/* This file has been generated by the Hex-Rays decompiler. Copyright (c) 2007-2017 Hex-Rays Detected compiler: Visual C++ */ #include #include #include #include //------------------------------------------------------------------------- // Function declarations #define __thiscall __cdecl // Test compile in C mode void __thiscall sub_401000(std::exception *this); void *__thiscall sub_401010(void *this, char a2); void __cdecl sub_401060(int a1, int a2, 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); char *sub_4013F0(); const CHAR *__cdecl sub_401410(const char *a1, const char *a2); std::exception *__thiscall sub_401470(std::exception *this, struct exception *a2); _DWORD *__thiscall sub_401490(_DWORD *this); void __thiscall sub_4014A0(void *this, char a2, size_t a3); _DWORD *__thiscall sub_4014F0(_DWORD *this, unsigned int a2, unsigned int a3); void *__stdcall sub_401580(size_t a1); void *__thiscall sub_4015D0(const void **this, void *a2, size_t a3); BOOL __thiscall sub_401740(void *this, void *a2, char a3); const void **__thiscall sub_4017F0(const void **this, const void **a2, unsigned int a3, void *a4); const void **__thiscall sub_4018E0(_DWORD *this, void *a2, size_t a3); _DWORD *__thiscall sub_4019E0(_DWORD *this, void *a2); void __thiscall sub_401A20(_DWORD *this); char *__thiscall sub_401A30(char *this, const char *a2); void __thiscall sub_401A80(CHAR *this); CHAR *__thiscall sub_401BB0(CHAR *this); void *__thiscall sub_401BD0(void *this, char a2); void __thiscall sub_401C00(void *); // idb int __thiscall sub_401C20(_DWORD *this, int a2, int a3, size_t a4); _DWORD *__thiscall sub_401D10(int this, void *a2, size_t a3); _DWORD *__thiscall sub_401E30(void *this, void *a2); int __thiscall sub_401ED0(int this, int a2); char __thiscall sub_401F90(volatile LONG **this, int a2); void __thiscall sub_4020A0(int this, int a2); void __thiscall sub_4020E0(int this, float a2); int __cdecl sub_402110(int a1); LONG __thiscall sub_402270(volatile LONG *this); char __thiscall sub_4022A0(void *this, int a2); signed int __thiscall sub_4022D0(_WORD *this, char a2); int __cdecl sub_4022F0(int, int, int, int, float, float, int, int); // idb // _DWORD __stdcall unknown_libname_1(_DWORD); weak void *sub_4023A0(); void __thiscall sub_4023C0(void **this, char *Src); // int __usercall sub_4023D0@(int a1@, double a2@); // int __usercall sub_402420@(int a1@, double a2@); int __thiscall sub_402470(void *this, _DWORD *a2, int *a3); int __thiscall sub_4024A0(void *this, _DWORD *a2); int __thiscall sub_4024E0(void *this, _DWORD *a2); int __thiscall sub_402520(void *this); int __thiscall sub_402530(void *this); int __thiscall sub_402560(void *this); int __thiscall sub_402570(void *this); signed int __thiscall sub_4025A0(float *this); signed int __thiscall sub_4025B0(float *this); void __thiscall sub_4025C0(float *this, signed int a2); void __thiscall sub_4025D0(float *this, signed int a2); int __thiscall sub_4025E0(void *this, _DWORD *a2, int *a3); int __thiscall sub_402610(void *this, _DWORD *a2); _DWORD *__thiscall sub_402660(void *this, _DWORD *a2, _DWORD *a3); _DWORD *__thiscall sub_402690(void *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_4026C0(_BYTE *this, char a2); char __thiscall sub_4026D0(_BYTE *this); signed int __thiscall sub_4026E0(_WORD *this, char a2); int __thiscall sub_402700(_BYTE *this); void __thiscall sub_402710(int this, float a2); double __thiscall sub_402760(float *this); int __thiscall sub_402770(float *this, float a2); void __thiscall sub_4027A0(int this, const void *a2); int __thiscall sub_4027C0(_DWORD *this, int a2); int __thiscall sub_4027E0(_DWORD **this, int a2, int a3); int __thiscall sub_402820(void *this); bool __thiscall sub_402830(void *this, int a2, int a3); char __thiscall sub_402890(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5); char __thiscall sub_402920(void *this, int a2, int a3, int a4); char __thiscall sub_4029A0(_BYTE *this); char __thiscall sub_4029B0(_BYTE *this, char a2); bool __thiscall sub_4029C0(_DWORD *this, signed int a2, signed int a3); int __thiscall sub_402A70(_DWORD *this); char __thiscall sub_402A80(_BYTE *this, char a2); char __thiscall sub_402A90(_BYTE *this); _DWORD *__thiscall sub_402AA0(_DWORD *this, _DWORD *a2); void *__thiscall sub_402B30(void *this, char a2); char __cdecl sub_402B70(int a1, int a2); int __cdecl sub_402BA0(int a1, int a2); int __thiscall sub_402BF0(_DWORD *this); int __thiscall sub_402C40(_DWORD *this, _DWORD *a2); int __thiscall sub_402CA0(_DWORD *this, int *a2); int __thiscall sub_402D80(_DWORD *this, _DWORD *a2, _DWORD *a3); int __thiscall sub_402E40(void *this, int a2, int a3, int a4, int a5); int __thiscall sub_402EC0(void *this, int a2, int a3, int a4, int a5); int __thiscall sub_402F40(void *this, int a2, int a3, int a4, int a5); int __thiscall sub_402FC0(_DWORD *this, int a2); bool __thiscall sub_403060(_DWORD *this); // bool __userpurge sub_4030A0@(_DWORD *a1@, double a2@, signed int a3, signed int a4); // char __userpurge sub_4031B0@(_DWORD *a1@, double a2@, int a3, int a4, _DWORD *a5, _DWORD *a6); // int __usercall sub_4032B0@(int a1@, double a2@); // int __usercall sub_403330@(int a1@, double a2@); int __thiscall sub_4033C0(_DWORD *this, int a2); int __thiscall sub_4033D0(_DWORD *this); int __thiscall sub_403400(_DWORD *this); void __thiscall sub_403430(_DWORD *this, unsigned int a2); void __thiscall sub_403470(_DWORD *this, unsigned int a2); void __thiscall sub_4034B0(_DWORD *this); void __thiscall sub_4034F0(_DWORD *this); void __thiscall sub_403530(_DWORD *this, unsigned int a2, char a3); void __thiscall sub_403570(_DWORD *this, unsigned int a2, char a3); LONG __thiscall sub_4035B0(_DWORD *this, int a2); int __thiscall sub_4035D0(_DWORD *this); _DWORD *__thiscall sub_4035F0(_DWORD *this, _DWORD *a2, _DWORD *a3); int __thiscall sub_403620(_DWORD *this, _DWORD **a2); int __thiscall sub_403700(_DWORD *this, int a2); char __thiscall sub_403790(_DWORD *this, int a2); void __thiscall sub_403830(_DWORD *this, float a2); double __thiscall sub_403950(_DWORD *this); _DWORD *__thiscall sub_403A70(_DWORD *this, _DWORD *a2, _DWORD *a3); int __thiscall sub_403B40(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); void __thiscall sub_403B80(float *this, float a2, float a3); double __thiscall sub_403BA0(float *this); int __thiscall sub_403BB0(_DWORD *this, _DWORD *a2); void __thiscall sub_403BF0(float *this, float a2); void __thiscall sub_403C00(float *this, float a2); void __thiscall sub_403C10(float *this, float a2); void __thiscall sub_403C20(float *this, float a2); void __thiscall sub_403C40(float *this, float a2); void __thiscall sub_403CB0(float *this, float a2, float a3); void __thiscall sub_403D20(int this, float a2); void __thiscall sub_403DB0(int this, int a2); void __thiscall sub_403E60(int this, signed int a2, signed int a3); void __thiscall sub_403EA0(int this, float a2, float a3); float *__thiscall sub_403ED0(float *this); void __thiscall sub_404020(_DWORD *this); float *__thiscall sub_4040A0(float *this, float *a2); void __thiscall sub_404380(float *this, int a2); float *__thiscall sub_404460(float *this, float *a2, float *a3); void __thiscall sub_404490(float *this, float a2, int a3); float *__stdcall sub_4044C0(char *a1, int a2, int a3); void *__thiscall sub_404520(void *this, char a2); void __noreturn sub_404580(); BOOL sub_404660(); int __cdecl sub_404790(void *, int, int, int, int, int); // idb BOOL __stdcall EnumFunc(HWND, LPARAM); // idb int __stdcall sub_4049C0(HWND hWnd, int); // idb DWORD __thiscall sub_404CD0(_BYTE *this, HWND *a2, _DWORD *a3); void *__thiscall sub_404D60(void *this); int __thiscall sub_404D70(char *this); LRESULT __stdcall fn(int code, WPARAM wParam, LPARAM lParam); // idb LRESULT __stdcall sub_404E20(int code, WPARAM wParam, LPARAM lParam); // idb _DWORD *__thiscall sub_404E60(_DWORD *this); bool __thiscall sub_404E70(_DWORD *this); _DWORD *__cdecl sub_404FA0(_DWORD *a1); char __thiscall sub_4050A0(LONG dwNewLong, int a2, int a3, int a4, int a5); LRESULT __stdcall sub_405250(int a1, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); int __thiscall sub_405430(_DWORD *this); char __thiscall sub_4054A0(HWND *this, HWND *a2, HINSTANCE *a3, int *a4, int a5); LRESULT __stdcall sub_405680(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); char __stdcall sub_4056D0(HINSTANCE *a1); char __stdcall sub_405780(int a1, void *a2, void *a3, int a4); char __stdcall sub_405A00(int a1, void *a2, void *a3, int a4); int __cdecl sub_405AE0(int a1); __int64 __thiscall sub_405B60(_DWORD **this); int __cdecl sub_405B80(int a1); void *__thiscall sub_405BE0(void *this, char a2); int __thiscall sub_405C10(_DWORD *this, int a2, char *a3); std::exception *__thiscall sub_405CF0(std::exception *this, struct exception *a2); std::exception *__thiscall sub_405D10(std::exception *this, struct exception *a2); std::exception *__thiscall sub_405D40(std::exception *this, struct exception *a2); void *__thiscall sub_405D70(void *this, char a2); void *__thiscall sub_405DA0(void *this, char a2); _DWORD *__thiscall sub_405E00(_DWORD *this); int __thiscall sub_405E40(_DWORD *this); void *__thiscall sub_405E60(void *this, char a2); void *__thiscall sub_405EA0(void *this, char a2); _DWORD *__thiscall sub_405EF0(_DWORD *this); int __thiscall sub_405F20(_DWORD *this); void __thiscall sub_405F40(_DWORD *this); void **__thiscall sub_405F80(void *this, char a2); _DWORD *__thiscall sub_405FD0(_DWORD *this, int a2); bool __thiscall sub_406000(_DWORD *this, _DWORD *a2); _BYTE *__thiscall sub_406070(_BYTE *this); _BYTE *__thiscall sub_4060C0(_BYTE *this); int __thiscall sub_406120(_BYTE **this); _BYTE *__cdecl sub_406190(_BYTE *a1, const char *a2); _DWORD *__thiscall sub_406450(void *this, void *a2); void *__cdecl sub_4064D0(void *a1, int a2, void *a3); int __thiscall sub_406520(char *this); _BYTE *__thiscall sub_406550(_BYTE *this, _BYTE *a2); int *__thiscall sub_406570(char *this, int *a2); int *__thiscall sub_4065B0(char *this, int *a2); int *__thiscall sub_4065F0(char *this, int *a2); int *__thiscall sub_406630(char *this, int *a2); int *__thiscall sub_406670(char *this, int *a2); int *__thiscall sub_4066B0(char *this, int *a2); int *__thiscall sub_4066F0(char *this, int *a2); int *__thiscall sub_406730(char *this, int *a2); int *__thiscall sub_406770(char *this, int *a2); int __stdcall sub_4067B0(int a1, int a2, int a3, int a4); char __stdcall sub_406870(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_406900(int a1, int a2); int __thiscall sub_406980(_BYTE *this, int a2, int a3, int a4, int a5); char __stdcall sub_406A30(_DWORD *a1, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); char __stdcall sub_406B10(int a1); char __stdcall sub_406BA0(int a1, int a2, int a3, int a4, char a5); char __stdcall sub_406C20(int a1, int a2); int __stdcall sub_406C50(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_406C70(int a1, int a2, int a3, int a4); char __stdcall sub_406D00(int a1, int a2, int a3); char __thiscall sub_406D30(_BYTE *this, int a2, int a3, _DWORD *a4, int a5); struct _RTL_CRITICAL_SECTION *__thiscall sub_406EE0(struct _RTL_CRITICAL_SECTION *this, int a2); int __thiscall sub_407100(_DWORD *this); int __thiscall sub_407220(int this, int a2); int __thiscall sub_407310(int this, int a2); int __stdcall sub_407410(int a1, int a2); char __stdcall sub_407490(int a1, int a2, int a3, int a4); char __stdcall sub_4074C0(int a1, int a2, int a3); char __stdcall sub_4074F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); char __stdcall sub_407570(int a1); int __stdcall sub_4075A0(int a1); char __stdcall sub_4075C0(int a1, int a2, int a3, int a4, int a5); char __stdcall sub_4075F0(int a1, int a2); char __stdcall sub_407620(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_4076A0(int a1, int a2); int __stdcall sub_4076C0(int a1, int a2, int a3, int a4, int a5); char __stdcall sub_4076E0(int a1, int a2, int a3, int a4); int __stdcall sub_407770(int a1, int a2, int a3, int a4); int __stdcall sub_407800(int a1, int a2, int a3); int __thiscall sub_407820(int *this); char __stdcall sub_407840(int a1, int a2, int a3); int __stdcall sub_4078C0(int a1, int a2, int a3, int a4); int __stdcall sub_4078E0(int a1, int a2, int a3); int __stdcall sub_407960(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_4079E0(int a1, int a2, int a3, int a4); char __stdcall sub_407A90(int a1, int a2, int a3, int a4, int a5); char __stdcall sub_407B60(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_407BF0(int a1, int a2, int a3); char __stdcall sub_407C80(int a1, int a2, int a3); char __stdcall sub_407D00(int a1, int a2, int a3, int a4); signed int __stdcall sub_407D80(int a1, int a2, int a3, int a4); _DWORD *__stdcall sub_407E30(_DWORD *a1, int a2, int a3, int a4); char __stdcall sub_407EE0(int a1, int a2, int a3, int a4); _DWORD *__stdcall sub_407F90(_DWORD *a1, int a2, int a3, int a4, int a5); int __stdcall sub_408060(int a1, int a2, int a3, int a4, int a5, int a6, int a7); char __stdcall sub_408110(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __stdcall sub_4081A0(int a1, int a2, int a3, int a4, int a5); char __stdcall sub_408220(int a1, int a2, int a3, int a4, int a5); _DWORD *__stdcall sub_4082B0(_DWORD *a1); _DWORD *__thiscall sub_4082D0(_DWORD *this, char a2); char *sub_4083B0(); int __thiscall sub_4083D0(_DWORD **this); int __thiscall sub_408400(_DWORD *this); int __thiscall sub_408420(_DWORD *this); int __thiscall sub_408440(int this, char a2); int __thiscall sub_408480(_DWORD *this, int a2); LONG __thiscall sub_4084F0(_DWORD *this); int __thiscall sub_408640(int *this, volatile LONG *a2); _DWORD *__thiscall sub_408780(_DWORD *this); char __thiscall sub_408870(volatile LONG **this, int a2); int __thiscall sub_408DC0(int *this, int a2, int a3); volatile LONG *__cdecl sub_408E30(int a1); LONG __stdcall sub_408F80(int a1, int a2, LONG a3); void __thiscall sub_409040(_DWORD *this); void **__thiscall sub_4090B0(void *this, char a2); const CHAR *__cdecl sub_4090F0(int a1); void **__thiscall sub_4091D0(void *this, char a2); void *__thiscall sub_409250(void *this, char a2); char __thiscall sub_409290(_BYTE *this, char a2); int __thiscall sub_4092B0(_DWORD *this, int a2, int a3); char __thiscall sub_4092E0(_DWORD **this, int a2); int __thiscall sub_409380(char *this, char a2); LONG __thiscall sub_409420(_DWORD *this); _DWORD *__thiscall sub_409560(_DWORD *this); LONG __thiscall sub_409680(int this, unsigned __int8 a2); int __thiscall sub_409730(char *this, char a2); volatile LONG *__cdecl sub_409860(int a1); int __thiscall sub_409990(_DWORD *this, char *a2); int __thiscall sub_409BE0(_DWORD **this, unsigned __int8 a2); int __thiscall sub_409F00(int this); char __thiscall sub_409F40(void *this, int a2); char __cdecl sub_40A760(char a1); void *__stdcall sub_40A800(char *a1); void **__thiscall sub_40A880(void *this, char a2); int __thiscall sub_40A8C0(_DWORD *this, unsigned int a2, unsigned int a3); const CHAR *__cdecl sub_40A910(int a1); char __thiscall sub_40A9F0(_DWORD *this, int a2, size_t a3, char a4); void **__thiscall sub_40AA30(void *this, char a2); const CHAR *__cdecl sub_40AAB0(unsigned __int8 a1); void *__thiscall sub_40AB20(void *this, char a2); int __thiscall sub_40AB50(_DWORD *this, size_t a2, char a3); const void **__thiscall sub_40AC00(_DWORD *this, void *a2); void __cdecl sub_40ACB0(int a1, int a2); _DWORD *__cdecl sub_40AD50(int a1, int a2, void *a3); void __thiscall sub_40AE10(void **this); int __thiscall sub_40AE60(_DWORD *this); unsigned int __thiscall sub_40AEB0(int *this, char *a2); unsigned int __thiscall sub_40AFE0(int *this, int a2); void __thiscall sub_40B060(int *this, const void **a2); // char __usercall sub_40B170@(BYTE *a1@); char __thiscall sub_40B1F0(char *this); // char __usercall sub_40B320@(const char *a1@); _DWORD *__thiscall sub_40B380(_DWORD *this); char __thiscall sub_40B3A0(unsigned __int8 *this); char __thiscall sub_40B3C0(_DWORD *this); char __thiscall sub_40B3E0(_DWORD *this); char __thiscall sub_40B430(_DWORD *this, char a2); _DWORD *__thiscall sub_40B480(void *this); int __thiscall sub_40B4D0(_DWORD **this); int __thiscall sub_40B4F0(int this); void __thiscall sub_40B510(_DWORD *this); _DWORD *__thiscall sub_40B5F0(_DWORD **this, int a2, int a3, int a4); float *__thiscall sub_40B700(_DWORD *this); float *__thiscall sub_40B790(_DWORD *this); void __thiscall sub_40B820(_DWORD *this, int a2); char __thiscall sub_40B8C0(_DWORD *this); int __thiscall sub_40B980(_DWORD *this, float a2); char __thiscall sub_40BC40(_DWORD *this, int a2, int a3); int ***__thiscall sub_40BCF0(_DWORD *this); char __thiscall sub_40BE10(int this); void __thiscall sub_40BE80(int this); char __thiscall sub_40BFB0(char *this); int __cdecl sub_40C080(int a1, volatile LONG **a2, char *a3, int a4); int __cdecl sub_40C0B0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned int a3); char *__thiscall sub_40C140(char *this, char *a2); int sub_40C170(); const CHAR *__cdecl sub_40C190(int a1); void __thiscall sub_40C270(_DWORD *this, int a2); signed int __thiscall sub_40C2F0(unsigned __int8 *this, unsigned int a2, unsigned int a3, unsigned __int8 *a4, unsigned int a5); int __cdecl sub_40C360(int a1, int a2); void ***sub_40C3B0(); char *__thiscall sub_40C3C0(_DWORD *this, char *a2); signed int __thiscall sub_40C420(int this, int a2); int __stdcall sub_40C450(char *a1); bool __stdcall sub_40C4B0(int a1, int a2); int __cdecl sub_40C4E0(unsigned __int8 a1, _DWORD *a2); _DWORD *__cdecl sub_40C590(unsigned int a1, char a2, unsigned __int8 a3, _DWORD *a4); int __cdecl sub_40C8D0(void *); // idb int __thiscall sub_40C9A0(int *this); int __thiscall sub_40C9E0(int *this); LONG __thiscall sub_40CA20(_DWORD *this); char __thiscall sub_40CAB0(volatile LONG **this, int a2, int a3); _DWORD *__thiscall sub_40CF20(_DWORD *this); int __thiscall sub_40CFD0(_DWORD **this, int a2); volatile LONG *__cdecl sub_40D0E0(int a1, int a2); void __thiscall sub_40D210(void *this); void __thiscall sub_40D2F0(void *this); void __thiscall sub_40D3D0(_BYTE **this); void __thiscall sub_40D4C0(_BYTE **this); void __thiscall sub_40D5B0(_DWORD *this); void __thiscall sub_40D690(_DWORD *this); void __thiscall sub_40D770(_DWORD *this, int a2, int a3); _BYTE *__cdecl sub_40D7F0(char a1); void *__thiscall sub_40D840(void *this, char a2); int __cdecl sub_40D870(unsigned __int8 a1, _DWORD *a2); char *sub_40D920(); int __thiscall sub_40D930(_DWORD *this, _DWORD *a2); int __thiscall sub_40D960(_DWORD *this, _DWORD *a2); int __thiscall sub_40D990(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_40D9C0(_DWORD *this); char *sub_40D9F0(); signed int sub_40DA00(); int __thiscall sub_40DA10(_DWORD **this, int a2, int a3, int a4); char __thiscall sub_40DA50(_BYTE *this, int a2); int __thiscall sub_40DA60(int this); _DWORD *__thiscall sub_40DA70(_DWORD *this, _DWORD *a2); void *__thiscall sub_40DAD0(void *this, char a2); void __thiscall sub_40DB00(_DWORD *this, int a2); void __thiscall sub_40DB50(LPCRITICAL_SECTION lpCriticalSection); void __stdcall sub_40DB70(_DWORD *a1); int sub_40DBD0(); _DWORD *__thiscall sub_40DC70(_DWORD *this); char *sub_40DC90(); char *sub_40DCB0(); void *__thiscall sub_40DCC0(void *this, char a2); int *sub_40DCF0(); int __thiscall sub_40DD00(_DWORD *this, int a2); int sub_40DD10(); void *__thiscall sub_40DD40(void *this, char a2); void __stdcall sub_40DD70(_DWORD *a1); _DWORD *__thiscall sub_40DE00(void *this, char a2); int __thiscall sub_40DE90(_DWORD *this); int *sub_40DF10(); int __thiscall sub_40DF80(_DWORD **this); void __thiscall sub_40E080(_DWORD *this); _DWORD *__thiscall sub_40E150(_DWORD *this); bool __thiscall sub_40E1C0(_DWORD *this); char __thiscall sub_40E260(_DWORD *this); _DWORD *__thiscall sub_40E4A0(_DWORD *this); void __thiscall sub_40E5B0(void **this); char __thiscall sub_40E780(int this); char __thiscall sub_40E910(void *this); void *__thiscall sub_40F300(_DWORD *this); void __thiscall sub_40F3A0(_DWORD *this); char __thiscall sub_40F420(_DWORD *this); char __thiscall sub_40F5B0(void *this, int a2); int __thiscall sub_40F670(_DWORD *this); _DWORD *__thiscall sub_40F6F0(void *this, char a2); int *sub_40F780(); int sub_40F790(); void *__thiscall sub_40F7A0(void *this, char a2); char __thiscall sub_40F820(_DWORD *this); int __thiscall sub_40F8B0(void *this, int a2, unsigned __int16 *a3); int __thiscall sub_40F960(void *this, int a2, int a3, int a4, unsigned __int16 *a5); int __thiscall sub_40FA00(_DWORD *this, _DWORD *a2); char __thiscall sub_40FA90(_DWORD *this, int a2); char __thiscall sub_40FD60(char **this, int a2, int a3); int __cdecl sub_40FD90(int a1); void *__thiscall sub_40FED0(void *this, char a2); void __thiscall sub_40FF60(_DWORD *this, float a2); char __thiscall sub_40FF80(_BYTE *this, char a2); char __thiscall sub_40FFA0(volatile LONG **this, int a2); char __thiscall sub_410490(int this); int __cdecl sub_410550(int a1); void *__thiscall sub_4106A0(void *this, char a2); char __thiscall sub_4106E0(_DWORD *this, int a2); void __thiscall sub_4107B0(_DWORD *this, int a2, int a3); char __thiscall sub_4108B0(_DWORD *this, int a2); int __cdecl sub_410A70(int a1); void *__thiscall sub_410BC0(void *this, char a2); void __thiscall sub_410C00(void *); // idb char *__thiscall sub_410C30(char *this, char *a2); char *__thiscall sub_410C50(char *this, char *a2); char __thiscall sub_410C80(void *this); _DWORD *__thiscall sub_410D20(_DWORD **this); void __thiscall sub_410DE0(_DWORD *this); char __thiscall sub_410F30(_DWORD *this); void __thiscall sub_4110B0(_DWORD *this); char __thiscall sub_411140(_DWORD *this); char __thiscall sub_4111D0(_DWORD *this); _DWORD *__thiscall sub_411430(_DWORD *this); void __thiscall sub_411640(_DWORD *this); char __thiscall sub_4118E0(_DWORD *this); void *__thiscall sub_412A70(_DWORD *this); char __thiscall sub_412B10(_DWORD *this, int a2); _DWORD *__thiscall sub_412BF0(_DWORD *this); int *sub_412C50(); int sub_412C60(); void *__thiscall sub_412C70(void *this, char a2); int __thiscall sub_412CA0(_DWORD **this, int a2); // char __usercall sub_412D20@(BYTE *a1@); char __thiscall sub_412DA0(char *this); // char __usercall sub_412ED0@(const char *a1@); int __thiscall sub_412F30(_DWORD **this); int __thiscall sub_412F60(_DWORD **this, int a2); _DWORD *__thiscall sub_412F90(void *this); _DWORD *__thiscall sub_412FB0(void *this); _DWORD *__thiscall sub_412FD0(void *this); int __thiscall sub_412FF0(int this); _DWORD *__thiscall sub_413020(void *this); void __thiscall sub_413050(_DWORD **this); int __thiscall sub_413080(int this); _DWORD *__thiscall sub_4130D0(void *this); int __thiscall sub_4130F0(_DWORD **this); char __stdcall sub_413110(const char *a1); // char __usercall sub_413230@(int a1@); int __stdcall sub_4133F0(_BYTE *a1, int a2); int __stdcall sub_413E70(_BYTE *a1, int a2); int __stdcall sub_414470(_BYTE *a1, int a2); char __thiscall sub_414EE0(void *this, int a2); void __thiscall sub_415460(_DWORD **this); int __thiscall sub_415500(char *this, int a2, int a3); char __thiscall sub_415660(_DWORD **this); char __thiscall sub_415880(volatile LONG *this); void __thiscall sub_415980(_DWORD *this); void __thiscall sub_415AB0(_BYTE *this); _DWORD *__thiscall sub_415B60(void *this); void __thiscall sub_415B90(_DWORD *this); volatile LONG *__thiscall sub_415BE0(void *this); _DWORD *__thiscall sub_415CB0(_DWORD **this); void __thiscall sub_415D20(_DWORD *this, int a2); char __fastcall sub_415DC0(_DWORD *a1); void __thiscall sub_415F00(volatile LONG *this, int a2, int a3); void __thiscall sub_415F30(_BYTE *this, char a2); _DWORD *__thiscall sub_416220(_DWORD **this); void __thiscall sub_416290(float **this); void __thiscall sub_416360(_DWORD *this, int a2, int a3, int a4); int __cdecl sub_416420(int a1); char __thiscall sub_416580(_DWORD *this, float a2); char *__thiscall sub_416970(char *this, char *a2); BOOL __thiscall sub_4169A0(_DWORD *this, _DWORD *a2); int __thiscall sub_4169E0(_DWORD *this, int a2); void __thiscall sub_416A10(_DWORD *this, int a2); void ***sub_416A60(); char *__thiscall sub_416A70(_DWORD *this, char *a2); _DWORD *__thiscall sub_416AD0(void *this, char a2); char __thiscall sub_416B60(_BYTE *this, char a2); int __thiscall sub_416BD0(int this); void __thiscall sub_416C20(int this); int __thiscall sub_416CC0(_DWORD *this); void __thiscall sub_416D20(char *this, float a2); _DWORD *__thiscall sub_416EF0(_DWORD *this); LONG __thiscall sub_416FF0(_DWORD *this); void __thiscall sub_417110(void *this, int a2, int a3); int __thiscall sub_417140(char *this, int a2, _DWORD *a3, int a4); void __thiscall sub_417190(int this); void __thiscall sub_417200(int this, float a2); void __thiscall sub_4172F0(_BYTE **this, float a2); volatile LONG *__cdecl sub_417320(int a1); char __thiscall sub_417450(void *this, int a2); int __thiscall sub_417B60(float *this, float a2, float a3, float a4); int __thiscall sub_417B90(unsigned __int8 *this, unsigned __int8 *a2, unsigned __int64 a3); int sub_417C40(); _BYTE *__cdecl sub_417C60(char a1); void *__thiscall sub_417CA0(void *this, char a2); char __thiscall sub_417CD0(_DWORD **this); int __thiscall sub_417D20(_DWORD **this, __int64 a2); void sub_417E10(); LONG __thiscall sub_417E50(_DWORD *this); int __thiscall sub_417F20(_DWORD **this); _DWORD *__thiscall sub_417F90(_DWORD *this); char __thiscall sub_4180D0(volatile LONG **this, void *a2); char __thiscall sub_419410(_DWORD *this, int a2, int a3); LONG __thiscall sub_419460(_DWORD *this, int a2); volatile LONG *__cdecl sub_4196A0(int a1); signed int __stdcall sub_4197D0(int *a1); void __stdcall sub_4198C0(int a1, _DWORD *a2, int a3); unsigned int __thiscall sub_4199B0(_DWORD *this, unsigned __int8 a2); BOOL __stdcall sub_4199D0(char a1, char a2); char *sub_4199F0(); bool __cdecl sub_419A10(__int64 a1, char a2); int sub_419A40(); void __thiscall sub_419A80(_DWORD *this); void **__thiscall sub_419AF0(void *this, char a2); void **__thiscall sub_419B30(void *this, char a2); LONG __thiscall sub_419BB0(_DWORD *this, int a2, int a3); char __thiscall sub_419CE0(_DWORD *this, int a2, int *a3); unsigned int __thiscall sub_419D70(_DWORD *this, unsigned int a2, _BYTE *a3, int *a4); int __cdecl sub_419E20(int a1); void *__thiscall sub_419E70(void *this, char a2); float *__cdecl sub_419EE0(float *a1, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); void (__stdcall ***__thiscall sub_41A140(_DWORD *this))(_DWORD, void *, int *); int __thiscall sub_41A230(_DWORD *this); void *__thiscall sub_41A370(void *this, char a2); _DWORD *__cdecl sub_41A3A0(int a1, int a2, char *Src, int a4); BOOL __cdecl sub_41A3C0(int a1, int a2, int a3, int a4, int a5, void ***a6); bool __cdecl sub_41A3F0(int a1, int a2, int a3, int a4, int a5, int *a6); char sub_41A450(); char __cdecl sub_41A4D0(int a1); char *sub_41A820(); const char *__cdecl sub_41A850(signed int a1); LPCSTR __thiscall sub_41D840(_DWORD *this, const CHAR *a2); char __thiscall sub_41D990(void *this, int a2, volatile LONG *a3); char __thiscall sub_41DA70(void *this, int a2, volatile LONG *a3); char __thiscall sub_41DB50(void *this, int a2, volatile LONG *a3); char __thiscall sub_41DCF0(volatile LONG **this, volatile LONG *a2); LONG __thiscall sub_41DFF0(void *this); _DWORD *__thiscall sub_41E0B0(_DWORD *this); int __thiscall sub_41E140(void *this, char a2, int a3); volatile LONG *__cdecl sub_41E230(int a1); volatile LONG *sub_41E360(char a1, int a2, int a3, char *a4, ...); char __thiscall sub_41E480(volatile LONG *this, int a2); char __thiscall sub_41E500(volatile LONG *this, unsigned int a2, int a3); char __thiscall sub_41E520(volatile LONG *this, int a2); unsigned int __cdecl sub_41E590(LPCSTR a1, LPCSTR lpString, int a3, int a4, char a5); _DWORD *__cdecl sub_41E790(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__cdecl sub_41E7F0(_DWORD *a1, _DWORD *a2, int a3); void __stdcall sub_41E850(_DWORD *a1, _DWORD *a2); _DWORD *__thiscall sub_41E8F0(_DWORD *this, _DWORD *a2, int *a3); char **__stdcall sub_41E9B0(char *a1, int a2, int a3); int __thiscall sub_41EA70(void **this, int a2, void *a3); void __thiscall sub_41EAD0(_DWORD *this); void __thiscall sub_41EB30(void **this); void __thiscall sub_41EB80(int this); _DWORD *__thiscall sub_41EC30(_DWORD *this, char *a2, int a3); int __thiscall sub_41ED20(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_41EE40(_DWORD **this, int a2); int __thiscall sub_41EE90(_DWORD *this, int a2, int a3); void *__thiscall sub_41EF00(void *this, char a2); int __thiscall sub_41EF30(_DWORD *this, int *a2); void __thiscall sub_41EFF0(_DWORD *this, int a2, void *a3, int a4); char __thiscall sub_41F080(volatile LONG *this); void __thiscall sub_41F0C0(_DWORD *this); void __thiscall sub_41F190(_DWORD *this); void __thiscall sub_41F260(_DWORD *this, int a2, int a3); char **__thiscall sub_41F2D0(char **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char **__thiscall sub_41F320(char **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_41F370(volatile LONG *this); _DWORD *__thiscall sub_41F410(_DWORD *this); LONG __thiscall sub_41F500(_DWORD *this); volatile LONG *__cdecl sub_41F5C0(int a1); char __thiscall sub_41F6F0(void *this, int a2); char **__stdcall sub_41FCC0(char *a1, int a2, int a3); void *__thiscall sub_41FD30(void *this, char a2); void __thiscall sub_41FE00(int this, float a2); void __thiscall sub_41FEB0(float *this, float a2); char __thiscall sub_41FF00(float *this, float a2); char __thiscall sub_41FF40(int this, float a2); char __thiscall sub_41FF80(void *this, int a2); int __cdecl sub_420270(int a1); void *__thiscall sub_4203D0(void *this, char a2); void sub_420410(); int *__cdecl sub_420870(int a1); int __stdcall Proc(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM); // idb void sub_420B70(); _DWORD *__cdecl sub_420D10(int a1); char sub_420DE0(); bool sub_420ED0(); int __cdecl sub_421050(int a1); unsigned __int8 *sub_421120(); char sub_4214D0(); void *__thiscall sub_4218A0(void *this, char a2); int __stdcall sub_4218D0(int a1, int a2, int a3, int (__thiscall *a4)(int)); void __cdecl sub_421900(BYTE *a1, char a2, BYTE a3, int a4); char *sub_421950(); void **__thiscall sub_421980(void *this, int a2); const char *__cdecl sub_421A00(char *a1); _DWORD *__thiscall sub_421A80(_DWORD *this); bool __cdecl sub_421AC0(char *Src, int a2, char a3); int __cdecl sub_421C10(int a1, int a2); int __thiscall sub_421C50(_DWORD *this); void *__thiscall sub_421CC0(void *this, char a2); _DWORD *__fastcall sub_421CF0(_DWORD *a1); void *__thiscall sub_421DA0(void *this, char a2); HWND __thiscall sub_421DD0(HWND *this); int __thiscall sub_421E10(_DWORD *this); BOOL __thiscall sub_421E60(HWND *this); char __thiscall sub_421F30(int this); BOOL __thiscall sub_421F90(HWND *this, int a2); char __thiscall sub_421FA0(void *this, int a2); char __thiscall sub_4223F0(void *this, int a2, int a3); int __cdecl sub_4224E0(int a1); HWND __thiscall sub_422640(_DWORD *this); _DWORD *__thiscall sub_422B00(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_422B70(_DWORD *this); BOOL __thiscall sub_422BA0(char **this); _DWORD *__thiscall sub_422BE0(_DWORD *this); _DWORD *__thiscall sub_422C40(_DWORD *this); _DWORD *__thiscall sub_422CA0(_DWORD *this); _DWORD *__thiscall sub_422D00(_DWORD *this, int a2); char __thiscall sub_422D60(_WORD *this, char a2); char __thiscall sub_422DD0(_WORD *this, char a2); _DWORD *__thiscall sub_422E10(_DWORD *this, char a2); int __fastcall sub_422F40(int a1); void __thiscall sub_422F90(int *this); signed int sub_422FE0(); _DWORD *__thiscall sub_422FF0(_DWORD **this, _DWORD *a2); struct std::ios_base *__thiscall sub_423030(struct std::ios_base *this, char a2); __int64 __thiscall sub_423080(_DWORD **this); void *__thiscall sub_4230A0(void *this, char a2); int __thiscall sub_4230D0(char *this, void *a2, int a3, size_t a4); // int __thiscall std::basic_filebuf>::_Reset_back(_DWORD); weak _DWORD *__thiscall sub_423190(_DWORD **this, _DWORD *a2); _DWORD *__thiscall sub_4231D0(_DWORD *this); signed int __stdcall sub_423230(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7); signed int __stdcall sub_423250(int a1, int a2, int a3, _DWORD *a4); int __stdcall sub_423270(int a1, int a2, int a3, unsigned int a4); _DWORD *__thiscall sub_423290(_DWORD *this, int a2); void *__stdcall sub_423320(char *a1); BOOL __thiscall sub_423380(_DWORD *this); _DWORD *__thiscall sub_4233C0(_DWORD *this); _DWORD *__thiscall sub_423420(_DWORD *this, int a2); _DWORD *__thiscall sub_4234D0(_DWORD *this, _DWORD *a2); char **__cdecl sub_423510(char **a1, char *a2, char *a3, _DWORD *a4); int *__cdecl sub_423590(int *a1, int a2, _BYTE *a3, char *a4, char *a5, int a6, char a7); int *__cdecl sub_423610(int *a1, int a2, _BYTE *a3, _BYTE *a4, _BYTE *a5, int a6, char a7); signed int __thiscall sub_423690(_DWORD *this); _DWORD *__thiscall sub_423720(_DWORD *this); _DWORD *__thiscall sub_423790(_DWORD *this); _DWORD *__thiscall sub_423800(void *this, char a2); _BYTE *__thiscall sub_423830(void *this, _BYTE *a2, _BYTE *a3); int __thiscall sub_4238A0(int this, unsigned __int8 a2); _BYTE *__thiscall sub_4238C0(char *this, _BYTE *a2, _BYTE *a3); int __thiscall sub_4238F0(int this, unsigned __int8 a2); _BYTE *__thiscall sub_423910(char *this, _BYTE *a2, _BYTE *a3); int __stdcall sub_423950(void *, int, void *); // idb int __stdcall sub_423990(void *, int, int, void *); // idb _DWORD *__thiscall sub_4239C0(void *this, char a2); _DWORD *__thiscall sub_423A10(_DWORD *this); int __thiscall sub_423AE0(_DWORD *this); int __thiscall sub_423B60(LPCRITICAL_SECTION *this); void __thiscall sub_423B70(LPCRITICAL_SECTION *this); signed int __stdcall sub_423B80(int a1); __int64 sub_423B90(); signed int sub_423BA0(); void *__thiscall sub_423BB0(void *this, int a2, int a3, int a4); int __thiscall sub_423BC0(_DWORD **this); __int64 __thiscall sub_423BF0(void *this, void *a2, int a3, int a4); __int64 __thiscall sub_423CC0(void *this, void *a2, int a3, int a4); _DWORD *__stdcall sub_423D90(_DWORD *a1, int a2, int a3, int a4, int a5); _DWORD *__stdcall sub_423DC0(_DWORD *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char *__thiscall sub_423DF0(struct std::ios_base *this, char a2); void *__thiscall sub_423E30(void *this, char a2); void __thiscall sub_423E60(_DWORD *this); int __thiscall sub_423EB0(int this, int a2, int a3); _DWORD *__thiscall sub_423F50(_DWORD *this); void __thiscall sub_424040(_DWORD *this); int __thiscall sub_424090(_BYTE *this); int __thiscall sub_424240(_BYTE *this); int __thiscall sub_424280(_DWORD *this, int a2, int a3); char __fastcall sub_4242F0(int a1); _DWORD *__thiscall sub_4243A0(_DWORD *this); int __stdcall sub_424400(char *a1, char *a2); int __thiscall sub_424430(const _Collvec *this, char *a2, char *a3, char *a4, char *a5); int __thiscall sub_424460(_WORD *this, int a2, int a3); _BYTE *__stdcall sub_424530(_BYTE *a1, _BYTE *a2, unsigned int a3, _DWORD **a4); _BYTE *__cdecl sub_4245A0(_BYTE *a1, _BYTE *a2, _BYTE *a3); struct std::_Locinfo *__thiscall sub_4245D0(struct std::_Locinfo *this, char *a2); int __thiscall sub_424680(std::_Lockit *this); // idb signed int __cdecl sub_424730(_DWORD *a1, int a2); int __thiscall sub_424810(_DWORD **this); int *__thiscall sub_424890(_DWORD *this, int *a2); struct std::locale::facet *__cdecl sub_4248C0(int a1); int __thiscall sub_424A00(int *this); signed int __thiscall sub_424AD0(_DWORD *this); bool __cdecl sub_424B00(char a1, FILE *a2); int __thiscall sub_424B20(_DWORD **this); // int __thiscall std::basic_filebuf>::_Set_back(_DWORD); weak signed int __thiscall sub_424BB0(int this, int a2); int __thiscall sub_424C40(_DWORD *this, char *a2, size_t a3, int a4); int __thiscall sub_424CA0(_DWORD **this, int a2); signed int __cdecl sub_424D50(_DWORD *a1, int a2); _DWORD *__thiscall sub_424E00(_DWORD *this, int a2, int a3, int a4, unsigned int a5); _DWORD *__thiscall sub_424EB0(_DWORD *this, int a2, int a3, int a4, char a5, int a6, int a7); void __thiscall sub_424F90(_DWORD *this); void *__thiscall sub_425030(void *this, char a2); struct std::locale::facet *__thiscall sub_425060(_DWORD *this); int __thiscall sub_425110(void *this, int a2, int a3, int a4); bool __thiscall sub_425140(_WORD *this); BOOL __cdecl sub_425160(int a1, int a2); _BYTE *__thiscall sub_425190(_DWORD *this, _BYTE *a2, _BYTE *a3, unsigned int a4); int __cdecl sub_4251B0(int a1, int a2, int a3); char __thiscall sub_425280(char *this, char a2); _DWORD *__thiscall sub_425420(void *this, char a2); struct std::locale::facet *__cdecl sub_425490(int a1); char __thiscall sub_4255D0(int *this, int a2, char *a3); bool __thiscall sub_425680(int this); BOOL __thiscall sub_425710(_DWORD *this, unsigned __int8 a2, unsigned __int16 a3); int __cdecl sub_425770(int a1, int a2, int a3); _BYTE *__thiscall sub_4258A0(int this, int a2); char __thiscall sub_425920(int this, int a2); void __stdcall sub_4259B0(int a1, unsigned __int16 a2, _DWORD *a3); int __thiscall sub_425A60(int this); _DWORD *__thiscall sub_425C50(_DWORD *this, int a2); int __thiscall sub_425C90(_DWORD *this, char *a2, int a3, int a4); char __thiscall sub_425D70(_DWORD *this); char *__cdecl sub_425EB0(char *a1, _DWORD *a2); void __cdecl sub_4260E0(int a1, unsigned int a2); int *__cdecl sub_426110(int *a1, int a2, _BYTE *a3, _BYTE *a4, _BYTE *a5, _DWORD *a6, char a7); int *__cdecl sub_4262C0(int *a1, int a2, _BYTE *a3, char *a4, char *a5, _DWORD *a6, char a7); char __thiscall sub_426470(int this); char __thiscall sub_4265F0(int this, int a2, int a3); int __cdecl sub_4267B0(int a1, int a2, int a3); void __thiscall sub_4267F0(const void **this, void *a2, void *a3, size_t a4, int a5); int __thiscall sub_426900(const void **this, int a2, unsigned int a3, void *a4); _DWORD *__thiscall sub_426940(_DWORD *this, void *a2); signed int __thiscall sub_4269F0(int this, signed int a2); int __thiscall sub_426BE0(int this, int a2, fpos_t a3, int Origin, int a5); int __thiscall sub_426CD0(_DWORD *this, int a2, __int64 Offset, int a4, int a5, int a6, int a7, int a8); _DWORD *__thiscall sub_426DB0(_DWORD *this); int __thiscall sub_426E40(_DWORD *this, int a2, _BYTE *a3, char a4); void __thiscall sub_427040(const void **this, void *a2, int a3, int a4, int a5); _DWORD *__thiscall sub_4271B0(void *this, _DWORD *a2); int __cdecl sub_427200(char, int, void *, int); // idb int __thiscall sub_427340(_DWORD *this); _DWORD *__thiscall sub_4273D0(void *this, char a2); unsigned int __thiscall sub_427470(unsigned int *this, char *a2); char __thiscall sub_427560(int this, char a2); signed int __cdecl sub_427640(_DWORD *a1, void *a2); signed int __thiscall sub_427740(int this, char a2); void __thiscall sub_4277E0(void **this, void *a2, size_t a3, int a4); _DWORD *__thiscall sub_427850(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_4279D0(_DWORD *this); void *__cdecl sub_427A80(void *a1, int a2, void *a3); unsigned int __thiscall sub_427B60(unsigned int *this, int a2); int __thiscall sub_427BE0(_Collvec *this, int a2, char *a3, _Collvec *a4); struct std::locale::facet *__cdecl sub_427CD0(int *a1); void __thiscall sub_427E10(void **this, int a2, int a3, int a4); _DWORD *__thiscall sub_427EA0(struct std::ios_base *this, char a2); unsigned int __thiscall sub_427EE0(unsigned int *this, unsigned int a2); struct std::locale::facet *__thiscall sub_427FB0(struct std::locale::facet **this); void *__thiscall sub_428060(struct std::locale::facet **this, void *a2, void *a3, size_t a4); char __thiscall sub_428160(struct std::locale::facet **this, __int16 a2); BOOL __thiscall sub_4281D0(struct std::locale::facet ***this, char a2, char a3); void *__thiscall sub_4282B0(struct std::locale::facet **this, void *a2, int a3, int a4); void __thiscall sub_4283B0(int this, void *a2, size_t a3, int a4); int __thiscall sub_428590(_DWORD *this, int a2); char __cdecl sub_428630(unsigned __int8 a1, size_t *a2, struct std::locale::facet **a3); int *__cdecl sub_4288F0(int *a1, int a2, char *a3, char *a4, char *a5, char a6, char a7); int *__cdecl sub_428980(int *a1, int a2, char *a3, char *a4, char *a5, char a6, char a7); _DWORD *__thiscall sub_428A10(_DWORD *this, int a2, int a3, char a4); int __thiscall sub_428B10(_BYTE **this, _BYTE *a2); char __thiscall sub_428CA0(int *this, int a2); int *__cdecl sub_428E40(int *a1, int a2, char *a3, char *a4, char *a5, _DWORD *a6, __int16 a7, char a8); int *__cdecl sub_428EE0(int *a1, int a2, char *a3, char *a4, char *a5, _DWORD *a6, __int16 a7, char a8); char __thiscall sub_428F80(int this); _DWORD *__thiscall sub_429030(int this); signed int __thiscall sub_429160(int this); int __thiscall sub_429280(int *this, int a2, char *a3); std::exception *__thiscall sub_4296E0(std::exception *this, struct exception *a2); char __thiscall sub_429700(int *this, int a2, char a3, char *a4); char __thiscall sub_4298F0(void *this); char __thiscall sub_429AB0(int this, int a2, char a3); char __thiscall sub_429C00(_DWORD *this); char __cdecl sub_429CB0(int a1, int a2, int a3, int *a4, int a5, char a6); char __thiscall sub_429DA0(_DWORD *this); char __thiscall sub_42A150(_DWORD *this); _DWORD *__thiscall sub_42A2D0(_DWORD *this, char a2); int __thiscall sub_42A300(_DWORD *this); int *__thiscall sub_42A440(int *this, const char *a2, unsigned int a3); char __thiscall sub_42A590(_BYTE *this, char a2); char __thiscall sub_42A5C0(void *this, unsigned __int8 *a2, _BYTE *a3, int a4); int __thiscall sub_42A6D0(int this, int a2); char __thiscall sub_42A6F0(_DWORD *this); char __thiscall sub_42A720(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, void *a6, int a7, int a8); float *__thiscall sub_42A820(_DWORD *this, float *a2); int __cdecl sub_42A8B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); void *sub_42AA10(); int __thiscall sub_42AA20(_DWORD *this, int a2); int __thiscall sub_42AA30(_DWORD *this, int a2); int __thiscall sub_42AA40(_BYTE *this, char a2); char __thiscall sub_42AA70(_BYTE *this, char a2); int __thiscall sub_42AA80(_DWORD *this); int __thiscall sub_42AA90(_DWORD *this, int a2); int __thiscall sub_42AAA0(_DWORD *this, int a2); void *__thiscall sub_42AAB0(void *this, char a2); void __thiscall sub_42AAF0(_DWORD *this, int a2); _DWORD *__thiscall sub_42AB40(_DWORD *this, int a2); void __thiscall sub_42AC00(_DWORD *this, signed int a2); char __thiscall sub_42AD00(_DWORD *this); _DWORD *__thiscall sub_42AD30(_DWORD **this, int a2); _DWORD *__thiscall sub_42AD40(_DWORD *this); char __thiscall sub_42AE00(_DWORD *this); void sub_42AEA0(); char sub_42AEC0(); signed int __thiscall sub_42AEF0(char *this, _BYTE *a2, _BYTE *a3); char __thiscall sub_42AFE0(_DWORD *this, unsigned int *a2, _DWORD *a3); char __thiscall sub_42B0B0(char *this); signed int __thiscall sub_42B100(int this, int a2); void __thiscall sub_42B1B0(_DWORD *this, unsigned int *a2); void __thiscall sub_42B250(char *this, _DWORD *a2); char __thiscall sub_42B2F0(volatile LONG **this, int a2); void __thiscall sub_42BC30(_BYTE *this); void __thiscall sub_42BCB0(char *this, int a2, int a3); volatile LONG *__cdecl sub_42BD40(int a1); void *__thiscall sub_42BE70(void *this, char a2); char sub_42BEB0(); int sub_42BEC0(); int __cdecl sub_42BF30(int a1); int __cdecl sub_42C0A0(int a1); int *__cdecl sub_42C210(int *a1, int a2); void __thiscall sub_42C4F0(_BYTE *this); void __thiscall sub_42C5C0(_BYTE *this); LONG __thiscall sub_42C670(_BYTE *this, int a2, const char *a3, LONG a4); void **__thiscall sub_42C760(void *this, char a2); void **__thiscall sub_42C7A0(void *this, char a2); void *__thiscall sub_42C820(void *this, char a2); void **__thiscall sub_42C850(void *this, char a2); void **__thiscall sub_42C890(void *this, char a2); void *__thiscall sub_42C910(void *this, char a2); char sub_42C940(); char __thiscall sub_42C980(_BYTE *this); BOOL __stdcall sub_42C990(int a1); void __thiscall sub_42C9D0(_DWORD **this); int __thiscall sub_42CA00(_DWORD **this, int a2); void __thiscall sub_42CAA0(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_42CB50(_DWORD **this); _DWORD *__thiscall sub_42CB60(_DWORD *this); LONG __thiscall sub_42CC70(_DWORD *this); char __thiscall sub_42CE90(int this, int a2); char __thiscall sub_42CEC0(_DWORD *this, int *a2); volatile LONG *__thiscall sub_42CFB0(_DWORD *this, _BYTE *a2); // int __usercall sub_42D070@(int a1@, int a2@); int __thiscall sub_42D220(void *this, int *a2, int *a3, void ***a4, _DWORD *a5, int *a6, const char *a7, int a8, int a9, int a10, int a11); int __stdcall sub_42D350(int *a1, volatile LONG ***a2, volatile LONG **a3, volatile LONG **a4, _DWORD *a5, int a6, int a7, int a8, int *a9, int *a10, _DWORD *a11, int a12, unsigned __int8 *a13); volatile LONG *__thiscall sub_42D4C0(void *this, int *a2, int *a3, volatile LONG **a4, _DWORD *a5, int a6, int a7); volatile LONG *__thiscall sub_42D580(void *this, int *a2, int *a3, volatile LONG **a4, _DWORD *a5, int *a6, int a7, int a8, int a9, int a10); void __thiscall sub_42D750(_DWORD *this); void __thiscall sub_42DA60(int this); // void __usercall sub_42E100(_DWORD *a1@, int a2@); int __stdcall sub_42E1C0(int *a1, volatile LONG ***a2, volatile LONG **a3, int a4, int a5, int a6); // void __userpurge sub_42E250(int a1@, int a2@, float a3); // int __usercall sub_42E5C0@(int a1@, int a2@); void __thiscall sub_42E620(_DWORD *this, int a2); // void __userpurge sub_42E860(int a1@, int a2@, char a3); void __thiscall sub_42E8C0(_DWORD **this, __int16 a2, int a3); void __thiscall sub_42EB50(_DWORD *this, float a2); void __thiscall sub_42ECC0(_DWORD *this); // void __userpurge sub_42F0C0(int a1@, int a2@, _BYTE *a3); void __thiscall sub_42F110(void (__stdcall ****this)(char **, void **), char *a2); char __thiscall sub_42F290(_DWORD *this, void (__thiscall **a2)(volatile LONG *, const CHAR *)); volatile LONG *__cdecl sub_430F00(void (__thiscall **a1)(volatile LONG *, const CHAR *)); int sub_431030(char *DstBuf, char *Format, ...); int sub_431050(char *DstBuf, char *Format, ...); void __thiscall sub_431070(void *); // idb BOOL __thiscall sub_431080(_DWORD *this, _DWORD *a2); BOOL __thiscall sub_4310B0(_BYTE *this, int a2); __int64 __thiscall sub_4310F0(_BYTE *this, int a2); int __thiscall sub_431140(_DWORD **this, int a2, int a3, int a4); int *__thiscall sub_4311C0(_DWORD *this, int *a2); const char *__stdcall sub_431250(void *a1, int a2, int a3, int a4); BOOL __thiscall sub_4315A0(_DWORD *this); _DWORD *__stdcall sub_4315D0(_DWORD *a1, int *a2, int a3); int sub_431660(); char *__thiscall sub_431680(char *this); int __cdecl sub_4316B0(_DWORD *a1); char __thiscall sub_431710(_DWORD *this, char *a2); int __stdcall sub_431760(char *Dst, int); // idb void *__thiscall sub_4317E0(void *this, char a2); _DWORD *__cdecl sub_431810(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__stdcall sub_431840(_DWORD *a1, _DWORD *a2); _DWORD *__thiscall sub_431900(_DWORD *this, _DWORD *a2); void __thiscall sub_4319D0(void *); // idb void __thiscall sub_431A50(void *); // idb _DWORD *__thiscall sub_431AE0(_DWORD *this, int a2); void *__thiscall sub_431BE0(void *this, char a2); void **__thiscall sub_431C10(void **this); int __thiscall sub_431CC0(_DWORD *this); int __thiscall sub_431D10(_DWORD *this); char __thiscall sub_431DB0(void **this, int a2, int a3, void *a4, _DWORD *a5, void *a6); char __thiscall sub_431E50(_DWORD *this, char a2); int __thiscall sub_431E90(_BYTE *this); int __thiscall sub_431F30(_WORD *this, unsigned __int16 a2); void __thiscall sub_431FC0(int this); void __thiscall sub_432060(_DWORD *this, float a2); int __thiscall sub_432280(int this); int __thiscall sub_4322A0(_DWORD **this, char a2); char __thiscall sub_432330(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_4323F0(_DWORD *this); char __thiscall sub_432420(_DWORD *this); int __thiscall sub_432450(_DWORD **this); LONG __thiscall sub_432510(_DWORD *this); volatile LONG *__cdecl sub_432640(int a1, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_432780(_DWORD *this); volatile LONG *__cdecl sub_4328D0(int a1); unsigned __int16 *__thiscall sub_432A00(_DWORD *this, int a2); char __thiscall sub_432A80(_DWORD *this, int a2, int a3); int __thiscall sub_432CB0(_BYTE **this); int __thiscall sub_432D10(_DWORD *this, char a2); _DWORD *__thiscall sub_432E70(_DWORD *this, _DWORD *a2); int __thiscall sub_433030(_DWORD *this); char __thiscall sub_433070(_BYTE *this, int *a2, int a3, int a4); char __thiscall sub_433110(void *this, void *a2); char __thiscall sub_433A10(int this, int a2, _DWORD *a3); void *__thiscall sub_433A80(void *this, char a2); void *__thiscall sub_433AC0(void *this, char a2); int __thiscall sub_433AF0(_DWORD *this, unsigned int a2); void *__thiscall sub_433B10(void *this, char a2); void *__thiscall sub_433B50(void *this, char a2); bool __thiscall sub_433B80(_DWORD *this, void *a2); _DWORD *__thiscall sub_433C30(_DWORD *this, void *a2); void __thiscall sub_433CD0(void **this); void __thiscall sub_433D40(_DWORD *this, int a2, char *a3, int a4); void __thiscall sub_433FA0(void ***this); _DWORD *__thiscall sub_434000(_DWORD *this, char *a2, int a3); int __thiscall sub_4340F0(char *this); int __thiscall sub_434160(char *this); unsigned int __thiscall sub_4341A0(char *this, int a2, unsigned int a3); void __thiscall sub_434280(_BYTE *this, int a2, unsigned int a3); char __thiscall sub_4342E0(char *this, char a2); int __thiscall sub_434320(_DWORD *this, int a2); LONG __thiscall sub_434350(_DWORD *this); int __thiscall sub_4344D0(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_434520(_DWORD *this); int __thiscall sub_434770(char *this); char __thiscall sub_4347E0(void *this, int a2); volatile LONG *__cdecl sub_434FE0(int a1); void *__thiscall sub_435110(void *this, char a2); signed int __thiscall sub_435170(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void __fastcall sub_435250(int a1); LONG __thiscall sub_435490(_DWORD *this); _DWORD *__thiscall sub_435530(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); _DWORD *__thiscall sub_4355F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void __thiscall sub_4356B0(_DWORD *this, int a2, _DWORD *a3); void __thiscall sub_435720(_DWORD *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_435790(_DWORD *this); bool __thiscall sub_4357D0(int this, _DWORD *a2); bool __thiscall sub_435800(int this, _DWORD *a2); char __thiscall sub_435830(char *this, signed int a2, _DWORD *a3); bool __thiscall sub_435860(char *this, signed int a2, _DWORD *a3); bool __thiscall sub_4358A0(char *this, signed int a2, _DWORD *a3); void *__thiscall sub_4358F0(void *this, char a2); _DWORD *__thiscall sub_435920(void *this, char a2); int __thiscall sub_4359B0(_DWORD *this); void __thiscall sub_435A30(_DWORD *this); int __thiscall sub_435A90(_DWORD *this); _DWORD *__thiscall sub_435B10(void *this, char a2); void *__thiscall sub_435BA0(void *this, char a2); HANDLE __cdecl sub_435BD0(LPCSTR lpszLongPath, int a2, int a3); bool __cdecl sub_435FF0(int a1, char *Format, va_list ArgList); bool sub_4360A0(int a1, char *Format, ...); bool sub_4360E0(int a1, char *Format, ...); bool sub_436120(int a1, char *Format, ...); void **sub_4361E0(); _DWORD *__thiscall sub_436240(_DWORD *this); void __thiscall sub_436260(_DWORD *this); int __stdcall sub_436270(int a1); void __thiscall sub_436280(_DWORD *this, _DWORD *a2); int __thiscall sub_4362D0(_DWORD *this); int __thiscall sub_4362E0(_DWORD *this); bool __thiscall sub_4362F0(int *this, char *a2); bool __thiscall sub_436360(_DWORD **this, void *a2, int a3); int __thiscall sub_4363E0(int *this); int *__thiscall sub_436400(int *this, void *a2, int a3); int __cdecl sub_436430(_DWORD *a1); signed int __cdecl sub_436470(int a1); signed int __cdecl sub_4364A0(int a1); int __cdecl sub_4364D0(_DWORD *a1); int __cdecl sub_436510(_DWORD *a1); signed int __cdecl sub_436560(_DWORD *a1); signed int __cdecl sub_4365F0(_DWORD *a1); signed int __cdecl sub_436670(_DWORD *a1); int __cdecl sub_4366B0(_DWORD *a1); int __cdecl sub_436700(_DWORD *a1); int __cdecl sub_436750(_DWORD *a1); int __cdecl sub_4367A0(_DWORD *a1); int __cdecl sub_4367F0(_DWORD *a1); int sub_436840(); signed int __cdecl sub_436880(_DWORD *a1); signed int __cdecl sub_4368E0(_DWORD *a1); _DWORD *__thiscall sub_4369E0(_DWORD *this); LONG __thiscall sub_436A10(_DWORD *this); signed int __cdecl sub_436A30(int a1); signed int __cdecl sub_436A60(int a1); signed int __cdecl sub_436AD0(int a1); int __cdecl sub_436AF0(_DWORD *a1); int __cdecl sub_436BE0(_DWORD *a1); signed int __cdecl sub_436CA0(_DWORD *a1); signed int __cdecl sub_436D20(_DWORD *a1); signed int __cdecl sub_436E00(_DWORD *a1); signed int __cdecl sub_436E50(int a1); signed int __cdecl sub_436E80(_DWORD *a1); int __cdecl sub_436F50(_DWORD *a1); int __cdecl sub_436FA0(_DWORD *a1); int __cdecl sub_436FC0(_DWORD *a1); int __cdecl sub_437030(_DWORD *a1); int __cdecl sub_437090(_DWORD *a1); int __cdecl sub_4370E0(_DWORD *a1); int __cdecl sub_437100(_DWORD *a1); int __cdecl sub_437120(_DWORD *a1); int sub_437140(); int sub_437180(); int __cdecl sub_4371C0(_DWORD *a1); int sub_437230(); int __cdecl sub_437270(_DWORD *a1); int __cdecl sub_4373A0(_DWORD *a1); int __cdecl sub_437400(_DWORD *a1); int __cdecl sub_437460(_DWORD *a1); int __cdecl sub_437530(_DWORD *a1); int __cdecl sub_437600(_DWORD *a1); int __cdecl sub_4377C0(_DWORD *a1); int __cdecl sub_437A20(_DWORD *a1); int __cdecl sub_437B30(_DWORD *a1); int __cdecl sub_437D30(_DWORD *a1); signed int __cdecl sub_437E50(_DWORD *a1); signed int __cdecl sub_437F50(_DWORD *a1); signed int __cdecl sub_4380D0(_DWORD *a1); int __cdecl sub_4382B0(_DWORD *a1); signed int __cdecl sub_438410(int a1); int __thiscall sub_4384B0(void *this); float *sub_4388B0(); float *__thiscall sub_438930(float *this, float *a2, float *a3); int sub_438970(); void *__thiscall sub_438990(void *this, char a2); float *__cdecl sub_4389C0(float *a1, unsigned __int8 a2); void *__thiscall sub_438A20(void *this, char a2); int __thiscall sub_438A50(_DWORD *this, float a2); void __thiscall sub_438A70(_DWORD *this); int __thiscall sub_438AC0(_DWORD *this); _DWORD *__thiscall sub_438B40(void *this, char a2); int __cdecl sub_438BD0(const char *a1); signed int __thiscall sub_438C50(int this, unsigned __int8 *a2); void __thiscall sub_438C80(_DWORD *this); _DWORD *__thiscall sub_438D10(_DWORD *this, _DWORD *a2, char *a3); int __thiscall sub_438E40(_DWORD *this, char *a2, int a3, int a4, int a5); int __cdecl sub_438F10(void *); // idb char ***__thiscall sub_438FC0(char ***this, int **a2); float *__thiscall sub_439080(char ***this, int a2); void *__thiscall sub_439180(void *this, char a2); char sub_4391D0(); char __thiscall sub_439360(_DWORD *this); void __thiscall sub_439380(_DWORD *this); _DWORD *__thiscall sub_439430(_DWORD *this); void (__thiscall ***__thiscall sub_4394D0(_DWORD *this, int a2))(_DWORD, signed int); int __thiscall sub_439550(_DWORD *this, float a2); char __thiscall sub_439620(_DWORD *this, void *a2); void **__thiscall sub_439810(void *this, char a2); void **__thiscall sub_439850(void *this, char a2); void *__thiscall sub_4398D0(void *this, char a2); _DWORD *__thiscall sub_439900(_DWORD *this); int sub_439930(); int sub_439950(); int __thiscall sub_439970(void *this); signed int __thiscall sub_4399A0(_DWORD *this, int a2); signed int __thiscall sub_4399D0(_DWORD *this, int a2); void __thiscall sub_439A50(void **this); _DWORD *__thiscall sub_439B20(_DWORD *this, void *a2); void __thiscall sub_439BD0(void *this, int a2); _DWORD *__thiscall sub_439D70(_DWORD *this, _DWORD *a2); void *__thiscall sub_439DA0(void *this, char a2); _DWORD *__thiscall sub_439DD0(void *this, char a2); _DWORD *__thiscall sub_439E20(void *this, char a2); _DWORD *__thiscall sub_439E90(_DWORD *this); int __cdecl sub_439EC0(_DWORD *a1); int __cdecl sub_439F00(_DWORD *a1); int sub_439F30(); int __cdecl sub_439F40(_DWORD *a1); int __cdecl sub_439FC0(_DWORD *a1); signed int __cdecl sub_43A090(int a1); signed int __cdecl sub_43A140(_DWORD *a1); signed int __cdecl sub_43A1F0(int a1); int __cdecl sub_43A280(_DWORD *a1); int __cdecl sub_43A310(_DWORD *a1); int sub_43A3A0(); int __cdecl sub_43A460(_DWORD *a1); int __cdecl sub_43A560(_DWORD *a1); int __cdecl sub_43A650(_DWORD *a1); int sub_43A6E0(); int __cdecl sub_43A760(_DWORD *a1); signed int __cdecl sub_43A7F0(int a1); signed int __cdecl sub_43A870(int a1); signed int __cdecl sub_43A900(int a1); signed int __cdecl sub_43A980(int a1); signed int __cdecl sub_43AA00(int a1); signed int __cdecl sub_43AA80(int a1); signed int __cdecl sub_43AB10(int a1); signed int __cdecl sub_43ABA0(int a1); signed int __cdecl sub_43AC20(int a1); signed int __cdecl sub_43ACA0(int a1); signed int __cdecl sub_43AD30(int a1); int __cdecl sub_43ADC0(_DWORD *a1); int __cdecl sub_43AE50(_DWORD *a1); int __cdecl sub_43AEF0(_DWORD *a1); int __cdecl sub_43AF90(_DWORD *a1); int __cdecl sub_43B030(_DWORD *a1); int __cdecl sub_43B0D0(_DWORD *a1); int __cdecl sub_43B170(_DWORD *a1); int __cdecl sub_43B210(_DWORD *a1); int __cdecl sub_43B2B0(_DWORD *a1); int __cdecl sub_43B330(_DWORD *a1); int __cdecl sub_43B3B0(_DWORD *a1); int __cdecl sub_43B430(_DWORD *a1); int __cdecl sub_43B4B0(_DWORD *a1); int __cdecl sub_43B530(_DWORD *a1); signed int __cdecl sub_43B5B0(int a1); int __cdecl sub_43B630(_DWORD *a1); signed int __cdecl sub_43B6B0(int a1); int __cdecl sub_43B740(_DWORD *a1); signed int __thiscall sub_43B7D0(_DWORD *this, int a2); signed int __thiscall sub_43B800(_DWORD *this, int a2); void __thiscall sub_43B9A0(void *this, int a2); void __thiscall sub_43BA70(void *this, int a2); signed int __cdecl sub_43BB40(_DWORD *a1); signed int __cdecl sub_43BC60(_DWORD *a1); signed int __cdecl sub_43BDA0(_DWORD *a1); signed int __cdecl sub_43BEC0(_DWORD *a1); signed int __cdecl sub_43BFC0(_DWORD *a1); int __cdecl sub_43C0A0(_DWORD *a1); int __cdecl sub_43C230(_DWORD *a1); int __cdecl sub_43C370(_DWORD *a1); signed int __cdecl sub_43C450(_DWORD *a1); signed int __cdecl sub_43C540(_DWORD *a1); signed int __cdecl sub_43C630(_DWORD *a1); signed int __cdecl sub_43C720(_DWORD *a1); int __cdecl sub_43C810(_DWORD *a1); int __cdecl sub_43C920(_DWORD *a1); int __thiscall sub_43CA30(void *this); void *__thiscall sub_43CEA0(void *this, char a2); _DWORD *__thiscall sub_43CED0(void *this, char a2); _DWORD *__thiscall sub_43CF20(void *this, char a2); char sub_43CF70(); void sub_43CF80(); void __cdecl sub_43CFD0(unsigned int a1); _DWORD *__cdecl sub_43D020(int a1); int __cdecl sub_43D0D0(unsigned int a1); void **__thiscall sub_43D150(void **this); char __thiscall sub_43D200(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); int __thiscall sub_43D240(_DWORD *this); int *__thiscall sub_43D330(char *this); char sub_43D430(); char *__thiscall sub_43D470(char *this); int *__thiscall sub_43D560(_DWORD *this, int *a2); char __thiscall sub_43D650(int this); char __thiscall sub_43D6D0(int this); char __thiscall sub_43D750(_DWORD *this); char __thiscall sub_43D780(_DWORD *this); char __thiscall sub_43D7B0(volatile LONG *this, int a2, int *a3); void __thiscall sub_43D820(_BYTE *this, int a2); void __thiscall sub_43D8B0(_BYTE *this, int a2); char __thiscall sub_43D940(char *this, int a2, int a3); void __thiscall sub_43DAC0(char *this, __int16 a2); void __thiscall sub_43DBD0(int this, float a2); char __thiscall sub_43DC70(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_43DD20(_BYTE *this, _BYTE *a2); volatile LONG *__cdecl sub_43DDA0(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_43DEE0(int a1); char __thiscall sub_43E010(void *this, int a2); int __thiscall sub_43E710(_DWORD **this, int a2); void *__thiscall sub_43E750(void *this, char a2); int __cdecl sub_43E790(const char *a1); void *__thiscall sub_43E820(void *this, char a2); char __thiscall sub_43E8D0(volatile LONG **this, int a2); int *__thiscall sub_43EA90(_DWORD *this, int a2, int a3); int __cdecl sub_43EB00(int a1); void *__thiscall sub_43EC60(void *this, char a2); void **__thiscall sub_43ECB0(void **this); char __thiscall sub_43ED60(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); char sub_43EDF0(); _DWORD *__thiscall sub_43EE20(_DWORD **this, int a2); void __thiscall sub_43EE80(int this); char __thiscall sub_43EF10(_DWORD *this, char a2); void __thiscall sub_43EF50(_DWORD *this, float a2); char __thiscall sub_43EFA0(int this, int a2, _DWORD *a3, int a4); char __thiscall sub_43F000(_DWORD *this); char __thiscall sub_43F020(_DWORD *this); char __thiscall sub_43F050(_DWORD *this); int *__thiscall sub_43F080(int this); // unsigned int __userpurge sub_43F0E0@(int a1@, int a2@, unsigned int a3, char a4, char a5); int *__thiscall sub_43F2A0(int this, int *a2); char __thiscall sub_43F370(_DWORD *this, int a2, int a3); signed int __thiscall sub_43F490(int *this); int __thiscall sub_43F4F0(int *this); char __thiscall sub_43F520(int this, int *a2, int a3, int a4); _DWORD *__thiscall sub_43F5F0(_DWORD *this); LONG __thiscall sub_43F6A0(_DWORD *this); signed int __thiscall sub_43F7E0(_DWORD *this); volatile LONG *__cdecl sub_43F870(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_43F9B0(int a1); char __thiscall sub_43FAE0(void *this, volatile LONG *a2); void __thiscall sub_4402E0(int this); void __thiscall sub_440490(int this, int a2, int *a3); int __thiscall sub_440520(_DWORD *this, unsigned int a2); void *__thiscall sub_440550(void *this, char a2); void *__thiscall sub_440590(void *this, char a2); int __cdecl sub_4405C0(char *a1); void *__cdecl sub_440720(char *a1); void __thiscall sub_440870(void **this, void *a2); void __thiscall sub_440CA0(_DWORD *this); int __thiscall sub_440D10(_DWORD *this, int a2); void **__thiscall sub_440D70(void *this, char a2); void **__thiscall sub_440DB0(void *this, char a2); char *__thiscall sub_440E30(void *this, char a2); bool __thiscall sub_440FB0(float *this); void __thiscall sub_440FD0(float *this, float a2, float a3); void __thiscall sub_441000(float *this); float *__thiscall sub_441020(float *this); void __thiscall sub_441070(_DWORD *this); void __thiscall sub_441080(int this); void __thiscall sub_4410A0(float *this, float a2); int __thiscall sub_4411A0(int this, float a2, float a3, float a4, int a5, float a6); int __thiscall sub_4411E0(int this, int a2, float a3); const void **__cdecl sub_4412F0(const void **a1, int a2); int sub_4413E0(); void *__thiscall sub_441400(void *this, char a2); int __cdecl sub_441430(__int16 a1); char sub_441480(); void sub_4414B0(); int __thiscall sub_4414D0(_DWORD *this); int __thiscall sub_441510(_DWORD *this); int __thiscall sub_441550(_DWORD *this); int __thiscall sub_441590(_DWORD *this); int __thiscall sub_4415D0(_DWORD *this); void __thiscall sub_441610(_DWORD *this, int a2, int a3); // int __userpurge sub_441690@(int a1@, int a2@, _BYTE *a3, _DWORD *a4, int *a5, int *a6, unsigned __int8 *a7); int __thiscall sub_441990(int *this); LONG __thiscall sub_441A60(_DWORD *this); int __thiscall sub_441B30(int *this); int __thiscall sub_441B50(void *this); int __thiscall sub_441CB0(_DWORD *this, int a2, _WORD *a3, unsigned __int8 *a4, unsigned __int8 *a5, unsigned __int8 *a6); int __cdecl sub_441EA0(int a1); void __thiscall sub_442000(_DWORD **this); void __thiscall sub_442110(_DWORD **this); char __thiscall sub_442140(volatile LONG **this, int a2); void *__stdcall sub_442A60(char *a1); void __thiscall sub_442AC0(_DWORD *this, int a2); void *__thiscall sub_442B20(void *this, char a2); char *__cdecl sub_442B50(char *a1, char *a2, char *a3); char **__thiscall sub_442B90(char **this, char **a2); void __thiscall sub_442C70(int *this, void *a2); _DWORD *__thiscall sub_442D40(_DWORD *this); char __thiscall sub_442D90(int this, int a2, int a3); char __thiscall sub_442EC0(float *this, int a2, __int16 a3, void *a4); void *__thiscall sub_443020(char *this, char a2); void *__thiscall sub_443030(char *this, char a2); int __thiscall sub_443040(float *this, int a2, float a3); double __thiscall sub_443070(float *this); double __thiscall sub_4430B0(float *this); float *__thiscall sub_443140(float *this, float *a2, float *a3); char __cdecl sub_443200(int *a1, float *a2); int __thiscall sub_443300(_DWORD *this, int a2); char __thiscall sub_443340(_DWORD *this, const char *a2, _DWORD *a3); int __thiscall sub_443370(_DWORD *this); int __thiscall sub_443380(_DWORD *this, int a2); int __thiscall sub_443390(_BYTE *this, char a2); bool __thiscall sub_443410(_BYTE *this); int __thiscall sub_443420(char *this); char *__thiscall sub_443430(char *this, char *a2); int __thiscall sub_443450(_DWORD *this); int __thiscall sub_443460(_DWORD *this); int __thiscall sub_443470(_DWORD *this); int __thiscall sub_443480(_DWORD *this); int __thiscall sub_443490(_DWORD *this); int __thiscall sub_4434A0(_DWORD *this); int __thiscall sub_4434B0(_DWORD *this); int __thiscall sub_4434C0(_DWORD *this); int __thiscall sub_4434D0(_DWORD *this, int a2); int __thiscall sub_4434E0(_DWORD *this, int a2); int __thiscall sub_4434F0(_DWORD *this, int a2); int __thiscall sub_443500(_DWORD *this, int a2); int __thiscall sub_443510(_DWORD *this, int a2); int __thiscall sub_443520(_DWORD *this, int a2); int __thiscall sub_443530(_DWORD *this); int __thiscall sub_443540(_DWORD *this); int __thiscall sub_443550(_DWORD *this, int a2); int __thiscall sub_443560(_DWORD *this, int a2); int __thiscall sub_443570(_DWORD *this, int *a2); void __thiscall sub_4435B0(void *this, float *a2); int __thiscall sub_4435E0(char *this); _DWORD *__thiscall sub_4435F0(_DWORD *this, _DWORD *a2); int __thiscall sub_443600(char *this); int __thiscall sub_443610(_DWORD *this); int __thiscall sub_443620(_DWORD *this, int a2); int __thiscall sub_443630(_DWORD *this); char __thiscall sub_443650(_BYTE *this); int __thiscall sub_443660(float *this, float a2); int __thiscall sub_443690(float *this, float a2); double __thiscall sub_4436C0(float *this); double __thiscall sub_4436E0(float *this); // int __userpurge sub_443700@(int a1@, double a2@, float a3); double __thiscall sub_4437B0(float *this); char __thiscall sub_4437C0(_DWORD *this); char __thiscall sub_443800(_DWORD *this); int __thiscall sub_443840(_DWORD *this, int a2); int __thiscall sub_443850(_DWORD *this); char __thiscall sub_443860(_BYTE *this); bool __thiscall sub_443870(_BYTE *this); bool __thiscall sub_443890(_BYTE *this); int __thiscall sub_4438A0(_BYTE *this, char a2, char a3); int __thiscall sub_4438F0(_DWORD *this); void *__thiscall sub_443900(void *this, char a2); char __thiscall sub_443940(char *this, _DWORD *a2, int *a3); int __thiscall sub_4439E0(_DWORD *this, _DWORD *a2); void __thiscall sub_443A20(_DWORD *this, void *a2); BOOL __thiscall sub_443A40(_DWORD *this); int __thiscall sub_443A60(_DWORD *this, float a2); _DWORD *__cdecl sub_443A80(int a1); void *__cdecl sub_443AD0(char *a1); void __thiscall sub_443C80(int this, int a2); int __thiscall sub_443CD0(_DWORD **this); int __thiscall sub_443D10(_DWORD **this); int __thiscall sub_443D80(_DWORD **this); __int16 __thiscall sub_443DA0(_WORD *this, __int16 a2); __int16 __thiscall sub_443DC0(_WORD *this); char __thiscall sub_443DD0(_DWORD **this); int __thiscall sub_443E70(_DWORD *this); char __thiscall sub_443EC0(void *this, int a2); char __thiscall sub_4442C0(_DWORD **this, int a2, int a3); int __cdecl sub_4442E0(int a1); void *__thiscall sub_444440(void *this, char a2); int __cdecl nullsub_1(_DWORD); // weak int nullsub_2(void); // weak int __cdecl nullsub_3(_DWORD); // weak int sub_4444B0(); int sub_4444E0(); int sub_444520(); int __thiscall sub_4445C0(_DWORD); // weak _DWORD *__thiscall sub_4445D0(_DWORD *this); char __thiscall sub_444650(_DWORD *this, _DWORD *a2, unsigned int a3); double __thiscall sub_444690(_DWORD *this, unsigned int a2); char __thiscall sub_4446C0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_4446F0(_DWORD *this, float *a2, float *a3); char __thiscall sub_444720(_DWORD *this, float *a2, float *a3); int __thiscall sub_444750(_DWORD *this, unsigned int a2); int __thiscall sub_444810(float *this, int a2); // void __userpurge sub_4448B0(int a1@, int a2@, int a3@, float a4); int __cdecl sub_444B50(int a1); char __thiscall sub_444CB0(void *this, void *a2); _DWORD *__thiscall sub_4450F0(void *this, char a2); volatile LONG *__cdecl sub_445180(volatile LONG *a1); void __thiscall sub_445290(_DWORD *this); void __thiscall sub_445310(int this, int a2); char __thiscall sub_4453C0(int **this, int a2, int a3); int __thiscall sub_445580(_DWORD *this); int __thiscall sub_4456A0(_DWORD **this, char a2); char __thiscall sub_445700(void *this, int a2); char __thiscall sub_445CC0(_DWORD *this); void __thiscall sub_445D00(int this, int a2, int a3); _DWORD *__thiscall sub_445D80(_DWORD *this); volatile LONG *__cdecl sub_445E60(int a1); void *__thiscall sub_445F90(void *this, char a2); bool __thiscall sub_446070(_DWORD *this, int a2, int a3, _DWORD *a4); char __thiscall sub_446100(_DWORD **this); void __thiscall sub_446160(int this); char __thiscall sub_4461F0(_DWORD *this, char a2); int __fastcall sub_446230(int a1, int a2, int a3, int a4, int a5); int __thiscall sub_446410(_DWORD *this); void __thiscall sub_4464C0(_DWORD *this, _BYTE *a2); char __thiscall sub_446550(_DWORD *this); char __thiscall sub_446580(_DWORD *this); int *__thiscall sub_4465B0(_BYTE *this); int __thiscall sub_446630(_DWORD **this); void __thiscall sub_4466E0(_DWORD *this); int *__thiscall sub_4467F0(_DWORD *this); void __thiscall sub_446870(int this); LONG __thiscall sub_4468C0(_DWORD *this); int __fastcall sub_4469F0(int a1, int a2, int a3); int __thiscall sub_447740(_DWORD *this); void __thiscall sub_447790(char *this, int a2, _BYTE *a3); int __cdecl sub_447800(int a1, int a2, int a3); char __thiscall sub_447970(_DWORD *this, int a2); void __thiscall sub_448380(_DWORD *this, float a2); _DWORD *__thiscall sub_4484A0(_DWORD *this); volatile LONG *__cdecl sub_4485D0(int a1); char __thiscall sub_448700(char *this, int a2); char __thiscall sub_4487F0(_BYTE *this, int *a2, int a3, int a4); void __thiscall sub_4488A0(_BYTE *this, int a2, _DWORD *a3, int a4); void __thiscall sub_448A50(_BYTE *this); void __thiscall sub_448BC0(_BYTE *this, int a2, int a3); void *__thiscall sub_448C30(void *this, char a2); void *__thiscall sub_448C70(void *this, char a2); int __thiscall sub_448CA0(char *this, int a2); int __thiscall sub_448D10(_DWORD **this, int a2, int a3); int __thiscall sub_448D80(_DWORD *this, int a2, int a3, int a4); char sub_448E20(); char __thiscall sub_448E70(_DWORD **this); int __thiscall sub_448EA0(_DWORD **this); char __thiscall sub_449050(_DWORD *this); int __thiscall sub_449080(_DWORD **this); void __thiscall sub_449100(_DWORD *this); char __thiscall sub_449150(_DWORD *this, int a2, int a3); char __thiscall sub_449240(_DWORD **this, unsigned int a2); char __thiscall sub_449300(int this, int a2); int __thiscall sub_449520(_DWORD *this, int a2); int __thiscall sub_449590(_DWORD *this, int a2); int __thiscall sub_449700(_DWORD *this, int a2); // int __userpurge sub_449770@(_DWORD **a1@, float a2@, int a3, int *a4, unsigned __int8 *a5, _BYTE *a6, _BYTE *a7, _BYTE *a8); int __thiscall sub_449D00(_DWORD *this, int a2); char __thiscall sub_44A0F0(_DWORD *this, int a2); char __thiscall sub_44A170(_DWORD *this, unsigned int a2); int __thiscall sub_44A1B0(_DWORD **this); int __thiscall sub_44A1F0(_DWORD **this); void __thiscall sub_44A340(int this, int a2, unsigned int a3); int __cdecl sub_44A410(int a1); _DWORD *__thiscall sub_44A550(_DWORD *this); LONG __thiscall sub_44A7D0(_DWORD *this); volatile LONG *__cdecl sub_44A8E0(int a1); int __thiscall sub_44AA10(_DWORD *this, _WORD *a2, int a3); char __thiscall sub_44AC20(void *this, int a2); // void __noreturn std::vector>::_Xlen(); weak void *__thiscall sub_44D630(void *this, char a2); void *__stdcall sub_44D670(char *a1); int __cdecl sub_44D6D0(__int16 a1); int __cdecl sub_44D720(int a1, int a2, int a3); unsigned int __thiscall sub_44D760(void **this, char *a2); unsigned int __thiscall sub_44D870(int this, int a2); void *__thiscall sub_44D8F0(void *this, char a2); int *__cdecl sub_44D920(void *a1, int a2, float a3); // void __usercall sub_44D950(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, float a8); // void __usercall sub_44D990(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, float a8); void __cdecl sub_44D9D0(int a1, int a2, int a3, int a4, int a5, float a6); void __cdecl sub_44DA30(int lpString, int a2, int a3, float a4); char __cdecl sub_44DB20(int a1, float a2); void __cdecl sub_44DC50(unsigned __int8 *a1); void __cdecl sub_44DD70(int a1, void *a2, int a3); void *__cdecl sub_44DFF0(unsigned __int8 *a1); // int SteamAPI_RunCallbacks(void); weak int __stdcall nullsub_4(int); // weak int __stdcall nullsub_5(int); // weak _DWORD *__thiscall sub_44E1E0(_DWORD *this); signed int sub_44E260(); int __thiscall sub_44E270(int this); int __thiscall sub_44E280(int this, int a2, int a3, int a4, int a5); void sub_44E2A0(); char sub_44E2B0(); char *__cdecl sub_44E2C0(int a1, int a2); bool __thiscall sub_44E530(int this, int a2, char a3); float *__thiscall sub_44E570(char *this); void __thiscall sub_44E770(int *this); void __thiscall sub_44E910(float **this, int a2); void __thiscall sub_44EA40(int *this, int a2); int *__cdecl sub_44EAB0(volatile LONG *a1, char a2); _DWORD *__thiscall sub_44EC60(_DWORD *this, int a2); char __thiscall sub_44EC80(_DWORD *this); char __thiscall sub_44ECB0(_DWORD *this); char __thiscall sub_44ECE0(_DWORD *this); char __thiscall sub_44ED20(int this, int a2, int a3); char __thiscall sub_44EDF0(_DWORD *this); void __thiscall sub_44EE50(_DWORD *this, int a2); void **__thiscall sub_44EEA0(void **this); char __thiscall sub_44EF50(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); void __thiscall sub_44F030(int this); int __thiscall sub_44F100(_DWORD *this, float a2); LONG __thiscall sub_44F190(int this, int a2, _DWORD *a3, int a4); char __thiscall sub_44F1F0(_DWORD *this); char __thiscall sub_44F220(_DWORD *this); int *__thiscall sub_44F250(int this); char __thiscall sub_44F2B0(_DWORD *this, const char *a2, unsigned __int16 a3, int a4); int __thiscall sub_44F370(_DWORD *this); _DWORD *__thiscall sub_44F3C0(_DWORD *this); LONG __thiscall sub_44F480(_DWORD *this); // int __userpurge sub_44F5C0@(int a1@, int a2@, _DWORD *a3); char __thiscall sub_44F7F0(_DWORD *this, int a2); char __thiscall sub_44F920(int this, int *a2, int a3, int a4); unsigned int __thiscall sub_44FA40(_DWORD *this); // int *__usercall sub_44FB60@(int a1@, int a2@); // char __usercall sub_44FBF0@(int a1@, int a2@); // void __usercall sub_44FC80(int a1@, int a2@); volatile LONG *__cdecl sub_44FD10(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_44FE50(int a1); // char __userpurge sub_44FF80@(_DWORD *a1@, int a2@, int a3, int a4); char __thiscall sub_44FFF0(void *this, volatile LONG *a2); void *__thiscall sub_450690(void *this, char a2); int __cdecl sub_4506D0(const char *a1); int __cdecl sub_450760(const char *a1); int __cdecl sub_4507F0(const char *a1); void *__thiscall sub_450880(void *this, char a2); int __cdecl sub_4508B0(const void *, const void *); // idb void sub_4508E0(); char sub_450900(); int __cdecl sub_4509F0(const void *, const void *); // idb void sub_450A20(); char sub_450A40(); int __cdecl sub_450B30(const void *, const void *); // idb void sub_450B60(); char sub_450B80(); char __stdcall sub_450C70(char a1); _BYTE *__thiscall sub_450CD0(_BYTE *this); void __thiscall sub_450CE0(_DWORD *this); void *__fastcall sub_450D30(int a1, int a2, int a3, int a4, void *a5); unsigned __int8 *__thiscall sub_450FE0(char *this, const char *a2, char a3); _DWORD *__thiscall sub_451100(_DWORD *this, const char *a2); void __thiscall sub_451160(_DWORD *this, int a2); _DWORD *__thiscall sub_4511D0(_DWORD *this, const char *a2, const char *a3); void *__thiscall sub_451260(void **this, int a2, int a3, int a4); void __thiscall sub_451280(_DWORD *this); int __thiscall sub_4512E0(char *this, const char *a2, char a3); _DWORD *__thiscall sub_451320(_DWORD *this, int a2); void __thiscall sub_451370(_DWORD *this); void *__thiscall sub_451410(void *this, char a2); void *__thiscall sub_451440(void *this, char a2); _DWORD *__thiscall sub_451470(void *this, char a2); int __thiscall sub_4514B0(_DWORD *this); // _DWORD *__userpurge sub_451530@(const char *a1@, _DWORD *a2, const char *a3); BOOL __cdecl sub_4515F0(const char *a1); char __thiscall sub_451660(const char **this, int a2, int a3, int a4); bool sub_4516B0(); int __cdecl sub_451700(const char *a1); char __cdecl sub_4518A0(const char *a1); char __cdecl sub_451A00(unsigned __int8 *a1); char __cdecl sub_451B00(const char *a1); _DWORD *__thiscall sub_4520E0(void *this, char a2); int sub_452120(); int sub_452140(); int sub_452160(); int sub_452180(); void **__thiscall sub_4521A0(void *this, char a2); void **__thiscall sub_452220(void *this, char a2); int __cdecl sub_4522A0(const char *a1); _DWORD *__thiscall sub_452330(void *this, char a2); _DWORD *__thiscall sub_4523C0(_DWORD *this); _DWORD *__thiscall sub_452400(_DWORD *this); void **__thiscall sub_452440(void *this, char a2); bool __cdecl sub_4524C0(char *Src, int a2, char a3); bool __cdecl sub_4525F0(char *Src, int a2, char a3); _DWORD *__thiscall sub_452720(_DWORD *this); bool __cdecl sub_452760(char *Src, int a2, char a3); void __thiscall sub_452890(_DWORD *this, const void **a2); const void **__stdcall sub_4529C0(char *a1, int a2, int a3); int __thiscall sub_452AA0(float *this, int a2); void __thiscall sub_452AF0(int this, int a2); char __thiscall sub_452B80(_DWORD *this); // char __usercall sub_452CA0@(void *a1@, int a2@); int __thiscall sub_452DF0(_DWORD *this); _DWORD *__thiscall sub_452F00(float *this); void __thiscall sub_452FA0(int this, int a2); void __thiscall sub_4530E0(int this, float a2); _DWORD *__thiscall sub_4531D0(_DWORD *this, int a2); int sub_453220(void); // weak char __thiscall sub_453230(_DWORD *this); void __thiscall sub_453440(_DWORD *this, float a2); _DWORD *__thiscall sub_4534E0(_DWORD *this); int sub_453510(); bool __thiscall sub_453660(_DWORD *this); char __thiscall sub_4536C0(float *this, int a2, float a3, float a4); void *__thiscall sub_453740(void *this, char a2); void *__thiscall sub_4537A0(void *this, char a2); int __thiscall sub_4537D0(_DWORD *this); _DWORD *__thiscall sub_453850(void *this, char a2); int __thiscall sub_4538E0(_DWORD *this); _DWORD *__thiscall sub_453960(void *this, char a2); void **__thiscall sub_4539F0(void *this, char a2); void *__thiscall sub_453A90(void *this, char a2); // int __cdecl sub_453AC0(double); idb int __cdecl sub_453AE0(double); // idb int __cdecl sub_453B00(double); // idb bool __cdecl sub_453B20(_DWORD *a1); char __thiscall sub_453B90(_BYTE *this, char a2); char __thiscall sub_453BA0(_BYTE *this, char a2); char __thiscall sub_453BB0(_BYTE *this, char a2); char __thiscall sub_453BC0(_BYTE *this, char a2); char __thiscall sub_453BD0(_BYTE *this, char a2); char __thiscall sub_453BE0(_BYTE *this, char a2); int __thiscall sub_453BF0(_DWORD *this, int a2); int *__thiscall sub_453C10(_DWORD *this, int a2, int a3); void __thiscall sub_453C30(_DWORD *this); bool __thiscall sub_453C40(_DWORD *this); int __thiscall sub_453C60(int this); void __thiscall sub_453D20(int this, int a2); char __stdcall sub_453D50(float a1, int a2); int __stdcall sub_453D90(int a1); bool __stdcall sub_453DC0(void *a1); bool __stdcall sub_453E00(void *a1); char sub_453E40(); char sub_453E70(); char sub_453EA0(); char __stdcall sub_453ED0(int a1); char __stdcall sub_453F60(char a1); bool __stdcall sub_453FF0(int a1); void __thiscall sub_454070(_DWORD *this); char __thiscall sub_454190(_DWORD *this, unsigned int a2, int *a3); char __thiscall sub_454240(_DWORD *this, void *a2, int a3); char __thiscall sub_454330(_DWORD *this, int *a2); char __thiscall sub_4543F0(_DWORD *this, _DWORD *a2, int *a3, _DWORD *a4); char __thiscall sub_454500(_DWORD *this, int *a2); void __thiscall sub_454580(_DWORD *this, int *a2); float *__thiscall sub_4546A0(float *this); LONG __thiscall sub_4547E0(_DWORD *this, int a2); int __thiscall sub_4549D0(_DWORD *this, char a2, int a3, int a4, int a5, float a6); char __thiscall sub_454A30(_DWORD *this, int a2); char __thiscall sub_454B90(_DWORD *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_454D20(_DWORD *this, void *a2, int a3); char __stdcall sub_454E00(void *a1); bool __stdcall sub_454E30(void *a1); char __thiscall sub_454E80(_DWORD *this, void *a2, int a3, int a4, int a5); char __thiscall sub_455040(_DWORD *this, void *a2, int a3, int a4, int a5); char __stdcall sub_455250(void *a1, int a2, int a3); char __stdcall sub_455370(void *a1, int a2, int a3); void *__thiscall sub_455500(void *this, char a2); char __thiscall sub_455570(_DWORD *this, int a2, int *a3); void __thiscall sub_455600(_DWORD *this); void **__thiscall sub_455690(void *this, char a2); void **__thiscall sub_4556D0(void *this, char a2); int *__thiscall sub_455710(void *this, int *a2, int a3); void **__thiscall sub_4557F0(void *this, char a2); void **__thiscall sub_455870(void *this, char a2); int __thiscall sub_4558F0(int this, float a2, float a3); void *__thiscall sub_455990(void *this, char a2); void __stdcall sub_4559C0(void *a1); char __thiscall sub_455A80(void *this, int a2, float *a3); char __thiscall sub_455B80(void *this, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6, float *a7); // int __userpurge sub_455C60@(_BYTE *a1@, double a2@, int a3); int __cdecl sub_455D00(int a1, int a2); void *__thiscall sub_455FB0(void *this, char a2); int __thiscall sub_455FF0(_DWORD *this, int a2); int __thiscall sub_456000(_DWORD *this, int a2, int a3); volatile LONG *__stdcall sub_456040(int a1, int a2, char a3, int a4, int a5, int a6, int a7); _DWORD *__stdcall sub_4560E0(void *a1, int a2); volatile LONG *__thiscall sub_4561C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, char a15); _DWORD *__thiscall sub_456260(_DWORD *this); void __thiscall sub_4562E0(_DWORD *this); void __thiscall sub_456380(_DWORD *this, int a2); volatile LONG *__thiscall sub_4563D0(int *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7); volatile LONG *__thiscall sub_456460(int *this, int a2, int a3); volatile LONG *__thiscall sub_4564D0(int *this, int a2, int a3, int a4); volatile LONG *__thiscall sub_456540(int *this, int a2, int a3, int a4, volatile LONG *a5, int a6); volatile LONG *__thiscall sub_4565F0(int *this, int a2, int a3, int a4, volatile LONG *a5, int a6); volatile LONG *__thiscall sub_4566A0(int *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8, int a9, int a10); volatile LONG *__thiscall sub_456760(int *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8); volatile LONG *__thiscall sub_456820(int *this, int a2, volatile LONG *a3); volatile LONG *__thiscall sub_456980(int *this, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, volatile LONG *a10, char a11); volatile LONG *__thiscall sub_456A50(int *this, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, volatile LONG *a10, int a11, int a12); volatile LONG *__thiscall sub_456B30(_DWORD *this, int a2, void *a3, int a4, int a5); volatile LONG *__thiscall sub_456E70(_DWORD *this, int a2, void *a3, int a4, int a5); void *__thiscall sub_4571B0(void *this, char a2); void *__cdecl sub_4571E0(void *a1, int a2, int a3); HWND __thiscall sub_4572A0(HWND *this); int __thiscall sub_4572E0(_DWORD *this); BOOL __thiscall sub_457340(HWND *this); BOOL __thiscall sub_457410(HWND *this, int a2); char __thiscall sub_457420(void *this, int a2); char __thiscall sub_4577B0(HWND *this, int a2, int a3); int __cdecl sub_457890(int a1); void __thiscall sub_4579F0(_DWORD *this, int a2, unsigned __int16 a3); void __thiscall sub_457A50(int this); _DWORD *__thiscall sub_457BE0(void *this, char a2); signed int __stdcall sub_457C50(int a1, int a2); int sub_457CF0(int a1, ...); int sub_457D40(); _DWORD *__thiscall sub_457E20(_DWORD *this); size_t __thiscall sub_457E60(_DWORD *this); size_t __thiscall sub_457EA0(wchar_t **this, char *a2); void __thiscall sub_457EC0(_BYTE *this); signed int __stdcall sub_457ED0(int a1, _WORD *a2, unsigned int a3, int a4); int sub_457F30(); char __stdcall sub_4580C0(int a1, int a2, const void *a3, int a4, int a5); int __stdcall sub_458140(int a1, int a2, int a3); wchar_t *__stdcall sub_4581C0(LPWSTR lpFilename, int a2, HMODULE hModule); int __stdcall sub_458270(int, HMODULE hModule, int); // idb signed int __stdcall sub_458530(_WORD *a1, unsigned int a2, int a3); _DWORD *__thiscall sub_4585C0(_DWORD *this); _DWORD *__thiscall sub_458690(_DWORD *this); void __thiscall sub_4586C0(_DWORD *this); void *__thiscall sub_4586E0(int this); void *__thiscall sub_4590C0(void *this, char a2); bool __thiscall sub_459140(volatile LONG **this, int a2, int a3, volatile LONG *a4, _DWORD *a5); LONG __thiscall sub_459170(_DWORD *this, LPCSTR lpString); int __cdecl sub_459270(int a1, int a2, int a3, int a4); char __thiscall sub_4593C0(_DWORD *this, LPCSTR lpString, int c, LPSIZE psizl); int __thiscall sub_459460(int this, int a2); void *sub_4594C0(); int sub_4594D0(int a1, char *a2, ...); int __thiscall sub_459520(void *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); void *__thiscall sub_459580(void *this, char a2); int __thiscall sub_4595C0(_DWORD *this, int a2); int __thiscall sub_4595E0(_DWORD *this); int __thiscall sub_459600(_DWORD *this, int a2); int __thiscall sub_459620(_DWORD *this, int a2); int __thiscall sub_459640(_DWORD *this, int a2); int __thiscall sub_459660(_DWORD *this); void __thiscall sub_459680(_DWORD *this, int a2); bool __thiscall sub_459720(void *this, int a2, int a3, _DWORD *a4); int __thiscall sub_459750(_DWORD *this); int __cdecl sub_459770(int a1, int a2, int a3); void *__thiscall sub_4598C0(void *this, char a2); char __thiscall sub_459900(_BYTE *this); int __thiscall sub_459910(_BYTE *this, int a2, int a3); int __thiscall sub_459940(_BYTE *this); char __thiscall sub_459960(_BYTE *this, char a2); char __thiscall sub_459980(_BYTE *this, char a2); int __thiscall sub_459990(_DWORD **this); int __thiscall sub_4599A0(_DWORD **this); int __thiscall sub_4599B0(_DWORD **this); LRESULT __thiscall sub_4599D0(_DWORD **this, int a2); int __thiscall sub_459A10(_DWORD **this); int __thiscall sub_459A20(_DWORD **this); int __thiscall sub_459A40(int this); HWND __thiscall sub_459A90(_DWORD **this, int a2); void __thiscall sub_459AD0(int this); HIMC __thiscall sub_459B00(_DWORD *this); HIMC __thiscall sub_459B60(_DWORD *this, int a2); int __thiscall sub_459BC0(_DWORD *this, int a2); int __thiscall sub_459BF0(_DWORD *this, int a2); char __thiscall sub_459C40(_DWORD *this); HWND __thiscall sub_459C60(_DWORD *this); _DWORD *__thiscall sub_459CC0(_DWORD *this); LONG __thiscall sub_459D30(void **this); void __thiscall sub_459EF0(_DWORD *this, float *a2); int __thiscall sub_459F40(_DWORD *this, int a2, int a3); int __thiscall sub_459F80(void *this, float a2); int __thiscall sub_45A180(_DWORD **this, int a2); int __thiscall sub_45A1D0(_DWORD *this); int __thiscall sub_45A1F0(_DWORD *this, int a2, int a3); void __thiscall sub_45A220(_DWORD **this, int a2); void __thiscall sub_45A2A0(_BYTE *this); char __thiscall sub_45A330(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12); _DWORD *__thiscall sub_45A710(_DWORD *this); LONG __thiscall sub_45A780(_DWORD *this); char __thiscall sub_45A8F0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12); volatile LONG *__cdecl sub_45A900(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); volatile LONG *__cdecl sub_45AA60(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); const void **__thiscall sub_45ABC0(const void **this, const void **a2); int __cdecl sub_45ABE0(int, float, float); // idb void __thiscall sub_45AC20(_DWORD *this); bool __thiscall sub_45AC70(void *this); void *__thiscall sub_45AC90(void *this, char a2); void *__thiscall sub_45ACC0(void *this, char a2); int __thiscall sub_45AD40(int *this, int a2); _DWORD *__thiscall sub_45AF30(_DWORD **this, int a2); char __thiscall sub_45AF40(volatile LONG *this, int a2, int a3); char __thiscall sub_45AFB0(volatile LONG **this, void *a2, int a3, int a4, int a5); int __cdecl sub_45B2B0(int a1, int a2, int a3, int a4); void *__thiscall sub_45B460(void *this, char a2); _BYTE *__thiscall sub_45B4A0(_BYTE *this); LONG __thiscall sub_45B500(_DWORD *this); BOOL __thiscall sub_45B520(char *this); bool __thiscall sub_45B790(void *this, int a2, int a3); // int __userpurge sub_45B7F0@(int a1@, int a2@, int a3@, _BYTE *a4); char __stdcall sub_45BC60(int a1, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6, int a7); void __stdcall sub_45BE40(int a1, signed int a2, unsigned int a3, unsigned int a4, int a5, int a6); int __thiscall sub_45BF50(_DWORD *this, unsigned int a2, unsigned int a3); char __thiscall sub_45C170(_DWORD *this, void *a2, int a3, int a4); char __thiscall sub_45C530(volatile LONG **this, void *a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8); volatile LONG *__cdecl sub_45C5B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_45C700(int this); void *__thiscall sub_45C720(void *this, char a2); unsigned int __thiscall sub_45C760(_DWORD **this, int a2); char __thiscall sub_45C880(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6); char __thiscall sub_45C930(volatile LONG **this, void *a2, int a3, int a4, _DWORD *a5); int __thiscall sub_45CA60(_DWORD **this, int a2); int __thiscall sub_45CCF0(_DWORD **this, int a2, int a3, int a4); int __cdecl sub_45CE20(int a1); void *__thiscall sub_45CF80(void *this, char a2); _DWORD *__thiscall sub_45D100(_DWORD *this); LONG __thiscall sub_45D160(void **this); int __thiscall sub_45D2A0(_DWORD *this, float a2); _DWORD *__thiscall sub_45D500(_DWORD *this); LONG __thiscall sub_45D560(_DWORD *this); void __thiscall sub_45D6A0(_DWORD *this, float a2); char __thiscall sub_45D950(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12, int a13); char __thiscall sub_45DDA0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12, int a13); volatile LONG *__cdecl sub_45E350(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); void *__thiscall sub_45E4B0(void *this, char a2); void *__thiscall sub_45E4E0(void *this, char a2); int __thiscall sub_45E560(_DWORD **this); int __thiscall sub_45E580(_DWORD *this, int a2); int __thiscall sub_45E590(_DWORD **this); int __thiscall sub_45E5B0(_BYTE *this); int __thiscall sub_45E5E0(_DWORD **this); char __thiscall sub_45E5F0(volatile LONG *this); char __thiscall sub_45E690(volatile LONG *this); char __thiscall sub_45E730(volatile LONG *this, int a2, int a3); char __thiscall sub_45E760(void *this); char __thiscall sub_45EB60(volatile LONG *this, int a2, int a3); int sub_45EB80(); void *__thiscall sub_45ECD0(void *this, char a2); char __thiscall sub_45ED10(_DWORD *this, const char *a2); char __thiscall sub_45ED80(void *this, int a2, int a3); int __thiscall sub_45EDB0(void *this, int a2); int __thiscall sub_45EDD0(_DWORD *this); int __thiscall sub_45EDE0(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); int __thiscall sub_45EE30(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); int __thiscall sub_45EE80(_DWORD *this, _DWORD *a2); int __thiscall sub_45EEB0(void *this, int a2, int a3); int __thiscall sub_45EED0(void *this); int __thiscall sub_45EEE0(_DWORD *this); int __thiscall sub_45EEF0(_DWORD *this, int a2); int __thiscall sub_45EF50(_DWORD *this, int a2); LONG __fastcall sub_45EFB0(int a1); char __thiscall sub_45F0D0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7, int a8); int __thiscall sub_45F2B0(_DWORD *this, const char *a2); char __thiscall sub_45F3B0(_DWORD *this, int a2); int __thiscall sub_45F450(_DWORD *this); void __thiscall sub_45F4F0(_DWORD *this, int a2); _DWORD *__thiscall sub_45F5E0(_DWORD *this); char __thiscall sub_45F730(_DWORD *this, _DWORD *a2); void *__thiscall sub_45F940(void *this, char a2); void *__thiscall sub_45F970(void *this, char a2); void *__thiscall sub_45F9A0(void *this, char a2); int __thiscall sub_45F9D0(_DWORD *this); _DWORD *__thiscall sub_45FA50(void *this, char a2); int __thiscall sub_45FAE0(_DWORD *this); _DWORD *__thiscall sub_45FB60(void *this, char a2); int __thiscall sub_45FBA0(_DWORD *this); _DWORD *__thiscall sub_45FC20(void *this, char a2); int __thiscall sub_45FCB0(_DWORD *this); _DWORD *__thiscall sub_45FD30(void *this, char a2); _DWORD *__thiscall sub_45FDC0(void *this, char a2); int __thiscall sub_45FE50(_DWORD *this); _DWORD *__thiscall sub_45FED0(void *this, char a2); void *__thiscall sub_45FF60(void *this, char a2); int __thiscall sub_45FF90(_DWORD *this); int __thiscall sub_45FFA0(_DWORD *this); LONG __thiscall sub_45FFE0(void **this); char __thiscall sub_4600A0(_DWORD *this, int a2, int a3, int a4, char a5, _DWORD *a6); char __thiscall sub_460440(_DWORD **this, float a2, float a3, float a4, float a5); int __thiscall sub_460590(_DWORD **this, int a2); int __cdecl sub_460640(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_4607A0(int a1, int a2, int a3, _DWORD *a4); _DWORD *__thiscall sub_460900(_DWORD *this, int a2, int a3); char *sub_460930(); _DWORD *__thiscall sub_460940(void *this, char a2); void *__thiscall sub_460980(void *this, char a2); bool __thiscall sub_4609B0(void *this, int a2); char __thiscall sub_460A60(_DWORD *this); LONG sub_460E60(); signed int __thiscall sub_460F80(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8); int sub_461120(); int sub_461230(); void __thiscall sub_461360(void *); // idb void __thiscall sub_461380(int this, void *a2); unsigned int __thiscall sub_461550(_DWORD *this, unsigned int a2, int *a3); _DWORD *__thiscall sub_4615D0(_DWORD *this, unsigned int a2); void *sub_461680(); char __thiscall sub_461690(_BYTE *this); char __thiscall sub_4616A0(_BYTE *this, char a2); _DWORD *__thiscall sub_4616B0(void *this, char a2); void *sub_461750(); _DWORD *__thiscall sub_461760(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); _DWORD *__thiscall sub_4617F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6); int __thiscall sub_4618E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); // int __userpurge sub_461930@(int a1@, int a2@, int a3); int __thiscall sub_461950(_DWORD **this); char __thiscall sub_461970(volatile LONG *this); char __thiscall sub_461A40(volatile LONG *this); char __thiscall sub_461B00(volatile LONG *this); char __thiscall sub_461B90(volatile LONG *this, int a2); LPCSTR __thiscall sub_461C00(_DWORD *this, const CHAR *a2); LONG __thiscall sub_461D50(_DWORD *this); char __thiscall sub_461DF0(void *this, int a2, volatile LONG *a3); char __thiscall sub_461ED0(void *this, int a2, volatile LONG *a3); char __thiscall sub_462070(void *this, int a2, volatile LONG *a3); char __thiscall sub_462150(void *this, int a2, volatile LONG *a3); char __thiscall sub_4622F0(void *this, int a2, volatile LONG *a3); char __thiscall sub_462630(void *this, int a2, volatile LONG *a3); char __thiscall sub_4627D0(void *this, int a2, volatile LONG *a3); int sub_4628B0(void); // weak int __thiscall sub_4628C0(_DWORD); // weak int __thiscall sub_4628D0(_DWORD); // weak char __thiscall sub_4628E0(_DWORD *this); _DWORD *__thiscall sub_462A20(_DWORD *this); char __thiscall sub_462AB0(volatile LONG *this, int a2, int a3); volatile LONG *__cdecl sub_462B00(int a1); volatile LONG *sub_462C30(int a1, char *a2, ...); volatile LONG *sub_462CA0(int a1, char *a2, ...); char __thiscall sub_462D10(void *this, int a2, volatile LONG *a3); char __thiscall sub_463020(volatile LONG **this, volatile LONG *a2); void *__thiscall sub_4633D0(void *this, char a2); void *__thiscall sub_463400(void *this, char a2); char __thiscall sub_463430(_DWORD *this, int a2, int a3); char __thiscall sub_463460(_DWORD *this, int a2, int a3); int __cdecl sub_463490(int a1); int __cdecl sub_4635E0(int a1, int a2, int a3, int a4, int a5); signed int __thiscall sub_4637A0(_DWORD *this, int a2); signed int __thiscall sub_4638F0(_DWORD *this, int a2); char __thiscall sub_463910(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6); char __thiscall sub_463AD0(_DWORD **this); char __thiscall sub_463C10(_DWORD *this); char __thiscall sub_463C50(_DWORD *this); char __thiscall sub_463C90(_DWORD *this, int a2, int a3); char __thiscall sub_463CD0(_DWORD *this, int a2, int a3); char __thiscall sub_463EA0(_DWORD *this, int a2, int a3, void *a4, void *a5, int a6, int a7, _DWORD *a8); int __cdecl sub_464310(int a1, int a2, void *a3, void *a4, int a5, int a6, _DWORD *a7); void *__thiscall sub_464490(void *this, char a2); int __thiscall sub_4645F0(_DWORD *this, unsigned int a2, int a3); int __thiscall sub_464630(_DWORD *this, int a2); int __thiscall sub_4646D0(_BYTE *this, _BYTE *a2); int __thiscall sub_464700(_DWORD *this); unsigned int __thiscall sub_464710(_DWORD *this, int a2); void __thiscall sub_464760(_DWORD *this, int a2, const char *a3); unsigned int __thiscall sub_464990(_DWORD *this, int a2); unsigned int __thiscall sub_4649F0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_464AC0(_DWORD *this); char __thiscall sub_464AF0(_DWORD *this); char __thiscall sub_464B20(_DWORD *this, unsigned int a2, int a3); char __thiscall sub_464B60(_DWORD *this, unsigned int a2, _DWORD *a3); char __thiscall sub_464BA0(_DWORD *this, unsigned int a2, int a3); char __thiscall sub_464BE0(_DWORD *this, unsigned int a2, int a3, int a4, int a5); char __thiscall sub_464C80(_DWORD *this, unsigned int a2, unsigned int a3, int a4, int a5, int a6); char __thiscall sub_464D00(_DWORD *this, int a2); char __thiscall sub_464DA0(_DWORD *this, unsigned int a2, int a3); unsigned int __thiscall sub_464F50(_DWORD *this); char __thiscall sub_464F90(_DWORD *this, int a2); _DWORD *__thiscall sub_4650C0(_DWORD *this, unsigned int a2, unsigned int a3); int __thiscall sub_465130(_DWORD *this); int __thiscall sub_465380(_DWORD *this, int a2); int __thiscall sub_465460(_DWORD *this, int a2); int __thiscall sub_4657C0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_465800(_DWORD *this); LONG __thiscall sub_4658B0(void **this); volatile LONG *__cdecl sub_465940(int a1, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_465AA0(_DWORD *this, int a2, void *a3); char __thiscall sub_465B10(volatile LONG **this, int a2, int a3, int a4, float a5, int **a6, int a7, char a8); char __thiscall sub_4661A0(_DWORD *this, int a2, int a3, void *a4); float *__thiscall sub_4661E0(float *this); LONG __thiscall sub_466260(_DWORD *this); volatile LONG *__cdecl sub_466330(int a1, int a2, int a3, float a4, int **a5, int a6, char a7); float *__cdecl sub_466480(int a1, int a2, int a3, float a4, int a5, int **a6, int a7, char a8); char __thiscall sub_4665D0(_DWORD *this, unsigned int a2); char __thiscall sub_466680(_DWORD *this, volatile LONG *a2); int __thiscall sub_466A50(_DWORD *this); int *__thiscall sub_466AF0(_DWORD *this, int a2, char a3, char a4); int __thiscall sub_467000(void *this); void *__stdcall sub_467010(char *a1); void *__thiscall sub_467070(void *this, char a2); _DWORD *__thiscall sub_467110(_DWORD *this, int a2); bool __thiscall sub_467170(int *this, int *a2, int *a3); bool __thiscall sub_467270(int *this, int *a2, int *a3); char sub_4673D0(int *a1, int *a2, int *a3, ...); char sub_467450(int *a1, int *a2, int *a3, ...); int __cdecl sub_4674D0(_DWORD *a1, int a2, char *a3); void __thiscall sub_467570(void *); // idb int *__cdecl sub_4675A0(int *a1, int *a2); char __cdecl sub_4675E0(int *a1, int *a2, int *a3, int a4); char __cdecl sub_467680(int *a1, int *a2, int *a3, int a4); void __cdecl sub_467720(int *a1, int *a2); int **__cdecl sub_467760(int **a1, int *a2, int *a3, int a4); int **__cdecl sub_467980(int **a1, int *a2, int *a3, int a4); void *__thiscall sub_467E20(void *this, char a2); void __cdecl sub_467E50(int a1, int a2); void __cdecl sub_4680C0(int a1, int a2); int *__cdecl sub_468100(int *a1, int *a2, int *a3); void __cdecl sub_4686B0(int a1, unsigned int a2); int __cdecl sub_4687C0(const void **a1, const void **a2, int a3); int __cdecl sub_468820(const void **a1, const void **a2, int a3); void __thiscall sub_4688F0(int **this); int *__thiscall sub_468940(_DWORD *this, int *a2, int a3); void __stdcall sub_468BC0(void *a1); void __thiscall sub_468E80(int *this); char *__thiscall sub_468ED0(int **this, char *a2); int *__thiscall sub_468FC0(_DWORD *this, int *a2, int a3, int a4); void *__thiscall sub_469080(void *this, char a2); unsigned int __thiscall sub_4690B0(int *this, char *a2); char *__thiscall sub_4691C0(int this, int a2); unsigned int __thiscall sub_469220(int *this, int a2); int __cdecl sub_4692A0(int *a1, int *a2, int a3, int a4); int __cdecl sub_469390(int *a1, int *a2, int a3, int a4); void **__thiscall sub_469480(void *this, int a2); void __thiscall sub_4694E0(_DWORD *this); char *__thiscall sub_469540(unsigned int *this, unsigned int a2); int __thiscall sub_4695F0(int *this, unsigned int a2); void __thiscall sub_469710(int *this, unsigned int a2); int *__thiscall sub_4697E0(_DWORD *this, int *a2); int __thiscall sub_469890(void *this, void *a2); void __thiscall sub_469930(_DWORD *this); _DWORD *__thiscall sub_469A30(_DWORD *this); void __thiscall sub_469B50(_DWORD *this); int __thiscall sub_469B70(void *this, void *a2); float *__thiscall sub_469C10(float *this); LONG __thiscall sub_469C50(_DWORD *this); int __thiscall sub_469C70(_DWORD *this, unsigned int a2); int __thiscall sub_469E70(_DWORD *this, unsigned int a2); int __thiscall sub_46A070(_DWORD **this); void __thiscall sub_46A150(float *this, float a2, float a3); // void __userpurge sub_46A170(_DWORD **a1@, int a2@, int a3@, float a4, float a5); int __thiscall sub_46A610(void *this); // void __userpurge sub_46A620(_DWORD **a1@, int a2@, int a3); char __thiscall sub_46A6E0(void *this, int a2); // void __userpurge sub_46AEA0(int a1@, int a2@, int a3@, int a4, int a5, int a6); int __cdecl sub_46AFE0(int a1); void *__thiscall sub_46B130(void *this, char a2); char __thiscall sub_46B1C0(_DWORD *this, int a2, int a3); char __thiscall sub_46B1E0(_DWORD *this, int a2); void __thiscall sub_46B220(_DWORD *this, int a2); char __thiscall sub_46B2B0(void *this, int a2); _DWORD *__thiscall sub_46B530(_DWORD *this); char __thiscall sub_46B5E0(_DWORD *this); int __cdecl sub_46B640(int a1); const void **__thiscall sub_46B810(_DWORD *this, void *a2); int __thiscall sub_46B840(HWND *this); _DWORD *__thiscall sub_46B910(void *this, char a2); int __thiscall sub_46BC20(char *this); int __thiscall sub_46C0B0(int this, int a2, int a3, int a4, int a5); // int __userpurge sub_46C100@(int a1@, int a2@, char a3); signed int __stdcall sub_46C1E0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); bool sub_46C4E0(); int __thiscall sub_46C530(void (__stdcall ****this)(_DWORD, _DWORD, _DWORD)); HRESULT __thiscall sub_46C5F0(_DWORD **this, const char *a2); struct tagRECT *__thiscall sub_46C8B0(struct tagRECT *this, LONG a2); HRESULT __thiscall sub_46C940(char *this); int __thiscall sub_46CA70(void (__stdcall ****this)(_DWORD, _DWORD, _DWORD)); LRESULT __thiscall sub_46CB40(int this, UINT Msg, WPARAM wParam, LPARAM lParam); LRESULT __stdcall sub_46CCD0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); bool sub_46CD90(); BOOL __cdecl sub_46CE20(unsigned __int8 *a1, unsigned __int8 *a2); signed int __stdcall sub_46CE90(int a1, unsigned __int8 *a2, _DWORD *a3); LONG __stdcall sub_46CFF0(int a1); signed int __stdcall sub_46D010(int a1); signed int __stdcall sub_46D020(int a1, int a2); int __stdcall sub_46D030(int a1, int a2); int __stdcall sub_46D040(int a1, _DWORD *a2); int __stdcall sub_46D060(int, int, int, RECT *lprcSrc, int, int); // idb signed int __stdcall sub_46D110(int a1, int a2, int a3); signed int __stdcall sub_46D120(int a1, int a2, int a3, int a4, int a5, _DWORD *a6); signed int __stdcall sub_46D140(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); LONG __stdcall sub_46D150(int a1); LONG __stdcall sub_46D160(int a1); LONG __stdcall sub_46D170(int a1); signed int __stdcall sub_46D180(int a1, unsigned __int8 *a2, _DWORD *a3); LONG __stdcall sub_46D190(int a1); signed int __stdcall sub_46D1A0(int a1, int a2); signed int __stdcall sub_46D1B0(int a1, unsigned __int8 *a2, _DWORD *a3); signed int __stdcall sub_46D1C0(int a1, unsigned __int8 *a2, _DWORD *a3); signed int __stdcall sub_46D1D0(int a1, unsigned __int8 *a2, _DWORD *a3); int __stdcall sub_46D1E0(int a1, _DWORD *a2); signed int __stdcall sub_46D1F0(int a1, unsigned __int8 *a2, _DWORD *a3); LONG __stdcall sub_46D260(int a1); LONG __stdcall sub_46D280(void *a1); signed int __stdcall sub_46D2B0(int a1, int a2, int a3, int a4); signed int __stdcall sub_46D2C0(int a1, int a2); LONG __stdcall sub_46D2D0(void *a1); LONG __stdcall sub_46D340(int a1); LONG __stdcall sub_46D350(int a1); LONG __stdcall sub_46D360(int a1); LONG __stdcall sub_46D370(int a1); int sub_46D800(); int __cdecl sub_46D810(int a1, int a2); int sub_46D950(); char sub_46D970(); char sub_46DA50(); bool __cdecl sub_46DDD0(int a1); int __cdecl sub_46DE40(int a1, int a2); // int __usercall sub_46DE70@(int a1@, int a2@, int a3, int a4, int a5, int a6); bool sub_46DF40(); char sub_46E0A0(); void __cdecl sub_46E120(int a1); int sub_46E170(); int sub_46E200(); void __cdecl sub_46E2D0(int a1); _DWORD *sub_46E300(); bool __cdecl sub_46E3D0(int a1); int __cdecl sub_46E430(char a1); void sub_46E530(); char sub_46EC50(); __int16 __thiscall sub_46ED70(_WORD *this, char a2, __int16 a3); _DWORD *__thiscall sub_46EDA0(_DWORD *this); char *sub_46EDC0(); // _DWORD __stdcall unknown_libname_5(_DWORD); weak // _DWORD __thiscall DNameNode::DNameNode(DNameNode *__hidden this); idb int __thiscall sub_46EE40(_DWORD *this, int a2); void *__thiscall sub_46EE70(void *this, char a2); void sub_46EEF0(char *a1, ...); int sub_46F0F0(); int sub_46F100(); int __stdcall sub_46F110(HWND hWnd, int); // idb void __thiscall sub_46F2A0(_DWORD *this); char __thiscall sub_46F380(float *this); char __thiscall sub_46F450(_BYTE *this, char a2); int __thiscall sub_46F460(_DWORD *this); int *sub_46F4A0(); int __cdecl sub_46F5A0(_DWORD *a1); int __thiscall sub_46F620(_DWORD *this, char *Src, char *a3, int a4); void __thiscall sub_46FC30(void *this); // void __usercall sub_46FD20(int a1@, int a2@); char sub_46FF70(); char __thiscall sub_470150(void *this); void sub_470A60(); _DWORD *__thiscall sub_470B90(_DWORD *this); _DWORD *sub_470DA0(); _DWORD *sub_470E30(); char *__thiscall sub_470EB0(char *this, char *a2); unsigned int __thiscall sub_470EE0(_DWORD **this, int a2); char __thiscall sub_470F80(_DWORD *this, int a2); int __cdecl sub_470FC0(unsigned int a1); int sub_470FE0(); void **__thiscall sub_471000(void *this, char a2); void **__thiscall sub_471080(void *this, char a2); void **__thiscall sub_471100(void *this, char a2); _DWORD *__thiscall sub_471180(_DWORD *this); _DWORD *__thiscall sub_4711C0(_DWORD *this); _DWORD *__thiscall sub_471200(_DWORD *this); _DWORD *__thiscall sub_471240(_DWORD *this); void **__thiscall sub_471280(void *this, char a2); bool __cdecl sub_471300(char *Src, int a2, char a3); bool __cdecl sub_471440(char *Src, int a2, char a3); bool __cdecl sub_471580(char *Src, int a2, char a3); bool __cdecl sub_4716C0(char *Src, int a2, char a3); _BYTE *__thiscall sub_4717F0(_BYTE *this, unsigned __int8 a2); _BYTE *__cdecl sub_471970(_BYTE *a1); void *__thiscall sub_4719D0(void *this, char a2); char sub_471A00(); char __stdcall sub_471A40(int a1); bool __cdecl sub_471AA0(char *a1); char __stdcall sub_471AC0(int a1, int a2); int __cdecl sub_471AD0(LPCSTR lpText); // idb int __thiscall sub_471AF0(_DWORD); // weak char __stdcall sub_471B00(int a1); unsigned int sub_471B10(); char __thiscall sub_471B70(int this); void __thiscall sub_471BB0(_BYTE *this); char __stdcall sub_472060(int a1, int a2, int a3, char a4); BOOL __thiscall sub_472230(_DWORD *this); char __thiscall sub_472240(_DWORD *this); bool __thiscall sub_472320(_DWORD *this); LONG __thiscall sub_4724C0(_DWORD *this); LONG __thiscall sub_472620(int this); int __thiscall sub_472770(void *this); char __thiscall sub_472A70(int this, LONG a2); void __thiscall sub_472F20(_DWORD *this); void __thiscall sub_4732E0(_DWORD *this); char __thiscall sub_4733C0(_DWORD *this); char *__thiscall sub_474A60(char *this, char *a2); char sub_474A90(); void **__thiscall sub_474AA0(void *this, char a2); void **__thiscall sub_474B20(void *this, char a2); void **__thiscall sub_474BA0(void *this, char a2); void **__thiscall sub_474C30(void *this, char a2); void **__thiscall sub_474CB0(void *this, char a2); void **__thiscall sub_474D40(void *this, char a2); void **__thiscall sub_474DC0(void *this, char a2); void **__thiscall sub_474E50(void *this, char a2); void **__thiscall sub_474ED0(void *this, char a2); void **__thiscall sub_474F50(void *this, char a2); void **__thiscall sub_474FE0(void *this, char a2); void **__thiscall sub_475060(void *this, char a2); void **__thiscall sub_4750E0(void *this, char a2); void **__thiscall sub_475160(void *this, char a2); void **__thiscall sub_4751E0(void *this, char a2); void **__thiscall sub_475260(void *this, char a2); void **__thiscall sub_4752E0(void *this, char a2); void **__thiscall sub_475360(void *this, char a2); void **__thiscall sub_4753E0(void *this, char a2); void **__thiscall sub_475460(void *this, char a2); void **__thiscall sub_4754F0(void *this, char a2); void **__thiscall sub_475570(void *this, char a2); void **__thiscall sub_4755F0(void *this, char a2); void **__thiscall sub_475670(void *this, char a2); void **__thiscall sub_4756F0(void *this, char a2); void **__thiscall sub_475770(void *this, char a2); void **__thiscall sub_4757F0(void *this, char a2); void **__thiscall sub_475870(void *this, char a2); void **__thiscall sub_4758F0(void *this, char a2); void **__thiscall sub_475970(void *this, char a2); void **__thiscall sub_475A00(void *this, char a2); void **__thiscall sub_475A80(void *this, char a2); void **__thiscall sub_475B00(void *this, char a2); void **__thiscall sub_475B80(void *this, char a2); void **__thiscall sub_475C00(void *this, char a2); void **__thiscall sub_475C80(void *this, char a2); void **__thiscall sub_475D00(void *this, char a2); void **__thiscall sub_475D80(void *this, char a2); void **__thiscall sub_475E10(void *this, char a2); void **__thiscall sub_475E90(void *this, char a2); void **__thiscall sub_475F10(void *this, char a2); void **__thiscall sub_475F90(void *this, char a2); void **__thiscall sub_476010(void *this, char a2); void **__thiscall sub_476090(void *this, char a2); void **__thiscall sub_476110(void *this, char a2); void **__thiscall sub_476190(void *this, char a2); void **__thiscall sub_476220(void *this, char a2); void **__thiscall sub_4762A0(void *this, char a2); void **__thiscall sub_476320(void *this, char a2); void **__thiscall sub_4763A0(void *this, char a2); void **__thiscall sub_476420(void *this, char a2); void **__thiscall sub_4764A0(void *this, char a2); void **__thiscall sub_476520(void *this, char a2); void **__thiscall sub_4765A0(void *this, char a2); void **__thiscall sub_476620(void *this, char a2); void **__thiscall sub_4766A0(void *this, char a2); void **__thiscall sub_476720(void *this, char a2); void **__thiscall sub_4767A0(void *this, char a2); void **__thiscall sub_476820(void *this, char a2); void **__thiscall sub_4768A0(void *this, char a2); void **__thiscall sub_476920(void *this, char a2); void **__thiscall sub_4769A0(void *this, char a2); void __thiscall nullsub_6(void *); // idb void **__thiscall sub_476A30(void *this, char a2); void **__thiscall sub_476AB0(void *this, char a2); void **__thiscall sub_476B30(void *this, char a2); void **__thiscall sub_476BC0(void *this, char a2); void **__thiscall sub_476C40(void *this, char a2); void **__thiscall sub_476CD0(void *this, char a2); void **__thiscall sub_476D50(void *this, char a2); void **__thiscall sub_476DD0(void *this, char a2); void **__thiscall sub_476E50(void *this, char a2); void **__thiscall sub_476ED0(void *this, char a2); void **__thiscall sub_476F60(void *this, char a2); void **__thiscall sub_476FE0(void *this, char a2); void **__thiscall sub_477070(void *this, char a2); void **__thiscall sub_4770F0(void *this, char a2); void **__thiscall sub_477180(void *this, char a2); void **__thiscall sub_477200(void *this, char a2); void **__thiscall sub_477280(void *this, char a2); void **__thiscall sub_477300(void *this, char a2); void **__thiscall sub_477380(void *this, char a2); void **__thiscall sub_477400(void *this, char a2); void **__thiscall sub_477490(void *this, char a2); void **__thiscall sub_477510(void *this, char a2); void **__thiscall sub_477590(void *this, char a2); int __thiscall sub_477610(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); char __cdecl sub_477690(const char *a1); int __thiscall sub_477700(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); _DWORD *__thiscall sub_477780(_DWORD *this); bool sub_4777C0(); _DWORD *__thiscall sub_4777E0(_DWORD *this); void **__thiscall sub_477820(void *this, char a2); _DWORD *__thiscall sub_4778A0(_DWORD *this); _DWORD *__thiscall sub_4778E0(_DWORD *this); _DWORD *__thiscall sub_477920(_DWORD *this); _DWORD *__thiscall sub_477960(_DWORD *this); void **__thiscall sub_4779A0(void *this, char a2); _DWORD *__thiscall sub_477A20(_DWORD *this); void **__thiscall sub_477A60(void *this, char a2); _DWORD *__thiscall sub_477AE0(_DWORD *this); void **__thiscall sub_477B20(void *this, char a2); _DWORD *__thiscall sub_477BA0(_DWORD *this); _DWORD *__thiscall sub_477BE0(_DWORD *this); void **__thiscall sub_477C20(void *this, char a2); _DWORD *__thiscall sub_477CA0(_DWORD *this); _DWORD *__thiscall sub_477CE0(_DWORD *this); _DWORD *__thiscall sub_477D20(_DWORD *this); void **__thiscall sub_477D60(void *this, char a2); _DWORD *__thiscall sub_477DE0(_DWORD *this); void **__thiscall sub_477E20(void *this, char a2); _DWORD *__thiscall sub_477EA0(_DWORD *this); _DWORD *__thiscall sub_477EE0(_DWORD *this); void **__thiscall sub_477F20(void *this, char a2); _DWORD *__thiscall sub_477FA0(_DWORD *this); _DWORD *__thiscall sub_477FE0(_DWORD *this); _DWORD *__thiscall sub_478020(_DWORD *this); void **__thiscall sub_478060(void *this, char a2); _DWORD *__thiscall sub_4780E0(_DWORD *this); _DWORD *__thiscall sub_478120(_DWORD *this); _DWORD *__thiscall sub_478160(_DWORD *this); _DWORD *__thiscall sub_4781A0(_DWORD *this); _DWORD *__thiscall sub_4781E0(_DWORD *this); _DWORD *__thiscall sub_478220(_DWORD *this); _DWORD *__thiscall sub_478260(_DWORD *this); _DWORD *__thiscall sub_4782A0(_DWORD *this); _DWORD *__thiscall sub_4782E0(_DWORD *this); _DWORD *__thiscall sub_478320(_DWORD *this); _DWORD *__thiscall sub_478360(_DWORD *this); void **__thiscall sub_4783A0(void *this, char a2); _DWORD *__thiscall sub_478420(_DWORD *this); void **__thiscall sub_478460(void *this, char a2); _DWORD *__thiscall sub_4784E0(_DWORD *this); void **__thiscall sub_478520(void *this, char a2); _DWORD *__thiscall sub_4785A0(_DWORD *this); void **__thiscall sub_4785E0(void *this, char a2); _DWORD *__thiscall sub_478660(_DWORD *this); void **__thiscall sub_4786A0(void *this, char a2); _DWORD *__thiscall sub_478720(_DWORD *this); _DWORD *__thiscall sub_478760(_DWORD *this); void **__thiscall sub_4787A0(void *this, char a2); _DWORD *__thiscall sub_478820(_DWORD *this); _DWORD *__thiscall sub_478860(_DWORD *this); void **__thiscall sub_4788A0(void *this, char a2); _DWORD *__thiscall sub_478920(_DWORD *this); void **__thiscall sub_478960(void *this, char a2); _DWORD *__thiscall sub_4789E0(_DWORD *this); _DWORD *__thiscall sub_478A20(_DWORD *this); void **__thiscall sub_478A60(void *this, char a2); _DWORD *__thiscall sub_478AE0(_DWORD *this); _DWORD *__thiscall sub_478B20(_DWORD *this); void **__thiscall sub_478B60(void *this, char a2); _DWORD *__thiscall sub_478BE0(_DWORD *this); _DWORD *__thiscall sub_478C20(_DWORD *this); _DWORD *__thiscall sub_478C60(_DWORD *this); void **__thiscall sub_478CA0(void *this, char a2); _DWORD *__thiscall sub_478D20(_DWORD *this); _DWORD *__thiscall sub_478D60(_DWORD *this); _DWORD *__thiscall sub_478DA0(_DWORD *this); void **__thiscall sub_478DE0(void *this, char a2); _DWORD *__thiscall sub_478E60(_DWORD *this); _DWORD *__thiscall sub_478EA0(_DWORD *this); _DWORD *__thiscall sub_478EE0(_DWORD *this); void **__thiscall sub_478F20(void *this, char a2); _DWORD *__thiscall sub_478FA0(_DWORD *this); void **__thiscall sub_478FE0(void *this, char a2); _DWORD *__thiscall sub_479060(_DWORD *this); void **__thiscall sub_4790A0(void *this, char a2); _DWORD *__thiscall sub_479120(_DWORD *this); _DWORD *__thiscall sub_479160(_DWORD *this); _DWORD *__thiscall sub_4791A0(_DWORD *this); void **__thiscall sub_4791E0(void *this, char a2); _DWORD *__thiscall sub_479260(_DWORD *this); _DWORD *__thiscall sub_4792A0(_DWORD *this); void **__thiscall sub_4792E0(void *this, char a2); _DWORD *__thiscall sub_479360(_DWORD *this); _DWORD *__thiscall sub_4793A0(_DWORD *this); void **__thiscall sub_4793E0(void *this, char a2); _DWORD *__thiscall sub_479460(_DWORD *this); _DWORD *__thiscall sub_4794A0(_DWORD *this); void **__thiscall sub_4794E0(void *this, char a2); _DWORD *__thiscall sub_479560(_DWORD *this); _DWORD *__thiscall sub_4795A0(_DWORD *this); void **__thiscall sub_4795E0(void *this, char a2); _DWORD *__thiscall sub_479660(_DWORD *this); _DWORD *__thiscall sub_4796A0(_DWORD *this); _DWORD *__thiscall sub_4796E0(_DWORD *this); void **__thiscall sub_479720(void *this, char a2); _DWORD *__thiscall sub_4797A0(_DWORD *this); void **__thiscall sub_4797E0(void *this, char a2); _DWORD *__thiscall sub_479860(_DWORD *this); void **__thiscall sub_4798A0(void *this, char a2); _DWORD *__thiscall sub_479920(_DWORD *this); _DWORD *__thiscall sub_479960(_DWORD *this); _DWORD *__thiscall sub_4799A0(_DWORD *this); void **__thiscall sub_4799E0(void *this, char a2); _DWORD *__thiscall sub_479A60(_DWORD *this); _DWORD *__thiscall sub_479AA0(_DWORD *this); _DWORD *__thiscall sub_479AE0(_DWORD *this); void **__thiscall sub_479B20(void *this, char a2); _DWORD *__thiscall sub_479BA0(_DWORD *this); _DWORD *__thiscall sub_479BE0(_DWORD *this); _DWORD *__thiscall sub_479C20(_DWORD *this); void **__thiscall sub_479C60(void *this, char a2); _DWORD *__thiscall sub_479CE0(_DWORD *this); void **__thiscall sub_479D20(void *this, char a2); _DWORD *__thiscall sub_479DA0(_DWORD *this); _DWORD *__thiscall sub_479DE0(_DWORD *this); void **__thiscall sub_479E20(void *this, char a2); _DWORD *__thiscall sub_479EA0(_DWORD *this); _DWORD *__thiscall sub_479EE0(_DWORD *this); _DWORD *__thiscall sub_479F20(_DWORD *this); _DWORD *__thiscall sub_479F60(_DWORD *this); void **__thiscall sub_479FA0(void *this, char a2); _DWORD *__thiscall sub_47A020(_DWORD *this); _DWORD *__thiscall sub_47A060(_DWORD *this); _DWORD *__thiscall sub_47A0A0(_DWORD *this); void **__thiscall sub_47A0E0(void *this, char a2); _DWORD *__thiscall sub_47A160(_DWORD *this); void **__thiscall sub_47A1A0(void *this, char a2); _DWORD *__thiscall sub_47A220(_DWORD *this); void **__thiscall sub_47A260(void *this, char a2); _DWORD *__thiscall sub_47A2E0(_DWORD *this); void **__thiscall sub_47A320(void *this, char a2); _DWORD *__thiscall sub_47A3A0(_DWORD *this); int __thiscall sub_47A3E0(_DWORD *this, char *a2, int a3, int a4, int a5); _DWORD *__thiscall sub_47A4B0(_DWORD *this); bool __cdecl sub_47A4F0(char *Src, int a2, char a3); bool __cdecl sub_47A620(char *Src, int a2, char a3); bool __cdecl sub_47A760(char *Src, int a2, char a3); bool __cdecl sub_47A890(char *Src, int a2, char a3); bool __cdecl sub_47A9D0(char *Src, int a2, char a3); bool __cdecl sub_47AB10(char *Src, int a2, char a3); bool __cdecl sub_47AC50(char *Src, int a2, char a3); bool __cdecl sub_47AD90(char *Src, int a2, char a3); bool __cdecl sub_47AEC0(char *Src, int a2, char a3); bool __cdecl sub_47B000(char *Src, int a2, char a3); bool __cdecl sub_47B140(char *Src, int a2, char a3); bool __cdecl sub_47B280(char *Src, int a2, char a3); bool __cdecl sub_47B3C0(char *Src, int a2, char a3); bool __cdecl sub_47B500(char *Src, int a2, char a3); bool __cdecl sub_47B640(char *Src, int a2, char a3); bool __cdecl sub_47B780(char *Src, int a2, char a3); bool __cdecl sub_47B8C0(char *Src, int a2, char a3); bool __cdecl sub_47BA00(char *Src, int a2, char a3); bool __cdecl sub_47BB40(char *Src, int a2, char a3); bool __cdecl sub_47BC80(char *Src, int a2, char a3); bool __cdecl sub_47BDC0(char *Src, int a2, char a3); bool __cdecl sub_47BF00(char *Src, int a2, char a3); bool __cdecl sub_47C030(char *Src, int a2, char a3); bool __cdecl sub_47C170(char *Src, int a2, char a3); bool __cdecl sub_47C2A0(char *Src, int a2, char a3); bool __cdecl sub_47C3E0(char *Src, int a2, char a3); bool __cdecl sub_47C520(char *Src, int a2, char a3); bool __cdecl sub_47C660(char *Src, int a2, char a3); bool __cdecl sub_47C7A0(char *Src, int a2, char a3); bool __cdecl sub_47C8D0(char *Src, int a2, char a3); bool __cdecl sub_47CA10(char *Src, int a2, char a3); bool __cdecl sub_47CB50(char *Src, int a2, char a3); bool __cdecl sub_47CC80(char *Src, int a2, char a3); bool __cdecl sub_47CDC0(char *Src, int a2, char a3); bool __cdecl sub_47CEF0(char *Src, int a2, char a3); bool __cdecl sub_47D020(char *Src, int a2, char a3); bool __cdecl sub_47D150(char *Src, int a2, char a3); bool __cdecl sub_47D290(char *Src, int a2, char a3); bool __cdecl sub_47D3D0(char *Src, int a2, char a3); bool __cdecl sub_47D510(char *Src, int a2, char a3); bool __cdecl sub_47D650(char *Src, int a2, char a3); bool __cdecl sub_47D780(char *Src, int a2, char a3); bool __cdecl sub_47D8C0(char *Src, int a2, char a3); bool __cdecl sub_47DA00(char *Src, int a2, char a3); bool __cdecl sub_47DB30(char *Src, int a2, char a3); bool __cdecl sub_47DC60(char *Src, int a2, char a3); bool __cdecl sub_47DDA0(char *Src, int a2, char a3); bool __cdecl sub_47DEE0(char *Src, int a2, char a3); bool __cdecl sub_47E020(char *Src, int a2, char a3); bool __cdecl sub_47E150(char *Src, int a2, char a3); bool __cdecl sub_47E280(char *Src, int a2, char a3); bool __cdecl sub_47E3B0(char *Src, int a2, char a3); bool __cdecl sub_47E4E0(char *Src, int a2, char a3); bool __cdecl sub_47E610(char *Src, int a2, char a3); bool __cdecl sub_47E750(char *Src, int a2, char a3); bool __cdecl sub_47E890(char *Src, int a2, char a3); bool __cdecl sub_47E9D0(char *Src, int a2, char a3); bool __cdecl sub_47EB00(char *Src, int a2, char a3); bool __cdecl sub_47EC30(char *Src, int a2, char a3); bool __cdecl sub_47ED60(char *Src, int a2, char a3); bool __cdecl sub_47EE90(char *Src, int a2, char a3); bool __cdecl sub_47EFC0(char *Src, int a2, char a3); bool __cdecl sub_47F100(char *Src, int a2, char a3); bool __cdecl sub_47F230(char *Src, int a2, char a3); bool __cdecl sub_47F370(char *Src, int a2, char a3); bool __cdecl sub_47F4A0(char *Src, int a2, char a3); bool __cdecl sub_47F5E0(char *Src, int a2, char a3); bool __cdecl sub_47F710(char *Src, int a2, char a3); bool __cdecl sub_47F850(char *Src, int a2, char a3); bool __cdecl sub_47F990(char *Src, int a2, char a3); bool __cdecl sub_47FAC0(char *Src, int a2, char a3); bool __cdecl sub_47FBF0(char *Src, int a2, char a3); bool __cdecl sub_47FD30(char *Src, int a2, char a3); bool __cdecl sub_47FE60(char *Src, int a2, char a3); bool __cdecl sub_47FFA0(char *Src, int a2, char a3); bool __cdecl sub_4800E0(char *Src, int a2, char a3); bool __cdecl sub_480220(char *Src, int a2, char a3); bool __cdecl sub_480350(char *Src, int a2, char a3); bool __cdecl sub_480480(char *Src, int a2, char a3); bool __cdecl sub_4805C0(char *Src, int a2, char a3); bool __cdecl sub_4806F0(char *Src, int a2, char a3); bool __cdecl sub_480820(char *Src, int a2, char a3); bool __cdecl sub_480950(char *Src, int a2, char a3); bool __cdecl sub_480A90(char *Src, int a2, char a3); bool __cdecl sub_480BD0(char *Src, int a2, char a3); bool __cdecl sub_480D00(char *Src, int a2, char a3); bool __cdecl sub_480E30(char *Src, int a2, char a3); bool __cdecl sub_480F70(char *Src, int a2, char a3); bool __cdecl sub_4810B0(char *Src, int a2, char a3); bool __cdecl sub_4811E0(char *Src, int a2, char a3); bool __cdecl sub_481310(char *Src, int a2, char a3); bool __cdecl sub_481450(char *Src, int a2, char a3); bool __cdecl sub_481590(char *Src, int a2, char a3); _DWORD *__thiscall sub_4816C0(_DWORD *this); _DWORD *__thiscall sub_481710(_DWORD *this); _DWORD *__thiscall sub_481760(_DWORD *this); _DWORD *__thiscall sub_4817B0(_DWORD *this); _DWORD *__thiscall sub_481800(_DWORD *this); __int16 __stdcall sub_481850(int a1); _DWORD *__thiscall sub_481860(_DWORD *this); void **__thiscall sub_4818B0(void *this, char a2); _DWORD *__thiscall sub_481940(_DWORD *this); _DWORD *__thiscall sub_481990(_DWORD *this); void **__thiscall sub_4819E0(void *this, char a2); _DWORD *__thiscall sub_481A70(_DWORD *this); _DWORD *__thiscall sub_481AC0(_DWORD *this); _DWORD *__thiscall sub_481B10(_DWORD *this); _DWORD *__thiscall sub_481B60(_DWORD *this); int __stdcall sub_481BB0(unsigned __int8 *a1); _DWORD *__thiscall sub_481BC0(_DWORD *this); _DWORD *__thiscall sub_481C10(_DWORD *this); _DWORD *__thiscall sub_481C60(_DWORD *this); void **__thiscall sub_481CB0(void *this, char a2); _DWORD *__thiscall sub_481D40(_DWORD *this); void **__thiscall sub_481D90(void *this, char a2); _DWORD *__thiscall sub_481E20(_DWORD *this); _DWORD *__thiscall sub_481E70(_DWORD *this); _DWORD *__thiscall sub_481EC0(_DWORD *this); void **__thiscall sub_481F10(void *this, char a2); bool __cdecl sub_481FA0(char *Src, int a2, char a3); char ***__thiscall sub_4820D0(char ***this, int **a2); bool __cdecl sub_482190(char *Src, int a2, char a3); bool __cdecl sub_4822D0(char *Src, int a2, char a3); bool __cdecl sub_482410(char *Src, int a2, char a3); bool __cdecl sub_482550(char *Src, int a2, char a3); bool __cdecl sub_482690(char *Src, int a2, char a3); bool __cdecl sub_4827D0(char *Src, int a2, char a3); bool __cdecl sub_482910(char *Src, int a2, char a3); bool __cdecl sub_482A50(char *Src, int a2, char a3); bool __cdecl sub_482B90(char *Src, int a2, char a3); bool __cdecl sub_482CD0(char *Src, int a2, char a3); bool __cdecl sub_482E10(char *Src, int a2, char a3); bool __cdecl sub_482F50(char *Src, int a2, char a3); bool __cdecl sub_483090(char *Src, int a2, char a3); bool __cdecl sub_4831D0(char *Src, int a2, char a3); bool __cdecl sub_483310(char *Src, int a2, char a3); bool __cdecl sub_483450(char *Src, int a2, char a3); bool __cdecl sub_483590(char *Src, int a2, char a3); bool __cdecl sub_4836C0(char *Src, int a2, char a3); bool __cdecl sub_483800(char *Src, int a2, char a3); char __cdecl sub_483940(char *Src, int a2); void __thiscall sub_4839D0(int **this, int **a2); void *__cdecl sub_483A30(void *a1, void *a2, int a3); _DWORD *__thiscall sub_483AA0(_DWORD *this, char *a2); void __thiscall sub_483B60(int this); int __thiscall sub_483C10(void **this, int a2, void *a3); int __thiscall sub_483C60(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_483DE0(_DWORD **this, int a2); char *__stdcall sub_483E30(char *a1, int a2, char *a3); int __thiscall sub_483EF0(_DWORD *this, int a2, char *a3); char __cdecl sub_483F60(char *Src, int a2); int __thiscall sub_4841F0(_DWORD *this); void __thiscall sub_484410(void *); // idb char *__thiscall sub_484420(void *this, char a2); char *__thiscall sub_4844A0(void *this, char a2); int *__thiscall sub_484500(_DWORD *this, int *a2, int a3); void __stdcall sub_484780(void *a1); int *__thiscall sub_4847E0(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_4848A0(_DWORD **this); char __thiscall sub_484960(_DWORD *this); void __thiscall sub_4849C0(int this); char __thiscall sub_484A30(_DWORD *this); void __thiscall sub_484B30(_DWORD *this); char __thiscall sub_484BD0(_DWORD *this); char __thiscall sub_4850B0(_DWORD *this); char __thiscall sub_485110(_DWORD *this); char __thiscall sub_485280(_DWORD *this); void *__thiscall sub_4854E0(_DWORD *this); void __thiscall sub_485580(_DWORD *this); char __thiscall sub_485640(char *this); char __thiscall sub_485E60(int this, int a2); _DWORD *__cdecl sub_486130(int a1); char *sub_486220(); _DWORD *__thiscall sub_486240(_DWORD *this, _DWORD *a2); int __thiscall sub_486290(_BYTE **this, int a2, _WORD *a3); int __thiscall sub_4862C0(_DWORD **this, int a2, unsigned __int8 *a3); char __thiscall sub_486310(_DWORD *this, char *a2); void __thiscall sub_4863E0(_DWORD *this, char a2); char __thiscall sub_4864D0(_DWORD *this); int __thiscall sub_486500(void *this, int a2, unsigned __int8 *a3); int __thiscall sub_486590(void *this, int a2, unsigned __int16 *a3); void __thiscall sub_486620(int *this, int a2); int __thiscall sub_486870(void *this, int a2, int a3); int __thiscall sub_4868D0(int *this, int a2, int a3); int __thiscall sub_486980(void *this, int a2, unsigned __int8 *a3); void __thiscall sub_486B40(_DWORD *this); int __thiscall sub_486BF0(_DWORD **this, int a2, int a3, int a4, unsigned __int16 *a5); void __thiscall sub_486D80(void *); // idb char __thiscall sub_486DA0(_DWORD *this, char a2, char *a3); _BYTE *__thiscall sub_486E30(_BYTE *this, int a2, int a3, int a4); int __thiscall sub_486EB0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_487000(_DWORD *this, wchar_t *a2, int a3, int a4); _DWORD *__thiscall sub_4870E0(_DWORD *this, int a2); int __cdecl sub_487210(int a1); int sub_487450(); int sub_487480(); void __thiscall sub_487490(_DWORD **this); int __thiscall sub_4874D0(int this); void __thiscall sub_487750(_DWORD *this); // void __usercall sub_487870(int a1@, unsigned int a2@); int __thiscall sub_487AF0(_DWORD **this); int __thiscall sub_487BD0(_DWORD **this); int __thiscall sub_487C00(_DWORD **this, unsigned __int16 a2); int __thiscall sub_487C40(_DWORD **this, int a2); int __thiscall sub_487C70(_DWORD **this); int __thiscall sub_487CA0(_DWORD **this, int a2); char __thiscall sub_487CD0(int this); int __thiscall sub_487D40(_DWORD **this, char *a2, char *a3); char __thiscall sub_487DB0(int this); char __thiscall sub_487E40(_DWORD *this); int __thiscall sub_487F20(_DWORD *this, int a2); int __thiscall sub_4880D0(_DWORD *this, float a2); // void __userpurge sub_4883A0(int a1@, unsigned int a2@, int a3, int a4, int a5); void __thiscall sub_488D50(_DWORD *this, int a2); _DWORD *__thiscall sub_488E60(_DWORD *this); void __thiscall sub_488F60(void **this); void *__thiscall sub_4891A0(void *this, char a2); _DWORD *__thiscall sub_4891D0(_DWORD *this); int __thiscall sub_4891F0(_DWORD *this); _DWORD *__thiscall sub_489270(void *this, char a2); _DWORD *__thiscall sub_489300(_DWORD *this); int __thiscall sub_489320(_DWORD *this); _DWORD *__thiscall sub_4893A0(void *this, char a2); int *sub_489430(); int __thiscall sub_489440(void *this); int sub_489450(); void *__thiscall sub_489460(void *this, char a2); int __thiscall sub_4894F0(int this); _DWORD *__thiscall sub_489500(_DWORD *this, int a2); int __thiscall sub_489590(void **this, int a2, int a3); _DWORD *__thiscall sub_489600(_DWORD *this); void __thiscall sub_489660(_DWORD *this); char __thiscall sub_489710(_DWORD *this, int a2); void __thiscall sub_489790(_DWORD **this, int a2, int a3, int a4); void __thiscall sub_4897F0(_DWORD *this); int __thiscall sub_4898C0(int this, int a2, int a3, int a4, unsigned __int16 *a5); int *sub_4899A0(); int sub_4899B0(); void *__thiscall sub_4899C0(void *this, char a2); BOOL __thiscall sub_489AE0(HWND *this); int __thiscall sub_489B10(_DWORD *this); BOOL __thiscall sub_489B60(HWND *this); HINSTANCE __thiscall sub_489C30(const CHAR *this, int a2, int a3); void __thiscall sub_489C60(_BYTE *this); char __thiscall sub_489D70(HWND *this, int a2, int a3); char __thiscall sub_489DA0(_BYTE *this); BOOL __thiscall sub_489EC0(HWND *this, int a2); char __thiscall sub_489ED0(volatile LONG **this, int a2); char __thiscall sub_48A090(void *this, int a2); int __cdecl sub_48A340(int a1); int __cdecl sub_48A4A0(int a1); int __thiscall sub_48A600(char *this); void *__thiscall sub_48A750(void *this, char a2); void *__thiscall sub_48A790(void *this, char a2); HINSTANCE __thiscall sub_48A830(const char *this); HINSTANCE __thiscall sub_48A870(const char *this); char *__thiscall sub_48A8B0(int this, char *a2); char *__thiscall sub_48A900(int this, char *a2); char __thiscall sub_48A9C0(_DWORD **this); int __thiscall sub_48AA20(_DWORD *this); int __thiscall sub_48AA70(_DWORD *this); char __thiscall sub_48AAC0(_DWORD *this, int a2); LONG __thiscall sub_48AB60(_DWORD *this); int __thiscall sub_48AC80(_BYTE *this); int __thiscall sub_48ACB0(_BYTE *this); char __thiscall sub_48ACF0(void *this, int a2); volatile LONG *__thiscall sub_48B0A0(_DWORD *this); char __thiscall sub_48B120(void *this, int a2); char __thiscall sub_48B220(int this, int a2, int a3); int __thiscall sub_48B2D0(_DWORD **this, int a2); HINSTANCE __thiscall sub_48B380(char *this, HINSTANCE a2, int a3); int __cdecl sub_48B450(int a1); void *__thiscall sub_48B5B0(void *this, char a2); int __thiscall sub_48B5E0(_DWORD *this); signed int __thiscall sub_48B5F0(int this); char __thiscall sub_48B630(_DWORD **this); void __thiscall sub_48B700(_DWORD **this, int a2, int a3); int __thiscall sub_48B800(_DWORD **this, int a2); int __thiscall sub_48B830(_DWORD *this); FILE *__thiscall sub_48B940(char *this); char __thiscall sub_48B9B0(char *this); int __thiscall sub_48BA20(_DWORD **this); char __thiscall sub_48BB20(volatile LONG **this, int a2); bool __thiscall sub_48BCC0(int this); void __thiscall sub_48BD10(_DWORD *this, int a2); char __thiscall sub_48BD90(char *this, int a2); char __thiscall sub_48C730(char *this, int a2); FILE *__thiscall sub_48C770(char *this, unsigned int a2); void __stdcall sub_48C8C0(int a1); char __thiscall sub_48CA60(volatile LONG **this, int a2); char __thiscall sub_48CC50(int *this, int a2, int a3); char __thiscall sub_48CC70(void *this, int a2); char __thiscall sub_48CFA0(int this, int a2, int a3); int __thiscall sub_48D030(int this); LONG __thiscall sub_48D0B0(void *this); FILE *__thiscall sub_48D120(_DWORD *this); int *__thiscall sub_48D1D0(_DWORD *this); int __cdecl sub_48D270(int a1); int __cdecl sub_48D3B0(int a1); int __cdecl sub_48D4F0(int a1); _DWORD *__thiscall sub_48D650(_DWORD *this); volatile LONG *__cdecl sub_48D750(int a1); int __thiscall sub_48D880(_DWORD *this); int __thiscall sub_48DC90(_DWORD *this, int a2); FILE *__thiscall sub_48DD20(_BYTE *this); FILE *__thiscall sub_48DDB0(char *this); FILE *__thiscall sub_48DDF0(char *this); char __thiscall sub_48DE20(int this, float a2); void __thiscall sub_48DFC0(int this, int a2, int a3); char __thiscall sub_48E0A0(_BYTE *this, int a2); void *__thiscall sub_48E0E0(void *this, char a2); void *__thiscall sub_48E120(void *this, char a2); void *__thiscall sub_48E160(void *this, char a2); void *__thiscall sub_48E1A0(void *this, char a2); int __stdcall sub_48E1D0(int a1, _WORD *a2); int __stdcall sub_48E1F0(int a1, _WORD *a2); int __stdcall sub_48E270(int a1, unsigned __int16 *a2); int __stdcall sub_48E2A0(int a1, _WORD *a2); int __stdcall sub_48E2C0(int a1, _WORD *a2); void __thiscall sub_48E330(_DWORD *this); void __thiscall sub_48E3C0(_DWORD *this); int __stdcall sub_48E410(int a1, int a2); char __stdcall sub_48E460(_BYTE *a1); char __stdcall sub_48E590(_BYTE *a1); char __stdcall sub_48E640(int a1); char __stdcall sub_48E6E0(_BYTE *a1); char __stdcall sub_48E7C0(int a1); int __thiscall sub_48E910(void *this, int a2, _WORD *a3); int __stdcall sub_48E9D0(int a1, int a2); char __thiscall sub_48EA90(_DWORD *this, char a2); int __thiscall sub_48EAE0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_48EB40(_DWORD **this, int a2, int a3); int __thiscall sub_48EC70(void *this, int a2, unsigned __int16 *a3); void __thiscall sub_48EE70(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_48EF10(_DWORD *this, int a2, int a3); void __thiscall sub_48F020(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_48F0C0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_48F210(void *this, int a2, int a3); int __thiscall sub_48F280(_DWORD *this, int a2, signed int a3, int a4, unsigned __int16 *a5); int __stdcall sub_48F660(int a1, unsigned __int8 *a2); int __stdcall sub_48F6A0(int a1, _WORD *a2); int __stdcall sub_48F700(int a1, int *a2); char __thiscall sub_48F760(_DWORD *this, int a2); int __stdcall sub_48F8C0(int a1, int a2); _DWORD *__thiscall sub_48F950(_DWORD *this); void __thiscall sub_48F9B0(_DWORD *this); char __thiscall sub_48FA60(_DWORD *this, int a2); void __thiscall sub_48FB40(_DWORD *this); void __thiscall sub_48FB80(_DWORD **this, int a2, int a3, int a4); int __thiscall sub_48FBE0(void *this, int a2, unsigned __int16 *a3); int __thiscall sub_48FC70(_DWORD *this, int a2, const void *a3); void __thiscall sub_48FCF0(_DWORD *this); int __stdcall sub_48FEE0(int a1, _DWORD *a2); int __thiscall sub_490030(int this, int a2, int a3, int a4, unsigned __int16 *a5); int *sub_490360(); int sub_490370(); void *__thiscall sub_4903A0(void *this, char a2); char __thiscall sub_490410(void *this, int a2); void *__thiscall sub_490CD0(void *this, char a2); char sub_490D60(); char __stdcall sub_490DE0(int a1); char __thiscall sub_490E00(void *this, int a2); int __thiscall sub_491510(_DWORD *this, int a2); void __thiscall sub_491560(void **this, int a2, int a3); void __thiscall sub_4915C0(_DWORD *this, int a2); int __thiscall sub_4917D0(_DWORD **this); int __cdecl sub_491800(int a1); char __thiscall sub_491940(_BYTE *this, int a2); void *__thiscall sub_491980(void *this, char a2); char __thiscall sub_491A60(void *this, int a2); void *__thiscall sub_491E90(void *this, char a2); char __thiscall sub_491EE0(char *this); void __thiscall sub_492010(_DWORD ***this, const char *a2); void __thiscall sub_492020(_DWORD ***this, char *a2); // void __userpurge sub_492030(int a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, int a8); void __thiscall sub_492060(_DWORD *this, int a2); void __thiscall sub_492090(_DWORD *this, int a2); void sub_4920B0(int a1, char *a2, ...); void __thiscall sub_492120(_DWORD ***this, int a2); // char __usercall sub_492150@(BYTE *a1@, _DWORD *a2); // char __usercall sub_492180@(_BYTE *a1@, _BYTE *a2@, _DWORD *a3@); char __fastcall sub_4921E0(char *a1); char __cdecl sub_492210(_BYTE *a1); char __thiscall sub_492280(_BYTE *this); // char __usercall sub_492300@(const char *a1@, _DWORD *a2); // char __usercall sub_492340@(const char *a1@, _DWORD *a2); char __stdcall sub_492380(_BYTE *a1, int a2); // char __usercall sub_492530@(const char *a1@, _DWORD *a2); // char __usercall sub_492570@(const char *a1@, _DWORD *a2); // char __usercall sub_4925B0@(const char *a1@, _DWORD *a2); // char __usercall sub_4925F0@(const char *a1@, _DWORD *a2); // char __usercall sub_492630@(_DWORD *a1@, const char *a2@); // char __usercall sub_492690@(const char *a1@, _DWORD *a2); // char __usercall sub_4926D0@(const char *a1@, _DWORD *a2); void __thiscall sub_492730(_DWORD ***this, int a2, char *a3); int __thiscall sub_492740(_DWORD *this); void __thiscall sub_492760(_DWORD ***this, char *a2, int a3); void __thiscall sub_4927A0(_DWORD ***this, char *a2, char a3); void __thiscall sub_492820(_DWORD ***this, char *a2); void __thiscall sub_492860(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492900(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492980(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492A00(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492AA0(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492B40(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492BE0(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492C80(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492D20(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492DF0(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492EC0(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_492FC0(char **this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_493120(char **this, int a2, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_493190(_BYTE *this, char a2); _DWORD *__thiscall sub_4931A0(int *this); _DWORD *__thiscall sub_4931F0(int *this); void __thiscall sub_493240(_DWORD *this); // bool __usercall sub_4932B0@(int a1@, char *a2, int a3); char __thiscall sub_493330(_DWORD *this, int a2, char a3); char *__thiscall sub_4935F0(int this); char *__thiscall sub_493630(int this); char __thiscall sub_493670(_DWORD ***this); char __thiscall sub_493720(_DWORD ***this); char __thiscall sub_4938F0(void *this, char *a2); _DWORD *__thiscall sub_494840(_DWORD *this); void __thiscall sub_494860(int *this); void __thiscall sub_4948F0(int *this, void *a2); void __thiscall sub_4949F0(_DWORD *this, void *a2); char __thiscall sub_494C00(_DWORD *this, char *a2); void __thiscall sub_496030(int this, char *a2, const char *a3, int a4); _DWORD *__cdecl sub_496500(_DWORD *a1); void __thiscall sub_496520(float *this, float a2); void __thiscall sub_496590(void *this, char a2); int __thiscall sub_4965F0(void *this, int a2, int a3); int __thiscall sub_496680(int this); int *sub_4966F0(); bool __thiscall sub_496720(_DWORD *this, char a2, int a3, int a4, int a5, int a6); int __thiscall sub_496740(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); void **sub_4967C0(); void **__cdecl sub_4968A0(int a1, int a2, void *a3); char **__stdcall sub_496930(char *a1, int a2, void *a3); void sub_496A00(); void sub_496A10(); void sub_496A20(); int nullsub_7(void); // weak int nullsub_8(void); // weak int nullsub_9(void); // weak signed int __cdecl sub_496A60(int a1); _BYTE *__thiscall sub_496AB0(_DWORD *this); unsigned int __thiscall sub_496B90(int *this); void __thiscall sub_496D40(char **this); char __thiscall sub_496DD0(int *this); int __thiscall nullsub_10(_DWORD); // weak int __thiscall sub_4970D0(_DWORD *this, int a2); _DWORD *__thiscall sub_497270(_DWORD *this, void *a2); void __thiscall sub_497290(_DWORD *this); void __thiscall sub_497510(_DWORD *this); char __thiscall sub_4975A0(_DWORD *this); // char __usercall sub_497D70@(int a1@, int a2@); char __thiscall sub_497E10(void *this); char __thiscall sub_497F40(_DWORD *this); char __thiscall sub_497FE0(_DWORD *this); char __thiscall sub_498180(_DWORD *this); char sub_498220(); int __stdcall sub_498400(int a1, int a2); char __thiscall sub_4984E0(_DWORD *this); // int __usercall sub_4985A0@(int a1@, int a2@); char __thiscall sub_4990F0(_DWORD **this); char sub_499AE0(); char __thiscall sub_499C50(_DWORD ****this); char __thiscall sub_499DA0(_DWORD *this); _DWORD *__thiscall sub_499E80(_DWORD *this); int __thiscall sub_49B480(void *this); // char __usercall sub_49B770@(int a1@, int a2@, int a3@); // char __userpurge sub_49D4F0@(int a1@, int a2@, int a3@, int a4); char __thiscall sub_49EBC0(_DWORD *this, int a2, int a3, int a4, __int16 *a5); int __stdcall sub_49EEB0(int a1, _DWORD *a2); char __thiscall sub_49F1D0(_DWORD *this, int a2, _DWORD **a3, int a4); int __cdecl sub_49F370(int a1); _DWORD *__thiscall sub_49F3C0(_DWORD *this); void __cdecl sub_49F420(float a1); void *__thiscall sub_49F460(void *this, char a2); _DWORD *__cdecl sub_49F490(_DWORD *a1); int __thiscall sub_49F4C0(_DWORD *this, unsigned int a2); void sub_49F4F0(int a1, char *a2, ...); int sub_49F530(); int sub_49F550(); int __thiscall sub_49F570(void *this, int a2, int a3, float a4, float a5); int __thiscall sub_49F5F0(void *this, int a2, int a3, float a4, float a5); unsigned int __thiscall sub_49F670(float *this); int __cdecl sub_49F760(int a1); int __cdecl sub_49F7B0(const void *a1); _DWORD *__thiscall sub_49F840(void *this, char a2); int __cdecl sub_49F8D0(_DWORD *a1); signed __int16 __cdecl sub_49F930(int a1); int __thiscall sub_49F980(_DWORD *this); LONG __fastcall sub_49FA00(_DWORD *a1); _DWORD *__thiscall sub_49FAD0(_DWORD *this, char *a2); int __thiscall sub_49FB40(_DWORD *this); int __cdecl sub_49FBB0(int a1); void __thiscall sub_49FC00(int *this, int a2, __int16 *a3, int a4); // char __userpurge sub_49FD20@(int a1@, int a2@, int a3, int a4, int a5, __int16 *a6); int __thiscall sub_4A0060(_DWORD *this); char *__thiscall sub_4A00B0(_DWORD *this, char *a2); void __thiscall sub_4A0190(void *); // idb void __thiscall sub_4A01F0(void *); // idb void __thiscall sub_4A0350(int this); int __thiscall sub_4A04A0(_DWORD *this); void __thiscall sub_4A04B0(_DWORD *this, char *a2); // char __usercall sub_4A0580@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A0640@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A0700@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A07D0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A08A0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A09B0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); // char __usercall sub_4A0AF0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@); char __thiscall sub_4A0D00(void *this); void __thiscall sub_4A0DB0(int this); void __fastcall sub_4A0EC0(unsigned int a1); bool sub_4A10B0(); char sub_4A10E0(); int __cdecl sub_4A1170(int a1); void __thiscall sub_4A1330(_DWORD *this, int a2, char a3); char __thiscall sub_4A1540(_DWORD *this, _BYTE *a2); void __thiscall sub_4A1650(float *this, _BYTE *a2); void __thiscall sub_4A1880(_DWORD *this, int a2); // void __userpurge sub_4A19C0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3); // void __userpurge sub_4A1BA0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3); // void __userpurge sub_4A1CA0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3); char __stdcall sub_4A1E30(float *a1); void __thiscall sub_4A2030(float *this, char *a2); void __thiscall sub_4A2160(_DWORD *this, char *a2); char __thiscall sub_4A21E0(void *this, signed int a2, _DWORD *a3, LONG a4, _DWORD *a5, int *a6, int a7); void __thiscall sub_4A2420(void *this, int a2); void __thiscall sub_4A2550(void *this, unsigned __int16 a2); void __thiscall sub_4A2620(int *this); void __thiscall sub_4A33D0(_DWORD **this); void __thiscall sub_4A3570(_DWORD **this); BOOL __thiscall sub_4A37E0(float *this, float *a2); int sub_4A3820(); int __cdecl sub_4A38A0(int a1); float *__thiscall sub_4A38F0(float *this, float *a2); float *__thiscall sub_4A3910(void *this, float *a2, int a3); int __thiscall sub_4A3A00(_DWORD *this, _DWORD *a2, char a3); int __thiscall sub_4A3A60(_BYTE *this, int a2); int __thiscall sub_4A3AA0(_DWORD **this); int __thiscall sub_4A3AC0(_DWORD **this, char a2); int __thiscall sub_4A3B60(_DWORD **this); _DWORD *__cdecl sub_4A3B80(_DWORD *a1); int __thiscall sub_4A3BB0(int this, float a2, float a3, int a4); int __thiscall sub_4A3C10(int this, int a2, float a3, int a4); int __cdecl sub_4A3C90(unsigned int a1); int __cdecl sub_4A3CB0(int a1, const char *a2); int __cdecl sub_4A3D40(__int16 a1, int a2, int a3); int __cdecl sub_4A3DB0(unsigned __int8 *); // idb int **__thiscall sub_4A3E20(_DWORD *this, int **a2, _WORD *a3); BOOL __cdecl sub_4A3E90(int a1, unsigned __int8 *a2); int __thiscall sub_4A3ED0(_DWORD *this, char a2); void __thiscall sub_4A3F00(char *this, const char *a2); int __thiscall sub_4A4000(char *this, char *a2); int __thiscall sub_4A4030(_DWORD); // weak void __thiscall sub_4A4060(_DWORD **this); char __thiscall sub_4A40B0(_DWORD *this, int a2); char __thiscall sub_4A4130(_DWORD *this, int a2); char __thiscall sub_4A41B0(_DWORD *this, int a2); char __thiscall sub_4A4230(_DWORD *this); char __thiscall sub_4A42A0(char *this); void __thiscall sub_4A4560(_DWORD *this, int a2, int a3); unsigned int __thiscall sub_4A47F0(_DWORD *this, int a2, unsigned int a3); unsigned int __thiscall sub_4A4AB0(_DWORD **this); char __thiscall sub_4A4BA0(_DWORD *this); char __thiscall sub_4A4BC0(_DWORD *this); char __thiscall sub_4A4BE0(_DWORD *this, char a2); char __thiscall sub_4A4C30(_DWORD *this); bool __thiscall sub_4A4C40(_DWORD **this); char __thiscall sub_4A4C60(_DWORD **this); void __thiscall sub_4A4CA0(_DWORD **this); char __thiscall sub_4A4CF0(_DWORD **this); // _DWORD *__usercall sub_4A4D80@(_DWORD *a1@, int a2@, int a3@); int __thiscall sub_4A4DE0(_DWORD *this); int sub_4A4E40(); int __thiscall sub_4A4E90(int **this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5, int a6); int __thiscall sub_4A4ED0(volatile LONG **this, _DWORD *a2, _DWORD *a3, int a4); int __thiscall sub_4A4EE0(volatile LONG **this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5, int a6); char __thiscall sub_4A4F20(_DWORD **this, int a2, int a3, int a4, int a5); char __thiscall sub_4A4F60(_DWORD **this, char a2, char a3); char __thiscall sub_4A4FE0(_DWORD **this); char __thiscall sub_4A5000(_DWORD *this); char __thiscall sub_4A5020(_DWORD **this); void __thiscall sub_4A5050(_DWORD ***this, int a2); char __thiscall sub_4A5060(_DWORD *this, int a2); char __thiscall sub_4A5090(_DWORD *this, char a2, int a3); char __thiscall sub_4A50D0(_DWORD *this); char __thiscall sub_4A50F0(_DWORD *this); char __thiscall sub_4A5110(_DWORD *this); char __thiscall sub_4A5130(_DWORD *this); char __thiscall sub_4A5170(_DWORD *this, const char *a2); char __thiscall sub_4A51B0(_DWORD *this); char __thiscall sub_4A5200(_DWORD *this); char __thiscall sub_4A5240(_DWORD *this); char __thiscall sub_4A5260(_DWORD *this); char __thiscall sub_4A5280(_DWORD *this); char __thiscall sub_4A52A0(_DWORD *this); char __thiscall sub_4A52E0(_DWORD **this); char __thiscall sub_4A5300(_DWORD *this); signed int __thiscall sub_4A5320(_DWORD *this); void __thiscall sub_4A5330(_DWORD *this); char __thiscall sub_4A5390(_DWORD *this); char __thiscall sub_4A53B0(_DWORD *this); char __thiscall sub_4A53D0(_DWORD *this); char __thiscall sub_4A53F0(_DWORD *this); char __thiscall sub_4A5410(_DWORD **this); void __thiscall sub_4A5450(_DWORD *this); void __thiscall sub_4A5490(_DWORD *this); void __thiscall sub_4A54D0(_DWORD *this); char __thiscall sub_4A5550(int this, int a2); char __thiscall sub_4A55A0(int this, int a2); // void __usercall sub_4A55E0(int a1@, int a2@, int a3@); // void __usercall sub_4A5650(int a1@, int a2@, int a3@); // void __usercall sub_4A56C0(int a1@, int a2@); char __thiscall sub_4A5730(_DWORD **this); char __thiscall sub_4A5750(_BYTE **this); char __thiscall sub_4A5790(_DWORD *this, __int16 a2); char __thiscall sub_4A57B0(_DWORD *this, __int16 a2); char __thiscall sub_4A57D0(_DWORD *this, char a2); char __thiscall sub_4A5800(_DWORD *this, __int16 a2, char a3, int a4); int nullsub_11(void); // weak char __thiscall sub_4A5860(_DWORD **this); signed int sub_4A5880(); char sub_4A58A0(); char __thiscall sub_4A58C0(_DWORD **this, char a2); void __thiscall sub_4A5910(_DWORD *this, char a2); int __thiscall sub_4A5940(_DWORD **this, char a2, 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 __thiscall sub_4A5AE0(_DWORD **this); char __thiscall sub_4A5B30(_DWORD *this); char __thiscall sub_4A5B60(_DWORD *this); char __thiscall sub_4A5B80(_DWORD *this); void __thiscall sub_4A5BA0(_DWORD **this); void __thiscall sub_4A5C20(_DWORD **this); void __thiscall sub_4A5C60(_DWORD **this); char __thiscall sub_4A5CA0(_DWORD *this, char a2); char __thiscall sub_4A5CD0(_DWORD *this, char a2); char __thiscall sub_4A5D00(_DWORD *this); char __thiscall sub_4A5D20(_DWORD **this); void __thiscall sub_4A5D50(_DWORD **this); char __thiscall sub_4A5DC0(_DWORD *this, char a2); char __thiscall sub_4A5DF0(_DWORD *this, char a2); void __thiscall sub_4A5E20(_DWORD *this, char a2); char __thiscall sub_4A5E90(_DWORD *this); char __thiscall sub_4A5EB0(_DWORD *this); void __thiscall sub_4A5ED0(_DWORD *this, char a2); void __thiscall sub_4A5F40(_DWORD *this, char a2); void __thiscall sub_4A5FB0(_DWORD *this, char a2); void __thiscall sub_4A6020(_DWORD *this, char a2); LRESULT __thiscall sub_4A6090(_DWORD **this, const char *a2, int a3); void __thiscall sub_4A60B0(_DWORD *this, char a2); char __thiscall sub_4A6140(int **this, int a2, signed int a3, int a4); char __thiscall sub_4A6240(_DWORD **this); int __thiscall sub_4A6260(_DWORD ***this, int a2, int a3); float *__thiscall sub_4A6290(_DWORD *this); void __thiscall sub_4A6310(_DWORD **this); void __thiscall sub_4A6350(_DWORD **this); void __thiscall sub_4A63A0(_DWORD **this); void __thiscall sub_4A6400(_DWORD **this); void __thiscall sub_4A6460(_DWORD **this); char __thiscall sub_4A64F0(_DWORD *this); LONG sub_4A65F0(); void __thiscall sub_4A6670(_DWORD *this); void __thiscall sub_4A66E0(_DWORD *this); void __thiscall sub_4A6790(_DWORD **this); char __thiscall sub_4A67B0(_DWORD *this); void __thiscall sub_4A67D0(_DWORD **this); char __thiscall sub_4A6820(_DWORD *this); void __thiscall sub_4A6880(_BYTE *this); void __thiscall sub_4A68A0(_BYTE *this); void __thiscall sub_4A68C0(_BYTE *this); void __thiscall sub_4A68E0(_BYTE *this); void __thiscall sub_4A6900(_DWORD *this); char sub_4A6920(); char sub_4A69A0(); void __thiscall sub_4A6A00(void *this); void __thiscall sub_4A6A60(void *this); char __thiscall sub_4A6AC0(_DWORD **this); char __thiscall sub_4A6B50(_DWORD **this); float *__thiscall sub_4A6BA0(_DWORD **this); char __thiscall sub_4A6C70(_DWORD *this, char a2); void __thiscall sub_4A6CB0(_DWORD **this); char __thiscall sub_4A6D20(_DWORD *this); char __thiscall sub_4A6D50(_DWORD **this); char __thiscall sub_4A6DA0(_DWORD *this); char __thiscall sub_4A6DD0(_DWORD **this, unsigned __int8 a2); char __thiscall sub_4A6E40(_DWORD *this); char __thiscall sub_4A6E80(_DWORD **this, __int16 a2); int __thiscall sub_4A6FD0(_DWORD *this); void __thiscall sub_4A7020(_DWORD **this); // void __userpurge sub_4A7080(int a1@, int a2@, int a3@, int a4, void *a5); void __thiscall sub_4A7150(_DWORD *this); void __thiscall sub_4A71A0(_DWORD *this); char __thiscall sub_4A7240(void *this); void __thiscall sub_4A72D0(_DWORD *this); char __thiscall sub_4A7320(_DWORD **this); char __thiscall sub_4A7390(_DWORD **this); char *__thiscall sub_4A73D0(_DWORD *this); char *__thiscall sub_4A7420(_DWORD *this); char __thiscall sub_4A7470(_DWORD *this); char __thiscall sub_4A74B0(_DWORD *this); void __thiscall sub_4A74F0(_DWORD *this, void *a2); void __thiscall sub_4A7540(_DWORD *this, void *a2); void __thiscall sub_4A7590(_DWORD *this, void *a2); char __thiscall sub_4A75D0(_DWORD **this); char __thiscall sub_4A7630(_DWORD **this, char a2); void __thiscall sub_4A7670(_DWORD **this, int a2); char __thiscall sub_4A76B0(_DWORD *this); void __thiscall sub_4A7710(float *this); char sub_4A7730(); char __thiscall sub_4A7770(_DWORD *this, int a2); char __thiscall sub_4A7840(_DWORD **this, char *a2); // char __usercall sub_4A78C0@(int a1@, void (__thiscall ***a2)(_DWORD, signed int)@); char __thiscall sub_4A79F0(_DWORD *this, __int16 a2); // char __userpurge sub_4A7A40@(int a1@, int a2@, int a3@, int a4, int a5, char a6, char a7); char __thiscall sub_4A7B20(_DWORD **this, int a2); char __thiscall sub_4A7BC0(_DWORD *this, int a2); char __thiscall sub_4A7D80(_DWORD **this); char sub_4A7DD0(); char __thiscall sub_4A7DF0(_DWORD **this); char sub_4A7E40(); void __thiscall sub_4A7E60(_DWORD *this, char a2, char a3); void __thiscall sub_4A7F00(_DWORD *this); char __thiscall sub_4A7F90(_DWORD *this); char __thiscall sub_4A7FF0(_DWORD *this, char a2); void __thiscall sub_4A8040(_DWORD *this); signed int __thiscall sub_4A8070(_DWORD *this); int __thiscall sub_4A80D0(char **this, int a2); char __thiscall sub_4A8140(int this, int a2); bool __thiscall sub_4A81F0(int this, int a2); void __thiscall sub_4A8220(_DWORD **this); void __thiscall sub_4A8320(_DWORD *this); // void __usercall sub_4A8370(int a1@, double a2@); void __thiscall sub_4A87B0(_DWORD **this); void __thiscall sub_4A87F0(_DWORD **this); void __thiscall sub_4A88A0(_DWORD **this); char __thiscall sub_4A88F0(_DWORD *this); void __thiscall sub_4A8950(_DWORD *this); void __thiscall sub_4A8A70(_DWORD **this, int a2); void __thiscall sub_4A8AE0(_DWORD *this, char a2); void __thiscall sub_4A8B80(_DWORD **this); void __thiscall sub_4A8C00(_DWORD *this); char __thiscall sub_4A8D50(_DWORD *this); // char __usercall sub_4A8F40@(int a1@, int a2@); // void __usercall sub_4A9150(int a1@, void (__thiscall ***a2)(_DWORD, signed int)@); char __thiscall sub_4A9380(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_4A9420(_DWORD ***this, int a2, int a3, int a4); void __thiscall sub_4A94B0(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_4A9520(_DWORD *this); char __thiscall sub_4A9790(_DWORD *this); void __thiscall sub_4A98A0(void *this); // char __usercall sub_4A99C0@(int a1@, int a2@); // char __usercall sub_4A9B00@(int a1@, int a2@); void __thiscall sub_4A9C40(_DWORD **this); void __thiscall sub_4A9CD0(_DWORD **this); void __thiscall sub_4A9D20(_DWORD *this); void __thiscall sub_4A9E30(_DWORD *this, int a2); _DWORD *__thiscall sub_4A9FF0(_DWORD *this, int a2); void __thiscall sub_4AA080(_BYTE **this, char a2); void __thiscall sub_4AA0F0(_DWORD *this, char a2); _DWORD *__thiscall sub_4AA150(void *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_4AA230(_DWORD *this, char *a2); char __thiscall sub_4AA2E0(_DWORD *this, char *a2); char __thiscall sub_4AA390(_DWORD *this); char __thiscall sub_4AA3B0(_DWORD *this); char __thiscall sub_4AA400(_DWORD *this); char __thiscall sub_4AA450(_DWORD *this); char __thiscall sub_4AA4A0(_DWORD *this); char __thiscall sub_4AA4F0(_DWORD *this); void __thiscall sub_4AA540(_DWORD *this, int a2); // void __userpurge sub_4AA750(_DWORD *a1@, double a2@, char a3, int a4, unsigned int a5, unsigned int a6, int a7); void __thiscall sub_4AA8A0(_DWORD *this, int a2, int a3); char sub_4AA940(); // unsigned int __userpurge sub_4AA990@(int a1@, int a2@, int a3@, char a4, int a5); char __thiscall sub_4AAC10(_DWORD *this, int a2); void __thiscall sub_4AAED0(_DWORD *this); void __thiscall sub_4AAF70(_DWORD *this); void __thiscall sub_4AAFC0(_DWORD *this); void __thiscall sub_4AB080(_DWORD *this); void __thiscall sub_4AB170(_DWORD *this); void __thiscall sub_4AB230(_DWORD *this); void __thiscall sub_4AB2F0(_DWORD *this, unsigned int a2, int a3); void __thiscall sub_4AB4D0(_BYTE **this); void __thiscall sub_4AB5F0(_DWORD *this); _DWORD *__thiscall sub_4AB6B0(char *this); void __thiscall sub_4AB820(_DWORD **this); // int __usercall sub_4AB890@(int a1@, int a2@); char __thiscall sub_4ABFA0(_DWORD *this); char __thiscall sub_4AC040(_DWORD *this); void __thiscall sub_4AC050(_DWORD *this); // void __usercall sub_4AC130(int a1@, double a2@); char __thiscall sub_4AC870(void *this, __int16 a2, int a3, int a4, int a5, int a6); void __thiscall sub_4ACB00(_DWORD *this, int a2); void __thiscall sub_4AD610(_DWORD *this, __int16 a2); // void __userpurge sub_4AD8F0(unsigned int a1@, double a2@, int a3, char *a4, void *a5); void __thiscall sub_4AF770(void *this, int a2); void __thiscall sub_4B0210(int this, int a2, unsigned __int8 *a3, int a4); char *sub_4B0D60(); int __cdecl sub_4B0D70(int a1); int __cdecl sub_4B0DC0(int a1); void *__thiscall sub_4B0E20(void *this, char a2); char *__thiscall sub_4B0E50(char *this, char *a2); char *__thiscall sub_4B0E80(char *this, char a2, 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, char a35); int __thiscall sub_4B0F00(_DWORD *this); _DWORD *__thiscall sub_4B0FA0(int this, _DWORD *a2); int __thiscall sub_4B0FE0(_DWORD *this); void *__thiscall sub_4B1070(void *this, char a2); void *__thiscall sub_4B10A0(void *this, char a2); int __thiscall sub_4B10D0(_DWORD **this, __int64 a2); void __thiscall sub_4B11E0(float **this); _DWORD *__thiscall sub_4B1230(_DWORD *this); void *__thiscall sub_4B1250(void *this, char a2); int sub_4B1280(); int sub_4B12A0(); int __thiscall sub_4B12C0(int this); int __thiscall sub_4B12E0(_DWORD **this, const CHAR *a2); int __thiscall sub_4B1390(_DWORD **this); int __thiscall sub_4B13B0(_DWORD **this, char a2); int __thiscall sub_4B13F0(_DWORD **this, int a2, int a3); int __thiscall sub_4B1450(_DWORD *this); _DWORD *__thiscall sub_4B14D0(void *this, char a2); int __cdecl sub_4B1560(int a1); int __cdecl sub_4B15B0(int a1); int __cdecl sub_4B1600(int a1); void __cdecl sub_4B1650(_DWORD *a1); _WORD *__cdecl sub_4B16E0(__int16 a1); int __cdecl sub_4B1730(char *); // idb const char *__cdecl sub_4B17D0(const char *a1); int __thiscall sub_4B1860(_DWORD *this); _DWORD *__thiscall sub_4B18E0(void *this, char a2); int __thiscall sub_4B1970(_DWORD *this); _DWORD *__thiscall sub_4B19F0(void *this, char a2); _DWORD *__thiscall sub_4B1A80(void *this, char a2); float *__cdecl sub_4B1B10(float *a1, unsigned int a2); int __cdecl sub_4B1B80(__int16 a1); _DWORD *__thiscall sub_4B1BE0(int this); int __thiscall sub_4B1C10(_DWORD **this, int a2, const CHAR *a3, int a4, char a5, int a6); int __thiscall sub_4B1C90(_DWORD **this, int a2); _WORD *__cdecl sub_4B1D30(__int16 a1); _DWORD *__cdecl sub_4B1D70(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__thiscall sub_4B1DB0(int this); int __thiscall sub_4B1DF0(_DWORD *this, int a2, void *a3, int a4); char __stdcall sub_4B1ED0(int a1, int a2, int a3, int a4); BOOL __cdecl sub_4B1EE0(int a1, int a2); void *__thiscall sub_4B1F10(void *this, char a2); int __thiscall sub_4B1F50(_DWORD **this); int __thiscall sub_4B1F90(_DWORD *this, int a2, int a3, void *a4); char __thiscall sub_4B20F0(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_4B21B0(int this); bool __thiscall sub_4B2290(char *this, int a2, int a3, int a4, int a5); int sub_4B2590(); int __thiscall sub_4B2610(int this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12); _DWORD *__thiscall sub_4B2690(_DWORD *this, _DWORD *a2); int __thiscall sub_4B2760(_DWORD *this, _DWORD *a2); int __thiscall sub_4B27E0(_DWORD *this, void *a2, char a3); char *__stdcall sub_4B2900(char *a1, char *a2); int __thiscall sub_4B2970(_DWORD *this, int a2, int a3); // int __userpurge sub_4B29A0@(int a1@, int a2@, int a3, _BYTE *a4); int __thiscall sub_4B29C0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B2A10(_DWORD *this, int a2, int a3); int __thiscall sub_4B2A30(_DWORD *this, int a2, int *a3); int __thiscall sub_4B2A50(_DWORD *this, int a2, _BYTE *a3); // int __userpurge sub_4B2A70@(int a1@, int a2@, int a3, char *a4); int __thiscall sub_4B2A90(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4B2B00(int *this, int a2, _WORD *a3); int __stdcall sub_4B2B50(int a1, int a2); int __thiscall sub_4B2BF0(_DWORD *this, int a2, int a3); int __stdcall sub_4B2C20(int a1, int *a2); int __thiscall sub_4B2C60(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4B2C90(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B2D10(int a1, _BYTE *a2); int __thiscall sub_4B2D50(void *this, int a2, int a3); int __stdcall sub_4B2E10(int a1, unsigned __int8 *a2); int __thiscall sub_4B2E70(_DWORD *this, int a2, __int16 *a3); int __stdcall sub_4B2EE0(int a1, _BYTE *a2); int __stdcall sub_4B2F50(int a1, unsigned int *a2); int __thiscall sub_4B2FD0(int *this, int a2, int a3); int __thiscall sub_4B3060(float *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B30C0(char **this, int a2, unsigned __int8 *a3); int __stdcall sub_4B3190(int a1, __int16 *a2); int __stdcall sub_4B31D0(int a1, __int16 *a2); int __stdcall sub_4B3220(int a1, __int16 *a2); int __stdcall sub_4B3270(int a1, _WORD *a2); int __stdcall sub_4B32B0(int a1, unsigned __int16 *a2); int __thiscall sub_4B3300(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B3330(int a1, unsigned int *a2); int __thiscall sub_4B3380(void *this, int a2, int a3); int __thiscall sub_4B33E0(_DWORD *this, int a2, int a3); int __thiscall sub_4B3470(_DWORD *this, int a2, int *a3); int __thiscall sub_4B34E0(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4B3510(float *this, int a2, __int16 *a3); int __thiscall sub_4B3580(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B35E0(void *this, int a2, __int16 *a3); int __thiscall sub_4B3690(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B3700(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B3770(_BYTE *this, int a2, int a3); int __stdcall sub_4B37B0(int a1, _DWORD *a2); int __thiscall sub_4B3800(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B3860(_DWORD *this, int a2, _BYTE *a3); int __stdcall sub_4B3900(int a1, _BYTE *a2); int __stdcall sub_4B3980(int a1, int *a2); // int __userpurge sub_4B39C0@(int a1@, int a2@, int a3, int a4); int __thiscall sub_4B3B80(char **this, int a2, LPCSTR lpString); int __thiscall sub_4B3BD0(_DWORD *this, int a2, _BYTE *a3); int __stdcall sub_4B3C10(int a1, unsigned __int16 *a2); int __stdcall sub_4B3C40(int a1, unsigned __int8 *a2); int __thiscall sub_4B3CA0(_DWORD ***this, int a2, __int64 *a3); int __thiscall sub_4B3D30(_DWORD ***this, int a2, int a3); int __thiscall sub_4B3D80(int *this, int a2, unsigned __int8 *a3); int __thiscall sub_4B3DE0(_DWORD **this, int a2, _DWORD *a3); int __thiscall sub_4B3E10(_DWORD **this, int a2, int *a3); int __thiscall sub_4B3EB0(_DWORD **this, int a2, int a3); int __thiscall sub_4B3F40(_DWORD **this, int a2, int a3); int __thiscall sub_4B3FC0(_DWORD *this, int a2, unsigned int *a3); int __thiscall sub_4B4000(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4B4030(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4050(int **this, int a2, unsigned __int16 *a3); int __thiscall sub_4B40A0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B40D0(int, int, int); // idb int __thiscall sub_4B4140(_DWORD *this, int a2, unsigned __int8 *a3); int __stdcall sub_4B41B0(int a1, unsigned __int8 *a2); int __thiscall sub_4B4260(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B4310(void *this, int a2, _BYTE *a3); int __thiscall sub_4B4350(_DWORD *this, int a2, unsigned __int16 *a3); int __stdcall sub_4B43B0(int a1, int a2); _DWORD __stdcall nullsub_49(_DWORD); // weak _DWORD __stdcall nullsub_12(_DWORD); // weak int __thiscall sub_4B44A0(_DWORD *this, int a2, int *a3); int __thiscall sub_4B44E0(_WORD **this, int a2, _WORD *a3); int __stdcall sub_4B4510(int a1, unsigned __int8 *a2); int __thiscall sub_4B4560(_DWORD *this, int a2, char *a3); int __thiscall sub_4B4580(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B45B0(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B45E0(int a1, int a2); int __stdcall sub_4B4620(int a1, _BYTE *a2); int __thiscall sub_4B4690(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B46C0(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B46F0(int a1, unsigned __int8 *a2); int __thiscall sub_4B47B0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B47E0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4810(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4840(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4870(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B48A0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B48E0(_DWORD *this, int a2, signed int *a3); int __thiscall sub_4B4910(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B4940(int a1, int a2); int __thiscall sub_4B4980(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B49B0(_DWORD **this, int a2, _WORD *a3); int __thiscall sub_4B4A10(_DWORD **this, int a2, int a3); int __thiscall sub_4B4A50(_DWORD **this, int a2, _WORD *a3); char __stdcall sub_4B4AD0(__int16 a1); char sub_4B4B00(); int __stdcall sub_4B4B40(int a1, unsigned __int8 *a2); char __stdcall sub_4B4B80(int a1); int __thiscall sub_4B4BB0(_DWORD **this, int a2, int a3); int __thiscall sub_4B4C00(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4C30(_DWORD *this, int a2, _WORD *a3); char __stdcall sub_4B4C60(int a1, __int16 a2); int __thiscall sub_4B4CA0(_DWORD *this, int a2, int a3); int __thiscall sub_4B4CE0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B4D10(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B4D50(_DWORD *this, int a2, int *a3); int __thiscall sub_4B4DD0(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B4EB0(int a1, __int16 *a2); int __stdcall sub_4B4F00(int a1, int a2); // int __userpurge sub_4B4F40@(int *a1@, int a2@, int a3, int a4); int __thiscall sub_4B4F80(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B4FB0(_DWORD **this, int a2, int a3); int __thiscall sub_4B5080(_DWORD ***this, int a2, int a3); int __thiscall sub_4B5150(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B5180(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B51B0(_DWORD ***this, int a2, int *a3); int __thiscall sub_4B5240(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B5270(_DWORD *this, int a2, int a3); int __thiscall sub_4B52A0(_DWORD **this, int a2, int a3); int __thiscall sub_4B5340(_DWORD **this, int a2, _BYTE *a3); int __thiscall sub_4B5460(_DWORD *this, int a2, int a3); int __thiscall sub_4B5490(_DWORD *this, int a2, int a3); int __thiscall sub_4B54E0(_DWORD *this, int a2, int a3); int __thiscall sub_4B5530(_DWORD *this, int a2, int a3); int __thiscall sub_4B5560(_DWORD *this, int a2, int a3); char __thiscall sub_4B5590(_DWORD ***this, int a2, char a3, char a4); int __thiscall sub_4B55D0(_DWORD ***this, int a2, _WORD *a3); int __thiscall sub_4B5710(_DWORD *this, int a2, int a3); int __thiscall sub_4B5750(_DWORD *this, int a2, unsigned __int16 *a3); char __stdcall sub_4B57B0(int a1, char a2, char a3); int __stdcall sub_4B57E0(int a1, _WORD *a2); int __thiscall sub_4B5840(int **this, int a2, int a3); int __thiscall sub_4B5A70(_DWORD **this, int a2, _WORD *a3); char sub_4B5B10(); int __thiscall sub_4B5BC0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B5CB0(int this, int a2, _BYTE *a3); int __thiscall sub_4B5CE0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B5D10(_BYTE *this); char __stdcall sub_4B5D50(int a1); int __thiscall sub_4B5D80(_DWORD *this, int a2, int a3); int __thiscall sub_4B5E00(_DWORD *this, int a2, int a3); int __thiscall sub_4B5E70(_DWORD *this, int a2, int a3); int __thiscall sub_4B5EE0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B5FA0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B6030(_DWORD **this, int a2, __int16 *a3); int __thiscall sub_4B6090(_BYTE **this, int a2, int a3); int __stdcall sub_4B6130(int a1, int a2); int __thiscall sub_4B6200(char **this, int a2, unsigned __int8 *a3); int __thiscall sub_4B6250(_DWORD **this, int a2, unsigned __int8 *a3); int __thiscall sub_4B6270(_DWORD **this, int a2, const void *a3); int __thiscall sub_4B62D0(_DWORD *this, int a2, unsigned __int16 *a3); // int __userpurge sub_4B62F0@(int a1@, int a2@, int a3, int a4); int __stdcall sub_4B6320(int a1, int a2); int __thiscall sub_4B6390(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B63F0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B6420(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B6450(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B6480(int a1, int a2); int __thiscall sub_4B6520(_DWORD *this, int a2, _WORD *a3); char __stdcall sub_4B6590(__int16 a1); int __thiscall sub_4B65C0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4B6670(_DWORD *this, int a2, unsigned int *a3); int __stdcall sub_4B66A0(int a1, __int16 *a2); char sub_4B66E0(); char sub_4B6700(); int __thiscall sub_4B6720(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B67D0(_DWORD *this, int a2, int a3); int __thiscall sub_4B68F0(_DWORD *this, int a2); int __thiscall sub_4B6940(_DWORD *this, int a2, int a3); int __thiscall sub_4B69C0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4B6A30(_DWORD *this, int a2, int a3); int __thiscall sub_4B6AE0(_DWORD *this, int a2, int *a3); int __thiscall sub_4B6B30(_DWORD *this, int a2, unsigned int *a3); int __thiscall sub_4B6B50(_DWORD *this, int a2, int a3); int __thiscall sub_4B6B90(_DWORD *this, int a2, int a3); int __thiscall sub_4B6BF0(_DWORD *this, int a2, int a3); int __thiscall sub_4B6C40(_DWORD *this, int a2, char *a3); int __thiscall sub_4B6C80(_DWORD **this, int a2, int a3); int __thiscall sub_4B6CA0(_DWORD **this, int a2, _WORD *a3); int __thiscall sub_4B6CD0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B6D30(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B6D80(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B6E10(int *this, int a2, int a3); int __thiscall sub_4B6E50(char **this, int a2, _WORD *a3); int __thiscall sub_4B6E80(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B6EF0(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4B6F70(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4B6FE0(_DWORD ***this, int a2, int a3); int __thiscall sub_4B7050(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4B70B0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B70D0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4B7110(_DWORD *this, int a2, int a3); int __thiscall sub_4B7150(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4B7180(int a1, int a2); char __thiscall sub_4B7210(_DWORD *this, int a2, int a3, void *a4, size_t a5); char __thiscall sub_4B72A0(_DWORD *this, int a2, int a3, void *a4, size_t a5); char __thiscall sub_4B72F0(_DWORD *this); char __thiscall sub_4B7350(_DWORD *this); char __thiscall sub_4B7380(_DWORD *this, float *a2, float *a3); char __thiscall sub_4B7460(int this, float *a2, float *a3); char __thiscall sub_4B7550(_DWORD *this, char a2); char __thiscall sub_4B75A0(_DWORD *this, __int16 a2); char __thiscall sub_4B75F0(_DWORD *this); char __thiscall sub_4B7620(_DWORD *this, float *a2); void __thiscall sub_4B76A0(_DWORD *this, void *a2); char __thiscall sub_4B7720(_DWORD *this); char __thiscall sub_4B7750(_DWORD *this, char a2); char __thiscall sub_4B77A0(_DWORD *this); char __thiscall sub_4B77D0(_DWORD *this); char __thiscall sub_4B7810(_DWORD *this, char a2); char __thiscall sub_4B7870(_DWORD *this, char a2, __int16 a3); char __thiscall sub_4B78F0(_DWORD *this, __int16 a2); char __thiscall sub_4B7940(_DWORD *this); char __thiscall sub_4B7970(_DWORD *this); void __thiscall sub_4B79A0(_DWORD *this); char __thiscall sub_4B7A00(int *this, __int16 a2, __int16 a3, __int16 a4); _DWORD __stdcall nullsub_13(_DWORD); // weak char __thiscall sub_4B7A80(_DWORD *this, __int16 a2, int a3); char __thiscall sub_4B7AD0(_DWORD *this, char a2, int a3); char __thiscall sub_4B7B90(_DWORD *this, __int16 *a2, __int16 *a3); char __thiscall sub_4B7C70(_DWORD *this, __int16 a2); char __thiscall sub_4B7CD0(_DWORD *this, char a2, char a3); char __thiscall sub_4B7D20(_DWORD *this, char a2, char a3); char __thiscall sub_4B7DC0(_DWORD *this, char a2, char a3, char a4, char a5, char a6, int a7); char __thiscall sub_4B7E40(_DWORD *this, char a2); char __thiscall sub_4B7E90(_DWORD *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_4B7F70(_DWORD *this); char __thiscall sub_4B7FA0(_DWORD *this, char a2, char a3); char __thiscall sub_4B7FF0(_DWORD *this, __int16 a2, char a3); char __thiscall sub_4B8040(_DWORD *this, void *a2); char __thiscall sub_4B8080(_DWORD *this); char __thiscall sub_4B80B0(_DWORD *this); char __thiscall sub_4B80F0(_DWORD *this); int __thiscall sub_4B8130(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4B81A0(_DWORD *this, char a2); char __thiscall sub_4B81F0(_DWORD *this); char __thiscall sub_4B8220(_DWORD *this); char __thiscall sub_4B8250(_DWORD *this); char __thiscall sub_4B8280(_DWORD *this, char a2); char __thiscall sub_4B82D0(_DWORD *this, char a2); char __thiscall sub_4B8320(_DWORD *this, int a2, int a3); char __thiscall sub_4B8370(_DWORD *this); char __thiscall sub_4B83A0(_DWORD *this); char __thiscall sub_4B83D0(_DWORD *this); char __thiscall sub_4B8400(_DWORD *this, __int16 a2); char __thiscall sub_4B8450(_DWORD *this, __int16 a2); char __thiscall sub_4B84A0(_DWORD *this); char __thiscall sub_4B84E0(_DWORD *this); unsigned int __cdecl sub_4B8520(unsigned __int16 a1, int a2); unsigned int __stdcall sub_4B87C0(int a1); char __thiscall sub_4B8840(_DWORD *this); char __thiscall sub_4B8870(_DWORD *this); char __thiscall sub_4B88B0(_DWORD *this); char __thiscall sub_4B88F0(_DWORD *this, __int16 *a2, __int16 *a3, int a4); char __thiscall sub_4B8960(_DWORD *this); char __thiscall sub_4B89A0(_DWORD *this); char __thiscall sub_4B89E0(_DWORD **this, __int16 a2); char __thiscall sub_4B8A60(_DWORD *this, __int16 a2, char a3, __int16 a4); // int __userpurge sub_4B8AD0@(int *a1@, int a2@, int a3, int a4); // int __userpurge sub_4B8B60@(int *a1@, int a2@, int a3, __int16 *a4); char __thiscall sub_4B8C50(_DWORD *this, __int16 a2); char __thiscall sub_4B8CC0(_DWORD *this, int a2, __int16 a3, char a4); char __thiscall sub_4B8D10(_DWORD *this, int a2, __int16 a3); char __thiscall sub_4B8D70(_DWORD *this, int a2); char __thiscall sub_4B8DF0(_DWORD *this, int a2); char __thiscall sub_4B8E30(_DWORD *this); char __thiscall sub_4B8E70(_DWORD *this, int a2); char __thiscall sub_4B8EB0(_DWORD *this, int a2); char __thiscall sub_4B8EF0(int *this, int a2); int __thiscall sub_4B8F80(_DWORD *this, int a2, void *a3); char __thiscall sub_4B9010(_DWORD *this); int __thiscall sub_4B9040(_DWORD *this, int a2, _WORD *a3); // int __userpurge sub_4B9150@(int a1@, int a2@, int a3@, int a4, int a5); int __stdcall sub_4B91B0(int a1, int a2); int __stdcall sub_4B91F0(int a1, int a2); // int __userpurge sub_4B9250@(int a1@, int a2@, int a3, int a4); int __fastcall sub_4B9690(int a1, int a2, int a3, unsigned __int16 *a4); int __fastcall sub_4B98F0(int a1, int a2, int a3, unsigned __int8 *a4); int __thiscall sub_4B9AD0(int *this, int a2, int a3); int __thiscall sub_4B9B40(int *this, int a2, int a3); int __thiscall sub_4B9BA0(int *this, int a2, __int16 *a3); int __thiscall sub_4B9CB0(int *this, int a2, __int16 *a3); int __stdcall sub_4B9D70(int a1, int a2); int __stdcall sub_4B9E20(int a1, int a2); int __stdcall sub_4B9EC0(int a1, _BYTE *a2); int __thiscall sub_4B9F70(int *this, int a2, unsigned __int8 *a3); int __thiscall sub_4BA280(void *this, int a2, const char *a3); // int __userpurge sub_4BA660@(int *a1@, int a2@, int a3@, int a4, int a5); // int __userpurge sub_4BA8C0@(int *a1@, int a2@, int a3@, int a4, int a5); int __thiscall sub_4BAB60(int *this, int a2, int a3); _DWORD *__thiscall sub_4BABA0(_DWORD *this, _DWORD *a2, int a3, int a4, _DWORD *a5, int a6); int __thiscall sub_4BAEF0(_DWORD ***this, int a2, int a3); int __thiscall sub_4BB0E0(_DWORD ***this, int a2, int a3); int __thiscall sub_4BB2F0(_DWORD ***this, int a2, int a3); int __thiscall sub_4BB500(void **this, int a2, unsigned __int16 *a3); int __stdcall sub_4BB620(int a1, int a2); // int __userpurge sub_4BB690@(int a1@, int a2, int a3); int __thiscall sub_4BB740(int *this, int a2, int a3); int __thiscall sub_4BB7E0(char *this, int a2, int a3); int __thiscall sub_4BB880(int *this, int a2, __int16 *a3); int __thiscall sub_4BB920(_DWORD **this, int a2, int a3); int __thiscall sub_4BBAF0(void *this, int a2, _DWORD *a3); int __thiscall sub_4BBC30(char *this, int a2, int a3); int __stdcall sub_4BBEC0(int a1, __int16 *a2); int __thiscall sub_4BBFA0(volatile LONG **this, int a2, __int16 *a3); int __stdcall sub_4BC1D0(int a1, int a2); int __stdcall sub_4BC260(int a1, __int16 *a2); int __stdcall sub_4BC320(int a1, int a2); int __thiscall sub_4BC350(_DWORD *this, int a2, int *a3); int __thiscall sub_4BC450(void *this, int a2, unsigned __int8 *a3); int __thiscall sub_4BC4D0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4BC570(_DWORD **this, int a2, int a3); int __thiscall sub_4BC5E0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4BC6A0(_DWORD **this, int a2, _WORD *a3); int __thiscall sub_4BC720(_DWORD **this, int a2, unsigned int *a3); int __stdcall sub_4BC850(int a1, int a2); int __thiscall sub_4BC920(_DWORD *this, int a2, unsigned __int8 *a3); void __thiscall sub_4BC960(_DWORD *this); int __stdcall sub_4BC9E0(int a1, __int16 *a2); int __stdcall sub_4BCA90(int a1, __int16 *a2); int __thiscall sub_4BCAE0(int *this, int a2, int a3); int __thiscall sub_4BCB60(int *this, int a2, int a3); int __thiscall sub_4BCBE0(_DWORD ***this, int a2, unsigned __int8 *a3); int __thiscall sub_4BCCB0(_DWORD *this, int a2, _BYTE *a3); int __stdcall sub_4BCD40(int a1, _DWORD *a2); int __thiscall sub_4BCE00(int *this, int a2, int a3); int __thiscall sub_4BCE70(int *this, int a2, int a3); int __stdcall sub_4BCEA0(int a1, char *a2); // int __userpurge sub_4BCF00@(int a1@, int a2, int a3); char __thiscall sub_4BCFA0(_DWORD *this); char __thiscall sub_4BCFE0(_DWORD *this, int a2); char __thiscall sub_4BD030(_DWORD *this); char __thiscall sub_4BD070(_DWORD *this, __int16 a2); char __thiscall sub_4BD0C0(_DWORD *this, char a2); int __stdcall sub_4BD130(int a1, unsigned __int8 *a2); void __thiscall sub_4BD150(_DWORD *this); char __thiscall sub_4BD1E0(_DWORD *this); char __thiscall sub_4BD240(_DWORD *this); int __thiscall sub_4BD2A0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4BD3C0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4BD400(_DWORD *this, int a2, int a3); int __thiscall sub_4BD460(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4BD4C0(_DWORD *this, int a2, int a3); int __thiscall sub_4BD500(_DWORD *this, int a2, int a3); int __thiscall sub_4BD570(int *this, int a2, int a3); int __thiscall sub_4BD640(_DWORD *this, int a2, _WORD *a3); char __stdcall sub_4BD680(__int16 a1); int __thiscall sub_4BD6C0(float *this, int a2, _BYTE *a3); int __stdcall sub_4BD7A0(int a1, __int16 *a2); int __thiscall sub_4BD860(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4BD8F0(_DWORD *this); int __thiscall sub_4BD930(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4BD990(_DWORD *this); char __thiscall sub_4BD9D0(_DWORD *this, __int16 a2); int __thiscall sub_4BDA20(_DWORD *this, int a2, int a3); int __stdcall sub_4BDA80(int a1, int a2); int __stdcall sub_4BDBC0(int a1, int a2); int __stdcall sub_4BDD20(int a1, _BYTE *a2); int __thiscall sub_4BDD60(_BYTE *this, int a2, _WORD *a3); char __thiscall sub_4BDE40(_DWORD *this); int __thiscall sub_4BDE80(_DWORD ***this, int a2, int a3); char __thiscall sub_4BE110(_DWORD *this, __int16 a2, __int16 a3); char __thiscall sub_4BE160(_DWORD *this); int __thiscall sub_4BE1B0(_DWORD ***this, int a2, _BYTE *a3); int __thiscall sub_4BE450(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4BE7A0(_DWORD ***this, int a2, unsigned __int8 *a3); int __thiscall sub_4BE9A0(_DWORD *this, int a2, int a3); int __stdcall sub_4BEA90(int a1, _WORD *a2); char __thiscall sub_4BEB20(_DWORD *this); // int __userpurge sub_4BEB50@(_DWORD ***a1@, float *a2@, signed int a3@, int a4@, int a5, _WORD *a6); char __thiscall sub_4BED50(_DWORD *this); char __thiscall sub_4BED80(_DWORD *this); int __stdcall sub_4BEDB0(int a1, unsigned __int16 *a2); int __stdcall sub_4BEE80(int a1, unsigned __int16 *a2); int __thiscall sub_4BEFA0(_DWORD *this, int a2, int a3); int __thiscall sub_4BF060(_DWORD **this, int a2, int a3); int __thiscall sub_4BF120(_DWORD *this, int a2, int a3); int __thiscall sub_4BF140(_DWORD *this, int a2, _BYTE *a3); char __thiscall sub_4BF1B0(_DWORD *this, __int16 a2, __int16 a3); char __thiscall sub_4BF200(_DWORD *this, __int16 a2); char __thiscall sub_4BF250(_DWORD *this, __int16 a2); int __thiscall sub_4BF2A0(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4BF2F0(_DWORD *this, int a2); // int __userpurge sub_4BF330@(int a1@, int a2, int a3); // char __userpurge sub_4BF390@(_DWORD *a1@, double a2@, char a3); char __thiscall sub_4BF3E0(_DWORD *this, __int16 a2, int a3); char __thiscall sub_4BF440(_DWORD *this, __int16 a2, __int16 a3); int __thiscall sub_4BF490(int *this, int a2, __int16 *a3); int __thiscall sub_4BF510(_BYTE *this, int a2, int a3); char __thiscall sub_4BF630(_DWORD *this, int a2, char a3); char __thiscall sub_4BF6B0(_DWORD *this); char __thiscall sub_4BF6E0(_DWORD *this); int __thiscall sub_4BF710(_DWORD *this, int a2, int a3); char __thiscall sub_4BF840(_DWORD *this, char a2); int __thiscall sub_4BF890(int *this, int a2, int a3); int __thiscall sub_4BF9B0(int *this, int a2, int a3); char __thiscall sub_4BFAE0(_DWORD *this, __int16 a2, char a3); char __thiscall sub_4BFB30(_DWORD *this); int __stdcall sub_4BFB70(int a1, int a2); int __thiscall sub_4BFBE0(_DWORD *this, int a2, int a3); // int __userpurge sub_4BFC20@(int a1@, int a2, int a3); int __stdcall sub_4BFC80(int a1, _DWORD *a2); int __thiscall sub_4BFCB0(void *this, int a2, int a3); char __thiscall sub_4BFE90(_DWORD *this, int a2); char __thiscall sub_4BFEE0(_DWORD *this, int a2); char __thiscall sub_4BFF30(_DWORD *this); int __stdcall sub_4BFF70(int a1, int a2); int __thiscall sub_4C0060(int *this, int a2, int a3); int __thiscall sub_4C0090(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4C0120(_DWORD *this, char a2, __int16 a3); char __thiscall sub_4C0190(_DWORD *this, char a2, int a3, int a4); char __thiscall sub_4C0200(_DWORD *this, char a2, char a3); char __thiscall sub_4C0250(_DWORD *this, __int16 a2, int a3); int __stdcall sub_4C02A0(int a1, unsigned __int8 *a2); char __thiscall sub_4C03D0(_DWORD *this, char a2); int __thiscall sub_4C0420(_DWORD *this, int a2, int a3); int __thiscall sub_4C0590(_DWORD *this, int a2, _BYTE *a3); char __thiscall sub_4C0620(_DWORD *this, char a2); char __thiscall sub_4C0690(_DWORD *this, char a2, char a3); char __thiscall sub_4C06E0(_DWORD *this, char a2); char __thiscall sub_4C0730(_DWORD *this, char a2, char a3); char __thiscall sub_4C0780(_DWORD *this, int *a2); char __thiscall sub_4C0800(_DWORD *this); char __thiscall sub_4C0840(_DWORD *this, int *a2); char __thiscall sub_4C08C0(_DWORD *this); char __thiscall sub_4C0900(_DWORD *this, int a2); int __thiscall sub_4C0950(_DWORD *this, int a2, _WORD *a3); char __thiscall sub_4C09C0(_DWORD *this, __int16 a2); int __stdcall sub_4C0A10(int a1, int a2); char __thiscall sub_4C0A60(_DWORD *this, __int16 a2); char __thiscall sub_4C0AB0(_DWORD *this); char __thiscall sub_4C0AF0(_DWORD *this, int a2); char __thiscall sub_4C0B40(_DWORD *this, char a2, char a3, char a4); char __thiscall sub_4C0B90(_DWORD *this, char a2, char a3); int __thiscall sub_4C0BE0(_DWORD *this, int a2, unsigned __int16 *a3); char __thiscall sub_4C0C50(_DWORD *this, char a2, char a3); char __thiscall sub_4C0CA0(_DWORD *this, char a2, char a3); char __thiscall sub_4C0CF0(_DWORD *this); void __thiscall sub_4C0D30(_DWORD *this); void __thiscall sub_4C1090(int this, int a2, __int16 a3); void __thiscall sub_4C1200(int this, unsigned __int16 a2, int a3, int a4); void __thiscall sub_4C1390(_DWORD *this, char a2); void __thiscall sub_4C1410(_DWORD *this, char a2, char a3); void __thiscall sub_4C1490(_DWORD *this, char *a2); char __thiscall sub_4C1540(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void __thiscall sub_4C15B0(_DWORD *this); void __thiscall sub_4C1600(_DWORD *this, char *a2); void __thiscall sub_4C1700(_DWORD *this, char *a2); void __thiscall sub_4C1810(_DWORD *this, int a2); char __thiscall sub_4C18C0(_DWORD *this, int a2); char __thiscall sub_4C1950(_DWORD *this, int a2, char a3); char __thiscall sub_4C19E0(_DWORD *this, int a2); void __thiscall sub_4C1A70(_DWORD *this, __int16 a2); void __thiscall sub_4C1AF0(int this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_4C1BF0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); char __thiscall sub_4C1CB0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4C1D70(_DWORD *this, int a2, __int16 *a3); void __thiscall sub_4C1DD0(int this, char a2); int __thiscall sub_4C2080(_DWORD *this, int a2, unsigned __int16 *a3); // int __userpurge sub_4C2260@(int a1@, int a2@, int a3, unsigned __int16 *a4); int __thiscall sub_4C2440(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C2530(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C2840(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C2B40(int *this, int a2, int a3); int __thiscall sub_4C2D60(int *this, int a2, _WORD *a3); int __thiscall sub_4C2FB0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C3010(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4C3060(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4C32C0(int, int, int); // idb void __thiscall sub_4C3390(_DWORD *this, int a2); int __thiscall sub_4C3410(void *this, int a2, _WORD *a3); int __thiscall sub_4C3480(void *this, int a2, int a3); int __thiscall sub_4C35D0(_DWORD ***this, int a2, unsigned __int16 *a3); int __thiscall sub_4C3750(int **this, int a2, unsigned __int8 *a3); int __thiscall sub_4C37C0(char **this, int a2, unsigned __int8 *a3); int __thiscall sub_4C39E0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C3A40(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C3A90(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C3AE0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C3B50(int this, int a2, unsigned __int16 *a3); int __thiscall sub_4C3C40(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C3D00(_DWORD *this, int a2, _WORD *a3); // signed int __userpurge sub_4C3D50@(int a1@, signed int a2, unsigned int *a3); int __stdcall sub_4C3E80(int a1, unsigned int *a2); int __thiscall sub_4C3F30(void *this, int a2, unsigned __int8 *a3); int __thiscall sub_4C4330(_DWORD *this, int a2, unsigned int *a3); int __thiscall sub_4C43A0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C4560(void *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C4F20(_DWORD **this, int a2, int a3); int __thiscall sub_4C5230(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C5290(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C5370(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C5420(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C54A0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C5540(int, int, int); // idb int __thiscall sub_4C5780(void *this, int a2, int a3); int __thiscall sub_4C5880(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C58E0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C5910(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C5CD0(_DWORD *this, int a2, int a3); int __thiscall sub_4C5D50(_DWORD *this, int a2, int a3); int __thiscall sub_4C5DD0(_DWORD *this, int a2, int a3); int __thiscall sub_4C5EC0(int, int, int); // idb int __thiscall sub_4C5FE0(int, int, int); // idb int __thiscall sub_4C61C0(int, int, int); // idb int __thiscall sub_4C6340(_DWORD ***this, int a2, int a3); int __thiscall sub_4C6420(int, int, int); // idb int __thiscall sub_4C6550(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4C6720(int, int, int); // idb int __thiscall sub_4C6940(_DWORD ***this, int a2, __int16 *a3); int __thiscall sub_4C6AE0(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4C6B20(int **this, int a2, int a3); int __thiscall sub_4C6BE0(int, int, int); // idb int __thiscall sub_4C6C30(int, int, int); // idb int __thiscall sub_4C6C70(int, int, int); // idb int __thiscall sub_4C6DE0(_DWORD *this, int a2, int a3); int __thiscall sub_4C6E50(_DWORD *this, int a2, int a3); int __thiscall sub_4C6EC0(int *this, int a2, __int16 *a3); int __thiscall sub_4C6FD0(_DWORD **this, int a2, int a3); int __thiscall sub_4C7010(_DWORD **this, int a2, int a3); int __thiscall sub_4C7080(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4C71B0(_DWORD *this, int a2, int a3); int __thiscall sub_4C71E0(_DWORD *this, int a2, int a3); int __thiscall sub_4C7240(char *this, int a2, int a3); int __thiscall sub_4C7370(char *this, int a2, int a3); int __stdcall sub_4C7470(int a1, __int16 *a2); int __stdcall sub_4C74C0(int a1, __int16 *a2); int __thiscall sub_4C7510(int, int, int); // idb int __thiscall sub_4C76B0(_DWORD *this, int a2, int *a3); int __thiscall sub_4C77F0(int, int, int); // idb int __thiscall sub_4C7910(int, int, int); // idb int __thiscall sub_4C7A10(int, int, int); // idb int __thiscall sub_4C7AD0(int, int, int); // idb int __thiscall sub_4C7B40(int, int, int); // idb int __thiscall sub_4C7C30(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4C7CF0(int, int, int); // idb int __thiscall sub_4C7DB0(int, int, int); // idb int __thiscall sub_4C7DE0(int, int, int); // idb int __thiscall sub_4C7ED0(int, int, int); // idb int __thiscall sub_4C7F30(_DWORD *this, int a2, int a3); int __thiscall sub_4C8020(_DWORD *this, int a2, unsigned int *a3); int __thiscall sub_4C80B0(_DWORD *this, int a2, int a3); int __thiscall sub_4C8210(_DWORD **this, int a2, int *a3); char __thiscall sub_4C82D0(const char *this, char a2, int a3, int a4, int a5, int a6, void *a7, void *a8); int __thiscall sub_4C8470(_DWORD *this, int a2, int a3); int __thiscall sub_4C8570(_DWORD ***this, int a2, __int16 *a3); int __thiscall sub_4C87D0(_DWORD *this, int a2, int a3); char __thiscall sub_4C8870(_DWORD *this, int a2, int a3, int a4, int a5, int a6, __int16 a7, int a8, int a9); int __stdcall sub_4C8910(int a1, int a2); int __thiscall sub_4C89C0(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4C8AB0(int a1, int a2); char __thiscall sub_4C8AD0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, __int16 a7, int a8, int a9); int __stdcall sub_4C8B70(int a1, int a2); int __thiscall sub_4C8C40(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4C8D60(_BYTE **this, int a2, __int16 *a3); int __thiscall sub_4C8ED0(_DWORD *this, int a2, unsigned __int8 *a3); int __stdcall sub_4C9060(int a1, _BYTE *a2); char __thiscall sub_4C9100(_DWORD *this, __int16 a2, const char *a3); int __thiscall sub_4C91C0(_DWORD *this, int a2, char a3); int __thiscall sub_4C9240(_DWORD *this, int a2, int a3); int __thiscall sub_4C92A0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4C9300(_DWORD *this, int a2, int a3); int __thiscall sub_4C9460(_DWORD *this, int a2, int a3); int __stdcall sub_4C9590(int a1, int a2); int __thiscall sub_4C9660(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4C96E0(_DWORD **this, int a2, unsigned __int16 *a3); int __thiscall sub_4C9810(char **this, int a2, int *a3); int __thiscall sub_4C98D0(_DWORD *this, int a2, char *a3); int __thiscall sub_4C99A0(_DWORD **this, int a2, int *a3); int __thiscall sub_4C9B10(char **this, int a2, int a3); int __thiscall sub_4C9C00(_DWORD **this, int a2, unsigned __int16 *a3); int __thiscall sub_4C9CD0(_DWORD *this, int a2, int *a3); int __thiscall sub_4C9DA0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4C9E80(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CA250(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CA2D0(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4CA3E0(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4CA4C0(_DWORD *this, int a2, unsigned __int16 *a3); char __thiscall sub_4CA580(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CA630(int, int, int); // idb char __thiscall sub_4CA700(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CA770(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CA7A0(void **this, int a2, int a3); int __thiscall sub_4CA830(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CA860(_DWORD *this, int a2, unsigned int *a3); int __thiscall sub_4CAC20(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4CAC70(_DWORD *this, int a2, int a3); int __thiscall sub_4CAD80(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CADB0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CADF0(_DWORD *this, int a2, int a3); int __thiscall sub_4CAE60(_DWORD ***this, int a2, int a3); int __thiscall sub_4CB010(char *this, int a2, int a3); int __thiscall sub_4CB0F0(_DWORD *this, int a2, unsigned __int8 *a3); char __thiscall sub_4CB290(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CB300(_DWORD *this, int a2, int a3); char __thiscall sub_4CB420(_DWORD *this, char a2); int __thiscall sub_4CB4B0(_DWORD *this, int a2, int a3); int __thiscall sub_4CB530(_DWORD *this, int a2, int a3); int __thiscall sub_4CB710(_DWORD *this, int a2, int a3); char __thiscall sub_4CB990(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CBA00(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CBA70(char *this, int a2, int a3); char __thiscall sub_4CBCA0(_DWORD *this, int a2, char a3); char __thiscall sub_4CBE20(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CBE90(_DWORD *this, int a2, int *a3); char __thiscall sub_4CBFA0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CC010(_DWORD *this, int a2, int *a3); char __thiscall sub_4CC0C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CC130(_DWORD *this, int a2, int *a3); void __thiscall sub_4CC200(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CC2C0(_DWORD *this, int a2, int *a3); int __thiscall sub_4CC360(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CC390(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CC3F0(void *this, int a2, const char *a3); int __thiscall sub_4CC600(_DWORD *this, int a2, int a3); int __thiscall sub_4CC690(_DWORD *this, int a2, unsigned __int16 *a3); void __thiscall sub_4CC780(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CC850(_DWORD ***this, int a2, _DWORD *a3); int __thiscall sub_4CC940(_DWORD ***this, int a2, int *a3); char __stdcall sub_4CCA20(int a1, int a2, int a3); int __thiscall sub_4CCA90(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CCB10(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CCB80(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CCD70(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CCF00(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CD060(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CD290(_DWORD *this, int a2, int a3); char __thiscall sub_4CD380(void *this); char __thiscall sub_4CD3B0(void *this); int __thiscall sub_4CD3E0(_DWORD **this, int a2, _BYTE *a3); char __thiscall sub_4CD480(_DWORD *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_4CD4F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_4CD560(_DWORD *this, int a2, int a3); int __thiscall sub_4CD5F0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CD640(void *this, int a2, int a3); // int __userpurge sub_4CD720@(int a1@, double a2@, int a3, unsigned __int16 *a4); int __thiscall sub_4CD800(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CD890(_DWORD *this, int a2, unsigned __int16 *a3); char __thiscall sub_4CD900(_DWORD *this, int *a2); int __thiscall sub_4CD980(_DWORD *this, int a2, _WORD *a3); // int __userpurge sub_4CDA30@(int a1@, int a2@, int a3, int a4); int __thiscall sub_4CDAF0(int *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CDC50(_DWORD *this, int a2, int a3); int __thiscall sub_4CDDF0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CDE60(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CDEF0(_DWORD *this, int a2, unsigned __int16 *a3); char __stdcall sub_4CDF80(__int16 a1, int a2, int a3, int a4, int a5); int __thiscall sub_4CDFE0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE140(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4CE1D0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE230(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE2C0(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CE350(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4CE420(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE480(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE4B0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CE5F0(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CE650(_BYTE **this, int a2, _WORD *a3); int __thiscall sub_4CE6A0(_BYTE **this, int a2, _WORD *a3); int __thiscall sub_4CE6F0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4CE750(_DWORD *this, int a2, unsigned __int16 *a3); int __thiscall sub_4CE810(_DWORD *this, int a2, int a3); int __thiscall sub_4CE880(_DWORD *this, int a2, int a3); int __thiscall sub_4CE8F0(_DWORD *this, int a2, int a3); int __thiscall sub_4CE960(_DWORD *this, int a2, _WORD *a3); int __stdcall sub_4CE9B0(int a1, int a2); char __thiscall sub_4CEA90(_DWORD *this, int a2); char __thiscall sub_4CEB00(_DWORD *this, int a2); char __thiscall sub_4CEB70(_DWORD *this, int a2); char __thiscall sub_4CEBE0(_DWORD *this, int a2); int __thiscall sub_4CEC50(_BYTE **this, int a2, int a3); // int __userpurge sub_4CF080@(int a1@, int a2@, int a3, int a4); // int __userpurge sub_4CF160@(int a1@, int a2@, int a3, int a4); int __stdcall sub_4CF240(int a1, unsigned __int16 *a2); int __thiscall sub_4CF360(void *this, int a2, int a3); int __thiscall sub_4CF460(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_4CF5D0(int ***this, int a2, __int16 *a3); int __thiscall sub_4CF850(void *this, int a2, int *a3); // int __userpurge sub_4CF8C0@(int a1@, int a2@, int a3, _DWORD *a4); int __thiscall sub_4CF9B0(_DWORD ***this, int a2, char *a3); int __thiscall sub_4CFBC0(int *this, int a2, int a3); int __thiscall sub_4CFDA0(_DWORD *this, int a2, int a3); // int __userpurge sub_4CFE20@(_DWORD *a1@, int a2@, int a3, _WORD *a4); int __thiscall sub_4CFEE0(_DWORD *this, int a2, int a3); int __thiscall sub_4D0020(_DWORD *this, int a2, int *a3); int __thiscall sub_4D0180(int ***this, int a2, unsigned __int16 *a3); int __thiscall sub_4D0810(int ***this, int a2, unsigned __int16 *a3); int __thiscall sub_4D0B50(void *this, int a2, _DWORD *a3); int __thiscall sub_4D0CA0(void *this, int a2, _DWORD *a3); int __stdcall sub_4D0DF0(int a1, const char *a2); int __stdcall sub_4D0E30(int a1, int a2); int __thiscall sub_4D0E90(_DWORD *this, int a2, int a3); int __thiscall sub_4D10E0(_DWORD *this, int a2, int a3); void __thiscall sub_4D1220(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, void *a8, int a9, int a10, int a11, int a12, int a13, int a14); int __thiscall sub_4D1390(int *this, int a2, __int16 *a3); int __thiscall sub_4D1460(__int16 *this, int a2, unsigned __int16 *a3); int __thiscall sub_4D1530(int *this, int a2, __int16 *a3); int __thiscall sub_4D1640(int ***this, int a2, int a3); int __thiscall sub_4D1AC0(_DWORD *this, int a2, int a3); int __thiscall sub_4D1CB0(void *this, int a2, float a3); int __thiscall sub_4D2120(_DWORD *this, int a2, int a3); int __thiscall sub_4D2330(int *this, int a2, unsigned __int16 *a3); void __thiscall sub_4D26B0(_DWORD *this, int ****a2); void __thiscall sub_4D2780(float **this); int __stdcall sub_4D27D0(int a1, int a2); int __thiscall sub_4D2980(__int16 *this, int a2, unsigned __int16 *a3); int __thiscall sub_4D2ED0(volatile LONG **this, int a2, int a3); int __stdcall sub_4D3070(int a1, unsigned __int16 *a2); void __thiscall sub_4D3110(_DWORD *this, __int16 a2); char __stdcall sub_4D31D0(void *a1, int a2, int a3, int a4); int __thiscall sub_4D36C0(void ***this, int a2, char a3); int __thiscall sub_4D39A0(_DWORD *this, int a2, unsigned __int16 *a3); // int __userpurge sub_4D3D00@(int a1@, int a2, int a3); int __thiscall sub_4D3FE0(_DWORD *this, int a2, __int16 *a3); int __thiscall sub_4D4230(int, int, int); // idb void __thiscall sub_4D4620(_DWORD *this, char *a2, char a3); int __thiscall sub_4D4730(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4D4860(_DWORD ***this, int a2, int a3); int __thiscall sub_4D4990(_DWORD *this, int a2, int a3); int __stdcall sub_4D4B50(int a1, unsigned __int16 *a2); int __thiscall sub_4D4C00(_DWORD *this, int a2, unsigned __int8 *a3); int __thiscall sub_4D4CA0(_DWORD *this, int a2, int a3); int __stdcall sub_4D4D90(int a1, unsigned __int16 *a2); void __thiscall sub_4D4E00(_DWORD *this, unsigned int a2); int __thiscall sub_4D4FD0(_WORD **this, int a2, int a3); int __thiscall sub_4D5230(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4D5530(_DWORD *this, int a2, _BYTE *a3); int __thiscall sub_4D5670(_DWORD *this, int a2, int a3); int __thiscall sub_4D5850(_DWORD *this, int a2, int a3); int __stdcall sub_4D59B0(int a1, const char *a2); int __stdcall sub_4D5C60(int a1, unsigned __int16 *a2); int __stdcall sub_4D5F20(int a1, unsigned int *a2); void __thiscall sub_4D6090(_DWORD *this, const char *a2); void __thiscall sub_4D63D0(_DWORD *this, void *a2); void __thiscall sub_4D66A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, void *a7); void __thiscall sub_4D69B0(_DWORD *this, void *a2); void __thiscall sub_4D6C90(_DWORD *this, void *a2); void __thiscall sub_4D6F70(_DWORD *this, void *a2); int __thiscall sub_4D7250(int **this, int a2, __int16 *a3); int __stdcall sub_4D7540(int a1, unsigned __int16 *a2); int __stdcall sub_4D7560(int a1, unsigned __int8 *a2); int __thiscall sub_4D75B0(_DWORD *this, int a2, _WORD *a3); int __thiscall sub_4D7790(_DWORD *this, int a2, int a3); int __thiscall sub_4D7A00(_DWORD **this, int a2, char *a3); void __thiscall sub_4D7A70(_DWORD *this, void *a2); void __thiscall sub_4D7D50(_DWORD *this, void *a2); int __thiscall sub_4D8050(void *this, int a2, const void *a3); int __thiscall sub_4D8090(void *this, int a2, const void *a3); // int __userpurge sub_4D80D0@(int a1@, double a2@, int a3, int a4, int a5, int a6); _DWORD *sub_4DBE80(); int __cdecl sub_4DBF00(int a1); int __cdecl sub_4DBF50(int a1); int __cdecl sub_4DBFA0(int a1); BOOL __thiscall sub_4DBFF0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_4DC030(_DWORD *this); char *__cdecl sub_4DC090(int a1, char *a2); char __cdecl sub_4DC110(char a1, char a2); float *__thiscall sub_4DC1F0(void *this, float *a2, float *a3); int __thiscall sub_4DC2A0(_DWORD *this, unsigned int a2); int *__thiscall sub_4DC2C0(int *this, int *a2); int sub_4DC2F0(); int sub_4DC310(); int sub_4DC330(); int __cdecl sub_4DC350(int a1); char *__cdecl sub_4DC370(int a1, int a2); int __thiscall sub_4DC400(_DWORD **this, __int64 a2); bool __thiscall sub_4DC520(_DWORD *this, char a2, int a3, int a4, int a5, int a6); int __thiscall sub_4DC550(float *this); int sub_4DC650(); int sub_4DC670(); int sub_4DC690(); int sub_4DC6B0(); int sub_4DC6D0(); _DWORD *__thiscall sub_4DC6F0(_DWORD *this, _DWORD *a2); volatile LONG *__thiscall sub_4DC730(void *this, char *a2); BOOL __thiscall sub_4DC790(float *this); int __thiscall sub_4DC7E0(_DWORD *this, int a2, unsigned int a3); LONG __thiscall sub_4DC880(_DWORD *this, int a2, LONG a3); LONG __thiscall sub_4DC8E0(_DWORD *this, int a2, LONG a3); int __thiscall sub_4DC950(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_4DC970(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_4DC9A0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_4DC9D0(_DWORD *this, int a2); int __thiscall sub_4DCA30(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_4DCA90(_DWORD *this); int __cdecl sub_4DCAF0(__int16 a1); int __thiscall sub_4DCB40(_DWORD *this, int a2); int __cdecl sub_4DCB90(const char *a1); int __cdecl sub_4DCC20(int a1); int __cdecl sub_4DCC70(const char *a1, int a2); int __cdecl sub_4DCD20(char *); // idb _WORD *__cdecl sub_4DCDC0(__int16 a1); int __cdecl sub_4DCE10(const char *a1, int a2); int __cdecl sub_4DCEA0(unsigned __int16 a1); int __cdecl sub_4DCEF0(unsigned __int16 a1); int __cdecl sub_4DCF40(const char *a1); const CHAR *__cdecl sub_4DCFD0(const char *a1); int __thiscall sub_4DD060(_DWORD *this, int a2, char a3, int a4, void *a5); _DWORD *__thiscall sub_4DD290(int *this, _DWORD *a2); _DWORD *__thiscall sub_4DD2B0(int *this, _DWORD *a2); _DWORD *__thiscall sub_4DD2D0(_DWORD *this); int __thiscall sub_4DD310(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); char **__stdcall sub_4DD390(char *a1, int a2, int a3); _DWORD *__cdecl sub_4DD400(_DWORD *a1, _DWORD *a2, _DWORD *a3); int __thiscall sub_4DD450(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_4DD530(_DWORD *this, char *a2); int __thiscall sub_4DD5A0(_DWORD *this, int a2, size_t a3, size_t a4, char a5); int **__thiscall sub_4DD710(_DWORD *this, int **a2, _DWORD *a3); _DWORD *__thiscall sub_4DD780(_DWORD *this, _DWORD *a2, int a3); int __thiscall sub_4DD7C0(int this); char __thiscall sub_4DD7F0(_DWORD *this); int __thiscall sub_4DD8C0(_DWORD *this, char *a2, int a3, int a4, int a5); int __thiscall sub_4DD990(_DWORD *this, char a2); char __cdecl sub_4DD9E0(char *a1); int sub_4DDB30(); void *__thiscall sub_4DDBB0(void *this, char a2); int __thiscall sub_4DDBF0(_DWORD *this, int a2, char *a3); char ***__thiscall sub_4DDC60(char ***this, int **a2); _DWORD *__thiscall sub_4DDD20(_DWORD *this, _DWORD *a2); void __thiscall sub_4DDE00(int **this, int **a2); char __fastcall sub_4DDE60(int a1, int a2, unsigned __int16 *a3); void *__thiscall sub_4DE110(void *this, char a2); int __thiscall sub_4DE190(_DWORD *this, void *a2); int *sub_4DE270(); void __thiscall sub_4DE350(_DWORD *this); void *__thiscall sub_4DE3A0(void *this, char a2); int *sub_4DE3D0(); int __stdcall sub_4DE490(int a1, int a2); void __thiscall sub_4DE4D0(float *this, int a2); void __thiscall sub_4DE8F0(float *this, int a2, float a3); bool __thiscall sub_4DEAD0(_DWORD *this); char __thiscall sub_4DEB90(_DWORD *this, int a2, int a3); // char *__userpurge sub_4DED70@(_DWORD *a1@, int a2@, int a3, float a4, int a5); void __thiscall sub_4DEF80(_DWORD *this, int a2, float a3, int a4); char __thiscall sub_4DF0A0(_DWORD *this); void __thiscall sub_4DF0F0(_DWORD *this); char __thiscall sub_4DF1E0(_DWORD *this); void __thiscall sub_4DF260(void *this, int a2, int a3, int a4); char __thiscall sub_4DF670(void *this, int a2, int a3, int a4, int a5); char __thiscall sub_4DFA80(_DWORD *this, char a2); void __thiscall sub_4DFCD0(_DWORD *this); void __thiscall sub_4E01A0(void *this, float a2); void __thiscall sub_4E0910(_DWORD *this, int a2); void __thiscall sub_4E0BC0(_DWORD *this, int a2); void __thiscall sub_4E0F40(_DWORD *this, int a2); // char __userpurge sub_4E1340@(_DWORD *a1@, float a2@, int a3); // unsigned int __userpurge sub_4E15C0@(float *a1@, float a2@, float a3); double __thiscall sub_4E1760(float *this); double __thiscall sub_4E1790(float *this); double __thiscall sub_4E17C0(void *this, int a2); int __thiscall sub_4E1810(int this); _DWORD *__cdecl sub_4E1830(int a1); int __thiscall sub_4E1890(int this); void __thiscall sub_4E1B50(int this, _DWORD *a2); int __thiscall sub_4E1E00(char **this, int a2); int __thiscall sub_4E1E50(char **this); void __thiscall sub_4E1E90(_DWORD ***this, int a2, int a3); char __thiscall sub_4E1EC0(_DWORD *this); char __thiscall sub_4E1F20(_DWORD **this, char a2); char __thiscall sub_4E1FC0(_DWORD *this); void __thiscall sub_4E1FE0(_DWORD **this); int __thiscall sub_4E2030(_DWORD **this, int a2, int a3, int a4); __int16 __thiscall sub_4E2100(_DWORD ***this, __int16 a2, char a3); bool __thiscall sub_4E2150(_DWORD *this); bool __thiscall sub_4E2170(_DWORD *this, _DWORD *a2); int __thiscall sub_4E21A0(_DWORD *this, int a2, int a3); int __stdcall sub_4E21E0(int, int, char *); // idb char *__stdcall sub_4E2390(char *a1, int a2, int a3); _DWORD *__thiscall sub_4E24E0(void *this); int __thiscall sub_4E2510(char *this); char *__thiscall sub_4E2910(int *this, __int16 a2, __int16 a3, __int16 a4); void __thiscall sub_4E2960(_DWORD *this); char __stdcall sub_4E2A50(int a1, int *a2); char __thiscall sub_4E2AC0(_DWORD **this); char __thiscall sub_4E2BC0(_DWORD **this); unsigned int __thiscall sub_4E2C80(_DWORD ***this, char a2); char __thiscall sub_4E2D60(_BYTE *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_4E2DF0(_DWORD *this, char a2); char __thiscall sub_4E3280(_DWORD *this, int a2, __int16 a3); char __thiscall sub_4E32E0(_DWORD *this); void __thiscall sub_4E3330(_DWORD *this, char a2); void __thiscall sub_4E33A0(_BYTE *this); void __thiscall sub_4E35B0(_DWORD *this, int a2); _DWORD *__thiscall sub_4E36C0(_DWORD *this, int a2); char __stdcall sub_4E3710(_DWORD *a1, _DWORD *a2); // char __usercall sub_4E37C0@(_DWORD *a1@, double a2@); bool __thiscall sub_4E3810(_DWORD **this, int a2); // char __usercall sub_4E3850@(_DWORD *a1@, double a2@); void __thiscall sub_4E3970(_DWORD *this, int *a2, int *a3); // char __usercall sub_4E3A60@(_DWORD *a1@, double a2@); void __thiscall sub_4E3B30(_DWORD *this); char __thiscall sub_4E3C80(_DWORD *this); void __stdcall sub_4E3D40(signed int a1); void __thiscall sub_4E43B0(_DWORD *this, float a2); // void __usercall sub_4E4490(int a1@, double a2@); char __thiscall sub_4E4580(int *this, float a2, __int16 a3, int a4); // void __userpurge sub_4E4710(_DWORD *a1@, double a2@, int a3, int a4, unsigned int a5, unsigned int a6); void __thiscall sub_4E4980(_DWORD *this); void __thiscall sub_4E4D90(_DWORD *this, _DWORD *a2); int __thiscall sub_4E51E0(_DWORD *this); void __thiscall sub_4E5A60(int this, float a2); int __cdecl sub_4E64C0(int a1); int sub_4E6510(int a1, int a2, int a3, int *a4, ...); void *__thiscall sub_4E65A0(void *this, char a2); char __cdecl sub_4E65D0(int *a1); void *__stdcall sub_4E6630(char *a1); void __thiscall sub_4E6690(void **this); char sub_4E66A0(int a1, int a2, int a3, int *a4, ...); _DWORD *__thiscall sub_4E6780(_DWORD *this, _DWORD *a2); int __cdecl sub_4E67B0(int a1); const char *__cdecl sub_4E6810(const char *a1); _DWORD *__thiscall sub_4E6890(void *this, char a2); void ***sub_4E6920(); char *__thiscall sub_4E6930(_DWORD *this, char *a2); int sub_4E6990(int a1, int a2, ...); int *__thiscall sub_4E6A70(_DWORD *this, int *a2, int a3); int sub_4E6CC0(_DWORD *a1, ...); unsigned int __thiscall sub_4E6D30(_DWORD *this, unsigned int a2); int *__thiscall sub_4E6DC0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); _DWORD *__thiscall sub_4E6E60(_DWORD *this, int a2, int a3); void __thiscall sub_4E6E90(void *); // idb char *__thiscall sub_4E6ED0(_DWORD *this, char *a2); int sub_4E6FA0(int *a1, unsigned int a2, unsigned int a3, ...); void __thiscall sub_4E7060(_DWORD *this); char *__thiscall sub_4E70C0(int **this, char *a2); char *__thiscall sub_4E71B0(int this, int a2); char *__thiscall sub_4E7210(_DWORD *this, char *a2); int *sub_4E72C0(); int sub_4E72D0(); void *__thiscall sub_4E72E0(void *this, char a2); char __thiscall sub_4E7330(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); char __stdcall sub_4E7380(int a1, int a2, int a3); int __thiscall sub_4E7390(int this); bool __thiscall sub_4E7400(_DWORD *this, int a2, int a3, _DWORD *a4); bool __thiscall sub_4E74A0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6); char sub_4E74D0(); LONG __thiscall sub_4E7500(_DWORD *this); _DWORD *__thiscall sub_4E75C0(_DWORD *this); int __thiscall sub_4E7690(_DWORD *this, int a2); int __thiscall sub_4E76F0(_DWORD *this, int a2); void __thiscall sub_4E7750(_DWORD *this); void __thiscall sub_4E7790(_DWORD *this); char __thiscall sub_4E7850(_DWORD *this); char __thiscall sub_4E78D0(void *this, char a2); char __thiscall sub_4E7950(void *this, int a2, int a3, int a4); char __thiscall sub_4E7970(_DWORD *this); char __thiscall sub_4E79A0(_DWORD *this); int __thiscall sub_4E79D0(_DWORD *this, float a2, float a3, float a4, float a5); int __thiscall sub_4E7A50(_DWORD *this, int a2); int __thiscall sub_4E7B40(_DWORD *this); char __thiscall sub_4E7B90(_DWORD *this); char __thiscall sub_4E7BC0(_DWORD *this); int __thiscall sub_4E7BF0(void *this); unsigned __int16 *__thiscall sub_4E7CC0(_DWORD *this, int a2); char __thiscall sub_4E7D80(_WORD **this, int a2, int a3, unsigned int a4); signed int __thiscall sub_4E7E60(char *this, char a2); void __thiscall sub_4E7FB0(_DWORD *this, int a2); char __thiscall sub_4E8110(void **this); char __thiscall sub_4E8190(_WORD ***this, int a2, int a3, unsigned int a4); char __thiscall sub_4E81C0(_DWORD *this, int a2, int a3); int __thiscall sub_4E8230(_DWORD **this, char a2); _DWORD *__thiscall sub_4E8300(_DWORD *this); int __thiscall sub_4E86F0(_DWORD **this, char a2); volatile LONG *__cdecl sub_4E87D0(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_4E8910(int a1); int __cdecl sub_4E8A40(int a1, int a2, int a3); int __cdecl sub_4E8B90(int a1); char __thiscall sub_4E8D00(void *this, int a2); char __thiscall sub_4E9590(void *this, int a2); void __thiscall sub_4EA450(_DWORD *this, int a2); void __thiscall sub_4EA690(int this, int a2, int a3); char __thiscall sub_4EA720(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_4EA790(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_4EA7F0(_DWORD *this, int a2); int sub_4EA850(); void *__thiscall sub_4EA870(void *this, char a2); void *__thiscall sub_4EA8B0(void *this, char a2); char __thiscall sub_4EA8F0(_DWORD *this); void *__thiscall sub_4EA920(void *this, char a2); void *__thiscall sub_4EA950(void *this, char a2); void *__thiscall sub_4EA9A0(void *this, char a2); int __cdecl sub_4EA9F0(__int16 a1, char a2); LONG __thiscall sub_4EAA40(_DWORD *this, int a2); void __thiscall sub_4EAAF0(float *this, float a2); void __thiscall sub_4EAB20(float *this, float a2, char a3); void __thiscall sub_4EAC00(float *this, float *a2); void __thiscall sub_4EAC90(int this, float a2); int __thiscall sub_4EACD0(char *this, int a2); float *__thiscall sub_4EAD10(float *this, volatile LONG *a2); _DWORD *__thiscall sub_4EAE40(_DWORD *this); char __thiscall sub_4EAED0(volatile LONG **this, int a2); // void __userpurge sub_4EB180(int a1@, int a2@, int a3@, int a4, int a5, char a6, float a7); volatile LONG *__cdecl sub_4EB370(int a1); char *sub_4EB4A0(); _BYTE *__thiscall sub_4EB4B0(_DWORD *this); int __thiscall sub_4EB4D0(_DWORD *this); int __thiscall sub_4EB4E0(_DWORD *this); int __thiscall sub_4EB4F0(void *this); void __thiscall sub_4EB500(void *this, float *a2); char __thiscall sub_4EB540(_BYTE *this, char a2); char __thiscall sub_4EB550(_BYTE *this); int __thiscall sub_4EB560(_DWORD **this, volatile LONG *a2); void *__thiscall sub_4EB5C0(void *this, char a2); _DWORD *__thiscall sub_4EB650(void *this, char a2); void __cdecl __noreturn sub_4EB6E0(int a1); __time64_t *__thiscall sub_4EB700(__time64_t *this, signed int a2, int a3, int a4, unsigned int a5, unsigned int a6, unsigned int a7, int a8); void __thiscall sub_4EB7F0(void *); // idb int __thiscall sub_4EB810(_DWORD **this, int a2); _DWORD *__stdcall sub_4EB850(int a1); char __thiscall sub_4EB900(_DWORD *this); int __thiscall sub_4EB910(_DWORD *this, const void *a2, int a3); char __stdcall sub_4EBA70(int a1); LONG __thiscall sub_4EBAF0(_DWORD *this); int __thiscall sub_4EBB20(_DWORD *this, int a2, int a3, int a4, volatile LONG *a5); char __thiscall sub_4EBE00(_DWORD *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7); void __thiscall sub_4EC270(_DWORD *this, int a2); char __thiscall sub_4EC360(volatile LONG **this, void *a2); char __thiscall sub_4ECB50(void *this, int a2, int a3); _DWORD **__thiscall sub_4ECB80(_DWORD *this, float a2); int __thiscall sub_4ECC20(_DWORD *this); int __thiscall sub_4ECCC0(char *this, int a2); void __thiscall sub_4ECDB0(_DWORD *this, int a2, int a3); void __thiscall sub_4ECF70(int this); void __thiscall sub_4ED040(_BYTE *this, int a2); void __thiscall sub_4ED0E0(_DWORD *this, unsigned int a2); signed int __thiscall sub_4ED190(_BYTE *this); char __thiscall sub_4ED200(_BYTE *this); char __thiscall sub_4ED280(int this); void __thiscall sub_4ED330(void *); // idb _DWORD *__thiscall sub_4ED3D0(_DWORD *this); LONG __thiscall sub_4ED4A0(_DWORD *this); void __thiscall sub_4ED620(char *this, const void *a2, int a3, int a4, int a5, int a6); volatile LONG *__cdecl sub_4ED680(int a1); int sub_4ED7B0(); int __cdecl sub_4ED7D0(int a1); int __cdecl sub_4ED820(int a1, unsigned int *a2); int __cdecl sub_4ED880(int a1); void *__thiscall sub_4ED8C0(void *this, char a2); void *__thiscall sub_4ED8F0(void *this, char a2); int __thiscall sub_4ED960(_DWORD *this, char a2); char __thiscall sub_4EDA00(void *this, void *a2); void __thiscall sub_4EDD60(_DWORD *this, int a2, int a3); LONG __thiscall sub_4EDDB0(_DWORD *this); int __cdecl sub_4EDE80(int a1); void *__thiscall sub_4EDFE0(void *this, char a2); char __thiscall sub_4EE070(_DWORD *this); int __thiscall sub_4EE080(void *this, int a2, int a3); char __thiscall sub_4EE0D0(void *this, int a2); // void __userpurge sub_4EE660(int a1@, int a2@, int a3@, int a4, int a5); int __cdecl sub_4EE7A0(int a1); void *__thiscall sub_4EE900(void *this, char a2); void __thiscall sub_4EE960(float *this, int a2); void __thiscall sub_4EEA50(_DWORD **this); BOOL __stdcall sub_4EEA80(unsigned int a1, unsigned int a2); char __thiscall sub_4EEAB0(volatile LONG **this, int a2); int __thiscall sub_4EECE0(_DWORD **this, int xRight, int a3); void __thiscall sub_4EEDC0(float *this, float a2); int __thiscall sub_4EEFF0(void *this, float a2); volatile LONG *__cdecl sub_4EF0A0(int a1, float a2); void *__thiscall sub_4EF1E0(void *this, char a2); __time64_t __thiscall sub_4EF220(unsigned int *this); int __thiscall sub_4EF290(_DWORD **this); int __thiscall sub_4EF2F0(_DWORD **this); int __thiscall sub_4EF310(_DWORD *this, int a2, int a3); char __thiscall sub_4EF3E0(int this); int __thiscall sub_4EF430(char *this, char *a2, int a3, unsigned int *a4); int __thiscall sub_4EF700(_DWORD **this, _BYTE *a2); char *__stdcall sub_4EF900(char *a1, size_t a2, int a3); char *__stdcall sub_4EF930(char *a1, int a2); char __thiscall sub_4EFD30(void *this, int a2, int a3); char __thiscall sub_4F07B0(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_4F0A80(_DWORD *this, void *a2); int *__thiscall sub_4F0B50(_DWORD *this); void __thiscall sub_4F0BD0(_DWORD *this, void *a2); void __thiscall sub_4F0D20(_DWORD *this, int a2, int a3); void __thiscall sub_4F0F10(_DWORD *this, int *a2); LONG __thiscall sub_4F1020(_DWORD *this); int __thiscall sub_4F11D0(_DWORD *this, float a2); // void __userpurge sub_4F15E0(int a1@, double a2@, int a3, int a4, int a5); char *__thiscall sub_4F1860(char *this); volatile LONG *__cdecl sub_4F1AB0(int a1, int a2); int sub_4F1BE0(); int sub_4F1C00(); int __cdecl sub_4F1C20(char *); // idb int __cdecl sub_4F1CA0(char *); // idb int *__thiscall sub_4F1D20(_DWORD *this, int a2); int __thiscall sub_4F1DB0(_DWORD *this, int a2, char a3, int a4, void *a5); char *__thiscall sub_4F2000(_DWORD *this, char *a2); void *__thiscall sub_4F20E0(void *this, char a2); char __thiscall sub_4F2110(volatile LONG *this); int __thiscall sub_4F21F0(_DWORD *this, int a2); int __thiscall sub_4F22A0(_DWORD *this); int __thiscall sub_4F2340(_DWORD *this); int __thiscall sub_4F23A0(_DWORD *this); int __thiscall sub_4F2400(_DWORD *this); int __thiscall sub_4F24A0(_DWORD *this); LONG __thiscall sub_4F2600(_DWORD *this); char __thiscall sub_4F26C0(void *this, int a2); char __thiscall sub_4F2EE0(volatile LONG *this, int a2, int a3); int __cdecl sub_4F2FF0(int a1); void *__thiscall sub_4F3130(void *this, char a2); void __thiscall sub_4F31E0(float *this); bool __thiscall sub_4F3200(float *this); char __thiscall sub_4F3220(void *this, int a2, int a3); int __thiscall sub_4F34B0(int this, unsigned int a2, char a3); void __thiscall sub_4F3590(int this); void __thiscall sub_4F3610(_BYTE *this, float a2); int __cdecl sub_4F3800(int a1, int a2); void *__thiscall sub_4F3960(void *this, char a2); void __thiscall sub_4F39A0(float *this, float a2, float a3); int __cdecl sub_4F39F0(int, char *, int); // idb // int __userpurge sub_4F3B10@(_WORD **a1@, int a2@, _DWORD *a3); char __thiscall sub_4F3CA0(volatile LONG **this, int a2); // int __userpurge sub_4F4170@(int *a1@, int a2@, int a3); _DWORD *__thiscall sub_4F42A0(_DWORD *this); volatile LONG *__cdecl sub_4F4380(int a1); int (__thiscall ***__thiscall sub_4F44B0(char *this))(void *, char); int __thiscall sub_4F4560(int this); int __thiscall sub_4F46E0(_BYTE *this); unsigned int __thiscall sub_4F4700(_DWORD *this); char __thiscall sub_4F4770(int this, int a2, int a3); int sub_4F47F0(); int __cdecl sub_4F4810(const char *a1); _DWORD *__thiscall sub_4F48A0(void *this, char a2); int __stdcall sub_4F4910(int, int, char *); // idb char __thiscall sub_4F4AC0(int *this); void __thiscall sub_4F4B00(int *this); int __thiscall sub_4F4B60(_DWORD **this); int __thiscall sub_4F4B90(_DWORD *this); void __thiscall sub_4F4BA0(int this, int a2); char sub_4F4BF0(); char sub_4F4C20(); char __thiscall sub_4F4C40(_BYTE *this, char a2); int __thiscall sub_4F4D70(_DWORD *this, int a2); int __thiscall sub_4F4D80(_DWORD *this, unsigned int a2); int __stdcall sub_4F4DA0(int, int, int, int, int, float); // idb int __stdcall sub_4F4E40(int, int, int, int, float); // idb // void __userpurge sub_4F4F50(int a1@, int a2@, int a3, int a4); char __thiscall sub_4F5180(void *this, int a2); int __thiscall sub_4F7620(_DWORD *this, int a2, int a3, char a4); int __thiscall sub_4F7690(_DWORD **this, unsigned __int8 a2); void __thiscall sub_4F76D0(_DWORD *this, int a2); unsigned int __thiscall sub_4F7E10(_DWORD *this, __int16 a2); void __cdecl sub_4F82F0(unsigned __int64 *a1, _BYTE *a2, _BYTE *a3, _DWORD *a4); void __thiscall sub_4F86D0(_DWORD *this, int a2); _DWORD *__thiscall sub_4F9350(_DWORD *this); LONG __thiscall sub_4F9630(_DWORD *this); volatile LONG *__cdecl sub_4F97F0(int a1); int __thiscall sub_4F9920(unsigned int *this, int a2, __int16 a3); void *__stdcall sub_4F99D0(char *a1); void *__stdcall sub_4F9A30(char *a1); char *__thiscall sub_4F9A90(const void **this, char *a2); int __cdecl sub_4F9B10(int a1, int a2, int a3); char *__thiscall sub_4F9B40(int this, int a2); int __thiscall sub_4F9BA0(_DWORD *this, int a2, size_t a3, char a4); _WORD *__thiscall sub_4F9CE0(_DWORD *this, _WORD *a2); unsigned int __thiscall sub_4F9D50(unsigned int *this, char *a2); unsigned int __thiscall sub_4F9E40(unsigned int *this, int a2); unsigned int __thiscall sub_4F9EC0(unsigned int *this, unsigned int a2); void *__thiscall sub_4F9F50(void *this, char a2); int __thiscall sub_4FA020(_BYTE *this); void __thiscall sub_4FA070(_DWORD *this, int a2, unsigned __int8 a3, char a4, int a5, __int16 a6); char sub_4FA170(); void sub_4FA1A0(); char __thiscall sub_4FA2E0(_DWORD **this, int a2); int __thiscall sub_4FA310(_DWORD **this); int __thiscall sub_4FA360(_DWORD *this); int __thiscall sub_4FA390(void *this, _BYTE *a2); signed int __thiscall sub_4FA410(_DWORD *this); int __cdecl sub_4FA4A0(int a1); void __thiscall sub_4FA600(_BYTE *this, int a2); void __thiscall sub_4FA790(char *this, unsigned __int8 *a2); void __thiscall sub_4FA8E0(int this, int a2, int a3); char __thiscall sub_4FA960(_DWORD *this, int a2); _DWORD *__thiscall sub_4FB4D0(void *this, char a2); int sub_4FB550(); _DWORD *__cdecl sub_4FB570(_DWORD *a1, int a2, char a3); char __thiscall sub_4FB790(_DWORD **this, int a2); _DWORD *__thiscall sub_4FB7C0(_DWORD *this, _DWORD *a2, _DWORD *a3); void __thiscall sub_4FB800(_DWORD *this); int __cdecl sub_4FB840(int a1); void __thiscall sub_4FB9A0(_DWORD *this); void __thiscall sub_4FBB40(_DWORD **this); signed int __thiscall sub_4FBCD0(_DWORD *this); void __thiscall sub_4FBD10(int this, int a2, _DWORD *a3, int a4); char __thiscall sub_4FBD70(volatile LONG **this, volatile LONG **a2); int __thiscall sub_4FC490(_DWORD *this); _DWORD *__thiscall sub_4FC4E0(void *this, char a2); void __thiscall sub_4FC560(_DWORD **this, int a2, int a3); char __thiscall sub_4FC620(int this, int a2, int a3); LONG __thiscall sub_4FC690(_DWORD *this); char __thiscall sub_4FC750(void *this, volatile LONG *a2, int a3); void *__thiscall sub_4FCAB0(void *this, char a2); void __thiscall sub_4FCAE0(int this, __int16 a2); void __thiscall sub_4FCB30(int this); LONG __thiscall sub_4FCB80(void **this); char *__thiscall sub_4FCC40(_DWORD *this); char *__thiscall sub_4FCDB0(int this, float a2, float a3, float a4); void __fastcall sub_4FCE60(float a1, int a2, float a3); int __thiscall sub_4FD260(_DWORD *this); char __thiscall sub_4FD570(_DWORD *this, int a2, int a3, _DWORD *a4); int __cdecl sub_4FD5C0(int a1, int a2, int a3); _DWORD *__thiscall sub_4FD730(_DWORD *this, _DWORD *a2); void *__thiscall sub_4FD760(void *this, char a2); // void __usercall sub_4FD790(int a1@, double a2@); int __thiscall sub_4FD850(_DWORD *this, int a2, int a3); char __thiscall sub_4FD890(_BYTE *this); // BOOL __usercall sub_4FD8B0@(int a1@, double a2@); void __thiscall sub_4FD910(_BYTE *this); int __thiscall sub_4FD920(_DWORD *this, _BYTE *a2); void __thiscall sub_4FD9F0(float *this, int a2); _DWORD *__stdcall sub_4FDAA0(int a1); int __thiscall sub_4FDB20(_BYTE *this, unsigned int a2); int __thiscall sub_4FDB70(_DWORD **this); int __thiscall sub_4FDC50(float *this); int __thiscall sub_4FDCA0(_DWORD *this, char *a2); int __thiscall sub_4FDD90(int this); LONG __thiscall sub_4FDDF0(void **this); char *__thiscall sub_4FDEB0(char *this); volatile LONG *__cdecl sub_4FE330(int a1); char __thiscall sub_4FE460(volatile LONG **this, int a2); void __thiscall sub_4FF330(int this, unsigned int a2, int a3, unsigned int a4); void __thiscall sub_4FF570(_DWORD *this, char *a2); void __thiscall sub_4FF700(_BYTE *this, int a2, unsigned int a3, unsigned int a4, int a5); void __thiscall sub_4FF8F0(int this, float a2); void __thiscall sub_4FFA30(float *this, float a2); _DWORD *__cdecl sub_4FFA60(int a1); void *__thiscall sub_4FFAB0(void *this, char a2); int __thiscall sub_4FFB70(_DWORD *this); char __thiscall sub_4FFCD0(volatile LONG *this, int a2, int a3); void __thiscall sub_4FFCF0(int this, float a2); // void __userpurge sub_4FFD20(int a1@, int a2@, int a3@, int a4); _DWORD *__stdcall sub_4FFE20(int a1); int __thiscall sub_4FFE70(_DWORD *this); char __thiscall sub_4FFEC0(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7); int __thiscall sub_500080(_DWORD **this, _DWORD *a2); int __thiscall sub_5000F0(_DWORD *this); int __thiscall sub_500180(int *this); char __thiscall sub_500300(_DWORD *this, int a2, int a3, _DWORD *a4); void __thiscall sub_500330(int this, float a2); void __thiscall sub_500380(volatile LONG *this); void __thiscall sub_5003F0(int this, unsigned int a2); int __thiscall sub_500450(_DWORD *this); int __thiscall sub_5004B0(int this); int __thiscall sub_500510(_DWORD *this, int a2, int a3); void __thiscall sub_5005D0(float *this); char __thiscall sub_500620(int *this, int a2); void __thiscall sub_5006C0(int this, int a2, unsigned int a3); void __thiscall sub_500710(volatile LONG *this); void __thiscall sub_500790(_DWORD *this, unsigned int a2); char __thiscall sub_5007F0(void *this, int a2); char __thiscall sub_500B20(int *this, int a2, int a3); int __cdecl sub_500BD0(int a1, int a2, int a3, int a4, int a5, int a6); LONG __thiscall sub_500D40(void **this); int __cdecl sub_500DD0(int a1, int a2, int a3); char __thiscall sub_500F70(void *this, int a2); int __cdecl sub_5013D0(int a1); _DWORD *__thiscall sub_501540(_DWORD *this); volatile LONG *__cdecl sub_501610(int a1, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_501750(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7); _WORD *__thiscall sub_501B70(void **this, void *a2, int a3, unsigned int a4, void *a5); const void **__thiscall sub_501F10(const void **this); volatile LONG *__cdecl sub_502160(int a1, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_5022A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7); _DWORD *__thiscall sub_5026E0(_DWORD *this); volatile LONG *__cdecl sub_5027B0(int a1); char __thiscall sub_5028E0(void *this, int a2); unsigned int __thiscall sub_503080(_DWORD *this, int a2); unsigned int __thiscall sub_503160(int this, int a2); unsigned int __thiscall sub_503200(_DWORD *this); _DWORD *__thiscall sub_5033A0(_DWORD *this); LONG __thiscall sub_503470(void **this); volatile LONG *__cdecl sub_5034E0(int a1); unsigned int __thiscall sub_503610(void *this); void __thiscall sub_503620(int this, int a2, unsigned int a3); _DWORD *__thiscall sub_503690(_DWORD *this); unsigned int __thiscall sub_5036C0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_503700(unsigned int *this, int a2, int a3, int a4, int a5, int a6); void *__thiscall sub_503750(void *this, char a2); void *__thiscall sub_503790(void *this, char a2); void *__thiscall sub_5037D0(void *this, char a2); int __cdecl sub_503810(int a1); _DWORD *__cdecl sub_503860(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__cdecl sub_5038A0(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__thiscall sub_5038E0(void *this, char a2); void *__thiscall sub_503950(void *this, char a2); _DWORD *__thiscall sub_503980(void *this, char a2); void *__thiscall sub_5039F0(void *this, char a2); bool __cdecl sub_503A20(_DWORD *a1, _DWORD *a2); void __thiscall sub_503A40(_DWORD *this, int a2); int __thiscall sub_503B00(int **this, int a2, int a3, int a4, int a5); char sub_503BB0(); // void __userpurge sub_503C30(int a1@, double a2@, int a3); _WORD *__thiscall sub_503D10(_DWORD *this, int a2, void *a3, int a4, unsigned int a5, void *a6); int __thiscall sub_503D90(_DWORD **this); unsigned int __thiscall sub_503E40(_DWORD *this, unsigned int a2, int a3); char __thiscall sub_503E70(_DWORD *this, int a2, char a3); unsigned int __thiscall sub_503EC0(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_503FF0(_DWORD *this, int a2); char __thiscall sub_504070(_DWORD *this); char __thiscall sub_5040E0(_DWORD *this, int a2); void __thiscall sub_504170(float *this, int a2, unsigned int a3, unsigned int a4, unsigned int a5, char a6); char __thiscall sub_5042A0(void *this, int a2, char *a3, int a4); char __thiscall sub_504AD0(_DWORD *this); unsigned int __thiscall sub_504C00(_DWORD *this); // void __userpurge sub_504D40(_DWORD *a1@, double a2@, int a3, unsigned int a4); unsigned int __thiscall sub_504DB0(void *this); void __thiscall sub_504F10(void *this); LONG __thiscall sub_5050E0(void **this); LONG __thiscall sub_5051A0(void **this); _DWORD *__thiscall sub_505230(_DWORD *this); volatile LONG *__cdecl sub_5055C0(int a1, int a2, int a3); char __thiscall sub_505700(void *this, int a2, volatile LONG **a3, char a4); void __thiscall sub_506820(int this); _DWORD *__thiscall sub_506A10(_DWORD *this); volatile LONG *__cdecl sub_506CD0(int a1, int a2, int a3); char **__thiscall sub_506E40(_DWORD *this, int a2, int a3); // void __userpurge sub_506ED0(int a1@, double a2@, int a3); void __thiscall sub_507180(_DWORD *this, int a2); void __thiscall sub_5072B0(_DWORD **this, int a2, unsigned int a3, unsigned int a4); _DWORD *__thiscall sub_507570(_DWORD *this); LONG __thiscall sub_507670(void **this); volatile LONG *__cdecl sub_507750(int a1, int a2); // void __userpurge sub_507890(_DWORD *a1@, double a2@, int a3, int a4); void __thiscall sub_507930(int *this, int a2, int a3, int a4); int __thiscall sub_5079A0(_DWORD *this); unsigned __int16 *__thiscall sub_507AE0(unsigned int *this); void __thiscall sub_507B60(int *this, int a2); void __thiscall sub_507FC0(_DWORD *this, int a2); void __thiscall sub_5082B0(int *this, int a2); unsigned __int16 *__thiscall sub_508450(unsigned int *this); void __thiscall sub_5084A0(int *this, int a2); void __thiscall sub_5085B0(int *this, int a2); char __thiscall sub_508640(void *this, void (__thiscall **a2)(_DWORD, int), int a3); void __thiscall sub_508F50(volatile LONG *this, int a2, int a3); void __thiscall sub_508FD0(int *this); int __cdecl sub_509010(int a1); int __cdecl sub_509060(int a1); void __thiscall sub_5090D0(void *); // idb char **__stdcall sub_509130(char *a1, int a2, int a3); // _DWORD *__usercall sub_5091A0@(_DWORD *result@, _DWORD *a2, int a3); void __cdecl sub_5091D0(_DWORD *a1, int a2); _DWORD *__cdecl sub_509200(_DWORD *a1, _DWORD *a2, _DWORD *a3); char **__stdcall sub_509240(char *a1, int a2); void __thiscall sub_509300(int ***this, int ***a2, unsigned __int8 (__cdecl *a3)(int *, int *)); void *__thiscall sub_509380(void *this, char a2); void *__thiscall sub_5093B0(void *this, char a2); char *__thiscall sub_5093E0(_DWORD *this, char *a2); unsigned int __thiscall sub_5094B0(unsigned int *this, char *a2); void __thiscall sub_5095B0(_DWORD *this, unsigned int a2); char *__thiscall sub_5096A0(_DWORD *this, int a2); unsigned int __thiscall sub_509700(unsigned int *this, int a2); int __thiscall sub_509780(unsigned int *this, unsigned int a2); _DWORD *__thiscall sub_509840(unsigned int *this, _DWORD *a2); void __thiscall sub_5098F0(int *this, unsigned __int8 (__cdecl *a2)(int *, int *)); void *__thiscall sub_509BE0(void *this, char a2); char __thiscall sub_509C10(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_509CA0(_DWORD *this, int a2, _DWORD *a3, int a4); void __thiscall sub_509CD0(_DWORD **this, int a2); unsigned int __thiscall sub_509D20(int this); char __thiscall sub_509E60(int this, int a2, int a3, int a4, _WORD *a5); void ***__thiscall sub_509FA0(void ***this, _WORD *a2, void **a3, void **a4, void **a5); char __thiscall sub_509FE0(_DWORD *this, int a2, int a3, int a4); int __cdecl sub_50A1D0(int a1, int a2, int a3); void *__thiscall sub_50A320(void *this, char a2); void *__thiscall sub_50A360(void *this, char a2); int __thiscall sub_50A460(_DWORD *this, int a2); int __thiscall sub_50A4C0(_DWORD **this); int __thiscall sub_50A4E0(int *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5); char __thiscall sub_50A650(void *this, int a2); void __thiscall sub_50AB40(volatile LONG *this); int __thiscall sub_50AC30(volatile LONG *this, int a2, int a3); _DWORD *__thiscall sub_50AC50(_DWORD *this); void __thiscall sub_50ACE0(int this, int a2, int a3); volatile LONG *__cdecl sub_50AD30(int a1); _DWORD *__thiscall sub_50AE60(void *this, char a2); signed int __thiscall sub_50AF40(char *this); void __thiscall sub_50B020(_DWORD *this, _WORD *a2); _WORD *__thiscall sub_50B090(_WORD *this, _WORD *a2); // int __userpurge sub_50B0B0@(int a1@, int a2@, unsigned __int16 *a3, int *a4); int __thiscall sub_50B0F0(_DWORD *this); char __thiscall sub_50B170(volatile LONG *this, unsigned int a2, int a3); _DWORD *__thiscall sub_50B1C0(_DWORD **this); int __thiscall sub_50B250(_DWORD *this, int a2, int a3); char __thiscall sub_50B2C0(_DWORD *this, int a2); char __thiscall sub_50B620(_DWORD **this, int a2); char __thiscall sub_50B8A0(_DWORD *this, float a2, int a3); void __thiscall sub_50BEF0(_DWORD *this, int a2, int a3, int a4); // int __userpurge sub_50C1B0@(int a1@, signed int a2@, int a3@, int a4, int a5); char __thiscall sub_50C460(_DWORD *this, int a2); int __thiscall sub_50C580(_DWORD **this); char __thiscall sub_50C5E0(_DWORD *this, float a2, int a3); char __thiscall sub_50CC20(_DWORD *this, int a2); // void __userpurge sub_50CD80(int a1@, int a2@, int a3, int a4); void __thiscall sub_50CFF0(void ***this); int __cdecl sub_50D130(int a1); int __cdecl sub_50D280(int a1, int a2); int __cdecl sub_50D3C0(int a1, int a2); void *__thiscall sub_50D500(void *this, char a2); void *__thiscall sub_50D540(void *this, char a2); int __thiscall sub_50D680(_DWORD *this); char __thiscall sub_50D6B0(void *this, int a2); char __thiscall sub_50DA00(int this, int a2, int a3); void *__thiscall sub_50DC20(void *this, char a2); void __fastcall sub_50DC60(LONG a1, int a2, int a3, int a4, LONG a5); int __thiscall sub_50DCD0(_DWORD *this, int a2); int __thiscall sub_50DE80(float *this); int __thiscall sub_50DF40(_DWORD **this, _BYTE *a2); char *__thiscall sub_50DFE0(char *this); char __thiscall sub_50E0E0(_DWORD *this, int a2); void __thiscall sub_50E670(_DWORD *this, int a2); void __thiscall sub_50E6D0(int this); void __thiscall sub_50E840(_DWORD *this); volatile LONG *__cdecl sub_50E8E0(int a1); char __thiscall sub_50EA10(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_50EB10(_DWORD *this); _DWORD *__cdecl sub_50EE90(int a1); int __cdecl sub_50EEE0(unsigned __int8 a1); _DWORD *__thiscall sub_50EF00(void *this, char a2); void *__cdecl sub_50EFA0(char *a1); char __thiscall sub_50F160(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_50F1E0(volatile LONG *this, int a2, int a3); char __thiscall sub_50F270(_DWORD **this, signed int a2, int a3); _DWORD *__thiscall sub_50F2A0(_DWORD **this); char __thiscall sub_50F3D0(volatile LONG **this, void *a2, int a3, int a4); // _DWORD *__userpurge sub_50F600@(_DWORD **a1@, int a2@, unsigned int *a3); // _DWORD *__userpurge sub_50F910@(_DWORD **a1@, int a2@, int a3); int __thiscall sub_50F920(_DWORD *this); int __cdecl sub_50FBD0(int a1, int a2, int a3); void *__thiscall sub_50FD20(void *this, char a2); void __thiscall sub_50FE50(int this); char __thiscall sub_50FEC0(int this, int a2, int a3); void __thiscall sub_510080(_DWORD *this); void __thiscall sub_510240(_DWORD *this, _DWORD *a2, _DWORD *a3); int __cdecl sub_510290(int a1); void __thiscall sub_5103F0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_510420(int *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_510450(_DWORD *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_510480(_DWORD *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_5104B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, int a8, int a9); char __thiscall sub_510500(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); char __thiscall sub_510550(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); char __thiscall sub_5105A0(_DWORD *this, int a2); _DWORD *__thiscall sub_510B40(void *this, char a2); int __thiscall sub_510C30(_DWORD **this, int a2); int __thiscall sub_510C70(_DWORD **this); int __thiscall sub_510C90(_DWORD **this); int __thiscall sub_510CC0(_DWORD *this); int __thiscall sub_510CF0(_DWORD *this); int __thiscall sub_510D20(_DWORD *this); int __thiscall sub_510D50(_DWORD *this); void __thiscall sub_510DB0(int this); char sub_510E90(); int __thiscall sub_510EC0(_DWORD *this, _DWORD *a2); void __thiscall sub_510ED0(int this); int __thiscall sub_510EE0(_DWORD *this); int __thiscall sub_510F10(_DWORD *this); char __thiscall sub_510F40(_DWORD *this); char __thiscall sub_510F70(_DWORD **this); int __thiscall sub_510FA0(_DWORD *this); char __thiscall sub_511070(_DWORD **this); char __thiscall sub_511180(_DWORD **this, int a2, int a3); char __thiscall sub_5111D0(_DWORD **this, int a2, int a3); int __thiscall sub_5111E0(void *this, _BYTE *a2); char __thiscall sub_511260(_DWORD **this, int a2); int __thiscall sub_511290(_BYTE *this, int a2); LONG __thiscall sub_5112C0(_DWORD *this, int a2); void __thiscall sub_511380(_DWORD **this); int __thiscall sub_5113B0(_DWORD *this); int __thiscall sub_5113E0(_DWORD **this, int a2); char __thiscall sub_511440(_DWORD *this); FILE *__thiscall sub_511450(_BYTE *this); int __thiscall sub_511740(_BYTE *this, int a2); int __thiscall sub_511770(_DWORD *this, int a2); char __thiscall sub_5117E0(_DWORD **this); void __thiscall sub_511800(_DWORD *this, int a2, int a3); char __thiscall sub_511830(_DWORD *this, int a2); void __thiscall sub_511C70(int this, unsigned int *a2); void __thiscall sub_511DF0(int this); void __thiscall sub_512090(_DWORD *this, unsigned int a2); char __thiscall sub_512110(_DWORD *this, int a2); void __thiscall sub_5121E0(_DWORD *this); char __thiscall sub_512290(volatile LONG **this); char __thiscall sub_512690(int this, int a2); void __thiscall sub_5126F0(int this, int a2); void __thiscall sub_512850(void *this, int *a2); void __thiscall sub_512B40(_DWORD *this, int a2); void __thiscall sub_512D10(_DWORD *this); void __thiscall sub_513040(_DWORD *this, int a2, _DWORD *a3, int a4); void __thiscall sub_5133F0(_DWORD *this); void __thiscall sub_513490(_DWORD *this, _DWORD *a2, _DWORD *a3); int __thiscall sub_5134E0(_DWORD *this); void __thiscall sub_513600(_DWORD *this, int a2); int __cdecl sub_5136F0(int a1); LONG __thiscall sub_513830(_DWORD *this); void __thiscall sub_5138E0(int this); void __thiscall sub_513990(int this); void __thiscall sub_513A00(_DWORD *this, _DWORD *a2, char a3); char __thiscall sub_513AF0(int *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_513B20(_DWORD *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_513B50(_DWORD *this, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_513B80(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, int a8, int a9); char __thiscall sub_513BD0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); char __thiscall sub_513C20(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); void __thiscall sub_513C70(_DWORD *this, _DWORD *a2, int a3); int sub_513CB0(); char *__thiscall sub_513DF0(char *this); volatile LONG *__cdecl sub_514010(int a1); void __thiscall sub_514140(_DWORD **this, int a2, int a3); char __thiscall sub_514300(_DWORD *this, int a2); char *__cdecl sub_517AD0(char *a1, size_t a2, char *a3, int a4, int a5, int a6); _DWORD *__thiscall sub_517B20(void **this, void *a2); void *__thiscall sub_517C40(void *this, char a2); void *__thiscall sub_517C80(void *this, char a2); int __thiscall sub_517CC0(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_517D50(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_517DE0(_DWORD *this, int a2, int a3, int a4, int a5); void *__thiscall sub_517E60(void *this, char a2); int __thiscall sub_517E90(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_517EC0(_DWORD **this); _DWORD *__thiscall sub_517F70(_DWORD **this); int __thiscall sub_517F90(_DWORD *this); int __thiscall sub_517FD0(_DWORD **this); int __thiscall sub_518110(char *this); void __thiscall sub_518170(float *this, float a2); int __thiscall sub_518180(_DWORD *this, int a2, int a3, int a4, int a5); char __stdcall sub_5181B0(char *a1, const char *a2, signed int a3); char sub_518250(); char __thiscall sub_518280(_DWORD *this, int a2); int __thiscall sub_5182E0(void *this); int __thiscall sub_5183E0(_DWORD **this); char __thiscall sub_518490(_DWORD *this, __int16 a2); int __thiscall sub_518550(_DWORD *this, int a2); int __thiscall sub_518710(_DWORD *this); char *__thiscall sub_5187F0(int this, char a2); char __thiscall sub_5188E0(_DWORD **this, unsigned int a2); void __thiscall sub_518A50(_DWORD *this, __int16 a2, __int16 a3); BOOL __thiscall sub_518B40(_DWORD *this); int __thiscall sub_518BA0(float *this); char __thiscall sub_518D00(_DWORD *this, _DWORD *a2); void __thiscall sub_518D70(float *this); // int __usercall sub_518E60@(int a1@, int a2@); // int __userpurge sub_518F50@(int a1@, int a2@, float a3); char __thiscall sub_518F80(_DWORD *this, int a2, int a3); int __thiscall sub_519060(_DWORD **this, int a2, int a3, float a4, float a5); void __thiscall sub_5190D0(int this, int *a2); void __thiscall sub_519250(_DWORD *this, int a2); void __thiscall sub_5192E0(_DWORD *this); int __thiscall sub_519390(_DWORD *this); char *__thiscall sub_519430(float *this); int __thiscall sub_519540(float *this); char __thiscall sub_5196A0(_DWORD *this, int a2); char __thiscall sub_519720(_DWORD *this); // unsigned int __usercall sub_5197D0@(int a1@, signed int a2@); char __thiscall sub_519940(_DWORD *this, int a2); int __thiscall sub_5199C0(_DWORD *this); char __thiscall sub_519AA0(_DWORD **this); void __thiscall sub_519B10(_DWORD *this); unsigned int __thiscall sub_519CE0(_DWORD *this); void __thiscall sub_519DD0(_DWORD *this); int __thiscall sub_519E20(char *this); char __thiscall sub_519F60(_DWORD *this); void __thiscall sub_519FF0(_DWORD *this, int *a2); void __thiscall sub_51A180(_DWORD *this, int a2); void __thiscall sub_51A240(_DWORD *this); void __thiscall sub_51A2F0(_DWORD *this); void __thiscall sub_51A360(int this, int *a2); int __thiscall sub_51A4C0(_DWORD *this, float a2); int __thiscall sub_51A4E0(_DWORD *this); signed int __thiscall sub_51A5E0(_DWORD *this, int a2); char __thiscall sub_51A660(void *this, int a2); // char __userpurge sub_51A720@(int a1@, signed int a2@, float a3); char *__thiscall sub_51A8C0(void *this, int a2); void __thiscall sub_51A960(_DWORD *this, __int16 *a2); int *__thiscall sub_51AB40(int this, _WORD *a2); char __thiscall sub_51ADF0(_DWORD *this, int a2); char __thiscall sub_51AE90(_DWORD **this); int __thiscall sub_51AF90(char *this, char a2); void __thiscall sub_51B0D0(char *this); char __thiscall sub_51B120(_DWORD *this, _DWORD *a2); char __thiscall sub_51B1D0(float *this); char __thiscall sub_51B270(_DWORD *this, __int16 *a2); int __thiscall sub_51B5A0(float *this); char __thiscall sub_51BA90(char *this, unsigned int a2); void __thiscall sub_51BAF0(char *this); char *__thiscall sub_51BB40(char *this); LONG __thiscall sub_51BF00(_DWORD *this); volatile LONG *__cdecl sub_51C7D0(int a1, int a2); int __thiscall sub_51C900(int this, _BYTE *a2); int __cdecl sub_51CAA0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_51CC00(_DWORD *this, char a2); char __thiscall sub_51D2D0(_DWORD **this); int __thiscall sub_51DB00(_DWORD *this); unsigned __int8 *__thiscall sub_51DF10(_DWORD *this); char __thiscall sub_51E690(_DWORD **this, unsigned int a2); void __thiscall sub_51E7C0(_DWORD *this, __int16 a2); // void __userpurge sub_51E8E0(int a1@, int a2@, int a3, unsigned int a4); char __thiscall sub_51E9D0(_DWORD *this, int a2, int a3); int __thiscall sub_521A60(_DWORD *this, int a2, int a3); char __thiscall sub_521AF0(_DWORD *this, int a2); char __thiscall sub_521BB0(_DWORD *this, int a2, _DWORD *a3); unsigned int __thiscall sub_521C10(_DWORD *this, unsigned __int16 a2); BOOL __stdcall sub_521C30(__int16 a1, __int16 a2); int __stdcall sub_521C50(int a1, __int16 a2, int a3); void *__thiscall sub_521CB0(void *this, char a2); void *__thiscall sub_521CE0(void *this, char a2); void *__thiscall sub_521D10(void *this, char a2); void *__thiscall sub_521D40(void *this, char a2); void *__thiscall sub_521D70(void *this, char a2); void *__thiscall sub_521DA0(void *this, char a2); void *__thiscall sub_521DD0(void *this, char a2); void *__thiscall sub_521E00(void *this, char a2); int __thiscall sub_521E30(_DWORD *this); void *__thiscall sub_521E80(void *this, char a2); _DWORD *__thiscall sub_521EB0(void *this, char a2); void __thiscall sub_521F40(int *this); int __thiscall sub_522020(_DWORD *this); _DWORD *__thiscall sub_5220A0(void *this, char a2); int __thiscall sub_522130(_DWORD *this); _DWORD *__thiscall sub_5221B0(void *this, char a2); int __thiscall sub_522240(_DWORD *this); int __thiscall sub_5222C0(_DWORD *this, float *a2); int __thiscall sub_522310(_DWORD *this); void __thiscall sub_5223B0(_DWORD *this); void __thiscall sub_522440(_DWORD *this); int __thiscall sub_5224B0(_DWORD *this); int __thiscall sub_522530(_DWORD *this); void **__thiscall sub_5225B0(void *this, char a2); void **__thiscall sub_5225F0(void *this, char a2); int __thiscall sub_522630(_DWORD *this); _DWORD *__thiscall sub_5226B0(void *this, char a2); int __thiscall sub_522740(_DWORD *this); int __thiscall sub_5227C0(_DWORD *this); int __thiscall sub_522840(_DWORD *this); int __thiscall sub_5228C0(_DWORD *this); int __thiscall sub_522940(_DWORD *this); _DWORD *__thiscall sub_5229C0(void *this, char a2); _DWORD *__thiscall sub_522A50(void *this, char a2); _DWORD *__thiscall sub_522AE0(void *this, char a2); _DWORD *__thiscall sub_522B70(void *this, char a2); _DWORD *__thiscall sub_522C00(void *this, char a2); _DWORD *__thiscall sub_522C90(void *this, char a2); _DWORD *__thiscall sub_522D20(void *this, char a2); _DWORD *__thiscall sub_522DB0(void *this, char a2); void **__thiscall sub_522E40(void *this, char a2); void **__thiscall sub_522EC0(void *this, char a2); int __thiscall sub_522F40(_DWORD *this); int __thiscall sub_522FC0(_DWORD *this); int __thiscall sub_523040(_DWORD *this); int __thiscall sub_5230C0(_DWORD *this); int __thiscall sub_523140(_DWORD *this); int __thiscall sub_5231C0(_DWORD *this); _DWORD *__thiscall sub_523240(void *this, char a2); _DWORD *__thiscall sub_5232D0(void *this, char a2); _DWORD *__thiscall sub_523360(void *this, char a2); _DWORD *__thiscall sub_5233F0(void *this, char a2); _DWORD *__thiscall sub_523480(void *this, char a2); _DWORD *__thiscall sub_523510(void *this, char a2); void *__thiscall sub_5235A0(void *this, char a2); char __thiscall sub_523700(_DWORD *this, int a2, int a3); char __thiscall sub_523850(void *this, int a2); char __thiscall sub_523DF0(int this, int a2); char __thiscall sub_523F60(char *this, int a2); int __cdecl sub_524040(int a1); char *__thiscall sub_5241A0(char *this, int a2); _DWORD *__thiscall sub_524230(void *this, char a2); float *__thiscall sub_5242C0(float *this); void __thiscall sub_524330(float *this); void __thiscall sub_524350(float *this); void __thiscall sub_524390(int this, float a2, int a3, int a4); char __thiscall sub_5245F0(void *this, void *a2); LONG __thiscall sub_524960(_DWORD *this); int __thiscall sub_524A20(int this, unsigned int a2, int a3, int a4); void __thiscall sub_524BF0(void *this, float a2); float *__cdecl sub_524E00(int a1); void *__thiscall sub_524F40(void *this, char a2); BOOL __cdecl sub_524F70(int a1, int a2); BOOL __cdecl sub_524F90(int a1, int a2); BOOL __cdecl sub_524FB0(int a1, int a2); BOOL __cdecl sub_524FD0(int a1, int a2); char __thiscall sub_524FF0(unsigned __int16 *this); char sub_525040(); char __thiscall sub_525070(_DWORD **this, int a2); int __thiscall sub_5250A0(_DWORD *this); int __thiscall sub_5250F0(_DWORD **this); int __thiscall sub_525160(int this); int *__thiscall sub_525240(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_5252D0(char *this, _DWORD *a2); int __thiscall sub_526660(_DWORD *this, char a2); _DWORD *__thiscall sub_5269D0(_DWORD *this); LONG __thiscall sub_526A60(_DWORD *this); volatile LONG *__cdecl sub_526B60(int a1); int __thiscall sub_526C90(_DWORD *this); void __thiscall sub_526D30(void *this, int a2, unsigned int a3); int __thiscall sub_526F20(_DWORD **this); int __thiscall sub_527090(int this); char __thiscall sub_527170(volatile LONG **this, int a2); char __thiscall sub_5281E0(int this, int a2, int a3); int __thiscall sub_528450(_DWORD *this, int a2, int a3); void *__thiscall sub_528490(void *this, char a2); _DWORD *__thiscall sub_5284F0(int this); char *__thiscall sub_528550(struct std::ios_base *this, char a2); signed int __thiscall sub_528590(int this, int a2); signed int __thiscall sub_5285E0(int this); signed int *__thiscall sub_528650(int this, signed int *a2, __int64 a3, int a4, char a5); signed int *__thiscall sub_528810(int this, signed int *a2, __int64 a3, int a4, int a5, int a6, int a7, char a8); signed int __thiscall sub_528930(int this, signed int a2); _DWORD *__thiscall sub_528AE0(void *this, char a2); _BYTE *__cdecl sub_528B10(int a1, _BYTE *a2, _BYTE *a3, __int16 a4); void __thiscall sub_528BA0(void **this); void *__thiscall sub_528BD0(void *this, char a2); char __thiscall sub_528C00(_DWORD *this, int a2, char a3); char __thiscall sub_528D40(_BYTE *this); char __thiscall sub_528D50(_BYTE *this); void **__thiscall sub_528D60(void *this, char a2); void ***sub_528DB0(); char *__thiscall sub_528DC0(_DWORD *this, char *a2); bool __cdecl sub_528E20(int a1, int a2); _DWORD *__cdecl sub_528E50(int a1, _DWORD *a2, int a3, _DWORD *a4, unsigned __int8 *a5, int a6); _DWORD *__cdecl sub_528EC0(int a1, _DWORD *a2, int a3, _DWORD *a4, unsigned __int8 a5, int a6); int __thiscall sub_528F30(void *this, int a2); int __thiscall sub_528F50(void *this, int a2); int __cdecl sub_528F70(int, int, int, int, void *, size_t, int); // idb int __thiscall sub_529010(void *this, int a2); signed int __cdecl sub_529030(_DWORD *a1, int a2); signed int __cdecl sub_5290F0(_DWORD *a1, int a2); void __thiscall sub_5291C0(char *this); char *__thiscall sub_529250(char *this, char a2); struct std::locale::facet *__cdecl sub_529280(int a1); struct std::locale::facet *__cdecl sub_5293C0(int a1); _BYTE *__thiscall sub_529500(_BYTE *this, int a2); _DWORD *__thiscall sub_5296F0(_DWORD *this, int a2, char a3, int a4); _DWORD *__cdecl sub_5297C0(int a1, int a2, int a3, int a4, int a5, int a6, void *a7, int a8); _DWORD *__thiscall sub_529A50(_DWORD *this, int a2); _BYTE *__cdecl sub_529AA0(_BYTE *a1, _DWORD *a2); _DWORD *__thiscall sub_529D40(_DWORD *this, unsigned __int8 a2, int a3); int __thiscall sub_529E40(int, int, int, int, int, int, int); // idb int __thiscall sub_529EC0(int, int, int, int, int, int, int); // idb int __thiscall sub_529F40(int, int, int, int, int, int, int, int); // idb int __thiscall sub_529FC0(int, int, int, int, int, int, int, int); // idb int __thiscall sub_52A040(int, int, int, int, int, int, int); // idb int __cdecl sub_52A0A0(int, int, int, int, int, int, void *, int, int, int, size_t); // idb _DWORD *__thiscall sub_52A610(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_52A660(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_52A6B0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_52A700(void *this, _DWORD *a2, int a3, _DWORD *a4, int a5, char a6, unsigned __int8 a7); int __thiscall sub_52A920(void *this, int a2, int a3, int a4, int a5, int a6, double a7); int __thiscall sub_52AB30(void *this, int a2, int a3, int a4, int a5, int a6, double a7); int __cdecl sub_52AD30(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9); void *__thiscall sub_52AE60(int this, void *a2); int __cdecl sub_52AF90(const void **a1, const void **a2, int a3); int __cdecl sub_52B080(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); int __cdecl sub_52B210(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); void *__thiscall sub_52B2F0(void *this, void *a2); void __cdecl sub_52B320(int a1, int a2, char a3, int a4, int a5, int a6, int a7); void __cdecl sub_52B550(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_52B650(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int __thiscall sub_52B6F0(unsigned int *this, char *a2); int __cdecl sub_52B810(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int __thiscall sub_52B940(unsigned int *this, int a2); _DWORD __cdecl sub_52B9C0(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void *__thiscall sub_52BA60(void *this, char a2); void __thiscall sub_52BA90(unsigned int *this, unsigned int a2); char __thiscall sub_52BB90(_DWORD *this); char __thiscall sub_52BC10(_DWORD *this); char __thiscall sub_52BCC0(_DWORD *this, int a2, int a3); char __thiscall sub_52BCE0(volatile LONG **this, int a2); int __cdecl sub_52C200(int a1); void *__thiscall sub_52C340(void *this, char a2); BOOL __thiscall sub_52C380(int this); int __thiscall sub_52C3A0(_DWORD *this); BOOL __thiscall sub_52C400(HWND *this); char __thiscall sub_52C490(int this); BOOL __thiscall sub_52C4C0(HWND *this, int a2); char __thiscall sub_52C4D0(_DWORD *this); char __thiscall sub_52C660(void *this, int a2); char __thiscall sub_52C8F0(int this, int a2, int a3); int __cdecl sub_52C9C0(int a1); HWND __thiscall sub_52CB70(_DWORD *this); _DWORD *__thiscall sub_52CD40(void *this, char a2); int __thiscall sub_52CE20(_DWORD **this, int a2); int __thiscall sub_52CE40(_DWORD **this); int __thiscall sub_52CE60(_DWORD **this); int __thiscall sub_52CE70(_DWORD *this); int __thiscall sub_52CEA0(_DWORD *this); int __thiscall sub_52CEE0(_DWORD *this); int __thiscall sub_52CF20(_DWORD *this); char __thiscall sub_52CF70(_DWORD **this, int a2); char sub_52CFA0(); int __thiscall sub_52D000(_DWORD **this, int a2); int __thiscall sub_52D060(_BYTE *this, int a2); int __thiscall sub_52D090(_DWORD **this, int a2); int __thiscall sub_52D100(_BYTE *this, int a2); int __thiscall sub_52D130(_DWORD **this, int a2); char __thiscall sub_52D1B0(_DWORD *this); char __thiscall sub_52D2B0(_DWORD *this); char __thiscall sub_52D2C0(_DWORD *this, int a2); char __thiscall sub_52D710(_DWORD **this); char __thiscall sub_52D850(_DWORD **this, int a2, int a3); char __thiscall sub_52D8A0(_DWORD **this, int a2, int a3); char __thiscall sub_52D8B0(_DWORD *this, int a2, char a3); char __thiscall sub_52DBE0(_BYTE *this, _DWORD *a2, char a3); char __thiscall sub_52DD60(volatile LONG *this, int a2); void __thiscall sub_52DDC0(_DWORD *this); void __thiscall sub_52DE50(_DWORD *this); void __thiscall sub_52E0E0(_DWORD *this, _DWORD *a2, _DWORD *a3); void __thiscall sub_52E140(int this, int a2, int a3); void __thiscall sub_52E2A0(_DWORD *this, int a2); void __thiscall sub_52E2D0(char *this, char a2, int a3, int a4, int a5, int a6); void __thiscall sub_52E300(char *this); void __thiscall sub_52E320(_DWORD *this, int a2); void __thiscall sub_52E350(_DWORD *this, int a2); void __thiscall sub_52E380(_DWORD *this, _DWORD *a2); void __thiscall sub_52E3B0(_DWORD *this, _DWORD *a2); void __thiscall sub_52E3E0(_DWORD *this, _DWORD *a2, char a3); int __cdecl sub_52E410(int a1); void __thiscall sub_52E550(int this, int a2, _DWORD *a3, int a4); int __thiscall sub_52E7A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); int __thiscall sub_52E850(_DWORD *this); LONG __thiscall sub_52E8A0(_DWORD *this); char *__thiscall sub_52E940(char *this); volatile LONG *__cdecl sub_52EB30(int a1); char __thiscall sub_52EC60(_DWORD *this, int a2); int __cdecl sub_5306F0(int a1); _DWORD *__cdecl sub_530710(_DWORD *a1); _DWORD *__thiscall sub_530730(_DWORD *this); _DWORD *__thiscall sub_530780(_DWORD *this); void *__thiscall sub_5307E0(void *this, char a2); _DWORD *__thiscall sub_530820(_DWORD *this); int __thiscall sub_530850(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_5308B0(_DWORD *this, int a2); int **__thiscall sub_530910(_DWORD *this, int **a2, _DWORD *a3); int __thiscall sub_530980(_DWORD *this, int a2, char a3, int a4, void *a5); _DWORD *__thiscall sub_530BB0(_DWORD *this, char *a2); int *__thiscall sub_530C40(_DWORD *this, int *a2, int a3); void __stdcall sub_530E90(void *a1); int __thiscall sub_530ED0(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_530FB0(_DWORD *this); int *__thiscall sub_531000(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); void *__thiscall sub_5310A0(void *this, char a2); int __thiscall sub_531180(float *this, float a2); char __thiscall sub_5312A0(float *this, int a2); char __thiscall sub_5312D0(void *this, int a2); int __cdecl sub_5315C0(int a1); void *__thiscall sub_531710(void *this, char a2); int __thiscall sub_5318E0(_DWORD *this); _DWORD *__thiscall sub_531A20(_DWORD *this); char __thiscall sub_531A90(_DWORD *this, int a2, int a3); char __thiscall sub_531AF0(_DWORD *this); char __thiscall sub_531B80(_DWORD *this); char __thiscall sub_531BE0(void *this, int a2); char __thiscall sub_531F40(void *this, int a2); char __thiscall sub_532280(_DWORD *this, int a2, int a3); volatile LONG *__cdecl sub_5322A0(int a1); int __cdecl sub_5323D0(int a1); void __thiscall sub_532530(_DWORD *this, __int16 a2, char a3, int a4, int a5, unsigned int a6, int a7); void __thiscall sub_532750(_DWORD *this, __int16 a2, char a3, int a4, int a5, int a6); void *__thiscall sub_5328E0(void *this, char a2); void *__thiscall sub_532920(void *this, char a2); int __thiscall sub_5329A0(_DWORD **this); int __thiscall sub_5329C0(volatile LONG *this, int a2, int a3); char __thiscall sub_532A00(volatile LONG *this, int a2, int a3); int __thiscall sub_532A50(volatile LONG *this, _DWORD *a2, _DWORD *a3, int a4); char __thiscall sub_532B70(void *this, int a2); int __cdecl sub_5330D0(int a1); _DWORD *__thiscall sub_533230(void *this, char a2); char __thiscall sub_5332C0(int this); int __thiscall sub_5332E0(_DWORD *this, int a2); bool __thiscall sub_533370(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6); bool __thiscall sub_5333F0(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_533410(_DWORD *this, int a2); _DWORD *__thiscall sub_533430(_DWORD *this); int __thiscall sub_533540(int this); char __thiscall sub_5335D0(char *this, int a2, int a3, int a4); bool __thiscall sub_533640(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_533660(_DWORD *this, int a2); _DWORD *__thiscall sub_533680(_DWORD *this); char __stdcall sub_533760(int a1, int a2, int a3); char __thiscall sub_5337F0(_DWORD *this, int a2, int a3, unsigned int a4); char __thiscall sub_533870(int this, __int16 a2); int __thiscall sub_5338A0(int this); char sub_5338D0(); char __thiscall sub_533900(_BYTE *this, char a2); char __thiscall sub_533910(_DWORD *this, int a2); char __thiscall sub_533940(_DWORD *this, int a2); // char __usercall sub_533970@(double a1@); char __thiscall sub_533A10(_DWORD **this); int __thiscall sub_533A50(int this, char a2); int __thiscall sub_533A90(int this, char a2); void __thiscall sub_533AD0(int this); BOOL __thiscall sub_533AE0(_BYTE *this); void __thiscall sub_533B30(_DWORD *this, int a2, _DWORD *a3, int a4); void **__thiscall sub_533B80(void **this); LONG __thiscall sub_533C20(_DWORD *this); char __thiscall sub_533CD0(void *this, int a2, int a3, int a4); void **__thiscall sub_533CF0(void **this); _DWORD *__thiscall sub_533DE0(_DWORD **this, int a2); char *__thiscall sub_533E60(char *this); LONG __thiscall sub_534220(_DWORD *this); int __thiscall sub_534380(_DWORD *this, int a2); _DWORD *__thiscall sub_534420(_DWORD *this, int a2); _DWORD *__thiscall sub_5344A0(_DWORD *this, int a2); _DWORD *__thiscall sub_534520(_DWORD *this, int a2); int __thiscall sub_5345A0(_DWORD *this, unsigned __int16 a2); char __thiscall sub_534620(_DWORD *this); signed int __thiscall sub_534660(_DWORD **this, __int16 a2); int __thiscall sub_5346B0(char *this, int a2, int a3); __int16 __thiscall sub_534730(_DWORD **this, __int16 a2, char a3); LONG __thiscall sub_5347C0(float *this); int __thiscall sub_534850(_DWORD *this, char a2); signed int __thiscall sub_5348C0(_DWORD **this, __int16 a2); char __thiscall sub_534910(_DWORD *this); char __thiscall sub_534970(_DWORD **this, int a2, int a3, int a4, int a5); void __thiscall sub_534A60(_DWORD *this, float a2); void __thiscall sub_534B20(int this); void __thiscall sub_534B50(int this); int __thiscall sub_534B80(void *this); int __thiscall sub_534C50(void *this); int __thiscall sub_534CC0(_DWORD *this); int __thiscall sub_534E20(_DWORD *this); char __thiscall sub_534E80(_DWORD *this); char __thiscall sub_534EB0(_DWORD *this); int *__thiscall sub_534EE0(int this); void __fastcall sub_534F70(int a1, int a2, int a3); int *__thiscall sub_535020(char *this, int a2, int a3, int a4); void __thiscall sub_535040(_DWORD *this, int a2); void __thiscall sub_5350D0(_DWORD **this, int a2); _DWORD *__thiscall sub_535180(_DWORD *this, _DWORD *a2); void __thiscall sub_535240(_DWORD *this, int a2); void __thiscall sub_5352E0(_DWORD *this, int a2); char __thiscall sub_535370(_DWORD *this, int a2); void __thiscall sub_5354B0(_DWORD **this, int a2); void __thiscall sub_535550(_DWORD *this, int a2); void __thiscall sub_5355F0(_DWORD **this, int a2); void __thiscall sub_535690(_DWORD *this, int a2); void __thiscall sub_535730(_DWORD **this, int a2); char __thiscall sub_535790(_DWORD **this, int a2); void __thiscall sub_535800(_DWORD **this, int a2); char __thiscall sub_535820(_DWORD *this, _DWORD *a2, int a3); // int *__userpurge sub_535C00@(int a1@, int a2@, unsigned int a3); char __thiscall sub_535D60(char *this); char __thiscall sub_535E90(char *this); int *__thiscall sub_535FC0(int this); void __thiscall sub_535FE0(_BYTE *this); void __thiscall sub_5361A0(_DWORD *this, int a2); void __thiscall sub_536230(int this, char a2, char a3); void __thiscall sub_536340(_DWORD *this); void __thiscall sub_5364C0(int this); void __thiscall sub_536580(_DWORD *this); int __thiscall sub_5366A0(_BYTE *this); void __thiscall sub_536CE0(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_536E90(int this, char a2); void __thiscall sub_536FC0(int this, int a2, int a3); void __thiscall sub_5370B0(_DWORD *this, unsigned int a2); void __thiscall sub_537470(char *this); void __thiscall sub_537640(char *this); void __thiscall sub_537800(_DWORD *this); void __thiscall sub_5379D0(_DWORD *this); char __thiscall sub_537BA0(_DWORD *this, int a2); volatile LONG *__cdecl sub_537C60(int a1, int a2, int a3, int a4); int __cdecl sub_537DA0(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_537F00(int a1, int a2, int a3); volatile LONG *sub_538050(); char __thiscall sub_538180(void *this); volatile LONG *__cdecl sub_538510(int a1, int a2, int a3); volatile LONG *sub_538650(); char __thiscall sub_538780(void *this); volatile LONG *__cdecl sub_538B00(int a1); char __thiscall sub_538C30(void *this, int a2); char __thiscall sub_53B3C0(_DWORD *this, int a2, _DWORD *a3, int a4); // char __usercall sub_53B410@(int a1@, int a2@); void __thiscall sub_53B490(int this); void __thiscall sub_53B7C0(char *this, int a2); void __thiscall sub_53BB10(int this, unsigned int a2); _DWORD *__thiscall sub_53C300(_DWORD **this, _DWORD *a2, signed int a3); int __thiscall sub_53C350(_DWORD **this, signed int a2); char __thiscall sub_53C430(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); void __thiscall sub_53C480(_DWORD *this, int a2); void __thiscall sub_53C690(_DWORD *this, unsigned int a2); char __thiscall sub_53CD30(void *this, _DWORD *a2, int a3); char __thiscall sub_53CFF0(int this, int a2, int a3, int a4); void __thiscall sub_53D0A0(_DWORD *this, int a2, int a3); void __thiscall sub_53D160(_DWORD *this, unsigned int a2, int a3); int __thiscall sub_53D4D0(_DWORD **this, void *a2); int __thiscall sub_53D500(_DWORD **this, void *a2); int __stdcall sub_53D530(void *); // idb // void __userpurge sub_53D560(int a1@, int a2@, double a3@, int a4, unsigned int a5); int __thiscall sub_53D9B0(_DWORD *this, int a2, int a3, int a4, int a5); int __cdecl sub_53D9E0(int a1); __int16 __thiscall sub_53DA30(_DWORD *this); void *sub_53DA40(); void *__thiscall sub_53DA50(void *this, char a2); void *__thiscall sub_53DA90(void *this, char a2); void *__thiscall sub_53DAD0(void *this, char a2); void *__thiscall sub_53DB10(void *this, char a2); int sub_53DB50(); _DWORD *__cdecl sub_53DB70(int a1); void *__thiscall sub_53DBB0(void *this, char a2); void *__thiscall sub_53DBE0(void *this, char a2); void *__thiscall sub_53DC30(void *this, char a2); void *__thiscall sub_53DC60(void *this, char a2); int __thiscall sub_53DCC0(_DWORD **this); int __thiscall sub_53DF10(_DWORD **this); int __thiscall sub_53DFE0(_DWORD **this); void __stdcall sub_53E110(int a1, int a2); unsigned int __thiscall sub_53E140(_DWORD **this); int __thiscall sub_53E5A0(_DWORD **this, int a2, int a3, __int64 a4, char a5); int __thiscall sub_53EA50(_DWORD **this, int a2, int a3, __int64 a4, char a5); _DWORD *__thiscall sub_53EEA0(_DWORD **this); int __thiscall sub_53F070(_DWORD **this, const CHAR *a2, _DWORD *a3, int a4); int __thiscall sub_53F3D0(_DWORD **this, int a2); char __thiscall sub_53F440(volatile LONG **this, void *a2, int a3, int a4); char __thiscall sub_53F8D0(void *this); int __thiscall sub_53F9F0(_DWORD **this, int a2, int a3); int __thiscall sub_53FA80(_DWORD **this, __int64 a2); int __thiscall sub_53FAF0(_DWORD **this, int a2); // void __userpurge sub_53FB70(int a1@, int a2@, unsigned __int16 *a3, _DWORD *a4); char *__cdecl sub_53FCE0(signed int a1); int __thiscall sub_53FE70(const char *this, int a2); int __thiscall sub_5400B0(float *this, int a2, unsigned int a3); int __thiscall sub_5404F0(void *this, _WORD *a2, int *a3); int __thiscall sub_5406F0(_DWORD **this, _DWORD *a2, _DWORD *a3); int __thiscall sub_540B10(_DWORD **this, int a2, _DWORD *a3); // int __userpurge sub_540C70@(_DWORD *a1@, int a2@, int a3@, int a4, int a5, int a6, unsigned __int16 *a7, int a8, char a9); int __thiscall sub_540F10(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5, int a6, char a7); void __thiscall sub_541120(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_5411D0(_DWORD **this, int a2, _DWORD *a3); int __thiscall sub_541360(_DWORD **this, int a2, unsigned __int8 a3, _DWORD *a4); _BYTE *__thiscall sub_541690(_BYTE *this); volatile LONG *__cdecl sub_541780(int a1, int a2, int a3); const char *__thiscall sub_5418C0(_DWORD **this, const char *a2, int *a3); char __thiscall sub_541F40(_DWORD **this, int a2, _DWORD *a3); float *__thiscall sub_541FC0(_DWORD **this, float *a2, _DWORD *a3); void __thiscall sub_5452F0(_DWORD **this, unsigned __int16 *a2, int a3, __int64 a4, _DWORD *a5, int a6); void __thiscall sub_545900(_DWORD **this, int a2, _DWORD *a3); void __thiscall sub_545D60(_DWORD **this, int a2, _DWORD *a3); // const char *__userpurge sub_545F50@(int a1@, int a2@, LONG a3, unsigned __int8 a4, int *a5, int *a6, int a7); // const char *__userpurge sub_547A50@(int a1@, int a2@, int a3, int a4, int a5, int *a6, int a7); int __thiscall sub_547C20(int *this, int a2); int __thiscall sub_547CE0(_DWORD **this, unsigned __int16 *a2); // void __userpurge sub_547EE0(int a1@, int a2@, int a3@, int a4, int a5, int a6, int *a7, __int64 a8); // _DWORD *__userpurge sub_5484F0@(_DWORD **a1@, int a2@, int a3, int a4, int a5, _DWORD *a6, __int64 a7, int a8, char a9); int __thiscall sub_548670(_DWORD **this, int a2); _DWORD *__thiscall sub_548770(_DWORD **this, int a2, __int64 a3, int a4); _DWORD *__thiscall sub_548830(_DWORD **this, int a2, __int64 a3, int a4, int a5); _DWORD *__thiscall sub_5488D0(_DWORD **this, int a2, int a3); int __cdecl sub_548900(int a1); int __cdecl sub_548950(int a1); int sub_5489A0(); int sub_5489C0(); int sub_5489E0(); void *__thiscall sub_548A00(void *this, char a2); int sub_548A40(); int sub_548A60(); int sub_548A80(); int sub_548AA0(); int sub_548AC0(); int sub_548AE0(); char *__cdecl sub_548B00(unsigned __int16 a1, unsigned int a2, unsigned __int16 a3); int __cdecl sub_548D80(const char *a1); int __cdecl sub_548E10(const char *a1); _WORD *__cdecl sub_548EA0(__int16 a1); int __cdecl sub_548EF0(const char *a1); int __cdecl sub_548F70(int a1); int __cdecl sub_548FB0(const char *a1); int sub_549040(); int __cdecl sub_549060(const char *a1); int __cdecl sub_5490F0(const char *a1); int __cdecl sub_549180(const char *a1); int __cdecl sub_549220(void *, int, int, int, int, int); // idb int __cdecl sub_549330(char *a1); int __cdecl sub_549490(char *a1); char __thiscall sub_5496A0(_DWORD *this, int a2, int a3); char __thiscall sub_549720(volatile LONG **this, int a2); int __cdecl sub_549D20(int a1); void *__thiscall sub_549E60(void *this, char a2); char sub_549F20(); unsigned int __thiscall sub_549F80(_DWORD *this); int __thiscall sub_549FD0(_DWORD *this, unsigned int a2); char *__thiscall sub_549FF0(int **this, __int16 a2); int *__thiscall sub_54A080(_DWORD **this, _WORD *a2); LONG __thiscall sub_54A1A0(_DWORD *this); void __thiscall sub_54A250(_DWORD **this, int a2); void __thiscall sub_54A380(int **this); int __thiscall sub_54A6F0(_BYTE *this); void __thiscall sub_54A740(_DWORD *this, int a2); _DWORD *__thiscall sub_54A8E0(_DWORD *this); void __thiscall sub_54AA10(int **this); void __thiscall sub_54AAB0(int **this); void __thiscall sub_54AB50(int **this); void __thiscall sub_54ABF0(int **this); void __thiscall sub_54AC80(int **this); // int __usercall sub_54AD50@(int a1@, int a2@, int a3, int a4, int a5, int a6); volatile LONG *__cdecl sub_54AEA0(int a1); char __thiscall sub_54AFD0(void *this, int a2); void __thiscall sub_54B890(_DWORD *this); void __thiscall sub_54BA50(int this, int a2, int a3); void *__thiscall sub_54BB10(void *this, char a2); void *__thiscall sub_54BB50(void *this, char a2); // int __userpurge sub_54BD00@(int a1@, int a2@, int a3@, int a4); int __thiscall sub_54BF70(_DWORD **this); char __thiscall sub_54C170(void *this, int a2); void __thiscall sub_54C930(volatile LONG *this); int __thiscall sub_54CA20(volatile LONG *this, int a2, int a3); void __thiscall sub_54CA40(int this, int a2, int a3); void *__thiscall sub_54CBE0(void *this, char a2); BOOL __thiscall sub_54CC20(_DWORD **this); void **__thiscall sub_54CC50(void **this); LONG __thiscall sub_54CCF0(_DWORD *this); char __thiscall sub_54CD10(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); int __thiscall sub_54CD60(_DWORD *this, int a2); _DWORD *__thiscall sub_54CDB0(_DWORD **this, int a2); char __thiscall sub_54CE90(_BYTE *this); signed int __thiscall sub_54CEA0(_DWORD **this); char sub_54CEC0(); int __thiscall sub_54CEF0(_DWORD *this, unsigned int a2); char __thiscall sub_54CFB0(volatile LONG *this); void __thiscall sub_54D030(int this); char __thiscall sub_54D0C0(_DWORD *this, char a2); LONG __thiscall sub_54D100(_DWORD *this); int __thiscall sub_54D350(void *this, _BYTE *a2); int __thiscall sub_54D3E0(int this, int a2); LONG __thiscall sub_54D460(float *this, _DWORD *a2); bool __thiscall sub_54D4F0(_DWORD **this, int a2); char __thiscall sub_54D530(_WORD *this, int a2); int __thiscall sub_54D560(unsigned __int16 *this); int __thiscall sub_54D580(_DWORD **this); char __thiscall sub_54D5A0(_DWORD *this); char __thiscall sub_54D5D0(_DWORD *this); int *__thiscall sub_54D600(int this); char __thiscall sub_54D660(_DWORD **this, unsigned int a2, int a3); int __thiscall sub_54D7C0(_DWORD *this); _DWORD *__thiscall sub_54D8B0(float *this); int __thiscall sub_54D960(int *this); char __thiscall sub_54DA10(void *this, int a2); unsigned int __thiscall sub_54DE60(_DWORD **this); void __thiscall sub_54DF90(float *this, int a2, _DWORD *a3, int a4); char __thiscall sub_54E040(float *this); char __thiscall sub_54E100(_DWORD *this); int __thiscall sub_54E2A0(_DWORD *this); void __thiscall sub_54E840(int this, float a2); _DWORD *__thiscall sub_54EAF0(int this, char a2, int a3); char __thiscall sub_54EE40(volatile LONG *this); char __thiscall sub_54EFB0(int this, int *a2, int a3, int a4); void __thiscall sub_54F250(_DWORD **this, float a2); void __thiscall sub_54F2D0(int this); void __thiscall sub_54F880(_BYTE *this, unsigned int a2); void __thiscall sub_54F950(int this, int a2, unsigned int a3); _DWORD *__thiscall sub_54F9B0(_DWORD *this); char __thiscall sub_54F9D0(volatile LONG *this, int a2, int a3); volatile LONG *__cdecl sub_54FA00(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_54FB40(int a1); char *__thiscall sub_54FCA0(char *this); volatile LONG *__cdecl sub_54FFB0(int a1); char __thiscall sub_5500E0(void *this, int a2); void *__thiscall sub_550DC0(void *this, char a2); void *__thiscall sub_550E00(void *this, char a2); void *__thiscall sub_550E40(void *this, char a2); signed int __stdcall sub_550F10(char a1); int __thiscall sub_551ED0(const char *this, char *a2); char sub_551F30(); char __stdcall sub_551F60(int a1); char __thiscall sub_552000(_DWORD *this, int a2); char __thiscall sub_553A40(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, volatile LONG *a9); char __thiscall sub_553AB0(_DWORD *this); char __thiscall sub_553AE0(_DWORD *this, int a2, _DWORD *a3, int a4); char *__stdcall sub_554600(char a1, char a2); int *__thiscall sub_554F70(int this); int __thiscall sub_5551C0(char *this); signed int __thiscall sub_556000(_DWORD **this); void __thiscall sub_5562A0(_BYTE *this, float a2); int __thiscall sub_556670(int this, int a2); int __thiscall sub_556790(_DWORD *this); int __thiscall sub_556850(_DWORD *this); int __thiscall sub_556910(_DWORD *this); signed int __thiscall sub_5569F0(_DWORD **this); _DWORD *__thiscall sub_556B00(char *this); _DWORD *__thiscall sub_556E70(char *this, char a2); _DWORD *__thiscall sub_556FA0(char *this); int __cdecl sub_5570C0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); _DWORD *__thiscall sub_557230(_DWORD *this); volatile LONG *__cdecl sub_557300(int a1); char __thiscall sub_557430(char *this); char __thiscall sub_557450(char *this, char a2); char __thiscall sub_557480(char *this, int a2); int __thiscall sub_5580D0(int this); void __thiscall sub_558160(_BYTE *this); void __thiscall sub_558310(int this, int a2, int a3); void *__thiscall sub_5583D0(void *this, char a2); void __thiscall sub_558410(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_558470(void *this, char a2); char __thiscall sub_558560(void *this, int a2); LONG __thiscall sub_5589D0(_DWORD *this, unsigned int a2, int a3); void __thiscall sub_558A80(int *this); int __cdecl sub_558B60(int a1); _DWORD *__thiscall sub_558CD0(void *this, char a2); char __thiscall sub_558DD0(_DWORD *this); char *__thiscall sub_559140(_BYTE *this); int __thiscall sub_559300(_BYTE *this, int a2); int sub_559730(); void *__thiscall sub_559890(void *this, char a2); _DWORD *__thiscall sub_5598D0(_DWORD *this); _DWORD *__thiscall sub_5598F0(_DWORD *this); _DWORD *__thiscall sub_559910(_DWORD *this); _DWORD *__thiscall sub_559930(_DWORD *this); _DWORD *__thiscall sub_559950(_DWORD *this); _DWORD *__thiscall sub_559970(_DWORD *this); _DWORD *__thiscall sub_5599A0(_DWORD *this); _DWORD *__thiscall sub_5599C0(_DWORD *this); _DWORD *__thiscall sub_5599E0(_DWORD *this); _DWORD *__thiscall sub_559A00(_DWORD *this); _DWORD *__thiscall sub_559A20(_DWORD *this); void __thiscall sub_559A40(void ***this, int a2, const char *a3); int __thiscall sub_559A60(int this, float a2, int a3); int __thiscall sub_559AC0(_DWORD **this); LONG __thiscall sub_559AE0(_DWORD *this); int __thiscall sub_559B90(int this); int __thiscall sub_559E10(void *this, _BYTE *a2); _DWORD *__thiscall sub_559E80(_DWORD *this, int a2); // void __usercall sub_559F60(int a1@, double a2@); char __thiscall sub_55A050(void *this, float a2); _DWORD *__thiscall sub_55B810(_DWORD *this, unsigned int a2, int a3); // void __userpurge sub_55B950(int a1@, double a2@, int a3); _DWORD *__thiscall sub_55BA30(_DWORD *this); volatile LONG *__cdecl sub_55BC20(int a1); void __thiscall sub_55BD50(void *); // idb int __thiscall sub_55BE00(unsigned __int16 *this, int a2); void *__thiscall sub_55BE40(void *this, char a2); void __thiscall sub_55BE70(void *); // idb void **__thiscall sub_55BEE0(void **this); char __thiscall sub_55BFA0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); int __thiscall sub_55BFF0(_BYTE *this); int __thiscall sub_55C000(_DWORD *this, int a2); int __thiscall sub_55C090(_DWORD *this, unsigned int a2); void __thiscall sub_55C0F0(int this); char *__thiscall sub_55C180(char *this); LONG __thiscall sub_55C290(_DWORD *this); void __thiscall sub_55C3A0(_DWORD *this, unsigned int a2); void __thiscall sub_55C470(_DWORD *this); int __thiscall sub_55C4D0(float *this, int a2); void __thiscall sub_55C5E0(float *this, int a2); void __thiscall sub_55C7A0(int this); void __thiscall sub_55C830(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_55C860(_DWORD *this); char __thiscall sub_55C890(_DWORD *this); int __thiscall sub_55C8C0(float *this, float a2); char __stdcall sub_55C900(_DWORD *a1); // char __userpurge sub_55C9D0@(int a1@, int a2@, unsigned int a3, int a4); void __thiscall sub_55CB50(int this); int __thiscall sub_55CBC0(char *this); char __thiscall sub_55CC50(int this, int *a2, int a3, int a4); void __thiscall sub_55CD00(int this, int a2, unsigned int a3); volatile LONG *__cdecl sub_55CD80(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_55CEC0(int a1); char __thiscall sub_55CFF0(void *this, int a2); void *__thiscall sub_55D960(void *this, char a2); int __cdecl sub_55D9A0(char a1); void *__thiscall sub_55DA00(void *this, char a2); char __thiscall sub_55DA50(_DWORD *this); _DWORD *__thiscall sub_55DA80(char *this, signed int a2); float *__thiscall sub_55DB00(float *this); void __thiscall sub_55DC20(int this, int a2); int __thiscall sub_55DD40(_DWORD **this); char __thiscall sub_55E200(void *this, int a2); int __thiscall sub_55E9F0(float *this); char __thiscall sub_55EAA0(int this, int a2, char *a3); volatile LONG *__cdecl sub_55EC60(int a1); int __cdecl sub_55ED90(unsigned int a1); int sub_55EDB0(); _DWORD *__thiscall sub_55EDD0(void *this, char a2); __int16 __thiscall sub_55EF00(_WORD *this, __int16 a2); bool __thiscall sub_55EF20(_WORD *this, __int16 a2); int __thiscall sub_55EF50(_DWORD **this, int a2); int __thiscall sub_55F150(char *this, char a2); int __thiscall sub_55F1C0(_DWORD *this, int a2); signed int __thiscall sub_55F1D0(_DWORD *this, int a2, _DWORD *a3, int a4); signed int __thiscall sub_55F210(_DWORD *this); __int16 __thiscall sub_55F250(int this, __int16 a2); signed int __thiscall sub_55F290(_DWORD *this); int __thiscall sub_55F460(_DWORD **this); BOOL __thiscall sub_55F4C0(float *this); signed int __stdcall sub_55F4F0(float *a1, int a2); int __stdcall sub_55F760(int a1, int a2, int a3); bool __stdcall sub_55F7C0(int a1, int a2); char __stdcall sub_55F880(_DWORD *a1, _DWORD *a2); char __stdcall sub_55FA10(_DWORD *a1, _DWORD *a2); char __stdcall sub_55FBB0(_DWORD *a1, _DWORD *a2); char __stdcall sub_55FD40(_DWORD *a1, _DWORD *a2); bool __stdcall sub_55FEE0(_DWORD *a1, _DWORD *a2); bool __stdcall sub_560070(_DWORD *a1, _DWORD *a2); volatile LONG *__thiscall sub_560210(void *this, int *a2); int __thiscall sub_560410(_DWORD *this, int *a2); int __thiscall sub_560840(char *this); char __thiscall sub_560920(_DWORD **this); char __thiscall sub_5609C0(_DWORD *this); char __thiscall sub_560A20(_DWORD *this, int a2); char __thiscall sub_560C10(_DWORD *this, int a2, int a3); void __thiscall sub_560D10(float *this, int a2); int __thiscall sub_560D80(_DWORD *this); void __thiscall sub_560E20(_DWORD *this); float *__thiscall sub_560E70(float *this); LONG __thiscall sub_560FD0(_DWORD *this); char __thiscall sub_561070(_DWORD **this); int __thiscall sub_561120(_DWORD *this); volatile LONG *__cdecl sub_561160(int a1); int __thiscall sub_561290(float *this); char __thiscall sub_5612E0(char *this, int a2); char __thiscall sub_561910(_DWORD *this, int a2); void __thiscall sub_561A80(int this, int a2, int a3); char __thiscall sub_561B70(void *this, int a2); int sub_562520(); void *__cdecl sub_562540(void *a1, int a2); void *__cdecl sub_5625F0(void *a1, int a2); void *__cdecl sub_5626A0(void *a1, int a2); void *__cdecl sub_562750(void *a1, int a2); void *__cdecl sub_562800(void *a1, int a2); void *__cdecl sub_5628B0(void *a1, int a2); void *__cdecl sub_562960(void *a1, int a2); char __cdecl sub_562A10(int *a1, int *a2, int *a3); char __cdecl sub_562A80(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_562AF0(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_562B60(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_562BD0(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_562C40(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_562CB0(_DWORD **a1, _DWORD **a2, _DWORD **a3); int __cdecl sub_562D20(int a1, int a2, int a3, int *a4); _DWORD *__cdecl sub_562E80(int a1, int a2, int a3, _DWORD *a4); _DWORD *__cdecl sub_563040(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_563200(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_5633D0(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_5635A0(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_563780(int a1, int a2, int a3, _DWORD *a4); void *__thiscall sub_563960(void *this, char a2); char __cdecl sub_5639B0(int *a1, int *a2, int *a3); char __cdecl sub_563A60(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_563B10(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_563BC0(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_563C70(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_563D20(_DWORD **a1, _DWORD **a2, _DWORD **a3); char __cdecl sub_563DD0(_DWORD **a1, _DWORD **a2, _DWORD **a3); int __cdecl sub_563E80(int a1, int a2, int a3, int *a4); _DWORD *__cdecl sub_563F00(int a1, int a2, int a3, _DWORD *a4); _DWORD *__cdecl sub_563F80(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_564000(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_564080(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_564100(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_564180(int a1, int a2, int a3, _DWORD *a4); int **__cdecl sub_564200(int **a1, int *a2, int *a3); _DWORD *__cdecl sub_5643C0(_DWORD *a1, _DWORD **a2, _DWORD **a3); _DWORD *__cdecl sub_564580(_DWORD *a1, _DWORD **a2, _DWORD **a3); _DWORD *__cdecl sub_564740(_DWORD *a1, _DWORD **a2, _DWORD **a3); _DWORD *__cdecl sub_564900(_DWORD *a1, _DWORD **a2, _DWORD **a3); _DWORD *__cdecl sub_564AC0(_DWORD *a1, _DWORD **a2, _DWORD **a3); _DWORD *__cdecl sub_564C80(_DWORD *a1, _DWORD **a2, _DWORD **a3); int __cdecl sub_564E40(int a1, int a2, char a3); _DWORD *__cdecl sub_564F00(int a1, int a2, char a3); _DWORD *__cdecl sub_564FC0(int a1, int a2, char a3); int __cdecl sub_565080(int a1, int a2, char a3); int __cdecl sub_565140(int a1, int a2, char a3); int __cdecl sub_565200(int a1, int a2, char a3); int __cdecl sub_5652C0(int a1, int a2, char a3); void *__thiscall sub_565380(void *this, char a2); int __cdecl sub_5653B0(int *a1, int a2); int __cdecl sub_565400(int *a1, int a2); int __cdecl sub_565450(int *a1, int a2); int __cdecl sub_5654A0(int *a1, int a2); int __cdecl sub_5654F0(int *a1, int a2); int __cdecl sub_565540(int *a1, int a2); int __cdecl sub_565590(int *a1, int a2); int __cdecl sub_5655E0(void *, int, int, char); // idb int __cdecl sub_5656D0(void *, int, int, char); // idb int __cdecl sub_5657C0(void *, int, int, char); // idb int __cdecl sub_5658B0(void *, int, int, char); // idb int __cdecl sub_5659A0(void *, int, int, char); // idb int __cdecl sub_565A90(void *, int, int, char); // idb int __cdecl sub_565B80(void *, int, int, char); // idb int __thiscall sub_565C70(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_565D70(_DWORD *this, char *a2); char __thiscall sub_565E50(_DWORD *this, void *a2, int a3); bool __thiscall sub_5660D0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6); void __thiscall sub_5661F0(char *this, unsigned int a2); LONG __thiscall sub_5662E0(_DWORD *this); char __thiscall sub_566390(void *this, int a2, int a3, int a4); _DWORD *__thiscall sub_5663B0(_DWORD *this); void __thiscall sub_566520(_DWORD *this, int a2); char __thiscall sub_5665B0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_566610(_DWORD **this); void **__thiscall sub_566670(void **this); void __thiscall sub_566710(_DWORD *this, float a2); void __thiscall sub_5667C0(int this); void __thiscall sub_5667F0(int this); int __thiscall sub_566820(void *this); _DWORD *__thiscall sub_566880(_DWORD **this, int a2); char __thiscall sub_566930(_DWORD **this, int a2, int a3, unsigned int a4); char __thiscall sub_5669B0(_DWORD **this, int a2); char __thiscall sub_566BB0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_567050(int this, int a2, int a3, int a4); void __thiscall sub_5670D0(_DWORD *this, int a2, int a3); volatile LONG *__cdecl sub_5671B0(int a1, int a2, int a3, int a4); int __cdecl sub_5672F0(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_567450(int a1); char __thiscall sub_567580(void *this, int a2); char __thiscall sub_567F40(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); void *__thiscall sub_567F90(void *this, char a2); _WORD *__cdecl sub_567FD0(__int16 a1); void *__thiscall sub_568010(void *this, char a2); void *__thiscall sub_568040(void *this, char a2); int __thiscall sub_568160(_DWORD **this, int a2); char sub_568190(); signed int __thiscall sub_5681C0(_WORD *this, char a2); char __thiscall sub_5681E0(void *this, int a2); char __thiscall sub_568AA0(_DWORD *this, int a2, int a3); // void __userpurge sub_568BB0(int a1@, int a2@, int a3); // void __userpurge sub_568C30(int a1@, int a2@, int a3); // void __userpurge sub_568CB0(int a1@, int a2@, int a3); int __cdecl sub_568DC0(int a1); void *__thiscall sub_568F20(void *this, char a2); int __thiscall sub_569070(_DWORD *this, int a2); int __thiscall sub_569080(_DWORD *this); int __thiscall sub_569090(_DWORD *this, int a2); int __thiscall sub_5690A0(_DWORD *this); int __thiscall sub_5690B0(_DWORD *this, _BYTE *a2); __int16 __thiscall sub_5691A0(_WORD *this, __int16 a2); __int16 __thiscall sub_5691C0(_WORD *this, __int16 a2); int __thiscall sub_5691E0(_DWORD *this, int a2, int a3); __int16 __thiscall sub_569220(_WORD *this); __int16 __thiscall sub_569230(_WORD *this); _DWORD *__thiscall sub_569250(_DWORD *this, _DWORD *a2); __int16 __thiscall sub_569270(_WORD *this, __int16 a2); __int16 __thiscall sub_569290(_WORD *this, __int16 a2); int __thiscall sub_5692B0(_DWORD *this, int a2, int a3); __int16 __thiscall sub_5692D0(_WORD *this); __int16 __thiscall sub_5692E0(_WORD *this); _DWORD *__thiscall sub_5692F0(_DWORD *this, _DWORD *a2); int __thiscall sub_569310(_DWORD *this, int a2, int a3); int __thiscall sub_569330(char *this); void __thiscall sub_569340(float *this, float a2); BOOL __thiscall sub_569350(float *this, float a2); int __thiscall sub_569380(_DWORD *this, _DWORD *a2); char __thiscall sub_5693E0(float *this, int a2); void __thiscall sub_5694B0(int this, float a2); int __thiscall sub_569530(int this); void __thiscall sub_5696C0(_DWORD **this, __int16 *a2); char *__thiscall sub_5696D0(int *this, char a2); bool __thiscall sub_5696E0(int this, float a2, float a3, int a4, int a5); int __thiscall sub_5698A0(int this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_5698E0(_DWORD **this); int __thiscall sub_569900(_DWORD **this); char __thiscall sub_569910(_DWORD **this); int __thiscall sub_569950(_DWORD **this, char a2); void __stdcall sub_5699C0(int a1, _DWORD *a2, int a3); LONG __thiscall sub_569A60(void **this); bool __thiscall sub_569AF0(void *this, int a2, int a3); _DWORD *__thiscall sub_569C40(_DWORD *this); LONG __thiscall sub_569DB0(void **this); void __thiscall sub_569F10(_DWORD *this, int a2); bool __thiscall sub_56A070(void *this, int a2, int a3); // int __userpurge sub_56A0F0@(_DWORD *a1@, int a2@, _BYTE *a3); int __thiscall sub_56A650(int this); int __thiscall sub_56A6F0(void *this); int __thiscall sub_56A7C0(_DWORD **this); _DWORD *__thiscall sub_56A860(_DWORD *this); char __thiscall sub_56A9A0(_DWORD *this, __int16 a2); char *__thiscall sub_56AA50(float *this); char __thiscall sub_56ACE0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_56AD70(_DWORD *this); // void __usercall sub_56AEB0(int a1@, signed int a2@); int __thiscall sub_56B150(_DWORD *this); int __thiscall sub_56B170(_DWORD *this); void __thiscall sub_56B1B0(int this); char __thiscall sub_56B240(_DWORD *this, int a2); int __thiscall sub_56B270(_DWORD *this); // unsigned int __usercall sub_56B3C0@(int a1@, signed int a2@); char __thiscall sub_56B500(_DWORD *this, int a2); int __thiscall sub_56B5A0(_DWORD *this); int __thiscall sub_56B670(_DWORD *this, int a2); char __thiscall sub_56B690(void *this, int a2, int a3, int a4, _DWORD *a5); volatile LONG *__cdecl sub_56B750(int a1, int a2, int a3, int a4); char __thiscall sub_56B790(_DWORD *this, int a2, int a3, int a4, int *a5, volatile LONG *a6, int a7); _DWORD *__thiscall sub_56BAD0(_DWORD *this); char __thiscall sub_56BB70(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6); void __thiscall sub_56BC30(__int16 *this, int a2, int a3, int a4); int __thiscall sub_56BE10(_DWORD *this); int __thiscall sub_56BE40(_DWORD *this); unsigned __int8 *__thiscall sub_56BE70(_DWORD **this); int __thiscall sub_56BED0(_DWORD *this); char *__thiscall sub_56BF70(void **this, int a2); _DWORD *__thiscall sub_56C010(_DWORD **this, int a2); void __thiscall sub_56C0A0(_DWORD **this); void __thiscall sub_56C150(_DWORD **this); void __thiscall sub_56C190(_DWORD **this, int a2); void __thiscall sub_56C260(_DWORD **this); void __thiscall sub_56C310(_DWORD **this); void __thiscall sub_56C390(int this); signed int __thiscall sub_56C420(_DWORD *this, int a2); void __thiscall sub_56C480(int this, int a2); char __thiscall sub_56C570(_DWORD *this, int a2); char __thiscall sub_56C5F0(_DWORD *this); void __thiscall sub_56C730(int **this); void __thiscall sub_56C7E0(_DWORD *this, unsigned int a2); int __thiscall sub_56C880(int this); LONG __thiscall sub_56C940(void **this); LONG __thiscall sub_56C9F0(_DWORD *this); int __thiscall sub_56CEB0(int this, char a2); void __thiscall sub_56CF40(int this, int a2, int a3); // char __userpurge sub_56D070@(int a1@, signed int a2@, signed int a3@, float a4); float *__thiscall sub_56D180(float *this); int __cdecl sub_56D490(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_56D5E0(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_56D720(int a1, int a2, int a3, int a4); int __cdecl sub_56D880(int a1, int a2, int a3, int a4); int __cdecl sub_56D9E0(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_56DB50(int a1, int a2, int a3, int a4); int __cdecl sub_56DCA0(int a1, int a2, int a3, int a4); int __cdecl sub_56DDF0(int a1, int a2, int a3, int a4); int __cdecl sub_56DF40(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_56E090(int a1); char __thiscall sub_56E1C0(void *this, float a2); void __thiscall sub_56F350(_DWORD **this, __int16 *a2); _DWORD *__thiscall sub_56F590(int *this, int *a2); char __thiscall sub_56F630(_DWORD *this, int *a2); _DWORD *__thiscall sub_56F6C0(int *this, int a2, int a3); int __thiscall sub_56F7B0(int *this, unsigned __int16 *a2); char __thiscall sub_56F920(_DWORD *this, int a2); void __thiscall sub_56F9E0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_56FC40(_DWORD *this, int a2); int __thiscall sub_56FC90(int *this, _BYTE *a2); _DWORD *__thiscall sub_56FF80(_DWORD *this, int a2); void *__thiscall sub_56FFD0(void *this, char a2); int __thiscall sub_570000(_DWORD *this); int __thiscall sub_570010(_DWORD *this); _DWORD *__thiscall sub_570090(void *this, char a2); int __thiscall sub_570120(_DWORD *this); int __cdecl sub_5701A0(unsigned int a1); int sub_5701C0(); unsigned int __cdecl sub_5701E0(__int16 a1); void *__thiscall sub_570220(void *this, char a2); void **__thiscall sub_570250(void *this, char a2); _DWORD *__thiscall sub_5702F0(void *this, char a2); void *__thiscall sub_570380(void *this, char a2); void *__thiscall sub_5703B0(void *this, char a2); int __thiscall sub_5703E0(void *this, _BYTE *a2); int __thiscall sub_570420(_DWORD *this); void __thiscall sub_570460(_DWORD *this, int a2, LONG a3, int a4); int __thiscall sub_5706F0(char *this, char *a2, int a3, int *a4); int __thiscall sub_570A90(_DWORD *this, unsigned int a2); int __thiscall sub_570D20(_DWORD *this, int a2, int a3); LONG __thiscall sub_570DC0(_DWORD *this); char __thiscall sub_570F10(void *this, int a2, int a3, _DWORD *a4, int a5, int a6); int *__thiscall sub_571B40(char *this, int a2); _DWORD *__thiscall sub_571D10(_DWORD *this); int __thiscall sub_571F20(_DWORD *this, int a2); volatile LONG *__cdecl sub_572560(int a1, int a2, _DWORD *a3, int a4, int a5); void *__thiscall sub_5726A0(void *this, char a2); char __thiscall sub_572750(volatile LONG *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5); int __thiscall sub_5728D0(int this, int a2, int a3); int __thiscall sub_5729A0(_DWORD **this, int a2); int __thiscall sub_5729D0(_DWORD **this, int a2); int __thiscall sub_572A80(_BYTE *this); int __thiscall sub_572AB0(_DWORD *this); char __thiscall sub_572B30(volatile LONG *this, int a2, int a3, int a4, int a5); char __thiscall sub_572BA0(void *this, int a2); char __thiscall sub_573340(int this); _DWORD *__thiscall sub_573450(_DWORD *this); char __thiscall sub_573580(void *this, int a2); char __thiscall sub_573E60(int this, int a2, int a3); char __thiscall sub_573EB0(volatile LONG *this, int a2); char __thiscall sub_573F10(volatile LONG *this, int a2, int a3); char __thiscall sub_573F70(volatile LONG *this, int a2); int __cdecl sub_573FD0(int a1); volatile LONG *__cdecl sub_574120(int a1); void *__thiscall sub_574250(void *this, char a2); _DWORD *__thiscall sub_574290(void *this, char a2); void __stdcall sub_574370(int a1, int a2); char __thiscall sub_5743A0(void *this, int a2); int __cdecl sub_5745A0(int a1); void *__thiscall sub_5746E0(void *this, char a2); char __thiscall sub_5747C0(_DWORD *this, int a2, int a3); void __thiscall sub_574820(int this, float a2); char __thiscall sub_574880(volatile LONG **this, void *a2); LONG __thiscall sub_574CF0(_DWORD *this); void __thiscall sub_574DB0(_DWORD *this, unsigned int a2, unsigned int a3); int __cdecl sub_574F20(int a1); void *__thiscall sub_575080(void *this, char a2); LONG __thiscall sub_5750B0(_DWORD *this); int __thiscall sub_5750D0(_DWORD *this); // int *__userpurge sub_5750E0@(int a1@, int a2@, int a3); int __thiscall sub_575100(_DWORD *this); char __thiscall sub_575110(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_575150(_DWORD *this); char sub_5751E0(); // void **__usercall sub_575210@(void **a1@, int a2@, int a3@); int __thiscall sub_575290(int *this, int a2); int __thiscall sub_5753D0(int *this, int a2); void __thiscall sub_5753F0(_DWORD *this, int a2); int __thiscall sub_575440(_DWORD *this, int a2, int a3); int __thiscall sub_5754E0(int *this); unsigned int __thiscall sub_5755F0(_DWORD *this); char *__thiscall sub_575660(_DWORD *this, __int16 a2); int *__thiscall sub_575770(_DWORD *this, _WORD *a2); void __thiscall sub_5757D0(_DWORD *this, int a2); char __thiscall sub_575940(_DWORD *this); char __thiscall sub_575970(_DWORD *this); int __thiscall sub_5759A0(_DWORD **this); int (__thiscall ***__thiscall sub_575A70(int *this))(void *, char); int __thiscall sub_575B40(_BYTE *this); // int __usercall sub_575B90@(int a1@, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_575D00(_DWORD *this); LONG __thiscall sub_575E40(_DWORD *this); volatile LONG *__cdecl sub_575F40(int a1); int *__thiscall sub_576070(int *this); int *__thiscall sub_576380(int *this, int *a2); int *__thiscall sub_5763B0(int *this, int a2); char __thiscall sub_5763F0(void *this, int a2); int *__thiscall sub_576CC0(int *this); int *__thiscall sub_576CE0(int *this); void __thiscall sub_576D50(_DWORD *this, int a2); void __thiscall sub_577090(int this, int a2, int *a3); void *__thiscall sub_577150(void *this, char a2); void *__thiscall sub_577190(void *this, char a2); int __cdecl sub_5771C0(const char *a1); char __thiscall sub_577290(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_5772D0(int this); char sub_577350(); int __thiscall sub_577380(_DWORD *this); int __thiscall sub_577440(_DWORD *this, unsigned int a2); LONG __thiscall sub_577460(_DWORD *this); char __thiscall sub_577580(_DWORD *this); char __thiscall sub_5775B0(_DWORD *this); _DWORD *__thiscall sub_5775E0(_DWORD *this); void __thiscall sub_577790(_DWORD *this, int a2); int __thiscall sub_577850(_BYTE *this); int __thiscall sub_577CE0(_DWORD *this, int a2, int a3, int a4, int a5); void __thiscall sub_578110(_DWORD *this); _DWORD *__thiscall sub_5786F0(_DWORD *this); void __thiscall sub_5787C0(_DWORD *this); void __thiscall sub_578860(_DWORD *this); void __thiscall sub_578900(_DWORD **this); void __thiscall sub_5789E0(_DWORD *this); void __thiscall sub_578A70(_DWORD *this); void __thiscall sub_578B10(_DWORD *this, unsigned int a2); void __thiscall sub_578C10(_DWORD *this, char a2); volatile LONG *__cdecl sub_578D40(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_578E80(int a1); char __thiscall sub_578FB0(void *this, int a2); void __thiscall sub_579AA0(int this, int a2, unsigned int a3); void *__thiscall sub_579B60(void *this, char a2); int sub_579BA0(); int __cdecl sub_579BC0(const char *a1); void *__thiscall sub_579C50(void *this, char a2); char __thiscall sub_579CD0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, volatile LONG *a6); void __thiscall sub_579D10(_DWORD *this); char sub_579E60(); char __thiscall sub_579ED0(_DWORD *this); char __thiscall sub_579F00(_DWORD *this); void __thiscall sub_579F30(_DWORD **this, int a2); void __thiscall sub_57A000(_DWORD *this, int a2); void __thiscall sub_57A1B0(_DWORD **this, int a2, int a3); int __cdecl sub_57A250(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_57A3B0(int a1); char __thiscall sub_57A510(void *this, _DWORD *a2); void *__thiscall sub_57AC80(void *this, char a2); void *__thiscall sub_57ACC0(void *this, char a2); char __thiscall sub_57AD00(volatile LONG *this); char __thiscall sub_57AD90(volatile LONG *this); LPCSTR __thiscall sub_57AE20(_DWORD *this, const CHAR *a2); char __thiscall sub_57AF70(volatile LONG *this); char __thiscall sub_57AF80(volatile LONG *this, int a2); LONG __thiscall sub_57AFC0(_DWORD *this); char __thiscall sub_57B050(void *this, int a2); char __thiscall sub_57B570(volatile LONG *this, int a2, int a3); float *__thiscall sub_57B590(float *this); volatile LONG *__cdecl sub_57B620(int a1); char *__thiscall sub_57B750(_DWORD *this, char a2); int __thiscall sub_57B850(_DWORD **this, int a2); char __thiscall sub_57B870(_DWORD **this, int a2); int __thiscall sub_57BA50(_DWORD *this); LONG __thiscall sub_57BAA0(_DWORD *this); char __thiscall sub_57BCC0(volatile LONG **this, int a2); int __thiscall sub_57C630(_DWORD **this); void __thiscall sub_57C7A0(_DWORD **this, int a2); void __thiscall sub_57C820(int *this, int a2, int a3); void __thiscall sub_57CBD0(int this, int a2, _DWORD *a3, int a4); int __thiscall sub_57CD50(_DWORD *this, unsigned __int8 a2); int __thiscall sub_57CE30(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_57CED0(_DWORD *this); volatile LONG *__cdecl sub_57D040(int a1); void __thiscall sub_57D2B0(int this, int a2, int a3); char __thiscall sub_57D400(volatile LONG **this, int a2); void *__thiscall sub_57DA00(void *this, char a2); void *__thiscall sub_57DA40(void *this, char a2); signed int __thiscall sub_57DA70(_DWORD *this, int a2); _DWORD *__thiscall sub_57DA90(_DWORD *this, _DWORD *a2); int __thiscall sub_57DB70(_DWORD *this, int a2); void __thiscall sub_57DBB0(_DWORD *this); char sub_57DBC0(); char __thiscall sub_57DBF0(_DWORD *this); int __thiscall sub_57DC20(_DWORD **this, int a2); void __thiscall sub_57DC80(_DWORD *this); int __thiscall sub_57DFA0(_DWORD *this); char __thiscall sub_57DFF0(_DWORD **this); _DWORD *__thiscall sub_57E070(_DWORD *this); LONG __thiscall sub_57E140(_DWORD *this); char __thiscall sub_57E260(int this, float a2); char __thiscall sub_57E3E0(int this, int a2, int a3); // bool __userpurge sub_57E8F0@(int a1@, int a2@, unsigned __int16 a3, unsigned __int16 a4, char a5); int __thiscall sub_57E9D0(int this); volatile LONG *__cdecl sub_57EAD0(int a1); char __thiscall sub_57EC00(_DWORD *this, int a2); void *__thiscall sub_57FEA0(void *this, char a2); int __thiscall sub_57FED0(void *this, _BYTE *a2); int __thiscall sub_57FF20(_DWORD *this); void __thiscall sub_57FF60(_DWORD *this, int a2, LONG a3, int a4); int __thiscall sub_5801F0(char *this, char *a2, int a3, int *a4); int __thiscall sub_580590(_DWORD *this, unsigned int a2); int __thiscall sub_580820(_DWORD *this, int a2, int a3); LONG __thiscall sub_5808C0(_DWORD *this); char __thiscall sub_580A10(void *this, int a2, int a3, _DWORD *a4, int a5, int a6); int __thiscall sub_5818B0(void *this, int a2); _DWORD *__thiscall sub_581CE0(_DWORD *this); int __thiscall sub_581EF0(_DWORD *this, int a2); volatile LONG *__cdecl sub_582560(int a1, int a2, _DWORD *a3, int a4, int a5); void *__thiscall sub_5826A0(void *this, char a2); _DWORD *__thiscall sub_5826D0(_DWORD *this); int __thiscall nullsub_14(_DWORD); // weak int __thiscall sub_582700(_DWORD *this, int a2); _DWORD *__thiscall sub_582830(int *this); int __thiscall sub_582870(_DWORD *this, int a2); int __thiscall sub_582A30(_DWORD *this, int a2); _DWORD *__thiscall sub_582A50(int *this); void __thiscall sub_582A60(_DWORD *this); int __thiscall sub_582AB0(_DWORD **this); int __thiscall sub_582B00(int *this, char a2); int __thiscall sub_582B90(_DWORD *this); void __thiscall sub_582BA0(_DWORD *this); int __thiscall sub_582CF0(_DWORD **this); int __thiscall sub_582D30(_DWORD *this, int a2); int __thiscall sub_582DB0(_DWORD *this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); int __thiscall sub_582F30(_DWORD *this); char __thiscall sub_582F60(volatile LONG *this, int a2, int a3); char __thiscall sub_582FE0(void *this, int a2); int __cdecl sub_5839B0(int a1); void *__thiscall sub_583B00(void *this, char a2); BOOL __cdecl sub_583B40(int a1, int a2); BOOL __cdecl sub_583B60(int a1, int a2); char sub_583B80(); char __thiscall sub_583BB0(_DWORD *this); _DWORD *__thiscall sub_583BF0(int this, int a2); char __thiscall sub_583CA0(_DWORD *this, unsigned __int8 *a2); char __thiscall sub_5841D0(_DWORD *this); int __thiscall sub_584450(void *this); LONG __thiscall sub_584530(_DWORD *this); volatile LONG *__cdecl sub_584630(int a1); char __thiscall sub_584760(_DWORD *this); char __thiscall sub_5847D0(_DWORD *this, char a2); char __thiscall sub_584800(_DWORD *this, void *a2, int a3, int a4, int a5); char __thiscall sub_584AE0(int this, int a2, int a3); char __thiscall sub_584C90(_DWORD *this, int a2); void *__stdcall sub_585330(char *a1); int __thiscall sub_585390(_DWORD *this); void ***sub_5853C0(); void *__thiscall sub_5853D0(void *this, char a2); char *__thiscall sub_585400(_DWORD *this, char *a2); bool __cdecl sub_585460(int a1, int a2); _DWORD *__thiscall sub_585490(_DWORD *this, int a2); int __cdecl sub_5854E0(const void **a1, const void **a2, int a3); void __cdecl sub_585540(int a1, int a2); void __cdecl sub_585580(int a1, int a2); int __cdecl sub_585670(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); int __cdecl sub_585710(const void **a1, const void **a2, int a3); int __cdecl sub_585770(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9); int __cdecl sub_585880(const void **a1, const void **a2, int a3); int __cdecl sub_585950(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); void __cdecl sub_585A20(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8); int __cdecl sub_585B00(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); int __cdecl sub_585C60(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); void __cdecl sub_585D40(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __cdecl sub_585F40(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); void __cdecl sub_586040(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)); _DWORD __cdecl sub_5861E0(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void __cdecl sub_5863A0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_586500(int a1, int a2, char a3, int a4, int a5, int a6, int a7); void __cdecl sub_5866D0(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); void __cdecl sub_5867D0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int *__cdecl sub_5868E0(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)); unsigned int *__cdecl sub_586AA0(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8); void __cdecl sub_586D40(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_586E00(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __thiscall sub_586EA0(int *this); unsigned int __thiscall sub_586EF0(int *this, char *a2); int __cdecl sub_587000(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); int __cdecl sub_587060(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int __thiscall sub_587190(int *this, int a2); _DWORD __cdecl sub_587210(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void *__thiscall sub_5872B0(void *this, char a2); int __thiscall sub_5872E0(int *this, unsigned int a2); void __cdecl sub_5873F0(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __cdecl sub_587530(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8); _DWORD __cdecl sub_587790(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak int __thiscall sub_587880(void *this, int a2, int a3); int __thiscall sub_587A30(void *this); void __thiscall sub_587A80(_DWORD *this); char __thiscall sub_587AD0(_DWORD *this); // char __userpurge sub_587B60@(_DWORD *a1@, double a2@, signed int a3, signed int a4); char __thiscall sub_587C10(volatile LONG **this, int a2); int __thiscall sub_587E20(void *this, int a2, int a3, float a4, float a5); int __thiscall sub_587E50(int this, unsigned int a2); char __thiscall sub_587F30(int this); char __thiscall sub_588490(_DWORD *this); char __thiscall sub_588530(int *this, int a2); void __thiscall sub_588780(_DWORD *this, const char *a2); char __thiscall sub_588860(_DWORD *this); void __thiscall sub_5889F0(int *this, char a2); char __thiscall sub_588A70(int this, int a2); int __cdecl sub_588E60(int a1); _DWORD *__thiscall sub_588FA0(_DWORD *this); LONG __thiscall sub_589060(void **this); volatile LONG *__cdecl sub_5890D0(int a1); int __thiscall sub_589200(_DWORD *this, int a2); const void **__thiscall sub_589350(_DWORD *this, void *a2); char __thiscall sub_589380(void *this, volatile LONG **a2); void __thiscall sub_589E90(_DWORD *this); char __thiscall sub_58A2C0(_DWORD **this, const char *a2); void __thiscall sub_58A340(_DWORD *this, int a2, int a3); void __thiscall sub_58A350(int this, int a2, unsigned int a3); void *__thiscall sub_58A3E0(void *this, char a2); int __cdecl sub_58A420(int a1); _DWORD *__cdecl sub_58A470(int a1); _DWORD *__cdecl sub_58A4C0(int a1); _DWORD *__thiscall sub_58A510(void *this, char a2); void *__thiscall sub_58A570(void **this); _DWORD *__cdecl sub_58A5A0(int a1, _DWORD *a2, int a3); char *__cdecl sub_58A660(char *a1, int a2); void *__thiscall sub_58A780(void *this, char a2); void __thiscall sub_58A7B0(_DWORD *this, int a2); int __cdecl sub_58A800(int a1); int sub_58A8B0(); int __cdecl sub_58A940(int a1); int sub_58A9F0(); int __cdecl sub_58AA80(int a1); int __cdecl sub_58AB30(int a1); int __cdecl sub_58ABE0(int a1); int sub_58AC90(); LONG sub_58AF20(); int __cdecl sub_58B5F0(int a1); int __cdecl sub_58BA00(int a1); int __cdecl sub_58BDD0(int a1, LPCSTR lpString, __int16 a3); int __cdecl sub_58BFC0(const char *a1); int __cdecl sub_58C0A0(const char *a1); int __cdecl sub_58C170(int a1); int __cdecl sub_58C220(int a1); int sub_58C420(); int __cdecl sub_58C5A0(char a1); int sub_58C640(); int sub_58C6C0(); int __cdecl sub_58C8B0(const char *a1); int __cdecl sub_58C980(const char *a1); int __cdecl sub_58CA30(const char *a1); int __cdecl sub_58CB00(int a1); int __cdecl sub_58CBB0(int a1); int __cdecl sub_58CC60(int a1); int __cdecl sub_58CD10(int a1); int __cdecl sub_58CDC0(int a1); int __cdecl sub_58CE70(int a1); int __cdecl sub_58CF20(int a1); int __cdecl sub_58CFD0(int a1); int sub_58D080(); int __cdecl sub_58D110(int a1); int __cdecl sub_58D1C0(int a1); int __cdecl sub_58D270(int a1); int __cdecl sub_58D320(int a1); int __thiscall sub_58D580(void **this, void *a2, void *a3); int __thiscall sub_58D5B0(void *this, int a2, int a3); int __thiscall sub_58D600(void *this, _DWORD *a2, int *a3); int __thiscall sub_58D630(_DWORD **this, int a2); int __thiscall sub_58D6B0(void *this, int a2, int a3); int __thiscall sub_58D700(void *this, _DWORD *a2, int *a3); int __thiscall sub_58D730(void *this, int a2, int a3); char __thiscall sub_58D750(volatile LONG **this, void *a2, int a3, int a4, int a5); int __thiscall sub_58D7B0(_DWORD **this, int a2, int a3); char __thiscall sub_58D7F0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, char a9); int __thiscall sub_58D8B0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_58D8E0(char *this, int a2); int __thiscall sub_58D930(_DWORD *this, unsigned int a2); char __thiscall sub_58DA10(_DWORD *this); char __thiscall sub_58DB20(_DWORD *this, int a2, int a3, LPCSTR lpString, int a5, int a6, int a7, int a8); int __thiscall sub_58DD10(int *this); void __thiscall sub_58DDD0(_DWORD *this); LONG __thiscall sub_58DF10(_DWORD *this); unsigned int __thiscall sub_58DFD0(_DWORD *this); // char __userpurge sub_58E080@(_DWORD *a1@, int a2@, int a3); _DWORD *__thiscall sub_58E160(_BYTE *this); char __thiscall sub_58E230(volatile LONG *this, int a2); volatile LONG *__cdecl sub_58E290(LPCSTR lpString, int a2, int a3, int a4, int a5, int a6, int a7); int __cdecl sub_58E450(int a1, int a2, int a3, int a4, int a5, int a6); volatile LONG *__cdecl sub_58E5D0(int a1, int a2, int a3, int a4); int __cdecl sub_58E710(LPCSTR lpString, int, int, int, int, int); // idb _DWORD *__thiscall sub_58E8F0(void *this, char a2); LONG __thiscall sub_58E940(_DWORD *this); void *__thiscall sub_58E9E0(void *this, char a2); void *__thiscall sub_58EA10(void *this, char a2); int __thiscall sub_58EAF0(float *this, float a2); char __thiscall sub_58EC50(float *this, int a2); char __thiscall sub_58EC80(void *this, int a2); int __cdecl sub_58EFA0(int a1); void *__thiscall sub_58F0F0(void *this, char a2); int __thiscall sub_58F130(void **this); char __thiscall sub_58F1C0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_58F210(_DWORD *this); int __thiscall sub_58F280(_DWORD **this, int a2); char __thiscall sub_58F2C0(_BYTE *this); char __thiscall sub_58F2E0(_BYTE *this); int __thiscall sub_58F340(_DWORD *this); int *__thiscall sub_58F3D0(_WORD **this); char __stdcall sub_58F400(char a1); char sub_58F410(); LONG __thiscall sub_58F440(_DWORD *this); unsigned int __thiscall sub_58F4D0(_DWORD *this, int a2); _DWORD *__thiscall sub_58F590(_DWORD *this); void __thiscall sub_58F6F0(_DWORD **this); char __thiscall sub_58F8C0(int this, float a2); int *__thiscall sub_58FCA0(_DWORD *this); int *__thiscall sub_58FD30(_DWORD *this); void __thiscall sub_58FDC0(int this, int a2, _DWORD *a3, int a4); char __thiscall sub_58FE40(_DWORD *this); char __thiscall sub_58FE70(_DWORD *this); int __thiscall sub_58FEA0(_DWORD *this, int a2); int *__thiscall sub_58FEE0(int this, int a2); int __thiscall sub_590040(int this, int a2); void __thiscall sub_5900A0(_DWORD **this); int __thiscall sub_590390(int this, char a2); char __thiscall sub_590710(_BYTE *this, _DWORD *a2, int a3); int __thiscall sub_590B50(_DWORD *this); char __thiscall sub_590CC0(_DWORD **this, int a2); int *__thiscall sub_591160(_DWORD *this, int a2); char __thiscall sub_591250(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_591330(_DWORD *this, int a2, int a3); volatile LONG *__cdecl sub_591490(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_5915D0(int a1); char __thiscall sub_591700(void *this, int a2); void *__thiscall sub_5922D0(void *this, char a2); _DWORD *__thiscall sub_592300(void *this, char a2); // int __userpurge sub_5923A0@(int a1@, int a2@, unsigned int a3, int a4, unsigned int a5); bool __thiscall sub_592430(_DWORD *this, int a2, int a3, _DWORD *a4); char sub_592570(); int __thiscall sub_5925A0(_DWORD **this, int a2); int __thiscall sub_592600(int this); int __cdecl sub_592650(int a1); int __thiscall sub_592740(_DWORD **this); int __thiscall sub_5928D0(int this); char __thiscall sub_592960(int this); int __cdecl sub_592990(int a1, int a2, int a3); int __cdecl sub_592AE0(int a1); signed int __cdecl sub_592C40(_BYTE *a1, int a2); char __cdecl sub_592E40(__int16 *a1, _DWORD *a2, char a3, int a4); int __cdecl sub_592F20(int a1, int a2, _DWORD *a3, char a4); // unsigned __int16 *__userpurge sub_593140@(unsigned __int16 *a1@, int *a2@, _BYTE *a3, char a4); _WORD *__thiscall sub_593480(_DWORD *this); int __thiscall sub_5937F0(unsigned __int16 *this); char __thiscall sub_593880(int this, int a2, int a3); int __thiscall sub_593A20(unsigned __int16 *this); char __thiscall sub_593A30(int this, __int16 a2); int __thiscall sub_593AA0(unsigned __int16 *this); char __thiscall sub_593B00(void *this, int a2); void *__thiscall sub_594540(void *this, char a2); void *__thiscall sub_594570(void *this, char a2); _WORD *__cdecl sub_5945B0(__int16 a1); _DWORD *__thiscall sub_594630(_DWORD *this); char __thiscall sub_5946C0(void *this, int a2); __int16 __thiscall sub_595190(int **this, unsigned __int16 a2, int a3); char __thiscall sub_5951E0(_DWORD *this, int a2, _BYTE *a3, int a4); char __thiscall sub_595400(int this, int a2, int a3); char __thiscall sub_595680(char *this); volatile LONG *__cdecl sub_5957E0(int a1); void *__thiscall sub_595910(void *this, char a2); unsigned __int16 __thiscall sub_595960(_DWORD **this, unsigned __int16 a2); int __thiscall sub_5959B0(float *this, unsigned __int8 a2); void __thiscall sub_5959D0(float *this, float a2); char __thiscall sub_5959E0(_DWORD *this); LONG __thiscall sub_595A80(_DWORD *this); char __thiscall sub_595B10(void *this, int a2); char __thiscall sub_595F50(int this, float a2); void __thiscall sub_596110(volatile LONG *this, int a2, int a3); float *__thiscall sub_596190(float *this); volatile LONG *__cdecl sub_596220(int a1); char *__thiscall sub_596350(_DWORD *this, char a2); int __thiscall sub_596440(_DWORD **this); int __thiscall sub_596460(_DWORD *this, int a2); int __thiscall sub_5964C0(_DWORD **this); int __thiscall sub_5964E0(_DWORD **this); int __thiscall sub_596500(_DWORD **this, int a2); char __thiscall sub_596580(void *this, int a2); char __thiscall sub_596F10(int this); int __thiscall sub_597040(int this, int a2); int __thiscall sub_597150(_DWORD *this, int a2); int __thiscall sub_597220(_DWORD **this); char __thiscall sub_597270(volatile LONG *this, int a2, int a3); int __cdecl sub_5972E0(int a1); void *__thiscall sub_597430(void *this, char a2); void __thiscall sub_5974D0(float *this, float a2); int __thiscall sub_597500(float *this, unsigned __int8 a2); bool __thiscall sub_597520(_BYTE *this, char a2); char __thiscall sub_597580(_BYTE *this, char a2); char __thiscall sub_597590(_BYTE *this); int __thiscall sub_5975F0(char *this, int a2, int a3); char __thiscall sub_5976C0(void *this, int a2); char __thiscall sub_597E90(int this, float a2); int __thiscall sub_598050(_DWORD *this); int __thiscall sub_5980B0(_DWORD **this); int __thiscall sub_598110(_DWORD **this); int __thiscall sub_598170(char *this, int a2); char __thiscall sub_5981D0(volatile LONG *this, int a2, int a3); int __cdecl sub_5982C0(int a1); void *__thiscall sub_598420(void *this, char a2); char __thiscall sub_598460(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); _DWORD *__thiscall sub_5984A0(_DWORD *this); char __stdcall sub_5985E0(__int16 a1); signed int __thiscall sub_598640(_WORD *this); char __thiscall sub_5986B0(int *this, char a2); int __thiscall sub_598700(_DWORD **this, int a2); int __stdcall sub_598760(char a1); int __thiscall sub_598840(_DWORD *this); int __thiscall sub_598900(int this, int a2, int a3); int __thiscall sub_598930(_DWORD *this); int __thiscall sub_598970(_DWORD *this); void __thiscall sub_5989B0(int this, int a2); _DWORD *__thiscall sub_598B10(_DWORD *this, int a2); LONG __thiscall sub_598BB0(_DWORD *this); LONG __thiscall sub_598C60(_DWORD *this); char __thiscall sub_598D20(_DWORD *this); char __thiscall sub_598D50(_DWORD *this); int __thiscall sub_598D80(_DWORD *this, int a2); int __thiscall sub_598EF0(char *this); _DWORD *__thiscall sub_599090(char *this, void *a2); _DWORD *__thiscall sub_599440(_DWORD *this); volatile LONG *__cdecl sub_599510(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_599650(int a1); char __thiscall sub_599780(void *this, int a2); void __thiscall sub_599BC0(_DWORD *this, int a2); void *__thiscall sub_599C10(void *this, char a2); void *__thiscall sub_599C50(void *this, char a2); void *__thiscall sub_599C80(void *this, char a2); void __fastcall sub_599CB0(LONG a1, int a2, int a3, int a4, LONG a5); void *__thiscall sub_599D20(void *this); LONG __thiscall sub_599E50(_DWORD *this); int __thiscall sub_599F40(float *this); int __thiscall sub_599F90(int this); int __thiscall sub_599FD0(_DWORD *this, int a2); signed int __thiscall sub_59A060(_DWORD *this, int a2); char __thiscall sub_59A180(_DWORD *this, int a2); int __thiscall sub_59A760(_DWORD **this, _BYTE *a2); unsigned int __thiscall sub_59A7C0(_DWORD *this, int a2); volatile LONG *__cdecl sub_59ABE0(int a1); char __thiscall sub_59AD10(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_59AE70(void *this, int a2); unsigned __int16 *__cdecl sub_59AF70(int a1); void *__thiscall sub_59AFB0(void *this, char a2); char __thiscall sub_59B050(_DWORD *this, int a2); int *__thiscall sub_59B080(int this, int a2); int __thiscall sub_59B3B0(_DWORD **this, int a2, int a3); _DWORD *__thiscall sub_59B3D0(_DWORD *this); LONG __thiscall sub_59B470(_DWORD *this); char __thiscall sub_59B550(void *this, int a2); int __stdcall sub_59BDA0(const char *a1); volatile LONG *__cdecl sub_59BEA0(int a1); char __thiscall sub_59BFD0(int this); char __thiscall sub_59C5A0(volatile LONG *this, int a2, int a3); void *__thiscall sub_59C620(void *this, char a2); float *__thiscall sub_59C650(float *this); // char __userpurge sub_59C6D0@(int a1@, int a2@, int a3, int a4); char __thiscall sub_59C7B0(_DWORD *this, int a2, int a3); // int __userpurge sub_59C810@(int a1@, int a2@, int a3, __int16 a4); _DWORD *__thiscall sub_59C850(_DWORD **this, int a2); char __thiscall sub_59C8B0(void *this, int a2); char __thiscall sub_59CF30(volatile LONG **this, int a2); int __thiscall sub_59D410(_DWORD *this, __int16 a2, signed int a3); char __thiscall sub_59D500(int this, float a2); volatile LONG *__cdecl sub_59D6A0(int a1); int __cdecl sub_59D7D0(int a1); void *__thiscall sub_59D920(void *this, char a2); void *__thiscall sub_59D960(void *this, char a2); char __thiscall sub_59D9E0(volatile LONG **this, int a2); int __thiscall sub_59DA40(void *this, int a2); int __thiscall sub_59DA70(void *this, _BYTE *a2); bool __stdcall sub_59DAC0(_DWORD *a1, int a2, int a3); void *__thiscall sub_59DC10(void *this, char a2); char __thiscall sub_59DC50(_BYTE *this, char a2); char __thiscall sub_59DC60(_BYTE *this); char __thiscall sub_59DCD0(int this); int __thiscall sub_59DD60(char *this, LPCSTR lpString); char __thiscall sub_59DF60(void *this, int a2); char __thiscall sub_59E670(char *this, LPCSTR lpString); char __thiscall sub_59E900(int this, int a2, int a3); void __thiscall sub_59E980(unsigned __int16 *this, int a2); int __cdecl sub_59EB50(int a1); _DWORD *__thiscall sub_59ECB0(void *this, char a2); char __thiscall sub_59ED90(_BYTE *this, char a2); void __thiscall sub_59EDA0(_DWORD *this, int a2, int a3); char __thiscall sub_59EDF0(void *this, int a2); void __thiscall sub_59F0A0(int this, int a2); int __cdecl sub_59F260(int a1); void *__thiscall sub_59F3B0(void *this, char a2); HWND __thiscall sub_59F3F0(HWND *this); int __thiscall sub_59F430(_DWORD *this); HWND __thiscall sub_59F490(char *this); BOOL __thiscall sub_59F590(HWND *this); int __thiscall sub_59F620(int this); _BYTE *__thiscall sub_59F660(_BYTE *this, const void *a2, int a3); char __thiscall sub_59F6C0(int this); BOOL __thiscall sub_59F750(HWND *this, int a2); char __thiscall sub_59F7A0(_DWORD *this); char __thiscall sub_59F970(void *this, int a2); char __thiscall sub_59FD90(char *this, unsigned int a2, int a3); _DWORD *__thiscall sub_59FE40(_DWORD *this); volatile LONG *__cdecl sub_59FF10(int a1); void __thiscall sub_5A0040(_DWORD *this, int a2, unsigned __int16 a3); char __thiscall sub_5A00A0(_DWORD *this); _DWORD *__thiscall sub_5A0250(void *this, char a2); int __thiscall sub_5A02C0(_DWORD *this, int a2); int __thiscall sub_5A0350(_DWORD *this); _DWORD *__thiscall sub_5A03A0(int this, int a2); _DWORD *__thiscall sub_5A03D0(_DWORD *this); _DWORD *__thiscall sub_5A03F0(_DWORD *this); _DWORD *__thiscall sub_5A0460(_DWORD *this); int __thiscall sub_5A0490(int this); void __thiscall sub_5A0500(int this, int a2, _DWORD *a3, int a4); void __thiscall sub_5A0540(int **this, __int16 a2); _DWORD *__thiscall sub_5A0590(_DWORD *this); int __thiscall sub_5A05E0(_DWORD *this, _BYTE *a2); int __thiscall sub_5A0640(_DWORD *this); int __thiscall sub_5A06D0(_DWORD *this); _DWORD __stdcall nullsub_15(_DWORD, _DWORD); // weak void __thiscall sub_5A0820(_BYTE *this, float a2); char __thiscall sub_5A0870(int this, char a2); void __thiscall sub_5A08A0(char *this); void __thiscall sub_5A0960(char *this); int __thiscall sub_5A0A20(char *this, int a2); int __thiscall sub_5A0A60(char *this); int __thiscall sub_5A0AA0(_DWORD *this); char __thiscall sub_5A0BA0(_DWORD *this); char __thiscall sub_5A0BD0(_DWORD *this); int __thiscall sub_5A0C00(_DWORD *this); void __thiscall sub_5A0DD0(float **this); int __thiscall sub_5A0E60(_DWORD *this); int __thiscall sub_5A0EF0(_DWORD *this); char __thiscall sub_5A0F80(_DWORD *this, int a2, int a3); void __thiscall sub_5A1160(_DWORD *this, int a2, int a3); void __thiscall sub_5A12E0(_DWORD *this, int a2, int a3); int __thiscall sub_5A1430(_DWORD *this, int a2, int a3); char __thiscall sub_5A1550(_DWORD *this, __int16 a2); LONG __thiscall sub_5A15F0(_DWORD *this); void __thiscall sub_5A1710(int this); void __thiscall sub_5A1820(_DWORD *this); unsigned int __thiscall sub_5A1970(_DWORD **this, char a2); unsigned int __thiscall sub_5A1AC0(int this, __int16 a2); volatile LONG *__cdecl sub_5A1BB0(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_5A1CF0(_DWORD *this); LONG __thiscall sub_5A1E80(_DWORD *this); volatile LONG *__cdecl sub_5A2040(int a1, int a2); volatile LONG *__cdecl sub_5A2180(int a1, int a2, int a3); void __thiscall sub_5A22C0(_DWORD *this, float a2); void __thiscall sub_5A26B0(_DWORD *this, __int16 a2); char __thiscall sub_5A2830(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); char __thiscall sub_5A28B0(int *this); char __thiscall sub_5A2DA0(_DWORD *this, _DWORD *a2, unsigned int a3); int __thiscall sub_5A3560(int *this); char __thiscall sub_5A3620(int this, int a2, int a3, int a4); char __thiscall sub_5A3690(int *this, int a2); unsigned int __thiscall sub_5A3790(_DWORD *this); void __thiscall sub_5A4140(_DWORD *this, unsigned int a2); char __thiscall sub_5A4360(void *this, int a2, int *a3, volatile LONG *a4, int a5); char __thiscall sub_5A4DA0(void *this, int a2, int *a3, volatile LONG *a4, char a5); // int __userpurge sub_5A57B0@(_DWORD *a1@, int a2@, _BYTE *a3); void __thiscall sub_5A5A50(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_5A5D00(_DWORD *this, int a2, int a3, int a4, int a5); char __thiscall sub_5A5E70(_DWORD *this, int a2, unsigned int a3, char a4); int __thiscall sub_5A5EF0(_DWORD *this, float a2); int __cdecl sub_5A5F90(int a1); _DWORD *__thiscall sub_5A5FE0(_DWORD *this); void *__thiscall sub_5A6040(void *this, char a2); void *__thiscall sub_5A6070(void *this, char a2); int __thiscall sub_5A60A0(_DWORD **this); int __thiscall sub_5A61A0(_DWORD **this); int __thiscall sub_5A6270(_DWORD **this, int a2, int a3, __int64 a4); unsigned int __thiscall sub_5A6620(_DWORD **this); char __thiscall sub_5A6770(volatile LONG **this, void *a2, int a3, int a4); char *__cdecl sub_5A6AA0(signed int a1); char __stdcall sub_5A6C50(unsigned __int16 a1, char *a2); signed int __stdcall sub_5A6EE0(unsigned __int16 a1, char *a2); int __thiscall sub_5A7270(_DWORD **this, unsigned __int16 a2, int a3); int __thiscall sub_5A7780(_DWORD **this, int a2, int a3); int __thiscall sub_5A7920(_DWORD **this, int a2, int a3); void *__thiscall sub_5A7C80(_DWORD **this, const CHAR *a2, _DWORD *a3, int a4); int __thiscall sub_5A7EB0(_DWORD **this, unsigned __int16 a2, char a3); int __thiscall sub_5A8360(_DWORD **this, unsigned __int16 a2, unsigned int a3); void __thiscall sub_5A83C0(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_5A85C0(_DWORD **this, signed int a2); int __thiscall sub_5A86C0(_DWORD **this, int a2, int a3); LONG __thiscall sub_5A8800(_DWORD *this); _DWORD *__thiscall sub_5A88C0(_BYTE *this); volatile LONG *__cdecl sub_5A89A0(int a1, int a2, int a3); void __thiscall sub_5A8AE0(unsigned int *this, unsigned __int16 a2); int __thiscall sub_5A9570(unsigned int *this, unsigned __int16 a2, char a3, int *a4, char a5); int __thiscall sub_5AB810(unsigned int *this, int a2, unsigned int a3); _DWORD *__cdecl sub_5AB880(_DWORD *a1); int __cdecl sub_5AB8A0(int a1); _DWORD *__cdecl sub_5AB8C0(_DWORD *a1); void *__thiscall sub_5AB8F0(void *this, char a2); _DWORD *__thiscall sub_5AB920(_DWORD *this); _DWORD *__thiscall sub_5AB970(_DWORD *this, int a2); int __thiscall sub_5AB9D0(_DWORD *this, _DWORD *a2); int sub_5ABA30(); int sub_5ABA50(); int sub_5ABA70(); unsigned int __cdecl sub_5ABA90(_DWORD *a1, int a2); int __cdecl sub_5ABB10(int a1); int __cdecl sub_5ABB60(int a1); int __cdecl sub_5ABBB0(const char *a1); int __cdecl sub_5ABC30(int a1); int sub_5ABC80(); int __thiscall sub_5ABCA0(_DWORD *this); _DWORD *__thiscall sub_5ABD20(void *this, char a2); int __thiscall sub_5ABDB0(_DWORD *this, int a2, char a3, int a4, void *a5); int *__thiscall sub_5ABFE0(_DWORD *this, int *a2, int a3); void __stdcall sub_5AC230(void *a1); // _DWORD *__usercall sub_5AC270@(_DWORD *result@, _DWORD *a2, int a3); int **__thiscall sub_5AC2A0(_DWORD *this, int **a2, _WORD *a3); int **__thiscall sub_5AC310(_DWORD *this, int **a2, _WORD *a3); int __thiscall sub_5AC380(_DWORD *this); int *__thiscall sub_5AC3D0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); _DWORD *__thiscall sub_5AC470(_DWORD *this, char *a2); int __thiscall sub_5AC4F0(_DWORD *this, int a2, char *a3); void __thiscall sub_5AC560(_DWORD *this); unsigned int __thiscall sub_5AC5C0(unsigned int *this, unsigned int a2); int __thiscall sub_5AC690(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_5AC8E0(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_5AC9E0(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_5ACB10(_DWORD *this, char *a2); void *__thiscall sub_5ACBF0(void *this, char a2); char __thiscall sub_5ACCD0(void *this, int a2); char __thiscall sub_5AD1A0(int this, int a2, _BYTE *a3, int a4); char __thiscall sub_5AD2A0(int this, int a2, int a3); int __thiscall sub_5AD370(_DWORD *this); int __cdecl sub_5AD3C0(int a1); void *__thiscall sub_5AD530(void *this, char a2); void __thiscall sub_5AD700(void *this, float a2); bool __thiscall sub_5AD720(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_5AD750(int *this); _DWORD *__thiscall sub_5AD7F0(_DWORD *this, int a2, int a3); LONG __thiscall sub_5AD9A0(_DWORD *this); LONG __thiscall sub_5ADA30(volatile LONG *this); int __thiscall sub_5ADA80(_BYTE *this); int __thiscall sub_5ADB00(int this, char a2); char sub_5ADB50(); int __thiscall sub_5ADB80(_DWORD **this); void __thiscall sub_5ADD10(_DWORD **this, int a2); signed int __thiscall sub_5ADE10(_DWORD *this); char __thiscall sub_5ADE50(_WORD *this, int a2); char __thiscall sub_5ADED0(_WORD *this, int a2, int a3, int a4); char __thiscall sub_5ADF40(_DWORD *this, int a2, int a3, int a4, int a5, int *a6, _DWORD *a7); LONG __thiscall sub_5AE130(_DWORD **this); char __thiscall sub_5AE270(_DWORD **this); char __thiscall sub_5AE460(_DWORD *this, int a2); char __thiscall sub_5AE480(_DWORD **this, int a2, int a3); int __cdecl sub_5AE500(int a1, int a2, int a3); int __cdecl sub_5AE650(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_5AE7D0(int a1); char __thiscall sub_5AE940(volatile LONG **this, int a2); void *__thiscall sub_5AF100(void *this, char a2); void *__thiscall sub_5AF140(void *this, char a2); void *__thiscall sub_5AF180(void *this, char a2); void __thiscall sub_5AF1C0(int this); char __thiscall sub_5AF2E0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); void __thiscall sub_5AF320(int this); int __thiscall sub_5AF3A0(char *this, int a2); int __thiscall sub_5AF430(char *this); __int16 __thiscall sub_5AF4B0(_WORD **this, int a2); int __thiscall sub_5AF500(_DWORD **this); char __thiscall sub_5AF520(_DWORD **this); int __thiscall sub_5AF540(int *this, char a2); char __thiscall sub_5AF550(_DWORD **this); int __thiscall sub_5AF570(_DWORD *this, unsigned __int8 a2); int __thiscall sub_5AF5A0(_DWORD *this); char sub_5AF5B0(); void __thiscall sub_5AF5E0(_WORD *this, int a2, int a3); char __thiscall sub_5AF850(int this); signed int __thiscall sub_5AF8A0(_DWORD *this, int a2); int __thiscall sub_5AF920(_DWORD *this, int a2); char __thiscall sub_5AF9E0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, volatile LONG *a7, int a8, int a9); char __thiscall sub_5AFA50(_DWORD *this); char __thiscall sub_5AFA80(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, volatile LONG *a9); char __thiscall sub_5AFAF0(_DWORD *this); _DWORD *__thiscall sub_5AFB20(_DWORD *this); void __thiscall sub_5AFBB0(_DWORD *this); void __thiscall sub_5AFBE0(_DWORD *this); signed int __thiscall sub_5AFC10(_WORD *this, signed int a2, int a3); void __thiscall sub_5AFD80(_DWORD *this, int a2); LONG __thiscall sub_5AFDF0(_DWORD *this); _DWORD *__thiscall sub_5AFF20(_DWORD *this); int __cdecl sub_5B0020(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __cdecl sub_5B0180(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); volatile LONG *__cdecl sub_5B02F0(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_5B0430(int a1); char __thiscall sub_5B0560(volatile LONG **this, int a2); void __thiscall sub_5B14D0(_DWORD *this, int a2, unsigned __int8 a3); int __thiscall sub_5B1750(_DWORD *this); void __thiscall sub_5B1F60(_DWORD *this, int a2); void __thiscall sub_5B2070(_DWORD *this, int a2); int __thiscall sub_5B2180(_DWORD **this); void __thiscall sub_5B21E0(_DWORD *this); int __thiscall sub_5B35E0(_BYTE *this); int __thiscall sub_5B3610(_DWORD **this); int __thiscall sub_5B36C0(char *this); int __thiscall sub_5B3750(char *this); void __thiscall sub_5B37F0(_DWORD *this); void __thiscall sub_5B3810(_DWORD *this); int __thiscall sub_5B3840(char *this, int a2); void __thiscall sub_5B3890(int this, int a2, int a3); void *__thiscall sub_5B3990(void *this, char a2); void *__thiscall sub_5B39C0(void *this, char a2); void *__thiscall sub_5B3A00(void *this, char a2); void *__thiscall sub_5B3A40(void *this, char a2); int sub_5B3A80(); int __thiscall sub_5B3AA0(_DWORD *this); _DWORD *__thiscall sub_5B3B20(void *this, char a2); int __thiscall sub_5B3BB0(_DWORD *this); _DWORD *__thiscall sub_5B3C30(void *this, char a2); void *__thiscall sub_5B3CC0(void *this, char a2); _DWORD *__thiscall sub_5B3CF0(_DWORD *this, _DWORD *a2); int __thiscall sub_5B3DA0(_DWORD **this); int __thiscall sub_5B3EA0(_DWORD **this); int __thiscall sub_5B3F70(_DWORD **this, int a2, int a3, __int64 a4); unsigned int __thiscall sub_5B4310(_DWORD **this); char __thiscall sub_5B4450(volatile LONG **this, void *a2, int a3, int a4); signed int __thiscall sub_5B4750(_DWORD **this, int a2, int a3); signed int __thiscall sub_5B48F0(_DWORD **this, int a2, int a3); int __thiscall sub_5B4A90(_DWORD **this, int a2, int a3, unsigned int a4); int __thiscall sub_5B4AE0(_DWORD **this, int a2, int a3, unsigned int a4); int __cdecl sub_5B4B30(int a1, int a2, int a3); void *__thiscall sub_5B4C80(void *this, char a2); int __thiscall sub_5B4D30(_DWORD **this, int a2); char __thiscall sub_5B4E80(void *this, int a2); char __thiscall sub_5B5470(float *this); char __thiscall sub_5B54E0(float *this); char __thiscall sub_5B5550(float *this); char __thiscall sub_5B55A0(float *this); char __thiscall sub_5B55F0(float *this, int a2, int a3); void *__thiscall sub_5B5780(void *this, char a2); char __thiscall sub_5B58F0(void *this, int a2, int a3, int a4, int a5, int *a6, _DWORD *a7); char __thiscall sub_5B5AF0(volatile LONG *this, int a2, int a3); int __cdecl sub_5B5B20(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_5B5C70(int a1); char __thiscall sub_5B5DD0(void *this, int a2); void *__thiscall sub_5B6260(void *this, char a2); void *__thiscall sub_5B62A0(void *this, char a2); _DWORD *__thiscall sub_5B62E0(_DWORD *this); char __thiscall sub_5B6420(_DWORD **this, int a2, int a3); char __thiscall sub_5B64C0(_BYTE *this, char a2); int __thiscall sub_5B64D0(_DWORD ***this); void __thiscall sub_5B6550(float *this); void __thiscall sub_5B6590(int this); void __thiscall sub_5B65E0(_DWORD *this, float a2); char __thiscall sub_5B6710(int this, int a2); void __thiscall sub_5B78B0(void ***this, _BYTE *a2); void __thiscall sub_5B7A30(char *this, float a2); char __thiscall sub_5B8180(float *this); char __thiscall sub_5B8230(float *this); char __thiscall sub_5B8320(int this, int a2, int a3); int __thiscall sub_5B8380(_DWORD **this, int a2); char __thiscall sub_5B8410(void *this, int a2); void __thiscall sub_5B8430(char *this, float a2); int __thiscall sub_5B8450(_DWORD **this); volatile LONG *__cdecl sub_5B8850(int a1); void __thiscall sub_5B8980(float *this, float a2, float a3); void *__thiscall sub_5B8A10(void *this, char a2); void __thiscall sub_5B8A50(_DWORD *this, unsigned int a2, unsigned int a3); void __thiscall sub_5B8AD0(_DWORD *this, unsigned int a2, unsigned int a3); void __thiscall sub_5B8B50(_DWORD *this, unsigned int a2, unsigned int a3); bool __thiscall sub_5B8C20(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6); char __thiscall sub_5B8D30(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_5B8D70(_DWORD *this); char __stdcall sub_5B8DF0(int a1, int a2); char __stdcall sub_5B8E20(int a1, int a2); void __thiscall sub_5B8E50(_DWORD *this); char sub_5B8EC0(); char __thiscall sub_5B8EF0(void *this, int a2, int a3, int a4); _DWORD *__thiscall sub_5B8F10(_DWORD *this); void __thiscall sub_5B9150(_DWORD **this); void __thiscall sub_5B91B0(_DWORD **this); void __thiscall sub_5B9210(_DWORD **this); void __thiscall sub_5B9270(_DWORD **this); void __thiscall sub_5B92D0(_BYTE *this); char __thiscall sub_5B92E0(_DWORD *this); char __thiscall sub_5B9310(_DWORD *this); void __thiscall sub_5B9340(_DWORD *this, unsigned __int8 a2); unsigned int __thiscall sub_5B93D0(_DWORD **this, int a2); void __thiscall sub_5B9490(_DWORD **this, int a2); void __thiscall sub_5B95C0(_DWORD *this); void __thiscall sub_5B9610(_DWORD *this); char __thiscall sub_5B9660(_DWORD *this, _DWORD *a2, int a3); void __thiscall sub_5B9A00(char *this, int a2); char __thiscall sub_5B9C20(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_5B9C60(_DWORD **this, int a2); void __thiscall sub_5B9D10(int this, int a2, int *a3); int __cdecl sub_5B9F60(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_5BA0C0(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_5BA220(int a1); char __thiscall sub_5BA350(void *this, int a2); void *__thiscall sub_5BB300(void *this, char a2); _DWORD *__thiscall sub_5BB340(void *this, char a2); _DWORD *__thiscall sub_5BB3C0(void *this, char a2); // void __userpurge sub_5BB460(int a1@, int a2@, int a3@, int a4, int a5, int a6); char sub_5BB4D0(); char __thiscall sub_5BB4E0(void *this, int a2); int __cdecl sub_5BBE90(int a1); int __thiscall sub_5BBFD0(_DWORD *this); int __thiscall sub_5BBFF0(_DWORD *this); char sub_5BC0E0(); // void __userpurge sub_5BC110(_DWORD *a1@, int a2@, int a3@, int a4, int a5); char __thiscall sub_5BC210(volatile LONG **this, int a2); int __cdecl sub_5BCD00(int a1); void *__thiscall sub_5BCE40(void *this, char a2); bool __thiscall sub_5BCF10(_DWORD *this, int a2, int a3, _DWORD *a4); bool __thiscall sub_5BCFD0(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_5BD040(_DWORD *this, char a2); int __thiscall sub_5BD160(_DWORD *this, int a2); int __thiscall sub_5BD220(_DWORD **this, int a2); void __thiscall sub_5BD450(_DWORD **this, int a2, int a3); signed int __thiscall sub_5BD4A0(_WORD *this, char a2); int __thiscall sub_5BD4E0(_DWORD *this, signed int a2, int a3, char a4); char __thiscall sub_5BD5C0(_DWORD **this); char __thiscall sub_5BD620(_DWORD **this); char __thiscall sub_5BD6A0(_DWORD **this, char a2); int __thiscall sub_5BD6C0(_DWORD *this, int a2); char __thiscall sub_5BD750(_DWORD **this, int a2, int a3); // int __userpurge sub_5BD780@(_DWORD *a1@, signed int a2@, signed int a3@, char *a4, int a5, int *a6); char __thiscall sub_5BDB90(void *this, int a2); int __thiscall sub_5BE0F0(_DWORD *this, int a2); _DWORD *__thiscall sub_5BE180(_DWORD *this); LONG __thiscall sub_5BE3B0(_DWORD *this); // void __userpurge sub_5BE530(int a1@, int a2@, unsigned __int16 *a3); char __thiscall sub_5BE9F0(_DWORD *this, int a2); int __cdecl sub_5BEF10(int a1, int a2, int a3); volatile LONG *__cdecl sub_5BF1D0(int a1); char __thiscall sub_5BF300(void *this, int a2); char __thiscall sub_5C0510(_BYTE **this, float a2); int __cdecl sub_5C15D0(int a1); char __thiscall sub_5C1730(_BYTE *this, int a2); char __thiscall sub_5C1750(_BYTE **this, float a2); int __cdecl sub_5C17B0(int a1); void *__thiscall sub_5C1810(void *this, char a2); void *__thiscall sub_5C1840(void *this, char a2); void *__thiscall sub_5C1880(void *this, char a2); int __thiscall sub_5C18C0(_DWORD *this); void *__thiscall sub_5C1940(void *this, char a2); _WORD *sub_5C1980(); void __stdcall sub_5C19A0(void *a1); _DWORD *__thiscall sub_5C19C0(void *this, char a2); void *__thiscall sub_5C1A50(void *this, char a2); int __thiscall sub_5C1AD0(char *this); int __thiscall sub_5C1B00(char *this, int a2); char __thiscall sub_5C1B50(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_5C1BD0(_DWORD **this); char __thiscall sub_5C1CB0(_DWORD *this, int a2); char __thiscall sub_5C1D00(_DWORD *this); char __thiscall sub_5C1D30(volatile LONG **this, void *a2, int a3, int a4); int __cdecl sub_5C1E00(int a1, int a2, int a3); void *__thiscall sub_5C1F50(void *this, char a2); void __thiscall sub_5C2030(unsigned int *this, float a2); char __thiscall sub_5C2090(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_5C20E0(_DWORD *this); int __thiscall sub_5C2150(_DWORD **this); int __thiscall sub_5C2170(_DWORD **this); char __thiscall sub_5C21D0(volatile LONG *this); int __thiscall sub_5C21F0(_DWORD **this); int __thiscall sub_5C2330(_DWORD **this, __int64 a2); char __thiscall sub_5C2420(_DWORD **this); char __thiscall sub_5C2490(_BYTE *this); signed __int64 __thiscall sub_5C24D0(_DWORD **this, _BYTE *a2); char sub_5C26C0(); _DWORD *__thiscall sub_5C26F0(_DWORD *this); char __thiscall sub_5C2790(_DWORD *this, int a2); char __thiscall sub_5C2800(_DWORD *this); char __thiscall sub_5C2830(_DWORD *this); char __thiscall sub_5C2860(int this); char __thiscall sub_5C2910(_DWORD *this, int a2, int a3); void __thiscall sub_5C2AC0(_DWORD **this, float a2); char __thiscall sub_5C2BF0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_5C2C50(int this, int a2, int a3); int __cdecl sub_5C2D00(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_5C2E70(int a1); char __thiscall sub_5C2FA0(void *this, int a2); void *__thiscall sub_5C3D70(void *this, char a2); void *__thiscall sub_5C3DB0(void *this, char a2); int __thiscall sub_5C3E00(void *this); void __thiscall sub_5C3E10(_DWORD *this); int __thiscall sub_5C3E80(_DWORD **this, int a2); int __thiscall sub_5C3EE0(_DWORD **this, int a2); char __thiscall sub_5C3FA0(_DWORD *this); int __thiscall sub_5C3FE0(_BYTE *this); int __thiscall sub_5C4040(_DWORD *this, int a2); int __thiscall sub_5C4080(_DWORD *this); int __thiscall sub_5C40B0(int this, int a2); char *__thiscall sub_5C40E0(char *this); void __thiscall sub_5C4200(int this, int a2); int __thiscall sub_5C4300(int this, char a2); int __thiscall sub_5C4540(_DWORD *this, int a2); void __thiscall sub_5C4600(void *this, float a2); int __thiscall sub_5C4750(_DWORD *this, int a2, int a3); volatile LONG *__cdecl sub_5C4770(int a1); volatile LONG *__cdecl sub_5C48A0(int a1, void (__thiscall **a2)(void *)); char __thiscall sub_5C4A60(void *this, int a2); _DWORD *__thiscall sub_5C51C0(_DWORD **this); char __thiscall sub_5C52F0(volatile LONG **this, int a2, _DWORD *a3); void __thiscall sub_5C5560(int this, int a2, int a3); int __cdecl sub_5C55E0(int a1); _DWORD *__thiscall sub_5C5640(void *this, char a2); void *__thiscall sub_5C56E0(void *this, char a2); int __thiscall sub_5C5780(_DWORD *this, _BYTE *a2); void __thiscall sub_5C57E0(_BYTE *this); int __thiscall sub_5C57F0(_DWORD *this, int a2); int __thiscall sub_5C5800(_DWORD *this, int a2); int __thiscall sub_5C5820(_DWORD **this); void __thiscall sub_5C58D0(int this); void __thiscall sub_5C5A20(volatile LONG *this); char __thiscall sub_5C5B40(void *this, int a2); int __thiscall sub_5C5E70(int this, float a2); void __thiscall sub_5C5EE0(_DWORD *this, int a2, int a3); int __cdecl sub_5C5F40(int a1); int __cdecl sub_5C6080(int a1, int a2, int a3); char __thiscall sub_5C61E0(_DWORD *this, int a2, void *a3, int a4); void *__thiscall sub_5C64F0(void *this, char a2); _DWORD *__thiscall sub_5C6530(void *this, char a2); _DWORD *__thiscall sub_5C6620(_DWORD **this); __int16 __thiscall sub_5C6680(_DWORD **this, _WORD *a2); _WORD *__thiscall sub_5C66E0(_WORD *this, _WORD *a2); char __thiscall sub_5C6700(volatile LONG *this, unsigned int a2, int a3); int __thiscall sub_5C6750(_DWORD **this); int __thiscall sub_5C67C0(_DWORD *this, int a2, int a3); char __thiscall sub_5C6800(void *this, int a2); int __stdcall sub_5C6D65(int); // weak void __thiscall sub_5C6DA0(_DWORD *this, int a2, _BYTE *a3, int a4); int __thiscall sub_5C6F50(_DWORD *this, int a2); // int __userpurge sub_5C7061@(int a1@, int a2); char __thiscall sub_5C70C0(void *this, int a2); char __thiscall sub_5C7660(_DWORD *this, int a2); char __thiscall sub_5C7810(void ***this); int __cdecl sub_5C7980(int a1); int __cdecl sub_5C7AC0(int a1); // int __userpurge sub_5C7C00@(int a1@, signed int a2@, int a3, unsigned __int16 a4); // int __userpurge sub_5C7DD0@(int a1@, signed int a2@, int a3, unsigned __int16 a4); void *__thiscall sub_5C7F80(void *this, char a2); char __thiscall sub_5C7FF0(volatile LONG *this); float *__thiscall sub_5C8080(int this, float a2, float a3); float *__thiscall sub_5C8100(float *this); LONG __thiscall sub_5C81D0(float *this); LONG __thiscall sub_5C8330(float *this); char __thiscall sub_5C8450(volatile LONG *this, int a2, int a3); char __thiscall sub_5C84C0(void *this, void *a2); char __thiscall sub_5C89B0(void *this, __int16 a2, float a3, float a4); volatile LONG *__cdecl sub_5C8B80(int a1); void *__thiscall sub_5C8CB0(void *this, char a2); char __thiscall sub_5C8D00(_BYTE *this, char a2); char __thiscall sub_5C8D10(_DWORD *this); char __thiscall sub_5C8D70(_DWORD *this, int a2); char __thiscall sub_5C8DA0(_DWORD *this); LONG __thiscall sub_5C8DD0(_DWORD *this); char __thiscall sub_5C8E80(int this); char __thiscall sub_5C8FA0(_DWORD **this); int __thiscall sub_5C90A0(_DWORD *this, int a2); _DWORD *__thiscall sub_5C93F0(_DWORD *this); volatile LONG *__cdecl sub_5C94C0(int a1); char __thiscall sub_5C95F0(void *this, int a2); void __thiscall sub_5C9E30(_BYTE *this); int __thiscall sub_5C9F90(float *this, __int16 a2); int __thiscall sub_5CA070(_WORD *this, int a2); char __thiscall sub_5CA170(int this); // const CHAR *__userpurge sub_5CA230@(_DWORD *a1@, int a2@, int a3); char __thiscall sub_5CA400(_DWORD **this, int a2, int a3); void *__thiscall sub_5CA470(void *this, char a2); char __thiscall sub_5CA4B0(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_5CA4F0(volatile LONG **this, volatile LONG *a2); void __thiscall sub_5CA8C0(int *this, __int16 a2, unsigned __int8 a3); char __thiscall sub_5CAA50(void *this); LONG __thiscall sub_5CAB80(_DWORD *this); int __thiscall sub_5CACA0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_5CAD60(_DWORD *this); volatile LONG *__cdecl sub_5CAF30(int a1); int sub_5CB060(); int __cdecl sub_5CB080(int a1); bool __cdecl sub_5CB0D0(_DWORD *a1); float *__cdecl sub_5CB140(_DWORD *a1); void *__thiscall sub_5CB1F0(void *this, char a2); char sub_5CB2E0(); int __thiscall sub_5CB310(void *this, _BYTE *a2); int __thiscall sub_5CB390(float *this, float a2); char __thiscall sub_5CB430(_DWORD **this); char __thiscall sub_5CB4A0(_DWORD **this); char __thiscall sub_5CB570(volatile LONG **this, int a2); // void __userpurge sub_5CBE60(int a1@, int a2@, int a3@, int a4, int a5); int __thiscall sub_5CBF20(int this, int a2); int __cdecl sub_5CC020(int a1); void *__thiscall sub_5CC180(void *this, char a2); char __thiscall sub_5CC290(int this); int __thiscall sub_5CC2B0(_DWORD **this, float a2); signed int __thiscall sub_5CC390(_DWORD **this, int a2); int __stdcall sub_5CC4C0(int a1); signed int __stdcall sub_5CC5C0(signed int a1); char __thiscall sub_5CC630(_DWORD *this); void __thiscall sub_5CC660(_DWORD **this); int __thiscall sub_5CC6F0(_DWORD **this, int a2, int a3); int __thiscall sub_5CC780(_DWORD *this); int __thiscall sub_5CC7D0(_DWORD *this); char *__thiscall sub_5CC820(_DWORD *this); int __thiscall sub_5CC870(_DWORD *this); int __thiscall sub_5CC8F0(_DWORD *this); char __thiscall sub_5CC940(_DWORD *this, int a2); int __thiscall sub_5CD760(_DWORD *this); char __thiscall sub_5CD820(int this); int __thiscall sub_5CD870(_DWORD *this, int a2); char __thiscall sub_5CD8D0(int this, int a2); int __thiscall sub_5CDAB0(int this); char __thiscall sub_5CDB50(int this, int a2, int a3); char __thiscall sub_5CDC30(_BYTE *this); char __thiscall sub_5CDD00(void *this); int __cdecl sub_5CDD50(int a1); char *__cdecl sub_5CDEC0(char a1); void *__thiscall sub_5CDF20(void *this, char a2); int __thiscall sub_5CDFB0(_BYTE *this); int __thiscall sub_5CE0E0(_DWORD *this, unsigned int a2); int __thiscall sub_5CE1A0(_DWORD **this, unsigned int a2); int __thiscall sub_5CE210(_DWORD **this, unsigned int a2); int __thiscall sub_5CE280(_DWORD **this, unsigned int a2); char __thiscall sub_5CE2F0(_BYTE *this); void __thiscall sub_5CE370(_DWORD **this); int __thiscall sub_5CE470(_DWORD **this); char __thiscall sub_5CE590(_DWORD *this, int a2); char __thiscall sub_5CEAA0(int this, int a2, int a3); int __cdecl sub_5CEB20(int a1); void *__thiscall sub_5CEC70(void *this, char a2); char __thiscall sub_5CED50(int this); char __thiscall sub_5CED80(void **this); int __thiscall sub_5CEDA0(_DWORD *this); int __thiscall sub_5CEDD0(_DWORD *this); int __thiscall sub_5CEE00(_DWORD *this); int __thiscall sub_5CEE30(_DWORD *this); int __thiscall sub_5CEE60(_DWORD *this); int __thiscall sub_5CEE90(_DWORD *this); int __thiscall sub_5CEEC0(_DWORD *this); int __thiscall sub_5CEEF0(_DWORD *this); int __thiscall sub_5CEF20(_DWORD *this); // int __usercall sub_5CEF50@(int a1@, int a2@); int __thiscall sub_5CEFA0(_DWORD *this); int __thiscall sub_5CEFD0(_DWORD *this); int __thiscall sub_5CF000(_DWORD *this); int __thiscall sub_5CF030(_DWORD *this); int __thiscall sub_5CF060(_DWORD *this); int __thiscall sub_5CF090(_DWORD *this); int __thiscall sub_5CF0C0(_DWORD *this); int __thiscall sub_5CF0F0(_DWORD *this); char __thiscall sub_5CF120(_DWORD *this); int __thiscall sub_5CF160(_DWORD *this); void __thiscall sub_5CF190(_DWORD *this); int __thiscall sub_5CF1D0(_DWORD *this); void __thiscall sub_5CF230(_DWORD **this); int __thiscall sub_5CF550(_DWORD *this, _BYTE *a2); char __thiscall sub_5CF6E0(_DWORD *this, int a2); // void __userpurge sub_5D0AF0(int a1@, int a2@, int a3, int a4); char __thiscall sub_5D0C40(int this); int __cdecl sub_5D0D10(int a1); void *__thiscall sub_5D0E70(void *this, char a2); int __thiscall sub_5D0EB0(_DWORD *this, int a2, int a3); int __thiscall sub_5D0F00(_DWORD *this, int a2); int __thiscall sub_5D0F80(_DWORD **this); int __thiscall sub_5D0FB0(_WORD *this, int a2); int __thiscall sub_5D1050(_DWORD *this, char a2); _DWORD *__thiscall sub_5D10B0(_DWORD *this); LONG __thiscall sub_5D1180(_DWORD *this); // char __userpurge sub_5D1280@(_DWORD *a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, _DWORD *a8, char a9); void __thiscall sub_5D15E0(int this); void __thiscall sub_5D1710(_BYTE *this, int a2, _DWORD *a3, int a4); volatile LONG *__cdecl sub_5D1B00(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_5D1C50(int a1, int a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6, int a7, int a8); void *__thiscall sub_5D1D30(void *this, char a2); bool __thiscall sub_5D1DF0(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_5D1E20(_WORD *this, int a2); int __cdecl sub_5D1ED0(int a1, int a2, int a3); void *__thiscall sub_5D2030(void *this, char a2); char __thiscall sub_5D20B0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6); int __thiscall sub_5D2120(_DWORD *this); char __thiscall sub_5D2130(_DWORD **this, int a2); int __cdecl sub_5D2380(int a1, int a2, int a3, int a4, int a5); void *__thiscall sub_5D25D0(void *this, char a2); int __thiscall sub_5D2610(_DWORD *this); void __thiscall sub_5D2630(_DWORD *this); __int16 __thiscall sub_5D2680(int this); _DWORD *__thiscall sub_5D26A0(_DWORD *this); LONG __thiscall sub_5D2750(void **this); void __thiscall sub_5D2810(int *this, int a2, int a3, char a4); _DWORD *__thiscall sub_5D2940(_DWORD *this); LONG __thiscall sub_5D29F0(int *this, int a2); LONG __thiscall sub_5D2A80(int *this, int a2); // LONG __userpurge sub_5D2B10@(int a1@, int a2@, int a3); LONG __thiscall sub_5D2BA0(int *this, int a2); // void __userpurge sub_5D2C60(int *a1@, int a2@, int a3); char __thiscall sub_5D2D10(_DWORD *this, int a2, int a3, int a4); _DWORD *__cdecl sub_5D2DD0(int a1, int a2, int a3); void *__thiscall sub_5D2F20(void *this, char a2); int __thiscall sub_5D2F70(_DWORD *this, int a2, int a3, int a4, int a5); void **sub_5D2FC0(); void __thiscall sub_5D2FD0(_BYTE *this, char a2); void __thiscall sub_5D3000(_BYTE *this, char a2); int __thiscall sub_5D3050(_DWORD *this, _BYTE *a2); int __thiscall sub_5D30F0(_DWORD *this); int __thiscall sub_5D3110(_DWORD *this, char a2); char __thiscall sub_5D3150(_DWORD *this); char __thiscall sub_5D3170(int this, char a2); void __thiscall sub_5D31A0(int this, float a2); __int16 __thiscall sub_5D3290(_DWORD *this, __int16 a2); __int16 __thiscall sub_5D32D0(_DWORD *this, __int16 a2); bool __thiscall sub_5D3310(_DWORD *this); void __thiscall sub_5D3330(int *this, __int16 a2); int __thiscall sub_5D3340(_DWORD *this); _DWORD *__thiscall sub_5D3360(_DWORD *this); _DWORD **__thiscall sub_5D3380(_BYTE *this, _BYTE *a2, unsigned int a3); // _DWORD __thiscall Concurrency::details::_ReaderWriterLock::_ReaderWriterLock(Concurrency::details::_ReaderWriterLock *__hidden this); idb char __thiscall sub_5D3470(_WORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6, unsigned __int8 a7); _DWORD *__thiscall sub_5D35C0(_DWORD *this); void __thiscall sub_5D3710(_DWORD *this, int a2, unsigned int a3, unsigned int a4, int a5); void __thiscall sub_5D37A0(_DWORD *this, float a2, float a3, float a4); _WORD *__cdecl sub_5D3850(__int16 a1, float a2, float a3, float a4); _DWORD *__cdecl sub_5D3900(__int16 a1, float a2, float a3, float a4); LONG __thiscall sub_5D3980(_DWORD *this, _DWORD *a2); LONG __thiscall sub_5D3C10(void **this, _DWORD *a2); LONG __thiscall sub_5D3FC0(_DWORD *this); char __thiscall sub_5D4380(_DWORD *this, unsigned int a2, volatile LONG *a3); void __thiscall sub_5D4810(_DWORD *this, void *a2, unsigned int a3, unsigned int a4, unsigned int a5); LONG __thiscall sub_5D4A30(_DWORD *this, char a2); LONG __thiscall sub_5D4B50(_DWORD *this, float a2, float a3, float a4); char __thiscall sub_5D4C60(_DWORD *this, unsigned int a2, unsigned int a3, int a4); volatile LONG *__cdecl sub_5D5260(int a1, int a2, int a3, int a4, int a5); void *sub_5D53B0(); void *__thiscall sub_5D53F0(void *this, char a2); int __thiscall sub_5D5420(_DWORD *this, int a2); int __thiscall sub_5D5450(_DWORD *this, _BYTE *a2); int __thiscall sub_5D5470(_DWORD *this); char *__cdecl sub_5D5480(int a1); void __thiscall sub_5D5500(_DWORD *this, int a2); char __stdcall sub_5D5580(__int16 a1); signed __int16 __thiscall sub_5D5600(_DWORD *this); int __thiscall sub_5D5620(_DWORD *this); LONG __thiscall sub_5D5650(_DWORD *this); char __thiscall sub_5D5860(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_5D58F0(int this, _BYTE *a2, unsigned int a3, unsigned int a4, int a5); int __thiscall sub_5D5A10(_DWORD *this, float a2, float a3, float a4, float a5); int __thiscall sub_5D5AB0(_DWORD *this, float a2, float a3, float a4, float a5); void __thiscall sub_5D5B30(int this); int __thiscall sub_5D5B50(void *this); int *__thiscall sub_5D5B70(_WORD *this, int a2, char a3); // int __userpurge sub_5D5EA0@(int a1@, int a2@, int a3); int __thiscall sub_5D60B0(_DWORD *this, int a2); // int *__userpurge sub_5D6220@(int a1@, int a2@, int a3@, int a4); LONG __thiscall sub_5D64C0(_DWORD *this, unsigned int a2, volatile LONG *a3); int __thiscall sub_5D6780(void **this); void **__thiscall sub_5D6D00(void **this); volatile LONG *__cdecl sub_5D6E20(int a1, int a2, int a3); _DWORD *__thiscall sub_5D6F60(_DWORD *this, _DWORD *a2); __int16 __thiscall sub_5D6F80(_WORD *this); int __thiscall sub_5D7060(unsigned __int16 *this, int a2); int __thiscall sub_5D7080(_DWORD *this, char a2); int __thiscall sub_5D7110(_DWORD *this, float a2, float a3, float a4, float a5); int __thiscall sub_5D71B0(_DWORD *this, float a2, float a3, float a4, float a5); int __thiscall sub_5D7230(_DWORD *this, char a2); LONG __thiscall sub_5D74F0(_DWORD *this); char __thiscall sub_5D75E0(_DWORD *this, int a2, int a3, _DWORD *a4); void __thiscall sub_5D77C0(int this, int a2); void sub_5D79E0(); _DWORD *__thiscall sub_5D7A30(_DWORD *this); char __thiscall sub_5D80B0(_DWORD **this); int __thiscall sub_5D8230(_DWORD **this); void __thiscall sub_5D8320(_WORD *this, int a2); volatile LONG *__cdecl sub_5D84B0(int a1, int a2, int a3); void *__thiscall sub_5D8600(void *this, char a2); _DWORD *__thiscall sub_5D8630(void *this, char a2); void *__thiscall sub_5D86C0(void *this, char a2); int __thiscall sub_5D8720(_DWORD **this, int a2, int a3, int a4); char __thiscall sub_5D87F0(void *this); char __thiscall sub_5D8C00(volatile LONG *this); LONG __thiscall sub_5D8C90(_DWORD *this); char *__thiscall sub_5D8E20(int this, char a2, int a3, int a4, int a5, char *a6, int a7); char __thiscall sub_5D8ED0(int this, int a2, int a3); int sub_5D8F90(); int __cdecl sub_5D9130(int a1); void *__thiscall sub_5D9170(void *this, char a2); int __thiscall sub_5D9230(_DWORD *this); LONG __thiscall sub_5D92A0(_DWORD *this); char __thiscall sub_5D9350(void *this, int a2); volatile LONG *__thiscall sub_5D9D20(_DWORD *this); void __thiscall sub_5D9EE0(int this, int a2, int a3); char __thiscall sub_5D9F60(_DWORD *this, int a2, int a3); char __thiscall sub_5DA010(volatile LONG *this, int a2); int __cdecl sub_5DA070(int a1); void *__thiscall sub_5DA1C0(void *this, char a2); char sub_5DA290(); char __thiscall sub_5DA2C0(_DWORD **this, int a2, int a3); char __thiscall sub_5DA350(volatile LONG **this, int a2); int __cdecl sub_5DAC00(int a1); void *__thiscall sub_5DAD40(void *this, char a2); _DWORD *__thiscall sub_5DADF0(_DWORD *this); LONG __thiscall sub_5DAE90(_DWORD *this); int __thiscall sub_5DAF40(_DWORD **this); char __thiscall sub_5DAF90(_DWORD **this); int __thiscall sub_5DB000(_DWORD); // weak int __thiscall sub_5DB010(_DWORD **this); char __thiscall sub_5DB0D0(void *this, int a2); volatile LONG *__cdecl sub_5DB6E0(int a1); volatile LONG *sub_5DB810(); volatile LONG *__thiscall sub_5DB870(_DWORD *this); char __thiscall sub_5DB8E0(_DWORD *this, int a2, int a3); void *__thiscall sub_5DB970(void *this, char a2); char sub_5DB9A0(); char __thiscall sub_5DB9C0(void **this, int a2, int a3, int a4, _WORD *a5); int sub_5DBBE0(); void *__thiscall sub_5DBC60(void *this, char a2); int __thiscall sub_5DBCC0(_DWORD **this); char __thiscall sub_5DBD20(void *this); void __thiscall sub_5DC180(int this); LONG __thiscall sub_5DC2A0(_DWORD *this); char *__thiscall sub_5DC430(int this, char a2, int a3, int a4, int a5, char *a6, int a7); void __thiscall sub_5DC4E0(volatile LONG *this, int a2, int a3); int sub_5DC530(); int __cdecl sub_5DC6C0(int a1); void *__thiscall sub_5DC700(void *this, char a2); int __thiscall sub_5DC780(_DWORD **this); int __thiscall sub_5DC7A0(_DWORD **this); void __thiscall sub_5DC800(_DWORD *this); char __thiscall sub_5DC860(_DWORD *this, int a2, int a3, int a4, _WORD *a5); char __thiscall sub_5DC8B0(void *this, int a2); int __cdecl sub_5DCE40(int a1); char __thiscall sub_5DCFB0(int this, int a2, int a3); void *__thiscall sub_5DD090(void *this, char a2); void *__thiscall sub_5DD0D0(void *this, char a2); int sub_5DD110(); _DWORD *__thiscall sub_5DD1A0(void *this, char a2); _DWORD *__thiscall sub_5DD200(_DWORD **this); char __thiscall sub_5DD210(_BYTE *this); char __thiscall sub_5DD240(_BYTE *this); void __thiscall sub_5DD260(_BYTE *this); char __thiscall sub_5DD270(_DWORD *this); char sub_5DD2F0(); char __thiscall sub_5DD320(_DWORD *this); int __thiscall sub_5DD390(_DWORD **this, int a2, int a3, int a4); char __thiscall sub_5DD440(_DWORD **this); char __thiscall sub_5DD460(_DWORD *this); void __thiscall sub_5DD4F0(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_5DD5C0(_DWORD ***this, int a2, int a3, int a4, unsigned __int16 *a5); _DWORD *__thiscall sub_5DD750(_DWORD *this); char __thiscall sub_5DD880(void *this, int a2); char __thiscall sub_5DDE40(_DWORD **this); char __thiscall sub_5DDE80(char *this); volatile LONG *__thiscall sub_5DDF40(_BYTE *this); char __thiscall sub_5DDFD0(char *this, int a2, int a3); volatile LONG *__cdecl sub_5DE080(int a1); void __thiscall sub_5DE1B0(_BYTE *this, int a2, _DWORD *a3, int a4); char *__cdecl sub_5DE220(int a1, char *a2); _DWORD *__thiscall sub_5DE2A0(void *this, char a2); void *__thiscall sub_5DE340(void *this, char a2); int sub_5DE380(); void __thiscall sub_5DE410(_DWORD **this, int a2); int __thiscall sub_5DE450(_DWORD **this); char __thiscall sub_5DE530(volatile LONG **this, int a2); int __cdecl sub_5DE760(int a1); _DWORD *__thiscall sub_5DE8A0(void *this, char a2); void __thiscall sub_5DE940(_DWORD **this, float a2, int a3, int a4); char __thiscall sub_5DEAE0(volatile LONG **this, int a2); int __cdecl sub_5DED60(int a1); _DWORD *__thiscall sub_5DEEC0(void *this, char a2); int __thiscall sub_5DEF50(_DWORD *this, int a2); int __thiscall sub_5DEF90(_DWORD *this, int a2); int sub_5DF020(); char sub_5DF030(); int __thiscall sub_5DF060(_DWORD *this, int a2); void __thiscall sub_5DF0E0(_DWORD *this); void __thiscall sub_5DF1B0(_DWORD *this); char __thiscall sub_5DF250(_DWORD **this); int __thiscall sub_5DF440(_DWORD *this); char *__cdecl sub_5DF490(unsigned int a1, int a2); const CHAR *__cdecl sub_5DF5C0(int *a1); const CHAR *__cdecl sub_5DF610(char a1); void __thiscall sub_5DF900(_DWORD *this, int a2); void __thiscall sub_5DFA40(float *this, float a2); char __stdcall sub_5DFB80(int TestChar); signed int __thiscall sub_5DFC20(_DWORD **this); int __thiscall sub_5DFEC0(_DWORD **this); void __thiscall sub_5E00E0(int this); char __thiscall sub_5E01C0(_DWORD *this); float *__thiscall sub_5E0250(float *this); LONG __thiscall sub_5E02C0(_DWORD *this); volatile LONG *__cdecl sub_5E0370(int a1); void __thiscall sub_5E04A0(_DWORD **this); void __thiscall sub_5E0640(_DWORD *this, int a2, int a3); void __thiscall sub_5E0760(_DWORD *this, int a2, int a3); char __thiscall sub_5E07A0(_DWORD *this, int a2); char *__thiscall sub_5E2180(int this, int a2); void *__thiscall sub_5E21E0(void *this, char a2); int __thiscall sub_5E2240(_DWORD *this); int __thiscall sub_5E2270(_DWORD *this); int __thiscall sub_5E22A0(_DWORD *this); int __thiscall sub_5E22D0(_DWORD *this); int __thiscall sub_5E2300(_DWORD *this); int __thiscall sub_5E2390(_DWORD **this, int a2); int __thiscall sub_5E23C0(_DWORD **this); char sub_5E2410(); char sub_5E2440(); char __thiscall sub_5E2460(_BYTE *this); LONG __thiscall sub_5E24E0(_DWORD *this, char a2); int __thiscall sub_5E2510(_DWORD *this, _DWORD *a2); char __thiscall sub_5E2540(int this, _DWORD *a2, char a3, char a4); int __thiscall sub_5E2580(void *this, _BYTE *a2); char __thiscall sub_5E2600(_DWORD **this, int a2); int __thiscall sub_5E2660(void *this, int a2); char __thiscall sub_5E2680(void *this, int a2); int __thiscall sub_5E2950(_DWORD **this); int __thiscall sub_5E29A0(_DWORD **this, int a2); void __thiscall sub_5E2A00(_DWORD **this); char __thiscall sub_5E2A70(_DWORD *this); int __thiscall sub_5E2A80(_DWORD *this); void __thiscall sub_5E2B00(_DWORD *this, int a2, _DWORD *a3, int a4); int __thiscall sub_5E2B80(_DWORD *this); char __thiscall sub_5E2C40(_DWORD *this, int a2, int a3, int a4, int a5); char __thiscall sub_5E2DD0(_WORD *this); char __thiscall sub_5E2E10(_DWORD **this); int __thiscall sub_5E2E50(_DWORD *this); int __thiscall sub_5E2E90(_DWORD *this); int __thiscall sub_5E2ED0(_DWORD *this); const CHAR *__stdcall sub_5E2F10(int a1); void __thiscall sub_5E2FF0(_DWORD *this, unsigned __int8 *a2); void __thiscall sub_5E31D0(_DWORD *this, int a2, _DWORD *a3, int a4); void __thiscall sub_5E3280(int this, int a2); void __thiscall sub_5E3720(_DWORD *this); void __thiscall sub_5E38C0(int this, char a2); void __thiscall sub_5E39F0(int this, _WORD *a2, __int16 a3); void __thiscall sub_5E3AE0(_BYTE *this); void __thiscall sub_5E3AF0(_DWORD *this); void __thiscall sub_5E3C00(_DWORD *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_5E3CA0(_DWORD **this, int a2, int a3, int a4, int a5); volatile LONG *sub_5E3E10(); void __thiscall sub_5E3E70(unsigned __int8 *this); void __thiscall sub_5E4780(unsigned __int8 *this, int *a2); LONG __thiscall sub_5E4850(_DWORD *this); void __thiscall sub_5E4A40(unsigned __int8 *this, int a2, int *a3, int a4); void __thiscall sub_5E4DB0(_DWORD *this); void __thiscall sub_5E4F20(_DWORD *this); void __thiscall sub_5E4FE0(_DWORD *this); char *__thiscall sub_5E50A0(char *this); volatile LONG *__cdecl sub_5E5250(int a1); void __thiscall sub_5E5380(_DWORD **this, int a2, int a3); void __thiscall sub_5E5520(_DWORD *this); HGLOBAL __cdecl sub_5E82C0(HMODULE hModule, HRSRC hResInfo, int a3); HMODULE __cdecl sub_5E8330(int a1, WORD wLanguage); void __noreturn sub_5E83B0(); int __thiscall sub_5E8440(int *this, int a2); int __thiscall sub_5E8500(int *this, int a2); const CHAR *__cdecl sub_5E8560(char a1); int __thiscall sub_5E85F0(int *this, void *Src, rsize_t MaxCount); int __thiscall sub_5E8690(int *this, HMODULE hModule, LPCWSTR lpWideCharStr); void *__thiscall sub_5E8750(void *this, char a2); void *__thiscall sub_5E8790(void *this, char a2); void *__thiscall sub_5E87D0(void *this, char a2); void *__thiscall sub_5E8810(void *this, char a2); _DWORD *__thiscall sub_5E8850(_DWORD *this, char *a2); int sub_5E88C0(); int sub_5E8950(); int sub_5E89E0(); int sub_5E8A70(); int *__thiscall sub_5E8B00(int *this, void *Src); int __thiscall sub_5E8BB0(__time64_t *Time, int, char *); // idb void *__thiscall sub_5E8C50(void *this, char a2); char __thiscall sub_5E8CE0(volatile LONG **this, int a2, int a3); int __cdecl sub_5E8EB0(int a1, int a2); void *__thiscall sub_5E8FF0(void *this, char a2); void __thiscall sub_5E9030(float **this, int a2, char a3, int a4, int a5, int a6, char a7, float a8); void __thiscall sub_5E90F0(float **this, int a2, int a3, char a4, int a5, int a6, int a7, float a8); void __thiscall sub_5E9180(float **this); char __thiscall sub_5E92C0(volatile LONG **this, int a2); int __cdecl sub_5E9570(int a1); _DWORD *__thiscall sub_5E96D0(void *this, char a2); BOOL __cdecl sub_5E9760(int a1, int a2); BOOL __cdecl sub_5E9780(int a1, int a2); BOOL __cdecl sub_5E97A0(int a1, int a2); BOOL __cdecl sub_5E97C0(int a1, int a2); BOOL __cdecl sub_5E97E0(int a1, int a2); BOOL __cdecl sub_5E9800(int a1, int a2); BOOL __cdecl sub_5E9820(int a1, int a2); BOOL __cdecl sub_5E9840(int a1, int a2); BOOL __cdecl sub_5E9860(int a1, int a2); BOOL __cdecl sub_5E9880(int a1, int a2); char __thiscall sub_5E98C0(_DWORD **this, int a2); char __thiscall sub_5E98F0(_BYTE *this, char a2); char sub_5E9900(); int __thiscall sub_5E99B0(_DWORD **this); char __thiscall sub_5E9A40(int this, char a2); // void __userpurge sub_5E9A90(_DWORD **a1@, int a2@, int a3, int a4); int __thiscall sub_5E9CD0(_DWORD *this); char __thiscall sub_5E9D20(_DWORD *this, int a2, int a3); // void __userpurge sub_5E9D80(_DWORD **a1@, int a2@, int a3); char __thiscall sub_5EA090(void *this, int a2); int __cdecl sub_5EAA60(int a1); void __thiscall sub_5EABC0(_DWORD *this, int *a2); void __thiscall sub_5EB220(_DWORD **this); _DWORD *__thiscall sub_5EB530(_DWORD *this); LONG __thiscall sub_5EB610(_DWORD *this); volatile LONG *__cdecl sub_5EB710(int a1); int __thiscall sub_5EB840(_DWORD *this); char __thiscall sub_5EB8B0(volatile LONG **this, int a2); void __thiscall sub_5ECAC0(_DWORD *this, int a2, int a3); char __thiscall sub_5ECDA0(_DWORD *this, int *a2, int a3); void *__thiscall sub_5ED000(void *this, char a2); void *__stdcall sub_5ED040(char *a1); _DWORD *__thiscall sub_5ED0B0(_DWORD *this, int a2); void ***sub_5ED0F0(); void *__thiscall sub_5ED100(void *this, char a2); char *__thiscall sub_5ED130(_DWORD *this, char *a2); bool __cdecl sub_5ED190(int a1, int a2); _DWORD *__thiscall sub_5ED1C0(_DWORD *this, int a2); int __cdecl sub_5ED210(const void **a1, const void **a2, int a3); void __cdecl sub_5ED280(int a1, int a2); int __cdecl sub_5ED2C0(int a1, int a2); void __cdecl sub_5ED350(int a1, int a2); int __cdecl sub_5ED470(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9); int __cdecl sub_5ED5C0(const void **a1, const void **a2, int a3); int __cdecl sub_5ED630(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); int __cdecl sub_5ED720(int a1, int a2, int a3); int __cdecl sub_5ED7B0(const void **a1, const void **a2, int a3); void __cdecl sub_5ED890(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8); int __cdecl sub_5ED970(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); int __cdecl sub_5EDB10(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); int __cdecl sub_5EDC30(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9); int __cdecl sub_5EDD20(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); _DWORD __cdecl sub_5EDDA0(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void __cdecl sub_5EDF70(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_5EE0E0(int a1, int a2, char a3, int a4, int a5, int a6, int a7); void __cdecl sub_5EE300(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __cdecl sub_5EE510(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); void __cdecl sub_5EE630(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)); void __cdecl sub_5EE810(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_5EE930(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); unsigned int *__cdecl sub_5EEA00(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8); void __cdecl sub_5EECA0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_5EED60(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int *__cdecl sub_5EEE00(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __thiscall sub_5EEFC0(int *this); unsigned int __thiscall sub_5EF010(int *this, char *a2); int __cdecl sub_5EF130(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); int __cdecl sub_5EF270(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); unsigned int __thiscall sub_5EF2D0(int *this, int a2); _DWORD __cdecl sub_5EF350(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void *__thiscall sub_5EF3F0(void *this, char a2); int __thiscall sub_5EF420(int *this, unsigned int a2); void __cdecl sub_5EF4B0(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8); void __cdecl sub_5EF720(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); _DWORD __cdecl sub_5EF870(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak _DWORD *__thiscall sub_5EF920(_DWORD *this); int __thiscall sub_5EF9F0(_DWORD **this); char __thiscall sub_5EFA60(_BYTE *this, char a2); void __thiscall sub_5EFA70(int this, float a2); char __thiscall sub_5EFC50(_BYTE *this); _DWORD *__thiscall sub_5EFCD0(_BYTE *this, int a2, char a3); int __thiscall sub_5F0010(_DWORD **this); char __thiscall sub_5F0170(void *this, int a2); char __thiscall sub_5F06B0(_BYTE *this, int a2, int a3); volatile LONG *__cdecl sub_5F06D0(int a1); void *__thiscall sub_5F0800(void *this, char a2); int __thiscall sub_5F08C0(_DWORD *this, int a2); unsigned int __thiscall sub_5F0900(_DWORD *this); int __thiscall sub_5F0A00(_DWORD *this, int a2); char __thiscall sub_5F0A40(_DWORD **this, int a2); unsigned int __thiscall sub_5F0AA0(_DWORD *this); char __thiscall sub_5F0BA0(_DWORD *this, int a2); unsigned int __thiscall sub_5F0C50(_DWORD *this, int a2); char __thiscall sub_5F0E10(void *this, int a2); char __thiscall sub_5F1050(void *this, int a2); char __thiscall sub_5F1A10(_DWORD *this, int a2, int a3); int __cdecl sub_5F1B00(int a1); int __cdecl sub_5F1C70(int a1); void *__thiscall sub_5F1DB0(void *this, char a2); void *__thiscall sub_5F1DF0(void *this, char a2); int __cdecl sub_5F1E30(int a1, int a2); BOOL __cdecl sub_5F1EB0(int a1, int a2); BOOL __cdecl sub_5F1ED0(int a1, int a2); char sub_5F1F60(); void __stdcall sub_5F1F80(int a1, _DWORD *a2, int a3); char __thiscall sub_5F2030(_DWORD **this, int a2); char sub_5F2060(); int __thiscall sub_5F2090(_DWORD *this); int __thiscall sub_5F20E0(_DWORD **this); int __thiscall sub_5F2150(char *this); int *__thiscall sub_5F2500(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_5F2590(int this); char __thiscall sub_5F2670(char *this, int a2, int a3); int __cdecl sub_5F2720(int a1); void __thiscall sub_5F2860(char *this, _DWORD *a2); int __thiscall sub_5F3BF0(_DWORD *this, char a2); _DWORD *__thiscall sub_5F3F60(_DWORD *this); LONG __thiscall sub_5F3FF0(_DWORD *this); int __thiscall sub_5F40F0(_DWORD *this); volatile LONG *__cdecl sub_5F4190(int a1); char __thiscall sub_5F42C0(void *this, int a2); int __thiscall sub_5F49B0(_DWORD **this); int __thiscall sub_5F4B20(_DWORD *this, int a2, int a3); void __thiscall sub_5F4B60(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_5F4D60(int this); char __thiscall sub_5F4E40(int this, int a2, int a3); char __thiscall sub_5F5080(volatile LONG **this, int a2); void *__thiscall sub_5F6140(void *this, char a2); void ***sub_5F6180(); void *__thiscall sub_5F6190(void *this, char a2); int __thiscall sub_5F61C0(int (__cdecl **this)(_DWORD, _DWORD), int a2, int a3); char *__thiscall sub_5F61E0(_DWORD *this, char *a2); bool __cdecl sub_5F6290(int a1, int a2); _DWORD *__thiscall sub_5F62C0(_DWORD *this, int a2); int __thiscall sub_5F6310(int this, int a2); void __cdecl sub_5F63B0(int a1, int a2); void __cdecl sub_5F6400(_DWORD *a1, _DWORD *a2); int __cdecl sub_5F6460(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); void __cdecl sub_5F6530(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8); int __cdecl sub_5F6610(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)); _DWORD __cdecl sub_5F6710(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak void __cdecl sub_5F68E0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); void __cdecl sub_5F6A70(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __cdecl sub_5F6C80(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); void __cdecl sub_5F6DC0(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)); void __cdecl sub_5F6FC0(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); unsigned int *__cdecl sub_5F70C0(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8); void __cdecl sub_5F7360(int a1, int a2, char a3, int a4, int a5, int a6, char *a7); unsigned int *__cdecl sub_5F7420(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)); void __thiscall sub_5F75E0(void **this); int __cdecl sub_5F7630(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); void *__thiscall sub_5F7690(void *this, char a2); void __cdecl sub_5F76C0(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8); void __cdecl sub_5F7920(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)); _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // weak _DWORD *__thiscall sub_5F7B10(_DWORD *this); char __thiscall sub_5F7C40(_DWORD *this, int a2, int a3); int __thiscall sub_5F7C70(char *this); char __thiscall sub_5F7CE0(void *this, int a2); char __thiscall sub_5F87A0(_DWORD *this, _BYTE *a2); // char __userpurge sub_5F8A60@(int a1@, int *a2@, int a3); int __thiscall sub_5F9390(_DWORD **this, int a2); volatile LONG *__cdecl sub_5F96A0(int a1); void *__thiscall sub_5F97D0(void *this, char a2); char __thiscall sub_5F98A0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_5F98E0(_DWORD *this); int __thiscall nullsub_16(_DWORD); // weak void __thiscall sub_5F9940(_DWORD *this); int *__thiscall sub_5F99A0(_DWORD *this, int *a2); char __stdcall sub_5F99C0(int a1, int a2); char __thiscall sub_5F99F0(_DWORD **this, int a2); char sub_5F9B10(); _DWORD *__thiscall sub_5F9B40(_DWORD *this); char sub_5F9D40(); char __thiscall sub_5F9D60(_DWORD *this); char __thiscall sub_5F9D90(_DWORD *this); unsigned int __thiscall sub_5F9DC0(_DWORD **this, int a2); void __thiscall sub_5F9E50(_DWORD **this, int a2); char __thiscall sub_5F9F60(char *this, _DWORD *a2, __int16 a3); void __thiscall sub_5FA160(_DWORD *this); int __thiscall sub_5FA1B0(_DWORD **this, int a2, int a3); char __thiscall sub_5FA200(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_5FA240(int this, int a2); void __thiscall sub_5FA2E0(int this, int a2, int *a3); int __cdecl sub_5FA430(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_5FA590(int a1); char __thiscall sub_5FA6C0(void *this, int a2); void *__thiscall sub_5FB220(void *this, char a2); _DWORD *__thiscall sub_5FB260(void *this, char a2); int __thiscall sub_5FB3C0(_DWORD *this, int a2, char *a3, size_t a4); int __thiscall sub_5FB4F0(_DWORD *this, int a2); LONG __thiscall sub_5FB5E0(void **this); void __thiscall sub_5FB680(HDC **this, int a2, char *lpString); LONG __thiscall sub_5FB6D0(volatile LONG **this); _DWORD *__thiscall sub_5FB840(_DWORD *this); char __thiscall sub_5FB950(volatile LONG **this, int a2, int a3, int a4, int a5, _DWORD *a6); int __thiscall sub_5FBAD0(HDC *this, LPCSTR lpString, int a3); void *__thiscall sub_5FBC40(void *this, char a2); signed int __thiscall sub_5FBC70(_DWORD *this); void __thiscall sub_5FBD70(_DWORD *this); char __thiscall sub_5FBDB0(_DWORD *this); char __thiscall sub_5FBDE0(_DWORD *this); int __thiscall sub_5FBE20(_DWORD *this, int a2); char __thiscall sub_5FBE30(_BYTE *this, char a2); char __stdcall sub_5FBE40(char *a1, int a2, int a3); int __thiscall sub_5FBFA0(_DWORD *this, int a2); void __thiscall sub_5FBFD0(_DWORD *this, signed int a2); double __thiscall sub_5FC120(_DWORD *this, int a2); unsigned int __thiscall sub_5FC190(const char **this, char *a2); int __stdcall sub_5FC1E0(int a1, int a2); int __thiscall sub_5FC270(_DWORD *this, char *a2, int a3); int __thiscall sub_5FC370(_DWORD *this, int a2, char *a3, size_t a4); int __thiscall sub_5FC4A0(_DWORD *this, int a2, char *a3, size_t a4, char a5); LONG __thiscall sub_5FC630(int *this); void __thiscall sub_5FC930(_DWORD *this, int a2, char *a3); char __thiscall sub_5FCAB0(_DWORD *this, char *a2, int a3); char __thiscall sub_5FCC90(_DWORD **this, char *a2, int a3); int __thiscall sub_5FCD90(_DWORD *this, LPCSTR lpString, int a3, int a4); void __thiscall sub_5FCEA0(_DWORD *this, int a2, char *a3); void __thiscall sub_5FCF00(_DWORD *this, int a2, char *a3, char a4); char __thiscall sub_5FCF60(_DWORD *this); char __thiscall sub_5FD090(int *this, int a2, int a3, int a4, int a5, int a6, char a7, _DWORD *a8); char __thiscall sub_5FD130(int **this); void __thiscall sub_5FD5C0(_DWORD *this, int a2, const char *a3); void __thiscall sub_5FD640(_DWORD *this, int a2, const char *a3, char a4); void __thiscall sub_5FD6C0(_DWORD *this, const char *a2); void __thiscall sub_5FD710(_DWORD *this, const char *a2, char a3); void __thiscall sub_5FD760(_DWORD *this, const char *a2); char __thiscall sub_5FD7B0(_DWORD *this, int a2); char __thiscall sub_5FE430(_DWORD *this, LPCSTR lpString, int a3, int a4); void __thiscall sub_5FE890(const char **this, char *a2); // void __userpurge sub_5FE980(int a1@, int a2@, int a3, signed int *a4, int a5); char __thiscall sub_5FF5C0(_DWORD *this); void __thiscall sub_5FF620(_DWORD *this, int a2, char *a3); LONG __thiscall sub_5FF740(void **this); _DWORD *__thiscall sub_5FF870(_DWORD *this); volatile LONG *__cdecl sub_5FFAD0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_5FFC20(_DWORD *this, _DWORD *a2); void *__stdcall sub_5FFC80(char *a1); char *__cdecl sub_5FFCE0(char *a1, char *a2, char *a3); char *__cdecl sub_5FFD20(char *a1, char *a2, char *a3); int **__thiscall sub_5FFD60(_DWORD *this, int **a2, _DWORD *a3); unsigned int __thiscall sub_5FFDD0(char **this, char *a2); char **__thiscall sub_5FFEC0(char **this, char **a2); unsigned int __thiscall sub_5FFFA0(int this, int a2); void __thiscall sub_600020(_DWORD *this, char *a2); int __thiscall sub_6000C0(_DWORD *this, int a2, char a3, int a4, void *a5); int *__thiscall sub_600300(_DWORD *this, int *a2, int a3); void __stdcall sub_600570(void *a1); int __thiscall sub_6005D0(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_6006C0(_DWORD *this, char *a2); int *__thiscall sub_600790(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_600850(_DWORD *this); void *__thiscall sub_6008B0(void *this, char a2); void __thiscall sub_600910(_DWORD **this, const char *a2, char a3); void __thiscall sub_600920(_DWORD **this, char *a2, char a3); void __thiscall sub_600940(_DWORD **this, const char *a2); void __thiscall sub_600950(_DWORD **this, char *a2); void __thiscall sub_600A00(_DWORD **this, int a2); void __thiscall sub_600A60(_DWORD **this, int a2); void __thiscall sub_600AC0(_DWORD **this, int a2); void __thiscall sub_600B20(_DWORD **this, int a2); void __thiscall sub_600B80(_DWORD **this, int a2); void __thiscall sub_600CA0(_DWORD **this, int a2); void __thiscall sub_600E20(_DWORD **this, int a2); void __thiscall sub_600E80(_DWORD **this, int a2); void __thiscall sub_600EE0(_DWORD **this, int a2); int __thiscall sub_600F50(_DWORD *this, int a2); int __thiscall sub_600F70(_DWORD *this, int a2); int __thiscall sub_600F90(_DWORD **this, _DWORD *a2, int *a3); int __thiscall sub_600FD0(_DWORD **this, int a2, int a3); int __thiscall sub_601110(_DWORD *this); void __thiscall sub_601130(_DWORD *this); void __thiscall sub_6011D0(_DWORD **this); int __thiscall sub_601270(_DWORD **this, int a2); void __thiscall sub_6012D0(_DWORD **this, int a2, int a3); int __thiscall sub_601370(_DWORD *this, unsigned int a2); BOOL sub_601620(); char __thiscall sub_601630(int this); float *__thiscall sub_601670(float *this); LONG __thiscall sub_6017C0(_DWORD *this); const CHAR *__thiscall sub_601A00(_BYTE **this, const CHAR *a2); // char __userpurge sub_601A80@(int a1@, signed int a2@, float a3); const CHAR *__thiscall sub_602020(_DWORD *this, const CHAR *a2); char __thiscall sub_602190(void *this, int a2); void __thiscall sub_603900(int this, int a2, int a3); // void __userpurge sub_603BA0(int a1@, int a2@, int a3@, int a4, _DWORD *a5, int a6); void *__thiscall sub_604370(void *this, char a2); char sub_6043E0(); char __fastcall sub_6043F0(char *a1); int __stdcall sub_604420(int a1); void __thiscall sub_604460(_DWORD **this, int a2); int __thiscall sub_6044C0(_DWORD **this, _DWORD *a2, int *a3); int __thiscall sub_604500(_DWORD **this, int a2, int a3); void __thiscall sub_604660(_DWORD *this); int __thiscall sub_6046F0(void *this); int __thiscall sub_604700(void *this); int __thiscall sub_604710(void *this); int __thiscall sub_604720(void *this); char __thiscall sub_604730(_DWORD **this); int __thiscall sub_604750(_DWORD **this); HWND __thiscall sub_604770(int this); int __thiscall sub_6047A0(void *this); int __stdcall sub_6047B0(char *, char *); // idb bool __stdcall sub_604820(char *a1, char *a2); char __thiscall sub_6048A0(_DWORD **this); char __stdcall sub_604B20(int a1, int a2, int a3); void __thiscall sub_604BD0(void *this); int __thiscall sub_604E00(_DWORD **this); void __thiscall sub_604E10(_DWORD **this, const char *a2); void __thiscall sub_604E40(_DWORD **this, char *a2); void __thiscall sub_604E70(char *this, int a2); void __thiscall sub_604EE0(char *this, int a2); void __thiscall sub_604F50(char *this, int a2); void __thiscall sub_605030(char *this, int a2); void __thiscall sub_6050A0(char *this, int a2); void __thiscall sub_605110(char *this, int a2); void __thiscall sub_605180(char *this, int a2); void __thiscall sub_6051F0(char *this, int a2); void __thiscall sub_605260(char *this, int a2); void __thiscall sub_6052D0(char *this, int a2); void __thiscall sub_605340(char *this, int a2); void __thiscall sub_6053B0(char *this, int a2); void __thiscall sub_605420(char *this, int a2); // int __userpurge sub_6054B0@(int a1@, int a2@, int a3@, unsigned int a4, int a5); int __thiscall sub_6057B0(_DWORD **this); BOOL sub_6057C0(); char __thiscall sub_6057D0(int this); void __thiscall sub_605810(_DWORD **this, char *a2); int __thiscall sub_605870(_DWORD **this, _BYTE *a2); char __thiscall sub_605B30(_DWORD **this, int a2); char __thiscall sub_605C20(_DWORD *this, char a2); void __thiscall sub_605C50(_DWORD **this, float a2); int __thiscall sub_605CC0(_DWORD **this, char a2); bool __thiscall sub_605CF0(_DWORD *this); void __thiscall sub_605D00(_DWORD **this, int a2, char *a3); char __thiscall sub_605D40(_DWORD **this, int a2); void __thiscall sub_605DD0(_DWORD **this, char *a2); void __thiscall sub_605FE0(_DWORD **this, char *a2, int a3); void __thiscall sub_606200(_DWORD **this, char *a2, char a3); void __thiscall sub_606420(_DWORD **this, char *a2); char __thiscall sub_6066E0(_DWORD *this, int a2); char __thiscall sub_6068C0(_DWORD *this, char a2); char __thiscall sub_606A20(_DWORD **this, char *a2); int __thiscall sub_606AD0(_DWORD *this); char __thiscall sub_606B20(void *this, void (__stdcall ***a2)(signed int)); // void __userpurge sub_609390(int a1@, int a2@, int a3@, int a4, int a5); int *__thiscall sub_609BB0(int this, int *a2, _DWORD *a3, int *a4); void __thiscall sub_60A460(_DWORD *this, char *a2); char *__thiscall sub_60A7B0(char *this); LONG __thiscall sub_60AA20(_DWORD *this); volatile LONG *__cdecl sub_60AD00(int a1); _DWORD *__thiscall sub_60AE30(_DWORD *this); void __thiscall sub_60AEB0(int this, char a2, char a3); _DWORD *__thiscall sub_60AF30(_DWORD **this, int a2, int a3); LRESULT __thiscall sub_60B310(_DWORD *this, const char *a2, int a3); void __thiscall sub_60B620(_DWORD **this); // void __userpurge sub_60B9F0(float *a1@, int a2@, int a3@, int a4@, float a5); char ***__thiscall sub_60C4F0(int **this, char ***a2); char __cdecl sub_60C520(char *a1, const char *a2, signed int *a3); double __thiscall sub_60C5B0(_DWORD *this); void *__thiscall sub_60C5E0(void *this, char a2); float *__thiscall sub_60C610(float *this); int __thiscall nullsub_17(_DWORD); // weak char __thiscall sub_60C650(_DWORD *this, int a2); void __thiscall sub_60C7D0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_60C890(_DWORD *this, int a2, _DWORD *a3, const char *a4); double __thiscall sub_60C930(float *this); char __thiscall sub_60C960(_DWORD *this, const char *a2, const char *a3); int __thiscall sub_60CB00(int this); int __thiscall sub_60CB40(_DWORD *this); int __thiscall sub_60CBA0(int this); int __thiscall sub_60CBF0(int this); int __thiscall sub_60CC40(int this, int a2, char a3); signed int __thiscall sub_60CC80(int *this, int a2); int __thiscall sub_60CC90(_DWORD *this, int a2); int __thiscall sub_60CCA0(int this, int a2); char sub_60CD40(); char __thiscall sub_60CD70(_DWORD *this); int __thiscall sub_60CDD0(_DWORD *this); float *__thiscall sub_60CE10(float *this); int __thiscall sub_60CE80(void *this); int __thiscall sub_60CE90(int this, int a2); int __thiscall sub_60CEF0(_DWORD **this); _DWORD *__thiscall sub_60CF00(_DWORD **this); char __thiscall sub_60CF90(_DWORD **this, const char *a2); int __thiscall sub_60D0C0(void *this); int __thiscall sub_60D0D0(_DWORD *this, int a2); int __thiscall sub_60D190(_DWORD **this, char a2); int __thiscall sub_60D1E0(_DWORD **this); void __thiscall sub_60D230(_BYTE *this, _DWORD *a2); LONG __thiscall sub_60D3B0(_DWORD *this); int __thiscall sub_60D450(_DWORD *this); int __thiscall sub_60D480(_DWORD *this); int __thiscall sub_60D4B0(_DWORD **this); void __thiscall sub_60D540(int this); char __thiscall sub_60D640(int this); __time32_t __thiscall sub_60D6A0(_BYTE *this, _DWORD *a2); int __thiscall sub_60D6D0(void *this); char __thiscall sub_60D700(int this, char a2); int __thiscall sub_60D720(_DWORD *this); void __thiscall sub_60D760(int this); char __thiscall sub_60D7B0(int this, char a2); int __thiscall sub_60D800(_DWORD *this); int __thiscall sub_60D830(_DWORD *this); void __thiscall sub_60D860(int this); char __thiscall sub_60D8A0(int this, char a2); _DWORD *__thiscall sub_60D8C0(_DWORD *this); int __thiscall sub_60DA30(_DWORD *this); const CHAR *__stdcall sub_60DAD0(int a1); void __thiscall sub_60DBE0(_DWORD *this, int a2, int a3); int __thiscall sub_60DC40(_DWORD **this); void __thiscall sub_60DCB0(int this, int a2, int a3); int __thiscall sub_60DD90(_DWORD **this); void __thiscall sub_60DE00(_DWORD *this); void __thiscall sub_60E1D0(int this); void __thiscall sub_60E4D0(_DWORD **this, unsigned int a2); void __thiscall sub_60E600(int *this); void __thiscall sub_60E650(_DWORD *this, unsigned __int8 *a2); // void __userpurge sub_60E7D0(int a1@, int a2@, unsigned __int8 *a3); void __thiscall sub_60E9E0(_DWORD *this, int a2); void __thiscall sub_60EC40(int *this, _WORD *a2); void __thiscall sub_60EC70(_DWORD *this, _WORD *a2); void __thiscall sub_60ECA0(_DWORD *this); void __thiscall sub_60ED40(_DWORD *this); volatile LONG *__cdecl sub_60EDE0(int a1); volatile LONG *__cdecl sub_60EF10(int a1, int *a2); volatile LONG *__cdecl sub_60F0A0(int a1, int *a2); void __thiscall sub_60F270(int this, float a2); void __thiscall sub_60F2E0(int this, float a2); void __thiscall sub_60F350(int this, float a2); void __thiscall sub_60F3C0(int this, float a2); void __thiscall sub_60F4A0(void *this, float a2); void __thiscall sub_60F4C0(void *this, float a2); void __thiscall sub_60F4E0(_DWORD *this, int a2); void __thiscall sub_60FCF0(_DWORD **this, int a2); void __thiscall sub_610590(_DWORD **this, int a2); void __thiscall sub_6106B0(_DWORD *this, int a2); void __thiscall sub_610720(void *this); void __thiscall sub_6107F0(int *this, int a2, int a3); char __thiscall sub_6108E0(void *this, void **a2); char __thiscall sub_611D90(void *this, volatile LONG *a2, _DWORD *a3); char __thiscall sub_612840(void *this, volatile LONG *a2, _DWORD *a3); void *__thiscall sub_613D50(void *this, char a2); void *__thiscall sub_613D90(void *this, char a2); int __cdecl sub_613DD0(__int16 a1); void *__thiscall sub_613E30(void *this, char a2); char __cdecl sub_613E60(const char *a1); int __thiscall sub_613F90(_DWORD *this, int a2); char __thiscall sub_613FE0(int this, int a2); char __thiscall sub_614020(void *this, int a2); void __thiscall sub_614470(float *this, float a2); void __thiscall sub_614660(_DWORD *this, int a2); int __cdecl sub_614700(int a1); void *__thiscall sub_614860(void *this, char a2); int __thiscall sub_6149A0(int this, unsigned int a2); int __thiscall sub_614B10(_DWORD **this, int a2); int __thiscall sub_614BE0(_DWORD **this, int a2); bool __cdecl sub_614E70(int a1, int a2); char __cdecl sub_614EA0(int a1, int a2); char __cdecl sub_614EC0(int a1, int a2); char __cdecl sub_614EE0(int a1, int a2); bool __cdecl sub_614F00(int a1, int a2); BOOL __cdecl sub_614F20(int a1, int a2); bool __cdecl sub_614F40(int a1, int a2); char __thiscall sub_614FC0(_DWORD **this, unsigned int a2); char __thiscall sub_615020(_DWORD **this, int a2); char __cdecl sub_615080(char *a1, int a2, int a3); char __thiscall sub_615120(int *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7); double __stdcall sub_615260(_DWORD, _DWORD); // weak int __thiscall sub_6152E0(_DWORD *this, int a2, unsigned int *a3, int a4); void __stdcall sub_6153A0(int a1, unsigned int *a2, unsigned int *a3); int __thiscall sub_6154E0(volatile LONG *this, _BYTE *a2); int __thiscall sub_615580(_DWORD **this, int a2, int a3, int a4); _DWORD *__thiscall sub_6155D0(_DWORD *this); void __thiscall sub_6156F0(int this, float a2); int __thiscall sub_615710(float *this, int a2); char __thiscall sub_615790(_DWORD *this); char __thiscall sub_615820(_DWORD **this); char __thiscall sub_615900(int *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8); int __thiscall sub_615AD0(_DWORD **this, int a2, char a3); int __thiscall sub_615B50(_DWORD *this, LPCSTR lpString); int __thiscall sub_615C20(_DWORD *this, LPCSTR lpString); void __thiscall sub_615C80(_DWORD *this, int a2, LPCSTR lpString, int a4, int a5); _DWORD *__thiscall sub_615DC0(_DWORD *this, _DWORD *a2, unsigned __int16 a3, int a4, unsigned int *a5, _DWORD *a6); char __thiscall sub_6162B0(_DWORD *this, int a2, char a3, int a4, int a5); const char *__thiscall sub_616370(_DWORD *this, unsigned __int16 a2, char *a3, int a4, int a5); char __thiscall sub_616660(_DWORD *this, int a2, int a3); void __thiscall sub_616690(_DWORD *this, int a2); char __fastcall sub_616730(int a1, int a2, int a3, int a4, int a5); int __thiscall sub_6168D0(int this, float a2); void __thiscall sub_616A00(_DWORD *this); int __thiscall sub_616A50(_DWORD *this, LPCSTR lpString, int a3, int a4); int __thiscall sub_616C20(_DWORD **this, unsigned __int16 a2, int a3, int a4); int __thiscall sub_617390(int *this, int a2, LPCSTR lpString, int a4, int a5); _DWORD *__thiscall sub_6175B0(void *this, int a2, int a3); void __thiscall sub_6177C0(_DWORD *this, int a2, LPCSTR lpString, int a4); void __thiscall sub_617920(int this, int a2, LPCSTR lpString, int a4); _DWORD *__thiscall sub_617A50(_DWORD *this); void __thiscall sub_617BB0(_DWORD **this, int a2, unsigned int a3); int __cdecl sub_617C20(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __cdecl sub_617D80(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_617ED0(int a1, int a2, int a3, int a4, int a5); char __thiscall sub_618040(_DWORD *this, int a2, int a3, int a4, volatile LONG **a5, int a6); int __cdecl sub_618380(int a1); volatile LONG *__cdecl sub_6184E0(int a1, int a2, int a3); char __thiscall sub_618620(void *this, int a2, int a3, int a4); int __cdecl sub_618890(int a1); char __thiscall sub_6189E0(void *this, int a2); int __thiscall sub_618CC0(int *this, const CHAR *a2, int a3, int a4); void __thiscall sub_618F30(int this, int a2, const CHAR *a3, int a4); void __thiscall sub_619060(_WORD *this); void *__thiscall sub_619090(_DWORD *this, unsigned __int16 a2, int a3, int a4); void *__thiscall sub_619540(int this, int a2, unsigned int a3, int a4, char a5, int *a6); void *__thiscall sub_6196F0(_DWORD *this, __int16 a2, int a3, void *a4, char a5, unsigned int a6, void *a7); char __thiscall sub_619E80(void *this, int a2, int a3, void *a4, char a5, void *a6); int __thiscall sub_61A0F0(float *this, int a2, void *a3, char a4); char __thiscall sub_61A1E0(void *this, int a2); void __thiscall sub_61AA10(void *this); // void __userpurge sub_61AE50(int a1@, int a2@, int a3@, int a4, _DWORD *a5); void *__thiscall sub_61B390(void *this, char a2); void *__thiscall sub_61B3C0(void *this, char a2); void *__thiscall sub_61B400(void *this, char a2); void *__thiscall sub_61B440(void *this, char a2); void *__thiscall sub_61B480(void *this, char a2); void *__thiscall sub_61B4C0(void *this, char a2); const char *__cdecl sub_61B500(const char *a1); int __cdecl sub_61B590(int a1); int __thiscall sub_61B5F0(_DWORD *this); _DWORD *__thiscall sub_61B670(void *this, char a2); _DWORD *__thiscall sub_61B700(void *this, char a2); int __thiscall sub_61B7A0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); void __thiscall sub_61B850(void *); // idb int __thiscall sub_61B8B0(const void **this, int a2); char *__thiscall sub_61B8E0(char *this, int a2); void __thiscall sub_61B950(void ***this); char *__stdcall sub_61B9B0(char *a1, int a2, int a3); void __thiscall sub_61BA70(void *); // idb void __thiscall sub_61BA90(int ***this, int ***a2, unsigned __int8 (__cdecl *a3)(int *, int *)); void __thiscall sub_61BB10(void **this, unsigned __int8 (__cdecl *a2)(int *, int *)); char __thiscall sub_61BE60(volatile LONG *this, int a2, int a3); char __thiscall sub_61BEC0(volatile LONG **this, volatile LONG *a2, int a3); void *__thiscall sub_61C450(void *this, char a2); int __thiscall sub_61C4B0(_DWORD *this, float a2); char __thiscall sub_61C590(void *this, int a2); LONG __thiscall sub_61CB70(_DWORD **this, int a2, char a3); int *__thiscall sub_61CC60(int this, int a2); _DWORD *__thiscall sub_61CEB0(_DWORD *this); LONG __thiscall sub_61CF60(_DWORD *this); volatile LONG *__cdecl sub_61D070(int a1); void __thiscall sub_61D1A0(int *this); void __thiscall sub_61D260(int *this, int a2, int a3); __int16 __thiscall sub_61D280(const void **this); void *__thiscall sub_61D610(void *this, char a2); int __thiscall sub_61D6A0(_BYTE *this); void __thiscall sub_61D6C0(_BYTE *this, int a2, int a3); signed int __stdcall sub_61D700(unsigned __int8 a1); char __thiscall sub_61D790(float *this); char __thiscall sub_61D8F0(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_61D960(int this, int a2); int __thiscall sub_61DB70(char *this, unsigned __int8 a2); LONG __thiscall sub_61DD20(_DWORD *this); char __thiscall sub_61DE40(void *this, void *a2); _DWORD *__thiscall sub_61E110(_DWORD *this); volatile LONG *__cdecl sub_61E250(int a1); _DWORD *__cdecl sub_61E380(_DWORD *a1); _DWORD *__thiscall sub_61E3A0(_DWORD *this); void __stdcall sub_61E3F0(void *a1); int *__thiscall sub_61E430(_DWORD *this, int *a2, int a3); int __thiscall sub_61E680(_DWORD *this); int *__thiscall sub_61E6D0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); int **__thiscall sub_61E770(_DWORD *this, int **a2, _WORD *a3); void __thiscall sub_61E7E0(_DWORD *this); void *__thiscall sub_61E840(void *this, char a2); double __cdecl sub_61E870(float a1); double sub_61E8B0(); float *__thiscall sub_61E8E0(float *this, float *a2, float *a3); int __thiscall sub_61E920(_DWORD *this, int a2); // void __usercall sub_61E950(float *a1@, int a2@); int __thiscall sub_61ED50(float *this, int a2, char *a3); LONG __thiscall sub_61EEE0(_DWORD *this); void __thiscall sub_61F020(_DWORD *this, int a2); void __thiscall sub_61F220(_DWORD *this, int a2); // void __userpurge sub_61F360(float *a1@, int a2@, float a3); // char __userpurge sub_61F7C0@(float *a1@, int a2@, float a3); int __thiscall sub_61F8E0(_DWORD *this, int a2); char **__stdcall sub_61F910(char *a1, int a2, int a3); void *sub_61F980(); bool __thiscall sub_61F990(int this, float a2); void *__thiscall sub_61F9C0(char *this, char a2); int __thiscall sub_61F9D0(char *this); int __thiscall sub_61F9E0(char *this); float *__thiscall sub_61F9F0(void *this); double __thiscall sub_61FA60(float *this); void __thiscall sub_61FA70(float *this, float a2); void __thiscall sub_61FA80(_BYTE *this); int __thiscall sub_61FA90(_DWORD *this); int __thiscall sub_61FAD0(_DWORD *this, char a2); int __thiscall sub_61FB30(_DWORD *this); void __thiscall sub_61FB40(_DWORD *this, int a2); _DWORD *__thiscall sub_61FBA0(_DWORD *this, _DWORD *a2); void *__thiscall sub_61FBD0(_DWORD *this); void *__thiscall sub_61FBF0(_DWORD *this); float *__thiscall sub_61FC10(_DWORD *this, int *a2); float *__thiscall sub_61FC70(_DWORD *this, int a2); char __thiscall sub_61FCD0(_DWORD *this, int *a2); void __thiscall sub_61FD10(_DWORD *this, int a2); int __thiscall sub_61FD60(_DWORD *this, int a2); int __thiscall sub_61FD90(_DWORD *this, int a2, void *a3); void *__thiscall sub_61FDD0(void *this, char a2); char **__thiscall sub_61FE00(char **this, int a2); char __thiscall sub_61FEA0(_DWORD **this, int a2); int __thiscall sub_61FED0(_DWORD *this, int a2); char __thiscall sub_61FF80(_DWORD *this); void __thiscall sub_61FFC0(_DWORD *this); int __thiscall sub_620040(_DWORD **this); void __thiscall sub_620080(_DWORD *this, int a2, int a3); LONG __thiscall sub_6201E0(_DWORD *this, int a2, int a3); int __cdecl sub_6204A0(int a1); void __thiscall sub_6205F0(_DWORD *this, unsigned __int16 a2); char __thiscall sub_620E20(volatile LONG **this, int a2); void *__thiscall sub_621670(void *this, char a2); int __thiscall sub_6216C0(_DWORD **this); int __thiscall sub_6217C0(_DWORD *this, int a2); char sub_621870(); void __thiscall sub_6218A0(_DWORD **this); char __thiscall sub_621930(_DWORD **this, int a2); void __thiscall sub_621980(int this); int __thiscall sub_6219C0(_DWORD **this); bool __thiscall sub_621AF0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8); char __thiscall sub_621B20(_DWORD *this); void __thiscall sub_621B80(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_621BE0(int this); _DWORD *__thiscall sub_621C10(_DWORD **this, __int16 a2); char __thiscall sub_621D10(_DWORD *this, int a2); char __thiscall sub_621D40(int this, int a2); _DWORD *__thiscall sub_621DE0(_DWORD *this); int sub_621EF0(); int __thiscall sub_621F90(_DWORD *this); int __thiscall sub_622080(void *this, _BYTE *a2); char __stdcall sub_6220E0(unsigned __int16 *a1); // char __userpurge sub_622330@(int a1@, int a2@, signed int a3@, unsigned int a4, char a5); bool __thiscall sub_622590(_DWORD *this, int a2); int __thiscall sub_6228C0(_DWORD **this); LONG __thiscall sub_622D40(_DWORD *this, int a2, int a3); void __thiscall sub_623000(_DWORD *this); // int __userpurge sub_623280@(int a1@, int a2@, int a3@, int a4); void __thiscall sub_6233A0(_DWORD *this); bool __thiscall sub_6233F0(_DWORD *this, int a2); LONG __thiscall sub_623790(_DWORD *this, int a2, int a3); int __thiscall sub_623A50(_DWORD **this); char __thiscall sub_623DF0(_DWORD *this, int a2); void __thiscall sub_623E80(_DWORD *this); void __thiscall sub_623ED0(_DWORD *this); void __thiscall sub_623F20(int this); volatile LONG *__cdecl sub_624080(int a1); int __cdecl sub_6241B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); LONG __thiscall sub_624310(_DWORD *this); char *__thiscall sub_624480(char *this); volatile LONG *__cdecl sub_624770(int a1); void __thiscall sub_6248A0(_DWORD *this, unsigned __int16 a2); void __thiscall sub_6261C0(_DWORD *this, __int16 a2); void __thiscall sub_626B10(_DWORD **this, char a2, int a3); int __thiscall sub_6275A0(char *this); void __thiscall sub_6276A0(_DWORD *this); char __thiscall sub_627C20(char *this, float a2); char __thiscall sub_627ED0(void *this, volatile LONG *a2); int __thiscall sub_629700(char *this); int __thiscall sub_6297E0(int this); int __thiscall sub_629840(char *this); int __thiscall sub_629870(_DWORD *this); void __thiscall sub_6298F0(_BYTE *this, unsigned __int8 a2); char __thiscall sub_629A70(void *this, int a2); int __thiscall sub_62A980(_DWORD *this); char __thiscall sub_62AA00(_DWORD **this, unsigned int a2); int __thiscall sub_62AAC0(_DWORD *this); int __thiscall sub_62AB80(char *this, int a2); int __thiscall sub_62ABB0(int this); void __thiscall sub_62ACD0(_DWORD **this, int a2, unsigned int a3); // void __userpurge sub_62AD60(int a1@, int a2@, signed int a3@, int a4, unsigned int a5); _DWORD *__cdecl sub_62AE90(_DWORD *a1); int __cdecl sub_62AEB0(int a1); int __cdecl sub_62AED0(int a1); unsigned int __thiscall sub_62AF10(_DWORD *this, _DWORD *a2); void *__thiscall sub_62AF70(void *this, char a2); void *__thiscall sub_62AFA0(void *this, char a2); _DWORD *__thiscall sub_62AFE0(_DWORD *this); _DWORD *__thiscall sub_62B030(_DWORD *this, int a2); int __thiscall sub_62B090(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_62B0F0(_DWORD *this, int a2); _DWORD *__thiscall sub_62B150(void *this, char a2); void __thiscall sub_62B1F0(int this); int __thiscall sub_62B240(int this); _DWORD *__thiscall sub_62B270(_DWORD *this, _DWORD *a2, int *a3); void __thiscall sub_62B300(int this); int __thiscall sub_62B350(int this); int *__thiscall sub_62B380(int *this, int a2, int a3, void *a4, int a5, int a6, int a7, int a8); int *__thiscall sub_62B410(int *this, int a2, int a3, void *a4, void *a5, int a6, int a7, int a8, int a9, int a10, char a11); const void **__thiscall sub_62B4E0(const void **this, int a2); void *__thiscall sub_62B5A0(void *this, char a2); _DWORD *__thiscall sub_62B5D0(_DWORD *this, int a2); _DWORD *__thiscall sub_62B630(_DWORD *this, unsigned __int8 *a2, int a3); int __thiscall sub_62B690(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_62B8F0(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_62BB40(_DWORD *this, int a2, void *a3); int *__thiscall sub_62BDE0(_DWORD *this, int *a2, int a3); void __stdcall sub_62C060(void *a1); void __stdcall sub_62C0E0(void *a1); _DWORD *__thiscall sub_62C140(_DWORD *this, char *a2); _DWORD *__thiscall sub_62C210(_DWORD *this, char *a2); int __thiscall sub_62C2E0(_DWORD *this, int a2, void *a3, int a4); int *__thiscall sub_62C3A0(_DWORD *this, int *a2, int a3, int a4); int __thiscall sub_62C460(_DWORD *this, int a2, char *a3); int __thiscall sub_62C4D0(_DWORD *this, int a2, char *a3); void __thiscall sub_62C540(_DWORD *this); void __thiscall sub_62C5A0(_DWORD *this); void __thiscall sub_62C680(_BYTE *this, int a2); char __thiscall sub_62C690(int this, int a2); _DWORD *__thiscall sub_62C720(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_62C800(_DWORD *this, int a2); _DWORD *__thiscall sub_62C820(_DWORD *this, int a2); unsigned int __thiscall sub_62C840(_DWORD *this, __int16 a2); LONG __thiscall sub_62C8E0(_DWORD *this); int __thiscall sub_62C9D0(_DWORD *this); _DWORD *__thiscall sub_62CA30(_DWORD *this); int __thiscall sub_62CC40(_DWORD **this, int a2); void __thiscall sub_62D050(_DWORD **this, int a2); void __thiscall sub_62D300(int this, int a2, int a3); char __thiscall sub_62D4B0(void *this, int a2); char *__thiscall sub_62DCF0(struct std::ios_base *this, char a2); int __thiscall sub_62DD50(_DWORD *this); int __thiscall sub_62DDE0(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_62DEE0(struct std::ios_base *this, char a2); _BYTE *__thiscall sub_62DF20(_BYTE *this, unsigned __int16 a2); _DWORD *__thiscall sub_62E110(_DWORD *this, char *a2); void *__thiscall sub_62E180(void *this, char a2); void *__thiscall sub_62E1B0(void *this, void *a2); __int64 sub_62E1E0(); int __cdecl sub_62E1F0(__int64 a1); char sub_62E210(); unsigned int __cdecl sub_62E220(int a1); void *sub_62E2B0(); void **__cdecl sub_62E340(unsigned __int8 a1); int __cdecl sub_62E440(unsigned int a1); unsigned int __cdecl sub_62E4C0(int a1, unsigned int a2); bool __cdecl sub_62E580(char a1); char __cdecl sub_62E5B0(_BYTE *a1); int __thiscall sub_62E850(_DWORD *this, int a2, void *a3, int a4); int **__thiscall sub_62E930(_DWORD *this, int **a2, _BYTE *a3); _DWORD *__thiscall sub_62E9A0(_DWORD *this, char *a2); char __stdcall sub_62EA20(int a1); void *__thiscall sub_62EA30(unsigned int *this); bool __thiscall sub_62EA80(_WORD *this, __int16 a2); void sub_62EAF0(); void sub_62EBB0(); _DWORD *__thiscall sub_62EC30(_DWORD *this, int a2, const void *a3); int __thiscall sub_62ECC0(char *this); _DWORD *__thiscall sub_62EE80(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_62EF20(_DWORD *this, int a2, int a3); char *__thiscall sub_62EFB0(unsigned int *this); _DWORD *__thiscall sub_62F000(_DWORD *this, int a2, _DWORD *a3); char __thiscall sub_62F080(__int16 *this); char *__thiscall sub_62F0D0(char *this); char __cdecl sub_62F110(int a1, int a2, char a3); _DWORD *__thiscall sub_62F1A0(void *this, int a2, int a3, int a4); void *__thiscall sub_62F2E0(void *this, char a2); _DWORD *__thiscall sub_62F310(void *this, char a2); __int64 sub_62F3D0(); int __cdecl sub_62F3E0(__int64 a1); void sub_62F410(); int __cdecl sub_62F4A0(unsigned int a1); void __cdecl sub_62F4C0(int a1, unsigned int a2); void __cdecl sub_62F520(unsigned int a1); char __cdecl sub_62F590(int a1); int __thiscall sub_62F700(_DWORD *this, int a2); _DWORD *__cdecl sub_62F730(__int16 a1); char *__cdecl sub_62F830(_DWORD *a1, _DWORD *a2, char a3); void *__thiscall sub_62FB30(void *this, char a2); void *__thiscall sub_62FB70(void *this, char a2); _DWORD *__thiscall sub_62FBA0(void *this, char a2); _DWORD *__thiscall sub_62FC30(void *this, char a2); int __thiscall sub_62FCC0(_DWORD *this); void *__thiscall sub_62FD40(void *this, char a2); _DWORD *__thiscall sub_62FD90(_DWORD *this); void sub_62FE80(); char __thiscall sub_62FF70(char *this); char *__thiscall sub_630100(unsigned __int16 *this, float *a2); char __thiscall sub_630280(char *this, int a2, float *a3, char *a4, char *a5, __int16 a6); void __thiscall sub_630650(_BYTE *this, int a2); char *sub_630EB0(); int sub_630EC0(); int sub_630EE0(); _DWORD *__thiscall sub_630F00(void *this, char a2); int sub_630F70(); char *__cdecl sub_630FE0(unsigned int a1); int sub_631000(); char *__cdecl sub_631010(unsigned int a1); int sub_631030(); int sub_631040(); int sub_631050(); int sub_631060(); char *__cdecl sub_631070(unsigned int a1); char *__cdecl sub_631090(unsigned int a1); char *__cdecl sub_6310B0(unsigned int a1); int sub_6310D0(); int *__cdecl sub_6310E0(unsigned int a1); char *__cdecl sub_631100(unsigned int a1); char *__cdecl sub_631120(unsigned int a1); char *__cdecl sub_631140(unsigned int a1); char *__cdecl sub_631160(unsigned int a1); char *__cdecl sub_631180(unsigned int a1); char *__cdecl sub_6311A0(unsigned int a1); char *__cdecl sub_6311C0(unsigned int a1); char *__cdecl sub_6311E0(unsigned int a1); char *__cdecl sub_631200(unsigned int a1); char *__cdecl sub_631220(unsigned int a1); char *__cdecl sub_631240(unsigned int a1); char *__cdecl sub_631260(unsigned int a1); int __cdecl nullsub_18(_DWORD); // weak int __cdecl nullsub_19(_DWORD); // weak _DWORD *__cdecl sub_6312A0(unsigned __int8 *a1); char *__cdecl sub_631320(char *a1); int *__cdecl sub_631370(_WORD *a1); int __cdecl sub_6313C0(__int16 a1); int *__cdecl sub_6313F0(int *a1); int *sub_631440(); int *sub_631450(); int sub_631460(); int sub_631470(); int sub_631480(); int sub_631490(); int sub_6314A0(); int sub_6314B0(); int sub_6314C0(); int sub_6314D0(); int sub_6314E0(); int sub_6314F0(); int sub_631500(); int sub_631510(); int sub_631520(); char *__cdecl sub_631530(unsigned int a1); int (__thiscall ***sub_631550())(void *, char); int __cdecl sub_631560(_WORD *a1); int __cdecl sub_6316A0(_WORD *a1); void sub_6318C0(); signed int __cdecl sub_631920(_WORD *a1); int __cdecl sub_6319F0(_WORD *a1); void *__thiscall sub_631CB0(void *this, char a2); _DWORD *__thiscall sub_631CE0(void *this, char a2); int __thiscall sub_631E00(_DWORD *this); char __thiscall sub_631E60(_DWORD *this, void *a2, size_t a3); int __thiscall sub_631EE0(_DWORD *this); char __thiscall sub_631F20(_DWORD *this, int a2); int __thiscall sub_631F60(_DWORD *this, int a2); _DWORD *__thiscall sub_631F90(_DWORD *this, int a2); char __thiscall sub_632020(_DWORD *this, int a2); signed int __thiscall sub_632040(_WORD *this, _WORD *a2); char __thiscall sub_632060(_WORD *this, int a2); signed int __thiscall sub_632080(_WORD *this, _WORD *a2); char __thiscall sub_6320A0(__int16 *this); signed int __thiscall sub_6320B0(_DWORD *this, _DWORD *a2); signed int __thiscall sub_6320D0(_DWORD *this, _DWORD *a2); char __thiscall sub_6320F0(_WORD *this, int a2); signed int __thiscall sub_632120(int this, _WORD *a2); signed int __thiscall sub_632160(_DWORD *this, unsigned __int16 *a2); void __thiscall sub_6321C0(_DWORD *this, int a2); _DWORD *__thiscall sub_632230(_DWORD *this); _DWORD *__thiscall sub_632280(_DWORD *this); _DWORD *__thiscall sub_6322D0(_DWORD *this); _DWORD *__thiscall sub_632320(_DWORD *this); signed int __thiscall sub_632370(unsigned __int16 *this); _DWORD *__thiscall sub_6323E0(_DWORD *this); LONG __thiscall sub_632480(_DWORD *this); signed int __thiscall sub_632530(_DWORD *this, _DWORD *a2); signed int __thiscall sub_632570(_DWORD *this, unsigned int *a2); char __thiscall sub_6325B0(_DWORD *this, int a2); int __cdecl sub_632650(int a1); void *__thiscall sub_6326C0(void *this, char a2); void *__thiscall sub_632700(void *this, char a2); void *__thiscall sub_632730(void *this, char a2); char sub_632760(); char __stdcall sub_632790(_DWORD *a1); _DWORD *__stdcall sub_6327B0(void *a1); char __thiscall sub_632950(_BYTE *this, char a2); void __thiscall sub_632970(char *this, unsigned __int16 a2, unsigned __int16 a3, char a4); char __thiscall sub_6329D0(char *this, int a2, int a3); void __thiscall sub_632A30(int *this); void __thiscall sub_632A80(char *this); int __thiscall sub_632B00(_DWORD); // weak _DWORD *__thiscall sub_632BA0(_DWORD *this); void __thiscall sub_632CB0(_DWORD *this, float a2); void __thiscall sub_632F20(_DWORD *this, signed int a2); char __thiscall sub_633040(char *this); char __thiscall sub_633240(_DWORD *this, char *a2); int __cdecl sub_6333A0(unsigned int a1); char __cdecl sub_6333C0(char a1); char __cdecl sub_6333D0(char a1); char sub_6333E0(); char sub_6333F0(); char __cdecl sub_633400(char a1); char sub_633410(); char sub_633440(); char __cdecl sub_633450(char a1); void sub_633460(); int __cdecl sub_633500(unsigned int a1); int __cdecl sub_633520(unsigned int a1); void __cdecl sub_633540(int a1, unsigned int a2); void __cdecl sub_6335A0(int a1, unsigned int a2, int a3); void __cdecl sub_633600(unsigned int a1); int __cdecl sub_633650(unsigned int a1); int __thiscall sub_6336C0(_DWORD *this, void *a2, int a3, int a4); int __thiscall sub_6337C0(int *this); void __thiscall sub_6337E0(void *this); signed int __thiscall sub_633810(void *this, int a2); signed int __thiscall sub_633880(_DWORD *this, _DWORD *a2, int a3, int a4, int a5, int a6); signed int __thiscall sub_633960(_DWORD **this, _DWORD *a2); signed int __thiscall sub_6339F0(void *this); _DWORD *__thiscall sub_633A20(_DWORD *this, int a2); signed int __thiscall sub_633A60(_DWORD **this, _DWORD *a2); _DWORD *__thiscall sub_633AA0(_DWORD *this); void __thiscall sub_633AC0(_DWORD *this); int __thiscall sub_633B00(_DWORD *this, char *a2, int a3, int a4); signed int __thiscall sub_633CC0(_DWORD *this, int a2); signed int __thiscall sub_633D20(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_633D80(_DWORD *this, int a2, char *a3); int __thiscall sub_633E10(_DWORD *this, char *a2, int a3); signed int __thiscall sub_633EB0(_DWORD *this, int a2, _DWORD *a3); signed int __thiscall sub_633FD0(_DWORD *this, _DWORD *a2, int a3); signed int __thiscall sub_6342B0(_DWORD *this, int a2, int a3, int a4, int a5); signed int __thiscall sub_6343B0(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5); BOOL __thiscall sub_634520(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4); signed int __thiscall sub_634660(_DWORD *this, int a2, signed int a3, signed int a4, _DWORD *a5); int __thiscall sub_634A20(_DWORD *this, char *a2, int a3, int a4, int a5); // unsigned __int16 __thiscall Concurrency::details::HardwareAffinity::GetGroup(Concurrency::details::HardwareAffinity *__hidden this); idb _DWORD *__thiscall sub_634B40(_DWORD *this); int __thiscall sub_634B60(_DWORD *this); char __thiscall sub_634B70(void *this, float a2, int a3); char *__thiscall sub_634D50(__int16 *this); float *__thiscall sub_634D80(_DWORD *this, float a2); signed int __thiscall sub_634DE0(__int16 *this); int __thiscall sub_634E60(void *this, signed int a2, signed int a3, int a4); int __thiscall sub_634F20(_DWORD *this, float a2); int __thiscall sub_634F40(_DWORD *this, float a2); bool __cdecl sub_634F60(float *a1); void __thiscall sub_634FE0(__int16 *this, float *a2); void __thiscall sub_635100(__int16 *this, float a2, int a3, int a4); char __cdecl sub_6351B0(__int16 a1); char __thiscall sub_6352D0(__int16 *this, float a2, int a3, int a4); int __thiscall sub_635350(__int16 *this); bool __cdecl sub_635410(__int16 a1); void __thiscall sub_635470(_DWORD *this); void __thiscall sub_635520(_DWORD *this); char __thiscall sub_6356C0(__int16 *this); void __thiscall sub_6356F0(_DWORD *this); bool __thiscall sub_6357D0(__int16 *this); int __thiscall sub_6358B0(__int16 *this); bool __thiscall sub_635A20(__int16 *this); char __thiscall sub_635A90(unsigned __int16 *this, float a2, int a3, int a4); bool __cdecl sub_635B70(int a1); _DWORD *__thiscall sub_635BE0(__int16 *this, _DWORD *a2); _DWORD *__thiscall sub_635C90(__int16 *this, _DWORD *a2); char __thiscall sub_635DA0(_WORD *this, __int16 a2, int a3); char __thiscall sub_635F70(_WORD *this, unsigned __int16 a2, int a3); bool __thiscall sub_6361F0(unsigned __int16 *this); void *__thiscall sub_636200(__int16 *this, void *a2); char __thiscall sub_6362F0(__int16 *this); char __thiscall sub_6364A0(_WORD *this, __int16 a2, void (__thiscall ***a3)(_DWORD, int *, void *)); double __thiscall sub_636980(_DWORD *this, float *a2); void *__thiscall sub_6369E0(void *this, char a2); void __thiscall sub_636A10(void *); // idb void *__thiscall sub_636A40(void *this, char a2); _DWORD *__thiscall sub_636A70(void *this, char a2); void *__thiscall sub_636B00(void *this, char a2); void *__thiscall sub_636B30(void **this, void *a2); bool __thiscall sub_636B60(_BYTE *this, int a2); int __thiscall sub_636B70(_DWORD **this); // void __usercall sub_636BA0(int a1@, int a2@); __int16 __thiscall sub_636C80(_WORD *this, __int16 a2); // char __usercall sub_636CA0@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5); bool __thiscall sub_636D20(_DWORD *this); int __thiscall sub_636D90(_DWORD *this); void __thiscall sub_636EE0(_DWORD *this); bool __cdecl sub_637080(float *a1); void __thiscall sub_637100(_DWORD *this); char __thiscall sub_637200(_DWORD *this, const char *a2, int a3); void __thiscall sub_6372F0(__int16 *this, float a2, int a3, int a4); int __thiscall sub_6375D0(_DWORD *this, void *a2, unsigned int a3); int __thiscall sub_6378A0(int this, void *a2, unsigned int a3); int __thiscall sub_637930(_DWORD **this, float a2); void *__thiscall sub_637950(void *this, char a2); _DWORD *__thiscall sub_6379C0(_DWORD *this); void __thiscall sub_637A70(_DWORD *this); void __thiscall sub_637B10(_DWORD *this, float a2, int a3, int a4, float a5); void *__thiscall sub_637B60(void *this, char a2); // char __usercall sub_637C00@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5); bool __thiscall sub_637C80(_DWORD *this); int __thiscall sub_637CF0(_DWORD *this); // int __usercall sub_637E40@(int a1@, int a2@); void __thiscall sub_638010(_DWORD *this); void __thiscall sub_638280(_DWORD *this); char __thiscall sub_638340(_DWORD *this, const char *a2); int __thiscall sub_6388A0(_DWORD *this, void *a2, unsigned int a3); void *__thiscall sub_639930(void *this, char a2); bool __thiscall sub_639A00(int this, float a2); // char __usercall sub_639A90@(const CHAR *a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5); bool __thiscall sub_639B20(_DWORD *this); // int __usercall sub_639B90@(_DWORD *a1@, int a2@); void __thiscall sub_639D30(_DWORD *this); // void __usercall sub_639FA0(int a1@, int a2@); void __thiscall sub_63A0A0(_DWORD *this); void __thiscall sub_63A2A0(_DWORD *this); // _BYTE *__userpurge sub_63A350@(int a1@, int a2@, const char *a3); void __thiscall sub_63A430(int this, float a2, int a3, int a4); int __thiscall sub_63A710(_DWORD *this, void *a2, unsigned int a3); int __thiscall sub_63A950(int this, void *a2, unsigned int a3); void *__thiscall sub_63A9E0(void *this, char a2); int __thiscall sub_63AA10(char *this); void __thiscall sub_63AA20(int this); Concurrency::details::HardwareAffinity *__thiscall sub_63AA40(_DWORD *this, __int16 a2); Concurrency::details::HardwareAffinity *__thiscall sub_63AA80(_DWORD *this, float *a2); char __thiscall sub_63AB90(_DWORD *this, _DWORD *a2); void __thiscall sub_63AC30(_DWORD *this); int __thiscall sub_63AD20(_DWORD *this); int __thiscall sub_63AD90(_DWORD *this); char __thiscall sub_63ADC0(_DWORD *this, char a2); char __thiscall sub_63AE60(_DWORD *this, int a2, float *a3, int a4); bool __thiscall sub_63B020(void **this); char __thiscall sub_63B470(_DWORD *this, float a2, int a3); int __thiscall sub_63B700(_DWORD *this, float a2, int a3); LONG __thiscall sub_63B810(_DWORD *this); _DWORD *__thiscall sub_63BAB0(_DWORD *this); void *__thiscall sub_63BC20(void *this, char a2); void *__thiscall sub_63BC50(void *this, char a2); void *__thiscall sub_63BC80(void *this, char a2); void *__thiscall sub_63BCB0(void *this, char a2); void *__thiscall sub_63BCE0(void *this, char a2); int __thiscall sub_63BD10(_DWORD *this); int __thiscall sub_63BD90(_DWORD *this); int __thiscall sub_63BE10(_DWORD *this); int __thiscall sub_63BE90(_DWORD *this); int __thiscall sub_63BF10(_DWORD *this); _DWORD *__thiscall sub_63BF90(void *this, char a2); _DWORD *__thiscall sub_63C020(void *this, char a2); _DWORD *__thiscall sub_63C0B0(void *this, char a2); _DWORD *__thiscall sub_63C140(void *this, char a2); _DWORD *__thiscall sub_63C1D0(void *this, char a2); _DWORD *__thiscall sub_63C260(_DWORD *this); _DWORD *__thiscall sub_63C2D0(_DWORD *this); _DWORD *__thiscall sub_63C2F0(_DWORD *this); int __thiscall sub_63C310(_DWORD *this); int __thiscall sub_63C390(_DWORD *this); int __thiscall sub_63C410(_DWORD *this); int __thiscall sub_63C490(_DWORD *this); int __thiscall sub_63C510(_DWORD *this); _DWORD *__thiscall sub_63C590(void *this, char a2); _DWORD *__thiscall sub_63C620(void *this, char a2); _DWORD *__thiscall sub_63C6B0(void *this, char a2); _DWORD *__thiscall sub_63C740(void *this, char a2); _DWORD *__thiscall sub_63C7D0(void *this, char a2); void __thiscall sub_63C860(int **this); int __thiscall sub_63C8B0(char *this); _WORD *__thiscall sub_63C8E0(float *this, float a2, float a3, float a4, float a5); int __thiscall sub_63CB30(_DWORD *this); int __thiscall sub_63CB40(_DWORD **this, float a2); LONG __thiscall sub_63CB60(_DWORD *this); _DWORD *__thiscall sub_63CCA0(_DWORD *this, int a2); int *__thiscall sub_63CD50(const void **this, float a2); void *__thiscall sub_63D030(void *this, char a2); signed int __thiscall sub_63D060(_DWORD *this); int __thiscall sub_63D090(_DWORD *this, __int16 a2); int __thiscall sub_63D0C0(_DWORD *this, float *a2); int __thiscall sub_63D410(_DWORD *this, _DWORD *a2); // void __usercall sub_63D4B0(int a1@, signed int a2@); int __thiscall sub_63D570(_DWORD); // weak void __thiscall sub_63D580(_DWORD *this, __int16 a2); // BOOL __usercall sub_63D900@(int a1@, signed int a2@); char sub_63D9A0(); int __thiscall nullsub_48(_DWORD); // weak int __thiscall nullsub_20(_DWORD); // weak _DWORD __stdcall nullsub_21(_DWORD, _DWORD); // weak signed int __thiscall sub_63D9E0(_DWORD *this); int __thiscall sub_63DA50(_DWORD *this, __int16 a2); char __thiscall sub_63DA90(_DWORD *this); void __thiscall sub_63DDD0(_DWORD *this, __int16 a2); // void __userpurge sub_63E080(_DWORD *a1@, int a2@, _DWORD *a3); // void __usercall sub_63E120(int a1@, signed int a2@); int __thiscall sub_63E1F0(_DWORD *this, float a2, int a3); int __thiscall sub_63E290(_DWORD); // weak BOOL __thiscall sub_63E2A0(void *this); char __thiscall sub_63E340(_DWORD *this); _DWORD *__thiscall sub_63E660(_DWORD *this, __int16 a2); void __thiscall sub_63E690(void *this, int a2, void *a3); int *__thiscall sub_63E870(void *this, int a2, void *a3, float a4); void __thiscall sub_63E8C0(void *this, int a2, void *a3, int a4, int a5); int __thiscall sub_63EAB0(_DWORD *this, _DWORD *a2); // void __usercall sub_63EB40(int a1@, signed int a2@); int __thiscall sub_63EC00(_DWORD *this, float a2, int a3); int sub_63ECA0(void); // weak // BOOL __usercall sub_63ECB0@(int a1@, signed int a2@); int __thiscall sub_63ED50(int this); // void __usercall sub_63EDE0(int *a1@, int a2@, const CHAR *a3@); _DWORD *__thiscall sub_63F100(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_63F140(_DWORD *this, _DWORD *a2); // void __usercall sub_63F160(int a1@, int a2@); char __thiscall sub_63F190(_DWORD *this, LPCSTR lpString, int a3, int a4); char __thiscall sub_63F270(char *this, int a2); int __thiscall sub_63F360(_DWORD *this); float *__thiscall sub_63F370(_DWORD **this, float *a2); int __thiscall sub_63F410(int this, int a2, LPCSTR lpString); bool __thiscall sub_63F4A0(_DWORD *this); LONG __thiscall sub_63F500(void **this); _DWORD *__thiscall sub_63F5A0(_DWORD *this, int a2, int a3, int a4); int *__thiscall sub_63F690(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_63F990(_DWORD *this); int __thiscall sub_63F9B0(_DWORD *this); bool __thiscall sub_63FA70(float *this, int a2, int a3, int a4, int a5); int __thiscall sub_63FE40(_DWORD *this); void __cdecl sub_63FED0(int *a1, int *a2); int *__cdecl sub_63FFD0(int *a1, int *a2, int *a3); void *__thiscall sub_640040(void *this, char a2); int *__cdecl sub_640070(int *a1, int *a2, int *a3); bool __thiscall sub_640150(int this, float a2); // int __usercall sub_6401B0@(int a1@, int a2@); // char __usercall sub_640290@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5); bool __thiscall sub_640310(_DWORD *this); int __thiscall sub_640380(_DWORD *this); int __thiscall sub_6404E0(_DWORD *this); void __thiscall sub_640750(_DWORD *this); void __thiscall sub_640A30(_DWORD *this); void __thiscall sub_640AE0(__int16 *this, float a2, int a3, int a4); // char __userpurge sub_640DA0@(int a1@, int a2@, void *a3); unsigned __int8 *__thiscall sub_640E80(_DWORD *this, unsigned __int8 *a2); unsigned __int8 *__thiscall sub_641010(_DWORD *this, unsigned __int8 *a2); int __thiscall sub_6411A0(_DWORD *this, void *a2, unsigned int a3); int __thiscall sub_6413E0(int this, void *a2, unsigned int a3); void *__thiscall sub_641740(void *this, char a2); char __thiscall sub_6417D0(volatile LONG **this, int a2); void *__thiscall sub_641E20(void *this, char a2); int __thiscall sub_641EF0(_DWORD **this, int a2); char __thiscall sub_641F30(void *this, int a2); char __thiscall sub_642630(_DWORD **this, char a2); char __thiscall sub_6427B0(volatile LONG *this, int a2, int a3); int __cdecl sub_642800(int a1); void *__thiscall sub_642940(void *this, char a2); char __thiscall sub_642980(_DWORD *this, unsigned __int16 a2); void __thiscall sub_642F00(_DWORD *this); bool __thiscall sub_643020(_DWORD *this); char __thiscall sub_6430C0(_DWORD *this); char __thiscall sub_6431B0(_DWORD *this, int a2); char __thiscall sub_643310(_DWORD *this); _DWORD *__thiscall sub_6433C0(void *this); int __stdcall sub_6433F0(int a1, int a2); int __stdcall sub_643550(int a1, unsigned __int8 *a2); int __stdcall sub_6435B0(int a1, _WORD *a2); int __stdcall sub_643610(int a1, int *a2); void sub_643660(); char __thiscall sub_643690(unsigned __int16 *this); void __thiscall sub_643B20(_DWORD *this); char __thiscall sub_643C00(_DWORD *this, __int16 a2, int a3, int *a4); char __thiscall sub_643DB0(_DWORD *this); char __thiscall sub_643F40(void *this); int __thiscall sub_644380(int this, int a2, int a3); int __thiscall sub_644400(int this, int a2, const void *a3); _DWORD *__thiscall sub_644450(_DWORD *this); char __thiscall sub_644520(_DWORD *this, float a2); char __thiscall sub_644600(unsigned __int16 *this, int a2, int a3, int a4); void __thiscall sub_644650(_DWORD *this); int __thiscall sub_644810(_BYTE **this, int a2, unsigned __int16 *a3); int __thiscall sub_644860(_BYTE **this, int a2, int a3, int a4, unsigned __int16 *a5); int *sub_644B50(); int sub_644B60(); void *__thiscall sub_644B70(void *this, char a2); char __thiscall sub_644BA0(_DWORD *this); _DWORD *__thiscall sub_644F10(_DWORD *this); char __thiscall sub_644F80(_DWORD *this); char __thiscall sub_645070(_DWORD *this, int a2); _DWORD *__thiscall sub_6450E0(_DWORD *this); void sub_645150(); void __stdcall sub_645180(int a1, int a2, int a3); _DWORD *__thiscall sub_6451A0(_DWORD *this); void __thiscall sub_645200(_DWORD *this); _DWORD *__thiscall sub_6452B0(int *this, float a2); int *sub_645320(); int sub_645330(); void *__thiscall sub_645340(void *this, char a2); float *__thiscall sub_645370(float *this); int __thiscall sub_645390(int this); int sub_6453B0(); _DWORD *__thiscall sub_645400(_DWORD *this); _DWORD *__thiscall sub_645440(float *this, float a2); void __cdecl sub_6454B0(float a1); float *__thiscall sub_645590(float *this, float a2, int a3, int a4); void *__thiscall sub_645650(void *this, char a2); _DWORD *__thiscall sub_645680(void *this, char a2); void *__thiscall sub_645710(void *this, char a2); char __thiscall sub_645780(_DWORD *this, char a2); char __thiscall sub_6457B0(_DWORD *this, char a2); _DWORD *__thiscall sub_6457E0(void *this); void __thiscall sub_645800(_DWORD *this); char __thiscall sub_645900(_DWORD **this); char __thiscall sub_6459D0(int this); void __thiscall sub_645A20(_DWORD *this, int a2); char __thiscall sub_645AC0(_DWORD *this); float *__thiscall sub_645B70(_DWORD *this); float *__thiscall sub_645C00(_DWORD *this); void __thiscall sub_645C90(_DWORD *this, unsigned __int8 a2); char __thiscall sub_645CD0(char *this, _BYTE *a2); char __thiscall sub_645DE0(char *this); int __thiscall sub_645F40(int, float); // idb void __thiscall sub_646150(_BYTE *this, int a2, int a3, int a4); void __thiscall sub_6463B0(int this, unsigned int a2); void ***sub_646600(); void *__thiscall sub_646610(void *this, char a2); int __thiscall sub_646640(char *this); char *__thiscall sub_646650(_DWORD *this, char *a2); int __thiscall sub_6466B0(int this); char __thiscall sub_6466C0(int this); void __thiscall sub_646770(_DWORD *this); int __thiscall sub_6467B0(_DWORD **this); void __thiscall sub_646870(_DWORD *this); char __thiscall sub_646940(unsigned __int8 *this); char __thiscall sub_646B00(_DWORD *this); char __thiscall sub_646B90(_DWORD *this); _DWORD *__thiscall sub_646DB0(_DWORD *this); void __thiscall sub_646E80(void **this); char __thiscall sub_647090(_DWORD *this); void *__thiscall sub_647990(_DWORD *this); char __thiscall sub_647A20(unsigned __int8 *this, int a2); void __thiscall sub_647AA0(_DWORD *this); int *sub_647B40(); int sub_647B50(); void *__thiscall sub_647B60(void *this, char a2); int __thiscall sub_647BB0(_WORD *this, int a2, _WORD *a3); char __thiscall sub_647C50(_DWORD *this); char __thiscall sub_647C90(_DWORD *this); int __thiscall sub_647CD0(void **this, int a2, int a3); int __thiscall sub_647D20(char *this, int a2, unsigned __int16 *a3); int __thiscall sub_647E40(void **this, int a2, int a3, int a4, unsigned __int16 *a5); void __thiscall sub_647F00(_DWORD *this, int a2); char __thiscall sub_647FA0(_DWORD *this, int a2); char __thiscall sub_648560(int *this, int a2, int a3); int __cdecl sub_6485D0(int a1); void *__thiscall sub_648710(void *this, char a2); int __thiscall sub_648800(_DWORD *this, int a2, int a3); char __thiscall sub_648860(_DWORD *this, int a2); int __cdecl sub_648A70(int a1); void *__thiscall sub_648BC0(void *this, char a2); bool __thiscall sub_648C90(_DWORD *this, int a2, int a3, _DWORD *a4); int __thiscall sub_648D10(_DWORD *this); void __thiscall sub_648D40(int this); _DWORD *__thiscall sub_648D70(_DWORD *this); void __thiscall sub_648F20(_DWORD *this); int __thiscall sub_648FA0(_WORD *this, unsigned __int8 a2); int __thiscall sub_649030(unsigned __int8 *this); int __cdecl sub_649060(int a1, int a2, int a3); volatile LONG *__cdecl sub_6491C0(int a1); void __thiscall sub_6492F0(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3); void __thiscall sub_649400(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3); void __thiscall sub_649610(char *this, unsigned __int8 a2, unsigned __int8 a3); void __thiscall sub_6496D0(int this, char a2); void __thiscall sub_6497B0(char *this, char a2); void __thiscall sub_6498E0(int this, int a2); void __thiscall sub_649B40(void *this, unsigned int a2, char a3); char __thiscall sub_649D20(_DWORD *this, int a2); void *__thiscall sub_64B0A0(void *this, char a2); _DWORD *__thiscall sub_64B0E0(void *this, char a2); char __cdecl sub_64B180(unsigned __int8 a1, unsigned __int8 a2, _DWORD *a3); char __cdecl sub_64B1E0(unsigned int a1, char a2, unsigned __int8 a3, unsigned __int8 a4, _DWORD *a5); char __cdecl sub_64B530(unsigned __int8 a1, unsigned __int8 a2, _DWORD *a3); int __thiscall sub_64B9E0(_DWORD *this, int a2); int __thiscall sub_64BA20(_DWORD *this, const char *a2); unsigned int __thiscall sub_64BAA0(_DWORD *this, char *a2, int a3, char a4); char __thiscall sub_64BCB0(_DWORD *this, char *a2); int __cdecl sub_64BD40(const char *a1); unsigned int sub_64C180(); unsigned int sub_64C210(); unsigned int sub_64C2A0(); unsigned int sub_64C330(); int __cdecl sub_64C450(int a1, unsigned __int8 a2); FILE *__cdecl sub_64C520(int a1); unsigned int sub_64C640(); char sub_64C660(); FILE *__cdecl sub_64C6D0(int a1); FILE *__cdecl sub_64C730(int a1); int sub_64C7D0(void); // weak FILE *__cdecl sub_64C7E0(int a1); FILE *__cdecl sub_64C820(int a1); FILE *__cdecl sub_64C860(int a1); FILE *__cdecl sub_64C8E0(int a1); FILE *__cdecl sub_64C960(int a1); FILE *__cdecl sub_64C9A0(int a1); void *__thiscall sub_64C9E0(void *this, char a2); void **__thiscall sub_64CA30(void *this, char a2); void **__thiscall sub_64CA70(void *this, char a2); void __thiscall sub_64CAF0(_DWORD *this); _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // weak void __thiscall sub_64CB70(_WORD **this, int a2, int a3, _BYTE *a4, int a5, int a6, int a7); _DWORD *__thiscall sub_64CC00(_DWORD *this); _DWORD *__thiscall sub_64CEE0(_DWORD *this); void *__thiscall sub_64CEF0(void *this, char a2); float *__thiscall sub_64CF20(_DWORD *this, float *a2); float *__thiscall sub_64CF80(_DWORD *this, float *a2); void *__thiscall sub_64D000(void *this, char a2); void *__thiscall sub_64D030(void *this, char a2); bool __stdcall sub_64D060(int a1); int __thiscall sub_64D0C0(_DWORD *this); bool __thiscall sub_64D0D0(_DWORD *this); BOOL __thiscall sub_64D0E0(_DWORD *this); int __thiscall sub_64D0F0(_DWORD *this, __int16 a2); int __thiscall sub_64D130(_DWORD *this); int __thiscall sub_64D160(_DWORD *this, __int16 a2); int __thiscall sub_64D1D0(_DWORD *this); char __thiscall sub_64D230(_DWORD *this, int a2, __int16 a3, int a4, unsigned int a5, char a6, char a7, __int16 a8); void __thiscall sub_64D390(int this, int a2); void __thiscall sub_64D3E0(__int16 *this, char *a2); _DWORD *__thiscall sub_64D5A0(_DWORD *this); char __thiscall sub_64D600(_DWORD *this, char *a2, _DWORD *a3); char __thiscall sub_64D740(unsigned __int16 *this, char *a2, _DWORD *a3); char __thiscall sub_64D8A0(_DWORD *this, __int16 a2, __int16 a3, int a4, int a5, int a6, unsigned int a7, int a8); void __thiscall sub_64DC40(float *this); int __thiscall sub_64DE20(_DWORD *this); int __thiscall sub_64DF20(_DWORD *this); char __thiscall sub_64E020(_DWORD *this, char *a2, _DWORD *a3, char a4); // int __userpurge sub_64E0C0@(int result@, _DWORD *a2@, int a3); char __thiscall sub_64E250(_DWORD *this); void __thiscall sub_64E360(int (***this)(void), float a2); void __thiscall sub_64E6E0(_DWORD *this, void *a2); void __fastcall sub_64E910(_DWORD *a1); char __thiscall sub_64EB10(_DWORD *this); _DWORD *__thiscall sub_64EBE0(void *this, char a2); int __cdecl sub_64EC70(unsigned int a1, unsigned int a2); int __thiscall sub_64ECF0(_DWORD *this); int __thiscall sub_64ED70(_DWORD *this); _DWORD *__thiscall sub_64EDF0(void *this, char a2); int __thiscall sub_64EE80(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_64EED0(_DWORD *this, _DWORD *a2); void *__thiscall sub_64EF60(void *this, char a2); _DWORD *__thiscall sub_64F000(_DWORD *this); int __thiscall sub_64F030(float **this, float a2); char __thiscall sub_64F0A0(_DWORD *this); char __thiscall sub_64F110(_DWORD *this, int a2); char __thiscall sub_64F130(_DWORD *this, unsigned __int8 *a2, int a3); char __thiscall sub_64F1D0(_DWORD *this, unsigned __int8 *a2, int a3); char __thiscall sub_64F1F0(_DWORD *this, unsigned __int8 *a2, int a3); char __thiscall sub_64F210(void *this, unsigned __int8 *a2); char __thiscall sub_64F3A0(void *this, int a2); char __thiscall sub_64F4A0(_BYTE *this, int a2); void __stdcall sub_64F4F0(int a1); _DWORD *__thiscall sub_64F500(_DWORD *this, char a2); char __cdecl sub_64F580(unsigned int a1, char a2, char a3, _BYTE *a4, _BYTE *a5); signed int __stdcall sub_64F6D0(int *a1, int a2); int __thiscall sub_64F7B0(_DWORD *this, int a2); _DWORD *__thiscall sub_64F7D0(_DWORD *this, _DWORD *a2); int __thiscall sub_64F7E0(_DWORD *this, signed int a2, unsigned __int8 a3, int a4); int __thiscall sub_64F860(char *this); BOOL __thiscall sub_64F870(_DWORD *this); void __thiscall sub_64F8A0(int this, float a2); char __thiscall sub_64F900(_DWORD *this, int a2); void __thiscall sub_64F980(_DWORD *this, int a2); bool __thiscall sub_64FA00(_DWORD *this, int a2); void __thiscall sub_64FA70(_DWORD *this); int __thiscall sub_64FB00(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_64FC60(_DWORD *this); char __thiscall sub_64FCB0(_DWORD *this, int a2); int *__thiscall sub_64FD50(_DWORD *this, int a2, int a3); int *__thiscall sub_64FE50(_DWORD *this, int a2, int a3); int __thiscall sub_64FF40(_DWORD *this, int a2); char __thiscall sub_650000(_DWORD *this, int a2); char __thiscall sub_650090(_DWORD *this, int a2, float a3, int a4); char **__thiscall sub_650300(_DWORD *this, int a2); void *__thiscall sub_6503E0(void *this, char a2); _DWORD *__thiscall sub_650410(_DWORD *this, _DWORD *a2); int __thiscall sub_650460(_DWORD *this); _DWORD *__thiscall sub_6504E0(void *this, char a2); void *__thiscall sub_650570(void *this, char a2); void *__thiscall sub_6505A0(void *this, char a2); void __cdecl sub_650610(float a1); void __cdecl sub_650620(float a1); double sub_650630(); signed int __thiscall sub_650650(void *this, unsigned __int8 *a2, const void *a3); signed int __stdcall sub_6506B0(int a1); int __thiscall sub_6506C0(_DWORD *this); double sub_650700(); char __thiscall sub_650710(void *this); char __thiscall sub_650720(void *this); int __thiscall sub_650730(void *this); int __thiscall sub_650740(_DWORD *this); int __thiscall sub_650750(_DWORD *this, int a2); // bool __userpurge sub_650770@(_DWORD *a1@, double a2@, char a3, float a4); char *__thiscall sub_6507E0(__int16 *this); signed int __thiscall sub_650810(void *this); char __thiscall sub_6508C0(_BYTE *this); int __thiscall sub_6508D0(char *this); void __thiscall sub_6508E0(float *this, float a2); __int16 __thiscall sub_6508F0(_WORD *this); int __thiscall sub_650900(void *this); int __thiscall sub_650910(char *this, int a2); bool __thiscall sub_650930(int this, _DWORD *a2, _DWORD *a3); char __thiscall sub_650960(int this, int a2, int a3, char a4); void __thiscall sub_650990(_BYTE *this); signed int __thiscall sub_6509A0(int this); bool __thiscall sub_650B20(_DWORD *this); _WORD *__thiscall sub_650B60(_WORD *this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, __int16 a9, char a10); char __thiscall sub_650B90(_BYTE *this, char a2); int __thiscall sub_650BA0(char *this, unsigned __int16 a2, unsigned int a3); void __thiscall sub_650C60(_DWORD *this); char __thiscall sub_650CC0(_BYTE *this); char __thiscall sub_650CD0(_BYTE *this, char a2); int __thiscall sub_650CF0(_DWORD *this); int __thiscall sub_650D00(_DWORD *this, unsigned __int16 a2, int a3); char __thiscall sub_650DB0(char *this, int a2); bool __thiscall sub_650E20(float *this); char __thiscall sub_650E40(_BYTE *this, char a2); double __thiscall sub_650E50(float *this, float a2); double __stdcall sub_650F10(unsigned __int16 *a1); double __stdcall sub_650FA0(unsigned __int16 *a1, int a2); char __thiscall sub_6510B0(int this); void __thiscall sub_6510D0(char *this, float a2); bool __thiscall sub_6511D0(_DWORD *this, int a2); bool __thiscall sub_651220(int this, int a2); int __stdcall sub_651300(int, int, float); // idb void __thiscall sub_6513A0(_BYTE *this, int a2); void __thiscall sub_6514A0(float *this); void __thiscall sub_651500(float *this); bool __thiscall sub_651560(_DWORD *this); bool __thiscall sub_6515E0(_DWORD *this); bool __thiscall sub_651660(_BYTE *this); bool __thiscall sub_651680(int this); bool __thiscall sub_6516C0(_BYTE *this); signed int __thiscall sub_651720(_DWORD *this); void __thiscall sub_651750(_DWORD *this, float a2); void __thiscall sub_651790(_DWORD *this, float a2); signed int __thiscall sub_6517D0(_DWORD *this); double __thiscall sub_651800(_DWORD *this); signed int __thiscall sub_651840(_DWORD *this); int __thiscall sub_651890(_DWORD *this); void __thiscall sub_6518A0(float *this, float a2); void __thiscall sub_6518E0(__int16 *this); // void __usercall sub_651900(int a1@, int a2@); void *__thiscall sub_651920(_BYTE *this); bool __thiscall sub_651940(_BYTE *this, const char *a2); void __thiscall sub_651970(int this); void __thiscall sub_651BB0(_DWORD *this); char __thiscall sub_651C20(int this, int a2, char a3); char __thiscall sub_651C60(int this); bool __thiscall sub_651CD0(_DWORD *this); bool __thiscall sub_651D10(_DWORD *this); char __thiscall sub_651D70(_WORD *this, int a2); void __thiscall sub_651ED0(_DWORD *this); char __thiscall sub_651F90(_DWORD *this, __int16 a2); char __thiscall sub_652070(_BYTE *this); BOOL __thiscall sub_652090(int this); int __thiscall sub_6520D0(_DWORD *this); int __thiscall sub_6520E0(_DWORD *this); void __thiscall sub_6520F0(float *this); int __thiscall sub_652150(_WORD *this, int a2); bool __thiscall sub_652200(_BYTE *this); int __thiscall sub_652320(_DWORD *this, int a2); // char __userpurge sub_6524E0@(int a1@, int a2@, int a3); // char __userpurge sub_652500@(int a1@, int a2@, int a3); int __thiscall sub_652520(_DWORD *this, char a2); char __thiscall sub_6525B0(void *this, int a2); char __thiscall sub_6528A0(void *this, float a2); void __thiscall sub_652930(int this, float a2); signed int __thiscall sub_652AC0(_BYTE *this, int a2); int __thiscall sub_652B00(float *this); char __thiscall sub_652B70(int this, int a2); char __thiscall sub_652D90(_WORD *this, int a2, __int16 a3); signed int __thiscall sub_652EE0(_DWORD *this, int a2); double __thiscall sub_652FB0(_BYTE *this, int a2); // void __userpurge sub_653170(_BYTE *a1@, int a2@, double a3@, float a4); void __thiscall sub_6534B0(float *this, int a2); void __thiscall sub_653580(_BYTE *this); bool __thiscall sub_653650(_BYTE *this); bool __thiscall sub_653680(_BYTE *this); signed int __thiscall sub_6536D0(void *this, int a2); signed int __thiscall sub_653710(_DWORD *this); char __thiscall sub_653870(_DWORD *this, int a2, int a3); char __thiscall sub_653940(_BYTE *this, unsigned __int8 a2); float *__thiscall sub_653B10(_BYTE *this, float *a2); char __thiscall sub_653D00(_DWORD *this, int a2); char __thiscall sub_654000(_DWORD *this, int a2, char a3); char __thiscall sub_654220(_DWORD *this, int a2); char __thiscall sub_654520(int this, int a2); char __thiscall sub_654750(float *this, int a2); void __thiscall sub_654840(_DWORD *this); char __thiscall sub_6549B0(_DWORD *this, _DWORD *a2); int __thiscall sub_654B20(_BYTE *this, int a2); // void __usercall sub_654C10(int *a1@, int a2@, int a3@); // char __userpurge sub_654D50@(_BYTE *a1@, int a2@, int a3); // char __userpurge sub_654D90@(_BYTE *a1@, int a2@, int a3); void __thiscall sub_654DD0(_DWORD *this, int a2); void __thiscall sub_654E30(int this, int a2); _DWORD *__thiscall sub_654F60(_DWORD *this); double __thiscall sub_654FD0(_DWORD *this, int a2, int a3); char __thiscall sub_655080(_DWORD *this, int a2, float a3, int a4); int __thiscall sub_655330(_DWORD *this, unsigned __int16 a2); int __thiscall sub_6553F0(_DWORD *this, int a2); void __thiscall sub_655440(void *this, int a2); char __thiscall sub_655980(_DWORD *this, char a2); void __thiscall sub_655A40(_DWORD *this, int a2); char __thiscall sub_655CB0(char *this, int a2, _DWORD *a3); void __thiscall sub_655EE0(_DWORD *this, int a2, char *a3); char __thiscall sub_656460(float *this, int a2); void __thiscall sub_6565A0(_DWORD *this); _DWORD **__thiscall sub_656660(_DWORD *this); void __thiscall sub_6566B0(void **this, void *a2); _DWORD **__thiscall sub_6566F0(_DWORD *this); void *__thiscall sub_656740(void **this); char __thiscall sub_6567C0(_DWORD *this, int a2); int *__thiscall sub_656B40(_DWORD *this); char __thiscall sub_656BC0(void *this, int a2); char __thiscall sub_656C30(_DWORD *this, _DWORD *a2); bool __thiscall sub_656CE0(_DWORD **this); char __thiscall sub_656DB0(_DWORD *this); char **__thiscall sub_656EF0(char **this, int a2); void __thiscall sub_656F40(int this); int __thiscall sub_657030(_DWORD *this); char __thiscall sub_657190(void **this, int a2, int a3); void __thiscall sub_657580(_DWORD *this); void __thiscall sub_657DC0(int this, float a2); void __thiscall sub_658390(_DWORD *this); char __thiscall sub_6585E0(void *this, int a2); char __thiscall sub_6586F0(_DWORD *this, char a2); int __thiscall sub_658E20(_DWORD *this); void __thiscall sub_65A510(void *this, int a2); char __thiscall sub_65A860(void *this, int a2, int a3); void __thiscall sub_65AC00(float *this, float a2, float a3, float a4, float a5); char __thiscall sub_65AC30(_DWORD *this); char __thiscall sub_65AC70(float *this, char a2); int *__thiscall sub_65AD50(int *this, int *a2); void __thiscall sub_65ADA0(int this); void __thiscall sub_65AE20(int *this); LONG __thiscall sub_65AEB0(char *this); int sub_65AF30(); int __thiscall sub_65AF50(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_65AF80(_DWORD *this); void __thiscall sub_65B040(int *this); void __thiscall sub_65B0E0(int *this, int a2); void __thiscall sub_65B180(int *this); double __thiscall sub_65B1B0(int this); LONG __thiscall sub_65B210(int this, int a2); void __thiscall sub_65B320(int *this, float a2); int __thiscall sub_65B390(_DWORD *this); int __thiscall sub_65B3F0(_DWORD *this, int a2, void *a3, int a4); float *__thiscall sub_65B490(char **this, int a2); _DWORD *__thiscall sub_65B4E0(_DWORD *this); void __thiscall sub_65B510(void **this); bool __thiscall sub_65B560(_DWORD *this, int a2, void *a3); signed int __stdcall sub_65B5E0(int a1, char **a2); void __stdcall sub_65B620(int a1); char *__thiscall sub_65B630(_DWORD *this, char a2); int __thiscall sub_65B670(_DWORD *this); bool __thiscall sub_65B690(_DWORD *this); int __thiscall sub_65B6C0(int this, int a2, __int16 a3); int __thiscall sub_65B6E0(_DWORD *this); __int16 __thiscall sub_65B6F0(_WORD *this); int __thiscall sub_65B700(void *this, float a2, float a3, float a4, int a5, float a6); int __thiscall sub_65B740(void *this, int a2, float a3); int __thiscall sub_65B790(void *this); void __thiscall sub_65B7B0(int this, char a2); int __thiscall sub_65B7F0(_DWORD *this); int __thiscall sub_65B810(void *this); int __thiscall sub_65B830(_WORD *this); int __thiscall sub_65B870(_DWORD *this); signed int __thiscall sub_65B8B0(_DWORD *this, char a2, unsigned int *a3, _DWORD *a4); char __thiscall sub_65B9D0(_DWORD *this, int a2); int __thiscall sub_65BA10(void *this); char __thiscall sub_65BA20(_DWORD *this); signed int __stdcall sub_65BA40(int a1); int __thiscall sub_65BAA0(_DWORD *this, int a2); void __thiscall sub_65BB70(_DWORD *this, float a2, float a3, char a4); void __thiscall sub_65BC10(float *this, float *a2); void __thiscall sub_65BC90(float *this, float *a2); char __thiscall sub_65BD00(int this, int a2, int a3, _DWORD *a4); bool __thiscall sub_65C150(_DWORD *this); int __thiscall sub_65C170(_DWORD *this); int __thiscall sub_65C1C0(_DWORD *this); bool __thiscall sub_65C1D0(_DWORD *this); bool __thiscall sub_65C1E0(_DWORD *this); char __thiscall sub_65C210(float *this); char __thiscall sub_65C2A0(float *this); bool __thiscall sub_65C320(_DWORD *this); bool __thiscall sub_65C340(_DWORD *this); bool __thiscall sub_65C360(_DWORD *this); bool __thiscall sub_65C3B0(_DWORD *this); int __thiscall sub_65C3E0(_DWORD *this, int a2, int a3); bool __thiscall sub_65C450(_DWORD *this); bool __thiscall sub_65C4A0(_DWORD *this); char __thiscall sub_65C4F0(_DWORD *this, int a2); void __thiscall sub_65C610(_DWORD *this, int a2); bool __thiscall sub_65C670(_DWORD *this); void __thiscall sub_65C690(float *this); bool __thiscall sub_65C930(_DWORD *this); bool __thiscall sub_65C980(_DWORD *this); int __thiscall sub_65CBB0(_DWORD *this); signed int __stdcall sub_65CBE0(signed int a1, int a2); int __thiscall sub_65CC70(_BYTE *this, unsigned int a2, int a3); char __thiscall sub_65CD40(float *this); int __thiscall sub_65CE10(_DWORD *this); void __thiscall sub_65CE60(_DWORD *this); // char __userpurge sub_65CF20@(int *a1@, int a2@, int a3@, char *a4, int a5); char __thiscall sub_65D100(_DWORD *this, int a2); void __thiscall sub_65D170(int this, int a2); // int __userpurge sub_65D480@(int a1@, int a2@, int a3, int a4); // int __usercall sub_65D6A0@(int *a1@, int a2@, int a3@); // int __usercall sub_65D6D0@(int *a1@, int a2@, int a3@); int __thiscall sub_65D700(_DWORD *this, int a2); char __thiscall sub_65D7A0(float *this, float a2); char __thiscall sub_65D810(_DWORD *this); // int __usercall sub_65D9A0@(int *a1@, int a2@, int a3@); char __thiscall sub_65D9D0(_DWORD *this, int a2, int a3); void __thiscall sub_65DB50(_DWORD *this, float a2, int a3); int __thiscall sub_65DBC0(_DWORD *this, int a2); int __thiscall sub_65DC00(float *this); unsigned int __thiscall sub_65DD20(_DWORD *this, unsigned int a2); void __thiscall sub_65E0E0(_DWORD *this, float a2, char a3, float *a4, char a5); char __thiscall sub_65E320(_DWORD **this, float a2, int a3, char a4, float *a5, char a6); bool __thiscall sub_65E540(_DWORD *this); void __thiscall sub_65E5E0(_DWORD *this, float a2); void __thiscall sub_65E7F0(_DWORD *this, char a2); // void __userpurge sub_65EA30(int a1@, int a2@, float a3); void __thiscall sub_65ECA0(_DWORD *this, int a2, float a3); // char __userpurge sub_65EEB0@(int *a1@, int a2@, int a3@, char *a4); void __thiscall sub_65EED0(_DWORD *this, int a2); double __thiscall sub_65F000(_DWORD *this); // char __userpurge sub_65F070@(int a1@, int a2@, int a3@, int a4, int a5); int __thiscall sub_65F350(_DWORD *this, float a2); char __thiscall sub_65F440(int this, int a2, char a3, char a4); char __thiscall sub_65F570(int this, int a2, int a3); void __thiscall sub_65F610(float *this); // void __usercall sub_65F6F0(int *a1@, int a2@, int a3@); // _DWORD *__userpurge sub_65F800@(int a1@, int a2@, unsigned int a3, unsigned int a4, int a5); // int __userpurge sub_65FA40@(float *a1@, int a2@, int a3, char a4); char __thiscall sub_65FBD0(_DWORD *this); // int __usercall sub_65FC10@(int *a1@, int a2@, int a3@, double a4@); // int __usercall sub_65FCA0@(int *a1@, int a2@, int a3@, double a4@); // char __usercall sub_65FD30@(int a1@, int a2@, int a3@); // char __usercall sub_65FD60@(int a1@, int a2@, int a3@); // char __usercall sub_65FD90@(int a1@, int a2@, int a3@); // int __usercall sub_65FDB0@(int a1@, int a2@, int a3@); // int __usercall sub_65FE00@(int a1@, int a2@, int a3@); // int __usercall sub_65FE50@(int a1@, int a2@, int a3@); void __thiscall sub_65FEA0(void *this, int a2, int a3, int a4); void __thiscall sub_660040(void *this, unsigned int a2, unsigned int a3, int a4, int a5); char __thiscall sub_6601D0(int this); char __thiscall sub_6602A0(_BYTE *this, int a2, volatile LONG *a3, char a4, unsigned int a5); char __thiscall sub_660580(float *this); char __thiscall sub_660700(__int16 *this); char __thiscall sub_6608C0(__int16 *this); // void __userpurge sub_660910(int a1@, int a2@, int a3@, float a4); int __cdecl sub_660DA0(int, float, int); // idb void __thiscall sub_660DD0(int this, int a2); void __thiscall sub_660DF0(int *this); void __thiscall sub_660E20(int *this); void __thiscall sub_660E50(int *this); void __thiscall sub_660E80(float *this); void __thiscall sub_660F40(float *this); int __cdecl sub_660FA0(char *, int, int); // idb char __thiscall sub_661030(_BYTE *this); bool __thiscall sub_661040(char *this, _DWORD *a2); bool __stdcall sub_661150(_DWORD *a1); _DWORD *__thiscall sub_661220(_DWORD *this); LONG __thiscall sub_6612F0(char *this); char __thiscall sub_6613F0(int *this, int a2); signed int __thiscall sub_661530(_DWORD *this, int a2, int a3); char __thiscall sub_6615F0(char *this, int a2); char __thiscall sub_661790(_DWORD *this, int a2); const void **__thiscall sub_6618E0(_DWORD *this, void *a2, void *a3); char __thiscall sub_661930(_DWORD *this, char a2); char __thiscall sub_6619E0(int *this); signed int __thiscall sub_661A20(_DWORD *this, _DWORD *a2, int a3); _DWORD *__thiscall sub_661BF0(_DWORD *this); int *sub_661CD0(); char __thiscall sub_661D40(int this, int a2); char __thiscall sub_661DB0(int *this); char __thiscall sub_661E70(_BYTE *this, char a2); char __thiscall sub_661F10(_BYTE *this, int a2); void *__thiscall sub_662000(void *this, char a2); void *__thiscall sub_662030(void *this, char a2); void *__thiscall sub_6620A0(void *this, char a2); void *__thiscall sub_6620D0(void *this, char a2); char __cdecl sub_662140(char a1); char __cdecl sub_6621D0(int a1, int a2, char a3); char __cdecl sub_6622B0(__int64 a1, unsigned __int8 a2); signed __int64 __cdecl sub_6622F0(int a1); void __cdecl sub_662470(__int64 a1, char *a2, unsigned int a3); char __cdecl sub_662570(signed __int64 a1, char *a2, unsigned int a3); int __cdecl sub_662DA0(int a1); int __thiscall sub_662E00(int this, int a2); char __thiscall sub_662E10(_BYTE *this); int __thiscall sub_662E20(_DWORD *this, _DWORD *a2); double __thiscall sub_662E40(float *this); bool __thiscall sub_662E50(_DWORD *this); char __thiscall sub_662E60(float *this, int a2, int a3, int a4, int a5); int __thiscall sub_662ED0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_662F00(int this, int a2, int a3); int __thiscall sub_662F80(_DWORD *this); _DWORD *__thiscall sub_663020(_DWORD *this); char __thiscall sub_663080(float *this, float a2); char __thiscall sub_6630F0(_DWORD *this); void __thiscall sub_663170(int this, int a2, int a3); // double __userpurge sub_663240@(int a1@, int a2@, int a3); int __stdcall sub_6639E0(int a1); void __thiscall sub_663AB0(float *this, _DWORD *a2, float *a3); int __thiscall sub_663C70(_DWORD *this, char a2, char a3); int *__thiscall sub_663CD0(_DWORD *this); void __thiscall sub_663D50(_DWORD *this); char __thiscall sub_663E90(_DWORD *this, char a2, int a3); _DWORD *__thiscall sub_663F40(_DWORD *this); void __thiscall sub_664160(_DWORD *this, char a2); void __thiscall sub_6642E0(_DWORD *this, _DWORD *a2); void __thiscall sub_6643D0(float *this, float a2); int __thiscall sub_664400(_DWORD *this, _DWORD *a2); void *__thiscall sub_664460(void *this, char a2); _DWORD __stdcall nullsub_23(_DWORD); // weak int ***__thiscall sub_664570(_DWORD *this, float a2); int __thiscall sub_6645B0(_DWORD *this, const char *a2); int __thiscall sub_664630(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_6646E0(_DWORD *this, int a2); signed __int16 __thiscall sub_664710(_DWORD *this, __int16 a2); void __thiscall sub_664760(_DWORD *this, char a2); char __thiscall sub_6647A0(_DWORD *this, char a2); _BYTE *__thiscall sub_6648F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); _BYTE *__thiscall sub_6649B0(_DWORD *this, const char *a2); char __thiscall sub_664A30(_DWORD *this, int a2); int __thiscall sub_664A70(_DWORD *this, int a2); char *__thiscall sub_664AB0(_DWORD *this, __int16 a2); char __thiscall sub_664B30(_BYTE *this); _WORD *__thiscall sub_664C40(_DWORD *this, char a2, char a3, int a4, int a5, unsigned int a6); int **__thiscall sub_665040(_DWORD *this, int a2, int **a3, int a4, unsigned __int8 a5, int a6, int a7); int **__thiscall sub_6651F0(_DWORD *this, unsigned __int16 *a2); char __thiscall sub_6652E0(_DWORD *this, _BYTE *a2); _DWORD *__thiscall sub_665400(_DWORD *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_665580(_DWORD *this, unsigned __int8 *a2, int a3, int a4, int a5); void __thiscall sub_6656D0(_DWORD *this); void __thiscall sub_6658E0(int *this, int a2); char __thiscall sub_665B10(int *this, int a2); _DWORD *__thiscall sub_665CB0(_DWORD *this); _DWORD *__thiscall sub_665F60(int *this); _DWORD *__thiscall sub_665FD0(int *this); void __thiscall sub_666040(int *this); void __thiscall sub_6660A0(int *this); void __fastcall sub_666180(int *a1, int a2, float a3); float *__thiscall sub_6664B0(_DWORD *this, float *a2, int a3, int a4, int a5, char a6, char a7); float *__thiscall sub_666700(_DWORD *this, unsigned __int16 *a2); float *__thiscall sub_6668A0(_DWORD *this, unsigned __int16 *a2); char __thiscall sub_666B00(_DWORD *this, unsigned __int8 *a2); char *__fastcall sub_666D90(int *a1, int a2, int a3); char *__fastcall sub_667180(int *a1, int a2, int a3, int a4); char __fastcall sub_667280(int *a1, int a2, unsigned __int8 *a3); _DWORD *__thiscall sub_6674B0(int *this, int a2, void *a3, int a4, int a5, int a6); _DWORD *__thiscall sub_667650(int *this, unsigned __int16 *a2); char __thiscall sub_667760(int *this, _BYTE *a2); char __thiscall sub_6678A0(int *this, _WORD *a2); _DWORD *__thiscall sub_6678E0(int *this); int __cdecl sub_667AC0(int a1); char *__thiscall sub_667AE0(char *this, int a2); void *__thiscall sub_667C30(void *this, char a2); char *__thiscall sub_667C60(char *this, int a2); int __thiscall sub_667CF0(int this, int a2, char a3, char a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); _DWORD *__thiscall sub_667D70(void *this, char a2); int __thiscall sub_667E00(_DWORD *this); _DWORD *__thiscall sub_667E80(_DWORD *this, _DWORD *a2, int a3, int a4, int a5); int __thiscall sub_667EB0(_DWORD *this); _DWORD *__thiscall sub_667F30(void *this, char a2); int __thiscall sub_667FC0(int *this); void __thiscall sub_668000(_DWORD *this, char *a2); _DWORD *__thiscall sub_668190(_DWORD *this, _DWORD *a2, int a3); _DWORD *__cdecl sub_6681D0(_DWORD *a1, int a2, int a3, int a4, _DWORD *a5, int a6, unsigned int a7, _DWORD **a8, int a9, int a10); _DWORD *__cdecl sub_668260(_DWORD *a1, int *a2, int a3, unsigned int a4, int a5, int a6, int a7, _DWORD **a8, int a9, unsigned int a10); unsigned int __thiscall sub_6682F0(_DWORD *this, const void *a2); int __thiscall sub_668390(_DWORD *this); _DWORD *__cdecl sub_6683E0(_DWORD *a1, int **a2, int a3, int a4, _DWORD ***a5, int a6, unsigned int a7, _DWORD ****a8, int a9, int a10); _DWORD *__cdecl sub_668470(_DWORD *a1, int ***a2, int a3, unsigned int a4, int **a5, int a6, int a7, _DWORD ****a8, int a9, unsigned int a10); _DWORD *__thiscall sub_668500(int *this, _DWORD *a2, _DWORD ******a3, int a4, int a5, _DWORD ******a6, int a7, int a8); void __thiscall sub_6686E0(_DWORD *this); _DWORD *__thiscall sub_668770(int *this, _DWORD *a2, _DWORD ********a3, int a4, int a5); _DWORD *__cdecl sub_6687D0(_DWORD *a1); char *sub_6687F0(); char *sub_668810(); signed int __cdecl sub_668830(char a1); LONG __thiscall sub_6688B0(_DWORD *this, int a2, int a3); int __cdecl sub_6689E0(int a1); _DWORD *__thiscall sub_668B20(_DWORD *this, int a2); _DWORD *__thiscall sub_668B50(_DWORD *this); char __thiscall sub_668C50(_DWORD *this); signed int __thiscall sub_668F90(_BYTE *this, int a2, int a3); int __thiscall sub_669010(_DWORD *this, int a2, char a3); _DWORD *__thiscall sub_669170(_DWORD *this, unsigned __int16 a2); _DWORD *__thiscall sub_669410(_DWORD *this, unsigned __int16 a2); void (__thiscall ***__thiscall sub_669780(_DWORD *this, char a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int); int __thiscall sub_669A10(_DWORD *this, int a2, int a3); int __thiscall sub_669B20(_DWORD *this, char a2, char a3, unsigned __int16 a4); void **__thiscall sub_669D20(_DWORD *this, char a2, char a3, unsigned __int16 a4); void **__thiscall sub_669FF0(_DWORD *this, char a2, char a3, unsigned __int16 a4); int *__thiscall sub_66A310(_DWORD *this, unsigned __int8 a2); char __stdcall sub_66A510(char *a1, char a2, int a3, char a4, char a5); char __thiscall sub_66A740(_DWORD *this, unsigned __int8 a2); char __thiscall sub_66B6A0(char *this, unsigned __int8 a2); void (__thiscall ***__thiscall sub_66BA90(_DWORD *this, char a2, char a3, unsigned __int16 a4))(_DWORD, signed int); bool __thiscall sub_66BD40(char *this); int __thiscall sub_66BDA0(_DWORD *this, void (__thiscall ***a2)(_DWORD, signed int), unsigned __int8 a3, char a4); _DWORD *__thiscall sub_66BEB0(_DWORD *this, int a2); _DWORD *__thiscall sub_66C120(_DWORD *this, int a2); int __thiscall sub_66C3B0(_DWORD *this, int a2, char a3, char a4, int a5); int __thiscall sub_66C480(_DWORD *this); int __thiscall sub_66C5D0(_DWORD *this, int a2); int __thiscall sub_66C880(_DWORD *this, char a2, char a3, char a4, char a5, int a6, int a7); char __stdcall sub_66CCE0(int a1, char a2, char a3, int a4); int __thiscall sub_66CEC0(_DWORD *this, _BYTE *a2, unsigned __int8 a3); _DWORD *__thiscall sub_66CFE0(_DWORD *this, char *Src, char a3, char a4, int a5); int __thiscall sub_66D2E0(_DWORD *this, char a2, char a3, char a4, char a5, char a6, const char *a7, int a8); int __thiscall sub_66D370(_DWORD *this, unsigned __int16 a2, char a3); char __thiscall sub_66D5E0(_DWORD *this, char a2, char a3, int a4); char __thiscall sub_66D7F0(_DWORD *this); char __thiscall sub_66D910(char *this); int __thiscall sub_66D990(_DWORD *this); int __thiscall sub_66D9D0(_DWORD *this); void __thiscall sub_66DBD0(_DWORD *this); _DWORD *__thiscall sub_66E1C0(_DWORD *this, char a2, char a3, int a4); _DWORD *__thiscall sub_66E7F0(_DWORD *this); char __thiscall sub_66F050(_DWORD *this, char a2, unsigned __int8 a3); bool __thiscall sub_66F280(_DWORD *this); int sub_66F360(); signed int __stdcall sub_66F380(_DWORD *a1, int a2); LONG __thiscall sub_66F3F0(_DWORD *this, int a2, int a3); void __thiscall sub_66F450(_DWORD *this); void __thiscall sub_66F4E0(_DWORD *this); void __thiscall sub_66F570(_DWORD *this); LONG __stdcall sub_66F600(int a1, char a2, LONG a3); void __thiscall sub_66F6C0(_DWORD *this); void __thiscall sub_66F750(_DWORD *this); void **__thiscall sub_66F7C0(void *this, char a2); void **__thiscall sub_66F800(void *this, char a2); void **__thiscall sub_66F880(void *this, char a2); void **__thiscall sub_66F8C0(void *this, char a2); void **__thiscall sub_66F940(void *this, char a2); void **__thiscall sub_66F980(void *this, char a2); void **__thiscall sub_66FA00(void *this, char a2); void **__thiscall sub_66FA40(void *this, char a2); void **__thiscall sub_66FAC0(void *this, char a2); void **__thiscall sub_66FB00(void *this, char a2); _DWORD *__thiscall sub_66FB80(_DWORD *this); char __cdecl sub_66FBD0(int a1, char a2); int __thiscall sub_66FC20(_DWORD *this, int a2); const CHAR *__cdecl sub_66FC50(char a1); _DWORD *__thiscall sub_66FD10(_DWORD *this, char *a2, unsigned __int8 a3); void (__thiscall ***__thiscall sub_66FDC0(_DWORD *this, int a2, unsigned __int8 a3))(_DWORD, signed int); _DWORD *__thiscall sub_66FE60(_DWORD *this, unsigned __int16 a2); _DWORD *__thiscall sub_66FF10(_DWORD *this, int a2); _DWORD *__thiscall sub_66FFB0(_DWORD *this, int a2); _DWORD *__thiscall sub_670050(_DWORD *this, char *a2); void (__thiscall ***__thiscall sub_670100(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int); int __thiscall sub_670190(_DWORD *this, int a2); int __thiscall sub_670230(_DWORD *this, int a2); int __thiscall sub_6702E0(_DWORD *this, volatile LONG *a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); int __thiscall sub_6703A0(_DWORD *this, volatile LONG *a2, unsigned __int8 a3, unsigned __int16 a4); int __thiscall sub_670460(_DWORD *this, unsigned __int16 a2, volatile LONG *a3); int __thiscall sub_670510(_DWORD *this, volatile LONG *a2); void (__thiscall ***__thiscall sub_6705C0(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int); void (__thiscall ***__thiscall sub_670660(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int); LONG __thiscall sub_670700(_DWORD *this, int a2, int a3); LONG __thiscall sub_670740(_DWORD *this, int a2, int a3); void (__thiscall ***__thiscall sub_670780(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int); LONG __thiscall sub_670820(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int16 a5); _DWORD *sub_670870(); int **__thiscall sub_6708C0(_DWORD *this, int **a2, _DWORD *a3); int __thiscall sub_670930(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_670B70(_DWORD *this, void *a2); int __thiscall sub_670CC0(_DWORD *this, void *a2); int __thiscall sub_670E10(_DWORD *this, void *a2); int __thiscall sub_670F60(_DWORD *this, void *a2); int __thiscall sub_6710B0(_DWORD *this, void *a2); void __cdecl sub_671200(int a1, int a2); int __thiscall sub_671290(_DWORD *this, int a2, int a3, void *a4); _DWORD *__thiscall sub_6713F0(_DWORD *this, _DWORD *a2); int __thiscall sub_6714D0(_DWORD *this, int *a2); int __thiscall sub_6715A0(_DWORD *this, int a2, int a3, void *a4); char *__thiscall sub_671760(_DWORD *this, char *a2); _DWORD *__thiscall sub_671850(_DWORD *this, _DWORD *a2); void __thiscall sub_6718B0(_DWORD *this); int __thiscall sub_671910(_DWORD *this, int a2); void __thiscall sub_671A20(_DWORD *this); void __thiscall sub_671A90(_DWORD *this, int a2, void *a3); void __thiscall sub_671B70(_DWORD *this, int a2, void *a3); void __thiscall sub_671C50(_DWORD *this, int a2, void *a3); void __thiscall sub_671D30(_DWORD *this, int a2, void *a3); void __thiscall sub_671E10(_DWORD *this, int a2, void *a3); int __thiscall sub_671EF0(_DWORD *this, int a2, int a3, int a4, void *a5); _DWORD *__thiscall sub_672170(_DWORD *this, char *a2); void __thiscall sub_672240(void *this, void *a2); int *__thiscall sub_6722E0(_DWORD *this, int *a2, int a3); int __thiscall sub_672590(_DWORD *this, int a2, void *a3, int a4); int *__thiscall sub_6726B0(_DWORD *this, int *a2, int a3, int a4); int __thiscall sub_672770(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_6728D0(_DWORD *this, char *a2); void __thiscall sub_672A30(_DWORD *this); _DWORD *__thiscall sub_672A90(_DWORD *this); char __thiscall sub_672B60(_DWORD **this); char __thiscall sub_672BE0(_DWORD **this, signed int a2, int a3); bool __thiscall sub_672CA0(_DWORD *this, int a2); _DWORD *__thiscall sub_672D60(void *this, char a2); int __thiscall sub_672DF0(_DWORD *this, int a2); // struct Concurrency::IExecutionContext *__thiscall Concurrency::details::UMSThreadVirtualProcessor::GetDefaultDestination(Concurrency::details::UMSThreadVirtualProcessor *__hidden this); idb signed int __thiscall sub_672E10(int this); __int16 __thiscall sub_672EC0(int this, _BYTE *a2); __int16 __thiscall sub_672EE0(int this, _BYTE *a2); __int16 __thiscall sub_672F00(int this); __int16 __thiscall sub_672F10(int this); __int16 __thiscall sub_672F20(int this); char __thiscall sub_672F50(_BYTE *this); char __thiscall sub_672F60(_BYTE *this, char a2); void __thiscall sub_672F70(_DWORD *this, int a2); void __thiscall sub_672FA0(_DWORD *this, int a2); int __thiscall sub_672FD0(char *this); char __thiscall sub_672FE0(_BYTE *this, char a2); int *__thiscall sub_673020(_DWORD *this, int a2); void __thiscall sub_673070(_DWORD *this, int a2); signed int __thiscall sub_673110(int this, const void *a2); char __thiscall sub_673190(void *this, unsigned __int16 a1, char a2); char __thiscall sub_673280(_DWORD *this, int a2); char __thiscall sub_673300(_DWORD *this, int *a2, void **a3, int **a4); int __thiscall sub_6734F0(int this, char a2); int __thiscall sub_673680(int this); signed int __thiscall sub_673720(int this); void __thiscall sub_673940(_DWORD *this); int __thiscall sub_6739A0(_DWORD *this, signed int a2, char a3); void __thiscall sub_673A40(int this, char a2); LONG __thiscall sub_673AC0(_DWORD *this, int a2); void __thiscall sub_673B40(int this, int a2); void __stdcall sub_673BD0(int a1, int a2); int __thiscall sub_673C60(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_673CC0(int this, unsigned __int8 *a2); int __thiscall sub_673E20(_DWORD *this, int a2, char a3); void **__thiscall sub_673EB0(char *this, int a2, char *a3, int a4, char *Src, int a6); // char __userpurge sub_6740D0@(_DWORD *a1@, int a2@, int a3, int a4, void **a5, int a6); char __stdcall sub_674470(int a1, int a2); char __stdcall sub_6744F0(_DWORD *a1, int a2); char __thiscall sub_674620(_DWORD *this, int a2); char __thiscall sub_674690(_DWORD *this, int a2); char __thiscall sub_674700(_DWORD *this, int a2); char __thiscall sub_674770(_DWORD *this, signed int a2, int a3); _DWORD *__cdecl sub_674840(_DWORD *a1); char __thiscall sub_674910(_BYTE *this, unsigned __int8 a2, char a3, char a4, const char *a5, const char *a6); char __thiscall sub_674B40(_DWORD *this); char __thiscall sub_674C60(int this); _DWORD __stdcall nullsub_24(_DWORD, _DWORD); // weak // char __userpurge sub_674DE0@(int a1@, int a2@, int a3); // char __userpurge sub_674FF0@(int a1@, int a2@, int a3); void __cdecl sub_6752D0(_DWORD *a1, _DWORD *a2); char __thiscall sub_675370(int this); char __thiscall sub_6755F0(int this, int a2, int a3); char __stdcall sub_6756D0(_DWORD *a1, unsigned __int8 a2, _DWORD ***a3); _DWORD *__thiscall sub_6759D0(int this, char a2); int __thiscall sub_675A10(_DWORD *this); char __thiscall sub_675B20(_DWORD *this, int a2); void __thiscall sub_675C50(_DWORD *this, int a2); char __thiscall sub_675E10(_DWORD *this, char *a2); void __thiscall sub_6763D0(_DWORD *this); char __thiscall sub_6765B0(_BYTE *this, char *a2); void __stdcall sub_676A40(int a1, const char *a2); void __thiscall sub_676CA0(char *this); char __thiscall sub_676EB0(int this, char *a2); char __thiscall sub_676F20(_BYTE *this, char a2); // void __userpurge sub_677090(int a1@, int a2@, float a3); char __thiscall sub_6771F0(_DWORD *this, _DWORD *a2, int a3, int a4); int __thiscall sub_677490(_DWORD *this); char __thiscall sub_677700(char *this, int a2, int a3, char *a4, int a5, char *Src); char __thiscall sub_677B40(void *this, int a2, int a3); char __thiscall sub_677C30(int this, int a2, int a3); void __thiscall sub_677D10(char *this, char *Src, char *a3); char __thiscall sub_677E70(_DWORD *this, int a2, int a3, int a4, int a5); char __thiscall sub_6780D0(_DWORD *this, int *a2, _DWORD *a3, int a4); char __thiscall sub_678370(_DWORD *this, int a2); char __thiscall sub_6784E0(_DWORD *this, int a2); char __thiscall sub_678650(_DWORD *this, int a2); char __thiscall sub_6787C0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_678870(_BYTE *this); char __thiscall sub_678990(_BYTE *this); char __thiscall sub_678AB0(_BYTE *this); char __thiscall sub_678BD0(int this); char __thiscall sub_678C10(int this); char __thiscall sub_678C50(int this); char __thiscall sub_678C90(int this); char __thiscall sub_678D30(int this); char __thiscall sub_678DD0(int this); char __thiscall sub_678E70(_BYTE *this, int a2, int a3, _BYTE *a4); char __thiscall sub_678F10(_BYTE *this, int a2); char __thiscall sub_678F80(void *this, unsigned __int16 *a2); char __thiscall sub_6790F0(void *this, _DWORD *a2); char __thiscall sub_679990(void *this, __int16 *a2); char __thiscall sub_679A10(int this); char __thiscall sub_679AA0(void *this, int a2); char __thiscall sub_679B00(_DWORD *this, int a2); char __thiscall sub_67A1D0(int this, char a2); char __thiscall sub_67A330(int this); char __thiscall sub_67A440(int this); int *__thiscall sub_67A500(_DWORD *this); char __cdecl sub_67A560(int *a1, float *a2); void *__thiscall sub_67A690(void *this, char a2); _DWORD *__thiscall sub_67A6C0(_DWORD *this); _DWORD *__thiscall sub_67A720(_DWORD *this, int a2, int a3, int a4); char *sub_67A780(); void *__thiscall sub_67A790(void *this, char a2); unsigned int __thiscall sub_67A7C0(_DWORD *this, int a2, int a3, _DWORD *a4); char __thiscall sub_67A810(_DWORD *this, int a2, int a3, int a4, int a5); unsigned int __thiscall sub_67A890(_DWORD *this, int a2, int a3); void __cdecl sub_67A8C0(int *a1, int *a2, int *a3); void __thiscall sub_67A930(_DWORD *this, int a2); void __thiscall sub_67A980(_DWORD *this, int a2); int __thiscall sub_67A9D0(int this); char __thiscall sub_67AA20(_DWORD *this, int a2); int __thiscall sub_67AA90(_DWORD *this); _DWORD *__thiscall sub_67AB10(void *this, char a2); _DWORD *__thiscall sub_67ABA0(_DWORD *this, _DWORD *a2, int *a3); int __thiscall sub_67AC30(_DWORD *this); int __cdecl sub_67ACB0(unsigned int a1); int __cdecl sub_67ACD0(__int16 a1); _DWORD *__thiscall sub_67AD30(void *this, char a2); char **__stdcall sub_67ADC0(char *a1, int a2, int a3); _DWORD *__cdecl sub_67AE20(_DWORD *a1, int *a2, int *a3, _BYTE *a4); void __stdcall sub_67AEC0(void *a1); void __thiscall sub_67AF00(_DWORD *this); int **__thiscall sub_67AF30(_DWORD *this, int **a2, _DWORD *a3); char **__thiscall sub_67AFA0(char **this, int a2); signed int __stdcall sub_67AFF0(int a1, char **a2); signed int __stdcall sub_67B060(int a1, char **a2); signed int __stdcall sub_67B0D0(int a1, char **a2); int __thiscall sub_67B150(_DWORD *this, int a2, char *a3); int __cdecl sub_67B1C0(int, void *); // idb void *__thiscall sub_67B2D0(void *this, char a2); void __thiscall sub_67B300(_DWORD *this); _DWORD *__thiscall sub_67B380(_DWORD *this, int a2, int a3, char a4); int __thiscall sub_67B480(int this, int a2, int a3); bool __thiscall sub_67B570(float *this, int a2, int a3); _DWORD *__thiscall sub_67B590(int this, _DWORD *a2); int __thiscall sub_67B5C0(char *this); BOOL __thiscall sub_67B5D0(_BYTE *this); int __thiscall sub_67B5E0(_DWORD *this); signed int __thiscall sub_67B600(_DWORD *this); int __thiscall sub_67B660(_DWORD *this, int a2); int __thiscall sub_67B690(_DWORD *this, int a2); __int16 __thiscall sub_67B6A0(_WORD *this, __int16 a2); int __thiscall sub_67B6C0(_DWORD *this); bool __thiscall sub_67B6E0(_DWORD *this); int __thiscall sub_67B700(int this, _DWORD *a2); char __thiscall sub_67B750(int this, char a2, __int16 a3); bool __thiscall sub_67B770(_BYTE *this); __int16 __thiscall sub_67B780(_WORD *this); int sub_67B790(); _DWORD *__thiscall sub_67B7A0(_DWORD *this); void __thiscall sub_67B910(_DWORD *this); char __thiscall sub_67B9D0(_WORD *this, int a2); char __thiscall sub_67BD40(void *this, float a2); void __thiscall sub_67BE00(_DWORD *this, int a2); void __thiscall sub_67BE90(_DWORD *this, float a2, float a3, int a4); char __thiscall sub_67BF50(float *this); char __thiscall sub_67C060(int this); int __thiscall sub_67C150(int this); char __thiscall sub_67C2B0(float *this); bool __thiscall sub_67C390(float *this); bool __thiscall sub_67C450(void *this, float *a2); char __thiscall sub_67C4F0(_DWORD *this, char a2, __int16 a3); void __thiscall sub_67C680(float *this); signed int __stdcall sub_67C8C0(unsigned __int16 *a1); // int __userpurge sub_67C980@(int a1@, double a2@, float *a3); _DWORD *__thiscall sub_67CA20(_DWORD *this, unsigned int a2, unsigned int a3, int a4); bool __thiscall sub_67CAB0(_DWORD *this); char __thiscall sub_67CB10(_DWORD *this); bool __thiscall sub_67CC20(_DWORD *this); bool __thiscall sub_67CC40(_DWORD *this, _DWORD *a2); int __thiscall sub_67CD10(_DWORD *this); void __thiscall sub_67CD50(_DWORD *this); char __thiscall sub_67CDA0(_DWORD **this, int a2); void __thiscall sub_67CE30(int this); char __thiscall sub_67D1B0(int this, int a2); char __thiscall sub_67D370(_DWORD *this, _BYTE *a2); int __thiscall sub_67D510(_DWORD *this); void __thiscall sub_67D5B0(_DWORD *this); int __thiscall sub_67D710(float *this, float a2); void __thiscall sub_67D830(int this); void __thiscall sub_67D890(_DWORD *this, int a2); int __thiscall sub_67DA80(_DWORD *this, int a2); char __thiscall sub_67DDD0(void *this); int __thiscall sub_67DFC0(char *this); char *__thiscall sub_67DFD0(_DWORD *this, char a2); int __thiscall sub_67E120(int this, int a2); float *__thiscall sub_67E1B0(float *this); void __thiscall sub_67E1D0(_DWORD *this); int __thiscall sub_67E1E0(float *this, float a2); void __thiscall sub_67E2A0(int this, float a2); void __thiscall sub_67E2C0(float *this, float a2); char __thiscall sub_67E2D0(_BYTE *this); double __thiscall sub_67E2E0(float *this); int __thiscall sub_67E2F0(_DWORD *this, int *a2); int __thiscall sub_67E330(char *this); int __thiscall sub_67E340(char *this); int __thiscall sub_67E350(char *this); _DWORD *__thiscall sub_67E360(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_67E380(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_67E3A0(_DWORD *this, _DWORD *a2); void __thiscall sub_67E3C0(void *this, float a2, int a3, int a4); int __thiscall sub_67E410(void *this, float a2, int a3); int __thiscall sub_67E430(float *this, float *a2, float *a3); int __thiscall sub_67E470(float *this, float *a2); _DWORD *__thiscall sub_67E4A0(int this, _DWORD *a2); void *__thiscall sub_67E4C0(void *this, char a2); _DWORD *__thiscall sub_67E4F0(_DWORD *this); int __thiscall sub_67E530(float *this, char a2); // char __usercall sub_67E580@(int a1@, int a2@, int a3@); void __stdcall sub_67E5A0(int a1); _DWORD *__thiscall sub_67E5B0(_DWORD *this, char a2); signed int __cdecl sub_67E600(char a1); int sub_67E850(); int sub_67E8C0(); _DWORD *__cdecl sub_67E950(int a1); _DWORD *__cdecl sub_67E9D0(int a1); int sub_67EC50(); // int __usercall sub_67EDE0@(int a1@, char a2, char a3, char a4, char a5, char a6, int a7, char a8, int a9); _DWORD *__cdecl sub_67EEC0(int a1); _DWORD *__cdecl sub_67F010(int a1); _DWORD *__cdecl sub_67F160(int a1); _DWORD *__cdecl sub_67F2B0(int a1); void *__thiscall sub_67F4F0(void *this, char a2); _DWORD *__thiscall sub_67F520(void *this, char a2); int __cdecl sub_67F5B0(char a1, char a2, char a3, char a4, char a5, unsigned __int16 a6); // int *__usercall sub_67F8F0@(int a1@, int a2@, int a3, char a4, char a5, char a6, char a7, char a8, int a9, int a10); int __cdecl sub_67FC50(char a1, char a2, char a3, char a4); int __thiscall sub_67FCC0(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_67FE20(_DWORD *this, int a2, int a3, void *a4); _DWORD *__thiscall sub_67FF90(_DWORD *this, char *a2); int __thiscall sub_680000(_DWORD *this, _DWORD *a2); int __thiscall sub_680080(_DWORD *this, _WORD *a2); void __thiscall sub_680110(_DWORD *this, __int16 a2); char **__thiscall sub_680250(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); void __thiscall sub_680370(_DWORD *this); char **__stdcall sub_6804E0(char *a1, int a2, int a3); int __thiscall sub_680560(_DWORD *this, int a2); int __thiscall sub_680580(_DWORD *this, char a2); int __thiscall sub_6805D0(int this); void *__thiscall sub_680620(_DWORD *this, void *a2, int a3); char __thiscall sub_680660(_BYTE *this); char __thiscall sub_680670(_BYTE *this, char a2); signed int __thiscall sub_680680(_DWORD *this); int __thiscall sub_6806D0(_DWORD *this, char a2); int __thiscall sub_680740(char *this); _DWORD *__thiscall sub_680750(int this, _DWORD *a2); int __thiscall sub_680770(char *this); void __thiscall sub_680780(int this, const void *a2); int __thiscall sub_6807A0(char *this); int __thiscall sub_6807B0(char *this); _DWORD *__thiscall sub_6807C0(_DWORD *this, _DWORD *a2); char __thiscall sub_6807E0(_BYTE *this); char __thiscall sub_6807F0(_BYTE *this, char a2); int __thiscall sub_680810(char *this); char __thiscall sub_680820(_BYTE *this, char a2); char __thiscall sub_680840(_BYTE *this); char __thiscall sub_680850(_BYTE *this, char a2); char __thiscall sub_680860(_BYTE *this, char a2); int __thiscall sub_680870(_DWORD *this, int a2, int a3); int __thiscall sub_680890(unsigned __int8 *this); char __thiscall sub_6808A0(_BYTE *this, char a2); __int64 __thiscall sub_6808B0(int this); __int64 __thiscall sub_6808C0(int this); __int64 __thiscall sub_6808D0(int this); unsigned int __thiscall sub_6808E0(int this, unsigned int a2); unsigned int __thiscall sub_680900(int this, unsigned int a2); void __thiscall sub_680940(int this, const void *a2); int __thiscall sub_680960(int this); int __thiscall sub_680970(int this); int __thiscall sub_680980(int this); int __thiscall sub_6809A0(int this); int __thiscall sub_6809B0(int this); int __thiscall sub_6809C0(int this); int __thiscall sub_6809D0(int this); int __thiscall sub_6809E0(int this); int __thiscall sub_6809F0(int this); int __thiscall sub_680A00(int this); int __thiscall sub_680A10(int this); int __thiscall sub_680A20(int this); int __thiscall sub_680A30(int this); int __thiscall sub_680AA0(int this); int __thiscall sub_680AB0(int this); int __thiscall sub_680AC0(int this); int __thiscall sub_680AE0(int this); int __thiscall sub_680AF0(int this); int __thiscall sub_680B00(int this); int __thiscall sub_680B10(int this); int __thiscall sub_680B20(int this); int __thiscall sub_680B30(int this); int __thiscall sub_680B40(int this); int __thiscall sub_680B50(int this); int __thiscall sub_680B60(int this); int __thiscall sub_680B70(int this); int __thiscall sub_680BE0(int this); int __thiscall sub_680BF0(int this); int __thiscall sub_680C10(int this); void __thiscall sub_680C20(int this, unsigned int a2); int __thiscall sub_680C90(int this, int a2); int __thiscall sub_680CA0(int this, int a2); _DWORD __stdcall nullsub_25(_DWORD); // weak int __thiscall sub_680CC0(int this); int __thiscall sub_680CD0(int this); int __thiscall sub_680CF0(int this); int __thiscall sub_680D20(int this); int __thiscall sub_680D30(int this); __int16 __thiscall sub_680DC0(int this, __int16 a2); __int16 __thiscall sub_680DE0(int this, __int16 a2); __int64 __thiscall sub_680E60(_QWORD *this); int __thiscall sub_680E70(_DWORD *this, int a2, int a3); signed __int64 __cdecl sub_680E90(__int64 a1); signed __int64 __cdecl sub_680EB0(__int64 a1); signed __int64 __cdecl sub_680F00(__int64 a1); signed __int64 __cdecl sub_680F60(__int64 a1); signed __int64 __cdecl sub_680FA0(__int64 a1, __int64 a2, __int64 a3, __int64 a4); unsigned __int16 *__thiscall sub_680FF0(char *this, unsigned __int16 *a2); int __thiscall sub_681440(int this, int *a2); int __thiscall sub_6814E0(char *this); int __thiscall sub_6814F0(unsigned __int8 *this, char a2); char __thiscall sub_681560(int this); int __thiscall sub_681580(char *this); void __thiscall sub_681590(int this, const void *a2); int __thiscall sub_6815B0(_DWORD *this, int a2, int a3); int __thiscall sub_6815D0(_DWORD *this, int a2, int a3); __int64 __thiscall sub_6815F0(_QWORD *this); __int64 __thiscall sub_681600(_QWORD *this); int __thiscall sub_681610(_DWORD *this, char a2); int __thiscall sub_681780(_DWORD *this, _DWORD *a2); int __thiscall sub_681C50(_BYTE *this, char a2, int a3); int __thiscall sub_681CC0(_DWORD *this, _DWORD *a2); void __thiscall sub_681D90(_DWORD *this); char __thiscall sub_681E30(_DWORD *this, int a2); void __thiscall sub_681E70(_DWORD *this, _BYTE *a2); void __thiscall sub_6820C0(_DWORD *this, _BYTE *a2); int __thiscall sub_682310(int this); char *__thiscall sub_6824C0(char *this, int a2); _DWORD *__thiscall sub_6824D0(_DWORD *this); void *__thiscall sub_682500(void *this, char a2); void __thiscall sub_682530(void *); // idb _DWORD *__thiscall sub_682560(_DWORD *this, int a2); int __thiscall sub_682620(_DWORD *this); _DWORD *__thiscall sub_6826A0(void *this, char a2); char *__thiscall sub_682730(char *this, int a2); void *__thiscall sub_682820(void *this, char a2); bool __thiscall sub_682850(void *this, int a2); int __stdcall sub_6828A0(int a1); int sub_6828C0(); int __cdecl sub_6828E0(int a1); int __thiscall sub_682990(unsigned __int16 *this); bool __thiscall sub_6829E0(_DWORD *this); bool __thiscall sub_682B10(_DWORD *this); int __thiscall sub_682BC0(_DWORD *this); int __thiscall sub_682C20(_DWORD *this, __int16 a2); int __thiscall sub_682C80(_DWORD *this, int a2); int __thiscall sub_682CF0(_DWORD *this, int a2); void (__thiscall ***__thiscall sub_682DC0(_DWORD *this, int a2))(_DWORD, signed int); void __thiscall sub_682EA0(_DWORD *this); int __thiscall sub_682FB0(_DWORD *this); char __thiscall sub_683050(_DWORD *this, _DWORD *a2); void __thiscall sub_6830D0(_DWORD *this, int a2); int __thiscall sub_6831E0(_DWORD *this, int a2); void (__thiscall ***__thiscall sub_6832F0(_DWORD *this, int a2))(_DWORD, signed int); void **__thiscall sub_6833A0(_DWORD *this, _DWORD *a2, void *a3, char a4, char a5); _DWORD *__thiscall sub_6834E0(_DWORD *this); char __thiscall sub_683600(_DWORD *this, int a2, _DWORD *a3, char a4, _DWORD *a5, char a6); char __thiscall sub_6838D0(_DWORD *this, unsigned int *a2); void *__thiscall sub_683950(void *this, char a2); void __thiscall sub_6839A0(_BYTE *this); void __thiscall sub_683A70(_BYTE *this); void __thiscall sub_683B20(_BYTE *this, int a2); _DWORD *__thiscall sub_683B40(void *this, char a2); int __thiscall sub_683BD0(_DWORD *this); void **__thiscall sub_683C50(void *this, char a2); void **__thiscall sub_683C90(void *this, char a2); void *__thiscall sub_683D10(void *this, char a2); void **__thiscall sub_683D40(void *this, char a2); void **__thiscall sub_683D80(void *this, char a2); void *__thiscall sub_683E00(void *this, char a2); int __thiscall sub_683E70(_DWORD *this); _DWORD *__thiscall sub_683EF0(void *this, char a2); void *__thiscall sub_683F80(void *this, char a2); bool __thiscall sub_683FE0(_DWORD *this, int a2, int a3); signed int __stdcall sub_684030(char a1, _DWORD **a2); void **__thiscall sub_684050(void **this); char __thiscall sub_684160(_DWORD *this); char __thiscall sub_684480(_DWORD *this, int a2); signed int __thiscall sub_6844B0(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8); void *sub_684680(); _DWORD *__thiscall sub_684690(void *this, char a2); bool __stdcall sub_684730(int a1); void __thiscall sub_684760(int *this); void __thiscall sub_6847B0(int *this); void __thiscall sub_684800(int *this); void __thiscall sub_684850(int *this); void __thiscall sub_6848A0(_DWORD *this); void __thiscall sub_684900(_DWORD *this); void __thiscall sub_684960(int *this); void __thiscall sub_6849B0(int *this); void __thiscall sub_684A00(int *this); void __thiscall sub_684A50(int *this); bool __thiscall sub_684AA0(_DWORD *this, int a2, unsigned int a3, int a4); int __thiscall sub_684CE0(_DWORD *this); int __thiscall sub_684D30(_DWORD *this); int __thiscall sub_684D60(_DWORD *this); int __thiscall sub_684D70(_DWORD *this); int __thiscall sub_684DB0(_DWORD *this); bool __stdcall sub_684DD0(int a1); bool __stdcall sub_684E30(int a1); bool __stdcall sub_684EB0(int a1); bool __stdcall sub_684F00(int a1); void __thiscall sub_684F90(_DWORD *this); void __thiscall sub_684FF0(_DWORD *this); char __thiscall sub_685060(_DWORD *this, __int16 a2); void __thiscall sub_6850C0(_DWORD *this, unsigned __int16 a2); int __thiscall sub_685140(_DWORD *this); bool __thiscall sub_685240(_DWORD *this, int a2); int __thiscall sub_6854B0(_DWORD *this, __int16 a2); int __thiscall sub_685510(_DWORD *this, __int16 a2); int __thiscall sub_685590(char *this, __int16 a2); int __thiscall sub_685620(char *this); int __thiscall sub_6856E0(char *this); char __thiscall sub_6857A0(char *this, _WORD *a2); char __thiscall sub_685860(char *this, _WORD *a2); char __thiscall sub_685920(char *this, _WORD *a2); unsigned int __thiscall sub_6859E0(char *this, int a2); int __thiscall sub_685A90(_DWORD *this, int a2); signed int __thiscall sub_685BB0(char *this, __int16 a2); unsigned int __thiscall sub_685BE0(char *this, _WORD *a2); void __thiscall sub_685CC0(int this); void __thiscall sub_685E00(int *this); LONG __thiscall sub_685E60(_DWORD *this, LONG a2, int a3, unsigned int a4); void __thiscall sub_686010(int *this); signed int __thiscall sub_686030(int *this, unsigned __int8 *a2, int a3); bool __stdcall sub_6862A0(int a1); __int16 __thiscall sub_686330(_DWORD *this); char *__thiscall sub_686370(_DWORD *this); char __thiscall sub_6863C0(char *this); int __thiscall sub_686420(char *this); int __thiscall sub_686470(int this); void __thiscall sub_686600(int *this); char __thiscall sub_686650(char *this, _WORD *a2); LONG __thiscall sub_686860(_DWORD *this, int a2, LONG a3); LONG __thiscall sub_6868C0(_DWORD *this, int a2, LONG a3); LONG __thiscall sub_686920(_DWORD *this, int a2, LONG a3); LONG __thiscall sub_686980(_DWORD *this, int a2, LONG a3); int __thiscall sub_6869F0(char *this); char __thiscall sub_686A50(_BYTE *this, unsigned __int8 a2); unsigned __int8 __thiscall sub_686A70(_BYTE *this, unsigned __int8 a2, char a3); _DWORD *__thiscall sub_686A90(_DWORD *this, const void *a2); _DWORD *__cdecl sub_686B80(unsigned __int16 *a1, int *a2); _DWORD *__cdecl sub_6876E0(unsigned __int16 *a1); _DWORD *__cdecl sub_688200(unsigned __int8 *a1, _WORD *a2, _DWORD *a3); _DWORD *__cdecl sub_688E00(int a1, _WORD *a2, _DWORD *a3); _DWORD *__cdecl sub_6899D0(unsigned __int16 a1); int __thiscall sub_689A90(_DWORD *this); int __thiscall sub_689AC0(_DWORD *this); int __cdecl sub_689AF0(_BYTE *a1, const void *a2); int __cdecl sub_689B30(_BYTE *a1, const void *a2); int __cdecl sub_689B70(_BYTE *a1, const void *a2); int __cdecl sub_689BB0(int a1, _BYTE *a2); signed int __cdecl sub_689BE0(int a1, _DWORD *a2); signed int __cdecl sub_689C10(int a1, int a2); int __thiscall sub_689C50(_DWORD *this); bool __thiscall sub_689C60(int this, int a2); bool __thiscall sub_689C90(void *this); char sub_689CA0(); int __thiscall sub_689CB0(int this, unsigned __int8 a2); char sub_689CC0(); int __thiscall sub_689CD0(_WORD *this, unsigned __int8 a2); int __thiscall sub_689CE0(unsigned __int16 *this); char sub_689CF0(); signed int sub_689D00(); int __thiscall sub_689D10(unsigned __int8 *this); int __thiscall sub_689D20(char *this); int __thiscall sub_689D30(char *this); char __thiscall sub_689D40(_BYTE *this); char sub_689D50(); signed int sub_689D60(); int __thiscall sub_689D70(char *this); int __thiscall sub_689D80(char *this); char __thiscall sub_689D90(_BYTE *this); char sub_689DA0(); int __thiscall sub_689DB0(int this, int a2); int __thiscall sub_689DC0(_DWORD *this); char sub_689DD0(); int __thiscall sub_689DE0(char *this); char __thiscall sub_689DF0(_BYTE *this); char sub_689E00(); char sub_689E10(); char sub_689E20(); char sub_689E30(); signed int sub_689E40(); char sub_689E50(); signed int sub_689E60(); char sub_689E70(); char sub_689E80(); char __thiscall sub_689E90(_BYTE *this, char a2); char sub_689EA0(); int __thiscall sub_689EB0(unsigned __int8 *this); char sub_689EC0(); char sub_689ED0(); char sub_689EE0(); char sub_689EF0(); signed int sub_689F00(); int __thiscall sub_689F10(char *this); char sub_689F20(); signed int sub_689F30(); int __thiscall sub_689F40(char *this); char sub_689F50(); char sub_689F60(); char sub_689F70(); char sub_689F80(); char sub_689F90(); char sub_689FA0(); char sub_689FB0(); char sub_689FC0(); char sub_689FD0(); signed int sub_689FE0(); int __thiscall sub_689FF0(char *this); int __thiscall sub_68A000(unsigned __int8 *this); char sub_68A010(); char sub_68A020(); char sub_68A030(); signed int sub_68A040(); char sub_68A050(); signed int sub_68A060(); int __thiscall sub_68A070(unsigned __int16 *this); int __thiscall sub_68A080(unsigned __int8 *this); int __thiscall sub_68A090(int this); char sub_68A0A0(); signed int sub_68A0B0(); int __thiscall sub_68A0C0(int this); int __thiscall sub_68A0D0(unsigned __int8 *this); char sub_68A0E0(); char sub_68A0F0(); char sub_68A100(); int __thiscall sub_68A110(int this); bool __thiscall sub_68A120(_BYTE *this); signed int sub_68A130(); char sub_68A140(); signed int sub_68A150(); int __thiscall sub_68A160(char *this); bool __cdecl sub_68A170(int a1); bool __cdecl sub_68A1C0(int a1); bool __cdecl sub_68A1E0(int a1); bool __cdecl sub_68A230(int a1); bool __cdecl sub_68A250(int a1); char sub_68A270(); bool __cdecl sub_68A280(int a1); bool __cdecl sub_68A2A0(int a1); bool __cdecl sub_68A2C0(int a1); unsigned int sub_68A8F0(); unsigned int sub_68AED0(); void *__stdcall sub_68B040(char *a1); int __thiscall sub_68B0A0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); int __cdecl sub_68B120(int a1, const void **a2, int *a3); int __thiscall sub_68B160(void **this, int a2, void *a3); void __thiscall sub_68B1D0(int this); int __thiscall sub_68B280(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_68B400(_DWORD **this, int a2); int __thiscall sub_68B470(void *this, int a2, int a3); int __thiscall sub_68B4C0(void *this); _BYTE *__thiscall sub_68B510(_BYTE *this); // int __usercall sub_68B570@(int a1@, int a2@); char __thiscall sub_68B650(_DWORD *this, unsigned __int16 a2, char a3); char __thiscall sub_68B6C0(volatile LONG **this, int a2); void __thiscall sub_68BEB0(int this); char __thiscall sub_68BFA0(int *this); char __thiscall sub_68C090(int *this); int __thiscall sub_68C180(int this, unsigned __int16 a2); void __thiscall sub_68C230(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_68C2E0(int *this); __int16 __thiscall sub_68C320(int this, unsigned __int8 a2); volatile LONG *__cdecl sub_68C380(int a1); void *__thiscall sub_68C4B0(void *this, char a2); int __stdcall sub_68C510(_DWORD *a1); int __stdcall sub_68C540(_DWORD *a1); void sub_68C570(); void __thiscall sub_68C5B0(_DWORD *this, float a2); void __stdcall sub_68C8E0(int a1); void __stdcall sub_68CA40(int a1); char __stdcall sub_68CBC0(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_68CCB0(int a1); void *__thiscall sub_68CDA0(void *this, char a2); void *__thiscall sub_68CE00(void *this, char a2); void *__thiscall sub_68CE50(void *this, char a2); int *__thiscall sub_68CE80(int *this, int *a2); _DWORD *__thiscall sub_68CEC0(_DWORD *this); char __thiscall sub_68CF70(_DWORD *this, int a2); float *__thiscall sub_68D0A0(float *this, int a2, char a3); char __thiscall sub_68D190(_DWORD *this); char __thiscall sub_68D370(_DWORD *this, int a2, int *a3); unsigned int __thiscall sub_68D4C0(_DWORD *this, int a2); _DWORD *__thiscall sub_68D700(void *this, char a2); int *__thiscall sub_68D760(void *this, char a2); char sub_68D810(); void __thiscall sub_68D820(_DWORD *this); void __thiscall sub_68D8C0(int this, float a2); int __thiscall sub_68D950(_DWORD); // weak void __thiscall sub_68D960(float *this, _DWORD *a2); char __thiscall sub_68D9F0(float *this, _DWORD *a2); int __thiscall sub_68DAF0(_DWORD *this); _DWORD *__thiscall sub_68DBF0(_DWORD *this); void *__thiscall sub_68DC40(void *this, char a2); _DWORD *__thiscall sub_68DC70(void *this, char a2); int __thiscall sub_68DD00(_DWORD *this); int __thiscall sub_68DD80(_DWORD *this); _DWORD *__thiscall sub_68DE00(void *this, char a2); void *__thiscall sub_68DE90(void *this, char a2); int __thiscall sub_68DEC0(_DWORD *this, _DWORD *a2); char __thiscall sub_68DEE0(_BYTE *this, char a2); char __thiscall sub_68DEF0(_BYTE *this); int __thiscall sub_68DF00(char *this); _DWORD *__thiscall sub_68DF10(_DWORD *this); LONG __thiscall sub_68DF90(_DWORD *this); double __thiscall sub_68E050(float *this); int __thiscall sub_68E060(_DWORD *this); int __thiscall sub_68E070(int this, float a2); char __thiscall sub_68E0D0(_DWORD *this, int a2); char __thiscall sub_68E0E0(_DWORD *this, char *Src, int a3, int a4); int __thiscall sub_68E2B0(void *this, float a2); void *__thiscall sub_68E2D0(void *this, char a2); char sub_68E300(); _DWORD sub_68E310(); // weak int __thiscall sub_68E330(_DWORD); // weak int __thiscall sub_68E340(_DWORD *this, int a2); LONG __thiscall sub_68E530(_DWORD *this); void __thiscall sub_68E670(_DWORD *this, int a2, int a3); float *__thiscall sub_68E760(float *this, int a2, void *a3, int a4, int a5); // int __userpurge sub_68E990@(int a1@, int a2@, int a3@, int a4); void __thiscall sub_68EB20(_DWORD *this, int a2); void *__thiscall sub_68EB70(void *this, char a2); // _DWORD __thiscall DNameNode::DNameNode(DNameNode *__hidden this); idb void __thiscall sub_68EBD0(_DWORD *this); char __thiscall sub_68EC40(_DWORD *this, int a2); void __thiscall sub_68ED70(signed int *this, float a2); void *__thiscall sub_68EE50(void *this, char a2); unsigned int __thiscall sub_68EEB0(int *this, signed int a2); int __stdcall sub_68EEC0(int a1); int __thiscall sub_68EED0(void *this, int a2); int __stdcall sub_68EEE0(int a1); bool __thiscall sub_68EEF0(void *this, int a2); void __thiscall sub_68EF10(_DWORD *this); _DWORD *__thiscall sub_68EF60(_DWORD *this); char __thiscall sub_68EFB0(char *this, float a2, float a3); // int __userpurge sub_68F0A0@(_DWORD *a1@, int a2@, int a3@, float a4@, float a5); _DWORD *__thiscall sub_68F150(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_68F180(_DWORD *this, _DWORD *a2); // int *__userpurge sub_68F1B0@(int a1@, int a2@, int *a3, int a4); LONG __cdecl sub_68F200(_DWORD *a1); int __thiscall sub_68F2C0(_DWORD *this, char *a2, int a3); LONG __cdecl sub_68F420(int a1, _DWORD *a2); void __thiscall sub_68F530(int *this); _DWORD *__thiscall sub_68F6A0(void *this, _DWORD **a2); unsigned int __thiscall sub_68F840(char *this, _DWORD *a2); // void __noreturn std::vector>::_Xlen(); weak void __thiscall sub_68F950(_DWORD *this); void __thiscall sub_68F9B0(_DWORD *this, signed int a2); int __thiscall sub_690100(int this); void __thiscall sub_690130(void **this); _DWORD *__thiscall sub_6909B0(_DWORD *this); _DWORD *__cdecl sub_6910C0(_DWORD *a1); int __cdecl sub_6910E0(int a1); int __cdecl sub_691100(int a1); _DWORD *__cdecl sub_691120(_DWORD *a1); _DWORD *__thiscall sub_691140(_DWORD *this); _DWORD *__thiscall sub_691190(_DWORD *this); void *sub_6911F0(); void *__thiscall sub_691200(void *this, char a2); void *__thiscall sub_691240(void *this, char a2); void __thiscall sub_691270(_DWORD *this); _DWORD *__thiscall sub_6912E0(void *this, char a2); void __thiscall sub_691330(_DWORD *this); int __thiscall sub_6913C0(_DWORD *this, _DWORD *a2); int __cdecl sub_691420(int a1); void __thiscall sub_691440(void *); // idb void __thiscall sub_691450(void *); // idb _DWORD *__thiscall sub_6914E0(_DWORD *this, int a2); _DWORD *__thiscall sub_691540(_DWORD *this, int a2); _DWORD *__thiscall sub_6915A0(_DWORD *this, int a2); void *__thiscall sub_691600(void *this, char a2); _DWORD **__cdecl sub_691680(void *a1, int a2); unsigned int __cdecl sub_6917A0(unsigned int *a1, unsigned int *a2, unsigned int *a3); _DWORD *__cdecl sub_6918A0(_DWORD *a1, int a2, int a3, _DWORD *a4); int *__thiscall sub_691960(_DWORD *this, int *a2, int a3); void __stdcall sub_691BB0(void *a1); void __stdcall sub_691BF0(void *a1); unsigned int __cdecl sub_691C30(unsigned int *a1, unsigned int *a2, unsigned int *a3); _DWORD *__cdecl sub_691CE0(_DWORD *a1, int a2, int a3, _DWORD *a4); void __thiscall sub_691DA0(void **this); int __thiscall sub_691E30(_DWORD *this); unsigned int **__cdecl sub_691E80(unsigned int **a1, unsigned int *a2, unsigned int *a3); _DWORD *__cdecl sub_692220(_DWORD *a1, int a2, char a3); void *sub_692310(); int *__thiscall sub_692320(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); int *__thiscall sub_6923C0(_DWORD *this, int *a2, int a3); void __stdcall sub_692640(void *a1); int __cdecl sub_6926A0(int *a1, int a2); void **__thiscall sub_6926F0(void *this, char a2); int *__thiscall sub_692790(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_692850(_DWORD *this); void __thiscall sub_6928B0(_DWORD *this); int __cdecl sub_692910(void *, int, int, int); // idb void __thiscall sub_692A00(_DWORD *this); _DWORD *__thiscall sub_692A60(_DWORD *this); void __thiscall sub_692B60(_DWORD *this); _DWORD *__thiscall sub_692BC0(_DWORD *this); int __thiscall nullsub_26(_DWORD); // weak void __thiscall sub_692EB0(float *this, float a2); void __thiscall sub_692ED0(float *this, float a2); void __thiscall sub_692EF0(float *this, float a2); void __thiscall sub_692F40(float *this, float a2); void __stdcall sub_692FB0(float a1, int a2); int __thiscall sub_693030(char *this); void __thiscall sub_693040(void *this, signed int a2, signed int a3); void __thiscall sub_693050(void *this, int a2); void __thiscall sub_6930F0(int this, int a2, int a3, int a4, float a5, float a6, float a7); void __thiscall sub_6931A0(float *this, float a2, float a3, float a4); int __thiscall sub_693270(void *this, int a2); void __thiscall sub_6932E0(float *this, float a2); char __thiscall sub_6934F0(float *this, float a2, float a3); void __thiscall sub_693810(_DWORD *this); void __thiscall sub_693890(float *this, float a2, float a3); char __thiscall sub_6938C0(int this, char a2, int a3, int a4, char a5, int a6, int a7); // int __userpurge sub_693C50@(int a1@, int a2@, int a3@, int a4@, float a5); float *__thiscall sub_694490(float *this, float *a2); float *__thiscall sub_6944B0(float *this, float *a2); void *__thiscall sub_6944D0(int this, int *a2, int a3); int *__thiscall sub_694590(int *this, int a2); void __thiscall sub_694610(_DWORD *this); // float *__usercall sub_694620@(float *a1@, float *a2@); _DWORD *__thiscall sub_6946A0(_DWORD **this, _DWORD *a2); void __thiscall sub_6946D0(_DWORD **this, float a2); int __thiscall sub_694720(_DWORD **this, char a2); _DWORD *__thiscall sub_694750(_DWORD *this, _DWORD *a2); int __thiscall sub_6948D0(_DWORD *this); _DWORD *__thiscall sub_694950(_DWORD *this, float a2); char __thiscall sub_694A10(void *this); float *__thiscall sub_694F40(float *this, float *a2); float *__thiscall sub_694FD0(float *this, float *a2); char __thiscall sub_6950D0(char *this, size_t a2); int __cdecl sub_695210(int a1); bool __thiscall sub_695230(void *this); char __thiscall sub_695260(float *this, int a2); void __cdecl sub_695330(int a1, _DWORD **a2); void __cdecl sub_695560(int a1, _DWORD **a2); _DWORD __stdcall sub_695790(char); // weak void __thiscall sub_697160(_DWORD *this, int a2); unsigned int __thiscall sub_6971E0(char *this, unsigned __int8 *a2, unsigned int a3, unsigned int a4); _DWORD *__thiscall sub_697270(_DWORD *this); _DWORD *__thiscall sub_6972D0(_DWORD *this, int a2); int __thiscall sub_697330(_DWORD *this, _DWORD *a2); void __stdcall sub_697390(void *a1); int __thiscall sub_6973D0(_DWORD *this, int a2, char a3, int a4, void *a5); char **__stdcall sub_6975F0(char *a1, int a2); int __thiscall sub_697640(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_697870(_DWORD *this); char *__thiscall sub_6978C0(_DWORD *this, char *a2); int __thiscall sub_697930(_DWORD *this, int a2, void *a3, int a4); void __thiscall sub_697A10(_DWORD *this); int __thiscall sub_697A40(_DWORD *this, int a2, int a3, void *a4); _DWORD *__thiscall sub_697BA0(_DWORD *this, char *a2); int __thiscall sub_697C20(_DWORD *this, int a2, char *a3, int a4); signed int __stdcall sub_697D00(int a1, char **a2); signed int __stdcall sub_697D70(int a1, char **a2); void __thiscall sub_697DE0(_DWORD *this, unsigned int a2); int __thiscall sub_697ED0(_DWORD *this, _DWORD *a2); char sub_697F60(); void __thiscall sub_697F70(_DWORD *this); void __thiscall sub_697FB0(_DWORD *this); char __thiscall sub_697FF0(_DWORD *this); int __thiscall sub_698050(_DWORD *this); char __thiscall sub_698060(_DWORD *this); char __thiscall sub_6981A0(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_698310(_DWORD *this, float a2); int __thiscall sub_698350(_DWORD **this, _DWORD *a2); char __thiscall sub_698360(_BYTE **this, char a2); int __thiscall sub_698370(void **this, float a2); _DWORD *__thiscall sub_698390(_DWORD *this); void __thiscall sub_698490(_DWORD *this, float a2); void __thiscall sub_6984E0(_DWORD *this); void __fastcall sub_698560(float a1, int a2, float a3); char __thiscall sub_698960(_DWORD *this); _DWORD *__thiscall sub_698CA0(_DWORD *this); void __thiscall sub_698D80(_BYTE *this); void **__thiscall sub_698E30(void *this, char a2); void **__thiscall sub_698E70(void *this, char a2); void *__thiscall sub_698EF0(void *this, char a2); _DWORD *__thiscall sub_698F20(_DWORD *this, char a2); char __thiscall sub_698FE0(_BYTE *this, char a2); char __thiscall sub_698FF0(_BYTE *this); LONG __thiscall sub_699000(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_699040(_DWORD *this, const char *a2, _DWORD *a3); _DWORD *__thiscall sub_6991E0(void *this, char a2); int __thiscall sub_699260(_DWORD *this); int nullsub_27(void); // weak char __thiscall sub_699300(_DWORD *this, float a2, float a3, float a4, float a5, int a6, int a7, int a8, int a9); bool __thiscall sub_699470(_DWORD *this, float a2, float a3); bool __thiscall sub_699590(_DWORD *this, float a2, float a3); char __thiscall sub_6995F0(_DWORD *this, char *a2, float a3, float a4); bool __thiscall sub_699630(_DWORD *this, char *a2); char __thiscall sub_699650(_DWORD *this); char __thiscall sub_6996E0(_DWORD *this); void __thiscall sub_699710(_DWORD *this, char *a2, char a3); void *__thiscall sub_699720(int this, int a2, int a3, float a4); void __thiscall sub_699790(int this); void __thiscall sub_6997D0(int this); void *__thiscall sub_699820(_DWORD *this, int a2, int a3, float a4); char __thiscall sub_699890(_DWORD *this, unsigned int a2, int a3, char a4); char __thiscall sub_6998E0(_DWORD *this, int a2, int a3, int a4, int a5, char a6); char __thiscall sub_699940(_DWORD *this, unsigned int a2, char a3); bool __thiscall sub_699980(_DWORD *this, unsigned int a2, unsigned int a3); _DWORD *__thiscall sub_6999E0(void *this, char a2); void __thiscall sub_699A20(_DWORD *this, char *a2, char a3); char __thiscall sub_699D50(_DWORD *this); _DWORD *__thiscall sub_699DC0(_DWORD *this); // int __usercall sub_699EC0@(int a1@); // int __usercall sub_699F30@(int a1@); // signed __int16 __usercall sub_699FA0@(int a1@); void __thiscall sub_69A010(_DWORD *this); char __stdcall sub_69A130(float *a1, float *a2, float *a3, float *a4, float *a5, float *a6, float *a7, float *a8); char __thiscall sub_69A370(void *this, signed int a2, float a3); char __thiscall sub_69AAD0(_DWORD *this, char a2, int a3, int a4, char a5, int a6, float a7, int a8, int a9); char __thiscall sub_69ACA0(int this, float a2, float a3, int a4, int a5); char __thiscall sub_69AD10(float *this, float a2, float a3, int a4); char __thiscall sub_69AEF0(_DWORD *this, float *a2, float *a3, char **a4, float *a5); unsigned int __thiscall sub_69B130(_DWORD *this); int __thiscall sub_69B200(_DWORD *this, float *a2, float *a3, int a4); signed int __thiscall sub_69B300(_DWORD *this, float *a2, float a3, char **a4, int *a5, signed __int16 *a6); char __thiscall sub_69B580(void **this, float *a2, float *a3, float *a4, float *a5, float *a6, _DWORD *a7); char __thiscall sub_69B8A0(_DWORD *this, float *a2, float *a3, float *a4, float *a5, float *a6, _DWORD *a7); char __thiscall sub_69B970(_DWORD *this, float *a2, float a3, _DWORD *a4, int *a5, float *a6); char __thiscall sub_69BE40(float *this, char a2, int a3, int a4, char a5, int a6, int a7, int a8, float *a9); signed int __thiscall sub_69C170(float *this, int a2, int a3, int a4, int a5, char a6); signed int __thiscall sub_69C3E0(float *this, int a2, int a3, char **a4, int a5, int *a6, signed __int16 *a7); signed int __thiscall sub_69C6A0(float *this, int a2, int a3, char **a4, int a5, int *a6, signed __int16 *a7); signed int __thiscall sub_69C6B0(float *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5); double __thiscall sub_69C760(float *this, float *a2); _DWORD *__thiscall sub_69C790(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_69C7C0(_DWORD *this); float *__thiscall sub_69C820(_DWORD *this, float *a2); char __thiscall sub_69C8F0(float *this, int a2, int a3); char __thiscall sub_69CA10(_DWORD **this, _DWORD **a2); char __thiscall sub_69CA60(_DWORD **this, int a2); char __thiscall sub_69CAB0(_DWORD **this, _DWORD **a2); char __thiscall sub_69CB00(_DWORD **this, int a2); char __thiscall sub_69CB50(_DWORD **this, _DWORD **a2); char __thiscall sub_69CBA0(_DWORD *this, int a2); _DWORD *__thiscall sub_69CC00(_DWORD *this, _DWORD *a2, _DWORD *a3); int __thiscall sub_69CC30(_DWORD *this, float a2); char __thiscall sub_69CCC0(int this, int a2, int a3); char __thiscall sub_69CDC0(char *this); void __thiscall sub_69DEF0(_DWORD *this); char __thiscall sub_69E480(_DWORD *this, char a2); int __thiscall sub_69E4D0(_DWORD *this); _DWORD *__thiscall sub_69E520(_DWORD *this); int __thiscall sub_69E770(float *this, float a2); char __thiscall sub_69EA70(_DWORD *this, int a2); int __thiscall sub_69EB40(_DWORD *this, float a2); int __cdecl sub_69F960(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, float a11, float a12, float a13); _DWORD *__thiscall sub_69FAE0(_DWORD *this, _DWORD *a2, unsigned int *a3); int __thiscall sub_69FB70(_DWORD *this, int a2, char a3, int a4, void *a5); int sub_69FDA0(int a1, int a2, int a3, int a4, ...); _DWORD *__thiscall sub_69FE30(_DWORD *this, _DWORD *a2, unsigned int *a3); int __thiscall sub_69FEC0(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_69FFA0(_DWORD *this, char *a2); int sub_6A0020(int a1, int a2, ...); int __thiscall sub_6A0100(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_6A0260(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_6A04A0(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_6A05A0(_DWORD *this, char *a2); int sub_6A0620(_DWORD *a1, ...); int __thiscall sub_6A0690(_DWORD *this, _DWORD *a2); int sub_6A0720(int *a1, unsigned int a2, unsigned int a3, ...); char sub_6A07E0(); int __thiscall nullsub_28(_DWORD); // weak int __thiscall sub_6A0800(_DWORD *this); int __thiscall sub_6A0840(_DWORD *this); unsigned int __thiscall sub_6A0880(_DWORD *this); void __thiscall sub_6A09D0(_DWORD *this); _DWORD *__cdecl sub_6A0F50(_DWORD *a1); int __thiscall sub_6A0F70(_DWORD *this, int a2, char a3, int a4, void *a5); char sub_6A11A0(); void __thiscall sub_6A11B0(_DWORD *this); void __thiscall sub_6A11C0(_DWORD *this); int __thiscall sub_6A11D0(_DWORD *this, float a2); char *__cdecl sub_6A11F0(char *a1, char a2); char __cdecl sub_6A1280(const char *a1, char *a2); char __cdecl sub_6A14C0(int a1); int __thiscall sub_6A1740(int this, int a2, float a3); double __thiscall sub_6A17B0(int this, float a2); int __thiscall sub_6A18D0(_DWORD *this); int __thiscall sub_6A18E0(_DWORD *this, int a2); char __cdecl sub_6A1960(char *a1); int __thiscall sub_6A1A20(int this); int __thiscall sub_6A1C00(void **this, unsigned __int8 *a2); void __thiscall sub_6A1DF0(void *); // idb void *__thiscall sub_6A1E00(void *this, char a2); int __cdecl sub_6A1E60(int a1, char a2, int a3, float *a4, int a5, unsigned int a6); char **__thiscall sub_6A2280(char **this, float a2, int a3); char **__thiscall sub_6A2300(char **this, char a2, int a3, float *a4, int a5, unsigned int a6); char **__thiscall sub_6A23E0(char **this, __int16 a2, __int16 a3); int __thiscall sub_6A25D0(_DWORD *this, int a2); double __thiscall sub_6A25E0(float *this); int __thiscall sub_6A25F0(_DWORD *this); void __thiscall sub_6A2600(float *this, float a2); void __thiscall sub_6A2610(float *this, float a2); int __thiscall sub_6A2630(_DWORD *this, int a2); _DWORD *__thiscall sub_6A2640(void *this, char a2); _DWORD *__thiscall sub_6A2680(void *this, char a2); char **__stdcall sub_6A26C0(char *a1, int a2, int a3); bool __thiscall sub_6A2720(int this, float a2); _DWORD *__thiscall sub_6A2750(_DWORD *this, int a2, char a3); LONG __thiscall sub_6A2830(_DWORD *this); void __thiscall sub_6A2900(float *this, float a2); char __thiscall sub_6A29F0(float *this, float a2); int __thiscall sub_6A2E20(float *this, float a2); void sub_6A2F10(); int *__stdcall sub_6A3000(int *a1, int a2); int *__stdcall sub_6A31F0(int *a1, int a2); char __thiscall sub_6A33E0(void *this, _DWORD *a2, int a3, int a4); float *__cdecl sub_6A37A0(int a1); float *__cdecl sub_6A3A30(int a1, int a2, int a3); void *__thiscall sub_6A3CD0(char *this, char a2); char *sub_6A3CE0(); int __thiscall sub_6A3CF0(int this, float a2); void *__thiscall sub_6A3D80(void *this, char a2); void __stdcall sub_6A3DB0(void *a1); int *__thiscall sub_6A3E10(_DWORD *this, int *a2, int a3); int __thiscall sub_6A4090(_DWORD *this, int a2, void *a3, int a4); int *__thiscall sub_6A4190(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_6A4250(_DWORD *this, int a2); _DWORD *__thiscall sub_6A4290(_DWORD *this, _DWORD *a2, _DWORD *a3); _DWORD *__thiscall sub_6A4330(_DWORD *this, _DWORD *a2, int a3); signed int __thiscall sub_6A43B0(int this, int a2); char *__thiscall sub_6A43F0(char *this); void __thiscall sub_6A4570(_DWORD *this); char *__thiscall sub_6A47D0(char *this); char __thiscall sub_6A4800(int this, int a2); char *__thiscall sub_6A4D00(char *this); char __thiscall sub_6A4D40(int this, int a2); int __thiscall sub_6A5360(int this, volatile LONG *a2); int __thiscall sub_6A58D0(int this, volatile LONG *a2); float *__thiscall sub_6A5E40(float *this, float *a2, float *a3); float *__thiscall sub_6A5E90(float *this, float *a2, float *a3); float *__thiscall sub_6A5EE0(_DWORD *this, int a2, float a3); char *sub_6A5F30(); void *__thiscall sub_6A5F40(void *this, char a2); void __cdecl sub_6A5F70(void *a1); void *__thiscall sub_6A6000(void *this, char a2); void *__thiscall sub_6A6030(void *this, char a2); void *__thiscall sub_6A6060(void *this, char a2); double __thiscall sub_6A6090(float *this); int __thiscall sub_6A60A0(int this, float a2); __int16 __thiscall sub_6A60D0(_WORD *this); __int16 __thiscall sub_6A60E0(_WORD *this, __int16 a2); __int16 __thiscall sub_6A6100(_WORD *this); __int16 __thiscall sub_6A6110(_WORD *this, __int16 a2); bool __thiscall sub_6A6130(float *this, float a2); bool __thiscall sub_6A6170(_DWORD *this); char __thiscall sub_6A6190(_DWORD *this, int a2, __int16 a3, int a4, unsigned int a5, char a6, char a7, int a8, __int16 a9); int __thiscall sub_6A61C0(_DWORD *this); int __thiscall sub_6A61D0(float *this, int *a2); void __thiscall sub_6A6260(_DWORD *this); // void __userpurge sub_6A62C0(int a1@, int a2@, int a3@, int a4@, float a5); void __thiscall sub_6A64C0(void *this, float a2); char __thiscall sub_6A66A0(_DWORD *this, float a2, float a3); char __thiscall sub_6A67B0(_DWORD *this, float a2); void __thiscall sub_6A67E0(_DWORD *this, __int16 a2, _DWORD *a3); float *__thiscall sub_6A6830(float *this, int a2, char a3, int a4); LONG __thiscall sub_6A6930(_DWORD *this); float *__thiscall sub_6A6A30(void *this); char *__thiscall sub_6A6AA0(_DWORD *this, char a2); __int16 __thiscall sub_6A6B80(_WORD *this); __int16 __thiscall sub_6A6B90(_WORD *this, __int16 a2); float *__thiscall sub_6A6BB0(float *this, int a2, char a3, int a4); bool __thiscall sub_6A6C80(_WORD *this); void __thiscall sub_6A6D60(int this, char a2); void __thiscall sub_6A6DF0(_DWORD *this, char a2); char __thiscall sub_6A6E50(_WORD *this, float a2); _DWORD *__thiscall sub_6A71A0(_DWORD *this, int a2); LONG __thiscall sub_6A71F0(_DWORD *this); void __thiscall sub_6A72D0(_DWORD *this, int a2); int *__thiscall sub_6A7330(_DWORD *this); _DWORD *__thiscall sub_6A73E0(_DWORD *this); void *__thiscall sub_6A7410(void *this, char a2); void *__thiscall sub_6A7440(char *this, char a2); void *sub_6A7450(); char __thiscall sub_6A7460(int this, float a2); int __thiscall sub_6A74C0(_DWORD *this); _DWORD *__thiscall sub_6A7540(void *this, char a2); void *__thiscall sub_6A75D0(void *this, char a2); void *__thiscall sub_6A7600(void *this, char a2); int __stdcall sub_6A7630(const char *a1); char __thiscall sub_6A7670(_BYTE *this, char a2); char __thiscall sub_6A7680(_BYTE *this); __int16 __thiscall sub_6A7690(_WORD *this, __int16 a2); __int16 __thiscall sub_6A76B0(_WORD *this); int __stdcall sub_6A76D0(int, int, float); // idb signed __int16 __thiscall sub_6A7770(_DWORD *this); void __thiscall sub_6A77E0(char *this, float a2); char __thiscall sub_6A7910(_DWORD *this); void __thiscall sub_6A7A10(float *this, float a2); void __thiscall sub_6A7B90(float *this, float a2); int __stdcall sub_6A7C90(float); // idb int *__thiscall sub_6A7DE0(_DWORD *this); const void **__thiscall sub_6A7E60(int this, void *a2, float a3, float a4, float a5); char __thiscall sub_6A7EC0(_DWORD **this); LONG __thiscall sub_6A7FF0(_DWORD *this); float *__thiscall sub_6A83F0(float *this, int a2, char a3, int a4); void *__thiscall sub_6A8E50(void *this, char a2); bool __cdecl sub_6A8E80(int a1, int a2); void __thiscall sub_6A8EA0(_DWORD *this, int a2, int a3); float *__thiscall sub_6A8F80(float *this); void __thiscall sub_6A9020(_DWORD *this); void *__thiscall sub_6A90E0(void *this, char a2); _DWORD *__thiscall sub_6A9110(void *this, char a2); int __thiscall sub_6A91A0(_DWORD *this); int __thiscall sub_6A9220(_DWORD *this); _DWORD *__thiscall sub_6A92A0(void *this, char a2); _DWORD *__thiscall sub_6A9330(_DWORD *this, char *a2); char *__thiscall sub_6A93A0(_DWORD *this, char a2); void __thiscall sub_6A9440(float *this, float a2); void __thiscall sub_6A9450(float *this, float a2); int __thiscall sub_6A9460(_DWORD *this, float a2); int __thiscall sub_6A9480(_DWORD *this, int a2, int a3); int __thiscall sub_6A94A0(_DWORD *this, int a2); char __thiscall sub_6A94D0(_BYTE *this); __int16 __thiscall sub_6A9520(_WORD *this, __int16 a2); _DWORD *__thiscall sub_6A9550(_DWORD *this); void __thiscall sub_6A9590(_DWORD *this); int __thiscall sub_6A95B0(_DWORD *this, float a2); int __thiscall sub_6A9620(__int16 *this, float a2); void __thiscall sub_6A96C0(float *this, float a2); _DWORD *__fastcall sub_6A9790(int a1); void __thiscall sub_6A98E0(int this, int a2); void __thiscall sub_6A9970(void *this, _DWORD *a2); void __thiscall sub_6A9A70(int this, _DWORD *a2); _DWORD *__thiscall sub_6A9AC0(_DWORD *this); void __thiscall sub_6A9B60(_DWORD *this, _DWORD *a2); void __thiscall sub_6A9BC0(_DWORD *this, __int16 a2); void __thiscall sub_6A9C00(_DWORD *this, float a2); char __thiscall sub_6A9D80(_DWORD *this, int a2); _DWORD *__thiscall sub_6A9EA0(_DWORD *this); float *__thiscall sub_6A9ED0(int *this, float *a2); int __thiscall sub_6AA070(void *this, float a2); void *__thiscall sub_6AA460(void *this, char a2); void __thiscall sub_6AA490(_DWORD *this, unsigned int a2); void *__thiscall sub_6AA570(void *this, char a2); void *__thiscall sub_6AA5A0(void *this, char a2); int __thiscall sub_6AA5E0(_DWORD *this); _DWORD *__thiscall sub_6AA660(void *this, char a2); int __thiscall sub_6AA6F0(_DWORD *this); _DWORD *__thiscall sub_6AA730(void *this, char a2); int __thiscall sub_6AA7C0(_DWORD *this); void *__thiscall sub_6AA840(void *this, char a2); int __stdcall sub_6AA880(int a1, int a2); int __thiscall sub_6AA920(_DWORD *this); _DWORD *__thiscall sub_6AA9A0(void *this, char a2); void *__thiscall sub_6AAA30(void *this, char a2); void *__thiscall sub_6AAA60(void *this, char a2); void *__thiscall sub_6AAAA0(void *this, char a2); float *__thiscall sub_6AAAD0(_DWORD *this, float *a2); float *__thiscall sub_6AAB30(_DWORD *this, float *a2); float *__thiscall sub_6AAB90(_DWORD *this, float *a2); float *__thiscall sub_6AABF0(_DWORD *this, float *a2); float *__thiscall sub_6AAC50(_DWORD *this, float *a2); void *__thiscall sub_6AACC0(void *this, char a2); char __stdcall sub_6AACF0(int a1); int __stdcall sub_6AAD40(int a1); double __stdcall sub_6AADF0(int a1, int a2); void __thiscall sub_6AAEB0(_DWORD *this, char a2); _WORD *__thiscall sub_6AAF40(_DWORD *this, __int16 a2, __int16 a3); void (__thiscall ***__thiscall sub_6AAFB0(_DWORD *this, char *Src))(_DWORD, signed int); double __thiscall sub_6AB100(_DWORD *this, char *Src, int a3); int __thiscall sub_6AB1D0(_DWORD *this, __int16 a2); unsigned int __thiscall sub_6AB240(_DWORD *this, int a2, int a3); void __thiscall sub_6AB520(int this, int a2); void __thiscall sub_6AB580(_DWORD *this, int a2, int a3, char a4); void __thiscall sub_6AB5E0(_DWORD *this, int a2); char __thiscall sub_6AB660(_DWORD *this); int __thiscall sub_6AB700(_DWORD *this, char a2); void __thiscall sub_6AB760(_DWORD *this, int a2, int a3, float a4, _DWORD *a5, _DWORD *a6, int a7, int a8, int a9); void __thiscall sub_6ABF00(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, void *a6); int __thiscall sub_6AC800(_DWORD *this); int *__thiscall sub_6AC8B0(_DWORD *this, int *a2); int *__thiscall sub_6AC9F0(_DWORD *this, int a2); int *__thiscall sub_6ACAD0(_DWORD *this, float a2); int *__thiscall sub_6ACDF0(_DWORD *this, int *a2); _DWORD *__thiscall sub_6ACE20(_DWORD *this); void __thiscall sub_6ACFB0(char *this); int __thiscall sub_6AD0E0(_DWORD *this); int __thiscall sub_6AD210(_DWORD *this); unsigned int __thiscall sub_6AD290(_DWORD *this, int *a2, int a3); void *__stdcall sub_6AD380(char *a1); void __thiscall sub_6AD3E0(_DWORD *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_6AD450(void *this, char a2); int __thiscall sub_6AD4E0(_DWORD *this); int __thiscall sub_6AD560(_DWORD *this); _DWORD *__thiscall sub_6AD5E0(void *this, char a2); _DWORD *__thiscall sub_6AD670(_DWORD *this, _DWORD *a2, unsigned int *a3); _DWORD *__thiscall sub_6AD700(_DWORD *this, _DWORD *a2, unsigned int *a3); int __cdecl sub_6AD790(const char *a1, int a2); int __thiscall sub_6AD840(_DWORD *this); _DWORD *__thiscall sub_6AD8C0(void *this, char a2); int **__thiscall sub_6AD950(_DWORD *this, int **a2, _DWORD *a3); int __cdecl sub_6AD9C0(int a1, int a2, int a3); void __thiscall sub_6ADA00(_DWORD *this); unsigned int __thiscall sub_6ADA60(unsigned int *this, char *a2); unsigned int __thiscall sub_6ADB70(unsigned int *this, int a2); unsigned int __thiscall sub_6ADBF0(unsigned int *this, unsigned int a2); char __thiscall sub_6ADD80(_DWORD *this, char *a2, float a3); float *__thiscall sub_6AE000(_DWORD *this, char *Src, int a3); float *__thiscall sub_6AE0A0(_DWORD *this, char *Src, char a3, int a4, int a5, char a6, int a7, int a8, int a9, char a10); float *__thiscall sub_6AE1D0(_DWORD *this, char *Src, int a3, char a4, int a5, int a6, int a7); char __thiscall sub_6AE300(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, float a7, float a8, int a9, int a10, char a11); char __thiscall sub_6AE840(_DWORD *this, char *Src, int a3, int a4, int a5, float a6, float a7, int a8, int a9, int a10, char a11); char __thiscall sub_6AED40(_DWORD *this, char *Src, int a3, int a4, int a5, float a6, float a7, int a8, int a9, char a10, int a11); float *__thiscall sub_6AF040(_DWORD *this, char *Src, int a3, int a4, int a5, int a6); char __thiscall sub_6AF370(_DWORD *this, char *Src, char a3, int a4, int a5, char a6, int a7, int a8, float a9, float a10); char __thiscall sub_6AF460(_DWORD *this, int a2, int a3, int a4, float a5, char a6, int a7); char __thiscall sub_6AF580(_DWORD *this, int a2, char *Src, int a4, float a5, float a6); int __stdcall sub_6AF6B0(int a1, _DWORD *a2); float *__thiscall sub_6AF730(_DWORD *this, char *Src, int a3, int a4, float a5, char a6); char __thiscall sub_6AF890(_DWORD *this, int a2, char *Src, int a4, float a5, char a6); char __thiscall sub_6AF8E0(_DWORD *this, int a2, char *Src, int a4, int a5, float a6, char a7, char a8, char a9, char a10); char __thiscall sub_6AFA60(_DWORD *this, int a2, char *Src, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_6AFEC0(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_6AFFF0(_DWORD *this); void __thiscall sub_6B00A0(char *this); char __thiscall sub_6B0110(void ***this); bool __thiscall sub_6B0850(void *this, int a2); bool __thiscall sub_6B0860(_DWORD *this); // int __userpurge sub_6B0880@(_DWORD *a1@, int a2@, int a3@, int a4@, float a5); int __thiscall sub_6B09D0(void *this, float a2); void *sub_6B09F0(); _DWORD *__thiscall sub_6B0A00(_DWORD *this, char a2); float *__thiscall sub_6B0A90(float *this, int a2); LONG __thiscall sub_6B0B40(float *this, _DWORD *a2); void __thiscall sub_6B0BB0(_DWORD *this, volatile LONG *a2); void __thiscall sub_6B0C00(_BYTE *this, float a2); char __stdcall sub_6B0CB0(int a1); char __thiscall sub_6B0CC0(__int16 *this, int a2); int __stdcall sub_6B0D10(float); // idb int __thiscall sub_6B0D30(void *this, float a2); int __thiscall sub_6B0D50(float *this, int *a2); float *__thiscall sub_6B0E70(void *this); void *sub_6B0F10(); char *__thiscall sub_6B0F20(_BYTE *this, char *a2); void __thiscall sub_6B0F50(_BYTE *this, int a2); __int16 __thiscall sub_6B0F70(_WORD *this); __int16 __thiscall sub_6B0F80(_WORD *this); _DWORD *__thiscall sub_6B0F90(_DWORD *this, char a2); float *__thiscall sub_6B1020(float *this, int a2, char a3); bool __thiscall sub_6B1110(__int16 *this, int a2); // int __userpurge sub_6B1130@(int a1@, int a2@, int a3@, int a4@, float a5); int __thiscall sub_6B1230(void *this, float a2); void *sub_6B1250(); _DWORD *__thiscall sub_6B1260(_DWORD *this, char a2); bool __thiscall sub_6B12F0(int this, float a2); void __thiscall sub_6B1320(float *this, float a2); float *__thiscall sub_6B1330(float *this); void __thiscall sub_6B1400(_DWORD *this); int __thiscall sub_6B14A0(int this, int a2, int a3, unsigned int a4); int __thiscall sub_6B1550(int this, int a2, int a3, unsigned int a4); void __thiscall sub_6B15F0(__int16 *this, float a2, int a3, int a4); void *__thiscall sub_6B18B0(void *this, char a2); void *__thiscall sub_6B18F0(void *this, char a2); void __thiscall sub_6B1920(void *); // idb void __thiscall sub_6B1950(void *this); _DWORD *__stdcall sub_6B1A20(void *a1, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_6B1B40(_DWORD *this, int a2); void __thiscall sub_6B1BB0(_DWORD *this); char __thiscall sub_6B1D00(float *this); void __thiscall sub_6B2080(_DWORD *this); void __thiscall sub_6B21C0(_DWORD *this); void __thiscall sub_6B2470(char *this, __int16 a2, int a3, int a4, char a5); void __thiscall sub_6B26A0(_DWORD *this, void *a2); void __thiscall sub_6B2790(_DWORD *this, void *a2); void __thiscall sub_6B2880(_DWORD *this, void *a2); void __thiscall sub_6B2970(_DWORD *this, void *a2); int __thiscall sub_6B2A60(_DWORD *this, _DWORD *a2); // void __usercall sub_6B2AE0(int a1@, signed int a2@); void __thiscall sub_6B2B80(_DWORD *this, float a2, int a3); void *__stdcall sub_6B2D80(_DWORD *a1, _DWORD *a2); char __thiscall sub_6B2E10(_DWORD *this); void __thiscall sub_6B34A0(_DWORD *this, void *a2, int a3); float *__thiscall sub_6B36E0(float *this); char __thiscall sub_6B37C0(float *this); void __thiscall sub_6B3A80(_DWORD *this); void __thiscall sub_6B3B00(void *); // idb int __thiscall sub_6B3B10(_DWORD *this); _DWORD *__thiscall sub_6B3B90(void *this, char a2); int __thiscall sub_6B3C20(_DWORD *this); _DWORD *__thiscall sub_6B3CA0(void *this, char a2); void __thiscall sub_6B3D30(int this); float *__thiscall sub_6B3D80(float *this); int __thiscall sub_6B3E10(_DWORD *this, int a2); void __thiscall sub_6B3E60(int this, float a2); LONG __thiscall sub_6B40A0(_DWORD *this); char __thiscall sub_6B4180(float *this, float a2, float a3); void *__thiscall sub_6B4570(void *this, char a2); void __stdcall sub_6B45E0(float a1, int a2, float a3); void __thiscall sub_6B4690(void *this, float a2, float a3); int __thiscall sub_6B46D0(_DWORD *this); int __thiscall sub_6B4790(_DWORD *this, int a2); void __fastcall sub_6B47E0(float a1, int a2, int a3, float a4, int a5); _DWORD *__thiscall sub_6B48A0(int this, signed int a2, unsigned int a3); LONG __thiscall sub_6B4AA0(_DWORD *this); void __thiscall sub_6B4B70(_DWORD *this); void __fastcall sub_6B4BC0(int *a1, int a2, float a3); char __thiscall sub_6B4D30(float *this, float a2, float a3, int a4, int a5); float *__thiscall sub_6B4F60(float *this); int __thiscall sub_6B5000(_DWORD *this); void *__thiscall sub_6B5030(void *this, char a2); __int16 __thiscall sub_6B5060(_WORD *this); __int16 __thiscall sub_6B5070(__int16 *this, __int16 a2); int __thiscall sub_6B50D0(_DWORD *this, int a2, int a3, int a4); LONG __thiscall sub_6B5140(_DWORD *this); void __thiscall sub_6B51B0(_BYTE *this); bool __thiscall sub_6B51C0(void *this); float *__thiscall sub_6B52A0(float *this, int a2, char a3, int a4); // char *__userpurge sub_6B5300@(__int16 *a1@, int a2@, int a3@, float a4); char *__thiscall sub_6B5390(char *this, char a2); float *__thiscall sub_6B5440(float *this, int a2, char a3, int a4); int __thiscall sub_6B5470(float *this); // char *__userpurge sub_6B54E0@(float *a1@, int a2@, float a3); int __thiscall sub_6B5500(float *this, float a2); _DWORD *__thiscall sub_6B5520(_DWORD *this, char a2); double sub_6B5560(); void *__thiscall sub_6B5580(_DWORD *this, int a2); char __thiscall sub_6B55D0(_DWORD *this, unsigned int a2, const char *a3); bool __thiscall sub_6B5690(_DWORD *this, unsigned int *a2, unsigned int a3); int __thiscall sub_6B56E0(_DWORD *this, _DWORD *a2); void __thiscall sub_6B5710(_DWORD *this); char __thiscall sub_6B5760(_BYTE *this, char a2); void __thiscall sub_6B5770(float *this, float *a2, float *a3); int __thiscall sub_6B57A0(char *this); int __thiscall sub_6B57B0(_DWORD *this); int __cdecl sub_6B57D0(float); // idb int sub_6B5870(); int __cdecl sub_6B58F0(float); // idb void sub_6B5980(); void __cdecl sub_6B59E0(int a1); BOOL __thiscall sub_6B5B60(_DWORD *this); bool __thiscall sub_6B5B70(int this, float *a2); int __thiscall sub_6B5D00(int this, float a2); int *__thiscall sub_6B5D50(int this, int *a2, int a3); int __thiscall sub_6B5E10(_DWORD *this); bool __thiscall sub_6B5E30(_DWORD *this, float *a2); int __thiscall sub_6B5E90(int this, float a2); int __thiscall sub_6B5ED0(int this, float a2); char __thiscall sub_6B5F10(_DWORD *this, _DWORD *a2); int __thiscall sub_6B5F80(_DWORD *this, unsigned int a2); void __thiscall sub_6B5FD0(_DWORD *this); unsigned int __thiscall sub_6B6010(_DWORD *this); void __thiscall sub_6B60A0(_DWORD *this); char __thiscall sub_6B6160(_DWORD *this, _DWORD *a2); int __thiscall sub_6B61B0(_DWORD *this); void __thiscall sub_6B6280(_DWORD *this); int __thiscall sub_6B62E0(_DWORD *this, int a2); void __thiscall sub_6B6340(_DWORD *this); volatile LONG **__thiscall sub_6B63D0(float *this, volatile LONG **a2, float a3, int a4); volatile LONG **__thiscall sub_6B65C0(float *this, volatile LONG **a2, float a3, int a4); void __thiscall sub_6B6790(_DWORD *this, int a2); int __thiscall sub_6B6870(_DWORD *this, _DWORD *a2, int a3); int __thiscall sub_6B6930(_DWORD *this, _DWORD *a2, int a3); int __thiscall sub_6B69F0(int this, int a2, float a3, int a4); _DWORD *__thiscall sub_6B6A90(_BYTE *this, _DWORD *a2, _DWORD *a3, char a4); // _DWORD *__userpurge sub_6B6B40@(_BYTE *a1@, int a2@, _DWORD *a3, _DWORD **a4, char a5); void __thiscall sub_6B6C20(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_6B6CE0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_6B6DB0(_DWORD *this); _DWORD *__thiscall sub_6B6E70(_DWORD *this); _DWORD *__thiscall sub_6B6F30(_DWORD *this); _DWORD *__thiscall sub_6B6F50(_DWORD *this); _DWORD *__thiscall sub_6B6FE0(int this, _DWORD *a2, int a3, int a4); _DWORD *__thiscall sub_6B70F0(_BYTE *this, _DWORD *a2, _DWORD *a3, _DWORD *a4); _DWORD *__thiscall sub_6B7260(_BYTE *this, _DWORD *a2, _DWORD *a3, _DWORD *a4); int *__thiscall sub_6B73C0(int this, int *a2, int a3); LONG __thiscall sub_6B7500(_DWORD *this, volatile LONG *a2); unsigned int __thiscall sub_6B75F0(_DWORD *this, unsigned int a2); int *__thiscall sub_6B7720(_DWORD *this); unsigned int __thiscall sub_6B7830(_DWORD *this, float a2); int __thiscall sub_6B7860(_DWORD *this); _DWORD *__thiscall sub_6B78A0(_DWORD *this, _DWORD **a2); void *__thiscall sub_6B7910(void *this, char a2); void *__thiscall sub_6B7940(void *this, char a2); void __stdcall sub_6B7970(void *a1); _DWORD *__thiscall sub_6B7990(void *this, char a2); int __thiscall sub_6B7A20(_DWORD *this); _DWORD *__thiscall sub_6B7AA0(void *this, char a2); _DWORD *__thiscall sub_6B7B30(_DWORD *this, _DWORD *a2); void *__thiscall sub_6B7BC0(void *this, char a2); void *__thiscall sub_6B7BF0(void *this, char a2); void __thiscall sub_6B7C20(float *this, float a2); bool __thiscall sub_6B7C40(_DWORD *this, unsigned int *a2, unsigned int a3); char __thiscall sub_6B7C90(_DWORD *this); BOOL __thiscall sub_6B7D50(float *this, float a2, float a3); double __thiscall sub_6B7DB0(float *this); int __thiscall sub_6B7DC0(_DWORD *this, float a2); int __thiscall sub_6B7DF0(_DWORD *this, float a2); int __thiscall sub_6B7E40(_BYTE *this, int a2); bool __thiscall sub_6B7E70(_DWORD *this, unsigned int *a2, unsigned int a3); int __thiscall sub_6B7EB0(int this, float a2); float *__thiscall sub_6B7F10(float *this, float *a2); int __thiscall sub_6B7F30(_DWORD *this, float a2); char __thiscall sub_6B7FE0(float *this, unsigned int *a2, int a3); void __thiscall sub_6B8050(float *this); char __thiscall sub_6B80E0(_DWORD *this, unsigned int *a2, unsigned int a3); int __thiscall sub_6B84E0(_DWORD *this, int a2); int __thiscall sub_6B8520(_DWORD *this, int a2); void __thiscall sub_6B8630(int this, _DWORD *a2); _DWORD *__thiscall sub_6B8750(_DWORD *this); signed int __thiscall sub_6B88F0(_DWORD *this, _DWORD *a2); bool __thiscall sub_6B8BB0(_DWORD *this, float a2); void __thiscall sub_6B8DD0(_DWORD *this); _DWORD *__thiscall sub_6B8E50(_DWORD *this); char __thiscall sub_6B8FC0(_DWORD *this, int a2); void __thiscall sub_6B9200(const char *this, char *a2, int a3, float a4); // void __userpurge sub_6B9450(int a1@, double a2@, float a3); void __thiscall sub_6B96A0(int this, int a2, int a3); void *__thiscall sub_6B9820(void *this, char a2); void *__thiscall sub_6B9850(void *this, char a2); void *__thiscall sub_6B9880(void *this, char a2); void *__thiscall sub_6B98B0(void *this, char a2); int sub_6B98E0(); _DWORD *__thiscall sub_6B9900(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_6B9950(void *this, char a2); int __thiscall sub_6B99E0(_DWORD *this); _DWORD *__thiscall sub_6B9A60(void *this, char a2); _DWORD *__thiscall sub_6B9AF0(void *this, char a2); int __thiscall sub_6B9B80(_DWORD *this); int __thiscall sub_6B9C00(_DWORD *this); int __thiscall sub_6B9C80(_DWORD *this); _DWORD *__thiscall sub_6B9D00(_DWORD *this); _DWORD *__fastcall sub_6B9D10(_DWORD *a1); _DWORD *__thiscall sub_6B9E50(_DWORD *this); void **__thiscall sub_6B9E90(void *this, char a2); _DWORD *__thiscall sub_6B9F10(void *this, char a2); bool __cdecl sub_6B9F60(char *Src, int a2, char a3); void *__thiscall sub_6BA0B0(void *this, char a2); int __thiscall sub_6BA0F0(_DWORD *this); void __thiscall sub_6BA180(_BYTE *this, int a2); void __thiscall sub_6BA1B0(_DWORD *this, int a2); char __thiscall sub_6BA1D0(_DWORD *this, char *a2); // int __thiscall unknown_libname_12(_DWORD); weak int __thiscall sub_6BA240(_DWORD); // weak unsigned int __thiscall sub_6BA350(unsigned int *this, unsigned int a2); int __thiscall sub_6BA370(_DWORD *this, int a2); int __stdcall sub_6BA380(float); // idb int __thiscall sub_6BA3A0(int this, char a2); void __thiscall sub_6BA3F0(_DWORD *this); int __thiscall sub_6BA4E0(_DWORD *this); int __thiscall sub_6BA650(_DWORD *this, int a2); int __thiscall sub_6BA680(_DWORD **this, int a2); int __thiscall sub_6BA690(_DWORD **this, float a2); int __thiscall sub_6BA6B0(_DWORD **this, float a2); int __thiscall sub_6BA700(_DWORD **this, float a2); int __thiscall sub_6BA720(_DWORD **this, float a2); int __cdecl sub_6BA750(int a1); void __thiscall sub_6BA7B0(_BYTE *this, unsigned __int16 a2); void __thiscall sub_6BA890(_DWORD *this, int a2); _DWORD *__thiscall sub_6BA930(_DWORD *this, int a2, int a3); _DWORD *__stdcall sub_6BA9B0(int a1); _DWORD *__stdcall sub_6BAA10(int a1); LONG __thiscall sub_6BAA70(_DWORD *this); int __thiscall sub_6BAB40(_DWORD *this, int a2, int a3); int __thiscall sub_6BABB0(_DWORD *this, int a2, int a3); int __thiscall sub_6BACD0(_DWORD *this, float a2, int a3); char __thiscall sub_6BAF40(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_6BAFA0(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4, _DWORD *a5); BOOL __thiscall sub_6BB140(_DWORD *this); bool __thiscall sub_6BB380(_DWORD *this); void *__thiscall sub_6BB5F0(void *this, char a2); _DWORD *__thiscall sub_6BB620(void *this, char a2); int __thiscall sub_6BB6B0(_DWORD *this); _DWORD *__thiscall sub_6BB730(void *this, char a2); _DWORD *__thiscall sub_6BB7C0(_DWORD *this, _DWORD *a2, _DWORD **a3); int __thiscall sub_6BB8E0(_DWORD *this); _DWORD *__thiscall sub_6BB960(void *this, char a2); _DWORD *__thiscall sub_6BB9F0(_DWORD *this, _DWORD *a2, _DWORD *a3); _DWORD *__thiscall sub_6BBB10(_DWORD *this); _DWORD *__thiscall sub_6BBBE0(void *this, int a2); _DWORD *__thiscall sub_6BBC50(_DWORD *this); _DWORD *__thiscall sub_6BBCA0(_DWORD *this); _DWORD *__thiscall sub_6BBCF0(_DWORD *this); void *__thiscall sub_6BBD40(void *this, char a2); _DWORD *__thiscall sub_6BBD70(_DWORD *this); float *__thiscall sub_6BBE80(float *this, void *a2, float a3, float a4); bool __thiscall sub_6BBF90(void **this, FILE *a2); signed int sub_6BC080(); int *sub_6BC0C0(); void __cdecl sub_6BC0D0(const void *a1); int __cdecl sub_6BC0F0(int a1, int a2); int __cdecl sub_6BC110(int a1); char sub_6BC120(); char *__thiscall sub_6BC200(char *this); unsigned int __cdecl sub_6BC280(unsigned __int16 *a1); int sub_6BC4D0(); unsigned __int16 *__cdecl sub_6BC8C0(_WORD *a1); char __thiscall sub_6BC9D0(char *this); signed int __thiscall sub_6BCA50(char *this); FILE *sub_6BCB00(); FILE *sub_6BCB80(); void sub_6BCF10(); int __cdecl sub_6BCFD0(int, float, float, float); // idb FILE *sub_6BD110(); FILE *sub_6BD190(); _BYTE *__thiscall sub_6BD2E0(_BYTE *this); int __cdecl sub_6BD320(int a1); FILE *sub_6BD400(); int __thiscall sub_6BD450(int this); int __thiscall sub_6BD480(int this); char sub_6BD4A0(); char sub_6BD4B0(); int sub_6BD4C0(void); // weak char __cdecl sub_6BD4D0(int a1); char __cdecl sub_6BD660(int a1); int __cdecl sub_6BD7A0(float); // idb char __cdecl sub_6BD810(char a1); char sub_6BD840(); // char __usercall sub_6BDA20@(int a1@, int a2@); void *__thiscall sub_6BDDB0(void *this, char a2); int __thiscall sub_6BDDE0(int this, int a2); const char **__cdecl sub_6BDE80(int a1); _DWORD *__thiscall sub_6BDF00(void *this, char a2); int __thiscall sub_6BDF90(_DWORD *this); _DWORD *__thiscall sub_6BE010(void *this, char a2); void *__thiscall sub_6BE130(void *this, char a2); int sub_6BE300(); __int16 *__cdecl sub_6BE310(unsigned int a1); char __cdecl sub_6BE330(__int16 a1); char __cdecl sub_6BE370(__int16 a1); char __cdecl sub_6BE3A0(__int16 a1); char __cdecl sub_6BE470(__int16 a1); char __cdecl sub_6BE540(__int16 a1); int sub_6BE600(); int __cdecl sub_6BE610(int a1); int __cdecl sub_6BE620(int a1); int sub_6BE630(); int __cdecl sub_6BE660(int a1); int sub_6BE670(); __int16 *__cdecl sub_6BE690(__int16 a1); void sub_6BE6D0(); char __cdecl sub_6BE6F0(char a1); void sub_6BE700(); char __cdecl sub_6BE710(__int16 a1); __int16 __cdecl sub_6BE740(unsigned int a1); int sub_6BE760(); __int16 *__cdecl sub_6BE770(unsigned int a1); __int16 *__cdecl sub_6BE790(__int16 a1); int sub_6BE7C0(); BOOL __cdecl sub_6BE7D0(__int16 a1); BOOL __cdecl sub_6BE7F0(__int16 a1); BOOL __cdecl sub_6BE810(__int16 a1); bool __cdecl sub_6BE830(__int16 a1); size_t *__cdecl sub_6BE850(size_t *a1, unsigned __int16 a2); char __cdecl sub_6BE900(int a1); char __cdecl sub_6BE9E0(unsigned __int16 a1, _BYTE *a2, int a3); char __cdecl sub_6BEAC0(int a1); double __cdecl sub_6BEC80(int a1); void sub_6BED10(); int sub_6BEDA0(); signed int __cdecl sub_6BEDF0(_WORD *a1); char sub_6BEE40(); int sub_6BEF30(); bool __cdecl sub_6BF020(int a1); char __cdecl sub_6BF080(unsigned __int16 a1); _DWORD *__cdecl sub_6BF0F0(__int16 a1, int a2); unsigned int __cdecl sub_6BF170(float a1, float a2, float a3, float a4); void __cdecl sub_6BF3D0(__int16 a1); void __cdecl sub_6BF4D0(__int16 a1); bool __cdecl sub_6BF540(__int16 a1); void __cdecl sub_6BF570(float a1); _WORD *__cdecl sub_6BF6A0(int a1, float a2); LONG __cdecl sub_6BF780(__int16 a1); bool sub_6BF860(); signed __int16 __cdecl sub_6BF8C0(unsigned __int16 a1, signed int *a2); int __cdecl sub_6BFA60(int a1, unsigned __int16 a2); int __cdecl sub_6BFC20(int a1); int *__cdecl sub_6BFD20(int a1, float a2, float a3, float a4); void __cdecl sub_6BFFF0(unsigned __int8 *a1); _DWORD *__cdecl sub_6C0100(int a1, float a2); _DWORD *__thiscall sub_6C01E0(_DWORD *this); void *__thiscall sub_6C0230(void *this, char a2); void *__thiscall sub_6C0260(void *this, char a2); char __thiscall sub_6C0290(void *this); int sub_6C0390(); bool __stdcall sub_6C03B0(__int16 a1); void **__thiscall sub_6C03D0(void *this, char a2); void **__thiscall sub_6C0450(void *this, char a2); void **__thiscall sub_6C04D0(void *this, char a2); void **__thiscall sub_6C0560(void *this, char a2); _DWORD *__thiscall sub_6C05E0(void *this, char a2); int __thiscall sub_6C0670(_DWORD *this); void **__thiscall sub_6C06F0(void *this, char a2); void **__thiscall sub_6C0770(void *this, char a2); int sub_6C0800(); _DWORD *__thiscall sub_6C0820(void *this, char a2); _DWORD *__thiscall sub_6C08B0(void *this, char a2); _DWORD *__thiscall sub_6C0940(_DWORD *this); _DWORD *__thiscall sub_6C0990(_DWORD *this); signed int sub_6C09E0(); void **__thiscall sub_6C09F0(void *this, char a2); _DWORD *__thiscall sub_6C0A80(_DWORD *this); _DWORD *__thiscall sub_6C0AD0(_DWORD *this); void **__thiscall sub_6C0B20(void *this, char a2); bool __cdecl sub_6C0BB0(char *Src, int a2, char a3); bool __cdecl sub_6C0CF0(char *Src, int a2, char a3); bool __cdecl sub_6C0E30(char *Src, int a2, char a3); bool __cdecl sub_6C0F70(char *Src, int a2, char a3); int __thiscall sub_6C10B0(_DWORD *this, unsigned int a2); int __thiscall sub_6C10D0(int this); unsigned __int8 __thiscall sub_6C1100(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3); void __thiscall sub_6C1130(_DWORD *this); int __thiscall sub_6C1150(int this, _DWORD *a2); char *__thiscall sub_6C1190(_BYTE *this); int __thiscall sub_6C11C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); unsigned int __thiscall sub_6C1220(int this, unsigned __int8 *a2); int __thiscall sub_6C1330(_DWORD *this, int a2); int __thiscall sub_6C1440(_DWORD *this, int *a2); int __thiscall sub_6C1480(_DWORD *this, int *a2); int __thiscall sub_6C14C0(_BYTE *this, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_6C1530(_DWORD *this, _DWORD *a2); BOOL __thiscall sub_6C1560(_DWORD *this); _DWORD *__thiscall sub_6C15B0(_DWORD *this, _DWORD *a2); int __thiscall sub_6C15E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_6C1610(_DWORD *this, int *a2, _DWORD *a3); float *__thiscall sub_6C1760(_DWORD *this); char *__thiscall sub_6C17E0(int this); int __thiscall sub_6C1860(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void *__thiscall sub_6C1980(void *this, char a2); unsigned int sub_6C1FE0(); char __thiscall sub_6C25F0(_DWORD *this); _DWORD *__thiscall sub_6C2770(_DWORD *this, char *a2, int a3); int __thiscall sub_6C2860(_DWORD *this); char __thiscall sub_6C2890(_DWORD *this, int a2, int a3, int a4, int a5); char __cdecl sub_6C28F0(int a1, int a2, int a3, int a4); int __thiscall sub_6C2930(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_6C2980(_DWORD *this, int a2, int a3, int a4); int __cdecl sub_6C29C0(int a1, int a2); void __thiscall sub_6C2A20(_DWORD *this, float a2); int __thiscall sub_6C2AE0(_DWORD *this, float a2); _DWORD *__thiscall sub_6C2BA0(_DWORD *this, _DWORD *a2, int a3); int sub_6C2C50(); int __cdecl sub_6C2CA0(float); // idb void __thiscall sub_6C2CD0(_DWORD *this, int a2); LONG __thiscall sub_6C2D50(void *this, _DWORD *a2); void ***__thiscall sub_6C2E00(void ***this, void ***a2); int __thiscall sub_6C2EC0(_DWORD *this, int a2); int __thiscall sub_6C2ED0(_DWORD *this, int a2); char sub_6C2EE0(); char __stdcall sub_6C2F00(int a1); void __thiscall sub_6C2F30(_DWORD *this, int a2); char __thiscall sub_6C2F80(int this, int a2, int a3, int a4, int a5); bool __stdcall sub_6C3010(int a1, const char *a2); char __stdcall sub_6C3070(int a1, int a2); void __stdcall sub_6C30E0(int a1, unsigned int a2); void __stdcall sub_6C31D0(int a1, unsigned int a2); void __stdcall sub_6C3290(int a1, int a2); void __thiscall sub_6C3360(_DWORD *this, char *a2, _DWORD *a3, int a4); void __thiscall sub_6C3930(_DWORD *this); void ***sub_6C4520(); char *__thiscall sub_6C4530(_DWORD *this, char *a2); void ***sub_6C45A0(); void *__thiscall sub_6C45B0(void *this, char a2); char *__thiscall sub_6C45E0(_DWORD *this, char *a2); int __thiscall sub_6C4650(_DWORD *this, size_t a2, size_t a3, int a4, int a5, size_t a6); int __thiscall sub_6C4970(int, size_t, size_t, void *, size_t); // idb _DWORD *__thiscall sub_6C4B40(_DWORD *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_6C4BC0(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_6C4C40(int this, int a2); int __thiscall sub_6C4C60(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_6C4CC0(_DWORD *this); char sub_6C4D00(); char __thiscall sub_6C4D20(_DWORD **this); char __thiscall sub_6C4D60(_DWORD **this); char __stdcall sub_6C4DA0(_DWORD *a1); signed int __thiscall sub_6C4DB0(int *this, int a2); signed int __thiscall sub_6C4E30(_DWORD *this, _WORD *a2); signed int __stdcall sub_6C4E60(int a1); int __stdcall sub_6C4EA0(void *); // idb int __stdcall sub_6C4EC0(void *); // idb char __thiscall sub_6C4EE0(_BYTE *this); bool __thiscall sub_6C4F30(_DWORD *this); void sub_6C4F50(); signed int __thiscall sub_6C4F90(_BYTE *this); signed int __thiscall sub_6C4FE0(int this, int a2); void __thiscall sub_6C5130(_DWORD *this, int a2, _DWORD *a3, int a4); signed int __thiscall sub_6C5250(_DWORD *this, _WORD *a2); signed int __stdcall sub_6C52E0(int a1); int __thiscall sub_6C5310(int this, float a2); char __thiscall sub_6C5370(char *this); signed int __stdcall sub_6C54F0(_BYTE *a1); int __thiscall sub_6C55B0(int this, int a2, char a3); int __thiscall sub_6C5790(_DWORD *this, int a2); signed int __thiscall sub_6C5810(_DWORD *this, _WORD *a2); signed int __thiscall sub_6C5970(_DWORD *this, _WORD *a2); signed int __thiscall sub_6C59E0(_DWORD *this, unsigned __int16 *a2); signed int __thiscall sub_6C5C50(_DWORD *this, _WORD *a2); // signed int __usercall sub_6C5DA0@(int a1@, int a2@); // void __userpurge sub_6C5F10(_BYTE *a1@, int a2@, float a3); int __thiscall sub_6C72A0(_DWORD *this, int a2, unsigned int a3); signed int __thiscall sub_6C7400(_DWORD *this, _BYTE *a2); int __thiscall sub_6C7520(int this, void *a2); int __thiscall sub_6C7600(int this, void *a2); signed int __thiscall sub_6C76E0(_DWORD *this, int a2); // signed int __userpurge sub_6C78A0@(int a1@, int a2@, int a3); char __thiscall sub_6C7A90(_DWORD *this, signed int a2); char __thiscall sub_6C7B80(_DWORD *this, int a2); signed int __thiscall sub_6C7CC0(_DWORD *this, __int16 *a2); signed int __thiscall sub_6C7E20(_DWORD *this, _WORD *a2); signed int __stdcall sub_6C7F90(_WORD *a1); _DWORD *__thiscall sub_6C81E0(_DWORD *this, void *a2, int a3); char __thiscall sub_6C8610(int this); signed int __thiscall sub_6C8790(unsigned __int8 *this, unsigned __int16 *a2); _DWORD *__thiscall sub_6C9050(_DWORD *this, _DWORD *a2, int a3); signed int __thiscall sub_6C9780(_DWORD *this, _BYTE *a2); LONG __thiscall sub_6C9900(_DWORD *this); void ***__thiscall sub_6C9A30(void ***this); LONG __cdecl sub_6C9C50(int a1); signed int __thiscall sub_6C9D20(int this, _WORD *a2); // char __userpurge sub_6C9D90@(unsigned __int8 *a1@, int a2@, int a3, int a4, int a5, unsigned __int16 *a6); int __cdecl sub_6CA390(int a1); _DWORD *__cdecl sub_6CA3C0(_DWORD *a1); _DWORD *__thiscall sub_6CA3E0(_DWORD *this); _DWORD *__thiscall sub_6CA440(_DWORD *this); int __thiscall sub_6CA4C0(_DWORD *this, _DWORD *a2); void *__stdcall sub_6CA520(char *a1); int sub_6CA580(); int sub_6CA5A0(); int __cdecl sub_6CA5C0(unsigned int a1); _DWORD *__thiscall sub_6CA610(_DWORD *this, int a2); _DWORD *__cdecl sub_6CA670(_DWORD *a1, _DWORD *a2, _DWORD *a3); int *__thiscall sub_6CA6C0(_DWORD *this, int *a2, int a3); int __thiscall sub_6CA910(_DWORD *this, int a2, void *a3, int a4); int **__thiscall sub_6CA9F0(_DWORD *this, int **a2, _WORD *a3); int __thiscall sub_6CAA70(_DWORD *this); int **__thiscall sub_6CAAC0(_DWORD *this, int **a2, _WORD *a3); int *__thiscall sub_6CAB30(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); int __thiscall sub_6CABD0(_DWORD *this, int a2, char a3, int a4, void *a5); _DWORD *__thiscall sub_6CADE0(_DWORD *this, char *a2); _DWORD *__thiscall sub_6CAE60(_DWORD *this, char *a2); int *__thiscall sub_6CAEE0(_DWORD *this, int *a2, int a3); void __stdcall sub_6CB1C0(void *a1); int __thiscall sub_6CB200(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_6CB2E0(_DWORD *this); int *__thiscall sub_6CB340(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); unsigned int __thiscall sub_6CB400(unsigned int *this, char *a2); signed int __thiscall sub_6CB510(_BYTE *this, int a2); unsigned int __thiscall sub_6CB540(unsigned int *this, int a2); void __thiscall sub_6CB5C0(_DWORD *this); _DWORD *__thiscall sub_6CB620(unsigned int *this, _DWORD *a2); void __thiscall sub_6CB6E0(_DWORD *this, int a2); void *__thiscall sub_6CB7E0(void *this, char a2); char __thiscall sub_6CB830(_DWORD *this, char a2); int sub_6CB8A0(); char __thiscall sub_6CB8C0(_DWORD *this, int a2); char __thiscall sub_6CB910(char *this, int a2, int a3, int a4, char *a5); LONG __thiscall sub_6CBB00(_DWORD *this); int __thiscall sub_6CBB50(int *this); signed int __thiscall sub_6CBCA0(_DWORD *this, int a2); int __thiscall sub_6CBE40(int *this, int a2, int a3); int __thiscall sub_6CBE90(signed int *this); signed int __thiscall sub_6CBEC0(signed int *this, unsigned int a2); _DWORD *__thiscall sub_6CBF30(_DWORD *this); int __thiscall nullsub_29(_DWORD); // weak char __thiscall sub_6CBFB0(void *this, FILE *a2); bool __cdecl sub_6CC050(int a1, int a2); int __cdecl sub_6CC110(int a1, int *a2, int a3); char __cdecl sub_6CC250(int a1, int a2, int *a3, int a4); // char __usercall sub_6CC2A0@(int a1@, int a2, HWND hWnd, int a4, int a5, int a6); char __cdecl sub_6CC430(int a1, HWND a2, int a3, int a4); _DWORD *__thiscall sub_6CC840(_DWORD *this); BOOL __thiscall sub_6CC860(int *this, int a2, int *a3); int __thiscall sub_6CC990(int this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8); int __cdecl sub_6CCA10(void *, int, int, int, int, int); // idb void __cdecl sub_6CCAB0(void *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); void sub_6CCC30(); int __cdecl sub_6CCEB0(int a1, const void **a2, _DWORD *a3); void __thiscall sub_6CCEF0(void ***this); char *__stdcall sub_6CCF70(char *a1, int a2, void *a3); int __thiscall sub_6CD040(_DWORD *this, int a2, void *a3); int sub_6CD0C0(); int __stdcall sub_6CD0D0(__int16 a1); char sub_6CD0E0(); char sub_6CD100(); char sub_6CD110(); _DWORD *__thiscall sub_6CD120(_DWORD *this, _DWORD *a2); void __stdcall sub_6CD160(int a1, int a2, int a3); char __stdcall sub_6CD170(int a1, int a2, int a3, int a4); void __stdcall sub_6CD180(int a1, int a2); void __stdcall sub_6CD190(int a1, int a2); void __stdcall sub_6CD1A0(int a1, int a2); void __stdcall sub_6CD1B0(int a1, int a2, int a3); void __stdcall sub_6CD1C0(int a1, int a2); void __stdcall sub_6CD1D0(int a1, int a2); void __stdcall sub_6CD1E0(int a1, int a2); char __thiscall sub_6CD1F0(_DWORD **this, __int16 a2); void __thiscall sub_6CD200(_DWORD *this, int a2, unsigned __int16 a3, unsigned __int16 a4, unsigned __int16 a5); void **__stdcall sub_6CD330(int a1, int a2); void __thiscall sub_6CD340(_DWORD *this, int a2); int __thiscall sub_6CD680(_DWORD **this, unsigned __int16 *a2, int a3); void *sub_6CD770(); void __thiscall sub_6CD900(_DWORD *this, unsigned __int16 a2, unsigned __int16 a3, int a4, signed int a5); int *__thiscall sub_6CDBF0(_DWORD *this, int *a2, int a3); signed int __thiscall sub_6CDE40(_DWORD *this, char a2); int *__thiscall sub_6CDE90(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); _DWORD *__thiscall sub_6CDF30(_DWORD *this, char *a2); // int __thiscall unknown_libname_14(_DWORD); weak _BYTE *__thiscall sub_6CE010(_DWORD *this, int a2, int a3); char *__stdcall sub_6CE040(int TestChar); int __thiscall sub_6CE0D0(int TestChar, int a2); int __thiscall sub_6CE750(int TestChar, int a2, int a3); char __stdcall sub_6CE820(int a1, unsigned __int16 a2); BOOL __stdcall sub_6CE8A0(int a1); int __thiscall sub_6CE8D0(_DWORD *this, __int16 a2); int __thiscall sub_6CE900(_DWORD *this); bool __stdcall sub_6CE960(int a1, unsigned __int16 a2); int __stdcall sub_6CEA90(int a1, __int16 a2); void __stdcall sub_6CEBE0(__int16 a1); void __thiscall sub_6CECA0(_DWORD *this, __int16 a2); _DWORD *__thiscall sub_6CED70(_DWORD *this); // char __userpurge sub_6CED80@(int a1@, int a2@, int a3@, int a4, int a5, float a6); int __thiscall sub_6CEEC0(_DWORD *this); void __thiscall sub_6CEFA0(_DWORD *this, _DWORD *a2); int __thiscall sub_6CF000(int this); void __thiscall sub_6CF060(void *this, int a2); _DWORD *sub_6CF210(); void sub_6CF270(); void __thiscall sub_6CF2A0(_DWORD *this, int a2); char __thiscall sub_6CF4D0(_DWORD *this, int a2, _WORD *a3); void __thiscall sub_6CF680(_DWORD *this); void __thiscall sub_6CF740(_DWORD *this, __int16 a2); int __thiscall sub_6CF7E0(unsigned __int8 *this, int a2, unsigned __int8 *a3); int __thiscall sub_6CF860(_DWORD *this, int a2, _DWORD *a3, __int16 a4, char a5); int __thiscall sub_6CFC80(_DWORD *this, int a2, _DWORD *a3, __int16 a4, char a5); void __thiscall sub_6CFDF0(_DWORD *this, int a2, _DWORD *a3); void __thiscall sub_6CFEB0(_DWORD *this, int a2, _DWORD *a3); char __thiscall sub_6CFF90(unsigned __int8 *this, unsigned __int16 a2, int a3, int a4); const void **__thiscall sub_6D0060(unsigned __int8 *this, int a2, __int16 a3); void __thiscall sub_6D0140(unsigned __int8 *this, int a2); void *__thiscall sub_6D0300(void *this, char a2); void *__thiscall sub_6D0330(void *this, char a2); void *__thiscall sub_6D0360(void *this, char a2); void *__thiscall sub_6D0390(void *this, char a2); int __thiscall sub_6D03C0(_DWORD *this); _DWORD *__thiscall sub_6D0440(void *this, char a2); int __thiscall sub_6D04D0(_DWORD *this); _DWORD *__thiscall sub_6D0550(void *this, char a2); int __thiscall sub_6D05E0(_DWORD *this); _DWORD *__thiscall sub_6D0660(void *this, char a2); void __stdcall sub_6D06F0(_DWORD *a1); int __thiscall sub_6D0760(_DWORD *this); void __stdcall sub_6D07E0(int a1); int __thiscall sub_6D0840(_DWORD *this); _DWORD *__thiscall sub_6D08C0(void *this, char a2); _DWORD *__thiscall sub_6D0950(void *this, char a2); int __thiscall sub_6D09E0(_DWORD *this); _DWORD *__thiscall sub_6D0A60(void *this, char a2); _DWORD *__thiscall sub_6D0AF0(void *this, char a2); _DWORD *__thiscall sub_6D0B80(void *this, char a2); void *__cdecl sub_6D0C10(void *a1, void *a2, int a3); int __thiscall nullsub_30(_DWORD); // weak int __thiscall nullsub_31(_DWORD); // weak int __thiscall sub_6D0D10(_DWORD *this, unsigned __int16 a2); char __thiscall sub_6D0E10(_DWORD **this); char __thiscall sub_6D0E30(_DWORD **this); char __thiscall sub_6D0E50(_DWORD **this); char __thiscall sub_6D0E70(_DWORD **this); char __thiscall sub_6D0EA0(_DWORD **this); char __thiscall sub_6D0ED0(_DWORD **this); char __thiscall sub_6D0EF0(_DWORD **this); char __thiscall sub_6D0F10(_DWORD **this); void __thiscall sub_6D0F30(char **this, __int16 a2, __int16 a3, float a4); void __thiscall sub_6D11E0(_DWORD *this, float a2); char __thiscall sub_6D1260(int this, int a2); int __thiscall sub_6D1280(int this, int a2, __int16 a3, __int16 a4, float a5); _DWORD *__thiscall sub_6D1370(void *this, int a2); char __thiscall sub_6D13E0(void (__thiscall ***this)(_DWORD, _DWORD), float a2); _DWORD *__thiscall sub_6D1440(_DWORD *this); _DWORD *sub_6D14F0(); void sub_6D1570(); int __thiscall sub_6D1600(char *this); char sub_6D1650(); char __thiscall sub_6D1680(_DWORD *this, int a2, int a3, int a4, int a5); signed int __stdcall sub_6D16B0(int a1); char sub_6D1740(); int sub_6D1780(); void sub_6D1790(); int __cdecl sub_6D18B0(int a1); _DWORD *__thiscall sub_6D19A0(void *this, char a2); _DWORD __stdcall nullsub_32(_DWORD); // weak int __thiscall sub_6D1A30(unsigned __int16 *this); int __thiscall sub_6D1A50(unsigned __int16 *this); int sub_6D1A90(); BOOL __thiscall sub_6D1AA0(unsigned __int16 *this, _DWORD *a2); char *__thiscall sub_6D1AD0(unsigned __int16 *this, int *a2); char __thiscall sub_6D1B50(_DWORD **this, _DWORD *a2); void sub_6D1C50(); void __thiscall sub_6D1C90(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_6D1E60(_DWORD *this, int *a2); void __stdcall sub_6D1FE0(int *a1); signed int __thiscall sub_6D2100(unsigned __int16 *this, int *a2); int __thiscall sub_6D22E0(char *this, int a2); signed int __thiscall sub_6D2350(unsigned __int16 *this, _DWORD *a2); int __thiscall sub_6D2470(_DWORD **this, int a2); char __thiscall sub_6D2630(_DWORD *this, int *a2); int __thiscall sub_6D2820(char *this, int a2); char __thiscall sub_6D2940(int this, int a2, int a3, int a4, int *a5); int __thiscall sub_6D2E60(void ***this); _DWORD *__thiscall sub_6D2F60(void *this, char a2); BOOL __thiscall sub_6D3010(_DWORD *this); bool __thiscall sub_6D3020(_DWORD *this); bool __thiscall sub_6D3050(_DWORD *this); bool __thiscall sub_6D30A0(_DWORD *this); bool __thiscall sub_6D30E0(_DWORD *this); bool __thiscall sub_6D3120(_DWORD *this); bool __thiscall sub_6D3160(_DWORD *this); bool __thiscall sub_6D31A0(_DWORD *this); bool __thiscall sub_6D31E0(_DWORD *this); bool __thiscall sub_6D3220(_DWORD *this); char __thiscall sub_6D3250(_DWORD *this, int a2); char __thiscall sub_6D3280(_DWORD *this, int a2); int __thiscall nullsub_33(_DWORD); // weak int __thiscall nullsub_34(_DWORD); // weak char __thiscall sub_6D32F0(_DWORD *this); bool __thiscall sub_6D3340(_DWORD *this, int a2); bool __thiscall sub_6D3370(_DWORD *this); void __thiscall sub_6D3380(_DWORD *this); BOOL __thiscall sub_6D33D0(_DWORD *this, int *a2); signed int __thiscall sub_6D33F0(_DWORD *this, int a2); int __thiscall sub_6D3430(_DWORD ***this, unsigned __int8 *a2); signed int __thiscall sub_6D3470(_BYTE *this, _BYTE *a2); int __thiscall sub_6D3490(int this, unsigned __int16 *a2); // int __userpurge sub_6D3500@(int a1@, int a2@, int a3); int __thiscall sub_6D3660(_BYTE **this, _DWORD *a2); int __thiscall sub_6D36C0(char *this, int a2); int __cdecl sub_6D3770(char a1); double sub_6D3790(); void sub_6D37C0(); int sub_6D3800(); int sub_6D3810(); int sub_6D3830(); int sub_6D3840(); int sub_6D3860(); int sub_6D3870(); int sub_6D3880(); int sub_6D3890(); char __cdecl sub_6D38A0(char a1); int sub_6D38C0(); int sub_6D38D0(); int sub_6D38E0(); int sub_6D38F0(); int sub_6D3900(); int sub_6D3920(); LONG __thiscall sub_6D3940(_DWORD *this); void __thiscall sub_6D3C80(int this, float a2); char __thiscall sub_6D3CD0(int this, int a2, int *a3, int a4); int sub_6D3E70(); BOOL __thiscall sub_6D3EC0(_DWORD *this, int a2); signed int __thiscall sub_6D3F10(_DWORD **this, int a2, unsigned __int16 *a3); int __thiscall sub_6D40D0(int this, int a2); signed int __thiscall sub_6D41E0(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_6D4250(_DWORD **this, int a2); int __thiscall sub_6D42D0(_DWORD **this, unsigned __int16 *a2); int __thiscall sub_6D4350(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_6D43C0(_DWORD *this, _DWORD *a2); int __thiscall sub_6D4440(char *this, unsigned __int16 *a2); int __thiscall sub_6D4500(_DWORD **this, unsigned __int16 *a2); int __thiscall sub_6D4570(int this, unsigned __int16 *a2); // int __userpurge sub_6D4610@(int a1@, int a2@, int a3@, unsigned __int16 *a4); int __thiscall sub_6D46D0(_DWORD **this, unsigned __int16 *a2); int __thiscall sub_6D4740(int *this, _DWORD *a2); int __thiscall sub_6D47D0(int this, int a2); int sub_6D4850(); int sub_6D4860(); int __thiscall sub_6D4870(_DWORD *this, unsigned __int16 *a2); int __stdcall sub_6D49D0(_WORD *a1); signed int __stdcall sub_6D4A50(int a1); signed int __thiscall sub_6D4AA0(void *this, int a2); signed int __thiscall sub_6D4B40(char *this, unsigned __int16 *a2); signed int __thiscall sub_6D4C90(_DWORD *this, unsigned __int16 *a2); signed int __thiscall sub_6D4D70(char *this, int a2); signed int __thiscall sub_6D55C0(_DWORD *this, int a2); int __thiscall sub_6D5710(_DWORD **this, int a2); signed int __thiscall sub_6D5E20(char *this, int a2); signed int __thiscall sub_6D5FC0(_BYTE *this, int a2); signed int __thiscall sub_6D6000(char *this, unsigned __int16 *a2); signed int __thiscall sub_6D6080(char *this, _WORD *a2); int __thiscall sub_6D6100(_DWORD **this, unsigned __int16 *a2); // int __userpurge sub_6D62D0@(int a1@, int a2@, int *a3); int __thiscall sub_6D6460(char *this, _DWORD *a2); int __thiscall sub_6D6510(char *this, int *a2); signed int __thiscall sub_6D65E0(char *this, unsigned __int16 *a2); signed int __thiscall sub_6D6660(char *this, unsigned __int16 *a2); signed int __stdcall sub_6D6700(unsigned int *a1); _DWORD *__thiscall sub_6D6A70(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_6D6C30(char *this, unsigned __int16 *a2); int __thiscall sub_6D6D10(_DWORD *this); LONG __thiscall sub_6D6D80(_DWORD *this); int __thiscall sub_6D6F00(_DWORD **this, char *a2); signed int __thiscall sub_6D7230(int this, int a2); int __thiscall sub_6D7380(_DWORD *this, int *a2); int __thiscall sub_6D7570(_DWORD **this, int a2); // int __userpurge sub_6D7690@(int a1@, int a2@, int a3); signed int __stdcall sub_6D7A90(int a1); int __thiscall sub_6D7BD0(_DWORD *this, int a2); signed int __thiscall sub_6D7DE0(_DWORD *this, unsigned __int16 *a2); signed int __stdcall sub_6D7F40(unsigned __int8 *a1); char __thiscall sub_6D7FD0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); LONG __fastcall sub_6D8040(_DWORD *a1); signed int __stdcall sub_6D8180(unsigned __int16 *a1); char *__thiscall sub_6D81F0(_DWORD *this, int a2); _DWORD *__thiscall sub_6D82E0(int this, char a2, _DWORD *a3); int __thiscall sub_6D8390(_DWORD *this, int a2); char __thiscall sub_6D8430(int this, _WORD *a2, _WORD *a3); signed int __thiscall sub_6D84E0(int *this, _DWORD *a2); void ***__thiscall sub_6D8590(void ***this); int __cdecl sub_6D8870(int a1); signed int __thiscall sub_6D8930(_DWORD *this, unsigned __int16 *a2); signed int __thiscall sub_6D8C00(char *this, _WORD *a2); char *__cdecl sub_6D8C50(int a1); int __cdecl sub_6D8C70(int a1); char __cdecl sub_6D8C90(_WORD *a1, _WORD *a2); signed int __stdcall sub_6D8CC0(signed int a1); char __thiscall sub_6D8D00(void *this, int a2, int a3, int a4, int a5); void *__thiscall sub_6D9DD0(void *this, char a2); int __thiscall sub_6D9E00(_DWORD *this); _DWORD *__thiscall sub_6D9E80(void *this, char a2); char *__thiscall sub_6D9F10(char *this, int a2); int sub_6DA130(); _DWORD *__thiscall sub_6DA150(void *this, char a2); int __cdecl sub_6DA1E0(int a1); void __thiscall sub_6DA230(_DWORD *this); void __stdcall sub_6DA320(void *a1); void *__thiscall sub_6DA360(void *this, char a2); void ***__thiscall sub_6DA390(void ***this); void *__thiscall sub_6DA450(void *this, char a2); int __thiscall sub_6DA480(_DWORD *this, int a2, int a3); signed int __thiscall sub_6DA530(_DWORD *this, _DWORD *a2); int __thiscall sub_6DA590(_DWORD *this, float a2, int a3); int __cdecl sub_6DA5E0(int a1, _DWORD *a2, int a3, int a4); int __cdecl sub_6DA9A0(int *a1); signed int __thiscall sub_6DACE0(_DWORD *this, int a2, int a3); signed int __thiscall sub_6DAED0(_DWORD *this, int a2, int a3); signed int __thiscall sub_6DB040(_DWORD *this, volatile LONG *a2, _DWORD *a3, int a4); int __stdcall sub_6DB2D0(int, __time32_t Time); // idb signed int __thiscall sub_6DB490(_DWORD *this, __int16 a2, int a3, __int16 a4, __int16 a5, int a6, int a7); char __thiscall sub_6DB4C0(_DWORD *this); signed int __thiscall sub_6DB510(_DWORD *this); int __thiscall sub_6DB5A0(_DWORD *this, int a2); char __thiscall sub_6DB5D0(_DWORD *this, int a2, float *a3); _DWORD __stdcall sub_6DB6E0(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak char __thiscall sub_6DB7D0(int this); char __thiscall sub_6DB7F0(int this, __int16 a2, char a3, int a4); int __thiscall sub_6DB8B0(_DWORD *this, int a2, unsigned __int16 a3, __int16 a4); void __thiscall sub_6DB900(_DWORD *this, __int16 a2); void __stdcall sub_6DB930(_DWORD *a1, _DWORD *a2); // int __userpurge sub_6DB9E0@(int a1@, int a2@, int a3); signed int __thiscall sub_6DBAD0(_DWORD *this, int a2, int a3, int a4); signed int __thiscall sub_6DBBC0(_DWORD *this, int a2, int a3, int a4); signed int __thiscall sub_6DBD30(int this, int a2, char a3); _DWORD *__thiscall sub_6DBDD0(void *this); signed int __thiscall sub_6DBEB0(_DWORD *this, volatile LONG *a2); signed int __thiscall sub_6DBF60(_DWORD *this); int __stdcall sub_6DC040(int, __time32_t Time); // idb int __stdcall sub_6DC170(_DWORD *a1); void __thiscall sub_6DC230(int this); signed int __thiscall sub_6DC2B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); void __thiscall sub_6DC340(_DWORD *this); void __thiscall sub_6DC3F0(int this, int a2, int a3, int a4); char __thiscall sub_6DC560(_DWORD *this, __int16 a2, __int16 a3, char a4); void __thiscall sub_6DC610(_DWORD **this, _DWORD *a2); signed int __thiscall sub_6DC770(_DWORD *this); char __stdcall sub_6DC830(_DWORD *a1); void **__thiscall sub_6DC870(_DWORD *this, void **a2, char *a3, int a4, char a5); char __stdcall sub_6DC9E0(_DWORD *a1); void __thiscall sub_6DCAC0(_DWORD *this, int a2, char a3); void __thiscall sub_6DCB60(int this, char a2); __int16 __thiscall sub_6DCBA0(int this, int a2); char *__thiscall sub_6DCF60(_DWORD *this, int a2); void __thiscall sub_6DCFD0(_DWORD *this, int a2); char __stdcall sub_6DD410(int a1, float *a2); char __thiscall sub_6DD640(_DWORD *this, __int16 a2, __int16 a3); char __thiscall sub_6DD940(_DWORD *this, char a2); BOOL __thiscall sub_6DD990(_DWORD *this, int a2, char a3); char __thiscall sub_6DDA40(_DWORD *this, int a2); void __thiscall sub_6DDAA0(_DWORD *this, char *a2, int a3, __int16 a4); void __thiscall sub_6DDC70(_DWORD *this); void __thiscall sub_6DDE10(_DWORD *this, int a2, int a3); void __thiscall sub_6DDF10(_DWORD **this, int a2); BOOL __thiscall sub_6DDFD0(_DWORD *this); void __thiscall sub_6DE060(_DWORD *this, _DWORD *a2, char a3); signed int __thiscall sub_6DE220(_DWORD *this); int __thiscall sub_6DE280(_DWORD *this, int a2); signed int __thiscall sub_6DE2B0(_DWORD *this); bool __thiscall sub_6DE3E0(_DWORD *this, int a2, int a3); char __thiscall sub_6DE490(_DWORD *this); signed int __thiscall sub_6DE500(_DWORD *this, char a2, char a3); int __thiscall sub_6DE850(_DWORD *this, int a2, int a3, int a4, float a5, char a6, int a7); int __thiscall sub_6DEA90(_DWORD *this, int a2, int a3, float a4); signed int __thiscall sub_6DEB30(_DWORD *this, char a2, char a3); int __thiscall sub_6DEC00(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7, int a8); _DWORD *__thiscall sub_6DF1B0(_DWORD *this, int a2, void *a3, int a4, int a5, int a6, int a7, int a8, int a9); int __stdcall sub_6DF2D0(int, void *, int, int, int, int, int, int); // idb void __thiscall sub_6DF580(_DWORD *this); void __thiscall sub_6DF830(_DWORD *this, int a2); signed int __thiscall sub_6DFA50(_DWORD *this, int a2); signed int __thiscall sub_6DFB70(_DWORD *this, void **a2, int a3, char a4); // signed int __userpurge sub_6DFD50@(int a1@, int a2@, int a3@, int a4@, int a5); signed int __thiscall sub_6DFF90(_DWORD *this, volatile LONG *a2); signed int __thiscall sub_6E0250(int this, char a2); signed int __thiscall sub_6E0370(char *this); char __thiscall sub_6E04F0(_DWORD *this, int a2); _DWORD *__thiscall sub_6E0560(_DWORD *this, int a2); int sub_6E0620(); void __thiscall sub_6E0640(int this); _DWORD *__thiscall sub_6E06D0(_DWORD **this); _DWORD *__stdcall sub_6E0720(_DWORD *a1); int __cdecl sub_6E0750(__int16 a1); int __cdecl sub_6E07B0(unsigned __int8 *); // idb _WORD *__cdecl sub_6E0820(__int16 a1); int __cdecl sub_6E0860(__int16 a1, int a2); void __thiscall sub_6E08B0(void *); // idb void __thiscall sub_6E08E0(void *); // idb void *__thiscall sub_6E09B0(void *this, char a2); _DWORD *__thiscall sub_6E09E0(_DWORD *this); void *__thiscall sub_6E0A20(void *this, char a2); int **__thiscall sub_6E0A50(_DWORD *this, int **a2, _WORD *a3); int __thiscall sub_6E0AC0(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_6E0BA0(_DWORD *this, int a2, int a3, void *a4); _DWORD *__thiscall sub_6E0D10(_DWORD *this, char *a2); int __thiscall sub_6E0D80(_DWORD *this, _WORD *a2); int __thiscall sub_6E0E00(_DWORD *this, int a2, char a3, int a4, void *a5); _DWORD *__thiscall sub_6E1030(_DWORD *this); char __stdcall sub_6E10C0(__int16 a1, int a2); char __stdcall sub_6E10F0(__int16 a1, float a2, int a3); char __stdcall sub_6E1180(int a1); char *sub_6E11B0(); char __stdcall sub_6E11C0(__int16 a1, float a2, int a3); char sub_6E1250(); char __stdcall sub_6E1360(__int16 a1); char __stdcall sub_6E13C0(__int16 a1, float *a2); char __thiscall sub_6E1470(_DWORD *this, __int16 a2, __int16 a3); int __thiscall sub_6E1500(_DWORD *this); _DWORD __stdcall nullsub_35(_DWORD); // weak int __thiscall sub_6E1550(_DWORD *this, char a2); signed __int16 __thiscall sub_6E15E0(_DWORD *this, int a2); char __thiscall sub_6E1670(_DWORD *this, char a2); char __thiscall sub_6E1730(_DWORD *this, __int16 *a2); int __thiscall sub_6E19E0(_DWORD *this, int a2, void *a3, int a4); signed int __thiscall sub_6E1AC0(_DWORD *this, _DWORD *a2); BOOL __thiscall sub_6E1B10(int this, __int16 a2, __int16 a3); int __thiscall sub_6E1BC0(_DWORD *this, float a2); int __thiscall sub_6E1C00(_DWORD *this, float a2); bool __stdcall sub_6E1D70(int a1); int __thiscall sub_6E1DA0(_DWORD *this); int __thiscall sub_6E1E70(_DWORD *this, float a2); signed int __thiscall sub_6E1F00(_DWORD *this, int a2); BOOL __thiscall sub_6E2010(_DWORD *this); void __thiscall sub_6E20B0(_DWORD *this, __int16 a2); char __thiscall sub_6E2160(_DWORD *this, __int16 a2); int __thiscall sub_6E21D0(_DWORD *this, char a2); char __thiscall sub_6E2210(_DWORD *this, int a2); signed int __thiscall sub_6E2320(_DWORD *this, char a2); signed int __thiscall sub_6E2380(_DWORD *this, char a2); int __thiscall sub_6E2400(_DWORD *this, char a2); int __thiscall sub_6E2430(_DWORD *this, int a2, float a3); int __thiscall sub_6E24B0(_DWORD *this, __int16 a2); bool __thiscall sub_6E2530(_DWORD *this, char a2); signed __int16 __thiscall sub_6E2560(_DWORD *this, char a2); int __stdcall sub_6E25A0(int a1); signed int __thiscall sub_6E2740(_DWORD *this, int a2, float *a3); signed int __thiscall sub_6E2990(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_6E2AD0(const void **this, int a2, int a3, int a4, int a5, char *Src, int a7); int __thiscall sub_6E2C40(_DWORD *this, int a2, __int16 a3); int __thiscall sub_6E2D00(_DWORD *this, int a2); void __thiscall sub_6E2D40(_DWORD *this); signed int __thiscall sub_6E2DB0(_DWORD *this, const void **a2, int a3, int a4, int a5, int a6); void *__thiscall sub_6E31C0(void *this, char a2); int **__thiscall sub_6E31F0(_DWORD *this, int **a2, _BYTE *a3); int __thiscall sub_6E3260(_DWORD *this, int a2, void *a3, int a4); _DWORD *__thiscall sub_6E3340(_DWORD *this, char *a2); _DWORD *__thiscall sub_6E33B0(_DWORD *this); void __thiscall sub_6E3500(_DWORD *this); void *__thiscall sub_6E3660(void *this, char a2); signed int __stdcall sub_6E3690(int a1); signed int __stdcall sub_6E36A0(int a1); signed int __stdcall sub_6E36B0(int a1, int a2); BOOL __thiscall sub_6E3700(_WORD *this, __int16 a2, __int16 a3, _DWORD *a4); int __thiscall sub_6E3770(_WORD *this, float a2, int a3); void __thiscall sub_6E38F0(_DWORD *this); signed int __thiscall sub_6E3900(_DWORD *this); int __thiscall sub_6E39F0(_DWORD *this, unsigned __int8 *a2, __int16 a3, int a4, int a5, int a6, int a7, int a8, void *a9, int a10, int a11, int a12, int a13, int a14, int a15); int __thiscall sub_6E3CF0(_DWORD *this, char a2); int __thiscall sub_6E3D30(_DWORD *this, int a2); void __thiscall sub_6E4030(_DWORD *this); int __thiscall sub_6E40D0(_DWORD *this, int a2, int a3, int a4, size_t a5); int __thiscall sub_6E4250(int, int, void *, size_t); // idb _DWORD *__thiscall sub_6E43A0(_DWORD *this, char *a2); int __thiscall sub_6E4430(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_6E4530(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_6E4690(_DWORD *this, int *a2); signed int __stdcall sub_6E4760(int a1); int __thiscall sub_6E47B0(int this); void __stdcall sub_6E4830(volatile LONG *a1, int a2, int a3); signed int __thiscall sub_6E4970(int *this, int a2, int *a3, int a4, int a5, int a6); void *__cdecl sub_6E5180(void *a1, int a2, int a3); _DWORD *__cdecl sub_6E5210(_DWORD *a1, signed int a2); int __cdecl sub_6E5230(char *, int); // idb unsigned int __cdecl sub_6E5260(int a1, int a2); void __cdecl sub_6E52A0(_DWORD *a1, unsigned int a2, signed int a3); signed int __cdecl sub_6E5370(int a1, const void **a2); void __cdecl sub_6E5460(void *a1, int a2); char __thiscall sub_6E5520(_BYTE *this, int a2, char *Src); char __thiscall sub_6E5650(void *this, char *a2, char *Src); char __thiscall sub_6E56F0(_DWORD *this, char *a2, char *Src); char __thiscall sub_6E5790(const void **this, char *a2, char *Src); int __thiscall sub_6E5810(char *this, int a2); BOOL __thiscall sub_6E58E0(int this); int __thiscall sub_6E5900(_DWORD *this); int __stdcall sub_6E5960(int a1, unsigned int a2); int __thiscall sub_6E59F0(char *this, unsigned int a2); int __thiscall sub_6E5AF0(_DWORD *this, int a2, unsigned int a3); char sub_6E5BA0(); int __stdcall sub_6E5CC0(int a1); int __thiscall sub_6E5CD0(int this); BOOL __thiscall sub_6E5CF0(HWND *this); char __thiscall sub_6E5D80(_DWORD **this, _DWORD *a2, __int16 a3); unsigned int __thiscall sub_6E5F30(char *this, int a2); int __thiscall sub_6E5FF0(char *this, int a2, unsigned int a3); char __thiscall sub_6E6120(HWND *this, int a2); int __thiscall sub_6E61A0(_DWORD *this, int a2); char __thiscall sub_6E6210(_DWORD *this, char a2, int a3); void __thiscall sub_6E6290(_DWORD *this, unsigned int a2); void __thiscall sub_6E6390(_DWORD *this, int a2, unsigned int a3); void __thiscall sub_6E6530(int this, int a2, unsigned int a3); char __thiscall sub_6E66D0(_DWORD *this); char __thiscall sub_6E6700(_DWORD *this); void __thiscall sub_6E6770(int this); char __thiscall sub_6E67C0(int this, int a2, int a3, int a4); char __thiscall sub_6E6840(int this, char a2); void __thiscall sub_6E6970(_DWORD *this, float a2); LONG __thiscall sub_6E6AC0(void **this); int __cdecl sub_6E6B70(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_6E6CF0(_DWORD *this); volatile LONG *__cdecl sub_6E6E30(int a1); void __thiscall sub_6E6F60(int *this, int a2); char __thiscall sub_6E7120(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); void __thiscall sub_6E7180(_WORD *this, int a2); // void __userpurge sub_6E776F(int a1@, int a2@, int a3@, char *a4@, int a5); void *__thiscall sub_6E7FD0(void *this, char a2); void *__thiscall sub_6E8010(void *this, char a2); _DWORD *__thiscall sub_6E8040(_DWORD *this); char __thiscall sub_6E8110(void *this, int a2); void __stdcall sub_6E8800(int a1, int a2, unsigned __int8 a3); char __thiscall sub_6E89F0(char *this); char __thiscall sub_6E8DE0(_WORD *this, int a2, int a3); char __thiscall sub_6E8F10(_WORD *this, unsigned int a2, int a3); int __thiscall sub_6E8FB0(char *this); volatile LONG *__cdecl sub_6E8FC0(int a1); void *__thiscall sub_6E90F0(void *this, char a2); int __thiscall sub_6E9130(_DWORD *this, unsigned int a2); int __cdecl sub_6E9150(__int16 a1, int a2); _DWORD *__thiscall sub_6E91B0(_DWORD *this); BOOL __thiscall sub_6E9240(int this); int __thiscall sub_6E9260(_DWORD *this); char sub_6E92B0(); BOOL __thiscall sub_6E92E0(HWND *this); int __thiscall sub_6E9370(_DWORD **this, int a2); char __thiscall sub_6E93D0(_DWORD **this, int a2, int a3); char __thiscall sub_6E94A0(HWND *this, int a2); volatile LONG *__cdecl sub_6E9520(int a1); void __thiscall sub_6E9650(int this, int a2, int a3); char __thiscall sub_6E97D0(void *this, int a2); void *__thiscall sub_6E9DC0(void *this, char a2); int __thiscall sub_6E9E80(_DWORD *this); BOOL __thiscall sub_6E9EF0(HWND *this); char __thiscall sub_6E9FB0(int this, int a2, int a3); BOOL __thiscall sub_6EA010(HWND *this, int a2); char __thiscall sub_6EA020(void *this, int a2); void *__thiscall sub_6EA720(void *this, char a2); char sub_6EA780(); char __thiscall sub_6EA7B0(_DWORD *this, int a2); int __thiscall sub_6EA800(int this); int __thiscall sub_6EA840(int this, int a2); char __thiscall sub_6EA8B0(int this, int a2, int a3); char __thiscall sub_6EA9D0(_DWORD **this, int a2, void *a3, int a4); _DWORD *__thiscall sub_6EAA40(_DWORD *this); LONG __thiscall sub_6EAAF0(void **this); volatile LONG *__cdecl sub_6EABC0(int a1); int __thiscall sub_6EACF0(_DWORD *this); int __thiscall sub_6EB000(_DWORD *this); char __thiscall sub_6EB0C0(void *this, int a2); int __thiscall sub_6EC130(_DWORD **this); void *__thiscall sub_6EC150(void *this, char a2); int __thiscall sub_6EC180(_DWORD *this); char __thiscall sub_6EC1B0(_DWORD **this, int a2, int a3); char __thiscall sub_6EC2C0(void *this, int a2); int __cdecl sub_6EC6F0(int a1); _DWORD *__thiscall sub_6EC840(void *this, char a2); char __thiscall sub_6EC9B0(volatile LONG **this, int a2); char __thiscall sub_6ED5C0(int this, int a2, int a3); int __thiscall sub_6ED740(_DWORD **this); int __cdecl sub_6ED7F0(int a1); _DWORD *__thiscall sub_6ED950(void *this, char a2); _DWORD *__thiscall sub_6EDA30(_DWORD **this, int a2, int a3); char __thiscall sub_6EDA60(_DWORD *this, int a2); int __cdecl sub_6EDC20(int a1); void *__thiscall sub_6EDD70(void *this, char a2); // int __userpurge sub_6EDE30@(int a1@, int a2@, int a3, int a4); unsigned int __thiscall sub_6EDFE0(_DWORD *this); unsigned int __thiscall sub_6EE040(_DWORD *this); // int __usercall sub_6EE080@(_BYTE *a1@, int a2@); // int __usercall sub_6EE0E0@(int a1@, int a2@); // void __userpurge sub_6EE0F0(int a1@, int a2@, float a3); char __thiscall sub_6EE150(_DWORD *this, int a2); int __cdecl sub_6EE3A0(int a1); void *__thiscall sub_6EE510(void *this, char a2); int __thiscall sub_6EE550(char *this, int a2); char sub_6EE5A0(); char __thiscall sub_6EE5E0(_DWORD *this, int a2); int __thiscall sub_6EE630(char *this); int __thiscall sub_6EE650(_DWORD *this, int a2); signed __int16 __thiscall sub_6EE710(_DWORD **this, unsigned int a2); void __thiscall sub_6EE830(_DWORD *this, int a2, int a3); int __thiscall sub_6EEA80(int this); int __thiscall sub_6EEBD0(_DWORD **this); char __thiscall sub_6EED90(int this, int a2, int a3); char __thiscall sub_6EEED0(_DWORD *this, __int64 a2); char __thiscall sub_6EEF30(_DWORD *this, char a2); LONG __thiscall sub_6EEF90(_DWORD *this); _DWORD *__thiscall sub_6EF040(_DWORD *this); volatile LONG *__cdecl sub_6EF120(int a1); char __thiscall sub_6EF250(volatile LONG **this, int a2); void *__thiscall sub_6EFFD0(void *this, char a2); unsigned int __thiscall sub_6F0060(int this, unsigned int a2); __int16 __thiscall sub_6F0090(int this, __int16 a2); char __thiscall sub_6F00B0(_BYTE *this, char a2); signed int __thiscall sub_6F00D0(int this); void __thiscall sub_6F00F0(_BYTE *this); struct tm *__thiscall sub_6F0130(const __time32_t *this, _DWORD *a2); char __thiscall sub_6F01B0(volatile LONG **this, int a2); void __fastcall sub_6F0980(int a1); _WORD *__thiscall sub_6F0B80(_WORD *this); void __thiscall sub_6F0EE0(_DWORD **this, int a2, int a3); int __cdecl sub_6F0F10(int a1); void *__thiscall sub_6F1070(void *this, char a2); char sub_6F10B0(); char __thiscall sub_6F10E0(_DWORD *this, int a2); int __thiscall sub_6F1150(_DWORD *this, int a2); char __thiscall sub_6F11D0(int this, int a2, int a3); int __thiscall sub_6F1430(_DWORD **this); int __thiscall sub_6F14F0(_DWORD **this); _DWORD *__thiscall sub_6F15A0(_DWORD *this); LONG __thiscall sub_6F1680(_DWORD *this); volatile LONG *__cdecl sub_6F1720(int a1); char __thiscall sub_6F1850(void *this, int a2); // void __noreturn std::vector>::_Xlen(); weak int __thiscall sub_6F2A50(_DWORD *this, int a2, int a3, int a4); void *__thiscall sub_6F2AD0(void *this, char a2); int (__thiscall ***sub_6F2B00())(void *, char); void sub_6F2B10(); _DWORD *__cdecl sub_6F2BF0(int a1); void __cdecl sub_6F2C70(int a1); int sub_6F2D60(); int sub_6F2DC0(); int __cdecl sub_6F2E20(int a1); int __cdecl sub_6F2E90(int a1); int sub_6F2F00(); int sub_6F2F60(); int sub_6F2FC0(); int __cdecl sub_6F2FE0(int a1); int __cdecl sub_6F3060(int a1); int __cdecl sub_6F30D0(unsigned int a1); char __cdecl sub_6F3100(int a1); char __cdecl sub_6F3170(int a1, _DWORD *a2); int __cdecl sub_6F3220(unsigned int a1); int sub_6F3250(); void *__thiscall sub_6F3300(void *this, char a2); _DWORD *sub_6F3330(); _DWORD *__thiscall sub_6F3350(void *this, char a2); char __thiscall sub_6F3420(void *this); char __thiscall sub_6F3440(int this, char a2, char a3, char a4, char a5, u_short a6); float *__thiscall sub_6F3450(float *this, float a2); char __thiscall sub_6F3470(_BYTE *this, char a2); char __thiscall sub_6F3480(void *this); bool __stdcall sub_6F34A0(int a1, const void *a2); __int16 __thiscall sub_6F3520(float *this, unsigned __int16 a2); bool __thiscall sub_6F3550(float *this); char __thiscall sub_6F35E0(_BYTE *this, int a2, int a3); void __thiscall sub_6F3640(_DWORD *this); char __thiscall sub_6F36A0(_DWORD *this, int a2, int a3, void *a4, size_t a5); char __thiscall sub_6F36F0(_BYTE *this, int a2, int a3, int a4, const void *a5); void __thiscall sub_6F3770(_DWORD *this); char __thiscall sub_6F3820(char *this); void __thiscall sub_6F3A40(_DWORD *this); int __thiscall sub_6F3AE0(_DWORD *this, float a2); int __thiscall sub_6F3B30(_DWORD *this); int __thiscall sub_6F3B60(_DWORD *this); int __thiscall sub_6F3C20(_DWORD *this); char __thiscall sub_6F3D10(_DWORD *this, int a2, int a3, void *a4, size_t a5); int __thiscall sub_6F3D60(_DWORD *this, char *a2, int a3); __int16 __thiscall sub_6F3DE0(_DWORD *this, unsigned __int16 a2); char *__thiscall sub_6F3E00(char *this, char *a2); void *__thiscall sub_6F3E20(void *this, char a2); void *__thiscall sub_6F3E50(void *this, char a2); void *__thiscall sub_6F3EB0(void *this); bool __thiscall sub_6F3EF0(_DWORD *this, _DWORD *a2); char __thiscall sub_6F3F80(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F41B0(_DWORD *this, _DWORD *a2); char __thiscall sub_6F41E0(unsigned __int16 *this, _DWORD *a2); void __thiscall sub_6F45C0(_DWORD *this); _DWORD *__thiscall sub_6F4750(_DWORD *this); int __thiscall sub_6F49D0(char *this); char __thiscall sub_6F4A80(int this, unsigned __int16 a2); int __thiscall sub_6F4B90(int this, unsigned __int16 a2); int __thiscall sub_6F4C90(int this, unsigned __int16 a2); char __thiscall sub_6F4D90(int this, unsigned __int8 (__thiscall ***a2)(_DWORD, _DWORD, int)); bool __thiscall sub_6F4E00(_DWORD *this, _DWORD *a2); char __thiscall sub_6F4E70(_DWORD **this, int a2, int a3); char __thiscall sub_6F4EB0(int this, unsigned __int16 a2); char __thiscall sub_6F5030(int this, unsigned __int16 a2); _DWORD *__thiscall sub_6F51B0(_DWORD *this, int a2); char __thiscall sub_6F5240(_DWORD *this, int a2, int a3); int __thiscall sub_6F52B0(_DWORD *this); int __thiscall sub_6F52C0(_DWORD *this, int a2, int a3); signed int sub_6F5340(); int __thiscall sub_6F5350(_DWORD *this, _DWORD *a2, int a3); signed int sub_6F5420(); signed int sub_6F5430(); void *__thiscall sub_6F5460(void *this); char __thiscall sub_6F5480(_DWORD *this, unsigned __int8 (__thiscall ***a2)(_DWORD, int, int)); char __thiscall sub_6F5560(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F5620(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F5740(_DWORD *this, int a2, int a3); char __thiscall sub_6F5810(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F58D0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F59A0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F5AB0(_DWORD *this, void *a2, int a3); _DWORD *__thiscall sub_6F5CA0(_DWORD *this, int a2, __int16 a3); bool __thiscall sub_6F5E40(_DWORD *this, const char *a2); char __thiscall sub_6F5F60(_DWORD *this, int a2); int __thiscall sub_6F5FF0(_DWORD *this, char *a2, int a3); int __thiscall sub_6F60D0(void *this, char *a2, int a3, char *a4, int a5, int a6); int __thiscall sub_6F6240(void *this, char *a2, int a3, int a4); int __thiscall sub_6F62F0(void *this, int a2, int a3, int a4, int a5, int a6, char *a7); int __thiscall sub_6F6470(void *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8, int a9); int __thiscall sub_6F65F0(void *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8, int a9, int a10, int a11); char __thiscall sub_6F67B0(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_6F6910(_DWORD **this, int a2, int a3); void __thiscall sub_6F6960(_DWORD *this); char __thiscall sub_6F6990(int this, _DWORD *a2); char __thiscall sub_6F6AB0(void *this, _DWORD *a2); bool __thiscall sub_6F6BB0(_DWORD *this, _DWORD *a2); int __thiscall sub_6F6EE0(void *this, int a2, int a3, int a4, int a5, int a6, char *a7, int a8); char __stdcall sub_6F7030(int a1, int a2); char __thiscall sub_6F7040(int this, void *a2); void __thiscall sub_6F72B0(void *); // idb void __thiscall sub_6F72D0(void *this); int __thiscall sub_6F72F0(_DWORD *this, _DWORD *a2, int a3); int __cdecl sub_6F7350(const void *, const void *); // idb _DWORD *__thiscall sub_6F7390(_DWORD *this); char __thiscall sub_6F73C0(void *this); int __thiscall sub_6F73F0(void *, char *); // idb int __thiscall sub_6F7490(_DWORD *this); // _DWORD __stdcall unknown_libname_15(_DWORD); weak int __thiscall sub_6F74D0(int this, int a2); int __thiscall sub_6F74F0(_DWORD *this); signed int sub_6F7500(); int __thiscall sub_6F7530(int this, int a2); bool __thiscall sub_6F7550(const char **this, const char *a2, int a3); int __thiscall sub_6F75A0(_DWORD *this); signed int sub_6F75B0(); int __thiscall sub_6F75E0(int this, int a2); char __thiscall sub_6F7600(_BYTE **this, _DWORD *a2); bool __thiscall sub_6F7650(unsigned __int8 **this, char *a2, int a3); int __thiscall sub_6F7680(_DWORD *this); signed int sub_6F7690(); int __thiscall sub_6F76C0(int this, int a2); char __thiscall sub_6F76E0(_WORD **this, _DWORD *a2); bool __thiscall sub_6F7730(unsigned __int16 **this, char *a2, int a3); int __thiscall sub_6F7760(_DWORD *this); int __thiscall sub_6F77A0(int this, int a2); char __thiscall sub_6F77C0(_DWORD **this, _DWORD *a2); bool __thiscall sub_6F7810(char ***this, char *a2, int a3); int __thiscall sub_6F7840(_DWORD *this); void __thiscall sub_6F7860(void *); // idb int __thiscall sub_6F7880(void *this, _DWORD *a2); int __thiscall sub_6F78B0(_DWORD *this); void *__thiscall sub_6F78C0(_DWORD *this, unsigned int a2); int __thiscall sub_6F78F0(_DWORD *this, int a2); _DWORD *__thiscall sub_6F7920(_DWORD *this, int a2, __int16 a3); char __thiscall sub_6F7A60(_DWORD *this, unsigned __int8 (__thiscall ***a2)(_DWORD, int, int)); char __thiscall sub_6F7AA0(_DWORD *this, _DWORD *a2); bool __thiscall sub_6F7AF0(_DWORD *this, int a2, _DWORD *a3); char __thiscall sub_6F7B30(void *this, _DWORD *a2); void __thiscall sub_6F7BA0(void *); // idb char *__thiscall sub_6F7BF0(char *this); _DWORD *__thiscall sub_6F7D70(_DWORD *this); int __thiscall nullsub_36(_DWORD); // weak char __thiscall sub_6F7D90(_DWORD *this, signed int a2); _DWORD *__thiscall sub_6F7DD0(_DWORD *this); int __thiscall nullsub_37(_DWORD); // weak _DWORD *__thiscall sub_6F7E20(_DWORD *this); int __thiscall nullsub_38(_DWORD); // weak int __thiscall sub_6F7E40(_DWORD *this, int a2); _BYTE *__thiscall sub_6F7E70(_BYTE *this); int __thiscall nullsub_39(_DWORD); // weak _WORD *__thiscall sub_6F7EA0(_WORD *this); int __thiscall nullsub_40(_DWORD); // weak bool __thiscall sub_6F7EC0(char *this, int a2); bool __thiscall sub_6F7ED0(char *this, int a2); int __thiscall nullsub_41(_DWORD); // weak int __thiscall sub_6F7F20(int this, int a2); _DWORD *__thiscall sub_6F7F70(_DWORD *this, int a2, int a3); int __thiscall nullsub_42(_DWORD); // weak signed int __thiscall sub_6F7FB0(_DWORD *this); int __thiscall sub_6F8030(_DWORD *this, int a2); int __thiscall sub_6F8050(_DWORD *this, _BYTE *a2); int __thiscall sub_6F80B0(_DWORD *this, _BYTE *a2); int __thiscall sub_6F8110(_DWORD *this, _BYTE *a2); int __thiscall sub_6F8190(_DWORD *this); int __thiscall sub_6F81E0(_DWORD *this); int __thiscall sub_6F8230(_DWORD *this); int __thiscall sub_6F82A0(_DWORD *this, _BYTE *a2); char __thiscall sub_6F8320(_DWORD *this); signed int __thiscall sub_6F8350(_DWORD *this); int __thiscall sub_6F83E0(_DWORD *this); char __thiscall sub_6F85B0(_DWORD *this, _DWORD *a2); char __thiscall sub_6F8600(_DWORD *this, _DWORD *a2); char __thiscall sub_6F8650(_DWORD *this, _DWORD *a2); char __thiscall sub_6F86C0(_BYTE *this, _DWORD *a2); char __thiscall sub_6F86F0(_BYTE *this, _DWORD *a2); _DWORD *__thiscall sub_6F8730(_DWORD *this); char *__thiscall sub_6F8750(char *this, char *a2); char __thiscall sub_6F88B0(_DWORD *this, int a2, int a3); char __thiscall sub_6F8900(void *this, int a2); int __thiscall sub_6F9420(_DWORD **this, int a2); int __cdecl sub_6F9580(int a1); void *__thiscall sub_6F96E0(void *this, char a2); _DWORD *__thiscall sub_6F9720(_DWORD *this); char sub_6F97D0(); char sub_6F9800(); int __thiscall sub_6F9830(_DWORD **this, int a2); char __thiscall sub_6F9890(float *this, float a2); void __thiscall sub_6F98E0(_DWORD **this); int __thiscall sub_6F9910(_DWORD **this, _DWORD *a2); char __thiscall sub_6F9A10(void *this, int a2); void __thiscall sub_6FAA50(_DWORD **this, int a2, int a3); _BYTE *__thiscall sub_6FAAD0(_DWORD **this, int a2); char *__thiscall sub_6FAF30(_DWORD **this); char *__thiscall sub_6FB010(_DWORD **this, _DWORD *a2, _DWORD *a3); volatile LONG *__cdecl sub_6FB090(int a1); void *__thiscall sub_6FB1C0(void *this, char a2); int __thiscall sub_6FB230(_DWORD **this); char __thiscall sub_6FB310(void *this, int a2); char __thiscall sub_6FB900(_DWORD *this); char __thiscall sub_6FBA00(_DWORD *this, int a2, int a3); int __cdecl sub_6FBA40(int a1); _DWORD *__thiscall sub_6FBB90(void *this, char a2); char __thiscall sub_6FBC60(int this); char __thiscall sub_6FBD00(int this); LONG __thiscall sub_6FBDE0(_DWORD *this); char __thiscall sub_6FBE90(void *this, int a2); char __thiscall sub_6FC5F0(void *this, int a2, int a3); int __thiscall sub_6FC640(_WORD *this, __int16 *a2); int __cdecl sub_6FC6D0(int a1); void *__thiscall sub_6FC830(void *this, char a2); char __thiscall sub_6FC890(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_6FC8E0(_DWORD *this); char __thiscall sub_6FCA10(void *this, int a2); int __thiscall sub_6FD070(_DWORD **this, __int16 *a2, char a3); volatile LONG *__cdecl sub_6FD140(int a1); _DWORD *__thiscall sub_6FD270(void *this, char a2); int __thiscall sub_6FD310(_DWORD *this); char __thiscall sub_6FD340(_BYTE *this, int a2, _DWORD *a3, int a4); signed int __thiscall sub_6FD380(_DWORD *this); signed int __thiscall sub_6FD3B0(_WORD **this, __int16 *a2); int sub_6FD400(); signed int __thiscall sub_6FD410(_DWORD ***this, int a2); signed int __thiscall sub_6FD4D0(_DWORD **this, unsigned __int16 *a2); void sub_6FD570(); signed int __thiscall sub_6FD5B0(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_6FD6B0(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_6FD7E0(_DWORD **this, unsigned __int16 *a2); char __thiscall sub_6FDA20(int this, int a2, int a3, int a4, int a5); void ***__thiscall sub_6FDB90(void ***this); int __cdecl sub_6FDBE0(int a1); void *__thiscall sub_6FDCA0(void *this, char a2); bool __thiscall sub_6FDCD0(_DWORD *this); void __thiscall sub_6FDD70(_DWORD *this, float a2); char __thiscall sub_6FDE00(_DWORD *this, int a2); char __thiscall sub_6FDEE0(_DWORD *this, int a2, int a3); _DWORD **__cdecl sub_6FE020(_DWORD *a1, int a2); void ***sub_6FE780(); void *__thiscall sub_6FE790(void *this, char a2); int __thiscall sub_6FE7C0(char *this); char *__thiscall sub_6FE7D0(_DWORD *this, char *a2); void __thiscall sub_6FE850(void *this, char a2); int __thiscall sub_6FE880(int this, int a2); int **__thiscall sub_6FE8A0(_DWORD *this, int **a2, int *a3); void __stdcall sub_6FEB80(void *a1); void *__cdecl sub_6FEC60(void *a1, int a2, int a3); void **__thiscall sub_6FED10(void *this, int a2); int **__thiscall sub_6FEDB0(_DWORD *this, int **a2, int *a3, int *a4); char *__thiscall sub_6FEE70(_DWORD *this, char *a2); _DWORD *__thiscall sub_6FEF60(_DWORD *this); LONG __thiscall sub_6FF020(_DWORD *this); void *__thiscall sub_6FF0C0(void *this, char a2); void __thiscall sub_6FF120(int this, float a2); char __thiscall sub_6FF150(int this, char a2); char __thiscall sub_6FF180(_BYTE *this); char __thiscall sub_6FF190(_BYTE *this, float a2); char __thiscall sub_6FF220(int this, float a2); int __thiscall sub_6FF260(_DWORD *this); _DWORD *__thiscall sub_6FF2E0(_DWORD *this); char *__thiscall sub_6FF390(int this, char a2, int a3, int a4, int a5, char *a6, int a7); void __thiscall sub_6FF470(const void **this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8); _DWORD *__thiscall sub_6FF4D0(void *this, char a2); _DWORD *__thiscall sub_6FF590(_DWORD *this); int __thiscall sub_6FF640(_DWORD *this); int __thiscall sub_6FF680(_DWORD *this); int __thiscall sub_6FF6C0(_DWORD *this); int __thiscall sub_6FF700(_DWORD *this); int __thiscall sub_6FF740(_DWORD *this); char sub_6FF780(); char __thiscall sub_6FF7B0(_DWORD **this, int a2); char __thiscall sub_6FF7E0(_DWORD *this); char __thiscall sub_6FF810(_DWORD *this); void __thiscall sub_6FF840(_DWORD *this); void __thiscall sub_6FF890(_DWORD *this, int a2, int a3); void __thiscall sub_6FF930(_DWORD *this, int a2); signed int __thiscall sub_6FFA80(_DWORD *this, int a2); volatile LONG *__cdecl sub_6FFC50(int a1); char __thiscall sub_6FFD80(volatile LONG **this, volatile LONG **a2); void *__thiscall sub_700DE0(void *this, char a2); char __thiscall sub_700EC0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_700F00(void *this); void __thiscall sub_700F50(_DWORD *this, int a2); char __stdcall sub_700F70(int a1, _DWORD *a2, int a3); char __thiscall sub_700FA0(_BYTE **this); char __thiscall sub_700FF0(_WORD **this, int a2); char sub_701040(); char sub_701060(); _DWORD *__thiscall sub_701090(_DWORD *this); char __thiscall sub_701150(char *this, int a2); char __thiscall sub_701300(_DWORD *this); _DWORD *__thiscall sub_701330(_DWORD *this, int a2); char __stdcall sub_7013C0(_WORD *a1); void __thiscall sub_701420(int this); void __thiscall sub_701450(int this); int __thiscall sub_701480(_DWORD **this); void __thiscall sub_701620(char *this); void __thiscall sub_701790(_DWORD **this); char __thiscall sub_701800(int this, char a2); int __thiscall sub_701930(_DWORD **this, int a2); // char __userpurge sub_701940@(int a1@, int a2@, int a3, int a4); char __thiscall sub_701BB0(char *this); // char __userpurge sub_701C00@(_DWORD *a1@, int a2@, int a3, int a4, int a5); int __cdecl sub_701C40(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_701DB0(int a1); char __thiscall sub_701EE0(volatile LONG **this, int a2); void __thiscall sub_702D60(char *this); void __thiscall sub_703100(char *this, int a2, int a3); void *__thiscall sub_703170(void *this, char a2); void *__stdcall sub_7031B0(char *a1); void *__thiscall sub_703210(void *this, char a2); char sub_7032E0(); char __thiscall sub_703350(_DWORD *this); char sub_7033C0(); char __thiscall sub_7033F0(void *this, int a2); char __thiscall sub_703D30(char *this); int __cdecl sub_703E20(int a1); int __thiscall sub_703F60(_DWORD *this); char __thiscall sub_704070(char *this, int a2, int a3); void *__thiscall sub_704130(void *this, char a2); void *__thiscall sub_704170(void *this, char a2); _DWORD *__thiscall sub_7041B0(_DWORD *this); char __stdcall sub_704310(int a1, _DWORD *a2, int a3); int __thiscall sub_704340(char *this, int a2); int __thiscall sub_704380(char *this, int a2, __int64 a3); char __thiscall sub_704490(_BYTE **this, char a2); char sub_7044C0(); char __thiscall sub_704510(_DWORD *this); char __thiscall sub_704540(char *this, int a2); char __thiscall sub_704680(volatile LONG **this, int a2); void __thiscall sub_7053B0(char *this); void __thiscall sub_705580(char *this); void __thiscall sub_7056E0(_DWORD **this); int __thiscall sub_705750(_DWORD **this); void __thiscall sub_7058F0(char *this, int a2, int a3); int __thiscall sub_705970(_DWORD **this, int a2); volatile LONG *__cdecl sub_705980(int a1); void *__thiscall sub_705AB0(void *this, char a2); int __thiscall sub_705B40(_DWORD **this); int __thiscall sub_705B60(_DWORD **this); char __thiscall sub_705B90(void *this, int a2); int __cdecl sub_7060A0(int a1); char __thiscall sub_7061E0(int this, int a2, int a3); void *__thiscall sub_706280(void *this, char a2); void *__thiscall sub_7062C0(void *this, char a2); int sub_706300(); _DWORD *__thiscall sub_706390(void *this, char a2); int __thiscall sub_7064A0(_DWORD *this); int __thiscall sub_7064E0(_DWORD *this); int __thiscall sub_706520(_DWORD *this); int __thiscall sub_706560(_DWORD *this); char sub_7065A0(); char sub_7065D0(); char sub_706610(); char __thiscall sub_706650(_DWORD **this, int a2); void __thiscall sub_706680(_DWORD *this); void __thiscall sub_7066D0(_DWORD *this, _DWORD *a2); void __thiscall sub_7067E0(_DWORD *this, _DWORD *a2, int *a3); void __thiscall sub_7068C0(_DWORD *this, int a2, int a3); void __thiscall sub_706960(_DWORD **this, int a2); int __cdecl sub_706A90(int a1); char __thiscall sub_706BF0(volatile LONG **this, volatile LONG **a2); void *__thiscall sub_707A90(void *this, char a2); int __thiscall sub_707AE0(_DWORD *this); int __thiscall sub_707B20(_DWORD *this); int __thiscall sub_707B60(_DWORD *this); int __thiscall sub_707BA0(_DWORD *this); int __thiscall sub_707BE0(_DWORD *this); char sub_707C20(); char sub_707C80(); int __thiscall sub_707CB0(void *this, _BYTE *a2); void __thiscall sub_707D30(_DWORD *this); void __thiscall sub_707EB0(_DWORD *this, int a2, _DWORD *a3, int a4); int __thiscall sub_707F60(_DWORD **this); char __thiscall sub_7080E0(_DWORD *this); void __thiscall sub_7081D0(_DWORD *this, int a2); void __thiscall sub_7083E0(int this, float a2); void __thiscall sub_708450(void *this, float a2); void __thiscall sub_7084A0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_708930(_DWORD *this); LONG __thiscall sub_7089F0(_DWORD *this); volatile LONG *__cdecl sub_708B00(int a1); int __thiscall sub_708C30(_DWORD *this); char __thiscall sub_708D60(_DWORD *this); void __thiscall sub_708DA0(int this); void __thiscall sub_708E10(unsigned int *this, int a2); char __thiscall sub_708FC0(volatile LONG **this, volatile LONG **a2); int __thiscall sub_70A160(_DWORD *this); void __thiscall sub_70A5F0(_DWORD **this); void __thiscall sub_70A780(_DWORD *this, int a2, int a3); void __thiscall sub_70A850(_DWORD *this, int a2, int a3); void ***sub_70A890(); bool __stdcall sub_70A910(int a1, _DWORD *a2); void __cdecl sub_70A990(int a1, int a2); int __cdecl sub_70AA90(int a1, int a2, int a3, int a4); int __cdecl sub_70ABD0(const void **a1, const void **a2, int a3); int __cdecl sub_70AC30(const void **a1, const void **a2, int a3); void __cdecl sub_70AC90(_DWORD *a1, _DWORD *a2, int a3); int __cdecl sub_70ACF0(int a1, int a2, int a3, int a4); void __cdecl sub_70AE60(_DWORD *a1, _DWORD *a2, int a3); void __cdecl sub_70AF20(int a1, int a2); void __cdecl sub_70B060(int a1, int a2); void __cdecl sub_70B400(int a1, int a2); unsigned int *__cdecl sub_70B500(unsigned int *a1, unsigned __int8 *a2, unsigned int a3); int __cdecl sub_70BC20(int a1, int a2); void *__thiscall sub_70BC80(void *this, char a2); void __cdecl sub_70BCB0(unsigned __int8 *a1, int a2, int a3, int a4); bool __thiscall sub_70BE40(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6); char __thiscall sub_70BF00(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __thiscall sub_70BF40(_DWORD *this); char sub_70BFB0(); char sub_70BFD0(); char __stdcall sub_70C000(int a1, int a2); char __stdcall sub_70C030(int a1, int a2); void __thiscall sub_70C060(_DWORD *this); char sub_70C0F0(); char __thiscall sub_70C120(void *this, int a2, int a3, int a4); _DWORD *__thiscall sub_70C140(_DWORD *this); void __thiscall sub_70C340(_DWORD **this); void __thiscall sub_70C380(_DWORD **this); void __thiscall sub_70C3C0(_BYTE *this); char sub_70C400(); char __thiscall sub_70C430(_DWORD *this); char __thiscall sub_70C460(_DWORD *this); unsigned int __thiscall sub_70C490(_DWORD **this, int a2); void __thiscall sub_70C550(_DWORD **this, int a2); int __thiscall sub_70C680(_DWORD *this); void __thiscall sub_70C6E0(_DWORD *this); char __thiscall sub_70C760(_DWORD *this, _DWORD *a2, int a3); void __thiscall sub_70CB00(char *this, int a2); char __thiscall sub_70CCB0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_70CCF0(char *this, int a2); void __thiscall sub_70CDB0(char *this, int a2, int *a3); int __cdecl sub_70CF20(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_70D080(int a1, int a2, int a3, int a4); volatile LONG *__cdecl sub_70D1E0(int a1); char __thiscall sub_70D310(void *this, int a2); void *__thiscall sub_70E060(void *this, char a2); void *__thiscall sub_70E0A0(void *this, char a2); _DWORD *__thiscall sub_70E0E0(void *this, char a2); int __thiscall sub_70E1A0(_DWORD *this); int __thiscall sub_70E1D0(_DWORD *this); int __thiscall sub_70E200(_DWORD *this); int __thiscall sub_70E240(_DWORD *this); int __thiscall sub_70E270(_DWORD *this); char sub_70E2A0(); char sub_70E310(); void __thiscall sub_70E340(_DWORD **this); char __thiscall sub_70E370(_DWORD *this); int __thiscall sub_70E380(void *this, _BYTE *a2); char __thiscall sub_70E400(_DWORD **this, int a2); int __thiscall sub_70E460(void *this, int a2); char __thiscall sub_70E480(void *this, int a2); int __thiscall sub_70E630(_DWORD **this, int a2); char __thiscall sub_70E6D0(_DWORD **this); char __thiscall sub_70E710(_DWORD **this); void __thiscall sub_70E840(_DWORD **this); int __thiscall sub_70E9A0(_DWORD *this); int __thiscall sub_70E9E0(_DWORD *this); int __thiscall sub_70EA20(_DWORD *this); void __thiscall sub_70EAD0(int this, int a2); void __thiscall sub_70EFE0(_DWORD *this); void __thiscall sub_70F1C0(_DWORD *this); void __thiscall sub_70F2D0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); void __thiscall sub_70F470(_DWORD *this); void __thiscall sub_70FB80(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void __thiscall sub_70FBF0(_DWORD *this, int a2, _DWORD *a3, int a4); int __thiscall sub_70FE70(_DWORD *this); int __thiscall sub_70FF30(_DWORD *this); int __thiscall sub_70FFF0(_DWORD *this); LONG __thiscall sub_7100B0(_DWORD *this); void __thiscall sub_710200(_DWORD **this, int a2, int a3); int __thiscall sub_710380(_DWORD *this); _DWORD *__thiscall sub_7103B0(_DWORD *this); volatile LONG *__cdecl sub_710510(int a1); char __thiscall sub_710640(_DWORD *this, int a2); int sub_712F20(); void *__thiscall sub_712FB0(void *this, char a2); void *__thiscall sub_712FF0(void *this, char a2); char __thiscall sub_713050(_DWORD *this); char __thiscall sub_7130D0(_DWORD *this, int a2, _DWORD *a3, int a4); void ***__thiscall sub_713180(void ***this); void __stdcall sub_7131A0(int *a1); char __thiscall sub_713370(_DWORD *this, int a2, int a3, int a4, int *a5); void *__thiscall sub_7133D0(void *this, char a2); void __thiscall sub_713410(_DWORD *this, int a2, _DWORD *a3, int a4); int __thiscall sub_713460(_DWORD *this); void __stdcall sub_7134C0(unsigned __int16 *a1); char __thiscall sub_713680(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5); int __thiscall sub_7136B0(_DWORD *this, _DWORD *a2); int __thiscall sub_7136E0(_DWORD *this, _DWORD *a2); char __thiscall sub_713710(_DWORD *this, int a2, _DWORD *a3, int a4); int __thiscall sub_7137B0(_DWORD *this); void __thiscall sub_713830(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_7138D0(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5); int __thiscall sub_7139C0(_DWORD *this); char __thiscall sub_713A00(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5); int __thiscall sub_713AF0(unsigned __int16 *this); int sub_713B50(); void sub_713B90(); signed int __thiscall sub_713BD0(unsigned __int16 *this, int *a2); signed int __thiscall sub_713CC0(unsigned __int16 *this, int *a2); signed int __thiscall sub_713DB0(unsigned __int16 *this, int *a2); signed int __thiscall sub_713F80(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_7140B0(char *this, int a2, unsigned __int16 *a3); signed int __thiscall sub_714180(_DWORD **this, int a2, _DWORD *a3); signed int __thiscall sub_7142E0(char *this, int a2, unsigned __int16 *a3); signed int __thiscall sub_7143E0(_DWORD **this, int a2, _DWORD *a3); char __thiscall sub_714540(unsigned __int16 *this, int a2, int a3, int a4, int *a5); int __thiscall sub_714A10(void ***this); _DWORD *__thiscall sub_714AF0(void *this, char a2); void __thiscall sub_714B60(_DWORD *this); char __thiscall sub_714BC0(_DWORD **this, int a2, int a3, int a4, unsigned __int16 *a5); const void **__thiscall sub_714C80(_DWORD *this, void *a2); _DWORD *__thiscall sub_714CB0(char *this); int sub_714D70(); void sub_714D80(); signed int __thiscall sub_714DC0(_DWORD **this, int a2); char __thiscall sub_714F10(_DWORD **this, int a2, int a3, int a4, int a5); int __cdecl sub_714FB0(int a1); _DWORD *__thiscall sub_7150A0(void *this, char a2); bool __thiscall sub_715120(_DWORD *this); bool __thiscall sub_715130(_BYTE *this); LONG __thiscall sub_715140(int *this); signed int __thiscall sub_7152E0(_DWORD *this, int a2); int __cdecl nullsub_43(_DWORD); // weak BOOL __thiscall sub_715330(_DWORD *this); BOOL __thiscall sub_715390(_DWORD *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_7153F0(_DWORD *this); int sub_715440(); int sub_715490(); int sub_7154A0(); int sub_7154B0(); int sub_7154C0(); int sub_7154D0(); int sub_7154E0(); int sub_7154F0(); signed int __thiscall sub_715510(_DWORD *this, int a2); // signed int __userpurge sub_7155A0@(int a1@, int a2@, int a3); signed int __thiscall sub_715650(_DWORD *this, int *a2); void sub_715700(); signed int __thiscall sub_715740(int this, int a2); signed int __thiscall sub_715890(_DWORD **this, int a2); signed int __thiscall sub_715E30(_DWORD **this, int a2); signed int __thiscall sub_716330(char *this, int a2, int a3); signed int __thiscall sub_716440(char *this, int a2, int a3); signed int __thiscall sub_716550(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_716670(char *this, int a2, _WORD *a3); signed int __thiscall sub_716750(char **this, int a2, unsigned __int16 *a3); signed int __thiscall sub_716820(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_716910(char *this, int a2, _WORD *a3); signed int __thiscall sub_7169F0(_BYTE ***this, int a2, unsigned __int16 *a3); signed int __thiscall sub_716AC0(_DWORD **this, unsigned __int16 *a2); signed int __thiscall sub_716B80(_DWORD ***this, unsigned __int16 *a2); signed int __thiscall sub_716C40(char *this, unsigned __int16 *a2); signed int __thiscall sub_716D20(_DWORD *this, int *a2); signed int __thiscall sub_716E20(_DWORD *this, int *a2); signed int __thiscall sub_716F20(_DWORD **this, unsigned int *a2); int __thiscall sub_7173C0(_DWORD *this); signed int __thiscall sub_717430(_DWORD *this, unsigned __int16 *a2); char __thiscall sub_717580(_DWORD *this, int a2); signed int __thiscall sub_7175F0(int this, _DWORD *a2); LONG __thiscall sub_717630(_DWORD *this); void ***__thiscall sub_717710(void ***this); int __cdecl sub_7177E0(int a1); signed int __thiscall sub_7178A0(_DWORD *this, _WORD *a2); signed int __thiscall sub_717910(int this, _DWORD *a2); char __thiscall sub_7179A0(char *this, int a2, int a3, int a4, unsigned __int16 *a5); _DWORD *__thiscall sub_717D90(_DWORD *this); char *__thiscall sub_717DE0(char *this, int a2); _DWORD *__thiscall sub_717EC0(_DWORD *this, char *a2); int __thiscall sub_717F30(_DWORD *this, int a2, char *a3); void __thiscall sub_717FA0(_DWORD *this); _DWORD *__thiscall sub_718060(_DWORD *this); void *__thiscall sub_718140(void *this, char a2); int __thiscall sub_718170(_DWORD *this, _DWORD *a2); int __thiscall sub_7181A0(_DWORD *this); char __thiscall sub_718220(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_7182C0(_DWORD **this, int a2, int a3, int a4, int a5); __int64 sub_7186B0(); int __cdecl sub_7186C0(__int64 a1); void sub_7186E0(); int __cdecl sub_718760(unsigned int a1); void __cdecl sub_718780(int a1, unsigned int a2); signed int __cdecl sub_718850(int a1); char __cdecl sub_7188D0(int a1); char __thiscall sub_718A20(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3); bool __thiscall sub_718A50(_DWORD *this); char *__thiscall sub_718A80(_DWORD *this, unsigned int a2); char __thiscall sub_718B60(_DWORD *this, int a2); int __thiscall sub_718BF0(_BYTE *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_718C50(_BYTE *this, int a2, int a3, int a4, int a5, int a6); char *__stdcall sub_718CB0(char *a1); int __thiscall sub_718D10(_DWORD *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_718DC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, unsigned int a8, char a9); int __thiscall sub_718E40(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_718EA0(_DWORD *this, const char *a2, unsigned int *a3, int *a4); bool __thiscall sub_718FC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6); bool __thiscall sub_719000(_DWORD *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_719040(_DWORD *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_7190B0(_DWORD *this, int *a2, _DWORD *a3); char __thiscall sub_7191A0(_WORD *this, int a2); char __thiscall sub_719340(_DWORD *this, unsigned __int8 *a2); char __thiscall sub_7196E0(char *this, int a2); char __thiscall sub_719AA0(_WORD *this, _BYTE *a2); int __thiscall sub_719DB0(unsigned int *this, int a2, int a3, int a4, int a5, int a6, char a7); char *__thiscall sub_719F30(char *this); char *__thiscall sub_71A060(char *this); char __thiscall sub_71A130(_DWORD *this, int a2); char __thiscall sub_71A2F0(unsigned int *this, int a2, int a3, int a4, int a5, int a6, int a7, unsigned __int8 a8); char __thiscall sub_71A430(unsigned int *this, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_71A4D0(_DWORD *this, int a2); void *__stdcall sub_71A550(char *a1); _DWORD *__cdecl sub_71A5B0(_DWORD *a1, _DWORD *a2, _DWORD *a3); int __cdecl sub_71A600(int a1, int a2, int a3); // void __thiscall unknown_libname_17(void *); idb char *__cdecl sub_71A6B0(char *a1, char *a2, char *a3); unsigned int __thiscall sub_71A6F0(unsigned int *this, char *a2); unsigned int __thiscall sub_71A800(unsigned int *this, char *a2); int *__thiscall sub_71A910(int *this, int *a2, int a3); unsigned int __thiscall sub_71A940(unsigned int *this, int a2); unsigned int __thiscall sub_71A9C0(unsigned int *this, int a2); void **__thiscall sub_71AA40(void *this, char a2); _DWORD *__thiscall sub_71AAD0(unsigned int *this, _DWORD *a2); void __thiscall sub_71AB80(unsigned int *this, const void *a2); int __thiscall sub_71AC80(_DWORD **this); int __thiscall sub_71ACA0(_DWORD **this); char sub_71ACB0(); int __thiscall sub_71ACE0(_BYTE *this, int a2); LONG __thiscall sub_71ADB0(_DWORD *this); int __thiscall sub_71B190(_DWORD **this); char __thiscall sub_71B1E0(_DWORD **this); char __thiscall sub_71B2F0(_DWORD **this, int a2, int a3); char __thiscall sub_71B340(_DWORD **this, int a2, int a3); LONG __thiscall sub_71B350(_DWORD *this); int __thiscall sub_71B810(int this); void __thiscall sub_71B870(int this, int a2, _DWORD *a3, int a4); LONG __thiscall sub_71B980(_DWORD *this); int __thiscall sub_71BCE0(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_71BE20(_DWORD **this, _DWORD *a2, int a3); int __thiscall sub_71BF50(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_71C150(_DWORD *this); _DWORD *__thiscall sub_71C1A0(_DWORD *this); LONG __thiscall sub_71C2B0(_DWORD *this); void __thiscall sub_71C4C0(int this, int a2, _DWORD *a3, int a4); _DWORD *__thiscall sub_71C560(_DWORD *this); char __thiscall sub_71C660(_DWORD *this, int a2, int a3); int __thiscall sub_71C6B0(_DWORD *this); char __thiscall sub_71C940(_DWORD *this, int a2); _DWORD *__thiscall sub_71CDE0(_DWORD *this); void __thiscall sub_71CFF0(int this, int a2, int a3); int __thiscall sub_71D8F0(_DWORD *this, unsigned __int8 a2); int __thiscall sub_71D9D0(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_71DA70(_DWORD *this); char __thiscall sub_71DBE0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_71E900(char *this, char *a2, int a3, unsigned int *a4, int a5); void __thiscall sub_71EB30(_DWORD *this, int a2, int a3); char __thiscall sub_71EDF0(volatile LONG **this, int a2); void __thiscall sub_71F6F0(int this, int a2, int a3); char __thiscall sub_71F9B0(_DWORD *this, int a2, int a3, void *a4, int a5, void *a6, void *a7); int __thiscall sub_720A10(float *this, int a2); char __thiscall sub_720CB0(int this, int a2); volatile LONG *__cdecl sub_720D10(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_720E50(int a1); volatile LONG *__cdecl sub_720F90(int a1); char __thiscall sub_7210C0(_DWORD *this, int a2); volatile LONG *__cdecl sub_722180(int a1, int a2); void __thiscall sub_722520(int this, int a2, int a3); void __thiscall sub_722670(char *this, int a2); void __thiscall sub_722B30(char *this, int a2); char __thiscall sub_723220(_DWORD *this, int a2); char __thiscall sub_7233D0(volatile LONG **this, int a2); void *__thiscall sub_723940(void *this, char a2); void *__thiscall sub_723980(void *this, char a2); void *__thiscall sub_7239C0(void *this, char a2); void *__thiscall sub_7239F0(void *this, char a2); void *__thiscall sub_723A20(void *this, char a2); void *__thiscall sub_723A50(void *this, char a2); int __cdecl sub_723A80(int, int, char *); // idb int __thiscall sub_723C80(void *this); _DWORD *__thiscall sub_723D40(_DWORD *this); int __thiscall sub_723E20(_DWORD **this, int a2, int a3); void __stdcall sub_723F00(int a1, int a2); char __thiscall sub_723F80(volatile LONG *this, int a2, int a3); // void __usercall sub_723FA0(int a1@, int a2@); int __thiscall sub_724060(_DWORD *this); char __thiscall sub_724100(_BYTE *this); int __thiscall sub_724270(int this, int a2, int a3); char __thiscall sub_724550(volatile LONG *this); LONG __thiscall sub_724690(int this); LONG __thiscall sub_724840(int this); // int __userpurge sub_7249F0@(int a1@, int a2@, int a3@, int a4); char __thiscall sub_724CA0(void *this, int a2); char __stdcall sub_7251B0(int a1, int a2); LONG __thiscall sub_725230(_DWORD **this); char __thiscall sub_725350(_DWORD *this, int a2); char __thiscall sub_725500(void *this, int a2); LONG __thiscall sub_7259B0(_DWORD **this); char __thiscall sub_725AD0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12); char __thiscall sub_725F10(volatile LONG *this, int a2, int a3); int __thiscall sub_725F70(_DWORD **this); int __thiscall sub_725F80(_DWORD **this); int __cdecl sub_725F90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); volatile LONG *__cdecl sub_726110(int a1); char __thiscall sub_726240(void *this, int a2); int __cdecl sub_726B50(int a1); int __cdecl sub_726C90(int a1); int __cdecl sub_726DD0(int a1); int __thiscall sub_726F20(void *this, int a2); int __stdcall nullsub_46(int); // weak void *__thiscall sub_726F60(void *this, char a2); void *__thiscall sub_726FA0(void *this, char a2); void *__thiscall sub_726FE0(void *this, char a2); void *__thiscall sub_727020(void *this, char a2); int sub_727060(); int __cdecl sub_727080(unsigned int a1); _DWORD *__stdcall sub_7270D0(int a1); signed int __stdcall sub_727110(_WORD *a1); char sub_727150(); char __stdcall sub_727170(int a1); char __stdcall sub_7271A0(int a1, int a2); char __stdcall sub_7271D0(int a1, int a2); char __stdcall sub_727200(__int16 a1); signed int __thiscall sub_727230(void *this, _WORD *a2); char sub_727250(); char sub_727270(); signed int __thiscall sub_727290(int *this, int a2); signed int __stdcall sub_727310(int a1); signed int __thiscall sub_727350(_DWORD *this, _WORD *a2); _DWORD **__thiscall sub_727380(_DWORD *this, _WORD *a2); int __stdcall sub_727410(int *a1); int __stdcall sub_727480(int *a1); void __thiscall sub_727500(int this, void *a2); signed int __thiscall sub_727670(int this, int a2); signed int __stdcall sub_7277C0(int *a1); signed int __stdcall sub_727850(int a1); int __stdcall sub_727900(_WORD *a1); int __stdcall sub_727970(_WORD *a1); signed int __thiscall sub_7279D0(_DWORD *this, int a2); signed int __stdcall sub_727BD0(_BYTE *a1); signed int __stdcall sub_727C90(int *a1); signed int __thiscall sub_727CF0(_DWORD *this, _BYTE *a2); signed int __thiscall sub_727E70(_DWORD *this, _BYTE *a2); // char __usercall sub_727F90@(int a1@, int a2@); signed int __thiscall sub_728100(_DWORD *this, unsigned __int16 *a2); signed int __thiscall sub_7282C0(_DWORD *this, _WORD *a2); signed int __thiscall sub_728330(_DWORD *this, unsigned __int16 *a2); signed int __thiscall sub_7285A0(_DWORD *this, _WORD *a2); signed int __thiscall sub_7286F0(_DWORD *this, int a2); char __thiscall sub_7288B0(int this, void *a2); char __thiscall sub_728990(int this, void *a2); // signed int __userpurge sub_728A70@(int a1@, int a2@, int a3); signed int __thiscall sub_728C70(unsigned __int8 *this, unsigned __int16 *a2); signed int __thiscall sub_729460(_DWORD *this, __int16 *a2); signed int __thiscall sub_7295D0(int this, _WORD *a2); signed int __thiscall sub_729650(int this, _WORD *a2); signed int __thiscall sub_7296D0(_DWORD *this); signed int __thiscall sub_729720(_DWORD *this); void __thiscall sub_729770(_DWORD *this, int a2); void __thiscall sub_729820(_DWORD *this, int a2); int __thiscall sub_729900(_DWORD *this, float a2); int __fastcall sub_7299A0(_BYTE *a1); int __thiscall sub_729A30(_DWORD *this, int a2); char __thiscall sub_729AD0(_DWORD **this, int a2); void __thiscall sub_729B00(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_729B90(_DWORD *this, int a2, int a3); int __thiscall sub_729BF0(void *this, _BYTE *a2); int __thiscall sub_729D90(_DWORD *this, int a2); LONG __stdcall sub_729E50(int a1, LONG a2); LONG __thiscall sub_729FC0(_DWORD *this, int a2, LONG a3); LONG sub_72A0D0(); int __thiscall sub_72A1D0(_DWORD **this, int a2, char a3, signed int a4, char a5); _WORD *__thiscall sub_72A250(_DWORD **this, int a2, char a3, int a4); void __thiscall sub_72A3B0(_DWORD *this); int __thiscall sub_72A4B0(char *this, unsigned int a2); void __stdcall sub_72A530(int a1, int a2); LONG __stdcall sub_72A5C0(float a1); LONG __thiscall sub_72A620(_DWORD *this); int __thiscall sub_72A6A0(_DWORD *this); _DWORD *__thiscall sub_72A6F0(_DWORD *this); LONG __thiscall sub_72A810(_DWORD *this); LONG __thiscall sub_72A980(int this); int __thiscall sub_72AA10(_DWORD *this, int a2); int __thiscall sub_72AA30(_DWORD *this, int a2); LONG __thiscall sub_72AA50(_DWORD *this, int a2, int a3); int __thiscall sub_72AB70(float *this, _DWORD *a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9); char __thiscall sub_72AC00(_BYTE *this, float a2); LONG __stdcall sub_72AC60(int a1, LONG a2); LONG __thiscall sub_72ADD0(_DWORD *this, int a2, LONG a3); LONG sub_72AEE0(); int __thiscall sub_72AFE0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_72B280(_DWORD **this, int a2, char a3, signed int a4, char a5); _WORD *__thiscall sub_72B300(_DWORD **this, int a2, char a3, int a4); void __thiscall sub_72B460(_DWORD *this); int __thiscall sub_72B560(char *this, unsigned int a2); char __thiscall sub_72B5E0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, volatile LONG *a7, int a8, int a9); char __thiscall sub_72B680(_DWORD *this); LONG __thiscall sub_72B6A0(_DWORD *this, LONG a2); void __thiscall sub_72B910(int this, float a2); LONG __thiscall sub_72BA80(_DWORD *this, LONG a2); LONG __thiscall sub_72BB10(_DWORD **this, LONG a2); char __thiscall sub_72BB90(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, int a9); // void __userpurge sub_72BC00(_DWORD *a1@, int a2@, int a3, int a4); int __thiscall sub_72BE60(_DWORD **this); int __thiscall sub_72BFD0(_DWORD *this, int a2, int a3, int a4); LONG __thiscall sub_72C270(_DWORD *this, signed int a2, char a3, char a4); // void __userpurge sub_72C450(int a1@, int a2@, float a3, char a4); int __thiscall sub_72C530(float *this, float *a2); LONG __thiscall sub_72C630(_DWORD ***this, int a2, LONG a3, char a4); char __thiscall sub_72C680(_DWORD *this, int a2); LONG __thiscall sub_72C840(_DWORD *this, LONG a2, int a3); LONG __thiscall sub_72C920(_DWORD *this); char __thiscall sub_72CC30(volatile LONG *this, unsigned int a2, int a3); char __thiscall sub_72CCD0(void *this, int a2); int __thiscall sub_72E9A0(_WORD *this, float a2, int a3); // void __userpurge sub_72EA10(_DWORD *a1@, int a2@, int a3, int a4); volatile LONG *__thiscall sub_72EC50(char *this); LONG __thiscall sub_72EEA0(_DWORD *this, signed int a2, char a3, char a4); // void __userpurge sub_72F080(int a1@, int a2@, float a3, char a4); int __thiscall sub_72F160(float *this, float *a2); LONG __thiscall sub_72F260(_DWORD ***this, int a2, LONG a3, char a4); void __thiscall sub_72F2B0(int this, float a2); unsigned __int8 __thiscall sub_72FDB0(_DWORD *this, unsigned __int8 *a2, signed int a3); LONG __thiscall sub_72FF80(_DWORD **this, int a2); char __thiscall sub_72FFC0(volatile LONG *this, int a2); void __thiscall sub_730020(int this, float a2); unsigned __int8 __thiscall sub_730C70(_DWORD *this, unsigned __int8 *a2, signed int a3); float *__thiscall sub_730E40(float *this); LONG __thiscall sub_731240(int **this); float *__thiscall sub_731960(float *this); LONG __thiscall sub_731D60(int **this); int __cdecl sub_7325F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); volatile LONG *__cdecl sub_732750(int a1); volatile LONG *__thiscall sub_732880(void *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7); int __cdecl sub_732AE0(int a1); int __cdecl sub_732C30(int a1); volatile LONG *__cdecl sub_732D70(int a1, int a2); int __cdecl sub_732EA0(int a1); volatile LONG *__cdecl sub_732FE0(int a1); volatile LONG *__thiscall sub_733110(void *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7); char __thiscall sub_733370(void *this, int a2, int a3); char __thiscall sub_733DB0(void *this, int a2); char __thiscall sub_736C80(void *this, int a2); LONG __thiscall sub_739A80(void **this); int __cdecl sub_739AF0(int a1); void __thiscall sub_739C50(_DWORD *this, void *a2, int a3, int a4, int a5); signed int __thiscall sub_739ED0(_DWORD *this); char __thiscall sub_739F30(_DWORD *this, int a2, int a3); char __thiscall sub_73A0F0(void *this, unsigned int a2); char __thiscall sub_73AB50(volatile LONG **this, int a2); void __thiscall sub_73B710(void *); // idb void __thiscall sub_73B730(void *); // idb void __thiscall sub_73B740(int *this); int __thiscall sub_73B7F0(_DWORD *this); void *__thiscall sub_73B840(void *this, char a2); void *__thiscall sub_73B880(void *this, char a2); // void __thiscall Concurrency::details::_NonReentrantLock::_Release(Concurrency::details::_NonReentrantLock *__hidden this); idb void *__thiscall sub_73B8D0(void *this, char a2); void *__thiscall sub_73B910(void *this, char a2); void *__thiscall sub_73B950(void *this, char a2); char __thiscall sub_73B990(_DWORD *this); char __thiscall sub_73B9B0(_DWORD *this); LONG __thiscall sub_73B9D0(LONG *this, LONG a2); void *__thiscall sub_73BC70(void *this, char a2); void *__thiscall sub_73BCA0(void *this, char a2); void *__thiscall sub_73BCD0(void *this, char a2); _DWORD *__cdecl sub_73BD00(_DWORD *a1, _DWORD *a2, _DWORD *a3); int __thiscall sub_73BD50(void *this, _BYTE *a2); void *__thiscall sub_73BDD0(void *this, char a2); char __thiscall sub_73BE00(_DWORD *this); char __stdcall sub_73BE50(void *a1); char __thiscall sub_73BE80(void *this); char __thiscall sub_73BEA0(void *this); signed int __thiscall sub_73BEC0(_DWORD *this, _WORD *a2); signed int __thiscall sub_73BF00(_DWORD *this, _WORD *a2); signed int __thiscall sub_73BF80(_DWORD *this, _WORD *a2); signed int __stdcall sub_73BFB0(int a1); signed int __thiscall sub_73BFC0(_DWORD *this, _BYTE *a2); char __thiscall sub_73BFF0(void *this); char __thiscall sub_73C010(void *this); void __thiscall sub_73C030(int this, float a2); char sub_73C070(); void __thiscall sub_73C090(_DWORD **this); char __stdcall sub_73C0E0(void *a1); int __thiscall sub_73C260(void *this, unsigned __int16 *a2); char *__stdcall sub_73C3C0(int a1); void __stdcall sub_73C420(int a1, char a2, char a3); signed int __stdcall sub_73C4A0(_DWORD *a1); char __thiscall sub_73C550(_DWORD *this); signed int __thiscall sub_73C660(_DWORD *this, _WORD *a2); signed int __thiscall sub_73C680(_DWORD **this, _BYTE *a2); signed int __thiscall sub_73C710(_DWORD **this, _BYTE *a2); signed int __thiscall sub_73C7A0(_DWORD **this); signed int __thiscall sub_73C810(_DWORD **this); _DWORD *__cdecl sub_73C880(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__cdecl sub_73C8E0(_DWORD *a1, _DWORD *a2, _DWORD *a3); void __thiscall sub_73C930(unsigned int *this, _BYTE *a2); void __thiscall sub_73C9D0(unsigned int *this, _BYTE *a2); char __thiscall sub_73CA70(float *this, float a2, float a3, float a4); BOOL __thiscall sub_73CAC0(float *this, float a2); char __thiscall sub_73CB30(float *this, float a2, float a3, float a4); bool __thiscall sub_73CB80(float *this, float a2); void __thiscall sub_73CC50(int this); int __thiscall sub_73CCC0(_DWORD *this, char a2); int __thiscall sub_73CDA0(int this, _DWORD *a2); int __thiscall sub_73CE40(_DWORD *this); int __thiscall sub_73CE80(char *this, int *a2, int *a3, int a4, char a5); bool __thiscall sub_73D030(_DWORD *this); int __thiscall sub_73D050(_DWORD *this, int a2, int a3); void __thiscall sub_73D070(_DWORD **this, _BYTE *a2); int __thiscall sub_73D130(int this, int a2); void __thiscall sub_73D170(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_73D220(_DWORD **this, int a2); _DWORD *__thiscall sub_73D270(_DWORD *this); char __thiscall sub_73D620(_DWORD *this); char __thiscall sub_73D7A0(_DWORD **this, int a2); void __stdcall sub_73D7D0(int a1, int a2); void __stdcall sub_73D860(float a1); LONG __thiscall sub_73D8C0(_DWORD *this); int __thiscall sub_73D940(_DWORD *this); void __thiscall sub_73D990(int this); void __thiscall sub_73DAB0(void *this, int a2, int a3, int a4, float a5, float a6); void __thiscall sub_73DBC0(int this, float a2); int *__thiscall sub_73DE10(int this, int a2); LONG __thiscall sub_73DF80(_DWORD *this); char __thiscall sub_73E360(int this, int a2); void __thiscall sub_73FB80(_DWORD *this, int a2); int __thiscall sub_740080(int *this); void __thiscall sub_7403C0(int this, float a2); void __thiscall sub_740AB0(_DWORD *this, int a2); char __thiscall sub_740F20(_DWORD *this, int a2); int __thiscall sub_7410B0(_DWORD *this, unsigned int a2, int a3); void __thiscall sub_7410E0(_DWORD *this, int a2, int a3); char __thiscall sub_741390(void *this, float a2); volatile LONG *__cdecl sub_741CC0(int a1); int __cdecl sub_741DF0(int a1); int __cdecl sub_741F40(int a1); LONG __thiscall sub_7420D0(void **this); int __cdecl sub_742140(int a1); void __thiscall sub_7422A0(_DWORD *this, void *a2, int a3, int a4, int a5); signed int __thiscall sub_7424C0(_DWORD *this); char __thiscall sub_742520(_DWORD *this, int a2, int a3); char __thiscall sub_7426E0(volatile LONG **this, int a2); char __thiscall sub_743190(void *this, unsigned int a2); int __thiscall sub_743CB0(_DWORD *this); void __thiscall sub_743D00(void *); // idb void __thiscall sub_743D90(void *); // idb void *__thiscall sub_743DC0(void *this, char a2); void *__thiscall sub_743E00(void *this, char a2); void *__thiscall sub_743E40(void *this, char a2); _DWORD *__thiscall sub_743E70(_DWORD *this, _DWORD *a2); void *__thiscall sub_743F50(void *this, char a2); void __thiscall sub_743FA0(_DWORD *this, int a2, char *a3); char __thiscall sub_743FF0(_BYTE *this); char __thiscall sub_744000(_BYTE *this); LONG __thiscall sub_744110(_DWORD *this); int __thiscall sub_7441C0(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_744200(_DWORD *this, _DWORD *a2, unsigned int a3); unsigned int __thiscall sub_744250(_DWORD *this, int a2); unsigned int __thiscall sub_7443B0(_DWORD *this, int a2, volatile LONG **a3); char __thiscall sub_7444F0(_DWORD *this, unsigned int a2); unsigned int __fastcall sub_7445B0(int a1); _DWORD *__thiscall sub_7446A0(int this, _DWORD *a2); char __thiscall sub_744720(_DWORD *this); bool __thiscall sub_744760(_DWORD *this, unsigned int a2, char a3); char __thiscall sub_7447B0(_DWORD *this, unsigned int *a2); void __thiscall sub_744800(_DWORD *this); unsigned int __thiscall sub_7448D0(_DWORD *this, float a2); // char __usercall sub_744A30@(_DWORD *a1@, int a2@, int a3@); // int __usercall sub_744A60@(int *a1@, int a2@, int a3@, double a4@); // int __usercall sub_744A90@(int *a1@, int a2@, int a3@, double a4@); char __thiscall sub_744AC0(_DWORD *this); // char __usercall sub_744B80@(_DWORD *a1@, int a2@, int a3@); // char __usercall sub_744BA0@(_DWORD *a1@, int a2@, int a3@); char __thiscall sub_744BC0(int **this, char a2, int a3, unsigned __int8 a4); _DWORD *__thiscall sub_744DB0(_DWORD *this, int a2); _DWORD *__thiscall sub_744E50(_DWORD *this); void *__cdecl sub_744F60(LONG a1, LONG a2, int a3, char *a4, char *a5); char __thiscall sub_7452A0(_WORD *this, int a2, __int16 a3, int a4); char __thiscall sub_745410(_DWORD *this, int a2, int a3); LONG __thiscall sub_7456C0(_DWORD *this, LONG a2); _DWORD *__thiscall sub_745770(_DWORD *this, _DWORD *a2); LONG __thiscall sub_7457A0(_DWORD *this, LONG a2); _DWORD *__thiscall sub_745850(_DWORD *this, _DWORD *a2); void **__thiscall sub_7458A0(void *this, char a2); void **__thiscall sub_7458E0(void *this, char a2); BOOL __thiscall sub_745960(_BYTE *this); _DWORD *__thiscall sub_745970(char *this, char a2); _DWORD *__thiscall sub_745980(char *this, char a2); unsigned __int8 *__cdecl sub_745990(char *a1, int a2); unsigned int __cdecl sub_745B00(char *a1); void *__cdecl sub_745C60(char *a1); _DWORD *__thiscall sub_745DB0(void *this, char a2); int sub_7461F0(wchar_t *a1, int a2, wchar_t *a3, ...); int __fastcall sub_746260(int *a1, int a2, int a3, unsigned int a4, unsigned __int16 a5); _DWORD *__thiscall sub_7462C0(_DWORD *this, unsigned int a2, unsigned int a3); void __thiscall sub_746350(const void **this, unsigned int a2, const void *a3); int __fastcall sub_746500(int a1, int a2, unsigned int a3, unsigned __int16 a4); const void **__thiscall sub_7465C0(const void **this, _DWORD *a2, unsigned int a3, unsigned int a4); const void **__thiscall sub_7466D0(const void **this, const void **a2, unsigned int a3, unsigned int a4); const void **__fastcall sub_7467D0(_DWORD *a1, int a2, void *a3, int a4); const void **__thiscall sub_7468C0(_DWORD *this, void *a2, int a3); // char *__stdcall inet_ntoa(struct in_addr in); // struct hostent *__stdcall gethostbyname(const char *name); void *__thiscall sub_746A00(void *this, char a2); int __thiscall sub_746A30(_DWORD *this, int a2); void *__thiscall sub_747110(_DWORD *this, void *a2, int a3); _DWORD *__thiscall sub_7471C0(_DWORD *this, _DWORD *a2); int __cdecl sub_747370(int, void *, int); // idb _DWORD *__thiscall sub_747420(_DWORD *this); void __thiscall sub_747450(int this); void __thiscall sub_747480(int this); char __cdecl sub_7474A0(int a1, int a2); int __thiscall sub_7474E0(_DWORD *this, unsigned int a2); void __thiscall sub_747510(void **this); void *__thiscall sub_747550(void *this, char a2); int __thiscall sub_7475B0(void *this, char *a2); BOOL __thiscall sub_747820(_DWORD *this, char *a2, int a3, int a4); int __thiscall sub_747860(_DWORD *this, _DWORD *a2); int __thiscall sub_7478C0(_DWORD *this, int a2, void *a3, int a4); char *__thiscall sub_747A80(_DWORD *this, char *a2); int __thiscall sub_747B60(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_747D20(_DWORD *this, int a2); int __thiscall sub_747E00(_DWORD *this, char *a2, int a3, int a4); __int16 __thiscall sub_747F30(_DWORD *this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8); int __thiscall sub_747F90(_DWORD *this); int __thiscall sub_747FB0(_DWORD *this, int a2, _DWORD *a3); int __thiscall sub_747FE0(_DWORD *this, int a2); void *__stdcall sub_748000(char *a1); _DWORD *__cdecl sub_748060(_DWORD *a1, _DWORD *a2, _DWORD *a3); char __thiscall sub_748090(_DWORD *this, int *a2); _DWORD *__cdecl sub_7481A0(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__stdcall sub_7481D0(_DWORD *a1, _DWORD *a2, _DWORD *a3); char __thiscall sub_748200(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_7482C0(_DWORD *this, int a2); char __thiscall sub_748350(_DWORD *this, int a2, int a3); void __thiscall sub_7483F0(int *this); _DWORD *__thiscall sub_748420(_DWORD *this); int *__thiscall sub_7484A0(_DWORD *this, int a2); char __thiscall sub_7485E0(_DWORD *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_748690(_DWORD *this, int a2); _DWORD *__thiscall sub_7487A0(_DWORD *this, int a2); char __thiscall sub_748880(_DWORD *this, int a2, int a3); char __thiscall sub_7488F0(_DWORD *this, int a2); int __cdecl sub_748910(int a1, int a2, int a3); void __cdecl sub_748A10(int a1, int a2); void __cdecl sub_748AA0(int a1, int a2); _DWORD *__cdecl sub_748B40(char *a1, char *a2, int a3); void __thiscall sub_748C00(int *this); unsigned int __thiscall sub_748C50(char **this, char *a2); unsigned int __thiscall sub_748D70(int this, int a2); _DWORD *__thiscall sub_748DF0(_DWORD *this); void __thiscall sub_748E10(unsigned int *this, unsigned int a2); void __thiscall sub_748ED0(int *this); char __thiscall sub_748F80(_DWORD *this, _DWORD *a2, char **a3); _DWORD *__thiscall sub_749180(_DWORD *this); int __thiscall sub_7491A0(__time32_t *Time); // idb int __thiscall sub_7491D0(__time32_t *Time, int); // idb __time32_t *__thiscall sub_749220(__time32_t *Time, int a2); _DWORD *__cdecl sub_749280(_DWORD *a1, signed int a2); _DWORD *__thiscall sub_749300(signed int *this, _DWORD *a2); _DWORD *__cdecl sub_7493B0(_DWORD *a1); _DWORD *__thiscall sub_7493D0(_DWORD *this); _DWORD *__thiscall sub_749420(_DWORD *this); int __thiscall sub_749480(_DWORD *this, _DWORD *a2); int *__thiscall sub_7494E0(_DWORD *this, int a2); int __thiscall sub_749570(_DWORD *this, int a2, char a3, int a4, void *a5); void __stdcall sub_7497D0(void *a1); int __thiscall sub_749850(_DWORD *this, int a2, void *a3); int __thiscall sub_749AF0(_DWORD *this, int a2, void *a3, int a4); int __thiscall sub_749CA0(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_749E60(_DWORD *this, int a2, void *a3, int a4); void __thiscall sub_749F20(_DWORD *this); void __thiscall sub_749F80(void **this); char *__thiscall sub_74A020(_DWORD *this, char *a2); char *__thiscall sub_74A120(_DWORD *this, char *a2); _DWORD *__thiscall sub_74A220(_DWORD *this); signed int __thiscall sub_74A2D0(_DWORD *this, char *a2, int a3, int a4); int __thiscall sub_74A560(_DWORD *this, int a2); _DWORD *__thiscall sub_74A6A0(_DWORD *this, int a2); void __thiscall sub_74A720(_DWORD *this); void *__thiscall sub_74A760(int this, int a2); __time32_t __thiscall sub_74A7E0(_DWORD *this); int __thiscall sub_74A800(_DWORD *this, __int16 a2); signed int __thiscall sub_74A850(_DWORD *this, _WORD *a2); signed int __thiscall sub_74A8B0(_DWORD *this, _WORD *a2); void __thiscall sub_74A8F0(_DWORD *this, __int16 a2); int __thiscall sub_74A950(_DWORD **this, __int16 a2); signed int __thiscall sub_74AA50(_DWORD *this, __int16 a2); signed int __thiscall sub_74AAF0(_DWORD *this, __int16 a2, char a3); signed int __thiscall sub_74AB50(_DWORD *this, __int16 a2); int __thiscall sub_74ABB0(_DWORD **this, int a2); signed int __thiscall sub_74AC20(_DWORD *this, __int16 a2); BOOL __thiscall sub_74AC80(_DWORD *this, int a2); BOOL __thiscall sub_74AD60(_DWORD *this, int a2); signed int __thiscall sub_74AE30(_DWORD *this, __int16 *a2); BOOL __thiscall sub_74AE60(_DWORD *this, int a2); BOOL __thiscall sub_74AF30(_DWORD *this, int a2); signed int __thiscall sub_74AFF0(_DWORD *this, int a2); int __thiscall sub_74B090(void *this, unsigned __int16 *a2); int __thiscall sub_74B0B0(void *this, _BYTE *a2); signed int __thiscall sub_74B0F0(_DWORD *this, int a2); BOOL __stdcall sub_74B180(int a1, int a2, int a3, int a4, unsigned int a5); signed int __stdcall sub_74B1E0(signed int a1, __int16 a2); signed int __stdcall sub_74B240(int a1, __int16 a2); signed __int16 __stdcall sub_74B280(int a1); signed int __thiscall sub_74B2C0(_DWORD *this, int a2); BOOL __thiscall sub_74B4E0(_DWORD *this, _BYTE *a2); BOOL __thiscall sub_74B520(_DWORD **this, char a2); signed int __thiscall sub_74B580(_DWORD **this, int a2); char __thiscall sub_74B710(_DWORD **this, _WORD *a2); _DWORD *__thiscall sub_74B7B0(_DWORD *this, int a2); int __thiscall sub_74B890(int this, __int16 a2); int __thiscall sub_74B900(_DWORD *this, int a2); int __thiscall sub_74BA80(_DWORD **this, char a2); BOOL __thiscall sub_74BAB0(_DWORD **this, char a2); int __thiscall sub_74BAF0(int this, int a2); BOOL __thiscall sub_74BB50(_DWORD *this, int a2, signed int a3, unsigned int a4, char a5, int a6); signed int __thiscall sub_74BCB0(_DWORD *this, int a2, __int16 a3); signed int __thiscall sub_74BDF0(_DWORD *this, int a2, int a3); signed int __thiscall sub_74BF00(_DWORD *this, int a2, int a3); int __thiscall sub_74C040(_DWORD *this); signed int __thiscall sub_74C180(_DWORD *this, int a2); signed int __thiscall sub_74C270(_DWORD *this, int a2); signed int __thiscall sub_74C350(_DWORD *this, int a2); signed int __thiscall sub_74C430(void *this); int __thiscall sub_74C540(_DWORD *this); BOOL __thiscall sub_74C590(_DWORD *this, __int16 a2); void __thiscall sub_74C6E0(_DWORD *this, _WORD *a2, int a3, unsigned int a4, int a5); char __thiscall sub_74C880(unsigned __int16 *this, unsigned __int16 *a2); _DWORD *__thiscall sub_74CA60(_DWORD *this); BOOL __thiscall sub_74CA80(void **this, char *a2, int a3, int a4); int __thiscall sub_74CB80(_DWORD *this, unsigned __int16 a2); unsigned int __thiscall sub_74CBD0(_DWORD *this, unsigned __int16 a2, unsigned int a3); int __thiscall sub_74CC20(_DWORD *this, unsigned __int16 a2, unsigned int a3, unsigned int *a4); int __thiscall sub_74CC60(_DWORD *this, unsigned __int16 a2, int a3); int __thiscall sub_74CC90(_DWORD *this, unsigned __int16 a2, int a3); BOOL __thiscall sub_74CCF0(_DWORD *this, char *a2, int a3, int a4); void *__thiscall sub_74CD00(_DWORD *this, unsigned __int8 a2, char a3); void __thiscall sub_74CD70(void *); // idb char __fastcall sub_74CD90(_DWORD *a1, int a2, const char *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); int __thiscall sub_74CF40(char *this, unsigned int a2); int __thiscall sub_74CF60(char *this, unsigned int a2); int __thiscall sub_74CF80(int this); signed int __thiscall sub_74DA00(int *this, _DWORD *a2); int __thiscall sub_74DA80(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_74DAE0(_DWORD *this); void __thiscall sub_74DB10(_DWORD *this); signed int __thiscall sub_74DB30(_DWORD *this, int a2); _DWORD *__thiscall sub_74DC10(_DWORD *this); void __thiscall sub_74DDC0(_DWORD *this); int __thiscall sub_74DDD0(void *this, int a2, int a3); int __thiscall sub_74DE20(void *this, int a2); signed int __thiscall sub_74DE50(void *this, int a2, int a3, __int16 a4, __int16 a5); signed int __thiscall sub_74DEC0(void *this, int a2, int a3); signed int __thiscall sub_74DF20(void *this, int a2, int a3); int __thiscall sub_74DF70(void *this, int a2); BOOL __thiscall sub_74DF90(void *this, int a2); BOOL __thiscall sub_74DFD0(void *this, int a2); void *__thiscall sub_74E000(void *this, char a2); _DWORD *__thiscall sub_74E030(char *this, int a2, int a3, unsigned __int16 a4, unsigned __int16 a5, _DWORD *a6); _DWORD *__thiscall sub_74E150(_DWORD *this); signed int __thiscall sub_74E160(_DWORD *this, _DWORD *a2); signed int __thiscall sub_74E1B0(_DWORD *this, _DWORD *a2); int __thiscall sub_74E210(_DWORD *this, int a2); int __thiscall sub_74E250(_DWORD *this, int a2); void __thiscall sub_74E270(_DWORD *this); int __thiscall sub_74E280(_DWORD *this, int a2); int __thiscall sub_74E2E0(_DWORD *this, unsigned int a2); _DWORD *__cdecl sub_74E310(_DWORD *a1, _DWORD *a2, _DWORD *a3); _DWORD *__cdecl sub_74E330(int a1, int a2, _DWORD *a3); char *__thiscall sub_74E360(const void **this, char *a2); int __thiscall sub_74E3E0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6); void __cdecl sub_74E460(_DWORD *a1, int a2, _DWORD *a3); int **__thiscall sub_74E490(_DWORD *this, int **a2, unsigned __int16 *a3); char **__stdcall sub_74E550(char *a1, int a2, int a3); char __thiscall sub_74E5C0(_DWORD *this, int *a2, const void **a3); int **__thiscall sub_74E700(_DWORD *this, int **a2, unsigned __int16 *a3); int __thiscall sub_74E7D0(_DWORD *this, char a2); int __thiscall sub_74E810(_DWORD *this, int a2); void __thiscall sub_74E860(void **this); void __thiscall sub_74E8D0(int this); void __thiscall sub_74E980(int this); void __thiscall sub_74EA30(int *this); _DWORD *__thiscall sub_74EAC0(_DWORD *this, char *a2, int a3); int __thiscall sub_74EBB0(_DWORD *this, int a2, int a3, void *a4); int __thiscall sub_74ED00(_DWORD **this, int a2); int __thiscall sub_74ED50(_DWORD *this, int a2, _WORD *a3, int *a4); int __thiscall sub_74EE50(_DWORD **this, int a2); void __thiscall sub_74EEA0(void **this); _DWORD *__thiscall sub_74EF90(_DWORD *this, int a2); void __thiscall sub_74F020(void **this); void __thiscall sub_74F080(_DWORD *this); FILE *__thiscall sub_74F280(void **this, char *a2); FILE *__thiscall sub_74F410(void **this, char *a2); FILE *__thiscall sub_74F620(int this, char *a2, int a3); void __thiscall sub_74F650(void *); // idb char *__thiscall sub_74F670(char *this, int a2); signed int __thiscall sub_74F6F0(int *this, _DWORD *a2); int __thiscall sub_74F770(_DWORD *this, _DWORD *a2); signed int __thiscall sub_74F7D0(_DWORD *this, _DWORD *a2); signed int __thiscall sub_74F840(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7); signed int __thiscall sub_74F8B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); signed int __thiscall sub_74F910(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7); _DWORD *__thiscall sub_74F970(_DWORD *this); void __thiscall sub_74F9A0(_DWORD *this); signed int __thiscall sub_74F9C0(_DWORD *this, _DWORD *a2); signed int __thiscall sub_74FA60(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_74FB30(char *this); BOOL __stdcall sub_74FBD0(unsigned int *a1); int __thiscall sub_74FC80(char *); // idb signed int __thiscall sub_74FC90(_DWORD *this, int a2); signed int __thiscall sub_74FD80(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_74FE00(_DWORD *this, _DWORD *a2, _DWORD *a3); signed int __thiscall sub_74FEA0(char *this, _DWORD *a2); signed int __stdcall sub_74FEF0(int a1); char __thiscall sub_74FF80(_DWORD *this, int a2); BOOL __thiscall sub_74FFC0(int this, int a2); signed int __thiscall sub_750040(_DWORD *this, int a2); signed int __thiscall sub_7500C0(_DWORD *this, _DWORD *a2); signed int __thiscall sub_750160(_DWORD *this, _DWORD *a2); signed int __thiscall sub_750200(_DWORD *this, _DWORD *a2, char a3); char *__thiscall sub_7502B0(char *this); void __thiscall sub_7502F0(char *this); char *__thiscall sub_750320(char *this, int a2); _DWORD *__thiscall sub_750370(_DWORD *this, _DWORD *a2); void __thiscall sub_7503C0(_DWORD *this, void *a2); signed int __thiscall sub_750430(_DWORD *this, int a2); _DWORD *__thiscall sub_7504D0(_DWORD *this, _DWORD *a2); void __thiscall sub_750500(_DWORD *this); int __thiscall sub_750540(_DWORD); // weak void __thiscall sub_750550(void *); // idb void __thiscall sub_750570(_DWORD *this); signed int __thiscall sub_750590(unsigned __int16 *this, _DWORD *a2); char *__thiscall sub_7505E0(char *this, int a2); signed int __thiscall sub_750670(unsigned __int16 *this, int a2); signed int __thiscall sub_7506B0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_750700(unsigned __int16 *this, int a2); _DWORD *__thiscall sub_750740(_DWORD *this, int a2); signed int __thiscall sub_7507F0(_DWORD *this, int a2, char a3, _DWORD *a4, const void *a5); int __stdcall sub_750840(int a1); int __stdcall sub_750870(int a1); int __stdcall sub_7508A0(int a1); int __stdcall sub_7508D0(int a1); int __stdcall sub_750900(int a1); int __stdcall sub_750930(int a1); bool __stdcall sub_750960(int a1); char *__thiscall sub_750980(int this, char *a2); signed int __stdcall sub_750A60(int a1); BOOL __stdcall sub_750A70(int a1); BOOL __stdcall sub_750A90(_WORD *a1); signed int __thiscall sub_750AB0(int this, int a2); signed int __thiscall sub_750B00(int this, int a2); signed int __thiscall sub_750B40(_DWORD *this, int a2); signed int __thiscall sub_750B70(_DWORD *this, _DWORD *a2); signed int __thiscall sub_750BF0(int this, _BYTE *a2); signed int __thiscall sub_750C10(_DWORD *this, int *a2); signed int __thiscall sub_750C50(int this, int a2); signed int __thiscall sub_750C70(char *this, _DWORD *a2); void __thiscall sub_750D00(void *); // idb void __thiscall sub_750D20(int this); char *__thiscall sub_750D40(int this); void __thiscall sub_750D90(void *); // idb void __thiscall sub_750DB0(_DWORD *this); signed int __thiscall sub_750DD0(unsigned __int16 *this, _DWORD *a2); char *__thiscall sub_750E20(char *this, int a2); signed int __thiscall sub_750EB0(unsigned __int16 *this, int a2); signed int __thiscall sub_750EF0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_750F40(unsigned __int16 *this, int a2); _DWORD *__thiscall sub_750FA0(_DWORD *this); int __thiscall sub_751050(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751080(_WORD *this, int a2); signed int __thiscall sub_751190(unsigned __int16 *this, int a2); signed int __thiscall sub_7511D0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751210(unsigned __int16 *this, int a2); signed int __thiscall sub_751250(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751290(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751350(unsigned __int16 *this, int a2); signed int __thiscall sub_751390(unsigned __int16 *this, int a2); signed int __thiscall sub_7513D0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751420(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751470(unsigned __int16 *this, int a2); signed int __thiscall sub_7514B0(char *this, _WORD *a2); int __thiscall sub_7514F0(int this); _DWORD *__thiscall sub_751520(_DWORD *this); signed int __thiscall sub_751550(_WORD *this, int a2); signed int __thiscall sub_751650(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_7516A0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_7516E0(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_7517A0(unsigned __int16 *this, int a2); signed int __thiscall sub_7517E0(unsigned __int16 *this, int a2); signed int __thiscall sub_751820(unsigned __int16 *this, _DWORD *a2); signed int __thiscall sub_751870(unsigned __int16 *this, int a2); signed int __thiscall sub_7518B0(_DWORD *this, int a2); signed int __thiscall sub_751960(_DWORD *this, int a2); signed int __thiscall sub_7519E0(_DWORD *this, int a2); signed int __thiscall sub_751AA0(int this, int a2); signed int __thiscall sub_751B80(_DWORD *this, int a2); void __thiscall sub_751C10(_DWORD *this); void __thiscall sub_751C50(_DWORD *this); struct tm *__thiscall sub_751C90(_DWORD *this, int a2, _DWORD *a3, char a4, int a5); signed int __thiscall sub_751E90(_DWORD *this, int a2); signed int __thiscall sub_751EC0(_DWORD *this, int a2); int __thiscall sub_751F30(_DWORD); // weak _DWORD *__thiscall sub_751F40(_DWORD *this); void __thiscall sub_752040(_DWORD *this); void __thiscall sub_752060(void *); // idb signed int __thiscall sub_7520A0(int *this, int a2); int __thiscall sub_752110(_DWORD *this, int a2); int __thiscall sub_752150(int *this, _WORD *a2); signed int __thiscall sub_7521F0(_DWORD *this, _WORD *a2); void __thiscall sub_752280(void *); // idb void __thiscall sub_7522B0(void *); // idb void __thiscall sub_7522D0(_DWORD *this); _DWORD *__thiscall sub_752310(_DWORD *this); char __thiscall sub_752350(_DWORD *this, char *a2); bool __thiscall sub_752420(_DWORD *this, unsigned int a2, unsigned int a3); bool __thiscall sub_752470(_DWORD *this, float a2, float a3); void __thiscall sub_752500(void **this); signed int __thiscall sub_752550(_DWORD *this); void __thiscall sub_752670(int this, int a2, int a3); int __thiscall sub_7526F0(int this); signed int __thiscall sub_7527F0(_DWORD *this, int a2, int a3, __int16 a4); signed int __thiscall sub_752860(_DWORD *this); signed int __thiscall sub_752BF0(_DWORD *this); char __thiscall sub_753590(_DWORD *this); _DWORD *__thiscall sub_753680(_DWORD *this); bool __thiscall sub_7536A0(float *this, float a2, float a3); bool __thiscall sub_753700(float *this, float a2, float a3); _DWORD *__thiscall sub_7537D0(_DWORD *this); _DWORD *__thiscall sub_753800(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_753870(_DWORD *this, char *a2); void __thiscall sub_7538D0(void **this); void __thiscall sub_753910(void **this); char __thiscall sub_753950(void **this, char *a2); void *__thiscall sub_753C00(void *this, char a2); char __stdcall sub_753C30(unsigned __int8 *a1, int *a2); char __stdcall sub_753CA0(signed int a1, _BYTE *a2); char __thiscall sub_753D20(char *this, unsigned int a2, int a3); _DWORD *__thiscall sub_754400(_DWORD *this); char __thiscall sub_754570(_BYTE *this); char __thiscall sub_754590(_WORD *this, signed int a2, __int16 a3); unsigned int __thiscall sub_7545D0(_DWORD *this, signed int a2, int a3); int __thiscall sub_754610(_DWORD *this, signed int a2, int a3, unsigned int a4); _BYTE *__thiscall sub_7546B0(char *this, int a2); _DWORD *__thiscall sub_754900(_DWORD *this); int __thiscall sub_754910(int this, void *a2); void __thiscall sub_7549A0(_DWORD *this); char *sub_7549E0(char *a1, ...); char __thiscall sub_754A40(void **this, size_t a2); _DWORD *__thiscall sub_754A70(_DWORD *this); void __thiscall sub_754A90(_DWORD *this); bool __thiscall sub_754AB0(void **this, char *a2); bool __thiscall sub_754B30(_DWORD *this, char *a2); unsigned int __cdecl sub_754BA0(int a1, int a2, int a3, unsigned int a4, const char *a5); char __thiscall sub_754C00(const char *this, int a2, int a3); char __thiscall sub_754CC0(const char *this, int a2, int a3); char __stdcall sub_754D80(char *a1, int a2); bool __thiscall sub_754E40(void **this, char *a2); bool __thiscall sub_754E60(_DWORD *this, char *a2); void *__thiscall sub_754E80(void *this, char a2); int __thiscall sub_754EB0(_DWORD *this, char *a2); char __thiscall sub_754F10(void *this, char *a2, int a3); char __cdecl sub_754FD0(char a1); char __cdecl sub_754FE0(char a1); char __thiscall sub_754FF0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_7550A0(_DWORD *this, const char *a2); // BOOL __stdcall ImmReleaseContext(HWND, HIMC); // BOOL __stdcall ImmGetConversionStatus(HIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence); // HIMC __stdcall ImmGetContext(HWND); // BOOL __stdcall ImmSetConversionStatus(HIMC, DWORD, DWORD); // BOOL __stdcall ImmNotifyIME(HIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue); // int __usercall sub_755140@(int result@, __int16 a2@); // int __usercall sub_755170@(int a1@); signed int __cdecl sub_7551C0(_DWORD *a1, unsigned int a2); signed int __cdecl sub_7555C0(int a1); // signed int __usercall sub_755690@(int a1@); // unsigned int __usercall sub_755720@(_DWORD *a1@, unsigned int a2); // int __usercall sub_755880@(int a1@, _DWORD *a2@); // void *__usercall sub_755920@(int a1@); signed int __cdecl sub_755A70(int *a1, int a2); signed int __cdecl sub_755C50(int a1, int a2); signed int __cdecl sub_755FD0(_DWORD *a1, int a2); signed int __cdecl sub_756450(_DWORD *a1); signed int __cdecl sub_7564F0(_DWORD *a1, unsigned int a2, int a3, signed int a4, int a5, unsigned int a6, _BYTE *a7, int a8); signed int __cdecl sub_756720(_DWORD *a1, unsigned int a2, _BYTE *a3, int a4); signed int __cdecl sub_756750(_DWORD *a1); signed int __cdecl sub_7567B0(_DWORD *a1, signed int a2, _BYTE *a3, int a4); signed int __cdecl sub_756880(_DWORD *a1, _BYTE *a2, int a3); // signed int __usercall sub_7568A0@(int a1@, int a2@); signed int __cdecl sub_7569A0(int a1, int a2); signed int __cdecl sub_757CF0(_DWORD *a1); int __cdecl sub_757D40(unsigned int a1, unsigned __int8 *a2, unsigned int a3); int __fastcall sub_757E80(int a1, int a2); // int __usercall sub_757F00@(int result@, int a2@, int a3); // _DWORD *__usercall sub_757FE0@(_DWORD *result@, int *a2@); // signed int __usercall sub_7581E0@(int a1@, int a2@, _WORD *a3); // int __usercall sub_7582C0@(int result@, int a2@, int a3@); // int __usercall sub_758840@(int a1@, int a2, int a3, int a4); // int __usercall sub_758A90@(int result@, int a2, int a3); // unsigned __int16 *__usercall sub_758EA0@(unsigned __int16 *result@); // int __usercall sub_758F70@(int result@); // int __usercall sub_758FF0@(int result@); // int __usercall sub_759050@(int result@, int a2@, char *a3, int a4); int __cdecl sub_759120(int a1); // signed int __usercall sub_759190@(int a1@, int a2@, int a3); // signed int __usercall sub_759220@(_DWORD *a1@, int *a2); // signed int __usercall sub_759420@(int a1@); int __cdecl sub_7594F0(int a1, char *a2, int a3, unsigned __int16 a4); int __cdecl sub_7595A0(int a1); int __cdecl sub_7597A0(int a1, char *a2, int a3, int a4); int __cdecl sub_759C50(int a1, _DWORD *a2, unsigned int a3); void *__cdecl sub_759C70(int a1, int a2, int a3); void __cdecl sub_759C90(int a1, void *a2); _DWORD *__cdecl sub_759CB0(_DWORD *a1, int a2); signed int __cdecl sub_75A0C0(int a1, int a2, unsigned int a3, _DWORD **a4, unsigned int *a5, char *a6); char __thiscall sub_75A550(_DWORD *this, int a2); unsigned int __thiscall sub_75A5E0(int this, int a2, _BYTE *a3); _BYTE *__thiscall sub_75A620(int this, int a2, _BYTE *a3); _BYTE *__thiscall sub_75A650(unsigned __int16 *this, int a2, _BYTE *a3); _BYTE *__thiscall sub_75A6A0(unsigned __int16 *this, int a2, _BYTE *a3); bool __stdcall sub_75A6F0(const char *a1); int __thiscall sub_75A710(_DWORD *this, int a2, int a3); void __thiscall sub_75A740(_DWORD *this, int a2); char *__thiscall sub_75A790(char *this); char *__thiscall sub_75A810(void *this, char a2); int __cdecl sub_75A860(int a1, int a2, int a3); _DWORD *__thiscall sub_75A890(_BYTE *this, int a2, int a3); int __cdecl sub_75ABD0(int a1, int a2); char __thiscall sub_75AC00(char *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, void *a5, _BYTE *a6, _DWORD *a7); _DWORD *__thiscall sub_75AFB0(_BYTE *this, int a2, int a3); // int *__usercall sub_75B030@(signed int a1@, _DWORD *a2@); int __cdecl sub_75B080(_DWORD *a1, int *a2); BOOL __cdecl sub_75B0A0(_DWORD *a1, int a2); _DWORD *__cdecl sub_75B110(int a1, int a2, signed int a3); int __cdecl sub_75B160(int a1, int a2); void *__cdecl sub_75B180(int a1); int __cdecl sub_75B1A0(int a1, unsigned int a2); int __cdecl sub_75B1D0(int a1); int __cdecl sub_75B1F0(int a1, int a2); _DWORD *__cdecl sub_75B240(_DWORD *a1, signed int a2); int __cdecl sub_75B2D0(_DWORD *a1, signed int a2); // char __usercall sub_75B360@(signed int a1@, int *a2@, _DWORD *a3@); char __cdecl sub_75B410(_DWORD *a1, signed int a2); char __cdecl sub_75B430(_DWORD *a1, signed int a2, signed int a3); int __cdecl sub_75B4C0(_DWORD *a1, signed int a2); int __cdecl sub_75B570(_DWORD *a1, signed int a2); int __cdecl sub_75B600(int a1, int a2); BOOL __cdecl sub_75B610(_DWORD *a1, signed int a2); double *__cdecl sub_75B690(_DWORD *a1, signed int a2); BOOL __cdecl sub_75B720(_DWORD *a1, signed int a2); BOOL __cdecl sub_75B750(_DWORD *a1, signed int a2, signed int a3); BOOL __cdecl sub_75B870(_DWORD *a1, signed int a2, signed int a3, int a4); double __cdecl sub_75B9C0(_DWORD *a1, signed int a2, _DWORD *a3); signed int __cdecl sub_75BA70(_DWORD *a1, signed int a2, _DWORD *a3); int __cdecl sub_75BB30(_DWORD *a1, signed int a2, _DWORD *a3); BOOL __cdecl sub_75BBF0(_DWORD *a1, signed int a2); int __cdecl sub_75BC70(_DWORD *a1, signed int a2, _DWORD *a3); unsigned int __cdecl sub_75BD30(_DWORD *a1, signed int a2); int __cdecl sub_75BDE0(_DWORD *a1, signed int a2); int __cdecl sub_75BE80(_DWORD *a1, signed int a2); int __cdecl sub_75BEF0(_DWORD *a1, signed int a2); int __cdecl sub_75BFE0(int a1); int __cdecl sub_75C000(int, double); // idb int __cdecl sub_75C040(int a1, signed int a2); int __cdecl sub_75C060(int a1, signed int a2); int __cdecl sub_75C0B0(int a1, void *a2, size_t a3); int __cdecl sub_75C100(int a1, void *a2); int __cdecl sub_75C160(int a1, char *a2, int a3); int __cdecl sub_75C190(int a1, char *a2, int a3); int __cdecl sub_75C1C0(int a1, int a2, int a3); __int64 __cdecl sub_75C250(int a1, int a2); int __cdecl sub_75C270(int a1, int a2); BOOL __cdecl sub_75C290(int a1); int __cdecl sub_75C2C0(_DWORD *a1, void *a2); int __cdecl sub_75C320(_DWORD *a1, signed int a2); int __cdecl sub_75C3A0(_DWORD *a1, signed int a2, void *a3); int __cdecl sub_75C440(_DWORD *a1, signed int a2); int __cdecl sub_75C4C0(_DWORD *a1, signed int a2, signed int a3); int __cdecl sub_75C540(int a1, int a2, int a3); signed int __cdecl sub_75C590(_DWORD *a1, signed int a2); _DWORD *__cdecl sub_75C680(_DWORD *a1, signed int a2); int *__cdecl sub_75C710(int a1, void *a2); int *__cdecl sub_75C770(_DWORD *a1, signed int a2, void *a3); int __cdecl sub_75C810(_DWORD *a1, signed int a2); int __cdecl sub_75C8E0(_DWORD *a1, signed int a2, signed int a3); signed int __cdecl sub_75C9A0(_DWORD *a1, signed int a2); char __cdecl sub_75CAF0(_DWORD *a1, signed int a2); int __cdecl sub_75CBA0(int a1, _DWORD *a2); signed int __cdecl sub_75CBD0(int a1, int a2, int a3, int a4, int a5); signed int __cdecl sub_75CC30(int a1, int a2); int __cdecl sub_75CC50(int a1, int a2, int a3, signed int a4, int a5, int a6); int __cdecl sub_75CD10(int a1, int a2, int a3, const char *a4, int a5); int __cdecl sub_75CDD0(int a1, int (__cdecl *a2)(int, char *, signed int, int), int a3); int __cdecl sub_75CE10(int a1); signed int __cdecl sub_75CE20(int a1, int a2, int a3); void __cdecl __noreturn sub_75CFA0(_DWORD *a1); signed int __cdecl sub_75CFB0(_DWORD *a1, signed int a2); void __cdecl sub_75D040(int a1, signed int a2); double *__cdecl sub_75D0B0(int a1, signed int a2); int __cdecl sub_75D130(int a1, unsigned int a2); // const CHAR *__usercall sub_75D170@(signed int a1@, _DWORD *a2@, _DWORD *a3@, _DWORD *a4@); const CHAR *__cdecl sub_75D200(_DWORD *a1, signed int a2, signed int a3); const CHAR *__cdecl sub_75D2F0(_DWORD *a1, signed int a2, signed int a3); // int __usercall sub_75D3D0@(signed int a1@, _DWORD *a2@, int a3@, _DWORD *a4@); int __cdecl sub_75D430(_DWORD *a1, signed int a2, int a3); char __cdecl sub_75D550(int a1, signed int a2, int a3, signed int a4, int a5); signed int __cdecl sub_75D5F0(_DWORD *a1, signed int a2, int a3); // signed int __usercall sub_75D6D0@(_DWORD *a1@, int a2); // _DWORD *__usercall sub_75D740@(int a1@, int a2@); int __thiscall sub_75D7E0(void *this); void __cdecl sub_75D890(int a1, void *a2, int a3, int a4); int __cdecl sub_75D9F0(int a1, int a2); void __noreturn sub_75DA80(_DWORD *a1, char *a2, ...); signed int __cdecl sub_75DAC0(int a1, int a2, int a3); signed int __cdecl sub_75DB50(int a1, signed int a2); signed int __cdecl sub_75DBD0(_DWORD *a1, void *a2); signed int __cdecl sub_75DC30(_DWORD *a1, void *a2); int __cdecl sub_75DC60(_DWORD *a1, signed int a2, void *a3); BOOL __cdecl sub_75DCD0(_DWORD *a1, int a2, int a3); int __cdecl sub_75DD20(const void **a1, unsigned int a2); void *__cdecl sub_75DDB0(int a1, void *a2, size_t a3); void *__cdecl sub_75DDE0(int a1, void *a2); _DWORD *__cdecl sub_75DE20(int a1); _DWORD *__cdecl sub_75DE60(_DWORD *a1, int a2); _DWORD *__cdecl sub_75DEA0(size_t a1); _DWORD *__cdecl sub_75DF10(int a1, _DWORD *a2); int __cdecl sub_75DF40(int a1, int a2, unsigned int a3); int __cdecl sub_75DF70(int a1, int a2, size_t *a3); // signed int __usercall sub_75DFD0@(signed int a1@, _DWORD *a2@, int a3); // int __usercall sub_75E010@(int a1@); // signed int __usercall sub_75E060@(int a1@, int *a2@); int __cdecl sub_75E0A0(int, char *, int); // idb int __cdecl sub_75E330(int a1, _DWORD *a2, _DWORD *a3); int __cdecl sub_75E360(int a1, int a2, int a3, const char *a4, int a5); signed int __cdecl sub_75E3A0(_DWORD *a1, signed int a2, void *a3); signed int __cdecl sub_75E400(_DWORD *a1, unsigned int a2, void *a3); signed int __cdecl sub_75E480(_DWORD *a1, signed int a2); int __cdecl sub_75E4D0(_DWORD *a1, unsigned int a2, _DWORD *a3); signed int __cdecl sub_75E5D0(_DWORD *a1, unsigned int a2, void *a3); int *__cdecl sub_75E640(_DWORD *a1, void *a2, int a3, int a4); int __cdecl sub_75E700(int, char *, char *, int); // idb void *__cdecl sub_75E9E0(int a1, void *a2, int a3, size_t a4); int __cdecl sub_75EA10(_DWORD *a1); int sub_75EA50(); int __cdecl sub_75EA80(int, double); // idb void __cdecl __noreturn sub_75EB40(_DWORD *a1, int a2, int a3); int __cdecl sub_75EC50(_DWORD *a1, signed int a2, void *a3); int __cdecl sub_75ECA0(_DWORD *a1, signed int a2, int a3); int __cdecl sub_75ED00(_DWORD *a1, signed int a2); int __cdecl sub_75ED30(_DWORD *a1, signed int a2, _DWORD *a3); int __cdecl sub_75ED90(_DWORD *a1, signed int a2, const char *a3, _DWORD *a4); double __cdecl sub_75EDF0(_DWORD *a1, signed int a2); double __cdecl sub_75EE60(int a1, int a2, double a3); signed int __cdecl sub_75EE90(_DWORD *a1, signed int a2); int __cdecl sub_75EEF0(_DWORD *a1, signed int a2); signed int __cdecl sub_75EF50(_DWORD *a1, signed int a2, signed int a3); int __cdecl sub_75EF80(_DWORD *a1, int a2, int a3); int __cdecl sub_75F030(_DWORD *a1, signed int a2, const char *a3, const char **a4); int __cdecl sub_75F120(_DWORD *a1); int __cdecl sub_75F180(int a1, int a2); int __cdecl sub_75F1A0(int a1); int __cdecl sub_75F1D0(int a1); // int __usercall sub_75F210@(int a1@, _DWORD *a2@); // _DWORD *__usercall sub_75F290@(int a1@, int a2@); int __cdecl sub_75F2F0(_DWORD *a1); // int __usercall sub_75F340@(_DWORD *a1@); int __cdecl sub_75F3E0(int a1); int __cdecl sub_75F480(int a1, _DWORD *a2); int __cdecl sub_75F4E0(int (__cdecl *a1)(int, _DWORD, signed int, signed int), int a2); int __cdecl sub_75F6A0(int a1); int __cdecl sub_75F6C0(unsigned int a1); int __cdecl sub_75F6F0(int a1); int __cdecl sub_75F710(int a1); // int __cdecl sub_75F740(int, double, double); idb int __cdecl sub_75F7D0(int a1); // double __usercall sub_75F7F0@(_DWORD *a1@, _DWORD *a2@, double a3); double __cdecl sub_75F850(unsigned __int8 *a1, unsigned __int8 **a2); BOOL __cdecl sub_75F990(char *a1, int a2, int a3); int __cdecl sub_75FA20(int, char *, int); // idb int __cdecl sub_75FD10(int, char *, int); // idb char __cdecl sub_75FD30(void *a1, char *a2, int a3); // int __usercall sub_75FE70@(int a1@, int *a2@, int a3@); void __cdecl __noreturn sub_75FEE0(int a1, int a2); int __cdecl sub_75FF60(int a1, void (__cdecl *a2)(int, int), int a3); int __cdecl sub_75FFE0(_DWORD *a1, int a2); int __cdecl sub_7600D0(_DWORD *a1, int a2); int __cdecl sub_760140(_DWORD *a1); int __cdecl sub_7601A0(int a1, int a2, int a3); // _DWORD *__usercall sub_760260@(_DWORD *a1@, _DWORD *a2@); int __cdecl sub_760340(int a1, int a2); void __cdecl sub_7603F0(_DWORD *a1); // signed int __usercall sub_760480@(int a1@, int a2); // void __usercall __noreturn sub_7604F0(int *a1@, int a2@); int __cdecl sub_760520(int a1, int a2, int a3, int a4); int __cdecl sub_7605A0(int a1, void (__cdecl *a2)(int, int), int a3, int a4, int a5); int __cdecl sub_760630(_DWORD *a1, int **a2); int __cdecl sub_760750(int a1, int a2, int a3, int a4); signed int __cdecl sub_760810(int a1, int (__cdecl **a2)(int), __int16 a3); signed int __cdecl sub_760A50(int a1, int (__cdecl **a2)(int), __int16 a3, int a4); void __cdecl sub_760AE0(int a1, int *a2); signed int __cdecl sub_760BC0(int a1, int a2, int a3); int __cdecl sub_760C70(int a1, int a2); int __cdecl sub_760C90(int a1, char a2, int a3, int *a4, int a5); int __cdecl sub_760CE0(int a1, int a2); // int __usercall sub_760E40@(int a1@); // void __usercall sub_760FD0(_DWORD *a1@); // void __usercall sub_761130(int a1@); // void __usercall sub_761190(_DWORD *a1@); // int __usercall sub_761200@(int a1@, int a2); // int __usercall sub_761330@(_DWORD *a1@, int a2); // int __usercall sub_761460@(int a1@, int a2); // int __usercall sub_761610@(int a1@, int a2); // int __usercall sub_7617C0@(_DWORD *a1@, int a2); // int __usercall sub_761860@(int result@, int a2@); unsigned int __cdecl sub_761960(int a1, int *a2, int a3); // _DWORD *__usercall sub_761A60@(_DWORD *result@, int a2, _DWORD *a3); // void __usercall sub_761B70(int a1@); int __cdecl sub_761BC0(int a1); // int *__usercall sub_761BE0@(int a1@, int a2); void __cdecl sub_761D00(int a1, int a2, int a3); // int __usercall sub_761DA0@(int a1@); // void __usercall sub_761DE0(int a1@, int a2); unsigned int __cdecl sub_761F20(int a1); char __cdecl sub_761FB0(int a1, int a2, int a3); char __cdecl sub_761FF0(int a1, int a2, int a3); char __cdecl sub_762050(_BYTE *a1, int a2); // int __usercall sub_7620C0@(int a1@, int a2); // signed int __usercall sub_762210@(int a1@, _DWORD *a2); // int __usercall sub_7623F0@(int a1@, _DWORD *a2); // int __usercall sub_7624E0@(_DWORD *a1@); // void __usercall sub_7625C0(_DWORD *a1@); // void __usercall sub_7626A0(_DWORD *a1@); // int __usercall sub_7626F0@(int result@, int a2, int a3); // int __usercall sub_7627D0@(int result@, int a2, int a3); int __cdecl sub_762930(int a1); // int __usercall sub_762AB0@(int a1@); signed int __cdecl sub_762C10(int a1, int a2); int __cdecl sub_762D80(int a1); void __cdecl sub_762E70(int a1, int a2); signed int __cdecl sub_762F70(int a1, signed int a2); // int __usercall sub_762FF0@(int a1@); int *__cdecl sub_763090(int a1); int *__cdecl sub_7630F0(int a1); int __cdecl sub_763120(int a1); _DWORD *__cdecl sub_763170(int a1, char a2, int a3); _DWORD *__cdecl sub_7631A0(int a1, _DWORD *a2, int a3); double *__cdecl sub_763240(double *a1, double *a2); signed int __cdecl sub_7632A0(int a1, int a2); // _DWORD *__usercall sub_763320@(_DWORD *a1@, _DWORD *a2@, _DWORD *a3@, _DWORD *a4, _DWORD *a5, int a6); int __cdecl sub_7633D0(_DWORD *a1, int *a2, int *a3, int *a4); int *__cdecl sub_763520(_DWORD *a1, int *a2, int *a3, int *a4); // signed int __usercall sub_7636D0@(int a1@, int a2@, _DWORD *a3@, _DWORD *a4, int a5); // _DWORD *__usercall sub_763790@(int a1@, int a2@, int a3, int a4); // int __usercall sub_763860@(int a1@, int a2@); BOOL __cdecl sub_7638E0(int a1, int *a2, int *a3); BOOL __cdecl sub_7639B0(int a1, int *a2, int *a3); signed int __cdecl sub_763AD0(int a1, int *a2, int *a3); int __cdecl sub_763C10(int a1, signed int a2); double *__cdecl sub_763EE0(int a1, double *a2, int *a3); signed int __cdecl sub_764020(int a1, double *a2, int *a3, int *a4, int a5); int __cdecl sub_764110(int a1, int a2); // int __usercall sub_764180@(int *a1@, int a2, int a3, int a4, int a5); _DWORD *__cdecl sub_764220(int a1); int __cdecl sub_7643C0(int a1); // int __usercall sub_7655F0@(int a1@, double a2); // int __usercall sub_765650@(int a1@, int *a2@); // int __usercall sub_765790@(int *a1@, int a2@, int a3); signed int __cdecl sub_7658B0(int a1, int a2, int *a3); int __cdecl sub_765970(_DWORD *a1, int *a2); int __cdecl sub_7659F0(int a1, int a2); // int __usercall sub_765A60@(int a1@, int a2, _DWORD *a3); // int __usercall sub_765B30@(int a1@, int a2@, int a3@); // int __usercall sub_765B80@(int a1@, int a2@, int a3@); int __cdecl sub_765C40(int a1); int __cdecl sub_765C80(int a1, int a2); void *__cdecl sub_765CE0(int a1, signed int a2); _DWORD *__cdecl sub_765D60(int a1, int a2); int *__cdecl sub_765DA0(int a1, int *a2); int *__cdecl sub_765EA0(int a1, int a2, int *a3); // int __usercall sub_765ED0@(int a1@, int a2); unsigned int __cdecl sub_766020(int a1); int __cdecl sub_766080(int a1, int a2, int a3, int a4); int __cdecl sub_7661F0(int a1, int a2, int a3); // int __usercall sub_766240@(int a1@, int a2@, int a3); int *__cdecl sub_766390(int a1, int a2, int *a3); _DWORD *__cdecl sub_766520(int a1, int a2, signed int a3, _DWORD *a4); int __thiscall sub_766570(_DWORD *this); signed int __cdecl sub_7665A0(int a1, int a2, int a3, int a4); int __cdecl sub_7665E0(int a1); int __cdecl sub_7665F0(int a1); int __cdecl sub_766600(int a1); signed int __cdecl sub_766610(int a1, int a2, int a3); // const char *__usercall sub_766660@(int a1@, _DWORD *a2@, int a3, _DWORD *a4); const char *__cdecl sub_766700(int a1, _DWORD *a2, int a3); const char *__cdecl sub_766770(int a1, int a2, int a3); // char __usercall sub_7667C0@(_DWORD *a1@, int a2@); // _DWORD *__usercall sub_766840@(int a1@, int a2@); // const char *__usercall sub_7668D0@(int a1@, int a2@, _DWORD *a3@, int a4); // signed int __usercall sub_766920@(int a1@, int a2, int a3); const char *__cdecl sub_766A00(_DWORD *a1, int a2, int a3, int *a4); // const char *__usercall sub_766C00@(_DWORD *a1@, int *a2@, int a3); // const char *__usercall sub_766D50@(int **a1@, int a2@, _DWORD *a3); // int __usercall sub_766DB0@(int a1@); void __cdecl __noreturn sub_766E40(_DWORD *a1); void __cdecl __noreturn sub_766EB0(int, char *, int); // idb // signed int __usercall sub_766EE0@(int a1@, int a2@, int a3, char *a4, int a5); int __cdecl sub_767060(int, char *, int); // idb void __cdecl __noreturn sub_767130(int a1, int a2, int a3); void __cdecl __noreturn sub_767200(int a1, int a2, int a3); void __cdecl __noreturn sub_767240(int a1, double *a2, int a3); void __cdecl __noreturn sub_767270(int a1, int a2, int a3); signed int __cdecl sub_7672F0(int a1, int a2); BOOL __cdecl sub_767360(int a1, int a2); unsigned int __cdecl sub_7673A0(int a1, unsigned int a2, int a3); int __cdecl sub_7673E0(int a1, int a2); // int __usercall sub_7674F0@(unsigned int a1@, int a2, char *a3); int __cdecl sub_767620(int, void *, size_t); // idb int __cdecl sub_7676A0(int, void *); // idb _DWORD *__cdecl sub_7676D0(int a1, unsigned int a2, int a3); int __cdecl sub_767710(int a1, int a2); int __cdecl sub_767740(int a1, int a2); int __cdecl sub_767790(int a1); int __cdecl sub_7677C0(int a1, unsigned int a2); int __cdecl sub_767830(int a1, int a2); void __cdecl sub_767870(int a1, unsigned int a2); int __cdecl sub_767910(int a1); int __cdecl sub_767970(int a1, _DWORD *a2); int __cdecl sub_767A10(int a1, int a2, int a3); signed int __cdecl sub_767A60(int a1); _DWORD *__cdecl sub_767AA0(int a1, _DWORD *a2, int a3, int a4); unsigned int __cdecl sub_767AD0(int a1, void *a2, int a3); int __cdecl sub_767B60(int a1, _DWORD *a2, unsigned int a3); // int __usercall sub_767BB0@(int result@, _DWORD *a2@); // int __usercall sub_767C30@(_DWORD *a1@, _DWORD *a2); // int __usercall sub_767D90@(int a1@, _DWORD *a2@); // int __usercall sub_767E20@(_DWORD *a1@, _DWORD *a2); int __cdecl sub_768050(int a1, _DWORD *a2); int __cdecl sub_768180(int a1, int a2, int (__cdecl *a3)(int, char *, signed int, int), int a4, int a5); signed int __cdecl sub_768200(_DWORD *a1); signed int __cdecl sub_768220(_DWORD *a1); signed int __cdecl sub_768250(_DWORD *a1); signed int __cdecl sub_7682A0(_DWORD *a1); signed int __cdecl sub_7682E0(_DWORD *a1); // int *__usercall sub_768350@(int a1@, _DWORD *a2@, void *a3); signed int __cdecl sub_7683A0(_DWORD *a1); signed int __cdecl sub_7686A0(_DWORD *a1); signed int __cdecl sub_7687C0(_DWORD *a1); CHAR *__cdecl sub_7688A0(_DWORD *a1); CHAR *__cdecl sub_7688F0(_DWORD *a1); signed int __cdecl sub_768950(_DWORD *a1); int __cdecl sub_7689E0(_DWORD *a1); int __cdecl sub_768AF0(_DWORD *a1, _DWORD *a2); int __cdecl sub_768B80(_DWORD *a1); signed int __cdecl sub_768CE0(_DWORD *a1); int __cdecl sub_768DE0(_DWORD *a1); signed int __cdecl sub_768F60(_DWORD *a1); signed int __cdecl sub_769010(_DWORD *a1); signed int __cdecl sub_769040(_DWORD *a1); signed int __cdecl sub_769070(_DWORD *a1); signed int __cdecl sub_7690A0(_DWORD *a1); signed int __cdecl sub_7690D0(_DWORD *a1); signed int __cdecl sub_769100(_DWORD *a1); signed int __cdecl sub_769130(_DWORD *a1); signed int __cdecl sub_769160(_DWORD *a1); signed int __cdecl sub_769190(_DWORD *a1); signed int __cdecl sub_7691C0(_DWORD *a1); signed int __cdecl sub_7691F0(_DWORD *a1); signed int __cdecl sub_769220(_DWORD *a1); signed int __cdecl sub_769270(_DWORD *a1); signed int __cdecl sub_7692A0(_DWORD *a1); signed int __cdecl sub_7692D0(_DWORD *a1); signed int __cdecl sub_769320(_DWORD *a1); signed int __cdecl sub_769370(_DWORD *a1); signed int __cdecl sub_7693A0(_DWORD *a1); signed int __cdecl sub_7693F0(_DWORD *a1); signed int __cdecl sub_769480(_DWORD *a1); signed int __cdecl sub_7694B0(_DWORD *a1); signed int __cdecl sub_7694E0(_DWORD *a1); signed int __cdecl sub_769510(_DWORD *a1); signed int __cdecl sub_769550(_DWORD *a1); signed int __cdecl sub_7695A0(_DWORD *a1); signed int __cdecl sub_769610(_DWORD *a1); signed int __cdecl sub_769680(_DWORD *a1); int __cdecl sub_769790(_DWORD *a1); signed int __cdecl sub_7697B0(_DWORD *a1); signed int __cdecl sub_769820(_DWORD *a1); signed int __cdecl sub_769870(_DWORD *a1); signed int __cdecl sub_7698D0(_DWORD *a1); signed int __cdecl sub_769920(_DWORD *a1); signed int __cdecl sub_769970(_DWORD *a1); signed int __cdecl sub_7699A0(_DWORD *a1); signed int __cdecl sub_769A10(_DWORD *a1); signed int __cdecl sub_769A80(_DWORD *a1); signed int __cdecl sub_769B30(_DWORD *a1); signed int __cdecl sub_769B70(_DWORD *a1); // signed int __usercall sub_769BB0@(int a1@, _DWORD *a2@, signed int *a3); signed int __cdecl sub_769C40(_DWORD *a1); signed int __cdecl sub_769C90(_DWORD *a1); signed int __cdecl sub_769D00(_DWORD *a1); signed int __cdecl sub_769D30(_DWORD *a1); signed int __cdecl sub_769D60(_DWORD *a1); signed int __cdecl sub_769E20(_DWORD *a1); signed int __cdecl sub_769EB0(_DWORD *a1); signed int __cdecl sub_769F50(_DWORD *a1); signed int __cdecl sub_769FF0(_DWORD *a1); int __cdecl sub_76A170(_DWORD *a1); signed int __cdecl sub_76A250(_DWORD *a1); int __cdecl sub_76A300(int, void *, size_t, int); // idb signed int __cdecl sub_76A320(_DWORD *a1); // int __usercall sub_76A3B0@(char *a1@, int a2@); // BOOL __usercall sub_76A420@(int a1@, int a2@); // BOOL __usercall sub_76A540@(int a1@, int a2@, unsigned int a3); // int __usercall sub_76A700@(char *a1@, _BYTE *a2@, int a3@); int __cdecl sub_76A770(int a1, unsigned __int8 *a2, unsigned __int8 *a3, int a4); // int __usercall sub_76A810@(unsigned __int8 *a1@, int a2, unsigned __int8 *a3, int a4); // int __usercall sub_76A8A0@(int a1@, int a2@, int a3, int a4); // int __usercall sub_76A8F0@(int a1@, int a2@, int a3); // int __usercall sub_76A950@(int a1@, int a2@, _BYTE *a3@); int __cdecl sub_76A9E0(int a1, unsigned __int8 *a2, char *a3); // char *__usercall sub_76AD10@(size_t a1@, void *a2, size_t a3, int a4); // int __usercall sub_76ADC0@(int a1@, void *a2@, int a3@, _DWORD *a4@); // int __usercall sub_76AE40@(_DWORD *a1@, void *a2, int a3); // signed int __usercall sub_76AF10@(unsigned int a1@, int a2); int __cdecl sub_76AF60(int a1); int sub_76B1C0(); int sub_76B1E0(); int __cdecl sub_76B200(_DWORD *a1); signed int __cdecl sub_76B320(_DWORD *a1); // char __usercall sub_76B370@(size_t a1@, int a2, void *a3, int a4); // char __usercall sub_76B470@(int a1@, int a2@, int a3@, size_t a4, int a5); signed int __cdecl sub_76B5A0(_DWORD *a1); // const void *__usercall sub_76B7B0@(signed int a1@, int a2@, _DWORD *a3); // _BYTE *__usercall sub_76B8F0@(_DWORD *a1@, _BYTE *a2@, _BYTE *a3); int __cdecl sub_76B9D0(const char *a1); signed int __cdecl sub_76BA20(_DWORD *a1); signed int __cdecl sub_76BE30(_DWORD *a1); signed int __cdecl sub_76BEB0(_DWORD *a1); signed int __cdecl sub_76BF00(_DWORD *a1); signed int __cdecl sub_76BF30(_DWORD *a1); signed int __cdecl sub_76BF70(_DWORD *a1); signed int __cdecl sub_76BFE0(_DWORD *a1); signed int __cdecl sub_76C010(int a1); // int __usercall sub_76C040@(_BYTE *a1@, char *a2@, _DWORD *a3); signed int __cdecl sub_76C0D0(_DWORD *a1); signed int __cdecl sub_76C380(_DWORD *a1); signed int __cdecl sub_76C5E0(_DWORD *a1); signed int __cdecl sub_76C640(_DWORD *a1); int __cdecl sub_76C690(_DWORD *a1); signed int __cdecl sub_76C700(_DWORD *a1); signed int __cdecl sub_76C730(_DWORD *a1); signed int __cdecl sub_76C7A0(_DWORD *a1); int __cdecl sub_76C7F0(_DWORD *a1); int __cdecl sub_76C860(_DWORD *a1); signed int __cdecl sub_76C8B0(_DWORD *a1); // FILE *__usercall sub_76C8F0@(const char *a1@, _DWORD *a2@, char *a3); signed int __cdecl sub_76C950(_DWORD *a1); signed int __cdecl sub_76CA20(_DWORD *a1); signed int __cdecl sub_76CA50(_DWORD *a1); signed int __cdecl sub_76CAD0(_DWORD *a1); // signed int __usercall sub_76CB30@(_DWORD *a1@, void *a2@, char *a3); signed int __cdecl sub_76CBC0(_DWORD *a1); signed int __cdecl sub_76CBE0(_DWORD *a1); // int __usercall sub_76CC00@(FILE *a1@, int a2@); // BOOL __usercall sub_76CC50@(_DWORD *a1@, FILE *a2@, int a3); // _DWORD *__usercall sub_76CD40@(FILE *a1@, int a2); // signed int __usercall sub_76CDE0@(FILE *a1@, int a2@, int a3); signed int __cdecl sub_76D040(_DWORD *a1); signed int __cdecl sub_76D090(_DWORD *a1); signed int __cdecl sub_76D0D0(_DWORD *a1); // int __usercall sub_76D1E0@(signed int a1@, _DWORD *a2@, FILE *a3); int __cdecl sub_76D2A0(_DWORD *a1); int __cdecl sub_76D300(_DWORD *a1); signed int __cdecl sub_76D350(_DWORD *a1); signed int __cdecl sub_76D430(_DWORD *a1); signed int __cdecl sub_76D4B0(_DWORD *a1); signed int __cdecl sub_76D510(_DWORD *a1); signed int __cdecl sub_76D560(_DWORD *a1); signed int __cdecl sub_76D5A0(_DWORD *a1); // int __usercall sub_76D6F0@(_DWORD *a1@, int a2); signed int __cdecl sub_76D770(_DWORD *a1); signed int __cdecl sub_76D7B0(_DWORD *a1); int __cdecl sub_76D870(_DWORD *a1); signed int __cdecl sub_76D920(_DWORD *a1); signed int __cdecl sub_76D9C0(_DWORD *a1); signed int __cdecl sub_76DB20(_DWORD *a1); int __cdecl sub_76DBA0(_DWORD *a1); void __cdecl sub_76DC50(_DWORD *a1, signed int a2, signed int a3); int __cdecl sub_76E060(_DWORD *a1); signed int __cdecl sub_76E0C0(_DWORD *a1); // signed int __usercall sub_76E0F0@(int a1@, _DWORD *a2@, _DWORD *a3@); int __cdecl sub_76E1C0(_DWORD *a1); signed int __cdecl sub_76E240(_DWORD *a1); signed int __cdecl sub_76E2A0(_DWORD *a1); signed int __cdecl sub_76E2E0(_DWORD *a1); int __cdecl sub_76E330(int a1); signed int __cdecl sub_76E360(_DWORD *a1); signed int __cdecl sub_76E410(int a1); signed int __cdecl sub_76E430(_DWORD *a1); // _DWORD *__usercall sub_76E460@(_DWORD *a1@); // int __usercall sub_76E500@(int a1@); // int __usercall sub_76E580@(_DWORD *a1@, void *a2, int a3); int __cdecl sub_76E5D0(_DWORD *a1); // int __usercall sub_76E620@(_DWORD *a1@, LPCSTR lpLibFileName, LPCSTR lpProcName); signed int __cdecl sub_76E6E0(_DWORD *a1); // const char *__usercall sub_76E750@(char *a1@, char *a2@, _DWORD *a3@, char *a4, int a5); signed int __cdecl sub_76E8B0(_DWORD *a1); signed int __cdecl sub_76E930(_DWORD *a1); // int __usercall sub_76EA00@(char *a1@, _DWORD *a2@, const CHAR *lpLibFileName); signed int __cdecl sub_76EA80(_DWORD *a1); char *__cdecl sub_76EB50(_DWORD *a1); signed int __cdecl sub_76EC60(_DWORD *a1); // int __usercall sub_76ECC0@(void *a1@, _DWORD *a2@); signed int __cdecl sub_76EDD0(_DWORD *a1); // int *__usercall sub_76EEA0@(int a1@, const char *a2@, int a3, char *a4, int a5); // int __usercall sub_76EF50@(_DWORD *a1@); signed int __cdecl sub_76EFA0(_DWORD *a1); int __cdecl sub_76F0E0(_DWORD *a1); signed int __cdecl sub_76F1D0(_DWORD *a1); void __cdecl __noreturn sub_76F340(_DWORD *a1); signed int __cdecl sub_76F3A0(_DWORD *a1); signed int __cdecl sub_76F3F0(_DWORD *a1); signed int __cdecl sub_76F470(_DWORD *a1); signed int __cdecl sub_76F4B0(_DWORD *a1); signed int __cdecl sub_76F500(_DWORD *a1); signed int __cdecl sub_76F540(_DWORD *a1); signed int __cdecl sub_76F580(_DWORD *a1); signed int __cdecl sub_76F640(_DWORD *a1); signed int __cdecl sub_76F670(_DWORD *a1); signed int __cdecl sub_76F6C0(_DWORD *a1); int __cdecl sub_76F730(_DWORD *a1); signed int __cdecl sub_76F780(_DWORD *a1); signed int __cdecl sub_76F7F0(_DWORD *a1); int __cdecl sub_76F890(_DWORD *a1, int a2, _DWORD *a3); signed int __cdecl sub_76F920(_DWORD *a1); int __cdecl sub_76FA10(int a1); int __cdecl sub_76FA30(_DWORD *a1); int __cdecl sub_76FA90(_DWORD *a1); int __cdecl sub_76FAE0(_DWORD *a1); int __cdecl sub_76FB60(_DWORD *a1); int __cdecl sub_76FBD0(_DWORD *a1); int __cdecl sub_76FC70(_DWORD *a1); signed int __cdecl sub_76FD30(_DWORD *a1); signed int __cdecl sub_76FD60(_DWORD *a1); void __cdecl __noreturn sub_76FDC0(int a1); int __cdecl sub_76FDE0(int a1, int a2, int a3, int a4); int __cdecl sub_76FE50(int a1, int a2, int *a3, unsigned int a4, int a5, int a6); char __cdecl sub_76FED0(char a1); int __cdecl sub_76FF40(int a1); int __cdecl sub_76FF80(int a1, signed int a2); void __cdecl __noreturn sub_76FFF0(int a1, int a2, signed int a3); void __cdecl __noreturn sub_770090(int a1, int a2); int __cdecl sub_7700B0(int, void *, size_t); // idb // signed int __usercall sub_770130@(signed int *a1@); int __cdecl sub_7701C0(int a1, int a2, int a3, int a4, int a5); // int __usercall sub_770240@(int *a1@, char *a2); // BOOL __usercall sub_7702B0@(int a1@, int a2); // BOOL __usercall sub_770330@(int *a1@, int a2); // int __usercall sub_770590@(signed int *a1@); // signed int __usercall sub_7706A0@(signed int *a1@, signed int *a2, int a3); void __cdecl __noreturn sub_770930(int a1, int a2, int a3, int a4); // int __usercall sub_7709E0@(int *a1@); // int __usercall sub_770A70@(int *a1@); // int __usercall sub_770B10@(signed int *a1@, int a2, int *a3); // int __usercall sub_770F90@(_DWORD *a1@, int *a2); int __cdecl sub_7715D0(_DWORD *a1); int __cdecl sub_771620(_DWORD *a1); // void __usercall __noreturn sub_771640(signed int a1@, int a2@); // void __usercall __noreturn sub_771670(int *a1@, int a2, int a3); // signed int __usercall sub_7716C0@(_DWORD *a1@, int a2); // int __usercall sub_7716E0@(_DWORD *a1@); // signed int __usercall sub_771710@(int a1@, int a2@, _DWORD *a3@); int __cdecl sub_771730(int a1, int a2); // __int16 __usercall sub_7717E0@(int a1@, _DWORD *a2@); // int __usercall sub_771860@(int a1@, int a2@); // int __usercall sub_7718A0@(int result@, signed int a2@); // signed int __usercall sub_771900@(_BYTE *a1@, int a2); // int __usercall sub_771940@(unsigned __int8 *a1@, int a2, int a3); // signed int __usercall sub_771A10@(int a1@, int a2@); signed int __cdecl sub_771A50(int a1, int a2, _DWORD *a3, int a4); // char __usercall sub_771B00@(_DWORD *a1@, _DWORD *a2@); // unsigned __int8 *__usercall sub_771BA0@(int a1@, int a2@, unsigned __int8 **a3@, int a4); // int __usercall sub_771C10@(int a1@, int a2@, int a3); // signed int __usercall sub_771CE0@(_DWORD *a1@, int a2); // int __usercall sub_771E40@(int a1@, int *a2@, int a3, int a4, int a5); void __cdecl sub_771EB0(_DWORD *a1, int a2); int __cdecl sub_771FD0(int a1, int a2); // void __usercall sub_772110(_DWORD *a1@); // void __usercall __noreturn sub_7721B0(_DWORD *a1@, int a2@); // int __usercall sub_7721F0@(int a1@); // int __usercall sub_772290@(int a1@); // int __usercall sub_772330@(_DWORD *a1@, int *a2@, int a3); int *__cdecl sub_7723F0(int a1); // signed int __usercall sub_7725D0@(int a1@, signed int a2); // char __usercall sub_772630@(int a1@, int a2@); // int __usercall sub_7726B0@(_DWORD *a1@, int a2@); // void __usercall sub_7727D0(int a1@, int *a2@); unsigned int __fastcall sub_772830(int a1, _DWORD *a2); // int __usercall sub_772A20@(_DWORD *a1@); // int *__usercall sub_772AD0@(int a1@, _DWORD *a2@, int a3, int a4); // signed int __usercall sub_772C30@(_DWORD *a1@, _DWORD *a2@); int __cdecl sub_772C70(_DWORD *a1, int a2); // char __usercall sub_772DF0@(_DWORD *a1@, _DWORD *a2@); // unsigned int __usercall sub_772E90@(_DWORD *a1@, _DWORD *a2@); // int *__usercall sub_773140@(_DWORD *a1@, double *a2@); // signed int __usercall sub_773310@(int a1@); int __cdecl sub_7734C0(int a1, _DWORD *a2, signed int a3); // int __usercall sub_7735F0@(int a1@); // int __usercall sub_773650@(int result@, int a2@, _DWORD *a3@); signed int __cdecl sub_7736D0(int a1, int a2, int a3); // signed int __usercall sub_773840@(_DWORD *a1@, int a2); // void __usercall sub_7738C0(_DWORD *a1@, int a2, int a3); void __cdecl sub_773A10(int a1); int __cdecl sub_773BA0(int a1); // int __usercall sub_773D10@(_DWORD *a1@, int a2, int a3, int a4, int a5); // int __usercall sub_773EA0@(int a1@, int a2@, int a3); int __fastcall sub_773FE0(int a1, int a2); // int __usercall sub_7741D0@(_DWORD *a1@, int a2); void __cdecl sub_7742E0(int *a1); // void __usercall sub_7744B0(int a1@, int a2@); int __thiscall sub_7745C0(_DWORD *this); int __thiscall sub_774670(_DWORD *this); signed int __fastcall sub_774790(_DWORD *a1, _DWORD *a2); // int __usercall sub_774850@(int a1@, _DWORD *a2@); // unsigned int *__usercall sub_7748B0@(_DWORD *a1@); int __thiscall sub_774940(_DWORD *this); signed int __cdecl sub_774A50(int a1); signed int __cdecl sub_774CF0(int a1); // int *__usercall sub_774D40@(int *a1@, _DWORD *a2@); int __cdecl sub_774DB0(int, int, int, int, void *, int); // idb // void __usercall __noreturn sub_774E60(int *a1@); // int __usercall sub_774E80@(int a1@); // unsigned int __usercall sub_774F00@(int *a1@, int a2); // int __usercall sub_774F90@(int *a1@, _DWORD *a2@); // signed int __usercall sub_775190@(int a1@, int *a2); // int __usercall sub_775290@(int a1@, _DWORD *a2@); int __cdecl sub_775530(int *a1, int a2); int __cdecl sub_775640(int a1); char __thiscall sub_775680(int *this); int __cdecl sub_775780(_DWORD *a1, int a2, int a3, const char *a4); int __cdecl sub_775850(int a1); // signed int __usercall sub_775860@(int a1@, signed int a2@); // int __usercall sub_7758C0@(int result@, int a2@); // int __usercall sub_775940@(int result@, int *a2, int a3, int a4, int a5); unsigned int *__cdecl sub_775A70(int a1, int a2, int a3); void __cdecl sub_775AD0(int *a1, int *a2, int a3); // int __usercall sub_775B50@(int *a1@, int a2); int __cdecl sub_775C00(int *a1, int a2, int a3, int a4, int a5); int __cdecl sub_775C30(int *a1, int a2, int a3, int a4); int __cdecl sub_775C60(int *a1, int a2, signed int a3); int __cdecl sub_775CC0(int a1, int a2); int __cdecl sub_775D00(int a1, int a2); // signed int __usercall sub_775D40@(signed int result@, int a2@); signed int __cdecl sub_775D60(int *a1, int *a2); signed int __cdecl sub_775ED0(int *a1, int a2); int __cdecl sub_775F00(int, double); // idb unsigned __int8 *__cdecl sub_775F90(int a1, int a2, int a3); _DWORD *__cdecl sub_776040(int a1, _DWORD *a2); _DWORD *__cdecl sub_7760A0(int a1, int a2); // int __usercall sub_776170@(int a1@, int a2@); // signed int __usercall sub_7761C0@(int a1@, int a2@, int a3@); int __cdecl sub_776230(_DWORD *a1, int a2); int __cdecl sub_776250(int a1, int a2, int a3, int a4); int __cdecl sub_776300(int *a1, int a2, int a3); int __cdecl sub_7763B0(int a1); int __cdecl sub_7763F0(int *a1, int a2, int a3); void __cdecl sub_776420(int *a1, int a2); // _DWORD *__usercall sub_776440@(int a1@, int a2@, int a3@); // _DWORD *__usercall sub_776560@(_DWORD *result@, _DWORD *a2@); // signed int __usercall sub_7765B0@(int a1@, int a2@, int a3); signed int __cdecl sub_7766E0(int a1, _DWORD *a2); signed int __cdecl sub_776750(int a1, _DWORD *a2); _DWORD *__cdecl sub_7767B0(int a1, _DWORD *a2); _DWORD *__cdecl sub_776810(int a1, _DWORD *a2); signed int __cdecl sub_776880(__int64 a1); signed int __cdecl sub_776990(int a1, int a2, _DWORD *a3); signed int __cdecl sub_776A60(int a1, _DWORD *a2, _DWORD *a3); // int __usercall sub_776B50@(_DWORD *a1@, int *a2@, int a3); void __cdecl sub_776C50(int *a1, _DWORD *a2); void __cdecl sub_776CF0(int *a1, _DWORD *a2); // int __usercall sub_776D60@(int a1@, _DWORD *a2@); char __cdecl sub_776E20(unsigned int a1, int a2, unsigned int a3); // signed int __usercall sub_776E60@(_DWORD *a1@, unsigned int a2@, int a3, int a4, int a5); // void __usercall sub_776F60(_DWORD *a1@, unsigned int a2@, int a3, int a4, _DWORD *a5); int __cdecl sub_777020(unsigned int a1, int a2, int a3, int a4); void __cdecl sub_7770D0(int *a1, int a2, _DWORD *a3); void __cdecl sub_777180(int *a1, int a2, _DWORD *a3, _DWORD *a4, int a5); void __cdecl sub_777330(int *a1, int a2, int a3); // int __cdecl cef_string_utf16_clear(_DWORD); weak // int __cdecl cef_string_utf8_to_utf16(_DWORD, _DWORD, _DWORD); weak void __thiscall __noreturn sub_777390(void *this); void *__thiscall sub_7773C0(void *this, char a2); void __noreturn sub_7773F0(); int __cdecl sub_777400(int); // weak int __cdecl sub_777460(int a1); int __cdecl sub_7774C0(int a1); int __cdecl sub_777520(int a1); _DWORD *__thiscall sub_777580(_DWORD *this, int a2); _DWORD *__thiscall sub_777600(_DWORD *this, char a2); _DWORD *__cdecl sub_777610(_DWORD *a1, int a2); _DWORD *__thiscall sub_7776A0(_DWORD *this, char a2); _DWORD *__thiscall sub_7776F0(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_777710(_DWORD *this, unsigned __int8 a2); int __thiscall sub_777730(_DWORD *this); int __thiscall sub_777750(_DWORD *this); _DWORD *__thiscall sub_777770(_DWORD *this, _DWORD *a2); double __thiscall sub_7777B0(_DWORD *this); _DWORD *__thiscall sub_7777E0(_DWORD *this, double a2); void __thiscall sub_777810(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7); _DWORD *__thiscall sub_7778D0(_DWORD *this, int a2); _DWORD *__thiscall sub_777910(_DWORD *this); int __thiscall sub_777930(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_7779C0(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6); _DWORD *__thiscall sub_777A10(_DWORD *this, unsigned __int8 a2); void __thiscall sub_777A30(_DWORD *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_777AD0(_DWORD *this); void __thiscall sub_777AF0(_DWORD *this, int a2, unsigned __int8 a3); _DWORD *__thiscall sub_777B60(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_777B80(_DWORD *this, int a2); _DWORD *__thiscall sub_777BC0(_DWORD *this, int a2); bool __thiscall sub_777C00(_DWORD *this); _DWORD *__thiscall sub_777C20(_DWORD *this); _DWORD *__thiscall sub_777C40(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_777C60(_DWORD *this); _DWORD *__thiscall sub_777C80(_DWORD *this, int a2); int __thiscall sub_777CA0(_DWORD *this, int a2); void __thiscall sub_777CE0(_DWORD *this, int a2, int a3, unsigned __int8 a4, int a5); int __thiscall sub_777D20(_DWORD *this, int a2, unsigned __int8 a3); int __thiscall sub_777D70(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_777DC0(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_777DF0(_DWORD *this); _DWORD *__thiscall sub_777E10(_DWORD *this); int __thiscall sub_777E30(_DWORD *this); _DWORD *__thiscall sub_777E50(_DWORD *this, int a2); _DWORD *__thiscall sub_777E80(_DWORD *this, int a2); _DWORD *__thiscall sub_777EB0(_DWORD *this, int a2); int __thiscall sub_777EE0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_777F20(_DWORD *this); int __thiscall sub_777F40(_DWORD *this, int a2); _DWORD *__thiscall sub_777F80(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_777FB0(_DWORD *this); int *__cdecl sub_777FD0(int *a1, int a2); int __cdecl sub_778150(int a1); int *__cdecl sub_7781B0(int *a1, int a2); int __cdecl sub_778250(int a1); bool __cdecl sub_778350(int a1, int a2, int a3, int a4, int a5); int *__thiscall sub_778460(_DWORD *this, int *a2); int *__thiscall sub_7784A0(_DWORD *this, int *a2); void __thiscall sub_7784E0(_DWORD *this, int a2, int a3, int a4); // int cef_shutdown(void); weak int __cdecl sub_778580(int a1); int __cdecl sub_7785E0(int a1); int __cdecl sub_778640(int a1); int __cdecl sub_7786A0(int a1); bool __thiscall sub_778700(_DWORD *this, int a2, int a3, unsigned __int8 a4); _DWORD *__thiscall sub_778780(_DWORD *this, int a2); void __thiscall sub_7787E0(int this, _DWORD *a2); int __cdecl sub_778870(int a1, int a2, int a3); bool __cdecl sub_778910(int a1, int a2, int a3, int a4); int __thiscall sub_778A00(int *this); int *__cdecl sub_778A50(int *a1, int a2); int *__cdecl sub_778AF0(int *a1, int a2); int __cdecl sub_778B90(int a1); LPCRITICAL_SECTION __thiscall sub_778C70(LPCRITICAL_SECTION lpCriticalSection); // int __thiscall unknown_libname_18(LPCRITICAL_SECTION lpCriticalSection); idb void __thiscall sub_778CA0(LPCRITICAL_SECTION lpCriticalSection); void __thiscall sub_778CB0(LPCRITICAL_SECTION lpCriticalSection); int __cdecl sub_778CC0(int a1); int __cdecl sub_778D20(int a1); int __cdecl sub_778D80(int a1); int __cdecl sub_778DE0(int a1); int __cdecl sub_778E40(int a1); int __cdecl sub_778EA0(int a1); int __cdecl sub_778F00(int a1); int __cdecl sub_778F60(int a1); int __cdecl sub_778FC0(int a1); int __cdecl sub_779020(int a1); int __cdecl sub_779080(int a1); int __cdecl sub_7790E0(int a1); int __cdecl sub_779140(int a1); int __cdecl sub_7791A0(int a1); int __stdcall sub_779200(int a1); int __stdcall sub_7792A0(int a1); int __stdcall sub_779340(int a1); int __stdcall sub_7793E0(int a1); int __stdcall sub_779480(int a1); int __stdcall sub_779520(int a1); int __stdcall sub_7795C0(int a1); int __stdcall sub_779660(int a1); int __stdcall sub_779700(int a1); int __stdcall sub_7797A0(int a1); int __stdcall sub_779840(int a1); int __stdcall sub_7798E0(int a1); int __stdcall sub_779980(int a1); int __stdcall sub_779A20(int a1); int *__cdecl sub_779B00(int *a1, int a2); int __thiscall sub_779C20(void *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_779CC0(_DWORD *this); int *__cdecl sub_779D80(int *a1, int a2); int __stdcall sub_779E20(int a1, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_779EB0(_DWORD *this); int __stdcall sub_779F00(int a1, void *a2, int a3); _DWORD *__thiscall sub_779FB0(_DWORD *this); int __thiscall sub_77A000(void **this); int __stdcall sub_77A040(int a1, int a2, int a3); _DWORD *__thiscall sub_77A0F0(_DWORD *this); _DWORD *__thiscall sub_77A140(_DWORD *this, char a2); _DWORD *__thiscall sub_77A150(_DWORD *this, int a2); _DWORD *__thiscall sub_77A1D0(_DWORD *this, char a2); _DWORD *__thiscall sub_77A1E0(_DWORD *this, char a2); int __thiscall sub_77A230(const void **this, unsigned int a2); _DWORD *__thiscall sub_77A2E0(_DWORD *this, char a2); unsigned int __thiscall sub_77A330(int this, int a2); _DWORD *__thiscall sub_77A390(int *this, _DWORD *a2); int __cdecl sub_77A410(int a1); _DWORD *__thiscall sub_77A480(_DWORD *this); _DWORD *__thiscall sub_77A4A0(_DWORD *this); int __thiscall sub_77A4C0(_DWORD *this); bool __thiscall sub_77A4E0(_DWORD *this, int a2); bool __thiscall sub_77A580(_DWORD *this); bool __thiscall sub_77A5A0(_DWORD *this); // void __userpurge sub_77A5C0(int a1@, int a2@, int a3@, unsigned int a4); // void __userpurge sub_77A6E0(int a1@, int a2@, int a3@, int *a4); int *__cdecl sub_77A750(int *a1, int a2); int *__cdecl sub_77A7F0(int *a1, int a2); int __cdecl sub_77A900(int a1); int *__thiscall sub_77A970(_DWORD *this, int *a2); int *__thiscall sub_77A9B0(_DWORD *this, int *a2); int *__thiscall sub_77A9F0(_DWORD *this, int *a2); int *__thiscall sub_77AA30(_DWORD *this, int *a2, int a3, int a4); int *__thiscall sub_77AA70(_DWORD *this, int *a2, int a3); bool __thiscall sub_77AAB0(_DWORD *this, int a2, int a3); int __cdecl sub_77AB50(int a1); _DWORD *__thiscall sub_77ABB0(_DWORD *this, char a2); _DWORD *__thiscall sub_77ABC0(_DWORD *this, int a2); _DWORD *__thiscall sub_77AC40(_DWORD *this, char a2); _DWORD *__cdecl sub_77AC50(_DWORD *a1, int a2); _DWORD *__thiscall sub_77ACE0(_DWORD *this, char a2); _DWORD *__thiscall sub_77AD30(_DWORD *this, char a2); bool __thiscall sub_77AD80(_DWORD *this, int a2); bool __thiscall sub_77AE20(_DWORD *this, int a2); _DWORD *__thiscall sub_77AEC0(_DWORD *this, _DWORD *a2); bool __thiscall sub_77AF00(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_77AFC0(_DWORD *this, unsigned __int8 a2); bool __thiscall sub_77AFE0(_DWORD *this, int a2); int __thiscall sub_77B030(_DWORD *this, int a2); int __thiscall sub_77B0B0(_DWORD *this, int a2); int __thiscall sub_77B130(_DWORD *this, int a2, int a3); // signed int __userpurge sub_77B1E0@(int a1@, int a2@, int a3@, int a4, int *a5); int *__cdecl sub_77B280(int *a1, int a2); int *__cdecl sub_77B390(int *a1, int a2); int *__thiscall sub_77B4C0(_DWORD *this, int *a2, int a3); // int *__userpurge sub_77B560@(int a1@, int a2@, int *a3, int a4); int *__thiscall sub_77B5C0(_DWORD *this, int *a2, unsigned __int8 a3); bool __thiscall sub_77B600(_DWORD *this, int a2, int a3, int a4); int __cdecl sub_77B6F0(_DWORD *a1, int a2); int __thiscall sub_77B740(_DWORD *this, int a2); void __thiscall sub_77B7A0(int this); _DWORD *__thiscall sub_77B800(_DWORD *this, int a2, int a3); _DWORD *__cdecl sub_77B890(_DWORD *a1, int a2); _DWORD *__cdecl sub_77B910(_DWORD *a1, int a2); int __cdecl sub_77B990(int **a1, int **a2, int a3); unsigned int __thiscall sub_77BA30(int ***this, unsigned int a2); unsigned int __thiscall sub_77BB30(int this, int a2); void __thiscall sub_77BBB0(unsigned int *this, unsigned int a2); int __thiscall sub_77BCB0(_DWORD *this, int a2, char a3, int a4, void *a5); int __thiscall sub_77BEE0(_DWORD *this, int a2, void *a3, int a4); void __cdecl sub_77C000(int a1, unsigned int *a2); int __thiscall sub_77C0A0(_DWORD *this, int a2, void *a3, int a4); void __cdecl sub_77C250(int a1, _DWORD *a2); void __cdecl sub_77C490(int a1, _DWORD *a2); _DWORD *__thiscall sub_77C6D0(_DWORD *this); int __thiscall sub_77C750(_DWORD *this, int a2); int __thiscall sub_77C7D0(_DWORD *this, int a2); // bool __userpurge sub_77C850@(int a1@, int a2@, int a3@, int *a4); _DWORD *__thiscall sub_77C8D0(_DWORD *this, int a2); _DWORD *__thiscall sub_77C8F0(_DWORD *this, int a2); _DWORD *__thiscall sub_77C910(_DWORD *this, int a2); _DWORD *__thiscall sub_77C930(_DWORD *this, int a2); _DWORD *__thiscall sub_77C950(_DWORD *this, int a2); _DWORD *__thiscall sub_77C970(_DWORD *this, int a2); _DWORD *__thiscall sub_77C990(_DWORD *this); _DWORD *__thiscall sub_77C9B0(_DWORD *this, int a2, int a3); int *__cdecl sub_77C9F0(int *a1, int a2); int __cdecl sub_77CA90(int a1); int *__thiscall sub_77CAF0(_DWORD *this, int *a2); int __thiscall sub_77CB30(_DWORD *this, int a2); int __cdecl sub_77CBC0(int a1); int __cdecl sub_77CC20(int a1); int __cdecl sub_77CC80(int a1); int __stdcall sub_77CCE0(int a1); int __stdcall sub_77CD80(int a1); int __stdcall sub_77CE20(int a1); int *__cdecl sub_77CEC0(int *a1, int a2); int *__cdecl sub_77CFD0(int *a1, int a2); int __thiscall sub_77D080(void *this, int a2, void *a3, int a4); int __thiscall sub_77D140(void *this, int a2, int a3); _DWORD *__thiscall sub_77D1B0(_DWORD *this); _DWORD *__thiscall sub_77D210(_DWORD *this); int __cdecl sub_77D260(int a1); void *__thiscall sub_77D2C0(void *this, char a2); int *__cdecl sub_77D2F0(int *a1, int a2); int __thiscall sub_77D390(void *this, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_77D490(_DWORD *this); _DWORD *__thiscall sub_77D4E0(_DWORD *this); _DWORD *__thiscall sub_77D530(_DWORD *this, char a2); int *__thiscall sub_77D540(int *this, int *a2); _DWORD *__thiscall sub_77D590(_DWORD *this, char a2); int *__cdecl sub_77D5E0(int *a1, int a2); int __cdecl sub_77D680(int a1); _DWORD *__thiscall sub_77D760(_DWORD *this, int a2); int __cdecl sub_77D7E0(int a1); bool __thiscall sub_77D850(_DWORD *this); bool __thiscall sub_77D870(_DWORD *this, int a2); bool __thiscall sub_77D910(_DWORD *this, int a2); int __thiscall sub_77D9B0(_DWORD *this, int a2, int a3, int a4); int *__thiscall sub_77D9F0(_DWORD *this, int *a2); void __fastcall sub_77DA30(unsigned int a1, int a2, int a3); _DWORD *__thiscall sub_77DA40(_DWORD *this, int a2); _DWORD *__thiscall sub_77DAC0(_DWORD *this, char a2); bool __thiscall sub_77DB70(_DWORD *this, int a2); bool __thiscall sub_77DC10(_DWORD *this, int a2); double __thiscall sub_77DCB0(_DWORD *this); bool __thiscall sub_77DCE0(_DWORD *this, unsigned __int8 a2); bool __thiscall sub_77DD10(_DWORD *this, int a2); bool __thiscall sub_77DD40(_DWORD *this, double a2); bool __thiscall sub_77DD70(_DWORD *this, int a2); int __cdecl sub_77DDA0(int a1); int *__cdecl sub_77DE00(int *a1, int a2); int __cdecl sub_77DEA0(int a1); int *__thiscall sub_77DF80(_DWORD *this, int *a2); int *__thiscall sub_77DFC0(_DWORD *this, int *a2); int *__thiscall sub_77E000(_DWORD *this, int *a2); int *__thiscall sub_77E040(_DWORD *this, int *a2); bool __thiscall sub_77E080(_DWORD *this, int a2); bool __thiscall sub_77E120(_DWORD *this, int a2); bool __thiscall sub_77E1C0(_DWORD *this, int a2); _DWORD *__thiscall sub_77E260(_DWORD *this, int a2); _DWORD *__thiscall sub_77E2E0(_DWORD *this, char a2); _DWORD *__thiscall sub_77E340(_DWORD *this); // void __userpurge sub_77E360(int a1@, int a2@, int a3@, int *a4); int __thiscall sub_77E3D0(_DWORD *this, int a2); _DWORD *__thiscall sub_77E450(_DWORD *this, int a2); bool __thiscall sub_77E490(_DWORD *this, int a2); int __thiscall sub_77E4E0(_DWORD *this, int a2, int a3); // void __userpurge sub_77E560(int a1@, int a2@, int a3@, _DWORD *a4); _DWORD *__thiscall sub_77E5E0(_DWORD *this, int a2); void __thiscall sub_77E620(_DWORD *this, int a2, int a3); bool __thiscall sub_77E670(_DWORD *this); // void __userpurge sub_77E690(int a1@, int a2@, int a3@, int *a4); _DWORD *__thiscall sub_77E700(_DWORD *this, int a2); _DWORD *__thiscall sub_77E740(_DWORD *this, int a2); int *__thiscall sub_77E780(_DWORD *this, int *a2); int *__cdecl sub_77E830(int *a1, int a2); int *__cdecl sub_77E8D0(int *a1, int a2); int *__cdecl sub_77E9E0(int *a1, int a2); int __stdcall sub_77EA90(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_77EB20(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_77EBE0(int a1, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_77EC90(void *this, int a2, int a3, int a4); _DWORD *__thiscall sub_77ED10(_DWORD *this); int *__cdecl sub_77ED90(int *a1, int a2); int __stdcall sub_77EE30(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); _DWORD *__thiscall sub_77EF40(_DWORD *this); int __stdcall sub_77F000(int a1, int a2, int a3, int a4); int __stdcall sub_77F0A0(int a1, int a2, void *a3); int __stdcall sub_77F160(int a1, int a2, int a3); int __thiscall sub_77F1F0(void *this, int a2, int a3, int a4); int __stdcall sub_77F270(int a1, int a2, void *a3); int __stdcall sub_77F330(int a1, int a2, void *a3); int __stdcall sub_77F3F0(int a1, int a2, void *a3, void *a4, int a5); _DWORD *__thiscall sub_77F500(_DWORD *this); _DWORD *__thiscall sub_77F590(_DWORD *this, char a2); _DWORD *__thiscall sub_77F5A0(_DWORD *this, char a2); int *__cdecl sub_77F600(int *a1, int a2); int *__cdecl sub_77F710(int *a1, int a2); int *__cdecl sub_77F820(int *a1, int a2); int __stdcall sub_77F8E0(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_77F980(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_77FA10(_DWORD *this); void *__stdcall sub_77FA60(unsigned int a1); void *__thiscall sub_77FAB0(void *this, char a2); _DWORD *__thiscall sub_77FAE0(_DWORD *this, int a2); _DWORD *__cdecl sub_77FB40(int a1, int a2, _DWORD *a3); unsigned int __thiscall sub_77FBB0(int *this, unsigned int a2); unsigned int __thiscall sub_77FC90(int *this, int a2); void __thiscall sub_77FD10(int *this, unsigned int a2); int __stdcall sub_77FDA0(int a1, int a2, int a3, int a4); void __stdcall sub_77FE30(int a1, int a2, unsigned int a3, int *a4); _DWORD *__thiscall sub_77FF60(_DWORD *this); int __stdcall sub_77FFB0(int a1); int __stdcall sub_77FFE0(int a1, int a2, int a3, int a4, int *a5, int a6, int a7); _DWORD *__thiscall sub_7800C0(_DWORD *this); int __thiscall sub_780150(void *this, int a2, int a3, int a4); int __stdcall sub_7801D0(int a1, int a2, int a3); _DWORD *__thiscall sub_780250(_DWORD *this); int *__cdecl sub_7802B0(int *a1, int a2); int __stdcall sub_780350(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_780400(int a1, int a2, int a3); _DWORD *__thiscall sub_780470(_DWORD *this); int *__cdecl sub_7804C0(int *a1, int a2); int __stdcall sub_780560(char *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, _DWORD *a9); int __thiscall sub_7806A0(void *this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_780760(void *this, int a2, int a3); int __thiscall sub_7807D0(void *this, int a2, int a3); _DWORD *__thiscall sub_780840(_DWORD *this); int __thiscall sub_7808B0(char *this, int a2, int a3); int __stdcall sub_780900(int a1, int a2, int a3, int a4, _DWORD *a5); int __stdcall sub_780A00(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_780AE0(_DWORD *this); int __cdecl sub_780B30(_DWORD *a1, _DWORD *a2); int __thiscall sub_780BD0(_DWORD *this, _DWORD *a2, int a3); int __thiscall sub_780C00(_DWORD *this, const void *a2); void *__thiscall sub_780C30(_DWORD *this, char *a2); _DWORD *__thiscall sub_780C80(_DWORD *this); int __thiscall sub_780CC0(_DWORD *this); int __thiscall sub_780CE0(_DWORD *this, const void *a2); void *__thiscall sub_780D50(_DWORD *this, char *a2); void *__thiscall sub_780DE0(void *this, char a2); int __stdcall sub_780E90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8, void *a9, int *a10, char *a11, _DWORD *a12); int __thiscall sub_781090(void *this, int a2, int a3); int __thiscall sub_781100(void *this, int a2, int a3); int __thiscall sub_781180(void *this, int a2, int a3); int __thiscall sub_781200(void *this, int a2, int a3); _DWORD *__thiscall sub_781270(_DWORD *this); int __thiscall sub_7812D0(_DWORD *this); int __stdcall sub_7812F0(int a1, int a2, int a3, int a4, int a5); int __thiscall sub_781380(void *this, int a2, int a3, int a4); int __stdcall sub_781400(int a1, int a2, int a3, int a4); int __stdcall sub_781480(int a1, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_781550(_DWORD *this); int __thiscall sub_7815B0(char *this, int a2, int a3); void *__thiscall sub_7815F0(char *this, void *a2); _DWORD *__cdecl sub_781640(int a1, int a2, _DWORD *a3); int __thiscall sub_7816B0(void **this); unsigned int __thiscall sub_7816F0(int *this, unsigned int a2); unsigned int __thiscall sub_7817F0(int *this, int a2); _DWORD *__thiscall sub_7818B0(int *this, unsigned int a2); int __stdcall sub_781980(int a1, int a2, int *a3); int __stdcall sub_781A70(int a1, int a2, int *a3); int __stdcall sub_781B60(int a1, int a2, int a3, int a4, int *a5, _DWORD *a6); int __stdcall sub_781C10(int a1, int a2, void *a3); int __thiscall sub_781CF0(void *this, int a2, int a3, int a4); int __stdcall sub_781D70(int a1, int a2, int *a3); int __stdcall sub_781E30(int a1, int a2, int a3, unsigned int a4, int *a5, int a6, int a7, int a8); int __stdcall sub_781F50(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_782000(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_7820A0(int a1, int a2, int a3); int __stdcall sub_782110(int, int, double, double); // idb _DWORD *__thiscall sub_782190(_DWORD *this); int *__thiscall sub_782230(int *this, int *a2); int __cdecl sub_782260(int a1); _DWORD *__thiscall sub_7822C0(_DWORD *this, char a2); int *__cdecl sub_782350(int *a1, int a2); int *__cdecl sub_7823F0(int *a1, int a2); int *__cdecl sub_782490(int *a1, int a2); int *__cdecl sub_7825A0(int *a1, int a2); int __stdcall sub_7826D0(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_782780(int a1, int a2, int a3, int a4, int a5, int a6); signed int __stdcall sub_782840(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_7828F0(int a1, int a2, int a3, int a4); void __stdcall sub_7829E0(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_782A80(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_782B20(int a1, int a2, int a3, int a4, int a5); int __stdcall sub_782BE0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __stdcall sub_782C80(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); int __stdcall sub_782D70(int a1, int a2, int a3, int a4, int a5, int a6); BOOL __stdcall sub_782E30(char *a1, int a2, int a3, BOOL *a4); int __stdcall sub_782EE0(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_782F90(int a1, int a2, int a3); int __thiscall sub_783020(void *this, int a2, int a3); int __stdcall sub_783090(int a1, int a2, int a3); _DWORD *__thiscall sub_783100(_DWORD *this); _DWORD *__thiscall sub_7831E0(_DWORD *this, int a2); _DWORD *__thiscall sub_783260(_DWORD *this, char a2); int *__thiscall sub_7832C0(_DWORD *this, int *a2); int *__thiscall sub_783300(_DWORD *this, int *a2); _DWORD *__thiscall sub_783340(_DWORD *this, int a2); int __thiscall sub_7833C0(_DWORD *this, int a2); int __thiscall sub_783440(_DWORD *this); bool __thiscall sub_783460(_DWORD *this); _DWORD *__thiscall sub_783480(_DWORD *this, _DWORD *a2); int __cdecl sub_783520(int a1); int __cdecl sub_783580(int a1); _DWORD *__thiscall sub_7835E0(_DWORD *this, int a2); _DWORD *__thiscall sub_783660(_DWORD *this); _DWORD *__thiscall sub_783680(_DWORD *this); _DWORD *__thiscall sub_7836A0(_DWORD *this); void __thiscall sub_7836C0(_DWORD *this, int a2); void __thiscall sub_783730(_DWORD *this, int a2); _DWORD *__thiscall sub_7837A0(_DWORD *this, int a2); void __thiscall sub_7837E0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_783830(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_783880(_DWORD *this, int a2); int __thiscall sub_783900(_DWORD *this); int __thiscall sub_783920(_DWORD *this, int a2); void __thiscall sub_7839A0(_DWORD *this, int a2); int __cdecl sub_783A10(int a1); int *__cdecl sub_783A70(int *a1, int a2); void __thiscall sub_783B10(_DWORD *this, int a2); int *__thiscall sub_783B80(_DWORD *this, int *a2); int *__thiscall sub_783BC0(_DWORD *this, int *a2); int *__thiscall sub_783C00(_DWORD *this, int *a2); int __stdcall sub_783C40(int a1, int a2, int a3); _DWORD *__thiscall sub_783CC0(_DWORD *this); int __cdecl sub_783D10(int a1); int __cdecl sub_783D70(int a1); int __cdecl sub_783DD0(int a1); _DWORD *__thiscall sub_783E30(_DWORD *this, int a2); _DWORD *__thiscall sub_783EB0(_DWORD *this, char a2); int __thiscall sub_783F10(_DWORD *this, _DWORD *a2, int a3); bool __thiscall sub_783FD0(_DWORD *this, int a2); bool __thiscall sub_784070(_DWORD *this, int a2, unsigned __int8 a3, int a4); bool __thiscall sub_784130(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_7841F0(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_784290(_DWORD *this, int a2, unsigned __int8 a3, int a4); bool __thiscall sub_784330(_DWORD *this, int a2); _DWORD *__thiscall sub_7843C0(_DWORD *this, int a2); bool __thiscall sub_784440(_DWORD *this); bool __thiscall sub_784460(_DWORD *this, int a2); bool __thiscall sub_784500(_DWORD *this, int a2); bool __thiscall sub_7845A0(_DWORD *this, int a2); // bool __userpurge sub_7845F0@(int a1@, int a2@, int a3@, int *a4); bool __thiscall sub_784670(_DWORD *this, int a2); int __thiscall sub_7846C0(_DWORD *this, int a2); bool __thiscall sub_784700(_DWORD *this, int a2); int __thiscall sub_784750(_DWORD *this, int a2); double __thiscall sub_784790(_DWORD *this, int a2); int __thiscall sub_7847D0(_DWORD *this, int a2, int a3); bool __thiscall sub_784850(_DWORD *this, int a2); bool __thiscall sub_7848A0(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_7848F0(_DWORD *this, int a2, int a3); bool __thiscall sub_784940(_DWORD *this, int a2, double a3); bool __thiscall sub_784990(_DWORD *this, int a2, int a3); bool __thiscall sub_7849E0(_DWORD *this, int a2, int a3); int *__thiscall sub_784A90(_DWORD *this, int *a2, unsigned __int8 a3); // int *__userpurge sub_784AD0@(int a1@, int a2@, int *a3, int a4); // int *__userpurge sub_784B30@(int a1@, int a2@, int *a3, int a4); // int *__userpurge sub_784B90@(int a1@, int a2@, int *a3, int a4); // int *__userpurge sub_784BF0@(int a1@, int a2@, int *a3, int a4); bool __thiscall sub_784C50(_DWORD *this, int a2, int a3); bool __thiscall sub_784D00(_DWORD *this, int a2, int a3); bool __thiscall sub_784DB0(_DWORD *this, int a2, int a3); int __cdecl sub_784E70(int a1); int __stdcall sub_784ED0(int a1); int __stdcall sub_784F20(int a1); int __thiscall sub_784FC0(void *this, int a2, int a3); int __thiscall sub_785030(void *this, int a2, int a3); _DWORD *__thiscall sub_7850A0(_DWORD *this); _DWORD *__thiscall sub_785100(_DWORD *this, char a2); _DWORD *__thiscall sub_785110(_DWORD *this, char a2); int __stdcall sub_785160(int a1); int __stdcall sub_7851B0(int a1); int *__cdecl sub_785280(int *a1, int a2); int *__cdecl sub_785390(int *a1, int a2); int *__cdecl sub_7854A0(int *a1, int a2); int __thiscall sub_7855E0(void *this, int a2, int a3); int __stdcall sub_785650(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_785700(int a1, int a2, int a3, int a4); int __stdcall sub_785790(int a1, int a2, int a3, int a4); int __stdcall sub_785820(int a1, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_7858D0(void *this, int a2, int a3, int a4, int a5); int __thiscall sub_785960(void *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_785A00(_DWORD *this); // int __userpurge sub_785AA0@(int a1@, int a2, int a3, void *a4); int __stdcall sub_785B50(int a1, int a2, int *a3, _DWORD *a4); int __stdcall sub_785BF0(int a1, int a2, int a3, int *a4, _DWORD *a5); _DWORD *__thiscall sub_785CC0(_DWORD *this); _DWORD *__thiscall sub_785D20(_DWORD *this, int a2); _DWORD *__thiscall sub_785DA0(_DWORD *this, char a2); _DWORD *__thiscall sub_785DB0(_DWORD *this, char a2); bool __thiscall sub_785E00(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5); _DWORD *__cdecl sub_785E60(_DWORD *a1, _DWORD *a2, unsigned __int8 a3); void __fastcall sub_785F00(unsigned int a1, int a2, int a3); int __thiscall sub_785F10(_DWORD *this); char *__thiscall sub_785F50(void *this, char a2); int __stdcall sub_785FA0(int a1, _DWORD *a2); int __stdcall sub_7860B0(int a1, _DWORD *a2); int __stdcall sub_7861C0(int a1); int *__cdecl sub_786250(int *a1, int a2); int __thiscall sub_786370(void *this, int a2, int a3, int a4); void __stdcall sub_786400(int a1, int a2, int *a3, int a4); int __stdcall sub_7864B0(int a1, int a2, int a3, int *a4, int a5); _DWORD *__thiscall sub_786550(_DWORD *this); _DWORD *__thiscall sub_7865C0(_DWORD *this, int a2); void __stdcall sub_786640(void *a1); _DWORD *__thiscall sub_7866E0(_DWORD *this, int a2); _DWORD *__thiscall sub_786720(_DWORD *this, int a2, int a3); int __thiscall sub_786760(_DWORD *this, int a2); int __thiscall sub_7867E0(_DWORD *this); // void __userpurge sub_786800(int a1@, int a2@, int a3@, _DWORD *a4); // void __userpurge sub_786880(int a1@, int a2@, _DWORD *a3); int __thiscall sub_7868E0(_DWORD *this); _DWORD *__thiscall sub_786900(_DWORD *this, int a2); int __thiscall sub_786920(_DWORD *this, int a2); _DWORD *__thiscall sub_7869A0(_DWORD *this, int a2); int __thiscall sub_7869E0(_DWORD *this); int __thiscall sub_786A00(_DWORD *this); int __thiscall sub_786A20(_DWORD *this); int *__cdecl sub_786A40(int *a1, int a2); int __cdecl sub_786AE0(int a1); int *__thiscall sub_786B40(_DWORD *this, int *a2); void __thiscall sub_786B80(_DWORD *this, int a2); int __thiscall sub_786BF0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5); int __cdecl sub_786CF0(int a1); _DWORD *__thiscall sub_786D40(_DWORD *this, int a2); _DWORD *__cdecl sub_786DC0(_DWORD *a1, int a2); _DWORD *__cdecl sub_786E30(_DWORD *a1, int a2); bool __thiscall sub_786EC0(_DWORD *this); bool __thiscall sub_786EE0(_DWORD *this); bool __thiscall sub_786F00(_DWORD *this); bool __thiscall sub_786F20(_DWORD *this, int a2); bool __thiscall sub_786FC0(_DWORD *this); int __thiscall sub_786FE0(_DWORD *this); int __thiscall sub_787000(_DWORD *this); double __thiscall sub_787020(_DWORD *this); _DWORD *__thiscall sub_787050(_DWORD *this, _DWORD *a2); bool __thiscall sub_7870F0(_DWORD *this); bool __thiscall sub_787110(_DWORD *this); bool __thiscall sub_787130(_DWORD *this); bool __thiscall sub_787150(_DWORD *this, unsigned __int8 a2); bool __thiscall sub_787180(_DWORD *this, int a2); bool __thiscall sub_7871B0(_DWORD *this, int a2); bool __thiscall sub_7871E0(_DWORD *this, int a2); bool __thiscall sub_787210(_DWORD *this, int a2); bool __thiscall sub_787250(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_787300(_DWORD *this, int a2, int a3); bool __thiscall sub_7873B0(_DWORD *this, int a2, int a3, int a4); // bool __userpurge sub_7873F0@(int a1@, int a2@, int a3@, int *a4); bool __thiscall sub_787470(_DWORD *this, int a2); _DWORD *__thiscall sub_7874F0(_DWORD *this, _DWORD *a2); int __thiscall sub_787530(_DWORD *this); int __thiscall sub_787550(_DWORD *this, int a2); int __thiscall sub_787580(_DWORD *this); int __thiscall sub_7875A0(_DWORD *this, int a2); _DWORD *__thiscall sub_787630(_DWORD *this, _DWORD *a2); int __cdecl sub_787670(int a1); int *__thiscall sub_7876D0(_DWORD *this, int *a2); int *__thiscall sub_787710(_DWORD *this, int *a2, int a3); int *__thiscall sub_787760(_DWORD *this, int *a2, int a3); int *__thiscall sub_7877B0(_DWORD *this, int *a2, int a3, _DWORD *a4); int *__thiscall sub_7878E0(_DWORD *this, int *a2, int a3, int a4, _DWORD *a5); _DWORD *__thiscall sub_787A80(_DWORD *this, int a2); int sub_787B00(); bool __thiscall sub_787B20(_DWORD *this, int a2); bool __thiscall sub_787BC0(_DWORD *this, int a2); bool __thiscall sub_787C60(_DWORD *this, int a2); bool __thiscall sub_787C90(_DWORD *this); bool __thiscall sub_787CB0(_DWORD *this, int a2); int __thiscall sub_787CE0(_DWORD *this, int a2); bool __thiscall sub_787D10(_DWORD *this, int a2); int __thiscall sub_787D40(_DWORD *this, int a2); double __thiscall sub_787D70(_DWORD *this, int a2); int __thiscall sub_787DA0(_DWORD *this, int a2, int a3); bool __thiscall sub_787E10(_DWORD *this, int a2); bool __thiscall sub_787E40(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_787E80(_DWORD *this, int a2, int a3); bool __thiscall sub_787EC0(_DWORD *this, int a2, double a3); bool __thiscall sub_787F00(_DWORD *this, int a2, int a3); bool __thiscall sub_787F40(_DWORD *this, int a2, int a3); int *__thiscall sub_787FF0(_DWORD *this, int *a2); int *__thiscall sub_788030(_DWORD *this, int *a2, int a3); int *__thiscall sub_788070(_DWORD *this, int *a2, int a3); int *__thiscall sub_7880B0(_DWORD *this, int *a2, int a3); int *__thiscall sub_7880F0(_DWORD *this, int *a2, int a3); bool __thiscall sub_788130(_DWORD *this, int a2, int a3); bool __thiscall sub_7881E0(_DWORD *this, int a2, int a3); bool __thiscall sub_788290(_DWORD *this, int a2, int a3); int __thiscall sub_788340(_DWORD *this, char a2); _DWORD *__thiscall sub_788370(_DWORD *this, int a2); int __thiscall sub_7883F0(_DWORD *this); int __thiscall sub_788410(_DWORD *this); int __thiscall sub_788430(_DWORD *this, int a2); // bool __userpurge sub_7884B0@(int a1@, int a2@, int a3@, int *a4); bool __thiscall sub_788530(_DWORD *this); int __thiscall sub_788550(_DWORD *this); bool __thiscall sub_788570(_DWORD *this); _DWORD *__thiscall sub_788590(_DWORD *this, int a2); _DWORD *__thiscall sub_788610(_DWORD *this, char a2); bool __thiscall sub_788670(_DWORD *this, int a2, int a3); bool __thiscall sub_7886C0(_DWORD *this, int a2, int a3); bool __thiscall sub_788710(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_788760(_DWORD *this, int a2); bool __thiscall sub_788790(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_7887E0(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_788830(_DWORD *this, int a2, int a3, int a4, int a5); bool __thiscall sub_788880(_DWORD *this, int a2); bool __thiscall sub_7888B0(_DWORD *this, int a2); int __thiscall sub_7888E0(_DWORD *this, int a2); int __thiscall sub_788910(_DWORD *this, int a2); bool __thiscall sub_788940(_DWORD *this, int a2, int a3); int __thiscall sub_788970(_DWORD *this, int a2, int a3); int __thiscall sub_788A00(_DWORD *this, int a2, int a3); bool __thiscall sub_788A90(_DWORD *this, int a2, int a3); bool __thiscall sub_788AE0(_DWORD *this, int a2, int a3); int __thiscall sub_788B30(_DWORD *this, int a2); int __thiscall sub_788B60(_DWORD *this, int a2); int __thiscall sub_788B90(_DWORD *this, int a2); int __thiscall sub_788BC0(_DWORD *this, int a2); bool __thiscall sub_788BF0(_DWORD *this, int a2, int a3); bool __thiscall sub_788C20(_DWORD *this, int a2, int a3); bool __thiscall sub_788C50(_DWORD *this, int a2); bool __thiscall sub_788C80(_DWORD *this, int a2); bool __thiscall sub_788CB0(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788CF0(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788D30(_DWORD *this, int a2); bool __thiscall sub_788D60(_DWORD *this, int a2); bool __thiscall sub_788D90(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788DD0(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788E10(_DWORD *this, int a2); bool __thiscall sub_788E40(_DWORD *this, int a2); bool __thiscall sub_788E70(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788EB0(_DWORD *this, int a2, unsigned __int8 a3); bool __thiscall sub_788EF0(_DWORD *this, int a2); bool __thiscall sub_788F20(_DWORD *this, int a2); bool __thiscall sub_788F50(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6); bool __thiscall sub_788FA0(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6); bool __thiscall sub_788FF0(_DWORD *this, int a2); bool __thiscall sub_789020(_DWORD *this, int a2); bool __thiscall sub_789050(_DWORD *this, int a2, int a3, bool *a4, bool *a5, bool *a6); bool __thiscall sub_7890D0(_DWORD *this, int a2, int a3, bool *a4, bool *a5, bool *a6); // int *__userpurge sub_789150@(int a1@, int a2@, int *a3, int a4, int a5); // int *__userpurge sub_7891B0@(int a1@, int a2@, int *a3, int a4, int a5, int a6); int *__thiscall sub_789210(_DWORD *this, int *a2, int a3); int *__thiscall sub_789250(_DWORD *this, int *a2, int a3); _DWORD *__thiscall sub_7892A0(_DWORD *this, int a2); _DWORD *__thiscall sub_789320(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_789350(_DWORD *this, int a2); // void __userpurge sub_7893D0(int a1@, int a2@, int a3@, int a4, _DWORD *a5); _DWORD *__thiscall sub_789430(_DWORD *this); _DWORD *__thiscall sub_789450(_DWORD *this, int a2); _DWORD *__thiscall sub_7894D0(_DWORD *this, int a2, unsigned __int8 a3); _DWORD *__thiscall sub_789500(_DWORD *this, int a2); bool __thiscall sub_789580(_DWORD *this); int __thiscall sub_7895A0(_DWORD *this); int __thiscall sub_7895C0(_DWORD *this); int __thiscall sub_7895E0(_DWORD *this); _DWORD *__thiscall sub_789600(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_7896A0(_DWORD *this, _DWORD *a2); int __thiscall sub_789740(_DWORD *this); int __thiscall sub_789760(_DWORD *this, int a2); int __thiscall sub_7897E0(_DWORD *this, int a2); int __thiscall sub_789860(_DWORD *this, int a2); _DWORD *__thiscall sub_7898E0(_DWORD *this, int a2); _DWORD *__thiscall sub_789960(_DWORD *this, char a2); _DWORD *__thiscall sub_789970(_DWORD *this, int a2); _DWORD *__thiscall sub_7899F0(_DWORD *this, int a2); _DWORD *__thiscall sub_789A70(_DWORD *this, unsigned __int8 a2, int a3); _DWORD *__cdecl sub_789AA0(_DWORD *a1, int a2); int __stdcall sub_789AE0(int a1); int __stdcall sub_789B10(int a1); int __stdcall sub_789B70(int a1, int a2, int a3, int *a4, int a5, int a6, _DWORD *a7); _DWORD *__thiscall sub_789CA0(_DWORD *this); _DWORD *__thiscall sub_789CF0(_DWORD *this, int a2); _DWORD *__thiscall sub_789D70(_DWORD *this, char a2); void __thiscall sub_789DD0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_789E20(_DWORD *this, int a2); _DWORD *__thiscall sub_789EA0(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_789EC0(_DWORD *this, int a2); _DWORD *__thiscall sub_789F40(_DWORD *this, char a2); _DWORD *__thiscall sub_789FA0(_DWORD *this, int a2); int __thiscall sub_789FC0(_DWORD *this, int a2); _DWORD *__thiscall sub_78A040(_DWORD *this, int a2); _DWORD *__thiscall sub_78A080(_DWORD *this, int a2); int __thiscall sub_78A0C0(_DWORD *this, int a2, int a3); // void __userpurge sub_78A140(int a1@, int a2@, int a3@, _DWORD *a4); // void __userpurge sub_78A1C0(int a1@, int a2@, _DWORD *a3); _DWORD *__thiscall sub_78A220(_DWORD *this, char a2); _DWORD *__thiscall sub_78A230(_DWORD *this, int a2); _DWORD *__thiscall sub_78A2B0(_DWORD *this, char a2); int *__cdecl sub_78A300(int *a1, int *a2, int *a3); int **__thiscall sub_78A350(int **this, int **a2, int *a3, int *a4); _DWORD *__thiscall sub_78A3D0(_DWORD *this, _DWORD *a2); int *__cdecl sub_78A470(int *a1, int a2); int *__thiscall sub_78A590(_DWORD *this, int *a2); int *__thiscall sub_78A5D0(_DWORD *this, int *a2); int *__thiscall sub_78A610(_DWORD *this, int *a2); int *__thiscall sub_78A650(_DWORD *this, int *a2); int *__thiscall sub_78A690(_DWORD *this, int *a2); void __thiscall sub_78A6D0(_DWORD *this, int **a2); void __thiscall sub_78A810(_DWORD *this, int **a2); _DWORD *__thiscall sub_78A950(_DWORD *this, char a2); int *__cdecl sub_78A9F0(int *a1, int a2); int __thiscall sub_78AB10(void *this, int a2, int a3); _DWORD *__thiscall sub_78AB80(_DWORD *this); int __stdcall sub_78ABD0(int a1); int __stdcall sub_78AC00(int a1, void *a2); _DWORD *__thiscall sub_78ACA0(_DWORD *this); _DWORD *__thiscall sub_78ACF0(_DWORD *this, int a2); bool __thiscall sub_78AD70(_DWORD *this, int a2); int *__cdecl sub_78AE10(int *a1, int a2); int __cdecl sub_78AEB0(int a1); int *__thiscall sub_78AF10(_DWORD *this, int *a2); int *__thiscall sub_78AF50(_DWORD *this, int *a2); int *__thiscall sub_78AF90(_DWORD *this, int *a2); int *__thiscall sub_78AFD0(_DWORD *this, int *a2); bool __thiscall sub_78B010(_DWORD *this, int a2, int *a3, int *a4); int __stdcall sub_78B170(int a1, _DWORD *a2, int a3, int a4, _DWORD *a5); _DWORD *__thiscall sub_78B280(_DWORD *this); int __stdcall sub_78B2D0(int a1, int a2); _DWORD *__thiscall sub_78B330(_DWORD *this); int __stdcall sub_78B380(int a1, int a2); _DWORD *__thiscall sub_78B3E0(_DWORD *this); void *__thiscall sub_78B430(void *this, char a2); int __stdcall sub_78B460(int a1); // int __userpurge sub_78B4B0@(int a1@, int a2@, int a3@, int a4, int a5); int *__cdecl sub_78B560(int *a1, int a2); int *__cdecl sub_78B600(int *a1, int a2); int *__cdecl sub_78B6A0(int *a1, int a2); int __thiscall sub_78B7C0(void *this, int a2, int a3); int __thiscall sub_78B830(void *this, int a2, int a3, int a4); int __thiscall sub_78B8B0(void *this, int a2, int a3, int a4); int __stdcall sub_78B940(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_78BA00(_DWORD *this); bool __thiscall sub_78BA70(_DWORD *this); _DWORD *__thiscall sub_78BA80(_DWORD *this, int a2); _DWORD *__thiscall sub_78BB00(_DWORD *this, char a2); int __cdecl sub_78BB60(int a1); int __thiscall sub_78BBD0(_DWORD *this); bool __thiscall sub_78BBF0(_DWORD *this); bool __thiscall sub_78BC10(_DWORD *this); int __thiscall sub_78BC30(_DWORD *this, int a2); bool __thiscall sub_78BCB0(_DWORD *this, int a2); bool __thiscall sub_78BD50(_DWORD *this, int a2); int __thiscall sub_78BDA0(_DWORD *this, int a2); int __thiscall sub_78BE20(_DWORD *this, int a2); bool __thiscall sub_78BEA0(_DWORD *this, int a2); int __thiscall sub_78BEF0(_DWORD *this, int a2, int a3); // void __userpurge sub_78BF70(int a1@, int a2@, int a3@, _DWORD *a4); bool __thiscall sub_78BFF0(_DWORD *this, int a2, int a3); int __thiscall sub_78C050(_DWORD *this, int a2); int *__thiscall sub_78C0D0(_DWORD *this, int *a2); int *__thiscall sub_78C110(_DWORD *this, int *a2); int *__thiscall sub_78C150(_DWORD *this, int *a2); int *__thiscall sub_78C190(_DWORD *this, int *a2); int *__thiscall sub_78C1D0(_DWORD *this, int *a2); int *__thiscall sub_78C210(_DWORD *this, int *a2); _DWORD *__thiscall sub_78C250(_DWORD *this, int a2); int __thiscall sub_78C2D0(_DWORD *this, int a2); int __thiscall sub_78C350(_DWORD *this, int a2); int __thiscall sub_78C3D0(_DWORD *this); int __thiscall sub_78C3F0(_DWORD *this); int __thiscall sub_78C410(_DWORD *this); _DWORD *__thiscall sub_78C430(_DWORD *this, int a2); int *__cdecl sub_78C4B0(int *a1, int a2); int *__thiscall sub_78C550(_DWORD *this, int *a2, int a3); _DWORD *__thiscall sub_78C590(_DWORD *this, int a2); _DWORD *__thiscall sub_78C610(_DWORD *this, int a2); int *__cdecl sub_78C690(int *a1, int *a2, int *a3); void __stdcall sub_78C6F0(int a1, int a2); int __thiscall sub_78C730(int *this, unsigned int a2); unsigned int __thiscall sub_78C7F0(int *this, int a2); int *__thiscall sub_78C850(int *this, int *a2); int __thiscall sub_78C8E0(_DWORD *this); _DWORD *__thiscall sub_78C900(_DWORD *this); int *__cdecl sub_78C920(int *a1, int a2); int __cdecl sub_78C9C0(int a1); void __thiscall sub_78CA20(_DWORD *this, int **a2); bool __thiscall sub_78CB60(_DWORD *this, int a2); bool __thiscall sub_78CC00(_DWORD *this, int a2); _DWORD *__cdecl sub_78CCA0(_DWORD *a1); _DWORD *__thiscall sub_78CD30(_DWORD *this); _DWORD *__thiscall sub_78CD70(_DWORD *this, int a2); // void __userpurge sub_78CDF0(int a1@, int a2@, int a3@, int *a4); // void __userpurge sub_78CE60(int a1@, int a2@, int a3@, int *a4); // void __userpurge sub_78CED0(int a1@, int a2@, int a3@, int *a4); _DWORD *__thiscall sub_78CF40(_DWORD *this, int a2); int __thiscall sub_78CFC0(_DWORD *this, int a2); bool __thiscall sub_78D040(_DWORD *this); int __thiscall sub_78D060(_DWORD *this); int __thiscall sub_78D080(_DWORD *this, int a2, int a3); int *__thiscall sub_78D100(_DWORD *this, int *a2); int *__thiscall sub_78D140(_DWORD *this, int *a2); int *__thiscall sub_78D180(_DWORD *this, int *a2); // int *__userpurge sub_78D1C0@(int a1@, int a2@, int *a3, int a4); int *__thiscall sub_78D220(_DWORD *this, int *a2); _DWORD *__thiscall sub_78D260(_DWORD *this, int a2); int __cdecl sub_78D2E0(int a1); bool __thiscall sub_78D350(_DWORD *this, int a2); bool __thiscall sub_78D3F0(_DWORD *this, int a2); bool __thiscall sub_78D420(_DWORD *this, int a2); bool __thiscall sub_78D4C0(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_78D560(_DWORD *this, int a2); int __cdecl sub_78D5E0(int a1); void __thiscall sub_78D640(_DWORD *this, int a2); _DWORD *__thiscall sub_78D6B0(_DWORD *this, int a2); _DWORD *__thiscall sub_78D730(_DWORD *this); _DWORD *__thiscall sub_78D750(_DWORD *this, int a2); _DWORD *__thiscall sub_78D7D0(_DWORD *this, char a2); void *__thiscall sub_78D7E0(void *this, char a2); int __cdecl sub_78D810(int a1, int a2, int a3); _DWORD *__thiscall sub_78D860(_DWORD *this, char a2); _DWORD *__cdecl sub_78D8B0(int a1, int a2, _DWORD *a3); int __thiscall sub_78D910(int *this); unsigned int __thiscall sub_78D960(int *this, unsigned int a2); unsigned int __thiscall sub_78DA40(int *this, int a2); _DWORD *__thiscall sub_78DAA0(_DWORD *this, unsigned __int8 a2); int __thiscall sub_78DAC0(_DWORD *this, int a2, int a3, unsigned __int8 a4); _DWORD *__thiscall sub_78DB10(_DWORD *this, int a2); int __thiscall sub_78DB30(_DWORD *this, int a2); _DWORD *__thiscall sub_78DBB0(_DWORD *this, int a2); void __thiscall sub_78DBD0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_78DC80(_DWORD *this, unsigned __int8 a2); bool __thiscall sub_78DCA0(_DWORD *this); _DWORD *__thiscall sub_78DCC0(_DWORD *this, int a2); int __thiscall sub_78DCE0(_DWORD *this); _DWORD *__thiscall sub_78DD00(_DWORD *this, int a2); int __thiscall sub_78DD20(_DWORD *this); _DWORD *__thiscall sub_78DD40(_DWORD *this, int a2); int __thiscall sub_78DD60(_DWORD *this); _DWORD *__thiscall sub_78DD80(int *this, unsigned int a2); int *__thiscall sub_78DE00(_DWORD *this, int *a2); // void __userpurge sub_78DE40(int a1@, int a2@, int a3@, void *a4); _DWORD *__thiscall sub_78DF80(_DWORD *this, int a2); _DWORD *__thiscall sub_78E000(_DWORD *this, int a2); _DWORD *__thiscall sub_78E080(_DWORD *this, char a2); _DWORD *__thiscall sub_78E0E0(_DWORD *this, int a2, int a3); int __thiscall sub_78E110(_DWORD *this, int a2, int a3); // BOOL __stdcall Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte); // BOOL __stdcall Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte); // HANDLE __stdcall CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID); // int __userpurge sub_78E170@(int a1@, int a2@, int a3); int __stdcall sub_78E900(_DWORD *a1); signed int __cdecl sub_78EBB0(_DWORD *a1); // int __usercall sub_78F6E1@(int a1@); signed int sub_78FDFD(); int __stdcall sub_78FE10(int a1, int a2); void __stdcall sub_790857(int a1); void __stdcall sub_790861(int a1); void __stdcall sub_79086B(int a1); void __stdcall sub_790875(int a1); void __stdcall sub_79087F(int a1); void __stdcall sub_790889(int a1); void __stdcall sub_790893(int a1); void __stdcall sub_79089D(int a1); void __stdcall sub_7908A7(int a1); void __stdcall sub_7908B1(int a1); void __stdcall sub_7908BB(int a1); void __stdcall sub_7908C5(int a1); void __stdcall sub_7908CF(int a1); void __stdcall sub_7908D9(int a1); void __stdcall sub_7908E3(int a1); void __stdcall sub_7908ED(int a1); void __stdcall sub_7908F4(int a1); void __stdcall sub_7908FB(int a1); void __stdcall sub_790902(int a1); void __stdcall sub_790909(int a1); void __stdcall sub_790910(int a1); void __stdcall sub_790917(int a1); void __stdcall sub_79091E(int a1); void __stdcall sub_790925(int a1); void __stdcall sub_79092C(int a1); void __stdcall sub_790933(int a1); void __stdcall sub_79093A(int a1); void __stdcall sub_790941(int a1); void __stdcall sub_790948(int a1); void __stdcall sub_79094F(int a1); char *__stdcall sub_790956(int a1); int sub_790970(); // weak int sub_790990(); // weak HMODULE __cdecl sub_7909A0(int a1); int __cdecl sub_790A20(int a1); HMODULE __cdecl sub_790A60(int a1); int __cdecl sub_790AC0(int a1); int (__cdecl *__cdecl sub_790AF0(_DWORD *a1))(int a1, int a2); signed int (__cdecl *__cdecl sub_790D20(_DWORD *a1))(int a1, int a2); int (__cdecl *__cdecl sub_790F50(_DWORD *a1))(int a1, int a2); int (__cdecl *__cdecl sub_791180(_DWORD *a1))(int a1, int a2); int (__cdecl *__cdecl sub_7913B0(_DWORD *a1))(int a1, int a2); signed int __cdecl sub_7915E0(int a1); // signed int __usercall sub_791680@(int a1@, int a2@, _DWORD *a3); int __cdecl sub_791750(int a1); int sub_791770(); // weak int nullsub_44(); // weak // int __usercall sub_791790@(int a1@, int a2@, int a3@); int *sub_7918F0(); // signed int __usercall sub_791900@(int a1@, int a2@, int a3); HANDLE __cdecl sub_7919F0(LPCSTR lpFileName, DWORD dwDesiredAccess); BOOL __cdecl sub_791A30(HANDLE hObject); BOOL __cdecl sub_791A40(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead); BOOL __cdecl sub_791A60(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten); int __cdecl sub_791A80(HANDLE hFile, LONG lDistanceToMove, DWORD dwMoveMethod); // idb int __cdecl sub_791AB0(int a1, _DWORD *a2, int a3); signed int __cdecl sub_791B60(int a1); int __cdecl sub_792650(int a1); int __cdecl sub_7928F0(signed int a1, int a2, int a3); int __cdecl sub_7929B0(int a1, int a2, int a3); int __cdecl sub_792BA0(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_793210(_DWORD *a1); int __cdecl sub_793410(int *a1); int __cdecl sub_793760(int a1); int __cdecl sub_793B30(int a1, _DWORD *a2, int a3, int a4, int a5, int a6, int a7); void __cdecl sub_793B90(int a1, signed int *a2, signed int a3, signed int a4, signed int a5); signed int __cdecl sub_793D00(int a1, _DWORD *a2); signed int __cdecl sub_793DF0(int a1, int a2); signed int __cdecl sub_793E90(int a1, int *a2); signed int __cdecl sub_794E40(int a1); void *sub_795830(); signed int __cdecl sub_795840(int a1); signed int __cdecl sub_795900(int a1, int a2); int sub_795990(); // weak int __cdecl sub_795CA0(int a1, int a2); int __cdecl sub_795CC0(int a1); int __cdecl sub_795CE0(_WORD *a1); int sub_795FE0(); // weak int sub_796060(); // weak int __cdecl sub_796450(int a1); int sub_796470(); // weak int sub_7969C0(); // weak int sub_796C20(); // weak signed int __cdecl sub_796C50(int a1); signed int __cdecl sub_796D10(int a1, int a2); int __cdecl sub_796DA0(int a1, int a2); int __cdecl sub_796DC0(int a1, int a2); int __cdecl sub_796DE0(int a1, int a2); int sub_796E00(); // weak int __cdecl sub_797150(int a1); int __cdecl sub_797170(int a1); int __cdecl sub_797190(int a1); signed int __cdecl sub_7971B0(int a1); signed int __cdecl sub_797210(int *a1, int a2, signed int a3); signed int __cdecl sub_7972F0(int a1, int a2, signed int a3); int __cdecl sub_797400(int a1, int a2, int a3); signed int __cdecl sub_7977E0(int *a1, int a2, int a3, _WORD *a4, signed __int16 *a5); int sub_797C10(); // weak int __cdecl sub_797F80(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_797FC0(int a1, _DWORD *a2, signed __int16 *a3, int a4, char a5); signed int __cdecl sub_798000(int *a1, int a2, _DWORD *a3, signed __int16 *a4, int a5, char a6); signed int __cdecl sub_798140(int a1, _DWORD *a2); signed int __cdecl sub_7981A0(int *a1, int a2); signed int __cdecl sub_798320(int *a1, int a2, _DWORD *a3); int __cdecl sub_798380(__int16 a1); int __cdecl sub_7983B0(signed int a1); signed int __cdecl sub_7983E0(int *a1, unsigned __int8 *a2, int *a3); signed int __cdecl sub_798450(int a1, signed int a2, int a3, int a4, char a5, _DWORD *a6); int *__cdecl sub_798590(int a1, int a2, int a3, int a4, char a5, int a6, int *a7, _DWORD *a8); signed int __cdecl sub_798800(int *a1, int a2, int a3, int a4, int a5, char a6); signed int __cdecl sub_798A00(int *a1, int a2, int a3, int a4, int a5, char a6, unsigned __int8 *a7, int *a8); int __cdecl sub_798DE0(unsigned __int64 *a1, int a2); int __cdecl sub_798E10(int a1, char a2); signed int __cdecl sub_798E40(int a1, int a2); signed int __cdecl sub_798F80(int a1, int a2, _DWORD *a3, int a4); signed int __cdecl sub_799070(int a1, _DWORD *a2, int a3); int sub_799110(); // weak int __cdecl sub_7992F0(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_799330(int a1, int a2, int a3, int a4, int a5); int __cdecl sub_799370(int a1, int a2, int a3, int a4); int sub_7993B0(); // weak signed int __cdecl sub_799540(int a1, int a2, _WORD *a3, _WORD *a4, char a5); signed int __cdecl sub_799620(int a1, _WORD *a2, char a3); signed int __cdecl sub_799690(int a1, int a2, int a3, int a4, int a5, char a6); signed int __cdecl sub_799840(int a1, int a2, int a3, int a4, int a5, char a6); int __cdecl sub_799B50(_WORD *a1); int sub_799C60(); // weak int __cdecl sub_799CD0(int a1, int a2); int __cdecl sub_799CF0(int a1, int a2); int sub_799D10(); // weak int __cdecl sub_79A200(int a1); int __cdecl sub_79A220(int a1); int __cdecl sub_79A240(int a1); int sub_79A260(); // weak int sub_79A760(); // weak int sub_79AA50(); // weak int __cdecl sub_79AA80(_DWORD *a1, int a2, int a3); int sub_79AAF0(); // weak int sub_79AB40(); // weak int sub_79ADB0(); // weak int __cdecl sub_79AE50(int a1, int a2, int a3); int __cdecl sub_79AE80(int a1, int a2, int a3); int __cdecl sub_79AEB0(int a1); signed int __cdecl sub_79AF80(_DWORD *a1); unsigned int __cdecl sub_79B640(int a1, int a2, int a3, signed int a4, int a5); int sub_79BAB0(); // weak int sub_79BE80(); // weak int sub_79BEC0(); // weak unsigned int __cdecl sub_79BFD0(int a1, int a2, int a3, signed int a4, int a5); int sub_79C450(); // weak int sub_79C820(); // weak int sub_79C860(); // weak int __cdecl sub_79C970(int a1, int a2, int a3, signed int a4, int a5); int __cdecl sub_79CEC0(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5); int sub_79D8E0(); // weak int sub_79D950(); // weak int sub_79D9F0(); // weak int __cdecl sub_79DAF0(int a1, int a2, int a3, signed int a4, int a5); int __cdecl sub_79E040(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5); int sub_79EA60(); // weak int sub_79EAD0(); // weak int sub_79EB70(); // weak unsigned int __cdecl sub_79EC70(int a1, int a2, int a3, signed int a4, int a5); int sub_79F160(); // weak int sub_79F720(); // weak int sub_79F760(); // weak unsigned int __cdecl sub_79F870(int a1, int a2, int a3, signed int a4, int a5); int sub_79FD60(); // weak int sub_7A0320(); // weak int sub_7A0360(); // weak unsigned int __cdecl sub_7A0470(int a1, int a2, int a3, signed int a4, int a5); int sub_7A0780(); // weak int sub_7A0C90(); // weak int sub_7A0CE0(); // weak unsigned int __cdecl sub_7A0DF0(int a1, int a2, int a3, signed int a4, int a5); int sub_7A1160(); // weak int sub_7A18F0(); // weak int sub_7A1940(); // weak int __cdecl sub_7A1A50(int a1, int a2, int a3, signed int a4, int a5); unsigned __int8 *__cdecl sub_7A1E30(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5, _WORD *a6); int sub_7A2B40(); // weak int sub_7A2BC0(); // weak int sub_7A2C40(); // weak _WORD *__cdecl sub_7A2D50(int a1, _WORD *a2, signed int a3, _WORD *a4, int a5); int sub_7A3010(); // weak int sub_7A30B0(); // weak signed int __cdecl sub_7A31C0(int a1, int a2, signed int a3, signed int a4, int a5); int sub_7A3550(); // weak int sub_7A36A0(); // weak int __cdecl sub_7A37B0(int a1, int a2, signed int a3, signed int a4, int a5); int __cdecl sub_7A3CA0(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, int a5); int sub_7A41B0(); // weak int sub_7A4220(); // weak unsigned int __cdecl sub_7A4330(int a1, int a2, signed int a3, signed int a4, int a5); int sub_7A47C0(); // weak int sub_7A4A20(); // weak int __cdecl sub_7A4B30(int a1, int a2, int a3, int a4, int a5); int sub_7A50D0(); // weak int sub_7A5290(); // weak int sub_7A52D0(); // weak int sub_7A5310(); // weak unsigned int __cdecl sub_7A5420(int a1, int a2, int a3, int a4, int a5); int sub_7A5880(); // weak int __cdecl sub_7A5900(int a1, int a2, int a3); int sub_7A5930(); // weak int sub_7A5A20(); // weak int sub_7A69A0(); // weak int sub_7A70C0(); // weak int sub_7A7890(); // weak signed int __cdecl sub_7A7BB0(int *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _DWORD *a11, int *a12); _DWORD *__cdecl sub_7A7D80(_DWORD *a1, int *a2, int *a3); BOOL __cdecl sub_7A7EB0(_DWORD *a1, _DWORD *a2); BOOL __cdecl sub_7A7EE0(_DWORD *a1, _DWORD *a2); _DWORD *__cdecl sub_7A7F10(_DWORD *a1, _DWORD *a2, _DWORD *a3); signed int __cdecl sub_7A7FB0(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, char a7); signed int __cdecl sub_7A8060(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, int a7, char a8); signed int __cdecl sub_7A9B40(_DWORD *a1, signed int a2, int a3, int a4, int a5, signed int a6, char a7); signed int __cdecl sub_7AA980(int *a1, int a2, int a3, int a4, int a5); signed int __cdecl sub_7AACF0(int *a1, int a2, int a3, int a4, signed int a5); signed int __cdecl sub_7AB0B0(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, char a7); int __cdecl sub_7AB290(_DWORD *a1); int __cdecl sub_7AB650(_DWORD *a1, int *a2, signed int a3, int a4, int a5); signed int __cdecl sub_7AB980(int *a1, int a2, int a3); signed int __cdecl sub_7ACC00(int *a1, int a2, int a3, int a4); int __cdecl sub_7ACFC0(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7AD2A0(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7ADB60(); // weak int sub_7ADC20(); // weak int sub_7ADC90(); // weak int __cdecl sub_7AE060(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7AE340(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7AEC00(); // weak int sub_7AECC0(); // weak int sub_7AED30(); // weak void __cdecl sub_7AF100(int a1, int a2, int a3, int a4, int *a5, int a6); int sub_7AF260(); // weak int sub_7AF390(); // weak void __cdecl sub_7AF520(int a1, int a2, int a3, int a4, int *a5, int a6); int sub_7AF680(); // weak int sub_7AF7B0(); // weak int __cdecl sub_7AF940(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7AFC50(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7B01B0(); // weak int sub_7B0220(); // weak int __cdecl sub_7B0470(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7B0790(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7B0CF0(); // weak int sub_7B0D60(); // weak void __cdecl sub_7B0FB0(int a1, int a2, int a3, int a4, int *a5, int a6); int sub_7B1100(); // weak int sub_7B17B0(); // weak int __cdecl sub_7B1940(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7B1C20(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7B2180(); // weak int sub_7B21F0(); // weak int __cdecl sub_7B2440(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7B2700(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5); int sub_7B2FC0(); // weak int sub_7B3080(); // weak void __cdecl sub_7B3450(int a1, int a2, int a3, int a4, int a5, int *a6, int a7); int sub_7B3600(); // weak int sub_7B3E30(); // weak int __cdecl sub_7B3FD0(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int a5, int *a6, int a7); _BYTE *__cdecl sub_7B42E0(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, _BYTE *a5, int a6); int sub_7B49A0(); // weak int sub_7B4A20(); // weak int __cdecl sub_7B4C90(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int a5, int *a6, int a7); char __cdecl sub_7B4F80(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, _BYTE *a5, int a6); int sub_7B5AB0(); // weak int sub_7B5BA0(); // weak void __cdecl sub_7B5FA0(int a1, int a2, int a3, int a4, int *a5, int a6); int sub_7B6050(); // weak int sub_7B61C0(); // weak void __cdecl sub_7B6350(int a1, int a2, int a3, int a4, int a5, int *a6, int a7); int sub_7B6410(); // weak int sub_7B65A0(); // weak _DWORD *__cdecl sub_7B6740(int a1, int a2, int a3, int a4, _DWORD *a5, int a6); _BYTE *__cdecl sub_7B6800(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5); int sub_7B6900(); // weak int __cdecl sub_7B6A80(int a1, int a2, int a3, int a4, int *a5, int a6); _BYTE *__cdecl sub_7B6B70(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5); int sub_7B6D10(); // weak int sub_7B6DD0(); // weak _DWORD *__cdecl sub_7B71A0(int a1, int a2, int a3, int a4, _DWORD *a5, int a6); _BYTE *__cdecl sub_7B7270(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5); int sub_7B7370(); // weak int sub_7B73E0(); // weak _DWORD *__cdecl sub_7B7630(int a1, int a2, int a3, int a4, _DWORD *a5, int a6); int sub_7B7710(); // weak int sub_7B7860(); // weak void __cdecl sub_7B7AB0(int a1, int a2, int *a3, int a4); signed int __cdecl sub_7B7B40(signed __int16 *a1, _BYTE *a2, int a3); int sub_7B7C70(); // weak int sub_7B7DE0(); // weak _DWORD *__cdecl sub_7B8150(_DWORD *a1, int a2, int a3); int sub_7B9490(); // weak int sub_7B94F0(); // weak int __cdecl sub_7B9750(int a1, int a2, int a3); int sub_7B9780(); // weak int sub_7B97C0(); // weak int sub_7B9810(); // weak int sub_7B9860(); // weak int sub_7B98B0(); // weak int sub_7B98F0(); // weak int sub_7B9930(); // weak int sub_7B9970(); // weak int sub_7B99B0(); // weak int sub_7B99F0(); // weak int sub_7B9A30(); // weak int sub_7B9A70(); // weak int sub_7B9AB0(); // weak int __cdecl sub_7B9B80(unsigned __int8 a1); int __cdecl sub_7B9B90(int, size_t, int, int, int); // idb int __cdecl sub_7B9D70(int a1, _DWORD *a2); signed int __cdecl sub_7B9DF0(int a1, int *a2); int __cdecl sub_7B9E70(_DWORD *a1); int __cdecl sub_7B9F40(int a1, _DWORD *a2); int __cdecl sub_7B9FF0(int a1, _DWORD *a2); int __cdecl sub_7BA250(int a1); signed int __cdecl sub_7BA3C0(int a1); int __cdecl sub_7BA860(int a1); int __cdecl sub_7BAA20(int a1, int a2, int a3); int __cdecl sub_7BAE50(_DWORD *a1, int a2); int __cdecl sub_7BB400(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_7BB760(int *a1, signed int a2, signed int *a3, int a4, int a5, int a6, int a7, int a8, int a9, signed int a10, char a11); signed int __cdecl sub_7BCBF0(int a1, int a2, _DWORD *a3, int *a4); int __cdecl sub_7BCD00(int a1, int a2, _DWORD *a3, int *a4); signed int __cdecl sub_7BCDC0(int a1, _DWORD *a2, int a3, int a4, int a5, int a6); signed int __cdecl sub_7BCE40(signed int a1, signed int *a2, int *a3, signed int a4); signed int __cdecl sub_7BE1F0(signed int a1, signed int *a2, int *a3, signed int a4); signed int __cdecl sub_7BF550(signed int a1, signed int *a2, int *a3, signed int a4); signed int __cdecl sub_7C0050(_DWORD *a1, int *a2, int *a3, signed int a4); signed int __cdecl sub_7C14F0(_DWORD *a1, signed int a2, signed int *a3, int *a4); int __cdecl sub_7C1A30(int a1); signed int __cdecl sub_7C1A80(int a1); signed int __cdecl sub_7C1AE0(_DWORD *a1, unsigned int a2, _DWORD *a3); int __cdecl sub_7C1B60(int a1); signed int __cdecl sub_7C1B70(_DWORD *a1); signed int __cdecl sub_7C1C40(_DWORD *a1); _BYTE *__cdecl sub_7C29D0(char a1, _DWORD *a2); _DWORD *__cdecl sub_7C29F0(__int16 a1, _DWORD *a2); int __cdecl sub_7C2A20(int a1); signed int __cdecl sub_7C2B40(int a1); int __cdecl sub_7C2DE0(int a1); int __cdecl sub_7C2E30(int a1); int __cdecl sub_7C2E80(int a1, _DWORD *a2); int __cdecl sub_7C3070(int a1, _DWORD *a2); int __cdecl sub_7C3210(int a1, int a2, char a3, __int16 *a4); int __cdecl sub_7C3380(int a1, unsigned __int8 *a2, int a3, char a4, char a5); int __cdecl sub_7C3670(int a1, int a2); int __cdecl sub_7C3B90(int a1, signed int a2, _BYTE *a3, _BYTE *a4); int __cdecl sub_7C3DB0(int a1, int a2, int a3, int a4); int __cdecl sub_7C3F00(__int16 a1, int a2); int __cdecl sub_7C3F70(int a1, int a2); int __cdecl sub_7C4010(char a1, int a2); signed int __cdecl sub_7C4110(_DWORD *a1, int a2, int *a3); int __cdecl sub_7C46B0(_DWORD *a1); int __cdecl sub_7C4A10(_DWORD *a1, int a2, int *a3, int a4); int __cdecl sub_7C4FF0(_DWORD *a1, int *a2, int *a3); signed int __cdecl sub_7C5740(_DWORD *a1, int a2, int *a3); signed int __cdecl sub_7C9020(int a1); // void __cdecl __noreturn std::_Xlength_error(const char *); idb std::exception *__thiscall sub_7D3450(std::exception *this, struct exception *a2); // void __cdecl __noreturn std::_Xout_of_range(const char *); idb std::exception *__thiscall sub_7D349D(std::exception *this, struct exception *a2); // void *__cdecl operator new[](unsigned int); idb int __thiscall sub_7D3526(_DWORD *this); int (__thiscall **sub_7D353E())(void *, char); void *__thiscall sub_7D3544(void *this, char a2); bool __cdecl __uncaught_exception(); // idb const char *sub_7D35BE(); // void __cdecl __noreturn std::tr1::_Xfunc(std::tr1 *__hidden this); idb std::exception *__thiscall sub_7D35EA(std::exception *this, struct exception *a2); void *__thiscall sub_7D3607(void *this, char a2); std::exception *__thiscall sub_7D3628(std::exception *this, int a2); // int unknown_libname_20(void); weak // int __cdecl std::tr1::_Xbad(_DWORD); weak std::exception *__thiscall sub_7D36A9(std::exception *this, struct exception *a2); // int __cdecl _Strcoll(const char *, const char *, const char *, const char *, const _Collvec *); // _Collvec __cdecl _Getcoll(); // int __cdecl _Tolower(int, const _Ctypevec *); // _Ctypevec *__cdecl _Getctype(_Ctypevec *__return_ptr __struct_ptr retstr); // _DWORD __thiscall std::_Init_locks::_Init_locks(std::_Init_locks *__hidden this); idb // _DWORD __thiscall std::_Lockit::_Lockit(std::_Lockit *this, int); idb // _DWORD __thiscall std::_Lockit::~_Lockit(std::_Lockit *__hidden this); idb // void __cdecl std::locale::facet::_Facet_Register(struct std::locale::facet *); idb int sub_7D3A0B(); // int __thiscall unknown_libname_22(_DWORD); weak // void __cdecl std::_Locinfo::_Locinfo_dtor(struct std::_Locinfo *); idb // void __cdecl std::_Locinfo::_Locinfo_ctor(struct std::_Locinfo *, const char *); idb // struct std::locale::_Locimp *__cdecl std::locale::_Init(); idb // void __cdecl std::ios_base::_Addstd(struct std::ios_base *); idb // void __cdecl std::ios_base::_Ios_base_dtor(struct std::ios_base *); idb // int __cdecl _Toupper(int, const _Ctypevec *); // _DWORD __thiscall std::_Mutex::_Mutex(std::_Mutex *__hidden this); idb // _DWORD __thiscall std::_Mutex::~_Mutex(std::_Mutex *__hidden this); idb // size_t __cdecl _Strxfrm(char *, char *, const char *, const char *, const _Collvec *); FILE *__cdecl sub_7D3FDA(char *a1, int a2, int a3); FILE *__cdecl sub_7D3FF9(wchar_t *a1, int a2, int a3); FILE *__cdecl sub_7D4018(char *a1, int a2, int a3); FILE *__cdecl sub_7D40C0(wchar_t *a1, int a2, int a3); FILE *__cdecl sub_7D4168(char *a1, int a2, int a3); FILE *__cdecl sub_7D4173(wchar_t *a1, int a2, int a3); // _Cvtvec __cdecl _Getcvt(); // int __cdecl _Mtxdst(LPCRITICAL_SECTION lpCriticalSection); idb // int __cdecl unknown_libname_23(LPCRITICAL_SECTION lpCriticalSection); idb void __cdecl sub_7D4219(LPCRITICAL_SECTION lpCriticalSection); // _DWORD __thiscall _Init_atexit::~_Init_atexit(_Init_atexit *__hidden this); idb // _DWORD __thiscall std::exception::exception(std::exception *this, const char *const *, int); idb // void __thiscall std::exception::_Tidy(std::exception *__hidden this); idb // _DWORD __thiscall std::exception::exception(std::exception *this, const char *const *); idb void __thiscall sub_7D43CE(std::exception *this); std::exception *__thiscall sub_7D43D9(std::exception *this, char *a2); std::exception *__thiscall sub_7D43F7(std::exception *this, char *a2); std::exception *__thiscall sub_7D4415(std::exception *this, char *a2); // _DWORD __thiscall std::exception::exception(std::exception *this, const struct exception *); idb std::exception *__thiscall sub_7D4457(std::exception *this, struct exception *a2); void *__thiscall sub_7D4474(void *this, char a2); std::exception *__thiscall sub_7D449B(std::exception *this, struct exception *a2); std::exception *__thiscall sub_7D44B8(std::exception *this, struct exception *a2); // const char *__thiscall type_info::name(type_info *this, struct __type_info_node *); idb void __thiscall sub_7D44E9(struct type_info *this); void *__thiscall sub_7D44F9(void *this, char a2); // _DWORD __stdcall type_info::operator==(_DWORD); weak // void __cdecl operator delete(void *); idb // void *__cdecl memcpy(void *, const void *, size_t); // void *__cdecl memcpy_0(void *, const void *, size_t); // void *__cdecl operator new(size_t); idb // void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); weak // _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); weak void __cdecl sub_7D50D1(char a1); // void __cdecl free(void *); // int __cdecl fclose(FILE *); // size_t __cdecl fread(void *, size_t, size_t, FILE *); // int __cdecl _filelength(int); // int __cdecl _fileno(FILE *); // FILE *__cdecl _fsopen(const char *, const char *, int); // FILE *__cdecl fopen(const char *, const char *); // errno_t __cdecl fopen_s(FILE **File, const char *Filename, const char *Mode); // void *__cdecl memset(void *, int, size_t); // char *__cdecl strrchr(const char *, int); // void __cdecl _splitpath(const char *, char *, char *, char *, char *); // void __cdecl srand(unsigned int); // int __cdecl rand(); // int sprintf(char *, const char *, ...); // int sprintf_s(char *DstBuf, size_t SizeInBytes, const char *Format, ...); // void __cdecl operator delete[](void *); idb // int __cdecl atexit(void (__cdecl *)()); // void __stdcall `eh vector destructor iterator'(void *, unsigned int, int, void (__thiscall *)(void *)); idb // wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *); // void *__cdecl bsearch(const void *, const void *, size_t, size_t, int (__cdecl *)(const void *, const void *)); // void __stdcall `eh vector constructor iterator'(void *, unsigned int, int, void (__thiscall *)(void *), void (__thiscall *)(void *)); idb // char *__cdecl strncpy(char *, const char *, size_t); // div_t __cdecl div(int, int); // void *__cdecl memchr(const void *, int, size_t); // _DWORD __thiscall _LocaleUpdate::_LocaleUpdate(_LocaleUpdate *this, struct localeinfo_struct *); idb // int __cdecl isalpha(int); // int __cdecl isupper(int); // int __cdecl islower(int); // int __cdecl isdigit(int); // int __cdecl isxdigit(int); // int __cdecl isspace(int); // int __cdecl ispunct(int); // int __cdecl isalnum(int); // int __cdecl isgraph(int); // int __cdecl iscntrl(int); // int __cdecl vsprintf(char *, const char *, va_list); // int __cdecl strncmp(const char *, const char *, size_t); // int sscanf(const char *, const char *, ...); // char *__cdecl fgets(char *, int, FILE *); // errno_t __cdecl strcpy_s(char *Dst, rsize_t SizeInBytes, const char *Src); // int __cdecl _strnicmp(const char *, const char *, size_t); // void *__cdecl realloc(void *, size_t); // char *__cdecl strchr(const char *, int); void **sub_7D6CEE(); // _DWORD __cdecl flsall(_DWORD); weak // int __cdecl fflush(FILE *); int sub_7D7080(); // int __cdecl fgetc(FILE *); // int __cdecl fputc(int, FILE *); // int __cdecl ungetc(int, FILE *); // int __cdecl setvbuf(FILE *, char *, int, size_t); // errno_t __cdecl memcpy_s(void *Dst, rsize_t DstSize, const void *Src, rsize_t MaxCount); // size_t __cdecl fwrite(const void *, size_t, size_t, FILE *); // int __cdecl fgetpos(FILE *, fpos_t *); // int __cdecl _fseeki64(FILE *File, __int64 Offset, int Origin); // int __cdecl fsetpos(FILE *, const fpos_t *); // __time32_t __cdecl _time32(__time32_t *Time); // int __cdecl vsprintf_s(char *DstBuf, size_t SizeInBytes, const char *Format, va_list ArgList); // unsigned __int8 *__cdecl _mbschr(const unsigned __int8 *, unsigned int); // int sub_7D7B2A(); weak // struct tm *__cdecl _localtime32(const __time32_t *Time); // int __cdecl vfprintf_s(FILE *File, const char *Format, va_list ArgList); // int fprintf(FILE *, const char *, ...); // int fprintf_s(FILE *File, const char *Format, ...); // int __cdecl _putenv(const char *); // char *__cdecl getenv(const char *); // char *__cdecl strncat(char *, const char *, size_t); // double __cdecl _difftime32(__time32_t Time1, __time32_t Time2); // __time32_t __cdecl _mktime32(struct tm *Tm); // void __cdecl qsort(void *, size_t, size_t, int (__cdecl *)(const void *, const void *)); // unsigned __int8 *__cdecl _mbsstr(const unsigned __int8 *, const unsigned __int8 *); // int __cdecl _mbsncmp(const unsigned __int8 *, const unsigned __int8 *, size_t); // unsigned __int8 *__cdecl _mbsupr(unsigned __int8 *); // int __cdecl _mbsicmp(const unsigned __int8 *, const unsigned __int8 *); // int __cdecl ftell(FILE *); // int __cdecl fseek(FILE *, int, int); // wchar_t *__cdecl wcsrchr(const wchar_t *, wchar_t); // size_t __cdecl mbstowcs(wchar_t *, const char *, size_t); // wchar_t *__cdecl wcschr(const wchar_t *, wchar_t); // double __cdecl atof(const char *); // int _snprintf(char *, size_t, const char *, ...); // void *__cdecl malloc(size_t); // size_t __cdecl strftime(char *, size_t, const char *, const struct tm *); // errno_t __cdecl _localtime64_s(struct tm *Tm, const __time64_t *Time); // struct tm *__cdecl _localtime64(const __time64_t *Time); // __time64_t __cdecl _time64(__time64_t *Time); // int __cdecl _mkdir(const char *); // errno_t __cdecl strcat_s(char *Dst, rsize_t SizeInBytes, const char *Src); // int __cdecl atoi(const char *); // __int64 __cdecl _atoi64(const char *); // void __cdecl __noreturn exit(int); // int __cdecl feof(FILE *); // int __cdecl ferror(FILE *); // int __cdecl _stricmp(const char *, const char *); // void __cdecl __noreturn terminate(); idb // int __cdecl _mbscmp(const unsigned __int8 *, const unsigned __int8 *); // int __cdecl _mbsnbcmp(const unsigned __int8 *, const unsigned __int8 *, size_t); // char *__cdecl _itoa(int, char *, int); // char *__cdecl _i64toa(__int64, char *, int); // char *__cdecl strstr(const char *, const char *); int __thiscall sub_7DB3EA(void *this); // __time64_t __cdecl _mktime64(struct tm *Tm); // double __cdecl _difftime64(__time64_t Time1, __time64_t Time2); // struct lconv *__cdecl localeconv(); // errno_t __cdecl memmove_s(void *Dst, rsize_t DstSize, const void *Src, rsize_t MaxCount); // size_t __cdecl strcspn(const char *, const char *); // char *__cdecl _strlwr(char *); // int __cdecl __RTDynamicCast(int, int, struct _s_RTTICompleteObjectLocator *, int, int); idb // char *__cdecl strtok(char *, const char *); // int printf(const char *, ...); // int __cdecl _vsnwprintf(wchar_t *, size_t, const wchar_t *, va_list); double __cdecl ceil(double); double __cdecl floor(double); // double __cdecl ldexp(double, int); // int __cdecl tolower(int); // int fscanf(FILE *, const char *, ...); // int __cdecl _access(const char *, int); // _DWORD __cdecl _setjmp3(_DWORD, _DWORD); // char *__cdecl strerror(int); // int *__cdecl _errno(); // FILE *__cdecl freopen(const char *, const char *, FILE *); // double __cdecl strtod(const char *, char **); // char *__cdecl strpbrk(const char *, const char *); // void __cdecl __noreturn abort(); // void __cdecl __noreturn longjmp(jmp_buf, int); // int __cdecl strcoll(const char *, const char *); // double __cdecl frexp(double, int *); int __thiscall sub_7DDA68(void *this); void sub_7DDA72(); void sub_7DDA79(); double __cdecl modf(double, double *); // int __cdecl toupper(int); // struct tm *__cdecl _gmtime64(const __time64_t *Time); // int __cdecl system(const char *); // int __cdecl remove(const char *); // int __cdecl rename(const char *, const char *); // char *__cdecl tmpnam(char *); // FILE *__cdecl tmpfile(); // clock_t __cdecl clock(); // char *__cdecl setlocale(int, const char *); // FILE *__cdecl _popen(const char *, const char *); // int __cdecl _pclose(FILE *); // void __cdecl clearerr(FILE *); // __int64 __cdecl _ftelli64(FILE *File); // size_t __cdecl strspn(const char *, const char *); void *__cdecl sub_7E0206(void *a1); // int __cdecl _invoke_watson(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int _invalid_parameter_noinfo(void); weak void __thiscall sub_7E0738(std::exception *this); void *__thiscall sub_7E0743(void *this, char a2); std::exception *__thiscall sub_7E1323(std::exception *this, struct exception *a2); // FILE *__cdecl _wfsopen(const wchar_t *, const wchar_t *, int); // void __cdecl type_info::_Type_info_dtor(struct type_info *); idb int sub_7E387B(); void *__cdecl sub_7E388B(void *a1); // int _encoded_null(void); weak // void __cdecl __noreturn __report_gsfailure(char); weak signed int __cdecl sub_7EACAB(_DWORD *a1); signed int __cdecl sub_7EACD8(_DWORD *a1); signed int __cdecl sub_7EAD05(_DWORD *a1); int *sub_7EAD32(); int *sub_7EAD38(); int *sub_7EAD3E(); void **sub_7EAD44(); int sub_7EB64A(); // _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // unsigned int __cdecl strtoul(const char *, char **, int); PVOID sub_7ECC41(); int __cdecl sub_7ECDF1(int a1); int __cdecl sub_7ECFAC(int a1); int (*sub_7ECFBB())(void); void __cdecl sub_7ECFE1(); // idb // int __fastcall _cintrindisp2(_DWORD, _DWORD); weak // int __fastcall _cintrindisp1(_DWORD, _DWORD); weak // LONG __stdcall __CxxUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo); idb int sub_7EF99A(); void *sub_7F128C(); char **sub_7F1292(); // errno_t __cdecl strncpy_s(char *Dst, rsize_t SizeInBytes, const char *Src, rsize_t MaxCount); void sub_7F5172(); signed int sub_7F5FB5(); char __thiscall sub_7F5FB9(_BYTE *this); int __thiscall sub_7F604C(_DWORD *this); // _DWORD __stdcall DName::operator=(char); weak // int __stdcall DName::operator+(DName *, int); idb DName *__cdecl sub_7F6C37(DName *a1, int a2, int a3); int __cdecl sub_7FB1D7(int, int, struct localeinfo_struct *); // idb int __cdecl sub_7FB27F(int, int, struct localeinfo_struct *); // idb signed int __cdecl sub_7FC06C(unsigned __int16 *a1, int *a2); signed int __cdecl sub_7FC5BD(unsigned __int16 *a1, int *a2); int __cdecl sub_7FCCF2(int a1, int a2, int a3); int sub_7FD290(); signed int __cdecl sub_7FDAA4(_DWORD *a1); // int __cdecl _sopen_helper_0(LPCWSTR lpFileName, int, int, int, int, int); idb int __cdecl sub_7FE2CA(int, LPCWSTR lpFileName, int, int, int); // idb HANDLE sub_7FF1FD(); double __cdecl sub_7FF6C0(float a1); int sub_7FF6E0(char *DstBuf, size_t SizeInBytes, char *Format, ...); double __thiscall sub_7FF710(_DWORD *this); unsigned int __thiscall sub_7FF750(_DWORD *this, _DWORD *a2); char __stdcall sub_7FF780(int a1, int a2, float a3, int a4, int a5, float a6, float a7, int a8); int __stdcall sub_7FF7C0(int a1, int a2, char a3); int __thiscall sub_7FF7E0(_DWORD *this, unsigned int a2); int __thiscall sub_7FF800(_DWORD *this); void *__thiscall sub_7FF840(void *this, char a2); void *__thiscall sub_7FF870(void *this, char a2); void __thiscall sub_7FF8A0(_DWORD *this); signed int __thiscall sub_7FF990(_DWORD *this, const char *a2); void __thiscall sub_7FFA60(float *this); unsigned int __thiscall sub_7FFB80(float *this); unsigned int __thiscall sub_7FFCA0(float *this); void __thiscall sub_7FFDC0(int *this, int a2); LONG __thiscall sub_7FFF10(_DWORD *this, unsigned int a2, LONG *a3); char __thiscall sub_7FFFB0(_DWORD *this, const char *a2); int __thiscall sub_800000(_DWORD *this, float a2, int a3, int a4, int a5, int a6); void **__thiscall sub_800080(void *this, char a2); _DWORD *__stdcall sub_8000D0(_DWORD *a1); void **__thiscall sub_8000F0(void *this, char a2); void **__thiscall sub_800130(void *this, char a2); void **__thiscall sub_800170(void *this, char a2); void **__thiscall sub_8001B0(void *this, char a2); void **__thiscall sub_8001F0(void *this, char a2); void **__thiscall sub_800230(void *this, char a2); _DWORD *__stdcall sub_800270(_DWORD *a1); _DWORD *__stdcall sub_8002E0(_DWORD *a1); void __thiscall sub_800350(_DWORD *this, int a2, int a3, int a4, float a5, int a6); char __thiscall sub_800560(void **this, int a2, int a3, char a4, float a5, float a6, int a7); char __thiscall sub_800630(_DWORD *this, int a2, float a3); char __thiscall sub_8006C0(_DWORD *this, int a2); int *__thiscall sub_800770(_DWORD *this, int a2, int a3, int a4, float a5, int a6); _DWORD *__thiscall sub_8008B0(_DWORD *this, unsigned int a2, int a3); void __thiscall sub_800940(_DWORD *this); void __thiscall sub_8009A0(int *this); LONG __thiscall sub_800A00(int *this, LONG *a2); void *__thiscall sub_800A80(void *this, char a2); signed int __thiscall sub_800AB0(_DWORD *this, int a2, int a3, _BYTE *a4); void __stdcall sub_800B10(int a1); void **__thiscall sub_800B80(void *this, char a2); void **__thiscall sub_800BC0(void *this, char a2); void **__thiscall sub_800C00(void *this, char a2); void **__thiscall sub_800C40(void *this, char a2); void __thiscall sub_800C80(_DWORD *this); void *__thiscall sub_800CE0(void *this, char a2); int sub_800D10(); _DWORD *__thiscall sub_800DF0(_DWORD *this, int a2, char a3); LONG __thiscall sub_800F30(_DWORD *this); char __thiscall sub_801030(_DWORD *this, int a2, int a3); float *__thiscall sub_801070(_DWORD *this, int a2, int a3, float a4, int a5, int a6); _DWORD *__thiscall sub_8012C0(_DWORD *this); _DWORD *__thiscall sub_8013A0(_DWORD *this, char *Src); void **__thiscall sub_801540(void *this, char a2); void __thiscall sub_801580(_DWORD *this); void **__thiscall sub_8015D0(void *this, char a2); void *__thiscall sub_801610(void *this, char a2); _DWORD *__thiscall sub_801640(char *this); char __thiscall sub_801910(_DWORD *this, int a2); int __thiscall sub_801C20(_DWORD *this, int a2, int a3, int a4, int a5, float a6, float a7); _DWORD *__thiscall sub_802210(void *this, char a2); double __thiscall sub_802250(float *this, int a2); double __thiscall sub_802540(float *this, int a2); double __thiscall sub_802860(float *this, int a2, int a3); void __thiscall sub_802C90(void **this); double __thiscall sub_802D90(float *this, int a2); int *sub_802E00(); void __thiscall sub_802E30(_DWORD *this, int a2); char __thiscall sub_803030(_DWORD *this, int **a2); void __thiscall sub_8030A0(float *this, int a2, int a3, int a4); LONG __thiscall sub_803200(_DWORD *this); _DWORD *__cdecl sub_803410(int a1, char *FullPath, char a3, char a4, int a5); unsigned int __thiscall sub_803560(float *this); void *__thiscall sub_803740(void *this, char a2); _DWORD *__cdecl sub_803770(char *Src, char a2, char a3, int a4); void __thiscall sub_803810(float *this, float a2); BOOL __cdecl sub_803D80(float *a1, float *a2); double __cdecl sub_803DC0(float a1, int a2, int a3, int a4, int a5, char a6); double __cdecl sub_803FA0(float a1, int a2, int a3, int a4, char a5); signed int sub_804020(); int __thiscall sub_8040B0(char *this, signed int a2); int __cdecl sub_8040F0(signed int a1, int a2); BOOL __cdecl sub_804130(float *a1, float *a2); float *__cdecl sub_804180(float *a1, float *a2); errno_t __cdecl sub_8041B0(void *Dst, void *Src, rsize_t DstSize); int __cdecl sub_8041D0(float, int, int, int); // idb char __cdecl sub_804230(float a1, int a2, int a3); int __cdecl sub_8043F0(signed int a1, unsigned int a2); int __cdecl sub_8044A0(signed int a1, int a2, signed int a3); signed int sub_804510(); // _DWORD __stdcall sub_8045A0(_DWORD); weak int __cdecl sub_8045C0(signed int a1, int a2); _DWORD *__cdecl sub_8045F0(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_804620(int, float, int, int, int, int, char); // idb int __cdecl sub_804810(int, float, int, int, int, char); // idb BOOL __cdecl sub_8048D0(float *a1, float *a2); int __cdecl sub_804930(float, int, int, int, int, int, int, int); // idb signed int sub_804BB0(); int __cdecl sub_804C50(int a1, int a2); BOOL __cdecl sub_804CC0(float *a1, float *a2); int __cdecl sub_804D50(unsigned int a1); int __cdecl sub_804D90(float, int, int, int); // idb int __cdecl sub_804E50(float, int, int, int); // idb int __cdecl sub_804F10(float, int, int, int); // idb void __cdecl sub_804FA0(int a1, int a2); double __cdecl sub_8050E0(int a1, int a2); int __cdecl sub_805280(signed int a1, unsigned int a2); int __cdecl sub_805300(signed int a1, int a2, int a3); void __cdecl sub_805340(int a1); char __cdecl sub_805360(float a1, int a2, int a3); signed int sub_805670(); int __cdecl sub_805710(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_805760(signed int a1, int a2); BOOL __thiscall sub_805790(float *this, float *a2); int __cdecl sub_8057E0(int, float, int, int, int, int, char); // idb int __cdecl sub_805A30(int, float, int, int, int, char); // idb void __cdecl sub_805B00(int a1, signed int a2, unsigned __int8 a3); signed int sub_805CF0(); int __cdecl sub_805D80(int a1, int a2); int __cdecl sub_805DC0(float, int, int, int); // idb void __cdecl sub_805E10(int a1, unsigned int a2, unsigned __int8 a3); BOOL __cdecl sub_805EF0(float *a1, float *a2); int __cdecl sub_805F60(signed int a1, int a2, int a3); int __cdecl sub_805F90(unsigned int a1); char __cdecl sub_806000(float a1, int a2, int a3); int __cdecl sub_806160(signed int a1, unsigned int a2); signed int sub_806200(); bool __cdecl sub_806290(int a1, int a2); _BYTE *__cdecl sub_8062C0(int a1, int a2, int a3, _BYTE *a4); char __cdecl sub_8062D0(float a1, int a2, int a3, int a4, int a5, char a6); char __cdecl sub_8064A0(float a1, int a2, int a3, int a4, char a5); signed int sub_806520(); int __cdecl sub_8065C0(signed int a1, int a2); int __thiscall sub_8065F0(_BYTE *this, int a2); int __cdecl sub_806650(signed int a1, int a2); int __thiscall sub_8066A0(char *this, signed int a2); int __cdecl sub_8066C0(signed int a1, int a2); _DWORD *__cdecl sub_8066F0(int a1, int a2, int a3, _DWORD *a4); int __cdecl sub_806720(int, float, int, int, int, int, char); // idb int __cdecl sub_806930(int, float, int, int, int, char); // idb BOOL __cdecl sub_806A00(float *a1, float *a2); signed int sub_806A70(); int __thiscall sub_806AF0(int *this); void __cdecl sub_806B30(float a1, int a2, int a3, int a4); char __cdecl sub_806C40(int a1, int a2); signed int __cdecl sub_806CF0(int a1, int a2); int __cdecl sub_806DB0(unsigned int a1); int __cdecl sub_806E50(int a1); bool __cdecl sub_806E90(float a1, int a2, int a3); int __thiscall sub_806F90(char *this, signed int a2); int __cdecl sub_807050(signed int a1, unsigned int a2); signed int __cdecl sub_807120(int a1, int a2, int a3); signed int sub_8071E0(); int __cdecl sub_807270(int a1, int a2); float *__cdecl sub_8072A0(int a1, float a2, int a3); int __cdecl sub_8072F0(unsigned int a1); int __cdecl sub_807350(float, int, int, int); // idb char *__cdecl sub_807440(signed int a1, unsigned int a2); char __cdecl sub_8074D0(float a1, int a2, int a3); signed int sub_807610(); BOOL __cdecl sub_8076A0(float *a1, float *a2); float *__cdecl sub_8076B0(float *a1, float *a2); int __cdecl sub_8076D0(float, int, int, int); // idb int __cdecl sub_807710(signed int a1, unsigned int a2); int __cdecl sub_807780(signed int a1, int a2, int a3); char __cdecl sub_8077B0(float a1, int a2, int a3); signed int sub_8078B0(); BOOL __cdecl sub_807940(float *a1, float *a2); int __cdecl sub_807950(unsigned int a1); int __cdecl sub_807990(float, int, int, int); // idb float *__cdecl sub_807A10(int a1, float *a2, float *a3, float *a4); char __cdecl sub_807A50(float a1, int a2, int a3); signed int sub_807B60(); int __cdecl sub_807C00(unsigned int a1); int __cdecl sub_807C70(float, int, int, int); // idb char __cdecl sub_807CC0(float a1, int a2, int a3); signed int sub_807E20(); int __cdecl sub_807EB0(int a1, int a2); BOOL __cdecl sub_807F30(float *a1, float *a2); int __cdecl sub_807FD0(unsigned int a1); int __cdecl sub_808010(float, int, int, int); // idb int __cdecl sub_8080D0(float, int, int, int); // idb int __cdecl sub_808190(float, int, int, int); // idb int __thiscall sub_808220(float *this, int a2, int a3, float a4, float a5); float *__cdecl sub_808410(float *a1, unsigned int a2); double __cdecl sub_808670(int a1, int a2); char __cdecl sub_808810(float a1, int a2, int a3); int __cdecl sub_808940(int a1, unsigned int a2); int __cdecl sub_808A10(signed int a1, signed int a2, int a3); signed int sub_808AA0(); int __cdecl sub_808B40(int a1, int a2); int __cdecl sub_808BB0(float, int, int, int); // idb int __thiscall sub_808C00(float *this, float *a2, float *a3); void __cdecl sub_808E30(int a1, unsigned int a2, unsigned __int8 a3); BOOL __cdecl sub_8090E0(float *a1, float *a2); int __cdecl sub_809160(unsigned int a1); char __cdecl sub_8091D0(float a1, int a2, int a3); int __cdecl sub_809340(signed int a1, unsigned int a2); int __cdecl sub_809440(signed int a1, signed int a2, int a3); signed int sub_8094D0(); BOOL __cdecl sub_809560(float *a1, float *a2); float *__cdecl sub_8095E0(float *a1, float *a2); int __cdecl sub_809620(float, int, int, int); // idb int __cdecl sub_809670(unsigned int a1); float *__cdecl sub_8096B0(int a1, float a2, float a3, float a4, float a5); void __cdecl sub_809790(int a1, unsigned int a2); char __cdecl sub_809870(float a1, int a2, int a3); int __cdecl sub_8099C0(signed int a1, unsigned int a2); int __cdecl sub_809A90(signed int a1, signed int a2, int a3); signed int sub_809B20(); char __cdecl sub_809BB0(int a1, int a2); bool __cdecl sub_809BD0(int a1, int a2); int __cdecl sub_809BE0(float, int, int, int); // idb int __cdecl sub_809C00(signed int a1, int a2, int a3); int __cdecl sub_809C30(unsigned int a1); char __cdecl sub_809C70(float a1, int a2, int a3); int __cdecl sub_809D70(int a1, unsigned int a2); signed int sub_809DE0(); BOOL __cdecl sub_809E70(float *a1, float *a2); int __cdecl sub_809E80(float, int, int, int); // idb int __cdecl sub_809EC0(signed int a1, int a2, int a3); char __cdecl sub_809EF0(float a1, int a2, int a3); signed int sub_80A030(); int __cdecl sub_80A0C0(float, int, int, int); // idb char __cdecl sub_80A0F0(float a1, int a2, int a3); signed int sub_80A1F0(); double sub_80A280(); int __cdecl sub_80A290(int a1, int a2); int __cdecl sub_80A2C0(float, int, int, int); // idb float *__cdecl sub_80A2F0(int a1, float *a2, float *a3, float *a4); int __cdecl sub_80A330(int a1, unsigned int a2); int __cdecl sub_80A3A0(signed int a1, int a2, int a3); char __cdecl sub_80A3D0(float a1, int a2, int a3); signed int sub_80A4E0(); void __cdecl sub_80A580(int a1, signed int a2, unsigned __int8 a3); int __cdecl sub_80A590(signed int a1, unsigned int a2); int __cdecl sub_80A630(signed int a1, int a2, int a3); char __cdecl sub_80A660(float a1, int a2, int a3); signed int sub_80A7C0(); unsigned int sub_80A850(); _DWORD *sub_80AC40(); _DWORD *sub_80AD00(); int __thiscall sub_80AFE0(const char **this, int a2); char *sub_80B040(); _DWORD *sub_80B050(); char __thiscall sub_80B090(void *this, int a2); void __thiscall sub_80B100(_DWORD *this, int a2, _DWORD **a3); int __thiscall sub_80B1E0(const char **this, _DWORD *a2); _DWORD *__thiscall sub_80B240(_DWORD *this, _DWORD **a2); size_t __thiscall sub_80B2A0(int *this, size_t a2); unsigned int __thiscall sub_80B370(_DWORD *this, void *a2); _DWORD *__thiscall sub_80B520(_DWORD *this, char a2); char __thiscall sub_80B590(_DWORD *this, int a2); _DWORD *__thiscall sub_80B5C0(_DWORD *this, size_t a2); void *sub_80B610(); char __thiscall sub_80B620(_DWORD *this, const char *a2, _DWORD *a3); errno_t __thiscall sub_80B6B0(void **this, char *Src); void __thiscall sub_80B700(void **this, char *Src); char *sub_80B760(); void *__thiscall sub_80B770(void *this, char a2); void *__thiscall sub_80B7A0(void *this, char a2); float *__thiscall sub_80B7D0(float *this); void *sub_80B880(); double __thiscall sub_80B890(_DWORD *this, int a2); int *__thiscall sub_80B910(int *this, int *a2); _DWORD *__thiscall sub_80B980(_DWORD *this, int *a2); void __thiscall sub_80BA20(_DWORD *this); void __thiscall sub_80BAA0(_DWORD *this, int a2); void __thiscall sub_80BB00(_DWORD *this); double __thiscall sub_80BB80(int this, float a2, char a3); char __thiscall sub_80BCA0(_DWORD *this, int a2); int __thiscall sub_80BE40(_DWORD *this, _DWORD *a2); char __thiscall sub_80C180(_DWORD *this, int *a2); bool __thiscall sub_80C1F0(_DWORD *this, _DWORD *a2); char __thiscall sub_80C250(_DWORD *this, int a2); int sub_80C300(); // weak int __thiscall sub_80C320(_DWORD *this, _DWORD *a2); bool __thiscall sub_80C490(float *this, float *a2); unsigned int __thiscall sub_80C6B0(_DWORD *this); int __cdecl sub_80C710(signed int a1, int a2); void __thiscall sub_80C740(_DWORD *this, int a2); _DWORD *__thiscall sub_80C790(void *this, char a2); int __thiscall sub_80C7D0(_DWORD *this, const char *a2); int __thiscall sub_80C880(_DWORD *this); int __thiscall sub_80C8A0(_DWORD *this); int __thiscall sub_80C8C0(_DWORD *this); float *__thiscall sub_80C8E0(float *this, char *Src, int a3, int a4, int a5); int *__thiscall sub_80CB70(void *this, char a2); LONG __thiscall sub_80CC70(_DWORD *this); double __thiscall sub_80CD60(float *this, int a2, float a3); double __thiscall sub_80CE40(_DWORD *this, int a2); void __thiscall sub_80CEC0(_DWORD *this); char __thiscall sub_80D180(_DWORD *this, _DWORD *a2, int a3); char __thiscall sub_80D4C0(float *this, int a2, char a3, float a4, float a5, int a6, char a7); char __thiscall sub_80D580(int this, float a2, char a3); char __thiscall sub_80D630(void *this, int a2, float a3, float a4, int a5, float a6, float a7, int a8); char __thiscall sub_80D730(float *this, int a2, float a3, int a4, float a5, float a6); double __thiscall sub_80D840(float *this, int a2, float a3); void __thiscall sub_80DAE0(_DWORD *this, float a2, float a3, float a4); char __thiscall sub_80DC00(_DWORD *this); void __thiscall sub_80DE10(_DWORD *this, char *Src, char *a3); int __thiscall sub_80E200(int *this, _DWORD *a2); int __thiscall sub_80E2D0(_DWORD *this, signed int a2); void __thiscall sub_80E380(volatile LONG **this, void *a2); int __thiscall sub_80E590(const char **this, signed int a2); unsigned int __thiscall sub_80E710(int *this, void *a2); void *__thiscall sub_80ECD0(void *this, char a2); double __thiscall sub_80ED00(float *this, int a2, float a3); signed int __thiscall sub_80ED70(_DWORD *this, int a2, int *a3); void __thiscall sub_80EE70(_DWORD *this, float a2, float a3); char __thiscall sub_80F0C0(_DWORD *this, _DWORD *a2); char __thiscall sub_80F3F0(void *this, int a2, float a3, int a4, int a5, float a6, float a7, int a8); char __thiscall sub_80F470(_DWORD *this, char *Src, int a3); float *__thiscall sub_80F720(_DWORD *this, char *a2); char __thiscall sub_80F770(float *this, char *Src, int a3); void __thiscall sub_80F7F0(float *this, int a2); float **__cdecl sub_80FB10(float **a1, int a2); float **__cdecl sub_80FC40(float **a1, int a2, unsigned int a3); int __cdecl sub_80FD40(int, char *Src, int); // idb int __thiscall sub_80FDC0(_DWORD *this, signed int a2); bool __thiscall sub_80FDD0(float *this, int a2); _DWORD *__thiscall sub_80FDF0(_DWORD *this); void __thiscall sub_80FE40(float *this); float *__thiscall sub_80FEA0(_DWORD *this, int a2); int __thiscall sub_80FF20(int *this, void **a2); int __thiscall sub_80FF50(_DWORD *this, _DWORD *a2); char __thiscall sub_80FFE0(float *this, float a2); _DWORD *__thiscall sub_810060(_DWORD *this); float *__thiscall sub_810160(float *this, char a2, float a3, char a4); char *sub_810230(); void *__thiscall sub_810240(void *this, char a2); void __thiscall sub_810270(int this, float a2, int a3, int a4, int a5, float a6, int a7, int a8, float a9); float *__thiscall sub_810320(float *this); char *sub_810340(); void __thiscall sub_810350(_DWORD *this, int a2, int a3); float *__stdcall sub_8103F0(int a1, char a2, char a3, float a4, char a5); void __thiscall sub_810450(int this, float a2); char __stdcall sub_810580(int a1); float *__thiscall sub_8105B0(_DWORD *this, _DWORD **a2); int sub_810600(); // weak unsigned int __thiscall sub_810630(unsigned __int16 *this, char *a2); void __thiscall sub_810680(void **this); void __thiscall sub_810690(void **this, const char *a2); int __thiscall sub_8106F0(_DWORD *this, signed int a2); int __thiscall sub_810730(const char **this, signed int a2); void *__thiscall sub_810770(void *this, char a2); void *__thiscall sub_8107A0(void *this, char a2); char __thiscall sub_8107D0(_DWORD *this, int a2); unsigned int __thiscall sub_810840(_DWORD *this, _DWORD *a2); char __thiscall sub_810970(float *this, _DWORD *a2); int __cdecl sub_810B10(signed int a1, int a2); float *__thiscall sub_810B40(float *this); char *sub_810BA0(); char __thiscall sub_810BB0(_DWORD *this); char __thiscall sub_810BE0(_DWORD *this, signed int a2); float *__thiscall sub_810D60(_DWORD *this, _DWORD **a2); char __thiscall sub_810DB0(_DWORD *this, _DWORD *a2); int __thiscall sub_811410(_DWORD *this, unsigned int a2); int sub_811650(); // weak unsigned int __thiscall sub_811670(int *this, signed int a2); char __thiscall sub_811AB0(_DWORD *this, int a2); char __thiscall sub_811AE0(_DWORD *this, int a2); unsigned int __thiscall sub_811B10(_DWORD *this, char *a2); unsigned int __thiscall sub_811BD0(_DWORD *this); void **__thiscall sub_811CD0(void *this, char a2); void __thiscall sub_811D30(void **this, void *a2); void __thiscall sub_811DA0(void **this, char *Src); void __thiscall sub_811DF0(void **this, char *Src); _DWORD *__thiscall sub_811E40(_DWORD *this, _DWORD *a2, _DWORD *a3); void *__thiscall sub_811F10(void **this, char *a2, char *Src); int __thiscall sub_812030(_DWORD *this, _DWORD *a2); int __cdecl sub_812070(int a1, int a2); int __cdecl sub_8120A0(int a1, int a2); void __thiscall sub_8120D0(float **this, float *a2); void __thiscall sub_812170(void **this, void *a2); char **__thiscall sub_812250(char **this, char *Src, char *a3); void **__thiscall sub_8122F0(void **this, int a2, char *Src); int __thiscall sub_812350(_DWORD *this, int a2, int a3, char *Src, char *a5); void *__thiscall sub_812400(void **this); void *__thiscall sub_812460(void **this, int a2); int __stdcall sub_8124E0(int a1, _DWORD *a2); int __thiscall sub_812560(int *this, _DWORD *a2); _DWORD *__thiscall sub_8125A0(_DWORD *this, _DWORD *a2); int __thiscall sub_812600(_DWORD *this, int a2, char *Src); int __thiscall sub_812680(_DWORD *this, int a2, int a3, int a4, float a5, float a6, float a7, int a8); _DWORD *__thiscall sub_8126F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, unsigned int a5); void __thiscall sub_812830(_DWORD *this); int *__thiscall sub_812A90(int *this, int a2, char *Src, int a4); char __thiscall sub_812B30(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); int __thiscall sub_812B90(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_813770(_DWORD *this, void *a2, int a3, int a4, float a5); int __thiscall sub_813860(_DWORD *this, int a2, int a3, int a4, float a5); int __thiscall sub_813930(_DWORD *this, void *a2, char *Src, int a4); signed int __thiscall sub_8139A0(void **this, _DWORD *a2, unsigned int a3, char a4); // int __userpurge sub_814780@(void **a1@, int a2@, char *Src); void __thiscall sub_814AC0(_DWORD *this, _DWORD *a2); bool __thiscall sub_814AE0(float *this, int a2); BOOL __thiscall sub_814B30(float *this, float *a2); // float __userpurge sub_814B70@(float *this@, float *a2); int __thiscall sub_814BD0(int this, float a2); // float __userpurge sub_814C10@(int this@, float *a2); int __thiscall sub_814C70(_DWORD *this); int __thiscall sub_814D50(_DWORD *this, _DWORD *a2); int __thiscall sub_814DE0(_DWORD *this, unsigned int a2); int __thiscall sub_814E10(_DWORD *this); bool __thiscall sub_814E20(int this); char *sub_814E80(); char __stdcall sub_814E90(int a1); char __thiscall sub_814EC0(void **this, void *a2, int a3); char __thiscall sub_814FA0(int this, float a2); // float __userpurge sub_815140@(int this@, float *a2); _DWORD *__thiscall sub_815240(void *this, char a2); int __thiscall sub_8152B0(_DWORD *this, _DWORD **a2); int sub_815340(); int __thiscall sub_8153A0(int *this, void **a2); int __thiscall sub_815440(_DWORD *this, signed int a2); unsigned int __thiscall sub_8154C0(unsigned __int16 *this, char *a2); float *__thiscall sub_815510(int this, float *a2); const char *__thiscall sub_8155A0(_WORD *this); int __thiscall sub_8155E0(_DWORD *this, _DWORD *a2); char __thiscall sub_815670(float *this, int a2); char *sub_8156A0(); char __stdcall sub_8156B0(int a1); char __thiscall sub_8156E0(int this, float a2); int __cdecl sub_815880(signed int a1, int a2); _DWORD *__thiscall sub_8158B0(void *this, char a2); int __thiscall sub_815900(_WORD *this, _DWORD **a2); float *sub_815950(); __int16 __thiscall sub_815980(int *this, _DWORD *a2); int __thiscall sub_8159F0(_DWORD *this, signed int a2); unsigned int __thiscall sub_815A30(unsigned __int16 *this, char *a2); int __thiscall sub_815A80(_DWORD *this, signed int a2); char __thiscall sub_815A90(float *this, int a2); int __thiscall sub_815AA0(_DWORD *this, float *a2); char __thiscall sub_815AC0(int this, float a2); float *__thiscall sub_815B40(float *this); char *sub_815B60(); float *__thiscall sub_815B70(_DWORD *this, _DWORD **a2); int sub_815BC0(); // weak unsigned int __thiscall sub_815BF0(unsigned __int16 *this, char *a2); char __stdcall sub_815C40(int a1, int a2, float a3, int a4, float a5, float a6); int __thiscall sub_815C70(_DWORD *this, int a2, int a3); char *sub_815D00(); void *__thiscall sub_815D10(void *this, char a2); void __thiscall sub_815D40(int this, float a2); char __stdcall sub_815D80(int a1, int a2, float a3, int a4, char a5, float a6, int a7); char __thiscall sub_815DE0(_DWORD *this, int a2); char __thiscall sub_815E40(_DWORD *this, int a2); char __thiscall sub_815E80(float *this, _DWORD *a2); void __thiscall sub_815FC0(_BYTE *this); int __thiscall sub_816030(_BYTE *this, int a2, char *Src, int a4); void __thiscall sub_816090(_BYTE *this); void **__thiscall sub_816100(void *this, char a2); void **__thiscall sub_816140(void *this, char a2); void **__thiscall sub_816180(void *this, char a2); void **__thiscall sub_8161C0(void *this, char a2); int __thiscall sub_816200(_DWORD *this, signed int a2); int __thiscall sub_8162A0(int *this, signed int a2); _DWORD *__thiscall sub_816340(_DWORD *this, _DWORD *a2, unsigned int a3); void __thiscall sub_816400(_DWORD *this); void *__thiscall sub_816460(void *this, char a2); LONG __thiscall sub_816490(_DWORD *this); void *sub_8164F0(); _DWORD *__thiscall sub_816500(_DWORD *this, _DWORD *a2, int a3); void *__thiscall sub_816650(void *this, char a2); void *__thiscall sub_816680(void *this, char a2); char __thiscall sub_8166B0(_DWORD *this, int a2, char *Src, int a4); unsigned int __thiscall sub_816760(void *this, int a2, _DWORD **a3); unsigned int __thiscall sub_8168B0(_DWORD *this, _DWORD *a2); void __thiscall sub_816AD0(_DWORD *this, _DWORD *a2); void *__thiscall sub_816BD0(void *this, char a2); _DWORD *__thiscall sub_816C00(_DWORD *this, int a2); char *sub_816C70(); int __thiscall sub_816C80(_DWORD *this, int a2); char __thiscall sub_816CF0(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_816D20(void *this, char a2); float *__thiscall sub_816D60(float *this); int __thiscall sub_816DF0(float *this, _DWORD *a2, char a3); float *__thiscall sub_816EF0(void *this, _DWORD **a2); float *sub_816F40(); BOOL __cdecl sub_816F60(float *a1, float *a2); _DWORD *__thiscall sub_816F90(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); char __cdecl sub_817010(float a1, int a2, int a3, int a4, char a5); void __cdecl sub_817070(int a1, int a2, int a3, int a4, float a5, float a6, int a7, int a8); void __cdecl sub_817370(int a1, int a2, int a3, int a4, float a5, float a6); int __thiscall sub_817460(void *this, signed int a2); int __cdecl sub_817490(signed int a1, int a2); double __cdecl sub_8174C0(float a1, float a2, float a3); double __cdecl sub_8174E0(float a1, float a2, float a3, float a4, float a5); float *__cdecl sub_817540(float a1, float a2, int a3, float a4, float a5, int a6, float a7, int a8, int a9, int a10); char *sub_817610(); void *__thiscall sub_817620(void *this, char a2); char *sub_817650(); void *__thiscall sub_817660(void *this, char a2); void __thiscall sub_817690(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_817750(_DWORD *this, int a2); void __thiscall sub_8177D0(_DWORD *this, int a2); void __thiscall sub_817850(_DWORD *this, int a2); void __thiscall sub_8178D0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_817990(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); int __thiscall sub_8179E0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); int __cdecl sub_817A30(int a1, int a2); void __cdecl sub_817AD0(int a1); void __cdecl sub_817D10(int a1); LONG __cdecl sub_817E30(int a1); void __cdecl sub_8180B0(int a1, _DWORD *a2); void __cdecl sub_8181D0(int a1, _DWORD *a2); int __thiscall sub_818220(_DWORD *this, _BYTE *a2); int __thiscall sub_818240(int *this, void **a2); int __thiscall sub_818270(_DWORD *this, _DWORD *a2); char __thiscall sub_818300(int this, float a2); float *__thiscall sub_818390(float *this); char *sub_8183B0(); float *__thiscall sub_8183C0(_DWORD *this, _DWORD **a2); int sub_818410(); // weak unsigned int __thiscall sub_818440(unsigned __int16 *this, char *a2); float *sub_818490(); char *sub_818500(); LONG __thiscall sub_818510(_DWORD *this); char __thiscall sub_818580(_DWORD *this, int a2); void *__thiscall sub_818710(void *this, char a2); char __thiscall sub_818740(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_8187A0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_818800(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_818860(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_8188C0(int *this, signed int a2); int __thiscall sub_818AF0(_DWORD *this, signed int a2); unsigned int __thiscall sub_818C80(int *this, int a2); int __thiscall sub_818DA0(_DWORD *this, _DWORD *a2); char __thiscall sub_818E00(_DWORD *this, int a2); bool __thiscall sub_818E40(float *this, int a2); char *sub_818EA0(); void __thiscall sub_818EB0(int this, _DWORD *a2); LONG __thiscall sub_818ED0(_DWORD *this); void __thiscall sub_818F30(int this); char __thiscall sub_819060(float *this, float a2); void __thiscall sub_819080(int this); float *sub_819280(); void __thiscall sub_8192D0(_DWORD *this, int a2); void *__thiscall sub_819330(void *this, char a2); int __thiscall sub_819360(int *this, signed int a2); int __thiscall sub_8193A0(_DWORD *this, signed int a2); unsigned int __thiscall sub_8193F0(unsigned __int16 *this, char *a2); int __thiscall sub_819440(int *this, _DWORD **a2); signed int __stdcall sub_8194D0(__int16 a1); BOOL __thiscall sub_819510(float *this, float *a2); BOOL __thiscall sub_819560(float *this); BOOL __thiscall sub_8195B0(float *this, float *a2); int __thiscall sub_819640(_DWORD *this, __int16 a2); int __thiscall sub_819690(_DWORD *this, __int16 a2); int __thiscall sub_8196E0(_DWORD *this, __int16 a2); char __thiscall sub_819730(_DWORD *this, __int16 a2); void __thiscall sub_819780(_DWORD *this, float a2, float a3); bool __thiscall sub_8197B0(float *this, int a2); int __thiscall sub_819850(int *this, _DWORD *a2); char __thiscall sub_8198C0(_DWORD *this, int a2); int __thiscall sub_819900(char *this, int a2); char __thiscall sub_819930(float *this, int a2); float *__thiscall sub_819990(float *this, int a2); char *sub_819A20(); float *__thiscall sub_819A30(float *this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); void __thiscall sub_819A70(_DWORD *this, float *a2, float *a3); _DWORD *__thiscall sub_819C50(_DWORD *this, float a2, int a3); char __thiscall sub_819D10(int this, float a2, int a3, int a4); void __thiscall sub_819ED0(_DWORD *this); int __thiscall sub_81A250(_DWORD *this, _DWORD *a2, _DWORD **a3); float *sub_81A2D0(); _DWORD *__thiscall sub_81A350(void *this, char a2); float *__thiscall sub_81A3A0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_81A440(float *this, int a2); char __thiscall sub_81A4B0(_DWORD *this, _DWORD *a2); _DWORD *sub_81A530(); int __thiscall sub_81A570(_DWORD *this, int a2); int __thiscall sub_81A600(int *this, signed int a2); char __thiscall sub_81A690(_DWORD *this, int a2); int __thiscall sub_81A6A0(const char **this, _DWORD *a2); char __thiscall sub_81A6B0(_DWORD *this, int a2); void *sub_81A6C0(); _DWORD *sub_81A6D0(); void __thiscall sub_81A700(void **this, char *Src); void __thiscall sub_81A750(_DWORD *this, unsigned int a2); void __thiscall sub_81A920(_DWORD *this); void *__thiscall sub_81A980(void *this, char a2); _DWORD *__thiscall sub_81A9B0(_DWORD *this, char *Src, int a3, int a4); void *sub_81AA90(); LONG __thiscall sub_81AAA0(_DWORD *this); unsigned int __thiscall sub_81ABB0(_DWORD *this, char *Src, int a3); _DWORD *sub_81AC60(); void __thiscall sub_81AC80(int *this, signed int a2); void __thiscall sub_81AD70(unsigned int *this, _DWORD *a2); void *__thiscall sub_81AE40(void *this, char a2); _DWORD *__cdecl sub_81AE70(int a1, int a2, char *Src); int __cdecl sub_81B100(int, int, int, char *Src); // idb int __cdecl sub_81B1A0(int, char *, int, int); // idb void __thiscall sub_81B230(int *this, float a2, float a3); _DWORD *sub_81B270(); char *sub_81B2B0(); char __thiscall sub_81B2C0(_DWORD *this, int a2); _DWORD *__thiscall sub_81B340(void *this, char a2); int __thiscall sub_81B380(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_81B3E0(_DWORD *this, int a2, float a3, float a4); int __thiscall sub_81B490(int *this, signed int a2); int __thiscall sub_81B530(_DWORD *this, signed int a2); unsigned int __thiscall sub_81B5B0(_DWORD *this, int a2); int __thiscall sub_81B630(int *this, void **a2); int __thiscall sub_81B640(_DWORD *this, _DWORD *a2); char __thiscall sub_81B650(_DWORD *this, int a2); int __thiscall sub_81B660(_DWORD *this, signed int a2); char __thiscall sub_81B670(float *this, int a2); char *sub_81B680(); void *__thiscall sub_81B690(void *this, char a2); char *sub_81B6C0(); void __thiscall sub_81B6D0(int this, float a2); float *__thiscall sub_81B7A0(_DWORD *this, _DWORD **a2); int sub_81B800(); // weak unsigned int __thiscall sub_81B840(unsigned __int16 *this, char *a2); signed int __stdcall sub_81B890(int a1); int __stdcall sub_81B8A0(int a1); int __thiscall sub_81B8B0(_DWORD *this, int a2); char __thiscall sub_81B8C0(_DWORD *this, int a2); bool __thiscall sub_81B8E0(int this, int a2); int __thiscall sub_81B940(_DWORD *this); void __thiscall sub_81BA80(_DWORD *this, float a2, float a3); int __thiscall sub_81BAB0(int *this, _DWORD *a2); char __thiscall sub_81BB20(_DWORD *this, int a2); int __thiscall sub_81BB60(float *this, int a2); char __thiscall sub_81BB90(float *this, int a2); char *sub_81BC20(); void __thiscall sub_81BC30(_DWORD *this, float *a2, float *a3); int __thiscall sub_81BD20(_DWORD *this, float a2, int a3); char __thiscall sub_81BDE0(int this, float a2, int a3, int a4); int __thiscall sub_81BF50(_DWORD *this, _DWORD *a2, _DWORD **a3); float *sub_81BFF0(); float *__thiscall sub_81C050(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_81C0D0(void *this, int a2); int __stdcall sub_81C180(int a1); int __thiscall sub_81C190(void *this, int a2); LONG __thiscall sub_81C1A0(_DWORD *this); int __thiscall sub_81C1D0(int this, int a2, int a3, int a4); _DWORD *sub_81C220(); char __thiscall sub_81C260(_DWORD *this, int a2); int __thiscall sub_81C2E0(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_81C340(_DWORD *this, int a2, float a3, float a4); int __thiscall sub_81C3F0(int *this, signed int a2); int __thiscall sub_81C490(_DWORD *this, signed int a2); unsigned int __thiscall sub_81C510(_DWORD *this, int a2); int __thiscall sub_81C590(_DWORD *this, int a2); int __thiscall sub_81C5A0(_DWORD *this, int a2); int __thiscall sub_81C5B0(_DWORD *this, int a2); char __thiscall sub_81C5C0(_DWORD *this, int a2); bool __thiscall sub_81C5E0(int this, int a2); int __thiscall sub_81C630(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_81C680(_DWORD *this, float a2, float a3); int __thiscall sub_81C6B0(int *this, _DWORD *a2); char __thiscall sub_81C720(_DWORD *this, int a2); int __thiscall sub_81C760(char *this, int a2); float *__thiscall sub_81C790(float *this, int a2); char *sub_81C7E0(); float *__thiscall sub_81C7F0(float *this, int a2, int a3, int a4); int __thiscall sub_81C830(_DWORD *this); int __thiscall sub_81C950(_DWORD *this, float a2, int a3); char __thiscall sub_81CA10(int this, float a2, int a3, int a4); LONG __thiscall sub_81CB40(_DWORD *this, _DWORD *a2, _DWORD **a3); float *sub_81CBD0(); char __thiscall sub_81CC20(float *this, int a2); _DWORD *__thiscall sub_81CCA0(void *this, char a2); float *__thiscall sub_81CCF0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_81CD70(void *this, int a2); int __stdcall sub_81CE20(__int16 a1); int __thiscall sub_81CE50(_DWORD *this, __int16 a2); int __thiscall sub_81CE90(_DWORD *this, __int16 a2); int __thiscall sub_81CED0(_DWORD *this, __int16 a2); char __thiscall sub_81CF10(_DWORD *this, __int16 a2); void __thiscall sub_81CF50(int *this, float *a2, float *a3); void __thiscall sub_81D020(_DWORD *this, float a2, float a3); int __thiscall sub_81D050(_DWORD *this, int a2); char __thiscall sub_81D090(_DWORD *this, int a2); int __thiscall sub_81D0D0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); LONG __thiscall sub_81D110(_DWORD *this); char *sub_81D1D0(); int __thiscall sub_81D1E0(_DWORD *this, int a2, int a3, int a4, float a5); float *__thiscall sub_81D240(_DWORD *this, int a2, int a3, float a4, int a5); double __thiscall sub_81DA90(_DWORD *this, int a2, int a3, float a4); int __thiscall sub_81DB60(_DWORD *this, float a2, int a3); char __thiscall sub_81DC20(_DWORD *this, int a2); void *__thiscall sub_81DE00(void *this, char a2); double __thiscall sub_81DE30(int this); signed int __thiscall sub_81DEE0(int this); int __thiscall sub_81DF00(int this, float a2, int a3, int a4, int a5); int __thiscall sub_81E110(int this, float a2, int a3, int a4, int a5); int __thiscall sub_81E270(int *this, signed int a2); // _DWORD *__userpurge sub_81E340@(int a1@, double a2@, _DWORD *a3); int __thiscall sub_81E430(_DWORD *this, int a2); unsigned int __thiscall sub_81E510(void *this, int a2); float *__thiscall sub_81E560(float *this, int a2, int a3); char __thiscall sub_81E630(int this, float a2, int a3, int a4); char __thiscall sub_81E830(void *this, int a2, _DWORD **a3); int sub_81EA10(); // weak int __thiscall sub_81EAC0(void *this, _DWORD **a2); int __thiscall sub_81EB90(_DWORD *this, int a2); char __thiscall sub_81EBD0(_DWORD *this, int a2); _DWORD *__thiscall sub_81EC10(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, _BYTE *a5); LONG __thiscall sub_81EC60(_DWORD *this); char *sub_81ED20(); int __thiscall sub_81ED30(_DWORD *this, int a2, int a3, int a4, float a5); float *__thiscall sub_81ED90(_DWORD *this, int a2, int a3, float a4, int a5); double __thiscall sub_81F5E0(_DWORD *this, int a2, int a3, float a4); char __thiscall sub_81F6B0(float *this, int a2); void *__thiscall sub_81F860(void *this, char a2); double __thiscall sub_81F890(int this); int __thiscall sub_81F940(int this, float a2, int a3, int a4, int a5); int __thiscall sub_81FB40(int this, float a2, int a3, int a4, int a5); int __thiscall sub_81FCA0(int *this, signed int a2); // _DWORD *__userpurge sub_81FD90@(_DWORD *a1@, double a2@, _DWORD *a3); int __thiscall sub_81FE80(_DWORD *this, signed int a2); unsigned int __thiscall sub_81FF60(unsigned __int16 *this, char *a2); char __thiscall sub_81FFB0(int this, int a2); char __thiscall sub_8200C0(void *this, int a2, _DWORD **a3); int sub_8202A0(); // weak int __thiscall sub_820310(void *this, _DWORD **a2); __int16 __thiscall sub_820390(_WORD *this); int __thiscall sub_8203A0(_DWORD *this, unsigned __int16 a2); int __thiscall sub_8203C0(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, int a6); int __thiscall sub_8203E0(_WORD *this, float a2, float a3); int __stdcall sub_820430(int a1, int a2); int __thiscall sub_820450(_DWORD *this, _DWORD *a2); char __thiscall sub_820460(_DWORD *this, int a2); char __thiscall sub_820470(float *this, int a2); LONG __thiscall sub_820510(_DWORD *this); int __thiscall sub_820570(_WORD *this, float a2); int __thiscall sub_8206C0(_DWORD *this, unsigned __int16 a2); unsigned __int16 __thiscall sub_8206E0(int this, const char *a2); void __thiscall sub_820760(int this); void __thiscall sub_820840(_WORD *this, unsigned __int16 a2); char *__thiscall sub_820920(void *this, char a2); float *__thiscall sub_820990(_DWORD *this, unsigned __int16 a2); void __thiscall sub_820A20(_WORD *this, int a2, _DWORD **a3); int __thiscall sub_820A80(_DWORD *this, _DWORD **a2); int __thiscall sub_820B50(_WORD *this, _DWORD **a2); float *sub_820BC0(); void __thiscall sub_820C00(int *this, _DWORD *a2); int __thiscall sub_820C70(_DWORD *this, signed int a2); int __thiscall sub_820CE0(unsigned __int16 *this, _DWORD *a2); double __thiscall sub_820E60(float *this); _DWORD *sub_820E70(); char *sub_820EB0(); char *__thiscall sub_820EC0(void *this, char a2); void __thiscall sub_820F90(_DWORD *this, int a2, int a3, int a4); bool __thiscall sub_821050(float **this, int a2, unsigned int a3); char __thiscall sub_821110(_DWORD *this, int a2); int __thiscall sub_8211A0(_DWORD *this, _DWORD *a2, int a3); _DWORD *__thiscall sub_821230(void *this, char a2); unsigned int __thiscall sub_821270(int *this, _DWORD *a2); unsigned int __thiscall sub_821600(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_821710(int *this, unsigned int a2); char __thiscall sub_8218B0(_DWORD *this, int a2); int __thiscall sub_8218E0(char *this); void __thiscall sub_821910(char *this, float *a2, float *a3); int __thiscall sub_8219E0(char *this, float a2, float a3); int __thiscall sub_821A20(char *this, float a2, float a3); char __thiscall sub_821AD0(int this); char __thiscall sub_821B40(void *this, int a2); char __thiscall sub_821B90(char *this, int a2); char __thiscall sub_821BE0(char *this, int a2); float *__thiscall sub_821CA0(float *this, int a2, __int16 a3, char a4); char *sub_821DC0(); LONG __thiscall sub_821DD0(_DWORD *this); char __thiscall sub_821E40(int this, float a2, int a3, int a4); int __thiscall sub_822550(_WORD *this, int a2, _DWORD **a3); float *sub_822630(); void *__thiscall sub_822650(void *this, char a2); float *__thiscall sub_822680(_WORD *this, _DWORD **a2); int __thiscall sub_8226D0(int *this, int *a2); int __thiscall sub_822790(char *this, int a2); unsigned int __thiscall sub_822810(char *this, int a2); int __thiscall sub_8228C0(_DWORD *this, _DWORD *a2); char __thiscall sub_8228E0(_DWORD *this, int a2); char __thiscall sub_822920(float *this, int a2); void __thiscall sub_822970(int this, int a2); char __thiscall sub_822DD0(_DWORD *this, int a2); char *sub_822E30(); int __thiscall sub_822E40(void *this, _DWORD **a2); int sub_822EC0(); // weak int __thiscall sub_822F00(int *this, signed int a2); int __thiscall sub_822F70(_DWORD *this, signed int a2); unsigned int __thiscall sub_822FC0(unsigned __int16 *this, char *a2); int __thiscall sub_823010(_DWORD *this, _DWORD *a2); bool __thiscall sub_823020(float *this, int a2); float *__thiscall sub_823040(_DWORD *this, float *a2); char *sub_823060(); char __thiscall sub_823070(int this, float a2); _DWORD *__thiscall sub_823100(void *this, char a2); float *__thiscall sub_823150(_DWORD *this, _DWORD **a2); int sub_8231A0(); // weak unsigned int __thiscall sub_8231D0(unsigned __int16 *this, char *a2); bool __thiscall sub_823220(_DWORD *this, int a2); float *__thiscall sub_823240(int this, float *a2); const char *__thiscall sub_8232A0(_BYTE *this); char __thiscall sub_8232C0(float *this, int a2); char *sub_8232F0(); char __stdcall sub_823300(int a1); char __thiscall sub_823330(int this, float a2); int __thiscall sub_823530(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_823600(void *this, char a2); int __thiscall sub_823650(_WORD *this, _DWORD **a2); float *sub_8236A0(); __int16 __thiscall sub_8236D0(int *this, _DWORD *a2); unsigned int __thiscall sub_823740(unsigned __int16 *this, char *a2); char __thiscall sub_823790(_DWORD *this, int a2); void __thiscall sub_8237A0(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_823870(_DWORD *this, unsigned int a2, _DWORD *a3); void *__thiscall sub_8238E0(void *this, char a2); LONG __stdcall sub_823910(int a1, int a2, LONG a3); void __thiscall sub_823990(_BYTE *this); void **__thiscall sub_823A00(void *this, char a2); void **__thiscall sub_823A40(void *this, char a2); char __thiscall sub_823A80(_DWORD *this); void __thiscall sub_823AB0(_DWORD *this, _DWORD *a2); char __thiscall sub_823CA0(_DWORD *this, char *a2, char *Src, int a4); void __thiscall sub_823D30(int *this, void **a2); void *__thiscall sub_824190(void *this, char a2); void *sub_824220(); _DWORD *__thiscall sub_824230(void *this, char a2); float *sub_824260(); void __thiscall sub_824280(_DWORD *this, float a2, float a3); _DWORD *sub_824340(); char *sub_824390(); char __thiscall sub_8243A0(int this, int a2, int a3, int a4); char __thiscall sub_8243E0(int this, int a2, int a3, int a4); char __thiscall sub_824420(_DWORD *this, int a2); LONG __thiscall sub_824550(_DWORD *this); int __thiscall sub_8245C0(int this, int a2, int a3, int a4); char __thiscall sub_824630(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_824690(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_8246F0(_DWORD *this, int a2, float a3, float a4); void *__thiscall sub_824820(void *this, char a2); char __thiscall sub_824850(int *this, signed int a2); int __thiscall sub_824A00(_DWORD *this, signed int a2); unsigned int __thiscall sub_824B30(int *this, int a2); _DWORD *__thiscall sub_824C20(_DWORD *this, float a2, float a3); int __thiscall sub_824C70(_DWORD *this, int a2); char __thiscall sub_824CC0(_DWORD *this, int a2); char __thiscall sub_824D30(float *this, int a2); int __thiscall sub_824DD0(_DWORD *this, unsigned __int16 a2); int __thiscall sub_824E00(_DWORD *this, unsigned __int16 a2); LONG __thiscall sub_824E20(_DWORD *this, int a2, unsigned __int16 a3); int __thiscall sub_824E80(_DWORD *this); void __thiscall sub_824E90(int this); void __thiscall sub_824F40(int this, float a2); void __thiscall sub_824F90(float *this, int a2); void __thiscall sub_825100(void *this, _DWORD *a2); int __thiscall sub_825170(int this); int __thiscall sub_8251B0(_DWORD *this); __int16 __thiscall sub_825280(_DWORD *this); signed __int16 __thiscall sub_825290(_DWORD *this, const char *a2); float *__thiscall sub_825310(_DWORD *this, float a2); void __thiscall sub_825360(_DWORD *this, int a2, float a3); __int16 __thiscall sub_8253E0(_DWORD *this, unsigned __int16 a2); __int16 __thiscall sub_8254C0(_DWORD *this, int a2, char a3); void *sub_825540(); int __thiscall sub_825550(_DWORD *this); LONG __thiscall sub_825560(_DWORD *this); int __thiscall sub_8255D0(void *this, int a2, _DWORD **a3); float *sub_825680(); int __thiscall sub_8256C0(int *this, signed int a2); int __thiscall sub_825770(_DWORD *this, _DWORD *a2); int __thiscall sub_825900(_DWORD *this, signed int a2); void *__thiscall sub_8259D0(void *this, char a2); int __thiscall sub_825A00(void *this, _DWORD **a2); float *__stdcall sub_825A50(int a1, char a2, int a3, float a4, char a5); int __stdcall sub_825A90(int a1, int a2); float *sub_825AB0(); bool __thiscall sub_825AF0(_DWORD *this, int a2); char __thiscall sub_825B00(float *this, int a2); char *sub_825B30(); _DWORD *__thiscall sub_825B40(void *this, char a2); float *__thiscall sub_825B80(_DWORD *this, int a2); int __thiscall sub_825C00(_DWORD *this); float *__thiscall sub_825C60(float *this, _DWORD **a2); int __thiscall sub_825CB0(_DWORD *this, int a2, int a3); char __thiscall sub_825D50(int this, float a2); int __thiscall sub_825E00(int *this, _DWORD *a2); int __thiscall sub_825E40(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_825E80(unsigned __int16 *this, char *a2); int __stdcall sub_825F00(int a1, int a2); float *sub_825F20(); char *sub_825F60(); _DWORD *__thiscall sub_825F70(void *this, char a2); float *__thiscall sub_825FB0(_DWORD *this, int a2); float *__thiscall sub_825FF0(float *this, _DWORD **a2); void __thiscall sub_826040(_DWORD *this, int a2, int a3); char __thiscall sub_8260A0(int this, float a2); int __thiscall sub_826120(int *this, void **a2); unsigned int __thiscall sub_826170(unsigned __int16 *this, char *a2); float *__thiscall sub_8261F0(float *this, int a2); char *sub_826230(); float *__thiscall sub_826240(float *this, float a2); int __thiscall sub_826270(_DWORD *this, int a2); int __thiscall sub_826280(_DWORD *this, int a2); char __thiscall sub_826290(_DWORD *this, int a2); bool __thiscall sub_8262B0(int this, int a2); void __thiscall sub_8262E0(float *this); void __thiscall sub_8263E0(float *this, float a2); void __thiscall sub_826420(_DWORD *this, float a2, float a3); float *sub_826450(); char __thiscall sub_826490(float *this, int a2); int __thiscall sub_8264F0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); int __thiscall sub_826540(_DWORD *this, float a2, int a3); char __thiscall sub_826600(int this, float a2, int a3, int a4); LONG __thiscall sub_8266B0(void *this, int a2, _DWORD **a3); int __thiscall sub_826730(int *this, signed int a2); int __thiscall sub_8267B0(_DWORD *this, int a2); int __thiscall sub_826800(void *this, _DWORD **a2); unsigned int __thiscall sub_826870(void *this, int a2); float *__stdcall sub_826930(int a1, char a2, int a3, float a4, char a5); float *sub_826970(); char __thiscall sub_8269A0(float *this, int a2); char *sub_8269B0(); float *__thiscall sub_8269C0(_DWORD *this, int a2); float *__thiscall sub_826A00(_DWORD *this, _DWORD **a2); void __thiscall sub_826A50(_DWORD *this, int a2, int a3); char __thiscall sub_826AB0(int this, float a2); unsigned int __thiscall sub_826B30(unsigned __int16 *this, char *a2); void __thiscall sub_826B80(int *this, float a2, float a3); LONG __thiscall sub_826BC0(_DWORD *this); void __thiscall sub_826BF0(int this, int a2, int a3, int a4); _DWORD *sub_826C40(); char __thiscall sub_826C80(_DWORD *this, int a2); int __thiscall sub_826D00(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_826D70(_DWORD *this, int a2, float a3, float a4); int __thiscall sub_826E20(int *this, signed int a2); int __thiscall sub_826EC0(_DWORD *this, signed int a2); unsigned int __thiscall sub_826F40(_DWORD *this, int a2); int __thiscall sub_826FC0(_DWORD *this, float *a2); char __thiscall sub_826FE0(float *this, int a2); float *__stdcall sub_827010(int a1, char a2, int a3, float a4, char a5); int __thiscall sub_827050(_DWORD *this); char __thiscall sub_827080(_DWORD *this, int a2); void __thiscall sub_8270D0(_DWORD *this); void *__thiscall sub_827130(void *this, char a2); void *sub_827160(); void __thiscall sub_827170(int this, float a2); int __thiscall sub_827290(_DWORD *this, unsigned int a2); float *__thiscall sub_827310(float *this); _DWORD *__thiscall sub_8273A0(void *this, char a2); unsigned int __thiscall sub_827410(_DWORD *this, _DWORD *a2, _DWORD **a3); float *sub_8274C0(); unsigned int __thiscall sub_8274E0(int *this, float a2); void __thiscall sub_8276D0(_DWORD *this, _DWORD *a2); float *__thiscall sub_827760(_DWORD *this, _DWORD **a2); signed int __stdcall sub_8277B0(int a1); int __thiscall sub_8277C0(_DWORD *this, int a2); int __thiscall sub_8277D0(_DWORD *this, int a2); bool __thiscall sub_8277E0(int this, int a2); int __thiscall sub_827840(_DWORD *this, int a2, int a3, int a4, int a5); void __thiscall sub_827890(_DWORD *this, float a2, float a3); int __thiscall sub_8278C0(char *this, int a2); float *__thiscall sub_8278F0(float *this, int a2); char *sub_827950(); float *__thiscall sub_827960(float *this, int a2, int a3, int a4, int a5); int __thiscall sub_8279A0(_DWORD *this); int __thiscall sub_827AE0(_DWORD *this, float a2, int a3); char __thiscall sub_827BA0(int this, float a2, int a3, int a4); float *sub_827D10(); char __thiscall sub_827D70(float *this, int a2); _DWORD *__thiscall sub_827DD0(void *this, char a2); float *__thiscall sub_827E20(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_827EA0(void *this, int a2); float *__stdcall sub_827F50(int a1, char a2, int a3, float a4, char a5); int __stdcall sub_827F90(int a1, int a2); float *sub_827FB0(); int __thiscall sub_827FE0(_DWORD *this, _DWORD *a2); char *sub_827FF0(); float *__thiscall sub_828000(_DWORD *this, int a2); float *__thiscall sub_828050(_DWORD *this, _DWORD **a2); int __thiscall sub_8280A0(int *this, void **a2); int __thiscall sub_8280D0(_DWORD *this, _DWORD *a2); int __thiscall sub_828160(_DWORD *this, int a2, int a3); char __thiscall sub_8281D0(int this, float a2); unsigned int __thiscall sub_828280(unsigned __int16 *this, char *a2); void __thiscall sub_8282D0(int *this, float a2, float a3); char *sub_828310(); _DWORD *sub_828320(); char __thiscall sub_828360(_DWORD *this, int a2); _DWORD *__thiscall sub_8283E0(void *this, char a2); int __thiscall sub_828420(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_828480(_DWORD *this, int a2, float a3, float a4); int __thiscall sub_828530(int *this, signed int a2); int __thiscall sub_8285B0(_DWORD *this, signed int a2); unsigned int __thiscall sub_828630(_DWORD *this, int a2); signed int __stdcall sub_8286B0(__int16 a1); signed int __stdcall sub_8286F0(__int16 a1); signed int __thiscall sub_828720(_DWORD *this, __int16 a2); int __thiscall sub_828750(_DWORD *this, int a2, unsigned __int16 a3); int __thiscall sub_828780(char *this, int a2, _DWORD **a3); char *sub_8287C0(); float *__thiscall sub_8287D0(float *this, int a2, int a3, int a4, int a5, int a6); bool __thiscall sub_828850(float *this, int a2); float *__thiscall sub_8288D0(float *this, _DWORD **a2); float *sub_828950(); bool __thiscall sub_828980(float *this, int a2); char __thiscall sub_8289D0(int this, float a2, int a3, int a4); int __thiscall sub_828BC0(char *this, int a2); int __thiscall sub_828C40(int *this, signed int a2); unsigned int __thiscall sub_828CC0(float *this, int a2); bool __thiscall sub_828DC0(void *this, __int16 a2); signed int __thiscall sub_828DF0(_DWORD *this, __int16 a2); int __thiscall sub_828E10(_DWORD *this, int a2, __int16 a3); int __thiscall sub_828E30(_DWORD *this, _DWORD *a2, _DWORD **a3); char *sub_828E70(); float *__thiscall sub_828E80(float *this, int a2, int a3, int a4); void *__thiscall sub_828EB0(void *this, char a2); char __thiscall sub_828EE0(int this, float a2, int a3, int a4); float *__thiscall sub_828FC0(_DWORD *this, _DWORD **a2); int sub_829020(); // weak int __thiscall sub_829060(char *this, int a2); bool __thiscall sub_8290B0(float *this, int a2); int __thiscall sub_829110(int *this, signed int a2); unsigned int __thiscall sub_829160(float *this, int a2); float *__thiscall sub_8291E0(float *this, int a2, int a3, int a4); BOOL __stdcall sub_829210(__int16 a1); signed int __thiscall sub_829230(_DWORD *this, __int16 a2); int __thiscall sub_829250(_DWORD *this, int a2, __int16 a3); int __thiscall sub_829270(float *this, int a2, _DWORD **a3); float *sub_8292A0(); bool __thiscall sub_8292E0(float *this, int a2); char *sub_829320(); char __thiscall sub_829330(int this, float a2, int a3, int a4); int __thiscall sub_8293B0(void *this, _DWORD **a2); int __thiscall sub_829410(_DWORD *this, int a2); int __thiscall sub_829470(int *this, signed int a2); unsigned int __thiscall sub_8294D0(float *this, int a2); char __thiscall sub_829590(float *this, int a2); char *sub_8295E0(); int __thiscall sub_8295F0(char *this, _DWORD **a2); float *sub_8296A0(); char __thiscall sub_829710(int this, float a2, int a3, int a4); int __thiscall sub_829930(int *this, signed int a2); int __thiscall sub_829970(char *this, int a2); unsigned int __thiscall sub_8299B0(float *this, int a2); int __stdcall sub_829A00(int a1); bool __thiscall sub_829A10(_DWORD *this, int a2); char __thiscall sub_829A30(float *this, int a2); char *sub_829A80(); char __thiscall sub_829A90(int this, float a2, int a3, int a4); float *__thiscall sub_829B80(float *this, _DWORD **a2); float *sub_829BF0(); int __thiscall sub_829C40(int *this, signed int a2); int __thiscall sub_829C80(char *this, int a2); unsigned int __thiscall sub_829CC0(float *this, int a2); char __thiscall sub_829D10(float *this, int a2); char *sub_829D60(); char __thiscall sub_829D70(int this, float a2, int a3, int a4); int __thiscall sub_829E00(float *this, _DWORD **a2); float *sub_829E70(); int __thiscall sub_829EC0(int *this, signed int a2); int __thiscall sub_829F00(_DWORD *this, int a2); unsigned int __thiscall sub_829F40(float *this, int a2); char __thiscall sub_829F90(float *this, int a2); char *sub_829FE0(); char __thiscall sub_829FF0(int this, float a2, int a3, int a4); float *__thiscall sub_82A0F0(float *this, _DWORD **a2); float *sub_82A160(); int __thiscall sub_82A1B0(int *this, signed int a2); int __thiscall sub_82A1F0(char *this, int a2); unsigned int __thiscall sub_82A230(float *this, int a2); signed int __stdcall sub_82A280(__int16 a1); signed int __stdcall sub_82A2A0(__int16 a1); signed int __thiscall sub_82A2C0(_DWORD *this, __int16 a2); int __thiscall sub_82A2E0(_DWORD *this, int a2, __int16 a3); int __thiscall sub_82A300(_DWORD *this, _DWORD *a2, _DWORD **a3); bool __thiscall sub_82A340(_DWORD *this, int a2); char *sub_82A360(); float *__thiscall sub_82A370(float *this, int a2, int a3, int a4); char __thiscall sub_82A3B0(int this, float a2, int a3, int a4); int __thiscall sub_82A4A0(_DWORD *this, _DWORD **a2); float *sub_82A520(); int __thiscall sub_82A560(char *this, int a2); bool __thiscall sub_82A5B0(float *this, int a2); int __thiscall sub_82A5F0(int *this, signed int a2); unsigned int __thiscall sub_82A640(float *this, int a2); int sub_82A6C0(); // weak bool __thiscall sub_82A700(_DWORD *this, int a2); int __thiscall sub_82A740(float *this, float a2, _DWORD *a3, int *a4); char *sub_82AD20(); void **__thiscall sub_82AD30(void *this, char a2); float *__thiscall sub_82AD70(_DWORD *this, float a2, int a3, int a4, int a5, int a6); float *__thiscall sub_82AEC0(_DWORD *this, float a2, int a3, int a4, int a5, int a6, float a7, float a8); int __thiscall sub_82B080(int *this, signed int a2); int __thiscall sub_82B160(_DWORD *this, signed int a2); unsigned int __thiscall sub_82B220(_DWORD *this, int a2); char *sub_82B2E0(); int __thiscall sub_82B2F0(char *this, _DWORD **a2); float *sub_82B360(); bool __thiscall sub_82B3B0(_DWORD *this, int a2); void *__thiscall sub_82B3E0(void *this, char a2); unsigned int __thiscall sub_82B410(void *this, int a2); int __thiscall sub_82B460(int *this, signed int a2); int __thiscall sub_82B4A0(char *this, signed int a2); int __thiscall sub_82B4E0(int *this, signed int a2); char __thiscall sub_82B4F0(_DWORD *this, int a2); int __thiscall sub_82B500(_DWORD *this, int a2); char __thiscall sub_82B510(_BYTE *this, int a2); char *sub_82B520(); char __thiscall sub_82B530(int this, float a2, int a3, int a4); float *__thiscall sub_82B6C0(float *this, int a2); _DWORD *__thiscall sub_82B6F0(void *this, char a2); int __thiscall sub_82B740(void *this, _DWORD **a2); float *sub_82B7A0(); unsigned int __thiscall sub_82B7E0(void *this, int a2); signed int __stdcall sub_82B830(int a1); int __thiscall sub_82B840(_DWORD *this, int a2); bool __thiscall sub_82B850(int this, int a2); char __thiscall sub_82B870(_DWORD *this); void __thiscall sub_82B950(int this, char a2); void __thiscall sub_82B9A0(_DWORD *this, float a2, float a3); char __thiscall sub_82B9D0(_DWORD *this, int a2); char __thiscall sub_82BA10(_BYTE *this, int a2); float *__thiscall sub_82BA70(float *this, int a2); char *sub_82BAB0(); float *__thiscall sub_82BAC0(float *this, char a2); int __thiscall sub_82BAF0(_DWORD *this, float a2, int a3); char __thiscall sub_82BBB0(int this, float a2, int a3, int a4); int __thiscall sub_82BC70(void *this, int a2, _DWORD **a3); int sub_82BCF0(); // weak int __thiscall sub_82BD30(void *this, _DWORD **a2); int __thiscall sub_82BDA0(int *this, signed int a2); int __thiscall sub_82BE20(_DWORD *this, int a2); unsigned int __thiscall sub_82BE70(void *this, int a2); void __thiscall sub_82BF30(int *this, float a2, float a3); char *sub_82BF70(); _DWORD *sub_82BF80(); char __thiscall sub_82BFC0(_DWORD *this, int a2); int __thiscall sub_82C040(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_82C0A0(_DWORD *this, int a2, float a3, float a4); _DWORD *__thiscall sub_82C150(void *this, char a2); int __thiscall sub_82C190(int *this, signed int a2); int __thiscall sub_82C250(_DWORD *this, signed int a2); unsigned int __thiscall sub_82C2D0(_DWORD *this, int a2); float *__thiscall sub_82C350(float *this, char a2, float a3, char a4); float *__thiscall sub_82C380(float *this); int __stdcall sub_82C3A0(int a1); float *sub_82C3C0(); char __thiscall sub_82C3F0(_DWORD *this, int a2); int __thiscall sub_82C400(char *this, int a2); bool __thiscall sub_82C410(_BYTE *this, int a2); char *sub_82C430(); float *__thiscall sub_82C440(float *this, _DWORD **a2); int __thiscall sub_82C490(float *this, int a2, _DWORD **a3); int __thiscall sub_82C4A0(int *this, signed int a2); char __thiscall sub_82C510(int this, float a2, int a3, int a4); bool __thiscall sub_82C5B0(_DWORD *this, float a2, int a3, int a4); char __thiscall sub_82C980(_BYTE *this, float a2, int a3, int a4); unsigned int __thiscall sub_82C9E0(void *this, char *a2); int __stdcall sub_82CA30(int a1); float *sub_82CA50(); int __thiscall sub_82CAA0(int *this, signed int a2); int __thiscall sub_82CAC0(char *this, int a2); char *sub_82CAE0(); void *__thiscall sub_82CAF0(void *this, char a2); float *__thiscall sub_82CB20(float *this, _DWORD **a2); bool __thiscall sub_82CBA0(float *this, float *a2); char __thiscall sub_82CC00(int this, float a2, int a3, int a4); char __thiscall sub_82CCF0(int this, float a2, int a3, int a4); char __thiscall sub_82CF40(_BYTE *this, float a2, int a3, int a4); unsigned int __thiscall sub_82CFA0(float *this, char *a2); float *__thiscall sub_82D020(float *this, char a2, float a3, char a4); int __stdcall sub_82D070(int a1); float *sub_82D090(); int __thiscall sub_82D0E0(char *this, int a2); char *sub_82D100(); int __thiscall sub_82D110(float *this, _DWORD **a2); char __thiscall sub_82D190(int this, float a2, int a3, int a4); char __thiscall sub_82D230(int this, float a2, int a3, int a4); char __thiscall sub_82D3E0(_BYTE *this, float a2, int a3, int a4); void __thiscall sub_82D440(int *this, signed int a2); bool __thiscall sub_82D4A0(float *this, float *a2); unsigned int __thiscall sub_82D500(float *this, char *a2); float *__thiscall sub_82D580(float *this, char a2, float a3, char a4); int __stdcall sub_82D5C0(int a1); float *sub_82D5E0(); bool __thiscall sub_82D610(float *this, int a2); char *sub_82D650(); int __thiscall sub_82D660(float *this, _DWORD **a2); char __thiscall sub_82D6B0(int this, float a2, int a3, int a4); char __thiscall sub_82D720(int this, float a2, int a3, int a4); char __thiscall sub_82D850(_BYTE *this, float a2, int a3, int a4); int __thiscall sub_82D8B0(int *this, signed int a2); int __thiscall sub_82D8F0(char *this, int a2); unsigned int __thiscall sub_82D930(float *this, char *a2); float *__thiscall sub_82D9C0(float *this, char a2, float a3, char a4); int __stdcall sub_82DA10(int a1); float *sub_82DA30(); int __thiscall sub_82DA80(char *this, int a2); char *sub_82DAA0(); int __thiscall sub_82DAB0(float *this, _DWORD **a2); char __thiscall sub_82DB30(int this, float a2, int a3, int a4); char __thiscall sub_82DBE0(int this, float a2, int a3, int a4); char __thiscall sub_82DDE0(_BYTE *this, float a2, int a3, int a4); void __thiscall sub_82DE40(int *this, signed int a2); char __thiscall sub_82DEB0(float *this, int a2); unsigned int __thiscall sub_82DEF0(float *this, char *a2); float *__thiscall sub_82DF70(float *this, char a2, float a3, char a4); int __stdcall sub_82DFB0(int a1); float *sub_82DFD0(); char __thiscall sub_82E000(_BYTE *this, int a2); char *sub_82E030(); int __thiscall sub_82E040(float *this, _DWORD **a2); char __thiscall sub_82E090(int this, float a2, int a3, int a4); char __thiscall sub_82E100(_BYTE *this, float a2, int a3, int a4); char __thiscall sub_82E250(_BYTE *this, float a2, int a3, int a4); int __thiscall sub_82E2B0(int *this, signed int a2); int __thiscall sub_82E2F0(char *this, int a2); unsigned int __thiscall sub_82E330(_BYTE *this, char *a2); LONG __thiscall sub_82E3B0(_DWORD *this); float *__thiscall sub_82E3D0(float *this); unsigned __int8 __thiscall sub_82E430(_BYTE *this, int a2, float a3, char a4, float a5); char __thiscall sub_82E4F0(int this, float *a2); void __thiscall sub_82E580(int this, float a2, int a3); int sub_82E6C0(); // weak int __thiscall sub_82E6E0(char *this, int a2); char __thiscall sub_82E750(float *this, int a2); _DWORD *__thiscall sub_82E790(float *this, _DWORD *a2, unsigned __int8 a3); char __thiscall sub_82E820(int this, float a2, int a3, int a4); char __fastcall sub_82E980(float a1, int a2, int a3, int a4, float *a5); char __thiscall sub_82EE00(_BYTE *this); void __thiscall sub_82EEB0(int this, float a2, float a3, int a4); int __thiscall sub_82F320(float *this, int a2, _DWORD **a3); int __thiscall sub_82F3C0(int *this, signed int a2); char __thiscall sub_82F470(_BYTE *this, float a2, int a3, int a4); float *__thiscall sub_82F550(float *this, _DWORD **a2); unsigned int __thiscall sub_82F5A0(float *this, char *a2); char __thiscall sub_82F600(void *this, int a2, _DWORD **a3); float *__thiscall sub_82F610(float *this); char *sub_82F630(); char __thiscall sub_82F640(int this); unsigned int __thiscall sub_82F660(int *this, signed int a2); unsigned int __thiscall sub_82F6D0(unsigned __int16 *this, char a2); float *__thiscall sub_82F760(float *this); char __thiscall sub_82F7C0(int this); char *sub_82F820(); char __thiscall sub_82F830(int this, int a2, float a3, char a4, float a5); void __thiscall sub_82F950(_BYTE *this); // int __usercall sub_82FB40@(int result@, int a2@); // int __userpurge sub_82FB90@(int result@, int a2@, float a3, float a4); int __thiscall sub_82FC00(void *this, _DWORD **a2); char __thiscall sub_82FCB0(float *this, float *a2); char __thiscall sub_82FD20(_DWORD *this, int a2); char __thiscall sub_82FD80(_BYTE *this, int a2); LONG __thiscall sub_82FE50(_DWORD *this); _DWORD *__thiscall sub_82FED0(_DWORD *this, _DWORD *a2, unsigned __int8 a3); void __thiscall sub_830040(int this); float *__thiscall sub_8302F0(float *this, char a2, float a3, char a4); char __thiscall sub_8303D0(_BYTE *this); int __thiscall sub_830570(float *this, int a2, _DWORD **a3); int __thiscall sub_8306F0(char *this, _DWORD *a2); int __thiscall sub_830800(_DWORD *this, signed int a2); int __thiscall sub_8308A0(int *this, signed int a2); int __thiscall sub_830D40(char *this, int a2); unsigned int __thiscall sub_830ED0(void *this, char a2); int __thiscall sub_8310B0(_DWORD *this); float *__thiscall sub_8310C0(float *this); char *sub_8310E0(); int __thiscall sub_8310F0(_DWORD *this, int a2); void __thiscall sub_831100(_DWORD *this, int a2, int a3); int __thiscall sub_831150(_DWORD *this, float a2, float a3); char __thiscall sub_831180(_BYTE *this); char __thiscall sub_8311B0(_DWORD *this, int a2, _DWORD **a3); int __thiscall sub_831220(_DWORD *this, int a2); int __thiscall sub_831250(int *this, _DWORD *a2); char __thiscall sub_8312C0(_DWORD *this, int a2); int __thiscall sub_831300(_DWORD *this, signed int a2); char __thiscall sub_831330(float *this, int a2); unsigned int __thiscall sub_831380(unsigned __int16 *this, char *a2); void __thiscall sub_8313E0(float *this, float *a2); void __thiscall sub_8314C0(float *this, int a2); int __thiscall sub_831630(float *this, int a2, float *a3); int __thiscall sub_831810(float *this, int a2, float *a3); int __thiscall sub_831960(char *this, signed int a2); int __thiscall sub_8319B0(char *this, signed int a2); unsigned int __thiscall sub_831AA0(float *this, char *a2); float *__thiscall sub_831B80(float *this); LONG __thiscall sub_831BA0(_DWORD *this); char sub_831BB0(); float *__stdcall sub_831BC0(float *a1, float *a2); char __stdcall sub_831BE0(int a1); int __thiscall sub_831BF0(void *this, int a2, int a3); char *sub_831C10(); void *__thiscall sub_831C20(void *this, char a2); unsigned int __thiscall sub_831C50(void *this, int a2); float *__thiscall sub_831CA0(void *this, int a2); char __thiscall sub_831CE0(_DWORD *this, int a2, _DWORD **a3); char __thiscall sub_831CF0(float *this, int a2); float *__thiscall sub_831D00(float *this); char *sub_831D20(); void __thiscall sub_831D30(void *this, float a2, int a3); unsigned int __thiscall sub_831DA0(unsigned __int16 *this, char *a2); char __thiscall sub_831DF0(_DWORD *this, int a2); float *__thiscall sub_831E00(void *this, int a2); int __thiscall sub_831E50(_DWORD *this, _DWORD *a2); float *__thiscall sub_831E60(float *this); char *sub_831E80(); int __thiscall sub_831E90(void *this, int a2, int a3); unsigned int __thiscall sub_831F10(unsigned __int16 *this, char *a2); float *__thiscall sub_831F60(void *this, int a2); int __thiscall sub_831FA0(int *this, _DWORD *a2); float *__thiscall sub_831FB0(float *this); char *sub_831FD0(); _DWORD *__thiscall sub_831FE0(void *this, char a2); void __thiscall sub_832030(void *this, int a2, int a3); unsigned int __thiscall sub_832090(unsigned __int16 *this, char *a2); float *__thiscall sub_8320E0(float *this); LONG __thiscall sub_832100(_DWORD *this); unsigned int __thiscall sub_832110(int *this, signed int a2); bool __thiscall sub_832120(void *this, int a2); char *sub_832130(); void *__thiscall sub_832140(void *this, char a2); int __thiscall sub_832170(void *this, int a2, int a3); void __thiscall sub_8321B0(void *this, float *a2, float *a3); unsigned int __thiscall sub_8322E0(void *this, int a2); int __thiscall sub_832330(int *this, void **a2); LONG __thiscall sub_832350(_DWORD *this); int __thiscall sub_8323B0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); int __thiscall sub_832400(_DWORD *this, int a2); int __thiscall sub_832430(_DWORD *this, _DWORD *a2); char __thiscall sub_832490(_DWORD *this, int a2); int __thiscall sub_8324C0(_DWORD *this, signed int a2); char __thiscall sub_8324F0(float *this, int a2); char __thiscall sub_832530(_DWORD *this, int a2, _DWORD **a3); unsigned int __thiscall sub_8325A0(unsigned __int16 *this, char *a2); int __thiscall sub_8325F0(_DWORD *this); bool __thiscall sub_832600(_DWORD *this, int a2); int __thiscall sub_832620(_DWORD *this, _DWORD *a2); errno_t __thiscall sub_832650(_DWORD *this, int a2, _DWORD **a3); char __thiscall sub_8326B0(_DWORD *this, int a2); char __thiscall sub_832730(float *this, int a2); int __thiscall sub_8327E0(int this); char *sub_832830(); float *__thiscall sub_832840(float *this); LONG __thiscall sub_832860(_DWORD *this); void __thiscall sub_8328D0(_DWORD *this, _DWORD *a2); char __thiscall sub_832920(void *this, _DWORD *a2); int __thiscall sub_8329C0(void *this, int a2); void *__thiscall sub_8329F0(void *this, char a2); unsigned int __thiscall sub_832A20(unsigned __int16 *this, char *a2); void __thiscall sub_832AA0(float *this, float *a2, float *a3); int __thiscall sub_832AF0(void *this, int a2); int __thiscall sub_832B60(char **this, int a2); char __thiscall sub_832BB0(_DWORD *this, int a2); char __thiscall sub_832BF0(float *this, int a2); float *__thiscall sub_832C90(float *this, int a2, int a3); char *sub_832CF0(); LONG __thiscall sub_832D00(_DWORD *this); int __thiscall sub_832D60(void *this, int a2, _DWORD **a3); int __thiscall sub_832E10(int *this, signed int a2); int __thiscall sub_832EF0(_DWORD *this, int a2); _DWORD *__thiscall sub_832F70(void *this, char a2); unsigned int __thiscall sub_832FF0(float *this, int a2); void *__thiscall sub_8330D0(void *this, char a2); _DWORD *__thiscall sub_833100(_DWORD *this); void __thiscall sub_833170(_DWORD *this); void __thiscall sub_833220(_DWORD *this, int a2); void __thiscall sub_8332F0(_DWORD *this, int a2); void __thiscall sub_833360(_DWORD *this, int a2); unsigned int __thiscall sub_8333D0(_DWORD *this); void __thiscall sub_833490(_DWORD *this, float a2); unsigned int __stdcall sub_833580(_DWORD *a1, _DWORD *a2, _DWORD *a3, int a4, int a5); unsigned int __thiscall sub_833600(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5); unsigned int __thiscall sub_833620(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5); void sub_833640(); void sub_833900(); bool __thiscall sub_8339D0(_DWORD **this, int a2); _DWORD *__thiscall sub_8339F0(_DWORD *this, _DWORD *a2); char *sub_833A80(); _DWORD *__thiscall sub_833A90(_DWORD *this); LONG __thiscall sub_833B10(_DWORD *this); int __thiscall sub_833B70(int this, float a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); void __thiscall sub_833C10(_DWORD *this, int a2); void __thiscall sub_833C80(_DWORD *this, _DWORD *a2); char *__stdcall sub_833CC0(int ArgList, int a2); char *__stdcall sub_833DB0(int ArgList, int a2); _DWORD *sub_833E80(); void *__thiscall sub_833EA0(void *this, char a2); int __stdcall sub_833ED0(int a1); int __thiscall sub_833F00(int this); signed int __thiscall sub_833FF0(_BYTE *this, int *a2, int a3, int a4); void __thiscall sub_834160(_DWORD *this); void __thiscall sub_8341F0(_DWORD *this); char __thiscall sub_834270(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); signed int __cdecl sub_834320(int a1, int a2); char __thiscall sub_834400(_DWORD *this, _DWORD *a2); void __cdecl sub_834490(_DWORD *a1, int a2); int __cdecl sub_8344E0(signed int a1, int a2); void __thiscall sub_834510(_DWORD *this, _DWORD *a2); void __thiscall sub_834570(_DWORD *this, int a2); void __thiscall sub_834740(_DWORD *this, unsigned int a2, int a3); int __thiscall sub_834850(void *this, int a2); unsigned int __thiscall sub_8348B0(float *this, char *a2); int __thiscall sub_8349E0(int *this, void **a2); void __thiscall sub_834AC0(_DWORD *this, _DWORD *a2); int __thiscall sub_834AF0(_DWORD *this, int a2); _DWORD *__thiscall sub_834BA0(void *this, _DWORD **a2); BOOL __thiscall sub_834C20(float *this, float *a2); int __thiscall sub_834C60(char *this, signed int a2); int __thiscall sub_834C80(char *this, signed int a2); float *__thiscall sub_834CA0(float *this, float a2, int a3); int __thiscall sub_834CD0(_DWORD *this, _DWORD *a2); // float __userpurge sub_834D00@(float *this@, int a2, float *a3); BOOL __cdecl sub_834D80(float a1, int a2, int a3, int a4, int a5); char __cdecl sub_834EC0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); float *__cdecl sub_835460(int a1); float *sub_8354C0(); BOOL __cdecl sub_835500(float a1, int a2, int a3, int a4, int a5, int a6, int a7); char __cdecl sub_835680(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12); _DWORD *__thiscall sub_835C20(_DWORD *this); float *__cdecl sub_835C60(signed int a1); unsigned int __thiscall sub_835D20(float *this, char ArgList, int a3); char __cdecl sub_835E30(int a1, char a2); int __cdecl sub_835E60(float, int, int, int, int, int); // idb _DWORD *__thiscall sub_835E90(_DWORD *this, int a2); int __cdecl sub_835F20(_DWORD *a1, int a2); int __cdecl sub_835FF0(float, int, int, int); // idb int __cdecl sub_8363A0(float, int, int); // idb int __cdecl sub_836560(int, float, int, int); // idb int __cdecl sub_8365F0(int, float, int, int); // idb int __cdecl sub_836680(float, int, int, int); // idb int __cdecl sub_836850(float a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_8368C0(float, int, int, int, int, int); // idb int __cdecl sub_836960(float, int, int, int, int, int, int, int); // idb int __cdecl sub_836A20(float, int, int, int, int, int); // idb int __cdecl sub_836A90(float, int, int, int, int); // idb int __cdecl sub_836C10(float, int, int); // idb int *__cdecl sub_836CB0(float a1, int a2); float *__cdecl sub_836CE0(float a1, int a2); _DWORD *__cdecl sub_836D30(unsigned __int16 a1, float *a2); int __cdecl sub_836DC0(float, int, int, int, int); // idb int __cdecl sub_836E50(float, int, int, int, int, int, int, int, int, int); // idb int __cdecl sub_836F10(float, int, int, int, int, int, int); // idb int __cdecl sub_836F50(float, int, int, int, int, int, int, int, int, int, int, int); // idb int sub_836FB0(); int __cdecl sub_836FD0(int a1); int __cdecl sub_837000(int a1); int __cdecl sub_837030(signed int a1); int __thiscall sub_837080(void *this, signed int a2); int __thiscall sub_8370C0(char *this, signed int a2); int __thiscall sub_8370F0(char *this, signed int a2); int __thiscall sub_837120(float *this, int a2); BOOL __thiscall sub_837180(float *this, float *a2); // float __userpurge sub_8371F0@(float *this@, int a2, float *a3); bool __cdecl sub_837260(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_837320(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_837470(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_837580(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_837650(float a1, int a2, int a3, int a4, int a5, int a6, int a7); char __cdecl sub_8377B0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_8379F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_837E80(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_838440(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_838700(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12); float *__thiscall sub_838AB0(float *this, int a2); float *__thiscall sub_838B40(float *this, float *a2, float *a3); float *sub_838BE0(); float *__thiscall sub_838C10(void *this); float *__cdecl sub_838C30(int a1); unsigned int __stdcall sub_838C80(char ArgList, int a2); void *__thiscall sub_838CE0(void *this, char a2); _DWORD *__thiscall sub_838D10(_DWORD *this); _DWORD *__thiscall sub_838D70(_DWORD *this, int a2); unsigned int __thiscall sub_838E20(_DWORD *this); _DWORD *__thiscall sub_838E70(_DWORD *this); void __thiscall sub_838F10(_DWORD *this, unsigned int *a2); char __thiscall sub_838FA0(_DWORD *this, _DWORD *a2); int __thiscall sub_839010(_DWORD *this, int a2, int a3); char __cdecl sub_839050(float a1, int a2, int a3, int a4, int a5); char __cdecl sub_8390A0(float a1, int a2, int a3, int a4, int a5); char __cdecl sub_839120(float a1, int a2, int a3, int a4, int a5, int a6, int a7); char __cdecl sub_839180(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); char __cdecl sub_8391F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); char __cdecl sub_839280(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); _DWORD *__thiscall sub_8392F0(void *this); _DWORD *__cdecl sub_839310(int a1); void __thiscall sub_839350(_DWORD *this, int a2); int __thiscall sub_839400(_DWORD *this, signed int a2); _DWORD *__thiscall sub_839470(void *this, char a2); void __thiscall sub_8394B0(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_839510(_DWORD *this, char ArgList, int a3); BOOL __thiscall sub_8395C0(float *this, float *a2); // float __userpurge sub_839600@(float *this@); // float __userpurge sub_8396C0@(int this@, int a2); // float __userpurge sub_839700@(float *this@, float *a2, float *a3); char __cdecl sub_8397C0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_8398A0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); void *__thiscall sub_839980(void *this, char a2); BOOL __cdecl sub_8399B0(float a1, int a2, int a3, int a4, int a5); BOOL __cdecl sub_839AD0(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_839C00(float a1, int a2, int a3, int a4, int a5, int a6, int a7); char __cdecl sub_83A040(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12); float *__cdecl sub_83A610(int a1); // float __userpurge sub_83A6B0@(char *this@, signed int a2); int __thiscall sub_83A720(char *this, signed int a2); float *sub_83A790(); _DWORD *__thiscall sub_83A810(float *this); unsigned int __stdcall sub_83A870(char ArgList, int a2); BOOL __thiscall sub_83A8D0(float *this, float *a2); bool __thiscall sub_83A910(void *this, int a2); float *__thiscall sub_83A930(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8); char __cdecl sub_83AB10(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); int __thiscall sub_83AC30(char *this, signed int a2); int __thiscall sub_83AC50(char *this, signed int a2); _DWORD *__thiscall sub_83AC70(_DWORD *this, float *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6); void __thiscall sub_83AD00(int this, int a2); int __thiscall sub_83AD20(float *this, float *a2, float *a3); char __cdecl sub_83AE20(float a1, int a2, int a3, int a4, int a5); bool __cdecl sub_83C050(float a1, int a2, int a3, int a4); char __cdecl sub_83C1B0(float a1, int a2, int a3, int a4, int a5, int a6, int a7); char __cdecl sub_83D5D0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char __cdecl sub_83D6F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12); float *__cdecl sub_840F50(int a1); float *sub_841020(); bool __cdecl sub_8410D0(float a1, int a2, int a3, int a4, int a5); char __cdecl sub_8412A0(float a1, int a2, int a3, int a4, int a5, int a6, int a7); _DWORD *__thiscall sub_8417B0(char *this); char __cdecl sub_8417E0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); unsigned int __stdcall sub_844BB0(char ArgList, int a2); BOOL __thiscall sub_844C10(float *this, float *a2); int __thiscall sub_844C50(_DWORD **this); int __thiscall sub_844C60(int, void *, int, int, int, int); // idb _DWORD *__thiscall sub_844D10(void *this, char a2); char __thiscall sub_844D50(int this, int a2, int a3, int a4, int a5, int a6); int __thiscall sub_844D90(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); double __cdecl sub_844DE0(float *a1, float *a2, float *a3, float *a4); double __cdecl sub_8454B0(float *a1, float *a2, float *a3, float *a4, float *a5); int __thiscall sub_846820(void *this); double __thiscall sub_846830(float *this); int __thiscall sub_846840(char *this); float *__thiscall sub_846850(float *this, float a2, float a3, float a4, int a5); void __thiscall sub_8468D0(float *this, float *a2, float *a3); double __thiscall sub_846AF0(int this, int a2, int a3, float a4); // float __userpurge sub_846BC0@(float *this@, int a2, float *a3); int __thiscall sub_846CE0(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8, int a9); float *__thiscall sub_846DB0(float *this, float *a2); bool __cdecl sub_846E10(float *a1, float *a2, float *a3); char __cdecl sub_846F10(float *a1, float *a2, float *a3, float *a4, float *a5, char a6, float *a7, float *a8, float *a9, float *a10); char __cdecl sub_847300(float a1, int a2, int a3); char __cdecl sub_8473E0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __cdecl sub_847500(float, int, int, char, int, int); // idb int __cdecl sub_8476D0(float, int, int, int, int, int); // idb void __thiscall sub_8478B0(float *this, unsigned __int16 a2, float *a3); char __thiscall sub_847E00(float *this, float *a2); int __thiscall sub_847EC0(char *this, signed int a2); int __thiscall sub_847F20(char *this, signed int a2); BOOL __thiscall sub_847F80(float *this, float *a2); int __thiscall sub_847FC0(float *this, int a2, int a3, float a4, float a5, float a6, int a7); double __thiscall sub_848020(int this, int a2, int a3, float a4); void __thiscall sub_848100(int this, float *a2, float *a3); int __thiscall sub_848340(float *this, int a2, int a3, float a4, float a5, float a6, int a7); double __thiscall sub_8483B0(int this, int a2, int a3, float a4); void __thiscall sub_8484B0(int this, float *a2, float *a3); double __cdecl sub_8486F0(float *a1, float *a2, float *a3); double __cdecl sub_848800(float *a1, float *a2, float *a3, float *a4); double __cdecl sub_8492D0(float *a1, float *a2, float *a3, float *a4, float *a5); double __cdecl sub_84A590(int *a1, float *a2, float *a3, float *a4, float *a5, float *a6); double __thiscall sub_84A910(int this, int a2, int a3, float a4); int __thiscall sub_84AA00(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8, int a9); int __thiscall sub_84AAD0(float *this, int a2, int a3, float a4, float a5, float a6, int a7); void __thiscall sub_84AB40(float *this, int a2, int a3, float a4); int __thiscall sub_84AC50(int this, float *a2, float *a3); int __thiscall sub_84AE80(float *this, int a2, int a3, float a4, float a5, float a6, int a7); void __thiscall sub_84AEF0(int this, int a2, int a3, float a4); void __thiscall sub_84AFE0(int this, float *a2, float *a3); double __cdecl sub_84B480(float *a1, float *a2, float *a3, float *a4, float *a5); // void __usercall sub_84B610(float *a1@, float *a2@, float *a3@); // int __usercall sub_84B710@(int a1@, int a2@, int a3@, int a4@, int a5, int a6, int a7, float *a8, float *a9); // int __usercall sub_84BD30@(float *a1@, float *a2@, float *a3@, float *a4, float *a5); // void __usercall sub_84BE20(int a1@, int a2@, int a3@, int a4@, int a5, int a6, float *a7, float *a8); // void __usercall sub_84C030(int a1@, int a2@, int a3@, int a4@, int a5, int a6, float *a7, float *a8); double __cdecl sub_84C110(float *a1, float *a2, float *a3, float *a4, float *a5, float *a6); void *__thiscall sub_84C410(void *this, char a2); BOOL __thiscall sub_84C440(_DWORD *this); float *__thiscall sub_84C460(float *this, int a2, int a3, int a4, int a5, __int16 a6); float *__cdecl sub_84CAC0(float *a1, float *a2, float *a3, float *a4, float *a5); int __cdecl sub_84CC30(float, int, float, int, int, int, int, int, int, int); // idb int __cdecl sub_84D460(int, int, int, int, float, int, float, int, int); // idb int __cdecl sub_84D860(int, int, int, float, int, int); // idb signed int __cdecl sub_84D9A0(float a1, float a2, float *a3, float *a4); signed int __thiscall sub_84DBB0(float *this, float a2, int a3, int a4, int a5, int a6, _BYTE *a7); char __thiscall sub_84DC50(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); signed int __thiscall sub_84DD50(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _BYTE *a11); int __thiscall sub_84DED0(int this, float *a2, float *a3, int a4, char *a5, int a6, int a7); int __thiscall sub_84E050(_DWORD *this); float *__thiscall sub_84E080(float *this, float *a2, int a3, int a4, int a5, int a6, int a7, signed int a8, int a9); int __thiscall sub_84E310(float *this, int a2, int a3, int a4, int a5, int *a6, int *a7, int a8); char __thiscall sub_84E6A0(int this, float *a2, int a3, int a4, int a5, int a6, int a7, int a8); signed int __thiscall sub_84E940(int this, float *a2, float *a3, int a4, int a5, int a6, int a7); int __thiscall sub_84E9E0(float *this, int a2, int a3, int a4, int a5, int a6, int a7, signed int a8, int a9); signed int __stdcall sub_84EFB0(_DWORD *a1); signed int __thiscall sub_84F080(float *this, int a2, int a3, int a4, int a5, int a6, _BYTE *a7); int __thiscall sub_84F210(int this, float *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _BYTE *a11); float *__thiscall sub_84F4F0(float *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, signed int a9, int a10, int a11, int a12); float *__thiscall sub_84F6E0(float *this, int a2, void *a3, int a4, int a5, int a6, int a7); int __stdcall sub_84F970(float, float, float, int, int); // idb char *__thiscall sub_84FAA0(void *Dst, void *Src, int a3, void *a4, int a5); char __thiscall sub_84FC30(int this, int a2, void *Src, void *a4, void *a5, void *a6, float a7); char __thiscall sub_84FD50(int this); char __thiscall sub_84FF10(int this); char __thiscall sub_8500D0(float *this); char __thiscall sub_850210(float *this); char __thiscall sub_850350(float *this); char __thiscall sub_850420(float *this); char __thiscall sub_850560(float *this); char __thiscall sub_8506A0(float *this); char __thiscall sub_850760(float *this); char __thiscall sub_850840(float *this); char __thiscall sub_850900(float *this); char __thiscall sub_8509D0(int this); char __thiscall sub_850BC0(int this); char __thiscall sub_850D80(float *this); char __thiscall sub_850E70(int this); char __thiscall sub_851070(int this); char __thiscall sub_851240(float *this); // float __userpurge sub_851340@(int this@, float *a2, float *a3, float *a4, float *a5); // float __userpurge sub_851680@(int this@, float *a2, float *a3); // float __userpurge sub_851E20@(float **this@, float *a2, float *a3); // float __userpurge sub_8525C0@(void *this@); void __thiscall sub_853430(int this); char __thiscall sub_853910(float *this, float a2, int a3, int a4, char a5, int a6, int a7); int __thiscall sub_853BB0(float *this, int a2, float a3); BOOL __thiscall sub_853C00(float *this, float *a2); double __cdecl sub_853C70(float *a1, float *a2, float *a3, float *a4); int __thiscall sub_854560(float *this, float *a2); signed int __thiscall sub_854650(float *this, int a2); signed int __thiscall sub_855AE0(int this, int a2, int a3, float *a4); void __thiscall sub_858A40(float *this, float *a2, float *a3); signed int __thiscall sub_858BA0(float *this, float *a2, float *a3); unsigned int __thiscall sub_858D60(int *this, void **a2); _DWORD *__thiscall sub_858D80(_DWORD *this); void *__thiscall sub_858DC0(void *this, char a2); void *__thiscall sub_858DF0(void *this, char a2); float *__thiscall sub_858E20(int this, float *a2, float *a3, char a4); int __thiscall sub_858F90(_DWORD *this); void __thiscall sub_858FB0(int this); int *__thiscall sub_859030(_DWORD *this, int a2); // float __userpurge sub_8590A0@(int a1@, int a2@); void __thiscall sub_859110(int this, int a2); void __thiscall sub_859160(_DWORD *this, int a2); void __thiscall sub_8591D0(_DWORD *this); void __thiscall sub_859240(_WORD *this, int a2, _DWORD **a3); _DWORD *__thiscall sub_8592D0(_DWORD *this, float a2, char a3); int __thiscall sub_859330(_DWORD *this); void *__thiscall sub_859370(void *this, char a2); _DWORD *__thiscall sub_8593A0(_DWORD *this, _DWORD *a2, unsigned int a3); _DWORD *__thiscall sub_859440(_DWORD *this, _DWORD *a2, int a3); void __thiscall sub_859510(float *this, float a2, int a3); void __thiscall sub_8595C0(int this, float a2); char __thiscall sub_8596B0(int this, float a2); _DWORD *__thiscall sub_859740(_DWORD *this, float a2); int *__thiscall sub_8597D0(_DWORD *this, int *a2); int *__thiscall sub_859880(void *this, int *a2, int a3, char a4); int *__thiscall sub_859B80(_DWORD *this, int a2); _BYTE *__thiscall sub_859C00(_DWORD *this, _BYTE *a2, int a3, _BYTE *a4); _DWORD *__thiscall sub_859D00(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_859D80(_DWORD *this, const char *a2); _DWORD *__thiscall sub_859DE0(_DWORD *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_859E60(_DWORD *this, int a2); int __thiscall sub_859EE0(const char **this, unsigned int a2); char __thiscall sub_859FB0(_DWORD *this, int a2); _DWORD *__thiscall sub_85A0A0(_DWORD *this, unsigned int a2, int a3); void __thiscall sub_85A130(_DWORD *this); void *__thiscall sub_85A190(void *this, char a2); _DWORD *__thiscall sub_85A1C0(_DWORD *this, unsigned int a2); LONG __thiscall sub_85A210(_DWORD *this); int *__thiscall sub_85A2D0(_DWORD *this, int *a2); _DWORD *__thiscall sub_85A360(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_85A3D0(_WORD *this, _DWORD **a2); _DWORD *__thiscall sub_85A460(_DWORD *this, _DWORD *a2); _DWORD *sub_85A4D0(); _DWORD *__thiscall sub_85A550(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_85A6D0(int *this, _DWORD *a2); void *__thiscall sub_85A830(void *this, char a2); void __thiscall sub_85A860(_DWORD *this, unsigned int a2, unsigned int a3); _DWORD *__thiscall sub_85A930(_DWORD *this, _DWORD *a2, unsigned int a3, _DWORD *a4); int __thiscall sub_85AA60(_DWORD *this, const char *a2); int __thiscall sub_85AB00(_DWORD *this, int a2); void __thiscall sub_85AB50(void **this, char *Src); void __thiscall sub_85ABB0(_DWORD *this, unsigned int a2); char __thiscall sub_85AC20(_DWORD *this, int a2); char __thiscall sub_85AD90(void *this, unsigned int a2); char __thiscall sub_85AE20(_DWORD *this, char *Src, int a3); char __thiscall sub_85AEA0(_DWORD *this, void **a2); char __thiscall sub_85AFB0(_DWORD *this, const char *a2); char __thiscall sub_85B050(_DWORD *this, unsigned int a2); int __thiscall sub_85B070(_DWORD *this); void __thiscall sub_85B110(_DWORD *this); int __thiscall sub_85B150(int *this, void **a2); int __thiscall sub_85B1A0(_DWORD *this, _DWORD *a2); char __thiscall sub_85B240(_DWORD *this, int a2); _DWORD *__thiscall sub_85B2B0(_DWORD *this); char *sub_85B2E0(); LONG __thiscall sub_85B2F0(_DWORD *this); void __thiscall sub_85B340(void *this, int a2, int a3); void __thiscall sub_85B490(_DWORD *this, int a2); void __thiscall sub_85B520(_DWORD *this, int a2); _DWORD *__thiscall sub_85B610(_DWORD *this, int a2); int __thiscall sub_85B660(const char **this, _DWORD *a2); void __thiscall sub_85B730(_DWORD *this, int a2); char __thiscall sub_85B7C0(_DWORD *this, int a2); _DWORD *__thiscall sub_85B8C0(void *this, char a2); unsigned int __thiscall sub_85B930(int *this, int a2); int __thiscall sub_85B9F0(void *this, int a2); void *__thiscall sub_85BA20(void *this, int a2); int __thiscall sub_85BA30(void *this, int a2); _DWORD *__thiscall sub_85BA50(_DWORD *this); LONG __thiscall sub_85BA80(_DWORD *this); int __thiscall sub_85BAA0(void *this, _DWORD **a2); int __thiscall sub_85BAE0(void *this, int a2); int __thiscall sub_85BB00(void *this, int a2, _DWORD **a3); bool __thiscall sub_85BB20(void *this, int a2); int *__thiscall sub_85BB90(void *this, int *a2); unsigned int __thiscall sub_85BC50(int *this, signed int a2); unsigned int __thiscall sub_85BCB0(int this, int a2); int __thiscall sub_85BD60(void *this); float *__thiscall sub_85BDC0(float *this, float *a2, float *a3); float *__thiscall sub_85BE80(int this); int __thiscall sub_85BED0(_DWORD **this, float a2, int a3); int __thiscall sub_85BF10(_DWORD **this, float a2); int __thiscall sub_85BF50(_DWORD *this); void *__thiscall sub_85BF90(void *this, char a2); void __thiscall sub_85BFD0(_DWORD *this, int a2); int __thiscall sub_85C050(_DWORD *this, int a2); int __thiscall sub_85C0A0(_BYTE *this, int a2); _DWORD *__thiscall sub_85C0C0(_DWORD *this, const char *a2); void __thiscall sub_85C120(_DWORD *this, int a2); int __stdcall sub_85C170(int a1, int a2); int __thiscall sub_85C1F0(_DWORD *this, int a2); char __thiscall sub_85C230(_DWORD *this, int a2); void __thiscall sub_85C290(char *this, volatile LONG *a2); void *__thiscall sub_85C2F0(void *this, char a2); LONG __thiscall sub_85C320(_DWORD *this); char *sub_85C3D0(); int __thiscall sub_85C3E0(_DWORD *this, float a2, char a3); _DWORD *__thiscall sub_85C420(_BYTE *this, float a2); _DWORD *__thiscall sub_85C470(_DWORD *this, float a2); LONG __thiscall sub_85C4D0(_DWORD *this); char __thiscall sub_85C580(_DWORD *this); char __thiscall sub_85C5B0(_DWORD *this); int *__thiscall sub_85C5E0(_DWORD *this, int *a2, int a3, char a4); LONG __thiscall sub_85C6F0(_DWORD *this); _DWORD *__thiscall sub_85C770(_DWORD *this, _DWORD *a2); char __thiscall sub_85C8D0(_DWORD *this, int a2); _DWORD *__thiscall sub_85C9A0(_DWORD *this); void *__thiscall sub_85CA60(void *this, char a2); volatile LONG **__thiscall sub_85CA90(_DWORD *this, volatile LONG **a2, int a3); int __thiscall sub_85CB60(_DWORD *this, _BYTE *a2, char a3, bool *a4); LONG __stdcall sub_85CC30(_DWORD *a1, LONG a2, _DWORD **a3); void __thiscall sub_85CD30(_WORD *this, int a2, _DWORD **a3); unsigned int __thiscall sub_85CDA0(int *this, signed int a2); int __thiscall sub_85D030(const char **this, signed int a2); unsigned int __thiscall sub_85D140(int *this, char a2); void __thiscall sub_85D510(float *this); void __thiscall sub_85D530(float *this, float a2, float a3, float a4); BOOL __thiscall sub_85D560(float *this, float *a2); float *__thiscall sub_85D600(const void *this, float *a2, float *a3); float *__thiscall sub_85D670(const void *this, float *a2, float *a3); char *__thiscall sub_85D6E0(float *this, int ArgList); float *__thiscall sub_85D770(float *this, float *a2, float *a3, float *a4); void __thiscall sub_85D7C0(float *this, float a2); void __thiscall sub_85D810(float *this, float a2); void __thiscall sub_85D860(float *this, float a2, float a3, float a4, float a5); float *__thiscall sub_85D940(float *this, float *a2, float *a3); int __thiscall sub_85DA30(float *this, int a2, float a3); float *__thiscall sub_85DA90(float *this, float *a2, float *a3); float *__cdecl sub_85DAF0(float *a1, float *a2, float *a3); char __thiscall sub_85DB50(float *this, float *a2); float *__thiscall sub_85DC80(float *this, float *a2); float *__thiscall sub_85DCC0(float *this, float *a2); void __thiscall sub_85DD50(float *this, float *a2, float *a3, float *a4, float *a5); float *__thiscall sub_85E050(float *this, float *a2, float *a3); char __thiscall sub_85E140(float *this, float *a2, float *a3); char __thiscall sub_85E290(float *this, float *a2, float *a3); int __fastcall sub_85E980(float *a1); char __thiscall sub_85E9D0(const void *this, float *a2, float *a3); int __thiscall sub_85EA80(char *this, int a2); int __thiscall sub_85EAE0(float *this, int a2); int __thiscall sub_85EB40(float *this, int a2, int a3); int __thiscall sub_85EBB0(_DWORD *this, _DWORD *a2); float *__thiscall sub_85EBC0(float *this); char *sub_85EC50(); signed int sub_85EC60(); float *__thiscall sub_85EC70(float *this, int a2); float *sub_85ECC0(); BOOL __thiscall sub_85ECE0(float *this, float *a2); _DWORD *__thiscall sub_85ED30(void *this, char a2); int __thiscall sub_85ED70(int *this, void **a2); int __thiscall sub_85EDF0(const char **this, _DWORD *a2); bool __thiscall sub_85EE70(float *this, float *a2); LONG sub_85EF20(); void sub_85EF80(); unsigned int __thiscall sub_85EFC0(int *this, int a2); char *__thiscall sub_85F140(float *this, int ArgList); _DWORD *sub_85F1A0(); void __thiscall sub_85F230(_DWORD *this, unsigned int a2); int __cdecl sub_85F2B0(int a1); int __cdecl sub_85F2D0(int a1); int __cdecl sub_85F2F0(int a1); int __cdecl sub_85F310(int a1); int __cdecl sub_85F330(int a1); int __cdecl sub_85F350(int a1); char __thiscall sub_85F370(void *this, unsigned int a2, unsigned int a3, float *a4, float *a5); int __thiscall sub_85F400(void *this, int a2); void sub_85F420(); int __thiscall sub_85F430(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_85F450(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_85F480(_DWORD *this, _DWORD *a2); int __thiscall sub_85F4B0(_DWORD *this); char *sub_85F510(); LONG __thiscall sub_85F520(char *this); int __thiscall sub_85F580(_DWORD *this, int a2); int __thiscall sub_85F620(_DWORD *this, int a2); int __thiscall sub_85F6C0(_DWORD *this, float *a2); void *__thiscall sub_85F760(void *this, char a2); unsigned int __thiscall sub_85F790(void *this, int a2); void __thiscall sub_85F7E0(_DWORD *this); void *__thiscall sub_85F7F0(void *this, char a2); void __thiscall sub_85F820(_DWORD *this, float *a2); void __thiscall sub_85F8D0(_DWORD *this, const void *a2); _DWORD *__thiscall sub_85F910(_DWORD *this, int a2); _DWORD *__thiscall sub_85F980(_DWORD *this, int a2, char a3); int __thiscall sub_85F9F0(_DWORD *this, int a2, _BYTE *a3, int a4); void __cdecl sub_85FA70(_DWORD *a1); void __cdecl sub_85FAE0(int a1, _DWORD *a2); void __cdecl sub_85FB50(float *a1, int a2, _DWORD *a3, _DWORD *a4); void __thiscall sub_85FBB0(void *this, int a2, int a3); int __thiscall sub_85FBC0(_DWORD *this, float a2); int __thiscall sub_85FBF0(int *this, void **a2); unsigned int __thiscall sub_85FC40(int *this, int a2); int __thiscall sub_85FC90(void *this, int a2); int sub_85FCF0(); // weak bool __thiscall sub_85FD30(_DWORD *this, int a2); char *__cdecl sub_85FD70(int ArgList, int a2); _DWORD *sub_85FDF0(); void sub_85FE70(); int __thiscall sub_85FEB0(int *this, void **a2); int __thiscall sub_85FF60(const char **this, _DWORD *a2); unsigned int __thiscall sub_85FFE0(int *this, int a2); bool __thiscall sub_8600C0(_DWORD *this, int a2); char *__cdecl sub_860140(int ArgList, int a2); char *__cdecl sub_8602B0(int ArgList, int a2); int __thiscall sub_8603D0(void *this, int a2); _DWORD *sub_860430(); LONG sub_860470(); void sub_8604F0(); int __thiscall sub_860530(int *this, void **a2); int __thiscall sub_8605B0(const char **this, _DWORD *a2); unsigned int __thiscall sub_860610(int *this, char a2); char *__thiscall sub_860810(float *this, int ArgList); char *__thiscall sub_860870(float *this, int ArgList); int __thiscall sub_8608D0(char *this, signed int a2); int __thiscall sub_860940(char *this, signed int a2); int __thiscall sub_8609B0(char *this, signed int a2); char *__cdecl sub_860A30(int ArgList, int a2); int __thiscall sub_860AB0(void *this, int a2); int sub_860B40(); // weak bool __thiscall sub_860BA0(_DWORD *this, int a2); LONG sub_860C00(); void sub_860CA0(); int __thiscall sub_860CE0(int *this, void **a2); int __thiscall sub_860DB0(const char **this, _DWORD *a2); unsigned int __thiscall sub_860E10(int *this, char a2); int __thiscall sub_860F40(int *this, signed int a2); _DWORD *__thiscall sub_860F50(_DWORD *this, _DWORD *a2); char __thiscall sub_860F60(_DWORD *this, int a2); int __thiscall sub_860F70(const char **this, signed int a2); bool __thiscall sub_860F80(float *this, int a2); float *__thiscall sub_860F90(float *this); char *sub_860FE0(); void *__thiscall sub_860FF0(void *this, char a2); float *__thiscall sub_861020(float *this); int __thiscall sub_861050(float *this, _DWORD **a2); float *sub_8610E0(); unsigned int __thiscall sub_861140(int *this, char *a2); char __thiscall sub_861190(_WORD *this, int a2, _DWORD **a3); void *__thiscall sub_8611D0(void *this, char a2); void __thiscall sub_861200(_DWORD *this); void __thiscall sub_861270(_DWORD *this); char __thiscall sub_8612D0(_DWORD *this, _DWORD *a2); char __thiscall sub_861390(_DWORD *this, int a2); int __thiscall sub_8613C0(_DWORD *this); void *__thiscall sub_861400(void *this, char a2); LONG __thiscall sub_861430(_DWORD *this); char *sub_861470(); _DWORD *__thiscall sub_861480(_DWORD *this, int a2); _DWORD *__thiscall sub_861500(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8615A0(_DWORD *this); _DWORD *__thiscall sub_861620(void *this, char a2); _DWORD *__thiscall sub_861670(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_8616E0(int *this, signed int a2); int __thiscall sub_8617A0(const char **this, signed int a2); unsigned int __thiscall sub_861840(int *this, _DWORD *a2); float *__thiscall sub_861A00(float *this); float *sub_861A20(); char *sub_861A50(); float *__thiscall sub_861A60(float *this, _DWORD **a2); unsigned int __thiscall sub_861AC0(int *this, char *a2); _DWORD *__thiscall sub_861B10(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_861B30(_DWORD *this); _DWORD *__thiscall sub_861B50(_DWORD *this, _DWORD *a2); _DWORD *sub_861B60(); char __thiscall sub_861BA0(_DWORD *this, int a2); char __thiscall sub_861BB0(_DWORD *this, int a2); void *sub_861BE0(); void *__thiscall sub_861BF0(void *this, char a2); void __thiscall sub_861C20(_DWORD *this, int a2); _DWORD *__thiscall sub_861C80(_DWORD *this, _DWORD **a2); _DWORD *__thiscall sub_861CE0(_DWORD *this, _DWORD *a2); int __thiscall sub_861D10(int *this, void **a2); int __thiscall sub_861D80(const char **this, unsigned int a2); LONG __thiscall sub_861DC0(_DWORD *this); char __thiscall sub_861DD0(int this, int a2); char __thiscall sub_861E70(float *this, int a2, int a3, int a4, float a5); bool __thiscall sub_861FD0(float *this, float *a2); char *sub_862130(); void *__thiscall sub_862140(void *this, char a2); char __thiscall sub_862170(float *this, float *a2, float *a3); int __thiscall sub_862300(int this, float a2, float a3, int a4, int a5); int __thiscall sub_862500(_DWORD *this); // float __userpurge sub_862520@(int this@); int __thiscall sub_862890(_WORD *this, int a2, _DWORD **a3); char __thiscall sub_862960(float *this, float a2, float a3, int a4, float a5); // float __userpurge sub_862A80@(void *this@); unsigned int __thiscall sub_862A90(_DWORD *this, _DWORD *a2); int __thiscall sub_862BA0(_DWORD *this); int __thiscall sub_862C80(_WORD *this, _DWORD **a2); int sub_862CD0(); unsigned int __thiscall sub_862CF0(int *this, signed int a2); int __thiscall sub_862F10(const char **this, signed int a2); unsigned int __thiscall sub_863120(int *this, char *a2); int sub_863360(); char __cdecl sub_863370(int a1, int a2, int a3); char __cdecl sub_8633A0(int a1, int a2); char __cdecl sub_8633D0(int a1); int sub_863400(); char __cdecl sub_863420(int a1); char __cdecl sub_863440(int a1); int sub_863460(int a1, int a2, char *Format, ...); _DWORD *__thiscall sub_8634E0(_DWORD *this); LONG __thiscall sub_863510(_DWORD *this); char __cdecl sub_863550(int a1, int a2, int a3, int a4); int __cdecl sub_8635D0(int a1, int a2, int a3); _DWORD *__thiscall sub_863620(void *this, char a2); void *__thiscall sub_863680(void *this, char a2); void *__thiscall sub_8636B0(void *this, char a2); LONG __thiscall sub_8636E0(_DWORD *this); char *sub_863760(); char __thiscall sub_863770(int this, int a2); char *__cdecl sub_8637B0(int ArgList, int a2); char *__cdecl sub_863860(int ArgList, int a2); _DWORD *__thiscall sub_863940(_DWORD *this); _DWORD *__thiscall sub_863970(_DWORD *this, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_8639B0(_DWORD *this, _DWORD *a2); char __thiscall sub_863AB0(_DWORD *this, _DWORD *a2); bool __thiscall sub_863B30(float *this, int a2); _DWORD *__thiscall sub_863BB0(_DWORD *this); void *__thiscall sub_863D20(void *this, char a2); _DWORD *__thiscall sub_863D50(_DWORD *this, char *Src); char __thiscall sub_863F20(_DWORD *this, int a2, int a3); void __thiscall sub_863FF0(_DWORD *this, unsigned int a2, int a3); _DWORD *sub_864090(); void __thiscall sub_8640B0(int *this, _DWORD *a2); int __thiscall sub_864510(_DWORD *this, _DWORD *a2); char __thiscall sub_864650(_DWORD *this, int a2); unsigned int __thiscall sub_8646D0(const char **this, _DWORD *a2); char __thiscall sub_864850(_DWORD *this, _DWORD *a2); LONG sub_864960(); void sub_8649C0(); int __thiscall sub_864A00(_DWORD *this, void **a2); int __thiscall sub_864B90(_DWORD *this, signed int a2); int __thiscall sub_864C50(_DWORD *this, void **a2); int __thiscall sub_864D10(_DWORD *this, signed int a2); int __thiscall sub_864DD0(_DWORD *this, void **a2); int __thiscall sub_864E10(_DWORD *this, signed int a2); _DWORD *__thiscall sub_864E50(void *this, char a2); void __thiscall sub_864EB0(_DWORD *this, int a2, int a3); unsigned int __thiscall sub_865170(int *this, _DWORD *a2); _DWORD *__thiscall sub_865A00(_DWORD *this, int a2); void __thiscall sub_865A50(void *this); void __thiscall sub_865AD0(_DWORD *this); char __thiscall sub_865B50(_BYTE *this); int __thiscall sub_865B90(int this); int __thiscall sub_865BB0(int this); void __thiscall sub_865BD0(_DWORD *this); int __thiscall sub_865C10(_DWORD *this, _DWORD *a2); void __thiscall sub_865C80(void *this, int a2); char __thiscall sub_865CE0(_DWORD *this, int a2); char __thiscall sub_865D20(_DWORD *this, int a2); char *sub_865DF0(); char *sub_865E00(); LONG __thiscall sub_865E10(_DWORD *this); _DWORD *__cdecl sub_865EB0(char *Src, int a2, char a3); _DWORD *__cdecl sub_865FA0(int a1, _DWORD *a2); void __thiscall sub_866080(int *this); _DWORD *sub_866100(); _DWORD *__thiscall sub_866160(void *this, char a2); void *__thiscall sub_8661A0(void *this, char a2); LONG __thiscall sub_8661D0(int *this, int a2); int __thiscall sub_8665E0(const char **this, _DWORD *a2); unsigned int __thiscall sub_8666E0(int *this, int a2); char __thiscall sub_866730(_DWORD *this, int a2); int sub_8667C0(); char *__thiscall sub_8667D0(char *this); char __thiscall sub_866840(_DWORD *this, char *FullPath, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_866940(_DWORD *this, char *FullPath, int a3); char __stdcall sub_866A00(_DWORD *a1, int a2); char *__cdecl sub_866A20(char *Src); LONG sub_866AD0(); void sub_866B60(); LONG __cdecl sub_866BA0(int a1); _DWORD *__thiscall sub_866BF0(void *this, char a2); _DWORD *__stdcall sub_866C50(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_866D90(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9, int a10); _DWORD *__thiscall sub_866DF0(_DWORD *this, int a2); _DWORD *__thiscall sub_866E10(_DWORD *this); void __thiscall sub_866E30(_DWORD *this, int a2, _DWORD **a3); _DWORD *sub_866E40(); char *sub_866E70(); int __thiscall sub_866E80(_DWORD *this, __int16 a2, _DWORD *a3, _DWORD *a4, int *a5); _DWORD *__thiscall sub_866EE0(_DWORD *this, _DWORD **a2); int __thiscall sub_866F40(_DWORD *this, int a2); unsigned int __thiscall sub_866F80(int *this, char *a2); int __thiscall sub_866FD0(_DWORD *this); int __thiscall sub_866FE0(_DWORD *this, int a2); bool __thiscall sub_867010(void *this, int a2); int __thiscall sub_867030(_DWORD *this, int a2); int __thiscall sub_867050(_DWORD *this, int a2); int __thiscall sub_867070(_DWORD *this); int __thiscall sub_867080(_DWORD *this); int __thiscall sub_867090(_DWORD *this, int a2); _DWORD *__thiscall sub_8670A0(_DWORD *this); char *sub_8670D0(); LONG __thiscall sub_8670E0(_DWORD *this); int __thiscall sub_867170(_DWORD *this, int a2); int __thiscall sub_8671A0(_DWORD *this); char __thiscall sub_8671C0(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_867230(_DWORD *this, int a2); int __thiscall sub_867290(_DWORD *this, int a2); int __thiscall sub_8672B0(_DWORD *this); _DWORD *__cdecl sub_8672C0(unsigned int a1, int a2); _DWORD *__cdecl sub_867310(int a1, int a2, int a3); void *__thiscall sub_867380(void *this, char a2); unsigned int __thiscall sub_8673B0(void *this, int a2); _DWORD *__cdecl sub_867400(int *a1, int a2, char a3, char a4); bool __cdecl sub_867460(int a1); int __thiscall sub_867480(_DWORD *this); _DWORD *__thiscall sub_867490(_DWORD *this); void *sub_8674E0(); int __thiscall sub_8674F0(_DWORD *this); int __thiscall sub_867500(_DWORD *this); _DWORD *__cdecl sub_867510(rsize_t a1, int a2, int a3, _DWORD *a4); _DWORD *__thiscall sub_867610(void *this, char a2); int __thiscall sub_867680(int this); _DWORD *sub_8676A0(); bool __thiscall sub_8676F0(_DWORD *this, int a2); char __thiscall sub_867700(float **this, int a2); __int16 __thiscall sub_867820(_WORD *this); char *sub_867830(); void **__thiscall sub_867840(void *this, char a2); int __thiscall sub_867880(_WORD *this, int a2, int a3, void *Src); int __thiscall sub_867D90(int this); char __thiscall sub_867DE0(int this, signed int a2, signed int a3, float *a4); char __thiscall sub_867E60(int this, int a2, float a3, float a4, float a5, float a6); char __thiscall sub_867F60(int this, signed int a2, float *a3, float *a4, float *a5, float *a6); char __thiscall sub_867FF0(int this, signed int a2, _DWORD *a3); char __thiscall sub_868090(int this, signed int a2, signed int a3, unsigned __int16 a4, _DWORD *a5); char __thiscall sub_868120(int this, signed int a2, signed int a3, unsigned __int16 a4, _DWORD *a5); char __thiscall sub_8681A0(int this, int a2, int a3, float a4, float a5, float a6, float a7); char __thiscall sub_868230(int this, signed int a2, unsigned __int16 a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7); char __thiscall sub_8682E0(int this, signed int a2, unsigned __int16 a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7); int __thiscall sub_868390(int this, signed int a2); int __thiscall sub_8683E0(int this, signed int a2, unsigned __int16 a3); _DWORD *__thiscall sub_868440(_DWORD *this, char a2, char a3, unsigned __int16 a4, int a5, int a6, int a7, int a8, int a9, int a10); int __thiscall sub_868680(int *this, signed int a2); int __thiscall sub_8687F0(char *this, _DWORD *a2); unsigned int __thiscall sub_868920(_WORD *this, int a2); LONG __thiscall sub_868B50(_DWORD *this); int __thiscall sub_868B60(void *this); _DWORD *sub_868B70(); int __thiscall sub_868BA0(int *this, signed int a2); int __thiscall sub_868BB0(_DWORD *this, _DWORD *a2); char __thiscall sub_868BC0(_DWORD *this, int a2); int __thiscall sub_868BD0(const char **this, signed int a2); char __thiscall sub_868BE0(_DWORD *this, int a2); char *sub_868BF0(); _DWORD *__thiscall sub_868C00(_DWORD *this, int a2); void *__thiscall sub_868C20(void *this, char a2); _DWORD *__thiscall sub_868C50(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_868CB0(int *this, char *a2); _DWORD *__thiscall sub_868D00(_DWORD *this); LONG __thiscall sub_868D20(_DWORD *this); void __thiscall sub_868D50(_DWORD *this); _DWORD *sub_868D60(); bool __thiscall sub_868D90(void *this, int a2); int __thiscall sub_868DB0(const char **this, _DWORD *a2); bool __thiscall sub_868DE0(const char **this, int a2); char *sub_868E40(); _DWORD *__thiscall sub_868E50(void *this, char a2); void __thiscall sub_868E90(void **this, char *Src); void __thiscall sub_868EF0(void *this, int a2, _DWORD **a3); void __thiscall sub_868F60(_DWORD *this, _DWORD *a2); char __thiscall sub_868F80(int *this, size_t a2); unsigned int __thiscall sub_869050(_DWORD *this, char *a2); char __thiscall sub_8690D0(_DWORD *this, int a2); _DWORD *sub_869140(); _DWORD *__thiscall sub_869180(void *this, _DWORD **a2); int __thiscall sub_869200(int *this, size_t a2); int __thiscall sub_869270(const char **this, _DWORD *a2); unsigned int __thiscall sub_8692E0(_DWORD *this, char *a2); _DWORD *__thiscall sub_869360(_DWORD *this); void *sub_8693A0(); LONG __thiscall sub_8693B0(_DWORD *this); void __thiscall sub_8693E0(void **this, char *Src); _DWORD *__thiscall sub_869460(void *this, char a2); int __thiscall sub_8694A0(const char **this, _DWORD *a2); int __thiscall sub_8694E0(_DWORD *this, _DWORD *a2); BOOL __thiscall sub_869520(_DWORD *this); int __thiscall sub_869540(_DWORD *this, _DWORD *a2); char __thiscall sub_8695A0(_DWORD *this, int a2); char __thiscall sub_8695E0(_DWORD *this, _DWORD *a2); char *sub_8696F0(); _DWORD *__thiscall sub_869700(_DWORD *this, int a2); _DWORD *__thiscall sub_8698C0(_DWORD *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, int a6); LONG __thiscall sub_869B20(void **this); _DWORD *sub_869B90(); void *__thiscall sub_869BF0(void *this, char a2); int __thiscall sub_869C20(int *this, signed int a2); int __thiscall sub_869E40(char *this, unsigned int a2); unsigned int __thiscall sub_869FA0(void *this, int a2); void *__thiscall sub_86A140(void *this, const void *a2); char __thiscall sub_86A160(_DWORD *this, int a2, char a3, int *a4); _DWORD *__thiscall sub_86A420(_DWORD *this); _DWORD *__cdecl sub_86A490(_DWORD *a1, char a2, int a3, int a4, int a5, int a6); char __thiscall sub_86A6B0(char *this, int a2); int __thiscall sub_86A940(char *this, signed int a2); bool __thiscall sub_86AA90(_DWORD *this, int a2); int __thiscall sub_86AAE0(void *this, int a2); _DWORD *sub_86AB40(); LONG sub_86AB80(); void sub_86AC00(); __int16 __thiscall sub_86AC40(int *this, void **a2); int __thiscall sub_86ACD0(const char **this, _DWORD *a2); unsigned int __thiscall sub_86AD30(int *this, char a2); _DWORD *__thiscall sub_86AE70(_DWORD *this); _DWORD *sub_86AE90(); unsigned int __thiscall sub_86AEC0(int *this, signed int a2); bool __thiscall sub_86AED0(void *this, int a2); void *sub_86AEF0(); void *__thiscall sub_86AF00(void *this, char a2); int __thiscall sub_86AF30(int this); int __thiscall sub_86B080(_BYTE *this, _DWORD **a2); unsigned int __thiscall sub_86B0D0(_DWORD *this, _DWORD *a2); _BYTE *__thiscall sub_86B1D0(_BYTE *this, char a2); _BYTE *__thiscall sub_86B1E0(_BYTE *this, float a2, float a3, float a4, float a5, float a6, float a7, char a8); char *__thiscall sub_86B220(float *this, int ArgList); bool __thiscall sub_86B2A0(_DWORD *this, int a2); _DWORD *__thiscall sub_86B2C0(_DWORD *this, _DWORD **a2); _DWORD *sub_86B310(); unsigned int __thiscall sub_86B340(_DWORD *this, char *a2); int __thiscall sub_86B3C0(int *this, size_t a2); int __thiscall sub_86B3F0(const char **this, _DWORD *a2); char __thiscall sub_86B420(_DWORD *this, int a2); char *sub_86B480(); _DWORD *sub_86B490(); _DWORD *__thiscall sub_86B4C0(void *this, char a2); _DWORD *__thiscall sub_86B500(_DWORD *this, char *Src); _DWORD *__thiscall sub_86B570(const char **this, _DWORD **a2); unsigned int __thiscall sub_86B5F0(_DWORD *this, char *a2); BOOL __thiscall sub_86B670(float *this, float *a2); int __thiscall sub_86B6C0(float *this, signed int a2, float *a3); void __thiscall sub_86BC10(float *this, float *a2); // float __userpurge sub_86BD60@(float *this@, float *a2, float *a3); char __thiscall sub_86BDE0(float *this, int a2); int __fastcall sub_86BE70(int a1); __int16 __thiscall sub_86BE80(int this, float a2); __int16 __thiscall sub_86BEB0(int this); double __thiscall sub_86BEE0(int this, float a2); char __thiscall sub_86C130(void *this, int a2, _DWORD **a3); int __thiscall sub_86C220(_DWORD *this, int a2); char __thiscall sub_86C250(_DWORD *this, int a2); char *__cdecl sub_86C290(int ArgList, int a2); float *__thiscall sub_86C310(float *this); char *sub_86C3B0(); LONG __thiscall sub_86C3C0(_DWORD *this); unsigned int __cdecl sub_86C420(int a1, float a2); void __thiscall sub_86C4F0(int this, _DWORD *a2); int __thiscall sub_86C590(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_86C630(int *this, signed int a2); int __thiscall sub_86C780(_DWORD *this, signed int a2); unsigned int __thiscall sub_86C860(unsigned __int16 *this, char a2); int __thiscall sub_86CB50(char *this, signed int a2); int __thiscall sub_86CBA0(char *this, signed int a2); char __thiscall sub_86CBF0(_DWORD *this, int a2); char *sub_86CC60(); _DWORD *__thiscall sub_86CC70(_DWORD *this); _DWORD *__thiscall sub_86CCB0(void *this, char a2); // float __userpurge sub_86CCF0@(float *this@, float *a2); void __thiscall sub_86CDB0(int this, int a2); signed int __thiscall sub_86CE40(int this, float *a2, int a3); int __thiscall sub_86CF00(_DWORD *this, int a2); _DWORD *sub_86D0B0(); int __thiscall sub_86D100(void *this); int __thiscall sub_86D190(void *this, int a2); unsigned int __thiscall sub_86D230(char *this, int a2); void __thiscall sub_86D2E0(int *this, unsigned int a2); unsigned int __thiscall sub_86D3A0(float *this, char ArgList); float *__thiscall sub_86D510(_DWORD *this); int __thiscall sub_86D530(int this, int a2); void __thiscall sub_86D5C0(float *this); _DWORD *__thiscall sub_86D690(_DWORD *this, _DWORD *a2); char __thiscall sub_86D700(_DWORD *this, int a2); int __thiscall sub_86D740(const char **this, unsigned int a2); char *sub_86D770(); int __thiscall sub_86D780(_WORD *this, int a2, _DWORD **a3); float *sub_86D830(); char __thiscall sub_86D880(_DWORD *this, int a2); _DWORD *__thiscall sub_86D900(void *this, char a2); int __thiscall sub_86D970(_WORD *this, _DWORD **a2); void __thiscall sub_86D9E0(int *this, void **a2); unsigned int __thiscall sub_86DB60(int *this, const char *a2); int __thiscall sub_86DBF0(void *this, int a2); int __thiscall sub_86DC40(_DWORD **this); // float __userpurge sub_86DC50@(float *this@); void __thiscall sub_86DCA0(_DWORD *this, int a2); int __thiscall sub_86DD30(float *this, float a2, float *a3, char a4); void __thiscall sub_86DFC0(_DWORD *this, int a2, _DWORD **a3); char __thiscall sub_86DFF0(_DWORD *this, int a2); char __thiscall sub_86E040(_DWORD *this, int a2); _DWORD *__thiscall sub_86E0B0(_DWORD *this, int a2); char *sub_86E100(); _DWORD *__thiscall sub_86E110(_DWORD *this); LONG __thiscall sub_86E150(_DWORD *this); int __thiscall sub_86E250(_DWORD *this, int a2); void __thiscall sub_86E290(_DWORD *this, int a2); int *__thiscall sub_86E300(_DWORD *this, int a2); int __thiscall sub_86E390(_DWORD *this, _BYTE *a2, char a3, bool *a4); int __thiscall sub_86E3D0(_DWORD *this, char a2); int __thiscall sub_86E460(_DWORD *this, int a2); char __thiscall sub_86E4C0(_DWORD *this, _DWORD **a2); void __thiscall sub_86E690(_DWORD *this, int a2); int __thiscall sub_86E6F0(_DWORD *this, _DWORD *a2); void *__thiscall sub_86E7A0(void *this, char a2); int __thiscall sub_86E7D0(int *this, signed int a2); int __thiscall sub_86E8B0(const char **this, signed int a2); unsigned int __thiscall sub_86E940(int *this, char *a2); int __cdecl sub_86E990(const void *, const void *); // idb int __cdecl sub_86E9E0(const void *, const void *); // idb int __thiscall sub_86EA00(int this); _DWORD *__thiscall sub_86EA70(_DWORD *this); _DWORD *sub_86EA90(); char __thiscall sub_86EAC0(_DWORD *this, int a2); int __thiscall sub_86EE40(_DWORD *this, int a2, float a3); int __stdcall sub_86EEE0(int, int, float); // idb void __thiscall sub_86EF00(void **this, void *a2); void *sub_86EF70(); unsigned int __thiscall sub_86EF80(_DWORD *this); char __thiscall sub_86F020(_DWORD *this, _DWORD *a2); char __thiscall sub_86F0A0(const void **this, _DWORD *a2); int __thiscall sub_86F110(unsigned __int16 *this); char *__thiscall sub_86F190(_WORD *this, _DWORD *a2, unsigned __int16 *a3); unsigned int __thiscall sub_86F2C0(int this, _DWORD *a2, int a3, int a4); _DWORD *__thiscall sub_86F390(void *this, char a2); _DWORD *__stdcall sub_86F3F0(_DWORD *a1, int a2, int a3); void **__thiscall sub_86F4C0(void *this, char a2); void __stdcall sub_86F5A0(int a1); void **__thiscall sub_86F600(void *this, char a2); void __thiscall sub_86F640(__int16 **this, int a2); void __thiscall sub_86F6E0(void **this, int a2, int a3, unsigned int a4); void __thiscall sub_86F740(int this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, size_t a9); int __thiscall sub_86FAE0(char *this, int a2); int __thiscall sub_86FE00(char *this, int a2); _DWORD *__stdcall sub_870080(unsigned int a1, int a2); char *__stdcall sub_870210(unsigned __int8 a1, int a2); signed int __cdecl sub_870400(_DWORD *a1, int a2, int a3, int a4, char a5); int __thiscall sub_870470(int *this, signed int a2); int __thiscall sub_870550(_DWORD *this, int a2); void **__thiscall sub_8705C0(void *this, char a2); char __stdcall sub_870600(unsigned __int16 *a1, unsigned __int8 a2, unsigned __int8 a3, int a4); unsigned int __stdcall sub_870BC0(int a1, int a2, _DWORD *a3); void __thiscall sub_870E60(_DWORD *this, unsigned __int16 *a2, int a3, unsigned __int8 a4, int a5, _DWORD *a6, _DWORD *a7); char __thiscall sub_870FE0(_DWORD *this, unsigned __int16 *a2, int a3, unsigned __int8 a4, int a5, int a6); _DWORD *__thiscall sub_8711C0(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9); _DWORD *__thiscall sub_871200(_DWORD *this); LONG __thiscall sub_871220(_DWORD *this); int __thiscall sub_871240(_DWORD *this, _DWORD *a2); char __thiscall sub_871250(float **this, int a2); char *sub_871280(); void *__thiscall sub_871290(void *this, char a2); int __thiscall sub_8712C0(int *this, signed int a2); int __thiscall sub_871300(char *this, _DWORD *a2); unsigned int __thiscall sub_871340(_WORD *this, int a2); _DWORD *__thiscall sub_8713C0(_DWORD *this, int a2); _DWORD *__thiscall sub_8713E0(_DWORD *this); LONG __thiscall sub_871400(_DWORD *this); void __thiscall sub_871410(_DWORD *this, int a2); int __thiscall sub_871420(int *this, signed int a2); int __thiscall sub_871430(const char **this, signed int a2); char __thiscall sub_871440(_DWORD *this, int a2); char *sub_871450(); void *__thiscall sub_871460(void *this, char a2); unsigned int __thiscall sub_871490(int *this, char *a2); int __cdecl sub_8714E0(const void *, const void *); // idb char __thiscall sub_871530(int *this, _DWORD *a2); unsigned int __thiscall sub_8715E0(int *this, signed int a2); void *__thiscall sub_871620(_DWORD *this, _DWORD *a2); char __thiscall sub_871720(_DWORD **this, int a2); bool __thiscall sub_871790(_DWORD **this, int a2); // float __userpurge sub_8717F0@(_DWORD *this@, float *a2); int __thiscall sub_8718D0(_DWORD *this, int a2, _DWORD **a3); _DWORD *sub_871970(); LONG __thiscall sub_8719C0(_DWORD *this, LONG a2); int __thiscall sub_871A50(_DWORD *this, _DWORD *a2); int __thiscall sub_871AE0(int *this, int **a2); void __thiscall sub_871C10(_DWORD *this, _DWORD *a2); LONG __thiscall sub_871E40(_DWORD *this); _DWORD *__thiscall sub_871EB0(_DWORD *this, int a2, int a3, int a4, void *a5, void *a6, void *a7, char *a8, int a9); _DWORD *__thiscall sub_872A60(_DWORD *this); bool __thiscall sub_872A80(void *this, int a2); int __thiscall sub_872AA0(void *this, int a2, _DWORD **a3); int __thiscall sub_872AB0(int *this, void **a2); int __thiscall sub_872AD0(_DWORD *this, _DWORD *a2); char __thiscall sub_872AF0(_DWORD **this, int a2); int __thiscall sub_872B30(_DWORD *this, int a2); char __thiscall sub_872B60(_DWORD *this, int a2); char *sub_872BA0(); void __thiscall sub_872BB0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_872BE0(_DWORD *this, _DWORD *a2); int __thiscall sub_872C10(void *this, int a2); unsigned int __thiscall sub_872C70(_DWORD *this, char *a2); void sub_872CF0(); int __thiscall sub_872D10(int *this, void **a2); int __thiscall sub_872D20(_DWORD *this, _DWORD *a2); int __thiscall sub_872D30(char *this, int a2); void sub_872DC0(); void __cdecl sub_872E00(const void *a1); _DWORD *__cdecl sub_872E60(float *a1, float *a2, int a3, unsigned int a4); int __cdecl sub_8732F0(int a1, int a2); int __cdecl sub_873620(int a1, int a2); unsigned int __thiscall sub_873650(int *this, int a2); float *__thiscall sub_8736A0(float *this); float *__thiscall sub_8736D0(float *this, int a2, float a3); _DWORD *__thiscall sub_873700(_DWORD *this, float *a2, float *a3); char *__thiscall sub_873740(float *this, const char *a2); int __thiscall sub_8737A0(char *this, signed int a2); int __thiscall sub_8737E0(_DWORD *this, int a2, float *a3); bool __thiscall sub_873E40(_DWORD *this, int a2); int __thiscall sub_873EB0(void *this, int a2); _DWORD *sub_873F50(); char *__cdecl sub_873FA0(int ArgList, int a2); char *__cdecl sub_8740C0(int ArgList, int a2); char *__cdecl sub_8741A0(int ArgList, int a2); LONG sub_874250(); void sub_8742E0(); int __thiscall sub_874320(int *this, void **a2); int __thiscall sub_874440(const char **this, _DWORD *a2); unsigned int __thiscall sub_874540(int *this, char a2); _DWORD *__thiscall sub_874740(_DWORD *this); int __stdcall sub_874770(int a1); char __stdcall sub_874780(int a1); char __stdcall sub_874790(int a1, int a2, int a3); char __stdcall sub_8747A0(int a1, int a2); void *__thiscall sub_8747B0(void *this, char a2); _DWORD *__thiscall sub_8747E0(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, unsigned __int16 a9, int a10, __int16 a11, __int16 a12); __int16 __thiscall sub_874850(_WORD *this); __int16 __thiscall sub_874860(_WORD *this); int __thiscall sub_874870(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); int sub_8748A0(); // weak int __thiscall sub_8748D0(_DWORD *this, _DWORD *a2); bool __thiscall sub_8748E0(float **this, int a2); char *sub_874920(); __int16 __thiscall sub_874930(_WORD *this, __int16 a2); __int16 __thiscall sub_874940(_WORD *this, __int16 a2); void *__thiscall sub_874950(void *this, char a2); int __thiscall sub_874980(int *this, signed int a2); int __thiscall sub_8749E0(char *this, _DWORD *a2); unsigned int __thiscall sub_874A40(_WORD *this, int a2); float *__thiscall sub_874B00(float *this, float a2, float a3, float a4, float a5); float *__thiscall sub_874B20(float *this, float *a2, float *a3); float *__thiscall sub_874B50(float *this, float *a2, float *a3); float *__thiscall sub_874B80(float *this, float *a2); float *__thiscall sub_874BB0(float *this, float *a2, float *a3); float *__cdecl sub_874C40(float *a1, float *a2); int __cdecl sub_874C70(int, float, int, int, int, int); // idb float *__cdecl sub_874CE0(float *a1, float *a2); float *__cdecl sub_874D90(float *a1, float *a2, float *a3, float *a4); float *__thiscall sub_874E70(float *this, float *a2, float *a3); void __thiscall sub_874F50(float *this, float *a2); void __thiscall sub_8750E0(float *this); float *__thiscall sub_875190(float *this); char *__thiscall sub_875200(float *this, int ArgList); float *__thiscall sub_875260(float *this, float a2, int a3); int __thiscall sub_8752B0(char *this, signed int a2); int __thiscall sub_875330(float *this, signed int a2); char __thiscall sub_8753C0(_BYTE *this, int a2); void __thiscall sub_875450(void *this); void __thiscall sub_8754D0(_DWORD *this); char *sub_875550(); _DWORD *__thiscall sub_875560(_DWORD *this, int a2); _BYTE *sub_8755F0(); _DWORD *__thiscall sub_875640(void *this, char a2); _BYTE *__thiscall sub_875690(_DWORD *this, int a2); _BYTE *__thiscall sub_875720(_DWORD *this, char a2, int a3, void *Src); int __thiscall sub_8757A0(int *this, signed int a2); int __thiscall sub_875880(_BYTE *this, signed int a2); unsigned int __thiscall sub_875910(void *this, int a2); int sub_875960(); char __thiscall sub_875990(void *this, int a2, int a3); int __thiscall sub_8759D0(_DWORD *this, int a2); int __thiscall sub_875A20(_DWORD *this, int a2); void *__thiscall sub_875A50(void *this, char a2); int __stdcall sub_875A80(int a1, int a2, __int16 a3); void *__thiscall sub_875AA0(void *this, char a2); int __thiscall sub_875AD0(_DWORD *this); int __thiscall sub_875B00(_DWORD *this); signed int __thiscall sub_875B20(_DWORD *this, signed int a2); int __cdecl sub_875B50(int a1); int __thiscall sub_875B80(_DWORD *this, int a2); unsigned int __thiscall sub_875B90(_DWORD *this, int a2); char __thiscall sub_875BC0(char *this, char *Src); int __cdecl sub_875C70(int a1, int a2); char __cdecl sub_875C90(int a1); unsigned int __cdecl sub_875CB0(int a1); int __thiscall sub_875D10(_DWORD *this); char __thiscall sub_875D40(char *this, char *Src); char __thiscall sub_875DD0(void *this, int *a2, _DWORD *a3); int __cdecl sub_875E20(char *Src); // idb int __thiscall sub_875EA0(_DWORD **this); int __thiscall sub_875EC0(_DWORD *this, int a2, int a3); void __thiscall sub_875EE0(_BYTE *this); int __thiscall sub_875F50(_DWORD *this, _BYTE *a2); void __thiscall sub_875F90(_BYTE *this); bool __stdcall sub_876000(const char *a1, const char *a2); __int16 __thiscall sub_876050(_BYTE *this, int a2, char *Src, __int16 a4); void **__thiscall sub_8760B0(void *this, char a2); void **__thiscall sub_8760F0(void *this, char a2); void *__thiscall sub_876130(void *this, char a2); void **__thiscall sub_876160(void *this, char a2); void **__thiscall sub_8761A0(void *this, char a2); void *__thiscall sub_8761E0(void *this, char a2); void **__thiscall sub_876210(void *this, char a2); void **__thiscall sub_876250(void *this, char a2); int __thiscall sub_876290(void **this); int __thiscall sub_876300(_DWORD *this); unsigned int __thiscall sub_876350(void **this); int __thiscall sub_8764B0(_DWORD *this, int a2); unsigned int __thiscall sub_8764F0(_DWORD *this); char __stdcall sub_8765E0(int *a1); void __thiscall sub_876670(_DWORD *this); int __thiscall sub_8766E0(_DWORD **this); int __thiscall sub_8767C0(_DWORD *this); unsigned int __thiscall sub_876820(_DWORD *this); int __thiscall sub_876940(_DWORD *this); int __thiscall sub_8769C0(_DWORD *this, _DWORD *a2); int __thiscall sub_876A50(_DWORD *this, const char *a2); void __thiscall sub_876AD0(_DWORD *this, int a2); void __thiscall sub_876B60(_DWORD *this); void *__thiscall sub_876BC0(void *this, char a2); void __thiscall sub_876BF0(_DWORD *this); LONG __thiscall sub_876C40(_DWORD *this, int a2); char __thiscall sub_876CA0(_DWORD **this); void __thiscall sub_876F30(_DWORD *this); unsigned int __cdecl sub_877000(char a1); void __thiscall sub_877020(_DWORD *this); _DWORD *sub_877080(); void __thiscall sub_877120(_DWORD *this); int __thiscall sub_8772A0(_DWORD *this, signed int a2); LONG __thiscall sub_8772E0(_DWORD *this, int a2); char __thiscall sub_877360(_DWORD *this, int a2); char __thiscall sub_877410(char *this); // char __usercall sub_8776B0@(_DWORD *a1@, int a2@); char __thiscall sub_877830(char *this); void __thiscall sub_877B60(_DWORD *this); char __thiscall sub_877E40(_DWORD *this); _DWORD *__thiscall sub_877EC0(_DWORD *this); void *__thiscall sub_8780C0(void *this, char a2); int __thiscall sub_8780F0(float *this, int a2, float a3); int __cdecl sub_878150(int, float, int); // idb void __thiscall sub_8781B0(float *this); float *__cdecl sub_878290(float *a1, float *a2); int __cdecl sub_878350(int, float, int, int); // idb char *__cdecl sub_8784D0(int ArgList); char *__cdecl sub_878510(int ArgList, char a2); char *__cdecl sub_878570(int ArgList, char a2); char *__cdecl sub_8785B0(int ArgList, __int16 a2); char *__cdecl sub_8785F0(int ArgList, __int16 a2); char *__cdecl sub_878630(int ArgList, int a2); char *__cdecl sub_878670(int ArgList, int a2); char *__cdecl sub_8786B0(int ArgList, float a2); char *__cdecl sub_878700(int ArgList, int a2); char *__cdecl sub_878740(int ArgList, int a2); int __thiscall sub_8787D0(_DWORD *this); void *sub_878810(); unsigned int __thiscall sub_878820(_DWORD *this, _DWORD *a2); char __thiscall sub_878890(float *this, int a2); void **__thiscall sub_878980(void *this, char a2); _DWORD *sub_8789E0(); unsigned int __thiscall sub_878A20(int *this, signed int a2); unsigned int __thiscall sub_878C40(void *this, int a2); BOOL __thiscall sub_878D90(float *this, int a2); int __thiscall sub_878E10(float *this); int __thiscall sub_878F50(int this, int a2, float a3, int a4, int a5, int a6); int __thiscall sub_878FA0(char *this, signed int a2); int __thiscall sub_879020(char *this, signed int a2); unsigned int __thiscall sub_879090(void *this, int a2); int __stdcall sub_8790E0(int a1); char __thiscall sub_8790F0(_DWORD *this, _DWORD **a2); char __thiscall sub_8791F0(_DWORD *this, _DWORD *a2); int __thiscall sub_879290(_DWORD *this, _DWORD *a2); void __thiscall sub_879370(int *this, signed int a2); unsigned int __thiscall sub_879410(void *this, int a2); _DWORD *__thiscall sub_879460(void *this, _DWORD **a2); _DWORD *sub_8794B0(); // signed int __usercall sub_8794D0@(int a1@, float *a2@, unsigned int a3@); int __thiscall sub_879520(_DWORD *this); void *__thiscall sub_879530(int this, char a2); int __thiscall sub_8795A0(int this, unsigned __int16 a2); signed int __thiscall sub_8795E0(_DWORD *this, unsigned __int16 a2, unsigned __int16 a3, char a4); bool __thiscall sub_879760(_DWORD *this, int a2); int __thiscall sub_8797A0(int this); _DWORD *__thiscall sub_879810(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8); char *sub_8798F0(); _DWORD *__thiscall sub_879900(_DWORD *this); int __thiscall sub_879990(int *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8); int __thiscall sub_879AF0(_DWORD *this, int a2, char a3, int a4, int a5); int __thiscall sub_879B90(_DWORD *this, _DWORD *a2); char __thiscall sub_879C00(float **this, int a2); LONG __thiscall sub_879E60(_DWORD *this); int __thiscall sub_879F80(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_87A050(int *this, signed int a2); int __thiscall sub_87A530(char *this, _DWORD *a2); unsigned int __thiscall sub_87A7B0(void *this, int a2); void *__thiscall sub_87AAA0(void *this, char a2); int __thiscall sub_87AAD0(unsigned __int16 *this, int *a2, _DWORD *a3, int a4); LONG __thiscall sub_87AC30(_DWORD *this); int __thiscall sub_87AC50(float *this, int a2, _DWORD **a3); _DWORD *__thiscall sub_87ACF0(_DWORD *this, _DWORD *a2); char __thiscall sub_87AD00(_DWORD *this, int a2); char *sub_87AD10(); float *__thiscall sub_87AD20(float *this); _DWORD *__thiscall sub_87ADC0(void *this, char a2); int __thiscall sub_87AE00(int *this, signed int a2); int __thiscall sub_87AE60(const char **this, signed int a2); bool __thiscall sub_87AEC0(float *this, int a2); unsigned int __thiscall sub_87AF40(int *this, char *a2); _DWORD *sub_87B070(); void sub_87B080(); float *__cdecl sub_87B0A0(float *a1, signed int a2, int a3); void __cdecl sub_87B3A0(int a1, float a2, int a3, int a4); char __thiscall sub_87B520(_DWORD *this, int a2, float a3); double __thiscall sub_87B540(_DWORD *this, unsigned int a2); void __thiscall sub_87B560(_DWORD *this, int a2, _DWORD **a3); char __thiscall sub_87B5E0(_DWORD *this, int a2); char *sub_87B650(); _DWORD *__thiscall sub_87B660(_DWORD *this, _DWORD **a2); int sub_87B6C0(); // weak _DWORD *__thiscall sub_87B700(void *this, char a2); int __thiscall sub_87B740(int *this, size_t a2); unsigned int __thiscall sub_87B7D0(_DWORD *this, char *a2); int __thiscall sub_87B8F0(_DWORD *this, int a2, int a3, int a4, int a5); int __thiscall sub_87B910(const char **this, _DWORD *a2); char *sub_87B930(); int __thiscall sub_87B940(_DWORD *this, _DWORD **a2); float *sub_87B9D0(); int __thiscall sub_87BA30(int *this, size_t a2); void *__thiscall sub_87BA90(void *this, char a2); bool __thiscall sub_87BAC0(float *this, int a2); unsigned int __thiscall sub_87BAF0(float *this, char *a2); int __cdecl sub_87BB70(int, int, float, float, int, int); // idb float *__cdecl sub_87BC30(unsigned __int16 a1, float *a2, float *a3, float *a4); float *__cdecl sub_87BCB0(unsigned __int16 a1, float *a2, float *a3, float *a4); signed int sub_87BEC8(); int __cdecl sub_87BF80(unsigned __int16 a1, float *a2, float *a3, float *a4); int __cdecl sub_87C070(unsigned __int16 a1, float *a2, float *a3, float *a4); int (__cdecl *__cdecl sub_87C140(int (__cdecl *a1)(__int16, int, int, int)))(__int16, int, int, int); int (__cdecl *__cdecl sub_87C150(int (__cdecl *a1)(__int16, int, int, int)))(__int16, int, int, int); int (__cdecl *__thiscall sub_87C160(void *this))(__int16, int, int, int); _DWORD *sub_87C1D0(); int __thiscall sub_87C200(int *this, signed int a2); int __thiscall sub_87C210(const char **this, signed int a2); char __thiscall sub_87C220(_DWORD *this, int a2); char *sub_87C230(); void *__thiscall sub_87C240(void *this, char a2); _DWORD *__thiscall sub_87C270(_DWORD *this, _DWORD **a2); _DWORD *__thiscall sub_87C2D0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); int __thiscall sub_87C330(_DWORD *this, int a2); unsigned int __thiscall sub_87C370(int *this, char *a2); int __thiscall sub_87C3C0(float *this); // float __userpurge sub_87C3F0@(float *a1@, int a2@, float *a3); BOOL __thiscall sub_87C4A0(float *this, float *a2); int __thiscall sub_87C510(char *this, int a2); int __thiscall sub_87C560(float *this, int a2); int __thiscall sub_87C5B0(_WORD *this, int a2, _DWORD **a3); _DWORD *__thiscall sub_87C5F0(_DWORD *this, _DWORD *a2); float *__thiscall sub_87C600(float *this); char *sub_87C690(); _DWORD *__thiscall sub_87C6A0(_DWORD *this, _DWORD *a2, int a3); _DWORD *__thiscall sub_87C750(_DWORD *this, _DWORD *a2, unsigned int a3); int __thiscall sub_87C7E0(float *this, int a2); void __thiscall sub_87C850(int this); // float __userpurge sub_87C8A0@(int a1@, int a2@); float *__thiscall sub_87C9A0(float *this, _DWORD **a2); float *sub_87CA00(); bool __thiscall sub_87CA20(_DWORD *this, int a2); _DWORD *__thiscall sub_87CA70(void *this, char a2); unsigned int __thiscall sub_87CAB0(_DWORD *this, unsigned int a2, unsigned int a3); _DWORD *__thiscall sub_87CB10(_DWORD *this, _DWORD *a2, unsigned int a3, _DWORD *a4); void __thiscall sub_87CB80(int this, float a2, int a3); void __thiscall sub_87CC40(int this, float a2); char __thiscall sub_87CD10(int this, float a2); int __thiscall sub_87CDD0(int this, float a2); int __thiscall sub_87CE30(int *this, void **a2); int __thiscall sub_87CEC0(const char **this, unsigned int a2); unsigned int __thiscall sub_87CF20(int *this, char a2); BOOL __cdecl sub_87CFF0(float a1, int a2, int a3, int a4, int a5); char __cdecl sub_87D130(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10); char *__thiscall sub_87D570(float *this, int ArgList); int __thiscall sub_87D5D0(char *this, signed int a2); void __cdecl sub_87D610(_DWORD *a1, _DWORD *a2); LONG __thiscall sub_87D660(_DWORD *this); _DWORD *__thiscall sub_87D6E0(_BYTE *this); _DWORD *__cdecl sub_87D770(void **a1, int a2); void __cdecl sub_87D7F0(_DWORD **a1, int a2); void __thiscall sub_87D860(void **this, _DWORD *a2); void __thiscall sub_87D900(_DWORD **this, _DWORD *a2); _DWORD *__thiscall sub_87D9C0(_DWORD *this, int a2); LONG __thiscall sub_87DA80(_DWORD *this); void *__thiscall sub_87DAF0(void *this, char a2); LONG __thiscall sub_87DB20(_DWORD *this); _DWORD *__thiscall sub_87DE20(_DWORD *this); bool __thiscall sub_87DE80(const char **this, int a2); char *sub_87DEA0(); _DWORD *__thiscall sub_87DEB0(void *this, _DWORD **a2); int sub_87DF00(); // weak void *__thiscall sub_87DF30(void *this, char a2); int __thiscall sub_87DF60(int *this, size_t a2); unsigned int __thiscall sub_87DFE0(_DWORD *this, char *a2); int (__cdecl *sub_87E030())(__int16, int, int, int); void sub_87E510(); int __stdcall sub_87E8C0(int a1, int a2, int a3); void **__thiscall sub_87E900(void **this, char *Src); _DWORD *__thiscall sub_87E940(void *this, char a2); bool __stdcall sub_87E990(const char *a1); void __thiscall sub_87E9B0(_DWORD *this); char __thiscall sub_87E9E0(void *this, int a2, _DWORD *a3, _DWORD *a4, void *a5, bool *a6, _DWORD *a7); _DWORD *__thiscall sub_87EA60(char *this); char *__thiscall sub_87EA90(void *this, char a2); int __thiscall sub_87EAD0(int this, int a2, int a3); _DWORD *__thiscall sub_87EB90(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9, int a10); _DWORD *__thiscall sub_87EBF0(_DWORD *this); int __thiscall sub_87EC20(void **this, unsigned __int16 a2, void *a3); _WORD *__thiscall sub_87EC60(_DWORD *this, unsigned __int16 a2, _WORD *a3, _WORD *a4, _WORD *a5); int __thiscall sub_87ECA0(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); int sub_87ECD0(); // weak int __thiscall sub_87ED10(_DWORD *this, _DWORD *a2); char __thiscall sub_87ED20(float **this, int a2); char *sub_87EDA0(); void **__thiscall sub_87EDB0(void **this, char a2); LONG __thiscall sub_87EDF0(_DWORD *this); _DWORD *__thiscall sub_87EE50(void *this, char a2); int __thiscall sub_87EEC0(int *this, signed int a2); int __thiscall sub_87F160(char *this, _DWORD *a2); unsigned int __thiscall sub_87F2A0(_WORD *this, int a2); void *sub_87F360(); void *__thiscall sub_87F370(void *this, char a2); _DWORD *__cdecl sub_87F3A0(int a1, int a2, int a3, int a4); int __cdecl sub_87F410(int *a1, int a2); _DWORD *__cdecl sub_87F480(int a1, int a2, int a3); int __thiscall sub_87F500(_DWORD *this, int a2, int a3); char __thiscall sub_87F520(_DWORD *this, int a2); char __thiscall sub_87F560(_DWORD *this, int a2, int a3, int a4, int a5); char __thiscall sub_87F5B0(_DWORD *this, int a2, int a3, int a4, int a5); _DWORD *__thiscall sub_87F600(_DWORD *this); char *sub_87F620(); LONG __thiscall sub_87F630(_DWORD *this); _DWORD *__cdecl sub_87F690(rsize_t a1, int a2); _DWORD *__cdecl sub_87F6F0(int a1, int a2, volatile LONG *a3); void *__thiscall sub_87F790(void *this, char a2); unsigned int __thiscall sub_87F7C0(void *this, int a2); int __thiscall sub_87F810(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_87F860(void **this); double __thiscall sub_87F880(_DWORD *this, int a2, int a3); int __thiscall sub_87F920(void *this, int a2, _DWORD **a3); bool __thiscall sub_87F930(void *this, int a2); void __thiscall sub_87F950(_DWORD *this); int __thiscall sub_87F9E0(_DWORD *this, int a2, int a3); LONG __thiscall sub_87FAB0(_DWORD *this); void *sub_87FB20(); _DWORD *__thiscall sub_87FB30(_DWORD *this, _DWORD *a2); int __thiscall sub_87FBA0(int this); _DWORD *__thiscall sub_87FC90(_DWORD *this); void *__thiscall sub_87FCC0(void *this, char a2); _DWORD *__thiscall sub_87FCF0(void *this, _DWORD **a2); _DWORD *__thiscall sub_87FD50(_DWORD *this); LONG __thiscall sub_87FD70(_DWORD *this); unsigned int __thiscall sub_87FD80(int *this, signed int a2); void *sub_87FD90(); void *__thiscall sub_87FDA0(void *this, char a2); // float __usercall sub_87FDD0@(float *a1); float *__thiscall sub_87FE60(void *this); size_t *__thiscall sub_8800E0(size_t *this, size_t a2); unsigned __int16 __thiscall sub_880130(int this, unsigned __int16 a2, _WORD *a3, _WORD *a4, _WORD *a5); _DWORD *sub_880270(); char *sub_8802B0(); unsigned __int16 __thiscall sub_8802C0(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); char __thiscall sub_880300(float **this, int a2); int __thiscall sub_880390(_WORD *this); LONG __thiscall sub_8803B0(_DWORD *this); int __thiscall sub_880430(void *this, __int16 a2, int a3, int a4); void *__thiscall sub_8804D0(void *this, char a2); int __thiscall sub_880500(int *this, signed int a2); int __thiscall sub_880670(char *this, _DWORD *a2); unsigned int __thiscall sub_880740(_WORD *this, int a2); char *sub_880830(); int __thiscall sub_880840(_WORD *this, int a2); _DWORD *sub_880890(); LONG sub_8808C0(); void sub_880930(); unsigned int __thiscall sub_880970(int *this, char a2); int __thiscall sub_880A00(int *this, void **a2); bool __thiscall sub_880A10(_DWORD *this, int a2); int __thiscall sub_880A30(const char **this, _DWORD *a2); bool __thiscall sub_880A40(_DWORD *this, int a2); _DWORD *__thiscall sub_880A60(_DWORD *this); char *sub_880A80(); _DWORD *__thiscall sub_880A90(void *this, int a2); int sub_880AE0(); // weak void *__thiscall sub_880B10(void *this, char a2); LONG sub_880B40(); void sub_880BB0(); unsigned int __thiscall sub_880BF0(int *this, int a2); char __thiscall sub_880C40(_DWORD *this, int a2); char *sub_880C50(); int __thiscall sub_880C60(_WORD *this, int a2); int sub_880CB0(); // weak _DWORD *sub_880CE0(); void sub_880D50(); int __thiscall sub_880D90(const char **this, _DWORD *a2); unsigned int __thiscall sub_880DD0(int *this, char a2); char __thiscall sub_880E60(_DWORD *this, int a2); char *sub_880E90(); int __thiscall sub_880EA0(_WORD *this, int a2); _DWORD *sub_880EF0(); LONG sub_880F20(); void sub_880F90(); unsigned int __thiscall sub_880FD0(int *this, char a2); char *sub_881060(); int __thiscall sub_881070(_WORD *this, int a2); _DWORD *sub_8810C0(); LONG sub_8810F0(); void sub_881160(); __int16 __thiscall sub_8811A0(int *this, void **a2); unsigned int __thiscall sub_881200(int *this, char a2); bool __thiscall sub_881290(_DWORD *this, int a2); char *sub_8812A0(); _DWORD *sub_8812B0(); unsigned int __thiscall sub_8812E0(int *this, signed int a2); int __thiscall sub_8812F0(const char **this, signed int a2); bool __thiscall sub_881300(float *this, float *a2); void *__thiscall sub_881310(void *this, char a2); void *__thiscall sub_881340(void *this, char a2); void __thiscall sub_881370(void (__stdcall ****this)(signed int)); char *sub_8813B0(); _DWORD *sub_8813C0(); void *__thiscall sub_881430(void *this, char a2); _DWORD *__thiscall sub_881460(_DWORD *this, _DWORD **a2); char *sub_8814C0(); _DWORD *__thiscall sub_8814D0(_DWORD *this, int a2, _DWORD **a3); char __thiscall sub_881550(_DWORD *this, int a2); int __thiscall sub_881590(_DWORD *this, int a2); int *__thiscall sub_881610(int *this, unsigned int a2); void **__thiscall sub_8816B0(void *this, char a2); _DWORD *sub_881760(); unsigned int __thiscall sub_8817A0(char *this, _DWORD *a2); char __thiscall sub_881980(float **this, int a2); _DWORD *__thiscall sub_881B10(_DWORD *this, __int16 a2, void *Src, void *a4, void *a5); void **__thiscall sub_881C70(void *this, char a2); _DWORD *__thiscall sub_881CE0(_DWORD *this, _DWORD **a2); _DWORD *sub_881D40(); unsigned int __thiscall sub_881D80(int *this, signed int a2); int __thiscall sub_881F80(_DWORD *this, _DWORD *a2); unsigned int __thiscall sub_882010(char *this, _DWORD *a2); char __thiscall sub_882190(_WORD *this, int a2); void __thiscall sub_882370(_DWORD *this); void __thiscall sub_8823D0(_DWORD *this); void *__thiscall sub_882430(void *this, char a2); void *__thiscall sub_882460(void *this, char a2); int *__thiscall sub_882490(void **this, unsigned int a2); void sub_882580(); unsigned int __thiscall sub_8825A0(void *this, int a2); unsigned int __thiscall sub_882660(int *this, char *a2); unsigned int __thiscall sub_8826B0(void *this, signed int a2); _DWORD *__thiscall sub_882870(_DWORD *this); char *sub_882980(); LONG __thiscall sub_882990(_DWORD *this); LONG __thiscall sub_882A30(_WORD *this, int a2, _DWORD **a3); _DWORD *sub_882C20(); unsigned int __thiscall sub_882C40(int *this, char *a2); LONG __thiscall sub_882C90(_DWORD *this); void __thiscall sub_882DC0(int *this, signed int a2); void *__thiscall sub_8831A0(void *this, char a2); _DWORD *__thiscall sub_8831D0(_WORD *this, _DWORD **a2); unsigned int __thiscall sub_883220(_DWORD *this, _DWORD *a2); void *__thiscall sub_883310(void *this, char a2); float *sub_883340(); bool __thiscall sub_883380(float *this, float *a2); char *sub_8833E0(); void *__thiscall sub_8833F0(void *this, char a2); int __thiscall sub_883420(float *this, _DWORD **a2); int __thiscall sub_883490(int *this, size_t a2); int __thiscall sub_883550(const char **this, _DWORD *a2); unsigned int __thiscall sub_8835E0(float *this, char *a2); BOOL __thiscall sub_883690(float *this, float *a2); float *__thiscall sub_8836F0(float *this); char *sub_8837B0(); // float __userpurge sub_8837D0@(int this@); // float __userpurge sub_883A30@(void *this@); int __thiscall sub_883A40(_WORD *this, int a2, _DWORD **a3); float *sub_883B80(); int __thiscall sub_883BA0(_DWORD *this, _DWORD *a2); char __thiscall sub_883C00(_DWORD *this, int a2); char *__cdecl sub_883C40(int ArgList, int a2); char *__cdecl sub_883CF0(int ArgList, int a2); _DWORD *__thiscall sub_883DB0(void *this, char a2); float *__thiscall sub_883E10(_WORD *this, _DWORD **a2); bool __thiscall sub_883E60(float *this, int a2); int __thiscall sub_883F10(int *this, signed int a2); int __thiscall sub_884090(const char **this, signed int a2); unsigned int __thiscall sub_884190(int *this, char *a2); char __thiscall sub_8843D0(_DWORD *this, _DWORD *a2); char *sub_884490(); void __thiscall sub_8844A0(_DWORD *this, _DWORD *a2, _DWORD **a3); _DWORD *sub_884580(); _DWORD *__thiscall sub_8845C0(void *this, char a2); _DWORD *__thiscall sub_884620(_DWORD *this, _DWORD **a2); int __thiscall sub_884690(int *this, size_t a2); int __thiscall sub_884740(const char **this, _DWORD *a2); void __thiscall sub_8847D0(int *this, char *a2); char __thiscall sub_884970(_DWORD *this, int a2); char *sub_884A30(); _DWORD *__thiscall sub_884A40(_DWORD *this, int a2, _DWORD **a3); _DWORD *sub_884B10(); _DWORD *__thiscall sub_884B50(void *this, char a2); _DWORD *__thiscall sub_884BB0(_DWORD *this, _DWORD **a2); int __thiscall sub_884C10(const char **this, _DWORD *a2); void *__thiscall sub_884C70(int *this, size_t a2); unsigned int __thiscall sub_884D10(_DWORD *this, char *a2); _DWORD *__thiscall sub_884E30(_DWORD *this, _DWORD *a2); char __thiscall sub_884E40(_DWORD *this, int a2); bool __thiscall sub_884E50(float *this, float *a2); char *sub_884EA0(); signed int sub_884EB0(); float *__thiscall sub_884EC0(float *this); char *sub_884F30(); float *__thiscall sub_884F40(float *this); float *__thiscall sub_884F70(float *this, _DWORD **a2); float *sub_884FF0(); int __thiscall sub_885010(int *this, signed int a2); int __thiscall sub_885070(const char **this, signed int a2); unsigned int __thiscall sub_8850D0(int *this, char *a2); bool __thiscall sub_8851D0(_DWORD *this, int a2); int __thiscall sub_8851F0(const char **this, _DWORD *a2); bool __thiscall sub_885200(_DWORD *this, int a2); void __thiscall sub_885250(_DWORD *this); char __thiscall sub_8852C0(void *this); LONG __thiscall sub_8852E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); unsigned int __thiscall sub_885560(_DWORD *this, _DWORD *a2); char *sub_885690(); LONG __thiscall sub_8856A0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8); _DWORD *sub_885920(); _DWORD *__thiscall sub_885990(void *this, char a2); int __thiscall sub_8859F0(int *this, int a2); unsigned int __thiscall sub_885BA0(int *this, int a2); unsigned int __thiscall sub_885BF0(int this, int a2); char __thiscall sub_885C00(_DWORD **this, int a2); void __thiscall sub_885C30(void **this, void *a2); void *sub_885CE0(); int __thiscall sub_885CF0(void *this, int a2); int sub_885D20(); // weak int __thiscall sub_885D60(_DWORD *this, _DWORD *a2); bool __thiscall sub_885DC0(_DWORD *this, int a2); _DWORD *__thiscall sub_885E90(void *this, char a2); __int16 __thiscall sub_885F00(_DWORD *this, int a2, _DWORD **a3); int __thiscall sub_886050(int *this, signed int i); int __thiscall sub_8861C0(_DWORD *this, signed int a2); int __thiscall sub_886320(_DWORD *this, _DWORD **a2); int __thiscall sub_886380(_DWORD *this, int a2); double __cdecl sub_8863A0(float a1, float a2); char *sub_8863D0(); float *__thiscall sub_8863E0(float *this); _DWORD *__thiscall sub_886440(void *this, char a2); void __thiscall sub_886480(int this, int a2); unsigned int __thiscall sub_886510(int this, float *a2, int a3); float *sub_886640(); char __thiscall sub_886660(float *this, int a2); float *__thiscall sub_8866E0(void *this); // float __userpurge sub_886740@(float *this@, int a2); float *__thiscall sub_8867D0(void *this, int a2); int __thiscall sub_886840(char *this, int a2); // float __userpurge sub_8868D0@(float *this@, int a2); void __thiscall sub_886900(int *this, unsigned int a2); unsigned int __thiscall sub_8869A0(float *this, _DWORD *a2); LONG __thiscall sub_886B00(_DWORD *this); void __thiscall sub_886B50(void **this, void *a2); void __thiscall sub_886B70(void **this, void *a2); void __thiscall sub_886B90(void **this, void *a2); void __thiscall sub_886BB0(void **this, void *a2); void __thiscall sub_886BD0(void **this, void *a2); signed int __thiscall sub_886BF0(int this, unsigned __int16 a2); char *sub_886D30(); int __thiscall sub_886D40(unsigned __int16 *this, unsigned __int16 a2); __int16 __thiscall sub_886D60(_WORD *this); void **__thiscall sub_886D70(void *this, char a2); _DWORD *__thiscall sub_886DD0(_DWORD *this); _DWORD *sub_886E20(); _DWORD *sub_886E80(); char __thiscall sub_886EE0(float **this, _DWORD *a2); void __thiscall sub_8870F0(int *this, signed int a2); int __thiscall sub_8875B0(char *this, _DWORD *a2); unsigned int __thiscall sub_8877C0(void *this, int a2); int __thiscall sub_887950(float *this, float *a2, _DWORD **a3); bool __thiscall sub_887990(float *this, float *a2); float *__thiscall sub_887A00(_DWORD *this); int __thiscall sub_887A10(float *this, _DWORD **a2); float *sub_887A90(); int __thiscall sub_887AD0(int *this, signed int a2); int __thiscall sub_887B50(const char **this, signed int a2); unsigned int __thiscall sub_887BD0(int *this, char *a2); int __thiscall sub_887CD0(int *this, void **a2); int __thiscall sub_887CF0(unsigned __int16 *this, unsigned __int16 a2); bool __thiscall sub_887D70(_DWORD *this, int a2); int __thiscall sub_887DA0(char *this, _DWORD *a2); char __thiscall sub_887DD0(float **this, _DWORD *a2); char *sub_887E10(); _DWORD *__thiscall sub_887E20(_DWORD *this); LONG __thiscall sub_887EA0(_DWORD *this); signed int __thiscall sub_887F00(int this, unsigned __int16 a2); int __thiscall sub_888020(_WORD *this); _DWORD *sub_8880C0(); int __thiscall sub_8880F0(_DWORD *this, _DWORD *a2); void *__thiscall sub_888150(void *this, char a2); unsigned int __thiscall sub_888180(void *this, int a2); int __thiscall sub_8881D0(int this, float a2, char a3); _DWORD *__thiscall sub_888200(int this, float a2); _DWORD *sub_888220(); int __thiscall sub_888250(_DWORD *this, _DWORD *a2); char __thiscall sub_888260(_DWORD *this, int a2); void *sub_888270(); int __thiscall sub_888280(_DWORD *this, _DWORD **a2); LONG __thiscall sub_8882E0(float *this); int __thiscall sub_888380(_DWORD *this, _BYTE *a2, int a3, bool *a4); int __thiscall sub_8883C0(_DWORD *this, int a2); int __thiscall sub_8883F0(_DWORD *this, _DWORD *a2); int __thiscall sub_888420(_DWORD *this); int __thiscall sub_888440(_DWORD *this, int a2); unsigned int __thiscall sub_888470(int *this, char *a2); _DWORD *__thiscall sub_8884C0(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, char a6, __int16 a7, int a8); int sub_888540(); // weak char __thiscall sub_888570(float **this, int a2); char *sub_8885E0(); _DWORD *__thiscall sub_8885F0(void *this, char a2); int __thiscall sub_888630(int *this, signed int a2); int __thiscall sub_888680(char *this, _DWORD *a2); unsigned int __thiscall sub_8886C0(_DWORD *this, int a2); _DWORD *__thiscall sub_888740(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, char a6, __int16 a7, int a8); _DWORD *sub_888790(); int __thiscall sub_8887C0(_DWORD *this, _DWORD *a2); char *sub_8887D0(); void __thiscall sub_8887E0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_888910(_DWORD *this, _DWORD **a2); int __thiscall sub_888970(_DWORD *this, int a2); unsigned int __thiscall sub_8889B0(int *this, char *a2); void __thiscall sub_888A00(_DWORD *this, int a2, _DWORD **a3); void __thiscall sub_888A80(_DWORD *this, _DWORD *a2); char __thiscall sub_888A90(_DWORD *this, int a2); char *sub_888AF0(); _DWORD *__thiscall sub_888B00(_DWORD *this, _DWORD **a2); int sub_888B60(); // weak _DWORD *__thiscall sub_888BA0(void *this, char a2); int __thiscall sub_888BE0(const char **this, _DWORD *a2); unsigned int __thiscall sub_888C40(_DWORD *this, char *a2); bool __thiscall sub_888D60(void *this, int a2); bool __thiscall sub_888D70(float *this, int a2); char *sub_888DA0(); int __thiscall sub_888DB0(float *this, _DWORD **a2); float *sub_888E00(); void *__thiscall sub_888E30(void *this, char a2); int __thiscall sub_888E60(int *this, size_t a2); int __thiscall sub_888EA0(const char **this, _DWORD *a2); unsigned int __thiscall sub_888EE0(float *this, char *a2); int __thiscall sub_888F70(int *this, void **a2); int __thiscall sub_888FA0(const char **this, unsigned int a2); // float __userpurge sub_888FD0@(float *this@); // float __userpurge sub_889050@(float *this@); float *__thiscall sub_889060(float *this, float *a2, float *a3, char a4); signed int __thiscall sub_8892B0(int this, int a2); char __thiscall sub_8893E0(float *this, int a2); unsigned int __thiscall sub_889420(int *this, char *a2); char *sub_8894E0(); int __thiscall sub_8894F0(_DWORD *this, _DWORD **a2); int sub_889590(); // weak bool __thiscall sub_8895F0(_BYTE *this, int a2); char *sub_889610(); int __thiscall sub_889620(_BYTE *this, _DWORD **a2); _DWORD *sub_889670(); void *__thiscall sub_8896A0(void *this, char a2); int __thiscall sub_8896D0(int *this, size_t a2); int __thiscall sub_889720(const char **this, _DWORD *a2); unsigned int __thiscall sub_889770(_DWORD *this, char *a2); int __thiscall sub_8897F0(int this, float a2, int a3); int __thiscall sub_889820(float *this, float a2); int __thiscall sub_889850(float *this, float a2); char __stdcall sub_889880(float *a1, float *a2, float *a3, float *a4, float a5); char __thiscall sub_889AA0(_DWORD *this, int a2); char *__cdecl sub_889AE0(int ArgList, int a2); char *sub_889BA0(); float *__thiscall sub_889BB0(float *this, float *a2); void __thiscall sub_88A3A0(float *this, int a2); int __thiscall sub_88A3D0(int this); int __thiscall sub_88A460(_WORD *this, _DWORD **a2); float *sub_88A4D0(); __int16 __thiscall sub_88A520(int *this, void **a2); int __thiscall sub_88A5B0(const char **this, unsigned int a2); unsigned int __thiscall sub_88A5F0(int *this, char *a2); _DWORD *__thiscall sub_88A680(_DWORD *this); void __thiscall sub_88A6A0(_DWORD *this, int a2, _DWORD **a3); _DWORD *sub_88A6B0(); char __thiscall sub_88A6E0(_DWORD *this, int a2); char *sub_88A6F0(); int __thiscall sub_88A700(_DWORD *this, int a2); _DWORD *__thiscall sub_88A730(_DWORD *this, _DWORD **a2); int __thiscall sub_88A790(_DWORD *this, int a2); unsigned int __thiscall sub_88A7D0(int *this, char *a2); _DWORD *__thiscall sub_88A820(_DWORD *this, int a2, _DWORD *a3, int a4); char __thiscall sub_88A930(unsigned int *this, _DWORD *a2); void *__thiscall sub_88A9C0(void *this, char a2); char __thiscall sub_88A9F0(int this, unsigned int a2, _DWORD *a3, _DWORD *a4, _WORD *a5, _DWORD *a6, _DWORD *a7, _DWORD *a8); bool __thiscall sub_88AA80(_WORD *this, int a2); char *sub_88ABD0(); unsigned int __thiscall sub_88ABE0(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int16 a6); LONG __thiscall sub_88AEE0(_DWORD *this); int sub_88AFB0(); // weak void *__thiscall sub_88AFD0(void *this, char a2); int __thiscall sub_88B000(char *this, signed int a2); int __thiscall sub_88B0E0(char *this, signed int a2); unsigned int __thiscall sub_88B1C0(_DWORD *this, char a2); unsigned int __thiscall sub_88BA00(size_t *this, int a2, int a3, int a4, int a5, unsigned __int16 a6); void __thiscall sub_88BBD0(int *this, signed int a2); unsigned int __thiscall sub_88BDD0(char *this, signed int a2); void __thiscall sub_88BEE0(_DWORD *this, unsigned int a2); float *__thiscall sub_88C300(unsigned __int16 *this); void *__thiscall sub_88C510(void *this); float *sub_88C550(); char sub_88C610(); float *__thiscall sub_88C6C0(float *this); LONG __thiscall sub_88C790(_DWORD *this); int __thiscall sub_88C850(_DWORD *this); int __thiscall sub_88C870(_DWORD *this); _DWORD *__thiscall sub_88C910(_DWORD *this, int a2); int __thiscall sub_88C950(_DWORD **this, int a2); _DWORD **__thiscall sub_88C980(_DWORD **this, float a2, char a3); int __thiscall sub_88C9E0(_DWORD *this); int __thiscall sub_88CA40(_DWORD *this); int __thiscall sub_88CAA0(_DWORD *this, float a2); int __thiscall sub_88CB10(_DWORD *this, _DWORD **a2); int __thiscall sub_88CB80(_DWORD *this, _DWORD **a2); char __thiscall sub_88CCE0(float *this, float a2); int sub_88CD10(); int __thiscall sub_88CD20(int *this, signed int a2); int __stdcall sub_88CD80(int a1); bool __thiscall sub_88CDA0(void *this, int a2); int __thiscall sub_88CDD0(void *this, signed int a2); // bool __userpurge sub_88CE10@(float *a1@, double a2@, int a3); int sub_88CE60(); double __thiscall sub_88CE70(float *this); void *__thiscall sub_88CE90(_DWORD *this, char a2); _DWORD *__thiscall sub_88CEC0(_DWORD *this, char a2); void *__thiscall sub_88CF00(_DWORD *this, char a2); int __thiscall sub_88CF30(_DWORD *this); void *sub_88CFB0(); int sub_88CFC0(); float *__thiscall sub_88CFD0(float *this); LONG __thiscall sub_88D0F0(_DWORD *this); char __thiscall sub_88D190(_DWORD *this, int a2); int __thiscall sub_88D280(_DWORD *this); int __thiscall sub_88D3D0(_DWORD *this); _DWORD *__stdcall sub_88D3F0(int a1); int __thiscall sub_88D430(int *this); int __stdcall sub_88D450(int a1); bool __thiscall sub_88D480(int *this, int a2); bool __stdcall sub_88D4A0(int a1, int a2); char __thiscall sub_88D520(int *this); char __stdcall sub_88D540(int a1); int sub_88D590(); int __thiscall sub_88D5B0(_DWORD *this, _DWORD **a2); int __thiscall sub_88D5D0(_DWORD *this, _DWORD **a2); _DWORD *__thiscall sub_88D5F0(_DWORD *this, _DWORD *a2); char __thiscall sub_88D720(_DWORD *this, _DWORD *a2); char __thiscall sub_88D780(float *this, float a2); int __thiscall sub_88D820(_DWORD *this, _DWORD **a2); int __thiscall sub_88D890(_DWORD *this, _DWORD **a2); // int __thiscall unknown_libname_27(_DWORD); weak _DWORD *__thiscall sub_88D910(_DWORD *this, int a2); bool __stdcall sub_88D9C0(int a1); bool __thiscall sub_88DA40(int *this, int a2); bool __stdcall sub_88DA60(int a1, int a2); int __thiscall sub_88DAB0(int *this); int __stdcall sub_88DAD0(int a1); // int __thiscall unknown_libname_29(_DWORD, _DWORD, _DWORD); weak int sub_88DB20(); int __thiscall sub_88DB30(int *this, signed int a2); int __stdcall sub_88DB90(int a1); bool __thiscall sub_88DBB0(void *this, int a2); int __thiscall sub_88DBE0(void *this, signed int a2); // bool __userpurge sub_88DC20@(float *a1@, double a2@, int a3); void *__thiscall sub_88DC50(_DWORD *this, char a2); _DWORD *__thiscall sub_88DC80(_DWORD *this, char a2); _DWORD *__thiscall sub_88DCC0(_DWORD *this); void __stdcall sub_88DD20(_DWORD *a1); void *__thiscall sub_88DD50(_DWORD *this, char a2); _DWORD *__thiscall sub_88DD80(_DWORD *this, _DWORD *a2); void *sub_88DDE0(); _DWORD *__thiscall sub_88DDF0(_DWORD *this, int a2); LONG __thiscall sub_88DE60(_DWORD *this); int __thiscall sub_88DEA0(_DWORD *this); int __thiscall sub_88DF30(void *this, unsigned __int8 a2); int __thiscall sub_88DF70(void *this, char a2); const char **__thiscall sub_88DFC0(const char **this, char *Src); const char **__thiscall sub_88DFF0(const char **this, char *Src, int a3); char __thiscall sub_88E370(_DWORD *this); char __thiscall sub_88E610(_DWORD *this); int __thiscall sub_88E6A0(_DWORD *this); int __thiscall sub_88E6C0(_DWORD *this, int a2); char __thiscall sub_88E780(float *this, float a2, float a3, float a4); float *__thiscall sub_88E7F0(int this, float *a2, float *a3, float *a4); char __thiscall sub_88E850(float *this, float a2, float a3); float *__thiscall sub_88E8B0(int this, float *a2, float *a3); char __thiscall sub_88E900(float *this, float a2); double __thiscall sub_88E9F0(int this); char __thiscall sub_88EA90(_DWORD *this, int a2); int __thiscall sub_88EB30(_DWORD *this); int __thiscall sub_88EBD0(_DWORD *this, int a2, int a3); int __thiscall sub_88EC20(_DWORD *this, int a2, int a3); char __thiscall sub_88EC70(float *this); char __thiscall sub_88EF40(_DWORD *this); int __thiscall sub_88EFF0(_DWORD *this); signed int __thiscall sub_88F090(_DWORD *this); char __thiscall sub_88F1C0(float *this, float a2); double __thiscall sub_88F2F0(float *this); char __thiscall sub_88F430(_DWORD *this, float *a2); char __thiscall sub_88F550(_DWORD *this, int a2); int __thiscall sub_88F610(_DWORD *this); int __thiscall sub_88F6D0(float *this, float a2); char __thiscall sub_88F8C0(float *this, float a2); double __thiscall sub_88F920(int this); char __thiscall sub_88F970(float *this, float a2); double __thiscall sub_88F9D0(int this); char __thiscall sub_88FA20(float *this, float a2); double __thiscall sub_88FA80(int this); int __thiscall sub_88FAD0(_DWORD *this, int a2); _DWORD *__thiscall sub_88FB60(_DWORD *this, int a2, int a3); // float *__userpurge sub_88FBE0@(int a1@, double a2@, float *a3); char __thiscall sub_88FCC0(_DWORD *this); float *__thiscall sub_88FE50(float *this, _DWORD **a2); float *__thiscall sub_88FEB0(float *this, float *a2, _DWORD **a3); _DWORD *sub_88FF00(); void __thiscall sub_88FF40(int *this, _DWORD *a2); _DWORD *__thiscall sub_890050(_DWORD *this, _DWORD *a2); char __thiscall sub_890070(_DWORD *this, int a2); // int __userpurge sub_890090@(const char **a1@, double a2@, _DWORD *a3); bool __thiscall sub_8900E0(float *this, int a2); void *__thiscall sub_890140(_DWORD *this, char a2); void *sub_890170(); _DWORD *__thiscall sub_890180(_DWORD *this, _DWORD *a2); float *__thiscall sub_8901B0(float *this); LONG __thiscall sub_8902C0(_DWORD *this); _DWORD *__thiscall sub_8902F0(_DWORD *this); int __thiscall sub_890340(_DWORD *this, int a2); // int __usercall sub_8903A0@(int a1@, double a2@); int __thiscall sub_890510(_DWORD *this, int a2); // float *__userpurge sub_890590@(int a1@, double a2@, float *a3); _DWORD *__thiscall sub_890640(_DWORD *this, int a2, int a3); // struct Concurrency::details::SchedulerBase *__cdecl Concurrency::details::SchedulerBase::CurrentScheduler(); idb int __thiscall sub_8906E0(int *this, signed int a2); _DWORD *__thiscall sub_890720(_DWORD *this, _DWORD *a2); bool __thiscall sub_890740(_DWORD *this, int a2); int __thiscall sub_890790(const char **this, signed int a2); bool __thiscall sub_8907D0(float *this, int a2); int __thiscall sub_890850(_DWORD *this, _DWORD *a2); int __thiscall sub_890880(char *this); int __thiscall sub_8908A0(_DWORD *this, _DWORD *a2); int __thiscall sub_8908D0(char *this); void *__thiscall sub_8908F0(_DWORD *this, char a2); void *sub_890920(); _DWORD *__thiscall sub_890930(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_890960(_DWORD *this, int a2); LONG __thiscall sub_8909C0(_DWORD *this); _DWORD *__thiscall sub_890A40(_DWORD *this); errno_t __thiscall sub_890C10(void **this, char *Src); char __thiscall sub_890F60(_DWORD *this); char __thiscall sub_8910D0(void *this); // int __thiscall unknown_libname_31(_DWORD); weak // char __userpurge sub_891120@(float *a1@, double a2@, float a3, float a4, float a5); void __thiscall sub_891170(float *this, float a2); char __thiscall sub_891260(float *this, float a2, float a3, float a4); float *__thiscall sub_8912B0(float *this, float *a2, float *a3, float *a4); char __thiscall sub_8912F0(float *this, float a2, float a3); float *__thiscall sub_891320(float *this, float *a2, float *a3); char __thiscall sub_891350(float *this, float a2); double __thiscall sub_891370(float *this); char __thiscall sub_891390(_DWORD *this, int a2); int __thiscall sub_8913B0(_DWORD *this); char __thiscall sub_8913D0(float *this, float a2); double __thiscall sub_8913F0(float *this); char __thiscall sub_891410(_DWORD *this, int a2); int __thiscall sub_891430(_DWORD *this); char __thiscall sub_891450(float *this, float a2); double __thiscall sub_891470(float *this); char __thiscall sub_891490(float *this, float a2); double __thiscall sub_8914B0(float *this); char __thiscall sub_8914D0(float *this, float a2); double __thiscall sub_8914F0(float *this); int __thiscall sub_891510(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_891540(_DWORD *this, _DWORD *a2); int __thiscall sub_891570(float *this, float *a2, _DWORD **a3); int sub_891800(); int __thiscall sub_891810(int *this, signed int a2); _DWORD *__thiscall sub_891B50(_DWORD *this, _DWORD *a2); char __thiscall sub_891B70(_DWORD *this, int a2); // int __userpurge sub_891B90@(const char **a1@, double a2@, _DWORD *a3); bool __thiscall sub_891E00(float *this, int a2); int __thiscall sub_8925D0(_DWORD *this, _DWORD *a2); int __thiscall sub_892600(char *this); int __thiscall sub_892620(_DWORD *this, _DWORD *a2); int __thiscall sub_892650(char *this); _DWORD *__thiscall sub_892670(_DWORD *this, int a2); int __thiscall sub_892690(_DWORD *this); int __fastcall sub_8926B0(int a1, int a2, char a3); BOOL __thiscall sub_892710(_WORD *this); int __fastcall sub_892740(int a1, int a2, char a3); BOOL __thiscall sub_8927A0(_WORD *this); int __fastcall sub_8927D0(int a1, int a2, char a3); BOOL __thiscall sub_892830(_WORD *this); int __fastcall sub_892860(int a1, int a2, char a3); BOOL __thiscall sub_8928C0(_WORD *this); int __thiscall sub_8928F0(_DWORD *this); bool __stdcall sub_892910(float a1, float a2, float a3); void *__thiscall sub_892960(_DWORD *this, char a2); int __cdecl sub_892990(int a1, int a2); int __cdecl sub_8929C0(int a1, int a2); int __cdecl sub_8929F0(int a1, int a2); int __cdecl sub_892A20(int a1, int a2); int __cdecl sub_892A50(int a1, int a2, int a3); int __cdecl sub_892A90(int a1, int a2, int a3); int __cdecl sub_892AD0(int a1, int a2, int a3); int __cdecl sub_892B10(int a1, int a2, int a3); void *sub_892B50(); float *__thiscall sub_892B60(float *this); LONG __thiscall sub_892C70(_DWORD *this); // int __thiscall unknown_libname_32(_DWORD); weak // struct Concurrency::details::SchedulerBase *__cdecl Concurrency::details::SchedulerBase::CurrentScheduler(); idb int __thiscall sub_892CD0(int *this, signed int a2); _DWORD *__thiscall sub_892D10(_DWORD *this, _DWORD *a2); bool __thiscall sub_892D30(_DWORD *this, int a2); int __thiscall sub_892D80(const char **this, signed int a2); bool __thiscall sub_892DC0(float *this, int a2); int __thiscall sub_892E40(char *this); int __thiscall sub_892E60(char *this); void *__thiscall sub_892E80(_DWORD *this, char a2); void *sub_892EB0(); _DWORD *__thiscall sub_892EC0(_DWORD *this, char *Src, int a3); void __thiscall sub_892F50(int this); char __thiscall sub_892FA0(_DWORD *this); char __thiscall sub_892FF0(int this); int sub_893060(); // weak char sub_893390(); __int16 __thiscall sub_8935E0(int this); char *__stdcall sub_8935F0(__int16 a1); __int16 __stdcall sub_893620(const char *a1); float *__stdcall sub_893670(__int16 a1); float *__stdcall sub_8936E0(__int16 a1, char a2, int a3, float a4, char a5); void __thiscall sub_893750(float **this, float *a2); double __thiscall sub_8937C0(int this, unsigned __int8 a2); char *sub_8937F0(); int __thiscall sub_893800(_DWORD *this, float a2, float a3); void __thiscall sub_893840(int this); int __thiscall sub_8938B0(_DWORD *this, __int16 a2); __int16 __thiscall sub_8938E0(_DWORD *this, int a2, __int16 a3); int __thiscall sub_893970(_DWORD *this, int a2); float *sub_8939A0(); int __thiscall sub_8939F0(int *this, void **a2); char __thiscall sub_893A10(_DWORD *this, int a2); int __thiscall sub_893A50(_DWORD *this, _DWORD *a2); char __thiscall sub_893A80(float *this, int a2); void __thiscall sub_893AC0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_893B80(_DWORD *this); int __thiscall sub_893C10(_DWORD *this); _DWORD *__thiscall sub_893CA0(void *this, char a2); // void __userpurge sub_893D00(int a1@, int a2@, float a3, float a4, float a5, float a6, float a7, float a8); char __thiscall sub_893E90(_DWORD *this); char __stdcall sub_893EF0(int a1, __int16 a2); int __thiscall sub_893FA0(_DWORD *this, _DWORD **a2); int __thiscall sub_894050(_DWORD *this, _DWORD *a2); // void __userpurge sub_894190(int a1@, int a2@, int a3@, int a4); unsigned int __thiscall sub_8948D0(unsigned __int16 *this, char *a2); float *sub_894930(); int __thiscall sub_894970(int *this, signed int a2); char __thiscall sub_894990(_BYTE *this, char a2); char *sub_8949A0(); float *__stdcall sub_8949B0(float *a1, float *a2, float *a3, float *a4); float *__thiscall sub_894AA0(float *this, char *Src); void __fastcall sub_894B10(int a1, int a2, float a3, int a4); int __fastcall sub_894D90(int a1, int a2, float a3, int a4); bool __thiscall sub_894F60(float *this, float *a2); void __thiscall sub_894FC0(int this, float a2, int a3); unsigned int __thiscall sub_895350(float *this, int a2); float *sub_8953D0(); char *sub_895400(); int __thiscall sub_895410(void *this, _DWORD **a2); char __thiscall sub_895470(int this, float a2); void __thiscall sub_8954E0(void *this, _DWORD *a2); char __thiscall sub_895550(_DWORD *this); unsigned int __thiscall sub_895580(unsigned __int16 *this, char *a2); float *sub_8955D0(); bool __thiscall sub_895610(float *this, int a2); char *sub_895650(); float *__thiscall sub_895660(float *this, int a2, int a3); void __fastcall sub_895740(int a1, int a2, int a3, int a4); int __thiscall sub_895960(float *this, char *Src); void __thiscall sub_8959F0(int *this, signed int a2); int __thiscall sub_895A50(const char **this, signed int a2); void __thiscall sub_895A90(int this, float a2, int a3); unsigned int __thiscall sub_895DA0(float *this, int a2); int __thiscall sub_895E30(_DWORD *this, _DWORD *a2); char __thiscall sub_895E50(_DWORD *this, int a2); char __thiscall sub_895E60(float *this, int a2); int __fastcall sub_895ED0(float *a1, int a2, float a3, int a4, int a5, int a6); _DWORD *__thiscall sub_896160(float *this, float a2, int a3, int a4); char __thiscall sub_896280(_DWORD *this, int a2); int __thiscall sub_8962E0(int this); int __thiscall sub_8963F0(int *this, signed int a2); int __thiscall sub_896440(_BYTE *this, signed int a2); float *__thiscall sub_896490(float *this, float a2, char a3, char a4, int a5, int a6, float a7); char *sub_896580(); float *__thiscall sub_896590(float *this, _DWORD **a2); float *sub_8965F0(); unsigned int __thiscall sub_896620(void *this, int a2); char __thiscall sub_8966F0(void *this, int a2); int __thiscall sub_896700(_DWORD *this, _DWORD *a2); bool __thiscall sub_896710(float *this, int a2); double sub_896750(); float *__thiscall sub_896770(float *this, float *a2, float *a3); char *sub_8967D0(); float *__thiscall sub_8967E0(float *this, float *a2, float *a3, float *a4); int __thiscall sub_896910(float *this, char *a2); float *sub_896960(); int __thiscall sub_896990(int *this, void **a2); int __thiscall sub_8969D0(const char **this, signed int a2); unsigned int __thiscall sub_896A10(float *this, int a2); float *sub_896AA0(); bool __thiscall sub_896AF0(float *this, int a2); char *sub_896B80(); int __thiscall sub_896B90(void *this, char *Src); void __thiscall sub_896C30(float *this, float a2, float a3, int a4, int a5); int __thiscall sub_896D40(float *this, float a2, float a3, __int16 a4, int a5); int __thiscall sub_8976E0(int *this, signed int a2); int __thiscall sub_8977F0(const char **this, signed int a2); unsigned int __thiscall sub_897900(void *this, int a2); float *sub_897B10(); char *sub_897B70(); void __stdcall sub_897B80(float a1, int a2); void __thiscall sub_897C70(float *this, int a2, float a3); int __thiscall sub_897E00(void *this, char *Src); int __thiscall sub_897EA0(float *this, int a2); bool __thiscall sub_897F00(float *this, int a2); int __thiscall sub_897F80(int *this, signed int a2); int __thiscall sub_898080(const char **this, signed int a2); unsigned int __thiscall sub_898160(void *this, int a2); float *sub_898330(); unsigned int __thiscall sub_898370(int *this, signed int a2); int __thiscall sub_898380(_DWORD *this, _DWORD *a2); int __thiscall sub_898390(_DWORD *this, signed int a2); char __thiscall sub_8983A0(float *this, int a2); char *sub_8983B0(); void *__thiscall sub_8983C0(void *this, char a2); int __thiscall sub_8983F0(void *this, _DWORD **a2); void __thiscall sub_898450(int this, float a2); unsigned int __thiscall sub_8984C0(unsigned __int16 *this, char *a2); float *sub_898510(); int __thiscall sub_898540(void *this, int a2); bool __thiscall sub_898550(float *this, int a2); char *sub_898570(); int __thiscall sub_898580(float *this, char *Src); int __fastcall sub_8985E0(int a1, int a2, float a3, int a4); int __thiscall sub_898770(int *this, signed int a2); void __thiscall sub_8987B0(int this, float a2, int a3); unsigned int __thiscall sub_898B50(float *this, int a2); _DWORD *sub_898BE0(); int __thiscall sub_898C10(int *this, signed int a2); int __thiscall sub_898C20(const char **this, signed int a2); bool __thiscall sub_898C30(void *this, int a2); char *sub_898C40(); int __stdcall sub_898C50(float, int); // idb _DWORD *__thiscall sub_898CE0(void *this, char *Src); unsigned int __thiscall sub_898D30(void *this, int a2); int __fastcall sub_898D80(int a1, int a2, float a3, int a4, int a5, int a6); _DWORD *__thiscall sub_8992B0(float *this, float a2, int a3, int a4); float *__thiscall sub_8993C0(char *this); int __thiscall sub_899670(int *this, signed int a2); int __thiscall sub_8996E0(_BYTE *this, signed int a2); char __thiscall sub_899760(float *this, int a2); float *__thiscall sub_899800(float *this, float a2, char a3, char a4, int a5, int a6, float a7, float a8, int a9, int a10, int a11, int a12, int a13, int a14); char *sub_8998D0(); float *__thiscall sub_8998E0(float *this, _DWORD **a2); int sub_8999A0(); // weak unsigned int __thiscall sub_899A20(void *this, int a2); int sub_899B80(); // weak float *__thiscall sub_899BB0(_DWORD *this, _DWORD *a2); char *sub_899BC0(); int __thiscall sub_899BD0(_DWORD *this, _BYTE *a2); int __thiscall sub_899BF0(_DWORD *this, int a2); float *__thiscall sub_899C10(_DWORD *this, _DWORD **a2); bool __thiscall sub_899C60(_DWORD *this, int a2); unsigned int __thiscall sub_899CB0(unsigned __int16 *this, char *a2); unsigned int __thiscall sub_899D00(int *this, void **a2); int __thiscall sub_899D30(_DWORD *this, int a2); char __thiscall sub_899D70(_DWORD *this, int a2); _DWORD *__thiscall sub_899DC0(_DWORD *this, _DWORD *a2); char *sub_899E70(); _DWORD *__thiscall sub_899E80(_DWORD *this, int a2, int a3); _DWORD *sub_89A0E0(); void __thiscall sub_89A130(_DWORD *this, _DWORD *a2); int __thiscall sub_89A1C0(const char **this, unsigned int a2); char __thiscall sub_89A220(_DWORD *this, int a2); LONG __thiscall sub_89A2A0(_DWORD *this, unsigned int a2, void *a3); _DWORD *__thiscall sub_89A320(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); _DWORD *__thiscall sub_89A420(void *this, char a2); LONG __thiscall sub_89A450(_DWORD *this, _DWORD *a2, int a3); _DWORD *__thiscall sub_89A5E0(_DWORD *this, int a2, char *Src); void __thiscall sub_89A660(_DWORD *this, int a2); unsigned int __thiscall sub_89A6E0(void *this, int a2); _DWORD *__thiscall sub_89A730(_DWORD *this, char *Src); _DWORD *__thiscall sub_89A790(_DWORD *this); void __thiscall sub_89A7C0(_DWORD *this); void __thiscall sub_89A820(_DWORD *this); void *__thiscall sub_89A880(void *this, char a2); void *__thiscall sub_89A8B0(void *this, char a2); int __fastcall sub_89A8E0(int a1, int a2, int a3, float *a4, float *a5); char __thiscall sub_89ABD0(_DWORD *this, int a2); float *__stdcall sub_89AC90(float *a1, float *a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_89B0D0(void *this, char a2); int __thiscall sub_89B130(int *this, signed int a2); int __thiscall sub_89B1B0(const char **this, unsigned int a2); bool __thiscall sub_89B260(float *this, float *a2); float *__thiscall sub_89B310(float *this); char *sub_89B3D0(); _DWORD *__thiscall sub_89B3E0(void *this, char a2); char __thiscall sub_89B420(void *this, int a2, float *a3, float *a4); char __thiscall sub_89B550(_DWORD *this, _DWORD **a2, float *a3, float *a4); char __thiscall sub_89B900(void *this, int a2, int a3, int a4, int a5); char __thiscall sub_89BA80(void *this, int a2, int a3, float *a4, int a5); char __thiscall sub_89BE30(void *this, int a2, _DWORD *a3, float *a4, float *a5); float *sub_89C140(); void __thiscall sub_89C160(float *this, unsigned int a2); char __thiscall sub_89C700(_DWORD *this, _DWORD **a2, int a3, float *a4); void __thiscall sub_89CB50(_DWORD *this, _DWORD *a2); float *__thiscall sub_89CC70(void *this, char *Src); unsigned int __thiscall sub_89CD00(void *this, _DWORD **a2); void __thiscall sub_89CDB0(_DWORD *this, _DWORD *a2); void __thiscall sub_89CE00(_DWORD *this, float *a2, float *a3); float *sub_89CF80(); char *sub_89CFB0(); int __thiscall sub_89CFC0(_DWORD *this, float a2); float *__thiscall sub_89CFD0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89D020(unsigned __int16 *this, char *a2); float *sub_89D070(); char *sub_89D0A0(); int __thiscall sub_89D0B0(_DWORD *this, float *a2); float *__thiscall sub_89D0D0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89D120(unsigned __int16 *this, char *a2); float *sub_89D170(); char *sub_89D1A0(); int __thiscall sub_89D1B0(_DWORD *this, float *a2); int __thiscall sub_89D1D0(_DWORD *this, float a2); float *__thiscall sub_89D1E0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89D230(unsigned __int16 *this, char *a2); float *sub_89D280(); char *sub_89D2B0(); int __thiscall sub_89D2C0(_DWORD *this, float a2); float *__thiscall sub_89D2D0(_DWORD *this, _DWORD **a2); char __thiscall sub_89D320(_DWORD *this, int a2); unsigned int __thiscall sub_89D380(unsigned __int16 *this, char *a2); float *sub_89D3D0(); bool __thiscall sub_89D410(float *this, int a2); char *sub_89D470(); int __thiscall sub_89D480(int this, int a2, int a3); int __thiscall sub_89D580(void *this, char *Src); int __thiscall sub_89D5F0(int *this, signed int a2); int __thiscall sub_89D690(const char **this, signed int a2); unsigned int __thiscall sub_89D730(void *this, int a2); float *sub_89D860(); char *sub_89D890(); int __thiscall sub_89D8A0(_DWORD *this, float *a2); int __thiscall sub_89D8C0(_DWORD *this, float a2); float *__thiscall sub_89D8D0(_DWORD *this, _DWORD **a2); char __thiscall sub_89D920(_DWORD *this, int a2); unsigned int __thiscall sub_89D980(unsigned __int16 *this, char *a2); int __thiscall sub_89D9D0(const char **this, signed int a2); char *sub_89D9F0(); void *__thiscall sub_89DA00(void *this, char a2); float *__thiscall sub_89DA30(float *this); float *sub_89DAA0(); void __thiscall sub_89DAC0(int *this, signed int a2); int __fastcall sub_89DB10(int a1, int a2, float a3, int a4); float *__thiscall sub_89DC90(float *this, char *Src); void __thiscall sub_89DD00(int this, float a2, int a3); unsigned int __thiscall sub_89E080(float *this, int a2); float *sub_89E100(); int __thiscall sub_89E160(_DWORD *this, _DWORD *a2); char *sub_89E180(); int __thiscall sub_89E190(void *this, char *Src); void __fastcall sub_89E240(int a1, int a2, float a3, int a4); char __thiscall sub_89EF60(void *this, int a2); int __thiscall sub_89F020(int *this, signed int a2); int __thiscall sub_89F0F0(const char **this, signed int a2); unsigned int __thiscall sub_89F1B0(void *this, int a2); int sub_89F3A0(); // weak float *__thiscall sub_89F3D0(_DWORD *this, _DWORD *a2); char *sub_89F3E0(); int __thiscall sub_89F3F0(_DWORD *this, float a2); float *__thiscall sub_89F410(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89F460(unsigned __int16 *this, char *a2); float *sub_89F4B0(); char *sub_89F4E0(); int __thiscall sub_89F4F0(_DWORD *this, float *a2); float *__thiscall sub_89F510(_DWORD *this, _DWORD **a2); char __thiscall sub_89F560(_DWORD *this, int a2); unsigned int __thiscall sub_89F5C0(unsigned __int16 *this, char *a2); float *sub_89F610(); char *sub_89F640(); int __thiscall sub_89F650(_DWORD *this, float *a2); float *__thiscall sub_89F670(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89F6C0(unsigned __int16 *this, char *a2); float *sub_89F710(); char *sub_89F740(); int __thiscall sub_89F750(_DWORD *this, float a2); float *__thiscall sub_89F760(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89F7B0(unsigned __int16 *this, char *a2); float *sub_89F800(); char *sub_89F830(); float *__thiscall sub_89F840(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89F890(unsigned __int16 *this, char *a2); float *sub_89F8E0(); char __thiscall sub_89F910(_DWORD *this, int a2); char *sub_89F920(); int __thiscall sub_89F930(_DWORD *this, float *a2); int __thiscall sub_89F950(_DWORD *this, float a2); float *__thiscall sub_89F960(_DWORD *this, _DWORD **a2); char __thiscall sub_89F9B0(_DWORD *this, int a2); unsigned int __thiscall sub_89FA10(unsigned __int16 *this, char *a2); float *sub_89FA60(); int __thiscall sub_89FA90(_DWORD *this, _DWORD *a2); char *sub_89FAA0(); int __thiscall sub_89FAB0(_DWORD *this, float *a2); int __thiscall sub_89FAD0(_DWORD *this, float a2); float *__thiscall sub_89FAE0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89FB30(unsigned __int16 *this, char *a2); float *sub_89FB80(); char *sub_89FBB0(); int __thiscall sub_89FBC0(_DWORD *this, float *a2); int __thiscall sub_89FBE0(_DWORD *this, float a2); float *__thiscall sub_89FBF0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89FC40(unsigned __int16 *this, char *a2); float *sub_89FC90(); int __thiscall sub_89FCC0(int *this, void **a2); char *sub_89FCD0(); float *__thiscall sub_89FCE0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89FD30(unsigned __int16 *this, char *a2); float *sub_89FD80(); char *sub_89FDB0(); void *__thiscall sub_89FDC0(void *this, char a2); float *__thiscall sub_89FDF0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_89FE40(unsigned __int16 *this, char *a2); _DWORD *sub_89FE90(); char *sub_89FED0(); char __thiscall sub_89FEE0(_DWORD *this, int a2); int __thiscall sub_89FFA0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_8A0000(_DWORD *this, int a2, int a3, int a4); _DWORD *__thiscall sub_8A0060(void *this, char a2); int __thiscall sub_8A00C0(int *this, signed int a2); unsigned int __thiscall sub_8A0200(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_8A02F0(int *this, int a2); float *__thiscall sub_8A0400(float *this); int sub_8A0450(); // weak char *sub_8A0470(); float *__thiscall sub_8A0480(float *this, char *Src); void __fastcall sub_8A04E0(int a1, int a2, float a3, int a4); int __thiscall sub_8A0870(int *this, signed int a2); int __thiscall sub_8A0900(const char **this, signed int a2); char __thiscall sub_8A0990(void *this, int a2); unsigned int __thiscall sub_8A0A30(void *this, int a2); float *sub_8A0BA0(); int __thiscall sub_8A0BF0(_DWORD *this, _DWORD *a2); char *sub_8A0C00(); void __thiscall sub_8A0C10(float *this, float a2, int a3); int __thiscall sub_8A0CA0(float *this, char *Src); void __fastcall sub_8A0D20(int a1, int a2, float a3, int a4); bool __thiscall sub_8A0EE0(float *this, int a2); void __thiscall sub_8A0F20(int this, float a2, int a3); int __thiscall sub_8A12B0(int *this, signed int a2); int __thiscall sub_8A1300(const char **this, signed int a2); unsigned int __thiscall sub_8A1350(void *this, int a2); _DWORD *__thiscall sub_8A1410(_DWORD *this); signed int __thiscall sub_8A1460(_WORD *this, unsigned __int16 a2); unsigned __int16 __thiscall sub_8A14C0(unsigned __int16 *this); _DWORD *sub_8A1540(); bool __thiscall sub_8A1580(_DWORD *this, int a2); char __thiscall sub_8A1590(float **this, _DWORD *a2); char *sub_8A1650(); void **__thiscall sub_8A1660(void *this, char a2); const void *__thiscall sub_8A16A0(const void **this, int a2, _DWORD **a3); _DWORD *__thiscall sub_8A19E0(const void **this, _DWORD **a2); int __thiscall sub_8A1A50(int *this, signed int a2); int __thiscall sub_8A1C70(char *this, _DWORD *a2); unsigned int __thiscall sub_8A1D50(void *this, int a2); bool __thiscall sub_8A1E70(float *this, int a2); char *sub_8A1EC0(); float *__thiscall sub_8A1ED0(float *this, float *a2, float *a3, float *a4); int __thiscall sub_8A1FE0(float *this, char *a2); int sub_8A2030(); // weak int __thiscall sub_8A2060(int *this, void **a2); int __thiscall sub_8A20C0(const char **this, signed int a2); unsigned int __thiscall sub_8A2120(float *this, int a2); int __thiscall sub_8A21E0(_DWORD *this, int a2, int a3); char __thiscall sub_8A22E0(_DWORD *this, int a2); bool __thiscall sub_8A2320(_DWORD **this, int a2); int __thiscall sub_8A2360(float *this, int a2); char *sub_8A23E0(); float *sub_8A23F0(); int __thiscall sub_8A2430(float *this, _DWORD *a2); _DWORD *__thiscall sub_8A2460(void *this, char a2); int __thiscall sub_8A24B0(int *this, char *Src); int __thiscall sub_8A2510(_DWORD **this, int a2); int __thiscall sub_8A2570(int *this, void **a2); int __thiscall sub_8A2590(_DWORD *this, float a2, int a3); int __thiscall sub_8A2640(_DWORD *this, int a2); int __thiscall sub_8A2670(_DWORD *this, _DWORD *a2); int __thiscall sub_8A26D0(const char **this, signed int a2); char __thiscall sub_8A2700(_DWORD *this, int a2); char *sub_8A2760(); _DWORD *__thiscall sub_8A2770(_DWORD *this, char *Src); int sub_8A2800(); // weak int __thiscall sub_8A2830(_DWORD **this, int a2); int __thiscall sub_8A2890(void *this, int a2); bool __thiscall sub_8A28A0(float *this, float *a2); char *sub_8A2900(); float *__thiscall sub_8A2910(float *this, float *a2, float *a3, float *a4); int __thiscall sub_8A2A20(float *this, char *a2); float *sub_8A2A80(); int __thiscall sub_8A2AC0(int *this, void **a2); int __thiscall sub_8A2B40(const char **this, signed int a2); unsigned int __thiscall sub_8A2BC0(float *this, int a2); _DWORD *sub_8A2CC0(); bool __thiscall sub_8A2CF0(_WORD *this, int a2); char *sub_8A2D20(); int __thiscall sub_8A2D30(int this, signed __int16 a2); _DWORD *__thiscall sub_8A2E90(void *this, char a2); signed int __thiscall sub_8A2ED0(_WORD *this, int a2, int a3); _DWORD *__thiscall sub_8A30A0(signed __int16 *this, char *Src); int __thiscall sub_8A30F0(_WORD *this, float a2, int a3); int __thiscall sub_8A34C0(int *this, signed int a2); int __thiscall sub_8A3540(const char **this, signed int a2); unsigned int __thiscall sub_8A3580(_WORD *this, int a2); int sub_8A3600(); // weak int __thiscall sub_8A3660(void *this, int a2); char *sub_8A3670(); int __thiscall sub_8A3680(void *this, char *Src); char __thiscall sub_8A3720(void *this, int a2); int __thiscall sub_8A3770(float *this, float a2, int a3); char __thiscall sub_8A3CE0(void *this, int a2); int __thiscall sub_8A3D80(int *this, signed int a2); int __thiscall sub_8A3E30(const char **this, signed int a2); unsigned int __thiscall sub_8A3ED0(void *this, int a2); _DWORD *sub_8A40C0(); int __thiscall sub_8A4100(_DWORD *this, _DWORD *a2); char __thiscall sub_8A4120(_BYTE *this, int a2); char *sub_8A4180(); void __thiscall sub_8A4190(int this, float a2, int a3); int __thiscall sub_8A42D0(_BYTE *this, char *Src); char __thiscall sub_8A4320(void *this, int a2); int __thiscall sub_8A4380(int *this, signed int a2); int __thiscall sub_8A43D0(const char **this, signed int a2); unsigned int __thiscall sub_8A4420(_BYTE *this, int a2); float *sub_8A44F0(); char *sub_8A4520(); int __thiscall sub_8A4530(_DWORD *this, float *a2); void __thiscall sub_8A4550(_DWORD *this, float a2); float *__thiscall sub_8A4590(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_8A45E0(unsigned __int16 *this, char *a2); void __thiscall sub_8A4630(float *this, float *a2); char *sub_8A46C0(); float *__thiscall sub_8A46D0(float *this); char __thiscall sub_8A4740(void *this, int a2); float *sub_8A47A0(); void __fastcall sub_8A47C0(int a1, int a2, float a3, int a4); void __fastcall sub_8A4AD0(int a1, int a2, float a3, int a4); float *__thiscall sub_8A4D30(float *this, char *Src); bool __thiscall sub_8A4D80(float *this, float *a2); void __thiscall sub_8A4DE0(_DWORD *this, float a2, int a3); int __thiscall sub_8A5540(int *this, signed int a2); int __thiscall sub_8A5640(const char **this, signed int a2); unsigned int __thiscall sub_8A5740(void *this, int a2); float *sub_8A5940(); char __thiscall sub_8A5970(float *this, int a2); char *sub_8A5980(); int __thiscall sub_8A5990(_DWORD *this, float *a2); void __thiscall sub_8A59B0(_DWORD *this, float a2); float *__thiscall sub_8A59F0(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_8A5A40(unsigned __int16 *this, char *a2); float *sub_8A5A90(); char *sub_8A5AC0(); int __thiscall sub_8A5AD0(_DWORD *this, float *a2); void __thiscall sub_8A5AF0(_DWORD *this, float a2); float *__thiscall sub_8A5B30(_DWORD *this, _DWORD **a2); char __thiscall sub_8A5B80(_DWORD *this, int a2); unsigned int __thiscall sub_8A5BE0(unsigned __int16 *this, char *a2); int __thiscall sub_8A5C30(_DWORD *this, float a2, char a3); float *__thiscall sub_8A5C60(_DWORD *this); int __thiscall sub_8A5CB0(_DWORD *this); void *__thiscall sub_8A5CE0(void *this, char a2); int __thiscall sub_8A5D10(_DWORD *this, int a2); _DWORD *__thiscall sub_8A5D50(_BYTE *this, float a2); // float __userpurge sub_8A5D80@(float *this@); int __thiscall sub_8A5E00(_WORD *this, _BYTE *a2, int a3, _BYTE *a4); int __thiscall sub_8A5E50(_DWORD *this, _DWORD **a2); char __thiscall sub_8A5FA0(_DWORD *this, int a2); int __thiscall sub_8A5FE0(_DWORD *this); void __thiscall sub_8A6020(_BYTE *this); void **__thiscall sub_8A6090(void *this, char a2); void **__thiscall sub_8A60D0(void *this, char a2); void *__thiscall sub_8A6110(void *this, char a2); char __thiscall sub_8A6140(float *this); // char __userpurge sub_8A61E0@(_DWORD *a1@, int a2@, int a3); int __thiscall sub_8A6330(_DWORD *this, int *a2); void __thiscall sub_8A63C0(float *this, float a2); LONG __thiscall sub_8A6460(_DWORD *this, int a2, _DWORD **a3); unsigned int __thiscall sub_8A65D0(int *this, signed int a2); int __thiscall sub_8A6620(_DWORD *this, _DWORD *a2); int __thiscall sub_8A6750(const char **this, signed int a2); unsigned int __thiscall sub_8A67E0(int *this, char *a2); void *__thiscall sub_8A6890(void *this, char a2); char *sub_8A68C0(); _DWORD *__thiscall sub_8A68D0(_DWORD *this); _DWORD *__thiscall sub_8A6980(_DWORD *this, _DWORD **a2); _DWORD *sub_8A69D0(); void *__thiscall sub_8A69F0(void *this, char a2); int __thiscall sub_8A6A20(unsigned __int16 *this, unsigned __int16 a2); int __thiscall sub_8A6AA0(_DWORD **this, int a2); bool __thiscall sub_8A6AD0(_DWORD *this, int a2); char __thiscall sub_8A6B00(float **this, _DWORD *a2); char *sub_8A6B40(); LONG __thiscall sub_8A6B50(_DWORD *this); unsigned __int16 __thiscall sub_8A6BF0(unsigned __int16 *this); void __thiscall sub_8A6C40(unsigned int *this, unsigned int a2); char __thiscall sub_8A6D60(const void **this, int a2, _DWORD **a3); _DWORD *sub_8A6DF0(); int __thiscall sub_8A6E50(_DWORD *this, _DWORD *a2); LONG __thiscall sub_8A6EB0(_DWORD *this, unsigned int a2, int a3); void *__thiscall sub_8A6F50(void *this, char a2); LONG __thiscall sub_8A6F80(int this, int a2); _DWORD *__thiscall sub_8A7120(const void **this, _DWORD **a2); int __thiscall sub_8A7190(int *this, signed int a2); int __thiscall sub_8A7320(char *this, _DWORD *a2); unsigned int __thiscall sub_8A7420(void *this, int a2); void __thiscall sub_8A7470(_DWORD *this, int a2); _DWORD *__thiscall sub_8A7480(float *this, float a2); unsigned int __thiscall sub_8A74A0(int *this, signed int a2); int __thiscall sub_8A74B0(_DWORD *this, _DWORD *a2); char __thiscall sub_8A74C0(_DWORD *this, int a2); int __thiscall sub_8A74D0(const char **this, signed int a2); // char __userpurge sub_8A74E0@(_DWORD *a1@, int a2@, int a3); char __thiscall sub_8A74F0(float *this, float a2, char a3); int __thiscall sub_8A75C0(_DWORD *this, int a2); int __thiscall sub_8A75F0(_DWORD *this, _DWORD *a2); int __thiscall sub_8A7620(_DWORD *this); signed int __thiscall sub_8A7640(_WORD *this, _BYTE *a2, int a3, _BYTE *a4); int __thiscall sub_8A7690(float *this); int __thiscall sub_8A7700(float *this); char *sub_8A7730(); char *__thiscall sub_8A7740(_DWORD *this, int a2); int __thiscall sub_8A7850(float *this, _DWORD **a2); float *sub_8A78C0(); unsigned int __thiscall sub_8A7900(int *this, char *a2); _DWORD *__thiscall sub_8A7950(void *this, char a2); int __thiscall sub_8A7990(int *this, _DWORD *a2); char __thiscall sub_8A79C0(float *this, int a2); float *__thiscall sub_8A7A70(float *this); char *sub_8A7A90(); LONG __thiscall sub_8A7AA0(_DWORD *this); int __thiscall sub_8A7AF0(_DWORD *this, int a2); _DWORD *__thiscall sub_8A7B40(void *this, char a2); unsigned int __thiscall sub_8A7BA0(_DWORD *this, _DWORD *a2); char __thiscall sub_8A7BF0(_DWORD *this, int a2); int __thiscall sub_8A7C60(_DWORD *this, int a2); unsigned int __thiscall sub_8A7CA0(unsigned __int16 *this, char *a2); float *__thiscall sub_8A7D20(float *this); int __thiscall sub_8A7D80(float *this, int a2, char *Src); int __stdcall sub_8A7DF0(_DWORD *a1); char *sub_8A7E00(); void __thiscall sub_8A7E10(float *this, float a2, __int16 a3, int a4); int __thiscall sub_8A80B0(int *this, signed int a2); int __thiscall sub_8A8200(const char **this, signed int a2); bool __thiscall sub_8A8340(float *this, float *a2); unsigned int __thiscall sub_8A8420(float *this, int a2); _DWORD *__thiscall sub_8A86D0(_DWORD *this); LONG __thiscall sub_8A8700(_DWORD *this); int __stdcall sub_8A8720(_DWORD *a1); bool __thiscall sub_8A8740(void *this, int a2); char *sub_8A87B0(); _DWORD *__thiscall sub_8A87C0(void *this, char a2); int __thiscall sub_8A8800(void *this, int a2, char *Src); int __thiscall sub_8A8870(void *this, int a2); int __thiscall sub_8A88B0(int *this, signed int a2); int __thiscall sub_8A8930(const char **this, signed int a2); unsigned int __thiscall sub_8A89B0(void *this, int a2); float *__thiscall sub_8A8AA0(float *this); int __thiscall sub_8A8AD0(float *this, int a2, char *Src); char __thiscall sub_8A8B10(float *this, int a2); char *sub_8A8BA0(); int __thiscall sub_8A8BB0(int *this, signed int a2); int __thiscall sub_8A8C60(const char **this, signed int a2); unsigned int __thiscall sub_8A8D10(void *this, int a2); int __thiscall sub_8A8E80(_DWORD *this, float a2, int a3, int a4, int a5); _DWORD *__thiscall sub_8A8EB0(int this, float a2, int a3, int a4); char __thiscall sub_8A8F20(float *this, int a2, _DWORD **a3); char __thiscall sub_8A8FA0(_DWORD *this, int a2); int __thiscall sub_8A9020(_DWORD *this, _DWORD *a2); char __thiscall sub_8A9090(_DWORD *this, int a2); char __thiscall sub_8A90D0(float *this, int a2); float *__thiscall sub_8A91A0(float *this, float a2, char a3, char a4, int a5); char *sub_8A9200(); _DWORD *__thiscall sub_8A9210(void *this, char a2); int __thiscall sub_8A9260(int *this, signed int a2); int __thiscall sub_8A9310(_BYTE *this, signed int a2); unsigned int __thiscall sub_8A93C0(void *this, int a2); float *__thiscall sub_8A9540(float *this); int __thiscall sub_8A9560(float *this, int a2, char *Src); int __thiscall sub_8A9570(int *this, void **a2); int __thiscall sub_8A9590(_DWORD *this, _DWORD *a2); int __thiscall sub_8A95B0(const char **this, signed int a2); char __thiscall sub_8A95E0(float *this, int a2); char *sub_8A9620(); char __thiscall sub_8A9630(void *this, int a2); int __fastcall sub_8A9690(int a1, int a2, int a3, int a4); unsigned int __thiscall sub_8A9740(float *this, int a2); float *__thiscall sub_8A97D0(float *this); float *__thiscall sub_8A97F0(void *this, int a2); float *__stdcall sub_8A9830(int a1, char a2, int a3, float a4, char a5); int __stdcall sub_8A9870(int a1, int a2); errno_t __thiscall sub_8A9890(_DWORD *this, int a2, _DWORD **a3); char *sub_8A98A0(); float *__thiscall sub_8A98B0(_DWORD *this, _DWORD *a2); void __thiscall sub_8A9930(void *this, int a2, int a3); char __thiscall sub_8A9990(int this, float a2); unsigned int __thiscall sub_8A9A10(unsigned __int16 *this, char *a2); float *__thiscall sub_8A9A60(float *this); float *__thiscall sub_8A9A80(void *this, int a2); char __thiscall sub_8A9AC0(float *this, int a2); char *sub_8A9AD0(); float *__thiscall sub_8A9AE0(_DWORD *this, _DWORD *a2); void __thiscall sub_8A9B60(void *this, float a2, int a3); char __thiscall sub_8A9BD0(int this, float a2); unsigned int __thiscall sub_8A9C50(unsigned __int16 *this, char *a2); float *__thiscall sub_8A9CA0(float *this); bool __thiscall sub_8A9CD0(float *this, int a2); int __thiscall sub_8A9D50(char *this, signed int a2); int __thiscall sub_8A9E20(char *this, signed int a2); int __cdecl sub_8A9ED0(LPCSTR lpText, LPCSTR lpCaption); // idb double sub_8A9EF0(); char *__thiscall sub_8A9F60(char *Dir, char *FullPath); void __thiscall sub_8A9FB0(char *this, char *a2, int a3); void __thiscall sub_8AA0C0(char *this, char *a2, int a3); int (*sub_8AA0D0())(void); void sub_8AA110(); int __cdecl sub_8AA150(int a1, int (*a2)(void)); int __cdecl sub_8AA170(int a1, int a2); void sub_8AA1B0(); size_t __cdecl sub_8AA1F0(int a1, void *Dst, size_t DstSize); rsize_t __cdecl sub_8AA210(int a1, void *Src, rsize_t DstSize); size_t __cdecl sub_8AA230(int a1, void *Dst, size_t DstSize, int a4, int a5); int __cdecl sub_8AA270(); int __cdecl sub_8AA2B0(); char __thiscall sub_8AA2F0(_BYTE *this); rsize_t __cdecl sub_8AA300(int a1, void *Src, rsize_t DstSize, int a4, int a5); void __thiscall sub_8AA360(_DWORD *this, char a2); _DWORD *__thiscall sub_8AA390(_DWORD *this); void __thiscall sub_8AA3B0(_DWORD *this); char sub_8AA3C0(); void *__thiscall sub_8AA3D0(void *this, char a2); char *__cdecl sub_8AA400(char *a1, unsigned int a2, int a3, unsigned int a4); int __thiscall sub_8AA4B0(_DWORD *this, _BYTE *a2, unsigned int a3); int __thiscall sub_8AA560(_DWORD *this, signed int a2); _DWORD *__thiscall sub_8AA5A0(_DWORD *this); void __thiscall sub_8AA5C0(_DWORD *this); void *__thiscall sub_8AA5D0(void *this, char a2); void __thiscall sub_8AA600(char *this, char *Src); void __thiscall sub_8AA640(_BYTE *this, char *FullPath); char __thiscall sub_8AA6F0(char *this, char *a2, int a3); _DWORD *__thiscall sub_8AA890(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8AA8D0(_DWORD *this); void __thiscall sub_8AA920(void *this); int __thiscall sub_8AA950(int this); _DWORD *__thiscall sub_8AA960(void *this, char a2); int __thiscall sub_8AA9B0(_DWORD *this, void *Dst, rsize_t DstSize); int __thiscall sub_8AA9F0(_DWORD *this, void *Src, rsize_t DstSize); int __thiscall sub_8AAA70(_DWORD); // weak void sub_8AAA80(); int __thiscall sub_8AAAC0(_DWORD *this, char *Filename, int a3, size_t a4); char __thiscall sub_8AAB60(int this); signed int __thiscall sub_8AABB0(FILE **this); void __thiscall sub_8AAC10(_BYTE *this); void __thiscall sub_8AAC50(int this, int a2, int a3); size_t __thiscall sub_8AACE0(int this, void *Dst, size_t DstSize); rsize_t __thiscall sub_8AADB0(int this, void *Src, rsize_t DstSize); _DWORD *__thiscall sub_8AAE70(void *this, char a2); int __cdecl sub_8AAED0(int, void *Dst, rsize_t DstSize); // idb int __cdecl sub_8AAEF0(int, void *Src, rsize_t DstSize); // idb int __cdecl sub_8AAF10(int, void *Dst, rsize_t DstSize, int, int); // idb int __cdecl sub_8AAF50(int, void *Src, rsize_t DstSize, int, int); // idb void __thiscall sub_8AAFB0(_DWORD *this, char a2); DWORD __thiscall sub_8AAFE0(HANDLE *this); int sub_8AB010(); int __cdecl sub_8AB070(char *Src, int, char, char); // idb void sub_8AB110(); int sub_8AB150(void); // weak void __thiscall sub_8AB160(_DWORD *this, void *a2); int __fastcall sub_8AB1C0(int ArgList); char __thiscall sub_8AB3A0(int ArgList, int a2, char a3); int __thiscall sub_8AB530(int ArgList, char *Src, int a3, char a4, char a5); int __fastcall sub_8AB570(char ArgList); // idb int (**(*sub_8AB580())[4])(); int sub_8AB590(); int sub_8AB5D0(); int sub_8AB600(); // weak char sub_8AB650(); void *sub_8AB6C0(); void *__thiscall sub_8AB6D0(void *this, char a2); float *sub_8AB700(); void *__thiscall sub_8AB740(void *this, char a2); void *__thiscall sub_8AB770(void *this, char a2); void *__thiscall sub_8AB7A0(void *this, char a2); void *__thiscall sub_8AB7D0(void *this, char a2); void __thiscall sub_8AB800(_DWORD *this, size_t a2); unsigned int __thiscall sub_8AB8B0(void *this); char __thiscall sub_8AB940(int this, float *a2, float *a3, char a4); char __thiscall sub_8ABBD0(_DWORD *this, float *a2); char __thiscall sub_8ABC40(_DWORD *this, int a2); char __thiscall sub_8ABCE0(_DWORD *this, _DWORD *a2); int __thiscall sub_8ABE80(_DWORD *this); int __thiscall sub_8ABEC0(_DWORD *this); void *__thiscall sub_8ABF00(void *this, char a2); void *__thiscall sub_8ABF30(void *this, char a2); LONG __thiscall sub_8ABF60(_DWORD *this); void *sub_8AC110(); void __thiscall sub_8AC120(int this, int a2); void __thiscall sub_8AC290(_DWORD *this); void __thiscall sub_8AC350(_DWORD *this, int a2); unsigned int __thiscall sub_8AC530(int *this, signed int a2); int __thiscall sub_8AC660(const char **this, unsigned int a2); void *__thiscall sub_8AC900(void *this, char a2); void __thiscall sub_8AC930(_DWORD *this, int a2); void __thiscall sub_8AC9E0(_DWORD *this, int a2); int sub_8ACA90(); // weak _DWORD *__thiscall sub_8ACAB0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8ACE50(_DWORD *this, _DWORD *a2, int a3); unsigned int __thiscall sub_8ACF60(int *this, void **a2); int __thiscall sub_8ACF80(_DWORD *this); void *__thiscall sub_8ACFC0(void *this, char a2); char __thiscall sub_8ACFF0(_DWORD *this, int a2); char __thiscall sub_8AD050(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8AD0F0(_DWORD *this, _DWORD *a2); void *__thiscall sub_8AD140(void *this, char a2); LONG __thiscall sub_8AD170(_DWORD *this); void *sub_8AD230(); int __thiscall sub_8AD240(_DWORD *this); _DWORD *__thiscall sub_8AD2E0(_DWORD *this, _DWORD *a2, float *a3); _DWORD *__thiscall sub_8AD340(_DWORD *this); void *__thiscall sub_8AD390(void *this, char a2); _DWORD *__thiscall sub_8AD3C0(_DWORD *this, int a2); LONG __thiscall sub_8AD530(_DWORD *this, int a2); int sub_8AD5E0(); // weak _DWORD *__thiscall sub_8AD650(_DWORD *this, _DWORD *a2); void __thiscall sub_8AD780(const char **this, signed int a2); _DWORD *__thiscall sub_8AD840(_DWORD *this, _DWORD *a2, int a3); // float __userpurge sub_8AD950@(float *this@); int __thiscall sub_8AD970(_DWORD *this, _DWORD *a2); char __thiscall sub_8AD9A0(_DWORD *this, int a2); void *sub_8AD9B0(); void **__thiscall sub_8AD9C0(void *this, char a2); char __thiscall sub_8ADA10(int this, _DWORD *a2); void __thiscall sub_8AE0F0(int this, _DWORD *a2); int __thiscall sub_8AE180(void *this); int __thiscall sub_8AE240(int this, float *a2, float *a3, char a4); int sub_8AE440(); // weak char __thiscall sub_8AE490(_DWORD *this, int a2); int __thiscall sub_8AE550(int *this, signed int a2); int __thiscall sub_8AE680(const char **this, signed int a2); int __thiscall sub_8AE750(_DWORD *this, int a2, _BYTE *a3, int a4); char __thiscall sub_8AE780(_DWORD *this, int a2); void **__thiscall sub_8AE7E0(void *this, char a2); void __thiscall sub_8AE820(_DWORD *this); void **__thiscall sub_8AE870(void *this, char a2); _DWORD *__thiscall sub_8AE8B0(_DWORD *this); _DWORD *__thiscall sub_8AE930(void *this, char a2); void __cdecl sub_8AE9A0(char *Src); void sub_8AE9F0(); char __thiscall sub_8AEA90(float *this); int __thiscall sub_8AEB60(void *this); // int __userpurge sub_8AEB80@(int a1@, int a2@, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); int __thiscall sub_8AEC40(_DWORD *this); // void __usercall sub_8AEC80(int a1@, int a2@); int __thiscall sub_8AECB0(_DWORD **this); int __thiscall sub_8AECC0(int this); char __thiscall sub_8AED60(_DWORD ***this); void __thiscall sub_8AEDD0(_DWORD *this); BOOL __thiscall sub_8AEE20(_DWORD *this); char sub_8AEE40(); void *sub_8AEEC0(); _DWORD *__thiscall sub_8AEED0(_DWORD *this); void *sub_8AEF50(); char *__thiscall sub_8AEF60(void *this, char a2); char __thiscall sub_8AF010(_DWORD *this); char __thiscall sub_8AF080(_DWORD *this); char __thiscall sub_8AF1B0(_DWORD *this); char __thiscall sub_8AF2F0(_DWORD *this); _DWORD *__thiscall sub_8AF3F0(_DWORD *this); char __thiscall sub_8AF4B0(_DWORD *this); char __thiscall sub_8AF560(_DWORD *this, int a2, int a3, WPARAM wParam, int a5); void __thiscall sub_8AF730(_DWORD *this); char __thiscall sub_8AF760(_DWORD *this); int __thiscall sub_8AF7C0(int *this); void __thiscall sub_8AF840(_DWORD *this); void __thiscall sub_8AF870(_DWORD *this); signed int __thiscall sub_8AF8A0(_DWORD *this, int *a2); void *__thiscall sub_8AF920(void *this, char a2); void __thiscall sub_8AF970(_DWORD *this); void *__thiscall sub_8AF9D0(void *this, char a2); void __thiscall sub_8AFA00(_DWORD *this); int __thiscall sub_8AFB20(_DWORD *this); _DWORD *__thiscall sub_8AFC00(_DWORD *this, unsigned int a2, int a3); unsigned int __thiscall sub_8AFC90(_DWORD *this, unsigned int a2, LONG *a3); int __thiscall sub_8AFCC0(_DWORD *this, const char *a2, int a3, int a4, int a5, int a6, int a7); void *__thiscall sub_8AFEF0(void *this, char a2); int *__thiscall sub_8AFF20(int this, char a2); void __thiscall sub_8AFFF0(void *this); // void __usercall sub_8B0110(int a1@, int a2@); void __thiscall sub_8B02F0(void **this); void __thiscall sub_8B0340(void **this); bool __cdecl sub_8B03D0(HWND hDlg); char __cdecl sub_8B0450(HWND hDlg); char __cdecl sub_8B04B0(HWND hDlg); char *sub_8B0510(); signed int __cdecl sub_8B0AC0(int a1); signed int __cdecl sub_8B0BA0(int a1); LRESULT __cdecl sub_8B0D00(HWND hDlg); LRESULT __cdecl sub_8B0E10(HWND hDlg); LRESULT __cdecl sub_8B0FD0(HWND hDlg); BOOL __stdcall DialogFunc(HWND, UINT, WPARAM, LPARAM); // idb int __cdecl sub_8B1510(HWND hWnd, int, int, int, int, int, int); // idb _DWORD *__cdecl sub_8B15C0(HWND hWnd, int a2, char a3, char a4, char a5, char a6, int a7, int a8); int __cdecl sub_8B17F0(int, HWND hWnd, int, char, int, int, int, char, char, char, char, int, int); // idb int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); void __thiscall sub_8B1C90(void **this); signed int __thiscall sub_8B1CC0(signed int *this, const char *a2, _BYTE *a3); size_t *__thiscall sub_8B1D80(size_t *this, char *Src); signed int __thiscall sub_8B1F30(signed int *this, const char *a2); _DWORD *__thiscall sub_8B1F50(_DWORD *this, const char *a2, int a3, int a4, int a5, int a6); int __thiscall sub_8B1FF0(int this); unsigned int __thiscall sub_8B2110(int this, WPARAM wParam, LPARAM lParam); int __thiscall sub_8B2180(int this); HWND __thiscall sub_8B2260(_DWORD *this, int nCmdShow, HWND hWndParent); void __thiscall sub_8B2380(int this); signed int __cdecl sub_8B23D0(unsigned int a1); signed int __cdecl sub_8B24E0(unsigned int a1); unsigned int __cdecl sub_8B2570(unsigned int a1); int __thiscall sub_8B25C0(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_8B2610(_DWORD *this, int a2, int a3); int __thiscall sub_8B2620(_DWORD *this); int sub_8B2630(char *Format, ...); void *__thiscall sub_8B2670(void *this, char a2); void *__thiscall sub_8B26A0(void *this, char a2); int *__thiscall sub_8B26D0(int *this, unsigned int a2); int __thiscall sub_8B2760(void *this, int a2); int __thiscall sub_8B2790(void *this, int a2, int a3); int __thiscall sub_8B27D0(_DWORD *this); int __thiscall sub_8B2910(_DWORD *this); int __thiscall sub_8B2950(_DWORD *this); void *__thiscall sub_8B2990(void *this, char a2); void *__thiscall sub_8B29C0(void *this, char a2); int __thiscall sub_8B29F0(_DWORD *this, int a2); int __thiscall sub_8B2AC0(_DWORD *this); int __thiscall sub_8B2B70(_DWORD *this); int __thiscall sub_8B2C20(_DWORD *this, _DWORD *a2); int __thiscall sub_8B2D30(_DWORD *this); unsigned int __thiscall sub_8B2DF0(_DWORD *this); unsigned int __thiscall sub_8B2F00(_DWORD *this); signed int __thiscall sub_8B3060(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8B31D0(_DWORD *this, _DWORD *a2, _DWORD **a3); int *__thiscall sub_8B32B0(void **this, unsigned int a2); _DWORD *__thiscall sub_8B33A0(_DWORD *this); void *sub_8B34E0(); int __thiscall sub_8B34F0(_DWORD *this); int __thiscall sub_8B3510(_DWORD *this); int __thiscall sub_8B3530(_DWORD *this); int __thiscall sub_8B3540(_DWORD *this); int __thiscall sub_8B3580(_DWORD *this); int __thiscall sub_8B35A0(_DWORD *this); int __thiscall sub_8B35C0(_DWORD *this, int a2); _DWORD *__thiscall sub_8B3610(_DWORD **this); _DWORD *__thiscall sub_8B37A0(_DWORD *this, _DWORD *a2, _DWORD *a3); signed int __thiscall sub_8B3880(_DWORD *this); _DWORD *__thiscall sub_8B38E0(_DWORD *this, int a2, int a3); LONG __thiscall sub_8B3970(_DWORD *this); signed int __thiscall sub_8B3B40(_DWORD *this, int a2); int __thiscall sub_8B3C60(_DWORD *this); int __thiscall sub_8B3D00(_DWORD *this, int a2, int a3, int a4, int a5, int a6); void *__thiscall sub_8B3DD0(void *this, char a2); _DWORD *__thiscall sub_8B3E00(_DWORD *this); int __thiscall sub_8B3ED0(_DWORD *this, _DWORD *a2); int __thiscall sub_8B3F30(_DWORD *this); int __thiscall sub_8B3F80(_DWORD *this, int a2); signed int __thiscall sub_8B4010(_BYTE *this); void __thiscall sub_8B4030(void **this, char *Src); void __thiscall sub_8B4090(void **this, char *Src); void __thiscall sub_8B40F0(void **this, char *Src); void *sub_8B4180(); int __thiscall sub_8B4190(_DWORD *this); void *__thiscall sub_8B41D0(void *this, char a2); LONG __thiscall sub_8B4200(void **this); int __thiscall sub_8B4290(_DWORD *this); char __thiscall sub_8B4340(void **this, int a2, char *Src); char __thiscall sub_8B43C0(void *this, int a2, int a3); char __thiscall sub_8B44A0(void **this); int __cdecl sub_8B4B70(int a1, int a2); int __thiscall sub_8B4BC0(_DWORD **this); int __thiscall sub_8B4C20(int this, int a2, char *Src, int a4, int a5); void *__thiscall sub_8B4C50(void *this, char a2); void *__thiscall sub_8B4C80(void *this, char a2); unsigned int __thiscall sub_8B4CB0(_DWORD *this, unsigned int a2, int a3); int __thiscall sub_8B4D20(_DWORD *this); int __thiscall sub_8B4E20(_DWORD *this); signed int __stdcall sub_8B4F20(int a1, _DWORD *a2); int __thiscall sub_8B5100(_DWORD *this); LONG __thiscall sub_8B5280(_DWORD *this); signed int __thiscall sub_8B5320(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8B5360(_DWORD *this); void *__thiscall sub_8B53E0(void *this, char a2); void *__thiscall sub_8B5410(void *this, char a2); // signed int __userpurge sub_8B5440@(int a1@, int a2@, int a3, _DWORD *a4); char __thiscall sub_8B5570(_DWORD *this, int a2, int a3); int __stdcall sub_8B5700(int a1, int a2, int a3, int ArgList, int a5); signed int __thiscall sub_8B5730(int this); void **__cdecl sub_8B57B0(int a1); int __thiscall sub_8B5870(_DWORD *this); int __thiscall sub_8B5880(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8B58C0(_DWORD *this, int a2, int a3, int a4); void *sub_8B59D0(); LONG __thiscall sub_8B59E0(_DWORD *this); // int __userpurge sub_8B5A20@(_DWORD *a1@, int a2@, int a3); char __thiscall sub_8B5A80(_DWORD *this, unsigned int a2); int __thiscall sub_8B5AB0(_DWORD *this); char __thiscall sub_8B5B10(_DWORD *this, int a2, int a3, char a4, int a5, char a6, int a7, int a8); char __thiscall sub_8B5BA0(_DWORD *this, _DWORD *a2); char __thiscall sub_8B5D40(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8B5F60(void *this, char a2); _DWORD *__thiscall sub_8B5FC0(_DWORD *this, unsigned int a2, unsigned __int8 a3); void __thiscall sub_8B6050(_DWORD *this, unsigned int a2); int __thiscall sub_8B60E0(_DWORD *this, unsigned int a2); void __thiscall sub_8B6100(void **this); void sub_8B6160(); int sub_8B6190(); char __stdcall sub_8B61A0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_8B61B0(int *this, int a2, int a3, float a4); int __thiscall sub_8B6270(_DWORD *this); void *__thiscall sub_8B62B0(void *this, char a2); _DWORD *__thiscall sub_8B62E0(_DWORD *this, int a2); void *sub_8B6360(); LONG __thiscall sub_8B6370(_DWORD *this); signed int __thiscall sub_8B6400(_DWORD *this); signed int __thiscall sub_8B6420(_DWORD *this, int a2); void *__thiscall sub_8B64F0(void *this, char a2); void *__thiscall sub_8B6520(void *this, char a2); bool __thiscall sub_8B6550(_DWORD *this, _DWORD *a2, int a3); signed int __thiscall sub_8B65B0(_DWORD *this, int a2); int __thiscall sub_8B6650(_DWORD **this); _DWORD *__thiscall sub_8B6670(_DWORD **this); void *sub_8B66C0(); _DWORD *__thiscall sub_8B66D0(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_8B67F0(void *this, char a2); int __thiscall sub_8B6850(_BYTE *this, char a2, signed int a3); signed int __thiscall sub_8B68E0(_DWORD *this); int __thiscall sub_8B6EE0(_DWORD **this); _DWORD *__thiscall sub_8B6EF0(_DWORD **this); void *__thiscall sub_8B6F40(_DWORD *this); signed int __stdcall sub_8B7510(int a1); void *sub_8B7620(); _DWORD *__thiscall sub_8B7630(_DWORD *this, int a2, int a3, int a4); _DWORD **__thiscall sub_8B76E0(void *this, char a2); int __thiscall sub_8B7730(int *this); int __thiscall sub_8B7860(_DWORD **this); _DWORD *__thiscall sub_8B7870(_DWORD **this); void __thiscall sub_8B78C0(_DWORD *this, int a2, int a3); void *sub_8B7E70(); _DWORD *__stdcall sub_8B7E80(int a1, _DWORD *a2); _DWORD *__thiscall sub_8B7E90(_DWORD *this, int a2, int a3, int a4, int a5); _DWORD **__thiscall sub_8B7FA0(void *this, char a2); signed int __thiscall sub_8B7FF0(_DWORD *this); _DWORD *__thiscall sub_8B8260(_DWORD *this, int a2); void *sub_8B83B0(); LONG __thiscall sub_8B83C0(_DWORD *this); // int __userpurge sub_8B83D0@(_DWORD *a1@, int a2@, int a3); int __thiscall sub_8B8430(int this); char __thiscall sub_8B8590(_DWORD *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8); char __thiscall sub_8B8600(_DWORD *this, _DWORD *a2); char __thiscall sub_8B8730(_DWORD *this, _DWORD *a2); void *__thiscall sub_8B88B0(void *this, char a2); _DWORD *__thiscall sub_8B88E0(_DWORD *this, int a2); LONG __thiscall sub_8B8940(_DWORD *this); int __thiscall sub_8B8950(void *this); void *sub_8B8960(); void *__thiscall sub_8B8970(void *this, char a2); int __thiscall sub_8B89A0(_DWORD *this, _DWORD *a2); errno_t __thiscall sub_8B8AF0(int this); char __thiscall sub_8B8B10(_DWORD *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8); void __cdecl sub_8B8B90(int a1, int a2, float a3, char *Src, int a5); BOOL __cdecl sub_8B8D30(int a1, int a2, int a3, int a4, void ***a5); void __thiscall sub_8B8D90(_DWORD *this, int a2); int __thiscall sub_8B8DA0(_DWORD *this); void *__thiscall sub_8B8DE0(void *this, char a2); LONG __thiscall sub_8B8E10(_DWORD *this); int __thiscall sub_8B8E60(_DWORD *this, const char *a2); _DWORD *__thiscall sub_8B8EC0(_DWORD *this, int *a2); void *__thiscall sub_8B8F50(void *this, char a2); void *__thiscall sub_8B8F80(void *this, char a2); void **__thiscall sub_8B8FB0(_DWORD *this, int a2, const char *a3, void *a4); char __thiscall sub_8B8FE0(_DWORD *this, int *a2); void **__cdecl sub_8B9140(int a1, int a2, int a3); void sub_8B91F0(); void sub_8B9210(); int __thiscall sub_8B9260(_DWORD *this); void *__thiscall sub_8B92A0(void *this, char a2); void *__thiscall sub_8B92D0(void *this, char a2); char __thiscall sub_8B9300(_DWORD *this, _DWORD *a2); void sub_8B9440(); _DWORD *__thiscall sub_8B9470(_DWORD *this); _DWORD *sub_8B94C0(); int __stdcall sub_8B94F0(char *Src, int, int, int); // idb bool __thiscall sub_8B9870(_DWORD *this, int a2, char *Src, int a4); _DWORD *__cdecl sub_8B98B0(char *Src, int a2); char __stdcall sub_8B98E0(char *Src, char *a2, int a3); int __thiscall sub_8B99E0(_DWORD *this); _DWORD *sub_8B9C00(); void sub_8B9C30(); int __thiscall sub_8B9C60(_DWORD *this, char *Src, int a3); // int __thiscall unknown_libname_33(_DWORD); weak void __thiscall sub_8B9CA0(_DWORD *this); _DWORD *__thiscall sub_8B9CD0(int *this); int __cdecl sub_8B9D50(unsigned __int8 a1); // int __usercall sub_8B9D80@(signed __int16 *a1@, unsigned int a2@); // int __usercall sub_8B9DE0@(int a1@); int sub_8B9E80(void); // weak int sub_8B9E90(void); // weak int __cdecl sub_8B9EA0(char *); // idb signed int __cdecl sub_8B9F30(const char *a1); signed int __cdecl sub_8BA040(int a1, int a2); signed int __cdecl sub_8BA260(int a1, int a2); signed int __cdecl sub_8BA3E0(int a1, int a2); int __thiscall sub_8BA5D0(_DWORD *this); void *__thiscall sub_8BA610(void *this, char a2); int __thiscall sub_8BA640(_DWORD *this); bool __cdecl sub_8BA670(unsigned __int8 a1); bool __cdecl sub_8BA6A0(unsigned __int8 a1); bool __cdecl sub_8BA6D0(unsigned __int8 a1); bool __cdecl sub_8BA700(unsigned __int8 a1); bool __cdecl sub_8BA730(unsigned __int8 a1); bool __cdecl sub_8BA760(unsigned __int8 a1); bool __cdecl sub_8BA790(unsigned __int8 a1); bool __cdecl sub_8BA7C0(unsigned __int8 a1); bool __cdecl sub_8BA7F0(unsigned __int8 a1); bool __cdecl sub_8BA820(unsigned __int8 a1); bool __cdecl sub_8BA850(unsigned __int8 a1); void *__thiscall sub_8BA880(void *this, char a2); char __cdecl sub_8BA8B0(char *a1, int a2, int a3); signed int __cdecl sub_8BADB0(signed int a1, int a2, int a3); char __cdecl sub_8BAE20(int a1, int a2, int a3, const char *a4, signed int a5, const char *a6, char a7, char a8); signed int sub_8BB120(); signed int __cdecl sub_8C1AC0(char *Filename); _DWORD *__thiscall sub_8C1C50(_DWORD *this); void __thiscall sub_8C1C60(void **this); int __thiscall sub_8C1C80(char **this, char *Filename); void sub_8C1D60(); int sub_8C1D70(); int __cdecl sub_8C1D80(int a1); signed int sub_8C1E30(); // int __usercall sub_8C1F00@(signed int a1@); char *__cdecl sub_8C1FA0(int *a1); // void __usercall __noreturn sub_8C2000(int a1@); void *sub_8C2020(); int __cdecl sub_8C20B0(const char *a1); void sub_8C21D0(); int *__cdecl sub_8C2210(int a1, int a2); char *__cdecl sub_8C2280(int a1); char *sub_8C22F0(); int sub_8C2300(); signed int sub_8C2470(); bool __cdecl sub_8C4670(int a1, int a2, int a3, int a4, int *a5); int __thiscall sub_8C46A0(_DWORD *this, int a2); void *__thiscall sub_8C46C0(void *this, char a2); void **__thiscall sub_8C46F0(_DWORD *this, int *a2, int a3, unsigned int a4); _DWORD *__thiscall sub_8C4740(_DWORD *this, int a2); int __thiscall sub_8C4770(_DWORD *this); void __thiscall sub_8C47B0(_BYTE *this); void *__thiscall sub_8C4820(void *this, char a2); void **__thiscall sub_8C4850(void *this, char a2); void **__thiscall sub_8C4890(void *this, char a2); void *__thiscall sub_8C48D0(void *this, char a2); LONG __thiscall sub_8C4900(_DWORD *this); char __thiscall sub_8C4970(_DWORD *this, _DWORD *a2); void *__thiscall sub_8C4B30(void *this, char a2); void **__thiscall sub_8C4B60(void **this); int __cdecl sub_8C4BE0(int a1, int a2, int a3, int a4); int sub_8C4C80(); char __thiscall sub_8C4C90(_DWORD *this, int a2, _DWORD *a3); int __fastcall sub_8C4CF0(int a1, int a2, int a3); void __thiscall sub_8C4D20(_DWORD *this, int *a2); char __thiscall sub_8C4D80(_DWORD *this, int a2); char __cdecl sub_8C4DA0(char *Src, char *Dst, rsize_t SizeInBytes); int __thiscall sub_8C4F30(_DWORD *this, int a2); int __thiscall sub_8C4FD0(_DWORD *this, int a2); int __thiscall sub_8C5070(_DWORD *this); void __thiscall sub_8C5110(_BYTE *this); void **__thiscall sub_8C5180(void *this, char a2); void **__thiscall sub_8C51C0(void *this, char a2); void *__thiscall sub_8C5200(void *this, char a2); char __stdcall sub_8C5230(char *Src, _DWORD **a2); int __cdecl sub_8C5420(int a1); _DWORD *__thiscall sub_8C54A0(void *this, char a2); _DWORD *__thiscall sub_8C5560(_DWORD *this); _DWORD *__cdecl sub_8C55E0(char a1); int __cdecl sub_8C5620(int a1); int __thiscall sub_8C5720(int this); int __thiscall sub_8C5740(int this); int __thiscall sub_8C5760(int this); void *__thiscall sub_8C5780(void *this, char a2); int __thiscall sub_8C57B0(_DWORD *this); void __thiscall sub_8C57F0(_BYTE *this); void **__thiscall sub_8C5860(void *this, char a2); void **__thiscall sub_8C58A0(void *this, char a2); void *__thiscall sub_8C58E0(void *this, char a2); int __thiscall sub_8C5910(_DWORD *this); int __thiscall sub_8C59B0(_DWORD *this, int a2, unsigned int a3); int __thiscall sub_8C5A10(_DWORD *this); int __thiscall sub_8C5A80(int this); // char __usercall sub_8C5B60@(int a1@, int a2@); int __thiscall sub_8C5C80(_DWORD *this); int __thiscall sub_8C5CD0(_DWORD *this); // char __userpurge sub_8C5D10@(int *a1@, int a2@, int a3); LONG __thiscall sub_8C5D50(_DWORD *this, int a2, int a3); void **__thiscall sub_8C5E80(int *this, _DWORD *a2, int a3, unsigned int a4); char __thiscall sub_8C5F10(int this, int a2); void *__thiscall sub_8C60A0(void *this, char a2); _DWORD *__thiscall sub_8C60D0(_DWORD *this); void __thiscall sub_8C6150(_DWORD *this); char __thiscall sub_8C62F0(_DWORD *this, int a2, int a3); // int __usercall sub_8C6350@(int a1@, int a2, int a3, char **a4); int __thiscall sub_8C63E0(_DWORD *this); char __thiscall sub_8C6450(_DWORD *this, _DWORD *a2); // int __usercall sub_8C65B0@(int a1@, int a2@, int a3, int a4, int a5, char **a6); _DWORD *sub_8C6660(); void sub_8C66C0(); int __stdcall sub_8C66F0(char *Src, int, int, int); // idb bool __thiscall sub_8C6A70(_DWORD *this, int a2, char *Src, int a4); _DWORD *__thiscall sub_8C6AB0(_DWORD *this); char __thiscall sub_8C6AF0(int this, char *Src, int a3); int __thiscall sub_8C7490(int *this, int a2); int __thiscall sub_8C74B0(_DWORD *this); void sub_8C74D0(); float *__thiscall sub_8C74F0(_DWORD *this, int a2, float a3); void __thiscall sub_8C7530(_DWORD *this); // void __userpurge sub_8C7580(_DWORD *a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, _DWORD *a9, int a10, int a11, int a12); int __thiscall sub_8C77D0(_DWORD *this); int __thiscall sub_8C7830(_DWORD *this); int __thiscall sub_8C78A0(_DWORD *this); // void __userpurge sub_8C7900(int *a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); // int __userpurge sub_8C8850@(int a1@, int a2@, _DWORD *a3, int a4); void __thiscall sub_8C8960(int this, int a2, _DWORD *a3, int a4, int a5, int a6, unsigned int a7, _DWORD *a8, int a9, float *a10, int a11); void **__thiscall sub_8C9270(_DWORD *this, int a2); int __thiscall sub_8C92F0(_DWORD *this); int __thiscall sub_8C9320(_DWORD *this, _DWORD *a2); void **__thiscall sub_8C9590(_DWORD *this, int a2, unsigned int a3); void __thiscall sub_8C95D0(_DWORD *this); void *__thiscall sub_8C9630(void *this, char a2); _DWORD *__thiscall sub_8C9660(_DWORD *this); LONG __thiscall sub_8C96B0(_DWORD *this); void *__thiscall sub_8C9720(void *this, char a2); LONG __thiscall sub_8C9750(_DWORD *this, int a2); char __thiscall sub_8C97B0(_DWORD *this, int a2); char __thiscall sub_8C9950(_DWORD *this, unsigned int a2); int __thiscall sub_8C9970(_DWORD **this, int *a2); int __thiscall sub_8C9A50(_DWORD *this); int __thiscall sub_8C9A70(_DWORD *this); LONG __thiscall sub_8C9A90(_DWORD *this); void **__thiscall sub_8C9B30(int this, int a2); int __thiscall sub_8C9E20(_DWORD *this, int a2); _DWORD *__thiscall sub_8C9E90(_DWORD *this); _DWORD *__thiscall sub_8C9EB0(_DWORD *this); void *__thiscall sub_8C9F10(void *this, char a2); char __cdecl sub_8C9F40(int a1, _DWORD *a2, _DWORD *a3); char __cdecl sub_8C9F80(int a1, int a2, int a3); int sub_8CA000(); int __cdecl sub_8CA030(char *, int, int, int); // idb unsigned int __cdecl sub_8CA160(char *a1, int a2, int a3, int a4); unsigned int __cdecl sub_8CA5D0(char *a1, int a2, int a3, int a4); int __cdecl sub_8CA770(char *, int, int, int); // idb unsigned int __cdecl sub_8CA8A0(char *a1, int a2, int a3, int a4); int __cdecl sub_8CAA60(int a1, int a2, int a3, int a4); const char *__cdecl sub_8CAAE0(int a1, _DWORD *a2, int a3, int a4); int __cdecl sub_8CADA0(int, int, int, char *); // idb int __cdecl sub_8CAE20(char *, int, char); // idb char __cdecl sub_8CAFA0(int a1, int a2, _DWORD *a3, signed int a4, int *a5); int __cdecl sub_8CB2B0(int a1, int a2); unsigned int __cdecl sub_8CB370(char *a1, int a2, int a3, int a4); CHAR *__cdecl sub_8CB620(char *a1, int a2, int a3, int a4); int *__cdecl sub_8CBA40(char *Src, char a2, int a3); int *__cdecl sub_8CBC80(int a1, int a2, int a3, char *a4); int __cdecl sub_8CBDC0(int a1, int a2); int *__cdecl sub_8CBDE0(char *a1, int a2); int *__cdecl sub_8CC2D0(char *a1, int a2); void *__thiscall sub_8CC300(void *this, char a2); int __thiscall sub_8CC330(_DWORD *this); int __thiscall sub_8CC350(_DWORD *this); int __thiscall sub_8CC370(_DWORD *this, char *a2); int __thiscall sub_8CC3D0(_DWORD *this); void *__thiscall sub_8CC410(void *this, char a2); int __thiscall sub_8CC440(_DWORD *this); char __thiscall sub_8CC4B0(_DWORD *this, char *a2, int a3, int a4); char __thiscall sub_8CC550(_DWORD *this, char *a2, int a3, int a4, int a5, int a6); char __thiscall sub_8CC600(_DWORD *this, char *a2, int a3, float a4, float a5, float a6); char __thiscall sub_8CC6D0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6); char __thiscall sub_8CC7C0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6); char __thiscall sub_8CC8C0(_DWORD *this, char *a2, int a3, void *Src, int a5, int a6); char __thiscall sub_8CC970(_DWORD *this, char *a2, char a3, int a4); char __thiscall sub_8CCA80(_DWORD *this, char *a2, int a3, void *Src); char __thiscall sub_8CCB20(_DWORD *this, char *a2, int a3, int a4, int a5, int a6); char __thiscall sub_8CCC20(_DWORD *this, char *a2, int a3, int a4, int a5, int a6); char __thiscall sub_8CCD30(_DWORD *this, char *a2, int a3, int a4, char *Src); char __thiscall sub_8CCDD0(_DWORD *this, char *a2, int a3, void *Src, int a5, int a6, int a7, void *a8, void *a9); _DWORD *__thiscall sub_8CCEA0(_DWORD *this); int *sub_8CCEF0(); int *sub_8CCF20(); int *sub_8CCF50(); int *sub_8CCF90(); int *sub_8CCFC0(); int *sub_8CD000(); int *sub_8CD030(); int *sub_8CD070(); int *sub_8CD0A0(); signed int __thiscall sub_8CD0D0(_DWORD *this); signed int __thiscall sub_8CD110(int this); signed int __thiscall sub_8CD170(_DWORD *this); char __cdecl sub_8CD1C0(int a1, int a2, int a3, int a4, signed int a5); char __cdecl sub_8CD420(int a1, int a2, int a3, int a4, signed int a5); char __thiscall sub_8CD5D0(int this, int a2); signed int __thiscall sub_8CD650(void **this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8); int __thiscall sub_8CD6D0(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); int __thiscall sub_8CD700(_DWORD **this); int __thiscall sub_8CD750(int this); char __thiscall sub_8CD770(_DWORD *this); char __thiscall sub_8CD780(_DWORD *this); char __thiscall sub_8CD790(_DWORD *this); char __thiscall sub_8CD7A0(_DWORD *this); void *sub_8CD7B0(); void *__thiscall sub_8CD7C0(void *this, char a2); int __thiscall sub_8CD7F0(int this, _DWORD *a2, _DWORD *a3, int a4, int a5, unsigned int a6, _DWORD *a7, float *a8, float *a9); int __thiscall sub_8CD940(_DWORD *this); int __thiscall sub_8CD960(_DWORD *this); LONG __thiscall sub_8CD980(_DWORD *this); void __thiscall sub_8CD9E0(int this); float *__thiscall sub_8CDC40(float *this); char *sub_8CDCA0(); void *__thiscall sub_8CDCB0(void *this, char a2); int __thiscall sub_8CDCE0(_DWORD *this); void __thiscall sub_8CDCF0(_DWORD *this, int a2); int __thiscall sub_8CDD40(_DWORD *this); int __thiscall sub_8CDD80(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); char __thiscall sub_8CDEC0(_DWORD *this, _DWORD *a2); void __thiscall sub_8CDF30(int *this); void __thiscall sub_8CDF90(_DWORD *this); void *__thiscall sub_8CDFE0(void *this, char a2); _DWORD *__thiscall sub_8CE010(_DWORD *this); void *sub_8CE0B0(); void *__thiscall sub_8CE0C0(void *this, char a2); _DWORD *__thiscall sub_8CE0F0(_DWORD *this); LONG __stdcall sub_8CE150(int a1); int __stdcall sub_8CE170(volatile LONG *a1); int __stdcall sub_8CE1B0(int a1, int a2, int a3); int __stdcall sub_8CE1D0(int a1, int a2); int __stdcall sub_8CE1F0(int a1, int a2, int a3); int __stdcall sub_8CE210(int a1, int a2, int a3); int __stdcall sub_8CE230(int a1, int a2, int a3); int __stdcall sub_8CE250(int a1, int a2, int a3); int __stdcall sub_8CE280(int a1, int a2, int a3, int a4); int __stdcall sub_8CE2B0(int, float); // idb int __stdcall sub_8CE2D0(int a1, int a2); int __stdcall sub_8CE2F0(int a1, int a2); int __stdcall sub_8CE360(int a1, int a2); void __thiscall sub_8CE380(_DWORD *this); void *__thiscall sub_8CE390(void *this, char a2); signed int __stdcall sub_8CE3D0(int a1, unsigned __int8 *a2, _DWORD *a3); int __stdcall sub_8CE430(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_8CE480(_DWORD *this, int a2, int a3); _DWORD *__cdecl sub_8CE4C0(int a1); int __stdcall sub_8CE520(int, int, void *Src, int); // idb int __stdcall sub_8CE560(int, int, void *Src, int); // idb int __stdcall sub_8CE5A0(int, int, void *Src, int); // idb int __stdcall sub_8CE5E0(int, int, void *Src, int); // idb int __stdcall sub_8CE620(int, int, void *Src, int); // idb int __stdcall sub_8CE660(int, int, void *Src, int); // idb int *sub_8CE6A0(); void sub_8CE6E0(); void sub_8CE700(); int __thiscall sub_8CE760(_DWORD *this); char __thiscall sub_8CE770(void **this, LPCSTR lpText); _DWORD *__cdecl sub_8CE850(_DWORD *a1); _DWORD *__thiscall sub_8CE870(_DWORD *this); char __thiscall sub_8CE8C0(void **this, LPCSTR lpText); int *__thiscall sub_8CE8D0(_DWORD *this, int *a2, int a3); int **__thiscall sub_8CEB20(_DWORD *this, int **a2, _BYTE *a3); int *__thiscall sub_8CEB90(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); signed int __thiscall sub_8CEC30(_DWORD *this, int a2, int *a3, int a4, _BYTE *a5); BOOL __thiscall sub_8CED00(int this, _BYTE *a2); signed int __thiscall sub_8CED70(_DWORD *this, int a2, _DWORD *a3, int a4, _BYTE *a5); bool __thiscall sub_8CEE40(_DWORD *this, _BYTE *a2); void __thiscall sub_8CEE70(_DWORD *this); void __thiscall sub_8CEED0(_DWORD *this); _DWORD *__thiscall sub_8CEF90(_DWORD *this); void *__thiscall sub_8CF0C0(void *this, char a2); char *__cdecl sub_8CF0F0(char *a1, char *a2); unsigned int __cdecl sub_8CF140(int a1, char *a2); int __cdecl sub_8CF180(int a1, const char *a2, const char *a3); double __cdecl sub_8CF210(float a1, float a2, float a3, float a4, float a5, float a6, char a7, int a8, int a9, int a10); float *__cdecl sub_8CF390(float *a1, float *a2); float *__cdecl sub_8CF440(int *a1, float *a2); float *__thiscall sub_8CF4C0(float *this); int __thiscall sub_8CF540(int this, _DWORD *a2, _DWORD *a3); void __thiscall sub_8CF580(int this, float *a2, float *a3); void __thiscall sub_8CF650(int this, float a2, int a3, int a4, int a5); _DWORD *__thiscall sub_8CF7D0(_DWORD *this, _DWORD *a2); int __thiscall sub_8CF7F0(_DWORD *this, _DWORD *a2); char __thiscall sub_8CF810(int this, float a2); float *__thiscall sub_8CF980(float *this); int __thiscall sub_8CFA50(_DWORD *this, _DWORD *a2); void __thiscall sub_8CFA70(_DWORD *this); int __thiscall sub_8CFA80(void *this, float a2, int a3); int __thiscall sub_8CFAA0(float *this, int a2); void __thiscall sub_8CFAC0(int this, float a2, int a3, int a4); int __thiscall sub_8CFBB0(float *this, int a2, int a3); void __thiscall sub_8CFBD0(_BYTE *this); char __thiscall sub_8CFBE0(int *this, float a2); int __cdecl sub_8CFD10(_DWORD *a1, const char *a2, const char *a3); void __thiscall sub_8CFD90(float *this, int a2); void __thiscall sub_8CFDB0(void *this, float a2, int a3); void *__thiscall sub_8CFDD0(void *this, char a2); char __thiscall sub_8CFE00(_DWORD *this, int a2, int a3, int a4); void __thiscall sub_8CFEE0(int this, void *a2); LONG __thiscall sub_8D00F0(_DWORD *this, int a2); signed int __stdcall sub_8D0190(int a1, int a2); const void *__thiscall sub_8D02C0(const void **this, int a2); void **__cdecl sub_8D03E0(char *a1, int a2); _BYTE *__thiscall sub_8D0610(_BYTE *this); int __thiscall sub_8D0630(float *this, float a2); char __thiscall sub_8D06A0(float *this, float a2); float *__thiscall sub_8D06C0(float *this); int __thiscall sub_8D06E0(float *this, float a2, int a3); void __thiscall sub_8D0710(float *this); void __thiscall sub_8D0730(int this, float a2); int __thiscall sub_8D0790(float *this, int a2, int a3, float a4, int a5); signed int __thiscall sub_8D07D0(signed int *this, signed int a2, signed int a3, signed int a4, signed int a5, char a6); signed int __stdcall sub_8D0890(_DWORD *a1, int a2); _DWORD *__thiscall sub_8D0910(_DWORD *this, int a2, int a3, int a4); volatile LONG *__thiscall sub_8D0AC0(int this, float *a2); char __thiscall sub_8D0BD0(int *this); void __thiscall sub_8D0C60(_DWORD *this); void __thiscall sub_8D0CD0(_BYTE *this); void **__thiscall sub_8D0D80(void *this, char a2); void **__thiscall sub_8D0DC0(void *this, char a2); int *sub_8D0E40(); void *__thiscall sub_8D0E50(void *this, char a2); char sub_8D0E80(); void __thiscall sub_8D0EB0(_BYTE *this); void **__thiscall sub_8D0F60(void *this, char a2); void **__thiscall sub_8D0FA0(void *this, char a2); void *__thiscall sub_8D1020(void *this, char a2); char sub_8D1050(); void __thiscall sub_8D1080(_DWORD *this); void __thiscall sub_8D10F0(_BYTE *this); LONG __thiscall sub_8D11A0(_BYTE *this, int a2, const char *a3, LONG a4); void **__thiscall sub_8D1290(void *this, char a2); void **__thiscall sub_8D12D0(void *this, char a2); void *__thiscall sub_8D1350(void *this, char a2); char sub_8D1380(); void __thiscall sub_8D13B0(_BYTE *this); void **__thiscall sub_8D1460(void *this, char a2); void **__thiscall sub_8D14A0(void *this, char a2); void *__thiscall sub_8D1520(void *this, char a2); char __cdecl sub_8D1550(int a1, int (__cdecl *a2)(int, int, int), int a3); char *sub_8D15B0(); void *__thiscall sub_8D15C0(void *this, char a2); void __thiscall sub_8D15F0(void *this, int a2, _DWORD **a3); _DWORD *sub_8D1600(); char __thiscall sub_8D1660(int *this, size_t a2); int __thiscall sub_8D1670(const char **this, _DWORD *a2); char __thiscall sub_8D1680(void *this, _DWORD *a2); void __thiscall sub_8D1710(_DWORD *this, int a2); _DWORD *__thiscall sub_8D1770(void *this, _DWORD **a2); void __thiscall sub_8D17F0(char *this, void *a2); unsigned int __thiscall sub_8D1A90(_DWORD *this, char *a2); _DWORD *__thiscall sub_8D1AE0(_DWORD *this); void *sub_8D1C20(); LONG __thiscall sub_8D1C30(_DWORD *this); void *__thiscall sub_8D1D50(void *this, char a2); _DWORD *__thiscall sub_8D1D80(_DWORD *this); void *sub_8D1EC0(); LONG __thiscall sub_8D1ED0(_DWORD *this); char __thiscall sub_8D20B0(_BYTE *this, int a2, int a3); char __thiscall sub_8D21E0(_BYTE *this, void *a2, int a3, int a4, int a5, int a6); void __thiscall sub_8D2320(_BYTE *this, int a2, int a3, int a4, int a5, int a6); void *__thiscall sub_8D23F0(void *this, char a2); char __thiscall sub_8D2420(_BYTE *this, _DWORD *a2, int a3, int a4, int a5); float *__thiscall sub_8D2550(float *this); char *sub_8D25C0(); LONG __thiscall sub_8D25D0(_DWORD *this); char __thiscall sub_8D25F0(_BYTE *this, int a2, _DWORD **a3); float *sub_8D2660(); bool __stdcall sub_8D26D0(int a1); int __cdecl sub_8D26E0(int a1, int a2, int a3); int __cdecl sub_8D2710(int a1, int a2, int a3); void *__thiscall sub_8D2740(void *this, char a2); float *__thiscall sub_8D2770(_BYTE *this, _DWORD **a2); int __cdecl sub_8D27E0(int a1, int a2); int __cdecl sub_8D2800(int a1, int a2); int __thiscall sub_8D2820(int *this, size_t a2); int __thiscall sub_8D28C0(const char **this, _DWORD *a2); unsigned int __thiscall sub_8D2960(_DWORD *this, char *a2); int __thiscall sub_8D2BF0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9); void __thiscall sub_8D2C40(_DWORD *this, int a2); char __stdcall sub_8D2C90(_DWORD *a1); char __thiscall sub_8D2F00(const void **this); int __thiscall sub_8D2FF0(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); int __thiscall sub_8D30A0(_DWORD *this); int __thiscall sub_8D30D0(_DWORD *this); void *__stdcall sub_8D3100(char *a1); char __thiscall sub_8D3160(_DWORD *this); void __cdecl sub_8D3210(int a1, void *a2, const void *a3); char *__cdecl sub_8D3230(char *a1, char *a2, char *a3, int a4); char __thiscall sub_8D3270(const void **this, int a2); signed int __thiscall sub_8D32B0(_DWORD *this, _DWORD *a2, int a3, int a4, float a5, float a6, float *a7, int *a8); void __cdecl sub_8D3710(char *a1, int a2, int a3, int a4); char *__thiscall sub_8D3750(char **this, char *a2); char *__thiscall sub_8D3820(int this, int a2); void *sub_8D3880(); _DWORD *__thiscall sub_8D3890(_DWORD *this, void *a2); LONG __thiscall sub_8D3B70(_DWORD *this); char __thiscall sub_8D3E00(int this, _DWORD *a2); int __thiscall sub_8D4420(int *this, unsigned int a2); void *__thiscall sub_8D44C0(void *this, char a2); signed int __thiscall sub_8D44F0(_DWORD *this, int a2, int a3, int a4, int a5, unsigned int a6, float *a7, int a8); int __thiscall sub_8D4750(_DWORD *this, float a2); _DWORD *__thiscall sub_8D4790(_DWORD *this); void __thiscall sub_8D47C0(void *this); _DWORD *__thiscall sub_8D47F0(void *this, char a2); void __thiscall sub_8D4840(int this, _DWORD *a2); void __thiscall sub_8D4A70(_DWORD *this, _DWORD *a2); signed int __stdcall sub_8D4AB0(int a1, float *a2, float *a3, float *a4, float *a5, float *a6); char __stdcall sub_8D4D50(int a1, float *a2, float *a3, float *a4, float *a5); void *__thiscall sub_8D4E80(void *this, char a2); float *__thiscall sub_8D4EB0(float *this, int a2); int __thiscall sub_8D4FF0(int this); char __thiscall sub_8D50A0(_DWORD *this, int a2, int a3, _DWORD *a4); int *__thiscall sub_8D5110(void *this, char a2); unsigned int __thiscall sub_8D51C0(_DWORD *this, _DWORD *a2); void __thiscall sub_8D5280(_DWORD *this); char __thiscall sub_8D5370(_DWORD *this, int a2, void *a3, int a4); signed int __thiscall sub_8D54D0(float *this, float *a2, float *a3, _DWORD *a4, int a5); char __thiscall sub_8D5A40(_DWORD *this, float *a2, float *a3, int a4); void __thiscall sub_8D6220(_DWORD *this); char __thiscall sub_8D62B0(int this, float *a2, float *a3, int a4); char __thiscall sub_8D6380(_DWORD *this, float *a2, float *a3, unsigned int a4); LONG __thiscall sub_8D64E0(_DWORD *this); _DWORD *__thiscall sub_8D6580(_DWORD *this, unsigned int a2); _DWORD *__cdecl sub_8D69F0(_DWORD *a1, _DWORD *a2, _DWORD *a3); void __cdecl sub_8D6A30(_DWORD *a1, int a2); void __cdecl sub_8D6A70(_DWORD *a1, int a2); void __cdecl sub_8D6AA0(float *a1, int a2); unsigned int __thiscall sub_8D6AF0(unsigned int *this, char *a2); unsigned int __thiscall sub_8D6BE0(unsigned int *this, int a2); char *__thiscall sub_8D6C60(_DWORD *this, int a2); struct _RTL_CRITICAL_SECTION *sub_8D6CC0(); float *__thiscall sub_8D6D20(float *this); void __thiscall sub_8D6E10(_DWORD *this); unsigned int __thiscall sub_8D6F00(unsigned int *this, unsigned int a2); _DWORD *__thiscall sub_8D6FD0(unsigned int *this, _DWORD *a2); unsigned int __thiscall sub_8D7060(_DWORD *this, unsigned int a2); char *__thiscall sub_8D70F0(int *this, char *a2); unsigned int __thiscall sub_8D7170(_DWORD *this, unsigned int a2); signed int __cdecl sub_8D7220(_DWORD *a1); int __thiscall sub_8D7630(void *this); char __thiscall sub_8D78D0(int this, float a2, int a3, float a4, float a5); char __thiscall sub_8D7B80(_DWORD *this, float a2, int a3, int a4); void __thiscall sub_8D7BE0(int this); int __thiscall sub_8D7C60(_DWORD *this, int a2); unsigned int __thiscall sub_8D7C90(int *this, void **a2); int __thiscall sub_8D7CA0(const char **this, unsigned int a2); char __thiscall sub_8D7CB0(_DWORD *this, int a2); int __thiscall sub_8D7CC0(int *this, _DWORD *a2); char __thiscall sub_8D7CD0(_DWORD *this, int a2); void *__thiscall sub_8D7D00(void *this, char a2); int __thiscall sub_8D7D30(int this); double __thiscall sub_8D7ED0(_DWORD *this); void __thiscall sub_8D7EE0(_DWORD *this, float a2); LONG __thiscall sub_8D7F20(_DWORD *this); char __thiscall sub_8D81A0(int this, float a2); void __thiscall sub_8D8240(_DWORD *this); _DWORD *__thiscall sub_8D82E0(_DWORD *this); char *sub_8D83C0(); int __thiscall sub_8D83D0(_DWORD *this, char a2); int __thiscall sub_8D84B0(_DWORD *this, int a2, float a3); unsigned int __thiscall sub_8D8670(_DWORD *this); void __thiscall sub_8D86F0(_DWORD *this); unsigned int __thiscall sub_8D8990(int this); _DWORD *__thiscall sub_8D8D10(_WORD *this, _DWORD **a2); LONG __thiscall sub_8D8D90(int this); char *sub_8D8E00(); int __thiscall sub_8D8E10(_DWORD *this, float *a2); char __stdcall sub_8D8E30(int a1); _DWORD *__thiscall sub_8D8E60(void *this, char a2); unsigned int __thiscall sub_8D8EF0(int *this, char *a2); float *__thiscall sub_8D8F40(_DWORD *this, _DWORD **a2); unsigned int __thiscall sub_8D8FC0(unsigned __int16 *this, char *a2); signed int __stdcall sub_8D9010(int a1, _DWORD *a2); LONG __thiscall sub_8D90F0(_DWORD *this); void __thiscall sub_8D9290(_DWORD *this); LONG __thiscall sub_8D9300(_DWORD *this, float a2, char a3); LONG __thiscall sub_8D9420(_DWORD *this); void *__thiscall sub_8D98A0(void *this, char a2); char __thiscall sub_8D98D0(int this); void __thiscall sub_8D9D10(float *this); void __thiscall sub_8D9E10(float *this, char a2); void __thiscall sub_8D9EF0(float *this, float a2, int a3); void __thiscall sub_8D9F20(float *this, float a2); char __thiscall sub_8D9F80(float *this, float a2); void __thiscall sub_8D9FF0(_DWORD *this, int a2); void __thiscall sub_8DA040(_DWORD *this); void __thiscall sub_8DA450(int this); int __thiscall sub_8DA500(_DWORD **this, unsigned int a2); char __thiscall sub_8DA660(float *this, float a2, float a3); void __thiscall sub_8DA830(_DWORD *this); int __thiscall sub_8DAAF0(_DWORD *this, void *a2); void __thiscall sub_8DAD80(int this, float a2, float a3); void *sub_8DAEE0(); void *__thiscall sub_8DAEF0(void *this, char a2); int __thiscall sub_8DAF20(int this); unsigned __int8 *__cdecl sub_8DB8D0(volatile LONG *a1, char a2); char **__stdcall sub_8DBB60(char *a1, int a2, int a3); void __thiscall sub_8DBBD0(_DWORD *this); signed int __stdcall sub_8DBC30(int a1, char **a2); signed int __stdcall sub_8DBD60(volatile LONG *a1, char **a2); void __thiscall sub_8DBE50(_DWORD *this); char __thiscall sub_8DBE90(_DWORD *this); void __thiscall sub_8DBF60(void **this); int *__thiscall sub_8DBFB0(int *this); void __thiscall sub_8DC0B0(_DWORD *this); void __thiscall sub_8DC160(_DWORD **this, int a2); int __thiscall sub_8DC770(int (__stdcall ***this)(signed int)); LONG __thiscall sub_8DC780(char *this); void *__thiscall sub_8DC7D0(void *this, char a2); char __thiscall sub_8DC800(int this, char *a2); int __thiscall sub_8DC8D0(unsigned int *this, float *a2, float *a3, float *a4, float *a5, float *a6); int __thiscall sub_8DCA20(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8DCA80(_DWORD *this); int __thiscall sub_8DCAE0(char *this, int a2); LONG __thiscall sub_8DCB10(char *this); _DWORD *__cdecl sub_8DCB60(LPCSTR lpText, int a2, float a3); _DWORD *__cdecl sub_8DCD10(int a1, _DWORD *a2); char __thiscall sub_8DCF00(_DWORD *this, int a2, float a3, float a4, float a5, float a6, float a7); char __thiscall sub_8DD160(int this, float a2, float a3, int a4, int a5); char __thiscall sub_8DD4F0(void *this, float a2, float a3, int a4, int a5); char __thiscall sub_8DD530(float *this, float a2, float a3, float a4, float a5, int a6); _DWORD *__thiscall sub_8DDBD0(_DWORD *this); void *__stdcall sub_8DDC20(char *a1); _DWORD *__thiscall sub_8DDC80(_DWORD *this, int a2); void __thiscall sub_8DDCE0(void **this); int __thiscall sub_8DDD00(_DWORD *this, int a2, char a3, int a4, void *a5); _DWORD *__thiscall sub_8DDF30(_DWORD *this, void *a2, int a3); unsigned int __thiscall sub_8DDFD0(_DWORD *this); _DWORD *__thiscall sub_8DE110(_DWORD *this); int __thiscall sub_8DE1B0(_DWORD *this, int a2, void *a3, int a4); LONG __stdcall sub_8DE290(_DWORD *a1, _DWORD *a2); _DWORD *__thiscall sub_8DE2F0(_DWORD *this); void __thiscall sub_8DE320(_DWORD *this); int __thiscall sub_8DE410(int this, int a2); int __cdecl sub_8DE500(int a1, int a2, int a3); struct _RTL_CRITICAL_SECTION *sub_8DE610(); int __cdecl sub_8DE670(char *a1, char *a2, int a3); void __cdecl sub_8DE710(int a1, unsigned int a2); int *__thiscall sub_8DE7F0(_DWORD *this, int *a2, int a3); int *__thiscall sub_8DEB20(_DWORD *this, int *a2, int a3); int *__thiscall sub_8DEDF0(_DWORD *this, int *a2, int a3); void __stdcall sub_8DF0C0(int a1); void __stdcall sub_8DF200(_DWORD *a1); void __stdcall sub_8DF2C0(_DWORD *a1); PRTL_CRITICAL_SECTION_DEBUG **__thiscall sub_8DF380(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG **a2, char a3, PRTL_CRITICAL_SECTION_DEBUG **a4, PRTL_CRITICAL_SECTION_DEBUG *a5); PRTL_CRITICAL_SECTION_DEBUG **__thiscall sub_8DF5C0(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG **a2, char a3, PRTL_CRITICAL_SECTION_DEBUG **a4, PRTL_CRITICAL_SECTION_DEBUG *a5); PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DF800(_DWORD *this); PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DF890(_DWORD *this); _DWORD *__thiscall sub_8DF980(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8DFA20(_DWORD *this, int a2, int a3); int __thiscall sub_8DFAC0(_DWORD *this, int a2, int a3, PRTL_CRITICAL_SECTION_DEBUG **a4); int __thiscall sub_8DFBC0(_DWORD *this, int a2, int a3, PRTL_CRITICAL_SECTION_DEBUG **a4); PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DFCB0(_DWORD *this, _DWORD *a2); PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DFCE0(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG *a2); int *__thiscall sub_8DFD10(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); unsigned int __thiscall sub_8DFDD0(char **this, char *a2); int *__thiscall sub_8DFEF0(_DWORD *this, int *a2, int a3, int a4); int *__thiscall sub_8DFFB0(_DWORD *this, int *a2, int a3, int a4); unsigned int __thiscall sub_8E00B0(int this, int a2); void __thiscall sub_8E0130(unsigned int *this, unsigned int a2); unsigned int __thiscall sub_8E01E0(_DWORD *this, unsigned int a2); void __thiscall sub_8E02C0(_DWORD *this); char __thiscall sub_8E0340(_DWORD *this, int a2); void __thiscall sub_8E0860(_DWORD *this); void __thiscall sub_8E08E0(void *); // idb void __thiscall sub_8E09A0(void *); // idb _DWORD *__thiscall sub_8E0A50(_DWORD *this); char __cdecl sub_8E0C60(int a1, _DWORD *a2); char __thiscall sub_8E0C80(void *this, char *a2); char __thiscall sub_8E1370(void *this, unsigned int *a2); unsigned int __thiscall sub_8E1ED0(unsigned int *this); void __thiscall sub_8E2200(_DWORD *this); int __fastcall sub_8E2540(_DWORD *a1); char __thiscall sub_8E28E0(unsigned int *this, char *a2); void __thiscall sub_8E2A50(_DWORD *this, unsigned int a2, unsigned int a3); signed int __thiscall sub_8E2A80(int this, int *a2); signed int __thiscall sub_8E2BE0(_DWORD *this); signed int __thiscall sub_8E2FA0(_DWORD *this); int __thiscall sub_8E37E0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7, _DWORD *a8, _DWORD *a9, _DWORD *a10); char __thiscall sub_8E38A0(_DWORD *this, float a2, float a3, float a4, float a5, int a6, int a7, int a8); int __thiscall sub_8E39F0(_DWORD *this, float a2, float a3, int a4, int a5); float *__thiscall sub_8E3AD0(float *this); void __thiscall sub_8E3B00(_DWORD *this); char __thiscall sub_8E3B30(_DWORD *this, char *a2); char __thiscall sub_8E3BC0(char *this, char *a2); _DWORD *__thiscall sub_8E3C60(void *this, char a2); double *__thiscall sub_8E3CA0(double *this, double *a2, double *a3); double *__thiscall sub_8E3CD0(double *this, double *a2, double *a3); double __thiscall sub_8E3D00(double *this, double *a2); double __thiscall sub_8E3D30(double *this); int __cdecl sub_8E3DA0(int, double, int); // idb _DWORD *__thiscall sub_8E3DD0(_DWORD *this, _DWORD *a2); double *__thiscall sub_8E3E00(double *this, double a2, double a3, double a4); int __thiscall sub_8E3E20(char *this); double *__cdecl sub_8E3E30(double *a1, double *a2, int a3, char a4); // signed int __usercall sub_8E3EF0@(void *a1@, double *a2@, double *a3@, double *a4); bool __cdecl sub_8E47A0(char *a1, void *a2, signed int *a3, _DWORD *a4, double *a5); double *__thiscall sub_8E4880(double *this); void __thiscall sub_8E48A0(void *); // idb int __thiscall sub_8E48B0(_DWORD); // weak _DWORD *__thiscall sub_8E48C0(_DWORD *this); int __thiscall sub_8E48E0(char *this); _DWORD *__thiscall sub_8E48F0(_DWORD *this, int a2, int *a3); void __thiscall sub_8E4980(char *this, int a2); LONG __thiscall sub_8E4AB0(_DWORD *this); void __thiscall sub_8E4BC0(_DWORD *this); _DWORD *__thiscall sub_8E4E50(void *this, _DWORD **a2); _DWORD *__thiscall sub_8E4EF0(_DWORD *this); void __thiscall sub_8E4F70(_DWORD *this); void sub_8E5020(); int __thiscall sub_8E5030(int *this, char *a2); void **sub_8E50C0(); char __thiscall sub_8E5100(_DWORD *this, int a2); char __thiscall sub_8E5150(const void **this, _DWORD *a2); char __thiscall sub_8E5310(CHAR ***this, char *a2); void __thiscall sub_8E5890(void **this, void *a2); int __thiscall sub_8E5900(int **this, int a2); int __thiscall sub_8E5930(_DWORD *this); void __thiscall sub_8E5970(_DWORD *this); int __thiscall sub_8E59E0(_DWORD *this); void sub_8E5B10(); char __thiscall sub_8E5BB0(void **this); char __thiscall sub_8E5F20(void **this); void *sub_8E5FC0(); char *__thiscall sub_8E6040(size_t *this, char *a2, char *a3, int a4); int __thiscall sub_8E61B0(_DWORD *this, void *a2); void *__cdecl sub_8E62D0(void *a1, void *a2, int a3); char *__thiscall sub_8E6310(_DWORD *this, char *a2); void __thiscall sub_8E63F0(_DWORD *this, int a2); _DWORD *__thiscall sub_8E6500(void *this, int a2, void *a3, int a4, int a5); void *__thiscall sub_8E67D0(void *this, char a2); char __thiscall sub_8E6800(_BYTE *this); LONG __thiscall sub_8E6810(int this, char a2); int sub_8E6840(); bool *sub_8E6850(); void **sub_8E6860(); void *__thiscall sub_8E6870(void *this, char a2); int __thiscall sub_8E68A0(int (__thiscall **this)(_DWORD), int a2); int (__thiscall *__thiscall sub_8E68B0(_DWORD *this, int a2, int a3))(int, int); LONG __thiscall sub_8E68D0(_DWORD *this, LONG a2, int a3); void sub_8E6AE0(); void __thiscall sub_8E6B70(_DWORD *this); void **sub_8E6C80(); _DWORD *__thiscall sub_8E6C90(_DWORD *this); void *__thiscall sub_8E6CC0(void *this, char a2); BOOL __cdecl sub_8E6CF0(int a1, int a2); char __stdcall sub_8E6D10(float *a1, float *a2, float *a3); bool __thiscall sub_8E6F10(int this, float *a2); void __thiscall sub_8E7130(double *this); int __cdecl sub_8E71D0(int a1, int a2, int a3, _DWORD *a4, unsigned __int8 (__cdecl *a5)(int, _DWORD *)); char __thiscall sub_8E7240(float *this, float *a2, float *a3); char __thiscall sub_8E7750(int *this, float *a2, float *a3); int __cdecl sub_8E7910(int a1, int a2, int a3, int *a4, unsigned __int8 (__cdecl *a5)(int, int)); char __thiscall sub_8E79D0(float *this, float *a2, float *a3); char __thiscall sub_8E7B40(float *this, int a2); int __cdecl sub_8E7C40(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, _DWORD *)); void *__cdecl sub_8E7CF0(void *a1, int a2, int a3); int __cdecl sub_8E7DA0(int *a1, int *a2, int *a3, unsigned __int8 (__cdecl *a4)(int *, int *)); void __thiscall sub_8E7F50(void *); // idb void __thiscall sub_8E7F60(void *); // idb int **__cdecl sub_8E7F90(int **a1, int *a2, int *a3, unsigned __int8 (__cdecl *a4)(int *, int *)); int __cdecl sub_8E8130(_DWORD *a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)); _DWORD *__thiscall sub_8E8190(_DWORD *this); unsigned int __thiscall sub_8E8200(_DWORD *this); int __thiscall sub_8E8300(_DWORD *this, _BYTE *a2, unsigned int a3, int a4, unsigned __int8 a5); _BYTE *__thiscall sub_8E84F0(_BYTE *this, int a2, int a3, int a4); void __thiscall sub_8E8660(_DWORD *this); signed int __thiscall sub_8E86E0(void *this, int a2, _DWORD *a3); unsigned int __thiscall sub_8E8750(void *this, int a2, int a3); // void __noreturn std::vector>::_Xlen(); weak int __cdecl sub_8E88C0(void *, int, int, int); // idb void **__thiscall sub_8E89B0(void *this, char a2); _DWORD *__thiscall sub_8E8A40(_DWORD *this, int a2); int __thiscall sub_8E8B90(_DWORD *this); _DWORD *__thiscall sub_8E8C60(struct std::ios_base *this, char a2); char __thiscall sub_8E8CC0(_DWORD *this, char *a2, int a3, int a4); char __thiscall sub_8E92D0(char *this, unsigned int a2, _DWORD *a3); char __fastcall sub_8E9570(int a1, int a2, int a3, char *a4); char __thiscall sub_8EAC20(_BYTE *this); char __thiscall sub_8EAC30(_BYTE *this, char a2); _DWORD *__thiscall sub_8EAC60(_DWORD *this, char a2, int a3); void *sub_8EACA0(); char __thiscall sub_8EACB0(_DWORD *this, rsize_t a2, int a3); // void __usercall sub_8EACF0(_DWORD *a1@, int a2@); char __thiscall sub_8EADF0(_BYTE *this, void *a2, volatile LONG *a3); void __thiscall sub_8EAFD0(_DWORD **this); char __thiscall sub_8EB060(int this, int a2); LONG __thiscall sub_8EB290(_DWORD *this, int a2, LONG a3); _DWORD *__thiscall sub_8EB3D0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8EB440(_DWORD *this); void *sub_8EB4F0(); LONG __thiscall sub_8EB500(_DWORD *this); void *__thiscall sub_8EB640(void *this, char a2); LONG __thiscall sub_8EB670(_DWORD *this); void *sub_8EB7A0(); void **sub_8EB7B0(); void *__thiscall sub_8EB7C0(char *this, char a2); int __thiscall sub_8EB7D0(_DWORD *this, void *a2, int a3); void *__thiscall sub_8EB930(void *this, char a2); bool __cdecl sub_8EB960(LPCSTR lpFileName, LPCSTR lpAppName, LPCSTR lpKeyName, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpDefault); bool __cdecl sub_8EB9D0(char *a1); char __thiscall sub_8EB9F0(_DWORD *this, int a2); // void __userpurge sub_8EBA20(int a1@, int a2@, int a3); int __cdecl sub_8EBBE0(const void *, const void *); // idb char __thiscall sub_8EBC10(signed int *this); char __thiscall sub_8EBD30(signed int *this); char __stdcall sub_8EBE10(float a1); char __stdcall sub_8EBE40(float a1); int __thiscall sub_8EBE70(void *this, int a2); double sub_8EBE90(); double sub_8EBEA0(); double sub_8EBEB0(); int sub_8EBEC0(); double sub_8EBED0(); int __thiscall sub_8EBEE0(void *this); char __thiscall sub_8EBEF0(signed int *this, float a2); char __thiscall sub_8EC510(signed int *this, float a2); int sub_8EC530(); float *sub_8EC540(); int sub_8EC550(); unsigned int *sub_8EC560(); void *__thiscall sub_8EC570(void *this, char a2); void *__thiscall sub_8EC5A0(void *this, char a2); int __thiscall sub_8EC5D0(int this, int a2); int __thiscall sub_8EC600(_DWORD *this, int a2, float a3); void *__thiscall sub_8EC640(void *this, char a2); int __thiscall sub_8EC670(_DWORD *this, int a2, int a3); char __thiscall sub_8EC6B0(_BYTE *this, void *a2, volatile LONG *a3); char __thiscall sub_8EC970(_DWORD *this, rsize_t a2, int a3); char __thiscall sub_8ECA00(int this, int a2, int a3); char __thiscall sub_8ECAF0(void *this, float a2); void sub_8ECB30(); LONG __thiscall sub_8ECD10(_DWORD *this); void *sub_8ECDE0(); void **sub_8ECDF0(); void *__thiscall sub_8ECE00(char *this, char a2); int __thiscall sub_8ECE10(_DWORD *this, void *a2, int a3); void *__thiscall sub_8ECF30(void *this, char a2); char __thiscall sub_8ECF60(_BYTE *this, char a2); char __thiscall sub_8ECF70(_DWORD *this, rsize_t a2, int a3); void __thiscall sub_8ECFE0(_DWORD **this); int __thiscall sub_8ED010(void *this); char __thiscall sub_8ED020(_BYTE *this, void *a2, volatile LONG *a3); void __thiscall sub_8ED230(void **this, int a2); void *__thiscall sub_8ED3F0(void *this, char a2); void sub_8ED420(); LONG __thiscall sub_8ED4D0(_DWORD *this); void *sub_8ED580(); char __thiscall sub_8ED590(_BYTE *this); void **sub_8ED5A0(); void *__thiscall sub_8ED5B0(char *this, char a2); _DWORD *__thiscall sub_8ED5C0(void *this, char a2); int __thiscall sub_8ED610(_DWORD *this, void *a2, int a3); void *__thiscall sub_8ED710(void *this, char a2); void __thiscall sub_8ED740(_BYTE *this, int a2); bool __thiscall sub_8ED7A0(_DWORD *this, rsize_t a2, int a3); void __thiscall sub_8ED800(_DWORD *this); void *__thiscall sub_8ED8B0(void *this, char a2); void sub_8ED8E0(); LONG __thiscall sub_8ED940(_DWORD *this); void *sub_8EDAE0(); void **sub_8EDAF0(); void *__thiscall sub_8EDB00(char *this, char a2); int __thiscall sub_8EDB10(_DWORD *this, void *a2, int a3); void *__thiscall sub_8EDC20(void *this, char a2); char __thiscall sub_8EDC50(_BYTE *this, void *a2, volatile LONG *a3); int __thiscall sub_8EDFE0(_BYTE *this); void __thiscall sub_8EE000(_DWORD *this); char __thiscall sub_8EE030(void **this, int a2); char __thiscall sub_8EE120(_BYTE *this, void *a2, volatile LONG *a3); char __thiscall sub_8EE560(_DWORD *this, volatile LONG *a2); char __thiscall sub_8EE9D0(_DWORD *this, rsize_t a2, int a3); // char __userpurge sub_8EEB40@(_DWORD *a1@, int a2@, int a3@, volatile LONG *a4); LONG __thiscall sub_8EEC30(void **this); void *sub_8EED20(); void *__thiscall sub_8EED30(void *this, char a2); int __thiscall sub_8EED60(_DWORD *this, void *a2, int a3, int a4); void __thiscall sub_8EEE30(int this, void *a2); int __stdcall sub_8EEE60(int a1, int a2, int a3, int a4); _DWORD *__thiscall sub_8EEE70(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_8EEEE0(_DWORD *this); _DWORD *__thiscall sub_8EEF60(void *this); _DWORD *__stdcall sub_8EEFC0(int a1, _DWORD *a2); _DWORD *__thiscall sub_8EF040(void *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_8EF0D0(void *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_8EF160(void *this); _DWORD *__stdcall sub_8EF1C0(int a1, _DWORD *a2); _DWORD *__thiscall sub_8EF240(void *this, _DWORD *a2); _DWORD *__thiscall sub_8EF2C0(_DWORD *this); void *__thiscall sub_8EF3F0(void *this, char a2); void __thiscall sub_8EF420(void *this); char __thiscall sub_8EF530(_BYTE *this); _DWORD *__thiscall sub_8EF550(_DWORD *this); int __thiscall sub_8EF6C0(_DWORD *this, int a2); bool __thiscall sub_8EF700(_DWORD *this, int a2); _DWORD *__thiscall sub_8EF770(_DWORD *this, int a2); int __thiscall sub_8EF810(_DWORD *this, int a2); _DWORD *__thiscall sub_8EF890(_DWORD *this, int a2); int __thiscall sub_8EF930(_DWORD *this, int a2); int __thiscall sub_8EF9B0(_DWORD *this, int a2); int __thiscall sub_8EF9E0(_DWORD *this, int a2); int __thiscall sub_8EFA10(_DWORD *this, int a2); bool __thiscall sub_8EFA40(_DWORD *this, int a2, int a3); char __thiscall sub_8EFA90(_DWORD *this, int a2); char __thiscall sub_8EFAE0(_DWORD *this, int a2); char __thiscall sub_8EFB40(_DWORD *this, int a2, int a3); char __thiscall sub_8EFB80(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_8EFBD0(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_8EFC40(_DWORD *this, int a2); char __thiscall sub_8EFCA0(_DWORD *this, int a2, int *a3); int __thiscall sub_8EFD30(_DWORD *this); void __stdcall sub_8EFE50(int a1, int a2, int a3); _DWORD *__thiscall sub_8EFE60(_DWORD *this, float a2); int __thiscall sub_8EFED0(_DWORD *this); _DWORD *__thiscall sub_8EFFA0(_DWORD **this, _DWORD *a2); _DWORD *__thiscall sub_8EFFC0(_DWORD **this, _DWORD *a2); int __thiscall sub_8F0010(_DWORD *this, int a2); char __thiscall sub_8F0080(_DWORD *this, int a2, int a3); int __thiscall sub_8F00A0(int this, int a2); _DWORD *__thiscall sub_8F00C0(_DWORD *this, int a2); char __thiscall sub_8F0140(_DWORD *this, int a2, _DWORD *a3); unsigned int __thiscall sub_8F01C0(_DWORD *this, unsigned int a2, _DWORD *a3, _DWORD *a4); int __thiscall sub_8F0270(_DWORD *this, _DWORD **a2); _DWORD *__thiscall sub_8F0330(_DWORD *this, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_8F0420(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8F04E0(_DWORD **this, char a2, int a3, int a4, int a5, int a6, int a7); _DWORD *__thiscall sub_8F05A0(_DWORD *this, _DWORD *a2); int __thiscall sub_8F0670(_DWORD *this); int __thiscall sub_8F06D0(_DWORD *this); int __thiscall sub_8F0750(void **this, void *a2); int __thiscall sub_8F08F0(void **this, int a2); _DWORD *__thiscall sub_8F0BA0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8F0C00(_DWORD *this, int a2); int __thiscall sub_8F0CE0(_DWORD *this, unsigned int a2); bool __stdcall sub_8F0D00(int a1, int a2); void __thiscall sub_8F0D20(_DWORD *this); void __thiscall sub_8F0DA0(_DWORD *this); int *sub_8F0DE0(); int __thiscall sub_8F0E00(_DWORD *this); void **__thiscall sub_8F0E80(void **this, char a2); void *__thiscall sub_8F0ED0(_DWORD *this, char a2); _DWORD *__thiscall sub_8F0F00(_DWORD *this, char a2); // int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); weak void *__thiscall sub_8F10C0(_DWORD *this, char a2); LONG __thiscall sub_8F10F0(_DWORD *this); _DWORD *__thiscall sub_8F1120(_DWORD *this, int a2); int __thiscall sub_8F1140(void *this, _BYTE *a2); char __thiscall sub_8F1440(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8); char __thiscall sub_8F14B0(void *this, int a2, int a3, int *a4, char a5, unsigned int a6, unsigned int a7, unsigned int a8, unsigned int a9, int a10, int a11, int a12, int a13); char __thiscall sub_8F15E0(volatile LONG **this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7); char __thiscall sub_8F1690(_BYTE *this); char __thiscall sub_8F16B0(_BYTE *this); char __thiscall sub_8F16D0(_BYTE *this); char __thiscall sub_8F16F0(_BYTE *this); int __thiscall sub_8F1710(_DWORD *this); int __thiscall sub_8F1750(_BYTE *this, int a2, int a3); int __thiscall sub_8F1CC0(_DWORD **this, int a2, int a3, int a4); int __thiscall sub_8F1D40(_DWORD **this, int a2, int a3, int a4); volatile LONG *__cdecl sub_8F1D90(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_8F1EF0(_DWORD *this, _BYTE *a2); int __thiscall sub_8F2680(_DWORD *this, unsigned __int8 a2); _DWORD *__thiscall sub_8F2740(_DWORD *this); void **__thiscall sub_8F2850(void **this, char a2); _BYTE *__thiscall sub_8F2880(_BYTE *this, char a2); char __thiscall sub_8F28A0(_DWORD *this); int __thiscall sub_8F28C0(_BYTE *this); int __thiscall sub_8F28E0(_BYTE *this); char __thiscall sub_8F2900(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8); LONG __thiscall sub_8F29C0(void **this); int __thiscall sub_8F2A80(void *this, int a2, int a3, int a4); char __stdcall sub_8F2BC0(volatile LONG *a1, int a2, int a3, int a4); char __stdcall sub_8F2C30(volatile LONG *a1, int a2, int a3, int a4); char __stdcall sub_8F2C80(volatile LONG *a1, int a2, int a3); unsigned int __thiscall sub_8F2CF0(_DWORD *this, int a2); int __thiscall sub_8F2E50(_DWORD *this, unsigned int a2); void __thiscall sub_8F2EA0(void **this, const char *a2); int __thiscall sub_8F2F90(int this); int __thiscall sub_8F3080(_DWORD **this); unsigned int __thiscall sub_8F3180(_DWORD *this, int a2, int a3, int a4); int __thiscall sub_8F32D0(_DWORD *this, int a2, int a3, int a4); unsigned int __thiscall sub_8F3330(_DWORD *this); int __thiscall sub_8F3410(void *this); char __thiscall sub_8F3420(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_8F3480(_BYTE *this, int a2, int a3, int a4); char __thiscall sub_8F3540(_DWORD *this); bool __thiscall sub_8F3590(_DWORD *this); bool __thiscall sub_8F3600(_DWORD *this); _DWORD *__thiscall sub_8F3660(_DWORD *this); int __thiscall sub_8F36B0(_DWORD *this); int __thiscall sub_8F36E0(_DWORD *this, int *a2); int __thiscall sub_8F37B0(_DWORD *this, _DWORD *a2); char *__thiscall sub_8F3870(_DWORD *this); BOOL __thiscall sub_8F3B60(_DWORD *this); void *__thiscall sub_8F3BF0(_DWORD *this, char a2); _DWORD *__thiscall sub_8F3C20(_DWORD *this); void *__thiscall sub_8F3C90(void *this, char a2); LONG __thiscall sub_8F3CC0(void *this); volatile LONG *__cdecl sub_8F3D50(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); volatile LONG *__cdecl sub_8F3EB0(int a1, int a2, int a3, int a4, int a5, int a6); volatile LONG *__cdecl sub_8F4010(int a1, int a2, int a3, unsigned __int8 a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); volatile LONG *__cdecl sub_8F4180(int a1, int a2, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_8F42E0(void *this, int *a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6, int a7, int a8, int a9); char __thiscall sub_8F43D0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7); char __thiscall sub_8F4530(void *this, int a2, int a3, int *a4, char a5, unsigned int a6, unsigned int a7, unsigned int a8, unsigned int a9, int a10, int a11, int a12); bool __thiscall sub_8F4630(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8); char __thiscall sub_8F4670(_DWORD *this, unsigned int a2); int __thiscall sub_8F47B0(_DWORD *this); _DWORD *__thiscall sub_8F4870(_DWORD *this); void *__thiscall sub_8F4960(void *this, char a2); LONG __thiscall sub_8F4990(void *this); volatile LONG *__cdecl sub_8F4A20(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_8F4B80(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9); int __cdecl sub_8F4CF0(int, int, LPCSTR lpString); // idb void __thiscall sub_8F4FA0(int *this, float a2); void __thiscall sub_8F4FD0(float **this); char __thiscall sub_8F5000(_DWORD *this, LPSIZE psizl); int __thiscall sub_8F5100(_DWORD *this, int a2); int __thiscall sub_8F5170(_DWORD *this, int a2); void __thiscall sub_8F51E0(_DWORD **this, void *a2, int a3); _BYTE **__cdecl sub_8F56D0(_BYTE **a1); int __cdecl sub_8F5700(int, LPCSTR lpString, HDC hdc, int); // idb _DWORD *__cdecl sub_8F5910(_DWORD *a1, int a2); int __cdecl sub_8F5A30(_DWORD *a1, int a2); void __cdecl sub_8F5B50(_DWORD *a1, int a2); char __cdecl sub_8F5CC0(_DWORD *a1, _DWORD *a2); _WORD *__cdecl sub_8F5E10(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6); _WORD *__cdecl sub_8F61B0(unsigned int a1, unsigned int a2); _DWORD *__cdecl sub_8F62B0(char a1, char a2, char a3, char a4); _DWORD *__cdecl sub_8F63D0(char *Src, int a2); char __cdecl sub_8F66B0(char *Src, int a2, int a3); void __cdecl sub_8F6920(int a1, char a2); _WORD *__cdecl sub_8F6A70(int a1, int a2, int a3, int a4, int a5, float a6, float a7); char __cdecl sub_8F71E0(int a1, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6); char __cdecl sub_8F73A0(_DWORD *a1, _DWORD *a2); char __cdecl sub_8F74F0(int a1, float a2, float a3, int a4, int a5, int a6, int a7); int __cdecl sub_8F7610(int a1); _DWORD *__thiscall sub_8F7640(_DWORD *this, int a2); void *__thiscall sub_8F7670(_DWORD *this, char a2); void __thiscall sub_8F76A0(_DWORD *this); int __thiscall sub_8F76C0(_DWORD *this, int a2, _BYTE *a3, int a4); int __thiscall sub_8F7740(void *this, int a2); float *__thiscall sub_8F7760(float *this); void *__thiscall sub_8F7A60(_DWORD *this, char a2); _DWORD *__thiscall sub_8F7A90(_DWORD *this, char a2); _DWORD *__thiscall sub_8F7B10(_DWORD *this); void __thiscall sub_8F7B50(_DWORD *this); char __thiscall sub_8F7DA0(volatile LONG **this); LONG __thiscall sub_8F7FE0(volatile LONG **this); char __thiscall sub_8F81A0(_DWORD *this, _DWORD *a2); int __thiscall sub_8F8280(_DWORD *this); char __thiscall sub_8F82A0(_DWORD *this, _DWORD *a2); char __thiscall sub_8F85E0(_DWORD *this, _DWORD *a2); char __thiscall sub_8F8610(_DWORD *this, _DWORD *a2); void __stdcall sub_8F8640(_DWORD *a1); char __thiscall sub_8F86A0(_DWORD *this, _DWORD *a2); char __thiscall sub_8F88C0(_DWORD *this); void __thiscall sub_8F8920(void *this, int a2); volatile LONG **__thiscall sub_8F89B0(_DWORD *this); int __thiscall sub_8F8A80(_DWORD *this, int a2, int a3); char __thiscall sub_8F8AE0(_DWORD *this, char a2); int __thiscall sub_8F98A0(_DWORD *this, float a2); void __thiscall sub_8F9950(_DWORD **this, int a2); char __thiscall sub_8F9D50(_DWORD *this, volatile LONG *a2, int a3, int a4, int a5); _DWORD *__thiscall sub_8F9E00(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8F9F80(_DWORD *this); void __thiscall sub_8FA050(_DWORD *this, int a2, _DWORD *a3); char __thiscall sub_8FA190(_DWORD *this, int a2); int __thiscall sub_8FA210(_DWORD *this, float a2); void __thiscall sub_8FA270(void *this, float a2, int a3); int __thiscall sub_8FA390(_DWORD *this, float a2); bool __thiscall sub_8FA3D0(_DWORD *this, volatile LONG *a2); int __thiscall sub_8FA4A0(_DWORD *this, char a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8); _DWORD *__thiscall sub_8FA600(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8FA6F0(_DWORD *this, int a2); void __thiscall sub_8FA750(void **this); int __thiscall sub_8FA780(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_8FA7F0(_DWORD *this, _DWORD *a2); int __thiscall sub_8FA850(_DWORD *this, unsigned int a2); char __thiscall sub_8FA8D0(_DWORD *this, int a2); _DWORD *__thiscall sub_8FA9A0(_DWORD *this); _DWORD *__thiscall sub_8FA9C0(_DWORD *this); void __stdcall sub_8FAA20(_DWORD *a1); _DWORD *__thiscall sub_8FAA90(_DWORD *this); _DWORD *__thiscall sub_8FAB10(_DWORD *this, int a2, _DWORD *a3); void *__thiscall sub_8FAB90(_DWORD *this, char a2); _DWORD *__thiscall sub_8FABC0(_DWORD *this, char a2); _DWORD *__cdecl sub_8FAC60(int *a1, char a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6); _DWORD *__cdecl sub_8FAEE0(int *a1, char a2, unsigned int *a3, unsigned int a4); volatile LONG **__cdecl sub_8FB140(int a1, int a2, int a3, int a4, volatile LONG *a5); LONG __thiscall sub_8FB400(volatile LONG **this, volatile LONG *a2); volatile LONG *__thiscall sub_8FB460(_DWORD *this, int a2, unsigned int a3, unsigned int a4, int a5, int a6, char a7); char __thiscall sub_8FB650(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8FB880(_DWORD *this); void *__thiscall sub_8FB960(_DWORD *this, char a2); LONG __thiscall sub_8FB990(_DWORD *this); int __thiscall sub_8FBAD0(_DWORD *this, int a2); int __thiscall sub_8FBB30(_DWORD *this, int a2); char __thiscall sub_8FBB90(_DWORD *this, int a2, unsigned int a3, char a4); char __thiscall sub_8FBD30(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_8FBD50(_DWORD *this, int a2, unsigned int a3, char a4); char __thiscall sub_8FBEF0(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_8FBF10(_DWORD *this, int a2); char __thiscall sub_8FBF50(_DWORD *this, int a2); char __thiscall sub_8FBF90(_DWORD *this, int a2, unsigned int a3, char a4); char __thiscall sub_8FC170(_DWORD *this, int a2, unsigned int a3, char a4); _BYTE *__cdecl sub_8FC350(int a1, int a2, int a3, unsigned int a4, unsigned int a5); float *__cdecl sub_8FC470(int a1, char a2, int a3, int a4, unsigned int a5, unsigned int a6); float *__cdecl sub_8FC650(int a1, char a2, int a3, unsigned int a4); _DWORD *__thiscall sub_8FC6F0(_DWORD *this, _DWORD *a2); void *__thiscall sub_8FCB50(_DWORD *this, char a2); LONG __thiscall sub_8FCB80(_DWORD *this); LONG __thiscall sub_8FCC40(void *this, int a2); int __thiscall sub_8FCD30(_DWORD *this); _DWORD *__thiscall sub_8FCD60(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8FCE80(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_8FCFA0(_DWORD *this, int a2, int a3); volatile LONG *__thiscall sub_8FD0C0(volatile LONG *this, unsigned int a2, volatile LONG **a3); volatile LONG **__thiscall sub_8FD2D0(_DWORD *this, unsigned int a2); volatile LONG *__thiscall sub_8FD6E0(_DWORD *this, volatile LONG *a2); _DWORD *__thiscall sub_8FD7A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7); _DWORD *__thiscall sub_8FD8A0(void *this, char a2); volatile LONG **__thiscall sub_8FD900(_DWORD *this); volatile LONG **__thiscall sub_8FD950(_DWORD *this); unsigned int __thiscall sub_8FD9A0(volatile LONG *this, volatile LONG **a2); void *__thiscall sub_8FDA10(_DWORD *this, char a2); void *__thiscall sub_8FDA70(_DWORD *this, char a2); int __thiscall sub_8FDAD0(volatile LONG **this, char a2); void *__thiscall sub_8FDB50(_DWORD *this, char a2); char *__thiscall sub_8FDBB0(_DWORD *this, unsigned int a2); void __thiscall sub_8FDFC0(void *); // idb _DWORD *__thiscall sub_8FE000(_DWORD *this); void *__thiscall sub_8FE090(_DWORD *this, char a2); LONG __thiscall sub_8FE0C0(_DWORD *this); volatile LONG *__cdecl sub_8FE0F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); volatile LONG *__cdecl sub_8FE250(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_8FE3B0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8); char __thiscall sub_8FE430(void *this, int a2, int a3, int *a4, char a5, unsigned int *a6, unsigned int a7, int a8, int a9); char __thiscall sub_8FE550(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8, int a9); int __thiscall sub_8FE5D0(void *this, _BYTE *a2); int __thiscall sub_8FE8E0(void *this); char __thiscall sub_8FE900(_DWORD *this, int a2); int __thiscall sub_8FE970(_DWORD *this); // int __thiscall std::_Vector_val>::_Vector_val>(_DWORD); weak void __thiscall sub_8FE9F0(void **this); _DWORD *__thiscall sub_8FEA20(_DWORD *this, int a2); _DWORD *__thiscall sub_8FEA90(_DWORD *this, char a2); int __thiscall sub_8FEB10(_DWORD *this); _DWORD *__thiscall sub_8FEC40(_DWORD *this); _DWORD *__thiscall sub_8FECA0(int *this); int __thiscall sub_8FED40(int *this); int __thiscall sub_8FEDF0(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_8FF140(_DWORD *this); void __thiscall sub_8FF2B0(_DWORD *this); int __thiscall sub_8FF370(_DWORD *this, int a2, int a3); bool __thiscall sub_8FF3C0(_DWORD *this, int a2, int a3); int __thiscall sub_8FF550(_DWORD *this, int a2, LPCSTR lpString, int x); int __fastcall sub_8FF610(int a1, int a2, int a3, LPCSTR lpString, UINT c, int a6); void __thiscall sub_8FF950(_DWORD *this, int a2, LPCSTR lpString, UINT c, int a5, int x); _DWORD *__thiscall sub_8FFDB0(_DWORD *this); int __thiscall sub_8FFF30(_DWORD *this, LPCSTR lpString, int a3, int x); _DWORD *__thiscall sub_8FFFC0(_DWORD *this); void *__thiscall sub_900130(_DWORD *this, char a2); LONG __thiscall sub_900160(_DWORD *this); _DWORD *__thiscall sub_900330(_DWORD *this); char __thiscall sub_900390(int this, LPCSTR pszFaceName, int a3, int cWidth, int cWeight, DWORD bItalic, DWORD iCharSet, DWORD iOutPrecision, DWORD iQuality, DWORD iPitchAndFamily, int a11, int a12, int a13); int __thiscall sub_900630(_DWORD *this, LPCSTR lpString, int a3); int __cdecl sub_9006F0(int a1, int a2, int a3); char *__thiscall sub_900720(_DWORD *this, char *a2, int a3, char a4); int __thiscall sub_900990(_DWORD *this, int a2, signed int a3, _DWORD *a4, char *a5, int *a6, char a7, char a8, int a9, int a10, char a11, int a12); int __thiscall sub_9026A0(_DWORD *this); _DWORD *__thiscall sub_9026C0(_DWORD *this, int a2); int __thiscall sub_902700(_DWORD *this, char a2); int __thiscall sub_902730(_DWORD *this); char __thiscall sub_902790(_DWORD *this, char *a2, int a3, _DWORD *a4, int a5, char a6, char a7, _DWORD *a8); char __thiscall sub_902D30(_DWORD *this, const char *a2, int a3, int *a4, int a5, char a6, char a7, _DWORD *a8, char a9); char __thiscall sub_903230(_DWORD *this, const char *a2, int a3, int *a4, int a5, _DWORD *a6); int __thiscall sub_903330(_DWORD *this, int a2, int a3, int a4, char *a5, int a6, int a7, int a8, int a9, size_t a10, int a11, char a12, int a13, int a14, int a15, int a16); char __thiscall sub_904750(_DWORD *this, int a2, int a3, int a4, int a5, char *a6, int a7, size_t a8, int a9, char a10, int a11, int a12, int a13, int a14); char __thiscall sub_905290(_DWORD *this, CHAR *a2, int a3); _DWORD *__thiscall sub_905430(_DWORD *this, int a2); int __thiscall sub_9054B0(_DWORD *this, unsigned __int16 a2, int a3); char __thiscall sub_9055B0(_DWORD *this, unsigned __int16 a2, _DWORD *a3); int __thiscall sub_905630(_DWORD *this, int *a2); _DWORD *__thiscall sub_9056C0(_DWORD *this, _DWORD *a2); int __thiscall sub_905700(_DWORD *this, _DWORD **a2); _DWORD *__thiscall sub_9057C0(_DWORD *this); unsigned int __thiscall sub_9057E0(_DWORD *this, unsigned __int16 a2); bool __stdcall sub_905800(__int16 a1, __int16 a2); int __stdcall sub_905820(int a1, __int16 a2, int a3); void __thiscall sub_905850(_DWORD *this); void __thiscall sub_9058D0(_DWORD *this); _DWORD *sub_905910(); void __stdcall sub_905940(_DWORD *a1); _DWORD *__thiscall sub_905970(_DWORD *this); void *__thiscall sub_905990(_DWORD *this, char a2); void **__thiscall sub_9059C0(void **this, char a2); void *__thiscall sub_905A10(_DWORD *this, char a2); void *__thiscall sub_905A40(_DWORD *this, char a2); _DWORD *__thiscall sub_905A70(_DWORD *this, char a2); _DWORD *__thiscall sub_905AF0(_DWORD *this); bool sub_905B90(); int sub_905BD0(); _DWORD *__thiscall sub_905BE0(_DWORD *this); void *__thiscall sub_905D00(_DWORD *this, char a2); LONG __thiscall sub_905D30(_DWORD *this); char *__thiscall sub_905DE0(char *this, char *a2); _DWORD *__thiscall sub_905E10(_DWORD *this, int a2); _DWORD *__thiscall sub_905E30(_DWORD *this); char __thiscall sub_905E50(int this); char __thiscall sub_905ED0(int this, char a2, char a3, char a4, char a5, u_short a6); int __thiscall sub_905F40(int this); char __thiscall sub_905F90(int this, void *a2, size_t a3); char __thiscall sub_906000(int this, void *a2, size_t a3); char __thiscall sub_9060A0(int this); _BYTE *__thiscall sub_906120(_BYTE *this, int a2, unsigned int a3); _BYTE *__thiscall sub_906240(_BYTE *this); _BYTE *__thiscall sub_906260(_BYTE *this); float *__thiscall sub_906280(float *this, float a2); int __thiscall sub_9062B0(int this); char __stdcall sub_906320(int a1, int a2, int a3, int a4); int __thiscall sub_906340(_DWORD *this); int __thiscall sub_906380(_DWORD *this); _BYTE *__thiscall sub_9063C0(_BYTE *this, char a2); _DWORD *__thiscall sub_9063E0(_DWORD *this); void *__thiscall sub_906400(_DWORD *this, char a2); LONG __thiscall sub_906430(_DWORD *this); char __thiscall sub_906450(_DWORD *this, const char *a2, int a3, int *a4, int a5, char a6, char a7, _DWORD *a8, char a9); _BYTE *__thiscall sub_906490(_BYTE *this, char a2); int __thiscall sub_9064B0(int this, int a2); void **__thiscall sub_906890(void **this, int a2); void *__thiscall sub_906940(void *this, char a2); LONG __thiscall sub_906970(void *this); void __thiscall sub_9069B0(void **this, _DWORD *a2); _DWORD *__thiscall sub_906A30(_DWORD *this, const char *a2); void *__thiscall sub_906C20(_DWORD **this, char a2); LONG __thiscall sub_906C50(_DWORD **this); int __thiscall sub_906D40(char *this, char a2); void __thiscall sub_906DB0(float *this, float a2, char a3); void __thiscall sub_906E20(_DWORD *this); void __thiscall sub_907140(int this, float *a2); float *__thiscall sub_9071D0(float *this, float *a2); void __thiscall sub_907230(int this, float a2); double __thiscall sub_907270(float *this); int __thiscall sub_907290(_DWORD **this, volatile LONG *a2); int __thiscall sub_907360(void *this); int __thiscall sub_9074F0(int this, int a2); _DWORD *__thiscall sub_907530(_DWORD *this, _DWORD *a2); _BYTE *__thiscall sub_9075B0(_BYTE *this, char a2); int __thiscall sub_907630(void *this, int a2, int a3, int a4, int a5); int __cdecl sub_907680(int a1); int sub_907690(); _DWORD *__thiscall sub_9076A0(_DWORD *this, int a2); BOOL __thiscall sub_9076C0(_DWORD **this, int a2, int a3, int a4, char *a5, int a6, int a7, int a8, int a9, size_t a10, int a11, char a12, int a13, int a14, int a15, int a16); void __thiscall sub_907730(void *); // idb void __thiscall sub_9077F0(void *); // idb char __thiscall sub_907890(char **this, const char *a2); int __thiscall sub_907970(char **this, const char *a2); void __thiscall sub_907A70(void *); // idb _DWORD *__thiscall sub_907A90(_DWORD *this); void *__thiscall sub_907AD0(_DWORD *this, char a2); LONG __thiscall sub_907B00(_DWORD *this); volatile LONG *__cdecl sub_907B30(int a1, int a2, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_907C90(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7); char __thiscall sub_907CE0(void *this, int a2, int a3, int *a4, char a5, unsigned int *a6, unsigned int a7, int a8, int a9, int a10); char __thiscall sub_907E00(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8); int __thiscall sub_907E60(void *this, _BYTE *a2); LONG __thiscall sub_908140(volatile LONG **this); LONG sub_908220(); char __thiscall sub_9082C0(int this); void *__cdecl sub_9085B0(int a1); int __cdecl sub_908600(int a1, int a2, int a3, int a4, int a5); int __thiscall sub_908680(_DWORD *this, int a2); char __thiscall sub_908750(volatile LONG **this, int a2); int __cdecl sub_908E70(int a1, volatile LONG **a2, int a3, int a4, volatile LONG *a5); int __stdcall sub_909060(int a1); int __thiscall sub_909350(_DWORD *this); _DWORD *__thiscall sub_909380(_DWORD *this, int a2); void *sub_9093A0(); _DWORD *__thiscall sub_9093B0(_DWORD *this, int a2); volatile LONG **__thiscall sub_909430(volatile LONG **this, char a2); char __cdecl sub_909460(char a1); char __cdecl sub_909470(char a1); _DWORD *__thiscall sub_909480(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_9094F0(_DWORD *this); int __thiscall sub_909590(int this); int __cdecl sub_909600(int a1); _DWORD *__thiscall sub_909660(_DWORD *this, int a2); int __thiscall sub_909710(_DWORD *this); int __thiscall sub_909780(void **this, void *a2); _DWORD *__thiscall sub_9098C0(_DWORD *this, int a2); _DWORD *__cdecl sub_909920(int a1); float *__thiscall sub_909CB0(float *this); volatile LONG **__thiscall sub_909D60(volatile LONG **this, char a2); LONG __thiscall sub_909D90(volatile LONG **this); volatile LONG *__cdecl sub_909ED0(int a1, int a2, int a3, int a4, float a5, float a6, int a7); char __thiscall sub_90A030(float *this, int a2, int a3, int a4, int a5, float a6, float a7, int a8); signed int __cdecl sub_90A3C0(int a1, unsigned int a2, char a3, char a4); void __thiscall sub_90A550(int this); _DWORD *__thiscall sub_90AD70(_DWORD *this); void *__thiscall sub_90AE30(_DWORD *this, char a2); LONG __thiscall sub_90AE60(_DWORD *this); volatile LONG *__cdecl sub_90AEF0(int a1, int a2, int a3, int a4, volatile LONG *a5, _DWORD *a6, int a7, int a8, volatile LONG *a9, char a10, volatile LONG *a11, volatile LONG *a12); char __thiscall sub_90B060(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9, volatile LONG *a10, char a11, volatile LONG *a12, volatile LONG *a13); void __thiscall sub_90B220(void **this, void *a2); int __stdcall sub_90B3F0(const char *a1); void __stdcall sub_90B490(const char *a1, char *a2, signed int a3); char __thiscall sub_90BC50(void **this, LPCSTR a2, int a3, int a4, char *a5); int __thiscall sub_90C520(_BYTE *this, _BYTE *a2); int __stdcall sub_90C6C0(char *a1, const char *a2, int a3); int __thiscall sub_90C800(_DWORD *this); _DWORD *__thiscall sub_90C840(_DWORD *this); void *__thiscall sub_90C870(_DWORD *this, char a2); LONG __thiscall sub_90C8A0(_DWORD *this); volatile LONG *__cdecl sub_90C8D0(int a1, int a2, int a3, int a4); char __thiscall sub_90CA30(_DWORD *this); float *__thiscall sub_90CA60(float *this); void *__thiscall sub_90CAC0(_DWORD *this, char a2); LONG __thiscall sub_90CAF0(_DWORD *this); volatile LONG *__cdecl sub_90CB20(int a1, int a2, int a3, int a4, int a5); volatile LONG *__cdecl sub_90CC80(int a1, int a2, int a3, unsigned __int8 a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); _DWORD *__thiscall sub_90CE00(_DWORD *this); void *__thiscall sub_90CE30(_DWORD *this, char a2); LONG __thiscall sub_90CE60(_DWORD *this); volatile LONG *__cdecl sub_90CE90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_90CFF0(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9); int __thiscall sub_90D160(void *this, int a2, int a3); char __thiscall sub_90D1A0(_DWORD *this, int a2, int a3); int __thiscall sub_90D1E0(void *this, int a2, int a3); _BYTE *__fastcall sub_90D230(int a1, int a2, char a3); char __thiscall sub_90D2D0(_DWORD *this); _DWORD *__cdecl sub_90D360(int a1, int a2, int a3, int a4, int a5, char a6, int a7, int a8); char __thiscall sub_90D470(void *this, unsigned int a2, int a3, int a4); LRESULT __thiscall sub_90DB00(int this, WPARAM wParam); char __thiscall sub_90DC10(void *this); char __thiscall sub_90DCF0(_DWORD *this); char __thiscall sub_90DD90(void *this); _DWORD *__thiscall sub_90DE50(_DWORD *this); void *__thiscall sub_90DF30(_DWORD *this, char a2); LONG __thiscall sub_90DF60(_DWORD *this); char __thiscall sub_90E050(HWND *this, HINSTANCE hInstance, DWORD dwStyle, int a4, WPARAM wParam); ATOM sub_90E140(); LRESULT __stdcall sub_90E1B0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); int __thiscall sub_90E230(_DWORD *this); int __thiscall sub_90E3C0(HWND *this); LRESULT __thiscall sub_90E410(HWND *this, WPARAM wParam); int __thiscall sub_90E440(_DWORD *this, int a2, int a3); char __thiscall sub_90E540(_DWORD *this, int a2); HWND __thiscall sub_90E680(HWND *this); int __thiscall sub_90E6B0(int this); HWND *__thiscall sub_90E6F0(HWND *this, LPCSTR lpString); int __thiscall sub_90E740(void *this); int __thiscall sub_90E780(_DWORD *this, char *a2); int __thiscall sub_90E7E0(void *this); int __thiscall sub_90E800(void *this); _DWORD *__thiscall sub_90E850(_DWORD *this, int a2); char __thiscall sub_90E870(_BYTE *this); _BYTE *__thiscall sub_90E890(_BYTE *this, char a2); bool __thiscall sub_90E8B0(_DWORD *this); bool __thiscall sub_90E8D0(_DWORD *this); bool __thiscall sub_90E8F0(_DWORD *this); _DWORD *__thiscall sub_90E910(_DWORD *this, int a2); _DWORD *__thiscall sub_90E930(_DWORD *this); _DWORD *__thiscall sub_90E950(_DWORD *this, int a2); int __stdcall sub_90E9D0(int a1, int a2, int a3); // _DWORD __stdcall unknown_libname_38(_DWORD); weak void **__thiscall sub_90EA00(void **this, char a2); void *__thiscall sub_90EA50(_DWORD *this, char a2); void __thiscall sub_90EA80(_DWORD *this); void __thiscall sub_90EB00(_DWORD *this); _DWORD *__thiscall sub_90EB40(_DWORD *this); void *__thiscall sub_90EB70(_DWORD *this, char a2); LONG __thiscall sub_90EBA0(_DWORD *this); volatile LONG *__cdecl sub_90EBD0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_90ED30(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9); int __thiscall sub_90EEA0(_DWORD *this, volatile LONG *a2); void *__thiscall sub_90EFD0(void *this, char a2); LONG __thiscall sub_90F000(void *this); char __thiscall sub_90F080(char **this, char *a2); _DWORD *__thiscall sub_90F140(_DWORD *this); void *__thiscall sub_90F1C0(_DWORD *this, char a2); LONG __thiscall sub_90F1F0(_DWORD *this); _DWORD *__cdecl sub_90F250(int a1, int a2, int a3, int a4, int a5, char a6, int a7, int a8, unsigned __int8 a9); char __thiscall sub_90F360(int this, HINSTANCE hInstance, DWORD dwStyle, int a4, WPARAM wParam, char a6); char __thiscall sub_90F3E0(unsigned __int8 *this, unsigned int a2, int a3, int a4); char __thiscall sub_90F920(_BYTE *this); LONG __thiscall sub_90F970(HIMC *this); _DWORD *__thiscall sub_90F9B0(_DWORD *this); void *__thiscall sub_90F9E0(_DWORD *this, char a2); LONG __thiscall sub_90FA10(_DWORD *this); volatile LONG *__cdecl sub_90FA40(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_90FBA0(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9); int __thiscall sub_90FD10(_DWORD *this, int a2, HWND *a3); int __thiscall sub_90FDE0(_DWORD *this); int __thiscall sub_90FE70(_DWORD *this); bool sub_90FF00(); int sub_90FF50(); int __thiscall sub_90FF70(int this); void *__thiscall sub_90FFB0(void *this, char a2); BOOL __thiscall sub_90FFE0(void *this); BOOL __thiscall sub_910010(int this, int a2); char __thiscall sub_910050(HIMC *this, unsigned int a2, int a3, int a4); void __cdecl sub_9100F0(int a1, unsigned int a2); void sub_910290(); HIMC __thiscall sub_9102A0(int this, char a2, char a3); BOOL __thiscall sub_910310(char *this); void *__thiscall sub_910350(char *this); char __thiscall sub_9103A0(HIMC *this, int a2, __int16 a3); char __thiscall sub_9106A0(char *this, int a2, int a3); char __thiscall sub_9106C0(HIMC *this, int a2, int a3); void __cdecl sub_910710(int a1, int a2); char __thiscall sub_910880(char *this, int a2, int a3); struct tagCANDIDATELIST *__thiscall sub_9108A0(HIMC *this); int __thiscall sub_910AF0(int this); LONG __thiscall sub_910B60(HIMC *this); _DWORD *__thiscall sub_910B90(_DWORD *this); void *__thiscall sub_910C50(_DWORD *this, char a2); LONG __thiscall sub_910C80(_DWORD *this); volatile LONG *__cdecl sub_910CB0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_910E30(void *this, _BYTE *a2); int __thiscall sub_911090(_DWORD *this, int a2); _DWORD *__thiscall sub_911260(_DWORD *this); // float __userpurge sub_9117A0@(void *this@); // float __userpurge sub_9117C0@(float *this@); volatile LONG **__thiscall sub_9118E0(volatile LONG **this, char a2); LONG __thiscall sub_911910(volatile LONG **this); int sub_911A50(); BOOL __cdecl sub_911D10(LPSTR pszPath); _DWORD *__thiscall sub_911D40(_DWORD *this); void __thiscall sub_911D80(SOCKET *this); SOCKET *__thiscall sub_911DE0(SOCKET *this); int __thiscall sub_911F40(SOCKET *this); char __thiscall sub_912020(SOCKET *this, char *a2, int a3); char __thiscall sub_912070(SOCKET *this, char a2, char a3, char a4, char a5, u_short a6); int __thiscall sub_912350(_WORD *this, int a2, int a3); signed int __thiscall sub_912370(int this); char __thiscall sub_9123E0(_DWORD *this, void *a2, size_t a3); int __thiscall sub_912510(int this, void *a2); int __thiscall sub_912670(SOCKET *this, void *a2); __int16 __thiscall sub_912750(__int16 *this, unsigned __int16 a2); _DWORD *__thiscall sub_912780(_DWORD *this, volatile LONG *a2); void *__thiscall sub_9127B0(_DWORD *this, char a2); LONG __thiscall sub_9127E0(_DWORD *this); _BYTE *__thiscall sub_912800(_BYTE *this, char a2); char __thiscall sub_912820(_BYTE *this); _BYTE *__thiscall sub_912840(char **this, LPCSTR lpString); int __thiscall sub_912940(int this, _DWORD *a2); _DWORD *__thiscall sub_912AD0(_DWORD *this, volatile LONG *a2); void **__thiscall sub_912B20(void **this, char a2); LONG __thiscall sub_912B50(void **this); char __thiscall sub_912B90(char **this, const char *a2); int __thiscall sub_912CF0(_DWORD *this); float *__thiscall sub_912D10(float *this, volatile LONG *a2); void **__thiscall sub_912E80(void **this, char a2); LONG __thiscall sub_912EB0(void **this); char __thiscall sub_912F00(int this, const char *a2, const char *a3, int a4, int a5); int __thiscall sub_913270(int this); BOOL __thiscall sub_9132D0(_DWORD *this); void __thiscall sub_913640(int this, const char *a2); int __thiscall sub_913820(_DWORD *this); signed int __cdecl sub_913860(const char *a1); int __cdecl sub_9138A0(_BYTE *a1); int __cdecl sub_913950(const char *a1, const char *a2, char *a3); int __cdecl sub_913AF0(char *, int, int); // idb char __cdecl sub_913CA0(const char *a1, int a2, char *a3); char __cdecl sub_913DE0(char *a1, int a2, int a3, char a4); int __cdecl sub_913F30(int *a1, _DWORD *a2); int __cdecl sub_914F80(int *a1, _DWORD *a2); int *__cdecl sub_915FD0(int *a1, unsigned int *a2); // HRESULT __stdcall HlinkSimpleNavigateToString(LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *, DWORD grfHLNF, DWORD dwReserved); int __thiscall sub_916B55(LPCRITICAL_SECTION lpCriticalSection); // idb _DWORD *__thiscall sub_916B80(_DWORD *this); int __thiscall sub_916BBD(int this, int a2); BOOL __thiscall sub_916C5A(_BYTE *this); LPVOID __thiscall sub_916C75(HANDLE *this, SIZE_T dwBytes); BOOL __thiscall sub_916C8C(HANDLE *this, LPVOID lpMem); LPVOID __thiscall sub_916CA9(HANDLE *this, LPVOID lpMem, SIZE_T dwBytes); SIZE_T __thiscall sub_916CE3(HANDLE *this, LPCVOID lpMem); void *__thiscall sub_916CFA(void *this, char a2); signed int __cdecl sub_916D1B(unsigned int *a1, unsigned int a2, unsigned int a3); int __thiscall sub_916D3F(_DWORD **this); signed int __cdecl sub_916D80(_DWORD *a1, int a2, unsigned int a3); int (__stdcall *****__thiscall sub_916DA6(int (__stdcall ****this)(unsigned int), unsigned int a2, unsigned int a3))(unsigned int); int __thiscall sub_916E0A(_DWORD **this, int a2, unsigned int a3, unsigned int a4); int sub_916E70(); int sub_916E80(); char __cdecl sub_916EA0(int a1); char __cdecl sub_916EF0(int a1); char __thiscall sub_916F40(_DWORD *this, int a2); int __cdecl sub_916FF0(int a1); int __thiscall sub_917070(_DWORD *this, _DWORD *a2); int __stdcall sub_917090(_DWORD **a1); int __fastcall sub_9170B0(int a1, int a2, int a3); int __fastcall sub_9170F0(int a1, int a2, int a3); void __thiscall sub_917130(_DWORD *this, int a2); void __thiscall sub_917160(_DWORD *this, int a2); char __cdecl sub_917190(char *Src, char *Dst, rsize_t SizeInBytes); void __cdecl sub_917340(int a1); int __cdecl sub_9173E0(char *FullPath); // idb int sub_9174D0(); void __thiscall sub_917500(_BYTE *this); void __thiscall sub_917570(_BYTE *this); void __thiscall sub_9175E0(_BYTE *this); void **__thiscall sub_917650(void *this, char a2); void **__thiscall sub_917690(void *this, char a2); void *__thiscall sub_9176D0(void *this, char a2); void **__thiscall sub_917700(void *this, char a2); void **__thiscall sub_917740(void *this, char a2); void **__thiscall sub_917780(void *this, char a2); void **__thiscall sub_9177C0(void *this, char a2); // int __usercall sub_917800@(int a1@, char *FullPath, int a3, int a4, int a5, int a6, int a7, int a8); // int __usercall sub_917880@(int a1@, char *FullPath, int a3, int a4, int a5); void __cdecl sub_9178F0(int a1); void __cdecl sub_917930(int a1); void __thiscall sub_917970(_DWORD *this, char *Src); void __thiscall sub_917AD0(_DWORD *this, char *Src); void __fastcall sub_917C10(int a1); void *__thiscall sub_917C80(void *this, char a2); void *__thiscall sub_917CB0(void *this, char a2); _DWORD *__thiscall sub_917CE0(_DWORD *this); LONG __thiscall sub_917DE0(_DWORD *this); _DWORD *sub_917E50(); _DWORD *sub_917EC0(); void *__thiscall sub_917ED0(void *this, char a2); char __cdecl sub_917F00(char *a1, int a2); char __thiscall sub_917FB0(int this, int a2); int __thiscall sub_917FF0(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); void *__thiscall sub_918040(void *this, char a2); bool __thiscall sub_918070(_DWORD *this, int a2, int a3); unsigned int __thiscall sub_9180F0(_DWORD *this); float *__stdcall sub_918200(float *a1, int a2); LONG __thiscall sub_918270(_DWORD *this); void *sub_918300(); signed int __thiscall sub_918310(_DWORD **this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8); _DWORD **__thiscall sub_918380(_DWORD *this, int *a2, int a3); _DWORD **__thiscall sub_918590(_DWORD *this, int a2, int a3); _DWORD **__thiscall sub_918790(_DWORD *this, int *a2); _DWORD **__thiscall sub_9188F0(_DWORD *this, int a2); int __thiscall sub_918B20(_DWORD); // weak unsigned int __thiscall sub_918B30(_DWORD *this, _DWORD *a2); void *__thiscall sub_918B60(void *this, char a2); void __thiscall sub_918B90(int this, int a2); char __thiscall sub_918C50(_DWORD *this, int a2, char a3); _DWORD *__thiscall sub_918D50(_DWORD *this); void __thiscall sub_918E50(_DWORD *this, int a2, int a3, char a4, char a5); void __thiscall sub_918FA0(_DWORD *this, _DWORD *a2); void __thiscall sub_919030(_DWORD *this, int a2, int a3, int a4, int a5); signed int __thiscall sub_919350(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, int a7, int a8); signed int __thiscall sub_91A2E0(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, int a7, int a8); _DWORD *__thiscall sub_91A320(_DWORD *this); unsigned int __thiscall sub_91A460(_DWORD *this, unsigned int a2, int a3, char a4); char __thiscall sub_91A530(_DWORD *this, unsigned int a2, _DWORD *a3, _BYTE *a4); _BYTE *__thiscall sub_91A590(_DWORD *this, unsigned int a2, int a3, char a4, char a5); _BYTE *__thiscall sub_91A6C0(_DWORD *this); _BYTE *__thiscall sub_91A6F0(_DWORD *this); int __thiscall sub_91A720(char *this, int a2); int __thiscall sub_91A7A0(char *this, int a2); void *__thiscall sub_91A820(void *this, char a2); int __thiscall sub_91A850(char *this, unsigned int a2); int *__thiscall sub_91A890(int *this, unsigned int a2); _DWORD *sub_91A900(); int *__thiscall sub_91A940(void **this, unsigned int a2); char *__thiscall sub_91AA30(void **this, _DWORD *a2); void __thiscall sub_91AA90(_DWORD *this); void sub_91AAC0(); _BYTE *sub_91AB20(); char *__cdecl sub_91AB60(_BYTE *a1); void __thiscall sub_91ACB0(_DWORD *this, char a2); int __cdecl sub_91AD60(unsigned int a1); void *__thiscall sub_91AE00(void *this, char a2); _DWORD *__thiscall sub_91AE30(_DWORD *this); char __thiscall sub_91AE60(int this, int a2, int a3); _BYTE *__thiscall sub_91AED0(_DWORD **this, int a2); _BYTE *__thiscall sub_91AF30(_DWORD **this, int a2); char __stdcall sub_91AFD0(int a1, float *a2); _DWORD *__thiscall sub_91B7E0(void *this, char a2); _DWORD *__thiscall sub_91B8D0(_DWORD *this, unsigned int a2); int __cdecl sub_91B960(int a1); void __thiscall sub_91BA20(_DWORD *this); void __thiscall sub_91BAE0(int *this); _DWORD *__thiscall sub_91BBB0(void **this, unsigned int a2); void __thiscall sub_91BCA0(void **this); char __thiscall sub_91BD30(int this); void __thiscall sub_91BD60(void *this); _DWORD *__cdecl sub_91BE40(_DWORD *a1); void *__thiscall sub_91BEA0(void *this, char a2); void __thiscall sub_91BED0(void **this); int __cdecl sub_91BF00(int a1); int __thiscall sub_91BF30(_DWORD *this); int __thiscall sub_91BF90(_DWORD *this); int *__thiscall sub_91BFC0(int *this, unsigned int a2); _DWORD *__thiscall sub_91C050(_DWORD *this, int a2); _DWORD *sub_91C0B0(); char __thiscall sub_91C120(_DWORD *this, int a2, _DWORD *a3, _BYTE *a4); int *__thiscall sub_91C180(void **this, unsigned int a2); _DWORD *__thiscall sub_91C270(void **this, unsigned int a2); void sub_91C360(); _DWORD *__thiscall sub_91C3F0(_DWORD *this); _DWORD *__thiscall sub_91C5E0(_DWORD *this, int a2, int a3, char a4); _BYTE *sub_91C760(); void __cdecl sub_91C7A0(void *a1); void __fastcall sub_91C8F0(_DWORD *a1); int sub_91C950(); int __thiscall sub_91C960(_DWORD *this, int a2); bool __thiscall sub_91C980(_DWORD *this, int a2, int a3); int __cdecl sub_91C9C0(int a1); int __cdecl sub_91C9D0(int a1); int __cdecl sub_91C9E0(int a1); void __thiscall sub_91C9F0(void **this, char *Src); void __thiscall sub_91CA70(void **this, char *Src); void __thiscall sub_91CAF0(void **this, char *Src); void __thiscall sub_91CB70(void **this, char *Src); void __thiscall sub_91CBF0(void **this, char *Src); void __thiscall sub_91CC70(void **this, char *Src); int __thiscall sub_91CCF0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); int __cdecl sub_91CD90(int a1); _DWORD *sub_91CE10(); int __thiscall sub_91CE50(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); _DWORD *__thiscall sub_91D020(_DWORD *this, unsigned int a2, int a3); _DWORD *__thiscall sub_91D0B0(_DWORD *this, unsigned int a2, _DWORD *a3); int __thiscall sub_91D130(_DWORD *this); void __thiscall sub_91D170(_DWORD *this, unsigned int a2); void __thiscall sub_91D2F0(_DWORD *this); void *__thiscall sub_91D340(void *this, char a2); _DWORD *__thiscall sub_91D370(_DWORD *this); void sub_91D3D0(); _DWORD *__thiscall sub_91D400(_DWORD *this, unsigned int a2); void __thiscall sub_91D550(_DWORD *this); char *__thiscall sub_91D6F0(_BYTE *this); int __thiscall sub_91D830(_DWORD *this, int a2, void *a3); _DWORD *__thiscall sub_91D930(void **this, unsigned int a2); char *__thiscall sub_91DA20(void *this, char a2); _DWORD *__cdecl sub_91DA90(_DWORD *a1); char __thiscall sub_91DAF0(_DWORD *this, int a2); int __thiscall sub_91DB20(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); _DWORD *sub_91DB40(); void sub_91DB50(); int __thiscall sub_91DB60(_DWORD *this, unsigned int a2); int __thiscall sub_91DB80(_DWORD *this); int __thiscall sub_91DBC0(_DWORD *this); int __thiscall sub_91DC20(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __thiscall sub_91DC50(int this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9); float *__cdecl sub_91DCE0(float *a1, float *a2, int a3, char a4, float *a5); float *__cdecl sub_91DED0(float *a1, float *a2, int a3, char a4, float *a5); float *__cdecl sub_91E0D0(float *a1, float *a2, int a3, char a4, float *a5); float *__cdecl sub_91E260(float *a1, float *a2, int a3, char a4, float *a5); float *__cdecl sub_91E3F0(float *a1, float *a2, int a3, char a4, float *a5); // int _cfltcvt_init_38(void); weak signed int __thiscall sub_91E5C0(int this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8); int __thiscall sub_91E630(_DWORD **this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); _DWORD *__thiscall sub_91E740(int this, int a2, int a3, _DWORD *a4, int a5); unsigned int __thiscall sub_91E830(_DWORD *this); int __thiscall sub_91E880(int this); int __thiscall sub_91E8D0(_DWORD *this); char __thiscall sub_91E920(_DWORD *this); char __thiscall sub_91E950(_DWORD *this); char __thiscall sub_91E980(_DWORD *this); char __thiscall sub_91E9B0(_DWORD *this); char __cdecl sub_91E9E0(_DWORD *a1, _DWORD *a2); LONG __thiscall sub_91EDA0(_DWORD *this); char __thiscall sub_91EF90(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_91EFB0(_DWORD *this); int __stdcall sub_91EFE0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __stdcall sub_91EFF0(int a1, int a2, int a3, int a4, int a5, int a6, int a7); int __stdcall sub_91F000(int a1, int a2, int a3, int a4); void *sub_91F010(); int __thiscall sub_91F020(_DWORD *this, int a2); int __cdecl sub_91F090(int a1); int sub_91F140(); LONG __thiscall sub_91F1A0(_DWORD *this); char __thiscall sub_91F1E0(_DWORD *this, int a2); _DWORD *__thiscall sub_91F200(void *this, char a2); _DWORD *__cdecl sub_91F250(_DWORD *a1, _DWORD *a2, _DWORD *a3); signed int __cdecl sub_91F340(int a1); const char *__cdecl sub_91F3D0(signed int a1); signed int __cdecl sub_91F720(signed int a1); void *__thiscall sub_91F860(void *this, char a2); void *__thiscall sub_91F890(void *this, char a2); void *__thiscall sub_91F8C0(void *this, char a2); int __thiscall sub_91F8F0(_DWORD *this, char a2, int a3, int a4); bool __thiscall sub_91F950(_DWORD *this, char a2, int a3, int a4, int a5); int __thiscall sub_91F9D0(_DWORD *this, int a2, int a3, int a4); signed int __thiscall sub_91FAB0(_DWORD *this, char a2, int a3); int __thiscall sub_91FB40(_DWORD *this, int a2, int a3, unsigned int a4, int a5); int __thiscall sub_91FBE0(_DWORD *this, int a2); int __thiscall sub_91FC40(_DWORD *this); void **__thiscall sub_91FC80(void *this, char a2); void **__thiscall sub_91FCC0(void *this, char a2); void *__thiscall sub_91FD00(void *this, char a2); void __thiscall sub_91FD30(_DWORD *this); int __thiscall sub_91FDE0(int *this, int a2, int a3); int __thiscall sub_91FE00(_DWORD *this, int a2, int a3, int a4, int *a5); int __thiscall sub_91FE70(_DWORD *this, int a2, int a3, int a4, int a5, char a6, char a7); int *__thiscall sub_920140(int *this, int a2, int a3, int a4, int a5, int a6); int *__thiscall sub_920350(int *this, int a2, int a3, int a4); void __thiscall sub_920640(unsigned int *this, int a2, int a3); void __fastcall sub_9206E0(int a1); unsigned int *__thiscall sub_9208B0(unsigned int *this, int a2, int a3); void __thiscall sub_9208F0(_DWORD *this); signed int sub_920940(); char __cdecl sub_9209B0(int a1, _DWORD *a2, _DWORD *a3); int __thiscall sub_920A70(int *this, signed int *a2); int __thiscall sub_920A90(_DWORD *this); char __thiscall sub_920AA0(_BYTE *this); int __thiscall sub_920AB0(_DWORD *this); int __thiscall sub_920AC0(_DWORD **this); int __thiscall sub_920AD0(_DWORD **this); int __thiscall sub_920AE0(_DWORD **this); char __stdcall sub_920B00(int a1); char __thiscall sub_920B10(int this); int __thiscall sub_920B50(int this, float *a2, float *a3, float *a4, float *a5, int a6, float *a7); // int __userpurge sub_921080@(int a1@, int a2@, int a3@, float *a4); int __thiscall sub_921420(_DWORD *this, int a2, int a3); _DWORD *__thiscall sub_921440(_DWORD *this); int __thiscall sub_921480(_DWORD **this); int __thiscall sub_9214A0(_DWORD **this, int a2); int __thiscall sub_9214E0(_DWORD **this, int a2); char *__cdecl sub_921520(char *Src); bool __thiscall sub_921550(int this, int a2); bool __thiscall sub_9215B0(int this, int a2); void __thiscall sub_921610(_DWORD *this, void *a2, int a3, int a4); void *sub_921C10(); int __cdecl sub_921CB0(int, int, int, float); // idb char *__thiscall sub_921D20(char *this); signed int __cdecl sub_921DB0(int a1); signed int __cdecl sub_921E20(int a1); int __stdcall sub_921EF0(int a1, int a2, int a3); void *__thiscall sub_921F10(void *this, char a2); void *__thiscall sub_921F40(void *this, char a2); void *__thiscall sub_921F70(void *this, char a2); void *__thiscall sub_921FA0(void *this, char a2); void *__thiscall sub_921FD0(void *this, char a2); char __thiscall sub_922000(_DWORD *this); char __thiscall sub_922440(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, void *a13); char __thiscall sub_922780(_DWORD **this, int a2); char __thiscall sub_922A40(char *this); char *__thiscall sub_922BB0(char *this); char __stdcall sub_922C70(int a1); int sub_922C90(); void __thiscall sub_922CA0(_DWORD **this, int a2); int __thiscall sub_922D00(_DWORD **this, int a2); void __stdcall sub_922D30(int a1); char __thiscall sub_922D70(void *this, int a2, void *Dst, int a4, int a5, int a6); char __thiscall sub_9230C0(void *this, int *a2, int a3, int a4, int a5, _DWORD *a6, int a7); DWORD __thiscall sub_923350(int this); void __thiscall sub_9233A0(int this); char __thiscall sub_9233F0(_DWORD *this, int a2, int a3, int a4, int a5); char __thiscall sub_923560(_DWORD *this, _DWORD *a2); char __thiscall sub_9235A0(_DWORD *this, _DWORD *a2); char __thiscall sub_9235E0(_DWORD *this, _DWORD *a2); int __thiscall sub_923630(_BYTE *this, int a2, _DWORD *a3); char __thiscall sub_923700(_BYTE *this, int a2); bool __thiscall sub_9237E0(void *this, int a2, int a3); char __thiscall sub_923840(_DWORD *this, int a2); char __thiscall sub_923860(_DWORD *this, int a2); char __thiscall sub_923880(_DWORD *this, int a2); bool __thiscall sub_9238A0(_BYTE *this, _DWORD *a2, int a3); LONG __thiscall sub_923970(_DWORD *this, int a2, LONG a3); int __cdecl sub_923A50(int a1, int a2); int __thiscall sub_923A70(_DWORD *this); int __thiscall sub_923AB0(_DWORD *this); void **__thiscall sub_923AF0(void *this, char a2); void **__thiscall sub_923B30(void *this, char a2); void **__thiscall sub_923B70(void *this, char a2); void **__thiscall sub_923BB0(void *this, char a2); void **__thiscall sub_923BF0(void *this, char a2); void **__thiscall sub_923C30(void *this, char a2); void **__thiscall sub_923C70(void *this, char a2); void **__thiscall sub_923CB0(void *this, char a2); void **__thiscall sub_923CF0(void *this, char a2); void **__thiscall sub_923D30(void *this, char a2); void *__thiscall sub_923D70(void *this, char a2); void *__thiscall sub_923DA0(void *this, char a2); char __thiscall sub_923DD0(char *this); _DWORD *__thiscall sub_923F10(_DWORD **this, int a2, unsigned int a3, int a4); char __thiscall sub_923F80(int this, int a2, int a3); char __thiscall sub_9241D0(_DWORD **this); char __thiscall sub_924300(void *this, int a2); bool __thiscall sub_924480(_DWORD *this, _DWORD *a2, _DWORD *a3); // void __userpurge sub_924560(int a1@, int a2@, float *a3, int a4); _DWORD *__thiscall sub_924720(int this, int a2); char __thiscall sub_9248D0(_BYTE *this, int a2, int a3, int *a4, int a5, int a6); char __thiscall sub_924A40(_BYTE *this, _DWORD *a2, _DWORD *a3, int *a4, int *a5, int a6); char __stdcall sub_924B90(_DWORD *a1); void __stdcall sub_924C70(int a1, int a2, int a3); void __thiscall sub_924DA0(int this); char __thiscall sub_925160(int this); int __thiscall sub_9251F0(char *this, float *a2, char a3); int __thiscall sub_9252E0(_DWORD **this, int a2, int a3, int a4); int __thiscall sub_925370(_DWORD *this, _DWORD *a2, float a3, char a4, int a5, char a6); // int __userpurge sub_9257E0@(int a1@, int a2@, int a3@, _DWORD *a4); // int __userpurge sub_9268C0@(int a1@, int a2@, int a3@, _DWORD *a4); _DWORD *__thiscall sub_926F80(int this); _DWORD *__thiscall sub_9273B0(_DWORD *this, _DWORD *a2); int __thiscall sub_9275E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7); // int __userpurge sub_927810@(int a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, _DWORD *a8); int __thiscall sub_927AE0(_DWORD *this, int a2); void __thiscall sub_927C50(char *this, int a2); _DWORD *__thiscall sub_927E40(_DWORD *this, int a2); unsigned int __thiscall sub_927E90(void *this, int a2, signed int a3); char __thiscall sub_9283F0(_DWORD *this, int a2, int a3, unsigned __int16 a4, unsigned __int16 a5, int a6, unsigned int a7, int a8, int a9); char __thiscall sub_928500(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); _DWORD *__thiscall sub_9286B0(_DWORD *this); void *sub_9289C0(); int __thiscall sub_9289D0(_DWORD *this); int __thiscall sub_9289E0(_DWORD **this); char __thiscall sub_9289F0(_DWORD **this, int a2); int __thiscall sub_928A10(_DWORD *this); void __thiscall sub_928A20(float *this, float a2); double __thiscall sub_928A30(float *this); int __thiscall sub_928A40(_DWORD *this, float *a2); int __thiscall sub_928AD0(_DWORD *this, float *a2); float *__thiscall sub_928B80(unsigned __int8 *this, float *a2); int __thiscall sub_928BE0(_DWORD *this, int a2); int __thiscall sub_928BF0(_DWORD *this); int __thiscall sub_928C00(_DWORD **this); int __thiscall sub_928C10(_DWORD **this, float a2); char __thiscall sub_928C30(int this, int a2, 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); char __thiscall sub_929290(_DWORD *this); signed int __thiscall sub_929A60(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); char __thiscall sub_929B90(void *this, _DWORD *a2, int a3, int a4); void __thiscall sub_929D40(_BYTE *this, int a2); _DWORD *__thiscall sub_929E60(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_929E70(_DWORD *this, _DWORD *a2); void __thiscall sub_929EC0(_DWORD *this); char __thiscall sub_929F30(_DWORD **this); void __thiscall sub_929FD0(void *this, int a2); LONG __thiscall sub_92A050(_DWORD *this); _DWORD *__cdecl sub_92A8B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14); char __thiscall sub_92A960(_DWORD **this); void __thiscall sub_92AA40(int this, int a2); void *__thiscall sub_92AC10(void *this, char a2); int __cdecl sub_92AC40(int a1, int a2); char __thiscall sub_92AC80(void *this); char __cdecl sub_92AC90(int a1); bool __thiscall sub_92ACD0(_DWORD **this); char __thiscall sub_92ACF0(char *this, int a2); void *__thiscall sub_92AD20(void *this, char a2); void *sub_92AD50(); int __thiscall sub_92AD60(_DWORD *this); int __thiscall sub_92AD70(_DWORD *this); char __thiscall sub_92AD80(_DWORD *this, int a2, unsigned int a3); char __thiscall sub_92ADE0(_DWORD *this, int a2); char __thiscall sub_92AE20(_DWORD *this); char __thiscall sub_92AE50(_DWORD *this); char __thiscall sub_92AE80(_DWORD *this, int a2); void sub_92AF30(); void __cdecl sub_92AF90(int a1); char __thiscall sub_92B000(_DWORD *this, int a2); char __thiscall sub_92B140(_DWORD *this, int a2); int __thiscall sub_92B230(_DWORD *this); void __thiscall sub_92B270(_DWORD *this); LONG __thiscall sub_92B2A0(_DWORD *this); void *sub_92B310(); void *__thiscall sub_92B320(void *this, char a2); int __cdecl sub_92B350(int a1, _DWORD **a2); int __cdecl sub_92B460(int a1, int a2, int a3, int a4, _DWORD **a5); int __thiscall sub_92B570(_DWORD *this); void *__thiscall sub_92B5C0(void *this, char a2); _DWORD *__thiscall sub_92B5F0(_DWORD *this); void *sub_92B6A0(); // signed int __usercall sub_92B6B0@(int a1@, int a2@, int a3, _DWORD **a4, int a5); LONG __thiscall sub_92B830(_DWORD *this); void *sub_92B8A0(); int __thiscall sub_92B8B0(_DWORD *this); void *__thiscall sub_92B900(void *this, char a2); void *sub_92B960(); LONG __thiscall sub_92B970(_DWORD *this); void *__thiscall sub_92BA30(void *this, char a2); int __cdecl sub_92BA60(int, void *Src, int); // idb _DWORD *__cdecl sub_92BBB0(int a1, _DWORD **a2); void *__thiscall sub_92BCC0(void *this, char a2); int __thiscall sub_92BCF0(_DWORD *this, int a2); void __cdecl sub_92BD00(char *Src); void **__thiscall sub_92BD50(void **this, char *Src); LONG __thiscall sub_92BD80(_DWORD *this); void __thiscall sub_92BDF0(_DWORD *this, int a2); void *__thiscall sub_92BE40(void *this, char a2); int sub_92BE70(char *Format, ...); char __cdecl sub_92BEC0(char *FullPath, char *Drive, char *Dir, char *Filename, char *Ext); char __cdecl sub_92BF00(char *FullPath, char *DstBuf, size_t SizeInBytes); char __cdecl sub_92BFD0(char *FullPath, char *DstBuf, size_t SizeInBytes); char __cdecl sub_92C080(char *FullPath, char *Dst, rsize_t SizeInBytes); rsize_t __cdecl sub_92C100(int a1, rsize_t SizeInBytes, char *Src); bool __cdecl sub_92C180(signed int a1, int a2, int a3); char __cdecl sub_92C1E0(signed int a1, const char *a2); char __cdecl sub_92C250(int a1, void **a2, _DWORD *a3); char __cdecl sub_92C2E0(signed int a1, _DWORD *a2, size_t *a3); signed int sub_92C350(); signed int sub_92C410(); // float *__usercall sub_92C4B0@(float *result@, float *a2@); signed int __stdcall sub_92C510(int a1, int a2, int a3); char __cdecl sub_92C550(char *a1, int a2); signed int __cdecl sub_92C5A0(int a1, _DWORD *a2, _DWORD *a3); char __cdecl sub_92C640(int a1, signed int a2); int __cdecl sub_92C6B0(unsigned __int16 a1); void *__thiscall sub_92C6E0(void *this, char a2); char __cdecl sub_92C710(char *Src, char *a2, rsize_t SizeInBytes, int a4); char __cdecl sub_92C800(char *Src, int a2, int a3); int __cdecl sub_92C8B0(char *Src); // idb signed int __stdcall sub_92C990(int a1); signed int __stdcall sub_92CB20(int a1); signed int __stdcall sub_92CBE0(int a1, int a2, int a3, int a4, char a5, char a6); int __stdcall sub_92CEE0(int, int, int, int, float, char); // idb signed int __stdcall sub_92D130(int a1, int a2, int a3, int a4, int a5, int a6); signed int __stdcall sub_92D340(int a1, int a2, int a3, int a4, int a5, int a6); int __cdecl sub_92D550(float *a1, float *a2, char a3, char a4); BOOL __thiscall sub_92D600(_DWORD *this); BOOL __thiscall sub_92D630(_DWORD *this); BOOL __thiscall sub_92D660(_DWORD *this); BOOL __thiscall sub_92D690(_DWORD *this); BOOL __thiscall sub_92D6C0(_DWORD *this); BOOL __thiscall sub_92D6F0(_DWORD *this); BOOL __thiscall sub_92D720(_DWORD *this); BOOL __thiscall sub_92D750(_DWORD *this); BOOL __thiscall sub_92D780(_DWORD *this); BOOL __thiscall sub_92D7B0(_DWORD *this); // void __userpurge sub_92D7E0(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13); signed int __stdcall sub_92E450(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13); signed int __stdcall sub_92E5F0(int a1, int a2, int a3); bool __cdecl sub_92E830(_BYTE *a1, int a2); char __cdecl sub_92E8B0(void *a1, size_t a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); // void __userpurge sub_92F5F0(float a1@, int a2@, float *a3, int a4, float a5, int a6, int a7, int a8, int a9, int a10); signed int __stdcall sub_930310(int a1, _DWORD *a2, int a3); void __thiscall sub_930600(_DWORD *this); void *__thiscall sub_930660(void *this, char a2); int __thiscall sub_930690(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7, int a8, int a9, int a10); _BYTE *__cdecl sub_930960(_DWORD *a1, int a2, int a3); signed int __stdcall sub_930A70(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); _DWORD *__thiscall sub_930B50(_DWORD *this, int a2); void *__thiscall sub_930BD0(void *this, char a2); _DWORD *__thiscall sub_930C00(_DWORD *this, int a2); int __cdecl sub_930C20(int a1); void __thiscall sub_930C80(_DWORD *this, int a2); _DWORD *__thiscall sub_930CC0(int *this, _BYTE *ArgList, int a3, char a4); void __thiscall sub_930DA0(_DWORD *this); unsigned int __stdcall sub_930DB0(unsigned __int8 a1, int a2); int __stdcall sub_930DD0(unsigned __int8 a1); int __stdcall sub_930DE0(unsigned __int16 a1); unsigned int __stdcall sub_930E00(unsigned __int16 a1, int a2); int sub_930E20(); _DWORD *__stdcall sub_930E30(_DWORD *a1); int __stdcall sub_930E50(_DWORD **a1); void __stdcall sub_930E70(char *a1); void __stdcall sub_930E90(char *a1); void sub_930EB0(); const char *sub_930ED0(); BOOL __stdcall sub_930EE0(int a1, int a2); int sub_930F00(); void __thiscall sub_930F30(_DWORD **this, _DWORD *a2, int a3); int __thiscall sub_930FA0(_DWORD **this, int ArgList, int a3); char __thiscall sub_931020(_DWORD **this, int ArgList, int a3); int __thiscall sub_931080(_DWORD **this); void __thiscall sub_931090(_DWORD *this); int __stdcall sub_931160(int a1); void __thiscall sub_931190(_BYTE *this); void __thiscall sub_931200(_BYTE *this, int a2); void __thiscall sub_931220(_BYTE *this); void **__thiscall sub_931290(void *this, char a2); void **__thiscall sub_9312D0(void *this, char a2); void *__thiscall sub_931310(void *this, char a2); void **__thiscall sub_931340(void *this, char a2); void **__thiscall sub_931380(void *this, char a2); void *__thiscall sub_9313C0(void *this, char a2); void __thiscall sub_9313F0(_DWORD *this, int a2); _DWORD *__thiscall sub_931440(_DWORD *this, char *Src, int a3, rsize_t MaxCount, void *a5); void **__thiscall sub_9314B0(void *this, char a2); void __thiscall sub_931500(_BYTE *this); void **__thiscall sub_931570(void *this, char a2); void **__thiscall sub_9315B0(void *this, char a2); void *__thiscall sub_9315F0(void *this, char a2); char __thiscall sub_931620(_DWORD *this, _DWORD *a2, int a3); char __stdcall sub_931700(int a1); char __cdecl sub_931760(char *Src, int a2, rsize_t MaxCount, void *a4); char __cdecl sub_931800(int a1); char __cdecl sub_931870(int a1, _DWORD *a2, _DWORD *a3); char __cdecl sub_9318C0(int a1, rsize_t MaxCount, void *Src); unsigned int __thiscall sub_931910(_DWORD *this, unsigned int a2, _DWORD *a3, unsigned int *a4); int __thiscall sub_9319C0(_BYTE *this, int a2, char *Src, int a4); char __thiscall sub_931A70(_DWORD *this, int a2, int ArgList, int a4); char __thiscall sub_931AE0(_DWORD *this, _DWORD *a2, void **a3); void __thiscall sub_931BC0(_DWORD **this, LONG a2); void (__thiscall ***__thiscall sub_931C00(_DWORD *this, int a2))(_DWORD, signed int); char __thiscall sub_931C70(_DWORD *this, int a2); unsigned int __thiscall sub_931CF0(_DWORD *this); void (__thiscall ***__thiscall sub_931D80(_DWORD *this))(_DWORD, signed int); int __thiscall sub_931DE0(_DWORD *this); _DWORD *__thiscall sub_931E60(_DWORD *this); LONG __thiscall sub_931F80(_DWORD *this); void *__thiscall sub_9320F0(void *this, char a2); void __thiscall sub_932120(void *this); _DWORD *__thiscall sub_932170(_DWORD *this); void __thiscall sub_9321D0(void **this, char *Src); void __thiscall sub_932270(void **this, char *Src); int __thiscall sub_932310(_DWORD *this, int a2); int __thiscall sub_932380(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); int __thiscall sub_932500(_DWORD *this, char *Src, int a3, int a4, char *a5); int __thiscall sub_932590(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); int __thiscall sub_932660(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); int __thiscall sub_932760(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); int __thiscall sub_932870(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, char *a7); int __thiscall sub_9328F0(_DWORD *this, char *Src, int a3, char *a4, int a5, int a6); int __thiscall sub_932980(_DWORD *this, char *a2); int __thiscall sub_9329E0(_DWORD *this, int a2); BOOL __thiscall sub_9329F0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); int __thiscall sub_932C90(_DWORD *this, char *a2); int __thiscall sub_932CE0(_DWORD *this, int a2); int *__stdcall sub_932D50(_DWORD *a1, int a2); int *__stdcall sub_932FF0(int a1); LONG __thiscall sub_933400(_DWORD *this); signed int __thiscall sub_9334C0(_DWORD *this, LONG *a2); int __thiscall sub_933590(_DWORD *this, int a2); _DWORD *__thiscall sub_9335F0(_DWORD *this); char __thiscall sub_933620(void *this, int a2, int a3, int a4, int a5, int a6); char __thiscall sub_933720(int this, unsigned int a2, unsigned int a3, int a4, int a5, int a6, int a7, int a8, int a9); char __thiscall sub_9337C0(int this, unsigned int a2, unsigned int a3); char __thiscall sub_933830(_DWORD *this, unsigned int a2); int __thiscall sub_9338A0(_DWORD *this, unsigned int a2); char __thiscall sub_9338D0(_BYTE *this); BOOL __thiscall sub_9338E0(_DWORD *this, _DWORD *a2, _DWORD *a3); char __cdecl sub_933910(int a1, unsigned int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6); int __cdecl sub_933AB0(int a1); int __cdecl sub_933BE0(int a1); int __cdecl sub_933CF0(int a1); int __cdecl sub_933E00(int a1); int __cdecl sub_933F30(int a1); int __cdecl sub_934060(int a1); int __cdecl sub_934180(int a1); int __cdecl sub_934280(int a1); int __cdecl sub_934380(int a1); int __cdecl sub_934480(int a1); int __cdecl sub_934580(int a1); int __cdecl sub_934670(int a1); _DWORD *__cdecl sub_934760(int a1, int a2, unsigned int a3); _DWORD *__thiscall sub_9347D0(void *this, char a2); int __thiscall sub_934820(_DWORD *this, int a2, _DWORD *a3, int a4, signed int a5, int a6, unsigned int a7, int a8); int __thiscall sub_934B20(int this); int __cdecl sub_934D60(int a1); int __cdecl sub_934E70(int a1); int (*__cdecl sub_934F80(int (*a1)(), unsigned int a2))(); float *__thiscall sub_935260(float *this); void *sub_9352A0(); void *__thiscall sub_9352B0(void *this, char a2); bool __thiscall sub_9352E0(float *this, int a2); LONG __thiscall sub_935300(_DWORD *this); char __thiscall sub_935360(_DWORD *this, int a2); void __thiscall sub_935380(int this, float a2); float *__thiscall sub_9353B0(void *this, _DWORD **a2); void __thiscall sub_935400(void *this, _DWORD *a2); char __thiscall sub_9354E0(_DWORD *this); unsigned int __stdcall sub_935510(_DWORD *a1); void __thiscall sub_935560(void **this, int a2); signed int __thiscall sub_935570(_DWORD *this); int __thiscall sub_9355A0(_DWORD *this); int __thiscall sub_9355C0(void *this); char __thiscall sub_9355E0(_BYTE *this); int __thiscall sub_9355F0(_DWORD *this, unsigned __int16 a2); double __thiscall sub_935610(float *this); void __thiscall sub_935620(float *this, float a2); void __thiscall sub_935660(float *this, float a2, float a3); bool __thiscall sub_935680(_DWORD *this); BOOL __thiscall sub_935690(_DWORD *this, char a2); int __thiscall sub_9356B0(_DWORD **this, int a2, _DWORD *a3, char a4); int __thiscall sub_935700(_DWORD *this, int a2); int __thiscall sub_935720(_DWORD *this, int a2); int __thiscall sub_935740(int this, int a2, char a3); int __thiscall sub_935780(_DWORD *this); int __thiscall sub_935790(_DWORD *this); int __thiscall sub_9357B0(_DWORD *this, int a2); int __thiscall sub_935800(_DWORD **this, int a2, int a3, int a4, char a5); int __thiscall sub_935850(_DWORD *this, int a2, int a3); int __thiscall sub_935870(_DWORD *this, int a2, int a3); int __thiscall sub_9358A0(_DWORD *this); int __thiscall sub_935910(_DWORD **this, int a2, _DWORD *a3); int __thiscall sub_935950(_DWORD *this, int a2); int __thiscall sub_935970(_DWORD *this, int a2); char __thiscall sub_9359C0(_BYTE *this, char a2); char __thiscall sub_9359D0(_BYTE *this); char __thiscall sub_9359E0(_BYTE *this, char a2); char __thiscall sub_9359F0(_BYTE *this); int __thiscall sub_935A00(int this, int a2, char a3); int __thiscall sub_935A40(_DWORD *this); int __thiscall sub_935A50(_DWORD *this); int __thiscall sub_935A70(_DWORD *this, int a2); int __thiscall sub_935AC0(int this, int a2, char a3); int __thiscall sub_935B10(int this); int __thiscall sub_935B30(_DWORD *this); int __thiscall sub_935B50(int this, int a2); int __thiscall sub_935BB0(int this, int a2, char a3); int __thiscall sub_935C00(int this); int __thiscall sub_935C20(_DWORD *this); int __thiscall sub_935C40(int this, int a2); _DWORD *__thiscall sub_935CA0(_DWORD **this, int a2, int a3, _DWORD *a4, char a5); int __thiscall sub_935D00(_DWORD *this, int a2, int a3); int __thiscall sub_935D20(_DWORD *this, int a2, int a3); void *__thiscall sub_935D50(void *this, char a2); int __thiscall sub_935D80(int this, unsigned __int8 a2); int __thiscall sub_935DE0(float *this); signed int __thiscall sub_936030(int this); int __thiscall sub_9360D0(_DWORD *this); _DWORD *__cdecl sub_9360E0(int a1, void *Src, char a3); _DWORD *__thiscall sub_936220(_DWORD *this, int a2); LONG __thiscall sub_9362D0(_DWORD *this); char __thiscall sub_936380(_DWORD *this, int a2, void *Src, int a4, char a5); char __thiscall sub_936400(_DWORD *this, int a2, void *Src, int a4, char a5); char __thiscall sub_936490(_DWORD *this, int a2, void *Src, int a4, char a5); char __thiscall sub_936520(_DWORD *this, int a2, void *Src, int a4, char a5); char __thiscall sub_9365A0(_DWORD *this, int a2, void *Src, int a4, char a5); char __thiscall sub_936630(_DWORD *this, int a2, void *Src, int a4, char a5); void *__thiscall sub_9366C0(void *this, char a2); char __thiscall sub_9366F0(_DWORD *this); int __thiscall sub_936720(_DWORD *this); void __thiscall sub_936750(void **this, void *Dst); int __thiscall sub_936880(_DWORD *this, int a2); int __thiscall sub_9368B0(_DWORD *this, int a2); void __thiscall sub_9368F0(_DWORD *this); int __thiscall sub_936960(int this); _DWORD *__thiscall sub_9369A0(_DWORD **this); int __thiscall sub_936A10(_DWORD *this); void *__thiscall sub_936A70(void *this, char a2); char __thiscall sub_936AA0(void *this, int a2); void __thiscall sub_936CC0(_DWORD *this); int __thiscall sub_936D30(_DWORD *this); void **__thiscall sub_936D70(void *this, char a2); void **__thiscall sub_936DB0(void *this, char a2); void *__thiscall sub_936DF0(void *this, char a2); void __thiscall sub_936E20(_DWORD *this); int __thiscall sub_936F20(_DWORD *this, unsigned int a2); int __thiscall sub_937220(_DWORD *this, int *a2); _DWORD *__thiscall sub_937270(_DWORD *this, int a2, int a3); // int __userpurge sub_937310@(int a1@, int a2@, unsigned int a3, int a4, int a5); void __thiscall sub_9374A0(_DWORD *this, int a2); void __thiscall sub_9375A0(_DWORD *this); int __cdecl sub_937690(signed int *a1, int *a2); char __thiscall sub_9378E0(_DWORD *this, int a2); unsigned int __thiscall sub_9379C0(_DWORD *this); _DWORD *__thiscall sub_9379E0(_DWORD *this, int a2, int a3); int __thiscall sub_937A20(_DWORD *this); int __thiscall sub_937A30(_DWORD *this); int __thiscall sub_937A40(_DWORD *this); int __thiscall sub_937A50(_DWORD *this); int __stdcall sub_937A90(_DWORD *a1, int *a2, int *a3); int sub_9382B0(); void *__thiscall sub_9382E0(void *this, char a2); _DWORD **__thiscall sub_938310(void *this, char a2); void __thiscall sub_938370(_DWORD *this); int __thiscall sub_938380(_DWORD *this); char __stdcall sub_938390(_DWORD *a1, unsigned int a2); int __thiscall sub_9383E0(char *this, int a2, int a3, rsize_t DstSize, int a5); int __stdcall sub_938480(void *Dst, void *Src, int, rsize_t DstSize, int); // idb bool __thiscall sub_9384C0(int this, int a2); _DWORD *__stdcall sub_938510(int a1, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7, _DWORD *a8, _DWORD *a9); int __thiscall sub_9385C0(void *this, int a2, _DWORD *a3, signed int a4, int a5, int a6); int __thiscall sub_938970(char *this, int a2, unsigned __int16 a3, char *a4, int a5, char *a6, char a7, int a8, int a9); int __thiscall sub_938C50(void *this, int a2, int a3, int a4, signed int a5, int a6, int a7); int __thiscall sub_9392D0(_DWORD *this); void **__thiscall sub_9393C0(void *this, char a2); void **__thiscall sub_939400(void *this, char a2); LONG __fastcall sub_939440(_DWORD *a1); _DWORD *__thiscall sub_939650(_DWORD *this, int a2); void *__thiscall sub_939790(void *this, char a2); char __thiscall sub_9397C0(_DWORD *this, int a2); void __cdecl sub_9398E0(_DWORD *a1, int a2, int *a3, int a4); char __thiscall sub_939A70(_DWORD *this, int a2); char __thiscall sub_939CA0(_DWORD *this, int a2); _DWORD *__thiscall sub_939D00(_DWORD *this, int a2, int a3); int __thiscall sub_939D40(_DWORD *this); int __thiscall sub_939D50(_DWORD *this); void __thiscall sub_939D90(_DWORD *this, _DWORD *a2); void __thiscall sub_939E40(int this); int __stdcall sub_939EC0(char *Src, int, int); // idb _DWORD *__thiscall sub_93A160(void *this, char a2); _DWORD *__cdecl sub_93A1B0(int a1, int *a2); void *__thiscall sub_93A4C0(void *this, char a2); BOOL __thiscall sub_93A4F0(_DWORD *this); void __thiscall sub_93A510(_DWORD *this, _DWORD *a2, int *a3); _DWORD *__cdecl sub_93A590(int a1, int a2); void __thiscall sub_93A980(int this); signed int __cdecl sub_93AA30(int a1); _DWORD *__cdecl sub_93AF30(signed int a1, _DWORD *a2); _DWORD *__cdecl sub_93B250(signed int a1); // int __userpurge sub_93B2A0@(int a1@, int a2@, void *a3, int a4, int a5, int *a6, unsigned int *a7, int a8, void *a9); // int __userpurge sub_93B420@(int a1@, int a2@, int a3, char a4, int a5, int a6); // int __userpurge sub_93B600@(int a1@, int a2@, int a3, _BYTE *a4, _DWORD *a5, int a6, int a7); int __thiscall sub_93B7F0(_DWORD *this); void **__thiscall sub_93B920(void *this, char a2); void **__thiscall sub_93B960(void *this, char a2); LONG __fastcall sub_93B9A0(_DWORD *a1); _DWORD *__thiscall sub_93BBD0(_DWORD *this, int a2); void *__thiscall sub_93BD00(void *this, char a2); _DWORD *__thiscall sub_93BD30(_DWORD *this, int a2, int a3); int __thiscall sub_93BD60(_DWORD *this); _DWORD *__thiscall sub_93BD90(void *this, char a2); int __thiscall sub_93BDD0(_DWORD *this, _DWORD *a2); // _DWORD *__usercall sub_93BEA0@(int a1@, _DWORD *a2, int a3); _DWORD *__thiscall sub_93BFB0(void *this, char a2); int __thiscall sub_93BFF0(_DWORD *this, _DWORD *a2); _DWORD *__cdecl sub_93C0B0(_DWORD *a1, int a2); int __thiscall sub_93C190(_DWORD *this); char __thiscall sub_93C1A0(_BYTE *this); char __thiscall sub_93C1B0(_BYTE *this, char a2); _DWORD *__thiscall sub_93C1C0(void *this, char a2); // int __userpurge sub_93C200@(_DWORD *a1@, int a2@, _DWORD *a3, char a4); _DWORD *__cdecl sub_93C370(_DWORD *a1); const char *__cdecl sub_93C3F0(unsigned int a1); char __thiscall sub_93C590(_BYTE *this, char a2); void __thiscall sub_93C5A0(_DWORD *this); _DWORD *__cdecl sub_93C600(int a1, int a2); char __thiscall sub_93C660(_DWORD *this, int a2); BOOL __stdcall sub_93C6C0(int a1); char __stdcall sub_93C6E0(int a1, int a2); char __stdcall sub_93C710(int a1); char __stdcall sub_93C750(int a1); void *__thiscall sub_93C7B0(void *this, char a2); volatile LONG *__thiscall sub_93C7E0(void *this, int a2); char __stdcall sub_93C880(int a1, int a2, int a3, char a4, int a5, int a6); char __stdcall sub_93C900(int a1, int a2); char __thiscall sub_93C950(char *this, int a2, int a3, int a4); int __stdcall sub_93C980(int a1, int a2, int a3, int a4, int a5, int a6); _DWORD *__thiscall sub_93C990(_DWORD *this, int a2); _DWORD *__thiscall sub_93C9E0(void *this, char a2); int __thiscall sub_93CA30(int **this, int a2, _BYTE *a3, bool *a4, bool *a5); bool __thiscall sub_93CBA0(int **this, int a2, int a3, int a4); signed int __thiscall sub_93CC70(_DWORD **this, int a2); void *__thiscall sub_93CCE0(void *this, char a2); _DWORD *__thiscall sub_93CD10(void *this, char a2); // HMODULE __usercall sub_93CD50@(int a1@, int a2@); _DWORD *__cdecl sub_93CE20(int a1); void sub_93CEA0(); void *__thiscall sub_93CFE0(int this, rsize_t MaxCount, void *Src); _DWORD *__thiscall sub_93D040(_DWORD *this); char __stdcall sub_93D070(int a1, int a2, int a3); int __cdecl sub_93D080(int a1); int __cdecl sub_93D190(int a1); int __cdecl sub_93D2A0(int a1); int __cdecl sub_93D3B0(int a1); int __cdecl sub_93D4C0(int a1); int __cdecl sub_93D5D0(int a1); int __cdecl sub_93D6E0(int a1); int __cdecl sub_93D730(int a1); int __cdecl sub_93D7E0(int a1); int __cdecl sub_93D8C0(int a1); int __cdecl sub_93D9C0(int a1); void *__thiscall sub_93DAC0(void *this, char a2); void *__thiscall sub_93DAF0(void *this, char a2); LONG __thiscall sub_93DB20(_DWORD *this); char __thiscall sub_93DB90(_DWORD *this, int a2, int a3, int a4); int __cdecl sub_93DC80(int a1); int __cdecl sub_93DD10(int a1); int __cdecl sub_93DE60(_DWORD *a1); int __cdecl sub_93DF70(int a1); void *__thiscall sub_93E150(void *this, char a2); char sub_93E180(); int __stdcall sub_93E2F0(__int16 a1, int a2, int a3, int a4, int a5, signed int a6, int a7); char sub_93E610(); unsigned int sub_93E650(); int __thiscall sub_93E6E0(_BYTE *this, int a2); int __thiscall sub_93E710(_BYTE *this, int a2); int __thiscall sub_93E770(void *this); signed int __thiscall sub_93E790(_DWORD *this); int __thiscall sub_93E7B0(_DWORD *this); int __thiscall sub_93E7D0(void *this); int __thiscall sub_93E7F0(void *this); int __thiscall sub_93E850(_DWORD *this, int a2); int __thiscall sub_93E8C0(_DWORD *this, int a2); int __thiscall sub_93E980(void *this, int a2); int __thiscall sub_93E9A0(float *this, int a2); int __thiscall sub_93EBC0(void *this, int a2); int __thiscall sub_93EBF0(void *this, int a2); int __thiscall sub_93EC10(_DWORD *this, int a2); int __thiscall sub_93ECF0(void *this, int a2); int __thiscall sub_93ED20(_DWORD *this, int a2); int __thiscall sub_93ED80(_DWORD *this); _DWORD *__thiscall sub_93EDD0(_DWORD *this); void __thiscall sub_93EDF0(_DWORD **this); void __thiscall sub_93EF00(_DWORD *this); int __thiscall sub_93EF50(_DWORD *this); _DWORD *__thiscall sub_93F0E0(_DWORD *this, int a2); LONG __thiscall sub_93F460(void **this); int __thiscall sub_93F530(void *this, _DWORD *a2); void *__thiscall sub_93F5C0(void *this, char a2); char __thiscall sub_93F5F0(float *this, int a2); int __thiscall sub_93F670(_BYTE *this, int a2); void __thiscall sub_93F6A0(void **this, int a2); void __thiscall sub_93F6D0(void **this); char __thiscall sub_93F700(_BYTE *this, int a2); char __thiscall sub_93F760(_DWORD *this); _DWORD *__thiscall sub_93F7D0(_DWORD *this, int a2, int a3); void *__thiscall sub_93FB10(void *this, char a2); _DWORD *__cdecl sub_93FB40(int a1, int a2); int __thiscall sub_93FB70(int this); int __thiscall sub_93FCD0(_DWORD *this); _DWORD *__cdecl sub_93FCF0(_DWORD *a1); int __thiscall sub_93FD20(_DWORD *this, int a2); int __thiscall sub_93FD70(_DWORD *this, unsigned int a2); void *__thiscall sub_93FDB0(void *this, char a2); void *__thiscall sub_93FDE0(void *this, char a2); _DWORD *__thiscall sub_93FE10(_DWORD *this, unsigned int a2); _DWORD *__thiscall sub_93FE60(_DWORD *this, _DWORD *a2); void sub_93FED0(); unsigned int __thiscall sub_93FF10(_DWORD *this); void __stdcall sub_93FF60(_DWORD *a1); void __thiscall sub_93FFD0(_DWORD *this); void __thiscall sub_9400C0(_DWORD *this, unsigned int a2, unsigned int a3); void sub_940120(); _DWORD *__thiscall sub_9401E0(_DWORD *this, unsigned int a2); unsigned int *__thiscall sub_9402B0(_DWORD *this, unsigned int *a2, char a3); _DWORD *__thiscall sub_940310(_DWORD *this); int __thiscall sub_940360(_DWORD *this); void __thiscall sub_9403D0(_DWORD *this); LONG __thiscall sub_940470(volatile LONG *this, LONG a2); void __stdcall sub_9404F0(int a1, unsigned int a2); _DWORD *__thiscall sub_940540(_DWORD *this); _DWORD *__cdecl sub_9405A0(int a1, int a2, int a3, int a4, int a5); void **__thiscall sub_940620(void *this, char a2); void **__thiscall sub_940660(void *this, char a2); _DWORD *__thiscall sub_9406A0(void *this, char a2); unsigned int *__thiscall sub_940700(_DWORD *this, _DWORD *a2, unsigned int a3); volatile LONG *sub_940830(); void __thiscall sub_940850(volatile LONG *this, int a2); void *__thiscall sub_940890(void *this, char a2); int sub_9408D0(); void __thiscall sub_940910(volatile LONG *this, int a2); void __thiscall sub_940950(volatile LONG *this, int a2); void __thiscall sub_9409D0(volatile LONG *this, int a2); _DWORD *__cdecl sub_940A10(int a1, int a2, int a3, int a4, int a5); void __thiscall sub_940A60(volatile LONG *this, int a2, int a3, int a4); _DWORD *__thiscall sub_940B50(_DWORD **this, int a2, unsigned int a3); void __stdcall sub_940BF0(int a1, unsigned int a2); void *__thiscall sub_940C40(void *this, char a2); _DWORD *__thiscall sub_940C70(_DWORD *this); void __thiscall sub_940E30(volatile LONG *this, int a2); void __thiscall sub_940E80(volatile LONG *this, int a2); void __thiscall sub_940ED0(volatile LONG *this, int a2); void __thiscall sub_940F60(volatile LONG *this, int a2); int __stdcall sub_940FB0(int a1, unsigned int a2); _DWORD *__cdecl sub_941000(unsigned int a1, int a2, int a3, int a4); void **__thiscall sub_941090(void *this, char a2); void **__thiscall sub_9410D0(void *this, char a2); void **__thiscall sub_941110(void *this, char a2); void **__thiscall sub_941150(void *this, char a2); int __thiscall sub_941190(_DWORD *this); __int16 __thiscall sub_941440(volatile LONG *this, int a2, int a3, int a4); _DWORD *__thiscall sub_941550(int *this, int a2, unsigned int a3); volatile LONG *__thiscall sub_941760(volatile LONG *this); void *__thiscall sub_941840(void *this, char a2); volatile LONG *sub_941870(); char __stdcall sub_9418A0(int a1); char __stdcall sub_941940(int a1); void __thiscall sub_9419B0(void **this, char *Src); void __thiscall sub_941A80(void **this, char *Src); int __thiscall sub_941B50(_DWORD *this, int a2, int a3); void *__thiscall sub_941B70(void *this, char a2); int __thiscall sub_941BA0(_DWORD *this); int __thiscall sub_941BB0(_DWORD *this, int a2); void *__thiscall sub_941BC0(void *this, char a2); int __thiscall sub_941BF0(_DWORD *this); int __thiscall sub_941C00(_DWORD *this, int a2); int __thiscall sub_941C10(_DWORD *this, int a2); char __thiscall sub_941C30(_BYTE *this, char a2); void *__thiscall sub_941C40(void *this, char a2); void __thiscall sub_941C70(_DWORD *this, char *Src); void __thiscall sub_941CE0(_DWORD *this, char *Src); int __thiscall sub_941D40(_DWORD *this, int a2); void *__thiscall sub_941D80(void *this, char a2); int __thiscall sub_941DB0(_DWORD *this); void __thiscall sub_941DC0(_DWORD *this, char *Src); void __thiscall sub_941E30(_DWORD *this, char *Src); int __thiscall sub_941E90(_DWORD *this, int a2); char __thiscall sub_941ED0(_DWORD *this, char *ArgList, int a3, int a4, void **a5, rsize_t *a6, int a7); // char __userpurge sub_9420F0@(int a1@, int a2@, int a3, int a4, int ArgList, int a6, void **a7, rsize_t *a8, int a9); _BYTE *__thiscall sub_942250(_DWORD *this, int a2, int ArgList, int a4, int a5, char a6, int a7, int a8); _BYTE *__thiscall sub_9423E0(void *this, int a2, int a3, int ArgList, int a5, int a6, char a7, int a8, int a9); _DWORD *__thiscall sub_942570(_DWORD *this, int a2, int ArgList, int a4, int a5); _DWORD *__thiscall sub_9426D0(void *this, int a2, int a3, int ArgList, int a5, int a6); char __stdcall sub_942830(int a1); char __stdcall sub_9428A0(int a1); _BYTE *__thiscall sub_9428E0(void *this, int a2, int ArgList, int a4, int a5, int a6, int a7, int a8); _BYTE *__thiscall sub_942A20(void *this, int a2, int a3, int ArgList, int a5, int a6, int a7, int a8, int a9); _DWORD *__thiscall sub_942B60(void *this, int a2, int ArgList, int a4, int a5); _DWORD *__thiscall sub_942C60(void *this, int a2, int a3, int ArgList, int a5, int a6); char __thiscall sub_942D60(char *this, char *ArgList, void **a3, rsize_t *a4, _DWORD *a5, _DWORD *a6); char __thiscall sub_942F50(_DWORD *this, int a2, int a3, void **a4, rsize_t *a5, _DWORD *a6, _DWORD *a7); char __stdcall sub_9430B0(char *ArgList, _DWORD *a2, DWORD *a3, _DWORD *a4, _DWORD *a5); char __stdcall sub_943240(void *Src, rsize_t DstSize, _DWORD *a3, rsize_t *a4, _DWORD *a5, _DWORD *a6); void __thiscall sub_9432C0(_DWORD *this); int __thiscall sub_9432E0(_DWORD *this, unsigned int a2); void sub_9433A0(); _DWORD *sub_943410(); unsigned int *__thiscall sub_943440(_DWORD *this, unsigned int *a2); volatile LONG *__thiscall sub_9434C0(volatile LONG *this); int __thiscall sub_9434E0(_DWORD *this); LONG __thiscall sub_943500(volatile LONG *this, int a2); int __thiscall sub_943520(volatile LONG *this, _DWORD *a2); void *__thiscall sub_943570(void *this, char a2); int __thiscall sub_9435B0(_DWORD *this, unsigned int a2, _DWORD *a3, _DWORD *a4, char a5, char a6); int __stdcall sub_943680(int a1, int a2, int a3, int a4, int a5, int a6); int __stdcall sub_9436C0(int a1); char __stdcall sub_943700(int a1, int a2, int a3, int a4, int a5); int __thiscall sub_943710(_DWORD *this, int a2); _DWORD *__thiscall sub_943780(_DWORD *this, int a2); LONG __thiscall sub_9437D0(_DWORD *this); void *__thiscall sub_943830(void *this, char a2); int __thiscall sub_943860(int this); char __thiscall sub_943870(void *this); LONG __thiscall sub_943880(_DWORD *this); char __thiscall sub_9438B0(_DWORD *this, int a2, void *Src, int a4); char __thiscall sub_943AB0(_DWORD *this, int a2, int a3, unsigned int a4, int a5, int a6); int __thiscall sub_943B50(int this); char __thiscall sub_943B60(void *this); LONG __thiscall sub_943B70(_DWORD *this); char __thiscall sub_943BA0(_DWORD *this, int a2, void *Src, int a4); char __thiscall sub_943DA0(_DWORD *this, int a2, int a3, unsigned int a4, int a5, int a6); LONG __thiscall sub_943E40(_DWORD *this); int __thiscall sub_943E80(_DWORD *this); // void __userpurge sub_943EC0(int a1@, int a2@, _DWORD *a3, void *a4, int a5); // void __userpurge sub_9440F0(int a1@, int a2@, _DWORD *a3, int a4, unsigned int a5, int a6, int a7); LONG __thiscall sub_9442C0(_DWORD *this); int __thiscall sub_944300(_DWORD *this); // void __userpurge sub_944340(int a1@, int a2@, _DWORD *a3, void *a4, int a5); // void __userpurge sub_944570(int a1@, int a2@, _DWORD *a3, char *a4, unsigned int a5, int a6, int a7); // int __stdcall DirectInput8Create(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXLoadSurfaceFromSurface(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateEffectCompilerFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateEffectFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateVolumeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateCubeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXGetShaderVersion(_DWORD); weak // int __stdcall D3DXGetShaderInputSemantics(_DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); weak // int __stdcall D3DXVec4Transform(_DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateVolumeTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateCubeTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCreateTextureFromFileInMemory(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXGetImageInfoFromFileInMemory(_DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXGetShaderConstantTable(_DWORD, _DWORD); weak // int __stdcall D3DXCompileShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXCompileShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXGetVertexShaderProfile(_DWORD); weak // int __stdcall D3DXGetPixelShaderProfile(_DWORD); weak // int __stdcall D3DXAssembleShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall D3DXAssembleShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); // int __stdcall WSACleanup(); // int __stdcall closesocket(SOCKET s); // int __stdcall select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout); // int __stdcall WSAGetLastError(); // int __stdcall shutdown(SOCKET s, int how); // int __stdcall setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen); // int __stdcall ioctlsocket(SOCKET s, int cmd, u_long *argp); // SOCKET __stdcall socket(int af, int type, int protocol); // int __stdcall _WSAFDIsSet(SOCKET fd, fd_set *); // int __stdcall connect(SOCKET s, const struct sockaddr *name, int namelen); // u_short __stdcall htons(u_short hostshort); // int __stdcall send(SOCKET s, const char *buf, int len, int flags); // int __stdcall recv(SOCKET s, char *buf, int len, int flags); int __thiscall sub_9448E0(_WORD *this, int a2, int a3); // HIMC __stdcall ImmAssociateContext(HWND, HIMC); // LONG __stdcall ImmGetCompositionStringA(HIMC, DWORD, LPVOID lpBuf, DWORD dwBufLen); // DWORD __stdcall ImmGetCandidateListA(HIMC, DWORD deIndex, LPCANDIDATELIST lpCandList, DWORD dwBufLen); char __cdecl sub_944980(int a1, signed int a2); int __cdecl sub_9449C0(int a1, unsigned int a2, unsigned int a3); void *__cdecl sub_944AC0(int a1, unsigned int a2, unsigned int a3); void __cdecl sub_944B20(int a1, void *a2); int __cdecl sub_944B30(int a1); void __cdecl sub_944B50(int a1, _DWORD *a2, unsigned int a3); void __cdecl sub_944BA0(int a1, int a2, int a3, int a4); void *__cdecl sub_944F90(int a1, void *a2); int __cdecl sub_944FF0(int a1); int __cdecl sub_945000(int a1, _DWORD *a2); int __cdecl sub_945050(int a1); void *__cdecl sub_945070(int a1); void **__cdecl sub_9450B0(char *a1, int a2, int a3, int a4, int a5, int (__cdecl *a6)(char *, size_t), int a7); int __cdecl sub_945310(char *, int); // idb char *__cdecl sub_945660(int a1, void **a2); void __cdecl sub_945A90(char *a1, int a2); unsigned __int64 __cdecl sub_945CE0(void *a1, void *a2, void *a3); void __cdecl sub_945F70(char *a1, int a2, int a3); void **__cdecl sub_946120(char *a1, int a2, int a3, int a4); int __cdecl sub_946150(_DWORD **a1, void **a2, void **a3); int __cdecl sub_946210(int *a1, int a2, int a3); size_t __cdecl sub_946240(int a1, void *a2, size_t a3); int __cdecl sub_946280(_DWORD *a1, int a2, int a3); // char *__usercall sub_9462E0@(int a1@, int a2@, char *a3); void __cdecl __noreturn sub_946370(int *a1, char *a2); _DWORD *__cdecl sub_946490(_DWORD *a1, int a2, int a3, int a4); void __cdecl __noreturn sub_9464B0(int *a1, char *a2); int __cdecl sub_946550(int a1, _BYTE *a2); void __cdecl __noreturn sub_9466C0(int, char *); // idb int __cdecl sub_9466F0(int, char *); // idb void *__cdecl sub_946730(int a1, int (__cdecl *a2)(char *, size_t), int a3); void __cdecl sub_9467C0(void *a1, int a2, int a3); void *__cdecl sub_946820(int a1, void *a2, void *a3, size_t a4); void *__cdecl sub_946840(int a1, void *a2, int a3, size_t a4); _DWORD *__cdecl sub_946860(_DWORD *a1, int a2, int a3, int a4); void *__cdecl sub_946890(int a1, size_t a2); void __cdecl sub_9468F0(int a1, void *a2); void *__cdecl sub_946920(int a1, size_t a2); int __cdecl sub_946990(unsigned __int8 *a1); void __cdecl sub_9469C0(int *a1, _DWORD *a2, unsigned int a3); char *__cdecl sub_9469F0(int a1, int a2, char *a3, int a4, size_t a5, size_t *a6); unsigned __int8 __cdecl sub_946D70(int a1, unsigned __int8 *a2); void *__cdecl sub_946DE0(int a1, void *a2, int a3); unsigned int __cdecl sub_9470B0(unsigned int a1); char __cdecl sub_9474C0(int a1, int a2, _BYTE *a3, unsigned int a4, int a5); void *__cdecl sub_947680(int a1); int __cdecl sub_947940(int *a1, unsigned __int8 *a2); signed int __cdecl sub_947990(_DWORD *a1, unsigned int a2); void __cdecl sub_947AD0(int a1, int a2, int a3); void __cdecl sub_947CA0(int a1, int a2, signed int a3); signed int __cdecl sub_947E80(int *a1, int a2, unsigned int a3); void __cdecl sub_947ED0(int *a1, int a2, unsigned int a3); void __cdecl sub_948060(int a1, int a2, unsigned int a3); signed int __cdecl sub_9481D0(int *a1, int a2, unsigned int a3); void __cdecl sub_9486F0(int *a1, int a2, unsigned int a3); void __cdecl sub_9488F0(int *a1, int a2, unsigned int a3); void __cdecl sub_948AB0(int *a1, int a2, unsigned int a3); void __cdecl sub_948D00(int a1, int a2, unsigned int a3); void __cdecl sub_948F60(int a1, int a2, unsigned int a3); void __cdecl sub_9491B0(int a1, int a2, unsigned int a3); void __cdecl sub_949350(int *a1, int a2, unsigned int a3); void __cdecl sub_9494A0(int *a1, int a2, unsigned int a3); void __cdecl sub_9495F0(int *a1, int a2, unsigned int a3); void __cdecl sub_949880(char *a1, int a2, int a3); void __cdecl sub_949A30(int a1, _DWORD *a2, unsigned int a3); void __cdecl sub_949B50(int a1, _DWORD *a2, unsigned int a3); void __cdecl sub_949C80(int a1, _DWORD *a2, int a3); int __cdecl sub_949E00(int, int, size_t); // idb unsigned int __cdecl sub_949F50(int a1); int __cdecl sub_94A220(int a1); int __cdecl sub_94A230(int a1); int __cdecl sub_94A240(int a1); unsigned int __cdecl sub_94A250(int a1, int a2); unsigned __int8 __cdecl sub_94A3F0(int *a1, int a2); int __cdecl sub_94A520(int *a1, int a2, unsigned __int8 *a3); void __cdecl sub_94A720(int a1, _BYTE *a2); int __cdecl sub_94A770(int a1, int a2); _BYTE *__cdecl sub_94A8A0(int *a1, int a2); char __cdecl sub_94A960(int a1, int a2, __int16 a3, char a4); void __cdecl sub_94AC30(int *a1, int a2); int __cdecl sub_94ADA0(int a1, int *a2, unsigned __int16 *a3); char __cdecl sub_94B450(int *a1, unsigned __int8 *a2, _WORD *a3, _BYTE *a4, _WORD *a5, int a6, int a7, int a8, int a9, int a10, int a11, __int16 a12); char __cdecl sub_94C3F0(int *a1, _BYTE *a2, int a3, int a4, char a5); void __cdecl sub_94C7C0(int *a1, int a2, int a3, int a4, int a5); char __cdecl sub_94C9E0(int *a1, int a2, _WORD *a3); char __cdecl sub_94CDA0(int *a1, _BYTE *a2, int a3, int a4); void __cdecl sub_94CF20(int a1); char __cdecl sub_94D5B0(int *a1, int a2); void __cdecl sub_94D690(int a1); void __cdecl sub_94E1B0(int a1); int __cdecl sub_94E620(int a1); int __cdecl sub_94E630(int a1); int __cdecl sub_94E650(int a1); int __cdecl sub_94E670(int a1, int a2); signed int __cdecl sub_94E690(int a1); int __cdecl sub_94E6C0(int a1); int __cdecl sub_94E6D0(int a1); int __cdecl sub_94E6E0(int a1); char __cdecl sub_94E6F0(int a1, _BYTE *a2); void __cdecl sub_94E780(int a1, char *a2); _BYTE *__cdecl sub_94E7C0(int a1, _BYTE *a2); int __cdecl sub_94E810(int a1, _BYTE *a2, int a3); char __cdecl sub_94EA60(int *a1, char *a2); int __cdecl sub_94EB40(int a1, int a2, int a3); int __cdecl sub_94EB60(int a1, int a2); signed int __cdecl sub_94EB80(int a1, int a2, _DWORD *a3); void __cdecl sub_94EBB0(int a1, int a2, int a3); void __cdecl sub_94EBE0(int a1, int a2, double a3, double a4, double a5, double a6, double a7, double a8, double a9, double a10); int __cdecl sub_94EF10(int a1, int a2, signed int a3, signed int a4, signed int a5, signed int a6, signed int a7, signed int a8, signed int a9, signed int a10); void __cdecl sub_94F0F0(int a1, int a2, double a3); void __cdecl sub_94F170(int a1, int a2, signed int a3); void __cdecl sub_94F1F0(int a1, int a2, int a3); void __cdecl sub_94F2A0(int *a1, int a2, unsigned int a3, unsigned int a4, signed int a5, signed int a6, signed int a7, int a8, int a9); void __cdecl sub_94F4D0(int a1, int a2, int a3, int a4, char a5); void __cdecl sub_94F500(int a1, int a2, void *a3, int a4, int a5, char a6, int a7, void *a8, int a9); void __cdecl sub_94F6A0(int a1, int a2, char a3, double a4, double a5); void __cdecl sub_94F6E0(int a1, int a2, int a3, int a4, char a5); void __cdecl sub_94F710(int a1, int a2, void *a3, int a4); void __cdecl sub_94F7A0(int a1, int a2, int a3); void __cdecl sub_94F7D0(int a1, int a2, char a3); void __cdecl sub_94F8B0(int a1, int a2, int a3, char a4, void *a5, size_t a6); signed int __cdecl sub_94F9B0(int a1, _DWORD *a2, int a3, int a4); void __cdecl sub_94FBB0(int a1, _DWORD *a2, _DWORD *a3); void __cdecl sub_94FBE0(int a1, int a2, void *a3, size_t a4, int a5); int __cdecl sub_94FC70(int a1, int a2, int a3, int a4); void __cdecl sub_94FDB0(int a1, int a2, int a3, int a4); // char *__cdecl strtok_s(char *Str, const char *Delim, char **Context); // errno_t __cdecl _splitpath_s(const char *FullPath, char *Drive, size_t DriveSize, char *Dir, size_t DirSize, char *Filename, size_t FilenameSize, char *Ext, size_t ExtSize); // void __cdecl _makepath(char *, const char *, const char *, const char *, const char *); // void *__cdecl operator new[](size_t, const struct std::nothrow_t *); idb _DWORD *__cdecl sub_950440(int a1, float a2, int a3); _DWORD *__cdecl sub_950B40(int a1, float a2); _DWORD *__cdecl sub_951190(int a1, float a2); _DWORD *__cdecl sub_951A70(int a1, float a2); unsigned int __cdecl sub_952100(int a1, int a2, float a3); _DWORD *__cdecl sub_952220(int a1, int a2, float a3, int a4); char __thiscall sub_952400(void *this, int a2); int __cdecl sub_952440(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8); int __cdecl sub_952560(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8); int __cdecl sub_952570(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); _BYTE *__cdecl sub_952650(int a1, int a2, rsize_t DstSize, void *Dst, int a5, int a6, void *Src); int __cdecl sub_9526E0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); int __cdecl sub_9527B0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); _BYTE *__cdecl sub_952870(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, _BYTE *a7); int __cdecl sub_952920(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); int __cdecl sub_952A00(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8); int __cdecl sub_952A80(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8); int __cdecl sub_952B10(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8); _BYTE *__cdecl sub_952B90(int a1, int a2, rsize_t DstSize, void *Dst, int a5, int a6, void *Src, int a8); _BYTE *__cdecl sub_952C20(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, _BYTE *a7, _DWORD *a8); int __cdecl sub_952CC0(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8); int __cdecl sub_952D40(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8); int __cdecl sub_952DD0(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8); int __cdecl sub_952E50(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); int __cdecl sub_952EF0(int a1, int a2, int a3, _WORD *a4, int a5, int a6, unsigned __int8 *a7); int __cdecl sub_952FB0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7); int __cdecl sub_953040(int a1, int a2, int a3, int a4, int a5, int a6, _BYTE *a7); int *__thiscall sub_9530D0(int *this, char *a2); void *__thiscall sub_9532E0(void *this, char a2); char __thiscall sub_953310(_DWORD *this, char *Src); char __thiscall sub_9533F0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); int __thiscall sub_953540(_DWORD *this, char *Src, int a3); char __stdcall sub_953650(_DWORD *a1, int a2); char __stdcall sub_953870(_DWORD *a1); char __stdcall sub_9538C0(_DWORD *a1); _DWORD *__thiscall sub_953910(void *this, int a2, _DWORD *a3); unsigned int __thiscall sub_953E10(void *this, int a2, int a3, int a4, int a5); void *__thiscall sub_953ED0(void *this, int a2, _DWORD *a3, int a4, int a5); void *__stdcall sub_953F30(int *a1, int a2, int a3); _DWORD *__stdcall sub_954080(int a1, _DWORD *a2); void __cdecl sub_9543D0(unsigned int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, int a7); void __cdecl sub_954620(int a1, int a2, int a3, int a4, void *a5, int a6, int a7); void __cdecl sub_954740(unsigned int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, int a7); _WORD *__cdecl sub_9549F0(int a1, int a2, int a3, _WORD *a4, int a5, __int16 *a6, unsigned __int8 *a7); _BYTE *__cdecl sub_954CE0(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, unsigned __int8 *a7); _DWORD *__cdecl sub_954DB0(int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, unsigned __int8 *a7); _WORD *__cdecl sub_955050(int a1, int a2, int a3, _WORD *a4, int a5, __int16 *a6, unsigned __int8 *a7); _DWORD *__cdecl sub_955380(int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, unsigned __int8 *a7); int __thiscall sub_955680(_DWORD *this); void *__thiscall sub_9556C0(void *this, char a2); LONG __thiscall sub_9556F0(_DWORD *this); int __thiscall sub_955790(char *this); _DWORD *__thiscall sub_9557A0(_DWORD *this, int a2); _DWORD *__thiscall sub_9557F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5); char __stdcall sub_955A60(int a1, int a2, unsigned int a3); _DWORD *__thiscall sub_9563A0(void *this, _DWORD *a2, unsigned int a3, int a4); char *__thiscall sub_956540(char *this); void *__thiscall sub_9566F0(void *this, char a2); void __thiscall sub_956720(_DWORD *this); void *__thiscall sub_956780(void *this, char a2); _DWORD *__thiscall sub_9567B0(_DWORD *this); LONG __thiscall sub_9567F0(_DWORD *this); void *__thiscall sub_956850(void *this, char a2); char __thiscall sub_956880(_DWORD *this, int a2); int __thiscall sub_9568D0(_DWORD *this, int a2); void *__thiscall sub_9568E0(void *this, char a2); void *__thiscall sub_956910(void *this, char a2); int __thiscall sub_956940(_DWORD *this, const char *a2); int __thiscall sub_9569D0(_DWORD *this); void *__thiscall sub_956A10(void *this, char a2); LONG __thiscall sub_956A40(_DWORD *this); unsigned int __thiscall sub_956B30(_DWORD *this, unsigned int a2, char a3); _DWORD *__thiscall sub_956B60(_DWORD *this); void *__thiscall sub_956BF0(void *this, char a2); void __thiscall sub_956C20(_DWORD *this, int a2); _DWORD *__thiscall sub_956C70(_DWORD *this); LONG __thiscall sub_956CB0(_DWORD *this); int __thiscall sub_956CC0(_DWORD *this); int __thiscall sub_956CD0(_DWORD *this); char __thiscall sub_956CE0(_BYTE *this); char __thiscall sub_956CF0(_BYTE *this); int __thiscall sub_956D00(_DWORD *this); char __thiscall sub_956D10(_BYTE *this); unsigned int __thiscall sub_956D20(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_956D40(_DWORD *this, unsigned int a2); unsigned int __thiscall sub_956D60(_DWORD *this, unsigned int a2); int __thiscall sub_956D80(_DWORD *this, int a2); int __thiscall sub_956D90(_DWORD *this, int a2); void __thiscall sub_956DA0(_DWORD *this, char a2); void __thiscall sub_956DC0(_DWORD *this, char a2); char __thiscall sub_956DE0(_BYTE *this, char a2); char __thiscall sub_956DF0(_BYTE *this, char a2); void *__thiscall sub_956E00(void *this, char a2); _DWORD *__thiscall sub_956E30(_DWORD *this); LONG __thiscall sub_956E70(void **this); char __thiscall sub_956ED0(int this, _BYTE *a2); char __thiscall sub_956EF0(_DWORD *this, _DWORD *a2); char __thiscall sub_956F10(_DWORD *this, _DWORD *a2); char __thiscall sub_956F30(int this, float *a2); char __thiscall sub_956F50(int this, float *a2); char __thiscall sub_956F80(int this, float *a2); char __thiscall sub_956FB0(int this, float **a2); char __thiscall sub_956FF0(int this, float *a2); void __thiscall sub_957020(int this, int a2); void __thiscall sub_9570A0(int this, char a2); void __thiscall sub_957110(int this, int a2); void __thiscall sub_957180(int this, float a2); float *__thiscall sub_9571E0(int this, float *a2); float *__thiscall sub_957250(int this, float *a2); float *__thiscall sub_9572C0(int this, float *a2); float *__thiscall sub_957340(int this, float *a2); void __thiscall sub_9573C0(_DWORD *this, char a2); void __thiscall sub_9573E0(_DWORD *this, char a2); char __thiscall sub_957400(_DWORD *this, int a2, int a3); char __thiscall sub_957430(int this, float a2, float a3); char __thiscall sub_957460(int this, float *a2, float *a3); char __thiscall sub_9574A0(int this, float *a2, float *a3); char __thiscall sub_9574F0(int this, float *a2, float *a3); char __thiscall sub_957550(int this, float *a2, float *a3); char __thiscall sub_9575B0(int this, float *a2, float *a3); void *__thiscall sub_957610(void *this, char a2); char __thiscall sub_957640(int this, float *a2); char __thiscall sub_957690(_DWORD *this, int a2, rsize_t DstSize); void __thiscall sub_9576C0(int this, char *Src); errno_t __thiscall sub_9577A0(int this, void *Src); float *__thiscall sub_957810(int this, float *a2); errno_t __thiscall sub_9578B0(int this, void *Src); void __thiscall sub_957920(int this, int a2, char *Src); int __thiscall sub_957A40(int this, void *Src, int a3, int a4, int a5); char __thiscall sub_957AE0(_DWORD *this, int a2, int a3, void *Src, void *a5); int *__thiscall sub_957BE0(int *this, int a2); void **__thiscall sub_957EF0(void **this, char *Src, int a3, int a4); void *sub_957F80(); void **__thiscall sub_957F90(void *this, char a2); _BYTE *__thiscall sub_957FD0(unsigned __int8 **this, _BYTE *a2); int __thiscall sub_9580E0(_DWORD *this, _BYTE *a2); char *__thiscall sub_9583A0(_DWORD *this, int a2); char *__thiscall sub_958580(_DWORD *this, int a2); _DWORD *__thiscall sub_9587C0(_DWORD *this); _DWORD *__thiscall sub_958870(_DWORD *this, int a2); unsigned int __thiscall sub_958B80(int this, int a2, _BYTE *a3); _BYTE *__thiscall sub_958BC0(int this, int a2, _BYTE *a3); _BYTE *__thiscall sub_958BF0(unsigned __int16 *this, char *a2, int a3); _BYTE *__thiscall sub_958C30(unsigned __int16 *this, _BYTE *a2, _BYTE *a3); _BYTE *__thiscall sub_958C90(_DWORD *this, unsigned __int8 *a2, _BYTE *a3); _BYTE *__thiscall sub_958D00(_DWORD *this, unsigned __int8 *a2, _BYTE *a3); _BYTE *__thiscall sub_958D70(unsigned __int16 *this, int a2, _BYTE *a3); _BYTE *__thiscall sub_958DC0(unsigned __int16 *this, int a2, _BYTE *a3); bool __stdcall sub_958E10(const char *a1); char *__thiscall sub_958E50(char *this); char *__thiscall sub_958EF0(void *this, char a2); unsigned int __thiscall sub_958F40(_WORD *this, int a2, void *Dst, rsize_t DstSize); int __thiscall sub_959090(int this, int a2); char __thiscall sub_959320(char *this, signed int a2, _DWORD *a3, _DWORD *a4, char *a5, _BYTE *a6, _DWORD *a7); _DWORD *__thiscall sub_9596E0(void *this, int a2, unsigned int a3); void __thiscall sub_9599A0(_WORD *this, _BYTE *a2, char *a3, int a4); void __thiscall sub_959A20(_WORD *this, char *a2, char *a3, int a4); bool __stdcall sub_959AA0(const char *a1); _DWORD *__thiscall sub_959B10(char *this); char __thiscall sub_959B60(char *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, void *a5, _BYTE *a6, _DWORD *a7); _DWORD *__thiscall sub_959D90(_WORD *this, int a2, unsigned int a3); bool __stdcall sub_95A230(const char *a1); void *__stdcall sub_95A250(void *a1, __int16 a2, 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); _DWORD *__thiscall sub_95A2C0(char *this); void *__thiscall sub_95A310(void *this, char a2); char __thiscall sub_95A340(int this, _DWORD *a2, _DWORD *a3, _DWORD *a4, void *a5, _BYTE *a6, _DWORD *a7); char __cdecl sub_95A840(int a1, _DWORD *a2, char 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, char 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); char __cdecl sub_95A900(int a1, _DWORD *a2, char a3, int a4, int a5, int a6, int a7, char a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, char 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); char __cdecl sub_95AD70(int a1, _DWORD *a2, char 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, char 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); _DWORD *__thiscall sub_95B2E0(char *this, int a2, int a3); bool __stdcall sub_95B600(const char *a1); char *__thiscall sub_95B620(char *this); char __thiscall sub_95B680(char *this, int a2, int a3, int a4, int a5, int a6, LPCRITICAL_SECTION lpCriticalSection); _DWORD *__thiscall sub_95B960(char *this, _DWORD *a2, int a3); _DWORD *__thiscall sub_95BF40(_DWORD *this); LONG __thiscall sub_95BF80(_DWORD *this); void __thiscall sub_95BFC0(void **this, char *Src); void __thiscall sub_95C020(void **this, char *Src); void **__thiscall sub_95C080(void *this, char a2); int sub_95C0D0(); void __cdecl loc_95C0E0(); // idb int __thiscall sub_95C100(_DWORD *this, char a2); char __thiscall sub_95C120(_DWORD *this, int a2, int a3, int a4); char __thiscall sub_95C160(_DWORD *this, int a2, int a3, int a4); // char __usercall sub_95C1D0@(int a1@, int a2@); _DWORD *__thiscall sub_95C280(_DWORD *this, int a2); char *sub_95C2F0(); LONG __thiscall sub_95C300(_DWORD *this); int __thiscall sub_95C430(_DWORD *this); void *__thiscall sub_95C470(void *this, char a2); // char __userpurge sub_95C4A0@(int a1@, int a2@, char *Src); int __thiscall sub_95C7F0(_DWORD *this, char *a2); int __cdecl sub_95C8F0(int a1); bool __cdecl sub_95C900(signed int a1, signed int a2); char __cdecl sub_95C970(int a1, signed int a2); char __cdecl sub_95C9E0(int a1, _DWORD *a2); char __cdecl sub_95CA70(int a1, void (__stdcall ****a2)(signed int)); int __cdecl sub_95CB00(_BYTE *a1); rsize_t __thiscall sub_95CB50(void *this, char *Src); rsize_t __thiscall sub_95CB70(void *this, char *Src); int __thiscall sub_95CB90(_DWORD *this); void *__thiscall sub_95CBD0(void *this, char a2); void *__thiscall sub_95CC00(void *this, char a2); void *__thiscall sub_95CC30(void *this, char a2); _DWORD *__thiscall sub_95CC60(_DWORD *this, char *Src, char a3); const char **__thiscall sub_95CCD0(_DWORD *this, const char *a2); char __thiscall sub_95CD40(_DWORD *this, int a2, _DWORD *a3); char __thiscall sub_95CE50(_DWORD *this, int a2, _DWORD *a3); _DWORD *__stdcall sub_95CF10(int a1, int a2); signed int __stdcall sub_95CFA0(int a1, int a2); int __thiscall sub_95D0B0(_DWORD *this); void __thiscall sub_95D0F0(_BYTE *this); void *__thiscall sub_95D160(void *this, char a2); void **__thiscall sub_95D190(void *this, char a2); void **__thiscall sub_95D1D0(void *this, char a2); LONG __thiscall sub_95D210(_DWORD *this); const char **__thiscall sub_95D450(_DWORD *this, char *Src, int a3, int a4); int __thiscall sub_95D4D0(_DWORD *this); void *__thiscall sub_95D7C0(void *this, char a2); bool __thiscall sub_95D7F0(_DWORD *this, signed int a2); char __thiscall sub_95D8E0(_DWORD *this, int a2); bool __thiscall sub_95D970(_DWORD *this, signed int a2); char __thiscall sub_95DA00(_DWORD *this, void *a2); void *__thiscall sub_95DB70(void *this, char a2); bool __thiscall sub_95DBA0(const char **this, _DWORD *a2, signed int a3); bool __thiscall sub_95DCE0(void **this, void *a2); int __thiscall sub_95DEB0(_DWORD *this, int a2); void **__thiscall sub_95E070(_DWORD *this, int a2, void *a3); bool __thiscall sub_95E380(const char **this, char *Filename, int a3); bool __thiscall sub_95E3D0(void **this, char *Filename); void *__thiscall sub_95E420(void *this, char a2); _DWORD *__thiscall sub_95E450(_DWORD *this); char **__thiscall sub_95E5A0(char **this, char *Src, int a3, int a4); int __thiscall sub_95E600(_DWORD *this); const char **__thiscall sub_95E670(_DWORD *this, char *a2); char __thiscall sub_95E6D0(_DWORD *this, char *Src, int a3, int a4); _DWORD *__thiscall sub_95E760(_DWORD *this); void __thiscall sub_95E7A0(_DWORD *this); char __thiscall sub_95E820(int this, _BYTE *a2); char __thiscall sub_95E840(_DWORD *this, _DWORD *a2, _DWORD *a3); char __thiscall sub_95E870(_DWORD *this, _DWORD *a2); char __thiscall sub_95E890(int this, float *a2); char __thiscall sub_95E8B0(int this, float *a2); char __thiscall sub_95E8E0(int this, float *a2); char __thiscall sub_95E910(int this, float **a2); char __thiscall sub_95E950(int this, float *a2); void __thiscall sub_95E980(int this, int a2); void __thiscall sub_95EA00(int this, char a2); void __thiscall sub_95EA70(int this, int a2); void __thiscall sub_95EAE0(int this, float a2); float *__thiscall sub_95EB40(int this, float *a2); float *__thiscall sub_95EBB0(int this, float *a2); float *__thiscall sub_95EC20(int this, float *a2); float *__thiscall sub_95ECA0(int this, float *a2); void __thiscall sub_95ED20(_DWORD *this, char a2); void __thiscall sub_95ED40(_DWORD *this, char a2); char __thiscall sub_95ED60(_DWORD *this, int a2, int a3); char __thiscall sub_95ED90(int this, float a2, float a3); char __thiscall sub_95EDC0(int this, float *a2, float *a3); char __thiscall sub_95EE00(int this, float *a2, float *a3); char __thiscall sub_95EE50(int this, float *a2, float *a3); char __thiscall sub_95EEB0(int this, float *a2, float *a3); char __thiscall sub_95EF10(int this, float *a2, float *a3); _DWORD *__thiscall sub_95EF70(char *this); void __thiscall sub_95F3B0(void **this, char *Src); char __thiscall sub_95F410(int this, float *a2); char __thiscall sub_95F460(_DWORD *this, int a2, rsize_t DstSize); errno_t __thiscall sub_95F490(int this, void *Src); float *__thiscall sub_95F500(int this, float *a2); errno_t __thiscall sub_95F5A0(int this, void *Src); void __thiscall sub_95F610(int this, int a2, char *Src); char __thiscall sub_95F730(const char **this, signed int a2); char __thiscall sub_95F910(void **this, int a2); char __thiscall sub_95FB00(unsigned __int8 *this, int a2); char __thiscall sub_95FB40(const char **this, signed int a2); char __thiscall sub_95FB90(char *this, signed int a2); char __thiscall sub_95FC00(char *this, signed int a2); char __thiscall sub_95FC70(char *this, signed int a2); char __thiscall sub_95FCE0(char *this, signed int a2); char __thiscall sub_95FD50(char *this, int a2); char __thiscall sub_95FD80(char *this, signed int a2); bool __thiscall sub_95FDF0(const char **this, signed int a2); char __thiscall sub_95FE40(char *this, signed int a2); char __thiscall sub_95FF40(_BYTE *this, int a2); char __thiscall sub_95FF80(int this, int a2); char __thiscall sub_95FFE0(char *this, signed int a2); char __thiscall sub_960050(char *this, signed int a2); char __thiscall sub_9600C0(char *this, signed int a2); char __thiscall sub_960130(char *this, signed int a2); char __thiscall sub_9601A0(char *this, signed int a2); char __thiscall sub_960210(char *this, int a2); bool __thiscall sub_960240(void **this, int a2); char __thiscall sub_960290(char *this, int a2); void *__thiscall sub_9603A0(void *this, char a2); _DWORD *__thiscall sub_9603D0(_DWORD *this, char *a2); int __thiscall sub_960430(_DWORD *this); void *__thiscall sub_960470(void *this, char a2); int __thiscall sub_9604A0(_DWORD *this); // char __userpurge sub_960510@(int a1@, int a2@, int a3); char __thiscall sub_960570(_DWORD *this, char *Src, int a3, int a4, int a5); char __thiscall sub_960610(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_9606D0(_DWORD *this, char *Src, int a3, int a4, float a5, float a6, float a7); char __thiscall sub_9607A0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_9608B0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_9609E0(_DWORD *this, char *a2, int a3, int a4, void *Src, int a6, int a7); char __thiscall sub_960AD0(_DWORD *this, char *Src, int a3, char a4, int a5); char __thiscall sub_960BE0(_DWORD *this, char *a2, int a3, int a4, void *Src); char __thiscall sub_960C90(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_960D90(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7); char __thiscall sub_960EA0(_DWORD *this, char *Src, int a3, int a4, int a5, char *a6); bool __thiscall sub_960F40(_DWORD *this, signed int a2); _DWORD *__thiscall sub_960FB0(_DWORD *this); bool __thiscall sub_961000(_DWORD *this, int a2); void *__thiscall sub_9610B0(void *this, char a2); int __thiscall sub_9610E0(_DWORD *this, const char *a2); _DWORD *__thiscall sub_961140(_DWORD **this, int a2, const char *a3); signed int __thiscall sub_9611D0(_DWORD *this, const char *a2); void **__stdcall sub_961240(char *a1, int a2, int a3, int a4, int a5, char *a6, rsize_t DstSize, int a8, void *Src, char a10); bool __stdcall sub_9612F0(int a1, _DWORD *a2, int a3, int a4); bool __stdcall sub_961690(int a1, _DWORD *a2, int a3, int a4); void **__thiscall sub_961A60(void *this, char a2); int __thiscall sub_961AC0(_DWORD *this); void *__thiscall sub_961B00(void *this, char a2); char __thiscall sub_961B30(const char **this, signed int a2); char __thiscall sub_961C10(void **this, int a2); LONG __thiscall sub_961D20(_DWORD *this); char __thiscall sub_961E60(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); _DWORD *__thiscall sub_961F10(_DWORD *this, int a2, _DWORD *a3); _DWORD *__thiscall sub_962030(_DWORD *this, int a2, _DWORD *a3); bool __thiscall sub_962150(char *this, int a2); bool __thiscall sub_962190(char *this, int a2); char __thiscall sub_9621D0(_DWORD **this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); char __thiscall sub_962270(_DWORD **this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11); bool __thiscall sub_962310(_DWORD *this, signed int a2); char __thiscall sub_9624B0(_DWORD *this, int a2); _DWORD *__thiscall sub_962A00(_DWORD *this); void *__thiscall sub_962AF0(void *this, char a2); char __thiscall sub_962B20(_DWORD **this, char a2, char *a3, int a4, int a5, int a6, int a7, char *a8, rsize_t DstSize, int a10, void *Src, char a12); void *__thiscall sub_962BC0(void *this, char a2); _DWORD *__thiscall sub_962BF0(void *this, char a2); int __thiscall sub_962C30(_DWORD *this); void *__thiscall sub_962C70(void *this, char a2); LONG __thiscall sub_962CA0(_DWORD *this); int __thiscall sub_962D20(_DWORD *this, char *Src, char a3); char __thiscall sub_962E10(_DWORD *this, int a2); _DWORD *__thiscall sub_962EB0(_DWORD *this); void *__thiscall sub_962F20(void *this, char a2); char __thiscall sub_962F50(_DWORD *this, int a2); rsize_t __thiscall sub_963040(void *this, char *Src); _DWORD *__thiscall sub_963060(_DWORD *this); _DWORD *__thiscall sub_963090(_DWORD *this); void *__thiscall sub_9630C0(void *this, char a2); _DWORD *__thiscall sub_9630F0(_DWORD *this); void __thiscall sub_963160(void **this); int __thiscall sub_963290(_DWORD *this); int __thiscall sub_9632D0(_DWORD *this); _DWORD *__thiscall sub_963310(_DWORD *this, unsigned int a2, _DWORD *a3); bool __thiscall sub_963380(_DWORD *this, signed int a2); char __thiscall sub_963400(_DWORD *this, int a2); char __thiscall sub_963470(_DWORD *this, int a2); char __thiscall sub_9634E0(_DWORD *this, void *a2); char __thiscall sub_9635C0(unsigned int *this, unsigned int a2, unsigned int a3); char __thiscall sub_963630(const char **this, signed int a2); char __thiscall sub_963750(void **this, void *a2); char __thiscall sub_963960(_DWORD *this, int a2, int a3); float *__thiscall sub_963C50(float *this); _DWORD *__thiscall sub_963CB0(_DWORD *this); _DWORD *__thiscall sub_963CE0(_DWORD *this); char __thiscall sub_963D10(_DWORD *this, int a2); void __thiscall sub_963D20(void **this); bool __thiscall sub_963D70(const char **this, signed int a2); char __thiscall sub_963F20(const char **this, signed int a2); bool __thiscall sub_963FE0(void **this, int a2); char __thiscall sub_9641A0(void **this, int a2); _DWORD *__thiscall sub_964260(_DWORD *this); rsize_t __thiscall sub_964290(void *this, char *Src); rsize_t __thiscall sub_9642B0(void *this, char *Src); rsize_t __thiscall sub_9642D0(void *this, char *Src); rsize_t __thiscall sub_9642F0(void *this, char *Src); rsize_t __thiscall sub_964310(void *this, char *Src); rsize_t __thiscall sub_964330(void *this, char *Src); rsize_t __thiscall sub_964350(void *this, char *Src); rsize_t __thiscall sub_964370(void *this, char *Src); bool __thiscall sub_964390(const char **this, signed int a2); bool __thiscall sub_9643F0(const char **this, signed int a2); void *__thiscall sub_964450(void *this, char a2); _DWORD *__thiscall sub_964480(_DWORD *this); void __thiscall sub_9644F0(void **this); int __thiscall sub_964630(_DWORD *this); int __thiscall sub_964670(_DWORD *this); int __thiscall sub_9646B0(_DWORD *this); float *__thiscall sub_9646C0(_DWORD *this, unsigned int a2, char a3); char __thiscall sub_964760(void **this, void *a2); bool __thiscall sub_964890(void **this, void *a2); char __thiscall sub_9649B0(_DWORD *this, int a2, int a3); bool __thiscall sub_964C30(_DWORD *this, signed int a2); bool __thiscall sub_964CB0(const char **this, signed int a2); char __thiscall sub_964DA0(_DWORD *this, int a2); char __thiscall sub_964E70(void **this, void *a2); _DWORD *__thiscall sub_965010(_DWORD *this); // _DWORD __stdcall unknown_libname_39(_DWORD); weak int __thiscall sub_965050(_DWORD *this); int __thiscall sub_965060(_DWORD *this, int a2); int __thiscall sub_965070(_DWORD *this); char __thiscall sub_965080(_BYTE *this); // void __thiscall Concurrency::details::_UnrealizedChore::_SetRuntimeOwnsLifetime(Concurrency::details::_UnrealizedChore *this, bool); idb char __thiscall sub_9650A0(_BYTE *this); // void __thiscall Concurrency::details::_UnrealizedChore::_SetDetached(Concurrency::details::_UnrealizedChore *this, bool); idb int __thiscall sub_9650C0(_DWORD *this); // void __thiscall Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot(Concurrency::details::ExecutionResource *this, struct Concurrency::details::VirtualProcessorRoot *); idb int __thiscall sub_9650E0(_DWORD *this, int a2); char __thiscall sub_9650F0(_BYTE *this, char a2); char __thiscall sub_965100(_BYTE *this); char __thiscall sub_965110(_BYTE *this, char a2); char __thiscall sub_965120(_BYTE *this, int a2); char __thiscall sub_965270(_BYTE *this, int a2); int __cdecl sub_9653D0(char *); // idb char __cdecl sub_966740(int a1, char *a2, int a3); char __cdecl sub_967020(int a1, _DWORD *a2); char __cdecl sub_967720(int a1, _DWORD *a2); char __cdecl sub_967760(int a1, _DWORD *a2); char __cdecl sub_967880(int a1, _DWORD *a2); char __cdecl sub_9678E0(int a1, _DWORD *a2); char __cdecl sub_967980(int a1, _DWORD *a2); char __cdecl sub_967A20(int a1, _DWORD *a2); char __cdecl sub_967A60(int a1, _DWORD *a2); char __cdecl sub_967AE0(int a1, _DWORD *a2); char __cdecl sub_967B10(int a1, _DWORD *a2); char __cdecl sub_967B70(int a1, int a2, int *a3); char __thiscall sub_967D60(_DWORD *this, int a2); char __thiscall sub_967D70(_DWORD *this, unsigned int a2); char __thiscall sub_967D80(_DWORD *this, int a2); void *__thiscall sub_967D90(void *this, char a2); int __thiscall sub_967DC0(_DWORD *this); int __thiscall sub_967DE0(_DWORD *this); int __thiscall sub_967DF0(_DWORD *this); void *__thiscall sub_967E30(void *this, char a2); int __thiscall sub_967E60(_DWORD *this); _DWORD *__thiscall sub_967ED0(_DWORD *this, int ArgList, int a3, char a4, char a5); bool __thiscall sub_967FF0(_DWORD *this, signed int a2); _DWORD *__thiscall sub_9680D0(_DWORD *this); char __thiscall sub_968120(_DWORD *this, int a2); int __thiscall sub_968240(void *this); rsize_t __thiscall sub_968250(int this, char *Src); char __thiscall sub_968270(_BYTE *this, char a2); const char *__cdecl sub_968280(int a1); const char *__cdecl sub_968380(int a1); _DWORD *__thiscall sub_968450(_DWORD *this, int a2, int a3); signed int __stdcall sub_968460(int a1); void *__thiscall sub_968470(void *this, char a2); int __thiscall sub_9684A0(_DWORD *this); int __thiscall sub_9684C0(_DWORD *this); unsigned int __thiscall sub_9684E0(_DWORD *this, _DWORD *a2, unsigned int *a3); int __thiscall sub_9685C0(_DWORD *this); char __thiscall sub_968600(_DWORD *this, int a2); void *__thiscall sub_9686C0(void *this, char a2); int __fastcall sub_9686F0(void **a1); char __thiscall sub_968770(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_9688A0(const char **this, signed int a2); char __thiscall sub_968960(_DWORD *this, int a2); _DWORD *__thiscall sub_968A20(_DWORD *this); char __thiscall sub_968A70(void **this, int a2); signed int __thiscall sub_968B80(int this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8); int __thiscall sub_968B90(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); int __thiscall sub_968BA0(_DWORD **this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9); _DWORD *__thiscall sub_968BB0(int this, int a2, int a3, _DWORD *a4, int a5); int __thiscall sub_968BC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); char __thiscall sub_968BE0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); char __thiscall sub_968C50(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4); char __thiscall sub_968CC0(_DWORD *this); // int __usercall sub_968CF0@(int a1@, int a2@, int a3@, int a4); char __stdcall sub_968DC0(char *FullPath, char *DstBuf, size_t SizeInBytes); char __stdcall sub_968E60(char *FullPath, char *DstBuf, size_t SizeInBytes); int __thiscall sub_968F00(int this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9); char __thiscall sub_969010(void *this, int a2); char __stdcall sub_969140(int a1); char __thiscall sub_969250(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); void __thiscall sub_9696C0(_DWORD *this); void *__thiscall sub_969720(void *this, char a2); LONG __thiscall sub_969750(_DWORD *this); void *sub_9697C0(); char __thiscall sub_9697D0(int this, int a2); int __thiscall sub_969830(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8); char __thiscall sub_969940(_DWORD *this, _DWORD *a2); _DWORD *__thiscall sub_969D60(_DWORD *this); void *__thiscall sub_969DD0(void *this, char a2); char __thiscall sub_969E00(const char **this, signed int a2); char __thiscall sub_969E30(void **this, int a2); bool __thiscall sub_969E70(_DWORD *this, signed int a2); char __thiscall sub_969E80(_DWORD *this, int a2); char __thiscall sub_969E90(_DWORD *this, char *a2, int a3, rsize_t DstSize, int a5, void *Src, char a7); char __thiscall sub_969F50(_DWORD *this, int a2); char __thiscall sub_969FF0(_DWORD *this, int a2); char __thiscall sub_96A090(_DWORD *this, unsigned int a2); char __thiscall sub_96A130(_DWORD *this, int a2); signed int __stdcall sub_96A1D0(int a1); _DWORD *__thiscall sub_96A2F0(_DWORD *this, int a2); char __cdecl sub_96A3C0(int a1, _DWORD *a2); char __cdecl sub_96A500(int a1, _DWORD *a2); char __cdecl sub_96A6E0(int a1, _DWORD *a2); char __cdecl sub_96A770(int a1, _DWORD *a2); char __cdecl sub_96A7F0(int a1, _DWORD *a2); char __cdecl sub_96A870(int a1, _DWORD *a2); char __cdecl sub_96A8E0(int a1, _DWORD *a2); char __cdecl sub_96A960(int a1, int a2, int *a3); char __cdecl sub_96AA60(int a1, int a2, int *a3); int **__thiscall sub_96AAE0(_DWORD *this, int **a2, int a3); void *__thiscall sub_96AB50(void *this, char a2); void __cdecl sub_96AB80(int a1, int *a2, int *a3); char **__thiscall sub_96ABB0(void *this, char *a2, int a3, int a4); char __thiscall sub_96AC20(_DWORD *this, int a2); char __thiscall sub_96ACE0(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4); void *__thiscall sub_96AFD0(void *this, char a2); char __thiscall sub_96B000(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4); void *__thiscall sub_96B2A0(void *this, char a2); void *__thiscall sub_96B2D0(void *this, char a2); char __thiscall sub_96B300(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4); void *__thiscall sub_96B500(void *this, char a2); char __stdcall sub_96B530(int a1, int a2, int a3); // void __noreturn std::vector>::_Xlen(); weak void __cdecl sub_96B690(int a1, int a2, int a3); _DWORD *__thiscall sub_96B710(_DWORD *this, char *a2); int *__thiscall sub_96B7D0(_DWORD *this, int *a2, int a3); void __thiscall sub_96BA30(void *this, void *a2); int __thiscall sub_96BA80(_DWORD *this, int a2, void *a3, int a4); char __thiscall sub_96BC30(_DWORD *this, void *a2, int a3); int __thiscall sub_96BD20(_DWORD *this, const CHAR *a2); int *__thiscall sub_96C140(_DWORD *this, int *a2, int a3, int a4); void __thiscall sub_96C200(_DWORD *this); void __thiscall sub_96C260(_DWORD *this); _DWORD *__thiscall sub_96C380(_DWORD *this); void *__thiscall sub_96C480(void *this, char a2); int __cdecl sub_96C4B0(const char *a1, const char *a2); BOOL __stdcall sub_96C4C0(char *a1); signed int __thiscall sub_96C500(_DWORD *this, int a2, int *a3, int a4, _BYTE *a5); signed int __thiscall sub_96C5C0(_DWORD *this, int a2, _DWORD *a3, int a4, _BYTE *a5); bool __thiscall sub_96C690(_DWORD *this, _BYTE *a2); void __thiscall sub_96C6C0(_DWORD *this); int __thiscall sub_96C740(_DWORD *this, const char *a2); _DWORD *__thiscall sub_96C790(_DWORD *this); void *__thiscall sub_96C820(void *this, char a2); _DWORD *__thiscall sub_96C850(_DWORD *this); LONG __thiscall sub_96C890(void **this); void *__thiscall sub_96C8D0(void *this, char a2); LONG __cdecl sub_96C900(int a1, LONG a2); void __thiscall sub_96C930(_DWORD *this); _DWORD *__thiscall sub_96C970(_DWORD *this); LONG __thiscall sub_96CA30(void **this); void *__thiscall sub_96CAF0(void *this, char a2); void __thiscall sub_96CB20(void **this); int __thiscall sub_96CB50(_DWORD *this, float a2, float a3); int __thiscall sub_96CBE0(int this); int __thiscall sub_96CC00(_DWORD); // weak char __thiscall sub_96CC10(_DWORD *this, float a2); const char *__cdecl sub_96CE50(char *a1); signed int __stdcall sub_96CEA0(int a1, int a2, int a3); void *__thiscall sub_96CEE0(void *this, char a2); char __cdecl sub_96CF10(char *Src, int a2, int a3); int __cdecl sub_96CFC0(char *Src); // idb signed int __stdcall sub_96D020(int a1); signed int __stdcall sub_96D0D0(int a1); signed int __stdcall sub_96D190(int a1, int a2, int a3, int a4, char a5, char a6); int __stdcall sub_96D490(int, int, int, int, float, char); // idb signed int __stdcall sub_96D6E0(int a1, int a2, int a3, int a4, int a5, int a6); signed int __stdcall sub_96D8F0(int a1, int a2, int a3, int a4, int a5, int a6); signed int __stdcall sub_96DB00(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); signed int __stdcall sub_96DD70(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13); signed int __stdcall sub_96DF10(int a1, int a2, int a3); signed int __stdcall sub_96E150(int a1, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8, int a9, int a10, int a11); signed int __stdcall sub_96E230(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8); signed int __stdcall sub_96E4D0(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8); int __thiscall sub_96E7D0(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7, int a8, int a9, int a10); _DWORD *__thiscall sub_96EAA0(_DWORD *this, int a2); int __cdecl SEH_401060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_401A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_670510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_403830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_403A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_402110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_404660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_404790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4048D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4049C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // int __usercall sub_96F130@(int a1@); // int __usercall sub_96F153@(int a1@); int __cdecl SEH_4060C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_404E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4050A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_405250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_405430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4054A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_405780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4078E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4076E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_407840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4067B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_406EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_407100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_407D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_407E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4079E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_407F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4081A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4084F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_408640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_408780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_408E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_409990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40AA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40AD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40BE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40CA20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40CF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D2F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D4C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40D690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40DE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40F670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40E260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40E5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40F420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_40FD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_410550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_410A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_410F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4111D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_411430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_411640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4118E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9704B0@(int a1@); int __cdecl SEH_414EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_970534@(int a1@); int __cdecl SEH_416420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_416EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_416FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_417320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_417E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_417F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_419460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4196A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_419A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41A4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41DCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41DFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41E0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41E140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41E230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41E850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41EC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41EF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41F410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_41F5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_970B00@(int a1@); int __cdecl SEH_41FF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_420270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_420410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_420B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_420D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4214D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_421C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_421CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_422E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_970CE0(int a1@); // void __usercall sub_970CE8(int a1@); // void __usercall sub_970CF0(int a1@); int __cdecl SEH_4224E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_423F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4245D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_424680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_424730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_424A00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_425280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_487000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_425EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4262C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_426E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4277E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4279D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_427E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4282B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4283B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_428630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_429CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42A300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42A440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42A720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42A820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42A8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42BD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C4F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_408F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42BF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42C210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42CB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42CC70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_971806(int a1@); int __cdecl SEH_42E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42E250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42EB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42ECC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42F110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_42F290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_430F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_431900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4319D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_431A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_431AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_431C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_432510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_432640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_432780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4328D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_434000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_434350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_434520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4347E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_434FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4359B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_435A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_435490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4377C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_437F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4380D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4382B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_438FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4394D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9723C0(int a1@); int __cdecl SEH_439B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_439FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A1F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A7F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43A980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43ABA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43ACA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AD30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43ADC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AEF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43AF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B4B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43B740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_972AB2(int a1@); // void __usercall sub_972AD5(int a1@); int __cdecl SEH_43BA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43BB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43BC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43BDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43BEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43BFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43C920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43D150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43DDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43DEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43EB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43ECB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43F6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43F870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_43F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __userpurge sub_9730B0(int a1@, int a2); // void __usercall sub_9730D3(int a1@); // void __usercall sub_9730F6(int a1@); int __cdecl SEH_440DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_440E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_441A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9731BB@(int a1@); int __cdecl SEH_441EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_442000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_442B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E0130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_442EC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_443EC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4442E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_973390@(int a1@); // void __usercall sub_973398(int a1@); int __cdecl SEH_444B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4453C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_445D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_445E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9734E0@(int a1@); int __cdecl SEH_4468C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_447800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4484A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4485D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_449300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44A410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44A550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44A8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44DB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44DC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44DD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44E2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44E570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44E770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44EAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44EEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44F480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44FD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_44FE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4511D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_451370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4514B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_451530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_451700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4518A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_451B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_973CB7(int a1@); // void __usercall sub_973CE4(int a1@); // void __usercall sub_973D11(int a1@); // void __usercall sub_973D3E(int a1@); int __cdecl SEH_4529C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4537D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4538E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_973E00@(int a1@); int __cdecl SEH_452DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_452FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_453230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_453510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_455600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_455710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_454070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_454580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4546A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4547E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_454A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_454B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_455870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_455D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97413E(int a1@); // void __usercall sub_974149(int a1@); int __cdecl SEH_4560E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_456260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4562E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_456B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_456E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4571E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_974300(int a1@); // void __usercall sub_974308(int a1@); int __cdecl SEH_457890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_459270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_459770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_459D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45A780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45A900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45AA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45C5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45CE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45D160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45D560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9746EE(int a1@); // void __usercall sub_9746F9(int a1@); int __cdecl SEH_45E350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45EB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45F9D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45FAE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45FBA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45FCB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45FE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45EFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45F0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45F2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_45F5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97499A(int a1@); // void __usercall sub_9749A5(int a1@); int __cdecl SEH_45FFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_460440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_460590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_460640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4607A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_461380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4615D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_974B30@(int a1@); // void __usercall sub_974B38(int a1@); int __cdecl SEH_460A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_974B94@(int a1@); // void __usercall sub_974B9C(int a1@); int __cdecl SEH_461120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_461230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4616B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_461D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_462A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_462B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_463020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_463490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4635E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_463910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_974DE3(int a1@); // void __usercall sub_974DEE(int a1@); int __cdecl SEH_463EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_464310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_465800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_465940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_465B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_466260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_466330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_466480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_466680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97500E(int a1@); // void __usercall sub_975034(int a1@); // void __usercall sub_97503C(int a1@); // void __usercall sub_975069(int a1@); // void __usercall sub_975074(int a1@); // void __usercall sub_9750A2(int a1@); // void __usercall sub_9750AD(int a1@); // void __usercall sub_9750DB(int a1@); int __cdecl SEH_4686B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_468820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_468ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4690B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_469890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_469930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_469A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_469B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46A6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46AFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46B640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46CB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46DF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46E530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46F620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_46FF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_470A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_470B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_470DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4717F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_471BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4732E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_421980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_47A3E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C0F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4820D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_483A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_483AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_483E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_483F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_484A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_484BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_485280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_485640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_485E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_486EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4870E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_487210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4880D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_488F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4891F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_489320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_489660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_489C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_489DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_489ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48A090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48A340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48A4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48AB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48ACF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48B450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_975F70@(int a1@); int __cdecl SEH_48BD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48CA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48D270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48D3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48D4F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48D650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48D750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48E460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48E9D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_48FCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_490410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_976223(int a1@); // void __usercall sub_97622E(int a1@); int __cdecl SEH_490E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_491800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_491A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9762F3(int a1@); // void __usercall sub_9762FE(int a1@); int __cdecl SEH_4967C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_496930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4948F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4949F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_494C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4975A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_497E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_499C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_499DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_49EEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_49F980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_49FA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A00B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D2660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A0580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A0640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A0700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A07D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A08A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A09B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A0AF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A0D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A10E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A33D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A6290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A65F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A66E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A6BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A7080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A7240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A78C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A8D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A8F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4A9150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AAC10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AB890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AC050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AC130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AC870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4ACB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4AD610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B1450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B1860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B1970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B0FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_747F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B2690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B2D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B3380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B7AD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4B9250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BBAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BC350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BC9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BD2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BF890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BF9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4BFF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4C02A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4C3F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4C6C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4C7240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4C99A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4CDAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4CDC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4CDFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4CEC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D0020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D1220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D1640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D31D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_977071(int a1@); int __cdecl SEH_4D39A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D3FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D4E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D5230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D5530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D5670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D59B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D5C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D6090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D66A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D69B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D6C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D6F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D7250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D75B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D7790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D7A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4D7D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DD8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DDC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DDD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DE110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DE270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4DE3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A1910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E0BC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E6890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E3B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E3D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E4710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E4980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E4D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E51E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E6ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E70C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A1A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E7500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E8300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E87D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E8910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E8A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E8B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4E8D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_977F0C(int a1@); // void __usercall sub_977F17(int a1@); int __cdecl SEH_4E9590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EA450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EAD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_978001@(int a1@); int __cdecl SEH_4EAE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EAED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EB370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EB5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EB850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EBB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4ED330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4ED3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4ED4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4ED680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EDDB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EDE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EE7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EEAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EEFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4EF0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F07B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F0A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F0BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F0D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F1020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F1860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F1AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F2000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F2600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F26C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F2FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F3220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F3800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F4380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9788DB(int a1@); int __cdecl SEH_4F82F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F9350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F9630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F97F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4F9D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_978A80@(int a1@); // LONG __usercall sub_978AA3@(int a1@); int __cdecl SEH_4FA4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FA600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FA790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_416AD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FB570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_978C10@(int a1@); // LONG __usercall sub_978C33@(int a1@); int __cdecl SEH_4FB840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FB9A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FBB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FC690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FC750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_978DB4(int a1@); // void __usercall sub_978DBF(int a1@); int __cdecl SEH_4FCB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FD260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FD5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FDEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FE330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FF330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FF570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4FFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5007F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_500BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_500DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_500F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5013D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_501540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_501610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_501B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_501F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_502160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5026E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5027B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5033A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5034E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5042A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_505230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5055C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_506820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_506A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_506CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_506ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_507180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5072B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_507570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_507750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_507B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_507FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5093E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5094B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5095B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5098F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_509FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50A1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_979B20@(int a1@); int __cdecl SEH_50A650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50AC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50AD30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50D130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50D280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50D3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50D6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_979CF3(int a1@); // void __usercall sub_979CFE(int a1@); // LONG __usercall sub_979D30@(int a1@); // void __usercall sub_979D38(int a1@); int __cdecl SEH_50DE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50DFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50E8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50EB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50EF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50F3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_50FBD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_979F00@(int a1@); // LONG __usercall sub_979F23@(int a1@); int __cdecl SEH_510290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_512290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5136F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_513830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_513CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_513DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_514010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_521F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5223B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5224B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5228C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5227C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51A4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51B5A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51BB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51BF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51C7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51CAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51CC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51D2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_51DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_522FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5230C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5231C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_523140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_523040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97AF70@(int a1@); // LONG __usercall sub_97AF93@(int a1@); int __cdecl SEH_523850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_524040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_524960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_524E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_529030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5290F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5291C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5293C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_529500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5296F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5297C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_529AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_529D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52A0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52AF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52B320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52B550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5252D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_526660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_526A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_526B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_526D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52BCE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52C200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52C4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52C660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52C9C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52E410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52E8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52E940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_52EB30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97B970@(int a1@); int __cdecl SEH_5312D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5315C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5322A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5323D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_532530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_532750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97BB20@(int a1@); int __cdecl SEH_532B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97BB66@(int a1@); int __cdecl SEH_5330D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_533B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_533C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_533E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_534220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_536E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5379D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_537F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_538B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_53B490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_53C350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_53C480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_53F440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_53F8D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_541690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_541780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5418C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_541FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_545900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_545D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_549220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_745C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_549720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_549D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54A1A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54A380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54A740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54A8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54ABF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54AFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54B890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97C613(int a1@); // void __usercall sub_97C61E(int a1@); int __cdecl SEH_54CC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54D100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54FA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54FB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54FCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_54FFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5570C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_557300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_558160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97C960@(int a1@); int __cdecl SEH_5589D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97C9D1@(int a1@); // void __usercall sub_97C9D9(int a1@); int __cdecl SEH_558B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_558DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_559730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55BD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_559AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55BA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55BC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55BE70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55BEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55C180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55C290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55CD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55CEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55CFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97CDC0@(int a1@); int __cdecl SEH_55DD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55EC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_560E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_560FD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_561160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_565D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_565E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5662E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_566670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97D090(int a1@); // void __usercall sub_97D09B(int a1@); // void __usercall sub_97D0C1(int a1@); // void __usercall sub_97D0CC(int a1@); // void __usercall sub_97D0D4(int a1@); // void __usercall sub_97D0DF(int a1@); // void __usercall sub_97D102(int a1@); // void __usercall sub_97D10D(int a1@); // void __usercall sub_97D115(int a1@); // void __usercall sub_97D120(int a1@); int __cdecl SEH_5671B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5672F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_567450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_567580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5681E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_568DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_569A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97D283@(int a1@); int __cdecl SEH_569C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_569DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97D372@(int a1@); // LONG __usercall sub_97D395@(int a1@); // LONG __usercall sub_97D3B8@(int a1@); // LONG __usercall sub_97D3DB@(int a1@); // LONG __usercall sub_97D3FE@(int a1@); // LONG __usercall sub_97D421@(int a1@); int __cdecl SEH_56C730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56C940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56C9F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56D9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56DB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56DCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56DDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56DF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56E090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_56F9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_570010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_4539F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_570120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_570DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_570F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_571D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_572560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_573450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97DCBC@(int a1@); int __cdecl SEH_573FD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_574120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5743A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5745A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_574CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_574F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_575210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5757D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_575B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_575D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_575E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_575F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_576070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_577460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5775E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5786F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5787C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5789E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_578FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57A250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57A3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57AFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57B050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57B590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57B620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57BAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57CED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57D040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97E4D3(int a1@); // void __usercall sub_97E4DE(int a1@); int __cdecl SEH_57D2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57E070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57E140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_57EAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5808C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_580A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_581CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_582560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_582FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5839B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_585580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_585880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F6530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_586040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5863A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_586500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5866D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5867D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_583CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5841D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_584450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_584530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_584630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_584800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EF350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_586EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_587060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5872E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F76C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_587C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97EE83(int a1@); // void __usercall sub_97EE8E(int a1@); int __cdecl SEH_588E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5890D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97EF0D(int a1@); // void __usercall sub_97EF15(int a1@); // void __usercall sub_97EF1D(int a1@); // void __usercall sub_97EF25(int a1@); int __cdecl SEH_589E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97EF90(int a1@); int __cdecl SEH_58DB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E5D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58E940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97F150@(int a1@); int __cdecl SEH_58EC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58EFA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58F130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58F440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_58F590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97F239@(int a1@); int __cdecl SEH_591490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5915D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_592990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_592AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_592F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5957E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_595A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_595B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_596190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_596220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5972E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5976C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5982C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_598B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_598BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_598C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_599E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59A180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59ABE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59B3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59B470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59B550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59BDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59BEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59C8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59CF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59D6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59D7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97FA30(int a1@); // void __usercall sub_97FA3B(int a1@); // LONG __usercall sub_97FA60@(int a1@); int __cdecl SEH_59DF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_97FAA6@(int a1@); int __cdecl SEH_59EB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59EDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59F260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_59F7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_97FB96(int a1@); // void __usercall sub_97FB9E(int a1@); // void __usercall sub_97FBA6(int a1@); int __cdecl SEH_59FF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A12E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A15F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A1E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A2040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A2180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A22C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A28B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A2DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A4360(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A4DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A5D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A6770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_980003(int a1@); int __cdecl SEH_5A7C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A83C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A8800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A88C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A89A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A8AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5A9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ABCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ACB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AD3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ADF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AE500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AE650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AE7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AFB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5AFDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B0020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B0180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B02F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B0430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B14D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B1750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B1F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B2070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B21E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B3AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B3BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B4450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B4B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B4E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_980793(int a1@); // void __usercall sub_98079E(int a1@); int __cdecl SEH_5B58F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B5B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B5C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B62E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B6710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5B8850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_980910@(int a1@); // LONG __usercall sub_980933@(int a1@); // LONG __usercall sub_980956@(int a1@); // void __usercall sub_98095E(int a1@); // void __usercall sub_98096C(int a1@); int __cdecl SEH_5B9F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BA0C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BA220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BA350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BB340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BB3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BC210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BCD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_980BA0@(int a1@); // LONG __usercall sub_980BC3@(int a1@); int __cdecl SEH_5BE180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BE3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BEF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_980D84(int a1@); // LONG __usercall sub_980D8F@(int a1@); // void __usercall sub_980D97(int a1@); int __cdecl SEH_5BF1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5BF300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C15D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C18C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C1E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_980EE0@(int a1@); int __cdecl SEH_5C2D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C2E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_980FA0@(int a1@); // LONG __usercall sub_980FC3@(int a1@); // LONG __usercall sub_980FE6@(int a1@); int __cdecl SEH_5C4770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C48A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C51C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C56E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_981120@(int a1@); int __cdecl SEH_5C5B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C5F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C6080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C7980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C7AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C8100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C81D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C8B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C8DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C93F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C94C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5C95F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5CAB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5CAD60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5CAF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9815C0@(int a1@); int __cdecl SEH_5CC020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_981650@(int a1@); int __cdecl SEH_5CDD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5CE590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5CEB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_981740@(int a1@); int __cdecl SEH_5D0D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D10B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D1180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_981878(int a1@); // void __usercall sub_981883(int a1@); // void __usercall sub_98188E(int a1@); // void __usercall sub_981899(int a1@); // void __usercall sub_9818A1(int a1@); // void __usercall sub_9818AC(int a1@); int __cdecl SEH_5D1B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_981900@(int a1@); int __cdecl SEH_5D1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D2130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_981983(int a1@); // void __usercall sub_98198E(int a1@); int __cdecl SEH_5D2380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9819DF(int a1@); // void __usercall sub_9819EA(int a1@); // void __usercall sub_9819F2(int a1@); int __cdecl SEH_5D26A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D2750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D2DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D31A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D35C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D3980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D3C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D3FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D4380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D4A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D4B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D5260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D5650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D64C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D6780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D6D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D6E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D8630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); void sub_9820F0(); void sub_9820F8(); // void __usercall sub_982100(int a1@); int __cdecl SEH_5D74F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D7A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D80B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D8230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D84B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A28C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D8C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D8E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D8F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D92A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5D9350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DA070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DA350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DAC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DADF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DAE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DB0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DB6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DC2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DC430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DC530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DC8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DCE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D1600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DD750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_982731@(int a1@); int __cdecl SEH_5DD880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DE080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9827B0@(int a1@); int __cdecl SEH_5DE530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DE760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_982840@(int a1@); // LONG __usercall sub_982863@(int a1@); int __cdecl SEH_5DEAE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5DED60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E0370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_712F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E8B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E3E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E4850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E50A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E5250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_982B98(int a1@); // void __usercall sub_982BA0(int a1@); // void __usercall sub_982BAB(int a1@); // void __usercall sub_982BB3(int a1@); // void __usercall sub_982BBB(int a1@); // void __usercall sub_982BC3(int a1@); // void __usercall sub_982BCB(int a1@); // void __usercall sub_982BD3(int a1@); // void __usercall sub_982BDB(int a1@); // void __usercall sub_982BE3(int a1@); // void __usercall sub_982BEB(int a1@); // void __usercall sub_982BF3(int a1@); // void __usercall sub_982BFB(int a1@); // void __usercall sub_982C03(int a1@); // void __usercall sub_982C0B(int a1@); // void __usercall sub_982C13(int a1@); // void __usercall sub_982C1B(int a1@); // void __usercall sub_982C23(int a1@); int __cdecl SEH_5E8CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E8EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_982CC0@(int a1@); // LONG __usercall sub_982CE3@(int a1@); int __cdecl SEH_5E92C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5E9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EA090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EAA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EABC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EB220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EB530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EB610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EB710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ECDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ED2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ED350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ED970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5ED7B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EDC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EDF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EE0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EE630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EE810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EE930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EF130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5EF920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F0170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F06D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F0E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F1050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F1B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F1C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F2720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F2860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F3BF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F3FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F4190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F42C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F4B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F6710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F68E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F6C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F6FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F7A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F7CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5F96A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_983790@(int a1@); // LONG __usercall sub_9837B3@(int a1@); // void __usercall sub_9837BB(int a1@); // void __usercall sub_9837C9(int a1@); int __cdecl SEH_5FA430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FA590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FA6C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FB260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FB5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FB6D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FB840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98393C(int a1@); // void __usercall sub_983947(int a1@); int __cdecl SEH_5FC630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FE890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FF620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FF740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FF870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FFAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FFDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_5FFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6006C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_601670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6017C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_983CAF(int a1@); // void __usercall sub_983CBA(int a1@); int __cdecl SEH_60A7B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60AA20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60AD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60D3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60D8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60EDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60EF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60F0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60F4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_60FCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9840FE(int a1@); // void __usercall sub_984106(int a1@); // void __usercall sub_98410E(int a1@); // void __usercall sub_984116(int a1@); // void __usercall sub_98411E(int a1@); // void __usercall sub_984126(int a1@); // void __usercall sub_98412E(int a1@); // void __usercall sub_984136(int a1@); // void __usercall sub_98413E(int a1@); // void __usercall sub_984146(int a1@); // void __usercall sub_98414E(int a1@); // void __usercall sub_984156(int a1@); // void __usercall sub_98415E(int a1@); // LONG __usercall sub_984310@(int a1@); int __cdecl SEH_614020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_614700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6155D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9843C1@(int a1@); int __cdecl SEH_616370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_616A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_616C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_617390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_617C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_617D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_617ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_618380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6184E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_618890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6189E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_618CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_619090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_619540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6196F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_984786(int a1@); // void __usercall sub_98478E(int a1@); // void __usercall sub_984796(int a1@); // void __usercall sub_98479E(int a1@); // void __usercall sub_9847A6(int a1@); // void __usercall sub_9847AE(int a1@); // void __usercall sub_9847B6(int a1@); int __cdecl SEH_61AA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61B5F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61B9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61BB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61BEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9848F3(int a1@); // void __usercall sub_9848FE(int a1@); int __cdecl SEH_61CF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61D070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61D280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61DD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61E110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61E250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61ED50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_61EEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6201E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6204A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6205F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_984CB0@(int a1@); int __cdecl SEH_622D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_623790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_624080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6241B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_624310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_624480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_624770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6248A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6261C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_626B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6276A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98504D(int a1@); // void __usercall sub_985055(int a1@); // void __usercall sub_98505D(int a1@); // void __usercall sub_985065(int a1@); // void __usercall sub_98506D(int a1@); // void __usercall sub_985075(int a1@); // void __usercall sub_98507D(int a1@); // void __usercall sub_985085(int a1@); // void __usercall sub_98508D(int a1@); // void __usercall sub_985095(int a1@); // void __usercall sub_98509D(int a1@); // void __usercall sub_9850A5(int a1@); int __cdecl SEH_62B380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62B410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62B4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62C140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62C210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62DD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62DF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62C8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62CA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98533A(int a1@); // void __usercall sub_985345(int a1@); int __cdecl SEH_62CC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62D050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62E5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62F310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A29C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62F590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62FCC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62FC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_62FD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_985673@(int a1@); int __cdecl SEH_62FE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_631CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6323E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_632480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6327B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9857D2(int a1@); int __cdecl SEH_633240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_634660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_635470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_635520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6356F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9859AE(int a1@); int __cdecl SEH_636200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_636A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_637100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6375D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6378A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6379C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_637A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_638280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6388A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_985D1D(int a1@); // void __usercall sub_985D28(int a1@); int __cdecl SEH_63A2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63A710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63A950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63BF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63B020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63C8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63CB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63CCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63CD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_986380(int a1@); // void __usercall sub_98638B(int a1@); int __cdecl SEH_63D580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63DA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63DDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63E340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63E690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63E8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63F500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63F5A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63F690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_63FA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_640A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6411A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6413E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6417D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9866E3(int a1@); // void __usercall sub_9866EE(int a1@); int __cdecl SEH_642800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_642980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_642F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6430C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6431B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_643B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_644450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_644650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_644BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_644F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_645200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_645680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_645590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_646150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6463B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_646B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_646E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_647090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_647FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6485D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_648860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_648A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_986D00@(int a1@); // LONG __usercall sub_986D23@(int a1@); int __cdecl SEH_649060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6491C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6492F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_649400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_649610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6497B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64C520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64CA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A2F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_987000(int a1@); int __cdecl SEH_64ECF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64ED70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64D8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64DE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64DF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64E0C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64F0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64F130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64F210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64F3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_650460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_64FA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65ADA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65AEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65AF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6549B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_656C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_656CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_656DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_657030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_657190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_657580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_657DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6586F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_658E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65B8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65DD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6602A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_660700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6612F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6613F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6615F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661BF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_661F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_663020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_663D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_663F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_667D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_667F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_664B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_664C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_665040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_665400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_665580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6664B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_666D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6674B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6688B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_668B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_668C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_988096(int a1@); int __cdecl SEH_669170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_669410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_669780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_669A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98819E(int a1@); int __cdecl SEH_66A310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66A740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66B6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_988300(int a1@); int __cdecl SEH_66BEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66C120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66C5D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66C880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66CCE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66CFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66D370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66F050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66F800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66F8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66F980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66FA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_66FB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_670230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_670460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_670780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E61B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_671200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6713F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E4690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_671760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_671910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FEC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_671EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_672170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_672240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6722E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_672590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6728D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_988D50@(int a1@); int __cdecl SEH_673280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_673EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_674470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_988DF7(int a1@); int __cdecl SEH_674910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_675370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6756D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_675C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_675E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6763D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6765B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_676A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_676CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6771F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_677490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_677D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_677E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6780D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_678370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6784E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_678650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67AA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67AC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67B300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67B380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67B7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67B910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9892F4(int a1@); int __cdecl SEH_67BD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67F520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67F5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67EEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67F010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_67F160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A33D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_680110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_682620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6839A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_682B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_682CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_682DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6831E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6833A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_683EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_684050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_989931@(int a1@); // void __usercall sub_989939(int a1@); int __cdecl SEH_684160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_686650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_686A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_686B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6876E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_688200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_688E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68AED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68B6C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68C380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68CCB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68CEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68CF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98A476(int a1@); int __cdecl SEH_68D190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68D370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68D4C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_65AE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68DD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68DD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68DAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68DF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68E340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98A6E3(int a1@); int __cdecl SEH_68E530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68E760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68EC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_691330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_691450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68F200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68F420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68F530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_68F6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98A91A(int a1@); // LONG __usercall sub_98A940@(int a1@); // void __usercall sub_98A948(int a1@); int __cdecl SEH_68F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6926F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_692A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_692BC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6934F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6944D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_694A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_695260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_695330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_695560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_695790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_697DE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_698F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DBD60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_699650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_699D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_699DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69B200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69B8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69BE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69CDC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69E520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69E770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69EA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_69EB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A0880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A09D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A1C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98BA20(int a1@); int __cdecl SEH_6A2750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A2830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A3000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A31F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A33E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A37A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A3A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A43F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A4570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A6830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A6930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A6A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A6BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A71F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A7330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A74C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A8F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A91A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A7910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A7C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A7FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A83F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AA5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AA7C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6A9ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C485(int a1@); // void __usercall sub_98C490(int a1@); // void __usercall sub_98C4B3(int a1@); // void __usercall sub_98C4BE(int a1@); // void __usercall sub_98C4C6(int a1@); int __cdecl SEH_96AC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AA920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AD450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AD560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AAFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AB660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AB760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6ABF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C671(int a1@); int __cdecl SEH_6ACAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AD8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96C200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6ADA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C830(int a1@); int __cdecl SEH_6ADD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C87C(int a1@); // void __usercall sub_98C8A2(int a1@); // void __usercall sub_98C8C8(int a1@); int __cdecl SEH_6AE000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AE0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AE1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AE300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C9A3(int a1@); int __cdecl SEH_6AE840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98C9FC(int a1@); // void __usercall sub_98CA04(int a1@); int __cdecl SEH_6AED40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AF040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98CA83(int a1@); // void __usercall sub_98CAA9(int a1@); // void __usercall sub_98CAB1(int a1@); int __cdecl SEH_6AF370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AF460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AF580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AF730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AF8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AFA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98CBC3(int a1@); int __cdecl SEH_6AFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6AFFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B00A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B0110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98CE20@(int a1@); // LONG __usercall sub_98CE43@(int a1@); int __cdecl SEH_6B0A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98CEB0@(int a1@); int __cdecl SEH_6B0E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B1020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98CF53@(int a1@); int __cdecl SEH_6B1330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B1400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B1950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B1A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B1D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B2470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B26A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B2790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B2880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B2970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B2E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B37C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B3B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B3CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B40A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B4180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B4AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B4D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B5140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B57D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B5870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B58F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B59E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl sub_98D63C(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl sub_98D657(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B65C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B6FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B70F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B73C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B7B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A37B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B99E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B9C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B9B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B9D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B8BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B8E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B8FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B9200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6B9C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB7C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98DCC1(int a1@); // void __usercall sub_98DCCC(int a1@); // int __usercall sub_98DCD7@(int a1@); int __cdecl SEH_6BACD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BB9F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BBB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BBBE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BBD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BDF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BD4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98DF46(int a1@); int __cdecl SEH_6BE010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C05E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C0820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C08B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BF170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BF570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BF780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6BFD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C2770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C2BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C2D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C2E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C7F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C81E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C8790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C9050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C9780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C9900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C9A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6C9C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CB400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98E590(int a1@); int __cdecl SEH_6CCA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CCAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CCF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CD340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CD770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CDF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A3C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D04D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D05E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D08C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D09E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CEEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CF060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CF4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CF860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CFC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CFDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6CFEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D1280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D1370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D0F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D1440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D14F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D1570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98EBF0@(int a1@); // LONG __usercall sub_98EC13@(int a1@); int __cdecl SEH_6D18B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D1E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D2630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D2E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D19A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D9E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D3940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D6D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D8040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D8590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6D8870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DA9A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DACE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DAED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DB040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DB6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DBAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DBBC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DC170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DC610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DC870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DC9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98F2DE(int a1@); // void __usercall sub_98F2E9(int a1@); // void __usercall sub_98F2F1(int a1@); // void __usercall sub_98F2FC(int a1@); // void __usercall sub_98F304(int a1@); // void __usercall sub_98F30F(int a1@); int __cdecl SEH_6DCFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DD410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DDAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DDC70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DDE10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DE060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DE2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DE850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DEC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DF1B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DF2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DF580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DF830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6DFF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E08E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98F6F0(int a1@); int __cdecl SEH_9A4050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E25A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E2D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E2DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E33B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E3500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E39F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98F8DD(int a1@); // void __usercall sub_98F8E5(int a1@); // void __userpurge sub_98F8ED(int a1@, int a2, int a3); int __cdecl SEH_6E4030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E4830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E4970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E5370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E5460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98FAD0@(int a1@); int __cdecl SEH_6E6840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E6B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E6CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E6E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E6F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E8110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E8FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E9520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6E9650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_98FD90(int a1@); // void __usercall sub_98FD98(int a1@); // void __usercall sub_98FDBB(int a1@); // void __usercall sub_98FDC6(int a1@); // void __usercall sub_98FDE9(int a1@); int __cdecl SEH_6EABC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EACF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98FF60@(int a1@); int __cdecl SEH_6EC2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EC6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_98FFE0@(int a1@); int __cdecl SEH_6EC9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_990026@(int a1@); int __cdecl SEH_6ED7F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EDA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EDC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EE150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EE3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EE830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EEA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EEBD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EEF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EF040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6EF120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F01B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F0F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F15A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F1680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F1720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F3350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A4260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F3770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F3820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // int __usercall sub_9905B0@(int a1@); int __cdecl SEH_6F45C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // int __usercall sub_990625@(int a1@); // void __usercall sub_99062D(int a1@); // int __usercall sub_99063B@(int a1@); // int __usercall sub_990643@(int a1@); // int __usercall sub_99064E@(int a1@); // int __usercall sub_990659@(int a1@); // int __usercall sub_990664@(int a1@); int __cdecl SEH_6F4750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // int __usercall sub_9906C9@(int a1@); // int __usercall sub_9906D1@(int a1@); // int __usercall sub_9906DC@(int a1@); // int __usercall sub_9906E7@(int a1@); // int __usercall sub_9906F2@(int a1@); // int __usercall sub_9906FD@(int a1@); // void __usercall sub_990705(int a1@); int __cdecl SEH_6F4EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F5030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F5620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F59A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F5E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F5F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F5FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F60D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9908A7(int a1@); int __cdecl SEH_6F6240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F62F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __userpurge sub_990924(int a1@, int a2, int a3, int a4, int a5, int a6, int a7); // void __usercall sub_99092C(int a1@); int __cdecl SEH_6F6470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __userpurge sub_990986(int a1@, int a2, int a3, int a4, int a5, int a6, int a7); int __cdecl SEH_6F65F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __userpurge sub_9909E0(int a1@, int a2, int a3, int a4, int a5, int a6, int a7); int __cdecl SEH_6F67B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_990A3A(int a1@); int __cdecl SEH_6F6990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F6AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __userpurge sub_990AB7(int a1@, int a2, int a3, int a4, int a5, int a6, int a7); // void __userpurge sub_990AE4(int a1@, int a2, int a3, int a4, int a5, int a6, int a7); int __cdecl SEH_6F6EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F7040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F8900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F9580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6F9720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FB090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_990C60@(int a1@); int __cdecl SEH_6FB310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FBA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FBDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FC6D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FC8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_990DA1@(int a1@); int __cdecl SEH_6FCA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FD140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_55EDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FDBE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FE8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FEB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FED10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_990F10(int a1@); int __cdecl SEH_6FDEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FE020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FEE70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FEF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FF020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FF260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FF390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FF470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_672D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_6FFC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_991230@(int a1@); int __cdecl SEH_701800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_701C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_701DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_702D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7033F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_703E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_703F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_705980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_705B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7060A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_706A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70B400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70B060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7084A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7089F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_708B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_708E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70A160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_9917F0@(int a1@); // LONG __usercall sub_991813@(int a1@); // void __usercall sub_99181B(int a1@); // void __usercall sub_991829(int a1@); int __cdecl SEH_70CF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70D080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70D1E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70D310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_70F470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7100B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7103B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_710510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_714A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // LONG __usercall sub_991B40@(int a1@); // LONG __usercall sub_991B63@(int a1@); int __cdecl SEH_714FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_715140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_717630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_717710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7177E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_717FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_718060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7188D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71A6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71A800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71AA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71A060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A44F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71ADB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71B350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71B980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71C1A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71C2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71C560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9922D8(int a1@); // void __usercall sub_9922E0(int a1@); // void __usercall sub_9922E8(int a1@); int __cdecl SEH_71CDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_71DA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_720D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_720E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_720F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_722180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_992747(int a1@); // void __usercall sub_992752(int a1@); // void __usercall sub_992775(int a1@); // void __usercall sub_992780(int a1@); int __cdecl SEH_722520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_722670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_722B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_725350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_725F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_726110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_726B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_726C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_726DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_727CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73B740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_729E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72A0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_992B5E(int a1@); int __cdecl SEH_72A530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72A620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72A6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72A810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72A980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72AA50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72AC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72AEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_992D67(int a1@); int __cdecl SEH_72AFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72BFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72C680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72C840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72C920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_72EC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_730E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_731240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_731960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_731D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_993B61(int a1@); // void __usercall sub_993B6C(int a1@); int __cdecl SEH_7325F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_732FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_733110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_739AF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_739C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_739F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_743D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73D270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73D7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73D8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73DAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_73DF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_740F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_741CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_741DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_741F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_742140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7422A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_742520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_743E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_994700(int a1@); int __cdecl SEH_744110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_744250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7443B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7444F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7445B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_744800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_744DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_99483C(int a1@); // void __usercall sub_994844(int a1@); int __cdecl SEH_744F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7458E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_745990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_745DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_746350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); // void __usercall sub_9949E0(int a1@); // void __usercall sub_994A0D(int a1@); int __cdecl SEH_7471C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_747370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7475B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_747A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_747D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_747E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_7484A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_748A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_748AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_748B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_748ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_748F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9A4570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_749F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74A020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74A120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74A220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74A2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74A560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74C6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74EAC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74EF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_74F020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_754D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_754F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8CEED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8CEF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8CFEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D03E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D0FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D10F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D1080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D13B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D14A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D1AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D1C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D21E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D2C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D3160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D3750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D3890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D3B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D4EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D4FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D5280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D5370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D54D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D5A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D6220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D6580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D6E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D7F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D8240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D83D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D84B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D86F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D8990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D8E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D90F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D9420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8D98D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DA040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DA500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DAAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DAF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DB8D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DBF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DBFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DC0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DC160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DCB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DCD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DD530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DDF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DE320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DE410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DE670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DE710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8DFDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E0340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E0860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E08E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E09A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E0A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E0C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E1370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E2200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E2540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E28E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E4980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E4AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E4F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E5310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E59E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E5B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E5BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E5FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E6310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E63F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EB290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E6B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E84F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E8CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E92D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8E9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EB440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EB500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EB670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EB7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8ECD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8ED230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8ED4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8ED610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EDB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EE030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EE120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EEC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EED60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EF2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8EF420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F0D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F0E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F0FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F29C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F3870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F3CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F43D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F42E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F4870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F4990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F5B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F5E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F61B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F62B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F66B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F6A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F7760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FA9C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F7B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F7DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F82A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F8AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F9950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F9E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F9F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FA270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FA4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FAA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FAC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FAEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FB140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FB460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FB650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FB880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FB990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FC470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FC6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FCB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FCFA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FD2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FD6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FDBB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8F14B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FEC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FEB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FECA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FEDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FF140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FF2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FF3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FF610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FF950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FFDB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_8FFFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_900160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_900330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_900990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_903330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_904750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_905850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_905BE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_905D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_906890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_906A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_906C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_907360(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_907730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_9077F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_908140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_908E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_909060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_909920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_909D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_910CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90AD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90B490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90BC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90CE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90DF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90EA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90EEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90F000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90F1F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90F250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_90CFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_911260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_911910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_911A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_911D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96B690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96BC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96BD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96C260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96C380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96C970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96CA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int __cdecl SEH_96CC10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4); int sub_999130(); _DWORD *sub_99A140(); _DWORD *sub_99A160(); void sub_99A180(); void sub_99A1B0(); void sub_99A1E0(); void sub_99A1F0(); void sub_99A200(); void sub_99A210(); void sub_99A220(); void sub_99A230(); void sub_99A260(); void sub_99A290(); int sub_99A2A0(); int sub_99A2B0(); _DWORD *sub_99A2C0(); int sub_99A310(); int sub_99A340(); int sub_99A3A0(); int sub_99A400(); int __thiscall sub_99A420(void *this); int sub_99A450(); int sub_99A460(); int sub_99A490(); _DWORD *sub_99A4F0(); int sub_99A510(); int sub_99A520(); _DWORD *sub_99A530(); int sub_99A550(); int sub_99A560(); int sub_99A570(); int sub_99A580(); signed int sub_99A5A0(); signed int sub_99A5B0(); signed int sub_99A5C0(); signed int sub_99A5D0(); signed int sub_99A5E0(); signed int sub_99A5F0(); signed int sub_99A600(); signed int sub_99A610(); signed int sub_99A620(); signed int sub_99A630(); signed int sub_99A640(); signed int sub_99A650(); signed int sub_99A660(); signed int sub_99A670(); signed int sub_99A680(); signed int sub_99A690(); signed int sub_99A6A0(); signed int sub_99A6B0(); signed int sub_99A6C0(); signed int sub_99A6D0(); signed int sub_99A6E0(); void *sub_99A6F0(); void *sub_99A700(); void *sub_99A710(); void *sub_99A720(); void *sub_99A730(); int sub_99A740(); int sub_99A760(); int sub_99A780(); int sub_99A7A0(); int sub_99A7C0(); int sub_99A7E0(); int sub_99A800(); int sub_99A820(); int sub_99A840(); int sub_99A860(); int sub_99A880(); int sub_99A8A0(); int sub_99A8C0(); int sub_99A8E0(); int sub_99A900(); int sub_99A920(); int sub_99A940(); int sub_99A960(); int sub_99A980(); int sub_99A9A0(); int sub_99A9C0(); int sub_99A9E0(); int sub_99AA10(); _DWORD *sub_99AA50(); _DWORD *sub_99AA70(); _DWORD *sub_99AA90(); int sub_99AAB0(); int sub_99AAD0(); int sub_99AAF0(); int sub_99AB10(); _DWORD *sub_99AB70(); int sub_99AB90(); int sub_99ABB0(); int sub_99ABC0(); _DWORD *sub_99ABE0(); int sub_99AC00(); int sub_99AC10(); int sub_99AC20(); int sub_99AC30(); int sub_99AC40(); int sub_99AC50(); int sub_99AC60(); int sub_99AC70(); int sub_99AC80(); int sub_99AC90(); int sub_99ACA0(); int sub_99ACB0(); int sub_99ACC0(); int sub_99ACD0(); int sub_99ACE0(); int sub_99ACF0(); int sub_99AD00(); int sub_99AD10(); int sub_99AD20(); int sub_99AD30(); int sub_99AD40(); int sub_99AD50(); int sub_99AD60(); int sub_99AD70(); int sub_99AD80(); int sub_99AD90(); int sub_99ADA0(); int sub_99ADB0(); int sub_99ADC0(); int sub_99ADD0(); int sub_99ADE0(); int sub_99ADF0(); int sub_99AE00(); int sub_99AE10(); int sub_99AE20(); int sub_99AE30(); int sub_99AE40(); int sub_99AE50(); int sub_99AE60(); int sub_99AE70(); int sub_99AE80(); int sub_99AE90(); int sub_99AEA0(); int sub_99AEB0(); int sub_99AEC0(); int sub_99AED0(); int sub_99AEE0(); int sub_99AEF0(); int sub_99AF00(); int sub_99AF10(); int sub_99AF20(); int sub_99AF30(); int sub_99AF40(); int sub_99AF50(); int sub_99AF60(); int sub_99AF70(); int sub_99AF80(); int sub_99AF90(); int sub_99AFA0(); int sub_99AFB0(); int sub_99AFC0(); int sub_99AFD0(); int sub_99AFE0(); int sub_99AFF0(); int sub_99B000(); int sub_99B010(); int sub_99B020(); int sub_99B030(); int sub_99B040(); int sub_99B050(); int sub_99B060(); int sub_99B070(); int sub_99B080(); int sub_99B090(); int sub_99B0A0(); _DWORD *sub_99B0B0(); int sub_99B0D0(); int sub_99B100(); int sub_99B180(); int sub_99B190(); int sub_99B1C0(); int sub_99B1D0(); int sub_99B1E0(); int sub_99B1F0(); int sub_99B210(); int sub_99B240(); int sub_99B270(); int sub_99B280(); int sub_99B290(); int sub_99B2A0(); int sub_99B2C0(); int sub_99B2D0(); int sub_99B2E0(); _DWORD *sub_99B2F0(); _DWORD *sub_99B310(); int sub_99B330(); _DWORD *sub_99B340(); int sub_99B360(); int sub_99B3B0(); int sub_99B400(); int sub_99B450(); int sub_99B4A0(); int sub_99B4F0(); int sub_99B510(); int sub_99B530(); int sub_99B550(); int sub_99B5D0(); int sub_99B5E0(); int sub_99B5F0(); int sub_99B670(); int sub_99B680(); int sub_99B700(); int sub_99B710(); int sub_99B790(); int sub_99B7A0(); int sub_99B7C0(); int sub_99B7E0(); _DWORD *sub_99B800(); int sub_99B820(); int sub_99B840(); int __thiscall sub_99B860(void *this); int sub_99B890(); int sub_99B8A0(); int sub_99B900(); _DWORD *sub_99B920(); int sub_99B940(); int sub_99B960(); int sub_99B980(); int sub_99B990(); _DWORD *sub_99B9B0(); int sub_99B9D0(); int sub_99BA50(); _DWORD *sub_99BAD0(); _DWORD *sub_99BAF0(); _DWORD *sub_99BB10(); int sub_99BB30(); int sub_99BB70(); _DWORD *sub_99BB90(); _DWORD *sub_99BBB0(); _DWORD *sub_99BBD0(); int sub_99BBF0(); int sub_99BC10(); int sub_99BC20(); int sub_99BCA0(); __int64 sub_99BCB0(); signed int sub_99BCE0(); int sub_99BCF0(); __int64 sub_99BD10(); int sub_99BD40(); __int64 sub_99BD50(); int sub_99BD80(); int sub_99BDD0(); int sub_99BDE0(); int sub_99BDF0(); int __thiscall sub_99BE10(void *this); int sub_99BE40(); int sub_99BEF0(); int sub_99BF00(); int sub_99BF10(); int __thiscall sub_99BF30(void *this); int sub_99BF60(); int sub_99BF70(); int sub_99BF80(); int sub_99BF90(); int sub_99BFA0(); int sub_99BFC0(); int sub_99BFE0(); int sub_99C000(); int sub_99C020(); int sub_99C040(); int sub_99C060(); int sub_99C080(); int sub_99C0A0(); int sub_99C0C0(); int sub_99C0E0(); int sub_99C100(); int sub_99C120(); int sub_99C140(); int sub_99C160(); int sub_99C1F0(); int sub_99C210(); int sub_99C230(); int sub_99C250(); int sub_99C270(); int sub_99C290(); int sub_99C2B0(); int sub_99C2D0(); int sub_99C2F0(); int sub_99C310(); int sub_99C320(); int sub_99C330(); int sub_99C370(); int sub_99C390(); int sub_99C3B0(); int sub_99C3D0(); int sub_99C3F0(); int sub_99C410(); int sub_99C430(); int sub_99C450(); int sub_99C470(); int sub_99C490(); int sub_99C4B0(); int sub_99C4D0(); int sub_99C4F0(); int sub_99C510(); int sub_99C530(); int sub_99C550(); int sub_99C570(); int sub_99C590(); int sub_99C5A0(); int sub_99C5B0(); int sub_99C5C0(); int sub_99C5D0(); int sub_99C600(); int sub_99C620(); int sub_99C636(); int sub_99C642(); int sub_99C64E(); int sub_99C65A(); int sub_99C670(); int sub_99C67C(); int sub_99C688(); int sub_99C6D8(); void *sub_99C6F7(); int sub_99C701(); int sub_99C717(); int sub_99C730(); void sub_99C750(); int sub_99C770(); int sub_99C7A0(); int sub_99C7D0(); _DWORD *sub_99C800(); _DWORD *sub_99C820(); _DWORD *sub_99C840(); _DWORD *sub_99C860(); _DWORD *sub_99C880(); _DWORD *sub_99C8A0(); _DWORD *sub_99C8C0(); _DWORD *sub_99C8E0(); _DWORD *sub_99C900(); _DWORD *sub_99C920(); _DWORD *sub_99C940(); _DWORD *sub_99C960(); _DWORD *sub_99C980(); _DWORD *sub_99C9A0(); _DWORD *sub_99C9C0(); _DWORD *sub_99C9E0(); _DWORD *sub_99CA00(); _DWORD *sub_99CA20(); _DWORD *sub_99CA40(); _DWORD *sub_99CA60(); _DWORD *sub_99CA80(); _DWORD *sub_99CAA0(); _DWORD *sub_99CAC0(); _DWORD *sub_99CAE0(); _DWORD *sub_99CB00(); _DWORD *sub_99CB20(); _DWORD *sub_99CB40(); _DWORD *sub_99CB60(); _DWORD *sub_99CB80(); _DWORD *sub_99CBA0(); _DWORD *sub_99CBC0(); _DWORD *sub_99CBE0(); _DWORD *sub_99CC00(); _DWORD *sub_99CC20(); _DWORD *sub_99CC40(); _DWORD *sub_99CC60(); _DWORD *sub_99CC80(); _DWORD *sub_99CCA0(); _DWORD *sub_99CCC0(); _DWORD *sub_99CCE0(); _DWORD *sub_99CD00(); _DWORD *sub_99CD20(); _DWORD *sub_99CD40(); _DWORD *sub_99CD60(); _DWORD *sub_99CD80(); _DWORD *sub_99CDA0(); _DWORD *sub_99CDC0(); _DWORD *sub_99CDE0(); _DWORD *sub_99CE00(); _DWORD *sub_99CE20(); _DWORD *sub_99CE40(); _DWORD *sub_99CE60(); _DWORD *sub_99CE80(); _DWORD *sub_99CEA0(); _DWORD *sub_99CEC0(); _DWORD *sub_99CEE0(); _DWORD *sub_99CF00(); _DWORD *sub_99CF20(); _DWORD *sub_99CF40(); _DWORD *sub_99CF60(); _DWORD *sub_99CF80(); _DWORD *sub_99CFA0(); _DWORD *sub_99CFC0(); float *sub_99CFE0(); _DWORD *sub_99D010(); float *sub_99D030(); _DWORD *sub_99D060(); _DWORD *sub_99D080(); _DWORD *sub_99D0A0(); _DWORD *sub_99D0C0(); _DWORD *sub_99D0E0(); _DWORD *sub_99D100(); _DWORD *sub_99D120(); _DWORD *sub_99D140(); int sub_99D160(); _DWORD *sub_99D190(); _DWORD *sub_99D1B0(); void *sub_99D1D0(); _DWORD *sub_99D1E0(); _DWORD *sub_99D200(); _DWORD *sub_99D220(); int sub_99D240(); void sub_99D250(); void sub_99D280(); void sub_99D2A0(); _DWORD *sub_99D2B0(); _DWORD *sub_99D2D0(); _DWORD *sub_99D2F0(); int sub_99D310(); int sub_99D320(); _DWORD *sub_99D340(); int sub_99D360(); _DWORD *sub_99D370(); int sub_99D390(); _DWORD *sub_99D3A0(); _DWORD *sub_99D3C0(); _DWORD *sub_99D3E0(); _DWORD *sub_99D400(); _DWORD *sub_99D420(); _DWORD *sub_99D440(); int sub_99D460(); _DWORD *sub_99D470(); int sub_99D490(); _DWORD *sub_99D4A0(); _DWORD *sub_99D4C0(); _DWORD *sub_99D4E0(); _DWORD *sub_99D500(); _DWORD *sub_99D520(); _DWORD *sub_99D540(); _DWORD *sub_99D560(); _DWORD *sub_99D580(); _DWORD *sub_99D5A0(); _DWORD *sub_99D5C0(); int sub_99D5E0(); _DWORD *sub_99D5F0(); _DWORD *sub_99D610(); _DWORD *sub_99D630(); _DWORD *sub_99D650(); int sub_99D670(); _DWORD *sub_99D690(); _DWORD *sub_99D6B0(); _DWORD *sub_99D6D0(); _DWORD *sub_99D6F0(); _DWORD *sub_99D710(); _DWORD *sub_99D730(); _DWORD *sub_99D750(); _DWORD *sub_99D770(); _DWORD *sub_99D790(); _DWORD *sub_99D7B0(); int sub_99D7D0(); int sub_99D7F0(); _DWORD *sub_99D830(); _DWORD *sub_99D840(); int sub_99D860(); _DWORD *sub_99D870(); _DWORD *sub_99D890(); int sub_99D8B0(); int sub_99D8D0(); void sub_99D8F0(); void sub_99D920(); _DWORD *sub_99D960(); int sub_99D980(); _DWORD *sub_99D9F0(); _DWORD *sub_99DA10(); _DWORD *sub_99DA30(); int sub_99DA50(); _DWORD *sub_99DA70(); _DWORD *sub_99DA90(); _DWORD *sub_99DAB0(); _DWORD *sub_99DAD0(); _DWORD *sub_99DAF0(); _DWORD *sub_99DB10(); _DWORD *sub_99DB30(); _DWORD *sub_99DB50(); _DWORD *sub_99DB70(); _DWORD *sub_99DB90(); _DWORD *sub_99DBB0(); _DWORD *sub_99DBD0(); _DWORD *sub_99DBF0(); int sub_99DC10(); _DWORD *sub_99DC20(); int sub_99DC40(); _DWORD *sub_99DC50(); int sub_99DC70(); _DWORD *sub_99DC80(); int sub_99DCA0(); _DWORD *sub_99DCB0(); int sub_99DCD0(); _DWORD *sub_99DCE0(); _DWORD *sub_99DD00(); _DWORD *sub_99DD20(); _DWORD *sub_99DD40(); _DWORD *sub_99DD60(); _DWORD *sub_99DD80(); _DWORD *sub_99DDA0(); _DWORD *sub_99DDC0(); _DWORD *sub_99DDE0(); _DWORD *sub_99DE00(); _DWORD *sub_99DE20(); _DWORD *sub_99DE40(); _DWORD *sub_99DE60(); _DWORD *sub_99DE80(); _DWORD *sub_99DEA0(); _DWORD *sub_99DEC0(); _DWORD *sub_99DEE0(); _DWORD *sub_99DF00(); _DWORD *sub_99DF20(); _DWORD *sub_99DF40(); _DWORD *sub_99DF60(); _DWORD *sub_99DF80(); _DWORD *sub_99DFA0(); _DWORD *sub_99DFC0(); _DWORD *sub_99DFE0(); _DWORD *sub_99E000(); _DWORD *sub_99E020(); _DWORD *sub_99E040(); _DWORD *sub_99E060(); _DWORD *sub_99E080(); _DWORD *sub_99E0A0(); _DWORD *sub_99E0C0(); _DWORD *sub_99E0E0(); _DWORD *sub_99E100(); _DWORD *sub_99E120(); _DWORD *sub_99E140(); _DWORD *sub_99E160(); _DWORD *sub_99E180(); _DWORD *sub_99E1A0(); _DWORD *sub_99E1C0(); _DWORD *sub_99E1E0(); _DWORD *sub_99E200(); _DWORD *sub_99E220(); _DWORD *sub_99E240(); _DWORD *sub_99E260(); _DWORD *sub_99E280(); _DWORD *sub_99E2A0(); _DWORD *sub_99E2C0(); _DWORD *sub_99E2E0(); _DWORD *sub_99E300(); _DWORD *sub_99E320(); _DWORD *sub_99E340(); _DWORD *sub_99E360(); _DWORD *sub_99E380(); _DWORD *sub_99E3A0(); _DWORD *sub_99E3C0(); _DWORD *sub_99E3E0(); _DWORD *sub_99E400(); _DWORD *sub_99E420(); _DWORD *sub_99E440(); _DWORD *sub_99E460(); _DWORD *sub_99E480(); _DWORD *sub_99E4A0(); _DWORD *sub_99E4C0(); _DWORD *sub_99E4E0(); _DWORD *sub_99E500(); _DWORD *sub_99E520(); _DWORD *sub_99E540(); _DWORD *sub_99E560(); _DWORD *sub_99E580(); _DWORD *sub_99E5A0(); _DWORD *sub_99E5C0(); _DWORD *sub_99E5E0(); _DWORD *sub_99E600(); _DWORD *sub_99E620(); _DWORD *sub_99E640(); _DWORD *sub_99E660(); _DWORD *sub_99E680(); _DWORD *sub_99E6A0(); _DWORD *sub_99E6C0(); _DWORD *sub_99E6E0(); _DWORD *sub_99E700(); _DWORD *sub_99E720(); _DWORD *sub_99E740(); _DWORD *sub_99E760(); _DWORD *sub_99E780(); _DWORD *sub_99E7A0(); _DWORD *sub_99E7C0(); _DWORD *sub_99E7E0(); _DWORD *sub_99E800(); _BYTE *sub_99E820(); int sub_99E850(); _DWORD *sub_99E870(); _DWORD *sub_99E890(); _DWORD *sub_99E8B0(); _DWORD *sub_99E8D0(); _DWORD *sub_99E8F0(); _DWORD *sub_99E910(); _DWORD *sub_99E930(); _DWORD *sub_99E950(); _DWORD *sub_99E970(); _DWORD *sub_99E990(); _DWORD *sub_99E9B0(); _DWORD *sub_99E9D0(); _DWORD *sub_99E9F0(); _DWORD *sub_99EA10(); _DWORD *sub_99EA30(); void *sub_99EA50(); void *sub_99EA60(); int sub_99EA70(); void *sub_99EA80(); _DWORD *sub_99EA90(); void *sub_99EAB0(); void *sub_99EAC0(); int sub_99EAD0(); void *sub_99EB30(); int sub_99EB40(); int sub_99EBA0(); int sub_99EC00(); void *sub_99EC60(); void *sub_99EC70(); void *sub_99EC80(); void *sub_99EC90(); _DWORD *sub_99ECA0(); _DWORD *sub_99ECC0(); _DWORD *sub_99ECE0(); _DWORD *sub_99ED00(); void *sub_99ED20(); _DWORD *sub_99ED30(); signed int sub_99ED50(); signed int sub_99ED60(); signed int sub_99ED70(); void *sub_99ED80(); void *sub_99ED90(); void *sub_99EDA0(); signed int sub_99EDC0(); signed int sub_99EDD0(); signed int sub_99EDE0(); signed int sub_99EDF0(); signed int sub_99EE00(); signed int sub_99EE10(); signed int sub_99EE20(); signed int sub_99EE30(); signed int sub_99EE40(); signed int sub_99EE50(); signed int sub_99EE60(); signed int sub_99EE70(); signed int sub_99EE80(); signed int sub_99EE90(); signed int sub_99EEA0(); signed int sub_99EEB0(); signed int sub_99EEC0(); signed int sub_99EED0(); signed int sub_99EEE0(); signed int sub_99EEF0(); signed int sub_99EF00(); void *sub_99EF10(); void *sub_99EF20(); _DWORD *sub_99EF30(); _DWORD *sub_99EF50(); void *sub_99EF70(); void *sub_99EF80(); void *sub_99EF90(); void *sub_99EFB0(); void *sub_99EFC0(); _DWORD *sub_99EFD0(); void *sub_99EFF0(); int sub_99F000(); int sub_99F040(); int sub_99F080(); void *sub_99F0C0(); _DWORD *sub_99F0D0(); _DWORD *sub_99F0F0(); _DWORD *sub_99F110(); _DWORD *sub_99F130(); _DWORD *sub_99F150(); _DWORD *sub_99F170(); _DWORD *sub_99F190(); _DWORD *sub_99F1B0(); int sub_99F1D0(); _DWORD *sub_99F1F0(); int sub_99F210(); int sub_99F240(); int sub_99F270(); int sub_99F2A0(); int sub_99F2D0(); int sub_99F300(); int sub_99F330(); int sub_99F360(); int sub_99F390(); _DWORD *sub_99F3C0(); int sub_99F3E0(); _DWORD *sub_99F400(); int sub_99F420(); int sub_99F460(); _DWORD *sub_99F4A0(); int sub_99F4C0(); int sub_99F500(); int sub_99F540(); int sub_99F570(); int sub_99F5A0(); _DWORD *sub_99F5D0(); int sub_99F5FF(); int sub_99F627(); _DWORD *sub_99F640(); _DWORD *sub_99F660(); _DWORD *sub_99F680(); _DWORD *sub_99F6A0(); int sub_99F6C0(); void *sub_99F6D0(); _DWORD *sub_99F6E0(); _DWORD *sub_99F700(); _DWORD *sub_99F720(); _DWORD *sub_99F740(); _DWORD *sub_99F760(); int sub_99F780(); int sub_99F7A0(); _DWORD *sub_99F7B0(); _DWORD *sub_99F7D0(); _DWORD *sub_99F7F0(); _DWORD *sub_99F810(); _DWORD *sub_99F830(); _DWORD *sub_99F850(); void sub_99F870(); _DWORD *sub_99F890(); _DWORD *sub_99F8B0(); _DWORD *sub_99F8D0(); _DWORD *sub_99F8F0(); _DWORD *sub_99F910(); void __cdecl sub_99F930(); // idb void __cdecl sub_99F950(); // idb void __cdecl sub_99F980(); // idb void __cdecl sub_99F9B0(); // idb void __cdecl sub_99F9D0(); // idb void __cdecl sub_99FA00(); // idb void __cdecl sub_99FA10(); // idb void __cdecl sub_99FA20(); // idb void __cdecl sub_99FA40(); // idb void __cdecl sub_99FA90(); // idb void __cdecl sub_99FAC0(); // idb void __cdecl sub_99FAE0(); // idb void __cdecl sub_99FAF0(); // idb void __cdecl sub_99FB00(); // idb void __cdecl sub_99FB30(); // idb void __cdecl sub_99FB60(); // idb void __cdecl sub_99FB90(); // idb void __cdecl sub_99FBB0(); // idb void __cdecl sub_99FBE0(); // idb void __cdecl sub_99FC10(); // idb void __cdecl sub_99FC40(); // idb void __cdecl sub_99FC70(); // idb void __cdecl sub_99FCA0(); // idb void __cdecl sub_99FCD0(); // idb void __cdecl sub_99FD00(); // idb void __cdecl sub_99FD30(); // idb void __cdecl sub_99FD60(); // idb void __cdecl sub_99FD70(); // idb void __cdecl sub_99FDA0(); // idb void __cdecl sub_99FDD0(); // idb void __cdecl sub_99FE00(); // idb void __cdecl sub_99FE30(); // idb void __cdecl sub_99FE60(); // idb void __cdecl sub_99FE90(); // idb void __cdecl sub_99FEC0(); // idb void __cdecl sub_99FEF0(); // idb void __cdecl sub_99FF20(); // idb void __cdecl sub_99FF50(); // idb void __cdecl sub_99FF80(); // idb void __cdecl sub_99FFB0(); // idb void __cdecl sub_99FFE0(); // idb void __cdecl sub_9A0010(); // idb void __cdecl sub_9A0040(); // idb void __cdecl sub_9A0070(); // idb void __cdecl sub_9A00A0(); // idb void __cdecl sub_9A00D0(); // idb void __cdecl sub_9A0100(); // idb void __cdecl sub_9A0130(); // idb void __cdecl sub_9A0160(); // idb void __cdecl sub_9A0190(); // idb void __cdecl sub_9A01C0(); // idb void __cdecl sub_9A01F0(); // idb void __cdecl sub_9A0220(); // idb void __cdecl sub_9A0250(); // idb void __cdecl sub_9A0280(); // idb void __cdecl sub_9A02B0(); // idb void __cdecl sub_9A02E0(); // idb void __cdecl sub_9A0310(); // idb void __cdecl sub_9A0340(); // idb void __cdecl sub_9A0370(); // idb void __cdecl sub_9A03A0(); // idb void __cdecl sub_9A03D0(); // idb void __cdecl sub_9A0400(); // idb void __cdecl sub_9A0430(); // idb void __cdecl sub_9A0460(); // idb void __cdecl sub_9A0490(); // idb void __cdecl sub_9A04C0(); // idb void __cdecl sub_9A04F0(); // idb void __cdecl sub_9A0520(); // idb void __cdecl sub_9A0550(); // idb void __cdecl sub_9A0580(); // idb void __cdecl sub_9A05B0(); // idb void __cdecl sub_9A05E0(); // idb void __cdecl sub_9A0610(); // idb void __cdecl sub_9A0640(); // idb void __cdecl sub_9A0670(); // idb void __cdecl sub_9A06A0(); // idb void __cdecl sub_9A06D0(); // idb void __cdecl sub_9A0700(); // idb void __cdecl sub_9A0730(); // idb void __cdecl sub_9A0760(); // idb void __cdecl sub_9A0790(); // idb void __cdecl sub_9A07C0(); // idb void __cdecl sub_9A07F0(); // idb void __cdecl sub_9A0820(); // idb void __cdecl sub_9A0850(); // idb void __cdecl sub_9A0880(); // idb void __cdecl sub_9A08B0(); // idb void __cdecl sub_9A08E0(); // idb void __cdecl sub_9A0910(); // idb void __cdecl sub_9A0940(); // idb void __cdecl sub_9A0970(); // idb void __cdecl sub_9A09A0(); // idb void __cdecl sub_9A09D0(); // idb void __cdecl sub_9A0A00(); // idb void __cdecl sub_9A0A30(); // idb void __cdecl sub_9A0A60(); // idb void __cdecl sub_9A0A90(); // idb void __cdecl sub_9A0AC0(); // idb void __cdecl sub_9A0AF0(); // idb void __cdecl sub_9A0B20(); // idb void __cdecl sub_9A0B50(); // idb void __cdecl sub_9A0B80(); // idb void __cdecl sub_9A0BB0(); // idb void __cdecl sub_9A0BE0(); // idb void __cdecl sub_9A0C10(); // idb void __cdecl sub_9A0C40(); // idb void __cdecl sub_9A0C70(); // idb void __cdecl sub_9A0CA0(); // idb void __cdecl sub_9A0CD0(); // idb void __cdecl sub_9A0D00(); // idb void __cdecl sub_9A0D30(); // idb void __cdecl sub_9A0D60(); // idb void __cdecl sub_9A0D90(); // idb void __cdecl sub_9A0DC0(); // idb void __cdecl sub_9A0DF0(); // idb void __cdecl sub_9A0E20(); // idb void __cdecl sub_9A0E50(); // idb void __cdecl sub_9A0E80(); // idb void __cdecl sub_9A0EB0(); // idb void __cdecl sub_9A0EE0(); // idb void __cdecl sub_9A0F10(); // idb void __cdecl sub_9A0F40(); // idb void __cdecl sub_9A0F70(); // idb void __cdecl sub_9A0FA0(); // idb void __cdecl sub_9A0FD0(); // idb void __cdecl sub_9A1000(); // idb void __cdecl sub_9A1030(); // idb void __cdecl sub_9A1060(); // idb void __cdecl sub_9A1090(); // idb void __cdecl sub_9A10C0(); // idb void __cdecl sub_9A10F0(); // idb void __cdecl sub_9A1120(); // idb void __cdecl sub_9A1150(); // idb void __cdecl sub_9A1180(); // idb void __cdecl sub_9A11B0(); // idb void __cdecl sub_9A11E0(); // idb void __cdecl sub_9A1210(); // idb void __cdecl sub_9A1240(); // idb void __cdecl sub_9A1270(); // idb void __cdecl sub_9A12A0(); // idb void __cdecl sub_9A12D0(); // idb void __cdecl sub_9A1300(); // idb void __cdecl sub_9A1330(); // idb void __cdecl sub_9A1360(); // idb void __cdecl sub_9A1390(); // idb void __cdecl sub_9A13C0(); // idb void __cdecl sub_9A13F0(); // idb void __cdecl sub_9A1420(); // idb void __cdecl sub_9A1450(); // idb void __cdecl sub_9A1480(); // idb void __cdecl sub_9A14B0(); // idb void __cdecl sub_9A14E0(); // idb void __cdecl sub_9A1510(); // idb void __cdecl sub_9A1540(); // idb void __cdecl sub_9A1570(); // idb void __cdecl sub_9A15A0(); // idb void __cdecl sub_9A15D0(); // idb void __cdecl sub_9A1600(); // idb void __cdecl sub_9A1630(); // idb void __cdecl sub_9A1660(); // idb void __cdecl sub_9A1690(); // idb void __cdecl sub_9A1730(); // idb void __cdecl nullsub_45(); // idb void __cdecl sub_9A17E0(); // idb void __cdecl sub_9A1830(); // idb void __cdecl sub_9A1860(); // idb void __cdecl sub_9A1890(); // idb void __cdecl sub_9A18C0(); // idb void __cdecl sub_9A1910(); // idb void __cdecl sub_9A1990(); // idb void __cdecl nullsub_50(); // idb void __cdecl sub_9A1A00(); // idb void __cdecl sub_9A1A30(); // idb void __cdecl sub_9A1AC0(); // idb void __cdecl sub_9A1AF0(); // idb void __cdecl sub_9A1B20(); // idb void __cdecl sub_9A1B50(); // idb void __cdecl sub_9A1B80(); // idb void __cdecl sub_9A1BB0(); // idb void __cdecl sub_9A1BE0(); // idb void __cdecl sub_9A1C10(); // idb void __cdecl sub_9A1C40(); // idb void __cdecl sub_9A1C70(); // idb void __cdecl sub_9A1CA0(); // idb void __cdecl sub_9A1CD0(); // idb void __cdecl sub_9A1D00(); // idb void __cdecl sub_9A1D30(); // idb void __cdecl sub_9A1D60(); // idb void __cdecl sub_9A1D90(); // idb void __cdecl sub_9A1DC0(); // idb void __cdecl sub_9A1DF0(); // idb void __cdecl sub_9A1E20(); // idb void __cdecl sub_9A1E50(); // idb void __cdecl sub_9A1E80(); // idb void __cdecl sub_9A1EB0(); // idb void __cdecl sub_9A1EE0(); // idb void __cdecl sub_9A1F10(); // idb void __cdecl sub_9A1F40(); // idb void __cdecl sub_9A1F70(); // idb void __cdecl sub_9A1FA0(); // idb void __cdecl sub_9A1FD0(); // idb void __cdecl sub_9A2000(); // idb void __cdecl sub_9A2030(); // idb void __cdecl sub_9A2060(); // idb void __cdecl sub_9A2090(); // idb void __cdecl sub_9A20C0(); // idb void __cdecl sub_9A20F0(); // idb void __cdecl sub_9A2120(); // idb void __cdecl sub_9A2150(); // idb void __cdecl sub_9A2180(); // idb void __cdecl sub_9A21B0(); // idb void __cdecl sub_9A21E0(); // idb void __cdecl sub_9A2210(); // idb void __cdecl sub_9A2240(); // idb void __cdecl sub_9A2270(); // idb void __cdecl sub_9A22A0(); // idb void __cdecl sub_9A22D0(); // idb void __cdecl sub_9A2300(); // idb void __cdecl sub_9A2330(); // idb void __cdecl sub_9A2360(); // idb void __cdecl sub_9A2390(); // idb void __cdecl sub_9A23C0(); // idb void __cdecl sub_9A23F0(); // idb void __cdecl sub_9A2420(); // idb void __cdecl sub_9A2450(); // idb void __cdecl sub_9A2480(); // idb void __cdecl sub_9A24B0(); // idb void __cdecl sub_9A24E0(); // idb void __cdecl sub_9A2510(); // idb void __cdecl sub_9A2540(); // idb void __cdecl sub_9A2570(); // idb void __cdecl sub_9A25A0(); // idb void __cdecl sub_9A25D0(); // idb void __cdecl sub_9A2600(); // idb void __cdecl sub_9A2630(); // idb void __cdecl sub_9A2660(); // idb void __cdecl sub_9A2690(); // idb void __cdecl sub_9A26C0(); // idb void __cdecl sub_9A26F0(); // idb void __cdecl sub_9A2720(); // idb void __cdecl sub_9A2750(); // idb void __cdecl sub_9A2780(); // idb void __cdecl sub_9A27B0(); // idb void __cdecl sub_9A27E0(); // idb void __cdecl sub_9A2810(); // idb void __cdecl sub_9A2820(); // idb void __cdecl sub_9A2850(); // idb void __cdecl sub_9A2880(); // idb void __cdecl sub_9A28C0(); // idb void __cdecl sub_9A2940(); // idb void __cdecl sub_9A2960(); // idb void __cdecl sub_9A29C0(); // idb void __cdecl sub_9A2A40(); // idb void __cdecl sub_9A2A60(); // idb void __cdecl sub_9A2AE0(); // idb void __cdecl sub_9A2B10(); // idb void __cdecl sub_9A2B90(); // idb void __cdecl sub_9A2C20(); // idb void __cdecl sub_9A2C40(); // idb void __cdecl sub_9A2C60(); // idb void __cdecl sub_9A2C90(); // idb void __cdecl sub_9A2CC0(); // idb void __cdecl sub_9A2CF0(); // idb void __cdecl sub_9A2D00(); // idb void __cdecl sub_9A2D30(); // idb void __cdecl sub_9A2D60(); // idb void __cdecl sub_9A2D90(); // idb void __cdecl sub_9A2E10(); // idb void __cdecl sub_9A2E90(); // idb void __cdecl sub_9A2F10(); // idb void __cdecl sub_9A2F90(); // idb void __cdecl sub_9A3010(); // idb void __cdecl sub_9A3090(); // idb void __cdecl sub_9A30A0(); // idb void __cdecl sub_9A3110(); // idb void __cdecl sub_9A3120(); // idb void __cdecl sub_9A3130(); // idb void __cdecl sub_9A3160(); // idb void __cdecl sub_9A3190(); // idb void __cdecl sub_9A3210(); // idb void __cdecl sub_9A3290(); // idb void __cdecl sub_9A3310(); // idb void __cdecl sub_9A3370(); // idb void __cdecl sub_9A33D0(); // idb void __cdecl sub_9A3430(); // idb void __cdecl sub_9A3490(); // idb void __cdecl sub_9A34A0(); // idb void __cdecl sub_9A34C0(); // idb void __cdecl sub_9A34D0(); // idb void __cdecl sub_9A34E0(); // idb void __cdecl sub_9A34F0(); // idb void __cdecl sub_9A3540(); // idb void __cdecl sub_9A3570(); // idb void __cdecl sub_9A3580(); // idb void __cdecl sub_9A3590(); // idb void __cdecl sub_9A35C0(); // idb void __cdecl sub_9A35F0(); // idb void __cdecl sub_9A3620(); // idb void __cdecl sub_9A3630(); // idb void __cdecl sub_9A3690(); // idb void __cdecl sub_9A36F0(); // idb void __cdecl sub_9A3790(); // idb void __cdecl sub_9A37A0(); // idb void __cdecl sub_9A37B0(); // idb void __cdecl sub_9A3830(); // idb void __cdecl sub_9A3860(); // idb void __cdecl nullsub_51(); // idb void __cdecl sub_9A3880(); // idb void __cdecl sub_9A3900(); // idb void __cdecl sub_9A3930(); // idb void __cdecl sub_9A3960(); // idb void __cdecl sub_9A3990(); // idb void __cdecl sub_9A39C0(); // idb void __cdecl sub_9A3A40(); // idb void __cdecl sub_9A3AC0(); // idb void __cdecl sub_9A3AE0(); // idb void __cdecl sub_9A3B30(); // idb void __cdecl sub_9A3B40(); // idb void __cdecl sub_9A3B70(); // idb void __cdecl sub_9A3BA0(); // idb void __cdecl sub_9A3BB0(); // idb void __cdecl sub_9A3C00(); // idb void __cdecl sub_9A3C10(); // idb void __cdecl sub_9A3C20(); // idb void __cdecl sub_9A3CA0(); // idb void __cdecl sub_9A3D20(); // idb void __cdecl sub_9A3D50(); // idb void __cdecl sub_9A3D80(); // idb void __cdecl sub_9A3DB0(); // idb void __cdecl sub_9A3DE0(); // idb void __cdecl sub_9A3E10(); // idb void __cdecl sub_9A3E40(); // idb void __cdecl sub_9A3E70(); // idb void __cdecl sub_9A3EA0(); // idb void __cdecl sub_9A3ED0(); // idb void __cdecl sub_9A3F00(); // idb void __cdecl sub_9A3F30(); // idb void __cdecl sub_9A3F60(); // idb void __cdecl sub_9A3F90(); // idb void __cdecl sub_9A3FC0(); // idb void __cdecl sub_9A3FF0(); // idb void __cdecl sub_9A4020(); // idb void __cdecl sub_9A4050(); // idb void __cdecl sub_9A40B0(); // idb void __cdecl sub_9A40E0(); // idb void __cdecl sub_9A4110(); // idb void __cdecl sub_9A4140(); // idb void __cdecl sub_9A4170(); // idb void __cdecl sub_9A41A0(); // idb void __cdecl sub_9A41D0(); // idb void __cdecl sub_9A4200(); // idb void __cdecl sub_9A4230(); // idb void __cdecl sub_9A4260(); // idb void __cdecl sub_9A42E0(); // idb void __cdecl sub_9A42F0(); // idb void __cdecl nullsub_52(); // idb void __cdecl nullsub_53(); // idb void __cdecl nullsub_54(); // idb void __cdecl nullsub_55(); // idb void __cdecl nullsub_56(); // idb void __cdecl nullsub_57(); // idb void __cdecl nullsub_58(); // idb void __cdecl nullsub_59(); // idb void __cdecl nullsub_60(); // idb void __cdecl nullsub_61(); // idb void __cdecl nullsub_62(); // idb void __cdecl nullsub_63(); // idb void __cdecl nullsub_64(); // idb void __cdecl nullsub_65(); // idb void __cdecl nullsub_66(); // idb void __cdecl nullsub_67(); // idb void __cdecl nullsub_68(); // idb void __cdecl sub_9A4410(); // idb void __cdecl sub_9A4440(); // idb void __cdecl sub_9A4470(); // idb void __cdecl sub_9A44A0(); // idb void __cdecl sub_9A44D0(); // idb void __cdecl sub_9A44F0(); // idb void __cdecl sub_9A4570(); // idb void __cdecl sub_9A4610(); // idb void __cdecl sub_9A4624(); // idb void __cdecl sub_9A462F(); // idb void __cdecl sub_9A463A(); // idb void __cdecl sub_9A4645(); // idb void __cdecl sub_9A464F(); // idb void __cdecl sub_9A4659(); // idb void __cdecl sub_9A4663(); // idb void __cdecl sub_9A466D(); // idb void __cdecl sub_9A4677(); // idb void __cdecl sub_9A4681(); // idb void __cdecl sub_9A468B(); // idb void __cdecl sub_9A4695(); // idb void __cdecl sub_9A46B0(); // idb void __cdecl sub_9A46C0(); // idb void __cdecl sub_9A46D0(); // idb void __cdecl sub_9A4700(); // idb void __cdecl sub_9A4730(); // idb void __cdecl sub_9A4740(); // idb void __cdecl sub_9A4770(); // idb void __cdecl sub_9A47A0(); // idb void __cdecl sub_9A47D0(); // idb void __cdecl sub_9A4800(); // idb void __cdecl sub_9A4830(); // idb void __cdecl sub_9A4840(); // idb void __cdecl sub_9A4850(); // idb void __cdecl sub_9A4890(); // idb void __cdecl sub_9A48C0(); // idb void __cdecl sub_9A48D0(); // idb void __cdecl sub_9A48E0(); // idb void __cdecl sub_9A48F0(); // idb void __cdecl sub_9A4920(); // idb void __cdecl sub_9A4950(); // idb void __cdecl sub_9A4980(); // idb void __cdecl sub_9A49B0(); // idb void __cdecl sub_9A49E0(); // idb void __cdecl sub_9A49F0(); // idb void __cdecl sub_9A4A50(); // idb void __cdecl sub_9A4A60(); // idb void __cdecl sub_9A4A70(); // idb void __cdecl sub_9A4A80(); // idb void __cdecl sub_9A4A90(); // idb void __cdecl sub_9A4AE0(); // idb void __cdecl sub_9A4B30(); // idb void __cdecl sub_9A4B70(); // idb void __cdecl sub_9A4C10(); // idb void __cdecl sub_9A4CB0(); // idb void __cdecl sub_9A4D50(); // idb void __cdecl sub_9A4D60(); // idb void __cdecl sub_9A4D70(); // idb void __cdecl sub_9A4D80(); // idb void __cdecl sub_9A4D90(); // idb void __cdecl sub_9A4DA0(); // idb void __cdecl sub_9A4DB0(); // idb void __cdecl sub_9A4DC0(); // idb void __cdecl sub_9A4DD0(); // idb void __cdecl sub_9A4DE0(); // idb void __cdecl sub_9A4DF0(); // idb void __cdecl sub_9A4E00(); // idb void __cdecl sub_9A4E20(); // idb void __cdecl sub_9A4E40(); // idb void __cdecl sub_9A4E60(); // idb void __cdecl sub_9A4E80(); // idb void __cdecl sub_9A4E90(); // idb void __cdecl sub_9A4EB0(); // idb void __cdecl sub_9A4ED0(); // idb void __cdecl sub_9A4EF6(); // idb void __cdecl sub_9A4F00(); // idb void __cdecl sub_9A4F10(); // idb void __cdecl sub_9A4F70(); // idb void __cdecl sub_9A4F80(); // idb // int __stdcall BT_SetSupportServer(_DWORD, _DWORD); weak // int __stdcall BT_SetAppVersion(_DWORD); weak // int __stdcall BT_SetAppName(_DWORD); weak // int BT_InstallSehFilter(void); weak // int __stdcall BT_ClearLog(_DWORD); weak // int __stdcall BT_OpenLogFile(_DWORD); weak // int __stdcall BT_SetLogFlags(_DWORD, _DWORD); weak // int __stdcall BT_GetLogFileName(_DWORD); weak // int __stdcall BT_AddLogFile(_DWORD); weak // int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); weak // int __stdcall BT_CloseLogFile(_DWORD); weak // int __stdcall BT_SetFlags(_DWORD); weak // BOOL __stdcall InitCommonControlsEx(const INITCOMMONCONTROLSEX *picce); // COLORREF __stdcall SetBkColor(HDC hdc, COLORREF color); // HBITMAP __stdcall CreateDIBSection(HDC hdc, const BITMAPINFO *lpbmi, UINT usage, void **ppvBits, HANDLE hSection, DWORD offset); // BOOL __stdcall GetTextExtentPointA(HDC hdc, LPCSTR lpString, int c, LPSIZE lpsz); // HFONT __stdcall CreateFontA(int cHeight, int cWidth, int cEscapement, int cOrientation, int cWeight, DWORD bItalic, DWORD bUnderline, DWORD bStrikeOut, DWORD iCharSet, DWORD iOutPrecision, DWORD iClipPrecision, DWORD iQuality, DWORD iPitchAndFamily, LPCSTR pszFaceName); // UINT __stdcall SetTextAlign(HDC hdc, UINT align); // HBRUSH __stdcall CreateSolidBrush(COLORREF color); // HFONT __stdcall CreateFontIndirectA(const LOGFONTA *lplf); // int __stdcall SetBkMode(HDC hdc, int mode); // HGDIOBJ __stdcall GetStockObject(int i); // BOOL __stdcall ExtTextOutA(HDC hdc, int x, int y, UINT options, const RECT *lprect, LPCSTR lpString, UINT c, const INT *lpDx); // int __stdcall SetMapMode(HDC hdc, int iMode); // COLORREF __stdcall SetTextColor(HDC hdc, COLORREF color); // BOOL __stdcall TextOutA(HDC hdc, int x, int y, LPCSTR lpString, int c); // int __stdcall GetObjectA(HANDLE h, int c, LPVOID pv); // HDC __stdcall CreateCompatibleDC(HDC hdc); // int __stdcall GetDIBits(HDC hdc, HBITMAP hbm, UINT start, UINT cLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT usage); // BOOL __stdcall DeleteObject(HGDIOBJ ho); // BOOL __stdcall DeleteDC(HDC hdc); // int __stdcall AddFontResourceA(LPCSTR); // int __stdcall EnumFontFamiliesA(HDC hdc, LPCSTR lpLogfont, FONTENUMPROCA lpProc, LPARAM lParam); // BOOL __stdcall RemoveFontResourceA(LPCSTR lpFileName); // BOOL __stdcall GetTextExtentPoint32A(HDC hdc, LPCSTR lpString, int c, LPSIZE psizl); // HGDIOBJ __stdcall SelectObject(HDC hdc, HGDIOBJ h); // void __stdcall OutputDebugStringA(LPCSTR lpOutputString); // BOOL __stdcall CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); // DWORD __stdcall GetShortPathNameA(LPCSTR lpszLongPath, LPSTR lpszShortPath, DWORD cchBuffer); // FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName); // void __stdcall SetLastError(DWORD dwErrCode); // HMODULE __stdcall GetModuleHandleW(LPCWSTR lpModuleName); // int __stdcall lstrlenW(LPCWSTR lpString); // LPWSTR __stdcall lstrcatW(LPWSTR lpString1, LPCWSTR lpString2); // LPWSTR __stdcall lstrcpyW(LPWSTR lpString1, LPCWSTR lpString2); // DWORD __stdcall GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize); // HMODULE __stdcall LoadLibraryW(LPCWSTR lpLibFileName); // int __stdcall lstrlenA(LPCSTR lpString); // BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes); // BOOL __stdcall QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount); // BOOL __stdcall QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); // DWORD __stdcall SizeofResource(HMODULE hModule, HRSRC hResInfo); // LPVOID __stdcall LockResource(HGLOBAL hResData); // HGLOBAL __stdcall LoadResource(HMODULE hModule, HRSRC hResInfo); // HRSRC __stdcall FindResourceW(HMODULE hModule, LPCWSTR lpName, LPCWSTR lpType); // HRSRC __stdcall FindResourceExW(HMODULE hModule, LPCWSTR lpType, LPCWSTR lpName, WORD wLanguage); // int __stdcall WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar); // LPSTR __stdcall lstrcpyA(LPSTR lpString1, LPCSTR lpString2); // BOOL __stdcall TerminateProcess(HANDLE hProcess, UINT uExitCode); // HANDLE __stdcall GetCurrentProcess(); // DWORD __stdcall GetFileAttributesA(LPCSTR lpFileName); // void __stdcall GetLocalTime(LPSYSTEMTIME lpSystemTime); // void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); // void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); // DWORD __stdcall FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, va_list *Arguments); // BOOL __stdcall FreeLibrary(HMODULE hLibModule); // HMODULE __stdcall LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); // BOOL __stdcall InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount); // LPVOID __stdcall HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes); // DWORD __stdcall GetCurrentProcessId(); // BOOL __stdcall IsProcessorFeaturePresent(DWORD ProcessorFeature); // BOOL __stdcall HeapDestroy(HANDLE hHeap); // SIZE_T __stdcall HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem); // HANDLE __stdcall FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); // BOOL __stdcall FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); // BOOL __stdcall FindClose(HANDLE hFindFile); // BOOL __stdcall DeleteFileA(LPCSTR lpFileName); // int __stdcall MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar); // void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection); // HANDLE __stdcall GetProcessHeap(); // HANDLE __stdcall CreateSemaphoreA(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName); // DWORD __stdcall GetCurrentThreadId(); // HANDLE __stdcall OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId); // DWORD __stdcall SuspendThread(HANDLE hThread); // BOOL __stdcall CloseHandle(HANDLE hObject); // void __stdcall __noreturn ExitProcess(UINT uExitCode); // LONG __stdcall InterlockedDecrement(volatile LONG *lpAddend); // LONG __stdcall InterlockedIncrement(volatile LONG *lpAddend); // DWORD __stdcall GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize); // LPVOID __stdcall HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes); // BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem); // void __stdcall GetSystemInfo(LPSYSTEM_INFO lpSystemInfo); // void __stdcall RaiseException(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR *lpArguments); // PVOID __stdcall DecodePointer(PVOID Ptr); // PVOID __stdcall EncodePointer(PVOID Ptr); // void __stdcall GetSystemTime(LPSYSTEMTIME lpSystemTime); // BOOL __stdcall GetVersionExA(LPOSVERSIONINFOA lpVersionInformation); // DWORD __stdcall GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName); // LANGID __stdcall GetUserDefaultLangID(); // BOOL __stdcall GlobalUnlock(HGLOBAL hMem); // LPVOID __stdcall GlobalLock(HGLOBAL hMem); // LONG __stdcall InterlockedExchange(volatile LONG *Target, LONG Value); // DWORD __stdcall SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); // BOOL __stdcall WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); // BOOL __stdcall ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); // void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); // BOOL __stdcall IsDBCSLeadByte(BYTE TestChar); // HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName); // DWORD __stdcall GetLastError(); // void __stdcall Sleep(DWORD dwMilliseconds); // HANDLE __stdcall CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); // LPTOP_LEVEL_EXCEPTION_FILTER __stdcall SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); // DWORD __stdcall GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh); // HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName); // SAFEARRAY *__stdcall SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound); // HRESULT __stdcall SafeArrayAccessData(SAFEARRAY *psa, void **ppvData); // HRESULT __stdcall SafeArrayUnaccessData(SAFEARRAY *psa); // void __stdcall VariantInit(VARIANTARG *pvarg); // BSTR __stdcall SysAllocString(const OLECHAR *psz); // HRESULT __stdcall VariantClear(VARIANTARG *pvarg); // int __stdcall SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); // BOOL __stdcall SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath); // HRESULT __stdcall SHGetSpecialFolderLocation(HWND hwnd, int csidl, LPITEMIDLIST *ppidl); // HINSTANCE __stdcall ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); // BOOL __stdcall PathFileExistsA(LPCSTR pszPath); // BOOL __stdcall PathRemoveFileSpecA(LPSTR pszPath); // BOOL __stdcall OpenClipboard(HWND hWndNewOwner); // HANDLE __stdcall SetClipboardData(UINT uFormat, HANDLE hMem); // UINT __stdcall RegisterClipboardFormatA(LPCSTR lpszFormat); // HANDLE __stdcall GetClipboardData(UINT uFormat); // void __stdcall PostQuitMessage(int nExitCode); // LRESULT __stdcall DispatchMessageA(const MSG *lpMsg); // BOOL __stdcall TranslateMessage(const MSG *lpMsg); // int __stdcall TranslateAcceleratorA(HWND hWnd, HACCEL hAccTable, LPMSG lpMsg); // BOOL __stdcall PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); // LRESULT __stdcall SendDlgItemMessageA(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam); // BOOL __stdcall CheckDlgButton(HWND hDlg, int nIDButton, UINT uCheck); // BOOL __stdcall EndDialog(HWND hDlg, INT_PTR nResult); // INT_PTR __stdcall DialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam); // BOOL __stdcall UpdateWindow(HWND hWnd); // BOOL __stdcall AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu); // int __stdcall FillRect(HDC hDC, const RECT *lprc, HBRUSH hbr); // BOOL __stdcall GetKeyboardLayoutNameA(LPSTR pwszKLID); // BOOL __stdcall SetWindowTextA(HWND hWnd, LPCSTR lpString); // BOOL __stdcall ClientToScreen(HWND hWnd, LPPOINT lpPoint); // BOOL __stdcall SetForegroundWindow(HWND hWnd); // LONG __stdcall ChangeDisplaySettingsA(DEVMODEA *lpDevMode, DWORD dwFlags); // BOOL __stdcall SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags); // HCURSOR __stdcall SetCursor(HCURSOR hCursor); // BOOL __stdcall EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, DEVMODEA *lpDevMode); // HICON __stdcall LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); // DWORD __stdcall SetClassLongA(HWND hWnd, int nIndex, LONG dwNewLong); // SHORT __stdcall GetAsyncKeyState(int vKey); // BOOL __stdcall GetCursorPos(LPPOINT lpPoint); // BOOL __stdcall ScreenToClient(HWND hWnd, LPPOINT lpPoint); // HANDLE __stdcall LoadImageA(HINSTANCE hInst, LPCSTR name, UINT type, int cx, int cy, UINT fuLoad); // LRESULT __stdcall CallWindowProcA(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // BOOL __stdcall DestroyCursor(HCURSOR hCursor); // BOOL __stdcall GetIconInfo(HICON hIcon, PICONINFO piconinfo); // int __stdcall ReleaseDC(HWND hWnd, HDC hDC); // ATOM __stdcall RegisterClassA(const WNDCLASSA *lpWndClass); // HANDLE __stdcall GetPropA(HWND hWnd, LPCSTR lpString); // BOOL __stdcall SetPropA(HWND hWnd, LPCSTR lpString, HANDLE hData); // HANDLE __stdcall RemovePropA(HWND hWnd, LPCSTR lpString); // BOOL __stdcall SetRectEmpty(LPRECT lprc); // BOOL __stdcall GetClassInfoA(HINSTANCE hInstance, LPCSTR lpClassName, LPWNDCLASSA lpWndClass); // int __stdcall GetSystemMetrics(int nIndex); // BOOL __stdcall CopyRect(LPRECT lprcDst, const RECT *lprcSrc); // BOOL __stdcall PtInRect(const RECT *lprc, POINT pt); // UINT __stdcall GetCaretBlinkTime(); // HWND __stdcall GetFocus(); // LRESULT __stdcall SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // BOOL __stdcall SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom); // int wsprintfA(LPSTR, LPCSTR, ...); // BOOL __stdcall AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle); // BOOL __stdcall ShowWindow(HWND hWnd, int nCmdShow); // BOOL __stdcall GetWindowRect(HWND hWnd, LPRECT lpRect); // BOOL __stdcall MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint); // HDC __stdcall GetDC(HWND hWnd); // BOOL __stdcall GetClientRect(HWND hWnd, LPRECT lpRect); // HCURSOR __stdcall LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName); // ATOM __stdcall RegisterClassExA(const WNDCLASSEXA *); // HKL __stdcall GetKeyboardLayout(DWORD idThread); // LONG __stdcall GetWindowLongA(HWND hWnd, int nIndex); // BOOL __stdcall IsWindow(HWND hWnd); // DWORD __stdcall GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId); // HHOOK __stdcall SetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId); // LRESULT __stdcall DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // BOOL __stdcall UnhookWindowsHookEx(HHOOK hhk); // LONG __stdcall SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); // 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 GetClassInfoExA(HINSTANCE hInstance, LPCSTR lpszClass, LPWNDCLASSEXA lpwcx); // BOOL __stdcall UnregisterClassA(LPCSTR lpClassName, HINSTANCE hInstance); // HWND __stdcall SetFocus(HWND hWnd); // HWND __stdcall GetParent(HWND hWnd); // BOOL __stdcall PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // LRESULT __stdcall CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam); // BOOL __stdcall DestroyWindow(HWND hWnd); // BOOL __stdcall TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack); // int __stdcall GetWindowTextLengthA(HWND hWnd); // BOOL __stdcall EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam); // int __stdcall GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount); // int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); // BOOL __stdcall SetCursorPos(int X, int Y); // BOOL __stdcall CloseClipboard(); // DWORD __stdcall timeGetTime(); // int __cdecl cef_string_list_size(_DWORD); weak // int __cdecl cef_string_list_value(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_multimap_append(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_map_append(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_list_append(_DWORD, _DWORD); weak // int __cdecl cef_string_utf16_cmp(_DWORD, _DWORD); weak // int __cdecl cef_string_map_value(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_initialize(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __cdecl cef_api_hash(_DWORD); weak // int __cdecl cef_string_userfree_utf16_free(_DWORD); weak // int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __cdecl cef_browser_host_create_browser(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall cef_string_list_alloc(_DWORD, _DWORD); weak // int __cdecl cef_string_list_free(_DWORD); weak // int __cdecl cef_string_map_key(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_map_size(_DWORD); weak // int __cdecl cef_string_multimap_value(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_multimap_key(_DWORD, _DWORD, _DWORD); weak // int __cdecl cef_string_multimap_size(_DWORD); weak // int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); weak // int __cdecl cef_string_multimap_free(_DWORD); weak // int __cdecl cef_string_list_copy(_DWORD); weak // int __stdcall cef_string_map_alloc(_DWORD, _DWORD); weak // int __cdecl cef_string_map_free(_DWORD); weak // int __cdecl cef_string_utf16_clear(_DWORD); weak // int __stdcall AIL_open_3D_provider(_DWORD); weak // int __stdcall AIL_open_3D_listener(_DWORD); weak // int __stdcall AIL_close_3D_listener(_DWORD); weak // int __stdcall AIL_allocate_3D_sample_handle(_DWORD); weak // int __stdcall AIL_close_3D_provider(_DWORD); weak // int __stdcall AIL_enumerate_3D_providers(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_quick_handles(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_quick_startup(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // _DWORD __stdcall AIL_startup(); weak // int __stdcall AIL_set_redist_directory(_DWORD); weak // _DWORD __stdcall AIL_shutdown(); weak // _DWORD __stdcall AIL_quick_shutdown(); weak // int __stdcall AIL_waveOutClose(_DWORD); weak // int __stdcall AIL_3D_speaker_type(_DWORD); weak // int __stdcall AIL_set_3D_speaker_type(_DWORD, _DWORD); weak // _DWORD __stdcall AIL_last_error(); weak // int __stdcall AIL_set_3D_distance_factor(_DWORD, _DWORD); weak // int __stdcall AIL_3D_room_type(_DWORD); weak // int __stdcall AIL_set_3D_room_type(_DWORD, _DWORD); weak // int __stdcall AIL_release_3D_sample_handle(_DWORD); weak // int __stdcall AIL_release_sample_handle(_DWORD); weak // int __stdcall AIL_close_stream(_DWORD); weak // int __stdcall AIL_pause_stream(_DWORD, _DWORD); weak // int __stdcall AIL_decompress_ASI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_mem_free_lock(_DWORD); weak // int __stdcall AIL_decompress_ADPCM(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_WAV_info(_DWORD, _DWORD); weak // int __stdcall AIL_file_type(_DWORD, _DWORD); weak // int __stdcall AIL_file_read(_DWORD, _DWORD); weak // int __stdcall AIL_file_size(_DWORD); weak // int __stdcall AIL_set_sample_loop_count(_DWORD, _DWORD); weak // int __stdcall AIL_set_stream_loop_count(_DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_loop_count(_DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_distances(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_sample_distances(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_sample_volume_levels(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_stream_volume_levels(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_volume(_DWORD, _DWORD); weak // int __stdcall AIL_sample_volume_levels(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_stream_volume_levels(_DWORD, _DWORD, _DWORD); weak // double __stdcall AIL_3D_sample_volume(_DWORD); weak // int __stdcall AIL_set_sample_playback_rate(_DWORD, _DWORD); weak // int __stdcall AIL_set_stream_playback_rate(_DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_playback_rate(_DWORD, _DWORD); weak // int __stdcall AIL_sample_playback_rate(_DWORD); weak // int __stdcall AIL_stream_playback_rate(_DWORD); weak // int __stdcall AIL_3D_sample_playback_rate(_DWORD); weak // int __stdcall AIL_set_3D_sample_preference(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_sample_attribute(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_start_sample(_DWORD); weak // int __stdcall AIL_start_stream(_DWORD); weak // int __stdcall AIL_start_3D_sample(_DWORD); weak // int __stdcall AIL_stop_sample(_DWORD); weak // int __stdcall AIL_stop_3D_sample(_DWORD); weak // int __stdcall AIL_set_sample_ms_position(_DWORD, _DWORD); weak // int __stdcall AIL_set_stream_ms_position(_DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_offset(_DWORD, _DWORD); weak // int __stdcall AIL_sample_status(_DWORD); weak // int __stdcall AIL_stream_status(_DWORD); weak // int __stdcall AIL_3D_sample_status(_DWORD); weak // int __stdcall AIL_sample_ms_position(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_stream_ms_position(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_sample_offset(_DWORD); weak // int __stdcall AIL_set_sample_position(_DWORD, _DWORD); weak // int __stdcall AIL_set_stream_position(_DWORD, _DWORD); weak // int __stdcall AIL_stream_position(_DWORD); weak // int __stdcall AIL_set_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_velocity_vector(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_effects_level(_DWORD, _DWORD); weak // double __stdcall AIL_3D_sample_effects_level(_DWORD); weak // int __stdcall AIL_set_3D_sample_occlusion(_DWORD, _DWORD); weak // double __stdcall AIL_3D_sample_occlusion(_DWORD); weak // int __stdcall AIL_set_3D_sample_obstruction(_DWORD, _DWORD); weak // double __stdcall AIL_3D_sample_obstruction(_DWORD); weak // int __stdcall AIL_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_3D_velocity(_DWORD, _DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_allocate_file_sample(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_open_stream(_DWORD, _DWORD, _DWORD); weak // int __stdcall AIL_set_3D_sample_file(_DWORD, _DWORD); weak // void __stdcall CoUninitialize(); // HRESULT __stdcall CreateBindCtx(DWORD reserved, LPBC *ppbc); // HRESULT __stdcall CLSIDFromString(LPCOLESTR lpsz, LPCLSID pclsid); // HRESULT __stdcall CoCreateInstance(const IID *const rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, const IID *const riid, LPVOID *ppv); // HRESULT __stdcall CoInitialize(LPVOID pvReserved); // HRESULT __stdcall CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit); // int SteamUser(void); weak // int SteamAPI_Init(void); weak // int __cdecl SteamAPI_RegisterCallback(_DWORD, _DWORD); weak // int __fastcall SteamAPI_IsSteamRunning(_DWORD, _DWORD); weak //------------------------------------------------------------------------- // Data declarations _UNKNOWN loc_40AC30; // weak _UNKNOWN loc_40ACF0; // weak _UNKNOWN loc_410030; // weak _UNKNOWN loc_461340; // weak _UNKNOWN loc_466CA0; // weak _UNKNOWN loc_466DE0; // weak _UNKNOWN loc_466F40; // weak _UNKNOWN loc_4670A0; // weak _UNKNOWN loc_467370; // weak _UNKNOWN loc_468150; // weak _UNKNOWN loc_468230; // weak _UNKNOWN loc_468400; // weak _UNKNOWN loc_4684E0; // weak _UNKNOWN loc_468C20; // weak _UNKNOWN loc_468D50; // weak _UNKNOWN loc_4B7C71; // weak _UNKNOWN loc_500000; // weak _UNKNOWN loc_516870; // weak _UNKNOWN loc_580005; // weak _UNKNOWN loc_585858; // weak _UNKNOWN loc_5C6D81; // weak _UNKNOWN loc_5C7263; // weak void *off_5E705E = (void *)0x6A006A; // weak _UNKNOWN loc_5E83C0; // weak _UNKNOWN loc_5E8480; // weak _UNKNOWN loc_5E84E0; // weak _UNKNOWN loc_600000; // weak _UNKNOWN loc_64F540; // weak _UNKNOWN loc_65B640; // weak _UNKNOWN loc_66696E; // weak _UNKNOWN loc_67E5C0; // weak _UNKNOWN loc_6E0028; // weak _UNKNOWN loc_6E7FA5; // weak _UNKNOWN loc_6FFFFF; // weak char algn_7773BA[6] = { 'Ì', 'Ì', 'Ì', 'Ì', 'Ì', 'Ì' }; // weak _UNKNOWN loc_77DAD0; // weak _UNKNOWN loc_789D80; // weak _UNKNOWN locret_790962; // weak _UNKNOWN loc_7B9AF0; // weak int dword_7B9B60[4] = { 2378379535, 9380, 2609709056, 0 }; // weak int dword_7B9B70[4] = { 3435362063, 3435973836, 3435973836, 3435973836 }; // weak _UNKNOWN loc_7C5D50; // weak _UNKNOWN loc_7C6030; // weak _UNKNOWN loc_7C65E0; // weak _UNKNOWN loc_7C6D40; // weak _UNKNOWN loc_7C6F40; // weak _UNKNOWN loc_7C7140; // weak _UNKNOWN loc_7C7650; // weak _UNKNOWN loc_7C7E30; // weak _UNKNOWN loc_7C8590; // weak _UNKNOWN loc_7C93D0; // weak _UNKNOWN loc_7C9B30; // weak _UNKNOWN loc_7CA000; // weak _UNKNOWN loc_7CA760; // weak _UNKNOWN loc_7CAC60; // weak _UNKNOWN loc_7CAD60; // weak _UNKNOWN loc_7CB000; // weak _UNKNOWN loc_7CB9C0; // weak _UNKNOWN loc_7CC310; // weak _UNKNOWN loc_7CD0B0; // weak _UNKNOWN loc_7CD330; // weak _UNKNOWN loc_7CFDD0; // weak _UNKNOWN loc_7CFE40; // weak _UNKNOWN loc_7DDA6D; // weak // extern _UNKNOWN loc_7FBFFE; weak // extern _UNKNOWN loc_7FC03B; weak _UNKNOWN locret_7FFFFD; // weak _UNKNOWN loc_800003; // weak _UNKNOWN loc_808080; // weak _UNKNOWN loc_825A98; // weak char byte_836388[] = { '\0' }; // weak _UNKNOWN loc_87BDD0; // weak char byte_96D00C[] = { '\0' }; // weak char byte_96D0C0[] = { '\0' }; // weak char byte_9A1D2A[6] = { 'Ì', 'Ì', 'Ì', 'Ì', 'Ì', 'Ì' }; // weak _UNKNOWN loc_9A1D31; // weak _UNKNOWN loc_9A1D3E; // weak _UNKNOWN loc_9A2111; // weak char byte_9A211C[4] = { 'Ì', 'Ì', 'Ì', 'Ì' }; // weak _UNKNOWN loc_9A2121; // weak _UNKNOWN loc_9A24F9; // weak _UNKNOWN loc_9A2503; // weak char byte_9A250E[2] = { 'Ì', 'Ì' }; // weak _UNKNOWN loc_9A28DE; // weak _UNKNOWN loc_9A28E4; // weak _UNKNOWN loc_9A28F6; // weak _UNKNOWN loc_9A2CC9; // weak _UNKNOWN loc_9A2CCF; // weak _UNKNOWN loc_9A2CDD; // weak _UNKNOWN loc_9A30B1; // weak _UNKNOWN loc_9A30B9; // weak _UNKNOWN loc_9A30C4; // weak char byte_9A349A[6] = { 'Ì', 'Ì', 'Ì', 'Ì', 'Ì', 'Ì' }; // weak _UNKNOWN loc_9A34AA; // weak void *std::bad_alloc::`vftable' = &sub_401010; // weak void *Argv::`vftable' = &sub_401BD0; // weak void *BoxAnnounceWin::`vftable' = &unknown_libname_1; // weak void *BoxAnnounceWin::`vftable' = &sub_402B30; // weak void *CameraCtrl::`vftable' = &sub_404520; // weak _UNKNOWN unk_9A6880; // weak _UNKNOWN unk_9A68A4; // weak _UNKNOWN unk_9A68C8; // weak _UNKNOWN unk_9A68EC; // weak _UNKNOWN unk_9A6910; // weak _UNKNOWN unk_9A6934; // weak _UNKNOWN unk_9A6958; // weak _UNKNOWN unk_9A697C; // weak _UNKNOWN unk_9A69A0; // weak _UNKNOWN unk_9A69C4; // weak _UNKNOWN unk_9A69E8; // weak _UNKNOWN unk_9A6A0C; // weak _UNKNOWN unk_9A6A30; // weak _UNKNOWN unk_9A6A54; // weak _UNKNOWN unk_9A6A78; // weak _UNKNOWN unk_9A6A9C; // weak _UNKNOWN unk_9A6AC0; // weak _UNKNOWN unk_9A6AE4; // weak _UNKNOWN unk_9A6B08; // weak _UNKNOWN unk_9A6B2C; // weak _UNKNOWN unk_9A6B50; // weak _UNKNOWN unk_9A6B74; // weak _UNKNOWN unk_9A6B98; // weak _UNKNOWN unk_9A6BBC; // weak _UNKNOWN unk_9A6BE0; // weak _UNKNOWN unk_9A6C04; // weak _UNKNOWN unk_9A6C28; // weak _UNKNOWN unk_9A6C4C; // weak _UNKNOWN unk_9A6C70; // weak _UNKNOWN unk_9A6C94; // weak _UNKNOWN unk_9A6CB8; // weak _UNKNOWN unk_9A6CDC; // weak _UNKNOWN unk_9A6D00; // weak _UNKNOWN unk_9A6D24; // weak _UNKNOWN unk_9A6D48; // weak _UNKNOWN unk_9A6D6C; // weak _UNKNOWN unk_9A6D90; // weak _UNKNOWN unk_9A6DB4; // weak _UNKNOWN unk_9A6DD8; // weak _UNKNOWN unk_9A6DFC; // weak _UNKNOWN unk_9A6E20; // weak _UNKNOWN unk_9A6E44; // weak _UNKNOWN unk_9A6E68; // weak _UNKNOWN unk_9A6E8C; // weak _UNKNOWN unk_9A6EB0; // weak _UNKNOWN unk_9A6ED4; // weak _UNKNOWN unk_9A6EF8; // weak _UNKNOWN unk_9A6F1C; // weak _UNKNOWN unk_9A6F40; // weak _UNKNOWN unk_9A6F64; // weak _UNKNOWN unk_9A6F88; // weak _UNKNOWN unk_9A6FAC; // weak _UNKNOWN unk_9A6FD0; // weak _UNKNOWN unk_9A6FF4; // weak _UNKNOWN unk_9A7018; // weak _UNKNOWN unk_9A703C; // weak _UNKNOWN unk_9A7060; // weak _UNKNOWN unk_9A7084; // weak _UNKNOWN unk_9A70A8; // weak _UNKNOWN unk_9A70CC; // weak _UNKNOWN unk_9A70F0; // weak _UNKNOWN unk_9A7114; // weak _UNKNOWN unk_9A7138; // weak _UNKNOWN unk_9A715C; // weak _UNKNOWN unk_9A7180; // weak _UNKNOWN unk_9A71A4; // weak _UNKNOWN unk_9A71C8; // weak _UNKNOWN unk_9A71EC; // weak _UNKNOWN unk_9A7210; // weak _UNKNOWN unk_9A7234; // weak _UNKNOWN unk_9A7258; // weak _UNKNOWN unk_9A727C; // weak _UNKNOWN unk_9A72A0; // weak _UNKNOWN unk_9A72C4; // weak _UNKNOWN unk_9A72E8; // weak _UNKNOWN unk_9A730C; // weak _UNKNOWN unk_9A7330; // weak _UNKNOWN unk_9A7354; // weak _UNKNOWN unk_9A7378; // weak _UNKNOWN unk_9A739C; // weak _UNKNOWN unk_9A73C0; // weak _UNKNOWN unk_9A73E4; // weak _UNKNOWN unk_9A7408; // weak _UNKNOWN unk_9A742C; // weak _UNKNOWN unk_9A7450; // weak _UNKNOWN unk_9A7474; // weak _UNKNOWN unk_9A7498; // weak _UNKNOWN unk_9A74BC; // weak _UNKNOWN unk_9A74E0; // weak _UNKNOWN unk_9A7504; // weak _UNKNOWN unk_9A7528; // weak _UNKNOWN unk_9A754C; // weak _UNKNOWN unk_9A7570; // weak _UNKNOWN unk_9A7594; // weak _UNKNOWN unk_9A75B8; // weak _UNKNOWN unk_9A75DC; // weak _UNKNOWN unk_9A7600; // weak _UNKNOWN unk_9A7624; // weak _UNKNOWN unk_9A7648; // weak _UNKNOWN unk_9A766C; // weak _UNKNOWN unk_9A7690; // weak _UNKNOWN unk_9A76B4; // weak _UNKNOWN unk_9A76D8; // weak _UNKNOWN unk_9A76FC; // weak void *std::runtime_error::`vftable' = &sub_405BE0; // weak void *std::system_error::`vftable' = &sub_405BE0; // weak void *std::ios_base::failure::`vftable' = &sub_405BE0; // weak void *CefStructBase::`vftable' = &sub_405D70; // weak void *CefStructBase::`vftable' = &sub_405DA0; // weak void *CefStructBase::`vftable' = &sub_405E60; // weak void *CefStructBase::`vftable' = &sub_405EA0; // weak void *CefMainArgs::`vftable' = &sub_405D70; // weak void *CefWindowInfo::`vftable' = &sub_405DA0; // weak void *CefStringBase::`vftable' = &sub_405F80; // weak void *CefBase::`vftable' = &sub_46F0F0; // weak void *CefClient::`vftable' = &sub_46F0F0; // weak void *CefClient::`vftable' = &sub_4082B0; // weak void *CefContextMenuHandler::`vftable' = &sub_46F0F0; // weak void *CefContextMenuHandler::`vftable' = &sub_4079E0; // weak void *CefDisplayHandler::`vftable' = &sub_46F0F0; // weak void *CefDisplayHandler::`vftable' = &sub_4078E0; // weak void *CefDownloadHandler::`vftable' = &sub_46F0F0; // weak void *CefDownloadHandler::`vftable' = &sub_46F0F0; // weak void *CefDragHandler::`vftable' = &sub_46F0F0; // weak void *CefDragHandler::`vftable' = &sub_407C80; // weak void *CefGeolocationHandler::`vftable' = &sub_46F0F0; // weak void *CefGeolocationHandler::`vftable' = &sub_407D00; // weak void *CefKeyboardHandler::`vftable' = &sub_46F0F0; // weak void *CefKeyboardHandler::`vftable' = &sub_407490; // weak void *CefLifeSpanHandler::`vftable' = &sub_46F0F0; // weak void *CefLifeSpanHandler::`vftable' = &sub_4074F0; // weak void *CefLoadHandler::`vftable' = &sub_46F0F0; // weak void *CefLoadHandler::`vftable' = &sub_4078C0; // weak void *CefRequestHandler::`vftable' = &sub_46F0F0; // weak void *CefRequestHandler::`vftable' = &sub_4076E0; // weak void *CefRenderHandler::`vftable' = &sub_46F0F0; // weak void *CefRenderHandler::`vftable' = &sub_4075F0; // weak void *MyCefHandler::`vftable' = &dword_408360; // weak void *MyCefHandler::`vftable' = &sub_4075F0; // weak void *MyCefHandler::`vftable' = &sub_406D30; // weak void *MyCefHandler::`vftable' = &sub_4078C0; // weak void *MyCefHandler::`vftable' = &sub_406A30; // weak void *MyCefHandler::`vftable' = &sub_407490; // weak void *MyCefHandler::`vftable' = &sub_407D00; // weak void *MyCefHandler::`vftable' = &sub_407C80; // weak void *MyCefHandler::`vftable' = &sub_406980; // weak void *MyCefHandler::`vftable' = &sub_4078E0; // weak void *MyCefHandler::`vftable' = &sub_4067B0; // weak void *MyCefHandler::`vftable' = &sub_406570; // weak _UNKNOWN unk_9A7EB0; // weak _UNKNOWN unk_9A7EB8; // weak _UNKNOWN unk_9A7EC0; // weak _UNKNOWN unk_9A7EC8; // weak _UNKNOWN unk_9A7ED0; // weak _UNKNOWN unk_9A7ED8; // weak _UNKNOWN unk_9A7EE0; // weak _UNKNOWN unk_9A7EE8; // weak _UNKNOWN unk_9A7EF0; // weak _UNKNOWN unk_9A7EF8; // weak _UNKNOWN unk_9A7F00; // weak _UNKNOWN unk_9A7F26; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_4090B0; // weak const CHAR byte_9A8050 = '\0'; // idb void *NiTMap>::`vftable' = &sub_4091D0; // weak void *CharCreateClassWin::`vftable' = &unknown_libname_1; // weak void *CharCreateClassWin::`vftable' = &sub_409250; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_40A880; // weak void *NiTMap>::`vftable' = &sub_40AA30; // weak void *CharCreateDescritWin::`vftable' = &unknown_libname_1; // weak void *CharCreateDescritWin::`vftable' = &sub_40AB20; // weak void *std::tr1::_Impl_base0::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable' = &sub_40C3C0; // weak void *CharCreateInfoWin::`vftable' = &unknown_libname_1; // weak void *CharCreateInfoWin::`vftable' = &sub_40D840; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_40DAD0; // weak void *NiProperty::`vftable' = &sub_40DCC0; // weak void *NiVertexColorProperty::`vftable' = &sub_40DCC0; // weak void *IDirectMessenger::`vftable' = &unknown_libname_1; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_40DE00; // weak void *NiAlphaProperty::`vftable' = &sub_40DCC0; // weak void *NiFogProperty::`vftable' = &sub_40DCC0; // weak void *PgFrameWork::`vftable' = &unknown_libname_1; // weak void *PgTList>::`vftable' = &sub_40F6F0; // weak void *CharCreateFrameWork::`vftable' = &unknown_libname_1; // weak void *CharCreateOkCancelWin::`vftable' = &unknown_libname_1; // weak void *CharCreateOkCancelWin::`vftable' = &sub_40FED0; // weak void *CharCreateStatWin::`vftable' = &unknown_libname_1; // weak void *CharCreateStatWin::`vftable' = &sub_4106A0; // weak void *CharCreateViewCtrlWin::`vftable' = &unknown_libname_1; // weak void *CharCreateViewCtrlWin::`vftable' = &sub_410BC0; // weak void *CharSelectFrameWork::`vftable' = &unknown_libname_1; // weak _UNKNOWN unk_9A976A; // weak _UNKNOWN unk_9A976B; // weak _UNKNOWN unk_9A9772; // weak void *ChangeNameWin::`vftable' = &unknown_libname_1; // weak void *ChangeNameWin::`vftable' = &sub_416AD0; // weak void *std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable' = &sub_416A70; // weak _UNKNOWN unk_9A9AAF; // weak _UNKNOWN unk_9A9AB9; // weak void *ChatColorSpinWin::`vftable' = &unknown_libname_1; // weak void *ChatColorSpinWin::`vftable' = &sub_417CA0; // weak _UNKNOWN unk_9A9E31; // weak _UNKNOWN unk_9A9E32; // weak _UNKNOWN unk_9A9E33; // weak _UNKNOWN unk_9A9E4D; // weak _UNKNOWN unk_9A9E4E; // weak void *NiTMapBase>,unsigned char,NiPointer>::`vftable' = &sub_419AF0; // weak void *NiTMap>::`vftable' = &sub_419B30; // weak void *ClassChangeWin::`vftable' = &unknown_libname_1; // weak void *ClassChangeWin::`vftable' = &sub_419E70; // weak void *DShowMovie::`vftable' = &sub_41A370; // weak _UNKNOWN unk_9AA53D; // weak _UNKNOWN unk_9AA53E; // weak _UNKNOWN unk_9AA53F; // weak _UNKNOWN unk_9AA549; // weak _UNKNOWN unk_9AA54A; // weak _UNKNOWN unk_9AA54B; // weak _UNKNOWN unk_9AA584; // weak void *EventCallMsgBox::`vftable' = &unknown_libname_1; // weak void *EventCallMsgBox::`vftable' = &sub_41EF00; // weak void *EventRankWin::`vftable' = &unknown_libname_1; // weak void *EventRankWin::`vftable' = &sub_41FD30; // weak void *EventTimeWin::`vftable' = &unknown_libname_1; // weak void *EventTimeWin::`vftable' = &sub_4203D0; // weak _UNKNOWN unk_9AAEC4; // weak _UNKNOWN unk_9AAF7B; // weak _UNKNOWN unk_9AAF97; // weak _UNKNOWN unk_9AAFA6; // weak _UNKNOWN unk_9AAFA7; // weak _UNKNOWN unk_9AAFB6; // weak _UNKNOWN unk_9AAFB7; // weak _UNKNOWN unk_9AAFBE; // weak _UNKNOWN unk_9AAFBF; // weak _UNKNOWN unk_9AAFC9; // weak _UNKNOWN unk_9AAFCA; // weak _UNKNOWN unk_9AAFCB; // weak void *Encrypt::FileStream::`vftable' = &sub_4218A0; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *FontSetTab::`vftable' = &nullsub_6; // weak CHAR byte_9AB0E6[2] = { '\0', '\0' }; // idb char *off_9AB338 = "alnum"; // weak int dword_9AB33C[] = { 5 }; // weak __int16 word_9AB340[] = { 263 }; // weak void *std::tr1::_Node_base::`vftable' = &sub_4230A0; // weak void *std::tr1::_Root_node::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_end_group::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_assert::`vftable' = &sub_421CC0; // weak void *std::tr1::_Node_capture::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_back::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_endif::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_if::`vftable' = &sub_421DA0; // weak void *std::tr1::_Node_end_rep::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_rep::`vftable' = &sub_4230A0; // weak void *std::tr1::_Node_class>::`vftable' = &sub_425030; // weak void *std::logic_error::`vftable' = &sub_405BE0; // weak void *std::locale::facet::`vftable' = &sub_528BD0; // weak void *std::ios_base::`vftable' = &sub_423030; // weak void *std::basic_istream>::`vftable' = &sub_423DF0; // weak void *std::basic_ios>::`vftable' = &sub_423030; // weak void *std::codecvt::`vftable' = &sub_528BD0; // weak void *std::tr1::_Node_str::`vftable' = &sub_423800; // weak void *std::ctype::`vftable' = &sub_4239C0; // weak void *std::basic_streambuf>::`vftable' = &sub_423E30; // weak void *std::collate::`vftable' = &sub_528BD0; // weak void *ForumWin::`vftable' = &unknown_libname_1; // weak void *ForumWin::`vftable' = &sub_425420; // weak void *std::basic_filebuf>::`vftable' = &sub_4273D0; // weak void *std::basic_ifstream>::`vftable' = &sub_427EA0; // weak _UNKNOWN unk_9AB83C; // weak void *GuildEmblemIcon::`vftable' = &unknown_libname_1; // weak void *GuildEmblemIcon::`vftable' = &sub_42AAB0; // weak void *GuildEmblemWin::`vftable' = &unknown_libname_1; // weak void *GuildEmblemWin::`vftable' = &sub_42BE70; // weak void *NiTMapBase>,char const *,NiPointer>::`vftable' = &sub_42C760; // weak void *NiTMapBase>,char const *,NiPointer>::`vftable' = &sub_42C850; // weak void *NiTMap>::`vftable' = &sub_42C7A0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_42C820; // weak void *NiTMap>::`vftable' = &sub_42C890; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_42C910; // weak void *NiTStringMap>::`vftable' = &sub_42C820; // weak void *NiTStringMap>::`vftable' = &sub_42C910; // weak _UNKNOWN unk_9AC06F; // weak void *InstanceMatchWin::`vftable' = &unknown_libname_1; // weak void *InstanceMatchWin::`vftable' = &sub_4317E0; // weak CHAR word_9AC794[] = { ' ', '\0' }; // idb void *ItemMixDataTab::`vftable' = &sub_431BE0; // weak void *MixItemIcon::`vftable' = &unknown_libname_1; // weak void *MixItemIcon::`vftable' = &sub_433B10; // weak void *PgWinDrop::`vftable' = &sub_433A80; // weak void *DropContents::`vftable' = &sub_433AC0; // weak void *ItemMixWin::`vftable' = &unknown_libname_1; // weak void *ItemMixWin::`vftable' = &sub_433B50; // weak void *KDTeamScoreWin::`vftable' = &unknown_libname_1; // weak void *KDTeamScoreWin::`vftable' = &sub_435110; // weak void *NiTListBase,KeyMap::KeyNode *>::`vftable' = &sub_4358F0; // weak void *NiRefObject::`vftable' = &sub_632700; // weak void *NiTPointerListBase,KeyMap::KeyNode *>::`vftable' = &sub_435920; // weak void *PgTList::`vftable' = &sub_435B10; // weak void *KeyMap::`vftable' = &sub_435BA0; // weak _UNKNOWN unk_9AD157; // weak _UNKNOWN unk_9AD173; // weak void *LuaArgument::`vftable' = &sub_438A20; // weak void *NiTListBase,DamageInfo *>::`vftable' = &sub_438990; // weak void *LuaScript::`vftable' = &sub_632700; // weak void *NiTPointerListBase,DamageInfo *>::`vftable' = &sub_438B40; // weak void *NiTList::`vftable' = &sub_438B40; // weak void *Singleton::`vftable' = &sub_439180; // weak void *NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable' = &sub_439810; // weak void *NiTMap>::`vftable' = &sub_439850; // weak void *LuaScriptMgr::`vftable' = &sub_4398D0; // weak void *LuaScriptNewBie::`vftable' = &sub_439DA0; // weak void *LuaArgumentNewBie::`vftable' = &sub_439DD0; // weak void *LuaArgumentBIL_QUEST_1::`vftable' = &sub_439E20; // weak void *LuaScriptTutorial::`vftable' = &sub_43CEA0; // weak void *LuaArgumentTutorial::`vftable' = &sub_43CED0; // weak void *LuaArgumentTutorialStep::`vftable' = &sub_43CF20; // weak void *ItemSlot::`vftable' = &unknown_libname_1; // weak void *ItemSlot::`vftable' = &sub_43E750; // weak void *MinimonAutoItemUseWin::`vftable' = &unknown_libname_1; // weak void *MinimonAutoItemUseWin::`vftable' = &sub_43E820; // weak void *MobKillCountWin::`vftable' = &unknown_libname_1; // weak void *MobKillCountWin::`vftable' = &sub_43EC60; // weak _UNKNOWN unk_9AE776; // weak _UNKNOWN unk_9AE777; // weak _UNKNOWN unk_9AE77E; // weak _UNKNOWN unk_9AE77F; // weak _UNKNOWN unk_9AE796; // weak _UNKNOWN unk_9AE797; // weak _UNKNOWN unk_9AE79E; // weak _UNKNOWN unk_9AE79F; // weak void *SlotWin::`vftable' = &unknown_libname_1; // weak void *SlotWin::`vftable' = &sub_440550; // weak void *MoverUpgradeWin::`vftable' = &unknown_libname_1; // weak void *MoverUpgradeWin::`vftable' = &sub_440590; // weak void *NiTMapBase,void *,CMsgEater *>::`vftable' = &sub_440D70; // weak void *NiTPointerMap::`vftable' = &sub_440DB0; // weak void *CMsgMgr::`vftable' = &sub_440E30; // weak void *Oscillation::`vftable' = &sub_441000; // weak void *OscillationEx::`vftable' = &sub_441080; // weak _UNKNOWN unk_9AEEFF; // weak _UNKNOWN unk_9AEF06; // weak void *PartyScoreWin::`vftable' = &unknown_libname_1; // weak void *PartyScoreWin::`vftable' = &sub_442B20; // weak void *Pet::`vftable' = &sub_651890; // weak void *Pet::`vftable' = &sub_443030; // weak void *Pet::`vftable' = &sub_655EE0; // weak _UNKNOWN unk_9AF65F; // weak void *PetNameEditWin::`vftable' = &unknown_libname_1; // weak void *PetNameEditWin::`vftable' = &sub_444440; // weak void *PuzzleTimeWin::`vftable' = &unknown_libname_1; // weak void *PuzzleTimeWin::`vftable' = &sub_4450F0; // weak _UNKNOWN unk_9AFC16; // weak _UNKNOWN unk_9AFC17; // weak _UNKNOWN unk_9AFC2E; // weak void *RandomOptCountRecoverWin::`vftable' = &unknown_libname_1; // weak void *RandomOptCountRecoverWin::`vftable' = &sub_445F90; // weak _UNKNOWN unk_9AFFCE; // weak _UNKNOWN unk_9AFFCF; // weak _UNKNOWN unk_9AFFEA; // weak char byte_9AFFEB = '\0'; // idb void *ChangeSlotWin::`vftable' = &unknown_libname_1; // weak void *ChangeSlotWin::`vftable' = &sub_448C30; // weak void *RandomOptionWin::`vftable' = &unknown_libname_1; // weak void *RandomOptionWin::`vftable' = &sub_448C70; // weak _UNKNOWN unk_9B0697; // weak _UNKNOWN unk_9B06AE; // weak _UNKNOWN unk_9B06AF; // weak _UNKNOWN unk_9B06B6; // weak _UNKNOWN unk_9B06B7; // weak _UNKNOWN unk_9B06C5; // weak _UNKNOWN unk_9B06C6; // weak _UNKNOWN unk_9B06C7; // weak _UNKNOWN unk_9B06CE; // weak _UNKNOWN unk_9B06CF; // weak _UNKNOWN unk_9B06D6; // weak _UNKNOWN unk_9B06D7; // weak _UNKNOWN unk_9B06F9; // weak _UNKNOWN unk_9B06FA; // weak _UNKNOWN unk_9B06FB; // weak _UNKNOWN unk_9B0709; // weak _UNKNOWN unk_9B070A; // weak _UNKNOWN unk_9B070B; // weak void *FaceCutMaskWin::`vftable' = &unknown_libname_1; // weak void *FaceCutMaskWin::`vftable' = &sub_44D630; // weak void *IDRankingWin::`vftable' = &unknown_libname_1; // weak void *IDRankingWin::`vftable' = &sub_44D8F0; // weak void *CCallback::`vftable' = &sub_44E280; // weak void *CCallback::`vftable' = &sub_44E280; // weak _UNKNOWN unk_9B12B3; // weak _UNKNOWN unk_9B12BA; // weak _UNKNOWN unk_9B12BB; // weak _UNKNOWN unk_9B12CA; // weak void *ItemSlotWin::`vftable' = &unknown_libname_1; // weak void *ItemSlotWin::`vftable' = &sub_450690; // weak void *TermExtendWin::`vftable' = &unknown_libname_1; // weak void *TermExtendWin::`vftable' = &sub_450880; // weak unsigned __int8 byte_9B1910 = 32u; // idb _UNKNOWN unk_9B1914; // weak unsigned __int8 byte_9B1918 = 32u; // idb void *TextFilter::`vftable' = &sub_46F0F0; // weak void *TextFilterReplace::`vftable' = &sub_451260; // weak void *NiTListBase,TextFilter *>::`vftable' = &sub_451410; // weak void *NiTPointerListBase,TextFilter *>::`vftable' = &sub_452330; // weak _UNKNOWN unk_9B1A4A; // weak int (__stdcall *`TextFilterTable::FilterEmotion'::`2'::TextFilterEmotion::`vftable')(int, int, int) = &sub_451660; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *NiTList::`vftable' = &sub_452330; // weak void *SlanderFilterTable::`vftable' = &nullsub_6; // weak void *EmotionFilterTable::`vftable' = &nullsub_6; // weak void *BadNameFilterTable::`vftable' = &nullsub_6; // weak void *Singleton::`vftable' = &sub_453740; // weak void *NiTListBase,int>::`vftable' = &sub_4537A0; // weak void *NiTPointerListBase,int>::`vftable' = &sub_453850; // weak void *PgTList::`vftable' = &sub_453960; // weak void *TextScreenWin::`vftable' = &unknown_libname_1; // weak void *TextScreenWin::`vftable' = &sub_4539F0; // weak void *TextScreenEffect::`vftable' = &sub_453A90; // weak void *Singleton::`vftable' = &sub_455500; // weak void *NiTMapBase>,int,NiPointer>::`vftable' = &sub_455690; // weak void *NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable' = &sub_4556D0; // weak void *NiTMap>::`vftable' = &sub_4557F0; // weak void *NiTMap::`vftable' = &sub_455870; // weak void *Tutorial::`vftable' = &sub_455990; // weak void *UIBlinkEffect::`vftable' = &unknown_libname_1; // weak void *UIBlinkEffect::`vftable' = &sub_455FB0; // weak _UNKNOWN unk_9B2068; // weak void *UIUtil::`vftable' = &sub_4571B0; // weak const CHAR byte_9B20BF = '\0'; // idb void *WebBrowserWin::`vftable' = &unknown_libname_1; // weak void *WebBrowserWin::`vftable' = &sub_457BE0; // weak char byte_9B23FD[7] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; // idb void *ZlibUtil::`vftable' = &nullsub_32; // weak void *zlibUtil2::`vftable' = &sub_4590C0; // weak void *AutoSizingTextWin::`vftable' = &unknown_libname_1; // weak void *AutoSizingTextWin::`vftable' = &sub_459580; // weak void *ClientWin::`vftable' = &unknown_libname_1; // weak void *ClientWin::`vftable' = &sub_4598C0; // weak void *EditWin::`vftable' = &unknown_libname_1; // weak void *EditWin::`vftable' = &sub_45AC90; // weak void *EditWinEx::`vftable' = &unknown_libname_1; // weak void *EditWinEx::`vftable' = &sub_45ACC0; // weak void *FlexMsgBox::`vftable' = &unknown_libname_1; // weak void *FlexMsgBox::`vftable' = &sub_45B460; // weak void *FrameBoxWin::`vftable' = &unknown_libname_1; // weak void *FrameBoxWin::`vftable' = &sub_45C720; // weak _UNKNOWN unk_9B334A; // weak _UNKNOWN unk_9B334C; // weak void *ImeCandListWin::`vftable' = &unknown_libname_1; // weak void *ImeCandListWin::`vftable' = &sub_45CF80; // weak void *ImeEditWin::`vftable' = &unknown_libname_1; // weak void *ImeEditWin::`vftable' = &sub_45E4B0; // weak void *ImeEditWinEx::`vftable' = &unknown_libname_1; // weak void *ImeEditWinEx::`vftable' = &sub_45E4E0; // weak _UNKNOWN unk_9B3A0B; // weak void *InputBox::`vftable' = &unknown_libname_1; // weak void *InputBox::`vftable' = &sub_45ECD0; // weak _UNKNOWN unk_9B3CCE; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_45F940; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_45FA50; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_45F970; // weak void *NiTListBase,PgWinBut *>::`vftable' = &sub_45F9A0; // weak void *ListItem::`vftable' = &sub_45FB60; // weak void *NiTPointerListBase,PgWinBut *>::`vftable' = &sub_45FD30; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_45FDC0; // weak void *PgTList>::`vftable' = &sub_45FC20; // weak void *NiTList::`vftable' = &sub_45FD30; // weak void *PgTList>::`vftable' = &sub_45FED0; // weak void *ListWin::`vftable' = &unknown_libname_1; // weak void *ListWin::`vftable' = &sub_45FF60; // weak void *NiBinaryExtraData::`vftable' = &sub_460940; // weak void *MaskedWin::`vftable' = &unknown_libname_1; // weak void *MaskedWin::`vftable' = &sub_460980; // weak void *MaskShader::`vftable' = &sub_4616B0; // weak void *MaskShader_NoAlphaBlend::`vftable' = &sub_4616B0; // weak _UNKNOWN unk_9B431E; // weak void *MsgBox::`vftable' = &unknown_libname_1; // weak void *MsgBox::`vftable' = &sub_4633D0; // weak void *PgWinProxy::`vftable' = &unknown_libname_1; // weak void *PgWinProxy::`vftable' = &sub_463400; // weak _UNKNOWN unk_9B4990; // weak _UNKNOWN unk_9B4991; // weak _UNKNOWN unk_9B4994; // weak void *SlideBar::`vftable' = &unknown_libname_1; // weak void *SlideBar::`vftable' = &sub_464490; // weak void *std::tr1::_Ref_count_base::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Ref_count::`vftable' = &sub_4694E0; // weak void *std::tr1::_Ref_count::`vftable' = &sub_469B50; // weak void *ColumnBut::`vftable' = &unknown_libname_1; // weak void *ColumnBut::`vftable' = &sub_467E20; // weak void *SlideListWin::`vftable' = &unknown_libname_1; // weak void *SlideListWin::`vftable' = &sub_469080; // weak void *SpeechBubbleWin::`vftable' = &unknown_libname_1; // weak void *SpeechBubbleWin::`vftable' = &sub_46B130; // weak void *WebMsgWin::`vftable' = &unknown_libname_1; // weak void *WebMsgWin::`vftable' = &sub_46B910; // weak void *CWebContainer::`vftable' = &sub_46D1D0; // weak void *CWebContainer::`vftable' = &sub_46D1C0; // weak void *CWebContainer::`vftable' = &sub_46D1B0; // weak void *CWebContainer::`vftable' = &sub_46D180; // weak void *CWebContainer::`vftable' = &sub_46CE90; // weak void *CWebEventSink::`vftable' = &sub_46D1F0; // weak void *NiZBufferProperty::`vftable' = &sub_40DCC0; // weak void *Singleton::`vftable' = &sub_46EE70; // weak _UNKNOWN unk_9B5C6F; // weak _UNKNOWN unk_9B5C76; // weak char byte_9B5D9C = '³'; // idb void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *TextData::`vftable' = &sub_4508E0; // weak void *TextData2::`vftable' = &sub_450A20; // weak void *TextData3::`vftable' = &sub_450B60; // weak void *DeprecatedFilesTable::`vftable' = &nullsub_6; // weak void *MainApp::`vftable' = &sub_4719D0; // weak const CHAR byte_9B7BEC = '¿'; // idb const CHAR byte_9B7BF4 = '¿'; // idb const CHAR byte_9B7BFC = '¿'; // idb const CHAR byte_9B7C04 = '¿'; // idb void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *ColorInfoTable::`vftable' = &nullsub_6; // weak void *ItemViewEquipTypeInfoTab::`vftable' = &nullsub_6; // weak void *ItemMoneyTab::`vftable' = &nullsub_6; // weak void *CharClass::`vftable' = &nullsub_6; // weak void *ActionEffectInfoTab::`vftable' = &nullsub_6; // weak void *HairInfoTab::`vftable' = &nullsub_6; // weak void *HairColorInfoTab::`vftable' = &nullsub_6; // weak void *ShakeEffectViewInfoTab::`vftable' = &nullsub_6; // weak void *MHFurnitureObjEffectTab::`vftable' = &nullsub_6; // weak void *MiniHouseObjAniInfoTab::`vftable' = &nullsub_6; // weak void *MiniHouseEndureInfoTable::`vftable' = &nullsub_6; // weak void *MiniHouseFuritureInfoTab::`vftable' = &nullsub_6; // weak void *MiniHouseEmotionTab::`vftable' = &nullsub_6; // weak void *UpEffectTab::`vftable' = &nullsub_6; // weak void *ScriptMsgTab::`vftable' = &nullsub_6; // weak void *ChargedEffectTable::`vftable' = &nullsub_6; // weak void *CharRace::`vftable' = &nullsub_6; // weak void *FaceInfoTab::`vftable' = &nullsub_6; // weak void *DmgSndTab::`vftable' = &nullsub_6; // weak void *ProduceInfoTable::`vftable' = &nullsub_6; // weak void *GatherInfoTable::`vftable' = &nullsub_6; // weak void *KQDescTable::`vftable' = &nullsub_6; // weak void *ProduceViewInfoTable::`vftable' = &nullsub_6; // weak void *NpcDialogDataTable::`vftable' = &nullsub_6; // weak void *GradeItemOptionTab::`vftable' = &nullsub_6; // weak void *MiniHouseTable::`vftable' = &nullsub_6; // weak void *ItemShopViewTable::`vftable' = &nullsub_6; // weak void *WeaponAttribTab::`vftable' = &nullsub_6; // weak void *WorldMapAvatarInfoTab::`vftable' = &nullsub_6; // weak void *ItemDismantleTab::`vftable' = &nullsub_6; // weak void *TownPortalInfoTable::`vftable' = &nullsub_6; // weak void *SetItemNameTab::`vftable' = &nullsub_6; // weak void *ItemActionEffectDescTab::`vftable' = &nullsub_6; // weak void *SetEffectTab::`vftable' = &nullsub_6; // weak void *ActionEffectItemTab::`vftable' = &nullsub_6; // weak void *ItemActionTab::`vftable' = &nullsub_6; // weak void *ItemActionEffectTab::`vftable' = &nullsub_6; // weak void *ItemActionConditionTab::`vftable' = &nullsub_6; // weak void *GuildTournamentStateDescTab::`vftable' = &nullsub_6; // weak void *GuildTournamentStateTab::`vftable' = &nullsub_6; // weak void *GTRequireTab::`vftable' = &nullsub_6; // weak void *DiceDividIndTab::`vftable' = &nullsub_6; // weak void *GBDiceDividIndTab::`vftable' = &nullsub_6; // weak void *GBHouseTab::`vftable' = &nullsub_6; // weak void *MobRandomIdleAniTab::`vftable' = &nullsub_6; // weak void *CharacterTitleStateViewTab::`vftable' = &nullsub_6; // weak void *GTIViewInfoTab::`vftable' = &nullsub_6; // weak void *DamageEffectTab::`vftable' = &nullsub_6; // weak void *ActiveSkillGroupTab::`vftable' = &nullsub_6; // weak void *MapWayPointTab::`vftable' = &nullsub_6; // weak void *MapLinkPointTab::`vftable' = &nullsub_6; // weak void *BelongTypeInfoTab::`vftable' = &nullsub_6; // weak void *ChargedDeletableBuffTab::`vftable' = &nullsub_6; // weak void *BasicInfoTitleTab::`vftable' = &nullsub_6; // weak void *BasicInfoLinkTab::`vftable' = &nullsub_6; // weak void *BasicInfoTipTab::`vftable' = &nullsub_6; // weak void *BasicInfoTipCycleTab::`vftable' = &nullsub_6; // weak void *BasicInfoFindTab::`vftable' = &nullsub_6; // weak void *BasicInfoFindUITab::`vftable' = &nullsub_6; // weak void *BasicInfoFindWordTab::`vftable' = &nullsub_6; // weak void *CollectCardTab::`vftable' = &nullsub_6; // weak void *CollectCardViewTab::`vftable' = &nullsub_6; // weak void *CollectCardGroupDescTab::`vftable' = &nullsub_6; // weak void *CollectCardRewardTab::`vftable' = &nullsub_6; // weak void *CollectCardTitleTab::`vftable' = &nullsub_6; // weak void *MoverMainTab::`vftable' = &nullsub_6; // weak void *MoverUseSkillTab::`vftable' = &nullsub_6; // weak void *MoverHGTab::`vftable' = &nullsub_6; // weak void *MoverViewTab::`vftable' = &nullsub_6; // weak void *MoverSlotViewTab::`vftable' = &nullsub_6; // weak void *MoverSlotCharAniTab::`vftable' = &nullsub_6; // weak void *MoverAbilityTab::`vftable' = &nullsub_6; // weak void *MoverItemTab::`vftable' = &nullsub_6; // weak void *PetMainTab::`vftable' = &nullsub_6; // weak void *PetViewTab::`vftable' = &nullsub_6; // weak void *KQVoteDescTable::`vftable' = &nullsub_6; // weak void *KQVoteMajorityRateTable::`vftable' = &nullsub_6; // weak void *KQIsVoteTable::`vftable' = &nullsub_6; // weak void *KQTeamTable::`vftable' = &nullsub_6; // weak void *MobConditionViewTab::`vftable' = &nullsub_6; // weak void *MobNoFadeInTab::`vftable' = &nullsub_6; // weak void *MarketSearchInfoTab::`vftable' = &nullsub_6; // weak void *ChrCreateEquipTab::`vftable' = &nullsub_6; // weak void *MoverUpgradeEffectTab::`vftable' = &nullsub_6; // weak void *ChatColorTab::`vftable' = &nullsub_6; // weak void *TermExtendMatchTable::`vftable' = &nullsub_6; // weak void *TermExtendMatchGroupDescTable::`vftable' = &nullsub_6; // weak void *AbStateMsgTable::`vftable' = &nullsub_6; // weak void *MinimonInfoTable::`vftable' = &nullsub_6; // weak void *MinimonAutoUseItemTable::`vftable' = &nullsub_6; // weak void *ItemViewDummyTab::`vftable' = &nullsub_6; // weak void *UseCalssTypeTable::`vftable' = &nullsub_6; // weak void *ChrBasicEquipTab::`vftable' = &nullsub_6; // weak void *FaceCutMsgTab::`vftable' = &nullsub_6; // weak void *ItemInfoTab::`vftable' = &nullsub_6; // weak void *ItemViewInfoTab::`vftable' = &nullsub_6; // weak void *MobInfoTab::`vftable' = &nullsub_6; // weak void *MobViewInfoTab::`vftable' = &nullsub_6; // weak void *NPCViewInfoTab::`vftable' = &nullsub_6; // weak void *AbnormalStateInfoTab::`vftable' = &nullsub_6; // weak void *AbnormalStateViewInfoTab::`vftable' = &nullsub_6; // weak void *SubAbStateInfoTab::`vftable' = &nullsub_6; // weak void *MapInfoTab::`vftable' = &nullsub_6; // weak void *MapViewInfoTab::`vftable' = &nullsub_6; // weak void *UpGradeInfoTab::`vftable' = &nullsub_6; // weak void *ActionViewTable::`vftable' = &nullsub_6; // weak void *RidePetTable::`vftable' = &nullsub_6; // weak void *MobCoordinateTab::`vftable' = &nullsub_6; // weak void *MobKillAnnounceTextTab::`vftable' = &nullsub_6; // weak void *ChargedIconItemTab::`vftable' = &nullsub_6; // weak void *ChargedMsgItemTab::`vftable' = &nullsub_6; // weak void *AttendRewardTab::`vftable' = &nullsub_6; // weak void *BRAccUpgradeInfoTab::`vftable' = &nullsub_6; // weak void *NiActionData::`vftable' = &sub_4844A0; // weak void *NiTListBase,PgWin *>::`vftable' = &sub_4891A0; // weak void *NiTPointerListBase,PgWin *>::`vftable' = &sub_489270; // weak void *NiTPointerList::`vftable' = &sub_489270; // weak void *PgTList::`vftable' = &sub_4893A0; // weak void *AccountFrameWork::`vftable' = &unknown_libname_1; // weak void *LoginWorldNetFrameWork::`vftable' = &unknown_libname_1; // weak void *SignUpWin::`vftable' = &unknown_libname_1; // weak void *SignUpWin::`vftable' = &sub_48A750; // weak void *SpawnAppsWin::`vftable' = &unknown_libname_1; // weak void *SpawnAppsWin::`vftable' = &sub_48A790; // weak _UNKNOWN unk_9B9729; // weak void *AccountWin::`vftable' = &unknown_libname_1; // weak void *AccountWin::`vftable' = &sub_48B5B0; // weak void *WorldSelectExitWin::`vftable' = &unknown_libname_1; // weak void *WorldSelectExitWin::`vftable' = &sub_48E0E0; // weak void *WorldSelectOptionWin::`vftable' = &unknown_libname_1; // weak void *WorldSelectOptionWin::`vftable' = &sub_48E120; // weak void *WorldSelectOptionSetWin::`vftable' = &unknown_libname_1; // weak void *WorldSelectOptionSetWin::`vftable' = &sub_48E160; // weak int (*off_9BA3C8)() = &sub_8F47B0; // weak int (__stdcall *off_9BA3D4)(int, int, int, int, int, int, int, int) = &sub_8F42E0; // weak int (__stdcall *off_9BA3DC)(char) = &sub_402A80; // weak void *WorldSelectWin::`vftable' = &unknown_libname_1; // weak void *WorldSelectWin::`vftable' = &sub_48E1A0; // weak void *ZoneLoginNetFrameWork::`vftable' = &unknown_libname_1; // weak void *CharSelectInfoWin::`vftable' = &unknown_libname_1; // weak void *CharSelectInfoWin::`vftable' = &sub_490CD0; // weak int (*off_9BA7B0)() = &sub_4023A0; // weak int (__stdcall *off_9BA7BC[8])(int) = { &sub_85A550, &sub_859E60, &sub_859EE0, &sub_859FB0, &sub_85A6D0, &nullsub_32, &sub_85A460, &sub_85B730 }; // weak int (__stdcall *off_9BA7C4[6])(int) = { &sub_859EE0, &sub_859FB0, &sub_85A6D0, &nullsub_32, &sub_85A460, &sub_85B730 }; // weak void *CharSelectMenuWin::`vftable' = &unknown_libname_1; // weak void *CharSelectMenuWin::`vftable' = &sub_491980; // weak int (__stdcall *off_9BAB98[2])(int) = { &sub_4025C0, &sub_4025D0 }; // weak int (__stdcall *off_9BABA4[2])(int) = { &sub_4024E0, &sub_4024A0 }; // weak int (*off_9BABAC[4])() = { &sub_402520, &sub_402530, &sub_402560, &sub_402570 }; // weak void *EventFriendCountWin::`vftable' = &unknown_libname_1; // weak void *EventFriendCountWin::`vftable' = &sub_491E90; // weak int (__stdcall *off_9BAF80)(int, int, int, int, int, int) = &sub_8F43D0; // weak int (__stdcall *off_9BAF8C)(char) = &sub_402A80; // weak int (__stdcall *off_9BAF94)(int, int, int, int, int, int) = &sub_8F15E0; // weak _UNKNOWN unk_9BAFB6; // weak _UNKNOWN unk_9BAFB7; // weak _UNKNOWN unk_9BAFC2; // weak _UNKNOWN unk_9BAFC3; // weak _UNKNOWN unk_9BB1CC; // weak _UNKNOWN unk_9BB1E0; // weak char byte_9BB260 = '¤'; // idb char aAt[2] = "at"; // idb _UNKNOWN unk_9BB5A8; // weak char byte_9BB5AA = '\0'; // idb const CHAR byte_9BB5AB = '\0'; // idb CHAR byte_9BB5AE[2] = { '\0', '\0' }; // idb CHAR aClearMPkmhpo[14] = "Clear m_pkMHPo"; // idb CHAR aClear[6] = "Clear "; // idb void *NiTListBase>,NiPointer>::`vftable' = &sub_49F460; // weak void *NiTPointerListBase>,NiPointer>::`vftable' = &sub_49F840; // weak void *GatheringTask::`vftable' = &unknown_libname_1; // weak void *GatheringTask::`vftable' = &sub_50A360; // weak void *ProductTask::`vftable' = &unknown_libname_1; // weak void *ProductTask::`vftable' = &sub_50A360; // weak CHAR aAi[6] = "### ÀÌ"; // idb _UNKNOWN unk_9BB930; // weak _UNKNOWN unk_9BB932; // weak _UNKNOWN unk_9BB933; // weak _UNKNOWN unk_9BB947; // weak void *NiIntegerExtraData::`vftable' = &sub_4B1250; // weak int (*off_9BBB38)() = &sub_888D60; // weak int (__stdcall *off_9BBB44[4])(int) = { &sub_86B340, &nullsub_32, &sub_85BAE0, &nullsub_32 }; // weak int (__stdcall *off_9BBB4C[2])(int) = { &sub_85BAE0, &nullsub_32 }; // weak void *NiTListBase,unsigned int>::`vftable' = &sub_4B1070; // weak void *NiTListBase,PgWin *>::`vftable' = &sub_4B10A0; // weak void *NiTListBase,ScriptBtn *>::`vftable' = &sub_4B0E20; // weak void *NiTPointerListBase,unsigned int>::`vftable' = &sub_4B1A80; // weak void *NiTPointerListBase,PgWin *>::`vftable' = &sub_4B18E0; // weak void *NiTPointerListBase,ScriptBtn *>::`vftable' = &sub_4B19F0; // weak void *PgTList::`vftable' = &sub_4B14D0; // weak void *NiTList::`vftable' = &sub_4B18E0; // weak void *NiTList::`vftable' = &sub_4B19F0; // weak void *NiTPointerList::`vftable' = &sub_4B1A80; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_4B1F10; // weak void *GuildJoinReqTask::`vftable' = &unknown_libname_1; // weak void *GuildJoinReqTask::`vftable' = &sub_4B1F10; // weak _UNKNOWN unk_9BBC95; // weak char byte_9BBC96[2] = { '\0', '\0' }; // idb _UNKNOWN unk_9BBC9F; // weak char byte_9BBD1B = '\0'; // idb char byte_9BBD2A = '\0'; // idb _UNKNOWN unk_9BBD2B; // weak _UNKNOWN unk_9BBD61; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_4DDBB0; // weak void *ItemUseTask::`vftable' = &unknown_libname_1; // weak void *ItemUseTask::`vftable' = &sub_4DDBB0; // weak void *EffectObjectMgr::`vftable' = &sub_4DE110; // weak void *AreaInfoMgr::`vftable' = &sub_4DE3A0; // weak _UNKNOWN unk_9BC53A; // weak char byte_9BC53B = '\0'; // idb char byte_9BC53C[4] = { '\0', '\0', '\0', '\0' }; // idb void *NiTListBase,IOptionBase *>::`vftable' = &sub_4E65A0; // weak void *NiTPointerListBase,IOptionBase *>::`vftable' = &sub_4E6890; // weak void *std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable' = &sub_4E6930; // weak void *GameFrameWork::`vftable' = &unknown_libname_1; // weak void *PremiumActionIcon::`vftable' = &unknown_libname_1; // weak void *PremiumActionIcon::`vftable' = &sub_4EA870; // weak void *ActionInvTabButWin::`vftable' = &unknown_libname_1; // weak void *ActionInvTabButWin::`vftable' = &sub_4EA8B0; // weak void *ActionIconWin::`vftable' = &unknown_libname_1; // weak void *ActionIconWin::`vftable' = &sub_4EA920; // weak void *ActionWin::`vftable' = &unknown_libname_1; // weak void *ActionWin::`vftable' = &sub_4EA950; // weak void *PremiumActionWin::`vftable' = &unknown_libname_1; // weak void *PremiumActionWin::`vftable' = &sub_4EA9A0; // weak _UNKNOWN unk_9BD586; // weak void *PgFadeTextGeometry::`vftable' = &sub_4EB5C0; // weak void *AnnounceWin::`vftable' = &unknown_libname_1; // weak void *AnnounceWin::`vftable' = &sub_4EB650; // weak void *AttendCheckBut::`vftable' = &sub_4ED8C0; // weak void *AttendCheckWin::`vftable' = &unknown_libname_1; // weak void *AttendCheckWin::`vftable' = &sub_4ED8F0; // weak void *AttendIconWin::`vftable' = &unknown_libname_1; // weak void *AttendIconWin::`vftable' = &sub_4EDFE0; // weak void *AttendRewardWin::`vftable' = &unknown_libname_1; // weak void *AttendRewardWin::`vftable' = &sub_4EE900; // weak _UNKNOWN unk_9BE498; // weak void *BasicInfoTipWin::`vftable' = &unknown_libname_1; // weak void *BasicInfoTipWin::`vftable' = &sub_4EF1E0; // weak void *StatusBuffWin::`vftable' = &unknown_libname_1; // weak void *StatusBuffWin::`vftable' = &sub_4F20E0; // weak _UNKNOWN unk_9BEA36; // weak _UNKNOWN unk_9BEA37; // weak void *CalculatorWin::`vftable' = &unknown_libname_1; // weak void *CalculatorWin::`vftable' = &sub_4F3130; // weak void *CastingProgressWin::`vftable' = &unknown_libname_1; // weak void *CastingProgressWin::`vftable' = &sub_4F3960; // weak char byte_9BF041 = '\0'; // idb _UNKNOWN unk_9BF042; // weak _UNKNOWN unk_9BF043; // weak _UNKNOWN unk_9BF04A; // weak _UNKNOWN unk_9BF04B; // weak _UNKNOWN unk_9BF051; // weak _UNKNOWN unk_9BF052; // weak _UNKNOWN unk_9BF053; // weak _UNKNOWN unk_9BF07F; // weak _UNKNOWN unk_9BF091; // weak void *ChargedItemListWin::`vftable' = &unknown_libname_1; // weak void *ChargedItemListWin::`vftable' = &sub_4F48A0; // weak _UNKNOWN unk_9BF3F7; // weak _UNKNOWN unk_9BF42D; // weak void *StatPointReqTask::`vftable' = &unknown_libname_1; // weak void *StatPointReqTask::`vftable' = &sub_50A360; // weak void *CharInfoWin::`vftable' = &unknown_libname_1; // weak void *CharInfoWin::`vftable' = &sub_4F9F50; // weak _UNKNOWN unk_9BFC1F; // weak _UNKNOWN unk_9BFC35; // weak _UNKNOWN unk_9BFC36; // weak _UNKNOWN unk_9BFC37; // weak _UNKNOWN unk_9BFC3E; // weak _UNKNOWN unk_9BFC3F; // weak void *CharTitleWin::`vftable' = &unknown_libname_1; // weak void *CharTitleWin::`vftable' = &sub_4FB4D0; // weak void *ChatBlockListWin::`vftable' = &unknown_libname_1; // weak void *ChatBlockListWin::`vftable' = &sub_4FC4E0; // weak void *ChatEditWin::`vftable' = &unknown_libname_1; // weak void *ChatEditWin::`vftable' = &sub_4FCAB0; // weak void *ClockShadowWin::`vftable' = &unknown_libname_1; // weak void *ClockShadowWin::`vftable' = &sub_4FD760; // weak _UNKNOWN unk_9C0983; // weak _UNKNOWN unk_9C098A; // weak _UNKNOWN unk_9C098B; // weak _UNKNOWN unk_9C099B; // weak _UNKNOWN unk_9C09A6; // weak _UNKNOWN unk_9C09A7; // weak void *CollectCardWin::`vftable' = &unknown_libname_1; // weak void *CollectCardWin::`vftable' = &sub_4FFAB0; // weak _UNKNOWN unk_9C0CFF; // weak void *CollectRwItemWin::`vftable' = &unknown_libname_1; // weak void *CollectRwItemWin::`vftable' = &sub_503750; // weak void *CollectRwChoiceInv::`vftable' = &unknown_libname_1; // weak void *CollectRwChoiceInv::`vftable' = &sub_503790; // weak void *CollectPopupWin::`vftable' = &unknown_libname_1; // weak void *CollectPopupWin::`vftable' = &sub_5037D0; // weak void *CardSlotWin::`vftable' = &unknown_libname_1; // weak void *CardSlotWin::`vftable' = &sub_5038E0; // weak void *CollectPageWin::`vftable' = &unknown_libname_1; // weak void *CollectPageWin::`vftable' = &sub_503950; // weak void *CollectRwChoiceWin::`vftable' = &unknown_libname_1; // weak void *CollectRwChoiceWin::`vftable' = &sub_503980; // weak void *CollectCardChoiceWin::`vftable' = &unknown_libname_1; // weak void *CollectCardChoiceWin::`vftable' = &sub_5039F0; // weak _UNKNOWN unk_9C1FE7; // weak _UNKNOWN unk_9C1FF6; // weak _UNKNOWN unk_9C1FF7; // weak _UNKNOWN unk_9C1FFE; // weak _UNKNOWN unk_9C1FFF; // weak _UNKNOWN unk_9C2006; // weak void *CollectMainWin::`vftable' = &unknown_libname_1; // weak void *CollectMainWin::`vftable' = &sub_509380; // weak void *CollectCardListWin::`vftable' = &unknown_libname_1; // weak void *CollectCardListWin::`vftable' = &sub_5093B0; // weak void *CollectWin::`vftable' = &unknown_libname_1; // weak void *CollectWin::`vftable' = &sub_509BE0; // weak void *DesktopWin::`vftable' = &unknown_libname_1; // weak void *DesktopWin::`vftable' = &sub_50A320; // weak void *ItemDropTask::`vftable' = &unknown_libname_1; // weak void *ItemDropTask::`vftable' = &sub_50A360; // weak void *DivideWin::`vftable' = &unknown_libname_1; // weak void *DivideWin::`vftable' = &sub_50AE60; // weak _UNKNOWN unk_9C2E81; // weak _UNKNOWN unk_9C2E82; // weak _UNKNOWN unk_9C2E83; // weak _UNKNOWN unk_9C2E8E; // weak _UNKNOWN unk_9C2E8F; // weak _UNKNOWN unk_9C2E9A; // weak _UNKNOWN unk_9C2E9B; // weak _UNKNOWN unk_9C2EAA; // weak void *EnchantGemToolTipWin::`vftable' = &unknown_libname_1; // weak void *EnchantGemToolTipWin::`vftable' = &sub_50D500; // weak void *EnchantGemWin::`vftable' = &unknown_libname_1; // weak void *EnchantGemWin::`vftable' = &sub_50D540; // weak void *EnchantGemDeleteWin::`vftable' = &unknown_libname_1; // weak void *EnchantGemDeleteWin::`vftable' = &sub_50D540; // weak void *EventFriendWin::`vftable' = &unknown_libname_1; // weak void *EventFriendWin::`vftable' = &sub_50DC20; // weak void *FeedMoverWin::`vftable' = &unknown_libname_1; // weak void *FeedMoverWin::`vftable' = &sub_50EF00; // weak _UNKNOWN unk_9C3F22; // weak _UNKNOWN unk_9C3F23; // weak _UNKNOWN unk_9C3F2F; // weak _UNKNOWN unk_9C3F3A; // weak _UNKNOWN unk_9C3F3B; // weak _UNKNOWN unk_9C3F43; // weak _UNKNOWN unk_9C3F53; // weak _UNKNOWN unk_9C3F9F; // weak _UNKNOWN unk_9C3FAB; // weak _UNKNOWN unk_9C3FAE; // weak void *FreeStatView::`vftable' = &unknown_libname_1; // weak void *FreeStatView::`vftable' = &sub_50FD20; // weak _UNKNOWN unk_9C4270; // weak _UNKNOWN unk_9C4288; // weak _UNKNOWN unk_9C4300; // weak void *FriendCallWin::`vftable' = &unknown_libname_1; // weak void *FriendCallWin::`vftable' = &sub_510B40; // weak _UNKNOWN unk_9C45FB; // weak char byte_9C4611 = '\0'; // idb _UNKNOWN unk_9C4612; // weak _UNKNOWN unk_9C4613; // weak _UNKNOWN unk_9C461A; // weak void *FriendAddWin::`vftable' = &unknown_libname_1; // weak void *FriendAddWin::`vftable' = &sub_517C40; // weak void *FriendPointTipMsg::`vftable' = &unknown_libname_1; // weak void *FriendPointTipMsg::`vftable' = &sub_517C80; // weak void *FriendWin::`vftable' = &unknown_libname_1; // weak void *FriendWin::`vftable' = &sub_517E60; // weak _UNKNOWN unk_9C55F9; // weak _UNKNOWN unk_9C55FA; // weak _UNKNOWN unk_9C55FB; // weak _UNKNOWN unk_9C560A; // weak _UNKNOWN unk_9C560B; // weak _UNKNOWN unk_9C5621; // weak _UNKNOWN unk_9C5622; // weak void *InvisibleWin::`vftable' = &unknown_libname_1; // weak void *InvisibleWin::`vftable' = &sub_463400; // weak void *NiTListBase,float>::`vftable' = &sub_521E80; // weak void *NiTListBase,RaidMarkWin *>::`vftable' = &sub_521CB0; // weak void *NiTListBase,NpcMarkWin *>::`vftable' = &sub_521CE0; // weak void *NiTPointerListBase,NpcMarkWin *>::`vftable' = &sub_5220A0; // weak void *NiTListBase,PartyMarkWin *>::`vftable' = &sub_521D10; // weak void *NiTListBase,GTIScanMarkWin *>::`vftable' = &sub_521D40; // weak void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable' = &sub_5225B0; // weak void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable' = &sub_5225F0; // weak void *NiTListBase,QuestHelperMarkWin *>::`vftable' = &sub_521D70; // weak void *NiTListBase,PgWinSpr *>::`vftable' = &sub_521DA0; // weak void *NiTListBase,MobAreaMarkWin *>::`vftable' = &sub_521DD0; // weak void *NiTListBase,MobCoordinate *>::`vftable' = &sub_521E00; // weak void *NiTPointerListBase,MobCoordinate *>::`vftable' = &sub_5221B0; // weak void *NiTPointerListBase,float>::`vftable' = &sub_521EB0; // weak void *NiTPointerListBase,RaidMarkWin *>::`vftable' = &sub_5229C0; // weak void *NiTPointerListBase,PartyMarkWin *>::`vftable' = &sub_522A50; // weak void *NiTPointerListBase,QuestHelperMarkWin *>::`vftable' = &sub_522AE0; // weak void *NiTPointerListBase,PgWinSpr *>::`vftable' = &sub_522B70; // weak void *NiTPointerListBase,MobAreaMarkWin *>::`vftable' = &sub_522C00; // weak void *NiTPointerListBase,GTIScanMarkWin *>::`vftable' = &sub_522C90; // weak void *PgTList::`vftable' = &sub_5226B0; // weak void *NiTMap::`vftable' = &sub_522E40; // weak void *NiTMap::`vftable' = &sub_522EC0; // weak void *PgTList::`vftable' = &sub_522D20; // weak void *PgTList::`vftable' = &sub_522DB0; // weak void *NiTPointerList::`vftable' = &sub_521EB0; // weak void *PgTList::`vftable' = &sub_523240; // weak void *PgTList::`vftable' = &sub_5232D0; // weak void *PgTList::`vftable' = &sub_523510; // weak void *PgTList::`vftable' = &sub_523360; // weak void *PgTList::`vftable' = &sub_5233F0; // weak void *PgTList::`vftable' = &sub_523480; // weak void *FullMapWin::`vftable' = &unknown_libname_1; // weak void *FullMapWin::`vftable' = &sub_5235A0; // weak void *GateChannelWin::`vftable' = &unknown_libname_1; // weak void *GateChannelWin::`vftable' = &sub_524230; // weak void *GatheringWin::`vftable' = &unknown_libname_1; // weak void *GatheringWin::`vftable' = &sub_524F40; // weak _UNKNOWN unk_9C698B; // weak _UNKNOWN unk_9C6992; // weak _UNKNOWN unk_9C6993; // weak _UNKNOWN unk_9C69A1; // weak _UNKNOWN unk_9C6C9C; // weak void *std::tr1::_Impl_base2::`vftable' = &sub_46F0F0; // weak void *std::basic_ostream>::`vftable' = &sub_528550; // weak void *std::basic_stringbuf,std::allocator>::`vftable' = &sub_528AE0; // weak void *std::num_put>>::`vftable' = &sub_528BD0; // weak void *std::numpunct::`vftable' = &sub_528D60; // weak void *std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable' = &sub_528DC0; // weak void *std::basic_ostringstream,std::allocator>::`vftable' = &sub_529250; // weak _UNKNOWN unk_9C6DA0; // weak _UNKNOWN unk_9C6DA8; // weak _UNKNOWN unk_9C6DB0; // weak _UNKNOWN unk_9C6DB4; // weak _UNKNOWN unk_9C6DB8; // weak _UNKNOWN unk_9C6DBC; // weak void *GuildListWin::`vftable' = &unknown_libname_1; // weak void *GuildListWin::`vftable' = &sub_52BA60; // weak void *GuildSelectWin::`vftable' = &unknown_libname_1; // weak void *GuildSelectWin::`vftable' = &sub_52C340; // weak void *HelpWin::`vftable' = &unknown_libname_1; // weak void *HelpWin::`vftable' = &sub_52CD40; // weak _UNKNOWN unk_9C764B; // weak char byte_9C7666 = '\0'; // idb _UNKNOWN unk_9C7667; // weak _UNKNOWN unk_9C766E; // weak char byte_9C766F = '\0'; // idb char byte_9C7676 = '\0'; // idb char byte_9C7677 = '\0'; // idb char byte_9C7689 = '\0'; // idb _UNKNOWN unk_9C768A; // weak _UNKNOWN unk_9C768B; // weak void *HolyPromiseAddWin::`vftable' = &unknown_libname_1; // weak void *HolyPromiseAddWin::`vftable' = &sub_5307E0; // weak void *HolyPromiseWin::`vftable' = &unknown_libname_1; // weak void *HolyPromiseWin::`vftable' = &sub_5310A0; // weak void *IDTimeWin::`vftable' = &unknown_libname_1; // weak void *IDTimeWin::`vftable' = &sub_531710; // weak _UNKNOWN unk_9C825C; // weak _UNKNOWN unk_9C825D; // weak _UNKNOWN unk_9C825E; // weak _UNKNOWN unk_9C825F; // weak _UNKNOWN unk_9C8273; // weak _UNKNOWN unk_9C8296; // weak _UNKNOWN unk_9C8297; // weak void *IndunLevelSelectWin::`vftable' = &unknown_libname_1; // weak void *IndunLevelSelectWin::`vftable' = &sub_5328E0; // weak void *IndunLevelMsgWin::`vftable' = &unknown_libname_1; // weak void *IndunLevelMsgWin::`vftable' = &sub_532920; // weak void *InputTextWin::`vftable' = &unknown_libname_1; // weak void *InputTextWin::`vftable' = &sub_533230; // weak _UNKNOWN unk_9C8A8B; // weak char aItemsortButton[23] = "ItemSort_Button_US.nif"; // weak void *InvTabButWin::`vftable' = &unknown_libname_1; // weak void *InvTabButWin::`vftable' = &sub_53DA50; // weak void *ChargedItemIcon::`vftable' = &unknown_libname_1; // weak void *ChargedItemIcon::`vftable' = &sub_53DA90; // weak void *ChargedItemInvenWin::`vftable' = &unknown_libname_1; // weak void *ChargedItemInvenWin::`vftable' = &sub_53DAD0; // weak void *CompensationInvWin::`vftable' = &unknown_libname_1; // weak void *CompensationInvWin::`vftable' = &sub_53DB10; // weak void *InvWin::`vftable' = &unknown_libname_1; // weak void *InvWin::`vftable' = &sub_53DBB0; // weak void *CompensationItemIcon::`vftable' = &unknown_libname_1; // weak void *CompensationItemIcon::`vftable' = &sub_53DBE0; // weak void *InventoryWin::`vftable' = &unknown_libname_1; // weak void *InventoryWin::`vftable' = &sub_53DC30; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_53DC60; // weak void *ChargedItemUseTask::`vftable' = &unknown_libname_1; // weak void *ChargedItemUseTask::`vftable' = &sub_53DC60; // weak _UNKNOWN unk_9CA216; // weak _UNKNOWN unk_9CA217; // weak _UNKNOWN unk_9CA227; // weak _UNKNOWN unk_9CA231; // weak _UNKNOWN unk_9CA232; // weak _UNKNOWN unk_9CA233; // weak _UNKNOWN unk_9CA23E; // weak _UNKNOWN unk_9CA23F; // weak _UNKNOWN unk_9CA261; // weak _UNKNOWN unk_9CA2D3; // weak void *ItemInfoWin::`vftable' = &unknown_libname_1; // weak void *ItemInfoWin::`vftable' = &sub_548A00; // weak void *ItemMallMenuWin::`vftable' = &unknown_libname_1; // weak void *ItemMallMenuWin::`vftable' = &sub_549E60; // weak void *ShopInvWin::`vftable' = &unknown_libname_1; // weak void *ShopInvWin::`vftable' = &sub_54BB10; // weak void *ItemShopWin::`vftable' = &unknown_libname_1; // weak void *ItemShopWin::`vftable' = &sub_54BB50; // weak _UNKNOWN unk_9CB4C7; // weak _UNKNOWN unk_9CB4DD; // weak _UNKNOWN unk_9CB4DE; // weak _UNKNOWN unk_9CB4DF; // weak _UNKNOWN unk_9CB4E6; // weak _UNKNOWN unk_9CB4E7; // weak void *ItemTradeWin::`vftable' = &unknown_libname_1; // weak void *ItemTradeWin::`vftable' = &sub_54CBE0; // weak void *ForgeSlotInvWin::`vftable' = &unknown_libname_1; // weak void *ForgeSlotInvWin::`vftable' = &sub_550DC0; // weak void *ItemUpgradeMsgWin::`vftable' = &unknown_libname_1; // weak void *ItemUpgradeMsgWin::`vftable' = &sub_550E00; // weak void *ItemUpgradeWin::`vftable' = &unknown_libname_1; // weak void *ItemUpgradeWin::`vftable' = &sub_550E40; // weak _UNKNOWN unk_9CC1A1; // weak _UNKNOWN unk_9CC1A2; // weak void *KeyRemappingBut::`vftable' = &unknown_libname_1; // weak void *KeyRemappingBut::`vftable' = &sub_5583D0; // weak void *KeyRemappingWin::`vftable' = &unknown_libname_1; // weak void *KeyRemappingWin::`vftable' = &sub_558470; // weak _UNKNOWN unk_9CD3D7; // weak _UNKNOWN unk_9CD3DE; // weak void *KQScoreWin::`vftable' = &unknown_libname_1; // weak void *KQScoreWin::`vftable' = &sub_558CD0; // weak void *MainCharHPBarWin::`vftable' = &unknown_libname_1; // weak void *MainCharHPBarWin::`vftable' = &sub_559890; // weak void *MainMenuWin::`vftable' = &unknown_libname_1; // weak void *MainMenuWin::`vftable' = &sub_55BE40; // weak _UNKNOWN unk_9CDF84; // weak _UNKNOWN unk_9CDF85; // weak void *KarisForgeSlotInvWin::`vftable' = &unknown_libname_1; // weak void *KarisForgeSlotInvWin::`vftable' = &sub_55D960; // weak void *MakeKarisWin::`vftable' = &unknown_libname_1; // weak void *MakeKarisWin::`vftable' = &sub_55DA00; // weak _UNKNOWN unk_9CE5D1; // weak _UNKNOWN unk_9CE5D2; // weak void *MapLinkGateWin::`vftable' = &unknown_libname_1; // weak void *MapLinkGateWin::`vftable' = &sub_55EDD0; // weak _UNKNOWN unk_9CE9FA; // weak _UNKNOWN unk_9CE9FB; // weak void *MarketSearchItem::`vftable' = &sub_563960; // weak void *MarketSearchWin::`vftable' = &unknown_libname_1; // weak void *MarketSearchWin::`vftable' = &sub_565380; // weak void *MiniHouseInvTabButWin::`vftable' = &unknown_libname_1; // weak void *MiniHouseInvTabButWin::`vftable' = &sub_567F90; // weak void *MiniHouseInvWin::`vftable' = &unknown_libname_1; // weak void *MiniHouseInvWin::`vftable' = &sub_568010; // weak void *MiniHouseInventoryWin::`vftable' = &unknown_libname_1; // weak void *MiniHouseInventoryWin::`vftable' = &sub_568040; // weak void *MiniHouseMenuWin::`vftable' = &unknown_libname_1; // weak void *MiniHouseMenuWin::`vftable' = &sub_568F20; // weak _UNKNOWN unk_9CFCB9; // weak void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable' = &sub_56FFD0; // weak void *NiTPointerListBase,MiniMapWin::sKQAlarmInfo *>::`vftable' = &sub_570090; // weak void *MiniMapMarkWin::`vftable' = &unknown_libname_1; // weak void *MiniMapMarkWin::`vftable' = &sub_570250; // weak void *MainCharMarkWin::`vftable' = &unknown_libname_1; // weak void *MainCharMarkWin::`vftable' = &sub_570250; // weak void *NpcMarkWin::`vftable' = &unknown_libname_1; // weak void *NpcMarkWin::`vftable' = &sub_570220; // weak void *PartyMarkWin::`vftable' = &unknown_libname_1; // weak void *PartyMarkWin::`vftable' = &sub_570250; // weak void *RaidMarkWin::`vftable' = &unknown_libname_1; // weak void *RaidMarkWin::`vftable' = &sub_570250; // weak void *QuestHelperMarkWin::`vftable' = &unknown_libname_1; // weak void *QuestHelperMarkWin::`vftable' = &sub_570380; // weak void *MobAreaMarkWin::`vftable' = &unknown_libname_1; // weak void *MobAreaMarkWin::`vftable' = &sub_570250; // weak void *GTIScanMarkWin::`vftable' = &unknown_libname_1; // weak void *GTIScanMarkWin::`vftable' = &sub_570250; // weak void *MapMarkWin::`vftable' = &unknown_libname_1; // weak void *MapMarkWin::`vftable' = &sub_570250; // weak void *KQTeamMarkWin::`vftable' = &unknown_libname_1; // weak void *KQTeamMarkWin::`vftable' = &sub_570250; // weak void *PgTList::`vftable' = &sub_5702F0; // weak void *MiniMapWin::`vftable' = &unknown_libname_1; // weak void *MiniMapWin::`vftable' = &sub_5703B0; // weak _UNKNOWN unk_9D1539; // weak _UNKNOWN unk_9D153A; // weak _UNKNOWN unk_9D153B; // weak void *MiniPartyWin::`vftable' = &unknown_libname_1; // weak void *MiniPartyWin::`vftable' = &sub_5726A0; // weak _UNKNOWN unk_9D192F; // weak _UNKNOWN unk_9D1941; // weak _UNKNOWN unk_9D1942; // weak _UNKNOWN unk_9D1943; // weak _UNKNOWN unk_9D194A; // weak _UNKNOWN unk_9D194B; // weak _UNKNOWN unk_9D1952; // weak _UNKNOWN unk_9D1953; // weak _UNKNOWN unk_9D195A; // weak _UNKNOWN unk_9D195B; // weak void *MoneyWin::`vftable' = &unknown_libname_1; // weak void *MoneyWin::`vftable' = &sub_574250; // weak void *HolyRewardMoneyWin::`vftable' = &unknown_libname_1; // weak void *HolyRewardMoneyWin::`vftable' = &sub_574290; // weak void *MoveModeWin::`vftable' = &unknown_libname_1; // weak void *MoveModeWin::`vftable' = &sub_5746E0; // weak void *MysteryVaultWin::`vftable' = &unknown_libname_1; // weak void *MysteryVaultWin::`vftable' = &sub_575080; // weak _UNKNOWN unk_9D2727; // weak _UNKNOWN unk_9D2728; // weak _UNKNOWN unk_9D2729; // weak void *ItemShopInvWin::`vftable' = &unknown_libname_1; // weak void *ItemShopInvWin::`vftable' = &sub_577150; // weak void *NPCItemWin::`vftable' = &unknown_libname_1; // weak void *NPCItemWin::`vftable' = &sub_577190; // weak _UNKNOWN unk_9D2DF6; // weak void *NPCSkillInvWin::`vftable' = &unknown_libname_1; // weak void *NPCSkillInvWin::`vftable' = &sub_579B60; // weak void *NPCSkillWin::`vftable' = &unknown_libname_1; // weak void *NPCSkillWin::`vftable' = &sub_579C50; // weak void *NPCSoulInvWin::`vftable' = &unknown_libname_1; // weak void *NPCSoulInvWin::`vftable' = &sub_57AC80; // weak void *NPCSoulWin::`vftable' = &unknown_libname_1; // weak void *NPCSoulWin::`vftable' = &sub_57ACC0; // weak _UNKNOWN unk_9D3ACA; // weak void *PartyJoinProposeWin::`vftable' = &sub_57B750; // weak void *PartyJoinProposeWin::`vftable' = &unknown_libname_1; // weak void *PartyJoinProposeWin::`vftable' = &loc_57B760; // weak _UNKNOWN unk_9D3D85; // weak void *PartyLootSelectWin::`vftable' = &unknown_libname_1; // weak void *PartyLootSelectWin::`vftable' = &sub_57DA00; // weak void *PartyLootSetupWin::`vftable' = &unknown_libname_1; // weak void *PartyLootSetupWin::`vftable' = &sub_57DA40; // weak void *CPartyMatchWin::`vftable' = &unknown_libname_1; // weak void *CPartyMatchWin::`vftable' = &sub_57FEA0; // weak _UNKNOWN unk_9D49FB; // weak _UNKNOWN unk_9D4A07; // weak _UNKNOWN unk_9D4A13; // weak _UNKNOWN unk_9D4A1D; // weak void *PartyWin::`vftable' = &unknown_libname_1; // weak void *PartyWin::`vftable' = &sub_5826A0; // weak void *PkKqRankingWin::`vftable' = &unknown_libname_1; // weak void *PkKqRankingWin::`vftable' = &sub_583B00; // weak _UNKNOWN unk_9D5359; // weak _UNKNOWN unk_9D535A; // weak _UNKNOWN unk_9D53E0; // weak void *std::tr1::_Impl_base2::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable' = &sub_585400; // weak void *PkRealTiemRankWin::`vftable' = &unknown_libname_1; // weak void *PkRealTiemRankWin::`vftable' = &sub_5872B0; // weak unsigned __int8 byte_9D56B2 = 0u; // idb unsigned __int8 byte_9D56B3 = 0u; // idb unsigned __int8 byte_9D56BF = 0u; // idb _UNKNOWN unk_9D56DB; // weak _UNKNOWN unk_9D56E9; // weak void *PlayGuideMinWin::`vftable' = &unknown_libname_1; // weak void *PlayGuideMinWin::`vftable' = &sub_58A3E0; // weak void *PlayGuideWin::`vftable' = &unknown_libname_1; // weak void *PlayGuideWin::`vftable' = &sub_58A780; // weak void *PopupMenu::`vftable' = &unknown_libname_1; // weak void *PopupMenu::`vftable' = &sub_58E8F0; // weak void *PopupMenuText::`vftable' = &unknown_libname_1; // weak void *PopupMenuText::`vftable' = &sub_58E8F0; // weak void *PopupMenuTextCheck::`vftable' = &unknown_libname_1; // weak void *PopupMenuTextCheck::`vftable' = &sub_58E8F0; // weak void *PopupMenuWin::`vftable' = &unknown_libname_1; // weak void *PopupMenuWin::`vftable' = &sub_58E9E0; // weak void *PopupMenuSubMenu::`vftable' = &unknown_libname_1; // weak void *PopupMenuSubMenu::`vftable' = &sub_58EA10; // weak void *PrisonTimeWin::`vftable' = &unknown_libname_1; // weak void *PrisonTimeWin::`vftable' = &sub_58F0F0; // weak _UNKNOWN unk_9D7097; // weak _UNKNOWN unk_9D709B; // weak _UNKNOWN unk_9D70B2; // weak _UNKNOWN unk_9D70B3; // weak _UNKNOWN unk_9D70BA; // weak _UNKNOWN unk_9D70BB; // weak _UNKNOWN unk_9D70D2; // weak _UNKNOWN unk_9D70D3; // weak _UNKNOWN unk_9D70DA; // weak _UNKNOWN unk_9D70DB; // weak _UNKNOWN unk_9D70E5; // weak _UNKNOWN unk_9D70E6; // weak void *PrivateStoreInvWin::`vftable' = &unknown_libname_1; // weak void *PrivateStoreInvWin::`vftable' = &sub_5922D0; // weak void *PrivateStoreWin::`vftable' = &unknown_libname_1; // weak void *PrivateStoreWin::`vftable' = &sub_592300; // weak _UNKNOWN unk_9D7817; // weak _UNKNOWN unk_9D7821; // weak _UNKNOWN unk_9D7822; // weak _UNKNOWN unk_9D7823; // weak _UNKNOWN unk_9D783E; // weak _UNKNOWN unk_9D783F; // weak _UNKNOWN unk_9D784E; // weak void *MaterialItemIcon::`vftable' = &unknown_libname_1; // weak void *MaterialItemIcon::`vftable' = &sub_594540; // weak void *ProductionWin::`vftable' = &unknown_libname_1; // weak void *ProductionWin::`vftable' = &sub_594570; // weak _UNKNOWN unk_9D8006; // weak _UNKNOWN unk_9D8007; // weak void *ProductSkillSelectWin::`vftable' = &unknown_libname_1; // weak void *ProductSkillSelectWin::`vftable' = &sub_595910; // weak void *RebirthMenuWin::`vftable' = &sub_596350; // weak void *RebirthMenuWin::`vftable' = &unknown_libname_1; // weak void *RebirthMenuWin::`vftable' = &loc_596360; // weak _UNKNOWN unk_9D8787; // weak _UNKNOWN unk_9D878E; // weak _UNKNOWN unk_9D878F; // weak _UNKNOWN unk_9D87A6; // weak _UNKNOWN unk_9D87A7; // weak _UNKNOWN unk_9D87AE; // weak void *ReportWin::`vftable' = &unknown_libname_1; // weak void *ReportWin::`vftable' = &sub_597430; // weak _UNKNOWN unk_9D8B4B; // weak _UNKNOWN unk_9D8B52; // weak void *ReviveMenuWin::`vftable' = &unknown_libname_1; // weak void *ReviveMenuWin::`vftable' = &sub_598420; // weak void *RewardWin::`vftable' = &unknown_libname_1; // weak void *RewardWin::`vftable' = &sub_599C10; // weak void *RewardInvItem::`vftable' = &sub_599C50; // weak void *RewardInvWin::`vftable' = &unknown_libname_1; // weak void *RewardInvWin::`vftable' = &sub_599C80; // weak void *RidePetWin::`vftable' = &unknown_libname_1; // weak void *RidePetWin::`vftable' = &sub_59AFB0; // weak void *RoarWin::`vftable' = &unknown_libname_1; // weak void *RoarWin::`vftable' = &sub_59C620; // weak _UNKNOWN unk_9D9C83; // weak _UNKNOWN unk_9D9C8A; // weak void *RollingDiceWin::`vftable' = &unknown_libname_1; // weak void *RollingDiceWin::`vftable' = &sub_59D920; // weak void *RollingDiceMsgWin::`vftable' = &unknown_libname_1; // weak void *RollingDiceMsgWin::`vftable' = &sub_59D960; // weak void *ScreenWin::`vftable' = &unknown_libname_1; // weak void *ScreenWin::`vftable' = &sub_59DC10; // weak _UNKNOWN unk_9DA506; // weak void *ServerMenuWin::`vftable' = &unknown_libname_1; // weak void *ServerMenuWin::`vftable' = &sub_59ECB0; // weak _UNKNOWN unk_9DA836; // weak _UNKNOWN unk_9DA837; // weak void *ServerTimeWin::`vftable' = &unknown_libname_1; // weak void *ServerTimeWin::`vftable' = &sub_59F3B0; // weak CHAR byte_9DAAF2[2] = { '\0', '\0' }; // idb CHAR aCuueA_0[6] = "ÇÚµéÆÄ"; // idb CHAR aCuueA[6] = "ÇÚµéÆÄ"; // idb void *ShopWin::`vftable' = &unknown_libname_1; // weak void *ShopWin::`vftable' = &sub_5A0250; // weak _UNKNOWN unk_9DAE1F; // weak _UNKNOWN unk_9DAE20; // weak _UNKNOWN unk_9DAE22; // weak _UNKNOWN unk_9DAE23; // weak _UNKNOWN unk_9DAE24; // weak _UNKNOWN unk_9DAE25; // weak _UNKNOWN unk_9DAE27; // weak void *ShortCutIconWin::`vftable' = &unknown_libname_1; // weak void *ShortCutIconWin::`vftable' = &sub_5A6040; // weak void *ShortCutWin::`vftable' = &unknown_libname_1; // weak void *ShortCutWin::`vftable' = &sub_5A6070; // weak _UNKNOWN unk_9DB7C3; // weak _UNKNOWN unk_9DB7CD; // weak _UNKNOWN unk_9DB7CE; // weak _UNKNOWN unk_9DB920; // weak _UNKNOWN unk_9DB924; // weak void *NiTListBase,ItemAction *>::`vftable' = &sub_5AB8F0; // weak void *NiTPointerListBase,ItemAction *>::`vftable' = &sub_5ABD20; // weak void *NiTList::`vftable' = &sub_5ABD20; // weak void *SkillInfoWin::`vftable' = &unknown_libname_1; // weak void *SkillInfoWin::`vftable' = &sub_5ACBF0; // weak _UNKNOWN unk_9DBDA6; // weak void *CSkillInitWin::`vftable' = &unknown_libname_1; // weak void *CSkillInitWin::`vftable' = &sub_5AD530; // weak _UNKNOWN unk_9DC129; // weak _UNKNOWN unk_9DC12A; // weak _UNKNOWN unk_9DC12B; // weak _UNKNOWN unk_9DC142; // weak _UNKNOWN unk_9DC143; // weak void *SkillPowerIconWin::`vftable' = &unknown_libname_1; // weak void *SkillPowerIconWin::`vftable' = &sub_5AF100; // weak void *SkillPowerListItemWin::`vftable' = &unknown_libname_1; // weak void *SkillPowerListItemWin::`vftable' = &sub_5AF140; // weak void *SkillPowerWin::`vftable' = &unknown_libname_1; // weak void *SkillPowerWin::`vftable' = &sub_5AF180; // weak _UNKNOWN unk_9DCAC2; // weak _UNKNOWN unk_9DCAC3; // weak _UNKNOWN unk_9DCACA; // weak _UNKNOWN unk_9DCACB; // weak _UNKNOWN unk_9DCAD5; // weak _UNKNOWN unk_9DCAD6; // weak void *PosInfoWinBut::`vftable' = &unknown_libname_1; // weak void *PosInfoWinBut::`vftable' = &sub_5B39C0; // weak void *LevelSelectWinBut::`vftable' = &unknown_libname_1; // weak void *LevelSelectWinBut::`vftable' = &sub_5B3A00; // weak void *SkillInvWin::`vftable' = &unknown_libname_1; // weak void *SkillInvWin::`vftable' = &sub_5B3A40; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_5B3990; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_5B3B20; // weak void *PgTList>::`vftable' = &sub_5B3C30; // weak void *SkillWin::`vftable' = &unknown_libname_1; // weak void *SkillWin::`vftable' = &sub_5B3CC0; // weak _UNKNOWN unk_9DD793; // weak _UNKNOWN unk_9DD79D; // weak void *SoulStoneInfoWin::`vftable' = &unknown_libname_1; // weak void *SoulStoneInfoWin::`vftable' = &sub_5B4C80; // weak void *SoulStoneWin::`vftable' = &unknown_libname_1; // weak void *SoulStoneWin::`vftable' = &sub_5B5780; // weak _UNKNOWN unk_9DDD28; // weak _UNKNOWN unk_9DDD29; // weak _UNKNOWN unk_9DDD2A; // weak _UNKNOWN unk_9DDD2B; // weak _UNKNOWN unk_9DDD2C; // weak _UNKNOWN unk_9DDD2D; // weak void *StatTitleListItemWin::`vftable' = &unknown_libname_1; // weak void *StatTitleListItemWin::`vftable' = &sub_5B6260; // weak void *StatTitleWin::`vftable' = &unknown_libname_1; // weak void *StatTitleWin::`vftable' = &sub_5B62A0; // weak _UNKNOWN unk_9DE39F; // weak _UNKNOWN unk_9DE3A6; // weak _UNKNOWN unk_9DE3A7; // weak _UNKNOWN unk_9DE3B2; // weak _UNKNOWN unk_9DE3B3; // weak void *StatusWin::`vftable' = &unknown_libname_1; // weak void *StatusWin::`vftable' = &sub_5B8A10; // weak _UNKNOWN unk_9DE80D; // weak _UNKNOWN unk_9DE80E; // weak _UNKNOWN unk_9DE80F; // weak _UNKNOWN unk_9DE816; // weak _UNKNOWN unk_9DE817; // weak _UNKNOWN unk_9DE823; // weak void *StorageTabButWin::`vftable' = &unknown_libname_1; // weak void *StorageTabButWin::`vftable' = &sub_5BB300; // weak void *StorageInvWin::`vftable' = &unknown_libname_1; // weak void *StorageInvWin::`vftable' = &sub_5BB340; // weak void *StorageWin::`vftable' = &unknown_libname_1; // weak void *StorageWin::`vftable' = &sub_5BB3C0; // weak void *SysMsgDisplayWin::`vftable' = &unknown_libname_1; // weak void *SysMsgDisplayWin::`vftable' = &sub_604370; // weak void *SystemWin::`vftable' = &unknown_libname_1; // weak void *SystemWin::`vftable' = &sub_5BCE40; // weak _UNKNOWN unk_9DF937; // weak _UNKNOWN unk_9DF93E; // weak _UNKNOWN unk_9DF93F; // weak _UNKNOWN unk_9DF94A; // weak void *MobIconWin::`vftable' = &unknown_libname_1; // weak void *MobIconWin::`vftable' = &sub_5C1840; // weak void *AbStateIconWin::`vftable' = &unknown_libname_1; // weak void *AbStateIconWin::`vftable' = &sub_5C1880; // weak void *TargetOfTheTargetWin::`vftable' = &unknown_libname_1; // weak void *TargetOfTheTargetWin::`vftable' = &sub_5C1940; // weak void *NiTListBase,unsigned short>::`vftable' = &sub_5C1810; // weak void *NiTPointerListBase,unsigned short>::`vftable' = &sub_5C19C0; // weak void *NiTList::`vftable' = &sub_5C19C0; // weak void *TargetWin::`vftable' = &unknown_libname_1; // weak void *TargetWin::`vftable' = &sub_5C1A50; // weak _UNKNOWN unk_9E069C; // weak _UNKNOWN unk_9E069D; // weak void *ToolTipWin::`vftable' = &unknown_libname_1; // weak void *ToolTipWin::`vftable' = &sub_5C1F50; // weak _UNKNOWN unk_9E090B; // weak _UNKNOWN unk_9E0912; // weak _UNKNOWN unk_9E0913; // weak _UNKNOWN unk_9E0921; // weak void *UserTradeInvWin::`vftable' = &unknown_libname_1; // weak void *UserTradeInvWin::`vftable' = &sub_5C3D70; // weak void *UserTradeWin::`vftable' = &unknown_libname_1; // weak void *UserTradeWin::`vftable' = &sub_5C3DB0; // weak _UNKNOWN unk_9E11FA; // weak _UNKNOWN unk_9E11FB; // weak _UNKNOWN unk_9E120A; // weak _UNKNOWN unk_9E120B; // weak void *VoteWin::`vftable' = &unknown_libname_1; // weak void *VoteWin::`vftable' = &sub_5C5640; // weak void *VoteReasonWin::`vftable' = &unknown_libname_1; // weak void *VoteReasonWin::`vftable' = &sub_5C56E0; // weak void *WaitingForLogoutWin::`vftable' = &unknown_libname_1; // weak void *WaitingForLogoutWin::`vftable' = &sub_5C64F0; // weak void *LogoutAfterMinutesWin::`vftable' = &unknown_libname_1; // weak void *LogoutAfterMinutesWin::`vftable' = &sub_5C6530; // weak _UNKNOWN unk_9E1BDF; // weak _UNKNOWN unk_9E1BF7; // weak _UNKNOWN unk_9E1BFE; // weak _UNKNOWN unk_9E1BFF; // weak _UNKNOWN unk_9E1C06; // weak _UNKNOWN unk_9E1C07; // weak _UNKNOWN unk_9E1C29; // weak _UNKNOWN unk_9E1C2A; // weak _UNKNOWN unk_9E1C2B; // weak void *WeaponTitleWin::`vftable' = &unknown_libname_1; // weak void *WeaponTitleWin::`vftable' = &sub_5C7F80; // weak void *WeaponTitleDeleteWin::`vftable' = &unknown_libname_1; // weak void *WeaponTitleDeleteWin::`vftable' = &sub_5C7F80; // weak _UNKNOWN unk_9E2399; // weak void *WingStoneMapWin::`vftable' = &unknown_libname_1; // weak void *WingStoneMapWin::`vftable' = &sub_5C8CB0; // weak void *WingStoneWin::`vftable' = &unknown_libname_1; // weak void *WingStoneWin::`vftable' = &sub_5CA470; // weak _UNKNOWN unk_9E2AE6; // weak char byte_9E2AE7 = '\0'; // idb void *WorldMapWin::`vftable' = &unknown_libname_1; // weak void *WorldMapWin::`vftable' = &sub_5CB1F0; // weak _UNKNOWN unk_9E2DFB; // weak void *OptionBaseWin::`vftable' = &unknown_libname_1; // weak void *OptionBaseWin::`vftable' = &sub_5CC180; // weak _UNKNOWN unk_9E316C; // weak void *OptionGraphicWin::`vftable' = &unknown_libname_1; // weak void *OptionGraphicWin::`vftable' = &sub_5CDF20; // weak _UNKNOWN unk_9E3660; // weak void *OptionSoundWin::`vftable' = &unknown_libname_1; // weak void *OptionSoundWin::`vftable' = &sub_5CEC70; // weak _UNKNOWN unk_9E394C; // weak void *OptionSystemWin::`vftable' = &unknown_libname_1; // weak void *OptionSystemWin::`vftable' = &sub_5D0E70; // weak _UNKNOWN unk_9E3F36; // weak void *AbstateIcon::`vftable' = &unknown_libname_1; // weak void *AbstateIcon::`vftable' = &sub_5D1D30; // weak void *ActionIcon::`vftable' = &unknown_libname_1; // weak void *ActionIcon::`vftable' = &sub_5D2030; // weak void *AniIconWin::`vftable' = &unknown_libname_1; // weak void *AniIconWin::`vftable' = &sub_5D25D0; // weak void *IconSlotWin::`vftable' = &unknown_libname_1; // weak void *IconSlotWin::`vftable' = &sub_5D2F20; // weak void *IconWin::`vftable' = &unknown_libname_1; // weak void *IconWin::`vftable' = &sub_5D53F0; // weak _UNKNOWN unk_9E4B98; // weak _UNKNOWN unk_9E4B9A; // weak _UNKNOWN unk_9E4B9B; // weak _UNKNOWN unk_9E4BA1; // weak _UNKNOWN unk_9E4BA2; // weak _UNKNOWN unk_9E4BA3; // weak _UNKNOWN unk_9E4BAF; // weak _UNKNOWN unk_9E4BB3; // weak void *ItemIcon::`vftable' = &unknown_libname_1; // weak void *ItemIcon::`vftable' = &sub_594540; // weak void *NiTListBase,SkillIcon *>::`vftable' = &sub_5D8600; // weak void *NiTPointerListBase,SkillIcon *>::`vftable' = &sub_5D8630; // weak void *SkillIcon::`vftable' = &unknown_libname_1; // weak void *SkillIcon::`vftable' = &sub_5D86C0; // weak _UNKNOWN unk_9E519E; // weak void *GuildCombatPropensityChangeWin::`vftable' = &unknown_libname_1; // weak void *GuildCombatPropensityChangeWin::`vftable' = &sub_5D9170; // weak void *GuildFoundWin::`vftable' = &unknown_libname_1; // weak void *GuildFoundWin::`vftable' = &sub_5DA1C0; // weak void *GuildMasterMenuWin::`vftable' = &unknown_libname_1; // weak void *GuildMasterMenuWin::`vftable' = &sub_5DAD40; // weak _UNKNOWN unk_9E5C9F; // weak void *GuildMenuWin::`vftable' = &unknown_libname_1; // weak void *GuildMenuWin::`vftable' = &sub_5DB970; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5DBC60; // weak void *GuildLeaveTask::`vftable' = &unknown_libname_1; // weak void *GuildLeaveTask::`vftable' = &sub_5DBC60; // weak _UNKNOWN unk_9E6055; // weak _UNKNOWN unk_9E6056; // weak void *GuildNameChangeWin::`vftable' = &unknown_libname_1; // weak void *GuildNameChangeWin::`vftable' = &sub_5DC700; // weak void *GuildNoticeEditorWin::`vftable' = &unknown_libname_1; // weak void *GuildNoticeEditorWin::`vftable' = &sub_5DD090; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5DD0D0; // weak void *GuildNotifyTask::`vftable' = &unknown_libname_1; // weak void *GuildNotifyTask::`vftable' = &sub_5DD1A0; // weak _UNKNOWN unk_9E672F; // weak void *GuildNpcMenuWin::`vftable' = &unknown_libname_1; // weak void *GuildNpcMenuWin::`vftable' = &sub_5DE2A0; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5DE340; // weak void *GuildDismissTask::`vftable' = &unknown_libname_1; // weak void *GuildDismissTask::`vftable' = &sub_5DE340; // weak void *GuildWarInformWin::`vftable' = &unknown_libname_1; // weak void *GuildWarInformWin::`vftable' = &sub_5DE8A0; // weak void *GuildWarKillCountWin::`vftable' = &unknown_libname_1; // weak void *GuildWarKillCountWin::`vftable' = &sub_5DEEC0; // weak void *GuildWarStateWin::`vftable' = &unknown_libname_1; // weak void *GuildWarStateWin::`vftable' = &sub_5E21E0; // weak _UNKNOWN unk_9E76BF; // weak _UNKNOWN unk_9E76C6; // weak _UNKNOWN unk_9E76C7; // weak _UNKNOWN unk_9E76CE; // weak _UNKNOWN unk_9E76CF; // weak _UNKNOWN unk_9E76D6; // weak char byte_9E76D7 = '\0'; // idb void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5E8750; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5E8790; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5E87D0; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_5E8810; // weak void *GuildMemberVanishTask::`vftable' = &unknown_libname_1; // weak void *GuildMemberVanishTask::`vftable' = &sub_5E8750; // weak void *GuildMemberGradeSetupTask::`vftable' = &unknown_libname_1; // weak void *GuildMemberGradeSetupTask::`vftable' = &sub_5E8790; // weak void *GuildAcademyMasterAppointTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMasterAppointTask::`vftable' = &sub_5E87D0; // weak void *GuildAcademyMasterInitializeTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMasterInitializeTask::`vftable' = &sub_5E8810; // weak void *GuildWin::`vftable' = &unknown_libname_1; // weak void *GuildWin::`vftable' = &sub_5E8C50; // weak void *GTIFlagWin::`vftable' = &unknown_libname_1; // weak void *GTIFlagWin::`vftable' = &sub_5E8FF0; // weak _UNKNOWN unk_9E84DC; // weak _UNKNOWN unk_9E84DD; // weak void *GTInformWin::`vftable' = &unknown_libname_1; // weak void *GTInformWin::`vftable' = &sub_5E96D0; // weak _UNKNOWN unk_9E8752; // weak _UNKNOWN unk_9E8753; // weak _UNKNOWN unk_9E8766; // weak _UNKNOWN unk_9E8767; // weak _UNKNOWN unk_9E876E; // weak _UNKNOWN unk_9E876F; // weak _UNKNOWN unk_9E8779; // weak _UNKNOWN unk_9E877A; // weak _UNKNOWN unk_9E877B; // weak _UNKNOWN unk_9E8792; // weak _UNKNOWN unk_9E8793; // weak _UNKNOWN unk_9E879E; // weak _UNKNOWN unk_9E879F; // weak _UNKNOWN unk_9E87A6; // weak _UNKNOWN unk_9E87A7; // weak _UNKNOWN unk_9E87B2; // weak void *GTStatusMiniWin::`vftable' = &unknown_libname_1; // weak void *GTStatusMiniWin::`vftable' = &sub_5ED000; // weak void *std::tr1::_Impl_base2::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable' = &sub_5ED130; // weak void *GTStatusWin::`vftable' = &unknown_libname_1; // weak void *GTStatusWin::`vftable' = &sub_5EF3F0; // weak _UNKNOWN unk_9E9023; // weak _UNKNOWN unk_9E902A; // weak void *GTTDiceWin::`vftable' = &unknown_libname_1; // weak void *GTTDiceWin::`vftable' = &sub_5F0800; // weak _UNKNOWN unk_9E930E; // weak void *GTTSkillWin::`vftable' = &unknown_libname_1; // weak void *GTTSkillWin::`vftable' = &sub_5F1DB0; // weak void *GTTMiniSkillWin::`vftable' = &unknown_libname_1; // weak void *GTTMiniSkillWin::`vftable' = &sub_5F1DF0; // weak _UNKNOWN unk_9E9967; // weak _UNKNOWN unk_9E996E; // weak _UNKNOWN unk_9E996F; // weak _UNKNOWN unk_9E9987; // weak _UNKNOWN unk_9E9AF4; // weak void *GuildTournamentBaseWin::`vftable' = &unknown_libname_1; // weak void *GuildTournamentBaseWin::`vftable' = &sub_5F6140; // weak void *std::tr1::_Impl_base2::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable' = &sub_5F61E0; // weak void *GTRequestListWin::`vftable' = &unknown_libname_1; // weak void *GTRequestListWin::`vftable' = &sub_5F7690; // weak _UNKNOWN unk_9EA30F; // weak _UNKNOWN unk_9EA316; // weak _UNKNOWN unk_9EA317; // weak _UNKNOWN unk_9EA36A; // weak _UNKNOWN unk_9EA36B; // weak _UNKNOWN unk_9EA37B; // weak _UNKNOWN unk_9EA38A; // weak _UNKNOWN unk_9EA38B; // weak _UNKNOWN unk_9EA3A6; // weak _UNKNOWN unk_9EA3A7; // weak _UNKNOWN unk_9EA3B5; // weak _UNKNOWN unk_9EA3B6; // weak _UNKNOWN unk_9EA3B7; // weak _UNKNOWN unk_9EA3C5; // weak _UNKNOWN unk_9EA3C6; // weak _UNKNOWN unk_9EA3C7; // weak void *GuildTournamentScheduleWin::`vftable' = &unknown_libname_1; // weak void *GuildTournamentScheduleWin::`vftable' = &sub_5F97D0; // weak _UNKNOWN unk_9EA6E9; // weak _UNKNOWN unk_9EA6EA; // weak _UNKNOWN unk_9EA6EB; // weak _UNKNOWN unk_9EA6F2; // weak _UNKNOWN unk_9EA6F3; // weak void *GTStorageInvWin::`vftable' = &unknown_libname_1; // weak void *GTStorageInvWin::`vftable' = &sub_5FB220; // weak void *GuildTournamentStorageWin::`vftable' = &unknown_libname_1; // weak void *GuildTournamentStorageWin::`vftable' = &sub_5FB260; // weak void *ChatBoard::`vftable' = &unknown_libname_1; // weak void *ChatBoard::`vftable' = &sub_5FBC40; // weak _UNKNOWN unk_9EAF8A; // weak const CHAR byte_9EAF8B = '\0'; // idb _UNKNOWN unk_9EAFA1; // weak const CHAR byte_9EAFA2 = '\0'; // idb _UNKNOWN unk_9EAFA3; // weak char byte_9EAFA4[2] = { '\0', '\0' }; // idb _UNKNOWN unk_9EAFA6; // weak char byte_9EAFA8[4] = { '\0', '\0', '\0', '\0' }; // idb void *ChatBoardFlex::`vftable' = &unknown_libname_1; // weak void *ChatBoardFlex::`vftable' = &sub_6008B0; // weak _UNKNOWN unk_9EB242; // weak _UNKNOWN unk_9EB243; // weak _UNKNOWN unk_9EB35C; // weak void *ChatDisplayWin::`vftable' = &unknown_libname_1; // weak void *ChatDisplayWin::`vftable' = &sub_604370; // weak _UNKNOWN unk_9EB702; // weak _UNKNOWN unk_9EB703; // weak _UNKNOWN unk_9EB70A; // weak char byte_9EB70B = '\0'; // idb char byte_9EB74A = '\0'; // idb _UNKNOWN unk_9EB74B; // weak _UNKNOWN unk_9EB759; // weak _UNKNOWN unk_9EB75B; // weak _UNKNOWN unk_9EB76B; // weak int dword_9EBBB0 = 3026478; // weak void *ChatDisplayWin2::`vftable' = &unknown_libname_1; // weak void *ChatDisplayWin2::`vftable' = &sub_60C5E0; // weak _UNKNOWN unk_9EBE26; // weak _UNKNOWN unk_9EBE27; // weak _UNKNOWN unk_9EBE3E; // weak _UNKNOWN unk_9EBE3F; // weak _UNKNOWN unk_9EBE46; // weak _UNKNOWN unk_9EBE47; // weak _UNKNOWN unk_9EBE51; // weak void *KingdomQuestPlayerList::`vftable' = &unknown_libname_1; // weak void *KingdomQuestPlayerList::`vftable' = &sub_613D50; // weak void *KingdomQuestTeamList::`vftable' = &unknown_libname_1; // weak void *KingdomQuestTeamList::`vftable' = &sub_613D90; // weak void *KingdomQuestWin::`vftable' = &unknown_libname_1; // weak void *KingdomQuestWin::`vftable' = &sub_613E30; // weak _UNKNOWN unk_9ED0C6; // weak void *KQuestTimeWin::`vftable' = &unknown_libname_1; // weak void *KQuestTimeWin::`vftable' = &sub_614860; // weak const CHAR byte_9ED42C = '³'; // idb void *FlexDlgBtn::`vftable' = &unknown_libname_1; // weak void *FlexDlgBtn::`vftable' = &sub_61B3C0; // weak void *TextBtn::`vftable' = &unknown_libname_1; // weak void *TextBtn::`vftable' = &sub_61B400; // weak void *AutoSizingDialogWin::`vftable' = &unknown_libname_1; // weak void *AutoSizingDialogWin::`vftable' = &sub_61B440; // weak void *SpeechBubbleDlgWin::`vftable' = &unknown_libname_1; // weak void *SpeechBubbleDlgWin::`vftable' = &sub_61B480; // weak void *DlgQuestListWin::`vftable' = &unknown_libname_1; // weak void *DlgQuestListWin::`vftable' = &sub_61B4C0; // weak void *NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable' = &sub_61B390; // weak void *NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable' = &sub_61B670; // weak void *NpcDialogWin::`vftable' = &unknown_libname_1; // weak void *NpcDialogWin::`vftable' = &sub_61B700; // weak void *NiTList::`vftable' = &sub_61B670; // weak void *NpcQuestWin::`vftable' = &unknown_libname_1; // weak void *NpcQuestWin::`vftable' = &sub_61C450; // weak void *QuestFinishWin::`vftable' = &unknown_libname_1; // weak void *QuestFinishWin::`vftable' = &sub_61D610; // weak _UNKNOWN unk_9EECCE; // weak void *QuestNewsWin::`vftable' = &unknown_libname_1; // weak void *QuestNewsWin::`vftable' = &sub_61E840; // weak void *QuestPigeonEffect::`vftable' = &sub_61F9C0; // weak void *QuestPigeonEffect::`vftable' = &sub_61FDD0; // weak _UNKNOWN unk_9EF055; // weak _UNKNOWN unk_9EF056; // weak _UNKNOWN unk_9EF057; // weak _UNKNOWN unk_9EF05E; // weak _UNKNOWN unk_9EF05F; // weak _UNKNOWN unk_9EF072; // weak _UNKNOWN unk_9EF073; // weak _UNKNOWN unk_9EF07A; // weak _UNKNOWN unk_9EF07B; // weak _UNKNOWN unk_9EF082; // weak void *QuestStartItemWin::`vftable' = &unknown_libname_1; // weak void *QuestStartItemWin::`vftable' = &sub_621670; // weak _UNKNOWN unk_9EF5B6; // weak _UNKNOWN unk_9EF5B7; // weak _UNKNOWN unk_9EF5C6; // weak _UNKNOWN unk_9EF5C7; // weak _UNKNOWN unk_9EF5D1; // weak _UNKNOWN unk_9EF5D2; // weak _UNKNOWN unk_9EF5D3; // weak _UNKNOWN unk_9EF5DA; // weak _UNKNOWN unk_9EF5DB; // weak _UNKNOWN unk_9EF5E2; // weak _UNKNOWN unk_9EF5E3; // weak _UNKNOWN unk_9EF5ED; // weak _UNKNOWN unk_9EF5EE; // weak _UNKNOWN unk_9EF5EF; // weak _UNKNOWN unk_9EF601; // weak _UNKNOWN unk_9EF602; // weak _UNKNOWN unk_9EF603; // weak _UNKNOWN unk_9EF60B; // weak _UNKNOWN unk_9EF615; // weak _UNKNOWN unk_9EF616; // weak _UNKNOWN unk_9EF617; // weak _UNKNOWN unk_9EF646; // weak _UNKNOWN unk_9EF647; // weak _UNKNOWN unk_9EF655; // weak _UNKNOWN unk_9EF656; // weak _UNKNOWN unk_9EF657; // weak void *AutoRunBut::`vftable' = &unknown_libname_1; // weak void *AutoRunBut::`vftable' = &sub_62AFA0; // weak void *NiTArray::`vftable' = &sub_62AF70; // weak void *EpicQuestWin::`vftable' = &unknown_libname_1; // weak void *EpicQuestWin::`vftable' = &sub_62B150; // weak void *CQuestWin2::`vftable' = &unknown_libname_1; // weak void *CQuestWin2::`vftable' = &sub_62B5A0; // weak _UNKNOWN unk_9F074A; // weak _UNKNOWN unk_9F0914; // weak void *std::basic_iostream>::`vftable' = &sub_62DCF0; // weak void *std::basic_stringstream,std::allocator>::`vftable' = &sub_62DEE0; // weak void *MonsterCardInventoryWin::`vftable' = &unknown_libname_1; // weak void *MonsterCardInventoryWin::`vftable' = &sub_62E180; // weak void *NiTListBase,ICharDeadEvent *>::`vftable' = &sub_62F2E0; // weak void *NiTPointerListBase,ICharDeadEvent *>::`vftable' = &sub_62F310; // weak void *ICharDeadEvent::`vftable' = &sub_46F0F0; // weak void *CharDeadEvent_LevelUp::`vftable' = &sub_62ECC0; // weak void *CharDeadEvent_DropItem::`vftable' = &sub_62EA30; // weak void *CharDeadEvent_ExpGain::`vftable' = &sub_62EFB0; // weak void *CharDeadEvent_SomeoneLevelUp::`vftable' = &sub_62F080; // weak void *CharDeadEvent_InformWhoKilledMe::`vftable' = &sub_62F0D0; // weak void *NiTListBase,MagicField *>::`vftable' = &sub_62FB30; // weak void *NiTListBase,IEffectDestroyMessenger *>::`vftable' = &sub_62FB70; // weak void *NiTPointerListBase,IEffectDestroyMessenger *>::`vftable' = &sub_62FBA0; // weak void *NiTPointerListBase,MagicField *>::`vftable' = &sub_62FC30; // weak void *IEffectDestroyMessenger::`vftable' = &sub_6505A0; // weak void *NiTList::`vftable' = &sub_62FBA0; // weak void *MagicField::`vftable' = &sub_62FD40; // weak char byte_9F0C8C = '\0'; // idb char byte_9F0C8D[3] = { '\0', '\0', '\0' }; // idb void *MapNavigator::`vftable' = &sub_630F00; // weak void *NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable' = &sub_631CB0; // weak void *NiTPointerListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable' = &sub_631CE0; // weak void *ShortCutInvPosItem::`vftable' = &sub_6326C0; // weak void *ShortCutSkill::`vftable' = &sub_632700; // weak void *ShortCutAction::`vftable' = &sub_632700; // weak void *ShortCutSoulStone::`vftable' = &sub_632700; // weak void *ShortCutItem::`vftable' = &sub_632730; // weak void *ShortCutMgr::`vftable' = &sub_632790; // weak void *CharScreenBoardBase::`vftable' = &sub_636B00; // weak void *CharScreenBoardUserChar::`vftable' = &sub_6369E0; // weak void *CharScreenBoardDropItem::`vftable' = &sub_636A40; // weak void *CharScreenBoardMiniHouse::`vftable' = &sub_636A70; // weak void *GuildBD::`vftable' = &sub_637950; // weak void *IConBD::`vftable' = &sub_637B60; // weak void *NameBD::`vftable' = &sub_639930; // weak void *PrivateStoreBD::`vftable' = &sub_63A9E0; // weak void *NiTListBase,SpeechBD *>::`vftable' = &sub_63BC20; // weak void *NiTListBase,NameBD *>::`vftable' = &sub_63BC50; // weak void *NiTListBase,CharScreenBoardBase *>::`vftable' = &sub_63BC80; // weak void *NiTListBase,PrivateStoreBD *>::`vftable' = &sub_63BCB0; // weak void *NiTListBase,GuildBD *>::`vftable' = &sub_63BCE0; // weak void *NiTPointerListBase,SpeechBD *>::`vftable' = &sub_63BF90; // weak void *NiTPointerListBase,NameBD *>::`vftable' = &sub_63C020; // weak void *NiTPointerListBase,CharScreenBoardBase *>::`vftable' = &sub_63C0B0; // weak void *NiTPointerListBase,PrivateStoreBD *>::`vftable' = &sub_63C140; // weak void *NiTPointerListBase,GuildBD *>::`vftable' = &sub_63C1D0; // weak void *PgTList::`vftable' = &sub_63C590; // weak void *PgTList::`vftable' = &sub_63C620; // weak void *PgTList::`vftable' = &sub_63C6B0; // weak void *PgTList::`vftable' = &sub_63C740; // weak void *PgTList::`vftable' = &sub_63C7D0; // weak void *ScreenBoardGeometry::`vftable' = &sub_63D030; // weak _UNKNOWN unk_9F1029; // weak _UNKNOWN unk_9F102A; // weak void *ScreenBoardTexture::DescInfo::`vftable' = &sub_640040; // weak void *ScreenBoardTexture::`vftable' = &sub_63F410; // weak void *SpeechBD::`vftable' = &sub_641740; // weak _UNKNOWN unk_9F10DC; // weak _UNKNOWN unk_9F1108; // weak _UNKNOWN unk_9F112C; // weak void *GMCommandWin::`vftable' = &unknown_libname_1; // weak void *GMCommandWin::`vftable' = &sub_641E20; // weak void *GMPrisonWin::`vftable' = &unknown_libname_1; // weak void *GMPrisonWin::`vftable' = &sub_642940; // weak void *LinkFrameWork::`vftable' = &unknown_libname_1; // weak void *LoadingFrameWork::`vftable' = &unknown_libname_1; // weak void *ITimer::`vftable' = &sub_645710; // weak void *NiTListBase,ITimer *>::`vftable' = &sub_645650; // weak void *NiTPointerListBase,ITimer *>::`vftable' = &sub_645680; // weak void *FrameWorkTimer::`vftable' = &sub_645710; // weak void *std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable' = &sub_646650; // weak void *CHairShopFrameWork::`vftable' = &unknown_libname_1; // weak void *CHairShopOkCancelWin::`vftable' = &unknown_libname_1; // weak void *CHairShopOkCancelWin::`vftable' = &sub_648710; // weak void *CHairShopViewCtrlWin::`vftable' = &unknown_libname_1; // weak void *CHairShopViewCtrlWin::`vftable' = &sub_648BC0; // weak void *CColorIcon::`vftable' = &unknown_libname_1; // weak void *CColorIcon::`vftable' = &sub_64B0A0; // weak void *CHairShopwin::`vftable' = &unknown_libname_1; // weak void *CHairShopwin::`vftable' = &sub_64B0E0; // weak void *ActionInfoSet::`vftable' = &sub_64C9E0; // weak void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable' = &sub_64CA30; // weak void *NiTMap::`vftable' = &sub_64CA70; // weak void *ActorCallBack::`vftable' = &nullsub_47; // weak _UNKNOWN unk_9F29F8; // weak void *NiTListBase,AttackSequence *>::`vftable' = &sub_64D000; // weak void *NiTListBase,SkillSequence *>::`vftable' = &sub_64D030; // weak void *NiTPointerListBase,AttackSequence *>::`vftable' = &sub_64EBE0; // weak void *NiTPointerListBase,SkillSequence *>::`vftable' = &sub_64EDF0; // weak _UNKNOWN unk_9F2A98; // weak void *NiTList::`vftable' = &sub_64EBE0; // weak void *NiTList::`vftable' = &sub_64EDF0; // weak void *AttackSequenceManager::`vftable' = &sub_46F0F0; // weak void *Avatar::`vftable' = &sub_651890; // weak void *Avatar::`vftable' = &sub_64F500; // weak void *Avatar::`vftable' = &sub_655EE0; // weak void *Ns_TourScene::`vftable' = &loc_64F510; // weak void *LODNodeInActivate::`vftable' = &sub_64F6D0; // weak void *NiTListBase,AbStateInst *>::`vftable' = &sub_6503E0; // weak void *NiTPointerListBase,AbStateInst *>::`vftable' = &sub_6504E0; // weak void *NiTList::`vftable' = &sub_6504E0; // weak void *AbStateInfectee::`vftable' = &sub_64FD50; // weak void *AbStateInst::`vftable' = &sub_6505A0; // weak _UNKNOWN unk_9F2E5E; // weak _UNKNOWN unk_9F2E5F; // weak const CHAR byte_9F2E8C = '¾'; // idb _UNKNOWN unk_9F2EB4; // weak void *NsFindObjectByName::`vftable' = &sub_65B5E0; // weak void *Char::`vftable' = &sub_651890; // weak void *Char::`vftable' = &sub_65B630; // weak void *Char::`vftable' = &sub_655EE0; // weak CHAR aAiO[5] = "ÀÌ°Ô "; // idb _UNKNOWN unk_9F354C; // weak CHAR aAiO_0[5] = "ÀÌ°Ô "; // idb _UNKNOWN unk_9F3560; // weak _UNKNOWN unk_9F3650; // weak void *NiTArray::`vftable' = &sub_662000; // weak void *NiTArray::`vftable' = &sub_662030; // weak void *FindChildGeometry::`vftable' = &sub_661530; // weak void *Find_EF_ExtraData::`vftable' = &sub_661A20; // weak void *CSpactralGlow_Shader_Controller::`vftable' = &sub_6620A0; // weak void *CarToonShader::`vftable' = &sub_6620D0; // weak void *ActionMgr::`vftable' = &nullsub_47; // weak _UNKNOWN unk_9F38A4; // weak _UNKNOWN unk_9F38A5; // weak char byte_9F38A6[2] = { '\0', '\0' }; // idb void *NiTListBase,Char *>::`vftable' = &sub_667C30; // weak void *NiTPointerListBase,Char *>::`vftable' = &sub_667D70; // weak void *PgTList::`vftable' = &sub_667F30; // weak _UNKNOWN unk_9F3976; // weak _UNKNOWN unk_9F3977; // weak _UNKNOWN unk_9F3995; // weak _UNKNOWN unk_9F3996; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_66F7C0; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_66F880; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_66F940; // weak void *NiTMapBase>,unsigned char,NiPointer>::`vftable' = &sub_66FA00; // weak void *NiTMapBase>,unsigned long,NiPointer>::`vftable' = &sub_66FAC0; // weak void *ResetTexture::`vftable' = &sub_66F380; // weak void *BonePartitionReCreate::`vftable' = &sub_668F90; // weak void *NiTMap>::`vftable' = &sub_66F800; // weak void *NiTMap>::`vftable' = &sub_66F8C0; // weak void *NiTMap>::`vftable' = &sub_66F980; // weak void *NiTMap>::`vftable' = &sub_66FA40; // weak void *NiTMap>::`vftable' = &sub_66FB00; // weak void *CharSet::`vftable' = &sub_672D60; // weak void *NiTListBase,NiGeometry *>::`vftable' = &sub_67A690; // weak void *FindFaceNode::`vftable' = &sub_67B060; // weak void *FindHairNode::`vftable' = &sub_67AFF0; // weak void *FindGeometry::`vftable' = &sub_67B0D0; // weak void *NiTPointerListBase,NiGeometry *>::`vftable' = &sub_67AB10; // weak void *NiSkinInstance::`vftable' = &sub_67A790; // weak void *NiTPointerList::`vftable' = &sub_67AB10; // weak void *PgTList::`vftable' = &sub_67AD30; // weak void *CharShape::`vftable' = &sub_67B2D0; // weak void *FindBoneNode::`vftable' = &sub_67B480; // weak _UNKNOWN unk_9F42E0; // weak void *MainChar::`vftable' = &sub_651890; // weak void *MainChar::`vftable' = &sub_67DFD0; // weak void *MainChar::`vftable' = &sub_655EE0; // weak void *Ns_XYFlatMoveToTarget::`vftable' = &sub_67E4C0; // weak void *MoveToTarget::`vftable' = &sub_67E4C0; // weak void *ObjectChar::`vftable' = &sub_651890; // weak void *ObjectChar::`vftable' = &sub_67E5B0; // weak void *ObjectChar::`vftable' = &sub_655EE0; // weak void *NiTListBase>,NiPointer>::`vftable' = &sub_67F4F0; // weak void *NiTPointerListBase>,NiPointer>::`vftable' = &sub_67F520; // weak void *NiTListBase,int>::`vftable' = &sub_682500; // weak void *NiTPointerListBase,int>::`vftable' = &sub_6826A0; // weak void *NiTList::`vftable' = &sub_6826A0; // weak void *ItemAuthority::`vftable' = &sub_682820; // weak void *NiTListBase,DropItem *>::`vftable' = &sub_683950; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_683C50; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_683D40; // weak void *DropItem::`vftable' = &sub_683E00; // weak void *NiTPointerListBase,DropItem *>::`vftable' = &sub_683B40; // weak void *NiTPointerMap>::`vftable' = &sub_683C90; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_683D10; // weak void *NiTPointerMap>::`vftable' = &sub_683D80; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_683F80; // weak void *PgTList::`vftable' = &sub_683EF0; // weak void *NiTStringPointerMap>::`vftable' = &sub_683D10; // weak void *NiTStringPointerMap>::`vftable' = &sub_683F80; // weak void *NsFindGeometry::`vftable' = &sub_684030; // weak void *DynaminUV::`vftable' = &sub_684690; // weak void *Item::`vftable' = &sub_632700; // weak void *ItemByteLot::`vftable' = &sub_632700; // weak void *ItemWordLot::`vftable' = &sub_632700; // weak void *ItemDwrdLot::`vftable' = &sub_632700; // weak void *ItemQuest::`vftable' = &sub_632700; // weak void *ItemAmulet::`vftable' = &sub_632700; // weak void *ItemWeapon::`vftable' = &sub_632700; // weak void *ItemCostumeWeapon::`vftable' = &sub_632700; // weak void *ItemArmor::`vftable' = &sub_632700; // weak void *ItemShield::`vftable' = &sub_632700; // weak void *ItemCostumeShield::`vftable' = &sub_632700; // weak void *ItemBoot::`vftable' = &sub_632700; // weak void *ItemFurniture::`vftable' = &sub_632700; // weak void *ItemDecoration::`vftable' = &sub_632700; // weak void *ItemSkillScroll::`vftable' = &sub_632700; // weak void *ItemRecallScroll::`vftable' = &sub_632700; // weak void *ItemUpgradeSource::`vftable' = &sub_632700; // weak void *ItemBind::`vftable' = &sub_632700; // weak void *ItemChest::`vftable' = &sub_632700; // weak void *ItemGBCoin::`vftable' = &sub_632700; // weak void *ItemCapsule::`vftable' = &sub_632700; // weak void *ItemTimedItem::`vftable' = &sub_632700; // weak void *ItemEnchant::`vftable' = &sub_632700; // weak void *ItemWeaponTitleLicense::`vftable' = &sub_632700; // weak void *ItemKQ::`vftable' = &sub_632700; // weak void *ItemHouseSkin::`vftable' = &sub_632700; // weak void *ItemUpRed::`vftable' = &sub_632700; // weak void *ItemUpBlue::`vftable' = &sub_632700; // weak void *ItemKQStep::`vftable' = &sub_632700; // weak void *ItemFeed::`vftable' = &sub_632700; // weak void *ItemRiding::`vftable' = &sub_632700; // weak void *ItemAmount::`vftable' = &sub_632700; // weak void *ItemUpGold::`vftable' = &sub_632700; // weak void *ItemChargedAction::`vftable' = &sub_632700; // weak void *ItemCollectCloseCard::`vftable' = &sub_632700; // weak void *ItemCollectOpenCard::`vftable' = &sub_632700; // weak void *ItemNoEffect::`vftable' = &sub_632700; // weak void *ItemActiveskill::`vftable' = &sub_632700; // weak void *ItemPet::`vftable' = &sub_632700; // weak void *ItemBracelet::`vftable' = &sub_632700; // weak _UNKNOWN unk_9F5D09; // weak _UNKNOWN unk_9F5D0A; // weak _UNKNOWN unk_9F5D0B; // weak void *ItemRepairWin::`vftable' = &unknown_libname_1; // weak void *ItemRepairWin::`vftable' = &sub_68C4B0; // weak void *ItemRepairTask::`vftable' = &unknown_libname_1; // weak void *ItemRepairTask::`vftable' = &sub_68CDA0; // weak void *Singleton::`vftable' = &sub_68CE00; // weak void *NiTArray::`vftable' = &sub_68CE50; // weak void *FadeObjectMgr::`vftable' = &sub_68D700; // weak _UNKNOWN unk_9F60CC; // weak void *NiTListBase,NiTimeController *>::`vftable' = &sub_68DC40; // weak void *NiTPointerListBase,NiTimeController *>::`vftable' = &sub_68DC70; // weak void *PgTList::`vftable' = &sub_68DE00; // weak void *LightFogCtrl::`vftable' = &sub_68DE90; // weak void *CMagicCircleController::`vftable' = &sub_68E2D0; // weak void *Shadow::`vftable' = &sub_68EB70; // weak void *SkyCtrl::`vftable' = &sub_68EE50; // weak void *NiAccumulator::`vftable' = &sub_691200; // weak void *NsPathFinding::`vftable' = &sub_691240; // weak void *InstantBlock::`vftable' = &sub_6912E0; // weak void *NiTArray>::`vftable' = &sub_691600; // weak void *NiTextureAccumulator::`vftable' = &sub_6926F0; // weak void *FindMultiMNode::`vftable' = &sub_697D70; // weak void *FindMultiCDNode::`vftable' = &sub_697D00; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_698E30; // weak void *NiTPointerMap>::`vftable' = &sub_698E70; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_698EF0; // weak void *NiTStringPointerMap>::`vftable' = &sub_698EF0; // weak void *NiDefaultTexturePalette::`vftable' = &sub_6991E0; // weak void *NsMakeBlockInfo_Byte::`vftable' = &sub_699820; // weak CHAR asc_9F67C8[1] = "°"; // idb void *FindCullUpdateNode::`vftable' = &sub_8D0190; // weak char byte_9F6848[4] = { '\0', '\0', '\0', '\0' }; // idb void *CVirtualServer::IProtoStruct::`vftable' = &sub_46F0F0; // weak void *CVirtualServer::ProtoStruct::`vftable' = &sub_6A2600; // weak void *CVirtualServer::ProtoStruct::`vftable' = &sub_6A2600; // weak void *AfterImgEff::`vftable' = &sub_6A3CD0; // weak void *AfterImgEff::`vftable' = &sub_6A3D80; // weak void *NiStencilProperty::`vftable' = &sub_6A5F40; // weak void *AfterImgShape::`vftable' = &sub_6A6000; // weak void *AfterImgShape0::`vftable' = &sub_6A6030; // weak void *AfterImgShape1::`vftable' = &sub_6A6060; // weak CHAR aShootEffacDama[29] = "Shoot EFFÀÇ DamageInfoSetÀÌ Á"; // idb void *ArrowEff::`vftable' = &sub_6A6AA0; // weak void *ArrowEff::`vftable' = &loc_6A6B50; // weak void *NiTListBase,AttachEff *>::`vftable' = &sub_6A7410; // weak void *AttachEff::`vftable' = &sub_6A7440; // weak void *AttachEff::`vftable' = &sub_6A7600; // weak void *NiTPointerListBase,AttachEff *>::`vftable' = &sub_6A7540; // weak void *NiTList::`vftable' = &sub_6A7540; // weak void *IEffectHolder::`vftable' = &sub_6A75D0; // weak _UNKNOWN unk_9F6E7F; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_6A8E50; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_6A9110; // weak void *CDecalEffect::`vftable' = &sub_6A90E0; // weak void *PgTList>::`vftable' = &sub_6A92A0; // weak void *Effect::`vftable' = &sub_6A93A0; // weak void *Effect::`vftable' = &loc_6A9410; // weak void *NiTArray::`vftable' = &sub_6AA570; // weak void *NiTListBase,CharDecal *>::`vftable' = &sub_6AA5A0; // weak void *NiTListBase,CharDecal *>::`vftable' = &sub_6AA460; // weak void *NiTPointerListBase,CharDecal *>::`vftable' = &sub_6AA660; // weak void *EffectCtrl::`vftable' = &sub_6AA840; // weak void *FindDecalGeometry::`vftable' = &sub_6AA880; // weak void *NiTPointerListBase,CharDecal *>::`vftable' = &sub_6AA730; // weak void *NiTList::`vftable' = &sub_6AA660; // weak void *CharDecal::`vftable' = &sub_6AAA30; // weak void *PgTList::`vftable' = &sub_6AA9A0; // weak void *DecalMgr::`vftable' = &sub_6AAA60; // weak CHAR aHittimeA[9] = "HitTime Á"; // idb void *NiTListBase,Effect *>::`vftable' = &sub_6AACC0; // weak void *NiTListBase,Effect *>::`vftable' = &sub_6AAAA0; // weak void *NiTPointerListBase,Effect *>::`vftable' = &sub_6AD450; // weak void *NiTPointerListBase,Effect *>::`vftable' = &sub_6AD5E0; // weak void *NiTList::`vftable' = &sub_6AD5E0; // weak void *PgTList::`vftable' = &sub_6AD8C0; // weak void *ExpEffect::`vftable' = &sub_6B0A00; // weak void *ExpEffect::`vftable' = &loc_6B0A10; // weak void *StretchEffect::`vftable' = &sub_6B0F90; // weak void *StretchEffect::`vftable' = &loc_6B0FA0; // weak void *WeddingEffect::`vftable' = &sub_6B1260; // weak void *WeddingEffect::`vftable' = &loc_6B1270; // weak void *TextEff::`vftable' = &sub_6B18B0; // weak void *NiTListBase,TextEff *>::`vftable' = &sub_6B18F0; // weak void *NiTPointerListBase,TextEff *>::`vftable' = &sub_6B3B90; // weak void *PgTList::`vftable' = &sub_6B3CA0; // weak void *CBlindEffect::`vftable' = &sub_6B4570; // weak void *CameraEffect::`vftable' = &sub_6B5030; // weak void *ClientEffect::`vftable' = &sub_6B5390; // weak void *ClientEffect::`vftable' = &loc_6B53A0; // weak void *LookAtEffect::`vftable' = &sub_6B5520; // weak void *LookAtEffect::`vftable' = &loc_6B5530; // weak void *NiTListBase,SoundGroup *>::`vftable' = &sub_6B7910; // weak void *NiTListBase,NiAudioSource *>::`vftable' = &sub_6B7940; // weak void *NiTPointerListBase,SoundGroup *>::`vftable' = &sub_6B7990; // weak void *NiTPointerListBase,NiAudioSource *>::`vftable' = &sub_6B7AA0; // weak void *NiTList::`vftable' = &sub_6B7AA0; // weak void *SoundGroup::`vftable' = &sub_6B5D50; // weak void *SoundGroupStatic::`vftable' = &sub_6B5D50; // weak void *NiTListBase,void *>::`vftable' = &sub_6B9820; // weak void *NiTListBase>,NiPointer>::`vftable' = &sub_6B9850; // weak void *NiTListBase,IAmbientArea *>::`vftable' = &sub_6B9880; // weak void *NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable' = &sub_6B98B0; // weak void *NiTPointerListBase,void *>::`vftable' = &sub_6B9950; // weak void *NiTPointerListBase>,NiPointer>::`vftable' = &sub_6BB730; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *NiTPointerListBase,IAmbientArea *>::`vftable' = &sub_6B9A60; // weak void *NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable' = &sub_6B9AF0; // weak void *SoundGroupBgm::`vftable' = &sub_6B5D50; // weak void *MapAmbienceSoundInfoTab::`vftable' = &nullsub_6; // weak void *CircleAmbientArea::`vftable' = &sub_6B7D50; // weak void *SoundGroupAmbient::`vftable' = &sub_6B88F0; // weak void *SoundGroupAmbient::`vftable' = &sub_6B5D50; // weak void *IAmbientSoundManager::`vftable' = &sub_46F0F0; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_6BB5F0; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_6BB620; // weak void *SoundGroupMainChar::`vftable' = &sub_6B5D50; // weak void *NiTList::`vftable' = &sub_6B9A60; // weak void *NiTList::`vftable' = &sub_6B9AF0; // weak void *NiTList>::`vftable' = &sub_6BB730; // weak void *NiTPointerList::`vftable' = &sub_6B9950; // weak void *PgTList>::`vftable' = &sub_6BB960; // weak void *SpTList::`vftable' = &sub_6B9950; // weak void *SoundGroupDynamic::`vftable' = &sub_6B73C0; // weak void *SoundGroupInterface::`vftable' = &sub_6B5D50; // weak void *SoundGroupFieldEffect::`vftable' = &sub_6B73C0; // weak void *SoundGroup3DAmbient::`vftable' = &sub_6B73C0; // weak void *SoundGroupNPCVoice::`vftable' = &sub_6B73C0; // weak void *NiTListBase,MachineOpt::WinPos *>::`vftable' = &sub_6BDDB0; // weak void *NiTPointerListBase,MachineOpt::WinPos *>::`vftable' = &sub_6BDF00; // weak void *PgTList::`vftable' = &sub_6BE010; // weak void *Option::`vftable' = &sub_6BE130; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_6C0230; // weak void *NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable' = &sub_6C0260; // weak void *SkillUseRecord::`vftable' = &sub_632700; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_6C05E0; // weak void *NiTPointerListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable' = &sub_6C0820; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *ITableBase::`vftable' = &nullsub_6; // weak void *IIDTableBase::`vftable' = &nullsub_6; // weak void *PgTList>::`vftable' = &sub_6C08B0; // weak void *ActSkillViewInfoTab::`vftable' = &nullsub_6; // weak void *PasSkillViewInfoTab::`vftable' = &nullsub_6; // weak void *ActSkillInfoTab::`vftable' = &nullsub_6; // weak void *PasSkillInfoTab::`vftable' = &nullsub_6; // weak char byte_9F88CC = '\0'; // idb char byte_9F88CD = '\0'; // idb char byte_9F88CE[2] = { '\0', '\0' }; // idb void *Party::`vftable' = &sub_6C1980; // weak void *NiTList>::`vftable' = &sub_49F840; // weak void *ITask::`vftable' = &unknown_libname_1; // weak void *ITask::`vftable' = &sub_50A360; // weak _UNKNOWN unk_9F892D; // weak _UNKNOWN unk_9F892E; // weak _UNKNOWN unk_9F892F; // weak _UNKNOWN unk_9F8959; // weak void *std::tr1::_Impl_base1::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_base1::`vftable' = &sub_46F0F0; // weak void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,char const *>::`vftable' = &sub_6C4530; // weak void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,int>::`vftable' = &sub_6C45E0; // weak _UNKNOWN unk_9F8ABB; // weak void *MHDiceGameTask::`vftable' = &unknown_libname_1; // weak void *MHDiceGameTask::`vftable' = &sub_6CB7E0; // weak void *CClientQuest::`vftable' = &sub_6CD1F0; // weak _UNKNOWN unk_9F8E22; // weak _UNKNOWN unk_9F8E23; // weak _UNKNOWN unk_9F8E2F; // weak void *NiTListBase,QuestMC *>::`vftable' = &sub_6D0300; // weak void *NiTPointerListBase,QuestMC *>::`vftable' = &sub_6D0440; // weak void *NiTListBase,QUEST_DATA *>::`vftable' = &sub_6D0330; // weak void *NiTPointerListBase,QUEST_DATA *>::`vftable' = &sub_6D0550; // weak void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable' = &sub_6D0360; // weak void *NiTListBase,unsigned short>::`vftable' = &sub_6D0390; // weak void *NiTPointerListBase,unsigned short>::`vftable' = &sub_6D0660; // weak void *NiTPointerListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable' = &sub_6D0A60; // weak void *PgTList::`vftable' = &sub_6D08C0; // weak void *PgTList::`vftable' = &sub_6D0950; // weak void *PgTList::`vftable' = &sub_6D0AF0; // weak void *PgTList::`vftable' = &sub_6D0B80; // weak void *Scenario::`vftable' = &sub_6D1260; // weak void *Scenario_15::`vftable' = &sub_6D1260; // weak void *CClientGuildList::`vftable' = &sub_750A60; // weak void *GuildListTask::`vftable' = &sub_750A60; // weak void *GuildListTask::`vftable' = &unknown_libname_1; // weak void *GuildListTask::`vftable' = &sub_6D19A0; // weak char byte_9F8FEC = '\0'; // idb char off_9F8FED[4] = { '\0', '\0', '\0', '\0' }; // idb int (__stdcall *off_9F8FF4[21])(int) = { &nullsub_32, &nullsub_32, &nullsub_32, &nullsub_32, &nullsub_32, &nullsub_32, &sub_751080, &sub_750670, &sub_7506B0, &sub_7506B0, &sub_751190, &sub_7511D0, &sub_751210, &sub_751420, &sub_751250, &sub_751290, &sub_751350, &sub_751390, &sub_7513D0, &sub_751470, &sub_750700 }; // weak void *GuildMemberTask::`vftable' = &sub_6D22E0; // weak void *GuildMemberTask::`vftable' = &unknown_libname_1; // weak void *GuildMemberTask::`vftable' = &sub_6D2F60; // weak _UNKNOWN unk_9F90F2; // weak _UNKNOWN unk_9F90F3; // weak void *NiTListBase,GUILD_HISTORY *>::`vftable' = &sub_6D9DD0; // weak void *NiTPointerListBase,GUILD_HISTORY *>::`vftable' = &sub_6D9E80; // weak void *PgTList::`vftable' = &sub_6DA150; // weak void *CClientGuild::`vftable' = &sub_751E90; // weak void *GuildTask::`vftable' = &sub_6D8930; // weak void *GuildTask::`vftable' = &unknown_libname_1; // weak void *GuildTask::`vftable' = &sub_6DA360; // weak void *GuildNameCache::`vftable' = &unknown_libname_1; // weak void *GuildNameCache::`vftable' = &sub_6DA450; // weak _UNKNOWN unk_9F9428; // weak char aSDD_27[13] = "====%s.%d.%d°"; // idb void *ResElement::`vftable' = &sub_6E09B0; // weak void *mhResTableElement::`vftable' = &sub_6E0A20; // weak void *mhObjActor::`vftable' = &sub_6E31C0; // weak void *mhObjAniActor::`vftable' = &sub_6E31C0; // weak void *mhObject::`vftable' = &sub_6E3660; // weak _UNKNOWN unk_9F9960; // weak _UNKNOWN unk_9F9961; // weak _UNKNOWN unk_9F9AEC; // weak _UNKNOWN unk_9F9B00; // weak const CHAR byte_9F9B60 = '¾'; // idb const CHAR byte_9F9B70 = '¶'; // idb const CHAR byte_9F9B7C = '¾'; // idb void *mhItemInvIconWin::`vftable' = &unknown_libname_1; // weak void *mhItemInvIconWin::`vftable' = &sub_6E7FD0; // weak void *mhEditRoomWin::`vftable' = &unknown_libname_1; // weak void *mhEditRoomWin::`vftable' = &sub_6E8010; // weak _UNKNOWN unk_9FA081; // weak void *mhEmotionWin::`vftable' = &unknown_libname_1; // weak void *mhEmotionWin::`vftable' = &sub_6E90F0; // weak _UNKNOWN unk_9FA3B5; // weak void *mhGuestBookWin::`vftable' = &unknown_libname_1; // weak void *mhGuestBookWin::`vftable' = &sub_6E9DC0; // weak void *mhGuestBookWin2::`vftable' = &unknown_libname_1; // weak void *mhGuestBookWin2::`vftable' = &sub_6EA720; // weak _UNKNOWN unk_9FAA12; // weak _UNKNOWN unk_9FAA13; // weak _UNKNOWN unk_9FAA1D; // weak _UNKNOWN unk_9FAA1E; // weak _UNKNOWN unk_9FAA1F; // weak void *mhInfoWin::`vftable' = &unknown_libname_1; // weak void *mhInfoWin::`vftable' = &sub_6EC150; // weak void *mhInputPassWordWin::`vftable' = &unknown_libname_1; // weak void *mhInputPassWordWin::`vftable' = &sub_6EC840; // weak void *mhJoinWin::`vftable' = &unknown_libname_1; // weak void *mhJoinWin::`vftable' = &sub_6ED950; // weak void *mhMinimizeWin::`vftable' = &unknown_libname_1; // weak void *mhMinimizeWin::`vftable' = &sub_6EDD70; // weak void *mhMouseControlWin::`vftable' = &unknown_libname_1; // weak void *mhMouseControlWin::`vftable' = &sub_6EE510; // weak _UNKNOWN unk_9FBB11; // weak void *mhPortalListWin::`vftable' = &unknown_libname_1; // weak void *mhPortalListWin::`vftable' = &sub_6EFFD0; // weak _UNKNOWN unk_9FBF65; // weak _UNKNOWN unk_9FBF66; // weak _UNKNOWN unk_9FBF67; // weak void *mhRepairObjWin::`vftable' = &unknown_libname_1; // weak void *mhRepairObjWin::`vftable' = &sub_6F1070; // weak _UNKNOWN unk_9FC2F9; // weak _UNKNOWN unk_9FC2FA; // weak void *mhSettingWin::`vftable' = &unknown_libname_1; // weak void *mhSettingWin::`vftable' = &sub_6F2AD0; // weak void *NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable' = &sub_6F3300; // weak void *NiTPointerListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable' = &sub_6F3350; // weak void *Net::`vftable' = &sub_6F3E20; // weak void *NetMgr::`vftable' = &sub_6F3E50; // weak void *List::`vftable' = &sub_6F4B90; // weak void *List::`vftable' = &sub_6F4B90; // weak void *ListIteratorDefault::`vftable' = &sub_6F7030; // weak void *ListIteratorDefault::`vftable' = &sub_6F7030; // weak void *ListEraser::`vftable' = &sub_6F4E70; // weak void *ListEraser::`vftable' = &sub_6F4E70; // weak void *MakePrimaryKeyColumn::`vftable' = &sub_6F5560; // weak void *MakePrimaryKey::`vftable' = &sub_6F5620; // weak void *ColumnNameArgument::`vftable' = &sub_6F6910; // weak void *DataRecordArgument::`vftable' = &sub_6F5740; // weak void *ColumnCheckArgument::`vftable' = &sub_6F5810; // weak void *TargetColumnFindArgument::`vftable' = &sub_6F58D0; // weak void *RecordDataCompareArgument::`vftable' = &sub_6F59A0; // weak void *TableNameCompareArgument::`vftable' = &sub_6F5AB0; // weak void *ORColumnHeader::`vftable' = &sub_6F52C0; // weak void *ORColumnHeaderIndex::`vftable' = &sub_6F52C0; // weak void *ORColumnHeaderString::`vftable' = &sub_6F5350; // weak void *ORColumnHeaderByte::`vftable' = &sub_6F52C0; // weak void *ORColumnHeaderWord::`vftable' = &sub_6F52C0; // weak void *ORColumnHeaderDwrd::`vftable' = &sub_6F52C0; // weak void *RecordNumber::`vftable' = &sub_6F67B0; // weak void *ORField::`vftable' = &sub_46F0F0; // weak void *ORFieldIndex::`vftable' = &sub_6F7AF0; // weak void *ORFieldString::`vftable' = &sub_6F7550; // weak void *ORFieldByte::`vftable' = &sub_6F7650; // weak void *ORFieldWord::`vftable' = &sub_6F7730; // weak void *ORFieldDwrd::`vftable' = &sub_6F7810; // weak _UNKNOWN unk_9FCD07; // weak _UNKNOWN unk_9FCD0E; // weak _UNKNOWN unk_9FCD0F; // weak _UNKNOWN unk_9FCD27; // weak _UNKNOWN unk_9FCD2E; // weak _UNKNOWN unk_9FCD2F; // weak _UNKNOWN unk_9FCD36; // weak _UNKNOWN unk_9FCD37; // weak void *WeddingEntryWin::`vftable' = &unknown_libname_1; // weak void *WeddingEntryWin::`vftable' = &sub_6F96E0; // weak _UNKNOWN unk_9FD07A; // weak _UNKNOWN unk_9FD07B; // weak _UNKNOWN unk_9FD082; // weak _UNKNOWN unk_9FD083; // weak _UNKNOWN unk_9FD093; // weak _UNKNOWN unk_9FD09A; // weak _UNKNOWN unk_9FD09B; // weak _UNKNOWN unk_9FD0A2; // weak _UNKNOWN unk_9FD0A3; // weak _UNKNOWN unk_9FD0AA; // weak _UNKNOWN unk_9FD0AB; // weak _UNKNOWN unk_9FD0B5; // weak _UNKNOWN unk_9FD0B6; // weak _UNKNOWN unk_9FD0B7; // weak _UNKNOWN unk_9FD0BF; // weak _UNKNOWN unk_9FD0C9; // weak _UNKNOWN unk_9FD0CA; // weak _UNKNOWN unk_9FD0CB; // weak _UNKNOWN unk_9FD0FA; // weak _UNKNOWN unk_9FD0FB; // weak _UNKNOWN unk_9FD109; // weak _UNKNOWN unk_9FD10A; // weak _UNKNOWN unk_9FD10B; // weak _UNKNOWN unk_9FD115; // weak void *WeddingInfoWin::`vftable' = &unknown_libname_1; // weak void *WeddingInfoWin::`vftable' = &sub_6FB1C0; // weak _UNKNOWN unk_9FD52A; // weak void *WeddingProposeInputWin::`vftable' = &unknown_libname_1; // weak void *WeddingProposeInputWin::`vftable' = &sub_6FBB90; // weak _UNKNOWN unk_9FD883; // weak void *WeddingProposeOutputWin::`vftable' = &unknown_libname_1; // weak void *WeddingProposeOutputWin::`vftable' = &sub_6FC830; // weak _UNKNOWN unk_9FDC03; // weak _UNKNOWN unk_9FDC0A; // weak void *WeddingProposeResultWin::`vftable' = &unknown_libname_1; // weak void *WeddingProposeResultWin::`vftable' = &sub_6FD270; // weak void *WeddingTask::`vftable' = &unknown_libname_1; // weak void *WeddingTask::`vftable' = &sub_6FDCA0; // weak void *std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable' = &sub_6FE7D0; // weak void *DirectionController::`vftable' = &sub_6FED10; // weak void *DirectionControllers::`vftable' = &sub_6FF0C0; // weak void *TimerController::`vftable' = &sub_6FF4D0; // weak void *GuildAcademyHallOfFameWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyHallOfFameWin::`vftable' = &sub_700DE0; // weak _UNKNOWN unk_9FE542; // weak _UNKNOWN unk_9FE543; // weak _UNKNOWN unk_9FE54A; // weak _UNKNOWN unk_9FE54B; // weak _UNKNOWN unk_9FE552; // weak _UNKNOWN unk_9FE553; // weak _UNKNOWN unk_9FE571; // weak void *GuildAcademyItemRewardInvWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyItemRewardInvWin::`vftable' = &sub_703170; // weak void *GuildAcademyItemRewardWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyItemRewardWin::`vftable' = &sub_703210; // weak void *GuildAcademyMenuWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMenuWin::`vftable' = &sub_704130; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_704170; // weak void *GuildAcademyLeaveTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyLeaveTask::`vftable' = &sub_704170; // weak _UNKNOWN unk_9FF096; // weak _UNKNOWN unk_9FF097; // weak _UNKNOWN unk_9FF09E; // weak _UNKNOWN unk_9FF09F; // weak _UNKNOWN unk_9FF0A6; // weak _UNKNOWN unk_9FF0A7; // weak void *GuildAcademyMoneyRewardWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMoneyRewardWin::`vftable' = &sub_705AB0; // weak void *GuildAcademyNoticeEditorWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyNoticeEditorWin::`vftable' = &sub_706280; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_7062C0; // weak void *GuildAcademyNotifyTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyNotifyTask::`vftable' = &sub_706390; // weak void *GuildAcademyRankingWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyRankingWin::`vftable' = &sub_707A90; // weak _UNKNOWN unk_9FFDA6; // weak void *GuildAcademySelectWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademySelectWin::`vftable' = &sub_70BC80; // weak _UNKNOWN unk_A00335; // weak _UNKNOWN unk_A00336; // weak _UNKNOWN unk_A00337; // weak _UNKNOWN unk_A0033E; // weak _UNKNOWN unk_A0033F; // weak _UNKNOWN unk_A0034B; // weak void *GuildAcademyStorageTabWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyStorageTabWin::`vftable' = &sub_70E060; // weak void *GuildAcademyStorageInvWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyStorageInvWin::`vftable' = &sub_70E0A0; // weak void *GuildAcademyStorageWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyStorageWin::`vftable' = &sub_70E0E0; // weak _UNKNOWN unk_A00C8D; // weak _UNKNOWN unk_A00C8F; // weak _UNKNOWN unk_A00C96; // weak _UNKNOWN unk_A00C97; // weak _UNKNOWN unk_A00CAE; // weak char byte_A012B4 = '¾'; // idb void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_712FB0; // weak void *GuildAcademyMemberVanishTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMemberVanishTask::`vftable' = &sub_712FB0; // weak void *GuildAcademyWin::`vftable' = &unknown_libname_1; // weak void *GuildAcademyWin::`vftable' = &sub_712FF0; // weak void *ISingletonTask::`vftable' = &unknown_libname_1; // weak void *ISingletonTask::`vftable' = &sub_7133D0; // weak void *GuildAcademyJoinReqTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyJoinReqTask::`vftable' = &sub_7133D0; // weak void *CClientGuildAcademyMember::`vftable' = &sub_751550; // weak void *GuildAcademyMemberTask::`vftable' = &sub_751550; // weak void *GuildAcademyMemberTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyMemberTask::`vftable' = &sub_714AF0; // weak void *CClientGuildAcademySelectList::`vftable' = &sub_750A60; // weak void *GuildAcademySelectTask::`vftable' = &sub_750A60; // weak void *GuildAcademySelectTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademySelectTask::`vftable' = &sub_7150A0; // weak void *GuildAcademyTask::`vftable' = &sub_751E90; // weak void *GuildAcademyTask::`vftable' = &unknown_libname_1; // weak void *GuildAcademyTask::`vftable' = &sub_718140; // weak void *CClientGuildAcademy::`vftable' = &sub_751E90; // weak _UNKNOWN unk_A01864; // weak char byte_A01865 = '\0'; // idb char byte_A01866 = '\0'; // idb char byte_A01867 = '\0'; // idb char byte_A01868 = '\0'; // idb _UNKNOWN unk_A01869; // weak void *RaidInfo::`vftable' = &sub_71AA40; // weak _UNKNOWN unk_A01892; // weak _UNKNOWN unk_A01893; // weak _UNKNOWN unk_A018AD; // weak char byte_A018AE = '\0'; // idb _UNKNOWN unk_A018AF; // weak _UNKNOWN unk_A018E1; // weak _UNKNOWN unk_A018E2; // weak _UNKNOWN unk_A018E3; // weak _UNKNOWN unk_A0194F; // weak _UNKNOWN unk_A0198E; // weak _UNKNOWN unk_A0198F; // weak _UNKNOWN unk_A019AE; // weak _UNKNOWN unk_A019AF; // weak void *ExpeditionMemberAddWin::`vftable' = &unknown_libname_1; // weak void *ExpeditionMemberAddWin::`vftable' = &sub_723940; // weak void *ExpeditionLootSelectWin::`vftable' = &unknown_libname_1; // weak void *ExpeditionLootSelectWin::`vftable' = &sub_723980; // weak void *EntryIconWin::`vftable' = &unknown_libname_1; // weak void *EntryIconWin::`vftable' = &sub_7239C0; // weak void *ExpeditionWin::`vftable' = &unknown_libname_1; // weak void *ExpeditionWin::`vftable' = &sub_7239F0; // weak void *ExpeditionPartyWin::`vftable' = &unknown_libname_1; // weak void *ExpeditionPartyWin::`vftable' = &sub_723A20; // weak void *ExpeditionLootOptionWin::`vftable' = &unknown_libname_1; // weak void *ExpeditionLootOptionWin::`vftable' = &sub_723A50; // weak _UNKNOWN unk_A02FF7; // weak _UNKNOWN unk_A0300D; // weak _UNKNOWN unk_A0300E; // weak _UNKNOWN unk_A0300F; // weak _UNKNOWN unk_A03012; // weak _UNKNOWN unk_A03013; // weak _UNKNOWN unk_A0301A; // weak _UNKNOWN unk_A0301B; // weak _UNKNOWN unk_A03033; // weak _UNKNOWN unk_A0303A; // weak _UNKNOWN unk_A0303B; // weak _UNKNOWN unk_A03052; // weak _UNKNOWN unk_A03053; // weak _UNKNOWN unk_A0305A; // weak _UNKNOWN unk_A0305B; // weak _UNKNOWN unk_A0306D; // weak void *CoinEditWin::`vftable' = &unknown_libname_1; // weak void *CoinEditWin::`vftable' = &sub_726F20; // weak void *CoinExchangeWin::`vftable' = &unknown_libname_1; // weak void *CoinExchangeWin::`vftable' = &sub_726F60; // weak void *GambleWin::`vftable' = &unknown_libname_1; // weak void *GambleWin::`vftable' = &sub_726FA0; // weak void *GambleMiniWin::`vftable' = &unknown_libname_1; // weak void *GambleMiniWin::`vftable' = &sub_726FE0; // weak void *GambleHouseCardWin::`vftable' = &unknown_libname_1; // weak void *GambleHouseCardWin::`vftable' = &sub_727020; // weak _UNKNOWN unk_A03FBF; // weak _UNKNOWN unk_A03FC9; // weak _UNKNOWN unk_A03FCA; // weak _UNKNOWN unk_A03FCB; // weak _UNKNOWN unk_A03FD7; // weak _UNKNOWN unk_A03FE7; // weak _UNKNOWN unk_A0400F; // weak _UNKNOWN unk_A04C60; // weak const CHAR byte_A05CF4 = '´'; // idb void *BettingBut::`vftable' = &unknown_libname_1; // weak void *BettingBut::`vftable' = &sub_73B840; // weak void *ToggleBut::`vftable' = &unknown_libname_1; // weak void *ToggleBut::`vftable' = &sub_73B880; // weak void *mhMinimizeDiceGameWin::`vftable' = &unknown_libname_1; // weak void *mhMinimizeDiceGameWin::`vftable' = &sub_73B8D0; // weak void *mhDiceHelpWin::`vftable' = &unknown_libname_1; // weak void *mhDiceHelpWin::`vftable' = &sub_73B910; // weak void *mhDiceRateSheetWin::`vftable' = &unknown_libname_1; // weak void *mhDiceRateSheetWin::`vftable' = &sub_73B950; // weak void *MHDiceAniActor::`vftable' = &sub_6E31C0; // weak void *MHDiceRewardMoneyWin::`vftable' = &unknown_libname_1; // weak void *MHDiceRewardMoneyWin::`vftable' = &sub_73BC70; // weak void *MiniHouseDiceGameWin::`vftable' = &unknown_libname_1; // weak void *MiniHouseDiceGameWin::`vftable' = &sub_73BCA0; // weak void *GambleDiceGameWin::`vftable' = &unknown_libname_1; // weak void *GambleDiceGameWin::`vftable' = &sub_73BCD0; // weak void *mhDiceRankWin::`vftable' = &unknown_libname_1; // weak void *mhDiceRankWin::`vftable' = &sub_73BDD0; // weak _UNKNOWN unk_A071E6; // weak _UNKNOWN unk_A0720A; // weak _UNKNOWN unk_A07281; // weak _UNKNOWN unk_A07282; // weak _UNKNOWN unk_A07A94; // weak void *MiniSlotMachineWin::`vftable' = &unknown_libname_1; // weak void *MiniSlotMachineWin::`vftable' = &sub_743DC0; // weak void *GBSlotHelpWin::`vftable' = &unknown_libname_1; // weak void *GBSlotHelpWin::`vftable' = &sub_743E00; // weak void *SlotMachineWin::`vftable' = &unknown_libname_1; // weak void *SlotMachineWin::`vftable' = &sub_743E40; // weak void *GBSlotRankWin::`vftable' = &unknown_libname_1; // weak void *GBSlotRankWin::`vftable' = &sub_743F50; // weak void *NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable' = &sub_7458A0; // weak void *NiTMap::`vftable' = &sub_7458E0; // weak void *Mover::`vftable' = &sub_651890; // weak void *Mover::`vftable' = &sub_745980; // weak void *Mover::`vftable' = &sub_743FA0; // weak void *CMD5Checksum::`vftable' = &sub_746A00; // weak void *CDataReader::`vftable' = &sub_747550; // weak void *InstancePartyFinder::`vftable' = &sub_748F80; // weak void *CQuest::`vftable' = &nullsub_32; // weak void *CItemAuthorityBase::`vftable' = &sub_74E000; // weak void *CGuildMember::`vftable' = &nullsub_32; // weak void *CGuildAcademyMember::`vftable' = &sub_751550; // weak void *CGuild::`vftable' = &sub_751E90; // weak void *AreaInfoData::`vftable' = &sub_753C00; // weak void *AreaInfoData::AE_Square::`vftable' = &sub_753700; // weak void *AreaInfoData::AE_Circle::`vftable' = &sub_7536A0; // weak void *CGuildList::`vftable' = &sub_750A60; // weak void *Encrypt::Stream::`vftable' = &sub_754E80; // weak void *Encrypt::EncryptMethodXor::`vftable' = &sub_754C00; // weak _UNKNOWN unk_A091CC; // weak _UNKNOWN unk_A091D0; // weak __int16 word_A09220[] = { 0 }; // weak __int16 word_A09222[] = { 0 }; // weak __int16 word_A09224[] = { 0 }; // weak __int16 word_A09226[] = { 0 }; // weak int (__cdecl *off_A09228[3])(int, int) = { &sub_755A70, (int (__cdecl *)(int, int))0x40004, (int (__cdecl *)(int, int))0x40008 }; // idb _UNKNOWN unk_A09AA0; // weak __int16 word_A09B20[20] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15, 0 }; // idb int dword_A09D10[28] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 }; // idb char byte_A09D81[] = { '\0' }; // weak char byte_A09D82[] = { '\0' }; // weak char byte_A09D83[] = { '\0' }; // weak char byte_A09D84[20] = { '\x10', '\x11', '\x12', '\0', '\b', '\a', '\t', '\x06', '\n', '\x05', '\v', '\x04', '\f', '\x03', '\r', '\x02', '\x0E', '\x01', '\x0F', '\0' }; // idb int dword_A09D98[30] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; // idb _UNKNOWN unk_A09E60; // weak _UNKNOWN unk_A0A2E0; // weak char byte_A0A358[256] = { '\0', '\x01', '\x02', '\x03', '\x04', '\x04', '\x05', '\x05', '\x06', '\x06', '\x06', '\x06', '\a', '\a', '\a', '\a', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\t', '\t', '\t', '\t', '\t', '\t', '\t', '\t', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\v', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\f', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0E', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F', '\x0F' }; // idb char byte_A0A458[] = { '\0' }; // weak char byte_A0A558[256] = { '\0', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\a', '\b', '\b', '\t', '\t', '\n', '\n', '\v', '\v', '\f', '\f', '\f', '\f', '\r', '\r', '\r', '\r', '\x0E', '\x0E', '\x0E', '\x0E', '\x0F', '\x0F', '\x0F', '\x0F', '\x10', '\x10', '\x10', '\x10', '\x10', '\x10', '\x10', '\x10', '\x11', '\x11', '\x11', '\x11', '\x11', '\x11', '\x11', '\x11', '\x12', '\x12', '\x12', '\x12', '\x12', '\x12', '\x12', '\x12', '\x13', '\x13', '\x13', '\x13', '\x13', '\x13', '\x13', '\x13', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x14', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x17', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x18', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x19', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1A', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1B', '\x1C' }; // idb int dword_A0A658[30] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0, 0 }; // idb int dword_A0A6D0[30] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 }; // idb int dword_A0A748[256] = { 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117 }; // idb int dword_A0AB48[256] = { 0, 421212481, 842424962, 724390851, 1684849924, 2105013317, 1448781702, 1329698503, 3369699848, 3519200073, 4210026634, 3824474571, 2897563404, 3048111693, 2659397006, 2274893007, 1254232657, 1406739216, 2029285587, 1643069842, 783210325, 934667796, 479770071, 92505238, 2182846553, 2600511768, 2955803355, 2838940570, 3866582365, 4285295644, 3561045983, 3445231262, 2508465314, 2359236067, 2813478432, 3198777185, 4058571174, 3908292839, 3286139684, 3670389349, 1566420650, 1145479147, 1869335592, 1987116393, 959540142, 539646703, 185010476, 303839341, 3745920755, 3327985586, 3983561841, 4100678960, 3140154359, 2721170102, 2300350837, 2416418868, 396344571, 243568058, 631889529, 1018359608, 1945336319, 1793607870, 1103436669, 1490954812, 4034481925, 3915546180, 3259968903, 3679722694, 2484439553, 2366552896, 2787371139, 3208174018, 950060301, 565965900, 177645455, 328046286, 1556873225, 1171730760, 1861902987, 2011255754, 3132841300, 2745199637, 2290958294, 2442530455, 3738671184, 3352078609, 3974232786, 4126854035, 1919080284, 1803150877, 1079293406, 1498383519, 370020952, 253043481, 607678682, 1025720731, 1711106983, 2095471334, 1472923941, 1322268772, 26324643, 411738082, 866634785, 717028704, 2904875439, 3024081134, 2668790573, 2248782444, 3376948395, 3495106026, 4219356713, 3798300520, 792689142, 908347575, 487136116, 68299317, 1263779058, 1380486579, 2036719216, 1618931505, 3890672638, 4278043327, 3587215740, 3435896893, 2206873338, 2593195963, 2981909624, 2829542713, 998479947, 580430090, 162921161, 279890824, 1609522511, 1190423566, 1842954189, 1958874764, 4082766403, 3930137346, 3245109441, 3631694208, 2536953671, 2385372678, 2768287173, 3155920004, 1900120602, 1750776667, 1131931800, 1517083097, 355290910, 204897887, 656092572, 1040194781, 3113746450, 2692952403, 2343461520, 2461357009, 3723805974, 3304059991, 4022511508, 4141455061, 2919742697, 3072101800, 2620513899, 2234183466, 3396041197, 3547351212, 4166851439, 3779471918, 1725839073, 2143618976, 1424512099, 1307796770, 45282277, 464110244, 813994343, 698327078, 3838160568, 4259225593, 3606301754, 3488152955, 2158586812, 2578602749, 2996767038, 2877569151, 740041904, 889656817, 506086962, 120682355, 1215357364, 1366020341, 2051441462, 1667084919, 3422213966, 3538019855, 4190942668, 3772220557, 2945847882, 3062702859, 2644537544, 2226864521, 52649286, 439905287, 823476164, 672009861, 1733269570, 2119477507, 1434057408, 1281543041, 2167981343, 2552493150, 3004082077, 2853541596, 3847487515, 4233048410, 3613549209, 3464057816, 1239502615, 1358593622, 2077699477, 1657543892, 764250643, 882293586, 532408465, 111204816, 1585378284, 1197851309, 1816695150, 1968414767, 974272232, 587794345, 136598634, 289367339, 2527558116, 2411481253, 2760973158, 3179948583, 4073438432, 3956313505, 3237863010, 3655790371, 347922877, 229101820, 646611775, 1066513022, 1892689081, 1774917112, 1122387515, 1543337850, 3697634229, 3313392372, 3998419255, 4148705398, 3087642289, 2702352368, 2319436851, 2468674930 }; // idb int dword_A0AF48[256] = { 0, 29518391, 59036782, 38190681, 118073564, 114017003, 76381362, 89069189, 236147128, 265370511, 228034006, 206958561, 152762724, 148411219, 178138378, 190596925, 472294256, 501532999, 530741022, 509615401, 456068012, 451764635, 413917122, 426358261, 305525448, 334993663, 296822438, 275991697, 356276756, 352202787, 381193850, 393929805, 944588512, 965684439, 1003065998, 973863097, 1061482044, 1049003019, 1019230802, 1023561829, 912136024, 933002607, 903529270, 874031361, 827834244, 815125939, 852716522, 856752605, 611050896, 631869351, 669987326, 640506825, 593644876, 580921211, 551983394, 556069653, 712553512, 733666847, 704405574, 675154545, 762387700, 749958851, 787859610, 792175277, 1889177024, 1901651959, 1931368878, 1927033753, 2006131996, 1985040171, 1947726194, 1976933189, 2122964088, 2135668303, 2098006038, 2093965857, 2038461604, 2017599123, 2047123658, 2076625661, 1824272048, 1836991623, 1866005214, 1861914857, 1807058540, 1786244187, 1748062722, 1777547317, 1655668488, 1668093247, 1630251878, 1625932113, 1705433044, 1684323811, 1713505210, 1742760333, 1222101792, 1226154263, 1263738702, 1251046777, 1339974652, 1310460363, 1281013650, 1301863845, 1187289752, 1191637167, 1161842422, 1149379777, 1103966788, 1074747507, 1112139306, 1133218845, 1425107024, 1429406311, 1467333694, 1454888457, 1408811148, 1379576507, 1350309090, 1371438805, 1524775400, 1528845279, 1499917702, 1487177649, 1575719220, 1546255107, 1584350554, 1605185389, 3778354048, 3774312887, 3803303918, 3816007129, 3862737756, 3892238699, 3854067506, 3833203973, 4012263992, 4007927823, 3970080342, 3982554209, 3895452388, 3924658387, 3953866378, 3932773565, 4245928176, 4241609415, 4271336606, 4283762345, 4196012076, 4225268251, 4187931714, 4166823541, 4076923208, 4072833919, 4035198246, 4047918865, 4094247316, 4123732899, 4153251322, 4132437965, 3648544096, 3636082519, 3673983246, 3678331705, 3732010428, 3753090955, 3723829714, 3694611429, 3614117080, 3601426159, 3572488374, 3576541825, 3496125444, 3516976691, 3555094634, 3525581405, 3311336976, 3298595879, 3336186494, 3340255305, 3260503756, 3281337595, 3251864226, 3222399125, 3410866088, 3398419871, 3368647622, 3372945905, 3427010420, 3448139075, 3485520666, 3456284973, 2444203584, 2423127159, 2452308526, 2481530905, 2527477404, 2539934891, 2502093554, 2497740997, 2679949304, 2659102159, 2620920726, 2650438049, 2562027300, 2574714131, 2603727690, 2599670141, 2374579504, 2353749767, 2383274334, 2412743529, 2323684844, 2336421851, 2298759554, 2294686645, 2207933576, 2186809023, 2149495014, 2178734801, 2224278612, 2236720739, 2266437690, 2262135309, 2850214048, 2820717207, 2858812622, 2879680249, 2934667388, 2938704459, 2909776914, 2897069605, 2817622296, 2788420399, 2759153014, 2780249921, 2700618180, 2704950259, 2742877610, 2730399645, 3049550800, 3020298727, 3057690558, 3078802825, 2999835404, 3004150075, 2974355298, 2961925461, 3151438440, 3121956959, 3092510214, 3113327665, 3168701108, 3172786307, 3210370778, 3197646061 }; // idb int dword_A0B348[1280] = { 0, 3099354981, 2852767883, 313896942, 2405603159, 937357362, 627793884, 2648127673, 3316918511, 2097696650, 1874714724, 3607201537, 1255587768, 4067088605, 3772741427, 1482887254, 1343838111, 3903140090, 4195393300, 1118632049, 3749429448, 1741137837, 1970407491, 3452858150, 2511175536, 756094997, 1067759611, 2266550430, 449832999, 2725482306, 2965774508, 142231497, 2687676222, 412010587, 171665333, 2995192016, 793786473, 2548850444, 2237264098, 1038456711, 1703315409, 3711623348, 3482275674, 1999841343, 3940814982, 1381529571, 1089329165, 4166106984, 4029413537, 1217896388, 1512189994, 3802027855, 2135519222, 3354724499, 3577784189, 1845280792, 899665998, 2367928107, 2677414085, 657096608, 3137160985, 37822588, 284462994, 2823350519, 2601801789, 598228824, 824021174, 2309093331, 343330666, 2898962447, 3195996129, 113467524, 1587572946, 3860600759, 4104763481, 1276501820, 3519211397, 1769898208, 2076913422, 3279374443, 3406630818, 1941006535, 1627703081, 3652755532, 1148164341, 4241751952, 3999682686, 1457141531, 247015245, 3053797416, 2763059142, 470583459, 2178658330, 963106687, 735213713, 2473467892, 992409347, 2207944806, 2435792776, 697522413, 3024379988, 217581361, 508405983, 2800865210, 4271038444, 1177467017, 1419450215, 3962007554, 1911572667, 3377213406, 3690561584, 1665525589, 1799331996, 3548628985, 3241568279, 2039091058, 3831314379, 1558270126, 1314193216, 4142438437, 2928380019, 372764438, 75645176, 3158189981, 568925988, 2572515393, 2346768303, 861712586, 3982079547, 1441124702, 1196457648, 4293663189, 1648042348, 3666298377, 3358779879, 1888390786, 686661332, 2421291441, 2196002399, 978858298, 2811169155, 523464422, 226935048, 3040519789, 3175145892, 100435649, 390670639, 2952089162, 841119475, 2325614998, 2553003640, 546822429, 2029308235, 3225988654, 3539796416, 1782671013, 4153826844, 1328167289, 1570739863, 3844338162, 1298864389, 4124540512, 3882013070, 1608431339, 3255406162, 2058742071, 1744848601, 3501990332, 2296328682, 811816591, 584513889, 2590678532, 129869501, 3204563416, 2914283062, 352848211, 494030490, 2781751807, 3078325777, 264757620, 2450577869, 715964072, 941166918, 2158327331, 3636881013, 1618608400, 1926213374, 3396585883, 1470427426, 4011365959, 4255988137, 1158766284, 1984818694, 3471935843, 3695453837, 1693991400, 4180638033, 1100160564, 1395044826, 3952793279, 3019491049, 189112716, 435162722, 2706139399, 1016811966, 2217162459, 2526189877, 774831696, 643086745, 2666061564, 2354934034, 887166583, 2838900430, 294275499, 54519365, 3145957664, 3823145334, 1532818963, 1240029693, 4048895640, 1820460577, 3560857924, 3331051178, 2117577167, 3598663992, 1858283101, 2088143283, 3301633750, 1495127663, 3785470218, 4078182116, 1269332353, 332098007, 2876706482, 3116540252, 25085497, 2628386432, 605395429, 916469259, 2384220526, 2254837415, 1054503362, 745528876, 2496903497, 151290352, 2981684885, 2735556987, 464596510, 1137851976, 4218313005, 3923506883, 1365741990, 3434129695, 1946996346, 1723425172, 3724871409, 0, 2519730039, 744558318, 3125873049, 432303367, 2415159920, 900031465, 2744476830, 847829774, 2763578489, 518641120, 2295976599, 726447625, 3179065726, 120436967, 2434645904, 1678817053, 4062228586, 1215412723, 3728850564, 2111101466, 3957644653, 1370871028, 3347436419, 1452829715, 3232263012, 2063164157, 3972621706, 1331429652, 3647735395, 1664946170, 4111272077, 3357568571, 1578133836, 3829489877, 1920034722, 3521381180, 1205077067, 4253355474, 1807026853, 4205360437, 1821946434, 3603545051, 1090108588, 3815561266, 1969020741, 3473790684, 1497223595, 2888882470, 973135441, 2152847304, 375509183, 3052712993, 600093526, 2576726735, 262520248, 2662859304, 143131999, 3000569030, 619252657, 2273079087, 290220120, 2870829505, 1026385590, 2420235382, 108124929, 3156267672, 705746415, 2307240305, 532002310, 2783231903, 869578984, 2731083640, 888733711, 2393377174, 412618465, 3138218623, 759000328, 2540463249, 22832102, 4098976619, 1650551836, 3627050373, 1308648178, 3985966700, 2074411291, 3253995650, 1472466933, 3336155237, 1357494034, 3937975947, 2089335292, 3743276386, 1227741717, 4085044108, 1699534075, 1482797645, 3461461306, 1946205347, 3794844628, 1101389642, 3616921661, 1841615268, 4227126995, 1793681731, 4242107956, 1183344557, 3501744346, 1932330052, 3843883827, 1598818986, 3380350429, 1014039888, 2856387111, 269487038, 2250247369, 632645719, 3011866400, 164914873, 2682544590, 251256414, 2563365161, 580440240, 3030964167, 389919577, 2165158958, 995933623, 2909584064, 545503469, 3065233306, 216184323, 2597499252, 961009130, 2943865501, 354867972, 2199313523, 302736355, 2218484884, 1047162125, 2824497786, 198119140, 2650737043, 665714698, 2979923837, 1150488560, 3533899911, 1760690462, 4274128489, 1566008055, 3412551040, 1899392025, 3875957614, 1981535486, 3760968585, 1518000656, 3427458407, 1876933113, 4193238670, 1136572183, 3582898272, 3903051478, 2123616673, 3301103672, 1391648591, 4050107345, 1733803174, 3708204351, 1261875784, 3660254680, 1276840623, 4132045622, 1618609217, 3287245023, 1440704424, 4019088945, 2042521926, 2360566219, 444819132, 2698145573, 920807506, 2507607244, 54987707, 3105227298, 791020885, 3191585477, 671858098, 2455417899, 74101596, 2818561986, 835702965, 2342443308, 497999451, 2965529755, 653419500, 2627955317, 177433858, 2835745180, 1060507371, 2238121842, 324468741, 2185936789, 343587042, 2922099067, 941340172, 2609828498, 230610405, 3085950076, 568318731, 3570586502, 1122161905, 4172537192, 1854134815, 3440819841, 1529264630, 3782717551, 2001188632, 3864660104, 1885999103, 3392865894, 1544225041, 4288570767, 1773036280, 3556731745, 1171221526, 2028079776, 4006743511, 1417872462, 3266511673, 1629906855, 4145438928, 1296525641, 3682037310, 1248514478, 3696940761, 1712054080, 4030453815, 1403960489, 3315514334, 2144318023, 3925849392, 485670333, 2328017610, 814986067, 2795746340, 87478458, 2466699213, 693624404, 3211254051, 779773619, 3091882436, 35350621, 2485874474, 935201716, 2710441155, 467600730, 2381251117, 0, 1093737241, 2187474482, 3277008171, 80047204, 1173649277, 2259114582, 3348513103, 143317448, 1237041873, 2330521594, 3420058851, 206550444, 1300147893, 2385347486, 3474757767, 1360183882, 270784851, 3547395192, 2453794657, 1440198190, 350663991, 3619002396, 2525266693, 1503140738, 413728923, 3690606000, 2597009065, 1566406630, 476867839, 3745464788, 2651740877, 2720302229, 3809845132, 541504167, 1635232190, 2799823089, 3889230824, 612622019, 1706214874, 2863553885, 3953083972, 684485487, 1778217078, 2926260537, 4015663648, 738789131, 1832393746, 4080420575, 2986827206, 1901359341, 811953140, 4159908539, 3066180002, 1972444297, 882902928, 4223442711, 3129836558, 2044635429, 955232828, 4286182259, 3192449130, 2098971969, 1009442392, 89094640, 1149133545, 2267893698, 3323745499, 25826708, 1086000781, 2213028774, 3269015743, 231055416, 1291107105, 2410124810, 3465973011, 151047260, 1211225925, 2338519662, 3394494839, 1415429050, 359440547, 3594489224, 2534315665, 1352194014, 296340679, 3539657196, 2479618805, 1557619314, 501643627, 3736425536, 2676248409, 1477578262, 421729551, 3664787492, 2604737341, 2808872293, 3864716924, 621398871, 1681444942, 2746126593, 3802106392, 567060275, 1627241514, 2950767789, 4006625204, 763564703, 1823607174, 2871281865, 3927266256, 692485883, 1752655330, 4135141167, 3074958390, 1947928861, 891949572, 4072428363, 3012380754, 1893623161, 837779040, 4277397223, 3217227262, 2089930965, 1033948108, 4197878403, 3137835418, 2018819249, 962963368, 1268286267, 178886690, 3388650761, 2295049744, 1331556191, 242021446, 3443513709, 2349777524, 1125276403, 35865066, 3245370561, 2151774168, 1205286551, 115748238, 3316973733, 2223250364, 445268337, 1539005032, 2565371715, 3654904922, 508505365, 1602106892, 2620201767, 3709599806, 302028985, 1395753888, 2422386315, 3511924114, 382072029, 1475669956, 2494022383, 3583433206, 3921414062, 2827820215, 1809723804, 720317061, 3984157642, 2890428627, 1864064504, 774522593, 3778469478, 2684863871, 1666508884, 577106765, 3857953282, 2764220699, 1737589808, 648060713, 3098461668, 4188004093, 986510294, 2080237775, 3161172352, 4250579609, 1040818098, 2134410411, 2955156524, 4044687157, 843459102, 1937191175, 3034673224, 4124076881, 914572922, 2008178019, 1322777291, 266789330, 3434466553, 2374293472, 1242732207, 186879414, 3362824349, 2302786436, 1180508931, 124532762, 3292468529, 2232290856, 1117278055, 61428862, 3237640533, 2177589836, 533018753, 1593058200, 2644971187, 3700823466, 453006565, 1513181180, 2573361879, 3629349326, 391110985, 1451162192, 2502809467, 3558657122, 327847213, 1388025396, 2447948575, 3503923206, 3975380574, 2915198279, 1855015020, 799036277, 3895857722, 2835810595, 1783899144, 728055569, 3833178006, 2773007503, 1713082788, 657099453, 3770469362, 2710425835, 1658781120, 602924761, 3185687572, 4241532685, 1065585190, 2125631807, 3106197616, 4162177897, 994502210, 2054683995, 3043714524, 4099571397, 923358190, 1983400183, 2980972984, 4036956833, 869023626, 1929192595, 0, 929743361, 1859421187, 1505641986, 3701999879, 3955411718, 2994507012, 2232831749, 3092321038, 2403062031, 3599079181, 3790558476, 1694046729, 1402198024, 170761738, 1028086795, 1889740316, 1204413469, 511156767, 689791006, 2886414107, 2606886170, 3269438232, 4122306841, 3371316498, 4288214803, 2787553553, 2437706512, 341457941, 590413332, 2056173590, 1306819095, 3762703672, 3610021689, 2391984443, 3120040762, 1022247999, 193234494, 1379582012, 1699742269, 1477926454, 1870502967, 918805045, 27858996, 2227132209, 3017119024, 3932934962, 3707834675, 2430954276, 2811210021, 4264685351, 3378195750, 1280139811, 2066194466, 580511264, 368256033, 682915882, 534690347, 1180761129, 1896496680, 4095504685, 3279336236, 2596861230, 2913089327, 3230505584, 4159133809, 2925076083, 2570312818, 472224631, 726618486, 1928402804, 1167840629, 2027719038, 1337346943, 369626493, 560123772, 2759098489, 2468233848, 3399484538, 4257924731, 2955852908, 2269412973, 3740940399, 3918592622, 1820767595, 1542223722, 38941032, 892924777, 142585698, 1058368867, 1722493793, 1371662688, 3570902629, 3820840036, 3120767590, 2372526183, 550229832, 396432713, 1310675787, 2037748042, 4234403407, 3406371918, 2461489740, 2782763085, 2560279622, 2951743047, 4132323397, 3240395332, 1144180033, 1935150912, 719735106, 495749955, 1349054804, 1728197461, 1052538199, 165066582, 2361456723, 3148495442, 3792993360, 3581853265, 3896107610, 3746766939, 2263705177, 2978456664, 881978205, 66791772, 1514499934, 1831841119, 2149266913, 3077699552, 4006588898, 3651498979, 1555250406, 1809448679, 845658341, 84769508, 944383727, 253813998, 1453236972, 1643405549, 3840028648, 3548966377, 2318838763, 3176950250, 4038595581, 3352482300, 2657916926, 2835764735, 739252986, 461035771, 1120182009, 1974361336, 1223229683, 2139341554, 641565936, 290932465, 2487290356, 2737556469, 4204105207, 3456061430, 1616738521, 1463270104, 243924186, 971194075, 3170202078, 2342499295, 3525440989, 3846911964, 3624692695, 4016482774, 3067670484, 2175938005, 77882064, 869179601, 1785784019, 1561994450, 285105861, 664050884, 2116737734, 1228937415, 3428210626, 4215051715, 2726482881, 2515014080, 2830061003, 2680524746, 3330001352, 4044426185, 1946633420, 1131251405, 450085071, 767099598, 1083617169, 2013031824, 776088466, 422111635, 2621351574, 2874434711, 4075430549, 3313557652, 4173839519, 3484253854, 2517842076, 2709125789, 611300760, 319125401, 1253781915, 2110911386, 808814989, 123685772, 1591807374, 1770770319, 3969745034, 3690414731, 2185823369, 3039020680, 2288294531, 3205388418, 3870301824, 3520781441, 1422693252, 1671844229, 974657415, 225629574, 2698044073, 2545557672, 3456394922, 4184777899, 2088299438, 1259481519, 313290669, 633777580, 411169191, 803943334, 1985312164, 1094694821, 3291084960, 4081269409, 2868739235, 2643967650, 3497247925, 3877177012, 3198632118, 2311946935, 215731634, 1001459635, 1645169073, 1432718256, 1747113915, 1598559674, 116806584, 832344505, 3028999868, 2212502717, 3663616703, 3979647166, 0, 1701297336, 2345142698, 4004492562, 1469538959, 854646327, 3697240869, 3107510173, 4012422341, 2320435325, 1692450159, 25625047, 3099579978, 3721947890, 863494112, 1443914584, 2673285456, 4197492200, 345968890, 1912122434, 3368057823, 2913453927, 1124627061, 644861645, 1887415701, 353898797, 4223116351, 2664437895, 669568794, 1116697506, 2887829168, 3376904712, 1051669152, 1539870232, 3043441418, 3489695666, 1765298223, 207613079, 3807402373, 2274878781, 3515319909, 3034594013, 1515163599, 1059599223, 2249254122, 3816249426, 232320320, 1757368824, 2717395952, 3298793288, 707797594, 1331142370, 4134488447, 2466837959, 2108113109, 415300717, 1322295093, 733422477, 3306722975, 2692688423, 424148410, 2082488578, 2458907664, 4159195304, 1029182619, 1480566819, 3062897969, 3556221321, 1791981076, 262720172, 3775365054, 2220933894, 3530596446, 3071745254, 1505274356, 1021252940, 2246558417, 3766517353, 238013307, 1799911363, 2718895563, 3345527155, 700908641, 1285601497, 4120407876, 2432685052, 2119198446, 456645206, 1294448910, 675284406, 3337597092, 2743602204, 447798145, 2144823097, 2440614443, 4095700627, 66528827, 1720752771, 2285842321, 3982005033, 1415595188, 822605836, 3752348958, 3134189990, 3974075134, 2310549062, 1729600340, 40904684, 3142119537, 3727641801, 813758939, 1441219939, 2627747691, 4190602195, 392705729, 1913621113, 3409403364, 2924536156, 1090475086, 630778102, 1938328494, 384775958, 4164977156, 2636594876, 606071073, 1098405273, 2950160523, 3400555571, 1001806317, 1590814037, 2961068103, 3575246079, 1814117218, 155617242, 3890819784, 2190380656, 3567185192, 2985906576, 1599530114, 976312378, 2198441895, 3865981727, 146900493, 1839610549, 2766225597, 3246849029, 791234839, 1246688687, 4084605490, 2517737098, 2025728920, 500799264, 1271526520, 783173824, 3221355986, 2774942058, 475961079, 2033789519, 2543230813, 4075889637, 85551949, 1618925557, 2396087015, 3954630239, 1385040322, 938063226, 3645243496, 3156327632, 3929137032, 2404803376, 1643763234, 77490842, 3181821191, 3636527551, 913224877, 1393100821, 2588832285, 4280929957, 294026167, 1960953615, 3453554834, 2831068202, 1175525688, 594978176, 1969669848, 268532320, 4272869234, 2613670858, 586261591, 1201019119, 2839129597, 3428716869, 116280694, 1669984718, 2368095452, 3896637540, 1366896633, 874419009, 3669042771, 3218512619, 3922131379, 2359379211, 1645146137, 124341409, 3193019196, 3677759364, 899256982, 1358835246, 2579059750, 4242466974, 309419404, 1997988148, 3459135145, 2873723409, 1172717315, 545358779, 1989271779, 334912603, 4250528073, 2554222065, 554074732, 1147223764, 2865662918, 3483973502, 943816662, 1562821486, 3012130428, 3605973700, 1876303193, 179413473, 3827176691, 2172233803, 3614034707, 2987292587, 1554105017, 969309697, 2164173212, 3852014884, 188129334, 1850809486, 2803263110, 3262241342, 752774956, 1236915092, 4034987017, 2514925745, 2068385187, 506376475, 1212076611, 760835835, 3287735273, 2794547025, 531214540, 2060323956, 2489432422, 4043703774 }; // idb _UNKNOWN unk_A0C820; // weak _UNKNOWN unk_A0C860; // weak _UNKNOWN unk_A0C8A0; // weak _UNKNOWN unk_A0C8E0; // weak void *NiImageReader::`vftable' = &sub_95A310; // weak void *NiPNGReader::`vftable' = &sub_75A810; // weak _UNKNOWN unk_A0C9E8; // weak _UNKNOWN unk_A0CB10; // weak char *off_A0CD50 = "_G"; // weak _UNKNOWN unk_A0CDD0; // weak char byte_A0CDD8[256] = { '\0', '\x01', '\x02', '\x02', '\x03', '\x03', '\x03', '\x03', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b' }; // idb int off_A0D148 = 10537816; // idb char *off_A0D178[17] = { "__index", "__newindex", "__gc", "__mode", "__len", "__eq", "__add", "__sub", "__mul", "__div", "__mod", "__pow", "__unm", "__lt", "__le", "__concat", "__call" }; // weak _UNKNOWN unk_A0D280; // weak char *off_A0D508[5] = { "call", "return", "line", "count", "tail call" }; // weak char *off_A0D520 = "debug"; // weak char *off_A0D7F8 = "abs"; // weak char *off_A0D988 = "arshift"; // weak char *off_A0DAB0 = "byte"; // weak char *off_A0DEA0 = "aAbBcdHIjmMpSUwWxXyYz%"; // weak char *off_A0DEA4 = &byte_9A8050; // weak int dword_A0DEA8[6] = { 0, 1, 2, 3, 4, 5 }; // idb char *off_A0DEC0[6] = { "all", "collate", "ctype", "monetary", "numeric", "time" }; // weak char *off_A0DEE0 = "clock"; // weak int Origin[3] = { 0, 1, 2 }; // idb char *off_A0E06C[3] = { "set", "cur", "end" }; // weak int dword_A0E07C[3] = { 4, 0, 64 }; // idb char *off_A0E088[3] = { "no", "full", "line" }; // weak char *off_A0E098 = "close"; // weak char *off_A0E0F8 = "close"; // weak char *off_A0E2D4 = "concat"; // weak char *off_A0E3F4 = "create"; // weak char *off_A0E4B4 = "loadlib"; // weak char *off_A0E4CC = "require"; // weak int (__cdecl *off_A0E4DC[4])(int) = { &sub_76EC60, &sub_76E930, &sub_76EA80, &sub_76EB50 }; // weak char byte_A0E654 = '\x01'; // idb _UNKNOWN unk_A0E65C; // weak int dword_A0E76C[2] = { 1818321776, 108 }; // idb char *off_A0E838[11] = { "stop", "restart", "collect", "count", "step", "setpause", "setstepmul", "setmajorinc", "isrunning", "generational", "incremental" }; // weak int dword_A0E868[12] = { 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 0 }; // idb char *off_A0E898 = "assert"; // weak char asc_A0E97C[1] = " "; // idb void *off_A0EB70 = &aAnd; // idb char byte_A0ED31[259] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\b', '\b', '\b', '\b', '\b', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\f', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x16', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x04', '\x04', '\x04', '\x04', '\x05', '\x04', '\x15', '\x15', '\x15', '\x15', '\x15', '\x15', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x04', '\x04', '\x04', '\x04', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; // idb char byte_A0EE34[] = { '\x06' }; // weak char byte_A0EE35[30] = { '\x06', '\x06', '\x06', '\a', '\a', '\a', '\a', '\a', '\a', '\n', '\t', '\x05', '\x04', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x02', '\x02', '\x01', '\x01', '\0' }; // idb char byte_A0F32C[40] = { '`', 'q', 'A', 'T', 'P', 'P', '\\', 'l', '<', '\x10', '<', 'T', 'l', '|', '|', '|', '|', '|', '|', '`', '`', '`', 'h', '\"', '¼', '¼', '¼', '„', 'ä', 'T', 'T', '\x10', 'b', 'b', '\x04', 'b', '\x14', 'Q', 'P', '\x17' }; // idb int (__thiscall *off_A0F3C0)(void *, char) = &sub_7773C0; // weak int (__thiscall *off_A0F3E0)(void *, char) = &sub_7773C0; // weak int (*off_A0F3F0[46])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F4A8)[4] = &dword_7808A0; // weak int (*off_A0F4B8)[4] = &dword_7808A0; // weak int (__stdcall *off_A0F4C8)(int) = &sub_778460; // weak int (*off_A0F584[2])[4] = { &dword_7808A0, &dword_778C60 }; // weak int (*off_A0F598[22])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F620[21])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F678[24])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F6D8)[4] = &dword_7808A0; // weak int (__stdcall *off_A0F6E8)(int) = &sub_77A970; // weak int (*off_A0F73C[3])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F750[18])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (__stdcall *off_A0F798[2])(int) = { &sub_77AD80, &sub_77AE20 }; // weak int (__stdcall *off_A0F7E0)(int) = &sub_77CAF0; // weak int (*off_A0F838[2])() = { &sub_77D850, &sub_789580 }; // weak int (*off_A0F854[2])[4] = { &dword_7808A0, &dword_77DF70 }; // weak int (*off_A0F868[3])() = { &sub_77D850, &sub_789580, &sub_784440 }; // weak int (*off_A0F8C0[20])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0F910[2])[4] = { &dword_7808A0, &dword_77D070 }; // weak int (*off_A0F920[2])() = { &sub_77D850, &sub_789580 }; // weak int (*off_A0F970[49])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0FA34)[28] = &dword_77EF90; // weak int (*off_A0FA44)[4] = &dword_7808A0; // weak int (*off_A0FA54)() = &sub_46F0F0; // weak int (*off_A0FA58)[4] = &dword_7808A0; // weak int (*off_A0FA68[17])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0FAAC)[28] = &dword_789C30; // weak int (__thiscall *off_A0FABC)(void *, char) = &sub_780DE0; // weak int (*off_A0FAC0)[28] = &dword_780E20; // weak int (__thiscall *off_A0FAD0)(void *, char) = &sub_77FAB0; // weak int (*off_A0FAD4)[12] = &dword_785250; // weak int (*off_A0FAE4)[4] = &dword_7808A0; // weak int (*off_A0FAF4)[4] = &dword_7808A0; // weak int (*off_A0FB04)[12] = &dword_782320; // weak int (*off_A0FB14[2])[4] = { &dword_7808A0, &dword_779C10 }; // weak int (*off_A0FB24[2])() = { &sub_77D850, &sub_789580 }; // weak int (*off_A0FB38[10])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_77D850 }; // weak int (*off_A0FB5C)() = &sub_77D850; // weak int (*off_A0FB80[2])[4] = { &dword_7808A0, &dword_77A960 }; // weak int (*off_A0FB90[9])() = { &sub_77D850, &sub_789430, &sub_783660, &sub_783680, &sub_77A480, &sub_77E340, &sub_78C900, &sub_7836A0, &sub_77A4A0 }; // weak int (*off_A0FBF0[7])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (__stdcall *off_A0FC0C)(int, int) = &sub_783F10; // weak int (*off_A0FC28[29])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0FC9C)[4] = &dword_7808A0; // weak int (*off_A0FCB0[3])() = { &sub_77D850, &sub_789580, &sub_784440 }; // weak int (*off_A0FD24)[28] = &dword_77E7C0; // weak int (*off_A0FD38[25])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0FD9C)[4] = &dword_7808A0; // weak int (*off_A0FDAC)[12] = &dword_785C90; // weak int (__stdcall *off_A0FDBC)(int, char, char, char) = &sub_785E00; // weak int (__thiscall *off_A0FDC0)(void *, char) = &sub_785F50; // weak int (*off_A0FDC8)() = &sub_77D850; // weak int (*off_A0FE18[44])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A0FEC8[2])[4] = { &dword_7808A0, &dword_77D750 }; // weak int (*off_A0FED8[12])() = { &sub_77D850, &sub_789580, &sub_784440, &sub_78BBF0, &sub_78BC10, &sub_786EC0, &sub_783460, &sub_78D040, &sub_787C90, &sub_786EE0, &sub_786F00, &sub_77A580 }; // weak int (*off_A0FF88[31])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_77D850, &sub_789580, &sub_784440 }; // weak int (*off_A0FFF8[3])() = { &sub_77D850, &sub_789580, &sub_784440 }; // weak int (*off_A10068[3])() = { &sub_78BBD0, &sub_7883F0, &sub_78C8E0 }; // weak int (*off_A100B8[2])[4] = { &dword_7808A0, &dword_77EA80 }; // weak int (*off_A100C8[3])() = { &sub_77D850, &sub_7883F0, &sub_784440 }; // weak int (*off_A1018C[2])[4] = { &dword_7808A0, &dword_786360 }; // weak int (__stdcall *off_A1019C)(int, int) = &sub_789320; // weak int (*off_A101A4[2])() = { &sub_46F0F0, &sub_46F0F0 }; // weak int (__stdcall *off_A101AC)(int, int) = &sub_7893D0; // weak int (__stdcall *off_A101B4)(int, char) = &sub_7894D0; // weak int (*off_A101B8[8])() = { &sub_77D850, &sub_789580, &sub_784440, &sub_78BBF0, &sub_7895A0, &sub_777750, &sub_7895C0, &sub_7895E0 }; // weak int (*off_A101FC[3])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A10208)[4] = &dword_7808A0; // weak int (*off_A10218[3])() = { &sub_78D730, &sub_789430, &sub_783660 }; // weak int (__stdcall *off_A10224)(char) = &sub_789EA0; // weak int (*off_A10228)[4] = &dword_7808A0; // weak int (__stdcall *off_A10238)(char, int) = &sub_789A70; // weak int (__stdcall *off_A1023C)(int, int) = &sub_789DD0; // weak int (__stdcall *off_A10244)(char) = &sub_789EA0; // weak int (*off_A1024C[12])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_77D850, &sub_7883F0 }; // weak int (*off_A10274[2])() = { &sub_77D850, &sub_7883F0 }; // weak int (*off_A1029C[16])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_78BBD0, &sub_789580, &sub_784440 }; // weak int (*off_A102D0[3])() = { &sub_78BBD0, &sub_789580, &sub_784440 }; // weak int (*off_A10304[2])[4] = { &dword_7808A0, &dword_78AB00 }; // weak int (*off_A10314[2])[4] = { &dword_7808A0, &dword_78A580 }; // weak int (__stdcall *off_A10324)(int) = &sub_78AF10; // weak int (*off_A10348)[12] = &dword_77A0C0; // weak int (__thiscall *off_A10358)(void *, char) = &sub_78B430; // weak int (*off_A1035C[2])[4] = { &dword_7808A0, &dword_78B7B0 }; // weak int (*off_A10370[23])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (*off_A103CC)[12] = &dword_78B530; // weak int (*off_A103DC)[4] = &dword_7808A0; // weak int (*off_A103F0[5])() = { &sub_78BBD0, &sub_789580, &sub_784440, &sub_78BBF0, &sub_78BC10 }; // weak int (__stdcall *off_A10454[3])(int) = { &sub_78C2D0, &sub_7833C0, &sub_78C350 }; // weak int (*off_A10474)[4] = &dword_7808A0; // weak int (*off_A10484[2])() = { &sub_77D850, &sub_7883F0 }; // weak int (*off_A10490[2])[4] = { &dword_7808A0, &dword_786360 }; // weak int (*off_A104A0[2])() = { &sub_78D730, &sub_789430 }; // weak int (*off_A104A8)[4] = &dword_7808A0; // weak int (*off_A104B8[3])() = { &sub_77D850, &sub_789580, &sub_78C8E0 }; // weak int (*off_A104D4)[28] = &dword_78CCC0; // weak int (__stdcall *off_A104E4[9])(int) = { &sub_78C2D0, &sub_7833C0, &sub_78C350, &sub_789FC0, &sub_78CFC0, &sub_78CDF0, &sub_77E360, &sub_78CE60, &sub_78CED0 }; // weak _UNKNOWN unk_A10508; // weak int (*off_A10510[15])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_78BBD0 }; // weak int (*off_A10548)() = &sub_78BBD0; // weak int (*off_A10580[5])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0 }; // weak int (__stdcall *off_A10594)(int) = &sub_78D350; // weak int (__stdcall *off_A105A8)(int) = &sub_78D640; // weak int (*off_A105B0)() = &sub_78D730; // weak int (*off_A105B8[2])() = { &sub_77D850, &sub_789580 }; // weak int (__thiscall *off_A10614)(void *, char) = &sub_78D7E0; // weak int (*off_A10618)() = &sub_77D850; // weak int (*off_A10638[10])() = { &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_46F0F0, &sub_77D850, &sub_789430 }; // weak int (*off_A10658[2])() = { &sub_77D850, &sub_789430 }; // weak IID riid = { 0u, 0u, 0u, { 192u, 0u, 0u, 0u, 0u, 0u, 0u, 70u } }; // idb _UNKNOWN unk_A10688; // weak _UNKNOWN unk_A10698; // weak _UNKNOWN unk_A106A8; // weak _UNKNOWN unk_A106B8; // weak _UNKNOWN unk_A106C8; // weak _UNKNOWN unk_A106D8; // weak _UNKNOWN unk_A106E8; // weak _UNKNOWN unk_A106F8; // weak _UNKNOWN unk_A10708; // weak _UNKNOWN unk_A10718; // weak _UNKNOWN unk_A10728; // weak _UNKNOWN unk_A10738; // weak _UNKNOWN unk_A10748; // weak void *std::length_error::`vftable' = &sub_7D3607; // weak void *std::out_of_range::`vftable' = &sub_7D3607; // weak void *std::error_category::`vftable' = &sub_7D3544; // weak void *std::tr1::bad_function_call::`vftable' = &sub_7D3607; // weak void *std::tr1::regex_error::`vftable' = &sub_7D3607; // weak char *off_A10890 = "r"; // idb _UNKNOWN unk_A108CC; // weak wchar_t *off_A108E8 = &unk_A10924; // idb int dword_A10974[] = { 1 }; // weak int dword_A10978[54] = { 2, 18, 10, 33, 34, 50, 42, 3, 19, 11, 35, 51, 43, 0, 858927408, 926299444, 1650538808, 1717920867, 1785292903, 1852664939, 1920036975, 1987409011, 2054781047, 0, 354484224, 202182161, 168430347, 151587081, 134744073, 134744072, 117901063, 117901063, 117901063, 7, 858927408, 926299444, 1650538808, 1717920867, 1785292903, 1852664939, 1920036975, 1987409011, 2054781047, 0, 692125696, 387521569, 320083222, 286331410, 269488145, 252645135, 235802126, 219024910, 218959117, 13 }; // idb void *std::exception::`vftable' = &sub_7D4474; // weak void *std::bad_cast::`vftable' = &sub_7D4474; // weak void *std::bad_typeid::`vftable' = &sub_7D4474; // weak void *std::__non_rtti_object::`vftable' = &sub_7D4474; // weak void *type_info::`vftable' = &sub_7D44F9; // weak void *std::bad_exception::`vftable' = &sub_7E0743; // weak _UNKNOWN unk_A12DF0; // weak _UNKNOWN unk_A1A56A; // weak _UNKNOWN unk_A200AC; // weak void *NiTMapBase,unsigned int,NiControllerSequence *>::`vftable' = &sub_8001F0; // weak void *NiTListBase,NiActorManager::TimelineData>::`vftable' = &sub_7FF840; // weak void *NiTextKeyMatch::`vftable' = &sub_6326C0; // weak void *NiActorManager::ChainCompletionInfo::`vftable' = &sub_800080; // weak void *NiTMapBase,NiObject *,NiObject *>::`vftable' = &sub_8000F0; // weak void *NiTMapBase,NiObject *,bool>::`vftable' = &sub_800130; // weak void *NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable' = &sub_800170; // weak void *NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable' = &sub_8001B0; // weak void *NiTObjectList::`vftable' = &sub_7FF870; // weak void *NiTPointerMap::`vftable' = &sub_800C00; // weak void *NiTPointerMap::`vftable' = &sub_800C40; // weak void *NiTPointerMap::`vftable' = &sub_800230; // weak void *NiTArray>::`vftable' = &sub_800CE0; // weak void *NiTArray>::`vftable' = &sub_800A80; // weak void *NiTPointerMap::`vftable' = &sub_800B80; // weak void *NiTPointerMap::`vftable' = &sub_800BC0; // weak void *NiActorManager::`vftable' = &sub_801610; // weak void *NiActorManager::CompletionInfo::`vftable' = &sub_802210; // weak void *NiKFMTool::`vftable' = &sub_803740; // weak void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable' = &sub_801540; // weak void *NiTPointerMap::`vftable' = &sub_8015D0; // weak void *NiTextKeyExtraData::`vftable' = &sub_80B520; // weak void *NiTArray::`vftable' = &sub_80B7A0; // weak void *NiStringPalette::`vftable' = &sub_80C790; // weak void *NiMultiTargetTransformController::`vftable' = &sub_80B770; // weak void *NiControllerSequence::`vftable' = &sub_80ECD0; // weak void *NiBlendAccumTransformInterpolator::`vftable' = &sub_810240; // weak void *NiTransformController::`vftable' = &sub_831FE0; // weak void *NiTArray *>::`vftable' = &sub_810770; // weak void *NiTArray *>::`vftable' = &sub_8107A0; // weak void *NiBoneLODController::`vftable' = &sub_811CD0; // weak float flt_A20C38 = -1.0; // weak void *NiTextureTransformController::`vftable' = &sub_815240; // weak void *NiMaterialColorController::`vftable' = &sub_8158B0; // weak void *NiAlphaController::`vftable' = &sub_831FE0; // weak void *NiTMapBase,char const *,unsigned int>::`vftable' = &sub_816180; // weak void *NiAVObjectPalette::`vftable' = &sub_815D10; // weak void *NiTMapBase,char const *,NiAVObject *>::`vftable' = &sub_816100; // weak void *NiTPointerMap::`vftable' = &sub_816140; // weak void *NiTStringTemplateMap,NiAVObject *>::`vftable' = &sub_816650; // weak void *NiTPointerMap::`vftable' = &sub_8161C0; // weak void *NiTStringTemplateMap,unsigned int>::`vftable' = &sub_816BD0; // weak void *NiTArray>::`vftable' = &sub_816460; // weak void *NiControllerManager::`vftable' = &sub_816680; // weak void *NiTStringPointerMap::`vftable' = &sub_816650; // weak void *NiTStringPointerMap::`vftable' = &sub_816BD0; // weak void *NiDefaultAVObjectPalette::`vftable' = &sub_816D20; // weak void *NiFloatData::`vftable' = &sub_817620; // weak void *NiPosData::`vftable' = &sub_817660; // weak void *NiVisController::`vftable' = &sub_831FE0; // weak void *NiUVData::`vftable' = &sub_818710; // weak void *NiUVController::`vftable' = &sub_819330; // weak void *NiTransformInterpolator::`vftable' = &sub_81A350; // weak void *NiSequenceStreamHelper::`vftable' = &sub_40DCC0; // weak void *NiTArray>::`vftable' = &sub_81A980; // weak void *NiSequence::`vftable' = &sub_81AE40; // weak void *NiRotData::`vftable' = &sub_81B340; // weak void *NiFloatController::`vftable' = &sub_81B690; // weak void *NiRollController::`vftable' = &sub_81B690; // weak void *NiQuaternionInterpolator::`vftable' = &sub_827DD0; // weak void *NiPoint3Interpolator::`vftable' = &sub_81CCA0; // weak int (__thiscall *off_A217DC)(void *, char) = &sub_81DE00; // weak int (__thiscall *off_A21884)(void *, char) = &sub_81F860; // weak void *NiMorphData::`vftable' = &sub_821230; // weak void *NiLookAtInterpolator::`vftable' = &sub_822650; // weak void *NiLookAtController::`vftable' = &sub_8983C0; // weak void *NiLightDimmerController::`vftable' = &sub_823100; // weak void *NiLightColorController::`vftable' = &sub_823600; // weak void *NiTArray::`vftable' = &sub_8238E0; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_823A00; // weak void *NiTPointerMap>::`vftable' = &sub_823A40; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_824190; // weak void *NiTStringPointerMap>::`vftable' = &sub_824190; // weak void *NiKeyframeManager::`vftable' = &sub_824230; // weak void *NiTransformData::`vftable' = &sub_824820; // weak void *NiGeomMorpherController::`vftable' = &sub_8259D0; // weak void *NiFloatsExtraDataPoint3Controller::`vftable' = &sub_825B40; // weak void *NiFloatsExtraDataController::`vftable' = &sub_825F70; // weak void *NiFloatInterpolator::`vftable' = &sub_82B6F0; // weak void *NiFloatExtraDataController::`vftable' = &sub_8329F0; // weak void *NiTArray>::`vftable' = &sub_827130; // weak void *NiFlipController::`vftable' = &sub_8273A0; // weak void *NiColorInterpolator::`vftable' = &sub_827DD0; // weak void *NiColorExtraDataController::`vftable' = &sub_8329F0; // weak void *NiColorData::`vftable' = &sub_8283E0; // weak void *NiBSplineTransformInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplinePoint3Interpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineFloatInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineCompTransformInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineCompPoint3Interpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineCompFloatInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineCompColorInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineColorInterpolator::`vftable' = &sub_828EB0; // weak void *NiBSplineData::`vftable' = &sub_82AD30; // weak void *NiBSplineBasisData::`vftable' = &sub_82B3E0; // weak void *NiBoolTimelineInterpolator::`vftable' = &sub_82B6F0; // weak void *NiBoolInterpolator::`vftable' = &sub_82B6F0; // weak void *NiBoolData::`vftable' = &sub_82C150; // weak void *NiBlendTransformInterpolator::`vftable' = &sub_820920; // weak void *NiBlendQuaternionInterpolator::`vftable' = &sub_82CAF0; // weak void *NiBlendPoint3Interpolator::`vftable' = &sub_82CAF0; // weak void *NiBlendFloatInterpolator::`vftable' = &sub_82CAF0; // weak void *NiBlendColorInterpolator::`vftable' = &sub_82CAF0; // weak void *NiBlendBoolInterpolator::`vftable' = &sub_82CAF0; // weak void *NiInterpController::`vftable' = &sub_8983C0; // weak void *NiBlendInterpolator::`vftable' = &sub_82CAF0; // weak void *NiSingleInterpController::`vftable' = &sub_831FE0; // weak void *NiInterpolator::`vftable' = &sub_831C20; // weak void *NiFloatInterpController::`vftable' = &sub_831FE0; // weak void *NiPoint3InterpController::`vftable' = &sub_831FE0; // weak void *NiBoolInterpController::`vftable' = &sub_831FE0; // weak void *NiKeyBasedInterpolator::`vftable' = &sub_832140; // weak void *NiExtraDataController::`vftable' = &sub_8329F0; // weak void *NiBSplineInterpolator::`vftable' = &sub_832F70; // weak void *NiTArray::`vftable' = &sub_8330D0; // weak void *NiCollisionData::`vftable' = &sub_833EA0; // weak void *NiBoundingVolume::`vftable' = &nullsub_32; // weak void *NiSphereBV::`vftable' = &sub_834C60; // weak void *NiHalfSpaceBV::`vftable' = &sub_8370C0; // weak void *NiTArray::`vftable' = &sub_838CE0; // weak void *NiUnionBV::`vftable' = &sub_8394B0; // weak void *NiCapsuleBV::`vftable' = &sub_83A6B0; // weak void *NiBoxBV::`vftable' = &sub_83AC30; // weak void *NiOBBRoot::`vftable' = &sub_844D10; // weak void *NiIntersector::`vftable' = &sub_846820; // weak void *NiSphereTriIntersector::`vftable' = &sub_846820; // weak void *NiCapsuleSphereIntersector::`vftable' = &sub_846820; // weak void *NiCapsuleCapsuleIntersector::`vftable' = &sub_846820; // weak void *NiCapsuleTriIntersector::`vftable' = &sub_846820; // weak void *NiBoxCapsuleIntersector::`vftable' = &sub_846820; // weak void *NiBoxSphereIntersector::`vftable' = &sub_846820; // weak void *NiOBBNode::`vftable' = &sub_84C410; // weak void *NiOBBLeaf::`vftable' = &sub_84C410; // weak void *NiTListBase,NiDynamicEffect *>::`vftable' = &sub_858DF0; // weak void *NiDynamicEffectState::`vftable' = &sub_858DC0; // weak void *NiTPointerListBase,NiDynamicEffect *>::`vftable' = &sub_859370; // weak void *NiTPointerList::`vftable' = &sub_859370; // weak void *NiTArray>::`vftable' = &sub_85A190; // weak void *NiNode::`vftable' = &sub_85A830; // weak void *NiObjectNET::`vftable' = &sub_85B8C0; // weak void *NiObject::`vftable' = &sub_632700; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_85BF90; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_85C2F0; // weak void *NiTPointerList>::`vftable' = &sub_85C2F0; // weak void *NiAVObject::`vftable' = &sub_85CA60; // weak void *NiMaterialProperty::`vftable' = &sub_85ED30; // weak void *NiRenderer::`vftable' = &sub_85F760; // weak void *NiCullingProcess::`vftable' = &sub_85F7F0; // weak void *NiDirectionalLight::`vftable' = &sub_860FF0; // weak void *NiTListBase,NiNode *>::`vftable' = &sub_8611D0; // weak void *NiTPointerListBase,NiNode *>::`vftable' = &sub_861400; // weak void *NiTPointerList::`vftable' = &sub_861400; // weak void *NiDynamicEffect::`vftable' = &sub_861620; // weak void *NiAmbientLight::`vftable' = &sub_860FF0; // weak void *NiSortAdjustNode::`vftable' = &sub_861BF0; // weak void *NiCamera::`vftable' = &sub_862140; // weak void *NiShaderFactory::`vftable' = &sub_863620; // weak void *NiTArray::`vftable' = &sub_863680; // weak void *NiTArray::`vftable' = &sub_8636B0; // weak void *NiTexturingProperty::`vftable' = &sub_863D20; // weak void *NiTexturingProperty::Map::`vftable' = &sub_864E50; // weak void *NiTexturingProperty::BumpMap::`vftable' = &sub_864E50; // weak void *NiTexturingProperty::ShaderMap::`vftable' = &sub_864E50; // weak void *NiTexture::`vftable' = &sub_866160; // weak void *NiSourceTexture::`vftable' = &sub_8661A0; // weak void *NiImageConverter::`vftable' = &sub_866BF0; // weak void *NiTriShape::`vftable' = &sub_87C240; // weak void *NiRenderTargetGroup::`vftable' = &sub_867380; // weak void *NiRenderedTexture::`vftable' = &sub_867610; // weak void *NiScreenElementsData::`vftable' = &sub_867840; // weak void *NiScreenElements::`vftable' = &sub_868C20; // weak void *NiExtraData::`vftable' = &sub_868E50; // weak void *NiShader::`vftable' = &sub_869460; // weak void *NiPixelData::`vftable' = &sub_869BF0; // weak void *NiAlphaAccumulator::`vftable' = &sub_86AF00; // weak void *NiStringExtraData::`vftable' = &sub_86B4C0; // weak void *NiTimeController::`vftable' = &sub_8983C0; // weak void *NiRangeLODData::`vftable' = &sub_86CCB0; // weak void *NiLODNode::`vftable' = &sub_86D900; // weak void *NiGeometry::`vftable' = &sub_86E7A0; // weak void *NiSkinPartition::Partition::`vftable' = &sub_86F4C0; // weak void *NiSkinPartition::`vftable' = &sub_86F390; // weak void *NiTMapBase,unsigned int,float>::`vftable' = &sub_86F600; // weak void *NiTPointerMap::`vftable' = &sub_8705C0; // weak void *NiTriBasedGeomData::`vftable' = &sub_871290; // weak void *NiTriBasedGeom::`vftable' = &sub_871460; // weak void *NiCollisionObject::`vftable' = &sub_46F0F0; // weak void *NiGeometryGroupManager::`vftable' = &sub_8747B0; // weak void *NiTriShapeDynamicData::`vftable' = &sub_874950; // weak void *NiPalette::`vftable' = &sub_875640; // weak void *NiTArray::`vftable' = &sub_875AA0; // weak void *NiTMapBase,NiObject const *,unsigned int>::`vftable' = &sub_876210; // weak void *NiTArray::`vftable' = &sub_875A50; // weak void *NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable' = &sub_8760B0; // weak void *NiTMapBase,char const *,unsigned short>::`vftable' = &sub_876160; // weak void *NiTPointerMap::`vftable' = &sub_8760F0; // weak void *NiTStringTemplateMap,NiObject * (__cdecl *)(void)>::`vftable' = &sub_876130; // weak void *NiTPointerMap::`vftable' = &sub_8761A0; // weak void *NiTStringTemplateMap,unsigned short>::`vftable' = &sub_8761E0; // weak void *NiTPointerMap::`vftable' = &sub_876250; // weak void *NiTArray>::`vftable' = &sub_876BC0; // weak void *NiTStringPointerMap::`vftable' = &sub_876130; // weak void *NiTStringPointerMap::`vftable' = &sub_8761E0; // weak void *NiStream::`vftable' = &sub_8780C0; // weak void *NiSkinData::`vftable' = &sub_878980; // weak void *NiGeometryData::`vftable' = &sub_87AAA0; // weak void *NiLight::`vftable' = &sub_87ADC0; // weak void *NiFloatsExtraData::`vftable' = &sub_87B700; // weak void *NiColorExtraData::`vftable' = &sub_87BA90; // weak void *NiTriStrips::`vftable' = &sub_87C240; // weak void *NiSwitchNode::`vftable' = &sub_87CA70; // weak void *NiPropertyState::`vftable' = &sub_87DAF0; // weak void *NiVertWeightsExtraData::`vftable' = &sub_87DF30; // weak void *NiShaderLibrary::`vftable' = &sub_87E940; // weak void *NiNIFImageReader::`vftable' = &sub_87EA90; // weak void *NiTriShapeData::`vftable' = &sub_87EE50; // weak void *NiDepthStencilBuffer::`vftable' = &sub_87F370; // weak void *Ni2DBuffer::`vftable' = &sub_87F790; // weak void *NiBackToFrontAccumulator::`vftable' = &sub_87FCC0; // weak void *NiLODData::`vftable' = &sub_87FDA0; // weak void *NiTriStripsData::`vftable' = &sub_8804D0; // weak void *NiDitherProperty::`vftable' = &sub_40DCC0; // weak void *NiRendererSpecificProperty::`vftable' = &sub_880B10; // weak void *NiShadeProperty::`vftable' = &sub_40DCC0; // weak void *NiSpecularProperty::`vftable' = &sub_40DCC0; // weak void *NiWireframeProperty::`vftable' = &sub_40DCC0; // weak void *NiScreenGeometryData::ScreenElement::`vftable' = &sub_8816B0; // weak void *NiScreenGeometry::`vftable' = &sub_881430; // weak void *NiTArray::`vftable' = &sub_881310; // weak void *NiScreenGeometryData::`vftable' = &sub_883310; // weak void *NiScreenPolygon::`vftable' = &sub_881C70; // weak void *NiTArray>::`vftable' = &sub_882430; // weak void *NiTArray>::`vftable' = &sub_882460; // weak void *NiScreenSpaceCamera::`vftable' = &sub_8831A0; // weak void *NiVectorExtraData::`vftable' = &sub_8833F0; // weak void *NiTextureEffect::`vftable' = &sub_883DB0; // weak void *NiSwitchStringExtraData::`vftable' = &sub_8845C0; // weak void *NiStringsExtraData::`vftable' = &sub_884B50; // weak void *NiPointLight::`vftable' = &sub_860FF0; // weak void *NiSpotLight::`vftable' = &sub_860FF0; // weak void *NiSourceCubeMap::`vftable' = &sub_885990; // weak void *NiScreenTexture::`vftable' = &sub_885E90; // weak void *NiScreenLODData::`vftable' = &sub_886440; // weak void *NiParticlesData::`vftable' = &sub_886D70; // weak void *NiParticleMeshesData::`vftable' = &sub_888150; // weak void *NiParticleMeshes::`vftable' = &sub_86E7A0; // weak void *NiLinesData::`vftable' = &sub_8885F0; // weak void *NiLines::`vftable' = &sub_86E7A0; // weak void *NiIntegersExtraData::`vftable' = &sub_888BA0; // weak void *NiFloatExtraData::`vftable' = &sub_888E30; // weak void *NiBSPNode::`vftable' = &sub_85A830; // weak void *NiBooleanExtraData::`vftable' = &sub_8896A0; // weak void *NiBillboardNode::`vftable' = &sub_85A830; // weak void *NiParticles::`vftable' = &sub_86E7A0; // weak void *NiTArray::`vftable' = &sub_88A9C0; // weak void *NiAdditionalGeometryData::`vftable' = &sub_88AFD0; // weak void *NiTPointerList::`vftable' = &sub_88CEC0; // weak void *NiTPointerListBase,NiAudioSource *>::`vftable' = &sub_88CEC0; // weak void *NiTListBase,NiAudioSource *>::`vftable' = &sub_88CF00; // weak void *NiAudioSystem::`vftable' = &sub_88CE90; // weak void *NiTPointerList::`vftable' = &sub_88DC80; // weak void *NiTPointerListBase,NiProviderInfo *>::`vftable' = &sub_88DC80; // weak void *NiTListBase,NiProviderInfo *>::`vftable' = &sub_88DD50; // weak void *NiMilesAudioSystem::`vftable' = &sub_88DC50; // weak void *NiMilesSource::`vftable' = &sub_890140; // weak void *NiMilesListener::`vftable' = &sub_8908F0; // weak void *NiAudioSource::`vftable' = &sub_892960; // weak void *NiAudioListener::`vftable' = &sub_892E80; // weak void *NiPSysEmitterCtlr::`vftable' = &sub_893CA0; // weak void *NiPSysVortexFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysUpdateCtlr::`vftable' = &sub_8983C0; // weak void *NiPSysTurbulenceFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysSphericalCollider::`vftable' = &sub_8A9210; // weak void *NiPSysSphereEmitter::`vftable' = &sub_89DA00; // weak void *NiPSysSpawnModifier::`vftable' = &sub_89DA00; // weak void *NiPSysRotationModifier::`vftable' = &sub_89DA00; // weak void *NiPSysResetOnLoopCtlr::`vftable' = &sub_8983C0; // weak void *NiPSysRadialFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysPositionModifier::`vftable' = &sub_89DA00; // weak void *NiPSysPlanarCollider::`vftable' = &sub_8A9210; // weak void *NiPSysModifierActiveCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysMeshUpdateModifier::`vftable' = &sub_89A420; // weak void *NiPSysMeshEmitter::NiSkinnedEmitterData::`vftable' = &sub_89B0D0; // weak void *NiTArray>::`vftable' = &sub_89A880; // weak void *NiTArray>::`vftable' = &sub_89A8B0; // weak void *NiPSysMeshEmitter::`vftable' = &sub_89B3E0; // weak void *NiPSysInitialRotSpeedVarCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysInitialRotSpeedCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysInitialRotAngleVarCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysInitialRotAngleCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysGrowFadeModifier::`vftable' = &sub_89DA00; // weak void *NiPSysGravityStrengthCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysGravityFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysGravityModifier::`vftable' = &sub_89DA00; // weak void *NiPSysFieldMaxDistanceCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysFieldMagnitudeCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysFieldAttenuationCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterSpeedCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterPlanarAngleVarCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterPlanarAngleCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterLifeSpanCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterInitialRadiusCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterDeclinationVarCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterDeclinationCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysEmitterCtlrData::`vftable' = &sub_8A0060; // weak void *NiPSysDragModifier::`vftable' = &sub_89DA00; // weak void *NiPSysDragFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysData::`vftable' = &sub_8A1660; // weak void *NiPSysCylinderEmitter::`vftable' = &sub_89DA00; // weak void *NiPSysColorModifier::`vftable' = &sub_8A2460; // weak void *NiPSysColliderManager::`vftable' = &sub_8A2460; // weak void *NiPSysBoxEmitter::`vftable' = &sub_89DA00; // weak void *NiPSysBoundUpdateModifier::`vftable' = &sub_8A2E90; // weak void *NiPSysBombModifier::`vftable' = &sub_89DA00; // weak void *NiPSysAgeDeathModifier::`vftable' = &sub_89DA00; // weak void *NiPSysAirFieldSpreadCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysAirFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysAirFieldInheritVelocityCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysAirFieldAirFrictionCtlr::`vftable' = &sub_89FDC0; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8A5CE0; // weak void *NiTMapBase,char const *,NiPSysModifier *>::`vftable' = &sub_8A6090; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8A6110; // weak void *NiTPointerMap::`vftable' = &sub_8A60D0; // weak void *NiTStringTemplateMap,NiPSysModifier *>::`vftable' = &sub_8A6890; // weak void *NiTPointerList>::`vftable' = &sub_8A6110; // weak void *NiTStringPointerMap::`vftable' = &sub_8A6890; // weak void *NiParticleSystem::`vftable' = &sub_8A7950; // weak void *NiTArray> *>::`vftable' = &sub_8A69F0; // weak void *NiMeshPSysData::`vftable' = &sub_8A6F50; // weak void *NiMeshParticleSystem::`vftable' = &sub_8A7950; // weak void *NiPSysModifierCtlr::`vftable' = &sub_8A7B40; // weak void *NiPSysEmitter::`vftable' = &sub_89DA00; // weak void *NiPSysModifier::`vftable' = &sub_8A87C0; // weak void *NiPSysFieldModifier::`vftable' = &sub_89DA00; // weak void *NiPSysCollider::`vftable' = &sub_8A9210; // weak void *NiPSysVolumeEmitter::`vftable' = &sub_89DA00; // weak void *NiPSysModifierBoolCtlr::`vftable' = &sub_89FDC0; // weak void *NiPSysModifierFloatCtlr::`vftable' = &sub_89FDC0; // weak void *NiBinaryStream::`vftable' = &sub_8AA3D0; // weak void *NiSearchPath::`vftable' = &sub_8AA5D0; // weak void *NiMemStream::`vftable' = &sub_8AA960; // weak void *NiFile::`vftable' = &sub_8AAE70; // weak void *NiOldWall::`vftable' = &sub_8AB6D0; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8AB740; // weak void *NiTArray::`vftable' = &sub_8AB770; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8AB7A0; // weak void *NiTArray::`vftable' = &sub_8AB7D0; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8ABF00; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8ABF30; // weak void *NiRoom::`vftable' = &sub_8AC900; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8ACFC0; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8AD140; // weak void *NiTPointerList>::`vftable' = &sub_8AD140; // weak void *NiRoomGroup::`vftable' = &sub_8AD390; // weak void *NiPortal::`vftable' = &sub_8AD9C0; // weak void *NiTMapBase,NiGeometry *,int>::`vftable' = &sub_8AE7E0; // weak void *NiTMap::`vftable' = &sub_8AE870; // weak void *NiFixtureCuller::`vftable' = &sub_8AE930; // weak void *NiInputSystem::CreateParams::`vftable' = &sub_8AEEC0; // weak void *NiDI8InputSystem::DI8CreateParams::`vftable' = &sub_8AEF50; // weak void *NiTArray>::`vftable' = &sub_8AF9D0; // weak void *NiApplication::`vftable' = &sub_8AFEF0; // weak void *NiAppWindow::`vftable' = &sub_8B2260; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8B2670; // weak void *NiTListBase,NiActionData *>::`vftable' = &sub_8B26A0; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8B2990; // weak void *NiTPointerListBase,NiActionData *>::`vftable' = &sub_8B29C0; // weak void *NiTPointerList>::`vftable' = &sub_8B2990; // weak void *NiTPointerList::`vftable' = &sub_8B29C0; // weak void *NiInputSystem::`vftable' = &sub_8B3DD0; // weak void *NiDI8InputSystem::`vftable' = &sub_8B4C80; // weak void *NiTListBase,NiInputDevice::ControlDesc *>::`vftable' = &sub_8B41D0; // weak void *NiTPointerListBase,NiInputDevice::ControlDesc *>::`vftable' = &sub_8B4C50; // weak void *NiTPointerList::`vftable' = &sub_8B4C50; // weak void *NiInputDevice::Description::`vftable' = &sub_8B53E0; // weak void *NiDI8InputSystem::DI8Description::`vftable' = &sub_8B5410; // weak void *NiInputGamePad::`vftable' = &sub_8B5F60; // weak void *NiTListBase,NiAction *>::`vftable' = &sub_8B62B0; // weak void *NiTPointerListBase,NiAction *>::`vftable' = &sub_8B6520; // weak void *NiInputDevice::`vftable' = &sub_8B64F0; // weak void *NiTPointerList::`vftable' = &sub_8B6520; // weak void *NiInputDI8Mouse::`vftable' = &sub_8B67F0; // weak void *NiInputDI8Keyboard::`vftable' = &sub_8B76E0; // weak void *NiInputDI8GamePad::`vftable' = &sub_8B7FA0; // weak void *NiInputMouse::`vftable' = &sub_8B88B0; // weak void *NiInputKeyboard::`vftable' = &sub_8B8970; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8B8DE0; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8B8F80; // weak void *NSBShaderLibrary::`vftable' = &sub_8B8F50; // weak void *NiTPointerList>::`vftable' = &sub_8B8F80; // weak void *NiTListBase,char *>::`vftable' = &sub_8B92A0; // weak void *NiTPointerListBase,char *>::`vftable' = &sub_8B92D0; // weak void *NiTPointerList::`vftable' = &sub_8B92D0; // weak __int16 word_A2E060[544] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 287, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 288, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, 0 }; // idb __int16 word_A2E4A0[] = { 0 }; // weak __int16 word_A2E930[] = { 290 }; // weak __int16 word_A2E932[1791] = { 0, 65535, 290, 291, 65535, 291, 65535, 65535, 65535, 28, 24, 5, 292, 299, 293, 294, 6, 65535, 1, 287, 65535, 65535, 295, 65535, 295, 296, 65535, 296, 65535, 319, 65535, 344, 65535, 321, 65535, 356, 65535, 504, 65535, 509, 65535, 65535, 24, 65535, 25, 65535, 298, 25, 65535, 65535, 298, 65535, 65535, 25, 65535, 4, 65535, 24, 65535, 25, 65535, 11, 24, 12, 65535, 65535, 9, 7, 22, 15, 22, 15, 22, 15, 22, 8, 7, 22, 15, 22, 15, 22, 15, 22, 8, 10, 65535, 9, 7, 22, 15, 22, 15, 22, 8, 7, 22, 15, 22, 15, 22, 8, 10, 65535, 65535, 9, 7, 22, 15, 22, 15, 22, 15, 22, 8, 7, 22, 15, 22, 15, 22, 15, 22, 8, 10, 65535, 65535, 9, 7, 22, 15, 22, 15, 22, 8, 7, 22, 15, 22, 15, 22, 8, 10, 65535, 65535, 9, 7, 22, 15, 22, 8, 7, 22, 15, 22, 8, 10, 65535, 65535, 9, 22, 22, 10, 65535, 65535, 9, 23, 23, 10, 65535, 9, 22, 22, 10, 65535, 310, 65535, 311, 65535, 312, 65535, 313, 65535, 315, 65535, 316, 65535, 317, 65535, 318, 65535, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 15, 22, 65535, 22, 15, 22, 65535, 22, 65535, 65535, 32, 5, 320, 323, 6, 65535, 65535, 33, 5, 322, 323, 6, 65535, 323, 324, 65535, 324, 65535, 326, 65535, 327, 65535, 329, 65535, 331, 65535, 333, 65535, 335, 65535, 337, 65535, 339, 65535, 341, 65535, 343, 65535, 29, 65535, 30, 65535, 35, 24, 325, 26, 65535, 65535, 37, 328, 24, 325, 23, 308, 65535, 65535, 38, 330, 24, 325, 22, 307, 65535, 65535, 39, 332, 24, 325, 317, 306, 65535, 65535, 40, 334, 24, 325, 316, 305, 65535, 65535, 41, 336, 24, 325, 315, 304, 65535, 65535, 42, 338, 24, 325, 312, 65535, 65535, 43, 340, 24, 325, 310, 65535, 65535, 44, 342, 24, 325, 314, 303, 65535, 45, 24, 325, 23, 300, 65535, 65535, 276, 5, 345, 346, 6, 65535, 346, 347, 65535, 347, 65535, 348, 65535, 349, 65535, 350, 65535, 351, 65535, 352, 65535, 353, 65535, 354, 65535, 355, 65535, 277, 23, 24, 65535, 278, 23, 24, 65535, 279, 23, 24, 65535, 280, 23, 24, 65535, 281, 23, 24, 65535, 282, 23, 24, 65535, 283, 23, 24, 65535, 284, 23, 24, 65535, 65535, 46, 24, 5, 357, 363, 6, 65535, 46, 24, 65535, 65535, 69, 65535, 70, 65535, 71, 65535, 72, 65535, 73, 65535, 74, 65535, 75, 65535, 76, 65535, 77, 65535, 78, 65535, 79, 65535, 80, 65535, 81, 65535, 82, 65535, 83, 65535, 84, 65535, 85, 65535, 86, 65535, 87, 65535, 88, 65535, 89, 65535, 90, 65535, 91, 65535, 92, 65535, 93, 65535, 94, 65535, 95, 65535, 1, 287, 65535, 49, 65535, 50, 65535, 51, 65535, 52, 65535, 53, 65535, 54, 65535, 55, 65535, 56, 65535, 57, 65535, 58, 65535, 59, 65535, 60, 65535, 61, 65535, 62, 65535, 63, 65535, 64, 65535, 65, 65535, 66, 65535, 67, 65535, 96, 65535, 97, 65535, 98, 65535, 99, 65535, 100, 65535, 101, 65535, 102, 65535, 103, 65535, 104, 65535, 105, 65535, 106, 65535, 107, 65535, 108, 65535, 109, 65535, 110, 65535, 111, 65535, 112, 65535, 113, 65535, 114, 65535, 115, 65535, 116, 65535, 363, 364, 65535, 364, 65535, 1, 287, 65535, 47, 23, 65535, 48, 26, 65535, 68, 23, 23, 359, 361, 362, 23, 65535, 68, 23, 23, 359, 65535, 360, 23, 359, 361, 362, 23, 65535, 360, 23, 359, 65535, 65535, 117, 5, 366, 367, 6, 65535, 367, 368, 65535, 368, 65535, 369, 65535, 370, 65535, 370, 31, 65535, 373, 65535, 375, 65535, 374, 65535, 371, 65535, 372, 65535, 1, 287, 65535, 24, 14, 302, 65535, 24, 14, 24, 65535, 24, 14, 26, 65535, 24, 14, 22, 65535, 24, 14, 21, 65535, 24, 14, 23, 65535, 376, 377, 65535, 377, 65535, 381, 65535, 382, 65535, 383, 65535, 384, 65535, 386, 65535, 388, 65535, 378, 65535, 65535, 65535, 5, 379, 139, 14, 423, 380, 376, 6, 65535, 118, 131, 23, 23, 23, 65535, 118, 131, 301, 23, 23, 65535, 118, 132, 23, 23, 23, 65535, 118, 132, 301, 23, 23, 65535, 118, 133, 23, 23, 23, 65535, 118, 133, 301, 23, 23, 65535, 118, 134, 23, 23, 23, 65535, 118, 134, 301, 23, 23, 65535, 118, 301, 23, 23, 65535, 118, 301, 301, 23, 65535, 286, 24, 24, 23, 65535, 286, 24, 24, 24, 65535, 119, 301, 23, 23, 23, 65535, 65535, 120, 385, 301, 23, 23, 309, 65535, 65535, 121, 387, 301, 23, 23, 65535, 122, 24, 23, 23, 24, 389, 24, 391, 390, 65535, 17, 65535, 18, 65535, 19, 65535, 20, 65535, 1, 287, 65535, 65535, 180, 65535, 65535, 179, 65535, 65535, 123, 5, 393, 376, 6, 65535, 65535, 125, 5, 395, 376, 6, 65535, 148, 14, 301, 65535, 124, 4, 65535, 124, 24, 65535, 124, 25, 65535, 397, 24, 24, 65535, 397, 24, 65535, 397, 65535, 127, 14, 4, 65535, 127, 14, 24, 65535, 127, 14, 25, 65535, 401, 65535, 401, 400, 65535, 399, 65535, 128, 14, 24, 65535, 129, 14, 24, 65535, 130, 14, 26, 65535, 65535, 65535, 124, 5, 403, 139, 14, 423, 404, 400, 6, 65535, 402, 65535, 398, 65535, 126, 4, 65535, 126, 24, 65535, 126, 25, 65535, 406, 24, 24, 65535, 406, 24, 65535, 406, 65535, 127, 14, 4, 65535, 127, 14, 24, 65535, 127, 14, 25, 65535, 410, 65535, 410, 409, 65535, 408, 65535, 128, 14, 24, 65535, 129, 14, 24, 65535, 65535, 65535, 126, 5, 412, 139, 14, 423, 413, 409, 6, 65535, 411, 65535, 407, 65535, 65535, 135, 5, 416, 417, 6, 65535, 417, 418, 65535, 418, 65535, 419, 65535, 420, 65535, 421, 65535, 422, 65535, 425, 65535, 426, 65535, 424, 65535, 1, 287, 65535, 136, 14, 27, 65535, 137, 14, 27, 65535, 138, 14, 27, 65535, 139, 14, 423, 65535, 24, 13, 24, 13, 24, 13, 24, 65535, 24, 13, 24, 13, 24, 65535, 24, 13, 24, 65535, 24, 65535, 24, 14, 26, 65535, 140, 14, 23, 65535, 141, 14, 427, 65535, 142, 65535, 143, 65535, 145, 65535, 144, 65535, 1, 287, 65535, 429, 65535, 469, 65535, 65535, 150, 23, 297, 5, 430, 431, 6, 65535, 65535, 432, 65535, 432, 433, 65535, 433, 65535, 437, 65535, 465, 65535, 434, 65535, 435, 65535, 436, 65535, 436, 31, 65535, 440, 65535, 441, 65535, 442, 65535, 443, 65535, 444, 65535, 445, 65535, 446, 65535, 447, 65535, 448, 65535, 449, 65535, 450, 65535, 451, 65535, 452, 65535, 453, 65535, 454, 65535, 455, 65535, 456, 65535, 457, 65535, 1, 287, 65535, 151, 14, 438, 65535, 151, 14, 439, 65535, 151, 14, 302, 65535, 229, 65535, 230, 65535, 231, 65535, 232, 65535, 233, 65535, 234, 65535, 235, 23, 65535, 152, 14, 460, 65535, 153, 14, 461, 65535, 154, 14, 461, 65535, 155, 14, 461, 65535, 156, 14, 460, 65535, 157, 14, 461, 65535, 158, 14, 461, 65535, 159, 14, 461, 65535, 160, 14, 461, 65535, 161, 14, 21, 65535, 162, 14, 22, 65535, 162, 14, 302, 65535, 163, 14, 22, 65535, 163, 14, 302, 65535, 164, 14, 22, 65535, 164, 14, 302, 65535, 165, 14, 22, 65535, 165, 14, 302, 65535, 166, 14, 22, 65535, 166, 14, 302, 65535, 167, 14, 22, 65535, 167, 14, 302, 65535, 168, 14, 464, 23, 65535, 168, 14, 464, 178, 65535, 169, 14, 458, 459, 65535, 169, 14, 176, 65535, 169, 14, 171, 65535, 172, 65535, 173, 65535, 174, 65535, 175, 65535, 65535, 176, 65535, 194, 65535, 195, 65535, 196, 65535, 197, 65535, 198, 65535, 199, 65535, 200, 65535, 201, 65535, 202, 65535, 203, 65535, 204, 65535, 205, 65535, 206, 65535, 207, 65535, 208, 65535, 209, 65535, 210, 65535, 211, 65535, 212, 65535, 213, 65535, 214, 65535, 215, 65535, 216, 65535, 217, 65535, 218, 65535, 219, 65535, 1, 287, 65535, 220, 462, 65535, 221, 462, 65535, 222, 462, 65535, 223, 462, 65535, 224, 462, 65535, 225, 462, 65535, 226, 462, 65535, 65535, 463, 65535, 227, 228, 65535, 228, 227, 65535, 227, 65535, 228, 65535, 65535, 189, 65535, 190, 65535, 191, 65535, 192, 65535, 193, 65535, 1, 287, 65535, 170, 14, 466, 65535, 181, 468, 24, 65535, 65535, 182, 467, 468, 310, 65535, 65535, 183, 65535, 184, 65535, 185, 65535, 186, 65535, 187, 65535, 188, 65535, 1, 287, 65535, 65535, 236, 23, 297, 5, 470, 471, 6, 65535, 65535, 472, 65535, 472, 473, 65535, 473, 65535, 474, 65535, 475, 65535, 437, 65535, 475, 31, 65535, 476, 65535, 477, 65535, 478, 65535, 479, 65535, 480, 65535, 481, 65535, 482, 65535, 483, 65535, 484, 65535, 485, 65535, 486, 65535, 487, 65535, 488, 65535, 489, 65535, 490, 65535, 491, 65535, 492, 65535, 1, 287, 65535, 237, 14, 493, 65535, 238, 14, 493, 65535, 239, 14, 493, 65535, 240, 14, 21, 65535, 240, 14, 302, 65535, 241, 14, 494, 65535, 242, 14, 494, 65535, 243, 14, 494, 65535, 244, 14, 23, 65535, 244, 14, 302, 65535, 245, 14, 23, 65535, 245, 14, 302, 65535, 246, 14, 23, 65535, 246, 14, 302, 65535, 247, 14, 23, 65535, 247, 14, 302, 65535, 248, 14, 23, 65535, 248, 14, 302, 65535, 249, 14, 23, 65535, 249, 14, 302, 65535, 250, 14, 495, 65535, 250, 14, 302, 65535, 251, 14, 496, 65535, 252, 14, 24, 65535, 252, 14, 288, 65535, 253, 14, 21, 65535, 253, 14, 302, 65535, 254, 65535, 255, 65535, 256, 65535, 257, 65535, 258, 65535, 259, 65535, 285, 65535, 1, 287, 65535, 260, 65535, 261, 65535, 262, 65535, 263, 65535, 264, 65535, 265, 65535, 268, 65535, 266, 65535, 267, 65535, 269, 65535, 285, 65535, 1, 287, 65535, 270, 65535, 271, 65535, 1, 287, 65535, 272, 65535, 273, 65535, 274, 65535, 275, 65535, 1, 287, 65535, 497, 498, 65535, 498, 65535, 365, 65535, 405, 65535, 392, 65535, 414, 65535, 394, 65535, 428, 65535, 509, 65535, 65535, 149, 297, 5, 500, 497, 6, 65535, 65535, 502, 65535, 502, 503, 65535, 503, 65535, 365, 65535, 358, 65535, 499, 65535, 415, 65535, 392, 65535, 394, 65535, 396, 65535, 509, 65535, 65535, 65535, 147, 24, 5, 505, 299, 506, 501, 6, 65535, 301, 14, 23, 65535, 301, 14, 26, 65535, 301, 14, 309, 65535, 301, 14, 301, 65535, 507, 65535, 507, 508, 65535, 65535, 146, 24, 5, 510, 508, 6, 65535, 0, 0 }; // idb __int16 word_A2F730[584] = { 0, 437, 437, 438, 445, 480, 442, 502, 509, 511, 515, 516, 520, 521, 522, 523, 524, 525, 532, 533, 537, 541, 553, 554, 558, 559, 560, 564, 565, 569, 577, 580, 599, 620, 623, 646, 649, 670, 673, 688, 691, 701, 704, 710, 723, 724, 725, 726, 727, 728, 729, 730, 734, 759, 779, 796, 811, 818, 827, 837, 846, 854, 867, 865, 896, 894, 924, 925, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 945, 946, 951, 982, 981, 1046, 1045, 1109, 1108, 1175, 1174, 1243, 1242, 1313, 1312, 1353, 1352, 1399, 1398, 1530, 1564, 1562, 1590, 1591, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1608, 1622, 1636, 1650, 1664, 1678, 1692, 1706, 1725, 1722, 1757, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1830, 1832, 1834, 1836, 1838, 1840, 1842, 1844, 1846, 1848, 1850, 1852, 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1871, 1873, 1875, 1877, 1879, 1881, 1883, 1888, 1890, 1892, 1894, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1919, 1920, 1921, 1929, 1935, 1941, 1994, 2029, 2074, 2114, 2112, 2147, 2148, 2152, 2162, 2175, 2179, 2180, 2181, 2182, 2183, 2184, 2192, 2225, 2281, 2323, 2365, 2403, 2447, 2448, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2463, 2475, 2462, 2488, 2527, 2566, 2605, 2644, 2683, 2722, 2761, 2800, 2825, 2852, 2930, 3011, 3045, 3044, 3101, 3100, 3127, 3159, 3161, 3163, 3165, 3167, 3175, 3176, 3180, 3181, 3189, 3187, 3228, 3226, 3266, 3281, 3291, 3301, 3314, 3332, 3346, 3355, 3356, 3357, 3361, 3362, 3367, 3376, 3385, 3394, 3406, 3412, 3404, 3425, 3426, 3433, 3443, 3453, 3466, 3484, 3498, 3507, 3508, 3509, 3513, 3514, 3519, 3533, 3542, 3556, 3562, 3554, 3575, 3576, 3585, 3583, 3620, 3621, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3640, 3651, 3668, 3679, 3690, 3738, 3776, 3805, 3827, 3865, 3876, 3890, 3891, 3892, 3893, 3904, 3914, 3915, 3924, 3922, 3956, 3958, 3962, 3963, 3967, 3968, 3969, 3973, 3991, 4012, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4043, 4048, 4053, 4146, 4147, 4148, 4149, 4150, 4151, 4156, 4163, 4176, 4189, 4202, 4215, 4228, 4241, 4254, 4267, 4280, 4297, 4307, 4317, 4327, 4337, 4347, 4357, 4367, 4377, 4387, 4397, 4407, 4417, 4428, 4445, 4463, 4477, 4494, 4495, 4496, 4497, 4502, 4503, 4508, 4512, 4516, 4520, 4524, 4528, 4532, 4536, 4540, 4544, 4548, 4552, 4556, 4560, 4564, 4568, 4572, 4576, 4580, 4584, 4588, 4592, 4596, 4600, 4604, 4608, 4612, 4620, 4623, 4626, 4629, 4632, 4635, 4638, 4644, 4645, 4649, 4655, 4660, 4662, 4668, 4671, 4675, 4679, 4683, 4687, 4691, 4699, 4706, 4723, 4722, 4764, 4765, 4767, 4769, 4771, 4773, 4775, 4777, 4790, 4788, 4817, 4819, 4823, 4824, 4828, 4847, 4866, 4874, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4903, 4932, 4961, 5001, 5012, 5023, 5052, 5081, 5110, 5121, 5132, 5143, 5154, 5165, 5176, 5187, 5198, 5209, 5220, 5231, 5242, 5252, 5267, 5280, 5292, 5305, 5315, 5330, 5332, 5334, 5336, 5338, 5340, 5342, 5347, 5355, 5357, 5359, 5361, 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5380, 5388, 5389, 5390, 5398, 5399, 5400, 5401, 5402, 5413, 5414, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5430, 5428, 5459, 5461, 5465, 5466, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5483, 5502, 5481, 5528, 5559, 5590, 5674, 5709, 5710, 5716, 5714, 0, 0, 0 }; // idb char *off_A2FBC0[511] = { "$end", "error", "$undefined", "EOLN", "PATH", "L_ACCOLADE", "R_ACCOLADE", "L_PARENTHESE", "R_PARENTHESE", "L_BRACKET", "R_BRACKET", "L_ANGLEBRACKET", "R_ANGLEBRACKET", "OR", "ASSIGN", "COMMA", "UNDERSCORE", "ASTERIK", "FORWARDSLASH", "PLUS", "MINUS", "N_HEX", "N_FLOAT", "N_INT", "N_STRING", "N_QUOTE", "N_BOOL", "N_VERSION", "NSFSHADER", "ARTIST", "HIDDEN", "SAVE", "ATTRIBUTES", "GLOBALATTRIBUTES", "ATTRIB", "ATTRIB_BOOL", "ATTRIB_STRING", "ATTRIB_UINT", "ATTRIB_FLOAT", "ATTRIB_POINT2", "ATTRIB_POINT3", "ATTRIB_POINT4", "ATTRIB_MATRIX3", "ATTRIB_TRANSFORM", "ATTRIB_COLOR", "ATTRIB_TEXTURE", "PACKINGDEF", "PD_STREAM", "PD_FIXEDFUNCTION", "PDP_POSITION", "PDP_BLENDWEIGHTS", "PDP_BLENDINDICES", "PDP_NORMAL", "PDP_POINTSIZE", "PDP_COLOR", "PDP_COLOR2", "PDP_TEXCOORD0", "PDP_TEXCOORD1", "PDP_TEXCOORD2", "PDP_TEXCOORD3", "PDP_TEXCOORD4", "PDP_TEXCOORD5", "PDP_TEXCOORD6", "PDP_TEXCOORD7", "PDP_POSITION2", "PDP_NORMAL2", "PDP_TANGENT", "PDP_BINORMAL", "PDP_EXTRADATA", "PDT_FLOAT1", "PDT_FLOAT2", "PDT_FLOAT3", "PDT_FLOAT4", "PDT_UBYTECOLOR", "PDT_SHORT1", "PDT_SHORT2", "PDT_SHORT3", "PDT_SHORT4", "PDT_UBYTE4", "PDT_NORMSHORT1", "PDT_NORMSHORT2", "PDT_NORMSHORT3", "PDT_NORMSHORT4", "PDT_NORMPACKED3", "PDT_PBYTE1", "PDT_PBYTE2", "PDT_PBYTE3", "PDT_PBYTE4", "PDT_FLOAT2H", "PDT_NORMUBYTE4", "PDT_NORMUSHORT2", "PDT_NORMUSHORT4", "PDT_UDEC3", "PDT_NORMDEC3", "PDT_FLOAT16_2", "PDT_FLOAT16_4", "PDTESS_DEFAULT", "PDTESS_PARTIALU", "PDTESS_PARTIALV", "PDTESS_CROSSUV", "PDTESS_UV", "PDTESS_LOOKUP", "PDTESS_LOOKUPPRESAMPLED", "PDU_POSITION", "PDU_BLENDWEIGHT", "PDU_BLENDINDICES", "PDU_NORMAL", "PDU_PSIZE", "PDU_TEXCOORD", "PDU_TANGENT", "PDU_BINORMAL", "PDU_TESSFACTOR", "PDU_POSITIONT", "PDU_COLOR", "PDU_FOG", "PDU_DEPTH", "PDU_SAMPLE", "RENDERSTATES", "CMDEFINED", "CMATTRIBUTE", "CMCONSTANT", "CMGLOBAL", "CMOPERATOR", "VSCONSTANTMAP", "VSPROGRAM", "PSCONSTANTMAP", "PSPROGRAM", "PROGRAM", "ENTRYPOINT", "SHADERTARGET", "SOFTWAREVP", "BONEMATRIX3", "BONEMATRIX4", "SKINBONEMATRIX3", "SKINBONEMATRIX4", "REQUIREMENTS", "VSVERSION", "PSVERSION", "USERVERSION", "PLATFORM", "BONESPERPARTITION", "BINORMALTANGENTMETHOD", "NBTMETHOD_NONE", "NBTMETHOD_NI", "NBTMETHOD_MAX", "NBTMETHOD_ATI", "USERDEFINEDDATA", "IMPLEMENTATION", "CLASSNAME", "PASS", "STAGE", "TSS_TEXTURE", "TSS_COLOROP", "TSS_COLORARG0", "TSS_COLORARG1", "TSS_COLORARG2", "TSS_ALPHAOP", "TSS_ALPHAARG0", "TSS_ALPHAARG1", "TSS_ALPHAARG2", "TSS_RESULTARG", "TSS_CONSTANT_DEPRECATED", "TSS_BUMPENVMAT00", "TSS_BUMPENVMAT01", "TSS_BUMPENVMAT10", "TSS_BUMPENVMAT11", "TSS_BUMPENVLSCALE", "TSS_BUMPENVLOFFSET", "TSS_TEXCOORDINDEX", "TSS_TEXTURETRANSFORMFLAGS", "TSS_TEXTRANSMATRIX", "TTFF_DISABLE", "TTFF_COUNT1", "TTFF_COUNT2", "TTFF_COUNT3", "TTFF_COUNT4", "TTFF_PROJECTED", "PROJECTED", "USEMAPINDEX", "INVERSE", "TRANSPOSE", "TTSRC_GLOBAL", "TTSRC_CONSTANT", "TT_WORLD_PARALLEL", "TT_WORLD_PERSPECTIVE", "TT_WORLD_SPHERE_MAP", "TT_CAMERA_SPHERE_MAP", "TT_SPECULAR_CUBE_MAP", "TT_DIFFUSE_CUBE_MAP", "TCI_PASSTHRU", "TCI_CAMERASPACENORMAL", "TCI_CAMERASPACEPOSITION", "TCI_CAMERASPACEREFLECT", "TCI_SPHEREMAP", "TOP_DISABLE", "TOP_SELECTARG1", "TOP_SELECTARG2", "TOP_MODULATE", "TOP_MODULATE2X", "TOP_MODULATE4X", "TOP_ADD", "TOP_ADDSIGNED", "TOP_ADDSIGNED2X", "TOP_SUBTRACT", "TOP_ADDSMOOTH", "TOP_BLENDDIFFUSEALPHA", "TOP_BLENDTEXTUREALPHA", "TOP_BLENDFACTORALPHA", "TOP_BLENDTEXTUREALPHAPM", "TOP_BLENDCURRENTALPHA", "TOP_PREMODULATE", "TOP_MODULATEALPHA_ADDCOLOR", "TOP_MODULATECOLOR_ADDALPHA", "TOP_MODULATEINVALPHA_ADDCOLOR", "TOP_MODULATEINVCOLOR_ADDALPHA", "TOP_BUMPENVMAP", "TOP_BUMPENVMAPLUMINANCE", "TOP_DOTPRODUCT3", "TOP_MULTIPLYADD", "TOP_LERP", "TA_CURRENT", "TA_DIFFUSE", "TA_SELECTMASK", "TA_SPECULAR", "TA_TEMP", "TA_TEXTURE", "TA_TFACTOR", "TA_ALPHAREPLICATE", "TA_COMPLEMENT", "NTM_BASE", "NTM_DARK", "NTM_DETAIL", "NTM_GLOSS", "NTM_GLOW", "NTM_BUMP", "NTM_DECAL", "SAMPLER", "TSAMP_ADDRESSU", "TSAMP_ADDRESSV", "TSAMP_ADDRESSW", "TSAMP_BORDERCOLOR", "TSAMP_MAGFILTER", "TSAMP_MINFILTER", "TSAMP_MIPFILTER", "TSAMP_MIPMAPLODBIAS", "TSAMP_MAXMIPLEVEL", "TSAMP_MAXANISOTROPY", "TSAMP_SRGBTEXTURE", "TSAMP_ELEMENTINDEX", "TSAMP_DMAPOFFSET", "TSAMP_ALPHAKILL_DEPRECATED", "TSAMP_COLORKEYOP_DEPRECATED", "TSAMP_COLORSIGN_DEPRECATED", "TSAMP_COLORKEYCOLOR_DEPRECATED", "TADDR_WRAP", "TADDR_MIRROR", "TADDR_CLAMP", "TADDR_BORDER", "TADDR_MIRRORONCE", "TADDR_CLAMPTOEDGE_DEPRECATED", "TEXF_NONE", "TEXF_POINT", "TEXF_LINEAR", "TEXF_ANISOTROPIC", "TEXF_PYRAMIDALQUAD", "TEXF_GAUSSIANQUAD", "TEXF_FLATCUBIC_DEPRECATED", "TEXF_GAUSSIANCUBIC_DEPRECATED", "TEXF_QUINCUNX_DEPRECATED", "TEXF_MAX_DEPRECATED", "TAK_DISABLE_DEPRECATED", "TAK_ENABLE_DEPRECATED", "TCKOP_DISABLE_DEPRECATED", "TCKOP_ALPHA_DEPRECATED", "TCKOP_RGBA_DEPRECATED", "TCKOP_KILL_DEPRECATED", "OBJECTS", "EFFECT_GENERALLIGHT", "EFFECT_POINTLIGHT", "EFFECT_DIRECTIONALLIGHT", "EFFECT_SPOTLIGHT", "EFFECT_ENVIRONMENTMAP", "EFFECT_PROJECTEDSHADOWMAP", "EFFECT_PROJECTEDLIGHTMAP", "EFFECT_FOGMAP", "USEMAPVALUE", "CMOBJECT", "'\\n'", "'0'", "$accept", "shader_file", "shader", "@1", "@2", "nsfshader_components_optional", "nsfshader_components_list", "nsfshader_component", "optional_string", "optional_multi_string", "optional_description", "optional_filename", "string_or_quote", "attribute_name", "range_color_optional", "range_point4_optional", "range_point3_optional", "range_point2_optional", "range_float_optional", "range_int_optional", "float_values_list", "float_values_16", "float_values_12", "float_values_9", "float_values_8", "float_values_color", "float_values_4", "float_values_3", "float_values_2", "float_values_1", "attribute_list_with_brackets", "@3", "global_attribute_list_with_brackets", "@4", "attribute_list", "attribute_value", "artist_conditional", "attribute_bool", "attribute_uint", "@5", "attribute_float", "@6", "attribute_point2", "@7", "attribute_point3", "@8", "attribute_point4", "@9", "attribute_matrix3", "@10", "attribute_transform", "@11", "attribute_color", "@12", "attribute_texture", "object_list_with_brackets", "@13", "object_list", "object_value", "object_effect_general_light", "object_effect_point_light", "object_effect_directional_light", "object_effect_spot_light", "object_effect_environment_map", "object_effect_projected_shadow_map", "object_effect_projected_light_map", "object_effect_fog_map", "packing_definition_definition", "@14", "packing_definition_declaration", "packing_definition_type", "packing_definition_parameter", "packing_definition_tesselator", "packing_definition_usage", "packing_definition_entries", "packing_definition_entry", "renderstate_list_with_brackets", "@15", "renderstate_list", "renderstate_entry_save_optional", "renderstate_entry_save", "renderstate_entry", "renderstate_attribute", "renderstate_string", "renderstate_bool", "renderstate_float", "renderstate_hex", "constantmap_list", "constantmap_entry", "constantmap_platform_block", "@16", "@17", "constantmap_entry_defined", "constantmap_entry_object", "constantmap_entry_attribute", "constantmap_entry_constant", "@18", "constantmap_entry_global", "@19", "constantmap_entry_operator", "operator_type", "operator_optional_transpose", "operator_optional_inverse", "vs_constantmap_with_brackets", "@20", "ps_constantmap_with_brackets", "@21", "userdefined_classname", "vertexshader_program_name", "vertexshader_program", "vertexshader_program_name_only", "vertexshader_program_bracket_contents_list", "vertexshader_program_bracket_content", "vertexshader_program_bracket", "@22", "@23", "vertexshader_program_entry", "pixelshader_program_name", "pixelshader_program", "pixelshader_program_name_only", "pixelshader_program_bracket_contents_list", "pixelshader_program_bracket_content", "pixelshader_program_bracket", "@24", "@25", "pixelshader_program_entry", "requirement_list_with_brackets", "@26", "requirement_list", "requirement_entry", "requirement_vsversion", "requirement_psversion", "requirement_userdefined", "requirement_platform", "requirement_platform_list", "requirement_remaining", "requirement_bonesperpartition", "requirement_usesbinormaltangent", "binormaltanget_method", "stage_or_sampler", "stage", "@27", "stage_entry_list_optional", "stage_entry_list", "stage_entry_or_texture", "stage_entry_save_optional", "stage_entry_save", "stage_entry", "stage_texture", "stage_texture_map_ndl", "stage_texture_map_ndl_decal", "stage_color_op", "stage_color_arg0", "stage_color_arg1", "stage_color_arg2", "stage_alpha_op", "stage_alpha_arg0", "stage_alpha_arg1", "stage_alpha_arg2", "stage_result_arg", "stage_constant_deprecated", "stage_bumpenvmat00", "stage_bumpenvmat01", "stage_bumpenvmat10", "stage_bumpenvmat11", "stage_bumpenvlscale", "stage_bumpenvloffset", "stage_texcoordindex", "stage_textransflags", "stage_texturetransformflags_count", "stage_texturetransformflags_optional_projection", "stage_texture_operation", "stage_texture_argument", "stage_texture_argument_modifiers_optional", "stage_texture_argument_modifier", "stage_texcoordindex_flags", "stage_textransmatrix", "stage_textransmatrix_assignment", "@28", "stage_textransmatrix_option", "sampler", "@29", "sampler_entry_list_optional", "sampler_entry_list", "sampler_entry_save_optional", "sampler_entry_save", "sampler_entry", "sampler_addressu", "sampler_addressv", "sampler_addressw", "sampler_bordercolor", "sampler_magfilter", "sampler_minfilter", "sampler_mipfilter", "sampler_mipmaplodbias", "sampler_maxmiplevel", "sampler_maxanisotropy", "sampler_srgbtexture", "sampler_elementindex", "sampler_dmapoffset", "sampler_alphakill_deprecated", "sampler_colorkeyop_deprecated", "sampler_colorsign_deprecated", "sampler_colorkeycolor_deprecated", "sampler_texture_address", "sampler_texture_filter", "sampler_texture_alphakill", "sampler_texture_colorkeyop", "pass_component_list", "pass_component", "pass", "@30", "implementation_component_list_optional", "implementation_component_list", "implementation_component", "implementation", "@31", "@32", "userdefineddata", "userdefineddata_list", "userdefineddata_block", "@33" }; // weak __int16 word_A303C0[584] = { 0, 289, 290, 290, 292, 293, 291, 291, 294, 294, 295, 295, 296, 296, 296, 296, 296, 296, 297, 297, 298, 298, 299, 299, 300, 300, 300, 301, 301, 302, 303, 303, 303, 304, 304, 305, 305, 306, 306, 307, 307, 308, 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, 310, 311, 312, 313, 314, 314, 315, 316, 317, 318, 320, 319, 322, 321, 323, 323, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 325, 325, 326, 328, 327, 330, 329, 332, 331, 334, 333, 336, 335, 338, 337, 340, 339, 342, 341, 343, 345, 344, 346, 346, 347, 347, 347, 347, 347, 347, 347, 347, 348, 349, 350, 351, 352, 353, 354, 355, 357, 356, 358, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 363, 363, 363, 364, 364, 364, 364, 364, 364, 366, 365, 367, 367, 368, 368, 369, 370, 370, 370, 370, 370, 370, 371, 372, 373, 374, 375, 375, 376, 376, 377, 377, 377, 377, 377, 377, 377, 379, 380, 378, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 382, 382, 383, 385, 384, 387, 386, 388, 389, 389, 389, 389, 389, 390, 390, 391, 391, 393, 392, 395, 394, 396, 397, 397, 397, 398, 398, 398, 399, 399, 399, 400, 400, 401, 401, 401, 401, 403, 404, 402, 405, 405, 406, 406, 406, 407, 407, 407, 408, 408, 408, 409, 409, 410, 410, 410, 412, 413, 411, 414, 414, 416, 415, 417, 417, 418, 418, 418, 418, 418, 418, 418, 418, 419, 420, 421, 422, 423, 423, 423, 423, 424, 425, 426, 427, 427, 427, 427, 427, 428, 428, 430, 429, 431, 431, 432, 432, 433, 433, 433, 434, 434, 435, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 437, 437, 437, 438, 438, 438, 438, 438, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 450, 451, 451, 452, 452, 453, 453, 454, 454, 455, 455, 456, 456, 457, 457, 457, 458, 458, 458, 458, 459, 459, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, 461, 461, 461, 462, 462, 463, 463, 463, 463, 464, 464, 464, 464, 464, 464, 464, 465, 466, 467, 466, 468, 468, 468, 468, 468, 468, 468, 468, 470, 469, 471, 471, 472, 472, 473, 473, 473, 474, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 476, 477, 478, 479, 479, 480, 481, 482, 483, 483, 484, 484, 485, 485, 486, 486, 487, 487, 488, 488, 489, 489, 490, 491, 491, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, 496, 496, 496, 496, 496, 497, 497, 498, 498, 498, 498, 498, 498, 498, 500, 499, 501, 501, 502, 502, 503, 503, 503, 503, 503, 503, 503, 503, 505, 506, 504, 507, 507, 507, 507, 508, 508, 510, 509, 0, 0, 0 }; // idb char byte_A30850[584] = { '\0', '\x02', '\x02', '\x01', '\0', '\0', '\b', '\x02', '\0', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x02', '\0', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x03', '\0', '\x14', '\x10', '\0', '\x14', '\0', '\x10', '\0', '\f', '\0', '\x04', '\0', '\x04', '\x04', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x1F', '\x17', '\x11', '\x0F', '\a', '\x05', '\a', '\x05', '\x03', '\x01', '\0', '\x05', '\0', '\x05', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x04', '\0', '\x06', '\0', '\x06', '\0', '\x06', '\0', '\x06', '\0', '\x06', '\0', '\x05', '\0', '\x05', '\0', '\x06', '\x05', '\0', '\x05', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\0', '\x06', '\x02', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x02', '\x02', '\x02', '\a', '\x04', '\x06', '\x03', '\0', '\x05', '\x02', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\0', '\b', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x04', '\x04', '\x04', '\x04', '\x05', '\0', '\x06', '\0', '\x05', '\t', '\x01', '\x01', '\x01', '\x01', '\x02', '\0', '\x01', '\0', '\x01', '\0', '\x05', '\0', '\x05', '\x03', '\x02', '\x02', '\x02', '\x03', '\x02', '\x01', '\x03', '\x03', '\x03', '\x01', '\x02', '\x01', '\x03', '\x03', '\x03', '\0', '\0', '\t', '\x01', '\x01', '\x02', '\x02', '\x02', '\x03', '\x02', '\x01', '\x03', '\x03', '\x03', '\x01', '\x02', '\x01', '\x03', '\x03', '\0', '\0', '\t', '\x01', '\x01', '\0', '\x05', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\x03', '\x03', '\a', '\x05', '\x03', '\x01', '\x03', '\x03', '\x03', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\0', '\a', '\0', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\x03', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x04', '\x04', '\x04', '\x03', '\x03', '\x01', '\x01', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x02', '\x02', '\x02', '\x02', '\x02', '\x02', '\x02', '\0', '\x01', '\x02', '\x02', '\x01', '\x01', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\0', '\x04', '\0', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\0', '\a', '\0', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x03', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x02', '\x01', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x02', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\x06', '\0', '\x01', '\x02', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\x01', '\0', '\0', '\b', '\x03', '\x03', '\x03', '\x03', '\x01', '\x02', '\0', '\x06', '\0', '\0', '\0' }; // idb __int16 word_A30A98[] = { 0 }; // weak __int16 word_A3108E[513] = { 0, 0, 0, 254, 247, 317, 0, 0, 0, 0, 273, 0, 271, 0, 0, 0, 293, 0, 291, 365, 366, 367, 368, 369, 370, 0, 364, 362, 363, 0, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 372, 439, 439, 439, 439, 439, 439, 439, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 0, 446, 447, 448, 449, 450, 0, 398, 399, 400, 401, 402, 397, 403, 0, 454, 452, 0, 519, 520, 521, 522, 523, 524, 525, 492, 493, 494, 495, 496, 0, 527, 528, 529, 530, 531, 532, 534, 535, 533, 536, 537, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 0, 539, 540, 513, 512, 0, 542, 543, 544, 545, 514, 515, 516, 517, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 272, 0, 0, 0, 298, 292, 371, 431, 443, 444, 432, 440, 433, 434, 435, 436, 437, 438, 451, 394, 395, 404, 396, 0, 457, 458, 459, 460, 461, 462, 0, 0, 526, 538, 541, 546, 38, 0, 0, 0, 0, 0, 0, 0, 268, 269, 270, 274, 275, 276, 288, 289, 290, 294, 295, 441, 442, 463, 453, 0, 0, 0, 0, 0, 0, 0, 55, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 36, 0, 54, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 31, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 65535, 3, 4, 10, 15, 22, 23, 24, 281, 12, 13, 262, 130, 470, 301, 296, 293, 290, 287, 285, 219, 220, 221, 222, 223, 259, 224, 225, 226, 227, 25, 39, 26, 40, 55, 56, 146, 57, 58, 90, 59, 91, 60, 92, 61, 93, 62, 94, 63, 95, 64, 96, 65, 97, 66, 27, 44, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 28, 68, 235, 214, 125, 272, 317, 126, 127, 236, 319, 343, 344, 345, 346, 347, 348, 349, 350, 351, 359, 360, 361, 406, 584, 362, 363, 364, 365, 413, 366, 414, 367, 591, 767, 709, 237, 320, 238, 321, 239, 437, 438, 773, 774, 775, 439, 543, 711, 440, 441, 442, 779, 780, 781, 443, 544, 712, 444, 240, 322, 377, 378, 379, 380, 381, 382, 492, 383, 384, 385, 499, 445, 446, 595, 632, 633, 634, 635, 636, 637, 638, 790, 791, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 861, 955, 819, 827, 943, 944, 854, 657, 864, 964, 963, 447, 596, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 873, 890, 909, 915, 448, 449, 241, 386, 242, 243, 244, 29, 70, 166, 131, 132, 30, 69, 0, 0 }; // idb __int16 word_A31490[763] = { 30, 65290, 32, 36, 64963, 64963, 49, 64963, 64963, 64963, 62, 64963, 80, 64963, 64963, 65519, 97, 113, 123, 126, 162, 159, 218, 65519, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 221, 298, 319, 64963, 64963, 64963, 536, 536, 64963, 64963, 64963, 152, 314, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 332, 408, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 564, 338, 88, 62, 421, 448, 549, 573, 577, 626, 627, 628, 65535, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 170, 629, 630, 631, 632, 633, 634, 636, 637, 170, 64963, 64963, 64963, 365, 639, 644, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 648, 650, 563, 64963, 64963, 64963, 660, 88, 669, 64963, 652, 653, 654, 655, 656, 657, 658, 659, 64963, 64963, 64963, 64963, 661, 170, 170, 170, 170, 170, 170, 170, 170, 662, 64963, 64963, 64963, 663, 466, 64963, 64963, 212, 64963, 64963, 65504, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 665, 667, 668, 670, 671, 672, 673, 674, 61, 466, 397, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 486, 676, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 675, 692, 693, 695, 696, 688, 679, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 698, 65504, 64963, 64963, 697, 699, 690, 700, 701, 702, 703, 704, 705, 64963, 706, 64963, 707, 708, 64963, 64963, 64963, 486, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 312, 685, 64963, 64963, 64963, 64963, 64963, 88, 64963, 709, 64963, 64963, 198, 64963, 710, 64963, 711, 712, 64963, 713, 716, 64963, 714, 717, 64963, 715, 718, 719, 720, 64963, 312, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 687, 723, 44, 18, 18, 301, 64963, 64963, 721, 689, 722, 64963, 724, 727, 725, 730, 726, 734, 735, 736, 731, 729, 64963, 732, 428, 741, 37, 64963, 64963, 694, 64963, 64963, 64963, 64963, 64963, 64963, 51, 88, 64963, 64963, 733, 737, 1, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 6, 439, 742, 744, 745, 746, 748, 749, 750, 33, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 65463, 755, 756, 757, 753, 747, 758, 752, 760, 754, 759, 761, 762, 64963, 763, 64963, 154, 64963, 64963, 64963, 589, 119, 193, 233, 317, 441, 764, 88, 88, 765, 766, 64963, 64963, 64963, 64963, 767, 743, 768, 769, 770, 774, 12, 64963, 64963, 42, 58, 775, 776, 64963, 64963, 64963, 777, 64963, 64963, 64963, 778, 64963, 64963, 64963, 64963, 64963, 64963, 64, 64963, 64963, 64963, 64963, 64963, 781, 64963, 782, 771, 783, 785, 791, 792, 786, 787, 788, 64963, 64963, 64963, 64963, 64963, 64963, 797, 790, 793, 794, 795, 796, 798, 799, 800, 801, 802, 803, 804, 805, 806, 189, 64963, 64963, 64963, 64963, 772, 64963, 64963, 442, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 679, 679, 807, 808, 64963, 64963, 784, 815, 811, 819, 813, 814, 816, 822, 824, 779, 770, 817, 818, 820, 821, 823, 825, 826, 827, 64963, 64963, 828, 829, 830, 831, 64963, 64963, 832, 64963, 591, 592, 809, 810, 64963, 64963, 773, 835, 64963, 836, 839, 844, 64963, 838, 840, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 841, 64963, 91, 834, 847, 850, 64963, 64963, 843, 812, 851, 845, 846, 40, 854, 18, 64963, 447, 64963, 64963, 64963, 64963, 848, 849, 770, 770, 322, 2, 855, 864, 852, 860, 861, 870, 856, 857, 13, 64963, 560, 867, 64963, 64963, 484, 868, 869, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 897, 342, 64963, 64963, 64963, 751, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 485, 890, 891, 892, 893, 894, 895, 896, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 64963, 916, 68, 64963, 64963, 853, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 859, 889, 837, 908, 909, 910, 915, 911, 64963, 64963, 599, 912, 217, 341, 64963, 65534, 165, 369, 369, 369, 165, 369, 369, 369, 369, 913, 93, 130, 140, 157, 180, 187, 144, 237, 168, 64963, 64963, 64963, 64963, 16, 16, 16, 190, 0, 0, 0, 48, 77, 78, 135, 137, 138, 19, 21, 3, 204, 64963, 64963, 64963, 917, 914, 920, 918, 922 }; // idb __int16 word_A31A86[513] = { 923, 921, 919, 64963, 64963, 64963, 925, 926, 928, 929, 64963, 938, 217, 931, 932, 933, 64963, 942, 341, 64963, 64963, 64963, 64963, 64963, 64963, 927, 64963, 64963, 64963, 497, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 227, 227, 227, 227, 227, 227, 227, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 502, 64963, 64963, 64963, 64963, 64963, 65517, 64963, 64963, 64963, 64963, 64963, 64963, 666, 9, 64963, 64963, 664, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 677, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 678, 64963, 64963, 64963, 64963, 680, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 939, 930, 934, 935, 936, 937, 940, 945, 56, 944, 946, 943, 64963, 64963, 74, 947, 948, 64963, 64963, 64963, 64963, 738, 728, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 686, 64963, 64963, 64963, 64963, 64963, 64963, 950, 20, 64963, 64963, 64963, 64963, 64963, 960, 961, 962, 963, 964, 965, 941, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 673, 959, 966, 967, 968, 969, 970, 971, 64963, 953, 972, 978, 979, 974, 980, 975, 973, 976, 977, 981, 986, 982, 985, 64963, 987, 64963, 990, 64963, 991, 988, 989, 992, 993, 994, 999, 997, 1000, 995, 1003, 996, 1006, 1004, 64963, 1005, 64963, 1001, 1002, 1007, 1007, 1008, 1010, 1009, 1011, 1012, 1013, 1014, 64963, 0, 0, 0, 64963, 64963, 951, 64963, 64963, 64963, 64963, 998, 89, 64963, 865, 64963, 65480, 65454, 64963, 64963, 64963, 64963, 64963, 64963, 355, 65354, 64963, 858, 64963, 64963, 862, 866, 863, 64963, 64963, 64963, 64963, 64963, 1015, 17, 309, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 954, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 842, 64963, 780, 651, 64963, 924, 65178, 64963, 64963, 641, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 65240, 65217, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 65182, 64963, 65185, 64963, 64963, 64963, 64963, 64963, 210, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 220, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 681, 64963, 64963, 64963, 64963, 65038, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 396, 64963, 64963, 64963, 64964, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 313, 65145, 65348, 64963, 64963, 64963, 64963, 64963, 71, 64963, 64963, 64963, 64963, 359, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 64963, 65436, 65434, 64963, 64963, 64963, 590, 64963, 64963, 64963, 64963, 833, 64963, 64963, 64963, 64963, 949, 65372, 64963, 0, 0 }; // idb __int16 word_A31E88[1084] = { 257, 878, 245, 658, 952, 142, 352, 417, 65070, 464, 956, 352, 419, 494, 228, 16, 17, 865, 352, 707, 905, 956, 910, 352, 676, 368, 559, 916, 434, 18, 464, 1, 435, 65080, 369, 436, 7, 1, 341, 428, 418, 5, 65080, 403, 229, 341, 500, 501, 602, 418, 230, 430, 231, 431, 9, 603, 6, 370, 2, 464, 977, 342, 504, 505, 2, 260, 502, 503, 342, 658, 512, 893, 100, 19, 65069, 128, 129, 432, 983, 245, 978, 979, 506, 507, 100, 229, 261, 11, 464, 464, 434, 230, 586, 231, 435, 609, 610, 436, 984, 985, 895, 897, 31, 232, 464, 14, 676, 218, 587, 588, 589, 590, 128, 129, 19, 836, 233, 234, 32, 353, 354, 355, 356, 357, 353, 354, 355, 356, 357, 19, 20, 353, 354, 355, 356, 357, 353, 354, 355, 356, 357, 464, 472, 128, 129, 848, 464, 33, 464, 464, 34, 464, 838, 612, 495, 496, 497, 498, 899, 953, 901, 903, 840, 433, 36, 464, 792, 65091, 464, 371, 372, 373, 374, 375, 376, 465, 466, 467, 468, 842, 469, 229, 407, 408, 409, 410, 35, 230, 430, 231, 431, 464, 957, 958, 959, 960, 961, 962, 464, 144, 145, 464, 844, 957, 958, 959, 960, 961, 962, 846, 19, 876, 539, 540, 432, 464, 474, 128, 129, 612, 325, 326, 450, 323, 37, 918, 41, 782, 783, 784, 785, 786, 787, 788, 215, 216, 128, 129, 217, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 476, 128, 129, 21, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 866, 867, 868, 869, 870, 871, 71, 72, 73, 74, 75, 76, 77, 78, 450, 889, 418, 358, 605, 906, 907, 917, 358, 911, 912, 913, 914, 411, 412, 358, 433, 872, 369, 42, 358, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 65091, 611, 43, 370, 828, 829, 65203, 831, 832, 833, 834, 849, 850, 851, 852, 853, 89, 102, 478, 128, 129, 611, 769, 770, 771, 772, 65202, 862, 863, 473, 475, 477, 479, 481, 98, 483, 484, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 155, 855, 856, 857, 858, 859, 860, 99, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 71, 72, 73, 74, 75, 76, 77, 78, 371, 372, 373, 374, 375, 376, 45, 134, 46, 47, 48, 49, 50, 51, 52, 53, 54, 941, 942, 176, 177, 178, 179, 180, 181, 182, 183, 480, 128, 129, 186, 776, 777, 778, 135, 65415, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 65415, 65415, 65415, 65415, 65415, 65415, 65415, 161, 101, 45, 136, 46, 47, 48, 49, 50, 51, 52, 53, 54, 265, 266, 267, 268, 269, 270, 271, 820, 821, 822, 823, 824, 825, 826, 137, 545, 546, 45, 138, 46, 47, 48, 49, 50, 51, 52, 53, 54, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 789, 945, 946, 947, 948, 949, 950, 874, 875, 891, 892, 837, 839, 841, 843, 845, 847, 139, 140, 141, 156, 147, 148, 149, 150, 151, 152, 877, 153, 154, 157, 894, 896, 898, 900, 902, 904, 908, 158, 159, 919, 160, 163, 165, 167, 168, 169, 170, 171, 172, 173, 174, 264, 184, 185, 175, 246, 247, 248, 273, 250, 252, 254, 256, 258, 275, 276, 274, 277, 278, 279, 280, 282, 288, 284, 318, 286, 289, 339, 292, 388, 295, 324, 401, 291, 300, 294, 329, 297, 298, 299, 331, 333, 405, 420, 337, 471, 542, 573, 574, 327, 328, 606, 330, 332, 334, 340, 708, 335, 336, 391, 387, 389, 393, 390, 392, 394, 395, 396, 397, 399, 398, 400, 402, 421, 415, 422, 423, 424, 416, 425, 426, 427, 451, 452, 453, 454, 455, 488, 713, 737, 456, 457, 458, 459, 462, 463, 766, 577, 460, 736, 461, 940, 541, 516, 482, 485, 951, 486, 558, 549, 487, 491, 489, 490, 493, 508, 509, 518, 510, 511, 514, 515, 517, 519, 520, 521, 522, 1000, 524, 523, 525, 575, 576, 526, 527, 528, 529, 598, 530, 531, 532, 533, 534, 535, 536, 537, 538, 550, 547, 548, 551, 552, 553, 554, 556, 555, 557, 560, 561, 954, 562, 563, 760, 564, 592, 565, 566, 567, 568, 569, 570, 580, 571, 572, 578, 579, 581, 582, 593, 583, 215, 594, 597, 599, 600, 601, 604, 699, 700, 607, 608, 701, 702, 703, 704, 705, 706, 710, 758, 714, 715, 757, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 738, 739, 740, 741, 742, 743, 744, 759, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 764, 585, 920, 765, 922, 926, 921, 761, 762, 763, 923, 835, 133, 768, 924, 925, 928, 929, 927, 930, 931, 932, 934, 935, 936, 937, 969, 939, 965, 970, 338, 8, 989, 971, 972, 973, 974, 976, 1008, 975, 999, 966, 967, 988, 968, 980, 982, 981, 986, 987, 990, 991, 993, 994, 995, 996, 997, 998, 1001, 1012, 1015, 404, 933, 1007, 1009, 1002, 1003, 1004, 1005, 1006, 1010, 1011, 1013, 1019, 1014, 1016, 1017, 1021, 938, 1022, 1018, 1020, 1023, 1024, 1030, 1032, 1029, 1025, 1026, 1031, 1034, 1027, 1028, 1036, 1033, 1035, 1037, 1038, 38, 1041, 1039, 1040, 1043, 1045, 263, 1047, 735, 1042, 1044, 830, 143, 1046, 992, 1048, 756, 513, 255, 0, 249, 253, 302, 0, 251, 0, 0, 0, 0, 162, 0, 0, 0, 0, 67, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 164, 0, 0, 0 }; // idb __int16 word_A32700[] = { 182 }; // weak __int16 word_A32F78[1050] = { 0, 1, 28, 290, 291, 287, 24, 0, 291, 5, 292, 25, 298, 299, 25, 293, 32, 33, 46, 146, 147, 276, 294, 295, 296, 319, 321, 344, 356, 504, 509, 5, 5, 24, 24, 24, 5, 6, 296, 320, 322, 5, 5, 5, 345, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 323, 324, 326, 327, 329, 331, 333, 335, 337, 339, 341, 343, 323, 357, 510, 505, 277, 278, 279, 280, 281, 282, 283, 284, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 24, 328, 330, 332, 334, 336, 338, 340, 342, 24, 6, 324, 6, 1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 360, 363, 364, 24, 25, 301, 507, 508, 299, 23, 23, 23, 23, 23, 23, 23, 23, 6, 347, 29, 30, 325, 24, 24, 24, 24, 24, 24, 24, 24, 325, 287, 23, 26, 23, 23, 6, 364, 14, 508, 6, 506, 24, 24, 24, 24, 24, 24, 24, 24, 26, 325, 325, 325, 325, 325, 325, 325, 325, 23, 23, 1, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 359, 22, 23, 26, 301, 309, 310, 311, 312, 313, 315, 316, 317, 318, 46, 117, 123, 125, 135, 148, 149, 358, 365, 392, 394, 396, 415, 499, 501, 502, 503, 509, 23, 22, 22, 317, 22, 316, 22, 315, 22, 312, 22, 310, 22, 314, 4, 25, 300, 359, 287, 96, 97, 98, 99, 100, 101, 102, 361, 15, 24, 5, 5, 5, 5, 14, 24, 297, 6, 503, 9, 308, 9, 307, 15, 9, 306, 15, 9, 305, 15, 9, 304, 15, 15, 15, 9, 303, 361, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 362, 22, 366, 393, 395, 416, 301, 5, 22, 23, 22, 22, 7, 22, 7, 22, 7, 22, 22, 22, 7, 362, 23, 15, 1, 24, 367, 368, 369, 370, 371, 372, 373, 374, 375, 5, 118, 119, 120, 121, 122, 286, 376, 377, 378, 381, 382, 383, 384, 386, 388, 376, 1, 24, 136, 137, 138, 139, 140, 141, 417, 418, 419, 420, 421, 422, 424, 425, 426, 500, 22, 23, 22, 22, 15, 22, 15, 22, 15, 15, 15, 22, 23, 22, 287, 14, 6, 368, 31, 379, 131, 132, 133, 134, 301, 301, 385, 387, 24, 24, 6, 377, 6, 287, 14, 14, 14, 14, 14, 14, 14, 6, 418, 124, 126, 150, 236, 365, 392, 394, 397, 398, 402, 405, 406, 407, 411, 414, 428, 429, 469, 497, 498, 509, 10, 10, 10, 15, 22, 15, 22, 15, 22, 22, 22, 15, 15, 11, 21, 22, 23, 24, 26, 302, 139, 23, 301, 23, 301, 23, 301, 23, 301, 23, 301, 23, 301, 301, 23, 24, 26, 27, 27, 27, 24, 423, 23, 1, 142, 143, 144, 145, 427, 4, 5, 24, 25, 4, 5, 24, 25, 23, 23, 24, 24, 6, 498, 22, 22, 15, 22, 15, 15, 15, 22, 22, 24, 14, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 13, 287, 403, 412, 297, 297, 24, 24, 8, 15, 22, 15, 22, 22, 22, 15, 15, 12, 423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 139, 139, 5, 5, 7, 22, 22, 15, 15, 22, 22, 380, 309, 1, 17, 18, 19, 20, 389, 13, 14, 14, 430, 470, 22, 8, 15, 22, 22, 8, 15, 15, 376, 287, 24, 24, 423, 423, 1, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 431, 432, 433, 434, 435, 436, 437, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 465, 1, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 437, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 15, 7, 22, 15, 15, 7, 22, 22, 6, 179, 391, 13, 404, 413, 287, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 6, 433, 31, 287, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 6, 473, 31, 22, 22, 8, 22, 22, 22, 8, 15, 180, 390, 24, 127, 128, 129, 130, 399, 400, 401, 127, 128, 129, 408, 409, 410, 229, 230, 231, 232, 233, 234, 235, 302, 438, 439, 1, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 460, 220, 221, 222, 223, 224, 225, 226, 461, 461, 461, 460, 461, 461, 461, 461, 21, 22, 302, 22, 302, 22, 302, 22, 302, 22, 302, 22, 302, 1, 189, 190, 191, 192, 193, 464, 171, 172, 173, 174, 175, 176, 458, 181, 182, 466, 1, 254, 255, 256, 257, 258, 259, 285, 493, 493, 493, 21, 302, 1, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 285, 494, 494, 494, 23, 302, 23, 302, 23, 302, 23, 302, 23, 302, 23, 302, 1, 270, 271, 302, 495, 1, 272, 273, 274, 275, 496, 24, 288, 21, 302, 8, 15, 7, 15, 15, 15, 7, 22, 14, 14, 14, 14, 6, 400, 14, 14, 14, 6, 409, 23, 287, 227, 228, 462, 463, 462, 462, 462, 462, 462, 462, 287, 23, 178, 176, 459, 1, 183, 184, 185, 186, 187, 188, 468, 467, 287, 287, 287, 287, 10, 22, 22, 22, 22, 22, 22, 15, 4, 24, 25, 24, 24, 26, 4, 24, 25, 24, 24, 228, 227, 287, 24, 468, 15, 15, 15, 15, 15, 15, 22, 310, 22, 22, 22, 22, 22, 22, 15, 8, 15, 15, 15, 8, 15, 22, 10, 22, 22, 22, 10, 22, 15, 15, 15, 15, 22, 22, 22, 22, 15, 8, 15, 8, 22, 10, 22, 10, 15, 15, 22, 22, 15, 22, 15, 22, 15, 22, 15, 22, 0 }; // idb void *NiTListBase,NSFParsedShader *>::`vftable' = &sub_8BA610; // weak void *NiTPointerListBase,NSFParsedShader *>::`vftable' = &sub_8BA880; // weak __int16 word_A35D78[1932] = { 0, 0, 0, 309, 308, 1, 303, 304, 308, 10, 11, 20, 22, 18, 23, 21, 2, 2, 14, 17, 15, 12, 13, 19, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 8, 16, 9, 1, 0, 307, 2, 7, 6, 0, 3, 0, 2, 305, 305, 306, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 3, 306, 3, 306, 306, 0, 4, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 3, 0, 0, 3, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 139, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 112, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 301, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 5, 305, 305, 305, 3, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 302, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 140, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 110, 115, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 111, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 172, 305, 305, 305, 305, 305, 305, 305, 305, 127, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 107, 305, 305, 305, 305, 305, 305, 305, 305, 286, 305, 305, 305, 305, 305, 305, 231, 305, 305, 305, 305, 305, 305, 305, 305, 305, 219, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 194, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 224, 229, 225, 305, 305, 305, 228, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 294, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 264, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 214, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 138, 305, 305, 305, 275, 277, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 24, 230, 305, 227, 305, 305, 26, 305, 305, 36, 305, 305, 305, 305, 305, 33, 305, 305, 305, 305, 85, 305, 305, 305, 305, 305, 305, 305, 305, 305, 84, 305, 305, 305, 305, 305, 93, 305, 305, 106, 108, 305, 305, 100, 305, 305, 305, 305, 169, 305, 285, 292, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 255, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 173, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 284, 291, 305, 305, 305, 305, 305, 305, 305, 305, 305, 113, 305, 305, 305, 305, 305, 272, 305, 305, 305, 305, 305, 305, 305, 305, 287, 305, 305, 305, 226, 25, 305, 305, 305, 305, 38, 305, 305, 32, 305, 305, 305, 305, 305, 305, 52, 53, 54, 55, 305, 305, 305, 305, 305, 305, 73, 74, 75, 76, 58, 59, 60, 61, 62, 305, 305, 305, 305, 305, 305, 305, 305, 305, 99, 305, 109, 305, 305, 305, 305, 305, 305, 305, 305, 289, 305, 305, 215, 216, 305, 305, 220, 221, 305, 305, 305, 249, 305, 266, 305, 305, 305, 305, 305, 270, 269, 305, 305, 305, 305, 256, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 116, 305, 305, 305, 305, 305, 305, 305, 118, 305, 280, 281, 305, 305, 274, 276, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 35, 305, 48, 305, 305, 305, 49, 305, 305, 305, 77, 305, 305, 305, 305, 305, 305, 64, 66, 68, 70, 78, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 102, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 218, 305, 251, 305, 265, 305, 305, 305, 268, 305, 305, 305, 305, 257, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 188, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 146, 305, 305, 142, 305, 305, 305, 305, 141, 305, 305, 305, 305, 305, 305, 164, 165, 166, 167, 305, 305, 305, 305, 170, 171, 305, 293, 305, 125, 119, 305, 305, 305, 305, 305, 305, 305, 273, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 298, 305, 305, 50, 305, 305, 305, 305, 28, 37, 305, 56, 305, 86, 305, 305, 305, 305, 72, 305, 80, 82, 305, 305, 305, 305, 103, 305, 305, 96, 305, 101, 305, 271, 290, 288, 305, 305, 305, 305, 252, 305, 250, 305, 182, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 191, 305, 305, 305, 197, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 151, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 163, 305, 305, 174, 305, 305, 305, 120, 121, 122, 117, 305, 305, 305, 305, 305, 305, 135, 305, 305, 305, 305, 305, 305, 300, 299, 305, 305, 305, 305, 51, 34, 47, 39, 40, 41, 42, 43, 44, 45, 46, 87, 88, 305, 305, 305, 305, 305, 305, 305, 94, 305, 305, 305, 105, 305, 305, 305, 305, 223, 217, 305, 305, 305, 187, 267, 305, 305, 305, 305, 305, 261, 195, 198, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 147, 148, 149, 305, 305, 305, 143, 144, 145, 150, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 123, 126, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 137, 297, 305, 305, 305, 305, 63, 65, 67, 69, 79, 305, 57, 92, 89, 305, 305, 305, 305, 104, 279, 305, 305, 305, 305, 305, 305, 262, 305, 305, 305, 305, 305, 305, 305, 305, 210, 305, 192, 193, 305, 305, 305, 305, 305, 189, 190, 232, 233, 234, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 168, 175, 305, 278, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 29, 71, 81, 83, 305, 90, 91, 305, 97, 282, 283, 305, 305, 305, 305, 305, 305, 305, 305, 196, 305, 305, 305, 305, 305, 212, 305, 305, 305, 213, 205, 245, 305, 305, 305, 247, 305, 305, 236, 305, 305, 237, 238, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 136, 124, 305, 305, 305, 305, 305, 305, 305, 131, 305, 27, 31, 30, 305, 98, 305, 305, 253, 305, 305, 305, 258, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 246, 244, 305, 305, 305, 305, 305, 305, 305, 152, 153, 154, 155, 305, 305, 305, 305, 305, 305, 305, 176, 305, 305, 305, 295, 305, 305, 305, 129, 305, 305, 114, 305, 222, 254, 305, 305, 305, 305, 305, 260, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 235, 305, 305, 305, 240, 305, 242, 305, 156, 158, 159, 305, 305, 305, 181, 305, 305, 178, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 263, 259, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 243, 305, 305, 157, 161, 305, 179, 180, 305, 305, 305, 305, 128, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 248, 241, 239, 305, 177, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 202, 305, 305, 305, 305, 305, 305, 305, 305, 296, 305, 132, 305, 305, 305, 183, 305, 305, 204, 199, 305, 200, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 185, 201, 305, 305, 305, 305, 305, 305, 305, 305, 130, 305, 305, 95, 184, 305, 203, 211, 305, 305, 305, 305, 305, 305, 134, 305, 305, 305, 305, 305, 305, 305, 305, 133, 305, 305, 305, 305, 305, 160, 305, 305, 206, 207, 305, 305, 162, 305, 305, 305, 305, 305, 305, 305, 208, 209, 305, 186, 0 }; // idb char byte_A36C90[] = { '\0' }; // weak char byte_A37090[] = { '\0' }; // weak __int16 word_A37178[1940] = { 0, 0, 0, 196, 6641, 190, 6641, 6641, 152, 6641, 6641, 6641, 0, 6641, 0, 50, 52, 93, 6641, 6641, 6641, 6641, 6641, 47, 49, 79, 77, 63, 86, 65, 89, 111, 113, 119, 70, 124, 126, 129, 166, 72, 203, 6641, 6641, 6641, 148, 138, 6641, 123, 6641, 6641, 117, 237, 114, 0, 67, 259, 0, 121, 132, 134, 139, 74, 161, 148, 150, 171, 173, 175, 188, 178, 181, 192, 190, 222, 235, 255, 232, 226, 272, 252, 283, 289, 293, 228, 296, 299, 302, 307, 316, 322, 332, 330, 230, 128, 324, 88, 224, 366, 0, 391, 80, 0, 335, 343, 350, 337, 354, 385, 363, 378, 382, 391, 341, 406, 410, 413, 418, 420, 422, 424, 426, 428, 432, 438, 440, 444, 446, 457, 464, 466, 470, 473, 477, 481, 483, 485, 488, 491, 499, 493, 495, 504, 506, 521, 525, 527, 529, 531, 538, 544, 546, 548, 551, 584, 555, 561, 575, 63, 197, 312, 438, 565, 572, 569, 577, 598, 601, 604, 607, 610, 613, 615, 617, 619, 622, 625, 629, 641, 643, 647, 654, 651, 656, 558, 659, 661, 698, 690, 665, 717, 667, 679, 682, 692, 695, 687, 685, 704, 714, 701, 740, 744, 707, 750, 731, 755, 757, 763, 766, 768, 773, 777, 775, 789, 813, 780, 797, 800, 803, 810, 818, 823, 816, 828, 834, 849, 851, 0, 825, 857, 859, 0, 861, 863, 867, 869, 872, 875, 877, 879, 884, 890, 882, 894, 898, 900, 902, 910, 916, 918, 922, 924, 926, 928, 935, 930, 939, 941, 948, 950, 953, 961, 966, 963, 968, 973, 979, 976, 985, 982, 994, 1000, 1012, 1014, 1019, 1022, 1026, 1030, 1028, 1037, 1039, 1041, 1043, 1045, 1052, 1061, 1055, 1065, 1071, 1077, 1081, 1083, 1086, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 1107, 1112, 1116, 1122, 1125, 1118, 1129, 1131, 1136, 1146, 1149, 1179, 1151, 1154, 1161, 1163, 1157, 1166, 1168, 1172, 1174, 1197, 1176, 1214, 1216, 1218, 1220, 1222, 1226, 1228, 1231, 1240, 1233, 1252, 1254, 1242, 1235, 1259, 1266, 1268, 1270, 1276, 1278, 1280, 1282, 1285, 1288, 1290, 1300, 1292, 1295, 1302, 1306, 1309, 1314, 1317, 1323, 1328, 1330, 1339, 1336, 1341, 1343, 1345, 1349, 1352, 1354, 1356, 1358, 1361, 1363, 1366, 1381, 1383, 1387, 1390, 1392, 1394, 1396, 1398, 1400, 1403, 1405, 1409, 1413, 1419, 1425, 1427, 1429, 1432, 1435, 1438, 1440, 1442, 1447, 1452, 1454, 1457, 1463, 1467, 1469, 1475, 1473, 1477, 1482, 1488, 1484, 1490, 1494, 1496, 1499, 1505, 1514, 1517, 1520, 1522, 1524, 1533, 1526, 1530, 1536, 1541, 1546, 1550, 1556, 1561, 1563, 1571, 1573, 1576, 1578, 1568, 1582, 1589, 1600, 1606, 1608, 1611, 1613, 1615, 1617, 1621, 1624, 1626, 1635, 1629, 1633, 1637, 1669, 1639, 1645, 1647, 1658, 1660, 1662, 1672, 1665, 1678, 1680, 1691, 1695, 1701, 1707, 1709, 1712, 1714, 1717, 1722, 1752, 1725, 1727, 1733, 1735, 1737, 1739, 1741, 1743, 1758, 1778, 1782, 1785, 1790, 1792, 1794, 1756, 1800, 1802, 1811, 1813, 1821, 1818, 1825, 1827, 1762, 1829, 1833, 1837, 1839, 1843, 1846, 1850, 1855, 1857, 1860, 1863, 1867, 1874, 1878, 1880, 1883, 1891, 1894, 1897, 1903, 1905, 1912, 1907, 1914, 1916, 1920, 1918, 1923, 1927, 1931, 1934, 1936, 1944, 1950, 1954, 1959, 1961, 1970, 1972, 1963, 1974, 1976, 1980, 1978, 1983, 1987, 1990, 1993, 1999, 2002, 2004, 2006, 2014, 2017, 2024, 2026, 2028, 2030, 2032, 2038, 2036, 2040, 2044, 2049, 2052, 2055, 2046, 2058, 2060, 2071, 2073, 2082, 2084, 2086, 2089, 2091, 2093, 2099, 2106, 2101, 2111, 2113, 2115, 2117, 2122, 2119, 2124, 2137, 2140, 2142, 2146, 2152, 2154, 2157, 2159, 2161, 2164, 2168, 2178, 2172, 2180, 2182, 2186, 2197, 2199, 2201, 2207, 2209, 2211, 2215, 2218, 2221, 2223, 2226, 2230, 2233, 2228, 2239, 2242, 2249, 2251, 2259, 2261, 2265, 2269, 2271, 2273, 2275, 2278, 2280, 2282, 2286, 2293, 2300, 2306, 2308, 2313, 2315, 2319, 2323, 2328, 2333, 2337, 2339, 2341, 2343, 2348, 2345, 2350, 2352, 2356, 2360, 2354, 2365, 2368, 2371, 2378, 2381, 2383, 2389, 2391, 2395, 2397, 2400, 2404, 2406, 2408, 2411, 2414, 2417, 2421, 2426, 2433, 2429, 2435, 2439, 2444, 2447, 2451, 2455, 2457, 2464, 2470, 2461, 2473, 2477, 2486, 2488, 2490, 2496, 2499, 2501, 2503, 2508, 2510, 2512, 2514, 2520, 2522, 2531, 2536, 2538, 2547, 2549, 2551, 2553, 2555, 2559, 2565, 2567, 2572, 2574, 2579, 2582, 2584, 2586, 2588, 2590, 2596, 2598, 2600, 2602, 2607, 2610, 2612, 2623, 2626, 2631, 2635, 2628, 2639, 2641, 2643, 2647, 2650, 2652, 2654, 2661, 2664, 2666, 2668, 2677, 2672, 2683, 2685, 2687, 2689, 2694, 2699, 2696, 2707, 2709, 2711, 2713, 2715, 2717, 2728, 2719, 2734, 2730, 2737, 2739, 2741, 2744, 2748, 2759, 2763, 2771, 2773, 2775, 2777, 2780, 2783, 2786, 2788, 2793, 2796, 2798, 2800, 2803, 2813, 2821, 2823, 2827, 2832, 2834, 2836, 2838, 2841, 2847, 2844, 2849, 2851, 2853, 2857, 2859, 2866, 2870, 2873, 2879, 2881, 2884, 2890, 2893, 2895, 2897, 2899, 2901, 2908, 2914, 2912, 2917, 2919, 2921, 2927, 2929, 2932, 2934, 2940, 2946, 2949, 2951, 2953, 2958, 2960, 2962, 2969, 2964, 2972, 2974, 2976, 2978, 2980, 2982, 2989, 2991, 2993, 3010, 2996, 3005, 3002, 3023, 3027, 3029, 3039, 3048, 3036, 3050, 3052, 3055, 3059, 3061, 3063, 3065, 3068, 3070, 3072, 3074, 3078, 3080, 3084, 3087, 3091, 3096, 3098, 3100, 3109, 3111, 3113, 3115, 3118, 3120, 3122, 3125, 3128, 3131, 3134, 3139, 3142, 3150, 3147, 3152, 3160, 3162, 3165, 3173, 3169, 3175, 3178, 3182, 3184, 3187, 3193, 3198, 3205, 3209, 3211, 3213, 3216, 3218, 3222, 3224, 3226, 3232, 3234, 3238, 3240, 3243, 3247, 3249, 3252, 3261, 3263, 3268, 3272, 3275, 3279, 3282, 3286, 3288, 3290, 3292, 3294, 3296, 3300, 3306, 3304, 3312, 3315, 3326, 3330, 3333, 3336, 3338, 3340, 3344, 3350, 3356, 3347, 3354, 3358, 3360, 3362, 3368, 3370, 3382, 3384, 3387, 3392, 3394, 3398, 3400, 3402, 3406, 3408, 3410, 3412, 3414, 3416, 3420, 3424, 3429, 3426, 3434, 3438, 3443, 3447, 3451, 3454, 3457, 3460, 3462, 3464, 3466, 3469, 3471, 3476, 3480, 3490, 3486, 3495, 3497, 3500, 3502, 3508, 3511, 3513, 3521, 3524, 3530, 3535, 3539, 3541, 3544, 3548, 3546, 3550, 3552, 3557, 3561, 3563, 3559, 3567, 3569, 3571, 3583, 3585, 3587, 3591, 3594, 3596, 3598, 3600, 3602, 3604, 3606, 3613, 3616, 3618, 3620, 3622, 3636, 3640, 3642, 3646, 3649, 3651, 3653, 3657, 3659, 3662, 3664, 3667, 3669, 3673, 3675, 3678, 3680, 3684, 3689, 3692, 3696, 3701, 3703, 3708, 3710, 3712, 3714, 3716, 3718, 3720, 3722, 3727, 3729, 3731, 3733, 3736, 3738, 3742, 3745, 3748, 3755, 3757, 3759, 3761, 3763, 3765, 3768, 3770, 3776, 3773, 3783, 3785, 3788, 3798, 3800, 3806, 3808, 3812, 3814, 3817, 3819, 3821, 3828, 3834, 3839, 3841, 3843, 3845, 3847, 3850, 3854, 3857, 3860, 3862, 3871, 3874, 3876, 3878, 3880, 3884, 3882, 3890, 3894, 3899, 3901, 3906, 3915, 3922, 3924, 3926, 3931, 3936, 3938, 3940, 3944, 3946, 3951, 3953, 3955, 3963, 3957, 3965, 3967, 3970, 3972, 3977, 3979, 3983, 3985, 3989, 3996, 3998, 4001, 4006, 4008, 4011, 4013, 4015, 4018, 4022, 4026, 4028, 4031, 4034, 4037, 4041, 4043, 4052, 4054, 4057, 4060, 4066, 4070, 4072, 4074, 4078, 4080, 4083, 4085, 4087, 4089, 4094, 4096, 4102, 4104, 4109, 4111, 4117, 4119, 4121, 4123, 4125, 4129, 4135, 4137, 4139, 4141, 4143, 4145, 4147, 4149, 4152, 4156, 4160, 4162, 4167, 4177, 4181, 4184, 4186, 4189, 4193, 4195, 4197, 4199, 4203, 4205, 4207, 4209, 4215, 4220, 4222, 4224, 4226, 4240, 4229, 4233, 4242, 4247, 4251, 4254, 4260, 4262, 4264, 4266, 4268, 4270, 4273, 4275, 4278, 4280, 4286, 4288, 4291, 4298, 4300, 4302, 4311, 4313, 4304, 4315, 4317, 4322, 4327, 4330, 4335, 4338, 4341, 4344, 4346, 4351, 4353, 4357, 4359, 4363, 4365, 4370, 4367, 4374, 4380, 4376, 4382, 4384, 4386, 4395, 4399, 4405, 4407, 4412, 4409, 4414, 4416, 4418, 4420, 4422, 4424, 4427, 4430, 4435, 4432, 4444, 4446, 4448, 4452, 4456, 4458, 4460, 4463, 4465, 4471, 4473, 4475, 4479, 4483, 4485, 4487, 4489, 4501, 4503, 4505, 4507, 4511, 4516, 4519, 4521, 4523, 4541, 4528, 4551, 4535, 4537, 4553, 4559, 4561, 4563, 4565, 4567, 4569, 4571, 4573, 4575, 4577, 4581, 4584, 4587, 4590, 4592, 4597, 4599, 4602, 4604, 4611, 4613, 4617, 4619, 4621, 4624, 4627, 4629, 4632, 4634, 4636, 4640, 4643, 4645, 4650, 4652, 4656, 4662, 4664, 4666, 4671, 4675, 4677, 4681, 4687, 4691, 4695, 4706, 4708, 4693, 4718, 4721, 4726, 4728, 4731, 4733, 4735, 4737, 4739, 4741, 4743, 4745, 4748, 4754, 4759, 4761, 4766, 4768, 4786, 4777, 4779, 4791, 4793, 4795, 4803, 4805, 4807, 4809, 4811, 4813, 4817, 4819, 4825, 4827, 4831, 4833, 4841, 4835, 4838, 4851, 4853, 4856, 4858, 4860, 4862, 4866, 4864, 4868, 4871, 4875, 4873, 4878, 4880, 4882, 4884, 4886, 4892, 4895, 4902, 4904, 4906, 4910, 4914, 4918, 4922, 4924, 4926, 4929, 4931, 4933, 4935, 4937, 4939, 4941, 4943, 4950, 4952, 4957, 4954, 4959, 4962, 4965, 4967, 4972, 4969, 4974, 4977, 4979, 4981, 4983, 4989, 4997, 5001, 5003, 5005, 5010, 5012, 5014, 5016, 5020, 5023, 5025, 5028, 5036, 5038, 5040, 5042, 5045, 5049, 5051, 5053, 5057, 5060, 5063, 5065, 5069, 5067, 5071, 5078, 5083, 5090, 5085, 5099, 5101, 5104, 5106, 5108, 5112, 5119, 5123, 5130, 5134, 5137, 5141, 5145, 5147, 5149, 5151, 5153, 5155, 5157, 5159, 5162, 5165, 5171, 5173, 5175, 5177, 5179, 5182, 5184, 5194, 5199, 5201, 5203, 5206, 5211, 5213, 5216, 5220, 5222, 5224, 5228, 5226, 5230, 5240, 5234, 5232, 5242, 5244, 5248, 5251, 5259, 5262, 5264, 5269, 5273, 5275, 5277, 5280, 5282, 5287, 5289, 5291, 5293, 5296, 5298, 5300, 5302, 5304, 5306, 5312, 5314, 5318, 5320, 5326, 5328, 5335, 5337, 5340, 5342, 5346, 5348, 5350, 5355, 5352, 5358, 5360, 5362, 5369, 5366, 5375, 5377, 5385, 5387, 5389, 5391, 5399, 5401, 5405, 5407, 5409, 5411, 5413, 5415, 5417, 5419, 5421, 5424, 5427, 5430, 5434, 5444, 5462, 5440, 5451, 5436, 5469, 5473, 5475, 5477, 5479, 5482, 5484, 5486, 5488, 5490, 5492, 5495, 5502, 5505, 5508, 5511, 5514, 5516, 5521, 5518, 5525, 5527, 5529, 5533, 5542, 5544, 5547, 5549, 5551, 5555, 5558, 5560, 5562, 5565, 5571, 5573, 5576, 5578, 5580, 5582, 5584, 5586, 5588, 5590, 5594, 5601, 5604, 5613, 5616, 5619, 5622, 5627, 5629, 5631, 5633, 5635, 5637, 5639, 5641, 5647, 5654, 5651, 5656, 5658, 5660, 5662, 5664, 5669, 5672, 5676, 5684, 5691, 5680, 5688, 5695, 5697, 5699, 5705, 5708, 5712, 5714, 5716, 5718, 5720, 5723, 5725, 5730, 5734, 5738, 5741, 5745, 5748, 5751, 5753, 5756, 5758, 5762, 5765, 5767, 5769, 5771, 5774, 5778, 5781, 5783, 5791, 5793, 5795, 5800, 5803, 5806, 5811, 5798, 5813, 5818, 5821, 5824, 5831, 5835, 5837, 5839, 5841, 5843, 5845, 5847, 5850, 5856, 5858, 5853, 5860, 5866, 5868, 5875, 5881, 5883, 5885, 5887, 5889, 5892, 5894, 5897, 5899, 5901, 5905, 5910, 5912, 5917, 5919, 5924, 5926, 5928, 5934, 5932, 5939, 5942, 5944, 5946, 5952, 5954, 5956, 5958, 5960, 5962, 5964, 5969, 5966, 5977, 5982, 5972, 5984, 5989, 5995, 5999, 6001, 6005, 6007, 6009, 6013, 6015, 6017, 6019, 6021, 6027, 6030, 6034, 6036, 6040, 6042, 6045, 6047, 6050, 6052, 6054, 6056, 6063, 6065, 6059, 6070, 6080, 6082, 6085, 6089, 6095, 6099, 6101, 6104, 6106, 6108, 6111, 6113, 6115, 6128, 6130, 6137, 6139, 6141, 6145, 6147, 6150, 6152, 6154, 6156, 6158, 6160, 6162, 6164, 6166, 6176, 6168, 6182, 6187, 6189, 6191, 6194, 6196, 6199, 6201, 6205, 6214, 6209, 6217, 6222, 6227, 6229, 6232, 6234, 6236, 6238, 6240, 6244, 6246, 6249, 6255, 6252, 6261, 6264, 6266, 6268, 6272, 6282, 6284, 6286, 6293, 6295, 6297, 6290, 6299, 6301, 6307, 6313, 6316, 6320, 6324, 6327, 6329, 6331, 6333, 6338, 6340, 6342, 6345, 6347, 6356, 6353, 6365, 6367, 6371, 6375, 6377, 6379, 6383, 6385, 6389, 6391, 6393, 6395, 6399, 6401, 6405, 6410, 6413, 6415, 6425, 6427, 6429, 6431, 6433, 6435, 6437, 6439, 6443, 6448, 6450, 6452, 6454, 6456, 6459, 6466, 6469, 6475, 6478, 6480, 6482, 6484, 6490, 6498, 6500, 6502, 6508, 6504, 6510, 6513, 6518, 6520, 6523, 6525, 6529, 6537, 6539, 6541, 6543, 6546, 6552, 6554, 6548, 6558, 6560, 6562, 6641, 6606, 75, 6613, 6618, 6622, 6625, 6628, 6634 }; // idb __int16 word_A380A0[] = { 0 }; // weak __int16 word_A38FC8[6700] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 27, 27, 27, 27, 33, 34, 35, 27, 36, 37, 38, 39, 40, 27, 27, 27, 27, 41, 42, 43, 48, 56, 52, 56, 52, 49, 51, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 56, 52, 56, 52, 56, 52, 47, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 65, 57, 158, 58, 56, 52, 73, 56, 52, 106, 55, 51, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 59, 61, 62, 92, 63, 158, 60, 56, 52, 56, 52, 100, 64, 66, 52, 56, 52, 56, 52, 95, 56, 52, 56, 52, 153, 56, 52, 46, 56, 52, 56, 52, 67, 70, 44, 56, 52, 74, 68, 69, 75, 46, 80, 79, 56, 52, 56, 52, 76, 81, 71, 72, 82, 102, 77, 78, 83, 56, 52, 54, 104, 84, 56, 52, 103, 105, 108, 56, 52, 56, 52, 56, 52, 107, 56, 52, 44, 56, 52, 85, 1931, 86, 109, 87, 56, 52, 56, 52, 56, 52, 159, 112, 159, 88, 1931, 110, 89, 90, 91, 56, 111, 93, 93, 93, 93, 93, 93, 93, 93, 93, 116, 1931, 114, 115, 1931, 117, 113, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 94, 97, 97, 97, 97, 97, 97, 97, 97, 97, 118, 125, 136, 152, 56, 52, 119, 56, 52, 126, 99, 56, 1931, 101, 101, 101, 101, 101, 101, 101, 101, 101, 120, 121, 56, 52, 1931, 101, 101, 101, 101, 101, 101, 101, 130, 56, 52, 131, 1931, 122, 127, 56, 52, 123, 124, 56, 52, 1931, 56, 52, 1931, 56, 52, 1931, 56, 52, 128, 1931, 134, 56, 52, 1931, 129, 1931, 132, 137, 1931, 138, 56, 52, 135, 139, 1931, 133, 56, 52, 56, 52, 140, 141, 1931, 142, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 145, 154, 56, 52, 56, 52, 1931, 149, 143, 144, 147, 56, 52, 150, 1931, 56, 52, 155, 1931, 164, 146, 161, 175, 156, 56, 52, 151, 1931, 148, 97, 97, 97, 97, 97, 97, 97, 97, 97, 162, 56, 52, 1931, 163, 56, 52, 171, 56, 52, 99, 159, 165, 159, 56, 52, 160, 160, 160, 160, 160, 160, 160, 160, 160, 166, 1931, 167, 168, 56, 52, 169, 174, 56, 52, 172, 56, 52, 1931, 170, 173, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 177, 56, 52, 176, 1931, 180, 1931, 56, 52, 56, 52, 178, 181, 56, 52, 56, 52, 186, 1931, 184, 182, 1931, 179, 187, 1931, 189, 56, 52, 188, 1931, 183, 1931, 185, 56, 52, 56, 52, 1931, 191, 56, 52, 192, 56, 52, 1931, 193, 56, 52, 1931, 190, 56, 52, 56, 52, 56, 52, 195, 56, 52, 196, 56, 52, 56, 52, 56, 52, 1931, 194, 56, 52, 1931, 199, 200, 56, 52, 56, 52, 1931, 198, 197, 210, 1931, 209, 203, 201, 204, 1931, 205, 206, 211, 56, 52, 1931, 202, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 207, 208, 1931, 212, 56, 52, 1931, 214, 1931, 213, 56, 52, 56, 52, 56, 52, 216, 56, 52, 1931, 218, 56, 52, 215, 56, 52, 217, 56, 52, 219, 220, 56, 52, 1931, 223, 56, 52, 1931, 56, 52, 228, 56, 52, 56, 52, 221, 225, 1931, 224, 222, 1931, 226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 229, 230, 233, 56, 52, 232, 56, 52, 234, 56, 52, 235, 56, 52, 1931, 56, 52, 236, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 56, 52, 1931, 240, 56, 52, 242, 1931, 237, 244, 239, 1931, 238, 241, 247, 246, 56, 52, 56, 52, 243, 248, 56, 52, 1931, 249, 56, 52, 1931, 56, 52, 56, 52, 245, 56, 52, 56, 52, 1931, 251, 56, 52, 56, 52, 1931, 256, 252, 253, 1931, 254, 250, 1931, 255, 1931, 56, 52, 257, 56, 52, 258, 56, 52, 56, 52, 283, 56, 52, 56, 52, 1931, 56, 52, 259, 56, 52, 274, 56, 52, 285, 56, 52, 289, 56, 52, 1931, 268, 1931, 269, 284, 56, 52, 260, 261, 262, 263, 270, 288, 271, 286, 1931, 272, 287, 273, 264, 290, 265, 56, 52, 266, 267, 275, 276, 277, 1931, 278, 56, 52, 291, 1931, 56, 52, 294, 279, 1931, 280, 56, 52, 281, 282, 54, 56, 52, 56, 52, 296, 1931, 292, 293, 56, 52, 1931, 56, 52, 56, 52, 1931, 295, 1931, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 299, 1931, 300, 1931, 297, 302, 303, 56, 52, 1931, 298, 305, 306, 301, 307, 56, 52, 1931, 56, 52, 304, 56, 52, 311, 1931, 310, 1931, 308, 56, 52, 309, 56, 52, 319, 56, 52, 56, 52, 321, 322, 323, 56, 52, 56, 52, 326, 56, 52, 312, 313, 320, 314, 56, 52, 1931, 324, 1931, 325, 1931, 315, 316, 327, 330, 317, 1931, 329, 318, 56, 52, 56, 52, 331, 1931, 328, 335, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 332, 56, 52, 56, 52, 333, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 339, 56, 52, 56, 52, 341, 1931, 336, 334, 56, 52, 1931, 337, 56, 52, 340, 338, 56, 52, 56, 52, 56, 52, 342, 343, 346, 1931, 348, 345, 56, 52, 1931, 344, 1931, 349, 56, 52, 56, 52, 1931, 347, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 351, 1931, 350, 56, 52, 1931, 352, 56, 52, 56, 52, 357, 1931, 358, 353, 354, 56, 52, 56, 52, 360, 56, 52, 1931, 361, 355, 362, 1931, 356, 56, 52, 56, 52, 359, 56, 52, 56, 52, 1931, 364, 1931, 56, 52, 363, 56, 52, 367, 56, 52, 368, 56, 52, 366, 56, 52, 1931, 365, 1931, 378, 370, 369, 376, 56, 52, 1931, 377, 1931, 372, 56, 52, 1931, 371, 373, 1931, 379, 1931, 374, 1931, 380, 375, 56, 52, 56, 52, 1931, 382, 383, 56, 52, 1931, 56, 52, 1931, 381, 56, 52, 56, 52, 56, 52, 385, 1931, 386, 1931, 384, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 389, 1931, 387, 390, 392, 56, 52, 388, 56, 52, 391, 397, 393, 398, 56, 52, 1931, 399, 56, 52, 1931, 394, 401, 395, 56, 52, 1931, 396, 1931, 400, 56, 52, 1931, 402, 56, 52, 56, 52, 403, 56, 52, 404, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 408, 1931, 405, 56, 52, 411, 1931, 406, 56, 52, 1931, 407, 56, 52, 56, 52, 409, 410, 56, 52, 415, 56, 52, 413, 412, 56, 52, 56, 52, 417, 414, 416, 56, 52, 1931, 420, 1931, 421, 1931, 422, 1931, 418, 56, 52, 424, 56, 52, 56, 52, 425, 56, 52, 419, 56, 52, 423, 1931, 56, 52, 56, 52, 427, 56, 52, 56, 52, 1931, 436, 56, 52, 56, 52, 56, 52, 426, 56, 52, 1931, 437, 1931, 441, 1931, 439, 1931, 442, 445, 448, 438, 440, 1931, 443, 1931, 428, 56, 52, 1931, 444, 429, 430, 1931, 447, 446, 1931, 431, 432, 433, 1931, 434, 435, 450, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 449, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 452, 1931, 453, 56, 52, 56, 52, 455, 451, 1931, 456, 1931, 454, 458, 459, 56, 52, 56, 52, 461, 1931, 466, 56, 52, 1931, 457, 460, 1931, 462, 56, 52, 56, 52, 56, 52, 465, 463, 1931, 464, 56, 52, 56, 52, 56, 52, 56, 52, 468, 56, 52, 470, 56, 52, 56, 52, 56, 52, 467, 56, 52, 473, 1931, 472, 56, 52, 56, 52, 1931, 469, 56, 52, 477, 56, 52, 480, 471, 476, 56, 52, 474, 56, 52, 1931, 475, 478, 482, 56, 52, 1931, 479, 1931, 56, 52, 56, 52, 1931, 481, 1931, 483, 56, 52, 484, 56, 52, 56, 52, 56, 52, 56, 52, 485, 486, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 490, 56, 52, 56, 52, 487, 56, 52, 488, 1931, 489, 1931, 494, 495, 492, 496, 1931, 491, 1931, 498, 493, 56, 52, 56, 52, 500, 497, 56, 52, 499, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 501, 56, 52, 56, 52, 1931, 503, 56, 52, 506, 505, 56, 52, 502, 509, 510, 504, 56, 52, 1931, 507, 1931, 513, 56, 52, 56, 52, 56, 52, 511, 56, 52, 508, 56, 52, 512, 56, 52, 56, 52, 56, 52, 515, 519, 517, 56, 52, 1931, 514, 518, 56, 52, 56, 52, 521, 56, 52, 1931, 516, 1931, 520, 56, 52, 524, 522, 56, 52, 56, 52, 1931, 523, 56, 52, 56, 52, 56, 52, 527, 1931, 525, 56, 52, 56, 52, 528, 526, 56, 52, 56, 52, 1931, 529, 56, 52, 56, 52, 1931, 56, 52, 1931, 530, 532, 533, 56, 52, 531, 1931, 534, 1931, 539, 535, 537, 56, 52, 536, 56, 52, 538, 56, 52, 56, 52, 56, 52, 56, 52, 540, 542, 56, 52, 541, 56, 52, 1931, 56, 52, 544, 543, 1931, 56, 52, 1931, 547, 548, 56, 52, 1931, 545, 56, 52, 549, 1931, 546, 552, 56, 52, 550, 553, 554, 56, 52, 56, 52, 1931, 551, 558, 56, 52, 555, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 556, 557, 56, 52, 1931, 559, 1931, 561, 562, 56, 52, 563, 1931, 569, 1931, 568, 560, 1931, 564, 570, 56, 52, 1931, 566, 567, 565, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 571, 56, 52, 1931, 56, 52, 56, 52, 575, 56, 52, 572, 576, 56, 52, 56, 52, 56, 52, 56, 52, 573, 577, 574, 581, 56, 52, 56, 52, 1931, 578, 585, 1931, 579, 582, 580, 583, 584, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 586, 56, 52, 594, 56, 52, 595, 596, 1931, 597, 56, 52, 56, 52, 1931, 600, 602, 1931, 587, 588, 589, 590, 591, 56, 52, 598, 601, 56, 52, 1931, 592, 1931, 599, 56, 52, 1931, 593, 1931, 603, 56, 52, 56, 52, 604, 56, 52, 56, 52, 605, 56, 52, 1931, 607, 1931, 56, 52, 608, 56, 52, 56, 52, 606, 1931, 611, 609, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 610, 612, 615, 1931, 613, 1931, 614, 56, 52, 1931, 625, 56, 52, 56, 52, 1931, 624, 56, 52, 629, 1931, 628, 626, 1931, 627, 616, 617, 1931, 631, 618, 632, 1931, 630, 56, 52, 1931, 619, 56, 52, 620, 56, 52, 621, 622, 623, 56, 52, 56, 52, 56, 52, 1931, 633, 1931, 634, 56, 52, 56, 52, 1931, 635, 636, 637, 638, 642, 1931, 56, 52, 56, 52, 641, 1931, 639, 56, 52, 640, 56, 52, 645, 643, 56, 52, 56, 52, 56, 52, 644, 646, 56, 52, 649, 1931, 56, 52, 56, 52, 1931, 650, 56, 52, 647, 56, 52, 648, 653, 56, 52, 1931, 654, 655, 56, 52, 56, 52, 1931, 56, 52, 651, 56, 52, 1931, 652, 56, 52, 1931, 656, 1931, 659, 657, 56, 52, 1931, 658, 56, 52, 56, 52, 1931, 56, 52, 1931, 661, 1931, 663, 660, 662, 56, 52, 665, 56, 52, 669, 56, 52, 667, 1931, 666, 668, 56, 52, 56, 52, 56, 52, 664, 1931, 670, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 671, 56, 52, 1931, 672, 56, 52, 676, 56, 52, 56, 52, 1931, 678, 679, 673, 1931, 675, 56, 52, 674, 677, 680, 683, 56, 52, 681, 684, 56, 52, 1931, 682, 685, 56, 52, 56, 52, 56, 52, 687, 1931, 686, 1931, 688, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 691, 56, 52, 1931, 690, 56, 52, 693, 56, 52, 689, 56, 52, 695, 692, 697, 1931, 56, 52, 694, 56, 52, 56, 52, 56, 52, 1931, 698, 701, 1931, 696, 1931, 56, 52, 700, 56, 52, 699, 702, 704, 1931, 703, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 705, 706, 56, 52, 56, 52, 56, 52, 1931, 708, 56, 52, 56, 52, 1931, 56, 52, 1931, 56, 52, 707, 56, 52, 1931, 56, 52, 56, 52, 1931, 709, 713, 714, 716, 710, 711, 712, 717, 56, 52, 56, 52, 1931, 718, 1931, 715, 720, 1931, 719, 56, 52, 56, 52, 56, 52, 721, 56, 52, 56, 52, 56, 52, 1931, 722, 1931, 723, 56, 52, 56, 52, 726, 1931, 724, 56, 52, 1931, 725, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 728, 56, 52, 56, 52, 727, 1931, 733, 730, 1931, 731, 1931, 729, 1931, 732, 734, 56, 52, 738, 56, 52, 56, 52, 1931, 736, 56, 52, 735, 737, 1931, 739, 56, 52, 56, 52, 740, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 744, 56, 52, 1931, 743, 56, 52, 741, 1931, 742, 747, 56, 52, 56, 52, 56, 52, 1931, 748, 56, 52, 745, 746, 749, 1931, 750, 751, 1931, 753, 752, 56, 52, 56, 52, 56, 52, 754, 756, 1931, 755, 56, 52, 56, 52, 56, 52, 1931, 757, 56, 52, 758, 56, 52, 761, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 759, 56, 52, 766, 760, 762, 1931, 56, 52, 763, 56, 52, 1931, 773, 764, 1931, 765, 56, 52, 56, 52, 1931, 769, 767, 768, 770, 771, 56, 52, 56, 52, 772, 774, 56, 52, 1931, 777, 56, 52, 56, 52, 56, 52, 56, 52, 775, 56, 52, 56, 52, 56, 52, 1931, 776, 56, 52, 782, 1931, 778, 1931, 779, 56, 52, 1931, 780, 781, 1931, 785, 56, 52, 1931, 788, 783, 787, 56, 52, 56, 52, 1931, 784, 786, 56, 52, 56, 52, 1931, 790, 56, 52, 1931, 789, 56, 52, 1931, 793, 792, 56, 52, 794, 1931, 791, 56, 52, 1931, 795, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 796, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 799, 797, 56, 52, 802, 1931, 798, 56, 52, 800, 56, 52, 801, 56, 52, 1931, 803, 806, 809, 804, 56, 52, 805, 56, 52, 56, 52, 1931, 807, 1931, 808, 56, 52, 56, 52, 1931, 810, 56, 52, 56, 52, 811, 56, 52, 1931, 812, 56, 52, 56, 52, 56, 52, 814, 56, 52, 815, 56, 52, 813, 56, 52, 1931, 818, 56, 52, 1931, 816, 821, 56, 52, 822, 56, 52, 817, 1931, 56, 52, 56, 52, 1931, 819, 56, 52, 1931, 825, 820, 56, 52, 1931, 56, 52, 1931, 823, 56, 52, 824, 827, 56, 52, 56, 52, 1931, 828, 56, 52, 826, 56, 52, 829, 832, 1931, 830, 56, 52, 836, 56, 52, 840, 837, 56, 52, 833, 831, 1931, 834, 1931, 835, 839, 56, 52, 56, 52, 56, 52, 1931, 838, 1931, 841, 56, 52, 843, 56, 52, 56, 52, 56, 52, 845, 1931, 842, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 844, 1931, 848, 56, 52, 56, 52, 1931, 851, 1931, 850, 846, 1931, 847, 56, 52, 853, 1931, 849, 56, 52, 56, 52, 1931, 855, 854, 1931, 856, 1931, 852, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 858, 56, 52, 1931, 857, 1931, 859, 56, 52, 56, 52, 1931, 862, 1931, 56, 52, 56, 52, 863, 1931, 860, 56, 52, 861, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 864, 865, 868, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 866, 867, 56, 52, 869, 56, 52, 56, 52, 872, 876, 1931, 870, 1931, 878, 871, 874, 873, 56, 52, 879, 56, 52, 56, 52, 875, 56, 52, 1931, 877, 56, 52, 1931, 880, 56, 52, 56, 52, 56, 52, 1931, 881, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 886, 887, 1931, 882, 883, 56, 52, 884, 56, 52, 56, 52, 56, 52, 885, 891, 56, 52, 1931, 892, 888, 56, 52, 889, 1931, 894, 890, 56, 52, 56, 52, 56, 52, 56, 52, 893, 899, 1931, 56, 52, 56, 52, 896, 56, 52, 895, 897, 901, 900, 1931, 898, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 902, 903, 1931, 904, 1931, 906, 905, 56, 52, 56, 52, 908, 909, 56, 52, 913, 56, 52, 56, 52, 56, 52, 907, 56, 52, 1931, 910, 56, 52, 1931, 911, 1931, 915, 1931, 914, 912, 1931, 920, 56, 52, 1931, 919, 56, 52, 921, 1931, 917, 1931, 918, 916, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 922, 56, 52, 1931, 56, 52, 56, 52, 1931, 924, 928, 56, 52, 923, 56, 52, 56, 52, 56, 52, 925, 56, 52, 934, 1931, 926, 930, 1931, 927, 1931, 929, 56, 52, 931, 933, 1931, 932, 935, 938, 56, 52, 56, 52, 1931, 936, 56, 52, 937, 1931, 939, 56, 52, 56, 52, 56, 52, 56, 52, 942, 56, 52, 940, 56, 52, 941, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 943, 56, 52, 56, 52, 1931, 944, 1931, 946, 945, 56, 52, 952, 947, 56, 52, 949, 56, 52, 1931, 955, 948, 950, 56, 52, 56, 52, 953, 56, 52, 1931, 957, 1931, 951, 56, 52, 954, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 960, 1931, 956, 1931, 56, 52, 1931, 959, 56, 52, 56, 52, 958, 56, 52, 56, 52, 56, 52, 1931, 964, 1931, 961, 56, 52, 56, 52, 962, 56, 52, 56, 52, 1931, 963, 965, 966, 56, 52, 1931, 967, 971, 972, 56, 52, 968, 56, 52, 56, 52, 56, 52, 969, 1931, 970, 56, 52, 56, 52, 56, 52, 56, 52, 979, 1931, 973, 56, 52, 974, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 981, 977, 1931, 976, 975, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 978, 982, 984, 56, 52, 980, 56, 52, 1931, 985, 983, 56, 52, 986, 989, 990, 991, 992, 993, 1931, 988, 987, 1931, 994, 56, 52, 1931, 995, 56, 52, 56, 52, 1931, 999, 1000, 1001, 1002, 56, 52, 1931, 56, 52, 996, 1003, 1004, 1005, 1006, 1931, 998, 56, 52, 56, 52, 56, 52, 1007, 56, 52, 1931, 997, 56, 52, 56, 52, 56, 52, 56, 52, 1008, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1011, 56, 52, 56, 52, 1931, 1010, 56, 52, 1009, 56, 52, 1931, 1012, 56, 52, 1015, 1014, 1013, 56, 52, 56, 52, 56, 52, 1017, 1018, 1931, 1019, 1931, 1016, 1021, 56, 52, 56, 52, 56, 52, 56, 52, 1020, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1022, 56, 52, 1023, 56, 52, 1931, 56, 52, 1931, 1027, 1931, 56, 52, 1026, 56, 52, 1931, 1025, 1029, 56, 52, 1024, 56, 52, 56, 52, 1028, 1032, 1931, 1030, 1931, 1034, 56, 52, 56, 52, 1931, 56, 52, 1031, 1033, 56, 52, 1035, 1037, 56, 52, 56, 52, 1931, 56, 52, 1931, 1036, 56, 52, 56, 52, 1931, 56, 52, 1038, 1042, 1931, 1043, 56, 52, 1931, 1039, 1040, 56, 52, 1931, 1041, 1044, 1045, 1047, 56, 52, 1931, 1046, 56, 52, 56, 52, 56, 52, 1049, 56, 52, 56, 52, 1931, 1048, 56, 52, 56, 52, 56, 52, 1051, 1931, 1053, 1931, 56, 52, 56, 52, 1050, 1931, 56, 52, 56, 52, 1931, 56, 52, 1057, 1052, 56, 52, 56, 52, 1055, 56, 52, 1054, 1058, 1931, 1060, 1061, 1056, 1062, 56, 52, 56, 52, 1059, 1067, 1931, 56, 52, 1064, 1065, 56, 52, 1063, 56, 52, 1931, 1066, 56, 52, 1069, 56, 52, 1068, 1071, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1070, 56, 52, 1074, 1073, 56, 52, 56, 52, 1931, 1072, 1931, 1079, 56, 52, 1078, 56, 52, 1075, 1081, 1077, 1076, 1085, 1082, 1080, 1084, 1931, 56, 52, 1931, 1083, 56, 52, 1088, 56, 52, 1086, 56, 52, 56, 52, 56, 52, 1087, 1090, 56, 52, 1089, 56, 52, 1931, 56, 52, 1931, 1093, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1092, 1096, 1091, 1097, 56, 52, 56, 52, 1094, 1098, 1931, 1095, 1102, 1099, 1931, 1100, 1931, 1103, 56, 52, 56, 52, 1105, 56, 52, 1931, 1101, 1106, 56, 52, 56, 52, 1931, 1104, 56, 52, 56, 52, 56, 52, 1931, 1108, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1109, 1107, 56, 52, 1110, 1113, 56, 52, 56, 52, 1111, 56, 52, 1121, 1122, 1112, 56, 52, 1931, 1116, 56, 52, 1115, 1931, 1114, 56, 52, 1931, 1118, 56, 52, 1931, 1117, 56, 52, 1931, 56, 52, 1119, 56, 52, 1120, 56, 52, 56, 52, 56, 52, 56, 52, 1123, 56, 52, 56, 52, 1931, 1124, 1127, 56, 52, 1931, 1125, 56, 52, 1128, 1130, 1931, 1126, 56, 52, 1931, 1129, 56, 52, 1132, 1931, 1131, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 1133, 1931, 1136, 56, 52, 1134, 56, 52, 56, 52, 1931, 1135, 1140, 1931, 1137, 1138, 56, 52, 1931, 56, 52, 1931, 1139, 1145, 1142, 56, 52, 1141, 1931, 1143, 56, 52, 1931, 1144, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1152, 1146, 1148, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1147, 56, 52, 56, 52, 56, 52, 1931, 1153, 1931, 1159, 1149, 1150, 1151, 1154, 1931, 1155, 56, 52, 56, 52, 56, 52, 1931, 1156, 56, 52, 1158, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1157, 1931, 1166, 1931, 1167, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 1160, 1931, 1161, 1931, 1162, 1931, 1163, 1931, 1164, 1169, 1931, 1165, 56, 52, 1931, 1172, 56, 52, 56, 52, 1931, 1170, 56, 52, 1168, 56, 52, 56, 52, 56, 52, 1931, 1171, 56, 52, 56, 52, 1174, 56, 52, 56, 52, 1173, 56, 52, 56, 52, 1931, 1177, 56, 52, 56, 52, 1175, 56, 52, 56, 52, 1931, 1180, 56, 52, 1931, 1176, 1182, 56, 52, 1178, 56, 52, 1931, 1179, 56, 52, 1931, 1185, 1181, 56, 52, 56, 52, 1183, 1186, 1184, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1188, 1931, 1187, 56, 52, 56, 52, 56, 52, 56, 52, 1191, 56, 52, 56, 52, 1189, 1190, 56, 52, 1195, 56, 52, 1196, 56, 52, 1931, 1194, 1931, 1192, 1193, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1199, 56, 52, 56, 52, 1197, 56, 52, 1198, 56, 52, 1931, 1200, 1201, 1931, 1202, 56, 52, 56, 52, 1208, 56, 52, 1931, 1204, 1931, 1207, 1205, 1931, 1203, 1209, 56, 52, 56, 52, 1206, 1931, 1211, 1212, 56, 52, 56, 52, 1931, 1210, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1216, 1213, 1931, 1214, 1217, 56, 52, 1931, 1219, 1931, 1218, 56, 52, 1931, 1215, 1220, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1223, 56, 52, 1222, 1221, 56, 52, 1931, 56, 52, 1224, 56, 52, 56, 52, 1229, 1931, 1226, 1931, 1227, 1225, 1228, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1230, 1931, 1231, 1232, 56, 52, 1931, 1237, 56, 52, 1234, 1931, 1233, 56, 52, 56, 52, 1235, 1236, 1240, 56, 52, 1931, 1242, 1239, 1931, 1238, 1931, 1241, 56, 52, 1931, 1247, 1248, 1249, 1250, 56, 52, 56, 52, 56, 52, 1243, 1931, 1246, 56, 52, 1244, 1931, 1245, 56, 52, 56, 52, 56, 52, 1931, 1252, 56, 52, 56, 52, 1254, 1931, 1251, 56, 52, 56, 52, 56, 52, 56, 52, 1256, 1257, 1931, 1253, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1258, 1931, 1255, 56, 52, 56, 52, 1931, 1259, 56, 52, 56, 52, 1260, 1262, 56, 52, 1261, 1931, 1263, 1931, 1264, 56, 52, 56, 52, 1267, 56, 52, 1931, 1265, 1266, 56, 52, 56, 52, 1269, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1270, 1268, 56, 52, 1931, 1272, 56, 52, 56, 52, 1931, 56, 52, 1931, 56, 52, 1275, 56, 52, 1931, 1271, 56, 52, 56, 52, 1273, 1276, 1277, 1280, 1274, 1931, 1278, 56, 52, 56, 52, 1283, 56, 52, 1281, 56, 52, 1931, 1285, 1279, 1282, 56, 52, 1931, 1284, 56, 52, 56, 52, 56, 52, 1931, 1286, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1294, 1287, 56, 52, 56, 52, 1291, 1293, 1289, 1931, 56, 52, 56, 52, 1290, 1931, 1288, 56, 52, 56, 52, 1931, 1292, 1931, 1295, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1296, 56, 52, 1931, 1297, 1298, 1299, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1300, 56, 52, 1931, 1301, 56, 52, 1931, 1302, 56, 52, 56, 52, 1931, 1308, 1306, 56, 52, 1931, 1303, 1307, 1309, 1931, 1304, 1931, 1305, 56, 52, 1310, 1312, 56, 52, 1931, 56, 52, 56, 52, 1931, 56, 52, 1313, 1311, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1314, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1315, 1931, 1318, 56, 52, 1316, 1317, 1319, 56, 52, 56, 52, 56, 52, 56, 52, 1320, 56, 52, 1321, 1326, 56, 52, 1322, 1931, 1323, 1931, 1324, 56, 52, 56, 52, 1329, 1931, 1325, 56, 52, 1931, 1327, 56, 52, 1331, 56, 52, 1931, 1330, 1328, 1332, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1334, 56, 52, 56, 52, 1333, 56, 52, 56, 52, 1931, 1338, 1337, 1931, 56, 52, 56, 52, 1335, 56, 52, 1931, 1336, 1931, 1342, 1340, 56, 52, 56, 52, 56, 52, 56, 52, 1339, 1931, 1344, 1931, 1341, 56, 52, 56, 52, 56, 52, 56, 52, 1343, 1345, 1931, 56, 52, 1346, 1348, 1347, 56, 52, 1350, 56, 52, 1354, 1352, 1349, 56, 52, 1351, 56, 52, 1355, 56, 52, 1353, 56, 52, 56, 52, 1931, 1356, 1357, 56, 52, 56, 52, 1358, 1360, 56, 52, 56, 52, 1361, 1359, 56, 52, 56, 52, 56, 52, 1364, 56, 52, 1362, 1363, 56, 52, 56, 52, 1931, 1367, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1365, 1931, 1366, 1931, 1372, 1370, 56, 52, 1373, 1368, 56, 52, 1369, 1931, 1375, 1371, 56, 52, 56, 52, 56, 52, 1374, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1376, 56, 52, 1378, 56, 52, 56, 52, 1931, 56, 52, 1379, 1380, 1383, 1384, 1385, 1931, 1377, 56, 52, 56, 52, 56, 52, 1931, 1381, 56, 52, 1931, 1386, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 1388, 1389, 1382, 56, 52, 56, 52, 56, 52, 1390, 1387, 56, 52, 1931, 1394, 56, 52, 56, 52, 56, 52, 56, 52, 1392, 1396, 1931, 1391, 1393, 1931, 1398, 1931, 1395, 1397, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1400, 56, 52, 1931, 1399, 1931, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1408, 1931, 1401, 56, 52, 1931, 1402, 1404, 1406, 1405, 56, 52, 56, 52, 1403, 1407, 56, 52, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 56, 52, 56, 52, 1417, 1931, 1418, 1419, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1421, 56, 52, 1931, 56, 52, 1931, 56, 52, 1420, 56, 52, 56, 52, 1427, 1422, 1423, 56, 52, 56, 52, 1425, 56, 52, 56, 52, 1931, 1426, 1424, 1428, 1429, 56, 52, 56, 52, 1931, 1432, 56, 52, 56, 52, 56, 52, 1431, 56, 52, 1430, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1433, 1931, 56, 52, 1434, 56, 52, 56, 52, 1931, 1436, 1439, 56, 52, 56, 52, 1931, 1435, 56, 52, 1437, 1931, 1438, 1441, 56, 52, 56, 52, 56, 52, 1440, 1445, 1443, 56, 52, 1931, 1442, 56, 52, 56, 52, 1931, 1444, 56, 52, 1931, 1448, 1931, 1446, 56, 52, 1931, 1449, 56, 52, 56, 52, 56, 52, 1451, 1931, 1456, 1931, 1457, 1447, 1931, 1454, 1450, 56, 52, 56, 52, 1455, 1931, 1458, 1452, 1459, 1931, 1463, 1453, 56, 52, 1460, 56, 52, 1461, 1931, 1462, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1466, 56, 52, 1931, 1465, 1467, 1931, 56, 52, 1464, 1469, 1468, 56, 52, 56, 52, 1478, 1479, 1480, 56, 52, 56, 52, 1931, 1473, 1931, 1470, 1931, 1471, 1472, 56, 52, 56, 52, 1474, 1476, 1931, 1475, 1483, 56, 52, 1484, 1485, 1486, 56, 52, 56, 52, 56, 52, 1481, 1931, 1477, 1931, 1482, 1487, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1489, 1488, 56, 52, 56, 52, 1931, 1490, 1493, 1492, 56, 52, 56, 52, 1491, 1931, 56, 52, 56, 52, 56, 52, 1495, 56, 52, 1498, 56, 52, 1496, 1494, 1931, 1502, 1497, 1500, 1931, 1501, 56, 52, 56, 52, 1499, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1503, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1504, 1505, 1507, 56, 52, 1508, 56, 52, 1931, 1506, 1509, 1510, 1512, 56, 52, 56, 52, 56, 52, 1931, 1511, 56, 52, 1514, 1515, 56, 52, 1931, 1513, 56, 52, 1516, 1517, 56, 52, 56, 52, 56, 52, 1518, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1520, 1521, 1522, 1523, 56, 52, 56, 52, 56, 52, 1524, 56, 52, 56, 52, 1519, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1531, 1931, 1525, 56, 52, 1526, 1527, 1530, 1529, 1528, 1532, 56, 52, 1931, 1536, 56, 52, 56, 52, 56, 52, 1931, 1533, 1534, 56, 52, 56, 52, 56, 52, 56, 52, 1537, 1535, 56, 52, 1539, 56, 52, 56, 52, 1931, 56, 52, 1931, 1538, 1545, 1541, 1931, 1542, 56, 52, 56, 52, 56, 52, 56, 52, 1540, 56, 52, 1931, 1543, 56, 52, 56, 52, 56, 52, 1931, 1544, 56, 52, 1546, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1548, 1559, 1560, 1931, 1547, 56, 52, 1931, 1550, 1549, 56, 52, 56, 52, 1551, 1554, 1557, 56, 52, 1931, 1552, 1555, 1556, 1931, 1553, 1931, 56, 52, 56, 52, 1558, 56, 52, 56, 52, 56, 52, 1931, 1564, 56, 52, 1931, 1561, 1562, 1563, 1931, 56, 52, 1565, 1567, 56, 52, 1931, 1566, 1570, 1931, 1569, 56, 52, 1931, 1572, 56, 52, 1568, 56, 52, 1571, 1573, 56, 52, 1931, 1574, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1575, 56, 52, 1931, 56, 52, 1931, 1578, 1577, 1576, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 1579, 1582, 1931, 1583, 1931, 1580, 1581, 56, 52, 1931, 1586, 1585, 56, 52, 56, 52, 56, 52, 1588, 56, 52, 1931, 1584, 1587, 56, 52, 56, 52, 1589, 56, 52, 1931, 1590, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1591, 1593, 1592, 56, 52, 56, 52, 56, 52, 1931, 1596, 56, 52, 1594, 56, 52, 1600, 1599, 1597, 1595, 1598, 1602, 56, 52, 1601, 56, 52, 56, 52, 1931, 1607, 1603, 56, 52, 1931, 1605, 56, 52, 56, 52, 56, 52, 1604, 56, 52, 56, 52, 1608, 1931, 1609, 56, 52, 56, 52, 56, 52, 56, 52, 1606, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1615, 1616, 1931, 56, 52, 56, 52, 1931, 1613, 56, 52, 56, 52, 1931, 1617, 1931, 1610, 56, 52, 56, 52, 1611, 1612, 1618, 1619, 1614, 56, 52, 56, 52, 1620, 56, 52, 56, 52, 1931, 1621, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1631, 56, 52, 56, 52, 56, 52, 1931, 1622, 56, 52, 1623, 56, 52, 1931, 1626, 1931, 1624, 56, 52, 56, 52, 1931, 1625, 1627, 1628, 1630, 1629, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1632, 1635, 1931, 1633, 1636, 56, 52, 56, 52, 1931, 1634, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1639, 56, 52, 1637, 56, 52, 1642, 1638, 56, 52, 56, 52, 1640, 1641, 56, 52, 1931, 1643, 56, 52, 1931, 1649, 1931, 1644, 1931, 56, 52, 1645, 1931, 1647, 1651, 1646, 1648, 1931, 1655, 1652, 56, 52, 1653, 1654, 1931, 1650, 1656, 56, 52, 1931, 1657, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1659, 56, 52, 1931, 1661, 1658, 1662, 1663, 56, 52, 1660, 56, 52, 1665, 56, 52, 1931, 56, 52, 1664, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 1666, 56, 52, 56, 52, 56, 52, 1667, 1670, 56, 52, 1931, 1668, 1931, 1669, 1671, 1672, 1673, 56, 52, 56, 52, 1675, 56, 52, 56, 52, 56, 52, 1931, 1674, 56, 52, 1676, 56, 52, 56, 52, 56, 52, 1677, 56, 52, 1931, 1678, 1931, 1679, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1680, 56, 52, 1682, 1683, 1931, 1687, 1688, 56, 52, 1690, 56, 52, 1931, 1681, 1684, 1931, 1685, 1931, 1686, 56, 52, 1692, 56, 52, 1693, 56, 52, 1689, 56, 52, 1931, 1694, 1691, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1696, 1698, 1931, 1699, 56, 52, 1931, 1695, 56, 52, 1697, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1700, 1931, 1701, 56, 52, 1702, 56, 52, 1704, 1931, 56, 52, 1931, 1706, 56, 52, 1707, 1703, 56, 52, 1711, 1712, 56, 52, 1705, 56, 52, 1713, 1714, 56, 52, 56, 52, 56, 52, 1715, 1931, 1708, 1710, 56, 52, 1709, 56, 52, 1931, 1716, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1720, 56, 52, 56, 52, 1931, 1719, 1717, 56, 52, 1718, 1724, 56, 52, 1931, 1721, 56, 52, 1722, 56, 52, 1931, 1725, 56, 52, 1727, 56, 52, 1723, 56, 52, 56, 52, 1726, 56, 52, 56, 52, 1931, 1729, 56, 52, 1728, 56, 52, 56, 52, 56, 52, 56, 52, 1731, 56, 52, 1931, 1730, 56, 52, 1732, 56, 52, 56, 52, 1931, 1733, 1931, 1735, 1931, 1736, 56, 52, 56, 52, 56, 52, 1734, 56, 52, 56, 52, 1739, 56, 52, 1737, 56, 52, 1931, 1738, 1741, 56, 52, 56, 52, 1742, 1740, 1743, 56, 52, 1744, 56, 52, 1745, 56, 52, 1931, 1748, 1747, 1931, 1749, 56, 52, 1931, 1746, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1751, 56, 52, 1750, 56, 52, 1752, 56, 52, 56, 52, 56, 52, 1755, 1754, 1931, 1753, 56, 52, 56, 52, 1931, 1759, 1758, 1757, 1756, 56, 52, 1760, 1931, 1761, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1931, 1766, 56, 52, 1765, 1764, 1768, 56, 52, 56, 52, 1931, 1762, 1763, 56, 52, 56, 52, 1767, 1769, 1931, 56, 52, 56, 52, 56, 52, 1931, 1770, 56, 52, 56, 52, 1931, 1771, 1772, 56, 52, 1774, 56, 52, 56, 52, 56, 52, 1773, 1775, 1776, 1777, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1780, 56, 52, 1781, 56, 52, 1782, 1931, 1778, 56, 52, 1779, 1931, 1786, 56, 52, 56, 52, 1783, 1931, 1784, 56, 52, 1788, 1931, 1789, 1785, 56, 52, 1787, 1790, 56, 52, 56, 52, 1931, 1791, 56, 52, 56, 52, 56, 52, 1931, 1792, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1796, 1931, 1793, 56, 52, 1931, 56, 52, 1931, 1795, 56, 52, 56, 52, 1931, 1794, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1797, 56, 52, 56, 52, 56, 52, 56, 52, 1799, 56, 52, 1798, 1800, 56, 52, 56, 52, 1931, 1801, 1803, 56, 52, 1931, 1808, 1931, 1804, 1931, 1807, 1802, 1805, 56, 52, 56, 52, 1811, 56, 52, 1931, 1806, 56, 52, 1931, 1809, 1931, 1810, 56, 52, 1931, 1812, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1813, 1931, 1815, 1931, 1814, 1931, 1819, 1931, 1820, 1931, 1816, 56, 52, 56, 52, 1931, 1817, 1818, 1821, 1931, 56, 52, 56, 52, 56, 52, 1931, 1822, 56, 52, 56, 52, 1823, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1824, 1825, 1827, 1931, 1830, 56, 52, 1931, 1826, 1931, 1829, 56, 52, 1832, 1828, 1831, 56, 52, 56, 52, 56, 52, 1834, 56, 52, 56, 52, 1833, 56, 52, 56, 52, 1836, 1835, 56, 52, 1931, 1839, 56, 52, 1837, 1931, 1838, 56, 52, 1842, 56, 52, 1931, 1841, 1843, 56, 52, 1931, 1844, 1840, 56, 52, 56, 52, 1845, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1846, 56, 52, 56, 52, 1931, 56, 52, 1931, 56, 52, 1848, 56, 52, 1931, 1847, 1849, 1931, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 1850, 1856, 56, 52, 1853, 1852, 1851, 1854, 1857, 1931, 1855, 1858, 56, 52, 56, 52, 56, 52, 1931, 1860, 56, 52, 1859, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1862, 1931, 1863, 56, 52, 1864, 1931, 1865, 1861, 56, 52, 1931, 56, 52, 1931, 1866, 56, 52, 1931, 1868, 56, 52, 1867, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1869, 1871, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 1874, 1931, 1870, 56, 52, 1872, 56, 52, 1931, 1876, 1931, 1877, 1878, 1873, 1879, 56, 52, 56, 52, 1931, 1875, 56, 52, 1880, 1931, 56, 52, 56, 52, 56, 52, 1881, 1882, 56, 52, 56, 52, 1931, 1884, 56, 52, 56, 52, 56, 52, 56, 52, 1886, 1931, 56, 52, 56, 52, 1883, 1885, 56, 52, 1931, 1888, 1887, 56, 52, 1890, 56, 52, 56, 52, 1931, 1889, 1893, 1931, 1894, 1895, 1892, 1891, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1898, 56, 52, 1931, 1896, 1897, 56, 52, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 1931, 1899, 1902, 1931, 1900, 56, 52, 1903, 56, 52, 1901, 1931, 1904, 1931, 56, 52, 1931, 56, 52, 56, 52, 56, 52, 56, 52, 1905, 1931, 1906, 1907, 56, 52, 1931, 1909, 1910, 1911, 1931, 1908, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 1913, 56, 52, 56, 52, 1931, 56, 52, 1912, 1931, 1916, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1931, 1914, 56, 52, 1931, 1915, 1917, 1920, 1931, 1918, 56, 52, 56, 52, 56, 52, 56, 52, 1931, 56, 52, 56, 52, 1919, 1921, 56, 52, 56, 52, 1923, 1922, 56, 52, 56, 52, 56, 52, 1931, 1925, 1931, 1931, 1931, 1928, 1924, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1926, 1927, 1931, 1931, 1931, 1931, 1929, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1930, 45, 45, 45, 45, 45, 45, 45, 45, 50, 1931, 1931, 50, 50, 50, 50, 54, 54, 54, 54, 54, 96, 96, 96, 96, 98, 98, 98, 157, 1931, 157, 231, 1931, 1931, 231, 3, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 0 }; // idb __int16 word_A3C420[] = { 0 }; // weak __int16 word_A3C422[6699] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 23, 23, 24, 24, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 27, 27, 29, 29, 54, 54, 1933, 34, 34, 39, 39, 61, 61, 100, 26, 26, 25, 25, 100, 29, 24, 157, 24, 28, 28, 34, 30, 30, 61, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 25, 26, 26, 39, 28, 95, 25, 31, 31, 32, 32, 52, 28, 30, 50, 33, 33, 57, 57, 47, 35, 35, 36, 36, 93, 37, 37, 45, 58, 58, 59, 59, 31, 33, 44, 60, 60, 35, 32, 32, 35, 8, 37, 36, 63, 63, 64, 64, 35, 37, 33, 33, 37, 57, 35, 35, 37, 62, 62, 93, 59, 37, 38, 38, 58, 60, 63, 65, 65, 66, 66, 67, 67, 62, 69, 69, 5, 70, 70, 38, 3, 38, 64, 38, 68, 68, 72, 72, 71, 71, 158, 67, 158, 38, 0, 65, 38, 38, 38, 40, 66, 40, 40, 40, 40, 40, 40, 40, 40, 40, 71, 0, 69, 70, 0, 72, 68, 0, 73, 73, 96, 96, 77, 77, 83, 83, 92, 92, 76, 76, 0, 74, 74, 0, 40, 51, 51, 51, 51, 51, 51, 51, 51, 51, 73, 76, 83, 92, 79, 79, 74, 75, 75, 77, 51, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 74, 75, 78, 78, 0, 55, 55, 55, 55, 55, 55, 55, 79, 80, 80, 79, 0, 75, 78, 81, 81, 75, 75, 82, 82, 0, 84, 84, 0, 85, 85, 0, 86, 86, 78, 0, 81, 87, 87, 159, 78, 159, 80, 84, 0, 85, 88, 88, 82, 85, 0, 80, 89, 89, 94, 94, 85, 86, 0, 86, 91, 91, 90, 90, 0, 102, 102, 105, 105, 89, 94, 112, 112, 103, 103, 0, 91, 87, 88, 90, 104, 104, 91, 0, 106, 106, 94, 0, 105, 89, 102, 112, 94, 108, 108, 91, 0, 90, 97, 97, 97, 97, 97, 97, 97, 97, 97, 103, 109, 109, 0, 104, 110, 110, 108, 107, 107, 97, 99, 106, 99, 111, 111, 99, 99, 99, 99, 99, 99, 99, 99, 99, 107, 0, 107, 107, 113, 113, 107, 111, 114, 114, 109, 115, 115, 0, 107, 110, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 0, 114, 122, 122, 113, 160, 117, 160, 123, 123, 124, 124, 115, 118, 125, 125, 126, 126, 122, 0, 121, 119, 0, 116, 123, 0, 124, 127, 127, 123, 0, 120, 0, 121, 128, 128, 129, 129, 0, 126, 130, 130, 126, 131, 131, 0, 127, 132, 132, 0, 125, 133, 133, 134, 134, 135, 135, 129, 136, 136, 130, 137, 137, 139, 139, 140, 140, 0, 128, 138, 138, 0, 133, 134, 141, 141, 142, 142, 0, 132, 131, 140, 0, 139, 137, 135, 138, 0, 138, 138, 141, 143, 143, 0, 136, 144, 144, 145, 145, 146, 146, 147, 147, 0, 138, 138, 0, 142, 148, 148, 0, 144, 0, 143, 149, 149, 150, 150, 151, 151, 146, 152, 152, 0, 148, 154, 154, 145, 183, 183, 147, 155, 155, 149, 149, 161, 161, 0, 150, 163, 163, 0, 162, 162, 154, 156, 156, 164, 164, 149, 152, 0, 151, 149, 0, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 155, 156, 162, 165, 165, 161, 166, 166, 163, 167, 167, 164, 168, 168, 0, 169, 169, 164, 170, 170, 171, 171, 172, 172, 173, 173, 0, 174, 174, 0, 175, 175, 0, 168, 176, 176, 170, 0, 165, 171, 167, 0, 166, 169, 174, 173, 177, 177, 178, 178, 170, 175, 179, 179, 0, 176, 181, 181, 0, 180, 180, 182, 182, 172, 184, 184, 185, 185, 0, 178, 188, 188, 190, 190, 0, 181, 179, 180, 0, 180, 177, 0, 180, 0, 191, 191, 182, 192, 192, 184, 196, 196, 195, 195, 190, 187, 187, 193, 193, 0, 194, 194, 185, 186, 186, 188, 199, 199, 192, 197, 197, 196, 202, 202, 0, 187, 0, 187, 191, 198, 198, 186, 186, 186, 186, 187, 195, 187, 193, 0, 187, 194, 187, 186, 197, 186, 204, 204, 186, 186, 189, 189, 189, 0, 189, 200, 200, 198, 0, 201, 201, 202, 189, 0, 189, 203, 203, 189, 189, 189, 205, 205, 206, 206, 204, 0, 200, 201, 207, 207, 0, 208, 208, 209, 209, 0, 203, 0, 210, 210, 212, 212, 211, 211, 0, 215, 215, 206, 0, 207, 0, 205, 208, 208, 213, 213, 0, 205, 210, 210, 207, 211, 216, 216, 0, 217, 217, 209, 218, 218, 213, 0, 212, 0, 211, 219, 219, 211, 214, 214, 215, 222, 222, 220, 220, 218, 218, 218, 221, 221, 228, 228, 219, 223, 223, 214, 214, 217, 214, 224, 224, 0, 218, 0, 218, 0, 214, 214, 220, 223, 214, 0, 222, 214, 225, 225, 226, 226, 224, 0, 221, 228, 229, 229, 230, 230, 232, 232, 233, 233, 0, 225, 234, 234, 235, 235, 226, 236, 236, 0, 237, 237, 238, 238, 239, 239, 233, 242, 242, 240, 240, 235, 0, 229, 226, 241, 241, 0, 230, 243, 243, 234, 232, 244, 244, 245, 245, 246, 246, 236, 237, 240, 0, 242, 239, 247, 247, 0, 238, 0, 243, 248, 248, 249, 249, 0, 241, 250, 250, 251, 251, 252, 252, 253, 253, 255, 255, 245, 0, 244, 254, 254, 0, 247, 256, 256, 257, 257, 252, 0, 253, 248, 249, 258, 258, 259, 259, 254, 260, 260, 0, 254, 250, 255, 0, 251, 261, 261, 263, 263, 253, 262, 262, 264, 264, 0, 257, 0, 265, 265, 256, 267, 267, 260, 266, 266, 260, 269, 269, 259, 268, 268, 0, 258, 0, 268, 262, 261, 267, 270, 270, 0, 267, 0, 264, 271, 271, 0, 263, 265, 0, 268, 0, 265, 0, 269, 266, 272, 272, 273, 273, 0, 271, 271, 274, 274, 0, 275, 275, 0, 270, 276, 276, 278, 278, 277, 277, 273, 0, 273, 0, 272, 279, 279, 280, 280, 281, 281, 282, 282, 283, 283, 275, 0, 273, 275, 277, 284, 284, 274, 286, 286, 276, 281, 278, 282, 285, 285, 0, 282, 287, 287, 0, 279, 284, 280, 288, 288, 0, 280, 0, 283, 289, 289, 0, 285, 290, 290, 291, 291, 286, 292, 292, 287, 0, 293, 293, 294, 294, 295, 295, 296, 296, 297, 297, 298, 298, 299, 299, 291, 0, 288, 300, 300, 294, 0, 289, 301, 301, 0, 290, 302, 302, 305, 305, 292, 293, 303, 303, 299, 304, 304, 297, 296, 306, 306, 307, 307, 301, 298, 300, 308, 308, 0, 303, 0, 304, 0, 305, 0, 302, 309, 309, 307, 310, 310, 312, 312, 308, 313, 313, 302, 316, 316, 306, 0, 314, 314, 315, 315, 310, 317, 317, 318, 318, 0, 312, 319, 319, 320, 320, 322, 322, 309, 311, 311, 0, 313, 0, 315, 0, 314, 0, 316, 318, 320, 313, 314, 0, 316, 0, 311, 321, 321, 0, 317, 311, 311, 0, 319, 318, 0, 311, 311, 311, 0, 311, 311, 322, 323, 323, 324, 324, 325, 325, 326, 326, 327, 327, 0, 321, 328, 328, 329, 329, 0, 330, 330, 332, 332, 336, 336, 324, 0, 325, 331, 331, 335, 335, 327, 323, 0, 328, 0, 326, 330, 330, 333, 333, 334, 334, 331, 0, 336, 337, 337, 0, 329, 330, 0, 332, 338, 338, 339, 339, 340, 340, 335, 333, 0, 334, 341, 341, 342, 342, 343, 343, 344, 344, 339, 345, 345, 340, 346, 346, 347, 347, 349, 349, 337, 350, 350, 343, 0, 342, 348, 348, 351, 351, 0, 339, 352, 352, 347, 353, 353, 350, 341, 346, 354, 354, 344, 355, 355, 0, 345, 348, 352, 356, 356, 0, 349, 0, 357, 357, 358, 358, 0, 351, 0, 354, 360, 360, 355, 359, 359, 361, 361, 362, 362, 363, 363, 356, 357, 364, 364, 0, 365, 365, 366, 366, 367, 367, 368, 368, 361, 369, 369, 370, 370, 358, 371, 371, 359, 0, 360, 0, 364, 365, 362, 366, 0, 361, 0, 368, 363, 372, 372, 373, 373, 370, 367, 374, 374, 369, 375, 375, 376, 376, 377, 377, 378, 378, 379, 379, 380, 380, 371, 381, 381, 382, 382, 0, 373, 383, 383, 375, 374, 384, 384, 372, 378, 379, 373, 385, 385, 0, 376, 0, 382, 386, 386, 387, 387, 388, 388, 380, 389, 389, 377, 390, 390, 381, 391, 391, 392, 392, 393, 393, 384, 388, 386, 394, 394, 0, 383, 387, 395, 395, 396, 396, 390, 397, 397, 0, 385, 0, 389, 398, 398, 393, 391, 399, 399, 400, 400, 0, 392, 402, 402, 401, 401, 403, 403, 396, 0, 394, 404, 404, 406, 406, 397, 395, 405, 405, 407, 407, 0, 398, 408, 408, 409, 409, 0, 410, 410, 0, 399, 400, 401, 411, 411, 399, 0, 402, 0, 407, 403, 405, 412, 412, 404, 413, 413, 406, 414, 414, 415, 415, 416, 416, 418, 418, 408, 410, 419, 419, 409, 417, 417, 0, 420, 420, 412, 411, 0, 421, 421, 0, 415, 416, 422, 422, 0, 413, 423, 423, 417, 0, 414, 420, 424, 424, 418, 421, 421, 425, 425, 426, 426, 0, 419, 423, 431, 431, 421, 427, 427, 428, 428, 0, 429, 429, 430, 430, 421, 422, 432, 432, 0, 424, 0, 426, 427, 433, 433, 427, 0, 431, 0, 430, 425, 0, 427, 432, 434, 434, 0, 428, 429, 427, 435, 435, 436, 436, 0, 437, 437, 438, 438, 439, 439, 440, 440, 0, 433, 441, 441, 0, 442, 442, 443, 443, 436, 445, 445, 434, 437, 446, 446, 444, 444, 447, 447, 449, 449, 434, 438, 435, 442, 450, 450, 451, 451, 0, 439, 446, 0, 440, 443, 441, 444, 445, 452, 452, 453, 453, 454, 454, 0, 456, 456, 0, 447, 448, 448, 449, 455, 455, 450, 451, 0, 451, 457, 457, 458, 458, 0, 454, 456, 0, 448, 448, 448, 448, 448, 459, 459, 452, 455, 460, 460, 0, 448, 0, 453, 461, 461, 0, 448, 0, 457, 462, 462, 463, 463, 458, 464, 464, 465, 465, 459, 466, 466, 0, 461, 0, 467, 467, 461, 469, 469, 470, 470, 460, 0, 463, 462, 471, 471, 472, 472, 473, 473, 474, 474, 475, 475, 476, 476, 462, 464, 467, 0, 465, 0, 466, 468, 468, 0, 470, 484, 484, 477, 477, 0, 469, 493, 493, 474, 0, 473, 471, 0, 472, 468, 468, 0, 476, 468, 477, 0, 475, 478, 478, 0, 468, 479, 479, 468, 480, 480, 468, 468, 468, 481, 481, 482, 482, 483, 483, 0, 478, 0, 479, 485, 485, 486, 486, 0, 480, 480, 480, 480, 482, 0, 487, 487, 488, 488, 481, 0, 480, 490, 490, 480, 489, 489, 486, 483, 491, 491, 492, 492, 494, 494, 485, 487, 495, 495, 490, 0, 496, 496, 497, 497, 0, 491, 498, 498, 488, 499, 499, 489, 494, 500, 500, 0, 495, 496, 501, 501, 502, 502, 0, 503, 503, 492, 504, 504, 0, 492, 505, 505, 0, 497, 0, 500, 498, 506, 506, 0, 499, 507, 507, 508, 508, 0, 509, 509, 0, 502, 0, 504, 501, 503, 510, 510, 506, 511, 511, 510, 512, 512, 508, 0, 507, 509, 513, 513, 514, 514, 516, 516, 505, 0, 511, 515, 515, 517, 517, 518, 518, 520, 520, 519, 519, 0, 521, 521, 0, 512, 522, 522, 0, 513, 523, 523, 517, 524, 524, 525, 525, 0, 519, 519, 514, 0, 516, 526, 526, 515, 518, 519, 520, 527, 527, 519, 521, 528, 528, 0, 519, 522, 529, 529, 530, 530, 533, 533, 525, 0, 523, 0, 526, 531, 531, 532, 532, 534, 534, 535, 535, 537, 537, 536, 536, 529, 538, 538, 0, 528, 539, 539, 531, 540, 540, 527, 541, 541, 534, 530, 536, 0, 542, 542, 532, 543, 543, 544, 544, 545, 545, 0, 537, 541, 0, 535, 0, 546, 546, 539, 547, 547, 538, 542, 544, 0, 543, 548, 548, 549, 549, 550, 550, 551, 551, 552, 552, 545, 546, 554, 554, 553, 553, 555, 555, 0, 548, 556, 556, 560, 560, 0, 557, 557, 0, 558, 558, 547, 559, 559, 0, 561, 561, 562, 562, 0, 549, 554, 555, 557, 551, 552, 553, 558, 563, 563, 564, 564, 0, 559, 0, 556, 561, 0, 560, 565, 565, 566, 566, 567, 567, 562, 568, 568, 569, 569, 570, 570, 0, 563, 0, 564, 571, 571, 573, 573, 567, 0, 565, 572, 572, 0, 566, 0, 574, 574, 575, 575, 576, 576, 577, 577, 579, 579, 569, 578, 578, 580, 580, 568, 0, 574, 571, 0, 572, 0, 570, 0, 573, 574, 581, 581, 578, 582, 582, 583, 583, 0, 576, 584, 584, 575, 577, 0, 579, 585, 585, 586, 586, 580, 587, 587, 588, 588, 589, 589, 0, 590, 590, 0, 584, 591, 591, 0, 583, 593, 593, 581, 0, 582, 587, 592, 592, 594, 594, 595, 595, 0, 587, 596, 596, 585, 586, 588, 0, 589, 590, 0, 592, 591, 597, 597, 598, 598, 599, 599, 592, 594, 0, 593, 600, 600, 601, 601, 602, 602, 0, 595, 603, 603, 596, 604, 604, 599, 605, 605, 606, 606, 0, 607, 607, 610, 610, 608, 608, 597, 609, 609, 603, 598, 599, 0, 611, 611, 600, 612, 612, 0, 610, 601, 0, 602, 613, 613, 614, 614, 0, 606, 604, 605, 607, 608, 615, 615, 616, 616, 609, 611, 617, 617, 0, 614, 618, 618, 619, 619, 620, 620, 621, 621, 612, 622, 622, 623, 623, 624, 624, 0, 613, 625, 625, 619, 0, 615, 0, 616, 626, 626, 0, 617, 618, 0, 622, 627, 627, 0, 624, 620, 623, 628, 628, 629, 629, 0, 621, 622, 630, 630, 631, 631, 0, 626, 632, 632, 0, 625, 633, 633, 0, 629, 628, 634, 634, 630, 0, 627, 635, 635, 0, 631, 636, 636, 637, 637, 638, 638, 639, 639, 641, 641, 632, 640, 640, 642, 642, 643, 643, 646, 646, 644, 644, 635, 633, 645, 645, 638, 0, 634, 647, 647, 636, 648, 648, 637, 649, 649, 0, 639, 641, 644, 639, 650, 650, 640, 651, 651, 652, 652, 0, 642, 0, 643, 653, 653, 654, 654, 0, 645, 655, 655, 656, 656, 649, 657, 657, 0, 650, 658, 658, 659, 659, 660, 660, 653, 661, 661, 654, 662, 662, 651, 663, 663, 0, 657, 664, 664, 0, 655, 660, 665, 665, 661, 667, 667, 656, 0, 666, 666, 668, 668, 0, 658, 669, 669, 0, 664, 659, 670, 670, 0, 671, 671, 0, 662, 672, 672, 663, 666, 673, 673, 674, 674, 0, 667, 677, 677, 665, 675, 675, 668, 671, 0, 669, 676, 676, 672, 678, 678, 676, 673, 679, 679, 671, 670, 0, 671, 0, 671, 675, 680, 680, 681, 681, 682, 682, 0, 674, 0, 677, 683, 683, 679, 684, 684, 685, 685, 686, 686, 681, 0, 678, 687, 687, 688, 688, 689, 689, 690, 690, 0, 680, 0, 684, 691, 691, 692, 692, 0, 687, 0, 686, 682, 0, 683, 693, 693, 689, 0, 685, 694, 694, 695, 695, 0, 691, 690, 0, 692, 0, 688, 696, 696, 697, 697, 698, 698, 699, 699, 700, 700, 0, 695, 701, 701, 0, 693, 0, 696, 702, 702, 703, 703, 0, 699, 0, 704, 704, 705, 705, 700, 0, 697, 706, 706, 698, 707, 707, 708, 708, 709, 709, 710, 710, 711, 711, 0, 701, 702, 705, 712, 712, 713, 713, 714, 714, 715, 715, 0, 703, 704, 716, 716, 706, 717, 717, 718, 718, 709, 713, 0, 707, 0, 715, 708, 711, 710, 719, 719, 716, 720, 720, 723, 723, 712, 721, 721, 0, 714, 722, 722, 0, 717, 724, 724, 725, 725, 726, 726, 0, 718, 727, 727, 0, 728, 728, 729, 729, 730, 730, 723, 724, 0, 719, 720, 731, 731, 721, 732, 732, 733, 733, 734, 734, 722, 728, 736, 736, 0, 730, 725, 735, 735, 726, 0, 732, 727, 737, 737, 738, 738, 739, 739, 740, 740, 731, 736, 0, 741, 741, 743, 743, 734, 742, 742, 733, 735, 738, 737, 0, 735, 744, 744, 745, 745, 746, 746, 747, 747, 748, 748, 749, 749, 751, 751, 739, 741, 0, 742, 0, 744, 743, 750, 750, 753, 753, 746, 747, 752, 752, 751, 754, 754, 755, 755, 756, 756, 745, 757, 757, 0, 748, 758, 758, 0, 749, 0, 753, 0, 752, 750, 0, 756, 759, 759, 0, 755, 760, 760, 757, 0, 754, 0, 754, 753, 761, 761, 762, 762, 763, 763, 764, 764, 0, 765, 765, 758, 766, 766, 0, 767, 767, 768, 768, 0, 760, 763, 769, 769, 759, 770, 770, 771, 771, 772, 772, 761, 773, 773, 768, 0, 762, 765, 0, 762, 0, 764, 774, 774, 766, 767, 0, 766, 769, 772, 775, 775, 776, 776, 0, 770, 777, 777, 771, 0, 773, 778, 778, 779, 779, 780, 780, 781, 781, 776, 782, 782, 774, 784, 784, 775, 783, 783, 785, 785, 786, 786, 787, 787, 0, 777, 788, 788, 789, 789, 0, 778, 0, 780, 779, 790, 790, 786, 781, 791, 791, 783, 792, 792, 0, 789, 782, 784, 793, 793, 794, 794, 787, 795, 795, 0, 791, 0, 785, 796, 796, 788, 797, 797, 798, 798, 799, 799, 800, 800, 801, 801, 0, 795, 0, 790, 0, 802, 802, 0, 794, 804, 804, 803, 803, 793, 805, 805, 806, 806, 807, 807, 0, 801, 0, 798, 808, 808, 809, 809, 799, 810, 810, 811, 811, 0, 800, 802, 803, 812, 812, 0, 804, 808, 809, 813, 813, 805, 814, 814, 815, 815, 816, 816, 806, 0, 807, 817, 817, 818, 818, 819, 819, 821, 821, 819, 0, 812, 820, 820, 814, 822, 822, 823, 823, 824, 824, 825, 825, 826, 826, 827, 827, 821, 818, 0, 817, 815, 828, 828, 829, 829, 830, 830, 0, 832, 832, 0, 818, 822, 824, 834, 834, 820, 833, 833, 0, 826, 823, 831, 831, 827, 831, 831, 831, 831, 832, 0, 829, 828, 0, 833, 835, 835, 0, 834, 836, 836, 837, 837, 0, 837, 837, 837, 837, 840, 840, 0, 838, 838, 835, 838, 838, 838, 838, 0, 836, 839, 839, 841, 841, 842, 842, 839, 843, 843, 0, 835, 844, 844, 845, 845, 846, 846, 847, 847, 839, 848, 848, 849, 849, 850, 850, 851, 851, 0, 843, 852, 852, 853, 853, 0, 842, 854, 854, 841, 855, 855, 0, 844, 856, 856, 848, 847, 845, 857, 857, 858, 858, 859, 859, 851, 852, 0, 854, 0, 848, 856, 860, 860, 861, 861, 862, 862, 863, 863, 855, 864, 864, 865, 865, 866, 866, 0, 867, 867, 857, 868, 868, 859, 869, 869, 0, 870, 870, 0, 865, 0, 871, 871, 864, 872, 872, 0, 863, 867, 874, 874, 862, 873, 873, 875, 875, 866, 870, 0, 868, 0, 872, 876, 876, 877, 877, 0, 878, 878, 869, 871, 880, 880, 873, 875, 879, 879, 881, 881, 0, 882, 882, 0, 874, 883, 883, 884, 884, 0, 885, 885, 876, 880, 0, 881, 886, 886, 0, 877, 878, 887, 887, 0, 879, 882, 883, 885, 888, 888, 0, 884, 889, 889, 890, 890, 891, 891, 887, 892, 892, 893, 893, 0, 886, 894, 894, 895, 895, 896, 896, 889, 0, 891, 0, 897, 897, 898, 898, 888, 0, 899, 899, 900, 900, 0, 901, 901, 896, 890, 902, 902, 903, 903, 894, 904, 904, 893, 897, 0, 899, 899, 895, 899, 905, 905, 906, 906, 898, 903, 0, 907, 907, 900, 901, 908, 908, 899, 909, 909, 0, 902, 910, 910, 905, 911, 911, 904, 907, 912, 912, 913, 913, 914, 914, 915, 915, 916, 916, 917, 917, 0, 906, 918, 918, 911, 910, 920, 920, 919, 919, 0, 909, 0, 916, 921, 921, 915, 922, 922, 912, 917, 914, 913, 920, 918, 916, 919, 0, 923, 923, 0, 918, 924, 924, 922, 925, 925, 920, 926, 926, 927, 927, 928, 928, 921, 923, 929, 929, 922, 932, 932, 0, 930, 930, 0, 926, 933, 933, 931, 931, 934, 934, 935, 935, 936, 936, 925, 929, 924, 930, 937, 937, 938, 938, 927, 931, 0, 928, 934, 931, 0, 932, 0, 935, 939, 939, 940, 940, 937, 941, 941, 0, 933, 938, 942, 942, 943, 943, 0, 936, 944, 944, 945, 945, 946, 946, 0, 940, 947, 947, 948, 948, 949, 949, 950, 950, 951, 951, 952, 952, 941, 939, 953, 953, 942, 947, 954, 954, 956, 956, 945, 955, 955, 956, 956, 946, 957, 957, 0, 950, 958, 958, 949, 0, 948, 959, 959, 0, 952, 960, 960, 0, 951, 961, 961, 0, 962, 962, 953, 963, 963, 955, 964, 964, 965, 965, 966, 966, 967, 967, 957, 968, 968, 969, 969, 0, 958, 962, 970, 970, 0, 959, 971, 971, 963, 965, 0, 961, 973, 973, 0, 964, 972, 972, 967, 0, 966, 974, 974, 975, 975, 0, 976, 976, 977, 977, 0, 968, 0, 972, 978, 978, 970, 979, 979, 980, 980, 0, 971, 976, 0, 972, 972, 981, 981, 0, 982, 982, 0, 975, 982, 978, 983, 983, 977, 0, 980, 984, 984, 0, 981, 985, 985, 986, 986, 0, 987, 987, 989, 989, 988, 988, 990, 990, 991, 991, 989, 983, 985, 992, 992, 995, 995, 993, 993, 994, 994, 0, 984, 996, 996, 997, 997, 998, 998, 0, 990, 0, 998, 986, 987, 988, 993, 0, 994, 999, 999, 1000, 1000, 1001, 1001, 0, 995, 1002, 1002, 997, 1003, 1003, 1004, 1004, 1005, 1005, 1006, 1006, 1007, 1007, 1008, 1008, 1009, 1009, 996, 0, 1009, 0, 1009, 1010, 1010, 0, 1011, 1011, 1012, 1012, 1013, 1013, 1014, 1014, 1003, 0, 1004, 0, 1005, 0, 1006, 0, 1007, 1011, 0, 1008, 1015, 1015, 0, 1014, 1016, 1016, 1017, 1017, 0, 1012, 1018, 1018, 1010, 1019, 1019, 1020, 1020, 1021, 1021, 0, 1013, 1022, 1022, 1023, 1023, 1016, 1024, 1024, 1025, 1025, 1015, 1026, 1026, 1027, 1027, 0, 1021, 1028, 1028, 1029, 1029, 1018, 1030, 1030, 1031, 1031, 0, 1024, 1032, 1032, 0, 1020, 1026, 1033, 1033, 1022, 1034, 1034, 0, 1023, 1035, 1035, 0, 1030, 1025, 1036, 1036, 1037, 1037, 1027, 1033, 1029, 1038, 1038, 1039, 1039, 1040, 1040, 1041, 1041, 1042, 1042, 1043, 1043, 1044, 1044, 1045, 1045, 1037, 0, 1034, 1046, 1046, 1047, 1047, 1048, 1048, 1049, 1049, 1041, 1050, 1050, 1051, 1051, 1038, 1039, 1052, 1052, 1046, 1053, 1053, 1047, 1054, 1054, 0, 1045, 0, 1043, 1044, 1055, 1055, 1056, 1056, 1057, 1057, 1058, 1058, 1059, 1059, 1060, 1060, 1052, 1061, 1061, 1062, 1062, 1050, 1064, 1064, 1051, 1063, 1063, 0, 1053, 1055, 0, 1056, 1065, 1065, 1066, 1066, 1062, 1067, 1067, 0, 1058, 0, 1061, 1059, 0, 1057, 1063, 1068, 1068, 1069, 1069, 1060, 0, 1065, 1066, 1070, 1070, 1071, 1071, 0, 1064, 1072, 1072, 1073, 1073, 0, 1074, 1074, 1075, 1075, 1076, 1076, 1070, 1067, 0, 1068, 1071, 1077, 1077, 0, 1073, 0, 1072, 1078, 1078, 0, 1069, 1074, 1079, 1079, 1080, 1080, 1081, 1081, 1082, 1082, 1083, 1083, 1077, 1084, 1084, 1076, 1075, 1085, 1085, 0, 1086, 1086, 1078, 1087, 1087, 1088, 1088, 1083, 0, 1080, 0, 1081, 1079, 1082, 1089, 1089, 0, 1090, 1090, 1091, 1091, 1092, 1092, 1093, 1093, 1095, 1095, 1094, 1094, 1084, 0, 1085, 1086, 1096, 1096, 0, 1091, 1097, 1097, 1088, 0, 1087, 1098, 1098, 1099, 1099, 1089, 1090, 1094, 1100, 1100, 0, 1096, 1093, 0, 1092, 0, 1095, 1101, 1101, 0, 1101, 1101, 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1097, 0, 1100, 1105, 1105, 1098, 0, 1099, 1106, 1106, 1107, 1107, 1108, 1108, 0, 1103, 1109, 1109, 1110, 1110, 1105, 0, 1102, 1111, 1111, 1112, 1112, 1113, 1113, 1115, 1115, 1107, 1108, 0, 1104, 1114, 1114, 1116, 1116, 1117, 1117, 0, 1118, 1118, 1119, 1119, 1109, 0, 1106, 1120, 1120, 1121, 1121, 0, 1110, 1122, 1122, 1123, 1123, 1112, 1114, 1124, 1124, 1113, 0, 1115, 0, 1116, 1125, 1125, 1126, 1126, 1120, 1127, 1127, 0, 1117, 1118, 1128, 1128, 1129, 1129, 1124, 1130, 1130, 1131, 1131, 1132, 1132, 0, 1133, 1133, 1127, 1123, 1134, 1134, 0, 1129, 1135, 1135, 1136, 1136, 0, 1137, 1137, 0, 1138, 1138, 1132, 1139, 1139, 0, 1128, 1140, 1140, 1141, 1141, 1130, 1133, 1134, 1137, 1131, 0, 1135, 1142, 1142, 1143, 1143, 1139, 1144, 1144, 1138, 1145, 1145, 0, 1141, 1136, 1138, 1146, 1146, 0, 1140, 1147, 1147, 1148, 1148, 1149, 1149, 0, 1142, 1150, 1150, 1151, 1151, 0, 1152, 1152, 1153, 1153, 1154, 1154, 1155, 1155, 0, 1154, 1144, 1156, 1156, 1157, 1157, 1150, 1152, 1147, 0, 1158, 1158, 1159, 1159, 1148, 0, 1146, 1160, 1160, 1161, 1161, 0, 1151, 0, 1155, 1162, 1162, 1163, 1163, 1164, 1164, 1165, 1165, 1166, 1166, 0, 1156, 1167, 1167, 0, 1157, 1158, 1159, 1168, 1168, 1169, 1169, 1170, 1170, 1171, 1171, 1172, 1172, 1173, 1173, 1174, 1174, 1175, 1175, 1165, 1176, 1176, 0, 1166, 1177, 1177, 0, 1167, 1178, 1178, 1179, 1179, 0, 1173, 1171, 1180, 1180, 0, 1168, 1172, 1174, 0, 1169, 0, 1170, 1181, 1181, 1175, 1178, 1182, 1182, 0, 1183, 1183, 1184, 1184, 0, 1185, 1185, 1179, 1177, 1186, 1186, 1187, 1187, 1188, 1188, 1189, 1189, 0, 1180, 1190, 1190, 1191, 1191, 1192, 1192, 1193, 1193, 0, 1181, 0, 1184, 1194, 1194, 1182, 1183, 1185, 1195, 1195, 1196, 1196, 1197, 1197, 1198, 1198, 1186, 1200, 1200, 1188, 1194, 1201, 1201, 1189, 0, 1190, 0, 1192, 1199, 1199, 1202, 1202, 1198, 0, 1193, 1203, 1203, 0, 1196, 1204, 1204, 1201, 1205, 1205, 0, 1199, 1197, 1202, 1206, 1206, 1207, 1207, 1208, 1208, 1209, 1209, 1210, 1210, 1211, 1211, 1204, 1212, 1212, 1213, 1213, 1203, 1214, 1214, 1215, 1215, 0, 1208, 1207, 0, 1216, 1216, 1217, 1217, 1205, 1218, 1218, 0, 1206, 0, 1213, 1210, 1219, 1219, 1220, 1220, 1221, 1221, 1224, 1224, 1209, 0, 1215, 0, 1212, 1222, 1222, 1223, 1223, 1225, 1225, 1226, 1226, 1214, 1216, 0, 1227, 1227, 1217, 1219, 1218, 1228, 1228, 1221, 1229, 1229, 1224, 1222, 1220, 1230, 1230, 1221, 1231, 1231, 1225, 1232, 1232, 1223, 1233, 1233, 1234, 1234, 0, 1226, 1227, 1235, 1235, 1236, 1236, 1228, 1230, 1237, 1237, 1238, 1238, 1231, 1229, 1239, 1239, 1240, 1240, 1242, 1242, 1234, 1241, 1241, 1233, 1233, 1243, 1243, 1245, 1245, 0, 1238, 1244, 1244, 1246, 1246, 1247, 1247, 1248, 1248, 0, 1236, 0, 1237, 0, 1243, 1241, 1249, 1249, 1244, 1239, 1250, 1250, 1240, 0, 1246, 1242, 1251, 1251, 1252, 1252, 1254, 1254, 1245, 1253, 1253, 1255, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1259, 1260, 1260, 1251, 1261, 1261, 1253, 1262, 1262, 1264, 1264, 0, 1263, 1263, 1254, 1257, 1263, 1263, 1263, 0, 1252, 1265, 1265, 1266, 1266, 1267, 1267, 0, 1259, 1268, 1268, 0, 1264, 1269, 1269, 1270, 1270, 1271, 1271, 0, 1272, 1272, 1273, 1273, 0, 1266, 1267, 1262, 1274, 1274, 1275, 1275, 1276, 1276, 1268, 1265, 1277, 1277, 0, 1273, 1278, 1278, 1279, 1279, 1280, 1280, 1281, 1281, 1271, 1275, 0, 1270, 1272, 0, 1277, 0, 1274, 1276, 1282, 1282, 1283, 1283, 1284, 1284, 1285, 1285, 0, 1279, 1286, 1286, 0, 1278, 0, 1287, 1287, 0, 1288, 1288, 1289, 1289, 1290, 1290, 1289, 0, 1280, 1292, 1292, 0, 1282, 1285, 1287, 1286, 1294, 1294, 1295, 1295, 1283, 1288, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1293, 1293, 1296, 1296, 1293, 0, 1293, 1295, 1297, 1297, 1298, 1298, 1299, 1299, 1300, 1300, 1301, 1301, 1302, 1302, 1303, 1303, 1304, 1304, 1305, 1305, 1306, 1306, 0, 1297, 1307, 1307, 0, 1308, 1308, 0, 1309, 1309, 1296, 1310, 1310, 1311, 1311, 1306, 1298, 1300, 1312, 1312, 1313, 1313, 1304, 1314, 1314, 1315, 1315, 0, 1305, 1303, 1308, 1309, 1316, 1316, 1317, 1317, 0, 1313, 1318, 1318, 1319, 1319, 1320, 1320, 1311, 1321, 1321, 1310, 1322, 1322, 1323, 1323, 0, 1324, 1324, 1325, 1325, 1326, 1326, 1317, 0, 1327, 1327, 1318, 1328, 1328, 1329, 1329, 0, 1320, 1324, 1330, 1330, 1331, 1331, 0, 1319, 1332, 1332, 1322, 0, 1323, 1327, 1333, 1333, 1334, 1334, 1335, 1335, 1326, 1331, 1329, 1336, 1336, 0, 1328, 1337, 1337, 1338, 1338, 0, 1330, 1339, 1339, 0, 1334, 0, 1332, 1340, 1340, 0, 1335, 1341, 1341, 1345, 1345, 1342, 1342, 1337, 0, 1342, 0, 1342, 1333, 0, 1340, 1336, 1343, 1343, 1344, 1344, 1341, 0, 1342, 1338, 1342, 0, 1345, 1339, 1346, 1346, 1342, 1347, 1347, 1343, 0, 1344, 1348, 1348, 1349, 1349, 0, 1350, 1350, 1351, 1351, 1352, 1352, 1353, 1353, 1354, 1354, 1355, 1355, 1356, 1356, 1357, 1357, 1349, 1358, 1358, 0, 1348, 1350, 0, 1359, 1359, 1347, 1352, 1351, 1360, 1360, 1361, 1361, 1361, 1361, 1361, 1362, 1362, 1363, 1363, 0, 1356, 0, 1353, 0, 1354, 1355, 1365, 1365, 1366, 1366, 1357, 1359, 0, 1358, 1363, 1364, 1364, 1364, 1364, 1364, 1367, 1367, 1368, 1368, 1369, 1369, 1362, 0, 1360, 0, 1362, 1366, 1370, 1370, 1371, 1371, 1372, 1372, 1373, 1373, 1374, 1374, 1375, 1375, 1368, 1367, 1376, 1376, 1377, 1377, 0, 1368, 1371, 1370, 1378, 1378, 1379, 1379, 1369, 0, 1380, 1380, 1381, 1381, 1383, 1383, 1373, 1384, 1384, 1377, 1382, 1382, 1374, 1372, 0, 1382, 1375, 1380, 0, 1381, 1385, 1385, 1386, 1386, 1378, 1387, 1387, 1388, 1388, 1389, 1389, 1390, 1390, 1392, 1392, 1391, 1391, 1393, 1393, 0, 1394, 1394, 1396, 1396, 1395, 1395, 1387, 1397, 1397, 1398, 1398, 1399, 1399, 1400, 1400, 1401, 1401, 0, 1388, 1389, 1391, 1402, 1402, 1392, 1403, 1403, 0, 1390, 1394, 1395, 1397, 1404, 1404, 1405, 1405, 1406, 1406, 0, 1396, 1407, 1407, 1399, 1402, 1408, 1408, 0, 1398, 1409, 1409, 1403, 1404, 1410, 1410, 1411, 1411, 1412, 1412, 1405, 1413, 1413, 1414, 1414, 1415, 1415, 1416, 1416, 1417, 1417, 1418, 1418, 1419, 1419, 1420, 1420, 0, 1420, 1420, 1420, 1420, 1421, 1421, 1422, 1422, 1424, 1424, 1421, 1423, 1423, 1425, 1425, 1419, 1426, 1426, 0, 1427, 1427, 1428, 1428, 1430, 1430, 0, 1429, 1429, 1431, 1431, 0, 1432, 1432, 1433, 1433, 1434, 1434, 1435, 1435, 0, 1428, 0, 1422, 1436, 1436, 1423, 1424, 1427, 1426, 1425, 1429, 1437, 1437, 0, 1434, 1438, 1438, 1439, 1439, 1440, 1440, 0, 1431, 1432, 1441, 1441, 1442, 1442, 1443, 1443, 1444, 1444, 1437, 1433, 1445, 1445, 1439, 1446, 1446, 1447, 1447, 0, 1448, 1448, 0, 1438, 1448, 1443, 0, 1444, 1449, 1449, 1450, 1450, 1451, 1451, 1452, 1452, 1442, 1453, 1453, 0, 1445, 1454, 1454, 1455, 1455, 1456, 1456, 0, 1446, 1457, 1457, 1450, 1458, 1458, 0, 1459, 1459, 1460, 1460, 1462, 1462, 1461, 1461, 1463, 1463, 1452, 1463, 1463, 0, 1451, 1464, 1464, 0, 1454, 1453, 1465, 1465, 1467, 1467, 1455, 1458, 1461, 1466, 1466, 0, 1456, 1459, 1460, 0, 1457, 0, 1468, 1468, 1469, 1469, 1462, 1470, 1470, 1471, 1471, 1472, 1472, 0, 1465, 1473, 1473, 0, 1464, 1464, 1464, 0, 1474, 1474, 1466, 1468, 1475, 1475, 0, 1467, 1471, 0, 1470, 1476, 1476, 0, 1473, 1477, 1477, 1469, 1478, 1478, 1472, 1474, 1479, 1479, 0, 1475, 1480, 1480, 1481, 1481, 1482, 1482, 1483, 1483, 1484, 1484, 1485, 1485, 1486, 1486, 1487, 1487, 1476, 1488, 1488, 0, 1489, 1489, 0, 1482, 1481, 1477, 1490, 1490, 1491, 1491, 1492, 1492, 1493, 1493, 1494, 1494, 0, 1495, 1495, 1496, 1496, 0, 1483, 1490, 0, 1491, 0, 1488, 1489, 1497, 1497, 0, 1494, 1493, 1498, 1498, 1499, 1499, 1500, 1500, 1496, 1501, 1501, 0, 1492, 1495, 1502, 1502, 1503, 1503, 1497, 1504, 1504, 0, 1498, 1505, 1505, 1506, 1506, 1507, 1507, 1509, 1509, 1508, 1508, 1510, 1510, 1513, 1513, 1512, 1512, 0, 1499, 1501, 1500, 1511, 1511, 1514, 1514, 1515, 1515, 0, 1506, 1516, 1516, 1504, 1517, 1517, 1510, 1509, 1507, 1505, 1508, 1512, 1518, 1518, 1511, 1519, 1519, 1520, 1520, 0, 1519, 1513, 1521, 1521, 0, 1517, 1522, 1522, 1523, 1523, 1524, 1524, 1516, 1525, 1525, 1526, 1526, 1525, 0, 1525, 1527, 1527, 1528, 1528, 1529, 1529, 1530, 1530, 1518, 1531, 1531, 1532, 1532, 1533, 1533, 1534, 1534, 1535, 1535, 1536, 1536, 0, 1535, 1535, 0, 1537, 1537, 1538, 1538, 0, 1531, 1539, 1539, 1540, 1540, 0, 1536, 0, 1529, 1541, 1541, 1542, 1542, 1530, 1530, 1537, 1538, 1532, 1543, 1543, 1544, 1544, 1539, 1545, 1545, 1546, 1546, 0, 1540, 1547, 1547, 1548, 1548, 1549, 1549, 1551, 1551, 0, 1550, 1550, 1551, 1552, 1552, 1553, 1553, 1554, 1554, 0, 1542, 1556, 1556, 1543, 1555, 1555, 0, 1546, 0, 1544, 1557, 1557, 1558, 1558, 0, 1545, 1547, 1548, 1550, 1549, 1559, 1559, 1560, 1560, 1561, 1561, 1562, 1562, 0, 1554, 1557, 0, 1555, 1558, 1563, 1563, 1564, 1564, 0, 1556, 1565, 1565, 1566, 1566, 1567, 1567, 1568, 1568, 1569, 1569, 1570, 1570, 1571, 1571, 1572, 1572, 1573, 1573, 0, 1574, 1574, 1566, 1575, 1575, 1564, 1576, 1576, 1568, 1565, 1577, 1577, 1582, 1582, 1566, 1567, 1580, 1580, 0, 1569, 1578, 1578, 0, 1575, 0, 1570, 0, 1581, 1581, 1571, 0, 1573, 1577, 1572, 1574, 0, 1580, 1578, 1579, 1579, 1579, 1579, 0, 1576, 1581, 1583, 1583, 0, 1582, 1584, 1584, 1585, 1585, 1586, 1586, 1587, 1587, 0, 1588, 1588, 1589, 1589, 1590, 1590, 1591, 1591, 1592, 1592, 1593, 1593, 1584, 1594, 1594, 0, 1586, 1583, 1587, 1588, 1595, 1595, 1585, 1596, 1596, 1592, 1597, 1597, 0, 1598, 1598, 1589, 1599, 1599, 1600, 1600, 1602, 1602, 0, 1601, 1601, 0, 1594, 1603, 1603, 1604, 1604, 1605, 1605, 1595, 1598, 1606, 1606, 0, 1596, 0, 1597, 1599, 1600, 1601, 1607, 1607, 1608, 1608, 1603, 1609, 1609, 1610, 1610, 1611, 1611, 0, 1602, 1612, 1612, 1604, 1613, 1613, 1614, 1614, 1615, 1615, 1605, 1616, 1616, 0, 1606, 0, 1610, 1617, 1617, 1618, 1618, 0, 1619, 1619, 1620, 1620, 1621, 1621, 1622, 1622, 1623, 1623, 1624, 1624, 1625, 1625, 1626, 1626, 0, 1613, 1627, 1627, 1618, 1619, 0, 1621, 1622, 1628, 1628, 1624, 1629, 1629, 0, 1617, 1620, 0, 1620, 0, 1620, 1630, 1630, 1627, 1631, 1631, 1628, 1632, 1632, 1623, 1633, 1633, 0, 1629, 1626, 1634, 1634, 1635, 1635, 1636, 1636, 1637, 1637, 1638, 1638, 1639, 1639, 1640, 1640, 1641, 1641, 1632, 1634, 0, 1634, 1642, 1642, 0, 1630, 1644, 1644, 1633, 1643, 1643, 1645, 1645, 1646, 1646, 1647, 1647, 1648, 1648, 1649, 1649, 1638, 0, 1639, 1650, 1650, 1640, 1651, 1651, 1643, 0, 1652, 1652, 0, 1646, 1655, 1655, 1649, 1642, 1653, 1653, 1653, 1653, 1656, 1656, 1645, 1654, 1654, 1654, 1654, 1657, 1657, 1658, 1658, 1659, 1659, 1655, 0, 1650, 1652, 1660, 1660, 1651, 1661, 1661, 0, 1656, 1662, 1662, 1663, 1663, 1664, 1664, 1665, 1665, 1666, 1666, 1660, 1667, 1667, 1668, 1668, 0, 1659, 1657, 1669, 1669, 1658, 1664, 1670, 1670, 0, 1661, 1671, 1671, 1662, 1672, 1672, 0, 1667, 1673, 1673, 1669, 1674, 1674, 1663, 1675, 1675, 1676, 1676, 1668, 1677, 1677, 1678, 1678, 0, 1671, 1679, 1679, 1670, 1680, 1680, 1681, 1681, 1682, 1682, 1683, 1683, 1673, 1684, 1684, 0, 1672, 1685, 1685, 1673, 1686, 1686, 1687, 1687, 0, 1675, 0, 1681, 0, 1682, 1688, 1688, 1689, 1689, 1690, 1690, 1679, 1695, 1695, 1691, 1691, 1686, 1692, 1692, 1684, 1693, 1693, 0, 1685, 1689, 1694, 1694, 1696, 1696, 1690, 1688, 1691, 1697, 1697, 1692, 1698, 1698, 1693, 1699, 1699, 0, 1695, 1694, 0, 1696, 1700, 1700, 0, 1693, 1701, 1701, 1702, 1702, 1703, 1703, 1704, 1704, 1705, 1705, 1706, 1706, 1707, 1707, 1698, 1708, 1708, 1697, 1711, 1711, 1699, 1709, 1709, 1710, 1710, 1712, 1712, 1704, 1701, 0, 1700, 1713, 1713, 1714, 1714, 0, 1708, 1707, 1706, 1705, 1715, 1715, 1709, 0, 1710, 0, 1716, 1716, 1717, 1717, 1718, 1718, 1719, 1719, 1720, 1720, 0, 1721, 1721, 1722, 1722, 0, 1723, 1723, 1724, 1724, 1725, 1725, 0, 1719, 1726, 1726, 1718, 1717, 1721, 1727, 1727, 1728, 1728, 0, 1715, 1716, 1729, 1729, 1730, 1730, 1720, 1723, 0, 1731, 1731, 1732, 1732, 1733, 1733, 0, 1724, 1735, 1735, 1734, 1734, 0, 1725, 1727, 1736, 1736, 1729, 1737, 1737, 1738, 1738, 1739, 1739, 1728, 1731, 1732, 1734, 1740, 1740, 1741, 1741, 1742, 1742, 1743, 1743, 1744, 1744, 1745, 1745, 1746, 1746, 1748, 1748, 1739, 1747, 1747, 1740, 1751, 1751, 1741, 0, 1737, 1749, 1749, 1738, 0, 1746, 1750, 1750, 1752, 1752, 1743, 0, 1744, 1753, 1753, 1748, 0, 1749, 1745, 1754, 1754, 1747, 1750, 1755, 1755, 1756, 1756, 0, 1751, 1757, 1757, 1758, 1758, 1759, 1759, 0, 1752, 1760, 1760, 1761, 1761, 1762, 1762, 1763, 1763, 1764, 1764, 0, 1758, 0, 1754, 1765, 1765, 0, 1766, 1766, 0, 1756, 1767, 1767, 1768, 1768, 0, 1755, 1769, 1769, 1770, 1770, 0, 1771, 1771, 1772, 1772, 1760, 1773, 1773, 1774, 1774, 1775, 1775, 1776, 1776, 1765, 1779, 1779, 1764, 1766, 1777, 1777, 1778, 1778, 0, 1768, 1771, 1780, 1780, 0, 1776, 0, 1772, 0, 1775, 1769, 1773, 1781, 1781, 1782, 1782, 1779, 1783, 1783, 0, 1774, 1784, 1784, 0, 1777, 0, 1778, 1785, 1785, 0, 1780, 1786, 1786, 1787, 1787, 0, 1788, 1788, 1789, 1789, 1790, 1790, 0, 1791, 1791, 1792, 1792, 1793, 1793, 1783, 0, 1785, 0, 1784, 0, 1789, 0, 1790, 0, 1786, 1794, 1794, 1795, 1795, 0, 1787, 1788, 1791, 0, 1796, 1796, 1797, 1797, 1798, 1798, 0, 1792, 1799, 1799, 1800, 1800, 1793, 1801, 1801, 1802, 1802, 1803, 1803, 1804, 1804, 1805, 1805, 1806, 1806, 1807, 1807, 1808, 1808, 1809, 1809, 1811, 1811, 0, 1795, 1796, 1802, 0, 1805, 1810, 1810, 0, 1799, 0, 1804, 1812, 1812, 1808, 1803, 1807, 1813, 1813, 1814, 1814, 1815, 1815, 1810, 1816, 1816, 1817, 1817, 1809, 1818, 1818, 1819, 1819, 1812, 1811, 1820, 1820, 0, 1815, 1822, 1822, 1813, 0, 1814, 1821, 1821, 1818, 1823, 1823, 0, 1817, 1819, 1824, 1824, 0, 1820, 1816, 1825, 1825, 1826, 1826, 1821, 1827, 1827, 1828, 1828, 1829, 1829, 1830, 1830, 1831, 1831, 0, 1822, 1832, 1832, 1833, 1833, 0, 1834, 1834, 0, 1836, 1836, 1828, 1835, 1835, 0, 1826, 1829, 0, 1837, 1837, 0, 1838, 1838, 1839, 1839, 1840, 1840, 1830, 1836, 1841, 1841, 1833, 1832, 1831, 1834, 1837, 0, 1835, 1838, 1842, 1842, 1843, 1843, 1844, 1844, 0, 1841, 1848, 1848, 1840, 1845, 1845, 1846, 1846, 1847, 1847, 1849, 1849, 1850, 1850, 0, 1843, 0, 1844, 1851, 1851, 1845, 0, 1846, 1842, 1852, 1852, 0, 1853, 1853, 0, 1847, 1854, 1854, 0, 1849, 1855, 1855, 1847, 1856, 1856, 1857, 1857, 1858, 1858, 1859, 1859, 0, 1851, 1853, 1860, 1860, 1861, 1861, 1862, 1862, 0, 1863, 1863, 1864, 1864, 0, 1859, 0, 1852, 1866, 1866, 1855, 1865, 1865, 0, 1861, 0, 1862, 1863, 1856, 1864, 1867, 1867, 1868, 1868, 0, 1860, 1869, 1869, 1865, 0, 1870, 1870, 1871, 1871, 1872, 1872, 1866, 1867, 1873, 1873, 1874, 1874, 0, 1869, 1875, 1875, 1876, 1876, 1877, 1877, 1878, 1878, 1871, 0, 1879, 1879, 1880, 1880, 1868, 1870, 1881, 1881, 0, 1873, 1872, 1882, 1882, 1876, 1883, 1883, 1884, 1884, 0, 1875, 1879, 0, 1880, 1881, 1878, 1877, 1885, 1885, 1886, 1886, 1887, 1887, 1888, 1888, 1889, 1889, 1890, 1890, 1891, 1891, 1892, 1892, 0, 1885, 1893, 1893, 0, 1882, 1884, 1894, 1894, 1895, 1895, 1896, 1896, 1897, 1897, 1898, 1898, 0, 1899, 1899, 0, 1888, 1893, 0, 1891, 1900, 1900, 1894, 1901, 1901, 1892, 0, 1895, 0, 1902, 1902, 0, 1903, 1903, 1904, 1904, 1905, 1905, 1906, 1906, 1896, 0, 1898, 1899, 1907, 1907, 0, 1901, 1902, 1903, 0, 1900, 1908, 1908, 1909, 1909, 1910, 1910, 1912, 1912, 0, 1905, 1911, 1911, 1913, 1913, 0, 1914, 1914, 1904, 0, 1909, 1915, 1915, 1916, 1916, 0, 1917, 1917, 1918, 1918, 0, 1907, 1919, 1919, 0, 1908, 1910, 1914, 0, 1911, 1920, 1920, 1921, 1921, 1922, 1922, 1923, 1923, 0, 1924, 1924, 1927, 1927, 1913, 1917, 1925, 1925, 1926, 1926, 1920, 1918, 1928, 1928, 1929, 1929, 1930, 1930, 0, 1922, 0, 0, 0, 1925, 1921, 0, 0, 0, 0, 0, 0, 0, 0, 1923, 1924, 0, 0, 0, 0, 1926, 0, 0, 0, 0, 0, 0, 0, 0, 1929, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1934, 0, 0, 1934, 1934, 1934, 1934, 1935, 1935, 1935, 1935, 1935, 1936, 1936, 1936, 1936, 1937, 1937, 1937, 1938, 0, 1938, 1939, 0, 0, 1939, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 0 }; // idb void *NiTListBase,NiD3DXEffectFile *>::`vftable' = &sub_8C46C0; // weak void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable' = &sub_8C4850; // weak void *NiTPointerListBase,NiD3DXEffectFile *>::`vftable' = &sub_8C4820; // weak void *NiTMap::`vftable' = &sub_8C4890; // weak void *NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable' = &sub_8C48D0; // weak void *NiTPointerList::`vftable' = &sub_8C4820; // weak void *NiD3DXEffectShaderLibrary::`vftable' = &sub_8C4B30; // weak void *NiTStringMap::`vftable' = &sub_8C48D0; // weak void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable' = &sub_8C5180; // weak void *NiTPointerMap::`vftable' = &sub_8C51C0; // weak void *NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable' = &sub_8C5200; // weak void *NiD3DXEffectFactory::`vftable' = &sub_8C4CF0; // weak void *NiTStringPointerMap::`vftable' = &sub_8C5200; // weak void *NiTListBase,NiD3DXEffectParameter *>::`vftable' = &sub_8C5780; // weak void *NiTMapBase>,char const *,NiPointer>::`vftable' = &sub_8C5860; // weak void *NiTPointerListBase,NiD3DXEffectParameter *>::`vftable' = &sub_8C58E0; // weak void *NiTMap>::`vftable' = &sub_8C58A0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_8C60A0; // weak void *NiTPointerList::`vftable' = &sub_8C58E0; // weak void *NiTStringMap>::`vftable' = &sub_8C60A0; // weak void *NiTArray>::`vftable' = &sub_8C9630; // weak void *NiD3DXEffectTechniqueSet::`vftable' = &sub_8C9720; // weak void *NiD3DXEffectTechnique::`vftable' = &sub_8C9F10; // weak void *NiTListBase,NiShaderAttributeDesc *>::`vftable' = &sub_8CC300; // weak void *NiTPointerListBase,NiShaderAttributeDesc *>::`vftable' = &sub_8CC410; // weak void *NiTPointerList::`vftable' = &sub_8CC410; // weak void *NiD3DXEffectShader::`vftable' = &sub_8CD7C0; // weak void *NiD3DTimeSyncController::`vftable' = &sub_8CDCB0; // weak void *NiTArray>::`vftable' = &sub_8CDFE0; // weak void *NiD3DShader::`vftable' = &sub_8CE0C0; // weak void *NiD3DXEffectStateManager::`vftable' = &sub_8CE3D0; // weak void *NsTextCodeV0_3::`vftable' = &sub_8CF0C0; // weak void *NpNs_MoveToTarget::`vftable' = &sub_8CFDD0; // weak void *NsMakeQuadScene::Optimizer::`vftable' = &sub_8D0890; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_8D0D80; // weak void *NiTPointerMap>::`vftable' = &sub_8D0DC0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_8D0E50; // weak void *NiTStringPointerMap>::`vftable' = &sub_8D0E50; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_8D0F60; // weak void *NiTPointerMap>::`vftable' = &sub_8D0FA0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_8D1020; // weak void *NiTStringPointerMap>::`vftable' = &sub_8D1020; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_8D1290; // weak void *NiTPointerMap>::`vftable' = &sub_8D12D0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_8D1350; // weak void *NiTStringPointerMap>::`vftable' = &sub_8D1350; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_8D1460; // weak void *NiTPointerMap>::`vftable' = &sub_8D14A0; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_8D1520; // weak void *NiTStringPointerMap>::`vftable' = &sub_8D1520; // weak void *NPTR_ISShader_v2::`vftable' = &sub_8D15C0; // weak void *NsPgToonRegister_v2::`vftable' = &sub_8D1D50; // weak void *INpShader::`vftable' = &sub_8D23F0; // weak void *NsPgToonExtraData::`vftable' = &sub_8D2740; // weak void *NsPgCatoonShader::`vftable' = &sub_8D44C0; // weak void *NsEffect::`vftable' = &sub_8D47F0; // weak void *NiTArray::`vftable' = &sub_8D4E80; // weak void *NsFadeNode::FindChildGeometry::`vftable' = &sub_8D9010; // weak void *NiTArray> *>::`vftable' = &sub_8D7D00; // weak void *NsFadeNode::`vftable' = &sub_8D98A0; // weak void *NiAlphaRefController::`vftable' = &sub_8D8E60; // weak void *MasterPropertyAccumulator::`vftable' = &sub_8DAEF0; // weak void *FindMultiLinkNode::`vftable' = &sub_8DBC30; // weak void *FindRoomNode::`vftable' = &sub_8DBD60; // weak void *boost::detail::sp_counted_base::`vftable' = &sub_8DC7D0; // weak void *boost::detail::sp_counted_base_impl>::`vftable' = &sub_8DC7D0; // weak void *IMakeBlockInfo::`vftable' = &sub_699720; // weak void *CNullClass::`vftable' = &sub_8E67D0; // weak void *CProperty::`vftable' = &sub_8E6840; // weak void *CBaseObject::`vftable' = &sub_8ED5C0; // weak void *CWorldConfig::`vftable' = &sub_8E6CC0; // weak void *FindCDNode2::`vftable' = &sub_8E86E0; // weak void *HeightMapMaker::`vftable' = &sub_8E89B0; // weak void *std::basic_fstream>::`vftable' = &sub_8E8C60; // weak _UNKNOWN unk_A41204; // weak _UNKNOWN unk_A4120C; // weak void *CPostProcessEffect::`vftable' = &sub_632700; // weak void *HazeAccumulator::`vftable' = &sub_8EB640; // weak void *CHazeScreenEffect::`vftable' = &sub_8EB7C0; // weak void *CHazeScreenEffect::`vftable' = &sub_8EB930; // weak void *CRTTIClass::`vftable' = &sub_8ED5C0; // weak void *CProperty::`vftable' = &sub_8E6840; // weak void *CProperty::`vftable' = &sub_8EC530; // weak void *CProperty::`vftable' = &sub_8EC550; // weak void *CGlowScreenEffect::`vftable' = &sub_8ECE00; // weak void *CGlowScreenEffect::`vftable' = &sub_8ECF30; // weak void *CRTTIClass::`vftable' = &sub_8ED5C0; // weak void *CProperty::`vftable' = &sub_8E6840; // weak void *CAfterImageEffect::`vftable' = &sub_8ED5B0; // weak void *CAfterImageEffect::`vftable' = &sub_8ED710; // weak void *CRTTIClass::`vftable' = &sub_8ED5C0; // weak void *CProperty::`vftable' = &sub_8E6840; // weak void *CDepthOfFieldEffect::`vftable' = &sub_8EDB00; // weak void *CDepthOfFieldEffect::`vftable' = &sub_8EDC20; // weak void *CRTTIClass::`vftable' = &sub_8ED5C0; // weak void *CScreenEffect::`vftable' = &sub_8EED30; // weak void *PgTList::`vftable' = &sub_8F0F00; // weak void *NiTPointerMap::`vftable' = &sub_8F0ED0; // weak void *PgFrameMgr::`vftable' = &sub_8EF3F0; // weak char aCa[2] = "ÇÁ"; // idb void *NiTMapBase,void *,PgFrameWork *>::`vftable' = &sub_8F0E80; // weak void *PgWinFrame::`vftable' = &unknown_libname_1; // weak void *PgWinFrame::`vftable' = &sub_8F10C0; // weak void *PgWin::`vftable' = &unknown_libname_1; // weak void *PgWin::`vftable' = &sub_8F2850; // weak void *PgWin::Bool::`vftable' = &sub_8F3BF0; // weak void *PgWinSpr::`vftable' = &unknown_libname_1; // weak void *PgWinSpr::`vftable' = &sub_8F3C90; // weak void *PgWinText::`vftable' = &unknown_libname_1; // weak void *PgWinText::`vftable' = &sub_8F4960; // weak void *PgWinCullingProcess::`vftable' = &sub_8F7670; // weak void *PgTList>::`vftable' = &sub_8FABC0; // weak void *NiTPointerList>::`vftable' = &sub_8F7A90; // weak void *PgWinMgr::`vftable' = &sub_8F7A60; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_8FAB90; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_8F7A90; // weak void *PgSprData::`vftable' = &sub_8FB960; // weak void *NiTArray>::`vftable' = &sub_8FDA10; // weak void *NiTArray>::`vftable' = &sub_8FDA70; // weak void *NiTArray>::`vftable' = &sub_8FDB50; // weak void *PgSpr::`vftable' = &sub_8FCB50; // weak void *PgSprData::PgHitTester::`vftable' = &sub_8FD8A0; // weak void *PgWinBut::`vftable' = &unknown_libname_1; // weak void *PgWinBut::`vftable' = &sub_8FE090; // weak void *NiTList::`vftable' = &sub_8FEA90; // weak void *NiTPointerListBase,CBucketBlock *>::`vftable' = &sub_8FEA90; // weak void *NiTListBase,CBucketBlock *>::`vftable' = &sub_905990; // weak void *NiTMap::`vftable' = &sub_905A10; // weak void *NiTList::`vftable' = &sub_905A70; // weak void *NiTPointerListBase,SpScreenText *>::`vftable' = &sub_905A70; // weak void *NiTListBase,SpScreenText *>::`vftable' = &sub_905A40; // weak void *CSpFont::`vftable' = &sub_900130; // weak void *NiTMapBase,unsigned short,FontBucket *>::`vftable' = &sub_9059C0; // weak void *PgNet::`vftable' = &sub_905D00; // weak void *PgFont::`vftable' = &sub_906400; // weak void *SpScreenGeometryClip::`vftable' = &sub_906940; // weak void *SpScreenText::`vftable' = &sub_906C20; // weak void *PgWinLRBut::`vftable' = &unknown_libname_1; // weak void *PgWinLRBut::`vftable' = &sub_907AD0; // weak void *PgCursor::`vftable' = &sub_909430; // weak void *PgWinCircleGauge::`vftable' = &unknown_libname_1; // weak void *PgWinCircleGauge::`vftable' = &sub_909D60; // weak void *PgWinAbbreviateText::`vftable' = &unknown_libname_1; // weak void *PgWinAbbreviateText::`vftable' = &sub_90AE30; // weak void *PgWinCloseBut::`vftable' = &unknown_libname_1; // weak void *PgWinCloseBut::`vftable' = &sub_90C870; // weak void *PgWinBar::`vftable' = &unknown_libname_1; // weak void *PgWinBar::`vftable' = &sub_90CAC0; // weak void *PgWinEditText::`vftable' = &unknown_libname_1; // weak void *PgWinEditText::`vftable' = &sub_90CE30; // weak void *PgEditWin::`vftable' = &sub_90DF30; // weak void *NiTMap::`vftable' = &sub_90EA50; // weak void *NiTMapBase,HWND__ *,PgEditWin *>::`vftable' = &sub_90EA00; // weak void *PgWinPasswdText::`vftable' = &unknown_libname_1; // weak void *PgWinPasswdText::`vftable' = &sub_90EB70; // weak void *PgTextGeometry::`vftable' = &sub_90EFD0; // weak void *PgImeEditWin::`vftable' = &sub_90F1C0; // weak void *PgWinImeEditText::`vftable' = &unknown_libname_1; // weak void *PgWinImeEditText::`vftable' = &sub_90F9E0; // weak void *PgImeCtrl::`vftable' = &sub_90FFB0; // weak void *PgWinButExt::`vftable' = &unknown_libname_1; // weak void *PgWinButExt::`vftable' = &sub_910C50; // weak void *PgWinCamera::`vftable' = &sub_9118E0; // weak void *PgEditTextGeometry::`vftable' = &sub_9127B0; // weak void *PgPasswdTextGeometry::`vftable' = &sub_912B20; // weak void *PgImeEditTextGeometry::`vftable' = &sub_912E80; // weak int (__stdcall *off_A44008)(SIZE_T dwBytes) = &sub_916C75; // weak int (__stdcall *off_A4401C)(int, int) = &sub_916DA6; // weak void *NiTMapBase,char const *,NiD3DVertexShader *>::`vftable' = &sub_917650; // weak void *NiTMapBase,char const *,NiD3DPixelShader *>::`vftable' = &sub_917700; // weak void *NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable' = &sub_917780; // weak void *NiTPointerMap::`vftable' = &sub_917690; // weak void *NiTStringTemplateMap,NiD3DVertexShader *>::`vftable' = &sub_9176D0; // weak void *NiTPointerMap::`vftable' = &sub_917740; // weak void *NiTStringTemplateMap,NiD3DPixelShader *>::`vftable' = &sub_917C80; // weak void *NiTPointerMap::`vftable' = &sub_9177C0; // weak void *NiTStringTemplateMap,NiD3DShaderProgramCreator *>::`vftable' = &sub_917CB0; // weak void *NiTStringPointerMap::`vftable' = &sub_9176D0; // weak void *NiTStringPointerMap::`vftable' = &sub_917C80; // weak void *NiTStringPointerMap::`vftable' = &sub_917CB0; // weak void *NiD3DShaderProgramFactory::`vftable' = &sub_917ED0; // weak void *NiTArray::`vftable' = &sub_918040; // weak void *NiD3DDefaultShader::`vftable' = &sub_918B60; // weak void *NiTArray>::`vftable' = &sub_91D340; // weak void *NiD3DPass::`vftable' = &sub_91DA20; // weak void *NiD3DShaderInterface::`vftable' = &sub_91F200; // weak void *NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable' = &sub_91FC80; // weak void *NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable' = &sub_91F860; // weak void *NiTArray::`vftable' = &sub_91F890; // weak void *NiTArray::`vftable' = &sub_91F8C0; // weak void *NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable' = &sub_91FD00; // weak void *NiTPointerMap::`vftable' = &sub_91FCC0; // weak void *NiTPointerList::`vftable' = &sub_91FD00; // weak void *NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable' = &sub_923AF0; // weak void *NiTMapBase,HWND__ *,NiPointer>::`vftable' = &sub_923B70; // weak void *NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable' = &sub_923BF0; // weak void *NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable' = &sub_923C70; // weak void *NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable' = &sub_923CF0; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_921F10; // weak void *NiTListBase,NiD3DShaderInterface *>::`vftable' = &sub_921F40; // weak void *NiTArray::`vftable' = &sub_921F70; // weak void *NiTArray::`vftable' = &sub_921FA0; // weak void *NiTArray::`vftable' = &sub_921FD0; // weak _UNKNOWN unk_A44920; // weak _UNKNOWN unk_A44924; // weak _UNKNOWN unk_A44928; // weak _UNKNOWN unk_A4492C; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_923D70; // weak void *NiTPointerListBase,NiD3DShaderInterface *>::`vftable' = &sub_923DA0; // weak void *NiTPointerMap::`vftable' = &sub_923B30; // weak void *NiTPointerMap>::`vftable' = &sub_923BB0; // weak void *NiTPointerMap::`vftable' = &sub_923C30; // weak void *NiTPointerMap::`vftable' = &sub_923CB0; // weak void *NiTPointerMap::`vftable' = &sub_923D30; // weak void *NiTPointerList>::`vftable' = &sub_923D70; // weak void *NiTPointerList::`vftable' = &sub_923DA0; // weak void *NiDX9Renderer::`vftable' = &sub_92AC10; // weak void *NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable' = &sub_92AD20; // weak void *NiDX92DBufferData::`vftable' = &sub_92B900; // weak void *NiTPointerListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable' = &sub_92B5C0; // weak void *NiDX9TextureBufferData::`vftable' = &sub_92B320; // weak void *NiDX9AdditionalDepthStencilBufferData::`vftable' = &sub_92BCC0; // weak void *NiDX9ImplicitBufferData::`vftable' = &sub_92BA30; // weak void *NiDX9ImplicitDepthStencilBufferData::`vftable' = &sub_92B900; // weak void *NiD3DShaderLibrary::`vftable' = &sub_92BE40; // weak void *NiD3DSCM_Vertex::`vftable' = &sub_92C6E0; // weak void *NiTArray>::`vftable' = &sub_930660; // weak void *NiD3DShaderConstantMap::`vftable' = &sub_930BD0; // weak void *NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable' = &sub_931570; // weak void *NiTMapBase,char const *,NiShader *>::`vftable' = &sub_931290; // weak void *NiTMapBase,char const *,NiPointer>::`vftable' = &sub_931340; // weak void *NiTPointerMap::`vftable' = &sub_9312D0; // weak void *NiTStringTemplateMap,NiShader *>::`vftable' = &sub_931310; // weak void *NiTPointerMap>::`vftable' = &sub_931380; // weak void *NiTStringTemplateMap>,NiPointer>::`vftable' = &sub_9313C0; // weak void *NiD3DGlobalConstantEntry::`vftable' = &sub_9314B0; // weak void *NiTMap::`vftable' = &sub_9315B0; // weak void *NiTStringTemplateMap,NiD3DGlobalConstantEntry *>::`vftable' = &sub_9315F0; // weak void *NiTStringPointerMap::`vftable' = &sub_931310; // weak void *NiTStringPointerMap>::`vftable' = &sub_9313C0; // weak void *NiTStringMap::`vftable' = &sub_9315F0; // weak void *NiD3DShaderFactory::`vftable' = &sub_9320F0; // weak void *NiD3DShaderConstantMapEntry::`vftable' = &sub_961A60; // weak void *NiDX9ShaderDeclaration::`vftable' = &sub_9347D0; // weak void *NiD3DController::`vftable' = &sub_9352B0; // weak void *NiDX9RenderState::`vftable' = &sub_935D50; // weak void *NiD3DShaderConstantManager::`vftable' = &sub_9366C0; // weak void *NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable' = &sub_936D70; // weak void *NiTListBase,NiLight *>::`vftable' = &sub_936A70; // weak void *NiTPointerListBase,NiLight *>::`vftable' = &sub_936DF0; // weak void *NiTPointerMap::`vftable' = &sub_936DB0; // weak void *NiTPointerList::`vftable' = &sub_936DF0; // weak void *NiTexture::RendererData::`vftable' = &sub_9382E0; // weak void *NiDX9TextureData::`vftable' = &sub_938310; // weak void *NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable' = &sub_9393C0; // weak void *NiTPointerMap::`vftable' = &sub_939400; // weak void *NiDX9VertexBufferManager::`vftable' = &sub_939790; // weak void *NiDX9SourceTextureData::`vftable' = &sub_93A160; // weak void *NiDX9SourceCubeMapData::`vftable' = &sub_93A4C0; // weak void *NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable' = &sub_93B920; // weak void *NiTPointerMap::`vftable' = &sub_93B960; // weak void *NiDX9IndexBufferManager::`vftable' = &sub_93BD00; // weak void *NiDX9RenderedTextureData::`vftable' = &sub_93BD90; // weak void *NiDX9RenderedCubeMapData::`vftable' = &sub_93BFB0; // weak void *NiDX9DynamicTextureData::`vftable' = &sub_93C1C0; // weak void *NiD3DGeometryGroupManager::`vftable' = &sub_93C7B0; // weak void *NiDX9TextureManager::`vftable' = &sub_93C9E0; // weak void *NiD3DShaderProgramCreator::`vftable' = &sub_93CCE0; // weak void *NiD3DShaderProgramCreatorHLSL::`vftable' = &sub_93CCE0; // weak void *NiD3DShaderProgramCreatorAsm::`vftable' = &sub_93CD10; // weak void *NiD3DShaderProgramCreatorObj::`vftable' = &sub_93CD10; // weak void *NiD3DShaderDeclaration::`vftable' = &sub_93E150; // weak void *NiTArray::`vftable' = &sub_93DAC0; // weak void *NiTArray::`vftable' = &sub_93DAF0; // weak void *NiD3DRenderState::`vftable' = &sub_93F5C0; // weak void *NiDX9ShaderConstantManager::`vftable' = &sub_93FB10; // weak void *NiTArray::`vftable' = &sub_93FDB0; // weak void *NiTArray::`vftable' = &sub_93FDE0; // weak void *NiTMapBase,unsigned int,NiVBSet *>::`vftable' = &sub_940620; // weak void *NiTPointerMap::`vftable' = &sub_940660; // weak void *NiStaticGeometryGroup::`vftable' = &sub_9403D0; // weak void *NiUnsharedGeometryGroup::`vftable' = &nullsub_6; // weak void *NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable' = &sub_941090; // weak void *NiTMapBase,unsigned int,NiVBChip *>::`vftable' = &sub_941110; // weak void *NiTArray::`vftable' = &sub_940C40; // weak void *NiTPointerMap::`vftable' = &sub_9410D0; // weak void *NiTPointerMap::`vftable' = &sub_941150; // weak void *NiDynamicGeometryGroup::`vftable' = &sub_940C70; // weak void *NiD3DPixelShader::`vftable' = &sub_941B70; // weak void *NiD3DVertexShader::`vftable' = &sub_941BC0; // weak void *NiD3DHLSLPixelShader::`vftable' = &sub_941C40; // weak void *NiD3DHLSLVertexShader::`vftable' = &sub_941D80; // weak void *NiGeometryGroup::`vftable' = &sub_46F0F0; // weak void *NiD3DShaderProgram::`vftable' = &sub_943830; // weak _UNKNOWN unk_A48274; // weak _UNKNOWN unk_A48284; // weak _UNKNOWN unk_A48294; // weak _UNKNOWN unk_A482A4; // weak _UNKNOWN unk_A482B4; // weak _UNKNOWN unk_A482C4; // weak _UNKNOWN unk_A482D4; // weak _UNKNOWN unk_A482E4; // weak _UNKNOWN unk_A482F4; // weak _UNKNOWN unk_A48304; // weak _UNKNOWN unk_A48314; // weak _UNKNOWN unk_A48324; // weak _UNKNOWN unk_A48334; // weak _UNKNOWN unk_A48344; // weak _UNKNOWN unk_A48354; // weak _UNKNOWN unk_A48364; // weak _UNKNOWN unk_A48564; // weak _UNKNOWN unk_A4876C; // weak char a128_0[6] = "1.2.8"; // weak int dword_A4884C[7] = { 0, 4, 0, 2, 0, 1, 0 }; // idb int dword_A48868[7] = { 8, 8, 4, 4, 2, 2, 1 }; // idb int dword_A48884[7] = { 0, 0, 4, 0, 2, 0, 1 }; // idb int dword_A488A0[7] = { 8, 8, 8, 4, 4, 2, 2 }; // idb int dword_A488BC[26] = { 128, 8, 136, 34, 170, 85, 255, 255, 15, 255, 51, 255, 85, 255, 7233866, 6448454, 7496013, 7499841, 7954765, 7238986, 7107914, 6780225, 7365971, 7627599, 7761742, 6513988 }; // idb char byte_A48C5C[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; // idb void *NiTListBase,NiImageReader *>::`vftable' = &sub_9532E0; // weak void *NiTPointerListBase,NiImageReader *>::`vftable' = &sub_9556C0; // weak void *NiTPointerList::`vftable' = &sub_9556C0; // weak void *NiDevImageConverter::`vftable' = &sub_9566F0; // weak void *NiTArray>::`vftable' = &sub_956780; // weak void *NiShaderLibraryDesc::`vftable' = &sub_956850; // weak void *NiTArray::`vftable' = &sub_9568E0; // weak void *NiTListBase,NiPointer>::`vftable' = &sub_956910; // weak void *NiTPointerListBase,NiPointer>::`vftable' = &sub_956A10; // weak void *NiTPointerList>::`vftable' = &sub_956A10; // weak void *NiShaderDesc::`vftable' = &sub_956BF0; // weak void *NiShaderRequirementDesc::`vftable' = &sub_956E00; // weak void *NiShaderAttributeDesc::`vftable' = &sub_957610; // weak void *NiSCMExtraData::`vftable' = &sub_957F90; // weak void *NiTGAReader::`vftable' = &sub_958EF0; // weak void *NiSGIReader::`vftable' = &sub_95A310; // weak void *NiDDSReader::`vftable' = &sub_95A310; // weak void *NiBMPReader::`vftable' = &sub_95A310; // weak void *NiShaderDescBase::`vftable' = &sub_95C080; // weak void *NiCursor::`vftable' = &sub_95C470; // weak void *NiTListBase,NSBObjectTable::ObjectDesc *>::`vftable' = &sub_95CC00; // weak void *NiTArray::`vftable' = &sub_95CC30; // weak void *NiTListBase,NSBImplementation *>::`vftable' = &sub_95CBD0; // weak void *NiTPointerListBase,NSBImplementation *>::`vftable' = &sub_95D7C0; // weak void *NiTMapBase,char const *,NSBPackingDef *>::`vftable' = &sub_95D190; // weak void *NiTPointerListBase,NSBObjectTable::ObjectDesc *>::`vftable' = &sub_95D160; // weak void *NiTPointerMap::`vftable' = &sub_95D1D0; // weak void *NiTStringTemplateMap,NSBPackingDef *>::`vftable' = &sub_95E420; // weak void *NiTPointerList::`vftable' = &sub_95D160; // weak void *NSBShader::`vftable' = &sub_95DB70; // weak void *NiTPointerList::`vftable' = &sub_95D7C0; // weak void *NiTStringPointerMap::`vftable' = &sub_95E420; // weak void *NSBAttributeDesc::`vftable' = &sub_95FB00; // weak void *NiTListBase,NSBAttributeDesc *>::`vftable' = &sub_9603A0; // weak void *NiTPointerListBase,NSBAttributeDesc *>::`vftable' = &sub_960470; // weak void *NiTPointerList::`vftable' = &sub_960470; // weak void *NiTListBase,NSBConstantMap::NSBCM_Entry *>::`vftable' = &sub_9610B0; // weak void *NSBConstantMap::NSBCM_Entry::`vftable' = &sub_961A60; // weak void *NiTPointerListBase,NSBConstantMap::NSBCM_Entry *>::`vftable' = &sub_961B00; // weak void *NiTPointerList::`vftable' = &sub_961B00; // weak void *NSBConstantMap::`vftable' = &sub_962AF0; // weak void *NiTListBase,NSBUserDefinedDataBlock *>::`vftable' = &sub_962BC0; // weak void *NiTPointerListBase,NSBUserDefinedDataBlock *>::`vftable' = &sub_962C70; // weak void *NSBUserDefinedDataBlock::`vftable' = &sub_962BF0; // weak void *NiTPointerList::`vftable' = &sub_962C70; // weak void *NSBUserDefinedDataSet::`vftable' = &sub_962F20; // weak void *NiTArray::`vftable' = &sub_9630C0; // weak void *NiTArray::`vftable' = &sub_964450; // weak void *NiTListBase,NSBStateGroup::NSBSGEntry *>::`vftable' = &sub_967D90; // weak void *NiTPointerListBase,NSBStateGroup::NSBSGEntry *>::`vftable' = &sub_967E30; // weak void *NiTPointerList::`vftable' = &sub_967E30; // weak void *NiTListBase,NSBPackingDef::NSBPDEntry *>::`vftable' = &sub_968470; // weak void *NiTPointerListBase,NSBPackingDef::NSBPDEntry *>::`vftable' = &sub_9686C0; // weak void *NiTPointerList::`vftable' = &sub_9686C0; // weak void *NiTArray>::`vftable' = &sub_969720; // weak void *NiBinaryShader::`vftable' = &sub_969DD0; // weak void *NsFNC_35::`vftable' = &sub_96AB50; // weak _UNKNOWN unk_A4C22C; // weak _UNKNOWN unk_A4C230; // weak void *NsFNC_123::`vftable' = &sub_96AFD0; // weak _UNKNOWN unk_A4C240; // weak void *NsFNC_125::`vftable' = &sub_96B2A0; // weak void *NsFNC_58::`vftable' = &sub_96B2D0; // weak void *NsFNC_34::`vftable' = &sub_96B500; // weak void *NsFileReader::`vftable' = &sub_96BD20; // weak void *NsTextCodeV0_2::`vftable' = &sub_96C820; // weak void *INsFile_NodeCreater::`vftable' = &sub_96C8D0; // weak void *INsFile::`vftable' = &sub_96CAF0; // weak void *NiD3DSCM_Pixel::`vftable' = &sub_96CEE0; // weak _UNKNOWN unk_A7A698; // weak _UNKNOWN unk_A7A6A0; // weak int _TI2_AVbad_alloc_std__ = 0; // weak int _TI4_AVfailure_ios_base_std__ = 0; // weak int _TI2_AVruntime_error_std__ = 0; // weak int _TI2_AVbad_cast_std__ = 0; // weak int _TI2_AVlogic_error_std__ = 0; // weak int _TI1_AVCAtlException_ATL__ = 0; // weak int _TI1_AVexception_std__ = 0; // weak _UNKNOWN PgWin `RTTI Type Descriptor'; // weak _UNKNOWN NiNode `RTTI Type Descriptor'; // weak int dword_AA7178[256] = { 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117 }; // idb _UNKNOWN unk_AA7578; // weak char byte_AA7594 = '\0'; // weak int dword_AA75A4 = 0; // weak int dword_AA75A8 = 0; // weak char byte_AA75B0 = '\0'; // weak int dword_AA75C0 = 0; // weak int dword_AA75C4 = 0; // weak char byte_AA75CC = '\0'; // weak int dword_AA75DC = 0; // weak int dword_AA75E0 = 0; // weak char byte_AA75E8 = '\0'; // weak int dword_AA75F8 = 0; // weak int dword_AA75FC = 0; // weak char byte_AA7604 = '\0'; // weak int dword_AA7614 = 0; // weak int dword_AA7618 = 0; // weak char byte_AA7620 = '\0'; // weak int dword_AA7630 = 0; // weak int dword_AA7634 = 0; // weak char byte_AA763C = '\0'; // weak int dword_AA764C = 0; // weak int dword_AA7650 = 0; // weak char byte_AA7658 = '\0'; // weak int dword_AA7668 = 0; // weak int dword_AA766C = 0; // weak char byte_AA7674 = '\0'; // weak int dword_AA7684 = 0; // weak int dword_AA7688 = 0; // weak char byte_AA7690 = '\0'; // weak int dword_AA76A0 = 0; // weak int dword_AA76A4 = 0; // weak char byte_AA76AC = '\0'; // weak int dword_AA76BC = 0; // weak int dword_AA76C0 = 0; // weak char byte_AA76C8 = '\0'; // weak int dword_AA76D8 = 0; // weak int dword_AA76DC = 0; // weak char byte_AA76E4 = '\0'; // weak int dword_AA76F4 = 0; // weak int dword_AA76F8 = 0; // weak char byte_AA7700 = '\0'; // weak int dword_AA7710 = 0; // weak int dword_AA7714 = 0; // weak char byte_AA771C = '\0'; // weak int dword_AA772C = 0; // weak int dword_AA7730 = 0; // weak char byte_AA7738 = '\0'; // weak int dword_AA7748 = 0; // weak int dword_AA774C = 0; // weak char byte_AA7754 = '\0'; // weak int dword_AA7764 = 0; // weak int dword_AA7768 = 0; // weak char byte_AA7770 = '\0'; // weak int dword_AA7780 = 0; // weak int dword_AA7784 = 0; // weak char byte_AA778C = '\0'; // weak int dword_AA779C = 0; // weak int dword_AA77A0 = 0; // weak char byte_AA77A8 = '\0'; // weak int dword_AA77B8 = 0; // weak int dword_AA77BC = 0; // weak char byte_AA77C4 = '\0'; // weak int dword_AA77D4 = 0; // weak int dword_AA77D8 = 0; // weak char byte_AA77E0 = '\0'; // weak int dword_AA77F0 = 0; // weak int dword_AA77F4 = 0; // weak char byte_AA77FC = '\0'; // weak int dword_AA780C = 0; // weak int dword_AA7810 = 0; // weak char byte_AA7818 = '\0'; // weak int dword_AA7828 = 0; // weak int dword_AA782C = 0; // weak char byte_AA7834 = '\0'; // weak int dword_AA7844 = 0; // weak int dword_AA7848 = 0; // weak char byte_AA7850 = '\0'; // weak int dword_AA7860 = 0; // weak int dword_AA7864 = 0; // weak char byte_AA786C = '\0'; // weak int dword_AA787C = 0; // weak int dword_AA7880 = 0; // weak char byte_AA7888 = '\0'; // weak int dword_AA7898 = 0; // weak int dword_AA789C = 0; // weak char byte_AA78A4 = '\0'; // weak int dword_AA78B4 = 0; // weak int dword_AA78B8 = 0; // weak char byte_AA78C0 = '\0'; // weak int dword_AA78D0 = 0; // weak int dword_AA78D4 = 0; // weak char byte_AA78DC = '\0'; // weak int dword_AA78EC = 0; // weak int dword_AA78F0 = 0; // weak char byte_AA78F8 = '\0'; // weak int dword_AA7908 = 0; // weak int dword_AA790C = 0; // weak char byte_AA7914 = '\0'; // weak int dword_AA7924 = 0; // weak int dword_AA7928 = 0; // weak char byte_AA7930 = '\0'; // weak int dword_AA7940 = 0; // weak int dword_AA7944 = 0; // weak char byte_AA794C = '\0'; // weak int dword_AA795C = 0; // weak int dword_AA7960 = 0; // weak char byte_AA7968 = '\0'; // weak int dword_AA7978 = 0; // weak int dword_AA797C = 0; // weak char byte_AA7984 = '\0'; // weak int dword_AA7994 = 0; // weak int dword_AA7998 = 0; // weak char byte_AA79A0 = '\0'; // weak int dword_AA79B0 = 0; // weak int dword_AA79B4 = 0; // weak char byte_AA79BC = '\0'; // weak int dword_AA79CC = 0; // weak int dword_AA79D0 = 0; // weak char byte_AA79D8 = '\0'; // weak int dword_AA79E8 = 0; // weak int dword_AA79EC = 0; // weak char byte_AA79F4 = '\0'; // weak int dword_AA7A04 = 0; // weak int dword_AA7A08 = 0; // weak char byte_AA7A10 = '\0'; // weak int dword_AA7A20 = 0; // weak int dword_AA7A24 = 0; // weak char byte_AA7A2C = '\0'; // weak int dword_AA7A3C = 0; // weak int dword_AA7A40 = 0; // weak char byte_AA7A48 = '\0'; // weak int dword_AA7A58 = 0; // weak int dword_AA7A5C = 0; // weak char byte_AA7A64 = '\0'; // weak int dword_AA7A74 = 0; // weak int dword_AA7A78 = 0; // weak char byte_AA7A80 = '\0'; // weak int dword_AA7A90 = 0; // weak int dword_AA7A94 = 0; // weak char byte_AA7A9C = '\0'; // weak int dword_AA7AAC = 0; // weak int dword_AA7AB0 = 0; // weak char byte_AA7AB8 = '\0'; // weak int dword_AA7AC8 = 0; // weak int dword_AA7ACC = 0; // weak char byte_AA7AD4 = '\0'; // weak int dword_AA7AE4 = 0; // weak int dword_AA7AE8 = 0; // weak char byte_AA7AF0 = '\0'; // weak int dword_AA7B00 = 0; // weak int dword_AA7B04 = 0; // weak char byte_AA7B0C = '\0'; // weak int dword_AA7B1C = 0; // weak int dword_AA7B20 = 0; // weak char byte_AA7B28 = '\0'; // weak int dword_AA7B38 = 0; // weak int dword_AA7B3C = 0; // weak char byte_AA7B44 = '\0'; // weak int dword_AA7B54 = 0; // weak int dword_AA7B58 = 0; // weak char byte_AA7B60 = '\0'; // weak int dword_AA7B70 = 0; // weak int dword_AA7B74 = 0; // weak char byte_AA7B7C = '\0'; // weak int dword_AA7B8C = 0; // weak int dword_AA7B90 = 0; // weak char byte_AA7B98 = '\0'; // weak int dword_AA7BA8 = 0; // weak int dword_AA7BAC = 0; // weak char byte_AA7BB4 = '\0'; // weak int dword_AA7BC4 = 0; // weak int dword_AA7BC8 = 0; // weak char byte_AA7BD0 = '\0'; // weak int dword_AA7BE0 = 0; // weak int dword_AA7BE4 = 0; // weak char byte_AA7BEC = '\0'; // weak int dword_AA7BFC = 0; // weak int dword_AA7C00 = 0; // weak char byte_AA7C08 = '\0'; // weak int dword_AA7C18 = 0; // weak int dword_AA7C1C = 0; // weak char byte_AA7C24 = '\0'; // weak int dword_AA7C34 = 0; // weak int dword_AA7C38 = 0; // weak char byte_AA7C40 = '\0'; // weak int dword_AA7C50 = 0; // weak int dword_AA7C54 = 0; // weak char byte_AA7C5C = '\0'; // weak int dword_AA7C6C = 0; // weak int dword_AA7C70 = 0; // weak char byte_AA7C78 = '\0'; // weak int dword_AA7C88 = 0; // weak int dword_AA7C8C = 0; // weak char byte_AA7C94 = '\0'; // weak int dword_AA7CA4 = 0; // weak int dword_AA7CA8 = 0; // weak char byte_AA7CB0 = '\0'; // weak int dword_AA7CC0 = 0; // weak int dword_AA7CC4 = 0; // weak char byte_AA7CCC = '\0'; // weak int dword_AA7CDC = 0; // weak int dword_AA7CE0 = 0; // weak char byte_AA7CE8 = '\0'; // weak int dword_AA7CF8 = 0; // weak int dword_AA7CFC = 0; // weak char byte_AA7D04 = '\0'; // weak int dword_AA7D14 = 0; // weak int dword_AA7D18 = 0; // weak char byte_AA7D20 = '\0'; // weak int dword_AA7D30 = 0; // weak int dword_AA7D34 = 0; // weak char byte_AA7D3C = '\0'; // weak int dword_AA7D4C = 0; // weak int dword_AA7D50 = 0; // weak char byte_AA7D58 = '\0'; // weak int dword_AA7D68 = 0; // weak int dword_AA7D6C = 0; // weak char byte_AA7D74 = '\0'; // weak int dword_AA7D84 = 0; // weak int dword_AA7D88 = 0; // weak char byte_AA7D90 = '\0'; // weak int dword_AA7DA0 = 0; // weak int dword_AA7DA4 = 0; // weak char byte_AA7DAC = '\0'; // weak int dword_AA7DBC = 0; // weak int dword_AA7DC0 = 0; // weak char byte_AA7DC8 = '\0'; // weak int dword_AA7DD8 = 0; // weak int dword_AA7DDC = 0; // weak char byte_AA7DE4 = '\0'; // weak int dword_AA7DF4 = 0; // weak int dword_AA7DF8 = 0; // weak char byte_AA7E00 = '\0'; // weak int dword_AA7E10 = 0; // weak int dword_AA7E14 = 0; // weak char byte_AA7E1C = '\0'; // weak int dword_AA7E2C = 0; // weak int dword_AA7E30 = 0; // weak char byte_AA7E38 = '\0'; // weak int dword_AA7E48 = 0; // weak int dword_AA7E4C = 0; // weak char byte_AA7E54 = '\0'; // weak int dword_AA7E64 = 0; // weak int dword_AA7E68 = 0; // weak char byte_AA7E70 = '\0'; // weak int dword_AA7E80 = 0; // weak int dword_AA7E84 = 0; // weak char byte_AA7E8C = '\0'; // weak int dword_AA7E9C = 0; // weak int dword_AA7EA0 = 0; // weak char byte_AA7EA8 = '\0'; // weak int dword_AA7EB8 = 0; // weak int dword_AA7EBC = 0; // weak char byte_AA7EC4 = '\0'; // weak int dword_AA7ED4 = 0; // weak int dword_AA7ED8 = 0; // weak char byte_AA7EE0 = '\0'; // weak int dword_AA7EF0 = 0; // weak int dword_AA7EF4 = 0; // weak char byte_AA7EFC = '\0'; // weak int dword_AA7F0C = 0; // weak int dword_AA7F10 = 0; // weak char byte_AA7F18 = '\0'; // weak int dword_AA7F28 = 0; // weak int dword_AA7F2C = 0; // weak char byte_AA7F34 = '\0'; // weak int dword_AA7F44 = 0; // weak int dword_AA7F48 = 0; // weak char byte_AA7F50 = '\0'; // weak int dword_AA7F60 = 0; // weak int dword_AA7F64 = 0; // weak char byte_AA7F6C = '\0'; // weak int dword_AA7F7C = 0; // weak int dword_AA7F80 = 0; // weak char byte_AA7F88 = '\0'; // weak int dword_AA7F98 = 0; // weak int dword_AA7F9C = 0; // weak char byte_AA7FA4 = '\0'; // weak int dword_AA7FB4 = 0; // weak int dword_AA7FB8 = 0; // weak char byte_AA7FC0 = '\0'; // weak int dword_AA7FD0 = 0; // weak int dword_AA7FD4 = 0; // weak char byte_AA7FDC = '\0'; // weak int dword_AA7FEC = 0; // weak int dword_AA7FF0 = 0; // weak char byte_AA7FF8 = '\0'; // weak int dword_AA8008 = 0; // weak int dword_AA800C = 0; // weak char byte_AA8014 = '\0'; // weak int dword_AA8024 = 0; // weak int dword_AA8028 = 0; // weak char byte_AA8030 = '\0'; // weak int dword_AA8040 = 0; // weak int dword_AA8044 = 0; // weak char byte_AA804C = '\0'; // weak int dword_AA805C = 0; // weak int dword_AA8060 = 0; // weak char byte_AA8068 = '\0'; // weak int dword_AA8078 = 0; // weak int dword_AA807C = 0; // weak char byte_AA8084 = '\0'; // weak int dword_AA8094 = 0; // weak int dword_AA8098 = 0; // weak char byte_AA80A0 = '\0'; // weak int dword_AA80B0 = 0; // weak int dword_AA80B4 = 0; // weak char byte_AA80BC = '\0'; // weak int dword_AA80CC = 0; // weak int dword_AA80D0 = 0; // weak _UNKNOWN std::runtime_error `RTTI Type Descriptor'; // weak void **std::tr1::_Bind,CharCreateFrameWork *>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak char byte_AA8A22 = '\x01'; // weak void **std::tr1::_Bind,CharSelectFrameWork *>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak int dword_AA8C68 = 1065353216; // weak __int64 qword_AA8C6C = 4575657222473777152i64; // weak int dword_AA8C74 = 1065353216; // weak float flt_AA8C78 = 0.0; // weak float flt_AA8C7C = 0.0; // weak float flt_AA8C80 = 0.0; // weak int dword_AA8C88 = 1065353216; // weak int dword_AA8C8C = 0; // weak int dword_AA8C90 = 0; // weak int dword_AA8C94 = 1065353216; // weak char aIii[5] = "ÍÌÌ>"; // weak int dword_AA8CA0 = 1045220557; // weak int dword_AA8CA4 = 1065353216; // weak int dword_AA8CA8 = 1058050193; // weak int dword_AA8CAC = 1061734601; // weak int dword_AA8CB0 = 1065353216; // weak int dword_AA8CB4 = 1065353216; // weak int dword_AA8CB8 = 1065353216; // weak int dword_AA8CBC = 1065353216; // weak int dword_AA8CC0 = 0; // weak int dword_AA8CC4 = 1065353216; // weak _UNKNOWN unk_AA8CC8; // weak float flt_AA8CD0 = 0.0; // weak _UNKNOWN unk_AA8CD8; // weak _UNKNOWN unk_AA8CE8; // weak float flt_AA8D0C = 0.0; // weak float flt_AA8D20 = 0.0; // weak float flt_AA8D2C = 0.0; // weak _UNKNOWN unk_AA8D38; // weak _UNKNOWN unk_AA8D48; // weak float flt_AA8D7C = 0.0; // weak float flt_AA8D80 = 0.0; // weak float flt_AA8D88 = 0.0; // weak float flt_AA8D90 = 0.0; // weak int dword_AA8D98 = 1065353216; // weak int dword_AA8D9C = 1065353216; // weak int dword_AA8DA0 = 0; // weak int dword_AA8DA4 = 1065353216; // weak _UNKNOWN unk_AA8DA8; // weak char *off_AA8E3C[6] = { "verdana.ttf", "npctext.dat", "npcdlg.dat", "verdana.ttf", "npctextbox.dat", "npcdlgbox.dat" }; // weak char *off_AA8E40[5] = { "npctext.dat", "npcdlg.dat", "verdana.ttf", "npctextbox.dat", "npcdlgbox.dat" }; // weak char *off_AA8E44[4] = { "npcdlg.dat", "verdana.ttf", "npctextbox.dat", "npcdlgbox.dat" }; // weak char *off_AA8E48[3] = { "verdana.ttf", "npctextbox.dat", "npcdlgbox.dat" }; // weak char *off_AA8E4C[2] = { "npctextbox.dat", "npcdlgbox.dat" }; // weak char *off_AA8E50 = "npcdlgbox.dat"; // weak char byte_AA8E54 = '\x01'; // weak char *off_AA8E58 = "shinefontfileencrypt"; // idb char *off_AA8EF0[2] = { "Game\\WebWin.nif", &type_info::`vftable' }; // weak int dword_AA92F4 = 256; // weak int dword_AA92F8 = 256; // weak int dword_AA9338 = 256; // weak int dword_AA933C = 256; // weak void **off_AA96AC = &NiTMapBase>,char const *,NiPointer>::`vftable'; // weak int dword_AA96B0 = 37; // weak int dword_AA96B4 = 0; // weak char byte_AA96BC = '\0'; // weak void **off_AA96C0 = &NiTMapBase>,char const *,NiPointer>::`vftable'; // weak int dword_AA96C4 = 37; // weak int dword_AA96C8 = 0; // weak char byte_AA96D0 = '\0'; // weak void *dword_AA98F4 = NULL; // idb int dword_AA9904 = 0; // weak int dword_AA9908 = 15; // weak char *off_AA9C00[33] = { "Common\\Common", "Common\\FrameBox", "Common\\Loading", "Account\\Login", "Game\\MainInterface", "Common\\LogInterface", "Game\\SkillPwrIcon", "Game\\MainInterface_2", "Game\\StatTitleIcon16", "Game\\StatTitleIcon", "Game\\MainInterface_temp", "Game\\Chatting", "Game\\popup", "Game\\popupCursor", "Game\\ShortCut", "Game\\event01", "Account\\Account_SvList", "Account\\ServerList", "Game\\Maininterface_3", "..\\Skin\\skin", "Game\\MainInterface_4", "Game\\MainInterface_6", "Game\\guildflag_Blue", "Game\\guildflag_Red", "Game\\MainInterface_8", "Game\\GB_SlotMachine02", "Account\\SignUp", "charcreate\\LogInterface", "Game\\MainInterface_10", "Game\\MainInterface_11", "Game\\MainInterface_E01", "Game\\MainInterface_99", &type_info::`vftable' }; // weak char byte_AAADF8 = '\x01'; // weak char byte_AAADF9 = '\x01'; // weak int dword_AAADFC = 17; // weak char *off_AAAE00[17] = { "cursor\\NorCursor.cur", "cursor\\AtkCursor.cur", "cursor\\DropCursor.cur", "cursor\\DropCursor2.cur", "cursor\\NonCastCursor.cur", "cursor\\CastCursor.cur", "cursor\\NpcCursor.cur", "cursor\\MiningCursor.cur", "cursor\\CollectCursor.cur", "cursor\\QuestCursor.cur", "cursor\\Scroll.cur", "cursor\\repairCursor.cur", "cursor\\repairCursor.cur", "cursor\\Enchant.cur", "cursor\\RecoverCusror.cur", "cursor\\PutOnClear.cur", &type_info::`vftable' }; // weak _UNKNOWN NiZBufferProperty `RTTI Type Descriptor'; // weak int dword_AAAEA8 = 1; // weak int dword_AAE17C = 1; // weak int dword_AAE180 = 4; // weak void *dword_AAE1D0 = NULL; // idb int dword_AAE1E0 = 0; // weak int dword_AAE1E4 = 15; // weak void *dword_AAE1EC = NULL; // idb int dword_AAE1FC = 0; // weak int dword_AAE200 = 15; // weak void *dword_AAE208 = NULL; // idb int dword_AAE218 = 0; // weak int dword_AAE21C = 15; // weak void *dword_AAE224 = NULL; // idb int dword_AAE234 = 0; // weak int dword_AAE238 = 15; // weak void *dword_AAE240 = NULL; // idb int dword_AAE250 = 0; // weak int dword_AAE254 = 15; // weak void *dword_AAE25C = NULL; // idb int dword_AAE26C = 0; // weak int dword_AAE270 = 15; // weak void *dword_AAE278 = NULL; // idb int dword_AAE288 = 0; // weak int dword_AAE28C = 15; // weak void *dword_AAE294 = NULL; // idb int dword_AAE2A4 = 0; // weak int dword_AAE2A8 = 15; // weak void *dword_AAE2B0 = NULL; // idb int dword_AAE2C0 = 0; // weak int dword_AAE2C4 = 15; // weak void *dword_AAE2CC = NULL; // idb int dword_AAE2DC = 0; // weak int dword_AAE2E0 = 15; // weak void *dword_AAE2E8 = NULL; // idb int dword_AAE2F8 = 0; // weak int dword_AAE2FC = 15; // weak void *dword_AAE304 = NULL; // idb int dword_AAE314 = 0; // weak int dword_AAE318 = 15; // weak void *dword_AAE320 = NULL; // idb int dword_AAE330 = 0; // weak int dword_AAE334 = 15; // weak void *dword_AAE33C = NULL; // idb int dword_AAE34C = 0; // weak int dword_AAE350 = 15; // weak void *dword_AAE358 = NULL; // idb int dword_AAE368 = 0; // weak int dword_AAE36C = 15; // weak void *dword_AAE374 = NULL; // idb int dword_AAE384 = 0; // weak int dword_AAE388 = 15; // weak void *dword_AAE390 = NULL; // idb int dword_AAE3A0 = 0; // weak int dword_AAE3A4 = 15; // weak void *dword_AAE3AC = NULL; // idb int dword_AAE3BC = 0; // weak int dword_AAE3C0 = 15; // weak void *dword_AAE3C8 = NULL; // idb int dword_AAE3D8 = 0; // weak int dword_AAE3DC = 15; // weak void *dword_AAE3E4 = NULL; // idb int dword_AAE3F4 = 0; // weak int dword_AAE3F8 = 15; // weak void *dword_AAE400 = NULL; // idb int dword_AAE410 = 0; // weak int dword_AAE414 = 15; // weak _UNKNOWN CBaseObject `RTTI Type Descriptor'; // weak _UNKNOWN CWorldConfig `RTTI Type Descriptor'; // weak int dword_AAE830 = 0; // weak unsigned __int8 *dword_AAE834 = NULL; // idb size_t dword_AAE844 = 0u; // idb int dword_AAE848 = 15; // weak unsigned __int8 *dword_AAE850 = NULL; // idb size_t dword_AAE860 = 0u; // idb int dword_AAE864 = 15; // weak unsigned __int8 *dword_AAE86C = NULL; // idb size_t dword_AAE87C = 0u; // idb int dword_AAE880 = 15; // weak float flt_AAEBA4 = 50.0; // weak int dword_AAEBA8 = 1024; // idb int dword_AAEBAC = 768; // idb LPCSTR lpOutputString = NULL; // idb int dword_AAEBC0 = 0; // weak int dword_AAEBC4 = 15; // weak int (__stdcall *(*off_AAEBCC)[2])(int) = &off_9BC670; // weak int (__thiscall **off_AAEBD0)(void *, char) = &off_9BC634; // weak int dword_AAEBD4 = 0; // weak int dword_AAEBD8 = 0; // weak int dword_AAEBDC = 0; // weak void **std::tr1::_Bind,GameFrameWork *>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak void **bool (__cdecl *)(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &) `RTTI Type Descriptor' = &type_info::`vftable'; // weak char byte_AB017F = '\x01'; // weak char byte_AB0180 = '\x01'; // weak void **bool (__cdecl *)(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &) `RTTI Type Descriptor' = &type_info::`vftable'; // weak int dword_AB0BAC = 4294967295; // weak int dword_AB0BB0 = 4294967295; // weak int dword_AB0BB4 = 4294967295; // weak int dword_AB0BB8 = 4294967295; // weak int dword_AB0BBC = 4294967295; // weak __int16 word_AB0BC0 = 65535; // weak __int16 word_AB0BC4 = 65535; // weak __int16 word_AB0BC8 = 65535; // weak __int16 word_AB0BCC = 65535; // weak __int16 word_AB0BD0 = 65535; // weak int dword_AB0C84 = 1; // weak char byte_AB0C88 = '\x05'; // weak char *off_AB0E98 = "Game\\WebWin.nif"; // weak int (__thiscall **off_AB173C)(void *, char) = &off_9E4EEC; // weak int dword_AB1740 = 0; // weak int dword_AB1744 = 0; // weak int dword_AB1748 = 0; // weak void **bool (__cdecl *)(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &) `RTTI Type Descriptor' = &type_info::`vftable'; // weak void **bool (__cdecl *)(GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &) `RTTI Type Descriptor' = &type_info::`vftable'; // weak int (__thiscall **off_AB25B4)(void *, char) = &off_9F0BA8; // weak int dword_AB25B8 = 0; // weak int dword_AB25BC = 0; // weak int dword_AB25C0 = 0; // weak int (__thiscall **off_AB27A4)(void *, char) = &off_9F0C48; // weak int dword_AB27A8 = 0; // weak int dword_AB27AC = 0; // weak int dword_AB27B0 = 0; // weak int (__thiscall **off_AB2930)(void *, char) = &off_9F0D14; // weak int dword_AB2934 = 0; // weak int dword_AB2938 = 0; // weak int dword_AB293C = 0; // weak float flt_AB2A2C = 1000.0; // weak float flt_AB2A30 = 700.0; // weak float flt_AB2A34 = 1000.0; // weak int dword_AB2A5C = 700; // weak int dword_AB2AD8[5] = { 255, 628479, 65535, 65280, 13553358 }; // idb float flt_AB2AEC = 1000.0; // weak float flt_AB2AF0 = 700.0; // weak float flt_AB2AF4 = 1000.0; // weak _UNKNOWN unk_AB2B5C; // weak _UNKNOWN unk_AB2B6C; // weak _UNKNOWN unk_AB2B7C; // weak _UNKNOWN unk_AB2B8C; // weak float flt_AB2B9C = 12.0; // weak float flt_AB2BA0 = 1000.0; // weak float flt_AB2BA4 = 700.0; // weak float flt_AB2BA8 = 1000.0; // weak _UNKNOWN unk_AB3158; // weak _UNKNOWN unk_AB3168; // weak _UNKNOWN unk_AB3178; // weak _UNKNOWN unk_AB3188; // weak float flt_AB3198 = 1000.0; // weak float flt_AB319C = 700.0; // weak float flt_AB31A0 = 1000.0; // weak int dword_AB31BC = 700; // weak int (__thiscall **off_AB3304)(void *, char) = &off_9F193C; // weak int dword_AB3308 = 0; // weak int dword_AB330C = 0; // weak int dword_AB3310 = 0; // weak void **std::tr1::_Bind,CHairShopFrameWork *>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak char byte_AB35A8[] = { '\x01' }; // weak char byte_AB35B4[12] = { '\x01', '\x01', '\x06', '\x06', '\v', '\v', '\x10', '\x10', '\x15', '\x15', '\x1A', '\x1A' }; // idb char *off_AB35C0[13] = { "Fighter-M", "Fighter-F", "Cleric-M", "Cleric-F", "Archer-M", "Archer-F", "Mage-M", "Mage-F", "Joker-M", "Joker-F", "Sentinel-M", "Sentinel-F", &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable' }; // weak void **off_AB35F0 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // weak int dword_AB35F4 = 37; // weak void *dword_AB35F8 = NULL; // idb void **off_AB3600 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // weak int dword_AB3604 = 37; // weak void *dword_AB3608 = NULL; // idb void **off_AB3610 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // weak int dword_AB3614 = 37; // weak void *dword_AB3618 = NULL; // idb void **off_AB3620 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // weak int dword_AB3624 = 37; // weak void *dword_AB3628 = NULL; // idb void **off_AB3630 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // weak int dword_AB3634 = 37; // weak void *dword_AB3638 = NULL; // idb char byte_AB395E = '\x01'; // weak int dword_AB3960[5] = { 2, 1, 0, 4294967295, 4294967146 }; // idb char *off_AB3998 = "Restart"; // idb float flt_AB399C = 9999.9004; // weak float flt_AB39A0 = 9999.9004; // weak float flt_AB39A4 = 9999.9004; // weak char *off_AB3B78 = "_CharShine_"; // idb char *off_AB4088[34] = { "HatAcc", "HairLink", "FaceLink", "Eye", "Mouth", "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB408C[33] = { "HairLink", "FaceLink", "Eye", "Mouth", "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4090[32] = { "FaceLink", "Eye", "Mouth", "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4094[31] = { "Eye", "Mouth", "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4098[30] = { "Mouth", "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB409C[29] = { "Chest", "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40A0[28] = { "Chest_R", "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40A4[27] = { "Body", "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40A8[26] = { "Back", "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40AC[25] = { "TopLink", "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40B0[24] = { "LeftShoulder", "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40B4[23] = { "RightShoulder", "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40B8[22] = { "Shield", "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40BC[21] = { "Weapon", "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40C0[20] = { "LeftBracelet", "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40C4[19] = { "RightBracelet", "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40C8[18] = { "Belt", "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40CC[17] = { "Tail", "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40D0[16] = { "Leg", "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40D4[15] = { "Shoes", "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40D8[14] = { "LeftShoesAcc", "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40DC[13] = { "RightShoesAcc", "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40E0[12] = { "LOD0", "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40E4[11] = { "LOD1", "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40E8[10] = { "LOD2", "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40EC[9] = { "LeftUpperArm", "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40F0[8] = { "RightUpperArm", "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40F4[7] = { "LeftThigh", "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40F8[6] = { "RightThigh", "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB40FC[5] = { "LeftCalf", "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4100[4] = { "RightCalf", "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4104[3] = { "World", "World_Cos", &type_info::`vftable' }; // weak char *off_AB4108[2] = { "World_Cos", &type_info::`vftable' }; // weak int dword_AB4188 = 4294967295; // weak int (__thiscall **off_AB418C)(void *, char) = &off_9F4C48; // weak int dword_AB4190 = 0; // weak int dword_AB4194 = 0; // weak int dword_AB4198 = 0; // weak int (__thiscall **off_AB419C)(void *, char) = &off_9F4C48; // weak int dword_AB41A0 = 0; // weak int dword_AB41A4 = 0; // weak int dword_AB41A8 = 0; // weak int (__thiscall **off_AB41AC)(void *, char) = &off_9F4C48; // weak int dword_AB41B0 = 0; // weak int dword_AB41B4 = 0; // weak int dword_AB41B8 = 0; // weak char *off_AB4378 = "_DropItem_"; // idb char aSfxLearnskill[15] = "SFX_LearnSkill"; // weak void **off_AB4EE0 = &NiTMapBase,char const *,NiPointer>::`vftable'; // weak int dword_AB4EE4 = 37; // weak int dword_AB4EE8 = 0; // weak char byte_AB4EF0 = '\0'; // weak float flt_AB4FD0 = 0.0; // weak float flt_AB4FD4 = 0.0; // weak float flt_AB4FD8 = 1.0; // weak int dword_AB4FDC = 0; // weak int dword_AB4FE0 = 0; // weak int dword_AB4FE4 = 3212836864; // weak int dword_AB4FE8 = 0; // weak int dword_AB4FEC = 1065353216; // weak int dword_AB4FF0 = 0; // weak int dword_AB4FF4 = 1065353216; // weak int dword_AB4FF8 = 0; // weak int dword_AB4FFC = 0; // weak float flt_AB500C = -1.0; // weak float flt_AB5010 = 0.0; // weak float flt_AB5014 = 0.0; // weak _UNKNOWN unk_AB5018; // weak unsigned __int8 *dword_AB5244 = NULL; // idb int dword_AB5254 = 0; // weak int dword_AB5258 = 15; // weak unsigned __int8 *dword_AB5260 = NULL; // idb int dword_AB5270 = 0; // weak int dword_AB5274 = 15; // weak float flt_AB52A0 = 14400.0; // weak float flt_AB5410 = 25.0; // weak _UNKNOWN unk_AB5504; // weak _UNKNOWN unk_AB5514; // weak _UNKNOWN CHazeScreenEffect `RTTI Type Descriptor'; // weak char byte_AB58AB = '\x01'; // weak float flt_AB5A94 = 1.0; // weak float flt_AB5A98 = 3100.0; // weak float flt_AB5C18 = 1.0e10; // weak float flt_AB5C1C = 20.0; // weak float flt_AB5C20 = 1.0; // weak int (__thiscall **off_AB5C24)(void *, char) = &off_9F77DC; // weak int dword_AB5C28 = 0; // weak int dword_AB5C2C = 0; // weak int dword_AB5C30 = 0; // weak _DWORD *dword_AB6520 = NULL; // idb int dword_AB6524 = 0; // weak int dword_AB6528 = 0; // weak int dword_AB6530 = 0; // weak int dword_AB6534 = 0; // weak int dword_AB653C = 0; // weak char byte_AB6578 = '\0'; // weak bool *off_AB65D0 = &bool `RTTI Type Descriptor'; // weak int dword_AB66A0 = 335740934; // weak __int16 word_AB66A4 = 0; // weak void **off_AB66A8 = &PgTList::`vftable'; // weak int dword_AB66AC = 0; // weak int dword_AB66B0 = 0; // weak int dword_AB66B4 = 0; // weak int dword_AB66B8 = 0; // weak __int16 word_AB66BC = 0; // weak float flt_AB66BE = 1.0; // weak float flt_AB66C2 = 5000.0; // weak float flt_AB66CA = 200.0; // weak float flt_AB66CE = 500.0; // weak float flt_AB66D2 = 1.0; // weak int dword_AB66D6 = 0; // weak char byte_AB66DA = '\x01'; // weak int dword_AB66DF = 1024; // idb int dword_AB66E3 = 768; // weak char byte_AB66E7 = '\x01'; // weak int dword_AB66E8 = 0; // weak char byte_AB66EC = '\0'; // weak char byte_AB66EE = '\x01'; // weak char byte_AB66EF = '\x01'; // weak char byte_AB66F0 = '\x01'; // weak float flt_AB66F1 = 1.0; // weak char byte_AB66F5 = '\x01'; // weak char byte_AB66F6 = '\0'; // weak int dword_AB66F8 = 0; // weak __int16 word_AB66FC = 0; // weak int dword_AB6700 = 50; // weak int dword_AB6704 = 50; // weak int dword_AB6708 = 50; // weak int dword_AB670C = 50; // weak int dword_AB6710 = 50; // weak int dword_AB6718 = 0; // weak __int16 word_AB671C = 0; // weak int dword_AB671E = 27; // weak float flt_AB6722[] = { 0.0 }; // weak float flt_AB6726[52] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; // idb int dword_AB67FA = 0; // weak int dword_AB67FE = 0; // weak int dword_AB6802 = 0; // weak int dword_AB6806 = 0; // weak int dword_AB680A = 0; // weak int dword_AB680E = 0; // weak int dword_AB6818 = 0; // weak __int16 word_AB681C = 0; // weak int dword_AB681E = 117; // weak char byte_AB6822[] = { '\0' }; // weak char byte_AB6823[190] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; // idb _UNKNOWN unk_AB68E1; // weak void **off_AB6E90 = &PgTList>::`vftable'; // weak int dword_AB6E94 = 0; // weak int dword_AB6E98 = 0; // weak int dword_AB6E9C = 0; // weak int (__thiscall **off_AB6EA0)(void *, char) = &off_9F884C; // weak int dword_AB6EA4 = 0; // weak int dword_AB6EA8 = 0; // weak int dword_AB6EAC = 0; // weak void **off_AB6EF8 = &NiRefObject::`vftable'; // weak int dword_AB6F00 = 0; // weak int dword_AB6F04 = 0; // weak int dword_AB6F08 = 0; // weak int dword_AB6F0C = 0; // weak int dword_AB6F10 = 0; // weak int dword_AB6F14 = 0; // weak int dword_AB6F18 = 0; // weak int dword_AB6F1C = 0; // weak int dword_AB6F20 = 0; // weak int dword_AB6F24 = 0; // weak int dword_AB6F28 = 0; // weak int dword_AB6F2C = 0; // weak int dword_AB6F30 = 0; // weak int dword_AB6F34 = 0; // weak void **std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak void **std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak char *off_AB7284 = "screenshot"; // weak char byte_AB7288 = '\x01'; // weak void **off_AB76B4 = &PgTList::`vftable'; // weak int dword_AB76B8 = 0; // weak int dword_AB76BC = 0; // weak int dword_AB76C0 = 0; // weak void *dword_AB791C = NULL; // idb int dword_AB792C = 0; // weak int dword_AB7930 = 15; // weak char *dword_AB7938 = NULL; // idb size_t dword_AB7948 = 0u; // idb int dword_AB794C = 15; // weak void *dword_AB7954 = NULL; // idb int dword_AB7964 = 0; // weak int dword_AB7968 = 15; // weak void *dword_AB7970 = NULL; // idb int dword_AB7980 = 0; // weak int dword_AB7984 = 15; // weak int dword_AB79C8 = 1056964608; // weak int dword_AB79CC = 1065353216; // weak int dword_AB79D0 = 1056964608; // weak int dword_AB79D4 = 1065353216; // weak int dword_AB79D8 = 1056964608; // weak int dword_AB79DC = 1056964608; // weak int dword_AB79E0 = 1065353216; // weak int dword_AB79E4 = 1065353216; // weak int dword_AB79E8 = 1065353216; // weak _UNKNOWN unk_AB79EC; // weak void *dword_AB79F8 = NULL; // idb int dword_AB7A08 = 0; // weak int dword_AB7A0C = 15; // weak void *dword_AB7A14 = NULL; // idb int dword_AB7A24 = 0; // weak int dword_AB7A28 = 15; // weak void *dword_AB7A30 = NULL; // idb int dword_AB7A40 = 0; // weak int dword_AB7A44 = 15; // weak char *dword_AB7A4C = NULL; // idb size_t dword_AB7A5C = 0u; // idb int dword_AB7A60 = 15; // weak void *dword_AB7A68 = NULL; // idb int dword_AB7A78 = 0; // weak int dword_AB7A7C = 15; // weak void *dword_AB7A84 = NULL; // idb int dword_AB7A94 = 0; // weak int dword_AB7A98 = 15; // weak void *dword_AB7AA0 = NULL; // idb int dword_AB7AB0 = 0; // weak int dword_AB7AB4 = 15; // weak void *dword_AB7ABC = NULL; // idb int dword_AB7ACC = 0; // weak int dword_AB7AD0 = 15; // weak void *dword_AB7AD8 = NULL; // idb int dword_AB7AE8 = 0; // weak int dword_AB7AEC = 15; // weak void *dword_AB7AF4 = NULL; // idb int dword_AB7B04 = 0; // weak int dword_AB7B08 = 15; // weak void *dword_AB7B60 = NULL; // idb int dword_AB7B70 = 0; // weak int dword_AB7B74 = 15; // weak void *dword_AB7B7C = NULL; // idb int dword_AB7B8C = 0; // weak int dword_AB7B90 = 15; // weak void *dword_AB7B98 = NULL; // idb int dword_AB7BA8 = 0; // weak int dword_AB7BAC = 15; // weak void *dword_AB7BB4 = NULL; // idb int dword_AB7BC4 = 0; // weak int dword_AB7BC8 = 15; // weak void *dword_AB7BD0 = NULL; // idb int dword_AB7BE0 = 0; // weak int dword_AB7BE4 = 15; // weak void *dword_AB7BEC = NULL; // idb int dword_AB7BFC = 0; // weak int dword_AB7C00 = 15; // weak void *dword_AB7C08 = NULL; // idb int dword_AB7C18 = 0; // weak int dword_AB7C1C = 15; // weak void *dword_AB7C24 = NULL; // idb int dword_AB7C34 = 0; // weak int dword_AB7C38 = 15; // weak void *dword_AB7C40 = NULL; // idb int dword_AB7C50 = 0; // weak int dword_AB7C54 = 15; // weak int (__thiscall **off_AB7EDC)(void *, char) = &off_9FC728; // weak int dword_AB7EE0 = 0; // weak int dword_AB7EE4 = 0; // weak int dword_AB7EE8 = 0; // weak void **off_AB7F2C = &NetMgr::`vftable'; // weak int dword_AB7F30 = 0; // weak int dword_AB7F34[5] = { 0, 0, 0, 0, 0 }; // idb int dword_AB7F48 = 0; // weak int dword_AB7F4C = 0; // weak void **std::tr1::_Bind,Char *,std::tr1::_Ph<1>>> `RTTI Type Descriptor' = &type_info::`vftable'; // weak float flt_AB8D5C = 550.0; // weak float flt_AB8D60 = 5.0; // weak char asc_AB8EA8[2] = "€"; // weak void *off_AB90F8 = &unk_A09E60; // weak void *off_AB910C = &unk_A0A2E0; // weak _UNKNOWN unk_AB9120; // weak int dword_AB916C = 7; // weak int dword_AB9170 = 10; // weak int dword_AB9174 = 45; // weak int dword_AB9178 = 46; // weak int dword_AB917C = 69; // weak int dword_AB9180 = 6; // weak int dword_AB9184 = 59; // weak int dword_AB9188 = 27; // weak int dword_AB918C = 2; // weak int dword_AB9190 = 12; // weak int dword_AB9194 = 72; // weak int dword_AB9198 = 78; // weak int dword_AB919C = 91; // weak int dword_AB91A0 = 5; // weak int dword_AB91A4 = 95; // weak int dword_AB91A8 = 11; // weak int dword_AB91AC = 13; // weak int dword_AB91B0 = 21; // weak int dword_AB91B4 = 23; // weak int dword_AB91B8 = 24; // weak int dword_AB91BC = 28; // weak int dword_AB91C0 = 31; // weak int dword_AB91C4 = 32; // weak int dword_AB91C8 = 35; // weak int dword_AB91CC = 38; // weak int dword_AB91D0 = 39; // weak int dword_AB91D4 = 40; // weak int dword_AB91D8 = 42; // weak int dword_AB91DC = 55; // weak int dword_AB91E0 = 61; // weak int dword_AB91E4 = 53; // weak int dword_AB91E8 = 44; // weak int dword_AB91EC = 33; // weak int dword_AB91F0 = 60; // weak int dword_AB91F4 = 62; // weak int dword_AB91F8 = 15; // weak int dword_AB91FC = 22; // weak int dword_AB9200 = 76; // weak int dword_AB9204 = 8; // weak int dword_AB9208 = 56; // weak int dword_AB920C = 64; // weak int dword_AB9210 = 73; // weak int dword_AB9214 = 65; // weak int dword_AB9218 = 57; // weak int dword_AB921C = 94; // weak int dword_AB9220 = 41; // weak int dword_AB9224 = 14; // weak int dword_AB9228 = 43; // weak int dword_AB922C = 68; // weak int dword_AB9230 = 30; // weak int dword_AB9234 = 4; // weak int dword_AB9238 = 25; // weak int dword_AB923C = 26; // weak int dword_AB9240 = 34; // weak int dword_AB9244 = 37; // weak int dword_AB9248 = 67; // weak int dword_AB924C = 3; // weak int dword_AB9250 = 58; // weak int dword_AB9254 = 66; // weak int dword_AB9258 = 71; // weak int dword_AB925C = 19; // weak int dword_AB9260 = 77; // weak int dword_AB9264 = 89; // weak int dword_AB9268 = 16; // weak int dword_AB926C = 20; // weak int dword_AB9270 = 74; // weak int dword_AB9274 = 50; // weak int dword_AB9278 = 18; // weak int dword_AB927C = 90; // weak int dword_AB9280 = 93; // weak int dword_AB9284 = 9; // weak int dword_AB9288 = 47; // weak int dword_AB928C = 1; // weak int dword_AB9290 = 70; // weak int dword_AB9294 = 17; // weak int dword_AB9298 = 79; // weak int dword_AB929C = 49; // weak int dword_AB92A0 = 51; // weak int dword_AB92A4 = 52; // weak int dword_AB92A8 = 92; // weak int dword_AB92AC = 48; // weak char *off_AB92C0[3] = { "Software\\Intel Corporation\\PLSuite\\IJLib", "USECPU", "TRACE" }; // weak char *off_AB92C4[2] = { "USECPU", "TRACE" }; // weak _UNKNOWN unk_AB92E0; // weak int dword_AB9300 = 1000; // weak int (__thiscall *off_ABA238)(void *, char) = &off_A107A0; // weak int (__thiscall *off_ABA240)(void *, char) = &off_A107C8; // weak int (__thiscall *off_ABA248)(void *, char) = &off_A107EC; // weak volatile LONG dword_ABA278 = 4294967295; // idb int dword_ABA360 = 3141592654; // weak void *off_ABA380 = &unk_BA73A0; // weak double dbl_ABA880 = 1.797693134862316e308; // weak int dword_ABB308 = 28800; // weak int dword_ABB30C = 1; // weak int dword_ABB310 = 4294963696; // weak void *off_ABB398 = &unk_ABB318; // weak char *off_ABB550[44] = { "No error", "Operation not permitted", "No such file or directory", "No such process", "Interrupted function call", "Input/output error", "No such device or address", "Arg list too long", "Exec format error", "Bad file descriptor", "No child processes", "Resource temporarily unavailable", "Not enough space", "Permission denied", "Bad address", "Unknown error", "Resource device", "File exists", "Improper link", "No such device", "Not a directory", "Is a directory", "Invalid argument", "Too many open files in system", "Too many open files", "Inappropriate I/O control operation", "Unknown error", "File too large", "No space left on device", "Invalid seek", "Read-only file system", "Too many links", "Broken pipe", "Domain error", "Result too large", "Unknown error", "Resource deadlock avoided", "Unknown error", "Filename too long", "No locks available", "Function not implemented", "Directory not empty", "Illegal byte sequence", "Unknown error" }; // weak _UNKNOWN unk_ABB600; // weak int dword_ABB650 = 1024; // weak int dword_ABB654 = 4294966273; // weak int dword_ABB658 = 53; // weak int dword_ABB65C = 11; // weak int dword_ABB660 = 64; // weak int dword_ABB664 = 1023; // weak int dword_ABB668 = 128; // weak int dword_ABB66C = 4294967169; // weak int dword_ABB670 = 24; // weak int dword_ABB674 = 8; // weak int dword_ABB678 = 32; // weak int dword_ABB67C = 127; // weak HANDLE hObject = (HANDLE)0xFFFFFFFE; // idb int dword_ABB948 = 256; // weak int dword_ABBE7C = 20; // weak int dword_ABC03C = 4294967295; // weak char *off_ABC0E8 = "2.0.0.0"; // idb float flt_ABC6DC[] = { 0.0 }; // weak float flt_ABC6F4[] = { 0.046910077 }; // weak float flt_ABC724[] = { ?flt }; // weak float flt_ABC73C[] = { 0.046910077 }; // weak char byte_ABCEAE = '\x02'; // weak int dword_ABCEB0 = 4286578687; // weak int dword_ABCEB4 = 4286578687; // weak int dword_ABCEB8 = 4286578687; // weak int dword_ABCEBC = 4286578687; // weak int dword_ABCEC0 = 4286578687; // weak int dword_ABCEC4 = 4286578687; // weak int dword_ABCEC8 = 4286578687; // weak int dword_ABCECC = 4286578687; // weak int dword_ABCED0 = 4286578687; // weak int dword_ABCED4 = 4286578687; // weak float flt_ABD074 = 0.33333334; // weak float flt_ABD1D4 = 0.0000099999997; // weak char byte_ABD306 = '$'; // weak _UNKNOWN unk_ABD440; // weak volatile LONG dword_ABD464 = 1; // idb int dword_ABD48C = 1065353216; // weak int dword_ABD490 = 0; // weak int dword_ABD494 = 0; // weak int dword_ABD498 = 0; // weak int dword_ABD49C = 1065353216; // weak int dword_ABD4A0 = 0; // weak int dword_ABD4A4 = 0; // weak int dword_ABD4A8 = 0; // weak int dword_ABD4AC = 1065353216; // weak float flt_ABD4B0 = 1.0; // weak float flt_ABD4B4 = 1.0; // weak float flt_ABD4B8 = 1.0; // weak int dword_ABD4F8 = 2048; // weak int dword_ABD4FC = 1065353216; // weak int dword_ABD500 = 1065353216; // weak int dword_ABD504 = 1065353216; // weak int dword_ABD508 = 0; // weak int dword_ABD50C = 0; // weak int dword_ABD510 = 0; // weak int dword_ABD514 = 1065353216; // weak int dword_ABD518 = 1065353216; // weak int dword_ABD51C = 1065353216; // weak int dword_ABD520 = 1065353216; // weak int dword_ABD524 = 1065353216; // weak volatile LONG dword_ABD584 = 1; // idb char byte_ABD7D8 = '\x01'; // weak _UNKNOWN unk_ABD7DC; // weak _UNKNOWN unk_ABD9B0; // weak _UNKNOWN unk_ABD9F8; // weak _UNKNOWN unk_ABDA40; // weak _UNKNOWN unk_ABDA88; // weak _UNKNOWN unk_ABDAD0; // weak _UNKNOWN unk_ABDB18; // weak _UNKNOWN unk_ABDB60; // weak _UNKNOWN unk_ABDBA8; // weak _UNKNOWN unk_ABDBF0; // weak _UNKNOWN unk_ABDC38; // weak _UNKNOWN unk_ABDC80; // weak _UNKNOWN unk_ABDCC8; // weak _UNKNOWN unk_ABDD10; // weak _UNKNOWN unk_ABDD58; // weak _UNKNOWN unk_ABDDA0; // weak _UNKNOWN unk_ABDDE8; // weak _UNKNOWN unk_ABDE30; // weak _UNKNOWN unk_ABDE78; // weak _UNKNOWN unk_ABDEC0; // weak _UNKNOWN unk_ABDF08; // weak _UNKNOWN unk_ABDF50; // weak _UNKNOWN unk_ABDF98; // weak _UNKNOWN unk_ABDFE0; // weak _UNKNOWN unk_ABE070; // weak _UNKNOWN unk_ABE0B8; // weak _UNKNOWN unk_ABE148; // weak _UNKNOWN unk_ABE190; // weak _UNKNOWN unk_ABE1D8; // weak _UNKNOWN unk_ABE220; // weak _UNKNOWN unk_ABE268; // weak _UNKNOWN unk_ABE2B0; // weak _UNKNOWN unk_ABE2F8; // weak _UNKNOWN unk_ABE340; // weak _UNKNOWN unk_ABE388; // weak _UNKNOWN unk_ABE3D0; // weak _UNKNOWN unk_ABE418; // weak _UNKNOWN unk_ABE460; // weak _UNKNOWN unk_ABE4A8; // weak _UNKNOWN unk_ABE4F0; // weak _UNKNOWN unk_ABE538; // weak _UNKNOWN unk_ABE580; // weak _UNKNOWN unk_ABE5C8; // weak _UNKNOWN unk_ABE610; // weak _UNKNOWN unk_ABE658; // weak _UNKNOWN unk_ABE6A0; // weak _UNKNOWN unk_ABE6E8; // weak _UNKNOWN unk_ABE778; // weak _UNKNOWN unk_ABE7C0; // weak _UNKNOWN unk_ABE808; // weak _UNKNOWN unk_ABE850; // weak _UNKNOWN unk_ABE898; // weak _UNKNOWN unk_ABE8E0; // weak _UNKNOWN unk_ABE928; // weak _UNKNOWN unk_ABE970; // weak _UNKNOWN unk_ABE9B8; // weak _UNKNOWN unk_ABEA00; // weak int dword_ABEAB0 = 3; // weak int dword_ABEAFC = 4294967295; // weak int (__cdecl *off_ABEBD8[2])(int, int) = { &sub_8732F0, &type_info::`vftable' }; // weak int dword_ABEC28[3] = { 1, 2, 0 }; // idb int dword_ABEC34 = 1065353216; // weak int dword_ABEC38 = 0; // weak int dword_ABEC3C = 0; // weak int dword_ABEC40 = 0; // weak int dword_ABEF68 = 67240192; // weak int dword_ABEF6C = 335544324; // weak __int16 word_ABEF8C = 1; // weak int (__cdecl *off_ABEFD0[2])(__int16, int, int, int) = { &sub_87C070, &sub_87BF80 }; // weak int (__cdecl *off_ABEFD4)(__int16, int, int, int) = &sub_87BF80; // weak float flt_ABF014 = 0.000001; // weak __int16 word_ABF0E0 = 65535; // weak __int16 word_ABF0E4 = 65535; // weak char *off_ABF8D8[3] = { "BirthRate", "EmitterActive", &type_info::`vftable' }; // weak char *off_ABF8DC[2] = { "EmitterActive", &type_info::`vftable' }; // weak int dword_AC01D0 = 2139095039; // weak int dword_AC01D4 = 2139095039; // weak int dword_AC01D8 = 2139095039; // weak int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD) = &sub_8A9ED0; // weak char byte_AC05A2 = '\x01'; // weak int (*off_AC05A4)(void) = &loc_8AA280; // weak int (*off_AC05A8)(void) = &loc_8AA2C0; // weak int (**(*off_AC061C)[4])() = &off_AC0620; // weak char byte_AC0A02 = '\x01'; // weak char aOptionNotFound[17] = "option not found"; // weak CHAR aGamebryoApplic[] = "Gamebryo Application"; // idb int dword_AC11C8 = 8; // weak int dword_AC11CC = 32; // weak float flt_AC11D0 = 0.2; // weak int (__thiscall **off_AC1554)(void *, char) = &off_A33894; // weak int dword_AC1558 = 0; // weak int dword_AC155C = 0; // weak int dword_AC1560 = 0; // weak int dword_AC1640 = 1; // weak int dword_AC1644 = 1; // weak int dword_AC1CD8 = 12; // weak _UNKNOWN unk_AC1CE0; // weak void **off_AC20E4 = &NiTMapBase,char const *,NiPointer>::`vftable'; // weak int dword_AC20E8 = 37; // weak int dword_AC20EC = 0; // weak char byte_AC20F4 = '\0'; // weak void **off_AC224C = &NiTMapBase,char const *,NiPointer>::`vftable'; // weak int dword_AC2250 = 37; // weak int dword_AC2254 = 0; // weak char byte_AC225C = '\0'; // weak void **off_AC23B0 = &NiTMapBase,char const *,NiPointer>::`vftable'; // weak int dword_AC23B4 = 37; // weak int dword_AC23B8 = 0; // weak char byte_AC23C0 = '\0'; // weak void **off_AC2538 = &NiTMapBase,char const *,NiPointer>::`vftable'; // weak int dword_AC253C = 37; // weak int dword_AC2540 = 0; // weak char byte_AC2548 = '\0'; // weak int dword_AC254C = 4294967295; // weak char byte_AC2638 = '\x01'; // weak float flt_AC263C = 5.0; // weak _UNKNOWN unk_AC2760; // weak _UNKNOWN unk_AC2778; // weak void **boost::checked_deleter `RTTI Type Descriptor' = &type_info::`vftable'; // weak char byte_AC2894[16] = { '\0', '\x03', '\x04', '\x06', '\b', '\0', '\f', '\0', '\x01', '\x02', '\0', '\0', '\t', '\0', '\0', '\0' }; // idb int dword_AC28A4[13] = { 0, 0, 1, 2, 4294967295, 0, 0, 0, 4294967295, 1, 0, 0, 4294967294 }; // idb int dword_AC28D8[26] = { 0, 4294967295, 1, 0, 1, 0, 2, 0, 4294967295, 4294967294, 0, 0, 0, 0, 0, 0, 1065353216, 0, 0, 0, 1065353216, 0, 0, 0, 1065353216, 0 }; // idb _UNKNOWN unk_AC2940; // weak int *off_AC29E8 = &int `RTTI Type Descriptor'; // weak float *off_AC29F8 = &float `RTTI Type Descriptor'; // weak unsigned int *off_AC2A08 = &unsigned int `RTTI Type Descriptor'; // weak _UNKNOWN CGlowScreenEffect `RTTI Type Descriptor'; // weak _UNKNOWN CDepthOfFieldEffect `RTTI Type Descriptor'; // weak _UNKNOWN CAfterImageEffect `RTTI Type Descriptor'; // weak float flt_AC2C94 = 0.60000002; // weak float flt_AC2C98 = 0.5; // weak float flt_AC2C9C = 1.0; // weak float flt_AC2CA0 = 8.0; // weak int dword_AC2CA4 = 3; // weak int dword_AC2F6C = 1023; // weak int dword_AC2F70 = 767; // weak int qword_AC2F74 = 1024; // idb int dword_AC2F98 = 1; // weak int dword_AC2F9C = 4294967294; // weak LPCSTR lpClassName = "PgEditWin"; // idb char a02x[] = "%02x"; // idb char aCC[] = "%c%c"; // idb CHAR szFormat[] = "Netmarble_ClipFormat"; // idb int dword_AC3910[256] = { 696885672, 92635524, 382128852, 331600848, 340021332, 487395612, 747413676, 621093156, 491606364, 54739776, 403181592, 504238620, 289493328, 1020063996, 181060296, 591618912, 671621160, 71581764, 536879136, 495817116, 549511392, 583197408, 147374280, 386339604, 629514660, 261063564, 50529024, 994800504, 999011256, 318968592, 314757840, 785310444, 809529456, 210534540, 1057960764, 680042664, 839004720, 500027868, 919007988, 876900468, 751624428, 361075092, 185271048, 390550356, 474763356, 457921368, 1032696252, 16843008, 604250148, 470552604, 860058480, 411603096, 268439568, 214745292, 851636976, 432656856, 738992172, 667411428, 843215472, 58950528, 462132120, 297914832, 109478532, 164217288, 541089888, 272650320, 595829664, 734782440, 218956044, 914797236, 512660124, 256852812, 931640244, 441078360, 113689284, 944271480, 646357668, 302125584, 797942700, 365285844, 557932896, 63161280, 881111220, 21053760, 306336336, 1028485500, 227377548, 134742024, 521081628, 428446104, 0, 420024600, 67371012, 323179344, 935850996, 566354400, 1036907004, 910586484, 789521196, 654779172, 813740208, 193692552, 235799052, 730571688, 578986656, 776888940, 327390096, 223166796, 692674920, 1011642492, 151585032, 168428040, 1066382268, 802153452, 868479984, 96846276, 126321540, 335810580, 1053750012, 608460900, 516870876, 772678188, 189481800, 436867608, 101057028, 553722144, 726360936, 642146916, 33686016, 902164980, 310547088, 176849544, 202113036, 864269232, 1045328508, 281071824, 977957496, 122110788, 377918100, 633725412, 637936164, 8421504, 764256684, 533713884, 562143648, 805318704, 923218740, 781099692, 906375732, 352653588, 570565152, 940060728, 885321972, 663200676, 88424772, 206323788, 25264512, 701096424, 75792516, 394761108, 889532724, 197903304, 248431308, 1007431740, 826372464, 285282576, 130532292, 160006536, 893743476, 1003222008, 449499864, 952692984, 344232084, 424235352, 42107520, 80003268, 1070593020, 155795784, 956903736, 658989924, 12632256, 265274316, 398971860, 948482232, 252642060, 244220556, 37896768, 587408160, 293704080, 743202924, 466342872, 612671652, 872689716, 834793968, 138952776, 46318272, 793731948, 1024274748, 755835180, 4210752, 1049539260, 1041117756, 1015853244, 29475264, 713728680, 982168248, 240009804, 356864340, 990589752, 483184860, 675831912, 1062171516, 478974108, 415813848, 172638792, 373707348, 927429492, 545300640, 768467436, 105267780, 897954228, 722150184, 625303908, 986379000, 600040416, 965325240, 830583216, 529503132, 508449372, 969535992, 650568420, 847426224, 822161712, 717939432, 760045932, 525292380, 616882404, 817950960, 231588300, 143163528, 369496596, 973746744, 407392344, 348442836, 574775904, 688464168, 117900036, 855847728, 684253416, 453710616, 84214020, 961114488, 276861072, 709517928, 705307176, 445289112 }; // idb int dword_AC3D10[256] = { 943196208, 3894986976, 741149985, 2753988258, 3423588291, 3693006546, 2956166067, 3090712752, 2888798115, 1612726368, 1410680145, 3288844227, 1141130304, 1815039843, 1747667811, 1478183763, 3221472195, 1612857954, 808649523, 3023406513, 673777953, 2686484640, 3760374498, 2754054051, 3490956243, 2417066385, 269549841, 67503618, 471600144, 3158084784, 875955762, 1208699715, 3962556387, 2282260608, 1814842464, 2821228704, 337053459, 3288646848, 336987666, 4097098992, 3221406402, 1141196097, 3760308705, 3558262482, 1010765619, 1010634033, 2349764226, 2551744656, 673712160, 1276005954, 4097230578, 1010699826, 2753922465, 4164536817, 202181889, 3693072339, 3625502928, 673909539, 1680229986, 2017086066, 606537507, 741281571, 4029792753, 1882342002, 1073889858, 3558130896, 1073824065, 3221274816, 1882407795, 1680295779, 2888600736, 2282457987, 4097296371, 2888666529, 2147516544, 471797523, 3356150466, 741084192, 2821360290, 875824176, 3490890450, 134941443, 3962490594, 3895052769, 1545424209, 2484372624, 404228112, 4164471024, 1410811731, 2888732322, 134744064, 3288712641, 269681427, 3423456705, 2215020162, 3090778545, 4232040435, 2084392305, 3221340609, 808517937, 4097164785, 2282392194, 1747602018, 2956034481, 3490824657, 538968096, 3558328275, 131586, 539099682, 67372032, 1747470432, 1882276209, 67569411, 3625700307, 2619182481, 2551810449, 1612792161, 3158216370, 3827746530, 1478052177, 3692940753, 1343308113, 2417000592, 3692874960, 2551876242, 2686682019, 2821426083, 3490758864, 2147582337, 202313475, 1141327683, 404359698, 3760440291, 3962359008, 2349698433, 3158282163, 2484504210, 2017151859, 1545358416, 2686616226, 2686550433, 1612923747, 539165475, 1275940161, 3356018880, 2619248274, 2619116688, 943327794, 202116096, 741215778, 3090844338, 1814974050, 2619314067, 1478117970, 4029858546, 2417132178, 4029924339, 1208568129, 2016954480, 3423390912, 336921873, 4164668403, 1882210416, 1949648241, 2084523891, 875889969, 269484048, 197379, 1680098400, 1814908257, 3288778434, 1949582448, 3558196689, 3023340720, 3895118562, 134809857, 1949714034, 404293905, 4231974642, 1073758272, 269615634, 3760242912, 3158150577, 67437825, 4164602610, 65793, 4029726960, 673843746, 1545490002, 2821294497, 1410745938, 1073955651, 2214954369, 336856080, 2282326401, 2551942035, 2955968688, 3827680737, 1208502336, 2017020273, 2484570003, 4231843056, 471731730, 2147648130, 539033889, 2349632640, 404425491, 1545555795, 1949779827, 1410614352, 2956100274, 471665937, 606405921, 1276071747, 0, 1141261890, 3962424801, 1477986384, 1343373906, 3895184355, 2084458098, 3625634514, 3356084673, 4231908849, 808452144, 2484438417, 1680164193, 1010568240, 3023472306, 3827614944, 3090910131, 2084326512, 202247682, 1343242320, 943262001, 606471714, 808583730, 2214888576, 1747536225, 2417197971, 876021555, 3827812323, 606340128, 2753856672, 3356216259, 1343439699, 134875650, 2215085955, 3625568721, 1275874368, 2147713923, 2349830019, 3423522498, 943393587, 1208633922, 3023538099 }; // idb int dword_AC4110[256] = { 2712152457, 2172913029, 3537114822, 3553629123, 1347687492, 287055117, 2695638156, 556016901, 1364991309, 1128268611, 270014472, 303832590, 1364201793, 4043062476, 3267889866, 1667244867, 539502600, 1078199364, 538976256, 2442927501, 3772784832, 3806339778, 3234334920, 320083719, 2711889285, 2206994319, 50332419, 1937259339, 3015195531, 319820547, 3536851650, 3807129294, 1886400576, 2156661900, 859586319, 2695374984, 842019330, 3520863693, 4076091078, 1886663748, 3773574348, 2442401157, 50858763, 1398019911, 1348213836, 1398283083, 2981903757, 16777473, 539239428, 270277644, 1936732995, 2425886856, 269488128, 3234598092, 4075827906, 3520600521, 539765772, 3823380423, 1919955522, 2206204803, 2476219275, 3520074177, 2189690502, 3251112393, 1616912448, 1347424320, 2745181059, 3823643595, 17566989, 2998154886, 2459704974, 1129058127, 3014932359, 1381505610, 3267626694, 1886926920, 2728666758, 303043074, 2745970575, 3520337349, 1633689921, 3284140995, 2964599940, 1094713665, 1380979266, 1903967565, 2173439373, 526344, 320610063, 2442664329, 0, 286791945, 263172, 1397756739, 4092868551, 3789562305, 4059839949, 1920218694, 590098191, 589571847, 2964336768, 2206731147, 34344462, 2745707403, 2728403586, 1651256910, 2475692931, 1095503181, 1634216265, 1887190092, 17303817, 34081290, 3015458703, 3823906767, 4092605379, 3250849221, 2206467975, 269751300, 4076617422, 1617175620, 3537641166, 573320718, 1128794955, 303569418, 33818118, 555753729, 1667771211, 1650730566, 33554946, 4059313605, 2458915458, 2189953674, 789516, 3014669187, 1920745038, 3503296704, 1920481866, 1128531783, 2459178630, 3789825477, 572794374, 2155872384, 2712415629, 3554418639, 2711626113, 808464384, 859059975, 2729193102, 842282502, 286528773, 572531202, 808990728, 4042536132, 2745444231, 1094976837, 1078725708, 2172649857, 3790088649, 2156135556, 2475956103, 825505029, 3284667339, 3268153038, 809253900, 1903178049, 286265601, 3284404167, 2173176201, 1903441221, 4093131723, 3537377994, 4042799304, 2425623684, 1364728137, 2189427330, 3234071748, 4093394895, 1095240009, 825768201, 1667508039, 3233808576, 3284930511, 3553892295, 2964863112, 51121935, 2190216846, 1111491138, 589308675, 2442137985, 1617701964, 3554155467, 2695111812, 808727556, 4059050433, 1078462536, 3267363522, 1668034383, 826031373, 556543245, 1077936192, 2998681230, 842808846, 2965126284, 3250586049, 2728929930, 2998418058, 1112280654, 1364464965, 859323147, 3504086220, 1617438792, 1937522511, 2426150028, 3503823048, 1112017482, 1381242438, 1936996167, 2694848640, 3790351821, 1111754310, 2981377413, 589835019, 1633953093, 4076354250, 3823117251, 2981640585, 2981114241, 2476482447, 1381768782, 4059576777, 3806602950, 2997891714, 825241857, 3806866122, 1634479437, 1398546255, 3773048004, 4042272960, 3251375565, 2156398728, 303306246, 842545674, 1347950664, 3503559876, 1650467394, 556280073, 50595591, 858796803, 3773311176, 320346891, 17040645, 1903704393, 2425360512, 1650993738, 573057546, 2459441802 }; // idb int dword_AC4510[256] = { 137377848, 3370182696, 220277805, 2258805798, 3485715471, 3469925406, 2209591347, 2293282872, 2409868335, 1080057888, 1162957845, 3351495687, 1145062404, 1331915823, 1264805931, 1263753243, 3284385795, 1113743394, 53686323, 2243015733, 153167913, 2158010400, 3269648418, 2275648551, 3285438483, 2173800465, 17895441, 100795398, 202382364, 2360392764, 103953462, 1262700555, 3487820847, 2290124808, 1281387564, 2292230184, 118690839, 3300967428, 101848086, 3304125492, 3267543042, 1161905157, 3252805665, 3335705622, 255015999, 221330493, 2390920206, 2291177496, 136325160, 1312967694, 3337810998, 238173246, 2241963045, 3388078137, 218172429, 3486768159, 3369130008, 186853419, 1180853286, 1249015866, 119743527, 253963311, 3253858353, 1114796082, 1111638018, 3302020116, 1094795265, 3233857536, 1131638835, 1197696039, 2359340076, 2340653067, 3354653751, 2376182829, 2155905024, 252910623, 3401762826, 203435052, 2325915690, 70267956, 3268595730, 184748043, 3470978094, 3387025449, 1297177629, 2224067604, 135272472, 3371235384, 1196643351, 2393025582, 134219784, 3317810181, 51580947, 3452029965, 2256700422, 2310125625, 3488873535, 1299283005, 3250700289, 20000817, 3320968245, 2323810314, 1247963178, 2175905841, 3251752977, 2105376, 3352548375, 33685506, 35790882, 67109892, 1214277672, 1097953329, 117638151, 3419658267, 2375130141, 2308020249, 1096900641, 2394078270, 3336758310, 1230067737, 3453082653, 1095847953, 2156957712, 3436239900, 2324863002, 2208538659, 2342758443, 3234910224, 2172747777, 251857935, 1195590663, 168957978, 3286491171, 3437292588, 2374077453, 2410921023, 2257753110, 1265858619, 1280334876, 2191695906, 2174853153, 1130586147, 52633635, 1296124941, 3368077320, 2391972894, 2358287388, 171063354, 201329676, 237120558, 2326968378, 1315073070, 2408815647, 1246910490, 3270701106, 2190643218, 3287543859, 1229015049, 1215330360, 3435187212, 85005333, 3421763643, 1081110576, 1165063221, 1332968511, 87110709, 1052688, 50528259, 1147167780, 1298230317, 3334652934, 1148220468, 3318862869, 2226172980, 3403868202, 151062537, 1181905974, 152115225, 3472030782, 1077952512, 34738194, 3235962912, 2377235517, 83952645, 3404920890, 16842753, 3237015600, 170010666, 1314020382, 2309072937, 1179800598, 1128480771, 2239857669, 68162580, 2306967561, 2341705755, 2159063088, 3319915557, 1212172296, 1232173113, 2274595863, 3438345276, 236067870, 2189590530, 18948129, 2357234700, 185800731, 1330863135, 1198748727, 1146115092, 2192748594, 219225117, 86058021, 1329810447, 0, 1178747910, 3454135341, 1213224984, 1112690706, 3420710955, 1316125758, 3402815514, 3384920073, 3455188029, 3158064, 2240910357, 1164010533, 204487740, 2259858486, 3303072804, 2343811131, 1282440252, 235015182, 1079005200, 154220601, 102900774, 36843570, 2223014916, 1231120425, 2207485971, 120796215, 3353601063, 69215268, 2225120292, 3418605579, 1129533459, 167905290, 2273543175, 3385972761, 1279282188, 2206433283, 2407762959, 3468872718, 187906107, 1245857802, 2276701239 }; // idb int (__stdcall **off_AC4910)(int, int) = &off_A4401C; // weak int dword_AC4D34 = 2; // weak int dword_AC4D38 = 2; // weak int dword_AC4D3C = 2; // weak char *off_AC4D98 = "__NDL_SCMData"; // idb int dword_AC4D9C[] = { 70 }; // weak void **off_AC5068 = &NiTPointerList::`vftable'; // weak int dword_AC506C = 0; // weak int dword_AC5070 = 0; // weak int dword_AC5074 = 0; // weak int (__thiscall **off_AC5924)(void *, char) = &off_A45A4C; // weak int dword_AC5928 = 0; // weak int dword_AC592C = 0; // weak int dword_AC5930 = 0; // weak char byte_AC5934 = '\x01'; // weak int dword_AC5938 = 108; // weak int dword_AC593C = 22; // weak _UNKNOWN unk_AC5940; // weak _UNKNOWN unk_AC5CA0; // weak _UNKNOWN unk_AC61F0; // weak _UNKNOWN unk_AC6200; // weak char *off_AC6210 = "NDL_UpdateTime"; // idb char byte_AC6240[] = { '\0' }; // weak char byte_AC6288[] = { '\0' }; // weak char byte_AC62A4[] = { '\0' }; // weak int dword_AC6330[] = { 7 }; // weak int dword_AC6334[] = { 0 }; // weak int dword_AC6338[] = { 8 }; // weak int dword_AC633C[] = { 3 }; // weak int dword_AC6340[] = { 9 }; // weak int dword_AC6344[] = { 2 }; // weak int dword_AC6348[] = { 14 }; // weak int dword_AC634C[] = { 1 }; // weak int dword_AC6B38 = 1; // weak int dword_AC6C48[13] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; // idb int dword_AC6C7C[15] = { 4294967295, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0 }; // idb int dword_AC6CB8 = 0; // weak int dword_AC7384 = 32; // weak int dword_AC7388 = 65536; // weak int dword_AC738C = 128; // weak int dword_AC76BC = 32; // weak char byte_AC8778[500] = { '\a', 'Y', 'i', 'J', '”', '\x11', '”', '…', 'Œ', 'ˆ', '\x05', 'Ë', ' ', 'ž', 'Í', 'X', ':', '6', '[', '\x1A', 'j', '\x16', 'þ', '½', 'ß', '”', '\x02', 'ø', '!', '–', 'È', 'é', 'ž', '÷', '¿', '½', 'Ï', 'Í', '²', 'z', '\0', 'Ÿ', '@', '\"', 'ü', '\x11', 'ù', '\f', '.', '\x12', 'û', '§', 't', '\n', '}', 'x', '@', '\x1E', ',', ' ', '-', '\x06', 'Ë', '¨', '¹', '~', 'ï', 'Þ', 'I', 'ê', 'N', '\x13', '\x16', '\x16', '€', 'ô', '=', 'Â', 'š', 'Ô', '†', '×', '”', '$', '\x17', 'ô', 'Ö', 'e', '½', '?', 'Û', 'ä', 'á', '\x0F', 'P', 'ö', 'ì', 'z', 'š', '\f', '\'', '=', '$', 'f', 'Ó', '\"', 'h', 'œ', 'š', 'R', '\v', 'à', 'ù', '¥', '\v', '%', 'Ú', '€', 'I', '\r', 'ý', '>', 'w', 'Ñ', 'V', '¨', '·', 'ô', '\x0F', '›', 'è', '\x0F', 'R', 'G', 'õ', 'o', 'ƒ', ' ', '\"', 'Û', '\x0F', '\v', '±', 'C', '…', 'Á', 'Ë', '¤', '\v', '\x02', '\x19', 'ß', 'ð', '‹', 'ì', 'Û', 'l', 'm', 'f', '­', 'E', '¾', '‰', '\x14', '~', '/', '‰', '\x10', '¸', '“', '`', 'Ø', '`', 'Þ', 'ö', 'þ', 'n', '›', 'Ê', '\x06', 'Á', 'u', '•', '3', 'Ï', 'À', '²', 'à', 'Ì', '¥', 'Î', '\x12', 'ö', 'å', 'µ', '´', '&', 'Å', '²', '\x18', 'O', '*', ']', '&', '\x1B', 'e', 'M', 'õ', 'E', 'É', '„', '\x14', 'Ü', '|', '\x12', 'K', '\x18', 'œ', 'Ç', '$', 'ç', '<', 'd', '\xFF', 'Ö', ':', ',', 'î', 'Œ', '\x81', 'I', '9', 'l', '·', 'Ü', '½', '”', 'â', '2', '÷', 'Ý', '\n', 'ü', '\x02', '\x01', 'd', 'ì', 'L', '”', '\n', '±', 'V', 'õ', 'É', '©', '4', 'Þ', '\x0F', '8', '\'', '¼', '\x81', '0', '\x0F', '{', '8', '%', 'þ', 'è', '>', ')', 'º', 'U', 'C', '¿', 'k', 'Ÿ', '\x1F', 'Š', 'I', 'R', '\x18', '\x7F', 'Š', 'ø', 'ˆ', '$', '\\', 'O', 'á', '¨', '0', '‡', 'Ž', 'P', '\x1F', '/', 'Ñ', '\f', '´', 'ý', '\n', '¼', 'Ü', '\x12', '…', 'â', 'R', 'î', 'J', 'X', '8', '«', '\xFF', 'Æ', '=', '¹', '`', 'd', '\n', '´', 'P', 'Õ', '@', '‰', '\x17', 'š', 'Õ', '…', 'Ï', 'ì', '\r', '~', '\x81', '\x7F', 'ã', 'Ã', '\x04', '\x01', '\"', 'ì', '\'', 'Ì', 'ú', '>', '!', '¦', 'T', 'È', 'Þ', '\0', '¶', 'ß', '\'', 'Ÿ', 'ö', '%', '4', '\a', '…', '¿', '§', '¥', '¥', 'à', 'ƒ', '\f', '=', ']', ' ', '@', '¯', '`', '£', 'd', 'V', 'ó', '\x05', 'Ä', '\x1C', '}', '7', '˜', 'Ã', 'è', 'Z', 'n', 'X', '…', '¤', 'š', 'k', 'j', 'ô', '£', '{', 'a', '›', '\t', '@', '\x1E', '`', 'K', '2', 'Ù', 'Q', '¤', 'þ', 'ù', ']', 'N', 'J', 'û', 'J', 'Ô', '|', '3', '\x02', '3', 'Õ', '\x9D', 'Î', '[', 'ª', 'Z', '|', 'Ø', 'ø', '\x05', 'ú', '\x1F', '+', 'Œ', 'r', 'W', 'P', '®', 'l', '\x19', '‰', 'Ê', '\x01', 'ü', 'ü', ')', '›', 'a', '\x12', 'h', 'c', 'e', 'F', '&', 'Ä', '[', 'P', 'ª', '+', '¾', 'ï', 'š', 'y', '\x02', '#', 'u', ',', ' ', '\x13', 'ý', 'Ù', 'Z', 'v', '#', 'ñ', '\v', 'µ', '¸', 'Y', 'ù', 'Ÿ', 'z', 'æ', '\x06', 'é', '¥', ':', '´', 'P', '¿', '\x16', 'X', '˜', '³', 'š', 'n', '6', 'î', '\x8D', 'ë', '\0' }; // idb char aErrorDecodingC[31] = "Error decoding compressed text"; // weak int dword_AC898C[9] = { 16, 33, 66, 132, 272, 584, 1360, 4080, 0 }; // idb _UNKNOWN unk_AC89B0; // weak _UNKNOWN unk_AC8AB0; // weak _UNKNOWN unk_AC8BB0; // weak int dword_AC9068 = 65552; // weak int (__cdecl *off_AC906C)(_DWORD) = &sub_95CB00; // weak int dword_AC9AD0 = 18; // weak _UNKNOWN unk_AC9AD8; // weak char byte_AC9C64; // weak char byte_AC9C65; // weak char byte_AC9C66; // weak char byte_AC9C68; // weak int dword_AC9C74; // weak int dword_AC9C78; // weak int dword_AC9C7C; // weak int dword_AC9C80; // weak int dword_AC9C84; // weak float flt_AC9C8C; // weak int dword_AC9C90; // weak int dword_AC9C94; // weak int dword_AC9C98; // weak int dword_AC9C9C; // weak int dword_AC9CA0; // weak int dword_AC9CA4[]; // weak int dword_AC9CA8; // weak int dword_AC9CAC; // weak int dword_AC9CB4; // weak char byte_AC9CBD; // weak char byte_AC9CBE; // weak char byte_AC9CBF; // weak int dword_AC9CC0; // weak int dword_AC9CC4; // weak float flt_AC9CC8; // weak char byte_AC9CCC; // weak char byte_AC9CCD; // weak char byte_AC9CCE; // weak char byte_AC9CCF; // weak char byte_AC9CD0; // weak char byte_AC9CD1; // weak char byte_AC9CD2; // weak char byte_AC9CD3; // weak char byte_AC9CD4; // weak char byte_AC9CD5; // weak char byte_AC9CD6; // weak char byte_AC9CD7; // weak int dword_AC9CD8; // weak int dword_AC9CDC; // weak int dword_AC9CE0; // weak int dword_AC9CE4; // weak int dword_AC9CE8; // weak char byte_AC9CF0[264]; // idb char byte_AC9DF8[264]; // idb char name[520]; // idb char byte_ACA108[264]; // idb char byte_ACA210[264]; // idb char byte_ACA318[256]; // idb char byte_ACA418[264]; // idb char byte_ACA520[264]; // idb char byte_ACA628[264]; // idb char byte_ACA730[264]; // idb char byte_ACA838[264]; // idb char byte_ACA940[264]; // idb char byte_ACAA48[264]; // idb char byte_ACAB50[264]; // idb char byte_ACAC58[260]; // idb char byte_ACAD5C; // weak char byte_ACAD60[256]; // idb char byte_ACAE60[256]; // idb char byte_ACAF60; // weak char byte_ACAF61; // weak char byte_ACAF62; // weak int dword_ACAF68[]; // weak _UNKNOWN unk_ACAF70; // weak int dword_ACAF88[]; // weak int dword_ACAF9C; // weak int dword_ACAFA4; // weak int dword_ACAFBC; // weak _UNKNOWN unk_ACAFD0; // weak _UNKNOWN unk_ACB004; // weak _UNKNOWN unk_ACB038; // weak _UNKNOWN unk_ACB06C; // weak _UNKNOWN unk_ACB0A0; // weak int dword_ACB0C4; // weak _UNKNOWN unk_ACB0D4; // weak _UNKNOWN unk_ACB108; // weak int dword_ACB12C; // weak _UNKNOWN unk_ACB13C; // weak int dword_ACB160; // weak _UNKNOWN unk_ACB170; // weak _UNKNOWN unk_ACB1A4; // weak int dword_ACB1D8[12]; // idb int dword_ACB208; // weak int dword_ACB20C; // weak int dword_ACB210; // weak int dword_ACB214; // weak int dword_ACB218; // weak int dword_ACB21C; // weak int dword_ACB220; // weak int dword_ACB224; // weak int dword_ACB228; // weak int dword_ACB22C; // weak int dword_ACB230; // weak int dword_ACB234; // weak float flt_ACB238; // weak float flt_ACB23C; // weak float flt_ACB240; // weak float flt_ACB244; // weak int dword_ACB248; // weak _UNKNOWN unk_ACB24C; // weak _UNKNOWN unk_ACB29C; // weak void *dword_ACB2A0; // idb void *dword_ACB2AC; // idb int dword_ACB2B0; // weak int dword_ACB2B4; // weak char Format[24]; // idb int dword_ACB2E0; // weak int dword_ACB2E4; // weak char byte_ACB2E8; // weak int dword_ACB2F0[32]; // idb int dword_ACB370; // weak int dword_ACB374; // weak int dword_ACB378; // weak int dword_ACB37C; // weak int dword_ACB380; // weak int dword_ACB384; // weak int dword_ACB388; // weak int dword_ACB38C; // weak int dword_ACB390; // weak char byte_ACB395; // weak int dword_ACB398; // weak int dword_ACB39C; // weak void *dword_ACB3A0; // idb void *dword_ACB3A4; // idb void *dword_ACB3A8; // idb char byte_ACB3B0[256]; // idb char byte_ACB4B0; // weak char byte_ACB4B8[]; // weak int dword_ACB6B8; // weak int dword_ACB6BC; // weak int dword_ACB6C0; // weak int dword_ACB6C4; // weak int dword_ACB6C8; // weak int dword_ACB6CC; // weak int dword_ACB6D0; // weak char byte_ACB6D4; // weak int dword_ACB6D8; // weak int dword_ACB6DC; // weak int dword_ACB6E0; // weak int dword_ACB6E4; // weak _UNKNOWN unk_ACB6E8; // weak int dword_ACC2E8; // weak char byte_ACC2EC; // weak int dword_ACC2F0; // weak int dword_ACC2F4; // weak int dword_ACC2F8; // weak int dword_ACC2FC; // weak _UNKNOWN unk_ACC300; // weak int dword_ACCF00; // weak unsigned __int8 byte_ACCF08; // idb char byte_ACCF88; // weak char byte_ACCF89; // weak void *dword_ACCF8C; // idb int dword_ACCF98; // weak char byte_ACCF9C; // weak LARGE_INTEGER PerformanceCount; // idb _UNKNOWN unk_ACCFA8; // weak int dword_ACCFAC; // weak int dword_ACCFB0; // weak float flt_ACCFCC; // weak float flt_ACCFD0; // weak float flt_ACCFD4; // weak float flt_ACCFD8; // weak char byte_ACCFDC; // weak int dword_ACCFE0; // weak char byte_ACCFE4; // weak int dword_ACCFE8; // weak int dword_ACCFEC; // weak int dword_ACD008; // weak int dword_ACD00C; // weak int dword_ACD010; // weak int dword_ACD01C; // weak _UNKNOWN unk_ACD050; // weak _UNKNOWN unk_ACD054; // weak _UNKNOWN unk_ACD058; // weak _UNKNOWN unk_ACD05C; // weak _UNKNOWN unk_ACD060; // weak _UNKNOWN unk_ACD064; // weak _UNKNOWN unk_ACD068; // weak _UNKNOWN unk_ACD06C; // weak _UNKNOWN unk_ACD070; // weak _UNKNOWN unk_ACD074; // weak _UNKNOWN unk_ACD078; // weak _UNKNOWN unk_ACD07C; // weak _UNKNOWN unk_ACD080; // weak _UNKNOWN unk_ACD084; // weak _UNKNOWN unk_ACD088; // weak _UNKNOWN unk_ACD08C; // weak _UNKNOWN unk_ACD090; // weak _UNKNOWN unk_ACD094; // weak _UNKNOWN unk_ACD098; // weak _UNKNOWN unk_ACD09C; // weak _UNKNOWN unk_ACD0A0; // weak _UNKNOWN unk_ACD0A4; // weak _UNKNOWN unk_ACD0A8; // weak int dword_ACD0AC; // weak int dword_ACD0B0; // weak _UNKNOWN unk_ACD0B4; // weak int dword_ACD0BC; // weak int dword_ACD0C0; // weak _UNKNOWN unk_ACD0C4; // weak char byte_ACD0CC; // weak int dword_ACD0D0; // weak _UNKNOWN unk_ACD0D8; // weak _UNKNOWN unk_ACD0DC; // weak int dword_ACD0E0; // weak char byte_ACD1D8; // weak char byte_ACD1D9; // weak char byte_ACD1DA; // weak void *dword_ACD1DC; // idb int dword_ACD1E0; // weak int dword_ACD1E4; // weak int dword_ACD1E8; // weak int dword_ACD1EC; // weak int dword_ACD1F0; // weak int dword_ACD1F4; // weak int dword_ACD1F8; // weak char byte_ACD1FC; // weak char byte_ACD328; // idb char byte_ACD430[1220]; // idb void *dword_ACD8F4; // idb int dword_ACD8F8; // weak int dword_ACD8FC; // weak int dword_ACD900; // weak int dword_ACD904; // weak int dword_ACD908; // weak int dword_ACD90C; // weak int dword_ACD910; // weak int dword_ACD914; // weak int dword_ACD918; // weak int dword_ACD91C; // weak int dword_ACD920; // weak int dword_ACD924; // weak int dword_ACD928; // weak int dword_ACD92C; // weak int dword_ACD930; // weak int dword_ACD934; // weak int dword_ACD938; // weak int dword_ACD93C; // weak int dword_ACD940; // weak int dword_ACD944; // weak int dword_ACD948; // weak int dword_ACD94C; // weak int dword_ACD950; // weak int dword_ACD954; // weak int dword_ACD958; // weak int dword_ACD95C; // weak int dword_ACD960; // weak int dword_ACD964; // weak int dword_ACD968; // weak int dword_ACD96C; // weak int dword_ACD970; // weak int dword_ACD974; // weak int dword_ACD978; // weak int dword_ACD97C; // weak int dword_ACD980; // weak int dword_ACD984; // weak int dword_ACD988; // weak int dword_ACD98C; // weak int dword_ACD990; // weak int dword_ACD994; // weak int dword_ACD998; // weak int dword_ACD99C; // weak int dword_ACD9A0; // weak int dword_ACD9A4; // weak int dword_ACD9A8; // weak int dword_ACD9AC; // weak int dword_ACD9B0; // weak int dword_ACD9B4; // weak int dword_ACD9B8; // weak int dword_ACD9BC; // weak int dword_ACD9C0; // weak int dword_ACD9C4; // weak int dword_ACD9C8; // weak int dword_ACD9CC; // weak int dword_ACD9D0; // weak int dword_ACD9D4; // weak int dword_ACD9D8; // weak int dword_ACD9DC; // weak int dword_ACD9E0; // weak int dword_ACD9E4; // weak int dword_ACD9E8; // weak int dword_ACD9EC; // weak int dword_ACD9F0; // weak int dword_ACD9F4; // weak int dword_ACD9F8; // weak int dword_ACD9FC; // weak int dword_ACDA00; // weak int dword_ACDA04; // weak int dword_ACDA08; // weak int dword_ACDA0C; // weak int dword_ACDA10; // weak int dword_ACDA14; // weak int dword_ACDA18; // weak int dword_ACDA1C; // weak int dword_ACDA20; // weak int dword_ACDA24; // weak int dword_ACDA28; // weak int dword_ACDA2C; // weak int dword_ACDA30; // weak int dword_ACDA34; // weak int dword_ACDA38; // weak int dword_ACDA3C; // weak int dword_ACDA40; // weak int dword_ACDA44; // weak int dword_ACDA48; // weak int dword_ACDA4C; // weak int dword_ACDA50; // weak int dword_ACDA54; // weak int dword_ACDA58; // weak int dword_ACDA5C; // weak int dword_ACDA60; // weak int dword_ACDA64; // weak int dword_ACDA68; // weak int dword_ACDA6C; // weak int dword_ACDA70; // weak int dword_ACDA74; // weak int dword_ACDA78; // weak int dword_ACDA7C; // weak int dword_ACDA80; // weak int dword_ACDA84; // weak char byte_ACDA88; // weak int dword_ACDA8C; // weak int dword_ACDA90; // weak int dword_ACDA94; // weak int dword_ACDA98; // weak char byte_ACDA9C; // weak int dword_ACDAA0; // weak char byte_ACDAA4; // weak int dword_ACDAA8; // weak int dword_ACDAAC; // weak int dword_ACDAB0; // weak int dword_ACDAB4; // weak int dword_ACDAB8; // weak int dword_ACDABC; // weak int dword_ACDAC0; // weak int dword_ACDAC4; // weak int dword_ACDAC8; // weak int dword_ACDACC; // weak int dword_ACDAD0; // weak int dword_ACDAD4; // weak int dword_ACDAD8; // weak int dword_ACDADC; // weak int dword_ACDAE0; // weak int dword_ACDAE4; // weak int dword_ACDAE8; // weak int dword_ACDAEC; // weak int dword_ACDAF0; // weak int dword_ACDAF4; // weak int dword_ACDAF8; // weak int dword_ACDAFC; // weak int dword_ACDB00; // weak int dword_ACDB04; // weak int dword_ACDB08; // weak int dword_ACDB0C; // weak int dword_ACDB10; // weak int dword_ACDB14; // weak int dword_ACDB18; // weak int dword_ACDB1C; // weak int dword_ACDB20; // weak int dword_ACDB24; // weak int dword_ACDB28; // weak int dword_ACDB2C; // weak int dword_ACDB30; // weak int dword_ACDB34; // weak int dword_ACDB38; // weak int dword_ACDB3C; // weak int dword_ACDB40; // weak int dword_ACDB44; // weak int dword_ACDB48; // weak int dword_ACDB4C; // weak int dword_ACDB50; // weak int dword_ACDB54; // weak int dword_ACDB58; // weak int dword_ACDB5C; // weak int dword_ACDB60; // weak int dword_ACDB64; // weak int dword_ACDB68; // weak int dword_ACDB6C; // weak int dword_ACDB70; // weak int dword_ACDB74; // weak int dword_ACDB78; // weak int dword_ACDB7C; // weak int dword_ACDB80; // weak int dword_ACDB84; // weak int dword_ACDB88; // weak int dword_ACDB8C; // weak int dword_ACDB90; // weak int dword_ACDB94; // weak int dword_ACDB98; // weak int dword_ACDB9C; // weak int dword_ACDBA0; // weak int dword_ACDBA4; // weak int dword_ACDBA8; // weak int dword_ACDBAC; // weak int dword_ACDBB0; // weak int dword_ACDBB4; // weak int dword_ACDBB8; // weak int dword_ACDBBC; // weak int dword_ACDBC0; // weak int dword_ACDBC4; // weak int dword_ACDBC8; // weak int dword_ACDBCC; // weak int dword_ACDBD0; // weak int dword_ACDBD4; // weak int dword_ACDBD8; // weak int dword_ACDBDC; // weak int dword_ACDBE0; // weak int dword_ACDBE4; // weak int dword_ACDBE8; // weak int dword_ACDBEC; // weak int dword_ACDBF0; // weak int dword_ACDBF4; // weak int dword_ACDBF8; // weak int dword_ACDBFC; // weak int dword_ACDC00; // weak int dword_ACDC04; // weak int dword_ACDC08; // weak int dword_ACDC0C; // weak int dword_ACDC10; // weak int dword_ACDC14; // weak int dword_ACDC18; // weak int dword_ACDC1C; // weak int dword_ACDC20; // weak int dword_ACDC24; // weak int dword_ACDC28; // weak int dword_ACDC2C; // weak int dword_ACDC30; // weak int dword_ACDC34; // weak int dword_ACDC38; // weak int dword_ACDC3C; // weak int dword_ACDC40; // weak int dword_ACDC44; // weak int dword_ACDC48; // weak int dword_ACDC4C; // weak int dword_ACDC50; // weak int dword_ACDC54; // weak int dword_ACDC58; // weak int dword_ACDC5C; // weak int dword_ACDC60; // weak int dword_ACDC64; // weak int dword_ACDC68; // weak _UNKNOWN unk_ACDC6C; // weak int dword_ACDC7C; // idb HWND hWnd; // idb int dword_ACDC84; // weak int dword_ACDC88; // weak int dword_ACDD50; // weak int dword_ACDD54; // weak int dword_ACDD58; // weak int dword_ACDD5C; // weak int dword_ACDD60; // weak int dword_ACDD64; // weak int dword_ACDD68; // idb int dword_ACDD6C; // weak int dword_ACDD70; // weak int dword_ACDD74; // weak int dword_ACDD78; // weak int dword_ACDD7C; // weak int dword_ACDD80; // weak int dword_ACDD84; // weak int dword_ACDD88; // weak int dword_ACDD8C; // weak int dword_ACDD90; // weak int dword_ACDD94; // weak _UNKNOWN unk_ACDD98; // weak _UNKNOWN unk_ACDD99; // weak _UNKNOWN unk_ACDD9A; // weak _UNKNOWN unk_ACDD9B; // weak int dword_ACDD9C; // weak int dword_ACDDA0; // weak int dword_ACDDA4; // weak int dword_ACDDA8; // weak int dword_ACDDAC; // weak int dword_ACDDB0; // weak int dword_ACDDB4; // weak _UNKNOWN unk_ACDDB8; // weak int dword_ACDDBC; // weak int dword_ACDDC0; // weak int dword_ACDDC4; // weak int dword_ACDDC8; // weak int dword_ACDDCC; // weak void *dword_ACDDD0; // idb int dword_ACDDE0; // weak int dword_ACDDE4; // weak _UNKNOWN unk_ACDDF0; // weak void *dword_ACDDF4; // idb void *dword_ACDE00; // idb int dword_ACDE10; // weak int dword_ACDE14; // weak _UNKNOWN unk_ACDE20; // weak void *dword_ACDE24; // idb char byte_ACDEF4; // weak char byte_ACE080; // weak int dword_ACE084; // weak int dword_ACE08C; // weak int dword_ACE090; // weak int dword_ACE094; // weak int dword_ACE098; // weak int dword_ACE160; // weak char byte_ACE3B4; // weak int dword_ACE3B8; // weak int dword_ACE484; // weak int dword_ACE4B0; // weak void *dword_ACE4B4; // idb int dword_ACE4B8; // weak int dword_ACE4C0; // weak int dword_ACE4C4; // weak int dword_ACE4C8; // weak int dword_ACE4CC; // weak char byte_ACE4D0[1024]; // idb int dword_ACE8D0; // weak int dword_ACE8D4; // weak int dword_ACE8D8; // weak char byte_ACE8DC; // weak int dword_ACE8E0; // idb int dword_ACE8E4; // idb int dword_ACE8E8; // weak int dword_ACE9B0; // weak int dword_ACE9B4; // weak int dword_ACE9B8; // weak void *dword_ACEA90; // idb int dword_ACEA94; // weak int dword_ACEA9C; // weak int dword_ACEAA0; // weak int dword_ACEAA4; // weak int dword_ACEAA8; // weak float flt_ACEAAC; // weak int dword_ACEAB0; // weak float flt_ACEAB4; // weak int dword_ACEAB8; // weak int dword_ACEABC; // weak int dword_ACEAC0; // weak _UNKNOWN unk_ACEAC4; // weak void *dword_ACEAC8; // idb int dword_ACEACC; // weak int dword_ACEAD4; // weak int dword_ACEAD8; // weak int dword_ACEADC; // weak void *dword_ACEAE0; // idb int dword_ACEAE4; // weak int dword_ACEAEC; // weak int dword_ACEAF0; // weak int dword_ACEAF4; // weak char byte_ACEAF9; // weak char byte_ACEAFA; // weak char byte_ACEAFB; // weak int dword_ACEAFC; // weak char byte_ACEB00; // weak char byte_ACEB01; // weak char byte_ACEB02; // weak int dword_ACEB04; // weak char dword_ACEB0C[]; // idb int dword_ACEB10; // weak int dword_ACEB14; // weak int dword_ACEB18; // weak int dword_ACEB1C; // weak char byte_ACEB20; // weak char byte_ACEB21; // weak float flt_ACEB28; // weak float flt_ACEB2C; // weak float flt_ACEB30; // weak float flt_ACEB34; // weak float flt_ACEB38; // weak float flt_ACEB3C; // weak float flt_ACEB40; // weak float flt_ACEB44; // weak float flt_ACEB48; // weak float flt_ACEB4C; // weak float flt_ACEB50; // weak float flt_ACEB54; // weak float flt_ACEB58; // weak float flt_ACEB5C; // weak float flt_ACEB60; // weak float flt_ACEB64; // weak float flt_ACEB68; // weak float flt_ACEB6C; // weak float flt_ACEB70; // weak float flt_ACEB74; // weak float flt_ACEB78; // weak float flt_ACEB7C; // weak float flt_ACEB80; // weak float flt_ACEB84; // weak float flt_ACEB88; // weak float flt_ACEB8C; // weak float flt_ACEB90; // weak float flt_ACEB94; // weak float flt_ACEB98; // weak float flt_ACEB9C; // weak float flt_ACEBA0; // weak float flt_ACEBA4; // weak float flt_ACEBA8; // weak float flt_ACEBAC; // weak float flt_ACEBB0; // weak float flt_ACEBB4; // weak float flt_ACEBB8; // weak float flt_ACEBBC; // weak float flt_ACEBC0; // weak float flt_ACEBC4; // weak float flt_ACEBC8; // weak float flt_ACEBCC; // weak float flt_ACEBD0; // weak float flt_ACEBD4; // weak float flt_ACEBD8; // weak int dword_ACEBDC; // weak char byte_ACEBE0; // weak struct tm stru_ACEBE4; // idb int dword_ACEC08; // weak int dword_ACEC0C; // weak char byte_ACEC10; // weak char byte_ACEC11; // weak char byte_ACEC12; // weak char byte_ACEC13; // weak char byte_ACEC14; // weak int dword_ACEC18; // weak __int16 word_ACEC1C; // weak int dword_ACEC20; // weak int dword_ACEC24; // weak _UNKNOWN unk_ACEC28; // weak int dword_ACEC30; // weak int dword_ACEC34; // weak char byte_ACEC38[64]; // idb char byte_ACEC78[264]; // idb __int64 qword_ACED80; // weak int dword_ACED88; // weak CHAR byte_ACED90[256]; // idb char byte_ACEE90[256]; // idb char byte_ACEF90[256]; // idb char byte_ACF090[256]; // idb char byte_ACF190[256]; // idb char byte_ACF290[452]; // idb int dword_ACF454; // idb int dword_ACF458; // idb int dword_ACF45C; // idb int dword_ACF460; // idb int dword_ACF464; // idb int dword_ACF468; // idb int dword_ACF46C; // idb int dword_ACF470; // weak int dword_ACF474; // weak int dword_ACF478; // weak int dword_ACF47C; // weak int dword_ACF480; // idb int dword_ACF484; // weak int dword_ACF488; // weak int dword_ACF48C; // idb int dword_ACF490; // weak int dword_ACF494; // weak int dword_ACF498; // weak int dword_ACF49C; // weak int dword_ACF4A0; // weak int dword_ACF4A4; // weak int dword_ACF4A8; // weak int dword_ACF4AC; // weak int dword_ACF4B0; // weak int dword_ACF4B4; // weak int dword_ACF4B8; // weak int dword_ACF4BC; // weak int dword_ACF4C0; // weak int dword_ACF4C4; // weak int dword_ACF4C8; // weak int dword_ACF4CC; // weak int dword_ACF4D0; // weak int dword_ACF4D4; // weak int dword_ACF4D8; // weak int dword_ACF4DC; // weak int dword_ACF4E0; // idb int dword_ACF4E4; // weak int dword_ACF4E8; // idb int dword_ACF4EC; // weak int dword_ACF4F0; // weak int dword_ACF4F4; // weak int dword_ACF4F8; // weak int dword_ACF4FC; // weak int dword_ACF500; // weak int dword_ACF504; // weak int dword_ACF508; // weak int dword_ACF50C; // weak int dword_ACF510; // weak int dword_ACF514; // weak int dword_ACF518; // weak int dword_ACF51C; // weak int dword_ACF520; // weak int dword_ACF524; // weak int dword_ACF528; // weak int dword_ACF52C; // weak int dword_ACF530; // weak int dword_ACF534; // weak int dword_ACF538; // weak int dword_ACF53C; // idb int dword_ACF540; // idb int dword_ACF544; // idb int dword_ACF548; // idb int dword_ACF54C; // idb int dword_ACF550; // idb int dword_ACF554; // idb int dword_ACF558; // idb int dword_ACF55C; // idb int dword_ACF560; // idb int dword_ACF564; // idb int dword_ACF568; // idb int dword_ACF56C; // idb int dword_ACF570; // weak __int16 word_ACF574; // weak char byte_ACF576; // weak __int16 word_ACF578; // weak char byte_ACF57A; // weak int dword_ACF580; // weak int dword_ACF584; // weak int dword_ACF588; // weak int dword_ACF58C; // weak _UNKNOWN unk_ACF590; // weak int dword_AD0190; // weak char byte_AD0194; // weak int dword_AD0198; // weak int dword_AD019C; // weak char byte_AD01A0; // weak int dword_AD01E0; // weak int dword_AD01E4; // weak int dword_AD01E8; // weak float flt_AD02B0; // weak float flt_AD02B4; // weak int dword_AD02B8; // weak int dword_AD02BC; // weak int dword_AD02C0; // weak void *dword_AD02C4; // idb void *dword_AD02C8; // idb int dword_AD02CC; // weak int dword_AD02D4; // weak int dword_AD02D8; // weak int dword_AD02DC; // weak char byte_AD02E0; // weak int dword_AD0320; // weak int dword_AD0324; // weak int dword_AD0328; // weak int dword_AD032C; // weak char byte_AD0330; // weak int dword_AD0334; // weak int dword_AD0338; // weak int dword_AD033C; // weak int dword_AD0340; // weak char byte_AD0344; // weak char byte_AD0345; // weak char byte_AD0346; // weak char byte_AD0347; // weak char byte_AD0348; // weak char byte_AD0349; // weak char byte_AD034A; // weak char byte_AD034B; // weak char byte_AD034C; // weak char byte_AD034D; // weak char byte_AD034E; // weak char byte_AD034F; // weak __int16 word_AD0350; // weak int dword_AD0354; // weak int dword_AD0358; // weak int dword_AD035C; // weak int dword_AD0360; // weak char byte_AD0364; // weak char byte_AD0365; // weak char byte_AD0366; // weak char byte_AD0367; // weak char byte_AD0368; // weak int dword_AD036C; // weak int dword_AD0370[]; // weak int dword_AD0374; // weak int dword_AD0378; // weak int dword_AD037C; // weak int dword_AD0380; // weak int dword_AD0384; // weak int dword_AD0388; // weak int dword_AD038C; // weak int dword_AD0390; // weak int dword_AD0394; // weak int dword_AD0398; // weak int dword_AD03A0[]; // weak int dword_AD03A4; // weak int dword_AD03A8; // weak int dword_AD03AC; // weak int dword_AD03B0; // weak int dword_AD03B4; // weak int dword_AD03B8; // weak int dword_AD03BC; // weak int dword_AD03C0; // weak int dword_AD03C4; // weak int dword_AD03C8; // weak int dword_AD03CC; // weak int dword_AD03D0; // weak int dword_AD03D4; // weak int dword_AD03D8; // weak int dword_AD03DC; // weak int dword_AD03E0; // weak int dword_AD03E4; // weak int dword_AD03E8; // weak int dword_AD03EC; // weak int dword_AD03F0; // weak char byte_AD0C38; // weak _UNKNOWN unk_AD0C3C; // weak char byte_AD0C44; // weak __int64 qword_AD0C48; // weak char byte_AD0C50; // weak int dword_AD0C58[576]; // idb _UNKNOWN unk_AD1558; // weak void *dword_AD155C; // idb __int64 qword_AD1568; // weak int dword_AD1570; // weak int dword_AD1574; // weak int dword_AD1578[36]; // idb int dword_AD1608; // weak int dword_AD1610; // weak int dword_AD1614; // weak int dword_AD1618; // weak int dword_AD161C; // weak int dword_AD1620; // weak int dword_AD1624; // weak int dword_AD1628; // weak int dword_AD162C; // weak _UNKNOWN unk_AD1630; // weak int dword_AD1888; // weak int dword_AD188C; // weak _UNKNOWN unk_AD1890; // weak _UNKNOWN unk_AD1AE8; // weak _UNKNOWN unk_AD1D40; // weak _UNKNOWN unk_AD1F98; // weak _UNKNOWN unk_AD21F0; // weak _UNKNOWN unk_AD2448; // weak _UNKNOWN unk_AD26A0; // weak _UNKNOWN unk_AD28F8; // weak _UNKNOWN unk_AD2B50; // weak _UNKNOWN unk_AD2DA8; // weak _UNKNOWN unk_AD3000; // weak _UNKNOWN unk_AD3258; // weak _UNKNOWN unk_AD34B0; // weak _UNKNOWN unk_AD3708; // weak int dword_AD3960; // weak int dword_AD3964; // weak int dword_AD3968; // weak int dword_AD396C; // weak int dword_AD3970; // weak int dword_AD3974; // weak int dword_AD3978; // weak int dword_AD397C; // weak int dword_AD3980; // weak int dword_AD3984; // weak int dword_AD3988; // weak int dword_AD398C; // weak int dword_AD3990[]; // weak __int16 word_AD3994[]; // weak _UNKNOWN unk_AD3998; // weak _UNKNOWN unk_AD3AE4; // weak _UNKNOWN unk_AD3FD0; // weak _UNKNOWN unk_AD4228; // weak _UNKNOWN unk_AD4480; // weak int dword_AD46D8; // weak int dword_AD46DC; // weak int dword_AD46E0; // weak float flt_AD46E4; // weak int dword_AD46E8; // weak int dword_AD46F0; // weak int dword_AD46F4[101]; // idb char byte_AD488A; // weak _UNKNOWN unk_AD78DC; // weak void *dword_AD892C; // idb int dword_AD8930; // weak int dword_AD8934; // weak int dword_AD893C[12]; // idb char byte_AD896C; // weak char byte_AD896D; // weak char byte_AD896E; // weak char byte_AD896F; // weak char byte_AD8970; // weak int dword_AD8974[12]; // idb int dword_AD89A4[12]; // idb HBRUSH ho; // idb HGDIOBJ h; // idb int dword_AD89DC; // weak HBRUSH dword_AD89E0; // idb HGDIOBJ dword_AD89E4; // idb int dword_AD89E8; // weak int dword_AD89EC; // weak int dword_AD89F0; // weak HBRUSH dword_AD89F4; // idb HGDIOBJ dword_AD89F8; // idb int dword_AD89FC; // weak int dword_AD8A00; // weak char byte_AD8A08[24]; // idb int dword_AD8A20; // weak int dword_AD8BB8; // weak int dword_AD8BBC; // weak HBRUSH dword_AD8BC0; // idb HGDIOBJ dword_AD8BC4; // idb int dword_AD8BC8; // weak int dword_AD8BCC; // weak char byte_AD8BD4; // weak int dword_AD8BD8; // weak float flt_AD8BE0; // weak float flt_AD8BE8; // weak int dword_AD8BEC; // weak int dword_AD8BF4; // weak int dword_AD8BF8; // weak float flt_AD8BFC; // weak float flt_AD8C00; // weak _UNKNOWN unk_AD8C08; // weak int dword_AD8C48; // weak void *dword_AD8C4C; // idb int dword_AD8C5C; // weak int dword_AD8C60; // weak void *dword_AD8C68; // idb int dword_AD8C78; // weak int dword_AD8C7C; // weak int dword_AD8C88; // weak int dword_AD8C90[6]; // idb _UNKNOWN unk_AD8CA8; // weak int dword_AD8CCC; // weak int dword_AD8CD4; // weak char byte_AD8CD8; // weak _UNKNOWN unk_AD8CDC; // weak _UNKNOWN unk_AD8D28; // weak char *dword_AD8EBC; // idb float flt_AD8EC0[200]; // idb int dword_AD91E0; // weak char byte_AD91E4; // weak void *dword_AD91E8; // idb char byte_AD91EC; // weak _UNKNOWN unk_AD91F0; // weak void *dword_AD91F4; // idb int dword_AD9200; // weak int dword_AD9204; // weak _UNKNOWN unk_AD9208; // weak void *dword_AD920C; // idb _UNKNOWN unk_AD9218; // weak void *dword_AD921C; // idb _UNKNOWN unk_AD9228; // weak void *dword_AD922C; // idb char byte_AD9238[18]; // idb char byte_AD924A; // weak char dword_AD924B[]; // idb int dword_AD924F; // weak int dword_AD9253; // weak int dword_AD9257; // weak char byte_AD925B; // weak char dword_AD9E30[]; // idb _UNKNOWN unk_AD9E48; // weak int dword_AD9E70; // weak int dword_ADA1D8; // weak _UNKNOWN unk_ADA1E0; // weak int dword_ADA1E4; // weak _UNKNOWN unk_ADA224; // weak char byte_ADA230; // weak int dword_ADA234[192]; // idb int dword_ADA534[]; // weak int dword_ADA538; // weak int dword_ADA550; // weak int dword_ADA55C; // weak int dword_ADA560; // weak int dword_ADA564; // weak int dword_ADA568; // weak int dword_ADA598; // weak int dword_ADA5A0; // weak int dword_ADA5A4; // weak int dword_ADA5AC[192]; // idb int dword_ADA8AC[11]; // idb int dword_ADA8D8[98]; // idb int dword_ADAA60[98]; // idb int dword_ADABE8[98]; // idb int dword_ADAD70[98]; // idb int dword_ADAEF8[107]; // idb _UNKNOWN unk_ADB0A4; // weak int dword_ADB1F8; // weak int dword_ADB1FC[43]; // idb _UNKNOWN unk_ADB2A8; // weak int dword_ADB428; // weak int dword_ADB42C; // weak _UNKNOWN unk_ADB430; // weak void *dword_ADB434; // idb int dword_ADB438; // weak void *dword_ADB440; // idb int dword_ADB444; // weak int dword_ADB448; // weak int dword_ADB45C; // weak int dword_ADB460; // weak char byte_ADB464; // weak char byte_ADB468[32]; // idb _UNKNOWN unk_ADB488; // weak int dword_ADB4C8; // weak unsigned __int8 *dword_ADB4DC; // idb int dword_ADB4EC; // weak int dword_ADB4F0; // weak int dword_ADB4F8; // weak int dword_ADB4FC; // weak int dword_ADB50C; // weak int X; // idb int Y; // idb char byte_ADB55E; // weak int dword_ADB564; // weak int dword_ADB568; // weak char byte_ADB56C; // weak char byte_ADB576[124]; // idb int dword_ADB5F2; // weak int dword_ADB600; // weak int dword_ADB604; // weak __int16 word_ADB614; // weak int dword_ADB618; // weak int dword_ADB61C; // weak int dword_ADB620; // weak __int16 word_ADB624; // weak char byte_ADB629; // weak char byte_ADB650; // weak int dword_ADB654; // weak int dword_ADB658; // weak int dword_ADB67C; // weak int dword_ADB684; // weak int dword_ADB6B0; // weak int dword_ADB6C4; // weak int dword_ADB6D0; // weak int dword_ADB6D8; // weak int dword_B66FB0; // idb _UNKNOWN unk_B66FB8; // weak float flt_B66FEC; // weak float flt_B66FF8; // weak float flt_B6706C; // weak _UNKNOWN unk_B67078; // weak char byte_B670BC; // weak int dword_B670EC; // weak _UNKNOWN unk_B670F4; // weak int dword_B67100; // weak int dword_B67118; // weak int dword_B6711C; // weak int dword_B67120; // weak int dword_B67124; // weak char byte_B6712C; // weak int dword_B67404; // weak int dword_B67408; // weak int dword_B6740C; // weak _UNKNOWN unk_B683E8; // weak _UNKNOWN unk_B68404; // weak void *dword_B68418; // idb void *dword_B6842C; // idb int dword_B68478; // weak int dword_B6847C; // weak char byte_B68498[32]; // idb int dword_B684B8; // weak int dword_B684BC; // weak int dword_B684D8; // weak int dword_B684DC; // weak int dword_B684F8; // weak char byte_B684FC; // weak float flt_B68500; // weak char byte_B68508; // weak char byte_B68509; // weak char byte_B6850A; // weak _UNKNOWN unk_B6D50A; // weak char byte_B7250A[20480]; // idb _UNKNOWN unk_B7750A; // weak char byte_B7C50A; // weak char byte_B7C50B; // weak _UNKNOWN unk_B7C50C; // weak char dword_B7D164[]; // idb int dword_B7D168; // weak int dword_B7D16C; // weak int dword_B7D170; // weak int dword_B7D174; // weak int dword_B7D178; // weak int dword_B7D17C; // weak int dword_B7D180; // weak int dword_B7D184; // weak int dword_B7D188; // idb __int16 word_B7D19C; // weak float flt_B7D1A4; // weak float flt_B7D1A8; // weak float flt_B7D1AC; // weak float flt_B7D1B0; // weak float flt_B7D1B4; // weak int dword_B7D1BC; // weak int dword_B7D1C0; // weak char byte_B7D1C8[40960]; // idb char *dword_B871C8; // idb char byte_B871D0[40968]; // idb _UNKNOWN unk_B911D8; // weak void *dword_B911DC; // idb int dword_B911E0; // weak _UNKNOWN unk_B911E8; // weak void *dword_B911EC; // idb int dword_B911F0; // weak _UNKNOWN unk_B911F8; // weak _UNKNOWN unk_B91200; // weak void *dword_B91208; // idb int dword_B91218; // weak int dword_B9121C; // weak _UNKNOWN unk_B91228; // weak void *dword_B9122C; // idb _UNKNOWN unk_B91238; // weak _UNKNOWN unk_B91244; // weak _UNKNOWN unk_B91250; // weak _UNKNOWN unk_B9129C; // weak int dword_B912A0; // weak _UNKNOWN unk_B912AC; // weak _UNKNOWN unk_B912B4; // weak _UNKNOWN unk_B912BC; // weak float flt_B912C4; // weak _UNKNOWN unk_B912C8; // weak int dword_B915D8; // weak int dword_B91648; // weak int dword_B9164C; // weak __int16 word_B91650[]; // weak __int16 word_B91652[]; // weak int dword_B91654; // weak int dword_B91658; // weak int dword_B9165C; // weak int dword_B91660; // weak int dword_B91664; // weak int dword_B91668; // weak int dword_B9166C; // weak int dword_B91670; // weak int dword_B91674; // weak int dword_B91678; // weak int dword_B9167C; // weak int dword_B91680; // weak int dword_B91684; // weak int dword_B91688; // weak int dword_B9168C; // weak int dword_B91690; // weak int dword_B91694; // weak int dword_B91698; // weak int dword_B9169C; // weak int dword_B916A0; // weak int dword_B916A4; // weak int dword_B916A8; // weak int dword_B916AC; // weak int dword_B916B0; // weak int dword_B916B4; // weak int dword_B916B8; // weak int dword_B916BC; // weak int dword_B916C0; // weak int dword_B916C4; // weak int dword_B916C8; // weak int dword_B916CC; // weak __int16 word_B916D0; // weak __int16 word_B916D2; // weak int dword_B916D4; // weak __int16 word_B916D8; // weak __int16 word_B916DA; // weak int dword_B916DC; // weak __int16 word_B916E0; // weak __int16 word_B916E2; // weak int dword_B916E4; // weak int dword_B916E8; // weak int dword_B916EC; // weak int dword_B916F0; // weak int dword_B916F4; // weak int dword_B916F8; // weak int dword_B916FC; // weak int dword_B91700; // weak int dword_B91704; // weak int dword_B91708; // weak int dword_B9170C; // weak int dword_B91710; // weak int dword_B91714; // weak int dword_B91718; // weak int dword_B91720; // weak int dword_B91724; // weak int dword_B91728; // weak int dword_B9172C; // weak int dword_B91730; // weak int dword_B91734; // weak int dword_B91738; // weak int dword_B9173C; // weak int dword_B91740; // weak int dword_B91748; // weak int dword_B91750; // weak int dword_B91758; // weak int dword_B91760; // weak int dword_B91764; // weak int dword_B91768; // weak int dword_B9176C; // weak int dword_B91770; // weak int dword_B91774; // weak int dword_B91778; // weak int dword_B9177C; // weak int dword_B91780; // weak int dword_B91784; // weak int dword_B91788; // weak int dword_B9178C; // weak int dword_B91790; // weak int dword_B91794; // weak int dword_B91798; // weak int dword_B9179C; // weak int dword_B917A0; // weak int dword_B917A4; // weak int dword_B917A8; // weak int dword_B917AC; // weak int dword_B917B0; // weak int dword_B917B4; // weak int dword_B917B8; // weak int dword_B917BC; // weak int dword_B917C0; // weak int dword_B917C4; // weak int dword_B917C8; // weak int dword_B917CC; // weak int dword_B917D0; // weak int dword_B917D4; // weak int dword_B917D8; // weak int dword_B917DC; // weak int dword_B917E0; // weak int dword_B917E4; // weak int dword_B917E8; // weak int dword_B917EC; // weak int dword_B917F0; // weak int dword_B917F4; // weak int dword_B917F8; // weak int dword_B917FC; // weak int dword_B91800; // weak int dword_B91804; // weak int dword_B91808; // weak int dword_B9180C; // weak int dword_B91810; // weak int dword_B91814; // weak int dword_B91818; // weak int dword_B9181C; // weak int dword_B91820; // weak int dword_B91824; // weak int dword_B91828; // weak int dword_B9182C; // weak int dword_B91830; // weak int dword_B91834; // weak int dword_B91838; // weak int dword_B9183C; // weak int dword_B91840; // weak int dword_B91844; // weak int dword_B91848; // weak int dword_B9184C; // weak int dword_B91850; // weak int dword_B91854; // weak int dword_B91858; // weak int dword_B9185C; // weak int dword_B91860; // weak int dword_B91864; // weak int dword_B91868; // weak int dword_B9186C; // weak int dword_B91870; // weak int dword_B91874; // weak int dword_B91878; // weak int dword_B9187C; // weak int dword_B91880; // weak int dword_B91884; // weak int dword_B91888; // weak int dword_B9188C; // weak int dword_B91890; // weak int dword_B91894; // weak int dword_B91898; // weak int dword_B9189C; // weak int dword_B918A0; // weak int dword_B918A4; // weak int dword_B918A8; // weak int dword_B918AC; // weak int dword_B918B0; // weak int dword_B918B4; // weak int dword_B918B8; // weak int dword_B918BC; // weak int dword_B918C0; // weak int dword_B918C4; // weak int dword_B918C8; // weak int dword_B918CC; // weak int dword_B918D0; // weak int dword_B918D4; // weak int dword_B918D8; // weak int dword_B918DC; // weak int dword_B918E0; // weak int dword_B918E4; // weak int dword_B918E8; // weak int dword_B918EC; // weak int dword_B918F0; // weak int dword_B918F4; // weak int dword_B918F8; // weak int dword_B918FC; // weak int dword_B91900; // weak int dword_B91904; // weak int dword_B91908; // weak int dword_B9190C; // weak int dword_B91910; // weak int dword_B91914; // weak int dword_B91918; // weak int dword_B9191C; // weak int dword_B91920; // weak int dword_B91924; // weak int dword_B91928; // weak int dword_B9192C; // weak int dword_B91930; // weak int dword_B91934; // weak int dword_B91938; // weak int dword_B9193C; // weak int dword_B91940; // weak int dword_B91944; // weak _UNKNOWN unk_B91948; // weak _UNKNOWN unk_B9194C; // weak __int16 word_B91FF8; // weak char byte_B91FFA; // weak char byte_B91FFB; // weak int dword_B91FFC; // weak char byte_B92000; // weak char byte_B92001; // weak char byte_B92002; // weak char byte_B92003; // weak char byte_B92004; // weak char byte_B92005; // weak char byte_B92006; // weak char byte_B92007; // weak char byte_B92008; // weak char byte_B92009; // weak char byte_B9200A; // weak char byte_B9200B; // weak char byte_B9200C; // weak char byte_B9200D; // weak int dword_B9200E[5]; // idb int dword_B92022; // weak char byte_B92026; // weak char byte_B92027; // weak char byte_B92028; // weak char byte_B92029; // weak char byte_B9202A; // weak char byte_B9202B; // weak char byte_B9202C; // weak char byte_B9202D; // weak char byte_B9202E; // weak int dword_B92030; // weak int dword_B92034; // weak int dword_B92038; // weak int dword_B9203C; // weak int dword_B92040; // weak int dword_B92044; // weak char byte_B92048[64]; // idb char byte_B92088; // weak float flt_B92089; // weak float flt_B9208D; // weak __int16 word_B92091; // weak __int16 word_B92093; // weak float flt_B92095; // weak float flt_B92099; // weak __int16 word_B9209D; // weak __int16 word_B9209F; // weak float flt_B920A1; // weak float flt_B920A9; // weak float flt_B920AD; // weak __int16 word_B920B1; // weak __int16 word_B920B3; // weak char byte_B920B5; // weak __int16 word_B920B8[]; // weak int dword_B920BC[5998]; // idb __int16 word_B97E78[3000]; // idb __int16 word_B995E8[]; // weak int dword_B995EA; // weak int dword_B9DC38; // weak int dword_B9DC3C; // weak int dword_B9DC40; // weak int dword_B9DC44; // weak int dword_B9DC48; // weak char byte_B9DC4C; // weak int dword_B9DC50; // weak int dword_B9DC54; // weak int dword_B9DC58; // weak int dword_B9DC5C; // weak int dword_B9DC60; // weak int dword_B9DC64; // weak int dword_B9DC68; // weak int dword_B9DC70; // weak char byte_B9DCA0; // weak char byte_B9DCA8; // weak int dword_B9DCC4; // weak _UNKNOWN unk_B9DCC8; // weak int dword_B9DE24; // weak _UNKNOWN unk_B9DE28; // weak void *dword_B9DE2C; // idb int dword_B9DE30; // weak void *dword_B9DE38; // idb int dword_B9DE3C; // weak int dword_B9DE40; // weak int dword_B9DE58; // weak int dword_B9DE5C; // weak int dword_B9DE60; // weak int dword_B9DE64; // weak void *dword_B9DE68[18]; // idb _UNKNOWN unk_B9DEB0; // weak void *dword_B9DEB4; // idb void *dword_B9DEC0; // idb int dword_B9DEC4; // weak int dword_B9DEC8; // weak char byte_B9DEDC; // weak _UNKNOWN unk_B9DEE0; // weak _UNKNOWN unk_B9DF94; // weak void *dword_B9DF98; // idb char byte_B9DFA8[16]; // idb int dword_B9DFB8; // weak _UNKNOWN unk_B9E020; // weak int dword_B9E060; // weak char byte_B9E068; // weak void *dword_B9E0E8; // idb _UNKNOWN unk_B9E0F0; // weak void *dword_B9E154; // idb int dword_B9E158; // weak int dword_B9E15C; // weak int dword_B9E160; // weak int dword_B9E164; // weak int dword_B9E168; // weak int dword_B9E170; // weak int dword_B9E174; // weak int dword_B9E178; // weak int dword_B9E17C; // weak int dword_B9E1B0; // weak int dword_B9E1B4; // weak int dword_B9E1B8; // weak int dword_B9E1C8; // weak _UNKNOWN unk_B9E1CC; // weak void *dword_B9E1D0; // idb int dword_B9E1DC; // weak int dword_B9E1E0; // weak int dword_B9E1E4; // weak float flt_B9E1E8; // weak char dword_B9E2B4[]; // idb int dword_B9E2B8; // weak int dword_B9E2BC; // weak int dword_B9E2C0; // weak int dword_B9E2C4; // weak char dword_B9E2C8[]; // idb int dword_B9E2CC; // weak int dword_B9E2D0; // weak int dword_B9E2D4; // weak int dword_B9E2D8; // weak char dword_B9E2DC[]; // idb int dword_B9E2E0; // weak int dword_B9E2E4; // weak int dword_B9E2E8; // weak int dword_B9E2EC; // weak char dword_B9E2F0[]; // idb int dword_B9E2F4; // weak int dword_B9E2F8; // weak int dword_B9E2FC; // weak int dword_B9E300; // weak char dword_B9E304[]; // idb int dword_B9E308; // weak int dword_B9E30C; // weak int dword_B9E310; // weak int dword_B9E314; // weak char dword_B9E318[]; // idb int dword_B9E31C; // weak int dword_B9E320; // weak int dword_B9E324; // weak int dword_B9E328; // weak char dword_B9E32C[]; // idb char dword_B9E340[]; // idb char dword_B9E354[]; // idb char dword_B9E368[]; // idb char dword_B9E37C[]; // idb char dword_B9E390[]; // idb char byte_B9E3A4[20]; // idb char byte_B9E3B8[20]; // idb char byte_B9E3CC[20]; // idb char byte_B9E3E0[20]; // idb char dword_B9E3F4[]; // idb int dword_B9E408; // weak int dword_B9E410; // weak int dword_B9E414; // weak int dword_B9E418; // weak int dword_B9E41C; // weak int dword_B9E420; // weak int dword_B9E424; // weak int dword_B9E428; // weak int dword_B9E42C; // weak int dword_B9E430; // weak __int64 qword_B9E438; // weak int dword_B9E440[72]; // idb int dword_B9E560; // weak char byte_B9E564; // weak int dword_B9E568; // weak int dword_B9E56C; // weak int dword_B9E570; // weak int dword_B9E574; // weak int dword_B9E578; // weak int dword_B9E57C; // weak void *dword_B9E580; // idb int dword_B9E584; // weak int dword_B9E588; // weak int dword_B9E590; // weak int dword_B9E594; // weak int dword_B9E598; // weak int dword_B9E59C; // weak int dword_B9E5A0; // weak int dword_B9E5A5; // weak int dword_B9E5A9; // weak int dword_B9E5AD; // weak int dword_B9E5B1; // weak int dword_B9E5B5; // weak int dword_B9E5C0; // weak int dword_B9E5C8; // weak char byte_B9E5CC; // weak char byte_B9E5CD; // weak __int16 word_B9E5D4[8]; // idb int dword_B9E5E4[]; // weak int dword_B9E5E8; // weak _UNKNOWN unk_B9E624; // weak int dword_BA0570; // weak int dword_BA0574; // weak int dword_BA0578; // weak int dword_BA0580; // weak int dword_BA0584; // weak int dword_BA0588; // weak int dword_BA058C; // weak _UNKNOWN unk_BA0594; // weak void *dword_BA05A8; // idb int dword_BA05AC; // weak int dword_BA05B0; // weak _UNKNOWN unk_BA05B8; // weak _UNKNOWN unk_BA05CC; // weak int dword_BA0608; // weak _UNKNOWN unk_BA060C; // weak _UNKNOWN unk_BA0610; // weak _UNKNOWN unk_BA0614; // weak _UNKNOWN unk_BA1308; // weak _UNKNOWN unk_BA1310; // weak int dword_BA2310; // weak char byte_BA2718; // weak char byte_BA2719; // weak int dword_BA2960; // weak int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // weak int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // weak int dword_BA296C; // weak int dword_BA2970; // weak int dword_BA2974; // weak int (__cdecl *dword_BA2978)(_DWORD, _DWORD, _DWORD, _DWORD); // weak int dword_BA2980; // weak int dword_BA2984; // weak int dword_BA2988; // weak int dword_BA298C; // weak int dword_BA2990; // weak int dword_BA2994; // weak char byte_BA2998; // weak char byte_BA2999; // weak char byte_BA299A; // weak char byte_BA299B; // weak char byte_BA299C; // weak char byte_BA299D; // weak char byte_BA299E; // weak char byte_BA299F; // weak char byte_BA29A0; // weak char byte_BA29A1; // weak char byte_BA29A2; // weak char byte_BA29A3; // weak char byte_BA29A4; // weak struct _RTL_CRITICAL_SECTION stru_BA29C0; // idb _UNKNOWN unk_BA2A20; // weak int dword_BA2A28; // weak int dword_BA2A30; // weak int dword_BA2A34; // weak int dword_BA2A44; // weak _UNKNOWN unk_BA2A4C; // weak _UNKNOWN unk_BA2A88; // weak _UNKNOWN unk_BA2A89; // weak int dword_BA2A90; // weak _DWORD dword_BA2AE8[20]; // idb int (__cdecl *dword_BA2B38)(_DWORD); // weak int dword_BA2B3C; // weak int dword_BA2B40; // weak int dword_BA2B44; // weak int dword_BA2B48; // weak _UNKNOWN unk_BA2B84; // weak _UNKNOWN unk_BA2B85; // weak _UNKNOWN dword_BA2C80; // weak int dword_BA2C9C; // weak int dword_BA2CA0; // weak _UNKNOWN unk_BA2CCC; // weak PVOID dword_BA2D3C; // idb PVOID dword_BA2D4C; // idb PVOID dword_BA38E8; // idb int dword_BA38F4; // weak int dword_BA38F8; // weak PVOID dword_BA3B14; // idb PVOID dword_BA3B18; // idb PVOID dword_BA3B1C; // idb PVOID dword_BA3B20; // idb PVOID dword_BA3B24; // idb int dword_BA3B28; // weak int dword_BA3B2C; // weak int dword_BA3B30; // weak struct _RTL_CRITICAL_SECTION stru_BA3B34; // idb float flt_BA3B54; // weak char byte_BA3B58; // weak char byte_BA3B59; // weak char byte_BA3B5A; // weak float flt_BA3B5C; // weak int dword_BA3B60; // weak int dword_BA3B64; // weak int dword_BA3B68; // weak char byte_BA3B6C; // weak char byte_BA3B6D; // weak int dword_BA3B70; // weak int dword_BA3B74; // weak int dword_BA3B78; // weak int dword_BA3B7C; // weak char byte_BA3B80; // weak char byte_BA3B81; // weak char byte_BA3B82; // weak char byte_BA3B83; // weak int dword_BA3B84; // weak int dword_BA3B88; // weak int dword_BA3B8C; // weak int dword_BA3B90; // weak char byte_BA3B94; // weak char byte_BA3B95; // weak char byte_BA3B96; // weak char byte_BA3B97; // weak char byte_BA3B98; // weak char byte_BA3B99; // weak char byte_BA3B9A; // weak char byte_BA3B9B; // weak char byte_BA3B9C; // weak char byte_BA3B9D; // weak char byte_BA3B9E; // weak char byte_BA3B9F; // weak char byte_BA3BA0; // weak char byte_BA3BA1; // weak int dword_BA3BA4; // weak char dword_BA3BA8[]; // idb _UNKNOWN unk_BA3BB0; // weak char dword_BA3BB8[]; // idb char dword_BA3BC0[]; // idb char dword_BA3BC8[]; // idb char dword_BA3BD0[]; // idb char dword_BA3BD8[]; // idb _UNKNOWN unk_BA3BE0; // weak char byte_BA3BE8[]; // weak char byte_BA3BE9; // weak char byte_BA3BEA; // weak char byte_BA3BEB; // weak char byte_BA3BED; // weak char byte_BA3BEE[]; // weak char byte_BA3BEF; // weak char byte_BA3BF0; // weak char byte_BA3BF1; // weak char byte_BA3BF3; // weak char byte_BA3BF4[]; // weak char byte_BA3BF5; // weak char byte_BA3BF6; // weak char byte_BA3BF7; // weak char byte_BA3BF8; // weak char byte_BA3BF9; // weak char byte_BA3BFA[]; // weak char byte_BA3BFB; // weak char byte_BA3BFF; // weak char byte_BA3C06[5]; // idb char byte_BA3C0B; // weak int dword_BA3C10[]; // weak int dword_BA3C14; // weak int dword_BA3C18; // weak int dword_BA3C1C; // weak int dword_BA3C24; // weak int dword_BA3C28[]; // weak int dword_BA3C2C; // weak int dword_BA3C30; // weak int dword_BA3C34; // weak int dword_BA3C3C; // weak int dword_BA3C40[]; // weak int dword_BA3C44; // weak int dword_BA3C48; // weak int dword_BA3C4C; // weak int dword_BA3C50; // weak int dword_BA3C54; // weak int dword_BA3C58; // weak int dword_BA3C5C; // weak int dword_BA3C6C; // weak int dword_BA3C88[5]; // idb int dword_BA3C9C; // weak int dword_BA3CA0[]; // weak int dword_BA3CA4; // weak int dword_BA3CA8; // weak int dword_BA3CAC; // weak int dword_BA3CB4; // weak int dword_BA3CB8; // weak int dword_BA3CBC; // weak int dword_BA3CC0; // weak int dword_BA3CC4; // weak int dword_BA3CCC; // weak int dword_BA3CD0; // weak int dword_BA3CD4; // weak int dword_BA3CD8; // weak int dword_BA3CDC; // weak int dword_BA3CE0; // weak int dword_BA3CE4; // weak int dword_BA3CE8; // weak int dword_BA3CEC; // weak int dword_BA3CFC; // weak int dword_BA3D18; // weak int dword_BA3D2C; // weak int dword_BA3D30[]; // weak int dword_BA3D34; // weak int dword_BA3D38; // weak int dword_BA3D3C; // weak int dword_BA3D44; // weak int dword_BA3D48[]; // weak int dword_BA3D4C; // weak int dword_BA3D50; // weak int dword_BA3D54; // weak int dword_BA3D5C; // weak int dword_BA3D60[]; // weak int dword_BA3D64; // weak int dword_BA3D68; // weak int dword_BA3D6C; // weak int dword_BA3D70; // weak int dword_BA3D74; // weak int dword_BA3D78[]; // weak int dword_BA3D7C; // weak int dword_BA3D8C; // weak int dword_BA3DA8[5]; // idb int dword_BA3DBC; // weak int dword_BA3DC0[]; // weak int dword_BA3DC4; // weak int dword_BA3DC8; // weak int dword_BA3DCC; // weak int dword_BA3DD4; // weak int dword_BA3DD8; // weak int dword_BA3DDC; // weak int dword_BA3DE0; // weak int dword_BA3DE4; // weak int dword_BA3DEC; // weak int dword_BA3DF0; // weak int dword_BA3DF4; // weak int dword_BA3DF8; // weak int dword_BA3DFC; // weak int dword_BA3E00; // weak int dword_BA3E04; // weak int dword_BA3E08; // weak int dword_BA3E0C; // weak int dword_BA3E1C; // weak int dword_BA3E38; // weak int dword_BA3E4C; // weak int dword_BA3E50[]; // weak int dword_BA3E54; // weak int dword_BA3E58; // weak int dword_BA3E5C; // weak int dword_BA3E64; // weak int dword_BA3E68; // weak int dword_BA3E6C; // weak int dword_BA3E70; // weak int dword_BA3E74; // weak int dword_BA3E7C; // weak int dword_BA3E80; // weak int dword_BA3E84; // weak int dword_BA3E88; // weak int dword_BA3E8C; // weak int dword_BA3E90; // weak int dword_BA3E94; // weak int dword_BA3E98; // weak int dword_BA3E9C; // weak int dword_BA3EAC; // weak int dword_BA3EC8; // weak int dword_BA3EDC; // weak int dword_BA3EE0[]; // weak int dword_BA3EE4; // weak int dword_BA3EE8; // weak int dword_BA3EEC; // weak int dword_BA3EF4; // weak int dword_BA3EF8[]; // weak int dword_BA3EFC; // weak int dword_BA3F00; // weak int dword_BA3F04; // weak int dword_BA3F0C; // weak int dword_BA3F10[]; // weak int dword_BA3F14; // weak int dword_BA3F18; // weak int dword_BA3F1C; // weak int dword_BA3F20; // weak int dword_BA3F24; // weak int dword_BA3F28[]; // weak int dword_BA3F2C; // weak int dword_BA3F3C; // weak int dword_BA3F58[5]; // idb int dword_BA3F6C; // weak int dword_BA3F70[]; // weak int dword_BA3F74; // weak int dword_BA3F78; // weak int dword_BA3F7C; // weak int dword_BA3F84; // weak int dword_BA3F88[]; // weak int dword_BA3F8C; // weak int dword_BA3F90; // weak int dword_BA3F94; // weak int dword_BA3F9C; // weak int dword_BA3FA0[]; // weak int dword_BA3FA4; // weak int dword_BA3FA8; // weak int dword_BA3FAC; // weak int dword_BA3FB0; // weak int dword_BA3FB4; // weak int dword_BA3FB8[]; // weak int dword_BA3FBC; // weak int dword_BA3FCC; // weak int dword_BA3FE8[5]; // idb int dword_BA3FFC; // weak int dword_BA4000; // weak int dword_BA4004; // weak int dword_BA4008; // weak int dword_BA400C; // weak int dword_BA4014; // weak int dword_BA4018[]; // weak int dword_BA401C; // weak int dword_BA4020; // weak int dword_BA4024; // weak int dword_BA402C; // weak int dword_BA4030; // weak int dword_BA4034; // weak int dword_BA4038; // weak int dword_BA403C; // weak int dword_BA4040; // weak int dword_BA4044; // weak int dword_BA4048; // weak int dword_BA404C; // weak int dword_BA405C; // weak int dword_BA4078; // weak int dword_BA408C; // weak int dword_BA4090; // weak int dword_BA4094; // weak int dword_BA4098; // weak int dword_BA409C; // weak int dword_BA40A4; // weak int dword_BA40A8[]; // weak int dword_BA40AC; // weak int dword_BA40B0; // weak int dword_BA40B4; // weak int dword_BA40BC; // weak int dword_BA40C0; // weak int dword_BA40C4; // weak int dword_BA40C8; // weak int dword_BA40CC; // weak int dword_BA40D0; // weak int dword_BA40D4; // weak int dword_BA40D8; // weak int dword_BA40DC; // weak int dword_BA40EC; // weak int dword_BA4108; // weak int dword_BA411C; // weak int dword_BA4120[]; // weak int dword_BA4124; // weak int dword_BA4128; // weak int dword_BA412C; // weak int dword_BA4134; // weak int dword_BA4138[]; // weak int dword_BA413C; // weak int dword_BA4140; // weak int dword_BA4144; // weak int dword_BA414C; // weak int dword_BA4150[]; // weak int dword_BA4154; // weak int dword_BA4158; // weak int dword_BA415C; // weak int dword_BA4160; // weak int dword_BA4164; // weak int dword_BA4168[]; // weak int dword_BA416C; // weak int dword_BA417C; // weak int dword_BA4198[5]; // idb int dword_BA41AC; // weak int dword_BA41B0; // weak int dword_BA41B4; // weak int dword_BA41B8; // weak int dword_BA41BC; // weak int dword_BA41C4; // weak int dword_BA41C8[]; // weak int dword_BA41CC; // weak int dword_BA41D0; // weak int dword_BA41D4; // weak int dword_BA41DC; // weak int dword_BA41E0; // weak int dword_BA41E4; // weak int dword_BA41E8; // weak int dword_BA41EC; // weak int dword_BA41F0; // weak int dword_BA41F4; // weak int dword_BA41F8; // weak int dword_BA41FC; // weak int dword_BA420C; // weak int dword_BA4228; // weak int dword_BA423C; // weak int dword_BA4240[]; // weak int dword_BA4244; // weak int dword_BA4248; // weak int dword_BA424C; // weak int dword_BA4254; // weak int dword_BA4258[]; // weak int dword_BA425C; // weak int dword_BA4260; // weak int dword_BA4264; // weak int dword_BA426C; // weak int dword_BA4270[]; // weak int dword_BA4274; // weak int dword_BA4278; // weak int dword_BA427C; // weak int dword_BA4280; // weak int dword_BA4284; // weak int dword_BA4288[]; // weak int dword_BA428C; // weak int dword_BA429C; // weak int dword_BA42B8[5]; // idb int dword_BA42CC; // weak char dword_BA42D0[]; // idb char dword_BA42D8[]; // idb char dword_BA42E0[]; // idb char dword_BA42E8[]; // idb _UNKNOWN unk_BA42F0; // weak _UNKNOWN unk_BA42F8; // weak _UNKNOWN unk_BA4300; // weak char dword_BA4308[]; // idb char dword_BA4310[]; // idb char dword_BA4318[]; // idb char dword_BA4320[]; // idb char dword_BA4328[]; // idb float flt_BA4330; // weak int dword_BA4334; // weak char dword_BA4338[]; // idb float flt_BA4340; // weak int dword_BA4344; // weak char dword_BA4348[]; // idb char dword_BA4350[]; // idb char dword_BA4358[]; // idb char dword_BA4360[]; // idb char dword_BA4368[]; // idb char dword_BA4370[]; // idb char dword_BA4378[]; // idb void *dword_BA4380; // idb _UNKNOWN unk_BA4384; // weak char dword_BA438C[]; // idb char byte_BA4394; // weak _UNKNOWN unk_BA4398; // weak char dword_BA43A0[]; // idb char dword_BA43A8[]; // idb char dword_BA43B0[]; // idb char dword_BA43B8[]; // idb char dword_BA43C0[]; // idb _UNKNOWN unk_BA43C8; // weak char dword_BA43D0[]; // idb char dword_BA43D8[]; // idb char dword_BA43E0[]; // idb char dword_BA43E8[]; // idb char dword_BA43F0[]; // idb char dword_BA43F8[]; // idb char dword_BA4400[]; // idb char dword_BA4408[]; // idb char dword_BA4410[]; // idb char dword_BA4418[]; // idb char dword_BA4420[]; // idb char dword_BA4428[]; // idb char dword_BA4430[]; // idb char dword_BA4438[]; // idb char dword_BA4440[]; // idb char dword_BA4448[]; // idb char dword_BA4450[]; // idb char dword_BA4458[]; // idb char dword_BA4460[]; // idb char dword_BA4468[]; // idb char dword_BA4470[]; // idb char dword_BA4478[]; // idb char dword_BA4480[]; // idb char dword_BA4488[]; // idb char dword_BA4490[]; // idb char dword_BA4498[]; // idb int dword_BA44A0; // weak int dword_BA44A4; // weak int dword_BA44A8; // weak int dword_BA44AC; // weak char dword_BA44B0[]; // idb int dword_BA44B8; // weak int dword_BA44BC; // weak int dword_BA44C0; // weak int dword_BA44C4; // weak char dword_BA44C8[]; // idb char dword_BA44D0[]; // idb char dword_BA44D8[]; // idb char dword_BA44E0[]; // idb char dword_BA44E8[]; // idb char dword_BA44F0[]; // idb char dword_BA44F8[]; // idb char byte_BA4500; // weak int dword_BA4504; // weak char byte_BA4508; // weak char dword_BA450C[]; // idb int dword_BA4514; // weak int dword_BA4518; // weak int dword_BA451C; // weak int dword_BA4520; // weak float flt_BA4524; // weak int dword_BA4528[]; // weak int dword_BA452C; // weak int dword_BA4530; // weak int dword_BA4534; // weak int dword_BA4538; // weak int dword_BA453C; // weak void *dword_BA4540; // idb void *dword_BA4544; // idb void *dword_BA4548; // idb void *dword_BA454C; // idb int (__cdecl *dword_BA4550)(_DWORD, _DWORD); // weak int (__cdecl *dword_BA4554)(_DWORD, _DWORD); // weak int (*dword_BA4558)(void); // weak char dword_BA455C[]; // idb int dword_BA4564; // weak char dword_BA4568[]; // idb _UNKNOWN unk_BA4570; // weak char dword_BA4574[]; // idb char dword_BA457C[]; // idb _UNKNOWN unk_BA4584; // weak char dword_BA45A8[]; // idb int dword_BA45B0; // weak float flt_BA45B4; // weak float flt_BA45B8; // weak float flt_BA45BC; // weak int dword_BA45C0; // weak int dword_BA45C4; // weak int dword_BA45C8; // weak char byte_BA45D0; // idb int dword_BA46D0; // weak char dword_BA46D4[]; // idb char dword_BA46DC[]; // idb char dword_BA46E4[]; // idb int dword_BA46EC; // weak void *dword_BA46F0; // idb int dword_BA46F4; // weak struct _RTL_CRITICAL_SECTION CriticalSection; // idb int dword_BA4710; // weak int dword_BA4714; // weak char dword_BA4718[]; // idb int dword_BA4720; // weak int dword_BA4724; // weak int dword_BA4728; // weak int dword_BA472C; // weak char dword_BA4730[]; // idb int dword_BA4738; // weak char dword_BA473C[]; // idb char dword_BA4744[]; // idb char dword_BA474C[]; // idb _UNKNOWN unk_BA4754; // weak char dword_BA475C[]; // idb int dword_BA4764; // weak char dword_BA4768[]; // idb int dword_BA4770; // weak char byte_BA4774; // weak char dword_BA4778[]; // idb char *dword_BA4780; // idb int dword_BA4784; // weak volatile LONG Addend; // idb char dword_BA478C[]; // idb char dword_BA4794[]; // idb _UNKNOWN unk_BA479C; // weak char dword_BA47A4[]; // idb char dword_BA47AC[]; // idb char dword_BA47B4[]; // idb char dword_BA47BC[]; // idb _UNKNOWN unk_BA47C4; // weak char dword_BA47CC[]; // idb char dword_BA47D4[]; // idb int dword_BA47DC; // weak _UNKNOWN unk_BA47E0; // weak char dword_BA47E8[]; // idb char dword_BA47F0[]; // idb float flt_BA47F8; // weak float flt_BA47FC; // weak float flt_BA4800; // weak float flt_BA4804; // weak char dword_BA4808[]; // idb struct _RTL_CRITICAL_SECTION stru_BA4810; // idb int dword_BA4828; // weak int dword_BA482C; // weak char dword_BA4830[]; // idb char dword_BA4838[]; // idb char dword_BA4840[]; // idb _UNKNOWN unk_BA4848; // weak char dword_BA4850[]; // idb char dword_BA4858[]; // idb char dword_BA4860[]; // idb _UNKNOWN unk_BA4868; // weak char dword_BA4870[]; // idb int dword_BA4878; // weak int dword_BA487C; // weak char byte_BA4880; // weak char dword_BA4884[]; // idb struct _RTL_CRITICAL_SECTION stru_BA488C; // idb int dword_BA48A4; // weak int dword_BA48A8; // weak int dword_BA48AC[]; // weak int dword_BA48B0; // weak int dword_BA48B4; // weak int dword_BA48B8; // weak int dword_BA48BC; // weak int dword_BA48C0; // weak int dword_BA48C4; // weak int dword_BA48C8; // weak int dword_BA48CC; // weak int dword_BA48D0; // weak _UNKNOWN unk_BA48D4; // weak _UNKNOWN unk_BA48D8; // weak char dword_BA491C[]; // idb int dword_BA4924; // weak int dword_BA4928; // weak char dword_BA492C[]; // idb int dword_BA4934; // weak int dword_BA4938; // weak char dword_BA493C[]; // idb struct _RTL_CRITICAL_SECTION stru_BA4944; // idb int dword_BA495C; // weak int dword_BA4960; // weak int dword_BA4964; // weak int dword_BA4968; // weak int dword_BA496C; // weak int dword_BA4970; // weak struct _RTL_CRITICAL_SECTION stru_BA4974; // idb int dword_BA498C; // weak int dword_BA4990; // weak float flt_BA4994; // weak float flt_BA4998; // weak _UNKNOWN unk_BA499C; // weak int dword_BA49A8; // weak int dword_BA49AC; // weak int dword_BA49B4; // weak int dword_BA49B8; // weak int dword_BA49BC; // weak int dword_BA49C0; // weak char dword_BA49F0[]; // idb char dword_BA49F8[]; // idb char dword_BA4A00[]; // idb struct _RTL_CRITICAL_SECTION stru_BA4A08; // idb int dword_BA4A20; // weak int dword_BA4A24; // weak char dword_BA4A28[]; // idb void *dword_BA4A30; // idb char dword_BA4A34[]; // idb char dword_BA4A3C[]; // idb int dword_BA4A44; // weak char byte_BA4A48; // weak char dword_BA4A50[]; // idb char dword_BA4A58[]; // idb char dword_BA4A60[]; // idb char byte_BA4A68; // weak int dword_BA4A6C; // weak char dword_BA4A70[]; // idb _UNKNOWN unk_BA4A78; // weak char dword_BA4A80[]; // idb _UNKNOWN unk_BA4A88; // weak _UNKNOWN unk_BA4A90; // weak int dword_BA4A98; // weak __int16 word_BA4A9C; // weak __int16 word_BA4AA0; // weak char dword_BA4AA4[]; // idb char dword_BA4AAC[]; // idb int dword_BA4AB4; // weak char dword_BA4AB8[]; // idb int dword_BA4AC0; // weak char dword_BA4AC4[]; // idb int dword_BA4ACC; // weak char dword_BA4AD0[]; // idb int dword_BA4AD8; // weak char dword_BA4ADC[]; // idb int dword_BA4AE4; // weak void *dword_BA4AE8; // idb char dword_BA4AEC[]; // idb char dword_BA4AF4[]; // idb char dword_BA4AFC[]; // idb char dword_BA4B04[]; // idb char dword_BA4B0C[]; // idb char dword_BA4B14[]; // idb char dword_BA4B1C[]; // idb char dword_BA4B24[]; // idb char dword_BA4B2C[]; // idb char dword_BA4B34[]; // idb _UNKNOWN unk_BA4B3C; // weak char dword_BA4B44[]; // idb char dword_BA4B4C[]; // idb char dword_BA4B54[]; // idb char dword_BA4B5C[]; // idb _UNKNOWN unk_BA4B64; // weak char dword_BA4B6C[]; // idb char dword_BA4B74[]; // idb char dword_BA4B7C[]; // idb char dword_BA4B84[]; // idb char dword_BA4B8C[]; // idb char dword_BA4B94[]; // idb char dword_BA4B9C[]; // idb char dword_BA4BA4[]; // idb char dword_BA4BAC[]; // idb char byte_BA4BB4; // weak int dword_BA4BB8; // weak int dword_BA4BBC; // weak _UNKNOWN unk_BA4BC0; // weak _UNKNOWN unk_BA4BC8; // weak _UNKNOWN unk_BA4BD0; // weak _UNKNOWN unk_BA4BD8; // weak _UNKNOWN unk_BA4BE0; // weak _UNKNOWN unk_BA4BE8; // weak char byte_BA4BF0; // weak int dword_BA4BF4; // weak char dword_BA4BF8[]; // idb char dword_BA4C00[]; // idb char dword_BA4C08[]; // idb char dword_BA4C10[]; // idb char dword_BA4C18[]; // idb char dword_BA4C20[]; // idb char dword_BA4C28[]; // idb float flt_BA4C30; // weak int dword_BA4C34; // weak char dword_BA4C38[]; // idb char dword_BA4C40[]; // idb char dword_BA4C48[]; // idb char dword_BA4C50[]; // idb float flt_BA4C58; // weak int dword_BA4C5C; // weak char dword_BA4C60[]; // idb char dword_BA4C68[]; // idb char dword_BA4C70[]; // idb char dword_BA4C78[]; // idb char dword_BA4C80[]; // idb char dword_BA4C88[]; // idb char dword_BA4C90[]; // idb char dword_BA4C98[]; // idb char dword_BA4CA0[]; // idb char dword_BA4CA8[]; // idb char dword_BA4CB0[]; // idb char dword_BA4CB8[]; // idb char dword_BA4CC0[]; // idb char dword_BA4CC8[]; // idb char dword_BA4CD0[]; // idb char dword_BA4CD8[]; // idb char dword_BA4CE0[]; // idb char dword_BA4CE8[]; // idb char dword_BA4CF0[]; // idb char dword_BA4CF8[]; // idb char dword_BA4D00[]; // idb char dword_BA4D08[]; // idb char dword_BA4D10[]; // idb char dword_BA4D18[]; // idb char dword_BA4D20[]; // idb char dword_BA4D28[]; // idb char dword_BA4D30[]; // idb char dword_BA4D38[]; // idb char dword_BA4D40[]; // idb char dword_BA4D48[]; // idb char dword_BA4D50[]; // idb char dword_BA4D58[]; // idb char dword_BA4D60[]; // idb char dword_BA4D68[]; // idb char dword_BA4D70[]; // idb char dword_BA4D78[]; // idb char dword_BA4D80[]; // idb char dword_BA4D88[]; // idb char dword_BA4D90[]; // idb char dword_BA4D98[]; // idb char dword_BA4DA0[]; // idb char dword_BA4DA8[]; // idb char dword_BA4DB0[]; // idb char dword_BA4DB8[]; // idb char dword_BA4DC0[]; // idb char dword_BA4DC8[]; // idb char dword_BA4DD0[]; // idb char dword_BA4DD8[]; // idb LARGE_INTEGER stru_BA4DE0; // idb LARGE_INTEGER Frequency; // idb int dword_BA4DF0[16]; // idb int dword_BA4E30[16]; // idb int dword_BA4E70; // weak int (*dword_BA4E74)(void); // weak int (*dword_BA4E78)(void); // weak void *dword_BA4E7C; // idb char byte_BA4E80; // weak char byte_BA4E88; // idb char byte_BA4F8C; // weak int dword_BA4F90[]; // weak int dword_BA4F94[]; // weak int dword_BA4F98[]; // weak int dword_BA4F9C[]; // weak int dword_BA4FA0; // weak int dword_BA4FA4; // weak int dword_BA4FA8; // weak int dword_BA4FAC; // weak int dword_BA4FB0; // weak int dword_BA4FB4; // weak int dword_BA4FB8; // weak int dword_BA4FBC; // weak int dword_BA4FC0; // weak int dword_BA4FC4; // weak int dword_BA4FC8; // weak int dword_BA4FCC; // weak int dword_BA51D0; // weak _UNKNOWN unk_BA51E0; // weak int dword_BA5200; // weak int dword_BA520C; // weak int dword_BA5218; // weak int dword_BA5224; // weak int dword_BA5230; // weak int dword_BA523C; // weak int dword_BA5248; // weak char byte_BA524C; // weak struct _RTL_CRITICAL_SECTION stru_BA5358; // idb char byte_BA5370; // weak int dword_BA5374; // weak _UNKNOWN unk_BA537C; // weak _UNKNOWN unk_BA5384; // weak char byte_BA538C; // weak _UNKNOWN unk_BA5390; // weak _UNKNOWN unk_BA5398; // weak int dword_BA54A0; // weak HINSTANCE hInstance; // idb HACCEL hAccTable; // idb void *dword_BA54AC; // idb int dword_BA54B0; // weak int dword_BA54B4; // weak int dword_BA54B8; // weak int dword_BA54BC; // weak char byte_BA54C0; // weak char byte_BA54C1; // weak char byte_BA54C2; // weak int dword_BA54C4; // weak int dword_BA54C8; // weak _UNKNOWN unk_BA54CC; // weak _UNKNOWN unk_BA54D4; // weak int dword_BA54DC; // weak int dword_BA54E0; // weak int dword_BA54E4; // weak HMODULE hLibModule; // idb _UNKNOWN unk_BA54EC; // weak _UNKNOWN unk_BA54F4; // weak _UNKNOWN unk_BA54FC; // weak void *dword_BA5508; // idb _UNKNOWN unk_BA550C; // weak _UNKNOWN unk_BA5514; // weak _UNKNOWN unk_BA551C; // weak _UNKNOWN unk_BA5524; // weak _UNKNOWN unk_BA552C; // weak _UNKNOWN unk_BA5534; // weak _UNKNOWN unk_BA553C; // weak _UNKNOWN unk_BA553D; // weak char byte_BA553E; // weak int dword_BA5540; // weak void *dword_BA5544; // idb void *dword_BA554C; // idb int dword_BA5554; // weak float flt_BA5558[]; // weak float flt_BA555C; // weak float flt_BA5560; // weak float flt_BA5564; // weak float flt_BA5658[]; // weak float flt_BA565C; // weak float flt_BA5660; // weak float flt_BA5664; // weak float flt_BA5668; // weak float flt_BA566C; // weak float flt_BA5670; // weak float flt_BA5674; // weak float flt_BA5678; // weak float flt_BA567C; // weak float flt_BA5680; // weak float flt_BA5684; // weak float flt_BA5688; // weak float flt_BA568C; // weak float flt_BA5690; // weak float flt_BA5694; // weak float flt_BA5758[]; // weak float flt_BA575C; // weak float flt_BA5760; // weak float flt_BA5764; // weak char byte_BA5858; // weak int dword_BA585C; // weak int dword_BA5860; // weak int dword_BA5864; // weak int dword_BA5868; // weak int dword_BA586C; // weak char ArgList[]; // idb int dword_BA5878; // weak int dword_BA587C; // weak char DstBuf[1024]; // idb void *dword_BA5C80; // idb int dword_BA5C84; // weak char byte_BA5C8C; // weak char byte_BA5C8D; // weak char byte_BA5C8E; // weak char byte_BA5C8F; // weak int dword_BA5C90; // weak int dword_BA5C94; // weak int dword_BA5C98; // weak int dword_BA5C9C; // weak int dword_BA5CA0; // weak int dword_BA5CA4; // weak Concurrency::details::_UnrealizedChore *dword_BA5CA8; // idb int dword_BA5CAC; // idb int dword_BA5CB0; // weak int dword_BA5CB4; // weak int dword_BA5CB8; // weak int dword_BA5CBC; // weak int dword_BA5CC0; // weak int dword_BA5CC4; // weak char dword_BA5CC8[]; // idb int dword_BA5CCC; // idb char byte_BA5CD0; // weak int dword_BA5CD4; // weak int dword_BA5CD8; // weak char dword_BA5CDC[]; // idb char byte_BA5CE0; // weak size_t dword_BA5CE4; // idb int dword_BA5CE8; // weak int dword_BA5CEC; // weak char *dword_BA5CF0; // idb int dword_BA5CF4; // weak int dword_BA5CF8; // weak void *dword_BA5CFC; // idb int dword_BA5D00; // weak int dword_BA5D04; // weak int dword_BA5D08; // weak FILE *dword_BA5D0C; // idb int dword_BA5D14; // weak void *dword_BA5D18; // idb int dword_BA5D1C; // weak int dword_BA5D20; // weak int dword_BA5D24; // weak int dword_BA5D28; // weak void *dword_BA5D2C; // idb float flt_BA5D30; // weak float flt_BA5D34; // weak float flt_BA5D38; // weak float flt_BA5D3C; // weak float flt_BA5D40; // weak float flt_BA5D44; // weak float flt_BA5D48; // weak float flt_BA5D4C; // weak float flt_BA5D50; // weak float flt_BA5D54; // weak float flt_BA5D58; // weak float flt_BA5D5C; // weak float flt_BA5D60; // weak float flt_BA5D64; // weak float flt_BA5D68; // weak float flt_BA5D6C; // weak void *dword_BA5D70; // idb int dword_BA5D74; // weak _UNKNOWN unk_BA5D78; // weak int dword_BA5EB8; // weak int dword_BA5EBC; // weak int dword_BA5EC0; // weak int dword_BA5EC4; // weak int dword_BA5EC8; // weak int dword_BA5ECC; // weak int dword_BA5ED0; // weak int dword_BA5ED8; // weak int dword_BA63F8; // weak int dword_BA63FC; // weak int dword_BA6400; // weak int dword_BA6404; // weak int dword_BA6408; // weak int dword_BA640C; // weak int dword_BA6410; // weak int dword_BA6414; // weak int dword_BA6418; // weak int dword_BA641C; // weak int dword_BA6420; // weak int dword_BA6424; // weak int dword_BA6428; // weak int dword_BA642C; // weak int dword_BA6430; // weak int dword_BA6434; // weak int dword_BA6438; // weak int dword_BA643C; // weak int dword_BA6440; // weak int dword_BA6488; // weak int dword_BA648C; // weak int dword_BA6490; // weak int dword_BA6494; // weak int dword_BA6498; // weak int dword_BA649C; // weak int dword_BA64A0; // weak int dword_BA64A4; // weak int dword_BA64A8; // weak int dword_BA64AC; // weak int dword_BA64B0; // weak int dword_BA64B4; // weak int dword_BA64B8; // weak int dword_BA64BC; // weak int dword_BA64C0; // weak int dword_BA64C4; // weak int dword_BA64C8; // weak int dword_BA6518; // weak _UNKNOWN unk_BA6574; // weak _UNKNOWN unk_BA6578; // weak int dword_BA6580; // weak int dword_BA6584; // weak int dword_BA6588; // weak int dword_BA658C; // weak int dword_BA6590; // weak int dword_BA6594; // weak int dword_BA6598; // weak int dword_BA659C; // weak int dword_BA65A0; // weak int dword_BA65A4; // weak int dword_BA65A8; // weak char byte_BA65AC; // weak int dword_BA65B0; // weak _UNKNOWN unk_BA65B8; // weak _UNKNOWN unk_BA65B9; // weak _UNKNOWN unk_BA65BA; // weak _UNKNOWN unk_BA65BB; // weak _UNKNOWN unk_BA65BC; // weak _UNKNOWN unk_BA65BD; // weak _UNKNOWN unk_BA65C0; // weak char dword_BA65C8[]; // idb _UNKNOWN unk_BA65D0; // weak _UNKNOWN unk_BA65D4; // weak char dword_BA65DC[]; // idb _UNKNOWN unk_BA65E4; // weak _UNKNOWN unk_BA65E8; // weak int dword_BA65F0; // weak _UNKNOWN unk_BA65F4; // weak int dword_BA65F8; // weak int dword_BA65FC; // weak _UNKNOWN unk_BA6600; // weak struct _RTL_CRITICAL_SECTION stru_BA6604; // idb int dword_BA661C; // weak void *dword_BA6620; // idb int dword_BA6624; // weak int dword_BA6628; // weak int dword_BA662C; // weak int dword_BA6630; // weak float flt_BA6634; // weak float flt_BA6638; // weak float flt_BA663C; // weak float flt_BA6640; // weak float flt_BA6644; // weak float flt_BA6648; // weak float flt_BA664C; // weak int dword_BA6650; // weak _UNKNOWN unk_BA6654; // weak char dword_BA6658[]; // idb char dword_BA6660[]; // idb int dword_BA6668; // weak int dword_BA666C; // weak int dword_BA6670; // weak int dword_BA6674; // weak int dword_BA6678; // weak int dword_BA667C; // weak int dword_BA6680; // weak int dword_BA6684; // weak int dword_BA6688; // weak int dword_BA668C; // weak int dword_BA6690; // weak int dword_BA6694; // weak int dword_BA6698; // weak int dword_BA669C; // weak int dword_BA66A0; // weak int dword_BA66A4; // weak _UNKNOWN unk_BA66A8; // weak _UNKNOWN unk_BA66A9; // weak int dword_BA66AC; // weak int dword_BA66B0; // weak int dword_BA66B4; // weak int dword_BA66B8; // weak int dword_BA66BC; // weak _UNKNOWN unk_BA66C0; // weak _UNKNOWN unk_BA66C1; // weak struct _RTL_CRITICAL_SECTION stru_BA66C4; // idb int dword_BA66DC; // weak void *dword_BA66E0; // idb int dword_BA66E4; // weak int dword_BA66E8; // weak int dword_BA66EC; // weak int dword_BA66F0; // weak _UNKNOWN unk_BA66F4; // weak _UNKNOWN unk_BA68F8; // weak _UNKNOWN unk_BA68F9; // weak _UNKNOWN unk_BA68FC; // weak _UNKNOWN unk_BA6904; // weak void *dword_BA6908; // idb int dword_BA690C; // weak int dword_BA6910; // weak int dword_BA6918; // weak void *dword_BA691C; // idb int dword_BA6920; // weak int dword_BA6924; // weak int dword_BA6928; // weak int dword_BA692C; // weak int dword_BA6930; // weak void *dword_BA6934; // idb int dword_BA6944; // weak int dword_BA6948; // weak _UNKNOWN unk_BA6954; // weak void *dword_BA6958; // idb void *dword_BA6964; // idb int dword_BA6974; // weak int dword_BA6978; // weak _UNKNOWN unk_BA6984; // weak void *dword_BA6988; // idb void *dword_BA6994; // idb int dword_BA69A4; // weak int dword_BA69A8; // weak _UNKNOWN unk_BA69B4; // weak void *dword_BA69B8; // idb _UNKNOWN unk_BA69C4; // weak _UNKNOWN unk_BA69C8; // weak _UNKNOWN unk_BA69D0; // weak _UNKNOWN unk_BA69D8; // weak int dword_BA69E0; // weak _UNKNOWN unk_BA69E4; // weak int dword_BA69EC; // weak _UNKNOWN unk_BA69F0; // weak _UNKNOWN unk_BA69F8; // weak int dword_BA6A00; // weak int dword_BA6A04; // weak _UNKNOWN unk_BA6A08; // weak int dword_BA6A10; // weak _UNKNOWN unk_BA6A18; // weak char byte_BA6A1C; // weak char byte_BA6A64; // weak char byte_BA6A65; // weak char byte_BA6A66; // weak int dword_BA6A68; // weak int dword_BA6A6C; // weak int dword_BA6A70; // weak POINT pt; // idb int dword_BA6A7C; // weak int dword_BA6A80; // weak int dword_BA6A84; // weak char byte_BA6A88; // weak _UNKNOWN unk_BA6A8C; // weak int dword_BA6A94; // weak char byte_BA6A98; // weak int dword_BA6A9C; // weak int dword_BA6AA0; // weak char byte_BA6AA4; // weak int dword_BA6AA8; // weak int dword_BA6AAC; // weak char byte_BA6AB0; // weak int dword_BA6AB4; // weak int dword_BA6AB8; // weak char byte_BA6ABC; // weak int dword_BA6AC0; // weak int dword_BA6AC4; // weak char byte_BA6AC8; // weak int dword_BA6ACC; // weak int dword_BA6AD0; // weak char byte_BA6AD4; // weak int dword_BA6AD8; // weak int dword_BA6ADC; // weak char byte_BA6AE0; // weak int dword_BA6AE4; // weak int dword_BA6AE8; // weak char byte_BA6AEC; // weak int dword_BA6AF0; // weak int dword_BA6AF4; // weak char byte_BA6AF8; // weak int dword_BA6AFC; // weak _UNKNOWN unk_BA6B00; // weak int dword_BA6B08; // weak _UNKNOWN unk_BA6B10; // weak int dword_BA6B30; // weak _UNKNOWN unk_BA6B34; // weak int dword_BA6B48; // weak int dword_BA6B50; // weak _UNKNOWN unk_BA6B54; // weak int dword_BA6B58; // weak int dword_BA6B5C; // weak int dword_BA6B60; // weak int dword_BA6B64; // weak int dword_BA6B78; // weak int dword_BA6B7C; // weak int dword_BA6B80; // weak int dword_BA6B98; // weak int dword_BA6B9C; // weak int dword_BA6BA0; // idb char byte_BA6BA4; // weak char byte_BA6BA5; // weak _UNKNOWN unk_BA6BA8; // weak char byte_BA6BB0; // weak int dword_BA6BB4; // weak int dword_BA6BB8; // weak int dword_BA6BBC; // weak int dword_BA6BC0; // weak void *dword_BA6BC4; // idb int dword_BA6BC8; // weak int dword_BA6BCC; // weak char byte_BA6BD0; // weak _UNKNOWN unk_BA6BD4; // weak int dword_BA6BDC; // weak int dword_BA6BE0; // weak char byte_BA6BE4; // weak char byte_BA6BE5; // weak _UNKNOWN unk_BA6BF8; // weak int dword_BA6C20; // weak int dword_BA6C28; // weak WNDPROC lpPrevWndFunc; // idb int dword_BA6C34; // weak _UNKNOWN unk_BA6C44; // weak int dword_BA6C4C; // weak int dword_BA6C50; // weak int dword_BA6C54; // weak int dword_BA6C58; // weak _UNKNOWN unk_BA6C5C; // weak int dword_BA6C94; // weak int dword_BA6C98; // weak char byte_BA6C9C; // weak int dword_BA6CA0; // weak int dword_BA6CA4; // weak int dword_BA6CA8; // weak int dword_BA6CAC; // weak int dword_BA6CB0; // weak _UNKNOWN unk_BA6CB4; // weak int dword_BA6CBC; // weak void *dword_BA6CC0; // idb int dword_BA6CC8; // weak int dword_BA6CCC; // weak int dword_BA6CD0; // weak void *dword_BA6CD4; // idb float flt_BA6CD8; // weak float flt_BA6CDC; // weak float flt_BA6CE0; // weak float flt_BA6CE4; // weak float flt_BA6CE8; // weak float flt_BA6CEC; // weak float flt_BA6CF0; // weak float flt_BA6CF4; // weak float flt_BA6CF8; // weak float flt_BA6CFC; // weak float flt_BA6D00; // weak float flt_BA6D04; // weak float flt_BA6D08; // weak float flt_BA6D0C; // weak float flt_BA6D10; // weak float flt_BA6D14; // weak int dword_BA6D18; // weak int dword_BA6D1C; // weak void *dword_BA6D20; // idb void *dword_BA6D24; // idb int dword_BA6D28; // weak int dword_BA6D2C; // weak int dword_BA6D30; // weak void *dword_BA6D34; // idb int dword_BA6D38[]; // weak _UNKNOWN unk_BA6D4C; // weak _UNKNOWN unk_BA6D54; // weak char byte_BA6D60[20]; // idb int dword_BA6D74; // weak int dword_BA6D78; // weak int dword_BA6D7C; // weak int dword_BA6D80; // weak char byte_BA6D84; // weak __int16 word_BA6D88; // weak __int16 word_BA6D92; // weak char byte_BA6D94; // weak int dword_BA6D9C; // weak char byte_BA6DA0; // weak char byte_BA6DA3; // weak __int16 word_BA6DA6; // weak char byte_BA6DA9; // weak char byte_BA6DAB; // weak char byte_BA6DAD; // weak __int16 word_BA6DAF; // weak char byte_BA6DB1; // weak __int16 word_BA6DB2; // weak __int16 word_BA6DC5; // weak int dword_BA6DCE; // weak int dword_BA6DD2; // weak int dword_BA6DD8[]; // weak int dword_BA6DDC[]; // weak int dword_BA6DE0[]; // weak int dword_BA6DE4; // weak int dword_BA6DE8; // weak int dword_BA6DEC; // weak int dword_BA6DF0; // weak int dword_BA6DF4; // weak int dword_BA6DF8; // weak int dword_BA6DFC; // weak int dword_BA6E00; // weak int dword_BA6E04; // weak int dword_BA6E08; // weak int dword_BA6E0C; // weak int dword_BA6E10; // weak int dword_BA6E14; // weak int dword_BA6E18; // weak int dword_BA6E1C; // weak int dword_BA6E20[]; // weak int dword_BA6E24[]; // weak int dword_BA6E28; // weak int dword_BA6E2C; // weak int dword_BA6E30; // weak int dword_BA6E34; // weak int dword_BA6E38; // weak int dword_BA6E3C; // weak HMODULE dword_BA6E40; // idb int dword_BA6E44; // weak int dword_BA6E48; // weak int dword_BA6E4C; // weak void *dword_BA6E50; // idb void *dword_BA6E54; // idb _UNKNOWN unk_BA6E58; // weak _UNKNOWN unk_BA6E60; // weak int dword_BA6E64[4]; // idb int dword_BA6E74; // weak int dword_BA6E78; // weak char byte_BA6E7C; // weak _UNKNOWN unk_BA6E80; // weak _UNKNOWN unk_BA6E88; // weak _UNKNOWN unk_BA6E90; // weak _UNKNOWN unk_BA6E98; // weak _UNKNOWN unk_BA6EA0; // weak struct _RTL_CRITICAL_SECTION stru_BA6EA8; // idb int dword_BA6EC0; // weak int dword_BA6EC4; // weak _UNKNOWN unk_BA6EC8; // weak _UNKNOWN unk_BA6ED0; // weak _UNKNOWN unk_BA6ED8; // weak _UNKNOWN unk_BA6EE0; // weak void *dword_BA6EE8; // idb int dword_BA6EFC; // weak int dword_BA6F00; // weak int dword_BA6F04; // weak int dword_BA6F08; // weak __int16 word_BA6F0C; // weak int dword_BA6F10[]; // weak int dword_BA6F14; // weak int dword_BA6F18; // weak int dword_BA6F1C; // weak int dword_BA6F20; // weak int dword_BA6F24; // weak int dword_BA6F28; // weak int dword_BA6F2C; // weak int dword_BA6F30; // weak int dword_BA6F34; // weak _UNKNOWN unk_BA6F38; // weak char byte_BA6F3B; // weak _UNKNOWN unk_BA6F3C; // weak char byte_BA6F3D; // weak __int16 word_BA6F40; // weak int dword_BA6F44; // idb int dword_BA6F48; // weak int dword_BA6F4C; // weak int dword_BA6F50; // weak int dword_BA6F54; // weak int dword_BA6F58; // weak int dword_BA6F5C; // weak int dword_BA6F60; // weak int dword_BA6F64; // weak int dword_BA6F68; // weak int dword_BA6F6C; // weak int dword_BA6F70; // weak int dword_BA6F74; // weak int dword_BA6F78; // weak char byte_BA6F80; // weak char byte_BA6F81; // weak _UNKNOWN unk_BA6F88; // weak int dword_BA6FC8; // weak int dword_BA6FCC; // weak int dword_BA6FD0; // weak char dword_BA6FD4[]; // idb int dword_BA6FD8; // weak int dword_BA6FE0; // weak int dword_BA6FE4; // weak int dword_BA6FE8; // weak int dword_BA6FEC; // weak int dword_BA6FF0; // weak float flt_BA6FF4; // weak float flt_BA6FF8; // weak float flt_BA6FFC; // weak float flt_BA7000; // weak float flt_BA7008; // weak float flt_BA700C; // weak float flt_BA7010; // weak float flt_BA7014; // weak float flt_BA7018; // weak float flt_BA701C; // weak float flt_BA7020; // weak float flt_BA7024; // weak float flt_BA7028; // weak float flt_BA702C; // weak float flt_BA7030; // weak float flt_BA7034; // weak float flt_BA7038; // weak float flt_BA703C; // weak float flt_BA7040; // weak float flt_BA7044; // weak float flt_BA7050[]; // weak float flt_BA7054; // weak float flt_BA7058; // weak float flt_BA705C; // weak float flt_BA7060; // weak float flt_BA7064; // weak float flt_BA7068; // weak float flt_BA706C; // weak float flt_BA7070; // weak float flt_BA7074; // weak float flt_BA7078; // weak float flt_BA707C; // weak float flt_BA7080; // weak float flt_BA7084; // weak float flt_BA7088; // weak float flt_BA708C; // weak _UNKNOWN unk_BA7090; // weak float flt_BA70D0[]; // weak float flt_BA70D4[]; // weak float flt_BA70D8[]; // weak float flt_BA70DC[]; // weak float flt_BA70E0; // weak float flt_BA70E4; // weak float flt_BA70E8; // weak float flt_BA70EC; // weak _UNKNOWN unk_BA70F0; // weak float flt_BA7130; // weak float flt_BA7134; // weak float flt_BA7138; // weak float flt_BA713C; // weak char byte_BA7140; // weak _UNKNOWN unk_BA714C; // weak char dword_BA7154[]; // idb float flt_BA7160; // weak int dword_BA7164; // weak _UNKNOWN unk_BA7168; // weak char byte_BA7170; // weak int dword_BA7174; // weak int dword_BA7178[]; // weak int dword_BA717C; // weak int dword_BA7180; // weak int dword_BA7184; // weak int dword_BA7188; // weak int dword_BA718C; // weak int dword_BA7190; // weak int dword_BA7194; // weak int dword_BA7198; // weak int dword_BA719C; // weak int dword_BA71A0; // weak int dword_BA71A4; // weak int dword_BA71A8; // weak int dword_BA71AC; // weak int dword_BA71B0; // weak int dword_BA71B4; // weak int dword_BA71B8; // weak int dword_BA71C0; // weak void *dword_BA71C4; // idb int dword_BA71C8; // weak int dword_BA71CC; // weak int dword_BA71D0; // weak int dword_BA71D4; // idb int dword_BA71D8; // idb void *dword_BA71DC; // idb _UNKNOWN unk_BA71E0; // weak _UNKNOWN unk_BA71E4; // weak _UNKNOWN unk_BA71EC; // weak char dword_BA71F4[]; // idb int dword_BA71FC; // weak _UNKNOWN unk_BA7204; // weak _UNKNOWN unk_BA7210; // weak int dword_BA7250; // weak int dword_BA7258; // weak int dword_BA7360; // weak char aReserved[9] = "Reserved"; // weak CHAR LibFileName[] = "user32"; // idb CHAR ProcName[] = "MessageBoxA"; // idb CHAR aPeekmessagea[] = "PeekMessageA"; // idb CHAR aPostquitmessag[] = "PostQuitMessage"; // idb CHAR aWsprintfa[] = "wsprintfA"; // idb CHAR aAdvapi32[] = "advapi32"; // idb CHAR aRegopenkeyexa[] = "RegOpenKeyExA"; // idb CHAR aRegqueryvaluee[] = "RegQueryValueExA"; // idb CHAR aRegclosekey[] = "RegCloseKey"; // idb _UNKNOWN unk_BA9C80; // weak _UNKNOWN unk_BA9D40; // weak _UNKNOWN unk_BA9E00; // weak _UNKNOWN unk_BA9E40; // weak _UNKNOWN unk_BA9E80; // weak _UNKNOWN unk_BA9E90; // weak _UNKNOWN unk_BA9E9C; // weak _UNKNOWN unk_BA9EAC; // weak _UNKNOWN unk_BA9EBC; // weak _UNKNOWN unk_BA9EC8; // weak int dword_BA9EE0[] = { 0 }; // weak int dword_BA9EE4[] = { 1 }; // weak int dword_BA9EE8[] = { 8 }; // weak int dword_BA9EEC[77] = { 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }; // idb int dword_BAA0C0[16] = { 0, 4294967295, 4294967293, 4294967289, 4294967281, 4294967265, 4294967233, 4294967169, 4294967041, 4294966785, 4294966273, 4294965249, 4294963201, 4294959105, 4294950913, 4294934529 }; // idb int dword_BAA220[] = { 4096 }; // weak int dword_BAA224[71] = { 2953, 2953, 3134, 2129, 3134, 3483, 2260, 2260, 3483, 4096, 2511, 2399, 2511, 4096, 5213, 2953, 2666, 2666, 2953, 5213, 7568, 3758, 3134, 2962, 3134, 3758, 7568, 14846, 5456, 3990, 3483, 3483, 3990, 5456, 14846, 10703, 5792, 4433, 4096, 4433, 5792, 10703, 11362, 6436, 5213, 5213, 6436, 11362, 12625, 7568, 6635, 7568, 12625, 14846, 9632, 9632, 14846, 18895, 13984, 18895, 27432, 27432, 53810, 0, 0, 0, 0, 0, 0, 0, 0 }; // idb double dbl_BAA340[] = { 0.125 }; // weak double dbl_BAA348[] = { 0.17338 }; // weak double dbl_BAA350[] = { 0.17338 }; // weak double dbl_BAA358[61] = { 0.16332, 0.240485, 0.16332, 0.146984, 0.226532, 0.226532, 0.146984, 0.125, 0.203873, 0.213388, 0.203873, 0.125, 0.09821199999999999, 0.17338, 0.192044, 0.192044, 0.17338, 0.09821199999999999, 0.06765, 0.136224, 0.16332, 0.172835, 0.16332, 0.136224, 0.06765, 0.034487, 0.093833, 0.12832, 0.146984, 0.146984, 0.12832, 0.093833, 0.034487, 0.047835, 0.08838799999999999, 0.115485, 0.125, 0.115485, 0.08838799999999999, 0.047835, 0.04506, 0.07954700000000001, 0.09821199999999999, 0.09821199999999999, 0.07954700000000001, 0.04506, 0.040553, 0.06765, 0.077165, 0.06765, 0.040553, 0.034487, 0.053152, 0.053152, 0.034487, 0.027097, 0.036612, 0.027097, 0.018664, 0.018664, 0.009514999999999999 }; // idb double dbl_BAA540 = 32768.0; // weak double dbl_BAA548 = 0.0625; // weak double dbl_BAA550 = 0.5; // weak char byte_BAA560[256] = { '\0', '\x01', '\x02', '\x02', '\x03', '\x03', '\x03', '\x03', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x04', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x05', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\x06', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\a', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b', '\b' }; // idb char byte_BAA660[] = { '\0' }; // weak _DWORD dword_BAA8E0[4] = { 0, 0, 0, 0 }; // idb char aIntelRJpegLibr[34] = "Intel(R) JPEG Library, version %s"; // weak //----- (00401000) -------------------------------------------------------- void __thiscall sub_401000(std::exception *this) { *(_DWORD *)this = &std::bad_alloc::`vftable'; sub_7D43CE(this); } // 9A655C: using guessed type void *std::bad_alloc::`vftable'; //----- (00401010) -------------------------------------------------------- void *__thiscall sub_401010(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::bad_alloc::`vftable'; sub_7D43CE((std::exception *)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A655C: using guessed type void *std::bad_alloc::`vftable'; //----- (00401060) -------------------------------------------------------- void __cdecl sub_401060(int a1, int a2, 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) { unsigned int v31; // eax char *v32; // edi char v33; // cl char *v34; // edi char v35; // al unsigned int v36; // eax char *v37; // edi char v38; // cl CHAR *v39; // eax const char *v40; // eax FILE *v41; // eax FILE *v42; // esi int v43; // eax int v44; // edi void *v45; // ebx const char *v46; // ecx void *v47; // [esp+10h] [ebp-244h] int v48; // [esp+20h] [ebp-234h] unsigned int v49; // [esp+24h] [ebp-230h] char *v50; // [esp+2Ch] [ebp-228h] int v51; // [esp+3Ch] [ebp-218h] unsigned int v52; // [esp+40h] [ebp-214h] char v53; // [esp+47h] [ebp-20Dh] __int16 v54; // [esp+48h] [ebp-20Ch] char v55; // [esp+4Ah] [ebp-20Ah] int v56; // [esp+148h] [ebp-10Ch] int v57; // [esp+14Ch] [ebp-108h] int v58; // [esp+150h] [ebp-104h] int v59; // [esp+154h] [ebp-100h] int v60; // [esp+158h] [ebp-FCh] int v61; // [esp+15Ch] [ebp-F8h] int v62; // [esp+160h] [ebp-F4h] int v63; // [esp+164h] [ebp-F0h] char v64; // [esp+168h] [ebp-ECh] char v65[4]; // [esp+1ACh] [ebp-A8h] int v66; // [esp+1B0h] [ebp-A4h] int v67; // [esp+1B4h] [ebp-A0h] int v68; // [esp+1B8h] [ebp-9Ch] int v69; // [esp+1BCh] [ebp-98h] int v70; // [esp+1C0h] [ebp-94h] int v71; // [esp+1C4h] [ebp-90h] int v72; // [esp+1C8h] [ebp-8Ch] int v73; // [esp+1CCh] [ebp-88h] int v74; // [esp+1D0h] [ebp-84h] int v75; // [esp+1D4h] [ebp-80h] int v76; // [esp+1D8h] [ebp-7Ch] int v77; // [esp+1DCh] [ebp-78h] int v78; // [esp+1E0h] [ebp-74h] int v79; // [esp+1E4h] [ebp-70h] char v80; // [esp+1E8h] [ebp-6Ch] int v81; // [esp+210h] [ebp-44h] int v82; // [esp+214h] [ebp-40h] int v83; // [esp+218h] [ebp-3Ch] int v84; // [esp+21Ch] [ebp-38h] int v85; // [esp+220h] [ebp-34h] int v86; // [esp+224h] [ebp-30h] int v87; // [esp+228h] [ebp-2Ch] int v88; // [esp+22Ch] [ebp-28h] char v89; // [esp+230h] [ebp-24h] int v90; // [esp+250h] [ebp-4h] v83 = a3; v81 = a1; v82 = a2; v86 = a6; v84 = a4; v85 = a5; v56 = a9; v87 = a7; v88 = a8; v59 = a12; v57 = a10; v58 = a11; v62 = a15; v60 = a13; v61 = a14; v66 = a18; v63 = a16; *(_DWORD *)v65 = a17; v69 = a21; v67 = a19; v68 = a20; v72 = a24; v70 = a22; v71 = a23; v75 = a27; v73 = a25; v74 = a26; v78 = a30; v76 = a28; v77 = a29; v89 = 0; v64 = 0; v79 = a31; v80 = 0; v54 = 0; memset(&v55, 0, 0xFDu); v31 = strlen((const char *)&v56) + 1; v32 = &v53; do v33 = (v32++)[1]; while ( v33 ); qmemcpy(v32, &v56, v31); v34 = &v53; do v35 = (v34++)[1]; while ( v35 ); *(_WORD *)v34 = 92; v36 = strlen(v65) + 1; v37 = &v53; do v38 = (v37++)[1]; while ( v38 ); qmemcpy(v37, v65, v36); if ( !byte_ACAD5C ) sub_420410(); v52 = 15; v51 = 0; LOBYTE(v50) = 0; v39 = (CHAR *)sub_401410(byte_ACA628, (const char *)&v54); sub_4018E0(&v50, v39, strlen(v39)); v40 = v50; v90 = 0; if ( v52 < 0x10 ) v40 = (const char *)&v50; v41 = fopen(v40, "rb"); v42 = v41; if ( v41 ) { v43 = _fileno(v41); v44 = _filelength(v43); v45 = operator new[](v44); fread(v45, v44, 1u, v42); fclose(v42); sub_747370((int)&v47, v45, v44); v46 = (const char *)v47; if ( v49 < 0x10 ) v46 = (const char *)&v47; if ( !strcmp((const char *)&v81, v46) ) { if ( v49 >= 0x10 ) operator delete(v47); v49 = 15; v48 = 0; LOBYTE(v47) = 0; if ( v52 >= 0x10 ) operator delete(v50); return; } free(v45); if ( v49 >= 0x10 ) operator delete(v47); } sub_8EF6C0(&unk_BA6A18, dword_ACDD50); sub_462C30( 1, "An Error occured! %s appears to be in a modified state or client did not respond in time. Please try to repair and r" "estart your client", v65); sub_487450(); if ( v52 >= 0x10 ) operator delete(v50); } // ACAD5C: using guessed type char byte_ACAD5C; // ACDD50: using guessed type int dword_ACDD50; //----- (004013F0) -------------------------------------------------------- char *sub_4013F0() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA628; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00401410) -------------------------------------------------------- const CHAR *__cdecl sub_401410(const char *a1, const char *a2) { strcpy(name, a1); strcat(name, a2); return name; } //----- (00401470) -------------------------------------------------------- std::exception *__thiscall sub_401470(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::bad_alloc::`vftable'; return v2; } // 9A655C: using guessed type void *std::bad_alloc::`vftable'; //----- (00401490) -------------------------------------------------------- _DWORD *__thiscall sub_401490(_DWORD *this) { _DWORD *result; // eax result = this; if ( this[5] >= 0x10u ) result = (_DWORD *)*this; return result; } //----- (004014A0) -------------------------------------------------------- void __thiscall sub_4014A0(void *this, char a2, size_t a3) { _DWORD *v3; // esi void *v4; // ebx v3 = this; if ( a2 && *((_DWORD *)this + 5) >= 0x10u ) { v4 = *(void **)this; if ( a3 ) memcpy(this, v4, a3); operator delete(v4); } v3[4] = a3; v3[5] = 15; *((_BYTE *)v3 + a3) = 0; } //----- (004014F0) -------------------------------------------------------- _DWORD *__thiscall sub_4014F0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *v3; // esi unsigned int v4; // eax unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // edx _DWORD *v8; // ebx _DWORD *v9; // edx int v10; // eax bool v11; // cf v3 = this; v4 = this[4]; if ( v4 < a2 ) std::_Xout_of_range("invalid string position"); v5 = a3; v6 = v4 - a2; if ( v6 < a3 ) v5 = v6; if ( v5 ) { v7 = this[5]; if ( v7 < 0x10 ) v8 = this; else v8 = (_DWORD *)*this; if ( v7 < 0x10 ) v9 = this; else v9 = (_DWORD *)*this; memcpy_0((char *)v9 + a2, (char *)v8 + a2 + v5, v6 - v5); v10 = v3[4] - v5; v11 = v3[5] < 0x10u; v3[4] = v10; if ( !v11 ) { *(_BYTE *)(*v3 + v10) = 0; return v3; } *((_BYTE *)v3 + v10) = 0; } return v3; } //----- (00401580) -------------------------------------------------------- void *__stdcall sub_401580(size_t a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( a1 > 0xFFFFFFFF || (result = operator new(a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004015D0) -------------------------------------------------------- void *__thiscall sub_4015D0(const void **this, void *a2, size_t a3) { const void **v3; // edi unsigned int v4; // esi unsigned int v5; // ebx unsigned int v6; // ecx void *v7; // eax const void *v8; // eax void *result; // eax int v10; // [esp+0h] [ebp-38h] void **v11; // [esp+10h] [ebp-28h] char *v12; // [esp+20h] [ebp-18h] const void **v13; // [esp+24h] [ebp-14h] int *v14; // [esp+28h] [ebp-10h] int v15; // [esp+34h] [ebp-4h] void *v16; // [esp+40h] [ebp+8h] v14 = &v10; v3 = this; v13 = this; v4 = (unsigned int)a2 | 0xF; if ( ((unsigned int)a2 | 0xF) <= 0xFFFFFFFE ) { v5 = (unsigned int)this[5]; v6 = (unsigned int)this[5] >> 1; if ( v6 > v4 / 3 ) { v4 = v6 + v5; if ( v5 > -2 - v6 ) v4 = -2; } } else { v4 = (unsigned int)a2; } v7 = 0; v15 = 0; if ( v4 + 1 > 0 ) { if ( v4 + 1 > 0xFFFFFFFF || (v7 = operator new(v4 + 1)) == 0 ) { v12 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v12); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } } v16 = v7; if ( a3 ) { if ( (unsigned int)v3[5] < 0x10 ) v8 = v3; else v8 = *v3; memcpy(v16, v8, a3); } if ( (unsigned int)v3[5] >= 0x10 ) operator delete((void *)*v3); result = v16; *(_BYTE *)v3 = 0; *v3 = v16; v3[5] = (const void *)v4; v3[4] = (const void *)a3; if ( v4 >= 0x10 ) v3 = (const void **)v16; *((_BYTE *)v3 + a3) = 0; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00401740) -------------------------------------------------------- BOOL __thiscall sub_401740(void *this, void *a2, char a3) { void *v3; // ebx _DWORD *v4; // esi unsigned int v5; // eax BOOL result; // eax void *v7; // edi _DWORD *v8; // ebx v3 = a2; v4 = this; if ( (unsigned int)a2 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v5 = *((_DWORD *)this + 5); if ( v5 >= (unsigned int)a2 ) { if ( a3 && (unsigned int)a2 < 0x10 ) { v7 = (void *)*((_DWORD *)this + 4); if ( a2 < v7 ) v7 = a2; if ( v5 >= 0x10 ) { v8 = *(_DWORD **)this; if ( v7 ) memcpy(this, v8, (size_t)v7); operator delete(v8); v3 = a2; } v4[4] = v7; v4[5] = 15; *((_BYTE *)v4 + (_DWORD)v7) = 0; result = (unsigned int)v3 > 0; } else { if ( !a2 ) { *((_DWORD *)this + 4) = 0; if ( v5 >= 0x10 ) v4 = *(_DWORD **)this; *(_BYTE *)v4 = 0; } result = (unsigned int)a2 > 0; } } else { sub_4015D0((const void **)this, a2, *((_DWORD *)this + 4)); result = (unsigned int)a2 > 0; } return result; } //----- (004017F0) -------------------------------------------------------- const void **__thiscall sub_4017F0(const void **this, const void **a2, unsigned int a3, void *a4) { const void **v4; // esi const void **v5; // ecx unsigned int v6; // edi void *v7; // edi const void **result; // eax unsigned int v9; // eax void *v10; // eax bool v11; // cf v4 = this; v5 = a2; v6 = (unsigned int)a2[4]; if ( v6 < a3 ) std::_Xout_of_range("invalid string position"); v7 = (void *)(v6 - a3); if ( a4 < v7 ) v7 = a4; if ( v4 == a2 ) { sub_4014F0(v4, (unsigned int)v7 + a3, 0xFFFFFFFF); sub_4014F0(v4, 0, a3); return v4; } if ( (unsigned int)v7 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v9 = (unsigned int)v4[5]; if ( v9 < (unsigned int)v7 ) { sub_4015D0(v4, v7, (size_t)v4[4]); v5 = a2; if ( !v7 ) return v4; LABEL_11: if ( (unsigned int)v5[5] >= 0x10 ) v5 = (const void **)*v5; if ( (unsigned int)v4[5] < 0x10 ) v10 = v4; else v10 = (void *)*v4; memcpy(v10, (char *)v5 + a3, (size_t)v7); v11 = (unsigned int)v4[5] < 0x10; v4[4] = v7; if ( !v11 ) { *((_BYTE *)v7 + (_DWORD)*v4) = 0; return v4; } *((_BYTE *)v7 + (_DWORD)v4) = 0; return v4; } if ( v7 ) goto LABEL_11; v4[4] = 0; if ( v9 < 0x10 ) { result = v4; *(_BYTE *)v4 = 0; } else { *(_BYTE *)*v4 = 0; result = v4; } return result; } //----- (004018E0) -------------------------------------------------------- const void **__thiscall sub_4018E0(_DWORD *this, void *a2, size_t a3) { int v3; // esi unsigned int v4; // ecx unsigned int v5; // eax int v6; // eax const void **result; // eax size_t v8; // eax void *v9; // eax bool v10; // cf v3 = (int)this; if ( a2 ) { v4 = this[5]; v5 = v4 < 0x10 ? v3 : *(_DWORD *)v3; if ( (unsigned int)a2 >= v5 ) { v6 = v4 < 0x10 ? v3 : *(_DWORD *)v3; if ( v6 + *(_DWORD *)(v3 + 16) > (unsigned int)a2 ) { if ( v4 < 0x10 ) result = sub_4017F0((const void **)v3, (const void **)v3, (unsigned int)a2 - v3, (void *)a3); else result = sub_4017F0((const void **)v3, (const void **)v3, (unsigned int)a2 - *(_DWORD *)v3, (void *)a3); return result; } } } if ( a3 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v8 = *(_DWORD *)(v3 + 20); if ( v8 < a3 ) { sub_4015D0((const void **)v3, (void *)a3, *(_DWORD *)(v3 + 16)); if ( !a3 ) return (const void **)v3; LABEL_17: if ( *(_DWORD *)(v3 + 20) < 0x10u ) v9 = (void *)v3; else v9 = *(void **)v3; memcpy(v9, a2, a3); v10 = *(_DWORD *)(v3 + 20) < 0x10u; *(_DWORD *)(v3 + 16) = a3; if ( !v10 ) { *(_BYTE *)(*(_DWORD *)v3 + a3) = 0; return (const void **)v3; } *(_BYTE *)(v3 + a3) = 0; return (const void **)v3; } if ( a3 ) goto LABEL_17; *(_DWORD *)(v3 + 16) = 0; if ( v8 < 0x10 ) { result = (const void **)v3; *(_BYTE *)v3 = 0; } else { **(_BYTE **)v3 = 0; result = (const void **)v3; } return result; } //----- (004019E0) -------------------------------------------------------- _DWORD *__thiscall sub_4019E0(_DWORD *this, void *a2) { _DWORD *v2; // esi v2 = this; this[5] = 15; this[4] = 0; *(_BYTE *)this = 0; sub_4018E0(this, a2, strlen((const char *)a2)); return v2; } //----- (00401A20) -------------------------------------------------------- void __thiscall sub_401A20(_DWORD *this) { *this = &Argv::`vftable'; } // 9A6590: using guessed type void *Argv::`vftable'; //----- (00401A30) -------------------------------------------------------- char *__thiscall sub_401A30(char *this, const char *a2) { char *result; // eax char *v3; // edx char v4; // cl result = this + 264; v3 = this + 4; do { v4 = *v3; v3[260] = *v3; ++v3; } while ( v4 ); strcat(result, a2); return result; } //----- (00401A80) -------------------------------------------------------- void __thiscall sub_401A80(CHAR *this) { CHAR *v1; // esi const char *v2; // edi char *v3; // eax int v4; // esi char v5; // cl void *v6; // [esp+10h] [ebp-12Ch] int v7; // [esp+20h] [ebp-11Ch] unsigned int v8; // [esp+24h] [ebp-118h] char v9; // [esp+2Ch] [ebp-110h] char v10; // [esp+ACh] [ebp-90h] int v11; // [esp+138h] [ebp-4h] v1 = this; v2 = this + 4; GetModuleFileNameA(0, this + 4, 0x104u); _splitpath(v2, 0, 0, &v10, &v9); v8 = 15; v7 = 0; LOBYTE(v6) = 0; v11 = 0; sub_401D10((int)&v6, &v10, strlen(&v10)); sub_401D10((int)&v6, &v9, strlen(&v9)); v3 = (char *)v6; if ( v8 < 0x10 ) v3 = (char *)&v6; v4 = v1 - v3; do { v5 = *v3; v3[v4 + 780] = *v3; ++v3; } while ( v5 ); strrchr(v2, 92)[1] = 0; if ( v8 >= 0x10 ) operator delete(v6); } //----- (00401BB0) -------------------------------------------------------- CHAR *__thiscall sub_401BB0(CHAR *this) { CHAR *v1; // esi v1 = this; *(_DWORD *)this = &Argv::`vftable'; sub_401A80(this); return v1; } // 9A6590: using guessed type void *Argv::`vftable'; //----- (00401BD0) -------------------------------------------------------- void *__thiscall sub_401BD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Argv::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9A6590: using guessed type void *Argv::`vftable'; //----- (00401C00) -------------------------------------------------------- void __thiscall sub_401C00(void *this) { *((_DWORD *)this + 5) = 15; *((_DWORD *)this + 4) = 0; *(_BYTE *)this = 0; } //----- (00401C20) -------------------------------------------------------- int __thiscall sub_401C20(_DWORD *this, int a2, int a3, size_t a4) { _DWORD *v4; // edx unsigned int v5; // eax int v6; // esi unsigned int v7; // ebx size_t v8; // eax size_t v9; // eax unsigned int v10; // edi unsigned int v11; // ecx _DWORD *v12; // ecx int result; // eax char *v14; // eax bool v15; // cf v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 16); v6 = (int)this; if ( v5 < a3 ) std::_Xout_of_range("invalid string position"); v7 = a4; v8 = v5 - a3; if ( v8 < a4 ) v7 = v8; v9 = this[4]; if ( -1 - v9 <= v7 ) std::_Xlength_error("string too long"); if ( !v7 ) return v6; v10 = v9 + v7; if ( v9 + v7 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v11 = this[5]; if ( v11 < v10 ) { sub_4015D0((const void **)v6, (void *)(v9 + v7), v9); v4 = (_DWORD *)a2; if ( v10 ) { LABEL_12: if ( v4[5] < 0x10u ) v12 = v4; else v12 = (_DWORD *)*v4; if ( *(_DWORD *)(v6 + 20) < 0x10u ) v14 = (char *)v6; else v14 = *(char **)v6; memcpy(&v14[*(_DWORD *)(v6 + 16)], (char *)v12 + a3, v7); v15 = *(_DWORD *)(v6 + 20) < 0x10u; *(_DWORD *)(v6 + 16) = v10; if ( !v15 ) { *(_BYTE *)(*(_DWORD *)v6 + v10) = 0; return v6; } *(_BYTE *)(v6 + v10) = 0; } return v6; } if ( v10 ) goto LABEL_12; *(_DWORD *)(v6 + 16) = 0; if ( v11 < 0x10 ) { result = v6; *(_BYTE *)v6 = 0; } else { **(_BYTE **)v6 = 0; result = v6; } return result; } //----- (00401D10) -------------------------------------------------------- _DWORD *__thiscall sub_401D10(int this, void *a2, size_t a3) { void *v3; // edx _DWORD *v4; // esi unsigned int v5; // ecx unsigned int v6; // eax _DWORD *v7; // eax _DWORD *result; // eax size_t v9; // eax size_t v10; // edi unsigned int v11; // ecx _DWORD *v12; // eax bool v13; // cf v3 = a2; v4 = (_DWORD *)this; if ( a2 ) { v5 = *(_DWORD *)(this + 20); v6 = (unsigned int)(v5 < 0x10 ? v4 : *v4); if ( (unsigned int)a2 >= v6 ) { v7 = v5 < 0x10 ? v4 : *v4; if ( (char *)v7 + v4[4] > a2 ) { if ( v5 < 0x10 ) result = (_DWORD *)sub_401C20(v4, (int)v4, (_BYTE *)a2 - (_BYTE *)v4, a3); else result = (_DWORD *)sub_401C20(v4, (int)v4, (int)a2 - *v4, a3); return result; } } } v9 = v4[4]; if ( -1 - v9 <= a3 ) std::_Xlength_error("string too long"); if ( !a3 ) return v4; v10 = v9 + a3; if ( v9 + a3 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v11 = v4[5]; if ( v11 < v10 ) { sub_4015D0((const void **)v4, (void *)(v9 + a3), v9); v3 = a2; if ( v10 ) { LABEL_20: if ( v4[5] < 0x10u ) v12 = v4; else v12 = (_DWORD *)*v4; memcpy((char *)v12 + v4[4], v3, a3); v13 = v4[5] < 0x10u; v4[4] = v10; if ( !v13 ) { *(_BYTE *)(*v4 + v10) = 0; return v4; } *((_BYTE *)v4 + v10) = 0; } return v4; } if ( v10 ) goto LABEL_20; v4[4] = 0; if ( v11 < 0x10 ) { result = v4; *(_BYTE *)v4 = 0; } else { *(_BYTE *)*v4 = 0; result = v4; } return result; } //----- (00401E30) -------------------------------------------------------- _DWORD *__thiscall sub_401E30(void *this, void *a2) { return sub_401D10((int)this, a2, strlen((const char *)a2)); } //----- (00401ED0) -------------------------------------------------------- int __thiscall sub_401ED0(int this, int a2) { _DWORD **v2; // esi int v3; // edi int result; // eax int v5; // [esp+24h] [ebp-8h] v2 = (_DWORD **)this; if ( *(_DWORD *)(this + 344) ) { if ( *(_DWORD *)(this + 348) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(this + 348) + 472))(a2); (*(void (__stdcall **)(int *))(*v2[87] + 492))(&v5); v3 = v5 + 30; (*(void (__stdcall **)(int))(*v2[87] + 152))(v5 + 30); (*(void (__stdcall **)(signed int))(*v2[87] + 488))(5); (*(void (__stdcall **)(int))(*v2[86] + 468))(v3); result = ((int (__thiscall *)(_DWORD **, int, int, _DWORD, _DWORD))(*v2)[59])(v2, xRight, dword_AC2F78, 0.5, 0.28); } } return result; } //----- (00401F90) -------------------------------------------------------- char __thiscall sub_401F90(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v4; // eax int v5; // ST1C_4 _DWORD *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // edi int v9; // ST20_4 int v10; // ST1C_4 int v11; // ST18_4 int v12; // eax volatile LONG *v13; // eax v2 = this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"BoxAnnounceWin", 0) ) return 0; v4 = sub_421050(1); if ( !v4 ) return 0; v5 = 3 * *(_DWORD *)(v4 + 384); v6 = sub_8F62B0(0, 0, 0, 255); v7 = sub_8F3D50((int)v6, 0, 0, 100, v5, (int)v2, 0, 0); v2[86] = v7; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v7 + 240))(v7, 0); (*(void (__stdcall **)(_DWORD))(*v2[86] + 276))(0.5); v8 = v2[86]; v9 = (int)v2[86]; v10 = sub_421050(1); v11 = (*(int (__thiscall **)(volatile LONG *))(*v8 + 148))(v8); v12 = (*(int (__thiscall **)(volatile LONG *))(*v8 + 144))(v8); v13 = sub_8F4A20(0, 0, v12, v11, v10, v9, 0, 0); v2[87] = v13; (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 5); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 60))(v2, 0); return 1; } //----- (004020A0) -------------------------------------------------------- void __thiscall sub_4020A0(int this, int a2) { if ( *(_BYTE *)(this + 352) ) { if ( *(float *)(this + 360) + *(float *)(this + 356) < flt_ACCFCC ) { *(_BYTE *)(this + 352) = 0; sub_8F86A0(&unk_BA6B10, (_DWORD *)this); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004020E0) -------------------------------------------------------- void __thiscall sub_4020E0(int this, float a2) { *(_BYTE *)(this + 352) = 1; *(float *)(this + 356) = flt_ACCFCC; *(float *)(this + 360) = a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00402110) -------------------------------------------------------- int __cdecl sub_402110(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(float *)(v2 + 356) = 0.0; *(_DWORD *)v2 = &BoxAnnounceWin::`vftable'; *(float *)(v2 + 360) = 0.0; *(_DWORD *)(v2 + 232) = &BoxAnnounceWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_BYTE *)(v2 + 352) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A65A8: using guessed type void *BoxAnnounceWin::`vftable'; // 9A65C4: using guessed type void *BoxAnnounceWin::`vftable'; //----- (00402270) -------------------------------------------------------- LONG __thiscall sub_402270(volatile LONG *this) { volatile LONG *v1; // esi LONG result; // eax v1 = this; result = InterlockedDecrement(this + 1); if ( !result ) { if ( v1 ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v1)(v1, 1); } return result; } //----- (004022A0) -------------------------------------------------------- char __thiscall sub_4022A0(void *this, int a2) { int v2; // eax v2 = (*(int (**)(void))(*(_DWORD *)this + 4))(); if ( !v2 ) return 0; while ( v2 != a2 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (004022D0) -------------------------------------------------------- signed int __thiscall sub_4022D0(_WORD *this, char a2) { signed int result; // eax if ( a2 ) { this[14] |= 1u; } else { result = 65534; this[14] &= 0xFFFEu; } return result; } //----- (004022F0) -------------------------------------------------------- int __cdecl sub_4022F0(int a1, int a2, int a3, int a4, float a5, float a6, int a7, int a8) { int result; // eax *(_DWORD *)a7 = (signed int)((double)(unsigned int)(a1 - 1) * a5); *(_DWORD *)a8 = (signed int)((double)(unsigned int)(a2 - 1) * a6); result = a4; *(_DWORD *)a7 -= (unsigned int)a3 >> 1; *(_DWORD *)a8 -= (unsigned int)a4 >> 1; if ( *(_DWORD *)a7 < 0 ) *(_DWORD *)a7 = 0; if ( *(_DWORD *)a8 < 0 ) *(_DWORD *)a8 = 0; if ( a3 + *(_DWORD *)a7 > (unsigned int)a1 ) *(_DWORD *)a7 = a1 - a3; if ( a4 + *(_DWORD *)a8 > (unsigned int)a2 ) *(_DWORD *)a8 = a2 - a4; return result; } //----- (004023A0) -------------------------------------------------------- void *sub_4023A0() { return &unk_BA6A8C; } //----- (004023C0) -------------------------------------------------------- void __thiscall sub_4023C0(void **this, char *Src) { sub_85AB50(this, Src); } //----- (004023D0) -------------------------------------------------------- int __usercall sub_4023D0@(int a1@, double a2@) { int v2; // esi v2 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 288))(); return (signed __int64)(a2 * (double)*(unsigned int *)(v2 + 244)); } //----- (00402420) -------------------------------------------------------- int __usercall sub_402420@(int a1@, double a2@) { int v2; // esi v2 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 288))(); return (signed __int64)(a2 * (double)*(unsigned int *)(v2 + 248)); } //----- (00402470) -------------------------------------------------------- int __thiscall sub_402470(void *this, _DWORD *a2, int *a3) { void *v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*(_DWORD *)this + 144))(); result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); *a3 = result; return result; } //----- (004024A0) -------------------------------------------------------- int __thiscall sub_4024A0(void *this, _DWORD *a2) { void *v2; // esi int result; // eax v2 = this; *a2 = 0; a2[1] = 0; a2[2] = (*(int (**)(void))(*(_DWORD *)this + 144))() - 1; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 148))(v2) - 1; a2[3] = result; return result; } //----- (004024E0) -------------------------------------------------------- int __thiscall sub_4024E0(void *this, _DWORD *a2) { void *v2; // esi int result; // eax v2 = this; *a2 = 0; a2[2] = 0; a2[1] = (*(int (**)(void))(*(_DWORD *)this + 144))() - 1; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 148))(v2) - 1; a2[3] = result; return result; } //----- (00402520) -------------------------------------------------------- int __thiscall sub_402520(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 164))(); } //----- (00402530) -------------------------------------------------------- int __thiscall sub_402530(void *this) { void *v1; // esi int v2; // edi v1 = this; v2 = (*(int (**)(void))(*(_DWORD *)this + 164))() - 1; return v2 + (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 144))(v1); } //----- (00402560) -------------------------------------------------------- int __thiscall sub_402560(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 168))(); } //----- (00402570) -------------------------------------------------------- int __thiscall sub_402570(void *this) { void *v1; // esi int v2; // edi v1 = this; v2 = (*(int (**)(void))(*(_DWORD *)this + 168))() - 1; return v2 + (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 148))(v1); } //----- (004025A0) -------------------------------------------------------- signed int __thiscall sub_4025A0(float *this) { return (signed int)this[22]; } //----- (004025B0) -------------------------------------------------------- signed int __thiscall sub_4025B0(float *this) { return (signed int)this[23]; } //----- (004025C0) -------------------------------------------------------- void __thiscall sub_4025C0(float *this, signed int a2) { this[22] = (double)a2; } //----- (004025D0) -------------------------------------------------------- void __thiscall sub_4025D0(float *this, signed int a2) { this[23] = (double)a2; } //----- (004025E0) -------------------------------------------------------- int __thiscall sub_4025E0(void *this, _DWORD *a2, int *a3) { void *v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*(_DWORD *)this + 164))(); result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 168))(v3); *a3 = result; return result; } //----- (00402610) -------------------------------------------------------- int __thiscall sub_402610(void *this, _DWORD *a2) { void *v2; // esi int result; // eax v2 = this; (*(void (__stdcall **)(_DWORD *, _DWORD *))(*(_DWORD *)this + 212))(a2, a2 + 1); a2[2] = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 144))(v2) + *a2 - 1; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 148))(v2); a2[3] = result + a2[1] - 1; return result; } //----- (00402660) -------------------------------------------------------- _DWORD *__thiscall sub_402660(void *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] (*(void (__stdcall **)(int *, int *))(*(_DWORD *)this + 212))(&v5, &v4); *a2 += v5; result = a3; *result += v4; return result; } //----- (00402690) -------------------------------------------------------- _DWORD *__thiscall sub_402690(void *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] (*(void (__stdcall **)(int *, int *))(*(_DWORD *)this + 212))(&v5, &v4); *a2 -= v5; result = a3; *result -= v4; return result; } //----- (004026C0) -------------------------------------------------------- char __thiscall sub_4026C0(_BYTE *this, char a2) { char result; // al result = a2; this[252] = a2; return result; } //----- (004026D0) -------------------------------------------------------- char __thiscall sub_4026D0(_BYTE *this) { return this[252]; } //----- (004026E0) -------------------------------------------------------- signed int __thiscall sub_4026E0(_WORD *this, char a2) { signed int result; // eax if ( a2 ) { result = 65534; this[14] &= 0xFFFEu; } else { this[14] |= 1u; } return result; } //----- (00402700) -------------------------------------------------------- int __thiscall sub_402700(_BYTE *this) { return ~this[28] & 1; } //----- (00402710) -------------------------------------------------------- void __thiscall sub_402710(int this, float a2) { double v2; // st6 v2 = a2; if ( a2 < 0.0 ) v2 = (float)0.0; if ( v2 != *(float *)(this + 100) ) { *(float *)(this + 100) = v2; sub_85BED0((_DWORD **)this, 0.0, 0); } } //----- (00402760) -------------------------------------------------------- double __thiscall sub_402760(float *this) { return this[25]; } //----- (00402770) -------------------------------------------------------- int __thiscall sub_402770(float *this, float a2) { float *v2; // esi v2 = this; sub_85D810(this + 13, a2); return sub_85BED0((_DWORD **)v2, 0.0, 0); } //----- (004027A0) -------------------------------------------------------- void __thiscall sub_4027A0(int this, const void *a2) { qmemcpy((void *)(this + 52), a2, 0x24u); } //----- (004027C0) -------------------------------------------------------- int __thiscall sub_4027C0(_DWORD *this, int a2) { int result; // eax result = a2; this[64] = a2; return result; } //----- (004027E0) -------------------------------------------------------- int __thiscall sub_4027E0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi v3 = this; ((void (__thiscall *)(_DWORD **, int))(*this)[43])(this, a2); ((void (__thiscall *)(_DWORD **, int))(*v3)[44])(v3, a3); return sub_85BED0(v3, 0.0, 0); } //----- (00402820) -------------------------------------------------------- int __thiscall sub_402820(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 348))(); } //----- (00402830) -------------------------------------------------------- bool __thiscall sub_402830(void *this, int a2, int a3) { void *v3; // esi int v4; // eax int v5; // eax bool result; // al v3 = this; (*(void (__thiscall **)(void *, int *, int *))(*(_DWORD *)this + 224))(this, &a2, &a3); result = 0; if ( a2 >= 0 ) { v4 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3); if ( a2 < v4 && a3 >= 0 ) { v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); if ( a3 < v5 ) result = 1; } } return result; } //----- (00402890) -------------------------------------------------------- char __thiscall sub_402890(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5) { void *v5; // esi int v6; // eax int v7; // eax int v8; // eax int v9; // eax v5 = this; (*(void (__thiscall **)(void *, int *, int *))(*(_DWORD *)this + 224))(this, &a2, &a3); if ( a2 < 0 ) return 0; v6 = (*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 144))(v5); if ( a2 >= v6 ) return 0; if ( a3 < 0 ) return 0; v7 = (*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 148))(v5); if ( a3 >= v7 ) return 0; v8 = (*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 164))(v5); *a4 = a2 - v8; v9 = (*(int (__thiscall **)(void *))(*(_DWORD *)v5 + 168))(v5); *a5 = a3 - v9; return 1; } //----- (00402920) -------------------------------------------------------- char __thiscall sub_402920(void *this, int a2, int a3, int a4) { void *v4; // esi char result; // al v4 = this; if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, int))(*(_DWORD *)this + 408))(this, a2, a3, a4) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)a2 + 8) + 416))(a2); result = 1; } else if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, int))(*(_DWORD *)v4 + 412))(v4, a2, a3, a4) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)a2 + 8) + 420))(a2); result = 1; } else { result = 0; } return result; } //----- (004029A0) -------------------------------------------------------- char __thiscall sub_4029A0(_BYTE *this) { return this[268]; } //----- (004029B0) -------------------------------------------------------- char __thiscall sub_4029B0(_BYTE *this, char a2) { char result; // al result = a2; this[268] = a2; return result; } //----- (004029C0) -------------------------------------------------------- bool __thiscall sub_4029C0(_DWORD *this, signed int a2, signed int a3) { unsigned int v3; // esi signed int v4; // ebx signed int v5; // eax int v6; // edi bool result; // al v3 = this[5]; v4 = (signed int)((double)(unsigned int)this[5] / (double)(unsigned int)this[7] * (double)a2); v5 = (signed int)((double)(unsigned int)this[6] / (double)(unsigned int)this[8] * (double)a3); if ( v4 < 0 || v5 < 0 || v4 >= v3 || (unsigned int)v5 >= this[6] ) return 0; v6 = this[2]; if ( v6 ) result = *(_BYTE *)(v6 + v5 * v3 + v4) != 0; else result = 1; return result; } //----- (00402A70) -------------------------------------------------------- int __thiscall sub_402A70(_DWORD *this) { return this[73]; } //----- (00402A80) -------------------------------------------------------- char __thiscall sub_402A80(_BYTE *this, char a2) { char result; // al result = a2; this[308] = a2; return result; } //----- (00402A90) -------------------------------------------------------- char __thiscall sub_402A90(_BYTE *this) { return this[308]; } //----- (00402AA0) -------------------------------------------------------- _DWORD *__thiscall sub_402AA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // eax v2 = this; v3 = this[2]; v4 = *(_DWORD **)(v3 + 4); this[2] = v4; if ( v4 ) *v4 = 0; else this[1] = 0; v5 = *(_DWORD *)(v3 + 8); *a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 8))(v2, v3); --v2[3]; return a2; } //----- (00402B30) -------------------------------------------------------- void *__thiscall sub_402B30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &BoxAnnounceWin::`vftable'; *((_DWORD *)this + 58) = &BoxAnnounceWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A65A8: using guessed type void *BoxAnnounceWin::`vftable'; // 9A65C4: using guessed type void *BoxAnnounceWin::`vftable'; //----- (00402B70) -------------------------------------------------------- char __cdecl sub_402B70(int a1, int a2) { int v2; // eax if ( !a2 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v2 ) return 0; while ( v2 != a1 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00402BA0) -------------------------------------------------------- int __cdecl sub_402BA0(int a1, int a2) { int v3; // eax if ( !a2 ) return 0; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( !v3 ) return 0; while ( v3 != a1 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return a2; } //----- (00402BF0) -------------------------------------------------------- int __thiscall sub_402BF0(_DWORD *this) { int v1; // esi int v3; // eax v1 = this[8]; if ( !v1 ) return 0; v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v1 + 4))(this[8]); if ( !v3 ) return 0; while ( (_UNKNOWN *)v3 != &unk_BA6A8C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return v1; } //----- (00402C40) -------------------------------------------------------- int __thiscall sub_402C40(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax v2 = this; if ( *a2 >= this[47] ) return 0; while ( 1 ) { v3 = *(_DWORD *)(v2[45] + 4 * *a2); if ( v3 ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3); if ( v4 ) break; } LABEL_6: if ( ++*a2 >= v2[47] ) return 0; } while ( (_UNKNOWN *)v4 != &unk_BA6A8C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_6; } ++*a2; return v3; } //----- (00402CA0) -------------------------------------------------------- int __thiscall sub_402CA0(_DWORD *this, int *a2) { _DWORD *v2; // esi void (__stdcall *v3)(int *); // edx int *v4; // edi int result; // eax int i; // esi int v7; // ebx int v8; // eax int v9; // ecx int v10; // esi int v11; // eax int v12; // edx int v13; // eax int v14; // eax int v15; // ecx int v16; // eax _DWORD *v17; // ecx int v18; // [esp+Ch] [ebp-14h] int v19; // [esp+10h] [ebp-10h] int v20; // [esp+14h] [ebp-Ch] int v21; // [esp+18h] [ebp-8h] _DWORD *v22; // [esp+1Ch] [ebp-4h] v2 = this; v3 = *(void (__stdcall **)(int *))(*this + 184); v4 = a2; v22 = this; v3(a2); a2 = 0; result = sub_402C40(v2, &a2); for ( i = result; result; i = result ) { v18 = 0; v19 = 0; v20 = 0; v21 = 0; (*(void (__thiscall **)(int, int *))(*(_DWORD *)i + 208))(i, &v18); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)i + 168))(i); v8 = (*(int (__thiscall **)(int))(*(_DWORD *)i + 164))(i); v21 += v7; v9 = v8 + v18; v10 = v8 + v19; v11 = *v4; v12 = v7 + v20; v18 = v9; v19 = v10; v20 += v7; if ( v11 > v9 ) v11 = v9; *v4 = v11; v13 = v4[2]; if ( v13 > v12 ) v13 = v12; v4[2] = v13; v14 = v4[1]; if ( v14 < v10 ) v14 = v10; v15 = v21; v4[1] = v14; v16 = v4[3]; if ( v16 < v15 ) v16 = v15; v17 = v22; v4[3] = v16; result = sub_402C40(v17, &a2); } return result; } //----- (00402D80) -------------------------------------------------------- int __thiscall sub_402D80(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // esi int v5; // esi _DWORD *v6; // eax int v7; // eax char v8; // al int result; // eax int v10; // [esp+4h] [ebp-10h] int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v3 = this; (*(void (__thiscall **)(_DWORD *, int *, int *))(*this + 180))(this, &v13, &v12); v4 = (_DWORD *)sub_402BF0(v3); if ( v4 ) { do { (*(void (__thiscall **)(_DWORD *, int *, int *))(*v4 + 180))(v4, &v11, &v10); v13 += v11; v12 += v10; v5 = v4[8]; if ( v5 ) { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5); if ( v7 ) { while ( (_UNKNOWN *)v7 != &unk_BA6A8C ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_7; } v8 = 1; } else { LABEL_7: v8 = 0; } v6 = (_DWORD *)(v8 != 0 ? v5 : 0); } else { v6 = 0; } v4 = v6; } while ( v6 ); result = (int)a3; *a2 = v13; *a3 = v12; } else { result = v13; *a2 = v13; *a3 = v12; } return result; } //----- (00402E40) -------------------------------------------------------- int __thiscall sub_402E40(void *this, int a2, int a3, int a4, int a5) { void *v5; // esi int v7; // [esp+18h] [ebp-10h] int v8; // [esp+1Ch] [ebp-Ch] int v9; // [esp+20h] [ebp-8h] int v10; // [esp+24h] [ebp-4h] v5 = this; v7 = 0; v8 = 0; v9 = 0; v10 = 0; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 208))(this, &v7); sub_4022F0(a2, a3, v8 - v7 + 1, v10 - v9 + 1, *(float *)&a4, *(float *)&a5, (int)&a4, (int)&a5); return (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v5 + 308))(v5, a4, a5); } //----- (00402EC0) -------------------------------------------------------- int __thiscall sub_402EC0(void *this, int a2, int a3, int a4, int a5) { void *v5; // esi int v7; // [esp+18h] [ebp-10h] int v8; // [esp+1Ch] [ebp-Ch] int v9; // [esp+20h] [ebp-8h] int v10; // [esp+24h] [ebp-4h] v5 = this; v7 = 0; v8 = 0; v9 = 0; v10 = 0; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 208))(this, &v7); sub_4022F0(a2, a3, v8 - v7 + 1, v10 - v9 + 1, 0.0, *(float *)&a5, (int)&a3, (int)&a5); return (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v5 + 308))(v5, a4, a5); } //----- (00402F40) -------------------------------------------------------- int __thiscall sub_402F40(void *this, int a2, int a3, int a4, int a5) { void *v5; // esi int v7; // [esp+18h] [ebp-10h] int v8; // [esp+1Ch] [ebp-Ch] int v9; // [esp+20h] [ebp-8h] int v10; // [esp+24h] [ebp-4h] v5 = this; v7 = 0; v8 = 0; v9 = 0; v10 = 0; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 208))(this, &v7); sub_4022F0(a2, a3, v8 - v7 + 1, v10 - v9 + 1, *(float *)&a4, 0.0, (int)&a4, (int)&a3); return (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v5 + 308))(v5, a4, a5); } //----- (00402FC0) -------------------------------------------------------- int __thiscall sub_402FC0(_DWORD *this, int a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi unsigned int i; // edi unsigned int v6; // [esp+8h] [ebp-4h] v2 = this; v6 = 0; result = sub_402C40(this, &v6); v4 = result; if ( result ) { for ( i = v6; ; ++i ) { (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 240))(v4, a2); result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 248))(v4, a2); if ( i >= v2[47] ) break; while ( 1 ) { result = v2[45]; v4 = *(_DWORD *)(result + 4 * i); if ( v4 ) { result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4); if ( result ) break; } LABEL_8: if ( ++i >= v2[47] ) return result; } while ( (_UNKNOWN *)result != &unk_BA6A8C ) { result = *(_DWORD *)(result + 4); if ( !result ) goto LABEL_8; } } } return result; } //----- (00403060) -------------------------------------------------------- bool __thiscall sub_403060(_DWORD *this) { _DWORD *v1; // esi v1 = this; return (*(unsigned __int8 (**)(void))(*this + 244))() && sub_8F3540(v1) && (!dword_BA6A7C || (_DWORD *)dword_BA6A7C == v1); } // BA6A7C: using guessed type int dword_BA6A7C; //----- (004030A0) -------------------------------------------------------- bool __userpurge sub_4030A0@(_DWORD *a1@, double a2@, signed int a3, signed int a4) { _DWORD *v4; // esi void (__stdcall *v5)(int *, char *); // edx int v6; // eax int v7; // eax bool result; // al void (__thiscall *v9)(_DWORD *); // eax int v10; // edi signed int v11; // ebx void (__thiscall *v12)(_DWORD *); // eax _DWORD *v13; // ecx double v14; // [esp+4h] [ebp-Ch] int v15; // [esp+Ch] [ebp-4h] v4 = a1; if ( !a1[72] ) { v5 = *(void (__stdcall **)(int *, char *))(*a1 + 224); HIDWORD(v14) = a4; v15 = a3; v5(&v15, (char *)&v14 + 4); if ( v15 >= 0 ) { v6 = (*(int (__thiscall **)(_DWORD *))(*v4 + 144))(v4); if ( v15 < v6 && v14 >= 0.0 ) { v7 = (*(int (__thiscall **)(_DWORD *))(*v4 + 148))(v4); if ( SHIDWORD(v14) < v7 ) return 1; } } return 0; } (*(void (**)(void))(*a1 + 288))(); if ( a2 <= 0.0 ) return 0; (*(void (__thiscall **)(_DWORD *, signed int *, signed int *))(*v4 + 224))(v4, &a3, &a4); v9 = *(void (__thiscall **)(_DWORD *))(*v4 + 288); v10 = v4[72]; v14 = (double)a4; v9(v4); v11 = (signed int)(v14 / v14); v12 = *(void (__thiscall **)(_DWORD *))(*v4 + 288); v14 = (double)a3; v12(v4); v13 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v10 + 8) + 36) + 4 * v4[73]); if ( v13 ) result = sub_4029C0(v13, (signed int)(v14 / v14), v11); else result = 0; return result; } //----- (004031B0) -------------------------------------------------------- char __userpurge sub_4031B0@(_DWORD *a1@, double a2@, int a3, int a4, _DWORD *a5, _DWORD *a6) { _DWORD *v6; // esi double v8; // st7 int v9; // edi signed int v10; // eax double v11; // st7 signed int v12; // ebx double v13; // st7 _DWORD *v14; // ecx int v15; // eax int v16; // eax v6 = a1; if ( !a1[72] ) return sub_402890(a1, a3, a4, a5, a6); (*(void (**)(void))(*a1 + 288))(); if ( a2 <= 0.0 ) return 0; (*(void (__thiscall **)(_DWORD *, int *, int *))(*v6 + 224))(v6, &a3, &a4); v8 = (double)a4; v9 = v6[72]; (*(void (__thiscall **)(_DWORD *))(*v6 + 288))(v6); v10 = (signed int)(v8 / v8); v11 = (double)a3; v12 = v10; (*(void (__thiscall **)(_DWORD *))(*v6 + 288))(v6); v13 = v11 / v11; v14 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v9 + 8) + 36) + 4 * v6[73]); if ( !v14 || !sub_4029C0(v14, (signed int)v13, v12) ) return 0; v15 = (*(int (__thiscall **)(_DWORD *))(*v6 + 164))(v6); *a5 = a3 + v15; v16 = (*(int (__thiscall **)(_DWORD *))(*v6 + 168))(v6); *a6 = a4 + v16; return 1; } //----- (004032B0) -------------------------------------------------------- int __usercall sub_4032B0@(int a1@, double a2@) { unsigned int *v2; // esi int v3; // ecx unsigned int v4; // eax v2 = (unsigned int *)a1; v3 = *(_DWORD *)(a1 + 292); if ( v3 != -1 ) { v4 = v2[72]; if ( v4 ) return sub_8FBAD0(*(_DWORD **)(v4 + 8), v3); } (*(void (__thiscall **)(unsigned int *))(*v2 + 288))(v2); return (signed __int64)(a2 * (double)v2[61]); } //----- (00403330) -------------------------------------------------------- int __usercall sub_403330@(int a1@, double a2@) { unsigned int *v2; // esi int v3; // ecx unsigned int v4; // eax v2 = (unsigned int *)a1; v3 = *(_DWORD *)(a1 + 292); if ( v3 != -1 ) { v4 = v2[72]; if ( v4 ) return sub_8FBB30(*(_DWORD **)(v4 + 8), v3); } (*(void (__thiscall **)(unsigned int *))(*v2 + 288))(v2); return (signed __int64)(a2 * (double)v2[62]); } //----- (004033C0) -------------------------------------------------------- int __thiscall sub_4033C0(_DWORD *this, int a2) { int result; // eax result = a2; this[62] = a2; return result; } //----- (004033D0) -------------------------------------------------------- int __thiscall sub_4033D0(_DWORD *this) { int v1; // edx int v2; // eax int result; // eax v1 = this[73]; if ( v1 != -1 && (v2 = this[72]) != 0 ) result = sub_8FBAD0(*(_DWORD **)(v2 + 8), v1); else result = (*(int (**)(void))(*this + 144))(); return result; } //----- (00403400) -------------------------------------------------------- int __thiscall sub_403400(_DWORD *this) { int v1; // edx int v2; // eax int result; // eax v1 = this[73]; if ( v1 != -1 && (v2 = this[72]) != 0 ) result = sub_8FBB30(*(_DWORD **)(v2 + 8), v1); else result = (*(int (**)(void))(*this + 148))(); return result; } //----- (00403430) -------------------------------------------------------- void __thiscall sub_403430(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax v2 = this; v3 = this[73]; if ( v3 != -1 ) { v4 = v2[72]; if ( v4 ) { sub_8FBD30(*(_DWORD **)(v4 + 8), v3, a2); sub_85BED0((_DWORD **)v2, 0.0, 0); } } } //----- (00403470) -------------------------------------------------------- void __thiscall sub_403470(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax v2 = this; v3 = this[73]; if ( v3 != -1 ) { v4 = v2[72]; if ( v4 ) { sub_8FBEF0(*(_DWORD **)(v4 + 8), v3, a2); sub_85BED0((_DWORD **)v2, 0.0, 0); } } } //----- (004034B0) -------------------------------------------------------- void __thiscall sub_4034B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = this[73]; if ( v2 != -1 ) { v3 = v1[72]; if ( v3 ) { sub_8FBF10(*(_DWORD **)(v3 + 8), v2); sub_85BED0((_DWORD **)v1, 0.0, 0); } } } //----- (004034F0) -------------------------------------------------------- void __thiscall sub_4034F0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = this[73]; if ( v2 != -1 ) { v3 = v1[72]; if ( v3 ) { sub_8FBF50(*(_DWORD **)(v3 + 8), v2); sub_85BED0((_DWORD **)v1, 0.0, 0); } } } //----- (00403530) -------------------------------------------------------- void __thiscall sub_403530(_DWORD *this, unsigned int a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // eax v3 = this; v4 = this[73]; if ( v4 != -1 ) { v5 = v3[72]; if ( v5 ) { sub_8FBF90(*(_DWORD **)(v5 + 8), v4, a2, a3); sub_85BED0((_DWORD **)v3, 0.0, 0); } } } //----- (00403570) -------------------------------------------------------- void __thiscall sub_403570(_DWORD *this, unsigned int a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // eax v3 = this; v4 = this[73]; if ( v4 != -1 ) { v5 = v3[72]; if ( v5 ) { sub_8FC170(*(_DWORD **)(v5 + 8), v4, a2, a3); sub_85BED0((_DWORD **)v3, 0.0, 0); } } } //----- (004035B0) -------------------------------------------------------- LONG __thiscall sub_4035B0(_DWORD *this, int a2) { void *v2; // ecx LONG result; // eax v2 = (void *)this[72]; if ( v2 ) result = sub_8FCC40(v2, a2); return result; } //----- (004035D0) -------------------------------------------------------- int __thiscall sub_4035D0(_DWORD *this) { _DWORD *v1; // ecx int result; // eax v1 = (_DWORD *)this[72]; if ( v1 ) result = sub_8FCD30(v1); else result = 0; return result; } //----- (004035F0) -------------------------------------------------------- _DWORD *__thiscall sub_4035F0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // edx _DWORD *v4; // ecx _DWORD *result; // eax v3 = a3; if ( !a3 ) { v3 = (_DWORD *)this[1]; if ( !v3 ) return 0; } while ( 1 ) { v4 = v3 + 2; result = v3; v3 = (_DWORD *)*v3; if ( *a2 == *v4 ) break; if ( !v3 ) return 0; } return result; } //----- (00403620) -------------------------------------------------------- int __thiscall sub_403620(_DWORD *this, _DWORD **a2) { _DWORD *v2; // esi _DWORD *v3; // eax int *v4; // ecx int v5; // eax int v6; // edi int result; // eax void (__thiscall *v8)(_DWORD *, int *); // eax int v9; // ecx _DWORD *v10; // eax int v11; // edi void (__thiscall *v12)(_DWORD *, int); // eax _DWORD *v13; // edi _DWORD *v14; // edx int v15; // edi v2 = this; v3 = *a2; if ( *a2 == (_DWORD *)this[1] ) { *a2 = (_DWORD *)*v3; v4 = (int *)this[1]; v5 = *v4; v2[1] = *v4; if ( v5 ) { *(_DWORD *)(v5 + 4) = 0; v6 = v4[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 8))(v2, v4); } else { v8 = *(void (__thiscall **)(_DWORD *, int *))(*v2 + 8); v2[2] = 0; v6 = v4[2]; v8(v2, v4); } --v2[3]; result = v6; } else if ( v3 == (_DWORD *)this[2] ) { *a2 = 0; v9 = this[2]; v10 = *(_DWORD **)(v9 + 4); v2[2] = v10; if ( v10 ) { *v10 = 0; v11 = *(_DWORD *)(v9 + 8); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 8))(v2, v9); } else { v12 = *(void (__thiscall **)(_DWORD *, int))(*v2 + 8); v2[1] = 0; v11 = *(_DWORD *)(v9 + 8); v12(v2, v9); } --v2[3]; result = v11; } else { v13 = (_DWORD *)v3[1]; v14 = (_DWORD *)*v3; *a2 = (_DWORD *)*v3; if ( v13 ) *v13 = v14; if ( v14 ) v14[1] = v13; v15 = v3[2]; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*this + 8))(this, v3); --v2[3]; result = v15; } return result; } //----- (00403700) -------------------------------------------------------- int __thiscall sub_403700(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi int result; // eax v2 = this; v3 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = sub_8A6330(v2 + 39, &a2); if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } return result; } //----- (00403790) -------------------------------------------------------- char __thiscall sub_403790(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = a2; if ( !a2 ) return 0; InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_8B8EC0(v2 + 9, &a2); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return 1; } //----- (00403830) -------------------------------------------------------- void __thiscall sub_403830(_DWORD *this, float a2) { _DWORD *v2; // esi float *v3; // ebx float *v4; // eax int v5; // edi int v6; // eax double v7; // st7 int v8; // esi v2 = this; v3 = 0; if ( !this[66] ) { v4 = (float *)operator new(0x60u); if ( v4 ) v3 = sub_85EBC0(v4); v5 = v2[66]; if ( (float *)v5 != v3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v2[66] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); } v6 = v2[66]; ++*(_DWORD *)(v6 + 88); *(float *)(v6 + 68) = 1.0; *(float *)(v6 + 72) = 1.0; *(float *)(v6 + 76) = 1.0; sub_403700(v2, v2[66]); sub_85C4D0(v2); } v7 = 1.0; if ( a2 >= 1.0 || (v7 = 0.0, a2 < 0.0) ) a2 = v7; v8 = v2[66]; ++*(_DWORD *)(v8 + 88); *(float *)(v8 + 84) = a2; } //----- (00403950) -------------------------------------------------------- double __thiscall sub_403950(_DWORD *this) { _DWORD *v1; // esi float *v2; // ebx float *v3; // eax int v4; // edi int v5; // eax int v6; // eax v1 = this; v2 = 0; if ( this[66] ) return *(float *)(this[66] + 84); v3 = (float *)operator new(0x60u); if ( v3 ) v2 = sub_85EBC0(v3); v4 = v1[66]; if ( (float *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[66] = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)v2 + 1); } v5 = v1[66]; *(float *)(v5 + 68) = 1.0; *(float *)(v5 + 72) = 1.0; *(float *)(v5 + 76) = 1.0; ++*(_DWORD *)(v5 + 88); v6 = v1[66]; ++*(_DWORD *)(v6 + 88); *(float *)(v6 + 84) = 1.0; sub_403700(v1, v1[66]); sub_85C4D0(v1); return *(float *)(v1[66] + 84); } //----- (00403A70) -------------------------------------------------------- _DWORD *__thiscall sub_403A70(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ebx _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi v3 = this; v4 = (_DWORD *)this[14]; v5 = a3; v6 = this + 13; if ( v4 ) { while ( 1 ) { v7 = v4 + 2; v8 = v4; v4 = (_DWORD *)*v4; if ( a3 == (_DWORD *)*v7 ) break; if ( !v4 ) goto LABEL_4; } } else { LABEL_4: v8 = 0; } a3 = v8; if ( v8 ) sub_403620(v6, &a3); *((_BYTE *)v3 + 149) = 0; a3 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); sub_6BB9F0(v3 + 9, a2, &a3); if ( v5 && !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); return a2; } //----- (00403B40) -------------------------------------------------------- int __thiscall sub_403B40(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int result; // eax this[17] = a2; this[18] = a3; this[19] = a4; this[20] = a5; this[21] = a6; this[23] = a8; result = a10; this[22] = a7; this[24] = a9; this[25] = a10; return result; } //----- (00403B80) -------------------------------------------------------- void __thiscall sub_403B80(float *this, float a2, float a3) { this[3] = a2; this[2] = a3; } //----- (00403BA0) -------------------------------------------------------- double __thiscall sub_403BA0(float *this) { return this[1]; } //----- (00403BB0) -------------------------------------------------------- int __thiscall sub_403BB0(_DWORD *this, _DWORD *a2) { int result; // eax this[10] = *a2; this[11] = a2[1]; result = a2[2]; this[12] = result; return result; } //----- (00403BF0) -------------------------------------------------------- void __thiscall sub_403BF0(float *this, float a2) { this[26] = a2; } //----- (00403C00) -------------------------------------------------------- void __thiscall sub_403C00(float *this, float a2) { this[3] = a2; } //----- (00403C10) -------------------------------------------------------- void __thiscall sub_403C10(float *this, float a2) { this[2] = a2; } //----- (00403C20) -------------------------------------------------------- void __thiscall sub_403C20(float *this, float a2) { this[4] = a2; this[1] = a2; this[28] = a2; } //----- (00403C40) -------------------------------------------------------- void __thiscall sub_403C40(float *this, float a2) { double v2; // st7 float v3; // ST00_4 float v4; // [esp+Ch] [ebp+8h] float v5; // [esp+Ch] [ebp+8h] float v6; // [esp+Ch] [ebp+8h] v2 = a2; if ( 3.4028235e38 != this[27] ) { v4 = v2 - this[27]; v5 = v4 * 10.0; if ( v5 > 1.0 ) v5 = 1.0; v3 = this[28] - this[1]; v6 = v3 * (v5 * 0.800000011920929); this[1] = v6 + this[1]; } this[27] = v2; } //----- (00403CB0) -------------------------------------------------------- void __thiscall sub_403CB0(float *this, float a2, float a3) { double v3; // st7 v3 = 0.0; if ( 0.0 != a2 ) v3 = a3; this[5] = v3; } //----- (00403D20) -------------------------------------------------------- void __thiscall sub_403D20(int this, float a2) { double v2; // st7 double v3; // st7 float v4; // [esp+10h] [ebp+8h] float v5; // [esp+10h] [ebp+8h] v2 = a2; if ( *(float *)(this + 12) <= (double)a2 ) { if ( *(float *)(this + 8) >= v2 ) goto LABEL_6; v3 = *(float *)(this + 8); } else { v3 = *(float *)(this + 12); } v4 = v3; v2 = v4; LABEL_6: *(float *)(this + 4) = v2; *(float *)(this + 112) = v2; if ( v2 <= 360.0 ) { *(_DWORD *)(this + 120) = 8; } else { v5 = v2 - 360.0; *(_DWORD *)(this + 120) = (unsigned __int64)(signed __int64)(v5 / 35.0) + 8; } } //----- (00403DB0) -------------------------------------------------------- void __thiscall sub_403DB0(int this, int a2) { double v2; // st7 float v3; // [esp+10h] [ebp+8h] float v4; // [esp+10h] [ebp+8h] float v5; // [esp+10h] [ebp+8h] v3 = *(float *)(this + 4) * (double)-a2 * *(float *)(this + 104); v4 = v3 + *(float *)(this + 112); *(float *)(this + 112) = v4; if ( *(float *)(this + 12) <= (double)v4 ) { if ( *(float *)(this + 8) >= (double)v4 ) goto LABEL_6; v2 = *(float *)(this + 8); } else { v2 = *(float *)(this + 12); } *(float *)(this + 112) = v2; LABEL_6: if ( *(float *)(this + 112) <= 360.0 ) { *(_DWORD *)(this + 120) = 8; } else { v5 = *(float *)(this + 112) - 360.0; *(_DWORD *)(this + 120) = (unsigned __int64)(signed __int64)(v5 / 35.0) + 8; } } //----- (00403E60) -------------------------------------------------------- void __thiscall sub_403E60(int this, signed int a2, signed int a3) { if ( *(_DWORD *)(this + 32) ) { *(float *)(this + 20) = 0.0; *(float *)(this + 24) = 0.0; } else { *(float *)(this + 20) = (double)a2 * 0.699999988079071 * 0.5; *(float *)(this + 24) = 0.5 * (0.699999988079071 * (double)a3); } } //----- (00403EA0) -------------------------------------------------------- void __thiscall sub_403EA0(int this, float a2, float a3) { if ( *(_DWORD *)(this + 32) ) { *(float *)(this + 20) = 0.0; *(float *)(this + 24) = 0.0; } else { *(float *)(this + 20) = a2; *(float *)(this + 24) = a3; } } //----- (00403ED0) -------------------------------------------------------- float *__thiscall sub_403ED0(float *this) { float *v1; // esi _DWORD *v2; // eax float v3; // ecx float v4; // edx float v5; // eax float v6; // edx _DWORD **v7; // ecx _DWORD *v8; // eax _DWORD *v9; // edi float v11; // [esp+8h] [ebp-10h] float v12; // [esp+Ch] [ebp-Ch] float v13; // [esp+10h] [ebp-8h] char *v14; // [esp+14h] [ebp-4h] v1 = this; *(_DWORD *)this = &CameraCtrl::`vftable'; this[8] = 0.0; v2 = operator new(0xCu); if ( !v2 ) { v14 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v14); v11 = COERCE_FLOAT(&std::bad_alloc::`vftable'); _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 7) = v2; *v2 = v2; *(float *)(*((_DWORD *)v1 + 7) + 4) = v1[7]; v1[1] = 100.0; v1[4] = 100.0; v1[2] = 9000.0; v1[3] = 40.0; v1[28] = 100.0; v1[5] = 0.0; v1[6] = 0.0; v12 = 1.0; v1[10] = 0.0; v3 = v12; v13 = 0.0; v1[13] = 0.0; v1[11] = v3; v4 = v13; v1[14] = 271.0; v1[12] = v4; v1[15] = 89.0; v1[16] = 0.0; v1[17] = 0.0; v1[18] = 1.0; v1[19] = 0.0; v11 = 0.0; v1[20] = 1.0; v13 = 0.0; v5 = v11; v1[21] = 0.0; v12 = 1.0; v1[22] = 0.0; v1[26] = 0.001; v6 = v13; v1[23] = v5; v1[24] = 1.0; v1[25] = v6; v7 = (_DWORD **)*((_DWORD *)v1 + 7); v8 = *v7; *v7 = v7; *(float *)(*((_DWORD *)v1 + 7) + 4) = v1[7]; v1[8] = 0.0; if ( v8 != *((_DWORD **)v1 + 7) ) { do { v9 = (_DWORD *)*v8; operator delete(v8); v8 = v9; } while ( v9 != *((_DWORD **)v1 + 7) ); } *((_DWORD *)v1 + 30) = 8; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A6860: using guessed type void *CameraCtrl::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00404020) -------------------------------------------------------- void __thiscall sub_404020(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi _DWORD **v5; // ecx _DWORD *v6; // eax _DWORD *v7; // edi v1 = this; *this = &CameraCtrl::`vftable'; v2 = (_DWORD **)this[7]; v3 = *v2; *v2 = v2; *(_DWORD *)(v1[7] + 4) = v1[7]; v1[8] = 0; if ( v3 != (_DWORD *)v1[7] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != (_DWORD *)v1[7] ); } v5 = (_DWORD **)v1[7]; v6 = *v5; *v5 = v5; *(_DWORD *)(v1[7] + 4) = v1[7]; v1[8] = 0; if ( v6 != (_DWORD *)v1[7] ) { do { v7 = (_DWORD *)*v6; operator delete(v6); v6 = v7; } while ( v7 != (_DWORD *)v1[7] ); } operator delete((void *)v1[7]); } // 9A6860: using guessed type void *CameraCtrl::`vftable'; //----- (004040A0) -------------------------------------------------------- float *__thiscall sub_4040A0(float *this, float *a2) { int v2; // edx float *v3; // ebx float v4; // ST20_4 int v5; // ecx double v6; // st5 double v7; // st7 double v8; // st5 float v9; // ST24_4 float v10; // ST28_4 float v11; // ST2C_4 float v12; // ST24_4 float v13; // ST28_4 float v14; // ST2C_4 int *v15; // eax double v16; // st7 bool v17; // zf int v18; // ecx _DWORD **v19; // eax double v20; // st5 double v21; // st7 double v22; // st5 float v23; // ST0C_4 float v24; // ST08_4 float v25; // ST04_4 int *v26; // eax double v27; // st7 float v28; // eax double v29; // st7 float *result; // eax float v31; // edx double v32; // st7 double v33; // st7 float v34; // [esp+30h] [ebp-44h] float v35; // [esp+34h] [ebp-40h] float v36; // [esp+38h] [ebp-3Ch] float v37; // [esp+3Ch] [ebp-38h] float v38; // [esp+40h] [ebp-34h] float v39; // [esp+44h] [ebp-30h] float v40; // [esp+48h] [ebp-2Ch] char v41; // [esp+4Ch] [ebp-28h] v2 = dword_BA45C4; v3 = this; v40 = this[13]; v4 = v40 + this[6]; qmemcpy(&v41, &unk_ABD440, 0x24u); v5 = dword_BA45C0; v39 = *(float *)&dword_BA45C8; v3[13] = v4; v37 = *(float *)&v5; v38 = *(float *)&v2; if ( v4 < 360.0 ) { v7 = 360.0; } else { v6 = v3[13]; do v6 = v6 - 360.0; while ( v6 >= 360.0 ); v7 = 360.0; v3[13] = v6; } if ( v3[13] < 0.0 ) { v8 = v3[13]; do v8 = v8 + v7; while ( v8 < 0.0 ); v3[13] = v8; } if ( v3[13] > (double)v3[15] && v3[14] > (double)v3[13] ) v3[13] = v40; v9 = -v3[20]; v10 = -v3[21]; v11 = -v3[22]; v40 = v3[13] * 3.140000104904175 / 180.0; sub_85D860((float *)&v41, v40, v9, v10, v11); v12 = -v3[23]; v13 = -v3[24]; v14 = -v3[25]; v40 = v3[1]; v34 = v12 * v40; v37 = v34; v35 = v13 * v40; v38 = v35; v36 = v40 * v14; v39 = v36; v15 = (int *)sub_85DAF0(&v34, &v37, (float *)&v41); v16 = v3[16]; v37 = *(float *)v15; v38 = *((float *)v15 + 1); v17 = *((_DWORD *)v3 + 8) == 0; v39 = *((float *)v15 + 2); if ( v17 ) { v3[16] = v16 - v3[5]; } else { v18 = *((_DWORD *)v3 + 7); v3[16] = v16 - *(float *)(*(_DWORD *)v18 + 8); v19 = *(_DWORD ***)v18; if ( *(_DWORD *)v18 != v18 ) { *v19[1] = *v19; (*v19)[1] = v19[1]; operator delete(v19); --*((_DWORD *)v3 + 8); } } if ( v3[16] < 360.0 ) { v21 = 360.0; } else { v20 = v3[16]; do v20 = v20 - 360.0; while ( v20 >= 360.0 ); v21 = 360.0; v3[16] = v20; } if ( v3[16] < 0.0 ) { v22 = v3[16]; do v22 = v22 + v21; while ( v22 < 0.0 ); v3[16] = v22; } v23 = v3[19]; v24 = v3[18]; v25 = v3[17]; v40 = v3[16] * 3.140000104904175 / 180.0; sub_85D860((float *)&v41, v40, v25, v24, v23); v26 = (int *)sub_85DAF0(&v34, &v37, (float *)&v41); v27 = v3[10]; v37 = *(float *)v26; v38 = *((float *)v26 + 1); v28 = *((float *)v26 + 2); v34 = v27 + v37; v29 = v3[11] + v38; v39 = v28; result = a2; v35 = v29; v31 = v35; v32 = v3[12]; *a2 = v34; v33 = v32 + v39; a2[1] = v31; v36 = v33; a2[2] = v36; v3[5] = 0.0; v3[6] = 0.0; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00404380) -------------------------------------------------------- void __thiscall sub_404380(float *this, int a2) { float *v2; // esi double v3; // st7 int v4; // ebx int v5; // edi float *v6; // eax int v7; // ecx int v8; // edi float *v9; // eax int v10; // ecx int v11; // [esp+4h] [ebp-8h] int v12; // [esp+8h] [ebp-4h] v2 = this; *(float *)&a2 = (double)a2 * 0.699999988079071 * 0.5; v3 = *(float *)&a2; this[5] = *(float *)&a2; *(float *)&a2 = 0.0689999982714653 * v3; v12 = (signed int)(v3 / *(float *)&a2); v4 = 0; *(float *)&v11 = v3 - *(float *)&a2 * (double)v12; if ( v12 > 0 ) { while ( 1 ) { v5 = *((_DWORD *)v2 + 7); v6 = sub_4044C0(*((char **)v2 + 7), *(_DWORD *)(v5 + 4), (int)&a2); v7 = *((_DWORD *)v2 + 8); if ( (unsigned int)(1073741822 - v7) < 1 ) break; *((_DWORD *)v2 + 8) = v7 + 1; *(_DWORD *)(v5 + 4) = v6; ++v4; **((_DWORD **)v6 + 1) = v6; if ( v4 >= v12 ) goto LABEL_4; } LABEL_6: std::_Xlength_error("list too long"); } LABEL_4: if ( *(float *)&v11 >= 0.0 ) { v8 = *((_DWORD *)v2 + 7); v9 = sub_4044C0(*((char **)v2 + 7), *(_DWORD *)(v8 + 4), (int)&v11); v10 = *((_DWORD *)v2 + 8); if ( (unsigned int)(1073741822 - v10) < 1 ) goto LABEL_6; *((_DWORD *)v2 + 8) = v10 + 1; *(_DWORD *)(v8 + 4) = v9; **((_DWORD **)v9 + 1) = v9; } } //----- (00404460) -------------------------------------------------------- float *__thiscall sub_404460(float *this, float *a2, float *a3) { float *result; // eax result = a2; *a2 = *a3 + *this; a2[1] = a3[1] + this[1]; a2[2] = a3[2] + this[2]; return result; } //----- (00404490) -------------------------------------------------------- void __thiscall sub_404490(float *this, float a2, int a3) { sub_85D860(this, a2, *(float *)a3, *(float *)(a3 + 4), *(float *)(a3 + 8)); } //----- (004044C0) -------------------------------------------------------- float *__stdcall sub_4044C0(char *a1, int a2, int a3) { float *result; // eax int v4; // edx void **v5; // [esp+0h] [ebp-Ch] result = (float *)operator new(0xCu); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a1); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v4 = a2; *(_DWORD *)result = a1; *((_DWORD *)result + 1) = v4; if ( result != (float *)-8 ) result[2] = *(float *)a3; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00404520) -------------------------------------------------------- void *__thiscall sub_404520(void *this, char a2) { void *v2; // esi v2 = this; sub_404020(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00404580) -------------------------------------------------------- void __noreturn sub_404580() { int v0; // eax HANDLE v1; // eax void *v2; // edi HANDLE v3; // eax void *v4; // esi DWORD v5; // [esp+Ch] [ebp-28h] DWORD v6; // [esp+10h] [ebp-24h] THREADENTRY32 te; // [esp+14h] [ebp-20h] v0 = rand(); Sleep(v0 % 180000 + 60000); v6 = GetCurrentProcessId(); v5 = GetCurrentThreadId(); v1 = CreateToolhelp32Snapshot(4u, 0); v2 = v1; if ( v1 != (HANDLE)-1 ) { te.dwSize = 28; if ( Thread32First(v1, &te) ) { do { if ( te.dwSize >= 0x10 && te.th32ThreadID != v5 && te.th32OwnerProcessID == v6 ) { v3 = OpenThread(0x1FFFFFu, 0, te.th32ThreadID); v4 = v3; if ( v3 ) { SuspendThread(v3); CloseHandle(v4); } } te.dwSize = 28; } while ( Thread32Next(v2, &te) ); } CloseHandle(v2); } MessageBoxA(0, "Malicious Software Intrusion Detected.", "Cheat Software Detected!", 0x10010u); ExitProcess(0); } //----- (00404660) -------------------------------------------------------- BOOL sub_404660() { char *v0; // esi unsigned int v1; // edi _BYTE *v2; // edx signed int v3; // ecx unsigned int v4; // eax int v5; // esi BOOL v6; // esi void *v8; // [esp+Ch] [ebp-124h] int v9; // [esp+1Ch] [ebp-114h] unsigned int v10; // [esp+20h] [ebp-110h] char v11; // [esp+28h] [ebp-108h] int v12; // [esp+12Ch] [ebp-4h] v10 = 15; v9 = 0; LOBYTE(v8) = 0; v12 = 0; v0 = (char *)&unk_AA7578; do { sub_401C20(&v8, (int)v0, 0, 0xFFFFFFFF); v0 += 28; } while ( (signed int)v0 < (signed int)&std::runtime_error `RTTI Type Descriptor' ); v1 = v10; v2 = v8; if ( v10 < 0x10 ) v2 = &v8; v3 = 3328; v4 = -1; do { v4 = dword_AA7178[(unsigned __int8)(v4 ^ *v2++)] ^ (v4 >> 8); --v3; } while ( v3 ); v5 = ~v4; sprintf(&v11, "%d", ~v4); v6 = v5 == 1871879518; if ( v1 >= 0x10 ) operator delete(v8); return v6; } //----- (00404790) -------------------------------------------------------- int __cdecl sub_404790(void *a1, int a2, int a3, int a4, int a5, int a6) { unsigned int v6; // eax _BYTE *v7; // ecx _BYTE *v8; // esi unsigned int v9; // edi void *v10; // ebx const char *v11; // esi const void **v13; // [esp+10h] [ebp-34h] unsigned __int8 v14; // [esp+17h] [ebp-2Dh] void *v15; // [esp+18h] [ebp-2Ch] int v16; // [esp+28h] [ebp-1Ch] unsigned int v17; // [esp+2Ch] [ebp-18h] int v18; // [esp+40h] [ebp-4h] v18 = 0; v14 = 0; v13 = (const void **)&unk_AA7578; while ( 1 ) { v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4017F0((const void **)&v15, v13, 0, (void *)0xFFFFFFFF); v6 = 0; do { v7 = v15; v8 = v15; if ( v17 < 0x10 ) { v8 = &v15; v7 = &v15; } v7[v6] = v8[v6] ^ 0x92; ++v6; } while ( v6 < 0x1F ); v9 = v17; v10 = v15; v11 = (const char *)v15; if ( v17 < 0x10 ) v11 = (const char *)&v15; if ( !strcmp(v11, (const char *)sub_401490(&a1)) ) break; if ( v9 >= 0x10 ) operator delete(v10); v13 += 7; if ( (signed int)v13 >= (signed int)&std::runtime_error `RTTI Type Descriptor' ) goto LABEL_15; } v14 = 1; if ( v9 >= 0x10 ) operator delete(v10); LABEL_15: if ( (unsigned int)a6 >= 0x10 ) operator delete(a1); return v14; } //----- (004048D0) -------------------------------------------------------- BOOL __stdcall EnumFunc(HWND hWnd, LPARAM a2) { void *v3; // [esp-1Ch] [ebp-150h] int v4; // [esp-18h] [ebp-14Ch] int v5; // [esp-14h] [ebp-148h] int v6; // [esp-10h] [ebp-144h] int v7; // [esp-Ch] [ebp-140h] int v8; // [esp-8h] [ebp-13Ch] void **v9; // [esp+4h] [ebp-130h] void *v10; // [esp+8h] [ebp-12Ch] unsigned int v11; // [esp+1Ch] [ebp-118h] CHAR String; // [esp+24h] [ebp-110h] int v13; // [esp+130h] [ebp-4h] GetWindowTextA(hWnd, &String, 256); if ( String ) { sub_747370((int)&v10, &String, strlen(&String)); v9 = &v3; v8 = 15; v7 = 0; v13 = 0; LOBYTE(v3) = 0; sub_4017F0((const void **)&v3, (const void **)&v10, 0, (void *)0xFFFFFFFF); if ( sub_404790(v3, v4, v5, v6, v7, v8) ) sub_404580(); if ( v11 >= 0x10 ) operator delete(v10); } return 1; } //----- (004049C0) -------------------------------------------------------- int __stdcall sub_4049C0(HWND hWnd, int a2) { int v2; // eax size_t v3; // edi void *v4; // esi HWND v5; // edi void *v6; // eax void *v8; // [esp-1Ch] [ebp-78h] int v9; // [esp-18h] [ebp-74h] int v10; // [esp-14h] [ebp-70h] int v11; // [esp-10h] [ebp-6Ch] int v12; // [esp-Ch] [ebp-68h] int v13; // [esp-8h] [ebp-64h] int v14; // [esp-4h] [ebp-60h] HWND hWndParent; // [esp+10h] [ebp-4Ch] void *v16; // [esp+14h] [ebp-48h] int v17; // [esp+24h] [ebp-38h] unsigned int v18; // [esp+28h] [ebp-34h] void *v19; // [esp+30h] [ebp-2Ch] int v20; // [esp+40h] [ebp-1Ch] unsigned int v21; // [esp+44h] [ebp-18h] int v22; // [esp+58h] [ebp-4h] hWndParent = hWnd; v2 = GetWindowTextLengthA(hWnd); if ( v2 ) { v3 = v2 + 1; v4 = operator new[](v2 + 1); memset(v4, 0, v3); v14 = v3; v5 = hWndParent; GetWindowTextA(hWndParent, (LPSTR)v4, v14); v21 = 15; v20 = 0; LOBYTE(v19) = 0; sub_4018E0(&v19, v4, strlen((const char *)v4)); v22 = 0; operator delete[](v4); v6 = v19; if ( v21 < 0x10 ) v6 = &v19; sub_747370((int)&v16, v6, v20); hWndParent = (HWND)&v8; v13 = 15; v12 = 0; LOBYTE(v22) = 1; LOBYTE(v8) = 0; sub_4017F0((const void **)&v8, (const void **)&v16, 0, (void *)0xFFFFFFFF); if ( sub_404790(v8, v9, v10, v11, v12, v13) ) sub_404580(); EnumChildWindows(v5, EnumFunc, 0); if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; if ( v21 >= 0x10 ) operator delete(v19); } return 1; } //----- (00404CD0) -------------------------------------------------------- DWORD __thiscall sub_404CD0(_BYTE *this, HWND *a2, _DWORD *a3) { DWORD result; // eax _BYTE *v4; // esi bool v5; // zf HWND v6; // ecx struct tagTRACKMOUSEEVENT EventTrack; // [esp+4h] [ebp-10h] result = (DWORD)a3; v4 = this; v5 = *this == 0; *((_DWORD *)this + 1) = *a3; *((_DWORD *)this + 2) = a3[1]; if ( v5 ) { v6 = *a2; EventTrack.cbSize = 16; EventTrack.hwndTrack = v6; EventTrack.dwFlags = 3; EventTrack.dwHoverTime = 1; result = TrackMouseEvent(&EventTrack); if ( !result ) result = GetLastError(); *v4 = 1; } return result; } //----- (00404D60) -------------------------------------------------------- void *__thiscall sub_404D60(void *this) { return this; } //----- (00404D70) -------------------------------------------------------- int __thiscall sub_404D70(char *this) { return (int)(this + 4); } //----- (00404DA0) -------------------------------------------------------- LRESULT __stdcall fn(int code, WPARAM wParam, LPARAM lParam) { HWND v3; // eax UINT v5; // [esp-Ch] [ebp-18h] WPARAM v6; // [esp-8h] [ebp-14h] LPARAM v7; // [esp-4h] [ebp-10h] if ( code >= 0 ) { if ( !byte_AC9C66 && *(_DWORD *)(lParam + 4) == 15 ) { byte_AC9C66 = 1; SetFocus(hWnd); } if ( *(_DWORD *)(lParam + 4) == 673 ) { v7 = lParam; v6 = wParam; v5 = 673; v3 = GetParent(*(HWND *)lParam); goto LABEL_9; } if ( *(_DWORD *)(lParam + 4) == 675 ) { v7 = lParam; v6 = wParam; v5 = 675; v3 = GetParent(*(HWND *)lParam); LABEL_9: PostMessageA(v3, v5, v6, v7); byte_AC9C68 = 0; return CallNextHookEx(0, code, wParam, lParam); } } return CallNextHookEx(0, code, wParam, lParam); } // AC9C66: using guessed type char byte_AC9C66; // AC9C68: using guessed type char byte_AC9C68; //----- (00404E20) -------------------------------------------------------- LRESULT __stdcall sub_404E20(int code, WPARAM wParam, LPARAM lParam) { if ( code >= 0 && wParam == 512 ) sub_404CD0(&byte_AC9C68, (HWND *)(lParam + 8), (_DWORD *)lParam); return CallNextHookEx(0, code, wParam, lParam); } // AC9C68: using guessed type char byte_AC9C68; //----- (00404E60) -------------------------------------------------------- _DWORD *__thiscall sub_404E60(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; return result; } //----- (00404E70) -------------------------------------------------------- bool __thiscall sub_404E70(_DWORD *this) { _DWORD *v1; // edi char *v2; // ecx int v3; // esi void (__stdcall *v4)(signed int); // edx _BYTE *v5; // ecx bool v6; // bl HMODULE v7; // eax struct tagWNDCLASSEXA wcx; // [esp+10h] [ebp-48h] int v10; // [esp+40h] [ebp-18h] int v11; // [esp+44h] [ebp-14h] char v12; // [esp+4Bh] [ebp-Dh] int v13; // [esp+54h] [ebp-4h] v1 = this; v11 = 0; v2 = (char *)this[1]; v13 = -1; if ( v2 ) { v3 = *(_DWORD *)sub_406520(v2); v10 = v3; if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); v13 = 1; if ( v3 ) { v4 = *(void (__stdcall **)(signed int))(**(_DWORD **)(**(int (__thiscall ***)(int, int *))v3)(v3, &v11) + 4); LOBYTE(v13) = 2; v4(1); LOBYTE(v13) = 1; if ( v11 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v11 + 4) + 4) + v11 + 4) + 4))(); v5 = (_BYTE *)v1[1]; v12 = 1; sub_406550(v5, &v12); } v13 = -1; if ( v3 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } v6 = 0; v7 = GetModuleHandleA(0); if ( GetClassInfoExA(v7, "CefWindowClass", &wcx) ) v6 = UnregisterClassA("CefWindowClass", wcx.hInstance) != 0; CoUninitialize(); byte_AC9C64 = 0; return v6; } // AC9C64: using guessed type char byte_AC9C64; //----- (00404FA0) -------------------------------------------------------- _DWORD *__cdecl sub_404FA0(_DWORD *a1) { CHAR Filename; // [esp+8h] [ebp-104h] GetModuleFileNameA(0, &Filename, 0x100u); PathRemoveFileSpecA(&Filename); a1[5] = 15; a1[4] = 0; *(_BYTE *)a1 = 0; sub_4018E0(a1, &Filename, strlen(&Filename)); return a1; } //----- (004050A0) -------------------------------------------------------- char __thiscall sub_4050A0(LONG dwNewLong, int a2, int a3, int a4, int a5) { LONG v5; // esi int v6; // edx int v7; // eax char result; // al int v9; // [esp-10h] [ebp-140h] int v10; // [esp-Ch] [ebp-13Ch] void ***v11; // [esp-8h] [ebp-138h] int v12; // [esp-4h] [ebp-134h] void **v13; // [esp+10h] [ebp-120h] int v14; // [esp+14h] [ebp-11Ch] int v15; // [esp+DCh] [ebp-54h] int v16; // [esp+E0h] [ebp-50h] void **v17; // [esp+E4h] [ebp-4Ch] char v18; // [esp+E8h] [ebp-48h] char v19; // [esp+ECh] [ebp-44h] int v20; // [esp+F8h] [ebp-38h] int v21; // [esp+FCh] [ebp-34h] int v22; // [esp+100h] [ebp-30h] int v23; // [esp+104h] [ebp-2Ch] int v24; // [esp+108h] [ebp-28h] HWND v25; // [esp+10Ch] [ebp-24h] int v26; // [esp+120h] [ebp-10h] int v27; // [esp+12Ch] [ebp-4h] v5 = dwNewLong; v16 = 0; v13 = &CefStructBase::`vftable'; memset(&v14, 0, 0xC8u); v15 = 0; v14 = 200; v27 = 1; memset(&v18, 0, 0x38u); v26 = 0; v17 = &CefWindowInfo::`vftable'; v25 = *(HWND *)a2; v6 = *(_DWORD *)(a3 + 8); v24 = *(_DWORD *)(a3 + 12); v20 = 1442906112; v21 = 0; v22 = 0; v23 = v6; v12 = 0; v7 = *(_DWORD *)a5; v11 = &v13; v10 = a4; LOBYTE(v27) = 3; v9 = v7; if ( v7 ) (**(void (__cdecl ***)(int, int, void ***, int))(*(_DWORD *)(*(_DWORD *)(v7 + 4) + 4) + v7 + 4))(v9, v10, v11, v12); LOBYTE(v27) = 2; if ( sub_778350((int)&v17, v9, v10, (int)v11, v12) ) { SetWindowLongA(*(HWND *)a2, -21, v5); byte_AC9C66 = 0; v17 = &CefStructBase::`vftable'; if ( !v26 ) cef_string_utf16_clear(&v19); v13 = &CefStructBase::`vftable'; if ( !v15 ) sub_405B80((int)&v14); result = 1; } else { MessageBoxA(0, "Failed to create CEF Browser", "CreateWebBrowser-Error", 0); v17 = &CefStructBase::`vftable'; if ( !v26 ) cef_string_utf16_clear(&v19); v13 = &CefStructBase::`vftable'; if ( !v15 ) sub_405B80((int)&v14); result = 0; } return result; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A54: using guessed type void *CefStructBase::`vftable'; // 9A7A64: using guessed type void *CefStructBase::`vftable'; // 9A7A74: using guessed type void *CefWindowInfo::`vftable'; // AC9C66: using guessed type char byte_AC9C66; //----- (00405250) -------------------------------------------------------- LRESULT __stdcall sub_405250(int a1, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { int v5; // ebx char *v6; // ecx int (__stdcall ****v7)(int *); // esi _DWORD *v8; // eax char v9; // cl int (*v10)(void); // eax HWND v11; // esi DWORD v12; // esi int v14; // ecx int v15; // ecx int v16; // [esp+10h] [ebp-10h] int v17; // [esp+1Ch] [ebp-4h] v16 = 0; v5 = a1; v17 = -1; if ( byte_AC9C65 ) goto LABEL_15; v6 = *(char **)(a1 + 4); if ( !v6 ) goto LABEL_15; v7 = (int (__stdcall ****)(int *))sub_406520(v6); if ( *v7 ) { v8 = (_DWORD *)(***v7)(&v16); v9 = 2; if ( *v8 ) { HIBYTE(a1) = 1; goto LABEL_8; } } else { v9 = v16; } HIBYTE(a1) = 0; LABEL_8: if ( v9 & 2 && v16 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v16 + 4) + 4) + v16 + 4) + 4))(); if ( HIBYTE(a1) ) { v10 = *(int (**)(void))(**(_DWORD **)(***v7)(&a1) + 16); v17 = 1; v11 = (HWND)v10(); v17 = -1; if ( a1 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4); v12 = GetWindowThreadProcessId(v11, 0); *(_DWORD *)(v5 + 8) = SetWindowsHookExA(3, fn, 0, v12); *(_DWORD *)(v5 + 12) = SetWindowsHookExA(7, sub_404E20, 0, v12); byte_AC9C65 = 1; } LABEL_15: switch ( Msg ) { case 2u: UnhookWindowsHookEx(*(HHOOK *)(v5 + 8)); UnhookWindowsHookEx(*(HHOOK *)(v5 + 12)); byte_AC9C65 = 0; break; case 0x10u: DestroyWindow(hWnd); break; case 0x210u: if ( (_WORD)wParam == 523 ) { if ( HIWORD(wParam) == 1 ) { v14 = *(_DWORD *)sub_406520(*(char **)(v5 + 4)); if ( v14 ) (*(void (**)(void))(*(_DWORD *)v14 + 8))(); } else if ( HIWORD(wParam) == 2 ) { v15 = *(_DWORD *)sub_406520(*(char **)(v5 + 4)); if ( v15 ) (*(void (**)(void))(*(_DWORD *)v15 + 16))(); } } break; default: return DefWindowProcA(hWnd, Msg, wParam, lParam); } return 0; } // AC9C65: using guessed type char byte_AC9C65; //----- (00405430) -------------------------------------------------------- int __thiscall sub_405430(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; if ( byte_AC9C64 ) sub_404E70(this); result = v1[1]; if ( result ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); return result; } // AC9C64: using guessed type char byte_AC9C64; //----- (004054A0) -------------------------------------------------------- char __thiscall sub_4054A0(HWND *this, HWND *a2, HINSTANCE *a3, int *a4, int a5) { HWND *v5; // edi char *v6; // ecx char **v7; // edi int (__stdcall ****v8)(void **); // eax void (__stdcall *v9)(signed int); // edx struct _RTL_CRITICAL_SECTION *v10; // eax struct _RTL_CRITICAL_SECTION *v11; // esi char *v12; // eax HINSTANCE v13; // ST28_4 HWND v14; // ST20_4 int v15; // ST1C_4 int v16; // ST18_4 int v17; // ST14_4 int v18; // ST10_4 HWND v19; // eax char result; // al HWND *dwNewLong; // [esp+Ch] [ebp-14h] void *v22; // [esp+10h] [ebp-10h] int v23; // [esp+1Ch] [ebp-4h] v5 = this; dwNewLong = this; v22 = 0; if ( IsWindow(*this) ) DestroyWindow(*v5); v6 = (char *)v5[1]; v7 = (char **)(v5 + 1); if ( v6 ) { if ( *(_DWORD *)sub_406520(v6) ) { v8 = (int (__stdcall ****)(void **))sub_406520(*v7); v9 = *(void (__stdcall **)(signed int))(**(_DWORD **)(***v8)(&v22) + 4); v23 = 0; v9(1); v23 = -1; if ( v22 ) (*(void (**)(void))(*(_DWORD *)((char *)v22 + *(_DWORD *)(*((_DWORD *)v22 + 1) + 4) + 4) + 4))(); } } v10 = (struct _RTL_CRITICAL_SECTION *)operator new(0x98u); v22 = v10; v23 = 1; if ( v10 ) v11 = sub_406EE0(v10, 1); else v11 = 0; v23 = -1; v22 = v11; if ( v11 ) (**(void (__thiscall ***)(int))((char *)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)))((int)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)); v23 = 2; if ( v11 ) (**(void (__thiscall ***)(int))((char *)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)))((int)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)); v12 = *v7; *v7 = (char *)v11; if ( v12 ) (*(void (**)(void))(*(_DWORD *)&v12[*(_DWORD *)(*((_DWORD *)v12 + 1) + 4) + 4] + 4))(); v23 = -1; if ( v11 ) (*(void (__thiscall **)(int))(*(LONG *)((char *)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)) + 4))((int)&v11->LockCount + *(_DWORD *)(v11->LockCount + 4)); v13 = *a3; v14 = *a2; v15 = a4[3]; v16 = a4[2]; v17 = a4[1]; v18 = *a4; v23 = -1; v19 = CreateWindowExA(0, "CefWindowClass", "CefWindowClass", 0x90000000, v18, v17, v16, v15, v14, 0, v13, 0); if ( !v19 ) { MessageBoxA(0, "Failed to create CEF Web Window", "CreateWebWindow-Error", 0); v19 = 0; } *dwNewLong = v19; if ( v19 ) result = sub_4050A0((LONG)dwNewLong, (int)dwNewLong, (int)a4, a5, (int)v7); else result = 0; return result; } //----- (00405680) -------------------------------------------------------- LRESULT __stdcall sub_405680(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { int v4; // eax LRESULT result; // eax v4 = GetWindowLongA(hWnd, -21); if ( v4 ) result = sub_405250(v4, hWnd, Msg, wParam, lParam); else result = DefWindowProcA(hWnd, Msg, wParam, lParam); return result; } //----- (004056D0) -------------------------------------------------------- char __stdcall sub_4056D0(HINSTANCE *a1) { HMODULE v1; // eax struct tagWNDCLASSEXA wcx; // [esp+4h] [ebp-30h] CoInitializeEx(0, 0); v1 = GetModuleHandleA(0); if ( GetClassInfoExA(v1, "CefWindowClass", &wcx) ) return 1; memset(&wcx, 0, 0x30u); wcx.cbSize = 48; wcx.style = 16936; wcx.lpfnWndProc = sub_405680; wcx.hInstance = GetModuleHandleA(0); wcx.hCursor = LoadCursorA(*a1, (LPCSTR)0x7F00); wcx.lpszClassName = "CefWindowClass"; if ( RegisterClassExA(&wcx) ) return 1; MessageBoxA(0, "Failed to register CEF Web Window Class", "RegisterWindowClass-Error", 0); return 0; } //----- (00405780) -------------------------------------------------------- char __stdcall sub_405780(int a1, void *a2, void *a3, int a4) { int v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax void *v7; // esi _DWORD *v8; // eax _DWORD *v9; // eax void *v10; // edi int v11; // eax char result; // al int v13; // [esp-8h] [ebp-144h] int v14; // [esp-4h] [ebp-140h] void **v15; // [esp+10h] [ebp-12Ch] int v16; // [esp+14h] [ebp-128h] int v17; // [esp+18h] [ebp-124h] int v18; // [esp+1Ch] [ebp-120h] int v19; // [esp+2Ch] [ebp-110h] int v20; // [esp+34h] [ebp-108h] char v21; // [esp+98h] [ebp-A4h] char v22; // [esp+A4h] [ebp-98h] int v23; // [esp+D4h] [ebp-68h] int *v24; // [esp+D8h] [ebp-64h] void **v25; // [esp+DCh] [ebp-60h] int v26; // [esp+E0h] [ebp-5Ch] int v27; // [esp+E4h] [ebp-58h] void **v28; // [esp+E8h] [ebp-54h] void *v29; // [esp+ECh] [ebp-50h] char v30; // [esp+F0h] [ebp-4Ch] void *v31; // [esp+F4h] [ebp-48h] unsigned int v32; // [esp+108h] [ebp-34h] void *v33; // [esp+110h] [ebp-2Ch] int v34; // [esp+120h] [ebp-1Ch] unsigned int v35; // [esp+124h] [ebp-18h] int v36; // [esp+138h] [ebp-4h] v4 = *(_DWORD *)a1; v27 = 0; v25 = &CefMainArgs::`vftable'; v26 = v4; v36 = 0; v15 = &CefStructBase::`vftable'; memset(&v16, 0, 0xC0u); v23 = 0; v16 = 192; LOBYTE(v36) = 1; v20 = 1; v18 = 1; v19 = 1; v17 = 1; if ( a2 ) { v5 = sub_404FA0(&v31); LOBYTE(v36) = 2; v6 = sub_4064D0(&v33, (int)v5, a2); v28 = &CefStringBase::`vftable'; v29 = &v22; v30 = 0; LOBYTE(v36) = 4; sub_406000(&v28, v6); v7 = v29; if ( v29 && v30 ) { cef_string_utf16_clear(v29); operator delete(v7); } if ( v35 >= 0x10 ) operator delete(v33); v35 = 15; v34 = 0; LOBYTE(v33) = 0; LOBYTE(v36) = 1; if ( v32 >= 0x10 ) operator delete(v31); } if ( a3 ) { v8 = sub_404FA0(&v31); LOBYTE(v36) = 5; v9 = sub_4064D0(&v33, (int)v8, a3); v28 = &CefStringBase::`vftable'; v29 = &v21; v30 = 0; LOBYTE(v36) = 7; sub_406000(&v28, v9); v10 = v29; if ( v29 && v30 ) { cef_string_utf16_clear(v29); operator delete(v10); } if ( v35 >= 0x10 ) operator delete(v33); v35 = 15; v34 = 0; LOBYTE(v33) = 0; LOBYTE(v36) = 1; if ( v32 >= 0x10 ) operator delete(v31); } v11 = *(_DWORD *)a4; v14 = 0; v24 = &v13; v13 = v11; if ( v11 ) (**(void (__cdecl ***)(int, int))(*(_DWORD *)(*(_DWORD *)(v11 + 4) + 4) + v11 + 4))(v13, v14); if ( sub_778910((int)&v25, (int)&v15, v13, v14) ) { v15 = &CefStructBase::`vftable'; if ( !v23 ) sub_405AE0((int)&v16); result = 1; } else { MessageBoxA(0, "Failed to initialize CEF", "InitializeCef-Error", 0); v15 = &CefStructBase::`vftable'; if ( !v23 ) sub_405AE0((int)&v16); result = 0; } return result; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A5C: using guessed type void *CefStructBase::`vftable'; // 9A7A6C: using guessed type void *CefMainArgs::`vftable'; // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00405A00) -------------------------------------------------------- char __stdcall sub_405A00(int a1, void *a2, void *a3, int a4) { char result; // al if ( byte_AC9C64 ) return 0; if ( sub_4056D0((HINSTANCE *)a1) && sub_405780(a1, a2, a3, a4) ) { result = 1; byte_AC9C64 = 1; } else { result = 0; byte_AC9C64 = 0; } return result; } // AC9C64: using guessed type char byte_AC9C64; //----- (00405AE0) -------------------------------------------------------- int __cdecl sub_405AE0(int a1) { cef_string_utf16_clear(a1 + 12); cef_string_utf16_clear(a1 + 36); cef_string_utf16_clear(a1 + 48); cef_string_utf16_clear(a1 + 68); cef_string_utf16_clear(a1 + 80); cef_string_utf16_clear(a1 + 92); cef_string_utf16_clear(a1 + 104); cef_string_utf16_clear(a1 + 120); cef_string_utf16_clear(a1 + 132); cef_string_utf16_clear(a1 + 144); return cef_string_utf16_clear(a1 + 180); } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00405B60) -------------------------------------------------------- __int64 __thiscall sub_405B60(_DWORD **this) { __int64 result; // rax if ( *this[9] ) result = (signed int)*this[13]; else result = 0i64; return result; } //----- (00405B80) -------------------------------------------------------- int __cdecl sub_405B80(int a1) { cef_string_utf16_clear(a1 + 8); cef_string_utf16_clear(a1 + 20); cef_string_utf16_clear(a1 + 32); cef_string_utf16_clear(a1 + 44); cef_string_utf16_clear(a1 + 56); cef_string_utf16_clear(a1 + 68); cef_string_utf16_clear(a1 + 96); return cef_string_utf16_clear(a1 + 188); } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00405BE0) -------------------------------------------------------- void *__thiscall sub_405BE0(void *this, char a2) { void *v2; // esi v2 = this; sub_7D43CE((std::exception *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00405C10) -------------------------------------------------------- int __thiscall sub_405C10(_DWORD *this, int a2, char *a3) { int result; // eax int v4; // ecx int (__thiscall **v5)(void *, char); // edi int (__thiscall **v6)(void *, char); // edi int (__thiscall **v7)(void *, char); // edi void **v8; // [esp+0h] [ebp-14h] int v9; // [esp+Ch] [ebp-8h] int (__thiscall **v10)(void *, char); // [esp+10h] [ebp-4h] result = a2 & 0x17; this[3] = result; v4 = result & this[4]; if ( v4 ) { if ( (_BYTE)a3 ) _CxxThrowException(0, 0); if ( v4 & 4 ) { v5 = sub_7D353E(); a3 = "ios_base::badbit set"; std::exception::exception((std::exception *)&v8, (const char *const *)&a3); v9 = 1; v10 = v5; v8 = &std::ios_base::failure::`vftable'; _CxxThrowException(&v8, &_TI4_AVfailure_ios_base_std__); } if ( v4 & 2 ) { v6 = sub_7D353E(); a3 = "ios_base::failbit set"; std::exception::exception((std::exception *)&v8, (const char *const *)&a3); v9 = 1; v10 = v6; v8 = &std::ios_base::failure::`vftable'; _CxxThrowException(&v8, &_TI4_AVfailure_ios_base_std__); } v7 = sub_7D353E(); a3 = "ios_base::eofbit set"; std::exception::exception((std::exception *)&v8, (const char *const *)&a3); v9 = 1; v10 = v7; v8 = &std::ios_base::failure::`vftable'; _CxxThrowException(&v8, &_TI4_AVfailure_ios_base_std__); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A79F8: using guessed type void *std::ios_base::failure::`vftable'; // A7AD0C: using guessed type int _TI4_AVfailure_ios_base_std__; //----- (00405CF0) -------------------------------------------------------- std::exception *__thiscall sub_405CF0(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::runtime_error::`vftable'; return v2; } // 9A79E0: using guessed type void *std::runtime_error::`vftable'; //----- (00405D10) -------------------------------------------------------- std::exception *__thiscall sub_405D10(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::system_error::`vftable'; *((_DWORD *)v2 + 3) = *((_DWORD *)a2 + 3); *((_DWORD *)v2 + 4) = *((_DWORD *)a2 + 4); return v2; } // 9A79EC: using guessed type void *std::system_error::`vftable'; //----- (00405D40) -------------------------------------------------------- std::exception *__thiscall sub_405D40(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::system_error::`vftable'; *((_DWORD *)v2 + 3) = *((_DWORD *)a2 + 3); *((_DWORD *)v2 + 4) = *((_DWORD *)a2 + 4); *(_DWORD *)v2 = &std::ios_base::failure::`vftable'; return v2; } // 9A79EC: using guessed type void *std::system_error::`vftable'; // 9A79F8: using guessed type void *std::ios_base::failure::`vftable'; //----- (00405D70) -------------------------------------------------------- void *__thiscall sub_405D70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CefStructBase::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9A7A4C: using guessed type void *CefStructBase::`vftable'; //----- (00405DA0) -------------------------------------------------------- void *__thiscall sub_405DA0(void *this, char a2) { void *v2; // esi bool v3; // zf v2 = this; v3 = *((_DWORD *)this + 15) == 0; *(_DWORD *)this = &CefStructBase::`vftable'; if ( v3 ) cef_string_utf16_clear((char *)this + 8); if ( a2 & 1 ) operator delete(v2); return v2; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A54: using guessed type void *CefStructBase::`vftable'; //----- (00405E00) -------------------------------------------------------- _DWORD *__thiscall sub_405E00(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; v2 = this + 1; *this = &CefStructBase::`vftable'; memset(this + 1, 0, 0xC8u); v1[51] = 0; *v2 = 200; return v1; } // 9A7A64: using guessed type void *CefStructBase::`vftable'; //----- (00405E40) -------------------------------------------------------- int __thiscall sub_405E40(_DWORD *this) { bool v1; // zf int result; // eax v1 = this[51] == 0; *this = &CefStructBase::`vftable'; if ( v1 ) result = sub_405B80((int)(this + 1)); return result; } // 9A7A64: using guessed type void *CefStructBase::`vftable'; //----- (00405E60) -------------------------------------------------------- void *__thiscall sub_405E60(void *this, char a2) { void *v2; // esi bool v3; // zf v2 = this; v3 = *((_DWORD *)this + 49) == 0; *(_DWORD *)this = &CefStructBase::`vftable'; if ( v3 ) sub_405AE0((int)this + 4); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A7A5C: using guessed type void *CefStructBase::`vftable'; //----- (00405EA0) -------------------------------------------------------- void *__thiscall sub_405EA0(void *this, char a2) { void *v2; // esi bool v3; // zf v2 = this; v3 = *((_DWORD *)this + 51) == 0; *(_DWORD *)this = &CefStructBase::`vftable'; if ( v3 ) sub_405B80((int)this + 4); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A7A64: using guessed type void *CefStructBase::`vftable'; //----- (00405EF0) -------------------------------------------------------- _DWORD *__thiscall sub_405EF0(_DWORD *this) { _DWORD *v1; // esi v1 = this; memset(this + 1, 0, 0x38u); v1[15] = 0; *v1 = &CefWindowInfo::`vftable'; return v1; } // 9A7A74: using guessed type void *CefWindowInfo::`vftable'; //----- (00405F20) -------------------------------------------------------- int __thiscall sub_405F20(_DWORD *this) { bool v1; // zf int result; // eax v1 = this[15] == 0; *this = &CefStructBase::`vftable'; if ( v1 ) result = cef_string_utf16_clear(this + 2); return result; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A54: using guessed type void *CefStructBase::`vftable'; //----- (00405F40) -------------------------------------------------------- void __thiscall sub_405F40(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[1]; *this = &CefStringBase::`vftable'; if ( v2 ) { if ( *((_BYTE *)this + 8) ) { cef_string_utf16_clear(v2); operator delete((void *)v1[1]); } v1[1] = 0; *((_BYTE *)v1 + 8) = 0; } } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00405F80) -------------------------------------------------------- void **__thiscall sub_405F80(void *this, char a2) { void **v2; // esi int v3; // eax v2 = (void **)this; v3 = *((_DWORD *)this + 1); *(_DWORD *)this = &CefStringBase::`vftable'; if ( v3 ) { if ( *((_BYTE *)this + 8) ) { cef_string_utf16_clear(v3); operator delete(v2[1]); } v2[1] = 0; *((_BYTE *)v2 + 8) = 0; } if ( a2 & 1 ) operator delete(v2); return v2; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00405FD0) -------------------------------------------------------- _DWORD *__thiscall sub_405FD0(_DWORD *this, int a2) { _DWORD *result; // eax result = this; *this = &CefStringBase::`vftable'; this[1] = 0; *((_BYTE *)this + 8) = 0; if ( a2 ) { this[1] = a2; *((_BYTE *)this + 8) = 0; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00406000) -------------------------------------------------------- bool __thiscall sub_406000(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // esi bool result; // al _DWORD *v6; // eax int v7; // esi v2 = a2; v3 = this; if ( a2[4] ) { if ( !this[1] ) { v6 = operator new(0xCu); v3[1] = v6; *v6 = 0; v6[1] = 0; v6[2] = 0; *((_BYTE *)v3 + 8) = 1; } v7 = v3[1]; if ( a2[5] >= 0x10u ) v2 = (_DWORD *)*a2; result = cef_string_utf8_to_utf16(v2, a2[4], v7) != 0; } else { v4 = this[1]; if ( v4 ) cef_string_utf16_clear(v4); result = 1; } return result; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 777372: using guessed type int __cdecl cef_string_utf8_to_utf16(_DWORD, _DWORD, _DWORD); //----- (00406070) -------------------------------------------------------- _BYTE *__thiscall sub_406070(_BYTE *this) { _BYTE *v1; // esi int v2; // eax signed int v3; // edi _DWORD *v4; // ecx int v5; // eax v1 = this; v2 = *(_DWORD *)(*(_DWORD *)this + 4); v3 = 0; if ( !(this[v2 + 12] & 6) && (*(int (__thiscall **)(_DWORD))(**(_DWORD **)&this[v2 + 56] + 52))(*(_DWORD *)&this[v2 + 56]) == -1 ) { v3 = 4; } v4 = &v1[*(_DWORD *)(*(_DWORD *)v1 + 4)]; if ( v3 ) { v5 = v3 | v4[3]; if ( !v4[14] ) v5 |= 4u; sub_405C10(v4, v5, 0); } return v1; } //----- (004060C0) -------------------------------------------------------- _BYTE *__thiscall sub_4060C0(_BYTE *this) { _BYTE *result; // eax bool v2; // zf int v3; // [esp+0h] [ebp-20h] int *v4; // [esp+10h] [ebp-10h] int v5; // [esp+1Ch] [ebp-4h] v4 = &v3; result = *(_BYTE **)this; v2 = (this[*(_DWORD *)(*(_DWORD *)this + 4) + 20] & 2) == 0; v5 = 0; if ( !v2 ) result = sub_406070(this); return result; } //----- (00406120) -------------------------------------------------------- int __thiscall sub_406120(_BYTE **this) { _BYTE **v1; // esi int result; // eax v1 = this; if ( !__uncaught_exception() ) sub_4060C0(*v1); result = *(_DWORD *)&(*v1)[*(_DWORD *)(*(_DWORD *)*v1 + 4) + 56]; if ( result ) result = (*(int (**)(void))(*(_DWORD *)result + 8))(); return result; } //----- (00406190) -------------------------------------------------------- _BYTE *__cdecl sub_406190(_BYTE *a1, const char *a2) { int v2; // edx signed int v3; // ecx unsigned int v4; // eax unsigned int v5; // ebx unsigned __int64 v6; // kr00_8 int v7; // edx int v8; // eax bool v9; // zf _BYTE *v10; // eax int v11; // eax signed int v12; // edx int v13; // eax int v14; // ecx int v15; // eax _DWORD *v16; // ecx _DWORD *v17; // edx _DWORD *v18; // ecx _BYTE *v19; // edx int v20; // eax int v21; // edx int v22; // eax _DWORD *v23; // ecx int v24; // eax bool v25; // al _BYTE *v26; // edi int v27; // ecx int v29; // et0 int v30; // ecx int v31; // eax _DWORD *v32; // ecx _DWORD *v33; // edx _DWORD *v34; // ecx _BYTE *v35; // edx int v36; // et0 int v37; // [esp+0h] [ebp-38h] _BYTE *v38; // [esp+10h] [ebp-28h] bool v39; // [esp+14h] [ebp-24h] int v40; // [esp+1Ch] [ebp-1Ch] unsigned int v41; // [esp+20h] [ebp-18h] int v42; // [esp+24h] [ebp-14h] int *v43; // [esp+28h] [ebp-10h] int v44; // [esp+34h] [ebp-4h] v43 = &v37; v42 = 0; v41 = strlen(a2); v2 = *(_DWORD *)(*(_DWORD *)a1 + 4); v3 = *(_DWORD *)&a1[v2 + 36]; v4 = *(_DWORD *)&a1[v2 + 32]; if ( v3 >= 0 && (v3 > 0 || v4) && v3 >= 0 && (v3 > 0 || v4 > v41) ) { v6 = __PAIR__(v3, v4) - v41; v40 = v6 >> 32; v5 = v6; } else { v5 = 0; v40 = 0; } v7 = *(_DWORD *)&a1[v2 + 56]; v38 = a1; if ( v7 ) (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7); v8 = *(_DWORD *)(*(_DWORD *)a1 + 4); v9 = *(_DWORD *)&a1[v8 + 12] == 0; v44 = 0; if ( v9 ) { v10 = *(_BYTE **)&a1[v8 + 60]; if ( v10 ) sub_406070(v10); } v11 = *(_DWORD *)(*(_DWORD *)a1 + 4); v39 = *(_DWORD *)&a1[v11 + 12] == 0; v44 = 1; if ( v39 ) { v13 = *(_DWORD *)&a1[v11 + 20] & 0x1C0; LOBYTE(v44) = 2; if ( v13 == 64 ) goto LABEL_53; while ( v40 >= 0 && (v40 > 0 || v5) ) { v14 = *(_DWORD *)(*(_DWORD *)a1 + 4); LOBYTE(v15) = a1[v14 + 64]; v16 = *(_DWORD **)&a1[v14 + 56]; if ( *(_DWORD *)v16[9] && (v17 = (_DWORD *)v16[13], *v17 > 0) ) { --*v17; v18 = (_DWORD *)v16[9]; v19 = (_BYTE *)(*v18)++; *v19 = v15; v15 = (unsigned __int8)v15; } else { v15 = (*(int (__stdcall **)(_DWORD))(*v16 + 12))((unsigned __int8)v15); } if ( v15 == -1 ) { v42 |= 4u; break; } v29 = (__PAIR__((unsigned int)v40, v5--) - 1) >> 32; v40 = v29; } if ( !v42 ) { LABEL_53: v20 = (*(int (__stdcall **)(const char *, unsigned int, _DWORD))(**(_DWORD **)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4) + 56] + 36))( a2, v41, 0); if ( v20 != v41 || v21 ) { v42 = 4; } else { while ( v40 >= 0 && (v40 > 0 || v5) ) { v30 = *(_DWORD *)(*(_DWORD *)a1 + 4); LOBYTE(v31) = a1[v30 + 64]; v32 = *(_DWORD **)&a1[v30 + 56]; if ( *(_DWORD *)v32[9] && (v33 = (_DWORD *)v32[13], *v33 > 0) ) { --*v33; v34 = (_DWORD *)v32[9]; v35 = (_BYTE *)(*v34)++; *v35 = v31; v31 = (unsigned __int8)v31; } else { v31 = (*(int (__stdcall **)(_DWORD))(*v32 + 12))((unsigned __int8)v31); } if ( v31 == -1 ) { v42 |= 4u; break; } v36 = (__PAIR__((unsigned int)v40, v5--) - 1) >> 32; v40 = v36; } } } v22 = *(_DWORD *)(*(_DWORD *)a1 + 4); *(_DWORD *)&a1[v22 + 32] = 0; *(_DWORD *)&a1[v22 + 36] = 0; v44 = 1; v12 = v42; } else { v12 = 4; } v23 = &a1[*(_DWORD *)(*(_DWORD *)a1 + 4)]; if ( v12 ) { v24 = v12 | v23[3]; if ( !v23[14] ) v24 |= 4u; sub_405C10(v23, v24, 0); } v44 = 4; v25 = __uncaught_exception(); v26 = v38; if ( !v25 ) sub_4060C0(v38); v27 = *(_DWORD *)&v26[*(_DWORD *)(*(_DWORD *)v26 + 4) + 56]; v44 = -1; if ( v27 ) (*(void (**)(void))(*(_DWORD *)v27 + 8))(); return a1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00406450) -------------------------------------------------------- _DWORD *__thiscall sub_406450(void *this, void *a2) { _DWORD *v2; // esi v2 = this; if ( this != a2 ) { if ( *((_DWORD *)this + 5) >= 0x10u ) operator delete(*(void **)this); v2[5] = 15; v2[4] = 0; *(_BYTE *)v2 = 0; if ( *((_DWORD *)a2 + 5) >= 0x10u ) { *v2 = *(_DWORD *)a2; *(_DWORD *)a2 = 0; } else { memcpy_0(v2, a2, *((_DWORD *)a2 + 4) + 1); } v2[4] = *((_DWORD *)a2 + 4); v2[5] = *((_DWORD *)a2 + 5); *((_DWORD *)a2 + 4) = 0; *((_DWORD *)a2 + 5) = 0; } return v2; } //----- (004064D0) -------------------------------------------------------- void *__cdecl sub_4064D0(void *a1, int a2, void *a3) { _DWORD *v3; // eax v3 = sub_401D10(a2, a3, strlen((const char *)a3)); *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; sub_406450(a1, v3); return a1; } //----- (00406520) -------------------------------------------------------- int __thiscall sub_406520(char *this) { return (int)(this + 92); } //----- (00406550) -------------------------------------------------------- _BYTE *__thiscall sub_406550(_BYTE *this, _BYTE *a2) { _BYTE *result; // eax result = a2; this[137] = *a2; return result; } //----- (00406570) -------------------------------------------------------- int *__thiscall sub_406570(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 8); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (004065B0) -------------------------------------------------------- int *__thiscall sub_4065B0(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 16); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (004065F0) -------------------------------------------------------- int *__thiscall sub_4065F0(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 24); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (00406630) -------------------------------------------------------- int *__thiscall sub_406630(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 32); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (00406670) -------------------------------------------------------- int *__thiscall sub_406670(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 40); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (004066B0) -------------------------------------------------------- int *__thiscall sub_4066B0(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 48); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (004066F0) -------------------------------------------------------- int *__thiscall sub_4066F0(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 56); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (00406730) -------------------------------------------------------- int *__thiscall sub_406730(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 64); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (00406770) -------------------------------------------------------- int *__thiscall sub_406770(char *this, int *a2) { int v2; // eax if ( this ) v2 = (int)(this + 72); else v2 = 0; *a2 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a2; } //----- (004067B0) -------------------------------------------------------- int __stdcall sub_4067B0(int a1, int a2, int a3, int a4) { int result; // eax (**(void (***)(void))a4)(); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = a4; if ( a4 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return result; } //----- (00406870) -------------------------------------------------------- char __stdcall sub_406870(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } //----- (00406900) -------------------------------------------------------- int __stdcall sub_406900(int a1, int a2) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } //----- (00406980) -------------------------------------------------------- int __thiscall sub_406980(_BYTE *this, int a2, int a3, int a4, int a5) { int result; // eax if ( this[64] ) (**(void (__stdcall ***)(int, signed int))a5)(a4, 1); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = a5; if ( a5 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return result; } //----- (00406A30) -------------------------------------------------------- char __stdcall sub_406A30(_DWORD *a1, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { unsigned __int8 (*v11)(void); // edx void (__stdcall *v12)(int); // eax int v14; // [esp+4h] [ebp-10h] int v15; // [esp+10h] [ebp-4h] v11 = *(unsigned __int8 (**)(void))(*a2 + 60); v15 = 1; if ( v11() ) { (*(void (__stdcall **)(int))(*a2 + 48))(a3); } else { v12 = *(void (__stdcall **)(int))(**(_DWORD **)(*(int (__stdcall **)(int *))(*a1 + 52))(&v14) + 48); LOBYTE(v15) = 2; v12(a3); LOBYTE(v15) = 1; if ( v14 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v14 + 4) + 4) + v14 + 4) + 4))(); } LOBYTE(v15) = 0; if ( a1 ) (*(void (**)(void))(*(_DWORD *)((char *)a1 + *(_DWORD *)(a1[1] + 4) + 4) + 4))(); v15 = -1; if ( a2 ) (*(void (**)(void))(*(_DWORD *)((char *)a2 + *(_DWORD *)(a2[1] + 4) + 4) + 4))(); return 1; } //----- (00406B10) -------------------------------------------------------- char __stdcall sub_406B10(int a1) { int v1; // eax v1 = a1; if ( a1 ) { (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))(); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4); v1 = a1; } if ( v1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 4) + 4) + v1 + 4) + 4))(); return 0; } //----- (00406BA0) -------------------------------------------------------- char __stdcall sub_406BA0(int a1, int a2, int a3, int a4, char a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return a5; } //----- (00406C20) -------------------------------------------------------- char __stdcall sub_406C20(int a1, int a2) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (00406C50) -------------------------------------------------------- int __stdcall sub_406C50(int a1, int a2, int a3, int a4, int a5, int a6) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (00406C70) -------------------------------------------------------- int __stdcall sub_406C70(int a1, int a2, int a3, int a4) { int result; // eax result = a1; if ( a1 ) { (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))(); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4); result = a1; } if ( result ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); return result; } //----- (00406D00) -------------------------------------------------------- char __stdcall sub_406D00(int a1, int a2, int a3) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (00406D30) -------------------------------------------------------- char __thiscall sub_406D30(_BYTE *this, int a2, int a3, _DWORD *a4, int a5) { _BYTE *v5; // edi const wchar_t **v6; // esi const wchar_t *v7; // eax void **v9; // [esp+10h] [ebp-18h] void *v10; // [esp+14h] [ebp-14h] char v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v5 = this; v12 = 2; if ( !this[64] ) { LABEL_12: LOBYTE(v12) = 1; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); LOBYTE(v12) = 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); v12 = -1; if ( a4 ) (*(void (**)(void))(*(_DWORD *)((char *)a4 + *(_DWORD *)(a4[1] + 4) + 4) + 4))(); return 0; } (*(void (__stdcall **)(void ***))(*a4 + 4))(&v9); v6 = (const wchar_t **)*((_DWORD *)v5 + 12); if ( v6 == *((const wchar_t ***)v5 + 13) ) { LABEL_8: v9 = &CefStringBase::`vftable'; if ( v10 ) { if ( v11 ) { cef_string_utf16_clear(v10); operator delete(v10); } v10 = 0; v11 = 0; } goto LABEL_12; } while ( 1 ) { v7 = (const wchar_t *)(v10 ? *(_DWORD *)v10 : 0); if ( !wcsstr(v7, *v6) ) break; ++v6; if ( v6 == *((const wchar_t ***)v5 + 13) ) goto LABEL_8; } v9 = &CefStringBase::`vftable'; if ( v10 ) { if ( v11 ) { cef_string_utf16_clear(v10); operator delete(v10); } v10 = 0; v11 = 0; } LOBYTE(v12) = 1; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); LOBYTE(v12) = 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); v12 = -1; if ( a4 ) (*(void (**)(void))(*(_DWORD *)((char *)a4 + *(_DWORD *)(a4[1] + 4) + 4) + 4))(); return 1; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00406EE0) -------------------------------------------------------- struct _RTL_CRITICAL_SECTION *__thiscall sub_406EE0(struct _RTL_CRITICAL_SECTION *this, int a2) { struct _RTL_CRITICAL_SECTION *v2; // esi LONG v3; // eax _DWORD *v4; // eax DWORD v5; // eax LONG v6; // eax _DWORD *v7; // eax DWORD v8; // eax LONG v9; // eax _DWORD *v10; // eax DWORD v11; // eax LONG v12; // eax _DWORD *v13; // eax LONG v14; // eax v2 = this; if ( a2 ) { this->LockCount = (LONG)&unk_9A7F00; this->OwningThread = &unk_9A7EF8; this->SpinCount = (DWORD)&unk_9A7EF0; this[1].LockCount = (LONG)&unk_9A7EE8; this[1].OwningThread = &unk_9A7EE0; this[1].SpinCount = (DWORD)&unk_9A7ED8; this[2].LockCount = (LONG)&unk_9A7ED0; this[2].OwningThread = &unk_9A7EC8; this[2].SpinCount = (DWORD)&unk_9A7EC0; this[3].LockCount = (LONG)&unk_9A7EB8; this[3].OwningThread = &unk_9A7EB0; this[6].LockCount = (LONG)&CefBase::`vftable'; } v3 = this->LockCount; this->DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&CefClient::`vftable'; *(LONG *)((char *)&this->LockCount + *(_DWORD *)(v3 + 4)) = (LONG)&CefClient::`vftable'; v4 = this->OwningThread; this->RecursionCount = (LONG)&CefContextMenuHandler::`vftable'; *(HANDLE *)((char *)&this->OwningThread + v4[1]) = &CefContextMenuHandler::`vftable'; v5 = this->SpinCount; this->LockSemaphore = &CefDisplayHandler::`vftable'; *(DWORD *)((char *)&this->SpinCount + *(_DWORD *)(v5 + 4)) = (DWORD)&CefDisplayHandler::`vftable'; v6 = this[1].LockCount; this[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&CefDownloadHandler::`vftable'; *(LONG *)((char *)&this[1].LockCount + *(_DWORD *)(v6 + 4)) = (LONG)&CefDownloadHandler::`vftable'; v7 = this[1].OwningThread; this[1].RecursionCount = (LONG)&CefDragHandler::`vftable'; *(HANDLE *)((char *)&this[1].OwningThread + v7[1]) = &CefDragHandler::`vftable'; v8 = this[1].SpinCount; this[1].LockSemaphore = &CefGeolocationHandler::`vftable'; *(DWORD *)((char *)&this[1].SpinCount + *(_DWORD *)(v8 + 4)) = (DWORD)&CefGeolocationHandler::`vftable'; v9 = this[2].LockCount; this[2].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&CefKeyboardHandler::`vftable'; *(LONG *)((char *)&this[2].LockCount + *(_DWORD *)(v9 + 4)) = (LONG)&CefKeyboardHandler::`vftable'; v10 = this[2].OwningThread; this[2].RecursionCount = (LONG)&CefLifeSpanHandler::`vftable'; *(HANDLE *)((char *)&this[2].OwningThread + v10[1]) = &CefLifeSpanHandler::`vftable'; v11 = this[2].SpinCount; this[2].LockSemaphore = &CefLoadHandler::`vftable'; *(DWORD *)((char *)&this[2].SpinCount + *(_DWORD *)(v11 + 4)) = (DWORD)&CefLoadHandler::`vftable'; v12 = this[3].LockCount; this[3].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&CefRequestHandler::`vftable'; *(LONG *)((char *)&this[3].LockCount + *(_DWORD *)(v12 + 4)) = (LONG)&CefRequestHandler::`vftable'; v13 = this[3].OwningThread; this[3].RecursionCount = (LONG)&CefRenderHandler::`vftable'; *(HANDLE *)((char *)&this[3].OwningThread + v13[1]) = &CefRenderHandler::`vftable'; v14 = this->LockCount; this->DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&MyCefHandler::`vftable'; this->RecursionCount = (LONG)&MyCefHandler::`vftable'; this->LockSemaphore = &MyCefHandler::`vftable'; this[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&MyCefHandler::`vftable'; this[1].RecursionCount = (LONG)&MyCefHandler::`vftable'; this[1].LockSemaphore = &MyCefHandler::`vftable'; this[2].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&MyCefHandler::`vftable'; this[2].RecursionCount = (LONG)&MyCefHandler::`vftable'; this[2].LockSemaphore = &MyCefHandler::`vftable'; this[3].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)&MyCefHandler::`vftable'; this[3].RecursionCount = (LONG)&MyCefHandler::`vftable'; *(LONG *)((char *)&this->LockCount + *(_DWORD *)(v14 + 4)) = (LONG)&MyCefHandler::`vftable'; *(PRTL_CRITICAL_SECTION_DEBUG *)((char *)&this->DebugInfo + *(_DWORD *)(this->LockCount + 4)) = (PRTL_CRITICAL_SECTION_DEBUG)(*(_DWORD *)(this->LockCount + 4) - 144); LOBYTE(this[3].LockSemaphore) = 0; this[3].SpinCount = 0; sub_778C70(this + 4); v2[5].DebugInfo = 0; v2[5].LockCount = 0; v2[5].RecursionCount = 0; v2[5].SpinCount = 0; return v2; } // 9A7B28: using guessed type void *CefBase::`vftable'; // 9A7B3C: using guessed type void *CefClient::`vftable'; // 9A7B54: using guessed type void *CefClient::`vftable'; // 9A7B94: using guessed type void *CefContextMenuHandler::`vftable'; // 9A7BA8: using guessed type void *CefContextMenuHandler::`vftable'; // 9A7BBC: using guessed type void *CefDisplayHandler::`vftable'; // 9A7BD0: using guessed type void *CefDisplayHandler::`vftable'; // 9A7BF0: using guessed type void *CefDownloadHandler::`vftable'; // 9A7C04: using guessed type void *CefDownloadHandler::`vftable'; // 9A7C10: using guessed type void *CefDragHandler::`vftable'; // 9A7C24: using guessed type void *CefDragHandler::`vftable'; // 9A7C30: using guessed type void *CefGeolocationHandler::`vftable'; // 9A7C44: using guessed type void *CefGeolocationHandler::`vftable'; // 9A7C50: using guessed type void *CefKeyboardHandler::`vftable'; // 9A7C64: using guessed type void *CefKeyboardHandler::`vftable'; // 9A7C70: using guessed type void *CefLifeSpanHandler::`vftable'; // 9A7C84: using guessed type void *CefLifeSpanHandler::`vftable'; // 9A7C9C: using guessed type void *CefLoadHandler::`vftable'; // 9A7CB0: using guessed type void *CefLoadHandler::`vftable'; // 9A7CC4: using guessed type void *CefRequestHandler::`vftable'; // 9A7CDC: using guessed type void *CefRequestHandler::`vftable'; // 9A7D1C: using guessed type void *CefRenderHandler::`vftable'; // 9A7D30: using guessed type void *CefRenderHandler::`vftable'; // 9A7D60: using guessed type void *MyCefHandler::`vftable'; // 9A7D74: using guessed type void *MyCefHandler::`vftable'; // 9A7DA4: using guessed type void *MyCefHandler::`vftable'; // 9A7DE4: using guessed type void *MyCefHandler::`vftable'; // 9A7DF8: using guessed type void *MyCefHandler::`vftable'; // 9A7E10: using guessed type void *MyCefHandler::`vftable'; // 9A7E1C: using guessed type void *MyCefHandler::`vftable'; // 9A7E28: using guessed type void *MyCefHandler::`vftable'; // 9A7E34: using guessed type void *MyCefHandler::`vftable'; // 9A7E40: using guessed type void *MyCefHandler::`vftable'; // 9A7E60: using guessed type void *MyCefHandler::`vftable'; // 9A7E74: using guessed type void *MyCefHandler::`vftable'; //----- (00407100) -------------------------------------------------------- int __thiscall sub_407100(_DWORD *this) { _DWORD *v1; // esi int v2; // eax void *v3; // eax int result; // eax int v5; // esi v1 = this; v2 = *(this - 36); *(this - 37) = &MyCefHandler::`vftable'; *(this - 35) = &MyCefHandler::`vftable'; *(this - 33) = &MyCefHandler::`vftable'; *(this - 31) = &MyCefHandler::`vftable'; *(this - 29) = &MyCefHandler::`vftable'; *(this - 27) = &MyCefHandler::`vftable'; *(this - 25) = &MyCefHandler::`vftable'; *(this - 23) = &MyCefHandler::`vftable'; *(this - 21) = &MyCefHandler::`vftable'; *(this - 19) = &MyCefHandler::`vftable'; *(this - 17) = &MyCefHandler::`vftable'; *(_DWORD *)((char *)this + *(_DWORD *)(v2 + 4) - 144) = &MyCefHandler::`vftable'; *(_DWORD *)((char *)this + *(_DWORD *)(*(this - 36) + 4) - 148) = *(_DWORD *)(*(this - 36) + 4) - 144; v3 = (void *)*(this - 7); if ( v3 ) operator delete(v3); *(v1 - 7) = 0; *(v1 - 6) = 0; *(v1 - 5) = 0; result = unknown_libname_18((LPCRITICAL_SECTION)(v1 - 13)); v5 = *(v1 - 14); if ( v5 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(); return result; } // 9A7D60: using guessed type void *MyCefHandler::`vftable'; // 9A7D74: using guessed type void *MyCefHandler::`vftable'; // 9A7DA4: using guessed type void *MyCefHandler::`vftable'; // 9A7DE4: using guessed type void *MyCefHandler::`vftable'; // 9A7DF8: using guessed type void *MyCefHandler::`vftable'; // 9A7E10: using guessed type void *MyCefHandler::`vftable'; // 9A7E1C: using guessed type void *MyCefHandler::`vftable'; // 9A7E28: using guessed type void *MyCefHandler::`vftable'; // 9A7E34: using guessed type void *MyCefHandler::`vftable'; // 9A7E40: using guessed type void *MyCefHandler::`vftable'; // 9A7E60: using guessed type void *MyCefHandler::`vftable'; // 9A7E74: using guessed type void *MyCefHandler::`vftable'; //----- (00407220) -------------------------------------------------------- int __thiscall sub_407220(int this, int a2) { int v2; // esi struct _RTL_CRITICAL_SECTION *v3; // ebx int v4; // eax int v5; // ecx int v6; // edi int v7; // esi int result; // eax v2 = this; v3 = (struct _RTL_CRITICAL_SECTION *)(this + 40); sub_778CA0((LPCRITICAL_SECTION)(this + 40)); v4 = a2; if ( a2 ) { (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(); v4 = a2; } v5 = *(_DWORD *)(v2 + 36); *(_DWORD *)(v2 + 36) = a2; if ( v5 ) { (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v4 = a2; } v6 = v4; if ( v4 ) { v7 = v4 + 4; (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)v7 + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)v7 + 4) + v6 + 4); } sub_778CB0(v3); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } //----- (00407310) -------------------------------------------------------- int __thiscall sub_407310(int this, int a2) { int v2; // esi struct _RTL_CRITICAL_SECTION *v3; // ebx int v4; // eax int result; // eax v2 = this; v3 = (struct _RTL_CRITICAL_SECTION *)(this + 40); sub_778CA0((LPCRITICAL_SECTION)(this + 40)); v4 = *(_DWORD *)(v2 + 36); *(_DWORD *)(v2 + 36) = 0; if ( v4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(); if ( a2 ) { (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); } cef_shutdown(); sub_778CB0(v3); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } // 778570: using guessed type int cef_shutdown(void); //----- (00407410) -------------------------------------------------------- int __stdcall sub_407410(int a1, int a2) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } //----- (00407490) -------------------------------------------------------- char __stdcall sub_407490(int a1, int a2, int a3, int a4) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (004074C0) -------------------------------------------------------- char __stdcall sub_4074C0(int a1, int a2, int a3) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (004074F0) -------------------------------------------------------- char __stdcall sub_4074F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } //----- (00407570) -------------------------------------------------------- char __stdcall sub_407570(int a1) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (004075A0) -------------------------------------------------------- int __stdcall sub_4075A0(int a1) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (004075C0) -------------------------------------------------------- char __stdcall sub_4075C0(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (004075F0) -------------------------------------------------------- char __stdcall sub_4075F0(int a1, int a2) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return 0; } //----- (00407620) -------------------------------------------------------- char __stdcall sub_407620(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } //----- (004076A0) -------------------------------------------------------- int __stdcall sub_4076A0(int a1, int a2) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (004076C0) -------------------------------------------------------- int __stdcall sub_4076C0(int a1, int a2, int a3, int a4, int a5) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (004076E0) -------------------------------------------------------- char __stdcall sub_4076E0(int a1, int a2, int a3, int a4) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } //----- (00407770) -------------------------------------------------------- int __stdcall sub_407770(int a1, int a2, int a3, int a4) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); result = a3; if ( a3 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return result; } //----- (00407800) -------------------------------------------------------- int __stdcall sub_407800(int a1, int a2, int a3) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (00407820) -------------------------------------------------------- int __thiscall sub_407820(int *this) { int result; // eax result = *this; if ( *this ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); return result; } //----- (00407840) -------------------------------------------------------- char __stdcall sub_407840(int a1, int a2, int a3) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } //----- (004078C0) -------------------------------------------------------- int __stdcall sub_4078C0(int a1, int a2, int a3, int a4) { int result; // eax result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return result; } //----- (004078E0) -------------------------------------------------------- int __stdcall sub_4078E0(int a1, int a2, int a3) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } //----- (00407960) -------------------------------------------------------- int __stdcall sub_407960(int a1, int a2, int a3, int a4, int a5) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return result; } //----- (004079E0) -------------------------------------------------------- int __stdcall sub_4079E0(int a1, int a2, int a3, int a4) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = a4; if ( a4 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return result; } //----- (00407A90) -------------------------------------------------------- char __stdcall sub_407A90(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return 0; } //----- (00407B60) -------------------------------------------------------- char __stdcall sub_407B60(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } //----- (00407BF0) -------------------------------------------------------- int __stdcall sub_407BF0(int a1, int a2, int a3) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); result = a3; if ( a3 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return result; } //----- (00407C80) -------------------------------------------------------- char __stdcall sub_407C80(int a1, int a2, int a3) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } //----- (00407D00) -------------------------------------------------------- char __stdcall sub_407D00(int a1, int a2, int a3, int a4) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return 0; } //----- (00407D80) -------------------------------------------------------- signed int __stdcall sub_407D80(int a1, int a2, int a3, int a4) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return 1; } //----- (00407E30) -------------------------------------------------------- _DWORD *__stdcall sub_407E30(_DWORD *a1, int a2, int a3, int a4) { *a1 = 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return a1; } //----- (00407EE0) -------------------------------------------------------- char __stdcall sub_407EE0(int a1, int a2, int a3, int a4) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return 0; } //----- (00407F90) -------------------------------------------------------- _DWORD *__stdcall sub_407F90(_DWORD *a1, int a2, int a3, int a4, int a5) { *a1 = 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return a1; } //----- (00408060) -------------------------------------------------------- int __stdcall sub_408060(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { int result; // eax if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = a4; if ( a4 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return result; } //----- (00408110) -------------------------------------------------------- char __stdcall sub_408110(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); if ( a8 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a8 + 4) + 4) + a8 + 4) + 4))(); return 0; } //----- (004081A0) -------------------------------------------------------- char __stdcall sub_4081A0(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return 0; } //----- (00408220) -------------------------------------------------------- char __stdcall sub_408220(int a1, int a2, int a3, int a4, int a5) { if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return 0; } //----- (004082B0) -------------------------------------------------------- _DWORD *__stdcall sub_4082B0(_DWORD *a1) { _DWORD *result; // eax result = a1; *a1 = 0; return result; } //----- (004082D0) -------------------------------------------------------- _DWORD *__thiscall sub_4082D0(_DWORD *this, char a2) { _DWORD *v2; // ecx _DWORD *v3; // esi v2 = (_DWORD *)((char *)this - *(this - 1)); v3 = v2 - 37; sub_407100(v2); v3[37] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; //----- (004083B0) -------------------------------------------------------- char *sub_4083B0() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACAB50; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004083D0) -------------------------------------------------------- int __thiscall sub_4083D0(_DWORD **this) { return (*(int (**)(void))(*this[86] + 452))(); } //----- (00408400) -------------------------------------------------------- int __thiscall sub_408400(_DWORD *this) { int v1; // ecx int result; // eax v1 = this[86]; if ( v1 ) result = (*(int (**)(void))(*(_DWORD *)v1 + 480))(); return result; } //----- (00408420) -------------------------------------------------------- int __thiscall sub_408420(_DWORD *this) { int v1; // ecx int result; // eax v1 = this[86]; if ( v1 ) result = (*(int (__stdcall **)(void *))(*(_DWORD *)v1 + 460))(&unk_9A7F26); return result; } //----- (00408440) -------------------------------------------------------- int __thiscall sub_408440(int this, char a2) { int result; // eax int v3; // ecx if ( a2 ) { result = 65534; *(_WORD *)(this + 28) &= 0xFFFEu; v3 = *(_DWORD *)(this + 344); if ( v3 ) result = (*(int (**)(void))(*(_DWORD *)v3 + 480))(); } else { *(_WORD *)(this + 28) |= 1u; } return result; } //----- (00408480) -------------------------------------------------------- int __thiscall sub_408480(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v4; // ecx int result; // eax int v6; // ecx v2 = a2; v3 = this; v4 = this[92]; if ( v4 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 240))(a2); result = (*(int (__stdcall **)(int))(*(_DWORD *)v3[92] + 256))(a2); } v6 = v3[93]; if ( v6 ) { LOBYTE(v2) = (_BYTE)a2 == 0; (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 240))(v2); result = (*(int (__stdcall **)(int))(*(_DWORD *)v3[93] + 256))(v2); } return result; } //----- (004084F0) -------------------------------------------------------- LONG __thiscall sub_4084F0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // esi int v4; // esi int v5; // esi int v6; // esi v1 = this; *this = &CharCreateClassWin::`vftable'; this[58] = &CharCreateClassWin::`vftable'; v2 = this[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = v1 + 94; *v3 = &NiTMap>::`vftable'; sub_940360(v1 + 94); *v3 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 94); operator delete[]((void *)v1[96]); v4 = v1[93]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[92]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[86]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); return sub_8F10F0(v1); } // 9A8034: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A8058: using guessed type void *NiTMap>::`vftable'; // 9A8080: using guessed type void *CharCreateClassWin::`vftable'; // 9A809C: using guessed type void *CharCreateClassWin::`vftable'; //----- (00408640) -------------------------------------------------------- int __thiscall sub_408640(int *this, volatile LONG *a2) { int *v2; // esi int result; // eax int v4; // ebx volatile LONG *v5; // edi int v6; // eax int v7; // eax volatile LONG *v8; // edi v2 = this; result = this[91]; v4 = (int)a2; if ( (volatile LONG *)result != a2 ) { v5 = 0; a2 = 0; if ( result == 26 ) { v6 = this[92]; if ( v6 ) { v5 = (volatile LONG *)this[92]; a2 = (volatile LONG *)this[92]; InterlockedIncrement((volatile LONG *)(v6 + 4)); } } else { sub_455570(this + 94, result, (int *)&a2); v5 = a2; } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v5 + 532))(v5, 0); v2[91] = v4; if ( v4 == 26 ) { if ( v5 != (volatile LONG *)v2[92] ) { if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); v7 = v2[92]; a2 = (volatile LONG *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } } else { sub_455570(v2 + 94, v4, (int *)&a2); } sub_455570(v2 + 94, v4, (int *)&a2); v8 = a2; (*(void (__thiscall **)(volatile LONG *, signed int))(*a2 + 532))(a2, 1); sub_40B430((_DWORD *)v2[74], v4); sub_40BE10(v2[74]); result = InterlockedDecrement(v8 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); } return result; } //----- (00408780) -------------------------------------------------------- _DWORD *__thiscall sub_408780(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CharCreateClassWin::`vftable'; v1[58] = &CharCreateClassWin::`vftable'; v1[86] = 0; v1[92] = 0; v1[93] = 0; v1[95] = 37; v1[94] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[97] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[95]; v1[96] = v2; memset(v2, 0, v3); v1[94] = &NiTMap>::`vftable'; v1[91] = 1; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A8034: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A8058: using guessed type void *NiTMap>::`vftable'; // 9A8080: using guessed type void *CharCreateClassWin::`vftable'; // 9A809C: using guessed type void *CharCreateClassWin::`vftable'; //----- (00408870) -------------------------------------------------------- char __thiscall sub_408870(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG *v10; // edi float v11; // ecx volatile LONG *v12; // eax float v13; // ecx volatile LONG *v14; // eax float v15; // ecx volatile LONG *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // edi volatile LONG *v20; // ebx volatile LONG **v21; // edi volatile LONG *v22; // eax volatile LONG *v23; // edi volatile LONG *v24; // ebx volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG *v27; // edi volatile LONG *v28; // ebx void **v29; // edi const char *v30; // eax volatile LONG *v31; // edi int v32; // eax volatile LONG *v33; // edx int v34; // eax void (__thiscall ***v35)(_DWORD, signed int); // esi int v36; // [esp+24h] [ebp-40h] int v37[5]; // [esp+38h] [ebp-2Ch] int v38; // [esp+4Ch] [ebp-18h] int v39; // [esp+50h] [ebp-14h] int v40; // [esp+54h] [ebp-10h] int v41; // [esp+60h] [ebp-4h] v2 = this; v40 = 0; v3 = dword_BA6BA0; v41 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "charcreate\\CreatCharClass.nif"); sub_8F66B0(v4, (int)&v40, v3); v5 = v40; if ( v40 ) { v8 = sub_8FB140(v40, (int)"Plane", (int)&v38, (int)&v39, 0); if ( sub_8F1440(v2, 0, 0, (int)v8, 0, a2, (int)"CharCreateClassWin", 0) ) { sub_456260(v37); LOBYTE(v41) = 1; sub_455FF0(v37, (int)v2); sub_456000(v37, v38, v39); sub_456380(v37, v40); sub_456820(v37, (int)"Plane", 0); sub_456820(v37, (int)"Plane_Name", 0); *(float *)&v10 = COERCE_FLOAT(sub_456B30(v37, 0, "Class_Fighter", 0, 3)); (*(void (__thiscall **)(volatile LONG *, signed int))(*v10 + 532))(v10, 1); v36 = (int)v10; InterlockedIncrement(v10 + 1); sub_6688B0(v2 + 94, 1, v36); *(float *)&v36 = v11; *(float *)&v12 = COERCE_FLOAT(sub_456B30(v37, 1, "Class_Archer", 0, 3)); v36 = (int)v12; if ( *(float *)&v12 != 0.0 ) InterlockedIncrement(v12 + 1); sub_6688B0(v2 + 94, 11, v36); *(float *)&v36 = v13; *(float *)&v14 = COERCE_FLOAT(sub_456B30(v37, 2, "Class_Cleric", 0, 3)); v36 = (int)v14; if ( *(float *)&v14 != 0.0 ) InterlockedIncrement(v14 + 1); sub_6688B0(v2 + 94, 6, v36); *(float *)&v36 = v15; *(float *)&v16 = COERCE_FLOAT(sub_456B30(v37, 3, "Class_Mage", 0, 3)); v36 = (int)v16; if ( *(float *)&v16 != 0.0 ) InterlockedIncrement(v16 + 1); sub_6688B0(v2 + 94, 16, v36); *(float *)&v17 = COERCE_FLOAT(sub_456B30(v37, 4, "Class_Joker", 0, 3)); v36 = (int)v17; if ( *(float *)&v17 != 0.0 ) InterlockedIncrement(v17 + 1); sub_6688B0(v2 + 94, 21, v36); sub_456820(v37, (int)"Job", 0); v18 = sub_456540(v37, (int)"Name", 16, 1342177280, 0, 0); v19 = v2[86]; v20 = v18; if ( v19 != v18 ) { if ( v19 && !InterlockedDecrement(v19 + 1) && v19 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); v2[86] = v20; if ( v20 ) InterlockedIncrement(v20 + 1); } sub_45A180((_DWORD **)v2[86], 5); v21 = sub_8FB140(v40, (int)"Class_SentinelNor", (int)&v38, (int)&v39, 0); sub_8FB650(v21, v40, (int)"Class_SentinelClick"); sub_8FB650(v21, v40, (int)"Class_SentinelOver"); v22 = sub_8FE0F0(v38, v39, (int)v21, (int)v2, 5, 0, 0); v23 = v2[92]; v24 = v22; if ( v23 != v22 ) { if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v23)(v23, 1); v2[92] = v24; if ( v24 ) InterlockedIncrement(v24 + 1); } (*(void (__stdcall **)(_DWORD))(*v2[92] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[92] + 256))(0); v25 = sub_8FB140(v40, (int)"Class_SentinelDisable", (int)&v38, (int)&v39, 0); v26 = sub_8F3EB0(v38, v39, (int)v25, (int)v2, 0, 0); v27 = v2[93]; v28 = v26; if ( v27 != v26 ) { if ( v27 && !InterlockedDecrement(v27 + 1) && v27 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v27)(v27, 1); v2[93] = v28; if ( v28 ) InterlockedIncrement(v28 + 1); } (*(void (__stdcall **)(signed int))(*v2[93] + 240))(1); (*(void (__stdcall **)(signed int))(*v2[93] + 256))(1); *((_DWORD *)v2[93] + 68) = dword_AD01E8; v29 = (void **)v2[93]; v30 = sub_4090F0(-876961310); sub_8F2EA0(v29, v30); sub_456820(v37, (int)"Job01", 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.0); v31 = *v2; v32 = (*((int (__thiscall **)(volatile LONG **))*v2 + 42))(v2); v33 = *v2; v36 = v32 + 10; v34 = (*((int (__thiscall **)(volatile LONG **, int))v33 + 41))(v2, v32 + 10); (*((void (__thiscall **)(volatile LONG **, int))v31 + 77))(v2, v34); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 130))(v2, 0); LOBYTE(v41) = 0; sub_4562E0(v37); v41 = -1; if ( v40 ) { v35 = (void (__thiscall ***)(_DWORD, signed int))v40; if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) ) { if ( v35 ) (**v35)(v35, 1); } } result = 1; } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v40; v41 = -1; if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } } else { if ( off_AC0554 ) { off_AC0554("CreatCharClass load fail", "LoadFail", 0); v5 = v40; } v41 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00408DC0) -------------------------------------------------------- int __thiscall sub_408DC0(int *this, int a2, int a3) { int result; // eax result = a2; switch ( a2 ) { case 0: result = sub_408640(this, (volatile LONG *)1); break; case 1: result = sub_408640(this, (volatile LONG *)0xB); break; case 2: result = sub_408640(this, (volatile LONG *)6); break; case 3: result = sub_408640(this, (volatile LONG *)0x10); break; case 4: result = sub_408640(this, (volatile LONG *)0x15); break; case 5: result = sub_408640(this, (volatile LONG *)0x1A); break; default: return result; } return result; } //----- (00408E30) -------------------------------------------------------- volatile LONG *__cdecl sub_408E30(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_408780(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00408F80) -------------------------------------------------------- LONG __stdcall sub_408F80(int a1, int a2, LONG a3) { int v3; // esi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi *(_DWORD *)(a1 + 4) = a2; v3 = *(_DWORD *)(a1 + 8); result = a3; if ( v3 != a3 ) { if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = a3; } *(_DWORD *)(a1 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a3; } } if ( result ) { v5 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } return result; } //----- (00409040) -------------------------------------------------------- void __thiscall sub_409040(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9A8034: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A8058: using guessed type void *NiTMap>::`vftable'; //----- (004090B0) -------------------------------------------------------- void **__thiscall sub_4090B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8034: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (004090F0) -------------------------------------------------------- const CHAR *__cdecl sub_4090F0(int a1) { int v1; // eax size_t v2; // eax void *v3; // eax _DWORD *v4; // edi int v6; // [esp+8h] [ebp-10h] const CHAR *v7; // [esp+Ch] [ebp-Ch] const CHAR *v8; // [esp+10h] [ebp-8h] const CHAR *v9; // [esp+14h] [ebp-4h] v7 = &byte_9A8050; v8 = &byte_9A8050; v9 = &byte_9A8050; v6 = a1; v1 = *(_DWORD *)(dword_AC9C7C + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = bsearch(&v6, dword_ACB3A8, v2, 0x10u, sub_4508B0); v4 = v3; if ( !v3 ) return &byte_9A8050; if ( strcmp(*((const char **)v3 + 2), "None") ) sub_6BA890(&dword_AB6520, v4[2]); if ( strcmp((const char *)v4[3], "None") ) sub_6BA680(&dword_AB6520, v4[3]); return (const CHAR *)v4[1]; } // AC9C7C: using guessed type int dword_AC9C7C; //----- (004091D0) -------------------------------------------------------- void **__thiscall sub_4091D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8034: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A8058: using guessed type void *NiTMap>::`vftable'; //----- (00409250) -------------------------------------------------------- void *__thiscall sub_409250(void *this, char a2) { void *v2; // esi v2 = this; sub_4084F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00409290) -------------------------------------------------------- char __thiscall sub_409290(_BYTE *this, char a2) { char result; // al result = this[424]; if ( result != a2 ) { this[425] = result; this[424] = a2; } return result; } //----- (004092B0) -------------------------------------------------------- int __thiscall sub_4092B0(_DWORD *this, int a2, int a3) { int result; // eax if ( !a2 ) { *(_DWORD *)(this[86] + 344) = *(_DWORD *)(this[87] + 300); result = sub_465130((_DWORD *)this[86]); } return result; } //----- (004092E0) -------------------------------------------------------- char __thiscall sub_4092E0(_DWORD **this, int a2) { _DWORD **v2; // esi char result; // al v2 = this; result = (*(int (__stdcall **)(LONG, LONG))(*this[86] + 332))(pt.x, pt.y); if ( result ) { result = dword_BA6A68; if ( dword_BA6A68 <= 0 ) { if ( dword_BA6A68 < 0 ) result = sub_463C50(v2[87]); } else { result = sub_463C10(v2[87]); } } return result; } // BA6A68: using guessed type int dword_BA6A68; //----- (00409380) -------------------------------------------------------- int __thiscall sub_409380(char *this, char a2) { char *v2; // ebx int v3; // esi signed int v4; // edi int v5; // esi signed int v6; // edi int result; // eax int v8; // esi signed int v9; // edi int v10; // esi signed int v11; // edi v2 = this; if ( a2 == 26 ) { v3 = (int)(this + 380); v4 = 3; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); v3 += 4; --v4; } while ( v4 ); v5 = (int)(v2 + 396); v6 = 3; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0); v5 += 4; --v6; } while ( v6 ); } else { v8 = (int)(this + 372); v9 = 5; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v8 + 256))(1); v8 += 4; --v9; } while ( v9 ); v10 = (int)(v2 + 396); v11 = 3; do { result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v10 + 256))(1); v10 += 4; --v11; } while ( v11 ); } return result; } //----- (00409420) -------------------------------------------------------- LONG __thiscall sub_409420(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; *this = &CharCreateDescritWin::`vftable'; this[58] = &CharCreateDescritWin::`vftable'; v2 = (int)(this + 102); *(_DWORD *)v2 = &NiTMap>::`vftable'; sub_940360(this + 102); *(_DWORD *)v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); `eh vector destructor iterator'(v1 + 98, 4u, 4, sub_410C00); `eh vector destructor iterator'(v1 + 93, 4u, 5, sub_410C00); `eh vector destructor iterator'(v1 + 88, 4u, 5, sub_410C00); v3 = v1[87]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[86]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9A8480: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A84A0: using guessed type void *NiTMap>::`vftable'; // 9A84C0: using guessed type void *CharCreateDescritWin::`vftable'; // 9A84DC: using guessed type void *CharCreateDescritWin::`vftable'; //----- (00409560) -------------------------------------------------------- _DWORD *__thiscall sub_409560(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST0C_4 v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CharCreateDescritWin::`vftable'; v1[58] = &CharCreateDescritWin::`vftable'; v1[86] = 0; v1[87] = 0; `eh vector constructor iterator'( v1 + 88, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 93, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 98, 4u, 4, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[103] = 37; v1[102] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[105] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[103]; v1[104] = v2; memset(v2, 0, v3); v1[102] = &NiTMap>::`vftable'; *((_WORD *)v1 + 212) = 257; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A8480: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A84A0: using guessed type void *NiTMap>::`vftable'; // 9A84C0: using guessed type void *CharCreateDescritWin::`vftable'; // 9A84DC: using guessed type void *CharCreateDescritWin::`vftable'; //----- (00409680) -------------------------------------------------------- LONG __thiscall sub_409680(int this, unsigned __int8 a2) { _DWORD *v2; // esi int v3; // ST00_4 int v4; // esi LONG result; // eax int v6; // [esp+8h] [ebp-10h] int v7; // [esp+14h] [ebp-4h] v6 = 0; v2 = (_DWORD *)(this + 408); v3 = *(unsigned __int8 *)(this + 425); v7 = 0; sub_455570((_DWORD *)(this + 408), v3, &v6); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 256))(0); sub_455570(v2, a2, &v6); v4 = v6; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 256))(v6, 1); v7 = -1; result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); return result; } //----- (00409730) -------------------------------------------------------- int __thiscall sub_409730(char *this, char a2) { unsigned __int8 v2; // bl char *v3; // esi int v4; // esi int v5; // eax const CHAR *v6; // eax int result; // eax int v8; // [esp+8h] [ebp-8h] char v9; // [esp+Eh] [ebp-2h] char v10; // [esp+Fh] [ebp-1h] v2 = a2; v3 = this; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v10 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v10 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v10 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v10 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v10 = 21; break; case 0x1A: case 0x1B: v10 = 26; break; default: v10 = 0; break; } v8 = 0; v9 = sub_40A760(a2); v4 = (int)(v3 + 352); do { if ( v10 == v9 ) { v5 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v2); if ( v5 ) v6 = (const CHAR *)(v5 + 21); else v6 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)v4 + 472))(v6); v2 = a2 + v8 + 1; } result = v8 + 1; v4 += 4; v8 = result; } while ( result < 5 ); return result; } // AC9C84: using guessed type int dword_AC9C84; //----- (00409860) -------------------------------------------------------- volatile LONG *__cdecl sub_409860(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1ACu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_409560(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00409990) -------------------------------------------------------- int __thiscall sub_409990(_DWORD *this, char *a2) { char *v2; // ebx _DWORD *v3; // edi int v4; // eax int v5; // ecx int v6; // edx int v7; // eax _DWORD *v8; // esi double v9; // st7 char *i; // esi double v11; // st7 _DWORD *v12; // ecx int v13; // eax _DWORD *v15; // [esp+10h] [ebp-320h] _DWORD *v16; // [esp+18h] [ebp-318h] int v17; // [esp+1Ch] [ebp-314h] char v18; // [esp+20h] [ebp-310h] char v19; // [esp+21h] [ebp-30Fh] char v20; // [esp+120h] [ebp-210h] char v21; // [esp+121h] [ebp-20Fh] char v22; // [esp+220h] [ebp-110h] char v23; // [esp+221h] [ebp-10Fh] v2 = a2; v3 = this; v16 = this; v22 = 0; memset(&v23, 0, 0xFFu); v20 = 0; memset(&v21, 0, 0xFFu); v18 = 0; memset(&v19, 0, 0xFFu); v4 = v3[86]; v5 = (*(_DWORD *)(v4 + 300) - *(_DWORD *)(v4 + 296)) >> 2; if ( v5 ) { v6 = *(_DWORD *)(v4 + 296); if ( (*(_DWORD *)(*(_DWORD *)v6 + 336) - *(_DWORD *)(*(_DWORD *)v6 + 332)) >> 2 ) v7 = **(_DWORD **)(*(_DWORD *)v6 + 332); else v7 = 0; v17 = v7; v5 = v7; } else { v17 = 0; } v8 = *(_DWORD **)(*(_DWORD *)(v5 + 288) + 312); v15 = v8; if ( v8 ) { v9 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v5 + 144))() / 1.049999952316284; for ( i = sub_900720(v8, a2, (signed int)v9, 1); i; i = sub_900720(v15, i, (signed int)v11, (unsigned int)&v20) ) { strncpy(&v22, v2, i - v2); *(&v22 + i - v2) = 0; sprintf(&v20, "%s%s", &v18, &v22); v3 = v16; ((void (__thiscall *)(_DWORD))loc_466CA0)(v16[86]); sub_464D00((_DWORD *)v16[86], 0); v2 = i; v11 = (double)(unsigned int)(*(int (__stdcall **)(signed int))(*(_DWORD *)v17 + 144))(1) / 1.049999952316284; } v12 = (_DWORD *)v3[87]; if ( v12 ) { v13 = v3[86]; if ( v13 ) { sub_4638F0(v12, *(_DWORD *)(v13 + 336)); *(_DWORD *)(v3[86] + 344) = *(_DWORD *)(v3[87] + 300); sub_465130((_DWORD *)v3[86]); } } } return sub_465130((_DWORD *)v3[86]); } //----- (00409BE0) -------------------------------------------------------- int __thiscall sub_409BE0(_DWORD **this, unsigned __int8 a2) { _DWORD *v2; // esi int result; // eax char *v4; // eax char *v5; // eax char *v6; // eax char *v7; // eax char *v8; // eax char *v9; // eax char *v10; // eax char *v11; // eax char *v12; // eax char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax char *v19; // eax char *v20; // eax char *v21; // eax v2 = this; sub_466A50(this[86]); result = a2 - 1; switch ( a2 ) { case 1u: v4 = (char *)sub_40A910(-771476147); sub_409990(v2, v4); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v5 = (char *)sub_40A910(-771410611); sub_409990(v2, v5); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v6 = (char *)sub_40A910(-771345075); sub_409990(v2, v6); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; case 6u: v10 = (char *)sub_40A910(-607455161); sub_409990(v2, v10); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v11 = (char *)sub_40A910(-607454905); sub_409990(v2, v11); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v12 = (char *)sub_40A910(-607454649); sub_409990(v2, v12); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; case 0xBu: v7 = (char *)sub_40A910(-639634883); sub_409990(v2, v7); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v8 = (char *)sub_40A910(-639634627); sub_409990(v2, v8); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v9 = (char *)sub_40A910(-639634371); sub_409990(v2, v9); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; case 0x10u: v13 = (char *)sub_40A910(-1361123112); sub_409990(v2, v13); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v14 = (char *)sub_40A910(-1344345896); sub_409990(v2, v14); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v15 = (char *)sub_40A910(-1327568680); sub_409990(v2, v15); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; case 0x15u: v16 = (char *)sub_40A910(-604844271); sub_409990(v2, v16); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v17 = (char *)sub_40A910(-604844270); sub_409990(v2, v17); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v18 = (char *)sub_40A910(-604844269); sub_409990(v2, v18); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; case 0x1Au: v19 = (char *)sub_4090F0(658898497); sub_409990(v2, v19); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v20 = (char *)sub_4090F0(658898498); sub_409990(v2, v20); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); v21 = (char *)sub_4090F0(658898499); sub_409990(v2, v21); result = ((int (__thiscall *)(_DWORD, const char *))loc_466CA0)(v2[86], "\n"); break; default: return result; } return result; } //----- (00409F00) -------------------------------------------------------- int __thiscall sub_409F00(int this) { int v1; // esi v1 = this; sub_409BE0((_DWORD **)this, *(_BYTE *)(this + 424)); sub_409680(v1, *(_BYTE *)(v1 + 424)); sub_409380((char *)v1, *(_BYTE *)(v1 + 424)); return sub_409730((char *)v1, *(_BYTE *)(v1 + 424)); } //----- (00409F40) -------------------------------------------------------- char __thiscall sub_409F40(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v9; // eax float v10; // ecx volatile LONG *v11; // eax volatile LONG *v12; // ebx volatile LONG *v13; // ebx volatile LONG *v14; // ebx volatile LONG *v15; // ebx volatile LONG *v16; // ebx int v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // edi volatile LONG *v20; // ebx volatile LONG **v21; // eax int **v22; // ebx volatile LONG *v23; // eax volatile LONG *v24; // edi int v25; // edi int v26; // eax volatile LONG *v27; // eax volatile LONG *v28; // edi volatile LONG *v29; // ebx _DWORD *v30; // edi _DWORD *v31; // edi volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG *v34; // edi volatile LONG **v35; // eax int v36; // eax int v37; // edi int *v38; // edi int v39; // ebx int v40; // eax int v41; // edx int v42; // eax volatile LONG *v43; // edi void (__thiscall ***v44)(_DWORD, signed int); // esi int v45; // [esp+44h] [ebp-ACh] volatile LONG *v46; // [esp+48h] [ebp-A8h] void *v47; // [esp+58h] [ebp-98h] int v48; // [esp+5Ch] [ebp-94h] int v49; // [esp+60h] [ebp-90h] char v50; // [esp+64h] [ebp-8Ch] char v51; // [esp+68h] [ebp-88h] int v52; // [esp+6Ch] [ebp-84h] int v53; // [esp+70h] [ebp-80h] int v54; // [esp+74h] [ebp-7Ch] int v55; // [esp+78h] [ebp-78h] int v56[5]; // [esp+7Ch] [ebp-74h] int v57; // [esp+90h] [ebp-60h] int v58; // [esp+94h] [ebp-5Ch] volatile LONG **v59; // [esp+98h] [ebp-58h] int v60; // [esp+9Ch] [ebp-54h] int *v61; // [esp+A0h] [ebp-50h] void *v62; // [esp+A4h] [ebp-4Ch] int v63; // [esp+B4h] [ebp-3Ch] unsigned int v64; // [esp+B8h] [ebp-38h] char v65; // [esp+C0h] [ebp-30h] int v66; // [esp+C1h] [ebp-2Fh] int v67; // [esp+C5h] [ebp-2Bh] int v68; // [esp+C9h] [ebp-27h] int v69; // [esp+CDh] [ebp-23h] int v70; // [esp+D1h] [ebp-1Fh] int v71; // [esp+D5h] [ebp-1Bh] int v72; // [esp+D9h] [ebp-17h] __int16 v73; // [esp+DDh] [ebp-13h] char v74; // [esp+DFh] [ebp-11h] int v75; // [esp+ECh] [ebp-4h] v2 = (int)this; v60 = 0; v3 = dword_BA6BA0; v75 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "charcreate\\ClassTree.nif"); sub_8F66B0(v4, (int)&v60, v3); v5 = v60; if ( !v60 ) { if ( off_AC0554 ) { off_AC0554("ClassTree.nif Load Fail", "LoadFail", v60); v5 = v60; } v75 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v9 = sub_8FB140(v60, (int)"Plane", (int)&v58, (int)&v57, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CharCreateDescritWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v60; v75 = -1; if ( !v60 ) return 0; v7 = (volatile LONG *)(v60 + 4); LABEL_8: if ( !InterlockedDecrement(v7) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v56); LOBYTE(v75) = 1; sub_455FF0(v56, v2); sub_456000(v56, v58, v57); sub_456380(v56, v60); *(float *)&v45 = v10; *(float *)&v61 = COERCE_FLOAT(&v45); *(float *)&v11 = COERCE_FLOAT(sub_456820(v56, (int)"ClassSmall_Fighter", 0)); v45 = (int)v11; if ( *(float *)&v11 != 0.0 ) InterlockedIncrement(v11 + 1); sub_6688B0((_DWORD *)(v2 + 408), 1, v45); *(float *)&v12 = COERCE_FLOAT(sub_456820(v56, (int)"ClassSmall_Archer", 0)); *(float *)&v61 = COERCE_FLOAT(&v45); v45 = (int)v12; if ( *(float *)&v12 != 0.0 ) InterlockedIncrement(v12 + 1); sub_6688B0((_DWORD *)(v2 + 408), 11, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD, volatile LONG *))(*v12 + 256))(v12, 0, v46); v13 = sub_456820(v56, (int)"ClassSmall_Cleric", 0); *(float *)&v61 = COERCE_FLOAT(&v46); v46 = v13; if ( v13 ) InterlockedIncrement(v13 + 1); sub_6688B0((_DWORD *)(v2 + 408), 6, (int)v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 256))(v13, 0); v14 = sub_456820(v56, (int)"ClassSmall_Mage", 0); *(float *)&v61 = COERCE_FLOAT(&v46); v46 = v14; if ( v14 ) InterlockedIncrement(v14 + 1); sub_6688B0((_DWORD *)(v2 + 408), 16, (int)v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 256))(v14, 0); v15 = sub_456820(v56, (int)"ClassSmall_Joker", 0); *(float *)&v61 = COERCE_FLOAT(&v46); v46 = v15; if ( v15 ) InterlockedIncrement(v15 + 1); sub_6688B0((_DWORD *)(v2 + 408), 21, (int)v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 256))(v15, 0); v16 = sub_456820(v56, (int)"ClassSmall_Sentinel", 0); *(float *)&v61 = COERCE_FLOAT(&v46); v46 = v16; if ( v16 ) InterlockedIncrement(v16 + 1); sub_6688B0((_DWORD *)(v2 + 408), 26, (int)v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 256))(v16, 0); v17 = 0; v65 = 0; v66 = 0; v67 = 0; v68 = 0; v69 = 0; v70 = 0; v71 = 0; v72 = 0; v73 = 0; v74 = 0; v59 = (volatile LONG **)(v2 + 372); do { v45 = v17 + 1; v61 = (int *)(v17 + 1); sprintf(&v65, "ClassTree0%d", v17 + 1); v18 = sub_456820(v56, (int)&v65, 0); v19 = *v59; v20 = v18; if ( *v59 != v18 ) { if ( v19 && !InterlockedDecrement(v19 + 1) && v19 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); *v59 = v20; if ( v20 ) InterlockedIncrement(v20 + 1); } v17 = (int)v61; ++v59; } while ( (signed int)v61 < 5 ); v21 = 0; v22 = (int **)(v2 + 352); do { v45 = (int)v21 + 1; v59 = (volatile LONG **)((char *)v21 + 1); sprintf(&v65, "Text0%d", (char *)v21 + 1); v23 = sub_4566A0(v56, (int)&v65, (int)"-", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v24 = *v22; v61 = (int *)v23; if ( v24 != v23 ) { if ( v24 ) { if ( !InterlockedDecrement(v24 + 1) && v24 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v24)(v24, 1); v23 = v61; } *v22 = (int *)v23; if ( v23 ) InterlockedIncrement(v23 + 1); } v25 = **v22; v61 = *v22; v26 = sub_421050(0); (*(void (__thiscall **)(int *, int))(v25 + 452))(v61, v26); (*(void (__stdcall **)(_DWORD))(**v22 + 240))(0); v21 = v59; ++v22; } while ( (signed int)v59 < 5 ); *(float *)&v61 = 0.0; v59 = (volatile LONG **)(v2 + 392); do { v45 = (int)v61; sprintf(&v65, "arrow_0%d", v61); v27 = sub_456820(v56, (int)&v65, 0); v28 = *v59; v29 = v27; if ( *v59 != v27 ) { if ( v28 && !InterlockedDecrement(v28 + 1) && v28 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v28)(v28, 1); *v59 = v29; if ( v29 ) InterlockedIncrement(v29 + 1); } ++v59; v61 = (int *)((char *)v61 + 1); } while ( (signed int)v61 < 4 ); v47 = 0; v48 = 0; v49 = 0; v54 = 0; v55 = 0; LOBYTE(v75) = 2; v51 = 0; v52 = 0; v53 = 0; v30 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v47, 1); *v30 = 1; v45 = 9; v30[1] = v60; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "ColumnNor", v45); LOBYTE(v75) = 3; sub_40B060(v30 + 18, (const void **)&v62); LOBYTE(v75) = 2; if ( v64 >= 0x10 ) operator delete(v62); v31 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v47, 2); *v31 = 2; v45 = 6; v31[1] = v60; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "Column", v45); LOBYTE(v75) = 4; sub_40B060(v31 + 18, (const void **)&v62); LOBYTE(v75) = 2; if ( v64 >= 0x10 ) operator delete(v62); v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_466680(&v47, 0); v32 = sub_8FB140(v60, (int)"TextBox_ClassExp", (int)&v58, (int)&v57, 0); v33 = sub_466330(v58, v57, (int)v32, *(float *)&v2, (int **)&v47, 0, 1); v34 = *(volatile LONG **)(v2 + 344); v61 = (int *)v33; if ( v34 != v33 ) { if ( v34 ) { if ( !InterlockedDecrement(v34 + 1) && v34 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v34)(v34, 1); v33 = v61; } *(_DWORD *)(v2 + 344) = v33; if ( v33 ) InterlockedIncrement(v33 + 1); } *(_BYTE *)(*(_DWORD *)(v2 + 344) + 348) = 0; sub_465130(*(_DWORD **)(v2 + 344)); sub_464D00(*(_DWORD **)(v2 + 344), 0); sub_465130(*(_DWORD **)(v2 + 344)); v35 = sub_8FB140(v60, (int)"SlideBar_SlideBtnMiddle", (int)&v58, (int)&v57, 0); v36 = sub_464310(v60, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v35, 0, (_DWORD *)v2); v37 = *(_DWORD *)(v2 + 348); v61 = (int *)v36; if ( v37 != v36 ) { if ( v37 ) { if ( !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); v36 = (int)v61; } *(_DWORD *)(v2 + 348) = v36; if ( v36 ) InterlockedIncrement((volatile LONG *)(v36 + 4)); } *(_DWORD *)(*(_DWORD *)(v2 + 348) + 312) = 0; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; v38 = *(int **)(v2 + 348); v39 = *v38; *(float *)&v40 = COERCE_FLOAT((*(int (__thiscall **)(_DWORD))(*v38 + 168))(*(_DWORD *)(v2 + 348))); v41 = *v38; v45 = v40; v42 = (*(int (__thiscall **)(int *, int))(v41 + 164))(v38, v40); (*(void (__thiscall **)(int *, int))(v39 + 308))(v38, v42); sub_4638F0(*(_DWORD **)(v2 + 348), 4); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 1.0); v43 = *(volatile LONG **)v2; v45 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 168))(v2) - 10; *(float *)&v45 = COERCE_FLOAT((*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 164))(v2, v45)); (*((void (__thiscall **)(int, int))v43 + 77))(v2, v45); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 240))(v2, 1); LOBYTE(v75) = 1; if ( v47 ) { ((void (__cdecl *)(void *, int, char *, int *))loc_40ACF0)(v47, v48, &v50, v61); operator delete(v47); } v47 = 0; v48 = 0; v49 = 0; LOBYTE(v75) = 0; sub_4562E0(v56); v44 = (void (__thiscall ***)(_DWORD, signed int))v60; v75 = -1; if ( v60 && !InterlockedDecrement((volatile LONG *)(v60 + 4)) && v44 ) (**v44)(v44, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0040A760) -------------------------------------------------------- char __cdecl sub_40A760(char a1) { char result; // al switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: result = 1; break; case 6: case 7: case 8: case 9: case 0xA: result = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: result = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: result = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: result = 21; break; case 0x1A: case 0x1B: result = 26; break; default: result = 0; break; } return result; } //----- (0040A800) -------------------------------------------------------- void *__stdcall sub_40A800(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x9249249 || (result = operator new(28 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0040A880) -------------------------------------------------------- void **__thiscall sub_40A880(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8480: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (0040A8C0) -------------------------------------------------------- int __thiscall sub_40A8C0(_DWORD *this, unsigned int a2, unsigned int a3) { int result; // eax int v4; // eax if ( a2 >= (this[75] - this[74]) >> 2 || (v4 = *(_DWORD *)(this[74] + 4 * a2), a3 >= (*(_DWORD *)(v4 + 336) - *(_DWORD *)(v4 + 332)) >> 2) ) { result = 0; } else { result = *(_DWORD *)(*(_DWORD *)(v4 + 332) + 4 * a3); } return result; } //----- (0040A910) -------------------------------------------------------- const CHAR *__cdecl sub_40A910(int a1) { int v1; // eax size_t v2; // eax void *v3; // eax _DWORD *v4; // edi int v6; // [esp+8h] [ebp-10h] const CHAR *v7; // [esp+Ch] [ebp-Ch] const CHAR *v8; // [esp+10h] [ebp-8h] const CHAR *v9; // [esp+14h] [ebp-4h] v7 = &byte_9A8050; v8 = &byte_9A8050; v9 = &byte_9A8050; v6 = a1; v1 = *(_DWORD *)(dword_AC9C80 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = bsearch(&v6, dword_ACB3A4, v2, 0x10u, sub_4508B0); v4 = v3; if ( !v3 ) return &byte_9A8050; if ( strcmp(*((const char **)v3 + 2), "None") ) sub_6BA890(&dword_AB6520, v4[2]); if ( strcmp((const char *)v4[3], "None") ) sub_6BA680(&dword_AB6520, v4[3]); return (const CHAR *)v4[1]; } // AC9C80: using guessed type int dword_AC9C80; //----- (0040A9F0) -------------------------------------------------------- char __thiscall sub_40A9F0(_DWORD *this, int a2, size_t a3, char a4) { char result; // al if ( a3 == 1 ) { if ( this[5] >= 0x10u ) this = (_DWORD *)*this; result = a4; *((_BYTE *)this + a2) = a4; } else { if ( this[5] >= 0x10u ) this = (_DWORD *)*this; result = (unsigned int)memset((char *)this + a2, a4, a3); } return result; } //----- (0040AA30) -------------------------------------------------------- void **__thiscall sub_40AA30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8480: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9A84A0: using guessed type void *NiTMap>::`vftable'; //----- (0040AAB0) -------------------------------------------------------- const CHAR *__cdecl sub_40AAB0(unsigned __int8 a1) { int v1; // eax const CHAR *result; // eax v1 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), a1); if ( v1 ) result = (const CHAR *)(v1 + 21); else result = &byte_9A8050; return result; } // AC9C84: using guessed type int dword_AC9C84; //----- (0040AB20) -------------------------------------------------------- void *__thiscall sub_40AB20(void *this, char a2) { void *v2; // esi v2 = this; sub_409420(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0040AB50) -------------------------------------------------------- int __thiscall sub_40AB50(_DWORD *this, size_t a2, char a3) { int v3; // esi size_t v4; // eax size_t v5; // edi unsigned int v6; // ecx bool v7; // cf int result; // eax v3 = (int)this; v4 = this[4]; if ( -1 - v4 <= a2 ) std::_Xlength_error("string too long"); if ( !a2 ) return v3; v5 = v4 + a2; if ( v4 + a2 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v6 = this[5]; if ( v6 < v5 ) { sub_4015D0((const void **)v3, (void *)(v4 + a2), v4); if ( v5 ) { LABEL_8: sub_40A9F0((_DWORD *)v3, *(_DWORD *)(v3 + 16), a2, a3); v7 = *(_DWORD *)(v3 + 20) < 0x10u; *(_DWORD *)(v3 + 16) = v5; if ( !v7 ) { *(_BYTE *)(*(_DWORD *)v3 + v5) = 0; return v3; } *(_BYTE *)(v3 + v5) = 0; } return v3; } if ( v5 ) goto LABEL_8; *(_DWORD *)(v3 + 16) = 0; if ( v6 < 0x10 ) { result = v3; *(_BYTE *)v3 = 0; } else { **(_BYTE **)v3 = 0; result = v3; } return result; } //----- (0040AC00) -------------------------------------------------------- const void **__thiscall sub_40AC00(_DWORD *this, void *a2) { return sub_4018E0(this, a2, strlen((const char *)a2)); } //----- (0040ACB0) -------------------------------------------------------- void __cdecl sub_40ACB0(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 28 ) { if ( *(_DWORD *)(i + 20) >= 0x10u ) operator delete(*(void **)i); *(_DWORD *)(i + 20) = 15; *(_DWORD *)(i + 16) = 0; *(_BYTE *)i = 0; } } //----- (0040AD50) -------------------------------------------------------- _DWORD *__cdecl sub_40AD50(int a1, int a2, void *a3) { _DWORD *v3; // esi _DWORD *i; // edi v3 = a3; for ( i = (_DWORD *)(a1 + 20); i - 5 != (_DWORD *)a2; i += 7 ) { if ( v3 ) { v3[5] = 15; v3[4] = 0; *(_BYTE *)v3 = 0; if ( v3 != i - 5 ) { if ( v3[5] >= 0x10u ) operator delete((void *)*v3); v3[5] = 15; v3[4] = 0; *(_BYTE *)v3 = 0; if ( *i >= 0x10u ) { *v3 = *(i - 5); *(i - 5) = 0; } else { memcpy_0(v3, i - 5, *(i - 1) + 1); } v3[4] = *(i - 1); v3[5] = *i; *(i - 1) = 0; *i = 0; } } v3 += 7; } return v3; } //----- (0040AE10) -------------------------------------------------------- void __thiscall sub_40AE10(void **this) { void **v1; // esi v1 = this; if ( *this ) { ((void (__cdecl *)(void *, void *, void **))loc_40ACF0)(*this, this[1], this + 3); operator delete(*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (0040AE60) -------------------------------------------------------- int __thiscall sub_40AE60(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int v4; // edi int result; // eax v1 = this; v2 = this[1]; v3 = *this; if ( v3 != v2 ) { v4 = ((int (__cdecl *)(int, int, int))loc_40AC30)(v2, v2, v3); ((void (__cdecl *)(int, _DWORD, _DWORD *))loc_40ACF0)(v4, v1[1], v1 + 3); v1[1] = v4; } result = 0; *((_BYTE *)v1 + 16) = 0; v1[5] = 0; v1[6] = 0; return result; } //----- (0040AEB0) -------------------------------------------------------- unsigned int __thiscall sub_40AEB0(int *this, char *a2) { int *v2; // esi unsigned int result; // eax void *v4; // eax int v5; // ST04_4 int v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x9249249 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 28; if ( result < (unsigned int)a2 ) { v4 = sub_40A800(a2); v5 = v2[1]; v6 = *v2; v10 = v4; v12 = 0; sub_40AD50(v6, v5, v4); v7 = (signed int)(v2[1] - *v2 + ((unsigned __int64)(-1840700269i64 * (v2[1] - *v2)) >> 32)) >> 4; v8 = v7 + (v7 >> 31); if ( *v2 ) { sub_40ACB0(*v2, v2[1]); operator delete((void *)*v2); } result = (unsigned int)v10; v2[2] = (int)v10 + 28 * (_DWORD)a2; v2[1] = result + 28 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0040AFE0) -------------------------------------------------------- unsigned int __thiscall sub_40AFE0(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (this[1] - *this) / 28; if ( 153391689 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 28; if ( v3 > result ) { if ( 153391689 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_40AEB0(this, v5); } return result; } //----- (0040B060) -------------------------------------------------------- void __thiscall sub_40B060(int *this, const void **a2) { int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // ecx const void **v7; // [esp-Ch] [ebp-28h] v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_40AFE0(v2, 1); v6 = v2[1]; if ( v6 ) { v7 = a2; goto LABEL_11; } } else { v4 = (signed int)((signed int)a2 + ((unsigned __int64)(-1840700269i64 * ((signed int)a2 - *v2)) >> 32) - *v2) >> 4; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_40AFE0(v2, 1); v6 = v2[1]; if ( v6 ) { v7 = (const void **)(*v2 + 28 * v5); LABEL_11: *(_DWORD *)(v6 + 20) = 15; *(_DWORD *)(v6 + 16) = 0; *(_BYTE *)v6 = 0; sub_4017F0((const void **)v6, v7, 0, (void *)0xFFFFFFFF); goto LABEL_12; } } LABEL_12: v2[1] += 28; } //----- (0040B170) -------------------------------------------------------- char __usercall sub_40B170@(BYTE *a1@) { BYTE *v1; // esi BYTE v3; // al BYTE v4; // bl BYTE TestChar; // [esp+4h] [ebp-4h] v1 = a1; if ( !a1 ) return 0; v3 = *a1; if ( !v3 ) return 0; while ( 1 ) { TestChar = v3; if ( !IsDBCSLeadByte(v3) ) { ++v1; goto LABEL_9; } v4 = v1[1]; if ( IsDBCSLeadByte(TestChar) ) { if ( 94 * TestChar + (unsigned int)v4 - 16705 > 0x92D ) return 1; } v1 += 2; LABEL_9: v3 = *v1; if ( !*v1 ) return 0; } } //----- (0040B1F0) -------------------------------------------------------- char __thiscall sub_40B1F0(char *this) { char *v1; // esi signed int v2; // kr00_4 int v3; // esi char v4; // al char v6[128]; // [esp+Ch] [ebp-84h] v1 = this; memset(v6, 0, 0x64u); strncpy(v6, v1, 0x5Au); v2 = strlen(v6); v3 = 0; if ( v2 <= 0 ) return 0; while ( IsDBCSLeadByte(v6[v3]) ) { ++v3; LABEL_32: if ( ++v3 >= v2 ) return 0; } v4 = v6[v3]; if ( v4 != 32 && v4 != 39 && v4 != 92 && v4 != 47 && v4 != 58 && v4 != 42 && v4 != 63 && v4 != 60 && v4 != 62 && v4 != 124 && v4 != 126 && v4 != 33 && v4 != 64 && v4 != 37 && v4 != 38 && v4 != 59 && v4 != 46 && v4 != 44 && v4 != 34 && v4 != 96 && v4 != 40 && v4 != 41 && v4 != 43 && v4 != 45 && v4 != 35 && v4 != 36 && v4 != 91 && v4 != 93 ) { goto LABEL_32; } return 1; } // 40B1F0: using guessed type char var_84[128]; //----- (0040B320) -------------------------------------------------------- char __usercall sub_40B320@(const char *a1@) { unsigned int v1; // edx char v2; // bl unsigned int v3; // ecx char v4; // al char result; // al v1 = strlen(a1); v2 = 0; v3 = 0; if ( !v1 ) goto LABEL_16; do { v4 = a1[v3]; if ( (v4 < 65 || v4 > 90) && (v4 < 97 || v4 > 122) && (v4 < 48 || v4 > 57) && v4 != 95 ) v2 = 1; ++v3; } while ( v3 < v1 ); if ( v2 ) result = 1; else LABEL_16: result = 0; return result; } //----- (0040B380) -------------------------------------------------------- _DWORD *__thiscall sub_40B380(_DWORD *this) { int v1; // ecx _DWORD *v2; // esi _DWORD *result; // eax v2 = this; result = sub_8EF040(this, dword_ACDD5C, 0); v1 = *(_DWORD *)(v2[22] + 344); if ( v1 ) result = (_DWORD *)(*(int (__cdecl **)(signed int))(*(_DWORD *)v1 + 488))(1); return result; } // ACDD5C: using guessed type int dword_ACDD5C; //----- (0040B3A0) -------------------------------------------------------- char __thiscall sub_40B3A0(unsigned __int8 *this) { unsigned __int8 *v1; // eax void *v2; // ecx v1 = this; v2 = (void *)*((_DWORD *)this + 27); if ( v2 ) LOBYTE(v1) = sub_64F210(v2, v1 + 112); return (char)v1; } //----- (0040B3C0) -------------------------------------------------------- char __thiscall sub_40B3C0(_DWORD *this) { _DWORD *v1; // eax void *v2; // ecx v1 = this; v2 = (void *)this[27]; if ( v2 ) LOBYTE(v1) = sub_64F3A0(v2, (int)(v1 + 28)); return (char)v1; } //----- (0040B3E0) -------------------------------------------------------- char __thiscall sub_40B3E0(_DWORD *this) { _DWORD *v1; // eax _BYTE *v2; // ecx v1 = this; v2 = (_BYTE *)this[27]; if ( v2 ) LOBYTE(v1) = sub_64F4A0(v2, (int)(v1 + 28)); return (char)v1; } //----- (0040B430) -------------------------------------------------------- char __thiscall sub_40B430(_DWORD *this, char a2) { _DWORD *v2; // esi _BYTE *v3; // ecx v2 = this; v3 = (_BYTE *)this[19]; *((_BYTE *)v2 + 112) ^= (*((_BYTE *)v2 + 112) ^ 4 * a2) & 0x7C; *((_BYTE *)v2 + 153) = a2; *((_BYTE *)v2 + 45) = 1; sub_409290(v3, a2); sub_409F00(v2[19]); sub_40FF80((_BYTE *)v2[20], a2); return sub_410490(v2[20]); } //----- (0040B480) -------------------------------------------------------- _DWORD *__thiscall sub_40B480(void *this) { void *v1; // esi v1 = this; sub_6F3C20(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (0040B4D0) -------------------------------------------------------- int __thiscall sub_40B4D0(_DWORD **this) { return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(*this[27] + 328))(102010, 0, 0); } //----- (0040B4F0) -------------------------------------------------------- int __thiscall sub_40B4F0(int this) { *(_BYTE *)(this + 42) = 1; return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(this + 108) + 328))(102030, 0, 0); } //----- (0040B510) -------------------------------------------------------- void __thiscall sub_40B510(_DWORD *this) { _DWORD *v1; // esi int v2; // eax float *v3; // ST00_4 void *v4; // [esp+Ch] [ebp-B0h] int v5; // [esp+10h] [ebp-ACh] int v6; // [esp+14h] [ebp-A8h] int v7; // [esp+18h] [ebp-A4h] char v8; // [esp+1Ch] [ebp-A0h] int v9; // [esp+B8h] [ebp-4h] v1 = this; if ( this[25] ) { v4 = 0; v5 = 0; v6 = 0; v7 = 1024; sub_85F230(&v4, 0x400u); v9 = 0; sub_85F910(&v8, (int)&v4); v2 = v1[23]; v3 = (float *)v1[25]; LOBYTE(v9) = 1; sub_85FB50(v3, v2, &v8, 0); sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); LOBYTE(v9) = 0; sub_85F7E0(&v8); operator delete[](v4); } } // BA46D0: using guessed type int dword_BA46D0; //----- (0040B5F0) -------------------------------------------------------- _DWORD *__thiscall sub_40B5F0(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi _DWORD *result; // eax v4 = this; if ( a2 == 9 ) return sub_8EF040(this, dword_ACDD50, 0); result = (_DWORD *)(a2 - 10); if ( a2 == 10 ) { sub_408400(this[22]); result = (_DWORD *)sub_408420(v4[22]); } return result; } // ACDD50: using guessed type int dword_ACDD50; //----- (0040B700) -------------------------------------------------------- float *__thiscall sub_40B700(_DWORD *this) { _DWORD *v1; // ebx float *result; // eax float v3; // ST14_4 char v4; // [esp+14h] [ebp-70h] char v5; // [esp+38h] [ebp-4Ch] char v6; // [esp+5Ch] [ebp-28h] v1 = this; result = (float *)this[27]; if ( result ) { if ( *((_DWORD *)result + 175) ) { v3 = flt_ACCFD0 * -2.0; sub_85D810((float *)&v6, v3); qmemcpy(&v5, (const void *)(v1[26] + 52), 0x24u); result = sub_85D940((float *)&v5, (float *)&v4, (float *)&v6); qmemcpy(&v6, result, 0x24u); qmemcpy((void *)(v1[26] + 52), &v6, 0x24u); } } return result; } // ACCFD0: using guessed type float flt_ACCFD0; //----- (0040B790) -------------------------------------------------------- float *__thiscall sub_40B790(_DWORD *this) { _DWORD *v1; // ebx float *result; // eax float v3; // ST14_4 char v4; // [esp+14h] [ebp-70h] char v5; // [esp+38h] [ebp-4Ch] char v6; // [esp+5Ch] [ebp-28h] v1 = this; result = (float *)this[27]; if ( result ) { if ( *((_DWORD *)result + 175) ) { v3 = flt_ACCFD0 + flt_ACCFD0; sub_85D810((float *)&v6, v3); qmemcpy(&v5, (const void *)(v1[26] + 52), 0x24u); result = sub_85D940((float *)&v5, (float *)&v4, (float *)&v6); qmemcpy(&v6, result, 0x24u); qmemcpy((void *)(v1[26] + 52), &v6, 0x24u); } } return result; } // ACCFD0: using guessed type float flt_ACCFD0; //----- (0040B820) -------------------------------------------------------- void __thiscall sub_40B820(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // ecx int v7; // [esp+4h] [ebp-4h] v2 = (_DWORD *)this[41]; while ( v2 ) { v3 = v2[2]; v4 = *(_DWORD *)(v3 + 12); v2 = (_DWORD *)*v2; v5 = (void (__thiscall ***)(_DWORD, signed int))v4; v7 = *(_DWORD *)(v3 + 12); if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v5 ) (**v5)(v5, 1); *(_DWORD *)(v3 + 12) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = *(_DWORD **)(v3 + 36); if ( v6 ) { if ( v7 ) sub_833360(v6, v7); if ( a2 ) sub_833620(*(_DWORD **)(v3 + 36), *(_DWORD **)(v3 + 12), 0, -1, 1); } } } //----- (0040B8C0) -------------------------------------------------------- char __thiscall sub_40B8C0(_DWORD *this) { int v1; // edx unsigned int v2; // eax _DWORD *v3; // ebx _DWORD *v4; // esi _DWORD *v5; // edi int *v6; // ecx int v7; // eax int v8; // eax int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] unsigned int v14; // [esp+18h] [ebp-8h] char v15; // [esp+1Fh] [ebp-1h] v1 = dword_AC9CE8; LOBYTE(v2) = *(_BYTE *)(dword_AC9CE8 + 12); v3 = this; *(_BYTE *)(dword_AC9CE8 + 12) = 0; v4 = (_DWORD *)this[41]; v13 = v1; v15 = v2; if ( v4 ) { v2 = 0; v14 = 0; if ( this[48] ) { do { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) { v6 = (int *)(v3[49] + 4 * v2); v7 = *v6; v10 = *(_DWORD *)(*v6 + 88); v11 = *(_DWORD *)(v7 + 92); v12 = *(_DWORD *)(v7 + 96); sub_68E670(v5, *v6, (int)&v10); v1 = v13; *(_WORD *)(v5[29] + 28) &= 0xFFFEu; v2 = v14; } v14 = ++v2; } while ( v2 < v3[48] ); } for ( ; v4; *(_WORD *)(v2 + 28) |= 1u ) { v8 = v4[2]; v4 = (_DWORD *)*v4; v2 = *(_DWORD *)(v8 + 116); } *(_BYTE *)(v1 + 12) = v15; } return v2; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (0040B980) -------------------------------------------------------- int __thiscall sub_40B980(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx _DWORD **v5; // ecx char *v6; // eax volatile LONG *v7; // eax char *v8; // eax volatile LONG *v9; // eax int v10; // eax int v11; // ecx void **v13; // [esp+2Ch] [ebp-40h] _DWORD *(__thiscall *v14)(void *); // [esp+30h] [ebp-3Ch] _DWORD *v15; // [esp+34h] [ebp-38h] void ***v16; // [esp+3Ch] [ebp-30h] void **v17; // [esp+44h] [ebp-28h] _DWORD *(__thiscall *v18)(void *); // [esp+48h] [ebp-24h] _DWORD *v19; // [esp+4Ch] [ebp-20h] void ***v20; // [esp+54h] [ebp-18h] int v21; // [esp+68h] [ebp-4h] v2 = this; v3 = this[37]; if ( v3 ) (*(void (__stdcall **)(_DWORD *, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0(v2); sub_8F8AE0(&unk_BA6B10, 1); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); sub_40B8C0(v2); v4 = v2[37]; if ( v4 ) sub_9060A0(v4); v5 = (_DWORD **)v2[23]; if ( v5 ) sub_85BED0(v5, a2, 1); if ( byte_B68508 != 1 || v2[53] ) { if ( *(_BYTE *)(v2[37] + 9) ) { if ( !v2[53] ) { v18 = sub_40B480; v17 = &std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable'; v19 = v2; v20 = &v17; v21 = 1; v8 = (char *)sub_40C190(-808578239); v9 = sub_41E360(0, (int)v2, 1, v8); v2[53] = v9; sub_41E140((void *)v9, 1, (int)&v17); v21 = -1; if ( v20 ) { ((void (__stdcall *)(bool))(*v20)[3])(v20 != &v17); v20 = 0; } } } } else { v14 = sub_40B480; v13 = &std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable'; v15 = v2; v16 = &v13; v21 = 0; v6 = (char *)sub_40C190(374499920); v7 = sub_41E360(0, (int)v2, 1, v6); v2[53] = v7; sub_41E140((void *)v7, 1, (int)&v13); byte_B68508 = 0; v21 = -1; if ( v16 ) ((void (__stdcall *)(bool))(*v16)[3])(v16 != &v13); } if ( *((_BYTE *)v2 + 52) ) { v10 = sub_65D700((_DWORD *)v2[27], v2[14]); if ( v10 ) { if ( *(float *)(v10 + 48) <= (double)*(float *)(v10 + 52) ) { v11 = v2[27]; *((_BYTE *)v2 + 52) = 0; (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)v11 + 328))(102010, 0, 0); } } } if ( *((_BYTE *)v2 + 44) ) { if ( *((_BYTE *)v2 + 43) ) sub_40B790(v2); else sub_40B700(v2); } if ( *((_BYTE *)v2 + 40) ) { *((_BYTE *)v2 + 40) = 0; *((float *)v2 + 9) = a2; } if ( !*((_BYTE *)v2 + 41) && a2 - *((float *)v2 + 9) > 0.800000011920929 ) { sub_664570(dword_AD8C90, a2); *((_BYTE *)v2 + 41) = 1; } if ( *((_BYTE *)v2 + 42) ) sub_664570(dword_AD8C90, a2); if ( dword_AB6524 && !sub_6B7C90((_DWORD *)dword_AB6524) ) { unknown_libname_12(&dword_AB6520); sub_6B7C20((float *)dword_AB6524, 0.0); sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); } return sub_6BACD0(&dword_AB6520, a2, 0); } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // 9A8744: using guessed type void *std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable'; // AB6524: using guessed type int dword_AB6524; // B68508: using guessed type char byte_B68508; //----- (0040BC40) -------------------------------------------------------- char __thiscall sub_40BC40(_DWORD *this, int a2, int a3) { void *v3; // esi int v4; // eax int v5; // edi __int16 *v6; // eax __int16 *v7; // eax __int16 *v8; // eax __int16 *v9; // eax __int16 *v10; // eax __int16 *v11; // eax v3 = (void *)(this[27] + 776); v4 = sub_40C360(a2, a3); v5 = v4; v6 = (__int16 *)sub_40C8D0((void *)(v4 + 5)); sub_679990(v3, v6); v7 = (__int16 *)sub_40C8D0((void *)(v5 + 37)); sub_679990(v3, v7); v8 = (__int16 *)sub_40C8D0((void *)(v5 + 69)); sub_679990(v3, v8); v9 = (__int16 *)sub_40C8D0((void *)(v5 + 101)); sub_679990(v3, v9); v10 = (__int16 *)sub_40C8D0((void *)(v5 + 133)); sub_679990(v3, v10); v11 = (__int16 *)sub_40C8D0((void *)(v5 + 165)); return sub_679990(v3, v11); } //----- (0040BCF0) -------------------------------------------------------- int ***__thiscall sub_40BCF0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // ecx int ***result; // eax v1 = this; v2 = (_DWORD *)this[27]; *((_BYTE *)v1 + 45) = 1; sub_64F1D0(v2, (unsigned __int8 *)v1 + 112, 2); switch ( *((unsigned __int8 *)v1 + 153) ) { case 1u: sub_40BC40(v1, 0, *((unsigned __int8 *)v1 + 152)); break; case 6u: sub_40BC40(v1, 2, *((unsigned __int8 *)v1 + 152)); break; case 0xBu: sub_40BC40(v1, 1, *((unsigned __int8 *)v1 + 152)); break; case 0x10u: sub_40BC40(v1, 3, *((unsigned __int8 *)v1 + 152)); break; case 0x15u: sub_40BC40(v1, 4, *((unsigned __int8 *)v1 + 152)); break; case 0x1Au: sub_40BC40(v1, 5, *((unsigned __int8 *)v1 + 152)); break; default: break; } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[26] + 116))(v1[15], 0); sub_85C4D0((_DWORD *)v1[26]); sub_85C6F0((_DWORD *)v1[26]); sub_85BED0((_DWORD **)v1[26], 0.0, 1); v3 = v1[27]; v1[14] = 102020; (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 328))(102020, 0, 0); *((_BYTE *)v1 + 52) = 1; result = sub_664570(dword_AD8C90, flt_ACCFCC); *((_BYTE *)v1 + 40) = 1; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0040BE10) -------------------------------------------------------- char __thiscall sub_40BE10(int this) { int v1; // esi int v2; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi int v5; // [esp+4h] [ebp-4h] v1 = this; v2 = *(_DWORD *)(this + 108); if ( v2 ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(this + 104) + 120))(&v5, *(_DWORD *)(v2 + 700)); if ( v5 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } LOBYTE(v2) = sub_64F1D0(*(_DWORD **)(v1 + 108), (unsigned __int8 *)(v1 + 112), 2); if ( (_BYTE)v2 ) LOBYTE(v2) = (unsigned int)sub_40BCF0((_DWORD *)v1); } return v2; } //----- (0040BE80) -------------------------------------------------------- void __thiscall sub_40BE80(int this) { int v1; // esi int v2; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi _BYTE *v4; // edi char v5; // ST04_1 int v6; // ST00_4 void *v7; // edi void *v8; // [esp+10h] [ebp-20h] int v9; // [esp+14h] [ebp-1Ch] int v10; // [esp+18h] [ebp-18h] int v11; // [esp+20h] [ebp-10h] int v12; // [esp+2Ch] [ebp-4h] v1 = this; v2 = *(_DWORD *)(this + 108); if ( v2 ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(this + 104) + 120))(&v11, *(_DWORD *)(v2 + 700)); if ( v11 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } v4 = (_BYTE *)(v1 + 112); if ( sub_64F1F0(*(_DWORD **)(v1 + 108), (unsigned __int8 *)(v1 + 112), 2) ) { v8 = 0; v9 = 0; v10 = 0; v5 = *v4 >> 7; v6 = (*v4 >> 2) & 0x1F; v12 = 0; sub_40C590(v6, v5, 0, &v8); if ( (v9 - (signed int)v8) >> 2 ) *(_BYTE *)(v1 + 113) = *(_BYTE *)v8; else *(_BYTE *)(v1 + 113) = 0; sub_4E6D30(&v8, 0); sub_40C4E0(0, &v8); v7 = v8; if ( (v9 - (signed int)v8) >> 2 ) *(_BYTE *)(v1 + 115) = *(_BYTE *)v8; else *(_BYTE *)(v1 + 115) = 0; *(_BYTE *)(v1 + 114) = 0; sub_40BCF0((_DWORD *)v1); if ( v7 ) operator delete(v7); } } } //----- (0040BFB0) -------------------------------------------------------- char __thiscall sub_40BFB0(char *this) { int v1; // ecx char *v2; // edi signed int v3; // eax _DWORD **v4; // ecx const char *v5; // eax char *v6; // esi char *v7; // eax char result; // al char *v9; // eax char *v10; // eax v2 = this; sub_40BCF0(this); v3 = sub_680680(byte_AD9238); v4 = (_DWORD **)*((_DWORD *)v2 + 22); *((_DWORD *)v2 + 29) = v3; v5 = (const char *)sub_4083D0(v4); v6 = (char *)v5; if ( v5 && *v5 ) { if ( strlen(v5) >= 4 ) { if ( sub_40B170((BYTE *)v6) || sub_40B1F0(v6) || sub_451A00((unsigned __int8 *)v6) || sub_40B320(v6) ) { v9 = (char *)sub_40C190(849182339); result = (unsigned int)sub_462C30(1, v9); } else { sub_40C140(v2 + 124, v6); result = sub_40F820(v2); v1 = *(_DWORD *)(*((_DWORD *)v2 + 22) + 344); if ( v1 ) result = (*(int (__cdecl **)(signed int))(*(_DWORD *)v1 + 488))(1); } } else { v7 = (char *)sub_40C190(-87816400); result = (unsigned int)sub_462C30(1, v7); } } else { v10 = (char *)sub_40C190(-352983226); result = (unsigned int)sub_462C30(1, v10); } return result; } //----- (0040C080) -------------------------------------------------------- int __cdecl sub_40C080(int a1, volatile LONG **a2, char *a3, int a4) { volatile LONG *v4; // eax v4 = sub_41E360(0, a1, 1, a3); *a2 = v4; return sub_41E140((void *)v4, 1, a4); } //----- (0040C0B0) -------------------------------------------------------- int __cdecl sub_40C0B0(unsigned __int8 *a1, unsigned __int8 *a2, unsigned int a3) { unsigned __int8 *v3; // ecx unsigned __int8 *v4; // edx unsigned int v5; // esi int v6; // eax v3 = a2; v4 = a1; v5 = a3; if ( a3 < 4 ) { LABEL_4: if ( !v5 ) return 0; } else { while ( *(_DWORD *)v4 == *(_DWORD *)v3 ) { v5 -= 4; v3 += 4; v4 += 4; if ( v5 < 4 ) goto LABEL_4; } } v6 = *v4 - *v3; if ( *v4 != *v3 ) return (v6 >> 31) | 1; if ( v5 <= 1 ) return 0; v6 = v4[1] - v3[1]; if ( v4[1] != v3[1] ) return (v6 >> 31) | 1; if ( v5 <= 2 ) return 0; v6 = v4[2] - v3[2]; if ( v4[2] != v3[2] ) return (v6 >> 31) | 1; if ( v5 > 3 ) { v6 = v4[3] - v3[3]; return (v6 >> 31) | 1; } return 0; } //----- (0040C140) -------------------------------------------------------- char *__thiscall sub_40C140(char *this, char *a2) { *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; return strncpy(this, a2, 0x14u); } //----- (0040C170) -------------------------------------------------------- int sub_40C170() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_AC9C98 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // AC9C98: using guessed type int dword_AC9C98; //----- (0040C190) -------------------------------------------------------- const CHAR *__cdecl sub_40C190(int a1) { int v1; // eax size_t v2; // eax void *v3; // eax _DWORD *v4; // edi int v6; // [esp+8h] [ebp-10h] const CHAR *v7; // [esp+Ch] [ebp-Ch] const CHAR *v8; // [esp+10h] [ebp-8h] const CHAR *v9; // [esp+14h] [ebp-4h] v7 = &byte_9A8050; v8 = &byte_9A8050; v9 = &byte_9A8050; v6 = a1; v1 = *(_DWORD *)(dword_AC9C90 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = bsearch(&v6, dword_ACB3A0, v2, 0x10u, sub_4508B0); v4 = v3; if ( !v3 ) return &byte_9A8050; if ( strcmp(*((const char **)v3 + 2), "None") ) sub_6BA890(&dword_AB6520, v4[2]); if ( strcmp((const char *)v4[3], "None") ) sub_6BA680(&dword_AB6520, v4[3]); return (const CHAR *)v4[1]; } // AC9C90: using guessed type int dword_AC9C90; //----- (0040C270) -------------------------------------------------------- void __thiscall sub_40C270(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // ecx v2 = this; v3 = this[1]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[1] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v4 = (_DWORD *)v2[7]; if ( v4 ) { if ( v3 ) sub_833360(v4, v3); if ( a2 ) sub_833620((_DWORD *)v2[7], (_DWORD *)v2[1], 0, -1, 1); } } //----- (0040C2F0) -------------------------------------------------------- signed int __thiscall sub_40C2F0(unsigned __int8 *this, unsigned int a2, unsigned int a3, unsigned __int8 *a4, unsigned int a5) { unsigned int v5; // eax unsigned int v6; // esi unsigned int v7; // eax unsigned int v8; // edx unsigned __int8 *v9; // eax signed int result; // eax v5 = *((_DWORD *)this + 4); if ( v5 < a2 ) std::_Xout_of_range("invalid string position"); v6 = a3; v7 = v5 - a2; if ( v7 < a3 ) v6 = v7; v8 = v6; if ( v6 >= a5 ) v8 = a5; if ( *((_DWORD *)this + 5) < 0x10u ) v9 = this; else v9 = *(unsigned __int8 **)this; result = sub_40C0B0(&v9[a2], a4, v8); if ( !result ) { if ( v6 >= a5 ) result = v6 != a5; else result = -1; } return result; } //----- (0040C360) -------------------------------------------------------- int __cdecl sub_40C360(int a1, int a2) { unsigned int v2; // esi int result; // eax v2 = 0; if ( !sub_40C170() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_AC9C98 + 4), v2); if ( *(_DWORD *)result == a1 && *(unsigned __int8 *)(result + 4) == a2 ) break; if ( ++v2 >= sub_40C170() ) return 0; } return result; } // AC9C98: using guessed type int dword_AC9C98; //----- (0040C3B0) -------------------------------------------------------- void ***sub_40C3B0() { return &std::tr1::_Bind,CharCreateFrameWork *>> `RTTI Type Descriptor'; } // AA8718: using guessed type void **std::tr1::_Bind,CharCreateFrameWork *>> `RTTI Type Descriptor'; //----- (0040C3C0) -------------------------------------------------------- char *__thiscall sub_40C3C0(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0xCu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A8744: using guessed type void *std::tr1::_Impl_no_alloc0,CharCreateFrameWork *>>,0>,void>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0040C420) -------------------------------------------------------- signed int __thiscall sub_40C420(int this, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a2; return sub_40C2F0((unsigned __int8 *)this, 0, *(_DWORD *)(this + 16), v2, *(_DWORD *)(a2 + 16)); } //----- (0040C450) -------------------------------------------------------- int __stdcall sub_40C450(char *a1) { char *v1; // ecx int v2; // edx int i; // eax int v4; // esi div_t v5; // rax if ( *((_DWORD *)a1 + 5) < 0x10u ) v1 = a1; else v1 = *(char **)a1; v2 = (int)&v1[*((_DWORD *)a1 + 4)]; for ( i = -2128831035; v1 != (char *)v2; i = v4 ^ 16777619 * i ) v4 = *v1++; v5 = div(i & 0x7FFFFFFF, 127773); return 16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF); } //----- (0040C4B0) -------------------------------------------------------- bool __stdcall sub_40C4B0(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a2; return sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), v2, *(_DWORD *)(a2 + 16)) < 0; } //----- (0040C4E0) -------------------------------------------------------- int __cdecl sub_40C4E0(unsigned __int8 a1, _DWORD *a2) { int result; // eax unsigned int v3; // ebx _DWORD *v4; // esi unsigned int v5; // eax int v6; // edi unsigned int v7; // [esp+4h] [ebp-4h] result = *(_DWORD *)(dword_AC9C9C + 56); v3 = 0; if ( result ) v7 = *(_DWORD *)(result + 40); else v7 = 0; if ( v7 > 0 ) { v4 = a2; do { result = sub_7474E0((_DWORD *)(dword_AC9C9C + 4), v3); if ( result && *(_BYTE *)(result + 33) <= a1 ) { v5 = v4[1]; a2 = (_DWORD *)v3; if ( (unsigned int)&a2 >= v5 || *v4 > (unsigned int)&a2 ) { if ( v5 == v4[2] ) sub_5E2180((int)v4, 1); result = v4[1]; if ( result ) *(_DWORD *)result = v3; } else { v6 = ((signed int)&a2 - *v4) >> 2; if ( v5 == v4[2] ) sub_5E2180((int)v4, 1); result = v4[1]; if ( result ) *(_DWORD *)result = *(_DWORD *)(*v4 + 4 * v6); } v4[1] += 4; } ++v3; } while ( v3 < v7 ); } return result; } // AC9C9C: using guessed type int dword_AC9C9C; //----- (0040C590) -------------------------------------------------------- _DWORD *__cdecl sub_40C590(unsigned int a1, char a2, unsigned __int8 a3, _DWORD *a4) { unsigned __int8 v4; // al int v5; // ecx unsigned int v6; // esi unsigned int v7; // ecx _DWORD *result; // eax char v9; // bl unsigned int v10; // edi int v11; // ecx char v12; // bl unsigned int v13; // edi int v14; // ecx char v15; // bl unsigned int v16; // edi int v17; // ecx char v18; // bl unsigned int v19; // edi int v20; // ecx char v21; // bl unsigned int v22; // edi int v23; // ecx _DWORD *v24; // edi char v25; // bl int v26; // ecx switch ( (unsigned __int8)a1 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v4 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v4 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v4 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v4 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v4 = 21; break; case 0x1Au: case 0x1Bu: v4 = 26; break; default: v4 = 0; break; } v5 = *(_DWORD *)(dword_AC9C94 + 56); v6 = 0; if ( v5 ) { v7 = *(_DWORD *)(v5 + 40); a1 = v7; } else { a1 = 0; v7 = 0; } result = (_DWORD *)(v4 - 1); switch ( (unsigned int)result ) { case 0u: if ( v7 > 0 ) { v9 = a2; v10 = a1; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v11 = *(_DWORD *)((char *)result + 66); if ( (v11 == 3 || v11 == 1 && v9 == 1 || v11 == 2 && !v9) && *((_BYTE *)result + 65) <= a3 ) { a1 = v6; result = sub_5B3CF0(a4, &a1); } ++v6; } while ( v6 < v10 ); } break; case 5u: if ( v7 > 0 ) { v12 = a2; v13 = a1; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v14 = *(_DWORD *)((char *)result + 74); if ( (v14 == 3 || v14 == 1 && v12 == 1 || v14 == 2 && !v12) && *((_BYTE *)result + 65) <= a3 ) { a1 = v6; result = sub_5B3CF0(a4, &a1); } ++v6; } while ( v6 < v13 ); } break; case 0xAu: if ( v7 > 0 ) { v15 = a2; v16 = a1; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v17 = *(_DWORD *)((char *)result + 70); if ( (v17 == 3 || v17 == 1 && v15 == 1 || v17 == 2 && !v15) && *((_BYTE *)result + 65) <= a3 ) { a1 = v6; result = sub_5B3CF0(a4, &a1); } ++v6; } while ( v6 < v16 ); } break; case 0xFu: if ( v7 > 0 ) { v18 = a2; v19 = a1; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v20 = *(_DWORD *)((char *)result + 78); if ( (v20 == 3 || v20 == 1 && v18 == 1 || v20 == 2 && !v18) && *((_BYTE *)result + 65) <= a3 ) { a1 = v6; result = sub_5B3CF0(a4, &a1); } ++v6; } while ( v6 < v19 ); } break; case 0x14u: if ( v7 > 0 ) { v21 = a2; v22 = a1; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v23 = *(_DWORD *)((char *)result + 78); if ( (v23 == 3 || v23 == 1 && v21 == 1 || v23 == 2 && !v21) && *((_BYTE *)result + 65) <= a3 ) { a1 = v6; result = sub_5B3CF0(a4, &a1); } ++v6; } while ( v6 < v22 ); } break; case 0x19u: if ( v7 > 0 ) { v24 = a4; v25 = a2; do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); v26 = *(_DWORD *)((char *)result + 86); if ( (v26 == 3 || v26 == 1 && v25 == 1 || v26 == 2 && !v25) && *((_BYTE *)result + 65) <= a3 ) { a4 = (_DWORD *)v6; result = sub_5B3CF0(v24, &a4); } ++v6; } while ( v6 < a1 ); } break; default: return result; } return result; } // AC9C94: using guessed type int dword_AC9C94; //----- (0040C8D0) -------------------------------------------------------- int __cdecl sub_40C8D0(void *a1) { int result; // eax _DWORD *v2; // [esp+Ch] [ebp-30h] void *v3; // [esp+10h] [ebp-2Ch] int v4; // [esp+20h] [ebp-1Ch] unsigned int v5; // [esp+24h] [ebp-18h] int v6; // [esp+38h] [ebp-4h] if ( !a1 || !*(_BYTE *)a1 ) goto LABEL_10; v5 = 15; v4 = 0; LOBYTE(v3) = 0; sub_4018E0(&v3, a1, strlen((const char *)a1)); v6 = 0; sub_438D10(&unk_ADB430, &v2, (char *)&v3); if ( v5 >= 0x10 ) operator delete(v3); v5 = 15; v4 = 0; LOBYTE(v3) = 0; if ( v2 != dword_ADB434 ) result = v2[9]; else LABEL_10: result = 0; return result; } //----- (0040C9A0) -------------------------------------------------------- int __thiscall sub_40C9A0(int *this) { int *v1; // esi _BYTE *v2; // eax int result; // eax v1 = this; v2 = (_BYTE *)this[86]; if ( *v2 >= 0 ) *v2 |= 0x80u; else *v2 &= 0x7Fu; sub_40BE80(this[74]); result = 0; v1[89] = 0; v1[88] = 0; v1[87] = 0; return result; } //----- (0040C9E0) -------------------------------------------------------- int __thiscall sub_40C9E0(int *this) { int *v1; // esi _BYTE *v2; // eax int result; // eax v1 = this; v2 = (_BYTE *)this[86]; if ( *v2 >= 0 ) *v2 |= 0x80u; else *v2 &= 0x7Fu; sub_40BE80(this[74]); result = 0; v1[89] = 0; v1[88] = 0; v1[87] = 0; return result; } //----- (0040CA20) -------------------------------------------------------- LONG __thiscall sub_40CA20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &CharCreateInfoWin::`vftable'; this[58] = &CharCreateInfoWin::`vftable'; `eh vector destructor iterator'(this + 98, 4u, 4, sub_410C00); `eh vector destructor iterator'(v1 + 90, 4u, 8, sub_410C00); return sub_8F10F0(v1); } // 9A8860: using guessed type void *CharCreateInfoWin::`vftable'; // 9A887C: using guessed type void *CharCreateInfoWin::`vftable'; //----- (0040CAB0) -------------------------------------------------------- char __thiscall sub_40CAB0(volatile LONG **this, int a2, int a3) { volatile LONG **v3; // esi int v4; // edi char *v5; // eax int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi char result; // al volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax char v19; // ST0C_1 int v20; // ST10_4 int v21; // ST14_4 int v22; // ST18_4 volatile LONG *v23; // eax volatile LONG *v24; // eax char v25; // ST0C_1 int v26; // ST10_4 int v27; // ST14_4 int v28; // ST18_4 volatile LONG *v29; // eax volatile LONG *v30; // eax char v31; // ST0C_1 int v32; // ST10_4 int v33; // ST14_4 int v34; // ST18_4 volatile LONG *v35; // eax volatile LONG *v36; // eax char v37; // ST0C_1 int v38; // ST10_4 int v39; // ST14_4 int v40; // ST18_4 volatile LONG *v41; // eax volatile LONG *v42; // eax void (__thiscall ***v43)(_DWORD, signed int); // esi int v44[5]; // [esp+14h] [ebp-28h] int v45; // [esp+28h] [ebp-14h] int v46; // [esp+2Ch] [ebp-10h] int v47; // [esp+38h] [ebp-4h] v3 = this; if ( !a2 ) return 0; this[86] = (volatile LONG *)a2; a2 = 0; v4 = dword_BA6BA0; v47 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "charcreate\\CreatCharInfo.nif"); sub_8F66B0(v5, (int)&a2, v4); v6 = a2; if ( !a2 ) { if ( off_AC0554 ) { off_AC0554("CreatCharInfo load fail", "LoadFail", a2); v6 = a2; } v47 = -1; if ( v6 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } return 0; } v9 = sub_8FB140(a2, (int)"Plane", (int)&v45, (int)&v46, 0); if ( sub_8F1440(v3, 0, 0, (int)v9, 0, a3, (int)"CharCreateInfoWin", 0) ) { sub_456260(v44); LOBYTE(v47) = 1; sub_455FF0(v44, (int)v3); sub_456000(v44, v45, v46); sub_456380(v44, a2); v11 = sub_456B30(v44, 0, "FaceArrowL", 0, 3); sub_56FF80(v3 + 90, (int)v11); v12 = sub_456B30(v44, 1, "FaceArrowR", 0, 3); sub_56FF80(v3 + 91, (int)v12); v13 = sub_456B30(v44, 2, "HairArrowL", 0, 3); sub_56FF80(v3 + 94, (int)v13); v14 = sub_456B30(v44, 3, "HairArrowR", 0, 3); sub_56FF80(v3 + 95, (int)v14); v15 = sub_456B30(v44, 4, "ColorArrowL", 0, 3); sub_56FF80(v3 + 96, (int)v15); v16 = sub_456B30(v44, 5, "ColorArrowR", 0, 3); sub_56FF80(v3 + 97, (int)v16); v17 = sub_456B30(v44, 6, "GenderArrowL", 0, 3); sub_56FF80(v3 + 92, (int)v17); v18 = sub_456B30(v44, 7, "GenderArrowR", 0, 3); sub_56FF80(v3 + 93, (int)v18); sub_456820(v44, (int)"Plane01", 0); v19 = dword_AA8C68; v20 = dword_AA8C6C; v21 = dword_AA8C70; v22 = dword_AA8C74; v23 = sub_456820(v44, (int)"Face", 0); v24 = sub_456040((int)v23, (int)"-", v19, v20, v21, v22, 5); sub_56FF80(v3 + 98, (int)v24); v25 = dword_AA8C68; v26 = dword_AA8C6C; v27 = dword_AA8C70; v28 = dword_AA8C74; v29 = sub_456820(v44, (int)"Color", 0); v30 = sub_456040((int)v29, (int)"-", v25, v26, v27, v28, 5); sub_56FF80(v3 + 100, (int)v30); v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = dword_AA8C74; v35 = sub_456820(v44, (int)"Hair", 0); v36 = sub_456040((int)v35, (int)"-", v31, v32, v33, v34, 5); sub_56FF80(v3 + 99, (int)v36); v37 = dword_AA8C68; v38 = dword_AA8C6C; v39 = dword_AA8C70; v40 = dword_AA8C74; v41 = sub_456820(v44, (int)"Gender", 0); v42 = sub_456040((int)v41, (int)"-", v37, v38, v39, v40, 5); sub_56FF80(v3 + 101, (int)v42); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v3 + 59))(v3, xRight, dword_AC2F78, 0.2, 0.5); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v3 + 130))(v3, 0); LOBYTE(v47) = 0; sub_4562E0(v44); v47 = -1; if ( a2 ) { v43 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v43 ) (**v43)(v43, 1); } } result = 1; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))a2; v47 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0040CF20) -------------------------------------------------------- _DWORD *__thiscall sub_40CF20(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CharCreateInfoWin::`vftable'; v1[58] = &CharCreateInfoWin::`vftable'; `eh vector constructor iterator'( v1 + 90, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 98, 4u, 4, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A8860: using guessed type void *CharCreateInfoWin::`vftable'; // 9A887C: using guessed type void *CharCreateInfoWin::`vftable'; //----- (0040CFD0) -------------------------------------------------------- int __thiscall sub_40CFD0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax int v4; // eax unsigned int v5; // ebx unsigned int v6; // edi _BYTE *v7; // eax int result; // eax char v9; // [esp+4h] [ebp-4h] v2 = this; dword_AC9CA4[0] = (int)sub_40C190(-1516202333); dword_AC9CA8 = (int)sub_40C190(1298110357); (*(void (__stdcall **)(int))(*v2[101] + 472))(dword_AC9CA4[(unsigned int)*(unsigned __int8 *)v2[86] >> 7]); v3 = sub_7474E0((_DWORD *)(dword_AC9C9C + 4), *((unsigned __int8 *)v2[86] + 3)); if ( v3 ) (*(void (__stdcall **)(int))(*v2[98] + 472))(v3 + 1); v4 = *(_DWORD *)(dword_AC9C94 + 56); v9 = *((_BYTE *)v2[86] + 1); if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; v6 = 0; if ( v5 ) { while ( 1 ) { v7 = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v6); if ( *v7 == v9 ) break; if ( ++v6 >= v5 ) goto LABEL_11; } (*(void (__stdcall **)(_BYTE *))(*v2[99] + 472))(v7 + 33); } LABEL_11: result = sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), *((unsigned __int8 *)v2[86] + 2)); if ( result ) result = (*(int (__stdcall **)(int))(*v2[100] + 472))(result + 16); return result; } // AC9C94: using guessed type int dword_AC9C94; // AC9C9C: using guessed type int dword_AC9C9C; // AC9CA0: using guessed type int dword_AC9CA0; // AC9CA4: using guessed type int dword_AC9CA4[]; // AC9CA8: using guessed type int dword_AC9CA8; //----- (0040D0E0) -------------------------------------------------------- volatile LONG *__cdecl sub_40D0E0(int a1, int a2) { _DWORD *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x198u); v6 = v2; v7 = 0; if ( v2 ) v3 = sub_40CF20(v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (0040D210) -------------------------------------------------------- void __thiscall sub_40D210(void *this) { void *v1; // esi _BYTE *v2; // edi int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // edx void *v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] int v11; // [esp+28h] [ebp-4h] v1 = this; v8 = 0; v9 = 0; v10 = 0; v11 = 0; sub_40C4E0(0, &v8); v2 = v8; v3 = (v9 - (signed int)v8) >> 2; if ( v3 ) { v5 = *((_DWORD *)v1 + 89); if ( v5 ) *((_DWORD *)v1 + 89) = v5 - 1; else *((_DWORD *)v1 + 89) = v3 - 1; v6 = *((_DWORD *)v1 + 89); if ( v6 >= v3 ) { v7 = *((_DWORD *)v1 + 86); *((_DWORD *)v1 + 89) = 0; *(_BYTE *)(v7 + 3) = *v2; } else { *(_BYTE *)(*((_DWORD *)v1 + 86) + 3) = v2[4 * v6]; } } else { v4 = *((_DWORD *)v1 + 86); *((_DWORD *)v1 + 89) = 0; *(_BYTE *)(v4 + 3) = 0; } sub_40B3A0(*((unsigned __int8 **)v1 + 74)); if ( v2 ) operator delete(v2); } //----- (0040D2F0) -------------------------------------------------------- void __thiscall sub_40D2F0(void *this) { void *v1; // esi _BYTE *v2; // edi int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // edx void *v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] int v11; // [esp+28h] [ebp-4h] v1 = this; v8 = 0; v9 = 0; v10 = 0; v11 = 0; sub_40C4E0(0, &v8); v2 = v8; v3 = (v9 - (signed int)v8) >> 2; if ( v3 ) { v5 = *((_DWORD *)v1 + 89); if ( v5 == v3 - 1 ) *((_DWORD *)v1 + 89) = 0; else *((_DWORD *)v1 + 89) = v5 + 1; v6 = *((_DWORD *)v1 + 89); if ( v6 >= v3 ) { v7 = *((_DWORD *)v1 + 86); *((_DWORD *)v1 + 89) = 0; *(_BYTE *)(v7 + 3) = *v2; } else { *(_BYTE *)(*((_DWORD *)v1 + 86) + 3) = v2[4 * v6]; } } else { v4 = *((_DWORD *)v1 + 86); *((_DWORD *)v1 + 89) = 0; *(_BYTE *)(v4 + 3) = 0; } sub_40B3A0(*((unsigned __int8 **)v1 + 74)); if ( v2 ) operator delete(v2); } //----- (0040D3D0) -------------------------------------------------------- void __thiscall sub_40D3D0(_BYTE **this) { _BYTE **v1; // esi unsigned __int8 v2; // al _BYTE *v3; // edi int v4; // eax _BYTE *v5; // eax _BYTE *v6; // ecx int v7; // ecx _BYTE *v8; // ecx void *v9; // [esp+10h] [ebp-1Ch] int v10; // [esp+14h] [ebp-18h] int v11; // [esp+18h] [ebp-14h] int v12; // [esp+28h] [ebp-4h] v1 = this; v9 = 0; v10 = 0; v11 = 0; v2 = *this[86]; v12 = 0; sub_40C590((v2 >> 2) & 0x1F, v2 >> 7, 0, &v9); v3 = v9; v4 = (v10 - (signed int)v9) >> 2; if ( v4 ) { v6 = v1[87]; if ( v6 ) v7 = (int)(v6 - 1); else v7 = v4 - 1; v1[87] = (_BYTE *)v7; if ( v7 >= v4 ) { v8 = v1[86]; v1[87] = 0; v8[1] = *v3; } else { v1[86][1] = v3[4 * v7]; } } else { v5 = v1[86]; v1[87] = 0; v5[1] = 0; } sub_40B3C0(v1[74]); if ( v3 ) operator delete(v3); } //----- (0040D4C0) -------------------------------------------------------- void __thiscall sub_40D4C0(_BYTE **this) { _BYTE **v1; // esi unsigned __int8 v2; // al _BYTE *v3; // edi int v4; // eax _BYTE *v5; // eax _BYTE *v6; // ecx int v7; // ecx _BYTE *v8; // edx void *v9; // [esp+10h] [ebp-1Ch] int v10; // [esp+14h] [ebp-18h] int v11; // [esp+18h] [ebp-14h] int v12; // [esp+28h] [ebp-4h] v1 = this; v9 = 0; v10 = 0; v11 = 0; v2 = *this[86]; v12 = 0; sub_40C590((v2 >> 2) & 0x1F, v2 >> 7, 0, &v9); v3 = v9; v4 = (v10 - (signed int)v9) >> 2; if ( v4 ) { v6 = v1[87]; if ( v6 == (_BYTE *)(v4 - 1) ) v1[87] = 0; else v1[87] = v6 + 1; v7 = (int)v1[87]; if ( v7 >= v4 ) { v8 = v1[86]; v1[87] = 0; v8[1] = *v3; } else { v1[86][1] = v3[4 * v7]; } } else { v5 = v1[86]; v1[87] = 0; v5[1] = 0; } sub_40B3C0(v1[74]); if ( v3 ) operator delete(v3); } //----- (0040D5B0) -------------------------------------------------------- void __thiscall sub_40D5B0(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // edi int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // edx void *v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] int v11; // [esp+28h] [ebp-4h] v1 = this; v8 = 0; v9 = 0; v10 = 0; v11 = 0; sub_40D870(0, &v8); v2 = v8; v3 = (v9 - (signed int)v8) >> 2; if ( v3 ) { v5 = v1[88]; if ( v5 ) v1[88] = v5 - 1; else v1[88] = v3 - 1; v6 = v1[88]; if ( v6 >= v3 ) { v7 = v1[86]; v1[88] = 0; *(_BYTE *)(v7 + 2) = *v2; } else { *(_BYTE *)(v1[86] + 2) = v2[4 * v6]; } } else { v4 = v1[86]; v1[88] = 0; *(_BYTE *)(v4 + 2) = 0; } sub_40B3E0((_DWORD *)v1[74]); if ( v2 ) operator delete(v2); } //----- (0040D690) -------------------------------------------------------- void __thiscall sub_40D690(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // edi int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // edx void *v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] int v11; // [esp+28h] [ebp-4h] v1 = this; v8 = 0; v9 = 0; v10 = 0; v11 = 0; sub_40D870(0, &v8); v2 = v8; v3 = (v9 - (signed int)v8) >> 2; if ( v3 ) { v5 = v1[88]; if ( v5 == v3 - 1 ) v1[88] = 0; else v1[88] = v5 + 1; v6 = v1[88]; if ( v6 >= v3 ) { v7 = v1[86]; v1[88] = 0; *(_BYTE *)(v7 + 2) = *v2; } else { *(_BYTE *)(v1[86] + 2) = v2[4 * v6]; } } else { v4 = v1[86]; v1[88] = 0; *(_BYTE *)(v4 + 2) = 0; } sub_40B3E0((_DWORD *)v1[74]); if ( v2 ) operator delete(v2); } //----- (0040D770) -------------------------------------------------------- void __thiscall sub_40D770(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 0: sub_40D210(this); break; case 1: sub_40D2F0(this); break; case 2: sub_40D3D0((_BYTE **)this); break; case 3: sub_40D4C0((_BYTE **)this); break; case 4: sub_40D5B0(this); break; case 5: sub_40D690(this); break; case 6: sub_40C9A0(this); break; case 7: sub_40C9E0(this); break; default: return; } } //----- (0040D7F0) -------------------------------------------------------- _BYTE *__cdecl sub_40D7F0(char a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _BYTE *result; // eax v1 = *(_DWORD *)(dword_AC9C94 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v3); if ( *result == a1 ) break; if ( ++v3 >= v2 ) return 0; } return result; } // AC9C94: using guessed type int dword_AC9C94; //----- (0040D840) -------------------------------------------------------- void *__thiscall sub_40D840(void *this, char a2) { void *v2; // esi v2 = this; sub_40CA20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0040D870) -------------------------------------------------------- int __cdecl sub_40D870(unsigned __int8 a1, _DWORD *a2) { int result; // eax unsigned int v3; // ebx _DWORD *v4; // esi unsigned int v5; // eax int v6; // edi unsigned int v7; // [esp+4h] [ebp-4h] result = *(_DWORD *)(dword_AC9CA0 + 56); v3 = 0; if ( result ) v7 = *(_DWORD *)(result + 40); else v7 = 0; if ( v7 > 0 ) { v4 = a2; do { result = sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), v3); if ( result && *(_BYTE *)(result + 61) <= a1 ) { v5 = v4[1]; a2 = (_DWORD *)v3; if ( (unsigned int)&a2 >= v5 || *v4 > (unsigned int)&a2 ) { if ( v5 == v4[2] ) sub_5E2180((int)v4, 1); result = v4[1]; if ( result ) *(_DWORD *)result = v3; } else { v6 = ((signed int)&a2 - *v4) >> 2; if ( v5 == v4[2] ) sub_5E2180((int)v4, 1); result = v4[1]; if ( result ) *(_DWORD *)result = *(_DWORD *)(*v4 + 4 * v6); } v4[1] += 4; } ++v3; } while ( v3 < v7 ); } return result; } // AC9CA0: using guessed type int dword_AC9CA0; //----- (0040D920) -------------------------------------------------------- char *sub_40D920() { return dword_BA46DC; } //----- (0040D930) -------------------------------------------------------- int __thiscall sub_40D930(_DWORD *this, _DWORD *a2) { int result; // eax this[57] = *a2; this[58] = a2[1]; result = a2[2]; ++this[47]; this[59] = result; return result; } //----- (0040D960) -------------------------------------------------------- int __thiscall sub_40D960(_DWORD *this, _DWORD *a2) { int result; // eax this[60] = *a2; this[61] = a2[1]; result = a2[2]; ++this[47]; this[62] = result; return result; } //----- (0040D990) -------------------------------------------------------- int __thiscall sub_40D990(_DWORD *this, _DWORD *a2) { int result; // eax this[63] = *a2; this[64] = a2[1]; result = a2[2]; ++this[47]; this[65] = result; return result; } //----- (0040D9C0) -------------------------------------------------------- _DWORD *__thiscall sub_40D9C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85B2B0(this); *((_WORD *)v1 + 14) = 0; v1[8] = 0; *v1 = &NiVertexColorProperty::`vftable'; v1[9] = 1; return v1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (0040D9F0) -------------------------------------------------------- char *sub_40D9F0() { return dword_BA46E4; } //----- (0040DA00) -------------------------------------------------------- signed int sub_40DA00() { return 9; } //----- (0040DA10) -------------------------------------------------------- int __thiscall sub_40DA10(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi v4 = this; if ( this[1] ) (*(void (__stdcall **)(int, int, int))(*this[1] + 12))(a2, a3, a4); return ((int (__thiscall *)(_DWORD **, int, int, int))(*v4)[3])(v4, a2, a3, a4); } //----- (0040DA50) -------------------------------------------------------- char __thiscall sub_40DA50(_BYTE *this, int a2) { char result; // al result = 1; this[32] = 1; return result; } //----- (0040DA60) -------------------------------------------------------- int __thiscall sub_40DA60(int this) { int result; // eax result = 0; *(_BYTE *)(this + 32) = 0; *(_DWORD *)(this + 28) = 0; return result; } //----- (0040DA70) -------------------------------------------------------- _DWORD *__thiscall sub_40DA70(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // esi _DWORD *v4; // edx int v5; // edi int v6; // edx result = a2; v3 = this[2]; v4 = (_DWORD *)(*this + 16 * this[2]); *a2 = *v4; a2[1] = v4[1]; v5 = v4[2]; v6 = v4[3]; a2[2] = v5; a2[3] = v6; this[2] = v3 + 1; if ( v3 + 1 == this[1] ) this[2] = 0; if ( this[2] == this[3] ) { this[2] = -1; this[3] = 0; } return result; } //----- (0040DAD0) -------------------------------------------------------- void *__thiscall sub_40DAD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (0040DB00) -------------------------------------------------------- void __thiscall sub_40DB00(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[4]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[4] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0040DB50) -------------------------------------------------------- void __thiscall sub_40DB50(LPCRITICAL_SECTION lpCriticalSection) { bool v1; // zf v1 = lpCriticalSection[1].LockCount-- == 1; if ( v1 ) lpCriticalSection[1].DebugInfo = 0; LeaveCriticalSection(lpCriticalSection); } //----- (0040DB70) -------------------------------------------------------- void __stdcall sub_40DB70(_DWORD *a1) { bool v1; // zf EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; a1[1] = 0; *a1 = dword_BA46F4; v1 = dword_BA4714-- == 1; dword_BA46F4 = (int)a1; if ( v1 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (0040DBD0) -------------------------------------------------------- int sub_40DBD0() { _DWORD *v0; // eax signed int v1; // ecx signed int v2; // eax unsigned int v3; // esi int result; // eax v0 = operator new[](12 * dword_ABD4F8); dword_BA46F4 = (int)v0; v0[3 * dword_ABD4F8 - 3] = 0; v1 = 1; v2 = 12; do { *(_DWORD *)(v2 + dword_BA46F4) = v2 + dword_BA46F4 + 12; v3 = v1++; v2 += 12; } while ( v3 < dword_ABD4F8 - 2 ); if ( dword_BA46F0 ) { *(_DWORD *)dword_BA46F4 = dword_BA46F0; dword_BA46F0 = (void *)dword_BA46F4; result = dword_BA46F4 + 12; } else { result = dword_BA46F4; dword_BA46F0 = (void *)dword_BA46F4; *(_DWORD *)dword_BA46F4 = 0; } dword_BA46F4 += 12; return result; } // ABD4F8: using guessed type int dword_ABD4F8; // BA46F4: using guessed type int dword_BA46F4; //----- (0040DC70) -------------------------------------------------------- _DWORD *__thiscall sub_40DC70(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85B2B0(this); *((_WORD *)v1 + 14) = 236; *v1 = &NiAlphaProperty::`vftable'; *((_BYTE *)v1 + 30) = 0; return v1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (0040DC90) -------------------------------------------------------- char *sub_40DC90() { return dword_BA4718; } //----- (0040DCB0) -------------------------------------------------------- char *sub_40DCB0() { return dword_BA4730; } //----- (0040DCC0) -------------------------------------------------------- void *__thiscall sub_40DCC0(void *this, char a2) { void *v2; // esi v2 = this; sub_85B2F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0040DCF0) -------------------------------------------------------- int *sub_40DCF0() { return &dword_BA6A10; } // BA6A10: using guessed type int dword_BA6A10; //----- (0040DD00) -------------------------------------------------------- int __thiscall sub_40DD00(_DWORD *this, int a2) { return sub_8EEEE0(this); } //----- (0040DD10) -------------------------------------------------------- int sub_40DD10() { return dword_BA6A10; } // BA6A10: using guessed type int dword_BA6A10; //----- (0040DD40) -------------------------------------------------------- void *__thiscall sub_40DD40(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 3); *(_DWORD *)this = &PgFrameWork::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; //----- (0040DD70) -------------------------------------------------------- void __stdcall sub_40DD70(_DWORD *a1) { int v1; // edi bool v2; // zf v1 = a1[2]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); a1[2] = 0; } EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; a1[1] = 0; *a1 = dword_BA46F4; v2 = dword_BA4714-- == 1; dword_BA46F4 = (int)a1; if ( v2 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (0040DE00) -------------------------------------------------------- _DWORD *__thiscall sub_40DE00(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8C20: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0040DE90) -------------------------------------------------------- int __thiscall sub_40DE90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8C20: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0040DF10) -------------------------------------------------------- int *sub_40DF10() { DWORD v0; // eax int *v1; // esi EnterCriticalSection(&CriticalSection); v0 = GetCurrentThreadId(); v1 = (int *)dword_BA46F4; ++dword_BA4714; dword_BA4710 = v0; if ( !dword_BA46F4 ) { sub_40DBD0(); v1 = (int *)dword_BA46F4; } dword_BA46F4 = *v1; v1[2] = 0; *v1 = 0; v1[1] = 0; if ( !--dword_BA4714 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); return v1; } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (0040DF80) -------------------------------------------------------- int __thiscall sub_40DF80(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; if ( this[17] ) { sub_8F9E00(&unk_BA6B10, this[17]); v1[17] = 0; } if ( v1[18] ) { sub_8F9E00(&unk_BA6B10, v1[18]); v1[18] = 0; } if ( v1[19] ) { sub_8F9E00(&unk_BA6B10, v1[19]); v1[19] = 0; } if ( v1[20] ) { sub_8F9E00(&unk_BA6B10, v1[20]); v1[20] = 0; } if ( v1[21] ) { sub_8F9E00(&unk_BA6B10, v1[21]); v1[21] = 0; } if ( v1[22] ) { sub_8F9E00(&unk_BA6B10, v1[22]); v1[22] = 0; } if ( v1[53] ) { sub_8F9E00(&unk_BA6B10, v1[53]); v1[53] = 0; } if ( dword_AD01E8 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_AD01E8); dword_AD01E8 = 0; } result = dword_BA6B5C; if ( dword_BA6B5C != -1 ) { while ( 1 ) { if ( ++result == dword_BA6B58 ) result = 0; if ( result == dword_BA6B60 ) break; if ( result == -1 ) { dword_BA6B5C = -1; return result; } } dword_BA6B60 = 0; dword_BA6B5C = -1; } return result; } // AD01E8: using guessed type int dword_AD01E8; // BA6B58: using guessed type int dword_BA6B58; // BA6B5C: using guessed type int dword_BA6B5C; // BA6B60: using guessed type int dword_BA6B60; //----- (0040E080) -------------------------------------------------------- void __thiscall sub_40E080(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi int v5; // esi int v6; // esi v1 = this; v2 = this[26]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[26] = 0; } v3 = v1[25]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[25] = 0; } v4 = v1[24]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[24] = 0; } v5 = v1[23]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[23] = 0; } v6 = v1[39]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } v1[39] = 0; } } //----- (0040E150) -------------------------------------------------------- _DWORD *__thiscall sub_40E150(_DWORD *this) { int v1; // eax _DWORD *v2; // edi int v3; // esi _DWORD *result; // eax v1 = dword_AC9CE8; v2 = this; if ( dword_AC9CE8 ) { *(float *)(dword_AC9CE8 + 44) = 0.0017500001; *(_DWORD *)(v1 + 52) = this[36]; } v3 = this[26]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[26] = 0; } v2[27] = 0; result = sub_665FD0(dword_AD8C90); *((_BYTE *)v2 + 153) = 1; return result; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (0040E1C0) -------------------------------------------------------- bool __thiscall sub_40E1C0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // ebx v1 = this; v2 = this[37]; v3 = dword_AB7F4C; if ( v2 != dword_AB7F4C ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[37] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } return v1[37] != 0; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (0040E260) -------------------------------------------------------- char __thiscall sub_40E260(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // edi _DWORD *v4; // ST30_4 void *v5; // eax float *v6; // edi _DWORD *v7; // eax unsigned int v8; // edi unsigned int v9; // ebx int v10; // edi float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] void *v15; // [esp+50h] [ebp-18h] volatile LONG *v16; // [esp+54h] [ebp-14h] void **v17; // [esp+58h] [ebp-10h] int v18; // [esp+64h] [ebp-4h] v1 = this; v2 = this[39]; v12 = 0.0; v13 = 0.0; v1[48] = 1; v14 = 50.0; sub_8D8240((_DWORD *)(v2 + 176)); v3 = (_DWORD *)v1[41]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[40] + 8))(v1 + 40, v4); } v1[43] = 0; v1[41] = 0; v1[42] = 0; v17 = 0; if ( v1[48] > 0u ) { do { v5 = operator new(0x84u); v15 = v5; v6 = 0; v18 = 0; if ( v5 ) v6 = sub_68E760((float *)v5, (int)&v12, 0, 0, 5); v16 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v18 = 1; sub_8B8EC0(v1 + 40, (int *)&v16); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[39] + 116))(*((_DWORD *)v6 + 29), 0); v18 = -1; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); v17 = (void **)((char *)v17 + 1); } while ( (unsigned int)v17 < v1[48] ); } v7 = operator new(0xE8u); v15 = v7; v8 = 0; v18 = 2; if ( v7 ) v17 = (void **)sub_85A1C0(v7, 0); else v17 = 0; v18 = -1; sub_85AB50(v17, "ShadowNode"); v9 = (v1[45] - v1[44]) >> 2; if ( v9 ) { do { (*(void (__stdcall **)(volatile LONG **, _DWORD))(*(_DWORD *)v1[23] + 120))(&v16, *(_DWORD *)(v1[44] + 4 * v8)); if ( v16 ) { v15 = (void *)v16; if ( !InterlockedDecrement(v16 + 1) ) { if ( v15 ) (**(void (__stdcall ***)(signed int))v15)(1); } } (*((void (__stdcall **)(_DWORD, _DWORD))*v17 + 29))(*(_DWORD *)(v1[44] + 4 * v8++), 0); } while ( v8 < v9 ); } v10 = (int)v17; (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v1[24] + 116))(v17, 0); sub_85BED0((_DWORD **)v1[24], 0.0, 1); sub_85C4D0((_DWORD *)v1[24]); sub_85C6F0((_DWORD *)v1[24]); sub_40B820(v1, v10); return 1; } //----- (0040E4A0) -------------------------------------------------------- _DWORD *__thiscall sub_40E4A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &CharCreateFrameWork::`vftable'; v1[23] = 0; v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[35] = 0; v1[34] = 0; v1[33] = 0; v1[32] = 0; v1[31] = 0; v1[37] = 0; v1[39] = 0; v1[43] = 0; v1[41] = 0; v1[42] = 0; v1[40] = &PgTList>::`vftable'; v1[44] = 0; v1[45] = 0; v1[46] = 0; v1[49] = 0; v1[50] = 0; v1[51] = 0; v1[29] = -1; v1[30] = -1; v1[27] = 0; v1[12] = 0; *((_WORD *)v1 + 22) = 0; *((_BYTE *)v1 + 52) = 0; v1[14] = 0; *((_WORD *)v1 + 20) = 0; v1[17] = 0; v1[18] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; v1[53] = 0; v1[28] = 133; *((_BYTE *)v1 + 42) = 1; *((_WORD *)v1 + 76) = 257; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9A8D24: using guessed type void *CharCreateFrameWork::`vftable'; //----- (0040E5B0) -------------------------------------------------------- void __thiscall sub_40E5B0(void **this) { void **v1; // ebx int v2; // esi _DWORD *v3; // edi _DWORD *v4; // ST00_4 volatile LONG *v5; // esi volatile LONG *v6; // esi volatile LONG *v7; // esi volatile LONG *v8; // esi volatile LONG *v9; // esi volatile LONG *v10; // esi void *v11; // ST00_4 v1 = this; *this = &CharCreateFrameWork::`vftable'; if ( this[49] ) operator delete(this[49]); v1[49] = 0; v1[50] = 0; v1[51] = 0; if ( v1[44] ) operator delete(v1[44]); v1[44] = 0; v1[45] = 0; v1[46] = 0; v2 = (int)(v1 + 40); v1[40] = &PgTList>::`vftable'; v3 = v1[41]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(void **, _DWORD *))(*(_DWORD *)v2 + 8))(v1 + 40, v4); } v1[43] = 0; v1[41] = 0; v1[42] = 0; *(_DWORD *)v2 = &NiTListBase,NiPointer>::`vftable'; v5 = (volatile LONG *)v1[39]; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); v6 = (volatile LONG *)v1[37]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); v7 = (volatile LONG *)v1[26]; if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(void *, signed int))v7)((void *)v7, 1); v8 = (volatile LONG *)v1[25]; if ( v8 && !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(void *, signed int))v8)((void *)v8, 1); v9 = (volatile LONG *)v1[24]; if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(void *, signed int))v9)((void *)v9, 1); v10 = (volatile LONG *)v1[23]; if ( v10 && !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(void *, signed int))v10)((void *)v10, 1); v11 = v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v11); } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9A8D24: using guessed type void *CharCreateFrameWork::`vftable'; //----- (0040E780) -------------------------------------------------------- char __thiscall sub_40E780(int this) { _DWORD *v1; // esi int v2; // ebx int v3; // eax volatile LONG *v4; // eax _DWORD *v5; // eax volatile LONG *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax volatile LONG *v10; // eax int v11; // edi void *v12; // [esp-1Ch] [ebp-2Ch] int v13; // [esp-18h] [ebp-28h] int v14; // [esp-14h] [ebp-24h] int v15; // [esp-10h] [ebp-20h] int v16; // [esp-Ch] [ebp-1Ch] int v17; // [esp-8h] [ebp-18h] volatile LONG *v18; // [esp-4h] [ebp-14h] void **v19; // [esp+Ch] [ebp-4h] v1 = (_DWORD *)this; v2 = 0; *(_BYTE *)(this + 152) = 1; *(_DWORD *)(this + 48) = 0; *(_WORD *)(this + 44) = 0; if ( !dword_AD01E8 ) { v3 = sub_43D0D0(1u); dword_AD01E8 = sub_5C1E00(v3, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_AD01E8); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 240))(0); } v4 = sub_40D0E0((int)(v1 + 28), (int)v1); v18 = v4; v1[17] = v4; sub_8F82A0(&unk_BA6B10, v18); v5 = (_DWORD *)sub_410A70((int)v1); v1[18] = v5; if ( !v5 ) return 0; sub_8F82A0(&unk_BA6B10, v5); v7 = sub_409860((int)v1); v1[19] = v7; if ( !v1[17] ) return 0; sub_409290(v7, 1); sub_409F00(v1[19]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[19]); v8 = (_DWORD *)sub_410550((int)v1); v1[20] = v8; if ( !v8 ) return 0; sub_8F82A0(&unk_BA6B10, v8); v9 = (_DWORD *)sub_40FD90((int)v1); v1[21] = v9; if ( !v9 ) return 0; sub_8F82A0(&unk_BA6B10, v9); v10 = sub_408E30((int)v1); v1[22] = v10; if ( !v10 ) return 0; sub_8F82A0(&unk_BA6B10, v10); while ( 1 ) { v11 = sub_680560(byte_AD9238, v2); if ( v11 ) { v19 = &v12; sub_4019E0(&v12, "ChrLevel_CanCreateSen"); if ( *(_WORD *)(v11 + 24) >= (unsigned __int16)sub_747F30(&unk_ACDC6C, v12, v13, v14, v15, v16, v17, (int)v18) ) break; } if ( ++v2 >= 6 ) return 1; } sub_408480((_DWORD *)v1[22], 1); return 1; } // AD01E8: using guessed type int dword_AD01E8; //----- (0040E910) -------------------------------------------------------- char __thiscall sub_40E910(void *this) { void *v1; // edi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // esi int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // esi void (__thiscall ***v9)(_DWORD, signed int); // ebx _DWORD *v10; // eax int v11; // esi volatile LONG *v12; // eax volatile LONG *v13; // esi volatile LONG *v14; // eax volatile LONG *v15; // esi _DWORD *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // esi void *v19; // eax float *v20; // esi int v21; // eax void *v22; // eax float *v23; // esi int v24; // eax int v25; // ST64_4 char *v26; // eax volatile LONG *v27; // esi int v28; // eax volatile LONG *v29; // eax volatile LONG *v30; // esi int v31; // eax void *v32; // eax char *v33; // ecx char *v34; // esi _DWORD *v35; // eax unsigned int v36; // eax char *v37; // eax _DWORD *v38; // eax volatile LONG *v39; // esi volatile LONG *v40; // esi volatile LONG *v42; // esi char *v43; // eax volatile LONG *v44; // esi volatile LONG *v45; // esi void *v46; // [esp+88h] [ebp-28h] int v47; // [esp+8Ch] [ebp-24h] int v48; // [esp+90h] [ebp-20h] void *v49; // [esp+94h] [ebp-1Ch] volatile LONG *v50; // [esp+98h] [ebp-18h] volatile LONG *v51; // [esp+9Ch] [ebp-14h] volatile LONG *v52; // [esp+A0h] [ebp-10h] int v53; // [esp+ACh] [ebp-4h] v1 = this; v2 = operator new(0xE8u); v46 = v2; v3 = 0; v53 = 0; if ( v2 ) v3 = sub_85A1C0(v2, 0); v4 = *((_DWORD *)v1 + 23); v53 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 23) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v5 = *((_DWORD *)v1 + 39); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 39) = 0; } v6 = operator new(0xE8u); v46 = v6; v53 = 1; if ( v6 ) v7 = sub_85A1C0(v6, 0); else v7 = 0; v8 = *((_DWORD *)v1 + 39); v53 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *((_DWORD *)v1 + 39) = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = 0; v47 = 0; v53 = 2; v10 = operator new(0x20u); v11 = (int)v10; v46 = v10; LOBYTE(v53) = 3; if ( v10 ) { sub_85B2B0(v10); *(_BYTE *)(v11 + 30) = 0; *(_DWORD *)v11 = &NiAlphaProperty::`vftable'; *(_WORD *)(v11 + 28) = 236; v9 = (void (__thiscall ***)(_DWORD, signed int))v11; v47 = v11; InterlockedIncrement((volatile LONG *)(v11 + 4)); } *((_WORD *)v9 + 14) |= 1u; *((_WORD *)v9 + 14) |= 0x200u; *((_WORD *)v9 + 14) = (_WORD)v9[7] & 0xF3FF | 0x1000; *((_BYTE *)v9 + 30) = 8; *((_WORD *)v9 + 14) = ((_WORD)v9[7] & 0xFE5F | 0x40) & 0xFFE3 | 2; v50 = (volatile LONG *)*((_DWORD *)v1 + 39); v49 = v9; InterlockedIncrement((volatile LONG *)v9 + 1); LOBYTE(v53) = 4; sub_8A6330((_DWORD *)v50 + 39, (int *)&v49); LOBYTE(v53) = 2; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); v12 = (volatile LONG *)operator new(0x28u); v13 = v12; v46 = (void *)v12; LOBYTE(v53) = 5; if ( v12 ) { sub_85B2B0(v12); *v13 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v13 + 14) = 0; *((_DWORD *)v13 + 8) = 0; *((_DWORD *)v13 + 9) = 1; } else { v13 = 0; } v51 = v13; if ( v13 ) InterlockedIncrement(v13 + 1); *((_DWORD *)v13 + 8) = 1; *((_DWORD *)v13 + 9) = 1; v50 = (volatile LONG *)*((_DWORD *)v1 + 39); v49 = (void *)v13; InterlockedIncrement(v13 + 1); LOBYTE(v53) = 7; sub_8A6330((_DWORD *)v50 + 39, (int *)&v49); LOBYTE(v53) = 6; if ( !InterlockedDecrement(v13 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); v14 = (volatile LONG *)operator new(0x30u); v15 = v14; v46 = (void *)v14; LOBYTE(v53) = 8; if ( v14 ) { sub_85B2B0(v14); *v15 = (volatile LONG)&NiFogProperty::`vftable'; *((float *)v15 + 9) = 0.0; *((float *)v15 + 10) = 0.0; *((float *)v15 + 11) = 0.0; *((_WORD *)v15 + 14) = 0; *((float *)v15 + 8) = 1.0; *((_DWORD *)v15 + 9) = dword_BA4724; *((_DWORD *)v15 + 10) = dword_BA4728; *((_DWORD *)v15 + 11) = dword_BA472C; } else { v15 = 0; } *((_WORD *)v15 + 14) &= 0xFFFEu; v50 = (volatile LONG *)*((_DWORD *)v1 + 39); v49 = (void *)v15; InterlockedIncrement(v15 + 1); LOBYTE(v53) = 9; sub_8A6330((_DWORD *)v50 + 39, (int *)&v49); LOBYTE(v53) = 6; if ( !InterlockedDecrement(v15 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v15)(v15, 1); v16 = operator new(0xE8u); v46 = v16; LOBYTE(v53) = 10; if ( v16 ) { v17 = sub_85A1C0(v16, 0); v52 = v17; } else { v52 = 0; v17 = 0; } v18 = (volatile LONG *)*((_DWORD *)v1 + 24); LOBYTE(v53) = 6; if ( v18 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement(v18 + 1) && v18 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); v17 = v52; } *((_DWORD *)v1 + 24) = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } v19 = operator new(0x10Cu); v46 = v19; LOBYTE(v53) = 11; if ( v19 ) v20 = sub_861A00((float *)v19); else v20 = 0; *((_DWORD *)v20 + 47) += 2; v20[56] = 1.0; LOBYTE(v53) = 6; v20[57] = 0.57999998; v20[58] = 0.57999998; v20[59] = 0.57999998; v21 = *((_DWORD *)v20 + 47); *((_DWORD *)v20 + 60) = dword_ABD4FC; *((_DWORD *)v20 + 61) = dword_ABD500; *((_DWORD *)v20 + 62) = dword_ABD504; *((_DWORD *)v20 + 47) = ++v21; *((_DWORD *)v20 + 63) = dword_BA4724; *((_DWORD *)v20 + 64) = dword_BA4728; *((_DWORD *)v20 + 65) = dword_BA472C; *((_DWORD *)v20 + 47) = v21 + 1; sub_861480(v20, *((_DWORD *)v1 + 24)); *((_BYTE *)v20 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(**((_DWORD **)v1 + 24) + 116))(v20, 0); v22 = operator new(0x118u); v46 = v22; LOBYTE(v53) = 12; if ( v22 ) v23 = sub_860F90((float *)v22); else v23 = 0; v24 = ++*((_DWORD *)v23 + 47); v23[56] = 1.0; *((_DWORD *)v23 + 57) = dword_BA4724; *((_DWORD *)v23 + 58) = dword_BA4728; *((_DWORD *)v23 + 59) = dword_BA472C; v23[60] = 1.0; v23[61] = 1.0; v24 += 2; *((_DWORD *)v23 + 47) = v24; v23[62] = 1.0; *((_DWORD *)v23 + 63) = dword_BA4724; *((_DWORD *)v23 + 64) = dword_BA4728; *((_DWORD *)v23 + 65) = dword_BA472C; *((_DWORD *)v23 + 47) = v24 + 1; v25 = *((_DWORD *)v1 + 24); LOBYTE(v53) = 6; sub_861480(v23, v25); *((_BYTE *)v23 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(**((_DWORD **)v1 + 24) + 116))(v23, 0); v52 = 0; LOBYTE(v53) = 13; if ( !byte_ACAD5C ) sub_420410(); v26 = (char *)sub_401410(byte_ACAB50, "\\CharCreate\\CreatBack.nif"); v27 = sub_8F63D0(v26, 0); v50 = v27; if ( !v27 ) { v42 = v51; LOBYTE(v53) = 2; if ( !InterlockedDecrement(v51 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v42)(v42, 1); v53 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); return 0; } v52 = v27; InterlockedIncrement(v27 + 1); v48 = 0; v28 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v27 + 72))(v27, "Avatar01"); v29 = (volatile LONG *)sub_402BA0((int)dword_BA455C, v28); v30 = (volatile LONG *)*((_DWORD *)v1 + 26); v49 = (void *)v29; if ( v30 != v29 ) { if ( v30 ) { if ( !InterlockedDecrement(v30 + 1) && v30 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v30)(v30, 1); v29 = (volatile LONG *)v49; } *((_DWORD *)v1 + 26) = v29; if ( v29 ) InterlockedIncrement(v29 + 1); } v31 = *((_DWORD *)v1 + 26); if ( v31 ) (*(void (__stdcall **)(int, _DWORD))(**((_DWORD **)v1 + 24) + 116))(v31, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**((_DWORD **)v1 + 23) + 116))(v50, 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 23) + 116))(*((_DWORD *)v1 + 24), 0); v32 = (void *)*((_DWORD *)v1 + 50); v49 = (void *)*((_DWORD *)v1 + 49); if ( v49 != v32 ) { v46 = 0; memcpy_0(v49, v32, 0); *((_DWORD *)v1 + 50) = v49; } v46 = (void *)*((_DWORD *)v1 + 26); sub_5B3CF0((_DWORD *)v1 + 49, &v46); v33 = (char *)*((_DWORD *)v1 + 45); v34 = (char *)*((_DWORD *)v1 + 44); if ( v34 != v33 ) { v46 = 0; memcpy_0(v34, v33, 0); *((_DWORD *)v1 + 45) = &v34[(_DWORD)v46]; } v46 = (void *)(*(int (__stdcall **)(const char *))(*v50 + 72))("Object03"); if ( v46 ) sub_5B3CF0((_DWORD *)v1 + 44, &v46); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 24) + 116))(*((_DWORD *)v1 + 39), 0); v35 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v35 || (v36 = sub_4E21A0(v35, xRight, dword_AC2F78), v36 != 1) && (v36 <= 2 || v36 > 4) ) { if ( !byte_ACAD5C ) sub_420410(); v37 = (char *)sub_401410(byte_ACAB50, "\\Charcreate\\CreatCam_4_3.nif"); v38 = sub_8F63D0(v37, 0); sub_56FF80(&v52, (int)v38); LABEL_84: v39 = v52; goto LABEL_85; } if ( !byte_ACAD5C ) sub_420410(); v43 = (char *)sub_401410(byte_ACAB50, "\\Charcreate\\CreatCam_16_9.nif"); v39 = sub_8F63D0(v43, 0); if ( v50 == v39 ) goto LABEL_84; if ( !InterlockedDecrement(v50 + 1) ) (**(void (__stdcall ***)(signed int))v50)(1); v52 = v39; if ( !v39 ) goto LABEL_86; InterlockedIncrement(v39 + 1); LABEL_85: if ( !v39 ) { LABEL_86: LOBYTE(v53) = 6; if ( v39 && !InterlockedDecrement(v39 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v39)(v39, 1); v40 = v51; LOBYTE(v53) = 2; if ( !InterlockedDecrement(v51 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v40)(v40, 1); v53 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); return 0; } if ( !sub_8F73A0(v39, &v48) ) { LOBYTE(v53) = 6; if ( !InterlockedDecrement(v39 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v39)(v39, 1); v44 = v51; LOBYTE(v53) = 2; if ( !InterlockedDecrement(v51 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v44)(v44, 1); v53 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { (**v9)(v9, 1); return 0; } return 0; } sub_56FF80((_DWORD *)v1 + 25, v48); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**((_DWORD **)v1 + 23) + 116))(v39, 0); sub_85C4D0(*((_DWORD **)v1 + 23)); sub_85C6F0(*((_DWORD **)v1 + 23)); sub_85BED0(*((_DWORD ***)v1 + 23), 0.0, 1); LOBYTE(v53) = 6; if ( !InterlockedDecrement(v39 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v39)(v39, 1); v45 = v51; LOBYTE(v53) = 2; if ( !InterlockedDecrement(v51 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v45)(v45, 1); v53 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (0040F300) -------------------------------------------------------- void *__thiscall sub_40F300(_DWORD *this) { _DWORD *v1; // esi const void *v2; // ecx void *v3; // edi void *result; // eax const void *v5; // ecx void *v6; // edi _DWORD *v7; // edi _DWORD *i; // esi _DWORD *v9; // ST08_4 v1 = this; v2 = (const void *)this[45]; v3 = (void *)v1[44]; if ( v3 != v2 ) { result = memcpy_0(v3, v2, 0); v1[45] = v3; } v5 = (const void *)v1[50]; v6 = (void *)v1[49]; if ( v6 != v5 ) { result = memcpy_0(v6, v5, 0); v1[50] = v6; } v7 = v1 + 40; for ( i = (_DWORD *)v1[41]; i; result = (void *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9) ) { v9 = i; i = (_DWORD *)*i; } v7[3] = 0; v7[1] = 0; v7[2] = 0; return result; } //----- (0040F3A0) -------------------------------------------------------- void __thiscall sub_40F3A0(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi int v3; // edi v1 = this; sub_40F300(this); v2 = (void *)v1[16]; if ( v2 ) { sub_44E770((int *)v1[16]); operator delete(v2); } v3 = v1[37]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[37] = 0; } sub_40DF80((_DWORD **)v1); sub_40E150(v1); sub_40E080(v1); *((_BYTE *)v1 + 32) = 0; v1[7] = 0; } //----- (0040F420) -------------------------------------------------------- char __thiscall sub_40F420(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int v4; // edx double v5; // st7 _DWORD *v6; // eax char result; // al void *v8; // [esp+1Ch] [ebp-38h] int v9; // [esp+20h] [ebp-34h] int v10; // [esp+24h] [ebp-30h] float v11; // [esp+2Ch] [ebp-28h] float v12; // [esp+30h] [ebp-24h] float v13; // [esp+34h] [ebp-20h] float v14; // [esp+38h] [ebp-1Ch] float v15; // [esp+3Ch] [ebp-18h] float v16; // [esp+40h] [ebp-14h] float v17; // [esp+44h] [ebp-10h] int v18; // [esp+50h] [ebp-4h] v1 = this; v2 = dword_AC9CE8; v3 = *(_DWORD *)(dword_AC9CE8 + 52); v4 = v1[25]; v17 = fabs(1.5); v5 = v17; v1[36] = v3; *(_DWORD *)(v2 + 52) = v4; *(float *)(v1[26] + 100) = v5; flt_AC9C8C = *(float *)(dword_AC9CE8 + 44); v8 = 0; *(float *)(dword_AC9CE8 + 44) = 0.00079999998; *((_BYTE *)v1 + 112) = -123; v9 = 0; v10 = 0; v18 = 0; sub_40C590(1u, 1, 0, &v8); if ( (v9 - (signed int)v8) >> 2 ) *((_BYTE *)v1 + 113) = *(_BYTE *)v8; else *((_BYTE *)v1 + 113) = 0; v11 = 0.0; *((_WORD *)v1 + 57) = 0; v12 = 0.0; v13 = 0.0; v14 = 0.0; v15 = -1.0; v16 = 0.0; sub_66D990(&unk_AD8D28); v6 = sub_665580(dword_AD8C90, (unsigned __int8 *)v1 + 112, (int)&v11, (int)&v14, 2); v1[27] = v6; if ( v6 ) { v1[15] = v6[175]; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 564))(v6, 0.0); sub_85BED0((_DWORD **)v1[15], 0.0, 0); sub_85C6F0((_DWORD *)v1[26]); sub_85C4D0((_DWORD *)v1[26]); sub_40BCF0(v1); if ( v8 ) operator delete(v8); result = 1; } else { if ( v8 ) operator delete(v8); result = 0; } return result; } // AC9C8C: using guessed type float flt_AC9C8C; // AC9CE8: using guessed type int dword_AC9CE8; //----- (0040F5B0) -------------------------------------------------------- char __thiscall sub_40F5B0(void *this, int a2) { int v2; // esi int *v4; // eax int v5; // ST04_4 v2 = (int)this; if ( !sub_40E910(this) || !sub_40F420((_DWORD *)v2) || !sub_40E780(v2) || !sub_40E1C0((_DWORD *)v2) || !sub_40E260((_DWORD *)v2) ) { return 0; } *(_BYTE *)(v2 + 32) = 1; *(_DWORD *)(v2 + 116) = -1; *(_DWORD *)(v2 + 120) = -1; v4 = sub_44EAB0((volatile LONG *)dword_BA46D0, 8); v5 = *(_DWORD *)(v2 + 92); *(_DWORD *)(v2 + 64) = v4; sub_40DB00(v4, v5); *(_BYTE *)(v2 + 40) = 0; if ( dword_AB6524 ) { if ( !sub_6B7C90((_DWORD *)dword_AB6524) ) { unknown_libname_12(&dword_AB6520); sub_6B7C20((float *)dword_AB6524, 0.0); sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); } } return 1; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // AB6524: using guessed type int dword_AB6524; // BA46D0: using guessed type int dword_BA46D0; //----- (0040F670) -------------------------------------------------------- int __thiscall sub_40F670(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; //----- (0040F6F0) -------------------------------------------------------- _DWORD *__thiscall sub_40F6F0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; //----- (0040F780) -------------------------------------------------------- int *sub_40F780() { return &dword_AC9CAC; } // AC9CAC: using guessed type int dword_AC9CAC; //----- (0040F790) -------------------------------------------------------- int sub_40F790() { return dword_AC9CAC; } // AC9CAC: using guessed type int dword_AC9CAC; //----- (0040F7A0) -------------------------------------------------------- void *__thiscall sub_40F7A0(void *this, char a2) { void *v2; // esi v2 = this; sub_40E5B0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0040F820) -------------------------------------------------------- char __thiscall sub_40F820(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char v3; // al int v4; // edx int v5; // ecx int v6; // eax int v7; // edx int v8; // eax int v9; // ecx char result; // al __int16 v11; // [esp+4h] [ebp-24h] char v12; // [esp+8h] [ebp-20h] int v13; // [esp+9h] [ebp-1Fh] int v14; // [esp+Dh] [ebp-1Bh] int v15; // [esp+11h] [ebp-17h] int v16; // [esp+15h] [ebp-13h] int v17; // [esp+19h] [ebp-Fh] int v18; // [esp+1Dh] [ebp-Bh] v1 = this; if ( this[29] != -1 ) { v2 = this[37]; if ( v2 ) { v11 = 5121; sub_905F90(v2, &v11, 2u); v3 = *((_BYTE *)v1 + 116); v4 = v1[31]; v18 = v1[28]; v5 = v1[33]; v12 = v3; v6 = v1[32]; v15 = v5; v13 = v4; v7 = v1[34]; v14 = v6; v8 = v1[35]; v9 = v1[37]; v16 = v7; v17 = v8; result = sub_906000(v9, &v12, 0x19u); } } return result; } //----- (0040F8B0) -------------------------------------------------------- int __thiscall sub_40F8B0(void *this, int a2, unsigned __int16 *a3) { signed int v3; // eax int v4; // esi char *v5; // eax volatile LONG *v6; // eax char v8; // [esp+4h] [ebp-18h] int v9; // [esp+Ch] [ebp-10h] v3 = *a3; v4 = (int)this; if ( v3 <= 385 ) { if ( v3 == 385 ) { v5 = (char *)sub_40C190(-960315177); LABEL_9: v6 = sub_462C30(1, v5); if ( v6 ) { v9 = 10; sub_461760(v6, v4, &v8, 0); } } else { switch ( v3 ) { case 130: v5 = (char *)sub_40C190(-822212817); goto LABEL_9; case 131: v5 = (char *)sub_40C190(-875776746); goto LABEL_9; case 132: v5 = (char *)sub_40C190(-1447043387); goto LABEL_9; case 133: v5 = (char *)sub_40C190(210332305); goto LABEL_9; default: return a2; } } } return a2; } //----- (0040F960) -------------------------------------------------------- int __thiscall sub_40F960(void *this, int a2, int a3, int a4, unsigned __int16 *a5) { void *v5; // esi int result; // eax v5 = this; result = 0; if ( a2 == 3 ) { if ( a3 == 23 ) { if ( *a5 == 1667 ) byte_B68508 = 1; result = a4; } } else if ( a2 == 5 ) { if ( a3 == 4 ) { result = sub_40F8B0(this, a4, a5); } else if ( a3 == 6 ) { sub_681E30(byte_AD9238, (int)a5 + 1); sub_8EF040(v5, dword_ACDD5C, 0); result = a4; } } else if ( a2 == 8 && a3 == 17 ) { result = a4; } return result; } // ACDD5C: using guessed type int dword_ACDD5C; // B68508: using guessed type char byte_B68508; //----- (0040FA00) -------------------------------------------------------- int __thiscall sub_40FA00(_DWORD *this, _DWORD *a2) { int result; // eax *this = *a2; this[1] = a2[1]; this[2] = a2[2]; this[3] = a2[3]; result = a2[4]; this[4] = result; return result; } //----- (0040FA90) -------------------------------------------------------- char __thiscall sub_40FA90(_DWORD *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG *v8; // edi int v9; // ST18_4 char v10; // ST1C_1 int v11; // ST20_4 int v12; // ST24_4 const CHAR *v13; // ST0C_4 int v14; // eax int v15; // eax volatile LONG *v16; // edi volatile LONG v17; // ebx char v18; // ST34_1 volatile LONG *v19; // edi int v20; // ST18_4 char v21; // ST1C_1 int v22; // ST20_4 int v23; // ST24_4 const CHAR *v24; // ST0C_4 int v25; // eax int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx int v29; // eax int v30; // edi int v31; // eax int v32; // eax void (__thiscall ***v33)(_DWORD, signed int); // esi char v34; // [esp+10h] [ebp-34h] char v35; // [esp+20h] [ebp-24h] int v36; // [esp+34h] [ebp-10h] int v37; // [esp+40h] [ebp-4h] v2 = (int)this; v36 = 0; this[74] = a2; v3 = dword_BA6BA0; v37 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "charcreate\\CreatCharExitButton.nif"); sub_8F66B0(v4, (int)&v36, v3); v5 = v36; if ( v36 ) { sub_456260(&v35); LOBYTE(v37) = 1; sub_455FF0(&v35, v2); sub_456000(&v35, 0, 0); sub_456380(&v35, v36); v8 = sub_456B30(&v35, 0, "Btn01", 0, 3); v9 = dword_AA8C68; v10 = dword_AA8C6C; v11 = dword_AA8C70; v12 = dword_AA8C74; v13 = sub_40C190(1331644831); v14 = (*(int (__thiscall **)(volatile LONG *))(*v8 + 148))(v8); v15 = (*(int (__thiscall **)(volatile LONG *, int))(*v8 + 144))(v8, v14); v16 = sub_4561C0(&v35, 0, 0, v15, (int)v13, (int)v8, 0, v9, v10, v11, v12, 5, 0, 0, v34); v17 = *v16; v18 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *))(v17 + 452))(v16); v19 = sub_456B30(&v35, 1, "Btn02", 0, 3); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_40C190(1169396396); v25 = (*(int (__thiscall **)(volatile LONG *))(*v19 + 148))(v19); v26 = (*(int (__thiscall **)(volatile LONG *, int))(*v19 + 144))(v19, v25); v27 = sub_4561C0(&v35, 0, 0, v26, (int)v24, (int)v19, 0, v20, v21, v22, v23, 5, 0, 0, v18); v28 = *v27; v29 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v28 + 452))(v27, v29); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 1.0); v30 = *(_DWORD *)v2; v31 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 168))(v2); v32 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 164))(v2, v31 - 10); (*(void (__thiscall **)(int, int))(v30 + 308))(v2, v32); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); LOBYTE(v37) = 0; sub_4562E0(&v35); v37 = -1; if ( v36 ) { v33 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v33 ) (**v33)(v33, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("CreatCharExitButton load fail", "LoadFail", 0); v5 = v36; } v37 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0040FD60) -------------------------------------------------------- char __thiscall sub_40FD60(char **this, int a2, int a3) { char result; // al if ( !a2 ) return sub_40BFB0(this[74]); result = a2 - 1; if ( a2 == 1 ) result = (unsigned int)sub_40B380(this[74]); return result; } //----- (0040FD90) -------------------------------------------------------- int __cdecl sub_40FD90(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CharCreateOkCancelWin::`vftable'; *(_DWORD *)(v2 + 232) = &CharCreateOkCancelWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A8DDC: using guessed type void *CharCreateOkCancelWin::`vftable'; // 9A8DFC: using guessed type void *CharCreateOkCancelWin::`vftable'; //----- (0040FED0) -------------------------------------------------------- void *__thiscall sub_40FED0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharCreateOkCancelWin::`vftable'; *((_DWORD *)this + 58) = &CharCreateOkCancelWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A8DDC: using guessed type void *CharCreateOkCancelWin::`vftable'; // 9A8DFC: using guessed type void *CharCreateOkCancelWin::`vftable'; //----- (0040FF60) -------------------------------------------------------- void __thiscall sub_40FF60(_DWORD *this, float a2) { float *v2; // ecx v2 = (float *)this[86]; if ( v2 ) sub_803810(v2, a2); } //----- (0040FF80) -------------------------------------------------------- char __thiscall sub_40FF80(_BYTE *this, char a2) { char result; // al result = a2; if ( this[348] != a2 ) this[348] = a2; return result; } //----- (0040FFA0) -------------------------------------------------------- char __thiscall sub_40FFA0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi char v10; // ST0C_1 int v11; // ST10_4 int v12; // ST14_4 int v13; // ST18_4 const CHAR *v14; // eax volatile LONG *v15; // edi volatile LONG v16; // ebx int v17; // eax char v18; // ST0C_1 int v19; // ST10_4 int v20; // ST14_4 int v21; // ST18_4 const CHAR *v22; // eax volatile LONG *v23; // edi volatile LONG v24; // ebx int v25; // eax char v26; // ST0C_1 int v27; // ST10_4 int v28; // ST14_4 int v29; // ST18_4 const CHAR *v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx int v33; // eax char v34; // ST0C_1 int v35; // ST10_4 int v36; // ST14_4 int v37; // ST18_4 const CHAR *v38; // eax volatile LONG *v39; // edi volatile LONG v40; // ebx int v41; // eax char v42; // ST0C_1 int v43; // ST10_4 int v44; // ST14_4 int v45; // ST18_4 const CHAR *v46; // eax volatile LONG *v47; // edi volatile LONG v48; // ebx int v49; // eax char v50; // ST0C_1 int v51; // ST10_4 int v52; // ST14_4 int v53; // ST18_4 const CHAR *v54; // eax volatile LONG *v55; // edi volatile LONG v56; // ebx int v57; // eax char *v58; // eax volatile LONG *v59; // eax volatile LONG *v60; // edi int v61; // eax int v62; // eax void (__thiscall ***v63)(_DWORD, signed int); // esi int v64[5]; // [esp+38h] [ebp-2Ch] int v65; // [esp+4Ch] [ebp-18h] int v66; // [esp+50h] [ebp-14h] int v67; // [esp+54h] [ebp-10h] int v68; // [esp+60h] [ebp-4h] v2 = this; v67 = 0; v3 = dword_BA6BA0; v68 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "charcreate\\ClassStat.nif"); sub_8F66B0(v4, (int)&v67, v3); v5 = v67; if ( v67 ) { v8 = sub_8FB140(v67, (int)"Plane01", (int)&v65, (int)&v66, 0); if ( sub_8F1440(v2, 0, 0, (int)v8, 0, a2, (int)"CharCreateStatWin", 0) ) { sub_456260(v64); LOBYTE(v68) = 1; sub_455FF0(v64, (int)v2); sub_456000(v64, v65, v66); sub_456380(v64, v67); sub_456820(v64, (int)"Plane02", 0); v10 = dword_AA8C68; v11 = dword_AA8C6C; v12 = dword_AA8C70; v13 = dword_AA8C74; v14 = sub_4090F0(2028322538); v15 = sub_456A50(v64, (int)"Stat01_middle", (int)v14, 0, v10, v11, v12, v13, 5, 0, 0, 0); v16 = *v15; v17 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v16 + 452))(v15, v17); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = sub_4090F0(2028256234); v23 = sub_456A50(v64, (int)"Stat02_right", (int)v22, 0, v18, v19, v20, v21, 5, 0, 0, 0); v24 = *v23; v25 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v24 + 452))(v23, v25); v26 = dword_AA8C68; v27 = dword_AA8C6C; v28 = dword_AA8C70; v29 = dword_AA8C74; v30 = sub_4090F0(2029303018); v31 = sub_456A50(v64, (int)"Stat03_right", (int)v30, 0, v26, v27, v28, v29, 5, 0, 0, 0); v32 = *v31; v33 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v32 + 452))(v31, v33); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_4090F0(2028316906); v39 = sub_456A50(v64, (int)"Stat04_middle", (int)v38, 0, v34, v35, v36, v37, 5, 0, 0, 0); v40 = *v39; v41 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v40 + 452))(v39, v41); v42 = dword_AA8C68; v43 = dword_AA8C6C; v44 = dword_AA8C70; v45 = dword_AA8C74; v46 = sub_4090F0(2028649450); v47 = sub_456A50(v64, (int)"Stat05_left", (int)v46, 0, v42, v43, v44, v45, 5, 0, 0, 0); v48 = *v47; v49 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v48 + 452))(v47, v49); v50 = dword_AA8C68; v51 = dword_AA8C6C; v52 = dword_AA8C70; v53 = dword_AA8C74; v54 = sub_4090F0(2028188906); v55 = sub_456A50(v64, (int)"Stat06_left", (int)v54, 0, v50, v51, v52, v53, 5, 0, 0, 0); v56 = *v55; v57 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v56 + 452))(v55, v57); if ( !byte_ACAD5C ) sub_420410(); v58 = (char *)sub_401410(byte_ACAB50, "charcreate\\class_stat\\class_stat.kfm"); v59 = sub_803770(v58, 0, 1, 0); v2[86] = v59; if ( v59 ) { (*((void (__thiscall **)(volatile LONG **, _DWORD, _DWORD))*v2 + 29))(v2, *((_DWORD *)v59 + 3), 0); sub_4106E0(v2[86], 0); } (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.0, 1.0); v60 = *v2; v61 = (*((int (__thiscall **)(volatile LONG **))*v2 + 42))(v2); v62 = (*((int (__thiscall **)(volatile LONG **, int))*v2 + 41))(v2, v61 - 10); (*((void (__thiscall **)(volatile LONG **, int))v60 + 77))(v2, v62); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 130))(v2, 0); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 60))(v2, 0); LOBYTE(v68) = 0; sub_4562E0(v64); v63 = (void (__thiscall ***)(_DWORD, signed int))v67; v68 = -1; if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v63 ) (**v63)(v63, 1); result = 1; } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v67; v68 = -1; if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } } else { if ( off_AC0554 ) { off_AC0554("ClassStat.nif Load Fail", "LoadFail", 0); v5 = v67; } v68 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00410490) -------------------------------------------------------- char __thiscall sub_410490(int this) { int v1; // eax char result; // al v1 = 0; switch ( *(unsigned __int8 *)(this + 348) ) { case 1u: result = sub_4106E0(*(_DWORD **)(this + 344), 0); break; case 6u: result = sub_4106E0(*(_DWORD **)(this + 344), 1); break; case 0xBu: result = sub_4106E0(*(_DWORD **)(this + 344), 2); break; case 0x10u: result = sub_4106E0(*(_DWORD **)(this + 344), 3); break; case 0x15u: result = sub_4106E0(*(_DWORD **)(this + 344), 4); break; case 0x1Au: v1 = 5; goto LABEL_8; default: LABEL_8: result = sub_4106E0(*(_DWORD **)(this + 344), v1); break; } return result; } //----- (00410550) -------------------------------------------------------- int __cdecl sub_410550(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CharCreateStatWin::`vftable'; *(_DWORD *)(v2 + 232) = &CharCreateStatWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_BYTE *)(v2 + 348) = 1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A9104: using guessed type void *CharCreateStatWin::`vftable'; // 9A9124: using guessed type void *CharCreateStatWin::`vftable'; //----- (004106A0) -------------------------------------------------------- void *__thiscall sub_4106A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharCreateStatWin::`vftable'; *((_DWORD *)this + 58) = &CharCreateStatWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A9104: using guessed type void *CharCreateStatWin::`vftable'; // 9A9124: using guessed type void *CharCreateStatWin::`vftable'; //----- (004106E0) -------------------------------------------------------- char __thiscall sub_4106E0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *v4; // ST04_4 int v5; // esi char result; // al v2 = this; v3 = (_DWORD *)this[41]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v2[40] + 8))(v2 + 40, v4); } v5 = a2; v2[43] = 0; v2[41] = 0; v2[42] = 0; if ( v2[7] == v5 ) goto LABEL_7; if ( v5 == -2 || (result = sub_8C4C90(v2 + 30, v5, &a2)) != 0 ) { v2[7] = v5; LABEL_7: result = 1; *((_BYTE *)v2 + 40) = 1; } return result; } //----- (004107B0) -------------------------------------------------------- void __thiscall sub_4107B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // ecx int v6; // eax int v7; // ecx v3 = this; if ( a2 == 1 ) { if ( this[87] == a3 ) { v4 = this[86]; if ( v4 ) { *(_BYTE *)(this[86] + 44) = *(_BYTE *)(v4 + 44) == 0; v5 = this[86]; if ( *(_BYTE *)(v5 + 44) ) sub_40B4F0(v5); else sub_40B4D0((_DWORD **)v5); *(_BYTE *)(v3[86] + 43) = 1; } } else if ( this[88] == a3 ) { v6 = this[86]; if ( v6 ) { *(_BYTE *)(v6 + 44) = *(_BYTE *)(v6 + 44) == 0; v7 = this[86]; if ( *(_BYTE *)(v7 + 44) ) sub_40B4F0(v7); else sub_40B4D0((_DWORD **)v7); *(_BYTE *)(v3[86] + 43) = 0; } } } } //----- (004108B0) -------------------------------------------------------- char __thiscall sub_4108B0(_DWORD *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax void (__thiscall *v8)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v9)(_DWORD, signed int); // esi char v10; // [esp+18h] [ebp-24h] int v11; // [esp+2Ch] [ebp-10h] int v12; // [esp+38h] [ebp-4h] v2 = (int)this; v11 = 0; this[86] = a2; v3 = dword_BA6BA0; v12 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\CharCreate\\CreatCharTurnButton.nif"); sub_8F66B0(v4, (int)&v11, v3); if ( !v11 ) return 0; if ( !sub_8F15E0((volatile LONG **)v2, 393, 654, 0, a2, (int)"CharCreateViewCtrlWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v11; v12 = -1; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(&v10); LOBYTE(v12) = 1; sub_455FF0(&v10, v2); sub_456000(&v10, 0, 0); sub_456380(&v10, v11); *(_DWORD *)(v2 + 348) = sub_456B30(&v10, 0, "TurnL", 0, 3); v7 = sub_456B30(&v10, 1, "TurnR", 0, 3); v8 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 352) = v7; v8(v2, xRight, dword_AC2F78, 0.5, 0.80000001); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); LOBYTE(v12) = 0; sub_4562E0(&v10); v12 = -1; if ( v11 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00410A70) -------------------------------------------------------- int __cdecl sub_410A70(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CharCreateViewCtrlWin::`vftable'; *(_DWORD *)(v2 + 232) = &CharCreateViewCtrlWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A9394: using guessed type void *CharCreateViewCtrlWin::`vftable'; // 9A93B4: using guessed type void *CharCreateViewCtrlWin::`vftable'; //----- (00410BC0) -------------------------------------------------------- void *__thiscall sub_410BC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharCreateViewCtrlWin::`vftable'; *((_DWORD *)this + 58) = &CharCreateViewCtrlWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A9394: using guessed type void *CharCreateViewCtrlWin::`vftable'; // 9A93B4: using guessed type void *CharCreateViewCtrlWin::`vftable'; //----- (00410C00) -------------------------------------------------------- void __thiscall sub_410C00(void *this) { int v1; // esi v1 = *(_DWORD *)this; if ( *(_DWORD *)this && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } } //----- (00410C30) -------------------------------------------------------- char *__thiscall sub_410C30(char *this, char *a2) { *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; return strncpy(this, a2, 0xCu); } //----- (00410C50) -------------------------------------------------------- char *__thiscall sub_410C50(char *this, char *a2) { _DWORD *v2; // eax v2 = this + 572596; v2[2] = 0; v2[1] = 0; *v2 = 0; return strncpy(this + 572596, a2, 0xCu); } //----- (00410C80) -------------------------------------------------------- char __thiscall sub_410C80(void *this) { int v1; // esi int v2; // eax v1 = (int)this; v2 = sub_491800((int)this); *(_DWORD *)(v1 + 36) = v2; if ( !v2 ) return 0; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 240))(v2, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 36)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 40)); *(_DWORD *)(v1 + 304) = sub_416420(v1); if ( dword_AB6524 ) { if ( !sub_6B7C90((_DWORD *)dword_AB6524) ) { unknown_libname_12(&dword_AB6520); sub_6B7C20((float *)dword_AB6524, 0.0); sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); } } return 1; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // AB6524: using guessed type int dword_AB6524; //----- (00410D20) -------------------------------------------------------- _DWORD *__thiscall sub_410D20(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ecx _DWORD *result; // eax _DWORD *v4; // edi v1 = this; if ( this[9] ) { sub_8F9E00(&unk_BA6B10, this[9]); v1[9] = 0; } if ( v1[10] ) { sub_8F9E00(&unk_BA6B10, v1[10]); v1[10] = 0; } if ( v1[73] ) sub_8F9E00(&unk_BA6B10, v1[73]); v2 = v1[76]; if ( v2 ) { (*(void (**)(void))(*v2 + 360))(); sub_8F9E00(&unk_BA6B10, v1[76]); v1[76] = 0; } result = v1[91]; if ( result ) { result = sub_8F9E00(&unk_BA6B10, v1[91]); v1[91] = 0; } v4 = v1[73]; if ( v4 ) { result = (_DWORD *)InterlockedDecrement(v4 + 1); if ( !result ) { if ( v4 ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); } v1[73] = 0; } return result; } //----- (00410DE0) -------------------------------------------------------- void __thiscall sub_410DE0(_DWORD *this) { int *v1; // edi signed int v2; // ebx int v3; // esi int *v4; // edi signed int v5; // ebx int v6; // esi int v7; // esi LONG (__stdcall *v8)(volatile LONG *); // ebx int v9; // esi int v10; // esi int v11; // esi _DWORD *v12; // [esp+Ch] [ebp-4h] v12 = this; v1 = this + 11; v2 = 6; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = 0; } ++v1; --v2; } while ( v2 ); v4 = v12 + 55; v5 = 6; do { v6 = *v4; if ( *v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *v4 = 0; } ++v4; --v5; } while ( v5 ); if ( v12[72] && (v7 = v12[72]) != 0 ) { v8 = InterlockedDecrement; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v12[72] = 0; } else { v8 = InterlockedDecrement; } v9 = v12[71]; if ( v9 ) { if ( !v8((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v12[71] = 0; } v10 = v12[70]; if ( v10 ) { if ( !v8((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v12[70] = 0; } v11 = v12[77]; if ( v11 ) { if ( !v8((volatile LONG *)(v11 + 4)) ) { if ( v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); } v12[77] = 0; } } //----- (00410F30) -------------------------------------------------------- char __thiscall sub_410F30(_DWORD *this) { int v1; // eax double v2; // st7 signed int v3; // ebx _BYTE **v4; // esi int v5; // edi _DWORD *v6; // eax _DWORD **v7; // edi _DWORD *v8; // esi _DWORD *v9; // eax _DWORD *v10; // eax float v12; // [esp+20h] [ebp-2Ch] float v13; // [esp+24h] [ebp-28h] float v14; // [esp+28h] [ebp-24h] float v15; // [esp+2Ch] [ebp-20h] float v16; // [esp+30h] [ebp-1Ch] float v17; // [esp+34h] [ebp-18h] void *v18; // [esp+38h] [ebp-14h] char v19; // [esp+3Fh] [ebp-Dh] int v20; // [esp+48h] [ebp-4h] v18 = this; v1 = dword_AC9CE8; this[68] = *(_DWORD *)(dword_AC9CE8 + 52); *(_DWORD *)(v1 + 52) = this[72]; v2 = *(float *)(dword_AC9CE8 + 44); v19 = 0; flt_AC9CC8 = v2; v3 = 0; v4 = (_BYTE **)(this + 61); *(float *)(dword_AC9CE8 + 44) = 0.001; do { v5 = sub_680580(byte_AD9238, v3); if ( v5 ) { v12 = 0.0; v13 = 0.0; v14 = 0.0; v15 = 0.0; v16 = -1.0; v17 = 0.0; sub_66D990(&unk_AD8D28); v6 = sub_665400(dword_AD8C90, v5, (int)&v12, (int)&v15, 1); *v4 = v6; if ( v6 ) { sub_85BED0((_DWORD **)*(v4 - 6), 0.0, 0); v7 = (_DWORD **)*((_DWORD *)*v4 + 175); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)*(v4 - 6) + 116))(*((_DWORD *)*v4 + 175), 0); sub_85BED0(v7, 0.0, 0); sub_85C6F0(*(v4 - 6)); sub_85C4D0(*(v4 - 6)); sub_4133F0(*v4, v3); v19 = 1; } } else { *v4 = 0; } ++v3; ++v4; } while ( v3 < 6 ); v8 = v18; if ( !v19 ) sub_4917D0(*((_DWORD ***)v18 + 9)); sub_680670(byte_AD9238, 255); v9 = operator new(0x3Cu); v18 = v9; v20 = 0; if ( v9 ) v10 = sub_4445D0(v9); else v10 = 0; v8[69] = v10; return 1; } // AC9CC8: using guessed type float flt_AC9CC8; // AC9CE8: using guessed type int dword_AC9CE8; //----- (004110B0) -------------------------------------------------------- void __thiscall sub_4110B0(_DWORD *this) { int v1; // eax int *v2; // edi signed int v3; // ebx int v4; // esi void *v5; // esi _DWORD *v6; // [esp+0h] [ebp-4h] v1 = dword_AC9CE8; v6 = this; if ( dword_AC9CE8 ) { *(float *)(dword_AC9CE8 + 44) = 0.0017500001; *(_DWORD *)(v1 + 52) = this[68]; } v2 = this + 55; v3 = 6; do { v4 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = 0; } ++v2; --v3; } while ( v3 ); sub_665FD0(dword_AD8C90); v5 = (void *)v6[69]; if ( v5 ) { sub_4445C0(v6[69]); operator delete(v5); } } // 4445C0: using guessed type int __thiscall sub_4445C0(_DWORD); // AC9CE8: using guessed type int dword_AC9CE8; //----- (00411140) -------------------------------------------------------- char __thiscall sub_411140(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // edi v1 = this; v2 = this[74]; v3 = dword_AB7F4C; if ( v2 != dword_AB7F4C ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[74] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } return 1; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (004111D0) -------------------------------------------------------- char __thiscall sub_4111D0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // edi _DWORD *v4; // ST30_4 void *v5; // eax float *v6; // edi _DWORD *v7; // eax unsigned int v8; // ebx unsigned int v9; // edi int v10; // edi float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] void *v15; // [esp+50h] [ebp-18h] volatile LONG *v16; // [esp+54h] [ebp-14h] void **v17; // [esp+58h] [ebp-10h] int v18; // [esp+64h] [ebp-4h] v1 = this; v2 = this[77]; v12 = 4.0; v1[86] = 6; v13 = -45.0; v14 = -17.0; sub_8D8240((_DWORD *)(v2 + 176)); v3 = (_DWORD *)v1[79]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[78] + 8))(v1 + 78, v4); } v1[81] = 0; v1[79] = 0; v1[80] = 0; v17 = 0; if ( v1[86] > 0u ) { do { v5 = operator new(0x84u); v15 = v5; v6 = 0; v18 = 0; if ( v5 ) v6 = sub_68E760((float *)v5, (int)&v12, 0, 0, 5); v16 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v18 = 1; sub_8B8EC0(v1 + 78, (int *)&v16); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[77] + 116))(*((_DWORD *)v6 + 29), 0); v18 = -1; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); v17 = (void **)((char *)v17 + 1); } while ( (unsigned int)v17 < v1[86] ); } v7 = operator new(0xE8u); v15 = v7; v8 = 0; v18 = 2; if ( v7 ) v17 = (void **)sub_85A1C0(v7, 0); else v17 = 0; v18 = -1; sub_85AB50(v17, "ShadowNode"); v9 = (v1[83] - v1[82]) >> 2; if ( v9 ) { do { (*(void (__stdcall **)(volatile LONG **, _DWORD))(*(_DWORD *)v1[70] + 120))(&v16, *(_DWORD *)(v1[82] + 4 * v8)); if ( v16 ) { v15 = (void *)v16; if ( !InterlockedDecrement(v16 + 1) ) { if ( v15 ) (**(void (__stdcall ***)(signed int))v15)(1); } } (*((void (__stdcall **)(_DWORD, _DWORD))*v17 + 29))(*(_DWORD *)(v1[82] + 4 * v8++), 0); } while ( v8 < v9 ); } v10 = (int)v17; (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v1[71] + 116))(v17, 0); sub_85BED0((_DWORD **)v1[71], 0.0, 1); sub_85C4D0((_DWORD *)v1[71]); sub_85C6F0((_DWORD *)v1[71]); sub_415D20(v1, v10); return 1; } //----- (00411430) -------------------------------------------------------- _DWORD *__thiscall sub_411430(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int *v3; // eax int v4; // edi bool v5; // zf signed int v7; // [esp+14h] [ebp-14h] _DWORD *v8; // [esp+18h] [ebp-10h] v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[4] = 1; v1[5] = -1; v1[6] = 0; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &CharSelectFrameWork::`vftable'; `eh vector constructor iterator'( v1 + 11, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[17] = 0; sub_8CF980((float *)v1 + 18); `eh vector constructor iterator'( v1 + 42, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 48, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 55, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[70] = 0; v1[71] = 0; v1[72] = 0; v1[73] = 0; v1[74] = 0; v1[77] = 0; v1[81] = 0; v1[79] = 0; v1[80] = 0; v1[78] = &PgTList>::`vftable'; v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[9] = 0; v1[10] = 0; v1[67] = -1; v1[69] = 0; *((_BYTE *)v1 + 300) = 0; v2 = v1[73]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[73] = 0; } v3 = v1 + 11; *((_BYTE *)v1 + 216) = 0; v8 = v1 + 11; v7 = 6; do { v4 = *v3; if ( *v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v8 = 0; } v3 = v8 + 1; v5 = v7-- == 1; ++v8; } while ( !v5 ); v1[91] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9A96F4: using guessed type void *CharSelectFrameWork::`vftable'; //----- (00411640) -------------------------------------------------------- void __thiscall sub_411640(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi int v4; // edi _DWORD *v5; // ebx _DWORD *v6; // ST0C_4 int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi void *v14; // ST0C_4 v1 = this; *this = &CharSelectFrameWork::`vftable'; v2 = (_DWORD *)this[73]; if ( v2 ) sub_8F9E00(&unk_BA6B10, v2); v3 = v1[73]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[73] = 0; } if ( v1[87] ) operator delete((void *)v1[87]); v1[87] = 0; v1[88] = 0; v1[89] = 0; if ( v1[82] ) operator delete((void *)v1[82]); v4 = (int)(v1 + 78); v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[78] = &PgTList>::`vftable'; v5 = (_DWORD *)v1[79]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v4 + 8))(v1 + 78, v6); } v1[81] = 0; v1[79] = 0; v1[80] = 0; *(_DWORD *)v4 = &NiTListBase,NiPointer>::`vftable'; v7 = v1[77]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[74]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[73]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[72]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[71]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[70]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); `eh vector destructor iterator'(v1 + 55, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 48, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 42, 4u, 6, sub_410C00); sub_8CFA70(v1 + 18); v13 = v1[17]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); `eh vector destructor iterator'(v1 + 11, 4u, 6, sub_410C00); v14 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v14); } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9A96F4: using guessed type void *CharSelectFrameWork::`vftable'; //----- (004118E0) -------------------------------------------------------- char __thiscall sub_4118E0(_DWORD *this) { _DWORD *v1; // edi float v2; // eax _DWORD *v3; // ebx int v4; // esi int v5; // esi float v6; // eax _DWORD *v7; // ebx int v8; // esi float v9; // ebx float v10; // eax int v11; // esi int v12; // ecx int v13; // esi float v14; // eax volatile LONG *v15; // esi int v16; // edx float v17; // eax volatile LONG *v18; // esi int v19; // eax float v20; // eax volatile LONG *v21; // eax int v22; // edi volatile LONG *v23; // esi float v24; // eax float *v25; // esi int v26; // eax float v27; // eax float *v28; // esi int v29; // eax float v30; // edx float v31; // ecx float v32; // edx int v33; // ST7C_4 char *v34; // eax _DWORD *v35; // eax int *v36; // ebx int v37; // eax int v38; // edi int v39; // esi char result; // al int v41; // eax char v42; // al int v43; // edi int v44; // eax const void *v45; // eax void *v46; // edi int v47; // esi unsigned int v48; // eax unsigned int v49; // edi _BYTE *v50; // edx int v51; // ecx int v52; // edi unsigned int v53; // eax unsigned int v54; // eax unsigned int v55; // ecx char *v56; // ecx _DWORD *v57; // eax _DWORD *v58; // edi int v59; // ecx unsigned int v60; // eax unsigned int v61; // eax unsigned int v62; // ecx char *v63; // ecx unsigned int *v64; // eax char *v65; // eax char *v66; // ecx char *v67; // ebx int v68; // edi int v69; // edx unsigned int v70; // eax _BYTE *v71; // ebx int v72; // ecx void *v73; // edx unsigned int v74; // eax unsigned int v75; // eax unsigned int v76; // ecx char *v77; // ecx _DWORD *v78; // edx _DWORD *v79; // eax int v80; // ecx unsigned int v81; // eax unsigned int v82; // eax unsigned int v83; // ecx char *v84; // ecx int *v85; // eax int v86; // ebx int v87; // esi unsigned int v88; // eax _BYTE *v89; // edx int v90; // ecx int v91; // esi unsigned int v92; // eax unsigned int v93; // eax unsigned int v94; // ecx char *v95; // ecx _DWORD *v96; // eax _DWORD *v97; // esi int v98; // ecx unsigned int v99; // eax unsigned int v100; // eax unsigned int v101; // ecx char *v102; // ecx int *v103; // eax int v104; // esi unsigned int v105; // eax _BYTE *v106; // edx int v107; // ecx int v108; // esi unsigned int v109; // eax unsigned int v110; // eax unsigned int v111; // ecx char *v112; // ecx _DWORD *v113; // eax _DWORD *v114; // esi int v115; // ecx unsigned int v116; // eax unsigned int v117; // eax unsigned int v118; // ecx char *v119; // ecx int *v120; // eax int v121; // esi unsigned int v122; // eax _BYTE *v123; // edx int v124; // ecx int v125; // esi unsigned int v126; // eax unsigned int v127; // eax unsigned int v128; // ecx char *v129; // ecx _DWORD *v130; // eax _DWORD *v131; // esi int v132; // ecx unsigned int v133; // eax unsigned int v134; // eax unsigned int v135; // ecx char *v136; // ecx int *v137; // eax int v138; // esi unsigned int v139; // eax _BYTE *v140; // edx int v141; // ecx int v142; // esi unsigned int v143; // eax unsigned int v144; // eax unsigned int v145; // ecx char *v146; // ecx _DWORD *v147; // eax _DWORD *v148; // esi int v149; // ecx unsigned int v150; // eax unsigned int v151; // eax unsigned int v152; // ecx char *v153; // ecx int *v154; // eax int v155; // esi unsigned int v156; // eax _BYTE *v157; // edx int v158; // ecx int v159; // esi unsigned int v160; // eax unsigned int v161; // eax unsigned int v162; // ecx char *v163; // ecx _DWORD *v164; // eax _DWORD *v165; // esi int v166; // ecx unsigned int v167; // eax unsigned int v168; // eax unsigned int v169; // ecx char *v170; // ecx int *v171; // eax _DWORD *v172; // eax unsigned int v173; // eax int v174; // eax char v175; // cl _DWORD *v176; // esi LONG (__stdcall *v177)(volatile LONG *); // ebx int v178; // edi int v179; // eax char v180; // cl _DWORD *v181; // esi volatile LONG *v182; // esi void (__thiscall ***v183)(_DWORD, signed int); // esi volatile LONG *v184; // esi volatile LONG *v185; // eax int v186; // esi volatile LONG *v187; // esi void (__thiscall ***v188)(_DWORD, signed int); // esi float v189; // [esp+94h] [ebp-84h] float v190; // [esp+98h] [ebp-80h] float v191; // [esp+9Ch] [ebp-7Ch] float v192; // [esp+A0h] [ebp-78h] _DWORD *v193; // [esp+A4h] [ebp-74h] int v194; // [esp+A8h] [ebp-70h] volatile LONG *v195; // [esp+ACh] [ebp-6Ch] unsigned int *v196; // [esp+B0h] [ebp-68h] char *v197; // [esp+B4h] [ebp-64h] volatile LONG *lpAddend; // [esp+B8h] [ebp-60h] _DWORD *v199; // [esp+BCh] [ebp-5Ch] void *v200; // [esp+C0h] [ebp-58h] unsigned int v201; // [esp+C4h] [ebp-54h] char v202; // [esp+C8h] [ebp-50h] int v203; // [esp+114h] [ebp-4h] v1 = this; v197 = (char *)this; v2 = COERCE_FLOAT(operator new(0xECu)); *(float *)&v200 = v2; v3 = 0; v203 = 0; if ( v2 != 0.0 ) v3 = sub_861B30((_DWORD *)LODWORD(v2)); v4 = v1[70]; v203 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[70] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } *(_DWORD *)(v1[70] + 232) = 0; v5 = v1[77]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[77] = 0; } v6 = COERCE_FLOAT(operator new(0xE8u)); *(float *)&v200 = v6; v203 = 1; if ( v6 == 0.0 ) v7 = 0; else v7 = sub_85A1C0((_DWORD *)LODWORD(v6), 0); v8 = v1[77]; v203 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[77] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = 0.0; v194 = 0; v203 = 2; v10 = COERCE_FLOAT(operator new(0x20u)); v11 = LODWORD(v10); *(float *)&v200 = v10; LOBYTE(v203) = 3; if ( v10 != 0.0 ) { sub_85B2B0((_DWORD *)LODWORD(v10)); *(_BYTE *)(v11 + 30) = 0; *(_DWORD *)v11 = &NiAlphaProperty::`vftable'; *(_WORD *)(v11 + 28) = 236; v9 = *(float *)&v11; v194 = v11; InterlockedIncrement((volatile LONG *)(v11 + 4)); } *(_WORD *)(LODWORD(v9) + 28) |= 1u; *(_WORD *)(LODWORD(v9) + 28) |= 0x200u; *(_WORD *)(LODWORD(v9) + 28) = *(_WORD *)(LODWORD(v9) + 28) & 0xF3FF | 0x1000; *(_BYTE *)(LODWORD(v9) + 30) = 8; v12 = (int)v197; *(_WORD *)(LODWORD(v9) + 28) = (*(_WORD *)(LODWORD(v9) + 28) & 0xFE5F | 0x40) & 0xFFE3 | 2; v13 = *(_DWORD *)(v12 + 308); *(float *)&v200 = v9; InterlockedIncrement((volatile LONG *)(LODWORD(v9) + 4)); LOBYTE(v203) = 4; sub_8A6330((_DWORD *)(v13 + 156), (int *)&v200); LOBYTE(v203) = 2; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v9) + 4)) ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v9))(LODWORD(v9), 1); v14 = COERCE_FLOAT(operator new(0x28u)); *(float *)&v15 = v14; *(float *)&v200 = v14; LOBYTE(v203) = 5; if ( v14 == 0.0 ) { *(float *)&v15 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v14)); *v15 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v15 + 14) = 0; *((_DWORD *)v15 + 8) = 0; *((_DWORD *)v15 + 9) = 1; } v195 = v15; if ( *(float *)&v15 != 0.0 ) InterlockedIncrement(v15 + 1); v16 = (int)v197; *((_DWORD *)v15 + 8) = 1; *((_DWORD *)v15 + 9) = 1; v196 = *(unsigned int **)(v16 + 308); v200 = (void *)v15; InterlockedIncrement(v15 + 1); LOBYTE(v203) = 7; sub_8A6330(v196 + 39, (int *)&v200); LOBYTE(v203) = 6; if ( !InterlockedDecrement(v15 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v15)(v15, 1); v17 = COERCE_FLOAT(operator new(0x30u)); *(float *)&v18 = v17; *(float *)&v200 = v17; LOBYTE(v203) = 8; if ( v17 == 0.0 ) { *(float *)&v18 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v17)); *v18 = (volatile LONG)&NiFogProperty::`vftable'; *((float *)v18 + 9) = 0.0; *((float *)v18 + 10) = 0.0; *((float *)v18 + 11) = 0.0; *((_WORD *)v18 + 14) = 0; *((float *)v18 + 8) = 1.0; *((_DWORD *)v18 + 9) = dword_BA4724; *((_DWORD *)v18 + 10) = dword_BA4728; *((_DWORD *)v18 + 11) = dword_BA472C; } v19 = (int)v197; *((_WORD *)v18 + 14) &= 0xFFFEu; v196 = *(unsigned int **)(v19 + 308); v200 = (void *)v18; InterlockedIncrement(v18 + 1); LOBYTE(v203) = 9; sub_8A6330(v196 + 39, (int *)&v200); LOBYTE(v203) = 6; if ( !InterlockedDecrement(v18 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); v20 = COERCE_FLOAT(operator new(0xE8u)); *(float *)&v200 = v20; LOBYTE(v203) = 10; if ( v20 == 0.0 ) { lpAddend = 0; v21 = 0; } else { v21 = sub_85A1C0((_DWORD *)LODWORD(v20), 0); lpAddend = v21; } v22 = (int)v197; v23 = (volatile LONG *)*((_DWORD *)v197 + 71); LOBYTE(v203) = 6; if ( v23 != v21 ) { if ( v23 ) { if ( !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v23)(v23, 1); v21 = lpAddend; } *((_DWORD *)v197 + 71) = v21; if ( v21 ) InterlockedIncrement(v21 + 1); } v24 = COERCE_FLOAT(operator new(0x10Cu)); *(float *)&v200 = v24; LOBYTE(v203) = 11; if ( v24 == 0.0 ) v25 = 0; else v25 = sub_861A00((float *)LODWORD(v24)); *((_DWORD *)v25 + 47) += 2; v25[56] = 1.0; LOBYTE(v203) = 6; v190 = 0.80000001; v191 = 0.80000001; v192 = 0.80000001; v25[57] = 0.80000001; v25[58] = 0.80000001; v25[59] = 0.80000001; v26 = *((_DWORD *)v25 + 47); *((_DWORD *)v25 + 60) = dword_ABD4FC; *((_DWORD *)v25 + 61) = dword_ABD500; *((_DWORD *)v25 + 62) = dword_ABD504; *((_DWORD *)v25 + 47) = ++v26; *((_DWORD *)v25 + 63) = dword_BA4724; *((_DWORD *)v25 + 64) = dword_BA4728; *((_DWORD *)v25 + 65) = dword_BA472C; *((_DWORD *)v25 + 47) = v26 + 1; sub_861480(v25, *(_DWORD *)(v22 + 284)); *((_BYTE *)v25 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(**(_DWORD **)(v22 + 284) + 116))(v25, 0); v27 = COERCE_FLOAT(operator new(0x118u)); *(float *)&v200 = v27; LOBYTE(v203) = 12; if ( v27 == 0.0 ) v28 = 0; else v28 = sub_860F90((float *)LODWORD(v27)); v29 = ++*((_DWORD *)v28 + 47); v28[56] = 1.0; v190 = 1.0; *((_DWORD *)v28 + 57) = dword_BA4724; v191 = 1.0; v192 = 1.0; *((_DWORD *)v28 + 58) = dword_BA4728; v30 = v190; *((_DWORD *)v28 + 59) = dword_BA472C; v31 = v191; v28[60] = v30; v32 = v192; v28[61] = v31; v29 += 2; *((_DWORD *)v28 + 47) = v29; v28[62] = v32; *((_DWORD *)v28 + 63) = dword_BA4724; *((_DWORD *)v28 + 64) = dword_BA4728; *((_DWORD *)v28 + 65) = dword_BA472C; *((_DWORD *)v28 + 47) = v29 + 1; v33 = *(_DWORD *)(v22 + 284); LOBYTE(v203) = 6; sub_861480(v28, v33); *((_BYTE *)v28 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(**(_DWORD **)(v22 + 284) + 116))(v28, 0); v193 = 0; LOBYTE(v203) = 13; if ( !byte_ACAD5C ) sub_420410(); v34 = (char *)sub_401410(byte_ACAB50, "\\CharSelect\\selectBack.nif"); v35 = sub_8F63D0(v34, 0); v199 = v35; if ( v35 ) { v193 = v35; lpAddend = v35 + 1; InterlockedIncrement(v35 + 1); v189 = 0.0; v201 = 0; v196 = (unsigned int *)(v22 + 220); v36 = (int *)(v22 + 220); do { sprintf(&v202, "Avatar%d", v201); v37 = (*(int (__stdcall **)(char *))(*v199 + 72))(&v202); v38 = v37; if ( v37 ) { v41 = (*(int (__thiscall **)(int))(*(_DWORD *)v37 + 4))(v37); if ( v41 ) { while ( (char *)v41 != dword_BA455C ) { v41 = *(_DWORD *)(v41 + 4); if ( !v41 ) goto LABEL_72; } v42 = 1; } else { LABEL_72: v42 = 0; } v39 = v42 != 0 ? v38 : 0; } else { v39 = 0; } v43 = *v36; if ( *v36 != v39 ) { if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v43 ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); *v36 = v39; if ( v39 ) InterlockedIncrement((volatile LONG *)(v39 + 4)); } if ( *v36 ) { (*(void (__stdcall **)(int, _DWORD))(**((_DWORD **)v197 + 71) + 116))(*v36, 0); v44 = *v36; *(float *)&v200 = fabs(1.0); *(float *)(v44 + 100) = *(float *)&v200; } ++v36; ++v201; } while ( v201 < 6 ); (*(void (__stdcall **)(_DWORD *, _DWORD))(**((_DWORD **)v197 + 70) + 116))(v199, 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v197 + 70) + 116))(*((_DWORD *)v197 + 71), 0); v45 = (const void *)*((_DWORD *)v197 + 88); v46 = (void *)*((_DWORD *)v197 + 87); v47 = (int)(v197 + 348); if ( v46 != v45 ) { memcpy_0(v46, v45, 0); *((_DWORD *)v197 + 88) = v46; } *(float *)&v200 = 0.0; do { v48 = *(_DWORD *)(v47 + 4); v49 = *v196; v201 = *v196; if ( (unsigned int)&v201 >= v48 || (v50 = *(_BYTE **)v47, *(_DWORD *)v47 > (unsigned int)&v201) ) { v59 = *(_DWORD *)(v47 + 8); if ( v48 == v59 ) { v60 = (signed int)(v48 - *(_DWORD *)v47) >> 2; if ( v60 > 0x3FFFFFFE ) goto LABEL_120; v61 = v60 + 1; v62 = (v59 - *(_DWORD *)v47) >> 2; if ( v61 > v62 ) { if ( 0x3FFFFFFF - (v62 >> 1) >= v62 ) v63 = (char *)((v62 >> 1) + v62); else v63 = 0; if ( (unsigned int)v63 < v61 ) v63 = (char *)v61; sub_74E360((const void **)v47, v63); } } v64 = *(unsigned int **)(v47 + 4); if ( v64 ) *v64 = v49; } else { v51 = *(_DWORD *)(v47 + 8); v52 = ((char *)&v201 - v50) >> 2; if ( v48 == v51 ) { v53 = (signed int)(v48 - (_DWORD)v50) >> 2; if ( v53 > 0x3FFFFFFE ) goto LABEL_120; v54 = v53 + 1; v55 = (v51 - (signed int)v50) >> 2; if ( v54 > v55 ) { if ( 0x3FFFFFFF - (v55 >> 1) >= v55 ) v56 = (char *)((v55 >> 1) + v55); else v56 = 0; if ( (unsigned int)v56 < v54 ) v56 = (char *)v54; sub_74E360((const void **)v47, v56); } } v57 = *(_DWORD **)(v47 + 4); v58 = (_DWORD *)(*(_DWORD *)v47 + 4 * v52); if ( v57 ) *v57 = *v58; } v65 = (char *)v200; *(_DWORD *)(v47 + 4) += 4; ++v196; v200 = v65 + 1; } while ( (unsigned int)(v65 + 1) < 6 ); v66 = (char *)*((_DWORD *)v197 + 83); v67 = (char *)*((_DWORD *)v197 + 82); v68 = (int)(v197 + 328); if ( v67 != v66 ) { *(float *)&v200 = 0.0; memcpy_0(v67, v66, 0); *((_DWORD *)v197 + 83) = &v67[(_DWORD)v200]; } v69 = (*(int (__stdcall **)(const char *))(*v199 + 72))("Object02"); v201 = v69; if ( v69 ) { v70 = *(_DWORD *)(v47 + 4); if ( (unsigned int)&v201 >= v70 || (v71 = *(_BYTE **)v47, *(_DWORD *)v47 > (unsigned int)&v201) ) { v80 = *(_DWORD *)(v47 + 8); if ( v70 == v80 ) { v81 = (signed int)(v70 - *(_DWORD *)v47) >> 2; if ( v81 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v82 = v81 + 1; v83 = (v80 - *(_DWORD *)v47) >> 2; if ( v82 > v83 ) { if ( 0x3FFFFFFF - (v83 >> 1) >= v83 ) v84 = (char *)((v83 >> 1) + v83); else v84 = 0; if ( (unsigned int)v84 < v82 ) v84 = (char *)v82; sub_74E360((const void **)v47, v84); v69 = v201; } } v85 = *(int **)(v47 + 4); if ( v85 ) *v85 = v69; } else { v72 = *(_DWORD *)(v47 + 8); v73 = (void *)(((char *)&v201 - v71) >> 2); v200 = (void *)(((char *)&v201 - v71) >> 2); if ( v70 == v72 ) { v74 = (signed int)(v70 - (_DWORD)v71) >> 2; if ( v74 > 0x3FFFFFFE ) LABEL_120: std::_Xlength_error("vector too long"); v75 = v74 + 1; v76 = (v72 - (signed int)v71) >> 2; if ( v75 > v76 ) { if ( 0x3FFFFFFF - (v76 >> 1) >= v76 ) v77 = (char *)((v76 >> 1) + v76); else v77 = 0; if ( (unsigned int)v77 < v75 ) v77 = (char *)v75; sub_74E360((const void **)v47, v77); v73 = v200; } } v78 = (_DWORD *)(*(_DWORD *)v47 + 4 * (_DWORD)v73); v79 = *(_DWORD **)(v47 + 4); if ( v79 ) *v79 = *v78; } *(_DWORD *)(v47 + 4) += 4; } v86 = (int)v199; v87 = (*(int (__thiscall **)(_DWORD *, const char *))(*v199 + 72))(v199, "Object03"); v201 = v87; if ( v87 ) { v88 = *(_DWORD *)(v68 + 4); if ( (unsigned int)&v201 >= v88 || (v89 = *(_BYTE **)v68, *(_DWORD *)v68 > (unsigned int)&v201) ) { v98 = *(_DWORD *)(v68 + 8); if ( v88 == v98 ) { v99 = (signed int)(v88 - *(_DWORD *)v68) >> 2; if ( v99 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v100 = v99 + 1; v101 = (v98 - *(_DWORD *)v68) >> 2; if ( v100 > v101 ) { if ( 0x3FFFFFFF - (v101 >> 1) >= v101 ) v102 = (char *)((v101 >> 1) + v101); else v102 = 0; if ( (unsigned int)v102 < v100 ) v102 = (char *)v100; sub_74E360((const void **)v68, v102); v86 = (int)v199; } } v103 = *(int **)(v68 + 4); if ( v103 ) *v103 = v87; } else { v90 = *(_DWORD *)(v68 + 8); v91 = ((char *)&v201 - v89) >> 2; if ( v88 == v90 ) { v92 = (signed int)(v88 - (_DWORD)v89) >> 2; if ( v92 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v93 = v92 + 1; v94 = (v90 - (signed int)v89) >> 2; if ( v93 > v94 ) { if ( 0x3FFFFFFF - (v94 >> 1) >= v94 ) v95 = (char *)((v94 >> 1) + v94); else v95 = 0; if ( (unsigned int)v95 < v93 ) v95 = (char *)v93; sub_74E360((const void **)v68, v95); v86 = (int)v199; } } v96 = *(_DWORD **)(v68 + 4); v97 = (_DWORD *)(*(_DWORD *)v68 + 4 * v91); if ( v96 ) *v96 = *v97; } *(_DWORD *)(v68 + 4) += 4; } v104 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v86 + 72))(v86, "Object04"); v201 = v104; if ( v104 ) { v105 = *(_DWORD *)(v68 + 4); if ( (unsigned int)&v201 >= v105 || (v106 = *(_BYTE **)v68, *(_DWORD *)v68 > (unsigned int)&v201) ) { v115 = *(_DWORD *)(v68 + 8); if ( v105 == v115 ) { v116 = (signed int)(v105 - *(_DWORD *)v68) >> 2; if ( v116 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v117 = v116 + 1; v118 = (v115 - *(_DWORD *)v68) >> 2; if ( v117 > v118 ) { if ( 0x3FFFFFFF - (v118 >> 1) >= v118 ) v119 = (char *)((v118 >> 1) + v118); else v119 = 0; if ( (unsigned int)v119 < v117 ) v119 = (char *)v117; sub_74E360((const void **)v68, v119); v86 = (int)v199; } } v120 = *(int **)(v68 + 4); if ( v120 ) *v120 = v104; } else { v107 = *(_DWORD *)(v68 + 8); v108 = ((char *)&v201 - v106) >> 2; if ( v105 == v107 ) { v109 = (signed int)(v105 - (_DWORD)v106) >> 2; if ( v109 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v110 = v109 + 1; v111 = (v107 - (signed int)v106) >> 2; if ( v110 > v111 ) { if ( 0x3FFFFFFF - (v111 >> 1) >= v111 ) v112 = (char *)((v111 >> 1) + v111); else v112 = 0; if ( (unsigned int)v112 < v110 ) v112 = (char *)v110; sub_74E360((const void **)v68, v112); v86 = (int)v199; } } v113 = *(_DWORD **)(v68 + 4); v114 = (_DWORD *)(*(_DWORD *)v68 + 4 * v108); if ( v113 ) *v113 = *v114; } *(_DWORD *)(v68 + 4) += 4; } v121 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v86 + 72))(v86, "Object07"); v201 = v121; if ( v121 ) { v122 = *(_DWORD *)(v68 + 4); if ( (unsigned int)&v201 >= v122 || (v123 = *(_BYTE **)v68, *(_DWORD *)v68 > (unsigned int)&v201) ) { v132 = *(_DWORD *)(v68 + 8); if ( v122 == v132 ) { v133 = (signed int)(v122 - *(_DWORD *)v68) >> 2; if ( v133 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v134 = v133 + 1; v135 = (v132 - *(_DWORD *)v68) >> 2; if ( v134 > v135 ) { if ( 0x3FFFFFFF - (v135 >> 1) >= v135 ) v136 = (char *)((v135 >> 1) + v135); else v136 = 0; if ( (unsigned int)v136 < v134 ) v136 = (char *)v134; sub_74E360((const void **)v68, v136); v86 = (int)v199; } } v137 = *(int **)(v68 + 4); if ( v137 ) *v137 = v121; } else { v124 = *(_DWORD *)(v68 + 8); v125 = ((char *)&v201 - v123) >> 2; if ( v122 == v124 ) { v126 = (signed int)(v122 - (_DWORD)v123) >> 2; if ( v126 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v127 = v126 + 1; v128 = (v124 - (signed int)v123) >> 2; if ( v127 > v128 ) { if ( 0x3FFFFFFF - (v128 >> 1) >= v128 ) v129 = (char *)((v128 >> 1) + v128); else v129 = 0; if ( (unsigned int)v129 < v127 ) v129 = (char *)v127; sub_74E360((const void **)v68, v129); v86 = (int)v199; } } v130 = *(_DWORD **)(v68 + 4); v131 = (_DWORD *)(*(_DWORD *)v68 + 4 * v125); if ( v130 ) *v130 = *v131; } *(_DWORD *)(v68 + 4) += 4; } v138 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v86 + 72))(v86, "Loft01"); v201 = v138; if ( v138 ) { v139 = *(_DWORD *)(v68 + 4); if ( (unsigned int)&v201 >= v139 || (v140 = *(_BYTE **)v68, *(_DWORD *)v68 > (unsigned int)&v201) ) { v149 = *(_DWORD *)(v68 + 8); if ( v139 == v149 ) { v150 = (signed int)(v139 - *(_DWORD *)v68) >> 2; if ( v150 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v151 = v150 + 1; v152 = (v149 - *(_DWORD *)v68) >> 2; if ( v151 > v152 ) { if ( 0x3FFFFFFF - (v152 >> 1) >= v152 ) v153 = (char *)((v152 >> 1) + v152); else v153 = 0; if ( (unsigned int)v153 < v151 ) v153 = (char *)v151; sub_74E360((const void **)v68, v153); v86 = (int)v199; } } v154 = *(int **)(v68 + 4); if ( v154 ) *v154 = v138; } else { v141 = *(_DWORD *)(v68 + 8); v142 = ((char *)&v201 - v140) >> 2; if ( v139 == v141 ) { v143 = (signed int)(v139 - (_DWORD)v140) >> 2; if ( v143 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v144 = v143 + 1; v145 = (v141 - (signed int)v140) >> 2; if ( v144 > v145 ) { if ( 0x3FFFFFFF - (v145 >> 1) >= v145 ) v146 = (char *)((v145 >> 1) + v145); else v146 = 0; if ( (unsigned int)v146 < v144 ) v146 = (char *)v144; sub_74E360((const void **)v68, v146); v86 = (int)v199; } } v147 = *(_DWORD **)(v68 + 4); v148 = (_DWORD *)(*(_DWORD *)v68 + 4 * v142); if ( v147 ) *v147 = *v148; } *(_DWORD *)(v68 + 4) += 4; } v155 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v86 + 72))(v86, "Cylinder25"); v201 = v155; if ( v155 ) { v156 = *(_DWORD *)(v68 + 4); if ( (unsigned int)&v201 >= v156 || (v157 = *(_BYTE **)v68, *(_DWORD *)v68 > (unsigned int)&v201) ) { v166 = *(_DWORD *)(v68 + 8); if ( v156 == v166 ) { v167 = (signed int)(v156 - *(_DWORD *)v68) >> 2; if ( v167 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v168 = v167 + 1; v169 = (v166 - *(_DWORD *)v68) >> 2; if ( v168 > v169 ) { if ( 0x3FFFFFFF - (v169 >> 1) >= v169 ) v170 = (char *)((v169 >> 1) + v169); else v170 = 0; if ( (unsigned int)v170 < v168 ) v170 = (char *)v168; sub_74E360((const void **)v68, v170); v86 = (int)v199; } } v171 = *(int **)(v68 + 4); if ( v171 ) *v171 = v155; } else { v158 = *(_DWORD *)(v68 + 8); v159 = ((char *)&v201 - v157) >> 2; if ( v156 == v158 ) { v160 = (signed int)(v156 - (_DWORD)v157) >> 2; if ( v160 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v161 = v160 + 1; v162 = (v158 - (signed int)v157) >> 2; if ( v161 > v162 ) { if ( 0x3FFFFFFF - (v162 >> 1) >= v162 ) v163 = (char *)((v162 >> 1) + v162); else v163 = 0; if ( (unsigned int)v163 < v161 ) v163 = (char *)v161; sub_74E360((const void **)v68, v163); v86 = (int)v199; } } v164 = *(_DWORD **)(v68 + 4); v165 = (_DWORD *)(*(_DWORD *)v68 + 4 * v159); if ( v164 ) *v164 = *v165; } *(_DWORD *)(v68 + 4) += 4; } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v197 + 71) + 116))(*((_DWORD *)v197 + 77), 0); v172 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v172 && ((v173 = sub_4E21A0(v172, xRight, dword_AC2F78), v173 == 1) || v173 > 2 && v173 <= 4) ) { if ( !byte_ACAD5C ) sub_420410(); v179 = 0; do { v180 = byte_ACAB50[v179]; name[v179++] = v180; } while ( v180 ); qmemcpy(&name[strlen(name)], "\\CharSelect\\SelectCam_16_9.nif", 0x1Fu); v181 = sub_8F63D0(name, 0); if ( (_DWORD *)v86 != v181 ) { v177 = InterlockedDecrement; if ( !InterlockedDecrement(lpAddend) ) (*(void (__stdcall **)(signed int))*v199)(1); v178 = (int)v181; v193 = v181; if ( !v181 ) { LABEL_305: LOBYTE(v203) = 6; if ( v178 && !v177((volatile LONG *)(v178 + 4)) ) (**(void (__thiscall ***)(int, signed int))v178)(v178, 1); LOBYTE(v203) = 2; if ( !v177(v195 + 1) ) (**(void (__thiscall ***)(int, signed int))v195)((int)v195, 1); v203 = -1; if ( !v177((volatile LONG *)(v194 + 4)) ) (**(void (__thiscall ***)(int, signed int))v194)(v194, 1); return 0; } lpAddend = v181 + 1; InterlockedIncrement(v181 + 1); LABEL_314: if ( sub_8F73A0((_DWORD *)v178, &v189) ) { v184 = (volatile LONG *)*((_DWORD *)v197 + 72); *(float *)&v200 = v189; if ( v184 != (volatile LONG *)LODWORD(v189) ) { if ( v184 && !v177(v184 + 1) && v184 ) (**(void (__thiscall ***)(void *, signed int))v184)((void *)v184, 1); v185 = (volatile LONG *)v200; *((float *)v197 + 72) = *(float *)&v200; if ( v185 ) InterlockedIncrement(v185 + 1); } v186 = (int)v197; (*(void (__stdcall **)(int, _DWORD))(**((_DWORD **)v197 + 70) + 116))(v178, 0); sub_85C4D0(*(_DWORD **)(v186 + 280)); sub_85C6F0(*(_DWORD **)(v186 + 280)); sub_85BED0(*(_DWORD ***)(v186 + 280), 0.0, 1); LOBYTE(v203) = 6; if ( !v177(lpAddend) ) (**(void (__thiscall ***)(int, signed int))v178)(v178, 1); v187 = v195; LOBYTE(v203) = 2; if ( !v177(v195 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v187)(v187, 1); v188 = (void (__thiscall ***)(_DWORD, signed int))v194; v203 = -1; if ( !v177((volatile LONG *)(v194 + 4)) ) (**v188)(v188, 1); result = 1; } else { LOBYTE(v203) = 6; if ( !v177(lpAddend) ) (**(void (__thiscall ***)(int, signed int))v178)(v178, 1); v182 = v195; LOBYTE(v203) = 2; if ( !v177(v195 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v182)(v182, 1); v183 = (void (__thiscall ***)(_DWORD, signed int))v194; v203 = -1; if ( !v177((volatile LONG *)(v194 + 4)) ) (**v183)(v183, 1); result = 0; } return result; } } else { if ( !byte_ACAD5C ) sub_420410(); v174 = 0; do { v175 = byte_ACAB50[v174]; name[v174++] = v175; } while ( v175 ); strcat(name, "\\CharSelect\\SelectCam_4_3.nif"); v176 = sub_8F63D0(name, 0); if ( (_DWORD *)v86 != v176 ) { v177 = InterlockedDecrement; if ( !InterlockedDecrement(lpAddend) ) (*(void (__stdcall **)(signed int))*v199)(1); v178 = (int)v176; v193 = v176; if ( v176 ) { lpAddend = v176 + 1; InterlockedIncrement(v176 + 1); goto LABEL_314; } goto LABEL_305; } } v178 = (int)v193; v177 = InterlockedDecrement; goto LABEL_314; } LOBYTE(v203) = 2; if ( !InterlockedDecrement(v195 + 1) ) (**(void (__thiscall ***)(int, signed int))v195)((int)v195, 1); v203 = -1; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v9) + 4)) ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v9))(LODWORD(v9), 1); return 0; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00412A70) -------------------------------------------------------- void *__thiscall sub_412A70(_DWORD *this) { _DWORD *v1; // esi const void *v2; // ecx void *v3; // edi void *result; // eax const void *v5; // ecx void *v6; // edi _DWORD *v7; // edi _DWORD *i; // esi _DWORD *v9; // ST08_4 v1 = this; v2 = (const void *)this[83]; v3 = (void *)v1[82]; if ( v3 != v2 ) { result = memcpy_0(v3, v2, 0); v1[83] = v3; } v5 = (const void *)v1[88]; v6 = (void *)v1[87]; if ( v6 != v5 ) { result = memcpy_0(v6, v5, 0); v1[88] = v6; } v7 = v1 + 78; for ( i = (_DWORD *)v1[79]; i; result = (void *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9) ) { v9 = i; i = (_DWORD *)*i; } v7[3] = 0; v7[1] = 0; v7[2] = 0; return result; } //----- (00412B10) -------------------------------------------------------- char __thiscall sub_412B10(_DWORD *this, int a2) { _DWORD *v2; // esi void (__stdcall *v4)(char *, _DWORD, _DWORD); // eax char *v5; // eax char *v6; // ST08_4 void **v7; // eax char v8; // [esp+4h] [ebp-8h] const char *v9; // [esp+8h] [ebp-4h] v2 = this; if ( !sub_410C80(this) || !sub_4118E0(v2) || !sub_410F30(v2) || !sub_411140(v2) || !sub_4111D0(v2) ) return 0; if ( !byte_AC9CD7 ) { if ( dword_AB653C ) { v4 = *(void (__stdcall **)(char *, _DWORD, _DWORD))(*(_DWORD *)dword_AB653C + 24); v9 = "s_title.wav"; v4(&v8, 0, 0); } byte_AC9CD7 = 1; } sub_68EF60(byte_ADB468); sub_686600((int *)&byte_ADA230); sub_410C50(byte_ADB468, "-"); v2[67] = -1; *((_BYTE *)v2 + 300) = 0; *((_BYTE *)v2 + 32) = 1; v5 = sub_4083B0(); v6 = (char *)sub_401410(v5, "\\charselect\\charselect.conf"); v7 = sub_8E50C0(); sub_8E5310((CHAR ***)v7, v6); return 1; } // AB653C: using guessed type int dword_AB653C; // AC9CD7: using guessed type char byte_AC9CD7; // ADA230: using guessed type char byte_ADA230; //----- (00412BF0) -------------------------------------------------------- _DWORD *__thiscall sub_412BF0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *result; // eax v1 = this; sub_412A70(this); v2 = v1[74]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[74] = 0; } sub_4110B0(v1); sub_410DE0(v1); result = sub_410D20((_DWORD **)v1); *((_BYTE *)v1 + 32) = 0; v1[7] = 0; return result; } //----- (00412C50) -------------------------------------------------------- int *sub_412C50() { return &dword_AC9CB4; } // AC9CB4: using guessed type int dword_AC9CB4; //----- (00412C60) -------------------------------------------------------- int sub_412C60() { return dword_AC9CB4; } // AC9CB4: using guessed type int dword_AC9CB4; //----- (00412C70) -------------------------------------------------------- void *__thiscall sub_412C70(void *this, char a2) { void *v2; // esi v2 = this; sub_411640(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00412CA0) -------------------------------------------------------- int __thiscall sub_412CA0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[88] + 240))(a2); return (*(int (__stdcall **)(int))(*v2[89] + 240))(a2); } //----- (00412D20) -------------------------------------------------------- char __usercall sub_412D20@(BYTE *a1@) { BYTE *v1; // esi BYTE v3; // al BYTE v4; // bl BYTE TestChar; // [esp+4h] [ebp-4h] v1 = a1; if ( !a1 ) return 0; v3 = *a1; if ( !v3 ) return 0; while ( 1 ) { TestChar = v3; if ( !IsDBCSLeadByte(v3) ) { ++v1; goto LABEL_9; } v4 = v1[1]; if ( IsDBCSLeadByte(TestChar) ) { if ( 94 * TestChar + (unsigned int)v4 - 16705 > 0x92D ) return 1; } v1 += 2; LABEL_9: v3 = *v1; if ( !*v1 ) return 0; } } //----- (00412DA0) -------------------------------------------------------- char __thiscall sub_412DA0(char *this) { char *v1; // esi signed int v2; // kr00_4 int v3; // esi char v4; // al char v6[128]; // [esp+Ch] [ebp-84h] v1 = this; memset(v6, 0, 0x64u); strncpy(v6, v1, 0x5Au); v2 = strlen(v6); v3 = 0; if ( v2 <= 0 ) return 0; while ( IsDBCSLeadByte(v6[v3]) ) { ++v3; LABEL_32: if ( ++v3 >= v2 ) return 0; } v4 = v6[v3]; if ( v4 != 32 && v4 != 39 && v4 != 92 && v4 != 47 && v4 != 58 && v4 != 42 && v4 != 63 && v4 != 60 && v4 != 62 && v4 != 124 && v4 != 126 && v4 != 33 && v4 != 64 && v4 != 37 && v4 != 38 && v4 != 59 && v4 != 46 && v4 != 44 && v4 != 34 && v4 != 96 && v4 != 40 && v4 != 41 && v4 != 43 && v4 != 45 && v4 != 35 && v4 != 36 && v4 != 91 && v4 != 93 ) { goto LABEL_32; } return 1; } // 412DA0: using guessed type char var_84[128]; //----- (00412ED0) -------------------------------------------------------- char __usercall sub_412ED0@(const char *a1@) { unsigned int v1; // edx char v2; // bl unsigned int v3; // ecx char v4; // al char result; // al v1 = strlen(a1); v2 = 0; v3 = 0; if ( !v1 ) goto LABEL_16; do { v4 = a1[v3]; if ( (v4 < 65 || v4 > 90) && (v4 < 97 || v4 > 122) && (v4 < 48 || v4 > 57) && v4 != 95 ) v2 = 1; ++v3; } while ( v3 < v1 ); if ( v2 ) result = 1; else LABEL_16: result = 0; return result; } //----- (00412F30) -------------------------------------------------------- int __thiscall sub_412F30(_DWORD **this) { _BYTE *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[86] + 488))(1); return sub_8F28E0(v1); } //----- (00412F60) -------------------------------------------------------- int __thiscall sub_412F60(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[86] + 464))(a2); return (*(int (**)(void))(*v2[86] + 480))(); } //----- (00412F90) -------------------------------------------------------- _DWORD *__thiscall sub_412F90(void *this) { void *v1; // esi v1 = this; sub_6F3B30(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00412FB0) -------------------------------------------------------- _DWORD *__thiscall sub_412FB0(void *this) { void *v1; // esi v1 = this; sub_6F3B30(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00412FD0) -------------------------------------------------------- _DWORD *__thiscall sub_412FD0(void *this) { void *v1; // esi v1 = this; sub_6F3B30(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00412FF0) -------------------------------------------------------- int __thiscall sub_412FF0(int this) { *(_DWORD *)(this + 268) = -1; *(_BYTE *)(this + 300) = 0; return (*(int (__stdcall **)(signed int))(**(_DWORD **)(this + 36) + 252))(1); } //----- (00413020) -------------------------------------------------------- _DWORD *__thiscall sub_413020(void *this) { void *v1; // esi v1 = this; sub_66D990(&unk_AD8D28); sub_66F280(&unk_AD8D28); return sub_8EF040(v1, dword_ACDD64, 0); } // ACDD64: using guessed type int dword_ACDD64; //----- (00413050) -------------------------------------------------------- void __thiscall sub_413050(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[9] + 252))(0); sub_48E330(v1); *((_BYTE *)v1 + 216) = 0; } //----- (00413080) -------------------------------------------------------- int __thiscall sub_413080(int this) { *(_BYTE *)(this + 216) = 0; *(_DWORD *)(this + 268) = -1; return (*(int (__stdcall **)(signed int))(**(_DWORD **)(this + 36) + 252))(1); } //----- (004130D0) -------------------------------------------------------- _DWORD *__thiscall sub_4130D0(void *this) { void *v1; // esi v1 = this; sub_6F3C20(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (004130F0) -------------------------------------------------------- int __thiscall sub_4130F0(_DWORD **this) { return (*(int (__stdcall **)(void *))(*this[91] + 472))(&unk_9A976B); } //----- (00413110) -------------------------------------------------------- char __stdcall sub_413110(const char *a1) { int v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx char v9[4]; // [esp+Ch] [ebp-1Ch] int v10; // [esp+10h] [ebp-18h] int v11; // [esp+14h] [ebp-14h] int v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] char v14; // [esp+20h] [ebp-8h] if ( !a1 ) return -1; v1 = 0; while ( 1 ) { v2 = (_DWORD *)sub_680560(byte_AD9238, v1); v3 = v2; if ( v2 ) { v4 = v2[2]; v5 = v2[3]; *(_DWORD *)v9 = v2[1]; v6 = v2[4]; v10 = v4; v7 = v3[5]; v11 = v5; v12 = v6; v13 = v7; v14 = 0; if ( !v9[0] ) return -1; if ( !_stricmp(a1, v9) ) break; } if ( ++v1 >= 6 ) return -1; } return *((_BYTE *)v3 + 26); } //----- (00413230) -------------------------------------------------------- char __usercall sub_413230@(int a1@) { int v1; // esi const char *v2; // ecx v1 = *(_DWORD *)(a1 + 32); if ( !v1 ) return -1; while ( 1 ) { v2 = *(const char **)(v1 + 8); if ( v2 ) { if ( !strcmp("Avatar0", *(const char **)(v1 + 8)) ) return 0; if ( !strcmp("Avatar1", *(const char **)(v1 + 8)) ) return 1; if ( !strcmp("Avatar2", *(const char **)(v1 + 8)) ) return 2; if ( !strcmp("Avatar3", *(const char **)(v1 + 8)) ) return 3; if ( !strcmp("Avatar4", *(const char **)(v1 + 8)) ) return 4; if ( !strcmp("Avatar5", *(const char **)(v1 + 8)) ) return 5; if ( !strcmp("Avatar6", v2) ) break; } v1 = *(_DWORD *)(v1 + 32); if ( !v1 ) return -1; } return 6; } //----- (004133F0) -------------------------------------------------------- int __stdcall sub_4133F0(_BYTE *a1, int a2) { unsigned __int8 v2; // al int result; // eax switch ( sub_652070(a1) ) { case 1: case 2: case 3: case 4: case 5: v2 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v2 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v2 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v2 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v2 = 21; break; case 0x1A: case 0x1B: v2 = 26; break; default: v2 = 0; break; } result = v2 - 1; switch ( result ) { case 0: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, byte_9A1D2A, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A2111 + 1, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A24F9 + 1, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A28DE + 4, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A2CC9 + 1, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A30B1 + 1, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, byte_9A349A, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BA3C8 + 2, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BA7B0 + 2, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)off_9BAB98 + 2, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BAF80 + 2, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, const char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, "tack", 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, const char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, "rtalListWin\n", 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BBB38 + 2, 0, 0); break; default: return result; } } break; case 5: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20100010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20101010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20102010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20103010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20104010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20105010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20106010, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20200010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20201010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20202010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20203010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20204010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20205010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20206010, 0, 0); break; default: return result; } } break; case 10: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: goto LABEL_46; case 1: goto LABEL_94; case 2: goto LABEL_47; case 3: goto LABEL_48; case 4: goto LABEL_49; case 5: goto LABEL_50; case 6: goto LABEL_51; default: return result; } } else { switch ( a2 ) { case 0: goto LABEL_53; case 1: goto LABEL_96; case 2: goto LABEL_54; case 3: goto LABEL_55; case 4: goto LABEL_56; case 5: goto LABEL_57; case 6: goto LABEL_97; default: return result; } } break; case 15: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40100010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40101010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40102010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40103010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40104010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40105010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40106010, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40200010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40201010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40202010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40203010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40204010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40205010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40206010, 0, 0); break; default: return result; } } break; case 20: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50100010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50101010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50102010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50103010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50104010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50105010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50106010, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50200010, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50201010, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50202010, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50203010, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50204010, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50205010, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50206010, 0, 0); break; default: return result; } } break; case 25: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: LABEL_46: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30100010, 0, 0); break; case 1: LABEL_94: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30101010, 0, 0); break; case 2: LABEL_47: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30102010, 0, 0); break; case 3: LABEL_48: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30103010, 0, 0); break; case 4: LABEL_49: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30104010, 0, 0); break; case 5: LABEL_50: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30105010, 0, 0); break; case 6: LABEL_51: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30106010, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: LABEL_53: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30200010, 0, 0); break; case 1: LABEL_96: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30201010, 0, 0); break; case 2: LABEL_54: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30202010, 0, 0); break; case 3: LABEL_55: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30203010, 0, 0); break; case 4: LABEL_56: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30204010, 0, 0); break; case 5: LABEL_57: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30205010, 0, 0); break; case 6: LABEL_97: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30206010, 0, 0); break; default: return result; } } break; default: return result; } return result; } // 9BA3C8: using guessed type int (*)(); // 9BA7B0: using guessed type int (*)(); // 9BAB98: using guessed type int (__stdcall *[2])(int); // 9BAF80: using guessed type int (__stdcall *)(int, int, int, int, int, int); // 9BBB38: using guessed type int (*)(); //----- (00413E70) -------------------------------------------------------- int __stdcall sub_413E70(_BYTE *a1, int a2) { unsigned __int8 v2; // al int result; // eax int (__stdcall **v4)(int); // eax switch ( sub_652070(a1) ) { case 1: case 2: case 3: case 4: case 5: v2 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v2 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v2 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v2 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v2 = 21; break; case 0x1A: case 0x1B: v2 = 26; break; default: v2 = 0; break; } result = v2 - 1; switch ( result ) { case 0: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))((char *)&loc_9A1D31 + 3); goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))byte_9A211C; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))((char *)&loc_9A2503 + 1); goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))((char *)&loc_9A28E4 + 8); goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))((char *)&loc_9A2CCF + 5); goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))((char *)&loc_9A30B9 + 3); goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))((char *)sub_9A34A0 + 4); goto LABEL_98; default: return result; } } else { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))&off_9BA3D4; goto LABEL_98; case 1: v4 = off_9BA7BC; goto LABEL_98; case 2: v4 = off_9BABA4; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))&off_9BAF8C; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))"ing"; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))("rtalListWin\n" + 10); goto LABEL_98; case 6: v4 = off_9BBB44; goto LABEL_98; default: return result; } } break; case 5: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))20100020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))20101020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))20102020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))20103020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))20104020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))20105020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))20106020; goto LABEL_98; default: return result; } } else { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))20200020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))20201020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))20202020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))20203020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))20204020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))20205020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))20206020; goto LABEL_98; default: return result; } } break; case 10: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: goto LABEL_46; case 1: goto LABEL_94; case 2: goto LABEL_47; case 3: goto LABEL_48; case 4: goto LABEL_49; case 5: goto LABEL_50; case 6: goto LABEL_51; default: return result; } } else { switch ( a2 ) { case 0: goto LABEL_53; case 1: goto LABEL_96; case 2: goto LABEL_54; case 3: goto LABEL_55; case 4: goto LABEL_56; case 5: goto LABEL_57; case 6: goto LABEL_97; default: return result; } } break; case 15: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))40100020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))40101020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))40102020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))40103020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))40104020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))40105020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))40106020; goto LABEL_98; default: return result; } } else { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))40200020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))40201020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))40202020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))40203020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))40204020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))40205020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))40206020; goto LABEL_98; default: return result; } } break; case 20: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))50100020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))50101020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))50102020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))50103020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))50104020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))50105020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))50106020; goto LABEL_98; default: return result; } } else { switch ( a2 ) { case 0: v4 = (int (__stdcall **)(int))50200020; goto LABEL_98; case 1: v4 = (int (__stdcall **)(int))50201020; goto LABEL_98; case 2: v4 = (int (__stdcall **)(int))50202020; goto LABEL_98; case 3: v4 = (int (__stdcall **)(int))50203020; goto LABEL_98; case 4: v4 = (int (__stdcall **)(int))50204020; goto LABEL_98; case 5: v4 = (int (__stdcall **)(int))50205020; goto LABEL_98; case 6: v4 = (int (__stdcall **)(int))50206020; goto LABEL_98; default: return result; } } break; case 25: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: LABEL_46: v4 = (int (__stdcall **)(int))30100020; goto LABEL_98; case 1: LABEL_94: v4 = (int (__stdcall **)(int))30101020; goto LABEL_98; case 2: LABEL_47: v4 = (int (__stdcall **)(int))30102020; goto LABEL_98; case 3: LABEL_48: v4 = (int (__stdcall **)(int))30103020; goto LABEL_98; case 4: LABEL_49: v4 = (int (__stdcall **)(int))30104020; goto LABEL_98; case 5: LABEL_50: v4 = (int (__stdcall **)(int))30105020; goto LABEL_98; case 6: LABEL_51: v4 = (int (__stdcall **)(int))30106020; goto LABEL_98; default: return result; } } else { switch ( a2 ) { case 0: LABEL_53: v4 = (int (__stdcall **)(int))30200020; goto LABEL_98; case 1: LABEL_96: v4 = (int (__stdcall **)(int))30201020; goto LABEL_98; case 2: LABEL_54: v4 = (int (__stdcall **)(int))30202020; goto LABEL_98; case 3: LABEL_55: v4 = (int (__stdcall **)(int))30203020; goto LABEL_98; case 4: LABEL_56: v4 = (int (__stdcall **)(int))30204020; goto LABEL_98; case 5: LABEL_57: v4 = (int (__stdcall **)(int))30205020; goto LABEL_98; case 6: LABEL_97: v4 = (int (__stdcall **)(int))30206020; LABEL_98: dword_AC9CC4 = (int)v4; result = (*(int (__thiscall **)(_BYTE *, int (__stdcall **)(int), _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, v4, 0, 0); break; default: return result; } } break; default: return result; } return result; } // 9BA3D4: using guessed type int (__stdcall *off_9BA3D4)(int, int, int, int, int, int, int, int); // 9BA7BC: using guessed type int (__stdcall *off_9BA7BC[8])(int); // 9BABA4: using guessed type int (__stdcall *off_9BABA4[2])(int); // 9BAF8C: using guessed type int (__stdcall *off_9BAF8C)(char); // 9BBB44: using guessed type int (__stdcall *off_9BBB44[4])(int); // AC9CC4: using guessed type int dword_AC9CC4; //----- (00414470) -------------------------------------------------------- int __stdcall sub_414470(_BYTE *a1, int a2) { unsigned __int8 v2; // al int result; // eax switch ( sub_652070(a1) ) { case 1: case 2: case 3: case 4: case 5: v2 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v2 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v2 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v2 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v2 = 21; break; case 0x1A: case 0x1B: v2 = 26; break; default: v2 = 0; break; } result = v2 - 1; switch ( result ) { case 0: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, void *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, &loc_9A1D3E, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A2121 + 5, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, byte_9A250E, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, void *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, &loc_9A28F6, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A2CDD + 1, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A30C4 + 2, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&loc_9A34AA + 4, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BA3DC + 2, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)off_9BA7C4 + 2, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)off_9BABAC + 2, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)&off_9BAF94 + 2, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))(a1, "ade", 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, const char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, "m_pkMHGuestBookWin\n", 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, char *, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, (char *)off_9BBB4C + 2, 0, 0); break; default: return result; } } break; case 5: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20100030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20101030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20102030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20103030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20104030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20105030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20106030, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20200030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20201030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20202030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20203030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20204030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20205030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 20206030, 0, 0); break; default: return result; } } break; case 10: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: goto LABEL_46; case 1: goto LABEL_94; case 2: goto LABEL_47; case 3: goto LABEL_48; case 4: goto LABEL_49; case 5: goto LABEL_50; case 6: goto LABEL_51; default: return result; } } else { switch ( a2 ) { case 0: goto LABEL_53; case 1: goto LABEL_96; case 2: goto LABEL_54; case 3: goto LABEL_55; case 4: goto LABEL_56; case 5: goto LABEL_57; case 6: goto LABEL_97; default: return result; } } break; case 15: result = a2; if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40100030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40101030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40102030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40103030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40104030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40105030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40106030, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40200030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40201030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40202030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40203030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40204030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40205030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 40206030, 0, 0); break; default: return result; } } break; case 20: if ( a1[938] ) { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50100030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50101030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50102030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50103030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50104030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50105030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50106030, 0, 0); break; default: goto LABEL_92; } } else { switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50200030, 0, 0); break; case 1: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50201030, 0, 0); break; case 2: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50202030, 0, 0); break; case 3: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50203030, 0, 0); break; case 4: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50204030, 0, 0); break; case 5: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50205030, 0, 0); break; case 6: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 50206030, 0, 0); break; default: goto LABEL_92; } } goto LABEL_92; case 25: LABEL_92: if ( a1[938] ) { switch ( a2 ) { case 0: LABEL_46: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30100030, 0, 0); break; case 1: LABEL_94: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30101030, 0, 0); break; case 2: LABEL_47: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30102030, 0, 0); break; case 3: LABEL_48: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30103030, 0, 0); break; case 4: LABEL_49: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30104030, 0, 0); break; case 5: LABEL_50: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30105030, 0, 0); break; case 6: LABEL_51: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30106030, 0, 0); break; default: return result; } } else { switch ( a2 ) { case 0: LABEL_53: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30200030, 0, 0); break; case 1: LABEL_96: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30201030, 0, 0); break; case 2: LABEL_54: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30202030, 0, 0); break; case 3: LABEL_55: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30203030, 0, 0); break; case 4: LABEL_56: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30204030, 0, 0); break; case 5: LABEL_57: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30205030, 0, 0); break; case 6: LABEL_97: result = (*(int (__thiscall **)(_BYTE *, signed int, _DWORD, _DWORD))(*(_DWORD *)a1 + 328))( a1, 30206030, 0, 0); break; default: return result; } } break; default: return result; } return result; } // 9BA3DC: using guessed type int (__stdcall *)(char); // 9BA7C4: using guessed type int (__stdcall *[6])(int); // 9BABAC: using guessed type int (*[4])(); // 9BAF94: using guessed type int (__stdcall *)(int, int, int, int, int, int); // 9BBB4C: using guessed type int (__stdcall *[2])(int); //----- (00414EE0) -------------------------------------------------------- char __thiscall sub_414EE0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // eax int v16; // ST24_4 int v17; // ST20_4 volatile LONG *v18; // eax int v19; // edi int v20; // ST4C_4 int v21; // ST48_4 int v22; // ST44_4 int v23; // eax volatile LONG *v24; // edi volatile LONG v25; // ebx const CHAR *v26; // eax int v27; // edi int v28; // ST4C_4 int v29; // ST48_4 int v30; // ST44_4 int v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ebx const CHAR *v34; // eax volatile LONG **v35; // edi volatile LONG *v36; // eax volatile LONG *v37; // edi int v38; // ST4C_4 int v39; // ST48_4 int v40; // ST44_4 int v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax int v45; // eax int v46; // edi int v47; // ebx int v48; // ST48_4 int v49; // ST44_4 int v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // ebx int *v53; // ebx int v54; // edi const CHAR *v55; // eax void (__thiscall ***v56)(_DWORD, signed int); // esi int v57; // [esp+50h] [ebp-28h] int v58; // [esp+54h] [ebp-24h] int v59; // [esp+58h] [ebp-20h] volatile LONG *v60; // [esp+5Ch] [ebp-1Ch] int v61; // [esp+60h] [ebp-18h] int v62; // [esp+64h] [ebp-14h] int v63; // [esp+68h] [ebp-10h] int v64; // [esp+74h] [ebp-4h] int v65; // [esp+80h] [ebp+8h] v2 = (int)this; v63 = 0; v64 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v60 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v63; v64 = -1; if ( !v63 || InterlockedDecrement((volatile LONG *)(v63 + 4)) ) return 0; v5 = v63 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v8, (int)&v63, v7); if ( !v63 ) return 0; v9 = sub_8FB140(v63, (int)"Panel01", (int)&v61, (int)&v62, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CalculatorWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v63; v64 = -1; if ( !v63 || InterlockedDecrement((volatile LONG *)(v63 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v63, (int)"Theme", (int)&v61, (int)&v62, v10); else v11 = sub_8FB140(v63, (int)"Theme", (int)&v61, (int)&v62, 0); v12 = sub_8F3EB0(v61, v62, (int)v11, v2, 0, 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); if ( sub_8F71E0(v63, (int)"LotInput", &v61, &v62, &v58, &v59) ) { v13 = sub_8FB140(v63, (int)"LotInput", (int)&v61, (int)&v62, v3); sub_8F3EB0(v61, v62, (int)v13, v2, 0, 0); *(_DWORD *)(v2 + 344) = sub_45A900(v61 + 2, v62 + 4, v58, v59, v2, 1342177280, 16, 3, 0, 0, 1); } v14 = sub_8FB140(v63, (int)"BtnNor02", (int)&v61, (int)&v62, v3); sub_8FB650(v14, v63, (int)"BtnClick02"); sub_8FB650(v14, v63, (int)"BtnOver02"); v15 = sub_8FE0F0(v61, v62, (int)v14, v2, 0, 0, 0); v16 = v62; v17 = v61; *(_DWORD *)(v2 + 360) = v15; v18 = sub_8FE0F0(v17, v16, (int)v14, v2, 2, 0, 0); v19 = *(_DWORD *)(v2 + 360); v20 = *(_DWORD *)(v2 + 360); *(_DWORD *)(v2 + 356) = v18; v21 = sub_421050(0); v22 = (*(int (__thiscall **)(int))(*(_DWORD *)v19 + 148))(v19); v23 = (*(int (__thiscall **)(int))(*(_DWORD *)v19 + 144))(v19); v24 = sub_8F4A20(0, 1, v23, v22, v21, v20, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 5); v25 = *v24; v26 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v25 + 472))(v24, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v27 = *(_DWORD *)(v2 + 356); v28 = *(_DWORD *)(v2 + 356); v29 = sub_421050(0); v30 = (*(int (__thiscall **)(int))(*(_DWORD *)v27 + 148))(v27); v31 = (*(int (__thiscall **)(int))(*(_DWORD *)v27 + 144))(v27); v32 = sub_8F4A20(0, 1, v31, v30, v29, v28, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v33 = *v32; v34 = sub_40C190(-521714145); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); v35 = sub_8FB140(v63, (int)"BtnNor04", (int)&v61, (int)&v62, v60); sub_8FB650(v35, v63, (int)"BtnClick04"); sub_8FB650(v35, v63, (int)"BtnOver04"); v36 = sub_8FE0F0(v61, v62, (int)v35, v2, 1, 0, 0); v37 = v36; v38 = (int)v36; v39 = sub_421050(0); v40 = (*(int (__thiscall **)(volatile LONG *))(*v37 + 148))(v37); v41 = (*(int (__thiscall **)(volatile LONG *))(*v37 + 144))(v37); v42 = sub_8F4A20(0, 1, v41, v40, v39, v38, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v45 = sub_421050(0); v57 = v45; v65 = 0; v46 = v2 + 364; while ( 1 ) { v47 = *(_DWORD *)(v45 + 384); v48 = v45; v49 = *(_DWORD *)(v45 + 384); v50 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v51 = sub_8F4A20(8, v65 * (v47 + 1) + 8, v50 - 16, v49, v48, v2, 0, 0); v52 = *(volatile LONG **)v46; v60 = v51; if ( v52 != v51 ) { if ( v52 ) { if ( !InterlockedDecrement(v52 + 1) && v52 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v52)(v52, 1); v51 = v60; } *(_DWORD *)v46 = v51; if ( v51 ) InterlockedIncrement(v51 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v46 + 240))(0); v46 += 4; if ( ++v65 >= 2 ) break; v45 = v57; } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 364) + 488))(5); v53 = *(int **)(v2 + 364); v54 = *v53; v55 = sub_40C190(-488464967); (*(void (__thiscall **)(int *, const CHAR *))(v54 + 472))(v53, v55); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.55000001, 0.60000002); v64 = -1; if ( v63 ) { v56 = (void (__thiscall ***)(_DWORD, signed int))v63; if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) ) { if ( v56 ) (**v56)(v56, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00415460) -------------------------------------------------------- void __thiscall sub_415460(_DWORD **this) { _DWORD **v1; // esi const char *v2; // eax unsigned __int8 v3; // bl char *v4; // eax _DWORD *v5; // eax v1 = this; v2 = (const char *)(*(int (**)(void))(*this[86] + 452))(); v3 = sub_413110(v2); if ( *(_BYTE *)(sub_6805D0((int)byte_AD9238) + 26) == v3 ) { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD5C); if ( v5 ) { v5[67] = v3; sub_48E330(v5); } } else { v4 = (char *)sub_40A910(1018741961); sub_462C30(1, v4); (*(void (__stdcall **)(void *))(*v1[86] + 464))(&unk_9A976A); (*(void (**)(void))(*v1[86] + 480))(); } } // ACDD5C: using guessed type int dword_ACDD5C; //----- (00415500) -------------------------------------------------------- int __thiscall sub_415500(char *this, int a2, int a3) { char *v3; // esi int v4; // edi signed int v5; // ebx int result; // eax int *v7; // ebx int v8; // edi const CHAR *v9; // eax int *v10; // ebx int v11; // edi const CHAR *v12; // eax int *v13; // ebx int v14; // edi const CHAR *v15; // eax v3 = this; v4 = (int)(this + 356); v5 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 240))(0); v4 += 4; --v5; } while ( v5 ); if ( a2 == 1 ) { v13 = (int *)*((_DWORD *)v3 + 91); v14 = *v13; v15 = sub_40A910(-508507347); (*(void (__thiscall **)(int *, const CHAR *))(v14 + 472))(v13, v15); (*(void (__stdcall **)(int))(**((_DWORD **)v3 + 89) + 256))(a3); result = (*(int (__stdcall **)(int))(**((_DWORD **)v3 + 89) + 240))(a3); *((_DWORD *)v3 + 93) = 1; } else if ( a2 == 2 ) { v10 = (int *)*((_DWORD *)v3 + 91); v11 = *v10; v12 = sub_40C190(-488464967); (*(void (__thiscall **)(int *, const CHAR *))(v11 + 472))(v10, v12); (*(void (__stdcall **)(int))(**((_DWORD **)v3 + 90) + 256))(a3); result = (*(int (__stdcall **)(int))(**((_DWORD **)v3 + 90) + 240))(a3); *((_DWORD *)v3 + 93) = 2; } else { result = a2 - 3; if ( a2 == 3 ) { v7 = (int *)*((_DWORD *)v3 + 91); v8 = *v7; v9 = sub_40C190(-488464967); (*(void (__thiscall **)(int *, const CHAR *))(v8 + 472))(v7, v9); (*(void (__stdcall **)(int))(**((_DWORD **)v3 + 90) + 256))(a3); result = (*(int (__stdcall **)(int))(**((_DWORD **)v3 + 90) + 240))(a3); *((_DWORD *)v3 + 93) = 3; } else { *((_DWORD *)v3 + 93) = 0; } } return result; } //----- (00415660) -------------------------------------------------------- char __thiscall sub_415660(_DWORD **this) { _DWORD **v1; // ebx _DWORD *v2; // eax char *v3; // esi char *v4; // eax char *v5; // eax _DWORD *v6; // esi char *v7; // eax char *v8; // eax int v9; // esi signed int v10; // edi char v12; // [esp+10h] [ebp-2Ch] char v13[4]; // [esp+24h] [ebp-18h] int v14; // [esp+28h] [ebp-14h] int v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+30h] [ebp-Ch] int v17; // [esp+34h] [ebp-8h] v1 = this; v2 = (_DWORD *)strlen((const char *)(*(int (**)(void))(*this[86] + 452))()); if ( v2 ) { v3 = (char *)(*(int (**)(void))(*v1[86] + 452))(); if ( strlen(v3) < 4 ) { v4 = (char *)sub_40C190(-87816400); LABEL_20: LOBYTE(v2) = (unsigned int)sub_462C30(1, v4); return (char)v2; } if ( sub_412D20((BYTE *)v3) || sub_412DA0(v3) || sub_451A00((unsigned __int8 *)v3) || sub_412ED0(v3) ) { v4 = (char *)sub_40C190(849182339); goto LABEL_20; } v5 = (char *)(*(int (**)(void))(*v1[86] + 452))(); sub_416970(v13, v5); v2 = (_DWORD *)sub_6805D0((int)byte_AD9238); v6 = v2; if ( v2 ) { v7 = (char *)(*(int (**)(void))(*v1[86] + 452))(); sub_416970(&v12, v7); if ( sub_4169A0(&v12, v6 + 1) ) { v8 = (char *)sub_40A910(-1538849060); sub_462C30(1, v8); LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v1); } else { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD5C); if ( v2 ) { if ( v1[93] == (_DWORD *)2 ) { sub_48EE70(v2, *(int *)v13, v14, v15, v16, v17); } else if ( (_DWORD *)((char *)v1[93] - 2) == (_DWORD *)1 ) { sub_48F020(v2, *(int *)v13, v14, v15, v16, v17); } v9 = (int)(v1 + 89); v10 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 240))(0); v9 += 4; --v10; } while ( v10 ); v1[93] = 0; LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v1); } } } } return (char)v2; } // ACDD5C: using guessed type int dword_ACDD5C; //----- (00415880) -------------------------------------------------------- char __thiscall sub_415880(volatile LONG *this) { volatile LONG *v1; // ebx int v2; // edi int v3; // esi signed int v4; // edi char result; // al int v6; // ecx int v7; // edi signed int v8; // edi v1 = this; sub_8F2BC0(this, 1, 0, 0); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD5C); v3 = (int)(v1 + 89); if ( v2 ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)v3 + 260))() == 1 && *((_DWORD *)v1 + 93) == 1 ) { v6 = *(_DWORD *)(v2 + 36); *(_BYTE *)(v2 + 216) = 0; *(_DWORD *)(v2 + 268) = -1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v6 + 252))(1); } v7 = *(_DWORD *)(v2 + 36); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v7 + 352) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v7 + 356) + 240))(1); v8 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0); v3 += 4; --v8; } while ( v8 ); *((_DWORD *)v1 + 93) = 0; } else { v4 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0); v3 += 4; --v4; } while ( v4 ); *((_DWORD *)v1 + 93) = 0; result = sub_8F86A0(&unk_BA6B10, v1); } return result; } // ACDD5C: using guessed type int dword_ACDD5C; //----- (00415980) -------------------------------------------------------- void __thiscall sub_415980(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // ST04_4 float *v4; // ST00_4 _DWORD *v5; // eax void *v6; // [esp+Ch] [ebp-B0h] int v7; // [esp+10h] [ebp-ACh] int v8; // [esp+14h] [ebp-A8h] int v9; // [esp+18h] [ebp-A4h] char v10; // [esp+1Ch] [ebp-A0h] int v11; // [esp+B8h] [ebp-4h] v1 = this; if ( this[72] ) { v2 = sub_8E5FC0(); sub_8E5970(v2); v6 = 0; v7 = 0; v8 = 0; v9 = 1024; sub_85F230(&v6, 0x400u); v11 = 0; sub_85F910(&v10, (int)&v6); v3 = v1[70]; v4 = (float *)v1[72]; LOBYTE(v11) = 1; sub_85FB50(v4, v3, &v10, 0); if ( dword_ADB6C4 ) sub_85FB50((float *)v1[72], dword_ADB6C4, &v10, 0); v5 = sub_8E5FC0(); sub_8E59E0(v5); sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); LOBYTE(v11) = 0; sub_85F7E0(&v10); operator delete[](v6); } } // ADB6C4: using guessed type int dword_ADB6C4; // BA46D0: using guessed type int dword_BA46D0; //----- (00415AB0) -------------------------------------------------------- void __thiscall sub_415AB0(_BYTE *this) { _BYTE *v1; // esi int v2; // eax char *v3; // eax char *v4; // eax volatile LONG *v5; // eax char v6; // [esp+4h] [ebp-4h] v1 = this; if ( this[216] != 1 ) { v6 = sub_680660(byte_AD9238); if ( v6 != -1 && v1[300] != 1 ) { v2 = sub_680580(byte_AD9238, v6); if ( v2 ) { if ( *(_BYTE *)(v2 + 119) ) { v3 = (char *)sub_40A910(2037278136); sub_462C30(1, v3); } else { v1[300] = 1; v4 = (char *)sub_40C190(607144082); v5 = sub_462C30(0, v4); sub_56FF80((_DWORD *)v1 + 73, (int)v5); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 9) + 252))(0); sub_48E3C0(v1); } } } } } //----- (00415B60) -------------------------------------------------------- _DWORD *__thiscall sub_415B60(void *this) { void *v1; // esi v1 = this; sub_905F40(dword_AB7F48); sub_905F40(dword_AB7F4C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F48: using guessed type int dword_AB7F48; // AB7F4C: using guessed type int dword_AB7F4C; // ACDD50: using guessed type int dword_ACDD50; //----- (00415B90) -------------------------------------------------------- void __thiscall sub_415B90(_DWORD *this) { void *v1; // esi char *v2; // eax v1 = this; if ( this[67] == -1 ) { if ( sub_680680(byte_AD9238) == -1 ) { v2 = (char *)sub_40C190(-2121214265); sub_462C30(1, v2); } else { sub_6BA650(&dword_AB6520, 17); sub_8EF040(v1, dword_ACDD60, 0); } } } // ACDD60: using guessed type int dword_ACDD60; //----- (00415BE0) -------------------------------------------------------- volatile LONG *__thiscall sub_415BE0(void *this) { void *v1; // esi volatile LONG *result; // eax int v3; // edi int v4; // esi char *v5; // eax v1 = this; if ( sub_680660(byte_AD9238) != -1 && sub_6805D0((int)byte_AD9238) ) { result = (volatile LONG *)(*(int (**)(void))(**((_DWORD **)v1 + 76) + 260))(); if ( !(_BYTE)result ) { sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 76)); sub_415500(*((char **)v1 + 76), 1, 1); v3 = *((_DWORD *)v1 + 76); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 344) + 464))(&unk_9A9772); (*(void (**)(void))(**(_DWORD **)(v3 + 344) + 480))(); v4 = *((_DWORD *)v1 + 9); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 352) + 240))(0); result = (volatile LONG *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 356) + 240))(0); } } else { v5 = (char *)sub_40C190(1836485343); result = sub_462C30(1, v5); } return result; } //----- (00415CB0) -------------------------------------------------------- _DWORD *__thiscall sub_415CB0(_DWORD **this) { int v1; // esi char *v2; // eax volatile LONG *v3; // eax char v5; // [esp+4h] [ebp-18h] int v6; // [esp+Ch] [ebp-10h] v1 = (int)this; if ( this[73] ) sub_8F9E00(&unk_BA6B10, this[73]); v2 = (char *)sub_40C190(-2139391874); v3 = sub_462C30(1, v2); v6 = 14; return sub_461760(v3, v1, &v5, 0); } //----- (00415D20) -------------------------------------------------------- void __thiscall sub_415D20(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // ecx int v7; // [esp+4h] [ebp-4h] v2 = (_DWORD *)this[79]; while ( v2 ) { v3 = v2[2]; v4 = *(_DWORD *)(v3 + 12); v2 = (_DWORD *)*v2; v5 = (void (__thiscall ***)(_DWORD, signed int))v4; v7 = *(_DWORD *)(v3 + 12); if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v5 ) (**v5)(v5, 1); *(_DWORD *)(v3 + 12) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = *(_DWORD **)(v3 + 36); if ( v6 ) { if ( v7 ) sub_833360(v6, v7); if ( a2 ) sub_833620(*(_DWORD **)(v3 + 36), *(_DWORD **)(v3 + 12), 0, -1, 1); } } } //----- (00415DC0) -------------------------------------------------------- char __fastcall sub_415DC0(_DWORD *a1) { int v1; // edx int v2; // eax _DWORD *v3; // esi unsigned int v4; // ebx _DWORD *v5; // edi _DWORD *v6; // eax int v7; // eax int v9; // [esp+4h] [ebp-18h] int v10; // [esp+8h] [ebp-14h] int v11; // [esp+Ch] [ebp-10h] _DWORD *v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] char v14; // [esp+1Bh] [ebp-1h] v1 = dword_AC9CE8; LOBYTE(v2) = *(_BYTE *)(dword_AC9CE8 + 12); *(_BYTE *)(dword_AC9CE8 + 12) = 0; v3 = (_DWORD *)a1[79]; v12 = a1; v13 = v1; v14 = v2; if ( v3 ) { v4 = 0; if ( a1[86] ) { do { if ( v4 >= 6 || a1[v4 + 61] ) { v5 = (_DWORD *)v3[2]; LOBYTE(v2) = (_BYTE)v3 + 8; v3 = (_DWORD *)*v3; if ( v5 ) { v6 = *(_DWORD **)(a1[87] + 4 * v4); v9 = v6[22]; v10 = v6[23]; v11 = v6[24]; sub_68E670(v5, (int)v6, (int)&v9); v2 = v5[29]; v1 = v13; *(_WORD *)(v2 + 28) &= 0xFFFEu; a1 = v12; } } ++v4; } while ( v4 < a1[86] ); } for ( ; v3; *(_WORD *)(v2 + 28) |= 1u ) { v7 = v3[2]; v3 = (_DWORD *)*v3; v2 = *(_DWORD *)(v7 + 116); } *(_BYTE *)(v1 + 12) = v14; } return v2; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (00415F00) -------------------------------------------------------- void __thiscall sub_415F00(volatile LONG *this, int a2, int a3) { if ( a2 ) { if ( a2 == 1 ) { sub_415880(this); } else if ( a2 == 2 ) { sub_415460((_DWORD **)this); } } else { sub_415660((_DWORD **)this); } } //----- (00415F30) -------------------------------------------------------- void __thiscall sub_415F30(_BYTE *this, char a2) { _BYTE *v2; // esi char v3; // al bool v4; // zf unsigned __int8 v5; // bl _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax _DWORD *v9; // ecx _DWORD **v10; // ecx _BYTE *v11; // ecx int v12; // eax int v13; // ecx int v14; // edi int v15; // edx int v16; // ecx int v17; // eax int v18; // eax _DWORD **v19; // ecx int v20; // [esp+20h] [ebp-28h] int v21; // [esp+24h] [ebp-24h] unsigned __int8 v22; // [esp+2Bh] [ebp-1Dh] int v23; // [esp+2Ch] [ebp-1Ch] int v24; // [esp+30h] [ebp-18h] int v25; // [esp+34h] [ebp-14h] int v26; // [esp+38h] [ebp-10h] int v27; // [esp+3Ch] [ebp-Ch] char v28; // [esp+40h] [ebp-8h] v2 = this; if ( this[216] != 1 ) { v3 = sub_680660(byte_AD9238); v4 = *((_DWORD *)v2 + 76) == 0; v22 = v3; if ( !v4 && (*(unsigned __int8 (**)(void))(**((_DWORD **)v2 + 76) + 260))() ) sub_8F86A0(&unk_BA6B10, *((_DWORD **)v2 + 76)); v5 = a2; if ( v22 == a2 || v2[300] ) { if ( v22 != -1 ) { if ( *((_DWORD *)v2 + 76) ) { v18 = sub_680580(byte_AD9238, a2); if ( v18 ) { if ( *(_BYTE *)(v18 + 119) == 1 ) { sub_4169E0((_DWORD *)(v18 + 4), (int)&v23); v19 = (_DWORD **)*((_DWORD *)v2 + 76); v28 = 0; sub_412F60(v19, (int)&v23); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v2 + 76)); sub_415500(*((char **)v2 + 76), 3, 1); sub_412CA0(*((_DWORD ***)v2 + 9), 0); } else { sub_412CA0(*((_DWORD ***)v2 + 9), 1); sub_415AB0(v2); } } } } } else { sub_680670(byte_AD9238, a2); v6 = (_DWORD **)(v2 + 220); v21 = 4; do { if ( *(v6 - 44) && *v6 ) { (*(void (__stdcall **)(int *, _DWORD))(**v6 + 120))(&v20, *(v6 - 44)); if ( v20 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v20; if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v7 ) (**v7)(v7, 1); v5 = a2; } sub_85BED0((_DWORD **)*v6, 0.0, 0); sub_85C4D0(*v6); } ++v6; --v21; } while ( v21 ); if ( v5 != -1 && *(_DWORD *)&v2[4 * v5 + 244] ) { byte_AC9CBD = 1; byte_AA8A22 = 0; dword_AC9CC0 = v5; sub_413E70(*(_BYTE **)&v2[4 * v5 + 244], v5); v8 = sub_680580(byte_AD9238, v5); if ( !v8 ) return; v9 = (_DWORD *)*((_DWORD *)v2 + 9); if ( v9 ) sub_4915C0(v9, v8); if ( *(_DWORD *)&v2[4 * v5 + 44] ) { v10 = *(_DWORD ***)&v2[4 * v5 + 220]; if ( v10 ) { sub_85BED0(v10, 0.0, 0); sub_85C4D0(*(_DWORD **)&v2[4 * v5 + 220]); } } } if ( v22 != -1 ) { v11 = *(_BYTE **)&v2[4 * v22 + 244]; if ( v11 ) sub_4133F0(v11, v22); } if ( *((_DWORD *)v2 + 76) ) { v12 = sub_680580(byte_AD9238, v5); if ( v12 ) { if ( *(_BYTE *)(v12 + 119) == 1 ) { v13 = *(_DWORD *)(v12 + 4); v14 = *((_DWORD *)v2 + 76); v24 = *(_DWORD *)(v12 + 8); v15 = *(_DWORD *)(v12 + 16); v23 = v13; v16 = *(_DWORD *)(v12 + 12); v17 = *(_DWORD *)(v12 + 20); v26 = v15; v27 = v17; v25 = v16; v28 = 0; (*(void (__stdcall **)(int *))(**(_DWORD **)(v14 + 344) + 464))(&v23); (*(void (**)(void))(**(_DWORD **)(v14 + 344) + 480))(); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v2 + 76)); sub_415500(*((char **)v2 + 76), 3, 1); sub_412CA0(*((_DWORD ***)v2 + 9), 0); } else { sub_412CA0(*((_DWORD ***)v2 + 9), 1); } } } } } } // AA8A22: using guessed type char byte_AA8A22; // AC9CBD: using guessed type char byte_AC9CBD; // AC9CC0: using guessed type int dword_AC9CC0; //----- (00416220) -------------------------------------------------------- _DWORD *__thiscall sub_416220(_DWORD **this) { int v1; // esi char *v2; // eax volatile LONG *v3; // eax char v5; // [esp+4h] [ebp-18h] int v6; // [esp+Ch] [ebp-10h] v1 = (int)this; if ( this[73] ) sub_8F9E00(&unk_BA6B10, this[73]); v2 = (char *)sub_40C190(-2139391874); v3 = sub_462C30(1, v2); v6 = 14; return sub_461760(v3, v1, &v5, 0); } //----- (00416290) -------------------------------------------------------- void __thiscall sub_416290(float **this) { float **v1; // ebx float *v2; // esi int v3; // eax int v4; // edi int v5; // eax char v6; // al char v7; // [esp+4h] [ebp-1Ch] float v8[3]; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v1 = this; if ( dword_BA6AA8 >= 1 ) { sub_862960(this[72], *(float *)&pt.x, *(float *)&pt.y, (int)&v7, COERCE_FLOAT(v8)); v2 = v1[69]; v3 = (int)v1[71]; v4 = *((_DWORD *)v2 + 6); v9 = v3; if ( v4 != v3 ) { if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3 = v9; } *((_DWORD *)v2 + 6) = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } if ( sub_444720(v1[69], (float *)&v7, v8) ) { v5 = sub_444750(v1[69], 0); v6 = sub_413230(v5); if ( v6 != -1 ) sub_415F30(v1, v6); } } } // BA6AA8: using guessed type int dword_BA6AA8; //----- (00416360) -------------------------------------------------------- void __thiscall sub_416360(_DWORD *this, int a2, int a3, int a4) { switch ( a2 ) { case 9: sub_412F90(this); break; case 10: sub_412FB0(this); break; case 11: sub_416220((_DWORD **)this); break; case 12: sub_412FD0(this); break; case 13: sub_415CB0((_DWORD **)this); break; case 14: sub_412FF0((int)this); break; case 15: sub_413020(this); break; case 16: sub_413050((_DWORD **)this); break; case 17: sub_413080((int)this); break; case 18: sub_8EF040(this, dword_ACDD50, 0); break; case 20: sub_48EA90(this, a3 != 0); break; default: return; } } // ACDD50: using guessed type int dword_ACDD50; //----- (00416420) -------------------------------------------------------- int __cdecl sub_416420(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x178u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &ChangeNameWin::`vftable'; *(_DWORD *)(v2 + 232) = &ChangeNameWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 364), 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *(_DWORD *)(v2 + 372) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A982C: using guessed type void *ChangeNameWin::`vftable'; // 9A984C: using guessed type void *ChangeNameWin::`vftable'; //----- (00416580) -------------------------------------------------------- char __thiscall sub_416580(_DWORD *this, float a2) { float **v2; // esi int v3; // ecx int v4; // ecx float *v5; // ecx char *v6; // eax volatile LONG *v7; // eax char *v8; // eax volatile LONG *v9; // eax int v10; // edi int v11; // ecx int v12; // eax float *v13; // ebx float *v14; // eax char result; // al int v16; // edi float *v17; // ecx int v18; // eax void **v19; // [esp+30h] [ebp-40h] _DWORD *(__thiscall *v20)(void *); // [esp+34h] [ebp-3Ch] float **v21; // [esp+38h] [ebp-38h] void ***v22; // [esp+40h] [ebp-30h] void **v23; // [esp+48h] [ebp-28h] _DWORD *(__thiscall *v24)(void *); // [esp+4Ch] [ebp-24h] float **v25; // [esp+50h] [ebp-20h] void ***v26; // [esp+58h] [ebp-18h] int v27; // [esp+6Ch] [ebp-4h] v2 = (float **)this; v3 = this[74]; if ( v3 ) (*(void (__stdcall **)(float **, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0(v2); sub_8F8AE0(&unk_BA6B10, 1); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); sub_416290(v2); sub_415DC0(v2); sub_664570(dword_AD8C90, a2); sub_6ACAD0(&unk_B91250, a2); sub_85BED0((_DWORD **)dword_ADB6C4, a2, 1); v4 = (int)v2[74]; if ( v4 ) sub_9060A0(v4); v5 = v2[70]; if ( v5 ) sub_85BED0((_DWORD **)v5, a2, 1); if ( byte_B68508 != 1 || v2[91] ) { if ( *((_BYTE *)v2[74] + 9) && !v2[91] ) { if ( v2[73] ) sub_8F9E00(&unk_BA6B10, v2[73]); v24 = sub_4130D0; v23 = &std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable'; v25 = v2; v26 = &v23; v27 = 1; v8 = (char *)sub_40C190(-808578239); v9 = sub_41E360(0, (int)v2, 1, v8); v2[91] = (float *)v9; sub_41E140((void *)v9, 1, (int)&v23); v27 = -1; if ( v26 ) { ((void (__stdcall *)(bool))(*v26)[3])(v26 != &v23); v26 = 0; } } } else { if ( v2[73] ) sub_8F9E00(&unk_BA6B10, v2[73]); v20 = sub_4130D0; v19 = &std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable'; v21 = v2; v22 = &v19; v27 = 0; v6 = (char *)sub_40C190(374499920); v7 = sub_41E360(0, (int)v2, 1, v6); v2[91] = (float *)v7; sub_41E140((void *)v7, 1, (int)&v19); byte_B68508 = 0; v27 = -1; if ( v22 ) ((void (__stdcall *)(bool))(*v22)[3])(v22 != &v19); } if ( v2[17] ) { v10 = (int)(v2 + 18); v11 = (int)(v2 + 18); if ( byte_AA8A22 ) { if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v11) ) { if ( (unsigned int)dword_AC9CC0 >= 3 ) v12 = 0; else v12 = dword_AC9CC0 + 1; dword_AC9CC0 = v12; (*(void (__thiscall **)(float **, float *))(*(_DWORD *)v10 + 40))(v2 + 18, v2[v12 + 42] + 22); (*(void (__thiscall **)(float **, _DWORD))(*(_DWORD *)v10 + 8))(v2 + 18, 10.0); (*(void (__thiscall **)(float **, _DWORD, float *, float *))(*(_DWORD *)v10 + 28))( v2 + 18, LODWORD(a2), v2[17] + 22, v2[dword_AC9CC0 + 42] + 22); goto LABEL_29; } } else if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v11) ) { (*(void (__thiscall **)(float **, _DWORD))(*(_DWORD *)v10 + 8))(v2 + 18, 15.0); (*(void (__thiscall **)(float **, _DWORD, float *, float *))(*(_DWORD *)v10 + 28))( v2 + 18, LODWORD(a2), v2[17] + 22, v2[dword_AC9CC0 + 48] + 22); LABEL_29: (*(void (__thiscall **)(float **, _DWORD))(*(_DWORD *)v10 + 36))(v2 + 18, LODWORD(a2)); goto LABEL_30; } v13 = v2[17]; v14 = (float *)(*(int (__thiscall **)(float **))(*(_DWORD *)v10 + 56))(v2 + 18); v13[22] = *v14; v13[23] = v14[1]; v13[24] = v14[2]; goto LABEL_29; } LABEL_30: if ( byte_AC9CBD ) { result = sub_680660(byte_AD9238); if ( result == -1 ) return result; v16 = (unsigned __int8)result; v17 = v2[(unsigned __int8)result + 61]; if ( !v17 ) return result; v18 = sub_65D700(v17, dword_AC9CC4); if ( v18 && *(float *)(v18 + 48) <= (double)*(float *)(v18 + 52) ) { byte_AC9CBD = 0; sub_414470(v2[v16 + 61], v16); } } if ( dword_AB6524 ) { if ( !sub_6B7C90((_DWORD *)dword_AB6524) ) { unknown_libname_12(&dword_AB6520); sub_6B7C20((float *)dword_AB6524, 0.0); sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); } } return sub_6BACD0(&dword_AB6520, a2, 0); } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // 9A9A78: using guessed type void *std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable'; // AA8A22: using guessed type char byte_AA8A22; // AB6524: using guessed type int dword_AB6524; // AC9CBD: using guessed type char byte_AC9CBD; // AC9CC0: using guessed type int dword_AC9CC0; // AC9CC4: using guessed type int dword_AC9CC4; // ADB6C4: using guessed type int dword_ADB6C4; // B68508: using guessed type char byte_B68508; //----- (00416970) -------------------------------------------------------- char *__thiscall sub_416970(char *this, char *a2) { char *v2; // esi v2 = this; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; strncpy(this, a2, 0x14u); return v2; } //----- (004169A0) -------------------------------------------------------- BOOL __thiscall sub_4169A0(_DWORD *this, _DWORD *a2) { return *this == *a2 && this[1] == a2[1] && this[2] == a2[2] && this[3] == a2[3] && this[4] == a2[4]; } //----- (004169E0) -------------------------------------------------------- int __thiscall sub_4169E0(_DWORD *this, int a2) { int result; // eax result = a2; *(_DWORD *)a2 = *this; *(_DWORD *)(a2 + 4) = this[1]; *(_DWORD *)(a2 + 8) = this[2]; *(_DWORD *)(a2 + 12) = this[3]; *(_DWORD *)(a2 + 16) = this[4]; *(_BYTE *)(a2 + 20) = 0; return result; } //----- (00416A10) -------------------------------------------------------- void __thiscall sub_416A10(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[6]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[6] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (00416A60) -------------------------------------------------------- void ***sub_416A60() { return &std::tr1::_Bind,CharSelectFrameWork *>> `RTTI Type Descriptor'; } // AA8B08: using guessed type void **std::tr1::_Bind,CharSelectFrameWork *>> `RTTI Type Descriptor'; //----- (00416A70) -------------------------------------------------------- char *__thiscall sub_416A70(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0xCu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A9A78: using guessed type void *std::tr1::_Impl_no_alloc0,CharSelectFrameWork *>>,0>,void>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00416AD0) -------------------------------------------------------- _DWORD *__thiscall sub_416AD0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ChangeNameWin::`vftable'; *((_DWORD *)this + 58) = &ChangeNameWin::`vftable'; *((_DWORD *)this + 86) = 0; `eh vector destructor iterator'((char *)this + 364, 4u, 2, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A982C: using guessed type void *ChangeNameWin::`vftable'; // 9A984C: using guessed type void *ChangeNameWin::`vftable'; //----- (00416B60) -------------------------------------------------------- char __thiscall sub_416B60(_BYTE *this, char a2) { char result; // al result = a2; this[380] = a2; this[359] = 1; return result; } //----- (00416BD0) -------------------------------------------------------- int __thiscall sub_416BD0(int this) { int v1; // esi int result; // eax int v3; // edi const CHAR *v4; // eax int v5; // [esp-4h] [ebp-Ch] v1 = this; if ( *(_DWORD *)(this + 376) == 1 ) { v5 = 1777710823; } else if ( *(_DWORD *)(this + 376) == 2 ) { v5 = -1260144839; } else { result = *(_DWORD *)(this + 376) - 3; if ( *(_DWORD *)(this + 376) != 3 ) return result; v5 = -181667187; } v3 = **(_DWORD **)(this + 388); v4 = sub_4090F0(v5); return (*(int (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 388), v4); } //----- (00416C20) -------------------------------------------------------- void __thiscall sub_416C20(int this) { int v1; // esi int v2; // edi signed int v3; // eax char *v4; // eax volatile LONG *v5; // eax _DWORD *v6; // esi const CHAR *v7; // eax v1 = this; if ( *(_BYTE *)(this + 357) ) { v2 = sub_685510(&byte_ADA230, *(_WORD *)(this + 372)); v3 = sub_685BB0(&byte_ADA230, *(_WORD *)(v1 + 372)); if ( v2 && v3 >= 0 ) { *(_DWORD *)(v1 + 368) = v3; v4 = (char *)sub_4090F0(-1612523589); v5 = sub_462C30(2, v4); (**((void (__stdcall ***)(int))v5 + 58))(v1 + 232); } else { v6 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v6 ) { v7 = sub_4090F0(110452078); sub_492060(v6, (int)v7); } } } } // ADA230: using guessed type char byte_ADA230; //----- (00416CC0) -------------------------------------------------------- int __thiscall sub_416CC0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx double v3; // st7 int result; // eax v1 = this; v2 = this[96]; *((_BYTE *)v1 + 358) = 0; *((float *)v1 + 86) = flt_ACCFCC; v3 = flt_ACCFCC; *((_BYTE *)v1 + 357) = 0; *((float *)v1 + 87) = v3; *(_WORD *)((char *)v1 + 359) = 0; result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1); *((float *)v1 + 88) = 0.1; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00416D20) -------------------------------------------------------- void __thiscall sub_416D20(char *this, float a2) { char *v2; // esi _DWORD *v3; // ecx double v4; // st7 char *v5; // ebx int v6; // edi _DWORD *v7; // eax _DWORD *v8; // eax int v9; // esi int v10; // esi const CHAR *v11; // eax _DWORD *v12; // [esp+4h] [ebp-4h] float v13; // [esp+10h] [ebp+8h] float v14; // [esp+10h] [ebp+8h] int v15; // [esp+10h] [ebp+8h] v2 = this; v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v12 = v3; v4 = a2; if ( *((float *)v2 + 88) <= 2.0 ) { v13 = v4 - *((float *)v2 + 87); *((float *)v2 + 88) = v13 * 0.009999999776482582 + *((float *)v2 + 88); } v14 = v4 - *((float *)v2 + 86); if ( v14 >= 6.0 ) { if ( v2[359] ) { if ( v2[360] ) { v5 = sub_417C60(v2[380]); if ( v5 ) { sub_6B0B40(*((float **)v2 + 98), *((_DWORD **)v2 + 96)); *(_WORD *)(**((_DWORD **)v2 + 98) + 28) &= 0xFFFEu; v6 = **((_DWORD **)v2 + 96); v15 = *((_DWORD *)v2 + 96); v7 = sub_8F62B0(v5[1], v5[2], v5[3], 255); (*(void (__thiscall **)(int, _DWORD *))(v6 + 452))(v15, v7); v8 = v2 + 396; *(_WORD *)(v2 + 357) = 257; if ( *((_DWORD *)v2 + 104) >= 0x10u ) v8 = (_DWORD *)*v8; sub_6BA680(&dword_AB6520, (int)v8); if ( v12 ) { v9 = *((_DWORD *)v2 + 94) - 1; if ( v9 ) { v10 = v9 - 1; if ( v10 ) { if ( v10 != 1 ) return; v11 = sub_4090F0(903643866); } else { v11 = sub_4090F0(-225951342); } } else { v11 = sub_4090F0(-248056156); } sub_492060(v12, (int)v11); } } } } else if ( !v2[360] ) { if ( v3 ) { sub_4C06E0(v3, *((_DWORD *)v2 + 92)); v2[360] = 1; } } } } //----- (00416EF0) -------------------------------------------------------- _DWORD *__thiscall sub_416EF0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ChatColorSpinWin::`vftable'; v1[58] = &ChatColorSpinWin::`vftable'; v1[96] = 0; v1[104] = 15; v1[103] = 0; *((_BYTE *)v1 + 396) = 0; v2 = v1[96]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[96] = 0; } *((float *)v1 + 86) = 0.0; v1[98] = 0; *((float *)v1 + 87) = 0.0; v1[89] = 65792; *((_BYTE *)v1 + 360) = 0; *((float *)v1 + 88) = 0.30000001; v1[97] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A9BCC: using guessed type void *ChatColorSpinWin::`vftable'; // 9A9BEC: using guessed type void *ChatColorSpinWin::`vftable'; //----- (00416FF0) -------------------------------------------------------- LONG __thiscall sub_416FF0(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi v1 = this; *this = &ChatColorSpinWin::`vftable'; this[58] = &ChatColorSpinWin::`vftable'; v2 = (int *)this[98]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[98] = 0; } if ( v1[104] >= 0x10u ) operator delete((void *)v1[99]); v1[104] = 15; v1[103] = 0; *((_BYTE *)v1 + 396) = 0; v4 = v1[96]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9A9BCC: using guessed type void *ChatColorSpinWin::`vftable'; // 9A9BEC: using guessed type void *ChatColorSpinWin::`vftable'; //----- (00417110) -------------------------------------------------------- void __thiscall sub_417110(void *this, int a2, int a3) { if ( a2 ) { if ( a2 == 1 ) (*(void (**)(void))(*(_DWORD *)this + 360))(); } else { sub_416C20((int)this); } } //----- (00417140) -------------------------------------------------------- int __thiscall sub_417140(char *this, int a2, _DWORD *a3, int a4) { int result; // eax int v5; // esi if ( a2 == 27 ) { result = (int)a3; if ( a3 ) { if ( !*a3 ) { v5 = (int)(this - 232); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)this + 38) + 256))(0); *(_WORD *)(**(_DWORD **)(v5 + 392) + 28) |= 1u; result = sub_416CC0((_DWORD *)v5); } } } return result; } //----- (00417190) -------------------------------------------------------- void __thiscall sub_417190(int this) { int v1; // esi int v2; // eax int v3; // eax v1 = this; if ( *(_BYTE *)(this + 357) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 384) + 256))(0); *(_WORD *)(**(_DWORD **)(v1 + 392) + 28) |= 1u; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD *)(v2 + 716); if ( v3 ) sub_536E90(*(_DWORD *)(v3 + 4 * *(_DWORD *)(v1 + 368) + 348), 0); } sub_8F2BC0((volatile LONG *)v1, 1, 0, 0); } } //----- (00417200) -------------------------------------------------------- void __thiscall sub_417200(int this, float a2) { int v2; // ebx double v3; // st7 float v4; // ST1C_4 unsigned int v5; // eax int v6; // ecx unsigned int v7; // ecx char *v8; // eax int *v9; // edi int v10; // esi _DWORD *v11; // eax float v12; // ST14_4 float v13; // [esp+18h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 358) != 1 ) { v3 = a2; if ( !*(_BYTE *)(this + 357) ) { v4 = v3 - *(float *)(this + 348); if ( *(float *)(this + 352) <= (double)v4 ) { v5 = rand(); v6 = *(_DWORD *)(dword_AC9CDC + 56); if ( v6 ) v7 = *(_DWORD *)(v6 + 40); else v7 = 0; v8 = sub_417C60(v5 % v7 + 1); if ( v8 ) { v9 = *(int **)(v2 + 384); v10 = *v9; v11 = sub_8F62B0(v8[1], v8[2], v8[3], 255); (*(void (__thiscall **)(int *, _DWORD *))(v10 + 452))(v9, v11); } v3 = a2; *(float *)(v2 + 348) = a2; } } v13 = v3 - *(float *)(v2 + 344); if ( v13 >= 1.5 ) { v12 = v3; sub_416D20((char *)v2, v12); } } } // AC9CDC: using guessed type int dword_AC9CDC; //----- (004172F0) -------------------------------------------------------- void __thiscall sub_4172F0(_BYTE **this, float a2) { int v2; // esi v2 = (int)this; sub_6B0C00(this[98], a2); sub_417200(v2, a2); } //----- (00417320) -------------------------------------------------------- volatile LONG *__cdecl sub_417320(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_416EF0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00417450) -------------------------------------------------------- char __thiscall sub_417450(void *this, int a2) { int v2; // ebx int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // esi volatile LONG *v13; // edi volatile LONG *v14; // esi int v15; // ST18_4 char v16; // ST1C_1 int v17; // ST20_4 int v18; // ST24_4 const CHAR *v19; // ST0C_4 int v20; // eax int v21; // eax void *v22; // edi const CHAR *v23; // esi int v24; // esi int v25; // eax char *v26; // edi char v27; // al unsigned int v28; // eax char *v29; // edi char v30; // cl volatile LONG *v31; // esi int v32; // eax void (__thiscall ***v33)(_DWORD, signed int); // edi volatile LONG *v34; // esi void *v35; // edi int v36; // eax float *v37; // eax float v38; // edx float v39; // eax float *v40; // eax double v41; // st7 float v42; // edx float v43; // ecx void (__thiscall ***v44)(_DWORD, signed int); // esi char v45; // [esp+2Ch] [ebp-378h] float v46; // [esp+30h] [ebp-374h] float v47; // [esp+34h] [ebp-370h] float v48; // [esp+38h] [ebp-36Ch] float v49; // [esp+3Ch] [ebp-368h] float v50; // [esp+40h] [ebp-364h] float v51; // [esp+44h] [ebp-360h] int v52; // [esp+48h] [ebp-35Ch] HDC hdc; // [esp+4Ch] [ebp-358h] int v54; // [esp+50h] [ebp-354h] int v55; // [esp+54h] [ebp-350h] void *v56; // [esp+58h] [ebp-34Ch] int v57[5]; // [esp+5Ch] [ebp-348h] LPCSTR lpString; // [esp+70h] [ebp-334h] int v59; // [esp+74h] [ebp-330h] void *v60; // [esp+78h] [ebp-32Ch] int v61; // [esp+88h] [ebp-31Ch] unsigned int v62; // [esp+8Ch] [ebp-318h] char v63; // [esp+93h] [ebp-311h] char v64; // [esp+94h] [ebp-310h] char v65; // [esp+95h] [ebp-30Fh] char v66[256]; // [esp+294h] [ebp-110h] int v67; // [esp+3A0h] [ebp-4h] v2 = (int)this; v59 = 0; v3 = dword_BA6BA0; v67 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ChatColorSpin.nif"); sub_8F66B0(v4, (int)&v59, v3); v5 = v59; if ( !v59 ) { if ( off_AC0554 ) { off_AC0554("ChatColorSpin.nif Load Fail", "LoadFail", v59); v5 = v59; } v67 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v9 = sub_8FB140(v59, (int)"Frame", (int)&v55, (int)&v54, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ChatColorSpin", 0) ) { LABEL_13: v6 = (void (__thiscall ***)(_DWORD, signed int))v59; v67 = -1; if ( !v59 ) return 0; v7 = (volatile LONG *)(v59 + 4); LABEL_8: if ( !InterlockedDecrement(v7) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v57); LOBYTE(v67) = 1; sub_455FF0(v57, v2); sub_456000(v57, v55, v54); sub_456380(v57, v59); *(_DWORD *)(v2 + 388) = sub_456760( v57, (int)"WinTitle", (int)&unk_9A9AAF, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); sub_456820(v57, (int)"Panel01", 0); v10 = (volatile LONG *)sub_43D0D0(0x13u); sub_456820(v57, (int)"Theme", v10); sub_456820(v57, (int)"BaseSlot", 0); v11 = sub_456820(v57, (int)"Slot01", 0); v12 = *(volatile LONG **)(v2 + 384); v13 = v11; if ( v12 != v11 ) { if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); *(_DWORD *)(v2 + 384) = v13; if ( v13 ) InterlockedIncrement(v13 + 1); } (*(void (**)(void))(**(_DWORD **)(v2 + 384) + 256))(); sub_456820(v57, (int)"Deco01", 0); v14 = sub_456B30(v57, 0, "Ok", 0, 3); v15 = dword_AA8C68; v16 = dword_AA8C6C; v17 = dword_AA8C70; v18 = dword_AA8C74; v19 = sub_40C190(1331644831); v20 = (*(int (__thiscall **)(volatile LONG *))(*v14 + 148))(v14); v21 = (*(int (__thiscall **)(volatile LONG *, int))(*v14 + 144))(v14, v20); sub_4561C0(v57, 0, 0, v21, (int)v19, (int)v14, 0, v15, v16, v17, v18, 5, 0, 0, 0); sub_456B30(v57, 1, "Cls", 0, 3); sub_8F71E0(v59, (int)"Text01", &v55, &v54, &v52, &v45); v22 = (void *)sub_456A50( v57, (int)"Text01", (int)&unk_9A9AB9, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0, 0); v56 = v22; hdc = *(HDC *)(sub_421050(0) + 192); v23 = sub_4090F0(-540225842); lpString = v23; v64 = 0; memset(&v65, 0, 0x1FFu); memset(v66, 0, 0x100u); v24 = sub_8F5700((int)v66, v23, hdc, v52); if ( v24 ) { do { v62 = 15; v61 = 0; LOBYTE(v60) = 0; sub_4018E0(&v60, v66, strlen(v66)); v25 = sub_417B90((unsigned __int8 *)&v60, "\n", 0x100000000ui64); if ( v25 == -1 ) { v66[v24] = 0; } else { v66[v25] = 0; v24 = v25 + 1; } lpString += v24; v26 = &v63; do v27 = (v26++)[1]; while ( v27 ); *(_WORD *)v26 = 10; v28 = strlen(v66) + 1; v29 = &v63; do v30 = (v29++)[1]; while ( v30 ); qmemcpy(v29, v66, v28); if ( v62 >= 0x10 ) operator delete(v60); memset(v66, 0, 0x100u); v24 = sub_8F5700((int)v66, lpString, hdc, v52); } while ( v24 ); v22 = v56; } (*(void (__thiscall **)(void *, char *))(*(_DWORD *)v22 + 472))(v22, &v64); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v22 + 240))(v22, 0); v31 = (volatile LONG *)sub_6AAFB0(&unk_B91250, "ChatColorSpinEffect"); v32 = v59; if ( (volatile LONG *)v59 != v31 ) { if ( v59 ) { v33 = (void (__thiscall ***)(_DWORD, signed int))v59; if ( !InterlockedDecrement((volatile LONG *)(v59 + 4)) ) { if ( v33 ) (**v33)(v33, 1); } } v59 = (int)v31; if ( !v31 ) goto LABEL_42; InterlockedIncrement(v31 + 1); v32 = v59; } if ( !v32 ) { LABEL_42: if ( off_AC0554 ) off_AC0554("ChatColorSpinEffect.nif Load Fail", "LoadFail", 0); LOBYTE(v67) = 0; sub_4562E0(v57); goto LABEL_13; } v34 = sub_456820(v57, (int)"Effect01", 0); v35 = operator new(0x44u); v56 = v35; LOBYTE(v67) = 2; if ( v35 ) { v36 = sub_85BD60((void *)v59); v37 = sub_6B0A90((float *)v35, v36); } else { v37 = 0; } *(_DWORD *)(v2 + 392) = v37; *((_BYTE *)v37 + 66) = 1; v38 = *((float *)v34 + 23); v39 = *((float *)v34 + 24); v49 = *((float *)v34 + 22); v50 = v38; v46 = -v49; v51 = v39; v40 = **(float ***)(v2 + 392); v47 = -v38; v41 = v51; v42 = v47; v40[22] = v46; v48 = v41; v43 = v48; v40[23] = v42; v40[24] = v43; LOBYTE(v67) = 1; sub_4018E0((_DWORD *)(v2 + 396), "MoverUpgrade_Start", 0x12u); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v67) = 0; sub_4562E0(v57); v67 = -1; if ( v59 ) { v44 = (void (__thiscall ***)(_DWORD, signed int))v59; if ( !InterlockedDecrement((volatile LONG *)(v59 + 4)) ) { if ( v44 ) (**v44)(v44, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00417B60) -------------------------------------------------------- int __thiscall sub_417B60(float *this, float a2, float a3, float a4) { int result; // eax this[22] = a2; this[23] = a3; result = LODWORD(a4); this[24] = a4; return result; } //----- (00417B90) -------------------------------------------------------- int __thiscall sub_417B90(unsigned __int8 *this, unsigned __int8 *a2, unsigned __int64 a3) { unsigned __int64 v3; // rax unsigned int v4; // edi unsigned int v5; // edi size_t v6; // edi int v7; // ebx unsigned __int8 *v8; // esi unsigned __int8 *v9; // ecx unsigned __int8 *v11; // [esp+0h] [ebp-4h] v3 = a3; v11 = this; if ( a3 > *((unsigned int *)this + 4) ) { v4 = *((_DWORD *)this + 4); if ( (unsigned int)a3 >= v4 ) goto LABEL_9; v5 = v4 - a3; if ( HIDWORD(a3) > v5 ) goto LABEL_9; v6 = 1 - HIDWORD(a3) + v5; if ( *((_DWORD *)this + 5) >= 0x10u ) this = *(unsigned __int8 **)this; v7 = (int)&this[a3]; v8 = (unsigned __int8 *)memchr(&this[a3], (char)*a2, v6); if ( v8 ) { while ( sub_40C0B0(v8, a2, HIDWORD(a3)) ) { v6 = v6 + v7 - (_DWORD)v8 - 1; v7 = (int)(v8 + 1); v8 = (unsigned __int8 *)memchr(v8 + 1, (char)*a2, v6); if ( !v8 ) goto LABEL_9; } v9 = v11; if ( *((_DWORD *)v11 + 5) >= 0x10u ) v9 = *(unsigned __int8 **)v11; LODWORD(v3) = v8 - v9; } else { LABEL_9: LODWORD(v3) = -1; } } return v3; } //----- (00417C40) -------------------------------------------------------- int sub_417C40() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_AC9CDC + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // AC9CDC: using guessed type int dword_AC9CDC; //----- (00417C60) -------------------------------------------------------- _BYTE *__cdecl sub_417C60(char a1) { unsigned int v1; // esi _BYTE *result; // eax v1 = 0; if ( !sub_417C40() ) return 0; while ( 1 ) { result = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9CDC + 4), v1); if ( *result == a1 ) break; if ( ++v1 >= sub_417C40() ) return 0; } return result; } // AC9CDC: using guessed type int dword_AC9CDC; //----- (00417CA0) -------------------------------------------------------- void *__thiscall sub_417CA0(void *this, char a2) { void *v2; // esi v2 = this; sub_416FF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00417CD0) -------------------------------------------------------- char __thiscall sub_417CD0(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[95]); } //----- (00417D20) -------------------------------------------------------- int __thiscall sub_417D20(_DWORD **this, __int64 a2) { __int64 v2; // kr00_8 _DWORD **v3; // esi int v4; // ST20_4 signed __int64 v5; // rax char *v6; // eax signed __int64 v7; // rax char *v8; // eax signed __int64 v9; // rax char *v10; // eax signed __int64 v11; // rax char *v12; // eax int v14; // [esp+1Ch] [ebp+Ch] int v15; // [esp+1Ch] [ebp+Ch] int v16; // [esp+1Ch] [ebp+Ch] v2 = a2; v3 = this; v4 = *this[93]; v5 = sub_680EB0(a2); v6 = sub_7549E0("%I64d ", v5); (*(void (__thiscall **)(_DWORD *, char *))(v4 + 472))(v3[93], v6); v14 = *v3[92]; v7 = sub_680F00(v2); v8 = sub_7549E0("%I64d ", v7); (*(void (__thiscall **)(_DWORD *, char *))(v14 + 472))(v3[92], v8); v15 = *v3[91]; v9 = sub_680F60(v2); v10 = sub_7549E0("%I64d ", v9); (*(void (__thiscall **)(_DWORD *, char *))(v15 + 472))(v3[91], v10); v16 = *v3[94]; v11 = sub_680E90(v2); v12 = sub_7549E0("%I64d ", v11); return (*(int (__thiscall **)(_DWORD *, char *))(v16 + 472))(v3[94], v12); } //----- (00417E10) -------------------------------------------------------- void sub_417E10() { int v0; // eax _DWORD *v1; // esi v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) { v1 = *(_DWORD **)(v0 + 1156); if ( v1 ) { sub_5C57F0(v1, 1); sub_5C58D0((int)v1); } } } //----- (00417E50) -------------------------------------------------------- LONG __thiscall sub_417E50(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // ST10_4 v1 = this; *this = &ClassChangeWin::`vftable'; this[58] = &ClassChangeWin::`vftable'; v2 = (int)(this + 100); *(_DWORD *)v2 = &NiTMap>::`vftable'; sub_940360(this + 100); *(_DWORD *)v2 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); v3 = v1 + 96; *v3 = &NiTMap>::`vftable'; sub_940360(v1 + 96); *v3 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v1 + 96); operator delete[]((void *)v1[98]); return sub_8F10F0(v1); } // 9AA230: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9AA25C: using guessed type void *NiTMap>::`vftable'; // 9AA27C: using guessed type void *ClassChangeWin::`vftable'; // 9AA29C: using guessed type void *ClassChangeWin::`vftable'; //----- (00417F20) -------------------------------------------------------- int __thiscall sub_417F20(_DWORD **this) { _DWORD **v1; // esi int v2; // ST0C_4 char *v3; // eax char *v4; // eax volatile LONG *v5; // eax int result; // eax v1 = this; v2 = (*(int (**)(void))(*this[90] + 484))(); v3 = (char *)sub_4090F0(-283118318); v4 = sub_7549E0(v3, v2); v5 = sub_462C30(2, v4); v1[95] = v5; (**((void (__stdcall ***)(int))v5 + 58))((int)(v1 + 58)); sub_6B0B40((float *)v1[88], v1[87]); result = *v1[88]; *(_WORD *)(result + 28) &= 0xFFFEu; return result; } //----- (00417F90) -------------------------------------------------------- _DWORD *__thiscall sub_417F90(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST18_4 void *v4; // eax size_t v5; // ST08_4 v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ClassChangeWin::`vftable'; v1[58] = &ClassChangeWin::`vftable'; v1[97] = 37; v1[96] = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; v1[99] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[97]; v1[98] = v2; memset(v2, 0, v3); v1[96] = &NiTMap>::`vftable'; v1[101] = 37; v1[100] = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; v1[103] = 0; v4 = operator new[](0x94u); v5 = 4 * v1[101]; v1[102] = v4; memset(v4, 0, v5); v1[100] = &NiTMap>::`vftable'; v1[86] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[87] = 0; v1[88] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AA230: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9AA25C: using guessed type void *NiTMap>::`vftable'; // 9AA27C: using guessed type void *ClassChangeWin::`vftable'; // 9AA29C: using guessed type void *ClassChangeWin::`vftable'; //----- (004180D0) -------------------------------------------------------- char __thiscall sub_4180D0(volatile LONG **this, void *a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // edi int v13; // ebx char *v14; // eax float *v15; // ebx int v16; // eax float *v17; // eax float v18; // edx unsigned int v19; // ecx double v20; // st7 float *v21; // edx double v22; // st7 int v23; // edi char *v24; // eax float *v25; // edi int v26; // eax float *v27; // eax int *v28; // ecx float *v29; // eax float v30; // edx float v31; // ecx double v32; // st7 float v33; // ecx float v34; // edx volatile LONG *v35; // edi char v36; // ST1C_1 int v37; // ST20_4 int v38; // ST24_4 int v39; // ST28_4 const CHAR *v40; // ST10_4 int v41; // ST0C_4 int v42; // eax volatile LONG *v43; // edi char v44; // ST1C_1 int v45; // ST20_4 int v46; // ST24_4 int v47; // ST28_4 const CHAR *v48; // ST10_4 int v49; // ST0C_4 int v50; // eax char v51; // ST1C_1 int v52; // ST20_4 int v53; // ST24_4 int v54; // ST28_4 const CHAR *v55; // eax char v56; // ST24_1 int v57; // ST28_4 int v58; // ST2C_4 int v59; // ST30_4 const CHAR *v60; // eax char v61; // ST24_1 int v62; // ST28_4 int v63; // ST2C_4 int v64; // ST30_4 const CHAR *v65; // eax double v66; // st6 double v67; // st3 signed int v68; // edi double v69; // st3 signed int v70; // edx double v71; // st7 signed int v72; // eax volatile LONG *v73; // eax double v74; // st6 double v75; // st6 double v76; // st5 double v77; // st4 double v78; // st3 signed int v79; // edi double v80; // st3 signed int v81; // edx double v82; // st7 signed int v83; // eax double v84; // rt2 double v85; // st4 double v86; // st6 volatile LONG *v87; // eax double v88; // st6 double v89; // st6 double v90; // st5 double v91; // st4 double v92; // st3 signed int v93; // edi double v94; // st3 signed int v95; // edx double v96; // st7 signed int v97; // eax double v98; // rt0 double v99; // st4 double v100; // st6 volatile LONG *v101; // eax double v102; // st6 double v103; // st6 double v104; // st5 double v105; // st4 double v106; // st3 signed int v107; // edi double v108; // st3 signed int v109; // edx double v110; // st7 signed int v111; // eax double v112; // rt2 double v113; // st4 double v114; // st6 volatile LONG *v115; // eax char v116; // ST24_1 int v117; // ST28_4 int v118; // ST2C_4 int v119; // ST30_4 const CHAR *v120; // eax volatile LONG *v121; // edi volatile LONG *v122; // eax volatile LONG *v123; // edi volatile LONG v124; // ebx const CHAR *v125; // eax char v126; // ST28_1 int v127; // ST2C_4 int v128; // ST30_4 int v129; // ST34_4 const CHAR *v130; // eax volatile LONG **v131; // eax int v132; // eax volatile LONG *v133; // eax volatile LONG v134; // ebx volatile LONG *v135; // edi int v136; // eax int v137; // eax float v138; // ecx volatile LONG *v139; // eax float v140; // ecx volatile LONG *v141; // eax float v142; // ecx volatile LONG *v143; // eax float v144; // ecx volatile LONG *v145; // eax float v146; // ecx volatile LONG *v147; // eax float v148; // ecx volatile LONG *v149; // eax float v150; // ecx volatile LONG *v151; // eax float v152; // ecx volatile LONG *v153; // eax float v154; // ecx volatile LONG *v155; // eax float v156; // ecx volatile LONG *v157; // eax float v158; // ecx volatile LONG *v159; // eax float v160; // ecx volatile LONG *v161; // eax float v162; // ecx volatile LONG *v163; // eax float v164; // ecx volatile LONG *v165; // eax float v166; // ecx volatile LONG *v167; // eax float v168; // ecx volatile LONG *v169; // eax float v170; // ecx volatile LONG *v171; // eax float v172; // ecx volatile LONG *v173; // eax float v174; // ecx volatile LONG *v175; // eax float v176; // ecx volatile LONG *v177; // eax float v178; // ecx volatile LONG *v179; // eax volatile LONG *v180; // eax void (__thiscall *v181)(volatile LONG **, int, int, _DWORD); // edx void (__thiscall ***v182)(_DWORD, signed int); // esi void (__thiscall ***v183)(_DWORD, signed int); // esi int v184; // [esp+30h] [ebp-5Ch] int v185[5]; // [esp+40h] [ebp-4Ch] float v186; // [esp+54h] [ebp-38h] float v187; // [esp+58h] [ebp-34h] float v188; // [esp+5Ch] [ebp-30h] float v189; // [esp+60h] [ebp-2Ch] __int64 v190; // [esp+64h] [ebp-28h] int v191; // [esp+6Ch] [ebp-20h] int v192; // [esp+70h] [ebp-1Ch] int v193; // [esp+74h] [ebp-18h] int v194; // [esp+78h] [ebp-14h] int v195; // [esp+7Ch] [ebp-10h] int v196; // [esp+88h] [ebp-4h] v2 = this; v195 = 0; v3 = dword_BA6BA0; v196 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ClassChangeWin.nif"); sub_8F66B0(v4, (int)&v195, v3); v5 = v195; if ( v195 ) { v8 = sub_8FB140(v195, (int)"Frame", (int)&v193, (int)&v194, 0); if ( sub_8F1440(v2, 0, 0, (int)v8, 0, (int)a2, (int)"ClassChageWin", 0) ) { sub_456260(v185); LOBYTE(v196) = 1; sub_455FF0(v185, (int)v2); sub_456000(v185, v193, v194); sub_456380(v185, v195); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v195, (int)"Theme", (int)&v193, (int)&v194, v10); else v11 = sub_8FB140(v195, (int)"Theme", (int)&v193, (int)&v194, 0); sub_8F3EB0(v193, v194, (int)v11, (int)v2, 0, 0); sub_456820(v185, (int)"Panel01", 0); sub_456820(v185, (int)"Panel02", 0); v12 = sub_456820(v185, (int)"ClassChangeImage", 0); v192 = 0; v13 = dword_BA6BA0; LOBYTE(v196) = 2; if ( !byte_ACAD5C ) sub_420410(); v14 = (char *)sub_401410(byte_ACA838, "ClassChangeWin_loop.nif"); sub_8F66B0(v14, (int)&v192, v13); v15 = (float *)operator new(0x44u); LOBYTE(v196) = 3; if ( v15 ) { v16 = sub_85BD60((void *)v192); v17 = sub_6B0A90(v15, v16); } else { v17 = 0; } v18 = *((float *)v12 + 23); v189 = *((float *)v12 + 22); v19 = *((_DWORD *)v12 + 24); v186 = -v189; v190 = __PAIR__(v19, LODWORD(v18)); v20 = v18; v21 = *(float **)v17; v21[22] = v186; v187 = -v20; v22 = *((float *)&v190 + 1); v21[23] = v187; v188 = v22; v21[24] = v188; LOBYTE(v196) = 2; *((_BYTE *)v17 + 65) = 1; sub_6B0B40(v17, v12); v2[87] = sub_456820(v185, (int)"ArrowIcon", 0); v23 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v24 = (char *)sub_401410(byte_ACA838, "ClassChangeWin_end.nif"); sub_8F66B0(v24, (int)&v192, v23); v25 = (float *)operator new(0x44u); LOBYTE(v196) = 4; if ( v25 ) { v26 = sub_85BD60((void *)v192); v27 = sub_6B0A90(v25, v26); } else { v27 = 0; } v28 = (int *)v2[87]; v2[88] = (volatile LONG *)v27; v29 = *(float **)v27; v189 = *((float *)v28 + 22); LODWORD(v30) = v28[23]; LODWORD(v31) = v28[24]; v186 = -v189; v190 = __PAIR__(LODWORD(v31), LODWORD(v30)); v187 = -v30; v32 = v31; v33 = v187; v29[22] = v186; v188 = v32; v34 = v188; v29[23] = v33; v29[24] = v34; *(_WORD *)(*v2[88] + 28) |= 1u; LOBYTE(v196) = 2; v35 = sub_456B30(v185, 0, "Ok", 0, 3); v36 = dword_AA8C68; v37 = dword_AA8C6C; v38 = dword_AA8C70; v39 = dword_AA8C74; v40 = sub_4090F0(-1293488187); v41 = (*(int (__thiscall **)(volatile LONG *))(*v35 + 148))(v35); v42 = (*(int (__thiscall **)(volatile LONG *))(*v35 + 144))(v35); sub_4561C0(v185, 0, 0, v42, v41, (int)v40, v35, 0, v36, v37, v38, v39, 5, 0, 0); v43 = sub_456B30(v185, 1, "Cancel", 0, 3); v44 = dword_AA8C68; v45 = dword_AA8C6C; v46 = dword_AA8C70; v47 = dword_AA8C74; v48 = sub_4090F0(-199282157); v49 = (*(int (__thiscall **)(volatile LONG *))(*v43 + 148))(v43); v50 = (*(int (__thiscall **)(volatile LONG *))(*v43 + 144))(v43); sub_4561C0(v185, 0, 0, v50, v49, (int)v48, v43, 0, v44, v45, v46, v47, 5, 0, 0); v51 = dword_AA8C68; v52 = dword_AA8C6C; v53 = dword_AA8C70; v54 = dword_AA8C74; v55 = sub_4090F0(1176565619); sub_4566A0(v185, (int)"CautionText", (int)v55, v51, v52, v53, v54, 5, 0, 0); v56 = dword_AA8C68; v57 = dword_AA8C6C; v58 = dword_AA8C70; v59 = dword_AA8C74; v60 = sub_4090F0(541916236); v2[89] = sub_456760(v185, (int)"ClassNameText01", (int)v60, v56, v57, v58, v59, 5); v61 = dword_AA8C68; v62 = dword_AA8C6C; v63 = dword_AA8C70; v64 = dword_AA8C74; v65 = sub_4090F0(524421640); v2[90] = sub_456760(v185, (int)"ClassNameText02", (int)v65, v61, v62, v63, v64, 5); sub_456B30(v185, 1, "Cls", 0, 3); sub_456820(v185, (int)"CopperBtn", 0); if ( *(float *)&dword_AA8C68 < 1.0 ) { if ( *(float *)&dword_AA8C68 > 0.0 ) { v66 = 0.0; v190 = (signed __int64)(*(float *)&dword_AA8C68 * 255.0 + 0.5); v191 = v190; } else { v66 = 0.0; v191 = 0; } } else { v66 = 0.0; v191 = 255; } v67 = *(float *)&dword_AA8C6C; if ( *(float *)&dword_AA8C6C < 1.0 ) { if ( v67 > v66 ) { v190 = (signed __int64)(v67 * 255.0 + 0.5); v68 = v190; } else { v68 = 0; } } else { v68 = 255; } v69 = *(float *)&dword_AA8C70; if ( *(float *)&dword_AA8C70 < 1.0 ) { if ( v69 > v66 ) { v190 = (signed __int64)(v69 * 255.0 + 0.5); v70 = v190; } else { v70 = 0; } } else { v70 = 255; } v71 = *(float *)&dword_AA8C74; if ( *(float *)&dword_AA8C74 < 1.0 ) { if ( v66 < v71 ) { v190 = (signed __int64)(v71 * 255.0 + 0.5); v72 = v190; } else { v72 = 0; } } else { v72 = 255; } v73 = sub_456A50( v185, (int)"CopperInput", (int)&unk_9A9E31, v70 | ((v68 | ((v191 | (v72 << 8)) << 8)) << 8), dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0, 0); v2[91] = v73; (*(void (__thiscall **)(volatile LONG *, signed int))(*v73 + 488))(v73, 6); sub_456820(v185, (int)"SilverBtn", 0); v74 = *(float *)&dword_AA8C68; if ( *(float *)&dword_AA8C68 < 1.0 ) { if ( v74 > 0.0 ) { v190 = (signed __int64)(v74 * 255.0 + 0.5); v191 = v190; v75 = 0.0; v77 = 255.0; v76 = 0.5; } else { v75 = 0.0; v191 = 0; v76 = 0.5; v77 = 255.0; } } else { v191 = 255; v75 = 0.0; v76 = 0.5; v77 = 255.0; } v78 = *(float *)&dword_AA8C6C; if ( *(float *)&dword_AA8C6C < 1.0 ) { if ( v78 > v75 ) { v190 = (signed __int64)(v78 * v77 + v76); v79 = v190; } else { v79 = 0; } } else { v79 = 255; } v80 = *(float *)&dword_AA8C70; if ( *(float *)&dword_AA8C70 < 1.0 ) { if ( v80 > v75 ) { v190 = (signed __int64)(v80 * v77 + v76); v81 = v190; } else { v81 = 0; } } else { v81 = 255; } v82 = *(float *)&dword_AA8C74; if ( *(float *)&dword_AA8C74 < 1.0 ) { v84 = v77; v85 = v75; v86 = v84; if ( v85 < v82 ) { v190 = (signed __int64)(v76 + v86 * v82); v83 = v190; } else { v83 = 0; } } else { v83 = 255; } v87 = sub_456A50( v185, (int)"SilverInput", (int)&unk_9A9E32, v81 | ((v79 | ((v191 | (v83 << 8)) << 8)) << 8), dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0, 0); v2[92] = v87; (*(void (__thiscall **)(volatile LONG *, signed int))(*v87 + 488))(v87, 6); sub_456820(v185, (int)"GoldBtn", 0); v88 = *(float *)&dword_AA8C68; if ( *(float *)&dword_AA8C68 < 1.0 ) { if ( v88 > 0.0 ) { v190 = (signed __int64)(v88 * 255.0 + 0.5); v191 = v190; v89 = 0.0; v91 = 255.0; v90 = 0.5; } else { v89 = 0.0; v191 = 0; v90 = 0.5; v91 = 255.0; } } else { v191 = 255; v89 = 0.0; v90 = 0.5; v91 = 255.0; } v92 = *(float *)&dword_AA8C6C; if ( *(float *)&dword_AA8C6C < 1.0 ) { if ( v92 > v89 ) { v190 = (signed __int64)(v92 * v91 + v90); v93 = v190; } else { v93 = 0; } } else { v93 = 255; } v94 = *(float *)&dword_AA8C70; if ( *(float *)&dword_AA8C70 < 1.0 ) { if ( v94 > v89 ) { v190 = (signed __int64)(v94 * v91 + v90); v95 = v190; } else { v95 = 0; } } else { v95 = 255; } v96 = *(float *)&dword_AA8C74; if ( *(float *)&dword_AA8C74 < 1.0 ) { v98 = v91; v99 = v89; v100 = v98; if ( v99 < v96 ) { v190 = (signed __int64)(v90 + v100 * v96); v97 = v190; } else { v97 = 0; } } else { v97 = 255; } v101 = sub_456A50( v185, (int)"GoldInput", (int)&unk_9A9E33, v95 | ((v93 | ((v191 | (v97 << 8)) << 8)) << 8), dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0, 0); v2[93] = v101; (*(void (__thiscall **)(volatile LONG *, signed int))(*v101 + 488))(v101, 6); sub_456820(v185, (int)"GemBtn", 0); v102 = *(float *)&dword_AA8C68; if ( *(float *)&dword_AA8C68 < 1.0 ) { if ( v102 > 0.0 ) { v190 = (signed __int64)(v102 * 255.0 + 0.5); v191 = v190; v103 = 0.0; v105 = 255.0; v104 = 0.5; } else { v103 = 0.0; v191 = 0; v104 = 0.5; v105 = 255.0; } } else { v191 = 255; v103 = 0.0; v104 = 0.5; v105 = 255.0; } v106 = *(float *)&dword_AA8C6C; if ( *(float *)&dword_AA8C6C < 1.0 ) { if ( v106 > v103 ) { v190 = (signed __int64)(v106 * v105 + v104); v107 = v190; } else { v107 = 0; } } else { v107 = 255; } v108 = *(float *)&dword_AA8C70; if ( *(float *)&dword_AA8C70 < 1.0 ) { if ( v108 > v103 ) { v190 = (signed __int64)(v108 * v105 + v104); v109 = v190; } else { v109 = 0; } } else { v109 = 255; } v110 = *(float *)&dword_AA8C74; if ( *(float *)&dword_AA8C74 < 1.0 ) { v112 = v105; v113 = v103; v114 = v112; if ( v113 < v110 ) { v190 = (signed __int64)(v104 + v114 * v110); v111 = v190; } else { v111 = 0; } } else { v111 = 255; } v115 = sub_456A50( v185, (int)"GemInput", (int)&unk_9A9E4D, v109 | ((v107 | ((v191 | (v111 << 8)) << 8)) << 8), dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0, 0); v2[94] = v115; (*(void (__thiscall **)(volatile LONG *, signed int))(*v115 + 488))(v115, 6); sub_456820(v185, (int)"IconSlot", 0); v116 = dword_AA8C68; v117 = dword_AA8C6C; v118 = dword_AA8C70; v119 = dword_AA8C74; v120 = sub_4090F0(1759290792); sub_456760(v185, (int)"RecompenseText", (int)v120, v116, v117, v118, v119, 5); v121 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v195 + 72))("HelpLinkNor") ) sub_4563D0(v185, 3, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v121); v122 = sub_456980( v185, (int)"Text01", (int)&unk_9A9E4E, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0, 0, 0); v123 = v122; v124 = *v122; v125 = sub_4090F0(-1681084710); (*(void (__thiscall **)(volatile LONG *, const CHAR *, _DWORD, int))(v124 + 480))(v123, v125, 0, v184); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v123 + 240))(v123, 0); v126 = dword_AA8C68; v127 = dword_AA8C6C; v128 = dword_AA8C70; v129 = dword_AA8C74; v130 = sub_4090F0(-1144382917); sub_456760(v185, (int)"WinTitle", (int)v130, v126, v127, v128, v129, 5); v131 = sub_8FB140(v195, (int)"SlideBar_SlideBtnMiddle", (int)&v193, (int)&v194, 0); v132 = sub_464310(v195, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v131, 0, v2); v2[86] = (volatile LONG *)v132; *(_DWORD *)(v132 + 312) = 2; *((_DWORD *)v2[86] + 76) = 1; v133 = v2[86]; v134 = *v133; v135 = v2[86]; v136 = (*(int (__thiscall **)(volatile LONG *))(*v133 + 168))(v2[86]); v137 = (*(int (__thiscall **)(volatile LONG *, int))(*v135 + 164))(v135, v136); (*(void (__thiscall **)(volatile LONG *, int))(v134 + 308))(v2[86], v137 - 18); *(float *)&v184 = v138; *(float *)&v139 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemAssassin", 0)); v184 = (int)v139; if ( *(float *)&v139 != 0.0 ) InterlockedIncrement(v139 + 1); sub_419BB0(v2 + 96, 25, v184); *(float *)&v184 = v140; *(float *)&v141 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemCloser", 0)); v184 = (int)v141; if ( *(float *)&v141 != 0.0 ) InterlockedIncrement(v141 + 1); sub_419BB0(v2 + 96, 24, v184); *(float *)&v184 = v142; *(float *)&v143 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemGladiator", 0)); v184 = (int)v143; if ( *(float *)&v143 != 0.0 ) InterlockedIncrement(v143 + 1); sub_419BB0(v2 + 96, 4, v184); *(float *)&v184 = v144; *(float *)&v145 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemGuardian", 0)); v184 = (int)v145; if ( *(float *)&v145 != 0.0 ) InterlockedIncrement(v145 + 1); sub_419BB0(v2 + 96, 10, v184); *(float *)&v184 = v146; *(float *)&v147 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemHolyknight", 0)); v184 = (int)v147; if ( *(float *)&v147 != 0.0 ) InterlockedIncrement(v147 + 1); sub_419BB0(v2 + 96, 9, v184); *(float *)&v184 = v148; *(float *)&v149 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemKnight", 0)); v184 = (int)v149; if ( *(float *)&v149 != 0.0 ) InterlockedIncrement(v149 + 1); sub_419BB0(v2 + 96, 5, v184); *(float *)&v184 = v150; *(float *)&v151 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemRanger", 0)); v184 = (int)v151; if ( *(float *)&v151 != 0.0 ) InterlockedIncrement(v151 + 1); sub_419BB0(v2 + 96, 15, v184); *(float *)&v184 = v152; *(float *)&v153 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemSentinel", 0)); v184 = (int)v153; if ( *(float *)&v153 != 0.0 ) InterlockedIncrement(v153 + 1); sub_419BB0(v2 + 96, 26, v184); *(float *)&v184 = v154; *(float *)&v155 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemSharpshooter", 0)); v184 = (int)v155; if ( *(float *)&v155 != 0.0 ) InterlockedIncrement(v155 + 1); sub_419BB0(v2 + 96, 14, v184); *(float *)&v184 = v156; *(float *)&v157 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemWarlock", 0)); v184 = (int)v157; if ( *(float *)&v157 != 0.0 ) InterlockedIncrement(v157 + 1); sub_419BB0(v2 + 96, 19, v184); *(float *)&v184 = v158; *(float *)&v159 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemWizard", 0)); v184 = (int)v159; if ( *(float *)&v159 != 0.0 ) InterlockedIncrement(v159 + 1); sub_419BB0(v2 + 96, 20, v184); *(float *)&v184 = v160; *(float *)&v161 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemAssassin01", 0)); v184 = (int)v161; if ( *(float *)&v161 != 0.0 ) InterlockedIncrement(v161 + 1); sub_419BB0(v2 + 100, 25, v184); *(float *)&v184 = v162; *(float *)&v163 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemCloser01", 0)); v184 = (int)v163; if ( *(float *)&v163 != 0.0 ) InterlockedIncrement(v163 + 1); sub_419BB0(v2 + 100, 24, v184); *(float *)&v184 = v164; *(float *)&v165 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemGladiator01", 0)); v184 = (int)v165; if ( *(float *)&v165 != 0.0 ) InterlockedIncrement(v165 + 1); sub_419BB0(v2 + 100, 4, v184); *(float *)&v184 = v166; *(float *)&v167 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemGuardian01", 0)); v184 = (int)v167; if ( *(float *)&v167 != 0.0 ) InterlockedIncrement(v167 + 1); sub_419BB0(v2 + 100, 10, v184); *(float *)&v184 = v168; *(float *)&v169 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemHolyknight01", 0)); v184 = (int)v169; if ( *(float *)&v169 != 0.0 ) InterlockedIncrement(v169 + 1); sub_419BB0(v2 + 100, 9, v184); *(float *)&v184 = v170; *(float *)&v171 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemKnight01", 0)); v184 = (int)v171; if ( *(float *)&v171 != 0.0 ) InterlockedIncrement(v171 + 1); sub_419BB0(v2 + 100, 5, v184); *(float *)&v184 = v172; *(float *)&v173 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemRanger01", 0)); v184 = (int)v173; if ( *(float *)&v173 != 0.0 ) InterlockedIncrement(v173 + 1); sub_419BB0(v2 + 100, 15, v184); *(float *)&v184 = v174; *(float *)&v175 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemSentinel01", 0)); v184 = (int)v175; if ( *(float *)&v175 != 0.0 ) InterlockedIncrement(v175 + 1); sub_419BB0(v2 + 100, 26, v184); *(float *)&v184 = v176; *(float *)&v177 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemSharpshooter01", 0)); v184 = (int)v177; if ( *(float *)&v177 != 0.0 ) InterlockedIncrement(v177 + 1); sub_419BB0(v2 + 100, 14, v184); *(float *)&v184 = v178; *(float *)&v179 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemWarlock01", 0)); v184 = (int)v179; if ( *(float *)&v179 != 0.0 ) InterlockedIncrement(v179 + 1); sub_419BB0(v2 + 100, 19, v184); *(float *)&v180 = COERCE_FLOAT(sub_456820(v185, (int)"ClassEmblemWizard01", 0)); v184 = (int)v180; if ( *(float *)&v180 != 0.0 ) InterlockedIncrement(v180 + 1); sub_419BB0(v2 + 100, 20, v184); v181 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD))*((_DWORD *)*v2 + 59); *(float *)&v184 = 0.5; v181(v2, xRight, dword_AC2F78, 0.5); LOBYTE(v196) = 1; if ( v192 ) { v182 = (void (__thiscall ***)(_DWORD, signed int))v192; if ( !InterlockedDecrement((volatile LONG *)(v192 + 4)) ) { if ( v182 ) (**v182)(v182, 1); } } LOBYTE(v196) = 0; sub_4562E0(v185); v183 = (void (__thiscall ***)(_DWORD, signed int))v195; v196 = -1; if ( v195 && !InterlockedDecrement((volatile LONG *)(v195 + 4)) && v183 ) (**v183)(v183, 1); result = 1; } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v195; v196 = -1; if ( v195 && !InterlockedDecrement((volatile LONG *)(v195 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } } else { if ( off_AC0554 ) { off_AC0554("ClassChangeWin load fail", "LoadFail", 0); v5 = v195; } v196 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00419410) -------------------------------------------------------- char __thiscall sub_419410(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 ) { if ( a2 == 1 ) { LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, this); } else { LOBYTE(v3) = a2 - 3; if ( a2 == 3 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "ClassChangeWin"); } } } else { LOBYTE(v3) = sub_417F20((_DWORD **)this); } return (char)v3; } //----- (00419460) -------------------------------------------------------- LONG __thiscall sub_419460(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx int v6; // eax unsigned int v7; // edx _DWORD *v8; // edi unsigned int v9; // eax _DWORD *v10; // ecx int v11; // eax unsigned __int8 v12; // al int v13; // esi int v14; // eax const CHAR *v15; // eax int v16; // eax const CHAR *v17; // eax int v18; // esi LONG result; // eax int v20; // [esp+0h] [ebp-30h] _DWORD *v21; // [esp+10h] [ebp-20h] _DWORD *v22; // [esp+14h] [ebp-1Ch] int v23; // [esp+18h] [ebp-18h] int v24; // [esp+1Ch] [ebp-14h] char v25; // [esp+23h] [ebp-Dh] int v26; // [esp+2Ch] [ebp-4h] v22 = this; v24 = 0; v2 = this + 96; v3 = this[97]; v4 = 0; v26 = 0; v21 = v2; if ( v3 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } v6 = *(_DWORD *)(v2[2] + 4 * v4); } else { LABEL_5: v6 = 0; } v23 = v6; while ( v23 ) { sub_419D70(v2, (unsigned int)&v23, &v25, &v24); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v24 + 256))(0); } v7 = v22[101]; v8 = v22 + 100; v9 = 0; if ( v7 <= 0 ) { LABEL_12: v11 = 0; } else { v10 = (_DWORD *)v22[102]; while ( !*v10 ) { ++v9; ++v10; if ( v9 >= v7 ) goto LABEL_12; } v11 = *(_DWORD *)(v22[102] + 4 * v9); } v23 = v11; while ( v23 ) { sub_419D70(v8, (unsigned int)&v23, &v25, &v24); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v24 + 256))(0); } v12 = sub_652070(dword_AD8EBC); v13 = v12; LOBYTE(v23) = v12; v14 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v12); if ( v14 ) v15 = (const CHAR *)(v14 + 21); else v15 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v22[89] + 472))(v15); v16 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (unsigned __int8)a2); if ( v16 ) v17 = (const CHAR *)(v16 + 21); else v17 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v22[90] + 472))(v17); switch ( v13 ) { case 26: case 27: sub_419CE0(v21, 26, &v24); (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v24 + 256))(1, v20); sub_419CE0(v8, 26, &v24); break; default: sub_419CE0(v21, v23, &v24); (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v24 + 256))(1, v20); sub_419CE0(v8, a2, &v24); break; } v18 = v24; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v24 + 256))(v24, 1); v26 = -1; result = InterlockedDecrement((volatile LONG *)(v18 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v18)(v18, 1); return result; } // AC9C84: using guessed type int dword_AC9C84; //----- (004196A0) -------------------------------------------------------- volatile LONG *__cdecl sub_4196A0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_417F90(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004197D0) -------------------------------------------------------- signed int __stdcall sub_4197D0(int *a1) { int v1; // esi int v2; // eax _DWORD **v3; // ecx void *v4; // esi int v5; // eax int v7; // esi __int64 v8; // kr00_8 char v9; // al signed int v10; // eax bool v11; // cf v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v1 ) return 13952; v2 = sub_419E20(39); if ( !v2 ) goto LABEL_19; v3 = *(_DWORD ***)(v1 + 716); if ( !v3 ) goto LABEL_19; v4 = (void *)(v2 + 2); if ( v2 == -2 ) goto LABEL_19; v5 = sub_53D4D0(v3, (void *)(v2 + 2)); *a1 = v5; if ( v5 >= 192 ) return 13956; v7 = sub_40C8D0(v4); if ( v7 ) { if ( *(_DWORD *)(v7 + 127) > (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) ) return 13954; v8 = sub_6622F0(*(_DWORD *)(v7 + 207)); v9 = sub_652070(dword_AD8EBC); if ( !sub_419A10(v8, v9) ) return 13954; } LABEL_19: v10 = 0; v11 = 1; while ( !v11 || !dword_ADA534[v10] ) { v11 = (unsigned int)++v10 < 0x1E; if ( v10 >= 30 ) return 13952; } return 13957; } // ADA534: using guessed type int dword_ADA534[]; //----- (004198C0) -------------------------------------------------------- void __stdcall sub_4198C0(int a1, _DWORD *a2, int a3) { _DWORD *v3; // esi int v4; // esi const CHAR *v5; // eax int v6; // [esp+4h] [ebp-4h] if ( a1 == 27 ) { if ( a2 ) { if ( !*a2 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v6 = 192; switch ( (unsigned __int16)sub_4197D0(&v6) ) { case 0x3680u: v4 = dword_AB7F34[dword_AB7F30]; if ( v4 ) { LOWORD(a2) = 12382; sub_905F90(v4, &a2, 2u); HIBYTE(a1) = v6; sub_906000(v4, (char *)&a1 + 3, 1u); } return; case 0x3682u: v5 = sub_4090F0(1420051551); goto LABEL_11; case 0x3684u: v5 = sub_4090F0(127813735); goto LABEL_11; case 0x3685u: v5 = sub_4090F0(1402624100); LABEL_11: sub_492060(v3, (int)v5); break; default: return; } } } } } } // AB7F30: using guessed type int dword_AB7F30; //----- (004199B0) -------------------------------------------------------- unsigned int __thiscall sub_4199B0(_DWORD *this, unsigned __int8 a2) { return (unsigned int)a2 % this[1]; } //----- (004199D0) -------------------------------------------------------- BOOL __stdcall sub_4199D0(char a1, char a2) { return a1 == a2; } //----- (004199F0) -------------------------------------------------------- char *sub_4199F0() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA838; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00419A10) -------------------------------------------------------- bool __cdecl sub_419A10(__int64 a1, char a2) { return (a1 & (1i64 << a2)) != 0; } //----- (00419A40) -------------------------------------------------------- int sub_419A40() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_AC9CE0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // AC9CE0: using guessed type int dword_AC9CE0; //----- (00419A80) -------------------------------------------------------- void __thiscall sub_419A80(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9AA230: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9AA25C: using guessed type void *NiTMap>::`vftable'; //----- (00419AF0) -------------------------------------------------------- void **__thiscall sub_419AF0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AA230: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; //----- (00419B30) -------------------------------------------------------- void **__thiscall sub_419B30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AA230: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9AA25C: using guessed type void *NiTMap>::`vftable'; //----- (00419BB0) -------------------------------------------------------- LONG __thiscall sub_419BB0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int (__thiscall *v4)(_DWORD *, int); // edx int v5; // ebx int *v6; // edi _DWORD *v7; // edi LONG result; // eax int v9; // [esp+0h] [ebp-20h] int *v10; // [esp+10h] [ebp-10h] int v11; // [esp+1Ch] [ebp-4h] v3 = this; v4 = *(int (__thiscall **)(_DWORD *, int))(*this + 4); v11 = 0; v5 = v4(this, a2); v6 = *(int **)(v3[2] + 4 * v5); if ( v6 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, *((unsigned __int8 *)v6 + 4)) ) { v6 = (int *)*v6; if ( !v6 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, int *, int))(*v3 + 16))(v3, v6, v9); v9 = a3; v10 = &v9; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, int *, int))(*v3 + 12))(v3, v6, a2); } else { LABEL_4: v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, int))(*v3 + 20))(v3, v9); v9 = a3; v10 = &v9; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 12))(v3, v7, a2); *v7 = *(_DWORD *)(v3[2] + 4 * v5); *(_DWORD *)(v3[2] + 4 * v5) = v7; ++v3[3]; } result = a3; v11 = -1; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); if ( !result ) { if ( a3 ) result = (**(int (__thiscall ***)(int, signed int))a3)(a3, 1); } } return result; } //----- (00419CE0) -------------------------------------------------------- char __thiscall sub_419CE0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi int **v4; // esi int v6; // edi int *v7; // esi v3 = this; v4 = *(int ***)(this[2] + 4 * (*(int (__stdcall **)(int))(*this + 4))(a2)); if ( !v4 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, *((unsigned __int8 *)v4 + 4)) ) { v4 = (int **)*v4; if ( !v4 ) return 0; } v6 = *a3; if ( (int *)*a3 != v4[2] ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v4[2]; *a3 = (int)v7; if ( v7 ) InterlockedIncrement(v7 + 1); } return 1; } //----- (00419D70) -------------------------------------------------------- unsigned int __thiscall sub_419D70(_DWORD *this, unsigned int a2, _BYTE *a3, int *a4) { int v4; // esi _DWORD *v5; // ebx int v6; // edi int v7; // eax unsigned int result; // eax int v9; // eax unsigned int v10; // edx _DWORD *v11; // ecx v4 = *(_DWORD *)a2; v5 = this; *a3 = *(_BYTE *)(*(_DWORD *)a2 + 4); v6 = *a4; if ( *a4 != *(_DWORD *)(v4 + 8) ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = *(_DWORD *)(v4 + 8); *a4 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } result = *(_DWORD *)v4; if ( *(_DWORD *)v4 ) { *(_DWORD *)a2 = result; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v5 + 4))(v5, *(unsigned __int8 *)(v4 + 4)); v10 = v5[1]; result = v9 + 1; if ( result >= v10 ) { LABEL_14: result = a2; *(_DWORD *)a2 = 0; } else { v11 = (_DWORD *)(v5[2] + 4 * result); while ( !*v11 ) { ++result; ++v11; if ( result >= v10 ) goto LABEL_14; } *(_DWORD *)a2 = *v11; } } return result; } //----- (00419E20) -------------------------------------------------------- int __cdecl sub_419E20(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_419A40() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v1) + 36) != a1 ) { if ( ++v1 >= sub_419A40() ) return 0; } return sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v1); } // AC9CE0: using guessed type int dword_AC9CE0; //----- (00419E70) -------------------------------------------------------- void *__thiscall sub_419E70(void *this, char a2) { void *v2; // esi v2 = this; sub_417E50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00419EE0) -------------------------------------------------------- float *__cdecl sub_419EE0(float *a1, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { float *result; // eax result = a1; *a1 = (double)a2 / 255.0; a1[1] = (double)a3 / 255.0; a1[2] = (double)a4 / 255.0; a1[3] = (double)a5 / 255.0; return result; } //----- (0041A140) -------------------------------------------------------- void (__stdcall ***__thiscall sub_41A140(_DWORD *this))(_DWORD, void *, int *) { _DWORD *v1; // esi void (__stdcall ***result)(_DWORD, void *, int *); // eax int v3; // eax char v4; // [esp+8h] [ebp-8h] int v5; // [esp+Ch] [ebp-4h] v1 = this; result = (void (__stdcall ***)(_DWORD, void *, int *))this[1]; v5 = 0; if ( result && this[3] ) { (**result)(result, &unk_A200AC, &v5); (*(void (__stdcall **)(_DWORD, signed int, char *))(*(_DWORD *)v1[3] + 36))(v1[3], -1, &v4); (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v5 + 76))(v5, 0); (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); v3 = v1[2]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))(v1[2]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[3] + 8))(v1[3]); result = (void (__stdcall ***)(_DWORD, void *, int *))(*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[1] + 8))(v1[1]); v1[2] = 0; v1[3] = 0; v1[1] = 0; } return result; } //----- (0041A230) -------------------------------------------------------- int __thiscall sub_41A230(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // eax char v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v1 = this; result = this[2]; v5 = 0; if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)result + 36))(result); (**(void (__stdcall ***)(_DWORD, void *, int *))v1[1])(v1[1], &unk_A200AC, &v5); result = v5; if ( v5 ) { (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v5 + 76))(v5, 0); (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); v3 = v1[3]; if ( v3 ) (*(void (__stdcall **)(int, signed int, char *))(*(_DWORD *)v3 + 36))(v3, -1, &v4); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[2] + 8))(v1[2]); v1[2] = 0; } } return result; } //----- (0041A370) -------------------------------------------------------- void *__thiscall sub_41A370(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &DShowMovie::`vftable'; sub_41A140(this); CoUninitialize(); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AA4D4: using guessed type void *DShowMovie::`vftable'; //----- (0041A3A0) -------------------------------------------------------- _DWORD *__cdecl sub_41A3A0(int a1, int a2, char *Src, int a4) { return sub_8B98B0(Src, a4); } //----- (0041A3C0) -------------------------------------------------------- BOOL __cdecl sub_41A3C0(int a1, int a2, int a3, int a4, int a5, void ***a6) { *a6 = 0; return sub_8B8D30(a2, a3, a4, a5, a6); } //----- (0041A3F0) -------------------------------------------------------- bool __cdecl sub_41A3F0(int a1, int a2, int a3, int a4, int a5, int *a6) { *a6 = 0; return sub_8C4670(a2, a3, a4, a5, a6); } //----- (0041A450) -------------------------------------------------------- char sub_41A450() { void (__thiscall ***v0)(_DWORD, signed int); // esi void (__thiscall ***v1)(_DWORD, signed int); // esi if ( dword_AC9CE4 ) { v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE4; if ( !InterlockedDecrement((volatile LONG *)(dword_AC9CE4 + 4)) && v0 ) (**v0)(v0, 1); dword_AC9CE4 = 0; } v1 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE8; if ( dword_AC9CE8 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_AC9CE8 + 4)) && v1 ) (**v1)(v1, 1); dword_AC9CE8 = 0; } sub_8D1380(); sub_8D1050(); sub_8D0E80(); sub_940360(&off_AC20E4); return 0; } // AC20E4: using guessed type void **off_AC20E4; // AC9CE4: using guessed type int dword_AC9CE4; // AC9CE8: using guessed type int dword_AC9CE8; //----- (0041A4D0) -------------------------------------------------------- char __cdecl sub_41A4D0(int a1) { char *v1; // ST18_4 _DWORD *v2; // eax int v3; // eax char v4; // cl _DWORD *v5; // eax char v6; // cl _DWORD *v7; // eax _DWORD *v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi int v11; // esi CHAR *v12; // eax float *v13; // eax float *v14; // esi int v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // edi float *v17; // eax char *v19; // [esp+20h] [ebp-118h] int v20; // [esp+24h] [ebp-114h] char v21[256]; // [esp+28h] [ebp-110h] int v22; // [esp+134h] [ebp-4h] sub_863440((int)sub_41A3A0); sub_863420((int)sub_41A3C0); if ( !byte_ACAD5C ) sub_420410(); v1 = (char *)sub_401410(byte_ACAC58, "shader\\"); v2 = (_DWORD *)sub_916E70(); sub_917970(v2, v1); if ( !byte_ACAD5C ) sub_420410(); v3 = 0; do { v4 = byte_ACAC58[v3]; v21[v3++] = v4; } while ( v4 ); v5 = (int *)((char *)&v20 + 3); do { v6 = *((_BYTE *)v5 + 1); v5 = (_DWORD *)((char *)v5 + 1); } while ( v6 ); *v5 = 1684105331; v5[1] = (char *)&loc_5C7263 + 2; v19 = v21; v20 = 0; sub_8635D0(0, (int)v21, 1); if ( !sub_863550(0, 1, (int)&v19, 1) ) MessageBoxA(0, "Shader Loading Error", "Error", 0); sub_863420((int)sub_41A3F0); if ( !sub_863550(0, 1, (int)&v19, 1) ) MessageBoxA(0, "Shader Loading Error", "Error", 0); v7 = operator new(0x44u); v22 = 0; if ( v7 ) v8 = sub_8D1AE0(v7); else v8 = 0; v9 = dword_AC9CE4; v22 = -1; if ( (_DWORD *)dword_AC9CE4 != v8 ) { if ( dword_AC9CE4 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE4; if ( !InterlockedDecrement((volatile LONG *)(dword_AC9CE4 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v9 = (int)v8; dword_AC9CE4 = (int)v8; if ( v8 ) { InterlockedIncrement(v8 + 1); v9 = dword_AC9CE4; } } if ( !byte_ACAD5C ) { sub_420410(); v9 = dword_AC9CE4; } v11 = v9; v12 = (CHAR *)sub_401410(byte_ACAC58, "shader\\"); sub_4018E0((_DWORD *)(v11 + 40), v12, strlen(v12)); v13 = (float *)operator new(0x38u); v22 = 1; if ( v13 ) v14 = sub_8D2550(v13); else v14 = 0; v15 = dword_AC9CE8; v22 = -1; if ( (float *)dword_AC9CE8 != v14 ) { if ( dword_AC9CE8 ) { v16 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE8; if ( !InterlockedDecrement((volatile LONG *)(dword_AC9CE8 + 4)) ) { if ( v16 ) (**v16)(v16, 1); } } v15 = (int)v14; dword_AC9CE8 = (int)v14; if ( v14 ) { InterlockedIncrement((volatile LONG *)v14 + 1); v15 = dword_AC9CE8; } } *(float *)(v15 + 16) = 40.0; *(float *)(dword_AC9CE8 + 20) = 800.0; *(_BYTE *)(dword_AC9CE8 + 24) = 0; *(_BYTE *)(dword_AC9CE8 + 25) = 1; *(_BYTE *)(dword_AC9CE8 + 26) = 1; v17 = (float *)dword_AC9CE8; *(float *)(dword_AC9CE8 + 28) = 0.0; v17[8] = 0.0; v17[9] = 0.0; v17[10] = 0.80000001; *(float *)(dword_AC9CE8 + 44) = 0.0017500001; *(float *)(dword_AC9CE8 + 48) = 800.0; *(_DWORD *)(dword_AC9CE8 + 52) = a1; sub_8D20B0((_BYTE *)dword_AC9CE4, dword_BA46D0, 20); sub_8D1710((_DWORD *)dword_AC9CE4, dword_AC9CE8); return 1; } // AC9CE4: using guessed type int dword_AC9CE4; // AC9CE8: using guessed type int dword_AC9CE8; // ACAD5C: using guessed type char byte_ACAD5C; // BA46D0: using guessed type int dword_BA46D0; // 41A4D0: using guessed type char var_110[256]; //----- (0041A820) -------------------------------------------------------- char *sub_41A820() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACAC58; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0041A850) -------------------------------------------------------- const char *__cdecl sub_41A850(signed int a1) { int v1; // esi const char *result; // eax char *v3; // eax __int16 v4; // ax _DWORD *v5; // eax const CHAR *v6; // eax void *v7; // [esp-1Ch] [ebp-20h] int v8; // [esp-18h] [ebp-1Ch] int v9; // [esp-14h] [ebp-18h] int v10; // [esp-10h] [ebp-14h] int v11; // [esp-Ch] [ebp-10h] int v12; // [esp-8h] [ebp-Ch] int v13; // [esp-4h] [ebp-8h] v1 = 0; if ( a1 <= 844 ) { if ( a1 == 844 ) return sub_40A910(-1057409271); switch ( a1 ) { case 66: result = sub_40C190(-1796740911); break; case 67: result = "DB error"; break; case 68: result = sub_40C190(-924311786); break; case 69: result = sub_40C190(908598815); break; case 70: result = "DB error"; break; case 71: result = sub_40C190(-567076595); break; case 72: result = sub_40C190(624368395); break; case 73: result = sub_40C190(2122829971); break; case 74: result = sub_40C190(763200074); break; case 75: result = sub_40C190(556229229); break; case 81: result = sub_40C190(-1686213544); break; default: goto LABEL_468; } return result; } if ( a1 <= 6977 ) { if ( a1 == 6977 ) return sub_40A910(1225826518); if ( a1 > 4801 ) { if ( a1 > 5313 ) { if ( a1 > 5761 ) { if ( a1 > 6594 ) { switch ( a1 ) { case 6595: result = sub_40C190(1369557409); break; case 6596: result = sub_40C190(1639413929); break; case 6722: case 6746: result = sub_40C190(-822552364); break; case 6723: case 6747: LABEL_184: result = sub_40C190(472516993); break; case 6727: case 6728: case 6729: result = sub_40A910(-684457189); break; case 6730: case 6731: case 6754: case 6755: result = sub_40A910(-1947609637); break; case 6732: result = sub_40A910(1105048501); break; case 6733: case 6734: case 6735: result = sub_40A910(1910959874); break; case 6751: case 6752: case 6753: result = sub_40A910(981165937); break; case 6756: result = sub_40A910(-1541138677); break; case 6769: case 6781: result = sub_40A910(141119623); break; case 6770: result = sub_40A910(1952536033); break; case 6771: result = sub_40A910(74535308); break; case 6772: result = sub_40A910(1735679610); break; case 6773: result = sub_40A910(438240653); break; case 6774: result = sub_40A910(287774772); break; case 6776: result = sub_40A910(288557188); break; case 6777: result = sub_40A910(-1161054964); break; case 6778: result = sub_40A910(136580154); break; case 6779: result = sub_40A910(-819852988); break; case 6780: result = sub_40A910(-858802375); break; default: goto LABEL_468; } return result; } if ( a1 == 6594 ) return sub_40C190(1369601441); switch ( a1 ) { case 5762: return sub_40C190(-622853334); case 5763: return sub_40C190(455158691); case 5764: return sub_40C190(337602958); case 5765: return sub_40C190(1031892884); case 5766: goto LABEL_184; case 5767: return sub_40C190(-1463902414); case 5768: return sub_40C190(-724098268); case 5769: return sub_40C190(-1479362343); case 5770: return sub_40C190(-1850697250); case 5771: return sub_40C190(-1077957084); case 5772: return sub_40C190(925329271); case 5825: return sub_40A910(1617849423); case 5826: return sub_40A910(-1477836583); case 5827: return sub_40A910(-1376974871); case 5828: return sub_40A910(1521924000); case 5829: return sub_40A910(845110077); case 5834: return sub_40A910(-1783453545); case 5835: case 5838: return sub_40A910(-1762729474); case 5836: return sub_40A910(-615762139); case 5837: return sub_40A910(-1119605191); case 5900: return sub_40A910(-45483628); case 5901: return sub_40A910(-789921024); case 5902: return sub_40A910(1519606789); case 5903: return sub_40A910(1772832744); case 5953: return sub_40C190(1565397749); case 5954: return sub_40C190(-182838776); case 5955: return sub_40C190(1500085617); case 5956: return sub_40C190(1248425329); case 5957: return sub_40C190(-1927629127); case 5958: return sub_40C190(1298759025); case 5959: return sub_40C190(-552941048); case 5960: return sub_40C190(169001498); case 5961: return sub_40C190(-2135640899); case 5963: return sub_40C190(1035631245); case 5964: return sub_40A910(-569989354); case 5965: return sub_40C190(17766695); case 5966: return sub_40C190(2040755383); case 5968: return sub_40C190(-1679583064); case 5976: return sub_40C190(1347300957); case 5984: return sub_40C190(1703503464); case 5992: return sub_40C190(-112578054); case 5993: return sub_40C190(-1663315281); case 5994: return sub_40C190(-1768652465); case 5995: return sub_40C190(-69745001); case 5996: return sub_40C190(-436748907); case 5997: return sub_40C190(883124564); case 5998: return sub_40A910(-483188950); default: goto LABEL_468; } } else { switch ( a1 ) { case 5761: return sub_40C190(471469858); case 5314: return (const char *)&unk_9AA53E; case 5315: return (const char *)&unk_9AA53F; case 5379: return sub_40A910(-450425548); } } } else { if ( a1 == 5313 ) return (const char *)&unk_9AA53D; switch ( a1 ) { case 4802: return sub_40C190(2024711327); case 4803: case 4869: return sub_40C190(-1141517351); case 4804: return sub_40C190(-2047362352); case 4805: case 4806: return sub_40C190(-1682327085); case 4807: return sub_40C190(-1833536556); case 4808: return sub_40C190(-386678815); case 4809: return sub_40C190(-705250282); case 4865: case 4866: case 4929: case 4993: return sub_40C190(994864244); case 4867: return sub_40C190(591993393); case 4868: return sub_40C190(-586473724); case 4870: return sub_40C190(-1995915053); case 4871: return sub_40C190(-2114203189); case 4872: return sub_40C190(-2036409918); case 4873: return sub_40C190(2125774773); case 4874: return sub_40C190(-764996063); case 4930: return sub_40C190(-300031690); case 4931: return sub_40C190(590880559); case 4994: return sub_40C190(-1795373887); case 4995: return sub_40C190(-536953840); case 5000: return sub_40C190(1813111246); default: goto LABEL_468; } } goto LABEL_468; } if ( a1 == 4801 ) return sub_40C190(994864244); if ( a1 > 4482 ) { switch ( a1 ) { case 4483: result = sub_40A910(-1312504288); break; case 4484: result = sub_40A910(1686012106); break; case 4485: result = sub_40A910(-1145064433); break; case 4486: result = sub_40A910(-1245589305); break; case 4487: result = sub_40A910(-1261972735); break; case 4488: LABEL_67: result = sub_40A910(1618515156); break; case 4489: result = sub_40A910(-1379480307); break; case 4490: result = sub_40A910(-132705253); break; case 4491: result = sub_40A910(-165476769); break; case 4492: result = sub_40A910(340483); break; case 4493: result = sub_40A910(16781857); break; case 4494: result = sub_40A910(-1919372408); break; case 4495: result = sub_40A910(-1162097205); break; case 4496: result = sub_40A910(-1112622397); break; case 4497: result = sub_40A910(100035412); break; case 4498: result = sub_40A910(-2118209795); break; case 4499: result = sub_40A910(-1380463106); break; case 4500: result = sub_40A910(-217770419); break; case 4501: result = sub_40A910(-1346432233); break; case 4502: result = sub_40A910(402466); break; case 4503: result = sub_40A910(-1647913015); break; case 4504: result = sub_40A910(203261317); break; case 4505: result = sub_40A910(1756289231); break; case 4506: result = sub_40A910(1719043710); break; case 4507: result = sub_40A910(34085727); break; case 4508: result = sub_40A910(-1278880999); break; case 4509: result = sub_40A910(1556333773); break; case 4510: result = sub_40A910(-1547451366); break; case 4511: result = sub_40A910(-1464153044); break; case 4512: result = sub_40A910(-266852591); break; case 4546: result = sub_40A910(-552648863); break; case 4547: result = sub_40A910(-513781701); break; case 4548: case 4563: result = sub_40A910(-532913827); break; case 4549: result = sub_40A910(-536679610); break; case 4550: LABEL_66: result = sub_40A910(-1715362306); break; case 4551: result = sub_40A910(1171303868); break; case 4552: LABEL_65: result = sub_40A910(-8757130); break; case 4553: result = sub_40A910(1333244345); break; case 4554: result = sub_40A910(-1392968431); break; case 4555: result = sub_40A910(191718775); break; case 4556: result = sub_40A910(1366584935); break; case 4557: result = sub_40A910(-1681329140); break; case 4558: result = sub_40A910(70605412); break; case 4559: result = sub_40A910(1033404863); break; case 4561: result = sub_40A910(1094086811); break; case 4562: result = sub_40A910(1245408845); break; case 4564: result = sub_40A910(658472870); break; case 4565: result = sub_40A910(1449617503); break; case 4566: result = sub_40A910(1566359461); break; case 4567: result = sub_40A910(1739115933); break; case 4568: result = sub_40A910(-218100739); break; case 4569: result = sub_40A910(-33487784); break; case 4571: result = sub_40A910(-1397696551); break; case 4572: result = sub_40A910(-1397693479); break; case 4573: result = sub_40A910(-1278551024); break; case 4574: result = sub_40A910(1457036201); break; case 4575: result = sub_40A910(-163841021); break; case 4577: result = sub_40A910(1145847397); break; case 4578: result = sub_40A910(-285716150); break; case 4611: result = sub_40C190(-624977213); break; default: goto LABEL_468; } return result; } if ( a1 == 4482 ) return sub_40A910(-1497967679); if ( a1 <= 1218 ) { if ( a1 == 1218 ) return sub_40C190(304885546); switch ( a1 ) { case 845: result = sub_40A910(1569354170); break; case 846: result = sub_40A910(19531596); break; case 911: case 912: result = sub_40A910(1870615179); break; default: goto LABEL_468; } return result; } if ( a1 <= 1793 ) { if ( a1 == 1793 ) return sub_40C190(577119654); switch ( a1 ) { case 1219: return sub_40C190(1769259966); case 1220: goto LABEL_33; case 1221: return sub_40C190(-857216207); case 1222: return sub_40C190(2112544993); case 1223: return sub_40C190(-82504842); case 1224: return sub_40C190(780496025); case 1225: return sub_40C190(490436475); case 1227: return sub_40C190(2057278620); case 1228: return sub_40C190(-923933139); case 1229: return sub_40C190(792732050); case 1230: return sub_40C190(-638772178); case 1231: return sub_40C190(-1053077197); case 1232: return sub_40C190(-722473247); case 1233: return sub_40C190(1904246236); case 1234: return sub_40C190(171018646); case 1235: return sub_40C190(-437767109); case 1238: goto LABEL_323; case 1242: return sub_4090F0(643563782); case 1369: return sub_40A910(1123798433); default: goto LABEL_468; } goto LABEL_468; } if ( a1 <= 2130 ) { if ( a1 != 2130 ) { switch ( a1 ) { case 1794: return sub_40A910(-701034696); case 1796: return sub_40C190(-365622204); case 1800: return sub_40C190(2147407582); case 1801: return sub_40C190(-818075887); case 1802: return sub_40C190(-958442723); case 1803: return sub_40C190(-1555951628); case 1804: return sub_40C190(20526914); case 1805: return sub_40C190(-2047355183); case 1808: return sub_40C190(744493337); case 1809: return sub_40C190(-1051259646); case 1811: return sub_40C190(-1755491219); case 1815: return sub_40C190(254242912); case 1818: goto LABEL_65; case 1819: goto LABEL_66; case 1820: goto LABEL_67; case 1822: return (const char *)&unk_9AA549; default: break; } LABEL_468: v6 = sub_40C190(-1261178346); return sub_7549E0("%s: %d", v6, a1); } return sub_40A910(-1757802995); } if ( a1 == 2888 ) return sub_40A910(-1757802995); if ( a1 == 3275 ) return (const char *)&unk_9AA54B; if ( a1 != 4291 ) goto LABEL_468; return sub_40A910(-1344521943); } if ( a1 <= 7242 ) { if ( a1 == 7242 ) return sub_40A910(1251907295); switch ( a1 ) { case 6978: result = sub_40A910(1035434974); break; case 6979: result = sub_40A910(1978646479); break; case 6980: result = sub_40A910(1268361158); break; case 6981: result = sub_40A910(-1830357975); break; case 6982: result = sub_40A910(-1444420835); break; case 6984: result = sub_40A910(-1528324913); break; case 6985: result = sub_40A910(-1947533547); break; case 6986: result = sub_40A910(1441244370); break; case 6987: result = sub_40A910(-1863188442); break; case 6988: result = sub_40A910(-1643726367); break; case 6989: result = sub_40A910(-499430039); break; case 6990: result = sub_40A910(1336038367); break; case 6991: result = sub_40A910(-1772032746); break; case 6992: result = sub_40A910(-1561352154); break; case 6993: result = sub_40A910(-275633058); break; case 6994: result = sub_40A910(-382214789); break; case 6995: result = sub_40A910(-1523647987); break; case 6996: result = sub_40A910(-770828951); break; case 7009: result = (const char *)&unk_9AA54A; break; case 7017: result = sub_40A910(796356721); break; case 7018: result = sub_40A910(-412124039); break; case 7171: case 7176: result = sub_40A910(-416063344); break; case 7172: case 7175: result = sub_40A910(336253340); break; case 7209: result = sub_40A910(-180411037); break; case 7210: result = sub_40A910(-163307157); break; case 7211: result = sub_40A910(-1714616537); break; default: goto LABEL_468; } return result; } if ( a1 <= 7616 ) { if ( a1 == 7616 ) return sub_40A910(-908081690); switch ( a1 ) { case 7300: return sub_40A910(-788548547); case 7301: return sub_40A910(-1929659688); case 7302: goto LABEL_280; case 7303: return sub_40A910(-1125790155); case 7304: goto LABEL_278; case 7318: return sub_40A910(-1595226132); case 7353: goto LABEL_285; case 7354: goto LABEL_279; case 7355: goto LABEL_275; case 7356: goto LABEL_286; case 7357: return sub_40A910(-2082564425); case 7368: goto LABEL_274; case 7369: goto LABEL_288; case 7371: goto LABEL_281; case 7372: return sub_40A910(-1041510126); case 7384: goto LABEL_355; default: goto LABEL_468; } goto LABEL_468; } if ( a1 <= 11009 ) { if ( a1 == 11009 ) return sub_40A910(596070777); if ( a1 > 8193 ) { if ( a1 > 8545 ) { if ( a1 > 9749 ) { if ( a1 > 10370 ) { switch ( a1 ) { case 10372: case 10378: case 10379: result = sub_40A910(122168471); break; case 10373: result = sub_40A910(1388794242); break; case 10375: case 10383: result = sub_40A910(3632744); break; case 10380: case 10381: case 10382: result = sub_40A910(-666297026); break; default: goto LABEL_468; } } else if ( a1 == 10370 ) { result = sub_40A910(1958924265); } else { switch ( a1 ) { case 9751: LABEL_278: result = sub_40A910(925693711); break; case 9755: LABEL_280: result = sub_40A910(-337443561); break; case 9782: LABEL_275: result = sub_40A910(-950397675); break; case 9783: LABEL_286: result = sub_40A910(1335201489); break; case 9786: LABEL_285: result = sub_40A910(-1786265178); break; case 9787: LABEL_279: result = sub_40A910(909864293); break; case 9799: LABEL_274: result = sub_40A910(848316235); break; case 9800: LABEL_288: result = sub_40A910(1519549828); break; case 9802: LABEL_281: result = sub_40A910(-773091586); break; case 9814: LABEL_355: result = sub_40A910(-1952684929); break; default: goto LABEL_468; } } return result; } if ( a1 == 9749 ) return sub_40A910(-1929659688); switch ( a1 ) { case 8546: return sub_40A910(-50255808); case 8547: return sub_40A910(-1780951837); case 8554: case 8562: return sub_40A910(107971710); case 8555: return sub_40A910(1604711864); default: goto LABEL_468; } } else { if ( a1 == 8545 ) return sub_40A910(107971710); switch ( a1 ) { case 8194: return sub_40A910(-129922485); case 8195: return sub_40A910(-11891623); case 8196: return sub_40A910(-1057409271); case 8197: return sub_40A910(1739641539); case 8201: return sub_40A910(89423199); case 8321: case 8337: case 8353: return sub_40A910(966311136); case 8322: case 8338: case 8354: return sub_40A910(-1560101824); case 8323: return sub_40A910(1452765642); case 8324: return sub_40A910(290811776); case 8325: return sub_40A910(1589230023); case 8326: return sub_40A910(984835528); case 8327: return sub_4090F0(-380941952); case 8328: return sub_40A910(-1191200535); case 8339: return sub_40A910(-2115321551); case 8340: case 8356: return sub_40A910(1587176832); case 8341: return sub_40A910(-1291922375); case 8355: return sub_40A910(89683321); case 8357: return sub_40A910(-1458496985); default: goto LABEL_468; } } } else { if ( a1 == 8193 ) return sub_40A910(1928714430); if ( a1 > 7809 ) { switch ( a1 ) { case 7810: result = sub_40A910(1013997916); break; case 7811: result = sub_40A910(613836119); break; case 7812: case 7813: case 7814: case 7815: result = sub_40A910(2113062079); break; case 7877: case 7885: case 7907: case 7922: case 7928: case 7936: case 7944: case 7952: result = sub_40A910(-990785237); break; case 7878: result = sub_40A910(-1938594449); break; case 7879: LABEL_33: result = sub_40C190(-1135722445); break; case 7881: result = sub_40A910(-1868834592); break; case 7882: case 7883: case 7884: result = sub_40A910(697717090); break; case 7886: result = sub_40A910(-924856803); break; case 7888: LABEL_323: result = sub_40A910(-2018982415); break; case 7898: result = sub_40A910(-721044802); break; case 7906: result = sub_40A910(-2047101251); break; case 7921: case 7929: case 7937: case 7945: case 7953: result = sub_40A910(-705447408); break; case 7923: result = sub_40A910(-1964066126); break; case 7930: case 7938: result = sub_40A910(1754230187); break; case 7946: result = sub_40A910(776011535); break; case 7954: result = sub_40A910(-480109555); break; case 7961: result = sub_40A910(1051029412); break; case 8004: result = sub_40A910(69861649); break; case 8005: result = sub_40A910(841878560); break; case 8012: result = sub_40A910(-1753193089); break; default: goto LABEL_468; } return result; } switch ( a1 ) { case 7809: return sub_40A910(826544367); case 7618: return sub_40A910(-606202867); case 7619: return sub_40A910(444685139); case 7620: return sub_40A910(269559929); } } goto LABEL_468; } if ( a1 <= 12393 ) { if ( a1 != 12393 ) { switch ( a1 ) { case 11010: result = sub_40A910(-1545881577); break; case 11073: result = sub_40A910(-1646029611); break; case 11074: result = sub_40A910(-1628988472); break; case 11075: result = sub_40A910(-1677550066); break; case 11137: result = sub_40A910(1121565599); break; case 11138: result = sub_40A910(1502359446); break; case 11153: result = sub_40A910(-834330622); break; case 11154: result = sub_40A910(-1630750736); break; case 11155: result = sub_40A910(1216839253); break; case 11156: result = sub_40A910(579824201); break; case 11157: result = sub_40A910(260661590); break; case 11158: result = sub_40A910(1233942641); break; case 11169: result = sub_40A910(1620865711); break; case 11170: result = sub_40A910((int)&off_5E705E); break; case 11171: result = sub_40A910(-96405152); break; case 11177: result = sub_40A910(1488313005); break; case 11178: result = sub_40A910(-1475011600); break; case 11179: result = sub_40A910(-1474880278); break; case 11180: result = sub_40A910(20810584); break; case 11181: result = sub_40A910(814330263); break; case 11182: result = sub_40A910(88094240); break; case 11201: result = sub_40A910(-562075557); break; case 11202: result = sub_40A910(-1727069973); break; case 11203: result = sub_40A910(-446607558); break; default: goto LABEL_468; } return result; } return sub_40A910(-1344521943); } if ( a1 <= 12697 ) { if ( a1 == 12697 ) return sub_4090F0(-1530854069); switch ( a1 ) { case 12394: return sub_40A910(1417774301); case 12395: return sub_40A910(1719785181); case 12396: return sub_40A910(-1440667106); case 12397: return sub_40A910(1602128620); case 12398: return sub_40A910(439197848); case 12399: return sub_40A910(1641220080); case 12400: return sub_4090F0(1686538963); case 12417: return sub_40A910(1417537213); case 12418: return sub_40A910(1422911183); case 12419: return sub_40A910(-199022829); case 12420: return sub_40A910(1367602632); case 12421: return sub_40A910(1437379010); case 12422: return sub_40A910(1854448002); case 12433: return sub_40A910(-1581438461); case 12434: return sub_40A910(-1592841707); case 12435: return sub_40A910(1097034585); case 12436: return sub_40A910(-1497812476); case 12437: return sub_40A910(-232441094); case 12438: return sub_40A910(-1391380972); case 12456: return sub_40A910(-454543280); case 12458: return sub_40A910(124165774); case 12459: return sub_40A910(-1340261556); case 12460: return sub_4090F0(1338042857); case 12585: return sub_40C190(577119654); case 12586: return sub_40A910(-701034696); case 12587: return sub_40C190(744493337); case 12588: return sub_40C190(2147407582); case 12590: return sub_40C190(507315571); case 12591: return sub_40A910(2095440357); case 12592: return sub_40C190(-722093020); case 12593: return sub_40C190(-396479446); case 12594: return sub_40C190(-850853584); default: goto LABEL_468; } goto LABEL_468; } if ( a1 <= 13377 ) { if ( a1 == 13377 ) return sub_4090F0(-871416775); switch ( a1 ) { case 12698: return sub_4090F0(-1677128385); case 12699: return sub_4090F0(-1662781660); case 12700: return sub_4090F0(195464383); case 12701: return sub_4090F0(-335729776); case 12702: return sub_4090F0(1230609663); case 12842: return sub_4090F0(1316841962); case 12843: return sub_4090F0(791379566); case 12846: return sub_4090F0(-2038924183); case 12882: case 12883: return sub_4090F0(-1732315197); case 12884: sub_4019E0(&v7, "LimitRandomOption"); v13 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v7, v8, v9, v10, v11, v12, v13); v12 = -1765869629; goto LABEL_435; case 12885: case 12886: return sub_4090F0(-1749092413); default: goto LABEL_468; } goto LABEL_468; } if ( a1 <= 13913 ) { if ( a1 == 13913 ) return sub_4090F0(-1490876962); switch ( a1 ) { case 13378: case 13406: case 13408: return sub_4090F0(-871416775); case 13379: case 13380: return sub_4090F0(-1745821113); case 13381: case 13382: return sub_4090F0(2024858599); case 13400: return sub_4090F0(-940778423); case 13404: case 13405: return sub_4090F0(-1104212931); case 13441: return sub_4090F0(995828283); case 13442: return sub_4090F0(-502673700); case 13521: case 13522: case 13525: case 13533: return sub_4090F0(-1224406776); case 13523: return sub_4090F0(-2018654263); case 13524: return sub_4090F0(-2002814779); case 13526: case 13528: case 13529: case 13530: case 13531: case 13532: return sub_4090F0(-1800684369); default: goto LABEL_468; } goto LABEL_468; } if ( a1 > 14273 ) { switch ( a1 ) { case 14274: return sub_4090F0(1787986550); case 14275: return sub_4090F0(1839564155); case 14276: return sub_4090F0(1236852936); case 14277: sub_4019E0(&v7, "AddMixItem"); v4 = sub_747F30(&unk_ACDC6C, v7, v8, v9, v10, v11, v12, v13); v5 = sub_6899D0(v4); if ( !v5 ) return (const char *)v1; v13 = v5[28] + 34; v12 = -1628252885; goto LABEL_435; case 14278: return sub_4090F0(1805354864); case 14279: return sub_40C190(-1851208242); default: goto LABEL_468; } goto LABEL_468; } if ( a1 != 14273 ) { if ( a1 == 13914 || a1 == 13915 ) return sub_4090F0(-1479213342); if ( a1 == 13916 ) return sub_4090F0(-266650586); goto LABEL_468; } sub_4019E0(&v7, "MixMinUpgrade"); v13 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v7, v8, v9, v10, v11, v12, v13); v12 = -1122297050; LABEL_435: v3 = (char *)sub_4090F0(v12); return sub_7549E0(v3, v13); } // 5E705E: using guessed type void *off_5E705E; //----- (0041D840) -------------------------------------------------------- LPCSTR __thiscall sub_41D840(_DWORD *this, const CHAR *a2) { _DWORD *v2; // edi int v3; // esi signed int v4; // ebx LPCSTR result; // eax _DWORD *v6; // esi int v7; // eax unsigned int v8; // eax int v9; // ecx unsigned int v10; // edi _DWORD *v11; // esi signed int v12; // edi int v13; // [esp+Ch] [ebp-110h] _DWORD *v14; // [esp+10h] [ebp-10Ch] LPCSTR lpString; // [esp+14h] [ebp-108h] CHAR v16[256]; // [esp+18h] [ebp-104h] v2 = this + 86; lpString = a2; v14 = this + 86; v3 = (int)(this + 86); v4 = 6; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9AA584); v3 += 4; --v4; } while ( v4 ); result = lpString; if ( lpString && *lpString ) { v13 = *(_DWORD *)((*(int (**)(void))(*(_DWORD *)*v2 + 456))() + 192); v6 = v2; do { if ( !*lpString ) break; v7 = (*(int (**)(void))(*(_DWORD *)*v6 + 144))(); v8 = sub_41E590(v16, lpString, (int)&v13, v7, 0); v9 = *v6; v10 = v8; v16[v8] = 0; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)v9 + 472))(v16); lpString += v10; v2 = v14; ++v4; ++v6; } while ( v4 < 6 ); if ( v4 == 1 ) { result = (LPCSTR)(*(int (__thiscall **)(_DWORD, signed int))(*(_DWORD *)*v2 + 488))(*v2, 1); } else { v11 = v2; v12 = 6; do { result = (LPCSTR)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)*v11 + 488))(0); ++v11; --v12; } while ( v12 ); } } return result; } // 41D840: using guessed type CHAR var_104[256]; //----- (0041D990) -------------------------------------------------------- char __thiscall sub_41D990(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // edi const CHAR *v14; // eax v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor01", (int)&a2, (int)&a3, a3); sub_8FB650(v5, v3, (int)"BtnClick01"); sub_8FB650(v5, v3, (int)"BtnOver01"); v6 = sub_8FE0F0(a2, (int)a3, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return 1; } //----- (0041DA70) -------------------------------------------------------- char __thiscall sub_41DA70(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // edi const CHAR *v14; // eax v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor01", (int)&a2, (int)&a3, a3); sub_8FB650(v5, v3, (int)"BtnClick01"); sub_8FB650(v5, v3, (int)"BtnOver01"); v6 = sub_8FE0F0(a2, (int)a3, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return 1; } //----- (0041DB50) -------------------------------------------------------- char __thiscall sub_41DB50(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // ST2C_4 const CHAR *v14; // eax volatile LONG **v15; // esi volatile LONG *v16; // eax volatile LONG *v17; // esi int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // eax volatile LONG *v22; // esi volatile LONG v23; // edi const CHAR *v24; // eax int v26; // [esp+10h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor02", (int)&v26, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick02"); sub_8FB650(v5, v3, (int)"BtnOver02"); v6 = sub_8FE0F0(v26, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v3, (int)"BtnNor03", (int)&v26, (int)&a2, a3); sub_8FB650(v15, v3, (int)"BtnClick03"); sub_8FB650(v15, v3, (int)"BtnOver03"); v16 = sub_8FE0F0(v26, a2, (int)v15, v4, 2, 0, 0); v17 = v16; v18 = (int)v16; v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v21 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v22 = sub_8F4A20(0, 0, v21, v20, v19, v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); return 1; } //----- (0041DCF0) -------------------------------------------------------- char __thiscall sub_41DCF0(volatile LONG **this, volatile LONG *a2) { volatile LONG **v2; // esi volatile LONG *v3; // edi char result; // al int v5; // ebx char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax int v12; // eax int v13; // edi int v14; // ST10_4 int v15; // ST0C_4 int v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // edi volatile LONG *v19; // ebx void (__thiscall *v20)(volatile LONG **, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v21)(_DWORD, signed int); // esi int v22; // [esp+24h] [ebp-28h] volatile LONG *v23; // [esp+28h] [ebp-24h] int v24; // [esp+2Ch] [ebp-20h] int v25; // [esp+30h] [ebp-1Ch] int v26; // [esp+34h] [ebp-18h] volatile LONG **v27; // [esp+38h] [ebp-14h] int v28; // [esp+3Ch] [ebp-10h] int v29; // [esp+48h] [ebp-4h] v2 = this; v28 = 0; v29 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v23 = v3; if ( !v3 ) { v29 = -1; if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); } return 0; } v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v6, (int)&v28, v5); if ( !v28 ) return 0; v7 = sub_8FB140(v28, (int)"Panel01", (int)&v25, (int)&v26, v3); if ( sub_8F1440(v2, 0, 0, (int)v7, 0, 0, 0, 0) ) { v9 = (volatile LONG *)sub_43D0D0(0x13u); if ( v9 ) v10 = sub_8FB140(v28, (int)"Theme", (int)&v25, (int)&v26, v9); else v10 = sub_8FB140(v28, (int)"Theme", (int)&v25, (int)&v26, 0); v11 = sub_8F3EB0(v25, v26, (int)v10, (int)v2, 0, 0); if ( v11 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = sub_421050(0); v22 = v12; v24 = 0; v27 = v2 + 86; while ( 1 ) { v13 = *(_DWORD *)(v12 + 384); v14 = v12; v15 = *(_DWORD *)(v12 + 384); v16 = (*((int (__thiscall **)(volatile LONG **))*v2 + 36))(v2); v17 = sub_8F4A20(8, v24 * (v13 + 1) + 8, v16 - 16, v15, v14, (int)v2, 0, 0); v18 = *v27; v19 = v17; if ( *v27 != v17 ) { if ( v18 && !InterlockedDecrement(v18 + 1) && v18 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); *v27 = v19; if ( v19 ) InterlockedIncrement(v19 + 1); } (*(void (__stdcall **)(_DWORD))(**v27 + 240))(0); ++v27; if ( ++v24 >= 6 ) break; v12 = v22; } if ( a2 == (volatile LONG *)1 ) { sub_41D990(v2, v28, v23); } else if ( a2 == (volatile LONG *)2 ) { sub_41DB50(v2, v28, v23); } else if ( (volatile LONG *)((char *)a2 - 2) == (volatile LONG *)1 ) { sub_41DA70(v2, v28, v23); } v20 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD, _DWORD))*((_DWORD *)*v2 + 59); v2[92] = a2; v20(v2, xRight, dword_AC2F78, 0.5, 0.5); v29 = -1; if ( v28 ) { v21 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v21 ) (**v21)(v21, 1); } } result = 1; } else { v8 = (void (__thiscall ***)(_DWORD, signed int))v28; v29 = -1; if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v8 ) (**v8)(v8, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0041DFF0) -------------------------------------------------------- LONG __thiscall sub_41DFF0(void *this) { _DWORD *v1; // esi v1 = this; *(_DWORD *)this = &EventCallMsgBox::`vftable'; *((_DWORD *)this + 58) = &EventCallMsgBox::`vftable'; if ( *((_DWORD *)this + 98) ) operator delete(*((void **)this + 98)); v1[98] = 0; v1[99] = 0; v1[100] = 0; sub_41EAD0(v1 + 95); operator delete((void *)v1[95]); `eh vector destructor iterator'(v1 + 86, 4u, 6, sub_410C00); return sub_8F10F0(v1); } // 9AA64C: using guessed type void *EventCallMsgBox::`vftable'; // 9AA66C: using guessed type void *EventCallMsgBox::`vftable'; //----- (0041E0B0) -------------------------------------------------------- _DWORD *__thiscall sub_41E0B0(_DWORD *this) { _DWORD *v1; // esi char v3; // [esp+Eh] [ebp-Eh] int v4; // [esp+Fh] [ebp-Dh] int v5; // [esp+18h] [ebp-4h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v5 = 0; *v1 = &EventCallMsgBox::`vftable'; v1[58] = &EventCallMsgBox::`vftable'; `eh vector constructor iterator'( v1 + 86, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); LOBYTE(v5) = 1; sub_41EC30(v1 + 94, &v3, (int)&v4); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AA64C: using guessed type void *EventCallMsgBox::`vftable'; // 9AA66C: using guessed type void *EventCallMsgBox::`vftable'; //----- (0041E140) -------------------------------------------------------- int __thiscall sub_41E140(void *this, char a2, int a3) { void *v3; // ebx _DWORD *v4; // eax int v5; // edi int v6; // ST04_4 char *v7; // ST00_4 char **v8; // eax int v9; // ecx int result; // eax int v11; // [esp+10h] [ebp-38h] char v12; // [esp+18h] [ebp-30h] char v13; // [esp+20h] [ebp-28h] int v14; // [esp+30h] [ebp-18h] int v15; // [esp+44h] [ebp-4h] v3 = this; v4 = sub_41E7F0(&v12, &a2, a3); v5 = **((_DWORD **)v3 + 95); v6 = *(_DWORD *)(v5 + 4); v7 = (char *)**((_DWORD **)v3 + 95); v15 = 0; v8 = sub_41E9B0(v7, v6, (int)v4); v9 = *((_DWORD *)v3 + 96); if ( (unsigned int)(134217726 - v9) < 1 ) std::_Xlength_error("list too long"); *((_DWORD *)v3 + 96) = v9 + 1; *(_DWORD *)(v5 + 4) = v8; *(_DWORD *)v8[1] = v8; result = sub_41ED20((_DWORD *)v3 + 94, (int)&v11, **((_DWORD **)v3 + 95) + 8, **((void ***)v3 + 95)); v15 = -1; if ( v14 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)v14 + 12))(v14 != (_DWORD)&v13); return result; } //----- (0041E230) -------------------------------------------------------- volatile LONG *__cdecl sub_41E230(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_41E0B0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0041E360) -------------------------------------------------------- volatile LONG *sub_41E360(char a1, int a2, int a3, char *a4, ...) { volatile LONG *result; // eax int v5; // esi char v6; // [esp+8h] [ebp-204h] va_list va; // [esp+224h] [ebp+18h] va_start(va, a4); result = sub_41E230(a3); v5 = (int)result; if ( result ) { (*(void (__thiscall **)(volatile LONG *, int))(*result + 516))(result, a2); *(_BYTE *)(v5 + 372) = a1; vsprintf(&v6, a4, va); sub_41D840((_DWORD *)v5, &v6); sub_8F9D50(&unk_BA6B10, (volatile LONG *)v5, 0, 0, 0); result = (volatile LONG *)v5; } return result; } //----- (0041E480) -------------------------------------------------------- char __thiscall sub_41E480(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // esi int v4; // ebx int v5; // eax std::tr1 *v6; // [esp-8h] [ebp-10h] int v7; // [esp+4h] [ebp-4h] result = a2; v3 = this; if ( a2 ) { if ( a2 != 5 ) { v4 = *((_DWORD *)this + 95); result = (unsigned int)sub_41E8F0((_DWORD *)this + 94, &v7, &a2); if ( v7 != v4 ) { v5 = sub_41EF30((_DWORD *)v3 + 94, &a2); if ( !*(_DWORD *)(v5 + 16) ) std::tr1::_Xfunc(v6); result = (*(int (**)(void))(**(_DWORD **)(v5 + 16) + 4))(); if ( *((_BYTE *)v3 + 372) == 1 ) result = sub_8F2BC0(v3, 2, 0, 0); } } } return result; } //----- (0041E500) -------------------------------------------------------- char __thiscall sub_41E500(volatile LONG *this, unsigned int a2, int a3) { char result; // al result = a2; if ( a2 < 5 ) result = sub_41E480(this, a2); return result; } //----- (0041E520) -------------------------------------------------------- char __thiscall sub_41E520(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // esi int v4; // eax int v5; // [esp+4h] [ebp-4h] result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; if ( *((_DWORD *)v3 + 92) != 1 ) { if ( *((_DWORD *)v3 + 92) == 2 ) { v4 = 2; goto LABEL_8; } if ( *((_DWORD *)v3 + 92) != 3 ) { v4 = v5; goto LABEL_8; } } v4 = 1; LABEL_8: result = sub_41E480(v3, v4); if ( *((_BYTE *)v3 + 372) == 1 ) result = sub_8F2BC0(v3, 2, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (0041E590) -------------------------------------------------------- unsigned int __cdecl sub_41E590(LPCSTR a1, LPCSTR lpString, int a3, int a4, char a5) { int v5; // ebx int v6; // edi int v7; // esi int v8; // esi unsigned int result; // eax CHAR *v10; // edi int v11; // eax bool v12; // sf unsigned __int8 v13; // of BYTE v14; // dl CHAR v15; // dl bool v16; // zf int v17; // edi int v18; // edi int v19; // edi struct tagSIZE psizl; // [esp+Ch] [ebp-24h] struct tagSIZE v21; // [esp+14h] [ebp-1Ch] struct tagSIZE v22; // [esp+1Ch] [ebp-14h] int v23; // [esp+24h] [ebp-Ch] int v24; // [esp+28h] [ebp-8h] int v25; // [esp+2Ch] [ebp-4h] v5 = 0; v25 = 0; v6 = strlen(lpString); v7 = 0; v23 = v6; if ( v6 > 0 ) { do { if ( !isspace(lpString[v7]) ) break; ++v7; ++v5; } while ( v7 < v6 ); v25 = v5; } v8 = v5; GetTextExtentPoint32A(*(HDC *)a3, lpString, v6, &psizl); if ( psizl.cx <= a4 ) { memcpy((void *)a1, &lpString[v5], v6 - v5); result = v6; a1[v6 - v5] = 0; return result; } if ( a5 ) { GetTextExtentPoint32A(*(HDC *)a3, "M", 1, &v22); v22.cy = (unsigned int)a4 / v22.cx; } else { v21.cx = 0; v21.cy = 0; } if ( v5 >= v6 ) return -1; while ( 2 ) { v24 = 0; v10 = (CHAR *)&a1[v8 - v25]; while ( 1 ) { v11 = 0; if ( a5 ) { v13 = __OFSUB__(v24, v22.cy); v12 = v24 - v22.cy < 0; } else { v13 = __OFSUB__(v21.cx, a4); v12 = v21.cx - a4 < 0; } LOBYTE(v11) = v12 ^ v13; if ( !v11 ) break; if ( v8 == v23 ) { a1[v8 - v25] = 0; return v25 + strlen(a1); } v14 = lpString[v8]; *v10 = v14; if ( IsDBCSLeadByte(v14) ) { v15 = lpString[v8++ + 1]; ++v10; a1[v8] = v15; } v16 = *v10 == 10; v10[1] = 0; if ( v16 ) *v10 = 32; ++v8; ++v10; if ( !a5 ) GetTextExtentPoint32A(*(HDC *)a3, a1, strlen(a1), &v21); ++v24; } v17 = v8 - v25; if ( isspace(a1[v8 - v25]) ) { v19 = v25; a1[v8 - v25] = 0; return v19 + strlen(a1); } v18 = v17 - 1; if ( v18 <= 0 ) { LABEL_28: if ( v8 < v23 ) continue; return -1; } break; } while ( !isspace(a1[v18]) ) { if ( --v18 <= 0 ) goto LABEL_28; } a1[v18] = 0; return strlen(a1) + v25; } //----- (0041E790) -------------------------------------------------------- _DWORD *__cdecl sub_41E790(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; ++result ) { if ( result ) *result = *v3; ++v3; } return result; } //----- (0041E7F0) -------------------------------------------------------- _DWORD *__cdecl sub_41E7F0(_DWORD *a1, _DWORD *a2, int a3) { int (__stdcall ***v3)(int); // ecx _DWORD *result; // eax *a1 = *a2; v3 = *(int (__stdcall ****)(int))(a3 + 16); if ( v3 ) { if ( v3 == (int (__stdcall ***)(int))a3 ) a1[6] = (**v3)((int)(a1 + 2)); else a1[6] = (**v3)(0); result = a1; } else { a1[6] = 0; result = a1; } return result; } //----- (0041E850) -------------------------------------------------------- void __stdcall sub_41E850(_DWORD *a1, _DWORD *a2) { int (__stdcall ***v2)(int); // ecx if ( a1 ) { *a1 = *a2; v2 = (int (__stdcall ***)(int))a2[6]; if ( v2 ) { if ( v2 == a2 + 2 ) { a1[6] = (**v2)((int)(a1 + 2)); } else { a1[6] = v2; a2[6] = 0; } } else { a1[6] = 0; } } } //----- (0041E8F0) -------------------------------------------------------- _DWORD *__thiscall sub_41E8F0(_DWORD *this, _DWORD *a2, int *a3) { int *v3; // ebx _DWORD *v4; // esi div_t v5; // rax unsigned int v6; // eax int v7; // ecx _DWORD *v8; // edi _DWORD *v9; // esi int v10; // edx _DWORD *i; // eax _DWORD *v12; // ecx int v13; // ecx _DWORD *result; // eax _DWORD *v15; // [esp+1Ch] [ebp+Ch] v3 = a3; v4 = this; v5 = div(*a3, 127773); v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4[8]; if ( v4[9] <= v6 ) v6 += -1 - (v4[8] >> 1); v7 = v4[4]; v8 = *(_DWORD **)(v7 + 8 * v6); v9 = (_DWORD *)v4[1]; v10 = v7 + 8 * v6; for ( i = *(_DWORD **)(v7 + 8 * v6); ; i = (_DWORD *)*i ) { if ( v8 == v9 ) v12 = v9; else v12 = **(_DWORD ***)(v10 + 4); if ( i == v12 ) { result = a2; *a2 = v9; return result; } v13 = i[2]; if ( v13 == *a3 ) break; } v15 = i; if ( *v3 == v13 ) { result = a2; *a2 = v15; } else { result = a2; *a2 = v9; } return result; } //----- (0041E9B0) -------------------------------------------------------- char **__stdcall sub_41E9B0(char *a1, int a2, int a3) { char **v3; // eax char **v4; // esi _DWORD *v5; // edx int v6; // ecx int v8; // [esp+0h] [ebp-30h] void **v9; // [esp+10h] [ebp-20h] void *v10; // [esp+1Ch] [ebp-14h] int *v11; // [esp+20h] [ebp-10h] int v12; // [esp+2Ch] [ebp-4h] v11 = &v8; v3 = (char **)operator new(0x28u); v4 = v3; v10 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a1); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v5 = (_DWORD *)a3; v6 = a2; *v3 = a1; v3[1] = (char *)v6; v12 = 0; sub_41E850(v3 + 2, v5); return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0041EA70) -------------------------------------------------------- int __thiscall sub_41EA70(void **this, int a2, void *a3) { _DWORD **v3; // esi void **v4; // ebx void *v5; // ecx _DWORD *v6; // ecx int result; // eax void *v8; // [esp+14h] [ebp+Ch] v3 = (_DWORD **)a3; v4 = this; v5 = *(void **)a3; v8 = *(void **)a3; if ( v3 != *v4 ) { *v3[1] = *v3; (*v3)[1] = v3[1]; v6 = v3[8]; if ( v6 ) { (*(void (__stdcall **)(bool))(*v6 + 12))(v6 != v3 + 4); v3[8] = 0; } operator delete(v3); v5 = v8; v4[1] = (char *)v4[1] - 1; } result = a2; *(_DWORD *)a2 = v5; return result; } //----- (0041EAD0) -------------------------------------------------------- void __thiscall sub_41EAD0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // ecx _DWORD *v4; // [esp+8h] [ebp-4h] v1 = this; v2 = *(_DWORD **)*this; *(_DWORD *)*this = *this; *(_DWORD *)(*this + 4) = *this; this[1] = 0; if ( v2 != (_DWORD *)*this ) { do { v3 = v2[8]; v4 = (_DWORD *)*v2; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)(v2 + 4)); v2[8] = 0; } operator delete(v2); v2 = v4; } while ( v4 != (_DWORD *)*v1 ); } } //----- (0041EB30) -------------------------------------------------------- void __thiscall sub_41EB30(void **this) { void **v1; // esi v1 = this; sub_41EAD0(this); operator delete(*v1); } //----- (0041EB80) -------------------------------------------------------- void __thiscall sub_41EB80(int this) { int v1; // ebx double v2; // st7 unsigned int v3; // esi signed int v4; // eax int *v5; // ecx int v6; // edi int v9; // ST08_4 int v10; // [esp+8h] [ebp-4h] v1 = this; v2 = *(float *)(this + 40); v3 = *(_DWORD *)(this + 36); *(float *)&v10 = (double)*(unsigned int *)(this + 8) / (double)v3; if ( *(float *)&v10 > v2 ) { v4 = 0; do { if ( v3 >= 0x1FFFFFFF ) break; ++v4; v3 *= 2; } while ( v4 < 3 ); v5 = (int *)(this + 16); v6 = *(_DWORD *)(v1 + 16); v10 = *(int *)(v1 + 4); if ( v6 != *(_DWORD *)(v1 + 20) ) { v5 = (int *)(v1 + 16); *(_DWORD *)(v1 + 20) = v6; } sub_433D40(v5, *v5, (char *)(2 * v3), (int)&v10); *(_DWORD *)(v1 + 32) = v3 - 1; v9 = *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 36) = v3; sub_41EE40((_DWORD **)v1, v9); } } //----- (0041EC30) -------------------------------------------------------- _DWORD *__thiscall sub_41EC30(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int *v5; // ecx char *v6; // edx int v7; // edi int v8; // eax void **v12; // [esp+10h] [ebp-1Ch] _DWORD *v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+28h] [ebp-4h] v3 = this; v13 = this; *(_WORD *)this = *(_WORD *)a2; this[2] = 0; v4 = operator new(0x28u); if ( !v4 ) { a2 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&a2); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v3[1] = v4; *v4 = v4; *(_DWORD *)(v3[1] + 4) = v3[1]; v5 = v3 + 4; v14 = 0; *v5 = 0; v5[1] = 0; v5[2] = 0; v6 = (char *)v3[1]; *((float *)v3 + 10) = 1.0; v7 = v3[4]; v8 = v3[5]; LOBYTE(v14) = 1; a2 = v6; if ( v7 != v8 ) v3[5] = v7; sub_433D40(v5, *v5, (char *)0x10, (int)&a2); v3[8] = 7; v3[9] = 8; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0041ED20) -------------------------------------------------------- int __thiscall sub_41ED20(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // edi div_t v5; // rax unsigned int v6; // ebx int v7; // eax int v8; // edx int v9; // esi void **v10; // ecx int v11; // eax void *v12; // eax int v13; // edx void **v14; // eax int result; // eax void **v16; // edx void *v17; // ecx v4 = this; v5 = div(*(_DWORD *)a3, 127773); v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4[8]; if ( v4[9] <= v6 ) v6 += -1 - (v4[8] >> 1); v7 = v4[4]; v8 = *(_DWORD *)(v7 + 8 * v6); v9 = v4[1]; v10 = (void **)(v4 + 1); v11 = v7 + 8 * v6; if ( v9 == v8 || (v9 = **(_DWORD **)(v11 + 4), v9 == v8) ) { LABEL_7: v12 = a4; if ( v9 != *(_DWORD *)a4 ) { sub_68B0A0(v10, v9, v4 + 1, (int)a4, *(_DWORD *)a4, 1u); v12 = a4; v10 = (void **)(v4 + 1); } v13 = v4[4]; a3 = (int)v12; v14 = (void **)(v13 + 8 * v6); if ( *v14 == *v10 ) { *v14 = a4; *(_DWORD *)(v4[4] + 8 * v6 + 4) = a3; } else if ( *v14 == (void *)v9 ) { *v14 = a4; } else { v16 = (void **)v14[1]; v17 = *v16; v14[1] = *v16; if ( v17 != (void *)a3 ) *(_DWORD *)(v4[4] + 8 * v6 + 4) = *(_DWORD *)(*(_DWORD *)(v4[4] + 8 * v6 + 4) + 4); } sub_41EB80((int)v4); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; } else { while ( 1 ) { v9 = *(_DWORD *)(v9 + 4); if ( *(_DWORD *)(v9 + 8) == *(_DWORD *)a3 ) break; if ( v9 == v8 ) goto LABEL_7; } sub_41EA70(v10, (int)&a3, a4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 0; } return result; } //----- (0041EE40) -------------------------------------------------------- int __thiscall sub_41EE40(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi void *v4; // ST08_4 bool v5; // bl int v6; // [esp+4h] [ebp-8h] void *v7; // [esp+14h] [ebp+8h] result = a2; v3 = this; if ( *this[1] != a2 ) { v7 = *(void **)(a2 + 4); do { v4 = (void *)*v3[1]; v5 = v4 == v7; result = sub_41ED20(v3, (int)&v6, (int)v4 + 8, v4); } while ( !v5 ); } return result; } //----- (0041EE90) -------------------------------------------------------- int __thiscall sub_41EE90(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx char **v4; // eax char *v5; // edi char **v6; // eax int v7; // ecx v3 = this; v4 = (char **)this[1]; v5 = *v4; v6 = sub_41E9B0(*v4, *((_DWORD *)*v4 + 1), a3); v7 = v3[2]; if ( (unsigned int)(134217726 - v7) < 1 ) std::_Xlength_error("list too long"); v3[2] = v7 + 1; *((_DWORD *)v5 + 1) = v6; *(_DWORD *)v6[1] = v6; sub_41ED20(v3, a2, *(_DWORD *)v3[1] + 8, *(void **)v3[1]); return a2; } //----- (0041EF00) -------------------------------------------------------- void *__thiscall sub_41EF00(void *this, char a2) { void *v2; // esi v2 = this; sub_41DFF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0041EF30) -------------------------------------------------------- int __thiscall sub_41EF30(_DWORD *this, int *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // esi char v6; // [esp+10h] [ebp-50h] int v7; // [esp+14h] [ebp-4Ch] int v8; // [esp+28h] [ebp-38h] int v9; // [esp+30h] [ebp-30h] char v10; // [esp+38h] [ebp-28h] int v11; // [esp+48h] [ebp-18h] int v12; // [esp+5Ch] [ebp-4h] v2 = this; sub_41E8F0(this, &v7, a2); if ( v7 != v2[1] ) return v7 + 16; v8 = 0; v3 = *a2; v12 = 0; v9 = v3; v11 = 0; LOBYTE(v12) = 1; v4 = *(_DWORD *)sub_41EE90(v2, (int)&v6, (int)&v9); LOBYTE(v12) = 0; if ( v11 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v11 + 12))(v11 != (_DWORD)&v10); return v4 + 16; } //----- (0041EFF0) -------------------------------------------------------- void __thiscall sub_41EFF0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // esi int v5; // edi char *v6; // eax char *v7; // eax v4 = this; if ( this[86] ) { v5 = ((int (__stdcall *)(_DWORD))loc_466CA0)(0); v6 = sub_7549E0("%d", a2); sub_4661A0((_DWORD *)v4[86], v5, 0, v6); sub_4661A0((_DWORD *)v4[86], v5, 1, a3); v7 = sub_7549E0("%d", a4); sub_4661A0((_DWORD *)v4[86], v5, 2, v7); sub_464D00((_DWORD *)v4[86], 5); sub_465130((_DWORD *)v4[86]); } } //----- (0041F080) -------------------------------------------------------- char __thiscall sub_41F080(volatile LONG *this) { return sub_8F2BC0(this, 5, 1, 0); } //----- (0041F0C0) -------------------------------------------------------- void __thiscall sub_41F0C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx _DWORD *v3; // eax _DWORD *v4; // esi int v5; // esi const CHAR *v6; // eax int v7; // [esp+4h] [ebp-1Ch] int v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v1 = this; v2 = (_DWORD *)this[86]; if ( v2 ) sub_466A50(v2); v3 = (_DWORD *)v1[92]; v4 = (_DWORD *)*v3; if ( (_DWORD *)*v3 != v3 ) { do { v7 = *(_DWORD *)((char *)v4 + 9); v8 = *(_DWORD *)((char *)v4 + 13); v9 = *(_DWORD *)((char *)v4 + 17); v10 = *(_DWORD *)((char *)v4 + 21); v11 = *(_DWORD *)((char *)v4 + 25); v12 = 0; sub_41EFF0(v1, *((unsigned __int8 *)v4 + 8), &v7, *(_DWORD *)((char *)v4 + 29)); v4 = (_DWORD *)*v4; } while ( v4 != (_DWORD *)v1[92] ); } if ( v1[88] ) { v5 = *(_DWORD *)v1[88]; v6 = sub_4090F0(1693311422); (*(void (__thiscall **)(_DWORD, const CHAR *))(v5 + 472))(v1[88], v6); } if ( v1[87] ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[87] + 516))(2); } //----- (0041F190) -------------------------------------------------------- void __thiscall sub_41F190(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx _DWORD *v3; // eax _DWORD *v4; // esi int v5; // esi const CHAR *v6; // eax int v7; // [esp+4h] [ebp-1Ch] int v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v1 = this; v2 = (_DWORD *)this[86]; if ( v2 ) sub_466A50(v2); v3 = (_DWORD *)v1[89]; v4 = (_DWORD *)*v3; if ( (_DWORD *)*v3 != v3 ) { do { v7 = *(_DWORD *)((char *)v4 + 9); v8 = *(_DWORD *)((char *)v4 + 13); v9 = *(_DWORD *)((char *)v4 + 17); v10 = *(_DWORD *)((char *)v4 + 21); v11 = *(_DWORD *)((char *)v4 + 25); v12 = 0; sub_41EFF0(v1, *((unsigned __int8 *)v4 + 8), &v7, *(_DWORD *)((char *)v4 + 29)); v4 = (_DWORD *)*v4; } while ( v4 != (_DWORD *)v1[89] ); } if ( v1[88] ) { v5 = *(_DWORD *)v1[88]; v6 = sub_4090F0(1471081408); (*(void (__thiscall **)(_DWORD, const CHAR *))(v5 + 472))(v1[88], v6); } if ( v1[87] ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[87] + 516))(1); } //----- (0041F260) -------------------------------------------------------- void __thiscall sub_41F260(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax switch ( a2 ) { case 0: (*(void (**)(void))(*this + 360))(); break; case 1: sub_41F0C0(this); break; case 2: sub_41F190(this); break; case 3: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "RankingWin_Olympic"); break; default: return; } } //----- (0041F2D0) -------------------------------------------------------- char **__thiscall sub_41F2D0(char **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { char *v8; // edi int v9; // esi char **result; // eax int v11; // ecx v8 = this[89]; v9 = (int)(this + 89); result = sub_41FCC0(this[89], *((_DWORD *)v8 + 1), (int)&a2); v11 = *(_DWORD *)(v9 + 4); if ( (unsigned int)(171798690 - v11) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v9 + 4) = v11 + 1; *((_DWORD *)v8 + 1) = result; *(_DWORD *)result[1] = result; return result; } //----- (0041F320) -------------------------------------------------------- char **__thiscall sub_41F320(char **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { char *v8; // edi int v9; // esi char **result; // eax int v11; // ecx v8 = this[92]; v9 = (int)(this + 92); result = sub_41FCC0(this[92], *((_DWORD *)v8 + 1), (int)&a2); v11 = *(_DWORD *)(v9 + 4); if ( (unsigned int)(171798690 - v11) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v9 + 4) = v11 + 1; *((_DWORD *)v8 + 1) = result; *(_DWORD *)result[1] = result; return result; } //----- (0041F370) -------------------------------------------------------- char __thiscall sub_41F370(volatile LONG *this) { volatile LONG *v1; // esi _DWORD *v2; // ecx _DWORD **v3; // ecx _DWORD *v4; // eax _DWORD *v5; // edi _DWORD **v6; // ecx _DWORD *v7; // eax _DWORD *v8; // edi v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 86); if ( v2 ) sub_466A50(v2); v3 = (_DWORD **)*((_DWORD *)v1 + 92); v4 = *v3; *v3 = v3; *(_DWORD *)(*((_DWORD *)v1 + 92) + 4) = *((_DWORD *)v1 + 92); *((_DWORD *)v1 + 93) = 0; if ( v4 != *((_DWORD **)v1 + 92) ) { do { v5 = (_DWORD *)*v4; operator delete(v4); v4 = v5; } while ( v5 != *((_DWORD **)v1 + 92) ); } v6 = (_DWORD **)*((_DWORD *)v1 + 89); v7 = *v6; *v6 = v6; *(_DWORD *)(*((_DWORD *)v1 + 89) + 4) = *((_DWORD *)v1 + 89); *((_DWORD *)v1 + 90) = 0; if ( v7 != *((_DWORD **)v1 + 89) ) { do { v8 = (_DWORD *)*v7; operator delete(v7); v7 = v8; } while ( v8 != *((_DWORD **)v1 + 89) ); } return sub_8F2BC0(v1, 1, 0, 0); } //----- (0041F410) -------------------------------------------------------- _DWORD *__thiscall sub_41F410(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void **v5; // [esp+Ch] [ebp-30h] void **v6; // [esp+18h] [ebp-24h] _DWORD *v7; // [esp+24h] [ebp-18h] char *v8; // [esp+28h] [ebp-14h] char *v9; // [esp+2Ch] [ebp-10h] int v10; // [esp+38h] [ebp-4h] v1 = this; v7 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &EventRankWin::`vftable'; v1[58] = &EventRankWin::`vftable'; v10 = 0; v1[90] = 0; v2 = operator new(0x24u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&v8); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v1[89] = v2; *v2 = v2; *(_DWORD *)(v1[89] + 4) = v1[89]; LOBYTE(v10) = 1; v1[93] = 0; v3 = operator new(0x24u); if ( !v3 ) { v9 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v9); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[92] = v3; *v3 = v3; *(_DWORD *)(v1[92] + 4) = v1[92]; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9AA9E4: using guessed type void *EventRankWin::`vftable'; // 9AAA04: using guessed type void *EventRankWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0041F500) -------------------------------------------------------- LONG __thiscall sub_41F500(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi _DWORD **v5; // ecx _DWORD *v6; // eax _DWORD *v7; // edi v1 = this; *this = &EventRankWin::`vftable'; this[58] = &EventRankWin::`vftable'; v2 = (_DWORD **)this[92]; v3 = *v2; *v2 = v2; *(_DWORD *)(v1[92] + 4) = v1[92]; v1[93] = 0; if ( v3 != (_DWORD *)v1[92] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != (_DWORD *)v1[92] ); } operator delete((void *)v1[92]); v5 = (_DWORD **)v1[89]; v6 = *v5; *v5 = v5; *(_DWORD *)(v1[89] + 4) = v1[89]; v1[90] = 0; if ( v6 != (_DWORD *)v1[89] ) { do { v7 = (_DWORD *)*v6; operator delete(v6); v6 = v7; } while ( v7 != (_DWORD *)v1[89] ); } operator delete((void *)v1[89]); return sub_8F10F0(v1); } // 9AA9E4: using guessed type void *EventRankWin::`vftable'; // 9AAA04: using guessed type void *EventRankWin::`vftable'; //----- (0041F5C0) -------------------------------------------------------- volatile LONG *__cdecl sub_41F5C0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x17Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_41F410(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0041F6F0) -------------------------------------------------------- char __thiscall sub_41F6F0(void *this, int a2) { int v2; // esi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax char v8; // ST1C_1 int v9; // ST20_4 int v10; // ST24_4 int v11; // ST28_4 const CHAR *v12; // eax char v13; // ST1C_1 int v14; // ST20_4 int v15; // ST24_4 int v16; // ST28_4 const CHAR *v17; // eax char v18; // ST1C_1 int v19; // ST20_4 int v20; // ST24_4 int v21; // ST28_4 const CHAR *v22; // eax char v23; // ST1C_1 int v24; // ST20_4 int v25; // ST24_4 int v26; // ST28_4 const CHAR *v27; // eax char v28; // ST1C_1 int v29; // ST20_4 int v30; // ST24_4 int v31; // ST28_4 const CHAR *v32; // eax volatile LONG *v33; // edi char v34; // ST1C_1 int v35; // ST20_4 int v36; // ST24_4 int v37; // ST28_4 const CHAR *v38; // eax _DWORD *v39; // edi _DWORD *v40; // edi int v41; // edi _DWORD *v42; // edi volatile LONG **v43; // eax volatile LONG *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi int v46; // [esp+28h] [ebp-7Ch] int v47; // [esp+2Ch] [ebp-78h] void *v48; // [esp+30h] [ebp-74h] int v49; // [esp+34h] [ebp-70h] int v50; // [esp+38h] [ebp-6Ch] char v51; // [esp+3Ch] [ebp-68h] char v52; // [esp+40h] [ebp-64h] int v53; // [esp+44h] [ebp-60h] int v54; // [esp+48h] [ebp-5Ch] int v55; // [esp+4Ch] [ebp-58h] int v56; // [esp+50h] [ebp-54h] int v57; // [esp+54h] [ebp-50h] int v58; // [esp+58h] [ebp-4Ch] int v59; // [esp+5Ch] [ebp-48h] int v60[5]; // [esp+60h] [ebp-44h] int v61; // [esp+74h] [ebp-30h] void *v62; // [esp+78h] [ebp-2Ch] int v63; // [esp+88h] [ebp-1Ch] unsigned int v64; // [esp+8Ch] [ebp-18h] int v65; // [esp+A0h] [ebp-4h] v2 = (int)this; v61 = 0; v65 = 0; v46 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\RankingWin_Olympic.nif"); sub_8F66B0(v3, (int)&v61, v46); if ( !v61 ) return 0; v4 = sub_8FB140(v61, (int)"Frame", (int)&v57, (int)&v58, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"EventRankWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v61; v65 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(v60); LOBYTE(v65) = 1; sub_455FF0(v60, v2); sub_456000(v60, v57, v58); sub_456380(v60, v61); v7 = (volatile LONG *)sub_43D0D0(0x13u); sub_456820(v60, (int)"Theme", v7); sub_456820(v60, (int)"Plane", 0); v8 = dword_AA8C68; v9 = dword_AA8C6C; v10 = dword_AA8C70; v11 = dword_AA8C74; v12 = sub_4090F0(-684907979); sub_456760(v60, (int)"WinTitle", (int)v12, v8, v9, v10, v11, 5); v13 = dword_AA8C68; v14 = dword_AA8C6C; v15 = dword_AA8C70; v16 = dword_AA8C74; v17 = sub_4090F0(1789190613); sub_456760(v60, (int)"Text01", (int)v17, v13, v14, v15, v16, 5); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = sub_4090F0(1788926932); sub_456760(v60, (int)"Text02", (int)v22, v18, v19, v20, v21, 5); v23 = dword_AA8C68; v24 = dword_AA8C6C; v25 = dword_AA8C70; v26 = dword_AA8C74; v27 = sub_4090F0(1827334358); sub_456760(v60, (int)"Text03", (int)v27, v23, v24, v25, v26, 5); sub_4564D0(v60, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); sub_4563D0(v60, 3, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, 0); *(_DWORD *)(v2 + 348) = sub_4563D0(v60, 2, (int)"BtnNor01", (int)"BtnOver01", (int)"BtnClick01", 0, 0); v28 = dword_AA8C68; v29 = dword_AA8C6C; v30 = dword_AA8C70; v31 = dword_AA8C74; v32 = sub_4090F0(1693311422); *(_DWORD *)(v2 + 352) = sub_456040(*(_DWORD *)(v2 + 348), (int)v32, v28, v29, v30, v31, 5); v33 = sub_4563D0(v60, 0, (int)"BtnNor02", (int)"BtnOver02", (int)"BtnClick02", 0, 0); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_4090F0(1926953954); sub_456040((int)v33, (int)v38, v34, v35, v36, v37, 5); v48 = 0; v49 = 0; v50 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; LOBYTE(v65) = 2; v39 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 1); *v39 = 1; v39[1] = v61; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "ColumnBarNor", 0xCu); LOBYTE(v65) = 3; sub_40B060(v39 + 18, (const void **)&v62); LOBYTE(v65) = 2; if ( v64 >= 0x10 ) operator delete(v62); v40 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v40 = 2; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "Column01", 8u); LOBYTE(v65) = 4; sub_40B060(v40 + 18, (const void **)&v62); LOBYTE(v65) = 2; if ( v64 >= 0x10 ) operator delete(v62); v40[1] = v61; v41 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *(_DWORD *)v41 = 2; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "Column02", 8u); LOBYTE(v65) = 5; sub_40B060((int *)(v41 + 72), (const void **)&v62); LOBYTE(v65) = 2; if ( v64 >= 0x10 ) operator delete(v62); *(_DWORD *)(v41 + 4) = v61; *(_BYTE *)(v41 + 88) = 1; v42 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v42 = 2; v64 = 15; v63 = 0; LOBYTE(v62) = 0; sub_4018E0(&v62, "Column03", 8u); LOBYTE(v65) = 6; sub_40B060(v42 + 18, (const void **)&v62); LOBYTE(v65) = 2; if ( v64 >= 0x10 ) operator delete(v62); v64 = 15; v63 = 0; LOBYTE(v62) = 0; v42[1] = v61; sub_466680(&v48, 0); v43 = sub_8FB140(v61, (int)"TextBox02", (int)&v59, (int)&v47, 0); v44 = sub_466330(v59 - v57, v47 - v58, (int)v43, *(float *)&v2, (int **)&v48, 0, 0); *(_DWORD *)(v2 + 344) = v44; sub_465130(v44); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v65) = 1; if ( v48 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v48, v49, &v51, v59); operator delete(v48); } v48 = 0; v49 = 0; v50 = 0; LOBYTE(v65) = 0; sub_4562E0(v60); v45 = (void (__thiscall ***)(_DWORD, signed int))v61; v65 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v45 ) (**v45)(v45, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0041FCC0) -------------------------------------------------------- char **__stdcall sub_41FCC0(char *a1, int a2, int a3) { char **result; // eax int v4; // edx int v5; // esi void **v6; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x24u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) { v5 = a3; qmemcpy(result + 2, (const void *)a3, 0x18u); *((_BYTE *)result + 32) = *(_BYTE *)(v5 + 24); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0041FD30) -------------------------------------------------------- void *__thiscall sub_41FD30(void *this, char a2) { void *v2; // esi v2 = this; sub_41F500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0041FE00) -------------------------------------------------------- void __thiscall sub_41FE00(int this, float a2) { int v2; // esi int *v3; // eax int v4; // edi char *v5; // eax v2 = this; if ( *(_BYTE *)(this + 380) ) { if ( sub_8D0630((float *)(this + 348), a2) ) ++*(_DWORD *)(v2 + 376); v3 = *(int **)(v2 + 344); if ( v3 ) { v4 = *v3; v5 = sub_7549E0("%02d:%02d", *(_DWORD *)(v2 + 376) / 0x3Cu % 0x3C, *(_DWORD *)(v2 + 376) % 0x3Cu); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(*(_DWORD *)(v2 + 344), v5); } } } //----- (0041FEB0) -------------------------------------------------------- void __thiscall sub_41FEB0(float *this, float a2) { float *v2; // esi v2 = this; sub_41FE00((int)this, a2); if ( *((_BYTE *)v2 + 381) ) { if ( sub_8D0630(v2 + 87, a2) ) sub_8F86A0(&unk_BA6B10, v2); } } //----- (0041FF00) -------------------------------------------------------- char __thiscall sub_41FF00(float *this, float a2) { float *v2; // esi char result; // al v2 = this; result = sub_8D06A0(this + 87, a2); v2[92] = 1.0; v2[94] = 0.0; *((_BYTE *)v2 + 380) = 1; return result; } //----- (0041FF40) -------------------------------------------------------- char __thiscall sub_41FF40(int this, float a2) { int v2; // esi char result; // al v2 = this; *(_WORD *)(this + 380) = 256; result = sub_8D06A0((float *)(this + 348), flt_ACCFCC); *(float *)(v2 + 368) = a2; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0041FF80) -------------------------------------------------------- char __thiscall sub_41FF80(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // edi volatile LONG *v16; // eax volatile LONG *v17; // ecx int v18; // edi int v19; // ebx int v20; // eax volatile LONG *v21; // eax int v22; // edi int v23; // eax volatile LONG *v24; // edi int v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi int v27; // [esp+34h] [ebp-18h] int v28; // [esp+38h] [ebp-14h] int v29; // [esp+3Ch] [ebp-10h] int v30; // [esp+48h] [ebp-4h] v2 = (int)this; v29 = 0; v30 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( !v29 || InterlockedDecrement((volatile LONG *)(v29 + 4)) ) return 0; v5 = v29 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\QuestTime.nif"); sub_8F66B0(v8, (int)&v29, v7); if ( !v29 ) return 0; v9 = sub_8FB140(v29, (int)"Frame", (int)&v27, (int)&v28, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"EventTimeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( !v29 || InterlockedDecrement((volatile LONG *)(v29 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = sub_8FB140(v29, (int)"Reward", (int)&v27, (int)&v28, 0); v11 = sub_8F3EB0(v27, v28, (int)v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 256))(v11, 1); v12 = sub_8FB140(v29, (int)"Panel01", (int)&v27, (int)&v28, 0); v13 = sub_8F3EB0(v27, v28, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v29, (int)"Time", (int)&v27, (int)&v28, v3); v15 = v14; v16 = sub_8F3EB0(v27, v28, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = v15[9]; v18 = *(_DWORD *)(*v17 + 24); v19 = *(_DWORD *)(*v17 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v27, v28 + 2, v19, v18, v20, v2, 0, 0); *(_DWORD *)(v2 + 344) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = **(_DWORD **)(v2 + 344); v23 = sub_421050(6); (*(void (__thiscall **)(_DWORD, int))(v22 + 452))(*(_DWORD *)(v2 + 344), v23); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("00:00:00"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.0); v24 = *(volatile LONG **)v2; v25 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 164))(v2, 240); (*((void (__thiscall **)(int, int))v24 + 77))(v2, v25); v30 = -1; if ( v29 ) { v26 = (void (__thiscall ***)(_DWORD, signed int))v29; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v26 ) (**v26)(v26, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00420270) -------------------------------------------------------- int __cdecl sub_420270(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x180u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &EventTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &EventTimeWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; sub_8D0610((_BYTE *)(v2 + 348)); *(_DWORD *)(v2 + 376) = 0; *(_WORD *)(v2 + 380) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AAC84: using guessed type void *EventTimeWin::`vftable'; // 9AACA4: using guessed type void *EventTimeWin::`vftable'; //----- (004203D0) -------------------------------------------------------- void *__thiscall sub_4203D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &EventTimeWin::`vftable'; *((_DWORD *)this + 58) = &EventTimeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AAC84: using guessed type void *EventTimeWin::`vftable'; // 9AACA4: using guessed type void *EventTimeWin::`vftable'; //----- (00420410) -------------------------------------------------------- void sub_420410() { char *v0; // eax char *v1; // edx char v2; // cl int v3; // eax char v4; // cl int v5; // eax char v6; // cl char *v7; // eax int v8; // eax char v9; // cl char *v10; // eax int v11; // eax char v12; // cl char *v13; // eax int v14; // eax char v15; // cl char *v16; // eax int v17; // eax char v18; // cl char *v19; // eax int v20; // eax char v21; // cl char *v22; // eax int v23; // eax char v24; // cl char *v25; // eax int v26; // eax char v27; // cl char *v28; // eax int v29; // eax char v30; // cl char *v31; // eax int v32; // eax char v33; // cl char *v34; // eax int v35; // eax char v36; // cl char *v37; // eax int v38; // eax char v39; // cl char *v40; // eax int v41; // eax char v42; // cl char *v43; // eax char v44; // [esp+4h] [ebp-41Ch] char v45[256]; // [esp+310h] [ebp-110h] int v46; // [esp+41Ch] [ebp-4h] sub_401BB0(&v44); v46 = 0; v0 = sub_401A30(&v44, (const char *)&unk_9AAEC4); v1 = (char *)(byte_ACAC58 - v0); do { v2 = *v0; v0[(_DWORD)v1] = *v0; ++v0; } while ( v2 ); v3 = 0; do { v4 = v45[v3]; byte_ACA318[v3++] = v4; } while ( v4 ); v5 = 0; do { v6 = byte_ACAC58[v5]; byte_ACAB50[v5++] = v6; } while ( v6 ); v7 = &byte_ACAB50[strlen(byte_ACAB50)]; *(_DWORD *)v7 = 1299408210; *((_DWORD *)v7 + 1) = 1551199845; v7[8] = 0; v8 = 0; do { v9 = byte_ACAC58[v8]; byte_ACAA48[v8++] = v9; } while ( v9 ); v10 = &byte_ACAA48[strlen(byte_ACAA48)]; *(_DWORD *)v10 = 1299408210; *((_DWORD *)v10 + 1) = sub_5C7061; v11 = 0; do { v12 = byte_ACAC58[v11]; byte_ACA940[v11++] = v12; } while ( v12 ); v13 = &byte_ACA940[strlen(byte_ACA940)]; *(_DWORD *)v13 = 1400071506; *((_DWORD *)v13 + 1) = 1684960623; *((_WORD *)v13 + 4) = 92; v14 = 0; do { v15 = byte_ACAC58[v14]; byte_ACA838[v14++] = v15; } while ( v15 ); v16 = &byte_ACA838[strlen(byte_ACA838)]; *(_DWORD *)v16 = 1165190482; *((_DWORD *)v16 + 1) = 1667589734; *((_WORD *)v16 + 4) = 23668; v16[10] = 0; v17 = 0; do { v18 = byte_ACAC58[v17]; byte_ACA730[v17++] = v18; } while ( v18 ); v19 = &byte_ACA730[strlen(byte_ACA730)]; *(_DWORD *)v19 = 1232299346; *((_DWORD *)v19 + 1) = 1550673268; v19[8] = 0; v20 = 0; do { v21 = byte_ACAC58[v20]; byte_ACA628[v20++] = v21; } while ( v21 ); v22 = &byte_ACA628[strlen(byte_ACA628)]; *(_DWORD *)v22 = 1131636050; *((_DWORD *)v22 + 1) = 1550999912; v22[8] = 0; v23 = 0; do { v24 = byte_ACAC58[v23]; byte_ACA520[v23++] = v24; } while ( v24 ); v25 = &byte_ACA520[strlen(byte_ACA520)]; *(_DWORD *)v25 = 1400071506; *((_DWORD *)v25 + 1) = 1702130553; *((_WORD *)v25 + 4) = 23661; v25[10] = 0; v26 = 0; do { v27 = byte_ACAC58[v26]; byte_ACA838[v26++] = v27; } while ( v27 ); v28 = &byte_ACA838[strlen(byte_ACA838)]; *(_DWORD *)v28 = 1165190482; *((_DWORD *)v28 + 1) = 1667589734; *((_WORD *)v28 + 4) = 23668; v28[10] = 0; v29 = 0; do { v30 = byte_ACAC58[v29]; byte_ACA418[v29++] = v30; } while ( v30 ); v31 = &byte_ACA418[strlen(byte_ACA418)]; *(_DWORD *)v31 = 1131636050; *((_DWORD *)v31 + 1) = 1550611060; v31[8] = 0; v32 = 0; do { v33 = byte_ACA730[v32]; byte_ACA210[v32++] = v33; } while ( v33 ); v34 = &byte_ACA210[strlen(byte_ACA210)]; *(_DWORD *)v34 = 1950959693; *((_DWORD *)v34 + 1) = sub_5C6D65; v35 = 0; do { v36 = byte_ACAA48[v35]; byte_ACA108[v35++] = v36; } while ( v36 ); v37 = &byte_ACA108[strlen(byte_ACA108)]; *(_DWORD *)v37 = 1766213709; *((_DWORD *)v37 + 1) = 1550085221; v37[8] = 0; v38 = 0; do { v39 = byte_ACAC58[v38]; byte_AC9DF8[v38++] = v39; } while ( v39 ); v40 = &byte_AC9DF8[strlen(byte_AC9DF8)]; *(_DWORD *)v40 = 1852402515; *((_WORD *)v40 + 2) = 92; v41 = 0; do { v42 = byte_ACAC58[v41]; byte_AC9CF0[v41++] = v42; } while ( v42 ); v43 = &byte_AC9CF0[strlen(byte_AC9CF0)]; *(_DWORD *)v43 = 1398895948; *((_DWORD *)v43 + 1) = 1885958755; *((_WORD *)v43 + 4) = 23668; v43[10] = 0; byte_ACAD5C = 1; v46 = -1; sub_401A20(&v44); } // 5C6D65: using guessed type int __stdcall sub_5C6D65(int); // ACAD5C: using guessed type char byte_ACAD5C; // 420410: using guessed type char var_110[256]; //----- (00420870) -------------------------------------------------------- int *__cdecl sub_420870(int a1) { int v1; // esi int *result; // eax v1 = 13 * a1; if ( !strcmp((const char *)dword_ACAF88[13 * a1], (const char *)&unk_9AAF7B) ) dword_ACAF88[v1] = (int)byte_ACAD60; if ( byte_AA8E54 && a1 == 1 ) { dword_ACAFBC = (int)"verdanab"; dword_ACAF9C = 14; dword_ACAFA4 = 400; } result = &dword_ACAF68[v1]; if ( byte_ACAF60 ) dword_ACAF88[v1] = (int)"verdanab"; return result; } // AA8E54: using guessed type char byte_AA8E54; // ACAF60: using guessed type char byte_ACAF60; // ACAF68: using guessed type int dword_ACAF68[]; // ACAF88: using guessed type int dword_ACAF88[]; // ACAF9C: using guessed type int dword_ACAF9C; // ACAFA4: using guessed type int dword_ACAFA4; // ACAFBC: using guessed type int dword_ACAFBC; //----- (00420910) -------------------------------------------------------- int __stdcall Proc(const LOGFONTA *a1, const TEXTMETRICA *a2, DWORD a3, LPARAM a4) { bool v4; // zf int result; // eax v4 = strncmp(a1->lfFaceName, byte_ACAD60, strlen(byte_ACAD60)) == 0; result = 1; if ( v4 ) { byte_ACAF61 = 1; byte_AA8E54 = 0; } return result; } // AA8E54: using guessed type char byte_AA8E54; // ACAF61: using guessed type char byte_ACAF61; //----- (00420B70) -------------------------------------------------------- void sub_420B70() { _DWORD *v0; // eax void *v1; // esi char *v2; // eax char *v3; // eax const CHAR *v4; // eax char *v5; // eax char *v6; // eax const CHAR *v7; // eax void **v8; // [esp+Ch] [ebp-1Ch] void *v9; // [esp+18h] [ebp-10h] int v10; // [esp+24h] [ebp-4h] sub_754A70(&v8); v8 = &Encrypt::FileStream::`vftable'; v10 = 0; v0 = operator new(0x24u); v9 = v0; LOBYTE(v10) = 1; if ( v0 ) v1 = (void *)sub_754EB0(v0, off_AA8E58); else v1 = 0; LOBYTE(v10) = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA520, off_AA8E3C[0]); if ( sub_754E40((void **)&v8, v2) ) { if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACA520, off_AA8E40[0]); sub_754D80(v3, (int)v1); } if ( !byte_ACAD5C ) sub_420410(); v4 = sub_401410(byte_ACA520, off_AA8E3C[0]); DeleteFileA(v4); if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACA520, off_AA8E48[0]); if ( sub_754E40((void **)&v8, v5) ) { if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACA520, off_AA8E4C[0]); sub_754D80(v6, (int)v1); } if ( !byte_ACAD5C ) sub_420410(); v7 = sub_401410(byte_ACA520, off_AA8E48[0]); DeleteFileA(v7); operator delete(v1); v10 = -1; sub_754A90(&v8); } // 9AB0BC: using guessed type void *Encrypt::FileStream::`vftable'; // AA8E3C: using guessed type char *off_AA8E3C[6]; // AA8E40: using guessed type char *off_AA8E40[5]; // AA8E48: using guessed type char *off_AA8E48[3]; // AA8E4C: using guessed type char *off_AA8E4C[2]; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00420D10) -------------------------------------------------------- _DWORD *__cdecl sub_420D10(int a1) { int *v1; // esi _DWORD *v2; // eax _DWORD *v3; // edi v1 = sub_420870(a1); v2 = operator new(0x184u); v3 = 0; if ( v2 ) v3 = sub_9063E0(v2); if ( !sub_900390((int)v3, (LPCSTR)v1[8], *v1, v1[1], v1[2], v1[3], v1[4], v1[5], v1[6], v1[7], v1[9], 512, 5) ) return 0; v3[96] = dword_ACAF68[13 * a1]; return v3; } // ACAF68: using guessed type int dword_ACAF68[]; //----- (00420DE0) -------------------------------------------------------- char sub_420DE0() { const char *v0; // eax FILE *v1; // eax FILE *v2; // esi int v4; // [esp+0h] [ebp-108h] char v5; // [esp+4h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_ACA520, "font.ini"); v1 = fopen(v0, "r"); v2 = v1; if ( !v1 ) return 0; if ( !fgets(&v5, 256, v1) ) { fclose(v2); return 0; } fclose(v2); sscanf(&v5, "%s %d", byte_ACAD60, &v4); sub_421900((BYTE *)byte_ACAD60, 35, 0x20u, strlen(byte_ACAD60)); byte_AA8E54 = v4 != 0; return 1; } // AA8E54: using guessed type char byte_AA8E54; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00420ED0) -------------------------------------------------------- bool sub_420ED0() { const CHAR *v0; // eax HANDLE v1; // esi signed int v3; // kr00_4 int v4; // esi char *v5; // [esp+0h] [ebp-168h] const char *v6; // [esp+4h] [ebp-164h] const char *v7; // [esp+8h] [ebp-160h] const char *v8; // [esp+Ch] [ebp-15Ch] const char *v9; // [esp+10h] [ebp-158h] const char *v10; // [esp+14h] [ebp-154h] const char *v11; // [esp+18h] [ebp-150h] const char *v12; // [esp+1Ch] [ebp-14Ch] HANDLE v13; // [esp+20h] [ebp-148h] struct _WIN32_FIND_DATAA FindFileData; // [esp+24h] [ebp-144h] v5 = ".ttf"; v6 = ".ttF"; v7 = ".tTf"; v8 = ".tTF"; v9 = ".Ttf"; v10 = ".TtF"; v11 = ".TTf"; v12 = ".TTF"; if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_AC9DF8, "*"); v1 = FindFirstFileA(v0, &FindFileData); v13 = v1; if ( v1 == (HANDLE)-1 ) return 0; while ( 1 ) { if ( FindFileData.dwFileAttributes != 16 ) { v3 = strlen(FindFileData.cFileName); if ( v3 >= 4 ) break; } LABEL_11: if ( !FindNextFileA(v1, &FindFileData) ) goto LABEL_14; } v4 = 0; while ( strncmp((&v5)[v4], (const char *)&FindFileData.dwReserved1 + v3, 4u) ) { if ( (unsigned int)++v4 >= 8 ) { v1 = v13; goto LABEL_11; } } strncpy(byte_ACAD60, FindFileData.cFileName, v3 - 4); v1 = v13; LABEL_14: FindClose(v1); sprintf(byte_ACAE60, "%s.ttf", byte_ACAD60); return strlen(byte_ACAD60) > 0; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00421050) -------------------------------------------------------- int __cdecl sub_421050(int a1) { _DWORD *v1; // eax int v2; // edi int v3; // ebx int result; // eax _DWORD *v5; // eax int v6; // edi int v7; // ebx if ( !dword_ACB1D8[a1] ) { v1 = sub_420D10(a1); v2 = dword_ACB1D8[a1]; v3 = (int)v1; if ( (_DWORD *)v2 != v1 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_ACB1D8[a1] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } } result = dword_ACB1D8[a1]; if ( !result ) { byte_ACAF60 = 1; v5 = sub_420D10(a1); v6 = dword_ACB1D8[a1]; v7 = (int)v5; if ( (_DWORD *)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); dword_ACB1D8[a1] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } result = dword_ACB1D8[a1]; } return result; } // ACAF60: using guessed type char byte_ACAF60; //----- (00421120) -------------------------------------------------------- unsigned __int8 *sub_421120() { unsigned __int8 *result; // eax int *v1; // eax int *v2; // edi unsigned __int8 *v3; // eax int v4; // edx int v5; // ecx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // edx int v11; // ecx int v12; // ecx int v13; // edx int v14; // ecx int v15; // edx int v16; // [esp+4h] [ebp-34h] int v17; // [esp+8h] [ebp-30h] int v18; // [esp+Ch] [ebp-2Ch] int v19; // [esp+10h] [ebp-28h] int v20; // [esp+14h] [ebp-24h] int v21; // [esp+18h] [ebp-20h] int v22; // [esp+1Ch] [ebp-1Ch] int v23; // [esp+20h] [ebp-18h] const char *v24; // [esp+24h] [ebp-14h] int v25; // [esp+28h] [ebp-10h] int v26; // [esp+2Ch] [ebp-Ch] int v27; // [esp+30h] [ebp-8h] int v28; // [esp+34h] [ebp-4h] if ( !sub_421AC0("FontSet.shn", 1, 0) ) return (unsigned __int8 *)MessageBoxA(0, "FontSet.shn InitError!!", "Application Initialize Error!", 0x10u); v1 = dword_ACAF68; do { v2 = v1; v1 += 13; v16 = 12; v17 = 0; v18 = 400; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v24 = (const char *)&unk_9AAFCB; v25 = 0; qmemcpy(v2, &v16, 0x34u); } while ( (signed int)v1 < (signed int)dword_ACB1D8 ); v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = "verdana"; v16 = 14; v18 = 400; qmemcpy(dword_ACAF68, &v16, 0x34u); v16 = 12; v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAF97; v18 = 700; qmemcpy(&dword_ACAF9C, &v16, 0x34u); v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFA6; v16 = 14; v18 = 400; qmemcpy(&unk_ACAFD0, &v16, 0x34u); v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFA7; v16 = 15; v18 = 700; qmemcpy(&unk_ACB004, &v16, 0x34u); v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFB6; v16 = 15; v18 = 400; qmemcpy(&unk_ACB038, &v16, 0x34u); v17 = 0; v19 = 0; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFB7; v16 = 24; v18 = 400; qmemcpy(&unk_ACB06C, &v16, 0x34u); v20 = 1; v17 = 0; v19 = 0; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFBE; v16 = 14; v18 = 400; qmemcpy(&unk_ACB0D4, &v16, 0x34u); v20 = 1; v18 = 700; v17 = 0; v19 = 0; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFBF; v16 = 24; qmemcpy(&unk_ACB0A0, &v16, 0x34u); v20 = 1; v18 = 700; dword_ACB0C4 = 1; v17 = 0; v19 = 0; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFC9; v16 = 16; qmemcpy(&unk_ACB108, &v16, 0x34u); dword_ACB12C = 1; v20 = 1; v16 = 13; v18 = 700; v17 = 0; v19 = 0; v21 = 0; v22 = 0; v23 = 0; v25 = 0; v24 = (const char *)&unk_9AAFCA; qmemcpy(&unk_ACB13C, &v16, 0x34u); dword_ACB160 = 1; v3 = (unsigned __int8 *)sub_421A00("FS_NamePanel"); v4 = -(v3[65] != 0); v16 = v3[64]; v5 = v3[66]; v17 = 0; v18 = (v4 & 0x12C) + 400; v19 = v5; v20 = 1; v21 = 0; v22 = 0; v23 = 0; v6 = v3[67]; v24 = (const char *)(v3 + 32); v7 = v3[68]; v25 = v6; v8 = v3[69]; v26 = v7; v9 = v3[70]; v27 = v8; v28 = v9; qmemcpy(&unk_ACB170, &v16, 0x34u); result = (unsigned __int8 *)sub_421A00("FS_GM"); v10 = -(result[65] != 0); v16 = result[64]; v11 = result[66]; v18 = (v10 & 0x12C) + 400; v19 = v11; v12 = result[67]; v24 = (const char *)(result + 32); v13 = result[68]; v25 = v12; v14 = result[69]; v26 = v13; v15 = result[70]; v27 = v14; v17 = 0; v21 = 0; v22 = 0; v23 = 0; v20 = 1; v28 = v15; qmemcpy(&unk_ACB1A4, &v16, 0x34u); return result; } // ACAF68: using guessed type int dword_ACAF68[]; // ACAF9C: using guessed type int dword_ACAF9C; // ACB0C4: using guessed type int dword_ACB0C4; // ACB12C: using guessed type int dword_ACB12C; // ACB160: using guessed type int dword_ACB160; //----- (004214D0) -------------------------------------------------------- char sub_4214D0() { const CHAR *v0; // eax const CHAR *v1; // eax HDC v2; // eax const CHAR *v3; // eax const CHAR *v5; // eax const CHAR *v6; // eax HANDLE v7; // esi signed int v8; // kr00_4 const CHAR *v9; // eax void *v10; // esi _DWORD *v11; // eax char *v12; // eax char *v13; // eax char *v14; // eax char *v15; // eax const CHAR *v16; // eax const CHAR *v17; // eax const CHAR *v18; // eax const CHAR *v19; // eax void **v20; // [esp+14h] [ebp-15Ch] struct _WIN32_FIND_DATAA FindFileData; // [esp+20h] [ebp-150h] int v22; // [esp+16Ch] [ebp-4h] sub_421120(); if ( sub_420ED0() ) { if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_AC9DF8, byte_ACAE60); RemoveFontResourceA(v0); if ( !byte_ACAD5C ) sub_420410(); v1 = sub_401410(byte_AC9DF8, byte_ACAE60); AddFontResourceA(v1); v2 = GetDC(0); EnumFontFamiliesA(v2, 0, Proc, 0); } if ( !byte_ACAF61 ) { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_AC9DF8, byte_ACAE60); RemoveFontResourceA(v3); if ( !sub_420DE0() ) return 0; } if ( !byte_ACAD5C ) sub_420410(); v5 = sub_401410(byte_ACA520, "verdana.ttf"); AddFontResourceA(v5); if ( !byte_ACAD5C ) sub_420410(); v6 = sub_401410(byte_ACA520, "*"); v7 = FindFirstFileA(v6, &FindFileData); if ( v7 == (HANDLE)-1 ) return 0; do { if ( FindFileData.dwFileAttributes != 16 ) { v8 = strlen(FindFileData.cFileName); if ( v8 >= 4 && !_strnicmp(".ttf", (const char *)&FindFileData.dwReserved1 + v8, 4u) ) { if ( !byte_ACAD5C ) sub_420410(); v9 = sub_401410(byte_ACA520, FindFileData.cFileName); AddFontResourceA(v9); } } } while ( FindNextFileA(v7, &FindFileData) ); FindClose(v7); byte_ACAF62 = 1; sub_420B70(); sub_907680(dword_BA6B30); if ( byte_AA8E54 == 1 ) { sub_754A70(&v20); v20 = &Encrypt::FileStream::`vftable'; v10 = 0; v22 = 0; v11 = operator new(0x24u); LOBYTE(v22) = 1; if ( v11 ) v10 = (void *)sub_754EB0(v11, off_AA8E58); LOBYTE(v22) = 0; if ( !byte_ACAD5C ) sub_420410(); v12 = (char *)sub_401410(byte_ACA520, off_AA8E40[0]); if ( sub_754F10(&v20, v12, (int)v10) ) { if ( !byte_ACAD5C ) sub_420410(); v13 = (char *)sub_401410(byte_ACA520, off_AA8E44[0]); sub_754E60(&v20, v13); } if ( !byte_ACAD5C ) sub_420410(); v14 = (char *)sub_401410(byte_ACA520, off_AA8E4C[0]); if ( sub_754F10(&v20, v14, (int)v10) ) { if ( !byte_ACAD5C ) sub_420410(); v15 = (char *)sub_401410(byte_ACA520, off_AA8E50); sub_754E60(&v20, v15); } operator delete(v10); v22 = -1; sub_754A90(&v20); if ( !byte_ACAD5C ) sub_420410(); v16 = sub_401410(byte_ACA520, off_AA8E44[0]); RemoveFontResourceA(v16); if ( !byte_ACAD5C ) sub_420410(); v17 = sub_401410(byte_ACA520, off_AA8E44[0]); AddFontResourceA(v17); if ( !byte_ACAD5C ) sub_420410(); v18 = sub_401410(byte_ACA520, off_AA8E50); RemoveFontResourceA(v18); if ( !byte_ACAD5C ) sub_420410(); v19 = sub_401410(byte_ACA520, off_AA8E50); AddFontResourceA(v19); } return 1; } // 9AB0BC: using guessed type void *Encrypt::FileStream::`vftable'; // AA8E40: using guessed type char *off_AA8E40[5]; // AA8E44: using guessed type char *off_AA8E44[4]; // AA8E4C: using guessed type char *off_AA8E4C[2]; // AA8E50: using guessed type char *off_AA8E50; // AA8E54: using guessed type char byte_AA8E54; // ACAD5C: using guessed type char byte_ACAD5C; // ACAF61: using guessed type char byte_ACAF61; // ACAF62: using guessed type char byte_ACAF62; // BA6B30: using guessed type int dword_BA6B30; //----- (004218A0) -------------------------------------------------------- void *__thiscall sub_4218A0(void *this, char a2) { void *v2; // esi v2 = this; sub_754A90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004218D0) -------------------------------------------------------- int __stdcall sub_4218D0(int a1, int a2, int a3, int (__thiscall *a4)(int)) { int v4; // edi int v5; // esi int result; // eax v4 = a3 - 1; if ( a3 - 1 >= 0 ) { v5 = a1; do { result = a4(v5); v5 += a2; --v4; } while ( v4 >= 0 ); } return result; } //----- (00421900) -------------------------------------------------------- void __cdecl sub_421900(BYTE *a1, char a2, BYTE a3, int a4) { BYTE *v4; // esi int v5; // edi signed int v6; // eax v4 = a1; if ( a1 && *a1 ) { v5 = a4; do { if ( !v5 ) break; if ( *v4 == a2 ) *v4 = a3; if ( IsDBCSLeadByte(*v4) ) { v4 += 2; v6 = 2; } else { ++v4; v6 = 1; } v5 -= v6; } while ( *v4 ); } } //----- (00421950) -------------------------------------------------------- char *sub_421950() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA520; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00421980) -------------------------------------------------------- void **__thiscall sub_421980(void *this, int a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB0C4: using guessed type void *ITableBase::`vftable'; //----- (00421A00) -------------------------------------------------------- const char *__cdecl sub_421A00(char *a1) { int v1; // eax unsigned int v2; // edi const char *v3; // eax const char *v4; // esi unsigned int v6; // [esp+Ch] [ebp-4h] v1 = *(_DWORD *)(dword_ACB208 + 56); v2 = 0; if ( v1 ) v6 = *(_DWORD *)(v1 + 40); else v6 = 0; if ( v6 <= 0 ) return 0; while ( 1 ) { v3 = (const char *)sub_7474E0((_DWORD *)(dword_ACB208 + 4), v2); v4 = v3; if ( v3 ) { if ( !strncmp(a1, v3, strlen(v3)) ) break; } if ( ++v2 >= v6 ) return 0; } return v4; } // ACB208: using guessed type int dword_ACB208; //----- (00421A80) -------------------------------------------------------- _DWORD *__thiscall sub_421A80(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACB20C & 1) ) { dword_ACB20C |= 1u; atexit(sub_99F9D0); } *((_BYTE *)v1 + 68) = 0; *v1 = &FontSetTab::`vftable'; return v1; } // 9AB0C4: using guessed type void *ITableBase::`vftable'; // 9AB0D4: using guessed type void *FontSetTab::`vftable'; // ACB208: using guessed type int dword_ACB208; // ACB20C: using guessed type int dword_ACB20C; //----- (00421AC0) -------------------------------------------------------- bool __cdecl sub_421AC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB208; if ( !dword_ACB208 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_421A80(v5); else v4 = 0; v12 = -1; dword_ACB208 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB208 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB208 + 56); if ( !v6 || *v6 != 156 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB208 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB208 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB208: using guessed type int dword_ACB208; //----- (00421C10) -------------------------------------------------------- int __cdecl sub_421C10(int a1, int a2) { int i; // esi _DWORD *v3; // eax int (__stdcall ***v4)(signed int); // ecx int result; // eax for ( i = a1; i != a2; result = (**v4)(1) ) { if ( !i ) break; v3 = (_DWORD *)(i + 12); v4 = (int (__stdcall ***)(signed int))i; i = *(_DWORD *)(i + 12); *v3 = 0; } return result; } //----- (00421C50) -------------------------------------------------------- int __thiscall sub_421C50(_DWORD *this) { _DWORD *v1; // edi int i; // esi _DWORD *v3; // eax int (__stdcall ***v4)(signed int); // ecx int result; // eax v1 = this; *this = &std::tr1::_Node_assert::`vftable'; for ( i = this[5]; i; result = (**v4)(1) ) { v3 = (_DWORD *)(i + 12); v4 = (int (__stdcall ***)(signed int))i; i = *(_DWORD *)(i + 12); *v3 = 0; } *v1 = &std::tr1::_Node_base::`vftable'; return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB414: using guessed type void *std::tr1::_Node_assert::`vftable'; //----- (00421CC0) -------------------------------------------------------- void *__thiscall sub_421CC0(void *this, char a2) { void *v2; // esi v2 = this; sub_421C50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00421CF0) -------------------------------------------------------- _DWORD *__fastcall sub_421CF0(_DWORD *a1) { int v1; // ebx _DWORD *v2; // eax int v3; // esi int v4; // edi _DWORD *v5; // eax void (__stdcall ***v6)(signed int); // ecx _DWORD *result; // eax _DWORD *v8; // [esp+10h] [ebp-10h] v8 = a1; *a1 = &std::tr1::_Node_if::`vftable'; v1 = a1[6]; if ( v1 ) { while ( 1 ) { v2 = (_DWORD *)(v1 + 24); v3 = v1; v1 = *(_DWORD *)(v1 + 24); *v2 = 0; v4 = a1[5]; while ( v3 != v4 ) { if ( !v3 ) break; v5 = (_DWORD *)(v3 + 12); v6 = (void (__stdcall ***)(signed int))v3; v3 = *(_DWORD *)(v3 + 12); *v5 = 0; (**v6)(1); } if ( !v1 ) break; a1 = v8; } result = v8; *v8 = &std::tr1::_Node_base::`vftable'; } else { *a1 = &std::tr1::_Node_base::`vftable'; } return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB434: using guessed type void *std::tr1::_Node_if::`vftable'; //----- (00421DA0) -------------------------------------------------------- void *__thiscall sub_421DA0(void *this, char a2) { void *v2; // esi v2 = this; sub_421CF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00421DD0) -------------------------------------------------------- HWND __thiscall sub_421DD0(HWND *this) { HWND *v1; // esi HWND result; // eax v1 = this; result = this[86]; if ( result ) { result = (HWND)DestroyWindow(this[86]); if ( !result ) result = (HWND)MessageBoxA(0, "Error", "Unable to close Forum Win!", 0); } v1[86] = 0; return result; } //----- (00421E10) -------------------------------------------------------- int __thiscall sub_421E10(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int result; // eax v1 = this; v1[88] = v1[93] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1); v3 = v1[96]; v1[89] = v1[94] + v2; result = v1[95]; v1[90] = result; v1[91] = v3; return result; } //----- (00421E60) -------------------------------------------------------- BOOL __thiscall sub_421E60(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { if ( *((_BYTE *)v1 + 368) ) { sub_421E10(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[88] + Rect.left, (int)v1[89] + Rect.top, (int)v1[90], (int)v1[91], 1); } } return result; } //----- (00421F30) -------------------------------------------------------- char __thiscall sub_421F30(int this) { int v1; // esi HWND v2; // eax _DWORD *v3; // ecx v1 = this; v2 = *(HWND *)(this + 344); *(_BYTE *)(this + 368) = 0; if ( v2 && !DestroyWindow(v2) ) MessageBoxA(0, "Error", "Unable to close Forum Win!", 0); DestroyWindow(*(HWND *)(v1 + 348)); v3 = *(_DWORD **)(v1 + 296); *(_DWORD *)(v1 + 344) = 0; return sub_4A5200(v3); } //----- (00421F90) -------------------------------------------------------- BOOL __thiscall sub_421F90(HWND *this, int a2) { return sub_421E60(this); } //----- (00421FA0) -------------------------------------------------------- char __thiscall sub_421FA0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // ebx void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // eax volatile LONG *v15; // edi const CHAR *v16; // eax volatile LONG *v17; // edi volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // edi int v23[5]; // [esp+34h] [ebp-40h] volatile LONG v24; // [esp+48h] [ebp-2Ch] int v25; // [esp+4Ch] [ebp-28h] int v26; // [esp+50h] [ebp-24h] int v27; // [esp+54h] [ebp-20h] volatile LONG *v28; // [esp+58h] [ebp-1Ch] int v29; // [esp+5Ch] [ebp-18h] int v30; // [esp+60h] [ebp-14h] int v31; // [esp+64h] [ebp-10h] int v32; // [esp+70h] [ebp-4h] int v33; // [esp+7Ch] [ebp+8h] v2 = (int)this; v31 = 0; v3 = dword_BA6BA0; v32 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, off_AA8EF0[0]); sub_8F66B0(v4, (int)&v31, v3); if ( !v31 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v31 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v27 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v32) = 1; if ( v8 ) v28 = *(volatile LONG **)(v8 + 4); else v28 = 0; v9 = sub_8FB140(v31, (int)"Frame", (int)&v29, (int)&v30, v28); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ShopWin", 0) ) { LOBYTE(v32) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v31; v32 = -1; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v29; v33 = v30; if ( sub_8F71E0(v31, (int)"WinTitle", &v29, &v30, &v25, &v26) ) { v14 = sub_421050(0); v15 = sub_8F4A20(v29 - v12, v30 - v33, v25, v26, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v24 = *v15; v16 = sub_4090F0(893815725); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v24 + 472))(v15, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( sub_8F71E0( v31, (int)"Panel01", (_DWORD *)(v2 + 372), (_DWORD *)(v2 + 376), (_DWORD *)(v2 + 380), (_DWORD *)(v2 + 384)) ) { v17 = v28; v18 = sub_8FB140(v31, (int)"Panel01", (int)&v29, (int)&v30, v28); v19 = sub_8F3EB0(v29 - v12, v30 - v33, (int)v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 240))(v19, 1); v20 = sub_8FB140(v31, (int)"Panel02", (int)&v29, (int)&v30, v17); v21 = sub_8F3EB0(v29 - v12, v30 - v33, (int)v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 240))(v21, 1); v22 = sub_8FB140(v31, (int)"ClsNor", (int)&v29, (int)&v30, v17); sub_8FB650(v22, v31, (int)"ClsClick"); sub_8FB650(v22, v31, (int)"ClsOver"); sub_8FE0F0(v29 - v12, v30 - v33, (int)v22, v2, 0, 0, 0); sub_456260(v23); LOBYTE(v32) = 2; sub_456380(v23, v31); sub_456000(v23, v12, v33); sub_455FF0(v23, v2); sub_4563D0(v23, 1, (int)"ReturnNorm", (int)"ReturnOver", (int)"ReturnClick", 0, v28); LOBYTE(v32) = 1; sub_4562E0(v23); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_421E10((_DWORD *)v2); LOBYTE(v32) = 0; sub_410C00(&v27); v32 = -1; sub_410C00(&v31); result = 1; } else { LOBYTE(v32) = 0; sub_410C00(&v27); v32 = -1; sub_410C00(&v31); result = 0; } } else { LOBYTE(v32) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v31; v32 = -1; if ( !v31 || InterlockedDecrement((volatile LONG *)(v31 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AA8EF0: using guessed type char *off_AA8EF0[2]; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004223F0) -------------------------------------------------------- char __thiscall sub_4223F0(void *this, int a2, int a3) { int v3; // eax if ( a2 ) { LOBYTE(v3) = a2 - 1; if ( a2 == 1 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v3 = sub_404D70((char *)(v3 + 5188)); if ( *(_DWORD *)v3 ) { v3 = sub_406520(*(char **)v3); if ( *(_DWORD *)v3 ) LOBYTE(v3) = (*(int (**)(void))(**(_DWORD **)v3 + 8))(); } } } } else { LOBYTE(v3) = sub_421F30((int)this); } return v3; } //----- (004224E0) -------------------------------------------------------- int __cdecl sub_4224E0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A4u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ForumWin::`vftable'; *(_DWORD *)(v2 + 232) = &ForumWin::`vftable'; *(_DWORD *)(v2 + 412) = 15; *(_DWORD *)(v2 + 408) = 0; *(_BYTE *)(v2 + 392) = 0; *(_WORD *)(v2 + 368) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AB584: using guessed type void *ForumWin::`vftable'; // 9AB5A4: using guessed type void *ForumWin::`vftable'; //----- (00422640) -------------------------------------------------------- HWND __thiscall sub_422640(_DWORD *this) { _DWORD *v1; // esi int v2; // eax LONG v3; // ecx LONG v4; // edx LONG v5; // edi unsigned int v6; // ebx void *v7; // edi void *v8; // eax char *v9; // ecx int v10; // ecx void *v11; // eax int v12; // ecx int v13; // eax _DWORD *v14; // ecx int v15; // eax _DWORD *v16; // eax HWND v17; // eax void (__thiscall *v18)(_DWORD *, int *); // edx unsigned int v19; // ecx int v21; // [esp+10h] [ebp-278h] int v22; // [esp+1Ch] [ebp-26Ch] char v23; // [esp+20h] [ebp-268h] int v24; // [esp+74h] [ebp-214h] void **v25; // [esp+78h] [ebp-210h] char v26; // [esp+C0h] [ebp-1C8h] int v27; // [esp+D0h] [ebp-1B8h] int v28; // [esp+D4h] [ebp-1B4h] int v29; // [esp+D8h] [ebp-1B0h] int v30; // [esp+DCh] [ebp-1ACh] unsigned int v31; // [esp+E0h] [ebp-1A8h] void *v32; // [esp+E4h] [ebp-1A4h] int v33; // [esp+F4h] [ebp-194h] unsigned int v34; // [esp+F8h] [ebp-190h] void *v35; // [esp+100h] [ebp-188h] int v36; // [esp+110h] [ebp-178h] unsigned int v37; // [esp+114h] [ebp-174h] struct tagRECT Rect; // [esp+11Ch] [ebp-16Ch] int v39; // [esp+12Ch] [ebp-15Ch] LONG v40; // [esp+130h] [ebp-158h] LONG v41; // [esp+134h] [ebp-154h] LONG v42; // [esp+138h] [ebp-150h] void *v43; // [esp+13Ch] [ebp-14Ch] int v44; // [esp+14Ch] [ebp-13Ch] unsigned int v45; // [esp+150h] [ebp-138h] void *v46; // [esp+158h] [ebp-130h] int v47; // [esp+168h] [ebp-120h] unsigned int v48; // [esp+16Ch] [ebp-11Ch] CHAR Filename; // [esp+174h] [ebp-114h] int v50; // [esp+284h] [ebp-4h] v1 = this; v2 = this[88]; v3 = this[89]; v4 = v1[90]; v5 = v1[91]; v6 = 0; v39 = v2; Rect.left = v2; v40 = v3; v41 = v4; v42 = v5; Rect.top = v3; Rect.right = v4; Rect.bottom = v5; AdjustWindowRectEx(&Rect, 0x40000000u, 0, 0); v1[86] = 0; sub_4018E0(v1 + 98, "https://fiesta.gamigo.com/forum/?l=", 0x23u); GetModuleFileNameA(0, &Filename, 0x104u); v48 = 15; v47 = 0; LOBYTE(v46) = 0; sub_4018E0(&v46, &Filename, strlen(&Filename)); v7 = (void *)sub_4230D0((char *)&v46, "\\/", -1, 2u); if ( v48 >= 0x10 ) operator delete(v46); v48 = 15; v47 = 0; LOBYTE(v46) = 0; sub_4018E0(&v46, &Filename, strlen(&Filename)); v50 = 0; sub_426900((const void **)&v46, (int)&v35, 0, v7); LOBYTE(v50) = 2; if ( v48 >= 0x10 ) operator delete(v46); v48 = 15; v47 = 0; LOBYTE(v46) = 0; v8 = sub_427A80(&v32, (int)&v35, "\\ressystem\\frm.dat"); LOBYTE(v50) = 3; sub_427850(&v21, (int)v8, 1, 64, 1); LOBYTE(v50) = 5; if ( v34 >= 0x10 ) operator delete(v32); v34 = 15; v33 = 0; LOBYTE(v32) = 0; if ( v24 ) { v45 = 15; v44 = 0; LOBYTE(v43) = 0; LOBYTE(v50) = 6; sub_425EB0((char *)&v21, &v43); sub_42A440((int *)&v26, "[[:digit:]]", 1u); LOBYTE(v50) = 7; v9 = (char *)v43; if ( v45 < 0x10 ) v9 = (char *)&v43; v10 = (int)&v9[v44]; v11 = v43; if ( v45 < 0x10 ) v11 = &v43; if ( sub_429CB0((int)v11, v10, 0, (int *)&v26, 16, 1) ) sub_401C20(v1 + 98, (int)&v43, 0, 0xFFFFFFFF); if ( !sub_426DB0(&v23) ) { v12 = *(_DWORD *)(v21 + 4); v13 = *(int *)((char *)&v22 + v12); v14 = (int *)((char *)&v21 + v12); v15 = v13 | 2; if ( !v14[14] ) v15 |= 4u; sub_405C10(v14, v15, 0); } LOBYTE(v50) = 6; sub_424A00((int *)&v26); LOBYTE(v50) = 5; if ( v45 >= 0x10 ) operator delete(v43); v45 = 15; v44 = 0; LOBYTE(v43) = 0; } sub_4A5240((_DWORD *)v1[74]); sub_4A5110((_DWORD *)v1[74]); v16 = v1 + 98; if ( v1[103] >= 0x10u ) v16 = (_DWORD *)*v16; v17 = (HWND)sub_427200((char)hWnd, dword_ACDC7C, v16, (int)&v39); v1[86] = v17; if ( IsWindow(v17) ) { ShowWindow((HWND)v1[86], 5); } else if ( off_AC0554 ) { off_AC0554("CreateWindow Fail", byte_9AB0E6, 0); } LOBYTE(v50) = 2; sub_4279D0(&v25); v25 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v25); v50 = -1; if ( v37 >= 0x10 ) operator delete(v35); v18 = *(void (__thiscall **)(_DWORD *, int *))(*v1 + 208); v37 = 15; v36 = 0; LOBYTE(v35) = 0; *((_BYTE *)v1 + 368) = 1; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v18(v1, &v27); v19 = v30 - v29; v31 = 0; if ( xRight >= (unsigned int)(v28 - v27) && dword_AC2F78 >= v19 ) { v6 = (unsigned int)(xRight - (v28 - v27)) >> 1; v31 = (dword_AC2F78 - v19) >> 1; } (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 172))(v1, v6); (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 176))(v1, v31); return SetFocus(hWnd); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (00422B00) -------------------------------------------------------- _DWORD *__thiscall sub_422B00(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; v4 = operator new(0x20u); if ( v4 ) { v4[1] = 20; v4[2] = 0; v4[3] = 0; v4[4] = 0; *v4 = &std::tr1::_Root_node::`vftable'; v4[7] = 0; } else { v4 = 0; } *v3 = v4; v3[1] = v4; v3[3] = a3; v3[2] = 0; v3[6] = ~(unsigned __int8)(a3 >> 9) & 4; v3[4] = a2; v3[5] = ~(unsigned __int16)(a3 >> 3) & 0x100; return v3; } // 9AB404: using guessed type void *std::tr1::_Root_node::`vftable'; //----- (00422B70) -------------------------------------------------------- int __thiscall sub_422B70(_DWORD *this) { _DWORD *v1; // edi int i; // esi _DWORD *v3; // eax int (__stdcall ***v4)(signed int); // ecx int result; // eax v1 = this; for ( i = *this; i; result = (**v4)(1) ) { v3 = (_DWORD *)(i + 12); v4 = (int (__stdcall ***)(signed int))i; i = *(_DWORD *)(i + 12); *v3 = 0; } *v1 = 0; return result; } //----- (00422BA0) -------------------------------------------------------- BOOL __thiscall sub_422BA0(char **this) { char *v1; // eax char v2; // al BOOL result; // eax v1 = *this + 1; result = 1; if ( v1 == this[2] || (_BYTE)this[17] & 8 || *v1 != 40 && *v1 != 41 ) { if ( (_BYTE)this[17] & 0x10 || (v2 = *v1, v2 != 123) && v2 != 125 ) result = 0; } return result; } //----- (00422BE0) -------------------------------------------------------- _DWORD *__thiscall sub_422BE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // ecx v1 = this; result = operator new(0x14u); if ( result ) { *result = &std::tr1::_Node_base::`vftable'; result[1] = 2; result[2] = 0; result[3] = 0; result[4] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00422C40) -------------------------------------------------------- _DWORD *__thiscall sub_422C40(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // ecx v1 = this; result = operator new(0x14u); if ( result ) { *result = &std::tr1::_Node_base::`vftable'; result[1] = 3; result[2] = 0; result[3] = 0; result[4] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00422CA0) -------------------------------------------------------- _DWORD *__thiscall sub_422CA0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // ecx v1 = this; result = operator new(0x14u); if ( result ) { *result = &std::tr1::_Node_base::`vftable'; result[1] = 4; result[2] = 0; result[3] = 0; result[4] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00422D00) -------------------------------------------------------- _DWORD *__thiscall sub_422D00(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax int v4; // ecx v2 = this; result = operator new(0x18u); if ( result ) { result[1] = 15; result[2] = 0; result[3] = 0; result[4] = 0; *result = &std::tr1::_Node_back::`vftable'; result[5] = a2; } else { result = 0; } result[4] = v2[1]; v4 = *(_DWORD *)(v2[1] + 12); if ( v4 ) { result[3] = v4; *(_DWORD *)(*(_DWORD *)(v2[1] + 12) + 16) = result; } *(_DWORD *)(v2[1] + 12) = result; v2[1] = result; return result; } // 9AB424: using guessed type void *std::tr1::_Node_back::`vftable'; //----- (00422D60) -------------------------------------------------------- char __thiscall sub_422D60(_WORD *this, char a2) { char result; // al switch ( a2 ) { case 102: result = 1; this[30] = 12; break; case 110: this[30] = 10; result = 1; break; case 114: result = 1; this[30] = 13; break; case 116: this[30] = 9; result = 1; break; case 118: result = 1; this[30] = 11; break; default: result = 0; break; } return result; } //----- (00422DD0) -------------------------------------------------------- char __thiscall sub_422DD0(_WORD *this, char a2) { char result; // al if ( a2 == 97 ) { result = 1; this[30] = 7; } else if ( a2 == 98 ) { this[30] = 8; result = 1; } else { result = 0; } return result; } //----- (00422E10) -------------------------------------------------------- _DWORD *__thiscall sub_422E10(_DWORD *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int v8; // [esp+0h] [ebp-20h] int *v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] v9 = &v8; v2 = this; v3 = operator new(0x18u); if ( v3 ) { v3[2] = 0; v3[3] = 0; v3[4] = 0; *v3 = &std::tr1::_Node_assert::`vftable'; v3[5] = 0; v4 = v3; v3[1] = (a2 != 0) + 10; } else { v4 = 0; } v10 = 0; v5 = operator new(0x14u); if ( v5 ) { *v5 = &std::tr1::_Node_base::`vftable'; v5[1] = 1; v5[2] = 0; v5[3] = 0; v5[4] = 0; } else { v5 = 0; } v4[4] = v2[1]; v6 = *(_DWORD *)(v2[1] + 12); if ( v6 ) { v4[3] = v6; *(_DWORD *)(*(_DWORD *)(v2[1] + 12) + 16) = v4; } *(_DWORD *)(v2[1] + 12) = v4; v4[5] = v5; v5[4] = v4; v2[1] = v5; return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB414: using guessed type void *std::tr1::_Node_assert::`vftable'; //----- (00422F40) -------------------------------------------------------- int __fastcall sub_422F40(int a1) { int v1; // edi unsigned int v2; // eax int v3; // esi char v5; // [esp+8h] [ebp-4h] v1 = a1; std::_Lockit::_Lockit((std::_Lockit *)&v5, 0); v2 = *(_DWORD *)(v1 + 4); if ( v2 && v2 < 0xFFFFFFFF ) *(_DWORD *)(v1 + 4) = v2 - 1; v3 = *(_DWORD *)(v1 + 4) == 0 ? v1 : 0; std::_Lockit::~_Lockit((std::_Lockit *)&v5); return v3; } //----- (00422F90) -------------------------------------------------------- void __thiscall sub_422F90(int *this) { int v1; // edi unsigned int v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi char v5; // [esp+4h] [ebp-4h] v1 = *this; if ( *this ) { std::_Lockit::_Lockit((std::_Lockit *)&v5, 0); v2 = *(_DWORD *)(v1 + 4); if ( v2 && v2 < 0xFFFFFFFF ) *(_DWORD *)(v1 + 4) = v2 - 1; v3 = -(*(_DWORD *)(v1 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v5); v4 = (void (__thiscall ***)(_DWORD, signed int))(v1 & v3); if ( v4 ) (**v4)(v4, 1); } } //----- (00422FE0) -------------------------------------------------------- signed int sub_422FE0() { return 1; } //----- (00422FF0) -------------------------------------------------------- _DWORD *__thiscall sub_422FF0(_DWORD **this, _DWORD *a2) { int v2; // esi _DWORD *v3; // edi unsigned int v4; // eax v2 = *this[12]; v3 = a2; *a2 = v2; std::_Lockit::_Lockit((std::_Lockit *)&a2, 0); v4 = *(_DWORD *)(v2 + 4); if ( v4 < 0xFFFFFFFF ) *(_DWORD *)(v2 + 4) = v4 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a2); return v3; } //----- (00423030) -------------------------------------------------------- struct std::ios_base *__thiscall sub_423030(struct std::ios_base *this, char a2) { struct std::ios_base *v2; // esi v2 = this; *(_DWORD *)this = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(this); if ( a2 & 1 ) operator delete((void *)v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (00423080) -------------------------------------------------------- __int64 __thiscall sub_423080(_DWORD **this) { __int64 result; // rax if ( *this[8] ) result = (signed int)*this[12]; else result = 0i64; return result; } //----- (004230A0) -------------------------------------------------------- void *__thiscall sub_4230A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Node_base::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (004230D0) -------------------------------------------------------- int __thiscall sub_4230D0(char *this, void *a2, int a3, size_t a4) { char *v4; // edi unsigned int v5; // eax int v6; // eax _DWORD *v7; // esi char *v8; // esi int v9; // edx v4 = this; if ( !a4 ) return -1; v5 = *((_DWORD *)this + 4); if ( !v5 ) return -1; if ( a3 >= v5 ) v6 = v5 - 1; else v6 = a3; if ( *((_DWORD *)this + 5) < 0x10u ) v7 = this; else v7 = *(_DWORD **)this; v8 = (char *)v7 + v6; if ( !memchr(a2, *v8, a4) ) { while ( v8 != (char *)sub_401490(v4) ) { v9 = *(v8-- - 1); if ( memchr(a2, v9, a4) ) goto LABEL_12; } return -1; } LABEL_12: if ( *((_DWORD *)v4 + 5) >= 0x10u ) v4 = *(char **)v4; return v8 - v4; } //----- (00423190) -------------------------------------------------------- _DWORD *__thiscall sub_423190(_DWORD **this, _DWORD *a2) { int v2; // esi _DWORD *v3; // edi unsigned int v4; // eax v2 = *this[14]; v3 = a2; *a2 = v2; std::_Lockit::_Lockit((std::_Lockit *)&a2, 0); v4 = *(_DWORD *)(v2 + 4); if ( v4 < 0xFFFFFFFF ) *(_DWORD *)(v2 + 4) = v4 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a2); return v3; } //----- (004231D0) -------------------------------------------------------- _DWORD *__thiscall sub_4231D0(_DWORD *this) { _DWORD *result; // eax this[8] = this + 6; this[9] = this + 7; this[4] = this + 2; this[12] = this + 10; this[5] = this + 3; this[13] = this + 11; this[3] = 0; *(_DWORD *)this[9] = 0; *(_DWORD *)this[13] = 0; *(_DWORD *)this[4] = 0; *(_DWORD *)this[8] = 0; result = (_DWORD *)this[12]; *result = 0; return result; } //----- (00423230) -------------------------------------------------------- signed int __stdcall sub_423230(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7) { *a4 = a2; *a7 = a5; return 3; } //----- (00423250) -------------------------------------------------------- signed int __stdcall sub_423250(int a1, int a2, int a3, _DWORD *a4) { *a4 = a2; return 3; } //----- (00423270) -------------------------------------------------------- int __stdcall sub_423270(int a1, int a2, int a3, unsigned int a4) { int result; // eax result = a3 - a2; if ( a4 < a3 - a2 ) result = a4; return result; } //----- (00423290) -------------------------------------------------------- _DWORD *__thiscall sub_423290(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // edi _DWORD *result; // eax int v6; // ecx v2 = *(_DWORD *)(a2 + 4); v3 = this; if ( v2 == 8 ) { v4 = 9; } else if ( v2 == 10 ) { v4 = 12; } else { v4 = 2 * (v2 != 11) + 12; } result = operator new(0x18u); if ( result ) { result[1] = v4; result[2] = 0; result[3] = 0; result[4] = 0; *result = &std::tr1::_Node_end_group::`vftable'; result[5] = a2; } else { result = 0; } result[4] = v3[1]; v6 = *(_DWORD *)(v3[1] + 12); if ( v6 ) { result[3] = v6; *(_DWORD *)(*(_DWORD *)(v3[1] + 12) + 16) = result; } *(_DWORD *)(v3[1] + 12) = result; v3[1] = result; return result; } // 9AB40C: using guessed type void *std::tr1::_Node_end_group::`vftable'; //----- (00423320) -------------------------------------------------------- void *__stdcall sub_423320(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x15555555 || (result = operator new(12 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00423380) -------------------------------------------------------- BOOL __thiscall sub_423380(_DWORD *this) { int v1; // ecx int v2; // eax int v3; // eax BOOL result; // eax v1 = this[1]; v2 = *(_DWORD *)(v1 + 4); result = 1; if ( v2 != 20 && v2 != 8 && v2 != 13 ) { if ( v2 != 2 || (v3 = *(_DWORD *)(*(_DWORD *)(v1 + 16) + 4), v3 != 20) && v3 != 8 && v3 != 13 ) result = 0; } return result; } //----- (004233C0) -------------------------------------------------------- _DWORD *__thiscall sub_4233C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // ecx v1 = this; result = operator new(0x14u); if ( result ) { *result = &std::tr1::_Node_base::`vftable'; result[1] = 8; result[2] = 0; result[3] = 0; result[4] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00423420) -------------------------------------------------------- _DWORD *__thiscall sub_423420(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // eax _DWORD *v6; // eax int v7; // ecx v2 = this; v3 = operator new(0x14u); if ( v3 ) { v3[1] = 17; v3[2] = 0; v3[3] = 0; v3[4] = 0; *v3 = &std::tr1::_Node_endif::`vftable'; v4 = v3; } else { v4 = 0; } v4[4] = v2[1]; v5 = *(_DWORD *)(v2[1] + 12); if ( v5 ) { v4[3] = v5; *(_DWORD *)(*(_DWORD *)(v2[1] + 12) + 16) = v4; } *(_DWORD *)(v2[1] + 12) = v4; v2[1] = v4; v6 = operator new(0x1Cu); if ( v6 ) { v6[1] = 16; v6[2] = 0; v6[3] = 0; v6[4] = 0; *v6 = &std::tr1::_Node_if::`vftable'; v6[5] = v4; v6[6] = 0; } else { v6 = 0; } v7 = *(_DWORD *)(a2 + 12); v6[4] = *(_DWORD *)(v7 + 16); *(_DWORD *)(*(_DWORD *)(v7 + 16) + 12) = v6; v6[3] = v7; *(_DWORD *)(v7 + 16) = v6; return v4; } // 9AB42C: using guessed type void *std::tr1::_Node_endif::`vftable'; // 9AB434: using guessed type void *std::tr1::_Node_if::`vftable'; //----- (004234D0) -------------------------------------------------------- _DWORD *__thiscall sub_4234D0(_DWORD *this, _DWORD *a2) { int v2; // esi _DWORD *v3; // edi unsigned int v4; // eax v2 = this[2]; v3 = a2; *a2 = v2; std::_Lockit::_Lockit((std::_Lockit *)&a2, 0); v4 = *(_DWORD *)(v2 + 4); if ( v4 < 0xFFFFFFFF ) *(_DWORD *)(v2 + 4) = v4 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a2); return v3; } //----- (00423510) -------------------------------------------------------- char **__cdecl sub_423510(char **a1, char *a2, char *a3, _DWORD *a4) { _DWORD *v4; // eax int v5; // esi unsigned int v6; // edx char *v7; // ecx unsigned int v8; // edi _BYTE *v9; // eax char v10; // bl char **result; // eax int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v4 = a4; if ( a4 ) { while ( 1 ) { v5 = 0; v13 = 0; v12 = v4[2]; if ( v12 > 0 ) break; LABEL_11: v4 = (_DWORD *)v4[4]; a4 = v4; if ( !v4 ) goto LABEL_12; } v6 = *v4; while ( 1 ) { v7 = a2; v8 = 0; if ( v6 ) { v9 = (_BYTE *)(v5 + v4[3]); do { v10 = *v7++; if ( v10 != *v9 ) break; ++v8; ++v9; } while ( v8 < v6 ); v4 = a4; } if ( v7 == a3 ) break; v5 = v6 + v13; v13 = v5; if ( v5 >= v12 ) goto LABEL_11; } result = a1; *a1 = a3; } else { LABEL_12: result = a1; *a1 = a2; } return result; } //----- (00423590) -------------------------------------------------------- int *__cdecl sub_423590(int *a1, int a2, _BYTE *a3, char *a4, char *a5, int a6, char a7) { _BYTE *v7; // eax char *v8; // ecx char v9; // bl _BYTE *v10; // esi int *result; // eax bool v12; // zf int *v13; // eax int v14; // edx int v15; // [esp+Ch] [ebp-4h] v7 = (_BYTE *)a2; v8 = a4; v15 = a2; if ( (_BYTE *)a2 != a3 ) { while ( v8 != a5 ) { v9 = *v8; v10 = v7++; a2 = (int)v7; ++v8; if ( *v10 != v9 ) { result = a1; *a1 = v15; return result; } if ( v7 == a3 ) goto LABEL_5; } goto LABEL_6; } LABEL_5: if ( v8 == a5 ) { LABEL_6: result = a1; *a1 = a2; return result; } if ( !a7 || (v12 = v7 == a3, v13 = &a2, !v12) ) v13 = &v15; v14 = *v13; result = a1; *a1 = v14; return result; } //----- (00423610) -------------------------------------------------------- int *__cdecl sub_423610(int *a1, int a2, _BYTE *a3, _BYTE *a4, _BYTE *a5, int a6, char a7) { _BYTE *v7; // eax _BYTE *v8; // ecx _BYTE *v9; // esi _BYTE *v10; // edi int *result; // eax bool v12; // zf int *v13; // eax int v14; // edx int v15; // [esp+Ch] [ebp-4h] v7 = (_BYTE *)a2; v8 = a4; v15 = a2; if ( (_BYTE *)a2 != a3 ) { while ( v8 != a5 ) { v9 = v8; v10 = v7; ++v8; ++v7; a4 = v8; a2 = (int)v7; if ( *v10 != *v9 ) { result = a1; *a1 = v15; return result; } if ( v7 == a3 ) goto LABEL_5; } goto LABEL_6; } LABEL_5: if ( v8 == a5 ) { LABEL_6: result = a1; *a1 = a2; return result; } if ( !a7 || (v12 = v7 == a3, v13 = &a2, !v12) ) v13 = &v15; v14 = *v13; result = a1; *a1 = v14; return result; } //----- (00423690) -------------------------------------------------------- signed int __thiscall sub_423690(_DWORD *this) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // eax signed int result; // eax v1 = this; ++v1[3]; if ( this[3] >= 0x20u ) std::tr1::_Xbad(11); v2 = this[3]; v3 = operator new(0x18u); if ( v3 ) { v3[5] = v2; v3[1] = 13; v3[2] = 0; v3[3] = 0; v3[4] = 0; *v3 = &std::tr1::_Node_capture::`vftable'; v4 = v3; } else { v4 = 0; } v4[4] = v1[7]; v5 = *(_DWORD *)(v1[7] + 12); if ( v5 ) { v4[3] = v5; *(_DWORD *)(*(_DWORD *)(v1[7] + 12) + 16) = v4; } *(_DWORD *)(v1[7] + 12) = v4; v1[7] = v4; sub_42A150(v1); sub_423290(v1 + 6, (int)v4); result = 1 << v4[5]; v1[5] |= result; return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); // 9AB41C: using guessed type void *std::tr1::_Node_capture::`vftable'; //----- (00423720) -------------------------------------------------------- _DWORD *__thiscall sub_423720(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax int v3; // esi int v4; // eax v1 = this; v2 = operator new(0x14u); if ( v2 ) { *v2 = &std::tr1::_Node_base::`vftable'; v2[1] = 8; v2[2] = 0; v2[3] = 0; v2[4] = 0; v3 = (int)v2; } else { v3 = 0; } *(_DWORD *)(v3 + 16) = v1[7]; v4 = *(_DWORD *)(v1[7] + 12); if ( v4 ) { *(_DWORD *)(v3 + 12) = v4; *(_DWORD *)(*(_DWORD *)(v1[7] + 12) + 16) = v3; } *(_DWORD *)(v1[7] + 12) = v3; v1[7] = v3; sub_42A150(v1); return sub_423290(v1 + 6, v3); } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00423790) -------------------------------------------------------- _DWORD *__thiscall sub_423790(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // edx v1 = this; result = operator new(0x2Cu); if ( result ) { result[1] = 7; result[2] = 0; result[3] = 0; result[4] = 0; *result = &std::tr1::_Node_class>::`vftable'; result[5] = 0; result[6] = 0; result[7] = 0; result[8] = 0; *((_WORD *)result + 18) = 0; result[10] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB44C: using guessed type void *std::tr1::_Node_class>::`vftable'; //----- (00423800) -------------------------------------------------------- _DWORD *__thiscall sub_423800(void *this, char a2) { _DWORD *v2; // esi v2 = this; free(*((void **)this + 7)); *v2 = &std::tr1::_Node_base::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (00423830) -------------------------------------------------------- _BYTE *__thiscall sub_423830(void *this, _BYTE *a2, _BYTE *a3) { _BYTE *result; // eax void *i; // esi unsigned int v5; // ecx int v6; // edi void *v7; // ebx char v8; // [esp+7h] [ebp-1h] result = a2; for ( i = this; result != a3; a2 = result ) { v8 = *result; v5 = *((_DWORD *)i + 1); if ( *(_DWORD *)i <= v5 ) { v6 = v5 + 16; v7 = realloc(*((void **)i + 2), v5 + 16); if ( !v7 ) unknown_libname_20(); result = a2; *((_DWORD *)i + 2) = v7; *(_DWORD *)i = v6; } ++result; *(_BYTE *)((*((_DWORD *)i + 1))++ + *((_DWORD *)i + 2)) = v8; } return result; } // 7D3654: using guessed type int unknown_libname_20(void); //----- (004238A0) -------------------------------------------------------- int __thiscall sub_4238A0(int this, unsigned __int8 a2) { return _Tolower(a2, (const _Ctypevec *)(this + 8)); } //----- (004238C0) -------------------------------------------------------- _BYTE *__thiscall sub_4238C0(char *this, _BYTE *a2, _BYTE *a3) { _BYTE *v3; // esi const _Ctypevec *v4; // edi v3 = a2; if ( a2 != a3 ) { v4 = (const _Ctypevec *)(this + 8); do { *v3 = _Tolower((unsigned __int8)*v3, v4); ++v3; } while ( v3 != a3 ); } return v3; } //----- (004238F0) -------------------------------------------------------- int __thiscall sub_4238F0(int this, unsigned __int8 a2) { return _Toupper(a2, (const _Ctypevec *)(this + 8)); } //----- (00423910) -------------------------------------------------------- _BYTE *__thiscall sub_423910(char *this, _BYTE *a2, _BYTE *a3) { _BYTE *v3; // esi const _Ctypevec *v4; // edi v3 = a2; if ( a2 != a3 ) { v4 = (const _Ctypevec *)(this + 8); do { *v3 = _Toupper((unsigned __int8)*v3, v4); ++v3; } while ( v3 != a3 ); } return v3; } //----- (00423950) -------------------------------------------------------- int __stdcall sub_423950(void *a1, int a2, void *a3) { memcpy(a3, a1, a2 - (_DWORD)a1); return a2; } //----- (00423990) -------------------------------------------------------- int __stdcall sub_423990(void *a1, int a2, int a3, void *a4) { memcpy(a4, a1, a2 - (_DWORD)a1); return a2; } //----- (004239C0) -------------------------------------------------------- _DWORD *__thiscall sub_4239C0(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 5); *(_DWORD *)this = &std::ctype::`vftable'; if ( v3 <= 0 ) { if ( v3 < 0 ) operator delete[](*((void **)this + 4)); } else { free(*((void **)this + 4)); } *v2 = &std::locale::facet::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB460: using guessed type void *std::locale::facet::`vftable'; // 9AB4EC: using guessed type void *std::ctype::`vftable'; //----- (00423A10) -------------------------------------------------------- _DWORD *__thiscall sub_423A10(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax _DWORD *v3; // ebx unsigned int v4; // eax char v5; // [esp+Ch] [ebp-8h] int v6; // [esp+10h] [ebp-4h] v1 = this; this[12] = 0; this[2] = 0; this[4] = 0; this[5] = 513; this[6] = 6; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; sub_405C10(this, 0, 0); result = operator new(4u); v3 = result; if ( result ) { *result = std::locale::_Init(); v6 = sub_7D3A0B(); std::_Lockit::_Lockit((std::_Lockit *)&v5, 0); v4 = *(_DWORD *)(v6 + 4); if ( v4 < 0xFFFFFFFF ) *(_DWORD *)(v6 + 4) = v4 + 1; result = (_DWORD *)std::_Lockit::~_Lockit((std::_Lockit *)&v5); v1[12] = v3; } else { v1[12] = 0; } return result; } //----- (00423AE0) -------------------------------------------------------- int __thiscall sub_423AE0(_DWORD *this) { int v1; // esi int *v2; // ebx int v3; // edi unsigned int v4; // eax int v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // esi char v8; // [esp+8h] [ebp-8h] _DWORD *v9; // [esp+Ch] [ebp-4h] v1 = (int)this; v2 = (int *)this[14]; v9 = this; *this = &std::basic_streambuf>::`vftable'; if ( v2 ) { v3 = *v2; if ( *v2 ) { std::_Lockit::_Lockit((std::_Lockit *)&v8, 0); v4 = *(_DWORD *)(v3 + 4); if ( v4 && v4 < 0xFFFFFFFF ) *(_DWORD *)(v3 + 4) = v4 - 1; v5 = -(*(_DWORD *)(v3 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v8); v6 = (void (__thiscall ***)(_DWORD, signed int))(v3 & v5); if ( v6 ) (**v6)(v6, 1); v1 = (int)v9; } operator delete(v2); } return std::_Mutex::~_Mutex((std::_Mutex *)(v1 + 4)); } // 9AB514: using guessed type void *std::basic_streambuf>::`vftable'; //----- (00423B60) -------------------------------------------------------- int __thiscall sub_423B60(LPCRITICAL_SECTION *this) { return unknown_libname_23(this[1]); } //----- (00423B70) -------------------------------------------------------- void __thiscall sub_423B70(LPCRITICAL_SECTION *this) { sub_7D4219(this[1]); } //----- (00423B80) -------------------------------------------------------- signed int __stdcall sub_423B80(int a1) { return -1; } //----- (00423B90) -------------------------------------------------------- __int64 sub_423B90() { return 0i64; } //----- (00423BA0) -------------------------------------------------------- signed int sub_423BA0() { return -1; } //----- (00423BB0) -------------------------------------------------------- void *__thiscall sub_423BB0(void *this, int a2, int a3, int a4) { return this; } //----- (00423BC0) -------------------------------------------------------- int __thiscall sub_423BC0(_DWORD **this) { _DWORD **v1; // esi int result; // eax _DWORD *v3; // eax unsigned __int8 *v4; // ecx v1 = this; result = ((int (*)(void))(*this)[6])(); if ( result != -1 ) { --*v1[12]; v3 = v1[8]; v4 = (unsigned __int8 *)(*v3)++; result = *v4; } return result; } //----- (00423BF0) -------------------------------------------------------- __int64 __thiscall sub_423BF0(void *this, void *a2, int a3, int a4) { void *v4; // ebx __int64 v5; // rax int v6; // edi int v7; // esi unsigned __int64 v8; // kr00_8 int v9; // eax unsigned __int64 v10; // kr08_8 __int64 v12; // [esp+4h] [ebp-8h] v4 = this; v12 = 0i64; if ( __PAIR__(a4, a3) > 0 ) { do { v5 = sub_423080((_DWORD **)v4); v6 = HIDWORD(v5); v7 = v5; if ( v5 >= 0 && (SHIDWORD(v5) > 0 || (_DWORD)v5) ) { if ( __PAIR__(a4, a3) < v5 ) { v7 = a3; v6 = a4; } memcpy(a2, **((const void ***)v4 + 8), v7); a2 = (char *)a2 + v7; v12 += __PAIR__(v6, v7); v8 = __PAIR__(a4, a3) - __PAIR__(v6, v7); a4 = v8 >> 32; a3 = v8; **((_DWORD **)v4 + 12) -= v7; **((_DWORD **)v4 + 8) += v7; } else { v9 = (*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 28))(v4); if ( v9 == -1 ) return v12; ++v12; *(_BYTE *)a2 = v9; a2 = (char *)a2 + 1; v10 = __PAIR__(a4, a3) - 1; a4 = v10 >> 32; a3 = v10; } } while ( a4 > 0 || a4 >= 0 && a3 ); } return v12; } //----- (00423CC0) -------------------------------------------------------- __int64 __thiscall sub_423CC0(void *this, void *a2, int a3, int a4) { void *v4; // ebx __int64 v5; // rax int v6; // edi int v7; // esi unsigned __int64 v8; // kr00_8 unsigned __int64 v9; // kr08_8 __int64 v11; // [esp+4h] [ebp-8h] v4 = this; v11 = 0i64; if ( __PAIR__(a4, a3) > 0 ) { do { v5 = sub_405B60((_DWORD **)v4); v6 = HIDWORD(v5); v7 = v5; if ( v5 >= 0 && (SHIDWORD(v5) > 0 || (_DWORD)v5) ) { if ( __PAIR__(a4, a3) < v5 ) { v7 = a3; v6 = a4; } memcpy(**((void ***)v4 + 9), a2, v7); a2 = (char *)a2 + v7; v11 += __PAIR__(v6, v7); v8 = __PAIR__(a4, a3) - __PAIR__(v6, v7); a4 = v8 >> 32; a3 = v8; **((_DWORD **)v4 + 13) -= v7; **((_DWORD **)v4 + 9) += v7; } else { if ( (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v4 + 12))(v4, *(unsigned __int8 *)a2) == -1 ) return v11; a2 = (char *)a2 + 1; ++v11; v9 = __PAIR__(a4, a3) - 1; a4 = v9 >> 32; a3 = v9; } } while ( a4 > 0 || a4 >= 0 && a3 ); } return v11; } //----- (00423D90) -------------------------------------------------------- _DWORD *__stdcall sub_423D90(_DWORD *a1, int a2, int a3, int a4, int a5) { _DWORD *result; // eax result = a1; *a1 = -1; a1[1] = -1; a1[2] = 0; a1[3] = 0; a1[4] = 0; return result; } //----- (00423DC0) -------------------------------------------------------- _DWORD *__stdcall sub_423DC0(_DWORD *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *result; // eax result = a1; *a1 = -1; a1[1] = -1; a1[2] = 0; a1[3] = 0; a1[4] = 0; return result; } //----- (00423DF0) -------------------------------------------------------- char *__thiscall sub_423DF0(struct std::ios_base *this, char a2) { char *v2; // esi v2 = (char *)this - 16; *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 4) + 4) - 16) = &std::basic_istream>::`vftable'; *(_DWORD *)this = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9AB470: using guessed type void *std::basic_istream>::`vftable'; //----- (00423E30) -------------------------------------------------------- void *__thiscall sub_423E30(void *this, char a2) { void *v2; // esi v2 = this; sub_423AE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00423E60) -------------------------------------------------------- void __thiscall sub_423E60(_DWORD *this) { int v1; // edi unsigned int v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi char v5; // [esp+4h] [ebp-4h] v1 = this[2]; if ( v1 ) { std::_Lockit::_Lockit((std::_Lockit *)&v5, 0); v2 = *(_DWORD *)(v1 + 4); if ( v2 && v2 < 0xFFFFFFFF ) *(_DWORD *)(v1 + 4) = v2 - 1; v3 = -(*(_DWORD *)(v1 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v5); v4 = (void (__thiscall ***)(_DWORD, signed int))(v1 & v3); if ( v4 ) (**v4)(v4, 1); } } //----- (00423EB0) -------------------------------------------------------- int __thiscall sub_423EB0(int this, int a2, int a3) { int result; // eax *(_DWORD *)(this + 16) = this + 8; *(_DWORD *)(this + 32) = this + 24; *(_DWORD *)(this + 36) = this + 28; *(_BYTE *)(this + 80) = a3 == 1; *(_DWORD *)(this + 48) = this + 40; *(_BYTE *)(this + 73) = 0; *(_DWORD *)(this + 20) = this + 12; *(_DWORD *)(this + 52) = this + 44; *(_DWORD *)(this + 12) = 0; **(_DWORD **)(this + 36) = 0; **(_DWORD **)(this + 52) = 0; **(_DWORD **)(this + 16) = 0; **(_DWORD **)(this + 32) = 0; **(_DWORD **)(this + 48) = 0; result = a2; if ( a2 ) { *(_DWORD *)(this + 16) = a2 + 8; *(_DWORD *)(this + 20) = a2 + 8; *(_DWORD *)(this + 32) = a2; *(_DWORD *)(this + 36) = a2; *(_DWORD *)(this + 48) = a2 + 4; *(_DWORD *)(this + 52) = a2 + 4; } *(_DWORD *)(this + 84) = a2; *(_DWORD *)(this + 76) = dword_ACB210; *(_DWORD *)(this + 68) = 0; return result; } // ACB210: using guessed type int dword_ACB210; //----- (00423F50) -------------------------------------------------------- _DWORD *__thiscall sub_423F50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ebx unsigned int v4; // eax char v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v1 = this; *this = &std::basic_streambuf>::`vftable'; std::_Mutex::_Mutex((std::_Mutex *)(this + 1)); v7 = 0; v2 = operator new(4u); if ( v2 ) { *v2 = std::locale::_Init(); v3 = sub_7D3A0B(); std::_Lockit::_Lockit((std::_Lockit *)&v6, 0); v4 = *(_DWORD *)(v3 + 4); if ( v4 < 0xFFFFFFFF ) *(_DWORD *)(v3 + 4) = v4 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&v6); } else { v2 = 0; } v1[4] = v1 + 2; v1[8] = v1 + 6; v1[9] = v1 + 7; v1[14] = v2; v1[5] = v1 + 3; v1[12] = v1 + 10; v1[13] = v1 + 11; v1[3] = 0; *(_DWORD *)v1[9] = 0; *(_DWORD *)v1[13] = 0; *(_DWORD *)v1[4] = 0; *(_DWORD *)v1[8] = 0; *(_DWORD *)v1[12] = 0; return v1; } // 9AB514: using guessed type void *std::basic_streambuf>::`vftable'; //----- (00424040) -------------------------------------------------------- void __thiscall sub_424040(_DWORD *this) { int v1; // edi unsigned int v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi char v5; // [esp+4h] [ebp-4h] v1 = this[141]; if ( v1 ) { std::_Lockit::_Lockit((std::_Lockit *)&v5, 0); v2 = *(_DWORD *)(v1 + 4); if ( v2 && v2 < 0xFFFFFFFF ) *(_DWORD *)(v1 + 4) = v2 - 1; v3 = -(*(_DWORD *)(v1 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v5); v4 = (void (__thiscall ***)(_DWORD, signed int))(v1 & v3); if ( v4 ) (**v4)(v4, 1); } } //----- (00424090) -------------------------------------------------------- int __thiscall sub_424090(_BYTE *this) { _BYTE *v1; // esi char v2; // al signed int v3; // eax int result; // eax bool v5; // zf v1 = this; if ( *(_DWORD *)this == *((_DWORD *)this + 2) ) { this[62] = -1; *((_DWORD *)this + 16) = -1; } else { v2 = **(_BYTE **)this; this[62] = v2; if ( v2 == -1 ) { v3 = -1; } else if ( strchr("()$^.*+?[]|\\-{},:=!\n\r\b", v2) ) { v3 = (char)v1[62]; } else { v3 = 0; } *((_DWORD *)v1 + 16) = v3; } result = (char)v1[62]; switch ( result ) { case 10: if ( v1[68] & 4 ) { if ( !*((_DWORD *)v1 + 4) ) *((_DWORD *)v1 + 16) = 124; } return result; case 36: if ( *((_DWORD *)v1 + 17) & 0x2000000 ) { result = *(_DWORD *)v1 + 1; if ( result != *((_DWORD *)v1 + 2) && *(_BYTE *)result != 10 ) *((_DWORD *)v1 + 16) = 0; } return result; case 40: case 41: v5 = (v1[68] & 8) == 0; goto LABEL_28; case 42: if ( *((_DWORD *)v1 + 17) & 0x4000000 ) { result = sub_423380((_DWORD *)v1 + 6); if ( (_BYTE)result ) *((_DWORD *)v1 + 16) = 0; } return result; case 43: case 63: v5 = (v1[68] & 1) == 0; goto LABEL_28; case 92: result = sub_422BA0((char **)v1); if ( (_BYTE)result ) { LOBYTE(result) = *(_BYTE *)(*(_DWORD *)v1 + 1); v1[62] = result; result = (char)result; *((_DWORD *)v1 + 16) = (char)result; } return result; case 94: if ( !(*((_DWORD *)v1 + 17) & 0x2000000) ) return result; result = sub_423380((_DWORD *)v1 + 6); v5 = (_BYTE)result == 0; goto LABEL_28; case 123: case 125: v5 = (v1[68] & 0x10) == 0; goto LABEL_28; case 124: v5 = (v1[68] & 2) == 0; LABEL_28: if ( v5 ) *((_DWORD *)v1 + 16) = 0; break; default: return result; } return result; } //----- (00424240) -------------------------------------------------------- int __thiscall sub_424240(_BYTE *this) { _BYTE *v1; // eax _BYTE *v2; // edx _BYTE *v3; // eax v1 = *(_BYTE **)this; v2 = (_BYTE *)*((_DWORD *)this + 2); if ( *(_BYTE **)this != v2 ) { if ( *v1 == 92 ) { if ( (v3 = v1 + 1, v3 != v2) && !(this[68] & 8) && (*v3 == 40 || *v3 == 41) || !(this[68] & 0x10) && (*v3 == 123 || *v3 == 125) ) { *(_DWORD *)this = v3; } } ++*(_DWORD *)this; } return sub_424090(this); } //----- (00424280) -------------------------------------------------------- int __thiscall sub_424280(_DWORD *this, int a2, int a3) { _BYTE *v3; // esi _BYTE *v4; // eax _BYTE *v5; // ecx _BYTE *v6; // eax v3 = this; if ( this[16] != a2 ) std::tr1::_Xbad(a3); v4 = (_BYTE *)*this; v5 = (_BYTE *)this[2]; if ( *(_BYTE **)v3 != v5 ) { if ( *v4 == 92 ) { if ( (v6 = v4 + 1, v6 != v5) && !(v3[68] & 8) && (*v6 == 40 || *v6 == 41) || !(v3[68] & 0x10) && (*v6 == 123 || *v6 == 125) ) { *(_DWORD *)v3 = v6; } } ++*(_DWORD *)v3; } return sub_424090(v3); } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (004242F0) -------------------------------------------------------- char __fastcall sub_4242F0(int a1) { int v1; // esi int v2; // eax int v3; // edi char result; // al v1 = a1; v2 = *(_DWORD *)(a1 + 68); ++*(_DWORD *)(v1 + 16); if ( !(v2 & 0x8000000) && *(_DWORD *)(a1 + 64) == 41 ) std::tr1::_Xbad(5); if ( v2 & 0x20 && *(_DWORD *)(a1 + 64) == 63 ) { sub_424240((_BYTE *)a1); v3 = *(_DWORD *)(v1 + 64); sub_424240((_BYTE *)v1); if ( v3 == 58 ) { a1 = v1; LABEL_8: sub_423720((_DWORD *)a1); --*(_DWORD *)(v1 + 16); return 1; } if ( v3 == 33 ) { sub_42A2D0((_DWORD *)v1, 1); --*(_DWORD *)(v1 + 16); result = 0; } else { if ( v3 != 61 ) std::tr1::_Xbad(14); sub_42A2D0((_DWORD *)v1, 0); --*(_DWORD *)(v1 + 16); result = 0; } } else { if ( *(_DWORD *)(a1 + 56) & 0x200 ) goto LABEL_8; sub_423690((_DWORD *)a1); --*(_DWORD *)(v1 + 16); result = 1; } return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (004243A0) -------------------------------------------------------- _DWORD *__thiscall sub_4243A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // ecx v1 = this; result = operator new(0x20u); if ( result ) { result[1] = 6; result[2] = 0; result[3] = 0; result[4] = 0; *result = &std::tr1::_Node_str::`vftable'; result[5] = 0; result[6] = 0; result[7] = 0; } else { result = 0; } result[4] = v1[1]; v3 = *(_DWORD *)(v1[1] + 12); if ( v3 ) { result[3] = v3; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = result; } *(_DWORD *)(v1[1] + 12) = result; v1[1] = result; return result; } // 9AB4E4: using guessed type void *std::tr1::_Node_str::`vftable'; //----- (00424400) -------------------------------------------------------- int __stdcall sub_424400(char *a1, char *a2) { char *v2; // ecx int result; // eax int v4; // esi v2 = a1; for ( result = 0; v2 != a2; result = v4 + __ROL4__(result, 8) ) v4 = *v2++; return result; } //----- (00424430) -------------------------------------------------------- int __thiscall sub_424430(const _Collvec *this, char *a2, char *a3, char *a4, char *a5) { return _Strcoll(a2, a3, a4, a5, this + 1); } //----- (00424460) -------------------------------------------------------- int __thiscall sub_424460(_WORD *this, int a2, int a3) { int v3; // ebx _WORD *v4; // esi char v5; // al int v6; // eax _BYTE *v7; // ecx __int16 v8; // dx _BYTE *v9; // eax _BYTE *v10; // eax v3 = a3; v4 = this; this[30] = 0; if ( a3 ) { while ( 1 ) { v5 = *((_BYTE *)v4 + 62); if ( a2 == 8 ) { if ( (unsigned __int8)(v5 - 48) > 7u ) return v3; } else if ( v5 < 48 || v5 > 57 ) { if ( a2 != 16 ) return v3; if ( (unsigned __int8)(v5 - 97) > 5u ) { if ( (unsigned __int8)(v5 - 65) > 5u ) return v3; v6 = v5 - 55; } else { v6 = v5 - 87; } goto LABEL_12; } v6 = v5 - 48; LABEL_12: if ( v6 != -1 ) { v7 = (_BYTE *)*((_DWORD *)v4 + 2); v8 = v6 + a2 * v4[30]; v9 = *(_BYTE **)v4; --v3; v4[30] = v8; if ( v9 != v7 ) { if ( *v9 == 92 ) { if ( (v10 = v9 + 1, v10 != v7) && !(v4[34] & 8) && (*v10 == 40 || *v10 == 41) || !(v4[34] & 0x10) && (*v10 == 123 || *v10 == 125) ) { *(_DWORD *)v4 = v10; } } ++*(_DWORD *)v4; } sub_424090(v4); if ( v3 ) continue; } return v3; } } return v3; } //----- (00424530) -------------------------------------------------------- _BYTE *__stdcall sub_424530(_BYTE *a1, _BYTE *a2, unsigned int a3, _DWORD **a4) { int v4; // esi _DWORD *v5; // edi _DWORD *v6; // eax unsigned int *v7; // eax v4 = (int)a4; v5 = *a4; if ( !*a4 ) goto LABEL_13; do { v6 = *(_DWORD **)v4; if ( a3 >= **(_DWORD **)v4 ) break; v4 = (int)(v6 + 4); } while ( v6[4] ); v5 = *(_DWORD **)v4; if ( !*(_DWORD *)v4 || a3 != *v5 ) { LABEL_13: v7 = (unsigned int *)operator new(0x14u); if ( v7 ) { *v7 = a3; v7[1] = 0; v7[2] = 0; v7[3] = 0; } else { v7 = 0; } *(_DWORD *)v4 = v7; v7[4] = (unsigned int)v5; } return sub_423830((void *)(*(_DWORD *)v4 + 4), a1, a2); } //----- (004245A0) -------------------------------------------------------- _BYTE *__cdecl sub_4245A0(_BYTE *a1, _BYTE *a2, _BYTE *a3) { _BYTE *v3; // ecx _BYTE *result; // eax v3 = a1; for ( result = a3; v3 != a2; ++result ) { if ( result ) *result = *v3; ++v3; } return result; } //----- (004245D0) -------------------------------------------------------- struct std::_Locinfo *__thiscall sub_4245D0(struct std::_Locinfo *this, char *a2) { struct std::_Locinfo *v2; // esi void **v4; // [esp+Ch] [ebp-1Ch] struct std::_Locinfo *v5; // [esp+18h] [ebp-10h] int v6; // [esp+24h] [ebp-4h] v2 = this; v5 = this; std::_Lockit::_Lockit(this, 0); v6 = 0; *((_DWORD *)v2 + 1) = 0; *((_BYTE *)v2 + 8) = 0; *((_DWORD *)v2 + 3) = 0; *((_BYTE *)v2 + 16) = 0; *((_DWORD *)v2 + 5) = 0; *((_BYTE *)v2 + 24) = 0; *((_DWORD *)v2 + 7) = 0; *((_BYTE *)v2 + 32) = 0; LOBYTE(v6) = 4; if ( !a2 ) { a2 = "bad locale name"; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::runtime_error::`vftable'; _CxxThrowException(&v4, &_TI2_AVruntime_error_std__); } std::_Locinfo::_Locinfo_ctor(v2, a2); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A79E0: using guessed type void *std::runtime_error::`vftable'; // A7C9D4: using guessed type int _TI2_AVruntime_error_std__; //----- (00424680) -------------------------------------------------------- int __thiscall sub_424680(std::_Lockit *this) { void **v1; // esi v1 = (void **)this; std::_Locinfo::_Locinfo_dtor(this); if ( v1[7] ) free(v1[7]); v1[7] = 0; if ( v1[5] ) free(v1[5]); v1[5] = 0; if ( v1[3] ) free(v1[3]); v1[3] = 0; if ( v1[1] ) free(v1[1]); v1[1] = 0; return std::_Lockit::~_Lockit((std::_Lockit *)v1); } //----- (00424730) -------------------------------------------------------- signed int __cdecl sub_424730(_DWORD *a1, int a2) { char v2; // bl _DWORD *v3; // esi char *v4; // eax _Ctypevec *v5; // eax char v7; // [esp+Ch] [ebp-44h] char v8; // [esp+30h] [ebp-20h] void *v9; // [esp+40h] [ebp-10h] int v10; // [esp+4Ch] [ebp-4h] v2 = 0; v9 = 0; if ( a1 && !*a1 ) { v3 = operator new(0x18u); v9 = v3; v10 = 0; if ( v3 ) { if ( *(_DWORD *)(*(_DWORD *)a2 + 24) ) v4 = *(char **)(*(_DWORD *)a2 + 24); else v4 = (char *)(*(_DWORD *)a2 + 28); sub_4245D0((struct std::_Locinfo *)&v7, v4); v2 = 1; v3[1] = 0; *v3 = &std::ctype::`vftable'; v5 = _Getctype((_Ctypevec *)&v8); v3[2] = v5->_Hand; v3[3] = v5->_Page; v3[4] = v5->_Table; v3[5] = v5->_Delfl; } else { v3 = 0; } v10 = -1; *a1 = v3; if ( v2 & 1 ) sub_424680((std::_Lockit *)&v7); } return 2; } // 9AB4EC: using guessed type void *std::ctype::`vftable'; //----- (00424810) -------------------------------------------------------- int __thiscall sub_424810(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *v3; // esi unsigned __int8 *v4; // eax int result; // eax _DWORD *v6; // edx _DWORD *v7; // eax unsigned __int8 *v8; // ecx _DWORD *v9; // eax v1 = this; v2 = *this[8]; if ( !v2 ) goto LABEL_15; if ( *this[12] > 1 ) { --*this[12]; v3 = this[8]; v4 = (unsigned __int8 *)(*v3 + 1); *v3 = v4; return *v4; } if ( v2 && (v6 = this[12], *v6 > 0) ) { --*v6; v7 = this[8]; v8 = (unsigned __int8 *)(*v7)++; result = *v8; } else { LABEL_15: result = ((int (__thiscall *)(_DWORD **))(*this)[7])(this); } if ( result != -1 ) { v9 = v1[8]; if ( *v9 && *v1[12] > 0 ) result = *(unsigned __int8 *)*v9; else result = ((int (__thiscall *)(_DWORD **))(*v1)[6])(v1); } return result; } //----- (00424890) -------------------------------------------------------- int *__thiscall sub_424890(_DWORD *this, int *a2) { _DWORD *v2; // eax int v3; // ecx int *result; // eax if ( this[5] < 0x10u ) v2 = this; else v2 = (_DWORD *)*this; v3 = (int)v2 + this[4]; result = a2; *a2 = v3; return result; } //----- (004248C0) -------------------------------------------------------- struct std::locale::facet *__cdecl sub_4248C0(int a1) { int v1; // ebx int v2; // edi unsigned int v3; // esi int v4; // eax struct std::locale::facet *v5; // ecx int v6; // eax struct std::locale::facet *v7; // esi unsigned int v8; // eax char v10; // [esp+10h] [ebp-24h] char v11; // [esp+1Ch] [ebp-18h] char v12; // [esp+20h] [ebp-14h] struct std::locale::facet *v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] std::_Lockit::_Lockit((std::_Lockit *)&v11, 0); v1 = dword_ACB214; v14 = 0; v13 = (struct std::locale::facet *)dword_ACB214; if ( !dword_BA2A34 ) { std::_Lockit::_Lockit((std::_Lockit *)&v12, 0); if ( !dword_BA2A34 ) dword_BA2A34 = ++dword_BA2A30; std::_Lockit::~_Lockit((std::_Lockit *)&v12); } v2 = a1; v3 = dword_BA2A34; v4 = *(_DWORD *)a1; if ( (unsigned int)dword_BA2A34 >= *(_DWORD *)(*(_DWORD *)a1 + 12) ) { v5 = 0; } else { v5 = *(struct std::locale::facet **)(*(_DWORD *)(v4 + 8) + 4 * dword_BA2A34); if ( v5 ) { LABEL_11: v7 = v5; LABEL_12: if ( v7 ) goto LABEL_21; goto LABEL_13; } } if ( !*(_BYTE *)(v4 + 20) ) goto LABEL_11; v6 = sub_7D3A0B(); if ( v3 < *(_DWORD *)(v6 + 12) ) { v7 = *(struct std::locale::facet **)(*(_DWORD *)(v6 + 8) + 4 * v3); goto LABEL_12; } LABEL_13: if ( v1 ) { v7 = (struct std::locale::facet *)v1; } else { if ( sub_424730(&v13, v2) == -1 ) { sub_7D43D9((std::exception *)&v10, "bad cast"); _CxxThrowException(&v10, &_TI2_AVbad_cast_std__); } v7 = v13; dword_ACB214 = (int)v13; std::_Lockit::_Lockit((std::_Lockit *)&a1, 0); v8 = *((_DWORD *)v7 + 1); if ( v8 < 0xFFFFFFFF ) *((_DWORD *)v7 + 1) = v8 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a1); std::locale::facet::_Facet_Register(v7); } LABEL_21: v14 = -1; std::_Lockit::~_Lockit((std::_Lockit *)&v11); return v7; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A7CAB4: using guessed type int _TI2_AVbad_cast_std__; // ACB214: using guessed type int dword_ACB214; // BA2A30: using guessed type int dword_BA2A30; // BA2A34: using guessed type int dword_BA2A34; //----- (00424A00) -------------------------------------------------------- int __thiscall sub_424A00(int *this) { int *v1; // esi int result; // eax bool v3; // zf int v4; // edi unsigned int v5; // eax int v6; // esi int (__thiscall ***v7)(_DWORD, signed int); // esi int *v8; // [esp+Ch] [ebp-10h] int v9; // [esp+18h] [ebp-4h] v1 = this; v8 = this; result = *this; v9 = 0; if ( result ) { v3 = (*(_DWORD *)(result + 28))-- == 1; if ( v3 ) result = sub_421C10(*this, 0); } *v1 = 0; v4 = v1[3]; v9 = -1; if ( v4 ) { std::_Lockit::_Lockit((std::_Lockit *)&v8, 0); v5 = *(_DWORD *)(v4 + 4); if ( v5 && v5 < 0xFFFFFFFF ) *(_DWORD *)(v4 + 4) = v5 - 1; v6 = -(*(_DWORD *)(v4 + 4) == 0); result = std::_Lockit::~_Lockit((std::_Lockit *)&v8); v7 = (int (__thiscall ***)(_DWORD, signed int))(v4 & v6); if ( v7 ) result = (**v7)(v7, 1); } return result; } //----- (00424AD0) -------------------------------------------------------- signed int __thiscall sub_424AD0(_DWORD *this) { _DWORD *v1; // esi signed int result; // eax v1 = this; if ( this[21] && (*(int (__stdcall **)(signed int))(*this + 12))(-1) != -1 && fflush((FILE *)v1[21]) < 0 ) result = -1; else result = 0; return result; } //----- (00424B00) -------------------------------------------------------- bool __cdecl sub_424B00(char a1, FILE *a2) { return fputc(a1, a2) != -1; } //----- (00424B20) -------------------------------------------------------- int __thiscall sub_424B20(_DWORD **this) { _DWORD **v1; // esi unsigned __int8 *v2; // ecx int result; // eax int v4; // edi v1 = this; v2 = (unsigned __int8 *)*this[8]; if ( v2 && v2 < &v2[*v1[12]] ) return *v2; result = ((int (__thiscall *)(_DWORD **))(*v1)[7])(v1); v4 = result; if ( result != -1 ) { ((void (__thiscall *)(_DWORD **, int))(*v1)[4])(v1, result); result = v4; } return result; } //----- (00424BB0) -------------------------------------------------------- signed int __thiscall sub_424BB0(int this, int a2) { int v2; // esi unsigned int v3; // eax v2 = this; v3 = **(_DWORD **)(this + 32); if ( v3 && **(_DWORD **)(this + 16) < v3 && (a2 == -1 || *(unsigned __int8 *)(v3 - 1) == a2) ) { ++**(_DWORD **)(this + 48); --**(_DWORD **)(this + 32); return a2 != -1 ? a2 : 0; } if ( *(_DWORD *)(this + 84) && a2 != -1 ) { if ( !*(_DWORD *)(this + 68) && ungetc((unsigned __int8)a2, *(FILE **)(this + 84)) != -1 ) return a2; if ( **(_DWORD **)(v2 + 32) != v2 + 72 ) { *(_BYTE *)(v2 + 72) = a2; std::basic_filebuf>::_Set_back(v2); return a2; } } return -1; } // 424B70: using guessed type int __thiscall std::basic_filebuf>::_Set_back(_DWORD); //----- (00424C40) -------------------------------------------------------- int __thiscall sub_424C40(_DWORD *this, char *a2, size_t a3, int a4) { int v4; // edi FILE *v5; // ecx int v6; // eax v4 = (int)this; v5 = (FILE *)this[21]; if ( !v5 ) return 0; v6 = a2 || __PAIR__(a4, a3) ? 0 : 4; if ( setvbuf(v5, a2, v6, a3) ) return 0; sub_423EB0(v4, *(_DWORD *)(v4 + 84), 1); return v4; } //----- (00424CA0) -------------------------------------------------------- int __thiscall sub_424CA0(_DWORD **this, int a2) { _DWORD *v2; // eax struct std::locale::facet *v3; // eax int v4; // edi struct std::locale::facet *v5; // ebx unsigned int v6; // eax int v7; // esi void (__thiscall ***v8)(_DWORD, signed int); // esi char v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = sub_422FF0(this, &v11); v12 = 0; v3 = sub_4248C0((int)v2); v4 = v11; v5 = v3; v12 = -1; if ( v11 ) { std::_Lockit::_Lockit((std::_Lockit *)&v10, 0); v6 = *(_DWORD *)(v4 + 4); if ( v6 && v6 < 0xFFFFFFFF ) *(_DWORD *)(v4 + 4) = v6 - 1; v7 = -(*(_DWORD *)(v4 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v10); v8 = (void (__thiscall ***)(_DWORD, signed int))(v4 & v7); if ( v8 ) (**v8)(v8, 1); } return (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v5 + 24))(v5, a2); } //----- (00424D50) -------------------------------------------------------- signed int __cdecl sub_424D50(_DWORD *a1, int a2) { char v2; // bl _DWORD *v3; // esi char *v4; // eax char v6; // [esp+Ch] [ebp-34h] void *v7; // [esp+30h] [ebp-10h] int v8; // [esp+3Ch] [ebp-4h] v2 = 0; v7 = 0; if ( a1 && !*a1 ) { v3 = operator new(8u); v7 = v3; v8 = 0; if ( v3 ) { if ( *(_DWORD *)(*(_DWORD *)a2 + 24) ) v4 = *(char **)(*(_DWORD *)a2 + 24); else v4 = (char *)(*(_DWORD *)a2 + 28); sub_4245D0((struct std::_Locinfo *)&v6, v4); v2 = 1; v3[1] = 0; *v3 = &std::codecvt::`vftable'; } else { v3 = 0; } v8 = -1; *a1 = v3; if ( v2 & 1 ) sub_424680((std::_Lockit *)&v6); } return 2; } // 9AB480: using guessed type void *std::codecvt::`vftable'; //----- (00424E00) -------------------------------------------------------- _DWORD *__thiscall sub_424E00(_DWORD *this, int a2, int a3, int a4, unsigned int a5) { _DWORD *v5; // esi int v6; // eax signed int v7; // eax v5 = this; *this = a3; this[1] = a3; this[2] = a4; this[3] = 0; this[4] = 0; this[5] = 0; sub_422B00(this + 6, a2, a5); v6 = a5 & 0x3F; v5[13] = a2; v5[14] = a5; if ( v6 != 1 && a5 & 0x3F ) { switch ( v6 ) { case 2: v7 = 1845494528; break; case 4: v7 = 1887436827; break; case 8: v7 = 1904320539; break; case 16: v7 = 1846018820; break; default: v7 = v6 != 32 ? 0 : 0x7088001F; break; } } else { v7 = 142040571; } v5[17] = v7; if ( v7 & 0x40000000 ) *(_DWORD *)(v5[6] + 8) |= 8u; sub_424090(v5); return v5; } //----- (00424EB0) -------------------------------------------------------- _DWORD *__thiscall sub_424EB0(_DWORD *this, int a2, int a3, int a4, char a5, int a6, int a7) { _DWORD *v7; // esi _DWORD *v8; // eax signed int v9; // ecx _DWORD *v10; // eax signed int v11; // ecx int v12; // edx int v13; // eax int v14; // ecx bool v15; // al int v16; // edi unsigned int v17; // eax v7 = this; *this = 0; v8 = this + 2; v9 = 31; do { *v8 = 0; v8[1] = 0; v8 += 2; --v9; } while ( v9 >= 0 ); v7[66] = 0; v10 = v7 + 68; v11 = 31; do { *v10 = 0; v10[1] = 0; v10 += 2; --v11; } while ( v11 >= 0 ); v12 = a6; v7[132] = 0; v7[133] = a3; v13 = a4; v7[134] = a2; v14 = a7; v7[136] = v12; LOBYTE(v12) = a5; v7[135] = v13; v7[137] = v14; *((_BYTE *)v7 + 552) = 0; *((_BYTE *)v7 + 554) = v12; v15 = *(_BYTE *)(v13 + 8) & 8 && !(v14 & 0x10); *((_BYTE *)v7 + 555) = v15; v7[139] = 0; v7[140] = 0; v7[141] = std::locale::_Init(); v16 = sub_7D3A0B(); std::_Lockit::_Lockit((std::_Lockit *)&a4, 0); v17 = *(_DWORD *)(v16 + 4); if ( v17 < 0xFFFFFFFF ) *(_DWORD *)(v16 + 4) = v17 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a4); return v7; } //----- (00424F90) -------------------------------------------------------- void __thiscall sub_424F90(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi void *v3; // edi void *v4; // eax void **v5; // esi void **v6; // esi _DWORD *v7; // esi void *v8; // edi void *v9; // ecx v1 = this; v2 = (_DWORD *)this[5]; *this = &std::tr1::_Node_class>::`vftable'; while ( v2 ) { v3 = v2; v4 = (void *)v2[3]; v2 = (_DWORD *)v2[4]; free(v4); operator delete(v3); } operator delete((void *)v1[6]); v5 = (void **)v1[7]; if ( v5 ) { free(v5[2]); operator delete(v5); } v6 = (void **)v1[8]; if ( v6 ) { free(v6[2]); operator delete(v6); } v7 = (_DWORD *)v1[10]; while ( v7 ) { v8 = v7; v9 = (void *)v7[3]; v7 = (_DWORD *)v7[4]; free(v9); operator delete(v8); } *v1 = &std::tr1::_Node_base::`vftable'; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB44C: using guessed type void *std::tr1::_Node_class>::`vftable'; //----- (00425030) -------------------------------------------------------- void *__thiscall sub_425030(void *this, char a2) { void *v2; // esi v2 = this; sub_424F90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00425060) -------------------------------------------------------- struct std::locale::facet *__thiscall sub_425060(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax struct std::locale::facet *result; // eax int v4; // edi unsigned int v5; // eax int v6; // esi void (__thiscall ***v7)(_DWORD, signed int); // esi char v8; // [esp+10h] [ebp-14h] int v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v1 = this; if ( !this[1] ) { v2 = sub_4234D0(this, &v9); v10 = 0; result = sub_4248C0((int)v2); v4 = v9; v1[1] = result; v10 = -1; if ( !v4 ) return result; std::_Lockit::_Lockit((std::_Lockit *)&v8, 0); v5 = *(_DWORD *)(v4 + 4); if ( v5 && v5 < 0xFFFFFFFF ) *(_DWORD *)(v4 + 4) = v5 - 1; v6 = -(*(_DWORD *)(v4 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v8); v7 = (void (__thiscall ***)(_DWORD, signed int))(v4 & v6); if ( v7 ) (**v7)(v7, 1); } return (struct std::locale::facet *)v1[1]; } //----- (00425110) -------------------------------------------------------- int __thiscall sub_425110(void *this, int a2, int a3, int a4) { (*(void (__stdcall **)(int, int, int))(*(_DWORD *)this + 8))(a2, a3, a4); return a2; } //----- (00425140) -------------------------------------------------------- bool __thiscall sub_425140(_WORD *this) { return sub_424460(this, 10, 0x7FFFFFFF) != 0x7FFFFFFF; } //----- (00425160) -------------------------------------------------------- BOOL __cdecl sub_425160(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a2; return sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), v2, *(_DWORD *)(a2 + 16)) == 0; } //----- (00425190) -------------------------------------------------------- _BYTE *__thiscall sub_425190(_DWORD *this, _BYTE *a2, _BYTE *a3, unsigned int a4) { return sub_424530(a2, a3, a4, (_DWORD **)(this[1] + 20)); } //----- (004251B0) -------------------------------------------------------- int __cdecl sub_4251B0(int a1, int a2, int a3) { int v3; // ecx int v4; // edi int v5; // esi int v6; // edx int result; // eax int v8; // ebx int v9; // edx int v10; // ebx int v11; // edx char *v12; // eax int v13; // ecx int v14; // [esp+14h] [ebp-8h] int v15; // [esp+28h] [ebp+Ch] char *v16; // [esp+28h] [ebp+Ch] char v17; // [esp+2Bh] [ebp+Fh] int v18; // [esp+2Ch] [ebp+10h] v3 = a1; v4 = a3; v5 = a2 - a1; v6 = a3 - a1; v15 = a3 - a1; result = a3 - a1; v18 = a3 - a1; v8 = v5; if ( v5 ) { do { v9 = result % v8; result = v8; v8 = v9; } while ( v9 ); v6 = v15; v18 = result; } if ( result < v6 && result > 0 ) { v10 = result + a1; v14 = result + a1; while ( 1 ) { v11 = v10 + v5; v12 = (char *)v10; if ( v10 + v5 == v4 ) v11 = v3; v13 = -v11; do { v17 = *v12; *v12 = *(_BYTE *)v11; *(_BYTE *)v11 = v17; v12 = (char *)v11; v16 = (char *)v11; if ( v5 >= v13 + v4 ) { v11 += a1 + v5 - v4; v13 = v13 + v4 - v5 - a1; v12 = v16; } else { v11 += v5; v13 -= v5; } } while ( v11 != v14 ); result = v18 - 1; v10 = v14 - 1; v18 = result; --v14; if ( result <= 0 ) break; v3 = a1; } } return result; } //----- (00425280) -------------------------------------------------------- char __thiscall sub_425280(char *this, char a2) { char *v2; // esi int v3; // ecx int v4; // eax char *v5; // ecx _BYTE *v6; // ecx int v7; // edx _DWORD *v8; // eax struct std::locale::facet *v9; // edi int v10; // ecx _DWORD *v11; // eax bool v12; // zf int v13; // eax int v14; // ecx int v15; // eax char *v16; // ecx int v17; // eax int v19; // eax int v20; // [esp+0h] [ebp-24h] char *v21; // [esp+10h] [ebp-14h] int *v22; // [esp+14h] [ebp-10h] int v23; // [esp+20h] [ebp-4h] v22 = &v20; v2 = this; v21 = this; v3 = *(_DWORD *)(*(_DWORD *)this + 4); v4 = *(_DWORD *)&v21[v3 + 12]; v5 = &v21[v3]; if ( !v4 ) { v6 = (_BYTE *)*((_DWORD *)v5 + 15); if ( v6 ) sub_406070(v6); if ( !a2 ) { v7 = *(_DWORD *)(*(_DWORD *)v2 + 4); if ( *(_DWORD *)&v2[v7 + 20] & 1 ) { v8 = sub_422FF0((_DWORD **)&v2[v7], &a2); v23 = 0; v9 = sub_4248C0((int)v8); sub_422F90((int *)&a2); v10 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 56]; v11 = *(_DWORD **)(v10 + 32); v12 = *v11 == 0; v23 = 1; if ( v12 || **(_DWORD **)(v10 + 48) <= 0 ) v13 = (*(int (**)(void))(*(_DWORD *)v10 + 24))(); else v13 = *(unsigned __int8 *)*v11; while ( v13 != -1 ) { if ( !(*(_BYTE *)(*((_DWORD *)v9 + 4) + 2 * (unsigned __int8)v13) & 0x48) ) goto LABEL_15; v13 = sub_424810(*(_DWORD ***)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 56]); } v14 = *(_DWORD *)(*(_DWORD *)v2 + 4); v15 = *(_DWORD *)&v2[v14 + 12]; v16 = &v2[v14]; v17 = v15 | 1; if ( !*((_DWORD *)v16 + 14) ) v17 |= 4u; sub_405C10(v16, v17, 0); LABEL_15: v23 = -1; } } v5 = &v2[*(_DWORD *)(*(_DWORD *)v2 + 4)]; if ( !*((_DWORD *)v5 + 3) ) return 1; } v19 = *((_DWORD *)v5 + 3) | 2; if ( !*((_DWORD *)v5 + 14) ) v19 = *((_DWORD *)v5 + 3) | 6; sub_405C10(v5, v19, 0); return 0; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00425420) -------------------------------------------------------- _DWORD *__thiscall sub_425420(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ForumWin::`vftable'; *((_DWORD *)this + 58) = &ForumWin::`vftable'; if ( *((_DWORD *)this + 103) >= 0x10u ) operator delete(*((void **)this + 98)); v2[103] = 15; v2[102] = 0; *((_BYTE *)v2 + 392) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB584: using guessed type void *ForumWin::`vftable'; // 9AB5A4: using guessed type void *ForumWin::`vftable'; //----- (00425490) -------------------------------------------------------- struct std::locale::facet *__cdecl sub_425490(int a1) { int v1; // ebx int v2; // edi unsigned int v3; // esi int v4; // eax struct std::locale::facet *v5; // ecx int v6; // eax struct std::locale::facet *v7; // esi unsigned int v8; // eax char v10; // [esp+10h] [ebp-24h] char v11; // [esp+1Ch] [ebp-18h] char v12; // [esp+20h] [ebp-14h] struct std::locale::facet *v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] std::_Lockit::_Lockit((std::_Lockit *)&v11, 0); v1 = dword_ACB218; v14 = 0; v13 = (struct std::locale::facet *)dword_ACB218; if ( !dword_ACB22C ) { std::_Lockit::_Lockit((std::_Lockit *)&v12, 0); if ( !dword_ACB22C ) dword_ACB22C = ++dword_BA2A30; std::_Lockit::~_Lockit((std::_Lockit *)&v12); } v2 = a1; v3 = dword_ACB22C; v4 = *(_DWORD *)a1; if ( (unsigned int)dword_ACB22C >= *(_DWORD *)(*(_DWORD *)a1 + 12) ) { v5 = 0; } else { v5 = *(struct std::locale::facet **)(*(_DWORD *)(v4 + 8) + 4 * dword_ACB22C); if ( v5 ) { LABEL_11: v7 = v5; LABEL_12: if ( v7 ) goto LABEL_21; goto LABEL_13; } } if ( !*(_BYTE *)(v4 + 20) ) goto LABEL_11; v6 = sub_7D3A0B(); if ( v3 < *(_DWORD *)(v6 + 12) ) { v7 = *(struct std::locale::facet **)(*(_DWORD *)(v6 + 8) + 4 * v3); goto LABEL_12; } LABEL_13: if ( v1 ) { v7 = (struct std::locale::facet *)v1; } else { if ( sub_424D50(&v13, v2) == -1 ) { sub_7D43D9((std::exception *)&v10, "bad cast"); _CxxThrowException(&v10, &_TI2_AVbad_cast_std__); } v7 = v13; dword_ACB218 = (int)v13; std::_Lockit::_Lockit((std::_Lockit *)&a1, 0); v8 = *((_DWORD *)v7 + 1); if ( v8 < 0xFFFFFFFF ) *((_DWORD *)v7 + 1) = v8 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a1); std::locale::facet::_Facet_Register(v7); } LABEL_21: v14 = -1; std::_Lockit::~_Lockit((std::_Lockit *)&v11); return v7; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A7CAB4: using guessed type int _TI2_AVbad_cast_std__; // ACB218: using guessed type int dword_ACB218; // ACB22C: using guessed type int dword_ACB22C; // BA2A30: using guessed type int dword_BA2A30; //----- (004255D0) -------------------------------------------------------- char __thiscall sub_4255D0(int *this, int a2, char *a3) { int v3; // ebx int *v4; // esi int v5; // eax int v6; // edi int v7; // eax int v8; // eax int v9; // edx int *v10; // eax int v11; // ecx int v12; // edx char result; // al int v14; // [esp+Ch] [ebp-18h] int v15; // [esp+10h] [ebp-14h] int v16; // [esp+14h] [ebp-10h] int v17; // [esp+18h] [ebp-Ch] int v18; // [esp+1Ch] [ebp-8h] char v19; // [esp+23h] [ebp-1h] v3 = a2; v4 = this; v5 = this[1]; v6 = *this; v14 = v6; v15 = v5; v16 = v6; v17 = v5; v19 = 0; v18 = -1; if ( a2 ) { do { v7 = v15; *v4 = v6; v4[1] = v7; if ( (unsigned __int8)sub_429280(v4, *(_DWORD *)(v3 + 12), a3) ) { if ( !*((_BYTE *)v4 + 555) ) return 1; v8 = *v4 - v6; if ( v18 < v8 ) { v9 = v4[1]; v16 = *v4; v17 = v9; v18 = v8; } v19 = 1; } v3 = *(_DWORD *)(v3 + 24); } while ( v3 ); v10 = &v16; if ( v19 ) goto LABEL_10; } v10 = &v14; LABEL_10: v11 = *v10; v12 = v10[1]; result = v19; *v4 = v11; v4[1] = v12; return result; } //----- (00425680) -------------------------------------------------------- bool __thiscall sub_425680(int this) { int v1; // edi int v2; // eax signed int v3; // edx _DWORD *v4; // esi v1 = *(unsigned __int8 *)(this + 554); v2 = 0; v3 = 1; if ( v1 <= 0 ) return 0; v4 = (_DWORD *)(this + 8); while ( 1 ) { if ( v3 & *(_DWORD *)(this + 268) && v3 & *(_DWORD *)(this + 4) ) { if ( v4[66] != *v4 ) return *(_DWORD *)(this + 8 * v2 + 272) - *(_DWORD *)(this + 528) < *(_DWORD *)(this + 8 * v2 + 8) - *(_DWORD *)(this + 528); if ( v4[67] != v4[1] ) break; } ++v2; v4 += 2; v3 *= 2; if ( v2 >= v1 ) return 0; } return *(_DWORD *)(this + 8 * v2 + 276) - *(_DWORD *)(this + 528) < *(_DWORD *)(this + 8 * v2 + 12) - *(_DWORD *)(this + 528); } //----- (00425710) -------------------------------------------------------- BOOL __thiscall sub_425710(_DWORD *this, unsigned __int8 a2, unsigned __int16 a3) { if ( a3 != -1 ) return (a3 & *(_WORD *)(*((_DWORD *)sub_425060(this) + 4) + 2 * a2)) != 0; if ( a2 == 95 || *(_WORD *)(*((_DWORD *)sub_425060(this) + 4) + 2 * a2) & 0x107 ) return 1; return 0; } //----- (00425770) -------------------------------------------------------- int __cdecl sub_425770(int a1, int a2, int a3) { int v3; // ecx int result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 12 ) { if ( result ) { *(_DWORD *)result = *(_DWORD *)v3; *(_DWORD *)(result + 4) = *(_DWORD *)(v3 + 4); *(_BYTE *)(result + 8) = *(_BYTE *)(v3 + 8); } v3 += 12; } return result; } //----- (004258A0) -------------------------------------------------------- _BYTE *__thiscall sub_4258A0(int this, int a2) { int v2; // esi struct std::locale::facet *v3; // eax char v4; // bl int v5; // esi _DWORD *v6; // eax _BYTE *result; // eax v2 = this; if ( *(_DWORD *)(this + 12) & 0x100 ) { v3 = sub_425060(*(_DWORD **)(this + 16)); v4 = (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v3 + 8))(v3, a2); } else { v4 = a2; } v5 = *(_DWORD *)(v2 + 4); if ( !*(_DWORD *)(v5 + 24) ) { v6 = operator new(0x20u); if ( v6 ) { *v6 = 0; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; } else { v6 = 0; } *(_DWORD *)(v5 + 24) = v6; } result = (_BYTE *)(((unsigned int)v4 >> 3) + *(_DWORD *)(v5 + 24)); *result |= 1 << (v4 & 7); return result; } //----- (00425920) -------------------------------------------------------- char __thiscall sub_425920(int this, int a2) { int v2; // esi struct std::locale::facet *v3; // eax int v4; // esi _DWORD *v5; // eax int v6; // esi unsigned int v7; // eax int v8; // edi void *v9; // eax char result; // al v2 = this; if ( *(_DWORD *)(this + 12) & 0x100 ) { v3 = sub_425060(*(_DWORD **)(this + 16)); LOBYTE(a2) = (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v3 + 8))(v3, a2); } v4 = *(_DWORD *)(v2 + 4); if ( !*(_DWORD *)(v4 + 28) ) { v5 = operator new(0xCu); if ( v5 ) { *v5 = 0; v5[1] = 0; v5[2] = 0; } else { v5 = 0; } *(_DWORD *)(v4 + 28) = v5; } v6 = *(_DWORD *)(v4 + 28); v7 = *(_DWORD *)(v6 + 4); if ( *(_DWORD *)v6 <= v7 ) { v8 = v7 + 16; v9 = realloc(*(void **)(v6 + 8), v7 + 16); if ( !v9 ) unknown_libname_20(); *(_DWORD *)(v6 + 8) = v9; *(_DWORD *)v6 = v8; } result = a2; *(_BYTE *)(*(_DWORD *)(v6 + 8) + (*(_DWORD *)(v6 + 4))++) = a2; return result; } // 7D3654: using guessed type int unknown_libname_20(void); //----- (004259B0) -------------------------------------------------------- void __stdcall sub_4259B0(int a1, unsigned __int16 a2, _DWORD *a3) { signed int v3; // ebx bool v4; // zf _DWORD *v5; // eax v3 = 0; do { if ( a2 != -1 ) { v4 = (a2 & *(_WORD *)(*((_DWORD *)sub_425060(a3) + 4) + 2 * (unsigned __int8)v3)) == 0; goto LABEL_4; } if ( (_BYTE)v3 != 95 ) { v4 = (*(_WORD *)(*((_DWORD *)sub_425060(a3) + 4) + 2 * (unsigned __int8)v3) & 0x107) == 0; LABEL_4: if ( v4 ) goto LABEL_13; } if ( !*(_DWORD *)(a1 + 24) ) { v5 = operator new(0x20u); if ( v5 ) { *v5 = 0; v5[1] = 0; v5[2] = 0; v5[3] = 0; v5[4] = 0; v5[5] = 0; v5[6] = 0; v5[7] = 0; } else { v5 = 0; } *(_DWORD *)(a1 + 24) = v5; } *(_BYTE *)(*(_DWORD *)(a1 + 24) + ((unsigned int)v3 >> 3)) |= 1 << (v3 & 7); LABEL_13: ++v3; } while ( v3 < 256 ); } //----- (00425A60) -------------------------------------------------------- int __thiscall sub_425A60(int this) { int v1; // esi _DWORD *v2; // esi unsigned __int8 *v3; // eax int result; // eax _DWORD *v5; // ecx int v6; // eax int i; // eax void *v8; // eax void *v9; // edx int v10; // eax const void *v11; // eax int v12; // esi void *v13; // eax char *v14; // edi int v15; // edi int v16; // ecx int v17; // esi char *v18; // [esp+10h] [ebp-38h] int v19; // [esp+14h] [ebp-34h] unsigned __int8 Dst; // [esp+1Bh] [ebp-2Dh] void *Src; // [esp+1Ch] [ebp-2Ch] unsigned int v22; // [esp+2Ch] [ebp-1Ch] unsigned int v23; // [esp+30h] [ebp-18h] int v24; // [esp+44h] [ebp-4h] v1 = this; if ( **(_DWORD **)(this + 32) && **(_DWORD **)(this + 32) < (unsigned int)(**(_DWORD **)(this + 32) + **(_DWORD **)(this + 48)) ) { --**(_DWORD **)(this + 48); v2 = *(_DWORD **)(this + 32); v3 = (unsigned __int8 *)(*v2)++; return *v3; } if ( *(_DWORD *)(this + 84) ) { v5 = *(_DWORD **)(this + 16); if ( *v5 == v1 + 72 ) { v6 = *(_DWORD *)(v1 + 64); *v5 = *(_DWORD *)(v1 + 60); **(_DWORD **)(v1 + 32) = v6; **(_DWORD **)(v1 + 48) = 0; } if ( *(_DWORD *)(v1 + 68) ) { v23 = 15; v22 = 0; LOBYTE(Src) = 0; v24 = 0; for ( i = fgetc(*(FILE **)(v1 + 84)); i != -1; i = fgetc(*(FILE **)(v1 + 84)) ) { sub_40AB50(&Src, 1u, i); v8 = Src; v9 = Src; if ( v23 < 0x10 ) { v9 = &Src; v8 = &Src; } v10 = (*(int (__stdcall **)(int, void *, unsigned int, int *, unsigned __int8 *, void **, char **))(**(_DWORD **)(v1 + 68) + 16))( v1 + 76, v8, (unsigned int)v9 + v22, &v19, &Dst, &Src, &v18); if ( v10 < 0 ) break; if ( v10 <= 1 ) { if ( v18 != (char *)&Dst ) { v14 = (char *)Src; if ( v23 < 0x10 ) v14 = (char *)&Src; v15 = (int)&v14[v22 - v19]; while ( v15 > 0 ) { v16 = *(char *)(v15-- + v19 - 1); ungetc(v16, *(FILE **)(v1 + 84)); } v17 = Dst; sub_636A10(&Src); return v17; } v13 = Src; if ( v23 < 0x10 ) v13 = &Src; sub_4014F0(&Src, 0, v19 - (_DWORD)v13); } else { if ( v10 != 3 ) break; if ( v22 >= 1 ) { v11 = Src; if ( v23 < 0x10 ) v11 = &Src; memcpy_s(&Dst, 1u, v11, 1u); v12 = Dst; sub_636A10(&Src); return v12; } } } sub_636A10(&Src); } else { result = fgetc(*(FILE **)(v1 + 84)); if ( result != -1 ) return (unsigned __int8)result; } } return -1; } //----- (00425C50) -------------------------------------------------------- _DWORD *__thiscall sub_425C50(_DWORD *this, int a2) { _DWORD *v2; // edi struct std::locale::facet *v3; // eax struct std::locale::facet *v4; // esi _DWORD *result; // eax v2 = this; v3 = sub_425490(a2); v4 = v3; result = (_DWORD *)(*(int (__thiscall **)(struct std::locale::facet *))(*(_DWORD *)v3 + 4))(v3); if ( (_BYTE)result ) { v2[17] = 0; } else { v2[17] = v4; result = sub_4231D0(v2); } return result; } //----- (00425C90) -------------------------------------------------------- int __thiscall sub_425C90(_DWORD *this, char *a2, int a3, int a4) { int v4; // esi FILE *v5; // eax _DWORD *v6; // eax struct std::locale::facet *v7; // edi v4 = (int)this; if ( this[21] ) return 0; v5 = sub_7D4168(a2, a3, a4); if ( !v5 ) return 0; sub_423EB0(v4, (int)v5, 1); v6 = sub_423190((_DWORD **)v4, &a4); v7 = sub_425490((int)v6); if ( (*(unsigned __int8 (__thiscall **)(struct std::locale::facet *))(*(_DWORD *)v7 + 4))(v7) ) { *(_DWORD *)(v4 + 68) = 0; } else { *(_DWORD *)(v4 + 68) = v7; sub_4231D0((_DWORD *)v4); } sub_422F90(&a4); return v4; } //----- (00425D70) -------------------------------------------------------- char __thiscall sub_425D70(_DWORD *this) { _DWORD *v1; // edi void **v2; // eax unsigned int v3; // ebx void **v4; // edx int v5; // eax int v6; // eax _BYTE *v7; // ecx size_t v8; // esi _BYTE *v10; // [esp+10h] [ebp-30h] void *v11; // [esp+14h] [ebp-2Ch] int v12; // [esp+18h] [ebp-28h] char v13; // [esp+1Ch] [ebp-24h] unsigned int v14; // [esp+24h] [ebp-1Ch] unsigned int v15; // [esp+28h] [ebp-18h] int v16; // [esp+3Ch] [ebp-4h] v1 = this; if ( !this[17] || !*((_BYTE *)this + 73) ) return 1; if ( (*(int (__stdcall **)(signed int))(*this + 12))(-1) == -1 ) return 0; v15 = 15; v11 = 0; v12 = 0; v14 = 8; v13 = 0; v16 = 0; LABEL_5: v2 = (void **)v11; v3 = v15; while ( 1 ) { v4 = v2; if ( v3 < 0x10 ) { v4 = &v11; v2 = &v11; } v5 = (*(int (__stdcall **)(_DWORD *, void **, void **, _BYTE **))(*(_DWORD *)v1[17] + 24))( v1 + 19, v2, &v4[v14 / 4], &v10); if ( v5 ) break; *((_BYTE *)v1 + 73) = 0; LABEL_13: v3 = v15; v2 = (void **)v11; v7 = v11; if ( v15 < 0x10 ) v7 = &v11; v8 = v10 - v7; if ( v10 != v7 ) { if ( v15 < 0x10 ) v2 = &v11; if ( v8 != fwrite(v2, 1u, v8, (FILE *)v1[21]) ) goto LABEL_23; v3 = v15; v2 = (void **)v11; } if ( !*((_BYTE *)v1 + 73) ) goto LABEL_25; if ( !v8 ) { sub_40AB50(&v11, 8u, 0); goto LABEL_5; } } v6 = v5 - 1; if ( !v6 ) goto LABEL_13; if ( v6 != 2 ) { LABEL_23: sub_636A10(&v11); return 0; } LABEL_25: sub_636A10(&v11); return 1; } //----- (00425EB0) -------------------------------------------------------- char *__cdecl sub_425EB0(char *a1, _DWORD *a2) { int v2; // ecx int v3; // edi _DWORD *v4; // eax struct std::locale::facet *v5; // eax int v6; // ebx unsigned int v7; // eax int v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi int v10; // edx int v11; // ecx unsigned int v12; // eax signed int v13; // ebx int v14; // ecx _DWORD *v15; // eax int v16; // eax int v17; // eax char *v18; // ecx int v19; // eax int v20; // ecx _DWORD **v22; // ecx int v23; // [esp+0h] [ebp-40h] char *v24; // [esp+10h] [ebp-30h] char v25; // [esp+14h] [ebp-2Ch] struct std::locale::facet *v26; // [esp+18h] [ebp-28h] int v27; // [esp+20h] [ebp-20h] int v28; // [esp+24h] [ebp-1Ch] int v29; // [esp+28h] [ebp-18h] char v30; // [esp+2Fh] [ebp-11h] int *v31; // [esp+30h] [ebp-10h] int v32; // [esp+3Ch] [ebp-4h] v31 = &v23; v2 = *(_DWORD *)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4) + 56]; v3 = 0; v29 = 0; v30 = 0; v24 = a1; if ( v2 ) (*(void (**)(void))(*(_DWORD *)v2 + 4))(); v32 = 0; v25 = sub_425280(a1, 0); v32 = 1; if ( v25 ) { v4 = sub_422FF0((_DWORD **)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4)], &v28); LOBYTE(v32) = 2; v5 = sub_4248C0((int)v4); v6 = v28; v26 = v5; LOBYTE(v32) = 1; if ( v28 ) { std::_Lockit::_Lockit((std::_Lockit *)&v27, 0); v7 = *(_DWORD *)(v6 + 4); if ( v7 && v7 < 0xFFFFFFFF ) *(_DWORD *)(v6 + 4) = v7 - 1; v8 = -(*(_DWORD *)(v6 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v27); v9 = (void (__thiscall ***)(_DWORD, signed int))(v6 & v8); if ( v9 ) (**v9)(v9, 1); } sub_4014F0(a2, 0, 0xFFFFFFFF); v10 = *(_DWORD *)(*(_DWORD *)a1 + 4); v11 = *(_DWORD *)&a1[v10 + 36]; v12 = *(_DWORD *)&a1[v10 + 32]; LOBYTE(v32) = 3; if ( v11 >= 0 && (v11 > 0 || v12) && (v27 = v11, v12 < 0xFFFFFFFE) ) { v27 = v11; v13 = v12; } else { v13 = -2; } v14 = *(_DWORD *)&a1[v10 + 56]; v15 = *(_DWORD **)(v14 + 32); if ( *v15 && **(_DWORD **)(v14 + 48) > 0 ) v16 = *(unsigned __int8 *)*v15; else v16 = (*(int (**)(void))(*(_DWORD *)v14 + 24))(); while ( v13 ) { if ( v16 == -1 ) { v29 |= 1u; break; } if ( *(_BYTE *)(*((_DWORD *)v26 + 4) + 2 * (unsigned __int8)v16) & 0x48 ) break; sub_40AB50(a2, 1u, v16); v22 = *(_DWORD ***)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4) + 56]; v30 = 1; --v13; v16 = sub_424810(v22); } v32 = 1; v3 = v29; } v17 = *(_DWORD *)(*(_DWORD *)a1 + 4); *(_DWORD *)&a1[v17 + 32] = 0; *(_DWORD *)&a1[v17 + 36] = 0; if ( !v30 ) v3 |= 2u; v18 = &a1[*(_DWORD *)(*(_DWORD *)a1 + 4)]; if ( v3 ) { v19 = v3 | *((_DWORD *)v18 + 3); if ( !*((_DWORD *)v18 + 14) ) v19 |= 4u; sub_405C10(v18, v19, 0); } v20 = *(_DWORD *)&v24[*(_DWORD *)(*(_DWORD *)v24 + 4) + 56]; v32 = -1; if ( v20 ) (*(void (**)(void))(*(_DWORD *)v20 + 8))(); return a1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004260E0) -------------------------------------------------------- void __cdecl sub_4260E0(int a1, unsigned int a2) { unsigned int v2; // ecx int v3; // eax v2 = a2; if ( a2 ) { v3 = a1; do { if ( v3 ) { *(_DWORD *)v3 = 0; *(_DWORD *)(v3 + 4) = 0; *(_BYTE *)(v3 + 8) = 0; } --v2; v3 += 12; } while ( v2 > 0 ); } } //----- (00426110) -------------------------------------------------------- int *__cdecl sub_426110(int *a1, int a2, _BYTE *a3, _BYTE *a4, _BYTE *a5, _DWORD *a6, char a7) { _BYTE *v7; // eax _BYTE *v8; // ecx bool v9; // zf int v10; // edi _DWORD *v11; // eax struct std::locale::facet *v12; // eax int v13; // ebx unsigned int v14; // eax int v15; // esi void (__thiscall ***v16)(_DWORD, signed int); // esi char v17; // al int v18; // edi _DWORD *v19; // eax struct std::locale::facet *v20; // eax int v21; // ebx unsigned int v22; // eax int v23; // esi void (__thiscall ***v24)(_DWORD, signed int); // esi char v25; // al int *v26; // eax int v27; // ecx int *result; // eax int v29; // [esp+10h] [ebp-2Ch] char v30; // [esp+14h] [ebp-28h] int v31; // [esp+18h] [ebp-24h] int v32; // [esp+1Ch] [ebp-20h] char v33; // [esp+20h] [ebp-1Ch] int v34; // [esp+24h] [ebp-18h] int v35; // [esp+28h] [ebp-14h] char v36; // [esp+2Fh] [ebp-Dh] int v37; // [esp+38h] [ebp-4h] v7 = (_BYTE *)a2; v8 = a3; v35 = a2; if ( (_BYTE *)a2 == a3 ) { LABEL_19: if ( a4 != a5 ) { if ( !a7 || (v9 = v7 == v8, v26 = &a2, !v9) ) v26 = &v35; goto LABEL_25; } } else { while ( a4 != a5 ) { LOBYTE(v29) = *a4; a2 = (int)(v7 + 1); v9 = a6[1] == 0; v10 = (int)(a6 + 1); LOBYTE(v32) = *v7; if ( v9 ) { v11 = sub_4234D0(a6, &v34); v37 = 0; v12 = sub_4248C0((int)v11); v13 = v34; *(_DWORD *)v10 = v12; v37 = -1; if ( v13 ) { std::_Lockit::_Lockit((std::_Lockit *)&v33, 0); v14 = *(_DWORD *)(v13 + 4); if ( v14 && v14 < 0xFFFFFFFF ) *(_DWORD *)(v13 + 4) = v14 - 1; v15 = -(*(_DWORD *)(v13 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v33); v16 = (void (__thiscall ***)(_DWORD, signed int))(v13 & v15); if ( v16 ) (**v16)(v16, 1); } } v17 = (*(int (__stdcall **)(int))(**(_DWORD **)v10 + 8))(v32); v9 = a6[1] == 0; v18 = (int)(a6 + 1); v36 = v17; if ( v9 ) { v19 = sub_4234D0(a6, &v31); v37 = 1; v20 = sub_4248C0((int)v19); v21 = v31; *(_DWORD *)v18 = v20; v37 = -1; if ( v21 ) { std::_Lockit::_Lockit((std::_Lockit *)&v30, 0); v22 = *(_DWORD *)(v21 + 4); if ( v22 && v22 < 0xFFFFFFFF ) *(_DWORD *)(v21 + 4) = v22 - 1; v23 = -(*(_DWORD *)(v21 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v30); v24 = (void (__thiscall ***)(_DWORD, signed int))(v21 & v23); if ( v24 ) (**v24)(v24, 1); } } v25 = (*(int (__stdcall **)(int))(**(_DWORD **)v18 + 8))(v29); ++a4; if ( v36 != v25 ) { v27 = v35; goto LABEL_26; } v7 = (_BYTE *)a2; v8 = a3; if ( (_BYTE *)a2 == a3 ) goto LABEL_19; } } v26 = &a2; LABEL_25: v27 = *v26; LABEL_26: result = a1; *a1 = v27; return result; } //----- (004262C0) -------------------------------------------------------- int *__cdecl sub_4262C0(int *a1, int a2, _BYTE *a3, char *a4, char *a5, _DWORD *a6, char a7) { _BYTE *v7; // eax _BYTE *v8; // ecx char *v9; // edx _BYTE *v10; // ecx char v11; // al int v12; // edi _DWORD *v13; // eax struct std::locale::facet *v14; // eax int v15; // ebx unsigned int v16; // eax int v17; // esi void (__thiscall ***v18)(_DWORD, signed int); // esi char v19; // al bool v20; // zf struct std::locale::facet **v21; // edi _DWORD *v22; // eax struct std::locale::facet *v23; // eax int v24; // ebx unsigned int v25; // eax int v26; // esi void (__thiscall ***v27)(_DWORD, signed int); // esi char v28; // al int *v29; // eax int v30; // ecx int *result; // eax char v32; // [esp+10h] [ebp-2Ch] char v33; // [esp+14h] [ebp-28h] int v34; // [esp+18h] [ebp-24h] int v35; // [esp+1Ch] [ebp-20h] char v36; // [esp+20h] [ebp-1Ch] int v37; // [esp+24h] [ebp-18h] int v38; // [esp+28h] [ebp-14h] char v39; // [esp+2Fh] [ebp-Dh] int v40; // [esp+38h] [ebp-4h] v7 = (_BYTE *)a2; v8 = a3; v38 = a2; if ( (_BYTE *)a2 == a3 ) { LABEL_19: if ( a4 != a5 ) { if ( !a7 || (v20 = v7 == v8, v29 = &a2, !v20) ) v29 = &v38; goto LABEL_25; } } else { while ( a4 != a5 ) { v9 = a4++; v10 = v7; a2 = (int)(v7 + 1); v11 = *v9; LOBYTE(v35) = *v10; v12 = (int)(a6 + 1); v32 = v11; if ( !a6[1] ) { v13 = sub_4234D0(a6, &v37); v40 = 0; v14 = sub_4248C0((int)v13); v15 = v37; *(_DWORD *)v12 = v14; v40 = -1; if ( v15 ) { std::_Lockit::_Lockit((std::_Lockit *)&v36, 0); v16 = *(_DWORD *)(v15 + 4); if ( v16 && v16 < 0xFFFFFFFF ) *(_DWORD *)(v15 + 4) = v16 - 1; v17 = -(*(_DWORD *)(v15 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v36); v18 = (void (__thiscall ***)(_DWORD, signed int))(v15 & v17); if ( v18 ) (**v18)(v18, 1); } } v19 = (*(int (__stdcall **)(int))(**(_DWORD **)v12 + 8))(v35); v20 = a6[1] == 0; v21 = (struct std::locale::facet **)(a6 + 1); v39 = v19; if ( v20 ) { v22 = sub_4234D0(a6, &v34); v40 = 1; v23 = sub_4248C0((int)v22); v24 = v34; *v21 = v23; v40 = -1; if ( v24 ) { std::_Lockit::_Lockit((std::_Lockit *)&v33, 0); v25 = *(_DWORD *)(v24 + 4); if ( v25 && v25 < 0xFFFFFFFF ) *(_DWORD *)(v24 + 4) = v25 - 1; v26 = -(*(_DWORD *)(v24 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v33); v27 = (void (__thiscall ***)(_DWORD, signed int))(v24 & v26); if ( v27 ) (**v27)(v27, 1); } } v28 = (*(int (__thiscall **)(struct std::locale::facet *, char))(*(_DWORD *)*v21 + 8))(*v21, v32); if ( v39 != v28 ) { v30 = v38; goto LABEL_26; } v7 = (_BYTE *)a2; v8 = a3; if ( (_BYTE *)a2 == a3 ) goto LABEL_19; } } v29 = &a2; LABEL_25: v30 = *v29; LABEL_26: result = a1; *a1 = v30; return result; } //----- (00426470) -------------------------------------------------------- char __thiscall sub_426470(int this) { unsigned __int8 v1; // bl char v2; // al int v3; // ecx __int16 v4; // cx _BYTE *v5; // eax _BYTE *v6; // ecx _BYTE *v7; // eax int v8; // esi int v9; // ecx char v10; // al _BYTE *v11; // eax _BYTE *v12; // ecx _BYTE *v13; // eax char v14; // al unsigned __int8 v15; // bl int v16; // eax v8 = this; if ( *(_DWORD *)(this + 68) & 0x10000 && sub_422D60((_WORD *)this, *(_BYTE *)(this + 62)) ) goto LABEL_8; v9 = *(_DWORD *)(v8 + 68); if ( v9 & 0x8000 ) { v10 = *(_BYTE *)(v8 + 62); if ( v10 == 97 ) { *(_WORD *)(v8 + 60) = 7; LABEL_8: v11 = *(_BYTE **)v8; v12 = *(_BYTE **)(v8 + 8); if ( *(_BYTE **)v8 != v12 ) { if ( *v11 == 92 ) { if ( (v13 = v11 + 1, v13 != v12) && !(*(_BYTE *)(v8 + 68) & 8) && (*v13 == 40 || *v13 == 41) || !(*(_BYTE *)(v8 + 68) & 0x10) && (*v13 == 123 || *v13 == 125) ) { *(_DWORD *)v8 = v13; } } ++*(_DWORD *)v8; } sub_424090((_BYTE *)v8); goto LABEL_37; } if ( v10 == 98 ) { *(_WORD *)(v8 + 60) = 8; goto LABEL_8; } } v14 = *(_BYTE *)(v8 + 62); if ( v14 == 99 && v9 & 0x40000 ) { sub_424240((_BYTE *)v8); v15 = *(_BYTE *)(v8 + 62); if ( (*(_WORD *)(*((_DWORD *)sub_425060(*(_DWORD **)(v8 + 52)) + 4) + 2 * v15) & 0x103) == 0 ) std::tr1::_Xbad(2); *(_WORD *)(v8 + 60) = *(_BYTE *)(v8 + 62) % 32; sub_424240((_BYTE *)v8); goto LABEL_37; } if ( v14 == 120 && v9 & 0x1000 ) { sub_424240((_BYTE *)v8); v16 = sub_424460((_WORD *)v8, 16, 2); goto LABEL_28; } if ( v14 == 117 && v9 & 0x800 ) { sub_424240((_BYTE *)v8); v16 = sub_424460((_WORD *)v8, 16, 4); LABEL_28: if ( v16 ) LABEL_36: std::tr1::_Xbad(2); LABEL_37: if ( *(_WORD *)(v8 + 60) > 0x7Fu ) std::tr1::_Xbad(2); return 1; } if ( v9 & 0x2000 && sub_424460((_WORD *)v8, 8, 3) != 3 ) { if ( !*(_WORD *)(v8 + 60) ) goto LABEL_36; goto LABEL_37; } if ( !(*(_DWORD *)(v8 + 68) & 0x400000) || (v1 = *(_BYTE *)(v8 + 62), (*(_WORD *)(*((_DWORD *)sub_425060(*(_DWORD **)(v8 + 52)) + 4) + 2 * v1) & 0x107) != 0) || (v2 = *(_BYTE *)(v8 + 62), v2 == 95) ) { v3 = *(_DWORD *)(v8 + 68); if ( v3 & 0x400000 || (v2 = *(_BYTE *)(v8 + 62), v2 != 46) && v2 != 91 && v2 != 92 && v2 != 42 && v2 != 124 && v2 != 94 && v2 != 36 ) { if ( !((unsigned int)sub_800000 & v3) || (v2 = *(_BYTE *)(v8 + 62), v2 != 40) && v2 != 41 && v2 != 43 && v2 != 63 && v2 != 123 && v2 != 125 ) { if ( !(v3 & 0x1000000) ) return 0; v2 = *(_BYTE *)(v8 + 62); if ( v2 != 34 && v2 != 47 ) return 0; } } } v4 = v2; v5 = *(_BYTE **)v8; *(_WORD *)(v8 + 60) = v4; v6 = *(_BYTE **)(v8 + 8); if ( v5 != v6 ) { if ( *v5 == 92 ) { if ( (v7 = v5 + 1, v7 != v6) && !(*(_BYTE *)(v8 + 68) & 8) && (*v7 == 40 || *v7 == 41) || !(*(_BYTE *)(v8 + 68) & 0x10) && (*v7 == 123 || *v7 == 125) ) { *(_DWORD *)v8 = v7; } } ++*(_DWORD *)v8; } sub_424090((_BYTE *)v8); return 1; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (004265F0) -------------------------------------------------------- char __thiscall sub_4265F0(int this, int a2, int a3) { int v3; // esi struct std::locale::facet *v4; // eax char v5; // al char v6; // bl struct std::locale::facet *v7; // eax char result; // al int v9; // edi _DWORD *v10; // eax _DWORD *v11; // eax int v12; // esi unsigned int v13; // ecx void *v14; // eax int v15; // esi unsigned int v16; // ecx int v17; // edi void *v18; // ebx int v19; // [esp+Ch] [ebp-8h] int v20; // [esp+Ch] [ebp-8h] int v21; // [esp+10h] [ebp-4h] v3 = this; v21 = this; if ( *(_DWORD *)(this + 12) & 0x100 ) { v4 = sub_425060(*(_DWORD **)(this + 16)); v5 = (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v4 + 8))(v4, a2); v6 = v5; LOBYTE(a2) = v5; v7 = sub_425060(*(_DWORD **)(v3 + 16)); result = (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v7 + 8))(v7, a3); LOBYTE(a3) = result; } else { v6 = a2; result = a3; } v9 = *(_DWORD *)(v3 + 4); if ( v6 >= 0 && v6 <= result ) { v19 = result; do { if ( v19 >= *(_DWORD *)(v3 + 20) ) break; if ( !*(_DWORD *)(v9 + 24) ) { v10 = operator new(0x20u); if ( v10 ) { *v10 = 0; v10[1] = 0; v10[2] = 0; v10[3] = 0; v10[4] = 0; v10[5] = 0; v10[6] = 0; v10[7] = 0; } else { v10 = 0; } *(_DWORD *)(v9 + 24) = v10; result = a3; } *(_BYTE *)(*(_DWORD *)(v9 + 24) + ((unsigned int)v6 >> 3)) |= 1 << (v6 & 7); v3 = v21; if ( v6 == result ) break; ++v6; } while ( v6 <= result ); LOBYTE(a2) = v6; } if ( result - v6 >= *(_DWORD *)(v3 + 24) ) { if ( !*(_DWORD *)(v9 + 32) ) { v11 = operator new(0xCu); if ( v11 ) { *v11 = 0; v11[1] = 0; v11[2] = 0; } else { v11 = 0; } *(_DWORD *)(v9 + 32) = v11; result = a3; } v12 = *(_DWORD *)(v9 + 32); v13 = *(_DWORD *)(v12 + 4); if ( *(_DWORD *)v12 <= v13 ) { v20 = v13 + 16; v14 = realloc(*(void **)(v12 + 8), v13 + 16); if ( !v14 ) unknown_libname_20(); *(_DWORD *)(v12 + 8) = v14; result = a3; *(_DWORD *)v12 = v20; } *(_BYTE *)(*(_DWORD *)(v12 + 8) + (*(_DWORD *)(v12 + 4))++) = v6; v15 = *(_DWORD *)(v9 + 32); v16 = *(_DWORD *)(v15 + 4); if ( *(_DWORD *)v15 <= v16 ) { v17 = v16 + 16; v18 = realloc(*(void **)(v15 + 8), v16 + 16); if ( !v18 ) unknown_libname_20(); result = a3; *(_DWORD *)(v15 + 8) = v18; *(_DWORD *)v15 = v17; } *(_BYTE *)(*(_DWORD *)(v15 + 8) + (*(_DWORD *)(v15 + 4))++) = result; } else if ( v6 <= result ) { do { sub_425920(v3, a2); result = a3; if ( v6 == (_BYTE)a3 ) break; LOBYTE(a2) = ++v6; } while ( v6 <= (char)a3 ); } return result; } // 7D3654: using guessed type int unknown_libname_20(void); //----- (004267B0) -------------------------------------------------------- int __cdecl sub_4267B0(int a1, int a2, int a3) { if ( a1 == a2 ) return a1; if ( a2 == a3 ) return a1; sub_4251B0(a1, a2, a3); return a3 - a2 + a1; } //----- (004267F0) -------------------------------------------------------- void __thiscall sub_4267F0(const void **this, void *a2, void *a3, size_t a4, int a5) { size_t v5; // edi const void **v6; // esi _BYTE *v7; // edx char *v8; // ecx unsigned int v9; // eax unsigned int v10; // edx size_t v11; // eax char *v12; // eax char *v13; // ebx char *v14; // edi char *v15; // eax char *v16; // eax int v17; // edi size_t v18; // [esp+Ch] [ebp-4h] size_t v19; // [esp+20h] [ebp+10h] v5 = a4 - (_DWORD)a3; v6 = this; v18 = a4 - (_DWORD)a3; if ( (void *)a4 != a3 ) { v7 = *this; v8 = (char *)this[1]; if ( (_BYTE *)*v6 - v8 - 1 < v5 ) std::_Xlength_error("vector too long"); v9 = (_BYTE *)v6[2] - v7; v10 = v5 + v8 - v7; if ( v9 >= v10 ) { memcpy_0(v8, a3, v5); sub_4267B0((int)a2, (int)v6[1], (int)v6[1] + v5); v6[1] = (char *)v6[1] + v5; } else { if ( -1 - (v9 >> 1) >= v9 ) { v11 = (v9 >> 1) + v9; v19 = v11; } else { v19 = 0; v11 = 0; } if ( v11 < v10 ) { v19 = v10; v11 = v10; } v12 = (char *)sub_401580(v11); v13 = v12; v14 = (char *)((_BYTE *)a2 - (_BYTE *)*v6); v15 = (char *)memcpy_0(v12, *v6, (_BYTE *)a2 - (_BYTE *)*v6) + (_DWORD)v14; v16 = (char *)memcpy_0(v15, a3, v18); memcpy_0(&v16[v18], a2, (_BYTE *)v6[1] - (_BYTE *)a2); v17 = (_BYTE *)v6[1] - (_BYTE *)*v6 + v18; if ( *v6 ) operator delete((void *)*v6); *v6 = v13; v6[2] = &v13[v19]; v6[1] = &v13[v17]; } } } //----- (00426900) -------------------------------------------------------- int __thiscall sub_426900(const void **this, int a2, unsigned int a3, void *a4) { *(_DWORD *)(a2 + 16) = 0; *(_DWORD *)(a2 + 20) = 15; *(_BYTE *)a2 = 0; sub_4017F0((const void **)a2, this, a3, a4); return a2; } //----- (00426940) -------------------------------------------------------- _DWORD *__thiscall sub_426940(_DWORD *this, void *a2) { _DWORD *v2; // esi void *v4; // [esp+10h] [ebp-2Ch] int v5; // [esp+20h] [ebp-1Ch] unsigned int v6; // [esp+24h] [ebp-18h] int v7; // [esp+38h] [ebp-4h] v2 = this; *this = &CefStringBase::`vftable'; this[1] = 0; *((_BYTE *)this + 8) = 0; if ( a2 ) { v6 = 15; v5 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, a2, strlen((const char *)a2)); v7 = 0; sub_406000(v2, &v4); if ( v6 >= 0x10 ) operator delete(v4); } return v2; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (004269F0) -------------------------------------------------------- signed int __thiscall sub_4269F0(int this, signed int a2) { signed int result; // eax int v3; // esi unsigned int v4; // edx _DWORD *v5; // ecx _DWORD *v6; // esi _BYTE *v7; // eax _DWORD *v8; // edx int v9; // ecx void **v10; // eax unsigned int v11; // ebx void **v12; // edx int v13; // eax _BYTE *v14; // ecx size_t v15; // edi char *v16; // [esp+10h] [ebp-38h] _BYTE *v17; // [esp+14h] [ebp-34h] char v18[4]; // [esp+18h] [ebp-30h] void *v19; // [esp+1Ch] [ebp-2Ch] int v20; // [esp+20h] [ebp-28h] char v21; // [esp+24h] [ebp-24h] unsigned int v22; // [esp+2Ch] [ebp-1Ch] unsigned int v23; // [esp+30h] [ebp-18h] int v24; // [esp+44h] [ebp-4h] result = 0; v3 = this; if ( a2 != -1 ) { v4 = **(_DWORD **)(this + 36); if ( v4 ) { v5 = *(_DWORD **)(this + 52); if ( v4 < v4 + *v5 ) { --*v5; v6 = *(_DWORD **)(v3 + 36); v7 = (_BYTE *)(*v6)++; *v7 = a2; return a2; } } if ( !*(_DWORD *)(v3 + 84) ) return -1; v8 = *(_DWORD **)(v3 + 16); if ( *v8 == v3 + 72 ) { v9 = *(_DWORD *)(v3 + 64); *v8 = *(_DWORD *)(v3 + 60); **(_DWORD **)(v3 + 32) = v9; **(_DWORD **)(v3 + 48) = 0; } if ( !*(_DWORD *)(v3 + 68) ) { if ( fputc((char)a2, *(FILE **)(v3 + 84)) != -1 ) return a2; return -1; } v18[0] = a2; v23 = 15; v19 = 0; v20 = 0; v22 = 8; v21 = 0; v24 = 0; LABEL_12: v10 = (void **)v19; v11 = v23; while ( 1 ) { v12 = v10; if ( v11 < 0x10 ) { v12 = &v19; v10 = &v19; } v13 = (*(int (__stdcall **)(int, char *, char *, char **, void **, void **, _BYTE **))(**(_DWORD **)(v3 + 68) + 20))( v3 + 76, v18, &v18[1], &v16, v10, &v12[v22 / 4], &v17); if ( v13 < 0 ) goto LABEL_33; if ( v13 > 1 ) break; v11 = v23; v10 = (void **)v19; v14 = v19; if ( v23 < 0x10 ) v14 = &v19; v15 = v17 - v14; if ( v17 != v14 ) { if ( v23 < 0x10 ) v10 = &v19; if ( v15 != fwrite(v10, 1u, v15, *(FILE **)(v3 + 84)) ) goto LABEL_33; v11 = v23; v10 = (void **)v19; } *(_BYTE *)(v3 + 73) = 1; if ( v16 != v18 ) { sub_636A10(&v19); return a2; } if ( !v15 ) { if ( v22 < 0x20 ) { sub_40AB50(&v19, 8u, 0); goto LABEL_12; } goto LABEL_33; } } if ( v13 != 3 ) { LABEL_33: sub_636A10(&v19); return -1; } if ( sub_424B00(v18[0], *(FILE **)(v3 + 84)) ) { sub_636A10(&v19); result = a2; } else { sub_636A10(&v19); result = -1; } } return result; } //----- (00426BE0) -------------------------------------------------------- int __thiscall sub_426BE0(int this, int a2, fpos_t a3, int Origin, int a5) { int v5; // esi unsigned int v6; // ebx unsigned int v7; // edi _DWORD *v8; // ecx int v9; // eax int result; // eax int v11; // edx int v12; // ecx v5 = this; if ( **(_DWORD **)(this + 32) != this + 72 || Origin != 1 || *(_DWORD *)(this + 68) ) { v7 = HIDWORD(a3); v6 = a3; } else { v7 = (unsigned __int64)(a3 - 1) >> 32; v6 = a3 - 1; } if ( !*(_DWORD *)(this + 84) || !sub_425D70((_DWORD *)this) || (v7 | v6 || Origin != 1) && _fseeki64(*(FILE **)(v5 + 84), __PAIR__(v7, v6), Origin) || fgetpos(*(FILE **)(v5 + 84), &a3) ) { result = a2; *(_DWORD *)(a2 + 4) = -1; *(_DWORD *)a2 = -1; *(_DWORD *)(a2 + 8) = 0; *(_DWORD *)(a2 + 12) = 0; *(_DWORD *)(a2 + 16) = 0; } else { v8 = *(_DWORD **)(v5 + 16); if ( *v8 == v5 + 72 ) { v9 = *(_DWORD *)(v5 + 64); *v8 = *(_DWORD *)(v5 + 60); **(_DWORD **)(v5 + 32) = v9; **(_DWORD **)(v5 + 48) = 0; } result = a2; v11 = HIDWORD(a3); *(_DWORD *)(a2 + 8) = a3; v12 = *(_DWORD *)(v5 + 76); *(_DWORD *)a2 = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)(a2 + 12) = v11; *(_DWORD *)(a2 + 16) = v12; } return result; } //----- (00426CD0) -------------------------------------------------------- int __thiscall sub_426CD0(_DWORD *this, int a2, __int64 Offset, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // esi int result; // eax int v10; // edx int v11; // ecx fpos_t v12; // [esp+Ch] [ebp-8h] v8 = this; v12 = __PAIR__(a5, a4); if ( !this[21] || !sub_425D70(this) || fsetpos((FILE *)v8[21], &v12) || Offset && _fseeki64((FILE *)v8[21], Offset, 1) || fgetpos((FILE *)v8[21], &v12) ) { result = a2; *(_DWORD *)a2 = -1; *(_DWORD *)(a2 + 4) = -1; *(_DWORD *)(a2 + 8) = 0; *(_DWORD *)(a2 + 12) = 0; *(_DWORD *)(a2 + 16) = 0; } else { v8[19] = a6; std::basic_filebuf>::_Reset_back(v8); result = a2; v10 = HIDWORD(v12); *(_DWORD *)(a2 + 8) = v12; v11 = v8[19]; *(_DWORD *)a2 = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)(a2 + 12) = v10; *(_DWORD *)(a2 + 16) = v11; } return result; } // 423160: using guessed type int __thiscall std::basic_filebuf>::_Reset_back(_DWORD); //----- (00426DB0) -------------------------------------------------------- _DWORD *__thiscall sub_426DB0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ecx _DWORD *result; // eax v1 = this; v2 = this; if ( !this[21] ) goto LABEL_9; if ( !sub_425D70(this) ) v2 = 0; if ( fclose((FILE *)v1[21]) ) LABEL_9: v2 = 0; v1[4] = v1 + 2; *((_BYTE *)v1 + 80) = 0; *((_BYTE *)v1 + 73) = 0; v1[8] = v1 + 6; v1[9] = v1 + 7; v1[5] = v1 + 3; v1[12] = v1 + 10; v1[13] = v1 + 11; v1[3] = 0; *(_DWORD *)v1[9] = 0; *(_DWORD *)v1[13] = 0; *(_DWORD *)v1[4] = 0; *(_DWORD *)v1[8] = 0; *(_DWORD *)v1[12] = 0; v1[21] = 0; v3 = dword_ACB210; result = v2; v1[17] = 0; v1[19] = v3; return result; } // ACB210: using guessed type int dword_ACB210; //----- (00426E40) -------------------------------------------------------- int __thiscall sub_426E40(_DWORD *this, int a2, _BYTE *a3, char a4) { _DWORD *v4; // edi int v5; // ecx int v6; // eax char **v7; // ecx char *v8; // ecx _BYTE *v9; // ebx int v10; // edx _BYTE *v11; // esi bool v12; // zf _DWORD *v13; // eax struct std::locale::facet *v14; // eax int v15; // ebx unsigned int v16; // eax int v17; // esi void (__thiscall ***v18)(_DWORD, signed int); // esi char v19; // al _DWORD *v20; // eax struct std::locale::facet *v21; // eax int v22; // ebx unsigned int v23; // eax int v24; // esi void (__thiscall ***v25)(_DWORD, signed int); // esi char v26; // al int v27; // eax int result; // eax unsigned int v29; // ecx int v30; // [esp+10h] [ebp-38h] char v31; // [esp+14h] [ebp-34h] int v32; // [esp+18h] [ebp-30h] int v33; // [esp+1Ch] [ebp-2Ch] char v34; // [esp+20h] [ebp-28h] int v35; // [esp+24h] [ebp-24h] char *v36; // [esp+28h] [ebp-20h] char *v37; // [esp+2Ch] [ebp-1Ch] int v38; // [esp+30h] [ebp-18h] int v39; // [esp+34h] [ebp-14h] char v40; // [esp+3Bh] [ebp-Dh] int v41; // [esp+44h] [ebp-4h] v4 = this; v5 = 0; v39 = 0; if ( "alnum" ) { v6 = 0; v7 = &off_9AB338; do { v8 = *v7; v9 = a3; v10 = (int)&v8[dword_9AB33C[v6]]; v36 = &v8[dword_9AB33C[v6]]; v37 = v8; v11 = (_BYTE *)a2; v38 = a2; if ( (_BYTE *)a2 == a3 ) goto LABEL_23; while ( v8 != (char *)v10 ) { v12 = v4[1] == 0; LOBYTE(v30) = *v8; LOBYTE(v33) = *v11; if ( v12 ) { v13 = sub_4234D0(v4, &v35); v41 = 0; v14 = sub_4248C0((int)v13); v15 = v35; v4[1] = v14; v41 = -1; if ( v15 ) { std::_Lockit::_Lockit((std::_Lockit *)&v34, 0); v16 = *(_DWORD *)(v15 + 4); if ( v16 && v16 < 0xFFFFFFFF ) *(_DWORD *)(v15 + 4) = v16 - 1; v17 = -(*(_DWORD *)(v15 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v34); v18 = (void (__thiscall ***)(_DWORD, signed int))(v15 & v17); if ( v18 ) (**v18)(v18, 1); } } v19 = (*(int (__stdcall **)(int))(*(_DWORD *)v4[1] + 8))(v33); v12 = v4[1] == 0; v40 = v19; if ( v12 ) { v20 = sub_4234D0(v4, &v32); v41 = 1; v21 = sub_4248C0((int)v20); v22 = v32; v4[1] = v21; v41 = -1; if ( v22 ) { std::_Lockit::_Lockit((std::_Lockit *)&v31, 0); v23 = *(_DWORD *)(v22 + 4); if ( v23 && v23 < 0xFFFFFFFF ) *(_DWORD *)(v22 + 4) = v23 - 1; v24 = -(*(_DWORD *)(v22 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v31); v25 = (void (__thiscall ***)(_DWORD, signed int))(v22 & v24); if ( v25 ) (**v25)(v25, 1); } } v26 = (*(int (__stdcall **)(int))(*(_DWORD *)v4[1] + 8))(v30); v11 = (_BYTE *)(v38 + 1); v8 = v37 + 1; ++v38; ++v37; if ( v40 != v26 ) goto LABEL_24; v9 = a3; v10 = (int)v36; if ( v11 == a3 ) goto LABEL_23; } if ( v11 == v9 ) { LABEL_23: if ( v8 == (char *)v10 ) break; } LABEL_24: v27 = v39 + 1; v39 = v27; v6 = 3 * v27; v7 = &(&off_9AB338)[v6]; } while ( (&off_9AB338)[v6] ); v5 = v39; } result = 0; v29 = 12 * v5; if ( (&off_9AB338)[v29 / 4] ) result = (unsigned __int16)word_9AB340[v29 / 2]; if ( a4 ) { if ( result & 3 ) result |= 3u; } return result; } // 9AB338: using guessed type char *off_9AB338; // 9AB33C: using guessed type int dword_9AB33C[]; // 9AB340: using guessed type __int16 word_9AB340[]; //----- (00427040) -------------------------------------------------------- void __thiscall sub_427040(const void **this, void *a2, int a3, int a4, int a5) { const void **v5; // esi unsigned int v6; // ebx _BYTE *v7; // edx _BYTE *v8; // ecx unsigned int v9; // edi unsigned int v10; // eax size_t v11; // eax void *v12; // eax int v13; // edi char *v14; // ST1C_4 const void *v15; // ST18_4 _BYTE *v16; // eax _BYTE *v17; // eax int v18; // ebx void *v19; // eax char *v20; // ecx int v21; // [esp+0h] [ebp-28h] void *v22; // [esp+10h] [ebp-18h] size_t v23; // [esp+14h] [ebp-14h] int *v24; // [esp+18h] [ebp-10h] int v25; // [esp+24h] [ebp-4h] v24 = &v21; v5 = this; v6 = a4 - a3; if ( a4 != a3 ) { v7 = *this; v8 = this[1]; if ( (_BYTE *)*v5 - v8 - 1 < v6 ) std::_Xlength_error("vector too long"); v9 = v6 + v8 - v7; v10 = (_BYTE *)v5[2] - v7; if ( v10 >= v9 ) { sub_4245A0((_BYTE *)a3, (_BYTE *)a4, v8); sub_4267B0((int)a2, (int)v5[1], (int)v5[1] + v6); v5[1] = (char *)v5[1] + v6; } else { if ( -1 - (v10 >> 1) >= v10 ) { v11 = (v10 >> 1) + v10; v23 = v11; } else { v23 = 0; v11 = 0; } if ( v11 < v9 ) { v23 = v6 + v8 - v7; v11 = v6 + v8 - v7; } v12 = sub_401580(v11); v13 = (_BYTE *)a2 - (_BYTE *)*v5; v14 = (char *)((_BYTE *)a2 - (_BYTE *)*v5); v15 = *v5; v22 = v12; v25 = 0; v16 = memcpy_0(v12, v15, (size_t)v14); v17 = sub_4245A0((_BYTE *)a3, (_BYTE *)a4, &v16[v13]); memcpy_0(v17, a2, (_BYTE *)v5[1] - (_BYTE *)a2); v18 = (_BYTE *)v5[1] - (_BYTE *)*v5 + v6; if ( *v5 ) operator delete((void *)*v5); v19 = v22; v20 = (char *)v22 + v18; v5[2] = (char *)v22 + v23; v5[1] = v20; *v5 = v19; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004271B0) -------------------------------------------------------- _DWORD *__thiscall sub_4271B0(void *this, _DWORD *a2) { void *v2; // edx v2 = *(void **)(*(_DWORD *)this + 24); if ( !v2 ) v2 = (void *)(*(_DWORD *)this + 28); a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, v2, strlen((const char *)v2)); return a2; } //----- (00427200) -------------------------------------------------------- int __cdecl sub_427200(char a1, int a2, void *a3, int a4) { HWND *v4; // edi int v5; // esi int v6; // edi void **v8; // [esp+10h] [ebp-1Ch] void *v9; // [esp+14h] [ebp-18h] char v10; // [esp+18h] [ebp-14h] int v11; // [esp+1Ch] [ebp-10h] int v12; // [esp+28h] [ebp-4h] v11 = 0; v4 = (HWND *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 5188); v12 = 0; sub_405A00((int)&a2, "\\ressystem\\CEF\\locales", "\\ressystem\\CEF\\paks", (int)&v11); v12 = -1; if ( v11 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v11 + 4) + 4) + v11 + 4) + 4))(); sub_426940(&v8, a3); v12 = 1; sub_4054A0(v4, (HWND *)&a1, (HINSTANCE *)&a2, (int *)a4, (int)&v8); v12 = -1; v8 = &CefStringBase::`vftable'; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v9); } v9 = 0; v10 = 0; } v5 = *(_DWORD *)sub_404D70((char *)v4); v11 = v5; if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v12 = 2; v6 = *(_DWORD *)sub_404D60(v4); v12 = -1; if ( v5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(); return v6; } // 77736C: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00427340) -------------------------------------------------------- int __thiscall sub_427340(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; *this = &std::basic_filebuf>::`vftable'; if ( this[21] ) { v2 = (_DWORD *)this[4]; if ( (_DWORD *)*v2 == v1 + 18 ) { v3 = v1[16]; *v2 = v1[15]; *(_DWORD *)v1[8] = v3; *(_DWORD *)v1[12] = 0; } } if ( *((_BYTE *)v1 + 80) ) sub_426DB0(v1); return sub_423AE0(v1); } // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; //----- (004273D0) -------------------------------------------------------- _DWORD *__thiscall sub_4273D0(void *this, char a2) { _DWORD *v2; // esi void **v3; // ecx int v4; // eax v2 = this; *(_DWORD *)this = &std::basic_filebuf>::`vftable'; if ( *((_DWORD *)this + 21) ) { v3 = (void **)*((_DWORD *)this + 4); if ( *v3 == v2 + 18 ) { v4 = v2[16]; *v3 = (void *)v2[15]; *(_DWORD *)v2[8] = v4; *(_DWORD *)v2[12] = 0; } } if ( *((_BYTE *)v2 + 80) ) sub_426DB0(v2); sub_423AE0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; //----- (00427470) -------------------------------------------------------- unsigned int __thiscall sub_427470(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax void *v4; // eax int v5; // ST04_4 signed int v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x15555555 ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 12; if ( result < (unsigned int)a2 ) { v4 = sub_423320(a2); v5 = v2[1]; v6 = *v2; v10 = v4; v12 = 0; sub_425770(v6, v5, (int)v4); v7 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(v2[1] - *v2)) >> 32) >> 1; v8 = v7 + (v7 >> 31); if ( *v2 ) operator delete((void *)*v2); result = (unsigned int)v10; v2[2] = (unsigned int)v10 + 12 * (_DWORD)a2; v2[1] = result + 12 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00427560) -------------------------------------------------------- char __thiscall sub_427560(int this, char a2) { int v2; // esi unsigned __int16 v3; // di int v5; // ebx unsigned __int8 v6; // bl _BYTE *v7; // eax _BYTE *v8; // ecx _BYTE *v9; // eax v2 = this; v3 = sub_426E40( *(_DWORD **)(this + 52), *(_DWORD *)this, (_BYTE *)(*(_DWORD *)this + 1), (*(_DWORD *)(this + 56) & 0x100) != 0); if ( !v3 ) return 0; if ( a2 ) sub_423790((_DWORD *)(v2 + 24)); v5 = *(_DWORD *)(v2 + 28); sub_4259B0(*(_DWORD *)(v2 + 28), v3, *(_DWORD **)(v2 + 40)); if ( dword_AA92F8 < 127 ) *(_WORD *)(v5 + 36) |= v3; v6 = *(_BYTE *)(v2 + 62); if ( *(_BYTE *)(*((_DWORD *)sub_425060(*(_DWORD **)(v2 + 52)) + 4) + 2 * v6) & 1 ) *(_DWORD *)(*(_DWORD *)(v2 + 28) + 8) ^= 1u; v7 = *(_BYTE **)v2; v8 = *(_BYTE **)(v2 + 8); if ( *(_BYTE **)v2 != v8 ) { if ( *v7 == 92 ) { if ( (v9 = v7 + 1, v9 != v8) && !(*(_BYTE *)(v2 + 68) & 8) && (*v9 == 40 || *v9 == 41) || !(*(_BYTE *)(v2 + 68) & 0x10) && (*v9 == 123 || *v9 == 125) ) { *(_DWORD *)v2 = v9; } } ++*(_DWORD *)v2; } sub_424090((_BYTE *)v2); return 1; } // AA92F8: using guessed type int dword_AA92F8; //----- (00427640) -------------------------------------------------------- signed int __cdecl sub_427640(_DWORD *a1, void *a2) { signed int v2; // ebx _DWORD *v3; // esi char *v4; // eax bool v5; // cf _Collvec v6; // rax char v8; // [esp+10h] [ebp-5Ch] void *v9; // [esp+34h] [ebp-38h] _DWORD *v10; // [esp+38h] [ebp-34h] int v11; // [esp+3Ch] [ebp-30h] void *v12; // [esp+40h] [ebp-2Ch] unsigned int v13; // [esp+54h] [ebp-18h] int v14; // [esp+68h] [ebp-4h] v2 = 0; v10 = a1; v11 = 0; if ( a1 && !*a1 ) { v3 = operator new(0x10u); v9 = v3; v14 = 0; if ( v3 ) { v4 = (char *)sub_4271B0(a2, &v12); v5 = *((_DWORD *)v4 + 5) < 0x10u; LOBYTE(v14) = 1; v11 = 1; if ( !v5 ) v4 = *(char **)v4; sub_4245D0((struct std::_Locinfo *)&v8, v4); v2 = 3; v3[1] = 0; *v3 = &std::collate::`vftable'; v6 = _Getcoll(); v3[2] = v6._Hand; v3[3] = v6._Page; } else { v3 = 0; } v14 = 2; *v10 = v3; if ( v2 & 2 ) { v2 &= 0xFFFFFFFD; v11 = v2; sub_424680((std::_Lockit *)&v8); } if ( v2 & 1 && v13 >= 0x10 ) operator delete(v12); } return 1; } // 9AB554: using guessed type void *std::collate::`vftable'; //----- (00427740) -------------------------------------------------------- signed int __thiscall sub_427740(int this, char a2) { _WORD *v2; // esi int v3; // eax signed int result; // eax v2 = (_WORD *)this; v3 = *(_DWORD *)(this + 68); if ( v3 & 0x4000 && *(_BYTE *)(this + 62) == 92 ) { *(_WORD *)(this + 60) = 92; sub_424240((_BYTE *)this); result = 1; } else if ( v3 & 0x20000 && sub_427560(this, a2) ) { result = 2; } else if ( sub_424460(v2, 10, 0x7FFFFFFF) == 0x7FFFFFFF ) { result = sub_426470((int)v2) != 0; } else { if ( v2[30] ) std::tr1::_Xbad(2); result = 1; } return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (004277E0) -------------------------------------------------------- void __thiscall sub_4277E0(void **this, void *a2, size_t a3, int a4) { void *v4; // ST00_4 int v5; // [esp+0h] [ebp-24h] void *v6; // [esp+10h] [ebp-14h] int *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v7 = &v5; v6 = this; v4 = *this; v8 = 0; sub_4267F0((const void **)this, v4, a2, a3, a3); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00427850) -------------------------------------------------------- _DWORD *__thiscall sub_427850(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // edi int v6; // ebx char v7; // al bool v8; // zf char *v9; // eax int v10; // ecx int v11; // eax _DWORD *v12; // ecx int v13; // eax v5 = this; if ( a5 ) { *this = &unk_9AB83C; this[26] = &std::basic_ios>::`vftable'; } *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4)) = &std::basic_istream>::`vftable'; this[2] = 0; this[3] = 0; v6 = (int)this + *(_DWORD *)(*this + 4); sub_423A10((_DWORD *)((char *)this + *(_DWORD *)(*this + 4))); *(_DWORD *)(v6 + 56) = v5 + 4; *(_DWORD *)(v6 + 60) = 0; v7 = sub_424CA0((_DWORD **)v6, 32); v8 = *(_DWORD *)(v6 + 56) == 0; *(_BYTE *)(v6 + 64) = v7; if ( v8 ) sub_405C10((_DWORD *)v6, *(_DWORD *)(v6 + 12) | 4, 0); *(_DWORD *)((char *)v5 + *(_DWORD *)(*v5 + 4)) = &std::basic_ifstream>::`vftable'; sub_423F50(v5 + 4); v5[4] = &std::basic_filebuf>::`vftable'; *((_BYTE *)v5 + 96) = 0; *((_BYTE *)v5 + 89) = 0; v5[8] = v5 + 6; v5[12] = v5 + 10; v5[13] = v5 + 11; v5[9] = v5 + 7; v5[16] = v5 + 14; v5[17] = v5 + 15; v5[7] = 0; *(_DWORD *)v5[13] = 0; *(_DWORD *)v5[17] = 0; *(_DWORD *)v5[8] = 0; *(_DWORD *)v5[12] = 0; *(_DWORD *)v5[16] = 0; v5[25] = 0; v5[23] = dword_ACB210; v5[21] = 0; v9 = (char *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v9 = *(char **)a2; if ( !sub_425C90(v5 + 4, v9, a3 | 1, a4) ) { v10 = *(_DWORD *)(*v5 + 4); v11 = *(_DWORD *)((char *)v5 + v10 + 12); v12 = (_DWORD *)((char *)v5 + v10); v13 = v11 | 2; if ( !v12[14] ) v13 |= 4u; sub_405C10(v12, v13, 0); } return v5; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB478: using guessed type void *std::basic_ios>::`vftable'; // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; // 9AB838: using guessed type void *std::basic_ifstream>::`vftable'; // ACB210: using guessed type int dword_ACB210; //----- (004279D0) -------------------------------------------------------- int __thiscall sub_4279D0(_DWORD *this) { int v1; // esi _DWORD *v2; // ecx int v3; // eax int result; // eax *(_DWORD *)((char *)this + *(_DWORD *)(*(this - 26) + 4) - 104) = &std::basic_ifstream>::`vftable'; v1 = (int)(this - 22); *(this - 22) = &std::basic_filebuf>::`vftable'; if ( *(this - 1) ) { v2 = *(_DWORD **)(v1 + 16); if ( *v2 == v1 + 72 ) { v3 = *(_DWORD *)(v1 + 64); *v2 = *(_DWORD *)(v1 + 60); **(_DWORD **)(v1 + 32) = v3; **(_DWORD **)(v1 + 48) = 0; } } if ( *(_BYTE *)(v1 + 80) ) sub_426DB0((_DWORD *)v1); sub_423AE0((_DWORD *)v1); result = *(_DWORD *)(v1 - 16); *(_DWORD *)(*(_DWORD *)(result + 4) + v1 - 16) = &std::basic_istream>::`vftable'; return result; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; // 9AB838: using guessed type void *std::basic_ifstream>::`vftable'; //----- (00427A80) -------------------------------------------------------- void *__cdecl sub_427A80(void *a1, int a2, void *a3) { unsigned int v3; // edi void *v4; // eax bool v5; // cf _BYTE *v6; // eax *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; v3 = *((_DWORD *)a1 + 4); v4 = (void *)(*(_DWORD *)(a2 + 16) + strlen((const char *)a3)); if ( v3 <= (unsigned int)v4 && *((void **)a1 + 5) != v4 && (unsigned __int8)sub_401740(a1, v4, 1) ) { v5 = *((_DWORD *)a1 + 5) < 0x10u; *((_DWORD *)a1 + 4) = v3; if ( v5 ) v6 = a1; else v6 = *(_BYTE **)a1; v6[v3] = 0; } sub_401C20(a1, a2, 0, 0xFFFFFFFF); sub_401D10((int)a1, a3, strlen((const char *)a3)); return a1; } //----- (00427B60) -------------------------------------------------------- unsigned int __thiscall sub_427B60(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 12; if ( 357913941 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 12; if ( v3 > result ) { if ( 357913941 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_427470(this, v5); } return result; } //----- (00427BE0) -------------------------------------------------------- int __thiscall sub_427BE0(_Collvec *this, int a2, char *a3, _Collvec *a4) { _Collvec *v4; // edi unsigned int v5; // eax unsigned int v6; // ecx unsigned int v7; // eax int v8; // edx char *v9; // eax unsigned int v10; // ecx _Collvec *v12; // [esp+30h] [ebp+10h] *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; v4 = a4; v5 = (char *)a4 - a3; if ( a4 != (_Collvec *)a3 ) { v12 = this + 1; do { v6 = *(_DWORD *)(a2 + 16); if ( v5 > v6 ) sub_40AB50((_DWORD *)a2, v5 - v6, 0); else sub_4014F0((_DWORD *)a2, v5, 0xFFFFFFFF); v7 = *(_DWORD *)(a2 + 20); if ( v7 < 0x10 ) v8 = a2; else v8 = *(_DWORD *)a2; if ( v7 < 0x10 ) v9 = (char *)a2; else v9 = *(char **)a2; v5 = _Strxfrm(v9, (char *)(*(_DWORD *)(a2 + 16) + v8), a3, (const char *)v4, v12); } while ( v5 > *(_DWORD *)(a2 + 16) && v5 ); } v10 = *(_DWORD *)(a2 + 16); if ( v5 > v10 ) sub_40AB50((_DWORD *)a2, v5 - v10, 0); else sub_4014F0((_DWORD *)a2, v5, 0xFFFFFFFF); return a2; } //----- (00427CD0) -------------------------------------------------------- struct std::locale::facet *__cdecl sub_427CD0(int *a1) { int v1; // ebx void *v2; // edi unsigned int v3; // esi int v4; // eax struct std::locale::facet *v5; // ecx int v6; // eax struct std::locale::facet *v7; // esi unsigned int v8; // eax char v10; // [esp+10h] [ebp-24h] char v11; // [esp+1Ch] [ebp-18h] char v12; // [esp+20h] [ebp-14h] struct std::locale::facet *v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] std::_Lockit::_Lockit((std::_Lockit *)&v11, 0); v1 = dword_ACB220; v14 = 0; v13 = (struct std::locale::facet *)dword_ACB220; if ( !dword_ACB228 ) { std::_Lockit::_Lockit((std::_Lockit *)&v12, 0); if ( !dword_ACB228 ) dword_ACB228 = ++dword_BA2A30; std::_Lockit::~_Lockit((std::_Lockit *)&v12); } v2 = a1; v3 = dword_ACB228; v4 = *a1; if ( (unsigned int)dword_ACB228 >= *(_DWORD *)(*a1 + 12) ) { v5 = 0; } else { v5 = *(struct std::locale::facet **)(*(_DWORD *)(v4 + 8) + 4 * dword_ACB228); if ( v5 ) { LABEL_11: v7 = v5; LABEL_12: if ( v7 ) goto LABEL_21; goto LABEL_13; } } if ( !*(_BYTE *)(v4 + 20) ) goto LABEL_11; v6 = sub_7D3A0B(); if ( v3 < *(_DWORD *)(v6 + 12) ) { v7 = *(struct std::locale::facet **)(*(_DWORD *)(v6 + 8) + 4 * v3); goto LABEL_12; } LABEL_13: if ( v1 ) { v7 = (struct std::locale::facet *)v1; } else { if ( sub_427640(&v13, v2) == -1 ) { sub_7D43D9((std::exception *)&v10, "bad cast"); _CxxThrowException(&v10, &_TI2_AVbad_cast_std__); } v7 = v13; dword_ACB220 = (int)v13; std::_Lockit::_Lockit((std::_Lockit *)&a1, 0); v8 = *((_DWORD *)v7 + 1); if ( v8 < 0xFFFFFFFF ) *((_DWORD *)v7 + 1) = v8 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a1); std::locale::facet::_Facet_Register(v7); } LABEL_21: v14 = -1; std::_Lockit::~_Lockit((std::_Lockit *)&v11); return v7; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A7CAB4: using guessed type int _TI2_AVbad_cast_std__; // ACB220: using guessed type int dword_ACB220; // ACB228: using guessed type int dword_ACB228; // BA2A30: using guessed type int dword_BA2A30; //----- (00427E10) -------------------------------------------------------- void __thiscall sub_427E10(void **this, int a2, int a3, int a4) { void *v4; // ST00_4 int v5; // [esp+0h] [ebp-24h] void *v6; // [esp+10h] [ebp-14h] int *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v7 = &v5; v6 = this; v4 = *this; v8 = 0; sub_427040((const void **)this, v4, a2, a3, a3); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00427EA0) -------------------------------------------------------- _DWORD *__thiscall sub_427EA0(struct std::ios_base *this, char a2) { _DWORD *v2; // edi struct std::ios_base *v3; // esi v2 = (_DWORD *)((char *)this - 104); v3 = this; sub_4279D0(this); *(_DWORD *)v3 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (00427EE0) -------------------------------------------------------- unsigned int __thiscall sub_427EE0(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi unsigned int v3; // ecx unsigned int result; // eax v2 = this; v3 = this[1]; result = (signed int)(v3 - *v2) / 12; if ( result <= a2 ) { if ( result < a2 ) { sub_427B60(v2, a2 - result); sub_4260E0(v2[1], a2 - (signed int)(v2[1] - *v2) / 12); result = (signed int)(v2[1] - *v2) / 12; v2[1] += 12 * (a2 - result); } } else { result = *v2 + 12 * a2; if ( result != v3 ) v2[1] = result; } return result; } //----- (00427FB0) -------------------------------------------------------- struct std::locale::facet *__thiscall sub_427FB0(struct std::locale::facet **this) { struct std::locale::facet **v1; // ebx int *v2; // eax struct std::locale::facet *result; // eax int v4; // edi unsigned int v5; // eax int v6; // esi void (__thiscall ***v7)(_DWORD, signed int); // esi char v8; // [esp+10h] [ebp-14h] int v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v1 = this; if ( !*this ) { v2 = sub_4234D0(this, &v9); v10 = 0; result = sub_427CD0(v2); v4 = v9; *v1 = result; v10 = -1; if ( !v4 ) return result; std::_Lockit::_Lockit((std::_Lockit *)&v8, 0); v5 = *(_DWORD *)(v4 + 4); if ( v5 && v5 < 0xFFFFFFFF ) *(_DWORD *)(v4 + 4) = v5 - 1; v6 = -(*(_DWORD *)(v4 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v8); v7 = (void (__thiscall ***)(_DWORD, signed int))(v4 & v6); if ( v7 ) (**v7)(v7, 1); } return *v1; } //----- (00428060) -------------------------------------------------------- void *__thiscall sub_428060(struct std::locale::facet **this, void *a2, void *a3, size_t a4) { void *v4; // esi int v5; // ebx struct std::locale::facet *v6; // eax struct std::locale::facet *v7; // eax void *v8; // eax void *v10; // [esp+10h] [ebp-48h] int v11; // [esp+14h] [ebp-44h] int v12; // [esp+18h] [ebp-40h] int v13; // [esp+20h] [ebp-38h] int v14; // [esp+24h] [ebp-34h] struct std::locale::facet **v15; // [esp+28h] [ebp-30h] void *v16; // [esp+2Ch] [ebp-2Ch] unsigned int v17; // [esp+40h] [ebp-18h] int v18; // [esp+54h] [ebp-4h] v15 = this; *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; v14 = (int)a2; *(_BYTE *)a2 = 0; v18 = 0; v13 = 1; if ( a3 != (void *)a4 ) { v10 = 0; v11 = 0; v12 = 0; sub_4277E0(&v10, a3, a4, v14); v18 = 1; v4 = v10; v5 = v11 - (_DWORD)v10; v6 = sub_425060(v15); (*(void (__thiscall **)(struct std::locale::facet *, void *, int))(*(_DWORD *)v6 + 4))(v6, v4, (int)v4 + v5); v7 = sub_427FB0(v15); v8 = (void *)sub_425110((void *)v7, (int)&v16, (int)v4, (int)v4 + v5); LOBYTE(v18) = 2; sub_406450(a2, v8); if ( v17 >= 0x10 ) operator delete(v16); if ( v4 ) operator delete(v4); } return a2; } //----- (00428160) -------------------------------------------------------- char __thiscall sub_428160(struct std::locale::facet **this, __int16 a2) { struct std::locale::facet *v2; // eax char *v3; // eax char v4; // bl void *v6; // [esp+4h] [ebp-20h] int v7; // [esp+14h] [ebp-10h] unsigned int v8; // [esp+18h] [ebp-Ch] v2 = sub_427FB0(this); sub_425110((void *)v2, (int)&v6, (int)&a2, (int)&a2 + 1); if ( v7 == 1 ) { v3 = (char *)v6; if ( v8 < 0x10 ) v3 = (char *)&v6; v4 = *v3; } else { v4 = a2; } if ( v8 >= 0x10 ) operator delete(v6); return v4; } //----- (004281D0) -------------------------------------------------------- BOOL __thiscall sub_4281D0(struct std::locale::facet ***this, char a2, char a3) { struct std::locale::facet ***v3; // esi struct std::locale::facet *v4; // eax char *v5; // eax char v6; // al struct std::locale::facet **v7; // ecx struct std::locale::facet *v8; // eax char *v9; // eax char v10; // bl char v12; // [esp+Bh] [ebp-45h] char v13; // [esp+Ch] [ebp-44h] char v14; // [esp+Dh] [ebp-43h] char v15; // [esp+10h] [ebp-40h] char v16; // [esp+11h] [ebp-3Fh] void *v17; // [esp+14h] [ebp-3Ch] int v18; // [esp+24h] [ebp-2Ch] unsigned int v19; // [esp+28h] [ebp-28h] void *v20; // [esp+30h] [ebp-20h] int v21; // [esp+40h] [ebp-10h] unsigned int v22; // [esp+44h] [ebp-Ch] v13 = a2; v3 = this; v4 = sub_427FB0(*this); sub_425110((void *)v4, (int)&v20, (int)&v13, (int)&v14); if ( v21 == 1 ) { v5 = (char *)v20; if ( v22 < 0x10 ) v5 = (char *)&v20; v6 = *v5; } else { v6 = v13; } v12 = v6; if ( v22 >= 0x10 ) operator delete(v20); v21 = 0; LOBYTE(v20) = 0; v15 = a3; v7 = *v3; v22 = 15; v8 = sub_427FB0(v7); sub_425110((void *)v8, (int)&v17, (int)&v15, (int)&v16); if ( v18 == 1 ) { v9 = (char *)v17; if ( v19 < 0x10 ) v9 = (char *)&v17; v10 = *v9; } else { v10 = v15; } if ( v19 >= 0x10 ) operator delete(v17); return v12 == v10; } //----- (004282B0) -------------------------------------------------------- void *__thiscall sub_4282B0(struct std::locale::facet **this, void *a2, int a3, int a4) { void *v4; // esi int v5; // ebx struct std::locale::facet *v6; // eax struct std::locale::facet *v7; // eax void *v8; // eax void *v10; // [esp+10h] [ebp-48h] int v11; // [esp+14h] [ebp-44h] int v12; // [esp+18h] [ebp-40h] int v13; // [esp+20h] [ebp-38h] void *v14; // [esp+24h] [ebp-34h] struct std::locale::facet **v15; // [esp+28h] [ebp-30h] void *v16; // [esp+2Ch] [ebp-2Ch] unsigned int v17; // [esp+40h] [ebp-18h] int v18; // [esp+54h] [ebp-4h] *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; v15 = this; v14 = a2; *(_BYTE *)a2 = 0; v18 = 0; v13 = 1; if ( a3 != a4 ) { v10 = 0; v11 = 0; v12 = 0; sub_427E10(&v10, a3, a4, (int)v14); v18 = 1; v4 = v10; v5 = v11 - (_DWORD)v10; v6 = sub_425060(v15); (*(void (__thiscall **)(struct std::locale::facet *, void *, int))(*(_DWORD *)v6 + 4))(v6, v4, (int)v4 + v5); v7 = sub_427FB0(v15); v8 = (void *)sub_425110((void *)v7, (int)&v16, (int)v4, (int)v4 + v5); LOBYTE(v18) = 2; sub_406450(a2, v8); if ( v17 >= 0x10 ) operator delete(v16); if ( v4 ) operator delete(v4); } return a2; } //----- (004283B0) -------------------------------------------------------- void __thiscall sub_4283B0(int this, void *a2, size_t a3, int a4) { int v4; // esi int v5; // edi signed int v6; // eax unsigned __int8 *v7; // eax unsigned __int8 *v8; // edx unsigned int v9; // esi unsigned int v10; // ebx unsigned int v11; // ecx int v12; // eax bool v13; // zf signed int v14; // eax bool v15; // bl _DWORD *v16; // eax unsigned int v17; // esi int v18; // esi _DWORD *v19; // edi _DWORD *v20; // eax int *v21; // eax int v22; // [esp+14h] [ebp-58h] unsigned int v23; // [esp+1Ch] [ebp-50h] char v24; // [esp+23h] [ebp-49h] size_t v25; // [esp+24h] [ebp-48h] unsigned int v26; // [esp+38h] [ebp-34h] void *v27; // [esp+40h] [ebp-2Ch] unsigned int v28; // [esp+50h] [ebp-1Ch] unsigned int v29; // [esp+54h] [ebp-18h] int v30; // [esp+68h] [ebp-4h] v4 = this; v5 = *(_DWORD *)(this + 4); v22 = this; sub_428060(*(struct std::locale::facet ***)(this + 16), &v27, a2, a3); v6 = dword_AA9338; v30 = 0; v23 = 0; if ( dword_AA9338 > 0 ) { while ( 1 ) { v24 = v23; v7 = (unsigned __int8 *)sub_428060(*(struct std::locale::facet ***)(v4 + 16), &v25, &v24, (size_t)&v25); v8 = (unsigned __int8 *)v27; if ( v29 < 0x10 ) v8 = (unsigned __int8 *)&v27; v9 = *((_DWORD *)v7 + 4); v10 = v28; v11 = *((_DWORD *)v7 + 4); if ( v9 >= v28 ) v11 = v28; if ( *((_DWORD *)v7 + 5) >= 0x10u ) v7 = *(unsigned __int8 **)v7; v12 = sub_40C0B0(v7, v8, v11); v13 = v12 == 0; if ( !v12 ) { if ( v9 >= v10 ) v14 = v9 != v10; else v14 = -1; v13 = v14 == 0; } v15 = v13; LOBYTE(v30) = 0; if ( v26 >= 0x10 ) operator delete((void *)v25); if ( v15 ) { if ( !*(_DWORD *)(v5 + 24) ) { v16 = operator new(0x20u); if ( v16 ) { *v16 = 0; v16[1] = 0; v16[2] = 0; v16[3] = 0; v16[4] = 0; v16[5] = 0; v16[6] = 0; v16[7] = 0; } else { v16 = 0; } *(_DWORD *)(v5 + 24) = v16; } v17 = v23; *(_BYTE *)((v23 >> 3) + *(_DWORD *)(v5 + 24)) |= 1 << (v23 & 7); } else { v17 = v23; } v6 = dword_AA9338; v23 = v17 + 1; if ( (signed int)(v17 + 1) >= dword_AA9338 ) break; v4 = v22; } } if ( v6 < 127 ) { v18 = v5 + 40; v19 = *(_DWORD **)(v5 + 40); if ( !v19 ) goto LABEL_41; do { v20 = *(_DWORD **)v18; if ( (unsigned int)a4 >= **(_DWORD **)v18 ) break; v18 = (int)(v20 + 4); } while ( v20[4] ); v19 = *(_DWORD **)v18; if ( !*(_DWORD *)v18 || a4 != *v19 ) { LABEL_41: v21 = (int *)operator new(0x14u); if ( v21 ) { *v21 = a4; v21[1] = 0; v21[2] = 0; v21[3] = 0; } else { v21 = 0; } *(_DWORD *)v18 = v21; v21[4] = (int)v19; } sub_423830((void *)(*(_DWORD *)v18 + 4), a2, (_BYTE *)a3); } if ( v29 >= 0x10 ) operator delete(v27); } // AA9338: using guessed type int dword_AA9338; //----- (00428590) -------------------------------------------------------- int __thiscall sub_428590(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax struct std::locale::facet *v5; // eax char v6; // al int v7; // esi unsigned int v8; // eax int v9; // edi void *v10; // eax int result; // eax v2 = this; v3 = this[1]; if ( *(_DWORD *)(v3 + 4) != 6 || *(_BYTE *)(v3 + 8) & 4 ) sub_4243A0(this); v4 = v2[3]; if ( v4 & 0x100 ) { v5 = sub_425060((_DWORD *)v2[4]); v6 = (*(int (__thiscall **)(struct std::locale::facet *, int))(*(_DWORD *)v5 + 8))(v5, a2); } else { if ( !(v4 & 0x800) ) goto LABEL_9; v6 = sub_428160((struct std::locale::facet **)v2[4], a2); } LOBYTE(a2) = v6; LABEL_9: v7 = v2[1]; v8 = *(_DWORD *)(v7 + 24); if ( *(_DWORD *)(v7 + 20) <= v8 ) { v9 = v8 + 16; v10 = realloc(*(void **)(v7 + 28), v8 + 16); if ( !v10 ) unknown_libname_20(); *(_DWORD *)(v7 + 20) = v9; *(_DWORD *)(v7 + 28) = v10; } result = *(_DWORD *)(v7 + 24); *(_BYTE *)(*(_DWORD *)(v7 + 28) + result) = a2; ++*(_DWORD *)(v7 + 24); return result; } // 7D3654: using guessed type int unknown_libname_20(void); //----- (00428630) -------------------------------------------------------- char __cdecl sub_428630(unsigned __int8 a1, size_t *a2, struct std::locale::facet **a3) { size_t *v3; // ebx void *v4; // eax char *v5; // ecx int v6; // ecx void *v7; // eax void **v8; // esi unsigned __int8 *v9; // ecx unsigned int v10; // edx unsigned __int8 *v11; // esi int v12; // eax int v13; // eax signed int v15; // [esp+14h] [ebp-6Ch] size_t *v16; // [esp+18h] [ebp-68h] void *v17; // [esp+1Ch] [ebp-64h] unsigned int v18; // [esp+30h] [ebp-50h] void *v19; // [esp+38h] [ebp-48h] unsigned int v20; // [esp+48h] [ebp-38h] unsigned int v21; // [esp+4Ch] [ebp-34h] void *v22; // [esp+54h] [ebp-2Ch] unsigned int v23; // [esp+64h] [ebp-1Ch] unsigned int v24; // [esp+68h] [ebp-18h] int v25; // [esp+7Ch] [ebp-4h] v3 = a2; v16 = a2; v24 = 15; v23 = 0; LOBYTE(v22) = 0; v25 = 0; v21 = 15; LOWORD(v19) = a1; v20 = 1; LOBYTE(v25) = 1; v4 = sub_4282B0(a3, &v17, (int)&v19, (int)&v19 + 1); LOBYTE(v25) = 2; sub_406450(&v19, v4); LOBYTE(v25) = 1; if ( v18 >= 0x10 ) operator delete(v17); if ( !a2 ) { LABEL_43: if ( v21 >= 0x10 ) operator delete(v19); v21 = 15; v20 = 0; LOBYTE(v19) = 0; if ( v24 >= 0x10 ) operator delete(v22); return 0; } while ( 1 ) { v15 = 0; if ( (signed int)v3[2] > 0 ) break; LABEL_42: v3 = (size_t *)v3[4]; v16 = v3; if ( !v3 ) goto LABEL_43; } while ( 1 ) { sub_4018E0(&v22, (void *)(v15 + v3[3]), *v3); v5 = (char *)v22; if ( v24 < 0x10 ) v5 = (char *)&v22; v6 = (int)&v5[v23]; v7 = v22; if ( v24 < 0x10 ) v7 = &v22; v8 = (void **)sub_4282B0(a3, &v17, (int)v7, v6); if ( &v22 != v8 ) { if ( v24 >= 0x10 ) operator delete(v22); v24 = 15; v23 = 0; LOBYTE(v22) = 0; if ( (unsigned int)v8[5] >= 0x10 ) { v22 = *v8; *v8 = 0; } else { memcpy_0(&v22, v8, (size_t)v8[4] + 1); } v23 = (unsigned int)v8[4]; v24 = (unsigned int)v8[5]; v8[4] = 0; v8[5] = 0; } LOBYTE(v25) = 1; if ( v18 >= 0x10 ) operator delete(v17); v9 = (unsigned __int8 *)v19; if ( v21 < 0x10 ) v9 = (unsigned __int8 *)&v19; v10 = v20; if ( v23 < v20 ) v10 = v23; v11 = (unsigned __int8 *)v22; if ( v24 < 0x10 ) v11 = (unsigned __int8 *)&v22; if ( v10 < 4 ) { LABEL_27: if ( !v10 ) goto LABEL_37; } else { while ( *(_DWORD *)v11 == *(_DWORD *)v9 ) { v10 -= 4; v9 += 4; v11 += 4; if ( v10 < 4 ) goto LABEL_27; } } v12 = *v11 - *v9; if ( *v11 == *v9 ) { if ( v10 <= 1 ) goto LABEL_36; v12 = v11[1] - v9[1]; if ( v11[1] == v9[1] ) { if ( v10 <= 2 ) goto LABEL_36; v12 = v11[2] - v9[2]; if ( v11[2] == v9[2] ) { if ( v10 <= 3 ) { LABEL_36: v3 = v16; LABEL_37: v13 = 0; goto LABEL_38; } v12 = v11[3] - v9[3]; } } } v3 = v16; v13 = (v12 >> 31) | 1; LABEL_38: if ( !v13 && v23 >= v20 && v23 == v20 ) break; v15 += *v3; if ( v15 >= (signed int)v3[2] ) goto LABEL_42; } if ( v21 >= 0x10 ) operator delete(v19); v21 = 15; v20 = 0; LOBYTE(v19) = 0; if ( v24 >= 0x10 ) operator delete(v22); return 1; } //----- (004288F0) -------------------------------------------------------- int *__cdecl sub_4288F0(int *a1, int a2, char *a3, char *a4, char *a5, char a6, char a7) { char *v7; // eax char *v8; // ecx char *v9; // esi int v10; // ebx char *v11; // edi char v12; // cl int *result; // eax bool v14; // zf int *v15; // eax int v16; // ecx int v17; // [esp+Ch] [ebp-4h] v7 = (char *)a2; v8 = a3; v9 = a4; v10 = a2; v11 = a5; v17 = a2; if ( (char *)a2 != a3 ) { while ( v9 != v11 ) { v12 = *v9; a2 = (int)(v7 + 1); ++v9; if ( !(unsigned __int8)sub_4281D0((struct std::locale::facet ***)&a6, *v7, v12) ) { result = a1; *a1 = v10; return result; } v7 = (char *)a2; v8 = a3; if ( (char *)a2 == a3 ) goto LABEL_5; } goto LABEL_6; } LABEL_5: if ( v9 == v11 ) { LABEL_6: result = a1; *a1 = a2; return result; } if ( !a7 || (v14 = v7 == v8, v15 = &a2, !v14) ) v15 = &v17; v16 = *v15; result = a1; *a1 = v16; return result; } //----- (00428980) -------------------------------------------------------- int *__cdecl sub_428980(int *a1, int a2, char *a3, char *a4, char *a5, char a6, char a7) { char *v7; // eax char *v8; // ecx int v9; // esi char *v10; // edx int *result; // eax bool v12; // zf int *v13; // eax int v14; // ecx int v15; // [esp+4h] [ebp-4h] v7 = (char *)a2; v8 = a3; v9 = a2; v15 = a2; if ( (char *)a2 != a3 ) { while ( a4 != a5 ) { v10 = a4++; a2 = (int)(v7 + 1); if ( !(unsigned __int8)sub_4281D0((struct std::locale::facet ***)&a6, *v7, *v10) ) { result = a1; *a1 = v9; return result; } v7 = (char *)a2; v8 = a3; if ( (char *)a2 == a3 ) goto LABEL_5; } goto LABEL_6; } LABEL_5: if ( a4 == a5 ) { LABEL_6: result = a1; *a1 = a2; return result; } if ( !a7 || (v12 = v7 == v8, v13 = &a2, !v12) ) v13 = &v15; v14 = *v13; result = a1; *a1 = v14; return result; } //----- (00428A10) -------------------------------------------------------- _DWORD *__thiscall sub_428A10(_DWORD *this, int a2, int a3, char a4) { _DWORD *v4; // esi _DWORD *v5; // ecx int v6; // eax _DWORD *v7; // eax int v8; // ecx _DWORD *v9; // edi _DWORD *result; // eax int v11; // ecx int v12; // ecx int v13; // edx int v14; // [esp+8h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; if ( v5[1] == 6 && v5[6] != 1 ) { v6 = v5[6] - 1; v5[6] = v6; sub_428590(v4, *(unsigned __int8 *)(v5[7] + v6)); } v14 = v4[1]; v7 = operator new(0x18u); if ( v7 ) { v8 = v4[2] + 1; v4[2] = v8; v7[1] = 19; v7[2] = 0; v7[3] = 0; v7[4] = 0; *v7 = &std::tr1::_Node_end_rep::`vftable'; v7[5] = v8; v9 = v7; } else { v9 = 0; } result = operator new(0x20u); if ( result ) { result[2] = a4 != 0 ? 2 : 0; result[1] = 18; result[3] = 0; result[4] = 0; *result = &std::tr1::_Node_rep::`vftable'; result[5] = v9; result[6] = a2; result[7] = a3; } else { result = 0; } v9[4] = v4[1]; v11 = *(_DWORD *)(v4[1] + 12); if ( v11 ) { v9[3] = v11; *(_DWORD *)(*(_DWORD *)(v4[1] + 12) + 16) = v9; } v12 = v14; *(_DWORD *)(v4[1] + 12) = v9; v4[1] = v9; v13 = *(_DWORD *)(v14 + 4); if ( v13 == 9 || v13 == 14 ) v12 = *(_DWORD *)(v14 + 20); *(_DWORD *)(*(_DWORD *)(v12 + 16) + 12) = result; result[4] = *(_DWORD *)(v12 + 16); *(_DWORD *)(v12 + 16) = result; result[3] = v12; return result; } // 9AB43C: using guessed type void *std::tr1::_Node_end_rep::`vftable'; // 9AB444: using guessed type void *std::tr1::_Node_rep::`vftable'; //----- (00428B10) -------------------------------------------------------- int __thiscall sub_428B10(_BYTE **this, _BYTE *a2) { _BYTE **v2; // esi _BYTE *v3; // ebx _BYTE *v4; // eax _BYTE *v5; // ecx _BYTE *v6; // eax unsigned __int16 v7; // ax unsigned __int16 v8; // di _BYTE *v9; // ebx _BYTE *v10; // eax _BYTE *v11; // ecx _BYTE *v12; // eax int v14; // [esp+Ch] [ebp-4h] v2 = this; v3 = *this; v14 = 0; if ( this[16] == (_BYTE *)-1 ) goto LABEL_46; do { if ( v2[16] == a2 ) break; v4 = *v2; v5 = v2[2]; if ( *v2 != v5 ) { if ( *v4 == 92 ) { if ( (v6 = v4 + 1, v6 != v5) && !((_BYTE)v2[17] & 8) && (*v6 == 40 || *v6 == 41) || !((_BYTE)v2[17] & 0x10) && (*v6 == 123 || *v6 == 125) ) { *v2 = v6; } } ++*v2; } sub_424090(v2); ++v14; } while ( v2[16] != (_BYTE *)-1 ); if ( v2[16] == (_BYTE *)-1 ) { LABEL_46: if ( a2 == (_BYTE *)46 ) std::tr1::_Xbad(0); std::tr1::_Xbad(a2 != (_BYTE *)58 ? 14 : 1); } if ( a2 == (_BYTE *)58 ) { v7 = sub_426E40(v2[13], (int)v3, *v2, ((unsigned int)v2[14] & 0x100) != 0); v8 = v7; if ( !v7 ) std::tr1::_Xbad(1); v9 = v2[7]; sub_4259B0((int)v2[7], v7, v2[10]); if ( dword_AA92F8 < 127 ) *((_WORD *)v9 + 18) |= v8; } else if ( a2 == (_BYTE *)61 ) { if ( v3 == *v2 ) std::tr1::_Xbad(0); sub_4283B0((int)(v2 + 6), v3, (size_t)*v2, v14); } else if ( a2 == (_BYTE *)46 ) { if ( v3 == *v2 ) std::tr1::_Xbad(0); sub_425190(v2 + 6, v3, *v2, v14); } v10 = *v2; v11 = v2[2]; if ( *v2 != v11 ) { if ( *v10 == 92 ) { if ( (v12 = v10 + 1, v12 != v11) && !((_BYTE)v2[17] & 8) && (*v12 == 40 || *v12 == 41) || !((_BYTE)v2[17] & 0x10) && (*v12 == 123 || *v12 == 125) ) { *v2 = v12; } } ++*v2; } return sub_424090(v2); } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); // AA92F8: using guessed type int dword_AA92F8; //----- (00428CA0) -------------------------------------------------------- char __thiscall sub_428CA0(int *this, int a2) { int *v2; // ebx struct std::locale::facet *v3; // eax char *v4; // esi int v5; // edi char *v6; // eax char v7; // al char v8; // dl int v9; // ecx int v10; // esi int v11; // eax int v12; // ecx int v13; // esi bool v14; // zf int v15; // ecx _BYTE *v16; // eax int i; // ecx size_t *v18; // eax int v20; // [esp+4h] [ebp-8h] __int16 v21; // [esp+8h] [ebp-4h] v2 = this; LOBYTE(v21) = *(_BYTE *)*this; if ( this[136] & 0x100 ) { v3 = sub_425060(this + 139); LOBYTE(v21) = (*(int (__thiscall **)(struct std::locale::facet *, _BYTE))(*(_DWORD *)v3 + 8))(v3, v21); } v4 = (char *)*v2; v5 = a2; v20 = *v2 + 1; if ( *(_DWORD *)(a2 + 20) ) { v6 = *sub_423510((char **)&a2, v4, (char *)v2[133], *(_DWORD **)(a2 + 20)); if ( v6 != v4 ) { v20 = (int)v6; v7 = 1; goto LABEL_33; } } if ( *(_DWORD *)(v5 + 32) ) { v8 = v2[136] & 0x800 ? sub_428160((struct std::locale::facet **)v2 + 139, v21) : (_BYTE)v21; v9 = *(_DWORD *)(v5 + 32); v10 = *(_DWORD *)(v9 + 4); v11 = 0; if ( v10 > 0 ) { v12 = *(_DWORD *)(v9 + 8); while ( *(_BYTE *)(v12 + v11) > v8 || v8 > *(_BYTE *)(v12 + v11 + 1) ) { v11 += 2; if ( v11 >= v10 ) goto LABEL_15; } goto LABEL_31; } } LABEL_15: if ( dword_ACB224 > (char)v21 || (char)v21 >= dword_AA933C ) { if ( *(_DWORD *)(v5 + 28) ) { v15 = *(_DWORD *)(v5 + 28); v16 = *(_BYTE **)(v15 + 8); for ( i = (int)&v16[*(_DWORD *)(v15 + 4)]; v16 != (_BYTE *)i; ++v16 ) { if ( *v16 == (_BYTE)v21 ) break; } if ( v16 != (_BYTE *)(*(_DWORD *)(*(_DWORD *)(v5 + 28) + 4) + *(_DWORD *)(*(_DWORD *)(v5 + 28) + 8)) ) { v7 = 1; goto LABEL_33; } } if ( *(_WORD *)(v5 + 36) && (unsigned __int8)sub_425710(v2 + 139, v21, *(_WORD *)(v5 + 36)) ) { v7 = 1; goto LABEL_33; } v18 = *(size_t **)(v5 + 40); if ( !v18 ) goto LABEL_32; v14 = sub_428630(v21, v18, (struct std::locale::facet **)v2 + 139) == 0; } else { v13 = *(_DWORD *)(v5 + 24); if ( !v13 ) goto LABEL_32; v14 = ((unsigned __int8)(1 << (v21 & 7)) & *(_BYTE *)(((unsigned int)(char)v21 >> 3) + v13)) == 0; } if ( !v14 ) { LABEL_31: v7 = 1; goto LABEL_33; } LABEL_32: v7 = 0; LABEL_33: if ( v7 == (*(_BYTE *)(v5 + 8) & 1) ) return 0; *v2 = v20; return 1; } // AA933C: using guessed type int dword_AA933C; // ACB224: using guessed type int dword_ACB224; //----- (00428E40) -------------------------------------------------------- int *__cdecl sub_428E40(int *a1, int a2, char *a3, char *a4, char *a5, _DWORD *a6, __int16 a7, char a8) { __int16 v8; // cx char *v9; // eax int *v10; // esi int *result; // eax int *v12; // eax v8 = a7; v9 = a3; v10 = a1; *a1 = (int)a3; if ( v8 & 0x800 ) { *v10 = *sub_4288F0((int *)&a1, a2, v9, a4, a5, (char)a6, a8); result = v10; } else { if ( v8 & 0x100 ) { v12 = sub_426110((int *)&a1, a2, v9, a4, a5, a6, a8); } else { LOBYTE(a1) = 0; v12 = sub_423590((int *)&a1, a2, v9, a4, a5, (int)a1, a8); } *v10 = *v12; result = v10; } return result; } //----- (00428EE0) -------------------------------------------------------- int *__cdecl sub_428EE0(int *a1, int a2, char *a3, char *a4, char *a5, _DWORD *a6, __int16 a7, char a8) { __int16 v8; // cx char *v9; // eax int *v10; // esi int *result; // eax int *v12; // eax v8 = a7; v9 = a3; v10 = a1; *a1 = (int)a3; if ( v8 & 0x800 ) { *v10 = *sub_428980((int *)&a1, a2, v9, a4, a5, (char)a6, a8); result = v10; } else { if ( v8 & 0x100 ) { v12 = sub_4262C0((int *)&a1, a2, v9, a4, a5, a6, a8); } else { LOBYTE(a1) = 0; v12 = sub_423610((int *)&a1, a2, v9, a4, a5, (int)a1, a8); } *v10 = *v12; result = v10; } return result; } //----- (00428F80) -------------------------------------------------------- char __thiscall sub_428F80(int this) { int v1; // esi unsigned int v2; // eax char result; // al v1 = this; if ( *(_DWORD *)(this + 68) & 0x100 && sub_424460((_WORD *)this, 10, 0x7FFFFFFF) != 0x7FFFFFFF ) { v2 = *(unsigned __int16 *)(v1 + 60); if ( !(_WORD)v2 ) { if ( *(_DWORD *)(v1 + 68) & 0x100000 ) return sub_428590((_DWORD *)(v1 + 24), *(unsigned __int8 *)(v1 + 60)); goto LABEL_15; } if ( *(_DWORD *)(v1 + 68) & 0x200 && (unsigned __int16)v2 > 9u || *(_DWORD *)(v1 + 12) < v2 || !((1 << v2) & *(_DWORD *)(v1 + 20)) ) { std::tr1::_Xbad(3); } result = (unsigned int)sub_422D00((_DWORD *)(v1 + 24), v2); } else { if ( sub_426470(v1) ) return sub_428590((_DWORD *)(v1 + 24), *(unsigned __int8 *)(v1 + 60)); if ( !(*(_DWORD *)(v1 + 68) & 0x20000) || (result = sub_427560(v1, 1)) == 0 ) LABEL_15: std::tr1::_Xbad(2); } return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (00429030) -------------------------------------------------------- _DWORD *__thiscall sub_429030(int this) { int v1; // esi _DWORD *result; // eax int v3; // ebx int v4; // edi _BYTE *v5; // eax _BYTE *v6; // ecx _BYTE *v7; // eax v1 = this; result = *(_DWORD **)(this + 64); v3 = 0; v4 = -1; if ( result == (_DWORD *)42 ) goto LABEL_19; if ( result != (_DWORD *)43 ) { if ( result == (_DWORD *)63 ) { v4 = 1; goto LABEL_19; } if ( result != (_DWORD *)123 ) return result; sub_424240((_BYTE *)this); if ( sub_424460((_WORD *)v1, 10, 0x7FFFFFFF) == 0x7FFFFFFF ) std::tr1::_Xbad(7); v3 = *(unsigned __int16 *)(v1 + 60); if ( *(_DWORD *)(v1 + 64) == 44 ) { sub_424240((_BYTE *)v1); if ( *(_DWORD *)(v1 + 64) == 125 ) { LABEL_16: if ( v4 == -1 || v4 >= v3 ) goto LABEL_19; LABEL_18: std::tr1::_Xbad(7); } if ( !sub_425140((_WORD *)v1) ) std::tr1::_Xbad(7); v4 = *(unsigned __int16 *)(v1 + 60); } else { v4 = *(unsigned __int16 *)(v1 + 60); } if ( *(_DWORD *)(v1 + 64) != 125 ) goto LABEL_18; goto LABEL_16; } v3 = 1; LABEL_19: *(_DWORD *)(*(_DWORD *)(v1 + 28) + 8) |= 4u; v5 = *(_BYTE **)v1; v6 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v6 ) { if ( *v5 == 92 ) { if ( (v7 = v5 + 1, v7 != v6) && !(*(_BYTE *)(v1 + 68) & 8) && (*v7 == 40 || *v7 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v7 == 123 || *v7 == 125) ) { *(_DWORD *)v1 = v7; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); if ( !(*(_DWORD *)(v1 + 68) & 0x400) || *(_DWORD *)(v1 + 64) != 63 ) return sub_428A10((_DWORD *)(v1 + 24), v3, v4, 1); sub_424240((_BYTE *)v1); return sub_428A10((_DWORD *)(v1 + 24), v3, v4, 0); } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (00429160) -------------------------------------------------------- signed int __thiscall sub_429160(int this) { int v1; // esi int v2; // eax _BYTE *v3; // eax _BYTE *v4; // ecx _BYTE *v5; // eax int v6; // eax signed int result; // eax _BYTE *v8; // edi v1 = this; v2 = *(_DWORD *)(this + 64); switch ( v2 ) { case 92: v3 = *(_BYTE **)this; v4 = *(_BYTE **)(this + 8); if ( *(_BYTE **)v1 != v4 ) { if ( *v3 == 92 ) { if ( (v5 = v3 + 1, v5 != v4) && !(*(_BYTE *)(v1 + 68) & 8) && (*v5 == 40 || *v5 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v5 == 123 || *v5 == 125) ) { *(_DWORD *)v1 = v5; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); v6 = *(_DWORD *)(v1 + 68); if ( v6 & 0x200000 ) return sub_427740(v1, 0); if ( (!(v6 & 0x10000) || !sub_422D60((_WORD *)v1, *(_BYTE *)(v1 + 62))) && (!(*(_DWORD *)(v1 + 68) & 0x8000) || !sub_422DD0((_WORD *)v1, *(_BYTE *)(v1 + 62))) ) { *(_WORD *)(v1 + 60) = 92; return 1; } goto LABEL_29; case 91: sub_424240((_BYTE *)this); v8 = *(_BYTE **)(v1 + 64); if ( v8 == (_BYTE *)58 || v8 == (_BYTE *)61 || v8 == (_BYTE *)46 ) { sub_424240((_BYTE *)v1); sub_428B10((_BYTE **)v1, v8); sub_424280((_DWORD *)v1, 93, 4); result = 2; } else { *(_WORD *)(v1 + 60) = 91; result = 1; } break; case 93: case -1: result = 0; break; default: *(_WORD *)(this + 60) = *(char *)(this + 62); LABEL_29: sub_424240((_BYTE *)v1); return 1; } return result; } //----- (00429280) -------------------------------------------------------- int __thiscall sub_429280(int *this, int a2, char *a3) { int v3; // esi int *v4; // ebx int v5; // eax char *v6; // eax bool v7; // al bool v8; // al _BYTE *v9; // ecx int v10; // eax int v11; // edx bool v12; // zf int v13; // eax int v14; // edi int v15; // eax int v16; // ecx int v17; // ecx char *v18; // edx char *v19; // edi int v20; // eax int v21; // edi int v22; // ST18_4 char v23; // al int v24; // ecx int result; // eax int v26; // ecx void **v27; // [esp+8h] [ebp-2Ch] int v28; // [esp+18h] [ebp-1Ch] char *v29; // [esp+20h] [ebp-14h] char v30; // [esp+24h] [ebp-10h] char v31; // [esp+28h] [ebp-Ch] int v32; // [esp+2Ch] [ebp-8h] bool v33; // [esp+33h] [ebp-1h] bool v34; // [esp+3Fh] [ebp+Bh] v3 = a2; v4 = this; v33 = 0; if ( !a2 ) return v33 == 0; while ( 2 ) { v5 = *(_DWORD *)(v3 + 4); switch ( v5 ) { case 1: case 8: case 9: case 17: case 20: goto LABEL_60; case 2: if ( (v4[137] & 0x101) == 1 ) goto LABEL_65; if ( v4[137] & 0x100 || *v4 != v4[132] ) v33 = *(_BYTE *)(*v4 - 1) != 10; goto LABEL_60; case 3: if ( !(v4[137] & 2) && (*v4 == v4[133] || *(_BYTE *)*v4 == 10) ) goto LABEL_60; goto LABEL_65; case 4: v6 = (char *)v4[137]; if ( (unsigned __int8)v6 & 4 && *v4 == v4[132] || (unsigned __int8)v6 & 8 && *v4 == v4[133] ) { v7 = 0; } else { if ( *v4 != v4[132] || (unsigned __int16)v6 & 0x100 ) v34 = strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", *(char *)(*v4 - 1)) != 0; else v34 = 0; if ( *v4 == v4[133] ) v8 = 0; else v8 = strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", *(char *)*v4) != 0; v7 = v34 != v8; } if ( v7 != (*(_BYTE *)(v3 + 8) & 1) ) goto LABEL_60; goto LABEL_65; case 5: v9 = (_BYTE *)*v4; if ( *v4 == v4[133] || *v9 == 10 || *v9 == 13 ) goto LABEL_65; *v4 = (int)(v9 + 1); goto LABEL_60; case 6: v10 = *sub_428E40( (int *)&v31, *v4, (char *)v4[133], *(char **)(v3 + 28), (char *)(*(_DWORD *)(v3 + 28) + *(_DWORD *)(v3 + 24)), v4 + 139, v4[136], (v4[137] & 0x80) != 0); if ( v10 == *v4 ) goto LABEL_65; *v4 = v10; goto LABEL_60; case 7: if ( *v4 == v4[133] || !sub_428CA0(v4, v3) ) goto LABEL_65; v33 = 0; goto LABEL_61; case 10: case 11: v11 = v4[1]; v12 = v5 == 11; v13 = *(_DWORD *)(v3 + 20); v32 = *v4; v14 = v32; v28 = v11; if ( (unsigned __int8)sub_429280(v13, 0) != v12 ) { *v4 = v14; LABEL_60: if ( v33 ) goto LABEL_66; LABEL_61: if ( !v3 ) return v33 == 0; v3 = *(_DWORD *)(v3 + 12); if ( !v3 ) return v33 == 0; continue; } v26 = v28; *v4 = v14; v4[1] = v26; LABEL_65: v33 = 1; LABEL_66: if ( *((_BYTE *)v4 + 548) >= 0 || *v4 != v4[133] ) return v33 == 0; qmemcpy(v4 + 66, v4, 0x108u); result = 1; v33 = 0; return result; case 12: goto LABEL_59; case 13: v4[2 * *(_DWORD *)(v3 + 20) + 2] = *v4; goto LABEL_60; case 14: v15 = *(_DWORD *)(v3 + 20); if ( *((_BYTE *)v4 + 553) || *(_DWORD *)(v15 + 20) ) { v16 = *v4; v4[1] |= 1 << *(_DWORD *)(v15 + 20); v4[2 * *(_DWORD *)(v15 + 20) + 3] = v16; } goto LABEL_60; case 15: v17 = *(_DWORD *)(v3 + 20); if ( !((1 << v17) & v4[1]) ) goto LABEL_60; v18 = (char *)v4[2 * v17 + 2]; v19 = (char *)v4[2 * v17 + 3]; v20 = *v4; if ( v18 != v19 ) { v20 = *sub_428EE0((int *)&v30, *v4, (char *)v4[133], v18, v19, v4 + 139, v4[136], (v4[137] & 0x80) != 0); if ( v20 == *v4 ) goto LABEL_65; } *v4 = v20; goto LABEL_60; case 16: if ( !sub_4255D0(v4, v3, a3) ) v33 = 1; goto LABEL_59; case 18: if ( !sub_429700(v4, v3, (*(_DWORD *)(v3 + 8) >> 1) & 1, a3) ) v33 = 1; goto LABEL_59; case 19: if ( (signed int)a3 > 0 ) { v21 = *v4; v22 = *(_DWORD *)(v3 + 12); v29 = (char *)v4[1]; v23 = sub_429280(v22, a3); v24 = (int)v29; v33 = v23 == 0; *v4 = v21; v4[1] = v24; } goto LABEL_59; case 21: if ( v4[137] & 0x2020 && v4[132] == *v4 || *((_BYTE *)v4 + 568) && *v4 != v4[133] ) { v33 = 1; } else if ( !*((_BYTE *)v4 + 552) || sub_425680((int)v4) ) { qmemcpy(v4 + 66, v4, 0x108u); *((_BYTE *)v4 + 552) = 1; } LABEL_59: v3 = 0; goto LABEL_60; default: a3 = "corrupted regex pattern"; std::exception::exception((std::exception *)&v27, (const char *const *)&a3); v27 = &std::logic_error::`vftable'; _CxxThrowException(&v27, &_TI2_AVlogic_error_std__); return result; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9AB454: using guessed type void *std::logic_error::`vftable'; // A7D004: using guessed type int _TI2_AVlogic_error_std__; //----- (004296E0) -------------------------------------------------------- std::exception *__thiscall sub_4296E0(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::logic_error::`vftable'; return v2; } // 9AB454: using guessed type void *std::logic_error::`vftable'; //----- (00429700) -------------------------------------------------------- char __thiscall sub_429700(int *this, int a2, char a3, char *a4) { int *v4; // ebx int v5; // ecx int v6; // edx int v7; // edi int v8; // esi int v9; // edx int v10; // ST00_4 char result; // al int v12; // ecx int *v13; // edi int v14; // eax int v15; // edx int v16; // ecx int v17; // eax char *v18; // eax int v19; // esi char v20; // cl int *v21; // eax int v22; // edx int v23; // [esp+Ch] [ebp-128h] int v24; // [esp+10h] [ebp-124h] int v25; // [esp+14h] [ebp-120h] int v26; // [esp+18h] [ebp-11Ch] int *v27; // [esp+1Ch] [ebp-118h] int v28; // [esp+20h] [ebp-114h] char v29; // [esp+27h] [ebp-10Dh] char v30; // [esp+28h] [ebp-10Ch] v4 = this; v5 = *this; v6 = v4[1]; v7 = 0; v27 = (int *)a2; v24 = v5; v25 = v6; v28 = 0; if ( *(_DWORD *)(a2 + 24) <= 0 ) { LABEL_6: v9 = *v4; qmemcpy(&v30, v4, 0x108u); v26 = v9; v10 = *(_DWORD *)(v27[5] + 12); v29 = 0; if ( !(unsigned __int8)sub_429280(v4, v10, a4) ) goto LABEL_11; if ( a3 ) { qmemcpy(&v30, v4, 0x108u); v29 = 1; LABEL_11: while ( 1 ) { v13 = v27; v14 = v27[7]; if ( v14 != -1 ) { v15 = v28++; if ( v15 >= v14 ) break; } v16 = v25; *v4 = v26; v4[1] = v16; v17 = v13[7]; if ( v17 < 0 || v17 > v28 ) v18 = (char *)-1; else v18 = (char *)1; if ( !(unsigned __int8)sub_429280(v4, v13[3], v18) ) break; v19 = *v4; v23 = *v4; if ( (unsigned __int8)sub_429280(v4, *(_DWORD *)(v13[5] + 12), a4) ) { if ( !a3 ) goto LABEL_8; qmemcpy(&v30, v4, 0x108u); v19 = v23; v29 = 1; } if ( v26 == v19 ) break; v26 = v19; } v20 = v29; v21 = (int *)&v30; if ( !v29 ) v21 = &v24; v22 = *v21; v4[1] = v21[1]; result = v20; *v4 = v22; } else { LABEL_8: result = 1; } } else { while ( 1 ) { v8 = *v4; if ( !(unsigned __int8)sub_429280(v4, v27[3], (char *)0xFFFFFFFF) ) break; if ( v8 != *v4 && ++v7 < v27[6] ) continue; v28 = v7; goto LABEL_6; } v12 = v25; *v4 = v24; v4[1] = v12; result = 0; } return result; } //----- (004298F0) -------------------------------------------------------- char __thiscall sub_4298F0(void *this) { int v1; // esi signed int v2; // eax _BYTE *v3; // eax _BYTE *v4; // ecx _BYTE *v5; // eax char v6; // bl signed int v7; // eax int v8; // ecx int v9; // esi int v11; // [esp+4h] [ebp-8h] int v12; // [esp+8h] [ebp-4h] v1 = (int)this; v2 = sub_429160((int)this); if ( !v2 ) return v2; while ( v2 == 2 ) { LABEL_30: v2 = sub_429160(v1); if ( !v2 ) return v2; } if ( !*(_WORD *)(v1 + 60) && !(*(_DWORD *)(v1 + 68) & 0x100000) ) std::tr1::_Xbad(2); if ( *(_DWORD *)(v1 + 64) != 45 ) { LOBYTE(v11) = *(_BYTE *)(v1 + 60); v8 = v1 + 24; if ( dword_ACB21C > (char)v11 || (char)v11 >= dword_AA92F4 ) sub_425920(v8, v11); else sub_4258A0(v8, v11); goto LABEL_30; } v3 = *(_BYTE **)v1; v4 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v4 ) { if ( *v3 == 92 ) { if ( (v5 = v3 + 1, v5 != v4) && !(*(_BYTE *)(v1 + 68) & 8) && (*v5 == 40 || *v5 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v5 == 123 || *v5 == 125) ) { *(_DWORD *)v1 = v5; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); v6 = *(_BYTE *)(v1 + 60); LOBYTE(v12) = *(_BYTE *)(v1 + 60); v7 = sub_429160(v1); if ( v7 ) { if ( v7 == 2 ) std::tr1::_Xbad(8); if ( *(_DWORD *)(v1 + 56) & 0x800 ) { *(_WORD *)(v1 + 60) = sub_428160(*(struct std::locale::facet ***)(v1 + 52), *(unsigned __int8 *)(v1 + 60)); v6 = sub_428160(*(struct std::locale::facet ***)(v1 + 52), v12); LOBYTE(v12) = v6; } if ( *(unsigned __int16 *)(v1 + 60) < (signed int)v6 ) std::tr1::_Xbad(8); sub_4265F0(v1 + 24, v12, *(unsigned __int8 *)(v1 + 60)); goto LABEL_30; } LOBYTE(v11) = *(_BYTE *)(v1 + 60); v9 = v1 + 24; if ( dword_ACB21C > (char)v11 || (char)v11 >= dword_AA92F4 ) sub_425920(v9, v11); else sub_4258A0(v9, v11); if ( dword_ACB21C > 45 || dword_AA92F4 <= 45 ) LOBYTE(v2) = sub_425920(v9, 45); else LOBYTE(v2) = (unsigned int)sub_4258A0(v9, 45); return v2; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); // AA92F4: using guessed type int dword_AA92F4; // ACB21C: using guessed type int dword_ACB21C; //----- (00429AB0) -------------------------------------------------------- char __thiscall sub_429AB0(int this, int a2, char a3) { int v3; // ebx int v4; // esi int v5; // eax int v6; // edx char result; // al unsigned int v8; // ecx int v9; // eax _DWORD *v10; // edi unsigned int v11; // [esp+10h] [ebp+8h] _DWORD *v12; // [esp+14h] [ebp+Ch] v3 = a2; v4 = this; v5 = *(_DWORD *)(this + 536); v6 = *(_DWORD *)(this + 540); *(_DWORD *)(this + 528) = v5; *(_DWORD *)this = v5; *(_BYTE *)(this + 568) = a3; *(_DWORD *)(this + 4) = 0; *(_BYTE *)(this + 553) = a2 != 0; *(_BYTE *)(this + 552) = 0; result = sub_429280((int *)this, v6, 0); if ( result ) { if ( a2 ) { sub_427EE0((unsigned int *)(a2 + 4), *(unsigned __int8 *)(v4 + 554)); LOBYTE(v8) = 0; v11 = 0; if ( *(_BYTE *)(v4 + 554) ) { v9 = 0; v12 = (_DWORD *)(v4 + 276); do { if ( (1 << v8) & *(_DWORD *)(v4 + 268) ) { *(_BYTE *)(v9 + *(_DWORD *)(v3 + 4) + 8) = 1; *(_DWORD *)(v9 + *(_DWORD *)(v3 + 4)) = *(v12 - 1); *(_DWORD *)(v9 + *(_DWORD *)(v3 + 4) + 4) = *v12; } else { *(_BYTE *)(v9 + *(_DWORD *)(v3 + 4) + 8) = 0; *(_DWORD *)(v9 + *(_DWORD *)(v3 + 4)) = *(_DWORD *)(v4 + 532); *(_DWORD *)(v9 + *(_DWORD *)(v3 + 4) + 4) = *(_DWORD *)(v4 + 532); } v12 += 2; v8 = v11 + 1; v9 += 12; v11 = v8; } while ( v8 < *(unsigned __int8 *)(v4 + 554) ); } v10 = *(_DWORD **)(v3 + 4); *(_DWORD *)v3 = *(_DWORD *)(v4 + 528); *(_BYTE *)(v3 + 28) = 1; *(_DWORD *)(v3 + 20) = *(_DWORD *)(v4 + 528); *(_DWORD *)(v3 + 24) = *v10; *(_BYTE *)(v3 + 40) = 1; *(_DWORD *)(v3 + 32) = v10[1]; *(_DWORD *)(v3 + 36) = *(_DWORD *)(v4 + 532); *(_DWORD *)(v3 + 44) = *(_DWORD *)(v4 + 532); *(_DWORD *)(v3 + 48) = *(_DWORD *)(v4 + 532); } result = 1; } return result; } //----- (00429C00) -------------------------------------------------------- char __thiscall sub_429C00(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // eax _BYTE *v3; // ecx _BYTE *v4; // eax v1 = this; sub_423790(this + 6); if ( v1[16] == 94 ) { *(_DWORD *)(v1[7] + 8) ^= 1u; v2 = (_BYTE *)*v1; v3 = (_BYTE *)v1[2]; if ( (_BYTE *)*v1 != v3 ) { if ( *v2 == 92 ) { if ( (v4 = v2 + 1, v4 != v3) && !(v1[17] & 8) && (*v4 == 40 || *v4 == 41) || !(v1[17] & 0x10) && (*v4 == 123 || *v4 == 125) ) { *v1 = v4; } } ++*v1; } sub_424090(v1); } if ( v1[17] & 0x20000000 && v1[16] == 93 ) { if ( dword_ACB21C <= 93 && dword_AA92F4 > 93 ) { sub_4258A0((int)(v1 + 6), 93); sub_424240(v1); return sub_4298F0(v1); } sub_425920((int)(v1 + 6), 93); sub_424240(v1); } return sub_4298F0(v1); } // AA92F4: using guessed type int dword_AA92F4; // ACB21C: using guessed type int dword_ACB21C; //----- (00429CB0) -------------------------------------------------------- char __cdecl sub_429CB0(int a1, int a2, int a3, int *a4, int a5, char a6) { char v7; // al int v8; // edi char v9; // bl unsigned int v10; // eax int v11; // esi void (__thiscall ***v12)(_DWORD, signed int); // esi char v13; // [esp+10h] [ebp-250h] char v14; // [esp+14h] [ebp-24Ch] int v15; // [esp+248h] [ebp-18h] int v16; // [esp+25Ch] [ebp-4h] if ( !*a4 ) return 0; sub_424EB0(&v14, a1, a2, *a4, *(_DWORD *)(*a4 + 24), *(_DWORD *)(*a4 + 20), a5); v16 = 0; v7 = sub_429AB0((int)&v14, a3, a6); v8 = v15; v9 = v7; v16 = -1; if ( v15 ) { std::_Lockit::_Lockit((std::_Lockit *)&v13, 0); v10 = *(_DWORD *)(v8 + 4); if ( v10 && v10 < 0xFFFFFFFF ) *(_DWORD *)(v8 + 4) = v10 - 1; v11 = -(*(_DWORD *)(v8 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v13); v12 = (void (__thiscall ***)(_DWORD, signed int))(v8 & v11); if ( v12 ) (**v12)(v12, 1); } return v9; } //----- (00429DA0) -------------------------------------------------------- char __thiscall sub_429DA0(_DWORD *this) { int v1; // esi char result; // al int v3; // ecx _DWORD *v4; // eax int v5; // ecx _BYTE *v6; // eax _BYTE *v7; // ecx _BYTE *v8; // eax _BYTE *v9; // eax _BYTE *v10; // ecx _BYTE *v11; // eax _BYTE *v12; // eax _BYTE *v13; // ecx _BYTE *v14; // eax _BYTE *v15; // eax _BYTE *v16; // ecx _BYTE *v17; // eax _BYTE *v18; // eax _BYTE *v19; // ecx _BYTE *v20; // eax _BYTE *v21; // eax _BYTE *v22; // ecx _BYTE *v23; // eax _BYTE *v24; // eax _BYTE *v25; // ecx _BYTE *v26; // eax char v27; // bl v1 = (int)this; for ( result = 0; *(_DWORD *)(v1 + 64) != -1; result = 1 ) { v3 = *(_DWORD *)(v1 + 64); if ( v3 == 124 ) return result; if ( v3 == 41 ) { if ( *(_DWORD *)(v1 + 16) ) return result; if ( !(*(_DWORD *)(v1 + 68) & 0x10000000) ) std::tr1::_Xbad(5); } switch ( v3 ) { case 46: v4 = operator new(0x14u); if ( v4 ) { *v4 = &std::tr1::_Node_base::`vftable'; v4[1] = 5; v4[2] = 0; v4[3] = 0; v4[4] = 0; } else { v4 = 0; } v4[4] = *(_DWORD *)(v1 + 28); v5 = *(_DWORD *)(*(_DWORD *)(v1 + 28) + 12); if ( v5 ) { v4[3] = v5; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 28) + 12) + 16) = v4; } *(_DWORD *)(*(_DWORD *)(v1 + 28) + 12) = v4; *(_DWORD *)(v1 + 28) = v4; v6 = *(_BYTE **)v1; v7 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v7 ) { if ( *v6 == 92 ) { if ( (v8 = v6 + 1, v8 != v7) && !(*(_BYTE *)(v1 + 68) & 8) && (*v8 == 40 || *v8 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v8 == 123 || *v8 == 125) ) { *(_DWORD *)v1 = v8; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); break; case 92: v9 = *(_BYTE **)v1; v10 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v10 ) { if ( *v9 == 92 ) { if ( (v11 = v9 + 1, v11 != v10) && !(*(_BYTE *)(v1 + 68) & 8) && (*v11 == 40 || *v11 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v11 == 123 || *v11 == 125) ) { *(_DWORD *)v1 = v11; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); if ( *(_DWORD *)(v1 + 68) & 0x80 && *(_BYTE *)(v1 + 62) == 98 ) { sub_422CA0((_DWORD *)(v1 + 24)); v12 = *(_BYTE **)v1; v13 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v13 ) { if ( *v12 == 92 ) { if ( (v14 = v12 + 1, v14 != v13) && !(*(_BYTE *)(v1 + 68) & 8) && (*v14 == 40 || *v14 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v14 == 123 || *v14 == 125) ) { *(_DWORD *)v1 = v14; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); continue; } if ( *(_DWORD *)(v1 + 68) & 0x80 && *(_BYTE *)(v1 + 62) == 66 ) { sub_422CA0((_DWORD *)(v1 + 24)); *(_DWORD *)(*(_DWORD *)(v1 + 28) + 8) ^= 1u; v15 = *(_BYTE **)v1; v16 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v16 ) { if ( *v15 == 92 ) { if ( (v17 = v15 + 1, v17 != v16) && !(*(_BYTE *)(v1 + 68) & 8) && (*v17 == 40 || *v17 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v17 == 123 || *v17 == 125) ) { *(_DWORD *)v1 = v17; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); continue; } sub_428F80(v1); break; case 91: v18 = *(_BYTE **)v1; v19 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v19 ) { if ( *v18 == 92 ) { if ( (v20 = v18 + 1, v20 != v19) && !(*(_BYTE *)(v1 + 68) & 8) && (*v20 == 40 || *v20 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v20 == 123 || *v20 == 125) ) { *(_DWORD *)v1 = v20; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); sub_429C00((_DWORD *)v1); if ( *(_DWORD *)(v1 + 64) != 93 ) std::tr1::_Xbad(4); v21 = *(_BYTE **)v1; v22 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v22 ) { if ( *v21 == 92 ) { if ( (v23 = v21 + 1, v23 != v22) && !(*(_BYTE *)(v1 + 68) & 8) && (*v23 == 40 || *v23 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v23 == 123 || *v23 == 125) ) { *(_DWORD *)v1 = v23; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); break; case 40: v24 = *(_BYTE **)v1; v25 = *(_BYTE **)(v1 + 8); if ( *(_BYTE **)v1 != v25 ) { if ( *v24 == 92 ) { if ( (v26 = v24 + 1, v26 != v25) && !(*(_BYTE *)(v1 + 68) & 8) && (*v26 == 40 || *v26 == 41) || !(*(_BYTE *)(v1 + 68) & 0x10) && (*v26 == 123 || *v26 == 125) ) { *(_DWORD *)v1 = v26; } } ++*(_DWORD *)v1; } sub_424090((_BYTE *)v1); v27 = sub_4242F0(v1); sub_424280((_DWORD *)v1, 41, 5); if ( !v27 ) continue; break; default: switch ( v3 ) { case 94: sub_422BE0((_DWORD *)(v1 + 24)); sub_424240((_BYTE *)v1); continue; case 36: sub_422C40((_DWORD *)(v1 + 24)); sub_424240((_BYTE *)v1); continue; case 42: case 43: case 63: case 123: std::tr1::_Xbad(10); break; } if ( v3 == 125 && !(*(_DWORD *)(v1 + 68) & 0x10000000) ) std::tr1::_Xbad(6); if ( v3 == 93 && !(*(_DWORD *)(v1 + 68) & 0x10000000) ) std::tr1::_Xbad(4); sub_428590((_DWORD *)(v1 + 24), *(unsigned __int8 *)(v1 + 62)); sub_424240((_BYTE *)v1); break; } sub_429030(v1); } return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; //----- (0042A150) -------------------------------------------------------- char __thiscall sub_42A150(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // edi _BYTE *v6; // eax _BYTE *v7; // ecx _BYTE *v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // esi int v12; // ebx int v13; // eax _DWORD *v14; // eax int v16; // [esp+Ch] [ebp-8h] _DWORD *v17; // [esp+10h] [ebp-4h] v1 = this; v2 = this[7]; v17 = this; v16 = this[7]; LOBYTE(v3) = sub_429DA0(this); if ( !(_BYTE)v3 ) { if ( v1[16] != 124 ) return (char)v3; v4 = sub_4233C0(v1 + 6); sub_423290(v1 + 6, (int)v4); } v3 = sub_423420(v1 + 6, v2); v5 = v3; if ( v1[16] == 124 ) { while ( 1 ) { v6 = (_BYTE *)*v1; v7 = (_BYTE *)v1[2]; if ( (_BYTE *)*v1 != v7 ) { if ( *v6 == 92 ) { if ( (v8 = v6 + 1, v8 != v7) && !(v1[17] & 8) && (*v8 == 40 || *v8 == 41) || !(v1[17] & 0x10) && (*v8 == 123 || *v8 == 125) ) { *v1 = v8; } } ++*v1; } sub_424090(v1); if ( !sub_429DA0(v1) ) { v9 = operator new(0x14u); if ( v9 ) { *v9 = &std::tr1::_Node_base::`vftable'; v9[1] = 8; v9[2] = 0; v9[3] = 0; v9[4] = 0; } else { v9 = 0; } v9[4] = v1[7]; v10 = *(_DWORD *)(v1[7] + 12); if ( v10 ) { v9[3] = v10; *(_DWORD *)(*(_DWORD *)(v1[7] + 12) + 16) = v9; } *(_DWORD *)(v1[7] + 12) = v9; v1[7] = v9; sub_423290(v1 + 6, (int)v9); } v11 = *(_DWORD *)(v16 + 12); v12 = v5[3]; v5[3] = 0; v13 = v17[7]; v17[7] = v5; v5[3] = 0; for ( *(_DWORD *)(v13 + 12) = v5; *(_DWORD *)(v11 + 24); v11 = *(_DWORD *)(v11 + 24) ) ; v14 = operator new(0x1Cu); if ( v14 ) { v14[1] = 16; v14[2] = 0; v14[3] = 0; v14[4] = 0; *v14 = &std::tr1::_Node_if::`vftable'; v14[5] = v5; v14[6] = 0; } else { v14 = 0; } *(_DWORD *)(v11 + 24) = v14; v14[3] = v12; v3 = *(_DWORD **)(v11 + 24); *(_DWORD *)(v12 + 16) = v3; if ( v17[16] != 124 ) break; v1 = v17; } } return (char)v3; } // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB434: using guessed type void *std::tr1::_Node_if::`vftable'; //----- (0042A2D0) -------------------------------------------------------- _DWORD *__thiscall sub_42A2D0(_DWORD *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // ebx _DWORD *result; // eax v2 = this; v3 = sub_422E10(this + 6, a2); sub_42A150(v2); result = sub_423290(v2 + 6, (int)v3); v2[7] = v3; return result; } //----- (0042A300) -------------------------------------------------------- int __thiscall sub_42A300(_DWORD *this) { int *v1; // esi _DWORD *v2; // eax int v3; // edi int v4; // eax _DWORD *v5; // ecx _DWORD *v6; // eax int v7; // ecx _DWORD *v8; // ecx int result; // eax int v10; // [esp+0h] [ebp-24h] _DWORD *v11; // [esp+10h] [ebp-14h] int *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v12 = &v10; v11 = this; v13 = 0; v1 = this + 6; v2 = operator new(0x18u); if ( v2 ) { v2[1] = 13; v2[2] = 0; v2[3] = 0; v2[4] = 0; *v2 = &std::tr1::_Node_capture::`vftable'; v2[5] = 0; v3 = (int)v2; } else { v3 = 0; } *(_DWORD *)(v3 + 16) = v1[1]; v4 = *(_DWORD *)(v1[1] + 12); if ( v4 ) { *(_DWORD *)(v3 + 12) = v4; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = v3; } *(_DWORD *)(v1[1] + 12) = v3; v5 = v11; v1[1] = v3; sub_42A150(v5); if ( *v11 != v11[2] ) std::tr1::_Xbad(14); sub_423290(v1, v3); v6 = operator new(0x14u); if ( v6 ) { *v6 = &std::tr1::_Node_base::`vftable'; v6[1] = 21; v6[2] = 0; v6[3] = 0; v6[4] = 0; } else { v6 = 0; } v6[4] = v1[1]; v7 = *(_DWORD *)(v1[1] + 12); if ( v7 ) { v6[3] = v7; *(_DWORD *)(*(_DWORD *)(v1[1] + 12) + 16) = v6; } *(_DWORD *)(v1[1] + 12) = v6; v8 = v11; v1[1] = (int)v6; result = *v1; *(_DWORD *)(result + 20) = v8[14]; *(_DWORD *)(result + 24) = v8[3] + 1; return result; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9AB3FC: using guessed type void *std::tr1::_Node_base::`vftable'; // 9AB41C: using guessed type void *std::tr1::_Node_capture::`vftable'; //----- (0042A440) -------------------------------------------------------- int *__thiscall sub_42A440(int *this, const char *a2, unsigned int a3) { int *v3; // esi _DWORD *v4; // edi int v5; // ebx unsigned int v6; // eax int v7; // eax int v8; // edi int v9; // eax bool v10; // zf char v12; // [esp+10h] [ebp-5Ch] int *v13; // [esp+58h] [ebp-14h] char v14; // [esp+5Ch] [ebp-10h] int v15; // [esp+68h] [ebp-4h] v3 = this; v13 = this; *this = 0; v4 = this + 1; *v4 = 0; v4[1] = 0; v4[2] = std::locale::_Init(); v5 = sub_7D3A0B(); std::_Lockit::_Lockit((std::_Lockit *)&v14, 0); v6 = *(_DWORD *)(v5 + 4); if ( v6 < 0xFFFFFFFF ) *(_DWORD *)(v5 + 4) = v6 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&v14); v15 = 0; if ( !a2 ) std::tr1::_Xbad(13); sub_424E00(&v12, (int)v4, (int)a2, (int)&a2[strlen(a2)], a3); v7 = sub_42A300(&v12); v8 = v7; if ( v7 ) ++*(_DWORD *)(v7 + 28); v9 = *v3; if ( *v3 ) { v10 = (*(_DWORD *)(v9 + 28))-- == 1; if ( v10 ) sub_421C10(*v3, 0); } *v3 = v8; return v3; } // 7D3687: using guessed type int __cdecl std::tr1::_Xbad(_DWORD); //----- (0042A590) -------------------------------------------------------- char __thiscall sub_42A590(_BYTE *this, char a2) { char result; // al result = a2; this[388] = a2; return result; } //----- (0042A5C0) -------------------------------------------------------- char __thiscall sub_42A5C0(void *this, unsigned __int8 *a2, _BYTE *a3, int a4) { void *v4; // esi char result; // al int v6; // eax char v7; // [esp+24h] [ebp-104h] v4 = this; if ( *a2 < 0xFFu && *a3 < 0xFFu ) { sprintf(&v7, "GuildEmblem%03d", *a2); v6 = sub_42C0A0((int)&v7); if ( v6 ) { (*(void (__thiscall **)(void *, int, _DWORD, signed int, signed int))(*(_DWORD *)v4 + 584))( v4, v6, (unsigned __int8)*a3, 32, 32); (*(void (__thiscall **)(void *, int))(*(_DWORD *)v4 + 256))(v4, a4); (*(void (__thiscall **)(void *, int))(*(_DWORD *)v4 + 240))(v4, a4); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v4 + 324))(v4, 0.0); result = 1; } else { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); result = 0; } } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 256))(0); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); result = 0; } return result; } //----- (0042A6D0) -------------------------------------------------------- int __thiscall sub_42A6D0(int this, int a2) { int result; // eax if ( *(_BYTE *)(this + 388) ) result = sub_5D3340((_DWORD *)this); return result; } //----- (0042A6F0) -------------------------------------------------------- char __thiscall sub_42A6F0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[96]); return (char)v2; } //----- (0042A720) -------------------------------------------------------- char __thiscall sub_42A720(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, void *a6, int a7, int a8) { _DWORD *v8; // esi char result; // al int v10; // edi float *v11; // eax float *v12; // eax v8 = this; this[95] = a6; result = sub_907E00(this, a2, a3, a7, a8, a5, 0, 0); if ( result ) { (*(void (__thiscall **)(_DWORD *, int, int, const char *))(*v8 + 588))(v8, a7, a8, "GuildEmblemPick"); v8[96] = a4; v10 = sub_85C050(v8, 3); if ( !v10 ) { v11 = (float *)operator new(0x60u); if ( v11 ) v12 = sub_85EBC0(v11); else v12 = 0; v10 = (int)v12; sub_403700(v8, (int)v12); } *(float *)(v10 + 68) = 1.0; *(float *)(v10 + 72) = 1.0; result = 1; ++*(_DWORD *)(v10 + 88); *(float *)(v10 + 76) = 1.0; } return result; } //----- (0042A820) -------------------------------------------------------- float *__thiscall sub_42A820(_DWORD *this, float *a2) { _DWORD *v2; // edi int v3; // esi float *v4; // eax float *v5; // eax float *result; // eax double v7; // st7 v2 = this; v3 = sub_85C050(this, 3); if ( !v3 ) { v4 = (float *)operator new(0x60u); if ( v4 ) v5 = sub_85EBC0(v4); else v5 = 0; v3 = (int)v5; sub_403700(v2, (int)v5); } result = a2; v7 = *a2; ++*(_DWORD *)(v3 + 88); *(float *)(v3 + 84) = v7; return result; } //----- (0042A8B0) -------------------------------------------------------- int __cdecl sub_42A8B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi int result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x188u); v8 = (int)v7; v11 = v7; v12 = 0; if ( v7 ) { sub_5D35C0(v7); *(_DWORD *)v8 = &GuildEmblemIcon::`vftable'; *(_DWORD *)(v8 + 232) = &GuildEmblemIcon::`vftable'; *(_DWORD *)(v8 + 380) = 0; *(_BYTE *)(v8 + 388) = 0; } else { v8 = 0; } if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v12 = 1; sub_403790(&unk_BA6B10, v8); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)v8 + 608))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, (_DWORD *)v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = 0; } return result; } // 9AB880: using guessed type void *GuildEmblemIcon::`vftable'; // 9AB89C: using guessed type void *GuildEmblemIcon::`vftable'; //----- (0042AA10) -------------------------------------------------------- void *sub_42AA10() { return &unk_BA6BA8; } //----- (0042AA20) -------------------------------------------------------- int __thiscall sub_42AA20(_DWORD *this, int a2) { int result; // eax result = a2; this[74] = a2; return result; } //----- (0042AA30) -------------------------------------------------------- int __thiscall sub_42AA30(_DWORD *this, int a2) { int result; // eax result = a2; this[75] = a2; return result; } //----- (0042AA40) -------------------------------------------------------- int __thiscall sub_42AA40(_BYTE *this, char a2) { _BYTE *v2; // esi int v3; // edx int result; // eax v2 = this; v3 = *(_DWORD *)this; this[252] = a2; result = (*(int (**)(void))(v3 + 244))(); if ( !(_BYTE)result ) result = (*(int (__thiscall **)(_BYTE *, signed int))(*(_DWORD *)v2 + 552))(v2, 3); return result; } //----- (0042AA70) -------------------------------------------------------- char __thiscall sub_42AA70(_BYTE *this, char a2) { char result; // al result = a2; this[321] = a2; return result; } //----- (0042AA80) -------------------------------------------------------- int __thiscall sub_42AA80(_DWORD *this) { return this[74]; } //----- (0042AA90) -------------------------------------------------------- int __thiscall sub_42AA90(_DWORD *this, int a2) { int result; // eax result = a2; this[81] = a2; return result; } //----- (0042AAA0) -------------------------------------------------------- int __thiscall sub_42AAA0(_DWORD *this, int a2) { int result; // eax result = a2; this[82] = a2; return result; } //----- (0042AAB0) -------------------------------------------------------- void *__thiscall sub_42AAB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildEmblemIcon::`vftable'; *((_DWORD *)this + 58) = &GuildEmblemIcon::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB880: using guessed type void *GuildEmblemIcon::`vftable'; // 9AB89C: using guessed type void *GuildEmblemIcon::`vftable'; //----- (0042AAF0) -------------------------------------------------------- void __thiscall sub_42AAF0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[1]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[1] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0042AB40) -------------------------------------------------------- _DWORD *__thiscall sub_42AB40(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // edi _DWORD *v5; // eax _DWORD *v6; // eax int v7; // esi void *v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v2 = this; result = (_DWORD *)this[10]; v4 = (_DWORD *)*result; if ( !*result ) { v5 = operator new(0x18u); v8 = v5; v9 = 0; if ( v5 ) v6 = sub_863940(v5); else v6 = 0; v4 = v6; v9 = -1; v8 = v6; result = (_DWORD *)sub_823870(v2 + 9, 0, &v8); } v7 = v4[1]; if ( v7 != a2 ) { if ( v7 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { if ( v7 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } v4[1] = a2; if ( a2 ) result = (_DWORD *)InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (0042AC00) -------------------------------------------------------- void __thiscall sub_42AC00(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi unsigned __int8 (__thiscall *v4)(_DWORD *); // edx void (__thiscall *v5)(_DWORD *, signed int); // edx _DWORD *v6; // ecx v2 = a2; v3 = this; if ( this[77] != a2 ) { (*(void (__stdcall **)(signed int))(*this + 556))(a2); v4 = *(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 244); v3[77] = a2; if ( !v4(v3) ) { v2 = 3; if ( v3[79] > 3u ) v3[77] = 3; } switch ( v2 ) { case 0: (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 492))(v3, 0); break; case 1: v5 = *(void (__thiscall **)(_DWORD *, signed int))(*v3 + 492); v6 = v3; if ( v3[79] <= 1u ) goto LABEL_8; v5(v3, 1); break; case 2: v5 = *(void (__thiscall **)(_DWORD *, signed int))(*v3 + 492); v6 = v3; if ( v3[79] <= 2u ) LABEL_8: v5(v6, 0); else v5(v3, 2); break; case 3: if ( v3[79] > 3u ) (*(void (__thiscall **)(_DWORD *, signed int))(*v3 + 492))(v3, 3); else (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 492))(v3, 0); break; default: return; } } } //----- (0042AD00) -------------------------------------------------------- char __thiscall sub_42AD00(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[82]); return (char)v2; } //----- (0042AD30) -------------------------------------------------------- _DWORD *__thiscall sub_42AD30(_DWORD **this, int a2) { return sub_42AB40(this[84], a2); } //----- (0042AD40) -------------------------------------------------------- _DWORD *__thiscall sub_42AD40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildEmblemWin::`vftable'; v1[58] = &GuildEmblemWin::`vftable'; v1[89] = 255; v1[90] = 255; v1[91] = 0; v1[92] = 0; *((_BYTE *)v1 + 344) = 0; v1[87] = 0; v1[88] = 0; v1[165] = 0; memset(v1 + 93, 0, 0x100u); v1[157] = 0; v1[158] = 0; v1[159] = 0; v1[160] = 0; v1[161] = 0; v1[162] = 0; v1[163] = 0; v1[164] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ABCD4: using guessed type void *GuildEmblemWin::`vftable'; // 9ABCF4: using guessed type void *GuildEmblemWin::`vftable'; //----- (0042AE00) -------------------------------------------------------- char __thiscall sub_42AE00(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax bool v4; // zf _BYTE **v5; // eax char result; // al v1 = this; if ( this[90] != 255 ) { v2 = this[89]; if ( v2 != 255 ) { if ( this[v2 + 93] ) sub_42A590((_BYTE *)this[v2 + 93], 0); v3 = v1[91]; v4 = v1[v3 + 157] == 0; v5 = (_BYTE **)&v1[v3 + 157]; if ( !v4 ) sub_42A590(*v5, 0); } } result = sub_42A590((_BYTE *)v1[v1[91] + 157], 0); v1[89] = 255; v1[90] = 255; v1[91] = 0; v1[92] = 0; v1[88] = 0; return result; } //----- (0042AEA0) -------------------------------------------------------- void sub_42AEA0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) sub_4A5F40(v0, 0); } //----- (0042AEC0) -------------------------------------------------------- char sub_42AEC0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildEmblemWin"); return (char)v0; } //----- (0042AEF0) -------------------------------------------------------- signed int __thiscall sub_42AEF0(char *this, _BYTE *a2, _BYTE *a3) { signed int result; // eax int v4; // ecx signed int v5; // ebx int v6; // edi void *v7; // esi int v8; // eax char *v9; // [esp+0h] [ebp-14h] int v10; // [esp+4h] [ebp-10h] signed int v11; // [esp+8h] [ebp-Ch] void **v12; // [esp+Ch] [ebp-8h] char v13; // [esp+12h] [ebp-2h] char v14; // [esp+13h] [ebp-1h] result = (signed int)a2; v9 = this; if ( *(_DWORD *)a2 < 8u && *(_DWORD *)a3 >= 0 ) { result = 0; v4 = (int)(this + 372); v11 = 0; v10 = v4; do { v5 = 0; v12 = (void **)v4; do { v6 = v5 + 8 * result; if ( v6 >= 64 ) break; v7 = *v12; if ( *v12 ) { v14 = v5 + 8 * *a2; v13 = result + 8 * *a3; if ( !sub_42A5C0(v7, (unsigned __int8 *)&v13, &v14, 1) ) { v8 = *((_DWORD *)v9 + 89); if ( v6 == v8 ) { sub_42A590(*(_BYTE **)&v9[4 * v8 + 372], 0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v9 + 165) + 256))(0); } } result = v11; } ++v12; ++v5; } while ( v5 < 8 ); ++result; v4 = v10 + 32; v11 = result; v10 += 32; } while ( result < 8 ); } return result; } //----- (0042AFE0) -------------------------------------------------------- char __thiscall sub_42AFE0(_DWORD *this, unsigned int *a2, _DWORD *a3) { _DWORD *v3; // esi unsigned int v5; // ecx int v6; // ebx _DWORD *v7; // edi unsigned int v8; // eax void *v9; // ecx unsigned int v10; // ecx bool v11; // zf _BYTE **v12; // esi unsigned int v13; // [esp+4h] [ebp-8h] char v14; // [esp+Bh] [ebp-1h] v3 = this; if ( !this[165] ) return 0; v5 = *a2; v6 = 8 * v3[88] + (*a2 >> 3); if ( v6 < 0 || ((v5 >> 3) & 0x80000000) != 0 ) return 0; v7 = a3; v8 = v5 + 8 * (*a3 - (v5 >> 3)); v13 = v8; if ( v8 > 0x3F ) return 0; v9 = (void *)v3[165]; HIBYTE(a3) = v8; v14 = v6; if ( sub_42A5C0(v9, (unsigned __int8 *)&v14, (_BYTE *)&a3 + 3, 1) ) { v10 = *a2; v3[89] = *a2; v3[92] = v6; v3[90] = v13; v3[91] = *v7; v11 = v3[v10 + 93] == 0; v12 = (_BYTE **)&v3[v10 + 93]; if ( !v11 ) sub_42A590(*v12, 1); } return 1; } //----- (0042B0B0) -------------------------------------------------------- char __thiscall sub_42B0B0(char *this) { char *v1; // esi int v3; // [esp+4h] [ebp-4h] v1 = this; v3 = 0; sub_42AEF0(this, &v3, this + 352); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 165) + 256))(0); return sub_42A590(*((_BYTE **)v1 + 157), 1); } //----- (0042B100) -------------------------------------------------------- signed int __thiscall sub_42B100(int this, int a2) { char *v2; // esi _BYTE *v3; // edi int v4; // eax bool v5; // sf int v6; // eax int v7; // ecx int v9; // [esp+8h] [ebp-4h] v2 = (char *)this; v3 = (_BYTE *)(this + 352); if ( (_BYTE)a2 ) { v4 = ++*(_DWORD *)v3; if ( *(_BYTE *)(this + 344) == 1 ) { if ( v4 >= *(_DWORD *)(this + 348) ) *(_DWORD *)v3 = 0; } else if ( v4 > *(_DWORD *)(this + 348) ) { *(_DWORD *)v3 = 0; } } else { v5 = (*(_DWORD *)v3)-- - 1 < 0; if ( v5 ) { if ( *(_BYTE *)(this + 344) ) *(_DWORD *)v3 = *(_DWORD *)(this + 348) - 1; else *(_DWORD *)v3 = *(_DWORD *)(this + 348); } } v6 = *(_DWORD *)(this + 364); v7 = *(_DWORD *)(this + 356); *((_DWORD *)v2 + 92) = 8 * *(_DWORD *)v3; a2 = v6; v9 = v7; sub_42AFE0(v2, (unsigned int *)&v9, &a2); a2 = *((_DWORD *)v2 + 91); return sub_42AEF0(v2, &a2, v3); } //----- (0042B1B0) -------------------------------------------------------- void __thiscall sub_42B1B0(_DWORD *this, unsigned int *a2) { unsigned int *v2; // ebx _DWORD *v3; // esi signed int v4; // eax int v5; // ecx v2 = a2; v3 = this; if ( *a2 < 0x40 && this[165] ) { if ( this[90] < 255 ) { v4 = this[89]; if ( v4 < 255 ) { if ( this[v4 + 93] ) sub_42A590((_BYTE *)this[v4 + 93], 0); } } if ( v3[89] == *v2 ) { v5 = v3[165]; v3[89] = 255; v3[90] = 255; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 256))(0); } else { a2 = (unsigned int *)v3[91]; sub_42AFE0(v3, v2, &a2); } } } //----- (0042B250) -------------------------------------------------------- void __thiscall sub_42B250(char *this, _DWORD *a2) { _BYTE *v2; // edi char *v3; // esi signed int v4; // eax v2 = a2; v3 = this; if ( *a2 < 8u ) { v4 = *((_DWORD *)this + 91); if ( v4 < 8 ) { if ( *(_DWORD *)&this[4 * v4 + 628] ) { if ( *(_DWORD *)&this[4 * *a2 + 628] ) { sub_42A590(*(_BYTE **)&this[4 * v4 + 628], 0); sub_42A590(*(_BYTE **)&v3[4 * *(_DWORD *)v2 + 628], 1); *((_DWORD *)v3 + 91) = *(_DWORD *)v2; sub_42AEF0(v3, v2, v3 + 352); if ( *((_DWORD *)v3 + 90) < 255 || *((_DWORD *)v3 + 89) < 255 ) { a2 = (_DWORD *)*((_DWORD *)v3 + 89); sub_42AFE0(v3, (unsigned int *)&a2, v2); } } } } } } //----- (0042B2F0) -------------------------------------------------------- char __thiscall sub_42B2F0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax int v6; // edi int v7; // ebx volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax char v12; // ST40_1 int v13; // ST44_4 int v14; // ST48_4 int v15; // ST4C_4 const CHAR *v16; // eax int v17; // eax volatile LONG **v18; // edx int v19; // eax volatile LONG *v20; // eax volatile LONG v21; // edx const CHAR *v22; // eax volatile LONG *v23; // ecx volatile LONG **v24; // eax int v25; // eax volatile LONG *v26; // eax volatile LONG v27; // edx const CHAR *v28; // eax volatile LONG *v29; // ecx volatile LONG **v30; // eax int v31; // eax volatile LONG *v32; // eax volatile LONG v33; // edx const CHAR *v34; // eax char v35; // ST40_1 int v36; // ST44_4 int v37; // ST48_4 int v38; // ST4C_4 const CHAR *v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax int v42; // eax volatile LONG **v43; // eax int v44; // eax int v45; // ecx int v46; // ecx int v47; // eax int v48; // eax void (__thiscall ***v49)(_DWORD, signed int); // esi LONG v50; // eax volatile LONG **v52; // eax int v53; // eax volatile LONG *v54; // eax volatile LONG *v55; // edi signed int v56; // ebx volatile LONG v57; // edx const char *v58; // eax volatile LONG *v59; // eax volatile LONG *v60; // edi void (__thiscall ***v61)(_DWORD, signed int); // esi volatile LONG v62; // eax const char *v63; // eax void (__thiscall ***v64)(_DWORD, signed int); // esi volatile LONG *v65; // [esp+64h] [ebp-80h] int v66[5]; // [esp+6Ch] [ebp-78h] int v67; // [esp+80h] [ebp-64h] int v68; // [esp+84h] [ebp-60h] int v69; // [esp+88h] [ebp-5Ch] int v70; // [esp+8Ch] [ebp-58h] volatile LONG **v71; // [esp+90h] [ebp-54h] char v72; // [esp+94h] [ebp-50h] int v73; // [esp+E0h] [ebp-4h] v2 = this; v67 = 0; v3 = dword_BA6BA0; v73 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildEmblemWin.nif"); sub_8F66B0(v4, (int)&v67, v3); if ( !v67 ) return 0; v5 = sub_8FB140(v67, (int)"Frame", (int)&v68, (int)&v69, 0); if ( sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"GuildEmblemWin", 0) ) { v6 = v68; v7 = v69; sub_456260(v66); LOBYTE(v73) = 1; sub_455FF0(v66, (int)v2); sub_456000(v66, v6, v7); sub_456380(v66, v67); v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v67, (int)"Theme", (int)&v68, (int)&v69, v8); else v9 = sub_8FB140(v67, (int)"Theme", (int)&v68, (int)&v69, 0); sub_8F3EB0(v68 - v6, v69 - v7, (int)v9, (int)v2, 0, 0); v10 = (volatile LONG *)sub_43D0D0(0x1Du); v65 = v10; v11 = sub_8FB140(v67, (int)"IconSlot", (int)&v68, (int)&v69, v10); sub_8F3EB0(v68 - v6, v69 - v7, (int)v11, (int)v2, 0, 0); sub_456820(v66, (int)"Panel01", 0); sub_456820(v66, (int)"Panel02", 0); sub_456820(v66, (int)"Panel03", 0); v12 = dword_AA8D98; v13 = dword_AA8D9C; v14 = dword_AA8DA0; v15 = dword_AA8DA4; v16 = sub_4090F0(-1712265988); sub_456760(v66, (int)"WinTitle", (int)v16, v12, v13, v14, v15, 5); v71 = sub_8FB140(v67, (int)"OutlineText", (int)&v68, (int)&v69, 0); sub_8F3EB0(v68 - v6, v69 - v7, (int)v71, (int)v2, 0, 0); v17 = *v71[9]; v18 = *(volatile LONG ***)(v17 + 20); v70 = *(_DWORD *)(v17 + 24); v71 = v18; v19 = sub_421050(0); v20 = sub_8F4A20(v68 - v6, v69 - v7, (int)v71, v70, v19, (int)v2, 0, 0); v21 = *v20; v71 = (volatile LONG **)v20; (*(void (__thiscall **)(volatile LONG *, signed int))(v21 + 488))(v20, 5); v70 = (int)(*v71 + 118); v22 = sub_4090F0(-363644634); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v70)(v71, v22); (*((void (__stdcall **)(_DWORD))*v71 + 60))(0); v71 = sub_8FB140(v67, (int)"SymbolText01", (int)&v68, (int)&v69, 0); sub_8F3EB0(v68 - v6, v69 - v7, (int)v71, (int)v2, 0, 0); v23 = v71[9]; v24 = *(volatile LONG ***)(*v23 + 20); v70 = *(_DWORD *)(*v23 + 24); v71 = v24; v25 = sub_421050(0); v26 = sub_8F4A20(v68 - v6, v69 - v7, (int)v71, v70, v25, (int)v2, 0, 0); v27 = *v26; v71 = (volatile LONG **)v26; (*(void (__thiscall **)(volatile LONG *, signed int))(v27 + 488))(v26, 5); v70 = (int)(*v71 + 118); v28 = sub_4090F0(777207420); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v70)(v71, v28); (*((void (__stdcall **)(_DWORD))*v71 + 60))(0); v71 = sub_8FB140(v67, (int)"NoticeText00", (int)&v68, (int)&v69, 0); sub_8F3EB0(v68 - v6, v69 - v7, (int)v71, (int)v2, 0, 0); v29 = v71[9]; v30 = *(volatile LONG ***)(*v29 + 20); v70 = *(_DWORD *)(*v29 + 24); v71 = v30; v31 = sub_421050(0); v32 = sub_8F4A20(v68 - v6, v69 - v7, (int)v71, v70, v31, (int)v2, 0, 0); v33 = *v32; v71 = (volatile LONG **)v32; (*(void (__thiscall **)(volatile LONG *, signed int))(v33 + 488))(v32, 5); v70 = (int)(*v71 + 118); v34 = sub_4090F0(-1001449979); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v70)(v71, v34); (*((void (__stdcall **)(_DWORD))*v71 + 60))(0); sub_4563D0(v66, 13, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, 0); sub_4563D0(v66, 12, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v70 = (int)sub_4563D0(v66, 11, (int)"OkNor", (int)"OkClick", (int)"OkOver", 0, 0); v35 = dword_AA8C68; v36 = dword_AA8C6C; v37 = dword_AA8C70; v38 = dword_AA8C74; v39 = sub_4090F0(742084507); sub_456040(v70, (int)v39, v35, v36, v37, v38, 5); v71 = 0; v70 = (int)(v2 + 157); while ( 1 ) { sprintf(&v72, "OutlineColorSlot%02d", v71); v40 = sub_8FB140(v67, (int)&v72, (int)&v68, (int)&v69, v65); v41 = sub_8FE0F0(v68 - v6, v69 - v7, (int)v40, (int)v2, 17, 0, 0); if ( !v41 ) break; (*(void (__thiscall **)(volatile LONG *, volatile LONG **))(*v41 + 520))(v41, v71); v42 = sub_42A8B0(v68 - v6, v69 - v7, (int)v71, (int)v2, a2, 32, 32); *(_DWORD *)v70 = v42; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v42 + 240))(v42, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v70 + 256))(0); v70 += 4; v71 = (volatile LONG **)((char *)v71 + 1); if ( (signed int)v71 >= 8 ) { v71 = 0; v70 = (int)(v2 + 93); while ( 1 ) { sprintf(&v72, "SymbolEmblemSlot%02d", v71); v43 = sub_8FB140(v67, (int)&v72, (int)&v68, (int)&v69, v65); sub_8F3EB0(v68 - v6, v69 - v7, (int)v43, (int)v2, 0, 0); v44 = sub_42A8B0(v68 - v6, v69 - v7, (int)v71, (int)v2, a2, 32, 32); *(_DWORD *)v70 = v44; if ( !v44 ) goto LABEL_27; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v44 + 240))(v44, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v70 + 256))(1); v45 = v70; *(_DWORD *)(*(_DWORD *)v70 + 304) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)v45 + 516))(16); v70 += 4; v71 = (volatile LONG **)((char *)v71 + 1); if ( (signed int)v71 >= 64 ) { v70 = 0; sprintf(&v72, "GuildEmblem%03d", 0); while ( sub_42C0A0((int)&v72) ) sprintf(&v72, "GuildEmblem%03d", ++v70); v46 = v70; v47 = v70 / 8; v2[87] = (volatile LONG *)(v70 / 8); v48 = v46 - 8 * v47; if ( v48 < 0 ) { LOBYTE(v73) = 0; sub_4562E0(v66); goto LABEL_18; } if ( !v48 ) *((_BYTE *)v2 + 344) = 1; v52 = sub_8FB140(v67, (int)"EmblemSlot", (int)&v68, (int)&v69, 0); sub_8F3EB0(v68 - v6, v69 - v7, (int)v52, (int)v2, 0, 0); v53 = sub_42A8B0(v68 - v6, v69 - v7, (int)v71, (int)v2, a2, 64, 64); v2[165] = (volatile LONG *)v53; if ( !v53 ) goto LABEL_27; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v53 + 256))(v53, 0); (*(void (__stdcall **)(_DWORD))(*v2[165] + 240))(0); v54 = sub_4563D0( v66, 14, (int)"OutlinePage_Nor00", (int)"OutlinePage_Click00", (int)"OutlinePage_Over00", 0, 0); v55 = v54; if ( !v54 ) goto LABEL_27; v56 = v70; v57 = *v54; if ( v70 > 8 ) { (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 520))(v54, 1); *((_DWORD *)v55 + 68) = dword_AD01E8; v58 = sub_4090F0(457985110); sub_8F2EA0((void **)v55, v58); } else { (*(void (__thiscall **)(volatile LONG *, _DWORD))(v57 + 256))(v54, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 240))(v55, 0); } v59 = sub_4563D0( v66, 15, (int)"OutlinePage_Nor01", (int)"OutlinePage_Click01", (int)"OutlinePage_Over01", 0, 0); v60 = v59; if ( v59 ) { v62 = *v59; if ( v56 > 8 ) { (*(void (__thiscall **)(volatile LONG *, signed int))(v62 + 520))(v60, 1); *((_DWORD *)v60 + 68) = dword_AD01E8; v63 = sub_4090F0(775899818); sub_8F2EA0((void **)v60, v63); } else { (*(void (__thiscall **)(volatile LONG *, _DWORD))(v62 + 256))(v60, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v60 + 240))(v60, 0); } (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v73) = 0; sub_4562E0(v66); v64 = (void (__thiscall ***)(_DWORD, signed int))v67; v73 = -1; if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v64 ) (**v64)(v64, 1); return 1; } LOBYTE(v73) = 0; sub_4562E0(v66); v61 = (void (__thiscall ***)(_DWORD, signed int))v67; v73 = -1; if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v61 ) { (**v61)(v61, 1); return 0; } return 0; } } } } LABEL_27: LOBYTE(v73) = 0; sub_4562E0(v66); v49 = (void (__thiscall ***)(_DWORD, signed int))v67; v73 = -1; if ( v67 ) { v50 = InterlockedDecrement((volatile LONG *)(v67 + 4)); LABEL_20: if ( !v50 ) { if ( v49 ) (**v49)(v49, 1); } return 0; } } else { LABEL_18: v49 = (void (__thiscall ***)(_DWORD, signed int))v67; v73 = -1; if ( v67 ) { v50 = InterlockedDecrement((volatile LONG *)(v67 + 4)); goto LABEL_20; } } return 0; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0042BC30) -------------------------------------------------------- void __thiscall sub_42BC30(_BYTE *this) { _BYTE *v1; // esi _DWORD *v2; // edi __int16 v3; // ST0C_2 const CHAR *v4; // eax v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( *((_DWORD *)v1 + 90) < 255 && (*(unsigned __int8 (**)(void))(**((_DWORD **)v1 + 165) + 260))() ) { LOBYTE(v3) = v1[368]; HIBYTE(v3) = v1[360]; sub_4C0A60(v2, v3); } else { v4 = sub_4090F0(1940098523); sub_492060(v2, (int)v4); } } } //----- (0042BCB0) -------------------------------------------------------- void __thiscall sub_42BCB0(char *this, int a2, int a3) { switch ( a2 ) { case 11: sub_42BC30(this); break; case 12: sub_42AEA0(); break; case 13: sub_42AEC0(); break; case 14: sub_42B100((int)this, 0); break; case 15: sub_42B100((int)this, 1); break; case 16: sub_42B1B0(this, (unsigned int *)&a3); break; case 17: sub_42B250(this, &a3); break; default: return; } } //----- (0042BD40) -------------------------------------------------------- volatile LONG *__cdecl sub_42BD40(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x298u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_42AD40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0042BE70) -------------------------------------------------------- void *__thiscall sub_42BE70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildEmblemWin::`vftable'; *((_DWORD *)this + 58) = &GuildEmblemWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ABCD4: using guessed type void *GuildEmblemWin::`vftable'; // 9ABCF4: using guessed type void *GuildEmblemWin::`vftable'; //----- (0042BEB0) -------------------------------------------------------- char sub_42BEB0() { return 1; } //----- (0042BEC0) -------------------------------------------------------- int sub_42BEC0() { sub_940360(&off_AA96AC); return sub_940360(&off_AA96C0); } // AA96AC: using guessed type void **off_AA96AC; // AA96C0: using guessed type void **off_AA96C0; //----- (0042BF30) -------------------------------------------------------- int __cdecl sub_42BF30(int a1) { _DWORD *v1; // edi int v2; // esi bool v3; // zf int v4; // eax int v5; // eax int v7; // [esp-4h] [ebp-13Ch] int *v8; // [esp+10h] [ebp-128h] int v9; // [esp+14h] [ebp-124h] int v10; // [esp+18h] [ebp-120h] int v11; // [esp+1Ch] [ebp-11Ch] _DWORD *v12; // [esp+20h] [ebp-118h] char v13; // [esp+24h] [ebp-114h] int v14; // [esp+134h] [ebp-4h] v1 = 0; v12 = 0; v14 = 0; if ( !sub_455570(&off_AA96AC, a1, (int *)&v12) ) { if ( !byte_ACAD5C ) sub_420410(); v7 = a1; sprintf(&v13, "%sIcon\\%s.dds", byte_ACAB50, a1); v4 = sub_8667C0(); v5 = (*(int (__thiscall **)(int, char *, _DWORD))(*(_DWORD *)v4 + 8))(v4, &v13, 0); if ( v5 ) { v9 = 6; v10 = 3; v11 = 0; v1 = sub_865FA0(v5, &v9); } v2 = (int)v12; if ( v12 != v1 ) { if ( v12 && !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v2 = (int)v1; v12 = v1; if ( !v1 ) goto LABEL_15; InterlockedIncrement(v1 + 1); } v3 = v2 == 0; if ( !v2 ) goto LABEL_16; v7 = v2; v8 = &v7; InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_6688B0(&off_AA96AC, a1, v7); LABEL_15: v3 = v2 == 0; goto LABEL_16; } v2 = (int)v12; v3 = v12 == 0; LABEL_16: v14 = -1; if ( !v3 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return v2; } // AA96AC: using guessed type void **off_AA96AC; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0042C0A0) -------------------------------------------------------- int __cdecl sub_42C0A0(int a1) { _DWORD *v1; // edi int v2; // esi bool v3; // zf int v4; // eax int v5; // eax int v7; // [esp-4h] [ebp-13Ch] int *v8; // [esp+10h] [ebp-128h] int v9; // [esp+14h] [ebp-124h] int v10; // [esp+18h] [ebp-120h] int v11; // [esp+1Ch] [ebp-11Ch] _DWORD *v12; // [esp+20h] [ebp-118h] char v13; // [esp+24h] [ebp-114h] int v14; // [esp+134h] [ebp-4h] v1 = 0; v12 = 0; v14 = 0; if ( !sub_455570(&off_AA96AC, a1, (int *)&v12) ) { if ( !byte_ACAD5C ) sub_420410(); v7 = a1; sprintf(&v13, "%sIcon\\Png\\%s.png", byte_ACAB50, a1); v4 = sub_8667C0(); v5 = (*(int (__thiscall **)(int, char *, _DWORD))(*(_DWORD *)v4 + 8))(v4, &v13, 0); if ( v5 ) { v9 = 6; v10 = 3; v11 = 0; v1 = sub_865FA0(v5, &v9); } v2 = (int)v12; if ( v12 != v1 ) { if ( v12 && !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v2 = (int)v1; v12 = v1; if ( !v1 ) goto LABEL_15; InterlockedIncrement(v1 + 1); } v3 = v2 == 0; if ( !v2 ) goto LABEL_16; v7 = v2; v8 = &v7; InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_6688B0(&off_AA96AC, a1, v7); LABEL_15: v3 = v2 == 0; goto LABEL_16; } v2 = (int)v12; v3 = v12 == 0; LABEL_16: v14 = -1; if ( !v3 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return v2; } // AA96AC: using guessed type void **off_AA96AC; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0042C210) -------------------------------------------------------- int *__cdecl sub_42C210(int *a1, int a2) { int v2; // esi volatile LONG *v4; // eax volatile LONG *v5; // esi int v6; // esi int v7; // edi int v8; // edi void (__thiscall **v9)(int, signed int); // edx int v10; // ecx int v11; // eax int v12; // ebx int v13; // [esp-4h] [ebp-144h] volatile LONG *v14; // [esp+10h] [ebp-130h] int v15; // [esp+14h] [ebp-12Ch] int *v16; // [esp+18h] [ebp-128h] int v17; // [esp+1Ch] [ebp-124h] int v18; // [esp+20h] [ebp-120h] int v19; // [esp+24h] [ebp-11Ch] int *v20; // [esp+28h] [ebp-118h] char Src; // [esp+2Ch] [ebp-114h] int v22; // [esp+13Ch] [ebp-4h] v18 = 0; v20 = a1; v17 = a2; v19 = 0; v22 = 1; if ( !sub_455570(&off_AA96C0, a2, &v19) ) { if ( !byte_ACAD5C ) sub_420410(); v13 = a2; sprintf(&Src, "%sIcon\\%s.nif", byte_ACAB50, a2); v4 = sub_8F63D0(&Src, 0); v5 = v4; v14 = v4; if ( v4 ) InterlockedIncrement(v4 + 1); LOBYTE(v22) = 2; if ( v5 ) { v7 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v5 + 72))(v5, "Box"); v15 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); LOBYTE(v22) = 3; if ( v7 ) { v11 = sub_85C050((_DWORD *)v7, 8); sub_56FF80(&v19, v11); v12 = v19; if ( !v19 ) { v16 = &v13; sub_6688B0(&off_AA96C0, v17, v19); } *v20 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v18 = 1; LOBYTE(v22) = 2; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); LOBYTE(v22) = 1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); LOBYTE(v22) = 0; if ( !v12 || InterlockedDecrement((volatile LONG *)(v12 + 4)) ) return v20; v9 = *(void (__thiscall ***)(int, signed int))v12; v10 = v12; } else { v8 = v19; *v20 = v19; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v18 = 1; LOBYTE(v22) = 1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); LOBYTE(v22) = 0; if ( !v8 || InterlockedDecrement((volatile LONG *)(v8 + 4)) ) return v20; v9 = *(void (__thiscall ***)(int, signed int))v8; v10 = v8; } (*v9)(v10, 1); } else { v6 = v19; *v20 = v19; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v18 = 1; LOBYTE(v22) = 0; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } return v20; } v2 = v19; *a1 = v19; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v18 = 1; LOBYTE(v22) = 0; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } return a1; } // AA96C0: using guessed type void **off_AA96C0; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0042C4F0) -------------------------------------------------------- void __thiscall sub_42C4F0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // 9ABF50: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // 9ABF90: using guessed type void *NiTMap>::`vftable'; // 9ABFB0: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (0042C5C0) -------------------------------------------------------- void __thiscall sub_42C5C0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // 9ABF70: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // 9ABFD0: using guessed type void *NiTMap>::`vftable'; // 9ABFF0: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (0042C670) -------------------------------------------------------- LONG __thiscall sub_42C670(_BYTE *this, int a2, const char *a3, LONG a4) { unsigned int v4; // kr00_4 char *v5; // eax int v6; // edi int v7; // esi LONG result; // eax int (__thiscall ***v9)(_DWORD, signed int); // esi if ( this[16] ) { v4 = strlen(a3); v5 = (char *)operator new[](v4 + 1); v6 = a2; *(_DWORD *)(a2 + 4) = v5; strcpy_s(v5, v4 + 1, a3); } else { v6 = a2; *(_DWORD *)(a2 + 4) = a3; } v7 = *(_DWORD *)(v6 + 8); result = a4; if ( v7 != a4 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = a4; } *(_DWORD *)(v6 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a4; } } if ( result ) { v9 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v9 ) result = (**v9)(v9, 1); } } return result; } //----- (0042C760) -------------------------------------------------------- void **__thiscall sub_42C760(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ABF50: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; //----- (0042C7A0) -------------------------------------------------------- void **__thiscall sub_42C7A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ABF50: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // 9ABF90: using guessed type void *NiTMap>::`vftable'; //----- (0042C820) -------------------------------------------------------- void *__thiscall sub_42C820(void *this, char a2) { void *v2; // esi v2 = this; sub_42C4F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0042C850) -------------------------------------------------------- void **__thiscall sub_42C850(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ABF70: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; //----- (0042C890) -------------------------------------------------------- void **__thiscall sub_42C890(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ABF70: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // 9ABFD0: using guessed type void *NiTMap>::`vftable'; //----- (0042C910) -------------------------------------------------------- void *__thiscall sub_42C910(void *this, char a2) { void *v2; // esi v2 = this; sub_42C5C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0042C940) -------------------------------------------------------- char sub_42C940() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "PartyMatching"); return (char)v0; } //----- (0042C980) -------------------------------------------------------- char __thiscall sub_42C980(_BYTE *this) { return this[380]; } //----- (0042C990) -------------------------------------------------------- BOOL __stdcall sub_42C990(int a1) { int v1; // eax v1 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); return v1 >= *(_DWORD *)(a1 + 16) && v1 <= *(_DWORD *)(a1 + 20); } //----- (0042C9D0) -------------------------------------------------------- void __thiscall sub_42C9D0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(v1[74]); } // AD01E8: using guessed type int dword_AD01E8; //----- (0042CA00) -------------------------------------------------------- int __thiscall sub_42CA00(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (0042CAA0) -------------------------------------------------------- void __thiscall sub_42CAA0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; if ( a2 == 27 ) { if ( a4 ) v5 = a4 - 232; else v5 = 0; if ( v5 == this[50] && _time32(0) < this[56] ) { if ( *a3 ) { if ( *a3 == 1 ) sub_4C1950((_DWORD *)v4[16], (int)(v4 + 51), 0); } else { sub_4C1950((_DWORD *)v4[16], (int)(v4 + 51), 1); } } } } //----- (0042CB50) -------------------------------------------------------- char __thiscall sub_42CB50(_DWORD **this) { return sub_4B80F0(this[74]); } //----- (0042CB60) -------------------------------------------------------- _DWORD *__thiscall sub_42CB60(_DWORD *this) { _DWORD *v1; // esi int v3; // [esp+10h] [ebp-1Ch] int v4; // [esp+14h] [ebp-18h] int v5; // [esp+18h] [ebp-14h] _DWORD *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v6 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &InstanceMatchWin::`vftable'; v1[58] = &InstanceMatchWin::`vftable'; v7 = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[96] = -1; v1[99] = 0; v1[98] = 0; v1[97] = 0; sub_749180(v1 + 101); v1[108] = 0; v1[111] = 0; v1[110] = 0; v1[109] = 0; sub_749180(v1 + 113); v1[119] = 0; LOBYTE(v7) = 12; v3 = 10; v4 = 0; v5 = 0; sub_7491D0(v1 + 101, (int)&v3); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AC558: using guessed type void *InstanceMatchWin::`vftable'; // 9AC574: using guessed type void *InstanceMatchWin::`vftable'; //----- (0042CC70) -------------------------------------------------------- LONG __thiscall sub_42CC70(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi v1 = this; *this = &InstanceMatchWin::`vftable'; this[58] = &InstanceMatchWin::`vftable'; v2 = (int *)this[107]; if ( v2 ) { sub_748ED0(v2); operator delete(v2); } v3 = v1[119]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); nullsub_6(v1 + 113); v4 = v1[108]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); nullsub_6(v1 + 101); v5 = v1[93]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[92]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[91]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[90]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[89]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[88]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[87]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[86]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); return sub_8F10F0(v1); } // 9AC558: using guessed type void *InstanceMatchWin::`vftable'; // 9AC574: using guessed type void *InstanceMatchWin::`vftable'; //----- (0042CE90) -------------------------------------------------------- char __thiscall sub_42CE90(int this, int a2) { char result; // al *(_DWORD *)(this + 388) = *(_DWORD *)a2; *(_DWORD *)(this + 392) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 396) = *(_DWORD *)(a2 + 8); result = *(_BYTE *)(a2 + 12); *(_BYTE *)(this + 400) = result; return result; } //----- (0042CEC0) -------------------------------------------------------- char __thiscall sub_42CEC0(_DWORD *this, int *a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD *v4; // ecx volatile LONG *v5; // eax volatile LONG *v6; // esi volatile LONG *v7; // ebx int v8; // ST08_4 char *v9; // eax volatile LONG *v10; // esi v2 = this; v3 = (_DWORD *)this[119]; if ( v3 && sub_8F3540(v3) ) sub_4628D0(v2[119]); v4 = (_DWORD *)v2[108]; if ( !v4 || (LOBYTE(v5) = sub_8F3540(v4), !(_BYTE)v5) ) { if ( *((_BYTE *)a2 + 4) ) { v5 = sub_462CA0(1, "Asking other players..."); v6 = (volatile LONG *)v2[119]; v7 = v5; if ( v6 == v5 ) return (char)v5; if ( v6 ) { v5 = (volatile LONG *)InterlockedDecrement(v6 + 1); if ( !v5 ) { if ( v6 ) LOBYTE(v5) = (**(int (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } } } else { v8 = *a2; v9 = (char *)sub_4090F0(-1851341104); v5 = sub_462CA0(1, v9, v8); v10 = (volatile LONG *)v2[119]; v7 = v5; if ( v10 == v5 ) return (char)v5; if ( v10 ) { v5 = (volatile LONG *)InterlockedDecrement(v10 + 1); if ( !v5 ) { if ( v10 ) LOBYTE(v5) = (**(int (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); } } } v2[119] = v7; if ( v7 ) LOBYTE(v5) = InterlockedIncrement(v7 + 1); } return (char)v5; } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); //----- (0042CFB0) -------------------------------------------------------- volatile LONG *__thiscall sub_42CFB0(_DWORD *this, _BYTE *a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD *v4; // ecx volatile LONG *result; // eax char *v6; // eax volatile LONG *v7; // esi volatile LONG *v8; // ebx v2 = this; v3 = (_DWORD *)this[119]; if ( v3 && sub_8F3540(v3) ) sub_4628D0(v2[119]); v4 = (_DWORD *)v2[108]; if ( v4 && sub_8F3540(v4) ) sub_4628D0(v2[108]); if ( *a2 == 1 ) { v6 = (char *)sub_4090F0(-1310138115); } else { result = (volatile LONG *)((unsigned __int8)*a2 - 2); if ( *a2 != 2 ) return result; v6 = (char *)sub_4090F0(574189693); } result = sub_462CA0(1, v6); v7 = (volatile LONG *)v2[119]; v8 = result; if ( v7 != result ) { if ( v7 ) { result = (volatile LONG *)InterlockedDecrement(v7 + 1); if ( !result ) { if ( v7 ) result = (volatile LONG *)(**(int (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); } } v2[119] = v8; if ( v8 ) result = (volatile LONG *)InterlockedIncrement(v8 + 1); } return result; } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); //----- (0042D070) -------------------------------------------------------- int __usercall sub_42D070@(int a1@, int a2@) { int v2; // esi _DWORD *v3; // ecx int v4; // eax _BYTE *v5; // eax int v6; // eax int *v7; // eax int *v8; // ebx int result; // eax int v10; // [esp+4h] [ebp-18h] char v11; // [esp+8h] [ebp-14h] v2 = a1; v10 = 0; v3 = *(_DWORD **)(a1 + 432); if ( v3 && sub_8F3540(v3) || *(_BYTE *)(v2 + 480) || (v4 = *(_DWORD *)(v2 + 376)) != 0 && (v4 = *(_DWORD *)(v4 + 740)) != 0 && sub_58F2C0((_BYTE *)v4) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); } else { LOBYTE(v4) = !*(_DWORD *)(v2 + 424) && (!*(_BYTE *)(v2 + 380) || (v4 = *(_DWORD *)(v2 + 384), v4 != -1) && (v10 = *(_DWORD *)(v2 + 384), v5 = (_BYTE *)sub_747FB0(*(_DWORD **)(v2 + 428), (int)&v11, &v10), v4 = sub_4310F0(v5, v2 + 388), (_BYTE)v4)) && (v6 = sub_747FE0(*(_DWORD **)(v2 + 428), *(_DWORD *)(v2 + 384)), v4 = sub_42C990(v6), (_BYTE)v4); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v2 + 356) + 240))(v4, a2); v7 = (int *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(*(unsigned __int8 *)(v2 + 380)); LOBYTE(v7) = *(_BYTE *)(v2 + 380) && (v7 = sub_7484A0(*(_DWORD **)(v2 + 428), v2 + 388), *((_BYTE *)v7 + 112)) && (v8 = sub_7484A0(*(_DWORD **)(v2 + 428), v2 + 388) + 29, v7 = sub_7484A0(*(_DWORD **)(v2 + 428), v2 + 388), *v8 >= v7[6]); result = (*(int (__cdecl **)(int *))(**(_DWORD **)(v2 + 364) + 240))(v7); } return result; } //----- (0042D220) -------------------------------------------------------- int __thiscall sub_42D220(void *this, int *a2, int *a3, void ***a4, _DWORD *a5, int *a6, const char *a7, int a8, int a9, int a10, int a11) { int v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // esi int v14; // esi int v15; // edi _DWORD *v16; // eax volatile LONG *v17; // eax void **v18; // esi volatile LONG *v19; // edi int result; // eax int v21; // [esp+Ch] [ebp-14h] int v22; // [esp+10h] [ebp-10h] char v23; // [esp+14h] [ebp-Ch] void *v24; // [esp+18h] [ebp-8h] volatile LONG **v25; // [esp+1Ch] [ebp-4h] v11 = *a2; v24 = this; v21 = 0; v22 = 0; v12 = sub_8FB140(v11, a9, (int)&v21, (int)&v22, 0); v13 = (volatile LONG **)*a3; v25 = v12; if ( v13 != v12 ) { if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)v13 + 1) && v13 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v13)(v13, 1); v12 = v25; } *a3 = (int)v12; if ( v12 ) InterlockedIncrement((volatile LONG *)v12 + 1); } sub_8FB650((_DWORD *)*a3, *a2, a10); sub_8FB650((_DWORD *)*a3, *a2, a11); v14 = v21 - *a5; v15 = v22 - a5[1]; v16 = sub_4315D0(&v23, a2, a9); v17 = sub_8FE0F0(v14 + *v16, v15 + v16[1], *a3, a8, *a6, 0, 0); v18 = *a4; v19 = v17; if ( *a4 != (void **)v17 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)v18 + 1) && v18 ) (*(void (__thiscall **)(void **, signed int))*v18)(v18, 1); *a4 = (void **)v19; if ( v19 ) InterlockedIncrement(v19 + 1); } sub_8F2EA0(*a4, a7); result = dword_AD01E8; (*a4)[68] = (void *)dword_AD01E8; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0042D350) -------------------------------------------------------- int __stdcall sub_42D350(int *a1, volatile LONG ***a2, volatile LONG **a3, volatile LONG **a4, _DWORD *a5, int a6, int a7, int a8, int *a9, int *a10, _DWORD *a11, int a12, unsigned __int8 *a13) { volatile LONG **v13; // edi volatile LONG **v14; // esi int v15; // esi int v16; // edi _DWORD *v17; // eax int v18; // ebx int v19; // esi int v20; // edi int v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // esi volatile LONG *v24; // edi char v26; // [esp+Ch] [ebp-10h] int v27; // [esp+14h] [ebp-8h] int v28; // [esp+18h] [ebp-4h] int v29; // [esp+40h] [ebp+24h] v27 = 0; v28 = 0; v13 = sub_8FB140(*a1, a8, (int)&v27, (int)&v28, *a3); v14 = *a2; if ( *a2 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)v14 + 1) && v14 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v14)(v14, 1); *a2 = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)v13 + 1); } v15 = v27 - *a5; v16 = v28 - a5[1]; v17 = sub_4315D0(&v26, a1, a8); v18 = v15 + *v17; v19 = v16 + v17[1]; if ( *a10 == -1 ) v29 = *(_DWORD *)(*(*a2)[9] + 24); else v29 = *a10; v20 = *a9; if ( *a9 == -1 ) v20 = *(_DWORD *)(*(*a2)[9] + 20); v21 = sub_421050(a12); v22 = sub_8F4A20(v18, v19, v20, v29, v21, a7, 0, 0); v23 = *a4; v24 = v22; if ( *a4 != v22 ) { if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v23)(v23, 1); *a4 = v24; if ( v24 ) InterlockedIncrement(v24 + 1); } (*(void (__stdcall **)(_DWORD))(**a4 + 488))(*a11); (*(void (__stdcall **)(int))(**a4 + 472))(a6); return (*(int (__stdcall **)(_DWORD))(**a4 + 240))(*a13); } //----- (0042D4C0) -------------------------------------------------------- volatile LONG *__thiscall sub_42D4C0(void *this, int *a2, int *a3, volatile LONG **a4, _DWORD *a5, int a6, int a7) { volatile LONG *v7; // ST14_4 volatile LONG **v8; // eax int v9; // esi volatile LONG **v10; // edi int v11; // esi int v12; // edi _DWORD *v13; // eax int v15; // [esp+Ch] [ebp-10h] int v16; // [esp+10h] [ebp-Ch] char v17; // [esp+14h] [ebp-8h] void *v18; // [esp+18h] [ebp-4h] v15 = 0; v16 = 0; v7 = *a4; v18 = this; v8 = sub_8FB140(*a2, a7, (int)&v15, (int)&v16, v7); v9 = *a3; v10 = v8; if ( (volatile LONG **)*a3 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *a3 = (int)v10; if ( v10 ) InterlockedIncrement((volatile LONG *)v10 + 1); } v11 = v15 - *a5; v12 = v16 - a5[1]; v13 = sub_4315D0(&v17, a2, a7); return sub_8F3EB0(v11 + *v13, v12 + v13[1], *a3, a6, 0, 0); } //----- (0042D580) -------------------------------------------------------- volatile LONG *__thiscall sub_42D580(void *this, int *a2, int *a3, volatile LONG **a4, _DWORD *a5, int *a6, int a7, int a8, int a9, int a10) { volatile LONG *v10; // ST18_4 volatile LONG **v11; // eax _DWORD *v12; // esi int v13; // esi int v14; // edi _DWORD *v15; // eax int v17; // [esp+Ch] [ebp-10h] int v18; // [esp+10h] [ebp-Ch] char v19; // [esp+14h] [ebp-8h] void *v20; // [esp+18h] [ebp-4h] volatile LONG **v21; // [esp+2Ch] [ebp+10h] v17 = 0; v18 = 0; v10 = *a4; v20 = this; v11 = sub_8FB140(*a2, a8, (int)&v17, (int)&v18, v10); v12 = (_DWORD *)*a3; v21 = v11; if ( (volatile LONG **)*a3 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) && v12 ) (*(void (__thiscall **)(_DWORD *, signed int))*v12)(v12, 1); v11 = v21; } *a3 = (int)v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); } sub_8FB650((_DWORD *)*a3, *a2, a9); sub_8FB650((_DWORD *)*a3, *a2, a10); v13 = v17 - *a5; v14 = v18 - a5[1]; v15 = sub_4315D0(&v19, a2, a8); return sub_8FE0F0(v13 + *v15, v14 + v15[1], *a3, a7, *a6, 0, 0); } //----- (0042D750) -------------------------------------------------------- void __thiscall sub_42D750(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx unsigned int v3; // ebx int v4; // eax unsigned int v5; // esi int v6; // eax int v7; // eax int v8; // ecx unsigned int v9; // eax char *v10; // edi char v11; // cl int v12; // edi const CHAR *v13; // eax char *v14; // ecx unsigned int v15; // eax char *v16; // esi char *v17; // edi char v18; // cl signed int v19; // ebx int v20; // eax const char *v21; // esi char *v22; // ecx unsigned int v23; // eax char *v24; // esi char *v25; // edi char v26; // cl void **v27; // esi const char *v28; // eax int v29; // eax int v30; // eax int v31; // eax int v32; // [esp+4h] [ebp-45Ch] int v33; // [esp+8h] [ebp-458h] unsigned int v34; // [esp+Ch] [ebp-454h] _DWORD *v35; // [esp+10h] [ebp-450h] unsigned int v36; // [esp+14h] [ebp-44Ch] int v37; // [esp+18h] [ebp-448h] char v38; // [esp+1Ch] [ebp-444h] char v39; // [esp+41Ch] [ebp-44h] v1 = this; v2 = (_DWORD *)this[92]; v35 = v1; if ( v2 ) { if ( v1[107] ) { v3 = 0; v33 = sub_464700(v2); v36 = 0; if ( v33 > 0 ) { do { v4 = v1[92]; v5 = 0; v34 = 0; if ( v3 < (*(_DWORD *)(v4 + 300) - *(_DWORD *)(v4 + 296)) >> 2 ) { v6 = *(_DWORD *)(*(_DWORD *)(v4 + 296) + 4 * v3); v7 = (*(_DWORD *)(v6 + 336) - *(_DWORD *)(v6 + 332)) >> 2 ? **(_DWORD **)(v6 + 332) : 0; v8 = v7; v37 = v7; if ( v7 ) { while ( 1 ) { if ( v5 ) { if ( v5 == 3 ) { memset(&v38, 0, 0x400u); v9 = strlen(&v39) + 1; v10 = (char *)&v37 + 3; do v11 = (v10++)[1]; while ( v11 ); qmemcpy(v10, &v39, v9); v12 = sub_747FE0((_DWORD *)v35[107], v3); v32 = v12; if ( *(_DWORD *)(v12 + 116) ) { v19 = 1; do { if ( *(_BYTE *)(v12 + v19 + 120) ) { v20 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (unsigned __int8)v19); v21 = &byte_9A8050; if ( v20 ) v21 = (const char *)(v20 + 21); if ( strcmp(v21, (const char *)&unk_9AC06F) ) { v22 = sub_7549E0("\n%s: %i", v21, *(unsigned __int8 *)(v12 + v19 + 120)); v23 = strlen(v22) + 1; v24 = v22; v25 = (char *)&v37 + 3; do v26 = (v25++)[1]; while ( v26 ); qmemcpy(v25, v24, v23); v12 = v32; } } ++v19; } while ( v19 < 32 ); v3 = v36; } else { v13 = sub_4090F0(-2020608815); v14 = sub_7549E0("\n%s", v13); v15 = strlen(v14) + 1; v16 = v14; v17 = (char *)&v37 + 3; do v18 = (v17++)[1]; while ( v18 ); qmemcpy(v17, v16, v15); } v27 = (void **)v37; *(_DWORD *)(v37 + 272) = dword_AD01E8; sub_8F2EA0(v27, &v38); (*((void (__thiscall **)(void **, signed int))*v27 + 60))(v27, 1); v1 = v35; v5 = v34; } } else { v28 = (const char *)(*(int (**)(void))(*(_DWORD *)v8 + 484))(); sprintf(&v39, v28); } v29 = v1[92]; v34 = ++v5; if ( v3 >= (*(_DWORD *)(v29 + 300) - *(_DWORD *)(v29 + 296)) >> 2 ) break; v30 = *(_DWORD *)(*(_DWORD *)(v29 + 296) + 4 * v3); v31 = v5 < (*(_DWORD *)(v30 + 336) - *(_DWORD *)(v30 + 332)) >> 2 ? *(_DWORD *)(*(_DWORD *)(v30 + 332) + 4 * v5) : 0; v37 = v31; if ( !v31 ) break; v8 = v37; } } } v36 = ++v3; } while ( (signed int)v3 < v33 ); } } } } // AC9C84: using guessed type int dword_AC9C84; // AD01E8: using guessed type int dword_AD01E8; //----- (0042DA60) -------------------------------------------------------- void __thiscall sub_42DA60(int this) { int v1; // esi const char *v2; // eax _DWORD *v3; // ecx const char *v4; // eax const char *v5; // eax const char *v6; // eax int v7; // eax _BYTE *v8; // eax const char *v9; // eax int v10; // ecx int v11; // eax void **v12; // edi char *v13; // eax char *v14; // eax const char *v15; // eax _BYTE *v16; // eax const char *v17; // ST28_4 int v18; // eax const char *v19; // ST28_4 const char *v20; // ST28_4 int v21; // ecx int (*v22)(void); // eax int v23; // ecx void **v24; // edi char *v25; // eax char *v26; // eax const char *v27; // eax int v28; // ecx int (*v29)(void); // edx int v30; // ecx void **v31; // edi char *v32; // eax char *v33; // eax const char *v34; // ST24_4 int *v35; // edi char *v36; // eax int v37; // ecx int (*v38)(void); // eax void **v39; // ecx const char *v40; // eax void **v41; // edi const char *v42; // eax void **v43; // edi const char *v44; // eax void **v45; // esi const char *v46; // [esp-Ch] [ebp-4B4h] int v47; // [esp+8h] [ebp-4A0h] int v48; // [esp+Ch] [ebp-49Ch] char v49; // [esp+13h] [ebp-495h] char v50; // [esp+14h] [ebp-494h] char v51; // [esp+24h] [ebp-484h] char v52; // [esp+124h] [ebp-384h] char DstBuf; // [esp+224h] [ebp-284h] char Dst; // [esp+324h] [ebp-184h] char ArgList; // [esp+424h] [ebp-84h] v1 = this; v49 = *(_BYTE *)(this + 480); if ( v49 ) { v2 = sub_4090F0(1935314330); LABEL_10: strcpy_s(&Dst, 0x100u, v2); v9 = sub_4090F0(1924455666); strcpy_s(&v51, 0x100u, v9); v6 = sub_4090F0(1924455666); goto LABEL_11; } v3 = *(_DWORD **)(this + 432); if ( v3 && sub_8F3540(v3) ) { v49 = 1; v4 = sub_4090F0(-1714568474); strcpy_s(&Dst, 0x100u, v4); v5 = sub_4090F0(-1714568474); strcpy_s(&v51, 0x100u, v5); v6 = sub_4090F0(-1714568474); LABEL_11: strcpy_s(&DstBuf, 0x100u, v6); goto LABEL_12; } v7 = *(_DWORD *)(v1 + 376); if ( v7 ) { v8 = *(_BYTE **)(v7 + 740); if ( v8 ) { if ( sub_58F2C0(v8) ) { v49 = 1; v2 = sub_4090F0(311392081); goto LABEL_10; } } } v49 = 0; LABEL_12: if ( *(_DWORD *)(v1 + 384) != -1 ) { v10 = *(_DWORD *)(v1 + 356); if ( !v10 ) goto LABEL_31; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v10 + 244))() ) { v11 = sub_747FE0(*(_DWORD **)(v1 + 428), *(_DWORD *)(v1 + 384)); sub_431760(&ArgList, v11); v12 = *(void ***)(v1 + 356); v13 = (char *)sub_4090F0(308232808); v14 = sub_7549E0(v13, &ArgList); sub_8F2EA0(v12, v14); } else if ( !v49 ) { if ( *(_DWORD *)(v1 + 424) ) { v15 = sub_4090F0(-2041339160); } else { v48 = *(_DWORD *)(v1 + 384); v16 = (_BYTE *)sub_747FB0(*(_DWORD **)(v1 + 428), (int)&v50, &v48); if ( (unsigned __int8)sub_4310B0(v16, v1 + 388) ) { v17 = sub_4090F0(-906686409); strcpy_s(&Dst, 0x100u, v17); goto LABEL_28; } v18 = sub_747FE0(*(_DWORD **)(v1 + 428), *(_DWORD *)(v1 + 384)); if ( !(unsigned __int8)sub_42C990(v18) ) { v19 = sub_4090F0(-887803370); strcpy_s(&Dst, 0x100u, v19); goto LABEL_28; } if ( (unsigned __int8)sub_4315A0((_DWORD *)v1) ) { v20 = sub_4090F0(311392081); strcpy_s(&Dst, 0x100u, v20); goto LABEL_28; } v15 = sub_4090F0(-1152435445); } strcpy_s(&Dst, 0x100u, v15); goto LABEL_28; } LABEL_28: v21 = *(_DWORD *)(v1 + 344); if ( v21 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v21 + 244))() ) { v22 = *(int (**)(void))(**(_DWORD **)(v1 + 344) + 456); v48 = 250; v47 = *(_DWORD *)(v22() + 192); sub_431250(&v52, (int)&Dst, (int)&v47, (int)&v48); sub_8F2EA0(*(void ***)(v1 + 344), &v52); } LABEL_31: sub_431760(&ArgList, v1 + 388); v23 = *(_DWORD *)(v1 + 360); if ( v23 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v23 + 244))() ) { v24 = *(void ***)(v1 + 360); v25 = (char *)sub_4090F0(948071066); v26 = sub_7549E0(v25, &ArgList); sub_8F2EA0(v24, v26); } else if ( !v49 ) { v27 = sub_4090F0(1924455666); strcpy_s(&v51, 0x100u, v27); } v28 = *(_DWORD *)(v1 + 348); if ( v28 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v28 + 244))() ) { v29 = *(int (**)(void))(**(_DWORD **)(v1 + 348) + 456); v47 = 250; v48 = *(_DWORD *)(v29() + 192); sub_431250(&v52, (int)&v51, (int)&v48, (int)&v47); sub_8F2EA0(*(void ***)(v1 + 348), &v52); } v30 = *(_DWORD *)(v1 + 364); if ( v30 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v30 + 244))() ) { v31 = *(void ***)(v1 + 364); v32 = (char *)sub_4090F0(-1853778312); v33 = sub_7549E0(v32, &ArgList); sub_8F2EA0(v31, v33); } else if ( !v49 ) { if ( *(_BYTE *)(v1 + 380) ) { v35 = sub_7484A0(*(_DWORD **)(v1 + 428), v1 + 388) + 29; if ( *v35 >= sub_7484A0(*(_DWORD **)(v1 + 428), v1 + 388)[6] ) { if ( *((_BYTE *)sub_7484A0(*(_DWORD **)(v1 + 428), v1 + 388) + 112) ) v46 = sub_4090F0(875202161); else v46 = sub_4090F0(-2041339160); strcpy_s(&DstBuf, 0x100u, v46); } else { v36 = (char *)sub_4090F0(-318694335); sub_431030(&DstBuf, v36, &ArgList); } } else { v34 = sub_4090F0(1924455666); strcpy_s(&DstBuf, 0x100u, v34); } } v37 = *(_DWORD *)(v1 + 352); if ( v37 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v37 + 244))() ) { v38 = *(int (**)(void))(**(_DWORD **)(v1 + 352) + 456); v47 = 250; v48 = *(_DWORD *)(v38() + 192); sub_431250(&v52, (int)&DstBuf, (int)&v48, (int)&v47); v39 = *(void ***)(v1 + 352); v40 = &v52; LABEL_60: sub_8F2EA0(v39, v40); return; } return; } v41 = *(void ***)(v1 + 356); if ( v41 ) { v42 = sub_4090F0(-1152435445); sub_8F2EA0(v41, v42); } v43 = *(void ***)(v1 + 360); if ( v43 ) { v44 = sub_4090F0(824513418); sub_8F2EA0(v43, v44); } v45 = *(void ***)(v1 + 364); if ( v45 ) { v40 = sub_4090F0(875202161); v39 = v45; goto LABEL_60; } } //----- (0042E100) -------------------------------------------------------- void __usercall sub_42E100(_DWORD *a1@, int a2@) { int v2; // esi int *v3; // ebx int v4; // edi char v5; // al int *v6; // ebx int v7; // edi char v8; // al int *v9; // ebx int v10; // edi char v11; // al v2 = (int)a1; if ( sub_8F3540(a1) ) { sub_42D070(v2, a2); v3 = *(int **)(v2 + 344); if ( v3 ) { v4 = *v3; v5 = (*(int (**)(void))(**(_DWORD **)(v2 + 356) + 244))(); (*(void (__thiscall **)(int *, bool))(v4 + 240))(v3, v5 == 0); } v6 = *(int **)(v2 + 348); if ( v6 ) { v7 = *v6; v8 = (*(int (**)(void))(**(_DWORD **)(v2 + 360) + 244))(); (*(void (__thiscall **)(int *, bool))(v7 + 240))(v6, v8 == 0); } v9 = *(int **)(v2 + 352); if ( v9 ) { v10 = *v9; v11 = (*(int (**)(void))(**(_DWORD **)(v2 + 364) + 244))(); (*(void (__thiscall **)(int *, bool))(v10 + 240))(v9, v11 == 0); } sub_42DA60(v2); } } //----- (0042E1C0) -------------------------------------------------------- int __stdcall sub_42E1C0(int *a1, volatile LONG ***a2, volatile LONG **a3, int a4, int a5, int a6) { int v7; // [esp+4h] [ebp-28h] int v8; // [esp+8h] [ebp-24h] int v9; // [esp+Ch] [ebp-20h] int v10; // [esp+10h] [ebp-1Ch] int v11; // [esp+14h] [ebp-18h] int v12; // [esp+18h] [ebp-14h] char v13; // [esp+1Fh] [ebp-Dh] int v14; // [esp+28h] [ebp-4h] v13 = 0; v12 = 1; v11 = -1; v10 = -1; v7 = 0; v8 = 0; v9 = 0; v14 = 0; return sub_42D350(a1, a2, (volatile LONG **)&v9, a3, &v7, a4, a5, a6, &v10, &v11, &v12, 9, (unsigned __int8 *)&v13); } //----- (0042E250) -------------------------------------------------------- void __userpurge sub_42E250(int a1@, int a2@, float a3) { int v3; // ebx DWORD v4; // eax int v5; // ecx _DWORD *v6; // ecx int v7; // ST0C_4 char *v8; // eax int *v9; // eax _DWORD *v10; // eax bool v11; // cf char *v12; // edx unsigned int v13; // eax char *v14; // edi char v15; // cl char *v16; // ecx int v17; // ST0C_4 char *v18; // eax int *v19; // eax _DWORD *v20; // eax char *v21; // edx unsigned int v22; // eax char *v23; // edi char v24; // cl int v25; // ST0C_4 char *v26; // eax int *v27; // eax _DWORD *v28; // eax char *v29; // edx unsigned int v30; // eax char *v31; // edi char v32; // cl char v33; // [esp+10h] [ebp-20Ch] char v34; // [esp+1Ch] [ebp-200h] char v35; // [esp+28h] [ebp-1F4h] float v36; // [esp+34h] [ebp-1E8h] char v37; // [esp+38h] [ebp-1E4h] char v38; // [esp+54h] [ebp-1C8h] char v39; // [esp+70h] [ebp-1ACh] char ArgList; // [esp+8Ch] [ebp-190h] char v41; // [esp+10Bh] [ebp-111h] char DstBuf; // [esp+10Ch] [ebp-110h] int v43; // [esp+218h] [ebp-4h] v3 = a1; if ( !(*(_BYTE *)(a1 + 28) & 1) ) { if ( _time32(0) >= *(_DWORD *)(a1 + 408) ) { sub_4B80F0(*(_DWORD **)(v3 + 296)); sub_7491A0((__time32_t *)(v3 + 404)); } v4 = timeGetTime(); v5 = *(_DWORD *)(v3 + 424); if ( v5 && v4 - v5 > 5 ) { *(_DWORD *)(v3 + 424) = 0; sub_42E100((_DWORD *)v3, a2); } } if ( *(_DWORD *)(v3 + 376) ) sub_4E3710(*(_DWORD **)(v3 + 368), *(_DWORD **)(v3 + 372)); v36 = a3 - flt_ACB23C; flt_ACB23C = a3; flt_ACB238 = flt_ACB238 + v36; if ( flt_ACB238 >= 0.30000001 ) { v6 = *(_DWORD **)(v3 + 432); flt_ACB238 = 0.0; if ( v6 ) { if ( sub_8F3540(v6) ) { if ( _time32(0) >= *(_DWORD *)(v3 + 456) ) { sub_4628D0(*(_DWORD *)(v3 + 432)); return; } sub_431760(&ArgList, v3 + 436); if ( *(_BYTE *)(v3 + 472) ) { if ( *(_BYTE *)(v3 + 472) == 1 ) { v17 = *(unsigned __int8 *)(v3 + 449); v18 = (char *)sub_4090F0(984531100); sub_431030(&DstBuf, v18, &ArgList, v17); v19 = sub_4311C0((_DWORD *)(v3 + 452), (int *)&v33); v20 = sub_749300(v19, &v38); v11 = v20[5] < 0x10u; v43 = 1; if ( !v11 ) v20 = (_DWORD *)*v20; v21 = sub_7549E0(" (%s)", v20); v22 = strlen(v21) + 1; v23 = &v41; do v24 = (v23++)[1]; while ( v24 ); qmemcpy(v23, v21, v22); v16 = &v38; } else { if ( *(_BYTE *)(v3 + 472) != 2 ) return; v7 = *(unsigned __int8 *)(v3 + 449); v8 = (char *)sub_4090F0(1165649223); sub_431030(&DstBuf, v8, &ArgList, v7); v9 = sub_4311C0((_DWORD *)(v3 + 452), (int *)&v35); v10 = sub_749300(v9, &v39); v11 = v10[5] < 0x10u; v43 = 2; if ( !v11 ) v10 = (_DWORD *)*v10; v12 = sub_7549E0(" (%s)", v10); v13 = strlen(v12) + 1; v14 = &v41; do v15 = (v14++)[1]; while ( v15 ); qmemcpy(v14, v12, v13); v16 = &v39; } } else { v25 = *(unsigned __int8 *)(v3 + 449); v26 = (char *)sub_4090F0(-1243878385); sub_431030(&DstBuf, v26, &ArgList, v25); v27 = sub_4311C0((_DWORD *)(v3 + 452), (int *)&v34); v28 = sub_749300(v27, &v37); v11 = v28[5] < 0x10u; v43 = 0; if ( !v11 ) v28 = (_DWORD *)*v28; v29 = sub_7549E0(" (%s)", v28); v30 = strlen(v29) + 1; v31 = &v41; do v32 = (v31++)[1]; while ( v32 ); qmemcpy(v31, v29, v30); v16 = &v37; } v43 = -1; sub_636A10(v16); sub_461C00(*(_DWORD **)(v3 + 432), &DstBuf); } } } } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); // ACB238: using guessed type float flt_ACB238; // ACB23C: using guessed type float flt_ACB23C; //----- (0042E5C0) -------------------------------------------------------- int __usercall sub_42E5C0@(int a1@, int a2@) { int v2; // esi _DWORD *v3; // ecx v2 = a1; v3 = *(_DWORD **)(a1 + 368); *(_DWORD *)(v2 + 424) = 0; if ( v3 ) { sub_466A50(v3); sub_4B80F0(*(_DWORD **)(v2 + 296)); } *(_DWORD *)(v2 + 384) = -1; sub_42E100((_DWORD *)v2, a2); *(_DWORD *)(v2 + 376) = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); return sub_8F28C0((_BYTE *)v2); } //----- (0042E620) -------------------------------------------------------- void __thiscall sub_42E620(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v4; // ecx int v5; // eax char *v6; // eax volatile LONG *v7; // eax int v8; // edi volatile LONG *v9; // ebx char *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // ebx char *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // ebx int v16; // [esp-4h] [ebp-A0h] int v17; // [esp+Ch] [ebp-90h] int v18; // [esp+10h] [ebp-8Ch] int v19; // [esp+14h] [ebp-88h] char Dst; // [esp+18h] [ebp-84h] v2 = this; v3 = (_DWORD *)this[119]; if ( v3 && sub_8F3540(v3) ) sub_4628D0(v2[119]); v4 = (_DWORD *)v2[108]; if ( v4 && sub_8F3540(v4) ) sub_4628D0(v2[108]); v17 = 20; v18 = 0; v19 = 0; sub_7491D0(v2 + 113, (int)&v17); v5 = (int)(v2 + 109); *(_DWORD *)v5 = *(_DWORD *)a2; *(_DWORD *)(v5 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v5 + 8) = *(_DWORD *)(a2 + 8); *(_BYTE *)(v5 + 12) = *(_BYTE *)(a2 + 12); *((_BYTE *)v2 + 449) = *(_BYTE *)(a2 + 15) - 1; sub_431760(&Dst, (int)(v2 + 109)); v16 = *((unsigned __int8 *)v2 + 449); if ( *(_BYTE *)(a2 + 13) ) { if ( *(_BYTE *)(a2 + 14) ) { v6 = (char *)sub_4090F0(1165649223); v7 = sub_462CA0(6, v6, &Dst, v16); v8 = v2[108]; v9 = v7; if ( (volatile LONG *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v2[108] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } *((_BYTE *)v2 + 472) = 2; } else { v10 = (char *)sub_4090F0(984531100); v11 = sub_462CA0(6, v10, &Dst, v16); v8 = v2[108]; v12 = v11; if ( (volatile LONG *)v8 != v11 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v2[108] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } *((_BYTE *)v2 + 472) = 1; } } else { v13 = (char *)sub_4090F0(-1243878385); v14 = sub_462CA0(6, v13, &Dst, v16); v8 = v2[108]; v15 = v14; if ( (volatile LONG *)v8 != v14 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v2[108] = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } *((_BYTE *)v2 + 472) = 0; } (**(void (__thiscall ***)(int, int))(v2[108] + 232))(v2[108] + 232, (int)(v2 + 58)); sub_42E100(v2, v8); } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); //----- (0042E860) -------------------------------------------------------- void __userpurge sub_42E860(int a1@, int a2@, char a3) { _DWORD *v3; // esi _DWORD *v4; // ecx char v5[4]; // [esp+7h] [ebp-Dh] int v6; // [esp+Bh] [ebp-9h] int v7; // [esp+Fh] [ebp-5h] char v8; // [esp+13h] [ebp-1h] v3 = (_DWORD *)a1; *(_BYTE *)(a1 + 480) = a3; if ( a3 && *(_BYTE *)(a1 + 380) ) { v7 = 0; v6 = 0; *(_DWORD *)v5 = 0; strncpy(v5, "Invalid", 0xCu); v4 = (_DWORD *)v3[74]; v8 = 32; sub_4C18C0(v4, (int)v5); } sub_42E100(v3, a2); } //----- (0042E8C0) -------------------------------------------------------- void __thiscall sub_42E8C0(_DWORD **this, __int16 a2, int a3) { _DWORD **v3; // esi signed int v4; // eax int v5; // edi char *v6; // eax int v7; // eax int v8; // edx int v9; // eax char v10; // cl _DWORD *v11; // ecx DWORD v12; // eax _DWORD *v13; // ecx int v14; // edx int v15; // eax char v16; // cl _DWORD *v17; // ecx int *v18; // ebx _DWORD *v19; // [esp+4h] [ebp-38h] char v20; // [esp+8h] [ebp-34h] _DWORD *v21; // [esp+18h] [ebp-24h] int v22; // [esp+1Ch] [ebp-20h] int v23; // [esp+20h] [ebp-1Ch] char v24; // [esp+24h] [ebp-18h] _DWORD *v25; // [esp+28h] [ebp-14h] int v26; // [esp+2Ch] [ebp-10h] int v27; // [esp+30h] [ebp-Ch] char v28; // [esp+34h] [ebp-8h] v3 = this; switch ( a2 ) { case 0xB: sub_42C940(); break; case 0xC: ((void (*)(void))(*this)[135])(); break; case 0xF: case 0x10: v4 = sub_464F50(this[92]); v5 = v4; if ( v4 >= 0 ) { sub_464B60(v3[92], v4, v3 + 96); v6 = sub_7549E0("SelectedRowIndex = %i\nSelectedListEntry = %i\n", v5, v3[96]); OutputDebugStringA(v6); sub_42E100(v3, v5); } break; case 0x14: v19 = this[96]; sub_747FB0(this[107], (int)&v20, &v19); v7 = sub_747FE0(v3[107], (int)v3[96]); if ( (unsigned __int8)sub_42C990(v7) ) { if ( *((_BYTE *)v3 + 380) ) { if ( (unsigned __int8)sub_4310F0((_BYTE *)v3 + 388, (int)&v20) ) { v8 = (int)v3[98]; v9 = (int)v3[99]; v25 = v3[97]; v10 = *((_BYTE *)v3 + 400); v26 = v8; v28 = v10; v11 = v3[74]; v27 = v9; sub_4C18C0(v11, (int)&v25); sub_4C1810(v3[74], (int)&v20); } } else { sub_4C1810(v3[74], (int)&v20); } } v12 = timeGetTime(); v13 = v3[89]; v3[106] = (_DWORD *)v12; (*(void (__stdcall **)(_DWORD))(*v13 + 240))(0); break; case 0x15: v14 = (int)this[98]; v15 = (int)this[99]; v21 = this[97]; v16 = *((_BYTE *)this + 400); v22 = v14; v24 = v16; v17 = v3[74]; v23 = v15; sub_4C18C0(v17, (int)&v21); break; case 0x16: v18 = sub_7484A0(this[107], (int)(this + 97)) + 29; if ( *v18 >= sub_7484A0(v3[107], (int)(v3 + 97))[6] ) sub_4C19E0(v3[74], (int)(v3 + 97)); break; case 0x17: sub_42CA00(this, 0); break; case 0x18: sub_42CA00(this, 1); break; case 0x19: sub_42CA00(this, 3); break; case 0x1A: sub_42CA00(this, 4); break; case 0x1B: sub_42CA00(this, 5); break; default: return; } } //----- (0042EB50) -------------------------------------------------------- void __thiscall sub_42EB50(_DWORD *this, float a2) { _DWORD *v2; // esi _DWORD *v3; // ecx signed int v4; // ebx int v5; // eax _DWORD *v6; // eax _DWORD *v7; // ecx int v8; // edx _DWORD *v9; // edi _DWORD *v10; // eax int v11; // [esp+10h] [ebp-34h] int v12; // [esp+14h] [ebp-30h] void *v13; // [esp+18h] [ebp-2Ch] int v14; // [esp+28h] [ebp-1Ch] unsigned int v15; // [esp+2Ch] [ebp-18h] int v16; // [esp+40h] [ebp-4h] v2 = this; *(float *)&v12 = a2 - flt_ACB244; flt_ACB244 = a2; flt_ACB240 = flt_ACB240 + *(float *)&v12; if ( flt_ACB240 >= 0.30000001 ) { v3 = (_DWORD *)this[107]; flt_ACB240 = 0.0; v4 = 0; v11 = sub_747F90(v3); if ( v11 > 0 ) { do { sub_464B60((_DWORD *)v2[92], v4, &v12); v5 = sub_747FE0((_DWORD *)v2[107], v4); v6 = sub_431840(&v13, (_DWORD *)(v5 + 36)); v16 = 0; if ( v6[5] >= 0x10u ) v6 = (_DWORD *)*v6; sub_4661A0((_DWORD *)v2[92], v12, 5, v6); v16 = -1; if ( v15 >= 0x10 ) operator delete(v13); v7 = (_DWORD *)v2[92]; v8 = (v7[75] - v7[74]) >> 2; v15 = 15; v14 = 0; LOBYTE(v13) = 0; if ( v12 < v8 ) { v9 = *(_DWORD **)(v7[74] + 4 * v12); if ( v9 ) { v10 = sub_4650C0(v7, v12, 5u); sub_4645F0(v9, 5u, (int)v10); } } ++v4; } while ( v4 < v11 ); } sub_42D750(v2); } } // ACB240: using guessed type float flt_ACB240; // ACB244: using guessed type float flt_ACB244; //----- (0042ECC0) -------------------------------------------------------- void __thiscall sub_42ECC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx unsigned int v3; // eax _DWORD *v4; // ecx _DWORD *v5; // edi int v6; // ebx int v7; // eax int v8; // edi int v9; // ebx int *v10; // eax int v11; // eax const char *v12; // eax _DWORD *v13; // eax _DWORD *v14; // ecx int *v15; // ebx int v16; // eax unsigned int v17; // edi signed int v18; // ebx unsigned __int16 v19; // [esp+10h] [ebp-154h] _DWORD *v20; // [esp+14h] [ebp-150h] int v21; // [esp+18h] [ebp-14Ch] int v22; // [esp+1Ch] [ebp-148h] int v23; // [esp+20h] [ebp-144h] int v24; // [esp+24h] [ebp-140h] int v25; // [esp+28h] [ebp-13Ch] char v26; // [esp+2Ch] [ebp-138h] int v27; // [esp+30h] [ebp-134h] int v28; // [esp+34h] [ebp-130h] int v29; // [esp+38h] [ebp-12Ch] int v30; // [esp+3Ch] [ebp-128h] int v31; // [esp+40h] [ebp-124h] char v32; // [esp+44h] [ebp-120h] void *v33; // [esp+58h] [ebp-10Ch] int v34; // [esp+5Ch] [ebp-108h] int v35; // [esp+60h] [ebp-104h] char v36; // [esp+68h] [ebp-FCh] char v37; // [esp+7Ch] [ebp-E8h] int v38; // [esp+94h] [ebp-D0h] void *v39; // [esp+B8h] [ebp-ACh] int v40; // [esp+C8h] [ebp-9Ch] unsigned int v41; // [esp+CCh] [ebp-98h] char Dst; // [esp+D4h] [ebp-90h] int v43; // [esp+160h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[92]; if ( v2 && v1[107] ) { v3 = sub_464F50(v2); v4 = (_DWORD *)v1[92]; v1[96] = v3; sub_466A50(v4); v5 = (_DWORD *)v1[107]; v20 = (_DWORD *)v1[107]; v6 = 0; v21 = sub_747F90(v20); v22 = 0; if ( v21 > 0 ) { while ( 1 ) { v7 = sub_747FE0(v5, v6); sub_431AE0(&v23, v7); v43 = 0; sub_431760(&Dst, (int)&v23); v8 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[92], &Dst); sub_464B20((_DWORD *)v1[92], v8, v6); sprintf(&Dst, "%i - %i", v27, v28); sub_4661A0((_DWORD *)v1[92], v8, 1, &Dst); sprintf(&Dst, "%i - %i", v29, v30); sub_4661A0((_DWORD *)v1[92], v8, 2, &Dst); sprintf(&Dst, "%i", v38); sub_4661A0((_DWORD *)v1[92], v8, 3, &Dst); v9 = dword_ACB230; v19 = v31; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v31) && v19 <= *(_WORD *)(v9 + 200) && (v10 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v19), *v10) && (v11 = *v10) != 0 ) { v12 = (const char *)(v11 + 34); } else { v12 = sub_4090F0(1028013221); } strcpy_s(&Dst, 0x80u, v12); sub_4661A0((_DWORD *)v1[92], v8, 4, &Dst); v13 = sub_431840(&v39, &v32); LOBYTE(v43) = 1; if ( v13[5] >= 0x10u ) v13 = (_DWORD *)*v13; sub_4661A0((_DWORD *)v1[92], v8, 5, v13); LOBYTE(v43) = 0; if ( v41 >= 0x10 ) operator delete(v39); v14 = (_DWORD *)v1[107]; v41 = 15; v40 = 0; LOBYTE(v39) = 0; v15 = sub_7484A0(v14, (int)&v23); v16 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); if ( v16 >= v15[4] && v16 <= v15[5] ) { if ( *((_BYTE *)v1 + 380) && *((_BYTE *)v1 + 400) == v26 && v1[97] == v23 && v1[98] == v24 && v1[99] == v25 ) sub_464BE0((_DWORD *)v1[92], v8, 255, 255, 0); } else { sub_464BE0((_DWORD *)v1[92], v8, 128, 128, 128); } v43 = 4; nullsub_6(&v37); LOBYTE(v43) = 3; nullsub_6(&v36); if ( v33 ) operator delete(v33); v33 = 0; v34 = 0; v35 = 0; v43 = -1; nullsub_6(&v32); if ( ++v22 >= v21 ) break; v6 = v22; v5 = v20; } } sub_464F90((_DWORD *)v1[92], v1[96]); v17 = 0; v18 = 6; do { sub_464DA0((_DWORD *)v1[92], v17++, 5); --v18; } while ( v18 ); sub_465130((_DWORD *)v1[92]); sub_4638F0((_DWORD *)v1[93], *(_DWORD *)(v1[92] + 336)); sub_42D750(v1); } } // ACB230: using guessed type int dword_ACB230; //----- (0042F0C0) -------------------------------------------------------- void __userpurge sub_42F0C0(int a1@, int a2@, _BYTE *a3) { int v3; // esi v3 = a1; (*(void (**)(void))(**(_DWORD **)(a1 + 428) + 28))(); *(_BYTE *)(v3 + 380) = *a3; (*(void (__stdcall **)(_BYTE **))(**(_DWORD **)(v3 + 428) + 4))(&a3); sub_42ECC0((_DWORD *)v3); sub_42E100((_DWORD *)v3, a2); } //----- (0042F110) -------------------------------------------------------- void __thiscall sub_42F110(void (__stdcall ****this)(char **, void **), char *a2) { char *v2; // ebx int v3; // esi int v4; // ecx int *v5; // eax char *v6; // edi int v7; // esi int v8; // eax int v9; // ecx char *v10; // edi int v11; // edx int v12; // edx signed int v13; // edi char *v14; // esi void (__stdcall ****v15)(char **, void **); // [esp+10h] [ebp-14h] void *v16; // [esp+14h] [ebp-10h] int v17; // [esp+20h] [ebp-4h] v15 = this; v2 = a2; v3 = *(unsigned __int16 *)(*(_DWORD *)a2 + 2); v4 = 152 * v3 | -(152 * (unsigned __int64)*(unsigned __int16 *)(*(_DWORD *)a2 + 2) >> 32 != 0); v5 = (int *)operator new[]((v4 + 4) | -__CFADD__(v4, 4)); v16 = v5; v6 = 0; v17 = 0; if ( v5 ) { v6 = (char *)(v5 + 1); *v5 = v3; `eh vector constructor iterator'(v5 + 1, 0x98u, v3, sub_4319D0, sub_431A50); } v7 = *(_DWORD *)v2; v8 = 0; v9 = 0; a2 = v6; v17 = -1; v16 = 0; if ( *(_WORD *)(v7 + 2) > 0u ) { do { v10 = &a2[v9]; *(_DWORD *)v10 = *(_DWORD *)(v8 + v7 + 4); *((_DWORD *)v10 + 1) = *(_DWORD *)(v8 + v7 + 8); *((_DWORD *)v10 + 2) = *(_DWORD *)(v8 + v7 + 12); v10[12] = *(_BYTE *)(v8 + v7 + 16); *(_WORD *)&a2[v9 + 32] = *(_WORD *)(v8 + *(_DWORD *)v2 + 22); v11 = *(unsigned __int8 *)(*(_DWORD *)v2 + v8 + 18); *(_DWORD *)&a2[v9 + 16] = *(unsigned __int8 *)(*(_DWORD *)v2 + v8 + 17); *(_DWORD *)&a2[v9 + 20] = v11; v12 = *(unsigned __int8 *)(*(_DWORD *)v2 + v8 + 20); *(_DWORD *)&a2[v9 + 24] = *(unsigned __int8 *)(*(_DWORD *)v2 + v8 + 19); *(_DWORD *)&a2[v9 + 28] = v12; v7 = *(_DWORD *)v2; v13 = *(unsigned __int16 *)(*(_DWORD *)v2 + 2); v8 += 20; v9 += 152; v16 = (char *)v16 + 1; } while ( (signed int)v16 < v13 ); } v16 = (void *)*(unsigned __int16 *)(*(_DWORD *)v2 + 2); (**v15[107])(&a2, &v16); if ( a2 ) { v14 = a2 - 4; `eh vector destructor iterator'(a2, 0x98u, *((_DWORD *)a2 - 1), sub_431A50); operator delete[](v14); } } //----- (0042F290) -------------------------------------------------------- char __thiscall sub_42F290(_DWORD *this, void (__thiscall **a2)(volatile LONG *, const CHAR *)) { int v2; // esi int v3; // edi char *v4; // eax int v5; // eax _DWORD *v6; // edi int v7; // eax int v8; // edi int v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax int v12; // edi LONG (__stdcall *v13)(volatile LONG *); // esi void (__stdcall **v14)(signed int); // edx void (__thiscall ***v15)(_DWORD, signed int); // edi char result; // al int v17; // eax volatile LONG *v18; // eax int v19; // edi _DWORD *v20; // eax void (__thiscall **v21)(volatile LONG *, const CHAR *); // ecx int v22; // edi int v23; // eax volatile LONG *v24; // eax volatile LONG *v25; // edi void (__thiscall *v26)(volatile LONG *, signed int); // edx const CHAR *v27; // eax void (__thiscall **v28)(_DWORD, _DWORD); // eax int (__stdcall *v29)(const char *); // eax const CHAR *v30; // eax const CHAR *v31; // eax int *v32; // eax int *v33; // edi _DWORD *v34; // eax _DWORD *v35; // edi _DWORD *v36; // eax _DWORD *v37; // edi _DWORD *v38; // eax _DWORD *v39; // edi _DWORD *v40; // eax _DWORD *v41; // edi _DWORD *v42; // eax _DWORD *v43; // edi _DWORD *v44; // eax _DWORD *v45; // edi volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG **v48; // eax int v49; // eax _DWORD *v50; // eax _DWORD *v51; // eax int v52; // ecx int v53; // edx const CHAR *v54; // eax const CHAR *v55; // eax char *v56; // edx CHAR v57; // cl int v58; // edi int (__thiscall *v59)(volatile LONG *); // eax const CHAR *v60; // eax const CHAR *v61; // eax char *v62; // edi CHAR v63; // cl int v64; // edi int (__thiscall *v65)(volatile LONG *); // eax const CHAR *v66; // eax const CHAR *v67; // eax char *v68; // edi CHAR v69; // cl int v70; // edi int (__thiscall *v71)(volatile LONG *); // eax const CHAR *v72; // eax const CHAR *v73; // eax char *v74; // edi CHAR v75; // cl int v76; // edi int (__thiscall *v77)(volatile LONG *); // eax const CHAR *v78; // eax const CHAR *v79; // eax int v80; // edi CHAR v81; // cl int v82; // edi int (__thiscall *v83)(volatile LONG *); // eax const CHAR *v84; // eax const CHAR *v85; // eax int v86; // edi CHAR v87; // cl int v88; // edi int (__thiscall *v89)(volatile LONG *); // eax const char *v90; // eax const char *v91; // eax const char *v92; // eax const char *v93; // eax const char *v94; // eax const char *v95; // eax const CHAR *v96; // eax const CHAR *v97; // eax const CHAR *v98; // eax const CHAR *v99; // eax const CHAR *v100; // eax const CHAR *v101; // eax volatile LONG **v102; // eax volatile LONG **v103; // edi volatile LONG *v104; // eax int *v105; // eax const char *v106; // eax volatile LONG *v107; // ecx int v108; // eax int v109; // eax volatile LONG *v110; // eax _DWORD *v111; // eax const CHAR *v112; // eax void **v113; // edi const char *v114; // eax volatile LONG **v115; // eax volatile LONG **v116; // edi volatile LONG *v117; // eax int *v118; // eax const char *v119; // eax int v120; // eax int v121; // edx int v122; // eax volatile LONG *v123; // eax _DWORD *v124; // eax const CHAR *v125; // eax void **v126; // edi const char *v127; // eax volatile LONG **v128; // eax volatile LONG **v129; // edi volatile LONG *v130; // eax int *v131; // eax const char *v132; // eax int v133; // eax int v134; // edx int v135; // eax volatile LONG *v136; // eax _DWORD *v137; // eax const CHAR *v138; // eax void **v139; // edi const char *v140; // eax int v141; // [esp+74h] [ebp-8B4h] int v142; // [esp+78h] [ebp-8B0h] int v143; // [esp+7Ch] [ebp-8ACh] int v144; // [esp+80h] [ebp-8A8h] int v145; // [esp+84h] [ebp-8A4h] char v146; // [esp+8Ch] [ebp-89Ch] int v147; // [esp+90h] [ebp-898h] int v148; // [esp+94h] [ebp-894h] int v149; // [esp+98h] [ebp-890h] int v150; // [esp+9Ch] [ebp-88Ch] int v151; // [esp+A0h] [ebp-888h] int v152; // [esp+A4h] [ebp-884h] int v153; // [esp+A8h] [ebp-880h] int v154; // [esp+ACh] [ebp-87Ch] volatile LONG *v155; // [esp+B0h] [ebp-878h] void (__thiscall **v156)(volatile LONG *, const CHAR *); // [esp+B4h] [ebp-874h] int v157; // [esp+B8h] [ebp-870h] int v158; // [esp+BCh] [ebp-86Ch] volatile LONG *v159; // [esp+C0h] [ebp-868h] int v160; // [esp+C4h] [ebp-864h] int v161; // [esp+C8h] [ebp-860h] _DWORD *v162; // [esp+CCh] [ebp-85Ch] int v163; // [esp+D0h] [ebp-858h] int v164; // [esp+D4h] [ebp-854h] int v165; // [esp+D8h] [ebp-850h] volatile LONG *v166; // [esp+DCh] [ebp-84Ch] int v167; // [esp+E0h] [ebp-848h] int v168; // [esp+E4h] [ebp-844h] int v169; // [esp+E8h] [ebp-840h] void *v170; // [esp+ECh] [ebp-83Ch] volatile LONG **v171; // [esp+F0h] [ebp-838h] int v172; // [esp+F4h] [ebp-834h] char v173; // [esp+FBh] [ebp-82Dh] const void *v174[7]; // [esp+FCh] [ebp-82Ch] int v175; // [esp+118h] [ebp-810h] char v176; // [esp+518h] [ebp-410h] int v177; // [esp+924h] [ebp-4h] v2 = (int)this; v156 = a2; this[74] = a2; v172 = 0; v177 = 0; v159 = 0; v3 = dword_BA6BA0; LOBYTE(v177) = 1; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\InstancePartyFinderWindow.nif"); sub_8F66B0(v4, (int)&v172, v3); if ( !v172 ) return 0; v5 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v172 + 72))("Frame"); v6 = (_DWORD *)v5; v154 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); LOBYTE(v177) = 2; v7 = sub_85C050(v6, 8); v8 = v7; v151 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v177) = 3; if ( !v9 || (v10 = *(volatile LONG **)(v9 + 4), (v155 = v10) == 0) ) { v13 = InterlockedDecrement; LOBYTE(v177) = 2; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); LOBYTE(v177) = 1; if ( !v154 || InterlockedDecrement((volatile LONG *)(v154 + 4)) ) goto LABEL_29; v14 = *(void (__stdcall ***)(signed int))v154; goto LABEL_28; } v159 = v10; InterlockedIncrement(v10 + 1); v163 = 0; v164 = 0; v11 = sub_8FB140(v172, (int)"Frame", (int)&v163, (int)&v164, v155); v12 = (int)v11; v171 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); LOBYTE(v177) = 4; if ( !sub_8F1440((volatile LONG **)v2, 0, 0, v12, 0, (int)v156, (int)"InstancePartyFinderWindow", 0) ) { v13 = InterlockedDecrement; LOBYTE(v177) = 3; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); LOBYTE(v177) = 2; if ( !InterlockedDecrement((volatile LONG *)(v151 + 4)) ) (**(void (__thiscall ***)(int, signed int))v151)(v151, 1); LOBYTE(v177) = 1; if ( v154 && !InterlockedDecrement((volatile LONG *)(v154 + 4)) ) (**(void (__thiscall ***)(int, signed int))v154)(v154, 1); LOBYTE(v177) = 0; if ( InterlockedDecrement(v155 + 1) ) goto LABEL_29; v14 = (void (__stdcall **)(signed int))*v155; LABEL_28: (*v14)(1); LABEL_29: v15 = (void (__thiscall ***)(_DWORD, signed int))v172; v177 = -1; if ( v172 && !v13((volatile LONG *)(v172 + 4)) ) { if ( v15 ) (**v15)(v15, 1); } return 0; } if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v171 = 0; } v17 = sub_43D0D0(0x13u); v153 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); LOBYTE(v177) = 5; sub_42D4C0((void *)v2, &v172, (int *)&v171, (volatile LONG **)&v153, &v163, v2, (int)"Theme"); sub_42D4C0((void *)v2, &v172, (int *)&v171, &v159, &v163, v2, (int)"Panel01"); v152 = 0; LOBYTE(v177) = 6; v18 = sub_42D4C0((void *)v2, &v172, (int *)&v171, &v159, &v163, v2, (int)"IconSlot"); sub_56FF80(&v152, (int)v18); v157 = 0; v158 = 0; if ( sub_8F71E0(v172, (int)"WinTitle", &v157, &v158, &v142, &v141) ) { v19 = v158 - v164; v169 = v157 - v163; v20 = sub_4315D0(&v167, &v172, (int)"WinTitle"); v21 = (void (__thiscall **)(volatile LONG *, const CHAR *))(v19 + v20[1]); v22 = v169 + *v20; v156 = v21; v23 = sub_421050(7); v24 = sub_8F4A20(v22, (int)v156, v142, v141, v23, v2, 0, 0); v25 = v24; v166 = v24; if ( v24 ) InterlockedIncrement(v24 + 1); v26 = *(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488); LOBYTE(v177) = 7; v26(v25, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v25 + 468))(v25, &dword_AA8D98); v156 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v25 + 472); v27 = sub_40C190(-481277631); (*v156)(v25, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v156 = (void (__thiscall **)(volatile LONG *, const CHAR *))12; sub_42D580( (void *)v2, &v172, (int *)&v171, &v159, &v163, (int *)&v156, v2, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver"); v28 = (void (__thiscall **)(_DWORD, _DWORD))sub_43D0D0(4u); v156 = (void (__thiscall **)(volatile LONG *, const CHAR *))v28; if ( v28 ) InterlockedIncrement((volatile LONG *)v28 + 1); v29 = *(int (__stdcall **)(const char *))(*(_DWORD *)v172 + 72); LOBYTE(v177) = 8; if ( v29("HelpLinkNor") ) { v161 = 11; sub_42D580( (void *)v2, &v172, (int *)&v171, (volatile LONG **)&v156, &v163, &v161, v2, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver"); } v173 = 0; v161 = 5; v165 = -1; v168 = -1; v30 = sub_4090F0(832338315); v170 = 0; LOBYTE(v177) = 9; sub_42D350( &v172, &v171, (volatile LONG **)&v170, &v166, &v163, (int)v30, v2, (int)"Text02", &v168, &v165, &v161, 9, (unsigned __int8 *)&v173); LOBYTE(v177) = 8; v173 = 0; v170 = (void *)6; v168 = -1; v165 = -1; v31 = sub_4090F0(776608523); v161 = 0; LOBYTE(v177) = 10; sub_42D350( &v172, &v171, (volatile LONG **)&v161, &v166, &v163, (int)v31, v2, (int)"Category", &v165, &v168, &v170, 9, (unsigned __int8 *)&v173); v143 = 0; v144 = 0; v145 = 0; v146 = 0; v147 = 0; v148 = 0; v149 = 0; v150 = 0; LOBYTE(v177) = 11; v32 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 1); v33 = v32; *v32 = 1; v32[1] = v172; sub_4019E0(v174, "ColumnBarNor"); v33 += 18; LOBYTE(v177) = 12; sub_40B060(v33, v174); LOBYTE(v177) = 11; sub_636A10(v174); sub_4019E0(v174, "ColumnBarClick"); LOBYTE(v177) = 13; sub_40B060(v33, v174); LOBYTE(v177) = 11; sub_636A10(v174); sub_4019E0(v174, "ColumnBarOver"); LOBYTE(v177) = 14; sub_40B060(v33, v174); LOBYTE(v177) = 11; sub_636A10(v174); v34 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v35 = v34; *v34 = 2; sub_4019E0(v174, "GF_InstanceData"); LOBYTE(v177) = 15; sub_40B060(v35 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v35[1] = v172; *((_BYTE *)v35 + 88) = 1; v36 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v37 = v36; *v36 = 2; sub_4019E0(v174, "GF_LevelsData"); LOBYTE(v177) = 16; sub_40B060(v37 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v37[1] = v172; *((_BYTE *)v37 + 88) = 1; v38 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v39 = v38; *v38 = 2; sub_4019E0(v174, "GF_PlayersData"); LOBYTE(v177) = 17; sub_40B060(v39 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v39[1] = v172; *((_BYTE *)v39 + 88) = 1; v40 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v41 = v40; *v40 = 2; sub_4019E0(v174, "GF_QueueData"); LOBYTE(v177) = 18; sub_40B060(v41 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v41[1] = v172; *((_BYTE *)v41 + 88) = 1; v42 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v43 = v42; *v42 = 2; sub_4019E0(v174, "GF_KeyItemData"); LOBYTE(v177) = 19; sub_40B060(v43 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v43[1] = v172; *((_BYTE *)v43 + 88) = 1; v44 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v143, 2); v45 = v44; *v44 = 2; sub_4019E0(v174, "GF_ResetinData"); LOBYTE(v177) = 20; sub_40B060(v45 + 18, v174); LOBYTE(v177) = 11; sub_636A10(v174); v45[1] = v172; *((_BYTE *)v45 + 88) = 1; v147 = 5; v148 = 0; sub_466680(&v143, 0); v46 = sub_8FB140(v172, (int)"Text01", (int)&v157, (int)&v158, v155); sub_56FF80(&v171, (int)v46); v47 = sub_466330(v157, v158, (int)v171, *(float *)&v2, (int **)&v143, 0, 0); sub_56FF80((_DWORD *)(v2 + 368), (int)v47); *(_DWORD *)(*(_DWORD *)(v2 + 368) + 352) = 15; *(_DWORD *)(*(_DWORD *)(v2 + 368) + 356) = 16; v48 = sub_8FB140(v172, (int)"SlideBar_SlideBtnMiddle", (int)&v157, (int)&v158, 0); sub_56FF80(&v171, (int)v48); v49 = sub_464310(v172, (int)"SlideBar", "SlideBar_UpBtnNor", "SlideBar_DnBtnNor", (int)v171, 0, (_DWORD *)v2); sub_56FF80((_DWORD *)(v2 + 372), v49); *(_DWORD *)(*(_DWORD *)(v2 + 372) + 312) = 19; *(_DWORD *)(*(_DWORD *)(v2 + 372) + 304) = 1; v170 = (void *)17; v167 = 0; v168 = 0; sub_42D580( (void *)v2, &v172, (int *)&v171, &v159, &v167, (int *)&v170, v2, (int)"SlideBar_UpBtnNor", (int)"SlideBar_UpBtnClick", (int)"SlideBar_UpBtnOver"); v170 = (void *)18; v167 = 0; v168 = 0; sub_42D580( (void *)v2, &v172, (int *)&v171, &v159, &v167, (int *)&v170, v2, (int)"SlideBar_DnBtnNor", (int)"SlideBar_DnBtnClick", (int)"SlideBar_DnBtnOver"); v50 = operator new(0x14u); v170 = v50; LOBYTE(v177) = 21; if ( v50 ) v51 = sub_748DF0(v50); else v51 = 0; v52 = v163; v53 = v164; *(_DWORD *)(v2 + 428) = v51; v168 = -1; v165 = -1; v160 = v52; v161 = v53; LOBYTE(v177) = 11; v173 = 1; v170 = (void *)5; v54 = sub_4090F0(-573692418); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v54, v2, (int)"GF_Instance", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v55 = sub_4090F0(-450091495); v56 = (char *)((char *)&v175 - v55); do { v57 = *v55; v56[(_DWORD)v55] = *v55; ++v55; } while ( v57 ); memset(&v176, 0, 0x400u); v58 = (int)v166; v59 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v59(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v58 + 272) = dword_AD01E8; sub_8F2EA0((void **)v58, &v176); v168 = -1; v165 = -1; v160 = v163; v161 = v164; v173 = 1; v170 = (void *)5; v60 = sub_4090F0(-757935672); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v60, v2, (int)"GF_Levels", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v61 = sub_4090F0(-739387098); v62 = (char *)((char *)&v175 - v61); do { v63 = *v61; v62[(_DWORD)v61] = *v61; ++v61; } while ( v63 ); memset(&v176, 0, 0x400u); v64 = (int)v166; v65 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v65(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v64 + 272) = dword_AD01E8; sub_8F2EA0((void **)v64, &v176); v168 = -1; v165 = -1; v160 = v163; v161 = v164; v173 = 1; v170 = (void *)5; v66 = sub_4090F0(-908535528); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v66, v2, (int)"GF_Players", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v67 = sub_4090F0(-455067879); v68 = (char *)((char *)&v175 - v67); do { v69 = *v67; v68[(_DWORD)v67] = *v67; ++v67; } while ( v69 ); memset(&v176, 0, 0x400u); v70 = (int)v166; v71 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v71(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v70 + 272) = dword_AD01E8; sub_8F2EA0((void **)v70, &v176); v168 = -1; v165 = -1; v160 = v163; v161 = v164; v173 = 1; v170 = (void *)5; v72 = sub_4090F0(-1058219994); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v72, v2, (int)"GF_Queue", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v73 = sub_4090F0(-604752345); v74 = (char *)((char *)&v175 - v73); do { v75 = *v73; v74[(_DWORD)v73] = *v73; ++v73; } while ( v75 ); memset(&v176, 0, 0x400u); v76 = (int)v166; v77 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v77(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v76 + 272) = dword_AD01E8; sub_8F2EA0((void **)v76, &v176); v168 = -1; v165 = -1; v160 = v163; v161 = v164; v173 = 1; v170 = (void *)5; v78 = sub_4090F0(1989580239); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v78, v2, (int)"GF_KeyItem", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v79 = sub_4090F0(-1851853872); v80 = (char *)&v175 - v79; do { v81 = *v79; v79[v80] = *v79; ++v79; } while ( v81 ); memset(&v176, 0, 0x400u); v82 = (int)v166; v83 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v83(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v82 + 272) = dword_AD01E8; sub_8F2EA0((void **)v82, &v176); v168 = -1; v165 = -1; v160 = v163; v161 = v164; v173 = 1; v170 = (void *)5; v84 = sub_4090F0(-790636076); sub_42D350( &v172, &v171, &v159, &v166, &v160, (int)v84, v2, (int)"GF_Resetin", &v165, &v168, &v170, 7, (unsigned __int8 *)&v173); v85 = sub_4090F0(-772087502); v86 = (char *)&v175 - v85; do { v87 = *v85; v85[v86] = *v85; ++v85; } while ( v87 ); memset(&v176, 0, 0x400u); v88 = (int)v166; v89 = *(int (__thiscall **)(volatile LONG *))(*v166 + 456); v170 = (void *)250; v168 = *(_DWORD *)(v89(v166) + 192); sub_431250(&v176, (int)&v175, (int)&v168, (int)&v170); *(_DWORD *)(v88 + 272) = dword_AD01E8; sub_8F2EA0((void **)v88, &v176); v161 = 0; LOBYTE(v177) = 22; sub_42D4C0((void *)v2, &v172, (int *)&v171, (volatile LONG **)&v161, &v163, v2, (int)"Base"); LOBYTE(v177) = 11; sub_410C00(&v161); v162 = 0; LOBYTE(v177) = 23; v170 = (void *)23; v90 = sub_40C190(-587993612); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v90, v2, (int)"FriendNor", (int)"FriendClick", (int)"FriendOver"); v170 = (void *)26; v91 = sub_40C190(-196330948); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v91, v2, (int)"MasterNor", (int)"MasterClick", (int)"MasterOver"); v170 = (void *)24; v92 = sub_40C190(-1679100684); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v92, v2, (int)"GuildNor", (int)"GuildClick", (int)"GuildOver"); v170 = (void *)27; v93 = sub_40C190(624629836); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v93, v2, (int)"GuildAcademyNor", (int)"GuildAcademyClick", (int)"GuildAcademyOver"); v170 = (void *)25; v94 = sub_40C190(-923451580); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v94, v2, (int)"WeddingNor", (int)"WeddingClick", (int)"WeddingOver"); v170 = (void *)10; v95 = sub_40C190(474697790); sub_42D220( (void *)v2, &v172, (int *)&v171, (void ***)&v162, &v163, (int *)&v170, v95, v2, (int)"PartyMatchNor", (int)"PartyMatchClick", (int)"PartyMatchOver"); v96 = sub_40C190(-587993612); sub_42E1C0(&v172, &v171, &v166, (int)v96, v2, (int)"Friend"); v97 = sub_40C190(-196330948); sub_42E1C0(&v172, &v171, &v166, (int)v97, v2, (int)"HolyPromise"); v98 = sub_40C190(-1679100684); sub_42E1C0(&v172, &v171, &v166, (int)v98, v2, (int)"Guild"); v99 = sub_40C190(-2036079644); sub_42E1C0(&v172, &v171, &v166, (int)v99, v2, (int)"GuildAcademy"); v100 = sub_40C190(-923451580); sub_42E1C0(&v172, &v171, &v166, (int)v100, v2, (int)"Wedding"); v101 = sub_40C190(474697790); sub_42E1C0(&v172, &v171, &v166, (int)v101, v2, (int)"PartyMatch"); v102 = sub_8FB140(v172, (int)"Btn01Nor", (int)&v157, (int)&v158, v155); sub_56FF80(&v171, (int)v102); v103 = v171; sub_8FB650(v171, v172, (int)"Btn01Click"); sub_8FB650(v103, v172, (int)"Btn01Over"); sub_8FB650(v103, v172, (int)"Btn01Disable"); v165 = v158 - v164; v160 = v157 - v163; v104 = sub_8FE0F0(v157 - v163, v158 - v164, (int)v103, v2, 20, 0, 0); v105 = sub_56FF80(&v162, (int)v104); sub_65AD50((int *)(v2 + 356), v105); v162[68] = dword_AD01E8; v170 = v162; v106 = sub_4090F0(308232808); sub_8F2EA0((void **)v170, v106); v107 = v103[9]; v108 = *(_DWORD *)(*v107 + 20); v170 = *(void **)(*v107 + 24); v168 = v108; v109 = sub_421050(7); v110 = sub_8F4A20(v160, v165 + 1, v168, (int)v170, v109, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 344), (int)v110); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 344) + 488))(5); v111 = *(_DWORD **)(v2 + 344); v170 = v111; v168 = *v111 + 472; v112 = sub_4090F0(-1152435445); (*(void (__thiscall **)(void *, const CHAR *))v168)(v170, v112); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); *(_DWORD *)(*(_DWORD *)(v2 + 344) + 272) = dword_AD01E8; v113 = *(void ***)(v2 + 344); v114 = sub_4090F0(-1152435445); sub_8F2EA0(v113, v114); v115 = sub_8FB140(v172, (int)"Btn02Nor", (int)&v157, (int)&v158, v155); sub_56FF80(&v171, (int)v115); v116 = v171; sub_8FB650(v171, v172, (int)"Btn02Click"); sub_8FB650(v116, v172, (int)"Btn02Over"); sub_8FB650(v116, v172, (int)"Btn02Disable"); v165 = v158 - v164; v160 = v157 - v163; v117 = sub_8FE0F0(v157 - v163, v158 - v164, (int)v116, v2, 21, 0, 0); v118 = sub_56FF80(&v162, (int)v117); sub_65AD50((int *)(v2 + 360), v118); v162[68] = dword_AD01E8; v170 = v162; v119 = sub_4090F0(948071066); sub_8F2EA0((void **)v170, v119); v120 = *v116[9]; v121 = *(_DWORD *)(v120 + 20); v170 = *(void **)(v120 + 24); v168 = v121; v122 = sub_421050(7); v123 = sub_8F4A20(v160, v165 + 1, v168, (int)v170, v122, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 348), (int)v123); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 348) + 488))(5); v124 = *(_DWORD **)(v2 + 348); v170 = v124; v168 = *v124 + 472; v125 = sub_4090F0(824513418); (*(void (__thiscall **)(void *, const CHAR *))v168)(v170, v125); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; v126 = *(void ***)(v2 + 348); v127 = sub_4090F0(824513418); sub_8F2EA0(v126, v127); v128 = sub_8FB140(v172, (int)"Btn03Nor", (int)&v157, (int)&v158, v155); sub_56FF80(&v171, (int)v128); v129 = v171; sub_8FB650(v171, v172, (int)"Btn03Click"); sub_8FB650(v129, v172, (int)"Btn03Over"); sub_8FB650(v129, v172, (int)"Btn03Disable"); v165 = v158 - v164; v160 = v157 - v163; v130 = sub_8FE0F0(v157 - v163, v158 - v164, (int)v129, v2, 22, 0, 0); v131 = sub_56FF80(&v162, (int)v130); sub_65AD50((int *)(v2 + 364), v131); v162[68] = dword_AD01E8; v170 = v162; v132 = sub_4090F0(-1853778312); sub_8F2EA0((void **)v170, v132); v133 = *v129[9]; v134 = *(_DWORD *)(v133 + 20); v170 = *(void **)(v133 + 24); v168 = v134; v135 = sub_421050(7); v136 = sub_8F4A20(v160, v165 + 1, v168, (int)v170, v135, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 352), (int)v136); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 352) + 488))(5); v137 = *(_DWORD **)(v2 + 352); v170 = v137; v168 = *v137 + 472; v138 = sub_4090F0(875202161); (*(void (__thiscall **)(void *, const CHAR *))v168)(v170, v138); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); *(_DWORD *)(*(_DWORD *)(v2 + 352) + 272) = dword_AD01E8; v139 = *(void ***)(v2 + 352); v140 = sub_4090F0(875202161); sub_8F2EA0(v139, v140); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); sub_4B80B0(*(_DWORD **)(v2 + 296)); LOBYTE(v177) = 11; sub_410C00(&v162); LOBYTE(v177) = 8; sub_40AE10((void **)&v143); LOBYTE(v177) = 7; sub_410C00(&v156); LOBYTE(v177) = 6; sub_410C00(&v166); LOBYTE(v177) = 5; sub_410C00(&v152); LOBYTE(v177) = 4; sub_410C00(&v153); LOBYTE(v177) = 3; sub_410C00(&v171); LOBYTE(v177) = 2; sub_410C00(&v151); LOBYTE(v177) = 1; sub_410C00(&v154); LOBYTE(v177) = 0; sub_410C00(&v159); v177 = -1; sub_410C00(&v172); result = 1; } else { LOBYTE(v177) = 5; sub_410C00(&v152); LOBYTE(v177) = 4; sub_410C00(&v153); LOBYTE(v177) = 3; sub_410C00(&v171); LOBYTE(v177) = 2; sub_410C00(&v151); LOBYTE(v177) = 1; sub_410C00(&v154); LOBYTE(v177) = 0; sub_410C00(&v159); v177 = -1; sub_410C00(&v172); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00430F00) -------------------------------------------------------- volatile LONG *__cdecl sub_430F00(void (__thiscall **a1)(volatile LONG *, const CHAR *)) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1E4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_42CB60(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( sub_42F290(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } result = 0; } return result; } //----- (00431030) -------------------------------------------------------- int sub_431030(char *DstBuf, char *Format, ...) { va_list va; // [esp+10h] [ebp+10h] va_start(va, Format); return vsprintf_s(DstBuf, 0x100u, Format, va); } //----- (00431050) -------------------------------------------------------- int sub_431050(char *DstBuf, char *Format, ...) { va_list va; // [esp+10h] [ebp+10h] va_start(va, Format); return vsprintf_s(DstBuf, 0x10u, Format, va); } //----- (00431070) -------------------------------------------------------- void __thiscall sub_431070(void *this) { *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; } //----- (00431080) -------------------------------------------------------- BOOL __thiscall sub_431080(_DWORD *this, _DWORD *a2) { return *this == *a2 && this[1] == a2[1] && this[2] == a2[2]; } //----- (004310B0) -------------------------------------------------------- BOOL __thiscall sub_4310B0(_BYTE *this, int a2) { return this[12] == *(_BYTE *)(a2 + 12) && *(_DWORD *)this == *(_DWORD *)a2 && *((_DWORD *)this + 1) == *(_DWORD *)(a2 + 4) && *((_DWORD *)this + 2) == *(_DWORD *)(a2 + 8); } //----- (004310F0) -------------------------------------------------------- __int64 __thiscall sub_4310F0(_BYTE *this, int a2) { return this[12] != *(_BYTE *)(a2 + 12) || *(_DWORD *)this != *(_DWORD *)a2 || *((_DWORD *)this + 1) != *(_DWORD *)(a2 + 4) || *((_DWORD *)this + 2) != *(_DWORD *)(a2 + 8); } //----- (00431140) -------------------------------------------------------- int __thiscall sub_431140(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi int result; // eax v4 = this; if ( this[1] ) (*(void (__stdcall **)(int, int, _DWORD **))(*this[1] + 4))(a2, a3, this); if ( a4 ) { result = a4 - 1; if ( a4 == 1 ) { if ( v4[1] ) (*(void (__stdcall **)(int, int, _DWORD **))(*v4[1] + 20))(a2, a3, v4); result = ((int (__thiscall *)(_DWORD **, int, int, _DWORD **))(*v4)[5])(v4, a2, a3, v4); } } else { if ( v4[1] ) (*(void (__stdcall **)(int, int, _DWORD **))(*v4[1] + 16))(a2, a3, v4); result = ((int (__thiscall *)(_DWORD **, int, int, _DWORD **))(*v4)[4])(v4, a2, a3, v4); } return result; } //----- (004311C0) -------------------------------------------------------- int *__thiscall sub_4311C0(_DWORD *this, int *a2) { _DWORD *v2; // esi __time32_t v3; // ecx int v4; // ecx int *result; // eax __time32_t Time; // [esp+4h] [ebp-4h] v2 = this; _time32(&Time); v3 = v2[1]; if ( Time < v3 && (v4 = v3 - Time, v4 > 0) ) { *a2 = v4 % 60; a2[1] = v4 / 60 % 60; a2[2] = v4 / 3600; result = a2; } else { result = a2; *a2 = 0; a2[1] = 0; a2[2] = 0; } return result; } //----- (00431250) -------------------------------------------------------- const char *__stdcall sub_431250(void *a1, int a2, int a3, int a4) { const char *v4; // ebx const char *v5; // esi int v6; // edi int v7; // ebx int v8; // esi int v9; // esi unsigned int v10; // kr04_4 unsigned int v11; // eax char *v12; // edi char *v13; // edi CHAR *v14; // esi int v15; // ecx const CHAR *v16; // eax bool v17; // zf int v19; // eax CHAR *v20; // edi char *v21; // ebx BYTE v22; // dl CHAR v23; // dl int v24; // ebx int v25; // edi int v26; // edi int v27; // edx struct tagSIZE psizl; // [esp+8h] [ebp-12Ch] struct tagSIZE v29; // [esp+10h] [ebp-124h] LONG v30; // [esp+18h] [ebp-11Ch] HDC *v31; // [esp+1Ch] [ebp-118h] const char *v32; // [esp+20h] [ebp-114h] int v33; // [esp+24h] [ebp-110h] int v34; // [esp+28h] [ebp-10Ch] LPCSTR lpString; // [esp+2Ch] [ebp-108h] CHAR String; // [esp+30h] [ebp-104h] char v37[255]; // [esp+31h] [ebp-103h] v4 = (const char *)a2; v5 = (const char *)a1; v31 = (HDC *)a3; v32 = (const char *)a1; lpString = (LPCSTR)a2; memset(a1, 0, strlen((const char *)a1)); if ( *(_BYTE *)a2 ) { while ( 1 ) { v6 = 0; v30 = *(_DWORD *)a4; v34 = 0; v7 = strlen(v4); v8 = 0; v33 = v7; if ( v7 > 0 ) { do { if ( !isspace(lpString[v8]) ) break; ++v8; ++v6; } while ( v8 < v7 ); v34 = v6; } v9 = v6; GetTextExtentPoint32A(*v31, lpString, v7, &psizl); if ( psizl.cx <= v30 ) { memcpy(&String, &lpString[v6], v7 - v6); *(&String + v7 - v6) = 0; goto LABEL_12; } v29.cx = 0; v29.cy = 0; if ( v6 >= v7 ) goto LABEL_11; while ( 2 ) { v19 = v9 - v6; v20 = &String + v9 - v6; v21 = &v37[v19]; while ( v29.cx < v30 ) { if ( v9 == v33 ) { v27 = v34; *(&String + v9 - v34) = 0; v7 = strlen(&String) + v27; goto LABEL_12; } v22 = lpString[v9]; *v20 = v22; if ( IsDBCSLeadByte(v22) ) { v23 = lpString[v9++ + 1]; ++v21; ++v20; *(&String + v9) = v23; } v17 = *v20 == 10; *v21 = 0; if ( v17 ) *v20 = 32; ++v9; ++v21; ++v20; GetTextExtentPoint32A(*v31, &String, strlen(&String), &v29); } v24 = v34; v25 = v9 - v34; if ( isspace(*(&String + v9 - v34)) ) { *(&String + v9 - v24) = 0; v7 = strlen(&String) + v24; } else { v26 = v25 - 1; if ( v26 <= 0 ) { LABEL_28: if ( v9 < v33 ) { v6 = v34; continue; } LABEL_11: v7 = -1; break; } while ( !isspace(*(&String + v26)) ) { if ( --v26 <= 0 ) goto LABEL_28; } *(&String + v26) = 0; v7 = strlen(&String) + v24; } break; } LABEL_12: v10 = strlen(&String); v37[v10] = 0; *(&String + v10) = 10; v11 = strlen(&String) + 1; v12 = (char *)&v32[strlen(v32)]; qmemcpy(v12, &String, 4 * (v11 >> 2)); v14 = &String + 4 * (v11 >> 2); v13 = &v12[4 * (v11 >> 2)]; v15 = v11 & 3; v16 = &lpString[v7]; qmemcpy(v13, v14, v15); v17 = *v16 == 0; lpString = v16; if ( v17 ) { v5 = v32; break; } v4 = lpString; } } v5[strlen(v5) - 1] = 0; return v5; } // 431250: using guessed type char var_103[255]; //----- (004315A0) -------------------------------------------------------- BOOL __thiscall sub_4315A0(_DWORD *this) { int v1; // eax _BYTE *v2; // eax BOOL result; // eax v1 = this[94]; result = 0; if ( v1 ) { v2 = *(_BYTE **)(v1 + 740); if ( v2 ) { if ( sub_58F2C0(v2) ) result = 1; } } return result; } //----- (004315D0) -------------------------------------------------------- _DWORD *__stdcall sub_4315D0(_DWORD *a1, int *a2, int a3) { int v3; // ecx _DWORD *v4; // eax int v5; // esi int v6; // ST18_4 double v7; // st7 int v9; // [esp+14h] [ebp-4h] v3 = *a2; v9 = 0; v4 = (_DWORD *)(*(int (__stdcall **)(int))(*(_DWORD *)v3 + 72))(a3); sub_8F5CC0(v4, &v9); v5 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v6 = *(_DWORD *)(v5 + 96); v7 = *(float *)(v5 + 92); *a1 = (signed int)*(float *)(v5 + 88); a1[1] = (signed int)v7; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return a1; } //----- (00431660) -------------------------------------------------------- int sub_431660() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB234 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB234: using guessed type int dword_ACB234; //----- (00431680) -------------------------------------------------------- char *__thiscall sub_431680(char *this) { char *v1; // esi v1 = this; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; strncpy(this, "Invalid", 0xCu); v1[12] = 32; return v1; } //----- (004316B0) -------------------------------------------------------- int __cdecl sub_4316B0(_DWORD *a1) { unsigned int v1; // edi int v2; // eax v1 = 0; if ( !sub_431660() ) return 0; while ( 1 ) { v2 = sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1); if ( *(_DWORD *)(v2 + 2) == *a1 && *(_DWORD *)(v2 + 6) == a1[1] && *(_DWORD *)(v2 + 10) == a1[2] ) break; if ( ++v1 >= sub_431660() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1); } // ACB234: using guessed type int dword_ACB234; //----- (00431710) -------------------------------------------------------- char __thiscall sub_431710(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v4; // eax v2 = this; *this = 0; this[1] = 0; this[2] = 0; if ( !a2 ) return 0; if ( (unsigned int)a2 > 0x1FFFFFFF ) std::_Xlength_error("vector too long"); v4 = (char *)sub_4E6630(a2); *v2 = v4; v2[1] = v4; v2[2] = &v4[8 * (_DWORD)a2]; return 1; } //----- (00431760) -------------------------------------------------------- int __stdcall sub_431760(char *Dst, int a2) { int result; // eax const char *v3; // eax const char *v4; // esi result = sub_4316B0((_DWORD *)a2); if ( result ) { strcpy_s(Dst, 0x80u, (const char *)(result + 14)); result = *(unsigned __int8 *)(a2 + 12) - 2; if ( *(_BYTE *)(a2 + 12) == 2 ) { *(_WORD *)&Dst[strlen(Dst)] = 32; v3 = sub_4090F0(1076295557); v4 = v3; result = strlen(v3) + 1; qmemcpy(&Dst[strlen(Dst)], v4, result); } } return result; } //----- (004317E0) -------------------------------------------------------- void *__thiscall sub_4317E0(void *this, char a2) { void *v2; // esi v2 = this; sub_42CC70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00431810) -------------------------------------------------------- _DWORD *__cdecl sub_431810(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 2 ) { if ( result ) { *result = *v3; result[1] = v3[1]; } v3 += 2; } return result; } //----- (00431840) -------------------------------------------------------- _DWORD *__stdcall sub_431840(_DWORD *a1, _DWORD *a2) { __time32_t v2; // eax int v3; // ST08_4 int v4; // ST08_4 char v6; // [esp+8h] [ebp-24h] __time32_t Time; // [esp+14h] [ebp-18h] char DstBuf; // [esp+18h] [ebp-14h] Time = 0; _time32(&Time); v2 = a2[1]; if ( Time < v2 && v2 - Time >= 60 ) { v4 = sub_4311C0(a2, (int *)&v6)[1]; sub_431050(&DstBuf, "%i min", v4); } else { v3 = *sub_4311C0(a2, (int *)&v6); sub_431050(&DstBuf, "%i s", v3); } a1[5] = 15; a1[4] = 0; *(_BYTE *)a1 = 0; sub_4018E0(a1, &DstBuf, strlen(&DstBuf)); return a1; } //----- (00431900) -------------------------------------------------------- _DWORD *__thiscall sub_431900(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // edi unsigned int v4; // edi _DWORD *v5; // eax _DWORD *v6; // ST04_4 _DWORD *v7; // ST00_4 int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; v10 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = a2[1] - *a2; *this = 0; v4 = v3 >> 3; this[1] = 0; this[2] = 0; if ( v4 ) { if ( v4 > 0x1FFFFFFF ) std::_Xlength_error("vector too long"); v5 = sub_4E6630((char *)v4); *v2 = v5; v2[1] = v5; v2[2] = &v5[2 * v4]; v6 = (_DWORD *)a2[1]; v7 = (_DWORD *)*a2; v12 = 0; v2[1] = sub_431810(v7, v6, v5); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004319D0) -------------------------------------------------------- void __thiscall sub_4319D0(void *this) { _DWORD *v1; // esi v1 = this; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 6) = 0; *((_DWORD *)this + 7) = 0; sub_749180((_DWORD *)this + 9); v1[14] = 0; v1[15] = 0; v1[16] = 0; sub_749180(v1 + 18); sub_749180(v1 + 23); } //----- (00431A50) -------------------------------------------------------- void __thiscall sub_431A50(void *this) { void **v1; // esi v1 = (void **)this; nullsub_6((char *)this + 92); nullsub_6(v1 + 18); if ( v1[14] ) operator delete(v1[14]); v1[14] = 0; v1[15] = 0; v1[16] = 0; nullsub_6(v1 + 9); } //----- (00431AE0) -------------------------------------------------------- _DWORD *__thiscall sub_431AE0(_DWORD *this, int a2) { _DWORD *v2; // ebx v2 = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); *((_BYTE *)this + 12) = *(_BYTE *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); this[6] = *(_DWORD *)(a2 + 24); this[7] = *(_DWORD *)(a2 + 28); *((_WORD *)this + 16) = *(_WORD *)(a2 + 32); this[9] = *(_DWORD *)(a2 + 36); this[10] = *(_DWORD *)(a2 + 40); this[11] = *(_DWORD *)(a2 + 44); this[12] = *(_DWORD *)(a2 + 48); this[13] = *(_DWORD *)(a2 + 52); sub_431900(this + 14, (_DWORD *)(a2 + 56)); v2[18] = *(_DWORD *)(a2 + 72); v2[19] = *(_DWORD *)(a2 + 76); v2[20] = *(_DWORD *)(a2 + 80); v2[21] = *(_DWORD *)(a2 + 84); v2[22] = *(_DWORD *)(a2 + 88); v2[23] = *(_DWORD *)(a2 + 92); v2[24] = *(_DWORD *)(a2 + 96); v2[25] = *(_DWORD *)(a2 + 100); v2[26] = *(_DWORD *)(a2 + 104); v2[27] = *(_DWORD *)(a2 + 108); *((_BYTE *)v2 + 112) = *(_BYTE *)(a2 + 112); v2[29] = *(_DWORD *)(a2 + 116); qmemcpy(v2 + 30, (const void *)(a2 + 120), 0x20u); return v2; } //----- (00431BE0) -------------------------------------------------------- void *__thiscall sub_431BE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemMixDataTab::`vftable'; sub_749F80((void **)this + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AC8BC: using guessed type void *ItemMixDataTab::`vftable'; //----- (00431C10) -------------------------------------------------------- void **__thiscall sub_431C10(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &MixItemIcon::`vftable'; v1[58] = &MixItemIcon::`vftable'; v1[116] = (void *)-1; v1[117] = (void *)-1; v1[118] = 0; v1[114] = (void *)-1; v1[115] = (void *)-1; sub_5D5B70(v1, 0, 1); v1[113] = 0; *((_BYTE *)v1 + 448) = 0; return v1; } // 9AC8C4: using guessed type void *MixItemIcon::`vftable'; // 9AC8E4: using guessed type void *MixItemIcon::`vftable'; //----- (00431CC0) -------------------------------------------------------- int __thiscall sub_431CC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_5D5A10(this, 175.0, 175.0, 175.0, 100.0); return sub_5D5AB0(v1, 175.0, 175.0, 175.0, 100.0); } //----- (00431D10) -------------------------------------------------------- int __thiscall sub_431D10(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_5D5A10(this, 0.0, 0.0, 0.0, 0.0); return sub_5D5AB0(v1, 0.0, 0.0, 0.0, 0.0); } //----- (00431DB0) -------------------------------------------------------- char __thiscall sub_431DB0(void **this, int a2, int a3, void *a4, _DWORD *a5, void *a6) { void **v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; sub_5D6780(v6); sub_5D5A10(v6, 0.0, 0.0, 0.0, 0.0); sub_5D5AB0(v6, 0.0, 0.0, 0.0, 0.0); sub_5D5420(v6, 0); result = 1; } return result; } //----- (00431E50) -------------------------------------------------------- char __thiscall sub_431E50(_DWORD *this, char a2) { int v2; // eax unsigned int v4; // ecx int v5; // ecx v2 = this[118]; if ( !v2 ) return 0; v4 = this[115]; if ( v4 >= 0xC0 ) return 0; v5 = *(_DWORD *)(v2 + 4 * v4 + 348); if ( !v5 ) return 0; sub_536E90(v5, a2); return 1; } //----- (00431E90) -------------------------------------------------------- int __thiscall sub_431E90(_BYTE *this) { _BYTE *v1; // esi void (__stdcall *v2)(signed int); // edx int v3; // eax unsigned int v4; // ecx int v5; // eax v1 = this; v2 = *(void (__stdcall **)(signed int))(*(_DWORD *)this + 240); this[448] = 0; v2(1); v3 = *((_DWORD *)v1 + 118); if ( v3 ) { v4 = *((_DWORD *)v1 + 115); if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v3 + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } } *((_DWORD *)v1 + 114) = -1; *((_DWORD *)v1 + 115) = -1; *((_DWORD *)v1 + 118) = 0; sub_5D5B70(v1, 0, 1); sub_5D5A10(v1, 0.0, 0.0, 0.0, 0.0); return sub_5D5AB0(v1, 0.0, 0.0, 0.0, 0.0); } //----- (00431F30) -------------------------------------------------------- int __thiscall sub_431F30(_WORD *this, unsigned __int16 a2) { _WORD *v2; // esi _DWORD *v3; // eax int v4; // edi int v5; // ebx int v6; // ST04_4 int v7; // eax int (__thiscall *v8)(_WORD *, signed int); // eax v2 = this; if ( a2 == -1 ) return sub_431E90(v2); v3 = sub_6899D0(a2); if ( !v3 ) return sub_431E90(v2); v4 = v3[29]; sub_5D5B70(v2, (int)v3, 1); v5 = *(_DWORD *)v2; v6 = *(_DWORD *)(v4 + 34); v7 = sub_42BF30(v4 + 38); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(v5 + 584))(v2, v7, v6, 32, 32); sub_431CC0(v2); v8 = *(int (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v2 + 240); v2[14] &= 0xFFFEu; *((_BYTE *)v2 + 448) = 0; return v8(v2, 1); } //----- (00431FC0) -------------------------------------------------------- void __thiscall sub_431FC0(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // edi int v6; // eax int *v7; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 448) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[118]; if ( v2 ) { v3 = v1[115]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { v5 = sub_5D5470(v4); if ( v5 ) { v6 = sub_5D5470(v1); if ( v6 ) { if ( *(_WORD *)(v5 + 8) == *(_WORD *)(v6 + 8) ) { v7 = (int *)v1[68]; if ( v7 ) { sub_547C20(v7, v6); sub_8F2F90((int)v1); } } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (00432060) -------------------------------------------------------- void __thiscall sub_432060(_DWORD *this, float a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // eax int *v5; // ecx int v6; // eax int v7; // eax _DWORD *v8; // eax int *v9; // ecx int v10; // eax signed __int16 v11; // ax _DWORD *v12; // eax int *v13; // ecx int v14; // eax signed __int16 v15; // ax _DWORD *v16; // eax int *v17; // ecx int *v18; // ebx int v19; // edi char v20; // al _BYTE *v21; // ecx v2 = this; v3 = (_DWORD *)this[110]; if ( v3[115] == -1 || !v3 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*v3 + 332))(pt.x, pt.y) ) { v4 = sub_6899D0(*((_WORD *)v2 + 244)); v5 = *(int **)(v2[110] + 272); if ( v5 ) { if ( v4 ) sub_547C20(v5, (int)v4); } } } v6 = v2[108]; if ( *(_DWORD *)(v6 + 460) != -1 && v6 || (v7 = v2[109], *(_DWORD *)(v7 + 460) != -1) && v7 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[111] + 332))(pt.x, pt.y) ) { if ( v2[123] != -1 ) { v8 = sub_6899D0(*((_WORD *)v2 + 246)); v9 = *(int **)(v2[111] + 272); if ( v9 ) { if ( v8 ) sub_547C20(v9, (int)v8); } } } if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[108] + 332))(pt.x, pt.y) ) { v10 = v2[108]; if ( *(_DWORD *)(v10 + 460) == -1 || !v10 ) { v11 = sub_5D5600((_DWORD *)v2[109]); v12 = sub_6899D0(v11); v13 = *(int **)(v2[108] + 272); if ( v13 ) { if ( v12 ) sub_547C20(v13, (int)v12); } } } if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[109] + 332))(pt.x, pt.y) ) { v14 = v2[109]; if ( *(_DWORD *)(v14 + 460) == -1 || !v14 ) { v15 = sub_5D5600((_DWORD *)v2[108]); v16 = sub_6899D0(v15); v17 = *(int **)(v2[109] + 272); if ( v17 ) { if ( v16 ) sub_547C20(v17, (int)v16); } } } } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[116] + 244))() ) { v18 = (int *)v2[117]; v19 = *v18; v20 = (*(int (**)(void))(*(_DWORD *)v2[116] + 244))(); (*(void (__thiscall **)(int *, bool))(v19 + 240))(v18, v20 == 0); } v21 = (_BYTE *)v2[118]; if ( v21[64] ) sub_6B0C00(v21, a2); else sub_6B0BB0(v21, (volatile LONG *)v2[119]); } //----- (00432280) -------------------------------------------------------- int __thiscall sub_432280(int this) { return sub_431F30(*(_WORD **)(this + 440), *(_WORD *)(this + 488)); } //----- (004322A0) -------------------------------------------------------- int __thiscall sub_4322A0(_DWORD **this, char a2) { _DWORD **v2; // esi int *v3; // ebx int v4; // edi char v5; // al v2 = this; (*(void (__stdcall **)(bool))(*this[116] + 240))(a2 == 0); v3 = v2[117]; v4 = *v3; v5 = (*(int (**)(void))(*v2[116] + 244))(); return (*(int (__thiscall **)(int *, bool))(v4 + 240))(v3, v5 == 0); } //----- (00432330) -------------------------------------------------------- char __thiscall sub_432330(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi char result; // al _BYTE *v6; // ecx void (__stdcall *v7)(_DWORD); // edx _BYTE *v8; // ecx void (__stdcall *v9)(_DWORD); // edx _BYTE *v10; // ecx void (__stdcall *v11)(_DWORD); // edx _BYTE *v12; // ecx void (__stdcall *v13)(_DWORD); // edx v4 = this; if ( a2 == 27 ) { result = (char)a3; if ( a3 ) { if ( !*a3 ) { v6 = (_BYTE *)this[50]; v7 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 240); v6[448] = 1; v7(0); v8 = (_BYTE *)v4[51]; v9 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 240); v8[448] = 1; v9(0); v10 = (_BYTE *)v4[52]; v11 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v10 + 240); v10[448] = 1; v11(0); v12 = (_BYTE *)v4[53]; v13 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 240); v12[448] = 1; v13(0); result = sub_4C0B40((_DWORD *)v4[16], v4[54], v4[55], v4[56]); v4[62] = 0; } } } return result; } //----- (004323F0) -------------------------------------------------------- char __thiscall sub_4323F0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (00432420) -------------------------------------------------------- char __thiscall sub_432420(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (00432450) -------------------------------------------------------- int __thiscall sub_432450(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // ST0C_4 char *v4; // eax char *v5; // eax volatile LONG *v6; // eax v1 = this; if ( sub_5D5470(this[108]) ) v1[112] = (_DWORD *)*((unsigned __int8 *)v1[108] + 460); if ( sub_5D5470(v1[109]) ) v1[113] = (_DWORD *)*((unsigned __int8 *)v1[109] + 460); if ( sub_5D5470(v1[110]) ) v1[114] = (_DWORD *)*((unsigned __int8 *)v1[110] + 460); result = sub_5D5470(v1[111]); if ( result ) { v3 = *(_DWORD *)(result + 112) + 34; v4 = (char *)sub_4090F0(1821090774); v5 = sub_7549E0(v4, v3); v6 = sub_462C30(2, v5); v1[120] = v6; result = (**((int (__stdcall ***)(int))v6 + 58))((int)(v1 + 58)); } return result; } //----- (00432510) -------------------------------------------------------- LONG __thiscall sub_432510(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi int v5; // edi v1 = this; *this = &ItemMixWin::`vftable'; this[58] = &ItemMixWin::`vftable'; v2 = (int *)this[118]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[118] = 0; } v4 = v1[119]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[117]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[90] = &DropContents::`vftable'; v1[86] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9ACB68: using guessed type void *ItemMixWin::`vftable'; // 9ACB84: using guessed type void *ItemMixWin::`vftable'; //----- (00432640) -------------------------------------------------------- volatile LONG *__cdecl sub_432640(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1DCu); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_431C10((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (00432780) -------------------------------------------------------- _DWORD *__thiscall sub_432780(_DWORD *this) { _DWORD *v1; // esi int v2; // edi unsigned __int16 v3; // ax void *v5; // [esp-1Ch] [ebp-40h] int v6; // [esp-18h] [ebp-3Ch] int v7; // [esp-14h] [ebp-38h] int v8; // [esp-10h] [ebp-34h] int v9; // [esp-Ch] [ebp-30h] int v10; // [esp-8h] [ebp-2Ch] int v11; // [esp-4h] [ebp-28h] void **v12; // [esp+10h] [ebp-14h] _DWORD *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v1 = this; v13 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ItemMixWin::`vftable'; v1[58] = &ItemMixWin::`vftable'; v14 = 0; v1[86] = &PgWinDrop::`vftable'; v1[87] = 0; v1[88] = 0; v2 = (int)(v1 + 90); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v12 = &v5; v1[120] = 0; v10 = 15; v9 = 0; LOBYTE(v14) = 4; LOBYTE(v5) = 0; sub_4018E0(&v5, "MixMinUpgrade", 0xDu); v1[121] = (unsigned __int16)sub_747F30(&unk_ACDC6C, v5, v6, v7, v8, v9, v10, v11); v12 = &v5; v10 = 15; v9 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, "AddMixItem", 0xAu); v3 = sub_747F30(&unk_ACDC6C, v5, v6, v7, v8, v9, v10, v11); v1[123] = -1; v1[87] = v1 + 90; v1[122] = v3; v1[112] = 255; v1[113] = 255; v1[114] = 255; v1[115] = 255; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9ACB68: using guessed type void *ItemMixWin::`vftable'; // 9ACB84: using guessed type void *ItemMixWin::`vftable'; //----- (004328D0) -------------------------------------------------------- volatile LONG *__cdecl sub_4328D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1F0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_432780(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00432A00) -------------------------------------------------------- unsigned __int16 *__thiscall sub_432A00(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // eax void *v4; // eax _DWORD *v5; // eax unsigned __int16 *result; // eax unsigned __int16 *v7; // esi _BYTE *v8; // ecx v2 = this; if ( a2 ) { v3 = *(_DWORD *)(a2 + 112); if ( v3 ) v4 = (void *)(v3 + 2); else v4 = 0; v5 = sub_433C30(&dword_ACB248, v4); result = (unsigned __int16 *)sub_40C8D0(v5); v7 = result; if ( result ) result = (unsigned __int16 *)sub_431F30((_WORD *)v2[111], *result); v2[123] = *v7; } else { v8 = (_BYTE *)this[111]; v2[123] = -1; result = (unsigned __int16 *)sub_431E90(v8); v2[115] = 255; } return result; } // ACB248: using guessed type int dword_ACB248; //----- (00432A80) -------------------------------------------------------- char __thiscall sub_432A80(_DWORD *this, int a2, int a3) { int v3; // eax _DWORD *v4; // edi int v6; // ebx int v7; // esi _DWORD *v8; // eax _DWORD *v9; // edi int v10; // ST04_4 char *v11; // eax char *v12; // eax int v13; // eax void *v14; // eax int v15; // eax _DWORD *v16; // edi int v17; // ST04_4 char *v18; // eax char *v19; // eax _DWORD *v20; // ecx int v21; // eax int v22; // eax int v23; // eax int v24; // eax _DWORD *v25; // edi const CHAR *v26; // eax int v27; // [esp-Ch] [ebp-18h] int v28; // [esp+4h] [ebp-8h] int v29; // [esp+8h] [ebp-4h] int v30; // [esp+14h] [ebp+8h] v3 = *(_DWORD *)(a3 + 4); v4 = this; v28 = v3; if ( !v3 ) return 0; v6 = *(_DWORD *)(v3 + 20); if ( !v6 ) return 0; v29 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 36))(v6); if ( a2 && a2 != 1 ) { if ( a2 == 2 ) { v7 = v4[110]; if ( *(unsigned __int16 *)(v6 + 8) != v4[122] ) { v8 = sub_6899D0(*((_WORD *)v4 + 244)); v9 = (_DWORD *)v4[74]; v10 = v8[28] + 34; v11 = (char *)sub_4090F0(-1628252885); v12 = sub_7549E0(v11, v10); sub_492060(v9, (int)v12); return 0; } goto LABEL_23; } return 0; } v13 = *(_DWORD *)(v6 + 112); if ( v13 ) v14 = (void *)(v13 + 2); else v14 = 0; if ( !sub_433B80(&dword_ACB248, v14) ) { v27 = 1805354864; LABEL_33: v25 = (_DWORD *)v4[74]; v26 = sub_4090F0(v27); sub_492060(v25, (int)v26); return 0; } v15 = v4[121]; if ( v29 < v15 ) { v16 = (_DWORD *)v4[74]; v17 = v15; v18 = (char *)sub_4090F0(-1122297050); v19 = sub_7549E0(v18, v17); sub_492060(v16, (int)v19); return 0; } if ( a2 ) { v7 = v4[109]; v20 = (_DWORD *)v4[108]; } else { v7 = v4[108]; v20 = (_DWORD *)v4[109]; } if ( v20[115] != -1 && v20 ) { v30 = *(_DWORD *)v6; v24 = sub_5D5470(v20); if ( !(*(unsigned __int8 (__thiscall **)(int, int))(v30 + 24))(v6, v24) ) { v27 = 1236852936; goto LABEL_33; } } else { sub_431F30(v20, *(_WORD *)(v6 + 8)); sub_432A00(v4, v6); } LABEL_23: sub_431E90((_BYTE *)v7); *(_DWORD *)(v7 + 456) = *(_DWORD *)(v28 + 8); *(_DWORD *)(v7 + 460) = *(_DWORD *)(v28 + 12); *(_DWORD *)(v7 + 472) = *(_DWORD *)(a3 + 8); sub_431E50((_DWORD *)v7, 1); sub_5D5B70((_WORD *)v7, v6, 1); v21 = v4[108]; if ( *(_DWORD *)(v21 + 460) != -1 ) { if ( v21 ) { v22 = v4[109]; if ( *(_DWORD *)(v22 + 460) != -1 ) { if ( v22 ) { v23 = v4[110]; if ( *(_DWORD *)(v23 + 460) != -1 ) { if ( v23 ) { sub_4322A0((_DWORD **)v4, 0); sub_431D10((_DWORD *)v4[111]); } } } } } } return 1; } // ACB248: using guessed type int dword_ACB248; //----- (00432CB0) -------------------------------------------------------- int __thiscall sub_432CB0(_BYTE **this) { _BYTE **v1; // esi _BYTE *v2; // ecx int result; // eax v1 = this; sub_431E90(this[108]); sub_431E90(v1[109]); sub_431E90(v1[110]); v2 = v1[111]; v1[112] = (_BYTE *)255; v1[113] = (_BYTE *)255; v1[114] = (_BYTE *)255; v1[123] = (_BYTE *)-1; result = sub_431E90(v2); v1[115] = (_BYTE *)255; return result; } //----- (00432D10) -------------------------------------------------------- int __thiscall sub_432D10(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ebx int v5; // edi int v6; // eax _DWORD *v7; // eax char *v8; // eax char *v9; // eax int *v10; // ebx int v11; // edi char v12; // al int result; // eax void (__stdcall *v14)(signed int); // eax _BYTE *v15; // ecx void (__stdcall *v16)(signed int); // eax _BYTE *v17; // ecx void (__stdcall *v18)(signed int); // eax _BYTE *v19; // ecx int (__stdcall *v20)(signed int); // eax _DWORD *v21; // [esp+Ch] [ebp+8h] v2 = this; v3 = this[108]; if ( a2 == 1 ) { v4 = 0; v5 = 0; if ( *(_DWORD *)(v3 + 460) != -1 ) { if ( v3 ) { v6 = sub_5D5470((_DWORD *)v3); if ( v6 ) v4 = *(_DWORD *)(v6 + 112) + 34; } } if ( v2[123] != -1 ) { v7 = sub_6899D0(*((_WORD *)v2 + 246)); if ( v7 ) v5 = v7[28] + 34; } sub_6B0B40((float *)v2[118], (_DWORD *)v2[119]); v21 = (_DWORD *)v2[74]; v8 = (char *)sub_4090F0(2030033634); v9 = sub_7549E0(v8, v4, v5); sub_492060(v21, (int)v9); sub_432CB0((_BYTE **)v2); sub_431F30((_WORD *)v2[110], *((_WORD *)v2 + 244)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[116] + 240))(0); v10 = (int *)v2[117]; v11 = *v10; v12 = (*(int (**)(void))(*(_DWORD *)v2[116] + 244))(); result = (*(int (__thiscall **)(int *, bool))(v11 + 240))(v10, v12 == 0); } else { v14 = *(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 240); *(_BYTE *)(v3 + 448) = 0; v14(1); v15 = (_BYTE *)v2[109]; v16 = *(void (__stdcall **)(signed int))(*(_DWORD *)v15 + 240); v15[448] = 0; v16(1); v17 = (_BYTE *)v2[110]; v18 = *(void (__stdcall **)(signed int))(*(_DWORD *)v17 + 240); v17[448] = 0; v18(1); v19 = (_BYTE *)v2[111]; v20 = *(int (__stdcall **)(signed int))(*(_DWORD *)v19 + 240); v19[448] = 0; result = v20(1); } return result; } //----- (00432E70) -------------------------------------------------------- _DWORD *__thiscall sub_432E70(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // esi _DWORD *v4; // ebx _DWORD *v5; // edi int v6; // ecx _BYTE *v7; // ecx signed __int16 v8; // ST00_2 int *v9; // ebx int v10; // edi char v11; // al char v12; // [esp+Fh] [ebp-1h] result = a2; v3 = this; v12 = 1; if ( !a2 ) { v4 = (_DWORD *)this[108]; v5 = (_DWORD *)this[109]; LABEL_5: if ( v5[115] == -1 || !v5 ) v12 = 0; goto LABEL_14; } if ( a2 == (_DWORD *)1 ) { v4 = (_DWORD *)this[109]; v5 = (_DWORD *)this[108]; goto LABEL_5; } if ( a2 != (_DWORD *)2 ) return result; v4 = (_DWORD *)this[110]; result = (_DWORD *)-1; if ( v4[115] == -1 || !v4 ) return result; v5 = (_DWORD *)this[108]; if ( v5[115] == -1 || !v5 ) { result = (_DWORD *)this[109]; v5 = (_DWORD *)(result[115] != -1 ? (unsigned int)result : 0); } LABEL_14: if ( v4 ) { result = (_DWORD *)sub_5D5470(v4); if ( result ) { v3[92] = v4[114]; v3[94] = 0; v6 = v4[115]; v3[95] = result; v3[93] = v6; v3[96] = 0; v3[106] = (*(int (__thiscall **)(_DWORD *))(*result + 12))(result); v3[88] = v4[118]; dword_BA6BCC = (int)(v3 + 86); sub_431E90(v4); if ( a2 && a2 != (_DWORD *)1 ) { if ( !v5 ) sub_432CB0((_BYTE **)v3); sub_431E90(v4); sub_431F30((_WORD *)v3[110], *((_WORD *)v3 + 244)); } else if ( v12 ) { v8 = sub_5D5600(v5); sub_431F30(v4, v8); } else { sub_431E90(v5); v7 = (_BYTE *)v3[111]; v3[123] = -1; sub_431E90(v7); v3[115] = 255; } sub_431CC0((_DWORD *)v3[111]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[116] + 240))(0); v9 = (int *)v3[117]; v10 = *v9; v11 = (*(int (**)(void))(*(_DWORD *)v3[116] + 244))(); result = (_DWORD *)(*(int (__thiscall **)(int *, bool))(v10 + 240))(v9, v11 == 0); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00433030) -------------------------------------------------------- int __thiscall sub_433030(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[120]; if ( v2 ) { sub_4628D0(v2); v1[120] = 0; } sub_6B0BB0((_DWORD *)v1[118], (volatile LONG *)v1[119]); return sub_432CB0((_BYTE **)v1); } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); //----- (00433070) -------------------------------------------------------- char __thiscall sub_433070(_BYTE *this, int *a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // eax int v7; // ecx _DWORD *v8; // esi const CHAR *v9; // eax _DWORD *v10; // eax v4 = this; if ( this[448] ) { byte_BA6BD0 = 1; return 0; } if ( *a2 ) { v6 = *(_DWORD **)(*a2 + 4); if ( !v6[4] ) { v7 = v6[2]; if ( v7 == 1 ) { v8 = (_DWORD *)v4[113]; v9 = sub_4090F0(1787986550); sub_492060(v8, (int)v9); return 0; } if ( !v7 ) { if ( v6[5] ) { v10 = (_DWORD *)sub_402BF0(v4); if ( sub_432A80(v10, v4[116], *a2) ) { sub_431D10(v4); return 1; } } } } byte_BA6BD0 = 1; } return 0; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (00433110) -------------------------------------------------------- char __thiscall sub_433110(void *this, void *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax char v15; // ST44_1 int v16; // ST48_4 int v17; // ST4C_4 int v18; // ST50_4 const CHAR *v19; // eax char v20; // ST44_1 int v21; // ST48_4 int v22; // ST4C_4 int v23; // ST50_4 const CHAR *v24; // eax int v25; // ecx void **v26; // eax volatile LONG *v27; // ecx const char *v28; // eax volatile LONG **v29; // eax const char *v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax const char *v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax volatile LONG *v36; // eax volatile LONG v37; // edx volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG v41; // edx const char *v42; // eax volatile LONG *v43; // eax char *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi float *v46; // edi int v47; // eax float *v48; // eax float *v49; // eax int *v50; // ebx int v51; // edi char v52; // al void (__thiscall ***v53)(_DWORD, signed int); // esi void (__thiscall ***v54)(_DWORD, signed int); // esi int v55[5]; // [esp+68h] [ebp-50h] float v56; // [esp+7Ch] [ebp-3Ch] float v57; // [esp+80h] [ebp-38h] float v58; // [esp+84h] [ebp-34h] volatile LONG **v59; // [esp+88h] [ebp-30h] volatile LONG *v60; // [esp+8Ch] [ebp-2Ch] int v61; // [esp+90h] [ebp-28h] int v62; // [esp+94h] [ebp-24h] int v63; // [esp+98h] [ebp-20h] void **v64; // [esp+9Ch] [ebp-1Ch] int v65; // [esp+A0h] [ebp-18h] int v66; // [esp+A4h] [ebp-14h] int v67; // [esp+A8h] [ebp-10h] int v68; // [esp+B4h] [ebp-4h] v2 = (int)this; v65 = 0; v3 = dword_BA6BA0; v68 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ItemMix.nif"); sub_8F66B0(v4, (int)&v65, v3); if ( !v65 ) return 0; v5 = sub_8FB140(v65, (int)"Frame", (int)&v66, (int)&v67, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"ItemMixWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v65; v68 = -1; if ( v65 && !InterlockedDecrement((volatile LONG *)(v65 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v66; v9 = v67; sub_456260(v55); LOBYTE(v68) = 1; sub_455FF0(v55, v2); sub_456000(v55, v8, v9); sub_456380(v55, v65); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v65, (int)"Theme", (int)&v66, (int)&v67, v10); else v11 = sub_8FB140(v65, (int)"Theme", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66 - v8, v67 - v9, (int)v11, v2, 0, 0); v12 = (volatile LONG *)sub_43D0D0(0x1Du); v13 = sub_8FB140(v65, (int)"Plan01", (int)&v66, (int)&v67, v12); sub_8F3EB0(v66 - v8, v67 - v9, (int)v13, v2, 0, 0); v14 = sub_8FB140(v65, (int)"IconSlot", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66 - v8, v67 - v9, (int)v14, v2, 0, 0); sub_456820(v55, (int)"Panel01", 0); v15 = dword_AA8D98; v16 = dword_AA8D9C; v17 = dword_AA8DA0; v18 = dword_AA8DA4; v19 = sub_4090F0(910701385); sub_456760(v55, (int)"WinTitle", (int)v19, v15, v16, v17, v18, 5); sub_4563D0(v55, 13, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); *(_DWORD *)(v2 + 464) = sub_4563D0(v55, 12, (int)"OkNor", (int)"OkClick", (int)"OkOver", (int)"OkDisable", 0); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_4090F0(2106632340); sub_456040(*(_DWORD *)(v2 + 464), (int)v24, v20, v21, v22, v23, 5); v25 = *(_DWORD *)(v2 + 464); v61 = 0; v62 = 0; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v25 + 180))(&v61, &v62); v26 = (void **)sub_456820(v55, (int)"OkNor", 0); v27 = *(volatile LONG **)(v2 + 468); v64 = v26; v60 = v27; if ( v27 != (volatile LONG *)v26 ) { if ( v27 ) { if ( !InterlockedDecrement(v27 + 1) && v60 ) (**(void (__stdcall ***)(signed int))v60)(1); v26 = v64; } *(_DWORD *)(v2 + 468) = v26; if ( v26 ) InterlockedIncrement((volatile LONG *)v26 + 1); } (*(void (__stdcall **)(int, int))(**(_DWORD **)(v2 + 468) + 308))(v61, v62); *(_DWORD *)(*(_DWORD *)(v2 + 468) + 272) = dword_AD01E8; v60 = *(volatile LONG **)(v2 + 468); v28 = sub_4090F0(1839564155); sub_8F2EA0((void **)v60, v28); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 468) + 276))(0.0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 468) + 256))(1); v29 = sub_8FB140(v65, (int)"MixItemSlot01", (int)&v66, (int)&v67, 0); v60 = sub_8F3EB0(v66 - v8, v67 - v9, (int)v29, v2, 0, 0); *((_DWORD *)v60 + 68) = dword_AD01E8; v30 = sub_4090F0(-647880418); sub_8F2EA0((void **)v60, v30); v31 = sub_432640(v66 - v8 + 1, v67 - v9 + 1, 0, v2, (int)a2); *(_DWORD *)(v2 + 432) = v31; *((_DWORD *)v31 + 68) = dword_ACEC34; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 432) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 432), 1); v32 = sub_8FB140(v65, (int)"MixItemSlot02", (int)&v66, (int)&v67, 0); v60 = sub_8F3EB0(v66 - v8, v67 - v9, (int)v32, v2, 0, 0); *((_DWORD *)v60 + 68) = dword_AD01E8; v33 = sub_4090F0(-647880418); sub_8F2EA0((void **)v60, v33); v34 = sub_432640(v66 - v8 + 1, v67 - v9 + 1, 1, v2, (int)a2); *(_DWORD *)(v2 + 436) = v34; *((_DWORD *)v34 + 68) = dword_ACEC34; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 436) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 436) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 436) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 436), 1); v35 = sub_8FB140(v65, (int)"MaterialSlot", (int)&v66, (int)&v67, 0); v36 = sub_8F3EB0(v66 - v8, v67 - v9, (int)v35, v2, 0, 0); v37 = *v36; v60 = v36; (*(void (__thiscall **)(volatile LONG *, signed int))(v37 + 240))(v36, 1); (*(void (__stdcall **)(signed int))(*v60 + 256))(1); v38 = sub_432640(v66 - v8 + 1, v67 - v9 + 1, 2, v2, (int)a2); *(_DWORD *)(v2 + 440) = v38; *((_DWORD *)v38 + 68) = dword_ACEC34; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 440) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 440) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 440) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 440), 1); v39 = sub_8FB140(v65, (int)"CplMixItem", (int)&v66, (int)&v67, 0); v59 = v39; v40 = sub_8F3EB0(v66 - v8, v67 - v9, (int)v39, v2, 0, 0); v41 = *v40; v64 = (void **)v40; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v41 + 276))(v40, 0.0); (*((void (__stdcall **)(signed int))*v64 + 64))(1); v60 = (volatile LONG *)v64; InterlockedIncrement((volatile LONG *)v64 + 1); LOBYTE(v68) = 2; sub_65AD50((int *)(v2 + 476), (int *)&v60); LOBYTE(v68) = 1; if ( !InterlockedDecrement((volatile LONG *)v64 + 1) ) (*(void (__stdcall **)(signed int))*v64)(1); v64 = (void **)sub_8F3EB0(v66 - v8, v67 - v9, (int)v59, v2, 0, 0); v64[68] = (void *)dword_AD01E8; v42 = sub_4090F0(-731766234); sub_8F2EA0(v64, v42); (*((void (__stdcall **)(signed int))*v64 + 60))(1); (*((void (__stdcall **)(signed int))*v64 + 64))(1); v43 = sub_432640(v66 - v8 + 1, v67 - v9 + 1, 3, v2, (int)a2); *(_DWORD *)(v2 + 444) = v43; *((_DWORD *)v43 + 68) = dword_ACEC34; *(_BYTE *)(*(_DWORD *)(v2 + 444) + 254) = 0; v63 = 0; LOBYTE(v68) = 3; if ( !byte_ACAD5C ) sub_420410(); v44 = (char *)sub_401410(byte_ACA838, "SUCC_1.nif"); sub_8F66B0(v44, (int)&v63, 0); if ( v63 ) { v46 = (float *)operator new(0x44u); LOBYTE(v68) = 4; if ( v46 ) { v47 = sub_85BD60((void *)v63); v48 = sub_6B0A90(v46, v47); } else { v48 = 0; } LOBYTE(v68) = 3; *(_DWORD *)(v2 + 472) = v48; if ( v48 ) { v49 = *(float **)v48; v56 = 0.0; v57 = 0.0; v49[22] = 0.0; v58 = 1000.0; v49[23] = 0.0; v49[24] = 1000.0; *(_BYTE *)(*(_DWORD *)(v2 + 472) + 66) = 0; } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); sub_432CB0((_BYTE **)v2); sub_431F30(*(_WORD **)(v2 + 440), *(_WORD *)(v2 + 488)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 464) + 240))(0); v50 = *(int **)(v2 + 468); v51 = *v50; v52 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v2 + 464) + 244))(*(_DWORD *)(v2 + 464)); (*(void (__thiscall **)(int *, bool))(v51 + 240))(v50, v52 == 0); LOBYTE(v68) = 1; if ( v63 ) { v53 = (void (__thiscall ***)(_DWORD, signed int))v63; if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) ) { if ( v53 ) (**v53)(v53, 1); } } LOBYTE(v68) = 0; sub_4562E0(v55); v54 = (void (__thiscall ***)(_DWORD, signed int))v65; v68 = -1; if ( v65 && !InterlockedDecrement((volatile LONG *)(v65 + 4)) && v54 ) (**v54)(v54, 1); result = 1; } else { LOBYTE(v68) = 0; sub_4562E0(v55); v45 = (void (__thiscall ***)(_DWORD, signed int))v65; v68 = -1; if ( v65 && !InterlockedDecrement((volatile LONG *)(v65 + 4)) && v45 ) (**v45)(v45, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (00433A10) -------------------------------------------------------- char __thiscall sub_433A10(int this, int a2, _DWORD *a3) { char result; // al result = a2; switch ( a2 ) { case 11: result = (unsigned int)sub_432E70((_DWORD *)this, a3); break; case 12: result = sub_432450((_DWORD **)this); break; case 13: if ( *(_DWORD *)(this + 480) ) *(_DWORD *)(this + 480) = 0; result = sub_4A7630(*(_DWORD ***)(this + 296), 1); break; default: return result; } return result; } //----- (00433A80) -------------------------------------------------------- void *__thiscall sub_433A80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PgWinDrop::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; //----- (00433AC0) -------------------------------------------------------- void *__thiscall sub_433AC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &DropContents::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9ACB60: using guessed type void *DropContents::`vftable'; //----- (00433AF0) -------------------------------------------------------- int __thiscall sub_433AF0(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < 0xC0 ) result = this[a2 + 87]; else result = 0; return result; } //----- (00433B10) -------------------------------------------------------- void *__thiscall sub_433B10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MixItemIcon::`vftable'; *((_DWORD *)this + 58) = &MixItemIcon::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AC8C4: using guessed type void *MixItemIcon::`vftable'; // 9AC8E4: using guessed type void *MixItemIcon::`vftable'; //----- (00433B50) -------------------------------------------------------- void *__thiscall sub_433B50(void *this, char a2) { void *v2; // esi v2 = this; sub_432510(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00433B80) -------------------------------------------------------- bool __thiscall sub_433B80(_DWORD *this, void *a2) { _DWORD *v2; // esi bool v4; // [esp+Fh] [ebp-2Dh] void *v5; // [esp+10h] [ebp-2Ch] int v6; // [esp+20h] [ebp-1Ch] unsigned int v7; // [esp+24h] [ebp-18h] int v8; // [esp+38h] [ebp-4h] v2 = this; v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, a2, strlen((const char *)a2)); v8 = 0; v4 = sub_74A6A0(v2 + 1, (int)&v5) == 0; if ( v7 >= 0x10 ) operator delete(v5); return v4 == 0; } //----- (00433C30) -------------------------------------------------------- _DWORD *__thiscall sub_433C30(_DWORD *this, void *a2) { _DWORD *v2; // esi _DWORD *v3; // esi void *v5; // [esp+Ch] [ebp-2Ch] int v6; // [esp+1Ch] [ebp-1Ch] unsigned int v7; // [esp+20h] [ebp-18h] int v8; // [esp+34h] [ebp-4h] v2 = this; v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, a2, strlen((const char *)a2)); v8 = 0; v3 = sub_74A6A0(v2 + 1, (int)&v5); if ( v7 >= 0x10 ) operator delete(v5); return v3; } //----- (00433CD0) -------------------------------------------------------- void __thiscall sub_433CD0(void **this) { void **v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi v1 = this; v2 = (_DWORD **)this[7]; v3 = *v2; *v2 = v2; *((_DWORD *)v1[7] + 1) = v1[7]; v1[8] = 0; if ( v3 != v1[7] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != v1[7] ); } operator delete(v1[7]); if ( (unsigned int)v1[5] >= 0x10 ) operator delete(*v1); v1[5] = (void *)15; v1[4] = 0; *(_BYTE *)v1 = 0; } //----- (00433D40) -------------------------------------------------------- void __thiscall sub_433D40(_DWORD *this, int a2, char *a3, int a4) { _DWORD *v4; // esi int v5; // edi _DWORD *v6; // ebx int v7; // ecx int v8; // eax char *v9; // edx unsigned int v10; // eax char *v11; // eax void *v12; // eax int v13; // ebx int v14; // ecx char *v15; // ebx int v16; // edi char *v17; // ecx int v18; // ST04_4 _DWORD *v19; // ST00_4 int v20; // eax char *v21; // ecx int v22; // edi _DWORD *v23; // ST18_4 int v24; // [esp+0h] [ebp-24h] void *v25; // [esp+10h] [ebp-14h] int *v26; // [esp+14h] [ebp-10h] int v27; // [esp+20h] [ebp-4h] v26 = &v24; v4 = this; v5 = (int)a3; if ( a3 ) { v6 = (_DWORD *)this[1]; v7 = *this; v8 = (v4[1] - *v4) >> 2; if ( 0x3FFFFFFF - v8 < (unsigned int)a3 ) std::_Xlength_error("vector too long"); v9 = &a3[v8]; v10 = (v4[2] - v7) >> 2; if ( v10 >= (unsigned int)v9 ) { if ( ((signed int)v6 - a2) >> 2 >= (unsigned int)a3 ) { v21 = *(char **)a4; v22 = (int)&v6[-(_DWORD)a3]; a4 = 4 * (_DWORD)a3; v23 = &v6[-(_DWORD)a3]; a3 = v21; v4[1] = sub_41E790(v23, v6, v6); sub_74E330(a2, v22, v6); sub_74E310((_DWORD *)a2, (_DWORD *)(a2 + a4), &a3); } else { v17 = *(char **)a4; a4 = 4 * (_DWORD)a3; a3 = v17; sub_41E790((_DWORD *)a2, v6, (_DWORD *)(a2 + 4 * v5)); v18 = v5 - ((v4[1] - a2) >> 2); v19 = (_DWORD *)v4[1]; v27 = 2; sub_74E460(v19, v18, &a3); v20 = a4; v4[1] += a4; sub_74E310((_DWORD *)a2, (_DWORD *)(v4[1] - v20), &a3); } } else { if ( 0x3FFFFFFF - (v10 >> 1) >= v10 ) { v11 = (char *)((v10 >> 1) + v10); a3 = v11; } else { a3 = 0; v11 = 0; } if ( v11 < v9 ) { a3 = v9; v11 = v9; } v12 = sub_68B040(v11); v13 = a2 - *v4; v25 = v12; v13 >>= 2; v27 = 0; sub_74E460((_DWORD *)v12 + v13, v5, (_DWORD *)a4); sub_41E790((_DWORD *)*v4, (_DWORD *)a2, v25); v14 = v13 + v5; v15 = (char *)v25; sub_41E790((_DWORD *)a2, (_DWORD *)v4[1], (_DWORD *)v25 + v14); v16 = ((v4[1] - *v4) >> 2) + v5; if ( *v4 ) operator delete((void *)*v4); v4[2] = &v15[4 * (_DWORD)a3]; v4[1] = &v15[4 * v16]; *v4 = v15; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00433FA0) -------------------------------------------------------- void __thiscall sub_433FA0(void ***this) { void ***v1; // edi void **v2; // esi void **v3; // ebx v1 = this; v2 = (void **)**this; **this = *this; (*this)[1] = *this; this[1] = 0; if ( v2 != *this ) { do { v3 = (void **)*v2; sub_433CD0(v2 + 2); operator delete(v2); v2 = v3; } while ( v3 != *v1 ); } } //----- (00434000) -------------------------------------------------------- _DWORD *__thiscall sub_434000(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int *v5; // ecx char *v6; // edx int v7; // edi int v8; // eax void **v12; // [esp+10h] [ebp-1Ch] _DWORD *v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+28h] [ebp-4h] v3 = this; v13 = this; *(_BYTE *)this = *a2; this[2] = 0; v4 = operator new(0x30u); if ( !v4 ) { a2 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&a2); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v3[1] = v4; *v4 = v4; *(_DWORD *)(v3[1] + 4) = v3[1]; v5 = v3 + 4; v14 = 0; *v5 = 0; v5[1] = 0; v5[2] = 0; v6 = (char *)v3[1]; *((float *)v3 + 10) = 1.0; v7 = v3[4]; v8 = v3[5]; LOBYTE(v14) = 1; a2 = v6; if ( v7 != v8 ) v3[5] = v7; sub_433D40(v5, *v5, (char *)0x10, (int)&a2); v3[8] = 7; v3[9] = 8; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004340F0) -------------------------------------------------------- int __thiscall sub_4340F0(char *this) { int v1; // esi signed int v2; // edi int result; // eax int v4; // ecx int v5; // ecx v1 = (int)(this + 352); v2 = 10; do { if ( *(_DWORD *)v1 ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0); if ( *(_DWORD *)(v1 + 40) ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 120) + 256))(0); v4 = *(_DWORD *)(v1 + 160); if ( v4 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 256))(0); v5 = *(_DWORD *)(v1 + 200); if ( v5 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 256))(0); v1 += 4; --v2; } while ( v2 ); return result; } //----- (00434160) -------------------------------------------------------- int __thiscall sub_434160(char *this) { int v1; // esi signed int v2; // edi int v3; // ecx int result; // eax v1 = (int)(this + 612); v2 = 5; do { v3 = *(_DWORD *)(v1 - 20); if ( v3 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0); if ( *(_DWORD *)v1 ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0); v1 += 4; --v2; } while ( v2 ); return result; } //----- (004341A0) -------------------------------------------------------- unsigned int __thiscall sub_4341A0(char *this, int a2, unsigned int a3) { int v3; // edi unsigned int v4; // esi unsigned int v5; // ebx unsigned int result; // eax signed int v7; // esi char *v8; // edi int v9; // ecx int v10; // ecx unsigned int v11; // [esp+Ch] [ebp+8h] unsigned int v12; // [esp+10h] [ebp+Ch] v3 = a2; if ( !a2 || a2 == 1 ) { v4 = a3; if ( a3 > 0x3E7 ) v4 = 999; v11 = v4 % 0xA; v5 = v4 / 0x64; result = -858993459 * (v4 % 0x64); v12 = v4 % 0x64 / 0xA; v7 = 0; v8 = &this[40 * v3 + 432]; do { v9 = *((_DWORD *)v8 - 20); if ( v9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)v9 + 256))(v7 == v11); if ( *(_DWORD *)v8 ) result = (*(int (__stdcall **)(bool))(**(_DWORD **)v8 + 256))(v7 == v12); v10 = *((_DWORD *)v8 + 20); if ( v10 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)v10 + 256))(v7 == v5); ++v7; v8 += 4; } while ( v7 < 10 ); } return result; } //----- (00434280) -------------------------------------------------------- void __thiscall sub_434280(_BYTE *this, int a2, unsigned int a3) { unsigned int v3; // ebx unsigned int v4; // esi int v5; // edi if ( this[632] && (!a2 || a2 == 1) ) { v3 = a3; if ( a3 > 5 ) v3 = 5; v4 = 0; v5 = (int)&this[20 * a2 + 592]; do { if ( *(_DWORD *)v5 ) (*(void (__stdcall **)(bool))(**(_DWORD **)v5 + 256))(v4 < v3); ++v4; v5 += 4; } while ( v4 < 5 ); } } //----- (004342E0) -------------------------------------------------------- char __thiscall sub_4342E0(char *this, char a2) { char result; // al char *v3; // esi int v4; // ecx int (__stdcall *v5)(signed int); // edx result = a2; v3 = this; v4 = *((_DWORD *)this + 86); v3[632] = a2; if ( v4 ) { v5 = *(int (__stdcall **)(signed int))(*(_DWORD *)v4 + 256); if ( a2 == 1 ) { result = v5(1); } else { v5(0); result = sub_434160(v3); } } return result; } //----- (00434320) -------------------------------------------------------- int __thiscall sub_434320(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[87]; if ( v2 ) { result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 472))(a2); } return result; } //----- (00434350) -------------------------------------------------------- LONG __thiscall sub_434350(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &KDTeamScoreWin::`vftable'; this[58] = &KDTeamScoreWin::`vftable'; `eh vector destructor iterator'(this + 148, 4u, 10, sub_410C00); `eh vector destructor iterator'(v1 + 128, 4u, 20, sub_410C00); `eh vector destructor iterator'(v1 + 108, 4u, 20, sub_410C00); `eh vector destructor iterator'(v1 + 88, 4u, 20, sub_410C00); v2 = v1[87]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[86]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9ACE6C: using guessed type void *KDTeamScoreWin::`vftable'; // 9ACE8C: using guessed type void *KDTeamScoreWin::`vftable'; //----- (004344D0) -------------------------------------------------------- int __thiscall sub_4344D0(_DWORD *this, unsigned int a2) { int result; // eax int *v3; // edi int v4; // esi int v5; // ST04_4 char *v6; // eax char *v7; // eax result = a2; if ( a2 > 9 ) result = 9; v3 = (int *)this[86]; if ( v3 ) { v4 = *v3; v5 = result; v6 = (char *)sub_4090F0(1046161468); v7 = sub_7549E0(v6, v5); result = (*(int (__thiscall **)(int *, char *))(v4 + 472))(v3, v7); } return result; } //----- (00434520) -------------------------------------------------------- _DWORD *__thiscall sub_434520(_DWORD *this) { _DWORD *v1; // ebx int *v2; // edi int v3; // esi int v4; // esi int v5; // esi int v6; // esi int v7; // esi bool v8; // zf int *v9; // edi int v10; // esi signed int v12; // [esp+14h] [ebp-18h] signed int v13; // [esp+14h] [ebp-18h] int v14; // [esp+18h] [ebp-14h] int v15; // [esp+18h] [ebp-14h] signed int v16; // [esp+1Ch] [ebp-10h] signed int v17; // [esp+1Ch] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &KDTeamScoreWin::`vftable'; v1[58] = &KDTeamScoreWin::`vftable'; v1[86] = 0; v1[87] = 0; `eh vector constructor iterator'( v1 + 88, 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v2 = v1 + 108; `eh vector constructor iterator'( v1 + 108, 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 128, 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 148, 4u, 10, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_BYTE *)v1 + 632) = 0; v3 = v1[86]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[86] = 0; } v4 = v1[87]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[87] = 0; } v14 = (int)(v1 + 108); v12 = 10; do { v16 = 2; do { v5 = *(v2 - 20); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(v2 - 20) = 0; } v6 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *v2 = 0; } v7 = v2[20]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[20] = 0; } v2 += 10; --v16; } while ( v16 ); v2 = (int *)(v14 + 4); v8 = v12-- == 1; v14 += 4; } while ( !v8 ); v9 = v1 + 148; v15 = (int)(v1 + 148); v17 = 5; do { v13 = 2; do { v10 = *v9; if ( *v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *v9 = 0; } v9 += 5; --v13; } while ( v13 ); v9 = (int *)(v15 + 4); v8 = v17-- == 1; v15 += 4; } while ( !v8 ); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACE6C: using guessed type void *KDTeamScoreWin::`vftable'; // 9ACE8C: using guessed type void *KDTeamScoreWin::`vftable'; //----- (00434770) -------------------------------------------------------- int __thiscall sub_434770(char *this) { char *v1; // esi int result; // eax int v3; // ecx int *v4; // esi int v5; // edi char *v6; // eax char *v7; // eax v1 = this; sub_4340F0(this); result = sub_434160(v1); v3 = *((_DWORD *)v1 + 86); if ( v3 ) { v1[632] = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0); sub_434160(v1); v4 = (int *)*((_DWORD *)v1 + 86); v5 = *v4; v6 = (char *)sub_4090F0(1046161468); v7 = sub_7549E0(v6, 1); result = (*(int (__thiscall **)(int *, char *))(v5 + 472))(v4, v7); } return result; } //----- (004347E0) -------------------------------------------------------- char __thiscall sub_4347E0(void *this, int a2) { int v2; // ebx int v3; // eax int v4; // esi volatile LONG *v5; // edi char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // edi int v12; // esi volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax int v16; // eax volatile LONG *v17; // eax int v18; // ecx int v19; // edi char *v20; // eax char *v21; // eax int v22; // eax volatile LONG *v23; // eax int v24; // esi const CHAR *v25; // eax signed int v26; // edi int v27; // esi char *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // esi int v31; // esi char *v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax int v35; // esi int v36; // esi char *v37; // eax volatile LONG **v38; // eax volatile LONG *v39; // eax int v40; // esi int v41; // esi char *v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax int v45; // esi int v46; // esi char *v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax int v50; // esi int v51; // esi char *v52; // eax volatile LONG **v53; // eax volatile LONG *v54; // eax volatile LONG *v55; // esi int v56; // ST68_4 _DWORD *v57; // esi signed int v58; // edi int v59; // esi char *v60; // eax volatile LONG **v61; // eax volatile LONG *v62; // esi int v63; // esi char *v64; // eax volatile LONG **v65; // eax volatile LONG *v66; // eax volatile LONG *v67; // esi int v68; // ST68_4 _DWORD *v69; // esi int v70; // [esp+7Ch] [ebp-28h] int v71; // [esp+80h] [ebp-24h] _DWORD *v72; // [esp+84h] [ebp-20h] int v73; // [esp+88h] [ebp-1Ch] int v74; // [esp+8Ch] [ebp-18h] int v75; // [esp+90h] [ebp-14h] int v76; // [esp+94h] [ebp-10h] int v77; // [esp+A0h] [ebp-4h] int v78; // [esp+ACh] [ebp+8h] v2 = (int)this; v76 = 0; v77 = 0; v3 = sub_43D0D0(4u); v4 = dword_BA6BA0; v5 = (volatile LONG *)v3; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "\\Game\\KDTeamScoreWin.nif"); sub_8F66B0(v6, (int)&v76, v4); if ( !v76 ) return 0; v7 = sub_8FB140(v76, (int)"Frame", (int)&v74, (int)&v75, v5); if ( !v7 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v76; v77 = -1; if ( v76 && !InterlockedDecrement((volatile LONG *)(v76 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"KDTeamScoreWin", 0) ) { v11 = v74; v12 = v75; v73 = v74; v78 = v75; v13 = sub_8FB140(v76, (int)"Theme", (int)&v74, (int)&v75, 0); if ( v13 ) { if ( sub_8F3EB0(v74 - v11, v75 - v12, (int)v13, v2, 0, 0) ) { v14 = sub_8FB140(v76, (int)"Panel00", (int)&v74, (int)&v75, 0); if ( v14 ) { v15 = sub_8F3EB0(v74 - v11, v75 - v12, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( sub_8F71E0(v76, (int)"TextRound", &v74, &v75, &v70, &v71) ) { v16 = sub_421050(0); v17 = sub_8F4A20(v74 - v11, v75 - v12, v70, v71, v16, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 344), (int)v17); v18 = *(_DWORD *)(v2 + 344); if ( v18 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v18 + 488))(1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 344) + 468))(&dword_AA8C68); v19 = **(_DWORD **)(v2 + 344); v72 = *(_DWORD **)(v2 + 344); v20 = (char *)sub_4090F0(1046161468); v21 = sub_7549E0(v20, 1); (*(void (__thiscall **)(_DWORD *, char *))(v19 + 472))(v72, v21); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); if ( sub_8F71E0(v76, (int)"Frame", &v74, &v75, &v70, &v71) ) { v22 = sub_421050(0); v23 = sub_8F4A20(v74, v75, v70, v71, v22, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 348), (int)v23); if ( *(_DWORD *)(v2 + 344) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 348) + 488))(1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 348) + 468))(&dword_AA8CB8); v24 = **(_DWORD **)(v2 + 348); v72 = *(_DWORD **)(v2 + 348); v25 = sub_4090F0(1079976496); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v24 + 472))(v72, v25); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 348) + 240))(*(_DWORD *)(v2 + 348), 0); v26 = 0; v72 = (_DWORD *)(v2 + 472); while ( 1 ) { v27 = v76; v28 = sub_7549E0("BlueOneNum%d", v26); v29 = sub_8FB140(v27, (int)v28, (int)&v74, (int)&v75, 0); if ( !v29 ) break; v30 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v29, v2, 0, 0); if ( !v30 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 256))(v30, 0); sub_56FF80(v72 - 20, (int)v30); v31 = v76; v32 = sub_7549E0("BlueTenNum%d", v26); v33 = sub_8FB140(v31, (int)v32, (int)&v74, (int)&v75, 0); if ( !v33 ) break; v34 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v33, v2, 0, 0); v35 = (int)v34; if ( !v34 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v35 + 256))(v35, 0); sub_56FF80(v72, v35); v36 = v76; v37 = sub_7549E0("BlueHNum%d", v26); v38 = sub_8FB140(v36, (int)v37, (int)&v74, (int)&v75, 0); if ( !v38 ) break; v39 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v38, v2, 0, 0); v40 = (int)v39; if ( !v39 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v40 + 256))(v40, 0); sub_56FF80(v72 + 20, v40); v41 = v76; v42 = sub_7549E0("RedOneNum%d", v26); v43 = sub_8FB140(v41, (int)v42, (int)&v74, (int)&v75, 0); if ( !v43 ) break; v44 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v43, v2, 0, 0); v45 = (int)v44; if ( !v44 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v45 + 256))(v45, 0); sub_56FF80(v72 - 30, v45); v46 = v76; v47 = sub_7549E0("RedTenNum%d", v26); v48 = sub_8FB140(v46, (int)v47, (int)&v74, (int)&v75, 0); if ( !v48 ) break; v49 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v48, v2, 0, 0); v50 = (int)v49; if ( !v49 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v50 + 256))(v50, 0); sub_56FF80(v72 - 10, v50); v51 = v76; v52 = sub_7549E0("RedHNum%d", v26); v53 = sub_8FB140(v51, (int)v52, (int)&v74, (int)&v75, 0); if ( !v53 ) break; v54 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v53, v2, 0, 0); v55 = v54; if ( !v54 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 256))(v55, 0); v56 = (int)v55; v57 = v72; sub_56FF80(v72 + 10, v56); ++v26; v72 = v57 + 1; if ( v26 >= 10 ) { v58 = 0; v72 = (_DWORD *)(v2 + 592); while ( 1 ) { v59 = v76; v60 = sub_7549E0("BlueFlag0%d", v58); v61 = sub_8FB140(v59, (int)v60, (int)&v74, (int)&v75, 0); if ( !v61 ) break; v62 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v61, v2, 0, 0); if ( !v62 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v62 + 240))(v62, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v62 + 256))(v62, 1); sub_56FF80(v72 + 5, (int)v62); v63 = v76; v64 = sub_7549E0("RedFlag0%d", v58); v65 = sub_8FB140(v63, (int)v64, (int)&v74, (int)&v75, 0); if ( !v65 ) break; v66 = sub_8F3EB0(v74 - v73, v75 - v78, (int)v65, v2, 0, 0); v67 = v66; if ( !v66 ) break; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v66 + 240))(v66, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v67 + 256))(v67, 1); v68 = (int)v67; v69 = v72; sub_56FF80(v72, v68); ++v58; v72 = v69 + 1; if ( v58 >= 5 ) { sub_434770((char *)v2); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.0); v77 = -1; sub_410C00(&v76); return 1; } } break; } } } } } } } } } v77 = -1; sub_410C00(&v76); result = 0; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))v76; v77 = -1; if ( v76 && !InterlockedDecrement((volatile LONG *)(v76 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00434FE0) -------------------------------------------------------- volatile LONG *__cdecl sub_434FE0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x27Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_434520(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00435110) -------------------------------------------------------- void *__thiscall sub_435110(void *this, char a2) { void *v2; // esi v2 = this; sub_434350(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00435170) -------------------------------------------------------- signed int __thiscall sub_435170(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { int v6; // edx signed int result; // eax *this = a2; this[3] = a4; this[6] = a3; if ( a5 == 1 ) { result = 256; this[2] = 256; this[4] = a6; *((_BYTE *)this + 20) = 0; } else if ( a5 == 4 ) { result = 1024; this[2] = 1024; this[4] = a6; *((_BYTE *)this + 20) = 0; } else { if ( a5 == 64 ) { v6 = a6; result = 0x4000; this[2] = 0x4000; } else { v6 = a6; result = 0; this[2] = 0; } this[4] = v6; *((_BYTE *)this + 20) = 0; } return result; } //----- (00435250) -------------------------------------------------------- void __fastcall sub_435250(int a1) { int v1; // ebx int v2; // edi int v3; // eax int v4; // eax int v5; // ecx int v6; // ecx signed int v7; // eax int v8; // eax int v9; // edx _DWORD *i; // eax int v11; // eax int v12; // esi unsigned __int8 v13; // dl char v14; // al signed int v15; // eax int v16; // eax int v17; // eax int v18; // esi unsigned __int8 v19; // dl char v20; // al signed int v21; // eax int v22; // eax int v23; // eax int v24; // [esp+0h] [ebp-8h] _DWORD *v25; // [esp+4h] [ebp-4h] v24 = a1; if ( !*(_BYTE *)(a1 + 28) || !*(_DWORD *)(a1 + 8) ) return; v1 = dword_ACDC84; v25 = *(_DWORD **)(a1 + 16); if ( !v25 ) goto LABEL_19; do { v2 = v25[2]; v3 = *(_DWORD *)(v2 + 12); if ( v3 ) { v4 = v3 - 1; if ( v4 ) { if ( v4 != 1 ) goto LABEL_17; if ( *(_BYTE *)(v2 + 20) ) { v5 = *(_DWORD *)(v2 + 4); if ( !v5 || !((*(_BYTE *)((v5 >> 3) + v1 + 33) >> (v5 & 7)) & 1) ) goto LABEL_17; v6 = *(_DWORD *)(v1 + 16); } else { v7 = *(_DWORD *)(v2 + 24); if ( v7 >= 8 ) goto LABEL_17; v8 = dword_ACDC88 + 16 * (v7 + 8); v6 = *(_DWORD *)(v8 + 8); if ( !*(_BYTE *)(v8 + 1) ) goto LABEL_17; } } else if ( *(_BYTE *)(v2 + 20) ) { v11 = *(_DWORD *)(v2 + 4); if ( !v11 ) goto LABEL_17; v12 = v11 >> 3; v13 = *(_BYTE *)((v11 >> 3) + v1 + 33); v14 = v11 & 7; if ( (v13 >> v14) & 1 || !((*(_BYTE *)(v12 + v1 + 65) >> v14) & 1) ) goto LABEL_17; v6 = *(_DWORD *)(v1 + 16); } else { v15 = *(_DWORD *)(v2 + 24); if ( v15 >= 8 ) goto LABEL_17; v16 = dword_ACDC88 + 16 * (v15 + 8); v6 = *(_DWORD *)(v16 + 8); if ( *(_BYTE *)(v16 + 1) || !*(_BYTE *)(v16 + 3) ) goto LABEL_17; } } else if ( *(_BYTE *)(v2 + 20) ) { v17 = *(_DWORD *)(v2 + 4); if ( !v17 ) goto LABEL_17; v18 = v17 >> 3; v19 = *(_BYTE *)((v17 >> 3) + v1 + 33); v20 = v17 & 7; if ( !((v19 >> v20) & 1) || (*(_BYTE *)(v18 + v1 + 65) >> v20) & 1 ) goto LABEL_17; v6 = *(_DWORD *)(v1 + 16); } else { v21 = *(_DWORD *)(v2 + 24); if ( v21 >= 8 ) goto LABEL_17; v22 = dword_ACDC88 + 16 * (v21 + 8); v6 = *(_DWORD *)(v22 + 8); if ( !*(_BYTE *)(v22 + 1) || *(_BYTE *)(v22 + 3) ) goto LABEL_17; } v9 = *(_DWORD *)(v2 + 8); if ( v9 ) { v23 = *(_DWORD *)(v2 + 16); if ( v23 ) { if ( v23 != 1 || *(_DWORD *)(v2 + 8) != (v6 & v9) ) goto LABEL_17; } else if ( !(v9 & v6) ) { goto LABEL_17; } } else if ( v6 ) { goto LABEL_17; } if ( !dword_ACD0B0 ) { sub_8EEE70(*(_DWORD **)(v24 + 8), *(_DWORD *)v2, 0, 0); v1 = dword_ACDC84; } LABEL_17: v25 = (_DWORD *)*v25; } while ( v25 ); a1 = v24; LABEL_19: if ( *(_BYTE *)(v1 + 43) & 4 ) { for ( i = *(_DWORD **)(a1 + 16); i; i = (_DWORD *)*i ) ; } } // ACD0B0: using guessed type int dword_ACD0B0; // ACDC84: using guessed type int dword_ACDC84; // ACDC88: using guessed type int dword_ACDC88; //----- (00435490) -------------------------------------------------------- LONG __thiscall sub_435490(_DWORD *this) { _DWORD *v1; // ebx int v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v1 = this; *this = &KeyMap::`vftable'; sub_435A30(this); v2 = (int)(v1 + 3); v1[3] = &PgTList::`vftable'; v3 = (_DWORD *)v1[4]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v2 + 8))(v1 + 3, v4); } v1[6] = 0; v1[4] = 0; v1[5] = 0; *(_DWORD *)v2 = &NiTListBase,KeyMap::KeyNode *>::`vftable'; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9AD0DC: using guessed type void *PgTList::`vftable'; // 9AD0EC: using guessed type void *KeyMap::`vftable'; //----- (00435530) -------------------------------------------------------- _DWORD *__thiscall sub_435530(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // ebx _DWORD *v7; // eax int v8; // ecx _BYTE *v9; // eax _BYTE *v10; // esi _DWORD *result; // eax _DWORD *v12; // ecx v6 = this; v7 = (_DWORD *)this[4]; if ( !v7 ) goto LABEL_4; while ( 1 ) { v8 = v7[2]; if ( *(_DWORD *)v8 == a2 ) break; v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_4; } if ( v8 ) { *(_DWORD *)v8 = a2; *(_DWORD *)(v8 + 4) = a3; result = a5; *(_DWORD *)(v8 + 12) = a4; *(_DWORD *)(v8 + 8) = a5; *(_DWORD *)(v8 + 16) = a6; *(_BYTE *)(v8 + 20) = 1; } else { LABEL_4: v9 = operator new(0x1Cu); if ( v9 ) { v9[20] = 1; v10 = v9; } else { v10 = 0; } *((_DWORD *)v10 + 1) = a3; *((_DWORD *)v10 + 3) = a4; *((_DWORD *)v10 + 4) = a6; *(_DWORD *)v10 = a2; *((_DWORD *)v10 + 2) = a5; v10[20] = 1; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v6[3] + 4))(v6 + 3); result[2] = v10; *result = 0; result[1] = v6[5]; v12 = (_DWORD *)v6[5]; if ( v12 ) { *v12 = result; ++v6[6]; } else { ++v6[6]; v6[4] = result; } v6[5] = result; } return result; } //----- (004355F0) -------------------------------------------------------- _DWORD *__thiscall sub_4355F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // ebx _DWORD *v7; // eax int v8; // ecx _BYTE *v9; // eax _BYTE *v10; // edi _DWORD *result; // eax _DWORD *v12; // ecx v6 = this; v7 = (_DWORD *)this[4]; if ( !v7 ) goto LABEL_4; while ( 1 ) { v8 = v7[2]; if ( *(_DWORD *)v8 == a2 ) break; v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_4; } if ( v8 ) { *(_BYTE *)(v8 + 20) = 0; result = (_DWORD *)sub_435170((_DWORD *)v8, a2, a3, a4, a5, a6); } else { LABEL_4: v9 = operator new(0x1Cu); if ( v9 ) { v9[20] = 1; v10 = v9; } else { v10 = 0; } sub_435170(v10, a2, a3, a4, a5, a6); v10[20] = 0; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v6[3] + 4))(v6 + 3); result[2] = v10; *result = 0; result[1] = v6[5]; v12 = (_DWORD *)v6[5]; if ( v12 ) { *v12 = result; ++v6[6]; } else { ++v6[6]; v6[4] = result; } v6[5] = result; } return result; } //----- (004356B0) -------------------------------------------------------- void __thiscall sub_4356B0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi v3 = (_DWORD *)this[4]; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; if ( v4[1] == a2 && (_DWORD *)v4[2] == a3 ) break; v3 = (_DWORD *)*v3; if ( !v3 ) return; } v5 = (_DWORD *)this[4]; v6 = this + 3; if ( v5 ) { while ( 1 ) { v7 = v5 + 2; v8 = v5; v5 = (_DWORD *)*v5; if ( v4 == (_DWORD *)*v7 ) break; if ( !v5 ) goto LABEL_9; } } else { LABEL_9: v8 = 0; } a3 = v8; if ( v8 ) sub_403620(v6, &a3); operator delete(v4); } } //----- (00435720) -------------------------------------------------------- void __thiscall sub_435720(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi v3 = (_DWORD *)this[4]; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; if ( v4[6] == a2 && (_DWORD *)v4[2] == a3 ) break; v3 = (_DWORD *)*v3; if ( !v3 ) return; } v5 = (_DWORD *)this[4]; v6 = this + 3; if ( v5 ) { while ( 1 ) { v7 = v5 + 2; v8 = v5; v5 = (_DWORD *)*v5; if ( v4 == (_DWORD *)*v7 ) break; if ( !v5 ) goto LABEL_9; } } else { LABEL_9: v8 = 0; } a3 = v8; if ( v8 ) sub_403620(v6, &a3); operator delete(v4); } } //----- (00435790) -------------------------------------------------------- _DWORD *__thiscall sub_435790(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &KeyMap::`vftable'; v1[6] = 0; v1[4] = 0; v1[5] = 0; v1[3] = &PgTList::`vftable'; v1[2] = 0; *((_BYTE *)v1 + 28) = 1; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9AD0DC: using guessed type void *PgTList::`vftable'; // 9AD0EC: using guessed type void *KeyMap::`vftable'; //----- (004357D0) -------------------------------------------------------- bool __thiscall sub_4357D0(int this, _DWORD *a2) { *a2 = *(_DWORD *)(this + 8); return *(_BYTE *)(this + 1) && !*(_BYTE *)(this + 3); } //----- (00435800) -------------------------------------------------------- bool __thiscall sub_435800(int this, _DWORD *a2) { *a2 = *(_DWORD *)(this + 8); return !*(_BYTE *)(this + 1) && *(_BYTE *)(this + 3); } //----- (00435830) -------------------------------------------------------- char __thiscall sub_435830(char *this, signed int a2, _DWORD *a3) { int v4; // eax if ( a2 >= 8 ) return 0; v4 = (int)&this[16 * (a2 + 8)]; *a3 = *(_DWORD *)(v4 + 8); return *(_BYTE *)(v4 + 1); } //----- (00435860) -------------------------------------------------------- bool __thiscall sub_435860(char *this, signed int a2, _DWORD *a3) { int v3; // eax bool result; // al result = 0; if ( a2 < 8 ) { v3 = (int)&this[16 * (a2 + 8)]; *a3 = *(_DWORD *)(v3 + 8); if ( *(_BYTE *)(v3 + 1) ) { if ( !*(_BYTE *)(v3 + 3) ) result = 1; } } return result; } //----- (004358A0) -------------------------------------------------------- bool __thiscall sub_4358A0(char *this, signed int a2, _DWORD *a3) { int v3; // eax bool result; // al result = 0; if ( a2 < 8 ) { v3 = (int)&this[16 * (a2 + 8)]; *a3 = *(_DWORD *)(v3 + 8); if ( !*(_BYTE *)(v3 + 1) ) { if ( *(_BYTE *)(v3 + 3) ) result = 1; } } return result; } //----- (004358F0) -------------------------------------------------------- void *__thiscall sub_4358F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,KeyMap::KeyNode *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; //----- (00435920) -------------------------------------------------------- _DWORD *__thiscall sub_435920(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,KeyMap::KeyNode *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,KeyMap::KeyNode *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; // 9AD0CC: using guessed type void *NiTPointerListBase,KeyMap::KeyNode *>::`vftable'; //----- (004359B0) -------------------------------------------------------- int __thiscall sub_4359B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,KeyMap::KeyNode *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,KeyMap::KeyNode *>::`vftable'; return result; } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; // 9AD0CC: using guessed type void *NiTPointerListBase,KeyMap::KeyNode *>::`vftable'; //----- (00435A30) -------------------------------------------------------- void __thiscall sub_435A30(_DWORD *this) { _DWORD *v1; // edi int **i; // esi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v1 = this; for ( i = (int **)this[4]; i; i = (int **)*i ) { if ( i[2] ) operator delete(i[2]); } v3 = (_DWORD *)v1[4]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[3] + 8))(v1 + 3, v4); } v1[6] = 0; v1[4] = 0; v1[5] = 0; } //----- (00435A90) -------------------------------------------------------- int __thiscall sub_435A90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,KeyMap::KeyNode *>::`vftable'; return result; } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; // 9AD0DC: using guessed type void *PgTList::`vftable'; //----- (00435B10) -------------------------------------------------------- _DWORD *__thiscall sub_435B10(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,KeyMap::KeyNode *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0B4: using guessed type void *NiTListBase,KeyMap::KeyNode *>::`vftable'; // 9AD0DC: using guessed type void *PgTList::`vftable'; //----- (00435BA0) -------------------------------------------------------- void *__thiscall sub_435BA0(void *this, char a2) { void *v2; // esi v2 = this; sub_435490(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00435BD0) -------------------------------------------------------- HANDLE __cdecl sub_435BD0(LPCSTR lpszLongPath, int a2, int a3) { int v3; // eax CHAR v4; // cl char *v5; // eax BOOL v6; // eax HANDLE result; // eax HANDLE *v8; // ecx HANDLE v9; // edx struct _STARTUPINFOA StartupInfo; // [esp+Ch] [ebp-374h] struct _PROCESS_INFORMATION ProcessInformation; // [esp+50h] [ebp-330h] HANDLE *v12; // [esp+60h] [ebp-320h] CHAR *v13; // [esp+64h] [ebp-31Ch] CHAR CurrentDirectory[264]; // [esp+68h] [ebp-318h] CHAR v15; // [esp+170h] [ebp-210h] CHAR szShortPath[260]; // [esp+278h] [ebp-108h] v12 = (HANDLE *)a3; GetShortPathNameA(lpszLongPath, szShortPath, 0x104u); v13 = &v15; if ( a2 ) { if ( strchr(lpszLongPath, 34) ) wsprintfA(&v15, "%s %s", szShortPath, a2); else wsprintfA(&v15, "\"%s\" %s", szShortPath, a2); } else { v13 = 0; } if ( strlen(szShortPath) > 0x104 ) return 0; v3 = 0; do { v4 = szShortPath[v3]; CurrentDirectory[v3++] = v4; } while ( v4 ); v5 = strrchr(CurrentDirectory, 92); if ( !v5 ) return 0; if ( *(v5 - 1) == 58 ) ++v5; *v5 = 0; StartupInfo.cb = 68; StartupInfo.lpReserved = 0; StartupInfo.lpDesktop = 0; StartupInfo.lpTitle = 0; StartupInfo.dwX = 0; StartupInfo.dwY = 0; StartupInfo.dwXSize = 0; StartupInfo.dwYSize = 0; StartupInfo.dwXCountChars = 0; StartupInfo.dwYCountChars = 0; StartupInfo.dwFillAttribute = 0; StartupInfo.dwFlags = 1; *(_DWORD *)&StartupInfo.wShowWindow = 1; StartupInfo.lpReserved2 = 0; StartupInfo.hStdInput = 0; StartupInfo.hStdOutput = 0; StartupInfo.hStdError = 0; v6 = v13 ? CreateProcessA(0, &v15, 0, 0, 0, 0x20u, 0, CurrentDirectory, &StartupInfo, &ProcessInformation) : CreateProcessA(lpszLongPath, 0, 0, 0, 0, 0x20u, 0, CurrentDirectory, &StartupInfo, &ProcessInformation); if ( !v6 ) return 0; v8 = v12; result = ProcessInformation.hProcess; if ( v12 ) { v9 = ProcessInformation.hThread; *v12 = ProcessInformation.hProcess; v8[1] = v9; v8[2] = (HANDLE)ProcessInformation.dwProcessId; v8[3] = (HANDLE)ProcessInformation.dwThreadId; } return result; } // 435BD0: using guessed type CHAR szShortPath[260]; // 435BD0: using guessed type CHAR CurrentDirectory[264]; //----- (00435FF0) -------------------------------------------------------- bool __cdecl sub_435FF0(int a1, char *Format, va_list ArgList) { void **v3; // eax const char *v4; // eax FILE *v5; // esi struct tm *v6; // eax int v7; // edi __time32_t Time; // [esp+4h] [ebp-4h] v3 = sub_4361E0(); v4 = sub_401410((const char *)v3, (const char *)a1); v5 = fopen(v4, "a+"); if ( !v5 ) return 0; Time = _time32(0); v6 = _localtime32(&Time); sprintf( ::Format, "%04d-%02d-%02d %02d:%02d:%02d ", v6->tm_year + 1900, v6->tm_mon + 1, v6->tm_mday, v6->tm_hour, v6->tm_min, v6->tm_sec); fprintf_s(v5, ::Format); v7 = vfprintf_s(v5, Format, ArgList); fclose(v5); return v7 > 0; } //----- (004360A0) -------------------------------------------------------- bool sub_4360A0(int a1, char *Format, ...) { va_list va; // [esp+10h] [ebp+10h] va_start(va, Format); return sub_435FF0((int)"logType", Format, va); } //----- (004360E0) -------------------------------------------------------- bool sub_4360E0(int a1, char *Format, ...) { va_list va; // [esp+10h] [ebp+10h] va_start(va, Format); return sub_435FF0(a1, Format, va); } //----- (00436120) -------------------------------------------------------- bool sub_436120(int a1, char *Format, ...) { int v2; // eax va_list va; // [esp+10h] [ebp+10h] va_start(va, Format); v2 = a1; if ( *(_DWORD *)(a1 + 20) >= 0x10u ) v2 = *(_DWORD *)a1; return sub_435FF0(v2, Format, va); } //----- (004361E0) -------------------------------------------------------- void **sub_4361E0() { CHAR *v0; // eax void **result; // eax if ( !dword_AA9904 ) { if ( !byte_ACAD5C ) sub_420410(); v0 = (CHAR *)sub_401410(byte_ACAC58, "Log\\"); sub_4018E0(&dword_AA98F4, v0, strlen(v0)); } result = (void **)dword_AA98F4; if ( (unsigned int)dword_AA9908 < 0x10 ) result = &dword_AA98F4; return result; } // AA9904: using guessed type int dword_AA9904; // AA9908: using guessed type int dword_AA9908; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00436240) -------------------------------------------------------- _DWORD *__thiscall sub_436240(_DWORD *this) { _DWORD *result; // eax result = this; *this = &LuaArgument::`vftable'; this[1] = 0; this[2] = 0; return result; } // 9AD464: using guessed type void *LuaArgument::`vftable'; //----- (00436260) -------------------------------------------------------- void __thiscall sub_436260(_DWORD *this) { *this = &LuaArgument::`vftable'; } // 9AD464: using guessed type void *LuaArgument::`vftable'; //----- (00436270) -------------------------------------------------------- int __stdcall sub_436270(int a1) { return 0; } //----- (00436280) -------------------------------------------------------- void __thiscall sub_436280(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi bool v3; // zf v2 = this; v3 = this[1] == 1; this[2] = -1; if ( v3 ) { if ( sub_75B690(a2, -1) ) v2[2] = (signed int)sub_75B9C0(a2, -1, 0); sub_75B1F0((int)a2, -2); } } //----- (004362D0) -------------------------------------------------------- int __thiscall sub_4362D0(_DWORD *this) { return this[1]; } //----- (004362E0) -------------------------------------------------------- int __thiscall sub_4362E0(_DWORD *this) { return this[2]; } //----- (004362F0) -------------------------------------------------------- bool __thiscall sub_4362F0(int *this, char *a2) { int *v2; // esi _DWORD *v3; // eax bool result; // al v2 = this; (*(void (**)(void))(*this + 16))(); v3 = (_DWORD *)sub_75EA50(); v2[2] = (int)v3; sub_75F120(v3); (*(void (__thiscall **)(int *))(*v2 + 20))(v2); if ( sub_75E0A0(v2[2], a2, 0) ) result = 0; else result = sub_75CC50(v2[2], 0, 0, 0, 0, 0) == 0; return result; } //----- (00436360) -------------------------------------------------------- bool __thiscall sub_436360(_DWORD **this, void *a2, int a3) { _DWORD **v3; // edi int v4; // ebx int v5; // eax int v6; // eax bool v7; // bl v3 = this; sub_75C2C0(this[2], a2); v4 = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)a3 + 4))(a3, v3[2]); v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 12))(a3); v6 = sub_75CC50((int)v3[2], v4, v5, 0, 0, 0); v7 = v6 == 0; if ( !v6 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)a3 + 8))(a3, v3[2]); return v7; } //----- (004363E0) -------------------------------------------------------- int __thiscall sub_4363E0(int *this) { int *v1; // esi int result; // eax v1 = this; result = this[2]; if ( result ) result = sub_75F6A0(this[2]); v1[2] = 0; return result; } //----- (00436400) -------------------------------------------------------- int *__thiscall sub_436400(int *this, void *a2, int a3) { int *v3; // esi v3 = this; sub_75C1C0(this[2], a3, 0); return sub_75C710(v3[2], a2); } //----- (00436430) -------------------------------------------------------- int __cdecl sub_436430(_DWORD *a1) { _BYTE *v1; // eax bool v3; // [esp+0h] [ebp-4h] v3 = sub_75BBF0(a1, 1) != 0; v1 = (_BYTE *)sub_46F100(); if ( v1 ) sub_46F450(v1, v3); return 0; } //----- (00436470) -------------------------------------------------------- signed int __cdecl sub_436470(int a1) { int v1; // eax v1 = sub_680BE0((int)byte_AD9238); sub_75C040(a1, v1); return 1; } //----- (004364A0) -------------------------------------------------------- signed int __cdecl sub_4364A0(int a1) { int v1; // eax v1 = sub_680CC0((int)byte_AD9238); sub_75C040(a1, v1); return 1; } //----- (004364D0) -------------------------------------------------------- int __cdecl sub_4364D0(_DWORD *a1) { __int16 v1; // ax char *v2; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); if ( v2 ) sub_6658E0(dword_AD8C90, (int)v2); return 0; } //----- (00436510) -------------------------------------------------------- int __cdecl sub_436510(_DWORD *a1) { __int16 v1; // di signed int v2; // esi char *v3; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_75BA70(a1, 2, 0); v3 = sub_664AB0(dword_AD8C90, v1); if ( v3 ) (*(void (__thiscall **)(char *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 328))(v3, v2, 0, 0); return 0; } //----- (00436560) -------------------------------------------------------- signed int __cdecl sub_436560(_DWORD *a1) { __int16 v1; // ax char *v2; // esi signed int result; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); if ( v2 ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 248))(v2) || !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 256))(v2) ) { sub_75C250((int)a1, 1); result = 1; } else { sub_75C250((int)a1, 0); result = 1; } } else { sub_75C250((int)a1, 0); result = 1; } return result; } //----- (004365F0) -------------------------------------------------------- signed int __cdecl sub_4365F0(_DWORD *a1) { __int16 v1; // ax char *v2; // eax int v4; // [esp-4h] [ebp-Ch] int v5; // [esp+4h] [ebp-4h] v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); v4 = 0; if ( v2 ) { sub_65B8B0(v2, 0, (unsigned int *)&v5, 0); if ( v5 != 300000 && v5 != 600000 && v5 != 700000 ) { sub_75C250((int)a1, 0); return 1; } v4 = 1; } sub_75C250((int)a1, v4); return 1; } //----- (00436670) -------------------------------------------------------- signed int __cdecl sub_436670(_DWORD *a1) { char v1; // di _DWORD **v2; // eax int v3; // eax v1 = sub_75BA70(a1, 1, 0); v2 = (_DWORD **)sub_6CD770(); v3 = sub_74BA80(v2, v1); sub_75C040((int)a1, v3); return 1; } //----- (004366B0) -------------------------------------------------------- int __cdecl sub_4366B0(_DWORD *a1) { bool v1; // bl _DWORD *v2; // ecx v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( v1 ) { sub_4A50F0(v2); return 0; } sub_4A5110(v2); } return 0; } //----- (00436700) -------------------------------------------------------- int __cdecl sub_436700(_DWORD *a1) { bool v1; // bl _DWORD *v2; // ecx v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( v1 ) { sub_4A6290(v2); return 0; } sub_4A4230(v2); } return 0; } //----- (00436750) -------------------------------------------------------- int __cdecl sub_436750(_DWORD *a1) { bool v1; // bl _DWORD **v2; // ecx v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( v1 ) { sub_4A6BA0(v2); return 0; } sub_4A5020(v2); } return 0; } //----- (004367A0) -------------------------------------------------------- int __cdecl sub_4367A0(_DWORD *a1) { bool v1; // bl _DWORD *v2; // ecx v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( v1 ) { sub_4A5B30(v2); return 0; } sub_4A5B60(v2); } return 0; } //----- (004367F0) -------------------------------------------------------- int __cdecl sub_4367F0(_DWORD *a1) { bool v1; // bl _DWORD *v2; // ecx v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( v1 ) { sub_4A5090(v2, 0, 1); return 0; } sub_4A50D0(v2); } return 0; } //----- (00436840) -------------------------------------------------------- int sub_436840() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v1 = v0; if ( v0 ) { sub_4A6C70(v0, 1); sub_4A6D20(v1); sub_4A6DA0(v1); } return 0; } //----- (00436880) -------------------------------------------------------- signed int __cdecl sub_436880(_DWORD *a1) { int v1; // esi unsigned __int8 v2; // al signed int result; // eax v1 = sub_75BDE0(a1, 1); if ( v1 ) { sub_75C250((int)a1, 1); v2 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 260))(v1); sub_75C250((int)a1, v2); result = 2; } else { sub_75C250((int)a1, 0); result = 1; } return result; } //----- (004368E0) -------------------------------------------------------- signed int __cdecl sub_4368E0(_DWORD *a1) { int v1; // edi int v2; // ebx _DWORD *v3; // eax volatile LONG *v4; // edi float v5; // ST54_4 double v7; // [esp+14h] [ebp-18h] bool v8; // [esp+1Ch] [ebp-10h] int v9; // [esp+20h] [ebp-Ch] int v10; // [esp+24h] [ebp-8h] int v11; // [esp+28h] [ebp-4h] v1 = sub_75BDE0(a1, 1); v2 = sub_75BA70(a1, 2, 0); v9 = sub_75BA70(a1, 3, 0); v10 = sub_75BA70(a1, 4, 0); v11 = sub_75BA70(a1, 5, 0); v8 = sub_75BBF0(a1, 6) != 0; v7 = sub_75B9C0(a1, 7, 0); if ( !sub_75B570(a1, v1) ) v1 = 0; v3 = sub_8F62B0(0, 0, 0, 255); v4 = sub_8F3D50((int)v3, v2, v9, v10, v11, v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, bool))(*v4 + 240))(v4, v8); v5 = v7; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v4 + 276))(v4, LODWORD(v5)); sub_75C270((int)a1, (int)v4); sub_8F82A0(&unk_BA6B10, v4); return 1; } //----- (004369E0) -------------------------------------------------------- _DWORD *__thiscall sub_4369E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &LuaScript::`vftable'; v1[2] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9AD48C: using guessed type void *LuaScript::`vftable'; //----- (00436A10) -------------------------------------------------------- LONG __thiscall sub_436A10(_DWORD *this) { *this = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (00436A30) -------------------------------------------------------- signed int __cdecl sub_436A30(int a1) { sub_75C000(a1, flt_ACCFCC); return 1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00436A60) -------------------------------------------------------- signed int __cdecl sub_436A60(int a1) { int v1; // eax int v2; // eax int v3; // eax int v4; // eax v1 = sub_680BE0((int)byte_AD9238); sub_75C040(a1, v1); v2 = sub_680CC0((int)byte_AD9238); sub_75C040(a1, v2); v3 = sub_680BF0((int)byte_AD9238); sub_75C040(a1, v3); v4 = sub_680CD0((int)byte_AD9238); sub_75C040(a1, v4); sub_75C040(a1, *(signed int *)dword_AD9E30); return 1; } //----- (00436AD0) -------------------------------------------------------- signed int __cdecl sub_436AD0(int a1) { sub_75C040(a1, *(signed int *)dword_AD9E30); return 1; } //----- (00436AF0) -------------------------------------------------------- int __cdecl sub_436AF0(_DWORD *a1) { float *v1; // edi int v2; // ebx float v3; // ST34_4 float v4; // ST30_4 int v6; // [esp+18h] [ebp-58h] int v7; // [esp+24h] [ebp-4Ch] int v8; // [esp+28h] [ebp-48h] int v9; // [esp+2Ch] [ebp-44h] int v10; // [esp+30h] [ebp-40h] int v11; // [esp+34h] [ebp-3Ch] int v12; // [esp+38h] [ebp-38h] int v13; // [esp+3Ch] [ebp-34h] int v14; // [esp+40h] [ebp-30h] float v15; // [esp+44h] [ebp-2Ch] char v16; // [esp+48h] [ebp-28h] v1 = (float *)sub_75BA70(a1, 1, 0); v2 = sub_75BA70(a1, 2, 0); v14 = sub_75BA70(a1, 3, 0); v13 = sub_75BA70(a1, 4, 0); v15 = COERCE_FLOAT(sub_75BA70(a1, 5, 0)); v3 = (double)v13; v4 = (double)v14; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v6); v15 = (flt_BA45B4 + flt_BA45B4) * (double)LOBYTE(v15) / 180.0; sub_85D810((float *)&v16, v15); sub_85DA90((float *)&v16, (float *)&v10, (float *)&dword_AB4FE8); v7 = v10; v8 = v11; v9 = v12; sub_6664B0(dword_AD8C90, v1, v2, (int)&v6, (int)&v7, 0, 0); return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (00436BE0) -------------------------------------------------------- int __cdecl sub_436BE0(_DWORD *a1) { __int16 v1; // di signed int v2; // ebx float v3; // ST28_4 float v4; // ST24_4 char *v5; // eax char *v6; // esi bool v7; // zf void (__thiscall *v8)(char *, signed int); // eax int v10; // [esp+18h] [ebp-14h] int v11; // [esp+24h] [ebp-8h] int v12; // [esp+28h] [ebp-4h] v1 = sub_75BA70(a1, 1, 0); v11 = sub_75BA70(a1, 2, 0); v12 = sub_75BA70(a1, 3, 0); v2 = sub_75BA70(a1, 4, 0); v3 = (double)v12; v4 = (double)v11; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v10); v5 = sub_664AB0(dword_AD8C90, v1); v6 = v5; if ( v5 ) { v7 = (*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 224))(v5) == v2; v8 = *(void (__thiscall **)(char *, signed int))(*(_DWORD *)v6 + 228); LOBYTE(v11) = !v7; v8(v6, v2); (*(void (__thiscall **)(char *, int *, int, float *, signed int))(*(_DWORD *)v6 + 232))( v6, &v10, v11, &flt_AB399C, 1); } return 0; } // AB399C: using guessed type float flt_AB399C; //----- (00436CA0) -------------------------------------------------------- signed int __cdecl sub_436CA0(_DWORD *a1) { __int16 v1; // ax char *v2; // eax signed int result; // eax float v4; // [esp+4h] [ebp-Ch] float v5; // [esp+8h] [ebp-8h] v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); if ( v2 ) { (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v2 + 200))(v2, &v4); sub_75C250((int)a1, 1); sub_75C040((int)a1, (signed int)v4); sub_75C040((int)a1, (signed int)v5); result = 3; } else { sub_75C250((int)a1, 0); result = 1; } return result; } //----- (00436D20) -------------------------------------------------------- signed int __cdecl sub_436D20(_DWORD *a1) { __int16 v1; // ax char *v2; // eax unsigned __int8 v3; // al v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); if ( v2 ) { switch ( sub_652070(v2) ) { case 1: case 2: case 3: case 4: case 5: v3 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v3 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v3 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v3 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 21; break; case 0x1A: case 0x1B: v3 = 26; break; default: v3 = 0; break; } sub_75C040((int)a1, v3); } return 1; } //----- (00436E00) -------------------------------------------------------- signed int __cdecl sub_436E00(_DWORD *a1) { __int16 v1; // ax char *v2; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_664AB0(dword_AD8C90, v1); if ( v2 ) sub_75C040((int)a1, (unsigned __int8)v2[1924]); else sub_75BFE0((int)a1); return 1; } //----- (00436E50) -------------------------------------------------------- signed int __cdecl sub_436E50(int a1) { sub_75C040(a1, *((unsigned __int16 *)dword_AD8EBC + 274)); return 1; } //----- (00436E80) -------------------------------------------------------- signed int __cdecl sub_436E80(_DWORD *a1) { signed int v1; // edi signed int result; // eax float v3; // ST1C_4 float v4; // ST18_4 int v5; // [esp+14h] [ebp-14h] int v6; // [esp+20h] [ebp-8h] int v7; // [esp+24h] [ebp-4h] v6 = sub_75BA70(a1, 1, 0); v7 = sub_75BA70(a1, 2, 0); v1 = sub_75BA70(a1, 3, 0); if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { v3 = (double)v7; v4 = (double)v6; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v5); if ( dword_AD8EBC ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 228))(v1); *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, &v5); sub_67D830((int)dword_AD8EBC); } result = 0; } else { sub_75C250((int)a1, 0); result = 1; } return result; } //----- (00436F50) -------------------------------------------------------- int __cdecl sub_436F50(_DWORD *a1) { bool v1; // bl _DWORD *v2; // eax v1 = sub_75BBF0(a1, 1) != 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( !v1 ) sub_4E3C80(v2); byte_B92005 = v1; } return 0; } // B92005: using guessed type char byte_B92005; //----- (00436FA0) -------------------------------------------------------- int __cdecl sub_436FA0(_DWORD *a1) { byte_B9202C = sub_75BBF0(a1, 1) != 0; return 0; } // B9202C: using guessed type char byte_B9202C; //----- (00436FC0) -------------------------------------------------------- int __cdecl sub_436FC0(_DWORD *a1) { bool v1; // bl int v2; // eax _DWORD *v3; // esi v1 = sub_75BBF0(a1, 1) != 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD **)(v2 + 728); if ( v3 ) { if ( v1 ) { sub_5B21E0(*(_DWORD **)(v2 + 728)); sub_8F82A0(&unk_BA6B10, v3); return 0; } sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 728)); } } return 0; } //----- (00437030) -------------------------------------------------------- int __cdecl sub_437030(_DWORD *a1) { bool v1; // bl int v2; // eax _DWORD *v3; // eax v1 = sub_75BBF0(a1, 1) != 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD **)(v2 + 1040); if ( v3 ) { if ( v1 ) { sub_8F82A0(&unk_BA6B10, v3); return 0; } sub_8F86A0(&unk_BA6B10, v3); } } return 0; } //----- (00437090) -------------------------------------------------------- int __cdecl sub_437090(_DWORD *a1) { int v1; // ecx int v2; // eax _DWORD *v3; // ecx int v5; // [esp+0h] [ebp-4h] v5 = v1; LOBYTE(v5) = sub_75BBF0(a1, 1) != 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD **)(v2 + 572); if ( v3 ) sub_56B670(v3, v5); } return 0; } //----- (004370E0) -------------------------------------------------------- int __cdecl sub_4370E0(_DWORD *a1) { byte_B92003 = sub_75BBF0(a1, 1) != 0; return 0; } // B92003: using guessed type char byte_B92003; //----- (00437100) -------------------------------------------------------- int __cdecl sub_437100(_DWORD *a1) { byte_B92004 = sub_75BBF0(a1, 1) != 0; return 0; } // B92004: using guessed type char byte_B92004; //----- (00437120) -------------------------------------------------------- int __cdecl sub_437120(_DWORD *a1) { byte_B92000 = sub_75BBF0(a1, 1) != 0; return 0; } // B92000: using guessed type char byte_B92000; //----- (00437140) -------------------------------------------------------- int sub_437140() { int v0; // eax _DWORD **v1; // ecx v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) { v1 = *(_DWORD ***)(v0 + 980); if ( v1 ) sub_615820(v1); } if ( dword_AD8EBC ) sub_67D370(dword_AD8EBC, 0); return 0; } //----- (00437180) -------------------------------------------------------- int sub_437180() { int v0; // eax void *v1; // esi v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) { v1 = *(void **)(v0 + 712); if ( sub_8FA3D0(&unk_BA6B10, *(volatile LONG **)(v0 + 712)) ) sub_8F2A80(v1, 5, 21, 0); } return 0; } //----- (004371C0) -------------------------------------------------------- int __cdecl sub_4371C0(_DWORD *a1) { BOOL v1; // eax bool v2; // bl _DWORD *v3; // eax _DWORD **v4; // esi v1 = sub_75BBF0(a1, 1); v2 = v1 != 0; byte_B9202D = v1 != 0; v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = (_DWORD **)v3; if ( v3 ) { if ( v2 ) { sub_4A5B80(v3); *((_BYTE *)sub_4388B0() + 18) = 1; return 0; } sub_4A5C20((_DWORD **)v3); sub_4A5BA0(v4); } return 0; } // B9202D: using guessed type char byte_B9202D; //----- (00437230) -------------------------------------------------------- int sub_437230() { int v0; // eax float *v1; // ecx v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) { v1 = *(float **)(v0 + 4836); if ( v1 ) sub_6B4D30(v1, flt_ACCFCC, 0.5, 4, 1); } return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00437270) -------------------------------------------------------- int __cdecl sub_437270(_DWORD *a1) { int v1; // eax int v2; // esi float v3; // ST34_4 float v4; // ST30_4 float *v5; // eax float v6; // edx double v7; // st7 double v8; // st7 float v9; // ST38_4 float v10; // ST34_4 float *v11; // ecx float v13; // [esp+18h] [ebp-38h] float v14; // [esp+1Ch] [ebp-34h] float v15; // [esp+20h] [ebp-30h] int v16; // [esp+24h] [ebp-2Ch] float v17; // [esp+28h] [ebp-28h] float v18; // [esp+2Ch] [ebp-24h] float v19; // [esp+30h] [ebp-20h] float v20; // [esp+34h] [ebp-1Ch] float v21; // [esp+38h] [ebp-18h] int v22; // [esp+3Ch] [ebp-14h] int v23; // [esp+40h] [ebp-10h] int v24; // [esp+44h] [ebp-Ch] int v25; // [esp+48h] [ebp-8h] int v26; // [esp+4Ch] [ebp-4h] v25 = sub_75BA70(a1, 1, 0); v26 = sub_75BA70(a1, 2, 0); v23 = sub_75BA70(a1, 3, 0); v24 = sub_75BA70(a1, 4, 0); v22 = sub_75BA70(a1, 5, 0); v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = v1; if ( v1 && *(_DWORD *)(v1 + 4836) ) { v3 = (double)v26; v4 = (double)v25; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v16); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 676))(&v13); v5 = *(float **)(v2 + 4836); v19 = *(float *)&v16 - v13; v20 = v17 - v14; v6 = v20; v7 = v18 - v15; v5[11] = v19; v5[12] = v6; v21 = v7; v8 = (double)v24; v5[13] = v21; v9 = v8; v10 = (double)v23; sub_6B4690(*(void **)(v2 + 4836), v10, v9); v11 = *(float **)(v2 + 4836); v11[16] = (double)v22; sub_6B4D30(v11, flt_ACCFCC, 0.5, 3, 1); } return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004373A0) -------------------------------------------------------- int __cdecl sub_4373A0(_DWORD *a1) { int v1; // esi int v2; // eax float *v3; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(float **)(v2 + 4836); if ( v3 ) sub_6B4D30(v3, flt_ACCFCC, 0.5, v1, 1); } return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00437400) -------------------------------------------------------- int __cdecl sub_437400(_DWORD *a1) { float v1; // ST30_4 float v2; // ST2C_4 float v3; // ST28_4 int result; // eax v1 = sub_75B9C0(a1, 1, 0); v2 = sub_75B9C0(a1, 2, 0); v3 = sub_75B9C0(a1, 3, 0); sub_403D20((int)&unk_B66FB8, v1); flt_B66FEC = v2; result = 0; flt_B66FF8 = v3; return result; } // B66FEC: using guessed type float flt_B66FEC; // B66FF8: using guessed type float flt_B66FF8; //----- (00437460) -------------------------------------------------------- int __cdecl sub_437460(_DWORD *a1) { void *v1; // eax _DWORD *v2; // eax void *v3; // ecx void *v5; // [esp+8h] [ebp-2Ch] int v6; // [esp+18h] [ebp-1Ch] unsigned int v7; // [esp+1Ch] [ebp-18h] int v8; // [esp+30h] [ebp-4h] v7 = 15; v6 = 0; LOBYTE(v5) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v5, v1, strlen((const char *)v1)); v8 = 0; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = v5; if ( v7 < 0x10 ) v3 = &v5; sub_492060(v2, (int)v3); } if ( v7 >= 0x10 ) operator delete(v5); return 0; } //----- (00437530) -------------------------------------------------------- int __cdecl sub_437530(_DWORD *a1) { void *v1; // eax int v2; // esi const char *v3; // eax int v4; // eax void *v6; // [esp+Ch] [ebp-2Ch] int v7; // [esp+1Ch] [ebp-1Ch] unsigned int v8; // [esp+20h] [ebp-18h] int v9; // [esp+34h] [ebp-4h] v8 = 15; v7 = 0; LOBYTE(v6) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v6, v1, strlen((const char *)v1)); v9 = 0; v2 = sub_75BA70(a1, 2, 0); v3 = (const char *)v6; if ( v8 < 0x10 ) v3 = (const char *)&v6; v4 = sub_438BD0(v3); sub_44DD70(v4, 0, v2); if ( v8 >= 0x10 ) operator delete(v6); return 0; } //----- (00437600) -------------------------------------------------------- int __cdecl sub_437600(_DWORD *a1) { void *v1; // eax unsigned __int8 v2; // bl float v3; // ST28_4 float v4; // ST24_4 char *v5; // ecx float *v6; // eax int v7; // esi int v8; // eax int v10; // [esp+18h] [ebp-74h] int v11; // [esp+1Ch] [ebp-70h] int v12; // [esp+20h] [ebp-6Ch] int v13; // [esp+24h] [ebp-68h] int v14; // [esp+28h] [ebp-64h] int v15; // [esp+2Ch] [ebp-60h] int v16; // [esp+30h] [ebp-5Ch] float v17; // [esp+34h] [ebp-58h] float v18; // [esp+38h] [ebp-54h] char v19; // [esp+3Ch] [ebp-50h] char *Src; // [esp+60h] [ebp-2Ch] int v21; // [esp+70h] [ebp-1Ch] unsigned int v22; // [esp+74h] [ebp-18h] int v23; // [esp+88h] [ebp-4h] v22 = 15; v21 = 0; LOBYTE(Src) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&Src, v1, strlen((const char *)v1)); v23 = 0; v18 = COERCE_FLOAT(sub_75BA70(a1, 2, 0)); v16 = sub_75BA70(a1, 3, 0); v2 = sub_75BA70(a1, 4, 0); v17 = sub_75B9C0(a1, 5, 0); v3 = (double)v16; v4 = (double)SLODWORD(v18); sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v10); v18 = (flt_BA45B4 + flt_BA45B4) * (double)v2 / 180.0; sub_85D810((float *)&v19, v18); sub_85DA90((float *)&v19, (float *)&v13, (float *)&dword_AB4FE8); v5 = Src; if ( v22 < 0x10 ) v5 = (char *)&Src; v6 = sub_6AE0A0(&unk_B91250, v5, v10, v11, v12, v13, v14, v15, COERCE_INT(0.0), 1); v7 = (int)v6; if ( v6 ) { v8 = *((_DWORD *)v6 + 28); if ( v8 ) { v17 = fabs(v17); *(float *)(v8 + 100) = v17; } sub_6AACF0(v7); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 60))(v7, LODWORD(flt_ACCFCC)); } if ( v22 >= 0x10 ) operator delete(Src); return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // ACCFCC: using guessed type float flt_ACCFCC; // BA45B4: using guessed type float flt_BA45B4; //----- (004377C0) -------------------------------------------------------- int __cdecl sub_4377C0(_DWORD *a1) { void *v1; // eax unsigned __int8 v2; // bl float v3; // ST1C_4 float v4; // ST18_4 void *v5; // esi void *v6; // edi char *v7; // eax char *v8; // eax float v9; // esi int v10; // ebx char v12; // [esp+1Ch] [ebp-70h] int v13; // [esp+28h] [ebp-64h] int v14; // [esp+2Ch] [ebp-60h] int v15; // [esp+30h] [ebp-5Ch] int v16; // [esp+34h] [ebp-58h] float v17; // [esp+38h] [ebp-54h] char v18; // [esp+3Ch] [ebp-50h] void *v19; // [esp+60h] [ebp-2Ch] int v20; // [esp+70h] [ebp-1Ch] unsigned int v21; // [esp+74h] [ebp-18h] int v22; // [esp+88h] [ebp-4h] v21 = 15; v20 = 0; LOBYTE(v19) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v19, v1, strlen((const char *)v1)); v22 = 0; v17 = COERCE_FLOAT(sub_75BA70(a1, 2, 0)); v16 = sub_75BA70(a1, 3, 0); v2 = sub_75BA70(a1, 4, 0); v3 = (double)v16; v4 = (double)SLODWORD(v17); sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v13); v17 = (flt_BA45B4 + flt_BA45B4) * (double)v2 / 180.0; sub_85D810((float *)&v18, v17); sub_85DA90((float *)&v18, (float *)&v12, (float *)&dword_AB4FE8); v5 = v19; v6 = v19; if ( v21 < 0x10 ) { v6 = &v19; v5 = &v19; } if ( !byte_ACAD5C ) sub_420410(); v7 = sub_7549E0("%s\\%s.kfm", v5, v6); v8 = (char *)sub_401410(byte_ACA628, v7); v9 = COERCE_FLOAT(sub_803770(v8, 0, 1, 0)); v17 = v9; if ( v9 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v9) + 4)); if ( v9 != 0.0 ) { v10 = *(_DWORD *)(LODWORD(v9) + 12); v16 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); LOBYTE(v22) = 2; if ( v10 ) { *(_DWORD *)(v10 + 88) = v13; *(_DWORD *)(v10 + 92) = v14; *(_DWORD *)(v10 + 96) = v15; sub_8CF390((float *)&v12, (float *)&v18); qmemcpy((void *)(v10 + 52), &v18, 0x24u); sub_85BED0((_DWORD **)v10, 0.0, 1); sub_85C4D0((_DWORD *)v10); sub_85C6F0((_DWORD *)v10); *(_WORD *)(v10 + 28) &= 0xFFFEu; (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)dword_ADB67C + 116))(v10, 0); v9 = v17; } sub_4106E0((_DWORD *)LODWORD(v9), 101000); sub_803810((float *)LODWORD(v9), 0.0); LOBYTE(v22) = 1; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); } LOBYTE(v22) = 0; if ( v9 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v9) + 4)) ) (**(void (__thiscall ***)(float, signed int))LODWORD(v9))(COERCE_FLOAT(LODWORD(v9)), 1); if ( v21 >= 0x10 ) operator delete(v19); return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // ACAD5C: using guessed type char byte_ACAD5C; // ADB67C: using guessed type int dword_ADB67C; // BA45B4: using guessed type float flt_BA45B4; //----- (00437A20) -------------------------------------------------------- int __cdecl sub_437A20(_DWORD *a1) { void *v1; // eax bool v2; // zf void *v3; // eax bool v4; // bl void (__thiscall ***v5)(_DWORD, signed int); // esi int v7; // [esp+10h] [ebp-30h] void *v8; // [esp+14h] [ebp-2Ch] int v9; // [esp+24h] [ebp-1Ch] unsigned int v10; // [esp+28h] [ebp-18h] int v11; // [esp+3Ch] [ebp-4h] v10 = 15; v9 = 0; LOBYTE(v8) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v8, v1, strlen((const char *)v1)); v11 = 0; v2 = sub_75BBF0(a1, 2) == 0; v3 = v8; v4 = !v2; if ( v10 < 0x10 ) v3 = &v8; sub_68F1B0((int)byte_ADB468, (int)a1, &v7, (int)v3); if ( v7 ) { if ( v4 ) *(_WORD *)(v7 + 28) &= 0xFFFEu; else *(_WORD *)(v7 + 28) |= 1u; v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v5 ) (**v5)(v5, 1); } } if ( v10 >= 0x10 ) operator delete(v8); return 0; } //----- (00437B30) -------------------------------------------------------- int __cdecl sub_437B30(_DWORD *a1) { void *v1; // eax const char *v2; // eax int v3; // eax char *v4; // edi int v5; // esi int v6; // eax char *v7; // eax unsigned int v8; // esi void **v9; // edi unsigned __int8 *v10; // eax void **v11; // eax int v13; // [esp+10h] [ebp-6Ch] signed int v14; // [esp+14h] [ebp-68h] void *v15; // [esp+18h] [ebp-64h] int v16; // [esp+28h] [ebp-54h] unsigned int v17; // [esp+2Ch] [ebp-50h] char *v18; // [esp+34h] [ebp-48h] int v19; // [esp+44h] [ebp-38h] unsigned int v20; // [esp+48h] [ebp-34h] void *v21; // [esp+50h] [ebp-2Ch] int v22; // [esp+60h] [ebp-1Ch] unsigned int v23; // [esp+64h] [ebp-18h] int v24; // [esp+78h] [ebp-4h] v17 = 15; v16 = 0; LOBYTE(v15) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v15, v1, strlen((const char *)v1)); v24 = 0; v14 = sub_75BA70(a1, 2, 0); v2 = (const char *)v15; if ( v17 < 0x10 ) v2 = (const char *)&v15; v13 = sub_438BD0(v2); v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, (void *)(v13 + 34), strlen((const char *)(v13 + 34))); LOBYTE(v24) = 1; v3 = sub_417B90((unsigned __int8 *)&v18, "%s", 0x200000000ui64); v4 = v18; v5 = v3; if ( v20 < 0x10 ) v4 = (char *)&v18; v23 = 15; v22 = 0; LOBYTE(v21) = 0; sub_4018E0(&v21, &unk_9AD157, 0); LOBYTE(v24) = 2; if ( v5 != -1 ) { v6 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v7 = sub_7549E0(v4, v6); sub_4018E0(&v21, v7, strlen(v7)); } v8 = v23; v9 = (void **)v21; v10 = (unsigned __int8 *)v21; if ( v23 < 0x10 ) v10 = (unsigned __int8 *)&v21; if ( sub_40C0B0(v10, (unsigned __int8 *)&unk_9AD173, 0) || v22 != 0 ) { v11 = v9; if ( v8 < 0x10 ) v11 = &v21; sub_44DD70(v13, v11, v14); } else { sub_44DD70(v13, 0, v14); } if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v17 >= 0x10 ) operator delete(v15); return 0; } //----- (00437D30) -------------------------------------------------------- int __cdecl sub_437D30(_DWORD *a1) { void *v1; // eax int v2; // esi const char *v3; // eax int v4; // edi _DWORD **v5; // esi int v7; // [esp+Ch] [ebp-34h] signed int v8; // [esp+10h] [ebp-30h] void *v9; // [esp+14h] [ebp-2Ch] int v10; // [esp+24h] [ebp-1Ch] unsigned int v11; // [esp+28h] [ebp-18h] int v12; // [esp+3Ch] [ebp-4h] v8 = sub_75BA70(a1, 1, 0); v11 = 15; v10 = 0; LOBYTE(v9) = 0; v1 = (void *)sub_75BC70(a1, 2, 0); sub_4018E0(&v9, v1, strlen((const char *)v1)); v12 = 0; LOBYTE(v7) = sub_75BBF0(a1, 3) != 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = (const char *)v9; if ( v11 < 0x10 ) v3 = (const char *)&v9; v4 = sub_438BD0(v3); if ( v4 ) { v5 = *(_DWORD ***)(v2 + 980); if ( v5 ) { sub_615820(v5); sub_6177C0(v5, v8, (LPCSTR)(v4 + 34), v7); sub_8F82A0(&unk_BA6B10, v5); } } } if ( v11 >= 0x10 ) operator delete(v9); return 0; } //----- (00437E50) -------------------------------------------------------- signed int __cdecl sub_437E50(_DWORD *a1) { void *v1; // eax int v2; // esi signed int result; // eax char v4; // [esp-1Ch] [ebp-5Ch] int v5; // [esp-18h] [ebp-58h] int v6; // [esp-14h] [ebp-54h] int v7; // [esp-10h] [ebp-50h] unsigned int v8; // [esp-Ch] [ebp-4Ch] int v9; // [esp-8h] [ebp-48h] int v10; // [esp-4h] [ebp-44h] char *v11; // [esp+10h] [ebp-30h] void *v12; // [esp+14h] [ebp-2Ch] int v13; // [esp+24h] [ebp-1Ch] unsigned int v14; // [esp+28h] [ebp-18h] int v15; // [esp+3Ch] [ebp-4h] v14 = 15; v13 = 0; LOBYTE(v12) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v12, v1, strlen((const char *)v1)); v11 = &v4; v9 = 15; v8 = 0; v15 = 0; v4 = 0; sub_4017F0((const void **)&v4, (const void **)&v12, 0, (void *)0xFFFFFFFF); v2 = sub_8FA4A0(&unk_BA6B10, v4, v5, v6, v7, v8, v9, v10); if ( v2 ) { sub_75C250((int)a1, 1); sub_75C270((int)a1, v2); if ( v14 >= 0x10 ) operator delete(v12); result = 2; } else { sub_75C250((int)a1, 0); if ( v14 >= 0x10 ) operator delete(v12); result = 1; } return result; } //----- (00437F50) -------------------------------------------------------- signed int __cdecl sub_437F50(_DWORD *a1) { int v1; // edi void *v2; // eax int v3; // eax volatile LONG *v4; // edi void *v5; // eax int v7; // [esp+10h] [ebp-40h] int v8; // [esp+14h] [ebp-3Ch] bool v9; // [esp+18h] [ebp-38h] int v10; // [esp+1Ch] [ebp-34h] int v11; // [esp+20h] [ebp-30h] void *v12; // [esp+24h] [ebp-2Ch] int v13; // [esp+34h] [ebp-1Ch] unsigned int v14; // [esp+38h] [ebp-18h] int v15; // [esp+4Ch] [ebp-4h] v1 = sub_75BDE0(a1, 1); v10 = sub_75BA70(a1, 2, 0); v11 = sub_75BA70(a1, 3, 0); v7 = sub_75BA70(a1, 4, 0); v8 = sub_75BA70(a1, 5, 0); v9 = sub_75BBF0(a1, 6) != 0; v2 = (void *)sub_75BC70(a1, 7, 0); v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4018E0(&v12, v2, strlen((const char *)v2)); v15 = 0; if ( !sub_75B570(a1, v1) ) v1 = 0; v3 = sub_421050(0); v4 = sub_8F4A20(v10, v11, v7, v8, v3, v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, bool))(*v4 + 240))(v4, v9); (*(void (__thiscall **)(volatile LONG *, signed int))(*v4 + 256))(v4, 1); v5 = v12; if ( v14 < 0x10 ) v5 = &v12; (*(void (__thiscall **)(volatile LONG *, void *))(*v4 + 472))(v4, v5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v4 + 488))(v4, 5); sub_75C270((int)a1, (int)v4); if ( v14 >= 0x10 ) operator delete(v12); return 1; } //----- (004380D0) -------------------------------------------------------- signed int __cdecl sub_4380D0(_DWORD *a1) { int v1; // ebx void *v2; // edi int *v3; // eax _DWORD *v4; // eax volatile LONG *v5; // ebx int v6; // eax volatile LONG *v7; // edi void *v8; // eax bool v10; // [esp+10h] [ebp-40h] signed int v11; // [esp+14h] [ebp-3Ch] signed int v12; // [esp+18h] [ebp-38h] signed int v13; // [esp+1Ch] [ebp-34h] signed int v14; // [esp+20h] [ebp-30h] void *v15; // [esp+24h] [ebp-2Ch] int v16; // [esp+34h] [ebp-1Ch] unsigned int v17; // [esp+38h] [ebp-18h] int v18; // [esp+4Ch] [ebp-4h] v1 = sub_75BDE0(a1, 1); v11 = sub_75BA70(a1, 2, 0); v12 = sub_75BA70(a1, 3, 0); v14 = sub_75BA70(a1, 4, 0); v13 = sub_75BA70(a1, 5, 0); v10 = sub_75BBF0(a1, 6) != 0; v17 = 15; v16 = 0; LOBYTE(v15) = 0; v2 = (void *)sub_75BC70(a1, 7, 0); sub_4018E0(&v15, v2, strlen((const char *)v2)); v18 = 0; sub_75BA70(a1, 8, 0); if ( !sub_75B570(a1, v1) ) v1 = 0; v3 = sub_8F62B0(0, 0, 0, 255); v4 = sub_8FAC60(v3, 1, v11, v12, v14, v13); v5 = sub_8FE0F0(v11, v12, (int)v4, v1, 1, 0, 0); (*(void (__thiscall **)(volatile LONG *, bool))(*v5 + 240))(v5, v10); (*(void (__thiscall **)(volatile LONG *, signed int))(*v5 + 256))(v5, 1); v6 = sub_421050(0); v7 = sub_8F4A20(0, 0, v14, v13, v6, (int)v5, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v7 + 240))(v7, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v7 + 256))(v7, 1); v8 = v15; if ( v17 < 0x10 ) v8 = &v15; (*(void (__thiscall **)(volatile LONG *, void *))(*v7 + 472))(v7, v8); (*(void (__thiscall **)(volatile LONG *, signed int))(*v7 + 488))(v7, 5); sub_75C270((int)a1, (int)v5); if ( v17 >= 0x10 ) operator delete(v15); return 1; } //----- (004382B0) -------------------------------------------------------- int __cdecl sub_4382B0(_DWORD *a1) { __int16 v1; // di void *v2; // eax char *v3; // edi void *v4; // eax char *v5; // eax char *v6; // esi _DWORD *v7; // eax __int16 v8; // dx __int16 v10; // [esp+10h] [ebp-34h] unsigned __int16 *v11; // [esp+14h] [ebp-30h] void *v12; // [esp+18h] [ebp-2Ch] int v13; // [esp+28h] [ebp-1Ch] unsigned int v14; // [esp+2Ch] [ebp-18h] int v15; // [esp+40h] [ebp-4h] v10 = sub_75BA70(a1, 1, 0); v1 = sub_75BA70(a1, 2, 0); v14 = 15; v13 = 0; LOBYTE(v12) = 0; v2 = (void *)sub_75BC70(a1, 3, 0); sub_4018E0(&v12, v2, strlen((const char *)v2)); v15 = 0; v3 = sub_664AB0(dword_AD8C90, v1); if ( v3 ) { v4 = v12; if ( v14 < 0x10 ) v4 = &v12; v11 = (unsigned __int16 *)sub_438F10(v4); if ( v11 ) { v5 = sub_664AB0(dword_AD8C90, v10); v6 = v5; if ( v5 ) { (*(void (__thiscall **)(char *, char *, signed int, _DWORD))(*(_DWORD *)v5 + 312))(v5, v3, 1, *v11); v7 = operator new(0x18u); if ( v7 ) { v7[4] = 0; v7[2] = 0; v7[3] = 0; v7[1] = &NiTList::`vftable'; } else { v7 = 0; } v8 = *v11; *((_WORD *)v7 + 10) = 0; *(_WORD *)v7 = v8; sub_64D390((int)(v6 + 84), (int)v7); } if ( v14 >= 0x10 ) operator delete(v12); } else if ( v14 >= 0x10 ) { operator delete(v12); } } else if ( v14 >= 0x10 ) { operator delete(v12); } return 0; } // 9AD4BC: using guessed type void *NiTList::`vftable'; //----- (00438410) -------------------------------------------------------- signed int __cdecl sub_438410(int a1) { double v1; // st7 char **v3[13]; // [esp+10h] [ebp-88h] float v4; // [esp+44h] [ebp-54h] float v5; // [esp+50h] [ebp-48h] int v6; // [esp+94h] [ebp-4h] sub_439080(v3, (int)&unk_B66FB8); v6 = 0; v1 = sub_403BA0((float *)v3); sub_75C000(a1, v1); sub_75C000(a1, v4); sub_75C000(a1, v5); v6 = -1; sub_404020(v3); return 3; } //----- (004384B0) -------------------------------------------------------- int __thiscall sub_4384B0(void *this) { void *v1; // esi v1 = this; (*(void (__stdcall **)(const char *, signed int (__cdecl *)(int)))(*(_DWORD *)this + 24))("cGetCurTime", sub_436A30); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cAddSysMsg", sub_437460); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetEnableInput", sub_436430); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cScriptMsg", sub_437530); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetUser", sub_436A60); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetRemainStatPoint", sub_436AD0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetHP", sub_436470); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetMaxHP", sub_4364A0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLoadChar", sub_436AF0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cDeleteChar", sub_4364D0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cMoveChar", sub_436BE0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetCharPos", sub_436CA0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cActChar", sub_436510); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cActSkill", sub_4382B0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetClass", sub_436D20); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsDuringMove", sub_436560); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsAttack", sub_4365F0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetCharMode", sub_436E00); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetMainCharHandle", sub_436E50); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cMoveMainChar", sub_436E80); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetQuestStatus", sub_436670); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLoadEffect", sub_437600); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLoadKFM", sub_4377C0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowGroundObject", sub_437A20); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowInterface", sub_436F50); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowBasicInfo", sub_436FA0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowHelpWin", sub_4366B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowCharWin", sub_436700); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowInvenWin", sub_436750); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowSkillWin", sub_436FC0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowAnnounceWin", sub_437030); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowQuestNewsWin", sub_4367A0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowMiniMapSideWin", sub_437090); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowHPBar", sub_4370E0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowSPBar", sub_437100); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowNPCName", sub_437120); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cOpenNPCDialog", sub_437D30); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cCloseNPCDialog", sub_437140); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cOpenFreeStat", sub_437180); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cCloseShopWin", sub_436840); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cEnablePlayGuide", sub_4371C0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetWin", sub_437E50); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cGetShowWin", sub_436880); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cResetCamera", sub_437230); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cMoveCamera", sub_437270); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCameraEffect", sub_4373A0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cGetCameraCtrl", sub_438410); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetCameraCtrl", sub_437400); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCreateSprite", sub_4368E0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCreateText", sub_437F50); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCreateButton", sub_4380D0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowQuestWin", sub_4367F0); return (*(int (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cPersonalScriptMsg", sub_437B30); } //----- (004388B0) -------------------------------------------------------- float *sub_4388B0() { float *result; // eax float *v1; // eax result = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) { result = sub_4546A0(v1); dword_ACCFE0 = (int)result; } else { result = 0; dword_ACCFE0 = 0; } } return result; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00438930) -------------------------------------------------------- float *__thiscall sub_438930(float *this, float *a2, float *a3) { float *result; // eax result = a2; *a2 = *this - *a3; a2[1] = this[1] - a3[1]; a2[2] = this[2] - a3[2]; return result; } //----- (00438970) -------------------------------------------------------- int sub_438970() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB2E0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB2E0: using guessed type int dword_ACB2E0; //----- (00438990) -------------------------------------------------------- void *__thiscall sub_438990(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,DamageInfo *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; //----- (004389C0) -------------------------------------------------------- float *__cdecl sub_4389C0(float *a1, unsigned __int8 a2) { float v2; // ST0C_4 char v4; // [esp+Ch] [ebp-28h] v2 = (flt_BA45B4 + flt_BA45B4) * (double)a2 / 180.0; sub_85D810((float *)&v4, v2); sub_85DA90((float *)&v4, a1, (float *)&dword_AB4FE8); return a1; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (00438A20) -------------------------------------------------------- void *__thiscall sub_438A20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &LuaArgument::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AD464: using guessed type void *LuaArgument::`vftable'; //----- (00438A50) -------------------------------------------------------- int __thiscall sub_438A50(_DWORD *this, float a2) { int result; // eax float v3; // [esp+8h] [ebp+8h] result = this[28]; if ( result ) { v3 = fabs(a2); *(float *)(result + 100) = v3; } return result; } //----- (00438A70) -------------------------------------------------------- void __thiscall sub_438A70(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ecx void *v4; // edi v1 = this; while ( v1[3] ) { v2 = (int *)v1[1]; v3 = *v2; v1[1] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[2] = 0; v4 = (void *)v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v1 + 8))(v1, v2); --v1[3]; operator delete(v4); } } //----- (00438AC0) -------------------------------------------------------- int __thiscall sub_438AC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,DamageInfo *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,DamageInfo *>::`vftable'; return result; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (00438B40) -------------------------------------------------------- _DWORD *__thiscall sub_438B40(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,DamageInfo *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,DamageInfo *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (00438BD0) -------------------------------------------------------- int __cdecl sub_438BD0(const char *a1) { int result; // eax unsigned int v2; // esi if ( !a1 ) return 0; v2 = 0; if ( !sub_438970() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACB2E0 + 4), v2); if ( result ) { if ( result != -2 && !strcmp(a1, (const char *)(result + 2)) ) break; } if ( ++v2 >= sub_438970() ) return 0; } return result; } // ACB2E0: using guessed type int dword_ACB2E0; //----- (00438C50) -------------------------------------------------------- signed int __thiscall sub_438C50(int this, unsigned __int8 *a2) { return sub_40C2F0((unsigned __int8 *)this, 0, *(_DWORD *)(this + 16), a2, strlen((const char *)a2)); } //----- (00438C80) -------------------------------------------------------- void __thiscall sub_438C80(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 v1 = this; sub_438A70(this); *v1 = &NiTPointerListBase,DamageInfo *>::`vftable'; v2 = (_DWORD *)v1[1]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,DamageInfo *>::`vftable'; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (00438D10) -------------------------------------------------------- _DWORD *__thiscall sub_438D10(_DWORD *this, _DWORD *a2, char *a3) { char *v3; // ebx _DWORD *v4; // esi unsigned int v5; // edi unsigned int v6; // eax int v7; // edx _DWORD *v8; // ecx _DWORD *v9; // esi int v10; // eax _DWORD *v11; // edx _DWORD *v12; // eax unsigned int v13; // esi int v14; // eax unsigned __int8 *v15; // edx unsigned int v16; // edi unsigned int v17; // ecx int v18; // eax bool v19; // sf unsigned int v20; // esi unsigned __int8 *v21; // eax unsigned int v22; // edi unsigned int v23; // edx unsigned __int8 *v24; // ecx int v25; // eax bool v26; // sf _DWORD *result; // eax _DWORD *v28; // [esp+Ch] [ebp-Ch] int v29; // [esp+10h] [ebp-8h] _DWORD *v30; // [esp+14h] [ebp-4h] _DWORD *v31; // [esp+24h] [ebp+Ch] v3 = a3; v4 = this; v5 = this[8]; v6 = v5 & sub_40C450(a3); if ( v4[9] <= v6 ) v6 += -1 - (v5 >> 1); v7 = v4[4]; v8 = *(_DWORD **)(v7 + 8 * v6); v9 = (_DWORD *)v4[1]; v10 = v7 + 8 * v6; v11 = v8; v29 = v10; v28 = v8; v31 = v8; v30 = v9; while ( 1 ) { if ( v8 == v9 ) v12 = v9; else v12 = **(_DWORD ***)(v10 + 4); if ( v11 == v12 ) { result = a2; *a2 = v9; return result; } v13 = *((_DWORD *)v3 + 4); v14 = (int)(v11 + 2); if ( *((_DWORD *)v3 + 5) < 0x10u ) v15 = (unsigned __int8 *)v3; else v15 = *(unsigned __int8 **)v3; v16 = *(_DWORD *)(v14 + 16); v17 = *(_DWORD *)(v14 + 16); if ( v16 >= v13 ) v17 = *((_DWORD *)v3 + 4); if ( *(_DWORD *)(v14 + 20) >= 0x10u ) v14 = *(_DWORD *)v14; v18 = sub_40C0B0((unsigned __int8 *)v14, v15, v17); v19 = v18 < 0; if ( !v18 ) { if ( v16 < v13 ) goto LABEL_19; LOBYTE(v18) = v16 != v13; v19 = v18 < 0; } if ( !v19 ) break; LABEL_19: v11 = (_DWORD *)*v31; v9 = v30; v10 = v29; v8 = v28; v31 = (_DWORD *)*v31; } v20 = v31[6]; v21 = (unsigned __int8 *)(v31 + 2); if ( v31[7] >= 0x10u ) v21 = *(unsigned __int8 **)v21; v22 = *((_DWORD *)v3 + 4); v23 = *((_DWORD *)v3 + 4); if ( v22 >= v20 ) v23 = v31[6]; if ( *((_DWORD *)v3 + 5) < 0x10u ) v24 = (unsigned __int8 *)v3; else v24 = *(unsigned __int8 **)v3; v25 = sub_40C0B0(v24, v21, v23); v26 = v25 < 0; if ( !v25 ) { if ( v22 >= v20 ) { LOBYTE(v25) = v22 != v20; v26 = v25 < 0; goto LABEL_30; } LABEL_31: result = a2; *a2 = v30; return result; } LABEL_30: if ( v26 ) goto LABEL_31; result = a2; *a2 = v31; return result; } //----- (00438E40) -------------------------------------------------------- int __thiscall sub_438E40(_DWORD *this, char *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int result; // eax float *v7; // eax int v8; // ecx int v11; // [esp+0h] [ebp-28h] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int *v14; // [esp+18h] [ebp-10h] int v15; // [esp+24h] [ebp-4h] v14 = &v11; v5 = this; v12 = (int)this; result = a3; v13 = a3; v15 = 0; while ( result != a4 ) { v7 = sub_4044C0(a2, *((_DWORD *)a2 + 1), result + 8); v8 = v5[1]; if ( (unsigned int)(1073741822 - v8) < 1 ) std::_Xlength_error("list too long"); v5[1] = v8 + 1; *((_DWORD *)a2 + 1) = v7; **((_DWORD **)v7 + 1) = v7; result = *(_DWORD *)a3; a3 = *(_DWORD *)a3; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00438F10) -------------------------------------------------------- int __cdecl sub_438F10(void *a1) { int result; // eax _DWORD *v2; // [esp+8h] [ebp-30h] void *v3; // [esp+Ch] [ebp-2Ch] int v4; // [esp+1Ch] [ebp-1Ch] unsigned int v5; // [esp+20h] [ebp-18h] int v6; // [esp+34h] [ebp-4h] v5 = 15; v4 = 0; LOBYTE(v3) = 0; sub_4018E0(&v3, a1, strlen((const char *)a1)); v6 = 0; sub_438D10(&unk_B9DE28, &v2, (char *)&v3); if ( v5 >= 0x10 ) operator delete(v3); if ( v2 == dword_B9DE2C ) result = 0; else result = v2[9]; return result; } //----- (00438FC0) -------------------------------------------------------- char ***__thiscall sub_438FC0(char ***this, int **a2) { char ***v2; // esi char **v3; // eax char *v4; // ecx int *v5; // eax int v6; // edx int v8; // [esp+0h] [ebp-34h] void **v9; // [esp+10h] [ebp-24h] char *v10; // [esp+1Ch] [ebp-18h] char ***v11; // [esp+20h] [ebp-14h] int *v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v12 = &v8; v2 = this; v11 = this; this[1] = 0; v3 = (char **)operator new(0xCu); if ( !v3 ) { v10 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v10); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v2 = v3; *v3 = (char *)v3; (*v2)[1] = (char *)*v2; v4 = **v2; v5 = *a2; v6 = **a2; v13 = 0; LOBYTE(v13) = 1; sub_438E40(v2, v4, v6, (int)v5, (int)a2); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00439080) -------------------------------------------------------- float *__thiscall sub_439080(char ***this, int a2) { float *v2; // esi float *result; // eax v2 = (float *)this; *this = (char **)&CameraCtrl::`vftable'; this[1] = *(char ***)(a2 + 4); this[2] = *(char ***)(a2 + 8); this[3] = *(char ***)(a2 + 12); this[4] = *(char ***)(a2 + 16); this[5] = *(char ***)(a2 + 20); this[6] = *(char ***)(a2 + 24); sub_438FC0(this + 7, (int **)(a2 + 28)); v2[10] = *(float *)(a2 + 40); v2[11] = *(float *)(a2 + 44); v2[12] = *(float *)(a2 + 48); v2[13] = *(float *)(a2 + 52); v2[14] = *(float *)(a2 + 56); v2[15] = *(float *)(a2 + 60); v2[16] = *(float *)(a2 + 64); v2[17] = *(float *)(a2 + 68); v2[18] = *(float *)(a2 + 72); v2[19] = *(float *)(a2 + 76); v2[20] = *(float *)(a2 + 80); v2[21] = *(float *)(a2 + 84); v2[22] = *(float *)(a2 + 88); v2[23] = *(float *)(a2 + 92); v2[24] = *(float *)(a2 + 96); v2[25] = *(float *)(a2 + 100); v2[26] = *(float *)(a2 + 104); result = v2; v2[27] = *(float *)(a2 + 108); v2[28] = *(float *)(a2 + 112); v2[29] = *(float *)(a2 + 116); v2[30] = *(float *)(a2 + 120); return result; } // 9A6860: using guessed type void *CameraCtrl::`vftable'; //----- (00439180) -------------------------------------------------------- void *__thiscall sub_439180(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Singleton::`vftable'; if ( dword_ACB2E4 ) { (**(void (__stdcall ***)(signed int))dword_ACB2E4)(1); dword_ACB2E4 = 0; } byte_ACB2E8 = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD618: using guessed type void *Singleton::`vftable'; // ACB2E4: using guessed type int dword_ACB2E4; // ACB2E8: using guessed type char byte_ACB2E8; //----- (004391D0) -------------------------------------------------------- char sub_4391D0() { const CHAR *v0; // ST0C_4 char *v1; // eax char *v2; // eax const CHAR *v3; // ST0C_4 char *v4; // eax char *v5; // eax const CHAR *v6; // ST0C_4 char *v7; // eax char *v8; // eax const CHAR *v9; // ST0C_4 char *v10; // eax char *v11; // eax const CHAR *v12; // ST0C_4 char *v13; // eax char *v14; // eax const CHAR *v15; // ST0C_4 char *v16; // eax char *v17; // eax if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_AC9CF0, "?.lua"); v1 = getenv("LUA_PATH"); v2 = sub_7549E0("LUA_PATH=%s;%s", v1, v0); _putenv(v2); if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_AC9CF0, "?.script"); v4 = getenv("LUA_PATH"); v5 = sub_7549E0("LUA_PATH=%s;%s", v4, v3); _putenv(v5); if ( !byte_ACAD5C ) sub_420410(); v6 = sub_401410(byte_AC9CF0, "Tutorial/?.lua"); v7 = getenv("LUA_PATH"); v8 = sub_7549E0("LUA_PATH=%s;%s", v7, v6); _putenv(v8); if ( !byte_ACAD5C ) sub_420410(); v9 = sub_401410(byte_AC9CF0, "Tutorial/?.script"); v10 = getenv("LUA_PATH"); v11 = sub_7549E0("LUA_PATH=%s;%s", v10, v9); _putenv(v11); if ( !byte_ACAD5C ) sub_420410(); v12 = sub_401410(byte_AC9CF0, "NewbieImprove/?.lua"); v13 = getenv("LUA_PATH"); v14 = sub_7549E0("LUA_PATH=%s;%s", v13, v12); _putenv(v14); if ( !byte_ACAD5C ) sub_420410(); v15 = sub_401410(byte_AC9CF0, "NewbieImprove/?.script"); v16 = getenv("LUA_PATH"); v17 = sub_7549E0("LUA_PATH=%s;%s", v16, v15); _putenv(v17); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00439360) -------------------------------------------------------- char __thiscall sub_439360(_DWORD *this) { sub_940360(this + 1); return 1; } //----- (00439380) -------------------------------------------------------- void __thiscall sub_439380(_DWORD *this) { _DWORD *v1; // edi int v2; // ST14_4 v1 = this; *this = &LuaScriptMgr::`vftable'; v2 = (int)(this + 1); *(_DWORD *)v2 = &NiTMap>::`vftable'; sub_940360(this + 1); *(_DWORD *)v2 = &NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); *v1 = &Singleton::`vftable'; if ( dword_ACB2E4 ) { (**(void (__stdcall ***)(signed int))dword_ACB2E4)(1); dword_ACB2E4 = 0; } byte_ACB2E8 = 1; } // 9AD618: using guessed type void *Singleton::`vftable'; // 9AD620: using guessed type void *NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; // 9AD640: using guessed type void *NiTMap>::`vftable'; // 9AD660: using guessed type void *LuaScriptMgr::`vftable'; // ACB2E4: using guessed type int dword_ACB2E4; // ACB2E8: using guessed type char byte_ACB2E8; //----- (00439430) -------------------------------------------------------- _DWORD *__thiscall sub_439430(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; *this = &LuaScriptMgr::`vftable'; this[2] = 37; this[1] = &NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; this[4] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[2]; v1[3] = v2; memset(v2, 0, v3); v1[1] = &NiTMap>::`vftable'; return v1; } // 9AD620: using guessed type void *NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; // 9AD640: using guessed type void *NiTMap>::`vftable'; // 9AD660: using guessed type void *LuaScriptMgr::`vftable'; //----- (004394D0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_4394D0(_DWORD *this, int a2))(_DWORD, signed int) { void (__thiscall ***v2)(_DWORD, signed int); // esi int v4; // [esp+8h] [ebp-10h] int v5; // [esp+14h] [ebp-4h] v4 = 0; v5 = 0; sub_455570(this + 1, a2, &v4); v2 = (void (__thiscall ***)(_DWORD, signed int))v4; v5 = -1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**v2)(v2, 1); return v2; } //----- (00439550) -------------------------------------------------------- int __thiscall sub_439550(_DWORD *this, float a2) { _DWORD *v2; // edi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx int result; // eax int v7; // esi char v8; // [esp+14h] [ebp-18h] int v9; // [esp+18h] [ebp-14h] int v10; // [esp+1Ch] [ebp-10h] int v11; // [esp+28h] [ebp-4h] v2 = this + 1; v3 = this[2]; v4 = 0; if ( v3 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } result = *(_DWORD *)(v2[2] + 4 * v4); } else { LABEL_5: result = 0; } v9 = result; while ( v9 ) { v10 = 0; v11 = 0; result = sub_931910(v2, (unsigned int)&v9, &v8, (unsigned int *)&v10); v7 = v10; if ( v10 ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v10 + 12))(v10, LODWORD(a2)); v11 = -1; if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } return result; } //----- (00439620) -------------------------------------------------------- char __thiscall sub_439620(_DWORD *this, void *a2) { _DWORD *v2; // ebx int *v3; // esi _DWORD *v5; // eax _DWORD *v6; // esi void (__thiscall **v7)(_DWORD *, signed int); // edi const CHAR *v8; // eax volatile LONG *v9; // edi _DWORD *v10; // eax void (__thiscall **v11)(_DWORD *, signed int); // edi const CHAR *v12; // eax int v13; // [esp-4h] [ebp-24h] int *v14; // [esp+10h] [ebp-10h] int v15; // [esp+1Ch] [ebp-4h] v14 = 0; v15 = 0; v2 = this + 1; sub_455570(this + 1, (int)a2, (int *)&v14); v3 = v14; v15 = -1; if ( v14 ) { if ( !InterlockedDecrement(v14 + 1) ) (*(void (__thiscall **)(int *, signed int))*v3)(v3, 1); if ( !sub_916F40(v2, (int)a2) ) return 0; } if ( a2 ) { if ( a2 != (void *)1 ) return 0; v5 = operator new(0xCu); v15 = 3; if ( v5 ) v6 = sub_439900(v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v15 = 4; if ( !byte_ACAD5C ) sub_420410(); v7 = (void (__thiscall **)(_DWORD *, signed int))*v6; v8 = sub_401410(byte_AC9CF0, "NewbieImprove/NewbieImprove.script"); v7[1](v6, (signed int)v8); v14 = &v13; v9 = v6 + 1; v13 = (int)v6; InterlockedIncrement(v6 + 1); sub_6688B0(v2, 1, v13); } else { v10 = operator new(0xCu); v15 = 1; if ( v10 ) v6 = sub_439E90(v10); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v15 = 2; if ( !byte_ACAD5C ) sub_420410(); v11 = (void (__thiscall **)(_DWORD *, signed int))*v6; v12 = sub_401410(byte_AC9CF0, "Tutorial/Tutorial.script"); v11[1](v6, (signed int)v12); v14 = &v13; v9 = v6 + 1; v13 = (int)v6; InterlockedIncrement(v6 + 1); sub_6688B0(v2, 0, v13); } v15 = -1; if ( !InterlockedDecrement(v9) ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00439810) -------------------------------------------------------- void **__thiscall sub_439810(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD620: using guessed type void *NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; //----- (00439850) -------------------------------------------------------- void **__thiscall sub_439850(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD620: using guessed type void *NiTMapBase>,enum LuaScriptMgr::eLuaScriptType,NiPointer>::`vftable'; // 9AD640: using guessed type void *NiTMap>::`vftable'; //----- (004398D0) -------------------------------------------------------- void *__thiscall sub_4398D0(void *this, char a2) { void *v2; // esi v2 = this; sub_439380(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00439900) -------------------------------------------------------- _DWORD *__thiscall sub_439900(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_4369E0(this); *v1 = &LuaScriptNewBie::`vftable'; return v1; } // 9AD6E0: using guessed type void *LuaScriptNewBie::`vftable'; //----- (00439930) -------------------------------------------------------- int sub_439930() { int v0; // eax v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) sub_4A8140(v0, 11); return 0; } //----- (00439950) -------------------------------------------------------- int sub_439950() { int v0; // eax v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) sub_4A8140(v0, 69); return 0; } //----- (00439970) -------------------------------------------------------- int __thiscall sub_439970(void *this) { void *v1; // esi v1 = this; sub_4384B0(this); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cOpenPlayGuide", sub_439930); return (*(int (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))( v1, "cOpenPlayGuide_BIL_QUEST_1", sub_439950); } //----- (004399A0) -------------------------------------------------------- signed int __thiscall sub_4399A0(_DWORD *this, int a2) { _DWORD *v2; // eax v2 = this + 3; if ( this[8] >= 0x10u ) v2 = (_DWORD *)*v2; sub_75C100(a2, v2); return 1; } //----- (004399D0) -------------------------------------------------------- signed int __thiscall sub_4399D0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // eax v2 = this; v3 = this + 3; if ( this[8] >= 0x10u ) v3 = (_DWORD *)*v3; sub_75C100(a2, v3); v4 = v2 + 10; if ( v2[15] >= 0x10u ) v4 = (_DWORD *)*v4; sub_75C100(a2, v4); return 2; } //----- (00439A50) -------------------------------------------------------- void __thiscall sub_439A50(void **this) { void **v1; // esi v1 = this; *this = &LuaArgumentBIL_QUEST_1::`vftable'; if ( (unsigned int)this[15] >= 0x10 ) operator delete(this[10]); v1[15] = (void *)15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; if ( (unsigned int)v1[8] >= 0x10 ) operator delete(v1[3]); v1[7] = 0; v1[8] = (void *)15; *((_BYTE *)v1 + 12) = 0; sub_436260(v1); } // 9AD718: using guessed type void *LuaArgumentBIL_QUEST_1::`vftable'; //----- (00439B20) -------------------------------------------------------- _DWORD *__thiscall sub_439B20(_DWORD *this, void *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx v2 = this; sub_436240(this); v3 = (int)(v2 + 3); *v2 = &LuaArgumentBIL_QUEST_1::`vftable'; *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4018E0(v2 + 3, "BIL_QUEST_1", 0xBu); v4 = (int)(v2 + 10); *(_DWORD *)(v4 + 20) = 15; *(_DWORD *)(v4 + 16) = 0; *(_BYTE *)v4 = 0; sub_4018E0(v2 + 10, a2, strlen((const char *)a2)); return v2; } // 9AD718: using guessed type void *LuaArgumentBIL_QUEST_1::`vftable'; //----- (00439BD0) -------------------------------------------------------- void __thiscall sub_439BD0(void *this, int a2) { void *v2; // esi int *v3; // eax int v4; // eax _DWORD *v5; // ST04_4 void (__thiscall *v6)(void *, const char *, _DWORD *); // eax void (__thiscall *v7)(void *, const char *, void ***); // edx char v8; // [esp+8h] [ebp-98h] void *v9[17]; // [esp+14h] [ebp-8Ch] void **v10; // [esp+58h] [ebp-48h] void *v11; // [esp+64h] [ebp-3Ch] int v12; // [esp+74h] [ebp-2Ch] unsigned int v13; // [esp+78h] [ebp-28h] int v14; // [esp+80h] [ebp-20h] int v15; // [esp+84h] [ebp-1Ch] int v16; // [esp+88h] [ebp-18h] char v17; // [esp+8Ch] [ebp-14h] int v18; // [esp+9Ch] [ebp-4h] v2 = this; v3 = sub_439D70(byte_ADB468, &v8); v14 = *v3; v15 = v3[1]; v16 = v3[2]; v17 = 0; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 && sub_4A81F0(v4, 69) && sub_699630(byte_ADB468, "BIL_QUEST_1") ) { v5 = sub_439B20(v9, &v14); v6 = *(void (__thiscall **)(void *, const char *, _DWORD *))(*(_DWORD *)v2 + 8); v18 = 0; v6(v2, "OpenPlayGuide_BIL_QUEST_1", v5); v18 = -1; sub_439A50(v9); } if ( !strcmp((const char *)&v14, "Rou") ) { sub_436240(&v10); v18 = 1; v10 = &LuaArgumentNewBie::`vftable'; v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4018E0(&v11, "NewbieGuide", 0xBu); v7 = *(void (__thiscall **)(void *, const char *, void ***))(*(_DWORD *)v2 + 8); v18 = 2; v7(v2, "Main", &v10); v18 = -1; v10 = &LuaArgumentNewBie::`vftable'; if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_436260(&v10); } } // 9AD700: using guessed type void *LuaArgumentNewBie::`vftable'; //----- (00439D70) -------------------------------------------------------- _DWORD *__thiscall sub_439D70(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = this[143149]; v3 = this[143150]; v4 = this[143151]; a2[1] = v3; a2[2] = v4; return result; } //----- (00439DA0) -------------------------------------------------------- void *__thiscall sub_439DA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &LuaScriptNewBie::`vftable'; sub_436A10(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD6E0: using guessed type void *LuaScriptNewBie::`vftable'; //----- (00439DD0) -------------------------------------------------------- _DWORD *__thiscall sub_439DD0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &LuaArgumentNewBie::`vftable'; if ( *((_DWORD *)this + 8) >= 0x10u ) operator delete(*((void **)this + 3)); v2[8] = 15; v2[7] = 0; *((_BYTE *)v2 + 12) = 0; sub_436260(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD700: using guessed type void *LuaArgumentNewBie::`vftable'; //----- (00439E20) -------------------------------------------------------- _DWORD *__thiscall sub_439E20(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &LuaArgumentBIL_QUEST_1::`vftable'; if ( *((_DWORD *)this + 15) >= 0x10u ) operator delete(*((void **)this + 10)); v2[15] = 15; v2[14] = 0; *((_BYTE *)v2 + 40) = 0; if ( v2[8] >= 0x10u ) operator delete((void *)v2[3]); v2[8] = 15; v2[7] = 0; *((_BYTE *)v2 + 12) = 0; sub_436260(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD718: using guessed type void *LuaArgumentBIL_QUEST_1::`vftable'; //----- (00439E90) -------------------------------------------------------- _DWORD *__thiscall sub_439E90(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_4369E0(this); *v1 = &LuaScriptTutorial::`vftable'; return v1; } // 9ADB90: using guessed type void *LuaScriptTutorial::`vftable'; //----- (00439EC0) -------------------------------------------------------- int __cdecl sub_439EC0(_DWORD *a1) { char v1; // si _DWORD *v2; // eax v1 = sub_75BA70(a1, 1, 0); v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4C03D0(v2, v1); return 0; } //----- (00439F00) -------------------------------------------------------- int __cdecl sub_439F00(_DWORD *a1) { __int16 v1; // ax v1 = sub_75BA70(a1, 1, 0); sub_63E660(byte_AD8A08, v1); return 0; } //----- (00439F30) -------------------------------------------------------- int sub_439F30() { return 0; } //----- (00439F40) -------------------------------------------------------- int __cdecl sub_439F40(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 4) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00439FC0) -------------------------------------------------------- int __cdecl sub_439FC0(_DWORD *a1) { int v1; // esi float *v2; // eax float *v3; // eax v1 = 10; switch ( sub_75BA70(a1, 1, 0) ) { case 1: v1 = 6; break; case 2: v1 = 5; break; case 3: v1 = 1; break; default: break; } if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v3 = sub_4546A0(v2); else v3 = 0; dword_ACCFE0 = (int)v3; } sub_453D50(COERCE_FLOAT(1), v1); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A090) -------------------------------------------------------- signed int __cdecl sub_43A090(int a1) { float *v1; // ecx float *v2; // eax float *v3; // eax int v5; // [esp+Ch] [ebp-14h] int v6; // [esp+10h] [ebp-10h] int v7; // [esp+1Ch] [ebp-4h] v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); v7 = 0; if ( v2 ) v3 = sub_4546A0(v2); else v3 = 0; v1 = v3; v7 = -1; dword_ACCFE0 = (int)v3; } sub_454B90(v1, &v6, &v5); sub_75C040(a1, v6); sub_75C040(a1, v5); return 2; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A140) -------------------------------------------------------- signed int __cdecl sub_43A140(_DWORD *a1) { signed int v1; // eax float *v2; // ecx unsigned int v3; // edi float *v4; // eax float *v5; // eax int v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v1 = sub_75BA70(a1, 1, 0); v2 = (float *)dword_ACCFE0; v3 = v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); v8 = 0; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v2 = v5; v8 = -1; dword_ACCFE0 = (int)v5; } sub_454190(v2, v3, &v7); sub_75C040((int)a1, v7); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A1F0) -------------------------------------------------------- signed int __cdecl sub_43A1F0(int a1) { float *v1; // eax float *v2; // eax int v4; // [esp+8h] [ebp-10h] int v5; // [esp+14h] [ebp-4h] v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); v5 = 0; if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; v5 = -1; dword_ACCFE0 = (int)v1; } sub_454330(v1, &v4); sub_75C040(a1, v4); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A280) -------------------------------------------------------- int __cdecl sub_43A280(_DWORD *a1) { signed int v1; // eax float *v2; // ecx int v3; // esi float *v4; // eax float *v5; // eax v1 = sub_75BA70(a1, 1, 0); v2 = (float *)dword_ACCFE0; v3 = v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v2 = v5; dword_ACCFE0 = (int)v5; } sub_454A30(v2, v3); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A310) -------------------------------------------------------- int __cdecl sub_43A310(_DWORD *a1) { float *v1; // eax float *v2; // eax sub_75BBF0(a1, 1); if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v2 = sub_4546A0(v1); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453D50(0.0, 0); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A3A0) -------------------------------------------------------- int sub_43A3A0() { _DWORD *v0; // ecx _DWORD *v1; // eax _DWORD *v2; // eax _DWORD *v3; // ecx _DWORD *v4; // eax _DWORD *v5; // eax v0 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v1 = operator new(0x28u); if ( v1 ) v2 = sub_4534E0(v1); else v2 = 0; v0 = v2; dword_ACCF98 = (int)v2; } sub_4531D0(v0, 3); v3 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v4 = operator new(0x28u); if ( v4 ) v5 = sub_4534E0(v4); else v5 = 0; v3 = v5; dword_ACCF98 = (int)v5; } sub_4531D0(v3, 4); return 0; } // ACCF98: using guessed type int dword_ACCF98; //----- (0043A460) -------------------------------------------------------- int __cdecl sub_43A460(_DWORD *a1) { BOOL v1; // eax bool v2; // bl float v3; // ST24_4 float v4; // ST20_4 float *v5; // ecx void *v6; // eax float *v7; // eax float v8; // ST28_4 int v10; // [esp+18h] [ebp-28h] int v11; // [esp+1Ch] [ebp-24h] int v12; // [esp+20h] [ebp-20h] char v13[4]; // [esp+24h] [ebp-1Ch] int v14; // [esp+28h] [ebp-18h] void *v15; // [esp+2Ch] [ebp-14h] int v16; // [esp+30h] [ebp-10h] int v17; // [esp+3Ch] [ebp-4h] v1 = sub_75BBF0(a1, 1); v2 = v1 != 0; v13[0] = v1 != 0; v15 = (void *)sub_75BA70(a1, 2, 0); v16 = sub_75BA70(a1, 3, 0); v14 = sub_75BA70(a1, 4, 0); if ( v2 ) { v3 = (double)v16; v4 = (double)(signed int)v15; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v10); } v5 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v6 = operator new(0xB4u); v15 = v6; v17 = 0; if ( v6 ) v7 = sub_4546A0((float *)v6); else v7 = 0; v5 = v7; v17 = -1; dword_ACCFE0 = (int)v7; } v8 = (double)v14; sub_4549D0(v5, v13[0], v10, v11, v12, v8); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A560) -------------------------------------------------------- int __cdecl sub_43A560(_DWORD *a1) { int v1; // edi signed int v2; // eax float *v3; // ecx int v4; // esi float *v5; // eax float *v6; // eax float *v7; // eax float *v8; // eax v1 = sub_75BA70(a1, 1, 0); v2 = sub_75BA70(a1, 2, 0); v3 = (float *)dword_ACCFE0; v4 = v2; if ( !dword_ACCFE0 ) { v5 = (float *)operator new(0xB4u); if ( v5 ) v6 = sub_4546A0(v5); else v6 = 0; v3 = v6; dword_ACCFE0 = (int)v6; } sub_453C10(v3, v1, v4); v7 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v8 = (float *)operator new(0xB4u); if ( v8 ) v7 = sub_4546A0(v8); else v7 = 0; dword_ACCFE0 = (int)v7; } sub_8F82A0(&unk_BA6B10, *((_DWORD **)v7 + 40)); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A650) -------------------------------------------------------- int __cdecl sub_43A650(_DWORD *a1) { float *v1; // eax float *v2; // eax sub_75BA70(a1, 1, 0); v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_8F86A0(&unk_BA6B10, *((_DWORD **)v1 + 40)); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A6E0) -------------------------------------------------------- int sub_43A6E0() { float *v0; // eax float *v1; // eax v0 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v0 = sub_4546A0(v1); else v0 = 0; dword_ACCFE0 = (int)v0; } sub_8F86A0(&unk_BA6B10, *((_DWORD **)v0 + 39)); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A760) -------------------------------------------------------- int __cdecl sub_43A760(_DWORD *a1) { int v1; // esi float *v2; // eax float *v3; // eax v1 = sub_75BA70(a1, 1, 0); if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v3 = sub_4546A0(v2); else v3 = 0; dword_ACCFE0 = (int)v3; } sub_453FF0(v1); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A7F0) -------------------------------------------------------- signed int __cdecl sub_43A7F0(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 5)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A870) -------------------------------------------------------- signed int __cdecl sub_43A870(int a1) { float *v1; // eax float *v2; // eax unsigned __int8 v3; // al if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v2 = sub_4546A0(v1); else v2 = 0; dword_ACCFE0 = (int)v2; } v3 = sub_453E40(); sub_75C250(a1, v3); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A900) -------------------------------------------------------- signed int __cdecl sub_43A900(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 6)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043A980) -------------------------------------------------------- signed int __cdecl sub_43A980(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 8)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AA00) -------------------------------------------------------- signed int __cdecl sub_43AA00(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 9)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AA80) -------------------------------------------------------- signed int __cdecl sub_43AA80(int a1) { float *v1; // eax float *v2; // eax bool v3; // al v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } v3 = sub_453C40(v1); sub_75C250(a1, v3); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AB10) -------------------------------------------------------- signed int __cdecl sub_43AB10(int a1) { float *v1; // eax float *v2; // eax unsigned __int8 v3; // al if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v2 = sub_4546A0(v1); else v2 = 0; dword_ACCFE0 = (int)v2; } v3 = sub_453E70(); sub_75C250(a1, v3); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043ABA0) -------------------------------------------------------- signed int __cdecl sub_43ABA0(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 7)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AC20) -------------------------------------------------------- signed int __cdecl sub_43AC20(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 10)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043ACA0) -------------------------------------------------------- signed int __cdecl sub_43ACA0(int a1) { _DWORD *v1; // eax _DWORD *v2; // eax unsigned __int8 v3; // al v1 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v2 = operator new(0x28u); if ( v2 ) v1 = sub_4534E0(v2); else v1 = 0; dword_ACCF98 = (int)v1; } v3 = sub_452B80(v1); sub_75C250(a1, v3); return 1; } // ACCF98: using guessed type int dword_ACCF98; //----- (0043AD30) -------------------------------------------------------- signed int __cdecl sub_43AD30(int a1) { float *v1; // eax float *v2; // eax unsigned __int8 v3; // al if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v2 = sub_4546A0(v1); else v2 = 0; dword_ACCFE0 = (int)v2; } v3 = sub_453EA0(); sub_75C250(a1, v3); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043ADC0) -------------------------------------------------------- int __cdecl sub_43ADC0(_DWORD *a1) { int v1; // esi float *v2; // eax float *v3; // eax v1 = sub_75BA70(a1, 1, 0); if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v3 = sub_4546A0(v2); else v3 = 0; dword_ACCFE0 = (int)v3; } sub_453ED0(v1); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AE50) -------------------------------------------------------- int __cdecl sub_43AE50(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453B90(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AEF0) -------------------------------------------------------- int __cdecl sub_43AEF0(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453BA0(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043AF90) -------------------------------------------------------- int __cdecl sub_43AF90(_DWORD *a1) { float *v1; // eax float *v2; // eax bool v4; // [esp+8h] [ebp-10h] v4 = sub_75BBF0(a1, 1) != 0; if ( !dword_ACCFE0 ) { v1 = (float *)operator new(0xB4u); if ( v1 ) v2 = sub_4546A0(v1); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453F60(v4); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B030) -------------------------------------------------------- int __cdecl sub_43B030(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453BB0(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B0D0) -------------------------------------------------------- int __cdecl sub_43B0D0(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453BC0(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B170) -------------------------------------------------------- int __cdecl sub_43B170(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453BD0(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B210) -------------------------------------------------------- int __cdecl sub_43B210(_DWORD *a1) { bool v1; // zf float *v2; // eax float *v3; // eax bool v5; // [esp+8h] [ebp-10h] v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v5 = !v1; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } sub_453BE0(v2, v5); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B2B0) -------------------------------------------------------- int __cdecl sub_43B2B0(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 5) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B330) -------------------------------------------------------- int __cdecl sub_43B330(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 6) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B3B0) -------------------------------------------------------- int __cdecl sub_43B3B0(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 7) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B430) -------------------------------------------------------- int __cdecl sub_43B430(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 8) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B4B0) -------------------------------------------------------- int __cdecl sub_43B4B0(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 9) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B530) -------------------------------------------------------- int __cdecl sub_43B530(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 10) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B5B0) -------------------------------------------------------- signed int __cdecl sub_43B5B0(int a1) { float *v1; // eax float *v2; // eax v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; dword_ACCFE0 = (int)v1; } sub_75C250(a1, *((unsigned __int8 *)v1 + 17)); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B630) -------------------------------------------------------- int __cdecl sub_43B630(_DWORD *a1) { bool v1; // zf float *v2; // eax bool v3; // bl float *v4; // eax v1 = sub_75BBF0(a1, 1) == 0; v2 = (float *)dword_ACCFE0; v3 = !v1; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v2 = sub_4546A0(v4); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 17) = v3; return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B6B0) -------------------------------------------------------- signed int __cdecl sub_43B6B0(int a1) { float *v1; // eax float *v2; // eax int v4; // [esp+8h] [ebp-10h] int v5; // [esp+14h] [ebp-4h] v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); v5 = 0; if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; v5 = -1; dword_ACCFE0 = (int)v1; } sub_454500(v1, &v4); sub_75C040(a1, v4); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B740) -------------------------------------------------------- int __cdecl sub_43B740(_DWORD *a1) { float *v1; // eax float *v2; // eax int v4; // [esp+8h] [ebp-10h] int v5; // [esp+14h] [ebp-4h] v4 = sub_75BA70(a1, 1, 0); v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); v5 = 0; if ( v2 ) v1 = sub_4546A0(v2); else v1 = 0; v5 = -1; dword_ACCFE0 = (int)v1; } sub_454580(v1, &v4); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043B7D0) -------------------------------------------------------- signed int __thiscall sub_43B7D0(_DWORD *this, int a2) { _DWORD *v2; // eax v2 = this + 3; if ( this[8] >= 0x10u ) v2 = (_DWORD *)*v2; sub_75C100(a2, v2); return 1; } //----- (0043B800) -------------------------------------------------------- signed int __thiscall sub_43B800(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax v2 = this; v3 = this + 3; if ( this[8] >= 0x10u ) v3 = (_DWORD *)*v3; sub_75C100(a2, v3); sub_75C000(a2, (double)(signed int)v2[10]); return 2; } //----- (0043B9A0) -------------------------------------------------------- void __thiscall sub_43B9A0(void *this, int a2) { void *v2; // esi void (__thiscall *v3)(void *, const char *, void ***); // edx void **v4; // [esp+Ch] [ebp-38h] void *v5; // [esp+18h] [ebp-2Ch] int v6; // [esp+28h] [ebp-1Ch] unsigned int v7; // [esp+2Ch] [ebp-18h] int v8; // [esp+40h] [ebp-4h] v2 = this; sub_436240(&v4); v8 = 0; v4 = &LuaArgumentTutorial::`vftable'; v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, "Tutorial", 8u); v3 = *(void (__thiscall **)(void *, const char *, void ***))(*(_DWORD *)v2 + 8); v8 = 1; v3(v2, "Main", &v4); v8 = -1; v4 = &LuaArgumentTutorial::`vftable'; if ( v7 >= 0x10 ) operator delete(v5); v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_436260(&v4); } // 9ADBB0: using guessed type void *LuaArgumentTutorial::`vftable'; //----- (0043BA70) -------------------------------------------------------- void __thiscall sub_43BA70(void *this, int a2) { void *v2; // esi void (__thiscall *v3)(void *, const char *, void ***); // edx void **v4; // [esp+Ch] [ebp-3Ch] void *v5; // [esp+18h] [ebp-30h] int v6; // [esp+28h] [ebp-20h] unsigned int v7; // [esp+2Ch] [ebp-1Ch] int v8; // [esp+34h] [ebp-14h] int v9; // [esp+44h] [ebp-4h] v2 = this; sub_436240(&v4); v9 = 0; v4 = &LuaArgumentTutorialStep::`vftable'; v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, "Tutorial", 8u); v8 = a2; v3 = *(void (__thiscall **)(void *, const char *, void ***))(*(_DWORD *)v2 + 8); v9 = 1; v3(v2, "UpdateStep", &v4); v9 = -1; v4 = &LuaArgumentTutorialStep::`vftable'; if ( v7 >= 0x10 ) operator delete(v5); v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_436260(&v4); } // 9ADBC8: using guessed type void *LuaArgumentTutorialStep::`vftable'; //----- (0043BB40) -------------------------------------------------------- signed int __cdecl sub_43BB40(_DWORD *a1) { void *v1; // eax int v2; // edi float *v3; // ecx float *v4; // eax float *v5; // eax signed int v7; // [esp+14h] [ebp-38h] int v8; // [esp+18h] [ebp-34h] void *v9; // [esp+1Ch] [ebp-30h] void *v10; // [esp+20h] [ebp-2Ch] int v11; // [esp+30h] [ebp-1Ch] unsigned int v12; // [esp+34h] [ebp-18h] int v13; // [esp+48h] [ebp-4h] v12 = 15; v11 = 0; LOBYTE(v10) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v10, v1, strlen((const char *)v1)); v13 = 0; v2 = sub_75BA70(a1, 2, 0); v7 = sub_75BA70(a1, 3, 0); if ( v12 < 0x10 ) v9 = &v10; else v9 = v10; v3 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v13) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v3 = v5; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v5; } sub_454E80(v3, v9, v2, v7, (int)&v8); sub_75C040((int)a1, v8); if ( v12 >= 0x10 ) operator delete(v10); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043BC60) -------------------------------------------------------- signed int __cdecl sub_43BC60(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // ecx float *v4; // eax float *v5; // eax float *v6; // eax float *v7; // eax int v9; // [esp+14h] [ebp-30h] void *v10; // [esp+18h] [ebp-2Ch] int v11; // [esp+28h] [ebp-1Ch] unsigned int v12; // [esp+2Ch] [ebp-18h] int v13; // [esp+40h] [ebp-4h] v12 = 15; v11 = 0; LOBYTE(v10) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v10, v1, strlen((const char *)v1)); v2 = v10; v13 = 0; if ( v12 < 0x10 ) v2 = &v10; v3 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v13) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v3 = v5; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v5; } sub_454240(v3, v2, (int)&v9); if ( !dword_ACCFE0 ) { v6 = (float *)operator new(0xB4u); LOBYTE(v13) = 2; if ( v6 ) v7 = sub_4546A0(v6); else v7 = 0; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v7; } sub_453D90(v9); sub_75C040((int)a1, v9); if ( v12 >= 0x10 ) operator delete(v10); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043BDA0) -------------------------------------------------------- signed int __cdecl sub_43BDA0(_DWORD *a1) { void *v1; // eax int v2; // edi float *v3; // ecx float *v4; // eax float *v5; // eax signed int v7; // [esp+14h] [ebp-38h] int v8; // [esp+18h] [ebp-34h] void *v9; // [esp+1Ch] [ebp-30h] void *v10; // [esp+20h] [ebp-2Ch] int v11; // [esp+30h] [ebp-1Ch] unsigned int v12; // [esp+34h] [ebp-18h] int v13; // [esp+48h] [ebp-4h] v12 = 15; v11 = 0; LOBYTE(v10) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v10, v1, strlen((const char *)v1)); v13 = 0; v2 = sub_75BA70(a1, 2, 0); v7 = sub_75BA70(a1, 3, 0); if ( v12 < 0x10 ) v9 = &v10; else v9 = v10; v3 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v13) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v3 = v5; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v5; } sub_455040(v3, v9, v2, v7, (int)&v8); sub_75C040((int)a1, v8); if ( v12 >= 0x10 ) operator delete(v10); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043BEC0) -------------------------------------------------------- signed int __cdecl sub_43BEC0(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // ecx float *v4; // eax float *v5; // eax int v7; // [esp+14h] [ebp-30h] void *v8; // [esp+18h] [ebp-2Ch] int v9; // [esp+28h] [ebp-1Ch] unsigned int v10; // [esp+2Ch] [ebp-18h] int v11; // [esp+40h] [ebp-4h] v10 = 15; v9 = 0; LOBYTE(v8) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v8, v1, strlen((const char *)v1)); v2 = v8; v11 = 0; if ( v10 < 0x10 ) v2 = &v8; v3 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v11) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; v3 = v5; LOBYTE(v11) = 0; dword_ACCFE0 = (int)v5; } sub_454D20(v3, v2, (int)&v7); sub_75C040((int)a1, v7); if ( v10 >= 0x10 ) operator delete(v8); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043BFC0) -------------------------------------------------------- signed int __cdecl sub_43BFC0(_DWORD *a1) { float *v1; // ecx void *v2; // eax float *v3; // eax void *v5; // [esp+Ch] [ebp-28h] int v6; // [esp+10h] [ebp-24h] int v7; // [esp+14h] [ebp-20h] int v8; // [esp+1Ch] [ebp-18h] int v9; // [esp+20h] [ebp-14h] void *v10; // [esp+24h] [ebp-10h] int v11; // [esp+30h] [ebp-4h] v5 = 0; v6 = 0; v7 = 0; v10 = (void *)sub_75BA70(a1, 1, 0); v11 = 0; sub_5B3CF0(&v5, &v10); v1 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = operator new(0xB4u); v10 = v2; LOBYTE(v11) = 1; if ( v2 ) v3 = sub_4546A0((float *)v2); else v3 = 0; v1 = v3; LOBYTE(v11) = 0; dword_ACCFE0 = (int)v3; } sub_4543F0(v1, &v5, &v9, &v8); sub_75C040((int)a1, v9); sub_75C040((int)a1, v8); if ( v5 ) operator delete(v5); return 2; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C0A0) -------------------------------------------------------- int __cdecl sub_43C0A0(_DWORD *a1) { void *v1; // eax const char *v2; // eax int v3; // esi float *v4; // ecx _DWORD *v5; // eax float *v6; // eax _DWORD *v7; // ecx _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // eax _DWORD *v12; // eax float v14; // [esp+14h] [ebp-34h] void *v15; // [esp+1Ch] [ebp-2Ch] int v16; // [esp+2Ch] [ebp-1Ch] unsigned int v17; // [esp+30h] [ebp-18h] int v18; // [esp+44h] [ebp-4h] v17 = 15; v16 = 0; LOBYTE(v15) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v15, v1, strlen((const char *)v1)); v2 = (const char *)v15; v18 = 0; if ( v17 < 0x10 ) v2 = (const char *)&v15; v3 = sub_438BD0(v2); if ( v3 ) { v4 = (float *)dword_ACCF98; v14 = flt_ACCFCC; if ( !dword_ACCF98 ) { v5 = operator new(0x28u); LOBYTE(v18) = 1; if ( v5 ) v6 = (float *)sub_4534E0(v5); else v6 = 0; v4 = v6; LOBYTE(v18) = 0; dword_ACCF98 = (int)v6; } sub_4536C0(v4, v3 + 34, v14, 0.5); v7 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v8 = operator new(0x28u); LOBYTE(v18) = 2; if ( v8 ) v9 = sub_4534E0(v8); else v9 = 0; v7 = v9; LOBYTE(v18) = 0; dword_ACCF98 = (int)v9; } sub_4531D0(v7, 1); v10 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v11 = operator new(0x28u); LOBYTE(v18) = 3; if ( v11 ) v12 = sub_4534E0(v11); else v12 = 0; v10 = v12; LOBYTE(v18) = 0; dword_ACCF98 = (int)v12; } sub_4531D0(v10, 2); } if ( v17 >= 0x10 ) operator delete(v15); return 0; } // ACCF98: using guessed type int dword_ACCF98; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0043C230) -------------------------------------------------------- int __cdecl sub_43C230(_DWORD *a1) { void *v1; // eax const char *v2; // eax int v3; // esi float *v4; // ecx float *v5; // eax float *v6; // eax float *v7; // eax float *v8; // eax void *v10; // [esp+10h] [ebp-2Ch] int v11; // [esp+20h] [ebp-1Ch] unsigned int v12; // [esp+24h] [ebp-18h] int v13; // [esp+38h] [ebp-4h] v12 = 15; v11 = 0; LOBYTE(v10) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v10, v1, strlen((const char *)v1)); v2 = (const char *)v10; v13 = 0; if ( v12 < 0x10 ) v2 = (const char *)&v10; v3 = sub_438BD0(v2); if ( v3 ) { v4 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v5 = (float *)operator new(0xB4u); LOBYTE(v13) = 1; if ( v5 ) v6 = sub_4546A0(v5); else v6 = 0; v4 = v6; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v6; } sub_453BF0(v4, v3 + 34); v7 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v8 = (float *)operator new(0xB4u); LOBYTE(v13) = 2; if ( v8 ) v7 = sub_4546A0(v8); else v7 = 0; LOBYTE(v13) = 0; dword_ACCFE0 = (int)v7; } sub_8F82A0(&unk_BA6B10, *((_DWORD **)v7 + 39)); } if ( v12 >= 0x10 ) operator delete(v10); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C370) -------------------------------------------------------- int __cdecl sub_43C370(_DWORD *a1) { int v1; // edi void *v2; // eax const char *v3; // eax int v4; // eax void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v1 = sub_75BA70(a1, 1, 0); v8 = 15; v7 = 0; LOBYTE(v6) = 0; v2 = (void *)sub_75BC70(a1, 2, 0); sub_4018E0(&v6, v2, strlen((const char *)v2)); v3 = (const char *)v6; v9 = 0; if ( v8 < 0x10 ) v3 = (const char *)&v6; v4 = sub_438BD0(v3); if ( v4 ) sub_63E870(byte_AD8A08, v1, (void *)(v4 + 34), 1000000.0); if ( v8 >= 0x10 ) operator delete(v6); return 0; } //----- (0043C450) -------------------------------------------------------- signed int __cdecl sub_43C450(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // eax float *v4; // eax bool v5; // al void *v7; // [esp+14h] [ebp-2Ch] int v8; // [esp+24h] [ebp-1Ch] unsigned int v9; // [esp+28h] [ebp-18h] int v10; // [esp+3Ch] [ebp-4h] v9 = 15; v8 = 0; LOBYTE(v7) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v7, v1, strlen((const char *)v1)); v2 = v7; v10 = 0; if ( v9 < 0x10 ) v2 = &v7; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); LOBYTE(v10) = 1; if ( v3 ) v4 = sub_4546A0(v3); else v4 = 0; LOBYTE(v10) = 0; dword_ACCFE0 = (int)v4; } v5 = sub_453DC0(v2); sub_75C250((int)a1, v5); if ( v9 >= 0x10 ) operator delete(v7); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C540) -------------------------------------------------------- signed int __cdecl sub_43C540(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // eax float *v4; // eax bool v5; // al void *v7; // [esp+14h] [ebp-2Ch] int v8; // [esp+24h] [ebp-1Ch] unsigned int v9; // [esp+28h] [ebp-18h] int v10; // [esp+3Ch] [ebp-4h] v9 = 15; v8 = 0; LOBYTE(v7) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v7, v1, strlen((const char *)v1)); v2 = v7; v10 = 0; if ( v9 < 0x10 ) v2 = &v7; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); LOBYTE(v10) = 1; if ( v3 ) v4 = sub_4546A0(v3); else v4 = 0; LOBYTE(v10) = 0; dword_ACCFE0 = (int)v4; } v5 = sub_453E00(v2); sub_75C250((int)a1, v5); if ( v9 >= 0x10 ) operator delete(v7); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C630) -------------------------------------------------------- signed int __cdecl sub_43C630(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // eax float *v4; // eax unsigned __int8 v5; // al void *v7; // [esp+14h] [ebp-2Ch] int v8; // [esp+24h] [ebp-1Ch] unsigned int v9; // [esp+28h] [ebp-18h] int v10; // [esp+3Ch] [ebp-4h] v9 = 15; v8 = 0; LOBYTE(v7) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v7, v1, strlen((const char *)v1)); v2 = v7; v10 = 0; if ( v9 < 0x10 ) v2 = &v7; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); LOBYTE(v10) = 1; if ( v3 ) v4 = sub_4546A0(v3); else v4 = 0; LOBYTE(v10) = 0; dword_ACCFE0 = (int)v4; } v5 = sub_454E00(v2); sub_75C250((int)a1, v5); if ( v9 >= 0x10 ) operator delete(v7); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C720) -------------------------------------------------------- signed int __cdecl sub_43C720(_DWORD *a1) { void *v1; // eax void *v2; // esi float *v3; // eax float *v4; // eax bool v5; // al void *v7; // [esp+14h] [ebp-2Ch] int v8; // [esp+24h] [ebp-1Ch] unsigned int v9; // [esp+28h] [ebp-18h] int v10; // [esp+3Ch] [ebp-4h] v9 = 15; v8 = 0; LOBYTE(v7) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v7, v1, strlen((const char *)v1)); v2 = v7; v10 = 0; if ( v9 < 0x10 ) v2 = &v7; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); LOBYTE(v10) = 1; if ( v3 ) v4 = sub_4546A0(v3); else v4 = 0; LOBYTE(v10) = 0; dword_ACCFE0 = (int)v4; } v5 = sub_454E30(v2); sub_75C250((int)a1, v5); if ( v9 >= 0x10 ) operator delete(v7); return 1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C810) -------------------------------------------------------- int __cdecl sub_43C810(_DWORD *a1) { void *v1; // eax int v2; // edi int v3; // esi float *v4; // eax float *v5; // eax void *v7; // [esp+14h] [ebp-30h] void *v8; // [esp+18h] [ebp-2Ch] int v9; // [esp+28h] [ebp-1Ch] unsigned int v10; // [esp+2Ch] [ebp-18h] int v11; // [esp+40h] [ebp-4h] v10 = 15; v9 = 0; LOBYTE(v8) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v8, v1, strlen((const char *)v1)); v11 = 0; v2 = sub_75BA70(a1, 2, 0); v3 = sub_75BA70(a1, 3, 0); if ( v10 < 0x10 ) v7 = &v8; else v7 = v8; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v11) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; LOBYTE(v11) = 0; dword_ACCFE0 = (int)v5; } sub_455250(v7, v2, v3); if ( v10 >= 0x10 ) operator delete(v8); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043C920) -------------------------------------------------------- int __cdecl sub_43C920(_DWORD *a1) { void *v1; // eax int v2; // edi int v3; // esi float *v4; // eax float *v5; // eax void *v7; // [esp+14h] [ebp-30h] void *v8; // [esp+18h] [ebp-2Ch] int v9; // [esp+28h] [ebp-1Ch] unsigned int v10; // [esp+2Ch] [ebp-18h] int v11; // [esp+40h] [ebp-4h] v10 = 15; v9 = 0; LOBYTE(v8) = 0; v1 = (void *)sub_75BC70(a1, 1, 0); sub_4018E0(&v8, v1, strlen((const char *)v1)); v11 = 0; v2 = sub_75BA70(a1, 2, 0); v3 = sub_75BA70(a1, 3, 0); if ( v10 < 0x10 ) v7 = &v8; else v7 = v8; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); LOBYTE(v11) = 1; if ( v4 ) v5 = sub_4546A0(v4); else v5 = 0; LOBYTE(v11) = 0; dword_ACCFE0 = (int)v5; } sub_455370(v7, v2, v3); if ( v10 >= 0x10 ) operator delete(v8); return 0; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0043CA30) -------------------------------------------------------- int __thiscall sub_43CA30(void *this) { void *v1; // esi v1 = this; sub_4384B0(this); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cAckMainStep", sub_439EC0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cTutorialEnable", sub_439F40); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkMainMenu", sub_439FC0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cBlinkFreeStat", sub_43A090); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkItemShop", sub_43BB40); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkInven", sub_43BC60); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkSkillShop", sub_43BDA0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkStoneShop", sub_43A140); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkSkill", sub_43BEC0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cBlinkShortCut", sub_43A1F0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cBlinkEffect", sub_43BFC0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cRemoveBlinkEffect", sub_43A280); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cRemoveBlinkMainMenu", sub_43A310); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cStartTextScreenEffect", sub_43C0A0); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))( v1, "cStopTextScreenEffect", sub_43A3A0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cBlinkQuestAccept", sub_43B6B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cRemoveQuestBlinkEffect", sub_43B740); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cShowTutorialMark", sub_43A460); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cOpenQuestConditionWin", sub_43A560); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCloseQuestConditionWin", sub_43A650); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cOpenBoxAnnounceWin", sub_43C230); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cCloseBoxAnnounceWin", sub_43A6E0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cOpenTextBoxMsgWin", sub_43C370); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cCloseTextBoxMsgWin", sub_439F00); (*(void (__thiscall **)(void *, const char *, int (*)()))(*(_DWORD *)v1 + 24))(v1, "cHideNewbieToolTip", sub_439F30); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetItemShopTab", sub_43A760); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenCharWin", sub_43A7F0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenItemShop", sub_43A870); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsHaveItem", sub_43C450); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenInvenWin", sub_43A900); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsEquipItem", sub_43C540); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsBuyStone", sub_43A980); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsUseStone", sub_43AA00); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsEndWar", sub_43AA80); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenSkillShop", sub_43AB10); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsLearnSkill", sub_43C630); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenSkillWin", sub_43ABA0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cIsSelectSkill", sub_43C720); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsRegistSkill", sub_43AC20); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsEndTextScreenEffect", sub_43ACA0); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenNPCDialog", sub_43AD30); (*(void (__thiscall **)(void *, const char *, signed int (__cdecl *)(int)))(*(_DWORD *)v1 + 24))( v1, "cIsOpenQuestWin", sub_43B5B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLockItemShopInv", sub_43C810); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLockStoneShopInv", sub_43ADC0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cLockSkillShopInv", sub_43C920); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockItemSell", sub_43AE50); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockItemShop", sub_43AEF0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockStoneShop", sub_43AF90); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockSkillShop", sub_43B030); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockItemShopTab", sub_43B0D0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetLockSkillShopTab", sub_43B170); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetHideQuestGiveUp", sub_43B210); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetOpenCharWin", sub_43B2B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetOpenInvenWin", sub_43B330); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetOpenSkillWin", sub_43B3B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetBuyStone", sub_43B430); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetUseStone", sub_43B4B0); (*(void (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetRegistSkill", sub_43B530); return (*(int (__thiscall **)(void *, const char *, int (__cdecl *)(_DWORD *)))(*(_DWORD *)v1 + 24))( v1, "cSetOpenQuestWin", sub_43B630); } //----- (0043CEA0) -------------------------------------------------------- void *__thiscall sub_43CEA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &LuaScriptTutorial::`vftable'; sub_436A10(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ADB90: using guessed type void *LuaScriptTutorial::`vftable'; //----- (0043CED0) -------------------------------------------------------- _DWORD *__thiscall sub_43CED0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &LuaArgumentTutorial::`vftable'; if ( *((_DWORD *)this + 8) >= 0x10u ) operator delete(*((void **)this + 3)); v2[8] = 15; v2[7] = 0; *((_BYTE *)v2 + 12) = 0; sub_436260(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ADBB0: using guessed type void *LuaArgumentTutorial::`vftable'; //----- (0043CF20) -------------------------------------------------------- _DWORD *__thiscall sub_43CF20(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &LuaArgumentTutorialStep::`vftable'; if ( *((_DWORD *)this + 8) >= 0x10u ) operator delete(*((void **)this + 3)); v2[8] = 15; v2[7] = 0; *((_BYTE *)v2 + 12) = 0; sub_436260(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ADBC8: using guessed type void *LuaArgumentTutorialStep::`vftable'; //----- (0043CF70) -------------------------------------------------------- char sub_43CF70() { return 1; } //----- (0043CF80) -------------------------------------------------------- void sub_43CF80() { unsigned int v0; // edi int v1; // esi v0 = 0; do { v1 = dword_ACB2F0[v0]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } dword_ACB2F0[v0] = 0; } ++v0; } while ( v0 < 32 ); } //----- (0043CFD0) -------------------------------------------------------- void __cdecl sub_43CFD0(unsigned int a1) { int v1; // esi if ( a1 < 0x20 ) { v1 = dword_ACB2F0[a1]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } dword_ACB2F0[a1] = 0; } } } //----- (0043D020) -------------------------------------------------------- _DWORD *__cdecl sub_43D020(int a1) { int v1; // eax _DWORD *result; // eax int v3; // [esp+4h] [ebp-114h] int v4; // [esp+8h] [ebp-110h] int v5; // [esp+Ch] [ebp-10Ch] char v6; // [esp+10h] [ebp-108h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v6, "%s%s.tga", byte_ACAB50, off_AA9C00[a1]); v1 = sub_8667C0(); result = (_DWORD *)(*(int (__thiscall **)(int, char *, _DWORD))(*(_DWORD *)v1 + 8))(v1, &v6, 0); if ( result ) { v3 = 6; v4 = 3; v5 = 0; result = sub_865FA0((int)result, &v3); } return result; } // AA9C00: using guessed type char *off_AA9C00[33]; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0043D0D0) -------------------------------------------------------- int __cdecl sub_43D0D0(unsigned int a1) { _DWORD *v2; // eax int v3; // esi int v4; // edi if ( a1 >= 0x20 ) return 0; if ( !dword_ACB2F0[a1] ) { v2 = sub_43D020(a1); v3 = dword_ACB2F0[a1]; v4 = (int)v2; if ( (_DWORD *)v3 != v2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); dword_ACB2F0[a1] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } } return dword_ACB2F0[a1]; } //----- (0043D150) -------------------------------------------------------- void **__thiscall sub_43D150(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); v1[113] = 0; v1[118] = 0; *v1 = &ItemSlot::`vftable'; v1[58] = &ItemSlot::`vftable'; v1[114] = (void *)-1; v1[115] = (void *)-1; v1[116] = (void *)-1; v1[117] = (void *)-1; sub_5D5B70(v1, 0, 1); return v1; } // 9AE014: using guessed type void *ItemSlot::`vftable'; // 9AE034: using guessed type void *ItemSlot::`vftable'; //----- (0043D200) -------------------------------------------------------- char __thiscall sub_43D200(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; result = 1; } return result; } //----- (0043D240) -------------------------------------------------------- int __thiscall sub_43D240(_DWORD *this) { _DWORD *v1; // esi __int16 v2; // ax int result; // eax int *v4; // ecx v1 = this; if ( sub_5D5600(this) == -1 ) return sub_8F2F90((int)v1); v2 = sub_5D5600(v1); result = sub_685510(&byte_ADA230, v2); if ( result ) { v4 = (int *)dword_ACEC34; v1[68] = dword_ACEC34; if ( v4 ) sub_547C20(v4, result); return sub_8F2F90((int)v1); } v1[68] = 0; return result; } // ACEC34: using guessed type int dword_ACEC34; // ADA230: using guessed type char byte_ADA230; //----- (0043D330) -------------------------------------------------------- int *__thiscall sub_43D330(char *this) { __int16 *v1; // ebx __int16 v2; // si int v3; // edi int v4; // eax __int16 *v5; // ebx __int16 v6; // si int v7; // edi int *result; // eax int v9; // eax char *v10; // [esp+Ch] [ebp-Ch] signed int v11; // [esp+10h] [ebp-8h] signed int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] int *v14; // [esp+14h] [ebp-4h] v10 = this; v13 = (int *)(this + 480); v1 = (__int16 *)(this + 346); v11 = 12; do { v2 = *v1; v3 = *v13; if ( *v1 == -1 ) { sub_5D5B70((_WORD *)v3, 0, 1); } else { v4 = sub_685510(&byte_ADA230, *v1); sub_5D5B70((_WORD *)v3, v4, 1); *(_DWORD *)(v3 + 460) = sub_685BB0(&byte_ADA230, v2); } ++v13; ++v1; --v11; } while ( v11 ); v14 = (int *)(v10 + 528); v5 = (__int16 *)(v10 + 370); v12 = 12; do { v6 = *v5; v7 = *v14; if ( *v5 == -1 ) { result = sub_5D5B70((_WORD *)v7, 0, 1); } else { v9 = sub_685510(&byte_ADA230, *v5); sub_5D5B70((_WORD *)v7, v9, 1); result = (int *)sub_685BB0(&byte_ADA230, v6); *(_DWORD *)(v7 + 460) = result; } ++v14; ++v5; --v12; } while ( v12 ); return result; } // ADA230: using guessed type char byte_ADA230; //----- (0043D430) -------------------------------------------------------- char sub_43D430() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "Minimon_AutoItemUse"); return (char)v0; } //----- (0043D470) -------------------------------------------------------- char *__thiscall sub_43D470(char *this) { char *v1; // esi int v2; // eax _DWORD *v3; // ecx _WORD *v4; // eax signed int v5; // edx _DWORD *v6; // ecx _WORD *v7; // eax signed int v8; // edx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MinimonAutoItemUseWin::`vftable'; *((_DWORD *)v1 + 58) = &MinimonAutoItemUseWin::`vftable'; v2 = (int)(v1 + 408); *((_DWORD *)v1 + 99) = &PgWinDrop::`vftable'; *((_DWORD *)v1 + 101) = 0; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)v2 = &DropContents::`vftable'; *(_DWORD *)(v2 + 64) = 0; *((_DWORD *)v1 + 100) = v1 + 408; *((_WORD *)v1 + 172) = 0; v3 = v1 + 480; v4 = v1 + 346; v5 = 12; do { *v4 = -1; *v3 = 0; ++v4; ++v3; --v5; } while ( v5 ); v6 = v1 + 528; v7 = v1 + 370; v8 = 12; do { *v7 = -1; *v6 = 0; ++v7; ++v6; --v8; } while ( v8 ); *((_DWORD *)v1 + 144) = 0; *((_DWORD *)v1 + 145) = 0; *((_DWORD *)v1 + 146) = 0; *((_DWORD *)v1 + 147) = 0; *((_DWORD *)v1 + 148) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9AE2A4: using guessed type void *MinimonAutoItemUseWin::`vftable'; // 9AE2C4: using guessed type void *MinimonAutoItemUseWin::`vftable'; //----- (0043D560) -------------------------------------------------------- int *__thiscall sub_43D560(_DWORD *this, int *a2) { int *result; // eax _DWORD *v3; // esi _DWORD *v4; // edi int *v5; // ebx int v6; // eax int v7; // eax result = a2; v3 = this; v4 = (_DWORD *)this[(_DWORD)a2 + 120]; if ( v4 ) { result = (int *)sub_5D5470(v4); v5 = result; if ( result ) { v3[104] = 0; v3[106] = 6; v6 = v4[115]; v3[108] = 0; v3[107] = v5; v3[105] = v6; v3[118] = (*(int (__thiscall **)(int *))(*v5 + 12))(v5); *((_WORD *)v3 + 234) = *(_WORD *)v5[28]; v3[101] = v3; dword_BA6BCC = (int)(v3 + 99); v7 = v4[117]; if ( v7 ) { if ( v7 == 1 && *((_BYTE *)v3 + 345) ) sub_4C08C0((_DWORD *)v3[74]); } else if ( *((_BYTE *)v3 + 344) ) { sub_4C0800((_DWORD *)v3[74]); } v4[114] = -1; v4[115] = -1; v4[118] = 0; result = sub_5D5B70(v4, 0, 1); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (0043D650) -------------------------------------------------------- char __thiscall sub_43D650(int this) { _WORD *v2; // esi _DWORD **v3; // edi signed int v4; // ebx int v5; // [esp+0h] [ebp-4h] v5 = this; if ( *(_BYTE *)(this + 344) ) return sub_4C0800(*(_DWORD **)(this + 296)); v2 = (_WORD *)(this + 346); v3 = (_DWORD **)(this + 480); v4 = 12; do { if ( sub_5D5470(*v3) ) *v2 = *(_WORD *)(sub_5D5470(*v3) + 8); else *v2 = -1; ++v3; ++v2; --v4; } while ( v4 ); return sub_4C0780(*(_DWORD **)(v5 + 296), (int *)(v5 + 346)); } //----- (0043D6D0) -------------------------------------------------------- char __thiscall sub_43D6D0(int this) { _WORD *v2; // esi _DWORD **v3; // edi signed int v4; // ebx int v5; // [esp+0h] [ebp-4h] v5 = this; if ( *(_BYTE *)(this + 345) ) return sub_4C08C0(*(_DWORD **)(this + 296)); v2 = (_WORD *)(this + 370); v3 = (_DWORD **)(this + 528); v4 = 12; do { if ( sub_5D5470(*v3) ) *v2 = *(_WORD *)(sub_5D5470(*v3) + 8); else *v2 = -1; ++v3; ++v2; --v4; } while ( v4 ); return sub_4C0840(*(_DWORD **)(v5 + 296), (int *)(v5 + 370)); } //----- (0043D750) -------------------------------------------------------- char __thiscall sub_43D750(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (0043D780) -------------------------------------------------------- char __thiscall sub_43D780(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[116]); return (char)v2; } //----- (0043D7B0) -------------------------------------------------------- char __thiscall sub_43D7B0(volatile LONG *this, int a2, int *a3) { char result; // al result = a2; switch ( a2 ) { case 11: result = (unsigned int)sub_43D560(this, a3); break; case 12: result = sub_43D650((int)this); break; case 13: result = sub_43D6D0((int)this); break; case 14: result = sub_8F2BC0(this, 1, 0, 0); break; case 15: result = sub_43D430(); break; default: return result; } return result; } //----- (0043D820) -------------------------------------------------------- void __thiscall sub_43D820(_BYTE *this, int a2) { _BYTE *v2; // esi int v3; // edi const CHAR *v4; // eax const CHAR *v5; // eax _DWORD *v6; // esi const CHAR *v7; // eax int v8; // [esp-4h] [ebp-10h] v2 = this; this[344] = a2; sub_654D50(dword_AD8EBC, (int)this, a2); v3 = **((_DWORD **)v2 + 147); if ( (_BYTE)a2 ) { v4 = sub_4090F0(260603530); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*((_DWORD *)v2 + 147), v4); v8 = -791211485; } else { v5 = sub_4090F0(1434484362); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*((_DWORD *)v2 + 147), v5); v8 = -803403229; } v6 = (_DWORD *)*((_DWORD *)v2 + 74); v7 = sub_4090F0(v8); sub_492060(v6, (int)v7); } //----- (0043D8B0) -------------------------------------------------------- void __thiscall sub_43D8B0(_BYTE *this, int a2) { _BYTE *v2; // esi int v3; // edi const CHAR *v4; // eax const CHAR *v5; // eax _DWORD *v6; // esi const CHAR *v7; // eax int v8; // [esp-4h] [ebp-10h] v2 = this; this[345] = a2; sub_654D90(dword_AD8EBC, (int)this, a2); v3 = **((_DWORD **)v2 + 148); if ( (_BYTE)a2 ) { v4 = sub_4090F0(260603530); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*((_DWORD *)v2 + 148), v4); v8 = 138543962; } else { v5 = sub_4090F0(1434484362); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*((_DWORD *)v2 + 148), v5); v8 = 138561874; } v6 = (_DWORD *)*((_DWORD *)v2 + 74); v7 = sub_4090F0(v8); sub_492060(v6, (int)v7); } //----- (0043D940) -------------------------------------------------------- char __thiscall sub_43D940(char *this, int a2, int a3) { int v3; // esi int v5; // eax int v6; // eax int v7; // edx signed int v8; // edi _DWORD **v9; // ebx __int16 v10; // ST18_2 _DWORD *v11; // esi signed int v12; // edi _DWORD **v13; // ebx __int16 v14; // ST18_2 const CHAR *v15; // eax int v16; // [esp+4h] [ebp-Ch] char *v17; // [esp+Ch] [ebp-4h] int v18; // [esp+18h] [ebp+8h] v3 = *(_DWORD *)&this[4 * a2 + 480]; v17 = this; if ( !v3 ) return 0; v5 = *(_DWORD *)(a3 + 4); v16 = v5; if ( !v5 ) return 0; if ( *(_DWORD *)(v5 + 24) == 1 ) return 0; v6 = *(_DWORD *)(v5 + 20); v18 = v6; if ( !v6 ) return 0; v7 = *(_DWORD *)(v3 + 468); if ( !v7 ) { v8 = 0; v9 = (_DWORD **)(this + 480); while ( 1 ) { v10 = *(_WORD *)(v6 + 8); if ( sub_5D5600(*v9) == v10 ) { v11 = (_DWORD *)*((_DWORD *)v17 + 74); goto LABEL_23; } ++v8; ++v9; if ( v8 >= 12 ) break; v6 = v18; } if ( v17[344] ) sub_4C0800(*((_DWORD **)v17 + 74)); goto LABEL_21; } if ( v7 != 1 ) { LABEL_21: *(_DWORD *)(v3 + 456) = -1; *(_DWORD *)(v3 + 460) = -1; *(_DWORD *)(v3 + 472) = 0; sub_5D5B70((_WORD *)v3, 0, 1); *(_DWORD *)(v3 + 456) = *(_DWORD *)(v16 + 8); *(_DWORD *)(v3 + 460) = *(_DWORD *)(v16 + 12); *(_DWORD *)(v3 + 472) = *(_DWORD *)(a3 + 8); sub_5D5B70((_WORD *)v3, v18, 1); return 1; } v12 = 0; v13 = (_DWORD **)(this + 528); while ( 1 ) { v14 = *(_WORD *)(v6 + 8); if ( sub_5D5600(*v13) == v14 ) break; ++v12; ++v13; if ( v12 >= 12 ) { if ( v17[345] ) sub_4C08C0(*((_DWORD **)v17 + 74)); goto LABEL_21; } v6 = v18; } v11 = (_DWORD *)*((_DWORD *)v17 + 74); LABEL_23: v15 = sub_4090F0(-75146906); sub_492060(v11, (int)v15); byte_BA6BD0 = 1; return 0; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0043DAC0) -------------------------------------------------------- void __thiscall sub_43DAC0(char *this, __int16 a2) { char *v2; // edi __int16 v3; // cx signed int v4; // esi _WORD *v5; // eax int v6; // ecx signed int v7; // esi _WORD *v8; // eax int v9; // ecx int v10; // eax int v11; // eax _DWORD *v12; // edi int v13; // ST08_4 char *v14; // eax char *v15; // eax v2 = this; v3 = a2; if ( a2 != -1 ) { v4 = 0; v5 = v2 + 346; while ( *v5 != a2 ) { ++v4; ++v5; if ( v4 >= 12 ) goto LABEL_7; } v6 = *(_DWORD *)&v2[4 * v4 + 480]; *(_DWORD *)(v6 + 456) = -1; *(_DWORD *)(v6 + 460) = -1; *(_DWORD *)(v6 + 472) = 0; sub_5D5B70((_WORD *)v6, 0, 1); *(_WORD *)&v2[2 * v4 + 346] = -1; v3 = a2; LABEL_7: v7 = 0; v8 = v2 + 370; while ( *v8 != v3 ) { ++v7; ++v8; if ( v7 >= 12 ) goto LABEL_12; } v9 = *(_DWORD *)&v2[4 * v7 + 528]; *(_DWORD *)(v9 + 456) = -1; *(_DWORD *)(v9 + 460) = -1; *(_DWORD *)(v9 + 472) = 0; sub_5D5B70((_WORD *)v9, 0, 1); v3 = a2; *(_WORD *)&v2[2 * v7 + 370] = -1; LABEL_12: v10 = sub_685510(&byte_ADA230, v3); if ( v10 ) { v11 = *(_DWORD *)(v10 + 112) + 2; if ( v11 ) { v12 = (_DWORD *)*((_DWORD *)v2 + 74); v13 = v11; v14 = (char *)sub_4090F0(203364379); v15 = sub_7549E0(v14, v13); sub_492060(v12, (int)v15); } } } } // ADA230: using guessed type char byte_ADA230; //----- (0043DBD0) -------------------------------------------------------- void __thiscall sub_43DBD0(int this, float a2) { _DWORD **v2; // edi signed int v3; // esi int v4; // eax _DWORD **v5; // ecx int v6; // eax char *v7; // eax char *v8; // eax v2 = (_DWORD **)this; if ( *(float *)(this + 476) + 0.1000000014901161 <= a2 ) { *(float *)(this + 476) = a2; v3 = (unsigned __int16)sub_5D5600((_DWORD *)this); if ( (_WORD)v3 != -1 ) { v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = *(_DWORD ***)(v4 + 716); if ( v5 ) { v6 = sub_53C350(v5, v3); if ( v6 ) { v7 = sub_7549E0("%d", v6); sub_43E710(v2, (int)v7); } else { v8 = (char *)sub_402BF0(v2); sub_43DAC0(v8, v3); } } } } } } //----- (0043DC70) -------------------------------------------------------- char __thiscall sub_43DC70(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int v7; // eax _DWORD *v8; // eax _DWORD *v9; // esi const CHAR *v10; // eax int v12; // ecx char *v13; // eax int v14; // [esp-4h] [ebp-Ch] v4 = this; if ( !*a2 ) return 0; v5 = *(_DWORD **)(*a2 + 4); if ( v5[2] || (v6 = v5[4], v6 != 6) && v6 || (v7 = v5[5]) == 0 ) { LABEL_9: byte_BA6BD0 = 1; return 0; } v8 = (_DWORD *)sub_43E790((const char *)(*(_DWORD *)(v7 + 112) + 2)); if ( !v8 ) { v14 = -1211163901; LABEL_8: v9 = (_DWORD *)v4[113]; v10 = sub_4090F0(v14); sub_492060(v9, (int)v10); goto LABEL_9; } v12 = v4[117]; if ( v12 ) { if ( v12 == 1 && *v8 != 1 ) { v14 = -267378621; goto LABEL_8; } } else if ( *v8 != 2 ) { v14 = -1194847228; goto LABEL_8; } v13 = (char *)sub_402BF0(v4); return sub_43D940(v13, v4[116], *a2); } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0043DD20) -------------------------------------------------------- void __thiscall sub_43DD20(_BYTE *this, _BYTE *a2) { _BYTE *v2; // edi _WORD *v3; // ecx _WORD *v4; // eax signed int v5; // edx _WORD *v6; // ecx _WORD *v7; // eax signed int v8; // edx v2 = this; if ( a2 ) { if ( *a2 ) sub_43D820(this, 1); if ( a2[1] ) sub_43D8B0(v2, 1); v3 = v2 + 346; v4 = a2 + 2; v5 = 12; do { *v3 = *v4; ++v4; ++v3; --v5; } while ( v5 ); v6 = v2 + 370; v7 = a2 + 26; v8 = 12; do { *v6 = *v7; ++v7; ++v6; --v8; } while ( v8 ); sub_43D330(v2); } } //----- (0043DDA0) -------------------------------------------------------- volatile LONG *__cdecl sub_43DDA0(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1E0u); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_43D150((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (0043DEE0) -------------------------------------------------------- volatile LONG *__cdecl sub_43DEE0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x258u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_43D470((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0043E010) -------------------------------------------------------- char __thiscall sub_43E010(void *this, int a2) { int v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // esi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax char v12; // ST1C_1 int v13; // ST20_4 int v14; // ST24_4 int v15; // ST28_4 const CHAR *v16; // eax char v17; // ST1C_1 int v18; // ST20_4 int v19; // ST24_4 int v20; // ST28_4 const CHAR *v21; // eax char v22; // ST1C_1 int v23; // ST20_4 int v24; // ST24_4 int v25; // ST28_4 const CHAR *v26; // eax char v27; // ST1C_1 int v28; // ST20_4 int v29; // ST24_4 int v30; // ST28_4 const CHAR *v31; // eax char v32; // ST1C_1 int v33; // ST20_4 int v34; // ST24_4 int v35; // ST28_4 const CHAR *v36; // eax char v37; // ST1C_1 int v38; // ST20_4 int v39; // ST24_4 int v40; // ST28_4 const CHAR *v41; // eax char v42; // ST1C_1 int v43; // ST20_4 int v44; // ST24_4 int v45; // ST28_4 const CHAR *v46; // eax int *v47; // esi int v48; // ebx char *v49; // eax volatile LONG **v50; // eax volatile LONG *v51; // ebx const char *v52; // eax int v53; // ebx volatile LONG *v54; // eax int v55; // ecx int *v56; // esi int v57; // ebx char *v58; // eax volatile LONG **v59; // eax volatile LONG *v60; // ebx const char *v61; // eax int v62; // ebx volatile LONG *v63; // eax int v64; // ecx void (__thiscall ***v65)(_DWORD, signed int); // esi int v66[5]; // [esp+40h] [ebp-38h] char v67[4]; // [esp+54h] [ebp-24h] int v68; // [esp+58h] [ebp-20h] int v69; // [esp+5Ch] [ebp-1Ch] int v70; // [esp+60h] [ebp-18h] int v71; // [esp+64h] [ebp-14h] int v72; // [esp+68h] [ebp-10h] int v73; // [esp+74h] [ebp-4h] v2 = (int)this; v70 = 0; v3 = dword_BA6BA0; v73 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\Minimon_AutoItemUse.nif"); sub_8F66B0(v4, (int)&v70, v3); if ( !v70 ) return 0; v5 = sub_8FB140(v70, (int)"Frame", (int)&v71, (int)&v72, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"MinimonAutoItemUseWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v70; v73 = -1; if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v71; v9 = v72; v68 = v71; v69 = v72; sub_456260(v66); LOBYTE(v73) = 1; sub_455FF0(v66, v2); sub_456000(v66, v8, v9); sub_456380(v66, v70); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v70, (int)"Theme", (int)&v71, (int)&v72, v10); else v11 = sub_8FB140(v70, (int)"Theme", (int)&v71, (int)&v72, 0); sub_8F3EB0(v71 - v8, v72 - v9, (int)v11, v2, 0, 0); sub_456820(v66, (int)"Panel01", 0); v12 = dword_AA8D98; v13 = dword_AA8D9C; v14 = dword_AA8DA0; v15 = dword_AA8DA4; v16 = sub_4090F0(-852941777); sub_456760(v66, (int)"WinTitle", (int)v16, v12, v13, v14, v15, 5); sub_4563D0(v66, 15, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, 0); sub_4563D0(v66, 14, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); sub_456820(v66, (int)"BuffIcon", 0); sub_456820(v66, (int)"ChargedIcon", 0); v17 = dword_AA8C68; v18 = dword_AA8C6C; v19 = dword_AA8C70; v20 = dword_AA8C74; v21 = sub_4090F0(774776929); sub_456760(v66, (int)"BuffTipText", (int)v21, v17, v18, v19, v20, 4); v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_4090F0(828450380); sub_456760(v66, (int)"ChargedTipText", (int)v26, v22, v23, v24, v25, 4); v27 = dword_AA8C68; v28 = dword_AA8C6C; v29 = dword_AA8C70; v30 = dword_AA8C74; v31 = sub_4090F0(792812914); sub_456760(v66, (int)"TipText", (int)v31, v27, v28, v29, v30, 4); *(_DWORD *)(v2 + 576) = sub_4563D0(v66, 12, (int)"BuffBtnNor", (int)"BuffBtnClick", (int)"BuffBtnOver", 0, 0); *(_DWORD *)(v2 + 580) = sub_4563D0(v66, 13, (int)"ChargedBtnNor", (int)"ChargedBtnClick", (int)"ChargedBtnOver", 0, 0); *(_DWORD *)(v2 + 584) = sub_4563D0(v66, 14, (int)"CancelNor", (int)"CancelClick", (int)"CancelOver", 0, 0); v32 = dword_AA8C68; v33 = dword_AA8C6C; v34 = dword_AA8C70; v35 = dword_AA8C74; v36 = sub_4090F0(260406922); sub_456040(*(_DWORD *)(v2 + 584), (int)v36, v32, v33, v34, v35, 5); v37 = dword_AA8C68; v38 = dword_AA8C6C; v39 = dword_AA8C70; v40 = dword_AA8C74; v41 = sub_4090F0(1434484362); *(_DWORD *)(v2 + 588) = sub_456040(*(_DWORD *)(v2 + 576), (int)v41, v37, v38, v39, v40, 5); v42 = dword_AA8C68; v43 = dword_AA8C6C; v44 = dword_AA8C70; v45 = dword_AA8C74; v46 = sub_4090F0(1434484362); *(_DWORD *)(v2 + 592) = sub_456040(*(_DWORD *)(v2 + 580), (int)v46, v42, v43, v44, v45, 5); *(_DWORD *)v67 = 0; v47 = (int *)(v2 + 480); do { v48 = v70; v49 = sub_7549E0("BuffSlot%02d", *(_DWORD *)v67); v50 = sub_8FB140(v48, (int)v49, (int)&v71, (int)&v72, 0); v51 = sub_8F3EB0(v71 - v68, v72 - v69, (int)v50, v2, 0, 0); *((_DWORD *)v51 + 68) = dword_AD01E8; v52 = sub_4090F0(1263233097); sub_8F2EA0((void **)v51, v52); (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 256))(v51, 1); v53 = *(_DWORD *)v67; v54 = sub_43DDA0(v71 - v68 + 1, v72 - v69 + 1, *(int *)v67, v2, a2); *v47 = (int)v54; (*(void (__thiscall **)(volatile LONG *, signed int))(*v54 + 240))(v54, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v47 + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v47 + 516))(11); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v47 + 560))(10); *(_DWORD *)(*v47 + 304) = 1; *(_DWORD *)(*v47 + 468) = 0; sub_5D3170(*v47, 1); v55 = *v47; *(_DWORD *)(v55 + 456) = -1; *(_DWORD *)(v55 + 460) = -1; *(_DWORD *)(v55 + 472) = 0; sub_5D5B70((_WORD *)v55, 0, 1); ++v47; *(_DWORD *)v67 = v53 + 1; } while ( v53 + 1 < 12 ); *(_DWORD *)v67 = 0; v56 = (int *)(v2 + 528); do { v57 = v70; v58 = sub_7549E0("ChargedSlot%02d", *(_DWORD *)v67); v59 = sub_8FB140(v57, (int)v58, (int)&v71, (int)&v72, 0); v60 = sub_8F3EB0(v71 - v68, v72 - v69, (int)v59, v2, 0, 0); *((_DWORD *)v60 + 68) = dword_AD01E8; v61 = sub_4090F0(1280010313); sub_8F2EA0((void **)v60, v61); (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 256))(v60, 1); v62 = *(_DWORD *)v67; v63 = sub_43DDA0(v71 - v68 + 1, v72 - v69 + 1, *(_DWORD *)v67 + 12, v2, a2); *v56 = (int)v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 240))(v63, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v56 + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v56 + 516))(11); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v56 + 560))(10); *(_DWORD *)(*v56 + 304) = 1; *(_DWORD *)(*v56 + 468) = 1; sub_5D3170(*v56, 1); v64 = *v56; *(_DWORD *)(v64 + 456) = -1; *(_DWORD *)(v64 + 460) = -1; *(_DWORD *)(v64 + 472) = 0; sub_5D5B70((_WORD *)v64, 0, 1); ++v56; *(_DWORD *)v67 = v62 + 1; } while ( v62 + 1 < 12 ); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v73) = 0; sub_4562E0(v66); v65 = (void (__thiscall ***)(_DWORD, signed int))v70; v73 = -1; if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) && v65 ) (**v65)(v65, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0043E710) -------------------------------------------------------- int __thiscall sub_43E710(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[95] + 472))(a2); return (*(int (__stdcall **)(signed int))(*v2[95] + 256))(1); } //----- (0043E750) -------------------------------------------------------- void *__thiscall sub_43E750(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemSlot::`vftable'; *((_DWORD *)this + 58) = &ItemSlot::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AE014: using guessed type void *ItemSlot::`vftable'; // 9AE034: using guessed type void *ItemSlot::`vftable'; //----- (0043E790) -------------------------------------------------------- int __cdecl sub_43E790(const char *a1) { const char *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi int result; // eax v1 = a1; if ( !a1 || !*a1 ) return 0; v2 = *(_DWORD *)(dword_ACB370 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { result = sub_7474E0((_DWORD *)(dword_ACB370 + 4), v4); if ( result ) { if ( !strcmp((const char *)(result + 4), v1) ) return result; v1 = a1; } ++v4; } while ( v4 < v3 ); } return 0; } // ACB370: using guessed type int dword_ACB370; //----- (0043E820) -------------------------------------------------------- void *__thiscall sub_43E820(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MinimonAutoItemUseWin::`vftable'; *((_DWORD *)this + 58) = &MinimonAutoItemUseWin::`vftable'; *((_DWORD *)this + 102) = &DropContents::`vftable'; *((_DWORD *)this + 99) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9AE2A4: using guessed type void *MinimonAutoItemUseWin::`vftable'; // 9AE2C4: using guessed type void *MinimonAutoItemUseWin::`vftable'; //----- (0043E8D0) -------------------------------------------------------- char __thiscall sub_43E8D0(volatile LONG **this, int a2) { volatile LONG **v2; // edi char result; // al _DWORD *v4; // eax volatile LONG *v5; // esi int v6; // ST1C_4 int v7; // ST18_4 int v8; // eax volatile LONG *v9; // eax _DWORD *v10; // esi int v11; // ST1C_4 int v12; // eax volatile LONG *v13; // eax v2 = this; result = sub_8F15E0(this, 0, 0, 0, a2, (int)"MobKillCountWin", 0); if ( result ) { v4 = sub_8F62B0(0, 0, 0, 255); v5 = sub_8F3D50((int)v4, 20, 5, 100, 30, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v5 + 276))(v5, 0.5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v5 + 240))(v5, 0); v6 = sub_421050(0); v7 = (*(int (__thiscall **)(volatile LONG *))(*v5 + 148))(v5); v8 = (*(int (__thiscall **)(volatile LONG *))(*v5 + 144))(v5); v9 = sub_8F4A20(0, 0, v8, v7, v6, (int)v5, 0, 0); v2[87] = v9; (*(void (__thiscall **)(volatile LONG *, signed int))(*v9 + 488))(v9, 5); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); v10 = sub_67EEC0(0); v11 = (*(int (__thiscall **)(_DWORD *))(*v10 + 64))(v10); v12 = (*(int (__thiscall **)(_DWORD *))(*v10 + 60))(v10); v13 = sub_8F3D50((int)v10, 0, 0, v12, v11, (int)v2, 0, 0); v2[86] = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.34999999); result = 1; } return result; } //----- (0043EA90) -------------------------------------------------------- int *__thiscall sub_43EA90(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax void *v5; // edi _DWORD *v6; // eax int *result; // eax int v8; // edi char *v9; // eax v3 = this; v4 = this[86]; if ( v4 ) { v5 = *(void **)(v4 + 288); v6 = sub_67EEC0(a2); sub_8FCC40(v5, (int)v6); } result = (int *)v3[87]; v3[88] = 0; v3[89] = a3; if ( result ) { v8 = *result; v9 = sub_7549E0("(%d / %d)", 0, a3); result = (int *)(*(int (__thiscall **)(_DWORD, char *))(v8 + 472))(v3[87], v9); } return result; } //----- (0043EB00) -------------------------------------------------------- int __cdecl sub_43EB00(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MobKillCountWin::`vftable'; *(_DWORD *)(v2 + 232) = &MobKillCountWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AE51C: using guessed type void *MobKillCountWin::`vftable'; // 9AE53C: using guessed type void *MobKillCountWin::`vftable'; //----- (0043EC60) -------------------------------------------------------- void *__thiscall sub_43EC60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MobKillCountWin::`vftable'; *((_DWORD *)this + 58) = &MobKillCountWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AE51C: using guessed type void *MobKillCountWin::`vftable'; // 9AE53C: using guessed type void *MobKillCountWin::`vftable'; //----- (0043ECB0) -------------------------------------------------------- void **__thiscall sub_43ECB0(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &SlotWin::`vftable'; v1[58] = &SlotWin::`vftable'; v1[114] = (void *)-1; v1[115] = (void *)-1; v1[118] = 0; v1[116] = (void *)-1; v1[117] = (void *)-1; sub_5D5B70(v1, 0, 1); v1[113] = 0; *((_BYTE *)v1 + 448) = 0; return v1; } // 9AE8DC: using guessed type void *SlotWin::`vftable'; // 9AE8FC: using guessed type void *SlotWin::`vftable'; //----- (0043ED60) -------------------------------------------------------- char __thiscall sub_43ED60(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; sub_5D5420(v6, 0); result = 1; } return result; } //----- (0043EDF0) -------------------------------------------------------- char sub_43EDF0() { int v0; // eax v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A8140(v0, 182); return v0; } //----- (0043EE20) -------------------------------------------------------- _DWORD *__thiscall sub_43EE20(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; if ( a2 ) { if ( a2 == 1 && sub_5D5470(this[111]) ) return v2[111]; } else if ( sub_5D5470(this[110]) ) { return v2[110]; } return 0; } //----- (0043EE80) -------------------------------------------------------- void __thiscall sub_43EE80(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // eax int *v6; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 448) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[118]; if ( v2 ) { v3 = v1[115]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { if ( sub_5D5470(v4) ) { v5 = sub_5D5470(v1); if ( v5 ) { v6 = (int *)v1[68]; if ( v6 ) { sub_547C20(v6, v5); sub_8F2F90((int)v1); } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0043EF10) -------------------------------------------------------- char __thiscall sub_43EF10(_DWORD *this, char a2) { int v2; // eax unsigned int v4; // ecx int v5; // ecx v2 = this[118]; if ( !v2 ) return 0; v4 = this[115]; if ( v4 >= 0xC0 ) return 0; v5 = *(_DWORD *)(v2 + 4 * v4 + 348); if ( !v5 ) return 0; sub_536E90(v5, a2); return 1; } //----- (0043EF50) -------------------------------------------------------- void __thiscall sub_43EF50(_DWORD *this, float a2) { _BYTE *v2; // ecx v2 = (_BYTE *)this[116]; if ( v2[64] ) sub_6B0C00(v2, a2); } //----- (0043EFA0) -------------------------------------------------------- char __thiscall sub_43EFA0(int this, int a2, _DWORD *a3, int a4) { int v4; // esi char result; // al v4 = this; if ( a2 == 27 ) { result = (char)a3; if ( a3 ) { if ( !*a3 ) { *(_BYTE *)(*(_DWORD *)(this + 208) + 448) = 1; *(_BYTE *)(*(_DWORD *)(this + 212) + 448) = 1; result = sub_4C0200(*(_DWORD **)(this + 64), *(_DWORD *)(this + 216), *(_DWORD *)(this + 220)); *(_DWORD *)(v4 + 228) = 0; } } } return result; } //----- (0043F000) -------------------------------------------------------- char __thiscall sub_43F000(_DWORD *this) { int v1; // eax char result; // al v1 = this[116]; if ( v1 ) result = *(_BYTE *)(v1 + 64); else result = 0; return result; } //----- (0043F020) -------------------------------------------------------- char __thiscall sub_43F020(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (0043F050) -------------------------------------------------------- char __thiscall sub_43F050(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[116]); return (char)v2; } //----- (0043F080) -------------------------------------------------------- int *__thiscall sub_43F080(int this) { int v1; // esi int v2; // eax unsigned int v3; // ecx int v4; // ecx v1 = this; v2 = *(_DWORD *)(this + 472); *(_BYTE *)(this + 448) = 0; if ( v2 ) { v3 = *(_DWORD *)(this + 460); if ( v3 < 0xC0 ) { v4 = *(_DWORD *)(v2 + 4 * v3 + 348); if ( v4 ) sub_536E90(v4, 0); } } *(_DWORD *)(v1 + 456) = -1; *(_DWORD *)(v1 + 460) = -1; *(_DWORD *)(v1 + 472) = 0; return sub_5D5B70((_WORD *)v1, 0, 1); } //----- (0043F0E0) -------------------------------------------------------- unsigned int __userpurge sub_43F0E0@(int a1@, int a2@, unsigned int a3, char a4, char a5) { int v5; // esi unsigned int result; // eax _DWORD *v7; // ecx _DWORD *v8; // edi int v9; // eax int v10; // ecx unsigned int v11; // eax int v12; // ecx int v13; // ebx int v14; // eax int *v15; // ecx int v16; // edi char *v17; // eax char *v18; // edi int v19; // ST04_4 char *v20; // eax int v21; // ST04_4 char *v22; // eax char *v23; // eax _DWORD *v24; // eax int v25; // [esp-8h] [ebp-10h] unsigned int v26; // [esp+4h] [ebp-4h] v5 = a1; sub_6B0B40(*(float **)(a1 + 464), *(_DWORD **)(a1 + 468)); result = *(_DWORD *)(*(_DWORD *)(v5 + 296) + 716); v26 = result; if ( result ) { if ( a3 < 0xC0 ) { v7 = *(_DWORD **)(result + 4 * a3 + 348); if ( v7 ) { v25 = a2; result = sub_5D5470(v7); v8 = (_DWORD *)result; if ( result ) { sub_5D5B70(*(_WORD **)(v5 + 440), result, 1); *(_BYTE *)(*(_DWORD *)(v5 + 440) + 448) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 440) + 460) = a3; v9 = *(_DWORD *)(v5 + 440); v10 = *(_DWORD *)(v9 + 472); if ( v10 ) { v11 = *(_DWORD *)(v9 + 460); if ( v11 < 0xC0 ) { v12 = *(_DWORD *)(v10 + 4 * v11 + 348); if ( v12 ) sub_536E90(v12, 1); } } v13 = v8[28] + 34; v14 = (*(int (__thiscall **)(_DWORD *, int))(*v8 + 40))(v8, v25); v15 = *(int **)(v5 + 432); if ( v14 ) { v16 = *v15; v17 = sub_7549E0("(+%d)%s", v14); (*(void (__thiscall **)(_DWORD, char *))(v16 + 472))(*(_DWORD *)(v5 + 432), v17); } else { (*(void (__thiscall **)(int *, int))(*v15 + 472))(v15, v13); } v18 = 0; if ( a4 ) { if ( !a5 ) { v19 = *(_DWORD *)(v5 + 456); v20 = (char *)sub_4090F0(-1937024054); v18 = sub_7549E0(v20, v19); result = *(_DWORD *)(v5 + 448); if ( result >= 0xC0 ) return result; result = *(_DWORD *)(v26 + 4 * result + 348); if ( !result ) return result; sub_536E90(result, 0); *(_DWORD *)(v5 + 448) = 255; } } else { if ( a5 ) { v21 = *(_DWORD *)(v5 + 456); v22 = (char *)sub_4090F0(-206260802); v23 = sub_7549E0(v22, v21); } else { v23 = (char *)sub_4090F0(758912621); } v18 = v23; } sub_492060(*(_DWORD **)(v5 + 296), (int)v18); v24 = (_DWORD *)(v5 + 472); if ( *(_DWORD *)(v5 + 492) >= 0x10u ) v24 = (_DWORD *)*v24; result = sub_6BA680(&dword_AB6520, (int)v24); } } } } return result; } // 43F0E0: could not find valid save-restore pair for edi //----- (0043F2A0) -------------------------------------------------------- int *__thiscall sub_43F2A0(int this, int *a2) { int *result; // eax _DWORD *v3; // esi int *v4; // edi int v5; // ecx result = a2; v3 = (_DWORD *)this; if ( a2 ) { if ( a2 == (int *)1 ) { v4 = *(int **)(this + 444); result = (int *)(*(int (__stdcall **)(void *))(**(_DWORD **)(this + 436) + 472))(&unk_9AE796); } else { v4 = a2; } } else { v4 = *(int **)(this + 440); result = (int *)(*(int (__stdcall **)(void *))(**(_DWORD **)(this + 432) + 472))(&unk_9AE77F); } if ( v4 ) { result = (int *)sub_5D5470(v4); if ( result ) { v3[92] = v4[114]; v3[94] = 0; v5 = v4[115]; v3[95] = result; v3[93] = v5; v3[96] = 0; v3[106] = (*(int (__thiscall **)(int *))(*result + 12))(result); v3[88] = v4[118]; dword_BA6BCC = (int)(v3 + 86); result = sub_43F080((int)v4); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (0043F370) -------------------------------------------------------- char __thiscall sub_43F370(_DWORD *this, int a2, int a3) { int v3; // eax _DWORD *v4; // esi _DWORD *v6; // ecx int v7; // ebx int v8; // eax _DWORD *v9; // edi int *v10; // ecx int v11; // ST20_4 char *v12; // eax int v13; // ST20_4 char *v14; // eax _DWORD *v15; // eax int v16; // [esp-Ch] [ebp-1Ch] int v17; // [esp+4h] [ebp-Ch] int v18; // [esp+8h] [ebp-8h] v3 = *(_DWORD *)(a3 + 4); v4 = this; v18 = v3; if ( !v3 ) return 0; v6 = *(_DWORD **)(v3 + 20); v17 = (int)v6; if ( !v6 ) return 0; v7 = v6[28] + 34; v8 = (*(int (**)(void))(*v6 + 40))(); if ( a2 ) { if ( a2 != 1 ) return 0; v9 = (_DWORD *)v4[111]; v10 = (int *)v4[109]; v16 = v7; if ( v8 ) { v13 = *v10; v14 = sub_7549E0("(+%d)%s", v8, v7); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(v4[109], v14); goto LABEL_11; } } else { v9 = (_DWORD *)v4[110]; v10 = (int *)v4[108]; v16 = v7; if ( v8 ) { v11 = *v10; v12 = sub_7549E0("(+%d)%s", v8, v7); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(v4[108], v12); goto LABEL_11; } } (*(void (__thiscall **)(int *, int))(*v10 + 472))(v10, v16); LABEL_11: if ( !v9 ) return 0; v15 = sub_43EE20((_DWORD **)v4, a2); if ( v15 ) sub_43F080((int)v15); sub_43F080((int)v9); v9[114] = *(_DWORD *)(v18 + 8); v9[115] = *(_DWORD *)(v18 + 12); v9[118] = *(_DWORD *)(a3 + 8); sub_43EF10(v9, 1); sub_5D5B70(v9, v17, 1); return 1; } //----- (0043F490) -------------------------------------------------------- signed int __thiscall sub_43F490(int *this) { int *v1; // esi signed int result; // eax v1 = this; sub_43F080(this[110]); sub_43F080(v1[111]); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[108] + 472))(&unk_9AE797); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[109] + 472))(&unk_9AE79E); result = 255; v1[112] = 255; v1[113] = 255; return result; } //----- (0043F4F0) -------------------------------------------------------- int __thiscall sub_43F4F0(int *this) { int *v1; // esi int result; // eax v1 = this; sub_43F080(this[111]); result = (*(int (__stdcall **)(void *))(*(_DWORD *)v1[109] + 472))(&unk_9AE79F); v1[113] = 255; return result; } //----- (0043F520) -------------------------------------------------------- char __thiscall sub_43F520(int this, int *a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // esi const CHAR *v7; // eax _DWORD *v8; // eax int v9; // eax _DWORD *v10; // esi const CHAR *v11; // eax _DWORD *v12; // eax v4 = (_DWORD *)this; if ( *(_BYTE *)(this + 448) ) { byte_BA6BD0 = 1; return 0; } if ( !*a2 ) return 0; if ( dword_AD8EBC[1924] == 6 ) { v6 = *(_DWORD **)(this + 452); v7 = sub_4090F0(-489754875); sub_492060(v6, (int)v7); return 0; } v8 = *(_DWORD **)(*a2 + 4); if ( v8[2] || v8[4] || (v9 = v8[5]) == 0 ) { LABEL_11: byte_BA6BD0 = 1; return 0; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) != 23 ) { v10 = (_DWORD *)v4[113]; v11 = sub_4090F0(1143632510); sub_492060(v10, (int)v11); goto LABEL_11; } v12 = (_DWORD *)sub_402BF0(v4); return sub_43F370(v12, v4[116], *a2); } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0043F5F0) -------------------------------------------------------- _DWORD *__thiscall sub_43F5F0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MoverUpgradeWin::`vftable'; v1[58] = &MoverUpgradeWin::`vftable'; v1[86] = &PgWinDrop::`vftable'; v1[88] = 0; v1[106] = 0; v1[90] = &DropContents::`vftable'; *((_WORD *)v1 + 210) = -1; v1[117] = 0; v1[122] = 0; v1[123] = 15; *((_BYTE *)v1 + 472) = 0; v1[87] = v1 + 90; v1[108] = 0; v1[110] = 0; v1[109] = 0; v1[111] = 0; v1[112] = 255; v1[113] = 255; v1[114] = 0; v1[115] = 0; v1[116] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9AEB6C: using guessed type void *MoverUpgradeWin::`vftable'; // 9AEB8C: using guessed type void *MoverUpgradeWin::`vftable'; //----- (0043F6A0) -------------------------------------------------------- LONG __thiscall sub_43F6A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi v1 = this; *this = &MoverUpgradeWin::`vftable'; this[58] = &MoverUpgradeWin::`vftable'; v2 = (int *)this[116]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[116] = 0; } if ( v1[123] >= 0x10u ) operator delete((void *)v1[118]); v1[123] = 15; v1[122] = 0; *((_BYTE *)v1 + 472) = 0; v4 = v1[117]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[90] = &DropContents::`vftable'; v1[86] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9AEB6C: using guessed type void *MoverUpgradeWin::`vftable'; // 9AEB8C: using guessed type void *MoverUpgradeWin::`vftable'; //----- (0043F7E0) -------------------------------------------------------- signed int __thiscall sub_43F7E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx signed int result; // eax v1 = this; v2 = this[115]; if ( v2 ) { sub_4628D0(v2); v1[115] = 0; } sub_6B0BB0((_DWORD *)v1[116], (volatile LONG *)v1[117]); sub_43F080(v1[110]); sub_43F080(v1[111]); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[108] + 472))(&unk_9AE797); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[109] + 472))(&unk_9AE79E); result = 255; v1[112] = 255; v1[113] = 255; return result; } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); //----- (0043F870) -------------------------------------------------------- volatile LONG *__cdecl sub_43F870(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1DCu); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_43ECB0((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (0043F9B0) -------------------------------------------------------- volatile LONG *__cdecl sub_43F9B0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1F8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_43F5F0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0043FAE0) -------------------------------------------------------- char __thiscall sub_43FAE0(void *this, volatile LONG *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax char v15; // ST34_1 int v16; // ST38_4 int v17; // ST3C_4 int v18; // ST40_4 const CHAR *v19; // eax char v20; // ST34_1 int v21; // ST38_4 int v22; // ST3C_4 int v23; // ST40_4 const CHAR *v24; // eax char v25; // ST34_1 int v26; // ST38_4 int v27; // ST3C_4 int v28; // ST40_4 const CHAR *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax void **v32; // edi const char *v33; // eax int v34; // edi volatile LONG *v35; // eax volatile LONG **v36; // eax volatile LONG *v37; // eax void **v38; // edi const char *v39; // eax volatile LONG *v40; // eax volatile LONG *v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax volatile LONG *v45; // eax volatile LONG *v46; // edi char *v47; // eax volatile LONG *v48; // edi int v49; // eax float *v50; // eax float *v51; // eax void (__thiscall ***v52)(_DWORD, signed int); // esi void (__thiscall ***v53)(_DWORD, signed int); // esi int v54[5]; // [esp+58h] [ebp-44h] float v55; // [esp+6Ch] [ebp-30h] float v56; // [esp+70h] [ebp-2Ch] float v57; // [esp+74h] [ebp-28h] int v58; // [esp+78h] [ebp-24h] volatile LONG *v59; // [esp+7Ch] [ebp-20h] int v60; // [esp+80h] [ebp-1Ch] int v61; // [esp+84h] [ebp-18h] int v62; // [esp+88h] [ebp-14h] int v63; // [esp+8Ch] [ebp-10h] int v64; // [esp+98h] [ebp-4h] v2 = (int)this; v61 = 0; v3 = dword_BA6BA0; v64 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MoverUpgrade.nif"); sub_8F66B0(v4, (int)&v61, v3); if ( !v61 ) return 0; v5 = sub_8FB140(v61, (int)"Frame", (int)&v62, (int)&v63, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"MoverUpgradeWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v61; v64 = -1; if ( !v61 || InterlockedDecrement((volatile LONG *)(v61 + 4)) ) return 0; v7 = v6 == 0; LABEL_8: if ( !v7 ) (**v6)(v6, 1); return 0; } v9 = v63; v10 = v62; v58 = v63; sub_456260(v54); LOBYTE(v64) = 1; sub_455FF0(v54, v2); sub_456000(v54, v10, v9); sub_456380(v54, v61); v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v61, (int)"Theme", (int)&v62, (int)&v63, v11); else v12 = sub_8FB140(v61, (int)"Theme", (int)&v62, (int)&v63, 0); sub_8F3EB0(v62 - v10, v63 - v9, (int)v12, v2, 0, 0); v13 = (volatile LONG *)sub_43D0D0(0x1Cu); v59 = v13; v14 = sub_8FB140(v61, (int)"IconSlot", (int)&v62, (int)&v63, v13); sub_8F3EB0(v62 - v10, v63 - v9, (int)v14, v2, 0, 0); sub_456820(v54, (int)"Panel01", 0); sub_456820(v54, (int)"Panel02", 0); sub_456820(v54, (int)"Panel03", 0); v15 = dword_AA8D98; v16 = dword_AA8D9C; v17 = dword_AA8DA0; v18 = dword_AA8DA4; v19 = sub_4090F0(-2087678259); sub_456760(v54, (int)"WinTitle", (int)v19, v15, v16, v17, v18, 5); sub_4563D0(v54, 14, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, 0); sub_4563D0(v54, 13, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v59 = sub_4563D0(v54, 12, (int)"OkNor", (int)"OkOver", (int)"OkClick", 0, v59); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_4090F0(206920053); sub_456040((int)v59, (int)v24, v20, v21, v22, v23, 5); v59 = sub_4563D0(v54, 13, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v25 = dword_AA8C68; v26 = dword_AA8C6C; v27 = dword_AA8C70; v28 = dword_AA8C74; v29 = sub_40C190(-1750816545); sub_456040((int)v59, (int)v29, v25, v26, v27, v28, 5); v30 = sub_8FB140(v61, (int)"MainSlot", (int)&v62, (int)&v63, 0); v31 = sub_8F3EB0(v62 - v10, v63 - v9, (int)v30, v2, 0, 0); v32 = (void **)v31; *((_DWORD *)v31 + 68) = dword_AD01E8; v33 = sub_4090F0(-1787795759); sub_8F2EA0(v32, v33); (*((void (__thiscall **)(void **, signed int))*v32 + 60))(v32, 1); (*((void (__thiscall **)(void **, signed int))*v32 + 64))(v32, 1); v34 = v58; v35 = sub_43F870(v62 - v10 + 1, v63 - v58 + 1, 0, v2, (int)a2); *(_DWORD *)(v2 + 440) = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 240))(v35, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 440) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 440) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 440) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 440) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 440), 1); sub_43F080(*(_DWORD *)(v2 + 440)); v36 = sub_8FB140(v61, (int)"SubSlot", (int)&v62, (int)&v63, 0); v37 = sub_8F3EB0(v62 - v10, v63 - v34, (int)v36, v2, 0, 0); v38 = (void **)v37; *((_DWORD *)v37 + 68) = dword_AD01E8; v39 = sub_4090F0(-1418955913); sub_8F2EA0(v38, v39); (*((void (__thiscall **)(void **, signed int))*v38 + 60))(v38, 1); (*((void (__thiscall **)(void **, signed int))*v38 + 64))(v38, 1); v40 = sub_43F870(v62 - v10 + 1, v63 - v58 + 1, 1, v2, (int)a2); *(_DWORD *)(v2 + 444) = v40; (*(void (__thiscall **)(volatile LONG *, signed int))(*v40 + 240))(v40, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 444) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 444) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 444) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 444) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 444), 1); sub_43F080(*(_DWORD *)(v2 + 444)); *(_DWORD *)(v2 + 432) = sub_456980( v54, (int)"MainText", (int)&unk_9AE776, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 1); *(_DWORD *)(v2 + 436) = sub_456980( v54, (int)"SubText", (int)&unk_9AE777, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4, 0, 1); v41 = sub_456980( v54, (int)"Text01", (int)&unk_9AE77E, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0, 0, 0); v42 = v41; v43 = *v41; v44 = sub_4090F0(-857884619); (*(void (__thiscall **)(volatile LONG *, const CHAR *, _DWORD))(v43 + 480))(v42, v44, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v45 = sub_8F4180(0, 0, 1, 1, v2, 0, 0); v46 = v45; a2 = v45; if ( v45 ) InterlockedIncrement(v45 + 1); LOBYTE(v64) = 2; sub_65AD50((int *)(v2 + 468), (int *)&a2); LOBYTE(v64) = 1; if ( v46 && !InterlockedDecrement(v46 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v46)(v46, 1); v60 = 0; LOBYTE(v64) = 3; if ( !byte_ACAD5C ) sub_420410(); v47 = (char *)sub_401410(byte_ACA838, "MoverUpgrade_Start.nif"); sub_8F66B0(v47, (int)&v60, 0); if ( !v60 ) { LOBYTE(v64) = 0; sub_4562E0(v54); v6 = (void (__thiscall ***)(_DWORD, signed int))v61; v64 = -1; if ( !v61 || InterlockedDecrement((volatile LONG *)(v61 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_8; } v48 = (volatile LONG *)operator new(0x44u); a2 = v48; LOBYTE(v64) = 4; if ( v48 ) { v49 = sub_85BD60((void *)v60); v50 = sub_6B0A90((float *)v48, v49); } else { v50 = 0; } LOBYTE(v64) = 3; *(_DWORD *)(v2 + 464) = v50; if ( v50 ) { v51 = *(float **)v50; v55 = 0.0; v56 = 0.0; v51[22] = 0.0; v57 = 1000.0; v51[23] = 0.0; v51[24] = 1000.0; *(_BYTE *)(*(_DWORD *)(v2 + 464) + 66) = 1; } sub_4018E0((_DWORD *)(v2 + 472), "MoverUpgrade_Start", 0x12u); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v64) = 1; if ( v60 ) { v52 = (void (__thiscall ***)(_DWORD, signed int))v60; if ( !InterlockedDecrement((volatile LONG *)(v60 + 4)) ) { if ( v52 ) (**v52)(v52, 1); } } LOBYTE(v64) = 0; sub_4562E0(v54); v53 = (void (__thiscall ***)(_DWORD, signed int))v61; v64 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v53 ) (**v53)(v53, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (004402E0) -------------------------------------------------------- void __thiscall sub_4402E0(int this) { _DWORD *v1; // esi _DWORD *v2; // esi const CHAR *v3; // eax int v4; // eax int v5; // edi _DWORD *v6; // ecx int v7; // eax char *v8; // edi char *v9; // ebx int v10; // eax int v11; // ecx int v12; // ecx int v13; // eax void *v14; // edi void *v15; // eax char *v16; // eax char *v17; // eax volatile LONG *v18; // eax _DWORD *v19; // esi const CHAR *v20; // eax _DWORD *v21; // esi const CHAR *v22; // eax int v23; // [esp+4h] [ebp-4h] v1 = (_DWORD *)this; if ( dword_AD8EBC[1924] == 6 ) { v2 = *(_DWORD **)(this + 296); v3 = sub_4090F0(-489754875); sub_492060(v2, (int)v3); } else { v4 = sub_5D5470(*(_DWORD **)(this + 440)); v5 = v4; if ( v4 && (v6 = (_DWORD *)v1[111], v1[112] = *(unsigned __int8 *)(v1[110] + 460), v1[114] = *(_DWORD *)(v4 + 112) + 34, (v7 = sub_5D5470(v6)) != 0) ) { v1[113] = *(unsigned __int8 *)(v1[111] + 460); v8 = (char *)(*(_DWORD *)(v5 + 112) + 2); v9 = (char *)(*(_DWORD *)(v7 + 112) + 2); v23 = sub_4405C0(v8); v10 = sub_4405C0(v9); if ( v23 && v10 ) { v11 = *(_DWORD *)(v10 + 51); if ( v11 == 6 || v11 == 3 || !v11 || (v12 = *(_DWORD *)(v23 + 51), v12 == 5) || v12 == 2 || !v12 || *(_WORD *)(v23 + 48) && (v12 == 1 || v12 == 3) || *(_WORD *)(v10 + 48) && ((v13 = *(_DWORD *)(v10 + 51), v13 == 1) || v13 == 2) ) { v19 = (_DWORD *)v1[74]; v20 = sub_4090F0(1316841962); sub_492060(v19, (int)v20); } else { v14 = sub_440720(v8); v15 = sub_440720(v9); if ( v14 ) { if ( v15 ) { v16 = (char *)sub_4090F0(1352509400); v17 = sub_7549E0(v16); v18 = sub_462C30(2, v17); v1[115] = v18; (**((void (__stdcall ***)(int))v18 + 58))((int)(v1 + 58)); } } } } } else { v21 = (_DWORD *)v1[74]; v22 = sub_4090F0(-2073140011); sub_492060(v21, (int)v22); } } } //----- (00440490) -------------------------------------------------------- void __thiscall sub_440490(int this, int a2, int *a3) { _DWORD *v3; // eax switch ( a2 ) { case 11: sub_43F2A0(this, a3); break; case 12: sub_4402E0(this); break; case 13: if ( *(_DWORD *)(this + 460) ) *(_DWORD *)(this + 460) = 0; sub_4AA0F0(*(_DWORD **)(this + 296), 1); break; case 14: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "MoverUpgrade"); break; default: return; } } //----- (00440520) -------------------------------------------------------- int __thiscall sub_440520(_DWORD *this, unsigned int a2) { _DWORD *v2; // ecx int result; // eax if ( a2 < 0xC0 && (v2 = (_DWORD *)this[a2 + 87]) != 0 ) result = sub_5D5470(v2); else result = 0; return result; } //----- (00440550) -------------------------------------------------------- void *__thiscall sub_440550(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SlotWin::`vftable'; *((_DWORD *)this + 58) = &SlotWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AE8DC: using guessed type void *SlotWin::`vftable'; // 9AE8FC: using guessed type void *SlotWin::`vftable'; //----- (00440590) -------------------------------------------------------- void *__thiscall sub_440590(void *this, char a2) { void *v2; // esi v2 = this; sub_43F6A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004405C0) -------------------------------------------------------- int __cdecl sub_4405C0(char *a1) { int v1; // eax unsigned int v2; // esi int v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl int v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACB374 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACB374 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, (void *)(v3 + 4), strlen((const char *)(v3 + 4))); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACB374: using guessed type int dword_ACB374; //----- (00440720) -------------------------------------------------------- void *__cdecl sub_440720(char *a1) { int v1; // eax unsigned int v2; // edi void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl void *v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACB378 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACB378 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACB378: using guessed type int dword_ACB378; //----- (00440870) -------------------------------------------------------- void __thiscall sub_440870(void **this, void *a2) { void **v2; // esi _DWORD *v3; // eax char *v4; // ecx _DWORD *v5; // edi void *v6; // eax unsigned int v7; // ecx void *v8; // ST00_4 v2 = this; v3 = operator new[](4 * (_DWORD)a2); v4 = (char *)v2[2]; v5 = v3; v6 = 0; if ( v4 < v2[3] ) { do { v5[(_DWORD)v6] = *((_DWORD *)*v2 + (_DWORD)v4++); v6 = (char *)v6 + 1; } while ( v4 < v2[3] ); } else { for ( ; v4 < v2[1]; v6 = (char *)v6 + 1 ) v5[(_DWORD)v6] = *((_DWORD *)*v2 + (_DWORD)v4++); v7 = 0; if ( v2[3] ) { do { v5[(_DWORD)v6] = *((_DWORD *)*v2 + v7++); v6 = (char *)v6 + 1; } while ( v7 < (unsigned int)v2[3] ); } } v2[3] = v6; v8 = *v2; v2[2] = 0; v2[1] = a2; operator delete[](v8); *v2 = v5; } //----- (00440CA0) -------------------------------------------------------- void __thiscall sub_440CA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTPointerMap::`vftable'; sub_940360(this); *v1 = &NiTMapBase,void *,CMsgEater *>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9AEDB0: using guessed type void *NiTMapBase,void *,CMsgEater *>::`vftable'; // 9AEDD0: using guessed type void *NiTPointerMap::`vftable'; //----- (00440D10) -------------------------------------------------------- int __thiscall sub_440D10(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // eax int result; // eax v2 = this; v3 = this[2]; if ( v3 == -1 ) { v4 = (_DWORD *)*this; this[2] = 0; *v4 = a2; this[3] = 1; } else { if ( v3 == this[3] ) sub_440870((void **)this, (void *)(2 * this[1])); *(_DWORD *)(*v2 + 4 * v2[3]++) = a2; } result = v2[3]; if ( result == v2[1] ) v2[3] = 0; return result; } //----- (00440D70) -------------------------------------------------------- void **__thiscall sub_440D70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,void *,CMsgEater *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AEDB0: using guessed type void *NiTMapBase,void *,CMsgEater *>::`vftable'; //----- (00440DB0) -------------------------------------------------------- void **__thiscall sub_440DB0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,void *,CMsgEater *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AEDB0: using guessed type void *NiTMapBase,void *,CMsgEater *>::`vftable'; // 9AEDD0: using guessed type void *NiTPointerMap::`vftable'; //----- (00440E30) -------------------------------------------------------- char *__thiscall sub_440E30(void *this, char a2) { char *v2; // edi void *v3; // ST00_4 _DWORD *v4; // ST10_4 v2 = (char *)this; v3 = (void *)*((_DWORD *)this + 5); *(_DWORD *)this = &CMsgMgr::`vftable'; operator delete[](v3); v4 = v2 + 4; *v4 = &NiTPointerMap::`vftable'; sub_940360((_DWORD *)v2 + 1); *v4 = &NiTMapBase,void *,CMsgEater *>::`vftable'; sub_940360((_DWORD *)v2 + 1); operator delete[](*((void **)v2 + 3)); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AEDB0: using guessed type void *NiTMapBase,void *,CMsgEater *>::`vftable'; // 9AEDD0: using guessed type void *NiTPointerMap::`vftable'; // 9AEDF0: using guessed type void *CMsgMgr::`vftable'; //----- (00440FB0) -------------------------------------------------------- bool __thiscall sub_440FB0(float *this) { return 3.4028235e38 != this[1]; } //----- (00440FD0) -------------------------------------------------------- void __thiscall sub_440FD0(float *this, float a2, float a3) { this[7] = a3; this[1] = a3; this[5] = 0.0; this[4] = a2; this[2] = a3 + this[3] * 0.25; } //----- (00441000) -------------------------------------------------------- void __thiscall sub_441000(float *this) { this[5] = 0.0; this[4] = 0.0; this[6] = 0.0; this[1] = 3.4028235e38; } //----- (00441020) -------------------------------------------------------- float *__thiscall sub_441020(float *this) { float *result; // eax result = this; this[4] = 0.0; *(_DWORD *)this = &Oscillation::`vftable'; this[6] = 0.0; this[1] = 3.4028235e38; *(_DWORD *)this = &OscillationEx::`vftable'; this[10] = 0.0; this[2] = 0.025; this[3] = 0.1; this[9] = 0.5; this[8] = 0.0; return result; } // 9AEEC0: using guessed type void *Oscillation::`vftable'; // 9AEED4: using guessed type void *OscillationEx::`vftable'; //----- (00441070) -------------------------------------------------------- void __thiscall sub_441070(_DWORD *this) { *this = &Oscillation::`vftable'; } // 9AEEC0: using guessed type void *Oscillation::`vftable'; //----- (00441080) -------------------------------------------------------- void __thiscall sub_441080(int this) { *(float *)(this + 20) = 0.0; *(float *)(this + 16) = 0.0; *(float *)(this + 24) = 0.0; *(float *)(this + 4) = 3.4028235e38; *(_DWORD *)(this + 40) = 0; } //----- (004410A0) -------------------------------------------------------- void __thiscall sub_4410A0(float *this, float a2) { float v2; // ST04_4 double v3; // st7 double v4; // st6 bool v5; // c0 bool v6; // c3 double v7; // st7 double v8; // st6 float v9; // ST04_4 float v10; // ST04_4 float v11; // ST04_4 double v12; // st6 float v13; // [esp+10h] [ebp+8h] float v14; // [esp+10h] [ebp+8h] float v15; // [esp+10h] [ebp+8h] if ( 3.4028235e38 != this[1] ) { v13 = a2 - this[1]; v2 = v13 + this[1]; v3 = this[1]; v4 = this[2]; v5 = v4 < v3; v6 = v4 == v3; v7 = v2; if ( !v5 && !v6 && this[2] < v7 ) { v14 = v7 - this[2]; v8 = v14; this[7] = this[7] + v14; v13 = this[2] - this[1]; v9 = v8 + this[2]; this[2] = v9 + this[3] * 0.5; } this[1] = v7; v10 = (v7 - this[7] + this[8]) / this[3] * flt_BA45BC; v11 = sin(v10); v12 = this[4]; if ( v11 < 0.0 ) v12 = -v12; this[6] = v12; v15 = (this[5] - this[4]) * this[9] * v13 + this[4]; this[4] = v15; if ( v15 < 0.0099999998 ) { this[1] = 3.4028235e38; this[6] = 0.0; } } } // BA45BC: using guessed type float flt_BA45BC; //----- (004411A0) -------------------------------------------------------- int __thiscall sub_4411A0(int this, float a2, float a3, float a4, int a5, float a6) { int result; // eax result = a5; *(float *)(this + 28) = a6; *(_DWORD *)(this + 40) = a5; *(float *)(this + 4) = a6; *(float *)(this + 20) = 0.0; *(float *)(this + 16) = a2; *(float *)(this + 8) = a6 + *(float *)(this + 12) * 0.25; *(float *)(this + 12) = a3; *(float *)(this + 36) = a4; return result; } //----- (004411E0) -------------------------------------------------------- int __thiscall sub_4411E0(int this, int a2, float a3) { int result; // eax float v4; // [esp+8h] [ebp+8h] result = a2; if ( a2 ) { v4 = (double)*(unsigned int *)(a2 + 2) / 100.0; *(float *)(this + 28) = a3; *(float *)(this + 4) = a3; *(float *)(this + 20) = 0.0; *(float *)(this + 16) = v4; *(float *)(this + 8) = a3 + *(float *)(this + 12) * 0.25; *(float *)(this + 12) = (double)*(unsigned int *)(result + 6) / 100.0; *(float *)(this + 36) = (double)*(unsigned int *)(result + 10) / 100.0; result = *(_DWORD *)(result + 14); *(_DWORD *)(this + 40) = result; } return result; } //----- (004412F0) -------------------------------------------------------- const void **__cdecl sub_4412F0(const void **a1, int a2) { const void **result; // eax bool v3; // cf switch ( a2 ) { case 0: result = sub_4018E0(a1, "FMyCamOsc", 9u); break; case 1: result = sub_4018E0(a1, "FEneCamOsc", 0xAu); break; case 2: result = sub_4018E0(a1, "FParCamOsc", 0xAu); break; case 3: result = sub_4018E0(a1, "FAllCamOsc", 0xAu); break; case 4: result = sub_4018E0(a1, "MyCamOsc", 8u); break; case 5: result = sub_4018E0(a1, "EneCamOsc", 9u); break; case 6: result = sub_4018E0(a1, "ParCamOsc", 9u); break; case 7: result = sub_4018E0(a1, "AllCamOsc", 9u); break; case 8: result = sub_4018E0(a1, "DmgOsc", 6u); break; default: result = a1; v3 = (unsigned int)a1[5] < 0x10; a1[4] = 0; if ( !v3 ) result = (const void **)*a1; *(_BYTE *)result = 0; break; } return result; } //----- (004413E0) -------------------------------------------------------- int sub_4413E0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB37C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB37C: using guessed type int dword_ACB37C; //----- (00441400) -------------------------------------------------------- void *__thiscall sub_441400(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Oscillation::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AEEC0: using guessed type void *Oscillation::`vftable'; //----- (00441430) -------------------------------------------------------- int __cdecl sub_441430(__int16 a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4413E0() ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACB37C + 4), v1) != a1 ) { if ( ++v1 >= sub_4413E0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB37C + 4), v1); } // ACB37C: using guessed type int dword_ACB37C; //----- (00441480) -------------------------------------------------------- char sub_441480() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "PartyScoreWin"); return (char)v0; } //----- (004414B0) -------------------------------------------------------- void sub_4414B0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) sub_4A5FB0(v0, 0); } //----- (004414D0) -------------------------------------------------------- int __thiscall sub_4414D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[106]; if ( v2 ) { v3 = *((_BYTE *)v1 + 428) == 0; *((_BYTE *)v1 + 428) = v3; sub_466AF0(v2, 0, v3, 0); result = sub_465130((_DWORD *)v1[106]); } return result; } //----- (00441510) -------------------------------------------------------- int __thiscall sub_441510(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[106]; if ( v2 ) { v3 = *((_BYTE *)v1 + 429) == 0; *((_BYTE *)v1 + 429) = v3; sub_466AF0(v2, 1, v3, 0); result = sub_465130((_DWORD *)v1[106]); } return result; } //----- (00441550) -------------------------------------------------------- int __thiscall sub_441550(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[106]; if ( v2 ) { v3 = *((_BYTE *)v1 + 430) == 0; *((_BYTE *)v1 + 430) = v3; sub_466AF0(v2, 2, v3, 1); result = sub_465130((_DWORD *)v1[106]); } return result; } //----- (00441590) -------------------------------------------------------- int __thiscall sub_441590(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[106]; if ( v2 ) { v3 = *((_BYTE *)v1 + 431) == 0; *((_BYTE *)v1 + 431) = v3; sub_466AF0(v2, 3, v3, 1); result = sub_465130((_DWORD *)v1[106]); } return result; } //----- (004415D0) -------------------------------------------------------- int __thiscall sub_4415D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[106]; if ( v2 ) { v3 = *((_BYTE *)v1 + 432) == 0; *((_BYTE *)v1 + 432) = v3; sub_466AF0(v2, 4, v3, 1); result = sub_465130((_DWORD *)v1[106]); } return result; } //----- (00441610) -------------------------------------------------------- void __thiscall sub_441610(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 10: sub_4414D0(this); break; case 11: sub_441510(this); break; case 12: sub_441550(this); break; case 13: sub_441590(this); break; case 14: sub_4415D0(this); break; case 17: sub_441480(); break; case 18: sub_4414B0(); break; default: return; } } //----- (00441690) -------------------------------------------------------- int __userpurge sub_441690@(int a1@, int a2@, _BYTE *a3, _DWORD *a4, int *a5, int *a6, unsigned __int8 *a7) { int result; // eax int v8; // esi int v9; // edx int v10; // ebx int v11; // ST14_4 char *v12; // eax int v13; // edx int v14; // ecx int v15; // edx int v16; // eax int v17; // ecx unsigned __int8 v18; // al int v19; // ecx int v20; // [esp+0h] [ebp-2Ch] int v21; // [esp+10h] [ebp-1Ch] int v22; // [esp+14h] [ebp-18h] int v23; // [esp+18h] [ebp-14h] int v24; // [esp+1Ch] [ebp-10h] int v25; // [esp+20h] [ebp-Ch] char v26; // [esp+24h] [ebp-8h] result = *a5; v8 = a1; if ( *a5 >= 0 && result < 20 ) { if ( *a3 ) { (*(void (__stdcall **)(int *, int, int))(**(_DWORD **)(*(_DWORD *)(a1 + 4 * result + 344) + 312) + 468))( &dword_AA8C68, a2, v20); (*(void (__cdecl **)(int *))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 308) + 468))(&dword_AA8C68); } else { (*(void (__stdcall **)(void *, int, int))(**(_DWORD **)(*(_DWORD *)(a1 + 4 * result + 344) + 312) + 468))( &unk_AA8CE8, a2, v20); (*(void (__cdecl **)(void *))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 308) + 468))(&unk_AA8CE8); } if ( *a3 ) { v9 = *(_DWORD *)(v8 + 4 * *a5 + 344); v10 = **(_DWORD **)(v9 + 312); v11 = *(_DWORD *)(v9 + 312); v12 = sub_7549E0("%d", *a4); (*(void (__thiscall **)(int, char *))(v10 + 472))(v11, v12); } else { (*(void (__stdcall **)(const char *))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 312) + 472))("?"); } v13 = a6[1]; v21 = *a6; v14 = a6[2]; v22 = v13; v15 = a6[3]; v16 = a6[4]; v23 = v14; v17 = *a5; v24 = v15; v25 = v16; v26 = 0; (*(void (__cdecl **)(int *))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * v17 + 344) + 308) + 472))(&v21); switch ( *a7 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v18 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v18 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v18 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v18 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v18 = 21; break; case 0x1Au: case 0x1Bu: v18 = 26; break; default: v18 = 0; break; } result = v18 - 1; switch ( result ) { case 0: return (*(int (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 316) + 256))(1); case 5: v19 = *(_DWORD *)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 320); goto LABEL_24; case 10: return (*(int (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 324) + 256))(1); case 15: v19 = *(_DWORD *)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 328); goto LABEL_24; case 20: result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 332) + 256))(1); break; case 25: v19 = *(_DWORD *)(*(_DWORD *)(v8 + 4 * *a5 + 344) + 336); LABEL_24: result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v19 + 256))(1); break; default: return result; } } return result; } // 441690: could not find valid save-restore pair for ebx // AA8C68: using guessed type int dword_AA8C68; //----- (00441990) -------------------------------------------------------- int __thiscall sub_441990(int *this) { int *v1; // esi signed int v2; // ebx int result; // eax signed int v4; // edi signed int v5; // [esp+Ch] [ebp-4h] v1 = this + 86; v5 = 4; do { v2 = 5; do { result = *v1; if ( *v1 ) { (*(void (__stdcall **)(int *))(**(_DWORD **)(result + 312) + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(**(_DWORD **)(*v1 + 308) + 468))(&dword_AA8C68); (*(void (__stdcall **)(void *))(**(_DWORD **)(*v1 + 312) + 472))(&unk_9AEEFF); (*(void (__stdcall **)(void *))(**(_DWORD **)(*v1 + 308) + 472))(&unk_9AEF06); sub_71B190((_DWORD **)*v1); v4 = 316; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + *v1) + 256))(0); v4 += 4; } while ( v4 < 340 ); } ++v1; --v2; } while ( v2 ); --v5; } while ( v5 ); return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (00441A60) -------------------------------------------------------- LONG __thiscall sub_441A60(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi signed int v5; // [esp+14h] [ebp-10h] v1 = this; *this = &PartyScoreWin::`vftable'; this[58] = &PartyScoreWin::`vftable'; v2 = this + 86; v5 = 4; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; --v5; } while ( v5 ); v1[107] = 0; *((_BYTE *)v1 + 432) = 0; `eh vector destructor iterator'(v1 + 86, 4u, 20, sub_410C00); return sub_8F10F0(v1); } // 9AF0F8: using guessed type void *PartyScoreWin::`vftable'; // 9AF114: using guessed type void *PartyScoreWin::`vftable'; //----- (00441B30) -------------------------------------------------------- int __thiscall sub_441B30(int *this) { int *v1; // esi v1 = this; sub_441990(this); return sub_466A50((_DWORD *)v1[106]); } //----- (00441B50) -------------------------------------------------------- int __thiscall sub_441B50(void *this) { int v1; // ebx char v2; // al int v3; // edx const char *v4; // eax int (*v5)(void); // eax int result; // eax signed int i; // esi int v8; // [esp+Ch] [ebp-28h] int v9; // [esp+10h] [ebp-24h] int v10; // [esp+14h] [ebp-20h] char v11; // [esp+1Ah] [ebp-1Ah] char v12; // [esp+1Bh] [ebp-19h] char v13[4]; // [esp+1Ch] [ebp-18h] int v14; // [esp+20h] [ebp-14h] int v15; // [esp+24h] [ebp-10h] int v16; // [esp+28h] [ebp-Ch] int v17; // [esp+2Ch] [ebp-8h] v1 = (int)this; v9 = dword_B9DCC4; v2 = sub_652070(dword_AD8EBC); v3 = *(_DWORD *)dword_AD8EBC; v11 = v2; v4 = (const char *)(*(int (**)(void))(v3 + 84))(); v17 = 0; v16 = 0; v15 = 0; v14 = 0; *(_DWORD *)v13 = 0; strncpy(v13, v4, 0x14u); v5 = *(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656); v8 = 0; v10 = v5(); v12 = 1; result = sub_441690(v1, v1, &v12, &v10, &v8, (int *)v13, (unsigned __int8 *)&v11); for ( i = 0; i < v9; ++i ) { result = sub_6C10B0(&dword_B9DC70, i); if ( result ) { v10 = i + 1; result = sub_441690( v1, v1, (_BYTE *)(result + 20), (_DWORD *)(result + 24), &v10, (int *)result, (unsigned __int8 *)(result + 52)); } } return result; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00441CB0) -------------------------------------------------------- int __thiscall sub_441CB0(_DWORD *this, int a2, _WORD *a3, unsigned __int8 *a4, unsigned __int8 *a5, unsigned __int8 *a6) { int result; // eax _DWORD *v7; // edi int v8; // esi int v9; // edx int v10; // eax int v11; // ecx int v12; // eax int v13; // ecx int v14; // ebx int v15; // eax CHAR *v16; // eax int v17; // ST0C_4 int v18; // ST08_4 int v19; // ST04_4 char *v20; // eax char *v21; // eax signed int v22; // [esp+14h] [ebp-124h] char v23; // [esp+1Ch] [ebp-11Ch] int v24; // [esp+11Ch] [ebp-1Ch] int v25; // [esp+120h] [ebp-18h] int v26; // [esp+124h] [ebp-14h] int v27; // [esp+128h] [ebp-10h] int v28; // [esp+12Ch] [ebp-Ch] char v29; // [esp+130h] [ebp-8h] result = (int)a4; v7 = this; if ( this[106] ) { result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { v22 = 0; if ( *a3 > 0u ) { v8 = a2 + 8; do { v9 = *(_DWORD *)v8; v10 = *(_DWORD *)(v8 - 8); v25 = *(_DWORD *)(v8 - 4); v11 = *(_DWORD *)(v8 + 8); v26 = v9; v24 = v10; v12 = *(_DWORD *)(v8 + 4); v28 = v11; v13 = v7[106]; v27 = v12; v29 = 0; v14 = ((int (__thiscall *)(int, int *))loc_466CA0)(v13, &v24); v15 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(v8 + 12)); if ( v15 ) v16 = (CHAR *)(v15 + 21); else v16 = (CHAR *)&byte_9A8050; sub_4661A0((_DWORD *)v7[106], v14, 1, v16); sub_4E21E0(*(_DWORD *)(v8 + 16), *(_DWORD *)(v8 + 20), &v23); sub_4661A0((_DWORD *)v7[106], v14, 2, &v23); sub_4E21E0(*(_DWORD *)(v8 + 24), *(_DWORD *)(v8 + 28), &v23); sub_4661A0((_DWORD *)v7[106], v14, 3, &v23); sub_4E21E0(*(_DWORD *)(v8 + 32), *(_DWORD *)(v8 + 36), &v23); sub_4661A0((_DWORD *)v7[106], v14, 4, &v23); v17 = *a6; v18 = *a5; v19 = *a4; v20 = (char *)sub_4090F0(-523125225); v21 = sub_7549E0(v20, v19, v18, v17); sub_4661A0((_DWORD *)v7[106], v14, 5, v21); v8 += 48; ++v22; } while ( v22 < (unsigned __int16)*a3 ); } result = sub_465130((_DWORD *)v7[106]); } } return result; } // AC9C84: using guessed type int dword_AC9C84; //----- (00441EA0) -------------------------------------------------------- int __cdecl sub_441EA0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1B4u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &PartyScoreWin::`vftable'; *(_DWORD *)(v2 + 232) = &PartyScoreWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 344), 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *(_DWORD *)(v2 + 424) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AF0F8: using guessed type void *PartyScoreWin::`vftable'; // 9AF114: using guessed type void *PartyScoreWin::`vftable'; //----- (00442000) -------------------------------------------------------- void __thiscall sub_442000(_DWORD **this) { unsigned int v1; // edi int *v2; // esi unsigned int v3; // edx unsigned int v4; // ebx char *v5; // esi void *v6; // [esp+10h] [ebp-34h] int v7; // [esp+14h] [ebp-30h] int v8; // [esp+18h] [ebp-2Ch] _DWORD **v9; // [esp+20h] [ebp-24h] unsigned int v10; // [esp+24h] [ebp-20h] int *v11; // [esp+28h] [ebp-1Ch] int v12; // [esp+2Ch] [ebp-18h] _DWORD **v13; // [esp+30h] [ebp-14h] _DWORD **v14; // [esp+34h] [ebp-10h] int v15; // [esp+40h] [ebp-4h] v9 = this; v1 = 0; v2 = dword_B9E5E4; v12 = 0; v11 = dword_B9E5E4; v13 = this + 86; do { if ( *v2 != v2[1] ) { sub_442B90((char **)&v6, (char **)v2); v3 = (signed int)((unsigned __int64)(2021161081i64 * (v7 - (signed int)v6)) >> 32) >> 5; v4 = v3 + (v3 >> 31); v15 = 0; if ( v3 + (v3 >> 31) ) { v14 = v13; v5 = (char *)v6 + 24; do { v10 = v1 + v12; sub_441690((int)v9, v4, v5 - 4, v5, (int *)&v10, (int *)v5 - 6, (unsigned __int8 *)v5 + 28); sub_71C6B0(*v14); ++v14; ++v1; v5 += 68; } while ( v1 < v4 ); v2 = v11; v1 = 0; } v15 = -1; if ( v6 ) operator delete(v6); v6 = 0; v7 = 0; v8 = 0; } v13 += 5; v12 += 5; v2 += 4; v11 = v2; } while ( (signed int)v2 < (signed int)&unk_B9E624 ); } // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (00442110) -------------------------------------------------------- void __thiscall sub_442110(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( sub_718A50(&dword_B9E560) ) { sub_442000(v1); } else if ( dword_B9DCC4 ) { sub_441B50(v1); } } // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; //----- (00442140) -------------------------------------------------------- char __thiscall sub_442140(volatile LONG **this, int a2) { volatile LONG **v2; // esi char *v3; // eax volatile LONG **v4; // eax int v5; // edi volatile LONG *v6; // eax volatile LONG **v7; // eax int v8; // eax int v9; // edx int v10; // eax volatile LONG *v11; // esi volatile LONG v12; // edi const CHAR *v13; // eax _DWORD *v14; // esi int *v15; // esi int v16; // edi int v17; // esi char *v18; // edi volatile LONG **v19; // eax volatile LONG *v20; // eax signed int v21; // esi char *v22; // eax char v23; // ST1C_1 int v24; // ST20_4 int v25; // ST24_4 int v26; // ST28_4 char *v27; // eax char *v28; // eax char *v29; // eax volatile LONG *v30; // eax volatile LONG *v31; // esi char *v32; // esi void (__thiscall ***v33)(_DWORD, signed int); // esi int v35; // esi int v36; // eax volatile LONG *v37; // esi char v38; // ST1C_1 int v39; // ST20_4 int v40; // ST24_4 int v41; // ST28_4 const CHAR *v42; // eax volatile LONG *v43; // esi char v44; // ST1C_1 int v45; // ST20_4 int v46; // ST24_4 int v47; // ST28_4 const CHAR *v48; // eax volatile LONG *v49; // esi char v50; // ST1C_1 int v51; // ST20_4 int v52; // ST24_4 int v53; // ST28_4 const CHAR *v54; // eax volatile LONG *v55; // esi char v56; // ST1C_1 int v57; // ST20_4 int v58; // ST24_4 int v59; // ST28_4 const CHAR *v60; // eax volatile LONG *v61; // esi char v62; // ST1C_1 int v63; // ST20_4 int v64; // ST24_4 int v65; // ST28_4 const CHAR *v66; // eax volatile LONG *v67; // esi char v68; // ST1C_1 int v69; // ST20_4 int v70; // ST24_4 int v71; // ST28_4 const CHAR *v72; // eax void (__thiscall ***v73)(_DWORD, signed int); // esi volatile LONG **v74; // [esp+3Ch] [ebp-88h] void *v75; // [esp+40h] [ebp-84h] int v76; // [esp+44h] [ebp-80h] int v77; // [esp+48h] [ebp-7Ch] char v78; // [esp+4Ch] [ebp-78h] char v79; // [esp+50h] [ebp-74h] int v80; // [esp+54h] [ebp-70h] int v81; // [esp+58h] [ebp-6Ch] int v82; // [esp+5Ch] [ebp-68h] int v83; // [esp+60h] [ebp-64h] int v84[5]; // [esp+64h] [ebp-60h] volatile LONG *v85; // [esp+78h] [ebp-4Ch] volatile LONG *v86; // [esp+7Ch] [ebp-48h] int v87; // [esp+80h] [ebp-44h] int v88; // [esp+84h] [ebp-40h] char *v89; // [esp+88h] [ebp-3Ch] volatile LONG *v90; // [esp+8Ch] [ebp-38h] char *v91; // [esp+90h] [ebp-34h] int v92; // [esp+94h] [ebp-30h] void *v93; // [esp+98h] [ebp-2Ch] int v94; // [esp+A8h] [ebp-1Ch] unsigned int v95; // [esp+ACh] [ebp-18h] int v96; // [esp+C0h] [ebp-4h] v2 = this; v74 = this; v92 = 0; v96 = 0; v88 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\PartyScoreWin.nif"); sub_8F66B0(v3, (int)&v92, v88); if ( !v92 ) return 0; v4 = sub_8FB140(v92, (int)"Frame", (int)&v90, (int)&v89, 0); if ( !sub_8F1440(v2, 0, 0, (int)v4, 0, a2, (int)"PartyScoreWin", 0) ) { LABEL_34: v33 = (void (__thiscall ***)(_DWORD, signed int))v92; v96 = -1; if ( v92 && !InterlockedDecrement((volatile LONG *)(v92 + 4)) && v33 ) (**v33)(v33, 1); return 0; } v5 = (int)v90; v91 = v89; v85 = v90; sub_456260(v84); LOBYTE(v96) = 1; sub_455FF0(v84, (int)v2); sub_456000(v84, v5, (int)v91); sub_456380(v84, v92); v6 = (volatile LONG *)sub_43D0D0(0x13u); if ( v6 ) v7 = sub_8FB140(v92, (int)"Theme", (int)&v90, (int)&v89, v6); else v7 = sub_8FB140(v92, (int)"Theme", (int)&v90, (int)&v89, 0); sub_8F3EB0((int)v90 - v5, v89 - v91, (int)v7, (int)v2, 0, 0); v86 = (volatile LONG *)sub_43D0D0(0x1Du); sub_456820(v84, (int)"Panel01", 0); sub_456820(v84, (int)"Panel02", 0); sub_456820(v84, (int)"Panel03", 0); v8 = *sub_8FB140(v92, (int)"WinTitle", (int)&v90, (int)&v89, 0)[9]; v9 = *(_DWORD *)(v8 + 20); v88 = *(_DWORD *)(v8 + 24); v87 = v9; v10 = sub_421050(7); v11 = sub_8F4A20((int)v90 - v5, v89 - v91, v87, v88, v10, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 5); v12 = *v11; v13 = sub_4090F0(2137141700); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v12 + 472))(v11, v13); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 256))(v11, 1); sub_4563D0(v84, 18, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); sub_4563D0(v84, 17, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, 0); v75 = 0; v76 = 0; v77 = 0; v79 = 0; v80 = 0; v81 = 0; v82 = 0; v83 = 0; LOBYTE(v96) = 2; v14 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v75, 1); *v14 = 1; v14[1] = v92; v95 = 15; v94 = 0; LOBYTE(v93) = 0; sub_4018E0(&v93, "ColumnBarNor", 0xCu); v15 = v14 + 18; LOBYTE(v96) = 3; sub_40B060(v15, (const void **)&v93); LOBYTE(v96) = 2; if ( v95 >= 0x10 ) operator delete(v93); v95 = 15; v94 = 0; LOBYTE(v93) = 0; sub_4018E0(&v93, "ColumnBarClick", 0xEu); LOBYTE(v96) = 4; sub_40B060(v15, (const void **)&v93); LOBYTE(v96) = 2; if ( v95 >= 0x10 ) operator delete(v93); v95 = 15; v94 = 0; LOBYTE(v93) = 0; sub_4018E0(&v93, "ColumnBarOver", 0xDu); LOBYTE(v96) = 5; sub_40B060(v15, (const void **)&v93); LOBYTE(v96) = 2; if ( v95 >= 0x10 ) operator delete(v93); v16 = 0; do { v17 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v75, 2); *(_DWORD *)v17 = 2; v88 = v16 + 1; v18 = sub_7549E0("Column%.2d", v16 + 1); v95 = 15; v94 = 0; LOBYTE(v93) = 0; sub_4018E0(&v93, v18, strlen(v18)); LOBYTE(v96) = 6; sub_442C70((int *)(v17 + 72), &v93); LOBYTE(v96) = 2; if ( v95 >= 0x10 ) operator delete(v93); v16 = v88; v95 = 15; v94 = 0; LOBYTE(v93) = 0; *(_DWORD *)(v17 + 4) = v92; *(_BYTE *)(v17 + 88) = 1; } while ( v16 < 6 ); sub_466680(&v75, 0); v19 = sub_8FB140(v92, (int)"SubText01", (int)&v90, (int)&v89, v86); v20 = sub_466330((char *)v90 - (char *)v85, v89 - v91, (int)v19, *(float *)&v74, (int **)&v75, 0, 0); v74[106] = v20; sub_465130(v20); v21 = 1; do { v22 = sub_7549E0("Party%.2dNor", v21); v85 = sub_456820(v84, (int)v22, 0); if ( !v85 ) { LOBYTE(v96) = 1; if ( v75 ) { ((void (__cdecl *)(void *, int, char *, volatile LONG *))loc_40ACF0)(v75, v76, &v78, v85); operator delete(v75); } v75 = 0; v76 = 0; v77 = 0; LOBYTE(v96) = 0; sub_4562E0(v84); goto LABEL_34; } v23 = dword_AA8C68; v24 = dword_AA8C6C; v25 = dword_AA8C70; v26 = dword_AA8C74; v27 = (char *)sub_40A910(99996478); v28 = sub_7549E0(v27, v21); sub_456040((int)v85, (int)v28, v23, v24, v25, v26, 5); ++v21; } while ( v21 - 1 < 4 ); v87 = 0; v29 = (char *)(v74 + 86); do { v86 = 0; v91 = v29; do { v30 = sub_720D10(v92, v87, (int)v86, (int)v74, 0, 0); v31 = *(volatile LONG **)v91; v88 = (int)v30; if ( v31 == v30 ) { v32 = v91; } else { if ( v31 ) { if ( !InterlockedDecrement(v31 + 1) && v31 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v31)(v31, 1); v30 = (volatile LONG *)v88; } v32 = v91; *(_DWORD *)v91 = v30; if ( v30 ) InterlockedIncrement(v30 + 1); } *(_BYTE *)(*(_DWORD *)v32 + 412) = 1; v35 = *(_DWORD *)v32; if ( v35 ) { v36 = (*(int (__thiscall **)(int))(*(_DWORD *)v35 + 4))(v35); if ( v36 ) { while ( (_UNKNOWN *)v36 != &unk_BA6A8C ) { v36 = *(_DWORD *)(v36 + 4); if ( !v36 ) goto LABEL_46; } (*((void (__thiscall **)(volatile LONG **, int, _DWORD))*v74 + 29))(v74, v35, 0); sub_85C4D0(v74); sub_85BED0((_DWORD **)v74, 0.0, 1); } } LABEL_46: v91 += 4; v86 = (volatile LONG *)((char *)v86 + 1); } while ( (signed int)v86 < 5 ); v29 = v91; ++v87; } while ( v87 < 4 ); v37 = sub_4563D0(v84, 10, (int)"Title01Nor", (int)"Title01Click", (int)"Title01Over", 0, 0); v38 = dword_AA8C68; v39 = dword_AA8C6C; v40 = dword_AA8C70; v41 = dword_AA8C74; v42 = sub_40C190(1319409301); sub_456040((int)v37, (int)v42, v38, v39, v40, v41, 5); v43 = sub_4563D0(v84, 11, (int)"Title02Nor", (int)"Title02Click", (int)"Title02Over", 0, 0); v44 = dword_AA8C68; v45 = dword_AA8C6C; v46 = dword_AA8C70; v47 = dword_AA8C74; v48 = sub_40C190(1247775651); sub_456040((int)v43, (int)v48, v44, v45, v46, v47, 5); v49 = sub_4563D0(v84, 12, (int)"Title03Nor", (int)"Title03Click", (int)"Title03Over", 0, 0); v50 = dword_AA8C68; v51 = dword_AA8C6C; v52 = dword_AA8C70; v53 = dword_AA8C74; v54 = sub_4090F0(-1819237176); sub_456040((int)v49, (int)v54, v50, v51, v52, v53, 5); v55 = sub_4563D0(v84, 13, (int)"Title04Nor", (int)"Title04Click", (int)"Title04Over", 0, 0); v56 = dword_AA8C68; v57 = dword_AA8C6C; v58 = dword_AA8C70; v59 = dword_AA8C74; v60 = sub_4090F0(775171171); sub_456040((int)v55, (int)v60, v56, v57, v58, v59, 5); v61 = sub_4563D0(v84, 14, (int)"Title05Nor", (int)"Title05Click", (int)"Title05Over", 0, 0); v62 = dword_AA8C68; v63 = dword_AA8C6C; v64 = dword_AA8C70; v65 = dword_AA8C74; v66 = sub_4090F0(-1635490939); sub_456040((int)v61, (int)v66, v62, v63, v64, v65, 5); v67 = sub_4563D0(v84, 15, (int)"Title06Nor", (int)"Title06Click", (int)"Title06Over", 0, 0); v68 = dword_AA8C68; v69 = dword_AA8C6C; v70 = dword_AA8C70; v71 = dword_AA8C74; v72 = sub_4090F0(-203441363); sub_456040((int)v67, (int)v72, v68, v69, v70, v71, 5); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v74 + 59))(v74, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v96) = 1; if ( v75 ) { ((void (__cdecl *)(void *, int, char *, volatile LONG *))loc_40ACF0)(v75, v76, &v78, v85); operator delete(v75); } v75 = 0; v76 = 0; v77 = 0; LOBYTE(v96) = 0; sub_4562E0(v84); v73 = (void (__thiscall ***)(_DWORD, signed int))v92; v96 = -1; if ( v92 && !InterlockedDecrement((volatile LONG *)(v92 + 4)) ) { if ( v73 ) (**v73)(v73, 1); } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00442A60) -------------------------------------------------------- void *__stdcall sub_442A60(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x3C3C3C3 || (result = operator new(68 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00442AC0) -------------------------------------------------------- void __thiscall sub_442AC0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( a2 ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v3 ) { while ( (_UNKNOWN *)v3 != &unk_BA6A8C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 116))(v2, a2, 0); sub_85C4D0(v2); sub_85BED0((_DWORD **)v2, 0.0, 1); } } } //----- (00442B20) -------------------------------------------------------- void *__thiscall sub_442B20(void *this, char a2) { void *v2; // esi v2 = this; sub_441A60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00442B50) -------------------------------------------------------- char *__cdecl sub_442B50(char *a1, char *a2, char *a3) { char *v3; // edx char *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 68 ) { if ( result ) qmemcpy(result, v3, 0x44u); v3 += 68; } return result; } //----- (00442B90) -------------------------------------------------------- char **__thiscall sub_442B90(char **this, char **a2) { char **v2; // esi unsigned int v3; // edi char *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; v9 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = (a2[1] - *a2) / 68; *this = 0; this[1] = 0; this[2] = 0; if ( v3 ) { if ( v3 > 0x3C3C3C3 ) std::_Xlength_error("vector too long"); v4 = (char *)sub_442A60((char *)v3); v2[2] = &v4[68 * v3]; *v2 = v4; v2[1] = v4; v5 = a2[1]; v6 = *a2; v11 = 0; v2[1] = sub_442B50(v6, v5, v4); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00442C70) -------------------------------------------------------- void __thiscall sub_442C70(int *this, void *a2) { int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx void *v7; // [esp-4h] [ebp-20h] v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_40AFE0(v2, 1); v6 = (_DWORD *)v2[1]; if ( v6 ) { v7 = a2; goto LABEL_11; } } else { v4 = (signed int)((signed int)a2 + ((unsigned __int64)(-1840700269i64 * (_DWORD)((_DWORD)a2 - *v2)) >> 32) - *v2) >> 4; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_40AFE0(v2, 1); v6 = (_DWORD *)v2[1]; if ( v6 ) { v7 = (void *)(*v2 + 28 * v5); LABEL_11: v6[5] = 15; v6[4] = 0; *(_BYTE *)v6 = 0; sub_406450(v6, v7); goto LABEL_12; } } LABEL_12: v2[1] += 28; } //----- (00442D40) -------------------------------------------------------- _DWORD *__thiscall sub_442D40(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_658E20(this); *v1 = &Pet::`vftable'; v1[15] = &Pet::`vftable'; v1[21] = &Pet::`vftable'; v1[739] = -1; return v1; } // 9AF338: using guessed type void *Pet::`vftable'; // 9AF358: using guessed type void *Pet::`vftable'; // 9AF364: using guessed type void *Pet::`vftable'; //----- (00442D90) -------------------------------------------------------- char __thiscall sub_442D90(int this, int a2, int a3) { int v3; // edi _DWORD *v4; // eax int v5; // ecx FILE *v6; // eax int v7; // edx char result; // al void (__stdcall ***v9)(signed int); // [esp+Ch] [ebp-8h] _DWORD *v10; // [esp+10h] [ebp-4h] v3 = this; *(float *)(this + 2236) = 0.0; *(float *)(this + 2240) = 0.0; *(_DWORD *)(this + 2160) = 0; *(_DWORD *)(this + 2152) = 0; *(_DWORD *)(this + 2156) = 0; *(_DWORD *)(this + 2164) = 0; *(_DWORD *)(this + 2172) = 0; *(_DWORD *)(this + 2232) = 0; *(_DWORD *)(this + 2244) = 0; *(_BYTE *)(this + 2252) = 0; *(_DWORD *)(this + 2168) = 0; nullsub_22(0, 0); *(_WORD *)(v3 + 2224) = 0; *(_BYTE *)(v3 + 2226) = 0; *(_WORD *)(v3 + 2227) = 0; *(float *)(v3 + 2248) = 0.0; v4 = sub_66C120(&unk_AD8D28, *(_DWORD *)(v3 + 2956)); v5 = *(_DWORD *)(v3 + 696); v10 = v4; v9 = (void (__stdcall ***)(signed int))v5; if ( (_DWORD *)v5 != v4 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v9 ) (**v9)(1); v4 = v10; } *(_DWORD *)(v3 + 696) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v6 = sub_64C9A0(*(_DWORD *)(v3 + 2956)); v7 = *(_DWORD *)(v3 + 2144); *(_DWORD *)(v3 + 2160) = v6; (*(void (__thiscall **)(int, int))(v7 + 24))(v3 + 2144, v3); if ( *(_DWORD *)(v3 + 696) ) result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 604))(v3, a2); else result = 0; return result; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (00442EC0) -------------------------------------------------------- char __thiscall sub_442EC0(float *this, int a2, __int16 a3, void *a4) { float *v4; // esi float v5; // edx int (__thiscall *v6)(float *); // eax char v7; // al int v8; // edx unsigned __int8 (__thiscall *v9)(float *); // eax void (__thiscall *v10)(float *, signed int); // eax char *v11; // eax void *v12; // eax _DWORD *v13; // eax int v14; // eax char v16; // [esp+10h] [ebp-40h] int v17; // [esp+1Ch] [ebp-34h] char v18; // [esp+23h] [ebp-2Dh] void *v19; // [esp+24h] [ebp-2Ch] unsigned int v20; // [esp+34h] [ebp-1Ch] unsigned int v21; // [esp+38h] [ebp-18h] int v22; // [esp+4Ch] [ebp-4h] v4 = this; v5 = *this; v17 = a2; v6 = *(int (__thiscall **)(float *))(LODWORD(v5) + 48); *((_WORD *)this + 274) = a3; v7 = v6(this); v8 = *(_DWORD *)v4; v18 = v7; v9 = *(unsigned __int8 (__thiscall **)(float *))(v8 + 48); *((_BYTE *)v4 + 1924) = 1; v4[482] = 0.0; if ( v18 != v9(v4) ) *((_BYTE *)v4 + 1925) = 1; v10 = *(void (__thiscall **)(float *, signed int))(*(_DWORD *)v4 + 128); *((_DWORD *)v4 + 739) = v17; *((_BYTE *)v4 + 944) = 0; *((_BYTE *)v4 + 2680) = 0; v10(v4, 1); *((_BYTE *)v4 + 1482) = 1; v21 = 15; v20 = 0; LOBYTE(v19) = 0; sub_4018E0(&v19, a4, strlen((const char *)a4)); v22 = 0; if ( v20 <= 0 ) { v11 = (char *)sub_443A80(v17); if ( v11 ) { v12 = sub_443AD0(v11 + 4); if ( v12 ) (*(void (__thiscall **)(float *, int))(*(_DWORD *)v4 + 88))(v4, (int)v12 + 32); } } else { (*(void (__thiscall **)(float *, void *))(*(_DWORD *)v4 + 88))(v4, a4); } v13 = sub_439D70(byte_ADB468, &v16); v14 = sub_4316B0(v13); if ( v14 ) v4[374] = (double)*(unsigned int *)(v14 + 72); if ( v21 >= 0x10 ) operator delete(v19); return 1; } //----- (00443020) -------------------------------------------------------- void *__thiscall sub_443020(char *this, char a2) { return sub_443900(this - 84, a2); } //----- (00443030) -------------------------------------------------------- void *__thiscall sub_443030(char *this, char a2) { return sub_443900(this - 60, a2); } //----- (00443040) -------------------------------------------------------- int __thiscall sub_443040(float *this, int a2, float a3) { int result; // eax float v4; // [esp+Ch] [ebp+Ch] result = a2; v4 = 1.0 / a3; *(float *)a2 = *this * v4; *(float *)(a2 + 4) = this[1] * v4; *(float *)(a2 + 8) = v4 * this[2]; return result; } //----- (00443070) -------------------------------------------------------- double __thiscall sub_443070(float *this) { float v1; // ST00_4 v1 = this[1] * this[1] + *this * *this + this[2] * this[2]; return (float)sqrt(v1); } //----- (004430B0) -------------------------------------------------------- double __thiscall sub_4430B0(float *this) { float v1; // ST04_4 float v2; // ST04_4 double result; // st7 float v4; // ST04_4 v1 = this[1] * this[1] + *this * *this + this[2] * this[2]; v2 = sqrt(v1); result = v2; if ( v2 <= 0.000001 ) { *this = 0.0; this[1] = 0.0; this[2] = 0.0; result = (float)0.0; } else { v4 = 1.0 / result; *this = *this * v4; this[1] = v4 * this[1]; this[2] = v4 * this[2]; } return result; } //----- (00443140) -------------------------------------------------------- float *__thiscall sub_443140(float *this, float *a2, float *a3) { float *result; // eax float v4; // [esp+0h] [ebp-Ch] float v5; // [esp+4h] [ebp-8h] float v6; // [esp+8h] [ebp-4h] float v7; // [esp+18h] [ebp+Ch] float v8; // [esp+18h] [ebp+Ch] float v9; // [esp+18h] [ebp+Ch] v4 = a3[2] * this[1] - a3[1] * this[2]; v5 = this[2] * *a3 - *this * a3[2]; v6 = a3[1] * *this - *a3 * this[1]; v7 = v5 * v5 + v4 * v4 + v6 * v6; v8 = sqrt(v7); result = a2; if ( v8 <= 0.000001 ) { *a2 = 0.0; a2[1] = 0.0; a2[2] = 0.0; } else { v9 = 1.0 / v8; *a2 = v9 * v4; a2[1] = v9 * v5; a2[2] = v9 * v6; } return result; } //----- (00443200) -------------------------------------------------------- char __cdecl sub_443200(int *a1, float *a2) { float v2; // edx int v3; // eax int *v5; // eax float v6; // ecx float v7; // edx int *v8; // eax float v9; // ecx float v10; // edx char v11; // [esp+0h] [ebp-24h] float v12; // [esp+Ch] [ebp-18h] float v13; // [esp+10h] [ebp-14h] float v14; // [esp+14h] [ebp-10h] float v15; // [esp+18h] [ebp-Ch] float v16; // [esp+1Ch] [ebp-8h] float v17; // [esp+20h] [ebp-4h] float v18; // [esp+2Ch] [ebp+8h] float v19; // [esp+2Ch] [ebp+8h] v2 = *((float *)a1 + 1); v3 = a1[2]; v15 = *(float *)a1; v17 = 0.0; v16 = v2; sub_4430B0(&v15); v18 = flt_AB4FD0 * v15 + flt_AB4FD4 * v16 + flt_AB4FD8 * v17; v19 = fabs(v18); if ( 1.0 - v19 < 0.0000009999999974752427 ) return 0; v5 = (int *)sub_443140(&v15, &v12, &flt_AB4FD0); v6 = *((float *)v5 + 1); v15 = *(float *)v5; v7 = *((float *)v5 + 2); v16 = v6; v17 = v7; v8 = (int *)sub_443140(&flt_AB4FD0, (float *)&v11, &v15); v9 = *((float *)v8 + 1); v12 = *(float *)v8; v10 = *((float *)v8 + 2); *a2 = v15; v13 = v9; v14 = v10; a2[3] = v16; a2[6] = v17; a2[1] = v12; a2[4] = v13; a2[7] = v14; a2[2] = flt_AB4FD0; a2[5] = flt_AB4FD4; a2[8] = flt_AB4FD8; return 1; } // AB4FD0: using guessed type float flt_AB4FD0; // AB4FD4: using guessed type float flt_AB4FD4; // AB4FD8: using guessed type float flt_AB4FD8; //----- (00443300) -------------------------------------------------------- int __thiscall sub_443300(_DWORD *this, int a2) { unsigned int v2; // edx this[6] = a2; if ( a2 ) { v2 = *(_DWORD *)(a2 + 108); this[7] = v2; if ( 10000 * (v2 / 0x2710) == 300000 ) this[22] = a2; } return nullsub_22(this[3], a2); } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (00443340) -------------------------------------------------------- char __thiscall sub_443340(_DWORD *this, const char *a2, _DWORD *a3) { _DWORD *v3; // ecx int v4; // eax v3 = (_DWORD *)this[4]; if ( !v3 ) return 0; v4 = sub_64BA20(v3, a2); if ( !v4 ) return 0; *a3 = *(_DWORD *)(v4 + 108); return 1; } //----- (00443370) -------------------------------------------------------- int __thiscall sub_443370(_DWORD *this) { return this[159]; } //----- (00443380) -------------------------------------------------------- int __thiscall sub_443380(_DWORD *this, int a2) { int result; // eax result = a2; this[159] = a2; return result; } //----- (00443390) -------------------------------------------------------- int __thiscall sub_443390(_BYTE *this, char a2) { _BYTE *v2; // esi char v3; // bl int result; // eax v2 = this; v3 = (*(int (**)(void))(*(_DWORD *)this + 48))(); v2[1924] = a2; switch ( a2 ) { case 2: *((_DWORD *)v2 + 482) = 1; break; case 3: sub_65F610((float *)v2); goto LABEL_4; default: LABEL_4: *((_DWORD *)v2 + 482) = 0; break; } result = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v2 + 48))(v2); if ( v3 != (_BYTE)result ) v2[1925] = 1; return result; } //----- (00443410) -------------------------------------------------------- bool __thiscall sub_443410(_BYTE *this) { return this[1924] != 3; } //----- (00443420) -------------------------------------------------------- int __thiscall sub_443420(char *this) { return (int)(this + 550); } //----- (00443430) -------------------------------------------------------- char *__thiscall sub_443430(char *this, char *a2) { char *result; // eax int v3; // edx char v4; // cl result = a2; v3 = this + 550 - a2; do { v4 = *result; result[v3] = *result; ++result; } while ( v4 ); return result; } //----- (00443450) -------------------------------------------------------- int __thiscall sub_443450(_DWORD *this) { return this[158]; } //----- (00443460) -------------------------------------------------------- int __thiscall sub_443460(_DWORD *this) { return this[160]; } //----- (00443470) -------------------------------------------------------- int __thiscall sub_443470(_DWORD *this) { return this[161]; } //----- (00443480) -------------------------------------------------------- int __thiscall sub_443480(_DWORD *this) { return this[162]; } //----- (00443490) -------------------------------------------------------- int __thiscall sub_443490(_DWORD *this) { return this[163]; } //----- (004434A0) -------------------------------------------------------- int __thiscall sub_4434A0(_DWORD *this) { return this[164]; } //----- (004434B0) -------------------------------------------------------- int __thiscall sub_4434B0(_DWORD *this) { return this[165]; } //----- (004434C0) -------------------------------------------------------- int __thiscall sub_4434C0(_DWORD *this) { return this[166]; } //----- (004434D0) -------------------------------------------------------- int __thiscall sub_4434D0(_DWORD *this, int a2) { int result; // eax result = a2; this[160] = a2; return result; } //----- (004434E0) -------------------------------------------------------- int __thiscall sub_4434E0(_DWORD *this, int a2) { int result; // eax result = a2; this[161] = a2; return result; } //----- (004434F0) -------------------------------------------------------- int __thiscall sub_4434F0(_DWORD *this, int a2) { int result; // eax result = a2; this[162] = a2; return result; } //----- (00443500) -------------------------------------------------------- int __thiscall sub_443500(_DWORD *this, int a2) { int result; // eax result = a2; this[163] = a2; return result; } //----- (00443510) -------------------------------------------------------- int __thiscall sub_443510(_DWORD *this, int a2) { int result; // eax result = a2; this[164] = a2; return result; } //----- (00443520) -------------------------------------------------------- int __thiscall sub_443520(_DWORD *this, int a2) { int result; // eax result = a2; this[165] = a2; return result; } //----- (00443530) -------------------------------------------------------- int __thiscall sub_443530(_DWORD *this) { return this[167]; } //----- (00443540) -------------------------------------------------------- int __thiscall sub_443540(_DWORD *this) { return this[168]; } //----- (00443550) -------------------------------------------------------- int __thiscall sub_443550(_DWORD *this, int a2) { int result; // eax result = a2; this[167] = a2; return result; } //----- (00443560) -------------------------------------------------------- int __thiscall sub_443560(_DWORD *this, int a2) { int result; // eax result = a2; this[168] = a2; return result; } //----- (00443570) -------------------------------------------------------- int __thiscall sub_443570(_DWORD *this, int *a2) { _DWORD *v2; // esi int result; // eax v2 = this; (*(void (__thiscall **)(_DWORD *, int *))(this[397] + 40))(this + 397, a2); result = *a2; v2[464] = *a2; v2[465] = a2[1]; v2[466] = a2[2]; return result; } //----- (004435B0) -------------------------------------------------------- void __thiscall sub_4435B0(void *this, float *a2) { float v2; // [esp+0h] [ebp-Ch] float v3; // [esp+4h] [ebp-8h] float v4; // [esp+8h] [ebp-4h] v2 = 0.0; v3 = 0.0; v4 = 1.0; sub_8CF580((int)this + 1516, a2, &v2); } //----- (004435E0) -------------------------------------------------------- int __thiscall sub_4435E0(char *this) { return (int)(this + 1856); } //----- (004435F0) -------------------------------------------------------- _DWORD *__thiscall sub_4435F0(_DWORD *this, _DWORD *a2) { return sub_8CF7D0(this + 379, a2); } //----- (00443600) -------------------------------------------------------- int __thiscall sub_443600(char *this) { return sub_8E48E0(this + 1516); } //----- (00443610) -------------------------------------------------------- int __thiscall sub_443610(_DWORD *this) { return this[483]; } //----- (00443620) -------------------------------------------------------- int __thiscall sub_443620(_DWORD *this, int a2) { int result; // eax result = a2; this[483] = a2; return result; } //----- (00443630) -------------------------------------------------------- int __thiscall sub_443630(_DWORD *this) { return (*(int (__thiscall **)(_DWORD *))(this[397] + 4))(this + 397); } //----- (00443650) -------------------------------------------------------- char __thiscall sub_443650(_BYTE *this) { return this[1584]; } //----- (00443660) -------------------------------------------------------- int __thiscall sub_443660(float *this, float a2) { float *v2; // esi float v3; // eax v2 = this; v3 = *this; this[461] = a2; (*(void (**)(void))(LODWORD(v3) + 268))(); return sub_67E1E0(v2 + 397, a2); } //----- (00443690) -------------------------------------------------------- int __thiscall sub_443690(float *this, float a2) { float *v2; // esi float v3; // eax v2 = this; v3 = *this; this[462] = a2; (*(void (**)(void))(LODWORD(v3) + 272))(); return sub_67E1E0(v2 + 397, a2); } //----- (004436C0) -------------------------------------------------------- double __thiscall sub_4436C0(float *this) { return (float)(this[463] * this[461]); } //----- (004436E0) -------------------------------------------------------- double __thiscall sub_4436E0(float *this) { return (float)(this[463] * this[462]); } //----- (00443700) -------------------------------------------------------- int __userpurge sub_443700@(int a1@, double a2@, float a3) { float *v3; // esi float v4; // ST10_4 unsigned __int8 (__thiscall *v5)(float *); // edx int v6; // eax void (__thiscall *v7)(float *); // edx float v9; // [esp+14h] [ebp-4h] v3 = (float *)a1; (*(void (__thiscall **)(int))(*(_DWORD *)(a1 + 1588) + 12))(a1 + 1588); v9 = a2; (*(void (__thiscall **)(float *))(*(_DWORD *)v3 + 272))(v3); v5 = *(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v3 + 248); v3[463] = a3; if ( v5(v3) ) { v6 = *(_DWORD *)v3; v4 = a2; if ( v4 == v9 ) v7 = *(void (__thiscall **)(float *))(v6 + 272); else v7 = *(void (__thiscall **)(float *))(v6 + 268); v7(v3); sub_67E1E0(v3 + 397, v9); } (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 392))(v3, v3[463]); return (*(int (__thiscall **)(float *, float))(*(_DWORD *)v3 + 388))(v3, v3[463]); } //----- (004437B0) -------------------------------------------------------- double __thiscall sub_4437B0(float *this) { return this[463]; } //----- (004437C0) -------------------------------------------------------- char __thiscall sub_4437C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax char result; // al int v5; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[540]; if ( v2 && (v3 = sub_64BA20(v2, "Emotion_ActRide")) != 0 ) result = sub_65D100(v1, *(_DWORD *)(v3 + 108)); else result = sub_65D100(v1, v5); return result; } //----- (00443800) -------------------------------------------------------- char __thiscall sub_443800(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax char result; // al int v5; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[540]; if ( v2 && (v3 = sub_64BA20(v2, "Emotion_ActPetSit")) != 0 ) result = sub_65D100(v1, *(_DWORD *)(v3 + 108)); else result = sub_65D100(v1, v5); return result; } //----- (00443840) -------------------------------------------------------- int __thiscall sub_443840(_DWORD *this, int a2) { int result; // eax result = a2; this[529] = a2; return result; } //----- (00443850) -------------------------------------------------------- int __thiscall sub_443850(_DWORD *this) { return this[529]; } //----- (00443860) -------------------------------------------------------- char __thiscall sub_443860(_BYTE *this) { return this[1925]; } //----- (00443870) -------------------------------------------------------- bool __thiscall sub_443870(_BYTE *this) { char v1; // al bool result; // al v1 = this[1924]; if ( v1 == 4 ) result = 1; else result = v1 == 5; return result; } //----- (00443890) -------------------------------------------------------- bool __thiscall sub_443890(_BYTE *this) { return this[1924] == 5; } //----- (004438A0) -------------------------------------------------------- int __thiscall sub_4438A0(_BYTE *this, char a2, char a3) { _BYTE *v3; // esi int (__thiscall *v4)(_BYTE *, _DWORD); // eax v3 = this; if ( a2 ) { sub_443390(this, a3); v4 = *(int (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v3 + 56); } else { sub_443390(this, 1); v4 = *(int (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v3 + 60); } v3[1925] = 1; return v4(v3, 0); } //----- (004438F0) -------------------------------------------------------- int __thiscall sub_4438F0(_DWORD *this) { return this[682]; } //----- (00443900) -------------------------------------------------------- void *__thiscall sub_443900(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Pet::`vftable'; *((_DWORD *)this + 15) = &Pet::`vftable'; *((_DWORD *)this + 21) = &Pet::`vftable'; sub_657580(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AF338: using guessed type void *Pet::`vftable'; // 9AF358: using guessed type void *Pet::`vftable'; // 9AF364: using guessed type void *Pet::`vftable'; //----- (00443940) -------------------------------------------------------- char __thiscall sub_443940(char *this, _DWORD *a2, int *a3) { char *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // eax int *v7; // eax char result; // al char v9; // [esp+8h] [ebp-30h] int v10; // [esp+2Ch] [ebp-Ch] int v11; // [esp+30h] [ebp-8h] int v12; // [esp+34h] [ebp-4h] v3 = this; (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)this + 188))(a2); v4 = (_DWORD *)*((_DWORD *)v3 + 175); v4[22] = *a2; v4[23] = a2[1]; v4[24] = a2[2]; (*(void (__thiscall **)(char *, int *))(*(_DWORD *)v3 + 192))(v3, a3); v5 = a3[1]; v6 = a3[2]; v10 = *a3; v11 = v5; v12 = v6; sub_8CF7F0((_DWORD *)v3 + 379, &v10); v7 = (int *)sub_8E48E0(v3 + 1516); result = sub_443200(v7, (float *)&v9); qmemcpy((void *)(*((_DWORD *)v3 + 175) + 52), &v9, 0x24u); return result; } //----- (004439E0) -------------------------------------------------------- int __thiscall sub_4439E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int result; // eax v2 = (_DWORD *)this[175]; if ( !v2 ) return (*(int (__thiscall **)(_DWORD *, _DWORD *))(this[397] + 52))(this + 397, a2); *a2 = v2[22]; a2[1] = v2[23]; result = v2[24]; a2[2] = result; return result; } //----- (00443A20) -------------------------------------------------------- void __thiscall sub_443A20(_DWORD *this, void *a2) { qmemcpy(a2, (const void *)(this[175] + 52), 0x24u); } //----- (00443A40) -------------------------------------------------------- BOOL __thiscall sub_443A40(_DWORD *this) { return this[642] || this[731]; } //----- (00443A60) -------------------------------------------------------- int __thiscall sub_443A60(_DWORD *this, float a2) { int result; // eax float v3; // [esp+8h] [ebp+8h] result = this[175]; if ( result ) { v3 = fabs(a2); *(float *)(result + 100) = v3; } return result; } //----- (00443A80) -------------------------------------------------------- _DWORD *__cdecl sub_443A80(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACB380 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACB380 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACB380: using guessed type int dword_ACB380; //----- (00443AD0) -------------------------------------------------------- void *__cdecl sub_443AD0(char *a1) { int v1; // eax unsigned int v2; // edi void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl void *v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACB384 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACB384 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACB384: using guessed type int dword_ACB384; //----- (00443C80) -------------------------------------------------------- void __thiscall sub_443C80(int this, int a2) { int v2; // esi unsigned int v3; // kr00_4 v2 = this; if ( *(_DWORD *)(this + 344) ) { if ( *(_DWORD *)(this + 348) ) { v3 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(this + 348) + 452))()); (*(void (__stdcall **)(bool))(**(_DWORD **)(v2 + 344) + 240))(v3 >= 4); } } } //----- (00443CD0) -------------------------------------------------------- int __thiscall sub_443CD0(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; if ( this[87] ) { (*(void (__stdcall **)(void *))(*this[87] + 460))(&unk_9AF65F); result = (*(int (**)(void))(*v1[87] + 480))(); } return result; } //----- (00443D10) -------------------------------------------------------- int __thiscall sub_443D10(_DWORD **this) { _BYTE *v1; // esi v1 = this; if ( this[87] ) (*(void (__stdcall **)(signed int))(*this[87] + 488))(1); return sub_8F28E0(v1); } //----- (00443D80) -------------------------------------------------------- int __thiscall sub_443D80(_DWORD **this) { int result; // eax if ( this[87] ) result = (*(int (**)(void))(*this[87] + 452))(); else result = 0; return result; } //----- (00443DA0) -------------------------------------------------------- __int16 __thiscall sub_443DA0(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[176] = a2; return result; } //----- (00443DC0) -------------------------------------------------------- __int16 __thiscall sub_443DC0(_WORD *this) { return this[176]; } //----- (00443DD0) -------------------------------------------------------- char __thiscall sub_443DD0(_DWORD **this) { _DWORD *v1; // esi unsigned __int8 *v2; // eax unsigned int v3; // eax const char *v4; // eax _DWORD **v5; // esi v1 = this; v2 = (unsigned __int8 *)(*(int (**)(void))(*this[87] + 452))(); LOBYTE(v3) = sub_451A00(v2); if ( !(_BYTE)v3 ) { v4 = (const char *)(v1[87] ? (*(int (**)(void))(*(_DWORD *)v1[87] + 452))() : 0); v3 = strlen(v4); if ( v3 >= 4 ) { sub_8F86A0(&unk_BA6B10, v1); v5 = (_DWORD **)(v1 + 58); if ( v5[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v5[1] + 4))(79, 0, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v5[1] + 20))(79, 0, v5); } LOBYTE(v3) = ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v5)[5])(v5, 79, 0, v5); } } return v3; } //----- (00443E70) -------------------------------------------------------- int __thiscall sub_443E70(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this); v2 = (_DWORD **)(v1 + 58); if ( v2[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v2[1] + 4))(81, 0, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v2[1] + 20))(81, 0, v2); } return ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v2)[5])(v2, 81, 0, v2); } //----- (00443EC0) -------------------------------------------------------- char __thiscall sub_443EC0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // edi volatile LONG *v14; // ST4C_4 volatile LONG *v15; // edi int v16; // ST48_4 int v17; // ST44_4 int v18; // eax volatile LONG *v19; // edi volatile LONG v20; // ebx const CHAR *v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // ST4C_4 int v24; // ST48_4 int v25; // ST44_4 int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx const CHAR *v29; // eax int v30; // ST48_4 int v31; // ST44_4 int v32; // eax volatile LONG *v33; // edi volatile LONG v34; // ebx const CHAR *v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi int v37; // [esp+44h] [ebp-20h] int v38; // [esp+48h] [ebp-1Ch] int v39; // [esp+4Ch] [ebp-18h] int v40; // [esp+50h] [ebp-14h] int v41; // [esp+54h] [ebp-10h] int v42; // [esp+60h] [ebp-4h] v2 = (int)this; v41 = 0; v3 = dword_BA6BA0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v4, (int)&v41, v3); if ( !v41 ) return 0; v5 = sub_8FB140(v41, (int)"Panel01", (int)&v39, (int)&v40, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"PetNameEditWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v41; v9 = (volatile LONG *)sub_43D0D0(0x13u); v10 = sub_8FB140(v8, (int)"Theme", (int)&v39, (int)&v40, v9); v11 = sub_8F3EB0(v39, v40, (int)v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); if ( sub_8F71E0(v41, (int)"LotInput", &v39, &v40, &v37, &v38) ) { v12 = sub_8FB140(v41, (int)"LotInput", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39, v40, (int)v12, v2, 0, 0); *(_DWORD *)(v2 + 348) = sub_45A900(v39 + 2, v40 + 4, v37, v38, v2, 1342177280, 16, 3, 0, 0, 1); } v13 = sub_8FB140(v41, (int)"BtnNor02", (int)&v39, (int)&v40, 0); sub_8FB650(v13, v41, (int)"BtnClick02"); sub_8FB650(v13, v41, (int)"BtnOver02"); v14 = sub_8FE0F0(v39, v40, (int)v13, v2, 0, 0, 0); *(_DWORD *)(v2 + 344) = v14; v15 = v14; v16 = sub_421050(0); v17 = (*(int (__thiscall **)(volatile LONG *))(*v15 + 148))(v15); v18 = (*(int (__thiscall **)(volatile LONG *))(*v15 + 144))(v15); v19 = sub_8F4A20(0, 0, v18, v17, v16, (int)v14, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); v20 = *v19; v21 = sub_4090F0(155201593); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v22 = sub_8FB140(v41, (int)"BtnNor04", (int)&v39, (int)&v40, 0); sub_8FB650(v22, v41, (int)"BtnClick04"); sub_8FB650(v22, v41, (int)"BtnOver04"); v23 = sub_8FE0F0(v39, v40, (int)v22, v2, 1, 0, 0); v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 0, v26, v25, v24, (int)v23, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v27; v29 = sub_4090F0(-1025490376); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = sub_421050(0); v31 = *(_DWORD *)(v30 + 384); v32 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v33 = sub_8F4A20(8, 8, v32 - 16, v31, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 488))(v33, 0); v34 = *v33; v35 = sub_4090F0(1347120270); (*(void (__thiscall **)(volatile LONG *, const CHAR *, _DWORD))(v34 + 480))(v33, v35, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v42 = -1; if ( v41 ) { v36 = (void (__thiscall ***)(_DWORD, signed int))v41; if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v36 ) (**v36)(v36, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004442C0) -------------------------------------------------------- char __thiscall sub_4442C0(_DWORD **this, int a2, int a3) { char result; // al if ( !a2 ) return sub_443DD0(this); result = a2 - 1; if ( a2 == 1 ) result = sub_443E70(this); return result; } //----- (004442E0) -------------------------------------------------------- int __cdecl sub_4442E0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &PetNameEditWin::`vftable'; *(_DWORD *)(v2 + 232) = &PetNameEditWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_WORD *)(v2 + 352) = -1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AF6CC: using guessed type void *PetNameEditWin::`vftable'; // 9AF6EC: using guessed type void *PetNameEditWin::`vftable'; //----- (00444440) -------------------------------------------------------- void *__thiscall sub_444440(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PetNameEditWin::`vftable'; *((_DWORD *)this + 58) = &PetNameEditWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AF6CC: using guessed type void *PetNameEditWin::`vftable'; // 9AF6EC: using guessed type void *PetNameEditWin::`vftable'; //----- (004444B0) -------------------------------------------------------- int sub_4444B0() { int v1; // [esp+0h] [ebp-8h] int v2; // [esp+4h] [ebp-4h] v1 = 4; v2 = 0; return sub_6B69F0(dword_AB6534, (int)&v1, 0.0, 0); } // AB6534: using guessed type int dword_AB6534; //----- (004444E0) -------------------------------------------------------- int sub_4444E0() { int result; // eax int v1; // [esp+0h] [ebp-8h] int v2; // [esp+4h] [ebp-4h] if ( byte_BA6BE4 ) { v1 = 27; v2 = 0; result = sub_6B69F0(dword_AB6534, (int)&v1, 0.0, 0); } return result; } // AB6534: using guessed type int dword_AB6534; // BA6BE4: using guessed type char byte_BA6BE4; //----- (00444520) -------------------------------------------------------- int sub_444520() { int result; // eax int v1; // [esp+0h] [ebp-8h] int v2; // [esp+4h] [ebp-4h] if ( byte_BA6BE5 ) { v1 = 27; v2 = 0; result = sub_6B69F0(dword_AB6534, (int)&v1, 0.0, 0); byte_BA6BE5 = 0; } return result; } // AB6534: using guessed type int dword_AB6534; // BA6BE5: using guessed type char byte_BA6BE5; //----- (004445D0) -------------------------------------------------------- _DWORD *__thiscall sub_4445D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8D4FF0((int)this); v1[1] = 0; v1[2] = 0; v1[3] = 0; v1[14] = 0; v1[4] = 1; *((_WORD *)v1 + 10) = 1; return v1; } //----- (00444650) -------------------------------------------------------- char __thiscall sub_444650(_DWORD *this, _DWORD *a2, unsigned int a3) { _DWORD *v4; // eax if ( a3 >= this[11] ) return 0; v4 = *(_DWORD **)(this[8] + 4 * a3); if ( !v4 ) return 0; *a2 = v4[10]; a2[1] = v4[11]; a2[2] = v4[12]; return 1; } //----- (00444690) -------------------------------------------------------- double __thiscall sub_444690(_DWORD *this, unsigned int a2) { double result; // st7 int v3; // eax if ( a2 < this[11] && (v3 = *(_DWORD *)(this[8] + 4 * a2)) != 0 ) result = *(float *)(v3 + 20); else result = -1.0; return result; } //----- (004446C0) -------------------------------------------------------- char __thiscall sub_4446C0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // eax v3 = *(_DWORD **)(this[8] + 4 * a3); if ( !v3 ) return 0; *a2 = v3[2]; a2[1] = v3[3]; a2[2] = v3[4]; return 1; } //----- (004446F0) -------------------------------------------------------- char __thiscall sub_4446F0(_DWORD *this, float *a2, float *a3) { this[1] = 0; this[2] = 0; this[3] = 1; return sub_8D6380(this, a2, a3, 0); } //----- (00444720) -------------------------------------------------------- char __thiscall sub_444720(_DWORD *this, float *a2, float *a3) { this[1] = 0; this[2] = 0; this[3] = 2; return sub_8D6380(this, a2, a3, 0); } //----- (00444750) -------------------------------------------------------- int __thiscall sub_444750(_DWORD *this, unsigned int a2) { int result; // eax int *v3; // eax if ( a2 < this[11] && (v3 = *(int **)(this[8] + 4 * a2)) != 0 ) result = *v3; else result = 0; return result; } //----- (00444810) -------------------------------------------------------- int __thiscall sub_444810(float *this, int a2) { float *v2; // ebx int v3; // esi signed int v4; // edi int v5; // esi signed int v6; // edi int result; // eax v2 = this; dword_ACB388 = a2; sub_8D06A0(this + 127, flt_ACCFCC); v2[132] = 1.0; v3 = (int)(v2 + 103); v4 = 6; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 - 64) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); v3 += 4; --v4; } while ( v4 ); v5 = (int)(v2 + 109); v6 = 10; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 64) + 256))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0); v5 += 4; --v6; } while ( v6 ); return result; } // ACB388: using guessed type int dword_ACB388; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004448B0) -------------------------------------------------------- void __userpurge sub_4448B0(int a1@, int a2@, int a3@, float a4) { int v4; // esi unsigned int v5; // edi _DWORD *v6; // eax unsigned int v7; // ebx unsigned int v8; // ecx unsigned int v9; // edi unsigned int v10; // ebx int v11; // ecx int v12; // ecx int v13; // ecx int v14; // ecx int v15; // [esp+4h] [ebp-10h] int v16; // [esp+8h] [ebp-Ch] int v17; // [esp+Ch] [ebp-8h] unsigned int v18; // [esp+10h] [ebp-4h] unsigned int v19; // [esp+1Ch] [ebp+8h] v4 = a1; if ( dword_ACB388 ) { v16 = a2; v15 = a3; if ( sub_8D0630((float *)(a1 + 508), a4) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 256))(v4, 1); v5 = dword_ACB388-- - 1; } else { v5 = dword_ACB388; } if ( v5 == 10 ) { sub_6B0B40(*(float **)(v4 + 476), *(_DWORD **)(v4 + 344)); v6 = (_DWORD *)(v4 + 480); if ( *(_DWORD *)(v4 + 500) >= 0x10u ) v6 = (_DWORD *)*v6; sub_6BA680(&dword_AB6520, (int)v6); v5 = dword_ACB388; } v7 = v5 / 0x3C % 0x3C; v8 = v5 % 0x3C; v9 = v7 / 0xA; v19 = v7 % 0xA; v10 = v8 / 0xA; v18 = v8 % 0xA; if ( v9 == 5 ) v11 = *(_DWORD *)(v4 + 348); else v11 = *(_DWORD *)(v4 + 4 * v9 + 352); (*(void (__stdcall **)(_DWORD, int, int, int))(*(_DWORD *)v11 + 256))(0, v15, v16, v17); if ( v19 == 9 ) v12 = *(_DWORD *)(v4 + 372); else v12 = *(_DWORD *)(v4 + 4 * v19 + 376); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 256))(0); if ( v10 == 5 ) v13 = *(_DWORD *)(v4 + 412); else v13 = *(_DWORD *)(v4 + 4 * v10 + 416); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 256))(0); if ( v18 == 9 ) v14 = *(_DWORD *)(v4 + 436); else v14 = *(_DWORD *)(v4 + 4 * v18 + 440); (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v14 + 256))(0); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v4 + 4 * v9 + 348) + 256))( *(_DWORD *)(v4 + 4 * v9 + 348), 1); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v4 + 4 * v19 + 372) + 256))(1); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v4 + 4 * v10 + 412) + 256))( *(_DWORD *)(v4 + 4 * v10 + 412), 1); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v4 + 4 * v18 + 436) + 256))( *(_DWORD *)(v4 + 4 * v18 + 436), 1); } } // 4448B0: could not find valid save-restore pair for ebx // 4448B0: could not find valid save-restore pair for edi // ACB388: using guessed type int dword_ACB388; //----- (00444B50) -------------------------------------------------------- int __cdecl sub_444B50(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x218u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &PuzzleTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &PuzzleTimeWin::`vftable'; *(_DWORD *)(v2 + 500) = 15; *(_DWORD *)(v2 + 496) = 0; *(_BYTE *)(v2 + 480) = 0; LOBYTE(v6) = 2; sub_8D0610((_BYTE *)(v2 + 508)); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 3; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AF9C4: using guessed type void *PuzzleTimeWin::`vftable'; // 9AF9E4: using guessed type void *PuzzleTimeWin::`vftable'; //----- (00444CB0) -------------------------------------------------------- char __thiscall sub_444CB0(void *this, void *a2) { int v2; // edi signed int v3; // ebx int v4; // esi char *v5; // eax volatile LONG **v6; // eax int v7; // esi volatile LONG *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG **v11; // eax volatile LONG *v12; // eax int v13; // esi char *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // esi int v17; // esi char *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // esi signed int v21; // ebx int v22; // esi char *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // esi int v26; // esi char *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // esi unsigned int v30; // eax volatile LONG *v31; // esi int v32; // eax int v33; // eax char v34; // cl char *v35; // eax void **v36; // ebx float *v37; // esi int v38; // eax float *v39; // eax void (__thiscall ***v40)(_DWORD, signed int); // esi int v41; // [esp+40h] [ebp-18h] int v42; // [esp+44h] [ebp-14h] int v43; // [esp+48h] [ebp-10h] int v44; // [esp+54h] [ebp-4h] volatile LONG **v45; // [esp+60h] [ebp+8h] volatile LONG **v46; // [esp+60h] [ebp+8h] v2 = (int)this; v3 = 0; v41 = 0; v4 = dword_BA6BA0; v44 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "\\Game\\StopWatch.nif"); sub_8F66B0(v5, (int)&v41, v4); if ( !v41 ) return 0; v6 = sub_8FB140(v41, (int)"Panel01", (int)&v42, (int)&v43, 0); v7 = (int)v6; v8 = sub_8F3EB0(v42, v43, (int)v6, v2, 0, 0); *(_DWORD *)(v2 + 344) = v8; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v8 + 240))(v8, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, v7, 0, (int)a2, (int)"PuzzleTimeWin", 0) ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v41; v44 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } v11 = sub_8FB140(v41, (int)"Panel02", (int)&v42, (int)&v43, 0); v12 = sub_8F3EB0(v42, v43, (int)v11, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v45 = (volatile LONG **)(v2 + 412); do { v13 = v41; v14 = sub_7549E0("Num01_%d", v3); v15 = sub_8FB140(v13, (int)v14, (int)&v42, (int)&v43, 0); v16 = sub_8F3EB0(v42, v43, (int)v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 256))(v16, 0); *(v45 - 16) = v16; v17 = v41; v18 = sub_7549E0("Num03_%d", v3); v19 = sub_8FB140(v17, (int)v18, (int)&v42, (int)&v43, 0); v20 = sub_8F3EB0(v42, v43, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 256))(v20, 0); *v45 = v20; ++v3; ++v45; } while ( v3 < 6 ); v21 = 0; v46 = (volatile LONG **)(v2 + 436); do { v22 = v41; v23 = sub_7549E0("Num02_%d", v21); v24 = sub_8FB140(v22, (int)v23, (int)&v42, (int)&v43, 0); v25 = sub_8F3EB0(v42, v43, (int)v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 256))(v25, 0); *(v46 - 16) = v25; v26 = v41; v27 = sub_7549E0("Num04_%d", v21); v28 = sub_8FB140(v26, (int)v27, (int)&v42, (int)&v43, 0); v29 = sub_8F3EB0(v42, v43, (int)v28, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 256))(v29, 0); *v46 = v29; ++v21; ++v46; } while ( v21 < 10 ); v30 = (*(int (**)(void))(**(_DWORD **)(v2 + 344) + 144))(); (*(void (__thiscall **)(int, unsigned int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, (v30 >> 1) + ((unsigned int)xRight >> 1), dword_AC2F78, 1.0, 0.0); v31 = *(volatile LONG **)v2; v32 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 164))(v2, 70); (*((void (__thiscall **)(int, int))v31 + 77))(v2, v32); if ( !byte_ACAD5C ) sub_420410(); v33 = 0; do { v34 = byte_ACA838[v33]; name[v33++] = v34; } while ( v34 ); v35 = &name[strlen(name)]; *(_DWORD *)v35 = 1886352467; *((_DWORD *)v35 + 1) = 1668571479; *((_DWORD *)v35 + 2) = 1919501928; *((_DWORD *)v35 + 3) = 1768828517; *((_WORD *)v35 + 8) = 102; v36 = sub_8D03E0(name, 0); v37 = (float *)operator new(0x44u); LOBYTE(v44) = 1; if ( v37 ) { v38 = sub_85BD60(v36); v39 = sub_6B0A90(v37, v38); } else { v39 = 0; } LOBYTE(v44) = 0; *(_DWORD *)(v2 + 476) = v39; sub_4018E0((_DWORD *)(v2 + 480), "StopWatchFire", 0xDu); v44 = -1; if ( v41 ) { v40 = (void (__thiscall ***)(_DWORD, signed int))v41; if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v40 ) (**v40)(v40, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004450F0) -------------------------------------------------------- _DWORD *__thiscall sub_4450F0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &PuzzleTimeWin::`vftable'; *((_DWORD *)this + 58) = &PuzzleTimeWin::`vftable'; if ( *((_DWORD *)this + 125) >= 0x10u ) operator delete(*((void **)this + 120)); v2[125] = 15; v2[124] = 0; *((_BYTE *)v2 + 480) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AF9C4: using guessed type void *PuzzleTimeWin::`vftable'; // 9AF9E4: using guessed type void *PuzzleTimeWin::`vftable'; //----- (00445180) -------------------------------------------------------- volatile LONG *__cdecl sub_445180(volatile LONG *a1) { if ( a1 ) sub_8F9D50(&unk_BA6B10, a1, 0, 0, 0); return a1; } //----- (00445290) -------------------------------------------------------- void __thiscall sub_445290(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // eax int v3; // eax int v4; // ecx _DWORD *v5; // esi const CHAR *v6; // eax v1 = this; v2 = this[97]; if ( v2 < 1 || v2 > this[96] ) { v5 = (_DWORD *)this[74]; v6 = sub_4090F0(-1749092413); sub_492060(v5, (int)v6); } else if ( *(_DWORD *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 716) ) { v3 = v1[86]; v4 = *(_DWORD *)(v3 + 304); if ( !*(_DWORD *)(v3 + 308) ) sub_4C0B90((_DWORD *)v1[74], v4, v1[97]); } } //----- (00445310) -------------------------------------------------------- void __thiscall sub_445310(int this, int a2) { int v2; // esi int v3; // edi char *v4; // eax int v5; // edi int v6; // ST04_4 char *v7; // eax char *v8; // eax int v9; // edi int v10; // ST04_4 char *v11; // eax char *v12; // eax v2 = this; if ( *(_BYTE *)(this + 392) ) { v3 = **(_DWORD **)(this + 364); v4 = sub_7549E0("%d", *(_DWORD *)(this + 388)); (*(void (__thiscall **)(_DWORD, char *))(v3 + 472))(*(_DWORD *)(v2 + 364), v4); v5 = **(_DWORD **)(v2 + 368); v6 = *(_DWORD *)(v2 + 388); v7 = (char *)sub_4090F0(1668193645); v8 = sub_7549E0(v7, v6); (*(void (__thiscall **)(_DWORD, char *))(v5 + 472))(*(_DWORD *)(v2 + 368), v8); v9 = **(_DWORD **)(v2 + 372); v10 = *(_DWORD *)(v2 + 388); v11 = (char *)sub_4090F0(1684970861); v12 = sub_7549E0(v11, v10); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(*(_DWORD *)(v2 + 372), v12); *(_BYTE *)(v2 + 392) = 0; } } //----- (004453C0) -------------------------------------------------------- char __thiscall sub_4453C0(int **this, int a2, int a3) { int **v3; // esi int v4; // edi int (__thiscall *v6)(int); // eax int v7; // eax int *v8; // ecx int v9; // ecx int *v10; // eax int v11; // ecx unsigned int v12; // eax unsigned int v13; // ecx int *v14; // edx int v15; // edi char *v16; // eax int v17; // edi int *v18; // ST08_4 char *v19; // eax char *v20; // eax int v21; // edi int *v22; // ST08_4 char *v23; // eax char *v24; // eax void **v25; // [esp+10h] [ebp-54h] int v26; // [esp+18h] [ebp-4Ch] int v27; // [esp+1Ch] [ebp-48h] int v28; // [esp+20h] [ebp-44h] int v29; // [esp+24h] [ebp-40h] int v30; // [esp+28h] [ebp-3Ch] __int16 v31; // [esp+4Ch] [ebp-18h] int v32; // [esp+50h] [ebp-14h] int v33; // [esp+60h] [ebp-4h] v3 = this; v4 = a3; if ( !a3 ) return 0; sub_5D2810(this[86], a3, 0, 1); v25 = &DropContents::`vftable'; v31 = -1; v32 = 0; v6 = *(int (__thiscall **)(int))(*(_DWORD *)v4 + 12); v27 = a2; v33 = 0; v26 = 0; v28 = 0; v29 = v4; v30 = 0; v7 = v6(v4); v8 = v3[86]; v32 = v7; sub_5D2C60(v8, 0, (int)&v25); v9 = *(_DWORD *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 716); if ( v9 ) { v10 = v3[86]; if ( *((_QWORD *)v10 + 38) < 0xC0ui64 ) { v11 = *(_DWORD *)(v9 + 4 * v10[76] + 348); if ( v11 ) sub_536E90(v11, 1); } } v3[95] = (int *)(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 72))(v4); v12 = sub_685BE0(&byte_ADA230, &a3); v13 = (unsigned int)v3[95]; v3[96] = (int *)v12; if ( v13 <= v12 ) v12 = v13; v14 = v3[91]; v3[97] = (int *)v12; v15 = *v14; v16 = sub_7549E0("%d", v12); (*(void (__thiscall **)(int *, char *))(v15 + 472))(v3[91], v16); v17 = *v3[92]; v18 = v3[97]; v19 = (char *)sub_4090F0(1668193645); v20 = sub_7549E0(v19, v18); (*(void (__thiscall **)(int *, char *))(v17 + 472))(v3[92], v20); v21 = *v3[93]; v22 = v3[97]; v23 = (char *)sub_4090F0(1684970861); v24 = sub_7549E0(v23, v22); (*(void (__thiscall **)(int *, char *))(v21 + 472))(v3[93], v24); return 1; } // 9ACB60: using guessed type void *DropContents::`vftable'; // ADA230: using guessed type char byte_ADA230; //----- (00445580) -------------------------------------------------------- int __thiscall sub_445580(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // eax unsigned int v4; // ecx int v5; // ecx int *v6; // ecx int v7; // edi char *v8; // eax int v9; // edi int v10; // ST04_4 char *v11; // eax char *v12; // eax int v13; // edi int v14; // ST04_4 char *v15; // eax char *v16; // eax v1 = this; v2 = *(_DWORD *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 716); if ( v2 ) { v3 = v1[86]; v4 = *(_DWORD *)(v3 + 304); if ( !*(_DWORD *)(v3 + 308) ) { if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v2 + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } *(_DWORD *)(v2 + 1484) = -1; } } sub_5D2940((_DWORD *)v1[86]); v6 = (int *)v1[91]; v1[95] = 0; v1[96] = 0; v1[97] = 0; v7 = *v6; v8 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(v1[91], v8); v9 = *(_DWORD *)v1[92]; v10 = v1[97]; v11 = (char *)sub_4090F0(1668193645); v12 = sub_7549E0(v11, v10); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(v1[92], v12); v13 = *(_DWORD *)v1[93]; v14 = v1[97]; v15 = (char *)sub_4090F0(1684970861); v16 = sub_7549E0(v15, v14); return (*(int (__thiscall **)(_DWORD, char *))(v13 + 472))(v1[93], v16); } //----- (004456A0) -------------------------------------------------------- int __thiscall sub_4456A0(_DWORD **this, char a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // edi int v5; // ST04_4 char *v6; // eax char *v7; // eax v2 = this; if ( a2 ) { v3 = sub_5D2610(this[86]); if ( v3 ) { v4 = (_DWORD *)v2[74]; v5 = *(_DWORD *)(v3 + 112) + 34; v6 = (char *)sub_4090F0(-2021548866); v7 = sub_7549E0(v6, v5); sub_492060(v4, (int)v7); } } return sub_445580(v2); } //----- (00445700) -------------------------------------------------------- char __thiscall sub_445700(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax int v6; // edi volatile LONG *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // edi void (__thiscall ***v10)(_DWORD, signed int); // esi char v12; // ST1C_1 int v13; // ST20_4 int v14; // ST24_4 int v15; // ST28_4 const CHAR *v16; // eax char v17; // ST1C_1 int v18; // ST20_4 int v19; // ST24_4 int v20; // ST28_4 const CHAR *v21; // eax char v22; // ST1C_1 int v23; // ST20_4 int v24; // ST24_4 int v25; // ST28_4 const CHAR *v26; // eax volatile LONG *v27; // eax _DWORD *v28; // eax char v29; // ST1C_1 int v30; // ST20_4 int v31; // ST24_4 int v32; // ST28_4 const CHAR *v33; // eax volatile LONG *v34; // eax volatile LONG v35; // edi char *v36; // eax volatile LONG *v37; // eax volatile LONG v38; // edi char *v39; // eax char *v40; // eax volatile LONG *v41; // eax volatile LONG v42; // edi char *v43; // eax char *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi int v46[5]; // [esp+40h] [ebp-2Ch] int v47; // [esp+54h] [ebp-18h] int v48; // [esp+58h] [ebp-14h] int v49; // [esp+5Ch] [ebp-10h] int v50; // [esp+68h] [ebp-4h] int v51; // [esp+74h] [ebp+8h] v2 = (int)this; v49 = 0; v3 = dword_BA6BA0; v50 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin03.nif"); sub_8F66B0(v4, (int)&v49, v3); if ( !v49 ) return 0; v5 = sub_8FB140(v49, (int)"Frame", (int)&v47, (int)&v48, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"RandomOptCountRecoverWin", 0) ) { LABEL_10: v10 = (void (__thiscall ***)(_DWORD, signed int))v49; v50 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v6 = v47; v51 = v48; sub_456260(v46); LOBYTE(v50) = 1; sub_455FF0(v46, v2); sub_456000(v46, v6, v51); sub_456380(v46, v49); v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v49, (int)"Theme", (int)&v47, (int)&v48, v7); else v8 = sub_8FB140(v49, (int)"Theme", (int)&v47, (int)&v48, 0); sub_8F3EB0(v47 - v6, v48 - v51, (int)v8, v2, 0, 0); v9 = (volatile LONG *)sub_43D0D0(0x1Cu); if ( !v9 ) { LOBYTE(v50) = 0; sub_4562E0(v46); goto LABEL_10; } sub_456820(v46, (int)"Panel01", 0); v12 = dword_AA8D98; v13 = dword_AA8D9C; v14 = dword_AA8DA0; v15 = dword_AA8DA4; v16 = sub_4090F0(1249868934); sub_456760(v46, (int)"WinTitle", (int)v16, v12, v13, v14, v15, 5); sub_4563D0(v46, 13, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); *(_DWORD *)(v2 + 348) = sub_4563D0(v46, 11, (int)"FrontPageNor", (int)"FrontPageClick", (int)"FrontPageOver", 0, v9); *(_DWORD *)(v2 + 352) = sub_4563D0(v46, 10, (int)"NextPageNor", (int)"NextPageClick", (int)"NextPageOver", 0, v9); *(_DWORD *)(v2 + 356) = sub_4563D0(v46, 12, (int)"Btn01Nor", (int)"Btn01Click", (int)"Btn01Over", 0, 0); v17 = dword_AA8C68; v18 = dword_AA8C6C; v19 = dword_AA8C70; v20 = dword_AA8C74; v21 = sub_40C190(1331644831); sub_456040(*(_DWORD *)(v2 + 356), (int)v21, v17, v18, v19, v20, 5); *(_DWORD *)(v2 + 360) = sub_4563D0(v46, 13, (int)"Btn02Nor", (int)"Btn02Click", (int)"Btn02Over", 0, 0); v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_40C190(-2002610207); sub_456040(*(_DWORD *)(v2 + 360), (int)v26, v22, v23, v24, v25, 5); v27 = sub_456820(v46, (int)"ItemSlot", 0); v28 = sub_5D2DD0(1, 0, (int)v27); *(_DWORD *)(v2 + 344) = v28; v28[68] = dword_ACEC34; *(_BYTE *)(*(_DWORD *)(v2 + 344) + 254) = 0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 344) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 344) + 256))(1); v29 = dword_AA8C68; v30 = dword_AA8C6C; v31 = dword_AA8C70; v32 = dword_AA8C74; v33 = sub_4090F0(780183421); sub_456760(v46, (int)"Text01", (int)v33, v29, v30, v31, v32, 5); v34 = sub_456980( v46, (int)"MyGoldInput", (int)&unk_9AFC16, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 1, 0, 0); *(_DWORD *)(v2 + 364) = v34; v35 = *v34; v36 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v35 + 472))(*(_DWORD *)(v2 + 364), v36); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 364) + 240))(1); v37 = sub_456980( v46, (int)"Text02", (int)&unk_9AFC17, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 1, 0, 0); *(_DWORD *)(v2 + 368) = v37; v38 = *v37; v39 = (char *)sub_4090F0(1668193645); v40 = sub_7549E0(v39, 0); (*(void (__thiscall **)(_DWORD, char *))(v38 + 472))(*(_DWORD *)(v2 + 368), v40); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 256))(1); v41 = sub_456980( v46, (int)"Text03", (int)&unk_9AFC2E, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 1, 0, 0); *(_DWORD *)(v2 + 372) = v41; v42 = *v41; v43 = (char *)sub_4090F0(1684970861); v44 = sub_7549E0(v43, 0); (*(void (__thiscall **)(_DWORD, char *))(v42 + 472))(*(_DWORD *)(v2 + 372), v44); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 256))(1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_445580((_DWORD *)v2); LOBYTE(v50) = 0; sub_4562E0(v46); v50 = -1; if ( v49 ) { v45 = (void (__thiscall ***)(_DWORD, signed int))v49; if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v45 ) (**v45)(v45, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00445CC0) -------------------------------------------------------- char __thiscall sub_445CC0(_DWORD *this) { _DWORD *v1; // esi char result; // al _DWORD *v3; // ecx sub_445580(this); v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_4B75F0(v1); v3 = (_DWORD *)v1[179]; if ( v3 ) result = sub_534620(v3); return result; } //----- (00445D00) -------------------------------------------------------- void __thiscall sub_445D00(int this, int a2, int a3) { unsigned int v3; // eax unsigned int v4; // eax switch ( a2 ) { case 10: v3 = *(_DWORD *)(this + 388); if ( v3 < *(_DWORD *)(this + 380) ) { if ( v3 ) { *(_DWORD *)(this + 388) = v3 + 1; *(_BYTE *)(this + 392) = 1; } } break; case 11: v4 = *(_DWORD *)(this + 388); if ( v4 <= *(_DWORD *)(this + 380) && v4 > 1 ) { *(_DWORD *)(this + 388) = v4 - 1; *(_BYTE *)(this + 392) = 1; } break; case 12: sub_445290((_DWORD *)this); break; case 13: sub_445CC0((_DWORD *)this); break; default: return; } } //----- (00445D80) -------------------------------------------------------- _DWORD *__thiscall sub_445D80(_DWORD *this) { _DWORD *v1; // esi void *v3; // [esp-1Ch] [ebp-3Ch] int v4; // [esp-18h] [ebp-38h] int v5; // [esp-14h] [ebp-34h] int v6; // [esp-10h] [ebp-30h] int v7; // [esp-Ch] [ebp-2Ch] int v8; // [esp-8h] [ebp-28h] int v9; // [esp-4h] [ebp-24h] void **v10; // [esp+Ch] [ebp-14h] void *v11; // [esp+10h] [ebp-10h] int v12; // [esp+1Ch] [ebp-4h] v1 = this; v11 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v10 = &v3; *v1 = &RandomOptCountRecoverWin::`vftable'; v1[58] = &RandomOptCountRecoverWin::`vftable'; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v8 = 15; v7 = 0; v12 = 0; LOBYTE(v3) = 0; sub_4018E0(&v3, "LimitRandomOption", 0x11u); v1[94] = (unsigned __int16)sub_747F30(&unk_ACDC6C, v3, v4, v5, v6, v7, v8, v9); v1[95] = 0; v1[96] = 0; v1[97] = 0; *((_BYTE *)v1 + 392) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9AFD7C: using guessed type void *RandomOptCountRecoverWin::`vftable'; // 9AFD9C: using guessed type void *RandomOptCountRecoverWin::`vftable'; //----- (00445E60) -------------------------------------------------------- volatile LONG *__cdecl sub_445E60(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x18Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_445D80(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00445F90) -------------------------------------------------------- void *__thiscall sub_445F90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &RandomOptCountRecoverWin::`vftable'; *((_DWORD *)this + 58) = &RandomOptCountRecoverWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AFD7C: using guessed type void *RandomOptCountRecoverWin::`vftable'; // 9AFD9C: using guessed type void *RandomOptCountRecoverWin::`vftable'; //----- (00446070) -------------------------------------------------------- bool __thiscall sub_446070(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D5860(this, a2, a3, a4) != 0; } //----- (00446100) -------------------------------------------------------- char __thiscall sub_446100(_DWORD **this) { int v1; // eax sub_8F82A0(&unk_BA6B10, this[87]); v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) LOBYTE(v1) = sub_4A8140(v1, 160); return v1; } //----- (00446160) -------------------------------------------------------- void __thiscall sub_446160(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // eax int *v6; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 464) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[112]; if ( v2 ) { v3 = v1[114]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { if ( sub_5D5470(v4) ) { v5 = sub_5D5470(v1); if ( v5 ) { v6 = (int *)v1[68]; if ( v6 ) { sub_547C20(v6, v5); sub_8F2F90((int)v1); } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (004461F0) -------------------------------------------------------- char __thiscall sub_4461F0(_DWORD *this, char a2) { int v2; // eax unsigned int v4; // ecx int v5; // ecx v2 = this[112]; if ( !v2 ) return 0; v4 = this[114]; if ( v4 >= 0xC0 ) return 0; v5 = *(_DWORD *)(v2 + 4 * v4 + 348); if ( !v5 ) return 0; sub_536E90(v5, a2); return 1; } //----- (00446230) -------------------------------------------------------- int __fastcall sub_446230(int a1, int a2, int a3, int a4, int a5) { int result; // eax int v6; // esi int v7; // ecx int v8; // ebx char *v9; // eax int v10; // ebx char *v11; // eax int v12; // ecx char *v13[5]; // [esp+0h] [ebp-18h] int v14; // [esp+4h] [ebp-14h] int v15; // [esp+14h] [ebp-4h] int v16; // [esp+20h] [ebp+8h] result = a3; if ( a3 ) { result = a3 - 1; if ( a3 != 1 ) return result; result = a1 + 532; v6 = a1 + 412; v16 = a1 + 532; v7 = a1 + 472; } else { v6 = a1 + 352; v16 = a1 + 472; v7 = a1 + 532; } v15 = v7; if ( v6 ) { result = v16; if ( v16 ) { if ( *(_DWORD *)(v6 + 4 * a4) ) { result = *(_DWORD *)(v16 + 4 * a5); if ( result >= 0 ) { if ( result > 0 || *(_DWORD *)(v7 + 4 * a5) > 0 ) { switch ( a4 ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: if ( result ) { v14 = *(_DWORD *)(v16 + 4 * a5); v13[0] = "+ %d"; goto LABEL_21; } v8 = **(_DWORD **)(v6 + 4 * a4); v9 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v8 + 472))(*(_DWORD *)(v6 + 4 * a4), v9); break; case 12: case 13: v10 = **(_DWORD **)(v6 + 4 * a4); if ( result ) v11 = sub_7549E0("+ %.1f", (double)result / 10.0); else v11 = sub_7549E0("%.1f", 0.0 / 10.0); goto LABEL_22; case 14: if ( result ) { v14 = *(_DWORD *)(v16 + 4 * a5); v13[0] = "- %d"; LABEL_21: v10 = **(_DWORD **)(v6 + 4 * a4); v11 = sub_7549E0(v13[0], v14); } else { v10 = **(_DWORD **)(v6 + 4 * a4); v11 = sub_7549E0("%d", 0); } LABEL_22: (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(*(_DWORD *)(v6 + 4 * a4), v11); break; default: break; } } result = *(_DWORD *)(v16 + 4 * a5); v12 = *(_DWORD *)(v15 + 4 * a5); if ( result <= v12 ) { if ( result < v12 ) result = (*(int (__stdcall **)(int *))(**(_DWORD **)(v6 + 4 * a4) + 468))(&dword_AA8C88); } else { result = (*(int (__stdcall **)(char *))(**(_DWORD **)(v6 + 4 * a4) + 468))(aIii); } } } } } return result; } // AA8C88: using guessed type int dword_AA8C88; //----- (00446410) -------------------------------------------------------- int __thiscall sub_446410(_DWORD *this) { _DWORD *v1; // esi signed int v2; // edi int v3; // ecx int v4; // ecx int result; // eax _DWORD *v6; // [esp+Ch] [ebp-4h] v6 = this; v1 = this + 88; v2 = 15; do { v3 = *v1; v1[30] = 0; v1[45] = 0; if ( v3 ) { (*(void (__stdcall **)(const char *))(*(_DWORD *)v3 + 472))("-"); (*(void (__stdcall **)(int *))(*(_DWORD *)*v1 + 468))(&dword_AA8C68); } v4 = v1[15]; if ( v4 ) { (*(void (__stdcall **)(const char *))(*(_DWORD *)v4 + 472))("-"); (*(void (__stdcall **)(int *))(*(_DWORD *)v1[15] + 468))(&dword_AA8C68); } ++v1; --v2; } while ( v2 ); result = (*(int (__stdcall **)(void *))(*(_DWORD *)v6[179] + 472))(&unk_9AFFEA); *((_BYTE *)v6 + 684) = 0; return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (004464C0) -------------------------------------------------------- void __thiscall sub_4464C0(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi signed int v3; // ecx unsigned __int8 *v4; // eax unsigned int v5; // eax _DWORD *v6; // ecx int v7; // eax v2 = this; if ( a2 && this[170] ) { v3 = 0; if ( *a2 & 0xFE ) { v4 = a2 + 1; do { v2[*v4 + 133] = *(unsigned __int16 *)(v4 + 1); ++v3; v4 += 3; } while ( v3 < (signed int)((unsigned int)(unsigned __int8)*a2 >> 1) ); } v5 = *(_DWORD *)(v2[170] + 456); if ( v5 < 0xC0 ) { v6 = *(_DWORD **)(v2[87] + 4 * v5 + 348); if ( v6 ) { v7 = sub_5D5470(v6); if ( v7 ) v2[177] = v2[178] - (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 72))(v7); } } } } //----- (00446550) -------------------------------------------------------- char __thiscall sub_446550(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[115]); return (char)v2; } //----- (00446580) -------------------------------------------------------- char __thiscall sub_446580(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[115]); return (char)v2; } //----- (004465B0) -------------------------------------------------------- int *__thiscall sub_4465B0(_BYTE *this) { _DWORD *v1; // esi void (__stdcall *v2)(signed int); // edx int v3; // eax unsigned int v4; // ecx int v5; // eax v1 = this; v2 = *(void (__stdcall **)(signed int))(*(_DWORD *)this + 240); this[464] = 0; v2(1); (*(void (__thiscall **)(_DWORD *, signed int))(*v1 + 240))(v1, 1); v3 = v1[112]; if ( v3 ) { v4 = v1[114]; if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v3 + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } } v1[113] = -1; v1[114] = -1; v1[112] = 0; return sub_5D5B70(v1, 0, 1); } //----- (00446630) -------------------------------------------------------- int __thiscall sub_446630(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ecx volatile LONG *v3; // ST08_4 _DWORD *v4; // esi bool v5; // zf int v7; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] v1 = this; if ( this[180] ) { sub_8F86A0(&unk_BA6B10, this[180]); v1[180] = 0; } v2 = v1[172]; v3 = v1[173]; *(_WORD *)((char *)v1 + 701) = 1; sub_6B0BB0(v2, v3); sub_4465B0(v1[170]); sub_446410(v1); v4 = v1 + 58; v5 = v4[1] == 0; v7 = 720904; v8 = 0; if ( !v5 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v4[1] + 4))(23, &v7, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v4[1] + 20))(23, &v7, v4); } return (*(int (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*v4 + 20))(v4, 23, &v7, v4); } //----- (004466E0) -------------------------------------------------------- void __thiscall sub_4466E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax int v4; // ecx int v5; // ecx v1 = this; v2 = (_DWORD *)this[170]; if ( v2 && *((_BYTE *)v1 + 702) != 1 ) { v3 = sub_5D5470(v2); if ( v3 ) { v4 = v1[170]; v1[154] = *(_DWORD *)(v4 + 452); v1[156] = 0; v5 = *(_DWORD *)(v4 + 456); v1[157] = v3; v1[155] = v5; v1[158] = 0; v1[168] = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 12))(v3); v1[150] = *(_DWORD *)(v1[170] + 448); dword_BA6BCC = (int)(v1 + 148); sub_4465B0((_BYTE *)v1[170]); sub_446410(v1); } } } // BA6BCC: using guessed type int dword_BA6BCC; //----- (004467F0) -------------------------------------------------------- int *__thiscall sub_4467F0(_DWORD *this) { _DWORD *v1; // esi int *result; // eax int v3; // ecx _DWORD *v4; // ecx int v5; // edi int v6; // ST04_4 char *v7; // eax char *v8; // eax v1 = this; result = *(int **)(this[170] + 456); v3 = this[87]; if ( (unsigned int)result < 0xC0 ) { v4 = *(_DWORD **)(v3 + 4 * (_DWORD)result + 348); if ( v4 ) { result = (int *)sub_5D5470(v4); v5 = (int)result; if ( result ) { if ( v1[170] ) { v6 = result[28] + 34; v7 = (char *)sub_4090F0(-365547492); v8 = sub_7549E0(v7, v6); sub_492060((_DWORD *)v1[86], (int)v8); result = sub_5D5B70((_WORD *)v1[170], v5, 1); } } } } return result; } //----- (00446870) -------------------------------------------------------- void __thiscall sub_446870(int this) { _DWORD *v1; // esi const CHAR *v2; // eax if ( *(_BYTE *)(this + 724) == 1 ) { v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) { v2 = sub_4090F0(561875047); sub_492060(v1, (int)v2); } } else { sub_8F86A0(&unk_BA6B10, (_DWORD *)this); } } //----- (004468C0) -------------------------------------------------------- LONG __thiscall sub_4468C0(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi int v5; // edi v1 = this; *this = &RandomOptionWin::`vftable'; this[58] = &RandomOptionWin::`vftable'; v2 = (int *)this[172]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[172] = 0; } v4 = v1[173]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[170]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[152] = &DropContents::`vftable'; v1[148] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B0440: using guessed type void *RandomOptionWin::`vftable'; // 9B045C: using guessed type void *RandomOptionWin::`vftable'; //----- (004469F0) -------------------------------------------------------- int __fastcall sub_4469F0(int a1, int a2, int a3) { int v3; // esi int v4; // edi int v5; // ebx int v6; // eax int v7; // ST68_4 char *v8; // eax int v9; // ebx char *v10; // eax int v11; // eax int v12; // ecx int v13; // edi int v14; // ebx int v15; // eax int v16; // ST68_4 char *v17; // eax int v18; // ebx char *v19; // eax int v20; // eax int v21; // ecx int v22; // edi int v23; // ebx int v24; // eax int v25; // ST68_4 char *v26; // eax int v27; // ebx char *v28; // eax int v29; // eax int v30; // ecx int v31; // edi int v32; // ebx int v33; // eax int v34; // ST68_4 char *v35; // eax int v36; // ebx char *v37; // eax int v38; // eax int v39; // ecx int v40; // edi int v41; // ebx int v42; // eax int v43; // ST68_4 char *v44; // eax int v45; // ebx char *v46; // eax int v47; // eax int v48; // ecx int v49; // edi int v50; // ebx int v51; // eax int v52; // ST68_4 char *v53; // eax int v54; // ebx char *v55; // eax int v56; // eax int v57; // ecx int v58; // edi int v59; // ebx int v60; // eax int v61; // ST68_4 char *v62; // eax int v63; // ebx char *v64; // eax int v65; // eax int v66; // ecx int v67; // edi int v68; // ebx int v69; // eax int v70; // ST68_4 char *v71; // eax int v72; // ebx char *v73; // eax int v74; // eax int v75; // ecx int v76; // edi int v77; // ebx int v78; // eax int v79; // ST68_4 char *v80; // eax int v81; // ebx char *v82; // eax int v83; // eax int v84; // ecx int v85; // edi int v86; // ebx int v87; // eax int v88; // ST68_4 char *v89; // eax int v90; // ebx char *v91; // eax int v92; // eax int v93; // ecx int v94; // edi int v95; // ebx signed int v96; // eax int v97; // ST68_4 char *v98; // eax int v99; // ST64_4 char *v100; // eax int v101; // eax int v102; // ecx int v103; // edi int v104; // ebx signed int v105; // eax int v106; // ST64_4 char *v107; // eax int v108; // ST68_4 char *v109; // eax int v110; // eax int v111; // ecx int v112; // edi int v113; // ebx int v114; // eax int v115; // ST64_4 char *v116; // eax int v117; // ST64_4 char *v118; // eax int v119; // eax int v120; // ecx int v121; // edi int v122; // ebx int v123; // ecx int v124; // eax int v125; // ST64_4 char *v126; // eax int v127; // ebx char *v128; // eax int v129; // eax int v130; // ecx int result; // eax int v132; // edi int v133; // ST54_4 char *v134; // eax char *v135; // eax int v136; // [esp+68h] [ebp-8h] int v137; // [esp+68h] [ebp-8h] int v138; // [esp+68h] [ebp-8h] int v139; // [esp+68h] [ebp-8h] int v140; // [esp+68h] [ebp-8h] int v141; // [esp+68h] [ebp-8h] int v142; // [esp+68h] [ebp-8h] int v143; // [esp+68h] [ebp-8h] int v144; // [esp+68h] [ebp-8h] int v145; // [esp+68h] [ebp-8h] int v146; // [esp+68h] [ebp-8h] int v147; // [esp+6Ch] [ebp-4h] int v148; // [esp+6Ch] [ebp-4h] int v149; // [esp+6Ch] [ebp-4h] int v150; // [esp+6Ch] [ebp-4h] int v151; // [esp+6Ch] [ebp-4h] int v152; // [esp+6Ch] [ebp-4h] int v153; // [esp+6Ch] [ebp-4h] int v154; // [esp+6Ch] [ebp-4h] int v155; // [esp+6Ch] [ebp-4h] int v156; // [esp+6Ch] [ebp-4h] int v157; // [esp+6Ch] [ebp-4h] int v158; // [esp+6Ch] [ebp-4h] int v159; // [esp+6Ch] [ebp-4h] int v160; // [esp+6Ch] [ebp-4h] v3 = a1; sub_446230(a1, a2, a3, 0, 0); if ( a3 ) { if ( a3 != 1 ) goto LABEL_18; v4 = v3 + 412; v5 = v3 + 532; v147 = v3 + 472; } else { v4 = v3 + 352; v5 = v3 + 472; v147 = v3 + 532; } v136 = v5; if ( v4 ) { if ( v5 ) { if ( *(_DWORD *)(v4 + 4) ) { v6 = *(_DWORD *)(v5 + 8); if ( v6 >= 0 ) { if ( v6 > 0 ) goto LABEL_248; if ( *(_DWORD *)(v147 + 8) <= 0 ) goto LABEL_14; if ( v6 ) { LABEL_248: v9 = **(_DWORD **)(v4 + 4); v10 = sub_7549E0("+ %d", v6); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(*(_DWORD *)(v4 + 4), v10); v5 = v136; } else { v7 = **(_DWORD **)(v4 + 4); v8 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(*(_DWORD *)(v4 + 4), v8); } LABEL_14: v11 = *(_DWORD *)(v5 + 8); v12 = *(_DWORD *)(v147 + 8); if ( v11 <= v12 ) { if ( v11 < v12 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v4 + 4) + 468))(*(_DWORD *)(v4 + 4), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v4 + 4) + 468))(*(_DWORD *)(v4 + 4), aIii); } goto LABEL_18; } } } } LABEL_18: if ( a3 ) { if ( a3 != 1 ) goto LABEL_35; v13 = v3 + 412; v14 = v3 + 532; v148 = v3 + 472; } else { v13 = v3 + 352; v14 = v3 + 472; v148 = v3 + 532; } v137 = v14; if ( v13 ) { if ( v14 ) { if ( *(_DWORD *)(v13 + 8) ) { v15 = *(_DWORD *)(v14 + 4); if ( v15 >= 0 ) { if ( v15 > 0 ) goto LABEL_249; if ( *(_DWORD *)(v148 + 4) <= 0 ) goto LABEL_31; if ( v15 ) { LABEL_249: v18 = **(_DWORD **)(v13 + 8); v19 = sub_7549E0("+ %d", v15); (*(void (__thiscall **)(_DWORD, char *))(v18 + 472))(*(_DWORD *)(v13 + 8), v19); v14 = v137; } else { v16 = **(_DWORD **)(v13 + 8); v17 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v16 + 472))(*(_DWORD *)(v13 + 8), v17); } LABEL_31: v20 = *(_DWORD *)(v14 + 4); v21 = *(_DWORD *)(v148 + 4); if ( v20 <= v21 ) { if ( v20 < v21 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v13 + 8) + 468))( *(_DWORD *)(v13 + 8), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v13 + 8) + 468))(*(_DWORD *)(v13 + 8), aIii); } goto LABEL_35; } } } } LABEL_35: if ( a3 ) { if ( a3 != 1 ) goto LABEL_52; v22 = v3 + 412; v23 = v3 + 532; v149 = v3 + 472; } else { v22 = v3 + 352; v23 = v3 + 472; v149 = v3 + 532; } v138 = v23; if ( v22 ) { if ( v23 ) { if ( *(_DWORD *)(v22 + 12) ) { v24 = *(_DWORD *)(v23 + 12); if ( v24 >= 0 ) { if ( v24 > 0 ) goto LABEL_250; if ( *(_DWORD *)(v149 + 12) <= 0 ) goto LABEL_48; if ( v24 ) { LABEL_250: v27 = **(_DWORD **)(v22 + 12); v28 = sub_7549E0("+ %d", v24); (*(void (__thiscall **)(_DWORD, char *))(v27 + 472))(*(_DWORD *)(v22 + 12), v28); v23 = v138; } else { v25 = **(_DWORD **)(v22 + 12); v26 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v25 + 472))(*(_DWORD *)(v22 + 12), v26); } LABEL_48: v29 = *(_DWORD *)(v23 + 12); v30 = *(_DWORD *)(v149 + 12); if ( v29 <= v30 ) { if ( v29 < v30 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v22 + 12) + 468))( *(_DWORD *)(v22 + 12), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v22 + 12) + 468))(*(_DWORD *)(v22 + 12), aIii); } goto LABEL_52; } } } } LABEL_52: if ( a3 ) { if ( a3 != 1 ) goto LABEL_69; v31 = v3 + 412; v32 = v3 + 532; v150 = v3 + 472; } else { v31 = v3 + 352; v32 = v3 + 472; v150 = v3 + 532; } v139 = v32; if ( v31 ) { if ( v32 ) { if ( *(_DWORD *)(v31 + 16) ) { v33 = *(_DWORD *)(v32 + 16); if ( v33 >= 0 ) { if ( v33 > 0 ) goto LABEL_251; if ( *(_DWORD *)(v150 + 16) <= 0 ) goto LABEL_65; if ( v33 ) { LABEL_251: v36 = **(_DWORD **)(v31 + 16); v37 = sub_7549E0("+ %d", v33); (*(void (__thiscall **)(_DWORD, char *))(v36 + 472))(*(_DWORD *)(v31 + 16), v37); v32 = v139; } else { v34 = **(_DWORD **)(v31 + 16); v35 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v34 + 472))(*(_DWORD *)(v31 + 16), v35); } LABEL_65: v38 = *(_DWORD *)(v32 + 16); v39 = *(_DWORD *)(v150 + 16); if ( v38 <= v39 ) { if ( v38 < v39 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v31 + 16) + 468))( *(_DWORD *)(v31 + 16), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v31 + 16) + 468))(*(_DWORD *)(v31 + 16), aIii); } goto LABEL_69; } } } } LABEL_69: if ( a3 ) { if ( a3 != 1 ) goto LABEL_86; v40 = v3 + 412; v41 = v3 + 532; v151 = v3 + 472; } else { v40 = v3 + 352; v41 = v3 + 472; v151 = v3 + 532; } v140 = v41; if ( v40 ) { if ( v41 ) { if ( *(_DWORD *)(v40 + 24) ) { v42 = *(_DWORD *)(v41 + 28); if ( v42 >= 0 ) { if ( v42 > 0 ) goto LABEL_252; if ( *(_DWORD *)(v151 + 28) <= 0 ) goto LABEL_82; if ( v42 ) { LABEL_252: v45 = **(_DWORD **)(v40 + 24); v46 = sub_7549E0("+ %d", v42); (*(void (__thiscall **)(_DWORD, char *))(v45 + 472))(*(_DWORD *)(v40 + 24), v46); v41 = v140; } else { v43 = **(_DWORD **)(v40 + 24); v44 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v43 + 472))(*(_DWORD *)(v40 + 24), v44); } LABEL_82: v47 = *(_DWORD *)(v41 + 28); v48 = *(_DWORD *)(v151 + 28); if ( v47 <= v48 ) { if ( v47 < v48 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v40 + 24) + 468))( *(_DWORD *)(v40 + 24), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v40 + 24) + 468))(*(_DWORD *)(v40 + 24), aIii); } goto LABEL_86; } } } } LABEL_86: if ( a3 ) { if ( a3 != 1 ) goto LABEL_103; v49 = v3 + 412; v50 = v3 + 532; v152 = v3 + 472; } else { v49 = v3 + 352; v50 = v3 + 472; v152 = v3 + 532; } v141 = v50; if ( v49 ) { if ( v50 ) { if ( *(_DWORD *)(v49 + 28) ) { v51 = *(_DWORD *)(v50 + 32); if ( v51 >= 0 ) { if ( v51 > 0 ) goto LABEL_253; if ( *(_DWORD *)(v152 + 32) <= 0 ) goto LABEL_99; if ( v51 ) { LABEL_253: v54 = **(_DWORD **)(v49 + 28); v55 = sub_7549E0("+ %d", v51); (*(void (__thiscall **)(_DWORD, char *))(v54 + 472))(*(_DWORD *)(v49 + 28), v55); v50 = v141; } else { v52 = **(_DWORD **)(v49 + 28); v53 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v52 + 472))(*(_DWORD *)(v49 + 28), v53); } LABEL_99: v56 = *(_DWORD *)(v50 + 32); v57 = *(_DWORD *)(v152 + 32); if ( v56 <= v57 ) { if ( v56 < v57 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v49 + 28) + 468))( *(_DWORD *)(v49 + 28), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v49 + 28) + 468))(*(_DWORD *)(v49 + 28), aIii); } goto LABEL_103; } } } } LABEL_103: if ( a3 ) { if ( a3 != 1 ) goto LABEL_120; v58 = v3 + 412; v59 = v3 + 532; v153 = v3 + 472; } else { v58 = v3 + 352; v59 = v3 + 472; v153 = v3 + 532; } v142 = v59; if ( v58 ) { if ( v59 ) { if ( *(_DWORD *)(v58 + 32) ) { v60 = *(_DWORD *)(v59 + 36); if ( v60 >= 0 ) { if ( v60 > 0 ) goto LABEL_254; if ( *(_DWORD *)(v153 + 36) <= 0 ) goto LABEL_116; if ( v60 ) { LABEL_254: v63 = **(_DWORD **)(v58 + 32); v64 = sub_7549E0("+ %d", v60); (*(void (__thiscall **)(_DWORD, char *))(v63 + 472))(*(_DWORD *)(v58 + 32), v64); v59 = v142; } else { v61 = **(_DWORD **)(v58 + 32); v62 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v61 + 472))(*(_DWORD *)(v58 + 32), v62); } LABEL_116: v65 = *(_DWORD *)(v59 + 36); v66 = *(_DWORD *)(v153 + 36); if ( v65 <= v66 ) { if ( v65 < v66 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v58 + 32) + 468))( *(_DWORD *)(v58 + 32), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v58 + 32) + 468))(*(_DWORD *)(v58 + 32), aIii); } goto LABEL_120; } } } } LABEL_120: if ( a3 ) { if ( a3 != 1 ) goto LABEL_137; v67 = v3 + 412; v68 = v3 + 532; v154 = v3 + 472; } else { v67 = v3 + 352; v68 = v3 + 472; v154 = v3 + 532; } v143 = v68; if ( v67 ) { if ( v68 ) { if ( *(_DWORD *)(v67 + 36) ) { v69 = *(_DWORD *)(v68 + 40); if ( v69 >= 0 ) { if ( v69 > 0 ) goto LABEL_255; if ( *(_DWORD *)(v154 + 40) <= 0 ) goto LABEL_133; if ( v69 ) { LABEL_255: v72 = **(_DWORD **)(v67 + 36); v73 = sub_7549E0("+ %d", v69); (*(void (__thiscall **)(_DWORD, char *))(v72 + 472))(*(_DWORD *)(v67 + 36), v73); v68 = v143; } else { v70 = **(_DWORD **)(v67 + 36); v71 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v70 + 472))(*(_DWORD *)(v67 + 36), v71); } LABEL_133: v74 = *(_DWORD *)(v68 + 40); v75 = *(_DWORD *)(v154 + 40); if ( v74 <= v75 ) { if ( v74 < v75 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v67 + 36) + 468))( *(_DWORD *)(v67 + 36), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v67 + 36) + 468))(*(_DWORD *)(v67 + 36), aIii); } goto LABEL_137; } } } } LABEL_137: if ( a3 ) { if ( a3 != 1 ) goto LABEL_154; v76 = v3 + 412; v77 = v3 + 532; v155 = v3 + 472; } else { v76 = v3 + 352; v77 = v3 + 472; v155 = v3 + 532; } v144 = v77; if ( v76 ) { if ( v77 ) { if ( *(_DWORD *)(v76 + 40) ) { v78 = *(_DWORD *)(v77 + 20); if ( v78 >= 0 ) { if ( v78 > 0 ) goto LABEL_256; if ( *(_DWORD *)(v155 + 20) <= 0 ) goto LABEL_150; if ( v78 ) { LABEL_256: v81 = **(_DWORD **)(v76 + 40); v82 = sub_7549E0("+ %d", v78); (*(void (__thiscall **)(_DWORD, char *))(v81 + 472))(*(_DWORD *)(v76 + 40), v82); v77 = v144; } else { v79 = **(_DWORD **)(v76 + 40); v80 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v79 + 472))(*(_DWORD *)(v76 + 40), v80); } LABEL_150: v83 = *(_DWORD *)(v77 + 20); v84 = *(_DWORD *)(v155 + 20); if ( v83 <= v84 ) { if ( v83 < v84 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v76 + 40) + 468))( *(_DWORD *)(v76 + 40), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v76 + 40) + 468))(*(_DWORD *)(v76 + 40), aIii); } goto LABEL_154; } } } } LABEL_154: if ( a3 ) { if ( a3 != 1 ) goto LABEL_171; v85 = v3 + 412; v86 = v3 + 532; v156 = v3 + 472; } else { v85 = v3 + 352; v86 = v3 + 472; v156 = v3 + 532; } v145 = v86; if ( v85 ) { if ( v86 ) { if ( *(_DWORD *)(v85 + 44) ) { v87 = *(_DWORD *)(v86 + 44); if ( v87 >= 0 ) { if ( v87 > 0 ) goto LABEL_257; if ( *(_DWORD *)(v156 + 44) <= 0 ) goto LABEL_167; if ( v87 ) { LABEL_257: v90 = **(_DWORD **)(v85 + 44); v91 = sub_7549E0("+ %d", v87); (*(void (__thiscall **)(_DWORD, char *))(v90 + 472))(*(_DWORD *)(v85 + 44), v91); v86 = v145; } else { v88 = **(_DWORD **)(v85 + 44); v89 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v88 + 472))(*(_DWORD *)(v85 + 44), v89); } LABEL_167: v92 = *(_DWORD *)(v86 + 44); v93 = *(_DWORD *)(v156 + 44); if ( v92 <= v93 ) { if ( v92 < v93 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v85 + 44) + 468))( *(_DWORD *)(v85 + 44), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v85 + 44) + 468))(*(_DWORD *)(v85 + 44), aIii); } goto LABEL_171; } } } } LABEL_171: if ( a3 ) { if ( a3 != 1 ) goto LABEL_188; v94 = v3 + 412; v95 = v3 + 532; v157 = v3 + 472; } else { v94 = v3 + 352; v95 = v3 + 472; v157 = v3 + 532; } if ( v94 ) { if ( v95 ) { if ( *(_DWORD *)(v94 + 48) ) { v96 = *(_DWORD *)(v95 + 24); if ( v96 >= 0 ) { if ( v96 > 0 ) goto LABEL_258; if ( *(_DWORD *)(v157 + 24) <= 0 ) goto LABEL_184; if ( v96 ) { LABEL_258: v99 = **(_DWORD **)(v94 + 48); v100 = sub_7549E0("+ %.1f", (double)v96 / 10.0); (*(void (__thiscall **)(_DWORD, char *))(v99 + 472))(*(_DWORD *)(v94 + 48), v100); } else { v97 = **(_DWORD **)(v94 + 48); v98 = sub_7549E0("%.1f", 0.0 / 10.0); (*(void (__thiscall **)(_DWORD, char *))(v97 + 472))(*(_DWORD *)(v94 + 48), v98); } LABEL_184: v101 = *(_DWORD *)(v95 + 24); v102 = *(_DWORD *)(v157 + 24); if ( v101 <= v102 ) { if ( v101 < v102 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v94 + 48) + 468))( *(_DWORD *)(v94 + 48), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v94 + 48) + 468))(*(_DWORD *)(v94 + 48), aIii); } goto LABEL_188; } } } } LABEL_188: if ( a3 ) { if ( a3 != 1 ) goto LABEL_205; v103 = v3 + 412; v104 = v3 + 532; v158 = v3 + 472; } else { v103 = v3 + 352; v104 = v3 + 472; v158 = v3 + 532; } if ( v103 ) { if ( v104 ) { if ( *(_DWORD *)(v103 + 52) ) { v105 = *(_DWORD *)(v104 + 48); if ( v105 >= 0 ) { if ( v105 > 0 ) goto LABEL_259; if ( *(_DWORD *)(v158 + 48) <= 0 ) goto LABEL_201; if ( v105 ) { LABEL_259: v108 = **(_DWORD **)(v103 + 52); v109 = sub_7549E0("+ %.1f", (double)v105 / 10.0); (*(void (__thiscall **)(_DWORD, char *))(v108 + 472))(*(_DWORD *)(v103 + 52), v109); } else { v106 = **(_DWORD **)(v103 + 52); v107 = sub_7549E0("%.1f", 0.0 / 10.0); (*(void (__thiscall **)(_DWORD, char *))(v106 + 472))(*(_DWORD *)(v103 + 52), v107); } LABEL_201: v110 = *(_DWORD *)(v104 + 48); v111 = *(_DWORD *)(v158 + 48); if ( v110 <= v111 ) { if ( v110 < v111 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(v103 + 52) + 468))( *(_DWORD *)(v103 + 52), &dword_AA8C88); } else { (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v103 + 52) + 468))(*(_DWORD *)(v103 + 52), aIii); } goto LABEL_205; } } } } LABEL_205: if ( a3 ) { if ( a3 != 1 ) goto LABEL_222; v112 = v3 + 412; v113 = v3 + 532; v159 = v3 + 472; } else { v112 = v3 + 352; v113 = v3 + 472; v159 = v3 + 532; } if ( v112 ) { if ( v113 ) { if ( *(_DWORD *)(v112 + 56) ) { v114 = *(_DWORD *)(v113 + 52); if ( v114 >= 0 ) { if ( v114 > 0 ) goto LABEL_260; if ( *(_DWORD *)(v159 + 52) <= 0 ) goto LABEL_218; if ( v114 ) { LABEL_260: v117 = **(_DWORD **)(v112 + 56); v118 = sub_7549E0("- %d", *(_DWORD *)(v113 + 52)); (*(void (__thiscall **)(_DWORD, char *))(v117 + 472))(*(_DWORD *)(v112 + 56), v118); } else { v115 = **(_DWORD **)(v112 + 56); v116 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v115 + 472))(*(_DWORD *)(v112 + 56), v116); } LABEL_218: v119 = *(_DWORD *)(v113 + 52); v120 = *(_DWORD *)(v159 + 52); if ( v119 <= v120 ) { if ( v119 < v120 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v112 + 56) + 468))(&dword_AA8C88); } else { (*(void (__stdcall **)(char *))(**(_DWORD **)(v112 + 56) + 468))(aIii); } goto LABEL_222; } } } } LABEL_222: if ( a3 ) { if ( a3 != 1 ) goto LABEL_239; v121 = v3 + 412; v122 = v3 + 532; v123 = v3 + 472; } else { v121 = v3 + 352; v122 = v3 + 472; v123 = v3 + 532; } v160 = v123; v146 = v122; if ( v121 ) { if ( v122 ) { if ( *(_DWORD *)(v121 + 20) ) { v124 = *(_DWORD *)(v122 + 56); if ( v124 >= 0 ) { if ( v124 > 0 ) goto LABEL_261; if ( *(_DWORD *)(v123 + 56) <= 0 ) goto LABEL_235; if ( v124 ) { LABEL_261: v127 = **(_DWORD **)(v121 + 20); v128 = sub_7549E0("+ %d", v124); (*(void (__thiscall **)(_DWORD, char *))(v127 + 472))(*(_DWORD *)(v121 + 20), v128); v122 = v146; } else { v125 = **(_DWORD **)(v121 + 20); v126 = sub_7549E0("%d", 0); (*(void (__thiscall **)(_DWORD, char *))(v125 + 472))(*(_DWORD *)(v121 + 20), v126); } LABEL_235: v129 = *(_DWORD *)(v122 + 56); v130 = *(_DWORD *)(v160 + 56); if ( v129 <= v130 ) { if ( v129 < v130 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v121 + 20) + 468))(&dword_AA8C88); } else { (*(void (__stdcall **)(char *))(**(_DWORD **)(v121 + 20) + 468))(aIii); } goto LABEL_239; } } } } LABEL_239: if ( a3 ) { result = a3 - 1; if ( a3 != 1 ) return result; result = *(_DWORD *)(v3 + 708); } else { result = *(_DWORD *)(v3 + 704); } if ( result >= 0 ) { if ( *(_DWORD *)(v3 + 716) ) { v132 = **(_DWORD **)(v3 + 716); v133 = result; v134 = (char *)sub_4090F0(-672987585); v135 = sub_7549E0(v134, v133); result = (*(int (__thiscall **)(_DWORD, char *))(v132 + 472))(*(_DWORD *)(v3 + 716), v135); } } return result; } // AA8C88: using guessed type int dword_AA8C88; //----- (00447740) -------------------------------------------------------- int __thiscall sub_447740(_DWORD *this) { int v1; // esi unsigned int v2; // eax int v3; // ecx _DWORD *v4; // ecx int v5; // eax int v6; // edx v1 = (int)this; v2 = *(_DWORD *)(this[170] + 456); v3 = this[87]; if ( v2 < 0xC0 && (v4 = *(_DWORD **)(v3 + 4 * v2 + 348)) != 0 ) v5 = sub_5D5470(v4); else v5 = 0; sub_5D5B70(*(_WORD **)(v1 + 680), v5, 1); return sub_4469F0(v1, v6, 1); } //----- (00447790) -------------------------------------------------------- void __thiscall sub_447790(char *this, int a2, _BYTE *a3) { int v3; // esi signed int v4; // edx unsigned __int8 *v5; // eax if ( a3 ) { if ( a2 ) { if ( a2 != 1 ) return; v3 = (int)(this + 532); } else { v3 = (int)(this + 472); } if ( v3 ) { v4 = 0; if ( *a3 & 0xFE ) { v5 = a3 + 1; do { *(_DWORD *)(v3 + 4 * *v5) = *(unsigned __int16 *)(v5 + 1); ++v4; v5 += 3; } while ( v4 < (signed int)((unsigned int)(unsigned __int8)*a3 >> 1) ); } sub_4469F0((int)this, a2, a2); } } } //----- (00447800) -------------------------------------------------------- int __cdecl sub_447800(int a1, int a2, int a3) { void *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1D4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D6D00((void **)v3); LOBYTE(v8) = 1; *(_DWORD *)v4 = &ChangeSlotWin::`vftable'; *(_DWORD *)(v4 + 232) = &ChangeSlotWin::`vftable'; *(_DWORD *)(v4 + 448) = 0; *(_DWORD *)(v4 + 452) = -1; *(_DWORD *)(v4 + 456) = -1; sub_5D5B70((_WORD *)v4, 0, 1); } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 2; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9B01B4: using guessed type void *ChangeSlotWin::`vftable'; // 9B01D4: using guessed type void *ChangeSlotWin::`vftable'; //----- (00447970) -------------------------------------------------------- char __thiscall sub_447970(_DWORD *this, int a2) { int v2; // esi int v3; // edi int v4; // ebx char *v5; // eax int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v10; // eax _BYTE *v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG **v15; // edi const CHAR *v16; // eax volatile LONG *v17; // edi volatile LONG v18; // ebx int v19; // eax const CHAR *v20; // eax const CHAR *v21; // eax volatile LONG *v22; // ebx volatile LONG v23; // edi const CHAR *v24; // eax volatile LONG *v25; // eax volatile LONG v26; // edi int v27; // eax signed int v28; // edi volatile LONG **v29; // ebx int v30; // ST28_4 char *v31; // eax char *v32; // eax volatile LONG *v33; // eax char *v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // eax _BYTE *v37; // ebx volatile LONG *v38; // edi int v39; // eax int v40; // ebx volatile LONG *v41; // eax int v42; // edi const CHAR *v43; // eax volatile LONG *v44; // edi volatile LONG *v45; // ebx char *v46; // eax void (__thiscall ***v47)(_DWORD, signed int); // esi void *v48; // edi int v49; // eax float *v50; // eax float *v51; // eax void (__thiscall ***v52)(_DWORD, signed int); // esi void (__thiscall ***v53)(_DWORD, signed int); // esi int v54; // [esp+30h] [ebp-B0h] int v55; // [esp+34h] [ebp-ACh] int v56; // [esp+38h] [ebp-A8h] const char *v57; // [esp+3Ch] [ebp-A4h] void **v58; // [esp+40h] [ebp-A0h] float v59; // [esp+44h] [ebp-9Ch] float v60; // [esp+48h] [ebp-98h] const CHAR *v61; // [esp+5Ch] [ebp-84h] const CHAR *v62; // [esp+60h] [ebp-80h] const CHAR *v63; // [esp+64h] [ebp-7Ch] const CHAR *v64; // [esp+68h] [ebp-78h] const CHAR *v65; // [esp+6Ch] [ebp-74h] const CHAR *v66; // [esp+70h] [ebp-70h] const CHAR *v67; // [esp+74h] [ebp-6Ch] const CHAR *v68; // [esp+78h] [ebp-68h] const CHAR *v69; // [esp+7Ch] [ebp-64h] const CHAR *v70; // [esp+80h] [ebp-60h] const CHAR *v71; // [esp+84h] [ebp-5Ch] const CHAR *v72; // [esp+88h] [ebp-58h] const CHAR *v73; // [esp+8Ch] [ebp-54h] const CHAR *v74; // [esp+90h] [ebp-50h] const CHAR *v75; // [esp+94h] [ebp-4Ch] int v76[5]; // [esp+98h] [ebp-48h] float v77; // [esp+ACh] [ebp-34h] float v78; // [esp+B0h] [ebp-30h] float v79; // [esp+B4h] [ebp-2Ch] void *v80; // [esp+B8h] [ebp-28h] int v81; // [esp+BCh] [ebp-24h] int v82; // [esp+C0h] [ebp-20h] int *v83; // [esp+C4h] [ebp-1Ch] int v84; // [esp+C8h] [ebp-18h] _BYTE *v85; // [esp+CCh] [ebp-14h] int v86; // [esp+D0h] [ebp-10h] int v87; // [esp+DCh] [ebp-4h] v2 = (int)this; v86 = 0; v3 = a2; this[86] = a2; v87 = 0; this[87] = *(_DWORD *)(v3 + 716); v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\RandomOptionWin.nif "); sub_8F66B0(v5, (int)&v86, v4); v6 = v86; if ( !v86 ) { if ( off_AC0554 ) { off_AC0554("Game\\RandomOptionWin.nif load fila", "LoadFail", v86); v6 = v86; } v87 = -1; if ( !v6 ) return 0; v7 = (void (__thiscall ***)(_DWORD, signed int))v6; v8 = (volatile LONG *)(v6 + 4); goto LABEL_8; } v10 = sub_8FB140(v86, (int)"Frame", (int)&v85, (int)&a2, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, v3, (int)"RandomOptionWin", 0) ) { LABEL_13: v7 = (void (__thiscall ***)(_DWORD, signed int))v86; v87 = -1; if ( !v86 ) return 0; v8 = (volatile LONG *)(v86 + 4); LABEL_8: if ( !InterlockedDecrement(v8) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } v11 = v85; v82 = a2; v80 = v85; sub_456260(v76); LOBYTE(v87) = 1; sub_455FF0(v76, v2); sub_456000(v76, 0, 0); sub_456380(v76, v86); if ( !sub_43D0D0(0x18u) ) { LOBYTE(v87) = 0; sub_4562E0(v76); goto LABEL_13; } *(float *)&v12 = COERCE_FLOAT(sub_43D0D0(0x13u)); if ( *(float *)&v12 == 0.0 ) { v60 = 0.0; v59 = COERCE_FLOAT(&a2); v58 = (void **)&v85; v57 = "Theme"; } else { v60 = *(float *)&v12; v59 = COERCE_FLOAT(&a2); v58 = (void **)&v85; v57 = "Theme"; } v13 = sub_8FB140(v86, (int)v57, (int)v58, SLODWORD(v59), (volatile LONG *)LODWORD(v60)); sub_8F3EB0((int)v85, a2, (int)v13, v2, 0, 0); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v86 + 72))("HelpLinkNor") ) { v14 = sub_8FB140(v86, (int)"HelpLinkNor", (int)&v85, (int)&a2, 0); sub_8FB650(v14, v86, (int)"HelpLinkClick"); sub_8FB650(v14, v86, (int)"HelpLinkOver"); sub_8FE0F0((int)v85, a2, (int)v14, v2, 3, 0, 0); } v15 = sub_8FB140(v86, (int)"ClsNor", (int)&v85, (int)&a2, 0); sub_8FB650(v15, v86, (int)"ClsClick"); sub_8FB650(v15, v86, (int)"ClsOver"); sub_8FE0F0(v85 - v11, a2 - v82, (int)v15, v2, 4, 0, 0); sub_456820(v76, (int)"IconSlot", 0); v56 = dword_AA8C68; v57 = (const char *)dword_AA8C6C; v58 = (void **)dword_AA8C70; v59 = *(float *)&dword_AA8C74; v16 = sub_4090F0(-2055040290); v17 = sub_456760(v76, (int)"WinTitle", (int)v16, v56, (int)v57, (int)v58, SLODWORD(v59), 5); v18 = *v17; v19 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v18 + 452))(v17, v19); (*(void (__thiscall **)(volatile LONG *, int *))(*v17 + 468))(v17, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); sub_456820(v76, (int)"Panel01", 0); sub_456820(v76, (int)"Panel02", 0); sub_456820(v76, (int)"Panel03", 0); v54 = dword_AA8C68; v55 = dword_AA8C6C; v56 = dword_AA8C70; v57 = (const char *)dword_AA8C74; v20 = sub_4090F0(-802883003); sub_456980(v76, (int)"Text01", (int)v20, 0, v54, v55, v56, (int)v57, 4, 0, 1); v54 = dword_AA8C68; v55 = dword_AA8C6C; v56 = dword_AA8C70; v57 = (const char *)dword_AA8C74; v21 = sub_4090F0(-555681477); sub_456980(v76, (int)"Text02", (int)v21, 0, v54, v55, v56, (int)v57, 4, 0, 1); v22 = sub_456760(v76, (int)"Text03", (int)&unk_9AFFCE, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); v23 = *v22; v24 = sub_4090F0(757789258); (*(void (__thiscall **)(volatile LONG *, const CHAR *, _DWORD))(v23 + 480))(v22, v24, 0); v61 = sub_40C190(1398774696); v62 = sub_40C190(1147117977); v63 = sub_40C190(-1666479391); v64 = sub_40C190(1231003042); v65 = sub_40C190(1465883805); v66 = sub_4090F0(-488963266); v67 = sub_40C190(-750632630); v68 = sub_40C190(877144875); v69 = sub_40C190(994800536); v70 = sub_40C190(758937240); v71 = sub_40C190(-1711017506); v72 = sub_40C190(-638981554); v73 = sub_40C190(764386418); v74 = sub_4090F0(154779168); v75 = sub_4090F0(1707714021); v25 = sub_456980( v76, (int)"Text04", (int)&unk_9AFFCF, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 1); *(_DWORD *)(v2 + 716) = v25; v26 = *v25; v27 = sub_421050(9); (*(void (__thiscall **)(_DWORD, int))(v26 + 452))(*(_DWORD *)(v2 + 716), v27); v28 = 1; v83 = (int *)&v61; v29 = (volatile LONG **)(v2 + 412); v81 = 15; do { v60 = 0.0; v59 = 0.0; v58 = (void **)4; v54 = dword_AA8C68; v55 = dword_AA8C6C; v56 = dword_AA8C70; v57 = (const char *)dword_AA8C74; v30 = *v83; v31 = sub_7549E0("ItemText%02d", v28); sub_456980(v76, (int)v31, v30, 0, v54, v55, v56, (int)v57, (int)v58, (volatile LONG *)LODWORD(v59), SLOBYTE(v60)); v60 = 0.0; v59 = 0.0; v58 = (void **)5; v54 = dword_AA8C68; v55 = dword_AA8C6C; v56 = dword_AA8C70; v57 = (const char *)dword_AA8C74; v32 = sub_7549E0("BeforeCount%02d", v28); v33 = sub_456980( v76, (int)v32, (int)"-", 0, v54, v55, v56, (int)v57, (int)v58, (volatile LONG *)LODWORD(v59), SLOBYTE(v60)); v60 = 0.0; v59 = 0.0; v58 = (void **)5; *(v29 - 15) = v33; v54 = dword_AA8C68; v55 = dword_AA8C6C; v56 = dword_AA8C70; v57 = (const char *)dword_AA8C74; v34 = sub_7549E0("AfterCount%02d", v28); v35 = sub_456980( v76, (int)v34, (int)"-", 0, v54, v55, v56, (int)v57, (int)v58, (volatile LONG *)LODWORD(v59), SLOBYTE(v60)); ++v83; *v29 = v35; ++v29; ++v28; --v81; } while ( v81 ); v36 = sub_8FB140(v86, (int)"ForgeSlot", (int)&v85, (int)&a2, 0); v37 = v80; v38 = sub_8F3EB0(v85 - (_BYTE *)v80, a2 - v82, (int)v36, v2, 0, 0); v39 = sub_447800(v85 - v37 + 1, a2 - v82 + 1, v2); v40 = *(_DWORD *)(v2 + 680); v81 = v39; if ( v40 != v39 ) { if ( v40 ) { if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v40 ) (**(void (__thiscall ***)(int, signed int))v40)(v40, 1); v39 = v81; } *(_DWORD *)(v2 + 680) = v39; if ( v39 ) InterlockedIncrement((volatile LONG *)(v39 + 4)); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 680) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 680) + 256))(1); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 240))(v38, 1); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 256))(v38, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 680) + 516))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 680) + 560))(2); *(_DWORD *)(*(_DWORD *)(v2 + 680) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 680), 1); sub_4465B0(*(_BYTE **)(v2 + 680)); v41 = sub_456B30(v76, 0, "Ok", 0, 3); LODWORD(v60) = 5; v42 = (int)v41; v56 = dword_AA8C68; v57 = (const char *)dword_AA8C6C; v58 = (void **)dword_AA8C70; v59 = *(float *)&dword_AA8C74; v43 = sub_4090F0(257498935); sub_456040(v42, (int)v43, v56, (int)v57, (int)v58, SLODWORD(v59), SLODWORD(v60)); v44 = sub_8F4180(0, 0, 1, 1, v2, 0, 0); v80 = (void *)v44; if ( v44 ) InterlockedIncrement(v44 + 1); v45 = *(volatile LONG **)(v2 + 692); LOBYTE(v87) = 2; if ( v45 != v44 ) { if ( v45 && !InterlockedDecrement(v45 + 1) && v45 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v45)(v45, 1); *(_DWORD *)(v2 + 692) = v44; if ( v44 ) InterlockedIncrement(v44 + 1); } LOBYTE(v87) = 1; if ( v44 && !InterlockedDecrement(v44 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v44)(v44, 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); v84 = 0; LOBYTE(v87) = 3; if ( !byte_ACAD5C ) sub_420410(); v60 = 0.0; v59 = COERCE_FLOAT(&v84); v46 = (char *)sub_401410(byte_ACA838, "RandomOptionProgress.nif"); sub_8F66B0(v46, SLODWORD(v59), SLODWORD(v60)); if ( !v84 ) { LOBYTE(v87) = 0; sub_4562E0(v76); v47 = (void (__thiscall ***)(_DWORD, signed int))v86; v87 = -1; if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v47 ) (**v47)(v47, 1); return 0; } v48 = operator new(0x44u); v80 = v48; LOBYTE(v87) = 4; if ( v48 ) { v49 = sub_85BD60((void *)v84); v50 = sub_6B0A90((float *)v48, v49); } else { v50 = 0; } LOBYTE(v87) = 3; *(_DWORD *)(v2 + 688) = v50; if ( v50 ) { v51 = *(float **)v50; v77 = 0.0; v78 = 0.0; v51[22] = 0.0; v79 = 1000.0; v51[23] = 0.0; v51[24] = 1000.0; *(_BYTE *)(*(_DWORD *)(v2 + 688) + 66) = 1; } sub_446410((_DWORD *)v2); LOBYTE(v87) = 1; if ( v84 ) { v52 = (void (__thiscall ***)(_DWORD, signed int))v84; if ( !InterlockedDecrement((volatile LONG *)(v84 + 4)) ) { if ( v52 ) (**v52)(v52, 1); } } LOBYTE(v87) = 0; sub_4562E0(v76); v53 = (void (__thiscall ***)(_DWORD, signed int))v86; v87 = -1; if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v53 ) (**v53)(v53, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00448380) -------------------------------------------------------- void __thiscall sub_448380(_DWORD *this, float a2) { _DWORD *v2; // esi _BYTE *v3; // ecx char *v4; // eax volatile LONG *v5; // eax v2 = this; v3 = (_BYTE *)this[172]; if ( v3[64] ) { sub_6B0C00(v3, a2); } else if ( *((_BYTE *)v2 + 684) && *((_BYTE *)v2 + 700) && sub_5D5470((_DWORD *)v2[170]) ) { sub_447740(v2); *((_BYTE *)v2 + 701) = 0; v4 = (char *)sub_4090F0(-1714235708); v5 = sub_462CA0(2, v4); v2[180] = v5; if ( v5 ) { (**((void (__stdcall ***)(int))v5 + 58))((int)(v2 + 58)); *((_BYTE *)v2 + 684) = 0; *((_BYTE *)v2 + 700) = 0; } } } //----- (004484A0) -------------------------------------------------------- _DWORD *__thiscall sub_4484A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // eax signed int v4; // ecx void *v6; // [esp-1Ch] [ebp-40h] int v7; // [esp-18h] [ebp-3Ch] int v8; // [esp-14h] [ebp-38h] int v9; // [esp-10h] [ebp-34h] int v10; // [esp-Ch] [ebp-30h] int v11; // [esp-8h] [ebp-2Ch] int v12; // [esp-4h] [ebp-28h] void **v13; // [esp+10h] [ebp-14h] void *v14; // [esp+14h] [ebp-10h] int v15; // [esp+20h] [ebp-4h] v1 = this; v14 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &RandomOptionWin::`vftable'; v1[58] = &RandomOptionWin::`vftable'; v15 = 0; v1[148] = &PgWinDrop::`vftable'; v1[149] = 0; v1[150] = 0; v2 = (int)(v1 + 152); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; v1[170] = 0; *((_BYTE *)v1 + 684) = 0; v1[172] = 0; v1[173] = 0; *((float *)v1 + 174) = -1.0; v13 = &v6; *((_WORD *)v1 + 350) = 256; *((_BYTE *)v1 + 702) = 0; v1[176] = 0; v1[177] = 0; v11 = 15; v10 = 0; LOBYTE(v15) = 4; LOBYTE(v6) = 0; sub_4018E0(&v6, "LimitRandomOption", 0x11u); v1[178] = (unsigned __int16)sub_747F30(&unk_ACDC6C, v6, v7, v8, v9, v10, v11, v12); v1[180] = 0; *((_BYTE *)v1 + 724) = 0; v1[149] = v1 + 152; v3 = v1 + 103; v4 = 15; do { *(v3 - 15) = 0; *v3 = 0; ++v3; --v4; } while ( v4 ); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B0440: using guessed type void *RandomOptionWin::`vftable'; // 9B045C: using guessed type void *RandomOptionWin::`vftable'; //----- (004485D0) -------------------------------------------------------- volatile LONG *__cdecl sub_4485D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2D8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4484A0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00448700) -------------------------------------------------------- char __thiscall sub_448700(char *this, int a2) { char *v2; // esi _DWORD *v3; // ebx int v5; // edi const CHAR *v6; // eax int v7; // eax _BYTE *v8; // eax v2 = this; sub_446410(this); v3 = *(_DWORD **)(a2 + 4); if ( !v3 ) return 0; v5 = v3[5]; if ( !v5 ) return 0; if ( (unsigned int)(*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 72))(v3[5]) >= *((_DWORD *)v2 + 178) ) { v6 = sub_4090F0(-437663499); sub_492060(*((_DWORD **)v2 + 86), (int)v6); return 0; } sub_4465B0(*((_BYTE **)v2 + 170)); *(_DWORD *)(*((_DWORD *)v2 + 170) + 452) = v3[2]; *(_DWORD *)(*((_DWORD *)v2 + 170) + 456) = v3[3]; *(_DWORD *)(*((_DWORD *)v2 + 170) + 448) = *(_DWORD *)(a2 + 8); sub_4461F0(*((_DWORD **)v2 + 170), 1); sub_5D5B70(*((_WORD **)v2 + 170), v5, 1); v7 = *((_DWORD *)v2 + 178) - (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 72))(v5); *((_DWORD *)v2 + 176) = v7; if ( v7 >= 0 ) { v8 = (_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 48))(v5); sub_447790(v2, 0, v8); } return 1; } //----- (004487F0) -------------------------------------------------------- char __thiscall sub_4487F0(_BYTE *this, int *a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // eax int v7; // ecx _BYTE *v8; // eax char *v9; // eax _DWORD *v10; // esi const CHAR *v11; // eax v4 = this; if ( this[464] ) { byte_BA6BD0 = 1; return 0; } if ( !*a2 ) return 0; v6 = *(_DWORD **)(*a2 + 4); if ( v6 ) { v7 = v6[5]; if ( !v7 || v6[4] || v6[2] ) goto LABEL_14; v8 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)v7 + 48))(); if ( v8 ) { if ( *v8 & 0xFE ) { v9 = (char *)sub_402BF0(v4); if ( v9 ) return sub_448700(v9, *a2); } } } v10 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v10 ) { v11 = sub_4090F0(927476329); sub_492060(v10, (int)v11); } LABEL_14: byte_BA6BD0 = 1; return 0; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (004488A0) -------------------------------------------------------- void __thiscall sub_4488A0(_BYTE *this, int a2, _DWORD *a3, int a4) { _BYTE *v4; // esi _DWORD *v5; // edi int v6; // eax int v7; // edi int v8; // eax _BYTE *v9; // eax __int16 *v10; // eax char v11; // al _BYTE *v12; // ecx void (__stdcall *v13)(_DWORD); // eax _BYTE *v14; // ecx void (__stdcall *v15)(signed int); // eax _BYTE *v16; // ecx void (__stdcall *v17)(signed int); // eax v4 = this; if ( a2 != 27 ) return; v5 = a3; if ( !a3 ) return; if ( *a3 ) goto LABEL_12; if ( !this[469] ) { sub_6F3D10(&off_AB7F2C, 12, 97, 0, 0); v14 = (_BYTE *)*((_DWORD *)v4 + 112); *(_WORD *)(v4 + 469) = 1; v15 = *(void (__stdcall **)(signed int))(*(_DWORD *)v14 + 240); v14[464] = 0; v15(1); goto LABEL_11; } sub_446410((_DWORD *)this - 58); v6 = sub_440520(*((_DWORD **)v4 + 29), *(_DWORD *)(*((_DWORD *)v4 + 112) + 456)); v7 = v6; if ( v6 ) { sub_5D5B70(*((_WORD **)v4 + 112), v6, 1); v8 = *((_DWORD *)v4 + 120) - (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 72))(v7); *((_DWORD *)v4 + 118) = v8; if ( v8 >= 0 ) { v9 = (_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 48))(v7); sub_447790(v4 - 232, 0, v9); } } v10 = (__int16 *)sub_40C8D0("RandomOption"); if ( v10 ) { v11 = sub_534660(*((_DWORD ***)v4 + 29), *v10); sub_4C0690(*((_DWORD **)v4 + 28), *(_DWORD *)(*((_DWORD *)v4 + 112) + 456), v11); sub_6B0B40(*((float **)v4 + 114), *((_DWORD **)v4 + 115)); v12 = (_BYTE *)*((_DWORD *)v4 + 112); v4[452] = 1; v13 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 240); v12[464] = 1; v13(0); sub_6BA650(&dword_AB6520, 66); v5 = a3; *((float *)v4 + 116) = flt_ACCFCC; v4[470] = 1; LABEL_11: v4[492] ^= 1u; LABEL_12: if ( *v5 == 1 ) { v16 = (_BYTE *)*((_DWORD *)v4 + 112); *(_WORD *)(v4 + 469) = 1; v17 = *(void (__stdcall **)(signed int))(*(_DWORD *)v16 + 240); v16[464] = 0; v17(1); if ( v4[492] == 1 ) v4[492] = 0; } *((_DWORD *)v4 + 122) = 0; } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00448A50) -------------------------------------------------------- void __thiscall sub_448A50(_BYTE *this) { _BYTE *v1; // esi unsigned __int16 *v2; // edi const CHAR *v3; // eax int v4; // eax const CHAR *v5; // eax const CHAR *v6; // eax volatile LONG *v7; // eax char *v8; // eax char *v9; // eax float v10; // [esp+4h] [ebp-4h] v1 = this; if ( this[701] ) { v10 = flt_ACCFCC; v2 = (unsigned __int16 *)sub_40C8D0("RandomOption"); if ( v2 ) { if ( sub_5D5470(*((_DWORD **)v1 + 170)) ) { v4 = sub_5D5470(*((_DWORD **)v1 + 170)); if ( (unsigned int)(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 72))(v4) < *((_DWORD *)v1 + 178) ) { if ( *((float *)v1 + 174) < 0.0 || v10 - *((float *)v1 + 174) > 5.0 ) { if ( sub_53C350(*((_DWORD ***)v1 + 87), *v2) ) { v7 = sub_462C30(8, &byte_9AFFEB); *((_DWORD *)v1 + 180) = v7; (**((void (__stdcall ***)(int))v7 + 58))((int)(v1 + 232)); sub_4090F0(-1964397066); sub_461950(*((_DWORD ***)v1 + 180)); } else { v8 = (char *)sub_4090F0(592534360); v9 = sub_7549E0(v8, v2 + 17); sub_492060(*((_DWORD **)v1 + 86), (int)v9); } } else { v6 = sub_40C190(-2047355183); sub_492060(*((_DWORD **)v1 + 86), (int)v6); } } else { v5 = sub_4090F0(-437663499); sub_492060(*((_DWORD **)v1 + 86), (int)v5); } } else { v3 = sub_4090F0(-498328801); sub_492060(*((_DWORD **)v1 + 86), (int)v3); } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00448BC0) -------------------------------------------------------- void __thiscall sub_448BC0(_BYTE *this, int a2, int a3) { _DWORD *v3; // eax switch ( a2 ) { case 0: sub_448A50(this); break; case 1: sub_4466E0(this); break; case 3: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "RandomOptionWin"); break; case 4: sub_446870((int)this); break; default: return; } } //----- (00448C30) -------------------------------------------------------- void *__thiscall sub_448C30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ChangeSlotWin::`vftable'; *((_DWORD *)this + 58) = &ChangeSlotWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B01B4: using guessed type void *ChangeSlotWin::`vftable'; // 9B01D4: using guessed type void *ChangeSlotWin::`vftable'; //----- (00448C70) -------------------------------------------------------- void *__thiscall sub_448C70(void *this, char a2) { void *v2; // esi v2 = this; sub_4468C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00448CA0) -------------------------------------------------------- int __thiscall sub_448CA0(char *this, int a2) { char *v2; // esi int result; // eax int v4; // esi signed int v5; // edi v2 = this; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4E3710(*((_DWORD **)v2 + 124), *((_DWORD **)v2 + 125)); result = sub_8F8280(&unk_BA6B10); if ( (char *)result == v2 && !v2[364] ) { v4 = (int)(v2 + 476); v5 = 3; do { result = (*(int (**)(void))(**(_DWORD **)v4 + 268))(); v4 += 4; --v5; } while ( v5 ); } return result; } //----- (00448D10) -------------------------------------------------------- int __thiscall sub_448D10(_DWORD **this, int a2, int a3) { _DWORD *v3; // esi int result; // eax int v5; // esi signed int v6; // edi v3 = this; result = (*(int (**)(void))(*this[124] + 260))(); if ( !(_BYTE)result ) { result = a2; if ( !a2 || a2 == 3 ) { result = (*(int (__thiscall **)(_DWORD *))(*v3 + 244))(v3); if ( (_BYTE)result ) { result = a3; if ( a3 != v3[122] ) { v5 = (int)(v3 + 119); v6 = 3; do { result = (*(int (**)(void))(**(_DWORD **)v5 + 268))(); v5 += 4; --v6; } while ( v6 ); } } } } return result; } //----- (00448D80) -------------------------------------------------------- int __thiscall sub_448D80(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int result; // eax int v7; // eax int v8; // esi signed int v9; // edi int v10; // esi signed int v11; // edi v4 = this; v5 = this[64]; if ( v5 ) result = v5 + 232; else result = 0; if ( a4 != result ) { v7 = this[66]; result = v7 ? v7 + 232 : 0; if ( a4 != result ) { result = (*(int (**)(void))(*(_DWORD *)this[66] + 260))(); if ( !(_BYTE)result ) { result = a2; if ( a2 == 4 ) { v10 = (int)(v4 + 61); v11 = 3; do { result = (*(int (**)(void))(**(_DWORD **)v10 + 268))(); v10 += 4; --v11; } while ( v11 ); } else if ( a2 == 7 ) { v8 = (int)(v4 + 61); v9 = 3; do { result = (*(int (**)(void))(**(_DWORD **)v8 + 268))(); v8 += 4; --v9; } while ( v9 ); } } } } return result; } //----- (00448E20) -------------------------------------------------------- char sub_448E20() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "IDRankingWin"); return (char)v0; } //----- (00448E70) -------------------------------------------------------- char __thiscall sub_448E70(_DWORD **this) { _DWORD **v1; // esi signed int v2; // edi char result; // al v1 = this + 119; v2 = 3; do { result = sub_8F82A0(&unk_BA6B10, *v1); ++v1; --v2; } while ( v2 ); return result; } //----- (00448EA0) -------------------------------------------------------- int __thiscall sub_448EA0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(void *))(*this[99] + 472))(&unk_9B06B7); (*(void (__stdcall **)(void *))(*v1[100] + 472))(&unk_9B06C5); (*(void (__stdcall **)(void *))(*v1[101] + 472))(&unk_9B06C6); (*(void (__stdcall **)(void *))(*v1[102] + 472))(&unk_9B06C7); (*(void (__stdcall **)(void *))(*v1[103] + 472))(&unk_9B06CE); (*(void (__stdcall **)(void *))(*v1[104] + 472))(&unk_9B06CF); (*(void (__stdcall **)(void *))(*v1[105] + 472))(&unk_9B06D6); (*(void (__stdcall **)(void *))(*v1[106] + 472))(&unk_9B06D7); (*(void (__stdcall **)(void *))(*v1[107] + 472))(&unk_9B06F9); (*(void (__stdcall **)(void *))(*v1[108] + 472))(&unk_9B06FA); (*(void (__stdcall **)(void *))(*v1[109] + 472))(&unk_9B06FB); (*(void (__stdcall **)(void *))(*v1[110] + 472))(&unk_9B0709); (*(void (__stdcall **)(void *))(*v1[111] + 472))(&unk_9B070A); return (*(int (__stdcall **)(void *))(*v1[112] + 472))(&unk_9B070B); } //----- (00449050) -------------------------------------------------------- char __thiscall sub_449050(_DWORD *this) { _DWORD *v1; // eax v1 = (_DWORD *)this[140]; if ( v1 == (_DWORD *)this[141] ) { v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) LOBYTE(v1) = sub_4C0CF0(v1); } return (char)v1; } //----- (00449080) -------------------------------------------------------- int __thiscall sub_449080(_DWORD **this) { _DWORD **v1; // esi int v2; // esi signed int v3; // ebx int v4; // eax int v5; // edi int result; // eax v1 = this; sub_466A50(this[92]); v2 = (int)(v1 + 113); v3 = 3; do { v4 = sub_67E850(); v5 = *(_DWORD *)(v2 + 24); sub_460590(*(_DWORD ***)(v5 + 344), v4); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 344) + 324))(0.0); (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 472))(&unk_9B06AF); result = (*(int (__stdcall **)(void *))(**(_DWORD **)(v2 + 12) + 472))(&unk_9B06B6); v2 += 4; --v3; } while ( v3 ); return result; } //----- (00449100) -------------------------------------------------------- void __thiscall sub_449100(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[125]; if ( v2 ) { v3 = v1[124]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[124] + 344) = *(_DWORD *)(v1[125] + 300); sub_465130((_DWORD *)v1[124]); } } } //----- (00449150) -------------------------------------------------------- char __thiscall sub_449150(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx v3 = this; v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { if ( a3 != -1 ) { v5 = v3[140]; if ( v5 != v3[141] ) { switch ( a2 ) { case 0: LOBYTE(v4) = sub_4CEA90(v4, v5 + 13 * a3); v3[87] = a2; v3[89] = a3; break; case 1: LOBYTE(v4) = sub_4CEB00(v4, v3[140] + 13 * a3); v3[87] = a2; v3[89] = a3; break; case 2: LOBYTE(v4) = sub_4CEB70(v4, v5 + 13 * a3); v3[87] = a2; v3[89] = a3; break; case 3: LOBYTE(v4) = sub_4CEBE0(v4, v3[140] + 13 * a3); goto LABEL_9; default: LABEL_9: v3[87] = a2; v3[89] = a3; break; } } } } return (char)v4; } //----- (00449240) -------------------------------------------------------- char __thiscall sub_449240(_DWORD **this, unsigned int a2) { _DWORD *v2; // esi char result; // al int v4; // eax const char *v5; // eax int v6; // ecx int v7; // [esp+8h] [ebp-108h] char v8; // [esp+Ch] [ebp-104h] v2 = this; result = sub_464B60(this[124], a2, &v7); if ( result ) { v4 = sub_44D6D0(v7); strncpy(&v8, (const char *)(v4 + 14), 0x20u); if ( *(_BYTE *)(v2[140] + 13 * a2 + 12) == 2 ) { v5 = sub_4090F0(1076295557); strncat(&v8, v5, 0x100u); } v6 = v2[123]; v2[88] = a2; result = (*(int (__stdcall **)(char *))(*(_DWORD *)v6 + 472))(&v8); } return result; } //----- (00449300) -------------------------------------------------------- char __thiscall sub_449300(int this, int a2) { _DWORD *v2; // ebx int v3; // esi char *v4; // eax int v5; // eax int v6; // edi volatile LONG *v7; // ST18_4 int v8; // esi char *v9; // eax int v10; // edi char *v11; // eax int v12; // eax int v13; // edi int v14; // eax char v15; // al int v16; // eax _DWORD **v17; // ecx int v18; // edi char *v19; // eax int v20; // edi char *v21; // eax int v22; // eax int v23; // esi int v24; // eax char v25; // al void (__thiscall ***v26)(_DWORD, signed int); // esi volatile LONG *v28; // [esp+28h] [ebp-1Ch] int v29; // [esp+2Ch] [ebp-18h] int v30; // [esp+30h] [ebp-14h] int v31; // [esp+34h] [ebp-10h] int v32; // [esp+40h] [ebp-4h] int v33; // [esp+4Ch] [ebp+8h] int v34; // [esp+4Ch] [ebp+8h] v2 = (_DWORD *)this; v31 = 0; v3 = dword_BA6BA0; v32 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\IDRankingWin.nif"); sub_8F66B0(v4, (int)&v31, v3); v5 = sub_43D0D0(0x1Du); v6 = v31; v7 = (volatile LONG *)v5; v8 = a2 + 1; v28 = (volatile LONG *)v5; v9 = sub_7549E0("FaceCut_Mask%.2d", a2 + 1); sub_8FB140(v6, (int)v9, (int)&v29, (int)&v30, v7); v10 = *(_DWORD *)v31; v33 = v31; v11 = sub_7549E0("FaceCut_Mask%.2d", v8); v12 = (*(int (__thiscall **)(int, char *))(v10 + 72))(v33, v11); v13 = v12; if ( v12 ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 4))(v12); if ( v14 ) { while ( (char *)v14 != dword_BA478C ) { v14 = *(_DWORD *)(v14 + 4); if ( !v14 ) goto LABEL_7; } v15 = 1; } else { LABEL_7: v15 = 0; } v12 = v15 != 0 ? v13 : 0; } v2[86] = sub_460640(v29, v30, v12, v2); v16 = sub_67E850(); v17 = (_DWORD **)v2[86]; v2[87] = v16; sub_460590(v17, v16); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[86] + 256))(1); v18 = v31; v19 = sub_7549E0("Fill_Exp%.2d", v8); sub_8FB140(v18, (int)v19, (int)&v29, (int)&v30, v28); v20 = *(_DWORD *)v31; v34 = v31; v21 = sub_7549E0("Fill_Exp%.2d", v8); v22 = (*(int (__thiscall **)(int, char *))(v20 + 72))(v34, v21); v23 = v22; if ( v22 ) { v24 = (*(int (__thiscall **)(int))(*(_DWORD *)v22 + 4))(v22); if ( v24 ) { while ( (char *)v24 != dword_BA478C ) { v24 = *(_DWORD *)(v24 + 4); if ( !v24 ) goto LABEL_15; } v25 = 1; } else { LABEL_15: v25 = 0; } v22 = v25 != 0 ? v23 : 0; } sub_909ED0(v29, v30, v22, 0, 0.0, 360.0, (int)v2); v26 = (void (__thiscall ***)(_DWORD, signed int))v31; v32 = -1; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v26 ) (**v26)(v26, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00449520) -------------------------------------------------------- int __thiscall sub_449520(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // edi int v4; // esi int result; // eax int i; // esi v2 = a2; v3 = this; v4 = this[128]; if ( v4 != this[129] ) { do { result = (*(int (__stdcall **)(int))(**(_DWORD **)v4 + 256))(a2); v4 += 4; } while ( v4 != v3[129] ); } for ( i = v3[132]; i != v3[133]; i += 4 ) { LOBYTE(v2) = (_BYTE)a2 == 0; result = (*(int (__stdcall **)(int))(**(_DWORD **)i + 256))(v2); } return result; } //----- (00449590) -------------------------------------------------------- int __thiscall sub_449590(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax int v5; // eax int v6; // eax int result; // eax int *v8; // edi int v9; // ebx const CHAR *v10; // eax int *v11; // edi int v12; // ebx const CHAR *v13; // eax int *v14; // edi int v15; // ebx const CHAR *v16; // eax v2 = this; v3 = this[95]; if ( v3 ) *(_BYTE *)(v3 + 380) = 0; v4 = this[96]; if ( v4 ) *(_BYTE *)(v4 + 380) = 0; v5 = this[97]; if ( v5 ) *(_BYTE *)(v5 + 380) = 0; v6 = this[98]; if ( v6 ) *(_BYTE *)(v6 + 380) = 0; result = a2; switch ( a2 ) { case 0: *(_BYTE *)(this[95] + 380) = 1; v8 = (int *)this[93]; v9 = *v8; v10 = sub_4090F0(-1819237176); (*(void (__thiscall **)(int *, const CHAR *))(v9 + 472))(v8, v10); result = sub_449520(v2, 1); v2[86] = 0; break; case 1: *(_BYTE *)(this[96] + 380) = 1; v11 = (int *)this[93]; v12 = *v11; v13 = sub_4090F0(775171171); (*(void (__thiscall **)(int *, const CHAR *))(v12 + 472))(v11, v13); result = sub_449520(v2, 1); v2[86] = 1; break; case 2: *(_BYTE *)(this[97] + 380) = 1; v14 = (int *)this[93]; v15 = *v14; v16 = sub_4090F0(-1635490939); (*(void (__thiscall **)(int *, const CHAR *))(v15 + 472))(v14, v16); result = sub_449520(v2, 1); v2[86] = 2; break; case 3: *(_BYTE *)(this[98] + 380) = 1; result = sub_449520(this, 0); v2[86] = 3; break; default: return result; } return result; } //----- (00449700) -------------------------------------------------------- int __thiscall sub_449700(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ecx int result; // eax int i; // esi v2 = this; v3 = (_DWORD *)this[125]; *((_BYTE *)v2 + 364) = a2; sub_4638F0(v3, 0); *(_DWORD *)(v2[124] + 344) = 0; result = sub_465130((_DWORD *)v2[124]); for ( i = v2[136]; i != v2[137]; i += 4 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)i + 256))(a2); return result; } //----- (00449770) -------------------------------------------------------- int __userpurge sub_449770@(_DWORD **a1@, float a2@, int a3, int *a4, unsigned __int8 *a5, _BYTE *a6, _BYTE *a7, _BYTE *a8) { int result; // eax _BYTE *v9; // edi int v10; // ebx unsigned __int8 *v11; // ecx int v12; // esi char *v13; // eax char *v14; // eax int v15; // eax int v16; // esi char v17; // al int v18; // esi char *v19; // eax char *v20; // eax char v21; // al int v22; // esi char *v23; // eax char *v24; // eax char v25; // al int v26; // edi char *v27; // eax int v28; // esi int v29; // eax CHAR *v30; // eax float v31; // [esp+8h] [ebp-144h] signed int v32; // [esp+28h] [ebp-124h] int v33; // [esp+2Ch] [ebp-120h] char v34; // [esp+30h] [ebp-11Ch] char v35[4]; // [esp+130h] [ebp-1Ch] int v36; // [esp+134h] [ebp-18h] int v37; // [esp+138h] [ebp-14h] int v38; // [esp+13Ch] [ebp-10h] int v39; // [esp+140h] [ebp-Ch] char v40; // [esp+144h] [ebp-8h] result = (int)a5; v9 = a6; v10 = (int)a1; if ( a5 ) { sub_449080(a1); sub_449240((_DWORD **)v10, *(_DWORD *)(v10 + 356)); sub_449590((_DWORD *)v10, *(_DWORD *)(v10 + 348)); sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v32 = 0; if ( *a4 > 0 ) { v31 = a2; while ( 1 ) { v11 = &a5[32 * v32]; v40 = 0; *(_DWORD *)v35 = *(_DWORD *)v11; v36 = *((_DWORD *)v11 + 1); v37 = *((_DWORD *)v11 + 2); v38 = *((_DWORD *)v11 + 3); v33 = (int)&a5[32 * v32]; v39 = *((_DWORD *)v11 + 4); if ( v32 >= 3 ) goto LABEL_45; if ( !v32 ) { v22 = **(_DWORD **)(v10 + 452); v23 = (char *)sub_4090F0(-152784196); v24 = sub_7549E0(v23, v35); (*(void (__thiscall **)(_DWORD, char *, float))(v22 + 472))( *(_DWORD *)(v10 + 452), v24, COERCE_FLOAT(LODWORD(v31))); if ( v9 == (_BYTE *)-1 ) { v15 = sub_67E850(); } else { switch ( a5[20] ) { case 1u: case 2u: case 3u: case 4u: case 5u: v25 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v25 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v25 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v25 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v25 = 21; break; case 0x1Au: case 0x1Bu: v25 = 26; break; default: v25 = 0; break; } v15 = sub_67EDE0(v10, v25, *v9 >> 7, v9[3], v9[1], v9[2], 0xFFFF, 5, *(_DWORD *)(v10 + 360)); } v16 = *(_DWORD *)(v10 + 476); goto LABEL_43; } if ( v32 == 1 ) break; if ( v32 == 2 ) { v12 = **(_DWORD **)(v10 + 460); v13 = (char *)sub_4090F0(-153833026); v14 = sub_7549E0(v13, v35); (*(void (__thiscall **)(_DWORD, char *, float))(v12 + 472))( *(_DWORD *)(v10 + 460), v14, COERCE_FLOAT(LODWORD(v31))); if ( *(_DWORD *)a8 == -1 ) { v15 = sub_67E850(); v16 = *(_DWORD *)(v10 + 484); } else { switch ( a5[84] ) { case 1u: case 2u: case 3u: case 4u: case 5u: v17 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v17 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v17 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v17 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v17 = 21; break; case 0x1Au: case 0x1Bu: v17 = 26; break; default: v17 = 0; break; } v15 = sub_67EDE0(v10, v17, *a8 >> 7, a8[3], a8[1], a8[2], 0xFFFF, 5, *(_DWORD *)(v10 + 360)); v16 = *(_DWORD *)(v10 + 484); } LABEL_43: sub_460590(*(_DWORD ***)(v16 + 344), v15); v31 = 0.0; (*(void (**)(void))(**(_DWORD **)(v16 + 344) + 324))(); v11 = &a5[32 * v32]; } sub_4E21E0(*((_DWORD *)v11 + 6), *((_DWORD *)v11 + 7), &v34); (*(void (__stdcall **)(char *))(**(_DWORD **)(v10 + 4 * v32 + 464) + 472))(&v34); LABEL_45: v26 = v32 + 1; v27 = sub_7549E0("%d", v32 + 1); v28 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v10 + 368), v27); sub_4661A0(*(_DWORD **)(v10 + 368), v28, 1, v35); v29 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(v33 + 20)); if ( v29 ) v30 = (CHAR *)(v29 + 21); else v30 = (CHAR *)&byte_9A8050; sub_4661A0(*(_DWORD **)(v10 + 368), v28, 2, v30); sub_4E21E0(*(_DWORD *)(v33 + 24), *(_DWORD *)(v33 + 28), &v34); sub_4661A0(*(_DWORD **)(v10 + 368), v28, 3, &v34); ++v32; if ( v26 >= *a4 ) goto LABEL_49; v9 = a6; } v18 = **(_DWORD **)(v10 + 456); v19 = (char *)sub_4090F0(-153834051); v20 = sub_7549E0(v19, v35); (*(void (__thiscall **)(_DWORD, char *, float))(v18 + 472))( *(_DWORD *)(v10 + 456), v20, COERCE_FLOAT(LODWORD(v31))); if ( *(_DWORD *)a7 == -1 ) { v15 = sub_67E850(); v16 = *(_DWORD *)(v10 + 480); } else { switch ( a5[52] ) { case 1u: case 2u: case 3u: case 4u: case 5u: v21 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v21 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v21 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v21 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v21 = 21; break; case 0x1Au: case 0x1Bu: v21 = 26; break; default: v21 = 0; break; } v15 = sub_67EDE0(v10, v21, *a7 >> 7, a7[3], a7[1], a7[2], 0xFFFF, 5, *(_DWORD *)(v10 + 360)); v16 = *(_DWORD *)(v10 + 480); } goto LABEL_43; } LABEL_49: result = sub_465130(*(_DWORD **)(v10 + 368)); } return result; } // 449770: could not find valid save-restore pair for esi // AC9C84: using guessed type int dword_AC9C84; //----- (00449D00) -------------------------------------------------------- int __thiscall sub_449D00(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // ST0C_4 int v4; // ST1C_4 char *v5; // eax char *v6; // eax int v7; // ST1C_4 int v8; // ST0C_4 char *v9; // eax char *v10; // eax int v11; // ST1C_4 int v12; // ST0C_4 char *v13; // eax char *v14; // eax unsigned __int8 v15; // al int v16; // eax const CHAR *v17; // eax const CHAR *v18; // ST0C_4 int v19; // ST1C_4 char *v20; // eax char *v21; // eax int v22; // ST0C_4 int v23; // ST1C_4 int v24; // ST08_4 int v25; // ST04_4 char *v26; // eax char *v27; // eax int v28; // ebx int v29; // ST0C_4 int v30; // ST08_4 int v31; // ST04_4 char *v32; // eax char *v33; // eax int v34; // edi char *v35; // eax char *v36; // eax int v37; // edi char *v38; // eax char *v39; // eax char v41; // [esp+10h] [ebp-104h] v2 = this; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_448EA0((_DWORD **)v2); sub_449240((_DWORD **)v2, v2[89]); sub_449590(v2, v2[87]); v3 = dword_AD8EBC + 209; v4 = *(_DWORD *)v2[99]; v5 = (char *)sub_4090F0(-337528119); v6 = sub_7549E0(v5, v3); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[99], v6); v7 = *(_DWORD *)v2[100]; v8 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v9 = (char *)sub_4090F0(-203967187); v10 = sub_7549E0(v9, v8); (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(v2[100], v10); v11 = *(_DWORD *)v2[101]; v12 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v13 = (char *)sub_4090F0(-52691155); v14 = sub_7549E0(v13, v12); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(v2[101], v14); v15 = sub_652070(dword_AD8EBC); v16 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v15); if ( v16 ) v17 = (const CHAR *)(v16 + 21); else v17 = &byte_9A8050; v18 = v17; v19 = *(_DWORD *)v2[102]; v20 = (char *)sub_4090F0(-404554437); v21 = sub_7549E0(v20, v18); (*(void (__thiscall **)(_DWORD, char *))(v19 + 472))(v2[102], v21); sub_4E21E0(*(_DWORD *)(a2 + 2), *(_DWORD *)(a2 + 6), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[103] + 472))(&v41); sub_4E21E0(*(_DWORD *)(a2 + 10), *(_DWORD *)(a2 + 14), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[104] + 472))(&v41); sub_4E21E0(*(_DWORD *)(a2 + 18), *(_DWORD *)(a2 + 22), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[105] + 472))(&v41); v22 = *(unsigned __int8 *)(a2 + 28); v23 = *(_DWORD *)v2[106]; v24 = *(unsigned __int8 *)(a2 + 27); v25 = *(unsigned __int8 *)(a2 + 26); v26 = (char *)sub_4090F0(-523125225); v27 = sub_7549E0(v26, v25, v24, v22); (*(void (__thiscall **)(_DWORD, char *))(v23 + 472))(v2[106], v27); sub_4E21E0(*(_DWORD *)(a2 + 32), *(_DWORD *)(a2 + 36), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[107] + 472))(&v41); sub_4E21E0(*(_DWORD *)(a2 + 40), *(_DWORD *)(a2 + 44), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[108] + 472))(&v41); sub_4E21E0(*(_DWORD *)(a2 + 48), *(_DWORD *)(a2 + 52), &v41); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[109] + 472))(&v41); v28 = *(_DWORD *)v2[110]; v29 = *(unsigned __int8 *)(a2 + 58); v30 = *(unsigned __int8 *)(a2 + 57); v31 = *(unsigned __int8 *)(a2 + 56); v32 = (char *)sub_4090F0(-523125225); v33 = sub_7549E0(v32, v31, v30, v29); (*(void (__thiscall **)(_DWORD, char *))(v28 + 472))(v2[110], v33); v34 = *(_DWORD *)v2[111]; v35 = (char *)sub_4090F0(-1560757028); v36 = sub_7549E0(v35); (*(void (__thiscall **)(_DWORD, char *))(v34 + 472))(v2[111], v36); v37 = *(_DWORD *)v2[112]; v38 = (char *)sub_4090F0(-1779119649); v39 = sub_7549E0(v38); return (*(int (__thiscall **)(_DWORD, char *))(v37 + 472))(v2[112], v39); } // AC9C84: using guessed type int dword_AC9C84; //----- (0044A0F0) -------------------------------------------------------- char __thiscall sub_44A0F0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = this; sub_449700(this, 0); switch ( a2 ) { case 11: v3 = 0; break; case 12: v3 = 1; break; case 13: v3 = 2; break; case 14: v3 = 3; break; default: v3 = a2; break; } if ( v2[88] == -1 ) sub_449590(v2, v3); return sub_449150(v2, v3, v2[88]); } //----- (0044A170) -------------------------------------------------------- char __thiscall sub_44A170(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi v2 = this; if ( this[86] == 4 ) sub_449240((_DWORD **)this, a2); sub_449700(v2, 0); return sub_449150(v2, v2[86], a2); } //----- (0044A1B0) -------------------------------------------------------- int __thiscall sub_44A1B0(_DWORD **this) { _DWORD *v1; // esi char v2; // bl int result; // eax v1 = this; v2 = (*(int (**)(void))(*this[124] + 260))(); result = sub_449700(v1, v2 == 0); if ( !v2 ) result = (*(int (__thiscall **)(_DWORD *))(*v1 + 268))(v1); return result; } //----- (0044A1F0) -------------------------------------------------------- int __thiscall sub_44A1F0(_DWORD **this) { _DWORD **v1; // esi _DWORD **v2; // edi signed int v3; // ebx _DWORD *i; // edi _DWORD *j; // edi int v6; // edi const CHAR *v7; // eax _DWORD **v8; // esi int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] v1 = this; v2 = this + 119; v3 = 3; do { sub_8F86A0(&unk_BA6B10, *v2); ++v2; --v3; } while ( v3 ); v1[86] = 0; v1[88] = (_DWORD *)-1; sub_449700(v1, 0); for ( i = v1[128]; i != v1[129]; ++i ) (*(void (__stdcall **)(signed int))(*(_DWORD *)*i + 256))(1); for ( j = v1[132]; j != v1[133]; ++j ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*j + 256))(0); sub_466A50(v1[92]); sub_449080(v1); sub_449590(v1, (int)v1[86]); (*(void (__stdcall **)(void *))(*v1[94] + 472))(&unk_9B06AE); v6 = *v1[123]; v7 = sub_4090F0(-1685080359); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v6 + 472))(v1[123], v7); sub_448EA0(v1); v8 = v1 + 58; v10 = 720904; v11 = 0; if ( v8[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 4))(23, &v10, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 20))(23, &v10, v8); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v8)[5])(v8, 23, &v10, v8); } //----- (0044A340) -------------------------------------------------------- void __thiscall sub_44A340(int this, int a2, unsigned int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = (_DWORD *)this; switch ( a2 ) { case 11: case 12: case 13: case 14: sub_44A0F0((_DWORD *)this, a2); break; case 15: sub_448E20(); break; case 16: v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) sub_4A6020(v4, 0); break; case 17: sub_44A1B0((_DWORD **)this); break; case 18: sub_44A170((_DWORD *)this, a3); break; case 19: sub_449100((_DWORD *)this); break; default: if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 496) + 260))() ) sub_449700(v3, 0); break; } } //----- (0044A410) -------------------------------------------------------- int __cdecl sub_44A410(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &FaceCutMaskWin::`vftable'; *(_DWORD *)(v2 + 232) = &FaceCutMaskWin::`vftable'; *(_DWORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B0BF4: using guessed type void *FaceCutMaskWin::`vftable'; // 9B0C14: using guessed type void *FaceCutMaskWin::`vftable'; //----- (0044A550) -------------------------------------------------------- _DWORD *__thiscall sub_44A550(_DWORD *this) { _DWORD *v1; // esi char *v2; // edi char *v3; // eax char *v4; // edi char *v5; // ecx int v6; // eax _DWORD *result; // eax void *v10; // [esp-1Ch] [ebp-40h] int v11; // [esp-18h] [ebp-3Ch] int v12; // [esp-14h] [ebp-38h] int v13; // [esp-10h] [ebp-34h] int v14; // [esp-Ch] [ebp-30h] int v15; // [esp-8h] [ebp-2Ch] int v16; // [esp-4h] [ebp-28h] void **v17; // [esp+10h] [ebp-14h] void *v18; // [esp+14h] [ebp-10h] int v19; // [esp+20h] [ebp-4h] v1 = this; v18 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &IDRankingWin::`vftable'; v1[58] = &IDRankingWin::`vftable'; v19 = 0; v1[128] = 0; v1[129] = 0; v1[130] = 0; v1[132] = 0; v1[133] = 0; v1[134] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[140] = 0; v1[141] = 0; v1[142] = 0; v17 = &v10; v1[86] = 0; v1[88] = -1; v1[92] = 0; v1[93] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[122] = 0; v15 = 15; v14 = 0; LOBYTE(v19) = 4; LOBYTE(v10) = 0; sub_4018E0(&v10, "Ranking_Camera", 0xEu); v1[90] = (unsigned __int16)sub_747F30(&unk_ACDC6C, v10, v11, v12, v13, v14, v15, v16); v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[119] = 0; v1[113] = 0; v1[116] = 0; v1[120] = 0; v1[114] = 0; v1[117] = 0; v1[121] = 0; v1[115] = 0; v1[118] = 0; v1[126] = 0; v1[127] = 0; v2 = (char *)v1[128]; v3 = (char *)v1[129]; if ( v2 != v3 ) { v18 = 0; memcpy_0(v2, v3, 0); v1[129] = &v2[(_DWORD)v18]; } v4 = (char *)v1[132]; v5 = (char *)v1[133]; if ( v4 != v5 ) { v18 = 0; memcpy_0(v4, v5, 0); v1[133] = &v4[(_DWORD)v18]; } v6 = v1[140]; if ( v6 != v1[141] ) v1[141] = v6; result = v1; *((_BYTE *)v1 + 364) = 0; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B0E38: using guessed type void *IDRankingWin::`vftable'; // 9B0E54: using guessed type void *IDRankingWin::`vftable'; //----- (0044A7D0) -------------------------------------------------------- LONG __thiscall sub_44A7D0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; *this = &IDRankingWin::`vftable'; this[58] = &IDRankingWin::`vftable'; this[119] = 0; this[120] = 0; this[121] = 0; v2 = this[140]; if ( v2 != this[141] ) v1[141] = v2; if ( v1[140] ) operator delete((void *)v1[140]); v1[140] = 0; v1[141] = 0; v1[142] = 0; if ( v1[136] ) operator delete((void *)v1[136]); v1[136] = 0; v1[137] = 0; v1[138] = 0; if ( v1[132] ) operator delete((void *)v1[132]); v1[132] = 0; v1[133] = 0; v1[134] = 0; if ( v1[128] ) operator delete((void *)v1[128]); v1[128] = 0; v1[129] = 0; v1[130] = 0; return sub_8F10F0(v1); } // 9B0E38: using guessed type void *IDRankingWin::`vftable'; // 9B0E54: using guessed type void *IDRankingWin::`vftable'; //----- (0044A8E0) -------------------------------------------------------- volatile LONG *__cdecl sub_44A8E0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x240u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_44A550(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0044AA10) -------------------------------------------------------- int __thiscall sub_44AA10(_DWORD *this, _WORD *a2, int a3) { int result; // eax _DWORD *v4; // esi _DWORD *v5; // edi _BYTE *v6; // ebx const char *v7; // eax int v8; // esi char v9; // cl int v10; // esi int v11; // eax unsigned int v12; // ecx unsigned int v13; // edx int v14; // esi int v15; // eax int v16; // esi int v17; // eax int v18; // ecx int v19; // edx const char *v20; // [esp+8h] [ebp-120h] signed int v21; // [esp+Ch] [ebp-11Ch] _DWORD *v22; // [esp+10h] [ebp-118h] int v23; // [esp+14h] [ebp-114h] int v24; // [esp+18h] [ebp-110h] int v25; // [esp+1Ch] [ebp-10Ch] char v26; // [esp+20h] [ebp-108h] char v27; // [esp+24h] [ebp-104h] result = 0; v4 = this; v22 = this; if ( a3 ) { v25 = 0; v24 = 0; v23 = 0; v21 = 0; if ( *a2 > 0u ) { v5 = this + 140; v6 = (_BYTE *)(a3 + 12); do { v20 = (const char *)sub_4316B0((_DWORD *)v6 - 3); strncpy(&v27, v20 + 14, 0x20u); if ( *v6 == 2 ) { v7 = sub_4090F0(1076295557); strncat(&v27, v7, 0x100u); } v8 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v4[124], &v27); sub_4661A0((_DWORD *)v22[124], v8, 0, &v27); sub_464BE0((_DWORD *)v22[124], v8, 255, 255, 255); sub_464B20((_DWORD *)v22[124], v8, *(unsigned __int16 *)v20); v9 = *v6; v10 = *((_DWORD *)v6 - 3); v11 = *((_DWORD *)v6 - 1); v24 = *((_DWORD *)v6 - 2); v26 = v9; v12 = v5[1]; v23 = v10; v25 = v11; if ( (unsigned int)&v23 >= v12 || *v5 > (unsigned int)&v23 ) { if ( v12 == v5[2] ) sub_44D870((int)v5, 1); v17 = v5[1]; if ( v17 ) { v18 = v24; v19 = v25; *(_DWORD *)v17 = v10; *(_DWORD *)(v17 + 4) = v18; LOBYTE(v18) = v26; *(_DWORD *)(v17 + 8) = v19; *(_BYTE *)(v17 + 12) = v18; } } else { v13 = (signed int)((unsigned __int64)(1321528399i64 * ((signed int)&v23 - *v5)) >> 32) >> 2; v14 = v13 + (v13 >> 31); if ( v12 == v5[2] ) sub_44D870((int)v5, 1); v15 = v5[1]; v16 = *v5 + 13 * v14; if ( v15 ) { *(_DWORD *)v15 = *(_DWORD *)v16; *(_DWORD *)(v15 + 4) = *(_DWORD *)(v16 + 4); *(_DWORD *)(v15 + 8) = *(_DWORD *)(v16 + 8); *(_BYTE *)(v15 + 12) = *(_BYTE *)(v16 + 12); } } v5[1] += 13; v4 = v22; v6 += 13; ++v21; } while ( v21 < (unsigned __int16)*a2 ); } result = sub_465130((_DWORD *)v4[124]); } return result; } //----- (0044AC20) -------------------------------------------------------- char __thiscall sub_44AC20(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax int v12; // eax int v13; // edi int v14; // eax volatile LONG *v15; // edi const CHAR *v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // edi int v19; // ST188_4 int v20; // edi volatile LONG *v21; // eax char v22; // ST184_1 int v23; // ST188_4 int v24; // ST18C_4 int v25; // ST190_4 const CHAR *v26; // eax volatile LONG *v27; // eax char v28; // ST184_1 int v29; // ST188_4 int v30; // ST18C_4 int v31; // ST190_4 const CHAR *v32; // eax volatile LONG *v33; // eax char v34; // ST184_1 int v35; // ST188_4 int v36; // ST18C_4 int v37; // ST190_4 const CHAR *v38; // eax volatile LONG *v39; // eax char v40; // ST184_1 int v41; // ST188_4 int v42; // ST18C_4 int v43; // ST190_4 const CHAR *v44; // eax _DWORD *v45; // edi int *v46; // edi int v47; // edi volatile LONG **v48; // eax int v49; // ST194_4 char *v50; // eax volatile LONG **v51; // eax volatile LONG **v52; // eax volatile LONG *v53; // eax unsigned int v54; // eax unsigned int v55; // edx int v56; // ecx _DWORD *v57; // eax _DWORD *v58; // ecx volatile LONG **v59; // eax char v60; // ST184_1 int v61; // ST188_4 int v62; // ST18C_4 int v63; // ST190_4 const CHAR *v64; // eax unsigned int v65; // ecx unsigned int v66; // edx int v67; // eax _DWORD *v68; // ecx _DWORD *v69; // eax volatile LONG **v70; // eax char v71; // ST184_1 int v72; // ST188_4 int v73; // ST18C_4 int v74; // ST190_4 const CHAR *v75; // eax unsigned int v76; // ecx unsigned int v77; // edx int v78; // eax _DWORD *v79; // ecx _DWORD *v80; // eax volatile LONG **v81; // eax char v82; // ST184_1 int v83; // ST188_4 int v84; // ST18C_4 int v85; // ST190_4 const CHAR *v86; // eax unsigned int v87; // ecx unsigned int v88; // edx int v89; // eax _DWORD *v90; // ecx _DWORD *v91; // eax volatile LONG **v92; // eax char v93; // ST184_1 int v94; // ST188_4 int v95; // ST18C_4 int v96; // ST190_4 const CHAR *v97; // eax unsigned int v98; // eax unsigned int v99; // edx int v100; // ecx _DWORD *v101; // eax _DWORD *v102; // ecx volatile LONG **v103; // eax volatile LONG *v104; // edi void (__thiscall *v105)(volatile LONG *, _DWORD); // edx unsigned int v106; // ecx unsigned int v107; // edx int v108; // eax _DWORD *v109; // ecx _DWORD *v110; // eax _DWORD *v111; // eax int v112; // ecx int v113; // eax volatile LONG **v114; // edx int v115; // eax volatile LONG *v116; // eax unsigned int v117; // eax unsigned int v118; // edx int v119; // ecx _DWORD *v120; // eax _DWORD *v121; // ecx volatile LONG **v122; // eax int v123; // edx int v124; // eax volatile LONG **v125; // edx int v126; // eax volatile LONG *v127; // eax unsigned int v128; // eax unsigned int v129; // edx int v130; // ecx _DWORD *v131; // eax _DWORD *v132; // ecx volatile LONG **v133; // eax int v134; // edx int v135; // eax volatile LONG **v136; // edx int v137; // eax volatile LONG *v138; // eax unsigned int v139; // eax unsigned int v140; // edx int v141; // ecx _DWORD *v142; // eax _DWORD *v143; // ecx volatile LONG **v144; // eax int v145; // edx int v146; // eax volatile LONG **v147; // edx int v148; // eax volatile LONG *v149; // eax unsigned int v150; // eax unsigned int v151; // edx int v152; // ecx _DWORD *v153; // eax _DWORD *v154; // ecx volatile LONG **v155; // eax int v156; // edx int v157; // eax volatile LONG **v158; // edx volatile LONG *v159; // ST190_4 volatile LONG *v160; // eax volatile LONG *v161; // eax unsigned int v162; // eax unsigned int v163; // edx int v164; // ecx _DWORD *v165; // eax _DWORD *v166; // ecx volatile LONG **v167; // eax int v168; // edx int v169; // eax volatile LONG **v170; // edx volatile LONG *v171; // ST190_4 volatile LONG *v172; // eax volatile LONG *v173; // eax unsigned int v174; // eax unsigned int v175; // edx int v176; // ecx _DWORD *v177; // eax _DWORD *v178; // ecx volatile LONG **v179; // eax int v180; // edx int v181; // eax volatile LONG **v182; // edx int v183; // eax volatile LONG *v184; // eax volatile LONG v185; // edx const CHAR *v186; // eax unsigned int v187; // eax unsigned int v188; // edx int v189; // ecx _DWORD *v190; // eax _DWORD *v191; // ecx volatile LONG **v192; // eax int v193; // edx int v194; // eax volatile LONG **v195; // edx volatile LONG *v196; // ST190_4 volatile LONG *v197; // eax volatile LONG *v198; // eax unsigned int v199; // eax unsigned int v200; // edx int v201; // ecx _DWORD *v202; // eax _DWORD *v203; // ecx volatile LONG **v204; // eax int v205; // edx int v206; // eax volatile LONG **v207; // edx volatile LONG *v208; // ST190_4 volatile LONG *v209; // eax volatile LONG *v210; // eax unsigned int v211; // eax unsigned int v212; // edx int v213; // ecx _DWORD *v214; // eax _DWORD *v215; // ecx volatile LONG **v216; // eax int v217; // edx int v218; // eax volatile LONG **v219; // edx int v220; // eax volatile LONG *v221; // eax volatile LONG v222; // edx const CHAR *v223; // eax unsigned int v224; // eax unsigned int v225; // edx int v226; // ecx _DWORD *v227; // eax _DWORD *v228; // ecx volatile LONG **v229; // eax int v230; // edx int v231; // eax volatile LONG **v232; // edx volatile LONG *v233; // ST190_4 volatile LONG *v234; // eax volatile LONG *v235; // eax unsigned int v236; // eax unsigned int v237; // edx int v238; // ecx _DWORD *v239; // eax _DWORD *v240; // ecx volatile LONG **v241; // eax int v242; // edx int v243; // eax volatile LONG **v244; // edx volatile LONG *v245; // ST190_4 volatile LONG *v246; // eax volatile LONG *v247; // eax unsigned int v248; // eax unsigned int v249; // edx int v250; // ecx _DWORD *v251; // eax _DWORD *v252; // ecx volatile LONG **v253; // eax int v254; // edx int v255; // eax volatile LONG **v256; // edx int v257; // eax volatile LONG *v258; // eax volatile LONG v259; // edx const CHAR *v260; // eax unsigned int v261; // eax unsigned int v262; // edx int v263; // ecx _DWORD *v264; // eax _DWORD *v265; // ecx volatile LONG **v266; // eax int v267; // edx int v268; // eax volatile LONG **v269; // edx volatile LONG *v270; // ST190_4 volatile LONG *v271; // eax volatile LONG *v272; // eax unsigned int v273; // eax unsigned int v274; // edx int v275; // ecx _DWORD *v276; // eax _DWORD *v277; // ecx volatile LONG **v278; // eax int v279; // edx int v280; // eax volatile LONG **v281; // edx volatile LONG *v282; // ST190_4 volatile LONG *v283; // eax volatile LONG *v284; // eax unsigned int v285; // eax unsigned int v286; // edx int v287; // ecx _DWORD *v288; // eax _DWORD *v289; // ecx volatile LONG **v290; // eax int v291; // edx int v292; // eax volatile LONG **v293; // edx int v294; // eax volatile LONG *v295; // eax volatile LONG v296; // edx const CHAR *v297; // eax unsigned int v298; // eax unsigned int v299; // edx int v300; // ecx _DWORD *v301; // eax _DWORD *v302; // ecx volatile LONG **v303; // eax int v304; // edx int v305; // eax volatile LONG **v306; // edx volatile LONG *v307; // ST190_4 volatile LONG *v308; // eax volatile LONG *v309; // eax unsigned int v310; // eax unsigned int v311; // edx int v312; // ecx _DWORD *v313; // eax _DWORD *v314; // ecx volatile LONG **v315; // eax int v316; // edx int v317; // eax volatile LONG **v318; // edx volatile LONG *v319; // ST190_4 volatile LONG *v320; // eax volatile LONG *v321; // eax unsigned int v322; // eax unsigned int v323; // edx int v324; // ecx _DWORD *v325; // eax _DWORD *v326; // ecx volatile LONG **v327; // eax volatile LONG *v328; // eax unsigned int v329; // eax unsigned int v330; // ecx signed int v331; // edx int v332; // ecx signed int v333; // edx int v334; // edx int v335; // eax unsigned int v336; // ecx char *v337; // ecx _DWORD *v338; // eax volatile LONG **v339; // eax volatile LONG *v340; // eax volatile LONG **v341; // eax int v342; // edi char *v343; // eax int v344; // eax volatile LONG *v345; // edx volatile LONG *v346; // ST190_4 volatile LONG *v347; // eax volatile LONG *v348; // eax volatile LONG **v349; // eax int v350; // edi char *v351; // eax int v352; // eax volatile LONG *v353; // edx volatile LONG *v354; // ST190_4 volatile LONG *v355; // eax volatile LONG *v356; // eax int v357; // edi char *v358; // eax volatile LONG *v359; // eax char v360; // ST184_1 int v361; // ST188_4 int v362; // ST18C_4 int v363; // ST190_4 const CHAR *v364; // eax volatile LONG *v365; // eax void *v366; // ecx int v367; // edi _DWORD *v368; // edi int *v369; // edi _DWORD *v370; // edi volatile LONG *v371; // eax volatile LONG *v372; // edi volatile LONG **v373; // eax volatile LONG *v374; // eax volatile LONG **v375; // edi void **v376; // eax void **v377; // eax void **v378; // eax void **v379; // eax void **v380; // eax void **v381; // eax int v382; // eax _DWORD *v383; // edi signed int v384; // esi void (__thiscall ***v385)(_DWORD, signed int); // esi void *v386; // [esp+1A8h] [ebp-8Ch] void *v387; // [esp+1ACh] [ebp-88h] int v388; // [esp+1B0h] [ebp-84h] char v389; // [esp+1B4h] [ebp-80h] char v390; // [esp+1B8h] [ebp-7Ch] int v391; // [esp+1BCh] [ebp-78h] int v392; // [esp+1C0h] [ebp-74h] int v393; // [esp+1C4h] [ebp-70h] int v394; // [esp+1C8h] [ebp-6Ch] _DWORD *v395; // [esp+1CCh] [ebp-68h] int v396[5]; // [esp+1D0h] [ebp-64h] float *v397; // [esp+1E4h] [ebp-50h] int v398; // [esp+1E8h] [ebp-4Ch] volatile LONG *v399; // [esp+1ECh] [ebp-48h] int v400; // [esp+1F0h] [ebp-44h] volatile LONG **v401; // [esp+1F4h] [ebp-40h] int v402; // [esp+1F8h] [ebp-3Ch] int v403; // [esp+1FCh] [ebp-38h] volatile LONG *v404; // [esp+200h] [ebp-34h] volatile LONG *v405; // [esp+204h] [ebp-30h] void *v406; // [esp+208h] [ebp-2Ch] int v407; // [esp+218h] [ebp-1Ch] unsigned int v408; // [esp+21Ch] [ebp-18h] int v409; // [esp+230h] [ebp-4h] v2 = (int)this; v400 = 0; v3 = dword_BA6BA0; v409 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\IDRankingWin.nif"); sub_8F66B0(v4, (int)&v400, v3); if ( !v400 ) return 0; v5 = sub_8FB140(v400, (int)"Frame", (int)&v402, (int)&v403, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"IDRankingWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v400; v409 = -1; if ( v400 && !InterlockedDecrement((volatile LONG *)(v400 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v403; v9 = v402; v398 = v403; sub_456260(v396); LOBYTE(v409) = 1; sub_455FF0(v396, v2); sub_456000(v396, v9, v8); sub_456380(v396, v400); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v400, (int)"Theme", (int)&v402, (int)&v403, v10); else v11 = sub_8FB140(v400, (int)"Theme", (int)&v402, (int)&v403, 0); sub_8F3EB0(v402 - v9, v403 - v398, (int)v11, v2, 0, 0); v399 = (volatile LONG *)sub_43D0D0(0x1Du); sub_456820(v396, (int)"Panel01", 0); sub_456820(v396, (int)"Panel02", 0); v404 = sub_456820(v396, (int)"Panel03", 0); sub_5B3CF0((_DWORD *)(v2 + 512), &v404); v12 = *sub_8FB140(v400, (int)"WinTitle", (int)&v402, (int)&v403, 0)[9]; v13 = *(_DWORD *)(v12 + 24); v404 = *(volatile LONG **)(v12 + 20); v14 = sub_421050(7); v15 = sub_8F4A20(v402 - v9, v403 - v398, (int)v404, v13, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); v404 = (volatile LONG *)(*v15 + 472); v16 = sub_4090F0(1133477527); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v404)(v15, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 256))(v15, 1); sub_4563D0(v396, 15, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, 0); sub_4563D0(v396, 16, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v17 = sub_456980( v396, (int)"BottomRank", (int)&unk_9B0697, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 1, 0, 0); *(_DWORD *)(v2 + 376) = v17; v404 = v17; sub_5B3CF0((_DWORD *)(v2 + 512), &v404); v18 = sub_8FB140(v400, (int)"Tab01_Off", (int)&v402, (int)&v403, 0); sub_8FB650(v18, v400, (int)"Tab01_On"); v19 = (int)v18; v20 = v398; v21 = sub_465940(v402 - v9, v403 - v398, v19, v2, 11, 0); *(_DWORD *)(v2 + 380) = v21; *((_BYTE *)v21 + 380) = 1; v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_4090F0(-1819237176); sub_456040(*(_DWORD *)(v2 + 380), (int)v26, v22, v23, v24, v25, 5); v405 = (volatile LONG *)sub_8FB140(v400, (int)"Tab02_Off", (int)&v402, (int)&v403, 0); sub_8FB650(v405, v400, (int)"Tab02_On"); v27 = sub_465940(v402 - v9, v403 - v20, (int)v405, v2, 12, 0); *(_DWORD *)(v2 + 384) = v27; *((_BYTE *)v27 + 380) = 0; v28 = dword_AA8C68; v29 = dword_AA8C6C; v30 = dword_AA8C70; v31 = dword_AA8C74; v32 = sub_4090F0(775171171); sub_456040(*(_DWORD *)(v2 + 384), (int)v32, v28, v29, v30, v31, 5); v405 = (volatile LONG *)sub_8FB140(v400, (int)"Tab03_Off", (int)&v402, (int)&v403, 0); sub_8FB650(v405, v400, (int)"Tab03_On"); v33 = sub_465940(v402 - v9, v403 - v20, (int)v405, v2, 13, 0); *(_DWORD *)(v2 + 388) = v33; *((_BYTE *)v33 + 380) = 0; v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_4090F0(-1635490939); sub_456040(*(_DWORD *)(v2 + 388), (int)v38, v34, v35, v36, v37, 5); v405 = (volatile LONG *)sub_8FB140(v400, (int)"Tab04_Off", (int)&v402, (int)&v403, 0); sub_8FB650(v405, v400, (int)"Tab04_On"); v39 = sub_465940(v402 - v9, v403 - v20, (int)v405, v2, 14, 0); *(_DWORD *)(v2 + 392) = v39; *((_BYTE *)v39 + 380) = 0; v40 = dword_AA8C68; v41 = dword_AA8C6C; v42 = dword_AA8C70; v43 = dword_AA8C74; v44 = sub_4090F0(-383841481); sub_456040(*(_DWORD *)(v2 + 392), (int)v44, v40, v41, v42, v43, 5); v386 = 0; v387 = 0; v388 = 0; v393 = 0; v394 = 0; LOBYTE(v409) = 2; v390 = 0; v391 = 0; v392 = 0; v45 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v386, 1); *v45 = 1; v45[1] = v400; v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarNor", 0xCu); v46 = v45 + 18; LOBYTE(v409) = 3; sub_40B060(v46, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarClick", 0xEu); LOBYTE(v409) = 4; sub_40B060(v46, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarOver", 0xDu); LOBYTE(v409) = 5; sub_40B060(v46, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v401 = 0; do { v47 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v386, 2); v48 = (volatile LONG **)((char *)v401 + 1); v49 = (int)v401 + 1; *(_DWORD *)v47 = 2; v401 = v48; v50 = sub_7549E0("Column%.2d", v49); v408 = 15; v407 = 0; LOBYTE(v406) = 0; v404 = (volatile LONG *)(v50 + 1); sub_4018E0(&v406, v50, strlen(v50)); LOBYTE(v409) = 6; sub_442C70((int *)(v47 + 72), &v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v51 = v401; *(_DWORD *)(v47 + 4) = v400; *(_BYTE *)(v47 + 88) = 1; v401 = v51; } while ( (signed int)v51 < 4 ); sub_466680(&v386, 0); v52 = sub_8FB140(v400, (int)"SubText01", (int)&v402, (int)&v403, v399); v53 = sub_466330(v402 - v9, v403 - v398, (int)v52, *(float *)&v2, (int **)&v386, 0, 0); *(_DWORD *)(v2 + 368) = v53; sub_465130(v53); v54 = *(_DWORD *)(v2 + 516); v405 = *(volatile LONG **)(v2 + 368); if ( (unsigned int)&v405 >= v54 || (v55 = *(_DWORD *)(v2 + 512), v55 > (unsigned int)&v405) ) { if ( v54 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v59 = *(volatile LONG ***)(v2 + 516); if ( v59 ) *v59 = v405; } else { v56 = (signed int)((signed int)&v405 - v55) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v55) >> 2); if ( v54 == *(_DWORD *)(v2 + 520) ) { sub_5E2180(v2 + 512, 1); v56 = (int)v404; } v57 = *(_DWORD **)(v2 + 516); v58 = (_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v56); if ( v57 ) *v57 = *v58; } *(_DWORD *)(v2 + 516) += 4; v405 = sub_4563D0(v396, 10, (int)"Title01Nor", (int)"Title01Click", (int)"Title01Over", 0, 0); v60 = dword_AA8C68; v61 = dword_AA8C6C; v62 = dword_AA8C70; v63 = dword_AA8C74; v64 = sub_4090F0(-1500092535); sub_456040((int)v405, (int)v64, v60, v61, v62, v63, 5); v399 = v405; v65 = *(_DWORD *)(v2 + 516); if ( (unsigned int)&v399 >= v65 || (v66 = *(_DWORD *)(v2 + 512), v66 > (unsigned int)&v399) ) { if ( v65 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v70 = *(volatile LONG ***)(v2 + 516); if ( v70 ) *v70 = v405; } else { v67 = (signed int)((signed int)&v399 - v66) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v66) >> 2); if ( v65 == *(_DWORD *)(v2 + 520) ) { sub_5E2180(v2 + 512, 1); v67 = (int)v404; } v68 = (_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v67); v69 = *(_DWORD **)(v2 + 516); if ( v69 ) *v69 = *v68; } *(_DWORD *)(v2 + 516) += 4; v405 = sub_4563D0(v396, 10, (int)"Title02Nor", (int)"Title02Click", (int)"Title02Over", 0, 0); v71 = dword_AA8C68; v72 = dword_AA8C6C; v73 = dword_AA8C70; v74 = dword_AA8C74; v75 = sub_40C190(1319409301); sub_456040((int)v405, (int)v75, v71, v72, v73, v74, 5); v76 = *(_DWORD *)(v2 + 516); v399 = v405; if ( (unsigned int)&v399 >= v76 || (v77 = *(_DWORD *)(v2 + 512), v77 > (unsigned int)&v399) ) { if ( v76 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v81 = *(volatile LONG ***)(v2 + 516); if ( v81 ) *v81 = v405; } else { v78 = (signed int)((signed int)&v399 - v77) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v77) >> 2); if ( v76 == *(_DWORD *)(v2 + 520) ) { sub_5E2180(v2 + 512, 1); v78 = (int)v404; } v79 = (_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v78); v80 = *(_DWORD **)(v2 + 516); if ( v80 ) *v80 = *v79; } *(_DWORD *)(v2 + 516) += 4; v405 = sub_4563D0(v396, 10, (int)"Title03Nor", (int)"Title03Click", (int)"Title03Over", 0, 0); v82 = dword_AA8C68; v83 = dword_AA8C6C; v84 = dword_AA8C70; v85 = dword_AA8C74; v86 = sub_40C190(1247775651); sub_456040((int)v405, (int)v86, v82, v83, v84, v85, 5); v87 = *(_DWORD *)(v2 + 516); v399 = v405; if ( (unsigned int)&v399 >= v87 || (v88 = *(_DWORD *)(v2 + 512), v88 > (unsigned int)&v399) ) { if ( v87 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v92 = *(volatile LONG ***)(v2 + 516); if ( v92 ) *v92 = v405; } else { v89 = (signed int)((signed int)&v399 - v88) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v88) >> 2); if ( v87 == *(_DWORD *)(v2 + 520) ) { sub_5E2180(v2 + 512, 1); v89 = (int)v404; } v90 = (_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v89); v91 = *(_DWORD **)(v2 + 516); if ( v91 ) *v91 = *v90; } *(_DWORD *)(v2 + 516) += 4; v405 = sub_4563D0(v396, 10, (int)"Title04Nor", (int)"Title04Click", (int)"Title04Over", 0, 0); v93 = dword_AA8C68; v94 = dword_AA8C6C; v95 = dword_AA8C70; v96 = dword_AA8C74; v97 = sub_4090F0(-1819237176); *(_DWORD *)(v2 + 372) = sub_456040((int)v405, (int)v97, v93, v94, v95, v96, 5); v399 = v405; v98 = *(_DWORD *)(v2 + 516); if ( (unsigned int)&v399 >= v98 || (v99 = *(_DWORD *)(v2 + 512), v99 > (unsigned int)&v399) ) { if ( v98 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v103 = *(volatile LONG ***)(v2 + 516); if ( v103 ) *v103 = v405; } else { v100 = (signed int)((signed int)&v399 - v99) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v99) >> 2); if ( v98 == *(_DWORD *)(v2 + 520) ) { sub_5E2180(v2 + 512, 1); v100 = (int)v404; } v101 = *(_DWORD **)(v2 + 516); v102 = (_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v100); if ( v101 ) *v101 = *v102; } *(_DWORD *)(v2 + 516) += 4; v104 = sub_456820(v396, (int)"Object02", 0); v105 = *(void (__thiscall **)(volatile LONG *, _DWORD))(*v104 + 256); v404 = v104; v105(v104, 0); v106 = *(_DWORD *)(v2 + 532); v399 = v104; if ( (unsigned int)&v399 >= v106 || (v107 = *(_DWORD *)(v2 + 528), v107 > (unsigned int)&v399) ) { if ( v106 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v111 = *(_DWORD **)(v2 + 532); if ( v111 ) *v111 = v404; } else { v108 = (signed int)((signed int)&v399 - v107) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v107) >> 2); if ( v106 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v108 = (int)v404; } v109 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v108); v110 = *(_DWORD **)(v2 + 532); if ( v110 ) *v110 = *v109; } v112 = v400; *(_DWORD *)(v2 + 532) += 4; v113 = *sub_8FB140(v112, (int)"Title", (int)&v402, (int)&v403, 0)[9]; v114 = *(volatile LONG ***)(v113 + 20); v404 = *(volatile LONG **)(v113 + 24); v401 = v114; v115 = sub_421050(7); v116 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v115, v2, 0, 0); *(_DWORD *)(v2 + 396) = v116; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v116 + 488))(v116, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 256))(0); v117 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 396); if ( (unsigned int)&v405 >= v117 || (v118 = *(_DWORD *)(v2 + 528), v118 > (unsigned int)&v405) ) { if ( v117 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v122 = *(volatile LONG ***)(v2 + 532); if ( v122 ) *v122 = v405; } else { v119 = (signed int)((signed int)&v405 - v118) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v118) >> 2); if ( v117 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v119 = (int)v404; } v120 = *(_DWORD **)(v2 + 532); v121 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v119); if ( v120 ) *v120 = *v121; } v123 = v400; *(_DWORD *)(v2 + 532) += 4; v124 = *sub_8FB140(v123, (int)"Name", (int)&v402, (int)&v403, 0)[9]; v125 = *(volatile LONG ***)(v124 + 20); v404 = *(volatile LONG **)(v124 + 24); v401 = v125; v126 = sub_421050(7); v127 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v126, v2, 0, 0); *(_DWORD *)(v2 + 400) = v127; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v127 + 488))(v127, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 256))(0); v128 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 400); if ( (unsigned int)&v405 >= v128 || (v129 = *(_DWORD *)(v2 + 528), v129 > (unsigned int)&v405) ) { if ( v128 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v133 = *(volatile LONG ***)(v2 + 532); if ( v133 ) *v133 = v405; } else { v130 = (signed int)((signed int)&v405 - v129) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v129) >> 2); if ( v128 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v130 = (int)v404; } v131 = *(_DWORD **)(v2 + 532); v132 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v130); if ( v131 ) *v131 = *v132; } v134 = v400; *(_DWORD *)(v2 + 532) += 4; v135 = *sub_8FB140(v134, (int)"Level", (int)&v402, (int)&v403, 0)[9]; v136 = *(volatile LONG ***)(v135 + 20); v404 = *(volatile LONG **)(v135 + 24); v401 = v136; v137 = sub_421050(7); v138 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v137, v2, 0, 0); *(_DWORD *)(v2 + 404) = v138; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v138 + 488))(v138, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 256))(0); v139 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 404); if ( (unsigned int)&v405 >= v139 || (v140 = *(_DWORD *)(v2 + 528), v140 > (unsigned int)&v405) ) { if ( v139 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v144 = *(volatile LONG ***)(v2 + 532); if ( v144 ) *v144 = v405; } else { v141 = (signed int)((signed int)&v405 - v140) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v140) >> 2); if ( v139 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v141 = (int)v404; } v142 = *(_DWORD **)(v2 + 532); v143 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v141); if ( v142 ) *v142 = *v143; } v145 = v400; *(_DWORD *)(v2 + 532) += 4; v146 = *sub_8FB140(v145, (int)"Job", (int)&v402, (int)&v403, 0)[9]; v147 = *(volatile LONG ***)(v146 + 20); v404 = *(volatile LONG **)(v146 + 24); v401 = v147; v148 = sub_421050(7); v149 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v148, v2, 0, 0); *(_DWORD *)(v2 + 408) = v149; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v149 + 488))(v149, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 256))(0); v150 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 408); if ( (unsigned int)&v405 >= v150 || (v151 = *(_DWORD *)(v2 + 528), v151 > (unsigned int)&v405) ) { if ( v150 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v155 = *(volatile LONG ***)(v2 + 532); if ( v155 ) *v155 = v405; } else { v152 = (signed int)((signed int)&v405 - v151) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v151) >> 2); if ( v150 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v152 = (int)v404; } v153 = *(_DWORD **)(v2 + 532); v154 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v152); if ( v153 ) *v153 = *v154; } v156 = v400; *(_DWORD *)(v2 + 532) += 4; v157 = *sub_8FB140(v156, (int)"PastRecord", (int)&v402, (int)&v403, 0)[9]; v158 = *(volatile LONG ***)(v157 + 20); v159 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v157 + 24); v401 = v158; v160 = (volatile LONG *)sub_421050(7); v161 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v160, (_DWORD *)v2, 0, 0, 0, 1, v159, (volatile LONG *)7); *(_DWORD *)(v2 + 444) = v161; (*(void (__thiscall **)(volatile LONG *, signed int))(*v161 + 488))(v161, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 444) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 444) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 444) + 256))(0); v162 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 444); if ( (unsigned int)&v405 >= v162 || (v163 = *(_DWORD *)(v2 + 528), v163 > (unsigned int)&v405) ) { if ( v162 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v167 = *(volatile LONG ***)(v2 + 532); if ( v167 ) *v167 = v405; } else { v164 = (signed int)((signed int)&v405 - v163) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v163) >> 2); if ( v162 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v164 = (int)v404; } v165 = *(_DWORD **)(v2 + 532); v166 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v164); if ( v165 ) *v165 = *v166; } v168 = v400; *(_DWORD *)(v2 + 532) += 4; v169 = *sub_8FB140(v168, (int)"NewRecord", (int)&v402, (int)&v403, 0)[9]; v170 = *(volatile LONG ***)(v169 + 20); v171 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v169 + 24); v401 = v170; v172 = (volatile LONG *)sub_421050(7); v173 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v172, (_DWORD *)v2, 0, 0, 0, 1, v171, (volatile LONG *)7); *(_DWORD *)(v2 + 448) = v173; (*(void (__thiscall **)(volatile LONG *, signed int))(*v173 + 488))(v173, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 256))(0); v174 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 448); if ( (unsigned int)&v405 >= v174 || (v175 = *(_DWORD *)(v2 + 528), v175 > (unsigned int)&v405) ) { if ( v174 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v179 = *(volatile LONG ***)(v2 + 532); if ( v179 ) *v179 = v405; } else { v176 = (signed int)((signed int)&v405 - v175) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v175) >> 2); if ( v174 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v176 = (int)v404; } v177 = *(_DWORD **)(v2 + 532); v178 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v176); if ( v177 ) *v177 = *v178; } v180 = v400; *(_DWORD *)(v2 + 532) += 4; v181 = *sub_8FB140(v180, (int)"Damage", (int)&v402, (int)&v403, 0)[9]; v182 = *(volatile LONG ***)(v181 + 20); v404 = *(volatile LONG **)(v181 + 24); v401 = v182; v183 = sub_421050(7); v184 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v183, v2, 0, 0); v185 = *v184; v405 = v184; (*(void (__thiscall **)(volatile LONG *, signed int))(v185 + 488))(v184, 5); v404 = (volatile LONG *)(*v405 + 472); v186 = sub_4090F0(-1819237176); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v404)(v405, v186); (*(void (__stdcall **)(_DWORD))(*v405 + 240))(0); (*(void (__stdcall **)(_DWORD))(*v405 + 256))(0); v187 = *(_DWORD *)(v2 + 532); v399 = v405; if ( (unsigned int)&v399 >= v187 || (v188 = *(_DWORD *)(v2 + 528), v188 > (unsigned int)&v399) ) { if ( v187 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v192 = *(volatile LONG ***)(v2 + 532); if ( v192 ) *v192 = v405; } else { v189 = (signed int)((signed int)&v399 - v188) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v188) >> 2); if ( v187 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v189 = (int)v404; } v190 = *(_DWORD **)(v2 + 532); v191 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v189); if ( v190 ) *v190 = *v191; } v193 = v400; *(_DWORD *)(v2 + 532) += 4; v194 = *sub_8FB140(v193, (int)"DamagePastVal", (int)&v402, (int)&v403, 0)[9]; v195 = *(volatile LONG ***)(v194 + 20); v196 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v194 + 24); v401 = v195; v197 = (volatile LONG *)sub_421050(7); v198 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v197, (_DWORD *)v2, 0, 0, 0, 1, v196, (volatile LONG *)7); *(_DWORD *)(v2 + 412) = v198; (*(void (__thiscall **)(volatile LONG *, signed int))(*v198 + 488))(v198, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 256))(0); v199 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 412); if ( (unsigned int)&v405 >= v199 || (v200 = *(_DWORD *)(v2 + 528), v200 > (unsigned int)&v405) ) { if ( v199 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v204 = *(volatile LONG ***)(v2 + 532); if ( v204 ) *v204 = v405; } else { v201 = (signed int)((signed int)&v405 - v200) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v200) >> 2); if ( v199 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v201 = (int)v404; } v202 = *(_DWORD **)(v2 + 532); v203 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v201); if ( v202 ) *v202 = *v203; } v205 = v400; *(_DWORD *)(v2 + 532) += 4; v206 = *sub_8FB140(v205, (int)"DamageNewVal", (int)&v402, (int)&v403, 0)[9]; v207 = *(volatile LONG ***)(v206 + 20); v208 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v206 + 24); v401 = v207; v209 = (volatile LONG *)sub_421050(7); v210 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v209, (_DWORD *)v2, 0, 0, 0, 1, v208, (volatile LONG *)7); *(_DWORD *)(v2 + 428) = v210; (*(void (__thiscall **)(volatile LONG *, signed int))(*v210 + 488))(v210, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 428) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 428) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 428) + 256))(0); v211 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 428); if ( (unsigned int)&v405 >= v211 || (v212 = *(_DWORD *)(v2 + 528), v212 > (unsigned int)&v405) ) { if ( v211 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v216 = *(volatile LONG ***)(v2 + 532); if ( v216 ) *v216 = v405; } else { v213 = (signed int)((signed int)&v405 - v212) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v212) >> 2); if ( v211 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v213 = (int)v404; } v214 = *(_DWORD **)(v2 + 532); v215 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v213); if ( v214 ) *v214 = *v215; } v217 = v400; *(_DWORD *)(v2 + 532) += 4; v218 = *sub_8FB140(v217, (int)"DamageReceive", (int)&v402, (int)&v403, 0)[9]; v219 = *(volatile LONG ***)(v218 + 20); v404 = *(volatile LONG **)(v218 + 24); v401 = v219; v220 = sub_421050(7); v221 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v220, v2, 0, 0); v222 = *v221; v405 = v221; (*(void (__thiscall **)(volatile LONG *, signed int))(v222 + 488))(v221, 5); v404 = (volatile LONG *)(*v405 + 472); v223 = sub_4090F0(775171171); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v404)(v405, v223); (*(void (__stdcall **)(_DWORD))(*v405 + 240))(0); (*(void (__stdcall **)(_DWORD))(*v405 + 256))(0); v224 = *(_DWORD *)(v2 + 532); v399 = v405; if ( (unsigned int)&v399 >= v224 || (v225 = *(_DWORD *)(v2 + 528), v225 > (unsigned int)&v399) ) { if ( v224 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v229 = *(volatile LONG ***)(v2 + 532); if ( v229 ) *v229 = v405; } else { v226 = (signed int)((signed int)&v399 - v225) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v225) >> 2); if ( v224 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v226 = (int)v404; } v227 = *(_DWORD **)(v2 + 532); v228 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v226); if ( v227 ) *v227 = *v228; } v230 = v400; *(_DWORD *)(v2 + 532) += 4; v231 = *sub_8FB140(v230, (int)"DamageReceivePastVal", (int)&v402, (int)&v403, 0)[9]; v232 = *(volatile LONG ***)(v231 + 20); v233 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v231 + 24); v401 = v232; v234 = (volatile LONG *)sub_421050(7); v235 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v234, (_DWORD *)v2, 0, 0, 0, 1, v233, (volatile LONG *)7); *(_DWORD *)(v2 + 416) = v235; (*(void (__thiscall **)(volatile LONG *, signed int))(*v235 + 488))(v235, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); v236 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 416); if ( (unsigned int)&v405 >= v236 || (v237 = *(_DWORD *)(v2 + 528), v237 > (unsigned int)&v405) ) { if ( v236 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v241 = *(volatile LONG ***)(v2 + 532); if ( v241 ) *v241 = v405; } else { v238 = (signed int)((signed int)&v405 - v237) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v237) >> 2); if ( v236 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v238 = (int)v404; } v239 = *(_DWORD **)(v2 + 532); v240 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v238); if ( v239 ) *v239 = *v240; } v242 = v400; *(_DWORD *)(v2 + 532) += 4; v243 = *sub_8FB140(v242, (int)"DamageReceiveNewVal", (int)&v402, (int)&v403, 0)[9]; v244 = *(volatile LONG ***)(v243 + 20); v245 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v243 + 24); v401 = v244; v246 = (volatile LONG *)sub_421050(7); v247 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v246, (_DWORD *)v2, 0, 0, 0, 1, v245, (volatile LONG *)7); *(_DWORD *)(v2 + 432) = v247; (*(void (__thiscall **)(volatile LONG *, signed int))(*v247 + 488))(v247, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 432) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 432) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 432) + 256))(0); v248 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 432); if ( (unsigned int)&v405 >= v248 || (v249 = *(_DWORD *)(v2 + 528), v249 > (unsigned int)&v405) ) { if ( v248 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v253 = *(volatile LONG ***)(v2 + 532); if ( v253 ) *v253 = v405; } else { v250 = (signed int)((signed int)&v405 - v249) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v249) >> 2); if ( v248 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v250 = (int)v404; } v251 = *(_DWORD **)(v2 + 532); v252 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v250); if ( v251 ) *v251 = *v252; } v254 = v400; *(_DWORD *)(v2 + 532) += 4; v255 = *sub_8FB140(v254, (int)"Heal", (int)&v402, (int)&v403, 0)[9]; v256 = *(volatile LONG ***)(v255 + 20); v404 = *(volatile LONG **)(v255 + 24); v401 = v256; v257 = sub_421050(7); v258 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v257, v2, 0, 0); v259 = *v258; v405 = v258; (*(void (__thiscall **)(volatile LONG *, signed int))(v259 + 488))(v258, 5); v404 = (volatile LONG *)(*v405 + 472); v260 = sub_4090F0(-1635490939); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v404)(v405, v260); (*(void (__stdcall **)(_DWORD))(*v405 + 240))(0); (*(void (__stdcall **)(_DWORD))(*v405 + 256))(0); v261 = *(_DWORD *)(v2 + 532); v399 = v405; if ( (unsigned int)&v399 >= v261 || (v262 = *(_DWORD *)(v2 + 528), v262 > (unsigned int)&v399) ) { if ( v261 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v266 = *(volatile LONG ***)(v2 + 532); if ( v266 ) *v266 = v405; } else { v263 = (signed int)((signed int)&v399 - v262) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v262) >> 2); if ( v261 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v263 = (int)v404; } v264 = *(_DWORD **)(v2 + 532); v265 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v263); if ( v264 ) *v264 = *v265; } v267 = v400; *(_DWORD *)(v2 + 532) += 4; v268 = *sub_8FB140(v267, (int)"HealPastVal", (int)&v402, (int)&v403, 0)[9]; v269 = *(volatile LONG ***)(v268 + 20); v270 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v268 + 24); v401 = v269; v271 = (volatile LONG *)sub_421050(7); v272 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v271, (_DWORD *)v2, 0, 0, 0, 1, v270, (volatile LONG *)7); *(_DWORD *)(v2 + 420) = v272; (*(void (__thiscall **)(volatile LONG *, signed int))(*v272 + 488))(v272, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 256))(0); v273 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 420); if ( (unsigned int)&v405 >= v273 || (v274 = *(_DWORD *)(v2 + 528), v274 > (unsigned int)&v405) ) { if ( v273 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v278 = *(volatile LONG ***)(v2 + 532); if ( v278 ) *v278 = v405; } else { v275 = (signed int)((signed int)&v405 - v274) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v274) >> 2); if ( v273 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v275 = (int)v404; } v276 = *(_DWORD **)(v2 + 532); v277 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v275); if ( v276 ) *v276 = *v277; } v279 = v400; *(_DWORD *)(v2 + 532) += 4; v280 = *sub_8FB140(v279, (int)"HealNewVal", (int)&v402, (int)&v403, 0)[9]; v281 = *(volatile LONG ***)(v280 + 20); v282 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v280 + 24); v401 = v281; v283 = (volatile LONG *)sub_421050(7); v284 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v283, (_DWORD *)v2, 0, 0, 0, 1, v282, (volatile LONG *)7); *(_DWORD *)(v2 + 436) = v284; (*(void (__thiscall **)(volatile LONG *, signed int))(*v284 + 488))(v284, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 436) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 436) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 436) + 256))(0); v285 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 436); if ( (unsigned int)&v405 >= v285 || (v286 = *(_DWORD *)(v2 + 528), v286 > (unsigned int)&v405) ) { if ( v285 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v290 = *(volatile LONG ***)(v2 + 532); if ( v290 ) *v290 = v405; } else { v287 = (signed int)((signed int)&v405 - v286) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v286) >> 2); if ( v285 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v287 = (int)v404; } v288 = *(_DWORD **)(v2 + 532); v289 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v287); if ( v288 ) *v288 = *v289; } v291 = v400; *(_DWORD *)(v2 + 532) += 4; v292 = *sub_8FB140(v291, (int)"ClearTime", (int)&v402, (int)&v403, 0)[9]; v293 = *(volatile LONG ***)(v292 + 20); v404 = *(volatile LONG **)(v292 + 24); v401 = v293; v294 = sub_421050(7); v295 = sub_8F4A20(v402 - v9, v403 - v398, (int)v401, (int)v404, v294, v2, 0, 0); v296 = *v295; v405 = v295; (*(void (__thiscall **)(volatile LONG *, signed int))(v296 + 488))(v295, 5); v404 = (volatile LONG *)(*v405 + 472); v297 = sub_4090F0(-203441363); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v404)(v405, v297); (*(void (__stdcall **)(_DWORD))(*v405 + 240))(0); (*(void (__stdcall **)(_DWORD))(*v405 + 256))(0); v298 = *(_DWORD *)(v2 + 532); v399 = v405; if ( (unsigned int)&v399 >= v298 || (v299 = *(_DWORD *)(v2 + 528), v299 > (unsigned int)&v399) ) { if ( v298 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v303 = *(volatile LONG ***)(v2 + 532); if ( v303 ) *v303 = v405; } else { v300 = (signed int)((signed int)&v399 - v299) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v399 - v299) >> 2); if ( v298 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v300 = (int)v404; } v301 = *(_DWORD **)(v2 + 532); v302 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v300); if ( v301 ) *v301 = *v302; } v304 = v400; *(_DWORD *)(v2 + 532) += 4; v305 = *sub_8FB140(v304, (int)"ClearTimePastVal", (int)&v402, (int)&v403, 0)[9]; v306 = *(volatile LONG ***)(v305 + 20); v307 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v305 + 24); v401 = v306; v308 = (volatile LONG *)sub_421050(7); v309 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v308, (_DWORD *)v2, 0, 0, 0, 1, v307, (volatile LONG *)7); *(_DWORD *)(v2 + 424) = v309; (*(void (__thiscall **)(volatile LONG *, signed int))(*v309 + 488))(v309, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); v310 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 424); if ( (unsigned int)&v405 >= v310 || (v311 = *(_DWORD *)(v2 + 528), v311 > (unsigned int)&v405) ) { if ( v310 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v315 = *(volatile LONG ***)(v2 + 532); if ( v315 ) *v315 = v405; } else { v312 = (signed int)((signed int)&v405 - v311) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v311) >> 2); if ( v310 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v312 = (int)v404; } v313 = *(_DWORD **)(v2 + 532); v314 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v312); if ( v313 ) *v313 = *v314; } v316 = v400; *(_DWORD *)(v2 + 532) += 4; v317 = *sub_8FB140(v316, (int)"ClearTimeNewVal", (int)&v402, (int)&v403, 0)[9]; v318 = *(volatile LONG ***)(v317 + 20); v319 = (volatile LONG *)dword_AD01E8; v404 = *(volatile LONG **)(v317 + 24); v401 = v318; v320 = (volatile LONG *)sub_421050(7); v321 = sub_90AEF0( v402 - v9, v403 - v398, (int)v401, (int)v404, v320, (_DWORD *)v2, 0, 0, 0, 1, v319, (volatile LONG *)7); *(_DWORD *)(v2 + 440) = v321; (*(void (__thiscall **)(volatile LONG *, signed int))(*v321 + 488))(v321, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 440) + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 440) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 440) + 256))(0); v322 = *(_DWORD *)(v2 + 532); v405 = *(volatile LONG **)(v2 + 440); if ( (unsigned int)&v405 >= v322 || (v323 = *(_DWORD *)(v2 + 528), v323 > (unsigned int)&v405) ) { if ( v322 == *(_DWORD *)(v2 + 536) ) sub_5E2180(v2 + 528, 1); v327 = *(volatile LONG ***)(v2 + 532); if ( v327 ) *v327 = v405; } else { v324 = (signed int)((signed int)&v405 - v323) >> 2; v404 = (volatile LONG *)((signed int)((signed int)&v405 - v323) >> 2); if ( v322 == *(_DWORD *)(v2 + 536) ) { sub_5E2180(v2 + 528, 1); v324 = (int)v404; } v325 = *(_DWORD **)(v2 + 532); v326 = (_DWORD *)(*(_DWORD *)(v2 + 528) + 4 * v324); if ( v325 ) *v325 = *v326; } *(_DWORD *)(v2 + 532) += 4; v399 = 0; v395 = (_DWORD *)(v2 + 476); v401 = (volatile LONG **)(v2 + 476); do { v328 = (volatile LONG *)sub_44A410((int)v399); *v401 = v328; v405 = v328; v329 = *(_DWORD *)(v2 + 516); if ( (unsigned int)&v405 >= v329 || (v330 = *(_DWORD *)(v2 + 512), v330 > (unsigned int)&v405) ) { if ( v329 == *(_DWORD *)(v2 + 520) ) sub_5E2180(v2 + 512, 1); v339 = *(volatile LONG ***)(v2 + 516); if ( v339 ) *v339 = v405; } else { v331 = (signed int)&v405 - v330; v332 = *(_DWORD *)(v2 + 520); v333 = v331 >> 2; v404 = (volatile LONG *)v333; if ( v329 == v332 ) { v334 = *(_DWORD *)(v2 + 512); v335 = (signed int)(v329 - v334) >> 2; JUMPOUT(v335, 1073741822, std::vector>::_Xlen); v336 = (v332 - v334) >> 2; v397 = (float *)(v335 + 1); if ( v335 + 1 > v336 ) { if ( 0x3FFFFFFF - (v336 >> 1) >= v336 ) v337 = (char *)((v336 >> 1) + v336); else v337 = 0; if ( v337 < (char *)v397 ) v337 = (char *)v397; sub_74E360((const void **)(v2 + 512), v337); } v333 = (signed int)v404; } v338 = *(_DWORD **)(v2 + 516); if ( v338 ) *v338 = *(_DWORD *)(*(_DWORD *)(v2 + 512) + 4 * v333); } v340 = v399; *(_DWORD *)(v2 + 516) += 4; ++v401; v399 = (volatile LONG *)((char *)v340 + 1); } while ( (signed int)v340 + 1 < 3 ); v341 = 0; v342 = v2 + 452; do { v397 = (float *)v400; v401 = (volatile LONG **)((char *)v341 + 1); v343 = sub_7549E0("TopRankName%.2d", (char *)v341 + 1); v344 = *sub_8FB140((int)v397, (int)v343, (int)&v402, (int)&v403, 0)[9]; v345 = *(volatile LONG **)(v344 + 20); v346 = (volatile LONG *)dword_AD01E8; v397 = *(float **)(v344 + 24); v404 = v345; v347 = (volatile LONG *)sub_421050(7); v348 = sub_90AEF0( v402 - v9, v403 - v398, (int)v404, (int)v397, v347, (_DWORD *)v2, 0, 0, 0, 1, v346, (volatile LONG *)7); *(_DWORD *)v342 = v348; (*(void (__thiscall **)(volatile LONG *, signed int))(*v348 + 488))(v348, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v342 + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v342 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v342 + 256))(0); v397 = *(float **)v342; sub_5B3CF0((_DWORD *)(v2 + 512), &v397); v341 = v401; v342 += 4; } while ( (signed int)v401 < 3 ); v349 = 0; v350 = v2 + 464; do { v397 = (float *)v400; v401 = (volatile LONG **)((char *)v349 + 1); v351 = sub_7549E0("TopDamage%.2d", (char *)v349 + 1); v352 = *sub_8FB140((int)v397, (int)v351, (int)&v402, (int)&v403, 0)[9]; v353 = *(volatile LONG **)(v352 + 20); v354 = (volatile LONG *)dword_AD01E8; v397 = *(float **)(v352 + 24); v404 = v353; v355 = (volatile LONG *)sub_421050(7); v356 = sub_90AEF0( v402 - v9, v403 - v398, (int)v404, (int)v397, v355, (_DWORD *)v2, 0, 0, 0, 1, v354, (volatile LONG *)7); *(_DWORD *)v350 = v356; (*(void (__thiscall **)(volatile LONG *, signed int))(*v356 + 488))(v356, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v350 + 472))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v350 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v350 + 256))(0); v397 = *(float **)v350; sub_5B3CF0((_DWORD *)(v2 + 512), &v397); v349 = v401; v350 += 4; } while ( (signed int)v401 < 3 ); v401 = 0; v357 = v2 + 504; do { v358 = sub_7549E0("Panel%02d", (char *)v401 + 7); v359 = sub_456820(v396, (int)v358, 0); *(_DWORD *)v357 = v359; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v359 + 256))(v359, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v357 + 240))(0); v397 = *(float **)v357; sub_5B3CF0((_DWORD *)(v2 + 544), &v397); v357 += 4; v401 = (volatile LONG **)((char *)v401 + 1); } while ( (signed int)v401 < 2 ); *(_DWORD *)(v2 + 488) = sub_4563D0(v396, 17, (int)"BtnNor", (int)"BtnClick", (int)"BtnOver", 0, 0); v360 = dword_AA8C68; v361 = dword_AA8C6C; v362 = dword_AA8C70; v363 = dword_AA8C74; v364 = sub_4090F0(-1685080359); v365 = sub_456040(*(_DWORD *)(v2 + 488), (int)v364, v360, v361, v362, v363, 5); v366 = v386; *(_DWORD *)(v2 + 492) = v365; if ( v366 != v387 ) { v367 = ((int (__cdecl *)(void *, void *, void *, _DWORD *))loc_40AC30)(v387, v387, v366, v395); ((void (__cdecl *)(int, void *, char *, _DWORD *))loc_40ACF0)(v367, v387, &v389, v395); v387 = (void *)v367; } v390 = 0; v391 = 0; v392 = 0; v368 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v386, 1); *v368 = 1; v368[1] = v400; v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarNor01", 0xEu); v369 = v368 + 18; LOBYTE(v409) = 7; sub_40B060(v369, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarClick01", 0x10u); LOBYTE(v409) = 8; sub_40B060(v369, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "ColumnBarOver01", 0xFu); LOBYTE(v409) = 9; sub_40B060(v369, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v370 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v386, 2); *v370 = 2; v408 = 15; v407 = 0; LOBYTE(v406) = 0; sub_4018E0(&v406, "Column05", 8u); LOBYTE(v409) = 10; sub_40B060(v370 + 18, (const void **)&v406); LOBYTE(v409) = 2; if ( v408 >= 0x10 ) operator delete(v406); v370[1] = v400; sub_466680(&v386, 0); v371 = (volatile LONG *)sub_43D0D0(4u); v372 = v371; v373 = sub_8FB140(v400, (int)"SubText02", (int)&v402, (int)&v403, v371); v374 = sub_466330(v402, v403, (int)v373, *(float *)&v2, (int **)&v386, 0, 0); *(_DWORD *)(v2 + 496) = v374; *((_DWORD *)v374 + 88) = 18; sub_464D00(*(_DWORD **)(v2 + 496), 4); sub_465130(*(_DWORD **)(v2 + 496)); *(_BYTE *)(*(_DWORD *)(v2 + 496) + 348) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 496) + 256))(0); v397 = *(float **)(v2 + 496); sub_5B3CF0((_DWORD *)(v2 + 544), &v397); v375 = sub_8FB140(v400, (int)"SlideBar_SlideBtnMiddle", (int)&v402, (int)&v403, v372); v376 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v376, "SlideBar_DnBtn01Nor"); v377 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v377, "SlideBar_DnBtn01Click"); v378 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v378, "SlideBar_DnBtn01Over"); v379 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v379, "SlideBar_UpBtn01Nor"); v380 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v380, "SlideBar_UpBtn01Click"); v381 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v400 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v381, "SlideBar_UpBtn01Over"); v382 = sub_464310(v400, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v375, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 500) = v382; *(_DWORD *)(v382 + 312) = 19; *(_DWORD *)(*(_DWORD *)(v2 + 500) + 304) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 500) + 256))(0); sub_4638F0(*(_DWORD **)(v2 + 500), *(_DWORD *)(*(_DWORD *)(v2 + 496) + 336)); v397 = *(float **)(v2 + 500); sub_5B3CF0((_DWORD *)(v2 + 544), &v397); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v383 = v395; v404 = (volatile LONG *)(v2 + 88); v397 = (float *)(v2 + 92); v384 = 3; do { (*(void (__thiscall **)(_DWORD, signed int, signed int))(*(_DWORD *)*v383 + 308))( *v383, (signed int)*(float *)v404, (signed int)*v397); ++v383; --v384; } while ( v384 ); LOBYTE(v409) = 1; if ( v386 ) { ((void (__cdecl *)(void *, void *, char *, _DWORD *))loc_40ACF0)(v386, v387, &v389, v395); operator delete(v386); } v386 = 0; v387 = 0; v388 = 0; LOBYTE(v409) = 0; sub_4562E0(v396); v385 = (void (__thiscall ***)(_DWORD, signed int))v400; v409 = -1; if ( v400 && !InterlockedDecrement((volatile LONG *)(v400 + 4)) && v385 ) (**v385)(v385, 1); return 1; } // 44D61A: using guessed type void __noreturn std::vector>::_Xlen(); // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0044D630) -------------------------------------------------------- void *__thiscall sub_44D630(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FaceCutMaskWin::`vftable'; *((_DWORD *)this + 58) = &FaceCutMaskWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B0BF4: using guessed type void *FaceCutMaskWin::`vftable'; // 9B0C14: using guessed type void *FaceCutMaskWin::`vftable'; //----- (0044D670) -------------------------------------------------------- void *__stdcall sub_44D670(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x13B13B13 || (result = operator new(13 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0044D6D0) -------------------------------------------------------- int __cdecl sub_44D6D0(__int16 a1) { unsigned int v1; // esi v1 = 0; if ( !sub_431660() ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1) != a1 ) { if ( ++v1 >= sub_431660() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1); } // ACB234: using guessed type int dword_ACB234; //----- (0044D720) -------------------------------------------------------- int __cdecl sub_44D720(int a1, int a2, int a3) { int v3; // ecx int result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 13 ) { if ( result ) { *(_DWORD *)result = *(_DWORD *)v3; *(_DWORD *)(result + 4) = *(_DWORD *)(v3 + 4); *(_DWORD *)(result + 8) = *(_DWORD *)(v3 + 8); *(_BYTE *)(result + 12) = *(_BYTE *)(v3 + 12); } v3 += 13; } return result; } //----- (0044D760) -------------------------------------------------------- unsigned int __thiscall sub_44D760(void **this, char *a2) { void **v2; // esi unsigned int result; // eax void *v4; // eax int v5; // ST04_4 char *v6; // ST00_4 char *v7; // ebx unsigned int v8; // edx int v9; // edi char *i; // eax void *v11; // ecx char *v12; // edi int v13; // [esp+0h] [ebp-24h] void *v14; // [esp+10h] [ebp-14h] int *v15; // [esp+14h] [ebp-10h] int v16; // [esp+20h] [ebp-4h] v15 = &v13; v2 = this; if ( (unsigned int)a2 > 0x13B13B13 ) std::_Xlength_error("vector too long"); result = ((_BYTE *)this[2] - (_BYTE *)*this) / 13; if ( result < (unsigned int)a2 ) { v4 = sub_44D670(a2); v5 = (int)v2[1]; v6 = (char *)*v2; v14 = v4; v16 = 0; sub_44D720((int)v6, v5, (int)v4); v7 = (char *)*v2; v8 = (signed int)((unsigned __int64)(1321528399i64 * ((_BYTE *)v2[1] - (_BYTE *)*v2)) >> 32) >> 2; v9 = v8 + (v8 >> 31); if ( *v2 ) { for ( i = (char *)v2[1]; v7 != i; v7 += 13 ) ; operator delete(*v2); } v11 = v14; result = (unsigned int)v14 + 13 * (_DWORD)a2; v12 = (char *)v14 + 13 * v9; v2[2] = (void *)result; v2[1] = v12; *v2 = v11; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0044D870) -------------------------------------------------------- unsigned int __thiscall sub_44D870(int this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) / 13; if ( 330382099 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (*(_DWORD *)(this + 8) - *(_DWORD *)this) / 13; if ( v3 > result ) { if ( 330382099 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_44D760((void **)this, v5); } return result; } //----- (0044D8F0) -------------------------------------------------------- void *__thiscall sub_44D8F0(void *this, char a2) { void *v2; // esi v2 = this; sub_44A7D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0044D920) -------------------------------------------------------- int *__cdecl sub_44D920(void *a1, int a2, float a3) { int *result; // eax result = (int *)a2; if ( (_WORD)a2 != -1 ) result = sub_63E870(byte_AD8A08, a2, a1, a3); return result; } //----- (0044D950) -------------------------------------------------------- void __usercall sub_44D950(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, float a8) { int v8; // eax int v9; // ecx v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) { v9 = *(_DWORD *)(v8 + 1040); if ( v9 ) sub_4EB180(v9, a1, a2, a3, (int)&a4, 0, a8); } } //----- (0044D990) -------------------------------------------------------- void __usercall sub_44D990(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, float a8) { int v8; // eax int v9; // ecx v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) { v9 = *(_DWORD *)(v8 + 1044); if ( v9 ) sub_4EB180(v9, a1, a2, a3, (int)&a4, 1, a8); } } //----- (0044D9D0) -------------------------------------------------------- void __cdecl sub_44D9D0(int a1, int a2, int a3, int a4, int a5, float a6) { int v6; // eax float **v7; // ecx v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v6 ) { v7 = *(float ***)(v6 + 1220); if ( v7 ) sub_5E9030(v7, a1, a2, a3, a4, a5, 0, a6); } } //----- (0044DA30) -------------------------------------------------------- void __cdecl sub_44DA30(int lpString, int a2, int a3, float a4) { int v4; // eax int v5; // esi v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = v4; if ( v4 && *(_DWORD *)(v4 + 980) ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 1032) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 936) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 964) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 944) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 948) + 260))() ) { OutputDebugStringA("\ni don't open the dialog since shop is open\n"); } else { sub_615820(*(_DWORD ***)(v5 + 980)); sub_617920(*(_DWORD *)(v5 + 980), a2, (LPCSTR)lpString, a3); sub_6156F0(*(_DWORD *)(v5 + 980), a4); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 980)); } } } //----- (0044DB20) -------------------------------------------------------- char __cdecl sub_44DB20(int a1, float a2) { float *v2; // eax float *v3; // eax int v4; // eax float *v5; // eax float *v6; // eax float *v7; // eax float *v8; // eax v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } v4 = *((_DWORD *)v2 + 39); if ( v4 ) { sub_401ED0(v4, a1); v5 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v6 = (float *)operator new(0xB4u); if ( v6 ) v5 = sub_4546A0(v6); else v5 = 0; dword_ACCFE0 = (int)v5; } sub_4020E0(*((_DWORD *)v5 + 39), a2); v7 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v8 = (float *)operator new(0xB4u); if ( v8 ) v7 = sub_4546A0(v8); else v7 = 0; dword_ACCFE0 = (int)v7; } LOBYTE(v4) = sub_8F82A0(&unk_BA6B10, *((_DWORD **)v7 + 39)); } return v4; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0044DC50) -------------------------------------------------------- void __cdecl sub_44DC50(unsigned __int8 *a1) { void *v1; // esi int v2; // eax int v3; // ecx int v4; // [esp+10h] [ebp-4Ch] int v5; // [esp+14h] [ebp-48h] int v6; // [esp+18h] [ebp-44h] int v7; // [esp+1Ch] [ebp-40h] int v8; // [esp+20h] [ebp-3Ch] int v9; // [esp+24h] [ebp-38h] int v10; // [esp+28h] [ebp-34h] int v11; // [esp+2Ch] [ebp-30h] void *v12; // [esp+30h] [ebp-2Ch] int v13; // [esp+40h] [ebp-1Ch] unsigned int v14; // [esp+44h] [ebp-18h] int v15; // [esp+58h] [ebp-4h] if ( a1 ) { v14 = 15; v13 = 0; LOBYTE(v12) = 0; v15 = 0; sub_4018E0(&v12, a1 + 36, strlen((const char *)a1 + 36)); sub_419EE0((float *)&v4, a1[548], a1[549], a1[550], 0xFFu); v1 = v12; if ( v14 < 0x10 ) v1 = &v12; v8 = v4; v9 = v5; v11 = v7; v10 = v6; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD *)(v2 + 1040); if ( v3 ) sub_4EB180(v3, 16, (int)v1, (int)v1, (int)&v8, 0, 8.0); } if ( v14 >= 0x10 ) operator delete(v12); } } //----- (0044DD70) -------------------------------------------------------- void __cdecl sub_44DD70(int a1, void *a2, int a3) { unsigned int v3; // ecx void *v4; // eax void *v5; // ecx void *v6; // ecx void *v7; // ecx _BYTE *v8; // eax void *v9; // ecx void *v10; // eax int v11; // [esp+10h] [ebp-40h] int v12; // [esp+14h] [ebp-3Ch] int v13; // [esp+18h] [ebp-38h] int v14; // [esp+1Ch] [ebp-34h] float v15; // [esp+20h] [ebp-30h] void *v16; // [esp+24h] [ebp-2Ch] int v17; // [esp+34h] [ebp-1Ch] unsigned int v18; // [esp+38h] [ebp-18h] int v19; // [esp+4Ch] [ebp-4h] if ( a1 ) { v18 = 15; v17 = 0; LOBYTE(v16) = 0; v19 = 0; if ( !a2 || (sub_4018E0(&v16, a2, strlen((const char *)a2)), !v17) ) sub_4018E0(&v16, (void *)(a1 + 34), strlen((const char *)(a1 + 34))); v3 = *(_DWORD *)(a1 + 554); v15 = 1000000.0; if ( v3 ) v15 = (double)(v3 / 0x3E8); sub_419EE0((float *)&v11, *(_BYTE *)(a1 + 550), *(_BYTE *)(a1 + 551), *(_BYTE *)(a1 + 552), 0xFFu); switch ( *(_DWORD *)(a1 + 546) ) { case 0: v4 = v16; if ( v18 < 0x10 ) v4 = &v16; sub_44D920(v4, a3, v15); break; case 1: v5 = v16; if ( v18 < 0x10 ) v5 = &v16; sub_44D950(16, a1, (int)v5, v11, v12, v13, v14, v15); break; case 2: v6 = v16; if ( v18 < 0x10 ) v6 = &v16; sub_44D990(16, a1, (int)v6, v11, v12, v13, v14, v15); break; case 3: v7 = v16; if ( v18 < 0x10 ) v7 = &v16; sub_44D9D0((int)v7, v11, v12, v13, v14, v15); break; case 4: v8 = sub_44DFF0((unsigned __int8 *)(a1 + 2)); if ( v8 ) { v9 = v16; if ( v18 < 0x10 ) v9 = &v16; sub_44DA30((int)v9, (int)(v8 + 32), v8[64] != 0, v15); } break; case 5: v10 = v16; if ( v18 < 0x10 ) v10 = &v16; sub_44DB20((int)v10, v15); break; default: break; } if ( v18 >= 0x10 ) operator delete(v16); } } //----- (0044DFF0) -------------------------------------------------------- void *__cdecl sub_44DFF0(unsigned __int8 *a1) { const char *v1; // ebx unsigned int v2; // edi int v3; // eax void *v4; // eax unsigned int v5; // eax unsigned int v6; // ebx unsigned int v7; // esi unsigned int v8; // ecx unsigned int v9; // edi unsigned __int8 *v10; // eax int v11; // eax bool v12; // zf signed int v13; // eax bool v14; // bl void *v16; // [esp+10h] [ebp-3Ch] unsigned int v17; // [esp+18h] [ebp-34h] unsigned int v18; // [esp+1Ch] [ebp-30h] void *v19; // [esp+20h] [ebp-2Ch] unsigned int v20; // [esp+30h] [ebp-1Ch] unsigned int v21; // [esp+34h] [ebp-18h] int v22; // [esp+48h] [ebp-4h] v1 = (const char *)a1; v2 = 0; if ( !a1 ) return 0; v3 = *(_DWORD *)(dword_ACB38C + 56); v18 = v3 ? *(_DWORD *)(v3 + 40) : 0; v17 = 0; if ( v18 <= 0 ) return 0; while ( 1 ) { v4 = (void *)sub_7474E0((_DWORD *)(dword_ACB38C + 4), v2); v16 = v4; if ( v4 ) break; LABEL_20: v17 = ++v2; if ( v2 >= v18 ) return 0; } v21 = 15; v20 = 0; LOBYTE(v19) = 0; sub_4018E0(&v19, v4, strlen((const char *)v4)); v5 = strlen(v1); v6 = v20; v7 = v5; v8 = v20; if ( v20 >= v5 ) v8 = v5; v9 = v21; v10 = (unsigned __int8 *)v19; if ( v21 < 0x10 ) v10 = (unsigned __int8 *)&v19; v11 = sub_40C0B0(v10, a1, v8); v12 = v11 == 0; if ( !v11 ) { if ( v6 >= v7 ) v13 = v6 != v7; else v13 = -1; v12 = v13 == 0; } v14 = v12; v22 = -1; if ( v9 >= 0x10 ) operator delete(v19); v21 = 15; v20 = 0; LOBYTE(v19) = 0; if ( !v14 ) { v2 = v17; v1 = (const char *)a1; goto LABEL_20; } return v16; } // ACB38C: using guessed type int dword_ACB38C; //----- (0044E1E0) -------------------------------------------------------- _DWORD *__thiscall sub_44E1E0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; *((_BYTE *)this + 4) = 0; this[2] = 0; *this = &CCallback::`vftable'; v1[3] = v1; this[4] = nullsub_4; if ( nullsub_4 ) { this[3] = this; this[4] = nullsub_4; SteamAPI_RegisterCallback(this, 163); } v2 = (int)(v1 + 5); *(_BYTE *)(v2 + 4) = 0; *(_DWORD *)(v2 + 8) = 0; *(_DWORD *)v2 = &CCallback::`vftable'; *(_DWORD *)(v2 + 12) = v1; *(_DWORD *)(v2 + 16) = nullsub_5; if ( nullsub_5 ) { v1[8] = v1; v1[9] = nullsub_5; SteamAPI_RegisterCallback(v2, 331); } return v1; } // 44E180: using guessed type int __stdcall nullsub_4(int); // 44E190: using guessed type int __stdcall nullsub_5(int); // 9A5738: using guessed type int __cdecl SteamAPI_RegisterCallback(_DWORD, _DWORD); // 9B1180: using guessed type void *CCallback::`vftable'; // 9B1190: using guessed type void *CCallback::`vftable'; //----- (0044E260) -------------------------------------------------------- signed int sub_44E260() { return 8; } //----- (0044E270) -------------------------------------------------------- int __thiscall sub_44E270(int this) { return (*(int (__thiscall **)(_DWORD))(this + 16))(*(_DWORD *)(this + 12)); } //----- (0044E280) -------------------------------------------------------- int __thiscall sub_44E280(int this, int a2, int a3, int a4, int a5) { return (*(int (__thiscall **)(_DWORD, int))(this + 16))(*(_DWORD *)(this + 12), a2); } //----- (0044E2A0) -------------------------------------------------------- void sub_44E2A0() { byte_ACB395 = 1; } // ACB395: using guessed type char byte_ACB395; //----- (0044E2B0) -------------------------------------------------------- char sub_44E2B0() { return byte_ACB395; } // ACB395: using guessed type char byte_ACB395; //----- (0044E2C0) -------------------------------------------------------- char *__cdecl sub_44E2C0(int a1, int a2) { _DWORD *v2; // eax _DWORD *v3; // esi char *v4; // eax int v6; // eax char *v7; // eax void *v8; // eax void *v9; // eax void *v10; // ecx void *v11; // eax char *v12; // edi void *v13; // [esp+1Ch] [ebp-E4h] unsigned int v14; // [esp+30h] [ebp-D0h] void *v15; // [esp+38h] [ebp-C8h] int v16; // [esp+48h] [ebp-B8h] unsigned int v17; // [esp+4Ch] [ebp-B4h] void *v18; // [esp+54h] [ebp-ACh] int v19; // [esp+64h] [ebp-9Ch] unsigned int v20; // [esp+68h] [ebp-98h] char v21; // [esp+70h] [ebp-90h] int v22; // [esp+FCh] [ebp-4h] v2 = operator new(0x2224u); v22 = 0; if ( v2 ) v3 = sub_6CBF30(v2); else v3 = 0; v22 = -1; if ( !byte_ACAD5C ) sub_420410(); v4 = sub_7549E0("%sSteamStartURL.hb", byte_ACA520); sub_6CBFB0(v3, (FILE *)v4); if ( sub_6CBEC0(v3, 0) == -1 ) return 0; v6 = sub_6CBE40(v3, 0, 0); if ( v6 ) strncpy(&v21, (const char *)(v6 + 8), 0x80u); if ( v3 ) { nullsub_29(v3); operator delete(v3); } v17 = 15; v16 = 0; LOBYTE(v15) = 0; v22 = 1; v7 = sub_7549E0("%I64d", a1, a2); sub_4018E0(&v15, v7, strlen(v7)); v20 = 15; v19 = 0; LOBYTE(v18) = 0; LOBYTE(v22) = 2; sub_4018E0(&v18, "qfgt3L9Li88lJMxo", 0x10u); sub_401C20(&v18, (int)&v15, 0, 0xFFFFFFFF); v8 = v18; if ( v20 < 0x10 ) v8 = &v18; v9 = (void *)sub_747370((int)&v13, v8, v19); LOBYTE(v22) = 3; sub_406450(&v18, v9); LOBYTE(v22) = 2; if ( v14 >= 0x10 ) operator delete(v13); v10 = v18; if ( v20 < 0x10 ) v10 = &v18; v11 = v15; if ( v17 < 0x10 ) v11 = &v15; v12 = sub_7549E0(&v21, v11, v10); if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v17 >= 0x10 ) operator delete(v15); return v12; } // 6CBFA0: using guessed type int __thiscall nullsub_29(_DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0044E530) -------------------------------------------------------- bool __thiscall sub_44E530(int this, int a2, char a3) { bool result; // al if ( *(_DWORD *)(this + 116) == 1 || *(_DWORD *)(this + 120) == 1 ) result = *(_BYTE *)(this + 128) == a3; else result = 0; return result; } //----- (0044E570) -------------------------------------------------------- float *__thiscall sub_44E570(char *this) { float *v1; // ebx _DWORD *v2; // esi int v3; // esi _DWORD *v4; // eax volatile LONG *v5; // eax float *v6; // esi float *v7; // eax float *v8; // ecx int v9; // eax float *result; // eax float v11; // [esp+20h] [ebp-48h] float v12; // [esp+24h] [ebp-44h] float v13; // [esp+28h] [ebp-40h] float v14; // [esp+2Ch] [ebp-3Ch] float v15; // [esp+30h] [ebp-38h] float v16; // [esp+34h] [ebp-34h] char v17; // [esp+38h] [ebp-30h] float v18; // [esp+3Ch] [ebp-2Ch] float v19; // [esp+40h] [ebp-28h] float v20; // [esp+44h] [ebp-24h] float v21; // [esp+48h] [ebp-20h] float v22; // [esp+4Ch] [ebp-1Ch] float v23; // [esp+50h] [ebp-18h] char *v24; // [esp+54h] [ebp-14h] void *v25; // [esp+58h] [ebp-10h] int v26; // [esp+64h] [ebp-4h] v1 = (float *)this; v24 = this; *(_DWORD *)this = 0; v26 = 0; *((_DWORD *)this + 1) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 4) = 0; *((float *)this + 5) = 0.0; v2 = this + 36; *((float *)this + 6) = 0.0; *((float *)this + 7) = 0.0; *((float *)this + 8) = 0.0; *v2 = 0; v2[1] = 0; v2[2] = 0; v2[3] = 128; sub_85F230((_DWORD *)this + 9, 0x80u); LOBYTE(v26) = 5; sub_85F910((_DWORD *)v1 + 13, (int)v2); v3 = *((_DWORD *)v1 + 4); LOBYTE(v26) = 6; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[4] = 0.0; } v4 = operator new(0x128u); v25 = v4; LOBYTE(v26) = 7; if ( v4 ) { v5 = (volatile LONG *)sub_862BA0(v4); v25 = (void *)v5; } else { v25 = 0; v5 = 0; } v6 = *(float **)v1; LOBYTE(v26) = 6; if ( v6 != (float *)v5 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) && v6 ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); v5 = (volatile LONG *)v25; } *(_DWORD *)v1 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v7 = *(float **)v1; v21 = 0.0; v22 = 0.0; v7[22] = 0.0; v23 = -100.0; v7[23] = 0.0; v7[24] = -100.0; sub_85BED0(*(_DWORD ***)v1, 0.0, 1); v8 = *(float **)v1; v21 = 0.0; v22 = -1.0; v23 = 0.0; v18 = 0.0; v19 = 0.0; v20 = 100.0; sub_862170(v8, &v18, &v21); v9 = *(_DWORD *)v1; qmemcpy(&v11, (const void *)(*(_DWORD *)v1 + 240), 0x1Cu); v16 = 10000.0; v15 = 0.0099999998; v11 = -15.5; v13 = 15.5; v12 = 16.5; v14 = -16.5; v17 = 1; sub_861DD0(v9, (int)&v11); sub_85BED0(*(_DWORD ***)v1, 0.0, 1); v1[5] = 1.0; result = v1; v1[6] = 0.0; v1[7] = 0.0; v1[8] = 1.0; return result; } //----- (0044E770) -------------------------------------------------------- void __thiscall sub_44E770(int *this) { int *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // esi v1 = this; v2 = this[4]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[4] = 0; } v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = 0; } v4 = v1[1]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[1] = 0; } sub_85F7E0(v1 + 13); operator delete[]((void *)v1[9]); v5 = v1[4]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[3]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[2]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[1]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = *v1; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } } //----- (0044E910) -------------------------------------------------------- void __thiscall sub_44E910(float **this, int a2) { float **v2; // esi float *v3; // eax int v4; // edi int v5; // ecx int v6; // ST0C_4 int v7; // ebx int v8; // [esp+10h] [ebp-18h] float *v9; // [esp+14h] [ebp-14h] int v10; // [esp+18h] [ebp-10h] int v11; // [esp+24h] [ebp-4h] v2 = this; if ( this[1] ) { if ( this[4] ) { if ( this[2] ) { v3 = *this; if ( *this ) { v4 = dword_AC9CE8; v5 = *(_DWORD *)(dword_AC9CE8 + 52); *(_DWORD *)(dword_AC9CE8 + 52) = v3; v8 = v5; (*(void (__stdcall **)(float **))(*(_DWORD *)v2[1] + 76))(v2 + 5); sub_44EC80(v2[1]); sub_44ED20((int)v2[1], (int)v2[3], 7); v10 = 0; v6 = *((_DWORD *)v2[1] + 2); v11 = 0; sub_56FF80(&v10, v6); v7 = *((_DWORD *)v2[1] + 2); v9 = v2[1]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } v9[2] = 0.0; } sub_85FB50(*v2, (int)v2[4], v2 + 13, 0); sub_44EE50(v2[1], v10); sub_44EDF0(v2[1]); sub_44ECB0(v2[1]); sub_44ECE0(v2[1]); *(_DWORD *)(v4 + 52) = v8; v11 = -1; sub_410C00(&v10); } } } } } // AC9CE8: using guessed type int dword_AC9CE8; //----- (0044EA40) -------------------------------------------------------- void __thiscall sub_44EA40(int *this, int a2) { int *v2; // edi int v3; // esi int v4; // esi v2 = this; v3 = *this; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } v4 = *v2; if ( *v2 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0044EAB0) -------------------------------------------------------- int *__cdecl sub_44EAB0(volatile LONG *a1, char a2) { void *v2; // eax int *v3; // esi volatile LONG *v4; // ebx int *result; // eax int (__thiscall *v6)(volatile LONG *); // eax int v7; // eax _DWORD *v8; // eax int v9; // edi _DWORD *v10; // ebx int v11; // ecx int v12; // ST04_4 int *v13; // eax _DWORD *v14; // eax int v15; // edi _DWORD *v16; // ebx int v17; // [esp+10h] [ebp-1Ch] int v18; // [esp+14h] [ebp-18h] int v19; // [esp+18h] [ebp-14h] void *v20; // [esp+1Ch] [ebp-10h] int v21; // [esp+28h] [ebp-4h] v2 = operator new(0xC4u); v20 = v2; v3 = 0; v21 = 0; if ( v2 ) v3 = (int *)sub_44E570((char *)v2); v4 = (volatile LONG *)v3[1]; v21 = -1; if ( v4 != a1 ) { if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); v3[1] = (int)a1; if ( a1 ) InterlockedIncrement(a1 + 1); } if ( !v3[1] ) goto LABEL_30; v6 = *(int (__thiscall **)(volatile LONG *))(*a1 + 104); v17 = 6; v18 = 3; v19 = 2; v7 = v6(a1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 76))(v7, 0); v17 = 2; v8 = sub_867510(1 << a2, 1 << a2, v3[1], &v17); v9 = v3[2]; v10 = v8; if ( (_DWORD *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v3[2] = (int)v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v11 = v3[2]; if ( v11 ) { v12 = v3[1]; v13 = (int *)(*(int (**)(void))(*(_DWORD *)v11 + 68))(); v14 = sub_867400(v13, v12, 1, 1); v15 = v3[3]; v16 = v14; if ( (_DWORD *)v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v3[3] = (int)v16; if ( v16 ) InterlockedIncrement(v16 + 1); } result = v3; } else { LABEL_30: sub_44E770(v3); operator delete(v3); result = 0; } return result; } //----- (0044EC60) -------------------------------------------------------- _DWORD *__thiscall sub_44EC60(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); return v2; } //----- (0044EC80) -------------------------------------------------------- char __thiscall sub_44EC80(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; if ( this[29] || this[30] || !(*(unsigned __int8 (**)(void))(*this + 264))() ) return 0; result = 1; v1[29] = 1; return result; } //----- (0044ECB0) -------------------------------------------------------- char __thiscall sub_44ECB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this[29] != 1 || this[30] || !(*(unsigned __int8 (**)(void))(*this + 268))() ) return 0; v1[29] = 2; return 1; } //----- (0044ECE0) -------------------------------------------------------- char __thiscall sub_44ECE0(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; if ( this[29] != 2 || this[30] || !(*(unsigned __int8 (**)(void))(*this + 272))() ) return 0; result = 1; ++v1[31]; v1[29] = 0; return result; } //----- (0044ED20) -------------------------------------------------------- char __thiscall sub_44ED20(int this, int a2, int a3) { int v3; // esi char result; // al char v5; // bl bool v6; // zf v3 = this; if ( *(_DWORD *)(this + 116) != 1 && *(_DWORD *)(this + 120) != 1 || *(_BYTE *)(this + 128) ) return 0; if ( a2 ) { EnterCriticalSection((LPCRITICAL_SECTION)(this + 20)); *(_DWORD *)(v3 + 44) = GetCurrentThreadId(); if ( ++*(_DWORD *)(v3 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 256))(v3); result = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 288))(v3, a2, a3); v5 = result; if ( result ) { *(_BYTE *)(v3 + 128) = 1; } else { if ( *(_DWORD *)(v3 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3); v6 = (*(_DWORD *)(v3 + 48))-- == 1; if ( v6 ) *(_DWORD *)(v3 + 44) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 20)); result = v5; } } else { nullsub_6((void *)this); result = 0; } return result; } //----- (0044EDF0) -------------------------------------------------------- char __thiscall sub_44EDF0(_DWORD *this) { _DWORD *v1; // esi bool v3; // zf v1 = this; if ( this[29] != 1 && this[30] != 1 || *((_BYTE *)this + 128) != 1 || !(*(unsigned __int8 (**)(void))(*this + 292))() ) return 0; if ( v1[12] == 1 ) (*(void (__thiscall **)(_DWORD *))(*v1 + 260))(v1); v3 = v1[12]-- == 1; if ( v3 ) v1[11] = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 5)); *((_BYTE *)v1 + 128) = 0; return 1; } //----- (0044EE50) -------------------------------------------------------- void __thiscall sub_44EE50(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[2]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0044EEA0) -------------------------------------------------------- void **__thiscall sub_44EEA0(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &ItemSlotWin::`vftable'; v1[58] = &ItemSlotWin::`vftable'; v1[114] = (void *)-1; v1[115] = (void *)-1; v1[117] = 0; v1[116] = (void *)-1; sub_5D5B70(v1, 0, 1); v1[113] = 0; *((_BYTE *)v1 + 448) = 0; return v1; } // 9B142C: using guessed type void *ItemSlotWin::`vftable'; // 9B144C: using guessed type void *ItemSlotWin::`vftable'; //----- (0044EF50) -------------------------------------------------------- char __thiscall sub_44EF50(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; sub_5D5420(v6, 0); result = 1; } return result; } //----- (0044F030) -------------------------------------------------------- void __thiscall sub_44F030(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // eax int *v6; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 448) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[117]; if ( v2 ) { v3 = v1[115]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { if ( sub_5D5470(v4) ) { v5 = sub_5D5470(v1); if ( v5 ) { v6 = (int *)v1[68]; if ( v6 ) { sub_547C20(v6, v5); sub_8F2F90((int)v1); } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0044F100) -------------------------------------------------------- int __thiscall sub_44F100(_DWORD *this, float a2) { _DWORD *v2; // esi _BYTE *v3; // ecx int result; // eax v2 = this; v3 = (_BYTE *)this[118]; if ( v3[64] ) sub_6B0C00(v3, a2); if ( *((_BYTE *)v2 + 460) && *((_BYTE *)v2 + 461) ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2[116] + 240))(1); else result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[116] + 240))(0); return result; } //----- (0044F190) -------------------------------------------------------- LONG __thiscall sub_44F190(int this, int a2, _DWORD *a3, int a4) { int v4; // esi LONG result; // eax v4 = this; if ( a2 == 27 ) { result = (LONG)a3; if ( a3 ) { if ( !*a3 ) { *(_BYTE *)(*(_DWORD *)(this + 200) + 448) = 1; sub_4C0730(*(_DWORD **)(this + 64), *(_DWORD *)(this + 220), *(_DWORD *)(this + 224)); result = sub_6B0B40(*(float **)(v4 + 240), *(_DWORD **)(v4 + 244)); *(_DWORD *)(v4 + 236) = 0; } } } return result; } //----- (0044F1F0) -------------------------------------------------------- char __thiscall sub_44F1F0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (0044F220) -------------------------------------------------------- char __thiscall sub_44F220(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[116]); return (char)v2; } //----- (0044F250) -------------------------------------------------------- int *__thiscall sub_44F250(int this) { int v1; // esi int v2; // eax unsigned int v3; // ecx int v4; // ecx v1 = this; v2 = *(_DWORD *)(this + 468); *(_BYTE *)(this + 448) = 0; if ( v2 ) { v3 = *(_DWORD *)(this + 460); if ( v3 < 0xC0 ) { v4 = *(_DWORD *)(v2 + 4 * v3 + 348); if ( v4 ) sub_536E90(v4, 0); } } *(_DWORD *)(v1 + 456) = -1; *(_DWORD *)(v1 + 460) = -1; *(_DWORD *)(v1 + 468) = 0; return sub_5D5B70((_WORD *)v1, 0, 1); } //----- (0044F2B0) -------------------------------------------------------- char __thiscall sub_44F2B0(_DWORD *this, const char *a2, unsigned __int16 a3, int a4) { int v4; // eax _DWORD *v5; // esi int v6; // edi char *v7; // eax char *v8; // eax unsigned int v9; // ecx LOBYTE(v4) = (_BYTE)a2; v5 = this; if ( a2 ) { v4 = sub_450760(a2); v6 = v4; if ( v4 ) { v5[113] = a4; v5[112] = a2; v7 = (char *)sub_4090F0(2130101198); v8 = sub_7549E0(v7, v6, (unsigned __int16)(((signed int)(a3 / 6u) >> 2) + (a3 / 6u >> 31))); (*(void (__stdcall **)(char *, _DWORD))(*(_DWORD *)v5[111] + 480))(v8, 0); v4 = *(_DWORD *)(v5[74] + 716); if ( v4 ) { v9 = v5[113]; if ( v9 < 0xC0 ) { v4 = *(_DWORD *)(v4 + 4 * v9 + 348); if ( v4 ) LOBYTE(v4) = sub_536E90(v4, 1); } } *((_BYTE *)v5 + 460) = 1; } } return v4; } //----- (0044F370) -------------------------------------------------------- int __thiscall sub_44F370(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax char *v3; // eax volatile LONG *v4; // eax v1 = this; this[114] = *(unsigned __int8 *)(this[108] + 460); v2 = (char *)sub_4090F0(-972614887); v3 = sub_7549E0(v2); v4 = sub_462C30(2, v3); v1[117] = v4; return (**((int (__stdcall ***)(int))v4 + 58))((int)(v1 + 58)); } //----- (0044F3C0) -------------------------------------------------------- _DWORD *__thiscall sub_44F3C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &TermExtendWin::`vftable'; v1[58] = &TermExtendWin::`vftable'; v1[88] = 0; v1[86] = &PgWinDrop::`vftable'; v1[106] = 0; v1[90] = &DropContents::`vftable'; *((_WORD *)v1 + 210) = -1; v1[119] = 0; v1[124] = 0; v1[125] = 15; *((_BYTE *)v1 + 480) = 0; v1[87] = v1 + 90; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; *((_WORD *)v1 + 230) = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[113] = 255; v1[114] = 255; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B16BC: using guessed type void *TermExtendWin::`vftable'; // 9B16DC: using guessed type void *TermExtendWin::`vftable'; //----- (0044F480) -------------------------------------------------------- LONG __thiscall sub_44F480(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi v1 = this; *this = &TermExtendWin::`vftable'; this[58] = &TermExtendWin::`vftable'; v2 = (int *)this[118]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[118] = 0; } if ( v1[125] >= 0x10u ) operator delete((void *)v1[120]); v1[125] = 15; v1[124] = 0; *((_BYTE *)v1 + 480) = 0; v4 = v1[119]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[90] = &DropContents::`vftable'; v1[86] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B16BC: using guessed type void *TermExtendWin::`vftable'; // 9B16DC: using guessed type void *TermExtendWin::`vftable'; //----- (0044F5C0) -------------------------------------------------------- int __userpurge sub_44F5C0@(int a1@, int a2@, _DWORD *a3) { int v3; // edi int v4; // esi const CHAR *v5; // eax int result; // eax unsigned int v7; // eax int v8; // ebx int v9; // ST2C_4 int v10; // ST28_4 int v11; // ST34_4 int v12; // ST24_4 __time32_t v13; // eax __time32_t v14; // esi __time32_t v15; // eax double v16; // st7 double v17; // st7 int (__stdcall *v18)(char *); // eax int v19; // [esp+1Ch] [ebp-D0h] struct tm Tm; // [esp+20h] [ebp-CCh] struct tm v21; // [esp+44h] [ebp-A8h] char v22; // [esp+68h] [ebp-84h] char v23; // [esp+69h] [ebp-83h] v3 = a1; v19 = a1; if ( a3 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(a1 + 436) + 472))(a3[28] + 34); v22 = 0; memset(&v23, 0, 0x7Fu); result = (*(int (__thiscall **)(_DWORD *))(*a3 + 44))(a3); if ( result ) { v7 = *(_DWORD *)(*(int (__thiscall **)(_DWORD *, int))(*a3 + 44))(a3, a2); v8 = (v7 >> 19) & 0x3F; v9 = (unsigned __int8)v7; v10 = (v7 >> 13) & 0x3F; v11 = v7 >> 25; v12 = (v7 >> 8) & 0x1F; sprintf(&v22, "%04d-%02d-%02d %02d:%02d", (unsigned __int8)v7 + 2000, v12, v10, v8, v7 >> 25); (*(void (__cdecl **)(char *))(**(_DWORD **)(v3 + 440) + 472))(&v22); qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v13 = _mktime32(&Tm); v21.tm_mon = v12 - 1; v14 = v13; v21.tm_year = v9 + 100; v21.tm_mday = v10; v21.tm_hour = v8; v21.tm_min = v11; v21.tm_sec = 0; v15 = _mktime32(&v21); v16 = _difftime32(v15, v14); v17 = (double)*(unsigned __int16 *)(sub_4507F0(*(const char **)(v19 + 448)) + 34) + v16 / 3600.0; v18 = *(int (__stdcall **)(char *))(**(_DWORD **)(v19 + 440) + 468); if ( v17 <= 2160.0 ) result = v18(aIii); else result = v18((char *)&dword_AA8C88); } } else { v4 = **(_DWORD **)(a1 + 436); v5 = sub_4090F0(-789280222); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v3 + 436), v5); result = (*(int (__stdcall **)(void *))(**(_DWORD **)(v3 + 440) + 472))(&unk_9B12BB); } return result; } // AA8C88: using guessed type int dword_AA8C88; //----- (0044F7F0) -------------------------------------------------------- char __thiscall sub_44F7F0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v6; // eax int v7; // ecx int v8; // ecx int v9; // eax unsigned int v10; // ecx int v11; // eax int v12; // [esp+14h] [ebp+8h] v2 = a2; v3 = *(_DWORD **)(a2 + 4); v4 = this; if ( !v3 ) return 0; v6 = (_DWORD *)v3[5]; v12 = (int)v6; if ( !v6 ) return 0; sub_44F5C0((int)this, v2, v6); if ( sub_5D5470((_DWORD *)v4[108]) ) { v7 = v4[108]; if ( v7 ) sub_44F250(v7); } sub_44F250(v4[108]); *(_DWORD *)(v4[108] + 456) = v3[2]; *(_DWORD *)(v4[108] + 460) = v3[3]; *(_DWORD *)(v4[108] + 468) = *(_DWORD *)(v2 + 8); v8 = v4[108]; v9 = *(_DWORD *)(v8 + 468); if ( v9 ) { v10 = *(_DWORD *)(v8 + 460); if ( v10 < 0xC0 ) { v11 = *(_DWORD *)(v9 + 4 * v10 + 348); if ( v11 ) sub_536E90(v11, 1); } } sub_5D5B70((_WORD *)v4[108], v12, 1); *((_BYTE *)v4 + 461) = 1; return 1; } //----- (0044F920) -------------------------------------------------------- char __thiscall sub_44F920(int this, int *a2, int a3, int a4) { _DWORD *v5; // eax _DWORD *v6; // esi int v7; // ebx const char *v8; // edi int v9; // eax _DWORD *v10; // esi const CHAR *v11; // eax int v12; // [esp+0h] [ebp-4h] v12 = this; if ( *(_BYTE *)(this + 448) ) goto LABEL_20; if ( !*a2 ) return 0; v5 = *(_DWORD **)(*a2 + 4); if ( v5[2] || v5[4] ) { LABEL_20: byte_BA6BD0 = 1; return 0; } v6 = (_DWORD *)v5[5]; if ( !v6 ) { byte_BA6BD0 = 1; return 0; } v7 = sub_402BF0((_DWORD *)this); v8 = (const char *)sub_4506D0((const char *)(v6[28] + 2)); if ( !v8 || (*(int (__thiscall **)(_DWORD *))(*v6 + 44))(v6) && (v9 = *(_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v6 + 44))(v6), !(_BYTE)v9) && !(v9 & 0xFFFFFF00) ) { v10 = *(_DWORD **)(v12 + 452); v11 = sub_4090F0(1374016199); LABEL_16: sub_492060(v10, (int)v11); byte_BA6BD0 = 1; return 0; } if ( strcmp(*(const char **)(v7 + 448), v8) ) { v10 = *(_DWORD **)(v12 + 452); v11 = sub_4090F0(-1530081759); goto LABEL_16; } return sub_44F7F0((_DWORD *)v7, *a2); } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0044FA40) -------------------------------------------------------- unsigned int __thiscall sub_44FA40(_DWORD *this) { int v1; // esi unsigned int result; // eax int v3; // ebx _DWORD *v4; // ecx _DWORD *v5; // edi int v6; // eax int v7; // ecx unsigned int v8; // eax int v9; // ecx _DWORD *v10; // edi const CHAR *v11; // eax _DWORD *v12; // eax v1 = (int)this; result = this[74]; v3 = *(_DWORD *)(result + 716); if ( v3 ) { result = this[114]; if ( result < 0xC0 ) { v4 = *(_DWORD **)(v3 + 4 * result + 348); if ( v4 ) { result = sub_5D5470(v4); v5 = (_DWORD *)result; if ( result ) { sub_5D5B70(*(_WORD **)(v1 + 432), result, 1); *(_BYTE *)(*(_DWORD *)(v1 + 432) + 448) = 0; *(_DWORD *)(*(_DWORD *)(v1 + 432) + 460) = *(_DWORD *)(v1 + 456); v6 = *(_DWORD *)(v1 + 432); v7 = *(_DWORD *)(v6 + 468); if ( v7 ) { v8 = *(_DWORD *)(v6 + 460); if ( v8 < 0xC0 ) { v9 = *(_DWORD *)(v7 + 4 * v8 + 348); if ( v9 ) sub_536E90(v9, 1); } } sub_44F5C0(v1, v3, v5); v10 = *(_DWORD **)(v1 + 296); v11 = sub_4090F0(-488053724); sub_492060(v10, (int)v11); v12 = (_DWORD *)(v1 + 480); if ( *(_DWORD *)(v1 + 500) >= 0x10u ) v12 = (_DWORD *)*v12; sub_6BA680(&dword_AB6520, (int)v12); result = *(_DWORD *)(v1 + 452); if ( result >= 0xC0 || (result = *(_DWORD *)(v3 + 4 * result + 348)) == 0 || (result = sub_5D5470((_DWORD *)result)) == 0 ) { *(_BYTE *)(v1 + 460) = 0; } } } } } return result; } //----- (0044FB60) -------------------------------------------------------- int *__usercall sub_44FB60@(int a1@, int a2@) { int v2; // esi int *result; // eax _DWORD *v4; // edi int v5; // ecx v2 = a1; result = (int *)sub_44F5C0(a1, a2, 0); v4 = *(_DWORD **)(v2 + 432); if ( v4 ) { result = (int *)sub_5D5470(*(_DWORD **)(v2 + 432)); if ( result ) { *(_DWORD *)(v2 + 368) = v4[114]; *(_DWORD *)(v2 + 376) = 0; v5 = v4[115]; *(_DWORD *)(v2 + 380) = result; *(_DWORD *)(v2 + 372) = v5; *(_DWORD *)(v2 + 384) = 0; *(_DWORD *)(v2 + 424) = (*(int (__thiscall **)(int *))(*result + 12))(result); *(_DWORD *)(v2 + 352) = v4[117]; dword_BA6BCC = v2 + 344; result = sub_44F250((int)v4); *(_BYTE *)(v2 + 461) = 0; } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (0044FBF0) -------------------------------------------------------- char __usercall sub_44FBF0@(int a1@, int a2@) { int v2; // esi int v3; // eax unsigned int v4; // ecx int v5; // ecx v2 = a1; v3 = *(_DWORD *)(*(_DWORD *)(a1 + 296) + 716); if ( v3 ) { v4 = *(_DWORD *)(a1 + 452); if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v3 + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } } sub_44F250(*(_DWORD *)(v2 + 432)); sub_44F5C0(v2, a2, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 444) + 472))(&unk_9B12CA); *(_DWORD *)(v2 + 452) = 255; *(_DWORD *)(v2 + 456) = 255; *(_WORD *)(v2 + 460) = 0; return sub_8F2BC0((volatile LONG *)v2, 1, 0, 0); } //----- (0044FC80) -------------------------------------------------------- void __usercall sub_44FC80(int a1@, int a2@) { int v2; // esi int v3; // eax unsigned int v4; // ecx int v5; // ecx volatile LONG *v6; // ST00_4 _DWORD *v7; // ecx v2 = a1; v3 = *(_DWORD *)(*(_DWORD *)(a1 + 296) + 716); if ( v3 ) { v4 = *(_DWORD *)(a1 + 452); if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v3 + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } } sub_44F250(*(_DWORD *)(v2 + 432)); sub_44F5C0(v2, a2, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 444) + 472))(&unk_9B12CA); v6 = *(volatile LONG **)(v2 + 476); v7 = *(_DWORD **)(v2 + 472); *(_DWORD *)(v2 + 452) = 255; *(_DWORD *)(v2 + 456) = 255; *(_WORD *)(v2 + 460) = 0; sub_6B0BB0(v7, v6); } //----- (0044FD10) -------------------------------------------------------- volatile LONG *__cdecl sub_44FD10(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1D8u); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_44EEA0((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (0044FE50) -------------------------------------------------------- volatile LONG *__cdecl sub_44FE50(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x200u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_44F3C0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0044FF80) -------------------------------------------------------- char __userpurge sub_44FF80@(_DWORD *a1@, int a2@, int a3, int a4) { _DWORD *v4; // eax LOBYTE(v4) = a3; switch ( a3 ) { case 11: LOBYTE(v4) = (unsigned int)sub_44FB60((int)a1, a2); break; case 12: LOBYTE(v4) = sub_44F370(a1); break; case 13: LOBYTE(v4) = sub_44FBF0((int)a1, a2); break; case 14: v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "TermExtendWin"); break; default: return (char)v4; } return (char)v4; } //----- (0044FFF0) -------------------------------------------------------- char __thiscall sub_44FFF0(void *this, volatile LONG *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax char v12; // ST18_1 int v13; // ST1C_4 int v14; // ST20_4 int v15; // ST24_4 const CHAR *v16; // eax char v17; // ST18_1 int v18; // ST1C_4 int v19; // ST20_4 int v20; // ST24_4 const CHAR *v21; // eax char v22; // ST18_1 int v23; // ST1C_4 int v24; // ST20_4 int v25; // ST24_4 const CHAR *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // eax char v30; // ST10_1 int v31; // ST14_4 int v32; // ST18_4 int v33; // ST1C_4 const CHAR *v34; // eax volatile LONG *v35; // edi char *v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // esi volatile LONG *v38; // edi int v39; // eax float *v40; // eax float *v41; // eax void (__thiscall ***v42)(_DWORD, signed int); // esi void (__thiscall ***v43)(_DWORD, signed int); // esi int v44[5]; // [esp+30h] [ebp-40h] float v45; // [esp+44h] [ebp-2Ch] float v46; // [esp+48h] [ebp-28h] float v47; // [esp+4Ch] [ebp-24h] volatile LONG *v48; // [esp+50h] [ebp-20h] int v49; // [esp+54h] [ebp-1Ch] int v50; // [esp+58h] [ebp-18h] int v51; // [esp+5Ch] [ebp-14h] int v52; // [esp+60h] [ebp-10h] int v53; // [esp+6Ch] [ebp-4h] v2 = (int)this; v52 = 0; v3 = dword_BA6BA0; v53 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\TermExtendWin.nif"); sub_8F66B0(v4, (int)&v52, v3); if ( !v52 ) return 0; v5 = sub_8FB140(v52, (int)"Frame", (int)&v50, (int)&v51, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"TermExtendWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v50; v9 = v51; sub_456260(v44); LOBYTE(v53) = 1; sub_455FF0(v44, v2); sub_456000(v44, v8, v9); sub_456380(v44, v52); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, v10); else v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, 0); sub_8F3EB0(v50 - v8, v51 - v9, (int)v11, v2, 0, 0); sub_456820(v44, (int)"IconSlot", 0); sub_456820(v44, (int)"Panel01", 0); sub_456820(v44, (int)"Panel02", 0); sub_456820(v44, (int)"Panel03", 0); v12 = dword_AA8D98; v13 = dword_AA8D9C; v14 = dword_AA8DA0; v15 = dword_AA8DA4; v16 = sub_4090F0(1066173582); sub_456760(v44, (int)"WinTitle", (int)v16, v12, v13, v14, v15, 5); sub_4563D0(v44, 14, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, 0); sub_4564D0(v44, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); *(_DWORD *)(v2 + 464) = sub_4563D0(v44, 12, (int)"OkNor", (int)"OkOver", (int)"OkClick", (int)"OkDisable", 0); v17 = dword_AA8C68; v18 = dword_AA8C6C; v19 = dword_AA8C70; v20 = dword_AA8C74; v21 = sub_4090F0(-1276234418); sub_456040(*(_DWORD *)(v2 + 464), (int)v21, v17, v18, v19, v20, 5); v48 = sub_4563D0(v44, 13, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_40C190(-1750816545); sub_456040((int)v48, (int)v26, v22, v23, v24, v25, 5); v27 = sub_8FB140(v52, (int)"MainSlot", (int)&v50, (int)&v51, 0); v28 = sub_8F3EB0(v50 - v8, v51 - v9, (int)v27, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 256))(v28, 1); v29 = sub_44FD10(v50 - v8 + 1, v51 - v9 + 1, 0, v2, (int)a2); *(_DWORD *)(v2 + 432) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 240))(v29, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 516))(11); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 560))(10); *(_DWORD *)(*(_DWORD *)(v2 + 432) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 432), 1); sub_44F250(*(_DWORD *)(v2 + 432)); v30 = dword_AA8C68; v31 = dword_AA8C6C; v32 = dword_AA8C70; v33 = dword_AA8C74; v34 = sub_4090F0(-789280222); *(_DWORD *)(v2 + 436) = sub_456980(v44, (int)"NoticeText01", (int)v34, 0, v30, v31, v32, v33, 5, 0, 1); *(_DWORD *)(v2 + 440) = sub_456980( v44, (int)"NoticeText02", (int)&unk_9B12B3, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 1); *(_DWORD *)(v2 + 444) = sub_456980( v44, (int)"NoticeText03", (int)&unk_9B12BA, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0, 0, 0); v35 = sub_8F4180(0, 0, 1, 1, v2, 0, 0); a2 = v35; if ( v35 ) InterlockedIncrement(v35 + 1); LOBYTE(v53) = 2; sub_65AD50((int *)(v2 + 476), (int *)&a2); LOBYTE(v53) = 1; if ( v35 && !InterlockedDecrement(v35 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v35)(v35, 1); v49 = 0; LOBYTE(v53) = 3; if ( !byte_ACAD5C ) sub_420410(); v36 = (char *)sub_401410(byte_ACA838, "TermExtend.nif"); sub_8F66B0(v36, (int)&v49, 0); if ( v49 ) { v38 = (volatile LONG *)operator new(0x44u); a2 = v38; LOBYTE(v53) = 4; if ( v38 ) { v39 = sub_85BD60((void *)v49); v40 = sub_6B0A90((float *)v38, v39); } else { v40 = 0; } LOBYTE(v53) = 3; *(_DWORD *)(v2 + 472) = v40; if ( v40 ) { v41 = *(float **)v40; v45 = 0.0; v46 = 0.0; v41[22] = 0.0; v47 = 1000.0; v41[23] = 0.0; v41[24] = 1000.0; *(_BYTE *)(*(_DWORD *)(v2 + 472) + 66) = 1; } sub_4018E0((_DWORD *)(v2 + 480), "MoverUpgrade_Start", 0x12u); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v53) = 1; if ( v49 ) { v42 = (void (__thiscall ***)(_DWORD, signed int))v49; if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v42 ) (**v42)(v42, 1); } } LOBYTE(v53) = 0; sub_4562E0(v44); v43 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v43 ) (**v43)(v43, 1); result = 1; } else { LOBYTE(v53) = 0; sub_4562E0(v44); v37 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v37 ) (**v37)(v37, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00450690) -------------------------------------------------------- void *__thiscall sub_450690(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemSlotWin::`vftable'; *((_DWORD *)this + 58) = &ItemSlotWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B142C: using guessed type void *ItemSlotWin::`vftable'; // 9B144C: using guessed type void *ItemSlotWin::`vftable'; //----- (004506D0) -------------------------------------------------------- int __cdecl sub_4506D0(const char *a1) { const char *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi int result; // eax v1 = a1; if ( !a1 || !*a1 ) return 0; v2 = *(_DWORD *)(dword_ACB398 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { result = sub_7474E0((_DWORD *)(dword_ACB398 + 4), v4); if ( result ) { if ( !strcmp((const char *)(result + 32), v1) ) return result; v1 = a1; } ++v4; } while ( v4 < v3 ); } return 0; } // ACB398: using guessed type int dword_ACB398; //----- (00450760) -------------------------------------------------------- int __cdecl sub_450760(const char *a1) { const char *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi const char *v5; // eax v1 = a1; if ( a1 && *a1 ) { v2 = *(_DWORD *)(dword_ACB39C + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( !v3 ) return 0; while ( 1 ) { v5 = (const char *)sub_7474E0((_DWORD *)(dword_ACB39C + 4), v4); if ( v5 ) { if ( !strcmp(v5, v1) ) return (int)(v5 + 32); v1 = a1; } if ( ++v4 >= v3 ) return 0; } } return 0; } // ACB39C: using guessed type int dword_ACB39C; //----- (004507F0) -------------------------------------------------------- int __cdecl sub_4507F0(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_419A40() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_419A40() ) return 0; } return sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v1); } // AC9CE0: using guessed type int dword_AC9CE0; //----- (00450880) -------------------------------------------------------- void *__thiscall sub_450880(void *this, char a2) { void *v2; // esi v2 = this; sub_44F480(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004508B0) -------------------------------------------------------- int __cdecl sub_4508B0(const void *a1, const void *a2) { int result; // eax if ( *(_DWORD *)a1 >= *(_DWORD *)a2 ) result = *(_DWORD *)a1 != *(_DWORD *)a2; else result = -1; return result; } //----- (004508E0) -------------------------------------------------------- void sub_4508E0() { operator delete[](dword_ACB3A0); dword_ACB3A0 = 0; } //----- (00450900) -------------------------------------------------------- char sub_450900() { int v1; // eax unsigned int v2; // ebx _DWORD *v3; // eax int v4; // edx _DWORD *v5; // ecx unsigned int v6; // esi int v7; // edi _DWORD *v8; // eax int v9; // eax size_t v10; // eax if ( !dword_AC9C90 ) return 0; v1 = *(_DWORD *)(dword_AC9C90 + 56); if ( v1 ) { v2 = *(_DWORD *)(v1 + 40); if ( v2 ) { v3 = operator new[](16 * v2); if ( v3 ) { v4 = v2 - 1; if ( (signed int)(v2 - 1) >= 0 ) { v5 = v3 + 2; do { *(v5 - 1) = &byte_9A8050; *v5 = &byte_9A8050; v5[1] = &byte_9A8050; v5 += 4; --v4; } while ( v4 >= 0 ); } } else { v3 = 0; } v6 = 0; dword_ACB3A0 = v3; if ( v2 ) { v7 = 0; do { v8 = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C90 + 4), v6); if ( v8 ) { *(_DWORD *)((char *)dword_ACB3A0 + v7) = *v8; *(_DWORD *)((char *)dword_ACB3A0 + v7 + 4) = v8 + 17; *(_DWORD *)((char *)dword_ACB3A0 + v7 + 8) = v8 + 1; *(_DWORD *)((char *)dword_ACB3A0 + v7 + 12) = v8 + 9; } ++v6; v7 += 16; } while ( v6 < v2 ); } v9 = *(_DWORD *)(dword_AC9C90 + 56); if ( v9 ) v10 = *(_DWORD *)(v9 + 40); else v10 = 0; qsort(dword_ACB3A0, v10, 0x10u, sub_4508B0); } } return 1; } // AC9C90: using guessed type int dword_AC9C90; //----- (004509F0) -------------------------------------------------------- int __cdecl sub_4509F0(const void *a1, const void *a2) { int result; // eax if ( *(_DWORD *)a1 >= *(_DWORD *)a2 ) result = *(_DWORD *)a1 != *(_DWORD *)a2; else result = -1; return result; } //----- (00450A20) -------------------------------------------------------- void sub_450A20() { operator delete[](dword_ACB3A4); dword_ACB3A4 = 0; } //----- (00450A40) -------------------------------------------------------- char sub_450A40() { int v1; // eax unsigned int v2; // ebx _DWORD *v3; // eax int v4; // edx _DWORD *v5; // ecx unsigned int v6; // esi int v7; // edi _DWORD *v8; // eax int v9; // eax size_t v10; // eax if ( !dword_AC9C80 ) return 0; v1 = *(_DWORD *)(dword_AC9C80 + 56); if ( v1 ) { v2 = *(_DWORD *)(v1 + 40); if ( v2 ) { v3 = operator new[](16 * v2); if ( v3 ) { v4 = v2 - 1; if ( (signed int)(v2 - 1) >= 0 ) { v5 = v3 + 2; do { *(v5 - 1) = &byte_9A8050; *v5 = &byte_9A8050; v5[1] = &byte_9A8050; v5 += 4; --v4; } while ( v4 >= 0 ); } } else { v3 = 0; } v6 = 0; dword_ACB3A4 = v3; if ( v2 ) { v7 = 0; do { v8 = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C80 + 4), v6); if ( v8 ) { *(_DWORD *)((char *)dword_ACB3A4 + v7) = *v8; *(_DWORD *)((char *)dword_ACB3A4 + v7 + 4) = v8 + 17; *(_DWORD *)((char *)dword_ACB3A4 + v7 + 8) = v8 + 1; *(_DWORD *)((char *)dword_ACB3A4 + v7 + 12) = v8 + 9; } ++v6; v7 += 16; } while ( v6 < v2 ); } v9 = *(_DWORD *)(dword_AC9C80 + 56); if ( v9 ) v10 = *(_DWORD *)(v9 + 40); else v10 = 0; qsort(dword_ACB3A4, v10, 0x10u, sub_4509F0); } } return 1; } // AC9C80: using guessed type int dword_AC9C80; //----- (00450B30) -------------------------------------------------------- int __cdecl sub_450B30(const void *a1, const void *a2) { int result; // eax if ( *(_DWORD *)a1 >= *(_DWORD *)a2 ) result = *(_DWORD *)a1 != *(_DWORD *)a2; else result = -1; return result; } //----- (00450B60) -------------------------------------------------------- void sub_450B60() { operator delete[](dword_ACB3A8); dword_ACB3A8 = 0; } //----- (00450B80) -------------------------------------------------------- char sub_450B80() { int v1; // eax unsigned int v2; // ebx _DWORD *v3; // eax int v4; // edx _DWORD *v5; // ecx unsigned int v6; // esi int v7; // edi _DWORD *v8; // eax int v9; // eax size_t v10; // eax if ( !dword_AC9C7C ) return 0; v1 = *(_DWORD *)(dword_AC9C7C + 56); if ( v1 ) { v2 = *(_DWORD *)(v1 + 40); if ( v2 ) { v3 = operator new[](16 * v2); if ( v3 ) { v4 = v2 - 1; if ( (signed int)(v2 - 1) >= 0 ) { v5 = v3 + 2; do { *(v5 - 1) = &byte_9A8050; *v5 = &byte_9A8050; v5[1] = &byte_9A8050; v5 += 4; --v4; } while ( v4 >= 0 ); } } else { v3 = 0; } v6 = 0; dword_ACB3A8 = v3; if ( v2 ) { v7 = 0; do { v8 = (_DWORD *)sub_7474E0((_DWORD *)(dword_AC9C7C + 4), v6); if ( v8 ) { *(_DWORD *)((char *)dword_ACB3A8 + v7) = *v8; *(_DWORD *)((char *)dword_ACB3A8 + v7 + 4) = v8 + 17; *(_DWORD *)((char *)dword_ACB3A8 + v7 + 8) = v8 + 1; *(_DWORD *)((char *)dword_ACB3A8 + v7 + 12) = v8 + 9; } ++v6; v7 += 16; } while ( v6 < v2 ); } v9 = *(_DWORD *)(dword_AC9C7C + 56); if ( v9 ) v10 = *(_DWORD *)(v9 + 40); else v10 = 0; qsort(dword_ACB3A8, v10, 0x10u, sub_450B30); } } return 1; } // AC9C7C: using guessed type int dword_AC9C7C; //----- (00450C70) -------------------------------------------------------- char __stdcall sub_450C70(char a1) { const char *v1; // ecx char v2; // al char result; // al if ( byte_ACB4B0 ) return byte_ACB3B0[a1]; v1 = "`~!@#$^&*()_+|-=\\[]{};':\",.<>/?"; v2 = 96; do { ++v1; byte_ACB3B0[v2] = 1; v2 = *v1; } while ( *v1 ); result = byte_ACB3B0[a1]; byte_ACB4B0 = 1; return result; } // ACB4B0: using guessed type char byte_ACB4B0; //----- (00450CD0) -------------------------------------------------------- _BYTE *__thiscall sub_450CD0(_BYTE *this) { _BYTE *result; // eax result = this; *this = 0; return result; } //----- (00450CE0) -------------------------------------------------------- void __thiscall sub_450CE0(_DWORD *this) { void *v1; // ST00_4 v1 = (void *)this[1]; *this = &TextFilter::`vftable'; operator delete[](v1); } // 9B1A04: using guessed type void *TextFilter::`vftable'; //----- (00450D30) -------------------------------------------------------- void *__fastcall sub_450D30(int a1, int a2, int a3, int a4, void *a5) { int v5; // ebx void *result; // eax unsigned int v7; // edi int v8; // esi int v9; // edi int v10; // ebx int v11; // ebx unsigned int v12; // edi char v13; // cl char *i; // eax unsigned __int8 **v15; // ecx char v16; // dl int v17; // eax char *v18; // esi _BYTE *j; // eax unsigned __int8 **v20; // [esp+8h] [ebp-18h] int v21; // [esp+Ch] [ebp-14h] unsigned int v22; // [esp+10h] [ebp-10h] const char *v23; // [esp+14h] [ebp-Ch] unsigned __int8 *v24; // [esp+18h] [ebp-8h] int v25; // [esp+1Ch] [ebp-4h] v5 = a1; result = (void *)(a1 + 512); v25 = a1; v23 = (const char *)(a1 + 512); if ( a3 < (unsigned int)(a1 + 512) ) return result; v7 = a1 + 1024; if ( a3 > (unsigned int)(a1 + 1024) ) return result; result = (void *)(a3 + strlen((const char *)a5)); if ( (unsigned int)result > v7 ) return result; result = (void *)(a3 + strlen((const char *)a4)); if ( (unsigned int)result > v7 ) return result; v8 = a3 - v5 - 512; v9 = *(_DWORD *)(v5 + 4 * v8 + 1024); v20 = (unsigned __int8 **)(v5 + 4 * v8 + 1024); v24 = *v20; v10 = *(_DWORD *)(v5 + 4 * (v8 + strlen((const char *)a4)) + 1020); v21 = v10; v22 = strlen((const char *)a5) - v10 + v9 - 1; v11 = strlen(v23); v12 = strlen((const char *)a4); if ( v12 != v11 && _mbsncmp(v24, &byte_9B1910, 1u) ) { if ( (signed int)(v12 + v8) < v11 ) { result = (void *)_mbsncmp( *(const unsigned __int8 **)(v25 + 4 * (v12 + v8) + 1024), (const unsigned __int8 *)&unk_9B1914, 1u); goto LABEL_11; } if ( v8 - 1 > 0 ) { result = (void *)_mbsncmp(*(const unsigned __int8 **)(v25 + 4 * v8 + 1020), &byte_9B1918, 1u); LABEL_11: if ( result ) return result; goto LABEL_12; } } LABEL_12: if ( v22 ) { v13 = *(_BYTE *)(v21 + 1); for ( i = byte_ACB4B8; v13; ++i ) { *i = v13; v13 = i[v21 + 1 - (_DWORD)byte_ACB4B8 + 1]; } v15 = v20; *i = 0; v16 = byte_ACB4B8[0]; v17 = v22 + v21 + 1; if ( byte_ACB4B8[0] ) { v18 = &byte_ACB4B8[-v17]; do { *(_BYTE *)v17 = v16; *v15 += v22; v16 = v18[v17++ + 1]; ++v15; } while ( v16 ); } *(_BYTE *)v17 = 0; } for ( j = (_BYTE *)a4; *j; ++a3 ) { *(_BYTE *)a3 = 32; ++j; } return memcpy(v24, a5, strlen((const char *)a5)); } //----- (00450FE0) -------------------------------------------------------- unsigned __int8 *__thiscall sub_450FE0(char *this, const char *a2, char a3) { char *v3; // esi unsigned __int8 *result; // eax unsigned __int8 *v5; // eax _WORD *v6; // ebx char **v7; // edi int v8; // [esp+8h] [ebp-210h] char *v9; // [esp+10h] [ebp-208h] char v10; // [esp+14h] [ebp-204h] v3 = this; result = (unsigned __int8 *)strlen(a2); if ( (signed int)result < 512 ) { strcpy(v3, a2); strcpy(&v10, a2); v9 = &v10; v5 = (unsigned __int8 *)(v3 + 512); v8 = (int)(v3 + 512); v6 = v3 + 512; v7 = (char **)(v3 + 1024); if ( *v3 ) { do { if ( IsDBCSLeadByte(*v3) ) { *v6 = *(_WORD *)v9; *v7 = v3; v7[1] = v3 + 1; ++v6; v7 += 2; v3 += 2; v9 += 2; } else { if ( !a3 || !sub_450C70(*v3) ) { *(_BYTE *)v6 = *v9; *v7 = v3; v6 = (_WORD *)((char *)v6 + 1); ++v7; } ++v3; ++v9; } } while ( *v3 ); v5 = (unsigned __int8 *)v8; } *(_BYTE *)v6 = 0; result = _mbsupr(v5); } return result; } //----- (00451100) -------------------------------------------------------- _DWORD *__thiscall sub_451100(_DWORD *this, const char *a2) { _DWORD *v2; // edi _DWORD *result; // eax _BYTE *v4; // eax const char *v5; // ecx _BYTE *v6; // edx char v7; // al v2 = this; *this = &TextFilter::`vftable'; if ( a2 ) { v4 = operator new[](strlen(a2) + 1); v2[1] = v4; v5 = a2; v6 = v4; do { v7 = *v5; *v6++ = *v5++; } while ( v7 ); _mbsupr((unsigned __int8 *)v2[1]); result = v2; } else { this[1] = 0; result = this; } return result; } // 9B1A04: using guessed type void *TextFilter::`vftable'; //----- (00451160) -------------------------------------------------------- void __thiscall sub_451160(_DWORD *this, int a2) { _DWORD *v2; // edi const unsigned __int8 *v3; // edx const char *v4; // eax unsigned __int8 *i; // esi signed int v6; // [esp+4h] [ebp-4h] v2 = this; v3 = (const unsigned __int8 *)this[1]; if ( v3 ) { v4 = (const char *)this[1]; v6 = &v4[strlen(v4)] - (const char *)v3; if ( v6 >= 1 ) { for ( i = _mbsstr((const unsigned __int8 *)(a2 + 512), v3); i; i = _mbsstr(&i[v6], (const unsigned __int8 *)v2[1]) ) (*(void (__thiscall **)(_DWORD *, int, unsigned __int8 *, _DWORD))*v2)(v2, a2, i, v2[1]); } } } //----- (004511D0) -------------------------------------------------------- _DWORD *__thiscall sub_4511D0(_DWORD *this, const char *a2, const char *a3) { _DWORD *v3; // esi _BYTE *v4; // eax const char *v5; // ecx _BYTE *v6; // edx char v7; // al v3 = this; sub_451100(this, a2); *v3 = &TextFilterReplace::`vftable'; if ( a3 ) { v4 = operator new[](strlen(a3) + 1); v3[2] = v4; v5 = a3; v6 = v4; do { v7 = *v5; *v6++ = *v5++; } while ( v7 ); } else { v3[2] = 0; } return v3; } // 9B1A10: using guessed type void *TextFilterReplace::`vftable'; //----- (00451260) -------------------------------------------------------- void *__thiscall sub_451260(void **this, int a2, int a3, int a4) { return sub_450D30(a2, a3, a3, a4, this[2]); } //----- (00451280) -------------------------------------------------------- void __thiscall sub_451280(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // ecx int v4; // edi v1 = this; while ( v1[3] ) { v2 = v1[2]; v3 = *(_DWORD **)(v2 + 4); v1[2] = v3; if ( v3 ) *v3 = 0; else v1[1] = 0; v4 = *(_DWORD *)(v2 + 8); (*(void (__thiscall **)(_DWORD *, int))(*v1 + 8))(v1, v2); --v1[3]; if ( v4 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 4))(v4, 1); } } //----- (004512E0) -------------------------------------------------------- int __thiscall sub_4512E0(char *this, const char *a2, char a3) { char *v3; // esi int v4; // edi _DWORD *v5; // esi _DWORD *v6; // ecx v3 = this; v4 = (int)(this + 16); sub_450FE0(this + 16, a2, a3); v5 = (_DWORD *)*((_DWORD *)v3 + 1); while ( v5 ) { v6 = (_DWORD *)v5[2]; v5 = (_DWORD *)*v5; sub_451160(v6, v4); } return v4; } //----- (00451320) -------------------------------------------------------- _DWORD *__thiscall sub_451320(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ecx v2 = this; result = (_DWORD *)(*(int (**)(void))(*this + 4))(); result[2] = a2; *result = 0; result[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (00451370) -------------------------------------------------------- void __thiscall sub_451370(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 v1 = this; sub_451280(this); *v1 = &NiTPointerListBase,TextFilter *>::`vftable'; v2 = (_DWORD *)v1[1]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,TextFilter *>::`vftable'; } // 9B1A1C: using guessed type void *NiTListBase,TextFilter *>::`vftable'; // 9B1A2C: using guessed type void *NiTPointerListBase,TextFilter *>::`vftable'; //----- (00451410) -------------------------------------------------------- void *__thiscall sub_451410(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,TextFilter *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B1A1C: using guessed type void *NiTListBase,TextFilter *>::`vftable'; //----- (00451440) -------------------------------------------------------- void *__thiscall sub_451440(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &TextFilter::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1A04: using guessed type void *TextFilter::`vftable'; //----- (00451470) -------------------------------------------------------- _DWORD *__thiscall sub_451470(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST04_4 void *v4; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &TextFilterReplace::`vftable'; operator delete[](v3); v4 = (void *)v2[1]; *v2 = &TextFilter::`vftable'; operator delete[](v4); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1A04: using guessed type void *TextFilter::`vftable'; // 9B1A10: using guessed type void *TextFilterReplace::`vftable'; //----- (004514B0) -------------------------------------------------------- int __thiscall sub_4514B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,TextFilter *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,TextFilter *>::`vftable'; return result; } // 9B1A1C: using guessed type void *NiTListBase,TextFilter *>::`vftable'; // 9B1A2C: using guessed type void *NiTPointerListBase,TextFilter *>::`vftable'; //----- (00451530) -------------------------------------------------------- _DWORD *__userpurge sub_451530@(const char *a1@, _DWORD *a2, const char *a3) { _DWORD *result; // eax _BYTE *v4; // eax const char *v5; // ecx _BYTE *v6; // edx char v7; // al sub_451100(a2, a3); *a2 = &`TextFilterTable::FilterEmotion'::`2'::TextFilterEmotion::`vftable'; if ( a1 ) { v4 = operator new[](strlen(a1) + 1); a2[2] = v4; v5 = a1; v6 = v4; do { v7 = *v5; *v6++ = *v5++; } while ( v7 ); result = a2; } else { a2[2] = 0; result = a2; } return result; } // 9B1ABC: using guessed type int (__stdcall *`TextFilterTable::FilterEmotion'::`2'::TextFilterEmotion::`vftable')(int, int, int); //----- (004515F0) -------------------------------------------------------- BOOL __cdecl sub_4515F0(const char *a1) { unsigned int v1; // eax BOOL result; // eax result = 1; if ( a1 ) { if ( strcmp(a1, (const char *)&unk_9B1A4A) ) { v1 = strlen(a1); if ( *a1 != 32 && a1[v1 - 1] != 32 ) result = 0; } } return result; } //----- (00451660) -------------------------------------------------------- char __thiscall sub_451660(const char **this, int a2, int a3, int a4) { _BYTE *v4; // eax const char **v6; // [esp-2h] [ebp-4h] v6 = this; LOBYTE(v4) = dword_AD8EBC[1924]; if ( (_BYTE)v4 != 4 && (_BYTE)v4 != 5 ) { v4 = (_BYTE *)sub_4522A0(this[2]); if ( v4 ) { HIBYTE(v6) = *v4; LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 8, 32, (char *)&v6 + 3, 1u); } } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004516B0) -------------------------------------------------------- bool sub_4516B0() { bool result; // al result = sub_4524C0("SlanderFilter.shn", 1, 0); if ( result ) { if ( dword_ACB6B8 ) { (**(void (***)(void))dword_ACB6B8)(); if ( dword_ACB6B8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6B8 + 8))(1); dword_ACB6B8 = 0; } result = 1; } return result; } // ACB6B8: using guessed type int dword_ACB6B8; //----- (00451700) -------------------------------------------------------- int __cdecl sub_451700(const char *a1) { _DWORD *v2; // eax _DWORD *v3; // eax unsigned int v4; // esi const char *v5; // edi _DWORD *v6; // eax _DWORD *v7; // eax if ( !(dword_ACC2E8 & 1) ) { dword_ACC2E8 |= 1u; dword_ACB6E4 = 0; dword_ACB6DC = 0; dword_ACB6E0 = 0; dword_ACB6D8 = (int)&NiTList::`vftable'; sub_450CD0(&unk_ACB6E8); atexit(sub_99FAE0); } if ( !byte_ACB6D4 ) { byte_ACB6D4 = 1; if ( !sub_4524C0("SlanderFilter.shn", 1, 0) ) return (int)a1; v2 = operator new(0xCu); if ( v2 ) v3 = sub_4511D0(v2, "%s", "s"); else v3 = 0; sub_451320(&dword_ACB6D8, (int)v3); v4 = 0; if ( sub_452140() ) { do { v5 = (const char *)sub_7474E0((_DWORD *)(dword_ACB6B8 + 4), v4); v6 = operator new(0xCu); if ( v6 ) v7 = sub_4511D0(v6, v5, v5 + 32); else v7 = 0; sub_451320(&dword_ACB6D8, (int)v7); ++v4; } while ( v4 < sub_452140() ); } if ( dword_ACB6B8 ) { (**(void (***)(void))dword_ACB6B8)(); if ( dword_ACB6B8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6B8 + 8))(1); dword_ACB6B8 = 0; } } return sub_4512E0((char *)&dword_ACB6D8, a1, 1); } // 9B1AF8: using guessed type void *NiTList::`vftable'; // ACB6B8: using guessed type int dword_ACB6B8; // ACB6D4: using guessed type char byte_ACB6D4; // ACB6D8: using guessed type int dword_ACB6D8; // ACB6DC: using guessed type int dword_ACB6DC; // ACB6E0: using guessed type int dword_ACB6E0; // ACB6E4: using guessed type int dword_ACB6E4; // ACC2E8: using guessed type int dword_ACC2E8; //----- (004518A0) -------------------------------------------------------- char __cdecl sub_4518A0(const char *a1) { char result; // al unsigned int v2; // edi const char *v3; // ebx _DWORD *v4; // eax _DWORD *v5; // eax if ( !(dword_ACCF00 & 1) ) { dword_ACCF00 |= 1u; dword_ACC2FC = 0; dword_ACC2F4 = 0; dword_ACC2F8 = 0; dword_ACC2F0 = (int)&NiTList::`vftable'; sub_450CD0(&unk_ACC300); atexit(sub_99FAF0); } if ( !byte_ACC2EC ) { byte_ACC2EC = 1; result = sub_4525F0("EmotionFilter.shn", 1, 0); if ( !result ) return result; v2 = 0; if ( sub_452180() ) { do { v3 = (const char *)sub_7474E0((_DWORD *)(dword_ACB6BC + 4), v2); v4 = operator new(0xCu); if ( v4 ) v5 = sub_451530(v3 + 32, v4, v3); else v5 = 0; sub_451320(&dword_ACC2F0, (int)v5); ++v2; } while ( v2 < sub_452180() ); } if ( dword_ACB6BC ) { (**(void (***)(void))dword_ACB6BC)(); if ( dword_ACB6BC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6BC + 8))(1); dword_ACB6BC = 0; } } return sub_4512E0((char *)&dword_ACC2F0, a1, 0); } // 9B1AF8: using guessed type void *NiTList::`vftable'; // ACB6BC: using guessed type int dword_ACB6BC; // ACC2EC: using guessed type char byte_ACC2EC; // ACC2F0: using guessed type int dword_ACC2F0; // ACC2F4: using guessed type int dword_ACC2F4; // ACC2F8: using guessed type int dword_ACC2F8; // ACC2FC: using guessed type int dword_ACC2FC; // ACCF00: using guessed type int dword_ACCF00; //----- (00451A00) -------------------------------------------------------- char __cdecl sub_451A00(unsigned __int8 *a1) { unsigned int v2; // esi unsigned __int8 *v3; // eax unsigned int v4; // esi int v5; // eax int v6; // ecx if ( byte_ACCF89 ) { LABEL_7: if ( !byte_ACCF88 ) return 1; goto LABEL_8; } byte_ACCF89 = 1; if ( !sub_452760("BadNameFilter.shn", 1, 0) ) { byte_ACCF88 = 0; return 1; } byte_ACCF88 = 1; v2 = 0; if ( sub_452160() ) { do { v3 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACB6C0 + 4), v2); _mbsupr(v3); ++v2; } while ( v2 < sub_452160() ); goto LABEL_7; } LABEL_8: strcpy((char *)&byte_ACCF08, (const char *)a1); _mbsupr(&byte_ACCF08); v4 = 0; if ( sub_452160() ) { do { v5 = sub_7474E0((_DWORD *)(dword_ACB6C0 + 4), v4); v6 = *(_DWORD *)(v5 + 32); if ( v6 ) { if ( v6 == 1 && _mbsstr(&byte_ACCF08, (const unsigned __int8 *)v5) ) return 1; } else if ( !_mbsicmp(a1, (const unsigned __int8 *)v5) ) { return 1; } ++v4; } while ( v4 < sub_452160() ); } return 0; } // ACB6C0: using guessed type int dword_ACB6C0; // ACCF88: using guessed type char byte_ACCF88; // ACCF89: using guessed type char byte_ACCF89; //----- (00451B00) -------------------------------------------------------- char __cdecl sub_451B00(const char *a1) { unsigned int v1; // esi const void **v2; // edi _BYTE *v3; // eax const char *v4; // eax void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v1 = 15; v8 = 15; v7 = 0; LOBYTE(v6) = 0; v2 = *(const void ***)dword_ACCF8C; v9 = 0; if ( v2 == dword_ACCF8C ) return 0; while ( 1 ) { v3 = v6; v7 = 0; if ( v1 < 0x10 ) v3 = &v6; *v3 = 0; sub_4017F0((const void **)&v6, v2 + 2, 0, (void *)0xFFFFFFFF); v1 = v8; v4 = (const char *)v6; if ( v8 < 0x10 ) v4 = (const char *)&v6; if ( !strcmp(v4, a1) ) break; v2 = (const void **)*v2; if ( v2 == dword_ACCF8C ) { if ( v8 >= 0x10 ) operator delete(v6); return 0; } } if ( v8 >= 0x10 ) operator delete(v6); return 1; } //----- (004520E0) -------------------------------------------------------- _DWORD *__thiscall sub_4520E0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &`TextFilterTable::FilterEmotion'::`2'::TextFilterEmotion::`vftable'; operator delete[](v3); sub_450CE0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1ABC: using guessed type int (__stdcall *`TextFilterTable::FilterEmotion'::`2'::TextFilterEmotion::`vftable')(int, int, int); //----- (00452120) -------------------------------------------------------- int sub_452120() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB6C4 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (00452140) -------------------------------------------------------- int sub_452140() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB6B8 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB6B8: using guessed type int dword_ACB6B8; //----- (00452160) -------------------------------------------------------- int sub_452160() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB6C0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB6C0: using guessed type int dword_ACB6C0; //----- (00452180) -------------------------------------------------------- int sub_452180() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB6BC + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB6BC: using guessed type int dword_ACB6BC; //----- (004521A0) -------------------------------------------------------- void **__thiscall sub_4521A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1AC8: using guessed type void *ITableBase::`vftable'; //----- (00452220) -------------------------------------------------------- void **__thiscall sub_452220(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1AD8: using guessed type void *ITableBase::`vftable'; //----- (004522A0) -------------------------------------------------------- int __cdecl sub_4522A0(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_452120() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v1) + 1), a1) ) { if ( ++v1 >= sub_452120() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v1); } // ACB6C4: using guessed type int dword_ACB6C4; //----- (00452330) -------------------------------------------------------- _DWORD *__thiscall sub_452330(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,TextFilter *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,TextFilter *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1A1C: using guessed type void *NiTListBase,TextFilter *>::`vftable'; // 9B1A2C: using guessed type void *NiTPointerListBase,TextFilter *>::`vftable'; //----- (004523C0) -------------------------------------------------------- _DWORD *__thiscall sub_4523C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACB6C8 & 1) ) { dword_ACB6C8 |= 1u; atexit(sub_99FB30); } *((_BYTE *)v1 + 68) = 0; *v1 = &SlanderFilterTable::`vftable'; return v1; } // 9B1AC8: using guessed type void *ITableBase::`vftable'; // 9B1B08: using guessed type void *SlanderFilterTable::`vftable'; // ACB6C4: using guessed type int dword_ACB6C4; // ACB6C8: using guessed type int dword_ACB6C8; //----- (00452400) -------------------------------------------------------- _DWORD *__thiscall sub_452400(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACB6CC & 1) ) { dword_ACB6CC |= 1u; atexit(sub_99FB00); } *((_BYTE *)v1 + 68) = 0; *v1 = &EmotionFilterTable::`vftable'; return v1; } // 9B1AE8: using guessed type void *ITableBase::`vftable'; // 9B1B18: using guessed type void *EmotionFilterTable::`vftable'; // ACB6C8: using guessed type int dword_ACB6C8; // ACB6CC: using guessed type int dword_ACB6CC; //----- (00452440) -------------------------------------------------------- void **__thiscall sub_452440(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1AE8: using guessed type void *ITableBase::`vftable'; //----- (004524C0) -------------------------------------------------------- bool __cdecl sub_4524C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB6B8; if ( !dword_ACB6B8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4523C0(v5); else v4 = 0; v12 = -1; dword_ACB6B8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB6B8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB6B8 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB6B8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB6B8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB6B8: using guessed type int dword_ACB6B8; //----- (004525F0) -------------------------------------------------------- bool __cdecl sub_4525F0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB6BC; if ( !dword_ACB6BC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_452400(v5); else v4 = 0; v12 = -1; dword_ACB6BC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB6BC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB6BC + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB6BC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB6BC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB6BC: using guessed type int dword_ACB6BC; //----- (00452720) -------------------------------------------------------- _DWORD *__thiscall sub_452720(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACB6D0 & 1) ) { dword_ACB6D0 |= 1u; atexit(sub_99FB60); } *((_BYTE *)v1 + 68) = 0; *v1 = &BadNameFilterTable::`vftable'; return v1; } // 9B1AD8: using guessed type void *ITableBase::`vftable'; // 9B1B28: using guessed type void *BadNameFilterTable::`vftable'; // ACB6D0: using guessed type int dword_ACB6D0; //----- (00452760) -------------------------------------------------------- bool __cdecl sub_452760(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB6C0; if ( !dword_ACB6C0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_452720(v5); else v4 = 0; v12 = -1; dword_ACB6C0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB6C0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB6C0 + 56); if ( !v6 || *v6 != 24 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB6C0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB6C0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB6C0: using guessed type int dword_ACB6C0; //----- (00452890) -------------------------------------------------------- void __thiscall sub_452890(_DWORD *this, const void **a2) { _DWORD *v2; // ebx _DWORD *v3; // edi unsigned __int8 *v4; // edx unsigned __int8 *v5; // eax unsigned int v6; // esi unsigned int v7; // ecx _DWORD *v8; // eax _DWORD *v9; // esi _DWORD **v10; // [esp+10h] [ebp-30h] void *v11; // [esp+14h] [ebp-2Ch] unsigned int v12; // [esp+24h] [ebp-1Ch] unsigned int v13; // [esp+28h] [ebp-18h] v2 = this; v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4017F0((const void **)&v11, a2, 0, (void *)0xFFFFFFFF); v3 = *(_DWORD **)*v2; v10 = (_DWORD **)*v2; while ( v3 != v10 ) { v4 = (unsigned __int8 *)v11; v5 = (unsigned __int8 *)(v3 + 2); if ( v13 < 0x10 ) v4 = (unsigned __int8 *)&v11; v6 = v3[6]; v7 = v12; if ( v6 < v12 ) v7 = v3[6]; if ( v3[7] >= 0x10u ) v5 = *(unsigned __int8 **)v5; if ( sub_40C0B0(v5, v4, v7) || v6 < v12 || v6 != v12 ) { v3 = (_DWORD *)*v3; } else { v8 = (_DWORD *)v3[1]; v9 = v3; v3 = (_DWORD *)*v3; *v8 = v3; v3[1] = v8; if ( v9[7] >= 0x10u ) operator delete((void *)v9[2]); v9[7] = 15; v9[6] = 0; *((_BYTE *)v9 + 8) = 0; operator delete(v9); --v2[1]; } } if ( v13 >= 0x10 ) operator delete(v11); } //----- (004529C0) -------------------------------------------------------- const void **__stdcall sub_4529C0(char *a1, int a2, int a3) { const void **v3; // esi int v4; // edx const void **v5; // ecx int v7; // [esp+0h] [ebp-30h] void **v8; // [esp+10h] [ebp-20h] void *v9; // [esp+1Ch] [ebp-14h] int *v10; // [esp+20h] [ebp-10h] int v11; // [esp+2Ch] [ebp-4h] v10 = &v7; v3 = (const void **)operator new(0x24u); v9 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a1); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v4 = a2; *v3 = a1; v5 = v3 + 2; v11 = 0; v3[1] = (const void *)v4; a1 = (char *)(v3 + 2); a2 = (int)(v3 + 2); LOBYTE(v11) = 1; if ( v3 != (const void **)-8 ) { v3[6] = 0; v3[7] = (const void *)15; *(_BYTE *)v5 = 0; sub_4017F0(v5, (const void **)a3, 0, (void *)0xFFFFFFFF); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00452AA0) -------------------------------------------------------- int __thiscall sub_452AA0(float *this, int a2) { float *v2; // esi int v3; // ecx int result; // eax v2 = this; v3 = *((_DWORD *)this + 72); if ( v3 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 472))(a2); v2[73] = (double)(unsigned int)dword_AC2F78; *((_BYTE *)v2 + 296) = 0; return result; } //----- (00452AF0) -------------------------------------------------------- void __thiscall sub_452AF0(int this, int a2) { int v2; // esi int v3; // edi double v4; // st7 char v5; // [esp+4h] [ebp-8h] int v6; // [esp+8h] [ebp-4h] v2 = this; if ( !*(_BYTE *)(this + 296) ) { v3 = *(_DWORD *)(this + 288); if ( v3 ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 176))(v3, (signed int)*(float *)(this + 292)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 288) + 492))(&v5); } v4 = *(float *)(v2 + 292); v6 = -v6; if ( (double)v6 >= v4 ) *(_BYTE *)(v2 + 296) = 1; else *(float *)(v2 + 292) = *(float *)(v2 + 292) - 0.5; } } //----- (00452B80) -------------------------------------------------------- char __thiscall sub_452B80(_DWORD *this) { int v1; // eax char result; // al v1 = this[9]; if ( v1 ) result = *(_BYTE *)(v1 + 296); else result = 0; return result; } //----- (00452CA0) -------------------------------------------------------- char __usercall sub_452CA0@(void *a1@, int a2@) { int v2; // esi int v3; // edi char result; // al int v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // ebx int v8; // eax float v9; // ST5C_4 _DWORD *v10; // ebx int v11; // [esp-4h] [ebp-10h] volatile LONG *v12; // [esp+8h] [ebp-4h] v2 = (int)a1; v3 = (unsigned int)dword_AC2F78 >> 2; result = sub_8F2900(a1, 0, 0, 1, 1, 0, 0, 0); if ( result ) { v11 = a2; v5 = sub_421050(6); v6 = sub_8F4A20(0, 0, xRight, dword_AC2F78, v5, v2, 0, 0); v7 = *(volatile LONG **)(v2 + 288); v12 = v6; if ( v7 != v6 ) { if ( v7 ) { if ( !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); v6 = v12; } *(_DWORD *)(v2 + 288) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } (*(void (__stdcall **)(signed int, int))(**(_DWORD **)(v2 + 288) + 488))(1, v11); v8 = *(_DWORD *)(v2 + 288); v9 = (double)(unsigned int)dword_AC2F78; *(float *)(v2 + 292) = v9; (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v8 + 176))(*(_DWORD *)(v2 + 288), (signed int)v9); v10 = sub_8F62B0(0, 0, 0, 255); sub_8F3D50((int)v10, 0, 0, xRight, v3, v2, 0, 0); sub_8F3D50((int)v10, 0, 3 * v3, xRight, v3, v2, 0, 0); sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); result = 1; } return result; } // 452CA0: could not find valid save-restore pair for ebx //----- (00452DF0) -------------------------------------------------------- int __thiscall sub_452DF0(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // esi int v4; // esi _DWORD *v5; // edi int result; // eax _DWORD *v7; // ST00_4 v1 = this; *this = &TextScreenEffect::`vftable'; v2 = this[9]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[8]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (int)(v1 + 2); v1[2] = &PgTList::`vftable'; v5 = (_DWORD *)v1[3]; result = 0; if ( v5 ) { do { v7 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v4 + 8))(v1 + 2, v7); } while ( v5 ); result = 0; } v1[5] = 0; v1[3] = 0; v1[4] = 0; *(_DWORD *)v4 = &NiTListBase,int>::`vftable'; *v1 = &Singleton::`vftable'; if ( dword_ACCF98 ) { result = (**(int (__stdcall ***)(signed int))dword_ACCF98)(1); dword_ACCF98 = 0; } byte_ACCF9C = 1; return result; } // 9B1B38: using guessed type void *Singleton::`vftable'; // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; // 9B1B60: using guessed type void *PgTList::`vftable'; // 9B1D58: using guessed type void *TextScreenEffect::`vftable'; // ACCF98: using guessed type int dword_ACCF98; // ACCF9C: using guessed type char byte_ACCF9C; //----- (00452F00) -------------------------------------------------------- _DWORD *__thiscall sub_452F00(float *this) { float *v1; // ebx _DWORD *result; // eax _DWORD *v3; // edi _DWORD *v4; // ST00_4 int v5; // esi int v6; // esi v1 = this; result = 0; this[1] = 0.0; v3 = (_DWORD *)*((_DWORD *)this + 3); if ( v3 ) { do { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*((_DWORD *)v1 + 2) + 8))((_DWORD *)v1 + 2, v4); } while ( v3 ); result = 0; } v1[5] = 0.0; v1[3] = 0.0; v1[4] = 0.0; v1[6] = 0.0; v1[7] = 0.0; v5 = *((_DWORD *)v1 + 8); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[8] = 0.0; result = 0; } if ( *((_DWORD *)v1 + 9) ) { result = sub_8F9E00(&unk_BA6B10, *((_DWORD **)v1 + 9)); v6 = *((_DWORD *)v1 + 9); if ( v6 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } v1[9] = 0.0; } } return result; } //----- (00452FA0) -------------------------------------------------------- void __thiscall sub_452FA0(int this, int a2) { int v2; // esi int v3; // ST04_4 void *v4; // ecx void *v5; // [esp+10h] [ebp-B4h] int v6; // [esp+14h] [ebp-B0h] int v7; // [esp+18h] [ebp-ACh] int v8; // [esp+1Ch] [ebp-A8h] float *v9; // [esp+20h] [ebp-A4h] char v10; // [esp+24h] [ebp-A0h] int v11; // [esp+C0h] [ebp-4h] v2 = this; if ( *(_DWORD *)(this + 4) == 2 ) { v9 = (float *)dword_BA6B30; if ( !dword_BA6B30 ) return; sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 36)); v5 = 0; v6 = 0; v7 = 0; v8 = 1024; sub_85F230(&v5, 0x400u); v11 = 0; sub_8F7640(&v10, (int)&v5); v3 = *(_DWORD *)(v2 + 36); LOBYTE(v11) = 1; sub_85FB50(v9, v3, &v10, 0); LOBYTE(v11) = 0; sub_8F76A0(&v10); v11 = -1; operator delete[](v5); } if ( a2 ) { if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 284))(a2, 0); v4 = *(void **)(v2 + 32); if ( v4 ) sub_868B60(v4); } } // BA6B30: using guessed type int dword_BA6B30; //----- (004530E0) -------------------------------------------------------- void __thiscall sub_4530E0(int this, float a2) { int v2; // eax double v3; // st7 float *v4; // edx float *v5; // edx int v6; // eax int v7; // [esp+0h] [ebp-18h] int v8; // [esp+4h] [ebp-14h] int v9; // [esp+8h] [ebp-10h] float v10; // [esp+Ch] [ebp-Ch] float v11; // [esp+10h] [ebp-8h] float v12; // [esp+14h] [ebp-4h] a2 = (a2 - *(float *)(this + 24)) / *(float *)(this + 28); if ( a2 < 1.0 ) { v7 = dword_ABD508; v9 = dword_ABD510; v2 = *(_DWORD *)(this + 4) - 1; v8 = dword_ABD50C; v10 = *(float *)&dword_ABD514; if ( v2 ) { if ( v2 == 2 ) { v4 = &v12; v12 = 0.0; v11 = 1.0; if ( a2 >= 0.0 ) v4 = &a2; if ( *v4 >= 1.0 ) v4 = &v11; v3 = 1.0 - *v4; } else { v3 = 0.0; } } else { v5 = &v11; v11 = 0.0; v12 = 1.0; if ( a2 >= 0.0 ) v5 = &a2; if ( *v5 >= 1.0 ) v5 = &v12; v3 = *v5 + 0.0; } v6 = *(_DWORD *)(this + 32); v10 = v3; if ( v6 ) sub_867FF0(*(_DWORD *)(v6 + 184), 0, &v7); } else { *(_DWORD *)(this + 4) = 0; } } // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; //----- (004531D0) -------------------------------------------------------- _DWORD *__thiscall sub_4531D0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ecx v2 = this + 2; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[2] + 4))(this + 2); result[2] = a2; *result = 0; result[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (00453230) -------------------------------------------------------- char __thiscall sub_453230(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // eax int v6; // esi int v7; // eax _DWORD *v9; // eax int v10; // esi _DWORD *v11; // eax int v12; // esi v1 = this; v2 = 0; if ( !this[8] ) { v3 = operator new(0xC4u); if ( v3 ) { v4 = operator new(0x70u); if ( v4 ) v5 = sub_868440(v4, 0, 1, 0, 1, 1, 4, 1, 2, 1); else v5 = 0; v2 = sub_868C00(v3, (int)v5); } v6 = v1[8]; if ( (_DWORD *)v6 != v2 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[8] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } v7 = v1[8]; if ( !v7 ) return 0; sub_867880(*(_WORD **)(v7 + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v1[8] + 184), 0, 0.0, 0.0, 1.0, 1.0); sub_867680(*(_DWORD *)(v1[8] + 184)); v9 = operator new(0x28u); v10 = (int)v9; if ( v9 ) { sub_85B2B0(v9); *(_DWORD *)v10 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v10 + 28) = 0; *(_DWORD *)(v10 + 32) = 0; *(_DWORD *)(v10 + 36) = 1; } else { v10 = 0; } if ( !v10 ) return 0; *(_DWORD *)(v10 + 32) = 1; *(_DWORD *)(v10 + 36) = 0; sub_403700((_DWORD *)v1[8], v10); v11 = operator new(0x20u); v12 = (int)v11; if ( v11 ) { sub_85B2B0(v11); *(_DWORD *)v12 = &NiAlphaProperty::`vftable'; *(_WORD *)(v12 + 28) = 236; *(_BYTE *)(v12 + 30) = 0; } else { v12 = 0; } if ( !v12 ) return 0; *(_WORD *)(v12 + 28) = *(_WORD *)(v12 + 28) & 0xFEED | 0xED; sub_403700((_DWORD *)v1[8], v12); sub_85C4D0((_DWORD *)v1[8]); } return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (00453440) -------------------------------------------------------- void __thiscall sub_453440(_DWORD *this, float a2) { int v2; // esi _DWORD *v3; // eax int v4; // ecx int v5; // eax _DWORD *v6; // ST00_4 v2 = (int)this; if ( this[5] ) { v3 = this + 1; if ( !this[1] ) { v4 = this[3]; if ( !v4 ) return; *v3 = *(_DWORD *)(v4 + 8); sub_937220((_DWORD *)(v2 + 8), (int *)(v2 + 4)); *(float *)(v2 + 24) = a2; } } switch ( *(_DWORD *)(v2 + 4) ) { case 1: case 3: sub_4530E0(v2, a2); break; case 2: v5 = *(_DWORD *)(v2 + 36); if ( v5 ) { if ( *(_BYTE *)(v5 + 296) ) { v6 = *(_DWORD **)(v2 + 36); *(_DWORD *)(v2 + 4) = 0; sub_8F86A0(&unk_BA6B10, v6); } } break; case 4: sub_452F00((float *)v2); break; default: return; } } //----- (004534E0) -------------------------------------------------------- _DWORD *__thiscall sub_4534E0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &TextScreenEffect::`vftable'; this[1] = 0; this[5] = 0; this[3] = 0; this[4] = 0; this[2] = &PgTList::`vftable'; *((float *)this + 6) = 0.0; *((float *)this + 7) = 0.0; this[8] = 0; this[9] = 0; return result; } // 9B1B60: using guessed type void *PgTList::`vftable'; // 9B1D58: using guessed type void *TextScreenEffect::`vftable'; //----- (00453510) -------------------------------------------------------- int sub_453510() { _DWORD *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x12Cu); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { sub_8F2740(v0); *(_DWORD *)v1 = &TextScreenWin::`vftable'; *(_DWORD *)(v1 + 232) = &TextScreenWin::`vftable'; *(_DWORD *)(v1 + 288) = 0; *(float *)(v1 + 292) = 0.0; *(_WORD *)(v1 + 296) = 0; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 452))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 9B1B70: using guessed type void *TextScreenWin::`vftable'; // 9B1B8C: using guessed type void *TextScreenWin::`vftable'; //----- (00453660) -------------------------------------------------------- bool __thiscall sub_453660(_DWORD *this) { _DWORD *v1; // ebx int v3; // eax int v4; // esi int v5; // edi v1 = this; if ( this[9] ) return 1; v3 = sub_453510(); v4 = v1[9]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[9] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } return v1[9] != 0; } //----- (004536C0) -------------------------------------------------------- char __thiscall sub_4536C0(float *this, int a2, float a3, float a4) { float *v4; // esi char result; // al float *v6; // ecx v4 = this; result = sub_453660(this); if ( result ) { result = sub_453230(v4); if ( result ) { v6 = (float *)*((_DWORD *)v4 + 9); if ( v6 ) sub_452AA0(v6, a2); v4[6] = a3; v4[7] = a4; result = sub_521E30((_DWORD *)v4 + 2); v4[1] = 0.0; } } return result; } //----- (00453740) -------------------------------------------------------- void *__thiscall sub_453740(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Singleton::`vftable'; if ( dword_ACCF98 ) { (**(void (__stdcall ***)(signed int))dword_ACCF98)(1); dword_ACCF98 = 0; } byte_ACCF9C = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1B38: using guessed type void *Singleton::`vftable'; // ACCF98: using guessed type int dword_ACCF98; // ACCF9C: using guessed type char byte_ACCF9C; //----- (004537A0) -------------------------------------------------------- void *__thiscall sub_4537A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,int>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; //----- (004537D0) -------------------------------------------------------- int __thiscall sub_4537D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,int>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,int>::`vftable'; return result; } // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; // 9B1B50: using guessed type void *NiTPointerListBase,int>::`vftable'; //----- (00453850) -------------------------------------------------------- _DWORD *__thiscall sub_453850(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,int>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,int>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; // 9B1B50: using guessed type void *NiTPointerListBase,int>::`vftable'; //----- (004538E0) -------------------------------------------------------- int __thiscall sub_4538E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,int>::`vftable'; return result; } // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; // 9B1B60: using guessed type void *PgTList::`vftable'; //----- (00453960) -------------------------------------------------------- _DWORD *__thiscall sub_453960(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,int>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1B40: using guessed type void *NiTListBase,int>::`vftable'; // 9B1B60: using guessed type void *PgTList::`vftable'; //----- (004539F0) -------------------------------------------------------- void **__thiscall sub_4539F0(void *this, char a2) { void **v2; // esi int v3; // edi v2 = (void **)this; *(_DWORD *)this = &TextScreenWin::`vftable'; *((_DWORD *)this + 58) = &TextScreenWin::`vftable'; v3 = *((_DWORD *)this + 72); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F29C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1B70: using guessed type void *TextScreenWin::`vftable'; // 9B1B8C: using guessed type void *TextScreenWin::`vftable'; //----- (00453A90) -------------------------------------------------------- void *__thiscall sub_453A90(void *this, char a2) { void *v2; // esi v2 = this; sub_452DF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00453AE0) -------------------------------------------------------- int __cdecl sub_453AE0(double a1) { return (signed int)(a1 / 86400.0); } //----- (00453B00) -------------------------------------------------------- int __cdecl sub_453B00(double a1) { return (signed int)(a1 / 60.0); } //----- (00453B20) -------------------------------------------------------- bool __cdecl sub_453B20(_DWORD *a1) { signed int v1; // ecx signed int v2; // ecx signed int v3; // ecx signed int v4; // ecx signed int v5; // ecx signed int v6; // eax bool result; // al result = 0; if ( a1 ) { if ( *a1 >= 0 && *a1 <= 59 ) { v1 = a1[1]; if ( v1 >= 0 && v1 <= 59 ) { v2 = a1[2]; if ( v2 >= 0 && v2 <= 23 ) { v3 = a1[3]; if ( v3 >= 1 && v3 <= 31 ) { v4 = a1[4]; if ( v4 >= 0 && v4 <= 31 ) { v5 = a1[6]; if ( v5 >= 0 && v5 <= 6 ) { v6 = a1[7]; if ( v6 >= 0 && v6 <= 365 ) result = 1; } } } } } } } return result; } //----- (00453B90) -------------------------------------------------------- char __thiscall sub_453B90(_BYTE *this, char a2) { this[11] = a2; return 1; } //----- (00453BA0) -------------------------------------------------------- char __thiscall sub_453BA0(_BYTE *this, char a2) { this[12] = a2; return 1; } //----- (00453BB0) -------------------------------------------------------- char __thiscall sub_453BB0(_BYTE *this, char a2) { this[13] = a2; return 1; } //----- (00453BC0) -------------------------------------------------------- char __thiscall sub_453BC0(_BYTE *this, char a2) { this[14] = a2; return 1; } //----- (00453BD0) -------------------------------------------------------- char __thiscall sub_453BD0(_BYTE *this, char a2) { this[15] = a2; return 1; } //----- (00453BE0) -------------------------------------------------------- char __thiscall sub_453BE0(_BYTE *this, char a2) { this[16] = a2; return 1; } //----- (00453BF0) -------------------------------------------------------- int __thiscall sub_453BF0(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[39]; if ( v2 ) result = sub_401ED0(v2, a2); return result; } //----- (00453C10) -------------------------------------------------------- int *__thiscall sub_453C10(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx int *result; // eax v3 = (_DWORD *)this[40]; if ( v3 ) result = sub_43EA90(v3, a2, a3); return result; } //----- (00453C30) -------------------------------------------------------- void __thiscall sub_453C30(_DWORD *this) { int v1; // esi unsigned int v2; // eax unsigned int v3; // ecx int *v4; // eax int v5; // edi char *v6; // eax int v7; // ecx v7 = this[40]; if ( v7 ) { v1 = v7; v2 = *(_DWORD *)(v7 + 352); v3 = *(_DWORD *)(v7 + 356); if ( v2 < v3 ) *(_DWORD *)(v1 + 352) = v2 + 1; v4 = *(int **)(v1 + 348); if ( v4 ) { v5 = *v4; v6 = sub_7549E0("(%d / %d)", *(_DWORD *)(v1 + 352), v3); (*(void (__thiscall **)(_DWORD, char *))(v5 + 472))(*(_DWORD *)(v1 + 348), v6); } } } //----- (00453C40) -------------------------------------------------------- bool __thiscall sub_453C40(_DWORD *this) { int v1; // ecx bool result; // al v1 = this[40]; if ( v1 ) result = *(_DWORD *)(v1 + 352) == *(_DWORD *)(v1 + 356); else result = 0; return result; } //----- (00453C60) -------------------------------------------------------- int __thiscall sub_453C60(int this) { int v1; // esi int v2; // edi int result; // eax v1 = this; *(_DWORD *)(this + 4) = 0; *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_WORD *)(this + 16) = 0; if ( *(_DWORD *)(this + 152) ) { v2 = *(_DWORD *)(this + 152); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(v1 + 152) = 0; } } if ( *(_DWORD *)(v1 + 156) ) { sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v1 + 156)); *(_DWORD *)(v1 + 156) = 0; } if ( *(_DWORD *)(v1 + 160) ) { sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v1 + 160)); *(_DWORD *)(v1 + 160) = 0; } sub_940360((_DWORD *)(v1 + 20)); sub_8D64E0((_DWORD *)(v1 + 36)); *(_DWORD *)(v1 + 140) = dword_BA45C0; *(_DWORD *)(v1 + 144) = dword_BA45C4; result = dword_BA45C8; *(_DWORD *)(v1 + 148) = dword_BA45C8; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00453D20) -------------------------------------------------------- void __thiscall sub_453D20(int this, int a2) { int v2; // eax if ( *(_BYTE *)(this + 4) ) { v2 = *(_DWORD *)(this + 152); if ( v2 ) sub_8D7B80((_DWORD *)(this + 36), 0.0, v2, this + 140); } } //----- (00453D50) -------------------------------------------------------- char __stdcall sub_453D50(float a1, int a2) { int v2; // eax int v4; // ecx v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v2 ) return 0; v4 = *(_DWORD *)(v2 + 576); if ( !v4 ) return 0; sub_559A60(v4, a1, a2); return 1; } //----- (00453D90) -------------------------------------------------------- int __stdcall sub_453D90(int a1) { int result; // eax result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { result = *(_DWORD *)(result + 716); if ( result ) *(_DWORD *)(result + 2564) = a1; } return result; } //----- (00453DC0) -------------------------------------------------------- bool __stdcall sub_453DC0(void *a1) { int v1; // eax BOOL v2; // eax _DWORD **v3; // ecx v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 && (v3 = *(_DWORD ***)(v1 + 716)) != 0 ) v2 = (unsigned int)sub_53D4D0(v3, a1) < 0xC1; else LOBYTE(v2) = 0; return v2; } //----- (00453E00) -------------------------------------------------------- bool __stdcall sub_453E00(void *a1) { int v1; // eax BOOL v2; // eax _DWORD **v3; // ecx v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 && (v3 = *(_DWORD ***)(v1 + 716)) != 0 ) v2 = (unsigned int)sub_53D500(v3, a1) < 0x1F; else LOBYTE(v2) = 0; return v2; } //----- (00453E40) -------------------------------------------------------- char sub_453E40() { int v0; // eax char result; // al int v2; // ecx v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 && (v2 = *(_DWORD *)(v0 + 936)) != 0 ) result = (*(int (**)(void))(*(_DWORD *)v2 + 260))(); else result = 0; return result; } //----- (00453E70) -------------------------------------------------------- char sub_453E70() { int v0; // eax char result; // al int v2; // ecx v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 && (v2 = *(_DWORD *)(v0 + 944)) != 0 ) result = (*(int (**)(void))(*(_DWORD *)v2 + 260))(); else result = 0; return result; } //----- (00453EA0) -------------------------------------------------------- char sub_453EA0() { int v0; // eax char result; // al int v2; // ecx v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 && (v2 = *(_DWORD *)(v0 + 980)) != 0 ) result = (*(int (**)(void))(*(_DWORD *)v2 + 260))(); else result = 0; return result; } //----- (00453ED0) -------------------------------------------------------- char __stdcall sub_453ED0(int a1) { int v1; // eax int v3; // ebx unsigned int v4; // edi int *v5; // ebx int v6; // esi v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v1 ) return 0; v3 = *(_DWORD *)(v1 + 948); if ( !v3 ) return 0; v4 = 0; v5 = (int *)(v3 + 356); do { if ( v4 != a1 && v4 < 0xC0 ) { v6 = *v5; if ( *v5 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 276))(*v5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 240))(v6, 0); } } ++v4; ++v5; } while ( v4 < 2 ); return 1; } //----- (00453F60) -------------------------------------------------------- char __stdcall sub_453F60(char a1) { int v1; // eax int v2; // ebx unsigned int v3; // edi int *v4; // ebx int v5; // esi double v6; // st7 float v7; // ST10_4 v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) { v2 = *(_DWORD *)(v1 + 948); if ( v2 ) { v3 = 0; v4 = (int *)(v2 + 356); do { if ( v3 < 0xC0 ) { v5 = *v4; if ( *v4 ) { if ( a1 ) v6 = 0.5; else v6 = 1.0; v7 = v6; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 276))(v5, LODWORD(v7)); (*(void (__thiscall **)(int, bool))(*(_DWORD *)v5 + 240))(v5, a1 == 0); } } ++v3; ++v4; } while ( v3 < 2 ); } } return 0; } //----- (00453FF0) -------------------------------------------------------- bool __stdcall sub_453FF0(int a1) { int v1; // eax bool result; // al volatile LONG *v3; // edi int v4; // esi v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v1 ) return 0; v3 = *(volatile LONG **)(v1 + 936); if ( !v3 ) return 0; v4 = 2; if ( a1 ) { if ( a1 == 1 ) { v4 = 3; } else if ( a1 == 2 ) { v4 = 4; } } result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) { sub_8F2A80((void *)v3, 5, v4, 0); result = 1; } return result; } //----- (00454070) -------------------------------------------------------- void __thiscall sub_454070(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi _DWORD *v4; // ST14_4 v1 = this; *this = &Tutorial::`vftable'; v2 = (int)(this + 41); *(_DWORD *)v2 = &NiTMap::`vftable'; sub_940360(this + 41); *(_DWORD *)v2 = &NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); v3 = v1[38]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8D6E10(v1 + 9); v4 = v1 + 5; *v4 = &NiTMap>::`vftable'; sub_940360(v1 + 5); *v4 = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360(v1 + 5); operator delete[]((void *)v1[7]); *v1 = &Singleton::`vftable'; if ( dword_ACCFE0 ) { (**(void (__stdcall ***)(signed int))dword_ACCFE0)(1); dword_ACCFE0 = 0; } byte_ACCFE4 = 1; } // 9B1D94: using guessed type void *Singleton::`vftable'; // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DBC: using guessed type void *NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9B1DFC: using guessed type void *NiTMap::`vftable'; // 9B1E1C: using guessed type void *Tutorial::`vftable'; // ACCFE0: using guessed type int dword_ACCFE0; // ACCFE4: using guessed type char byte_ACCFE4; //----- (00454190) -------------------------------------------------------- char __thiscall sub_454190(_DWORD *this, unsigned int a2, int *a3) { _DWORD *v3; // ebx int v4; // eax int v6; // eax int v7; // eax int v8; // ecx int v9; // eax int v10; // [esp-4h] [ebp-20h] float v11; // [esp+Ch] [ebp-10h] float v12; // [esp+10h] [ebp-Ch] float v13; // [esp+14h] [ebp-8h] float v14; // [esp+18h] [ebp-4h] v3 = this; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v4 ) return 0; v6 = *(_DWORD *)(v4 + 948); if ( !v6 ) return 0; if ( a2 >= 0xC0 ) return 0; v7 = *(_DWORD *)(v6 + 4 * a2 + 356); if ( !v7 ) return 0; v8 = v3[8]; v11 = 255.0; v10 = v8; v12 = 250.0; v13 = 205.0; v14 = 255.0; *a3 = v8; v9 = sub_455D00(v7, (int)&v11); v10 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); sub_6688B0(v3 + 5, *a3, v10); return 1; } //----- (00454240) -------------------------------------------------------- char __thiscall sub_454240(_DWORD *this, void *a2, int a3) { _DWORD *v3; // edi int v4; // eax char result; // al int v6; // esi unsigned int v7; // eax unsigned int v8; // ebx int v9; // eax int v10; // edx int v11; // eax int v12; // edi int v13; // [esp-4h] [ebp-28h] float v14; // [esp+Ch] [ebp-18h] float v15; // [esp+10h] [ebp-14h] float v16; // [esp+14h] [ebp-10h] float v17; // [esp+18h] [ebp-Ch] int *v18; // [esp+1Ch] [ebp-8h] _DWORD *v19; // [esp+20h] [ebp-4h] v3 = this; v19 = this; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v4 ) return 0; v6 = *(_DWORD *)(v4 + 716); if ( !v6 ) return 0; v7 = sub_53D4D0((_DWORD **)v6, a2); v8 = v7; if ( v7 >= 0xC0 ) return 0; v9 = *(_DWORD *)(v6 + 4 * v7 + 348); if ( !v9 ) return 0; v10 = v3[8]; v14 = 255.0; v13 = a3; v15 = 250.0; *(_DWORD *)a3 = v10; v18 = &v13; v16 = 205.0; v17 = 255.0; v11 = sub_455D00(v9, (int)&v14); v13 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); v12 = (int)(v19 + 5); sub_6688B0(v19 + 5, *(_DWORD *)a3, v13); *(_DWORD *)(v6 + 2568) = sub_53D530(a2); *(_DWORD *)(v6 + 2552) = v12; result = 1; *(_DWORD *)(v6 + 2560) = v8; *(_BYTE *)(v6 + 2557) = 1; return result; } //----- (00454330) -------------------------------------------------------- char __thiscall sub_454330(_DWORD *this, int *a2) { _DWORD *v2; // ebx int v3; // eax unsigned int v5; // edx unsigned int v6; // ecx int v7; // eax int v8; // eax int v9; // ecx int v10; // eax int v11; // [esp-4h] [ebp-20h] float v12; // [esp+Ch] [ebp-10h] float v13; // [esp+10h] [ebp-Ch] float v14; // [esp+14h] [ebp-8h] float v15; // [esp+18h] [ebp-4h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v5 = 0; v6 = 0; while ( v6 < 0x64 && dword_AD46F4[v6] ) { if ( ++v6 >= 0x12 ) goto LABEL_9; } v5 = v6; LABEL_9: v7 = *(_DWORD *)(v3 + 652); if ( !v7 ) return 0; v8 = *(_DWORD *)(v7 + 4 * v5 + 352); if ( !v8 ) return 0; v9 = v2[8]; v12 = 255.0; v11 = v9; v13 = 250.0; v14 = 205.0; v15 = 255.0; *a2 = v9; v10 = sub_455D00(v8, (int)&v12); v11 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); sub_6688B0(v2 + 5, *a2, v11); return 1; } //----- (004543F0) -------------------------------------------------------- char __thiscall sub_4543F0(_DWORD *this, _DWORD *a2, int *a3, _DWORD *a4) { _DWORD *v4; // edx int v5; // eax _DWORD *v7; // edi int v8; // ebx int (__thiscall *v9)(_DWORD *, int); // eax int v10; // eax int v11; // ecx _DWORD *v12; // esi unsigned __int8 (__thiscall *v13)(_DWORD *, int, int); // edx int v14; // eax int v15; // [esp-4h] [ebp-34h] float v16; // [esp+Ch] [ebp-24h] float v17; // [esp+10h] [ebp-20h] float v18; // [esp+14h] [ebp-1Ch] float v19; // [esp+18h] [ebp-18h] int *v20; // [esp+1Ch] [ebp-14h] int v21; // [esp+20h] [ebp-10h] int v22; // [esp+24h] [ebp-Ch] _DWORD *v23; // [esp+28h] [ebp-8h] int v24; // [esp+2Ch] [ebp-4h] v4 = a2; v5 = (a2[1] - *a2) >> 2; v23 = this; v21 = v5; if ( v5 <= 0 ) return 0; *a3 = this[8]; v24 = 0; if ( v5 > 0 ) { v7 = this + 41; while ( 1 ) { v8 = *(_DWORD *)(*v4 + 4 * v24); v9 = *(int (__thiscall **)(_DWORD *, int))(*v7 + 4); v15 = *(_DWORD *)(*v4 + 4 * v24); v10 = v9(v7, v15); v11 = v7[2]; v12 = *(_DWORD **)(v11 + 4 * v10); if ( v12 ) { while ( 1 ) { v13 = *(unsigned __int8 (__thiscall **)(_DWORD *, int, int))(*v7 + 8); v15 = v12[1]; if ( v13(v7, v8, v15) ) break; v12 = (_DWORD *)*v12; if ( !v12 ) goto LABEL_11; } v22 = v12[2]; } LABEL_11: if ( v22 ) { v15 = v11; v16 = 255.0; v20 = &v15; v17 = 250.0; v18 = 205.0; v19 = 255.0; v14 = sub_455D00(v22, (int)&v16); v15 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); sub_6688B0(v23 + 5, *a3, v15); } if ( ++v24 >= v21 ) break; v4 = a2; } this = v23; } *a4 = this[8] - *a3; return 1; } //----- (00454500) -------------------------------------------------------- char __thiscall sub_454500(_DWORD *this, int *a2) { _DWORD *v2; // ebx int v3; // eax int v5; // esi int v6; // [esp-4h] [ebp-10h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v5 = *(_DWORD *)(v3 + 776); if ( !v5 || !*(_DWORD *)(v5 + 700) || !sub_623DF0((_DWORD *)v5, *(_DWORD *)(v5 + 700)) ) return 0; *a2 = v2[8]; v6 = v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); sub_6688B0(v2 + 5, *a2, v6); return 1; } //----- (00454580) -------------------------------------------------------- void __thiscall sub_454580(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // ST00_4 int v4; // esi _DWORD *v5; // eax int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+18h] [ebp-4h] v6 = 0; v2 = this + 5; v3 = *a2; v7 = 0; sub_455570(this + 5, v3, &v6); v4 = v6; if ( v6 ) { v5 = (_DWORD *)sub_402BA0((int)&unk_BA6A8C, v6); if ( v5 ) { if ( v5[175] ) { if ( sub_621D10(v5, v5[175]) ) sub_916F40(v2, *a2); v7 = -1; sub_410C00(&v6); } else { v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } else { v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } } //----- (004546A0) -------------------------------------------------------- float *__thiscall sub_4546A0(float *this) { float *v1; // esi void *v2; // eax size_t v3; // ST08_4 void *v4; // eax size_t v5; // ST08_4 v1 = this; *(_DWORD *)this = &Tutorial::`vftable'; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; *((_WORD *)this + 8) = 0; *((_BYTE *)this + 18) = 0; *((_DWORD *)this + 5) = &NiTMapBase>,int,NiPointer>::`vftable'; *((_DWORD *)this + 6) = 37; this[8] = 0.0; v2 = operator new[](0x94u); v3 = 4 * *((_DWORD *)v1 + 6); *((_DWORD *)v1 + 7) = v2; memset(v2, 0, v3); *((_DWORD *)v1 + 5) = &NiTMap>::`vftable'; sub_8D6D20(v1 + 9); *((_DWORD *)v1 + 35) = dword_BA45C0; *((_DWORD *)v1 + 36) = dword_BA45C4; *((_DWORD *)v1 + 37) = dword_BA45C8; v1[38] = 0.0; v1[39] = 0.0; v1[40] = 0.0; *((_DWORD *)v1 + 41) = &NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; *((_DWORD *)v1 + 42) = 37; v1[44] = 0.0; v4 = operator new[](0x94u); v5 = 4 * *((_DWORD *)v1 + 42); *((_DWORD *)v1 + 43) = v4; memset(v4, 0, v5); *((_DWORD *)v1 + 41) = &NiTMap::`vftable'; return v1; } // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DBC: using guessed type void *NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9B1DFC: using guessed type void *NiTMap::`vftable'; // 9B1E1C: using guessed type void *Tutorial::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004547E0) -------------------------------------------------------- LONG __thiscall sub_4547E0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // edi char *v4; // eax volatile LONG *v5; // esi int (__thiscall *v6)(volatile LONG *, const char *); // eax _DWORD *v7; // eax int v8; // esi _DWORD *v9; // edi void *v10; // ecx int v11; // esi LONG result; // eax volatile LONG *v13; // [esp-4h] [ebp-2Ch] volatile LONG *v14; // [esp+10h] [ebp-18h] _DWORD *v15; // [esp+14h] [ebp-14h] int v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v2 = this; if ( !byte_ACAD5C ) sub_420410(); v3 = 0; v4 = (char *)sub_401410(byte_ACA520, "Misc\\TutorialMark.nif"); v5 = sub_8F63D0(v4, 0); v14 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); v6 = *(int (__thiscall **)(volatile LONG *, const char *))(*v5 + 72); v17 = 0; v16 = v6(v5, "Plane01"); if ( v16 ) { v7 = operator new(0xE8u); LOBYTE(v17) = 1; if ( v7 ) v3 = sub_85A1C0(v7, 0); v8 = v2[38]; LOBYTE(v17) = 0; if ( (_DWORD *)v8 != v3 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v2[38] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v9 = *(_DWORD **)(v16 + 160); while ( v9 ) { v10 = (void *)v9[2]; v9 = (_DWORD *)*v9; v15 = (_DWORD *)v2[38]; v11 = sub_85BD60(v10); v16 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); LOBYTE(v17) = 2; sub_8A6330(v15 + 39, &v16); LOBYTE(v17) = 0; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_ADB67C + 116))(v2[38], 0); sub_8D7630(v2 + 9); v2[9] = dword_ADB6D8; sub_40C270(v2 + 9, dword_ADB6B0); v2[39] = sub_402110(a2); v5 = v14; v2[40] = sub_43EB00(a2); v13 = v14 + 1; } else { v13 = v5 + 1; } v17 = -1; result = InterlockedDecrement(v13); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ADB67C: using guessed type int dword_ADB67C; // ADB6B0: using guessed type int dword_ADB6B0; // ADB6D8: using guessed type int dword_ADB6D8; //----- (004549D0) -------------------------------------------------------- int __thiscall sub_4549D0(_DWORD *this, char a2, int a3, int a4, int a5, float a6) { int result; // eax result = this[38]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; this[35] = a3; this[36] = a4; this[37] = a5; result = sub_4558F0((int)(this + 9), a6, a6); } return result; } //----- (00454A30) -------------------------------------------------------- char __thiscall sub_454A30(_DWORD *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // ebx void (__thiscall ***v5)(_DWORD, signed int); // ebx LONG (__stdcall *v6)(volatile LONG *); // ebx LONG v7; // eax _DWORD *v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] _DWORD *v11; // [esp+1Ch] [ebp-10h] int v12; // [esp+28h] [ebp-4h] v11 = 0; v12 = 0; v9 = this + 5; sub_455570(this + 5, a2, (int *)&v11); v2 = (int)v11; if ( v11 ) { v3 = (volatile LONG *)sub_402BF0(v11); if ( v3 ) InterlockedIncrement(v3 + 1); LOBYTE(v12) = 1; if ( v3 ) { sub_455710((void *)v3, &v10, v2); if ( v10 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v2); v5 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v5 ) (**v5)(v5, 1); v6 = InterlockedDecrement; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v2 = 0; v11 = 0; LOBYTE(v12) = 0; if ( v3 && !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } else { v6 = InterlockedDecrement; } LOBYTE(v7) = sub_916F40(v9, a2); v12 = -1; if ( v2 ) { v7 = v6((volatile LONG *)(v2 + 4)); if ( !v7 ) LOBYTE(v7) = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } return v7; } //----- (00454B90) -------------------------------------------------------- char __thiscall sub_454B90(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // edi int v4; // eax _DWORD *v6; // esi int v7; // ecx int v8; // edx int v9; // edi void *v10; // eax int v11; // edi int v12; // esi int v13; // eax int v14; // [esp-4h] [ebp-48h] float v15; // [esp+10h] [ebp-34h] float v16; // [esp+14h] [ebp-30h] float v17; // [esp+18h] [ebp-2Ch] float v18; // [esp+1Ch] [ebp-28h] void *v19; // [esp+20h] [ebp-24h] int v20; // [esp+24h] [ebp-20h] int v21; // [esp+28h] [ebp-1Ch] int *v22; // [esp+30h] [ebp-14h] _DWORD *v23; // [esp+34h] [ebp-10h] int v24; // [esp+40h] [ebp-4h] v3 = this; v23 = this; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v4 ) return 0; v6 = *(_DWORD **)(v4 + 712); if ( !v6 ) return 0; v19 = 0; v20 = 0; v21 = 0; v22 = (int *)v6[143]; v24 = 0; sub_5B3CF0(&v19, &v22); v22 = (int *)v6[144]; sub_5B3CF0(&v19, &v22); v22 = (int *)v6[145]; sub_5B3CF0(&v19, &v22); v22 = (int *)v6[146]; sub_5B3CF0(&v19, &v22); v22 = (int *)v6[147]; sub_5B3CF0(&v19, &v22); v8 = v3[8]; v9 = v20; *a2 = v8; v10 = v19; v11 = (v9 - (signed int)v19) >> 2; v12 = 0; if ( v11 > 0 ) { do { v15 = 255.0; v14 = v7; v16 = 250.0; v22 = &v14; v17 = 205.0; v18 = 255.0; v13 = sub_455D00(*((_DWORD *)v19 + v12), (int)&v15); v14 = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); sub_6688B0(v23 + 5, v12++ + *a2, v14); } while ( v12 < v11 ); v10 = v19; } *a3 = v23[8] - *a2; if ( v10 ) operator delete(v10); return 1; } //----- (00454D20) -------------------------------------------------------- char __thiscall sub_454D20(_DWORD *this, void *a2, int a3) { int v3; // eax int v5; // ebx unsigned int v6; // edi _WORD **v7; // ebx _WORD *v8; // esi int v9; // ecx int v10; // eax int v11; // [esp-4h] [ebp-24h] float v12; // [esp+Ch] [ebp-14h] float v13; // [esp+10h] [ebp-10h] float v14; // [esp+14h] [ebp-Ch] float v15; // [esp+18h] [ebp-8h] _DWORD *v16; // [esp+1Ch] [ebp-4h] _WORD *v17; // [esp+28h] [ebp+8h] v16 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v5 = *(_DWORD *)(v3 + 728); if ( !v5 ) return 0; v17 = (_WORD *)sub_438F10(a2); if ( !v17 ) return 0; v6 = 0; v7 = (_WORD **)(v5 + 352); do { v8 = *v7; if ( *v7 && sub_5D6F80(*v7) == *v17 ) break; ++v6; ++v7; } while ( v6 < 8 ); v9 = v16[8]; v12 = 255.0; v11 = v9; v13 = 250.0; v14 = 205.0; v15 = 255.0; *(_DWORD *)a3 = v9; v10 = sub_455D00((int)v8, (int)&v12); v11 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); sub_6688B0(v16 + 5, *(_DWORD *)a3, v11); return 1; } //----- (00454E00) -------------------------------------------------------- char __stdcall sub_454E00(void *a1) { __int16 *v1; // eax char result; // al v1 = (__int16 *)sub_438F10(a1); if ( v1 ) result = sub_6BE330(*v1); else result = 0; return result; } //----- (00454E30) -------------------------------------------------------- bool __stdcall sub_454E30(void *a1) { int v1; // eax __int16 v2; // si _WORD *v3; // eax bool result; // al if ( dword_BA6BCC && (v1 = *(_DWORD *)(dword_BA6BCC + 4)) != 0 && (v2 = *(_WORD *)(v1 + 20), v2 != -1) && (v3 = (_WORD *)sub_438F10(a1)) != 0 ) { result = *v3 == v2; } else { result = 0; } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00454E80) -------------------------------------------------------- char __thiscall sub_454E80(_DWORD *this, void *a2, int a3, int a4, int a5) { int v5; // eax unsigned int v6; // ebx unsigned int v8; // edi unsigned int v9; // eax unsigned int v10; // esi char *v11; // eax _DWORD *v12; // eax int v13; // esi int v14; // edx int v15; // eax int v16; // esi void *v17; // edi int v18; // [esp-4h] [ebp-30h] float v19; // [esp+Ch] [ebp-20h] float v20; // [esp+10h] [ebp-1Ch] float v21; // [esp+14h] [ebp-18h] float v22; // [esp+18h] [ebp-14h] _WORD *v23; // [esp+1Ch] [ebp-10h] _DWORD *v24; // [esp+20h] [ebp-Ch] _DWORD *v25; // [esp+24h] [ebp-8h] unsigned int v26; // [esp+28h] [ebp-4h] void *v27; // [esp+34h] [ebp+8h] v25 = this; v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = 0; if ( !v5 ) return 0; v24 = *(_DWORD **)(v5 + 936); if ( !v24 ) return 0; v23 = (_WORD *)sub_40C8D0(a2); if ( !v23 ) return 0; v8 = 42 * a4; v26 = 0; if ( a3 ) { if ( a3 != 1 ) { if ( a3 == 2 ) { v9 = sub_631060(); goto LABEL_11; } return 0; } v9 = sub_631050(); } else { v9 = sub_631040(); } LABEL_11: v27 = (void *)v9; v10 = 42 * a4; if ( v8 < v9 ) { while ( v6 < 0x2A ) { if ( a3 ) { if ( a3 == 1 ) { v11 = sub_631090(v10); } else { if ( a3 != 2 ) return 0; v11 = sub_6310B0(v10); } } else { v11 = sub_631070(v10); } if ( v11 && *(_WORD *)(v11 + 1) == *v23 ) { v26 = v10 - v8; break; } ++v10; ++v6; if ( v10 >= (unsigned int)v27 ) break; } } v12 = (_DWORD *)sub_549FD0(v24, v26); v13 = (int)v12; if ( !v12 ) return 0; sub_5D4A30(v12, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v13 + 240))(v13, 1); v19 = 255.0; v14 = v25[8]; v20 = 250.0; v18 = (int)v25; v21 = 205.0; v22 = 255.0; *(_DWORD *)a5 = v14; v15 = sub_455D00(v13, (int)&v19); v18 = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); sub_6688B0(v25 + 5, *(_DWORD *)a5, v18); v16 = 2; if ( a3 ) { if ( a3 == 1 ) { v16 = 3; } else if ( a3 == 2 ) { v16 = 4; } } v17 = v24; if ( sub_8FA3D0(&unk_BA6B10, v24) ) sub_8F2A80(v17, 5, v16, 0); if ( sub_8FA3D0(&unk_BA6B10, (volatile LONG *)v17) ) sub_8F2A80(v17, 5, 12, a4); return 1; } //----- (00455040) -------------------------------------------------------- char __thiscall sub_455040(_DWORD *this, void *a2, int a3, int a4, int a5) { int v5; // eax unsigned int v6; // ebx unsigned int v7; // edi unsigned int v8; // eax unsigned int v9; // esi char *v10; // eax _DWORD *v11; // eax int v12; // esi int v13; // ecx int v14; // eax void *v15; // esi int v17; // [esp-4h] [ebp-30h] float v18; // [esp+Ch] [ebp-20h] float v19; // [esp+10h] [ebp-1Ch] float v20; // [esp+14h] [ebp-18h] float v21; // [esp+18h] [ebp-14h] _WORD *v22; // [esp+1Ch] [ebp-10h] _DWORD *v23; // [esp+20h] [ebp-Ch] _DWORD *v24; // [esp+24h] [ebp-8h] unsigned int v25; // [esp+28h] [ebp-4h] void *v26; // [esp+34h] [ebp+8h] v24 = this; v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = 0; if ( !v5 ) return 0; v23 = *(_DWORD **)(v5 + 944); if ( !v23 ) return 0; v22 = (_WORD *)sub_40C8D0(a2); if ( !v22 ) return 0; v7 = 42 * a4; v25 = 0; switch ( a3 ) { case 0: v8 = sub_6314A0(); break; case 1: v8 = sub_6314B0(); break; case 2: v8 = sub_6314C0(); break; case 3: v8 = sub_6314D0(); break; case 4: v8 = sub_6314F0(); break; default: return 0; } v26 = (void *)v8; v9 = 42 * a4; if ( v7 < v8 ) { while ( v6 < 0x2A ) { switch ( a3 ) { case 0: v10 = sub_631100(v9); break; case 1: v10 = sub_631120(v9); break; case 2: v10 = sub_631140(v9); break; case 3: v10 = sub_631160(v9); break; case 4: v10 = sub_631200(v9); break; } if ( v10 && *(_WORD *)(v10 + 1) == *v22 ) { v25 = v9 - v7; break; } ++v9; ++v6; if ( v9 >= (unsigned int)v26 ) break; } } v11 = (_DWORD *)sub_577440(v23, v25); v12 = (int)v11; if ( !v11 ) return 0; sub_5D4A30(v11, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v12 + 240))(v12, 1); v18 = 255.0; v13 = v24[8]; v19 = 250.0; v17 = v13; v20 = 205.0; v21 = 255.0; *(_DWORD *)a5 = v13; v14 = sub_455D00(v12, (int)&v18); v17 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); sub_6688B0(v24 + 5, *(_DWORD *)a5, v17); v15 = v23; if ( sub_8FA3D0(&unk_BA6B10, v23) ) sub_8F2A80(v15, 5, 2, 0); if ( sub_8FA3D0(&unk_BA6B10, (volatile LONG *)v15) ) sub_8F2A80(v15, 5, 8, a3); if ( sub_8FA3D0(&unk_BA6B10, (volatile LONG *)v15) ) sub_8F2A80(v15, 5, 12, a4); return 1; } //----- (00455250) -------------------------------------------------------- char __stdcall sub_455250(void *a1, int a2, int a3) { int v3; // eax unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // esi unsigned int v8; // ebx char *v9; // eax unsigned int v10; // edi _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // [esp+0h] [ebp-Ch] _WORD *v14; // [esp+4h] [ebp-8h] int v15; // [esp+8h] [ebp-4h] void *v16; // [esp+14h] [ebp+8h] v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v13 = *(_DWORD **)(v3 + 936); if ( !v13 ) return 0; v14 = (_WORD *)sub_40C8D0(a1); v5 = 42 * a3; v15 = 42; if ( a2 ) { if ( a2 == 1 ) { v6 = sub_631050(); } else { if ( a2 != 2 ) return 0; v6 = sub_631060(); } } else { v6 = sub_631040(); } v16 = (void *)v6; v7 = 42 * a3; if ( v5 < v6 ) { v8 = 0; while ( v8 < 0x2A ) { if ( a2 ) { if ( a2 == 1 ) { v9 = sub_631090(v7); } else { if ( a2 != 2 ) return 0; v9 = sub_6310B0(v7); } } else { v9 = sub_631070(v7); } if ( v9 && v14 && *(_WORD *)(v9 + 1) == *v14 ) { v15 = v7 - v5; break; } ++v7; ++v8; if ( v7 >= (unsigned int)v16 ) break; } } v10 = 0; do { if ( v10 != v15 ) { v11 = (_DWORD *)sub_549FD0(v13, v10); v12 = v11; if ( v11 ) { sub_5D4A30(v11, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v12 + 240))(v12, 0); } } ++v10; } while ( v10 < 0x2A ); return 1; } //----- (00455370) -------------------------------------------------------- char __stdcall sub_455370(void *a1, int a2, int a3) { int v3; // eax unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // esi unsigned int v8; // ebx char *v9; // eax unsigned int v10; // edi _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // [esp+0h] [ebp-Ch] _WORD *v14; // [esp+4h] [ebp-8h] int v15; // [esp+8h] [ebp-4h] void *v16; // [esp+14h] [ebp+8h] v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v13 = *(_DWORD **)(v3 + 944); if ( !v13 ) return 0; v14 = (_WORD *)sub_40C8D0(a1); v5 = 42 * a3; v15 = 42; switch ( a2 ) { case 0: v6 = sub_6314A0(); goto LABEL_10; case 1: v6 = sub_6314B0(); goto LABEL_10; case 2: v6 = sub_6314C0(); goto LABEL_10; case 3: v6 = sub_6314D0(); goto LABEL_10; case 4: v6 = sub_6314F0(); LABEL_10: v16 = (void *)v6; v7 = 42 * a3; if ( v5 >= v6 ) goto LABEL_23; v8 = 0; break; default: return 0; } while ( v8 < 0x2A ) { switch ( a2 ) { case 0: v9 = sub_631100(v7); break; case 1: v9 = sub_631120(v7); break; case 2: v9 = sub_631140(v7); break; case 3: v9 = sub_631160(v7); break; case 4: v9 = sub_631200(v7); break; } if ( v9 && v14 && *(_WORD *)(v9 + 1) == *v14 ) { v15 = v7 - v5; break; } ++v7; ++v8; if ( v7 >= (unsigned int)v16 ) break; } LABEL_23: v10 = 0; do { if ( v10 != v15 ) { v11 = (_DWORD *)sub_577440(v13, v10); v12 = v11; if ( v11 ) { sub_5D4A30(v11, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v12 + 240))(v12, 0); } } ++v10; } while ( v10 < 0x2A ); return 1; } //----- (00455500) -------------------------------------------------------- void *__thiscall sub_455500(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Singleton::`vftable'; if ( dword_ACCFE0 ) { (**(void (__stdcall ***)(signed int))dword_ACCFE0)(1); dword_ACCFE0 = 0; } byte_ACCFE4 = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1D94: using guessed type void *Singleton::`vftable'; // ACCFE0: using guessed type int dword_ACCFE0; // ACCFE4: using guessed type char byte_ACCFE4; //----- (00455570) -------------------------------------------------------- char __thiscall sub_455570(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi _DWORD *v4; // esi int v6; // edi int v7; // esi v3 = this; v4 = *(_DWORD **)(this[2] + 4 * (*(int (__stdcall **)(int))(*this + 4))(a2)); if ( !v4 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, v4[1]) ) { v4 = (_DWORD *)*v4; if ( !v4 ) return 0; } v6 = *a3; if ( *a3 != v4[2] ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v4[2]; *a3 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } return 1; } //----- (00455600) -------------------------------------------------------- void __thiscall sub_455600(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; //----- (00455690) -------------------------------------------------------- void **__thiscall sub_455690(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; //----- (004556D0) -------------------------------------------------------- void **__thiscall sub_4556D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1DBC: using guessed type void *NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; //----- (00455710) -------------------------------------------------------- int *__thiscall sub_455710(void *this, int *a2, int a3) { int v3; // ecx int v4; // esi int v5; // eax int v6; // eax char v7; // al void (__thiscall ***v8)(_DWORD, signed int); // esi (*(void (__stdcall **)(int *, int))(*(_DWORD *)this + 120))(&a3, a3); v3 = a3; v4 = a3; if ( a3 ) { v6 = (*(int (**)(void))(*(_DWORD *)a3 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6A8C ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v3 = a3; v5 = v7 != 0 ? v4 : 0; } else { v5 = 0; } *a2 = v5; if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); v3 = a3; } if ( v3 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } return a2; } //----- (004557F0) -------------------------------------------------------- void **__thiscall sub_4557F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; //----- (00455870) -------------------------------------------------------- void **__thiscall sub_455870(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1DBC: using guessed type void *NiTMapBase,enum Tutorial::eBlinkEffectType,PgWin *>::`vftable'; // 9B1DFC: using guessed type void *NiTMap::`vftable'; //----- (004558F0) -------------------------------------------------------- int __thiscall sub_4558F0(int this, float a2, float a3) { int v3; // esi int result; // eax float *v5; // edi int v6; // edx int v7; // [esp+14h] [ebp-Ch] float v8; // [esp+18h] [ebp-8h] float v9; // [esp+1Ch] [ebp-4h] v3 = this; result = *(_DWORD *)(this + 8); *(float *)(this + 20) = a2; *(float *)(this + 24) = a3; if ( result ) { v5 = *(float **)(*(_DWORD *)(result + 172) + 44); result = (*(int (__thiscall **)(float *))(*(_DWORD *)v5 + 12))(v5); if ( result == 1 ) { v5[13] = *(float *)(v3 + 24) * 0.5; v5[14] = 0.5 * *(float *)(v3 + 20); v5[15] = *(float *)(v3 + 20); sub_8D8240((_DWORD *)(*(_DWORD *)(v3 + 8) + 176)); v6 = *(_DWORD *)(v3 + 8); *(float *)&v7 = 0.0; v8 = 0.0; v9 = 1.0; sub_8B8B90(v6, (int)&v7, 1.0, "WireABVTemp", 0); result = sub_85BED0(*(_DWORD ***)(v3 + 8), 0.0, 1); } } return result; } //----- (00455990) -------------------------------------------------------- void *__thiscall sub_455990(void *this, char a2) { void *v2; // esi v2 = this; sub_454070(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004559C0) -------------------------------------------------------- void __stdcall sub_4559C0(void *a1) { int v1; // esi int v2; // esi v1 = *((_DWORD *)a1 + 2); if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); *((_DWORD *)a1 + 2) = 0; } if ( a1 ) { v2 = *((_DWORD *)a1 + 2); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } operator delete(a1); } } //----- (00455A80) -------------------------------------------------------- char __thiscall sub_455A80(void *this, int a2, float *a3) { unsigned int v3; // edi unsigned int v4; // ebx int *v5; // eax char result; // al void *v7; // [esp+Ch] [ebp-4h] v3 = 0; v4 = 0; v7 = this; if ( a2 ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 144))(a2); v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 148))(a2); } v5 = sub_8F62B0((signed int)*a3, (signed int)a3[1], (signed int)a3[2], (signed int)a3[3]); result = sub_8F42E0(v7, v5, 0, 0, v3, v4, a2, 0, 0); if ( result ) { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v7 + 240))(v7, 0); result = 1; } return result; } //----- (00455B80) -------------------------------------------------------- char __thiscall sub_455B80(void *this, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6, float *a7) { void *v7; // esi int *v8; // eax char result; // al v7 = this; v8 = sub_8F62B0((signed int)*a7, (signed int)a7[1], (signed int)a7[2], (signed int)a7[3]); result = sub_8F42E0(v7, v8, a2, a3, a4, a5, a6, 0, 0); if ( result ) { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v7 + 240))(v7, 0); result = 1; } return result; } //----- (00455C60) -------------------------------------------------------- int __userpurge sub_455C60@(_BYTE *a1@, double a2@, int a3) { _BYTE *v3; // esi double v4; // st6 float v5; // ST08_4 double v6; // st7 float v7; // ST08_4 float v8; // ST00_4 float v10; // [esp+8h] [ebp-4h] v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 280))(); v10 = a2; if ( !v3[296] ) { v4 = v10; if ( v10 <= 1.0 ) { v7 = v4 + flt_ACCFD0; v4 = v7; } if ( v4 >= 1.0 ) { v3[296] = 1; v6 = (float)1.0; goto LABEL_11; } LABEL_10: v6 = v4; goto LABEL_11; } v4 = v10; if ( v10 >= 0.0 ) { v5 = v4 - flt_ACCFD0; v4 = v5; } if ( v4 > 0.0 ) goto LABEL_10; v3[296] = 0; v6 = (float)0.0; LABEL_11: v8 = v6; return (*(int (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v3 + 276))(v3, LODWORD(v8)); } // ACCFD0: using guessed type float flt_ACCFD0; //----- (00455D00) -------------------------------------------------------- int __cdecl sub_455D00(int a1, int a2) { _DWORD *v2; // eax int v3; // esi void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x12Cu); v3 = (int)v2; v6 = v2; v7 = 0; if ( v2 ) { sub_8F3C20(v2); *(_DWORD *)v3 = &UIBlinkEffect::`vftable'; *(_DWORD *)(v3 + 232) = &UIBlinkEffect::`vftable'; *(_BYTE *)(v3 + 296) = 0; } else { v3 = 0; } if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v3); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 520))(v3, a1, a2) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = 0; } return result; } // 9B1E3C: using guessed type void *UIBlinkEffect::`vftable'; // 9B1E5C: using guessed type void *UIBlinkEffect::`vftable'; //----- (00455FB0) -------------------------------------------------------- void *__thiscall sub_455FB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &UIBlinkEffect::`vftable'; *((_DWORD *)this + 58) = &UIBlinkEffect::`vftable'; sub_8F3CC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B1E3C: using guessed type void *UIBlinkEffect::`vftable'; // 9B1E5C: using guessed type void *UIBlinkEffect::`vftable'; //----- (00455FF0) -------------------------------------------------------- int __thiscall sub_455FF0(_DWORD *this, int a2) { int result; // eax result = a2; this[3] = a2; return result; } //----- (00456000) -------------------------------------------------------- int __thiscall sub_456000(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[1] = a2; this[2] = a3; return result; } //----- (00456040) -------------------------------------------------------- volatile LONG *__stdcall sub_456040(int a1, int a2, char a3, int a4, int a5, int a6, int a7) { int v7; // esi int v8; // ST10_4 int v9; // ST0C_4 int v10; // eax volatile LONG *v11; // esi v7 = a1; v8 = sub_421050(0); v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 148))(v7); v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 144))(v7); v11 = sub_8F4A20(0, 1, v10, v9, v8, a1, 0, 0); (*(void (__thiscall **)(volatile LONG *, int))(*v11 + 488))(v11, a7); (*(void (__thiscall **)(volatile LONG *, int))(*v11 + 472))(v11, a2); (*(void (__thiscall **)(volatile LONG *, char *))(*v11 + 468))(v11, &a3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); return v11; } //----- (004560E0) -------------------------------------------------------- _DWORD *__stdcall sub_4560E0(void *a1, int a2) { _DWORD *v3; // eax _DWORD *v4; // esi int v5; // [esp+Ch] [ebp-40h] int cWidth; // [esp+10h] [ebp-3Ch] int cWeight; // [esp+14h] [ebp-38h] DWORD bItalic; // [esp+18h] [ebp-34h] DWORD iCharSet; // [esp+1Ch] [ebp-30h] DWORD iOutPrecision; // [esp+20h] [ebp-2Ch] DWORD iQuality; // [esp+24h] [ebp-28h] DWORD iPitchAndFamily; // [esp+28h] [ebp-24h] LPCSTR pszFaceName; // [esp+2Ch] [ebp-20h] int v14; // [esp+48h] [ebp-4h] if ( (signed int)a1 >= 12 ) return 0; qmemcpy(&v5, sub_420870((int)a1), 0x34u); v3 = operator new(0x184u); v14 = 0; if ( v3 ) v4 = sub_9063E0(v3); else v4 = 0; v14 = -1; if ( v4 ) sub_900390( (int)v4, pszFaceName, v5, cWidth, cWeight, bItalic, iCharSet, iOutPrecision, iQuality, iPitchAndFamily, a2, 512, 5); return v4; } //----- (004561C0) -------------------------------------------------------- volatile LONG *__thiscall sub_4561C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, char a15) { volatile LONG *v15; // ST28_4 _DWORD *v16; // esi char v17; // ST24_1 volatile LONG *v18; // eax volatile LONG *v19; // esi v15 = (volatile LONG *)dword_AD01E8; v16 = this; v17 = a15; v18 = (volatile LONG *)sub_421050(2); v19 = sub_90AEF0( a8 + a2 - v16[1], a8 + a3 - v16[2], a4 - a8, a5 - a8, v18, a7, 0, 0, 0, v17, v15, (volatile LONG *)0x1E); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 488))(v19, a13); (*(void (__thiscall **)(volatile LONG *, char *))(*v19 + 468))(v19, &a9); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 472))(v19, a6); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); return v19; } // AD01E8: using guessed type int dword_AD01E8; //----- (00456260) -------------------------------------------------------- _DWORD *__thiscall sub_456260(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; *this = &UIUtil::`vftable'; this[4] = 0; this[1] = 0; this[2] = 0; this[3] = 0; v2 = this[4]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[4] = 0; } return v1; } // 9B20A4: using guessed type void *UIUtil::`vftable'; //----- (004562E0) -------------------------------------------------------- void __thiscall sub_4562E0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // edi v1 = this; *this = &UIUtil::`vftable'; v2 = this[4]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[4] = 0; } v3 = v1[4]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9B20A4: using guessed type void *UIUtil::`vftable'; //----- (00456380) -------------------------------------------------------- void __thiscall sub_456380(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[4]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[4] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (004563D0) -------------------------------------------------------- volatile LONG *__thiscall sub_4563D0(int *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7) { int *v7; // esi volatile LONG **v8; // edi v7 = this; v8 = sub_8FB140(this[4], a3, (int)&a3, (int)&a7, a7); if ( a4 ) sub_8FB650(v8, v7[4], a4); if ( a5 ) sub_8FB650(v8, v7[4], a5); if ( a6 ) sub_8FB650(v8, v7[4], a6); return sub_8FE0F0(a3 - v7[1], (int)a7 - v7[2], (int)v8, v7[3], a2, 0, 0); } //----- (00456460) -------------------------------------------------------- volatile LONG *__thiscall sub_456460(int *this, int a2, int a3) { int *v3; // esi volatile LONG *result; // eax int v5; // [esp+4h] [ebp-Ch] int v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v3 = this; if ( sub_8F71E0(this[4], a3, &v5, &v6, &v7, &a3) ) result = sub_8FE250(v5 - v3[1], v6 - v3[2], v7, a3, v3[3], a2, 0, 0); else result = 0; return result; } //----- (004564D0) -------------------------------------------------------- volatile LONG *__thiscall sub_4564D0(int *this, int a2, int a3, int a4) { int *v4; // esi volatile LONG **v5; // edi int v7; // [esp+8h] [ebp-4h] v4 = this; v5 = sub_8FB140(this[4], a2, (int)&v7, (int)&a2, 0); if ( a3 ) sub_8FB650(v5, v4[4], a3); if ( a4 ) sub_8FB650(v5, v4[4], a4); return sub_90C8D0(v7 - v4[1], a2 - v4[2], (int)v5, v4[3]); } //----- (00456540) -------------------------------------------------------- volatile LONG *__thiscall sub_456540(int *this, int a2, int a3, int a4, volatile LONG *a5, int a6) { int v6; // edi int *v7; // esi volatile LONG **v9; // eax int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v6 = a2; v7 = this; if ( !sub_8F71E0(this[4], a2, &v12, &a2, &v10, &v11) ) return 0; v9 = sub_8FB140(v7[4], v6, (int)&v12, (int)&a2, a5); sub_8F3EB0(v12, a2, (int)v9, v7[3], 0, 0); return sub_45E350(v12 - v7[1] + 2, a2 - v7[2] + 2, v10 - 3, v11, v7[3], a4, a3, 0, a6, 0, 1, 0); } //----- (004565F0) -------------------------------------------------------- volatile LONG *__thiscall sub_4565F0(int *this, int a2, int a3, int a4, volatile LONG *a5, int a6) { int v6; // edi int *v7; // esi volatile LONG **v9; // eax int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v6 = a2; v7 = this; if ( !sub_8F71E0(this[4], a2, &v12, &a2, &v10, &v11) ) return 0; v9 = sub_8FB140(v7[4], v6, (int)&v12, (int)&a2, a5); sub_8F3EB0(v12 - v7[1], a2 - v7[2], (int)v9, v7[3], 0, 0); return sub_45A900(v12 - v7[1] + 2, a2 - v7[2] + 4, v10 + 10, v11, v7[3], a4, a3, 1, a6, 0, 1); } //----- (004566A0) -------------------------------------------------------- volatile LONG *__thiscall sub_4566A0(int *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8, int a9, int a10) { int *v10; // esi int v12; // ST14_4 int v13; // eax volatile LONG *v14; // esi int v15; // [esp+4h] [ebp-Ch] int v16; // [esp+8h] [ebp-8h] int v17; // [esp+Ch] [ebp-4h] v10 = this; if ( !sub_8F71E0(this[4], a2, &v15, &v16, &v17, &a2) ) return 0; v12 = v10[3]; v13 = sub_421050(2); v14 = sub_8F4A20(v15 - v10[1] - a9 - 2, v16 - v10[2] - a10 + 2, v17, a2, v13, v12, 0, 0); (*(void (__thiscall **)(volatile LONG *, int))(*v14 + 488))(v14, a8); (*(void (__thiscall **)(volatile LONG *, char *))(*v14 + 468))(v14, &a4); (*(void (__thiscall **)(volatile LONG *, int))(*v14 + 472))(v14, a3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); return v14; } //----- (00456760) -------------------------------------------------------- volatile LONG *__thiscall sub_456760(int *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { int *v8; // esi int v10; // ST14_4 int v11; // eax volatile LONG *v12; // esi int v13; // [esp+4h] [ebp-Ch] int v14; // [esp+8h] [ebp-8h] int v15; // [esp+Ch] [ebp-4h] v8 = this; if ( !sub_8F71E0(this[4], a2, &v13, &v14, &v15, &a2) ) return 0; v10 = v8[3]; v11 = sub_421050(2); v12 = sub_8F4A20(v13 - v8[1] - 2, v14 - v8[2] + 2, v15, a2, v11, v10, 0, 0); (*(void (__thiscall **)(volatile LONG *, int))(*v12 + 488))(v12, a8); (*(void (__thiscall **)(volatile LONG *, char *))(*v12 + 468))(v12, &a4); (*(void (__thiscall **)(volatile LONG *, int))(*v12 + 472))(v12, a3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return v12; } //----- (00456820) -------------------------------------------------------- volatile LONG *__thiscall sub_456820(int *this, int a2, volatile LONG *a3) { int *v3; // esi volatile LONG **v4; // eax v3 = this; v4 = sub_8FB140(this[4], a2, (int)&a2, (int)&a3, a3); return sub_8F3EB0(a2 - v3[1], (int)a3 - v3[2], (int)v4, v3[3], 0, 0); } //----- (00456980) -------------------------------------------------------- volatile LONG *__thiscall sub_456980(int *this, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, volatile LONG *a10, char a11) { int *v11; // esi volatile LONG **v12; // edi int v13; // eax int v14; // edi int v15; // ebx volatile LONG *v16; // ST28_4 char v17; // ST24_1 _DWORD *v18; // ST14_4 volatile LONG *v19; // eax volatile LONG *v20; // esi v11 = this; v12 = sub_8FB140(this[4], a2, (int)&a2, (int)&a10, a10); sub_8F3EB0(a2 - v11[1], (int)a10 - v11[2], (int)v12, v11[3], 0, 0); v13 = *v12[9]; v14 = *(_DWORD *)(v13 + 20); v15 = *(_DWORD *)(v13 + 24); v16 = (volatile LONG *)dword_AD01E8; v17 = a11; v18 = (_DWORD *)v11[3]; v19 = (volatile LONG *)sub_421050(2); v20 = sub_90AEF0( a4 + a2 - v11[1], (int)a10 + a4 - v11[2] + 2, v14 - a4, v15 - a4, v19, v18, 0, 0, 0, v17, v16, (volatile LONG *)0x1E); (*(void (__thiscall **)(volatile LONG *, int))(*v20 + 488))(v20, a9); (*(void (__thiscall **)(volatile LONG *, char *))(*v20 + 468))(v20, &a5); (*(void (__thiscall **)(volatile LONG *, int))(*v20 + 472))(v20, a3); return v20; } // AD01E8: using guessed type int dword_AD01E8; //----- (00456A50) -------------------------------------------------------- volatile LONG *__thiscall sub_456A50(int *this, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, volatile LONG *a10, int a11, int a12) { int *v12; // esi volatile LONG **v13; // edi int v14; // eax int v15; // edi int v16; // ebx int v17; // ST20_4 int v18; // eax volatile LONG *v19; // esi v12 = this; v13 = sub_8FB140(this[4], a2, (int)&a2, (int)&a10, a10); sub_8F3EB0(a2 - v12[1], (int)a10 - v12[2], (int)v13, v12[3], 0, 0); v14 = *v13[9]; v15 = *(_DWORD *)(v14 + 20); v16 = *(_DWORD *)(v14 + 24); v17 = v12[3]; v18 = sub_421050(2); v19 = sub_8F4A20(a4 + a2 - v12[1] - a12, (int)a10 + a4 - v12[2] + a11, v15 - a4, v16 - a4, v18, v17, 0, 0); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 488))(v19, a9); (*(void (__thiscall **)(volatile LONG *, char *))(*v19 + 468))(v19, &a5); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 472))(v19, a3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); return v19; } //----- (00456B30) -------------------------------------------------------- volatile LONG *__thiscall sub_456B30(_DWORD *this, int a2, void *a3, int a4, int a5) { _DWORD *v5; // esi void *v6; // ecx int v8; // edi void *v9; // ecx volatile LONG *v10; // esi int v11; // [esp+14h] [ebp-C8h] int v12; // [esp+18h] [ebp-C4h] int v13; // [esp+1Ch] [ebp-C0h] volatile LONG **v14; // [esp+20h] [ebp-BCh] void *v15; // [esp+24h] [ebp-B8h] int v16; // [esp+34h] [ebp-A8h] unsigned int v17; // [esp+38h] [ebp-A4h] void *v18; // [esp+40h] [ebp-9Ch] int v19; // [esp+50h] [ebp-8Ch] unsigned int v20; // [esp+54h] [ebp-88h] void *v21; // [esp+5Ch] [ebp-80h] int v22; // [esp+6Ch] [ebp-70h] unsigned int v23; // [esp+70h] [ebp-6Ch] char v24; // [esp+78h] [ebp-64h] int v25; // [esp+88h] [ebp-54h] int v26; // [esp+8Ch] [ebp-50h] char v27; // [esp+94h] [ebp-48h] int v28; // [esp+A4h] [ebp-38h] int v29; // [esp+A8h] [ebp-34h] char v30; // [esp+B0h] [ebp-2Ch] int v31; // [esp+C0h] [ebp-1Ch] int v32; // [esp+C4h] [ebp-18h] int v33; // [esp+D8h] [ebp-4h] v5 = this; v14 = (volatile LONG **)a4; v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4018E0(&v15, a3, strlen((const char *)a3)); v33 = 0; sub_427A80(&v21, (int)&v15, &unk_9B2068); v6 = v21; LOBYTE(v33) = 1; if ( v23 < 0x10 ) v6 = &v21; v14 = sub_8FB140(v5[4], (int)v6, (int)&v12, (int)&v11, (volatile LONG *)v14); if ( v14 ) { v26 = 15; v25 = 0; v24 = 0; sub_4018E0(&v24, "Click", 5u); LOBYTE(v33) = 2; v29 = 15; v28 = 0; v27 = 0; sub_4018E0(&v27, "Over", 4u); LOBYTE(v33) = 3; v32 = 15; v31 = 0; v30 = 0; sub_4018E0(&v30, "Disable", 7u); LOBYTE(v33) = 4; v8 = 0; v13 = (int)&v24; while ( 1 ) { sub_4571E0(&v18, (int)&v15, v13); v9 = v18; LOBYTE(v33) = 5; if ( v20 < 0x10 ) v9 = &v18; if ( !sub_8FB650(v14, v5[4], (int)v9) ) break; LOBYTE(v33) = 4; if ( v20 >= 0x10 ) operator delete(v18); v13 += 28; if ( (unsigned int)++v8 >= 3 ) goto LABEL_26; } if ( a5 == v8 + 1 ) { LOBYTE(v33) = 4; if ( v20 >= 0x10 ) operator delete(v18); LABEL_26: v10 = sub_8FE0F0(v12 - v5[1], v11 - v5[2], (int)v14, v5[3], a2, 0, 0); LOBYTE(v33) = 1; `eh vector destructor iterator'(&v24, 0x1Cu, 3, sub_636A10); if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) operator delete(v15); return v10; } if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; LOBYTE(v33) = 1; `eh vector destructor iterator'(&v24, 0x1Cu, 3, sub_636A10); if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) { operator delete(v15); return 0; } } else { if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) operator delete(v15); } return 0; } //----- (00456E70) -------------------------------------------------------- volatile LONG *__thiscall sub_456E70(_DWORD *this, int a2, void *a3, int a4, int a5) { _DWORD *v5; // esi void *v6; // ecx int v8; // edi void *v9; // ecx volatile LONG *v10; // esi int v11; // [esp+14h] [ebp-C8h] int v12; // [esp+18h] [ebp-C4h] int v13; // [esp+1Ch] [ebp-C0h] volatile LONG **v14; // [esp+20h] [ebp-BCh] void *v15; // [esp+24h] [ebp-B8h] int v16; // [esp+34h] [ebp-A8h] unsigned int v17; // [esp+38h] [ebp-A4h] void *v18; // [esp+40h] [ebp-9Ch] int v19; // [esp+50h] [ebp-8Ch] unsigned int v20; // [esp+54h] [ebp-88h] void *v21; // [esp+5Ch] [ebp-80h] int v22; // [esp+6Ch] [ebp-70h] unsigned int v23; // [esp+70h] [ebp-6Ch] char v24; // [esp+78h] [ebp-64h] int v25; // [esp+88h] [ebp-54h] int v26; // [esp+8Ch] [ebp-50h] char v27; // [esp+94h] [ebp-48h] int v28; // [esp+A4h] [ebp-38h] int v29; // [esp+A8h] [ebp-34h] char v30; // [esp+B0h] [ebp-2Ch] int v31; // [esp+C0h] [ebp-1Ch] int v32; // [esp+C4h] [ebp-18h] int v33; // [esp+D8h] [ebp-4h] v5 = this; v14 = (volatile LONG **)a4; v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4018E0(&v15, a3, strlen((const char *)a3)); v33 = 0; sub_427A80(&v21, (int)&v15, "Nor"); v6 = v21; LOBYTE(v33) = 1; if ( v23 < 0x10 ) v6 = &v21; v14 = sub_8FB140(v5[4], (int)v6, (int)&v12, (int)&v11, (volatile LONG *)v14); if ( v14 ) { v26 = 15; v25 = 0; v24 = 0; sub_4018E0(&v24, "Click", 5u); LOBYTE(v33) = 2; v29 = 15; v28 = 0; v27 = 0; sub_4018E0(&v27, "Over", 4u); LOBYTE(v33) = 3; v32 = 15; v31 = 0; v30 = 0; sub_4018E0(&v30, "Disable", 7u); LOBYTE(v33) = 4; v8 = 0; v13 = (int)&v24; while ( 1 ) { sub_4571E0(&v18, (int)&v15, v13); v9 = v18; LOBYTE(v33) = 5; if ( v20 < 0x10 ) v9 = &v18; if ( !sub_8FB650(v14, v5[4], (int)v9) ) break; LOBYTE(v33) = 4; if ( v20 >= 0x10 ) operator delete(v18); v13 += 28; if ( (unsigned int)++v8 >= 3 ) goto LABEL_26; } if ( a5 == v8 + 1 ) { LOBYTE(v33) = 4; if ( v20 >= 0x10 ) operator delete(v18); LABEL_26: v10 = sub_465940(v12 - v5[1], v11 - v5[2], (int)v14, v5[3], a2, 0); LOBYTE(v33) = 1; `eh vector destructor iterator'(&v24, 0x1Cu, 3, sub_636A10); if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) operator delete(v15); return v10; } if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; LOBYTE(v33) = 1; `eh vector destructor iterator'(&v24, 0x1Cu, 3, sub_636A10); if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) { operator delete(v15); return 0; } } else { if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v17 >= 0x10 ) operator delete(v15); } return 0; } //----- (004571B0) -------------------------------------------------------- void *__thiscall sub_4571B0(void *this, char a2) { void *v2; // esi v2 = this; sub_4562E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004571E0) -------------------------------------------------------- void *__cdecl sub_4571E0(void *a1, int a2, int a3) { unsigned int v3; // edi void *v4; // eax bool v5; // cf _BYTE *v6; // eax *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; v3 = *((_DWORD *)a1 + 4); v4 = (void *)(*(_DWORD *)(a3 + 16) + *(_DWORD *)(a2 + 16)); if ( v3 <= (unsigned int)v4 && *((void **)a1 + 5) != v4 && (unsigned __int8)sub_401740(a1, v4, 1) ) { v5 = *((_DWORD *)a1 + 5) < 0x10u; *((_DWORD *)a1 + 4) = v3; if ( v5 ) v6 = a1; else v6 = *(_BYTE **)a1; v6[v3] = 0; } sub_401C20(a1, a2, 0, 0xFFFFFFFF); sub_401C20(a1, a3, 0, 0xFFFFFFFF); return a1; } //----- (004572A0) -------------------------------------------------------- HWND __thiscall sub_4572A0(HWND *this) { HWND *v1; // esi HWND result; // eax v1 = this; result = this[86]; if ( result ) { result = (HWND)DestroyWindow(this[86]); if ( !result ) result = (HWND)MessageBoxA(0, "Error", "Unable to close WebBrowserWin Win!", 0); } v1[86] = 0; *((_BYTE *)v1 + 392) = 0; return result; } //----- (004572E0) -------------------------------------------------------- int __thiscall sub_4572E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int result; // eax int v4; // ecx v1 = this; v1[94] = v1[99] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1) + v1[100] + 2; result = v1[101] - 8; v4 = v1[102] - 10; v1[95] = v2; v1[96] = result; v1[97] = v4; return result; } //----- (00457340) -------------------------------------------------------- BOOL __thiscall sub_457340(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { if ( *((_BYTE *)v1 + 392) ) { sub_4572E0(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[94] + Rect.left, (int)v1[95] + Rect.top, (int)v1[96], (int)v1[97], 1); } } return result; } //----- (00457410) -------------------------------------------------------- BOOL __thiscall sub_457410(HWND *this, int a2) { return sub_457340(this); } //----- (00457420) -------------------------------------------------------- char __thiscall sub_457420(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi bool v11; // zf int v13; // ebx int v14; // eax volatile LONG *v15; // edi volatile LONG v16; // ST3C_4 const CHAR *v17; // eax volatile LONG *v18; // edi volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // edi int v22; // [esp+34h] [ebp-28h] int v23; // [esp+38h] [ebp-24h] int v24; // [esp+3Ch] [ebp-20h] volatile LONG *v25; // [esp+40h] [ebp-1Ch] int v26; // [esp+44h] [ebp-18h] int v27; // [esp+48h] [ebp-14h] int v28; // [esp+4Ch] [ebp-10h] int v29; // [esp+58h] [ebp-4h] int v30; // [esp+64h] [ebp+8h] v2 = (int)this; v28 = 0; v3 = dword_BA6BA0; v29 = 0; v23 = 0; v24 = 0; v27 = 0; v26 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\WebBrowserWin.nif"); sub_8F66B0(v4, (int)&v28, v3); if ( !v28 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v28 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v22 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v29) = 1; if ( v8 ) v25 = *(volatile LONG **)(v8 + 4); else v25 = 0; v9 = sub_8FB140(v28, (int)"Frame", (int)&v26, (int)&v27, v25); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"WebBrowserWin", 0) ) { LOBYTE(v29) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v28; v29 = -1; if ( !v28 || InterlockedDecrement((volatile LONG *)(v28 + 4)) ) return 0; v11 = v10 == 0; goto LABEL_15; } v13 = v26; v30 = v27; if ( !sub_8F71E0(v28, (int)"WinTitle", &v26, &v27, &v23, &v24) ) { LOBYTE(v29) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v28; v29 = -1; if ( !v28 || InterlockedDecrement((volatile LONG *)(v28 + 4)) ) return 0; v11 = v10 == 0; LABEL_15: if ( !v11 ) (**v10)(v10, 1); return 0; } v14 = sub_421050(0); v15 = sub_8F4A20(v26 - v13, v27 - v30, v23, v24, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v16 = *v15; v17 = sub_40C190(-1751598159); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v16 + 472))(v15, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( !sub_8F71E0( v28, (int)"Panel01", (_DWORD *)(v2 + 396), (_DWORD *)(v2 + 400), (_DWORD *)(v2 + 404), (_DWORD *)(v2 + 408)) ) { LOBYTE(v29) = 0; sub_410C00(&v22); v29 = -1; sub_410C00(&v28); return 0; } v18 = v25; v19 = sub_8FB140(v28, (int)"Panel01", (int)&v26, (int)&v27, v25); v20 = sub_8F3EB0(v26 - v13, v27 - v30, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 240))(v20, 1); v21 = sub_8FB140(v28, (int)"ClsNor", (int)&v26, (int)&v27, v18); sub_8FB650(v21, v28, (int)"ClsClick"); sub_8FB650(v21, v28, (int)"ClsOver"); sub_8FE0F0(v26 - v13, v27 - v30, (int)v21, v2, 1, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_4572E0((_DWORD *)v2); LOBYTE(v29) = 0; sub_410C00(&v22); v29 = -1; sub_410C00(&v28); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004577B0) -------------------------------------------------------- char __thiscall sub_4577B0(HWND *this, int a2, int a3) { char result; // al HWND *v4; // esi _DWORD *v5; // ecx result = a2 - 1; v4 = this; if ( a2 == 1 ) { if ( this[86] ) { if ( !DestroyWindow(this[86]) ) MessageBoxA(0, "Error", "Unable to close WebBrowserWin Win", 0); } v5 = v4[74]; v4[86] = 0; result = sub_4A5130(v5); } return result; } //----- (00457890) -------------------------------------------------------- int __cdecl sub_457890(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x19Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WebBrowserWin::`vftable'; *(_DWORD *)(v2 + 232) = &WebBrowserWin::`vftable'; *(_DWORD *)(v2 + 368) = 15; *(_DWORD *)(v2 + 364) = 0; *(_BYTE *)(v2 + 348) = 0; *(_BYTE *)(v2 + 392) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B21BC: using guessed type void *WebBrowserWin::`vftable'; // 9B21DC: using guessed type void *WebBrowserWin::`vftable'; //----- (004579F0) -------------------------------------------------------- void __thiscall sub_4579F0(_DWORD *this, int a2, unsigned __int16 a3) { bool v3; // cf _DWORD *v4; // edi _BYTE *v5; // eax signed int v6; // esi if ( a2 ) { v3 = this[92] < 0x10u; v4 = this + 87; this[91] = 0; if ( v3 ) v5 = this + 87; else v5 = (_BYTE *)*v4; v6 = 0; for ( *v5 = 0; v6 < a3; ++v6 ) sub_40AB50(v4, 1u, *(_BYTE *)(v6 + a2)); } } //----- (00457A50) -------------------------------------------------------- void __thiscall sub_457A50(int this) { int v1; // esi unsigned int v2; // ebx char *v3; // eax bool v4; // cf int v5; // ecx int v6; // edx _DWORD *v7; // eax HWND v8; // eax void (__thiscall *v9)(int, int *); // edx unsigned int v10; // edx int v11; // [esp+8h] [ebp-28h] int v12; // [esp+Ch] [ebp-24h] int v13; // [esp+10h] [ebp-20h] int v14; // [esp+14h] [ebp-1Ch] unsigned int v15; // [esp+18h] [ebp-18h] int v16; // [esp+1Ch] [ebp-14h] int v17; // [esp+20h] [ebp-10h] int v18; // [esp+24h] [ebp-Ch] int v19; // [esp+28h] [ebp-8h] v1 = this; v2 = 0; if ( *(_DWORD *)(this + 364) ) { sub_4A5240(*(_DWORD **)(this + 296)); sub_4A5200(*(_DWORD **)(v1 + 296)); sub_4A5110(*(_DWORD **)(v1 + 296)); v4 = *(_DWORD *)(v1 + 368) < 0x10u; v5 = *(_DWORD *)(v1 + 380); v6 = *(_DWORD *)(v1 + 384); v16 = *(_DWORD *)(v1 + 376); v19 = *(_DWORD *)(v1 + 388); v7 = (_DWORD *)(v1 + 348); v17 = v5; v18 = v6; if ( !v4 ) v7 = (_DWORD *)*v7; v8 = (HWND)sub_427200((char)hWnd, dword_ACDC7C, v7, (int)&v16); *(_DWORD *)(v1 + 344) = v8; if ( IsWindow(v8) ) { ShowWindow(*(HWND *)(v1 + 344), 5); } else if ( off_AC0554 ) { off_AC0554("CreateWindow Fail", &byte_9B20BF, 0); } v9 = *(void (__thiscall **)(int, int *))(*(_DWORD *)v1 + 208); *(_BYTE *)(v1 + 392) = 1; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v9(v1, &v11); v10 = v14 - v13; v15 = 0; if ( xRight >= (unsigned int)(v12 - v11) && dword_AC2F78 >= v10 ) { v2 = (unsigned int)(xRight - (v12 - v11)) >> 1; v15 = (dword_AC2F78 - v10) >> 1; } (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v1 + 172))(v1, v2); (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v1 + 176))(v1, v15); } else { v3 = sub_7549E0("WebBrowserWin::OnShowWin m_kWebAddress is empty \n"); OutputDebugStringA(v3); } } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (00457BE0) -------------------------------------------------------- _DWORD *__thiscall sub_457BE0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &WebBrowserWin::`vftable'; *((_DWORD *)this + 58) = &WebBrowserWin::`vftable'; if ( *((_DWORD *)this + 92) >= 0x10u ) operator delete(*((void **)this + 87)); v2[92] = 15; v2[91] = 0; *((_BYTE *)v2 + 348) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B21BC: using guessed type void *WebBrowserWin::`vftable'; // 9B21DC: using guessed type void *WebBrowserWin::`vftable'; //----- (00457C50) -------------------------------------------------------- signed int __stdcall sub_457C50(int a1, int a2) { FARPROC v2; // eax HMODULE v3; // eax signed int result; // eax signed int v5; // eax if ( dword_ACCFE8 ) { v2 = (FARPROC)dword_ACCFEC; if ( dword_ACCFEC ) goto LABEL_13; } v3 = GetModuleHandleW(L"x3.xem"); dword_ACCFE8 = (int)v3; if ( !v3 ) { v3 = GetModuleHandleW(L"xcorona.xem"); dword_ACCFE8 = (int)v3; if ( !v3 ) { SetLastError(0xE0190203); return 0; } } v2 = GetProcAddress(v3, (LPCSTR)1); dword_ACCFEC = (int)v2; if ( v2 ) { LABEL_13: v5 = ((int (__stdcall *)(int, int))v2)(a1, a2); if ( v5 >= 0 ) { result = 1; } else { SetLastError(v5); result = 0; } } else { SetLastError(0xE0190111); result = 0; } return result; } // ACCFE8: using guessed type int dword_ACCFE8; // ACCFEC: using guessed type int dword_ACCFEC; //----- (00457CF0) -------------------------------------------------------- int sub_457CF0(int a1, ...) { int (__stdcall *v1)(int, char *); // eax va_list va; // [esp+10h] [ebp+Ch] va_start(va, a1); v1 = (int (__stdcall *)(int, char *))dword_ACD008; if ( !dword_ACD008 ) { if ( !sub_457C50((int)&dword_ACD008, 26) ) return 0; v1 = (int (__stdcall *)(int, char *))dword_ACD008; if ( !dword_ACD008 ) { SetLastError(0xE0190118); return 0; } } return v1(a1, va); } // ACD008: using guessed type int dword_ACD008; //----- (00457D40) -------------------------------------------------------- int sub_457D40() { int (*v0)(void); // eax v0 = (int (*)(void))dword_ACD010; if ( !dword_ACD010 ) { if ( !sub_457C50((int)&dword_ACD010, 2) ) return 0; v0 = (int (*)(void))dword_ACD010; if ( !dword_ACD010 ) { SetLastError(0xE019011A); return 0; } } return v0(); } // ACD010: using guessed type int dword_ACD010; //----- (00457E20) -------------------------------------------------------- _DWORD *__thiscall sub_457E20(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; return result; } //----- (00457E60) -------------------------------------------------------- size_t __thiscall sub_457E60(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax wchar_t *v3; // eax v1 = this; v2 = (void *)this[1]; *(_BYTE *)this = 0; if ( v2 ) operator delete[](v2); v3 = (wchar_t *)operator new[](0x208u); v1[1] = v3; return mbstowcs(v3, byte_9B23FD, 0x104u); } //----- (00457EA0) -------------------------------------------------------- size_t __thiscall sub_457EA0(wchar_t **this, char *a2) { *(_BYTE *)this = 1; return mbstowcs(this[1], a2, 0x104u); } //----- (00457EC0) -------------------------------------------------------- void __thiscall sub_457EC0(_BYTE *this) { *this = 0; } //----- (00457ED0) -------------------------------------------------------- signed int __stdcall sub_457ED0(int a1, _WORD *a2, unsigned int a3, int a4) { int v4; // eax int v5; // eax v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( !v4 ) return 0; v5 = *(_DWORD *)(v4 + 40); if ( !v5 ) return 0; if ( !*(_BYTE *)v5 ) return -535231231; if ( a1 == 1 ) { sub_458530(a2, a3, *(_DWORD *)(v5 + 4)); return 0; } return -535231230; } // ACDD50: using guessed type int dword_ACDD50; //----- (00457F30) -------------------------------------------------------- int sub_457F30() { DWORD v0; // eax char *v1; // eax void (*v2)(void); // eax int result; // eax DWORD v4; // eax char *v5; // eax WCHAR v6; // [esp+4h] [ebp-2ACh] WCHAR WideCharStr; // [esp+20Ch] [ebp-A4h] MultiByteToWideChar(0, 0, "SGFcjuNstNtO", -1, &WideCharStr, 80); MultiByteToWideChar(0, 0, "ressystem/XIGNCODE", -1, &v6, 260); if ( !sub_458270((int)&WideCharStr, (HMODULE)&v6, 0) ) { v0 = GetLastError(); v1 = sub_7549E0("XignCode Error : Enter : %08x", v0); MessageBoxA(0, v1, "XignCode Error", 0x10010u); v2 = (void (*)(void))dword_ACD010; if ( dword_ACD010 ) goto LABEL_13; if ( !sub_457C50((int)&dword_ACD010, 2) ) goto LABEL_7; v2 = (void (*)(void))dword_ACD010; if ( dword_ACD010 ) LABEL_13: v2(); else SetLastError(0xE019011A); LABEL_7: ExitProcess(0); } result = sub_457CF0(200, sub_457ED0, 0); if ( !result ) { v4 = GetLastError(); v5 = sub_7549E0("XignCode Error : Send : %08x", v4); MessageBoxA(0, v5, "XignCode Error", 0x10010u); sub_457D40(); ExitProcess(0); } return result; } // ACD010: using guessed type int dword_ACD010; //----- (004580C0) -------------------------------------------------------- char __stdcall sub_4580C0(int a1, int a2, const void *a3, int a4, int a5) { char result; // al __int16 v6; // [esp+4h] [ebp-2D8h] char v7; // [esp+8h] [ebp-2D4h] if ( dword_AB7F4C ) { v6 = 4421; sub_905F90(dword_AB7F4C, &v6, 2u); qmemcpy(&v7, a3, 0x2D0u); result = sub_906000(dword_AB7F4C, &v7, 0x2D0u); } return result; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (00458140) -------------------------------------------------------- int __stdcall sub_458140(int a1, int a2, int a3) { int (__stdcall *v3)(int, signed int, char (__stdcall *)(int, int, const void *, int, int), _DWORD); // eax int result; // eax DWORD v5; // eax char *v6; // eax v3 = (int (__stdcall *)(int, signed int, char (__stdcall *)(int, int, const void *, int, int), _DWORD))dword_ACD01C; if ( dword_ACD01C ) goto LABEL_5; if ( sub_457C50((int)&dword_ACD01C, 6) ) { v3 = (int (__stdcall *)(int, signed int, char (__stdcall *)(int, int, const void *, int, int), _DWORD))dword_ACD01C; if ( !dword_ACD01C ) { SetLastError(0xE019011D); goto LABEL_6; } LABEL_5: result = v3(a2, 720, sub_4580C0, 0); if ( result ) return result; } LABEL_6: v5 = GetLastError(); v6 = sub_7549E0("XignCode Error : Packet : %08x", v5); return MessageBoxA(0, v6, "XignCode Error", 0x10010u); } // ACD01C: using guessed type int dword_ACD01C; //----- (004581C0) -------------------------------------------------------- wchar_t *__stdcall sub_4581C0(LPWSTR lpFilename, int a2, HMODULE hModule) { wchar_t *result; // eax wchar_t *v4; // eax if ( hModule ) { if ( wcschr((const wchar_t *)hModule, 0x3Au) ) { lstrcpyW(lpFilename, (LPCWSTR)hModule); } else { GetModuleFileNameW(0, lpFilename, (unsigned int)a2 >> 1); v4 = wcsrchr(lpFilename, 0x5Cu); if ( v4 ) { if ( *(_WORD *)hModule == 92 ) *v4 = 0; else v4[1] = 0; } lstrcatW(lpFilename, (LPCWSTR)hModule); } result = (wchar_t *)lstrlenW(lpFilename); if ( lpFilename[(_DWORD)result - 1] == 92 ) { result = (wchar_t *)lstrlenW(lpFilename); lpFilename[(_DWORD)result - 1] = 0; } } else { GetModuleFileNameW(0, lpFilename, (unsigned int)a2 >> 1); result = wcsrchr(lpFilename, 0x5Cu); if ( result ) *result = 0; } return result; } //----- (00458270) -------------------------------------------------------- int __stdcall sub_458270(int a1, HMODULE hModule, int a3) { int (__thiscall *v3)(HMODULE, int, WCHAR *, int); // eax HMODULE v4; // ecx const WCHAR *v5; // esi WCHAR String2; // [esp+Ch] [ebp-414h] WCHAR String1; // [esp+214h] [ebp-20Ch] v3 = (int (__thiscall *)(HMODULE, int, WCHAR *, int))dword_ACD00C; v4 = hModule; v5 = L"\\x3.xem"; if ( !dword_ACD00C ) { sub_4581C0(&String2, 520, hModule); if ( a3 & 8 ) v5 = L"\\xcorona.xem"; lstrcpyW(&String1, &String2); lstrcatW(&String1, v5); if ( !LoadLibraryW(&String1) || !sub_457C50((int)&dword_ACD00C, 1) ) return 0; v3 = (int (__thiscall *)(HMODULE, int, WCHAR *, int))dword_ACD00C; if ( !dword_ACD00C ) { SetLastError(0xE0190119); return 0; } } if ( !v3(v4, a1, &String2, a3) ) return 0; sub_457CF0(7100, 2000, &unk_ACD050); sub_457CF0(7100, 2100, &unk_ACD054); sub_457CF0(7100, 2400, &unk_ACD058); sub_457CF0(7100, 2500, &unk_ACD05C); sub_457CF0(7100, 3810, &unk_ACD080); sub_457CF0(7100, 3820, &unk_ACD084); sub_457CF0(7100, 3830, &unk_ACD088); sub_457CF0(7100, 3840, &unk_ACD08C); sub_457CF0(7100, 3850, &unk_ACD090); sub_457CF0(7100, 3100, &unk_ACD060); sub_457CF0(7100, 3200, &unk_ACD064); sub_457CF0(7100, 3300, &unk_ACD068); sub_457CF0(7100, 3400, &unk_ACD06C); sub_457CF0(7100, 3500, &unk_ACD070); sub_457CF0(7100, 3600, &unk_ACD074); sub_457CF0(7100, 3700, &unk_ACD078); sub_457CF0(7100, 3800, &unk_ACD07C); sub_457CF0(7100, 3860, &unk_ACD094); sub_457CF0(7100, 3870, &unk_ACD098); sub_457CF0(7100, 3880, &unk_ACD09C); sub_457CF0(7100, 3890, &unk_ACD0A0); sub_457CF0(7100, 3900, &unk_ACD0A4); sub_457CF0(7100, 3910, &unk_ACD0A8); return 1; } // 9B2510: using guessed type wchar_t aXcoronaXem_0[13]; // ACD00C: using guessed type int dword_ACD00C; //----- (00458530) -------------------------------------------------------- signed int __stdcall sub_458530(_WORD *a1, unsigned int a2, int a3) { unsigned int v3; // edx signed int result; // eax _WORD *v5; // ecx unsigned int v6; // esi int v7; // ebx __int16 v8; // dx v3 = a2 >> 1; result = 0; if ( !(a2 >> 1) || v3 > 0x7FFFFFFF ) result = -2147024809; if ( result >= 0 ) { v5 = a1; result = 0; v6 = a2 >> 1; if ( !v3 ) goto LABEL_16; v7 = 2147483646 - v3; while ( v7 + v6 ) { v8 = *(_WORD *)((char *)v5 + a3 - (_DWORD)a1); if ( !v8 ) break; *v5 = v8; ++v5; if ( !--v6 ) { result = -2147024774; *(v5 - 1) = 0; return result; } } if ( !v6 ) { LABEL_16: --v5; result = -2147024774; } *v5 = 0; } return result; } //----- (004585C0) -------------------------------------------------------- _DWORD *__thiscall sub_4585C0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &ZlibUtil::`vftable'; this[9] = 0; this[10] = 0; this[11] = 0; this[3091] = 0; return result; } // 9B2608: using guessed type void *ZlibUtil::`vftable'; //----- (00458690) -------------------------------------------------------- _DWORD *__thiscall sub_458690(_DWORD *this) { _DWORD *result; // eax result = this; *this = &zlibUtil2::`vftable'; this[9] = 0; this[10] = 0; this[11] = 0; this[1041] = 0; this[1042] = 0; this[1043] = 0; return result; } // 9B2614: using guessed type void *zlibUtil2::`vftable'; //----- (004586C0) -------------------------------------------------------- void __thiscall sub_4586C0(_DWORD *this) { void *v1; // ecx *this = &zlibUtil2::`vftable'; v1 = (void *)this[1041]; if ( v1 ) free(v1); } // 9B2614: using guessed type void *zlibUtil2::`vftable'; //----- (004586E0) -------------------------------------------------------- void *__thiscall sub_4586E0(int this) { _DWORD *v1; // esi size_t v2; // edi unsigned int v3; // eax void *result; // eax v1 = (_DWORD *)this; v2 = 4096 - *(_DWORD *)(this + 20); if ( *(_DWORD *)(this + 20) != 4096 ) { v3 = *(_DWORD *)(this + 4172); if ( v2 + *(_DWORD *)(this + 4168) > v3 ) { result = realloc(*(void **)(this + 4164), v3 + 4096); v1[1041] = result; if ( !result ) { v1[15] = -1; return result; } v1[1043] += 4096; } memcpy((void *)(v1[1042] + v1[1041]), v1 + 16, v2); v1[1042] += v2; v1[4] = v1 + 16; v1[5] = 4096; } return (void *)v2; } //----- (004590C0) -------------------------------------------------------- void *__thiscall sub_4590C0(void *this, char a2) { void *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 1041); *(_DWORD *)this = &zlibUtil2::`vftable'; if ( v3 ) free(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B2614: using guessed type void *zlibUtil2::`vftable'; //----- (00459140) -------------------------------------------------------- bool __thiscall sub_459140(volatile LONG **this, int a2, int a3, volatile LONG *a4, _DWORD *a5) { return sub_8F4B80(this, a2, a3, 0, 0, a4, a5, 0, 0) != 0; } //----- (00459170) -------------------------------------------------------- LONG __thiscall sub_459170(_DWORD *this, LPCSTR lpString) { _DWORD *v2; // esi int v3; // ecx int v4; // ebx LONG result; // eax int v6; // ecx struct tagSIZE psizl; // [esp+Ch] [ebp-1Ch] struct tagRECT rc; // [esp+14h] [ebp-14h] v2 = this; v3 = this[72]; if ( v3 ) (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)v3 + 148))(lpString); v4 = (*(int (__thiscall **)(_DWORD *))(*v2 + 456))(v2); SetRect(&rc, 0, 0, 0, 0); if ( lpString && *lpString && v4 ) { SelectObject(*(HDC *)(v4 + 192), *(HGDIOBJ *)(v4 + 184)); sub_4593C0((_DWORD *)v4, lpString, strlen(lpString), &psizl); (*(void (__thiscall **)(_DWORD *, LONG))(*v2 + 152))(v2, psizl.cx); (*(void (__thiscall **)(_DWORD *, LONG))(*v2 + 156))(v2, psizl.cy); result = psizl.cx; v6 = v2[72]; *(struct tagSIZE *)&rc.right = psizl; if ( v6 ) result = (*(int (__thiscall **)(int, struct tagRECT *))(*(_DWORD *)v6 + 172))(v6, &rc); } else { (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 152))(v2, 0); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 156))(v2, 0); } return result; } //----- (00459270) -------------------------------------------------------- int __cdecl sub_459270(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x124u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F4870(v4); *(_DWORD *)v5 = &AutoSizingTextWin::`vftable'; *(_DWORD *)(v5 + 232) = &AutoSizingTextWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 504))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9B261C: using guessed type void *AutoSizingTextWin::`vftable'; // 9B263C: using guessed type void *AutoSizingTextWin::`vftable'; //----- (004593C0) -------------------------------------------------------- char __thiscall sub_4593C0(_DWORD *this, LPCSTR lpString, int c, LPSIZE psizl) { BYTE *v4; // esi int v5; // edi _DWORD *v6; // ebx LPSIZE v7; // eax int v8; // ebx _DWORD *v10; // [esp+Ch] [ebp-4h] v4 = (BYTE *)lpString; v5 = c; v6 = this; v10 = this; LOBYTE(v7) = sub_902790(this, (char *)lpString, c, psizl, 0, 0, 0, 0); if ( !(_BYTE)v7 ) { LOBYTE(v7) = GetTextExtentPoint32A((HDC)v6[48], lpString, c, psizl); if ( v6[63] ) { v8 = 0; if ( *lpString ) { do { if ( v5 <= 0 ) break; if ( *v4 == 32 ) { --v5; ++v4; } else { ++v8; if ( IsDBCSLeadByte(*v4) ) { v4 += 2; v5 -= 2; } else { ++v4; --v5; } } } while ( *v4 ); } v7 = psizl; v7->cy += 2 * v10[63]; v7->cx += 2 * v8 * v10[63]; } } return (char)v7; } //----- (00459460) -------------------------------------------------------- int __thiscall sub_459460(int this, int a2) { int v2; // eax int result; // eax *(_DWORD *)(this + 308) = a2; if ( a2 & 1 ) v2 = 2; else v2 = a2 & 2 | 1; if ( a2 & 4 ) { result = v2 | 0x20; } else if ( a2 & 8 ) { result = v2 | 0x30; } else { result = v2 | 0x10; } if ( result != *(_DWORD *)(this + 280) ) { *(_DWORD *)(this + 280) = result; *(_BYTE *)(this + 300) = 1; } return result; } //----- (004594C0) -------------------------------------------------------- void *sub_4594C0() { return &unk_BA6B00; } //----- (004594D0) -------------------------------------------------------- int sub_4594D0(int a1, char *a2, ...) { char v3; // [esp+4h] [ebp-104h] va_list va; // [esp+118h] [ebp+10h] va_start(va, a2); vsprintf(&v3, a2, va); return (*(int (__thiscall **)(int, char *))(*(_DWORD *)a1 + 472))(a1, &v3); } //----- (00459520) -------------------------------------------------------- int __thiscall sub_459520(void *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { int (__stdcall *v5)(float *); // eax float v7; // [esp+0h] [ebp-10h] float v8; // [esp+4h] [ebp-Ch] float v9; // [esp+8h] [ebp-8h] float v10; // [esp+Ch] [ebp-4h] v7 = (double)a2 / 255.0; v5 = *(int (__stdcall **)(float *))(*(_DWORD *)this + 468); v8 = (double)a3 / 255.0; v9 = (double)a4 / 255.0; v10 = (double)a5 / 255.0; return v5(&v7); } //----- (00459580) -------------------------------------------------------- void *__thiscall sub_459580(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AutoSizingTextWin::`vftable'; *((_DWORD *)this + 58) = &AutoSizingTextWin::`vftable'; sub_8F4990(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B261C: using guessed type void *AutoSizingTextWin::`vftable'; // 9B263C: using guessed type void *AutoSizingTextWin::`vftable'; //----- (004595C0) -------------------------------------------------------- int __thiscall sub_4595C0(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[72]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 144))(a2); return result; } //----- (004595E0) -------------------------------------------------------- int __thiscall sub_4595E0(_DWORD *this) { int v1; // eax int result; // eax v1 = this[72]; if ( v1 ) result = *(_DWORD *)(v1 + 312); else result = 0; return result; } //----- (00459600) -------------------------------------------------------- int __thiscall sub_459600(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[72]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 172))(a2); return result; } //----- (00459620) -------------------------------------------------------- int __thiscall sub_459620(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[72]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 176))(a2); return result; } //----- (00459640) -------------------------------------------------------- int __thiscall sub_459640(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[72]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 148))(a2); return result; } //----- (00459660) -------------------------------------------------------- int __thiscall sub_459660(_DWORD *this) { int v1; // ecx int result; // eax v1 = this[72]; if ( v1 ) result = (*(int (**)(void))(*(_DWORD *)v1 + 152))(); else result = 0; return result; } //----- (00459680) -------------------------------------------------------- void __thiscall sub_459680(_DWORD *this, int a2) { int v2; // edx int v3; // eax int v4; // eax v2 = this[72]; if ( v2 ) { *(_DWORD *)(v2 + 308) = a2; if ( a2 & 1 ) v3 = 2; else v3 = a2 & 2 | 1; if ( a2 & 4 ) { v4 = v3 | 0x20; } else if ( a2 & 8 ) { v4 = v3 | 0x30; } else { v4 = v3 | 0x10; } if ( v4 != *(_DWORD *)(v2 + 280) ) { *(_DWORD *)(v2 + 280) = v4; *(_BYTE *)(v2 + 300) = 1; } } } //----- (00459720) -------------------------------------------------------- bool __thiscall sub_459720(void *this, int a2, int a3, _DWORD *a4) { bool result; // al if ( a4 ) result = sub_8F2900(this, a2, a3, 1, 1, a4, 0, 0) != 0; else result = 0; return result; } //----- (00459750) -------------------------------------------------------- int __thiscall sub_459750(_DWORD *this) { int v1; // eax v1 = sub_402BF0(this); return (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 380))(v1); } //----- (00459770) -------------------------------------------------------- int __cdecl sub_459770(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x120u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_8F2740(v3); *(_DWORD *)v4 = &ClientWin::`vftable'; *(_DWORD *)(v4 + 232) = &ClientWin::`vftable'; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 452))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9B283C: using guessed type void *ClientWin::`vftable'; // 9B285C: using guessed type void *ClientWin::`vftable'; //----- (004598C0) -------------------------------------------------------- void *__thiscall sub_4598C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ClientWin::`vftable'; *((_DWORD *)this + 58) = &ClientWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B283C: using guessed type void *ClientWin::`vftable'; // 9B285C: using guessed type void *ClientWin::`vftable'; //----- (00459900) -------------------------------------------------------- char __thiscall sub_459900(_BYTE *this) { return this[313]; } //----- (00459910) -------------------------------------------------------- int __thiscall sub_459910(_BYTE *this, int a2, int a3) { int result; // eax if ( !a2 && this[288] ) { if ( this[312] ) result = (*(int (**)(void))(*(_DWORD *)this + 480))(); } return result; } //----- (00459940) -------------------------------------------------------- int __thiscall sub_459940(_BYTE *this) { _BYTE *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*(_DWORD *)this + 488))(1); return sub_8F28E0(v1); } //----- (00459960) -------------------------------------------------------- char __thiscall sub_459960(_BYTE *this, char a2) { char result; // al result = a2; this[288] = a2; if ( !a2 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)this + 488))(1); return result; } //----- (00459980) -------------------------------------------------------- char __thiscall sub_459980(_BYTE *this, char a2) { char result; // al result = a2; this[356] = a2; return result; } //----- (00459990) -------------------------------------------------------- int __thiscall sub_459990(_DWORD **this) { return (*(int (**)(void))(*this[75] + 16))(); } //----- (004599A0) -------------------------------------------------------- int __thiscall sub_4599A0(_DWORD **this) { return (*(int (**)(void))(*this[75] + 28))(); } //----- (004599B0) -------------------------------------------------------- int __thiscall sub_4599B0(_DWORD **this) { return (*(int (**)(void))(*this[75] + 20))(); } //----- (004599D0) -------------------------------------------------------- LRESULT __thiscall sub_4599D0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[75] + 20))(a2); return SendMessageA((HWND)v2[75][3], 0x100u, 0x23u, 0); } //----- (00459A10) -------------------------------------------------------- int __thiscall sub_459A10(_DWORD **this) { return (*(int (**)(void))(*this[75] + 44))(); } //----- (00459A20) -------------------------------------------------------- int __thiscall sub_459A20(_DWORD **this) { return (*(int (**)(void))(*this[76] + 468))(); } //----- (00459A40) -------------------------------------------------------- int __thiscall sub_459A40(int this) { int v1; // esi int v2; // ecx int result; // eax v1 = this; if ( *(_BYTE *)(this + 288) ) { dword_ACD0B0 = this; (*(void (**)(void))(**(_DWORD **)(this + 300) + 12))(); v2 = *(_DWORD *)(v1 + 304); *(_DWORD *)(v1 + 320) = 0; *(_DWORD *)(v1 + 316) = 0; result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1); *(_BYTE *)(v1 + 313) = 1; } return result; } // ACD0B0: using guessed type int dword_ACD0B0; //----- (00459A90) -------------------------------------------------------- HWND __thiscall sub_459A90(_DWORD **this, int a2) { HWND result; // eax if ( (_DWORD **)dword_ACD0B0 == this ) { dword_ACD0B0 = 0; (*(void (__stdcall **)(int))(*this[76] + 256))(a2); result = SetFocus(hWnd); } return result; } // ACD0B0: using guessed type int dword_ACD0B0; //----- (00459AD0) -------------------------------------------------------- void __thiscall sub_459AD0(int this) { HWND v1; // esi if ( *(_BYTE *)(this + 288) && dword_ACD0B0 == this ) { v1 = *(HWND *)(*(_DWORD *)(this + 300) + 12); if ( v1 != GetFocus() ) SetFocus(v1); } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (00459B00) -------------------------------------------------------- HIMC __thiscall sub_459B00(_DWORD *this) { HWND v1; // ebx HIMC result; // eax HIMC v3; // edi int v4; // esi DWORD fdwSentence; // [esp+4h] [ebp-8h] DWORD fdwConversion; // [esp+8h] [ebp-4h] v1 = *(HWND *)(this[75] + 12); if ( !v1 ) return 0; result = ImmGetContext(v1); v3 = result; if ( result ) { ImmGetConversionStatus(result, &fdwConversion, &fdwSentence); v4 = -((fdwConversion & 1) != 0); ImmReleaseContext(v1, v3); result = (HIMC)(v4 + 2); } return result; } //----- (00459B60) -------------------------------------------------------- HIMC __thiscall sub_459B60(_DWORD *this, int a2) { HIMC result; // eax HWND v3; // edi HIMC v4; // esi DWORD fdwConversion; // [esp+4h] [ebp-8h] DWORD fdwSentence; // [esp+8h] [ebp-4h] result = (HIMC)this[75]; v3 = (HWND)*((_DWORD *)result + 3); if ( v3 ) { result = ImmGetContext(v3); v4 = result; if ( result ) { ImmGetConversionStatus(result, &fdwConversion, &fdwSentence); if ( a2 == 1 ) ImmSetConversionStatus(v4, 1u, fdwSentence); else ImmSetConversionStatus(v4, 0, fdwSentence); result = (HIMC)ImmReleaseContext(v3, v4); } } return result; } //----- (00459BC0) -------------------------------------------------------- int __thiscall sub_459BC0(_DWORD *this, int a2) { int result; // eax int v3; // ecx result = a2; this[61] = a2; v3 = this[76]; if ( v3 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 152))(a2); return result; } //----- (00459BF0) -------------------------------------------------------- int __thiscall sub_459BF0(_DWORD *this, int a2) { int result; // eax int v3; // ecx result = a2; this[62] = a2; v3 = this[76]; if ( v3 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 156))(a2); return result; } //----- (00459C40) -------------------------------------------------------- char __thiscall sub_459C40(_DWORD *this) { _DWORD *v1; // ecx char result; // al v1 = (_DWORD *)this[76]; if ( v1 ) result = sub_90D2D0(v1); else result = 0; return result; } //----- (00459C60) -------------------------------------------------------- HWND __thiscall sub_459C60(_DWORD *this) { HWND result; // eax result = *(HWND *)(this[75] + 12); if ( result ) result = (HWND)SendMessageA(result, 0xB1u, 0, -1); return result; } //----- (00459CC0) -------------------------------------------------------- _DWORD *__thiscall sub_459CC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8F2740(this); *v1 = &EditWin::`vftable'; v1[58] = &EditWin::`vftable'; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; if ( !dword_ACD0AC ) dword_ACD0AC = GetCaretBlinkTime(); v1[80] = 0; v1[79] = 0; *((_BYTE *)v1 + 313) = 0; *((_BYTE *)v1 + 324) = 0; *((_BYTE *)v1 + 288) = 1; return v1; } // 9B2A2C: using guessed type void *EditWin::`vftable'; // 9B2A4C: using guessed type void *EditWin::`vftable'; // ACD0AC: using guessed type int dword_ACD0AC; //----- (00459D30) -------------------------------------------------------- LONG __thiscall sub_459D30(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi volatile LONG *v4; // edi volatile LONG *v5; // edi volatile LONG *v6; // edi volatile LONG *v7; // edi volatile LONG *v8; // edi volatile LONG *v9; // edi v1 = this; *this = &EditWin::`vftable'; this[58] = &EditWin::`vftable'; v2 = (volatile LONG *)this[74]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[74] = 0; } v3 = (volatile LONG *)v1[75]; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v1[75] = 0; } v4 = (volatile LONG *)v1[76]; if ( v4 ) { if ( !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); v1[76] = 0; } v5 = (volatile LONG *)v1[77]; if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); v1[77] = 0; } v6 = (volatile LONG *)v1[77]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); v7 = (volatile LONG *)v1[76]; if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(void *, signed int))v7)((void *)v7, 1); v8 = (volatile LONG *)v1[75]; if ( v8 && !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(void *, signed int))v8)((void *)v8, 1); v9 = (volatile LONG *)v1[74]; if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(void *, signed int))v9)((void *)v9, 1); return sub_8F29C0(v1); } // 9B2A2C: using guessed type void *EditWin::`vftable'; // 9B2A4C: using guessed type void *EditWin::`vftable'; //----- (00459EF0) -------------------------------------------------------- void __thiscall sub_459EF0(_DWORD *this, float *a2) { _DWORD *v2; // ecx int v3; // eax float v4; // edx double v5; // st7 float v6; // ecx float v7; // ST0C_4 v2 = (_DWORD *)this[77]; if ( v2 ) { v3 = sub_85C050(v2, 3); if ( v3 ) { v4 = a2[1]; v5 = a2[2]; v6 = *a2; ++*(_DWORD *)(v3 + 88); v7 = v5; *(float *)(v3 + 68) = v6; *(float *)(v3 + 72) = v4; *(float *)(v3 + 76) = v7; } } } //----- (00459F40) -------------------------------------------------------- int __thiscall sub_459F40(_DWORD *this, int a2, int a3) { int v3; // esi volatile LONG *v4; // eax v3 = (int)this; v4 = (volatile LONG *)sub_402BF0(this); if ( v4 ) sub_8F2BC0(v4, 4, a2, v3); return (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 488))(v3, 1); } //----- (00459F80) -------------------------------------------------------- int __thiscall sub_459F80(void *this, float a2) { void *v2; // esi int result; // eax unsigned int v4; // ecx int v5; // edx int v6; // eax unsigned int v7; // edi const char *v8; // eax const char *v9; // ebx char *v10; // edi char *v11; // edx size_t v12; // eax size_t v13; // ebx char v14; // cl _DWORD *v15; // ebx _DWORD *v16; // ST18_4 char v17; // ST14_1 char v18; // ST10_1 int v19; // ST0C_4 int v20; // eax float *v21; // esi int v22; // ecx int v23; // edx float v24; // ST2C_4 __int64 v25; // [esp+8h] [ebp-Ch] int v26; // [esp+10h] [ebp-4h] signed int v27; // [esp+1Ch] [ebp+8h] v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 492))(); if ( !(_BYTE)result ) { *((_BYTE *)v2 + 313) = 0; *(_WORD *)(*((_DWORD *)v2 + 77) + 28) |= 1u; return result; } v4 = dword_ACD0AC + *((_DWORD *)v2 + 80); v26 = HIWORD(a2) | 0xC00; v25 = (signed __int64)(a2 * 1000.0); if ( v4 <= (unsigned int)v25 ) { v5 = 1 - *((_DWORD *)v2 + 79); *((_DWORD *)v2 + 80) = v25; *((_DWORD *)v2 + 79) = v5; } v6 = *((_DWORD *)v2 + 77); if ( *((_DWORD *)v2 + 79) == 1 ) *(_WORD *)(v6 + 28) &= 0xFFFEu; else *(_WORD *)(v6 + 28) |= 1u; v7 = 0; v27 = 0; v8 = (const char *)(*(int (**)(void))(**((_DWORD **)v2 + 76) + 484))(); v9 = v8; if ( !v8 || !*v8 ) goto LABEL_17; SelectObject(*(HDC *)(*((_DWORD *)v2 + 74) + 192), *(HGDIOBJ *)(*((_DWORD *)v2 + 74) + 184)); if ( *((_DWORD *)v2 + 73) == 1342177312 ) { v10 = sub_7549E0(0); v11 = v10; v12 = strlen(v9); v13 = v12; if ( v12 ) { memset(v10, 42, v12); v11 = &v10[v13]; } *v11 = 0; } else { v10 = (char *)v9; } result = *(_DWORD *)(*((_DWORD *)v2 + 76) + 288); if ( result ) { v14 = *(_BYTE *)(result + 285); v15 = (_DWORD *)*((_DWORD *)v2 + 74); LOBYTE(v26) = *(_BYTE *)(result + 284); v16 = (_DWORD *)(result + 236); v17 = v14; v18 = v26; v19 = *(_DWORD *)(result + 304); v20 = sub_90E3C0(*((HWND **)v2 + 75)); sub_906450(v15, v10, v20, (int *)&v25, v19, v18, v17, v16, 17); v27 = HIDWORD(v25); v7 = v25; if ( v7 >= (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 144))(v2) ) v7 = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 144))(v2) - 1; LABEL_17: v21 = (float *)*((_DWORD *)v2 + 77); v22 = *((_DWORD *)v21 + 22); v23 = *((_DWORD *)v21 + 23); result = *((_DWORD *)v21 + 24); v26 = v7 + 1; v24 = (double)(signed int)(v7 + 1) - 1.0; v21[22] = v24; *(float *)&v25 = (double)v27 - 2.0; *((_DWORD *)v21 + 23) = v25; *((_DWORD *)v21 + 24) = result; } return result; } // ACD0AC: using guessed type int dword_ACD0AC; //----- (0045A180) -------------------------------------------------------- int __thiscall sub_45A180(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[76] + 488))(a2); (*(void (**)(void))(*(_DWORD *)v2[76][72] + 156))(); return (*(int (**)(void))(*(_DWORD *)v2[76][72] + 160))(); } //----- (0045A1D0) -------------------------------------------------------- int __thiscall sub_45A1D0(_DWORD *this) { int v1; // eax int result; // eax v1 = *(_DWORD *)(this[76] + 288); if ( v1 ) result = *(_DWORD *)(v1 + 308); else result = 0; return result; } //----- (0045A1F0) -------------------------------------------------------- int __thiscall sub_45A1F0(_DWORD *this, int a2, int a3) { int v3; // esi volatile LONG *v4; // eax v3 = (int)this; v4 = (volatile LONG *)sub_402BF0(this); if ( v4 ) sub_8F2BC0(v4, 4, 0, v3); return (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 488))(v3, 1); } //----- (0045A220) -------------------------------------------------------- void __thiscall sub_45A220(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; if ( (_DWORD **)dword_ACD0B0 == this ) { dword_ACD0B0 = 0; (*(void (__stdcall **)(int))(*this[76] + 256))(a2); SetFocus(hWnd); if ( !strlen((const char *)(*(int (__thiscall **)(_DWORD *))(*v2 + 452))(v2)) ) { if ( v2[86] ) { v3 = v2 + 82; if ( v2[87] >= 0x10u ) v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 460))(v2, v3); } } } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (0045A2A0) -------------------------------------------------------- void __thiscall sub_45A2A0(_BYTE *this) { int v1; // esi volatile LONG *v2; // eax int v3; // ebx volatile LONG *v4; // edi int v5; // ecx v1 = (int)this; if ( this[288] ) { if ( dword_ACD0B0 ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)dword_ACD0B0); v3 = dword_ACD0B0; v4 = v2; if ( sub_8FA3D0(&unk_BA6B10, v2) ) sub_8F2A80((void *)v4, 3, 0, v3); } dword_ACD0B0 = v1; (*(void (**)(void))(**(_DWORD **)(v1 + 300) + 12))(); v5 = *(_DWORD *)(v1 + 304); *(_DWORD *)(v1 + 320) = 0; *(_DWORD *)(v1 + 316) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v5 + 256))(1); if ( *(_BYTE *)(v1 + 356) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 468))(v1); } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (0045A330) -------------------------------------------------------- char __thiscall sub_45A330(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12) { int v12; // esi int v13; // eax int v14; // edi int v15; // ebx int v17; // edi _DWORD *v18; // eax int v19; // eax bool v20; // zf int *v21; // edi volatile LONG *v22; // eax volatile LONG *v23; // eax int v24; // edx _WORD *v25; // edi _DWORD *v26; // eax _DWORD *v27; // ebx int v28; // edi void *v29; // eax float *v30; // eax float v31; // ecx _DWORD *v32; // ecx _DWORD *v33; // eax int v34; // edi _DWORD *v35; // ecx float *v36; // eax int v37; // edx int v38; // ecx int v39; // edx struct tagSIZE psizl; // [esp+2Ch] [ebp-50h] float v41; // [esp+34h] [ebp-48h] float v42; // [esp+38h] [ebp-44h] float v43; // [esp+3Ch] [ebp-40h] int v44; // [esp+40h] [ebp-3Ch] int v45; // [esp+44h] [ebp-38h] int v46; // [esp+48h] [ebp-34h] int v47; // [esp+4Ch] [ebp-30h] void *v48; // [esp+50h] [ebp-2Ch] int v49; // [esp+54h] [ebp-28h] int v50; // [esp+58h] [ebp-24h] int v51; // [esp+5Ch] [ebp-20h] int v52; // [esp+60h] [ebp-1Ch] int v53; // [esp+64h] [ebp-18h] int v54; // [esp+68h] [ebp-14h] int v55; // [esp+78h] [ebp-4h] v50 = a4; v45 = a7; v12 = (int)this; LOBYTE(v44) = a10; v49 = a5; v48 = a6; v46 = a8; v47 = a9; v13 = sub_421050(a11); v14 = *(_DWORD *)(v12 + 296); v15 = v13; if ( v14 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *(_DWORD *)(v12 + 296) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } if ( !*(_DWORD *)(v12 + 296) || !sub_8F2900((void *)v12, a2, a3, v50, v49, v48, 0, 0) ) return 0; v52 = a3; v17 = v45; v51 = a2; v53 = a2 + v50; v54 = a3 + v49; if ( v45 == 1342181380 ) v18 = sub_90D360( dword_ACDC7C, (int)hWnd, 1342181380, v47, v46, v44, (int)&v51, *(_DWORD *)(*(_DWORD *)(v12 + 296) + 184)); else v18 = sub_90D360(dword_ACDC7C, (int)hWnd, v45, v47, v46, v44, 0, 0); sub_56FF80((_DWORD *)(v12 + 300), (int)v18); sub_45AC20((_DWORD *)v12); v19 = *(_DWORD *)(v12 + 296); *(_DWORD *)(v12 + 292) = v45; v20 = v17 == 1342177312; v21 = (int *)(v12 + 304); if ( v20 ) { v22 = sub_90EBD0(0, 0, v50, v49, v19, v12, 0, 0); sub_56FF80((_DWORD *)(v12 + 304), (int)v22); } else { v23 = sub_90CE90(0, 0, v50, v49, v19, v12, 0, 0); sub_56FF80((_DWORD *)(v12 + 304), (int)v23); if ( v45 == 1342181380 ) { *(_BYTE *)(*(_DWORD *)(*v21 + 288) + 284) = 1; sub_90D230(*v21, v24, 0); } } (*(void (__stdcall **)(int))(**(_DWORD **)(v12 + 300) + 88))(*v21); *(_BYTE *)(v12 + 312) = a12; if ( a12 ) sub_8FE250(0, 0, v50, v49, v12, 0, 0, 0); SelectObject(*(HDC *)(*(_DWORD *)(v12 + 296) + 192), *(HGDIOBJ *)(*(_DWORD *)(v12 + 296) + 184)); sub_4593C0(*(_DWORD **)(v12 + 296), "|", 1, &psizl); v25 = sub_8F61B0(2u, psizl.cy + 2); v26 = operator new(0xC4u); v48 = v26; v27 = 0; v55 = 0; if ( v26 ) v27 = sub_868C00(v26, (int)v25); v28 = *(_DWORD *)(v12 + 308); v55 = -1; if ( (_DWORD *)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *(_DWORD *)(v12 + 308) = v27; if ( v27 ) InterlockedIncrement(v27 + 1); } v29 = operator new(0x60u); v48 = v29; v55 = 1; if ( v29 ) v30 = sub_85EBC0((float *)v29); else v30 = 0; ++*((_DWORD *)v30 + 22); v41 = 1.0; v42 = 1.0; v43 = 1.0; v30[17] = 1.0; v31 = v43; v30[18] = 1.0; v30[19] = v31; v32 = *(_DWORD **)(v12 + 308); v55 = -1; sub_403700(v32, (int)v30); v33 = operator new(0x28u); v34 = (int)v33; v48 = v33; v55 = 2; if ( v33 ) { sub_85B2B0(v33); *(_DWORD *)v34 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v34 + 28) = 0; *(_DWORD *)(v34 + 32) = 0; *(_DWORD *)(v34 + 36) = 1; } else { v34 = 0; } *(_DWORD *)(v34 + 32) = 0; *(_DWORD *)(v34 + 36) = 0; v35 = *(_DWORD **)(v12 + 308); v55 = -1; sub_403700(v35, v34); v36 = *(float **)(v12 + 308); v37 = *((_DWORD *)v36 + 23); v38 = *((_DWORD *)v36 + 22); v42 = -2.0; v39 = *((_DWORD *)v36 + 24); *((_DWORD *)v36 + 22) = v38; v36[23] = v42; *((_DWORD *)v36 + 24) = v39; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v12 + 116))(v12, *(_DWORD *)(v12 + 308), 0); sub_85C4D0((_DWORD *)v12); sub_85BED0((_DWORD **)v12, 0.0, 0); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (0045A710) -------------------------------------------------------- _DWORD *__thiscall sub_45A710(_DWORD *this) { _DWORD *v1; // esi int v2; // edi bool v3; // cf v1 = this; sub_459CC0(this); *v1 = &EditWinEx::`vftable'; v1[58] = &EditWinEx::`vftable'; v2 = (int)(v1 + 82); *(_DWORD *)(v2 + 20) = 15; *(_DWORD *)(v2 + 16) = 0; *(_BYTE *)v2 = 0; if ( !dword_ACD0AC ) dword_ACD0AC = GetCaretBlinkTime(); v1[80] = 0; v1[79] = 0; *((_BYTE *)v1 + 288) = 1; v3 = v1[87] < 0x10u; v1[86] = 0; if ( !v3 ) v2 = *(_DWORD *)v2; *(_BYTE *)v2 = 0; *((_BYTE *)v1 + 356) = 0; return v1; } // 9B2C58: using guessed type void *EditWinEx::`vftable'; // 9B2C74: using guessed type void *EditWinEx::`vftable'; // ACD0AC: using guessed type int dword_ACD0AC; //----- (0045A780) -------------------------------------------------------- LONG __thiscall sub_45A780(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi int v5; // esi _BYTE *v6; // eax v1 = this; *this = &EditWinEx::`vftable'; this[58] = &EditWinEx::`vftable'; v2 = this[74]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[74] = 0; } v3 = v1[75]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[75] = 0; } v4 = v1[76]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[76] = 0; } v5 = v1[77]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[77] = 0; } v1[86] = 0; if ( v1[87] < 0x10u ) v6 = v1 + 82; else v6 = (_BYTE *)v1[82]; *v6 = 0; if ( v1[87] >= 0x10u ) operator delete((void *)v1[82]); v1[87] = 15; v1[86] = 0; *((_BYTE *)v1 + 328) = 0; return sub_459D30((void **)v1); } // 9B2C58: using guessed type void *EditWinEx::`vftable'; // 9B2C74: using guessed type void *EditWinEx::`vftable'; //----- (0045A8F0) -------------------------------------------------------- char __thiscall sub_45A8F0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12) { return sub_45A330(this, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); } //----- (0045A900) -------------------------------------------------------- volatile LONG *__cdecl sub_45A900(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // eax volatile LONG *v12; // esi void (__thiscall ***v13)(void *, signed int); // edi volatile LONG *result; // eax void *v15; // [esp+14h] [ebp-10h] int v16; // [esp+20h] [ebp-4h] v11 = operator new(0x148u); v15 = v11; v16 = 0; if ( v11 ) v12 = sub_459CC0(v11); else v12 = 0; if ( v12 ) InterlockedIncrement(v12 + 1); v16 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int, int, int, int))(*v12 + 496))( v12, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v16 = -1; if ( !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); result = v12; } else { sub_403A70(&unk_BA6B10, &v15, v12); if ( v15 ) { v13 = (void (__thiscall ***)(void *, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)v15 + 1) ) { if ( v13 ) (**v13)(v13, 1); } } v16 = -1; if ( !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); result = 0; } return result; } //----- (0045AA60) -------------------------------------------------------- volatile LONG *__cdecl sub_45AA60(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // eax volatile LONG *v12; // esi void (__thiscall ***v13)(void *, signed int); // edi volatile LONG *result; // eax void *v15; // [esp+14h] [ebp-10h] int v16; // [esp+20h] [ebp-4h] v11 = operator new(0x168u); v15 = v11; v16 = 0; if ( v11 ) v12 = sub_45A710(v11); else v12 = 0; if ( v12 ) InterlockedIncrement(v12 + 1); v16 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int, int, int, int))(*v12 + 496))( v12, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v16 = -1; if ( !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); result = v12; } else { sub_403A70(&unk_BA6B10, &v15, v12); if ( v15 ) { v13 = (void (__thiscall ***)(void *, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)v15 + 1) ) { if ( v13 ) (**v13)(v13, 1); } } v16 = -1; if ( !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); result = 0; } return result; } //----- (0045ABC0) -------------------------------------------------------- const void **__thiscall sub_45ABC0(const void **this, const void **a2) { return sub_4017F0(this + 82, a2, 0, (void *)0xFFFFFFFF); } //----- (0045ABE0) -------------------------------------------------------- int __cdecl sub_45ABE0(int a1, float a2, float a3) { int result; // eax int v4; // ecx int v5; // edx int v6; // ecx result = a1; v4 = *(_DWORD *)(a1 + 88); v5 = *(_DWORD *)(a1 + 92); v6 = *(_DWORD *)(a1 + 96); *(float *)(a1 + 88) = a2; *(float *)(a1 + 92) = a3; *(_DWORD *)(a1 + 96) = v6; return result; } //----- (0045AC20) -------------------------------------------------------- void __thiscall sub_45AC20(_DWORD *this) { int v1; // ebx int v2; // esi int v3; // edi v1 = this[74]; v2 = this[75]; v3 = *(_DWORD *)(v2 + 40); if ( v3 != v1 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v2 + 40) = v1; if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); } } //----- (0045AC70) -------------------------------------------------------- bool __thiscall sub_45AC70(void *this) { bool result; // al if ( (void *)dword_ACD0B0 == this ) result = GetFocus() != 0; else result = 0; return result; } // ACD0B0: using guessed type int dword_ACD0B0; //----- (0045AC90) -------------------------------------------------------- void *__thiscall sub_45AC90(void *this, char a2) { void *v2; // esi v2 = this; sub_459D30((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0045ACC0) -------------------------------------------------------- void *__thiscall sub_45ACC0(void *this, char a2) { void *v2; // esi v2 = this; sub_45A780(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0045AD40) -------------------------------------------------------- int __thiscall sub_45AD40(int *this, int a2) { int *v2; // esi int v3; // edi int v4; // eax unsigned int v5; // edi _DWORD *v6; // edi int v7; // eax int v8; // edx int v9; // ebx unsigned int v10; // edi unsigned int v11; // eax _DWORD *v12; // edi _DWORD *v13; // ebx int v14; // eax int v15; // edi int v16; // eax int v17; // edi int v18; // eax int v20; // [esp+Ch] [ebp-4h] int v21; // [esp+18h] [ebp+8h] int v22; // [esp+18h] [ebp+8h] v2 = this; (*(void (__stdcall **)(int))(*(_DWORD *)this[104] + 148))(a2); v3 = *(_DWORD *)v2[105]; v4 = (*(int (**)(void))(*(_DWORD *)v2[104] + 160))(); (*(void (__thiscall **)(int, int))(v3 + 176))(v2[105], v4 + 2 * v2[88] + 3); v5 = (*(int (**)(void))(*(_DWORD *)v2[104] + 156))() + 2 * v2[89]; if ( v5 >= (*(int (**)(void))(*(_DWORD *)v2[105] + 144))() ) { v9 = *(_DWORD *)v2[105]; v10 = v2[89] - ((unsigned int)(*(int (**)(void))(*(_DWORD *)v2[105] + 144))() >> 1); v11 = (*(int (**)(void))(*(_DWORD *)v2[104] + 156))(); (*(void (__thiscall **)(int, unsigned int))(v9 + 172))(v2[105], v10 + (v11 >> 1)); v12 = (_DWORD *)v2[105]; v20 = *v2; v13 = (_DWORD *)v2[104]; v22 = (*(int (**)(void))(*(_DWORD *)v2[104] + 160))(); v14 = (*(int (__thiscall **)(_DWORD *))(*v12 + 148))(v12); v8 = (*(int (__thiscall **)(_DWORD *, int))(*v13 + 156))(v13, v14 + v22 + 2 * v2[88] + 6) + 2 * v2[89]; } else { (*(void (__stdcall **)(int))(*(_DWORD *)v2[105] + 172))(v2[89]); v6 = (_DWORD *)v2[105]; v20 = *v2; v21 = (*(int (**)(void))(*(_DWORD *)v2[104] + 160))(); v7 = (*(int (__thiscall **)(_DWORD *))(*v6 + 148))(v6); v8 = (*(int (__thiscall **)(_DWORD *, int))(*v6 + 144))(v6, v7 + v21 + 2 * v2[88] + 6) + 2 * v2[89]; } (*(void (__thiscall **)(int *, int))(v20 + 540))(v2, v8); v15 = *(_DWORD *)v2[106]; v16 = (*(int (__thiscall **)(int *))(*v2 + 144))(v2); (*(void (__thiscall **)(int, unsigned int))(v15 + 468))(v2[106], v16 - ((unsigned int)v2[89] >> 1) - 1); v17 = *(_DWORD *)v2[106]; v18 = (*(int (__thiscall **)(int *))(*v2 + 148))(v2); return (*(int (__thiscall **)(int, unsigned int))(v17 + 472))(v2[106], v18 - ((unsigned int)v2[88] >> 1) - 1); } //----- (0045AF30) -------------------------------------------------------- _DWORD *__thiscall sub_45AF30(_DWORD **this, int a2) { return sub_9076A0(this[104], a2); } //----- (0045AF40) -------------------------------------------------------- char __thiscall sub_45AF40(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // edi bool v4; // zf int v5; // esi char result; // al v3 = this; if ( a2 == 10 ) { v4 = *((_DWORD *)this + 59) == 0; v5 = (int)(this + 58); a2 = 0; if ( !v4 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)this + 59) + 4))(27, &a2, (_DWORD *)this + 58); if ( *((_DWORD *)v3 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v3 + 59) + 20))(27, &a2, (_DWORD *)v3 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*(_DWORD *)v5 + 20))( (_DWORD *)v3 + 58, 27, &a2, (_DWORD *)v3 + 58); result = sub_8F2BC0(v3, 2, 0, 0); } return result; } //----- (0045AFB0) -------------------------------------------------------- char __thiscall sub_45AFB0(volatile LONG **this, void *a2, int a3, int a4, int a5) { volatile LONG **v5; // esi unsigned int v6; // edi unsigned int v7; // ebx volatile LONG *v9; // eax float *v10; // eax int v11; // ST30_4 int v12; // ecx int v13; // ST34_4 float v14; // ST30_4 float v15; // ST34_4 int v16; // edi char *v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // ST14_4 volatile LONG *v23; // edi int v24; // ST10_4 int v25; // ST0C_4 int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx const CHAR *v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi _DWORD *v31; // [esp+30h] [ebp+8h] v5 = this; v6 = a4; v7 = a3; if ( !sub_45C530(this, a2, a3, a4, 0, 0, 0, a5) ) return 0; (*((void (__thiscall **)(volatile LONG **, int, int))*v5 + 135))( v5, 2 * (_DWORD)v5[89] + 128, 2 * (_DWORD)v5[88] + 12); v31 = operator new(0x14Cu); if ( v31 ) { v9 = (volatile LONG *)sub_421050(0); v10 = (float *)sub_90EEA0(v31, v9); } else { v10 = 0; } v5[104] = (volatile LONG *)v10; v11 = *((_DWORD *)v10 + 22); v12 = *((_DWORD *)v10 + 24); v13 = *((_DWORD *)v10 + 23); v14 = (double)v7; v15 = (double)v6; v10[22] = v14; v10[23] = v15; *((_DWORD *)v10 + 24) = v12; *((_BYTE *)v5[104] + 285) = 1; sub_9076A0(v5[104], 3); a5 = 0; v16 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v17 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v17, (int)&a5, v16); if ( !a5 ) return 0; v18 = (volatile LONG *)sub_43D0D0(0x13u); if ( v18 ) v19 = sub_8FB140(a5, (int)"Theme", (int)&a3, (int)&a4, v18); else v19 = sub_8FB140(a5, (int)"Theme", (int)&a3, (int)&a4, 0); v20 = sub_8F3EB0(a3, a4, (int)v19, (int)v5, 0, 0); v5[106] = v20; if ( v20 ) { (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(*v5[106] + 116))(v5[104], 0); } v21 = sub_8FB140(a5, (int)"BtnNor01", (int)&a3, (int)&a4, 0); sub_8FB650(v21, a5, (int)"BtnClick01"); sub_8FB650(v21, a5, (int)"BtnOver01"); v22 = sub_8FE0F0(a3, a4, (int)v21, (int)v5, 10, 0, 0); v5[105] = v22; v23 = v22; v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 0, v26, v25, v24, (int)v22, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v27; v29 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); sub_85C4D0(v5); if ( a5 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))a5; if ( !InterlockedDecrement((volatile LONG *)(a5 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0045B2B0) -------------------------------------------------------- int __cdecl sub_45B2B0(int a1, int a2, int a3, int a4) { _BYTE *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1ACu); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_45B4A0(v4); *(_DWORD *)v5 = &FlexMsgBox::`vftable'; *(_DWORD *)(v5 + 232) = &FlexMsgBox::`vftable'; *(_DWORD *)(v5 + 416) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 548))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9B2EB4: using guessed type void *FlexMsgBox::`vftable'; // 9B2ED4: using guessed type void *FlexMsgBox::`vftable'; //----- (0045B460) -------------------------------------------------------- void *__thiscall sub_45B460(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FlexMsgBox::`vftable'; *((_DWORD *)this + 58) = &FlexMsgBox::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B2EB4: using guessed type void *FlexMsgBox::`vftable'; // 9B2ED4: using guessed type void *FlexMsgBox::`vftable'; //----- (0045B4A0) -------------------------------------------------------- _BYTE *__thiscall sub_45B4A0(_BYTE *this) { _BYTE *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[412] = 0; *(_DWORD *)v1 = &FrameBoxWin::`vftable'; *((_DWORD *)v1 + 58) = &FrameBoxWin::`vftable'; *((_WORD *)v1 + 182) = 0; *((_DWORD *)v1 + 98) = 100; *((_DWORD *)v1 + 99) = 500; *((_DWORD *)v1 + 100) = 60; *((_DWORD *)v1 + 101) = 300; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B3104: using guessed type void *FrameBoxWin::`vftable'; // 9B3124: using guessed type void *FrameBoxWin::`vftable'; //----- (0045B500) -------------------------------------------------------- LONG __thiscall sub_45B500(_DWORD *this) { *this = &FrameBoxWin::`vftable'; this[58] = &FrameBoxWin::`vftable'; return sub_8F10F0(this); } // 9B3104: using guessed type void *FrameBoxWin::`vftable'; // 9B3124: using guessed type void *FrameBoxWin::`vftable'; //----- (0045B520) -------------------------------------------------------- BOOL __thiscall sub_45B520(char *this) { char *v1; // esi void (__thiscall *v2)(char *, int *, int *); // eax int v3; // eax int v4; // eax int v5; // eax int (__thiscall *v6)(char *); // edx int v7; // eax int v8; // edx int v9; // eax int v10; // edx int v11; // eax LONG v12; // edx int v13; // eax int v14; // eax int v15; // edx int v16; // eax LONG v17; // edx int v18; // eax int v19; // eax LONG v20; // edx int v21; // eax int v22; // eax LONG v23; // ebx LONG v24; // edi bool v25; // al int v27; // [esp+Ch] [ebp-4Ch] int v28; // [esp+10h] [ebp-48h] RECT v29; // [esp+14h] [ebp-44h] RECT v30; // [esp+24h] [ebp-34h] RECT v31; // [esp+34h] [ebp-24h] RECT rc; // [esp+44h] [ebp-14h] v1 = this; v28 = 0; v27 = 0; v2 = *(void (__thiscall **)(char *, int *, int *))(*(_DWORD *)this + 220); this[408] = 0; *(_WORD *)(this + 409) = 0; this[411] = 0; v2(this, &v27, &v28); rc.right = v27 + 7; v3 = *(_DWORD *)v1; rc.left = v27 - 7; rc.top = v28 - 7; v4 = (*(int (__thiscall **)(char *))(v3 + 148))(v1); rc.bottom = v4 + v28 + 7; v5 = *(_DWORD *)v1; v31.left = v27 - 7; v6 = *(int (__thiscall **)(char *))(v5 + 144); v31.top = v28 - 7; v7 = v6(v1); v31.right = v7 + v27 + 7; v8 = *(_DWORD *)v1; v31.bottom = v28 + 7; v9 = (*(int (__thiscall **)(char *))(v8 + 144))(v1); v29.left = v9 + v27 - 7; v10 = *(_DWORD *)v1; v29.top = v28 - 7; v11 = (*(int (__thiscall **)(char *))(v10 + 144))(v1); v12 = v11 + v27 + 7; v13 = *(_DWORD *)v1; v29.right = v12; v14 = (*(int (__thiscall **)(char *))(v13 + 148))(v1); v29.bottom = v14 + v28 + 7; v15 = *(_DWORD *)v1; v30.left = v27 - 7; v16 = (*(int (__thiscall **)(char *))(v15 + 148))(v1); v17 = v16 + v28 - 7; v18 = *(_DWORD *)v1; v30.top = v17; v19 = (*(int (__thiscall **)(char *))(v18 + 144))(v1); v20 = v19 + v27 + 7; v21 = *(_DWORD *)v1; v30.right = v20; v22 = (*(int (__thiscall **)(char *))(v21 + 148))(v1); v23 = pt.y; v24 = pt.x; v30.bottom = v22 + v28 + 7; v1[408] = PtInRect(&rc, pt) != 0; v1[410] = PtInRect(&v31, (POINT)__PAIR__(v23, v24)) != 0; v1[409] = PtInRect(&v29, (POINT)__PAIR__(v23, v24)) != 0; v25 = PtInRect(&v30, (POINT)__PAIR__(v23, v24)) != 0; v1[411] = v25; if ( v1[409] == 1 && v1[408] == 1 ) *((_WORD *)v1 + 204) = 1; if ( v25 == 1 && v1[410] == 1 ) *((_WORD *)v1 + 205) = 1; return v1[408] || v1[409] || v1[410] || v1[411]; } //----- (0045B790) -------------------------------------------------------- bool __thiscall sub_45B790(void *this, int a2, int a3) { void *v3; // esi int v4; // eax int v5; // eax bool result; // al v3 = this; (*(void (__thiscall **)(void *, int *, int *))(*(_DWORD *)this + 224))(this, &a2, &a3); result = 0; if ( a2 >= -7 ) { v4 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3); if ( a2 < v4 + 7 && a3 >= -7 ) { v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); if ( a3 < v5 + 7 ) result = 1; } } return result; } //----- (0045B7F0) -------------------------------------------------------- int __userpurge sub_45B7F0@(int a1@, int a2@, int a3@, _BYTE *a4) { int result; // eax int v5; // esi int v6; // eax LONG v7; // edx int v8; // eax int v9; // ecx int v10; // edi int v11; // ebx int v12; // eax int v13; // edx int v14; // eax int v15; // edx int v16; // eax int v17; // edx int v18; // eax bool v19; // zf int v20; // ecx int v21; // ecx int v22; // edx bool v23; // sf unsigned __int8 v24; // of int v25; // edx int v26; // ecx int v27; // ecx int v28; // ecx int v29; // ecx int v30; // ecx int v31; // edi int v32; // ecx int v33; // ecx int v34; // ebx int v35; // ecx int (__thiscall *v36)(int); // eax int v37; // eax void (__thiscall *v38)(int, int, int); // edx int v39; // eax int (__thiscall *v40)(int); // edx int v41; // eax int v42; // [esp-8h] [ebp-2Ch] int v43; // [esp-4h] [ebp-28h] int v44; // [esp+8h] [ebp-1Ch] int v45; // [esp+Ch] [ebp-18h] int v46; // [esp+10h] [ebp-14h] int v47; // [esp+14h] [ebp-10h] int v48; // [esp+18h] [ebp-Ch] int v49; // [esp+1Ch] [ebp-8h] result = (int)a4; v5 = a1; if ( *(_BYTE *)(a1 + 412) ) return result; v43 = a3; if ( dword_BA6AA8 < 1 ) { if ( dword_BA6AB4 < 1 ) goto LABEL_15; if ( dword_BA6A7C == a1 ) { dword_BA6A7C = 0; sub_8F1710((_DWORD *)a1); } LABEL_14: *(_BYTE *)(v5 + 365) = 0; LABEL_15: if ( !*(_BYTE *)(v5 + 365) ) goto LABEL_54; goto LABEL_16; } if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a1 + 260))(a1) || !(unsigned __int8)sub_45B520((char *)v5) ) goto LABEL_14; (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 268))(v5); byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; if ( !*(_BYTE *)(v5 + 364) || dword_BA6A7C ) goto LABEL_14; dword_BA6A7C = v5; if ( !*(_BYTE *)(v5 + 365) ) { v6 = *(_DWORD *)v5; *(_BYTE *)(v5 + 365) = 1; *(POINT *)(v5 + 368) = pt; *(_DWORD *)(v5 + 376) = (*(int (__thiscall **)(int))(v6 + 164))(v5); *(_DWORD *)(v5 + 380) = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 168))(v5); *(_DWORD *)(v5 + 384) = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); *(_DWORD *)(v5 + 388) = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); goto LABEL_15; } LABEL_16: if ( dword_BA6A7C == v5 ) { v7 = pt.x; v8 = *(_DWORD *)(v5 + 368); v9 = *(_DWORD *)(v5 + 372); v42 = a2; v10 = pt.x - v8; v11 = pt.y - v9; if ( !pt.x ) { if ( pt.y == pt.x ) { v11 = *(_DWORD *)(dword_ACDC88 + 68); v10 = 1; *(_DWORD *)(v5 + 368) = v8 + 1; *(_DWORD *)(v5 + 372) = v11 + v9; goto LABEL_22; } v7 = pt.x; } *(_DWORD *)(v5 + 368) = v7; *(_DWORD *)(v5 + 372) = pt.y; LABEL_22: v12 = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 164))(v5, v42, v43); v13 = *(_DWORD *)v5; *(_DWORD *)(v5 + 376) = v12; v14 = (*(int (__thiscall **)(int))(v13 + 168))(v5); v15 = *(_DWORD *)v5; *(_DWORD *)(v5 + 380) = v14; v16 = (*(int (__thiscall **)(int))(v15 + 144))(v5); v17 = *(_DWORD *)v5; *(_DWORD *)(v5 + 384) = v16; v18 = (*(int (__thiscall **)(int))(v17 + 148))(v5); v19 = *(_BYTE *)(v5 + 408) == 0; *(_DWORD *)(v5 + 388) = v18; if ( v19 ) { if ( *(_BYTE *)(v5 + 409) ) { v26 = *(_DWORD *)(v5 + 396); if ( v10 + *(_DWORD *)(v5 + 384) > v26 ) v10 = v26 - *(_DWORD *)(v5 + 384); v27 = *(_DWORD *)(v5 + 392); if ( v10 + *(_DWORD *)(v5 + 384) < v27 ) v10 = v27 - *(_DWORD *)(v5 + 384); v44 = *(_DWORD *)(v5 + 376); v28 = v10 + *(_DWORD *)(v5 + 384); } else { v28 = *(_DWORD *)(v5 + 384); v44 = *(_DWORD *)(v5 + 376); } v45 = v28; } else { v20 = *(_DWORD *)(v5 + 396); if ( *(_DWORD *)(v5 + 384) - v10 > v20 ) v10 = *(_DWORD *)(v5 + 384) - v20; v21 = *(_DWORD *)(v5 + 392); v22 = *(_DWORD *)(v5 + 384) - v10; v24 = __OFSUB__(v22, v21); v23 = v22 - v21 < 0; v25 = *(_DWORD *)(v5 + 384); if ( v23 ^ v24 ) v10 = v25 - v21; v44 = v10 + *(_DWORD *)(v5 + 376); v45 = v25 - v10; } if ( *(_BYTE *)(v5 + 410) ) { v29 = *(_DWORD *)(v5 + 404); if ( v18 - v11 > v29 ) v11 = v18 - v29; v30 = *(_DWORD *)(v5 + 400); if ( v18 - v11 < v30 ) v11 = v18 - v30; v31 = v11 + *(_DWORD *)(v5 + 380); v18 -= v11; } else { if ( *(_BYTE *)(v5 + 411) ) { v32 = *(_DWORD *)(v5 + 404); if ( v18 + v11 > v32 ) v11 = v32 - v18; v33 = *(_DWORD *)(v5 + 400); if ( v18 + v11 < v33 ) v11 = v33 - v18; v31 = *(_DWORD *)(v5 + 380); v34 = v18 + v11; goto LABEL_50; } v31 = *(_DWORD *)(v5 + 380); } v34 = v18; LABEL_50: (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); v35 = v45 - (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); v36 = *(int (__thiscall **)(int))(*(_DWORD *)v5 + 148); v48 = v35; v37 = v36(v5); v38 = *(void (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 540); v49 = v34 - v37; v38(v5, v45, v34); v39 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 164))(v5); v40 = *(int (__thiscall **)(int))(*(_DWORD *)v5 + 168); v46 = v44 - v39; v41 = v40(v5); v19 = *(_DWORD *)(v5 + 236) == 0; v47 = v31 - v41; if ( !v19 ) { (*(void (__stdcall **)(signed int, int *, int))(**(_DWORD **)(v5 + 236) + 4))(14, &v46, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, int *, int))(**(_DWORD **)(v5 + 236) + 20))(14, &v46, v5 + 232); } (*(void (__thiscall **)(int, signed int, int *))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 14, &v46); } LABEL_54: result = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 312))(v5); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140((void *)v5, a4); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // 45B7F0: could not find valid save-restore pair for ebx // 45B7F0: could not find valid save-restore pair for edi // ACDC88: using guessed type int dword_ACDC88; // BA6A7C: using guessed type int dword_BA6A7C; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (0045BC60) -------------------------------------------------------- char __stdcall sub_45BC60(int a1, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6, int a7) { float v7; // ST20_4 float v8; // ST2C_4 float v9; // ST34_4 float v10; // ST30_4 _WORD *v11; // ecx int v12; // edi float v13; // ST48_4 float v14; // ST40_4 double v15; // st7 float v16; // ST48_4 float v17; // ST14_4 float v18; // ST48_4 float v19; // ST10_4 float v20; // ST48_4 float v21; // ST0C_4 float v22; // ST48_4 float v24; // [esp+44h] [ebp-24h] float v25; // [esp+48h] [ebp-20h] float v26; // [esp+4Ch] [ebp-1Ch] float v27; // [esp+50h] [ebp-18h] float v28; // [esp+54h] [ebp-14h] float v29; // [esp+58h] [ebp-10h] float v30; // [esp+5Ch] [ebp-Ch] float v31; // [esp+60h] [ebp-8h] v10 = (double)(a7 + a5); v24 = (double)a4; v25 = (double)a5; v26 = (double)a4; v27 = v10; v28 = (double)(a6 + a4); v29 = v10; v30 = (double)(a6 + a4); v11 = *(_WORD **)(a1 + 184); v31 = (double)a5; v12 = sub_867880(v11, 4, 0, 0); sub_867DE0(*(_DWORD *)(a1 + 184), v12, 0, &v24); sub_867DE0(*(_DWORD *)(a1 + 184), v12, 1, &v26); sub_867DE0(*(_DWORD *)(a1 + 184), v12, 2, &v28); sub_867DE0(*(_DWORD *)(a1 + 184), v12, 3, &v30); sub_867680(*(_DWORD *)(a1 + 184)); v13 = (double)a3; v14 = (double)a2; v15 = v13; v16 = v10 / v13; v17 = v16; v9 = (double)(a6 + a4); v18 = v9 / v14; v19 = v18; v8 = (double)a5; v20 = v8 / v15; v21 = v20; v7 = (double)a4; v22 = v7 / v14; return sub_8681A0(*(_DWORD *)(a1 + 184), v12, 0, v22, v21, v19, v17); } //----- (0045BE40) -------------------------------------------------------- void __stdcall sub_45BE40(int a1, signed int a2, unsigned int a3, unsigned int a4, int a5, int a6) { int v6; // esi int v7; // ecx bool v8; // sf int v9; // edx double v10; // st7 int v11; // ecx int v12; // ecx int v13; // ecx float v14; // [esp+4h] [ebp-Ch] float v15; // [esp+8h] [ebp-8h] float v16; // [esp+Ch] [ebp-4h] float v17; // [esp+18h] [ebp+8h] float v18; // [esp+20h] [ebp+10h] float v19; // [esp+24h] [ebp+14h] v6 = a1; if ( a1 ) { v7 = *(_DWORD *)(a1 + 184); if ( *(_WORD *)(v7 + 100) ) { v17 = (double)a3; v16 = (double)a4; v8 = (signed int)(a6 + a4) < 0; v9 = a6 + a4; v19 = (double)(a5 + a3); v10 = (double)v9; if ( v8 ) v10 = v10 + 4294967300.0; v18 = v10; v14 = v17; v15 = v16; sub_867DE0(v7, a2, 0, &v14); v11 = *(_DWORD *)(v6 + 184); v14 = v17; v15 = v18; sub_867DE0(v11, a2, 1, &v14); v14 = v19; v12 = *(_DWORD *)(v6 + 184); v15 = v18; sub_867DE0(v12, a2, 2, &v14); v13 = *(_DWORD *)(v6 + 184); v14 = v19; v15 = v16; sub_867DE0(v13, a2, 3, &v14); sub_867680(*(_DWORD *)(v6 + 184)); } } } //----- (0045BF50) -------------------------------------------------------- int __thiscall sub_45BF50(_DWORD *this, unsigned int a2, unsigned int a3) { int result; // eax _DWORD **v4; // esi _DWORD *v5; // edx int v6; // ST14_4 void (__thiscall *v7)(_DWORD *, int); // eax result = a2; v4 = (_DWORD **)this; if ( this[86] != a2 || this[87] != a3 ) { if ( a2 < 2 * this[89] + 1 ) result = 2 * this[89] + 1; if ( a3 < 2 * this[88] + 1 ) result = 2 * this[88] + 1; v5 = (_DWORD *)*this; this[86] = result; v6 = result; v7 = (void (__thiscall *)(_DWORD *, int))v5[38]; this[87] = a3; v7(this, v6); ((void (__thiscall *)(_DWORD **, unsigned int))(*v4)[39])(v4, a3); sub_45BE40((int)v4[90], 0, 0, 0, (int)v4[89], (int)v4[88]); sub_45BE40((int)v4[90], 1, (char *)v4[86] - (char *)v4[89], 0, (int)v4[89], (int)v4[88]); sub_45BE40((int)v4[90], 2, 0, (char *)v4[87] - (char *)v4[88], (int)v4[89], (int)v4[88]); sub_45BE40( (int)v4[90], 3, (char *)v4[86] - (char *)v4[89], (char *)v4[87] - (char *)v4[88], (int)v4[89], (int)v4[88]); sub_45BE40((int)v4[90], 4, (unsigned int)v4[89], 0, (int)v4[86] - 2 * (_DWORD)v4[89], (int)v4[88]); sub_45BE40((int)v4[90], 5, 0, (unsigned int)v4[88], (int)v4[89], (int)v4[87] - 2 * (_DWORD)v4[88]); sub_45BE40( (int)v4[90], 6, (char *)v4[86] - (char *)v4[89], (unsigned int)v4[88], (int)v4[89], (int)v4[87] - 2 * (_DWORD)v4[88]); sub_45BE40( (int)v4[90], 7, (unsigned int)v4[89], (char *)v4[87] - (char *)v4[88], (int)v4[86] - 2 * (_DWORD)v4[89], (int)v4[88]); sub_45BE40( (int)v4[90], 8, (unsigned int)v4[89], (unsigned int)v4[88], (int)v4[86] - 2 * (_DWORD)v4[89], (int)v4[87] - 2 * (_DWORD)v4[88]); ((void (__thiscall *)(_DWORD **))(*v4)[16])(v4); result = sub_85BED0(v4, 0.0, 1); } return result; } //----- (0045C170) -------------------------------------------------------- char __thiscall sub_45C170(_DWORD *this, void *a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // eax _DWORD *v7; // edi _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax int v11; // edi _DWORD *v12; // eax _DWORD *v13; // edi v4 = this; if ( !a2 || (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2) <= (unsigned int)(2 * a3) || (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 64))(a2) <= (unsigned int)(2 * a4) ) { return 0; } v4[88] = a4; v4[89] = a3; v4[86] = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); v4[87] = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 64))(a2); v6 = operator new(0x70u); v7 = 0; if ( v6 ) v7 = sub_868440(v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1); v8 = operator new(0xC4u); if ( v8 ) v9 = sub_868C00(v8, (int)v7); else v9 = 0; v4[90] = v9; v10 = operator new(0x20u); v11 = (int)v10; if ( v10 ) { sub_85B2B0(v10); *(_DWORD *)v11 = &NiAlphaProperty::`vftable'; *(_WORD *)(v11 + 28) = 236; *(_BYTE *)(v11 + 30) = 0; } else { v11 = 0; } *(_WORD *)(v11 + 28) |= 1u; sub_403700((_DWORD *)v4[90], v11); v12 = operator new(0x44u); if ( v12 ) v13 = sub_863BB0(v12); else v13 = 0; sub_42AB40(v13, (int)a2); sub_45C760((_DWORD **)v13, 0); v13[7] = 2; sub_403700((_DWORD *)v4[90], (int)v13); sub_45BC60(v4[90], v4[86], v4[87], 0, 0, v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[86] - v4[89], 0, v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], 0, v4[87] - v4[88], v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[86] - v4[89], v4[87] - v4[88], v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[89], 0, v4[86] - 2 * v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], 0, v4[88], v4[89], v4[87] - 2 * v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[86] - v4[89], v4[88], v4[89], v4[87] - 2 * v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[89], v4[87] - v4[88], v4[86] - 2 * v4[89], v4[88]); sub_45BC60(v4[90], v4[86], v4[87], v4[89], v4[88], v4[86] - 2 * v4[89], v4[87] - 2 * v4[88]); (*(void (__thiscall **)(_DWORD *))(*v4 + 64))(v4); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 116))(v4, v4[90], 0); sub_85C4D0(v4); sub_85BED0((_DWORD **)v4, 0.0, 1); return 1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (0045C530) -------------------------------------------------------- char __thiscall sub_45C530(volatile LONG **this, void *a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8) { volatile LONG **v8; // esi char result; // al volatile LONG *v10; // ebx int v11; // eax volatile LONG *v12; // ebx int v13; // eax v8 = this; result = sub_8F15E0(this, a5, a6, a7, a8, 0, 0); if ( result ) { result = sub_45C170(v8, a2, a4, a3); if ( result ) { v10 = *v8; v11 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); (*((void (__thiscall **)(volatile LONG **, int))v10 + 38))(v8, v11); v12 = *v8; v13 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 64))(a2); (*((void (__thiscall **)(volatile LONG **, int))v12 + 39))(v8, v13); result = 1; } } return result; } //----- (0045C5B0) -------------------------------------------------------- volatile LONG *__cdecl sub_45C5B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _BYTE *v7; // eax volatile LONG *v8; // esi void (__thiscall ***v9)(void *, signed int); // edi volatile LONG *result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x1A0u); v11 = v7; v12 = 0; if ( v7 ) v8 = (volatile LONG *)sub_45B4A0(v7); else v8 = 0; if ( v8 ) InterlockedIncrement(v8 + 1); v12 = 1; sub_403790(&unk_BA6B10, (int)v8); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v8 + 544))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); result = 0; } return result; } //----- (0045C700) -------------------------------------------------------- void __thiscall sub_45C700(int this) { bool v1; // zf int v2; // eax v1 = *(_BYTE *)(this + 4) == 0; *(_BYTE *)(this + 4) = 0; if ( !v1 ) { v2 = *(_DWORD *)(this + 8); if ( v2 ) *(_DWORD *)(this + 8) = v2 - 1; } } //----- (0045C720) -------------------------------------------------------- void *__thiscall sub_45C720(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FrameBoxWin::`vftable'; *((_DWORD *)this + 58) = &FrameBoxWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3104: using guessed type void *FrameBoxWin::`vftable'; // 9B3124: using guessed type void *FrameBoxWin::`vftable'; //----- (0045C760) -------------------------------------------------------- unsigned int __thiscall sub_45C760(_DWORD **this, int a2) { _DWORD **v2; // edi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi void *v7; // [esp+Ch] [ebp-10h] int v8; // [esp+18h] [ebp-4h] v2 = this; result = *this[10]; if ( result ) { *(_DWORD *)(result + 12) = a2; } else { v4 = operator new(0x18u); v7 = v4; v8 = 0; if ( v4 ) v5 = sub_863940(v4); else v5 = 0; v6 = v5; v7 = v5; result = sub_823870(v2 + 9, 0, &v7); v6[3] = a2; } return result; } //----- (0045C880) -------------------------------------------------------- char __thiscall sub_45C880(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6) { _DWORD **v6; // edi char v8; // [esp+Ch] [ebp-104h] v6 = this; if ( a2 >= 9 ) return 0; (*(void (__stdcall **)(int, int, int, signed int))(*this[a2 + 104] + 464))(a4, a5, a6, 255); sprintf(&v8, "%d: %s", a2 + 1, a3); (*(void (__stdcall **)(char *))(*v6[a2 + 104] + 472))(&v8); return 1; } //----- (0045C930) -------------------------------------------------------- char __thiscall sub_45C930(volatile LONG **this, void *a2, int a3, int a4, _DWORD *a5) { volatile LONG **v5; // esi char result; // al _DWORD *v7; // eax int v8; // eax int v9; // ebx volatile LONG **v10; // edi volatile LONG *v11; // eax struct tagSIZE psizl; // [esp+4h] [ebp-Ch] _DWORD *v13; // [esp+Ch] [ebp-4h] signed int v14; // [esp+1Ch] [ebp+Ch] LONG v15; // [esp+20h] [ebp+10h] int v16; // [esp+24h] [ebp+14h] v5 = this; result = sub_45C530(this, a2, a3, a4, 0, 0, a5, 0); if ( result ) { v16 = 12; v15 = 8; v7 = (_DWORD *)sub_421050(0); v13 = v7; if ( v7 ) { sub_4593C0(v7, "W", 1, &psizl); v15 = psizl.cx; v16 = psizl.cy + 2; } v8 = 32 * v15; v9 = 0; v10 = v5 + 104; v14 = 10; while ( 1 ) { v11 = sub_8F4A20((int)v5[89], (int)v5[88] + v9 + 2, v8, v16 + 2, (int)v13, (int)v5, 0, 0); *v10 = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v9 += v16; ++v10; if ( !--v14 ) break; v8 = 32 * v15; } (*((void (__thiscall **)(volatile LONG **, int, int))*v5 + 135))( v5, 2 * (_DWORD)&v5[89][2 * v15], v16 + 2 * (_DWORD)v5[88]); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v5 + 60))(v5, 0); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v5 + 64))(v5, 0); result = 1; } return result; } //----- (0045CA60) -------------------------------------------------------- int __thiscall sub_45CA60(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // esi int (__thiscall *v4)(_DWORD **, signed int); // edx signed int v6; // esi _BYTE *v7; // eax int *v8; // edi int v9; // edx int *v10; // ecx unsigned int v11; // eax _BYTE *v12; // ecx unsigned int v13; // eax char *v14; // edi char v15; // cl char *v16; // edi char *v17; // esi char v18; // cl unsigned int v19; // eax char *v20; // edi char v21; // cl int v22; // [esp-Ch] [ebp-228h] int v23; // [esp-4h] [ebp-220h] unsigned int v24; // [esp+Ch] [ebp-210h] int **v25; // [esp+10h] [ebp-20Ch] signed int v26; // [esp+14h] [ebp-208h] _BYTE *i; // [esp+14h] [ebp-208h] _BYTE *j; // [esp+14h] [ebp-208h] char v29[256]; // [esp+18h] [ebp-204h] char v30[256]; // [esp+117h] [ebp-105h] char v31; // [esp+118h] [ebp-104h] v2 = this; v3 = (int)(this + 104); v25 = this + 104; v26 = 10; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9B334A); v3 += 4; --v26; } while ( v26 ); v4 = (int (__thiscall *)(_DWORD **, signed int))(*v2)[64]; if ( !*(_DWORD *)(a2 + 2304) ) return v4(v2, 0); v4(v2, 1); if ( *(_BYTE *)(a2 + 2320) ) { v6 = 0; if ( *(_DWORD *)(a2 + 2312) ) { v7 = (_BYTE *)a2; for ( i = (_BYTE *)a2; ; v7 = i ) { if ( *v7 ) { if ( *(_DWORD *)(a2 + 2308) == v6 ) { v23 = 0; v22 = 0; } else { v23 = 255; v22 = 255; } sub_45C880(v2, v6, (int)v7, v22, 255, v23); } else { sub_45C880(v2, v6, (int)&unk_9B334C, 255, 255, 255); } i += 256; if ( (unsigned int)++v6 >= *(_DWORD *)(a2 + 2312) ) break; } } sprintf(&v31, "(%d/%d)", *(_DWORD *)(a2 + 2316) + *(_DWORD *)(a2 + 2308) + 1, *(_DWORD *)(a2 + 2304)); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*v2[113] + 464))(255, 255, 255, 255); v8 = v2[113]; v9 = *v8; v10 = v8; } else { v11 = 0; v31 = 0; v29[0] = 0; if ( *(_DWORD *)(a2 + 2312) ) { v12 = (_BYTE *)a2; for ( j = (_BYTE *)a2; *v12; v12 = j ) { v24 = v11 + 1; sprintf(v29, "%d:%s", v11 + 1, v12); v13 = strlen(v29) + 1; v14 = v30; do v15 = (v14++)[1]; while ( v15 ); j += 256; qmemcpy(v14, v29, 4 * (v13 >> 2)); v17 = &v29[4 * (v13 >> 2)]; v16 = &v14[4 * (v13 >> 2)]; v18 = v13; v11 = v24; qmemcpy(v16, v17, v18 & 3); if ( v24 >= *(_DWORD *)(a2 + 2312) ) break; } } sprintf(v29, "(%d/%d)", *(_DWORD *)(a2 + 2316) + 1, *(_DWORD *)(a2 + 2304)); v19 = strlen(v29) + 1; v20 = v30; do v21 = (v20++)[1]; while ( v21 ); qmemcpy(v20, v29, v19); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**v25 + 464))(255, 255, 255, 255); v10 = *v25; v9 = **v25; } return (*(int (__thiscall **)(int *, char *))(v9 + 472))(v10, &v31); } // 45CA60: using guessed type char var_204[256]; //----- (0045CCF0) -------------------------------------------------------- int __thiscall sub_45CCF0(_DWORD **this, int a2, int a3, int a4) { _DWORD *v4; // edi int (*v5)(void); // edx int v6; // esi int result; // eax _DWORD *v8; // ebx const CHAR *v9; // eax struct tagSIZE psizl; // [esp+Ch] [ebp-18h] _DWORD *v11; // [esp+14h] [ebp-10h] int v12; // [esp+18h] [ebp-Ch] LONG v13; // [esp+1Ch] [ebp-8h] int v14; // [esp+20h] [ebp-4h] v4 = this; v5 = *(int (**)(void))(*this[104] + 456); v6 = (int)(this + 104); v11 = this; result = v5(); v8 = (_DWORD *)result; if ( result ) { SelectObject(*(HDC *)(result + 192), *(HGDIOBJ *)(result + 184)); v13 = 0; v14 = 0; v12 = 10; do { v9 = (const CHAR *)(*(int (**)(void))(**(_DWORD **)v6 + 484))(); if ( v9 && *v9 ) { sub_4593C0(v8, v9, strlen(v9), &psizl); if ( psizl.cx > v13 ) v13 = psizl.cx; v4 = v11; v14 += psizl.cy + 2; } v6 += 4; --v12; } while ( v12 ); if ( v13 ) (*(void (__thiscall **)(_DWORD *, int, int))(*v4 + 540))(v4, v13 + 2 * v4[89], v14 + 2 * v4[88]); if ( *((_BYTE *)v4 + 456) ) result = (*(int (__thiscall **)(_DWORD *, int, int))(*v4 + 308))(v4, a2, a4); else result = (*(int (__thiscall **)(_DWORD *, int, int))(*v4 + 308))(v4, a2, a3 - 2 * v4[88] - v14); } return result; } //----- (0045CE20) -------------------------------------------------------- int __cdecl sub_45CE20(int a1) { _BYTE *v1; // eax int v2; // esi int v3; // edi int v4; // eax void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v1 = operator new(0x1CCu); v2 = (int)v1; v7 = v1; v8 = 0; if ( v1 ) { sub_45B4A0(v1); *(_DWORD *)v2 = &ImeCandListWin::`vftable'; *(_DWORD *)(v2 + 232) = &ImeCandListWin::`vftable'; *(_BYTE *)(v2 + 456) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v2); v3 = *(_DWORD *)v2; v4 = sub_43D0D0(1u); if ( (*(unsigned __int8 (__thiscall **)(int, int, signed int, signed int, int))(v3 + 548))(v2, v4, 7, 7, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v2); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9B3374: using guessed type void *ImeCandListWin::`vftable'; // 9B3394: using guessed type void *ImeCandListWin::`vftable'; //----- (0045CF80) -------------------------------------------------------- void *__thiscall sub_45CF80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ImeCandListWin::`vftable'; *((_DWORD *)this + 58) = &ImeCandListWin::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3374: using guessed type void *ImeCandListWin::`vftable'; // 9B3394: using guessed type void *ImeCandListWin::`vftable'; //----- (0045D100) -------------------------------------------------------- _DWORD *__thiscall sub_45D100(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_459CC0(this); *v1 = &ImeEditWin::`vftable'; v1[58] = &ImeEditWin::`vftable'; v1[82] = 0; if ( !dword_ACD0AC ) dword_ACD0AC = GetCaretBlinkTime(); v1[80] = 0; v1[79] = 0; *((_BYTE *)v1 + 288) = 1; return v1; } // 9B35C8: using guessed type void *ImeEditWin::`vftable'; // 9B35E4: using guessed type void *ImeEditWin::`vftable'; // ACD0AC: using guessed type int dword_ACD0AC; //----- (0045D160) -------------------------------------------------------- LONG __thiscall sub_45D160(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi volatile LONG *v4; // edi volatile LONG *v5; // edi volatile LONG *v6; // edi v1 = this; *this = &ImeEditWin::`vftable'; this[58] = &ImeEditWin::`vftable'; v2 = (volatile LONG *)this[74]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[74] = 0; } v3 = (volatile LONG *)v1[75]; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v1[75] = 0; } v4 = (volatile LONG *)v1[76]; if ( v4 ) { if ( !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); v1[76] = 0; } v5 = (volatile LONG *)v1[77]; if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); v1[77] = 0; } v6 = (volatile LONG *)v1[82]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); return sub_459D30(v1); } // 9B35C8: using guessed type void *ImeEditWin::`vftable'; // 9B35E4: using guessed type void *ImeEditWin::`vftable'; //----- (0045D2A0) -------------------------------------------------------- int __thiscall sub_45D2A0(_DWORD *this, float a2) { _DWORD *v2; // esi int result; // eax char v4; // bl HWND v5; // edi unsigned int v6; // ecx int v7; // edx int v8; // eax unsigned int v9; // edi const char *v10; // eax const char *v11; // ebx int v12; // edi int v13; // eax int v14; // ecx int v15; // edx int v16; // ecx float v17; // ST2C_4 float v18; // ST30_4 _DWORD **v19; // ecx _DWORD *v20; // edi _DWORD **v21; // ebx int v22; // ST1C_4 int v23; // ST18_4 int v24; // eax _DWORD **v25; // esi __int64 v26; // [esp+14h] [ebp-Ch] int v27; // [esp+1Ch] [ebp-4h] signed int v28; // [esp+28h] [ebp+8h] int v29; // [esp+28h] [ebp+8h] v2 = this; result = this[75]; v4 = 1; v27 = result; if ( result ) { if ( *(_BYTE *)(result + 2806) == 1 && (_DWORD *)dword_ACD0B0 == this ) { v5 = *(HWND *)(result + 12); if ( v5 != GetFocus() ) v4 = 0; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 492))(v2) && v4 == 1 ) { v6 = dword_ACD0AC + v2[80]; v26 = (signed __int64)(a2 * 1000.0); if ( v6 <= (unsigned int)v26 ) { v7 = 1 - v2[79]; v2[80] = v26; v2[79] = v7; } v8 = v2[77]; if ( v2[79] == 1 ) *(_WORD *)(v8 + 28) &= 0xFFFEu; else *(_WORD *)(v8 + 28) |= 1u; } else { *(_WORD *)(v2[77] + 28) |= 1u; } v9 = 0; v28 = 0; v10 = (const char *)(*(int (**)(void))(*(_DWORD *)v2[76] + 484))(); v11 = v10; if ( v10 && *v10 ) { SelectObject(*(HDC *)(v2[74] + 192), *(HGDIOBJ *)(v2[74] + 184)); result = v2[76]; v12 = *(_DWORD *)(result + 288); if ( !v12 ) return result; v13 = sub_90E3C0((HWND *)v27); v29 = v13; if ( *(_BYTE *)(v27 + 92) ) v29 = sub_90F970((HIMC *)v27) + v13; sub_906450( (_DWORD *)v2[74], v11, v29, (int *)&v26, *(_DWORD *)(v12 + 304), *(_BYTE *)(v12 + 284), *(_BYTE *)(v12 + 285), (_DWORD *)(v12 + 236), *(_DWORD *)(v12 + 280)); v28 = HIDWORD(v26); v9 = v26; if ( v9 >= (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2) ) v9 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2) - 1; } result = v2[77]; v14 = *(_DWORD *)(result + 88); v15 = *(_DWORD *)(result + 92); HIDWORD(v26) = v9 + 1; v16 = *(_DWORD *)(result + 96); v17 = (double)(signed int)(v9 + 1); *(float *)(result + 88) = v17; v18 = (double)v28; *(float *)(result + 92) = v18; *(_DWORD *)(result + 96) = v16; v19 = (_DWORD **)v2[82]; if ( v19 ) result = sub_45CA60(v19, v27 + 476); if ( *(_BYTE *)(v27 + 92) ) { v20 = (_DWORD *)v2[76]; if ( v20 ) { v21 = (_DWORD **)v2[82]; if ( v21 ) { v22 = (*(int (__thiscall **)(_DWORD *))(*v2 + 148))(v2); v23 = sub_90FE70(v20); v24 = sub_90FDE0(v20); result = sub_45CCF0(v21, v24, v23, v22); } } } else { v25 = (_DWORD **)v2[82]; if ( v25 ) result = sub_45CCF0(v25, 0, 0, 0); } } return result; } // ACD0AC: using guessed type int dword_ACD0AC; // ACD0B0: using guessed type int dword_ACD0B0; //----- (0045D500) -------------------------------------------------------- _DWORD *__thiscall sub_45D500(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_45A710(this); *v1 = &ImeEditWinEx::`vftable'; v1[58] = &ImeEditWinEx::`vftable'; v1[90] = 0; if ( !dword_ACD0AC ) dword_ACD0AC = GetCaretBlinkTime(); v1[80] = 0; v1[79] = 0; *((_BYTE *)v1 + 288) = 1; return v1; } // 9B37E0: using guessed type void *ImeEditWinEx::`vftable'; // 9B37FC: using guessed type void *ImeEditWinEx::`vftable'; // ACD0AC: using guessed type int dword_ACD0AC; //----- (0045D560) -------------------------------------------------------- LONG __thiscall sub_45D560(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; *this = &ImeEditWinEx::`vftable'; this[58] = &ImeEditWinEx::`vftable'; v2 = this[74]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[74] = 0; } v3 = v1[75]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[75] = 0; } v4 = v1[76]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[76] = 0; } v5 = v1[77]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[77] = 0; } v6 = v1[90]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); return sub_45A780(v1); } // 9B37E0: using guessed type void *ImeEditWinEx::`vftable'; // 9B37FC: using guessed type void *ImeEditWinEx::`vftable'; //----- (0045D6A0) -------------------------------------------------------- void __thiscall sub_45D6A0(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // edi char v4; // bl int v5; // edi bool v6; // zf unsigned int v7; // ecx int v8; // edx int v9; // eax unsigned int v10; // ebx const char *v11; // eax int v12; // edi int v13; // eax float *v14; // eax int v15; // ecx int v16; // edx int v17; // ecx float v18; // ST2C_4 _DWORD **v19; // ecx _DWORD *v20; // edi _DWORD **v21; // ebx int v22; // ST1C_4 int v23; // ST18_4 int v24; // eax _DWORD **v25; // esi __int64 v26; // [esp+10h] [ebp-10h] const char *v27; // [esp+18h] [ebp-8h] int v28; // [esp+1Ch] [ebp-4h] signed int v29; // [esp+28h] [ebp+8h] int v30; // [esp+28h] [ebp+8h] v2 = this; v3 = this[75]; v4 = 1; v28 = v3; if ( v3 ) { if ( *(_BYTE *)(v3 + 2806) == 1 && (_DWORD *)dword_ACD0B0 == this ) { v5 = *(_DWORD *)(v3 + 12); v6 = v5 == (_DWORD)GetFocus(); v3 = v28; if ( !v6 ) v4 = 0; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 492))(v2) && v4 == 1 ) { v7 = dword_ACD0AC + v2[80]; v27 = (const char *)(HIWORD(a2) | 0xC00); v26 = (signed __int64)(a2 * 1000.0); if ( v7 <= (unsigned int)v26 ) { v8 = 1 - v2[79]; v2[80] = v26; v2[79] = v8; } v9 = v2[77]; if ( v2[79] == 1 ) *(_WORD *)(v9 + 28) &= 0xFFFEu; else *(_WORD *)(v9 + 28) |= 1u; } else { *(_WORD *)(v2[77] + 28) |= 1u; } v10 = 0; if ( sub_45A1D0(v2) == 1 && !sub_459C40(v2) ) v10 = (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2) >> 1; v29 = 0; v11 = (const char *)(*(int (**)(void))(*(_DWORD *)v2[76] + 484))(); v27 = v11; if ( v11 && *v11 ) { SelectObject(*(HDC *)(v2[74] + 192), *(HGDIOBJ *)(v2[74] + 184)); v12 = *(_DWORD *)(v2[76] + 288); if ( !v12 ) return; v13 = sub_90E3C0((HWND *)v28); v30 = v13; if ( *(_BYTE *)(v28 + 92) ) v30 = sub_90F970((HIMC *)v28) + v13; sub_906450( (_DWORD *)v2[74], v27, v30, (int *)&v26, *(_DWORD *)(v12 + 304), *(_BYTE *)(v12 + 284), *(_BYTE *)(v12 + 285), (_DWORD *)(v12 + 236), *(_DWORD *)(v12 + 280)); if ( sub_45A1D0(v2) != 1 || sub_459C40(v2) ) v10 = v26; else v10 += (signed int)v26 / 2; v29 = HIDWORD(v26); if ( v10 >= (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2) ) v10 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2) - 1; v3 = v28; } v14 = (float *)v2[77]; v15 = *((_DWORD *)v14 + 22); v16 = *((_DWORD *)v14 + 23); v27 = (const char *)(v10 + 1); v17 = *((_DWORD *)v14 + 24); v18 = (double)(signed int)(v10 + 1); v14[22] = v18; *(float *)&v26 = (double)v29; *((_DWORD *)v14 + 23) = v26; *((_DWORD *)v14 + 24) = v17; v19 = (_DWORD **)v2[90]; if ( v19 ) sub_45CA60(v19, v3 + 476); if ( *(_BYTE *)(v3 + 92) ) { v20 = (_DWORD *)v2[76]; if ( v20 ) { v21 = (_DWORD **)v2[90]; if ( v21 ) { v22 = (*(int (__thiscall **)(_DWORD *))(*v2 + 148))(v2); v23 = sub_90FE70(v20); v24 = sub_90FDE0(v20); sub_45CCF0(v21, v24, v23, v22); } } } else { v25 = (_DWORD **)v2[90]; if ( v25 ) sub_45CCF0(v25, 0, 0, 0); } } } // ACD0AC: using guessed type int dword_ACD0AC; // ACD0B0: using guessed type int dword_ACD0B0; //----- (0045D950) -------------------------------------------------------- char __thiscall sub_45D950(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12, int a13) { int v13; // esi int v14; // eax int v15; // edi int v16; // ebx int v18; // eax int v19; // edi char v20; // cl int v21; // edx _DWORD *v22; // eax volatile LONG *v23; // eax int v24; // edx volatile LONG *v25; // edi int v26; // eax int v27; // edi int v28; // ebx _WORD *v29; // edi _DWORD *v30; // eax _DWORD *v31; // ebx int v32; // edi void *v33; // eax float *v34; // eax float v35; // ecx _DWORD *v36; // ecx _DWORD *v37; // eax int v38; // edi _DWORD *v39; // ecx float *v40; // eax int v41; // edx int v42; // ecx int v43; // edx struct tagSIZE psizl; // [esp+38h] [ebp-50h] float v45; // [esp+40h] [ebp-48h] float v46; // [esp+44h] [ebp-44h] float v47; // [esp+48h] [ebp-40h] int v48; // [esp+4Ch] [ebp-3Ch] int v49; // [esp+50h] [ebp-38h] int v50; // [esp+54h] [ebp-34h] int v51; // [esp+58h] [ebp-30h] void *v52; // [esp+5Ch] [ebp-2Ch] int v53; // [esp+60h] [ebp-28h] volatile LONG *v54; // [esp+64h] [ebp-24h] int v55; // [esp+68h] [ebp-20h] int v56; // [esp+6Ch] [ebp-1Ch] int v57; // [esp+70h] [ebp-18h] int v58; // [esp+74h] [ebp-14h] int v59; // [esp+84h] [ebp-4h] v53 = a4; v50 = a7; v13 = (int)this; LOBYTE(v48) = a10; v51 = a5; v52 = a6; v49 = a8; v54 = (volatile LONG *)a9; v14 = sub_421050(a11); v15 = *(_DWORD *)(v13 + 296); v16 = v14; if ( v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *(_DWORD *)(v13 + 296) = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } if ( !*(_DWORD *)(v13 + 296) || !sub_8F2900((void *)v13, a2, a3, v53, v51, v52, 0, 0) ) return 0; v18 = v50; v55 = a2; v19 = v51; v56 = a3; v57 = a2 + v53; v20 = v48; v58 = v51 + a3; v21 = v49; *(_DWORD *)(v13 + 292) = v50; if ( v18 == 1342181380 ) v22 = sub_90F250( dword_ACDC7C, (int)hWnd, 1342181380, (int)v54, v21, v20, (int)&v55, *(_DWORD *)(*(_DWORD *)(v13 + 296) + 184), 1u); else v22 = sub_90F250(dword_ACDC7C, (int)hWnd, v18, (int)v54, v21, v20, 0, 0, 1u); sub_56FF80((_DWORD *)(v13 + 300), (int)v22); v23 = sub_90FA40(0, 0, v53, v19, *(_DWORD *)(v13 + 296), v13, 0, 0); v25 = *(volatile LONG **)(v13 + 304); v54 = v23; if ( v25 != v23 ) { if ( v25 ) { if ( !InterlockedDecrement(v25 + 1) && v25 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v25)(v25, 1); v23 = v54; } *(_DWORD *)(v13 + 304) = v23; if ( v23 ) InterlockedIncrement(v23 + 1); } if ( v50 == 1342181380 ) { *(_BYTE *)(*(_DWORD *)(*(_DWORD *)(v13 + 304) + 288) + 284) = 1; sub_90D230(*(_DWORD *)(v13 + 304), v24, 0); } (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v13 + 300) + 88))( *(_DWORD *)(v13 + 300), *(_DWORD *)(v13 + 304)); *(_BYTE *)(v13 + 312) = a12; if ( a12 ) sub_8FE250(0, 0, v53, v51, v13, 0, 0, 0); v26 = sub_45CE20(v13); v27 = *(_DWORD *)(v13 + 328); v28 = v26; if ( v27 != v26 ) { if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); *(_DWORD *)(v13 + 328) = v28; if ( v28 ) InterlockedIncrement((volatile LONG *)(v28 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 + 328) + 276))(1.0); SelectObject(*(HDC *)(*(_DWORD *)(v13 + 296) + 192), *(HGDIOBJ *)(*(_DWORD *)(v13 + 296) + 184)); sub_4593C0(*(_DWORD **)(v13 + 296), "|", 1, &psizl); v29 = sub_8F61B0(2u, psizl.cy + 2); v30 = operator new(0xC4u); v52 = v30; v31 = 0; v59 = 0; if ( v30 ) v31 = sub_868C00(v30, (int)v29); v32 = *(_DWORD *)(v13 + 308); v59 = -1; if ( (_DWORD *)v32 != v31 ) { if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); *(_DWORD *)(v13 + 308) = v31; if ( v31 ) InterlockedIncrement(v31 + 1); } v33 = operator new(0x60u); v52 = v33; v59 = 1; if ( v33 ) v34 = sub_85EBC0((float *)v33); else v34 = 0; ++*((_DWORD *)v34 + 22); v45 = 1.0; v46 = 1.0; v47 = 1.0; v34[17] = 1.0; v35 = v47; v34[18] = 1.0; v34[19] = v35; v36 = *(_DWORD **)(v13 + 308); v59 = -1; sub_403700(v36, (int)v34); v37 = operator new(0x28u); v38 = (int)v37; v52 = v37; v59 = 2; if ( v37 ) { sub_85B2B0(v37); *(_DWORD *)v38 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v38 + 28) = 0; *(_DWORD *)(v38 + 32) = 0; *(_DWORD *)(v38 + 36) = 1; } else { v38 = 0; } *(_DWORD *)(v38 + 32) = 0; *(_DWORD *)(v38 + 36) = 0; v39 = *(_DWORD **)(v13 + 308); v59 = -1; sub_403700(v39, v38); v40 = *(float **)(v13 + 308); v41 = *((_DWORD *)v40 + 23); v42 = *((_DWORD *)v40 + 22); v46 = -2.0; v43 = *((_DWORD *)v40 + 24); *((_DWORD *)v40 + 22) = v42; v40[23] = v46; *((_DWORD *)v40 + 24) = v43; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v13 + 116))(v13, *(_DWORD *)(v13 + 308), 0); sub_85C4D0((_DWORD *)v13); sub_85BED0((_DWORD **)v13, 0.0, 0); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (0045DDA0) -------------------------------------------------------- char __thiscall sub_45DDA0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12, int a13) { int v13; // esi int v14; // eax int v15; // edi int v16; // ebx int v18; // eax int v19; // edi char v20; // cl int v21; // edx _DWORD *v22; // eax volatile LONG *v23; // eax int v24; // edx volatile LONG *v25; // edi int v26; // eax int v27; // edi int v28; // ebx _WORD *v29; // edi _DWORD *v30; // eax _DWORD *v31; // ebx int v32; // edi void *v33; // eax float *v34; // eax float v35; // ecx _DWORD *v36; // ecx _DWORD *v37; // eax int v38; // edi _DWORD *v39; // ecx float *v40; // eax int v41; // edx int v42; // ecx int v43; // edx struct tagSIZE psizl; // [esp+38h] [ebp-50h] float v45; // [esp+40h] [ebp-48h] float v46; // [esp+44h] [ebp-44h] float v47; // [esp+48h] [ebp-40h] int v48; // [esp+4Ch] [ebp-3Ch] int v49; // [esp+50h] [ebp-38h] int v50; // [esp+54h] [ebp-34h] int v51; // [esp+58h] [ebp-30h] void *v52; // [esp+5Ch] [ebp-2Ch] int v53; // [esp+60h] [ebp-28h] volatile LONG *v54; // [esp+64h] [ebp-24h] int v55; // [esp+68h] [ebp-20h] int v56; // [esp+6Ch] [ebp-1Ch] int v57; // [esp+70h] [ebp-18h] int v58; // [esp+74h] [ebp-14h] int v59; // [esp+84h] [ebp-4h] v53 = a4; v50 = a7; v13 = (int)this; LOBYTE(v48) = a10; v51 = a5; v52 = a6; v49 = a8; v54 = (volatile LONG *)a9; v14 = sub_421050(a11); v15 = *(_DWORD *)(v13 + 296); v16 = v14; if ( v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *(_DWORD *)(v13 + 296) = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } if ( !*(_DWORD *)(v13 + 296) || !sub_8F2900((void *)v13, a2, a3, v53, v51, v52, 0, 0) ) return 0; v18 = v50; v55 = a2; v19 = v51; v56 = a3; v57 = a2 + v53; v20 = v48; v58 = v51 + a3; v21 = v49; *(_DWORD *)(v13 + 292) = v50; if ( v18 == 1342181380 ) v22 = sub_90F250( dword_ACDC7C, (int)hWnd, 1342181380, (int)v54, v21, v20, (int)&v55, *(_DWORD *)(*(_DWORD *)(v13 + 296) + 184), 1u); else v22 = sub_90F250(dword_ACDC7C, (int)hWnd, v18, (int)v54, v21, v20, 0, 0, 1u); sub_56FF80((_DWORD *)(v13 + 300), (int)v22); v23 = sub_90FA40(0, 0, v53, v19, *(_DWORD *)(v13 + 296), v13, 0, 0); v25 = *(volatile LONG **)(v13 + 304); v54 = v23; if ( v25 != v23 ) { if ( v25 ) { if ( !InterlockedDecrement(v25 + 1) && v25 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v25)(v25, 1); v23 = v54; } *(_DWORD *)(v13 + 304) = v23; if ( v23 ) InterlockedIncrement(v23 + 1); } if ( v50 == 1342181380 ) { *(_BYTE *)(*(_DWORD *)(*(_DWORD *)(v13 + 304) + 288) + 284) = 1; sub_90D230(*(_DWORD *)(v13 + 304), v24, 0); } (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v13 + 300) + 88))( *(_DWORD *)(v13 + 300), *(_DWORD *)(v13 + 304)); *(_BYTE *)(v13 + 312) = a12; if ( a12 ) sub_8FE250(0, 0, v53, v51, v13, 0, 0, 0); v26 = sub_45CE20(v13); v27 = *(_DWORD *)(v13 + 360); v28 = v26; if ( v27 != v26 ) { if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); *(_DWORD *)(v13 + 360) = v28; if ( v28 ) InterlockedIncrement((volatile LONG *)(v28 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 + 360) + 276))(1.0); SelectObject(*(HDC *)(*(_DWORD *)(v13 + 296) + 192), *(HGDIOBJ *)(*(_DWORD *)(v13 + 296) + 184)); sub_4593C0(*(_DWORD **)(v13 + 296), "|", 1, &psizl); v29 = sub_8F61B0(2u, psizl.cy + 2); v30 = operator new(0xC4u); v52 = v30; v31 = 0; v59 = 0; if ( v30 ) v31 = sub_868C00(v30, (int)v29); v32 = *(_DWORD *)(v13 + 308); v59 = -1; if ( (_DWORD *)v32 != v31 ) { if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); *(_DWORD *)(v13 + 308) = v31; if ( v31 ) InterlockedIncrement(v31 + 1); } v33 = operator new(0x60u); v52 = v33; v59 = 1; if ( v33 ) v34 = sub_85EBC0((float *)v33); else v34 = 0; ++*((_DWORD *)v34 + 22); v45 = 1.0; v46 = 1.0; v47 = 1.0; v34[17] = 1.0; v35 = v47; v34[18] = 1.0; v34[19] = v35; v36 = *(_DWORD **)(v13 + 308); v59 = -1; sub_403700(v36, (int)v34); v37 = operator new(0x28u); v38 = (int)v37; v52 = v37; v59 = 2; if ( v37 ) { sub_85B2B0(v37); *(_DWORD *)v38 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v38 + 28) = 0; *(_DWORD *)(v38 + 32) = 0; *(_DWORD *)(v38 + 36) = 1; } else { v38 = 0; } *(_DWORD *)(v38 + 32) = 0; *(_DWORD *)(v38 + 36) = 0; v39 = *(_DWORD **)(v13 + 308); v59 = -1; sub_403700(v39, v38); v40 = *(float **)(v13 + 308); v41 = *((_DWORD *)v40 + 23); v42 = *((_DWORD *)v40 + 22); v46 = -2.0; v43 = *((_DWORD *)v40 + 24); *((_DWORD *)v40 + 22) = v42; v40[23] = v46; *((_DWORD *)v40 + 24) = v43; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v13 + 116))(v13, *(_DWORD *)(v13 + 308), 0); sub_85C4D0((_DWORD *)v13); sub_85BED0((_DWORD **)v13, 0.0, 0); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (0045E350) -------------------------------------------------------- volatile LONG *__cdecl sub_45E350(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { _DWORD *v12; // eax volatile LONG *v13; // esi void (__thiscall ***v14)(void *, signed int); // edi volatile LONG *result; // eax void *v16; // [esp+14h] [ebp-10h] int v17; // [esp+20h] [ebp-4h] v12 = operator new(0x16Cu); v16 = v12; v17 = 0; if ( v12 ) v13 = sub_45D500(v12); else v13 = 0; if ( v13 ) InterlockedIncrement(v13 + 1); v17 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int, int, int, int, int))(*v13 + 500))( v13, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v17 = -1; if ( !InterlockedDecrement(v13 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); result = v13; } else { sub_403A70(&unk_BA6B10, &v16, v13); if ( v16 ) { v14 = (void (__thiscall ***)(void *, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)v16 + 1) ) { if ( v14 ) (**v14)(v14, 1); } } v17 = -1; if ( !InterlockedDecrement(v13 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); result = 0; } return result; } //----- (0045E4B0) -------------------------------------------------------- void *__thiscall sub_45E4B0(void *this, char a2) { void *v2; // esi v2 = this; sub_45D160((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0045E4E0) -------------------------------------------------------- void *__thiscall sub_45E4E0(void *this, char a2) { void *v2; // esi v2 = this; sub_45D560(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0045E560) -------------------------------------------------------- int __thiscall sub_45E560(_DWORD **this) { return (*(int (**)(void))(*this[87] + 472))(); } //----- (0045E580) -------------------------------------------------------- int __thiscall sub_45E580(_DWORD *this, int a2) { int result; // eax result = a2; this[89] = a2; return result; } //----- (0045E590) -------------------------------------------------------- int __thiscall sub_45E590(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (0045E5B0) -------------------------------------------------------- int __thiscall sub_45E5B0(_BYTE *this) { _BYTE *v1; // esi v1 = this; sub_8F28C0(this); (*(void (**)(void))(**((_DWORD **)v1 + 86) + 468))(); return (*(int (**)(void))(**((_DWORD **)v1 + 86) + 480))(); } //----- (0045E5E0) -------------------------------------------------------- int __thiscall sub_45E5E0(_DWORD **this) { return (*(int (**)(void))(*this[86] + 480))(); } //----- (0045E5F0) -------------------------------------------------------- char __thiscall sub_45E5F0(volatile LONG *this) { volatile LONG *v1; // edi int v2; // eax bool v3; // zf int v4; // eax int v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(**((_DWORD **)this + 86) + 452))(); v3 = *((_DWORD *)v1 + 59) == 0; v7 = v2; v6 = 0; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(**((_DWORD **)v1 + 59) + 4))(28, &v6, (_DWORD **)v1 + 58); if ( *((_DWORD *)v1 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(**((_DWORD **)v1 + 59) + 16))(28, &v6, (_DWORD **)v1 + 58); } (*(void (__thiscall **)(volatile LONG *, signed int, int *, volatile LONG *))(*((_DWORD *)v1 + 58) + 16))( v1 + 58, 28, &v6, v1 + 58); if ( *((_DWORD *)v1 + 89) == 1 ) { LOBYTE(v4) = sub_8F2BC0(v1, 1, 0, 0); } else { v4 = *((_DWORD *)v1 + 89) - 2; if ( *((_DWORD *)v1 + 89) == 2 ) LOBYTE(v4) = sub_8F2BC0(v1, 2, 0, 0); } return v4; } //----- (0045E690) -------------------------------------------------------- char __thiscall sub_45E690(volatile LONG *this) { volatile LONG *v1; // edi int v2; // eax bool v3; // zf int v4; // eax int v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(**((_DWORD **)this + 86) + 452))(); v3 = *((_DWORD *)v1 + 59) == 0; v7 = v2; v6 = 1; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(**((_DWORD **)v1 + 59) + 4))(28, &v6, (_DWORD **)v1 + 58); if ( *((_DWORD *)v1 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(**((_DWORD **)v1 + 59) + 16))(28, &v6, (_DWORD **)v1 + 58); } (*(void (__thiscall **)(volatile LONG *, signed int, int *, volatile LONG *))(*((_DWORD *)v1 + 58) + 16))( v1 + 58, 28, &v6, v1 + 58); if ( *((_DWORD *)v1 + 89) == 1 ) { LOBYTE(v4) = sub_8F2BC0(v1, 1, 0, 0); } else { v4 = *((_DWORD *)v1 + 89) - 2; if ( *((_DWORD *)v1 + 89) == 2 ) LOBYTE(v4) = sub_8F2BC0(v1, 2, 0, 0); } return v4; } //----- (0045E730) -------------------------------------------------------- char __thiscall sub_45E730(volatile LONG *this, int a2, int a3) { char result; // al result = a2; if ( a2 == 1 ) return sub_45E5F0(this); if ( a2 == 4 ) result = sub_45E690(this); return result; } //----- (0045E760) -------------------------------------------------------- char __thiscall sub_45E760(void *this) { int v1; // esi int v2; // edi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // eax int v10; // eax volatile LONG *v11; // edi int v12; // ST0C_4 volatile LONG **v13; // edi volatile LONG *v14; // edx int v15; // edi int v16; // ebx int v17; // eax volatile LONG *v18; // edi volatile LONG v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // ecx int v23; // edi int v24; // ebx int v25; // eax volatile LONG *v26; // edi volatile LONG v27; // ebx const CHAR *v28; // eax volatile LONG *v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi int v31[5]; // [esp+10h] [ebp-34h] int v32; // [esp+24h] [ebp-20h] int v33; // [esp+28h] [ebp-1Ch] int v34; // [esp+2Ch] [ebp-18h] int v35; // [esp+30h] [ebp-14h] int v36; // [esp+34h] [ebp-10h] int v37; // [esp+40h] [ebp-4h] v1 = (int)this; v36 = 0; v2 = dword_BA6BA0; v37 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\AddFriendList.nif"); sub_8F66B0(v3, (int)&v36, v2); if ( !v36 ) return 0; v4 = sub_8FB140(v36, (int)"Panel01", (int)&v34, (int)&v35, 0); if ( !sub_8F1440((volatile LONG **)v1, 0, 0, (int)v4, 0, 0, (int)"InputBox", 0) ) goto LABEL_23; v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v36, (int)"Theme", (int)&v34, (int)&v35, v7); else v8 = sub_8FB140(v36, (int)"Theme", (int)&v34, (int)&v35, 0); v9 = sub_8F3EB0(v34, v35, (int)v8, v1, 0, 0); if ( v9 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); if ( !sub_8F71E0(v36, (int)"TextBox", &v34, &v35, &v32, &v33) ) { LABEL_23: v5 = (void (__thiscall ***)(_DWORD, signed int))v36; v37 = -1; if ( v36 && !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v10 = sub_421050(0); v11 = sub_8F4A20(v34, v35, v32, v33, v10, v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = v36; *(_DWORD *)(v1 + 348) = v11; v13 = sub_8FB140(v12, (int)"BtnNor02", (int)&v34, (int)&v35, 0); sub_8FB650(v13, v36, (int)"BtnClick02"); sub_8FB650(v13, v36, (int)"BtnOver02"); sub_8FE0F0(v34, v35, (int)v13, v1, 0, 0, 0); v14 = v13[9]; v15 = *(_DWORD *)(*v14 + 24); v16 = *(_DWORD *)(*v14 + 20); v17 = sub_421050(0); v18 = sub_8F4A20(v34, v35 + 1, v16, v15, v17, v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); v19 = *v18; v20 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v19 + 472))(v18, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v21 = sub_8FB140(v36, (int)"BtnNor03", (int)&v34, (int)&v35, 0); sub_8FB650(v21, v36, (int)"BtnClick03"); sub_8FB650(v21, v36, (int)"BtnOver03"); sub_8FE0F0(v34, v35, (int)v21, v1, 1, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v24 = *(_DWORD *)(*v22 + 20); v25 = sub_421050(0); v26 = sub_8F4A20(v34, v35 + 1, v24, v23, v25, v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v27 = *v26; v28 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v27 + 472))(v26, v28); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); sub_456260(v31); LOBYTE(v37) = 1; sub_456000(v31, 0, 0); sub_455FF0(v31, v1); sub_456380(v31, v36); v29 = sub_4565F0(v31, (int)"InputBox", 16, 1342177280, 0, 1); *(_DWORD *)(v1 + 344) = v29; (*(void (__thiscall **)(volatile LONG *, void *))(*v29 + 460))(v29, &unk_9B3A0B); (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v1 + 344) + 300) + 52))(5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v1 + 344) + 300) + 60))(0); LOBYTE(v37) = 0; sub_4562E0(v31); v37 = -1; if ( v36 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0045EB60) -------------------------------------------------------- char __thiscall sub_45EB60(volatile LONG *this, int a2, int a3) { char result; // al if ( !a2 ) return sub_45E5F0(this); result = a2 - 1; if ( a2 == 1 ) result = sub_45E690(this); return result; } //----- (0045EB80) -------------------------------------------------------- int sub_45EB80() { void *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x168u); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { Concurrency::overwrite_buffer::overwrite_buffer(v0); *(_DWORD *)v1 = &InputBox::`vftable'; *(_DWORD *)(v1 + 232) = &InputBox::`vftable'; *(_DWORD *)(v1 + 356) = 1; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 540))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B3A90: using guessed type void *InputBox::`vftable'; // 9B3AAC: using guessed type void *InputBox::`vftable'; //----- (0045ECD0) -------------------------------------------------------- void *__thiscall sub_45ECD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &InputBox::`vftable'; *((_DWORD *)this + 58) = &InputBox::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3A90: using guessed type void *InputBox::`vftable'; // 9B3AAC: using guessed type void *InputBox::`vftable'; //----- (0045ED10) -------------------------------------------------------- char __thiscall sub_45ED10(_DWORD *this, const char *a2) { _DWORD *v2; // esi _BYTE *v3; // eax unsigned int v4; // edi _BYTE *v5; // edx const char *v6; // ecx v2 = this; if ( a2 || (v3 = (_BYTE *)this[3]) == 0 ) { v4 = strlen(a2); if ( v2[4] <= v4 ) { operator delete[]((void *)v2[3]); v2[4] = v4 + 1; v2[3] = operator new[](v4 + 1); } v5 = (_BYTE *)v2[3]; v6 = a2; do { LOBYTE(v3) = *v6; *v5++ = *v6++; } while ( (_BYTE)v3 ); } else { *v3 = 0; } return (char)v3; } //----- (0045ED80) -------------------------------------------------------- char __thiscall sub_45ED80(void *this, int a2, int a3) { int v3; // eax v3 = (*(int (__stdcall **)(int))(*(_DWORD *)this + 484))(a2); if ( !v3 ) return 0; *(_DWORD *)(v3 + 8) = a3; return 1; } //----- (0045EDB0) -------------------------------------------------------- int __thiscall sub_45EDB0(void *this, int a2) { int result; // eax result = (*(int (__stdcall **)(int))(*(_DWORD *)this + 484))(a2); if ( result ) result = *(_DWORD *)(result + 8); return result; } //----- (0045EDD0) -------------------------------------------------------- int __thiscall sub_45EDD0(_DWORD *this) { return this[72]; } //----- (0045EDE0) -------------------------------------------------------- int __thiscall sub_45EDE0(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { _DWORD *v5; // esi float *v6; // eax int result; // eax char v8; // [esp+4h] [ebp-10h] v5 = this; v6 = sub_419EE0((float *)&v8, a2, a3, a4, a5); v5[74] = *(_DWORD *)v6; v5[75] = *((_DWORD *)v6 + 1); v5[76] = *((_DWORD *)v6 + 2); result = *((_DWORD *)v6 + 3); v5[77] = result; return result; } //----- (0045EE30) -------------------------------------------------------- int __thiscall sub_45EE30(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { _DWORD *v5; // esi float *v6; // eax int result; // eax char v8; // [esp+4h] [ebp-10h] v5 = this; v6 = sub_419EE0((float *)&v8, a2, a3, a4, a5); v5[78] = *(_DWORD *)v6; v5[79] = *((_DWORD *)v6 + 1); v5[80] = *((_DWORD *)v6 + 2); result = *((_DWORD *)v6 + 3); v5[81] = result; return result; } //----- (0045EE80) -------------------------------------------------------- int __thiscall sub_45EE80(_DWORD *this, _DWORD *a2) { int result; // eax this[78] = *a2; this[79] = a2[1]; this[80] = a2[2]; result = a2[3]; this[81] = result; return result; } //----- (0045EEB0) -------------------------------------------------------- int __thiscall sub_45EEB0(void *this, int a2, int a3) { int result; // eax if ( !a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)this + 504))(a3); return result; } //----- (0045EED0) -------------------------------------------------------- int __thiscall sub_45EED0(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 472))(); } //----- (0045EEE0) -------------------------------------------------------- int __thiscall sub_45EEE0(_DWORD *this) { return this[86]; } //----- (0045EEF0) -------------------------------------------------------- int __thiscall sub_45EEF0(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi _DWORD *v4; // eax int result; // eax v2 = a2; v3 = this; if ( a2 < 0 || a2 >= (*(int (**)(void))(*this + 452))() || (unsigned int)a2 >= v3[86] ) goto LABEL_14; v4 = (_DWORD *)v3[84]; if ( a2 ) { do { if ( v4 ) v4 = (_DWORD *)*v4; else v4 = 0; --v2; } while ( v2 ); } if ( v4 ) result = v4[2]; else LABEL_14: result = 0; return result; } //----- (0045EF50) -------------------------------------------------------- int __thiscall sub_45EF50(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi _DWORD *v4; // eax int result; // eax v2 = a2; v3 = this; if ( a2 < 0 || a2 >= (*(int (**)(void))(*this + 452))() || (unsigned int)a2 >= v3[90] ) goto LABEL_14; v4 = (_DWORD *)v3[88]; if ( a2 ) { do { if ( v4 ) v4 = (_DWORD *)*v4; else v4 = 0; --v2; } while ( v2 ); } if ( v4 ) result = v4[2]; else LABEL_14: result = 0; return result; } //----- (0045EFB0) -------------------------------------------------------- LONG __fastcall sub_45EFB0(int a1) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ST00_4 _DWORD *v4; // esi _DWORD *v5; // edi _DWORD *v6; // ST00_4 _DWORD *v7; // esi _DWORD *v8; // edi _DWORD *v9; // ST00_4 int v11; // [esp+14h] [ebp-10h] v11 = a1; *(_DWORD *)a1 = &ListWin::`vftable'; *(_DWORD *)(a1 + 232) = &ListWin::`vftable'; v1 = (_DWORD *)(a1 + 364); *(_DWORD *)(a1 + 364) = &NiTPointerListBase,PgWinBut *>::`vftable'; v2 = *(_DWORD **)(a1 + 368); if ( v2 ) { do { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } while ( v2 ); a1 = v11; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWinBut *>::`vftable'; v4 = (_DWORD *)(a1 + 348); *(_DWORD *)(a1 + 348) = &PgTList>::`vftable'; v5 = *(_DWORD **)(a1 + 352); if ( v5 ) { do { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v6); } while ( v5 ); a1 = v11; } v4[3] = 0; v4[1] = 0; v4[2] = 0; *v4 = &NiTListBase,NiPointer>::`vftable'; v7 = (_DWORD *)(a1 + 332); *(_DWORD *)(a1 + 332) = &PgTList>::`vftable'; v8 = *(_DWORD **)(a1 + 336); if ( v8 ) { do { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9); } while ( v8 ); a1 = v11; } v7[3] = 0; v7[1] = 0; v7[2] = 0; *v7 = &NiTListBase,NiPointer>::`vftable'; return sub_8F29C0((void **)a1); } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D04: using guessed type void *NiTListBase,PgWinBut *>::`vftable'; // 9B3D1C: using guessed type void *NiTPointerListBase,PgWinBut *>::`vftable'; // 9B3D3C: using guessed type void *PgTList>::`vftable'; // 9B3D5C: using guessed type void *PgTList>::`vftable'; // 9B3D6C: using guessed type void *ListWin::`vftable'; // 9B3D8C: using guessed type void *ListWin::`vftable'; //----- (0045F0D0) -------------------------------------------------------- char __thiscall sub_45F0D0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7, int a8) { _DWORD *v8; // ebx unsigned int v9; // esi int v11; // edi int v12; // eax int v13; // ecx unsigned int v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // edi volatile LONG *v17; // eax volatile LONG *v18; // edi void (__thiscall *v19)(volatile LONG *, int); // edx int v20; // ST1C_4 _DWORD *v21; // eax _DWORD *v22; // ecx struct tagSIZE psizl; // [esp+10h] [ebp-14h] int v24; // [esp+20h] [ebp-4h] v8 = this; v9 = a5; if ( !sub_8F2900(this, a2, a3, a4, a5, a7, 0, 0) ) return 0; v11 = (int)a6; if ( !a6 ) return 0; sub_4593C0(a6, "W", 1, &psizl); v12 = a8; v13 = psizl.cy; v8[73] = a8; a7 = (_DWORD *)(v13 + v12); v14 = v9 / (v13 + v12); v8[82] = v14; if ( !v14 ) return 0; a7 = 0; a5 = 0; if ( v14 ) { while ( 1 ) { v15 = sub_8F4A20(0, (int)a7, a4, v13, v11, (int)v8, 0, 0); v16 = v15; a3 = (int)v15; if ( v15 ) InterlockedIncrement(v15 + 1); v24 = 0; sub_8B8EC0(v8 + 87, &a3); v24 = -1; if ( v16 && !InterlockedDecrement(v16 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); v17 = sub_8FE250(0, (int)a7, a4, psizl.cy + v8[73], (int)v8, 0, 0, 0); v18 = v17; v19 = *(void (__thiscall **)(volatile LONG *, int))(*v17 + 520); v20 = a5; *((_DWORD *)v17 + 76) = 0; v19(v17, v20); v21 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v8[91] + 4))(v8 + 91); v21[2] = v18; *v21 = 0; v21[1] = v8[93]; v22 = (_DWORD *)v8[93]; if ( v22 ) *v22 = v21; else v8[92] = v21; ++v8[94]; v13 = psizl.cy; v8[93] = v21; a7 = (_DWORD *)((char *)a7 + v13 + v8[73]); if ( (unsigned int)++a5 >= v8[82] ) break; v11 = (int)a6; } } return 1; } //----- (0045F2B0) -------------------------------------------------------- int __thiscall sub_45F2B0(_DWORD *this, const char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi int v5; // eax int v7; // [esp+10h] [ebp-14h] int v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v2 = this; v8 = (*(int (**)(void))(*this + 452))(); v3 = operator new(0x14u); v4 = (int)v3; if ( v3 ) { *v3 = &NiRefObject::`vftable'; v3[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)v4 = &ListItem::`vftable'; *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 16) = 0; } else { v4 = 0; } v7 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v9 = 0; sub_45ED10((_DWORD *)v4, a2); sub_8B8EC0(v2 + 83, &v7); v5 = sub_45EF50(v2, v8); if ( v5 ) (*(void (__thiscall **)(int, const char *))(*(_DWORD *)v5 + 472))(v5, a2); v9 = -1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return v8; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9B3D14: using guessed type void *ListItem::`vftable'; //----- (0045F3B0) -------------------------------------------------------- char __thiscall sub_45F3B0(_DWORD *this, int a2) { _DWORD *v2; // esi int v4; // eax int v5; // eax volatile LONG *v6; // eax v2 = this; if ( a2 >= (*(int (**)(void))(*this + 452))() ) return 0; if ( v2[72] != a2 ) { v4 = sub_45EF50(v2, v2[72]); if ( v4 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v4 + 468))(v4, v2 + 74); v2[72] = a2; v5 = sub_45EF50(v2, a2); if ( v5 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v5 + 468))(v5, v2 + 78); v6 = (volatile LONG *)sub_402BF0(v2); if ( v6 ) sub_8F2BC0(v6, 0, v2[72], (int)v2); } return 1; } //----- (0045F450) -------------------------------------------------------- int __thiscall sub_45F450(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax _DWORD *v3; // esi int v4; // ecx _DWORD *v5; // esi int result; // eax _DWORD *v7; // ST00_4 v1 = this; v2 = sub_45EF50(this, this[72]); if ( v2 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v2 + 468))(v2, v1 + 74); v3 = (_DWORD *)v1[88]; while ( v3 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v4 + 472))(&unk_9B3CCE); } v5 = (_DWORD *)v1[84]; result = 0; if ( v5 ) { do { v7 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[83] + 8))(v1 + 83, v7); } while ( v5 ); result = 0; } v1[86] = 0; v1[84] = 0; v1[85] = 0; v1[72] = -1; return result; } //----- (0045F4F0) -------------------------------------------------------- void __thiscall sub_45F4F0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int v4; // edi int v5; // eax _DWORD *v6; // eax int v7; // ecx int *v8; // esi bool v9; // zf int v10; // eax int v11; // [esp+Ch] [ebp-8h] _DWORD *i; // [esp+10h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[92]; v4 = 0; for ( i = this; v3; ++v4 ) { v5 = v3[2]; v3 = (_DWORD *)*v3; v11 = v5; if ( v4 >= 0 && v4 < (*(int (__thiscall **)(_DWORD *))(*v2 + 452))(v2) && (unsigned int)v4 < v2[90] ) { v6 = (_DWORD *)v2[88]; if ( v4 ) { v7 = v4; do { if ( v6 ) v6 = (_DWORD *)*v6; else v6 = 0; --v7; } while ( v7 ); } if ( v6 ) { v8 = (int *)v6[2]; if ( v8 && i[72] != v4 ) { v9 = (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v11 + 332))(pt.x, pt.y) == 0; v10 = *v8; if ( v9 ) (*(void (__thiscall **)(int *, _DWORD *))(v10 + 468))(v8, i + 74); else (*(void (__thiscall **)(int *, _DWORD, signed int, _DWORD, signed int))(v10 + 464))(v8, 0, 255, 0, 255); } v2 = i; } } } } //----- (0045F5E0) -------------------------------------------------------- _DWORD *__thiscall sub_45F5E0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax char v5; // [esp+Ch] [ebp-20h] _DWORD *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v6 = this; sub_8F2740(this); *v1 = &ListWin::`vftable'; v1[58] = &ListWin::`vftable'; v7 = 0; v1[86] = 0; v1[84] = 0; v1[85] = 0; v1[83] = &PgTList>::`vftable'; v1[90] = 0; v1[88] = 0; v1[89] = 0; v1[87] = &PgTList>::`vftable'; v1[94] = 0; v1[92] = 0; v1[93] = 0; v1[91] = &NiTList::`vftable'; LOBYTE(v7) = 3; v1[72] = -1; v1[73] = 1; v2 = sub_419EE0((float *)&v5, 0xFFu, 0xFFu, 0xFFu, 0xFFu); v1[74] = *(_DWORD *)v2; v1[75] = *((_DWORD *)v2 + 1); v1[76] = *((_DWORD *)v2 + 2); v1[77] = *((_DWORD *)v2 + 3); v3 = sub_419EE0((float *)&v5, 0, 0xFFu, 0, 0xFFu); v1[78] = *(_DWORD *)v3; v1[79] = *((_DWORD *)v3 + 1); v1[80] = *((_DWORD *)v3 + 2); v1[81] = *((_DWORD *)v3 + 3); v1[82] = 0; return v1; } // 9B3D3C: using guessed type void *PgTList>::`vftable'; // 9B3D4C: using guessed type void *NiTList::`vftable'; // 9B3D5C: using guessed type void *PgTList>::`vftable'; // 9B3D6C: using guessed type void *ListWin::`vftable'; // 9B3D8C: using guessed type void *ListWin::`vftable'; //----- (0045F730) -------------------------------------------------------- char __thiscall sub_45F730(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // edx _DWORD *v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // [esp+4h] [ebp-4h] v2 = this; v3 = (*(int (**)(void))(*this + 452))(); v4 = a2; if ( (signed int)a2 >= v3 ) return 0; if ( (unsigned int)a2 < v2[86] ) { v6 = (_DWORD *)v2[84]; if ( a2 ) { do { if ( v6 ) v6 = (_DWORD *)*v6; else v6 = 0; v4 = (_DWORD *)((char *)v4 - 1); } while ( v4 ); } } else { v6 = 0; } a2 = v6; if ( !v6 ) return 0; sub_6BB7C0(v2 + 83, &v8, &a2); v7 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 1; } //----- (0045F940) -------------------------------------------------------- void *__thiscall sub_45F940(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (0045F970) -------------------------------------------------------- void *__thiscall sub_45F970(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (0045F9A0) -------------------------------------------------------- void *__thiscall sub_45F9A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PgWinBut *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B3D04: using guessed type void *NiTListBase,PgWinBut *>::`vftable'; //----- (0045F9D0) -------------------------------------------------------- int __thiscall sub_45F9D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3CE4: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0045FA50) -------------------------------------------------------- _DWORD *__thiscall sub_45FA50(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3CE4: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0045FAE0) -------------------------------------------------------- int __thiscall sub_45FAE0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D3C: using guessed type void *PgTList>::`vftable'; //----- (0045FB60) -------------------------------------------------------- _DWORD *__thiscall sub_45FB60(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 3); *(_DWORD *)this = &ListItem::`vftable'; operator delete[](v3); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9B3D14: using guessed type void *ListItem::`vftable'; //----- (0045FBA0) -------------------------------------------------------- int __thiscall sub_45FBA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PgWinBut *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWinBut *>::`vftable'; return result; } // 9B3D04: using guessed type void *NiTListBase,PgWinBut *>::`vftable'; // 9B3D1C: using guessed type void *NiTPointerListBase,PgWinBut *>::`vftable'; //----- (0045FC20) -------------------------------------------------------- _DWORD *__thiscall sub_45FC20(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3CD4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D3C: using guessed type void *PgTList>::`vftable'; //----- (0045FCB0) -------------------------------------------------------- int __thiscall sub_45FCB0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D2C: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0045FD30) -------------------------------------------------------- _DWORD *__thiscall sub_45FD30(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PgWinBut *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWinBut *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3D04: using guessed type void *NiTListBase,PgWinBut *>::`vftable'; // 9B3D1C: using guessed type void *NiTPointerListBase,PgWinBut *>::`vftable'; //----- (0045FDC0) -------------------------------------------------------- _DWORD *__thiscall sub_45FDC0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D2C: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0045FE50) -------------------------------------------------------- int __thiscall sub_45FE50(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D5C: using guessed type void *PgTList>::`vftable'; //----- (0045FED0) -------------------------------------------------------- _DWORD *__thiscall sub_45FED0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3CF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9B3D5C: using guessed type void *PgTList>::`vftable'; //----- (0045FF60) -------------------------------------------------------- void *__thiscall sub_45FF60(void *this, char a2) { void *v2; // esi v2 = this; sub_45EFB0((int)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0045FF90) -------------------------------------------------------- int __thiscall sub_45FF90(_DWORD *this) { return this[73]; } //----- (0045FFA0) -------------------------------------------------------- int __thiscall sub_45FFA0(_DWORD *this) { return this[72]; } //----- (0045FFE0) -------------------------------------------------------- LONG __thiscall sub_45FFE0(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi v1 = this; *this = &MaskedWin::`vftable'; this[58] = &MaskedWin::`vftable'; v2 = (volatile LONG *)this[72]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[72] = 0; } v3 = (volatile LONG *)v1[72]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); return sub_8F29C0(v1); } // 9B3FE4: using guessed type void *MaskedWin::`vftable'; // 9B4004: using guessed type void *MaskedWin::`vftable'; //----- (004600A0) -------------------------------------------------------- char __thiscall sub_4600A0(_DWORD *this, int a2, int a3, int a4, char a5, _DWORD *a6) { int v6; // eax float *v7; // ebx float v8; // ST3C_4 double v9; // st7 unsigned int v10; // edi unsigned int v11; // edx float v12; // ST3C_4 double v13; // st6 unsigned int v14; // esi float *v15; // ecx float *v16; // ecx int v17; // esi int v18; // esi int v20; // [esp-8h] [ebp-28h] _DWORD *v21; // [esp+10h] [ebp-10h] float v22; // [esp+14h] [ebp-Ch] float v23; // [esp+18h] [ebp-8h] int v24; // [esp+34h] [ebp+14h] v6 = *(_DWORD *)(a4 + 184); v7 = *(float **)(v6 + 32); v8 = *v7; v9 = v8; v10 = *(unsigned __int16 *)(v6 + 12); v23 = v8; v11 = 1; v21 = this; v12 = v7[1]; v13 = v12; v22 = v12; if ( v10 > 1 ) { if ( (signed int)(v10 - 1) >= 4 ) { v14 = ((v10 - 5) >> 2) + 1; v15 = v7 + 6; v11 = 4 * v14 + 1; do { if ( v23 <= (double)*(v15 - 3) ) { if ( *(v15 - 3) > v9 ) v9 = *(v15 - 3); } else { v23 = *(v15 - 3); } if ( v22 <= (double)*(v15 - 2) ) { if ( *(v15 - 2) > v13 ) v13 = *(v15 - 2); } else { v22 = *(v15 - 2); } if ( v23 <= (double)*v15 ) { if ( *v15 > v9 ) v9 = *v15; } else { v23 = *v15; } if ( v22 <= (double)v15[1] ) { if ( v15[1] > v13 ) v13 = v15[1]; } else { v22 = v15[1]; } if ( v23 <= (double)v15[3] ) { if ( v15[3] > v9 ) v9 = v15[3]; } else { v23 = v15[3]; } if ( v22 <= (double)v15[4] ) { if ( v15[4] > v13 ) v13 = v15[4]; } else { v22 = v15[4]; } if ( v23 <= (double)v15[6] ) { if ( v15[6] > v9 ) v9 = v15[6]; } else { v23 = v15[6]; } if ( v22 <= (double)v15[7] ) { if ( v15[7] > v13 ) v13 = v15[7]; } else { v22 = v15[7]; } v15 += 12; --v14; } while ( v14 ); } if ( v11 < v10 ) { v16 = &v7[3 * v11]; v17 = v10 - v11; do { if ( v23 <= (double)*v16 ) { if ( *v16 > v9 ) v9 = *v16; } else { v23 = *v16; } if ( v22 <= (double)v16[1] ) { if ( v16[1] > v13 ) v13 = v16[1]; } else { v22 = v16[1]; } v16 += 3; --v17; } while ( v17 ); } } v18 = v21[72]; if ( v18 != a4 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v21[72] = a4; InterlockedIncrement((volatile LONG *)(a4 + 4)); } (*(void (__stdcall **)(_DWORD, signed int))(*v21 + 116))(v21[72], 1); sub_85C4D0(v21); *(_WORD *)(v21[72] + 28) &= 0xFFFEu; if ( a5 ) { v24 = v21[72]; v20 = sub_461120(); } else { v24 = v21[72]; v20 = sub_461230(); } sub_8633A0(v24, v20); return sub_8F2900( v21, a2, a3, (signed __int64)(v9 + 0.5) - (signed __int64)(v23 + 0.5), (signed __int64)(v13 + 0.5) - (signed __int64)(v22 + 0.5), a6, 0, 0); } //----- (00460440) -------------------------------------------------------- char __thiscall sub_460440(_DWORD **this, float a2, float a3, float a4, float a5) { _DWORD **v5; // ebx int v6; // eax float *v7; // eax float *v8; // edi _DWORD *v9; // eax _DWORD *v10; // esi float *v11; // eax v5 = this; v6 = sub_85AA60(this[72], "*texmat"); if ( v6 ) { v11 = *(float **)(v6 + 12); *v11 = a2; v11[1] = a3; v11[2] = a4; v11[3] = a5; } else { v7 = (float *)operator new(0x10u); v8 = v7; *v7 = a2; v7[1] = a3; v7[2] = a4; v7[3] = a5; v9 = operator new(0x14u); v10 = v9; if ( v9 ) { sub_868D00(v9); *v10 = &NiBinaryExtraData::`vftable'; v10[4] = 16; v10[3] = v8; } else { v10 = 0; } LOBYTE(v11) = sub_85AE20(v5[72], "*texmat", (int)v10); } return (char)v11; } // 9B3F9C: using guessed type void *NiBinaryExtraData::`vftable'; //----- (00460590) -------------------------------------------------------- int __thiscall sub_460590(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax _DWORD *v4; // edi _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // ecx v2 = this; result = sub_85C050(this[72], 8); v4 = (_DWORD *)result; if ( !result ) { v5 = operator new(0x44u); if ( v5 ) v6 = sub_863BB0(v5); else v6 = 0; v4 = v6; result = sub_403700(v2[72], (int)v6); } if ( v2[73] != (_DWORD *)a2 ) { sub_42AB40(v4, a2); v7 = v2[72]; v2[73] = (_DWORD *)a2; result = sub_85C4D0(v7); } return result; } //----- (00460640) -------------------------------------------------------- int __cdecl sub_460640(int a1, int a2, int a3, _DWORD *a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x128u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)v5 = &MaskedWin::`vftable'; *(_DWORD *)(v5 + 232) = &MaskedWin::`vftable'; *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)(v5 + 292) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( sub_4600A0((_DWORD *)v5, a1, a2, a3, 1, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } result = 0; } return result; } // 9B3FE4: using guessed type void *MaskedWin::`vftable'; // 9B4004: using guessed type void *MaskedWin::`vftable'; //----- (004607A0) -------------------------------------------------------- int __cdecl sub_4607A0(int a1, int a2, int a3, _DWORD *a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x128u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)v5 = &MaskedWin::`vftable'; *(_DWORD *)(v5 + 232) = &MaskedWin::`vftable'; *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)(v5 + 292) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( sub_4600A0((_DWORD *)v5, a1, a2, a3, 0, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } result = 0; } return result; } // 9B3FE4: using guessed type void *MaskedWin::`vftable'; // 9B4004: using guessed type void *MaskedWin::`vftable'; //----- (00460900) -------------------------------------------------------- _DWORD *__thiscall sub_460900(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; sub_868D00(this); v3[4] = a2; *v3 = &NiBinaryExtraData::`vftable'; v3[3] = a3; return v3; } // 9B3F9C: using guessed type void *NiBinaryExtraData::`vftable'; //----- (00460930) -------------------------------------------------------- char *sub_460930() { return dword_BA47BC; } //----- (00460940) -------------------------------------------------------- _DWORD *__thiscall sub_460940(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 3); *(_DWORD *)this = &NiBinaryExtraData::`vftable'; operator delete[](v3); v2[3] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B3F9C: using guessed type void *NiBinaryExtraData::`vftable'; //----- (00460980) -------------------------------------------------------- void *__thiscall sub_460980(void *this, char a2) { void *v2; // esi v2 = this; sub_45FFE0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004609B0) -------------------------------------------------------- bool __thiscall sub_4609B0(void *this, int a2) { return sub_917FB0((int)this, a2) != 0; } //----- (00460A60) -------------------------------------------------------- char __thiscall sub_460A60(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ebx _DWORD *v4; // ecx _DWORD *v5; // ebx int v6; // edi int *v7; // edi int v8; // ecx bool v9; // zf int v10; // edi int v11; // eax int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // ebx int v17; // edi int v18; // edi int v19; // edi int v20; // edi int v21; // edi int v22; // edi int v23; // esi _DWORD *v24; // eax _DWORD *v25; // eax int v27; // [esp+10h] [ebp-18h] void *v28; // [esp+14h] [ebp-14h] void *v29; // [esp+18h] [ebp-10h] int v30; // [esp+24h] [ebp-4h] v1 = this; sub_91BE40(&v28); v2 = v28; *(_DWORD *)v28 = 0; v3 = v2[1]; v30 = 0; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[1] = 0; } sub_91A460((_DWORD *)v2[3], 0xBu, 0, 0); v4 = (_DWORD *)v2[3]; *((_BYTE *)v2 + 90) = 1; sub_91A460(v4, 0x18u, 2, 0); sub_91A460(*((_DWORD **)v28 + 3), 1u, 2, 0); sub_91A460(*((_DWORD **)v28 + 3), 2u, 2, 0); sub_91A460(*((_DWORD **)v28 + 3), 3u, 0, 0); sub_91A460(*((_DWORD **)v28 + 3), 4u, 2, 0); sub_91A460(*((_DWORD **)v28 + 3), 5u, 2, 0); sub_91AF30((_DWORD **)v28, 2); sub_91BE40(&v29); *(_DWORD *)v29 = 1; v5 = v29; v6 = *((_DWORD *)v29 + 1); LOBYTE(v30) = 1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5[1] = 0; } sub_91A460(*((_DWORD **)v29 + 3), 0xBu, 1, 0); sub_91A460(*((_DWORD **)v29 + 3), 1u, 4, 0); sub_91A460(*((_DWORD **)v29 + 3), 2u, 2, 0); sub_91A460(*((_DWORD **)v29 + 3), 3u, 1, 0); sub_91A460(*((_DWORD **)v29 + 3), 4u, 4, 0); sub_91A460(*((_DWORD **)v29 + 3), 5u, 2, 0); sub_91A460(*((_DWORD **)v29 + 3), 6u, 1, 0); v7 = sub_91DA90(&v27); v8 = v1[69]; LOBYTE(v30) = 2; if ( v8 != *v7 ) { if ( v8 ) { v9 = (*(_DWORD *)(v8 + 104))-- == 1; if ( v9 ) sub_91D6F0((_BYTE *)v8); } v10 = *v7; v1[69] = v10; if ( v10 ) ++*(_DWORD *)(v10 + 104); } v11 = v27; LOBYTE(v30) = 1; if ( v27 ) { --*(_DWORD *)(v27 + 104); if ( !*(_DWORD *)(v11 + 104) ) sub_91D6F0((_BYTE *)v11); } sub_91D830((_DWORD *)v1[69], *(_DWORD *)(v1[69] + 20), v28); sub_91D830((_DWORD *)v1[69], *(_DWORD *)(v1[69] + 20), v29); v12 = v1[69]; if ( !*(_DWORD *)(v12 + 56) ) *(_DWORD *)(v12 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v12 + 56), 22, 2, 0); v13 = v1[69]; if ( !*(_DWORD *)(v13 + 56) ) *(_DWORD *)(v13 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v13 + 56), 7, 0, 0); v14 = v1[69]; if ( !*(_DWORD *)(v14 + 56) ) *(_DWORD *)(v14 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v14 + 56), 14, 0, 0); v15 = v1[69]; v16 = *((unsigned __int8 *)v1 + 284); if ( !*(_DWORD *)(v15 + 56) ) *(_DWORD *)(v15 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v15 + 56), 27, v16, 0); v17 = v1[69]; if ( !*(_DWORD *)(v17 + 56) ) *(_DWORD *)(v17 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v17 + 56), 19, 5, 0); v18 = v1[69]; if ( !*(_DWORD *)(v18 + 56) ) *(_DWORD *)(v18 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v18 + 56), 20, 6, 0); v19 = v1[69]; if ( !*(_DWORD *)(v19 + 56) ) *(_DWORD *)(v19 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v19 + 56), 28, 0, 0); v20 = v1[69]; if ( !*(_DWORD *)(v20 + 56) ) *(_DWORD *)(v20 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v20 + 56), 137, 0, 0); v21 = v1[69]; if ( !*(_DWORD *)(v21 + 56) ) *(_DWORD *)(v21 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v21 + 56), 15, 1, 0); v22 = v1[69]; if ( !*(_DWORD *)(v22 + 56) ) *(_DWORD *)(v22 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v22 + 56), 25, 7, 0); v23 = v1[69]; if ( !*(_DWORD *)(v23 + 56) ) *(_DWORD *)(v23 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v23 + 56), 24, 0, 0); v24 = v29; LOBYTE(v30) = 0; if ( v29 ) { --*((_DWORD *)v29 + 23); if ( !v24[23] ) sub_91BD60(v24); } v25 = v28; v30 = -1; if ( v28 ) { --*((_DWORD *)v28 + 23); if ( !v25[23] ) sub_91BD60(v25); } return 1; } //----- (00460E60) -------------------------------------------------------- LONG sub_460E60() { LONG result; // eax int (__thiscall ***v1)(_DWORD, signed int); // esi int (__thiscall ***v2)(_DWORD, signed int); // esi result = dword_ACD0BC; if ( dword_ACD0BC ) { v1 = (int (__thiscall ***)(_DWORD, signed int))dword_ACD0BC; result = InterlockedDecrement((volatile LONG *)(dword_ACD0BC + 4)); if ( !result && v1 ) result = (**v1)(v1, 1); dword_ACD0BC = 0; } v2 = (int (__thiscall ***)(_DWORD, signed int))dword_ACD0C0; if ( dword_ACD0C0 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACD0C0 + 4)); if ( !result ) { if ( v2 ) result = (**v2)(v2, 1); } dword_ACD0C0 = 0; } return result; } // ACD0BC: using guessed type int dword_ACD0BC; // ACD0C0: using guessed type int dword_ACD0C0; //----- (00460F80) -------------------------------------------------------- signed int __thiscall sub_460F80(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // esi _DWORD **v9; // edi int v10; // ebx float *v11; // eax float *v12; // esi _DWORD *v13; // eax _DWORD *v14; // edi int v15; // eax int v16; // ebx int v17; // edi int v18; // eax int v19; // eax float *v20; // eax bool v21; // zf int v23; // [esp+14h] [ebp-10h] _DWORD *v24; // [esp+38h] [ebp+14h] v8 = (_DWORD *)this; if ( !*(_DWORD *)(this + 72) ) sub_461380(this + 64, *(void **)(this + 84)); v9 = (_DWORD **)(v8 + 69); sub_461550(v8 + 16, 0, v8 + 69); v8[14] = 1; v10 = *(_DWORD *)(a5 + 40); v23 = *(_DWORD *)(a5 + 40); v11 = (float *)sub_4615D0((_DWORD *)v8[69], 0); v12 = v11; if ( v11 ) ++*((_DWORD *)v11 + 23); v13 = sub_4615D0(*v9, 1u); v14 = v13; v24 = v13; if ( v13 ) ++v13[23]; if ( v10 ) { v15 = **(_DWORD **)(v10 + 40); if ( v15 ) v16 = *(_DWORD *)(v15 + 4); else v16 = 0; v17 = *((_DWORD *)v12 + 1); if ( v17 != v16 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); *((_DWORD *)v12 + 1) = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } v18 = *(_DWORD *)(*(_DWORD *)(v23 + 40) + 4); if ( v18 ) sub_42AAF0(v24, *(_DWORD *)(v18 + 4)); v14 = v24; } v12[6] = 1.0; v12[10] = 0.0; v12[14] = 0.0; v12[18] = 0.0; v12[7] = 0.0; v12[15] = 0.0; v12[19] = 0.0; v12[8] = 0.0; v12[12] = 0.0; v12[20] = 0.0; v12[9] = 0.0; v12[13] = 0.0; v12[17] = 0.0; v12[11] = 1.0; v12[16] = 1.0; v12[21] = 1.0; v19 = sub_85AA60(a2, "*texmat"); if ( v19 ) { v20 = *(float **)(v19 + 12); v12[6] = v20[2]; v12[11] = v20[3]; v12[14] = *v20; v12[15] = v20[1]; } if ( v14 ) { v21 = v14[23]-- == 1; if ( v21 ) sub_91BD60(v14); } if ( v12 ) { v21 = (*((_DWORD *)v12 + 23))-- == 1; if ( v21 ) sub_91BD60(v12); } return 1; } //----- (00461120) -------------------------------------------------------- int sub_461120() { int result; // eax _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // edi result = dword_ACD0BC; if ( !dword_ACD0BC ) { v1 = operator new(0x120u); v2 = (int)v1; if ( v1 ) { sub_918D50(v1); *(_DWORD *)v2 = &MaskShader::`vftable'; *(_DWORD *)(v2 + 276) = 0; *(_DWORD *)(v2 + 280) = 0; *(_BYTE *)(v2 + 284) = 1; sub_8693E0((void **)v2, "SHPortrait"); sub_460A60((_DWORD *)v2); *(_BYTE *)(v2 + 284) = 1; } else { v2 = 0; } result = dword_ACD0BC; if ( dword_ACD0BC != v2 ) { if ( dword_ACD0BC ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD0BC; if ( !InterlockedDecrement((volatile LONG *)(dword_ACD0BC + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = v2; dword_ACD0BC = v2; if ( v2 ) { InterlockedIncrement((volatile LONG *)(v2 + 4)); result = dword_ACD0BC; } } } return result; } // 9B4214: using guessed type void *MaskShader::`vftable'; // ACD0BC: using guessed type int dword_ACD0BC; //----- (00461230) -------------------------------------------------------- int sub_461230() { int result; // eax _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // edi result = dword_ACD0C0; if ( !dword_ACD0C0 ) { v1 = operator new(0x120u); v2 = (int)v1; if ( v1 ) { sub_918D50(v1); *(_DWORD *)v2 = &MaskShader::`vftable'; *(_DWORD *)(v2 + 276) = 0; *(_DWORD *)(v2 + 280) = 0; *(_BYTE *)(v2 + 284) = 0; sub_8693E0((void **)v2, "SHPortrait22"); sub_460A60((_DWORD *)v2); *(_BYTE *)(v2 + 284) = 0; *(_DWORD *)v2 = &MaskShader_NoAlphaBlend::`vftable'; } else { v2 = 0; } result = dword_ACD0C0; if ( dword_ACD0C0 != v2 ) { if ( dword_ACD0C0 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD0C0; if ( !InterlockedDecrement((volatile LONG *)(dword_ACD0C0 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = v2; dword_ACD0C0 = v2; if ( v2 ) { InterlockedIncrement((volatile LONG *)(v2 + 4)); result = dword_ACD0C0; } } } return result; } // 9B4214: using guessed type void *MaskShader::`vftable'; // 9B428C: using guessed type void *MaskShader_NoAlphaBlend::`vftable'; // ACD0C0: using guessed type int dword_ACD0C0; //----- (00461360) -------------------------------------------------------- void __thiscall sub_461360(void *this) { int v1; // ecx bool v2; // zf v1 = *(_DWORD *)this; if ( v1 ) { v2 = (*(_DWORD *)(v1 + 104))-- == 1; if ( v2 ) sub_91D6F0((_BYTE *)v1); } } //----- (00461380) -------------------------------------------------------- void __thiscall sub_461380(int this, void *a2) { _DWORD *v2; // esi int v3; // ebx unsigned int v4; // edx int *v5; // edi int v6; // ecx bool v7; // zf char *v8; // eax int v9; // ecx int *v10; // eax int v11; // edi unsigned int v12; // eax int v13; // edi int v14; // ebx int v15; // ecx _DWORD *v16; // edi int v17; // ebx unsigned int i; // edi int v19; // eax int v20; // ecx _DWORD *v21; // ebx char *v22; // esi char *v23; // [esp+10h] [ebp-10h] void *v24; // [esp+28h] [ebp+8h] v2 = (_DWORD *)this; v3 = (int)a2; if ( a2 != *(void **)(this + 8) ) { if ( (unsigned int)a2 < *(_DWORD *)(this + 12) ) { v4 = (unsigned int)a2; do { v5 = (int *)(v2[1] + 4 * v4); if ( *v5 ) { v6 = *v5; if ( *v5 ) { v7 = (*(_DWORD *)(v6 + 104))-- == 1; if ( v7 ) { sub_91D6F0((_BYTE *)v6); v4 = (unsigned int)a2; } *v5 = 0; } --v2[4]; } a2 = (void *)++v4; } while ( v4 < v2[3] ); v2[3] = v3; } v8 = (char *)v2[1]; v23 = (char *)v2[1]; v2[2] = v3; if ( v3 ) { v9 = 4 * v3 | -((unsigned __int64)(unsigned int)v3 >> 30 != 0); v10 = (int *)operator new[]((v9 + 4) | -__CFADD__(v9, 4)); if ( v10 ) { v11 = (int)(v10 + 1); *v10 = v3; `eh vector constructor iterator'( v10 + 1, 4u, v3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_461360); } else { v11 = 0; } v12 = 0; v2[1] = v11; v24 = 0; if ( v2[3] ) { do { v13 = v2[1]; v14 = 4 * v12; v15 = *(_DWORD *)(v13 + 4 * v12); v16 = (_DWORD *)(4 * v12 + v13); if ( v15 != *(_DWORD *)&v23[4 * v12] ) { if ( v15 ) { v7 = (*(_DWORD *)(v15 + 104))-- == 1; if ( v7 ) { sub_91D6F0((_BYTE *)v15); v12 = (unsigned int)v24; } } v17 = *(_DWORD *)&v23[v14]; *v16 = v17; if ( v17 ) ++*(_DWORD *)(v17 + 104); } v24 = (void *)++v12; } while ( v12 < v2[3] ); } for ( i = v2[3]; i < v2[2]; ++i ) { v19 = v2[1]; v20 = *(_DWORD *)(v19 + 4 * i); v21 = (_DWORD *)(v19 + 4 * i); if ( v20 ) { v7 = (*(_DWORD *)(v20 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v20); *v21 = 0; } } v8 = v23; } else { v2[1] = 0; } if ( v8 ) { v22 = v8 - 4; `eh vector destructor iterator'(v8, 4u, *((_DWORD *)v8 - 1), sub_461360); operator delete[](v22); } } } //----- (00461550) -------------------------------------------------------- unsigned int __thiscall sub_461550(_DWORD *this, unsigned int a2, int *a3) { unsigned int result; // eax int v4; // edx int *v5; // esi int v6; // ecx bool v7; // zf result = a2; if ( a2 < this[2] ) { if ( a2 < this[3] ) { v4 = this[1]; if ( *a3 ) { if ( *(_DWORD *)(v4 + 4 * a2) == 0 ) ++this[4]; } else if ( *(_DWORD *)(v4 + 4 * a2) != 0 ) { --this[4]; } } else { this[3] = a2 + 1; if ( *a3 ) ++this[4]; } v5 = (int *)(this[1] + 4 * a2); v6 = *v5; if ( *v5 != *a3 ) { if ( v6 ) { v7 = (*(_DWORD *)(v6 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v6); } result = *a3; *v5 = *a3; if ( result ) ++*(_DWORD *)(result + 104); } } return result; } //----- (004615D0) -------------------------------------------------------- _DWORD *__thiscall sub_4615D0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx char v4; // bl bool v5; // zf _DWORD *v7; // [esp+28h] [ebp+8h] if ( a2 >= this[11] ) { v3 = 0; v7 = 0; v2 = 0; v4 = 2; } else { v2 = *(_DWORD **)(this[9] + 4 * a2); v7 = v2; if ( v2 ) ++v2[23]; v3 = v2; v4 = 1; } if ( v4 & 2 ) { v4 &= 0xFDu; if ( v3 ) { v5 = v3[23]-- == 1; if ( v5 ) sub_91BD60(v3); } } if ( v4 & 1 ) { if ( v2 ) { v5 = v2[23]-- == 1; if ( v5 ) sub_91BD60(v2); } } return v7; } //----- (00461680) -------------------------------------------------------- void *sub_461680() { return &unk_ACD0B4; } //----- (00461690) -------------------------------------------------------- char __thiscall sub_461690(_BYTE *this) { return this[29]; } //----- (004616A0) -------------------------------------------------------- char __thiscall sub_4616A0(_BYTE *this, char a2) { char result; // al result = a2; this[29] = a2; return result; } //----- (004616B0) -------------------------------------------------------- _DWORD *__thiscall sub_4616B0(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx bool v4; // zf int v5; // ecx v2 = this; *(_DWORD *)this = &MaskShader::`vftable'; v3 = *((_DWORD *)this + 69); if ( v3 ) { v4 = (*(_DWORD *)(v3 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v3); v2[69] = 0; } v5 = v2[69]; if ( v5 ) { v4 = (*(_DWORD *)(v5 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v5); } sub_918270(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B4214: using guessed type void *MaskShader::`vftable'; //----- (00461750) -------------------------------------------------------- void *sub_461750() { return &unk_ACD0C4; } //----- (00461760) -------------------------------------------------------- _DWORD *__thiscall sub_461760(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *result; // eax v4 = this; (*(void (__thiscall **)(_DWORD *, int))(*this + 516))(this, a2); if ( a3 ) { v4[93] = *a3; v4[94] = a3[1]; v4[95] = a3[2]; v4[96] = a3[3]; v4[97] = a3[4]; } result = a4; if ( a4 ) { v4[98] = *a4; v4[99] = a4[1]; v4[100] = a4[2]; v4[101] = a4[3]; result = (_DWORD *)a4[4]; v4[102] = result; } return result; } //----- (004617F0) -------------------------------------------------------- _DWORD *__thiscall sub_4617F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6) { _DWORD *v6; // esi _DWORD *result; // eax v6 = this; (*(void (__thiscall **)(_DWORD *, int))(*this + 516))(this, a2); if ( a3 ) { v6[93] = *a3; v6[94] = a3[1]; v6[95] = a3[2]; v6[96] = a3[3]; v6[97] = a3[4]; } if ( a4 ) { v6[98] = *a4; v6[99] = a4[1]; v6[100] = a4[2]; v6[101] = a4[3]; v6[102] = a4[4]; } if ( a5 ) { v6[103] = *a5; v6[104] = a5[1]; v6[105] = a5[2]; v6[106] = a5[3]; v6[107] = a5[4]; } result = a6; if ( a6 ) { v6[108] = *a6; v6[109] = a6[1]; v6[110] = a6[2]; v6[111] = a6[3]; result = (_DWORD *)a6[4]; v6[112] = result; } return result; } //----- (004618E0) -------------------------------------------------------- int __thiscall sub_4618E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int result; // eax this[113] = a2; this[114] = a3; this[115] = a4; this[116] = a5; this[117] = a6; result = a8; this[118] = a7; this[119] = a8; return result; } //----- (00461930) -------------------------------------------------------- int __userpurge sub_461930@(int a1@, int a2@, int a3) { int v3; // ecx int result; // eax v3 = *(_DWORD *)(a1 + 364); if ( v3 ) result = sub_5D5EA0(v3, a2, a3); return result; } //----- (00461950) -------------------------------------------------------- int __thiscall sub_461950(_DWORD **this) { return (*(int (**)(void))(*this[92] + 472))(); } //----- (00461970) -------------------------------------------------------- char __thiscall sub_461970(volatile LONG *this) { volatile LONG *v1; // esi _DWORD *v2; // ecx volatile LONG *v3; // ecx int v4; // eax bool v5; // zf int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 74); if ( v2 ) { sub_8EEE70(v2, *((_DWORD *)v1 + 95), *((_DWORD *)v1 + 96), *((_DWORD *)v1 + 97)); } else { v3 = (volatile LONG *)*((_DWORD *)v1 + 113); if ( v3 ) { v4 = *((_DWORD *)v1 + 114); if ( v4 ) sub_8F2BC0(v3, v4, *((_DWORD *)v1 + 115), *((_DWORD *)v1 + 116)); } } v5 = *((_DWORD *)v1 + 59) == 0; v7 = 0; if ( !v5 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 4))(27, &v7, (_DWORD *)v1 + 58); if ( *((_DWORD *)v1 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 20))(27, &v7, (_DWORD *)v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*((_DWORD *)v1 + 58) + 20))( (_DWORD *)v1 + 58, 27, &v7, (_DWORD *)v1 + 58); byte_ACD0CC = 1; return sub_8F2BC0(v1, 2, 0, 0); } // ACD0CC: using guessed type char byte_ACD0CC; //----- (00461A40) -------------------------------------------------------- char __thiscall sub_461A40(volatile LONG *this) { volatile LONG *v1; // esi _DWORD *v2; // ecx volatile LONG *v3; // ecx int v4; // eax bool v5; // zf int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 74); if ( v2 ) { sub_8EEE70(v2, *((_DWORD *)v1 + 100), *((_DWORD *)v1 + 101), *((_DWORD *)v1 + 102)); } else { v3 = (volatile LONG *)*((_DWORD *)v1 + 113); if ( v3 ) { v4 = *((_DWORD *)v1 + 117); if ( v4 ) sub_8F2BC0(v3, v4, *((_DWORD *)v1 + 118), *((_DWORD *)v1 + 119)); } } v5 = *((_DWORD *)v1 + 59) == 0; v7 = 1; if ( !v5 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 4))(27, &v7, (_DWORD *)v1 + 58); if ( *((_DWORD *)v1 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 16))(27, &v7, (_DWORD *)v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*((_DWORD *)v1 + 58) + 16))( (_DWORD *)v1 + 58, 27, &v7, (_DWORD *)v1 + 58); return sub_8F2BC0(v1, 2, 0, 0); } //----- (00461B00) -------------------------------------------------------- char __thiscall sub_461B00(volatile LONG *this) { volatile LONG *v1; // edi _DWORD *v2; // ecx bool v3; // zf int v5; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 74); if ( v2 ) sub_8EEE70(v2, *((_DWORD *)v1 + 110), *((_DWORD *)v1 + 111), *((_DWORD *)v1 + 112)); v3 = *((_DWORD *)v1 + 59) == 0; v5 = 1; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 4))(27, &v5, (_DWORD *)v1 + 58); if ( *((_DWORD *)v1 + 59) ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(**((_DWORD **)v1 + 59) + 16))(27, &v5, (_DWORD *)v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*((_DWORD *)v1 + 58) + 16))( (_DWORD *)v1 + 58, 27, &v5, (_DWORD *)v1 + 58); return sub_8F2BC0(v1, 2, 0, 0); } //----- (00461B90) -------------------------------------------------------- char __thiscall sub_461B90(volatile LONG *this, int a2) { int v2; // eax volatile LONG *v3; // esi LOBYTE(v2) = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; v2 = *((_DWORD *)v3 + 86) - 1; switch ( *((_DWORD *)v3 + 86) ) { case 1: LOBYTE(v2) = sub_461970(v3); break; case 2: case 3: case 4: case 5: case 6: LOBYTE(v2) = sub_461B00(v3); break; default: return v2; } } return v2; } // ACDC84: using guessed type int dword_ACDC84; //----- (00461C00) -------------------------------------------------------- LPCSTR __thiscall sub_461C00(_DWORD *this, const CHAR *a2) { _DWORD *v2; // edi int v3; // esi signed int v4; // ebx LPCSTR result; // eax _DWORD *v6; // esi int v7; // eax unsigned int v8; // eax int v9; // ecx unsigned int v10; // edi _DWORD *v11; // esi signed int v12; // edi int v13; // [esp+Ch] [ebp-110h] _DWORD *v14; // [esp+10h] [ebp-10Ch] LPCSTR lpString; // [esp+14h] [ebp-108h] CHAR v16[256]; // [esp+18h] [ebp-104h] v2 = this + 87; lpString = a2; v14 = this + 87; v3 = (int)(this + 87); v4 = 4; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9B431E); v3 += 4; --v4; } while ( v4 ); result = lpString; if ( lpString && *lpString ) { v13 = *(_DWORD *)((*(int (**)(void))(*(_DWORD *)*v2 + 456))() + 192); v6 = v2; do { if ( !*lpString ) break; v7 = (*(int (**)(void))(*(_DWORD *)*v6 + 144))(); v8 = sub_41E590(v16, lpString, (int)&v13, v7, 0); v9 = *v6; v10 = v8; v16[v8] = 0; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)v9 + 472))(v16); lpString += v10; v2 = v14; ++v4; ++v6; } while ( v4 < 4 ); if ( v4 == 1 ) { result = (LPCSTR)(*(int (__thiscall **)(_DWORD, signed int))(*(_DWORD *)*v2 + 488))(*v2, 1); } else { v11 = v2; v12 = 4; do { result = (LPCSTR)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)*v11 + 488))(0); ++v11; --v12; } while ( v12 ); } } return result; } // 461C00: using guessed type CHAR var_104[256]; //----- (00461D50) -------------------------------------------------------- LONG __thiscall sub_461D50(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; *this = &MsgBox::`vftable'; this[58] = &MsgBox::`vftable'; v2 = this[92]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); `eh vector destructor iterator'(v1 + 87, 4u, 4, sub_410C00); return sub_8F10F0(v1); } // 9B4570: using guessed type void *MsgBox::`vftable'; // 9B458C: using guessed type void *MsgBox::`vftable'; //----- (00461DF0) -------------------------------------------------------- char __thiscall sub_461DF0(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // edi const CHAR *v14; // eax v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor01", (int)&a2, (int)&a3, a3); sub_8FB650(v5, v3, (int)"BtnClick01"); sub_8FB650(v5, v3, (int)"BtnOver01"); v6 = sub_8FE0F0(a2, (int)a3, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return 1; } //----- (00461ED0) -------------------------------------------------------- char __thiscall sub_461ED0(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // ST2C_4 const CHAR *v14; // eax volatile LONG **v15; // esi volatile LONG *v16; // eax volatile LONG *v17; // esi int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // eax volatile LONG *v22; // esi volatile LONG v23; // edi const CHAR *v24; // eax int v26; // [esp+10h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor02", (int)&v26, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick02"); sub_8FB650(v5, v3, (int)"BtnOver02"); v6 = sub_8FE0F0(v26, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v3, (int)"BtnNor03", (int)&v26, (int)&a2, a3); sub_8FB650(v15, v3, (int)"BtnClick03"); sub_8FB650(v15, v3, (int)"BtnOver03"); v16 = sub_8FE0F0(v26, a2, (int)v15, v4, 2, 0, 0); v17 = v16; v18 = (int)v16; v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v21 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v22 = sub_8F4A20(0, 0, v21, v20, v19, v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); return 1; } //----- (00462070) -------------------------------------------------------- char __thiscall sub_462070(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // edi const CHAR *v14; // eax v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor01", (int)&a2, (int)&a3, a3); sub_8FB650(v5, v3, (int)"BtnClick01"); sub_8FB650(v5, v3, (int)"BtnOver01"); v6 = sub_8FE0F0(a2, (int)a3, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return 1; } //----- (00462150) -------------------------------------------------------- char __thiscall sub_462150(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // ST2C_4 const CHAR *v14; // eax volatile LONG **v15; // esi volatile LONG *v16; // eax volatile LONG *v17; // esi int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // eax volatile LONG *v22; // esi volatile LONG v23; // edi const CHAR *v24; // eax int v26; // [esp+10h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor02", (int)&v26, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick02"); sub_8FB650(v5, v3, (int)"BtnOver02"); v6 = sub_8FE0F0(v26, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(-1832797525); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v3, (int)"BtnNor03", (int)&v26, (int)&a2, a3); sub_8FB650(v15, v3, (int)"BtnClick03"); sub_8FB650(v15, v3, (int)"BtnOver03"); v16 = sub_8FE0F0(v26, a2, (int)v15, v4, 2, 0, 0); v17 = v16; v18 = (int)v16; v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v21 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v22 = sub_8F4A20(0, 0, v21, v20, v19, v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(-1696072729); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); return 1; } //----- (004622F0) -------------------------------------------------------- char __thiscall sub_4622F0(void *this, int a2, volatile LONG *a3) { int v3; // esi int v4; // ebx volatile LONG **v5; // edi volatile LONG *v6; // eax volatile LONG *v7; // edi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // edi volatile LONG v13; // ST2C_4 const CHAR *v14; // eax volatile LONG **v15; // edi volatile LONG *v16; // eax volatile LONG *v17; // edi int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // eax volatile LONG *v22; // edi volatile LONG v23; // ST2C_4 const CHAR *v24; // eax volatile LONG **v25; // edi volatile LONG *v26; // eax void **v27; // edi const char *v28; // eax int v29; // ST10_4 int v30; // ST0C_4 int v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ST2C_4 const CHAR *v34; // eax volatile LONG **v35; // edi volatile LONG *v36; // eax volatile LONG *v37; // esi int v38; // ST14_4 int v39; // ST10_4 int v40; // ST0C_4 int v41; // eax volatile LONG *v42; // esi volatile LONG v43; // edi const CHAR *v44; // eax int v46; // [esp+10h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor06", (int)&v46, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick06"); sub_8FB650(v5, v3, (int)"BtnOver06"); v6 = sub_8FE0F0(v46, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1113563817); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v3, (int)"BtnNor07", (int)&v46, (int)&a2, a3); sub_8FB650(v15, v3, (int)"BtnClick07"); sub_8FB650(v15, v3, (int)"BtnOver07"); v16 = sub_8FE0F0(v46, a2, (int)v15, v4, 2, 0, 0); v17 = v16; v18 = (int)v16; v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v21 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v22 = sub_8F4A20(0, 0, v21, v20, v19, v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(1403753881); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v25 = sub_8FB140(v3, (int)"BtnNor08", (int)&v46, (int)&a2, a3); sub_8FB650(v25, v3, (int)"BtnClick08"); sub_8FB650(v25, v3, (int)"BtnOver08"); v26 = sub_8FE0F0(v46, a2, (int)v25, v4, 3, 0, 0); v27 = (void **)v26; *((_DWORD *)v26 + 68) = dword_AD01E8; v28 = sub_4090F0(353130066); sub_8F2EA0(v27, v28); v29 = sub_421050(0); v30 = (*((int (__thiscall **)(void **))*v27 + 37))(v27); v31 = (*((int (__thiscall **)(void **))*v27 + 36))(v27); v32 = sub_8F4A20(0, 0, v31, v30, v29, (int)v27, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v33 = *v32; v34 = sub_4090F0(238490988); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); v35 = sub_8FB140(v3, (int)"BtnNor09", (int)&v46, (int)&a2, a3); sub_8FB650(v35, v3, (int)"BtnClick09"); sub_8FB650(v35, v3, (int)"BtnOver09"); v36 = sub_8FE0F0(v46, a2, (int)v35, v4, 4, 0, 0); v37 = v36; v38 = (int)v36; v39 = sub_421050(0); v40 = (*(int (__thiscall **)(volatile LONG *))(*v37 + 148))(v37); v41 = (*(int (__thiscall **)(volatile LONG *))(*v37 + 144))(v37); v42 = sub_8F4A20(0, 0, v41, v40, v39, v38, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); return 1; } // AD01E8: using guessed type int dword_AD01E8; //----- (00462630) -------------------------------------------------------- char __thiscall sub_462630(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // ST2C_4 const CHAR *v14; // eax volatile LONG **v15; // esi volatile LONG *v16; // eax volatile LONG *v17; // esi int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // eax volatile LONG *v22; // esi volatile LONG v23; // edi const CHAR *v24; // eax int v26; // [esp+10h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor02", (int)&v26, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick02"); sub_8FB650(v5, v3, (int)"BtnOver02"); v6 = sub_8FE0F0(v26, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_40C190(1263611766); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v3, (int)"BtnNor03", (int)&v26, (int)&a2, a3); sub_8FB650(v15, v3, (int)"BtnClick03"); sub_8FB650(v15, v3, (int)"BtnOver03"); v16 = sub_8FE0F0(v26, a2, (int)v15, v4, 2, 0, 0); v17 = v16; v18 = (int)v16; v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v21 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v22 = sub_8F4A20(0, 0, v21, v20, v19, v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(1536257685); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); return 1; } //----- (004627D0) -------------------------------------------------------- char __thiscall sub_4627D0(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // ebx volatile LONG **v5; // esi volatile LONG *v6; // eax volatile LONG *v7; // esi int v8; // ST14_4 int v9; // ST10_4 int v10; // ST0C_4 int v11; // eax volatile LONG *v12; // esi volatile LONG v13; // edi const CHAR *v14; // eax v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor01", (int)&a2, (int)&a3, a3); sub_8FB650(v5, v3, (int)"BtnClick01"); sub_8FB650(v5, v3, (int)"BtnOver01"); v6 = sub_8FE0F0(a2, (int)a3, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v13 = *v12; v14 = sub_4090F0(2088153289); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); return 1; } //----- (004628E0) -------------------------------------------------------- char __thiscall sub_4628E0(_DWORD *this) { _DWORD *v1; // esi float *v2; // ecx _DWORD **v3; // esi const CHAR *v4; // edi char result; // al _DWORD *v6; // ecx volatile LONG *v7; // ecx int v8; // eax bool v9; // zf int v10; // [esp+8h] [ebp-4h] v1 = this; if ( this[86] != 4 || (v2 = *(float **)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 5104)) == 0 || (unsigned __int8)sub_55F4C0(v2) ) { v6 = (_DWORD *)v1[74]; if ( v6 ) { sub_8EEE70(v6, v1[105], v1[106], v1[107]); } else { v7 = (volatile LONG *)v1[113]; if ( v7 ) { v8 = v1[117]; if ( v8 ) sub_8F2BC0(v7, v8, v1[118], v1[119]); } } v9 = v1[59] == 0; v10 = 1; if ( !v9 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 4))(27, &v10, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 16))(27, &v10, v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(v1[58] + 16))(v1 + 58, 27, &v10, v1 + 58); result = sub_8F2BC0(v1, 2, 0, 0); } else { v3 = (_DWORD **)(v1 + 58); v4 = sub_4090F0(-469032900); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return result; } //----- (00462A20) -------------------------------------------------------- _DWORD *__thiscall sub_462A20(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MsgBox::`vftable'; v1[58] = &MsgBox::`vftable'; `eh vector constructor iterator'( v1 + 87, 4u, 4, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[92] = 0; v1[113] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B4570: using guessed type void *MsgBox::`vftable'; // 9B458C: using guessed type void *MsgBox::`vftable'; //----- (00462AB0) -------------------------------------------------------- char __thiscall sub_462AB0(volatile LONG *this, int a2, int a3) { char result; // al result = a2 - 1; switch ( a2 ) { case 1: result = sub_461970(this); break; case 2: result = sub_461A40(this); break; case 3: result = sub_4628E0(this); break; case 4: result = sub_461B00(this); break; default: return result; } return result; } //----- (00462B00) -------------------------------------------------------- volatile LONG *__cdecl sub_462B00(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1E0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_462A20(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00462C30) -------------------------------------------------------- volatile LONG *sub_462C30(int a1, char *a2, ...) { volatile LONG *result; // eax volatile LONG *v3; // esi char v4; // [esp+4h] [ebp-204h] va_list va; // [esp+218h] [ebp+10h] va_start(va, a2); result = sub_462B00(a1); v3 = result; if ( result ) { vsprintf(&v4, a2, va); sub_461C00(v3, &v4); sub_8F9D50(&unk_BA6B10, v3, 0, 0, 0); result = v3; } return result; } //----- (00462CA0) -------------------------------------------------------- volatile LONG *sub_462CA0(int a1, char *a2, ...) { volatile LONG *result; // eax volatile LONG *v3; // esi char v4; // [esp+4h] [ebp-204h] va_list va; // [esp+218h] [ebp+10h] va_start(va, a2); result = sub_462B00(a1); v3 = result; if ( result ) { vsprintf(&v4, a2, va); sub_461C00(v3, &v4); sub_8F82A0(&unk_BA6B10, v3); result = v3; } return result; } //----- (00462D10) -------------------------------------------------------- char __thiscall sub_462D10(void *this, int a2, volatile LONG *a3) { int v3; // edi int v4; // esi volatile LONG **v5; // ebx volatile LONG *v6; // eax volatile LONG *v7; // ebx int v8; // ST2C_4 int v9; // ST28_4 int v10; // ST24_4 int v11; // eax volatile LONG *v12; // ebx const CHAR *v13; // eax volatile LONG **v14; // ebx volatile LONG *v15; // eax volatile LONG *v16; // ebx int v17; // ST2C_4 int v18; // ST28_4 int v19; // ST24_4 int v20; // eax volatile LONG *v21; // ebx const CHAR *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax unsigned __int16 *v25; // eax char result; // al int v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // edi volatile LONG *v30; // ebx int v31; // [esp+Ch] [ebp-10h] int v32; // [esp+10h] [ebp-Ch] volatile LONG v33; // [esp+14h] [ebp-8h] int v34; // [esp+18h] [ebp-4h] v3 = a2; v4 = (int)this; v5 = sub_8FB140(a2, (int)"BtnNor02", (int)&v34, (int)&a2, a3); sub_8FB650(v5, v3, (int)"BtnClick02"); sub_8FB650(v5, v3, (int)"BtnOver02"); v6 = sub_8FE0F0(v34, a2, (int)v5, v4, 1, 0, 0); v7 = v6; v8 = (int)v6; v9 = sub_421050(0); v10 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 148))(v7); v11 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 144))(v7); v12 = sub_8F4A20(0, 0, v11, v10, v9, v8, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 5); v33 = *v12; v13 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v12, v13); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v14 = sub_8FB140(v3, (int)"BtnNor03", (int)&v34, (int)&a2, a3); sub_8FB650(v14, v3, (int)"BtnClick03"); sub_8FB650(v14, v3, (int)"BtnOver03"); v15 = sub_8FE0F0(v34, a2, (int)v14, v4, 2, 0, 0); v16 = v15; v17 = (int)v15; v18 = sub_421050(0); v19 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 148))(v16); v20 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 144))(v16); v21 = sub_8F4A20(0, 0, v20, v19, v18, v17, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v33 = *v21; v22 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v21, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v23 = sub_8FB140(v3, (int)"ItemSlot", (int)&v34, (int)&a2, a3); sub_8F3EB0(v34, a2, (int)v23, 0, 0, 0); v24 = sub_5D6E20(v34 + 1, a2 + 1, v4); *(_DWORD *)(v4 + 364) = v24; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 364) + 256))(1); v25 = (unsigned __int16 *)sub_40C8D0("RandomOption"); sub_5D5EA0(*(_DWORD *)(v4 + 364), v3, *v25); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(v4 + 364) + 232) + 8))(*(_DWORD *)(v4 + 364) + 232, 0); result = sub_8F71E0(v3, (int)"Text01", &v34, &a2, &v31, &v32); if ( result ) { v27 = sub_421050(0); v28 = sub_8F4A20(v34, a2, v31, v32, v27, v4, 0, 0); v29 = *(volatile LONG **)(v4 + 368); v30 = v28; if ( v29 != v28 ) { if ( v29 && !InterlockedDecrement(v29 + 1) && v29 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v29)(v29, 1); *(_DWORD *)(v4 + 368) = v30; if ( v30 ) InterlockedIncrement(v30 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 368) + 488))(5); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v4 + 368) + 472))("-"); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 368) + 240))(*(_DWORD *)(v4 + 368), 0); result = 1; } return result; } //----- (00463020) -------------------------------------------------------- char __thiscall sub_463020(volatile LONG **this, volatile LONG *a2) { volatile LONG **v2; // esi volatile LONG *v3; // edi char result; // al int v5; // ebx char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax int v12; // eax int v13; // edi int v14; // ST10_4 int v15; // ST0C_4 int v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // edi volatile LONG *v19; // ebx void (__thiscall *v20)(volatile LONG **, int, int, _DWORD, _DWORD); // edx int v21; // eax void (__thiscall ***v22)(_DWORD, signed int); // esi int v23; // [esp+24h] [ebp-28h] int v24; // [esp+28h] [ebp-24h] int v25; // [esp+2Ch] [ebp-20h] int v26; // [esp+30h] [ebp-1Ch] volatile LONG **v27; // [esp+34h] [ebp-18h] volatile LONG *v28; // [esp+38h] [ebp-14h] int v29; // [esp+3Ch] [ebp-10h] int v30; // [esp+48h] [ebp-4h] v2 = this; v29 = 0; v30 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v28 = v3; if ( !v3 ) { v30 = -1; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); } return 0; } v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v6, (int)&v29, v5); if ( !v29 ) return 0; v7 = sub_8FB140(v29, (int)"Panel01", (int)&v25, (int)&v26, v3); if ( sub_8F1440(v2, 0, 0, (int)v7, 0, 0, 0, 0) ) { v9 = (volatile LONG *)sub_43D0D0(0x13u); if ( v9 ) v10 = sub_8FB140(v29, (int)"Theme", (int)&v25, (int)&v26, v9); else v10 = sub_8FB140(v29, (int)"Theme", (int)&v25, (int)&v26, 0); v11 = sub_8F3EB0(v25, v26, (int)v10, (int)v2, 0, 0); if ( v11 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = sub_421050(0); v23 = v12; v24 = 0; v27 = v2 + 87; while ( 1 ) { v13 = *(_DWORD *)(v12 + 384); v14 = v12; v15 = *(_DWORD *)(v12 + 384); v16 = (*((int (__thiscall **)(volatile LONG **))*v2 + 36))(v2); v17 = sub_8F4A20(8, v24 * (v13 + 1) + 8, v16 - 16, v15, v14, (int)v2, 0, 0); v18 = *v27; v19 = v17; if ( *v27 != v17 ) { if ( v18 && !InterlockedDecrement(v18 + 1) && v18 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); *v27 = v19; if ( v19 ) InterlockedIncrement(v19 + 1); } (*(void (__stdcall **)(_DWORD))(**v27 + 240))(0); ++v27; if ( ++v24 >= 4 ) break; v12 = v23; } switch ( (unsigned int)a2 ) { case 1u: sub_461DF0(v2, v29, v28); break; case 2u: sub_461ED0(v2, v29, v28); break; case 3u: sub_462070(v2, v29, v28); break; case 4u: sub_4622F0(v2, v29, v28); break; case 5u: sub_462150(v2, v29, v28); break; case 6u: sub_462630(v2, v29, v28); break; case 7u: sub_4627D0(v2, v29, v28); break; case 8u: sub_462D10(v2, v29, v28); break; default: break; } v20 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD, _DWORD))*((_DWORD *)*v2 + 59); v2[86] = a2; v20(v2, xRight, dword_AC2F78, 0.5, 0.5); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 129))(v2, 0); v21 = v29; v2[113] = 0; v2[114] = 0; v2[115] = 0; v2[116] = 0; v2[117] = 0; v2[118] = 0; v2[119] = 0; v30 = -1; if ( v21 ) { v22 = (void (__thiscall ***)(_DWORD, signed int))v21; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v22 ) (**v22)(v22, 1); } } result = 1; } else { v8 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v8 ) (**v8)(v8, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004633D0) -------------------------------------------------------- void *__thiscall sub_4633D0(void *this, char a2) { void *v2; // esi v2 = this; sub_461D50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00463400) -------------------------------------------------------- void *__thiscall sub_463400(void *this, char a2) { void *v2; // esi v2 = this; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00463430) -------------------------------------------------------- char __thiscall sub_463430(_DWORD *this, int a2, int a3) { volatile LONG *v3; // eax v3 = (volatile LONG *)sub_402BF0(this); if ( v3 ) LOBYTE(v3) = sub_8F2C80(v3, a2, a3); return (char)v3; } //----- (00463460) -------------------------------------------------------- char __thiscall sub_463460(_DWORD *this, int a2, int a3) { volatile LONG *v3; // eax v3 = (volatile LONG *)sub_402BF0(this); if ( v3 ) LOBYTE(v3) = sub_8F2BC0(v3, 4, a2, a3); return (char)v3; } //----- (00463490) -------------------------------------------------------- int __cdecl sub_463490(int a1) { _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x120u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_8F2740(v1); *(_DWORD *)v2 = &PgWinProxy::`vftable'; *(_DWORD *)(v2 + 232) = &PgWinProxy::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD, _DWORD, signed int, signed int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 336))( v2, 0, 0, 1, 1, a1, 0, 0) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9B47B0: using guessed type void *PgWinProxy::`vftable'; // 9B47CC: using guessed type void *PgWinProxy::`vftable'; //----- (004635E0) -------------------------------------------------------- int __cdecl sub_4635E0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x120u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8F2740(v5); *(_DWORD *)v6 = &PgWinProxy::`vftable'; *(_DWORD *)(v6 + 232) = &PgWinProxy::`vftable'; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, _DWORD, _DWORD))(*(_DWORD *)v6 + 336))( v6, a1, a2, a3, a4, a5, 0, 0) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9B47B0: using guessed type void *PgWinProxy::`vftable'; // 9B47CC: using guessed type void *PgWinProxy::`vftable'; //----- (004637A0) -------------------------------------------------------- signed int __thiscall sub_4637A0(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // ecx int v5; // ecx int v6; // edi int v7; // ebx int v8; // ecx signed int v9; // edx signed int result; // eax int v11; // esi signed int v12; // [esp+Ch] [ebp-8h] signed int v13; // [esp+10h] [ebp-4h] int v14; // [esp+1Ch] [ebp+8h] float v15; // [esp+1Ch] [ebp+8h] float v16; // [esp+1Ch] [ebp+8h] float v17; // [esp+1Ch] [ebp+8h] float v18; // [esp+1Ch] [ebp+8h] v2 = a2; v3 = this; v4 = this[74]; if ( a2 >= v4 ) v2 = v4 - 1; if ( v2 < 0 ) v2 = 0; v5 = v3[72]; v3[75] = v2; v12 = (*(int (**)(void))(*(_DWORD *)v5 + 192))(); (*(void (**)(void))(*(_DWORD *)v3[72] + 196))(); v13 = (*(int (**)(void))(*(_DWORD *)v3[72] + 200))(); (*(void (**)(void))(*(_DWORD *)v3[72] + 204))(); v6 = (*(int (**)(void))(*(_DWORD *)v3[72] + 144))(); v7 = (*(int (**)(void))(*(_DWORD *)v3[72] + 148))(); v14 = v3[74] - 1; if ( v3[74] == 1 ) v14 = 1; v8 = v3[76]; v9 = 0; result = 0; if ( v8 ) { if ( v8 == 1 ) { v17 = (double)(v7 - (*(int (**)(void))(*(_DWORD *)v3[73] + 148))()) / (double)v14; v18 = (double)(signed int)v3[75] * v17; result = (signed int)(v18 + (double)v13); v9 = v12; } } else { v15 = (double)(v6 - (*(int (**)(void))(*(_DWORD *)v3[73] + 144))()) / (double)v14; v16 = (double)(signed int)v3[75] * v15; v9 = (signed int)(v16 + (double)v12); result = v13; } v11 = v3[73]; if ( v11 ) result = (*(int (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v11 + 308))(v11, v9, result); return result; } //----- (004638F0) -------------------------------------------------------- signed int __thiscall sub_4638F0(_DWORD *this, int a2) { int v2; // ST00_4 v2 = this[75]; this[74] = a2; return sub_4637A0(this, v2); } //----- (00463910) -------------------------------------------------------- char __thiscall sub_463910(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6) { _DWORD *v6; // esi _DWORD *v7; // eax int v8; // edi int v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax int v14; // [esp+10h] [ebp-10h] int v15; // [esp+1Ch] [ebp-4h] v6 = this; sub_442AC0(a6, (int)this); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 172))(v6, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 176))(v6, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 152))(v6, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 156))(v6, 0); (*(void (__thiscall **)(_DWORD *, void *))(*v6 + 140))(v6, &unk_9B4990); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 300))(v6, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v6 + 240))(v6, 1); (*(void (__thiscall **)(_DWORD *, signed int))(*v6 + 256))(v6, 1); v6[77] = a5; v7 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 72))(a2, a3); v8 = sub_85C050(v7, 8); if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v9 = **(_DWORD **)(v8 + 40); v15 = 0; if ( v9 ) v10 = *(volatile LONG **)(v9 + 4); else v10 = 0; v11 = sub_8FB140(a2, a3, (int)&v14, (int)&a6, v10); v6[72] = sub_8F3EB0(v14, (int)a6, (int)v11, (int)v6, 0, 0); v12 = sub_8F3EB0(0, 0, a4, (int)v6, 0, 0); v6[73] = v12; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); sub_4637A0(v6, 0); v15 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return 1; } //----- (00463AD0) -------------------------------------------------------- char __thiscall sub_463AD0(_DWORD **this) { _DWORD *v1; // esi int v2; // edi int v3; // ebx volatile LONG *v4; // eax void (__thiscall *v5)(_DWORD *, LONG *, LONG *); // eax int v6; // eax double v7; // st7 int v8; // eax signed int v10; // [esp+Ch] [ebp-10h] float v11; // [esp+10h] [ebp-Ch] LONG v12; // [esp+14h] [ebp-8h] LONG v13; // [esp+18h] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(*this[72] + 192))(); (*(void (**)(void))(*(_DWORD *)v1[72] + 196))(); v3 = (*(int (**)(void))(*(_DWORD *)v1[72] + 200))(); (*(void (**)(void))(*(_DWORD *)v1[72] + 204))(); v10 = (*(int (**)(void))(*(_DWORD *)v1[72] + 144))(); v11 = COERCE_FLOAT((*(int (**)(void))(*(_DWORD *)v1[72] + 148))()); LOBYTE(v4) = (*(int (__stdcall **)(LONG, LONG))(*(_DWORD *)v1[72] + 332))(pt.x, pt.y); if ( !(_BYTE)v4 ) return (char)v4; v5 = *(void (__thiscall **)(_DWORD *, LONG *, LONG *))(*v1 + 224); v13 = pt.x; v12 = pt.y; v5(v1, &v13, &v12); v6 = v1[76]; if ( v6 ) { if ( v6 != 1 ) goto LABEL_7; v7 = (double)(v12 - v3) / (double)SLODWORD(v11); } else { v7 = (double)(v13 - v2) / (double)v10; } v11 = v7; LABEL_7: v8 = (signed int)((double)(signed int)v1[74] * v11); v1[75] = v8; sub_4637A0(v1, v8); v4 = (volatile LONG *)sub_402BF0(v1); if ( v4 ) LOBYTE(v4) = sub_8F2C30(v4, 5, v1[78], v1[77]); return (char)v4; } //----- (00463C10) -------------------------------------------------------- char __thiscall sub_463C10(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; sub_4637A0(this, this[75] - 1); v2 = (volatile LONG *)sub_402BF0(v1); if ( v2 ) LOBYTE(v2) = sub_8F2C30(v2, 5, v1[78], v1[77]); return (char)v2; } //----- (00463C50) -------------------------------------------------------- char __thiscall sub_463C50(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; sub_4637A0(this, this[75] + 1); v2 = (volatile LONG *)sub_402BF0(v1); if ( v2 ) LOBYTE(v2) = sub_8F2C30(v2, 5, v1[78], v1[77]); return (char)v2; } //----- (00463C90) -------------------------------------------------------- char __thiscall sub_463C90(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char result; // al v3 = this; result = sub_8F3540(this); if ( result ) { result = a3; if ( a3 == v3[72] && !a2 ) { result = (*(int (__thiscall **)(_DWORD *))(*v3 + 244))(v3); if ( result ) result = sub_463AD0((_DWORD **)v3); } } return result; } //----- (00463CD0) -------------------------------------------------------- char __thiscall sub_463CD0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi volatile LONG *v4; // eax int v5; // eax v3 = this; if ( a2 ) { LOBYTE(v4) = a2 - 1; if ( a2 != 1 ) return (char)v4; v5 = this[75] + 1; } else { v5 = this[75] - 1; } sub_4637A0(this, v5); v4 = (volatile LONG *)sub_402BF0(v3); if ( v4 ) LOBYTE(v4) = sub_8F2C30(v4, 5, v3[78], v3[77]); return (char)v4; } //----- (00463EA0) -------------------------------------------------------- char __thiscall sub_463EA0(_DWORD *this, int a2, int a3, void *a4, void *a5, int a6, int a7, _DWORD *a8) { _DWORD *v8; // esi _DWORD *v9; // eax int v10; // eax int v11; // eax volatile LONG **v12; // eax void *v13; // eax void *v14; // eax volatile LONG **v15; // ebx void *v16; // eax void *v17; // eax void *v18; // eax void *v19; // eax void *v20; // eax void *v21; // eax volatile LONG **v22; // ebx void *v23; // eax void *v24; // eax void *v25; // eax void *v26; // eax volatile LONG *v27; // eax int v29; // [esp+1Ch] [ebp-74h] volatile LONG *v30; // [esp+20h] [ebp-70h] int v31; // [esp+24h] [ebp-6Ch] int v32; // [esp+28h] [ebp-68h] void *v33; // [esp+2Ch] [ebp-64h] int v34; // [esp+3Ch] [ebp-54h] unsigned int v35; // [esp+40h] [ebp-50h] void *v36; // [esp+48h] [ebp-48h] int v37; // [esp+58h] [ebp-38h] unsigned int v38; // [esp+5Ch] [ebp-34h] void *v39; // [esp+64h] [ebp-2Ch] int v40; // [esp+74h] [ebp-1Ch] unsigned int v41; // [esp+78h] [ebp-18h] int v42; // [esp+8Ch] [ebp-4h] v8 = this; sub_442AC0(a8, (int)this); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 172))(v8, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 176))(v8, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 152))(v8, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 156))(v8, 0); (*(void (__thiscall **)(_DWORD *, void *))(*v8 + 140))(v8, &unk_9B4991); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 300))(v8, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v8 + 240))(v8, 1); (*(void (__thiscall **)(_DWORD *, signed int))(*v8 + 256))(v8, 1); v8[77] = a7; v9 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 72))(a2, a3); v10 = sub_85C050(v9, 8); v29 = v10; if ( v10 ) { InterlockedIncrement((volatile LONG *)(v10 + 4)); v10 = v29; } v11 = **(_DWORD **)(v10 + 40); v42 = 0; if ( v11 ) { v30 = *(volatile LONG **)(v11 + 4); v12 = sub_8FB140(a2, a3, (int)&v32, (int)&v31, v30); } else { v30 = 0; v12 = sub_8FB140(a2, a3, (int)&v32, (int)&v31, 0); } v8[72] = sub_8F3EB0(v32, v31, (int)v12, (int)v8, 0, 0); v41 = 15; v40 = 0; LOBYTE(v39) = 0; v35 = 15; v34 = 0; LOBYTE(v33) = 0; LOBYTE(v42) = 2; sub_4018E0(&v33, a4, strlen((const char *)a4)); v13 = sub_427A80(&v36, (int)&v33, &unk_9B4994); LOBYTE(v42) = 3; sub_406450(&v39, v13); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v14 = v39; if ( v41 < 0x10 ) v14 = &v39; v15 = sub_8FB140(a2, (int)v14, (int)&v32, (int)&v31, v30); v16 = sub_427A80(&v36, (int)&v33, "Click"); LOBYTE(v42) = 4; sub_406450(&v39, v16); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v17 = v39; if ( v41 < 0x10 ) v17 = &v39; sub_8FB650(v15, a2, (int)v17); v18 = sub_427A80(&v36, (int)&v33, "Over"); LOBYTE(v42) = 5; sub_406450(&v39, v18); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v19 = v39; if ( v41 < 0x10 ) v19 = &v39; sub_8FB650(v15, a2, (int)v19); sub_8FE0F0(v32, v31, (int)v15, (int)v8, 0, 0, 0); sub_4018E0(&v33, a5, strlen((const char *)a5)); v20 = sub_427A80(&v36, (int)&v33, "Nor"); LOBYTE(v42) = 6; sub_406450(&v39, v20); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v21 = v39; if ( v41 < 0x10 ) v21 = &v39; v22 = sub_8FB140(a2, (int)v21, (int)&v32, (int)&v31, v30); v23 = sub_427A80(&v36, (int)&v33, "Click"); LOBYTE(v42) = 7; sub_406450(&v39, v23); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v24 = v39; if ( v41 < 0x10 ) v24 = &v39; sub_8FB650(v22, a2, (int)v24); v25 = sub_427A80(&v36, (int)&v33, "Over"); LOBYTE(v42) = 8; sub_406450(&v39, v25); LOBYTE(v42) = 2; if ( v38 >= 0x10 ) operator delete(v36); v26 = v39; v38 = 15; v37 = 0; LOBYTE(v36) = 0; if ( v41 < 0x10 ) v26 = &v39; sub_8FB650(v22, a2, (int)v26); sub_8FE0F0(v32, v31, (int)v22, (int)v8, 1, 0, 0); v27 = sub_8F3EB0(0, 0, a6, (int)v8, 0, 0); v8[73] = v27; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); sub_4637A0(v8, 0); if ( v35 >= 0x10 ) operator delete(v33); v35 = 15; v34 = 0; LOBYTE(v33) = 0; if ( v41 >= 0x10 ) operator delete(v39); v41 = 15; v40 = 0; LOBYTE(v39) = 0; v42 = -1; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); return 1; } //----- (00464310) -------------------------------------------------------- int __cdecl sub_464310(int a1, int a2, void *a3, void *a4, int a5, int a6, _DWORD *a7) { _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi int result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x13Cu); v8 = (int)v7; v11 = v7; v12 = 0; if ( v7 ) { sub_8F2740(v7); *(_DWORD *)v8 = &SlideBar::`vftable'; *(_DWORD *)(v8 + 232) = &SlideBar::`vftable'; *(_DWORD *)(v8 + 296) = 0; *(_DWORD *)(v8 + 300) = 0; *(_DWORD *)(v8 + 304) = 0; *(_DWORD *)(v8 + 312) = -1; *(_DWORD *)(v8 + 308) = -1; *(_DWORD *)(v8 + 292) = 0; *(_DWORD *)(v8 + 288) = 0; } else { v8 = 0; } if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v12 = 1; sub_403790(&unk_BA6B10, v8); if ( sub_463EA0((_DWORD *)v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, (_DWORD *)v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } result = 0; } return result; } // 9B49C0: using guessed type void *SlideBar::`vftable'; // 9B49DC: using guessed type void *SlideBar::`vftable'; //----- (00464490) -------------------------------------------------------- void *__thiscall sub_464490(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SlideBar::`vftable'; *((_DWORD *)this + 58) = &SlideBar::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B49C0: using guessed type void *SlideBar::`vftable'; // 9B49DC: using guessed type void *SlideBar::`vftable'; //----- (004645F0) -------------------------------------------------------- int __thiscall sub_4645F0(_DWORD *this, unsigned int a2, int a3) { int result; // eax result = a2; if ( a2 < (this[84] - this[83]) >> 2 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)(this[83] + 4 * a2) + 472))(a3); return result; } //----- (00464630) -------------------------------------------------------- int __thiscall sub_464630(_DWORD *this, int a2) { int result; // eax int (__stdcall *v3)(signed int); // edx result = a2; if ( this[77] != a2 ) { this[77] = a2; switch ( a2 ) { case 0: goto LABEL_3; case 2: v3 = *(int (__stdcall **)(signed int))(*this + 492); if ( this[79] <= 2u ) goto LABEL_5; result = v3(2); break; case 3: if ( this[79] <= 3u ) LABEL_3: result = (*(int (__stdcall **)(_DWORD))(*this + 492))(0); else result = (*(int (__stdcall **)(signed int))(*this + 492))(3); break; case 4: v3 = *(int (__stdcall **)(signed int))(*this + 492); if ( this[79] > 1u ) result = v3(1); else LABEL_5: result = v3(0); break; default: return result; } } return result; } //----- (004646D0) -------------------------------------------------------- int __thiscall sub_4646D0(_BYTE *this, _BYTE *a2) { _BYTE *v2; // esi int result; // eax v2 = this; result = sub_907E60(this, a2); if ( v2[380] ) result = (*(int (__thiscall **)(_BYTE *, signed int))(*(_DWORD *)v2 + 552))(v2, 4); return result; } //----- (00464700) -------------------------------------------------------- int __thiscall sub_464700(_DWORD *this) { return (this[79] - this[78]) >> 3; } //----- (00464710) -------------------------------------------------------- unsigned int __thiscall sub_464710(_DWORD *this, int a2) { unsigned int result; // eax int v3; // edx result = 0; if ( (this[75] - this[74]) >> 2 ) { do { v3 = *(_DWORD *)(this[74] + 4 * result); if ( v3 ) *(_DWORD *)(v3 + 272) = a2; ++result; } while ( result < (this[75] - this[74]) >> 2 ); } return result; } //----- (00464760) -------------------------------------------------------- void __thiscall sub_464760(_DWORD *this, int a2, const char *a3) { int v3; // ecx if ( (this[75] - this[74]) >> 2 > a2 ) { v3 = *(_DWORD *)(this[74] + 4 * a2); if ( v3 ) { if ( *(_DWORD *)(v3 + 272) ) sub_8F2EA0((void **)v3, a3); } } } //----- (00464990) -------------------------------------------------------- unsigned int __thiscall sub_464990(_DWORD *this, int a2) { unsigned int v2; // esi unsigned int result; // eax int v4; // edi v2 = 0; result = (this[3] - this[2]) / 48; if ( result ) { v4 = 0; if ( result <= 0 ) goto LABEL_4; do { *(_DWORD *)(v4 + this[2] + 28) = a2; LABEL_4: ++v2; result = (this[3] - this[2]) / 48; v4 += 48; } while ( v2 < result ); } return result; } //----- (004649F0) -------------------------------------------------------- unsigned int __thiscall sub_4649F0(_DWORD *this, int a2, int a3, int a4) { unsigned int v4; // edi unsigned int result; // eax int v6; // esi v4 = 0; result = (this[3] - this[2]) / 48; if ( result ) { v6 = 0; if ( result <= 0 ) goto LABEL_4; do { *(_DWORD *)(v6 + this[2] + 32) = a2; *(_DWORD *)(v6 + this[2] + 36) = a3; *(_DWORD *)(v6 + this[2] + 40) = a4; LABEL_4: ++v4; result = (this[3] - this[2]) / 48; v6 += 48; } while ( v4 < result ); } return result; } //----- (00464AC0) -------------------------------------------------------- char __thiscall sub_464AC0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[96]); return (char)v2; } //----- (00464AF0) -------------------------------------------------------- char __thiscall sub_464AF0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[96]); return (char)v2; } //----- (00464B20) -------------------------------------------------------- char __thiscall sub_464B20(_DWORD *this, unsigned int a2, int a3) { if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; **(_DWORD **)(this[78] + 8 * a2) = a3; return 1; } //----- (00464B60) -------------------------------------------------------- char __thiscall sub_464B60(_DWORD *this, unsigned int a2, _DWORD *a3) { if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; *a3 = **(_DWORD **)(this[78] + 8 * a2); return 1; } //----- (00464BA0) -------------------------------------------------------- char __thiscall sub_464BA0(_DWORD *this, unsigned int a2, int a3) { if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; sub_464990(*(_DWORD **)(this[78] + 8 * a2), a3); return 1; } //----- (00464BE0) -------------------------------------------------------- char __thiscall sub_464BE0(_DWORD *this, unsigned int a2, int a3, int a4, int a5) { if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; sub_4649F0(*(_DWORD **)(this[78] + 8 * a2), a3, a4, a5); return 1; } //----- (00464C80) -------------------------------------------------------- char __thiscall sub_464C80(_DWORD *this, unsigned int a2, unsigned int a3, int a4, int a5, int a6) { int v7; // ecx unsigned int v8; // edx int v9; // eax if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; v7 = *(_DWORD *)(this[78] + 8 * a2); v8 = (signed int)((unsigned __int64)(715827883i64 * (*(_DWORD *)(v7 + 12) - *(_DWORD *)(v7 + 8))) >> 32) >> 3; if ( a3 < v8 + (v8 >> 31) ) { v9 = 6 * a3; *(_DWORD *)(*(_DWORD *)(v7 + 8) + 8 * v9 + 32) = a4; *(_DWORD *)(*(_DWORD *)(v7 + 8) + 8 * v9 + 36) = a5; *(_DWORD *)(*(_DWORD *)(v7 + 8) + 8 * v9 + 40) = a6; } return 1; } //----- (00464D00) -------------------------------------------------------- char __thiscall sub_464D00(_DWORD *this, int a2) { unsigned int v2; // ebx int v3; // esi unsigned int v4; // edi unsigned int v5; // eax int v6; // ebx unsigned int v8; // [esp+4h] [ebp-4h] v2 = 0; v8 = 0; if ( (this[79] - this[78]) >> 3 ) { while ( 1 ) { v3 = *(_DWORD *)(this[78] + 8 * v2); v4 = 0; v5 = (*(_DWORD *)(v3 + 12) - *(_DWORD *)(v3 + 8)) / 48; if ( v5 ) break; LABEL_7: v8 = ++v2; if ( v2 >= (this[79] - this[78]) >> 3 ) return 1; } v6 = 0; if ( v5 <= 0 ) goto LABEL_5; while ( 1 ) { *(_DWORD *)(*(_DWORD *)(v3 + 8) + v6 + 44) = a2; LABEL_5: ++v4; v6 += 48; if ( v4 >= (*(_DWORD *)(v3 + 12) - *(_DWORD *)(v3 + 8)) / 48 ) { v2 = v8; goto LABEL_7; } } } return 1; } //----- (00464DA0) -------------------------------------------------------- char __thiscall sub_464DA0(_DWORD *this, unsigned int a2, int a3) { unsigned int v3; // edi int v4; // esi v3 = 0; if ( (this[79] - this[78]) >> 3 ) { do { v4 = *(_DWORD *)(this[78] + 8 * v3); if ( a2 < (*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48 ) *(_DWORD *)(*(_DWORD *)(v4 + 8) + 48 * a2 + 44) = a3; ++v3; } while ( v3 < (this[79] - this[78]) >> 3 ); } return 1; } //----- (00464F50) -------------------------------------------------------- unsigned int __thiscall sub_464F50(_DWORD *this) { unsigned int result; // eax unsigned int v2; // edx int v3; // esi result = 0; v2 = (this[79] - this[78]) >> 3; if ( !v2 ) return -1; v3 = this[78]; while ( !*(_DWORD *)v3 || !*(_BYTE *)(*(_DWORD *)v3 + 4) ) { ++result; v3 += 8; if ( result >= v2 ) return -1; } return result; } //----- (00464F90) -------------------------------------------------------- char __thiscall sub_464F90(_DWORD *this, int a2) { int v2; // eax unsigned int v3; // edx int v4; // eax int v5; // eax v2 = (this[79] - this[78]) >> 3; if ( a2 >= v2 && a2 >= 0 ) return 0; v3 = 0; if ( v2 ) { do { v4 = *(_DWORD *)(this[78] + 8 * v3); if ( v4 ) *(_BYTE *)(v4 + 4) = 0; ++v3; } while ( v3 < (this[79] - this[78]) >> 3 ); } if ( a2 < 0 ) return 0; v5 = *(_DWORD *)(this[78] + 8 * a2); if ( !v5 ) return 0; *(_BYTE *)(v5 + 4) = 1; return 1; } //----- (004650C0) -------------------------------------------------------- _DWORD *__thiscall sub_4650C0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *result; // eax int v4; // esi if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; v4 = *(_DWORD *)(this[78] + 8 * a2); if ( a3 >= (*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48 ) return 0; result = (_DWORD *)(*(_DWORD *)(v4 + 8) + 48 * a3); if ( result[5] >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (00465130) -------------------------------------------------------- int __thiscall sub_465130(_DWORD *this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ebx int v4; // edi int result; // eax unsigned int v6; // ecx unsigned int v7; // edx int v8; // edi int v9; // ebx unsigned int v10; // esi unsigned int v11; // eax _DWORD *v12; // ecx int v13; // ecx int v14; // ecx _DWORD *v15; // [esp+14h] [ebp-14h] int v16; // [esp+18h] [ebp-10h] unsigned int v17; // [esp+1Ch] [ebp-Ch] _DWORD *v18; // [esp+20h] [ebp-8h] int v19; // [esp+24h] [ebp-4h] v1 = this; v2 = this[74]; v3 = 0; v15 = this; if ( (this[75] - v2) >> 2 ) { do { v4 = *(_DWORD *)(v2 + 4 * v3); if ( v4 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); } v2 = v1[74]; ++v3; } while ( v3 < (v1[75] - v2) >> 2 ); } result = v1[78]; v6 = v1[86]; v7 = 0; v17 = v6; while ( v6 < (v1[79] - result) >> 3 ) { v8 = *(_DWORD *)(result + 8 * v6); if ( v8 ) { result = v1[74]; if ( v7 >= (v1[75] - result) >> 2 ) return result; v9 = *(_DWORD *)(result + 4 * v7); v16 = v7 + 1; if ( !v9 ) return result; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 256))(v9, 1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 240))(v9, 1); if ( *((_BYTE *)v1 + 348) ) *(_BYTE *)(v9 + 380) = *(_BYTE *)(v8 + 4); else *(_BYTE *)(v9 + 380) = 0; v10 = 0; v11 = (*(_DWORD *)(v8 + 12) - *(_DWORD *)(v8 + 8)) / 48; if ( v11 ) { v19 = 0; if ( v11 <= 0 ) { v18 = 0; goto LABEL_18; } do { v12 = (_DWORD *)(v19 + *(_DWORD *)(v8 + 8)); if ( v12[5] >= 0x10u ) v12 = (_DWORD *)*v12; v18 = v12; LABEL_18: if ( v10 < (*(_DWORD *)(v9 + 336) - *(_DWORD *)(v9 + 332)) >> 2 ) { if ( v10 < v11 ) (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int))(**(_DWORD **)(*(_DWORD *)(v9 + 332) + 4 * v10) + 464))( *(_DWORD *)(v19 + *(_DWORD *)(v8 + 8) + 32), *(_DWORD *)(v19 + *(_DWORD *)(v8 + 8) + 36), *(_DWORD *)(v19 + *(_DWORD *)(v8 + 8) + 40), 255); v13 = *(_DWORD *)(v8 + 8); if ( v10 < (*(_DWORD *)(v8 + 12) - v13) / 48 ) { v14 = *(_DWORD *)(v13 + v19 + 44); if ( v10 < (*(_DWORD *)(v9 + 336) - *(_DWORD *)(v9 + 332)) >> 2 ) (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(*(_DWORD *)(v9 + 332) + 4 * v10) + 488))( *(_DWORD *)(*(_DWORD *)(v9 + 332) + 4 * v10), v14); } if ( v10 < (*(_DWORD *)(v9 + 336) - *(_DWORD *)(v9 + 332)) >> 2 ) (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)(*(_DWORD *)(v9 + 332) + 4 * v10) + 472))(v18); } v19 += 48; ++v10; v11 = (*(_DWORD *)(v8 + 12) - *(_DWORD *)(v8 + 8)) / 48; } while ( v10 < v11 ); } v1 = v15; v7 = v16; v6 = v17; } result = v1[78]; v17 = ++v6; } return result; } //----- (00465380) -------------------------------------------------------- int __thiscall sub_465380(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // eax int v5; // edi unsigned int v6; // ecx int v7; // eax int v8; // edi int v9; // ebx int v10; // eax char v11; // al volatile LONG *v12; // eax v2 = this; result = (this[75] - this[74]) >> 2; if ( a2 < result ) { v4 = this[78]; v5 = (this[79] - v4) >> 3; v6 = 0; if ( v5 ) { do { v7 = *(_DWORD *)(v4 + 8 * v6); if ( v7 ) *(_BYTE *)(v7 + 4) = 0; v4 = v2[78]; ++v6; } while ( v6 < (v2[79] - v4) >> 3 ); } result = v2[78]; v8 = a2 + v2[86]; if ( v8 < (v2[79] - result) >> 3 ) { *(_BYTE *)(*(_DWORD *)(result + 8 * v8) + 4) = 1; v9 = v2[8]; if ( v9 ) { v10 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v2[8]); if ( v10 ) { while ( (_UNKNOWN *)v10 != &unk_BA6A8C ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_11; } v11 = 1; } else { LABEL_11: v11 = 0; } v12 = (volatile LONG *)(v11 != 0 ? v9 : 0); if ( v12 ) sub_8F2C30(v12, 5, v2[88], v8); } result = sub_465130(v2); } } return result; } //----- (00465460) -------------------------------------------------------- int __thiscall sub_465460(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // eax int v5; // edi unsigned int v6; // ecx int v7; // eax int v8; // edi int v9; // ebx int v10; // eax char v11; // al volatile LONG *v12; // eax v2 = this; result = (this[75] - this[74]) >> 2; if ( a2 < result ) { v4 = this[78]; v5 = (this[79] - v4) >> 3; v6 = 0; if ( v5 ) { do { v7 = *(_DWORD *)(v4 + 8 * v6); if ( v7 ) *(_BYTE *)(v7 + 4) = 0; v4 = v2[78]; ++v6; } while ( v6 < (v2[79] - v4) >> 3 ); } result = v2[78]; v8 = a2 + v2[86]; if ( v8 < (v2[79] - result) >> 3 ) { *(_BYTE *)(*(_DWORD *)(result + 8 * v8) + 4) = 1; v9 = v2[8]; if ( v9 ) { v10 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 4))(v2[8]); if ( v10 ) { while ( (_UNKNOWN *)v10 != &unk_BA6A8C ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_11; } v11 = 1; } else { LABEL_11: v11 = 0; } v12 = (volatile LONG *)(v11 != 0 ? v9 : 0); if ( v12 ) sub_8F2C30(v12, 5, v2[89], v8); } result = sub_465130(v2); } } return result; } //----- (004657C0) -------------------------------------------------------- int __thiscall sub_4657C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax v3 = this; result = (*(int (**)(void))(*this + 244))(); if ( (_BYTE)result ) { if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_465460(v3, a3); } else { result = sub_465380(v3, a3); } } return result; } //----- (00465800) -------------------------------------------------------- _DWORD *__thiscall sub_465800(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx v1 = this; sub_907A90(this); *v1 = &ColumnBut::`vftable'; v1[58] = &ColumnBut::`vftable'; v1[83] = 0; v1[84] = 0; v1[85] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v2 = v1 + 91; *v2 = 0; v2[1] = 0; v2[2] = 0; *((_BYTE *)v1 + 380) = 0; v1[96] = -1; sub_74E360((const void **)v1 + 91, (char *)0x3C); return v1; } // 9B4BEC: using guessed type void *ColumnBut::`vftable'; // 9B4C0C: using guessed type void *ColumnBut::`vftable'; //----- (004658B0) -------------------------------------------------------- LONG __thiscall sub_4658B0(void **this) { void **v1; // esi v1 = this; *this = &ColumnBut::`vftable'; this[58] = &ColumnBut::`vftable'; if ( this[91] ) operator delete(this[91]); v1[91] = 0; v1[92] = 0; v1[93] = 0; if ( v1[87] ) operator delete(v1[87]); v1[87] = 0; v1[88] = 0; v1[89] = 0; if ( v1[83] ) operator delete(v1[83]); v1[83] = 0; v1[84] = 0; v1[85] = 0; return sub_907B00(v1); } // 9B4BEC: using guessed type void *ColumnBut::`vftable'; // 9B4C0C: using guessed type void *ColumnBut::`vftable'; //----- (00465940) -------------------------------------------------------- volatile LONG *__cdecl sub_465940(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x184u); v10 = v6; v11 = 0; if ( v6 ) v7 = sub_465800(v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 580))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (00465AA0) -------------------------------------------------------- char __thiscall sub_465AA0(_DWORD *this, int a2, void *a3) { if ( a2 >= (unsigned int)((this[3] - this[2]) / 48) ) return 0; if ( a3 ) sub_4018E0((_DWORD *)(this[2] + 48 * a2), a3, strlen((const char *)a3)); return 1; } //----- (00465B10) -------------------------------------------------------- char __thiscall sub_465B10(volatile LONG **this, int a2, int a3, int a4, float a5, int **a6, int a7, char a8) { volatile LONG **v8; // edi int **v9; // esi int v10; // ebx double v11; // st7 int v12; // eax int v13; // ecx signed int v14; // eax int v15; // edx unsigned int v16; // ebx int (__thiscall *v17)(volatile LONG **); // edx unsigned int v18; // eax float v19; // ebx int *v21; // ecx unsigned int v22; // eax int v23; // edi int v24; // esi int *v25; // eax volatile LONG *v26; // eax int v27; // edx int v28; // eax int v29; // ecx volatile LONG *v30; // esi int v31; // eax int v32; // eax unsigned int v33; // edx volatile LONG *v34; // ecx volatile LONG v35; // eax int v36; // eax volatile LONG **v37; // eax int v38; // esi int *v39; // eax unsigned int v40; // ecx int v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // ebx int *v44; // ebx volatile LONG *v45; // esi int v46; // ebx void *v47; // eax void **v48; // eax int v49; // ebx int v50; // ecx void **v51; // eax volatile LONG v52; // ebx int v53; // eax volatile LONG *v54; // eax int v55; // esi _BYTE *v56; // edx volatile LONG *v57; // ecx int v58; // ebx unsigned int v59; // eax unsigned int v60; // eax unsigned int v61; // ecx char *v62; // ecx _DWORD *v63; // eax _DWORD *v64; // ebx volatile LONG *v65; // ecx unsigned int v66; // eax unsigned int v67; // eax unsigned int v68; // ecx char *v69; // ecx float *v70; // eax int v71; // eax int v72; // edx int v73[5]; // [esp+10h] [ebp-3Ch] int v74; // [esp+24h] [ebp-28h] int v75; // [esp+28h] [ebp-24h] int v76; // [esp+2Ch] [ebp-20h] int *v77; // [esp+30h] [ebp-1Ch] volatile LONG *v78; // [esp+34h] [ebp-18h] volatile LONG *v79; // [esp+38h] [ebp-14h] volatile LONG **v80; // [esp+3Ch] [ebp-10h] int v81; // [esp+48h] [ebp-4h] unsigned int v82; // [esp+54h] [ebp+8h] int v83; // [esp+58h] [ebp+Ch] signed int v84; // [esp+5Ch] [ebp+10h] v8 = this; v80 = this; if ( !sub_8F43D0(this, a2, a3, a4, (_DWORD *)LODWORD(a5), 0, 0) ) return 0; v9 = a6; if ( !*((_BYTE *)a6 + 16) ) return 0; v10 = ((char *)a6[1] - (char *)*a6) >> 3; if ( v10 ) { v12 = **a6; v13 = *(_DWORD *)(v12 + 8); v11 = v13 == *(_DWORD *)(v12 + 12) ? -1.0 : (double)*(unsigned int *)(**(_DWORD **)(*(_DWORD *)v13 + 36) + 24); } else { v11 = -1.0; } a5 = v11; v14 = (signed int)a5; v15 = a7; v8[82] = (volatile LONG *)(v10 - 1); v16 = v14 + v15; v17 = (int (__thiscall *)(volatile LONG **))*((_DWORD *)*v8 + 37); v74 = v16; v18 = v17(v8) / v16; v8[83] = (volatile LONG *)v18; if ( !v18 ) return 0; v8[83] = (volatile LONG *)((*((int (__thiscall **)(volatile LONG **))*v8 + 37))(v8) / v16); v82 = ((*((int (__thiscall **)(volatile LONG **))*v8 + 37))(v8) - v16 * (unsigned int)v8[83]) >> 1; v83 = (int)v9[5]; v77 = v9[7]; sub_456260(v73); v19 = 0.0; v81 = 0; a7 = 0; if ( (signed int)v8[83] > 0 ) { while ( 1 ) { v21 = *v9; v22 = ((char *)v9[1] - (char *)*v9) >> 3; a5 = 0.0; v84 = 0; if ( v22 > 0 ) { while ( 1 ) { if ( v84 < (signed int)v22 ) { v23 = v21[2 * v84]; if ( v23 ) { v24 = 0; if ( v84 ) { if ( *(_DWORD *)v23 == 2 ) { v79 = (volatile LONG *)sub_421050(0); if ( v80[90] ) v79 = v80[90]; v28 = *(_DWORD *)(v23 + 8); v29 = *(_DWORD *)(v23 + 12); if ( v28 == v29 || (signed int)((v29 - v28) & 0xFFFFFFFC) <= 0 ) v78 = 0; else v78 = *(volatile LONG **)(**(_DWORD **)(*(_DWORD *)v28 + 36) + 24); if ( v28 != v29 && (signed int)((v29 - v28) & 0xFFFFFFFC) > 0 ) v24 = *(_DWORD *)(**(_DWORD **)(*(_DWORD *)v28 + 36) + 20); v30 = sub_90AEF0( (int)v77 + *(_DWORD *)(v23 + 56) + v83, (int)v77 + *(_DWORD *)(v23 + 60) + v83, v24, (int)v78, v79, (_DWORD *)LODWORD(v19), 0, 0, *(volatile LONG **)(v23 + 92), *(_BYTE *)(v23 + 88), (volatile LONG *)dword_AD01E8, (volatile LONG *)0x1E); (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 488))(v30, 5); (*(void (__thiscall **)(volatile LONG *, const char *))(*v30 + 472))(v30, "Column"); if ( a8 ) { v31 = *((_DWORD *)v30 + 72); if ( v31 ) *(_BYTE *)(v31 + 285) = 1; } v78 = v30; sub_5B3CF0((_DWORD *)(LODWORD(v19) + 332), &v78); } v32 = *(_DWORD *)(v23 + 48); if ( v32 ) { v33 = 0; v78 = 0; if ( v32 ) { do { v34 = *(volatile LONG **)(v23 + 44); v35 = *((_DWORD *)v34 + 1); while ( !*(_BYTE *)(v35 + 45) ) { if ( *(_DWORD *)(v35 + 12) >= v33 ) { v34 = (volatile LONG *)v35; v35 = *(_DWORD *)v35; } else { v35 = *(_DWORD *)(v35 + 8); } } v36 = *(_DWORD *)(v23 + 44); v79 = v34; if ( v34 == (volatile LONG *)v36 || v33 < *((_DWORD *)v34 + 3) ) { v76 = v36; v37 = (volatile LONG **)&v76; } else { v37 = &v79; } if ( *v37 != *(volatile LONG **)(v23 + 44) ) { v38 = (int)(*v37 + 4); v39 = sub_4F1D20((_DWORD *)(v23 + 24), v38); v79 = v39; if ( v39 == *(int **)(v23 + 28) ) goto LABEL_108; v40 = v39[7]; v41 = (int)(v39 + 3); if ( *(_DWORD *)(v41 + 20) >= 0x10u ) v41 = *(_DWORD *)v41; if ( sub_40C2F0((unsigned __int8 *)v38, 0, *(_DWORD *)(v38 + 16), (unsigned __int8 *)v41, v40) < 0 ) { LABEL_108: v75 = *(_DWORD *)(v23 + 28); v42 = (volatile LONG **)&v75; } else { v42 = &v79; } v43 = *v42; if ( *v42 != *(volatile LONG **)(v23 + 28) ) { switch ( *((_DWORD *)v43 + 10) ) { case 0: v44 = (int *)(v43 + 3); if ( (unsigned int)v44[5] < 0x10 ) v45 = sub_456820(v73, (int)v44, 0); else v45 = sub_456820(v73, *v44, 0); goto LABEL_69; case 2: v46 = (int)(v43 + 3); if ( *(_DWORD *)(v46 + 20) < 0x10u ) v47 = (void *)v46; else v47 = *(void **)v46; v48 = (void **)sub_456E70(v73, 0, v47, 0, 2); v45 = (volatile LONG *)v48; if ( *(_DWORD *)(v46 + 20) >= 0x10u ) v46 = *(_DWORD *)v46; sub_85AB50(v48, (char *)v46); goto LABEL_72; case 3: v45 = sub_5D6E20(v83 + *(_DWORD *)(v23 + 56), v83 + *(_DWORD *)(v23 + 60), SLODWORD(a5)); *((_DWORD *)v45 + 68) = dword_ACEC34; sub_5D5B70(v45, 0, 1); sub_5D5EA0((int)v45, v23, 0); v44 = (int *)(v43 + 3); LABEL_69: if ( (unsigned int)v44[5] >= 0x10 ) v44 = (int *)*v44; sub_85AB50((void **)v45, (char *)v44); goto LABEL_72; case 4: v49 = (int)(v43 + 3); if ( *(_DWORD *)(v49 + 20) < 0x10u ) v50 = v49; else v50 = *(_DWORD *)v49; v51 = (void **)sub_456760( v73, v50, (int)"-", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v45 = (volatile LONG *)v51; if ( *(_DWORD *)(v49 + 20) >= 0x10u ) v49 = *(_DWORD *)v49; sub_85AB50(v51, (char *)v49); v52 = *v45; v53 = sub_421050(0); (*(void (__thiscall **)(volatile LONG *, int))(v52 + 452))(v45, v53); LABEL_72: v79 = v45; sub_5B3CF0((_DWORD *)(LODWORD(a5) + 364), &v79); break; default: break; } } } v33 = (unsigned int)v78 + 1; v78 = (volatile LONG *)v33; } while ( v33 < *(_DWORD *)(v23 + 48) ); v19 = a5; } } } else if ( *(_DWORD *)v23 == 1 ) { v25 = *(int **)(v23 + 8); if ( v25 == *(int **)(v23 + 12) ) { v81 = -1; sub_4562E0(v73); return 0; } *(float *)&v26 = COERCE_FLOAT(sub_465940(v83, v83 + v82, *v25, (int)v80, 0, 1)); v27 = a7; v19 = *(float *)&v26; *((_DWORD *)v26 + 76) = 1; *((_DWORD *)v26 + 96) = v27; a5 = *(float *)&v26; *((_BYTE *)v26 + 380) = 0; sub_455FF0(v73, (int)v26); sub_456000(v73, 0, 0); sub_456380(v73, *(_DWORD *)(v23 + 4)); } } } v21 = *a6; v22 = ((char *)a6[1] - (char *)*a6) >> 3; if ( ++v84 >= v22 ) { v8 = v80; break; } } } v54 = v8[75]; v55 = (int)(v8 + 74); if ( &a5 >= (float *)v54 || (v56 = *(_BYTE **)v55, *(_DWORD *)v55 > (unsigned int)&a5) ) { v65 = v8[76]; if ( v54 == v65 ) { v66 = ((signed int)v54 - *(_DWORD *)v55) >> 2; if ( v66 > 0x3FFFFFFE ) LABEL_105: std::_Xlength_error("vector too long"); v67 = v66 + 1; v68 = ((signed int)v65 - *(_DWORD *)v55) >> 2; if ( v67 > v68 ) { if ( 0x3FFFFFFF - (v68 >> 1) >= v68 ) v69 = (char *)((v68 >> 1) + v68); else v69 = 0; if ( (unsigned int)v69 < v67 ) v69 = (char *)v67; sub_74E360((const void **)v55, v69); v8 = v80; } } v70 = *(float **)(v55 + 4); if ( v70 ) *v70 = v19; } else { v57 = v8[76]; v58 = ((char *)&a5 - v56) >> 2; if ( v54 == v57 ) { v59 = ((char *)v54 - v56) >> 2; if ( v59 > 0x3FFFFFFE ) goto LABEL_105; v60 = v59 + 1; v61 = ((char *)v57 - v56) >> 2; if ( v60 > v61 ) { if ( 0x3FFFFFFF - (v61 >> 1) >= v61 ) v62 = (char *)((v61 >> 1) + v61); else v62 = 0; if ( (unsigned int)v62 < v60 ) v62 = (char *)v60; sub_74E360((const void **)v55, v62); v8 = v80; } } v63 = *(_DWORD **)(v55 + 4); v64 = (_DWORD *)(*(_DWORD *)v55 + 4 * v58); if ( v63 ) *v63 = *v64; } v71 = a7; v72 = v74; *(_DWORD *)(v55 + 4) += 4; v82 += v72; a7 = v71 + 1; if ( v71 + 1 >= (signed int)v8[83] ) break; v9 = a6; v19 = 0.0; } } v81 = -1; sub_4562E0(v73); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (004661A0) -------------------------------------------------------- char __thiscall sub_4661A0(_DWORD *this, int a2, int a3, void *a4) { if ( a2 >= (unsigned int)((this[79] - this[78]) >> 3) ) return 0; sub_465AA0(*(_DWORD **)(this[78] + 8 * a2), a3, a4); return 1; } //----- (004661E0) -------------------------------------------------------- float *__thiscall sub_4661E0(float *this) { float *v1; // esi v1 = this; sub_8F3C20(this); *(_DWORD *)v1 = &SlideListWin::`vftable'; *((_DWORD *)v1 + 58) = &SlideListWin::`vftable'; v1[74] = 0.0; v1[75] = 0.0; v1[76] = 0.0; v1[78] = 0.0; v1[79] = 0.0; v1[80] = 0.0; v1[85] = 0.0; v1[82] = 0.0; v1[83] = 0.0; v1[84] = 0.0; v1[86] = 0.0; v1[90] = 0.0; v1[88] = -6.8056469e38/*NaN*/; v1[89] = -6.8056469e38/*NaN*/; *((_BYTE *)v1 + 348) = 1; return v1; } // 9B4E74: using guessed type void *SlideListWin::`vftable'; // 9B4E94: using guessed type void *SlideListWin::`vftable'; //----- (00466260) -------------------------------------------------------- LONG __thiscall sub_466260(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; *this = &SlideListWin::`vftable'; this[58] = &SlideListWin::`vftable'; v2 = this[78]; if ( v2 ) { ((void (__cdecl *)(int, _DWORD, _DWORD *, _DWORD *))loc_40ACF0)(v2, this[79], this + 81, this); operator delete((void *)v1[78]); } v1[78] = 0; v1[79] = 0; v1[80] = 0; if ( v1[74] ) operator delete((void *)v1[74]); v1[74] = 0; v1[75] = 0; v1[76] = 0; return sub_8F3CC0(v1); } // 9B4E74: using guessed type void *SlideListWin::`vftable'; // 9B4E94: using guessed type void *SlideListWin::`vftable'; //----- (00466330) -------------------------------------------------------- volatile LONG *__cdecl sub_466330(int a1, int a2, int a3, float a4, int **a5, int a6, char a7) { void *v7; // eax volatile LONG *v8; // esi void (__thiscall ***v9)(void *, signed int); // edi volatile LONG *result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x16Cu); v11 = v7; v12 = 0; if ( v7 ) v8 = (volatile LONG *)sub_4661E0((float *)v7); else v8 = 0; if ( v8 ) InterlockedIncrement(v8 + 1); v12 = 1; sub_403790(&unk_BA6B10, (int)v8); if ( sub_465B10((volatile LONG **)v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); } result = 0; } return result; } //----- (00466480) -------------------------------------------------------- float *__cdecl sub_466480(int a1, int a2, int a3, float a4, int a5, int **a6, int a7, char a8) { float *v8; // eax float *v9; // esi char v10; // ST18_1 int v11; // ST14_4 void (__thiscall ***v12)(_DWORD, signed int); // edi float *result; // eax v8 = (float *)operator new(0x16Cu); if ( v8 ) v9 = sub_4661E0(v8); else v9 = 0; if ( v9 ) InterlockedIncrement((volatile LONG *)v9 + 1); sub_403790(&unk_BA6B10, (int)v9); v10 = a8; v11 = a7; *((_DWORD *)v9 + 90) = a5; if ( sub_465B10((volatile LONG **)v9, a1, a2, a3, a4, a6, v11, v10) ) { (*(void (__thiscall **)(float *))(*(_DWORD *)v9 + 356))(v9); if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &a5, v9); if ( a5 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))a5; if ( !InterlockedDecrement((volatile LONG *)(a5 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); result = 0; } return result; } //----- (004665D0) -------------------------------------------------------- char __thiscall sub_4665D0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v4; // eax int v5; // ecx int v6; // eax v2 = this; if ( a2 >= (this[79] - this[78]) >> 3 ) return 0; v4 = this[78]; v5 = 0; if ( v4 != v2[79] ) { while ( v5 != a2 ) { v4 += 8; ++v5; if ( v4 == v2[79] ) goto LABEL_8; } ((void (__cdecl *)(int, _DWORD, int, unsigned int))loc_40AC30)(v4 + 8, v2[79], v4, a2); ((void (__cdecl *)(int, _DWORD, _DWORD *, unsigned int))loc_40ACF0)(v2[79] - 8, v2[79], v2 + 81, a2); v2[79] -= 8; } LABEL_8: v6 = ((v2[79] - v2[78]) >> 3) - v2[83] + 1; v2[84] = v6; if ( v6 <= 0 ) v2[84] = 0; return 1; } //----- (00466680) -------------------------------------------------------- char __thiscall sub_466680(_DWORD *this, volatile LONG *a2) { int v3; // ebx int v4; // eax _DWORD *v5; // esi int v6; // ecx _DWORD *v7; // eax _DWORD *v8; // eax int v9; // eax int v10; // edi int v11; // eax _DWORD *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi unsigned int v15; // edi signed int v16; // ebx _DWORD **v17; // ecx _DWORD *v18; // eax int v19; // ecx unsigned int v20; // edx _DWORD *v21; // eax bool v22; // cf _DWORD *v23; // eax int v24; // eax int v25; // edi int v26; // eax _DWORD *v27; // eax volatile LONG **v28; // eax unsigned int v29; // ebx volatile LONG **v30; // edi _DWORD *v31; // eax volatile LONG **v32; // eax volatile LONG **v33; // edi int v34; // ecx unsigned int v35; // edx unsigned int v36; // edx volatile LONG **v37; // [esp+10h] [ebp-30h] int v38; // [esp+14h] [ebp-2Ch] int v39; // [esp+18h] [ebp-28h] int v40; // [esp+1Ch] [ebp-24h] int v41; // [esp+20h] [ebp-20h] _DWORD *v42; // [esp+24h] [ebp-1Ch] volatile LONG **v43; // [esp+28h] [ebp-18h] int v44; // [esp+2Ch] [ebp-14h] volatile LONG *v45; // [esp+30h] [ebp-10h] int v46; // [esp+3Ch] [ebp-4h] v42 = this; if ( *((_BYTE *)this + 16) ) return 0; v3 = 0; v4 = (this[1] - *this) >> 3; v44 = 0; if ( v4 ) { do { if ( v3 < (this[1] - *this) >> 3 ) v5 = *(_DWORD **)(*this + 8 * v3); else v5 = 0; v6 = v5[1]; if ( !v6 || !((v5[19] - v5[18]) / 28) ) return 0; if ( v3 ) { if ( *v5 != 2 ) return 0; v21 = (_DWORD *)v5[18]; v22 = v21[5] < 0x10u; v45 = 0; if ( !v22 ) v21 = (_DWORD *)*v21; v23 = (_DWORD *)(*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v6 + 72))(v21); if ( v23 ) { v24 = sub_85C050(v23, 8); v25 = v24; if ( v24 ) { InterlockedIncrement((volatile LONG *)(v24 + 4)); v26 = **(_DWORD **)(v25 + 40); v45 = (volatile LONG *)(v26 ? *(_DWORD *)(v26 + 4) : 0); if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); } } v27 = (_DWORD *)v5[18]; if ( v27[5] >= 0x10u ) v27 = (_DWORD *)*v27; v28 = sub_8FB140(v5[1], (int)v27, (int)&v38, (int)&v39, v45); v43 = v28; if ( v28 ) InterlockedIncrement((volatile LONG *)v28 + 1); v29 = 1; v46 = 1; sub_4E7210(v5 + 2, (char *)&v43); v30 = v43; v46 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)v43 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v30)(v30, 1); v5[14] = v38 - v41; v5[15] = v39 - v40; if ( (unsigned int)((v5[19] - v5[18]) / 28) > 1 ) { v43 = (volatile LONG **)28; do { v31 = (volatile LONG **)((char *)v43 + v5[18]); if ( v31[5] >= 0x10u ) v31 = (_DWORD *)*v31; v32 = sub_8FB140(v5[1], (int)v31, (int)&v38, (int)&v39, v45); v37 = v32; if ( v32 ) InterlockedIncrement((volatile LONG *)v32 + 1); v46 = 2; sub_4E7210(v5 + 2, (char *)&v37); v33 = v37; v46 = -1; if ( v37 && !InterlockedDecrement((volatile LONG *)v37 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v33)(v33, 1); v34 = v5[19] - v5[18]; v43 += 7; v35 = (signed int)(v34 + ((unsigned __int64)(-1840700269i64 * v34) >> 32)) >> 4; ++v29; } while ( v29 < v35 + (v35 >> 31) ); } } else { if ( *v5 != 1 ) return 0; if ( !a2 ) { v7 = (_DWORD *)v5[18]; if ( v7[5] >= 0x10u ) v7 = (_DWORD *)*v7; v8 = (_DWORD *)(*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v6 + 72))(v7); if ( v8 ) { v9 = sub_85C050(v8, 8); v10 = v9; v37 = (volatile LONG **)v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = **(_DWORD **)(v10 + 40); if ( v11 ) a2 = *(volatile LONG **)(v11 + 4); else a2 = 0; } sub_410C00(&v37); } } v12 = (_DWORD *)v5[18]; if ( v12[5] >= 0x10u ) v12 = (_DWORD *)*v12; v13 = sub_8FB140(v5[1], (int)v12, (int)&v41, (int)&v40, a2); v43 = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)v13 + 1); v46 = 0; sub_4E7210(v5 + 2, (char *)&v43); v14 = v43; v46 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)v43 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v14)(v14, 1); v5[14] = v41; v5[15] = v40; v15 = 1; if ( (unsigned int)((v5[19] - v5[18]) / 28) <= 1 ) goto LABEL_63; v16 = 28; do { v17 = (_DWORD **)v5[2]; if ( v17 != (_DWORD **)v5[3] ) { v18 = (_DWORD *)(v16 + v5[18]); if ( v18[5] >= 0x10u ) v18 = (_DWORD *)*v18; sub_8FB650(*v17, v5[1], (int)v18); } v19 = v5[19] - v5[18]; v20 = (signed int)(v19 + ((unsigned __int64)(-1840700269i64 * v19) >> 32)) >> 4; ++v15; v16 += 28; } while ( v15 < v20 + (v20 >> 31) ); } v3 = v44; LABEL_63: ++v3; v36 = (v42[1] - *v42) >> 3; v44 = v3; this = v42; } while ( v3 < v36 ); } *((_BYTE *)this + 16) = 1; return 1; } //----- (00466A50) -------------------------------------------------------- int __thiscall sub_466A50(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int v4; // edi int result; // eax v1 = this; v2 = this[79]; v3 = this[78]; if ( v3 != v2 ) { v4 = ((int (__cdecl *)(int, int, int))loc_40AC30)(v2, v2, v3); ((void (__cdecl *)(int, _DWORD, _DWORD *))loc_40ACF0)(v4, v1[79], v1 + 81); v1[79] = v4; } result = sub_465130(v1); v1[84] = 0; return result; } //----- (00466AF0) -------------------------------------------------------- int *__thiscall sub_466AF0(_DWORD *this, int a2, char a3, char a4) { _DWORD *v4; // esi int *v5; // eax int *v6; // ecx int *result; // eax int v8; // [esp-8h] [ebp-Ch] v4 = this; v5 = (int *)this[79]; v6 = (int *)this[78]; v8 = ((char *)v5 - (char *)v6) >> 3; if ( a4 ) result = (int *)sub_4692A0(v6, v5, v8, a2); else result = (int *)sub_469390(v6, v5, v8, a2); if ( a3 ) result = sub_4675A0((int *)v4[78], (int *)v4[79]); return result; } //----- (00467000) -------------------------------------------------------- int __thiscall sub_467000(void *this) { int result; // eax if ( this ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)this + 8))(1); return result; } //----- (00467010) -------------------------------------------------------- void *__stdcall sub_467010(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x5555555 || (result = operator new(48 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00467070) -------------------------------------------------------- void *__thiscall sub_467070(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Ref_count_base::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B4BB0: using guessed type void *std::tr1::_Ref_count_base::`vftable'; //----- (00467110) -------------------------------------------------------- _DWORD *__thiscall sub_467110(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 45) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (00467170) -------------------------------------------------------- bool __thiscall sub_467170(int *this, int *a2, int *a3) { int v3; // ecx int v4; // esi bool result; // al int v6; // edi const char *v7; // ebx _DWORD *v8; // eax const char *v9; // esi _DWORD *v10; // eax double v11; // ST14_8 v3 = *this; v4 = *a2; if ( v3 >= (*(_DWORD *)(*a2 + 12) - *(_DWORD *)(*a2 + 8)) / 48 ) return 1; v6 = *a3; result = 0; if ( v3 < (*(_DWORD *)(*a3 + 12) - *(_DWORD *)(*a3 + 8)) / 48 ) { if ( v3 < (unsigned int)((*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48) ) { v8 = (_DWORD *)(*(_DWORD *)(v4 + 8) + 48 * v3); v7 = (const char *)(v8[5] < 0x10u ? *(_DWORD *)(v4 + 8) + 48 * v3 : *v8); } else { v7 = 0; } if ( v3 < (unsigned int)((*(_DWORD *)(v6 + 12) - *(_DWORD *)(v6 + 8)) / 48) ) { v10 = (_DWORD *)(*(_DWORD *)(v6 + 8) + 48 * v3); v9 = (const char *)(v10[5] < 0x10u ? *(_DWORD *)(v6 + 8) + 48 * v3 : *v10); } else { v9 = 0; } v11 = atof(v7); if ( atof(v9) > v11 ) result = 1; } return result; } //----- (00467270) -------------------------------------------------------- bool __thiscall sub_467270(int *this, int *a2, int *a3) { int v3; // ecx int v4; // edi bool result; // al int v6; // esi const char *v7; // esi int v8; // eax int v9; // eax int v10; // kr00_4 v3 = *this; v4 = *a2; if ( v3 >= (*(_DWORD *)(*a2 + 12) - *(_DWORD *)(*a2 + 8)) / 48 ) return 1; v6 = *a3; if ( v3 >= (*(_DWORD *)(*a3 + 12) - *(_DWORD *)(*a3 + 8)) / 48 ) return 0; if ( v3 < (unsigned int)((*(_DWORD *)(v6 + 12) - *(_DWORD *)(v6 + 8)) / 48) ) { v8 = *(_DWORD *)(v6 + 8) + 48 * v3; if ( *(_DWORD *)(v8 + 20) < 0x10u ) v7 = (const char *)(*(_DWORD *)(v6 + 8) + 48 * v3); else v7 = *(const char **)v8; } else { v7 = 0; } if ( v3 < (unsigned int)((*(_DWORD *)(v4 + 12) - *(_DWORD *)(v4 + 8)) / 48) ) { v9 = *(_DWORD *)(v4 + 8) + 48 * v3; if ( *(_DWORD *)(v9 + 20) >= 0x10u ) v9 = *(_DWORD *)v9; } else { v9 = 0; } v10 = strcmp((const char *)v9, v7); if ( v10 ) result = -(v10 < 0) - ((v10 < 0) - 1) < 0; else result = 0; return result; } //----- (004673D0) -------------------------------------------------------- char sub_4673D0(int *a1, int *a2, int *a3, ...) { int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax va_list va; // [esp+1Ch] [ebp+14h] va_start(va, a3); if ( sub_467170((int *)va, a2, a1) ) { v3 = a2[1]; a2[1] = a1[1]; a1[1] = v3; v4 = *a2; *a2 = *a1; *a1 = v4; } if ( sub_467170((int *)va, a3, a2) ) { v5 = a3[1]; a3[1] = a2[1]; a2[1] = v5; v6 = *a3; *a3 = *a2; *a2 = v6; } LOBYTE(v7) = sub_467170((int *)va, a2, a1); if ( (_BYTE)v7 ) { v8 = a2[1]; a2[1] = a1[1]; a1[1] = v8; v7 = *a2; *a2 = *a1; *a1 = v7; } return v7; } //----- (00467450) -------------------------------------------------------- char sub_467450(int *a1, int *a2, int *a3, ...) { int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax va_list va; // [esp+1Ch] [ebp+14h] va_start(va, a3); if ( sub_467270((int *)va, a2, a1) ) { v3 = a2[1]; a2[1] = a1[1]; a1[1] = v3; v4 = *a2; *a2 = *a1; *a1 = v4; } if ( sub_467270((int *)va, a3, a2) ) { v5 = a3[1]; a3[1] = a2[1]; a2[1] = v5; v6 = *a3; *a3 = *a2; *a2 = v6; } LOBYTE(v7) = sub_467270((int *)va, a2, a1); if ( (_BYTE)v7 ) { v8 = a2[1]; a2[1] = a1[1]; a1[1] = v8; v7 = *a2; *a2 = *a1; *a1 = v7; } return v7; } //----- (004674D0) -------------------------------------------------------- int __cdecl sub_4674D0(_DWORD *a1, int a2, char *a3) { _DWORD *v3; // edx char *v4; // ebx int v5; // edi int result; // eax int v7; // esi int v8; // edx int v9; // edx char *v10; // ecx char *v11; // esi int v12; // edx int v13; // edx int v14; // edx char *v15; // [esp+18h] [ebp+Ch] v3 = a1; v4 = a3; v5 = (a2 - (signed int)a1) >> 3; result = (a3 - (char *)a1) >> 3; v7 = v5; if ( v5 ) { do { v8 = result % v7; result = v7; v7 = v8; } while ( v8 ); v3 = a1; } if ( result < (a3 - (char *)a1) >> 3 && result > 0 ) { v9 = (int)&v3[2 * result]; v15 = (char *)v9; do { v10 = (char *)(v9 + 8 * v5); v11 = (char *)v9; if ( v10 == v4 ) v10 = (char *)a1; do { v12 = *((_DWORD *)v11 + 1); *((_DWORD *)v11 + 1) = *((_DWORD *)v10 + 1); *((_DWORD *)v10 + 1) = v12; v13 = *(_DWORD *)v11; *(_DWORD *)v11 = *(_DWORD *)v10; v4 = a3; *(_DWORD *)v10 = v13; v14 = (a3 - v10) >> 3; v11 = v10; if ( v5 >= v14 ) v10 = (char *)&a1[2 * (v5 - v14)]; else v10 += 8 * v5; } while ( v10 != v15 ); --result; v9 = (int)(v15 - 8); v15 -= 8; } while ( result > 0 ); } return result; } //----- (00467570) -------------------------------------------------------- void __thiscall sub_467570(void *this) { _DWORD *v1; // esi v1 = this; if ( *(_DWORD *)this ) operator delete(*(void **)this); *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (004675A0) -------------------------------------------------------- int *__cdecl sub_4675A0(int *a1, int *a2) { int *result; // eax int *i; // ecx int v4; // edx int v5; // edx result = a1; for ( i = a2; result != i; *i = v5 ) { i -= 2; if ( result == i ) break; v4 = result[1]; result[1] = i[1]; i[1] = v4; v5 = *result; *result = *i; result += 2; } return result; } //----- (004675E0) -------------------------------------------------------- char __cdecl sub_4675E0(int *a1, int *a2, int *a3, int a4) { int v4; // eax int v5; // eax int v6; // edi int v7; // ebx int *v8; // edx int *v9; // ST30_4 int *v11; // [esp+Ch] [ebp+8h] v4 = ((char *)a3 - (char *)a1) >> 3; if ( v4 <= 40 ) return sub_4673D0(a1, a2, a3, a4); v5 = (v4 + 1) / 8; v6 = 16 * v5; v7 = 8 * v5; v8 = &a1[4 * v5]; v9 = a1; v11 = &a1[2 * v5]; sub_4673D0(v9, v11, v8, a4); sub_4673D0(&a2[v7 / 0xFFFFFFFC], a2, &a2[v7 / 4u], a4); sub_4673D0(&a3[v6 / 0xFFFFFFFC], &a3[v7 / 0xFFFFFFFC], a3, a4); return sub_4673D0(v11, a2, &a3[v7 / 0xFFFFFFFC], a4); } //----- (00467680) -------------------------------------------------------- char __cdecl sub_467680(int *a1, int *a2, int *a3, int a4) { int v4; // eax int v5; // eax int v6; // edi int v7; // ebx int *v8; // edx int *v9; // ST30_4 int *v11; // [esp+Ch] [ebp+8h] v4 = ((char *)a3 - (char *)a1) >> 3; if ( v4 <= 40 ) return sub_467450(a1, a2, a3, a4); v5 = (v4 + 1) / 8; v6 = 16 * v5; v7 = 8 * v5; v8 = &a1[4 * v5]; v9 = a1; v11 = &a1[2 * v5]; sub_467450(v9, v11, v8, a4); sub_467450(&a2[v7 / 0xFFFFFFFC], a2, &a2[v7 / 4u], a4); sub_467450(&a3[v6 / 0xFFFFFFFC], &a3[v7 / 0xFFFFFFFC], a3, a4); return sub_467450(v11, a2, &a3[v7 / 0xFFFFFFFC], a4); } //----- (00467720) -------------------------------------------------------- void __cdecl sub_467720(int *a1, int *a2) { int *i; // edi int v3; // esi for ( i = a1; i != a2; ++i ) { v3 = *i; if ( *i && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } } //----- (00467760) -------------------------------------------------------- int **__cdecl sub_467760(int **a1, int *a2, int *a3, int a4) { int v4; // kr00_4 int *v5; // esi int *v6; // ebx int *v7; // eax int *v8; // edi int v9; // ecx int v10; // ecx bool v11; // zf int *v12; // ebx int v13; // eax int v14; // eax int v15; // ecx int v16; // ecx int v17; // ST1C_4 int v18; // ST1C_4 int *v19; // edx int v20; // ecx int v21; // ecx int v22; // edx int v23; // ecx int v24; // ecx int v25; // ecx int v26; // ecx int **result; // eax int *v28; // [esp+14h] [ebp-Ch] int *v29; // [esp+18h] [ebp-8h] int v30; // [esp+1Ch] [ebp-4h] v4 = ((char *)a3 - (char *)a2) >> 3; v5 = &a2[2 * (v4 / 2)]; sub_4675E0(a2, &a2[2 * (v4 / 2)], a3 - 2, a4); v6 = v5 + 2; v30 = (int)(v5 + 2); if ( a2 < v5 ) { do { v28 = v5 - 2; if ( sub_467170(&a4, v5 - 2, v5) ) break; if ( sub_467170(&a4, v5, v28) ) break; v5 -= 2; } while ( a2 < v28 ); } if ( v6 < a3 ) { do { if ( sub_467170(&a4, v6, v5) ) break; if ( sub_467170(&a4, v5, v6) ) break; v6 += 2; } while ( v6 < a3 ); v30 = (int)v6; } v7 = v5; v8 = v6; v29 = v5; while ( 1 ) { while ( 1 ) { if ( v8 < a3 ) { do { if ( !sub_467170(&a4, v5, v8) ) { if ( sub_467170(&a4, v8, v5) ) break; v9 = v6[1]; v6[1] = v8[1]; v8[1] = v9; v10 = *v6; *v6 = *v8; v6 += 2; *v8 = v10; } v8 += 2; } while ( v8 < a3 ); v7 = v29; v30 = (int)v6; } v11 = v7 == a2; if ( v7 > a2 ) { v12 = v7 - 2; do { if ( !sub_467170(&a4, v12, v5) ) { if ( sub_467170(&a4, v5, v12) ) break; v13 = *(v5 - 1); v5 -= 2; v5[1] = v12[1]; v12[1] = v13; v14 = *v5; *v5 = *v12; *v12 = v14; } v12 -= 2; v29 -= 2; } while ( a2 < v29 ); v7 = v29; v6 = (int *)v30; v11 = v29 == a2; } if ( v11 ) break; v7 -= 2; v29 = v7; if ( v8 == a3 ) { v5 -= 2; if ( v7 != v5 ) { v20 = v7[1]; v7[1] = v5[1]; v5[1] = v20; v21 = *v7; *v7 = *v5; *v5 = v21; } v22 = *(v6 - 1); v23 = v5[1]; v6 -= 2; v5[1] = v22; v6[1] = v23; v24 = *v5; *v5 = *v6; v30 = (int)v6; *v6 = v24; } else { v25 = v8[1]; v8[1] = v7[1]; v7[1] = v25; v26 = *v8; *v8 = *v7; *v7 = v26; v8 += 2; } } if ( v8 == a3 ) break; if ( v6 != v8 ) { v15 = v5[1]; v5[1] = v6[1]; v6[1] = v15; v16 = *v5; *v5 = *v6; *v6 = v16; } v17 = v5[1]; v5[1] = v8[1]; v8[1] = v17; v18 = *v5; *v5 = *v8; v19 = v8; v6 += 2; v5 += 2; v30 = (int)v6; v8 += 2; *v19 = v18; } result = a1; *a1 = v5; a1[1] = v6; return result; } //----- (00467980) -------------------------------------------------------- int **__cdecl sub_467980(int **a1, int *a2, int *a3, int a4) { int v4; // kr00_4 int *v5; // esi int *v6; // ebx int *v7; // eax int *v8; // edi int v9; // ecx int v10; // ecx bool v11; // zf int *v12; // ebx int v13; // eax int v14; // eax int v15; // ecx int v16; // ecx int v17; // ST1C_4 int v18; // ST1C_4 int *v19; // edx int v20; // ecx int v21; // ecx int v22; // edx int v23; // ecx int v24; // ecx int v25; // ecx int v26; // ecx int **result; // eax int *v28; // [esp+14h] [ebp-Ch] int *v29; // [esp+18h] [ebp-8h] int v30; // [esp+1Ch] [ebp-4h] v4 = ((char *)a3 - (char *)a2) >> 3; v5 = &a2[2 * (v4 / 2)]; sub_467680(a2, &a2[2 * (v4 / 2)], a3 - 2, a4); v6 = v5 + 2; v30 = (int)(v5 + 2); if ( a2 < v5 ) { do { v28 = v5 - 2; if ( sub_467270(&a4, v5 - 2, v5) ) break; if ( sub_467270(&a4, v5, v28) ) break; v5 -= 2; } while ( a2 < v28 ); } if ( v6 < a3 ) { do { if ( sub_467270(&a4, v6, v5) ) break; if ( sub_467270(&a4, v5, v6) ) break; v6 += 2; } while ( v6 < a3 ); v30 = (int)v6; } v7 = v5; v8 = v6; v29 = v5; while ( 1 ) { while ( 1 ) { if ( v8 < a3 ) { do { if ( !sub_467270(&a4, v5, v8) ) { if ( sub_467270(&a4, v8, v5) ) break; v9 = v6[1]; v6[1] = v8[1]; v8[1] = v9; v10 = *v6; *v6 = *v8; v6 += 2; *v8 = v10; } v8 += 2; } while ( v8 < a3 ); v7 = v29; v30 = (int)v6; } v11 = v7 == a2; if ( v7 > a2 ) { v12 = v7 - 2; do { if ( !sub_467270(&a4, v12, v5) ) { if ( sub_467270(&a4, v5, v12) ) break; v13 = *(v5 - 1); v5 -= 2; v5[1] = v12[1]; v12[1] = v13; v14 = *v5; *v5 = *v12; *v12 = v14; } v12 -= 2; v29 -= 2; } while ( a2 < v29 ); v7 = v29; v6 = (int *)v30; v11 = v29 == a2; } if ( v11 ) break; v7 -= 2; v29 = v7; if ( v8 == a3 ) { v5 -= 2; if ( v7 != v5 ) { v20 = v7[1]; v7[1] = v5[1]; v5[1] = v20; v21 = *v7; *v7 = *v5; *v5 = v21; } v22 = *(v6 - 1); v23 = v5[1]; v6 -= 2; v5[1] = v22; v6[1] = v23; v24 = *v5; *v5 = *v6; v30 = (int)v6; *v6 = v24; } else { v25 = v8[1]; v8[1] = v7[1]; v7[1] = v25; v26 = *v8; *v8 = *v7; *v7 = v26; v8 += 2; } } if ( v8 == a3 ) break; if ( v6 != v8 ) { v15 = v5[1]; v5[1] = v6[1]; v6[1] = v15; v16 = *v5; *v5 = *v6; *v6 = v16; } v17 = v5[1]; v5[1] = v8[1]; v8[1] = v17; v18 = *v5; *v5 = *v8; v19 = v8; v6 += 2; v5 += 2; v30 = (int)v6; v8 += 2; *v19 = v18; } result = a1; *a1 = v5; a1[1] = v6; return result; } //----- (00467E20) -------------------------------------------------------- void *__thiscall sub_467E20(void *this, char a2) { void *v2; // esi v2 = this; sub_4658B0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00467E50) -------------------------------------------------------- void __cdecl sub_467E50(int a1, int a2) { if ( *(_DWORD *)(a2 + 20) >= 0x10u ) operator delete(*(void **)a2); *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; } //----- (004680C0) -------------------------------------------------------- void __cdecl sub_4680C0(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 48 ) { if ( *(_DWORD *)(i + 20) >= 0x10u ) operator delete(*(void **)i); *(_DWORD *)(i + 20) = 15; *(_DWORD *)(i + 16) = 0; *(_BYTE *)i = 0; } } //----- (00468100) -------------------------------------------------------- int *__cdecl sub_468100(int *a1, int *a2, int *a3) { int *v3; // ecx int *result; // eax int v5; // edx int v6; // edx v3 = a1; for ( result = a3; v3 != a2; result += 2 ) { if ( result ) { *result = 0; result[1] = 0; if ( result != v3 ) { v5 = result[1]; result[1] = v3[1]; v3[1] = v5; v6 = *result; *result = *v3; *v3 = v6; } } v3 += 2; } return result; } //----- (004686B0) -------------------------------------------------------- void __cdecl sub_4686B0(int a1, unsigned int a2) { _DWORD *v2; // esi int v3; // edx int v4; // eax int v5; // ecx int v6; // edx int v10; // [esp+0h] [ebp-60h] void *v11; // [esp+10h] [ebp-50h] int v12; // [esp+14h] [ebp-4Ch] _DWORD *v13; // [esp+18h] [ebp-48h] void *v14; // [esp+1Ch] [ebp-44h] int v15; // [esp+2Ch] [ebp-34h] unsigned int v16; // [esp+30h] [ebp-30h] int v17; // [esp+38h] [ebp-28h] int v18; // [esp+3Ch] [ebp-24h] int v19; // [esp+40h] [ebp-20h] int v20; // [esp+44h] [ebp-1Ch] int v21; // [esp+48h] [ebp-18h] int *v22; // [esp+50h] [ebp-10h] int v23; // [esp+5Ch] [ebp-4h] v22 = &v10; v2 = (_DWORD *)a1; v12 = a1; v23 = 0; while ( 1 ) { v13 = v2; if ( a2 <= 0 ) break; v16 = 15; v15 = 0; LOBYTE(v14) = 0; v17 = 0; v20 = 255; v19 = 255; v18 = 255; v21 = 5; v11 = v2; LOBYTE(v23) = 2; if ( v2 ) { v2[5] = 15; v2[4] = 0; *(_BYTE *)v2 = 0; sub_4017F0((const void **)v2, (const void **)&v14, 0, (void *)0xFFFFFFFF); v3 = v18; v4 = v19; v2[7] = v17; v5 = v20; v2[8] = v3; v6 = v21; v2[9] = v4; v2[10] = v5; v2[11] = v6; } LOBYTE(v23) = 0; if ( v16 >= 0x10 ) operator delete(v14); --a2; v2 += 12; } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004687C0) -------------------------------------------------------- int __cdecl sub_4687C0(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi const void *v5; // edx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 8; do { sub_4017F0((const void **)v3, v4 - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = *(v4 - 1); *(_DWORD *)(v3 + 32) = *v4; *(_DWORD *)(v3 + 36) = v4[1]; *(_DWORD *)(v3 + 40) = v4[2]; v5 = v4[3]; v4 += 12; *(_DWORD *)(v3 + 44) = v5; v3 += 48; } while ( v4 - 8 != a2 ); return v3; } //----- (00468820) -------------------------------------------------------- int __cdecl sub_468820(const void **a1, const void **a2, int a3) { int v3; // esi const void **v4; // edi int v9; // [esp+0h] [ebp-24h] int v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v3 = a3; v4 = a1; v10 = a3; v12 = 0; while ( v4 != a2 ) { LOBYTE(v12) = 1; if ( v3 ) { *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, v4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = v4[7]; *(_DWORD *)(v3 + 32) = v4[8]; *(_DWORD *)(v3 + 36) = v4[9]; *(_DWORD *)(v3 + 40) = v4[10]; *(_DWORD *)(v3 + 44) = v4[11]; } v3 += 48; LOBYTE(v12) = 0; v4 += 12; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004688F0) -------------------------------------------------------- void __thiscall sub_4688F0(int **this) { int **v1; // esi v1 = this; if ( *this ) { sub_467720(*this, this[1]); operator delete(*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (00468940) -------------------------------------------------------- int *__thiscall sub_468940(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl void **v14; // eax _DWORD *i; // ecx _BYTE *v16; // eax int v17; // eax int *result; // eax void **v19; // [esp+10h] [ebp-8h] _DWORD *v20; // [esp+14h] [ebp-4h] v3 = (int *)a3; v20 = this; if ( *(_BYTE *)(a3 + 45) ) std::_Xout_of_range("invalid map/set iterator"); v19 = (void **)a3; sub_66FB80(&a3); if ( *(_BYTE *)(*v3 + 45) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; v7 = v20; v8 = v20[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v20[1] == v3 ) { if ( *(_BYTE *)(v4 + 45) ) { v9 = (_DWORD *)v6; } else { v9 = sub_5AB880((_DWORD *)v4); v7 = v20; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 45) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6689E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 45) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v20[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 44); *(_BYTE *)(v5 + 44) = *((_BYTE *)v3 + 44); *((_BYTE *)v3 + 44) = v13; LABEL_35: v14 = v19; if ( *((_BYTE *)v19 + 44) == 1 ) { for ( i = v20; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 44) != 1 ) break; v16 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v16 = *(_BYTE **)(v6 + 8); if ( !v16[44] ) { v16[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_467110(i, v6); v16 = *(_BYTE **)(v6 + 8); i = v20; } if ( v16[45] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 || *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) == 1 ) { *(_BYTE *)(*(_DWORD *)v16 + 44) = 1; v16[44] = 0; sub_747860(i, v16); v16 = *(_BYTE **)(v6 + 8); i = v20; } v16[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) = 1; sub_467110(i, v6); break; } } else { if ( !v16[44] ) { v16[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_747860(i, (_DWORD *)v6); v16 = *(_BYTE **)v6; i = v20; } if ( v16[45] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v16 + 44) == 1 ) { *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) = 1; v16[44] = 0; sub_467110(i, (int)v16); v16 = *(_BYTE **)v6; i = v20; } v16[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*(_DWORD *)v16 + 44) = 1; sub_747860(i, (_DWORD *)v6); break; } } v16[44] = 0; LABEL_53: v4 = v6; } v14 = v19; *(_BYTE *)(v4 + 44) = 1; } if ( (unsigned int)v14[9] >= 0x10 ) operator delete(v14[4]); v19[9] = (void *)15; v19[8] = 0; *((_BYTE *)v19 + 16) = 0; operator delete(v19); v17 = v20[2]; if ( v17 ) v20[2] = v17 - 1; result = a2; *a2 = a3; return result; } //----- (00468BC0) -------------------------------------------------------- void __stdcall sub_468BC0(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 45) ) { do { sub_468BC0(v2[2]); v2 = (void **)*v2; if ( (unsigned int)v1[9] >= 0x10 ) operator delete(v1[4]); v1[9] = (void *)15; v1[8] = 0; *((_BYTE *)v1 + 16) = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 45) ); } } //----- (00468E80) -------------------------------------------------------- void __thiscall sub_468E80(int *this) { int *v1; // esi v1 = this; if ( *this ) { sub_4680C0(*this, this[1]); operator delete((void *)*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (00468ED0) -------------------------------------------------------- char *__thiscall sub_468ED0(int **this, char *a2) { int **v2; // esi char *result; // eax int *v4; // eax int *v5; // ebx int *v6; // ST04_4 int *v7; // ST00_4 int *v8; // ecx int *v9; // eax int v10; // edi int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; result = a2; if ( (unsigned int)a2 > 0x1FFFFFFF ) std::_Xlength_error("vector too long"); if ( ((char *)this[2] - (char *)*this) >> 3 < (unsigned int)a2 ) { v4 = (int *)sub_4E6630(a2); v5 = v4; v6 = v2[1]; v7 = *v2; v12 = v4; v14 = 0; sub_468100(v7, v6, v4); v8 = v2[1]; v9 = *v2; v10 = ((char *)v2[1] - (char *)*v2) >> 3; v14 = -1; if ( v9 ) { ((void (__cdecl *)(int *, int *, int **, char *))loc_40ACF0)(v9, v8, v2 + 3, a2); operator delete(*v2); } result = (char *)&v5[2 * v10]; v2[2] = &v5[2 * (_DWORD)a2]; v2[1] = (int *)result; *v2 = v5; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00468FC0) -------------------------------------------------------- int *__thiscall sub_468FC0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 45) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 45) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 45); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_468940(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_468BC0(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (00469080) -------------------------------------------------------- void *__thiscall sub_469080(void *this, char a2) { void *v2; // esi v2 = this; sub_466260(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004690B0) -------------------------------------------------------- unsigned int __thiscall sub_4690B0(int *this, char *a2) { int *v2; // esi unsigned int result; // eax void *v4; // eax const void **v5; // ST04_4 const void **v6; // ST00_4 unsigned int v7; // edx int v8; // edi char *v9; // edx int v10; // [esp+0h] [ebp-24h] void *v11; // [esp+10h] [ebp-14h] int *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v12 = &v10; v2 = this; if ( (unsigned int)a2 > 0x5555555 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 48; if ( result < (unsigned int)a2 ) { v4 = sub_467010(a2); v5 = (const void **)v2[1]; v6 = (const void **)*v2; v11 = v4; v13 = 0; sub_468820(v6, v5, (int)v4); v7 = (signed int)((unsigned __int64)(715827883i64 * (v2[1] - *v2)) >> 32) >> 3; v8 = v7 + (v7 >> 31); if ( *v2 ) { sub_4680C0(*v2, v2[1]); operator delete((void *)*v2); } result = (unsigned int)v11; v9 = (char *)v11 + 48 * v8; v2[2] = (int)v11 + 48 * (_DWORD)a2; v2[1] = (int)v9; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004691C0) -------------------------------------------------------- char *__thiscall sub_4691C0(int this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 3; if ( 0x1FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 3; if ( (unsigned int)result > v4 ) { if ( 0x1FFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_468ED0((int **)this, v5); } return result; } //----- (00469220) -------------------------------------------------------- unsigned int __thiscall sub_469220(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (this[1] - *this) / 48; if ( 89478485 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 48; if ( v3 > result ) { if ( 89478485 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_4690B0(this, v5); } return result; } //----- (004692A0) -------------------------------------------------------- int __cdecl sub_4692A0(int *a1, int *a2, int a3, int a4) { int *v4; // ebx int *v5; // edi int result; // eax int v7; // esi int *v8; // [esp+Ch] [ebp-8h] int *v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; result = ((char *)a2 - (char *)a1) >> 3; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_467760(&v8, v4, v5, a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)(((char *)v8 - (char *)v4) & 0xFFFFFFF8) >= (signed int)(((char *)v5 - (char *)v9) & 0xFFFFFFF8) ) { sub_4692A0(v9, v5, v7, a4); v5 = v8; } else { sub_4692A0(v4, v8, v7, a4); v4 = v9; } result = ((char *)v5 - (char *)v4) >> 3; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = ((int (__cdecl *)(int *, int *, int, _DWORD))loc_468230)(v4, v5, a4, 0); } else { if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFF8) > 8 ) ((void (__cdecl *)(int *, int *, int, _DWORD, _DWORD))loc_468150)(v4, v5, a4, 0, 0); result = ((int (__cdecl *)(int *, int *, int))loc_468C20)(v4, v5, a4); } return result; } //----- (00469390) -------------------------------------------------------- int __cdecl sub_469390(int *a1, int *a2, int a3, int a4) { int *v4; // ebx int *v5; // edi int result; // eax int v7; // esi int *v8; // [esp+Ch] [ebp-8h] int *v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; result = ((char *)a2 - (char *)a1) >> 3; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_467980(&v8, v4, v5, a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)(((char *)v8 - (char *)v4) & 0xFFFFFFF8) >= (signed int)(((char *)v5 - (char *)v9) & 0xFFFFFFF8) ) { sub_469390(v9, v5, v7, a4); v5 = v8; } else { sub_469390(v4, v8, v7, a4); v4 = v9; } result = ((char *)v5 - (char *)v4) >> 3; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = ((int (__cdecl *)(int *, int *, int, _DWORD))loc_4684E0)(v4, v5, a4, 0); } else { if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFF8) > 8 ) ((void (__cdecl *)(int *, int *, int, _DWORD, _DWORD))loc_468400)(v4, v5, a4, 0, 0); result = ((int (__cdecl *)(int *, int *, int))loc_468D50)(v4, v5, a4); } return result; } //----- (00469480) -------------------------------------------------------- void **__thiscall sub_469480(void *this, int a2) { void **v2; // esi int v3; // eax v2 = (void **)this; v3 = *((_DWORD *)this + 2); if ( v3 ) { sub_4680C0(v3, *((_DWORD *)this + 3)); operator delete(v2[2]); } v2[2] = 0; v2[3] = 0; v2[4] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004694E0) -------------------------------------------------------- void __thiscall sub_4694E0(_DWORD *this) { int *v1; // esi int v2; // eax v1 = (int *)this[3]; if ( v1 ) { v2 = v1[2]; if ( v2 ) { sub_4680C0(v2, v1[3]); operator delete((void *)v1[2]); } v1[2] = 0; v1[3] = 0; v1[4] = 0; operator delete(v1); } } //----- (00469540) -------------------------------------------------------- char *__thiscall sub_469540(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi char *result; // eax int v4; // edi _DWORD *v5; // ecx int v6; // [esp-4h] [ebp-20h] v2 = this; result = (char *)this[1]; if ( a2 >= (unsigned int)result || *this > a2 ) { if ( result == (char *)this[2] ) result = sub_4691C0((int)this, 1); v5 = (_DWORD *)v2[1]; if ( v5 ) { v6 = a2; goto LABEL_11; } } else { v4 = (signed int)(a2 - *this) >> 3; if ( result == (char *)this[2] ) sub_4691C0((int)this, 1); v5 = (_DWORD *)v2[1]; result = (char *)(*v2 + 8 * v4); if ( v5 ) { v6 = *v2 + 8 * v4; LABEL_11: *v5 = 0; v5[1] = 0; result = (char *)((int (__stdcall *)(int))loc_467370)(v6); goto LABEL_12; } } LABEL_12: v2[1] += 8; return result; } //----- (004695F0) -------------------------------------------------------- int __thiscall sub_4695F0(int *this, unsigned int a2) { int *v2; // ebx unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // edi int v7; // esi int v8; // edi int result; // eax int v10; // edi v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_469220(v2, 1); v10 = v2[1]; result = 0; if ( v10 ) { *(_DWORD *)(v10 + 20) = 15; *(_DWORD *)(v10 + 16) = 0; *(_BYTE *)v10 = 0; sub_4017F0((const void **)v10, (const void **)a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v10 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(v10 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(v10 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(v10 + 40) = *(_DWORD *)(a2 + 40); result = *(_DWORD *)(a2 + 44); *(_DWORD *)(v10 + 44) = result; } } else { v4 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(a2 - *v2)) >> 32) >> 3; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_469220(v2, 1); v6 = 3 * v5; v7 = v2[1]; v8 = *v2 + 16 * v6; result = 0; if ( v7 ) { *(_DWORD *)(v7 + 20) = 15; *(_DWORD *)(v7 + 16) = 0; *(_BYTE *)v7 = 0; sub_4017F0((const void **)v7, (const void **)v8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v7 + 28) = *(_DWORD *)(v8 + 28); *(_DWORD *)(v7 + 32) = *(_DWORD *)(v8 + 32); *(_DWORD *)(v7 + 36) = *(_DWORD *)(v8 + 36); result = *(_DWORD *)(v8 + 40); *(_DWORD *)(v7 + 40) = result; *(_DWORD *)(v7 + 44) = *(_DWORD *)(v8 + 44); } } v2[1] += 48; return result; } //----- (00469710) -------------------------------------------------------- void __thiscall sub_469710(int *this, unsigned int a2) { int *v2; // esi const void **v3; // ebx int v4; // ecx int v5; // edi int v6; // edi v2 = this; v3 = (const void **)this[1]; v4 = this[1] - *this; if ( v4 / 48 <= a2 ) { if ( v4 / 48 < a2 ) { sub_469220(v2, a2 - v4 / 48); sub_4686B0(v2[1], a2 - (v2[1] - *v2) / 48); v2[1] += 48 * (a2 - (v2[1] - *v2) / 48); } } else { v5 = *v2 + 48 * a2; if ( (const void **)v5 != v3 ) { v6 = sub_4687C0(v3, v3, v5); sub_4680C0(v6, v2[1]); v2[1] = v6; } } } //----- (004697E0) -------------------------------------------------------- int *__thiscall sub_4697E0(_DWORD *this, int *a2) { _DWORD *v2; // edi unsigned int v3; // eax int v4; // esi int *v5; // ecx int *result; // eax int v7; // edx int v8; // edx int v9; // ecx int v10; // ecx v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *this > (unsigned int)a2 ) { if ( v3 == this[2] ) sub_4691C0((int)this, 1); result = (int *)v2[1]; if ( result ) { *result = 0; result[1] = 0; if ( result != a2 ) { v9 = result[1]; result[1] = a2[1]; a2[1] = v9; v10 = *result; *result = *a2; *a2 = v10; } } } else { v4 = ((signed int)a2 - *this) >> 3; if ( v3 == this[2] ) sub_4691C0((int)this, 1); v5 = (int *)(*v2 + 8 * v4); result = (int *)v2[1]; if ( result ) { *result = 0; result[1] = 0; if ( result != v5 ) { v7 = result[1]; result[1] = v5[1]; v5[1] = v7; v8 = *result; *result = *v5; *v5 = v8; v2[1] += 8; return result; } } } v2[1] += 8; return result; } //----- (00469890) -------------------------------------------------------- int __thiscall sub_469890(void *this, void *a2) { void *v2; // esi _DWORD *v3; // eax int v5; // [esp+0h] [ebp-20h] int *v6; // [esp+10h] [ebp-10h] int v7; // [esp+1Ch] [ebp-4h] v6 = &v5; v2 = this; v7 = 0; v3 = operator new(0x10u); if ( v3 ) { v3[1] = 1; v3[2] = 1; *v3 = &std::tr1::_Ref_count::`vftable'; v3[3] = a2; } else { v3 = 0; } return ((int (__thiscall *)(void *, void *, _DWORD *))loc_4670A0)(v2, a2, v3); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9B4BC4: using guessed type void *std::tr1::_Ref_count::`vftable'; //----- (00469930) -------------------------------------------------------- void __thiscall sub_469930(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST10_4 int v6; // ST0C_4 int *v7; // eax _DWORD *v8; // [esp+10h] [ebp-18h] _DWORD *v9; // [esp+14h] [ebp-14h] _DWORD *v10; // [esp+18h] [ebp-10h] int v11; // [esp+24h] [ebp-4h] v1 = this; v10 = this; v11 = 0; v2 = this[18]; if ( v2 ) { sub_40ACB0(v2, this[19]); operator delete((void *)v1[18]); } v1[18] = 0; v1[19] = 0; v1[20] = 0; v9 = v1 + 10; v3 = v1[11]; v4 = *(_DWORD *)v1[11]; LOBYTE(v11) = 2; sub_468FC0(v1 + 10, (int *)&v8, v4, v3); operator delete((void *)v1[11]); v8 = v1 + 6; v5 = v1[7]; v6 = *(_DWORD *)v1[7]; LOBYTE(v11) = 3; sub_4847E0(v1 + 6, (int *)&v9, v6, v5); operator delete((void *)v1[7]); v7 = (int *)v1[2]; v11 = -1; if ( v7 ) { sub_467720(v7, (int *)v1[3]); operator delete((void *)v1[2]); } v1[2] = 0; v1[3] = 0; v1[4] = 0; } //----- (00469A30) -------------------------------------------------------- _DWORD *__thiscall sub_469A30(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void **v5; // [esp+Ch] [ebp-30h] void **v6; // [esp+18h] [ebp-24h] _DWORD *v7; // [esp+24h] [ebp-18h] char *v8; // [esp+28h] [ebp-14h] char *v9; // [esp+2Ch] [ebp-10h] int v10; // [esp+38h] [ebp-4h] v1 = this; v7 = this; this[2] = 0; this[3] = 0; this[4] = 0; v10 = 0; this[8] = 0; v2 = operator new(0x30u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&v8); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v1[7] = v2; *v2 = v2; *(_DWORD *)(v1[7] + 4) = v1[7]; *(_DWORD *)(v1[7] + 8) = v1[7]; *(_BYTE *)(v1[7] + 44) = 1; *(_BYTE *)(v1[7] + 45) = 1; LOBYTE(v10) = 1; v1[12] = 0; v3 = operator new(0x30u); if ( !v3 ) { v9 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v9); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[11] = v3; *v3 = v3; *(_DWORD *)(v1[11] + 4) = v1[11]; *(_DWORD *)(v1[11] + 8) = v1[11]; *(_BYTE *)(v1[11] + 44) = 1; *(_BYTE *)(v1[11] + 45) = 1; v1[18] = 0; v1[19] = 0; v1[20] = 0; *v1 = 0; v1[1] = 0; *((_BYTE *)v1 + 88) = 0; v1[23] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00469B50) -------------------------------------------------------- void __thiscall sub_469B50(_DWORD *this) { void *v1; // esi v1 = (void *)this[3]; if ( v1 ) { sub_469930((_DWORD *)this[3]); operator delete(v1); } } //----- (00469B70) -------------------------------------------------------- int __thiscall sub_469B70(void *this, void *a2) { void *v2; // esi _DWORD *v3; // eax int v5; // [esp+0h] [ebp-20h] int *v6; // [esp+10h] [ebp-10h] int v7; // [esp+1Ch] [ebp-4h] v6 = &v5; v2 = this; v7 = 0; v3 = operator new(0x10u); if ( v3 ) { v3[1] = 1; v3[2] = 1; *v3 = &std::tr1::_Ref_count::`vftable'; v3[3] = a2; } else { v3 = 0; } return ((int (__thiscall *)(void *, void *, _DWORD *))loc_4670A0)(v2, a2, v3); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9B4BD8: using guessed type void *std::tr1::_Ref_count::`vftable'; //----- (00469C10) -------------------------------------------------------- float *__thiscall sub_469C10(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[109] = 0.0; *(_DWORD *)v1 = &SpeechBubbleWin::`vftable'; v1[110] = 0.0; *((_DWORD *)v1 + 58) = &SpeechBubbleWin::`vftable'; v1[86] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B51DC: using guessed type void *SpeechBubbleWin::`vftable'; // 9B51FC: using guessed type void *SpeechBubbleWin::`vftable'; //----- (00469C50) -------------------------------------------------------- LONG __thiscall sub_469C50(_DWORD *this) { *this = &SpeechBubbleWin::`vftable'; this[58] = &SpeechBubbleWin::`vftable'; return sub_8F10F0(this); } // 9B51DC: using guessed type void *SpeechBubbleWin::`vftable'; // 9B51FC: using guessed type void *SpeechBubbleWin::`vftable'; //----- (00469C70) -------------------------------------------------------- int __thiscall sub_469C70(_DWORD *this, unsigned int a2) { unsigned int v2; // eax _DWORD *v3; // esi unsigned int v4; // ecx int v5; // eax int v6; // ebx int v7; // edi int v8; // eax int v9; // eax int v10; // edi int v11; // eax int v12; // edi int v13; // eax int v14; // ebx int v15; // edi int v16; // eax int *v17; // ecx int v18; // ebx int v19; // edi int v20; // eax int v21; // edi int v22; // eax int v23; // ebx int v24; // edi int v25; // eax int v27; // [esp+14h] [ebp+8h] int v28; // [esp+14h] [ebp+8h] int v29; // [esp+14h] [ebp+8h] int v30; // [esp+14h] [ebp+8h] int v31; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; v4 = this[107]; if ( v4 > a2 ) v2 = v4; (*(void (__thiscall **)(_DWORD *, unsigned int))(*v3 + 468))(v3, v2); v5 = (*(int (__thiscall **)(_DWORD *))(*v3 + 460))(v3); v6 = v3[61]; v7 = v5; (*(void (__stdcall **)(int))(*(_DWORD *)v3[88] + 172))(v5 + v3[105] - v6); v27 = *(_DWORD *)v3[98]; v8 = (*(int (**)(void))(*(_DWORD *)v3[88] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v27 + 172))(v3[98], v8); v28 = *(_DWORD *)v3[99]; v9 = (*(int (**)(void))(*(_DWORD *)v3[88] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v28 + 172))(v3[99], v9); (*(void (__stdcall **)(int))(*(_DWORD *)v3[90] + 172))(v7 + v3[105] - v6); v10 = *(_DWORD *)v3[102]; v11 = (*(int (**)(void))(*(_DWORD *)v3[90] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v10 + 172))(v3[102], v11); v12 = *(_DWORD *)v3[103]; v13 = (*(int (**)(void))(*(_DWORD *)v3[90] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v12 + 172))(v3[103], v13); v14 = *(_DWORD *)v3[91]; v15 = v3[88]; v29 = (*(int (**)(void))(*(_DWORD *)v3[91] + 164))(); v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 164))(v15); (*(void (__thiscall **)(_DWORD, int))(v14 + 468))(v3[91], v16 - v29); v17 = (int *)v3[93]; v18 = *v17; v19 = v3[90]; v30 = (*(int (**)(void))(*v17 + 164))(); v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v19 + 164))(v19); (*(void (__thiscall **)(_DWORD, int))(v18 + 468))(v3[93], v20 - v30); v21 = *(_DWORD *)v3[94]; v22 = (*(int (**)(void))(*(_DWORD *)v3[88] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v21 + 172))(v3[94], v22); v23 = *(_DWORD *)v3[95]; v24 = v3[91]; v31 = (*(int (**)(void))(*(_DWORD *)v3[88] + 164))(); v25 = (*(int (__thiscall **)(int))(*(_DWORD *)v24 + 164))(v24); return (*(int (__thiscall **)(_DWORD, int))(v23 + 468))(v3[95], v31 - v25); } //----- (00469E70) -------------------------------------------------------- int __thiscall sub_469E70(_DWORD *this, unsigned int a2) { unsigned int v2; // eax _DWORD *v3; // esi unsigned int v4; // ecx int v5; // eax int v6; // ebx int v7; // edi int v8; // eax int v9; // eax int v10; // edi int v11; // eax int v12; // edi int v13; // eax int v14; // ebx int v15; // edi int v16; // eax int v17; // edi int v18; // eax int v19; // ebx int v20; // edi int v21; // eax int v22; // ebx int v23; // edi int v24; // eax int v26; // [esp+14h] [ebp+8h] int v27; // [esp+14h] [ebp+8h] int v28; // [esp+14h] [ebp+8h] int v29; // [esp+14h] [ebp+8h] int v30; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; v4 = this[108]; if ( v4 > a2 ) v2 = v4; (*(void (__thiscall **)(_DWORD *, unsigned int))(*v3 + 472))(v3, v2); v5 = (*(int (__thiscall **)(_DWORD *))(*v3 + 464))(v3); v6 = v3[62]; v7 = v5; (*(void (__stdcall **)(int))(*(_DWORD *)v3[89] + 176))(v5 + v3[106] - v6); v26 = *(_DWORD *)v3[100]; v8 = (*(int (**)(void))(*(_DWORD *)v3[89] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v26 + 176))(v3[100], v8); v27 = *(_DWORD *)v3[101]; v9 = (*(int (**)(void))(*(_DWORD *)v3[89] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v27 + 176))(v3[101], v9); (*(void (__stdcall **)(int))(*(_DWORD *)v3[90] + 176))(v7 + v3[106] - v6); v10 = *(_DWORD *)v3[102]; v11 = (*(int (**)(void))(*(_DWORD *)v3[90] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v10 + 176))(v3[102], v11); v12 = *(_DWORD *)v3[103]; v13 = (*(int (**)(void))(*(_DWORD *)v3[90] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v12 + 176))(v3[103], v13); v14 = *(_DWORD *)v3[92]; v15 = v3[89]; v28 = (*(int (**)(void))(*(_DWORD *)v3[92] + 168))(); v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 168))(v15); (*(void (__thiscall **)(_DWORD, int))(v14 + 472))(v3[92], v16 - v28); v17 = *(_DWORD *)v3[93]; v18 = (*(int (**)(void))(*(_DWORD *)v3[89] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v17 + 176))(v3[93], v18); v19 = *(_DWORD *)v3[94]; v20 = v3[90]; v29 = (*(int (**)(void))(*(_DWORD *)v3[94] + 168))(); v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v20 + 168))(v20); (*(void (__thiscall **)(_DWORD, int))(v19 + 472))(v3[94], v21 - v29); v22 = *(_DWORD *)v3[95]; v23 = v3[92]; v30 = (*(int (**)(void))(*(_DWORD *)v3[89] + 168))(); v24 = (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 168))(v23); return (*(int (__thiscall **)(_DWORD, int))(v22 + 472))(v3[95], v30 - v24); } //----- (0046A070) -------------------------------------------------------- int __thiscall sub_46A070(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[96] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[97] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[98] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[99] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[100] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[101] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[102] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[103] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[87] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[88] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[89] + 256))(1); return (*(int (__stdcall **)(signed int))(*v1[90] + 256))(1); } //----- (0046A150) -------------------------------------------------------- void __thiscall sub_46A150(float *this, float a2, float a3) { this[109] = a2; this[110] = a3; } //----- (0046A170) -------------------------------------------------------- void __userpurge sub_46A170(_DWORD **a1@, int a2@, int a3@, float a4, float a5) { int v5; // ST04_4 _DWORD **v6; // esi unsigned int v7; // edi int v8; // edi int v9; // edi int v10; // edi unsigned int v11; // edi int v12; // edi int v13; // edi int v14; // edi double v15; // [esp+8h] [ebp-Ch] double v16; // [esp+8h] [ebp-Ch] v5 = a3; v6 = a1; v15 = a4 + 50.0; if ( (double)((int (__stdcall *)(int))(*a1)[41])(v5) <= v15 || (double)((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) <= a5 + 50.0 ) { if ( (double)((int (__thiscall *)(_DWORD **, int))(*v6)[41])(v6, a2) <= v15 || (v7 = (unsigned int)((int (__thiscall *)(_DWORD **))(*v6)[116])(v6) >> 1, (double)(((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) - v7) >= a5 + 50.0) ) { if ( (double)((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) <= v15 || (v8 = ((int (__thiscall *)(_DWORD **))(*v6)[116])(v6), (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) + v8) <= a5 + 50.0) ) { if ( (double)((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) <= v15 || (double)((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) >= a5 + 50.0 ) { v16 = a4 - 50.0; v9 = ((int (__thiscall *)(_DWORD **))(*v6)[115])(v6); if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) + v9) >= v16 || (double)((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) <= a5 + 50.0 ) { v10 = ((int (__thiscall *)(_DWORD **))(*v6)[115])(v6); if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) + v10) >= v16 || (v11 = (unsigned int)((int (__thiscall *)(_DWORD **))(*v6)[116])(v6) >> 1, (double)(((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) - v11) >= a5 + 50.0) ) { v12 = ((int (__thiscall *)(_DWORD **))(*v6)[115])(v6); if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) + v12) >= v16 || (v13 = ((int (__thiscall *)(_DWORD **))(*v6)[116])(v6), (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) + v13) <= a5 + 50.0) ) { v14 = ((int (__thiscall *)(_DWORD **))(*v6)[115])(v6); if ( (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v6)[41])(v6) + v14) < v16 && (double)((int (__thiscall *)(_DWORD **))(*v6)[42])(v6) < a5 + 50.0 ) { sub_46A070(v6); (*(void (__stdcall **)(_DWORD))(*v6[90] + 256))(0); (*(void (__stdcall **)(signed int))(*v6[102] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[90] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[103] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[88] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[99] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[88] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[98] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[89] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[100] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[89] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[101] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[87] + 256))(0); (*(void (__cdecl **)(signed int))(*v6[97] + 256))(1); } } else { sub_46A070(v6); (*(void (__cdecl **)(_DWORD))(*v6[87] + 256))(0); (*(void (__stdcall **)(signed int))(*v6[96] + 256))(1); } } // 46A170: could not find valid save-restore pair for esi //----- (0046A610) -------------------------------------------------------- int __thiscall sub_46A610(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 464))(); } //----- (0046A620) -------------------------------------------------------- void __userpurge sub_46A620(_DWORD **a1@, int a2@, int a3) { _DWORD **v3; // esi char *v4; // eax float v5; // ST08_4 float v6; // ST04_4 int v7; // [esp+1Ch] [ebp-1Ch] float v8; // [esp+20h] [ebp-18h] int v9; // [esp+28h] [ebp-10h] int v10; // [esp+2Ch] [ebp-Ch] int v11; // [esp+30h] [ebp-8h] v3 = a1; v4 = sub_664AB0(dword_AD8C90, *((_WORD *)dword_AD8EBC + 274)); if ( v4 ) { sub_653B10(v4, (float *)&v9); *(float *)&v11 = *(float *)&v11 - 3.0; v5 = (double)(unsigned int)dword_AC2F78; v6 = (double)(unsigned int)xRight; if ( sub_8F74F0(a3, v6, v5, v9, v10, v11, (int)&v7) ) sub_46A170(v3, a2, (int)v3, *(float *)&v7, v8); } } //----- (0046A6E0) -------------------------------------------------------- char __thiscall sub_46A6E0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // eax volatile LONG *v11; // edx int v12; // eax int v13; // edi int v14; // ebx int v15; // ecx volatile LONG **v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax int v26; // eax int v27; // ecx volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // eax int v36; // eax int v37; // ecx volatile LONG **v38; // eax volatile LONG *v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // eax volatile LONG **v44; // eax volatile LONG *v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax volatile LONG **v50; // eax volatile LONG *v51; // eax volatile LONG **v52; // eax volatile LONG *v53; // eax int v54; // eax volatile LONG *v55; // eax int v56; // edi int v57; // eax void (__thiscall ***v58)(_DWORD, signed int); // esi volatile LONG *v59; // [esp+88h] [ebp-1Ch] int v60; // [esp+8Ch] [ebp-18h] int v61; // [esp+90h] [ebp-14h] int v62; // [esp+94h] [ebp-10h] int v63; // [esp+A0h] [ebp-4h] v2 = (int)this; v60 = 0; v63 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v59 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v60; v63 = -1; if ( !v60 || InterlockedDecrement((volatile LONG *)(v60 + 4)) ) return 0; v5 = v60 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\SpeechBubbleWin.nif"); sub_8F66B0(v8, (int)&v60, v7); if ( !v60 ) return 0; v9 = sub_8FB140(v60, (int)"Frame", (int)&v61, (int)&v62, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"SpeechBubbleWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v60; v63 = -1; if ( !v60 || InterlockedDecrement((volatile LONG *)(v60 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v11 = *(volatile LONG **)v2; *(_DWORD *)(v2 + 428) = v10; v12 = (*((int (__thiscall **)(int))v11 + 37))(v2); v13 = v61; v14 = v62; v15 = v60; *(_DWORD *)(v2 + 432) = v12; v16 = sub_8FB140(v15, (int)"Corner01Nor", (int)&v61, (int)&v62, v59); v17 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v16, v2, 0, 0); *(_DWORD *)(v2 + 348) = v17; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v18 = sub_8FB140(v60, (int)"Corner01ArrowUp", (int)&v61, (int)&v62, v59); v19 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v18, v2, 0, 0); *(_DWORD *)(v2 + 384) = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 256))(0); v20 = sub_8FB140(v60, (int)"Corner01ArrowLeft01", (int)&v61, (int)&v62, v59); v21 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v20, v2, 0, 0); *(_DWORD *)(v2 + 388) = v21; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 256))(0); v22 = sub_8FB140(v60, (int)"Middle_Up", (int)&v61, (int)&v62, v59); v23 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v22, v2, 0, 0); *(_DWORD *)(v2 + 364) = v23; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v24 = sub_8FB140(v60, (int)"Corner02Nor", (int)&v61, (int)&v62, v59); v25 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v24, v2, 0, 0); *(_DWORD *)(v2 + 352) = v25; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v26 = (*(int (**)(void))(**(_DWORD **)(v2 + 352) + 164))(); v27 = v60; *(_DWORD *)(v2 + 420) = v26; v28 = sub_8FB140(v27, (int)"Corner02ArrowUp", (int)&v61, (int)&v62, v59); v29 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v28, v2, 0, 0); *(_DWORD *)(v2 + 392) = v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 256))(0); v30 = sub_8FB140(v60, (int)"Corner02ArrowRight01", (int)&v61, (int)&v62, v59); v31 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v30, v2, 0, 0); *(_DWORD *)(v2 + 396) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 256))(0); v32 = sub_8FB140(v60, (int)"Middle_Left", (int)&v61, (int)&v62, v59); v33 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v32, v2, 0, 0); *(_DWORD *)(v2 + 368) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); v34 = sub_8FB140(v60, (int)"Corner03Nor", (int)&v61, (int)&v62, v59); v35 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v34, v2, 0, 0); *(_DWORD *)(v2 + 356) = v35; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v36 = (*(int (**)(void))(**(_DWORD **)(v2 + 356) + 168))(); v37 = v60; *(_DWORD *)(v2 + 424) = v36; v38 = sub_8FB140(v37, (int)"Corner03ArrowDown", (int)&v61, (int)&v62, v59); v39 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v38, v2, 0, 0); *(_DWORD *)(v2 + 400) = v39; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 256))(0); v40 = sub_8FB140(v60, (int)"Corner03ArrowLeft01", (int)&v61, (int)&v62, v59); v41 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v40, v2, 0, 0); *(_DWORD *)(v2 + 404) = v41; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 240))(v41, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 256))(0); v42 = sub_8FB140(v60, (int)"Middle_Down", (int)&v61, (int)&v62, v59); v43 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v42, v2, 0, 0); *(_DWORD *)(v2 + 372) = v43; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v44 = sub_8FB140(v60, (int)"Corner04Nor", (int)&v61, (int)&v62, v59); v45 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v44, v2, 0, 0); *(_DWORD *)(v2 + 360) = v45; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); v46 = sub_8FB140(v60, (int)"Corner04ArrowDown", (int)&v61, (int)&v62, v59); v47 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v46, v2, 0, 0); *(_DWORD *)(v2 + 408) = v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 256))(0); v48 = sub_8FB140(v60, (int)"Corner04ArrowRight01", (int)&v61, (int)&v62, v59); v49 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v48, v2, 0, 0); *(_DWORD *)(v2 + 412) = v49; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 256))(0); v50 = sub_8FB140(v60, (int)"Middle_Right", (int)&v61, (int)&v62, v59); v51 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v50, v2, 0, 0); *(_DWORD *)(v2 + 376) = v51; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v51 + 240))(v51, 0); v52 = sub_8FB140(v60, (int)"Center", (int)&v61, (int)&v62, v59); v53 = sub_8F3EB0(v61 - v13, v62 - v14, (int)v52, v2, 0, 0); *(_DWORD *)(v2 + 380) = v53; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v53 + 240))(v53, 0); v54 = sub_421050(0); v55 = sub_8F4A20(0, 1, 300, 300, v54, v2, 0, 0); *(_DWORD *)(v2 + 416) = v55; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 488))(v55, 0); sub_9076A0(*(_DWORD **)(*(_DWORD *)(v2 + 416) + 288), 6); v56 = **(_DWORD **)(v2 + 416); v57 = sub_421050(1); (*(void (__thiscall **)(_DWORD, int))(v56 + 452))(*(_DWORD *)(v2 + 416), v57); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.0); v63 = -1; if ( v60 ) { v58 = (void (__thiscall ***)(_DWORD, signed int))v60; if ( !InterlockedDecrement((volatile LONG *)(v60 + 4)) ) { if ( v58 ) (**v58)(v58, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0046AEA0) -------------------------------------------------------- void __userpurge sub_46AEA0(int a1@, int a2@, int a3@, int a4, int a5, int a6) { int v6; // eax v6 = *(_DWORD *)(a1 + 344); if ( v6 ) { if ( v6 == 1 ) sub_46A170((_DWORD **)a1, a2, a3, *(float *)(a1 + 436), *(float *)(a1 + 440)); } else { sub_46A620((_DWORD **)a1, a2, a5); } } //----- (0046AFE0) -------------------------------------------------------- int __cdecl sub_46AFE0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1BCu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(float *)(v2 + 436) = 0.0; *(_DWORD *)v2 = &SpeechBubbleWin::`vftable'; *(float *)(v2 + 440) = 0.0; *(_DWORD *)(v2 + 232) = &SpeechBubbleWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B51DC: using guessed type void *SpeechBubbleWin::`vftable'; // 9B51FC: using guessed type void *SpeechBubbleWin::`vftable'; //----- (0046B130) -------------------------------------------------------- void *__thiscall sub_46B130(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SpeechBubbleWin::`vftable'; *((_DWORD *)this + 58) = &SpeechBubbleWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B51DC: using guessed type void *SpeechBubbleWin::`vftable'; // 9B51FC: using guessed type void *SpeechBubbleWin::`vftable'; //----- (0046B1C0) -------------------------------------------------------- char __thiscall sub_46B1C0(_DWORD *this, int a2, int a3) { char result; // al if ( !a2 ) result = sub_8F86A0(&unk_BA6B10, this); return result; } //----- (0046B1E0) -------------------------------------------------------- char __thiscall sub_46B1E0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // esi int v4; // eax result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) *(_BYTE *)(v4 + 2659) = 0; result = sub_8F86A0(&unk_BA6B10, v3); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (0046B220) -------------------------------------------------------- void __thiscall sub_46B220(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ST10_4 int v4; // ST0C_4 int v5; // eax int v6; // ST08_4 int v7; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v2 = this; if ( this[91] ) { GetWindowRect(hWnd, &Rect); v3 = v2[102]; v4 = v2[101]; v5 = (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2); v6 = Rect.top + v2[100] + v5; v7 = (*(int (__thiscall **)(_DWORD *))(*v2 + 164))(v2); MoveWindow((HWND)v2[91], Rect.left + v2[99] + v7, v6, v4, v3, 1); } } //----- (0046B2B0) -------------------------------------------------------- char __thiscall sub_46B2B0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // eax volatile LONG *v9; // edi volatile LONG **v10; // edi int v11; // [esp+24h] [ebp-20h] int v12; // [esp+28h] [ebp-1Ch] int v13; // [esp+2Ch] [ebp-18h] int v14; // [esp+30h] [ebp-14h] int v15; // [esp+34h] [ebp-10h] int v16; // [esp+40h] [ebp-4h] v2 = (int)this; v15 = 0; v3 = dword_BA6BA0; v16 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\Account\\SpawnAppsNotice.nif"); sub_8F66B0(v4, (int)&v15, v3); if ( !v15 ) return 0; v5 = sub_8FB140(v15, (int)"Frame", (int)&v13, (int)&v14, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, 0, 0, 0) || !sub_8F71E0(v15, (int)"Title", &v13, &v14, &v11, &v12) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_421050(0); v9 = sub_8F4A20(v13, v14, v11, v12, v8, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v9 + 488))(v9, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v9 + 468))(v9, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, int))(*v9 + 472))(v9, a2); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); if ( sub_8F71E0( v15, (int)"WebPage", (_DWORD *)(v2 + 396), (_DWORD *)(v2 + 400), (_DWORD *)(v2 + 404), (_DWORD *)(v2 + 408)) ) { v10 = sub_8FB140(v15, (int)"ClsNor", (int)&v13, (int)&v14, 0); sub_8FB650(v10, v15, (int)"ClsClick"); sub_8FB650(v10, v15, (int)"ClsOver"); sub_8FE0F0(v13, v14, (int)v10, v2, 0, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v16 = -1; sub_410C00(&v15); result = 1; } else { v16 = -1; sub_410C00(&v15); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0046B530) -------------------------------------------------------- _DWORD *__thiscall sub_46B530(_DWORD *this) { _DWORD *result; // eax result = this + 92; if ( this[97] >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (0046B5E0) -------------------------------------------------------- char __thiscall sub_46B5E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // cf _DWORD *v4; // eax v1 = this; v2 = (_DWORD *)this[74]; if ( v2 ) sub_8EEE70(v2, v1[88], v1[89], v1[90]); v3 = v1[97] < 0x10u; v4 = v1 + 92; v1[96] = 0; if ( !v3 ) v4 = (_DWORD *)*v4; *(_BYTE *)v4 = 0; DestroyWindow((HWND)v1[91]); return sub_8F2BC0(v1, 2, 0, 0); } //----- (0046B640) -------------------------------------------------------- int __cdecl sub_46B640(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1ACu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WebMsgWin::`vftable'; *(_DWORD *)(v2 + 232) = &WebMsgWin::`vftable'; *(_DWORD *)(v2 + 388) = 15; *(_DWORD *)(v2 + 384) = 0; *(_BYTE *)(v2 + 368) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 548))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B5488: using guessed type void *WebMsgWin::`vftable'; // 9B54A4: using guessed type void *WebMsgWin::`vftable'; //----- (0046B810) -------------------------------------------------------- const void **__thiscall sub_46B810(_DWORD *this, void *a2) { return sub_4018E0(this + 92, a2, strlen((const char *)a2)); } //----- (0046B840) -------------------------------------------------------- int __thiscall sub_46B840(HWND *this) { HWND *v1; // esi int v2; // eax HWND v3; // edx int v4; // eax int v5; // ecx bool v6; // cf int v7; // edx _DWORD *v8; // eax int result; // eax struct tagRECT Rect; // [esp+4h] [ebp-24h] int v11; // [esp+14h] [ebp-14h] int v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] int v14; // [esp+20h] [ebp-8h] v1 = this; if ( this[91] ) { DestroyWindow(this[91]); v1[91] = 0; } GetWindowRect(hWnd, &Rect); v2 = (*((int (__thiscall **)(HWND *))*v1 + 41))(v1); v3 = *v1; v11 = (int)v1[99] + v2 + Rect.left; v4 = (*((int (__thiscall **)(HWND *))v3 + 42))(v1); v5 = (int)v1[101]; v6 = (unsigned int)v1[97] < 0x10; v7 = (int)v1[102]; v12 = (int)v1[100] + v4 + Rect.top; v8 = v1 + 92; v13 = v5; v14 = v7; if ( !v6 ) v8 = (_DWORD *)*v8; result = sub_427200((char)hWnd, dword_ACDC7C, v8, (int)&v11); v1[91] = (HWND)result; return result; } //----- (0046B910) -------------------------------------------------------- _DWORD *__thiscall sub_46B910(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &WebMsgWin::`vftable'; *((_DWORD *)this + 58) = &WebMsgWin::`vftable'; if ( *((_DWORD *)this + 97) >= 0x10u ) operator delete(*((void **)this + 92)); v2[97] = 15; v2[96] = 0; *((_BYTE *)v2 + 368) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B5488: using guessed type void *WebMsgWin::`vftable'; // 9B54A4: using guessed type void *WebMsgWin::`vftable'; //----- (0046BC20) -------------------------------------------------------- int __thiscall sub_46BC20(char *this) { char *v1; // esi int v2; // eax unsigned int v3; // edi int v4; // ebx v1 = this; v2 = *((_DWORD *)this + 499); if ( v2 ) { v3 = 0; if ( v2 ) { v4 = (int)(this + 2000); do { *((_DWORD *)v1 + 1013) += _snprintf( &v1[*((_DWORD *)v1 + 1013) + 4056], 1024 - *((_DWORD *)v1 + 1013), "%s&", v4); ++v3; v4 += 128; } while ( v3 < *((_DWORD *)v1 + 499) ); } v1[--*((_DWORD *)v1 + 1013) + 4056] = 0; *((_DWORD *)v1 + 499) = 0; } return (int)(v1 + 4056); } //----- (0046C0B0) -------------------------------------------------------- int __thiscall sub_46C0B0(int this, int a2, int a3, int a4, int a5) { int v5; // eax int v6; // edx int v7; // esi int v8; // eax v5 = a2; *(_DWORD *)(this + 36) = a3; v6 = a5; v7 = this + 32; *(_DWORD *)(this + 32) = v5; v8 = a4; *(_DWORD *)(this + 44) = v6; *(_DWORD *)(this + 40) = v8; (***(void (__stdcall ****)(_DWORD, void *, int *))(this + 28))(*(_DWORD *)(this + 28), &unk_A106E8, &a2); (*(void (__stdcall **)(int, int, int))(*(_DWORD *)a2 + 28))(a2, v7, v7); return (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 8))(a2); } //----- (0046C100) -------------------------------------------------------- int __userpurge sub_46C100@(int a1@, int a2@, char a3) { int v3; // esi int v4; // edx int v5; // ecx int result; // eax int *v7; // [esp+4h] [ebp-4h] v3 = a1; (***(void (__stdcall ****)(_DWORD, void *, int *))(a1 + 28))(*(_DWORD *)(a1 + 28), &unk_A106A8, (int *)&v7); v4 = *(_DWORD *)(v3 + 24); v5 = *v7; if ( a3 ) { (*(void (__stdcall **)(int *, signed int, _DWORD, int, _DWORD, int, int, int))(v5 + 44))( v7, -5, 0, v3, 0, v4, v3 + 32, a2); (*(void (__stdcall **)(int *, signed int, _DWORD, int, _DWORD, _DWORD, int))(*v7 + 44))( v7, -1, 0, v3, 0, *(_DWORD *)(v3 + 24), v3 + 32); result = (*(int (__cdecl **)(int *))(*v7 + 8))(v7); } else { (*(void (__stdcall **)(int *, signed int, _DWORD, int, _DWORD, int, _DWORD))(v5 + 44))(v7, -3, 0, v3, 0, v4, 0); result = (*(int (__stdcall **)(int *))(*v7 + 8))(v7); } return result; } // 46C100: could not find valid save-restore pair for edi //----- (0046C1E0) -------------------------------------------------------- signed int __stdcall sub_46C1E0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { return a6 != 0 ? 0 : -2147024809; } //----- (0046C4E0) -------------------------------------------------------- bool sub_46C4E0() { bool v0; // bl HMODULE v1; // eax struct tagWNDCLASSA WndClass; // [esp+4h] [ebp-28h] v0 = 0; v1 = GetModuleHandleA(0); if ( GetClassInfoA(v1, "WebCtrl32", &WndClass) ) v0 = UnregisterClassA("WebCtrl32", WndClass.hInstance) != 0; CoUninitialize(); return v0; } //----- (0046C530) -------------------------------------------------------- int __thiscall sub_46C530(void (__stdcall ****this)(_DWORD, _DWORD, _DWORD)) { void (__stdcall ****v1)(_DWORD, _DWORD, _DWORD); // esi int v2; // edi int v4; // [esp+8h] [ebp-8h] int v5; // [esp+Ch] [ebp-4h] v1 = this; (**this[7])(this[7], &unk_A10708, &v5); (*(void (__stdcall **)(int, void *, int *))(*(_DWORD *)v5 + 16))(v5, &unk_A10748, &v4); (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); v2 = v4; (*(void (__stdcall **)(int, _DWORD, int))(*(_DWORD *)v4 + 20))(v4, v1[12], (int)(v1 + 13)); return (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); } //----- (0046C5F0) -------------------------------------------------------- HRESULT __thiscall sub_46C5F0(_DWORD **this, const char *a2) { HRESULT result; // eax signed int v3; // kr04_4 CHAR *v4; // edi int v5; // esi WCHAR *v6; // edi int v7; // eax int v8; // esi WCHAR *v9; // edi VARIANTARG *v10; // edi int v11; // esi VARIANTARG *v12; // esi VARIANTARG v13; // [esp+4h] [ebp-244h] VARIANTARG pvarg; // [esp+14h] [ebp-234h] VARIANTARG v15; // [esp+24h] [ebp-224h] _DWORD **v16; // [esp+34h] [ebp-214h] SAFEARRAYBOUND rgsabound; // [esp+38h] [ebp-210h] void *ppvData; // [esp+40h] [ebp-208h] CHAR v19; // [esp+44h] [ebp-204h] CHAR String; // [esp+144h] [ebp-104h] char v21[255]; // [esp+145h] [ebp-103h] v16 = this; result = strlen(a2); if ( (unsigned int)result <= 0xFF ) { memset(&String, 0, 0x100u); memset(&v19, 0, 0x100u); strcpy(&String, a2); v3 = strlen(&String); for ( result = 0; result < v3; ++result ) { v4 = &String + result; if ( *(&String + result) == 63 ) { memcpy(&v19, &v21[result], v3 - result); *v4 = 0; result = v3; } } rgsabound.lLbound = 0; ppvData = 0; if ( String ) { v5 = lstrlenA(&String) + 1; v6 = (WCHAR *)operator new[](2 * v5); MultiByteToWideChar(0, 0, &String, -1, v6, v5); VariantInit(&pvarg); pvarg.vt = 8; pvarg.lVal = (LONG)SysAllocString(v6); operator delete[](v6); v7 = lstrlenA("Content-Type: application/x-www-form-urlencoded"); if ( v7 <= 0 ) { v10 = (VARIANTARG *)ppvData; } else { v8 = v7 + 1; v9 = (WCHAR *)operator new[](2 * (v7 + 1)); MultiByteToWideChar(0, 0, "Content-Type: application/x-www-form-urlencoded", -1, v9, v8); VariantInit(&v13); v13.vt = 8; v13.lVal = (LONG)SysAllocString(v9); operator delete[](v9); v10 = &v13; } v11 = lstrlenA(&v19); if ( v11 <= 0 ) { v12 = (VARIANTARG *)rgsabound.lLbound; } else { VariantInit(&v15); rgsabound.cElements = v11; rgsabound.lLbound = 0; v15.lVal = (LONG)SafeArrayCreate(0x11u, 1u, &rgsabound); v15.vt = 8209; SafeArrayAccessData(v15.parray, &ppvData); memcpy(ppvData, &v19, v11); SafeArrayUnaccessData(v15.parray); v12 = &v15; } (*(void (__stdcall **)(_DWORD *, VARIANTARG *, _DWORD, _DWORD, VARIANTARG *, VARIANTARG *))(*v16[4] + 208))( v16[4], &pvarg, 0, 0, v12, v10); result = VariantClear(&pvarg); if ( v12 ) result = VariantClear(v12); if ( v10 ) result = VariantClear(v10); } } return result; } // 46C5F0: using guessed type char var_103[255]; //----- (0046C8B0) -------------------------------------------------------- struct tagRECT *__thiscall sub_46C8B0(struct tagRECT *this, LONG a2) { struct tagRECT *v2; // esi _DWORD *v3; // eax v2 = this; this->left = (LONG)&CWebContainer::`vftable'; this->top = (LONG)&CWebContainer::`vftable'; this->right = (LONG)&CWebContainer::`vftable'; this->bottom = (LONG)&CWebContainer::`vftable'; this[1].left = (LONG)&CWebContainer::`vftable'; this[1].top = 0; this[1].right = a2; this[1].bottom = 0; SetRectEmpty(this + 2); v3 = operator new(8u); if ( v3 ) { *v3 = &CWebEventSink::`vftable'; v3[1] = 0; v2[3].left = (LONG)v3; (*(void (__stdcall **)(_DWORD *))(*v3 + 4))(v3); } else { v2[3].left = 0; (*(void (__stdcall **)(_DWORD))(MEMORY[0] + 4))(0); } return v2; } // 9B5860: using guessed type void *CWebContainer::`vftable'; // 9B5880: using guessed type void *CWebContainer::`vftable'; // 9B58AC: using guessed type void *CWebContainer::`vftable'; // 9B58EC: using guessed type void *CWebContainer::`vftable'; // 9B592C: using guessed type void *CWebContainer::`vftable'; // 9B5954: using guessed type void *CWebEventSink::`vftable'; //----- (0046C940) -------------------------------------------------------- HRESULT __thiscall sub_46C940(char *this) { char *v1; // esi _DWORD *v2; // edi HRESULT result; // eax int v4; // [esp+8h] [ebp-20h] int v5; // [esp+Ch] [ebp-1Ch] int v6; // [esp+10h] [ebp-18h] CLSID pclsid; // [esp+14h] [ebp-14h] v1 = this; CLSIDFromString(L"Shell.Explorer", &pclsid); v2 = v1 + 28; result = CoCreateInstance(&pclsid, 0, 5u, &riid, (LPVOID *)v1 + 7); if ( *((_DWORD *)v1 + 7) ) { (**(void (__stdcall ***)(_DWORD, void *, int *))*v2)(*v2, &unk_A106A8, &v5); (*(void (__stdcall **)(int, char *))(*(_DWORD *)v5 + 12))(v5, v1); (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); (**(void (__stdcall ***)(_DWORD, void *, int *))*v2)(*v2, &unk_A10728, &v4); (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 32))(v4); (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4); sub_46C530((void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v1); (**(void (__stdcall ***)(_DWORD, void *, int *))*v2)(*v2, &unk_A106A8, &v6); (*(void (__stdcall **)(int, signed int, _DWORD, char *, _DWORD, _DWORD, char *))(*(_DWORD *)v6 + 44))( v6, -5, 0, v1, 0, *((_DWORD *)v1 + 6), v1 + 32); (*(void (__stdcall **)(int, signed int, _DWORD, char *, _DWORD, _DWORD, char *))(*(_DWORD *)v6 + 44))( v6, -1, 0, v1, 0, *((_DWORD *)v1 + 6), v1 + 32); (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); (**(void (__stdcall ***)(_DWORD, void *, int *))*v2)(*v2, &unk_A106A8, &v6); (*(void (__stdcall **)(int, signed int, _DWORD, char *, _DWORD, _DWORD, char *))(*(_DWORD *)v6 + 44))( v6, -4, 0, v1, 0, *((_DWORD *)v1 + 6), v1 + 32); result = (*(int (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); } return result; } //----- (0046CA70) -------------------------------------------------------- int __thiscall sub_46CA70(void (__stdcall ****this)(_DWORD, _DWORD, _DWORD)) { void (__stdcall ****v1)(_DWORD, _DWORD, _DWORD); // esi int v2; // edi int v4; // [esp+8h] [ebp-10h] int v5; // [esp+Ch] [ebp-Ch] int v6; // [esp+10h] [ebp-8h] int v7; // [esp+14h] [ebp-4h] v1 = this; (**this[7])(this[7], &unk_A106A8, &v7); (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v7 + 24))(v7, 1); (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v7 + 12))(v7, 0); (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7); (**v1[7])(v1[7], &unk_A106E8, &v6); (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 24))(v6); (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(v6); (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); (**v1[7])(v1[7], &unk_A10708, &v5); (*(void (__stdcall **)(int, void *, int *))(*(_DWORD *)v5 + 16))(v5, &unk_A10748, &v4); (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); v2 = v4; (*(void (__stdcall **)(int, void (__stdcall ***)(_DWORD, _DWORD, _DWORD)))(*(_DWORD *)v4 + 24))(v4, v1[13]); return (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); } //----- (0046CB40) -------------------------------------------------------- LRESULT __thiscall sub_46CB40(int this, UINT Msg, WPARAM wParam, LPARAM lParam) { int v4; // esi struct tagRECT *v5; // eax struct tagRECT *v6; // eax int v8; // esi v4 = this; if ( Msg > 0xC ) { switch ( Msg ) { case 0x115u: return 0; case 0x401u: sub_46C100(*(_DWORD *)(this + 12), 0, 1); return 0; case 0x402u: v8 = *(_DWORD *)(this + 12); (***(void (__stdcall ****)(_DWORD, void *, LPARAM *))(v8 + 28))(*(_DWORD *)(v8 + 28), &unk_A106A8, &lParam); (*(void (__stdcall **)(LPARAM, signed int, _DWORD, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)lParam + 44))( lParam, -3, 0, v8, 0, *(_DWORD *)(v8 + 24), 0); (*(void (__stdcall **)(LPARAM))(*(_DWORD *)lParam + 8))(lParam); return 0; } return DefWindowProcA(*(HWND *)this, Msg, wParam, lParam); } switch ( Msg ) { case 0xCu: sub_46C5F0((_DWORD **)this, (const char *)lParam); return 0; case 1u: v5 = (struct tagRECT *)operator new(0x38u); if ( v5 ) v6 = sub_46C8B0(v5, *(_DWORD *)v4); else v6 = 0; *(_DWORD *)(v4 + 12) = v6; (*(void (__stdcall **)(struct tagRECT *))(v6->left + 4))(v6); sub_46C940(*(char **)(v4 + 12)); (***(void (__stdcall ****)(_DWORD, void *, int))(*(_DWORD *)(v4 + 12) + 28))( *(_DWORD *)(*(_DWORD *)(v4 + 12) + 28), &unk_A10738, v4 + 16); sub_46C5F0((_DWORD **)v4, *(const char **)(lParam + 36)); return 0; case 2u: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 16) + 8))(*(_DWORD *)(this + 16)); sub_46CA70(*(void (__stdcall *****)(_DWORD, _DWORD, _DWORD))(v4 + 12)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 12) + 8))(*(_DWORD *)(v4 + 12)); return 0; } if ( Msg != 5 ) return DefWindowProcA(*(HWND *)this, Msg, wParam, lParam); sub_46C0B0(*(_DWORD *)(this + 12), 0, 0, (unsigned __int16)lParam, (unsigned int)lParam >> 16); return 0; } //----- (0046CCD0) -------------------------------------------------------- LRESULT __stdcall sub_46CCD0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { UINT v4; // ebx _DWORD *v5; // esi HWND *v7; // eax LRESULT Msga; // [esp+18h] [ebp+Ch] v4 = Msg; v5 = GetPropA(hWnd, "this"); if ( !v5 ) { if ( Msg != 1 ) return DefWindowProcA(hWnd, Msg, wParam, lParam); v7 = (HWND *)operator new(0x14u); v5 = v7; if ( v7 ) { *v7 = hWnd; v7[1] = (HWND)(GetSystemMetrics(21) + 2); v4 = 1; v5[2] = GetSystemMetrics(20) + 2; } else { v5 = 0; } SetPropA(hWnd, "this", v5); } Msga = sub_46CB40((int)v5, v4, wParam, lParam); if ( v4 == 2 ) { RemovePropA(hWnd, "this"); operator delete(v5); } return Msga; } //----- (0046CD90) -------------------------------------------------------- bool sub_46CD90() { HINSTANCE v0; // esi struct tagWNDCLASSA WndClass; // [esp+4h] [ebp-28h] CoInitialize(0); v0 = GetModuleHandleA(0); if ( GetClassInfoA(v0, "WebCtrl32", &WndClass) ) return 1; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hIcon = 0; WndClass.hCursor = 0; WndClass.hbrBackground = 0; WndClass.lpszMenuName = 0; WndClass.lpszClassName = 0; WndClass.style = 16936; WndClass.lpfnWndProc = sub_46CCD0; WndClass.hInstance = v0; WndClass.hCursor = LoadCursorA(0, (LPCSTR)0x7F00); WndClass.lpszClassName = "WebCtrl32"; return RegisterClassA(&WndClass) != 0; } //----- (0046CE20) -------------------------------------------------------- BOOL __cdecl sub_46CE20(unsigned __int8 *a1, unsigned __int8 *a2) { unsigned __int8 *v2; // ecx unsigned __int8 *v3; // edx unsigned int v4; // eax int v6; // eax v2 = a2; v3 = a1; v4 = 16; while ( *(_DWORD *)v3 == *(_DWORD *)v2 ) { v4 -= 4; v2 += 4; v3 += 4; if ( v4 < 4 ) return 1; } v6 = *v3 - *v2; if ( *v3 == *v2 ) { v6 = v3[1] - v2[1]; if ( v3[1] == v2[1] ) { v6 = v3[2] - v2[2]; if ( v3[2] == v2[2] ) v6 = v3[3] - v2[3]; } } return ((v6 >> 31) | 1) == 0; } //----- (0046CE90) -------------------------------------------------------- signed int __stdcall sub_46CE90(int a1, unsigned __int8 *a2, _DWORD *a3) { int v3; // eax signed int result; // eax if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A10698) ) goto LABEL_22; if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A106F8) ) { v3 = a1; if ( a1 ) { *a3 = a1 + 4; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); return 0; } LABEL_16: *a3 = 0; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); return 0; } if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A106D8) || sub_46CE20(a2, (unsigned __int8 *)&unk_A106C8) ) { v3 = a1; if ( a1 ) { *a3 = a1 + 8; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); return 0; } goto LABEL_16; } if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A10718) ) { v3 = a1; if ( a1 ) { *a3 = a1 + 12; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); return 0; } goto LABEL_16; } if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A106B8) ) goto LABEL_22; if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A10688) ) { v3 = a1; if ( a1 ) { *a3 = a1 + 16; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); return 0; } goto LABEL_16; } if ( sub_46CE20(a2, (unsigned __int8 *)&riid) ) { LABEL_22: *a3 = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); result = 0; } else { *a3 = 0; result = -2147467262; } return result; } //----- (0046CFF0) -------------------------------------------------------- LONG __stdcall sub_46CFF0(int a1) { return InterlockedIncrement((volatile LONG *)(a1 + 20)); } //----- (0046D010) -------------------------------------------------------- signed int __stdcall sub_46D010(int a1) { return -2147467263; } //----- (0046D020) -------------------------------------------------------- signed int __stdcall sub_46D020(int a1, int a2) { return -2147467262; } //----- (0046D030) -------------------------------------------------------- int __stdcall sub_46D030(int a1, int a2) { return 0; } //----- (0046D040) -------------------------------------------------------- int __stdcall sub_46D040(int a1, _DWORD *a2) { *a2 = *(_DWORD *)(a1 + 20); return 0; } //----- (0046D060) -------------------------------------------------------- int __stdcall sub_46D060(int a1, int a2, int a3, RECT *lprcSrc, int a5, int a6) { int v6; // ecx LONG v7; // ecx LONG v8; // edx struct tagRECT Rect; // [esp+14h] [ebp-14h] if ( a1 == 4 ) v6 = 0; else v6 = a1 + 4; *(_DWORD *)a2 = v6; *(_DWORD *)a3 = 0; GetClientRect(*(HWND *)(a1 + 20), &Rect); v7 = Rect.right; v8 = Rect.bottom; lprcSrc->left = 0; lprcSrc->top = 0; lprcSrc->right = v7; lprcSrc->bottom = v8; CopyRect((LPRECT)a5, lprcSrc); *(_DWORD *)a6 = 20; *(_DWORD *)(a6 + 4) = 0; *(_DWORD *)(a6 + 8) = *(_DWORD *)(a1 + 20); *(_DWORD *)(a6 + 12) = 0; *(_DWORD *)(a6 + 16) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)a2 + 4))(*(_DWORD *)a2); return 0; } //----- (0046D110) -------------------------------------------------------- signed int __stdcall sub_46D110(int a1, int a2, int a3) { return -2147467263; } //----- (0046D120) -------------------------------------------------------- signed int __stdcall sub_46D120(int a1, int a2, int a3, int a4, int a5, _DWORD *a6) { *a6 = -1; return -2147352570; } //----- (0046D140) -------------------------------------------------------- signed int __stdcall sub_46D140(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { return -2147352573; } //----- (0046D150) -------------------------------------------------------- LONG __stdcall sub_46D150(int a1) { return sub_46CFF0(a1 - 4); } //----- (0046D160) -------------------------------------------------------- LONG __stdcall sub_46D160(int a1) { return sub_46CFF0(a1 - 8); } //----- (0046D170) -------------------------------------------------------- LONG __stdcall sub_46D170(int a1) { return sub_46CFF0(a1 - 12); } //----- (0046D180) -------------------------------------------------------- signed int __stdcall sub_46D180(int a1, unsigned __int8 *a2, _DWORD *a3) { return sub_46CE90(a1 - 4, a2, a3); } //----- (0046D190) -------------------------------------------------------- LONG __stdcall sub_46D190(int a1) { return sub_46CFF0(a1 - 16); } //----- (0046D1A0) -------------------------------------------------------- signed int __stdcall sub_46D1A0(int a1, int a2) { return sub_46D2C0(a1 - 4, a2); } //----- (0046D1B0) -------------------------------------------------------- signed int __stdcall sub_46D1B0(int a1, unsigned __int8 *a2, _DWORD *a3) { return sub_46CE90(a1 - 8, a2, a3); } //----- (0046D1C0) -------------------------------------------------------- signed int __stdcall sub_46D1C0(int a1, unsigned __int8 *a2, _DWORD *a3) { return sub_46CE90(a1 - 12, a2, a3); } //----- (0046D1D0) -------------------------------------------------------- signed int __stdcall sub_46D1D0(int a1, unsigned __int8 *a2, _DWORD *a3) { return sub_46CE90(a1 - 16, a2, a3); } //----- (0046D1E0) -------------------------------------------------------- int __stdcall sub_46D1E0(int a1, _DWORD *a2) { return sub_46D040(a1 - 4, a2); } //----- (0046D1F0) -------------------------------------------------------- signed int __stdcall sub_46D1F0(int a1, unsigned __int8 *a2, _DWORD *a3) { signed int result; // eax if ( sub_46CE20(a2, (unsigned __int8 *)&unk_A10688) ) { *a3 = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); result = 0; } else if ( sub_46CE20(a2, (unsigned __int8 *)&riid) ) { *a3 = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); result = 0; } else { *a3 = 0; result = -2147467262; } return result; } //----- (0046D260) -------------------------------------------------------- LONG __stdcall sub_46D260(int a1) { return InterlockedIncrement((volatile LONG *)(a1 + 4)); } //----- (0046D280) -------------------------------------------------------- LONG __stdcall sub_46D280(void *a1) { LONG result; // eax LONG v2; // esi result = InterlockedDecrement((volatile LONG *)a1 + 1); v2 = result; if ( !result ) { operator delete(a1); result = v2; } return result; } //----- (0046D2B0) -------------------------------------------------------- signed int __stdcall sub_46D2B0(int a1, int a2, int a3, int a4) { return -2147467263; } //----- (0046D2C0) -------------------------------------------------------- signed int __stdcall sub_46D2C0(int a1, int a2) { return -2147467263; } //----- (0046D2D0) -------------------------------------------------------- LONG __stdcall sub_46D2D0(void *a1) { LONG result; // eax LONG v2; // edi int v3; // eax result = InterlockedDecrement((volatile LONG *)a1 + 5); v2 = result; if ( !result ) { if ( a1 ) { v3 = *((_DWORD *)a1 + 12); *(_DWORD *)a1 = &CWebContainer::`vftable'; *((_DWORD *)a1 + 1) = &CWebContainer::`vftable'; *((_DWORD *)a1 + 2) = &CWebContainer::`vftable'; *((_DWORD *)a1 + 3) = &CWebContainer::`vftable'; *((_DWORD *)a1 + 4) = &CWebContainer::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)a1 + 7) + 8))(*((_DWORD *)a1 + 7)); operator delete(a1); result = v2; } } return result; } // 9B5860: using guessed type void *CWebContainer::`vftable'; // 9B5880: using guessed type void *CWebContainer::`vftable'; // 9B58AC: using guessed type void *CWebContainer::`vftable'; // 9B58EC: using guessed type void *CWebContainer::`vftable'; // 9B592C: using guessed type void *CWebContainer::`vftable'; //----- (0046D340) -------------------------------------------------------- LONG __stdcall sub_46D340(int a1) { return sub_46D2D0((void *)(a1 - 8)); } //----- (0046D350) -------------------------------------------------------- LONG __stdcall sub_46D350(int a1) { return sub_46D2D0((void *)(a1 - 12)); } //----- (0046D360) -------------------------------------------------------- LONG __stdcall sub_46D360(int a1) { return sub_46D2D0((void *)(a1 - 16)); } //----- (0046D370) -------------------------------------------------------- LONG __stdcall sub_46D370(int a1) { return sub_46D2D0((void *)(a1 - 4)); } //----- (0046D800) -------------------------------------------------------- int sub_46D800() { return dword_ACD0D0; } // ACD0D0: using guessed type int dword_ACD0D0; //----- (0046D810) -------------------------------------------------------- int __cdecl sub_46D810(int a1, int a2) { int result; // eax if ( dword_ACD0D0 ) result = (*(int (__stdcall **)(_DWORD, int, int))(*(_DWORD *)dword_ACD0D0 + 16))(0.0, a1, a2); return result; } // ACD0D0: using guessed type int dword_ACD0D0; //----- (0046D950) -------------------------------------------------------- int sub_46D950() { int result; // eax if ( !byte_AAADF9 ) { if ( dword_ACD0D0 ) result = (*(int (**)(void))(*(_DWORD *)dword_ACD0D0 + 24))(); } return result; } // AAADF9: using guessed type char byte_AAADF9; // ACD0D0: using guessed type int dword_ACD0D0; //----- (0046D970) -------------------------------------------------------- char sub_46D970() { int *v0; // ebx const char *v1; // eax int v2; // ecx char v3; // dl HICON v4; // eax DWORD v5; // edx const char **v6; // eax ICONINFO piconinfo; // [esp+Ch] [ebp-18h] const char **v9; // [esp+20h] [ebp-4h] v0 = &dword_ACD0E0; v9 = (const char **)off_AAAE00; while ( 1 ) { if ( !byte_ACAD5C ) sub_420410(); v1 = *v9; v2 = 0; do { v3 = byte_ACAB50[v2]; name[v2++] = v3; } while ( v3 ); strcat(name, v1); v4 = (HICON)LoadImageA(0, name, 2u, 0, 0, 0x2010u); *(v0 - 2) = (int)v4; if ( !v4 ) break; piconinfo.fIcon = 0; piconinfo.xHotspot = 0; piconinfo.yHotspot = 0; piconinfo.hbmMask = 0; piconinfo.hbmColor = 0; if ( !GetIconInfo(v4, &piconinfo) ) break; v5 = piconinfo.xHotspot; v0[1] = piconinfo.yHotspot; v6 = v9 + 1; *v0 = v5; v0 += 4; v9 = v6; if ( (signed int)v6 >= (signed int)&NiZBufferProperty `RTTI Type Descriptor' ) return 1; } return 0; } // AAAE00: using guessed type char *off_AAAE00[17]; // ACAD5C: using guessed type char byte_ACAD5C; // ACD0E0: using guessed type int dword_ACD0E0; //----- (0046DA50) -------------------------------------------------------- char sub_46DA50() { HICON *v0; // eax HICON v1; // ecx int v2; // ebx unsigned int v3; // edi unsigned int v4; // esi LONG v5; // ebx HDC v6; // ebx HDC v7; // eax HDC v8; // ebx UINT v9; // ebx int v10; // ecx char *v11; // eax unsigned int v12; // edi int v13; // ecx int v14; // ecx int v15; // edx bool v16; // zf char pv; // [esp+Ch] [ebp-A8h] unsigned int v19; // [esp+10h] [ebp-A4h] UINT v20; // [esp+14h] [ebp-A0h] char v21; // [esp+24h] [ebp-90h] UINT v22; // [esp+28h] [ebp-8Ch] int v23; // [esp+2Ch] [ebp-88h] unsigned int v24; // [esp+30h] [ebp-84h] int i; // [esp+34h] [ebp-80h] int v26; // [esp+38h] [ebp-7Ch] ICONINFO piconinfo; // [esp+3Ch] [ebp-78h] HDC v28; // [esp+50h] [ebp-64h] UINT v29; // [esp+54h] [ebp-60h] char *v30; // [esp+58h] [ebp-5Ch] HICON *v31; // [esp+5Ch] [ebp-58h] HDC v32; // [esp+60h] [ebp-54h] UINT v33; // [esp+64h] [ebp-50h] HDC hdc; // [esp+68h] [ebp-4Ch] HGDIOBJ h; // [esp+6Ch] [ebp-48h] LPVOID v36; // [esp+70h] [ebp-44h] HICON v37; // [esp+74h] [ebp-40h] LPVOID lpvBits; // [esp+78h] [ebp-3Ch] UINT cLines; // [esp+7Ch] [ebp-38h] char v40; // [esp+83h] [ebp-31h] struct tagBITMAPINFO bmi; // [esp+84h] [ebp-30h] v0 = (HICON *)&unk_ACD0D8; v23 = *(_DWORD *)(dword_BA46D0 + 132); v31 = (HICON *)&unk_ACD0D8; while ( 1 ) { v1 = *v0; if ( *v0 ) break; LABEL_45: v0 += 4; v31 = v0; if ( (signed int)v0 >= (signed int)&byte_ACD1D8 ) return 1; } v2 = -2147467259; v37 = 0; v32 = 0; v28 = 0; hdc = 0; v36 = 0; lpvBits = 0; piconinfo.fIcon = 0; piconinfo.xHotspot = 0; piconinfo.yHotspot = 0; piconinfo.hbmMask = 0; piconinfo.hbmColor = 0; if ( GetIconInfo(v1, &piconinfo) && GetObjectA(piconinfo.hbmMask, 24, &pv) ) { v3 = v20; v4 = v19; cLines = v20; if ( piconinfo.hbmColor ) { v40 = 0; } else { v40 = 1; v3 = v20 >> 1; } v2 = (*(int (__stdcall **)(int, unsigned int, unsigned int, signed int, signed int, HICON *, _DWORD))(*(_DWORD *)v23 + 144))( v23, v19, v3, 21, 3, &v37, 0); if ( v2 >= 0 ) { v5 = cLines; lpvBits = operator new[](4 * v4 * cLines); memset(&bmi, 0, 0x2Cu); bmi.bmiHeader.biSize = 40; bmi.bmiHeader.biWidth = v4; bmi.bmiHeader.biHeight = v5; *(_DWORD *)&bmi.bmiHeader.biPlanes = 2097153; bmi.bmiHeader.biCompression = 0; hdc = GetDC(0); v6 = CreateCompatibleDC(hdc); v28 = v6; if ( !v6 ) { v2 = -2147467259; goto LABEL_30; } h = SelectObject(v6, piconinfo.hbmMask); GetDIBits(v6, piconinfo.hbmMask, 0, cLines, lpvBits, &bmi, 0); SelectObject(v6, h); if ( !v40 ) { v36 = operator new[](4 * v4 * v3); v7 = CreateCompatibleDC(hdc); v8 = v7; v32 = v7; if ( !v7 ) { v2 = -2147467259; goto LABEL_30; } SelectObject(v7, piconinfo.hbmColor); GetDIBits(v8, piconinfo.hbmColor, 0, v3, v36, &bmi, 0); } (*(void (__stdcall **)(HICON, char *, _DWORD, _DWORD))(*(_DWORD *)v37 + 52))(v37, &v21, 0, 0); if ( v3 ) { v24 = -v4; v33 = v22; v9 = v4 * (cLines - 1); v10 = -4 * v4; v11 = (char *)lpvBits + v4 * (4 * v3 - 4); v26 = -4 * v4; v29 = v4 * (cLines - 1); v30 = (char *)lpvBits + v4 * (4 * v3 - 4); h = (HGDIOBJ)v3; do { v12 = 0; if ( v4 ) { cLines = v33; v13 = (_BYTE *)v36 - (_BYTE *)lpvBits; for ( i = (_BYTE *)v36 - (_BYTE *)lpvBits; ; v13 = i ) { if ( v40 ) { v14 = *(_DWORD *)v11; v15 = *((_DWORD *)lpvBits + v12 + v9); v9 = v29; } else { v14 = *(_DWORD *)&v11[v13]; v15 = *(_DWORD *)v11; } *(_DWORD *)cLines = v15 ? 0 : v14 | 0xFF000000; cLines += 4; ++v12; v11 += 4; if ( v12 >= v4 ) break; } v10 = v26; v11 = v30; } v9 += v24; v33 += 4 * v4; v11 += v10; v16 = h == (HGDIOBJ)1; h = (char *)h - 1; v30 = v11; v29 = v9; } while ( !v16 ); } (*(void (__stdcall **)(HICON))(*(_DWORD *)v37 + 56))(v37); v2 = 0; } } LABEL_30: if ( piconinfo.hbmMask ) DeleteObject(piconinfo.hbmMask); if ( piconinfo.hbmColor ) DeleteObject(piconinfo.hbmColor); if ( hdc ) ReleaseDC(0, hdc); if ( v32 ) DeleteDC(v32); if ( v28 ) DeleteDC(v28); if ( v36 ) operator delete[](v36); if ( lpvBits ) operator delete[](lpvBits); v0 = v31; v31[1] = v37; if ( !v2 ) goto LABEL_45; return 0; } // ACD1D8: using guessed type char byte_ACD1D8; // BA46D0: using guessed type int dword_BA46D0; //----- (0046DDD0) -------------------------------------------------------- bool __cdecl sub_46DDD0(int a1) { bool result; // al if ( a1 == 17 ) result = 0; else result = (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(dword_BA46D0 + 132) + 40))( *(_DWORD *)(dword_BA46D0 + 132), *((_DWORD *)&unk_ACD0D8 + 4 * a1 + 2), *((_DWORD *)&unk_ACD0D8 + 4 * a1 + 3), *((_DWORD *)&unk_ACD0D8 + 4 * a1 + 1)) >= 0; return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0046DE40) -------------------------------------------------------- int __cdecl sub_46DE40(int a1, int a2) { int result; // eax result = dword_BA46D0; if ( dword_BA46D0 ) { result = *(_DWORD *)(dword_BA46D0 + 132); if ( result ) result = (*(int (__stdcall **)(int, int, int, signed int))(*(_DWORD *)result + 44))(result, a1, a2, 1); } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0046DE70) -------------------------------------------------------- int __usercall sub_46DE70@(int a1@, int a2@, int a3, int a4, int a5, int a6) { int result; // eax int v7; // edi int v8; // ecx int v9; // eax int v10; // esi void (__stdcall *v11)(int, int *, _DWORD, _DWORD); // edx char *v12; // ebx char *v13; // eax signed int v14; // edx int v15; // [esp+4h] [ebp-2Ch] char *v16; // [esp+8h] [ebp-28h] int v17; // [esp+Ch] [ebp-24h] char *v18; // [esp+10h] [ebp-20h] int v19; // [esp+14h] [ebp-1Ch] int v20; // [esp+18h] [ebp-18h] int v21; // [esp+1Ch] [ebp-14h] int v22; // [esp+20h] [ebp-10h] int v23; // [esp+24h] [ebp-Ch] int v24; // [esp+28h] [ebp-8h] result = a6; v7 = a3; v20 = a3; if ( a6 ) { v8 = *(_DWORD *)(a6 + 40); if ( v8 ) { v9 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v8 + 20))(a2, a1); v10 = v9; v11 = *(void (__stdcall **)(int, int *, _DWORD, _DWORD))(*(_DWORD *)a3 + 52); v19 = v9; v11(a3, &v15, 0, 0); v12 = v16; v22 = a5; v24 = a5 + 32; v21 = a4; v23 = a4 + 32; (*(void (__stdcall **)(int, _DWORD, int *, int *, _DWORD))(*(_DWORD *)v10 + 76))(v10, 0, &v17, &v21, 0); v13 = v18; v14 = 32; do { if ( v13 ) { if ( v12 ) { qmemcpy(v13, v12, 0x80u); v13 += v17; v12 += v15; v10 = v19; v7 = v20; } } --v14; } while ( v14 ); (*(void (**)(void))(*(_DWORD *)v10 + 80))(); result = (*(int (__stdcall **)(int))(*(_DWORD *)v7 + 56))(v7); } } return result; } //----- (0046DF40) -------------------------------------------------------- bool sub_46DF40() { _DWORD *v0; // eax int v1; // ebx _DWORD *v2; // eax int v3; // esi int *v4; // edi int v5; // edi int v6; // esi int v8; // [esp+10h] [ebp-24h] int v9; // [esp+14h] [ebp-20h] int v10; // [esp+18h] [ebp-1Ch] int v11; // [esp+1Ch] [ebp-18h] void *v12; // [esp+20h] [ebp-14h] int v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] sub_9085B0(16); v0 = operator new(0x70u); v12 = v0; v1 = 0; v14 = 0; if ( v0 ) v2 = sub_8698C0(v0, 0x80u, 0x80u, &unk_ABDAD0, 1u, 1); else v2 = 0; v14 = -1; v12 = sub_865FA0((int)v2, &unk_ABD7DC); v3 = 0; v13 = 0; v4 = (int *)&unk_ACD0DC; while ( 1 ) { if ( !*v4 ) goto LABEL_9; sub_46DE70(v1, v3, *v4, v3, v1, (int)v12); sub_908600(v13, v4[1], v4[2], v3, v1); v3 += 32; if ( v3 + 32 <= 128 ) goto LABEL_9; v1 += 32; if ( v1 > 128 ) return 0; v3 = 0; LABEL_9: ++v13; v4 += 4; if ( (signed int)v4 >= (signed int)&dword_ACD1DC ) { v5 = dword_BA46D0; v6 = (*(int (__thiscall **)(int))(*(_DWORD *)dword_BA46D0 + 104))(dword_BA46D0); v9 = 0; v11 = 0; v8 = 0; v10 = 0; v9 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 60))(v6, 0); v11 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 64))(v6, 0); dword_ACD0D0 = sub_908E70(v5, (volatile LONG **)&v8, 4, 0, (volatile LONG *)v12); return dword_ACD0D0 != 0; } } } // ACD0D0: using guessed type int dword_ACD0D0; // BA46D0: using guessed type int dword_BA46D0; //----- (0046E0A0) -------------------------------------------------------- char sub_46E0A0() { int v1; // eax char v2; // [esp+0h] [ebp-134h] unsigned __int8 v3; // [esp+18h] [ebp-11Ch] if ( !dword_BA46D0 ) return 0; v1 = *(_DWORD *)(dword_BA46D0 + 132); if ( !v1 || (*(int (__stdcall **)(int, char *))(*(_DWORD *)v1 + 28))(v1, &v2) ) return 0; if ( v3 & 1 ) return 1; return (v3 >> 1) & 1; } // BA46D0: using guessed type int dword_BA46D0; //----- (0046E120) -------------------------------------------------------- void __cdecl sub_46E120(int a1) { int v1; // eax if ( byte_AAADF8 ) { if ( byte_AAADF9 ) { if ( dword_BA46D0 ) { v1 = *(_DWORD *)(dword_BA46D0 + 132); if ( v1 ) (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v1 + 48))(v1, (unsigned __int8)a1); } } else if ( dword_ACD0D0 ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACD0D0 + 12))(a1); } } } // AAADF8: using guessed type char byte_AAADF8; // AAADF9: using guessed type char byte_AAADF9; // ACD0D0: using guessed type int dword_ACD0D0; // BA46D0: using guessed type int dword_BA46D0; //----- (0046E170) -------------------------------------------------------- int sub_46E170() { int result; // eax if ( byte_AAADF9 ) { result = dword_AAADFC; if ( dword_AAADFC != 17 ) result = (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(dword_BA46D0 + 132) + 40))( *(_DWORD *)(dword_BA46D0 + 132), *((_DWORD *)&unk_ACD0D8 + 4 * dword_AAADFC + 2), *((_DWORD *)&unk_ACD0D8 + 4 * dword_AAADFC + 3), *((_DWORD *)&unk_ACD0D8 + 4 * dword_AAADFC + 1)); } return result; } // AAADF9: using guessed type char byte_AAADF9; // AAADFC: using guessed type int dword_AAADFC; // BA46D0: using guessed type int dword_BA46D0; //----- (0046E200) -------------------------------------------------------- int sub_46E200() { void (__thiscall ***v0)(_DWORD, signed int); // esi int *v1; // esi int result; // eax if ( dword_ACD1E0 ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACD1E0 + 8))(dword_ACD1E0); dword_ACD1E0 = 0; } if ( dword_ACD1E4 ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACD1E4 + 8))(dword_ACD1E4); dword_ACD1E4 = 0; } v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD1EC; if ( dword_ACD1EC ) { if ( !InterlockedDecrement((volatile LONG *)(dword_ACD1EC + 4)) && v0 ) (**v0)(v0, 1); dword_ACD1EC = 0; } v1 = (int *)&unk_ACD0DC; do { result = *v1; if ( *v1 ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(*v1); *v1 = 0; } v1 += 4; } while ( (signed int)v1 < (signed int)&dword_ACD1DC ); return result; } // ACD1E0: using guessed type int dword_ACD1E0; // ACD1E4: using guessed type int dword_ACD1E4; // ACD1EC: using guessed type int dword_ACD1EC; //----- (0046E2D0) -------------------------------------------------------- void __cdecl sub_46E2D0(int a1) { if ( (_BYTE)a1 ) { byte_AAADF8 = a1; sub_46E120(a1); } else { sub_46E120(0); byte_AAADF8 = 0; } } // AAADF8: using guessed type char byte_AAADF8; //----- (0046E300) -------------------------------------------------------- _DWORD *sub_46E300() { void *v0; // esi void (__thiscall ***v1)(_DWORD, signed int); // esi HCURSOR *v2; // esi _DWORD *result; // eax int (__thiscall ***v4)(_DWORD, signed int); // esi v0 = dword_ACD1DC; if ( dword_ACD1DC ) { sub_44E770((int *)dword_ACD1DC); operator delete(v0); } if ( dword_ACD1F0 ) { v1 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD1F0; if ( !InterlockedDecrement((volatile LONG *)(dword_ACD1F0 + 4)) && v1 ) (**v1)(v1, 1); dword_ACD1F0 = 0; } v2 = (HCURSOR *)&unk_ACD0D8; do { if ( *v2 ) { DestroyCursor(*v2); *v2 = 0; } v2 += 4; } while ( (signed int)v2 < (signed int)&byte_ACD1D8 ); sub_46E200(); dword_ACD0D0 = 0; sub_908220(); result = (_DWORD *)dword_ACD1F4; if ( dword_ACD1F4 ) { result = sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_ACD1F4); v4 = (int (__thiscall ***)(_DWORD, signed int))dword_ACD1F4; if ( dword_ACD1F4 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(dword_ACD1F4 + 4)); if ( !result ) { if ( v4 ) result = (_DWORD *)(**v4)(v4, 1); } dword_ACD1F4 = 0; } } return result; } // ACD0D0: using guessed type int dword_ACD0D0; // ACD1D8: using guessed type char byte_ACD1D8; // ACD1F0: using guessed type int dword_ACD1F0; // ACD1F4: using guessed type int dword_ACD1F4; //----- (0046E3D0) -------------------------------------------------------- bool __cdecl sub_46E3D0(int a1) { if ( byte_ACD1D9 ) return 0; if ( !byte_AAADF9 ) { if ( dword_AAADFC != a1 ) { dword_AAADFC = a1; sub_908680((_DWORD *)dword_ACD0D0, a1); } return 1; } if ( dword_AAADFC == a1 ) return 1; if ( a1 >= 16 ) return 0; dword_AAADFC = a1; return sub_46DDD0(a1); } // AAADF9: using guessed type char byte_AAADF9; // AAADFC: using guessed type int dword_AAADFC; // ACD0D0: using guessed type int dword_ACD0D0; // ACD1D9: using guessed type char byte_ACD1D9; //----- (0046E430) -------------------------------------------------------- int __cdecl sub_46E430(char a1) { int result; // eax if ( a1 ) { byte_AAADF9 = 1; if ( dword_ACD0D0 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACD0D0 + 12))(0); result = dword_BA46D0; if ( dword_BA46D0 ) { result = *(_DWORD *)(dword_BA46D0 + 132); if ( result ) result = (*(int (__stdcall **)(int, signed int))(*(_DWORD *)result + 48))(result, 1); } } else { result = dword_BA46D0; byte_AAADF9 = 0; if ( dword_BA46D0 ) { result = *(_DWORD *)(dword_BA46D0 + 132); if ( result ) result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)result + 48))(result, 0); } if ( dword_ACD0D0 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_ACD0D0 + 12))(1); } return result; } // AAADF9: using guessed type char byte_AAADF9; // ACD0D0: using guessed type int dword_ACD0D0; // BA46D0: using guessed type int dword_BA46D0; //----- (0046E530) -------------------------------------------------------- void sub_46E530() { int v0; // esi int v1; // eax int *v2; // ebx int v3; // eax int v4; // esi char *v5; // eax int v6; // eax volatile LONG **v7; // eax volatile LONG *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi _DWORD *v10; // eax _WORD *v11; // esi int v12; // eax void *v13; // eax float *v14; // eax int v15; // ecx int v16; // ecx int v17; // edx int v18; // edx _DWORD *v19; // eax int v20; // esi _DWORD *v21; // eax int v22; // eax int v23; // eax float *v24; // eax float v25; // ecx float v26; // edx _DWORD *v27; // edi int v28; // esi int v29; // esi int v30; // eax int v31; // eax bool v32; // sf float v33; // esi void (__stdcall *v34)(int, float *, _DWORD, _DWORD); // eax float v35; // edi _BYTE *v36; // ecx _BYTE *v37; // eax int v38; // esi signed int v39; // edi float v40; // [esp+24h] [ebp-60h] float v41; // [esp+28h] [ebp-5Ch] float v42; // [esp+2Ch] [ebp-58h] float v43; // [esp+30h] [ebp-54h] float v44; // [esp+34h] [ebp-50h] int v45; // [esp+38h] [ebp-4Ch] float v46; // [esp+3Ch] [ebp-48h] float v47; // [esp+40h] [ebp-44h] float v48; // [esp+44h] [ebp-40h] float v49; // [esp+48h] [ebp-3Ch] void *v50; // [esp+4Ch] [ebp-38h] int v51; // [esp+50h] [ebp-34h] int v52; // [esp+54h] [ebp-30h] float v53; // [esp+58h] [ebp-2Ch] float v54; // [esp+5Ch] [ebp-28h] float v55; // [esp+60h] [ebp-24h] float v56; // [esp+64h] [ebp-20h] float v57; // [esp+68h] [ebp-1Ch] float v58; // [esp+6Ch] [ebp-18h] char v59; // [esp+70h] [ebp-14h] int v60; // [esp+80h] [ebp-4h] v0 = dword_BA6BCC; if ( !dword_BA6BCC && !byte_ACD1DA ) { if ( !byte_ACD1D9 ) return; v1 = dword_AAADFC; byte_ACD1D9 = 0; if ( byte_AAADF9 ) { if ( dword_AAADFC == 1 ) { LABEL_11: if ( byte_AAADF9 ) { if ( v1 ) { dword_AAADFC = 0; sub_46DDD0(0); } goto LABEL_16; } LABEL_14: if ( v1 ) { dword_AAADFC = 0; sub_908680((_DWORD *)dword_ACD0D0, 0); } goto LABEL_16; } dword_AAADFC = 1; sub_46DDD0(1); } else { if ( dword_AAADFC == 1 ) goto LABEL_14; dword_AAADFC = 1; sub_908680((_DWORD *)dword_ACD0D0, 1); } if ( byte_ACD1D9 ) { LABEL_16: if ( dword_ACD1E8 ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)dword_ACD1E8 + 120))(&v45, dword_ACD1F4); sub_410C00(&v45); sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_ACD1E8); dword_ACD1E8 = 0; } return; } v1 = dword_AAADFC; goto LABEL_11; } if ( !byte_ACD1D9 ) { v2 = sub_5D2DD0(-16, -16, 0); if ( !*(_DWORD *)(v0 + 4) ) return; sub_5D2C60(v2, (int)v2, *(_DWORD *)(v0 + 4)); v3 = dword_ACD1F4; if ( dword_ACD1F4 ) goto LABEL_68; v51 = 0; v4 = dword_BA6BA0; v60 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\ItemCursor.nif"); sub_8F66B0(v5, (int)&v51, v4); v6 = v51; if ( v51 ) { v7 = sub_8FB140(v51, (int)"ItemCurser", (int)&v44, (int)&v50, 0); v8 = sub_8F3EB0(0, 0, (int)v7, 0, 0, 0); sub_56FF80(&dword_ACD1F4, (int)v8); v6 = v51; } v60 = -1; if ( v6 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v3 = dword_ACD1F4; if ( dword_ACD1F4 ) LABEL_68: (*(void (__thiscall **)(int *, int, _DWORD))(*v2 + 116))(v2, v3, 0); v10 = operator new(0x24u); v11 = v10; v50 = v10; v60 = 1; if ( v10 ) { sub_85B2B0(v10); *(_DWORD *)v11 = &NiZBufferProperty::`vftable'; v11[14] = 3; *((_DWORD *)v11 + 8) = 3; v12 = (int)v11; } else { v12 = 0; } *(_WORD *)(v12 + 28) &= 0xFFFCu; v60 = -1; sub_403700(v2, v12); v13 = operator new(0x60u); v50 = v13; v60 = 2; if ( v13 ) v14 = sub_85EBC0((float *)v13); else v14 = 0; *((_DWORD *)v14 + 17) = dword_ABD4FC; *((_DWORD *)v14 + 18) = dword_ABD500; v15 = dword_ABD504; ++*((_DWORD *)v14 + 22); *((_DWORD *)v14 + 19) = v15; v16 = *((_DWORD *)v14 + 22); *((_DWORD *)v14 + 8) = dword_ABD4FC; *((_DWORD *)v14 + 9) = dword_ABD500; v17 = dword_ABD504; *((_DWORD *)v14 + 22) = ++v16; *((_DWORD *)v14 + 10) = v17; *((_DWORD *)v14 + 11) = dword_ABD4FC; *((_DWORD *)v14 + 12) = dword_ABD500; v18 = dword_ABD504; v14[21] = 1.0; *((_DWORD *)v14 + 22) = v16 + 2; v60 = -1; *((_DWORD *)v14 + 13) = v18; sub_403700(v2, (int)v14); v19 = operator new(0x28u); v20 = (int)v19; v50 = v19; v60 = 3; if ( v19 ) { sub_85B2B0(v19); *(_DWORD *)v20 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v20 + 28) = 0; *(_DWORD *)(v20 + 32) = 0; *(_DWORD *)(v20 + 36) = 1; } else { v20 = 0; } v60 = -1; *(_DWORD *)(v20 + 32) = 0; *(_DWORD *)(v20 + 36) = 0; sub_403700(v2, v20); sub_85BED0((_DWORD **)v2, 0.0, 1); sub_85C4D0(v2); sub_85C6F0(v2); if ( !dword_ACD1F0 ) { v21 = operator new(0x128u); v50 = v21; v60 = 4; if ( v21 ) v22 = sub_862BA0(v21); else v22 = 0; v60 = -1; sub_56FF80(&dword_ACD1F0, v22); v23 = dword_ACD1F0; v47 = 0.0; v48 = 0.0; *(float *)(dword_ACD1F0 + 88) = 0.0; v49 = -100.0; *(float *)(v23 + 92) = 0.0; *(float *)(v23 + 96) = -100.0; sub_85BED0((_DWORD **)dword_ACD1F0, 0.0, 1); v47 = 0.0; v48 = -1.0; v49 = 0.0; v40 = 0.0; v41 = 0.0; v42 = 100.0; sub_862170((float *)dword_ACD1F0, &v40, &v47); qmemcpy(&v53, (const void *)(dword_ACD1F0 + 240), 0x1Cu); v58 = 10000.0; v57 = 0.0099999998; v53 = -15.5; v55 = 15.5; v54 = 16.5; v56 = -16.5; v59 = 1; sub_861DD0(dword_ACD1F0, (int)&v53); sub_85BED0((_DWORD **)dword_ACD1F0, 0.0, 1); } sub_44EA40((int *)dword_ACD1DC, dword_ACD1F0); sub_40DB00(dword_ACD1DC, (int)v2); v24 = (float *)dword_ACD1DC; v46 = 0.0; v47 = 0.0; v48 = 0.0; *((float *)dword_ACD1DC + 5) = 0.0; v25 = v48; v49 = 1.0; v24[6] = 0.0; v26 = v49; v24[7] = v25; v24[8] = v26; sub_44E910((float **)dword_ACD1DC, COERCE_INT(0.0)); sub_56FF80(&dword_ACD1EC, *((_DWORD *)dword_ACD1DC + 2)); v27 = dword_ACD1DC; v28 = *((_DWORD *)dword_ACD1DC + 4); if ( v28 ) { if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v27[4] = 0; } dword_ACD1E8 = (int)v2; v29 = *(_DWORD *)(dword_BA46D0 + 132); v50 = *(void **)(dword_BA46D0 + 132); v30 = sub_8F7610(dword_ACD1EC); if ( v30 ) { (*(void (__stdcall **)(int, _DWORD, int *))(*(_DWORD *)v30 + 72))(v30, 0, &v51); v31 = v51; if ( v51 ) { if ( !dword_ACD1E4 ) { (*(void (__stdcall **)(int, int *))(*(_DWORD *)v51 + 48))(v51, &v52); v32 = (*(int (__stdcall **)(int, signed int, signed int, int, signed int, int *, _DWORD))(*(_DWORD *)v29 + 144))( v29, 32, 32, v52, 2, &dword_ACD1E4, 0) < 0; v31 = v51; if ( v32 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v51 + 8))(v51); return; } } (*(void (__stdcall **)(int, int, int))(*(_DWORD *)v29 + 128))(v29, v31, dword_ACD1E4); (*(void (__stdcall **)(int))(*(_DWORD *)v51 + 8))(v51); (*(void (__stdcall **)(int, float *, _DWORD, _DWORD))(*(_DWORD *)dword_ACD1E4 + 52))(dword_ACD1E4, &v48, 0, 0); v33 = v49; v34 = *(void (__stdcall **)(int, float *, _DWORD, _DWORD))(*(_DWORD *)dword_ACD1E0 + 52); v44 = v49; v34(dword_ACD1E0, &v41, 0, 0); v35 = v42; v43 = v42; v45 = 32; while ( 1 ) { v36 = (_BYTE *)(LODWORD(v33) + 4); v37 = (_BYTE *)(LODWORD(v35) + 1); v38 = LODWORD(v33) - LODWORD(v35); v39 = 8; do { *(v37 - 1) = *(v36 - 4); *v37 = v37[v38]; v37[1] = *(v36 - 2); v37[2] = -1; v37[3] = *v36; v37[4] = v36[1]; v37[5] = v36[2]; v37[6] = -1; v37[7] = v36[4]; v37[8] = v36[5]; v37[9] = v36[6]; v37[10] = -1; v37[11] = v36[8]; v37[12] = v36[9]; v37[13] = v36[10]; v37[14] = -1; v36 += 16; v37 += 16; --v39; } while ( v39 ); LODWORD(v43) += LODWORD(v41); LODWORD(v44) += LODWORD(v48); if ( !--v45 ) break; v33 = v44; v35 = v43; } (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACD1E4 + 56))(dword_ACD1E4); (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACD1E0 + 56))(dword_ACD1E0); if ( byte_AAADF9 ) { if ( (*(int (__stdcall **)(void *, _DWORD, _DWORD, int))(*(_DWORD *)v50 + 40))(v50, 0, 0, dword_ACD1E0) < 0 ) return; } else if ( dword_ACD0D0 ) { sub_909060(dword_ACD1E0); } } } } byte_ACD1D9 = 1; byte_ACD1DA = 0; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; // AAADF9: using guessed type char byte_AAADF9; // AAADFC: using guessed type int dword_AAADFC; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // ACD0D0: using guessed type int dword_ACD0D0; // ACD1D9: using guessed type char byte_ACD1D9; // ACD1DA: using guessed type char byte_ACD1DA; // ACD1E0: using guessed type int dword_ACD1E0; // ACD1E4: using guessed type int dword_ACD1E4; // ACD1E8: using guessed type int dword_ACD1E8; // ACD1EC: using guessed type int dword_ACD1EC; // ACD1F0: using guessed type int dword_ACD1F0; // ACD1F4: using guessed type int dword_ACD1F4; // BA46D0: using guessed type int dword_BA46D0; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0046EC50) -------------------------------------------------------- char sub_46EC50() { int v1; // eax if ( !sub_46D970() || !sub_46DA50() || !dword_ACD1E0 && (*(int (__stdcall **)(_DWORD, signed int, signed int, signed int, signed int, int *, _DWORD))(**(_DWORD **)(dword_BA46D0 + 132) + 144))( *(_DWORD *)(dword_BA46D0 + 132), 32, 32, 21, 3, &dword_ACD1E0, 0) < 0 || !sub_46DF40() ) { return 0; } byte_ACD1D8 = sub_46E0A0(); sub_46E430(byte_ACD1D8); if ( !byte_ACD1D9 ) { if ( byte_AAADF9 ) { if ( dword_AAADFC ) { dword_AAADFC = 0; sub_46DDD0(0); } } else if ( dword_AAADFC ) { dword_AAADFC = 0; sub_908680((_DWORD *)dword_ACD0D0, 0); } } byte_AAADF8 = 1; if ( byte_AAADF9 ) { if ( dword_BA46D0 ) { v1 = *(_DWORD *)(dword_BA46D0 + 132); if ( v1 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v1 + 48))(v1, 1); } } else if ( dword_ACD0D0 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD0D0 + 12))(1); } sub_46E120(1); dword_ACD1DC = sub_44EAB0((volatile LONG *)dword_BA46D0, 5); return 1; } // AAADF8: using guessed type char byte_AAADF8; // AAADF9: using guessed type char byte_AAADF9; // AAADFC: using guessed type int dword_AAADFC; // ACD0D0: using guessed type int dword_ACD0D0; // ACD1D8: using guessed type char byte_ACD1D8; // ACD1D9: using guessed type char byte_ACD1D9; // ACD1E0: using guessed type int dword_ACD1E0; // BA46D0: using guessed type int dword_BA46D0; //----- (0046ED70) -------------------------------------------------------- __int16 __thiscall sub_46ED70(_WORD *this, char a2, __int16 a3) { __int16 result; // ax if ( a2 ) { result = a3; this[14] |= a3; } else { this[14] &= ~a3; } return result; } //----- (0046EDA0) -------------------------------------------------------- _DWORD *__thiscall sub_46EDA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85B2B0(this); *((_WORD *)v1 + 14) = 3; v1[8] = 3; *v1 = &NiZBufferProperty::`vftable'; return v1; } // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; //----- (0046EDC0) -------------------------------------------------------- char *sub_46EDC0() { return dword_BA47D4; } //----- (0046EE40) -------------------------------------------------------- int __thiscall sub_46EE40(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // esi result = a2 - 1; v3 = this; if ( a2 == 1 ) result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3[1] = 0; return result; } //----- (0046EE70) -------------------------------------------------------- void *__thiscall sub_46EE70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Singleton::`vftable'; if ( dword_ACD1F8 ) { (**(void (__stdcall ***)(signed int))dword_ACD1F8)(1); dword_ACD1F8 = 0; } byte_ACD1FC = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B5B64: using guessed type void *Singleton::`vftable'; // ACD1F8: using guessed type int dword_ACD1F8; // ACD1FC: using guessed type char byte_ACD1FC; //----- (0046EEF0) -------------------------------------------------------- void sub_46EEF0(char *a1, ...) { FILE *v1; // eax FILE *v2; // esi va_list va; // [esp+Ch] [ebp+Ch] va_start(va, a1); if ( byte_ACD328 ) { vsprintf(byte_ACD430, a1, va); v1 = fopen(&byte_ACD328, "a"); v2 = v1; if ( v1 ) { fprintf(v1, byte_ACD430); fclose(v2); } } } //----- (0046F0F0) -------------------------------------------------------- int sub_46F0F0() { return 0; } //----- (0046F100) -------------------------------------------------------- int sub_46F100() { return dword_ACD8F8; } // ACD8F8: using guessed type int dword_ACD8F8; //----- (0046F110) -------------------------------------------------------- int __stdcall sub_46F110(HWND hWnd, int a2) { DWORD dwProcessId; // [esp+4h] [ebp-10h] CHAR String; // [esp+8h] [ebp-Ch] GetWindowThreadProcessId(hWnd, &dwProcessId); if ( dword_ACD8FC == dwProcessId ) { GetWindowTextA(hWnd, &String, 7); if ( !strncmp(&byte_9B5D9C, &String, 6u) ) ShowWindow(hWnd, 6); } return 1; } // ACD8FC: using guessed type int dword_ACD8FC; //----- (0046F2A0) -------------------------------------------------------- void __thiscall sub_46F2A0(_DWORD *this) { unsigned int v1; // edi int v2; // esi const CHAR *v3; // eax const CHAR *v4; // eax const CHAR *v5; // eax const CHAR *v6; // eax const CHAR *v7; // eax _DWORD *v8; // esi void (__cdecl ***v9)(signed int); // ecx v8 = this; sub_8E5B10(); sub_6B3A80(&unk_B912C8); sub_63AD20(byte_AD8A08); sub_6AD210(&unk_B91250); sub_41A450(); sub_68EF10(byte_ADB468); sub_43CF80(); sub_682FB0(&unk_ADA1E0); sub_68E330(&off_AB4EE0); sub_66D9D0(&unk_AD8D28); sub_6678E0(dword_AD8C90); sub_6F3A40(&off_AB7F2C); sub_471AF0(v8); sub_90FF50(); sub_471B10(); sub_6BD4B0(); sub_460E60(); sub_8AFB20(v8); sub_6BA4E0(&dword_AB6520); v9 = (void (__cdecl ***)(signed int))v8[867]; if ( v9 ) { (**v9)(1); v8[867] = 0; } if ( dword_ACD8F4 ) { operator delete[](dword_ACD8F4); dword_ACD8F4 = 0; } v1 = 0; do { v2 = dword_ACB1D8[v1]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_ACB1D8[v1] = 0; } ++v1; } while ( v1 < 12 ); byte_ACAF62 = 0; if ( byte_AA8E54 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, off_AA8E44[0]); RemoveFontResourceA(v3); if ( !byte_ACAD5C ) sub_420410(); v4 = sub_401410(byte_ACA520, off_AA8E44[0]); DeleteFileA(v4); if ( !byte_ACAD5C ) sub_420410(); v5 = sub_401410(byte_ACA520, off_AA8E50); RemoveFontResourceA(v5); if ( !byte_ACAD5C ) sub_420410(); v6 = sub_401410(byte_ACA520, off_AA8E50); DeleteFileA(v6); } if ( byte_ACAF61 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v7 = sub_401410(byte_AC9DF8, byte_ACAE60); RemoveFontResourceA(v7); } } // 46F2A0: could not find valid save-restore pair for edi // 471AF0: using guessed type int __thiscall sub_471AF0(_DWORD); // 68E330: using guessed type int __thiscall sub_68E330(_DWORD); // AA8E44: using guessed type char *off_AA8E44[4]; // AA8E50: using guessed type char *off_AA8E50; // AA8E54: using guessed type char byte_AA8E54; // AB4EE0: using guessed type void **off_AB4EE0; // AB7F2C: using guessed type void **off_AB7F2C; // ACAD5C: using guessed type char byte_ACAD5C; // ACAF61: using guessed type char byte_ACAF61; // ACAF62: using guessed type char byte_ACAF62; //----- (0046F380) -------------------------------------------------------- char __thiscall sub_46F380(float *this) { float *v1; // esi float v2; // ST04_4 bool v3; // zf double v4; // st7 float v5; // ST04_4 double v6; // st6 double v7; // st5 char result; // al float v9; // ST04_4 float v10; // [esp+4h] [ebp-4h] v1 = this; if ( -1.0 == this[26] ) { this[26] = sub_8A9EF0(); v1[29] = 0.0; v1[27] = 0.0; } v2 = sub_8A9EF0(); v3 = *((_BYTE *)v1 + 142) == 0; v4 = v2; v1[25] = v2; v5 = v2 - v1[26]; v6 = v5; if ( v3 ) { v7 = 0.0; } else { v7 = 0.0; if ( 0.0 == v6 ) return 1; } if ( v7 > v6 ) { v9 = v7; v6 = v9; } v1[26] = v4; v10 = v6 + v1[27]; v1[27] = v10; if ( v1[33] + v1[34] > v10 ) return 0; result = 1; v1[28] = v10 - v1[34]; v1[34] = v1[27]; return result; } //----- (0046F450) -------------------------------------------------------- char __thiscall sub_46F450(_BYTE *this, char a2) { char result; // al result = a2; this[672] = a2; return result; } //----- (0046F460) -------------------------------------------------------- int __thiscall sub_46F460(_DWORD *this) { _DWORD *v1; // esi struct tagPOINT Point; // [esp+4h] [ebp-8h] v1 = this; GetCursorPos(&Point); if ( !*((_BYTE *)v1 + 76) ) ScreenToClient(*(HWND *)(v1[17] + 8), &Point); return sub_46D810(Point.x, Point.y); } //----- (0046F4A0) -------------------------------------------------------- int *sub_46F4A0() { int *result; // eax char v1; // [esp+8h] [ebp-20h] unsigned int v2; // [esp+10h] [ebp-18h] unsigned int v3; // [esp+14h] [ebp-14h] unsigned int v4; // [esp+18h] [ebp-10h] unsigned int v5; // [esp+1Ch] [ebp-Ch] unsigned int v6; // [esp+20h] [ebp-8h] float v7; // [esp+24h] [ebp-4h] result = sub_6BC0C0(); qmemcpy(&v1, result, 0x1Cu); if ( dword_AB6524 ) { v7 = (double)v2 / 50.0; sub_6BA380(v7); v7 = (double)v3 / 50.0; sub_6BA690(&dword_AB6520, v7); v7 = (double)v4 / 50.0; sub_6BA6B0(&dword_AB6520, v7); v7 = (double)v5 / 50.0; sub_6BA720(&dword_AB6520, v7); v7 = (double)v6 / 50.0; result = (int *)sub_6BA700(&dword_AB6520, v7); } return result; } // AB6524: using guessed type int dword_AB6524; //----- (0046F5A0) -------------------------------------------------------- int __cdecl sub_46F5A0(_DWORD *a1) { int result; // eax _DWORD *i; // esi int v3; // eax int v4; // [esp+8h] [ebp-4h] v4 = 0; result = sub_402C40(a1, &v4); for ( i = (_DWORD *)result; result; i = (_DWORD *)result ) { v3 = (*(int (__thiscall **)(_DWORD *))(*i + 4))(i); if ( v3 ) { while ( (_UNKNOWN *)v3 != &unk_BA6B00 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_7; } sub_85C050(i, 11); sub_85C050(i, 0); } LABEL_7: sub_46F5A0(i); result = sub_402C40(a1, &v4); } return result; } //----- (0046F620) -------------------------------------------------------- int __thiscall sub_46F620(_DWORD *this, char *Src, char *a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // esi _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // esi int v12; // ecx double v13; // ST34_8 int v14; // ecx _DWORD *v15; // eax _DWORD *v16; // edi _DWORD *v17; // eax int v18; // edi _DWORD *v19; // eax int v20; // edi _DWORD *v21; // eax int v22; // edi _DWORD *v23; // ecx bool v24; // zf int v25; // ecx int v26; // eax int v27; // ecx int v28; // ST20_4 int v29; // ST20_4 _DWORD *v30; // ecx _DWORD *v31; // edi _DWORD *v33; // [esp+3Ch] [ebp-10h] v33 = this; v4 = operator new(0xC4u); v5 = 0; if ( v4 ) { v6 = operator new(0x70u); if ( v6 ) v7 = sub_868440(v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v7 = 0; v5 = sub_868C00(v4, (int)v7); } v8 = operator new(0xC4u); if ( v8 ) { v9 = operator new(0x70u); if ( v9 ) { v10 = sub_868440(v9, 0, 1, 1u, 1, 1, 4, 1, 2, 1); v11 = sub_868C00(v8, (int)v10); } else { v11 = sub_868C00(v8, 0); } } else { v11 = 0; } sub_867880((_WORD *)v5[46], 4, 0, 0); sub_867880((_WORD *)v11[46], 4, 0, 0); sub_867E60(v5[46], 0, 0.0, 0.0, 1.0, 1.0); v12 = v11[46]; v13 = (double)a4 / 100.0; *(float *)&a4 = v13 * 0.5; sub_867E60(v12, 0, 0.27734751, 0.75520003, *(float *)&a4, 0.015); sub_867680(v5[46]); sub_867680(v11[46]); sub_867FF0(v5[46], 0, &dword_ABD518); sub_867FF0(v11[46], 0, &dword_ABD518); sub_8681A0(v5[46], 0, 0, 0.0, 0.0, 1.0, 1.0); v14 = v11[46]; *(float *)&a4 = v13; sub_8681A0(v14, 0, 0, 0.0, 0.0, *(float *)&a4, 1.0); v15 = operator new(0x44u); a4 = (int)v15; if ( v15 ) v16 = sub_863D50(v15, Src); else v16 = 0; sub_470EE0((_DWORD **)v16, 0); v17 = operator new(0x44u); a4 = (int)v17; if ( v17 ) *(float *)&a4 = COERCE_FLOAT(sub_863D50(v17, a3)); else *(float *)&a4 = 0.0; sub_470EE0((_DWORD **)a4, 0); Src = (char *)v16; if ( v16 ) InterlockedIncrement(v16 + 1); sub_8A6330(v5 + 39, (int *)&Src); if ( v16 && !InterlockedDecrement(v16 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v16)(v16, 1); v18 = a4; if ( *(float *)&a4 != 0.0 ) InterlockedIncrement((volatile LONG *)(a4 + 4)); sub_8A6330(v11 + 39, &a4); if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = operator new(0x28u); v20 = (int)v19; a4 = (int)v19; if ( v19 ) { sub_85B2B0(v19); *(_DWORD *)v20 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v20 + 28) = 0; *(_DWORD *)(v20 + 32) = 0; *(_DWORD *)(v20 + 36) = 1; } else { v20 = 0; } *(_DWORD *)(v20 + 32) = 1; *(_DWORD *)(v20 + 36) = 0; a4 = v20; InterlockedIncrement((volatile LONG *)(v20 + 4)); sub_8A6330(v5 + 39, &a4); if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); a4 = v20; InterlockedIncrement((volatile LONG *)(v20 + 4)); sub_8A6330(v11 + 39, &a4); if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = operator new(0x20u); v22 = (int)v21; a4 = (int)v21; if ( v21 ) { sub_85B2B0(v21); *(_DWORD *)v22 = &NiAlphaProperty::`vftable'; *(_WORD *)(v22 + 28) = 236; *(_BYTE *)(v22 + 30) = 0; } else { v22 = 0; } *(_WORD *)(v22 + 28) &= 0xFFFEu; a4 = v22; InterlockedIncrement((volatile LONG *)(v22 + 4)); sub_8A6330(v5 + 39, &a4); if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); a4 = v22; InterlockedIncrement((volatile LONG *)(v22 + 4)); sub_8A6330(v11 + 39, &a4); if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); sub_85C4D0(v5); sub_85BED0((_DWORD **)v5, 0.0, 1); sub_85C4D0(v11); sub_85BED0((_DWORD **)v11, 0.0, 1); v23 = (_DWORD *)v33[3]; v24 = v23[29] == 0; a4 = v33[3]; if ( v24 && !v23[30] && (*(unsigned __int8 (**)(void))(*v23 + 264))() ) *(_DWORD *)(a4 + 116) = 1; v25 = v33[3]; a4 = v25; if ( (*(_DWORD *)(v25 + 116) == 1 || *(_DWORD *)(v25 + 120) == 1) && !*(_BYTE *)(v25 + 128) ) { v26 = (*(int (**)(void))(*(_DWORD *)v25 + 104))(); sub_44ED20(a4, v26, 7); } v27 = v33[3]; if ( (*(_DWORD *)(v27 + 116) == 1 || *(_DWORD *)(v27 + 120) == 1) && *(_BYTE *)(v27 + 128) == 1 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v27 + 284))(0); v28 = v33[3]; sub_868B60(v5); v29 = v33[3]; sub_868B60(v11); sub_44EDF0((_DWORD *)v33[3]); v30 = (_DWORD *)v33[3]; v24 = v30[29] == 1; a4 = v33[3]; if ( v24 && !v30[30] && (*(unsigned __int8 (**)(void))(*v30 + 268))() ) *(_DWORD *)(a4 + 116) = 2; v31 = (_DWORD *)v33[3]; if ( v31[29] == 2 && !v31[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v31 + 272))(v31) ) { ++v31[31]; v31[29] = 0; } (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); return (*(int (__thiscall **)(_DWORD *, signed int))*v11)(v11, 1); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ABD518: using guessed type int dword_ABD518; //----- (0046FC30) -------------------------------------------------------- void __thiscall sub_46FC30(void *this) { void *v1; // esi int v2; // ST10_4 int v3; // eax char *v4; // eax v1 = this; if ( byte_ACEB01 == 1 ) { if ( byte_ACEB00 ) { if ( byte_AB66E7 ) { OutputDebugStringA("Window Mode"); *(_DWORD *)(*((_DWORD *)v1 + 17) + 20) = 1024; *(_DWORD *)(*((_DWORD *)v1 + 17) + 28) = 768; dword_AB66DF = 1024; dword_AB66E3 = 768; byte_AB66E7 = 0; sub_472770(v1); } else { OutputDebugStringA("SpawnApps:detachWindow()"); v2 = GetSystemMetrics(0); v3 = GetSystemMetrics(1); dword_AB66DF = v2; dword_AB66E3 = v3; byte_AB66E7 = 1; sub_472770(v1); OutputDebugStringA("FullScreen Mode"); } } else { v4 = (char *)sub_40A910(386591000); sub_462C30(1, v4); } sub_8D06A0((float *)v1 + 76, flt_ACCFCC); *((float *)v1 + 81) = 1.0; *((_BYTE *)v1 + 332) = 1; } } // AB66E3: using guessed type int dword_AB66E3; // AB66E7: using guessed type char byte_AB66E7; // ACCFCC: using guessed type float flt_ACCFCC; // ACEB00: using guessed type char byte_ACEB00; // ACEB01: using guessed type char byte_ACEB01; //----- (0046FD20) -------------------------------------------------------- void __usercall sub_46FD20(int a1@, int a2@) { int v2; // esi _DWORD **v3; // eax float v4; // ST0C_4 void *v5; // ecx void *v6; // eax int v7; // edi _DWORD *v8; // edi _DWORD *v9; // edi v2 = a1; if ( *(_BYTE *)(a1 + 332) && sub_8D0630((float *)(a1 + 304), flt_ACCFCC) ) *(_BYTE *)(v2 + 332) = 0; if ( GetAsyncKeyState(13) & 0x8000 && GetAsyncKeyState(18) & 0x8000 && !*(_BYTE *)(v2 + 332) ) sub_46FC30((void *)v2); if ( !*(_DWORD *)(v2 + 3468) ) { if ( byte_ACEAFA ) { byte_ACEAFA = 0; sub_472770((void *)v2); } if ( byte_ACDEF4 ) { byte_ACDEF4 = 0; sub_472770((void *)v2); v3 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( v3 ) sub_487AF0(v3); } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 92))(v2) ) { v4 = *(float *)(v2 + 100); flt_ACCFD4 = flt_ACCFCC; flt_ACCFCC = v4; flt_ACCFD0 = v4 - flt_ACCFD4; if ( *(_BYTE *)(v2 + 672) ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 20))(v2); (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 24))(v2); sub_46E530(); if ( *(_BYTE *)(v2 + 88) ) { v5 = *(void **)(v2 + 84); if ( v5 ) { sub_8AFFF0(v5); sub_8B0110(*(_DWORD *)(v2 + 84), a2); } } sub_6F3AE0(&off_AB7F2C, flt_ACCFCC); sub_8EFE60(&unk_BA6A18, flt_ACCFCC); v6 = sub_6CD770(); (*(void (__thiscall **)(void *))(*(_DWORD *)v6 + 36))(v6); if ( !sub_471B00(SLODWORD(flt_ACCFCC)) ) { v7 = *(_DWORD *)(dword_BA46D0 + 1268); if ( v7 != *(_DWORD *)(v2 + 344) ) { sub_46E170(); sub_67EC50(); *(_DWORD *)(v2 + 344) = v7; } (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 12) + 80))(&unk_B670F4); v8 = *(_DWORD **)(v2 + 12); if ( !v8[29] && !v8[30] && (*(unsigned __int8 (__thiscall **)(_DWORD))(*v8 + 264))(*(_DWORD *)(v2 + 12)) ) v8[29] = 1; sub_470F80(*(_DWORD **)(v2 + 12), 7); sub_8EFED0(&unk_BA6A18); sub_46D950(); sub_44EDF0(*(_DWORD **)(v2 + 12)); v9 = *(_DWORD **)(v2 + 12); if ( v9[29] == 1 && !v9[30] && (*(unsigned __int8 (__thiscall **)(_DWORD))(*v9 + 268))(*(_DWORD *)(v2 + 12)) ) v9[29] = 2; sub_44ECE0(*(_DWORD **)(v2 + 12)); ++*(_DWORD *)(v2 + 116); } if ( byte_BA6A1C ) sub_8AEE20((_DWORD *)v2); } } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; // ACCFD0: using guessed type float flt_ACCFD0; // ACCFD4: using guessed type float flt_ACCFD4; // ACDD50: using guessed type int dword_ACDD50; // ACDEF4: using guessed type char byte_ACDEF4; // ACEAFA: using guessed type char byte_ACEAFA; // BA46D0: using guessed type int dword_BA46D0; // BA6A1C: using guessed type char byte_BA6A1C; //----- (0046FF70) -------------------------------------------------------- char sub_46FF70() { int v0; // ebx _DWORD *v1; // eax _DWORD *v2; // esi signed int v3; // eax int v4; // eax int v5; // edi const CHAR *v6; // eax void *v8; // [esp+14h] [ebp-11Ch] _DWORD *v9; // [esp+18h] [ebp-118h] FILE v10; // [esp+1Ch] [ebp-114h] int v11; // [esp+12Ch] [ebp-4h] v0 = 0; memset(&v10, 0, 0x104u); if ( !byte_ACAD5C ) sub_420410(); sprintf((char *)&v10, "%sFiesta.ini", byte_ACAC58); byte_ACEB01 = 0; sub_4018E0(&lpOutputString, "Original", 8u); v1 = operator new(0x2224u); v11 = 0; if ( v1 ) { v2 = sub_6CBF30(v1); v9 = v2; } else { v9 = 0; v2 = 0; } v11 = -1; if ( !v2 ) return 0; sub_6CBFB0(v2, &v10); v3 = sub_6CBEC0(v2, 0); v8 = (void *)v3; if ( v3 == -1 || v3 < 0 ) goto LABEL_19; while ( 1 ) { v4 = sub_6CBE40(v2, 0, v0); v5 = v4; if ( v4 ) break; LABEL_14: if ( ++v0 > (signed int)v8 ) goto LABEL_19; } if ( !strncmp((const char *)(v4 + 8), "Original", strlen((const char *)(v4 + 8))) ) { OutputDebugStringA("SpawnApps Off."); LABEL_13: v2 = v9; goto LABEL_14; } if ( v5 + 8 + strlen((const char *)(v5 + 8)) + 1 == v5 + 9 ) goto LABEL_13; byte_ACEB01 = 1; byte_ACEB02 = 1; sub_4018E0(&lpOutputString, (void *)(v5 + 8), strlen((const char *)(v5 + 8))); v6 = lpOutputString; if ( (unsigned int)dword_AAEBC4 < 0x10 ) v6 = (const CHAR *)&lpOutputString; OutputDebugStringA(v6); v2 = v9; byte_AB66E7 = 0; LABEL_19: nullsub_29(v2); operator delete(v2); return 0; } // 6CBFA0: using guessed type int __thiscall nullsub_29(_DWORD); // AAEBC4: using guessed type int dword_AAEBC4; // AB66E7: using guessed type char byte_AB66E7; // ACAD5C: using guessed type char byte_ACAD5C; // ACEB01: using guessed type char byte_ACEB01; // ACEB02: using guessed type char byte_ACEB02; //----- (00470150) -------------------------------------------------------- char __thiscall sub_470150(void *this) { _DWORD *v1; // esi HWND v3; // edi HICON v4; // eax char *v5; // eax CHAR *v6; // eax char *v7; // eax CHAR *v8; // eax char *v9; // ebx char *v10; // edi char *v11; // ecx char *v12; // eax char *v13; // ecx char *v14; // eax char *v15; // ecx char *v16; // eax char *v17; // ecx char *v18; // eax int v19; // eax float v20; // ST10_4 float v21; // ST0C_4 bool v22; // zf int v23; // ecx _DWORD *v24; // eax _DWORD *v25; // edi _DWORD *v26; // ecx int v27; // esi void *v28; // eax char *v29; // eax char *v30; // ST10_4 void (__thiscall *v31)(int, char *); // eax char *v32; // eax char *v33; // ST10_4 void **v34; // eax int v35; // eax const char *v36; // esi const char *v37; // ST10_4 char *v38; // eax const char *v39; // eax int v40; // eax char *v41; // eax _BYTE *v42; // eax _BYTE *v43; // eax _BYTE *v44; // eax _BYTE *v45; // eax DWORD v46; // ST10_4 void *v47; // esi struct _SHFILEOPSTRUCTA FileOp; // [esp+1Ch] [ebp-2D0h] float v49; // [esp+3Ch] [ebp-2B0h] unsigned int v50[2]; // [esp+40h] [ebp-2ACh] void *v51; // [esp+48h] [ebp-2A4h] struct _WIN32_FIND_DATAA FindFileData; // [esp+4Ch] [ebp-2A0h] struct tagRECT Rect; // [esp+18Ch] [ebp-160h] const void *v54[4]; // [esp+19Ch] [ebp-150h] int v55; // [esp+1ACh] [ebp-140h] int v56; // [esp+1B0h] [ebp-13Ch] const void *v57[4]; // [esp+1B8h] [ebp-134h] int v58; // [esp+1C8h] [ebp-124h] int v59; // [esp+1CCh] [ebp-120h] char Dst; // [esp+1D4h] [ebp-118h] char v61; // [esp+1D5h] [ebp-117h] int v62; // [esp+2E8h] [ebp-4h] v1 = this; if ( !sub_471300("TextData.shn", 1, 0) ) { sub_471AD0("Text Data Initialize Fail!"); return 0; } if ( !sub_471440("TextData2.shn", 1, 0) ) { sub_471AD0("Text Data2 Initialize Fail!"); return 0; } if ( !sub_471580("TextData3.shn", 1, 0) ) { sub_471AD0("Text Data3 Initialize Fail!"); return 0; } if ( !sub_4716C0("DeprecatedFiles.shn", 1, 0) ) { sub_471AD0("DeprecatedFiles Initialize Fail!"); return 0; } v3 = *(HWND *)(v1[17] + 4); v4 = LoadIconA(hInstance, (LPCSTR)5); SetClassLongA(v3, -14, (LONG)v4); if ( !sub_8AED60((_DWORD ***)v1) ) { sub_471AD0("NiApplication Initialize Fail!"); return 0; } v56 = 15; v55 = 0; LOBYTE(v54[0]) = 0; v62 = 0; v59 = 15; v58 = 0; LOBYTE(v57[0]) = 0; LOBYTE(v62) = 1; v5 = sub_4083B0(); v6 = (CHAR *)sub_401410(v5, "loading\\NowLoading.TGA"); sub_40AC00(v54, v6); v7 = sub_4083B0(); v8 = (CHAR *)sub_401410(v7, "loading\\ProgressBar.tga"); sub_40AC00(v57, v8); v9 = (char *)(v1 + 853); sub_4017F0((const void **)v1 + 853, v54, 0, (void *)0xFFFFFFFF); v10 = (char *)(v1 + 860); sub_4017F0((const void **)v1 + 860, v57, 0, (void *)0xFFFFFFFF); if ( v1[865] < 0x10u ) v11 = (char *)(v1 + 860); else v11 = *(char **)v10; if ( v1[858] < 0x10u ) v12 = (char *)(v1 + 853); else v12 = *(char **)v9; sub_46F620(v1, v12, v11, 10); sub_650610(60.0); sub_650620(115.0); if ( !sub_90FF00() ) { sub_471AD0("PgInstance Initialize Fail!"); LABEL_19: sub_636A10(v57); sub_636A10(v54); return 0; } if ( !sub_471B70((int)v1) ) { sub_471AD0("AppHandle Initialize Fail!"); goto LABEL_19; } if ( !sub_472240(v1) ) { sub_471AD0("Input Initialize Fail!"); goto LABEL_19; } if ( !sub_4214D0() ) { sub_471AD0("Font Initialize Fail!"); goto LABEL_19; } if ( !sub_6F3820((char *)&off_AB7F2C) ) { sub_471AD0("Network Initialize Fail!"); goto LABEL_19; } if ( v1[865] < 0x10u ) v13 = (char *)(v1 + 860); else v13 = *(char **)v10; if ( v1[858] < 0x10u ) v14 = (char *)(v1 + 853); else v14 = *(char **)v9; sub_46F620(v1, v14, v13, 20); if ( !sub_4733C0(v1) ) { sub_471AD0("Game Data Initialize Fail!"); goto LABEL_19; } if ( v1[865] < 0x10u ) v15 = (char *)(v1 + 860); else v15 = *(char **)v10; if ( v1[858] < 0x10u ) v16 = (char *)(v1 + 853); else v16 = *(char **)v9; sub_46F620(v1, v16, v15, 70); if ( !sub_664B30(dword_AD8C90) ) { sub_471AD0("Character Manager Initialize Fail!"); goto LABEL_19; } if ( !sub_66F280(&unk_AD8D28) ) { sub_471AD0("Character Resource Manager Initialize Fail!"); goto LABEL_19; } if ( v1[865] < 0x10u ) v17 = (char *)(v1 + 860); else v17 = *(char **)v10; if ( v1[858] < 0x10u ) v18 = (char *)(v1 + 853); else v18 = *(char **)v9; sub_46F620(v1, v18, v17, 90); if ( !sub_68E300() ) { sub_471AD0("Map Object Manager Initialize Fail!"); goto LABEL_19; } if ( !sub_682B10(&unk_ADA1E0) ) { sub_471AD0("DropItem Manager Initialize Fail!"); goto LABEL_19; } if ( !sub_43CF70() ) { sub_471AD0("Menu Texture Manager Initialize Fail!"); goto LABEL_19; } v19 = v1[17]; v20 = (double)*(unsigned int *)(v19 + 28); v50[1] = *(_DWORD *)(v19 + 20); v21 = (double)v50[1]; if ( !sub_68EFB0(byte_ADB468, v21, v20) ) { sub_471AD0("World Initialize Fail!"); goto LABEL_19; } if ( !sub_41A4D0(dword_B66FB0) ) { sub_471AD0("Engine3D Initialize Fail!"); goto LABEL_19; } if ( v1[865] >= 0x10u ) v10 = *(char **)v10; if ( v1[858] >= 0x10u ) v9 = *(char **)v9; sub_46F620(v1, v9, v10, 100); sub_6BB380(&dword_AB6520); sub_46F4A0(); if ( !sub_6AB660(&unk_B91250) ) { sub_471AD0("Effect Initialize Fail!"); goto LABEL_19; } if ( !sub_63B020((void **)byte_AD8A08) ) { sub_471AD0("Speech Initialize Fail!"); goto LABEL_19; } if ( !sub_6B37C0((float *)&unk_B912C8) ) { sub_471AD0("Text Effect Initialize Fail!"); goto LABEL_19; } v1[165] = GetWindowLongA(*(HWND *)(v1[17] + 4), -16); GetWindowRect(*(HWND *)(v1[17] + 8), &Rect); v22 = *((_BYTE *)v1 + 78) == 0; v1[166] = Rect.bottom - Rect.top; if ( v22 && byte_AB66E7 ) sub_472770(v1); v51 = *((void **)v1 + 25); *(_QWORD *)v50 = (signed __int64)(*(float *)&v51 * 1000.0); srand(v50[0]); v23 = v1[3]; v49 = 1.0; *(float *)v50 = 0.0; *(float *)&v50[1] = 1.0; (*(void (__stdcall **)(float *))(*(_DWORD *)v23 + 80))(&v49); v24 = operator new(0x34u); v50[1] = (unsigned int)v24; LOBYTE(v62) = 2; if ( v24 ) v25 = sub_86AE70(v24); else v25 = 0; v50[1] = (unsigned int)v25; if ( v25 ) InterlockedIncrement(v25 + 1); v26 = (_DWORD *)v1[3]; LOBYTE(v62) = 3; sub_44EE50(v26, (int)v25); sub_46FF70(); sub_472F20(v1); v27 = sub_8667C0(); if ( v27 ) { v28 = operator new(0xB0u); v51 = v28; LOBYTE(v62) = 4; if ( v28 ) v29 = sub_75A790((char *)v28); else v29 = 0; v30 = v29; v31 = *(void (__thiscall **)(int, char *))(*(_DWORD *)v27 + 52); LOBYTE(v62) = 3; v31(v27, v30); } sub_692EB0((float *)byte_ADB468, 0.001); sub_692ED0((float *)byte_ADB468, 40.0); sub_692EF0((float *)byte_ADB468, 360.0); sub_692F40((float *)byte_ADB468, 280.0); sub_8E5FC0(); v32 = sub_41A820(); v33 = (char *)sub_401410(v32, "Default.conf"); v34 = sub_8E50C0(); sub_8E5310((CHAR ***)v34, v33); sub_8F0080(&unk_BA6A18, dword_ACDD50, 0); sub_461120(); sub_461230(); Dst = 0; memset(&v61, 0, 0x105u); *(float *)&v51 = 0.0; if ( sub_470FE0() ) { do { v35 = sub_470FC0((unsigned int)v51); v36 = (const char *)v35; if ( v35 ) { v37 = (const char *)v35; v38 = sub_41A820(); v39 = sub_401410(v38, v37); strcpy_s(&Dst, 0x104u, v39); if ( !strcmp(v36 + 200, (const char *)&unk_9B5C6F) ) { if ( strcmp(v36, (const char *)&unk_9B5C76) ) { *(&Dst + strlen(&Dst) + 1) = 0; *(_TBYTE *)((char *)&FileOp.fAnyOperationsAborted + 2) = 0.0; FileOp.pTo = 0; FileOp.hwnd = 0; FileOp.wFunc = 3; FileOp.pFrom = &Dst; FileOp.fFlags = 20; FileOp.fAnyOperationsAborted = 0; v40 = SHFileOperationA(&FileOp); if ( v40 ) { v41 = sub_7549E0("error deleting directory, file operation returned %d\n", v40); LABEL_97: OutputDebugStringA(v41); goto LABEL_98; } v42 = sub_406190(dword_BA2AE8, "Deleted directory recursively: "); v43 = sub_406190(v42, &Dst); sub_471970(v43); } } else { strcat_s(&Dst, 0x106u, v36 + 200); if ( FindFirstFileA(&Dst, &FindFileData) == (HANDLE)-1 || strcmp(FindFileData.cFileName, v36 + 200) ) goto LABEL_98; SetFileAttributesA(&Dst, 0x80u); if ( DeleteFileA(&Dst) ) { v46 = GetLastError(); v41 = sub_7549E0("error deleting file, error code %u\n", v46); goto LABEL_97; } v44 = sub_406190(dword_BA2AE8, "Deleted file: "); v45 = sub_406190(v44, FindFileData.cFileName); sub_471970(v45); } } LABEL_98: v51 = (char *)v51 + 1; v47 = v51; } while ( (unsigned int)v47 < sub_470FE0() ); } sub_470E30(); sub_4391D0(); LOBYTE(v62) = 1; sub_410C00(&v50[1]); sub_636A10(v57); sub_636A10(v54); return 1; } // AB66E7: using guessed type char byte_AB66E7; // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00470A60) -------------------------------------------------------- void sub_470A60() { void *v0; // eax void *v1; // [esp+8h] [ebp-48h] int v2; // [esp+18h] [ebp-38h] unsigned int v3; // [esp+1Ch] [ebp-34h] void *v4; // [esp+24h] [ebp-2Ch] int v5; // [esp+34h] [ebp-1Ch] unsigned int v6; // [esp+38h] [ebp-18h] int v7; // [esp+4Ch] [ebp-4h] v3 = 15; v2 = 0; LOBYTE(v1) = 0; sub_4018E0(&v1, "EU", 2u); v7 = 0; sub_401D10((int)&v1, "_Release ", 9u); v6 = 15; v5 = 0; LOBYTE(v4) = 0; sub_4017F0((const void **)&v4, (const void **)&v1, 0, (void *)0xFFFFFFFF); LOBYTE(v7) = 1; sub_401D10((int)&v4, "Apr 2 2019", 0xBu); sub_401D10((int)&v4, " ", 1u); sub_401D10((int)&v4, "16:37:45", 8u); BT_InstallSehFilter(); BT_SetAppName("FiestaOnline"); v0 = v4; if ( v6 < 0x10 ) v0 = &v4; BT_SetAppVersion(v0); BT_SetSupportServer("46.253.154.134", 9010); BT_SetFlags(41); if ( v6 >= 0x10 ) operator delete(v4); v6 = 15; v5 = 0; LOBYTE(v4) = 0; if ( v3 >= 0x10 ) operator delete(v1); } // 9A5000: using guessed type int __stdcall BT_SetSupportServer(_DWORD, _DWORD); // 9A5004: using guessed type int __stdcall BT_SetAppVersion(_DWORD); // 9A5008: using guessed type int __stdcall BT_SetAppName(_DWORD); // 9A500C: using guessed type int BT_InstallSehFilter(void); // 9A502C: using guessed type int __stdcall BT_SetFlags(_DWORD); //----- (00470B90) -------------------------------------------------------- _DWORD *__thiscall sub_470B90(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax int v4; // ebx unsigned int v5; // edi int v6; // ebx void *v7; // ecx char v9; // [esp+14h] [ebp-2094h] int v10; // [esp+94h] [ebp-2014h] int v11; // [esp+20A4h] [ebp-4h] v1 = this; sub_8AFCC0(this, "FiestaOnline", 1024, 768, 0, 0, 0); v11 = 0; *v1 = &MainApp::`vftable'; sub_8D0610((_BYTE *)v1 + 304); sub_90FF70((int)(v1 + 169)); v1[858] = 15; v1[857] = 0; *((_BYTE *)v1 + 3412) = 0; v1[865] = 15; v1[864] = 0; *((_BYTE *)v1 + 3440) = 0; LOBYTE(v11) = 3; sub_470A60(); if ( sub_6A1960(&v9) ) { dword_B7D170 = 0; dword_B7D16C = 0; dword_B7D168 = 0; *(_DWORD *)dword_B7D164 = 0; strncpy(dword_B7D164, &v9, 0x10u); dword_B7D174 = v10; } sub_4841F0(&unk_BA6A18); v1[85] = dword_ACDD50; v2 = *(_DWORD *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD50) + 40); sub_457F30(); v3 = rand(); v4 = v3 % 100 + 1; v5 = (unsigned __int8)(v3 % 100 + 1); dword_ACD8F4 = operator new[](v5); memset(dword_ACD8F4, 0, v5); if ( (_BYTE)v4 ) { v6 = 0; do { ++v6; --v5; *((char *)dword_ACD8F4 + v6 - 1) = rand() % 255; } while ( v5 ); } *((float *)v1 + 84) = 0.0; *((_WORD *)v1 + 334) = 0; *((_BYTE *)v1 + 670) = 0; *((_BYTE *)v1 + 78) = 0; *((_BYTE *)v1 + 143) = 0; *((_BYTE *)v1 + 672) = 1; sub_754FD0(1); sub_754FE0(1); EnumDisplaySettingsA(0, 0xFFFFFFFE, (DEVMODEA *)(v1 + 87)); sub_471BB0(v1); sub_472320(v1); nullsub_6(v7); v1[86] = 0; v1[867] = 0; sub_46CD90(); *((_BYTE *)v1 + 332) = 0; return v1; } // 9B624C: using guessed type void *MainApp::`vftable'; // ACDD50: using guessed type int dword_ACDD50; // B7D168: using guessed type int dword_B7D168; // B7D16C: using guessed type int dword_B7D16C; // B7D170: using guessed type int dword_B7D170; // B7D174: using guessed type int dword_B7D174; //----- (00470DA0) -------------------------------------------------------- _DWORD *sub_470DA0() { _DWORD *result; // eax _DWORD *v1; // eax if ( !sub_471A00() ) return 0; v1 = operator new(0xD90u); if ( v1 ) { result = sub_470B90(v1); dword_ACD8F8 = (int)result; } else { result = 0; dword_ACD8F8 = 0; } return result; } // ACD8F8: using guessed type int dword_ACD8F8; //----- (00470E30) -------------------------------------------------------- _DWORD *sub_470E30() { _DWORD *result; // eax _DWORD *v1; // eax result = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v1 = operator new(0x14u); if ( v1 ) { result = sub_439430(v1); dword_ACB2E4 = (int)result; } else { result = 0; dword_ACB2E4 = 0; } } return result; } // ACB2E4: using guessed type int dword_ACB2E4; //----- (00470EB0) -------------------------------------------------------- char *__thiscall sub_470EB0(char *this, char *a2) { _DWORD *v2; // eax v2 = this + 85084; v2[3] = 0; v2[2] = 0; v2[1] = 0; *v2 = 0; return strncpy(this + 85084, a2, 0x10u); } //----- (00470EE0) -------------------------------------------------------- unsigned int __thiscall sub_470EE0(_DWORD **this, int a2) { _DWORD **v2; // edi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // [esp+Ch] [ebp-10h] int v8; // [esp+18h] [ebp-4h] v2 = this; result = *this[10]; if ( result ) { *(_DWORD *)(result + 8) = a2; } else { v4 = operator new(0x18u); v7 = v4; v8 = 0; if ( v4 ) v5 = sub_863940(v4); else v5 = 0; v6 = v5; v7 = v5; result = sub_823870(v2 + 9, 0, &v7); v6[2] = a2; } return result; } //----- (00470F80) -------------------------------------------------------- char __thiscall sub_470F80(_DWORD *this, int a2) { int v2; // esi int v4; // eax v2 = (int)this; if ( this[29] != 1 && this[30] != 1 || *((_BYTE *)this + 128) ) return 0; v4 = (*(int (**)(void))(*this + 104))(); return sub_44ED20(v2, v4, a2); } //----- (00470FC0) -------------------------------------------------------- int __cdecl sub_470FC0(unsigned int a1) { return sub_7474E0((_DWORD *)(dword_ACD900 + 4), a1); } // ACD900: using guessed type int dword_ACD900; //----- (00470FE0) -------------------------------------------------------- int sub_470FE0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD900 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD900: using guessed type int dword_ACD900; //----- (00471000) -------------------------------------------------------- void **__thiscall sub_471000(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B61C4: using guessed type void *ITableBase::`vftable'; //----- (00471080) -------------------------------------------------------- void **__thiscall sub_471080(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B61D4: using guessed type void *ITableBase::`vftable'; //----- (00471100) -------------------------------------------------------- void **__thiscall sub_471100(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B61E4: using guessed type void *ITableBase::`vftable'; //----- (00471180) -------------------------------------------------------- _DWORD *__thiscall sub_471180(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACD904 & 1) ) { dword_ACD904 |= 1u; atexit(sub_99FD30); } *((_BYTE *)v1 + 68) = 0; *v1 = &TextData::`vftable'; return v1; } // 9B61C4: using guessed type void *ITableBase::`vftable'; // 9B6200: using guessed type void *TextData::`vftable'; // ACD900: using guessed type int dword_ACD900; // ACD904: using guessed type int dword_ACD904; //----- (004711C0) -------------------------------------------------------- _DWORD *__thiscall sub_4711C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACD908 & 1) ) { dword_ACD908 |= 1u; atexit(sub_99FD00); } *((_BYTE *)v1 + 68) = 0; *v1 = &TextData2::`vftable'; return v1; } // 9B61D4: using guessed type void *ITableBase::`vftable'; // 9B6210: using guessed type void *TextData2::`vftable'; // ACD904: using guessed type int dword_ACD904; // ACD908: using guessed type int dword_ACD908; //----- (00471200) -------------------------------------------------------- _DWORD *__thiscall sub_471200(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACD90C & 1) ) { dword_ACD90C |= 1u; atexit(sub_99FCD0); } *((_BYTE *)v1 + 68) = 0; *v1 = &TextData3::`vftable'; return v1; } // 9B61E4: using guessed type void *ITableBase::`vftable'; // 9B6220: using guessed type void *TextData3::`vftable'; // ACD908: using guessed type int dword_ACD908; // ACD90C: using guessed type int dword_ACD90C; //----- (00471240) -------------------------------------------------------- _DWORD *__thiscall sub_471240(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACD910 & 1) ) { dword_ACD910 |= 1u; atexit(sub_99FCA0); } *((_BYTE *)v1 + 68) = 0; *v1 = &DeprecatedFilesTable::`vftable'; return v1; } // 9B61B4: using guessed type void *ITableBase::`vftable'; // 9B6230: using guessed type void *DeprecatedFilesTable::`vftable'; // ACD90C: using guessed type int dword_ACD90C; // ACD910: using guessed type int dword_ACD910; //----- (00471280) -------------------------------------------------------- void **__thiscall sub_471280(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B61B4: using guessed type void *ITableBase::`vftable'; //----- (00471300) -------------------------------------------------------- bool __cdecl sub_471300(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C90; if ( !dword_AC9C90 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_471180(v5); else v4 = 0; v12 = -1; dword_AC9C90 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C90 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C90 + 56); if ( !v6 || *v6 != 385 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C90 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C90 + 4))() != 0; } // AC9C90: using guessed type int dword_AC9C90; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00471440) -------------------------------------------------------- bool __cdecl sub_471440(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C80; if ( !dword_AC9C80 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4711C0(v5); else v4 = 0; v12 = -1; dword_AC9C80 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C80 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C80 + 56); if ( !v6 || *v6 != 385 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C80 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C80 + 4))() != 0; } // AC9C80: using guessed type int dword_AC9C80; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00471580) -------------------------------------------------------- bool __cdecl sub_471580(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C7C; if ( !dword_AC9C7C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_471200(v5); else v4 = 0; v12 = -1; dword_AC9C7C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C7C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C7C + 56); if ( !v6 || *v6 != 385 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C7C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C7C + 4))() != 0; } // AC9C7C: using guessed type int dword_AC9C7C; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004716C0) -------------------------------------------------------- bool __cdecl sub_4716C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD900; if ( !dword_ACD900 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_471240(v5); else v4 = 0; v12 = -1; dword_ACD900 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD900 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD900 + 56); if ( !v6 || *v6 != 72 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD900 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD900 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD900: using guessed type int dword_ACD900; //----- (004717F0) -------------------------------------------------------- _BYTE *__thiscall sub_4717F0(_BYTE *this, unsigned __int8 a2) { _BYTE *v2; // esi int v3; // ecx signed int v4; // edi int v5; // eax _BYTE *v6; // eax int v7; // eax int v8; // ecx bool v9; // zf _DWORD *v10; // eax _DWORD *v11; // ecx unsigned __int8 *v12; // eax int v13; // eax _DWORD *v14; // ecx int v15; // eax int v16; // ecx int v18; // [esp+0h] [ebp-30h] _BYTE *v19; // [esp+10h] [ebp-20h] bool v20; // [esp+14h] [ebp-1Ch] int v21; // [esp+18h] [ebp-18h] _BYTE *v22; // [esp+1Ch] [ebp-14h] int *v23; // [esp+20h] [ebp-10h] int v24; // [esp+2Ch] [ebp-4h] v23 = &v18; v2 = this; v22 = this; v3 = *(_DWORD *)&this[*(_DWORD *)(*(_DWORD *)this + 4) + 56]; v4 = 0; v21 = 0; v19 = v22; if ( v3 ) (*(void (**)(void))(*(_DWORD *)v3 + 4))(); v5 = *(_DWORD *)(*(_DWORD *)v2 + 4); v24 = 0; if ( !*(_DWORD *)&v2[v5 + 12] ) { v6 = *(_BYTE **)&v2[v5 + 60]; if ( v6 ) sub_406070(v6); } v7 = *(_DWORD *)(*(_DWORD *)v2 + 4); v20 = *(_DWORD *)&v2[v7 + 12] == 0; v24 = 1; if ( v20 ) { v8 = *(_DWORD *)&v2[v7 + 56]; v9 = **(_DWORD **)(v8 + 36) == 0; LOBYTE(v24) = 2; if ( v9 || (v10 = *(_DWORD **)(v8 + 52), *v10 <= 0) ) { v13 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 12))(a2); } else { --*v10; v11 = *(_DWORD **)(v8 + 36); v12 = (unsigned __int8 *)(*v11)++; *v12 = a2; v13 = a2; } if ( v13 == -1 ) v4 = 4; v24 = 1; } else { v4 = 4; } v14 = &v2[*(_DWORD *)(*(_DWORD *)v2 + 4)]; if ( v4 ) { v15 = v4 | v14[3]; if ( !v14[14] ) v15 |= 4u; sub_405C10(v14, v15, 0); } v24 = 4; if ( !__uncaught_exception() ) sub_4060C0(v2); v16 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 56]; v24 = -1; if ( v16 ) (*(void (**)(void))(*(_DWORD *)v16 + 8))(); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00471970) -------------------------------------------------------- _BYTE *__cdecl sub_471970(_BYTE *a1) { int v1; // eax signed int v2; // edi _DWORD *v3; // ecx int v4; // eax sub_4717F0(a1, 0xAu); v1 = *(_DWORD *)(*(_DWORD *)a1 + 4); v2 = 0; if ( !(a1[v1 + 12] & 6) && (*(int (__thiscall **)(_DWORD))(**(_DWORD **)&a1[v1 + 56] + 52))(*(_DWORD *)&a1[v1 + 56]) == -1 ) { v2 = 4; } v3 = &a1[*(_DWORD *)(*(_DWORD *)a1 + 4)]; if ( v2 ) { v4 = v2 | v3[3]; if ( !v3[14] ) v4 |= 4u; sub_405C10(v3, v4, 0); } return a1; } //----- (004719D0) -------------------------------------------------------- void *__thiscall sub_4719D0(void *this, char a2) { void *v2; // esi v2 = this; sub_4732E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00471A00) -------------------------------------------------------- char sub_471A00() { return 1; } //----- (00471A40) -------------------------------------------------------- char __stdcall sub_471A40(int a1) { int v1; // edx char result; // al int v3; // edx HWND v4; // edi HIMC v5; // esi v1 = *(_DWORD *)(a1 + 4); result = 0; if ( v1 == 269 || v1 == 642 && ((v3 = *(_DWORD *)(a1 + 8), v3 == 6) || v3 == 8) ) { v4 = *(HWND *)a1; v5 = ImmGetContext(*(HWND *)a1); ImmNotifyIME(v5, 0x15u, 4u, 0); ImmNotifyIME(v5, 0x11u, 0, 0); ImmReleaseContext(v4, v5); result = 1; } return result; } //----- (00471AA0) -------------------------------------------------------- bool __cdecl sub_471AA0(char *a1) { return sub_74CA80(dword_B9DE68, a1, 1728, 64) != 0; } //----- (00471AC0) -------------------------------------------------------- char __stdcall sub_471AC0(int a1, int a2) { return sub_8747A0(a1, a2); } //----- (00471AD0) -------------------------------------------------------- int __cdecl sub_471AD0(LPCSTR lpText) { return MessageBoxA(0, lpText, "Application Initialize Error!", 0x10u); } //----- (00471B00) -------------------------------------------------------- char __stdcall sub_471B00(int a1) { return 0; } //----- (00471B10) -------------------------------------------------------- unsigned int sub_471B10() { unsigned int result; // eax _DWORD *v1; // esi _DWORD *v2; // ST00_4 sub_632B00(&dword_AD46F0); sub_686600((int *)&byte_ADA230); sub_685E00((int *)&byte_ADA230); sub_686010((int *)&byte_ADA230); sub_42BEC0(); result = sub_64C640(); v1 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) { do { v2 = v1; v1 = (_DWORD *)*v1; result = ((int (__thiscall *)(void ***, _DWORD *))off_AB6E90[2])(&off_AB6E90, v2); } while ( v1 ); } dword_AB6E9C = 0; dword_AB6E94 = 0; dword_AB6E98 = 0; return result; } // 632B00: using guessed type int __thiscall sub_632B00(_DWORD); // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; // AB6E98: using guessed type int dword_AB6E98; // AB6E9C: using guessed type int dword_AB6E9C; // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; //----- (00471B70) -------------------------------------------------------- char __thiscall sub_471B70(int this) { int v1; // eax HWND v2; // ecx char result; // al v1 = *(_DWORD *)(this + 68); if ( *(_BYTE *)(this + 76) ) v2 = *(HWND *)(v1 + 4); else v2 = *(HWND *)(v1 + 8); result = 1; dword_ACDC7C = (int)hInstance; hWnd = v2; return result; } //----- (00471BB0) -------------------------------------------------------- void __thiscall sub_471BB0(_BYTE *this) { signed int v1; // eax const char *v2; // edi char *v3; // esi const char *v4; // edx const char *v5; // ecx bool v6; // cf unsigned __int8 v7; // al int v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _BYTE *v11; // [esp+14h] [ebp-14h] signed int v12; // [esp+18h] [ebp-10h] v11 = this; v1 = 1; v12 = 1; if ( dword_BA2C9C > 1 ) { while ( 1 ) { v2 = *(const char **)(dword_BA2CA0 + 4 * v1); v3 = *(char **)(dword_BA2CA0 + 4 * v1 + 4); if ( !v2 || !*v2 ) return; if ( strcmp(*(const char **)(dword_BA2CA0 + 4 * v1), "-f") ) { if ( !strcmp(v2, "-d") ) { v11[669] = 1; v11[78] = 1; } else if ( !strcmp(v2, "-win") ) { v11[670] = 1; } } if ( !strcmp(v2, "-w") ) ++v12; v4 = "-steam_login"; v5 = v2; while ( 1 ) { v6 = (const unsigned __int8)*v5 < *v4; if ( *v5 != *v4 ) break; if ( !*v5 ) goto LABEL_18; v7 = v5[1]; v6 = v7 < v4[1]; if ( v7 != v4[1] ) break; v5 += 2; v4 += 2; if ( !v7 ) { LABEL_18: v8 = 0; goto LABEL_20; } } v8 = -v6 - (v6 - 1); LABEL_20: if ( !v8 ) break; if ( !strcmp(v2, "-i") ) { if ( v3 && *v3 ) { dword_B7D170 = 0; dword_B7D16C = 0; dword_B7D168 = 0; *(_DWORD *)dword_B7D164 = 0; strncpy(dword_B7D164, v3, 0x10u); strcpy((char *)&unk_B6D50A, v3); } v12 += 2; } else if ( !strcmp(v2, "-u") ) { if ( v3 && *v3 ) strcpy((char *)&unk_B7750A, v3); v12 += 2; } else if ( !strcmp(v2, "-p") ) { if ( v3 && *v3 ) dword_B7D174 = atoi(v3); v12 += 2; } else if ( !strcmp(v2, "-l") ) { if ( v3 && *v3 ) dword_AAAEA8 = atoi(v3); v12 += 2; } else if ( !strcmp(v2, "-osk_server") ) { if ( !byte_B7C50B && v3 && *v3 ) { sub_470EB0(&byte_B68508, v3); strcpy((char *)&unk_B6D50A, v3); } v12 += 2; } else if ( !strcmp(v2, "-osk_store") ) { if ( v3 && *v3 ) strcpy((char *)&unk_B7750A, v3); v12 += 2; } else { if ( strcmp(v2, "-tip") ) goto LABEL_29; if ( v3 && *v3 ) { sub_470EB0(&byte_B68508, v3); strcpy((char *)&unk_B6D50A, v3); byte_B7C50B = 1; } v12 += 2; } LABEL_30: if ( v12 >= dword_BA2C9C ) return; v1 = v12; } if ( (unsigned __int8)SteamAPI_IsSteamRunning(v5, v4) && (unsigned __int8)SteamAPI_Init() ) { if ( !dword_ACB390 ) { v9 = operator new(0x2Cu); if ( v9 ) v10 = sub_44E1E0(v9); else v10 = 0; dword_ACB390 = (int)v10; } sub_44E2A0(); } LABEL_29: ++v12; goto LABEL_30; } } // 9A5734: using guessed type int SteamAPI_Init(void); // 9A573C: using guessed type int __fastcall SteamAPI_IsSteamRunning(_DWORD, _DWORD); // AAAEA8: using guessed type int dword_AAAEA8; // ACB390: using guessed type int dword_ACB390; // B68508: using guessed type char byte_B68508; // B7C50B: using guessed type char byte_B7C50B; // B7D168: using guessed type int dword_B7D168; // B7D16C: using guessed type int dword_B7D16C; // B7D170: using guessed type int dword_B7D170; // B7D174: using guessed type int dword_B7D174; // BA2C9C: using guessed type int dword_BA2C9C; // BA2CA0: using guessed type int dword_BA2CA0; //----- (00472060) -------------------------------------------------------- char __stdcall sub_472060(int a1, int a2, int a3, char a4) { _DWORD *v4; // eax int v5; // edx int v6; // ecx int v7; // ecx _DWORD *v9; // edx unsigned int v10; // esi int v11; // eax unsigned int v12; // ecx _DWORD *v13; // edi _DWORD *v14; // edx int v15; // ecx _DWORD *v16; // eax int v17; // ebx int *v18; // esi int v19; // edi unsigned int v20; // [esp+0h] [ebp-Ch] _DWORD *v21; // [esp+4h] [ebp-8h] int v22; // [esp+14h] [ebp+8h] char v23; // [esp+23h] [ebp+17h] if ( !(dword_ACDAA0 & 1) ) { dword_ACDAA0 |= 1u; byte_ACDA9C = a4; } v4 = sub_921C10(); v5 = v4[4]; dword_ACDA98 = (int)v4; if ( v5 ) v6 = *(_DWORD *)v4[2]; else v6 = 0; if ( !byte_ACDA9C ) { v7 = *(_DWORD *)(v6 + 1128); if ( !*(_DWORD *)(v7 + 4) || !v7 || !*(_BYTE *)(v7 + 324) ) return 0; } if ( v5 ) v9 = *(_DWORD **)v4[2]; else v9 = 0; v10 = v9[279]; v11 = *(_DWORD *)(v9[282] + 4) != 0 ? v9[282] : 0; v12 = 0; v21 = v9; dword_ACDA94 = (int)v9; dword_ACDA90 = v11; v23 = 0; if ( v10 ) { v13 = (_DWORD *)v9[277]; while ( 1 ) { v14 = (_DWORD *)*v13; v20 = v12; if ( *(_DWORD *)*v13 == a1 && v14[1] == a2 && v14[2] == 32 ) break; ++v12; ++v13; if ( v12 >= v10 ) goto LABEL_22; } v23 = 1; LABEL_22: v9 = v21; } if ( v10 != 0 ) v15 = *(_DWORD *)(v9[277] + 4 * v20); else v15 = 0; dword_ACDA8C = v15; if ( !v11 ) return 0; if ( !v15 ) return 0; v16 = *(_DWORD **)(v11 + 312); v17 = *(_DWORD *)(v15 + 12); if ( !v16 ) return 0; while ( 1 ) { v18 = (int *)v16[2]; v16 = (_DWORD *)*v16; if ( *v18 == v17 ) break; if ( !v16 ) return 0; } v22 = sub_91FDE0(v18, byte_ACDA88 != 0 ? 32 : 16, 0); sub_91F8F0(v18, byte_ACDA9C == 0, v17, v22); dword_BA54C4 = 0; v19 = 2; while ( !sub_91F950(v18, byte_ACDA9C == 0, v19, v17, v22) ) { if ( (unsigned int)++v19 >= 0x11 ) goto LABEL_38; } if ( a3 == 1 ) dword_BA54C4 = v19; LABEL_38: if ( !dword_BA54C4 ) dword_AB66E8 = 0; return v23; } // AB66E8: using guessed type int dword_AB66E8; // ACDA88: using guessed type char byte_ACDA88; // ACDA8C: using guessed type int dword_ACDA8C; // ACDA90: using guessed type int dword_ACDA90; // ACDA94: using guessed type int dword_ACDA94; // ACDA98: using guessed type int dword_ACDA98; // ACDA9C: using guessed type char byte_ACDA9C; // ACDAA0: using guessed type int dword_ACDAA0; // BA54C4: using guessed type int dword_BA54C4; //----- (00472230) -------------------------------------------------------- BOOL __thiscall sub_472230(_DWORD *this) { return ShowWindow(*(HWND *)(this[17] + 4), 6); } //----- (00472240) -------------------------------------------------------- char __thiscall sub_472240(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi int v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al v1 = this; sub_910010((int)(this + 169), (int)hWnd); v2 = v1[4]; *((_BYTE *)v1 + 3408) = 1; dword_ACDC84 = *(_DWORD *)(v2 + 64); dword_ACDC88 = *(_DWORD *)(v1[4] + 68); v3 = dword_ACDC84; if ( dword_BA6B80 != dword_ACDC84 ) { if ( dword_BA6B80 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_BA6B80; if ( !InterlockedDecrement((volatile LONG *)(dword_BA6B80 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } dword_BA6B80 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } v5 = dword_ACDC88; if ( dword_BA6B7C != dword_ACDC88 ) { if ( dword_BA6B7C ) { v6 = (void (__thiscall ***)(_DWORD, signed int))dword_BA6B7C; if ( !InterlockedDecrement((volatile LONG *)(dword_BA6B7C + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } dword_BA6B7C = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } SetCursor(0); result = sub_46EC50(); if ( result ) { dword_BA6B78 = sub_46D800(); result = 1; } return result; } // ACDC84: using guessed type int dword_ACDC84; // ACDC88: using guessed type int dword_ACDC88; // BA6B78: using guessed type int dword_BA6B78; // BA6B7C: using guessed type int dword_BA6B7C; // BA6B80: using guessed type int dword_BA6B80; //----- (00472320) -------------------------------------------------------- bool __thiscall sub_472320(_DWORD *this) { _DWORD *v1; // esi int v2; // edx unsigned int v3; // edi unsigned int v4; // ebx int v5; // ecx char v6; // al int v7; // edx bool result; // al unsigned int v9; // [esp+Ch] [ebp-Ch] unsigned int v10; // [esp+10h] [ebp-8h] int v11; // [esp+14h] [ebp-4h] v1 = this; sub_6BD4A0(); v2 = v1[17]; *((_BYTE *)v1 + 76) = byte_AB66E7; v3 = dword_AB66DF; v4 = dword_AB66E3; v5 = dword_AB66E8; *(_DWORD *)(v2 + 20) = dword_AB66DF; *(_DWORD *)(v1[17] + 28) = v4; v11 = v5; dword_AB66DF = v3; dword_AB66E3 = v4; v9 = GetSystemMetrics(0); v10 = GetSystemMetrics(1); if ( *((_BYTE *)v1 + 76) ) { byte_AB66E7 = 1; *((_BYTE *)v1 + 76) = 0; v6 = sub_472060(v3, v4, v11, 0); v7 = v1[17]; if ( v6 ) { *(_DWORD *)(v7 + 20) = v3; *(_DWORD *)(v1[17] + 28) = v4; } else { *(_DWORD *)(v7 + 20) = 800; *(_DWORD *)(v1[17] + 28) = 600; dword_AB66DF = 800; dword_AB66E3 = 600; } } else { if ( !sub_472060(v3, v4, v11, 0) ) { MessageBoxA(0, &byte_9B7BF4, &byte_9B7BEC, 0); if ( !sub_472060(800, 600, 0, 1) ) { MessageBoxA(0, &byte_9B7C04, &byte_9B7BFC, 0); dword_AB66DF = 800; dword_AB66E3 = 600; } } byte_AB66E7 = 0; if ( v9 < 0x400 || v10 < 0x300 ) { *(_DWORD *)(v1[17] + 20) = 800; *(_DWORD *)(v1[17] + 28) = 600; dword_AB66DF = 800; dword_AB66E3 = 600; } else if ( v3 >= v9 || v4 >= v10 ) { *(_DWORD *)(v1[17] + 20) = v3; *(_DWORD *)(v1[17] + 28) = v4; dword_AB66DF = v3; dword_AB66E3 = v4; } } *((_BYTE *)v1 + 78) = 0; result = dword_AB66E8 != 0; *((_BYTE *)v1 + 671) = dword_AB66E8 != 0; return result; } // AB66E3: using guessed type int dword_AB66E3; // AB66E7: using guessed type char byte_AB66E7; // AB66E8: using guessed type int dword_AB66E8; //----- (004724C0) -------------------------------------------------------- LONG __thiscall sub_4724C0(_DWORD *this) { int v1; // ebx _DWORD *v2; // esi int v3; // edx LONG v4; // eax LONG result; // eax int v6; // eax int v7; // edi HWND *v8; // eax BOOL v9; // eax int v10; // [esp+Ch] [ebp-B8h] HWND hWnd; // [esp+10h] [ebp-B4h] DEVMODEA DevMode; // [esp+14h] [ebp-B0h] struct tagRECT Rect; // [esp+B0h] [ebp-14h] v1 = dword_AB66DF; v2 = this; v10 = dword_AB66E3; memset(&DevMode, 0, 0x9Cu); v3 = v2[17]; DevMode.dmSize = 156; DevMode.dmFields = 1835008; DevMode.dmBitsPerPel = 32; DevMode.dmPelsWidth = dword_AB66DF; DevMode.dmPelsHeight = dword_AB66E3; v4 = GetWindowLongA(*(HWND *)(v3 + 4), -16); SetWindowLongA(*(HWND *)(v2[17] + 4), -16, v4 & 0xFF37FFFF | 0x80); result = ChangeDisplaySettingsA(&DevMode, 2u); if ( !result ) { if ( ChangeDisplaySettingsA(&DevMode, 4u) ) ChangeDisplaySettingsA(&DevMode, 0); ShowWindow(*(HWND *)(v2[17] + 4), 3); v6 = v2[17]; v7 = 0; if ( *(_DWORD *)(v6 + 36) && (v8 = *(HWND **)(v6 + 12)) != 0 ) { hWnd = *v8; v9 = IsWindow(*v8); } else { hWnd = 0; v9 = IsWindow(0); } if ( v9 ) { GetWindowRect(hWnd, &Rect); v7 = Rect.bottom - Rect.top; ShowWindow(hWnd, 0); } result = SetWindowPos(*(HWND *)(v2[17] + 4), 0, 0, 0, v1, v10 + v7, 0); } return result; } // AB66E3: using guessed type int dword_AB66E3; //----- (00472620) -------------------------------------------------------- LONG __thiscall sub_472620(int this) { unsigned int v1; // ebx int v2; // edi DEVMODEA *v3; // esi LONG result; // eax unsigned int v5; // eax int v6; // edi HWND *v7; // edi HWND v8; // edi int v9; // edi int v10; // edi int v11; // ebx int v12; // ebx int v13; // eax int v14; // [esp+Ch] [ebp-24h] int v15; // [esp+10h] [ebp-20h] unsigned int v16; // [esp+14h] [ebp-1Ch] unsigned int v17; // [esp+18h] [ebp-18h] int v18; // [esp+18h] [ebp-18h] struct tagRECT Rect; // [esp+1Ch] [ebp-14h] v1 = dword_AB66DF; v2 = this; v3 = (DEVMODEA *)(this + 348); v14 = this; v15 = dword_AB66DF; v16 = dword_AB66E3; result = ChangeDisplaySettingsA((DEVMODEA *)(this + 348), 2u); if ( !result ) { ChangeDisplaySettingsA(v3, 0); v17 = GetSystemMetrics(0); v5 = GetSystemMetrics(1); if ( v17 < v1 || v5 < v16 ) { v15 = v17; v16 = v5; v1 = v17; } dword_AAEBA8 = v1; dword_AAEBAC = v16; SetWindowLongA(*(HWND *)(*(_DWORD *)(v2 + 68) + 4), -16, *(_DWORD *)(v2 + 660)); ShowWindow(*(HWND *)(*(_DWORD *)(v2 + 68) + 4), 9); v6 = *(_DWORD *)(v2 + 68); v18 = 0; if ( *(_DWORD *)(v6 + 36) && (v7 = *(HWND **)(v6 + 12)) != 0 ) v8 = *v7; else v8 = 0; if ( IsWindow(v8) ) { ShowWindow(v8, 5); GetWindowRect(v8, &Rect); v18 = Rect.bottom - Rect.top; } v9 = GetSystemMetrics(45); v10 = 2 * (GetSystemMetrics(5) + v9); v11 = GetSystemMetrics(46); v12 = 2 * (GetSystemMetrics(6) + v11); v13 = v18 + v12 + GetSystemMetrics(4); result = SetWindowPos(*(HWND *)(*(_DWORD *)(v14 + 68) + 4), 0, 0, 0, v15 + v10, v16 + v13, 0); dword_AB66DF = v15; dword_AB66E3 = v16; } return result; } // AB66E3: using guessed type int dword_AB66E3; //----- (00472770) -------------------------------------------------------- int __thiscall sub_472770(void *this) { unsigned int v1; // ebx unsigned int v2; // edi int v3; // esi unsigned int v4; // eax int v5; // eax int v6; // ecx _DWORD **v7; // ecx char v8; // al char *v9; // eax _DWORD *v10; // ecx int v11; // eax int v12; // edx int v13; // eax float v14; // ST28_4 float v15; // ST24_4 void **v16; // eax int result; // eax float v18; // [esp+14h] [ebp-28h] float v19; // [esp+18h] [ebp-24h] float v20; // [esp+1Ch] [ebp-20h] float v21; // [esp+20h] [ebp-1Ch] float v22; // [esp+24h] [ebp-18h] float v23; // [esp+28h] [ebp-14h] char v24; // [esp+2Ch] [ebp-10h] float v25; // [esp+30h] [ebp-Ch] float v26; // [esp+34h] [ebp-8h] int v27; // [esp+38h] [ebp-4h] v1 = dword_AB66E3; v2 = dword_AB66DF; v3 = (int)this; v27 = dword_AB66E8; dword_AAEBA8 = dword_AB66DF; dword_AAEBAC = dword_AB66E3; v26 = COERCE_FLOAT(GetSystemMetrics(0)); v4 = GetSystemMetrics(1); v25 = *(float *)&v4; if ( byte_AB66E7 ) { if ( !sub_472060(v2, v1, v27, *(_BYTE *)(v3 + 76)) ) { v5 = LODWORD(v26); *(float *)(*(_DWORD *)(v3 + 68) + 20) = v26; v6 = LODWORD(v25); *(float *)(*(_DWORD *)(v3 + 68) + 28) = v25; dword_AB66DF = v5; dword_AB66E3 = v6; dword_AAEBA8 = v5; dword_AAEBAC = v6; } sub_4724C0((_DWORD *)v3); } else { if ( v2 > LODWORD(v26) || v1 > v4 ) { *(_DWORD *)(*(_DWORD *)(v3 + 68) + 20) = v2; *(_DWORD *)(*(_DWORD *)(v3 + 68) + 28) = v1; dword_AB66DF = v2; dword_AB66E3 = v1; dword_AAEBA8 = v2; dword_AAEBAC = v1; } sub_472060(v2, v1, v27, *(_BYTE *)(v3 + 76)); sub_472620(v3); } SetForegroundWindow(*(HWND *)(*(_DWORD *)(v3 + 68) + 4)); SetFocus(*(HWND *)(*(_DWORD *)(v3 + 68) + 4)); v7 = *(_DWORD ***)(v3 + 12); if ( *(float *)&v27 == 0.0 ) { sub_929A60(v7, 0, 0, 40, *(_DWORD *)(*(_DWORD *)(v3 + 68) + 8), 0, 0, 1, 0, 0, 1, 0); } else if ( *(_BYTE *)(v3 + 671) ) { sub_929A60(v7, 0, 0, 40, *(_DWORD *)(*(_DWORD *)(v3 + 68) + 8), 0, 0, 0, 0, dword_BA54C4, 1, 0); } else { sub_929A60(v7, 0, 0, 40, *(_DWORD *)(*(_DWORD *)(v3 + 68) + 8), 0, 0, 1, 0, 0, 1, 0); } v8 = *(_BYTE *)(v3 + 671); if ( v8 != (v27 != 0) && !v8 ) { v9 = (char *)sub_40C190(357008732); sub_462C30(1, v9); } dword_AC2F78 = dword_AB66E3; xRight = dword_AB66DF; dword_AC2F70 = dword_AB66E3 - 1; v10 = (_DWORD *)dword_BA6B78; dword_BA6A84 = 0; dword_BA6A80 = 0; dword_AC2F6C = dword_AB66DF - 1; v11 = *(_DWORD *)(v3 + 68); v12 = *(_DWORD *)(v11 + 20); v13 = *(_DWORD *)(v11 + 28); xRight = v12; dword_AC2F78 = v13; if ( dword_BA6B78 ) { *(_DWORD *)(dword_BA6B78 + 68) = 0; v10[19] = 0; v10[18] = v12; v10[20] = v13; } v25 = (double)(unsigned int)xRight; v26 = (double)(unsigned int)dword_AC2F78; *(float *)&v27 = v26 - (double)*(unsigned int *)(v3 + 664) + 0.5; sub_86B1D0(&v18, 0); v18 = 0.5; v24 = 1; v19 = v25 + 0.5; v20 = v26 - *(float *)&v27; v21 = -*(float *)&v27; v22 = 1.0; v23 = 10000.0; sub_861DD0(dword_BA6B30, (int)&v18); sub_861DD0(dword_AD8A20, (int)&v18); sub_861DD0(dword_B915D8, (int)&v18); v14 = (double)(unsigned int)dword_AC2F78; v15 = (double)(unsigned int)xRight; sub_693890((float *)byte_ADB468, v15, v14); v16 = (void **)sub_8E5FC0(); sub_8E5F20(v16); result = sub_6BD320((unsigned __int8)byte_AB66EC); byte_ACEAF9 = 1; return result; } // AB66E3: using guessed type int dword_AB66E3; // AB66E7: using guessed type char byte_AB66E7; // AB66E8: using guessed type int dword_AB66E8; // AB66EC: using guessed type char byte_AB66EC; // AC2F6C: using guessed type int dword_AC2F6C; // AC2F70: using guessed type int dword_AC2F70; // ACEAF9: using guessed type char byte_ACEAF9; // AD8A20: using guessed type int dword_AD8A20; // B915D8: using guessed type int dword_B915D8; // BA54C4: using guessed type int dword_BA54C4; // BA6A80: using guessed type int dword_BA6A80; // BA6A84: using guessed type int dword_BA6A84; // BA6B30: using guessed type int dword_BA6B30; // BA6B78: using guessed type int dword_BA6B78; //----- (00472A70) -------------------------------------------------------- char __thiscall sub_472A70(int this, LONG a2) { int v2; // esi unsigned int v3; // eax void *v4; // edi int v5; // ecx int v6; // eax int v7; // eax int v8; // ecx char result; // al int v10; // eax int v11; // eax _DWORD *v12; // eax LONG v13; // ecx char *v14; // eax int v15; // ebx int v16; // eax struct tagPOINT Point; // [esp+Ch] [ebp-110h] char v18; // [esp+14h] [ebp-108h] v2 = a2; v3 = *(_DWORD *)(a2 + 4); v4 = (void *)this; Point.y = a2; if ( v3 > 0x10F ) { if ( v3 > 0x288 ) { if ( v3 < 0x290 ) return sub_874780(v2); if ( v3 > 0x291 ) { if ( v3 != 32769 || byte_ACEB01 != 1 ) return sub_874780(v2); OutputDebugStringA("WM_APP_FULLSCREEN"); if ( byte_ACEB00 ) { v15 = GetSystemMetrics(0); v16 = GetSystemMetrics(1); dword_AB66DF = v15; dword_AB66E3 = v16; byte_AB66E7 = 1; sub_472770(v4); v2 = Point.y; return sub_874780(v2); } byte_AB66E7 = 0; v14 = (char *)sub_40A910(386591000); sub_462C30(1, v14); return 1; } } else if ( v3 != 648 ) { if ( v3 == 512 ) { if ( *(_BYTE *)(this + 76) ) { v13 = *(unsigned __int16 *)(a2 + 14); Point.x = *(unsigned __int16 *)(a2 + 12); Point.y = v13; ClientToScreen(hWnd, &Point); sub_46DE40(Point.x, Point.y); } return sub_874780(v2); } if ( v3 <= 0x280 || v3 > 0x286 ) return sub_874780(v2); } LABEL_33: if ( sub_471A40(a2) != 1 ) return sub_874780(v2); return 1; } if ( v3 >= 0x10D ) goto LABEL_33; switch ( v3 ) { case 6u: if ( *(_WORD *)(a2 + 8) ) { if ( (unsigned int)*(unsigned __int16 *)(a2 + 8) - 1 <= 1 ) { v5 = *(_DWORD *)(this + 16); if ( v5 ) { (*(void (**)(void))(*(_DWORD *)v5 + 32))(); v6 = dword_ACDC88; *(_BYTE *)(dword_ACDC88 + 130) = *(_BYTE *)(dword_ACDC88 + 128); *(_BYTE *)(v6 + 131) = *(_BYTE *)(v6 + 129); *(_DWORD *)(v6 + 140) = *(_DWORD *)(v6 + 136); *(_WORD *)(v6 + 128) = 0; *(_DWORD *)(v6 + 136) = 0; *(_DWORD *)(v6 + 16) &= 0xFFFFFFFE; v7 = dword_ACDC88; *(_BYTE *)(dword_ACDC88 + 146) = *(_BYTE *)(dword_ACDC88 + 144); *(_BYTE *)(v7 + 147) = *(_BYTE *)(v7 + 145); *(_DWORD *)(v7 + 156) = *(_DWORD *)(v7 + 152); *(_WORD *)(v7 + 144) = 0; *(_DWORD *)(v7 + 152) = 0; *(_DWORD *)(v7 + 16) &= 0xFFFFFFFD; } if ( dword_ACD0B0 ) sub_459AD0(dword_ACD0B0); if ( !byte_ACDAA4 ) { byte_ACDAA4 = 1; sub_6BA3A0((int)&dword_AB6520, 0); sub_6BA3F0(&dword_AB6520); } } } else { v8 = *(_DWORD *)(this + 16); if ( v8 ) (*(void (**)(void))(*(_DWORD *)v8 + 32))(); if ( byte_ACDAA4 == 1 ) { byte_ACDAA4 = 0; sub_6BA3A0((int)&dword_AB6520, 1); } } goto LABEL_16; case 0x10u: if ( !sub_8EF700(&unk_BA6A18, dword_ACDD68) ) return sub_874780(v2); v12 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_8EEE70(v12, 26, 0, 0); return 1; case 0x20u: LABEL_16: SetCursor(0); sub_46E120(1); return 1; case 0x101u: if ( *(_DWORD *)(a2 + 8) != 44 ) return sub_874780(v2); if ( byte_AB66F0 ) { sub_6CC430(*(_DWORD *)(this + 12), hWnd, (int)&v18, 260); } else { v11 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v11 ) { *(_BYTE *)(v11 + 5125) = 0; return 1; } } result = 1; break; case 0x104u: v10 = *(_DWORD *)(a2 + 8); if ( v10 != 121 && v10 != 18 ) return sub_874780(v2); return 1; default: return sub_874780(v2); } return result; } // AB66E3: using guessed type int dword_AB66E3; // AB66E7: using guessed type char byte_AB66E7; // AB66F0: using guessed type char byte_AB66F0; // ACD0B0: using guessed type int dword_ACD0B0; // ACDAA4: using guessed type char byte_ACDAA4; // ACDC88: using guessed type int dword_ACDC88; // ACEB00: using guessed type char byte_ACEB00; // ACEB01: using guessed type char byte_ACEB01; //----- (00472F20) -------------------------------------------------------- void __thiscall sub_472F20(_DWORD *this) { signed int v1; // eax const char *v2; // esi const char *v3; // edi char v4; // al char v5; // al char v6; // al char v7; // al int v8; // eax char v9; // al _DWORD *v10; // [esp+0h] [ebp-18h] signed int v11; // [esp+4h] [ebp-14h] char v12[4]; // [esp+8h] [ebp-10h] int v13; // [esp+Ch] [ebp-Ch] int v14; // [esp+10h] [ebp-8h] v1 = 1; v10 = this; v11 = 1; if ( dword_BA2C9C > 1 ) { while ( 1 ) { v2 = *(const char **)(dword_BA2CA0 + 4 * v1); v3 = *(const char **)(dword_BA2CA0 + 4 * v1 + 4); if ( !v2 || !*v2 ) return; if ( !strcmp(*(const char **)(dword_BA2CA0 + 4 * v1), "-c") ) { if ( v3 ) { if ( *v3 ) { v4 = sub_477690(v3); sub_6807F0(byte_AD9238, v4); } } v11 += 2; } else if ( !strcmp(v2, "-g") ) { if ( v3 && *v3 ) { v5 = atoi(v3); sub_680820(byte_AD9238, v5); } v11 += 2; } else if ( !strcmp(v2, "-h") ) { if ( v3 && *v3 ) { v6 = atoi(v3); sub_680850(byte_AD9238, v6); } v11 += 2; } else if ( !strcmp(v2, "-face") ) { if ( v3 && *v3 ) { v7 = atoi(v3); sub_680860(byte_AD9238, v7); } v11 += 2; } else if ( !strcmp(v2, "-m") ) { if ( v3 ) { if ( *v3 ) { v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; strncpy(v12, v3, 0xCu); sub_681780(byte_AD9238, v12); v8 = sub_4316B0(v12); if ( v8 ) sub_680870(byte_AD9238, *(_DWORD *)(v8 + 50), *(_DWORD *)(v8 + 54)); } } v11 += 2; } else { if ( !strcmp(v2, "-t") ) goto LABEL_35; if ( !strcmp(v2, "-n") ) { v10[85] = dword_ACDD68; LABEL_35: ++v11; goto LABEL_36; } if ( !strcmp(v2, "-s") ) { sub_6BA180(&dword_AB6520, 0); goto LABEL_35; } if ( !strcmp(v2, "-a") ) { if ( v3 && *v3 ) { v9 = atoi(v3); sub_680670(byte_AD9238, v9); } v11 += 2; } else { if ( strcmp(v2, "-app") ) goto LABEL_35; if ( v3 && *v3 ) SetWindowTextA(*(HWND *)(v10[17] + 4), v3); v11 += 2; } } LABEL_36: if ( v11 >= dword_BA2C9C ) return; v1 = v11; } } } // BA2C9C: using guessed type int dword_BA2C9C; // BA2CA0: using guessed type int dword_BA2CA0; //----- (004732E0) -------------------------------------------------------- void __thiscall sub_4732E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &MainApp::`vftable'; if ( ChangeDisplaySettingsA(0, 0) ) ChangeDisplaySettingsA((DEVMODEA *)(v1 + 87), 1u); sub_46C4E0(); if ( v1[865] >= 0x10u ) operator delete((void *)v1[860]); v1[865] = 15; v1[864] = 0; *((_BYTE *)v1 + 3440) = 0; if ( v1[858] >= 0x10u ) operator delete((void *)v1[853]); v1[858] = 15; v1[857] = 0; *((_BYTE *)v1 + 3412) = 0; sub_90FFE0(v1 + 169); sub_8AFA00(v1); } // 9B624C: using guessed type void *MainApp::`vftable'; //----- (004733C0) -------------------------------------------------------- char __thiscall sub_4733C0(_DWORD *this) { _DWORD *v1; // ebx char *v3; // ecx char *v4; // eax char *v5; // ecx char *v6; // eax char *v7; // eax char *v8; // eax char *v9; // eax char *v10; // eax char *v11; // ecx char *v12; // eax char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax v1 = this; if ( !sub_47A890("ClassName.shn", 1, 0) ) { MessageBoxA(0, "ClassName.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B8C0("RaceNameInfo.shn", 1, 0) ) { MessageBoxA(0, "RaceNameInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482410("MobInfo.shn", 1, 0) ) { MessageBoxA(0, "MobInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482550("MobViewInfo.shn", 1, 0) ) { MessageBoxA(0, "MobViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482690("NPCViewInfo.shn", 1, 0) ) { MessageBoxA(0, "NPCViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483090("Riding.shn", 1, 0) ) { MessageBoxA(0, "Riding.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F4A0("MoverMain.shn", 1, 0) ) { MessageBoxA(0, "MoverMain.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F5E0("MoverUseSkill.shn", 1, 0) ) { MessageBoxA(0, "MoverUseSkill.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F710("MoverHG.shn", 1, 0) ) { MessageBoxA(0, "MoverHG.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F850("MoverView.shn", 1, 0) ) { MessageBoxA(0, "MoverView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F990("MoverSlotView.shn", 1, 0) ) { MessageBoxA(0, "MoverSlotView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47FAC0("MoverSlotCharAni.shn", 1, 0) ) { MessageBoxA(0, "MoverSlotCharAni.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47FBF0("MoverAbility.shn", 1, 0) ) { MessageBoxA(0, "MoverAbility.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47FD30("MoverItem.shn", 1, 0) ) { MessageBoxA(0, "MoverItem.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47FE60("PupMain.shn", 1, 0) ) { MessageBoxA(0, "PupMain.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47FFA0("PupView.shn", 1, 0) ) { MessageBoxA(0, "PupView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480A90("MoverUpgradeEffect.shn", 1, 0) ) { MessageBoxA(0, "MoverUpgradeEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482B90("MapInfo.shn", 1, 0) ) { MessageBoxA(0, "MapInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482CD0("MapViewInfo.shn", 1, 0) ) { MessageBoxA(0, "MapViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4831D0("MobCoordinate.shn", 1, 0) ) { MessageBoxA(0, "MobCoordinate.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482190("ItemInfo.shn", 1, 0) ) { MessageBoxA(0, "ItemInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } sub_68AED0(); sub_68A8F0(); if ( !sub_4822D0("ItemViewInfo.shn", 1, 0) ) { MessageBoxA(0, "ItemViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47A620("ItemViewEquipTypeInfo.shn", 1, 0) ) { MessageBoxA(0, "ItemViewEquipTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483F60("ItemViewDummy.shn", 1) ) { MessageBoxA(0, "ItemViewDummy.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E020("ActiveSkillGroup.shn", 1, 0) ) { MessageBoxA(0, "ActiveSkillGroup.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D290("ItemActionCondition.shn", 1, 0) ) { MessageBoxA(0, "ItemActionCondition.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47CEF0("ActionEffectItem.shn", 1, 0) ) { MessageBoxA(0, "ActionEffectItem.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D150("ItemActionEffect.shn", 1, 0) ) { MessageBoxA(0, "ItemActionEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47CDC0("SetEffect.shn", 1, 0) ) { MessageBoxA(0, "SetEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47CC80("ItemActionEffectDesc.shn", 1, 0) ) { MessageBoxA(0, "ItemActionEffectDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47CB50("SetItemName.shn", 1, 0) ) { MessageBoxA(0, "SetItemName.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D020("ItemAction.shn", 1, 0) ) { MessageBoxA(0, "ItemAction.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482E10("UpgradeInfo.shn", 1, 0) ) { MessageBoxA(0, "UpgradeInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_6BF860() ) return 0; if ( !sub_482F50("ActionViewInfo.shn", 1, 0) ) { MessageBoxA(0, "ActionViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( v1[865] < 0x10u ) v3 = (char *)(v1 + 860); else v3 = (char *)v1[860]; if ( v1[858] < 0x10u ) v4 = (char *)(v1 + 853); else v4 = (char *)v1[853]; sub_46F620(v1, v4, v3, 40); if ( !(unsigned __int8)sub_64C7D0() ) return 0; if ( v1[865] < 0x10u ) v5 = (char *)(v1 + 860); else v5 = (char *)v1[860]; if ( v1[858] < 0x10u ) v6 = (char *)(v1 + 853); else v6 = (char *)v1[853]; sub_46F620(v1, v6, v5, 50); if ( !sub_47BF00("KingdomQuestDesc.shn", 1, 0) ) { MessageBoxA(0, "KingdomQuestDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47AB10("HairInfo.shn", 1, 0) ) { MessageBoxA(0, "HairInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47AC50("HairColorInfo.shn", 1, 0) ) { MessageBoxA(0, "HairColorInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47BA00("FaceInfo.shn", 1, 0) ) { MessageBoxA(0, "FaceInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C660("WeaponAttrib.shn", 1, 0) ) { MessageBoxA(0, "WeaponAttrib.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_42BEB0() ) return 0; if ( !sub_4827D0("AbState.shn", 1, 0) ) { MessageBoxA(0, "AbState.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482910("AbStateView.shn", 1, 0) ) { MessageBoxA(0, "AbStateView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_482A50("SubAbState.shn", 1, 0) ) { MessageBoxA(0, "SubAbState.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47BB40("DamageSoundInfo.shn", 1, 0) ) { MessageBoxA(0, "DamageSoundInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } v7 = sub_421950(); v8 = (char *)sub_401410(v7, "WeaponTitleData.shn"); if ( !sub_471AA0(v8) ) { MessageBoxA(0, "WeaponTitleData.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } v9 = sub_421950(); v10 = (char *)sub_401410(v9, "CharacterTitleData.shn"); if ( !sub_74CCF0(&unk_AD8C08, v10, 2459, 172) ) { MessageBoxA(0, "CharacterTitleData.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47BC80("Produce.shn", 1, 0) ) { MessageBoxA(0, "Produce.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } sub_6CCC30(); if ( !sub_47C030("ProduceView.shn", 1, 0) ) { MessageBoxA(0, "ProduceView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47BDC0("Gather.shn", 1, 0) ) { MessageBoxA(0, "Gather.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C170("NpcDialogData.shn", 1, 0) ) { MessageBoxA(0, "NpcDialogData.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C2A0("GradeItemOption.shn", 1, 0) ) { MessageBoxA(0, "GradeItemOption.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_632760() ) return 0; if ( !sub_47B500("UpEffect.shn", 1, 0) ) { MessageBoxA(0, "UpEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C8D0("ItemDismantle.shn", 1, 0) ) { MessageBoxA(0, "ItemDismantle.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( v1[865] < 0x10u ) v11 = (char *)(v1 + 860); else v11 = (char *)v1[860]; if ( v1[858] < 0x10u ) v12 = (char *)(v1 + 853); else v12 = (char *)v1[853]; sub_46F620(v1, v12, v11, 60); if ( !sub_47A4F0("ColorInfo.shn", 1, 0) ) { MessageBoxA(0, "ColorInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C3E0("MiniHouse.shn", 1, 0) ) { MessageBoxA(0, "MiniHouse.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C520("ItemShopView.shn", 1, 0) ) { MessageBoxA(0, "ItemShopView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B780("ChargedEffect.shn", 1, 0) ) { MessageBoxA(0, "ChargedEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } v13 = sub_421950(); v14 = (char *)sub_401410(v13, "ItemMix.shn"); if ( !sub_74A2D0(&unk_ACB24C, v14, 44, 64) ) { MessageBoxA(0, "ItemMix.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4516B0() ) { MessageBoxA(0, "FilterSlander InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B280("MiniHouseFurniture.shn", 1, 0) ) { MessageBoxA(0, "MiniHouseFurniture.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B000("MiniHouseObjAni.shn", 1, 0) ) { MessageBoxA(0, "MiniHouseObjAni.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B140("MiniHouseEndure.shn", 1, 0) ) { MessageBoxA(0, "MiniHouseEndure.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47C7A0("WorldMapAvatarInfo.shn", 1, 0) ) { MessageBoxA(0, "WorldMapAvatarInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47AEC0("MiniHouseFurnitureObjEffect.shn", 1, 0) ) { MessageBoxA(0, "MiniHouseFurnitureObjEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47CA10("TownPortal.shn", 1, 0) ) { MessageBoxA(0, "TownPortal.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47AD90("EffectViewInfo.shn", 1, 0) ) { MessageBoxA(0, "EffectViewInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D3D0("GuildTournamentSkillDesc.shn", 1, 0) ) { MessageBoxA(0, "GuildTournamentStateDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D510("GuildTournamentSkill.shn", 1, 0) ) { MessageBoxA(0, "GuildTournamentState.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D650("GuildTournamentRequire.shn", 1, 0) ) { MessageBoxA(0, "GuildTournamentRequire.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47A9D0("ActionEffectInfo.shn", 1, 0) ) { MessageBoxA(0, "ActionEffectInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D780("DiceDividind.shn", 1, 0) ) { MessageBoxA(0, "DiceDividind.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47DB30("MobRandomIdleAni.shn", 1, 0) ) { MessageBoxA(0, "MobRandomIdleAni.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47DA00("GBHouse.shn", 1, 0) ) { MessageBoxA(0, "GBHouse.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47D8C0("GBDICEDividind.shn", 1, 0) ) { MessageBoxA(0, "GBDICEDividind.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47DC60("CharacterTitleStateView.shn", 1, 0) ) { MessageBoxA(0, "CharacterTitleStateView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B3C0("MHEmotion.shn", 1, 0) ) { MessageBoxA(0, "MHEmotion.shn!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483310("MobKillAnnounceText.shn", 1, 0) ) { MessageBoxA(0, "MobKillAnnounceText.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47DDA0("GTIView.shn", 1, 0) ) { MessageBoxA(0, "GTIView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47DEE0("DamageEffect.shn", 1, 0) ) { MessageBoxA(0, "DamageEffect.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E150("MapWayPoint.shn", 1, 0) ) { MessageBoxA(0, "MapWayPoint.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E280("MapLinkPoint.shn", 1, 0) ) { MessageBoxA(0, "MapLinkPoint.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E610("BasicInfoTitle.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoTitle.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E750("BasicInfoLink.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoLink.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E890("BasicInfoTip.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoTip.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E9D0("BasicInfoTipCycle.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoTipCycle.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47EB00("BasicInfoFind.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoFind.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47EC30("BasicInfoFindUI.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoFindUI.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47ED60("BasicInfoFindWord.shn", 1, 0) ) { MessageBoxA(0, "BasicInfoFindWord.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E3B0("BelongTypeInfo.shn", 1, 0) ) { MessageBoxA(0, "BelongTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483450("ChargedIconItem.shn", 1, 0) ) { MessageBoxA(0, "ChargedIconItem.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483590("ChargedMessageItem.shn", 1, 0) ) { MessageBoxA(0, "ChargedMessageItem.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47E4E0("ChargedDeletableBuff.shn", 1, 0) ) { MessageBoxA(0, "ChargedDeletableBuff.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47EE90("CollectCard.shn", 1, 0) ) { MessageBoxA(0, "CollectCard.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47EFC0("CollectCardView.shn", 1, 0) ) { MessageBoxA(0, "CollectCardView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F100("CollectCardGroupDesc.shn", 1, 0) ) { MessageBoxA(0, "CollectCardGroupDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F230("CollectCardReward.shn", 1, 0) ) { MessageBoxA(0, "CollectCardReward.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47F370("CollectCardTitle.shn", 1, 0) ) { MessageBoxA(0, "CollectCardTitle.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47B640("ScriptMsg.shn", 1, 0) ) { MessageBoxA(0, "ScriptMsg.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483940("FaceCutMsg.shn", 1) ) { MessageBoxA(0, "FaceCutMsg.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4836C0("AttendReward.shn", 1, 0) ) { MessageBoxA(0, "AttendReward.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4800E0("KQVoteDesc.shn", 1, 0) ) { MessageBoxA(0, "KQVoteDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480220("KQVoteMajorityRate.shn", 1, 0) ) { MessageBoxA(0, "KQVoteMajorityRate.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480350("KQIsVote.shn", 1, 0) ) { MessageBoxA(0, "KQIsVote.shn. InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480480("KQTeam.shn", 1, 0) ) { MessageBoxA(0, "KQTeam.shn. InitError!!", "Application Initialize Error!", 0x10u); return 0; } v15 = sub_421950(); v16 = (char *)sub_401410(v15, "SingleData.shn"); if ( !sub_747E00(&unk_ACDC6C, v16, 7, 34) ) { MessageBoxA(0, "SingleData.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4805C0("MobConditionView.shn", 1, 0) ) { MessageBoxA(0, "MobConditionView.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4806F0("MobNoFadeIn.shn", 1, 0) ) { MessageBoxA(0, "MobNoFadeIn.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480820("MarketSearchInfo.shn", 1, 0) ) { MessageBoxA(0, "MarketSearchInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480950("ChrCreateEquip.shn", 1, 0) ) { MessageBoxA(0, "ChrCreateEquip.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_47A760("ItemMoney.shn", 1, 0) ) { MessageBoxA(0, "ItemMoney.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480BD0("ChatColor.shn", 1, 0) ) { MessageBoxA(0, "ChatColorTab.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480D00("TermExtendMatch.shn", 1, 0) ) { MessageBoxA(0, "TermExtendMatch.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480E30("TermExtendMatchGroupDesc.shn", 1, 0) ) { MessageBoxA(0, "TermExtendMatchGroupDesc.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_480F70("AbStateMsg.shn", 1, 0) ) { MessageBoxA(0, "AbStateMsg.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4810B0("MinimonInfo.shn", 1, 0) ) { MessageBoxA(0, "MinimonInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_4811E0("MinimonAutoUseItem.shn", 1, 0) ) { MessageBoxA(0, "MinimonAutoUseItem.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_481450("UseClassTypeInfo.shn", 1, 0) ) { MessageBoxA(0, "UseClassTypeInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_481590("ChrBasicEquip.shn", 1, 0) ) { MessageBoxA(0, "ChrBasicEquip.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } if ( !sub_483800("BRAccUpgradeInfo.shn", 1, 0) ) { MessageBoxA(0, "BRAccUpgradeInfo.shn InitError!!", "Application Initialize Error!", 0x10u); return 0; } return 1; } // 64C7D0: using guessed type int sub_64C7D0(void); //----- (00474A60) -------------------------------------------------------- char *__thiscall sub_474A60(char *this, char *a2) { char *v2; // esi v2 = this; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; strncpy(this, a2, 0xCu); return v2; } //----- (00474A90) -------------------------------------------------------- char sub_474A90() { return 1; } //----- (00474AA0) -------------------------------------------------------- void **__thiscall sub_474AA0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C10: using guessed type void *ITableBase::`vftable'; //----- (00474B20) -------------------------------------------------------- void **__thiscall sub_474B20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C20: using guessed type void *ITableBase::`vftable'; //----- (00474BA0) -------------------------------------------------------- void **__thiscall sub_474BA0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C20: using guessed type void *ITableBase::`vftable'; // 9B7C30: using guessed type void *IIDTableBase::`vftable'; //----- (00474C30) -------------------------------------------------------- void **__thiscall sub_474C30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C48: using guessed type void *ITableBase::`vftable'; //----- (00474CB0) -------------------------------------------------------- void **__thiscall sub_474CB0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C48: using guessed type void *ITableBase::`vftable'; // 9B7C58: using guessed type void *IIDTableBase::`vftable'; //----- (00474D40) -------------------------------------------------------- void **__thiscall sub_474D40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C70: using guessed type void *ITableBase::`vftable'; //----- (00474DC0) -------------------------------------------------------- void **__thiscall sub_474DC0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C70: using guessed type void *ITableBase::`vftable'; // 9B7C80: using guessed type void *IIDTableBase::`vftable'; //----- (00474E50) -------------------------------------------------------- void **__thiscall sub_474E50(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7C98: using guessed type void *ITableBase::`vftable'; //----- (00474ED0) -------------------------------------------------------- void **__thiscall sub_474ED0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7CB8: using guessed type void *ITableBase::`vftable'; //----- (00474F50) -------------------------------------------------------- void **__thiscall sub_474F50(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7CB8: using guessed type void *ITableBase::`vftable'; // 9B7CC8: using guessed type void *IIDTableBase::`vftable'; //----- (00474FE0) -------------------------------------------------------- void **__thiscall sub_474FE0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7CE0: using guessed type void *ITableBase::`vftable'; //----- (00475060) -------------------------------------------------------- void **__thiscall sub_475060(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7CF0: using guessed type void *ITableBase::`vftable'; //----- (004750E0) -------------------------------------------------------- void **__thiscall sub_4750E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D00: using guessed type void *ITableBase::`vftable'; //----- (00475160) -------------------------------------------------------- void **__thiscall sub_475160(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D10: using guessed type void *ITableBase::`vftable'; //----- (004751E0) -------------------------------------------------------- void **__thiscall sub_4751E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D20: using guessed type void *ITableBase::`vftable'; //----- (00475260) -------------------------------------------------------- void **__thiscall sub_475260(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D30: using guessed type void *ITableBase::`vftable'; //----- (004752E0) -------------------------------------------------------- void **__thiscall sub_4752E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D40: using guessed type void *ITableBase::`vftable'; //----- (00475360) -------------------------------------------------------- void **__thiscall sub_475360(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D50: using guessed type void *ITableBase::`vftable'; //----- (004753E0) -------------------------------------------------------- void **__thiscall sub_4753E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D60: using guessed type void *ITableBase::`vftable'; //----- (00475460) -------------------------------------------------------- void **__thiscall sub_475460(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D60: using guessed type void *ITableBase::`vftable'; // 9B7D70: using guessed type void *IIDTableBase::`vftable'; //----- (004754F0) -------------------------------------------------------- void **__thiscall sub_4754F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D88: using guessed type void *ITableBase::`vftable'; //----- (00475570) -------------------------------------------------------- void **__thiscall sub_475570(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7D98: using guessed type void *ITableBase::`vftable'; //----- (004755F0) -------------------------------------------------------- void **__thiscall sub_4755F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DF8: using guessed type void *ITableBase::`vftable'; //----- (00475670) -------------------------------------------------------- void **__thiscall sub_475670(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E18: using guessed type void *ITableBase::`vftable'; //----- (004756F0) -------------------------------------------------------- void **__thiscall sub_4756F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E48: using guessed type void *ITableBase::`vftable'; //----- (00475770) -------------------------------------------------------- void **__thiscall sub_475770(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E68: using guessed type void *ITableBase::`vftable'; //----- (004757F0) -------------------------------------------------------- void **__thiscall sub_4757F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E88: using guessed type void *ITableBase::`vftable'; //----- (00475870) -------------------------------------------------------- void **__thiscall sub_475870(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E98: using guessed type void *ITableBase::`vftable'; //----- (004758F0) -------------------------------------------------------- void **__thiscall sub_4758F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7EB8: using guessed type void *ITableBase::`vftable'; //----- (00475970) -------------------------------------------------------- void **__thiscall sub_475970(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7EB8: using guessed type void *ITableBase::`vftable'; // 9B7EC8: using guessed type void *IIDTableBase::`vftable'; //----- (00475A00) -------------------------------------------------------- void **__thiscall sub_475A00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7EE0: using guessed type void *ITableBase::`vftable'; //----- (00475A80) -------------------------------------------------------- void **__thiscall sub_475A80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F08: using guessed type void *ITableBase::`vftable'; //----- (00475B00) -------------------------------------------------------- void **__thiscall sub_475B00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F18: using guessed type void *ITableBase::`vftable'; //----- (00475B80) -------------------------------------------------------- void **__thiscall sub_475B80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F38: using guessed type void *ITableBase::`vftable'; //----- (00475C00) -------------------------------------------------------- void **__thiscall sub_475C00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F48: using guessed type void *ITableBase::`vftable'; //----- (00475C80) -------------------------------------------------------- void **__thiscall sub_475C80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F68: using guessed type void *ITableBase::`vftable'; //----- (00475D00) -------------------------------------------------------- void **__thiscall sub_475D00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F90: using guessed type void *ITableBase::`vftable'; //----- (00475D80) -------------------------------------------------------- void **__thiscall sub_475D80(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F90: using guessed type void *ITableBase::`vftable'; // 9B7FA0: using guessed type void *IIDTableBase::`vftable'; //----- (00475E10) -------------------------------------------------------- void **__thiscall sub_475E10(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7FD8: using guessed type void *ITableBase::`vftable'; //----- (00475E90) -------------------------------------------------------- void **__thiscall sub_475E90(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7FE8: using guessed type void *ITableBase::`vftable'; //----- (00475F10) -------------------------------------------------------- void **__thiscall sub_475F10(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8008: using guessed type void *ITableBase::`vftable'; //----- (00475F90) -------------------------------------------------------- void **__thiscall sub_475F90(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8028: using guessed type void *ITableBase::`vftable'; //----- (00476010) -------------------------------------------------------- void **__thiscall sub_476010(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8048: using guessed type void *ITableBase::`vftable'; //----- (00476090) -------------------------------------------------------- void **__thiscall sub_476090(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8068: using guessed type void *ITableBase::`vftable'; //----- (00476110) -------------------------------------------------------- void **__thiscall sub_476110(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8088: using guessed type void *ITableBase::`vftable'; //----- (00476190) -------------------------------------------------------- void **__thiscall sub_476190(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8088: using guessed type void *ITableBase::`vftable'; // 9B8098: using guessed type void *IIDTableBase::`vftable'; //----- (00476220) -------------------------------------------------------- void **__thiscall sub_476220(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B80B0: using guessed type void *ITableBase::`vftable'; //----- (004762A0) -------------------------------------------------------- void **__thiscall sub_4762A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B80C0: using guessed type void *ITableBase::`vftable'; //----- (00476320) -------------------------------------------------------- void **__thiscall sub_476320(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8100: using guessed type void *ITableBase::`vftable'; //----- (004763A0) -------------------------------------------------------- void **__thiscall sub_4763A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8110: using guessed type void *ITableBase::`vftable'; //----- (00476420) -------------------------------------------------------- void **__thiscall sub_476420(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8130: using guessed type void *ITableBase::`vftable'; //----- (004764A0) -------------------------------------------------------- void **__thiscall sub_4764A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8140: using guessed type void *ITableBase::`vftable'; //----- (00476520) -------------------------------------------------------- void **__thiscall sub_476520(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8160: using guessed type void *ITableBase::`vftable'; //----- (004765A0) -------------------------------------------------------- void **__thiscall sub_4765A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8170: using guessed type void *ITableBase::`vftable'; //----- (00476620) -------------------------------------------------------- void **__thiscall sub_476620(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81A0: using guessed type void *ITableBase::`vftable'; //----- (004766A0) -------------------------------------------------------- void **__thiscall sub_4766A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81C0: using guessed type void *ITableBase::`vftable'; //----- (00476720) -------------------------------------------------------- void **__thiscall sub_476720(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81D0: using guessed type void *ITableBase::`vftable'; //----- (004767A0) -------------------------------------------------------- void **__thiscall sub_4767A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81E0: using guessed type void *ITableBase::`vftable'; //----- (00476820) -------------------------------------------------------- void **__thiscall sub_476820(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8200: using guessed type void *ITableBase::`vftable'; //----- (004768A0) -------------------------------------------------------- void **__thiscall sub_4768A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8210: using guessed type void *ITableBase::`vftable'; //----- (00476920) -------------------------------------------------------- void **__thiscall sub_476920(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8260: using guessed type void *ITableBase::`vftable'; //----- (004769A0) -------------------------------------------------------- void **__thiscall sub_4769A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8270: using guessed type void *ITableBase::`vftable'; //----- (00476A30) -------------------------------------------------------- void **__thiscall sub_476A30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8298: using guessed type void *ITableBase::`vftable'; //----- (00476AB0) -------------------------------------------------------- void **__thiscall sub_476AB0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B82A8: using guessed type void *ITableBase::`vftable'; //----- (00476B30) -------------------------------------------------------- void **__thiscall sub_476B30(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B82A8: using guessed type void *ITableBase::`vftable'; // 9B82B8: using guessed type void *IIDTableBase::`vftable'; //----- (00476BC0) -------------------------------------------------------- void **__thiscall sub_476BC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B82D0: using guessed type void *ITableBase::`vftable'; //----- (00476C40) -------------------------------------------------------- void **__thiscall sub_476C40(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B82D0: using guessed type void *ITableBase::`vftable'; // 9B82E0: using guessed type void *IIDTableBase::`vftable'; //----- (00476CD0) -------------------------------------------------------- void **__thiscall sub_476CD0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8308: using guessed type void *ITableBase::`vftable'; //----- (00476D50) -------------------------------------------------------- void **__thiscall sub_476D50(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8318: using guessed type void *ITableBase::`vftable'; //----- (00476DD0) -------------------------------------------------------- void **__thiscall sub_476DD0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8328: using guessed type void *ITableBase::`vftable'; //----- (00476E50) -------------------------------------------------------- void **__thiscall sub_476E50(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8358: using guessed type void *ITableBase::`vftable'; //----- (00476ED0) -------------------------------------------------------- void **__thiscall sub_476ED0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8358: using guessed type void *ITableBase::`vftable'; // 9B8368: using guessed type void *IIDTableBase::`vftable'; //----- (00476F60) -------------------------------------------------------- void **__thiscall sub_476F60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8380: using guessed type void *ITableBase::`vftable'; //----- (00476FE0) -------------------------------------------------------- void **__thiscall sub_476FE0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8380: using guessed type void *ITableBase::`vftable'; // 9B8390: using guessed type void *IIDTableBase::`vftable'; //----- (00477070) -------------------------------------------------------- void **__thiscall sub_477070(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B83A8: using guessed type void *ITableBase::`vftable'; //----- (004770F0) -------------------------------------------------------- void **__thiscall sub_4770F0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B83A8: using guessed type void *ITableBase::`vftable'; // 9B83B8: using guessed type void *IIDTableBase::`vftable'; //----- (00477180) -------------------------------------------------------- void **__thiscall sub_477180(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B83E0: using guessed type void *ITableBase::`vftable'; //----- (00477200) -------------------------------------------------------- void **__thiscall sub_477200(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8400: using guessed type void *ITableBase::`vftable'; //----- (00477280) -------------------------------------------------------- void **__thiscall sub_477280(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8410: using guessed type void *ITableBase::`vftable'; //----- (00477300) -------------------------------------------------------- void **__thiscall sub_477300(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8440: using guessed type void *ITableBase::`vftable'; //----- (00477380) -------------------------------------------------------- void **__thiscall sub_477380(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8468: using guessed type void *ITableBase::`vftable'; //----- (00477400) -------------------------------------------------------- void **__thiscall sub_477400(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8468: using guessed type void *ITableBase::`vftable'; // 9B8478: using guessed type void *IIDTableBase::`vftable'; //----- (00477490) -------------------------------------------------------- void **__thiscall sub_477490(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8490: using guessed type void *ITableBase::`vftable'; //----- (00477510) -------------------------------------------------------- void **__thiscall sub_477510(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B84B8: using guessed type void *ITableBase::`vftable'; //----- (00477590) -------------------------------------------------------- void **__thiscall sub_477590(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B84C8: using guessed type void *ITableBase::`vftable'; //----- (00477610) -------------------------------------------------------- int __thiscall sub_477610(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 1073741822 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (00477690) -------------------------------------------------------- char __cdecl sub_477690(const char *a1) { unsigned int v1; // edi v1 = 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v1) + 5), a1) ) { if ( (signed int)++v1 >= 28 ) return 0; } return *(_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v1); } // AC9C84: using guessed type int dword_AC9C84; //----- (00477700) -------------------------------------------------------- int __thiscall sub_477700(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 107374181 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (00477780) -------------------------------------------------------- _DWORD *__thiscall sub_477780(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAA8 & 1) ) { dword_ACDAA8 |= 1u; atexit(sub_9A0EB0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ColorInfoTable::`vftable'; return v1; } // 9B8298: using guessed type void *ITableBase::`vftable'; // 9B84E8: using guessed type void *ColorInfoTable::`vftable'; // ACDAA8: using guessed type int dword_ACDAA8; //----- (004777C0) -------------------------------------------------------- bool sub_4777C0() { int v0; // eax v0 = *(_DWORD *)(dword_ACD914 + 56); return v0 && *(_DWORD *)(v0 + 40) == 55; } // ACD914: using guessed type int dword_ACD914; //----- (004777E0) -------------------------------------------------------- _DWORD *__thiscall sub_4777E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAAC & 1) ) { dword_ACDAAC |= 1u; atexit(sub_9A0E80); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemViewEquipTypeInfoTab::`vftable'; return v1; } // 9B82F8: using guessed type void *ITableBase::`vftable'; // 9B84F8: using guessed type void *ItemViewEquipTypeInfoTab::`vftable'; // ACDAA8: using guessed type int dword_ACDAA8; // ACDAAC: using guessed type int dword_ACDAAC; //----- (00477820) -------------------------------------------------------- void **__thiscall sub_477820(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B82F8: using guessed type void *ITableBase::`vftable'; //----- (004778A0) -------------------------------------------------------- _DWORD *__thiscall sub_4778A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAB0 & 1) ) { dword_ACDAB0 |= 1u; atexit(sub_9A0E50); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemMoneyTab::`vftable'; return v1; } // 9B8308: using guessed type void *ITableBase::`vftable'; // 9B8508: using guessed type void *ItemMoneyTab::`vftable'; // ACDAAC: using guessed type int dword_ACDAAC; // ACDAB0: using guessed type int dword_ACDAB0; //----- (004778E0) -------------------------------------------------------- _DWORD *__thiscall sub_4778E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAB4 & 1) ) { dword_ACDAB4 |= 1u; atexit(sub_9A0E20); } *((_BYTE *)v1 + 68) = 0; *v1 = &CharClass::`vftable'; return v1; } // 9B8318: using guessed type void *ITableBase::`vftable'; // 9B8518: using guessed type void *CharClass::`vftable'; // ACDAB0: using guessed type int dword_ACDAB0; // ACDAB4: using guessed type int dword_ACDAB4; //----- (00477920) -------------------------------------------------------- _DWORD *__thiscall sub_477920(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAB8 & 1) ) { dword_ACDAB8 |= 1u; atexit(sub_9A0DF0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ActionEffectInfoTab::`vftable'; return v1; } // 9B8328: using guessed type void *ITableBase::`vftable'; // 9B8528: using guessed type void *ActionEffectInfoTab::`vftable'; // ACDAB4: using guessed type int dword_ACDAB4; // ACDAB8: using guessed type int dword_ACDAB8; //----- (00477960) -------------------------------------------------------- _DWORD *__thiscall sub_477960(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDABC & 1) ) { dword_ACDABC |= 1u; atexit(sub_9A0DC0); } *((_BYTE *)v1 + 68) = 0; *v1 = &HairInfoTab::`vftable'; return v1; } // 9B8338: using guessed type void *ITableBase::`vftable'; // 9B8538: using guessed type void *HairInfoTab::`vftable'; // ACDAB8: using guessed type int dword_ACDAB8; // ACDABC: using guessed type int dword_ACDABC; //----- (004779A0) -------------------------------------------------------- void **__thiscall sub_4779A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8338: using guessed type void *ITableBase::`vftable'; //----- (00477A20) -------------------------------------------------------- _DWORD *__thiscall sub_477A20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAC0 & 1) ) { dword_ACDAC0 |= 1u; atexit(sub_9A0D90); } *((_BYTE *)v1 + 68) = 0; *v1 = &HairColorInfoTab::`vftable'; return v1; } // 9B8348: using guessed type void *ITableBase::`vftable'; // 9B8548: using guessed type void *HairColorInfoTab::`vftable'; // ACDABC: using guessed type int dword_ACDABC; // ACDAC0: using guessed type int dword_ACDAC0; //----- (00477A60) -------------------------------------------------------- void **__thiscall sub_477A60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8348: using guessed type void *ITableBase::`vftable'; //----- (00477AE0) -------------------------------------------------------- _DWORD *__thiscall sub_477AE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAC4 & 1) ) { dword_ACDAC4 |= 1u; atexit(sub_9A0D60); } *((_BYTE *)v1 + 68) = 0; *v1 = &ShakeEffectViewInfoTab::`vftable'; return v1; } // 9B83D0: using guessed type void *ITableBase::`vftable'; // 9B8558: using guessed type void *ShakeEffectViewInfoTab::`vftable'; // ACDAC0: using guessed type int dword_ACDAC0; // ACDAC4: using guessed type int dword_ACDAC4; //----- (00477B20) -------------------------------------------------------- void **__thiscall sub_477B20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B83D0: using guessed type void *ITableBase::`vftable'; //----- (00477BA0) -------------------------------------------------------- _DWORD *__thiscall sub_477BA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAC8 & 1) ) { dword_ACDAC8 |= 1u; atexit(sub_9A0D30); } *((_BYTE *)v1 + 68) = 0; *v1 = &MHFurnitureObjEffectTab::`vftable'; return v1; } // 9B83E0: using guessed type void *ITableBase::`vftable'; // 9B8568: using guessed type void *MHFurnitureObjEffectTab::`vftable'; // ACDAC4: using guessed type int dword_ACDAC4; // ACDAC8: using guessed type int dword_ACDAC8; //----- (00477BE0) -------------------------------------------------------- _DWORD *__thiscall sub_477BE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDACC & 1) ) { dword_ACDACC |= 1u; atexit(sub_9A0D00); } *((_BYTE *)v1 + 68) = 0; *v1 = &MiniHouseObjAniInfoTab::`vftable'; return v1; } // 9B83F0: using guessed type void *ITableBase::`vftable'; // 9B8578: using guessed type void *MiniHouseObjAniInfoTab::`vftable'; // ACDAC8: using guessed type int dword_ACDAC8; // ACDACC: using guessed type int dword_ACDACC; //----- (00477C20) -------------------------------------------------------- void **__thiscall sub_477C20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B83F0: using guessed type void *ITableBase::`vftable'; //----- (00477CA0) -------------------------------------------------------- _DWORD *__thiscall sub_477CA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAD0 & 1) ) { dword_ACDAD0 |= 1u; atexit(sub_9A0CD0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MiniHouseEndureInfoTable::`vftable'; return v1; } // 9B8400: using guessed type void *ITableBase::`vftable'; // 9B8588: using guessed type void *MiniHouseEndureInfoTable::`vftable'; // ACDACC: using guessed type int dword_ACDACC; // ACDAD0: using guessed type int dword_ACDAD0; //----- (00477CE0) -------------------------------------------------------- _DWORD *__thiscall sub_477CE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAD4 & 1) ) { dword_ACDAD4 |= 1u; atexit(sub_9A0CA0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MiniHouseFuritureInfoTab::`vftable'; return v1; } // 9B8410: using guessed type void *ITableBase::`vftable'; // 9B8598: using guessed type void *MiniHouseFuritureInfoTab::`vftable'; // ACDAD0: using guessed type int dword_ACDAD0; // ACDAD4: using guessed type int dword_ACDAD4; //----- (00477D20) -------------------------------------------------------- _DWORD *__thiscall sub_477D20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAD8 & 1) ) { dword_ACDAD8 |= 1u; atexit(sub_9A0C70); } *((_BYTE *)v1 + 68) = 0; *v1 = &MiniHouseEmotionTab::`vftable'; return v1; } // 9B8420: using guessed type void *ITableBase::`vftable'; // 9B85A8: using guessed type void *MiniHouseEmotionTab::`vftable'; // ACDAD4: using guessed type int dword_ACDAD4; // ACDAD8: using guessed type int dword_ACDAD8; //----- (00477D60) -------------------------------------------------------- void **__thiscall sub_477D60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8420: using guessed type void *ITableBase::`vftable'; //----- (00477DE0) -------------------------------------------------------- _DWORD *__thiscall sub_477DE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDADC & 1) ) { dword_ACDADC |= 1u; atexit(sub_9A0C40); } *((_BYTE *)v1 + 68) = 0; *v1 = &UpEffectTab::`vftable'; return v1; } // 9B8430: using guessed type void *ITableBase::`vftable'; // 9B85B8: using guessed type void *UpEffectTab::`vftable'; // ACDAD8: using guessed type int dword_ACDAD8; // ACDADC: using guessed type int dword_ACDADC; //----- (00477E20) -------------------------------------------------------- void **__thiscall sub_477E20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8430: using guessed type void *ITableBase::`vftable'; //----- (00477EA0) -------------------------------------------------------- _DWORD *__thiscall sub_477EA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAE0 & 1) ) { dword_ACDAE0 |= 1u; atexit(sub_9A0C10); } *((_BYTE *)v1 + 68) = 0; *v1 = &ScriptMsgTab::`vftable'; return v1; } // 9B84B8: using guessed type void *ITableBase::`vftable'; // 9B85C8: using guessed type void *ScriptMsgTab::`vftable'; // ACDADC: using guessed type int dword_ACDADC; // ACDAE0: using guessed type int dword_ACDAE0; //----- (00477EE0) -------------------------------------------------------- _DWORD *__thiscall sub_477EE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAE4 & 1) ) { dword_ACDAE4 |= 1u; atexit(sub_9A0BE0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ChargedEffectTable::`vftable'; return v1; } // 9B84D8: using guessed type void *ITableBase::`vftable'; // 9B85D8: using guessed type void *ChargedEffectTable::`vftable'; // ACDAE0: using guessed type int dword_ACDAE0; // ACDAE4: using guessed type int dword_ACDAE4; //----- (00477F20) -------------------------------------------------------- void **__thiscall sub_477F20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B84D8: using guessed type void *ITableBase::`vftable'; //----- (00477FA0) -------------------------------------------------------- _DWORD *__thiscall sub_477FA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAE8 & 1) ) { dword_ACDAE8 |= 1u; atexit(sub_9A0BB0); } *((_BYTE *)v1 + 68) = 0; *v1 = &CharRace::`vftable'; return v1; } // 9B7C10: using guessed type void *ITableBase::`vftable'; // 9B85E8: using guessed type void *CharRace::`vftable'; // ACDAE4: using guessed type int dword_ACDAE4; // ACDAE8: using guessed type int dword_ACDAE8; //----- (00477FE0) -------------------------------------------------------- _DWORD *__thiscall sub_477FE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAEC & 1) ) { dword_ACDAEC |= 1u; atexit(sub_9A0B80); } *((_BYTE *)v1 + 68) = 0; *v1 = &FaceInfoTab::`vftable'; return v1; } // 9B7C98: using guessed type void *ITableBase::`vftable'; // 9B85F8: using guessed type void *FaceInfoTab::`vftable'; // ACDAE8: using guessed type int dword_ACDAE8; // ACDAEC: using guessed type int dword_ACDAEC; //----- (00478020) -------------------------------------------------------- _DWORD *__thiscall sub_478020(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAF0 & 1) ) { dword_ACDAF0 |= 1u; atexit(sub_9A0B50); } *((_BYTE *)v1 + 68) = 0; *v1 = &DmgSndTab::`vftable'; return v1; } // 9B7CA8: using guessed type void *ITableBase::`vftable'; // 9B8608: using guessed type void *DmgSndTab::`vftable'; // ACDAEC: using guessed type int dword_ACDAEC; // ACDAF0: using guessed type int dword_ACDAF0; //----- (00478060) -------------------------------------------------------- void **__thiscall sub_478060(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7CA8: using guessed type void *ITableBase::`vftable'; //----- (004780E0) -------------------------------------------------------- _DWORD *__thiscall sub_4780E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAF4 & 1) ) { dword_ACDAF4 |= 1u; atexit(sub_9A0B20); } *((_BYTE *)v1 + 68) = 0; *v1 = &ProduceInfoTable::`vftable'; return v1; } // 9B7CE0: using guessed type void *ITableBase::`vftable'; // 9B8618: using guessed type void *ProduceInfoTable::`vftable'; // ACDAF0: using guessed type int dword_ACDAF0; // ACDAF4: using guessed type int dword_ACDAF4; //----- (00478120) -------------------------------------------------------- _DWORD *__thiscall sub_478120(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAF8 & 1) ) { dword_ACDAF8 |= 1u; atexit(sub_9A0AF0); } *((_BYTE *)v1 + 68) = 0; *v1 = &GatherInfoTable::`vftable'; return v1; } // 9B7CF0: using guessed type void *ITableBase::`vftable'; // 9B8628: using guessed type void *GatherInfoTable::`vftable'; // ACDAF4: using guessed type int dword_ACDAF4; // ACDAF8: using guessed type int dword_ACDAF8; //----- (00478160) -------------------------------------------------------- _DWORD *__thiscall sub_478160(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDAFC & 1) ) { dword_ACDAFC |= 1u; atexit(sub_9A0AC0); } *((_BYTE *)v1 + 68) = 0; *v1 = &KQDescTable::`vftable'; return v1; } // 9B7D00: using guessed type void *ITableBase::`vftable'; // 9B8638: using guessed type void *KQDescTable::`vftable'; // ACDAF8: using guessed type int dword_ACDAF8; // ACDAFC: using guessed type int dword_ACDAFC; //----- (004781A0) -------------------------------------------------------- _DWORD *__thiscall sub_4781A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB00 & 1) ) { dword_ACDB00 |= 1u; atexit(sub_9A0A90); } *((_BYTE *)v1 + 68) = 0; *v1 = &ProduceViewInfoTable::`vftable'; return v1; } // 9B7D10: using guessed type void *ITableBase::`vftable'; // 9B8648: using guessed type void *ProduceViewInfoTable::`vftable'; // ACDAFC: using guessed type int dword_ACDAFC; // ACDB00: using guessed type int dword_ACDB00; //----- (004781E0) -------------------------------------------------------- _DWORD *__thiscall sub_4781E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB04 & 1) ) { dword_ACDB04 |= 1u; atexit(sub_9A0A60); } *((_BYTE *)v1 + 68) = 0; *v1 = &NpcDialogDataTable::`vftable'; return v1; } // 9B7D20: using guessed type void *ITableBase::`vftable'; // 9B8658: using guessed type void *NpcDialogDataTable::`vftable'; // ACDB00: using guessed type int dword_ACDB00; // ACDB04: using guessed type int dword_ACDB04; //----- (00478220) -------------------------------------------------------- _DWORD *__thiscall sub_478220(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB08 & 1) ) { dword_ACDB08 |= 1u; atexit(sub_9A0A30); } *((_BYTE *)v1 + 68) = 0; *v1 = &GradeItemOptionTab::`vftable'; return v1; } // 9B7D30: using guessed type void *ITableBase::`vftable'; // 9B8668: using guessed type void *GradeItemOptionTab::`vftable'; // ACDB04: using guessed type int dword_ACDB04; // ACDB08: using guessed type int dword_ACDB08; //----- (00478260) -------------------------------------------------------- _DWORD *__thiscall sub_478260(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB0C & 1) ) { dword_ACDB0C |= 1u; atexit(sub_9A0A00); } *((_BYTE *)v1 + 68) = 0; *v1 = &MiniHouseTable::`vftable'; return v1; } // 9B7D40: using guessed type void *ITableBase::`vftable'; // 9B8678: using guessed type void *MiniHouseTable::`vftable'; // ACDB08: using guessed type int dword_ACDB08; // ACDB0C: using guessed type int dword_ACDB0C; //----- (004782A0) -------------------------------------------------------- _DWORD *__thiscall sub_4782A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB10 & 1) ) { dword_ACDB10 |= 1u; atexit(sub_9A09D0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemShopViewTable::`vftable'; return v1; } // 9B7D50: using guessed type void *ITableBase::`vftable'; // 9B8688: using guessed type void *ItemShopViewTable::`vftable'; // ACDB0C: using guessed type int dword_ACDB0C; // ACDB10: using guessed type int dword_ACDB10; //----- (004782E0) -------------------------------------------------------- _DWORD *__thiscall sub_4782E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB14 & 1) ) { dword_ACDB14 |= 1u; atexit(sub_9A09A0); } *((_BYTE *)v1 + 68) = 0; *v1 = &WeaponAttribTab::`vftable'; return v1; } // 9B7D88: using guessed type void *ITableBase::`vftable'; // 9B8698: using guessed type void *WeaponAttribTab::`vftable'; // ACDB10: using guessed type int dword_ACDB10; // ACDB14: using guessed type int dword_ACDB14; //----- (00478320) -------------------------------------------------------- _DWORD *__thiscall sub_478320(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB18 & 1) ) { dword_ACDB18 |= 1u; atexit(sub_9A0970); } *((_BYTE *)v1 + 68) = 0; *v1 = &WorldMapAvatarInfoTab::`vftable'; return v1; } // 9B7D98: using guessed type void *ITableBase::`vftable'; // 9B86A8: using guessed type void *WorldMapAvatarInfoTab::`vftable'; // ACDB14: using guessed type int dword_ACDB14; // ACDB18: using guessed type int dword_ACDB18; //----- (00478360) -------------------------------------------------------- _DWORD *__thiscall sub_478360(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB1C & 1) ) { dword_ACDB1C |= 1u; atexit(sub_9A0940); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemDismantleTab::`vftable'; return v1; } // 9B7DA8: using guessed type void *ITableBase::`vftable'; // 9B86B8: using guessed type void *ItemDismantleTab::`vftable'; // ACDB18: using guessed type int dword_ACDB18; // ACDB1C: using guessed type int dword_ACDB1C; //----- (004783A0) -------------------------------------------------------- void **__thiscall sub_4783A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DA8: using guessed type void *ITableBase::`vftable'; //----- (00478420) -------------------------------------------------------- _DWORD *__thiscall sub_478420(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB20 & 1) ) { dword_ACDB20 |= 1u; atexit(sub_9A0910); } *((_BYTE *)v1 + 68) = 0; *v1 = &TownPortalInfoTable::`vftable'; return v1; } // 9B7DB8: using guessed type void *ITableBase::`vftable'; // 9B86C8: using guessed type void *TownPortalInfoTable::`vftable'; // ACDB1C: using guessed type int dword_ACDB1C; // ACDB20: using guessed type int dword_ACDB20; //----- (00478460) -------------------------------------------------------- void **__thiscall sub_478460(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DB8: using guessed type void *ITableBase::`vftable'; //----- (004784E0) -------------------------------------------------------- _DWORD *__thiscall sub_4784E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB24 & 1) ) { dword_ACDB24 |= 1u; atexit(sub_9A08E0); } *((_BYTE *)v1 + 68) = 0; *v1 = &SetItemNameTab::`vftable'; return v1; } // 9B7DC8: using guessed type void *ITableBase::`vftable'; // 9B86D8: using guessed type void *SetItemNameTab::`vftable'; // ACDB20: using guessed type int dword_ACDB20; // ACDB24: using guessed type int dword_ACDB24; //----- (00478520) -------------------------------------------------------- void **__thiscall sub_478520(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DC8: using guessed type void *ITableBase::`vftable'; //----- (004785A0) -------------------------------------------------------- _DWORD *__thiscall sub_4785A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB28 & 1) ) { dword_ACDB28 |= 1u; atexit(sub_9A08B0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemActionEffectDescTab::`vftable'; return v1; } // 9B7DD8: using guessed type void *ITableBase::`vftable'; // 9B86E8: using guessed type void *ItemActionEffectDescTab::`vftable'; // ACDB24: using guessed type int dword_ACDB24; // ACDB28: using guessed type int dword_ACDB28; //----- (004785E0) -------------------------------------------------------- void **__thiscall sub_4785E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DD8: using guessed type void *ITableBase::`vftable'; //----- (00478660) -------------------------------------------------------- _DWORD *__thiscall sub_478660(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB2C & 1) ) { dword_ACDB2C |= 1u; atexit(sub_9A0880); } *((_BYTE *)v1 + 68) = 0; *v1 = &SetEffectTab::`vftable'; return v1; } // 9B7DE8: using guessed type void *ITableBase::`vftable'; // 9B86F8: using guessed type void *SetEffectTab::`vftable'; // ACDB28: using guessed type int dword_ACDB28; // ACDB2C: using guessed type int dword_ACDB2C; //----- (004786A0) -------------------------------------------------------- void **__thiscall sub_4786A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7DE8: using guessed type void *ITableBase::`vftable'; //----- (00478720) -------------------------------------------------------- _DWORD *__thiscall sub_478720(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB30 & 1) ) { dword_ACDB30 |= 1u; atexit(sub_9A0850); } *((_BYTE *)v1 + 68) = 0; *v1 = &ActionEffectItemTab::`vftable'; return v1; } // 9B7DF8: using guessed type void *ITableBase::`vftable'; // 9B8708: using guessed type void *ActionEffectItemTab::`vftable'; // ACDB2C: using guessed type int dword_ACDB2C; // ACDB30: using guessed type int dword_ACDB30; //----- (00478760) -------------------------------------------------------- _DWORD *__thiscall sub_478760(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB34 & 1) ) { dword_ACDB34 |= 1u; atexit(sub_9A0820); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemActionTab::`vftable'; return v1; } // 9B7E08: using guessed type void *ITableBase::`vftable'; // 9B8718: using guessed type void *ItemActionTab::`vftable'; // ACDB30: using guessed type int dword_ACDB30; // ACDB34: using guessed type int dword_ACDB34; //----- (004787A0) -------------------------------------------------------- void **__thiscall sub_4787A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E08: using guessed type void *ITableBase::`vftable'; //----- (00478820) -------------------------------------------------------- _DWORD *__thiscall sub_478820(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB38 & 1) ) { dword_ACDB38 |= 1u; atexit(sub_9A07F0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemActionEffectTab::`vftable'; return v1; } // 9B7E18: using guessed type void *ITableBase::`vftable'; // 9B8728: using guessed type void *ItemActionEffectTab::`vftable'; // ACDB34: using guessed type int dword_ACDB34; // ACDB38: using guessed type int dword_ACDB38; //----- (00478860) -------------------------------------------------------- _DWORD *__thiscall sub_478860(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB3C & 1) ) { dword_ACDB3C |= 1u; atexit(sub_9A07C0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemActionConditionTab::`vftable'; return v1; } // 9B7E28: using guessed type void *ITableBase::`vftable'; // 9B8738: using guessed type void *ItemActionConditionTab::`vftable'; // ACDB38: using guessed type int dword_ACDB38; // ACDB3C: using guessed type int dword_ACDB3C; //----- (004788A0) -------------------------------------------------------- void **__thiscall sub_4788A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E28: using guessed type void *ITableBase::`vftable'; //----- (00478920) -------------------------------------------------------- _DWORD *__thiscall sub_478920(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB40 & 1) ) { dword_ACDB40 |= 1u; atexit(sub_9A0790); } *((_BYTE *)v1 + 68) = 0; *v1 = &GuildTournamentStateDescTab::`vftable'; return v1; } // 9B7E38: using guessed type void *ITableBase::`vftable'; // 9B8748: using guessed type void *GuildTournamentStateDescTab::`vftable'; // ACDB3C: using guessed type int dword_ACDB3C; // ACDB40: using guessed type int dword_ACDB40; //----- (00478960) -------------------------------------------------------- void **__thiscall sub_478960(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E38: using guessed type void *ITableBase::`vftable'; //----- (004789E0) -------------------------------------------------------- _DWORD *__thiscall sub_4789E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB44 & 1) ) { dword_ACDB44 |= 1u; atexit(sub_9A0760); } *((_BYTE *)v1 + 68) = 0; *v1 = &GuildTournamentStateTab::`vftable'; return v1; } // 9B7E48: using guessed type void *ITableBase::`vftable'; // 9B8758: using guessed type void *GuildTournamentStateTab::`vftable'; // ACDB40: using guessed type int dword_ACDB40; // ACDB44: using guessed type int dword_ACDB44; //----- (00478A20) -------------------------------------------------------- _DWORD *__thiscall sub_478A20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB48 & 1) ) { dword_ACDB48 |= 1u; atexit(sub_9A0730); } *((_BYTE *)v1 + 68) = 0; *v1 = >RequireTab::`vftable'; return v1; } // 9B7E58: using guessed type void *ITableBase::`vftable'; // 9B8768: using guessed type void *GTRequireTab::`vftable'; // ACDB44: using guessed type int dword_ACDB44; // ACDB48: using guessed type int dword_ACDB48; //----- (00478A60) -------------------------------------------------------- void **__thiscall sub_478A60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E58: using guessed type void *ITableBase::`vftable'; //----- (00478AE0) -------------------------------------------------------- _DWORD *__thiscall sub_478AE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB4C & 1) ) { dword_ACDB4C |= 1u; atexit(sub_9A0700); } *((_BYTE *)v1 + 68) = 0; *v1 = &DiceDividIndTab::`vftable'; return v1; } // 9B7E68: using guessed type void *ITableBase::`vftable'; // 9B8778: using guessed type void *DiceDividIndTab::`vftable'; // ACDB48: using guessed type int dword_ACDB48; // ACDB4C: using guessed type int dword_ACDB4C; //----- (00478B20) -------------------------------------------------------- _DWORD *__thiscall sub_478B20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB50 & 1) ) { dword_ACDB50 |= 1u; atexit(sub_9A06D0); } *((_BYTE *)v1 + 68) = 0; *v1 = &GBDiceDividIndTab::`vftable'; return v1; } // 9B7E78: using guessed type void *ITableBase::`vftable'; // 9B8788: using guessed type void *GBDiceDividIndTab::`vftable'; // ACDB4C: using guessed type int dword_ACDB4C; // ACDB50: using guessed type int dword_ACDB50; //----- (00478B60) -------------------------------------------------------- void **__thiscall sub_478B60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7E78: using guessed type void *ITableBase::`vftable'; //----- (00478BE0) -------------------------------------------------------- _DWORD *__thiscall sub_478BE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB54 & 1) ) { dword_ACDB54 |= 1u; atexit(sub_9A06A0); } *((_BYTE *)v1 + 68) = 0; *v1 = &GBHouseTab::`vftable'; return v1; } // 9B7E88: using guessed type void *ITableBase::`vftable'; // 9B8798: using guessed type void *GBHouseTab::`vftable'; // ACDB50: using guessed type int dword_ACDB50; // ACDB54: using guessed type int dword_ACDB54; //----- (00478C20) -------------------------------------------------------- _DWORD *__thiscall sub_478C20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB58 & 1) ) { dword_ACDB58 |= 1u; atexit(sub_9A0670); } *((_BYTE *)v1 + 68) = 0; *v1 = &MobRandomIdleAniTab::`vftable'; return v1; } // 9B7E98: using guessed type void *ITableBase::`vftable'; // 9B87A8: using guessed type void *MobRandomIdleAniTab::`vftable'; // ACDB54: using guessed type int dword_ACDB54; // ACDB58: using guessed type int dword_ACDB58; //----- (00478C60) -------------------------------------------------------- _DWORD *__thiscall sub_478C60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB5C & 1) ) { dword_ACDB5C |= 1u; atexit(sub_9A0640); } *((_BYTE *)v1 + 68) = 0; *v1 = &CharacterTitleStateViewTab::`vftable'; return v1; } // 9B7EA8: using guessed type void *ITableBase::`vftable'; // 9B87B8: using guessed type void *CharacterTitleStateViewTab::`vftable'; // ACDB58: using guessed type int dword_ACDB58; // ACDB5C: using guessed type int dword_ACDB5C; //----- (00478CA0) -------------------------------------------------------- void **__thiscall sub_478CA0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7EA8: using guessed type void *ITableBase::`vftable'; //----- (00478D20) -------------------------------------------------------- _DWORD *__thiscall sub_478D20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB60 & 1) ) { dword_ACDB60 |= 1u; atexit(sub_9A0610); } *((_BYTE *)v1 + 68) = 0; *v1 = >IViewInfoTab::`vftable'; return v1; } // 9B7F08: using guessed type void *ITableBase::`vftable'; // 9B87C8: using guessed type void *GTIViewInfoTab::`vftable'; // ACDB5C: using guessed type int dword_ACDB5C; // ACDB60: using guessed type int dword_ACDB60; //----- (00478D60) -------------------------------------------------------- _DWORD *__thiscall sub_478D60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB64 & 1) ) { dword_ACDB64 |= 1u; atexit(sub_9A05E0); } *((_BYTE *)v1 + 68) = 0; *v1 = &DamageEffectTab::`vftable'; return v1; } // 9B7F18: using guessed type void *ITableBase::`vftable'; // 9B87D8: using guessed type void *DamageEffectTab::`vftable'; // ACDB60: using guessed type int dword_ACDB60; // ACDB64: using guessed type int dword_ACDB64; //----- (00478DA0) -------------------------------------------------------- _DWORD *__thiscall sub_478DA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB68 & 1) ) { dword_ACDB68 |= 1u; atexit(sub_9A05B0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ActiveSkillGroupTab::`vftable'; return v1; } // 9B7F28: using guessed type void *ITableBase::`vftable'; // 9B87E8: using guessed type void *ActiveSkillGroupTab::`vftable'; // ACDB64: using guessed type int dword_ACDB64; // ACDB68: using guessed type int dword_ACDB68; //----- (00478DE0) -------------------------------------------------------- void **__thiscall sub_478DE0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F28: using guessed type void *ITableBase::`vftable'; //----- (00478E60) -------------------------------------------------------- _DWORD *__thiscall sub_478E60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB6C & 1) ) { dword_ACDB6C |= 1u; atexit(sub_9A0580); } *((_BYTE *)v1 + 68) = 0; *v1 = &MapWayPointTab::`vftable'; return v1; } // 9B7F38: using guessed type void *ITableBase::`vftable'; // 9B87F8: using guessed type void *MapWayPointTab::`vftable'; // ACDB68: using guessed type int dword_ACDB68; // ACDB6C: using guessed type int dword_ACDB6C; //----- (00478EA0) -------------------------------------------------------- _DWORD *__thiscall sub_478EA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB70 & 1) ) { dword_ACDB70 |= 1u; atexit(sub_9A0550); } *((_BYTE *)v1 + 68) = 0; *v1 = &MapLinkPointTab::`vftable'; return v1; } // 9B7F48: using guessed type void *ITableBase::`vftable'; // 9B8808: using guessed type void *MapLinkPointTab::`vftable'; // ACDB6C: using guessed type int dword_ACDB6C; // ACDB70: using guessed type int dword_ACDB70; //----- (00478EE0) -------------------------------------------------------- _DWORD *__thiscall sub_478EE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB74 & 1) ) { dword_ACDB74 |= 1u; atexit(sub_9A0520); } *((_BYTE *)v1 + 68) = 0; *v1 = &BelongTypeInfoTab::`vftable'; return v1; } // 9B7F58: using guessed type void *ITableBase::`vftable'; // 9B8818: using guessed type void *BelongTypeInfoTab::`vftable'; // ACDB70: using guessed type int dword_ACDB70; // ACDB74: using guessed type int dword_ACDB74; //----- (00478F20) -------------------------------------------------------- void **__thiscall sub_478F20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F58: using guessed type void *ITableBase::`vftable'; //----- (00478FA0) -------------------------------------------------------- _DWORD *__thiscall sub_478FA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB78 & 1) ) { dword_ACDB78 |= 1u; atexit(sub_9A04F0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ChargedDeletableBuffTab::`vftable'; return v1; } // 9B7FB8: using guessed type void *ITableBase::`vftable'; // 9B8828: using guessed type void *ChargedDeletableBuffTab::`vftable'; // ACDB74: using guessed type int dword_ACDB74; // ACDB78: using guessed type int dword_ACDB78; //----- (00478FE0) -------------------------------------------------------- void **__thiscall sub_478FE0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7FB8: using guessed type void *ITableBase::`vftable'; //----- (00479060) -------------------------------------------------------- _DWORD *__thiscall sub_479060(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB7C & 1) ) { dword_ACDB7C |= 1u; atexit(sub_9A04C0); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoTitleTab::`vftable'; return v1; } // 9B7FC8: using guessed type void *ITableBase::`vftable'; // 9B8838: using guessed type void *BasicInfoTitleTab::`vftable'; // ACDB78: using guessed type int dword_ACDB78; // ACDB7C: using guessed type int dword_ACDB7C; //----- (004790A0) -------------------------------------------------------- void **__thiscall sub_4790A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7FC8: using guessed type void *ITableBase::`vftable'; //----- (00479120) -------------------------------------------------------- _DWORD *__thiscall sub_479120(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB80 & 1) ) { dword_ACDB80 |= 1u; atexit(sub_9A0490); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoLinkTab::`vftable'; return v1; } // 9B7FD8: using guessed type void *ITableBase::`vftable'; // 9B8848: using guessed type void *BasicInfoLinkTab::`vftable'; // ACDB7C: using guessed type int dword_ACDB7C; // ACDB80: using guessed type int dword_ACDB80; //----- (00479160) -------------------------------------------------------- _DWORD *__thiscall sub_479160(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB84 & 1) ) { dword_ACDB84 |= 1u; atexit(sub_9A0460); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoTipTab::`vftable'; return v1; } // 9B7FE8: using guessed type void *ITableBase::`vftable'; // 9B8858: using guessed type void *BasicInfoTipTab::`vftable'; // ACDB80: using guessed type int dword_ACDB80; // ACDB84: using guessed type int dword_ACDB84; //----- (004791A0) -------------------------------------------------------- _DWORD *__thiscall sub_4791A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB88 & 1) ) { dword_ACDB88 |= 1u; atexit(sub_9A0430); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoTipCycleTab::`vftable'; return v1; } // 9B7FF8: using guessed type void *ITableBase::`vftable'; // 9B8868: using guessed type void *BasicInfoTipCycleTab::`vftable'; // ACDB84: using guessed type int dword_ACDB84; // ACDB88: using guessed type int dword_ACDB88; //----- (004791E0) -------------------------------------------------------- void **__thiscall sub_4791E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7FF8: using guessed type void *ITableBase::`vftable'; //----- (00479260) -------------------------------------------------------- _DWORD *__thiscall sub_479260(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB8C & 1) ) { dword_ACDB8C |= 1u; atexit(sub_9A0400); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoFindTab::`vftable'; return v1; } // 9B8008: using guessed type void *ITableBase::`vftable'; // 9B8878: using guessed type void *BasicInfoFindTab::`vftable'; // ACDB88: using guessed type int dword_ACDB88; // ACDB8C: using guessed type int dword_ACDB8C; //----- (004792A0) -------------------------------------------------------- _DWORD *__thiscall sub_4792A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB90 & 1) ) { dword_ACDB90 |= 1u; atexit(sub_9A03D0); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoFindUITab::`vftable'; return v1; } // 9B8018: using guessed type void *ITableBase::`vftable'; // 9B8888: using guessed type void *BasicInfoFindUITab::`vftable'; // ACDB8C: using guessed type int dword_ACDB8C; // ACDB90: using guessed type int dword_ACDB90; //----- (004792E0) -------------------------------------------------------- void **__thiscall sub_4792E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8018: using guessed type void *ITableBase::`vftable'; //----- (00479360) -------------------------------------------------------- _DWORD *__thiscall sub_479360(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB94 & 1) ) { dword_ACDB94 |= 1u; atexit(sub_9A03A0); } *((_BYTE *)v1 + 68) = 0; *v1 = &BasicInfoFindWordTab::`vftable'; return v1; } // 9B8028: using guessed type void *ITableBase::`vftable'; // 9B8898: using guessed type void *BasicInfoFindWordTab::`vftable'; // ACDB90: using guessed type int dword_ACDB90; // ACDB94: using guessed type int dword_ACDB94; //----- (004793A0) -------------------------------------------------------- _DWORD *__thiscall sub_4793A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB98 & 1) ) { dword_ACDB98 |= 1u; atexit(sub_9A0370); } *((_BYTE *)v1 + 68) = 0; *v1 = &CollectCardTab::`vftable'; return v1; } // 9B8038: using guessed type void *ITableBase::`vftable'; // 9B88A8: using guessed type void *CollectCardTab::`vftable'; // ACDB94: using guessed type int dword_ACDB94; // ACDB98: using guessed type int dword_ACDB98; //----- (004793E0) -------------------------------------------------------- void **__thiscall sub_4793E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8038: using guessed type void *ITableBase::`vftable'; //----- (00479460) -------------------------------------------------------- _DWORD *__thiscall sub_479460(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDB9C & 1) ) { dword_ACDB9C |= 1u; atexit(sub_9A0340); } *((_BYTE *)v1 + 68) = 0; *v1 = &CollectCardViewTab::`vftable'; return v1; } // 9B8048: using guessed type void *ITableBase::`vftable'; // 9B88B8: using guessed type void *CollectCardViewTab::`vftable'; // ACDB98: using guessed type int dword_ACDB98; // ACDB9C: using guessed type int dword_ACDB9C; //----- (004794A0) -------------------------------------------------------- _DWORD *__thiscall sub_4794A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBA0 & 1) ) { dword_ACDBA0 |= 1u; atexit(sub_9A0310); } *((_BYTE *)v1 + 68) = 0; *v1 = &CollectCardGroupDescTab::`vftable'; return v1; } // 9B8058: using guessed type void *ITableBase::`vftable'; // 9B88C8: using guessed type void *CollectCardGroupDescTab::`vftable'; // ACDB9C: using guessed type int dword_ACDB9C; // ACDBA0: using guessed type int dword_ACDBA0; //----- (004794E0) -------------------------------------------------------- void **__thiscall sub_4794E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8058: using guessed type void *ITableBase::`vftable'; //----- (00479560) -------------------------------------------------------- _DWORD *__thiscall sub_479560(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBA4 & 1) ) { dword_ACDBA4 |= 1u; atexit(sub_9A02E0); } *((_BYTE *)v1 + 68) = 0; *v1 = &CollectCardRewardTab::`vftable'; return v1; } // 9B8068: using guessed type void *ITableBase::`vftable'; // 9B88D8: using guessed type void *CollectCardRewardTab::`vftable'; // ACDBA0: using guessed type int dword_ACDBA0; // ACDBA4: using guessed type int dword_ACDBA4; //----- (004795A0) -------------------------------------------------------- _DWORD *__thiscall sub_4795A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBA8 & 1) ) { dword_ACDBA8 |= 1u; atexit(sub_9A02B0); } *((_BYTE *)v1 + 68) = 0; *v1 = &CollectCardTitleTab::`vftable'; return v1; } // 9B8078: using guessed type void *ITableBase::`vftable'; // 9B88E8: using guessed type void *CollectCardTitleTab::`vftable'; // ACDBA4: using guessed type int dword_ACDBA4; // ACDBA8: using guessed type int dword_ACDBA8; //----- (004795E0) -------------------------------------------------------- void **__thiscall sub_4795E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8078: using guessed type void *ITableBase::`vftable'; //----- (00479660) -------------------------------------------------------- _DWORD *__thiscall sub_479660(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBAC & 1) ) { dword_ACDBAC |= 1u; atexit(sub_9A0280); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverMainTab::`vftable'; return v1; } // 9B80B0: using guessed type void *ITableBase::`vftable'; // 9B88F8: using guessed type void *MoverMainTab::`vftable'; // ACDBA8: using guessed type int dword_ACDBA8; // ACDBAC: using guessed type int dword_ACDBAC; //----- (004796A0) -------------------------------------------------------- _DWORD *__thiscall sub_4796A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBB0 & 1) ) { dword_ACDBB0 |= 1u; atexit(sub_9A0250); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverUseSkillTab::`vftable'; return v1; } // 9B80C0: using guessed type void *ITableBase::`vftable'; // 9B8908: using guessed type void *MoverUseSkillTab::`vftable'; // ACDBAC: using guessed type int dword_ACDBAC; // ACDBB0: using guessed type int dword_ACDBB0; //----- (004796E0) -------------------------------------------------------- _DWORD *__thiscall sub_4796E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBB4 & 1) ) { dword_ACDBB4 |= 1u; atexit(sub_9A0220); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverHGTab::`vftable'; return v1; } // 9B80D0: using guessed type void *ITableBase::`vftable'; // 9B8918: using guessed type void *MoverHGTab::`vftable'; // ACDBB0: using guessed type int dword_ACDBB0; // ACDBB4: using guessed type int dword_ACDBB4; //----- (00479720) -------------------------------------------------------- void **__thiscall sub_479720(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B80D0: using guessed type void *ITableBase::`vftable'; //----- (004797A0) -------------------------------------------------------- _DWORD *__thiscall sub_4797A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBB8 & 1) ) { dword_ACDBB8 |= 1u; atexit(sub_9A01F0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverViewTab::`vftable'; return v1; } // 9B80E0: using guessed type void *ITableBase::`vftable'; // 9B8928: using guessed type void *MoverViewTab::`vftable'; // ACDBB4: using guessed type int dword_ACDBB4; // ACDBB8: using guessed type int dword_ACDBB8; //----- (004797E0) -------------------------------------------------------- void **__thiscall sub_4797E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B80E0: using guessed type void *ITableBase::`vftable'; //----- (00479860) -------------------------------------------------------- _DWORD *__thiscall sub_479860(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBBC & 1) ) { dword_ACDBBC |= 1u; atexit(sub_9A01C0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverSlotViewTab::`vftable'; return v1; } // 9B80F0: using guessed type void *ITableBase::`vftable'; // 9B8938: using guessed type void *MoverSlotViewTab::`vftable'; // ACDBB8: using guessed type int dword_ACDBB8; // ACDBBC: using guessed type int dword_ACDBBC; //----- (004798A0) -------------------------------------------------------- void **__thiscall sub_4798A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B80F0: using guessed type void *ITableBase::`vftable'; //----- (00479920) -------------------------------------------------------- _DWORD *__thiscall sub_479920(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBC0 & 1) ) { dword_ACDBC0 |= 1u; atexit(sub_9A0190); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverSlotCharAniTab::`vftable'; return v1; } // 9B8100: using guessed type void *ITableBase::`vftable'; // 9B8948: using guessed type void *MoverSlotCharAniTab::`vftable'; // ACDBBC: using guessed type int dword_ACDBBC; // ACDBC0: using guessed type int dword_ACDBC0; //----- (00479960) -------------------------------------------------------- _DWORD *__thiscall sub_479960(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBC4 & 1) ) { dword_ACDBC4 |= 1u; atexit(sub_9A0160); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverAbilityTab::`vftable'; return v1; } // 9B8110: using guessed type void *ITableBase::`vftable'; // 9B8958: using guessed type void *MoverAbilityTab::`vftable'; // ACDBC0: using guessed type int dword_ACDBC0; // ACDBC4: using guessed type int dword_ACDBC4; //----- (004799A0) -------------------------------------------------------- _DWORD *__thiscall sub_4799A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBC8 & 1) ) { dword_ACDBC8 |= 1u; atexit(sub_9A0130); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverItemTab::`vftable'; return v1; } // 9B8120: using guessed type void *ITableBase::`vftable'; // 9B8968: using guessed type void *MoverItemTab::`vftable'; // ACDBC4: using guessed type int dword_ACDBC4; // ACDBC8: using guessed type int dword_ACDBC8; //----- (004799E0) -------------------------------------------------------- void **__thiscall sub_4799E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8120: using guessed type void *ITableBase::`vftable'; //----- (00479A60) -------------------------------------------------------- _DWORD *__thiscall sub_479A60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBCC & 1) ) { dword_ACDBCC |= 1u; atexit(sub_9A0100); } *((_BYTE *)v1 + 68) = 0; *v1 = &PetMainTab::`vftable'; return v1; } // 9B8130: using guessed type void *ITableBase::`vftable'; // 9B8978: using guessed type void *PetMainTab::`vftable'; // ACDBC8: using guessed type int dword_ACDBC8; // ACDBCC: using guessed type int dword_ACDBCC; //----- (00479AA0) -------------------------------------------------------- _DWORD *__thiscall sub_479AA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBD0 & 1) ) { dword_ACDBD0 |= 1u; atexit(sub_9A00D0); } *((_BYTE *)v1 + 68) = 0; *v1 = &PetViewTab::`vftable'; return v1; } // 9B8140: using guessed type void *ITableBase::`vftable'; // 9B8988: using guessed type void *PetViewTab::`vftable'; // ACDBCC: using guessed type int dword_ACDBCC; // ACDBD0: using guessed type int dword_ACDBD0; //----- (00479AE0) -------------------------------------------------------- _DWORD *__thiscall sub_479AE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBD4 & 1) ) { dword_ACDBD4 |= 1u; atexit(sub_9A00A0); } *((_BYTE *)v1 + 68) = 0; *v1 = &KQVoteDescTable::`vftable'; return v1; } // 9B8150: using guessed type void *ITableBase::`vftable'; // 9B8998: using guessed type void *KQVoteDescTable::`vftable'; // ACDBD0: using guessed type int dword_ACDBD0; // ACDBD4: using guessed type int dword_ACDBD4; //----- (00479B20) -------------------------------------------------------- void **__thiscall sub_479B20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8150: using guessed type void *ITableBase::`vftable'; //----- (00479BA0) -------------------------------------------------------- _DWORD *__thiscall sub_479BA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBD8 & 1) ) { dword_ACDBD8 |= 1u; atexit(sub_9A0070); } *((_BYTE *)v1 + 68) = 0; *v1 = &KQVoteMajorityRateTable::`vftable'; return v1; } // 9B8160: using guessed type void *ITableBase::`vftable'; // 9B89A8: using guessed type void *KQVoteMajorityRateTable::`vftable'; // ACDBD4: using guessed type int dword_ACDBD4; // ACDBD8: using guessed type int dword_ACDBD8; //----- (00479BE0) -------------------------------------------------------- _DWORD *__thiscall sub_479BE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBDC & 1) ) { dword_ACDBDC |= 1u; atexit(sub_9A0040); } *((_BYTE *)v1 + 68) = 0; *v1 = &KQIsVoteTable::`vftable'; return v1; } // 9B8170: using guessed type void *ITableBase::`vftable'; // 9B89B8: using guessed type void *KQIsVoteTable::`vftable'; // ACDBD8: using guessed type int dword_ACDBD8; // ACDBDC: using guessed type int dword_ACDBDC; //----- (00479C20) -------------------------------------------------------- _DWORD *__thiscall sub_479C20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBE0 & 1) ) { dword_ACDBE0 |= 1u; atexit(sub_9A0010); } *((_BYTE *)v1 + 68) = 0; *v1 = &KQTeamTable::`vftable'; return v1; } // 9B8180: using guessed type void *ITableBase::`vftable'; // 9B89C8: using guessed type void *KQTeamTable::`vftable'; // ACDBDC: using guessed type int dword_ACDBDC; // ACDBE0: using guessed type int dword_ACDBE0; //----- (00479C60) -------------------------------------------------------- void **__thiscall sub_479C60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8180: using guessed type void *ITableBase::`vftable'; //----- (00479CE0) -------------------------------------------------------- _DWORD *__thiscall sub_479CE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBE4 & 1) ) { dword_ACDBE4 |= 1u; atexit(sub_99FFE0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MobConditionViewTab::`vftable'; return v1; } // 9B8190: using guessed type void *ITableBase::`vftable'; // 9B89D8: using guessed type void *MobConditionViewTab::`vftable'; // ACDBE0: using guessed type int dword_ACDBE0; // ACDBE4: using guessed type int dword_ACDBE4; //----- (00479D20) -------------------------------------------------------- void **__thiscall sub_479D20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8190: using guessed type void *ITableBase::`vftable'; //----- (00479DA0) -------------------------------------------------------- _DWORD *__thiscall sub_479DA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBE8 & 1) ) { dword_ACDBE8 |= 1u; atexit(sub_99FFB0); } *((_BYTE *)v1 + 68) = 0; *v1 = &MobNoFadeInTab::`vftable'; return v1; } // 9B81A0: using guessed type void *ITableBase::`vftable'; // 9B89E8: using guessed type void *MobNoFadeInTab::`vftable'; // ACDBE4: using guessed type int dword_ACDBE4; // ACDBE8: using guessed type int dword_ACDBE8; //----- (00479DE0) -------------------------------------------------------- _DWORD *__thiscall sub_479DE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBEC & 1) ) { dword_ACDBEC |= 1u; atexit(sub_99FF80); } *((_BYTE *)v1 + 68) = 0; *v1 = &MarketSearchInfoTab::`vftable'; return v1; } // 9B81B0: using guessed type void *ITableBase::`vftable'; // 9B89F8: using guessed type void *MarketSearchInfoTab::`vftable'; // ACDBE8: using guessed type int dword_ACDBE8; // ACDBEC: using guessed type int dword_ACDBEC; //----- (00479E20) -------------------------------------------------------- void **__thiscall sub_479E20(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81B0: using guessed type void *ITableBase::`vftable'; //----- (00479EA0) -------------------------------------------------------- _DWORD *__thiscall sub_479EA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBF0 & 1) ) { dword_ACDBF0 |= 1u; atexit(sub_99FF50); } *((_BYTE *)v1 + 68) = 0; *v1 = &ChrCreateEquipTab::`vftable'; return v1; } // 9B81C0: using guessed type void *ITableBase::`vftable'; // 9B8A08: using guessed type void *ChrCreateEquipTab::`vftable'; // ACDBEC: using guessed type int dword_ACDBEC; // ACDBF0: using guessed type int dword_ACDBF0; //----- (00479EE0) -------------------------------------------------------- _DWORD *__thiscall sub_479EE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBF4 & 1) ) { dword_ACDBF4 |= 1u; atexit(sub_99FF20); } *((_BYTE *)v1 + 68) = 0; *v1 = &MoverUpgradeEffectTab::`vftable'; return v1; } // 9B81D0: using guessed type void *ITableBase::`vftable'; // 9B8A18: using guessed type void *MoverUpgradeEffectTab::`vftable'; // ACDBF0: using guessed type int dword_ACDBF0; // ACDBF4: using guessed type int dword_ACDBF4; //----- (00479F20) -------------------------------------------------------- _DWORD *__thiscall sub_479F20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBF8 & 1) ) { dword_ACDBF8 |= 1u; atexit(sub_99FEF0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ChatColorTab::`vftable'; return v1; } // 9B81E0: using guessed type void *ITableBase::`vftable'; // 9B8A28: using guessed type void *ChatColorTab::`vftable'; // ACDBF4: using guessed type int dword_ACDBF4; // ACDBF8: using guessed type int dword_ACDBF8; //----- (00479F60) -------------------------------------------------------- _DWORD *__thiscall sub_479F60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDBFC & 1) ) { dword_ACDBFC |= 1u; atexit(sub_99FEC0); } *((_BYTE *)v1 + 68) = 0; *v1 = &TermExtendMatchTable::`vftable'; return v1; } // 9B81F0: using guessed type void *ITableBase::`vftable'; // 9B8A38: using guessed type void *TermExtendMatchTable::`vftable'; // ACDBF8: using guessed type int dword_ACDBF8; // ACDBFC: using guessed type int dword_ACDBFC; //----- (00479FA0) -------------------------------------------------------- void **__thiscall sub_479FA0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B81F0: using guessed type void *ITableBase::`vftable'; //----- (0047A020) -------------------------------------------------------- _DWORD *__thiscall sub_47A020(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC00 & 1) ) { dword_ACDC00 |= 1u; atexit(sub_99FE90); } *((_BYTE *)v1 + 68) = 0; *v1 = &TermExtendMatchGroupDescTable::`vftable'; return v1; } // 9B8200: using guessed type void *ITableBase::`vftable'; // 9B8A48: using guessed type void *TermExtendMatchGroupDescTable::`vftable'; // ACDBFC: using guessed type int dword_ACDBFC; // ACDC00: using guessed type int dword_ACDC00; //----- (0047A060) -------------------------------------------------------- _DWORD *__thiscall sub_47A060(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC04 & 1) ) { dword_ACDC04 |= 1u; atexit(sub_99FE60); } *((_BYTE *)v1 + 68) = 0; *v1 = &AbStateMsgTable::`vftable'; return v1; } // 9B8210: using guessed type void *ITableBase::`vftable'; // 9B8A58: using guessed type void *AbStateMsgTable::`vftable'; // ACDC00: using guessed type int dword_ACDC00; // ACDC04: using guessed type int dword_ACDC04; //----- (0047A0A0) -------------------------------------------------------- _DWORD *__thiscall sub_47A0A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC08 & 1) ) { dword_ACDC08 |= 1u; atexit(sub_99FE30); } *((_BYTE *)v1 + 68) = 0; *v1 = &MinimonInfoTable::`vftable'; return v1; } // 9B8220: using guessed type void *ITableBase::`vftable'; // 9B8A68: using guessed type void *MinimonInfoTable::`vftable'; // ACDC04: using guessed type int dword_ACDC04; // ACDC08: using guessed type int dword_ACDC08; //----- (0047A0E0) -------------------------------------------------------- void **__thiscall sub_47A0E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8220: using guessed type void *ITableBase::`vftable'; //----- (0047A160) -------------------------------------------------------- _DWORD *__thiscall sub_47A160(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC0C & 1) ) { dword_ACDC0C |= 1u; atexit(sub_99FE00); } *((_BYTE *)v1 + 68) = 0; *v1 = &MinimonAutoUseItemTable::`vftable'; return v1; } // 9B8230: using guessed type void *ITableBase::`vftable'; // 9B8A78: using guessed type void *MinimonAutoUseItemTable::`vftable'; // ACDC08: using guessed type int dword_ACDC08; // ACDC0C: using guessed type int dword_ACDC0C; //----- (0047A1A0) -------------------------------------------------------- void **__thiscall sub_47A1A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8230: using guessed type void *ITableBase::`vftable'; //----- (0047A220) -------------------------------------------------------- _DWORD *__thiscall sub_47A220(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC10 & 1) ) { dword_ACDC10 |= 1u; atexit(sub_99FDD0); } *((_BYTE *)v1 + 68) = 0; *v1 = &ItemViewDummyTab::`vftable'; return v1; } // 9B8240: using guessed type void *ITableBase::`vftable'; // 9B8A88: using guessed type void *ItemViewDummyTab::`vftable'; // ACDC0C: using guessed type int dword_ACDC0C; // ACDC10: using guessed type int dword_ACDC10; //----- (0047A260) -------------------------------------------------------- void **__thiscall sub_47A260(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8240: using guessed type void *ITableBase::`vftable'; //----- (0047A2E0) -------------------------------------------------------- _DWORD *__thiscall sub_47A2E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC14 & 1) ) { dword_ACDC14 |= 1u; atexit(sub_99FDA0); } *((_BYTE *)v1 + 68) = 0; *v1 = &UseCalssTypeTable::`vftable'; return v1; } // 9B8250: using guessed type void *ITableBase::`vftable'; // 9B8A98: using guessed type void *UseCalssTypeTable::`vftable'; // ACDC14: using guessed type int dword_ACDC14; //----- (0047A320) -------------------------------------------------------- void **__thiscall sub_47A320(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8250: using guessed type void *ITableBase::`vftable'; //----- (0047A3A0) -------------------------------------------------------- _DWORD *__thiscall sub_47A3A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC18 & 1) ) { dword_ACDC18 |= 1u; atexit(sub_99FD70); } *((_BYTE *)v1 + 68) = 0; *v1 = &ChrBasicEquipTab::`vftable'; return v1; } // 9B8260: using guessed type void *ITableBase::`vftable'; // 9B8AA8: using guessed type void *ChrBasicEquipTab::`vftable'; // ACDC14: using guessed type int dword_ACDC14; // ACDC18: using guessed type int dword_ACDC18; //----- (0047A3E0) -------------------------------------------------------- int __thiscall sub_47A3E0(_DWORD *this, char *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int result; // eax char **v7; // eax int v8; // ecx int v11; // [esp+0h] [ebp-28h] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int *v14; // [esp+18h] [ebp-10h] int v15; // [esp+24h] [ebp-4h] v14 = &v11; v5 = this; v12 = (int)this; result = a3; v13 = a3; v15 = 0; while ( result != a4 ) { v7 = sub_67ADC0(a2, *((_DWORD *)a2 + 1), result + 8); v8 = v5[1]; if ( (unsigned int)(1073741822 - v8) < 1 ) std::_Xlength_error("list too long"); v5[1] = v8 + 1; *((_DWORD *)a2 + 1) = v7; *(_DWORD *)v7[1] = v7; result = *(_DWORD *)a3; a3 = *(_DWORD *)a3; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0047A4B0) -------------------------------------------------------- _DWORD *__thiscall sub_47A4B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC68 & 1) ) { dword_ACDC68 |= 1u; atexit(sub_9A1270); } *((_BYTE *)v1 + 68) = 0; *v1 = &FaceCutMsgTab::`vftable'; return v1; } // 9B84C8: using guessed type void *ITableBase::`vftable'; // 9B8AB8: using guessed type void *FaceCutMsgTab::`vftable'; // ACDC64: using guessed type int dword_ACDC64; // ACDC68: using guessed type int dword_ACDC68; //----- (0047A4F0) -------------------------------------------------------- bool __cdecl sub_47A4F0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD914; if ( !dword_ACD914 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477780(v5); else v4 = 0; v12 = -1; dword_ACD914 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD914 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD914 + 56); if ( !v6 || *v6 != 22 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD914 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD914 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD914: using guessed type int dword_ACD914; //----- (0047A620) -------------------------------------------------------- bool __cdecl sub_47A620(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD918; if ( !dword_ACD918 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4777E0(v5); else v4 = 0; v12 = -1; dword_ACD918 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD918 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD918 + 56); if ( !v6 || *v6 != 1082 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD918 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD918 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD918: using guessed type int dword_ACD918; //----- (0047A760) -------------------------------------------------------- bool __cdecl sub_47A760(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD91C; if ( !dword_ACD91C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4778A0(v5); else v4 = 0; v12 = -1; dword_ACD91C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD91C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD91C + 56); if ( !v6 || *v6 != 55 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD91C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD91C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD91C: using guessed type int dword_ACD91C; //----- (0047A890) -------------------------------------------------------- bool __cdecl sub_47A890(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C84; if ( !dword_AC9C84 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4778E0(v5); else v4 = 0; v12 = -1; dword_AC9C84 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C84 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C84 + 56); if ( !v6 || *v6 != 196 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C84 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C84 + 4))() != 0; } // AC9C84: using guessed type int dword_AC9C84; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0047A9D0) -------------------------------------------------------- bool __cdecl sub_47A9D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD920; if ( !dword_ACD920 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477920(v5); else v4 = 0; v12 = -1; dword_ACD920 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD920 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD920 + 56); if ( !v6 || *v6 != 391 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD920 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD920 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD920: using guessed type int dword_ACD920; //----- (0047AB10) -------------------------------------------------------- bool __cdecl sub_47AB10(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C94; if ( !dword_AC9C94 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477960(v5); else v4 = 0; v12 = -1; dword_AC9C94 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C94 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C94 + 56); if ( !v6 || *v6 != 14925 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C94 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C94 + 4))() != 0; } // AC9C94: using guessed type int dword_AC9C94; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0047AC50) -------------------------------------------------------- bool __cdecl sub_47AC50(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9CA0; if ( !dword_AC9CA0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477A20(v5); else v4 = 0; v12 = -1; dword_AC9CA0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9CA0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9CA0 + 56); if ( !v6 || *v6 != 197 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9CA0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9CA0 + 4))() != 0; } // AC9CA0: using guessed type int dword_AC9CA0; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0047AD90) -------------------------------------------------------- bool __cdecl sub_47AD90(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB37C; if ( !dword_ACB37C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477AE0(v5); else v4 = 0; v12 = -1; dword_ACB37C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB37C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB37C + 56); if ( !v6 || *v6 != 117 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB37C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB37C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB37C: using guessed type int dword_ACB37C; //----- (0047AEC0) -------------------------------------------------------- bool __cdecl sub_47AEC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD924; if ( !dword_ACD924 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477BA0(v5); else v4 = 0; v12 = -1; dword_ACD924 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD924 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD924 + 56); if ( !v6 || *v6 != 4627 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD924 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD924 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD924: using guessed type int dword_ACD924; //----- (0047B000) -------------------------------------------------------- bool __cdecl sub_47B000(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD928; if ( !dword_ACD928 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477BE0(v5); else v4 = 0; v12 = -1; dword_ACD928 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD928 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD928 + 56); if ( !v6 || *v6 != 625 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD928 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD928 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD928: using guessed type int dword_ACD928; //----- (0047B140) -------------------------------------------------------- bool __cdecl sub_47B140(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD92C; if ( !dword_ACD92C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477CA0(v5); else v4 = 0; v12 = -1; dword_ACD92C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD92C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD92C + 56); if ( !v6 || *v6 != 251 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD92C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD92C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD92C: using guessed type int dword_ACD92C; //----- (0047B280) -------------------------------------------------------- bool __cdecl sub_47B280(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD930; if ( !dword_ACD930 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477CE0(v5); else v4 = 0; v12 = -1; dword_ACD930 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD930 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD930 + 56); if ( !v6 || *v6 != 1017 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD930 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD930 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD930: using guessed type int dword_ACD930; //----- (0047B3C0) -------------------------------------------------------- bool __cdecl sub_47B3C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD934; if ( !dword_ACD934 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477D20(v5); else v4 = 0; v12 = -1; dword_ACD934 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD934 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD934 + 56); if ( !v6 || *v6 != 483 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD934 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD934 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD934: using guessed type int dword_ACD934; //----- (0047B500) -------------------------------------------------------- bool __cdecl sub_47B500(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD938; if ( !dword_ACD938 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477DE0(v5); else v4 = 0; v12 = -1; dword_ACD938 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD938 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD938 + 56); if ( !v6 || *v6 != 14887 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD938 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD938 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD938: using guessed type int dword_ACD938; //----- (0047B640) -------------------------------------------------------- bool __cdecl sub_47B640(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB2E0; if ( !dword_ACB2E0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477EA0(v5); else v4 = 0; v12 = -1; dword_ACB2E0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB2E0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB2E0 + 56); if ( !v6 || *v6 != 1273 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB2E0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB2E0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB2E0: using guessed type int dword_ACB2E0; //----- (0047B780) -------------------------------------------------------- bool __cdecl sub_47B780(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9CE0; if ( !dword_AC9CE0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477EE0(v5); else v4 = 0; v12 = -1; dword_AC9CE0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9CE0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9CE0 + 56); if ( !v6 || *v6 != 141 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9CE0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9CE0 + 4))() != 0; } // AC9CE0: using guessed type int dword_AC9CE0; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0047B8C0) -------------------------------------------------------- bool __cdecl sub_47B8C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD93C; if ( !dword_ACD93C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477FA0(v5); else v4 = 0; v12 = -1; dword_ACD93C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD93C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD93C + 56); if ( !v6 || *v6 != 148 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD93C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD93C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD93C: using guessed type int dword_ACD93C; //----- (0047BA00) -------------------------------------------------------- bool __cdecl sub_47BA00(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C9C; if ( !dword_AC9C9C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_477FE0(v5); else v4 = 0; v12 = -1; dword_AC9C9C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C9C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C9C + 56); if ( !v6 || *v6 != 1119 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C9C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C9C + 4))() != 0; } // AC9C9C: using guessed type int dword_AC9C9C; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0047BB40) -------------------------------------------------------- bool __cdecl sub_47BB40(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD940; if ( !dword_ACD940 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478020(v5); else v4 = 0; v12 = -1; dword_ACD940 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD940 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD940 + 56); if ( !v6 || *v6 != 3829 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD940 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD940 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD940: using guessed type int dword_ACD940; //----- (0047BC80) -------------------------------------------------------- bool __cdecl sub_47BC80(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD944; if ( !dword_ACD944 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4780E0(v5); else v4 = 0; v12 = -1; dword_ACD944 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD944 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD944 + 56); if ( !v6 || *v6 != 6309 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD944 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD944 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD944: using guessed type int dword_ACD944; //----- (0047BDC0) -------------------------------------------------------- bool __cdecl sub_47BDC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD948; if ( !dword_ACD948 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478120(v5); else v4 = 0; v12 = -1; dword_ACD948 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD948 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD948 + 56); if ( !v6 || *v6 != 959 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD948 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD948 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD948: using guessed type int dword_ACD948; //----- (0047BF00) -------------------------------------------------------- bool __cdecl sub_47BF00(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD94C; if ( !dword_ACD94C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478160(v5); else v4 = 0; v12 = -1; dword_ACD94C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD94C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD94C + 56); if ( !v6 || *v6 != 75 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD94C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD94C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD94C: using guessed type int dword_ACD94C; //----- (0047C030) -------------------------------------------------------- bool __cdecl sub_47C030(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD950; if ( !dword_ACD950 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4781A0(v5); else v4 = 0; v12 = -1; dword_ACD950 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD950 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD950 + 56); if ( !v6 || *v6 != 1014 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD950 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD950 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD950: using guessed type int dword_ACD950; //----- (0047C170) -------------------------------------------------------- bool __cdecl sub_47C170(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD954; if ( !dword_ACD954 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4781E0(v5); else v4 = 0; v12 = -1; dword_ACD954 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD954 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD954 + 56); if ( !v6 || *v6 != 101 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD954 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD954 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD954: using guessed type int dword_ACD954; //----- (0047C2A0) -------------------------------------------------------- bool __cdecl sub_47C2A0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD958; if ( !dword_ACD958 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478220(v5); else v4 = 0; v12 = -1; dword_ACD958 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD958 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD958 + 56); if ( !v6 || *v6 != 616 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD958 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD958 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD958: using guessed type int dword_ACD958; //----- (0047C3E0) -------------------------------------------------------- bool __cdecl sub_47C3E0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD95C; if ( !dword_ACD95C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478260(v5); else v4 = 0; v12 = -1; dword_ACD95C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD95C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD95C + 56); if ( !v6 || *v6 != 488 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD95C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD95C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD95C: using guessed type int dword_ACD95C; //----- (0047C520) -------------------------------------------------------- bool __cdecl sub_47C520(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD960; if ( !dword_ACD960 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4782A0(v5); else v4 = 0; v12 = -1; dword_ACD960 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD960 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD960 + 56); if ( !v6 || *v6 != 4146 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD960 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD960 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD960: using guessed type int dword_ACD960; //----- (0047C660) -------------------------------------------------------- bool __cdecl sub_47C660(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD964; if ( !dword_ACD964 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4782E0(v5); else v4 = 0; v12 = -1; dword_ACD964 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD964 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD964 + 56); if ( !v6 || *v6 != 308 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD964 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD964 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD964: using guessed type int dword_ACD964; //----- (0047C7A0) -------------------------------------------------------- bool __cdecl sub_47C7A0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD968; if ( !dword_ACD968 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478320(v5); else v4 = 0; v12 = -1; dword_ACD968 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD968 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD968 + 56); if ( !v6 || *v6 != 37 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD968 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD968 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD968: using guessed type int dword_ACD968; //----- (0047C8D0) -------------------------------------------------------- bool __cdecl sub_47C8D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD96C; if ( !dword_ACD96C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478360(v5); else v4 = 0; v12 = -1; dword_ACD96C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD96C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD96C + 56); if ( !v6 || *v6 != 9530 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD96C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD96C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD96C: using guessed type int dword_ACD96C; //----- (0047CA10) -------------------------------------------------------- bool __cdecl sub_47CA10(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD970; if ( !dword_ACD970 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478420(v5); else v4 = 0; v12 = -1; dword_ACD970 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD970 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD970 + 56); if ( !v6 || *v6 != 213 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD970 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD970 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD970: using guessed type int dword_ACD970; //----- (0047CB50) -------------------------------------------------------- bool __cdecl sub_47CB50(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD974; if ( !dword_ACD974 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4784E0(v5); else v4 = 0; v12 = -1; dword_ACD974 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD974 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD974 + 56); if ( !v6 || *v6 != 76 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD974 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD974 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD974: using guessed type int dword_ACD974; //----- (0047CC80) -------------------------------------------------------- bool __cdecl sub_47CC80(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD978; if ( !dword_ACD978 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4785A0(v5); else v4 = 0; v12 = -1; dword_ACD978 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD978 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD978 + 56); if ( !v6 || *v6 != 538 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD978 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD978 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD978: using guessed type int dword_ACD978; //----- (0047CDC0) -------------------------------------------------------- bool __cdecl sub_47CDC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD97C; if ( !dword_ACD97C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478660(v5); else v4 = 0; v12 = -1; dword_ACD97C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD97C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD97C + 56); if ( !v6 || *v6 != 16 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD97C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD97C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD97C: using guessed type int dword_ACD97C; //----- (0047CEF0) -------------------------------------------------------- bool __cdecl sub_47CEF0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD980; if ( !dword_ACD980 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478720(v5); else v4 = 0; v12 = -1; dword_ACD980 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD980 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD980 + 56); if ( !v6 || *v6 != 14 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD980 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD980 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD980: using guessed type int dword_ACD980; //----- (0047D020) -------------------------------------------------------- bool __cdecl sub_47D020(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD984; if ( !dword_ACD984 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478760(v5); else v4 = 0; v12 = -1; dword_ACD984 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD984 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD984 + 56); if ( !v6 || *v6 != 64 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD984 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD984 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD984: using guessed type int dword_ACD984; //----- (0047D150) -------------------------------------------------------- bool __cdecl sub_47D150(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD988; if ( !dword_ACD988 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478820(v5); else v4 = 0; v12 = -1; dword_ACD988 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD988 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD988 + 56); if ( !v6 || *v6 != 154 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD988 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD988 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD988: using guessed type int dword_ACD988; //----- (0047D290) -------------------------------------------------------- bool __cdecl sub_47D290(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD98C; if ( !dword_ACD98C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478860(v5); else v4 = 0; v12 = -1; dword_ACD98C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD98C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD98C + 56); if ( !v6 || *v6 != 279 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD98C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD98C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD98C: using guessed type int dword_ACD98C; //----- (0047D3D0) -------------------------------------------------------- bool __cdecl sub_47D3D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD990; if ( !dword_ACD990 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478920(v5); else v4 = 0; v12 = -1; dword_ACD990 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD990 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD990 + 56); if ( !v6 || *v6 != 691 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD990 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD990 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD990: using guessed type int dword_ACD990; //----- (0047D510) -------------------------------------------------------- bool __cdecl sub_47D510(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD994; if ( !dword_ACD994 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4789E0(v5); else v4 = 0; v12 = -1; dword_ACD994 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD994 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD994 + 56); if ( !v6 || *v6 != 251 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD994 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD994 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD994: using guessed type int dword_ACD994; //----- (0047D650) -------------------------------------------------------- bool __cdecl sub_47D650(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD998; if ( !dword_ACD998 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478A20(v5); else v4 = 0; v12 = -1; dword_ACD998 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD998 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD998 + 56); if ( !v6 || *v6 != 24 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD998 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD998 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD998: using guessed type int dword_ACD998; //----- (0047D780) -------------------------------------------------------- bool __cdecl sub_47D780(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD99C; if ( !dword_ACD99C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478AE0(v5); else v4 = 0; v12 = -1; dword_ACD99C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD99C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD99C + 56); if ( !v6 || *v6 != 2686 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD99C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD99C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD99C: using guessed type int dword_ACD99C; //----- (0047D8C0) -------------------------------------------------------- bool __cdecl sub_47D8C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9A0; if ( !dword_ACD9A0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478B20(v5); else v4 = 0; v12 = -1; dword_ACD9A0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9A0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9A0 + 56); if ( !v6 || *v6 != 2686 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9A0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9A0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9A0: using guessed type int dword_ACD9A0; //----- (0047DA00) -------------------------------------------------------- bool __cdecl sub_47DA00(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9A4; if ( !dword_ACD9A4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478BE0(v5); else v4 = 0; v12 = -1; dword_ACD9A4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9A4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9A4 + 56); if ( !v6 || *v6 != 40 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9A4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9A4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9A4: using guessed type int dword_ACD9A4; //----- (0047DB30) -------------------------------------------------------- bool __cdecl sub_47DB30(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9A8; if ( !dword_ACD9A8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478C20(v5); else v4 = 0; v12 = -1; dword_ACD9A8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9A8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9A8 + 56); if ( !v6 || *v6 != 10 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9A8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9A8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9A8: using guessed type int dword_ACD9A8; //----- (0047DC60) -------------------------------------------------------- bool __cdecl sub_47DC60(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9AC; if ( !dword_ACD9AC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478C60(v5); else v4 = 0; v12 = -1; dword_ACD9AC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9AC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9AC + 56); if ( !v6 || *v6 != 538 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9AC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9AC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9AC: using guessed type int dword_ACD9AC; //----- (0047DDA0) -------------------------------------------------------- bool __cdecl sub_47DDA0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9B0; if ( !dword_ACD9B0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478D20(v5); else v4 = 0; v12 = -1; dword_ACD9B0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9B0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9B0 + 56); if ( !v6 || *v6 != 140 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9B0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9B0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9B0: using guessed type int dword_ACD9B0; //----- (0047DEE0) -------------------------------------------------------- bool __cdecl sub_47DEE0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9B4; if ( !dword_ACD9B4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478D60(v5); else v4 = 0; v12 = -1; dword_ACD9B4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9B4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9B4 + 56); if ( !v6 || *v6 != 134 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9B4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9B4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9B4: using guessed type int dword_ACD9B4; //----- (0047E020) -------------------------------------------------------- bool __cdecl sub_47E020(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9B8; if ( !dword_ACD9B8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478DA0(v5); else v4 = 0; v12 = -1; dword_ACD9B8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9B8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9B8 + 56); if ( !v6 || *v6 != 18 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9B8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9B8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9B8: using guessed type int dword_ACD9B8; //----- (0047E150) -------------------------------------------------------- bool __cdecl sub_47E150(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9BC; if ( !dword_ACD9BC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478E60(v5); else v4 = 0; v12 = -1; dword_ACD9BC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9BC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9BC + 56); if ( !v6 || *v6 != 37 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9BC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9BC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9BC: using guessed type int dword_ACD9BC; //----- (0047E280) -------------------------------------------------------- bool __cdecl sub_47E280(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9C0; if ( !dword_ACD9C0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478EA0(v5); else v4 = 0; v12 = -1; dword_ACD9C0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9C0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9C0 + 56); if ( !v6 || *v6 != 43 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9C0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9C0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9C0: using guessed type int dword_ACD9C0; //----- (0047E3B0) -------------------------------------------------------- bool __cdecl sub_47E3B0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9C4; if ( !dword_ACD9C4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478EE0(v5); else v4 = 0; v12 = -1; dword_ACD9C4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9C4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9C4 + 56); if ( !v6 || *v6 != 70 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9C4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9C4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9C4: using guessed type int dword_ACD9C4; //----- (0047E4E0) -------------------------------------------------------- bool __cdecl sub_47E4E0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9C8; if ( !dword_ACD9C8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_478FA0(v5); else v4 = 0; v12 = -1; dword_ACD9C8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9C8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9C8 + 56); if ( !v6 || *v6 != 1 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9C8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9C8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9C8: using guessed type int dword_ACD9C8; //----- (0047E610) -------------------------------------------------------- bool __cdecl sub_47E610(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9CC; if ( !dword_ACD9CC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479060(v5); else v4 = 0; v12 = -1; dword_ACD9CC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9CC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9CC + 56); if ( !v6 || *v6 != 268 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9CC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9CC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9CC: using guessed type int dword_ACD9CC; //----- (0047E750) -------------------------------------------------------- bool __cdecl sub_47E750(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9D0; if ( !dword_ACD9D0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479120(v5); else v4 = 0; v12 = -1; dword_ACD9D0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9D0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9D0 + 56); if ( !v6 || *v6 != 2260 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9D0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9D0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9D0: using guessed type int dword_ACD9D0; //----- (0047E890) -------------------------------------------------------- bool __cdecl sub_47E890(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9D4; if ( !dword_ACD9D4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479160(v5); else v4 = 0; v12 = -1; dword_ACD9D4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9D4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9D4 + 56); if ( !v6 || *v6 != 285 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9D4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9D4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9D4: using guessed type int dword_ACD9D4; //----- (0047E9D0) -------------------------------------------------------- bool __cdecl sub_47E9D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9D8; if ( !dword_ACD9D8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4791A0(v5); else v4 = 0; v12 = -1; dword_ACD9D8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9D8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9D8 + 56); if ( !v6 || *v6 != 1 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9D8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9D8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9D8: using guessed type int dword_ACD9D8; //----- (0047EB00) -------------------------------------------------------- bool __cdecl sub_47EB00(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9DC; if ( !dword_ACD9DC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479260(v5); else v4 = 0; v12 = -1; dword_ACD9DC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9DC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9DC + 56); if ( !v6 || *v6 != 18 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9DC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9DC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9DC: using guessed type int dword_ACD9DC; //----- (0047EC30) -------------------------------------------------------- bool __cdecl sub_47EC30(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9E0; if ( !dword_ACD9E0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4792A0(v5); else v4 = 0; v12 = -1; dword_ACD9E0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9E0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9E0 + 56); if ( !v6 || *v6 != 51 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9E0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9E0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9E0: using guessed type int dword_ACD9E0; //----- (0047ED60) -------------------------------------------------------- bool __cdecl sub_47ED60(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9E4; if ( !dword_ACD9E4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479360(v5); else v4 = 0; v12 = -1; dword_ACD9E4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9E4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9E4 + 56); if ( !v6 || *v6 != 76 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9E4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9E4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9E4: using guessed type int dword_ACD9E4; //----- (0047EE90) -------------------------------------------------------- bool __cdecl sub_47EE90(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9E8; if ( !dword_ACD9E8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4793A0(v5); else v4 = 0; v12 = -1; dword_ACD9E8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9E8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9E8 + 56); if ( !v6 || *v6 != 126 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9E8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9E8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9E8: using guessed type int dword_ACD9E8; //----- (0047EFC0) -------------------------------------------------------- bool __cdecl sub_47EFC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9EC; if ( !dword_ACD9EC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479460(v5); else v4 = 0; v12 = -1; dword_ACD9EC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9EC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9EC + 56); if ( !v6 || *v6 != 1177 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9EC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9EC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9EC: using guessed type int dword_ACD9EC; //----- (0047F100) -------------------------------------------------------- bool __cdecl sub_47F100(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9F0; if ( !dword_ACD9F0 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4794A0(v5); else v4 = 0; v12 = -1; dword_ACD9F0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9F0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9F0 + 56); if ( !v6 || *v6 != 76 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9F0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9F0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9F0: using guessed type int dword_ACD9F0; //----- (0047F230) -------------------------------------------------------- bool __cdecl sub_47F230(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9F4; if ( !dword_ACD9F4 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479560(v5); else v4 = 0; v12 = -1; dword_ACD9F4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9F4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9F4 + 56); if ( !v6 || *v6 != 273 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9F4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9F4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9F4: using guessed type int dword_ACD9F4; //----- (0047F370) -------------------------------------------------------- bool __cdecl sub_47F370(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9F8; if ( !dword_ACD9F8 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4795A0(v5); else v4 = 0; v12 = -1; dword_ACD9F8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9F8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9F8 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9F8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9F8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9F8: using guessed type int dword_ACD9F8; //----- (0047F4A0) -------------------------------------------------------- bool __cdecl sub_47F4A0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB374; if ( !dword_ACB374 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479660(v5); else v4 = 0; v12 = -1; dword_ACB374 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB374 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB374 + 56); if ( !v6 || *v6 != 315 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB374 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB374 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB374: using guessed type int dword_ACB374; //----- (0047F5E0) -------------------------------------------------------- bool __cdecl sub_47F5E0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACD9FC; if ( !dword_ACD9FC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4796A0(v5); else v4 = 0; v12 = -1; dword_ACD9FC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACD9FC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACD9FC + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACD9FC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACD9FC + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9FC: using guessed type int dword_ACD9FC; //----- (0047F710) -------------------------------------------------------- bool __cdecl sub_47F710(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB378; if ( !dword_ACB378 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4796E0(v5); else v4 = 0; v12 = -1; dword_ACB378 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB378 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB378 + 56); if ( !v6 || *v6 != 149 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB378 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB378 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB378: using guessed type int dword_ACB378; //----- (0047F850) -------------------------------------------------------- bool __cdecl sub_47F850(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA00; if ( !dword_ACDA00 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4797A0(v5); else v4 = 0; v12 = -1; dword_ACDA00 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA00 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA00 + 56); if ( !v6 || *v6 != 1072 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA00 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA00 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA00: using guessed type int dword_ACDA00; //----- (0047F990) -------------------------------------------------------- bool __cdecl sub_47F990(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA04; if ( !dword_ACDA04 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479860(v5); else v4 = 0; v12 = -1; dword_ACDA04 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA04 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA04 + 56); if ( !v6 || *v6 != 12 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA04 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA04 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA04: using guessed type int dword_ACDA04; //----- (0047FAC0) -------------------------------------------------------- bool __cdecl sub_47FAC0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA08; if ( !dword_ACDA08 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479920(v5); else v4 = 0; v12 = -1; dword_ACDA08 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA08 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA08 + 56); if ( !v6 || *v6 != 96 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA08 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA08 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA08: using guessed type int dword_ACDA08; //----- (0047FBF0) -------------------------------------------------------- bool __cdecl sub_47FBF0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA0C; if ( !dword_ACDA0C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479960(v5); else v4 = 0; v12 = -1; dword_ACDA0C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA0C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA0C + 56); if ( !v6 || *v6 != 904 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA0C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA0C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA0C: using guessed type int dword_ACDA0C; //----- (0047FD30) -------------------------------------------------------- bool __cdecl sub_47FD30(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA10; if ( !dword_ACDA10 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_4799A0(v5); else v4 = 0; v12 = -1; dword_ACDA10 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA10 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA10 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA10 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA10 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA10: using guessed type int dword_ACDA10; //----- (0047FE60) -------------------------------------------------------- bool __cdecl sub_47FE60(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB380; if ( !dword_ACB380 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479A60(v5); else v4 = 0; v12 = -1; dword_ACB380 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB380 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB380 + 56); if ( !v6 || *v6 != 145 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB380 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB380 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB380: using guessed type int dword_ACB380; //----- (0047FFA0) -------------------------------------------------------- bool __cdecl sub_47FFA0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB384; if ( !dword_ACB384 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479AA0(v5); else v4 = 0; v12 = -1; dword_ACB384 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB384 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB384 + 56); if ( !v6 || *v6 != 277 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB384 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB384 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB384: using guessed type int dword_ACB384; //----- (004800E0) -------------------------------------------------------- bool __cdecl sub_4800E0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA14; if ( !dword_ACDA14 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479AE0(v5); else v4 = 0; v12 = -1; dword_ACDA14 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA14 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA14 + 56); if ( !v6 || *v6 != 609 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA14 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA14 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA14: using guessed type int dword_ACDA14; //----- (00480220) -------------------------------------------------------- bool __cdecl sub_480220(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA18; if ( !dword_ACDA18 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479BA0(v5); else v4 = 0; v12 = -1; dword_ACDA18 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA18 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA18 + 56); if ( !v6 || *v6 != 1 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA18 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA18 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA18: using guessed type int dword_ACDA18; //----- (00480350) -------------------------------------------------------- bool __cdecl sub_480350(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA1C; if ( !dword_ACDA1C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479BE0(v5); else v4 = 0; v12 = -1; dword_ACDA1C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA1C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA1C + 56); if ( !v6 || *v6 != 5 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA1C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA1C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA1C: using guessed type int dword_ACDA1C; //----- (00480480) -------------------------------------------------------- bool __cdecl sub_480480(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA20; if ( !dword_ACDA20 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479C20(v5); else v4 = 0; v12 = -1; dword_ACDA20 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA20 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA20 + 56); if ( !v6 || *v6 != 241 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA20 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA20 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA20: using guessed type int dword_ACDA20; //----- (004805C0) -------------------------------------------------------- bool __cdecl sub_4805C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA24; if ( !dword_ACDA24 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479CE0(v5); else v4 = 0; v12 = -1; dword_ACDA24 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA24 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA24 + 56); if ( !v6 || *v6 != 50 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA24 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA24 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA24: using guessed type int dword_ACDA24; //----- (004806F0) -------------------------------------------------------- bool __cdecl sub_4806F0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA28; if ( !dword_ACDA28 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479DA0(v5); else v4 = 0; v12 = -1; dword_ACDA28 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA28 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA28 + 56); if ( !v6 || *v6 != 1 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA28 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA28 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA28: using guessed type int dword_ACDA28; //----- (00480820) -------------------------------------------------------- bool __cdecl sub_480820(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA2C; if ( !dword_ACDA2C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479DE0(v5); else v4 = 0; v12 = -1; dword_ACDA2C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA2C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA2C + 56); if ( !v6 || *v6 != 18 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA2C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA2C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA2C: using guessed type int dword_ACDA2C; //----- (00480950) -------------------------------------------------------- bool __cdecl sub_480950(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9C98; if ( !dword_AC9C98 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479EA0(v5); else v4 = 0; v12 = -1; dword_AC9C98 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9C98 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9C98 + 56); if ( !v6 || *v6 != 1145 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9C98 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9C98 + 4))() != 0; } // AC9C98: using guessed type int dword_AC9C98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00480A90) -------------------------------------------------------- bool __cdecl sub_480A90(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA30; if ( !dword_ACDA30 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479EE0(v5); else v4 = 0; v12 = -1; dword_ACDA30 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA30 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA30 + 56); if ( !v6 || *v6 != 541 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA30 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA30 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA30: using guessed type int dword_ACDA30; //----- (00480BD0) -------------------------------------------------------- bool __cdecl sub_480BD0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_AC9CDC; if ( !dword_AC9CDC ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479F20(v5); else v4 = 0; v12 = -1; dword_AC9CDC = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_AC9CDC + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_AC9CDC + 56); if ( !v6 || *v6 != 22 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_AC9CDC + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AC9CDC + 4))() != 0; } // AC9CDC: using guessed type int dword_AC9CDC; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00480D00) -------------------------------------------------------- bool __cdecl sub_480D00(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB398; if ( !dword_ACB398 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_479F60(v5); else v4 = 0; v12 = -1; dword_ACB398 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB398 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB398 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB398 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB398 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB398: using guessed type int dword_ACB398; //----- (00480E30) -------------------------------------------------------- bool __cdecl sub_480E30(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB39C; if ( !dword_ACB39C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A020(v5); else v4 = 0; v12 = -1; dword_ACB39C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB39C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB39C + 56); if ( !v6 || *v6 != 140 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB39C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB39C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB39C: using guessed type int dword_ACB39C; //----- (00480F70) -------------------------------------------------------- bool __cdecl sub_480F70(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA34; if ( !dword_ACDA34 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A060(v5); else v4 = 0; v12 = -1; dword_ACDA34 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA34 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA34 + 56); if ( !v6 || *v6 != 1102 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA34 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA34 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA34: using guessed type int dword_ACDA34; //----- (004810B0) -------------------------------------------------------- bool __cdecl sub_4810B0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA38; if ( !dword_ACDA38 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A0A0(v5); else v4 = 0; v12 = -1; dword_ACDA38 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA38 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA38 + 56); if ( !v6 || *v6 != 51 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA38 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA38 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA38: using guessed type int dword_ACDA38; //----- (004811E0) -------------------------------------------------------- bool __cdecl sub_4811E0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB370; if ( !dword_ACB370 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A160(v5); else v4 = 0; v12 = -1; dword_ACB370 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB370 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB370 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB370 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB370 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB370: using guessed type int dword_ACB370; //----- (00481310) -------------------------------------------------------- bool __cdecl sub_481310(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA3C; if ( !dword_ACDA3C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A220(v5); else v4 = 0; v12 = -1; dword_ACDA3C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA3C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA3C + 56); if ( !v6 || *v6 != 334 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA3C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA3C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA3C: using guessed type int dword_ACDA3C; //----- (00481450) -------------------------------------------------------- bool __cdecl sub_481450(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA40; if ( !dword_ACDA40 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A2E0(v5); else v4 = 0; v12 = -1; dword_ACDA40 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA40 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA40 + 56); if ( !v6 || *v6 != 1162 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA40 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA40 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA40: using guessed type int dword_ACDA40; //----- (00481590) -------------------------------------------------------- bool __cdecl sub_481590(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA44; if ( !dword_ACDA44 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A3A0(v5); else v4 = 0; v12 = -1; dword_ACDA44 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA44 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA44 + 56); if ( !v6 || *v6 != 12 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA44 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA44 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA44: using guessed type int dword_ACDA44; //----- (004816C0) -------------------------------------------------------- _DWORD *__thiscall sub_4816C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC4C & 1) ) { dword_ACDC4C |= 1u; atexit(sub_9A1000); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ItemInfoTab::`vftable'; return v1; } // 9B82A8: using guessed type void *ITableBase::`vftable'; // 9B8AC8: using guessed type void *ItemInfoTab::`vftable'; // ACDC4C: using guessed type int dword_ACDC4C; //----- (00481710) -------------------------------------------------------- _DWORD *__thiscall sub_481710(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC50 & 1) ) { dword_ACDC50 |= 1u; atexit(sub_9A0FD0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ItemViewInfoTab::`vftable'; return v1; } // 9B82D0: using guessed type void *ITableBase::`vftable'; // 9B8AE0: using guessed type void *ItemViewInfoTab::`vftable'; // ACDC4C: using guessed type int dword_ACDC4C; // ACDC50: using guessed type int dword_ACDC50; //----- (00481760) -------------------------------------------------------- _DWORD *__thiscall sub_481760(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC1C & 1) ) { dword_ACDC1C |= 1u; atexit(sub_9A1240); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MobInfoTab::`vftable'; return v1; } // 9B8358: using guessed type void *ITableBase::`vftable'; // 9B8AF8: using guessed type void *MobInfoTab::`vftable'; // ACDC18: using guessed type int dword_ACDC18; // ACDC1C: using guessed type int dword_ACDC1C; //----- (004817B0) -------------------------------------------------------- _DWORD *__thiscall sub_4817B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC54 & 1) ) { dword_ACDC54 |= 1u; atexit(sub_9A0FA0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MobViewInfoTab::`vftable'; return v1; } // 9B8380: using guessed type void *ITableBase::`vftable'; // 9B8B10: using guessed type void *MobViewInfoTab::`vftable'; // ACDC50: using guessed type int dword_ACDC50; // ACDC54: using guessed type int dword_ACDC54; //----- (00481800) -------------------------------------------------------- _DWORD *__thiscall sub_481800(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC58 & 1) ) { dword_ACDC58 |= 1u; atexit(sub_9A0F70); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &NPCViewInfoTab::`vftable'; return v1; } // 9B83A8: using guessed type void *ITableBase::`vftable'; // 9B8B28: using guessed type void *NPCViewInfoTab::`vftable'; // ACDC54: using guessed type int dword_ACDC54; // ACDC58: using guessed type int dword_ACDC58; //----- (00481850) -------------------------------------------------------- __int16 __stdcall sub_481850(int a1) { return *(_WORD *)a1; } //----- (00481860) -------------------------------------------------------- _DWORD *__thiscall sub_481860(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC5C & 1) ) { dword_ACDC5C |= 1u; atexit(sub_9A0F40); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &AbnormalStateInfoTab::`vftable'; return v1; } // 9B8440: using guessed type void *ITableBase::`vftable'; // 9B8B40: using guessed type void *AbnormalStateInfoTab::`vftable'; // ACDC58: using guessed type int dword_ACDC58; // ACDC5C: using guessed type int dword_ACDC5C; //----- (004818B0) -------------------------------------------------------- void **__thiscall sub_4818B0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8440: using guessed type void *ITableBase::`vftable'; // 9B8450: using guessed type void *IIDTableBase::`vftable'; //----- (00481940) -------------------------------------------------------- _DWORD *__thiscall sub_481940(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC60 & 1) ) { dword_ACDC60 |= 1u; atexit(sub_9A0F10); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &AbnormalStateViewInfoTab::`vftable'; return v1; } // 9B8468: using guessed type void *ITableBase::`vftable'; // 9B8B58: using guessed type void *AbnormalStateViewInfoTab::`vftable'; // ACDC5C: using guessed type int dword_ACDC5C; // ACDC60: using guessed type int dword_ACDC60; //----- (00481990) -------------------------------------------------------- _DWORD *__thiscall sub_481990(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC64 & 1) ) { dword_ACDC64 |= 1u; atexit(sub_9A0EE0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &SubAbStateInfoTab::`vftable'; return v1; } // 9B8490: using guessed type void *ITableBase::`vftable'; // 9B8B70: using guessed type void *SubAbStateInfoTab::`vftable'; // ACDC60: using guessed type int dword_ACDC60; // ACDC64: using guessed type int dword_ACDC64; //----- (004819E0) -------------------------------------------------------- void **__thiscall sub_4819E0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8490: using guessed type void *ITableBase::`vftable'; // 9B84A0: using guessed type void *IIDTableBase::`vftable'; //----- (00481A70) -------------------------------------------------------- _DWORD *__thiscall sub_481A70(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC20 & 1) ) { dword_ACDC20 |= 1u; atexit(sub_9A1210); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MapInfoTab::`vftable'; return v1; } // 9B7C20: using guessed type void *ITableBase::`vftable'; // 9B8B88: using guessed type void *MapInfoTab::`vftable'; // ACDC1C: using guessed type int dword_ACDC1C; // ACDC20: using guessed type int dword_ACDC20; //----- (00481AC0) -------------------------------------------------------- _DWORD *__thiscall sub_481AC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC24 & 1) ) { dword_ACDC24 |= 1u; atexit(sub_9A11E0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MapViewInfoTab::`vftable'; return v1; } // 9B7C48: using guessed type void *ITableBase::`vftable'; // 9B8BA0: using guessed type void *MapViewInfoTab::`vftable'; // ACDC20: using guessed type int dword_ACDC20; // ACDC24: using guessed type int dword_ACDC24; //----- (00481B10) -------------------------------------------------------- _DWORD *__thiscall sub_481B10(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC28 & 1) ) { dword_ACDC28 |= 1u; atexit(sub_9A11B0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &UpGradeInfoTab::`vftable'; return v1; } // 9B7C70: using guessed type void *ITableBase::`vftable'; // 9B8BB8: using guessed type void *UpGradeInfoTab::`vftable'; // ACDC24: using guessed type int dword_ACDC24; // ACDC28: using guessed type int dword_ACDC28; //----- (00481B60) -------------------------------------------------------- _DWORD *__thiscall sub_481B60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC2C & 1) ) { dword_ACDC2C |= 1u; atexit(sub_9A1180); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ActionViewTable::`vftable'; return v1; } // 9B7CB8: using guessed type void *ITableBase::`vftable'; // 9B8BD0: using guessed type void *ActionViewTable::`vftable'; // ACDC28: using guessed type int dword_ACDC28; // ACDC2C: using guessed type int dword_ACDC2C; //----- (00481BB0) -------------------------------------------------------- int __stdcall sub_481BB0(unsigned __int8 *a1) { return *a1; } //----- (00481BC0) -------------------------------------------------------- _DWORD *__thiscall sub_481BC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC30 & 1) ) { dword_ACDC30 |= 1u; atexit(sub_9A1150); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &RidePetTable::`vftable'; return v1; } // 9B7D60: using guessed type void *ITableBase::`vftable'; // 9B8BE8: using guessed type void *RidePetTable::`vftable'; // ACDC2C: using guessed type int dword_ACDC2C; // ACDC30: using guessed type int dword_ACDC30; //----- (00481C10) -------------------------------------------------------- _DWORD *__thiscall sub_481C10(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC34 & 1) ) { dword_ACDC34 |= 1u; atexit(sub_9A1120); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MobCoordinateTab::`vftable'; return v1; } // 9B7EB8: using guessed type void *ITableBase::`vftable'; // 9B8C00: using guessed type void *MobCoordinateTab::`vftable'; // ACDC30: using guessed type int dword_ACDC30; // ACDC34: using guessed type int dword_ACDC34; //----- (00481C60) -------------------------------------------------------- _DWORD *__thiscall sub_481C60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC38 & 1) ) { dword_ACDC38 |= 1u; atexit(sub_9A10F0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &MobKillAnnounceTextTab::`vftable'; return v1; } // 9B7EE0: using guessed type void *ITableBase::`vftable'; // 9B8C18: using guessed type void *MobKillAnnounceTextTab::`vftable'; // ACDC34: using guessed type int dword_ACDC34; // ACDC38: using guessed type int dword_ACDC38; //----- (00481CB0) -------------------------------------------------------- void **__thiscall sub_481CB0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7EE0: using guessed type void *ITableBase::`vftable'; // 9B7EF0: using guessed type void *IIDTableBase::`vftable'; //----- (00481D40) -------------------------------------------------------- _DWORD *__thiscall sub_481D40(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC3C & 1) ) { dword_ACDC3C |= 1u; atexit(sub_9A10C0); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ChargedIconItemTab::`vftable'; return v1; } // 9B7F68: using guessed type void *ITableBase::`vftable'; // 9B8C30: using guessed type void *ChargedIconItemTab::`vftable'; // ACDC38: using guessed type int dword_ACDC38; // ACDC3C: using guessed type int dword_ACDC3C; //----- (00481D90) -------------------------------------------------------- void **__thiscall sub_481D90(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B7F68: using guessed type void *ITableBase::`vftable'; // 9B7F78: using guessed type void *IIDTableBase::`vftable'; //----- (00481E20) -------------------------------------------------------- _DWORD *__thiscall sub_481E20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC40 & 1) ) { dword_ACDC40 |= 1u; atexit(sub_9A1090); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ChargedMsgItemTab::`vftable'; return v1; } // 9B7F90: using guessed type void *ITableBase::`vftable'; // 9B8C48: using guessed type void *ChargedMsgItemTab::`vftable'; // ACDC3C: using guessed type int dword_ACDC3C; // ACDC40: using guessed type int dword_ACDC40; //----- (00481E70) -------------------------------------------------------- _DWORD *__thiscall sub_481E70(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC44 & 1) ) { dword_ACDC44 |= 1u; atexit(sub_9A1060); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &AttendRewardTab::`vftable'; return v1; } // 9B8088: using guessed type void *ITableBase::`vftable'; // 9B8C60: using guessed type void *AttendRewardTab::`vftable'; // ACDC40: using guessed type int dword_ACDC40; // ACDC44: using guessed type int dword_ACDC44; //----- (00481EC0) -------------------------------------------------------- _DWORD *__thiscall sub_481EC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_ACDC48 & 1) ) { dword_ACDC48 |= 1u; atexit(sub_9A1030); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &BRAccUpgradeInfoTab::`vftable'; return v1; } // 9B8270: using guessed type void *ITableBase::`vftable'; // 9B8C78: using guessed type void *BRAccUpgradeInfoTab::`vftable'; // ACDC44: using guessed type int dword_ACDC44; // ACDC48: using guessed type int dword_ACDC48; //----- (00481F10) -------------------------------------------------------- void **__thiscall sub_481F10(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B8270: using guessed type void *ITableBase::`vftable'; // 9B8280: using guessed type void *IIDTableBase::`vftable'; //----- (00481FA0) -------------------------------------------------------- bool __cdecl sub_481FA0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB38C; if ( !dword_ACB38C ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_47A4B0(v5); else v4 = 0; v12 = -1; dword_ACB38C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB38C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB38C + 56); if ( !v6 || *v6 != 51 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB38C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB38C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB38C: using guessed type int dword_ACB38C; //----- (004820D0) -------------------------------------------------------- char ***__thiscall sub_4820D0(char ***this, int **a2) { char ***v2; // esi char **v3; // eax char *v4; // ecx int *v5; // eax int v6; // edx int v8; // [esp+0h] [ebp-34h] void **v9; // [esp+10h] [ebp-24h] char *v10; // [esp+1Ch] [ebp-18h] char ***v11; // [esp+20h] [ebp-14h] int *v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v12 = &v8; v2 = this; v11 = this; this[1] = 0; v3 = (char **)operator new(0xCu); if ( !v3 ) { v10 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v10); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v2 = v3; *v3 = (char *)v3; (*v2)[1] = (char *)*v2; v4 = **v2; v5 = *a2; v6 = **a2; v13 = 0; LOBYTE(v13) = 1; sub_47A3E0(v2, v4, v6, (int)v5, (int)a2); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00482190) -------------------------------------------------------- bool __cdecl sub_482190(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB230; if ( !dword_ACB230 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_4816C0(v5); else v4 = 0; v12 = -1; dword_ACB230 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB230 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB230 + 56); if ( !v6 || *v6 != 19303 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB230 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB230 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB230: using guessed type int dword_ACB230; //----- (004822D0) -------------------------------------------------------- bool __cdecl sub_4822D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA70; if ( !dword_ACDA70 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481710(v5); else v4 = 0; v12 = -1; dword_ACDA70 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA70 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA70 + 56); if ( !v6 || *v6 != 14454 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA70 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA70 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA70: using guessed type int dword_ACDA70; //----- (00482410) -------------------------------------------------------- bool __cdecl sub_482410(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA48; if ( !dword_ACDA48 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481760(v5); else v4 = 0; v12 = -1; dword_ACDA48 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA48 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA48 + 56); if ( !v6 || *v6 != 1193 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA48 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA48 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA48: using guessed type int dword_ACDA48; //----- (00482550) -------------------------------------------------------- bool __cdecl sub_482550(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA74; if ( !dword_ACDA74 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_4817B0(v5); else v4 = 0; v12 = -1; dword_ACDA74 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA74 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA74 + 56); if ( !v6 || *v6 != 3601 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA74 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA74 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA74: using guessed type int dword_ACDA74; //----- (00482690) -------------------------------------------------------- bool __cdecl sub_482690(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA78; if ( !dword_ACDA78 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481800(v5); else v4 = 0; v12 = -1; dword_ACDA78 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA78 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA78 + 56); if ( !v6 || *v6 != 15448 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA78 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA78 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA78: using guessed type int dword_ACDA78; //----- (004827D0) -------------------------------------------------------- bool __cdecl sub_4827D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA7C; if ( !dword_ACDA7C ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481860(v5); else v4 = 0; v12 = -1; dword_ACDA7C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA7C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA7C + 56); if ( !v6 || *v6 != 4042 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA7C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA7C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA7C: using guessed type int dword_ACDA7C; //----- (00482910) -------------------------------------------------------- bool __cdecl sub_482910(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA80; if ( !dword_ACDA80 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481940(v5); else v4 = 0; v12 = -1; dword_ACDA80 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA80 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA80 + 56); if ( !v6 || *v6 != 5642 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA80 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA80 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA80: using guessed type int dword_ACDA80; //----- (00482A50) -------------------------------------------------------- bool __cdecl sub_482A50(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA84; if ( !dword_ACDA84 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481990(v5); else v4 = 0; v12 = -1; dword_ACDA84 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA84 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA84 + 56); if ( !v6 || *v6 != 1068 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA84 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA84 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA84: using guessed type int dword_ACDA84; //----- (00482B90) -------------------------------------------------------- bool __cdecl sub_482B90(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB234; if ( !dword_ACB234 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481A70(v5); else v4 = 0; v12 = -1; dword_ACB234 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB234 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB234 + 56); if ( !v6 || *v6 != 504 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB234 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB234 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB234: using guessed type int dword_ACB234; //----- (00482CD0) -------------------------------------------------------- bool __cdecl sub_482CD0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA4C; if ( !dword_ACDA4C ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481AC0(v5); else v4 = 0; v12 = -1; dword_ACDA4C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA4C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA4C + 56); if ( !v6 || *v6 != 3107 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA4C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA4C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA4C: using guessed type int dword_ACDA4C; //----- (00482E10) -------------------------------------------------------- bool __cdecl sub_482E10(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA50; if ( !dword_ACDA50 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481B10(v5); else v4 = 0; v12 = -1; dword_ACDA50 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA50 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA50 + 56); if ( !v6 || *v6 != 2603 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA50 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA50 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA50: using guessed type int dword_ACDA50; //----- (00482F50) -------------------------------------------------------- bool __cdecl sub_482F50(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACB6C4; if ( !dword_ACB6C4 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481B60(v5); else v4 = 0; v12 = -1; dword_ACB6C4 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACB6C4 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACB6C4 + 56); if ( !v6 || *v6 != 587 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACB6C4 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACB6C4 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACB6C4: using guessed type int dword_ACB6C4; //----- (00483090) -------------------------------------------------------- bool __cdecl sub_483090(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA54; if ( !dword_ACDA54 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481BC0(v5); else v4 = 0; v12 = -1; dword_ACDA54 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA54 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA54 + 56); if ( !v6 || *v6 != 5585 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA54 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA54 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA54: using guessed type int dword_ACDA54; //----- (004831D0) -------------------------------------------------------- bool __cdecl sub_4831D0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA58; if ( !dword_ACDA58 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481C10(v5); else v4 = 0; v12 = -1; dword_ACDA58 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA58 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA58 + 56); if ( !v6 || *v6 != 257 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA58 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA58 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA58: using guessed type int dword_ACDA58; //----- (00483310) -------------------------------------------------------- bool __cdecl sub_483310(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA5C; if ( !dword_ACDA5C ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481C60(v5); else v4 = 0; v12 = -1; dword_ACDA5C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA5C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA5C + 56); if ( !v6 || *v6 != 140 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA5C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA5C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA5C: using guessed type int dword_ACDA5C; //----- (00483450) -------------------------------------------------------- bool __cdecl sub_483450(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA60; if ( !dword_ACDA60 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481D40(v5); else v4 = 0; v12 = -1; dword_ACDA60 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA60 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA60 + 56); if ( !v6 || *v6 != 741 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA60 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA60 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA60: using guessed type int dword_ACDA60; //----- (00483590) -------------------------------------------------------- bool __cdecl sub_483590(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA64; if ( !dword_ACDA64 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481E20(v5); else v4 = 0; v12 = -1; dword_ACDA64 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA64 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA64 + 56); if ( !v6 || *v6 != 44 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA64 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA64 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA64: using guessed type int dword_ACDA64; //----- (004836C0) -------------------------------------------------------- bool __cdecl sub_4836C0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA68; if ( !dword_ACDA68 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481E70(v5); else v4 = 0; v12 = -1; dword_ACDA68 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA68 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA68 + 56); if ( !v6 || *v6 != 152 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA68 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA68 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA68: using guessed type int dword_ACDA68; //----- (00483800) -------------------------------------------------------- bool __cdecl sub_483800(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACDA6C; if ( !dword_ACDA6C ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_481EC0(v5); else v4 = 0; v12 = -1; dword_ACDA6C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACDA6C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACDA6C + 56); if ( !v6 || *v6 != 6860 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACDA6C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA6C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA6C: using guessed type int dword_ACDA6C; //----- (00483940) -------------------------------------------------------- char __cdecl sub_483940(char *Src, int a2) { int v2; // eax unsigned int v3; // edi unsigned int v4; // esi int v5; // eax if ( !sub_481FA0(Src, a2, 0) ) return 0; v2 = *(_DWORD *)(dword_ACB2E0 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( !v3 ) return 1; while ( 1 ) { v5 = sub_7474E0((_DWORD *)(dword_ACB2E0 + 4), v4); if ( v5 ) { if ( *(_DWORD *)(v5 + 546) == 4 && !sub_44DFF0((unsigned __int8 *)(v5 + 2)) ) break; } if ( ++v4 >= v3 ) return 1; } return 0; } // ACB2E0: using guessed type int dword_ACB2E0; //----- (004839D0) -------------------------------------------------------- void __thiscall sub_4839D0(int **this, int **a2) { int **v2; // esi int *v3; // eax int *v4; // edi v2 = this; if ( this != a2 ) { v3 = (int *)**this; **this = (int)*this; (*this)[1] = (int)*this; this[1] = 0; if ( v3 != *this ) { do { v4 = (int *)*v3; operator delete(v3); v3 = v4; } while ( v4 != *v2 ); } if ( a2[1] ) sub_477610(v2, **v2, a2, **a2, (int)*a2, (unsigned int)a2[1]); } } //----- (00483A30) -------------------------------------------------------- void *__cdecl sub_483A30(void *a1, void *a2, int a3) { *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; sub_406450(a1, a2); sub_4820D0((char ***)a1 + 7, (int **)a3); return a1; } //----- (00483AA0) -------------------------------------------------------- _DWORD *__thiscall sub_483AA0(_DWORD *this, char *a2) { _DWORD *v2; // esi int **v3; // ebx _DWORD *v4; // edi _DWORD *v5; // eax void **v7; // [esp+10h] [ebp-20h] _DWORD *v8; // [esp+1Ch] [ebp-14h] _DWORD *v9; // [esp+20h] [ebp-10h] int v10; // [esp+2Ch] [ebp-4h] v2 = this; v9 = this; v3 = (int **)a2; this[5] = 15; this[4] = 0; *(_BYTE *)this = 0; sub_406450(this, v3); v10 = 0; v4 = v2 + 7; v8 = v4; v4[1] = 0; v5 = operator new(0xCu); if ( !v5 ) { a2 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a2); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } *v4 = v5; *v5 = v5; *(_DWORD *)(*v4 + 4) = *v4; LOBYTE(v10) = 1; sub_4839D0((int **)v2 + 7, v3 + 7); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00483B60) -------------------------------------------------------- void __thiscall sub_483B60(int this) { int v1; // ebx double v2; // st7 unsigned int v3; // esi signed int v4; // eax int *v5; // ecx int v6; // edi int v9; // ST08_4 int v10; // [esp+8h] [ebp-4h] v1 = this; v2 = *(float *)(this + 40); v3 = *(_DWORD *)(this + 36); *(float *)&v10 = (double)*(unsigned int *)(this + 8) / (double)v3; if ( *(float *)&v10 > v2 ) { v4 = 0; do { if ( v3 >= 0x1FFFFFFF ) break; ++v4; v3 *= 2; } while ( v4 < 3 ); v5 = (int *)(this + 16); v6 = *(_DWORD *)(v1 + 16); v10 = *(int *)(v1 + 4); if ( v6 != *(_DWORD *)(v1 + 20) ) { v5 = (int *)(v1 + 16); *(_DWORD *)(v1 + 20) = v6; } sub_433D40(v5, *v5, (char *)(2 * v3), (int)&v10); *(_DWORD *)(v1 + 32) = v3 - 1; v9 = *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 36) = v3; sub_483DE0((_DWORD **)v1, v9); } } //----- (00483C10) -------------------------------------------------------- int __thiscall sub_483C10(void **this, int a2, void *a3) { void *v3; // esi void **v4; // edi void *v5; // ecx int result; // eax void *v7; // [esp+14h] [ebp+Ch] v3 = a3; v4 = this; v5 = *(void **)a3; v7 = *(void **)a3; if ( v3 != *v4 ) { **((_DWORD **)v3 + 1) = *(_DWORD *)v3; *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1); sub_433CD0((void **)v3 + 2); operator delete(v3); v5 = v7; v4[1] = (char *)v4[1] - 1; } result = a2; *(_DWORD *)a2 = v5; return result; } //----- (00483C60) -------------------------------------------------------- int __thiscall sub_483C60(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // ebx unsigned int v5; // esi int v6; // eax int v7; // edi int v8; // edx int v9; // ecx int v10; // esi int v11; // eax void **v12; // edx unsigned int v13; // ebx unsigned int v14; // edi unsigned __int8 *v15; // eax unsigned int v16; // edx unsigned __int8 *v17; // ecx int v18; // eax bool v19; // sf void *v20; // ecx int v21; // eax void *v22; // edx int v23; // eax unsigned __int8 *v24; // eax int result; // eax void *v26; // edx int v27; // eax int v28; // [esp+Ch] [ebp-14h] unsigned int v29; // [esp+10h] [ebp-10h] void **v30; // [esp+14h] [ebp-Ch] int v31; // [esp+18h] [ebp-8h] int v32; // [esp+1Ch] [ebp-4h] v4 = this; v5 = this[8]; v31 = (int)this; v6 = sub_40C450((char *)a3); v7 = v5 & v6; v32 = v5 & v6; if ( v4[9] <= (v5 & v6) ) { v7 += -1 - (v5 >> 1); v32 = v7; } v8 = v4[4]; v9 = *(_DWORD *)(v8 + 8 * v7); v10 = v4[1]; v11 = v8 + 8 * v7; v12 = (void **)(v4 + 1); v28 = v9; v30 = (void **)(v4 + 1); if ( v10 == v9 || (v10 = **(_DWORD **)(v11 + 4), v10 == v9) ) { LABEL_18: v20 = a4; if ( v10 != *(_DWORD *)a4 ) { sub_477700(v12, v10, v12, (int)a4, *(_DWORD *)a4, 1u); v20 = a4; } v21 = v4[4]; v22 = *(void **)(v21 + 8 * v7); v23 = v21 + 8 * v7; if ( v22 == *v30 ) { *(_DWORD *)v23 = v20; *(_DWORD *)(*(_DWORD *)(v31 + 16) + 8 * v32 + 4) = v20; } else if ( v22 == (void *)v10 ) { *(_DWORD *)v23 = v20; } else { v26 = **(void ***)(v23 + 4); *(_DWORD *)(v23 + 4) = v26; if ( v26 != v20 ) { v27 = *(_DWORD *)(v31 + 16) + 8 * v32 + 4; *(_DWORD *)v27 = *(_DWORD *)(*(_DWORD *)v27 + 4); } } sub_483B60(v31); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; return result; } v13 = *(_DWORD *)(a3 + 16); v29 = *(_DWORD *)(a3 + 20); while ( 1 ) { v10 = *(_DWORD *)(v10 + 4); v14 = *(_DWORD *)(v10 + 24); v15 = (unsigned __int8 *)(v10 + 8); if ( *(_DWORD *)(v10 + 28) >= 0x10u ) v15 = *(unsigned __int8 **)v15; v16 = v13; if ( v13 >= v14 ) v16 = *(_DWORD *)(v10 + 24); v17 = (unsigned __int8 *)a3; if ( v29 >= 0x10 ) v17 = *(unsigned __int8 **)a3; v18 = sub_40C0B0(v17, v15, v16); v19 = v18 < 0; if ( v18 ) break; if ( v13 >= v14 ) { LOBYTE(v18) = v13 != v14; v19 = v18 < 0; break; } LABEL_16: if ( v10 == v28 ) goto LABEL_17; } if ( v19 ) goto LABEL_16; if ( v29 < 0x10 ) v24 = (unsigned __int8 *)a3; else v24 = *(unsigned __int8 **)a3; if ( sub_40C2F0((unsigned __int8 *)(v10 + 8), 0, *(_DWORD *)(v10 + 24), v24, v13) < 0 ) { v10 = *(_DWORD *)v10; LABEL_17: v4 = (_DWORD *)v31; v7 = v32; v12 = v30; goto LABEL_18; } sub_483C10(v30, (int)&a3, a4); result = a2; *(_DWORD *)a2 = v10; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (00483DE0) -------------------------------------------------------- int __thiscall sub_483DE0(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi void *v4; // ST08_4 bool v5; // bl int v6; // [esp+4h] [ebp-8h] void *v7; // [esp+14h] [ebp+8h] result = a2; v3 = this; if ( *this[1] != a2 ) { v7 = *(void **)(a2 + 4); do { v4 = (void *)*v3[1]; v5 = v4 == v7; result = sub_483C60(v3, (int)&v6, (int)v4 + 8, v4); } while ( !v5 ); } return result; } //----- (00483E30) -------------------------------------------------------- char *__stdcall sub_483E30(char *a1, int a2, char *a3) { char *v3; // esi char *v4; // eax int v6; // [esp+0h] [ebp-30h] void **v7; // [esp+10h] [ebp-20h] void *v8; // [esp+1Ch] [ebp-14h] int *v9; // [esp+20h] [ebp-10h] int v10; // [esp+2Ch] [ebp-4h] v9 = &v6; v3 = (char *)operator new(0x30u); v8 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a1); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v4 = a1; *((_DWORD *)v3 + 1) = a2; v10 = 0; *(_DWORD *)v3 = v4; a1 = v3 + 8; a2 = (int)(v3 + 8); LOBYTE(v10) = 1; if ( v3 != (char *)-8 ) sub_483AA0((_DWORD *)v3 + 2, a3); return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00483EF0) -------------------------------------------------------- int __thiscall sub_483EF0(_DWORD *this, int a2, char *a3) { _DWORD *v3; // ebx char **v4; // eax char *v5; // edi char *v6; // eax int v7; // ecx v3 = this; v4 = (char **)this[1]; v5 = *v4; v6 = sub_483E30(*v4, *((_DWORD *)*v4 + 1), a3); v7 = v3[2]; if ( (unsigned int)(107374181 - v7) < 1 ) std::_Xlength_error("list too long"); v3[2] = v7 + 1; *((_DWORD *)v5 + 1) = v6; **((_DWORD **)v6 + 1) = v6; sub_483C60(v3, a2, *(_DWORD *)v3[1] + 8, *(void **)v3[1]); return a2; } //----- (00483F60) -------------------------------------------------------- char __cdecl sub_483F60(char *Src, int a2) { int v2; // eax unsigned int v3; // eax int v4; // eax void *v5; // edi char v6; // al _DWORD *v7; // eax _DWORD *v8; // esi char **v9; // eax char *v10; // eax char *v11; // edi int v12; // esi char **v13; // eax int v14; // ecx int v16; // [esp+10h] [ebp-A4h] void **v17; // [esp+18h] [ebp-9Ch] int v18; // [esp+24h] [ebp-90h] int v19; // [esp+28h] [ebp-8Ch] char **v20; // [esp+30h] [ebp-84h] char *v21; // [esp+34h] [ebp-80h] int v22; // [esp+38h] [ebp-7Ch] unsigned int i; // [esp+3Ch] [ebp-78h] unsigned int v24; // [esp+40h] [ebp-74h] char v25; // [esp+44h] [ebp-70h] void *v26; // [esp+6Ch] [ebp-48h] int v27; // [esp+7Ch] [ebp-38h] unsigned int v28; // [esp+80h] [ebp-34h] void *v29; // [esp+88h] [ebp-2Ch] int v30; // [esp+98h] [ebp-1Ch] unsigned int v31; // [esp+9Ch] [ebp-18h] int v32; // [esp+B0h] [ebp-4h] if ( !sub_481310(Src, a2, 0) ) return 0; v2 = *(_DWORD *)(dword_ACDA3C + 56); if ( v2 ) v24 = *(_DWORD *)(v2 + 40); else v24 = 0; v3 = 0; for ( i = 0; v3 < v24; i = v3 ) { v4 = sub_7474E0((_DWORD *)(dword_ACDA3C + 4), v3); v5 = (void *)v4; v22 = v4; if ( v4 ) { v6 = *(_BYTE *)(v4 + 32); if ( v6 && v6 != 1 ) return 0; v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_4018E0(&v26, v5, strlen((const char *)v5)); v32 = 0; sub_438D10(&unk_ACB29C, &v20, (char *)&v26); v32 = -1; if ( v28 >= 0x10 ) operator delete(v26); v28 = 15; v27 = 0; LOBYTE(v26) = 0; if ( v20 == dword_ACB2A0 ) { v19 = 0; v7 = operator new(0xCu); v8 = v7; if ( !v7 ) { v21 = 0; std::exception::exception((std::exception *)&v17, (const char *const *)&v21); v17 = &std::bad_alloc::`vftable'; _CxxThrowException(&v17, &_TI2_AVbad_alloc_std__); } *v7 = v7; v18 = (int)v7; v7[1] = v7; v32 = 1; v9 = sub_67ADC0((char *)v7, (int)v7, (int)&v22); v8[1] = v9; *(_DWORD *)v9[1] = v9; v19 = 1; v31 = 15; v30 = 0; LOBYTE(v29) = 0; sub_4018E0(&v29, v5, strlen((const char *)v5)); LOBYTE(v32) = 2; v10 = (char *)sub_483A30(&v25, &v29, (int)&v18); LOBYTE(v32) = 3; sub_483EF0(&unk_ACB29C, (int)&v16, v10); sub_433CD0((void **)&v25); if ( v31 >= 0x10 ) operator delete(v29); v31 = 15; v30 = 0; LOBYTE(v29) = 0; v32 = -1; sub_4E6E90(&v18); } else { v11 = v20[9]; v12 = (int)(v20 + 9); v13 = sub_67ADC0(v20[9], *((_DWORD *)v11 + 1), (int)&v22); v14 = *(_DWORD *)(v12 + 4); if ( (unsigned int)(1073741822 - v14) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v12 + 4) = v14 + 1; *((_DWORD *)v11 + 1) = v13; *(_DWORD *)v13[1] = v13; } } v3 = i + 1; } return 1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACDA3C: using guessed type int dword_ACDA3C; //----- (004841F0) -------------------------------------------------------- int __thiscall sub_4841F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // eax _DWORD *v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax int result; // eax v1 = this; v2 = operator new(0x244u); if ( v2 ) v3 = sub_488E60(v2); else v3 = 0; dword_ACDD50 = sub_8F0010(v1, (int)v3); v4 = operator new(0x28u); if ( v4 ) v5 = sub_489600(v4); else v5 = 0; dword_ACDD54 = sub_8F0010(v1, (int)v5); v6 = operator new(0x3Cu); if ( v6 ) v7 = sub_48F950(v6); else v7 = 0; dword_ACDD58 = sub_8F0010(v1, (int)v7); v8 = operator new(0x170u); if ( v8 ) v9 = sub_411430(v8); else v9 = 0; dword_ACDD5C = sub_8F0010(v1, (int)v9); v10 = operator new(0xD8u); if ( v10 ) v11 = sub_40E4A0(v10); else v11 = 0; dword_ACDD60 = sub_8F0010(v1, (int)v11); v12 = operator new(0x3Cu); if ( v12 ) v13 = sub_6451A0(v12); else v13 = 0; dword_ACDD64 = sub_8F0010(v1, (int)v13); v14 = operator new(0x1458u); if ( v14 ) v15 = sub_4E51E0(v14); else v15 = 0; dword_ACDD68 = sub_8F0010(v1, v15); v16 = operator new(0x84u); if ( v16 ) v17 = sub_644450(v16); else v17 = 0; dword_ACDD6C = sub_8F0010(v1, (int)v17); v18 = operator new(0xC4u); if ( v18 ) v19 = sub_646DB0(v18); else v19 = 0; result = sub_8F0010(v1, (int)v19); dword_ACDD70 = result; return result; } // ACDD50: using guessed type int dword_ACDD50; // ACDD54: using guessed type int dword_ACDD54; // ACDD58: using guessed type int dword_ACDD58; // ACDD5C: using guessed type int dword_ACDD5C; // ACDD60: using guessed type int dword_ACDD60; // ACDD64: using guessed type int dword_ACDD64; // ACDD6C: using guessed type int dword_ACDD6C; // ACDD70: using guessed type int dword_ACDD70; //----- (00484410) -------------------------------------------------------- void __thiscall sub_484410(void *this) { *(_DWORD *)this = &NiActionData::`vftable'; } // 9B8D7C: using guessed type void *NiActionData::`vftable'; //----- (00484420) -------------------------------------------------------- char *__thiscall sub_484420(void *this, char a2) { char *v2; // edi char *result; // eax int v4; // esi v2 = (char *)this; if ( a2 & 2 ) { `eh vector destructor iterator'(this, 4u, *((_DWORD *)this - 1), sub_410C00); if ( a2 & 1 ) operator delete[](v2 - 4); result = v2 - 4; } else { v4 = *(_DWORD *)this; if ( *(_DWORD *)this && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (004844A0) -------------------------------------------------------- char *__thiscall sub_4844A0(void *this, char a2) { char *v2; // esi char *result; // eax v2 = (char *)this; if ( a2 & 2 ) { `eh vector destructor iterator'(this, 0x1Cu, *((_DWORD *)this - 1), sub_484410); if ( a2 & 1 ) operator delete[](v2 - 4); result = v2 - 4; } else { *(_DWORD *)this = &NiActionData::`vftable'; if ( a2 & 1 ) operator delete(this); result = v2; } return result; } // 9B8D7C: using guessed type void *NiActionData::`vftable'; //----- (00484500) -------------------------------------------------------- int *__thiscall sub_484500(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl void **v14; // eax _DWORD *i; // ecx _BYTE *v16; // eax int v17; // eax int *result; // eax void **v19; // [esp+10h] [ebp-8h] _DWORD *v20; // [esp+14h] [ebp-4h] v3 = (int *)a3; v20 = this; if ( *(_BYTE *)(a3 + 45) ) std::_Xout_of_range("invalid map/set iterator"); v19 = (void **)a3; sub_66FB80(&a3); if ( *(_BYTE *)(*v3 + 45) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; v7 = v20; v8 = v20[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v20[1] == v3 ) { if ( *(_BYTE *)(v4 + 45) ) { v9 = (_DWORD *)v6; } else { v9 = sub_5AB880((_DWORD *)v4); v7 = v20; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 45) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6689E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 45) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v20[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 44); *(_BYTE *)(v5 + 44) = *((_BYTE *)v3 + 44); *((_BYTE *)v3 + 44) = v13; LABEL_35: v14 = v19; if ( *((_BYTE *)v19 + 44) == 1 ) { for ( i = v20; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 44) != 1 ) break; v16 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v16 = *(_BYTE **)(v6 + 8); if ( !v16[44] ) { v16[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_467110(i, v6); v16 = *(_BYTE **)(v6 + 8); i = v20; } if ( v16[45] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 || *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) == 1 ) { *(_BYTE *)(*(_DWORD *)v16 + 44) = 1; v16[44] = 0; sub_747860(i, v16); v16 = *(_BYTE **)(v6 + 8); i = v20; } v16[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) = 1; sub_467110(i, v6); break; } } else { if ( !v16[44] ) { v16[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_747860(i, (_DWORD *)v6); v16 = *(_BYTE **)v6; i = v20; } if ( v16[45] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 44) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v16 + 44) == 1 ) { *(_BYTE *)(*((_DWORD *)v16 + 2) + 44) = 1; v16[44] = 0; sub_467110(i, (int)v16); v16 = *(_BYTE **)v6; i = v20; } v16[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*(_DWORD *)v16 + 44) = 1; sub_747860(i, (_DWORD *)v6); break; } } v16[44] = 0; LABEL_53: v4 = v6; } v14 = v19; *(_BYTE *)(v4 + 44) = 1; } if ( (unsigned int)v14[8] >= 0x10 ) operator delete(v14[3]); v19[8] = (void *)15; v19[7] = 0; *((_BYTE *)v19 + 12) = 0; operator delete(v19); v17 = v20[2]; if ( v17 ) v20[2] = v17 - 1; result = a2; *a2 = a3; return result; } //----- (00484780) -------------------------------------------------------- void __stdcall sub_484780(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 45) ) { do { sub_484780(v2[2]); v2 = (void **)*v2; if ( (unsigned int)v1[8] >= 0x10 ) operator delete(v1[3]); v1[8] = (void *)15; v1[7] = 0; *((_BYTE *)v1 + 12) = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 45) ); } } //----- (004847E0) -------------------------------------------------------- int *__thiscall sub_4847E0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 45) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 45) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 45); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_484500(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_484780(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (004848A0) -------------------------------------------------------- void __thiscall sub_4848A0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[12] ) { sub_8F9E00(&unk_BA6B10, this[12]); v1[12] = 0; } if ( v1[13] ) { sub_8F9E00(&unk_BA6B10, v1[13]); v1[13] = 0; } if ( v1[14] ) { sub_8F9E00(&unk_BA6B10, v1[14]); v1[14] = 0; } if ( v1[17] ) { sub_8F9E00(&unk_BA6B10, v1[17]); v1[17] = 0; } if ( v1[15] ) { sub_8F9E00(&unk_BA6B10, v1[15]); v1[15] = 0; } if ( v1[16] ) { sub_8F9E00(&unk_BA6B10, v1[16]); v1[16] = 0; } if ( v1[23] ) { sub_8F9E00(&unk_BA6B10, v1[23]); v1[23] = 0; } if ( v1[22] ) { sub_8F9E00(&unk_BA6B10, v1[22]); v1[22] = 0; } sub_43CFD0(3u); } //----- (00484960) -------------------------------------------------------- char __thiscall sub_484960(_DWORD *this) { _DWORD *v1; // edi int **i; // esi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v1 = this; if ( this[21] ) { for ( i = (int **)this[19]; i; i = (int **)*i ) sub_8F81A0(&unk_BA6B10, i[2]); } v3 = (_DWORD *)v1[19]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[18] + 8))(v1 + 18, v4); } v1[21] = 0; v1[19] = 0; v1[20] = 0; return 1; } //----- (004849C0) -------------------------------------------------------- void __thiscall sub_4849C0(int this) { int v1; // edi int v2; // esi int v3; // esi v1 = this; *(_BYTE *)(this + 148) = 0; v2 = *(_DWORD *)(this + 100); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(v1 + 100) = 0; } v3 = *(_DWORD *)(v1 + 104); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *(_DWORD *)(v1 + 104) = 0; } } //----- (00484A30) -------------------------------------------------------- char __thiscall sub_484A30(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi v1 = this; v2 = 0; if ( !this[24] ) { v3 = operator new(0x20u); if ( v3 ) v2 = sub_435790(v3); v4 = v1[24]; if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[24] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } *(_DWORD *)(v1[24] + 8) = v1; } sub_435530((_DWORD *)v1[24], 19, 63, 1, 0, 0); return 1; } //----- (00484B30) -------------------------------------------------------- void __thiscall sub_484B30(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi v1 = this; v2 = this[38]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[38] = 0; } v3 = v1[36]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[36] = 0; } v4 = v1[35]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v1[35] = 0; } } //----- (00484BD0) -------------------------------------------------------- char __thiscall sub_484BD0(_DWORD *this) { _DWORD *v1; // edi volatile LONG *v2; // eax volatile LONG *v3; // esi int v4; // ST3C_4 int v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // ebx int v8; // ST3C_4 int v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // ebx int v12; // ST3C_4 int v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // ebx int v16; // ST3C_4 int v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax _DWORD *v20; // eax int v22; // eax int *v23; // eax char *v24; // eax char *v25; // eax char v26; // [esp+5Ch] [ebp-120h] int v27; // [esp+64h] [ebp-118h] volatile LONG *v28; // [esp+68h] [ebp-114h] char v29; // [esp+6Ch] [ebp-110h] int v30; // [esp+178h] [ebp-4h] v1 = this; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v29, "%sAccount\\%s.tga", byte_ACAB50, "darkround"); v2 = sub_486130((int)&v29); v3 = v2; v28 = v2; if ( v2 ) InterlockedIncrement(v2 + 1); v30 = 0; if ( !v3 ) return 0; v4 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 64))(v3); v5 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 60))(v3); v6 = sub_8F4010(0, 0, (int)v3, 0, 0, 0, v5, v4, 0, 0, 0); v1[12] = v6; (*(void (__thiscall **)(volatile LONG *, int))(*v6 + 468))(v6, xRight); (*(void (__stdcall **)(int))(*(_DWORD *)v1[12] + 472))(dword_AC2F78); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 240))(0); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v29, "%sAccount\\%s.tga", byte_ACAB50, "age12"); v7 = sub_486130((int)&v29); if ( v3 != v7 ) { if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v3 = v7; v28 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v8 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 64))(v3); v9 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 60))(v3); v10 = sub_8F4010(0, 0, (int)v3, 0, 0, 0, v9, v8, 0, 0, 0); v1[13] = v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[13] + 236))(xRight, dword_AC2F78, 0.89999998, 0.1); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v29, "%sAccount\\%s.tga", byte_ACAB50, "aragon"); v11 = sub_486130((int)&v29); if ( v3 != v11 ) { if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v3 = v11; v28 = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v12 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 64))(v3); v13 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 60))(v3); v14 = sub_8F4010(0, 0, (int)v3, 0, 0, 0, v13, v12, 0, 0, 0); v1[14] = v14; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[14] + 236))(xRight, dword_AC2F78, 1.0, 1.0); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v29, "%sAccount\\%s.tga", byte_ACAB50, "publisher"); v15 = sub_486130((int)&v29); if ( v3 != v15 ) { if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v3 = v15; v28 = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } v16 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 64))(v3); v17 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 60))(v3); v18 = sub_8F4010(0, 0, (int)v3, 0, 0, 0, v17, v16, 0, 0, 0); v1[17] = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[17] + 236))(xRight, dword_AC2F78, 0.0, 1.0); v27 = 0; LOBYTE(v30) = 1; v1[15] = sub_48B450((int)v1); v19 = sub_48D750((int)v1); v1[16] = v19; if ( v19 ) sub_48DC90(v19, (int)v1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[12]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[13]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[14]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[17]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[15]); v1[23] = 0; v1[22] = 0; if ( byte_ACEB01 == 1 ) { v1[23] = sub_48A4A0((int)v1); v20 = (_DWORD *)sub_48A340((int)v1); v1[22] = v20; if ( v20 ) sub_8F82A0(&unk_BA6B10, v20); } if ( v1[15] ) { if ( sub_44E2B0() ) { if ( !SteamUser() ) { LOBYTE(v30) = 0; sub_410C00(&v27); v30 = -1; sub_410C00(&v28); return 0; } v22 = SteamUser(); v23 = (int *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v22 + 8))(v22, &v26); v24 = sub_44E2C0(*v23, v23[1]); } else { v24 = (char *)sub_4090F0(641807773); } sub_48A8B0(v1[15], v24); v25 = (char *)sub_4090F0(692160665); sub_48A900(v1[15], v25); } v30 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); return 1; } // 9A5730: using guessed type int SteamUser(void); // ACAD5C: using guessed type char byte_ACAD5C; // ACEB01: using guessed type char byte_ACEB01; //----- (004850B0) -------------------------------------------------------- char __thiscall sub_4850B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx if ( !dword_BA6B50 ) return 1; v1 = (_DWORD *)dword_BA6B48; if ( !dword_BA6B48 ) return 1; v2 = this + 18; do { v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v3[2] = v1[2]; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) *v4 = v3; else v2[1] = v3; ++v2[3]; v2[2] = v3; v1 = (_DWORD *)*v1; } while ( v1 ); return 1; } // BA6B48: using guessed type int dword_BA6B48; // BA6B50: using guessed type int dword_BA6B50; //----- (00485110) -------------------------------------------------------- char __thiscall sub_485110(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // ebx struct hostent *v4; // eax char *v5; // eax char *v6; // ecx int v7; // ebx int v8; // edi char v10[4]; // [esp+Ch] [ebp-2Ch] int v11; // [esp+10h] [ebp-28h] int v12; // [esp+14h] [ebp-24h] int v13; // [esp+18h] [ebp-20h] int v14; // [esp+1Ch] [ebp-1Ch] char name[4]; // [esp+20h] [ebp-18h] int v16; // [esp+24h] [ebp-14h] int v17; // [esp+28h] [ebp-10h] int v18; // [esp+2Ch] [ebp-Ch] char v19; // [esp+30h] [ebp-8h] v1 = this; v2 = this[25]; v3 = dword_AB7F48; if ( v2 != dword_AB7F48 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[25] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } if ( v1[25] ) { v16 = dword_B7D168; v14 = dword_B7D174; *(_DWORD *)name = *(_DWORD *)dword_B7D164; v17 = dword_B7D16C; v18 = dword_B7D170; v19 = 0; v4 = gethostbyname(name); if ( v4 ) { v5 = inet_ntoa(**(struct in_addr **)v4->h_addr_list); dword_B7D170 = 0; dword_B7D16C = 0; dword_B7D168 = 0; *(_DWORD *)dword_B7D164 = 0; strncpy(dword_B7D164, v5, 0x10u); } v11 = dword_B7D168; *(_DWORD *)v10 = *(_DWORD *)dword_B7D164; v12 = dword_B7D16C; v6 = (char *)v1[25]; v13 = dword_B7D170; LOBYTE(v14) = 0; sub_905DE0(v6, v10); sub_905E10((_DWORD *)v1[25], dword_B7D174); } v7 = dword_AB7F4C; v8 = v1[26]; if ( v8 != dword_AB7F4C ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[26] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } *((_BYTE *)v1 + 148) = 0; return 1; } // AB7F48: using guessed type int dword_AB7F48; // AB7F4C: using guessed type int dword_AB7F4C; // B7D168: using guessed type int dword_B7D168; // B7D16C: using guessed type int dword_B7D16C; // B7D170: using guessed type int dword_B7D170; // B7D174: using guessed type int dword_B7D174; //----- (00485280) -------------------------------------------------------- char __thiscall sub_485280(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // edi _DWORD *v4; // ST30_4 void *v5; // eax float *v6; // edi _DWORD *v7; // eax unsigned int v8; // ebx unsigned int v9; // edi int v10; // edi float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] void *v15; // [esp+50h] [ebp-18h] volatile LONG *v16; // [esp+54h] [ebp-14h] void **v17; // [esp+58h] [ebp-10h] int v18; // [esp+64h] [ebp-4h] v1 = this; v2 = this[38]; v12 = 51.0; v1[47] = 3; v13 = 1.0; v14 = 15.0; sub_8D8240((_DWORD *)(v2 + 176)); v3 = (_DWORD *)v1[40]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[39] + 8))(v1 + 39, v4); } v1[42] = 0; v1[40] = 0; v1[41] = 0; v17 = 0; if ( v1[47] > 0u ) { do { v5 = operator new(0x84u); v15 = v5; v6 = 0; v18 = 0; if ( v5 ) v6 = sub_68E760((float *)v5, (int)&v12, 0, 0, 5); v16 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v18 = 1; sub_8B8EC0(v1 + 39, (int *)&v16); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[38] + 116))(*((_DWORD *)v6 + 29), 0); v18 = -1; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); v17 = (void **)((char *)v17 + 1); } while ( (unsigned int)v17 < v1[47] ); } v7 = operator new(0xE8u); v15 = v7; v8 = 0; v18 = 2; if ( v7 ) v17 = (void **)sub_85A1C0(v7, 0); else v17 = 0; v18 = -1; sub_85AB50(v17, "ShadowNode"); v9 = (v1[44] - v1[43]) >> 2; if ( v9 ) { do { (*(void (__stdcall **)(volatile LONG **, _DWORD))(*(_DWORD *)v1[35] + 120))(&v16, *(_DWORD *)(v1[43] + 4 * v8)); if ( v16 ) { v15 = (void *)v16; if ( !InterlockedDecrement(v16 + 1) ) { if ( v15 ) (**(void (__stdcall ***)(signed int))v15)(1); } } (*((void (__stdcall **)(_DWORD, _DWORD))*v17 + 29))(*(_DWORD *)(v1[43] + 4 * v8++), 0); } while ( v8 < v9 ); } v10 = (int)v17; (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v1[35] + 116))(v17, 0); sub_85BED0((_DWORD **)v1[35], 0.0, 1); sub_85C4D0((_DWORD *)v1[35]); sub_85C6F0((_DWORD *)v1[35]); sub_488D50(v1, v10); return 1; } //----- (004854E0) -------------------------------------------------------- void *__thiscall sub_4854E0(_DWORD *this) { _DWORD *v1; // esi const void *v2; // ecx void *v3; // edi void *result; // eax const void *v5; // ecx void *v6; // edi _DWORD *v7; // edi _DWORD *i; // esi _DWORD *v9; // ST08_4 v1 = this; v2 = (const void *)this[44]; v3 = (void *)v1[43]; if ( v3 != v2 ) { result = memcpy_0(v3, v2, 0); v1[44] = v3; } v5 = (const void *)v1[49]; v6 = (void *)v1[48]; if ( v6 != v5 ) { result = memcpy_0(v6, v5, 0); v1[49] = v6; } v7 = v1 + 39; for ( i = (_DWORD *)v1[40]; i; result = (void *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9) ) { v9 = i; i = (_DWORD *)*i; } v7[3] = 0; v7[1] = 0; v7[2] = 0; return result; } //----- (00485580) -------------------------------------------------------- void __thiscall sub_485580(_DWORD *this) { int v1; // esi int v2; // ecx void (__stdcall ***v3)(signed int); // ecx int v4; // ecx int v5; // edi v1 = (int)this; v2 = this[52]; if ( v2 ) { (*(void (**)(void))(*(_DWORD *)v2 + 220))(); sub_85B110(*(_DWORD **)(v1 + 208)); sub_85B070(*(_DWORD **)(v1 + 208)); v3 = *(void (__stdcall ****)(signed int))(v1 + 208); if ( v3 ) (**v3)(1); *(_DWORD *)(v1 + 208) = 0; } v4 = *(_DWORD *)(v1 + 212); if ( v4 ) { (*(void (**)(void))(*(_DWORD *)v4 + 64))(); *(_DWORD *)(v1 + 212) = 0; } sub_4854E0((_DWORD *)v1); sub_457EC0(*(_BYTE **)(v1 + 40)); sub_484B30((_DWORD *)v1); v5 = *(_DWORD *)(v1 + 96); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v1 + 96) = 0; } sub_4848A0((_DWORD **)v1); sub_4849C0(v1); *(_BYTE *)(v1 + 32) = 0; *(_DWORD *)(v1 + 28) = 0; } //----- (00485640) -------------------------------------------------------- char __thiscall sub_485640(char *this) { char *v1; // edi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // esi int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // esi void (__thiscall ***v9)(_DWORD, signed int); // ebx _DWORD *v10; // eax _DWORD *v11; // esi int v12; // esi volatile LONG *v13; // eax volatile LONG *v14; // esi volatile LONG *v15; // eax volatile LONG *v16; // esi char *v17; // eax _DWORD *v18; // esi volatile LONG *v19; // esi char result; // al void *v21; // eax void *v22; // ecx int v23; // eax int v24; // eax _DWORD *v25; // esi int v26; // eax signed int v27; // ecx void *v28; // esi unsigned int v29; // esi float *v30; // ecx unsigned int v31; // edx int v32; // eax unsigned int v33; // edx float *v34; // ecx float *v35; // eax double v36; // st7 int v37; // eax int v38; // eax _DWORD *v39; // eax volatile LONG *v40; // esi volatile LONG *v41; // esi volatile LONG *v42; // eax volatile LONG *v43; // esi void *v44; // [esp+70h] [ebp-28h] unsigned int v45; // [esp+74h] [ebp-24h] volatile LONG *v46; // [esp+7Ch] [ebp-1Ch] void *v47; // [esp+80h] [ebp-18h] volatile LONG *v48; // [esp+84h] [ebp-14h] unsigned int v49; // [esp+88h] [ebp-10h] int v50; // [esp+94h] [ebp-4h] v1 = this; v2 = operator new(0xECu); v3 = 0; v50 = 0; if ( v2 ) v3 = sub_861B30(v2); v4 = *((_DWORD *)v1 + 35); v50 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 35) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } *(_DWORD *)(*((_DWORD *)v1 + 35) + 232) = 0; v5 = *((_DWORD *)v1 + 38); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 38) = 0; } v6 = operator new(0xE8u); v50 = 1; if ( v6 ) v7 = sub_85A1C0(v6, 0); else v7 = 0; v8 = *((_DWORD *)v1 + 38); v50 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *((_DWORD *)v1 + 38) = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = 0; v50 = 2; v10 = operator new(0x20u); v11 = v10; LOBYTE(v50) = 3; if ( v10 ) { sub_85B2B0(v10); *((_BYTE *)v11 + 30) = 0; *v11 = &NiAlphaProperty::`vftable'; *((_WORD *)v11 + 14) = 236; v9 = (void (__thiscall ***)(_DWORD, signed int))v11; InterlockedIncrement(v11 + 1); } *((_WORD *)v9 + 14) |= 1u; *((_WORD *)v9 + 14) |= 0x200u; *((_WORD *)v9 + 14) = (_WORD)v9[7] & 0xF3FF | 0x1000; *((_BYTE *)v9 + 30) = 8; *((_WORD *)v9 + 14) = ((_WORD)v9[7] & 0xFE5F | 0x40) & 0xFFE3 | 2; v12 = *((_DWORD *)v1 + 38); v47 = v9; InterlockedIncrement((volatile LONG *)v9 + 1); LOBYTE(v50) = 4; sub_8A6330((_DWORD *)(v12 + 156), (int *)&v47); LOBYTE(v50) = 2; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); v13 = (volatile LONG *)operator new(0x28u); v14 = v13; LOBYTE(v50) = 5; if ( v13 ) { sub_85B2B0(v13); *v14 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v14 + 14) = 0; *((_DWORD *)v14 + 8) = 0; *((_DWORD *)v14 + 9) = 1; v48 = v14; } else { v14 = 0; v48 = 0; } if ( v14 ) InterlockedIncrement(v14 + 1); *((_DWORD *)v14 + 8) = 1; *((_DWORD *)v14 + 9) = 1; v49 = *((_DWORD *)v1 + 38); v47 = (void *)v14; InterlockedIncrement(v14 + 1); LOBYTE(v50) = 7; sub_8A6330((_DWORD *)(v49 + 156), (int *)&v47); LOBYTE(v50) = 6; if ( !InterlockedDecrement(v14 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v14)(v14, 1); v15 = (volatile LONG *)operator new(0x30u); v16 = v15; LOBYTE(v50) = 8; if ( v15 ) { sub_85B2B0(v15); *v16 = (volatile LONG)&NiFogProperty::`vftable'; *((float *)v16 + 9) = 0.0; *((float *)v16 + 10) = 0.0; *((float *)v16 + 11) = 0.0; *((_WORD *)v16 + 14) = 0; *((float *)v16 + 8) = 1.0; *((_DWORD *)v16 + 9) = dword_BA4724; *((_DWORD *)v16 + 10) = dword_BA4728; *((_DWORD *)v16 + 11) = dword_BA472C; } else { v16 = 0; } *((_WORD *)v16 + 14) &= 0xFFFEu; v49 = *((_DWORD *)v1 + 38); v47 = (void *)v16; InterlockedIncrement(v16 + 1); LOBYTE(v50) = 9; sub_8A6330((_DWORD *)(v49 + 156), (int *)&v47); LOBYTE(v50) = 6; if ( !InterlockedDecrement(v16 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); if ( !byte_ACAD5C ) sub_420410(); v17 = (char *)sub_401410(byte_ACAB50, "\\Account\\LoginBackground.nif"); v18 = sub_8F63D0(v17, 0); v44 = v18; if ( v18 ) { (*(void (__stdcall **)(_DWORD *, _DWORD))(**((_DWORD **)v1 + 35) + 116))(v18, 0); v21 = (void *)*((_DWORD *)v1 + 49); v47 = (void *)*((_DWORD *)v1 + 48); if ( v47 != v21 ) { v49 = 0; memcpy_0(v47, v21, 0); *((_DWORD *)v1 + 49) = (char *)v47 + v49; } v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "dragon"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 48, &v49); v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "cat"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 48, &v49); v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "Sphere01"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 48, &v49); v22 = (void *)*((_DWORD *)v1 + 44); v47 = (void *)*((_DWORD *)v1 + 43); if ( v47 != v22 ) { v49 = 0; memcpy_0(v47, v22, 0); *((_DWORD *)v1 + 44) = (char *)v47 + v49; } v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "Object05"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 43, &v49); v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "Object049"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 43, &v49); v49 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "Object04"); if ( v49 ) sub_5B3CF0((_DWORD *)v1 + 43, &v49); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 35) + 116))(*((_DWORD *)v1 + 38), 0); v23 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "LOGIN_BG_1_C"); if ( v23 ) *((_DWORD *)v1 + 53) = *(_DWORD *)(v23 + 12); v24 = (*(int (__thiscall **)(_DWORD *, const char *))(*v18 + 72))(v18, "Note"); v49 = v24; if ( v24 ) { v45 = *(_DWORD *)(v24 + 20); v47 = 0; if ( v45 ) { while ( 1 ) { v25 = *(_DWORD **)(*(_DWORD *)(v49 + 16) + 4 * (_DWORD)v47); if ( v25 ) { v26 = (*(int (__thiscall **)(_DWORD *))(*v25 + 4))(v25); if ( v26 ) break; } LABEL_73: v47 = (char *)v47 + 1; if ( (unsigned int)v47 >= v45 ) goto LABEL_83; } while ( (char *)v26 != dword_BA3BA8 ) { v26 = *(_DWORD *)(v26 + 4); if ( !v26 ) goto LABEL_73; } v27 = v25[3]; v28 = (void *)v25[4]; v49 = v27; v47 = v28; if ( v28 && (unsigned int)v27 < 3 ) { v29 = 0; if ( v27 >= 4 ) { v30 = (float *)((char *)v47 + 16); v31 = ((v49 - 4) >> 2) + 1; v32 = (int)(v1 + 232); v29 = 4 * v31; do { v32 += 16; *(float *)(v32 - 20) = *(v30 - 4); v30 += 8; --v31; *(float *)(v32 - 16) = *(v30 - 10); *(float *)(v32 - 12) = *(v30 - 8); *(float *)(v32 - 8) = *(v30 - 6); } while ( v31 ); } v33 = v49; if ( v29 < v49 ) { v34 = (float *)v47; v35 = (float *)&v1[4 * v29 + 228]; do { v36 = v34[2 * v29++]; *v35 = v36; ++v35; } while ( v29 < v33 ); } } } } LABEL_83: if ( byte_ACE080 == 1 ) { *((_DWORD *)v1 + 57) = 0; *((_DWORD *)v1 + 58) = 0; } v37 = (*(int (__thiscall **)(void *, const char *))(*(_DWORD *)v44 + 72))(v44, "logo02"); *((_DWORD *)v1 + 55) = v37; if ( v37 ) { if ( byte_ACE080 ) *(_WORD *)(v37 + 28) |= 1u; else *(_WORD *)(v37 + 28) &= 0xFFFEu; } v38 = (*(int (__thiscall **)(void *, const char *))(*(_DWORD *)v44 + 72))(v44, "logo01"); *((_DWORD *)v1 + 56) = v38; if ( byte_ACE080 ) *(_WORD *)(v38 + 28) &= 0xFFFEu; else *(_WORD *)(v38 + 28) |= 1u; v39 = (_DWORD *)*((_DWORD *)v1 + 35); v46 = 0; if ( sub_8F73A0(v39, &v46) ) { v41 = (volatile LONG *)*((_DWORD *)v1 + 36); v47 = (void *)v46; if ( v41 != v46 ) { if ( v41 && !InterlockedDecrement(v41 + 1) && v41 ) (**(void (__thiscall ***)(void *, signed int))v41)((void *)v41, 1); v42 = (volatile LONG *)v47; *((_DWORD *)v1 + 36) = v47; if ( v42 ) InterlockedIncrement(v42 + 1); } sub_85C4D0(*((_DWORD **)v1 + 35)); sub_85C6F0(*((_DWORD **)v1 + 35)); sub_85BED0(*((_DWORD ***)v1 + 35), 0.0, 1); v43 = v48; LOBYTE(v50) = 2; if ( !InterlockedDecrement(v48 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v43)(v43, 1); v50 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); result = 1; } else { v40 = v48; LOBYTE(v50) = 2; if ( !InterlockedDecrement(v48 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v40)(v40, 1); v50 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); result = 0; } } else { v19 = v48; LOBYTE(v50) = 2; if ( !InterlockedDecrement(v48 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); v50 = -1; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**v9)(v9, 1); result = 0; } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // ACE080: using guessed type char byte_ACE080; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00485E60) -------------------------------------------------------- char __thiscall sub_485E60(int this, int a2) { int v2; // esi _DWORD *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // eax char *v8; // eax float v9; // ST2C_4 float v10; // ST2C_4 int v11; // eax int v12; // eax char *v13; // eax char *v14; // ST1C_4 void **v15; // eax int v16; // eax char v17; // [esp+30h] [ebp-110h] int v18; // [esp+13Ch] [ebp-4h] v2 = this; *(_DWORD *)(this + 208) = 0; *(_DWORD *)(this + 212) = 0; *(_WORD *)(this + 216) = 0; *(_DWORD *)(this + 228) = 0; *(_DWORD *)(this + 232) = 0; *(float *)(this + 236) = 0.0; *(_DWORD *)(this + 224) = 0; *(_DWORD *)(this + 220) = 0; if ( !sub_4850B0((_DWORD *)this) || !sub_484BD0((_DWORD *)v2) || !sub_484960((_DWORD *)v2) || !sub_485110((_DWORD *)v2) || !sub_484A30((_DWORD *)v2) || !sub_485640((char *)v2) ) { return 0; } v4 = operator new(0x2D8u); v18 = 0; v5 = v4 ? sub_457E20(v4) : 0; v18 = -1; *(_DWORD *)(v2 + 40) = v5; if ( !sub_485280((_DWORD *)v2) ) return 0; v6 = sub_88CE60(); v7 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 68))(v6, 1); *(_DWORD *)(v2 + 208) = v7; if ( v7 ) { v8 = sub_486220(); sprintf(&v17, "%s%s", v8, "EFX_Total_master.mp3"); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 208) + 136))(&v17); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 208) + 128))(1); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 208) + 148))() ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 208) + 208))(1); if ( !byte_ACE080 ) (*(void (**)(void))(**(_DWORD **)(v2 + 208) + 216))(); if ( dword_AB6524 ) { sub_6B5870(); (*(void (**)(void))(*(_DWORD *)dword_AB6524 + 36))(); unknown_libname_12(&dword_AB6520); sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); } v9 = *(float *)(dword_AB6524 + 36); v10 = sub_6B5560() * v9; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 208) + 188))(LODWORD(v10)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 208) + 252))(0.0); v11 = sub_88CE60(); (*(void (__thiscall **)(int, _DWORD, signed int))(*(_DWORD *)v11 + 88))(v11, 0.0, 1); } else { *(_DWORD *)(v2 + 208) = 0; } } byte_ACE080 = 1; *(_BYTE *)(v2 + 32) = 1; v12 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v12 ) { if ( *(_BYTE *)(v12 + 2332) ) (*(void (**)(void))(**(_DWORD **)(v2 + 100) + 8))(); } v13 = sub_4083B0(); v14 = (char *)sub_401410(v13, "\\Account\\Account.conf"); v15 = sub_8E50C0(); sub_8E5310((CHAR ***)v15, v14); *(_DWORD *)(v2 + 576) = 0; v16 = sub_43D0D0(1u); *(_DWORD *)(v2 + 576) = sub_58E5D0(v16, 5, 5, v2); sub_4874D0(v2); return 1; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // AB6524: using guessed type int dword_AB6524; // ACE080: using guessed type char byte_ACE080; //----- (00486130) -------------------------------------------------------- _DWORD *__cdecl sub_486130(int a1) { int v1; // eax int v2; // eax int v4; // [esp+0h] [ebp-30h] int v5; // [esp+10h] [ebp-20h] int v6; // [esp+14h] [ebp-1Ch] int v7; // [esp+18h] [ebp-18h] int *v8; // [esp+20h] [ebp-10h] int v9; // [esp+2Ch] [ebp-4h] v8 = &v4; if ( !a1 ) return 0; v9 = 0; v1 = sub_8667C0(); v2 = (*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v1 + 8))(v1, a1, 0); if ( !v2 ) return 0; v5 = 6; v6 = 3; v7 = 0; return sub_865FA0(v2, &v5); } // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); //----- (00486220) -------------------------------------------------------- char *sub_486220() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA940; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00486240) -------------------------------------------------------- _DWORD *__thiscall sub_486240(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // edx result = a2; *a2 = 0; a2[1] = this[2]; v3 = (_DWORD *)this[2]; if ( v3 ) { *v3 = a2; ++this[3]; } else { ++this[3]; this[1] = a2; } this[2] = a2; return result; } //----- (00486290) -------------------------------------------------------- int __thiscall sub_486290(_BYTE **this, int a2, _WORD *a3) { if ( *a3 == 1667 ) byte_B68508 = 1; sub_457EC0(this[10]); return a2; } // B68508: using guessed type char byte_B68508; //----- (004862C0) -------------------------------------------------------- int __thiscall sub_4862C0(_DWORD **this, int a2, unsigned __int8 *a3) { _DWORD **v3; // esi v3 = this; sub_6A1C00((void **)&byte_B68508, a3); if ( (*(unsigned __int8 (**)(void))(*v3[16] + 260))() ) sub_48B830(v3[16]); return a2; } // B68508: using guessed type char byte_B68508; //----- (00486310) -------------------------------------------------------- char __thiscall sub_486310(_DWORD *this, char *a2) { _DWORD *v2; // edi int v3; // ecx unsigned int v4; // eax int v5; // ecx size_t v6; // esi __int16 v8; // [esp+Ch] [ebp-8h] __int16 v9; // [esp+10h] [ebp-4h] v2 = this; v3 = this[25]; v9 = 3101; sub_905F90(v3, &v9, 2u); v4 = strlen(a2); v5 = v2[25]; v6 = v4 + 1; v8 = v4 + 1; sub_905F90(v5, &v8, 2u); return sub_906000(v2[25], a2, v6); } //----- (004863E0) -------------------------------------------------------- void __thiscall sub_4863E0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v5; // esi int v6; // eax __int16 v7; // [esp+4h] [ebp-8Ch] char v8; // [esp+Bh] [ebp-85h] char v9; // [esp+Ch] [ebp-84h] v2 = this; v3 = this[25]; if ( v3 ) { v7 = 3083; sub_905F90(v3, &v7, 2u); v4 = v2[25]; v8 = a2; sub_906000(v4, &v8, 1u); sub_486DA0(&byte_B68508, a2, (char *)&dword_B68478); sub_486DA0(&byte_B68508, a2, (char *)&unk_B7C50C); sub_486DA0(&byte_B68508, a2, &v9); v5 = BT_OpenLogFile("ConnectWorldInfo.txt"); BT_SetLogFlags(v5, 2); v6 = BT_GetLogFileName(v5); BT_AddLogFile(v6); BT_ClearLog(v5); BT_AppLogEntryF(v5, 4, "WorldName [ %s ]", &v9); BT_CloseLogFile(v5); } } // 9A5010: using guessed type int __stdcall BT_ClearLog(_DWORD); // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); // B68478: using guessed type int dword_B68478; // B68508: using guessed type char byte_B68508; //----- (004864D0) -------------------------------------------------------- char __thiscall sub_4864D0(_DWORD *this) { int v1; // ecx char result; // al _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[25]; if ( v1 ) { LOWORD(v3) = 3099; result = sub_906000(v1, &v3, 2u); } return result; } //----- (00486500) -------------------------------------------------------- int __thiscall sub_486500(void *this, int a2, unsigned __int8 *a3) { void *v3; // esi int v4; // ecx v3 = this; sub_6A1C00((void **)&byte_B68508, a3); sub_8F86A0(&unk_BA6B10, *((_DWORD **)v3 + 15)); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v3 + 16)); if ( *((_DWORD *)v3 + 22) ) sub_8F86A0(&unk_BA6B10, *((_DWORD **)v3 + 22)); if ( byte_ACEB02 == 1 ) { if ( *((_DWORD *)v3 + 23) ) sub_8F82A0(&unk_BA6B10, *((_DWORD **)v3 + 23)); byte_ACEB02 = 0; } sub_457E60(*((_DWORD **)v3 + 10)); sub_457EA0(*((wchar_t ***)v3 + 10), byte_AD9238); v4 = *((_DWORD *)v3 + 10); sub_457F30(); return a2; } // ACEB02: using guessed type char byte_ACEB02; // B68508: using guessed type char byte_B68508; //----- (00486590) -------------------------------------------------------- int __thiscall sub_486590(void *this, int a2, unsigned __int16 *a3) { int v3; // esi char *v4; // eax volatile LONG *v5; // ecx char v7; // [esp+4h] [ebp-2Ch] int v8; // [esp+Ch] [ebp-24h] char v9; // [esp+18h] [ebp-18h] int v10; // [esp+20h] [ebp-10h] v3 = (int)this; v4 = (char *)sub_41A850(*a3); v5 = sub_462C30(1, v4); if ( byte_B68509 ) { v10 = 14; v8 = 14; sub_461760(v5, v3, &v9, &v7); } else { v10 = 20; sub_461760(v5, v3, &v9, 0); } sub_457EC0(*(_BYTE **)(v3 + 40)); sub_905F40(*(_DWORD *)(v3 + 100)); return a2; } // B68509: using guessed type char byte_B68509; //----- (00486620) -------------------------------------------------------- void __thiscall sub_486620(int *this, int a2) { int *v2; // esi int v3; // eax int v4; // edi int v5; // edx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // eax int v12; // ecx int v13; // ecx const char *v14; // eax int v15; // ecx int v16; // eax char v17; // cl __int16 v18; // [esp+8h] [ebp-60h] char v19[4]; // [esp+Ch] [ebp-5Ch] int v20; // [esp+10h] [ebp-58h] int v21; // [esp+14h] [ebp-54h] int v22; // [esp+18h] [ebp-50h] __int16 v23; // [esp+1Ch] [ebp-4Ch] char v24[4]; // [esp+1Eh] [ebp-4Ah] int v25; // [esp+22h] [ebp-46h] int v26; // [esp+26h] [ebp-42h] int v27; // [esp+2Ah] [ebp-3Eh] int v28; // [esp+2Eh] [ebp-3Ah] int v29; // [esp+32h] [ebp-36h] int v30; // [esp+36h] [ebp-32h] int v31; // [esp+3Ah] [ebp-2Eh] int v32; // [esp+3Eh] [ebp-2Ah] int v33; // [esp+44h] [ebp-24h] int v34; // [esp+48h] [ebp-20h] int v35; // [esp+4Ch] [ebp-1Ch] char v36[4]; // [esp+50h] [ebp-18h] int v37; // [esp+54h] [ebp-14h] int v38; // [esp+58h] [ebp-10h] int v39; // [esp+5Ch] [ebp-Ch] int v40; // [esp+60h] [ebp-8h] v2 = this; if ( this[25] ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = v3; if ( v3 && *(_BYTE *)(v3 + 2332) ) { v18 = 3127; sub_905F90(v2[25], &v18, 2u); v5 = v2[29]; v6 = v2[27]; v34 = v2[28]; v7 = v2[31]; v35 = v5; v8 = v2[32]; v33 = v6; v9 = v2[30]; v37 = v7; v10 = v2[34]; v38 = v8; *(_DWORD *)v36 = v9; v11 = v2[33]; v40 = v10; v12 = v2[25]; v39 = v11; sub_906000(v12, &v33, 0x20u); *(_BYTE *)(v4 + 2332) = 0; } else { if ( !byte_B7C50A ) { v13 = v2[25]; v18 = 3128; sub_905F90(v13, &v18, 2u); v27 = 0; v26 = 0; v25 = 0; *(_DWORD *)v24 = 0; v32 = 0; v31 = 0; v30 = 0; v29 = 0; v28 = 0; v22 = 0; v21 = 0; v20 = 0; *(_DWORD *)v19 = 0; v23 = 0; strncpy(v19, byte_AD9238, 0x12u); v27 = 0; v26 = 0; v25 = 0; *(_DWORD *)v24 = 0; strncpy(v24, dword_AD924B, 0x10u); v14 = lpOutputString; if ( (unsigned int)dword_AAEBC4 < 0x10 ) v14 = (const char *)&lpOutputString; v40 = 0; v39 = 0; v38 = 0; v37 = 0; *(_DWORD *)v36 = 0; strncpy(v36, v14, 0x14u); v29 = v37; v30 = v38; v28 = *(_DWORD *)v36; v32 = v40; v15 = v2[25]; v31 = v39; sub_906000(v15, v19, 0x36u); *(_DWORD *)v36 = *(_DWORD *)v19; v37 = v20; v39 = v22; LOWORD(v40) = v23; v38 = v21; *(_WORD *)((char *)&v40 + 1) = 0; v16 = 0; do { v17 = v36[v16]; byte_B68498[v16++] = v17; } while ( v17 ); dword_B684B8 = 1852534389; dword_B684BC = (int)sub_6E776F; dword_B684D8 = 1852534389; dword_B684DC = (int)sub_6E776F; dword_B68478 = 1852534389; dword_B6847C = (int)sub_6E776F; dword_B684F8 = 0; } *(_DWORD *)dword_AD924B = 0; dword_AD924F = 0; dword_AD9253 = 0; dword_AD9257 = 0; byte_AD925B = 0; } } } // AAEBC4: using guessed type int dword_AAEBC4; // AD924F: using guessed type int dword_AD924F; // AD9253: using guessed type int dword_AD9253; // AD9257: using guessed type int dword_AD9257; // AD925B: using guessed type char byte_AD925B; // B68478: using guessed type int dword_B68478; // B6847C: using guessed type int dword_B6847C; // B684B8: using guessed type int dword_B684B8; // B684BC: using guessed type int dword_B684BC; // B684D8: using guessed type int dword_B684D8; // B684DC: using guessed type int dword_B684DC; // B684F8: using guessed type int dword_B684F8; // B7C50A: using guessed type char byte_B7C50A; //----- (00486870) -------------------------------------------------------- int __thiscall sub_486870(void *this, int a2, int a3) { int v3; // esi char *v4; // eax volatile LONG *v5; // eax char v7; // [esp+4h] [ebp-18h] int v8; // [esp+Ch] [ebp-10h] v3 = (int)this; v4 = (char *)sub_40C190(1044461400); v5 = sub_462C30(1, v4); v8 = 18; sub_461760(v5, v3, &v7, 0); return a2; } //----- (004868D0) -------------------------------------------------------- int __thiscall sub_4868D0(int *this, int a2, int a3) { int *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-2090h] char v8; // [esp+Bh] [ebp-2089h] char v9; // [esp+Ch] [ebp-2088h] char v10; // [esp+1090h] [ebp-1004h] v3 = this; if ( byte_B68509 && sub_6A14C0((int)&v9) ) sub_486310(v3, &v10); else sub_486620(v3, 0); v4 = v3[25]; v7 = 3076; sub_905F90(v4, &v7, 2u); v5 = v3[25]; v8 = 29; sub_905F90(v5, &v8, 1u); sub_906000(v3[25], "33B543B0CA6E7C41E5D1D0651307", 0x1Du); return a2; } // B68509: using guessed type char byte_B68509; //----- (00486980) -------------------------------------------------------- int __thiscall sub_486980(void *this, int a2, unsigned __int8 *a3) { char v3; // bl void *v4; // esi _DWORD *v5; // ecx volatile LONG *v6; // eax volatile LONG *v7; // edi volatile LONG *v8; // ebx int v9; // edx int v10; // eax int v11; // ecx char *v12; // ecx CHAR *v14; // [esp+Ch] [ebp-1Ch] char v15[4]; // [esp+10h] [ebp-18h] int v16; // [esp+14h] [ebp-14h] int v17; // [esp+18h] [ebp-10h] int v18; // [esp+1Ch] [ebp-Ch] char v19; // [esp+20h] [ebp-8h] v3 = 0; v4 = this; v14 = 0; switch ( *a3 ) { case 0u: v14 = (CHAR *)sub_40C190(675106106); break; case 1u: v14 = (CHAR *)sub_40C190(696749970); break; case 2u: v14 = (CHAR *)sub_40C190(-263573162); break; case 3u: v14 = (CHAR *)sub_40C190(1752997481); break; case 4u: v14 = (CHAR *)sub_40C190(-488377830); break; case 5u: v14 = (CHAR *)sub_40C190(54013222); break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v3 = 1; break; default: break; } v5 = (_DWORD *)*((_DWORD *)v4 + 9); if ( v5 && sub_8F3540(v5) ) sub_4628D0(*((_DWORD *)v4 + 9)); *((_BYTE *)v4 + 148) = 0; if ( v3 ) { v9 = *(_DWORD *)(a3 + 5); v10 = *(_DWORD *)(a3 + 9); *(_DWORD *)v15 = *(_DWORD *)(a3 + 1); v11 = *(_DWORD *)(a3 + 13); v16 = v9; v18 = v11; v12 = (char *)*((_DWORD *)v4 + 26); v17 = v10; v19 = 0; sub_905DE0(v12, v15); sub_905E10(*((_DWORD **)v4 + 26), *(unsigned __int16 *)(a3 + 17)); sub_681590((int)byte_AD9238, a3 + 19); sub_905F40(*((_DWORD *)v4 + 25)); sub_905F40(*((_DWORD *)v4 + 26)); sub_8EEFC0(dword_ACDD54, 0); } else { v6 = sub_462C30(1, v14); v7 = (volatile LONG *)*((_DWORD *)v4 + 9); v8 = v6; if ( v7 != v6 ) { if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); *((_DWORD *)v4 + 9) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } } return a2; } // 4628D0: using guessed type int __thiscall sub_4628D0(_DWORD); // ACDD54: using guessed type int dword_ACDD54; //----- (00486B40) -------------------------------------------------------- void __thiscall sub_486B40(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax char *v4; // edx char v5; // cl __int16 v6; // [esp+4h] [ebp-64h] char v7[64]; // [esp+8h] [ebp-60h] void *v8; // [esp+48h] [ebp-20h] unsigned int v9; // [esp+5Ch] [ebp-Ch] v1 = this; v2 = this[25]; if ( v2 ) { v6 = 3173; sub_905F90(v2, &v6, 2u); v3 = sub_487210((int)&v8); if ( *(_DWORD *)(v3 + 20) >= 0x10u ) v3 = *(_DWORD *)v3; v4 = &v7[-v3]; do { v5 = *(_BYTE *)v3; v4[v3] = *(_BYTE *)v3; ++v3; } while ( v5 ); if ( v9 >= 0x10 ) operator delete(v8); sub_906000(v1[25], v7, 0x40u); } } // 486B40: using guessed type char var_60[64]; //----- (00486BF0) -------------------------------------------------------- int __thiscall sub_486BF0(_DWORD **this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // esi int result; // eax v5 = this; result = 0; if ( a2 == 2 ) { if ( a3 == 7 ) { (*(void (__stdcall **)(_DWORD))(*this[25] + 12))(*a5); sub_486B40(v5); LABEL_16: result = a4; } } else if ( a2 == 3 ) { switch ( a3 ) { case 5: goto LABEL_16; case 9: result = sub_486590(this, a4, a5); break; case 10: result = sub_486500(this, a4, (unsigned __int8 *)a5); break; case 12: result = sub_486980(this, a4, (unsigned __int8 *)a5); break; case 23: result = sub_486290((_BYTE **)this, a4, a5); break; case 28: result = sub_4862C0(this, a4, (unsigned __int8 *)a5); break; case 102: result = sub_486870(this, a4, (int)a5); break; case 103: result = sub_4868D0((int *)this, a4, (int)a5); break; default: return result; } } else if ( a2 == 8 && a3 == 17 ) { result = a4; } return result; } //----- (00486D80) -------------------------------------------------------- void __thiscall sub_486D80(void *this) { *((_DWORD *)this + 7) = 0; *((_DWORD *)this + 6) = 0; *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; } //----- (00486DA0) -------------------------------------------------------- char __thiscall sub_486DA0(_DWORD *this, char a2, char *a3) { int v3; // esi int v4; // eax int v5; // edi _BYTE *v6; // ecx int v7; // eax int v8; // ecx _DWORD *v9; // eax int v10; // ecx int v12; // [esp+4h] [ebp-18h] int v13; // [esp+8h] [ebp-14h] int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] char v16; // [esp+14h] [ebp-8h] v3 = this[21293]; v4 = 0; if ( v3 > 0 ) { v5 = this[21294]; v6 = (_BYTE *)(v5 + 16); while ( *v6 != a2 ) { ++v4; v6 += 18; if ( v4 >= v3 ) return 1; } v7 = 9 * v4; v8 = *(_DWORD *)(v5 + 2 * v7); v9 = (_DWORD *)(v5 + 2 * v7); v12 = v8; v13 = v9[1]; v10 = v9[2]; v15 = v9[3]; v14 = v10; v16 = 0; strcpy(a3, (const char *)&v12); } return 1; } //----- (00486E30) -------------------------------------------------------- _BYTE *__thiscall sub_486E30(_BYTE *this, int a2, int a3, int a4) { _BYTE *v4; // esi int v5; // ecx int v6; // ecx int v7; // eax _DWORD *v8; // ecx int v9; // eax __int64 v11; // [esp+4h] [ebp-18h] int v12; // [esp+Ch] [ebp-10h] v4 = this; v5 = *(_DWORD *)(*(_DWORD *)this + 4); if ( !(v4[v5 + 12] & 6) ) { (*(void (__stdcall **)(__int64 *, int, int, int, signed int))(**(_DWORD **)&v4[v5 + 56] + 40))(&v11, a2, a3, a4, 1); if ( v11 + v12 == -1 ) { v6 = *(_DWORD *)(*(_DWORD *)v4 + 4); v7 = *(_DWORD *)&v4[v6 + 12]; v8 = &v4[v6]; v9 = v7 | 2; if ( !v8[14] ) v9 |= 4u; sub_405C10(v8, v9, 0); } } return v4; } //----- (00486EB0) -------------------------------------------------------- int __thiscall sub_486EB0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // ecx int (__stdcall *v6)(int, int, int); // eax int v7; // eax int v8; // edx unsigned __int8 v9; // cf _DWORD *v10; // ecx int v11; // eax int v12; // ecx int v14; // [esp+0h] [ebp-30h] int v15; // [esp+10h] [ebp-20h] char v16; // [esp+14h] [ebp-1Ch] int v17; // [esp+18h] [ebp-18h] _DWORD *v18; // [esp+1Ch] [ebp-14h] int *v19; // [esp+20h] [ebp-10h] int v20; // [esp+2Ch] [ebp-4h] v19 = &v14; v4 = (int)this; v18 = this; this[2] = 0; this[3] = 0; v5 = *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4) + 56); v17 = 0; v15 = v4; if ( v5 ) (*(void (**)(void))(*(_DWORD *)v5 + 4))(); v20 = 0; v16 = sub_425280((char *)v4, 1); v20 = 1; if ( v16 ) { v6 = *(int (__stdcall **)(int, int, int))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)v4 + 4) + v4 + 56) + 32); LOBYTE(v20) = 2; v7 = v6(a2, a3, a4); v9 = __CFADD__(v7, *(_DWORD *)(v4 + 8)); *(_DWORD *)(v4 + 8) += v7; *(_DWORD *)(v4 + 12) += v8 + v9; if ( v7 != a3 || v8 != a4 ) v17 = 3; v20 = 1; } v10 = (_DWORD *)(v4 + *(_DWORD *)(*(_DWORD *)v4 + 4)); if ( v17 ) { v11 = v17 | v10[3]; if ( !v10[14] ) v11 |= 4u; sub_405C10(v10, v11, 0); } v12 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v4 + 4) + v4 + 56); v20 = -1; if ( v12 ) (*(void (**)(void))(*(_DWORD *)v12 + 8))(); return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00487000) -------------------------------------------------------- int __thiscall sub_487000(_DWORD *this, wchar_t *a2, int a3, int a4) { int v4; // esi FILE *v5; // eax _DWORD *v6; // eax struct std::locale::facet *v7; // edi v4 = (int)this; if ( this[21] ) return 0; v5 = sub_7D4173(a2, a3, a4); if ( !v5 ) return 0; sub_423EB0(v4, (int)v5, 1); v6 = sub_423190((_DWORD **)v4, &a4); v7 = sub_425490((int)v6); if ( (*(unsigned __int8 (__thiscall **)(struct std::locale::facet *))(*(_DWORD *)v7 + 4))(v7) ) { *(_DWORD *)(v4 + 68) = 0; } else { *(_DWORD *)(v4 + 68) = v7; sub_4231D0((_DWORD *)v4); } sub_422F90(&a4); return v4; } //----- (004870E0) -------------------------------------------------------- _DWORD *__thiscall sub_4870E0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // edi char v4; // al bool v5; // zf v2 = this; if ( a2 ) { *this = &unk_9AB83C; this[26] = &std::basic_ios>::`vftable'; } *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4)) = &std::basic_istream>::`vftable'; this[2] = 0; this[3] = 0; v3 = (int)this + *(_DWORD *)(*this + 4); sub_423A10((_DWORD *)((char *)this + *(_DWORD *)(*this + 4))); *(_DWORD *)(v3 + 56) = v2 + 4; *(_DWORD *)(v3 + 60) = 0; v4 = sub_424CA0((_DWORD **)v3, 32); v5 = *(_DWORD *)(v3 + 56) == 0; *(_BYTE *)(v3 + 64) = v4; if ( v5 ) sub_405C10((_DWORD *)v3, *(_DWORD *)(v3 + 12) | 4, 0); *(_DWORD *)((char *)v2 + *(_DWORD *)(*v2 + 4)) = &std::basic_ifstream>::`vftable'; sub_423F50(v2 + 4); v2[12] = v2 + 10; v2[4] = &std::basic_filebuf>::`vftable'; *((_BYTE *)v2 + 96) = 0; *((_BYTE *)v2 + 89) = 0; v2[8] = v2 + 6; v2[13] = v2 + 11; v2[16] = v2 + 14; v2[9] = v2 + 7; v2[17] = v2 + 15; v2[7] = 0; *(_DWORD *)v2[13] = 0; *(_DWORD *)v2[17] = 0; *(_DWORD *)v2[8] = 0; *(_DWORD *)v2[12] = 0; *(_DWORD *)v2[16] = 0; v2[25] = 0; v2[23] = dword_ACB210; v2[21] = 0; return v2; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB478: using guessed type void *std::basic_ios>::`vftable'; // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; // 9AB838: using guessed type void *std::basic_ifstream>::`vftable'; // ACB210: using guessed type int dword_ACB210; //----- (00487210) -------------------------------------------------------- int __cdecl sub_487210(int a1) { HMODULE v1; // eax int v2; // ecx int v3; // eax char *v4; // ecx signed int v5; // eax int v6; // ecx int v7; // eax int v8; // eax int v9; // ecx signed int v10; // eax int v11; // esi void *v12; // edi int v13; // ecx int v14; // eax _DWORD *v15; // ecx int v16; // eax int v17; // ST10_4 int v18; // esi int v20; // [esp+10h] [ebp-2E8h] int v21; // [esp+1Ch] [ebp-2DCh] char v22; // [esp+20h] [ebp-2D8h] int v23; // [esp+48h] [ebp-2B0h] void **v24; // [esp+78h] [ebp-280h] int v25; // [esp+C0h] [ebp-238h] int v26; // [esp+C4h] [ebp-234h] int v27; // [esp+C8h] [ebp-230h] int v28; // [esp+CCh] [ebp-22Ch] int v29; // [esp+D8h] [ebp-220h] int v30; // [esp+DCh] [ebp-21Ch] WCHAR Filename; // [esp+E0h] [ebp-218h] int v32; // [esp+2F4h] [ebp-4h] v32 = 0; v29 = a1; v30 = 0; sub_4870E0(&v20, 1); v32 = 1; v1 = GetModuleHandleW(0); GetModuleFileNameW(v1, &Filename, 0x104u); if ( sub_487000(&v22, &Filename, 33, 64) ) { v6 = *(_DWORD *)(v20 + 4); v7 = *(int *)((char *)&v23 + v6); v4 = (char *)&v20 + v6; v5 = v7 != 0 ? 0 : 4; } else { v2 = *(_DWORD *)(v20 + 4); v3 = *(int *)((char *)&v21 + v2); v4 = (char *)&v20 + v2; v5 = v3 | 2; if ( !*((_DWORD *)v4 + 14) ) v5 |= 4u; } sub_405C10(v4, v5, 0); sub_486E30(&v20, 0, 0, 2); v8 = *(_DWORD *)(v20 + 4); if ( *((_BYTE *)&v21 + v8) & 6 ) { v10 = -1; v26 = -1; v9 = 0; v28 = 0; } else { (*(void (__stdcall **)(int *, _DWORD, _DWORD, signed int, signed int))(**(_DWORD **)((char *)&v23 + v8) + 40))( &v25, 0, 0, 1, 1); v9 = v27; v10 = v25; } v11 = v10 + v9; sub_486E30(&v20, 0, 0, 0); v12 = operator new[](v11); sub_486EB0(&v20, (int)v12, v11, v11 >> 31); if ( !sub_426DB0(&v22) ) { v13 = *(_DWORD *)(v20 + 4); v14 = *(int *)((char *)&v21 + v13); v15 = (int *)((char *)&v20 + v13); v16 = v14 | 2; if ( !v15[14] ) v16 |= 4u; sub_405C10(v15, v16, 0); } v17 = v11; v18 = v29; sub_747370(v29, v12, v17); v30 = 1; operator delete[](v12); LOBYTE(v32) = 0; sub_4279D0(&v24); v24 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v24); return v18; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (00487450) -------------------------------------------------------- int sub_487450() { sub_6F3C20(&off_AB7F2C); return sub_8F00A0((int)&unk_BA6A18, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00487480) -------------------------------------------------------- int sub_487480() { return sub_8F00A0((int)&unk_BA6A18, 0); } //----- (00487490) -------------------------------------------------------- void __thiscall sub_487490(_DWORD **this) { _DWORD **v1; // esi int v2; // eax char v3; // di v1 = this; v2 = sub_48B5E0(this[16]); v3 = v2; if ( v2 >= 0 ) { sub_6A18E0(&byte_B68508, v2); if ( !*((_BYTE *)v1 + 148) ) { sub_4863E0(v1, v3); *((_BYTE *)v1 + 148) = 1; } } } // B68508: using guessed type char byte_B68508; //----- (004874D0) -------------------------------------------------------- int __thiscall sub_4874D0(int this) { int result; // eax result = 0; *(_DWORD *)(this + 256) = 1024; *(_DWORD *)(this + 260) = 768; *(_DWORD *)(this + 276) = 768; *(_DWORD *)(this + 308) = 1024; *(_DWORD *)(this + 272) = 1280; *(_DWORD *)(this + 288) = 1280; *(_DWORD *)(this + 304) = 1280; *(_DWORD *)(this + 336) = 1600; *(_DWORD *)(this + 340) = 1200; *(_DWORD *)(this + 352) = 1600; *(_DWORD *)(this + 388) = 1200; *(_DWORD *)(this + 416) = 1280; *(_DWORD *)(this + 240) = 800; *(_DWORD *)(this + 244) = 600; *(_BYTE *)(this + 248) = 0; *(_DWORD *)(this + 252) = 0; *(_BYTE *)(this + 264) = 0; *(_DWORD *)(this + 268) = 0; *(_BYTE *)(this + 280) = 0; *(_DWORD *)(this + 284) = 1; *(_DWORD *)(this + 292) = 960; *(_BYTE *)(this + 296) = 0; *(_DWORD *)(this + 300) = 0; *(_BYTE *)(this + 312) = 0; *(_DWORD *)(this + 316) = 2; *(_DWORD *)(this + 320) = 1400; *(_DWORD *)(this + 324) = 1050; *(_BYTE *)(this + 328) = 0; *(_DWORD *)(this + 332) = 0; *(_BYTE *)(this + 344) = 0; *(_DWORD *)(this + 348) = 0; *(_DWORD *)(this + 356) = 900; *(_BYTE *)(this + 360) = 0; *(_DWORD *)(this + 364) = 4; *(_DWORD *)(this + 368) = 1920; *(_DWORD *)(this + 372) = 1400; *(_BYTE *)(this + 376) = 0; *(_DWORD *)(this + 380) = 4; *(_DWORD *)(this + 384) = 1920; *(_BYTE *)(this + 392) = 0; *(_DWORD *)(this + 396) = 3; *(_DWORD *)(this + 400) = 1680; *(_DWORD *)(this + 404) = 1050; *(_BYTE *)(this + 408) = 0; *(_DWORD *)(this + 412) = 3; *(_DWORD *)(this + 420) = 800; *(_BYTE *)(this + 424) = 0; *(_DWORD *)(this + 428) = 3; *(_DWORD *)(this + 432) = 1600; *(_DWORD *)(this + 436) = 900; *(_BYTE *)(this + 440) = 0; *(_DWORD *)(this + 444) = 4; *(_DWORD *)(this + 448) = 1440; *(_DWORD *)(this + 452) = 900; *(_BYTE *)(this + 456) = 0; *(_DWORD *)(this + 460) = 3; *(_DWORD *)(this + 464) = 1920; *(_DWORD *)(this + 468) = 1080; *(_BYTE *)(this + 472) = 0; *(_DWORD *)(this + 476) = 4; *(_DWORD *)(this + 480) = 2560; *(_DWORD *)(this + 484) = 1440; *(_BYTE *)(this + 488) = 0; *(_DWORD *)(this + 492) = 4; *(_DWORD *)(this + 496) = 3840; *(_DWORD *)(this + 500) = 2160; *(_BYTE *)(this + 504) = 0; *(_DWORD *)(this + 508) = 4; *(_DWORD *)(this + 512) = 1366; *(_DWORD *)(this + 516) = 768; *(_DWORD *)(this + 532) = 1440; *(_BYTE *)(this + 520) = 0; *(_DWORD *)(this + 524) = 4; *(_DWORD *)(this + 528) = 3440; *(_BYTE *)(this + 536) = 0; *(_DWORD *)(this + 540) = 4; return result; } //----- (00487750) -------------------------------------------------------- void __thiscall sub_487750(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void *v4; // [esp+Ch] [ebp-B0h] int v5; // [esp+10h] [ebp-ACh] int v6; // [esp+14h] [ebp-A8h] int v7; // [esp+18h] [ebp-A4h] char v8; // [esp+1Ch] [ebp-A0h] int v9; // [esp+B8h] [ebp-4h] v1 = this; if ( this[36] ) { v4 = 0; v5 = 0; v6 = 0; v7 = 1024; sub_85F230(&v4, 0x400u); v9 = 0; sub_85F910(&v8, (int)&v4); LOBYTE(v9) = 1; v2 = sub_8E5FC0(); sub_8E5970(v2); sub_85FB50((float *)v1[36], v1[35], &v8, 0); v3 = sub_8E5FC0(); sub_8E59E0(v3); sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); LOBYTE(v9) = 0; sub_85F7E0(&v8); operator delete[](v4); } } // BA46D0: using guessed type int dword_BA46D0; //----- (00487870) -------------------------------------------------------- void __usercall sub_487870(int a1@, unsigned int a2@) { int v2; // ebx void *v3; // eax bool v4; // zf int v5; // eax unsigned int v6; // edx int v7; // esi unsigned int v8; // edx int *v9; // eax int v10; // ecx int v11; // eax int v12; // eax _BYTE *v13; // eax signed int v14; // ecx unsigned int v15; // ebx unsigned int *v16; // eax unsigned int v17; // eax unsigned int v18; // ecx int v19; // eax _BYTE *v20; // eax signed int v21; // ecx int v22; // eax unsigned int v23; // [esp+Ch] [ebp-14h] unsigned int v24; // [esp+10h] [ebp-10h] int v25; // [esp+14h] [ebp-Ch] unsigned int v26; // [esp+14h] [ebp-Ch] unsigned int v27; // [esp+18h] [ebp-8h] unsigned int v28; // [esp+1Ch] [ebp-4h] v2 = a1; v25 = a1; sub_8F9D50(&unk_BA6B10, *(volatile LONG **)(a1 + 576), 0, 0, 0); sub_58DFD0(*(_DWORD **)(v2 + 576)); v3 = sub_921C10(); v4 = *((_DWORD *)v3 + 4) == 0; dword_ACE090 = (int)v3; if ( v4 ) v5 = 0; else v5 = **((_DWORD **)v3 + 2); v6 = *(_DWORD *)(v5 + 1116); dword_ACE08C = v5; v28 = v6; v24 = GetSystemMetrics(0); v23 = GetSystemMetrics(1); v7 = v2 + 240; if ( byte_AB66E7 ) { v8 = 0; v26 = 0; do { a2 = 0; if ( v28 ) { do { v9 = *(int **)(*(_DWORD *)(dword_ACE08C + 1108) + 4 * a2); if ( !*(_BYTE *)(v7 + 8) ) { v10 = *v9; if ( *v9 == *(_DWORD *)v7 ) { v11 = v9[1]; if ( v11 == *(_DWORD *)(v7 + 4) && (v10 != 800 || v11 != 600) ) { v12 = sub_58BA00(v8); sub_58E080(*(_DWORD **)(v2 + 576), a2, v12); v8 = v26; *(_BYTE *)(v7 + 8) = 1; } } } ++a2; } while ( a2 < v28 ); } ++v8; v7 += 16; v26 = v8; } while ( v8 < 0x15 ); v13 = (_BYTE *)(v2 + 248); v14 = 21; do { *v13 = 0; v13 += 16; --v14; } while ( v14 ); } else { v27 = 0; do { v15 = 0; if ( v28 ) { do { v16 = *(unsigned int **)(*(_DWORD *)(dword_ACE08C + 1108) + 4 * v15); if ( !*(_BYTE *)(v7 + 8) ) { a2 = *v16; if ( *v16 == *(_DWORD *)v7 ) { v17 = v16[1]; v18 = *(_DWORD *)(v7 + 4); if ( v17 == v18 && v24 >= *(_DWORD *)v7 && v23 >= v18 && (a2 != 800 || v17 != 600) ) { v19 = sub_58BA00(v27); sub_58E080(*(_DWORD **)(v25 + 576), a2, v19); *(_BYTE *)(v7 + 8) = 1; } } } ++v15; } while ( v15 < v28 ); } v7 += 16; ++v27; } while ( v27 < 0x15 ); v20 = (_BYTE *)(v25 + 248); v21 = 21; do { *v20 = 0; v20 += 16; --v21; } while ( v21 ); v2 = v25; } v22 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v2 + 576), a2, v22); sub_58D930(*(_DWORD **)(v2 + 576), 0); (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v2 + 576) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v2 + 576)); } // AB66E7: using guessed type char byte_AB66E7; // ACE08C: using guessed type int dword_ACE08C; // ACE090: using guessed type int dword_ACE090; //----- (00487AF0) -------------------------------------------------------- int __thiscall sub_487AF0(_DWORD **this) { _DWORD **v1; // esi int result; // eax double v3; // st7 float v4; // ST2C_4 _DWORD **v5; // ecx v1 = this; if ( this[12] ) { (*(void (__stdcall **)(int))(*this[12] + 468))(xRight); result = (*(int (__stdcall **)(int))(*v1[12] + 472))(dword_AC2F78); } if ( v1[13] ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[13] + 236))(xRight, dword_AC2F78, 0.89999998, 0.1); v3 = 1.0; if ( v1[14] ) { result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[14] + 236))(xRight, dword_AC2F78, 1.0, 1.0); v3 = 1.0; } if ( v1[17] ) { v4 = v3; result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[17] + 236))(xRight, dword_AC2F78, 0.0, LODWORD(v4)); } v5 = (_DWORD **)v1[16]; if ( v5 ) result = sub_48BA20(v5); return result; } //----- (00487BD0) -------------------------------------------------------- int __thiscall sub_487BD0(_DWORD **this) { _DWORD **v1; // esi char *v2; // eax v1 = this; v2 = (char *)sub_40C190(1079140696); sub_462C30(1, v2); return sub_48AA20(v1[15]); } //----- (00487C00) -------------------------------------------------------- int __thiscall sub_487C00(_DWORD **this, unsigned __int16 a2) { _DWORD **v2; // esi const CHAR *v3; // eax char *v4; // eax v2 = this; v3 = sub_40C190(438249035); v4 = sub_7549E0("%s error_code: %o", v3, a2); sub_462C30(1, v4); return sub_48AA20(v2[15]); } //----- (00487C40) -------------------------------------------------------- int __thiscall sub_487C40(_DWORD **this, int a2) { _DWORD **v2; // esi char *v3; // eax v2 = this; v3 = (char *)sub_40C190(438249035); sub_462C30(1, v3); return sub_48AA20(v2[15]); } //----- (00487C70) -------------------------------------------------------- int __thiscall sub_487C70(_DWORD **this) { _DWORD **v1; // esi char *v2; // eax v1 = this; v2 = (char *)sub_40C190(1095702615); sub_462C30(1, v2); return sub_48AA20(v1[15]); } //----- (00487CA0) -------------------------------------------------------- int __thiscall sub_487CA0(_DWORD **this, int a2) { _DWORD **v2; // esi char *v3; // eax v2 = this; v3 = (char *)sub_40C190(-786553016); sub_462C30(1, v3); return sub_48AA20(v2[15]); } //----- (00487CD0) -------------------------------------------------------- char __thiscall sub_487CD0(int this) { int v1; // esi char result; // al v1 = this; *(_BYTE *)(this + 148) = 0; if ( byte_B68509 ) { sub_905F40(dword_AB7F48); sub_905F40(dword_AB7F4C); sub_8F00A0((int)&unk_BA6A18, 0); result = sub_6F3C20(&off_AB7F2C); } else { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 64)); sub_48AA20(*(_DWORD **)(v1 + 60)); result = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 60)); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // AB7F48: using guessed type int dword_AB7F48; // AB7F4C: using guessed type int dword_AB7F4C; // B68509: using guessed type char byte_B68509; //----- (00487D40) -------------------------------------------------------- int __thiscall sub_487D40(_DWORD **this, char *a2, char *a3) { _DWORD **v3; // esi int result; // eax char *v5; // eax v3 = this; strncpy(byte_AD9238, a2, 0x12u); byte_AD924A = 0; strncpy(dword_AD924B, a3, 0x10u); byte_AD925B = 0; sub_48AA70(v3[15]); result = (*(int (**)(void))(*v3[25] + 8))(); if ( !(_BYTE)result ) { v5 = (char *)sub_40C190(-988949230); sub_462C30(1, v5); result = sub_48AA20(v3[15]); } return result; } // AD924A: using guessed type char byte_AD924A; // AD925B: using guessed type char byte_AD925B; //----- (00487DB0) -------------------------------------------------------- char __thiscall sub_487DB0(int this) { int v1; // esi char result; // al _DWORD *v3; // ST00_4 _DWORD *v4; // esi v1 = this; if ( byte_B68509 ) { sub_905F40(dword_AB7F48); sub_905F40(dword_AB7F4C); sub_8F00A0((int)&unk_BA6A18, 0); result = sub_6F3C20(&off_AB7F2C); } else { v3 = *(_DWORD **)(this + 64); *(_BYTE *)(this + 148) = 0; sub_8F86A0(&unk_BA6B10, v3); sub_48AA20(*(_DWORD **)(v1 + 60)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 60)); result = sub_6F3C20(&off_AB7F2C); v4 = *(_DWORD **)(v1 + 88); if ( v4 ) result = sub_8F82A0(&unk_BA6B10, v4); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // AB7F48: using guessed type int dword_AB7F48; // AB7F4C: using guessed type int dword_AB7F4C; // B68509: using guessed type char byte_B68509; //----- (00487E40) -------------------------------------------------------- char __thiscall sub_487E40(_DWORD *this) { _DWORD *v1; // eax int v2; // ecx char v3; // dl _DWORD *v4; // esi unsigned int v5; // edi _DWORD *v6; // ebx int v7; // edx _DWORD *v8; // eax int v9; // ST18_4 int v10; // ecx int v11; // ST20_4 int v12; // edx int v14; // [esp+14h] [ebp-18h] int v15; // [esp+18h] [ebp-14h] int v16; // [esp+1Ch] [ebp-10h] int v17; // [esp+20h] [ebp-Ch] _DWORD *v18; // [esp+24h] [ebp-8h] char v19; // [esp+2Bh] [ebp-1h] v1 = this; v2 = dword_AC9CE8; v3 = *(_BYTE *)(dword_AC9CE8 + 12); *(_BYTE *)(dword_AC9CE8 + 12) = 0; v4 = (_DWORD *)v1[40]; v18 = v1; v17 = v2; v19 = v3; if ( v4 ) { v5 = 0; if ( v1[47] ) { do { v6 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( v6 ) { v7 = v1[48]; if ( (v1[49] - v7) >> 2 >= v5 ) break; v8 = *(_DWORD **)(v7 + 4 * v5); v9 = v8[10]; v10 = v8[11]; v11 = v8[12]; v14 = v8[9]; v16 = v10; v15 = v9; sub_68E670(v6, *(_DWORD *)(v7 + 4 * v5), (int)&v14); *(_WORD *)(v6[29] + 28) &= 0xFFFEu; v1 = v18; v2 = v17; } ++v5; } while ( v5 < v1[47] ); } while ( v4 ) { v12 = v4[2]; v4 = (_DWORD *)*v4; *(_WORD *)(*(_DWORD *)(v12 + 116) + 28) |= 1u; } LOBYTE(v1) = v19; *(_BYTE *)(v2 + 12) = v19; } return (char)v1; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (00487F20) -------------------------------------------------------- int __thiscall sub_487F20(_DWORD *this, int a2) { _DWORD *v2; // edx int result; // eax signed int v4; // ecx int v5; // edx _DWORD **v6; // esi char v7; // [esp+0h] [ebp-104h] v2 = this; byte_ACDEF4 = 1; switch ( a2 ) { case 0: result = 800; v4 = 600; break; case 2: result = 1280; goto LABEL_20; case 3: result = 1280; v4 = 960; break; case 4: result = 1280; v4 = 1024; break; case 5: result = 1400; v4 = 1050; break; case 6: result = 1600; v4 = 1200; break; case 7: case 12: result = 1600; v4 = 900; break; case 8: result = 1920; v4 = 1440; break; case 9: result = 1920; v4 = 1200; break; case 10: result = 1680; v4 = 1050; break; case 11: result = 1280; v4 = 800; break; case 13: result = 1440; v4 = 900; break; case 14: result = 1920; v4 = 1080; break; case 15: result = 2560; v4 = 1440; break; case 16: result = 3840; v4 = 2160; break; case 17: result = 1366; goto LABEL_20; case 18: result = 3440; v4 = 1440; break; default: result = 1024; LABEL_20: v4 = 768; break; } dword_AB66DF = result; dword_AB66E3 = v4; v5 = v2[16]; if ( v5 ) { v6 = *(_DWORD ***)(v5 + 660); if ( v6 ) { sprintf(&v7, "%i x %i", result, v4); result = sub_48B800(v6, (int)&v7); } } return result; } // AB66E3: using guessed type int dword_AB66E3; // ACDEF4: using guessed type char byte_ACDEF4; //----- (004880D0) -------------------------------------------------------- int __thiscall sub_4880D0(_DWORD *this, float a2) { int v2; // esi int v3; // ecx int v4; // ecx float v5; // ST1C_4 int v6; // ecx _DWORD **v7; // ecx float v8; // ST20_4 int v9; // eax char *v10; // eax volatile LONG *v11; // eax char *v12; // eax int v13; // eax char *v14; // eax volatile LONG *v15; // eax char *v16; // eax int v17; // ecx _DWORD *v18; // eax _DWORD *v19; // eax char v21; // [esp+24h] [ebp-38h] int v22; // [esp+2Ch] [ebp-30h] char v23; // [esp+38h] [ebp-24h] int v24; // [esp+40h] [ebp-1Ch] int v25; // [esp+58h] [ebp-4h] v2 = (int)this; v3 = this[25]; if ( v3 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0((_DWORD *)v2); sub_8F8AE0(&unk_BA6B10, 1); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); sub_435250(*(_DWORD *)(v2 + 96)); sub_487E40((_DWORD *)v2); if ( 0.0 == *(float *)(v2 + 236) ) *(float *)(v2 + 236) = a2; if ( *(_DWORD *)(v2 + 212) ) { if ( dword_AB6524 && !sub_6B7C90((_DWORD *)dword_AB6524) ) sub_6BA1D0(&dword_AB6520, "LoginBackground.mp3"); v4 = *(_DWORD *)(v2 + 220); if ( v4 ) { if ( !(*(_BYTE *)(v4 + 28) & 1) ) { v5 = a2 - *(float *)(v2 + 236); if ( *(float *)(*(_DWORD *)(v2 + 212) + 24) <= (double)v5 ) { *(_WORD *)(v4 + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v2 + 224) + 28) &= 0xFFFEu; } } } } v6 = *(_DWORD *)(v2 + 100); if ( v6 ) sub_9060A0(v6); v7 = *(_DWORD ***)(v2 + 140); if ( v7 ) { v8 = a2 - *(float *)(v2 + 236); sub_85BED0(v7, v8, 1); } v9 = *(_DWORD *)(v2 + 100); if ( v9 && *(_BYTE *)(v9 + 9) ) { sub_6F3C20(&off_AB7F2C); if ( byte_B68508 == 1 ) { v10 = (char *)sub_40C190(374499920); v11 = sub_462C30(1, v10); byte_B68508 = 0; } else { v12 = (char *)sub_40C190(-804710865); v11 = sub_462C30(1, v12); } v22 = 20; sub_461760(v11, v2, &v21, 0); } v13 = *(_DWORD *)(v2 + 104); if ( v13 && *(_BYTE *)(v13 + 9) ) { sub_6F3C20(&off_AB7F2C); if ( byte_B68508 == 1 ) { v14 = (char *)sub_40C190(374499920); v15 = sub_462C30(1, v14); byte_B68508 = 0; } else { v16 = (char *)sub_40C190(-753658320); v15 = sub_462C30(1, v16); } v24 = 20; sub_461760(v15, v2, &v23, 0); } v17 = *(_DWORD *)(v2 + 64); if ( v17 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v17 + 260))() ) { if ( !(dword_ACE098 & 1) ) { dword_ACE098 |= 1u; dword_ACE094 = timeGetTime(); } if ( timeGetTime() > dword_ACE094 + 10000 ) { sub_4864D0((_DWORD *)v2); dword_ACE094 = timeGetTime(); } } sub_6BACD0(&dword_AB6520, a2, 0); if ( !dword_ACB390 ) { v18 = operator new(0x2Cu); v25 = 0; if ( v18 ) v19 = sub_44E1E0(v18); else v19 = 0; v25 = -1; dword_ACB390 = (int)v19; } return SteamAPI_RunCallbacks(); } // 44E160: using guessed type int SteamAPI_RunCallbacks(void); // AB6524: using guessed type int dword_AB6524; // AB7F2C: using guessed type void **off_AB7F2C; // ACB390: using guessed type int dword_ACB390; // ACE094: using guessed type int dword_ACE094; // ACE098: using guessed type int dword_ACE098; // B68508: using guessed type char byte_B68508; //----- (004883A0) -------------------------------------------------------- void __userpurge sub_4883A0(int a1@, unsigned int a2@, int a3, int a4, int a5) { int v5; // ecx _DWORD **v6; // esi int v7; // ecx _DWORD **v8; // esi int v9; // ecx _DWORD **v10; // esi int v11; // ecx _DWORD **v12; // esi int v13; // ecx int v14; // ecx _DWORD **v15; // esi int v16; // ecx _DWORD **v17; // esi int v18; // ecx int v19; // ecx _DWORD **v20; // esi int v21; // ecx _DWORD **v22; // esi int v23; // ecx _DWORD **v24; // esi int v25; // ecx _DWORD **v26; // esi int v27; // ecx _DWORD **v28; // esi int v29; // ecx int v30; // ecx _DWORD **v31; // esi int v32; // ecx _DWORD **v33; // esi int v34; // ecx _DWORD **v35; // esi int v36; // ecx _DWORD **v37; // esi signed int v38; // [esp-8h] [ebp-10Ch] char v39; // [esp+0h] [ebp-104h] switch ( a3 ) { case 9: sub_487BD0((_DWORD **)a1); break; case 10: sub_8EF040((void *)a1, dword_ACDD5C, 0); break; case 11: sub_487C00((_DWORD **)a1, a4); break; case 12: sub_8EEFC0(dword_ACDD58, 0); break; case 13: sub_487C40((_DWORD **)a1, a4); break; case 14: *(_DWORD *)dword_AD924B = 0; dword_AD924F = 0; dword_AD9253 = 0; dword_AD9257 = 0; byte_AD925B = 0; sub_8F00A0((int)&unk_BA6A18, 0); break; case 15: sub_487C70((_DWORD **)a1); break; case 16: sub_8EF040((void *)a1, dword_ACDD64, 0); break; case 17: sub_487CA0((_DWORD **)a1, a4); break; case 18: sub_487450(); break; case 19: sub_4864D0((_DWORD *)a1); break; case 20: *(_DWORD *)dword_AD924B = 0; dword_AD924F = 0; dword_AD9253 = 0; dword_AD9257 = 0; byte_AD925B = 0; sub_487CD0(a1); break; case 21: sub_487870(a1, a2); break; case 22: sub_487F20((_DWORD *)a1, 0); break; case 23: byte_ACDEF4 = 1; dword_AB66DF = 1024; dword_AB66E3 = 768; v5 = *(_DWORD *)(a1 + 64); if ( v5 ) { v6 = *(_DWORD ***)(v5 + 660); if ( v6 ) { sprintf(&v39, "%i x %i", 1024, 768); sub_48B800(v6, (int)&v39); } } break; case 24: byte_ACDEF4 = 1; dword_AB66DF = 1280; dword_AB66E3 = 768; v7 = *(_DWORD *)(a1 + 64); if ( v7 ) { v8 = *(_DWORD ***)(v7 + 660); if ( v8 ) { sprintf(&v39, "%i x %i", 1280, 768); goto LABEL_59; } } break; case 25: byte_ACDEF4 = 1; dword_AB66DF = 1280; dword_AB66E3 = 960; v9 = *(_DWORD *)(a1 + 64); if ( v9 ) { v10 = *(_DWORD ***)(v9 + 660); if ( v10 ) { sprintf(&v39, "%i x %i", 1280, 960); sub_48B800(v10, (int)&v39); } } break; case 26: byte_ACDEF4 = 1; dword_AB66DF = 1280; dword_AB66E3 = 1024; v11 = *(_DWORD *)(a1 + 64); if ( v11 ) { v12 = *(_DWORD ***)(v11 + 660); if ( v12 ) { sprintf(&v39, "%i x %i", 1280, 1024); sub_48B800(v12, (int)&v39); } } break; case 27: byte_ACDEF4 = 1; dword_AB66DF = 1400; dword_AB66E3 = 1050; v13 = *(_DWORD *)(a1 + 64); if ( v13 ) { v8 = *(_DWORD ***)(v13 + 660); if ( v8 ) { sprintf(&v39, "%i x %i", 1400, 1050); goto LABEL_59; } } break; case 28: byte_ACDEF4 = 1; dword_AB66DF = 1600; dword_AB66E3 = 1200; v14 = *(_DWORD *)(a1 + 64); if ( v14 ) { v15 = *(_DWORD ***)(v14 + 660); if ( v15 ) { sprintf(&v39, "%i x %i", 1600, 1200); sub_48B800(v15, (int)&v39); } } break; case 29: byte_ACDEF4 = 1; dword_AB66DF = 1600; dword_AB66E3 = 900; v16 = *(_DWORD *)(a1 + 64); if ( v16 ) { v17 = *(_DWORD ***)(v16 + 660); if ( v17 ) { sprintf(&v39, "%i x %i", 1600, 900); sub_48B800(v17, (int)&v39); } } break; case 30: byte_ACDEF4 = 1; dword_AB66DF = 1920; dword_AB66E3 = 1440; v18 = *(_DWORD *)(a1 + 64); if ( v18 ) { v8 = *(_DWORD ***)(v18 + 660); if ( v8 ) { v38 = 1440; goto LABEL_58; } } break; case 31: byte_ACDEF4 = 1; dword_AB66DF = 1920; dword_AB66E3 = 1200; v19 = *(_DWORD *)(a1 + 64); if ( v19 ) { v20 = *(_DWORD ***)(v19 + 660); if ( v20 ) { sprintf(&v39, "%i x %i", 1920, 1200); sub_48B800(v20, (int)&v39); } } break; case 32: byte_ACDEF4 = 1; dword_AB66DF = 1680; dword_AB66E3 = 1050; v21 = *(_DWORD *)(a1 + 64); if ( v21 ) { v22 = *(_DWORD ***)(v21 + 660); if ( v22 ) { sprintf(&v39, "%i x %i", 1680, 1050); sub_48B800(v22, (int)&v39); } } break; case 33: byte_ACDEF4 = 1; dword_AB66DF = 1280; dword_AB66E3 = 800; v23 = *(_DWORD *)(a1 + 64); if ( v23 ) { v24 = *(_DWORD ***)(v23 + 660); if ( v24 ) { sprintf(&v39, "%i x %i", 1280, 800); sub_48B800(v24, (int)&v39); } } break; case 34: byte_ACDEF4 = 1; dword_AB66DF = 1600; dword_AB66E3 = 900; v25 = *(_DWORD *)(a1 + 64); if ( v25 ) { v26 = *(_DWORD ***)(v25 + 660); if ( v26 ) { sprintf(&v39, "%i x %i", 1600, 900); sub_48B800(v26, (int)&v39); } } break; case 35: byte_ACDEF4 = 1; dword_AB66DF = 1440; dword_AB66E3 = 900; v27 = *(_DWORD *)(a1 + 64); if ( v27 ) { v28 = *(_DWORD ***)(v27 + 660); if ( v28 ) { sprintf(&v39, "%i x %i", 1440, 900); sub_48B800(v28, (int)&v39); } } break; case 36: byte_ACDEF4 = 1; dword_AB66DF = 1920; dword_AB66E3 = 1080; v29 = *(_DWORD *)(a1 + 64); if ( v29 ) { v8 = *(_DWORD ***)(v29 + 660); if ( v8 ) { v38 = 1080; LABEL_58: sprintf(&v39, "%i x %i", 1920, v38); LABEL_59: sub_48B800(v8, (int)&v39); } } break; case 37: byte_ACDEF4 = 1; dword_AB66DF = 2560; dword_AB66E3 = 1440; v30 = *(_DWORD *)(a1 + 64); if ( v30 ) { v31 = *(_DWORD ***)(v30 + 660); if ( v31 ) { sprintf(&v39, "%i x %i", 2560, 1440); sub_48B800(v31, (int)&v39); } } break; case 38: byte_ACDEF4 = 1; dword_AB66DF = 3840; dword_AB66E3 = 2160; v32 = *(_DWORD *)(a1 + 64); if ( v32 ) { v33 = *(_DWORD ***)(v32 + 660); if ( v33 ) { sprintf(&v39, "%i x %i", 3840, 2160); sub_48B800(v33, (int)&v39); } } break; case 39: byte_ACDEF4 = 1; dword_AB66DF = 1366; dword_AB66E3 = 768; v34 = *(_DWORD *)(a1 + 64); if ( v34 ) { v35 = *(_DWORD ***)(v34 + 660); if ( v35 ) { sprintf(&v39, "%i x %i", 1366, 768); sub_48B800(v35, (int)&v39); } } break; case 40: byte_ACDEF4 = 1; dword_AB66DF = 3440; dword_AB66E3 = 1440; v36 = *(_DWORD *)(a1 + 64); if ( v36 ) { v37 = *(_DWORD ***)(v36 + 660); if ( v37 ) { sprintf(&v39, "%i x %i", 3440, 1440); sub_48B800(v37, (int)&v39); } } break; case 41: sub_487F20((_DWORD *)a1, 19); break; default: return; } } // AB66E3: using guessed type int dword_AB66E3; // ACDD58: using guessed type int dword_ACDD58; // ACDD5C: using guessed type int dword_ACDD5C; // ACDD64: using guessed type int dword_ACDD64; // ACDEF4: using guessed type char byte_ACDEF4; // AD924F: using guessed type int dword_AD924F; // AD9253: using guessed type int dword_AD9253; // AD9257: using guessed type int dword_AD9257; // AD925B: using guessed type char byte_AD925B; //----- (00488D50) -------------------------------------------------------- void __thiscall sub_488D50(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // ecx int v7; // eax int v8; // ST20_4 int v9; // ST1C_4 int v10; // ST24_4 _DWORD *v11; // [esp+28h] [ebp-Ch] int v12; // [esp+2Ch] [ebp-8h] unsigned int i; // [esp+30h] [ebp-4h] v2 = (_DWORD *)this[40]; v11 = this; for ( i = 0; v2; ++i ) { v3 = v2[2]; v4 = *(_DWORD *)(v3 + 12); v2 = (_DWORD *)*v2; v5 = (void (__thiscall ***)(_DWORD, signed int))v4; v12 = *(_DWORD *)(v3 + 12); if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v5 ) (**v5)(v5, 1); *(_DWORD *)(v3 + 12) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = *(_DWORD **)(v3 + 36); if ( v6 ) { if ( v12 ) sub_833360(v6, v12); if ( a2 ) sub_833620(*(_DWORD **)(v3 + 36), *(_DWORD **)(v3 + 12), 0, -1, 1); } if ( (v11[49] - v11[48]) >> 2 <= i ) break; v7 = *(_DWORD *)(v11[48] + 4 * i); v8 = *(_DWORD *)(v7 + 40); v9 = *(_DWORD *)(v7 + 36); v10 = *(_DWORD *)(v7 + 44); if ( *(float *)(v7 + 48) > 100.0 ) sub_4558F0(v3 + 8, 1200.0, 1200.0); } } //----- (00488E60) -------------------------------------------------------- _DWORD *__thiscall sub_488E60(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &AccountFrameWork::`vftable'; v1[9] = 0; v1[21] = 0; v1[19] = 0; v1[20] = 0; v1[18] = &PgTList::`vftable'; v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[35] = 0; v1[36] = 0; v1[38] = 0; v1[42] = 0; v1[40] = 0; v1[41] = 0; v1[39] = &PgTList>::`vftable'; v1[43] = 0; v1[44] = 0; v1[45] = 0; v1[48] = 0; v1[49] = 0; v1[50] = 0; v1[12] = 0; v1[13] = 0; v1[14] = 0; v1[15] = 0; v1[16] = 0; *((_BYTE *)v1 + 148) = 0; *((_BYTE *)v1 + 44) = 1; v1[27] = 0; v1[28] = 0; v1[29] = 0; v1[30] = 0; v1[31] = 0; v1[32] = 0; v1[33] = 0; v1[34] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9B90D8: using guessed type void *PgTList::`vftable'; // 9B90EC: using guessed type void *AccountFrameWork::`vftable'; //----- (00488F60) -------------------------------------------------------- void __thiscall sub_488F60(void **this) { void **v1; // edi int v2; // esi _DWORD *v3; // ebx _DWORD *v4; // ST00_4 volatile LONG *v5; // esi volatile LONG *v6; // esi volatile LONG *v7; // esi volatile LONG *v8; // esi volatile LONG *v9; // esi volatile LONG *v10; // esi int v11; // esi _DWORD *v12; // ebx _DWORD *v13; // ST00_4 volatile LONG *v14; // esi void *v15; // ST00_4 v1 = this; *this = &AccountFrameWork::`vftable'; *((_BYTE *)this + 148) = 0; if ( this[48] ) operator delete(this[48]); v1[48] = 0; v1[49] = 0; v1[50] = 0; if ( v1[43] ) operator delete(v1[43]); v1[43] = 0; v1[44] = 0; v1[45] = 0; v2 = (int)(v1 + 39); v1[39] = &PgTList>::`vftable'; v3 = v1[40]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(char *, _DWORD *))(*(_DWORD *)v2 + 8))((char *)v1 + 156, v4); } v1[42] = 0; v1[40] = 0; v1[41] = 0; *(_DWORD *)v2 = &NiTListBase,NiPointer>::`vftable'; v5 = (volatile LONG *)v1[38]; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)((int)v5, 1); v6 = (volatile LONG *)v1[36]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)((int)v6, 1); v7 = (volatile LONG *)v1[35]; if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)((int)v7, 1); v8 = (volatile LONG *)v1[26]; if ( v8 && !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)((int)v8, 1); v9 = (volatile LONG *)v1[25]; if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)((int)v9, 1); v10 = (volatile LONG *)v1[24]; if ( v10 && !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)((int)v10, 1); v11 = (int)(v1 + 18); v1[18] = &PgTList::`vftable'; v12 = v1[19]; while ( v12 ) { v13 = v12; v12 = (_DWORD *)*v12; (*(void (__thiscall **)(char *, _DWORD *))(*(_DWORD *)v11 + 8))((char *)v1 + 72, v13); } v1[21] = 0; v1[19] = 0; v1[20] = 0; *(_DWORD *)v11 = &NiTListBase,PgWin *>::`vftable'; v14 = (volatile LONG *)v1[9]; if ( v14 && !InterlockedDecrement(v14 + 1) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)((int)v14, 1); v15 = v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v15); } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9B90D8: using guessed type void *PgTList::`vftable'; // 9B90EC: using guessed type void *AccountFrameWork::`vftable'; //----- (004891A0) -------------------------------------------------------- void *__thiscall sub_4891A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PgWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; //----- (004891D0) -------------------------------------------------------- _DWORD *__thiscall sub_4891D0(_DWORD *this) { _DWORD *result; // eax result = this; this[3] = 0; this[1] = 0; this[2] = 0; *this = &NiTPointerListBase,PgWin *>::`vftable'; return result; } // 9B90B8: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (004891F0) -------------------------------------------------------- int __thiscall sub_4891F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PgWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWin *>::`vftable'; return result; } // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9B90B8: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (00489270) -------------------------------------------------------- _DWORD *__thiscall sub_489270(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PgWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9B90B8: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (00489300) -------------------------------------------------------- _DWORD *__thiscall sub_489300(_DWORD *this) { _DWORD *result; // eax result = this; this[3] = 0; this[1] = 0; this[2] = 0; *this = &NiTPointerList::`vftable'; return result; } // 9B90C8: using guessed type void *NiTPointerList::`vftable'; //----- (00489320) -------------------------------------------------------- int __thiscall sub_489320(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWin *>::`vftable'; return result; } // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9B90D8: using guessed type void *PgTList::`vftable'; //----- (004893A0) -------------------------------------------------------- _DWORD *__thiscall sub_4893A0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9B90A8: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9B90D8: using guessed type void *PgTList::`vftable'; //----- (00489430) -------------------------------------------------------- int *sub_489430() { return &dword_ACE084; } // ACE084: using guessed type int dword_ACE084; //----- (00489440) -------------------------------------------------------- int __thiscall sub_489440(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 24))(); } //----- (00489450) -------------------------------------------------------- int sub_489450() { return dword_ACE084; } // ACE084: using guessed type int dword_ACE084; //----- (00489460) -------------------------------------------------------- void *__thiscall sub_489460(void *this, char a2) { void *v2; // esi v2 = this; sub_488F60((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004894F0) -------------------------------------------------------- int __thiscall sub_4894F0(int this) { int result; // eax result = 0; *(_BYTE *)(this + 32) = 0; *(_DWORD *)(this + 28) = 0; return result; } //----- (00489500) -------------------------------------------------------- _DWORD *__thiscall sub_489500(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx _DWORD *result; // eax v2 = this; v3 = this[9]; if ( v3 ) (*(void (__stdcall **)(_DWORD *, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0(v2); v4 = v2[9]; if ( v4 ) sub_9060A0(v4); result = (_DWORD *)v2[9]; if ( result ) { if ( *((_BYTE *)result + 9) ) result = sub_8EEF60(v2); } return result; } //----- (00489590) -------------------------------------------------------- int __thiscall sub_489590(void **this, int a2, int a3) { void **v3; // esi char v5; // [esp+4h] [ebp-18h] int v6; // [esp+Ch] [ebp-10h] v3 = this; word_B7D19C = *(_WORD *)a3; sub_680620(byte_AD9238, (void *)(a3 + 3), *(unsigned __int8 *)(a3 + 2)); v6 = 10; sub_8EF1C0(dword_ACDD50, &v5); sub_8EEF60(v3); sub_6F3480(v3[9]); return a2; } // ACDD50: using guessed type int dword_ACDD50; // B7D19C: using guessed type __int16 word_B7D19C; //----- (00489600) -------------------------------------------------------- _DWORD *__thiscall sub_489600(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &LoginWorldNetFrameWork::`vftable'; v1[9] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9B914C: using guessed type void *LoginWorldNetFrameWork::`vftable'; //----- (00489660) -------------------------------------------------------- void __thiscall sub_489660(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi void *v4; // ST04_4 v1 = this; *this = &LoginWorldNetFrameWork::`vftable'; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } v3 = v1[9]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v4); } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9B914C: using guessed type void *LoginWorldNetFrameWork::`vftable'; //----- (00489710) -------------------------------------------------------- char __thiscall sub_489710(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi int v4; // ebx char v6; // [esp+Ch] [ebp-18h] int v7; // [esp+14h] [ebp-10h] v2 = this; v3 = this[9]; v4 = dword_AB7F4C; if ( v3 != dword_AB7F4C ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[9] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v7 = 9; sub_8EF240(v2, &v6); *((_BYTE *)v2 + 32) = 1; return 1; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (00489790) -------------------------------------------------------- void __thiscall sub_489790(_DWORD **this, int a2, int a3, int a4) { void *v4; // esi char v5; // [esp+4h] [ebp-18h] int v6; // [esp+Ch] [ebp-10h] v4 = this; if ( a2 == 9 && !(*(unsigned __int8 (**)(void))(*this[9] + 8))() ) { v6 = 9; sub_8EF1C0(dword_ACDD50, &v5); sub_8EEF60(v4); } } // ACDD50: using guessed type int dword_ACDD50; //----- (004897F0) -------------------------------------------------------- void __thiscall sub_4897F0(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx __int16 v3; // [esp+8h] [ebp-5Ch] char v4[4]; // [esp+Ch] [ebp-58h] int v5; // [esp+10h] [ebp-54h] int v6; // [esp+14h] [ebp-50h] int v7; // [esp+18h] [ebp-4Ch] __int16 v8; // [esp+1Ch] [ebp-48h] char v9; // [esp+1Eh] [ebp-46h] v1 = this; v2 = this[9]; if ( v2 ) { v3 = 3087; sub_905F90(v2, &v3, 2u); memset(v4, 0, 0x52u); v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; v8 = 0; strncpy(v4, byte_AD9238, 0x12u); qmemcpy(&v9, (const void *)sub_681580(byte_AD9238), 0x40u); sub_906000(v1[9], v4, 0x52u); } } //----- (004898C0) -------------------------------------------------------- int __thiscall sub_4898C0(int this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // esi int result; // eax int v7; // eax char v8; // [esp+4h] [ebp-18h] int v9; // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] v5 = (_DWORD *)this; result = 0; if ( a2 == 2 ) { if ( a3 == 7 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 36) + 12))(*a5); sub_4897F0(v5); result = a4; } } else if ( a2 == 3 ) { if ( a3 == 20 ) { result = sub_489590((void **)this, a4, (int)a5); } else if ( a3 == 21 ) { v7 = *a5; v9 = 11; v10 = v7; sub_8EF1C0(dword_ACDD50, &v8); sub_8EEF60(v5); result = a4; } } else if ( a2 == 8 && a3 == 17 ) { result = a4; } return result; } // ACDD50: using guessed type int dword_ACDD50; //----- (004899A0) -------------------------------------------------------- int *sub_4899A0() { return &dword_ACE160; } // ACE160: using guessed type int dword_ACE160; //----- (004899B0) -------------------------------------------------------- int sub_4899B0() { return dword_ACE160; } // ACE160: using guessed type int dword_ACE160; //----- (004899C0) -------------------------------------------------------- void *__thiscall sub_4899C0(void *this, char a2) { void *v2; // esi v2 = this; sub_489660(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00489AE0) -------------------------------------------------------- BOOL __thiscall sub_489AE0(HWND *this) { return DestroyWindow(this[86]); } //----- (00489B10) -------------------------------------------------------- int __thiscall sub_489B10(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int result; // eax v1 = this; v1[215] = v1[219] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1); v3 = v1[222]; v1[216] = v1[220] + v2; result = v1[221]; v1[217] = result; v1[218] = v3; return result; } //----- (00489B60) -------------------------------------------------------- BOOL __thiscall sub_489B60(HWND *this) { HWND *v1; // esi BOOL result; // eax int v3; // eax HWND v4; // edx int v5; // eax HWND v6; // ecx HWND v7; // edx struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { v3 = (*((int (__thiscall **)(HWND *))*v1 + 41))(v1); v4 = *v1; v1[215] = (HWND)((char *)v1[219] + v3); v5 = (*((int (__thiscall **)(HWND *))v4 + 42))(v1); v6 = v1[221]; v7 = v1[222]; v1[216] = (HWND)((char *)v1[220] + v5); v1[217] = v6; v1[218] = v7; GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[215] + Rect.left, (int)v1[216] + Rect.top, (int)v1[217], (int)v1[218], 1); } return result; } //----- (00489C30) -------------------------------------------------------- HINSTANCE __thiscall sub_489C30(const CHAR *this, int a2, int a3) { HINSTANCE result; // eax if ( !a2 ) result = ShellExecuteA(0, "open", this + 344, 0, 0, 5); return result; } //----- (00489C60) -------------------------------------------------------- void __thiscall sub_489C60(_BYTE *this) { _BYTE *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // eax char *v5; // eax int v6; // edx char v7; // cl FILE v8; // [esp+10h] [ebp-114h] int v9; // [esp+120h] [ebp-4h] v1 = this; memset(&v8, 0, 0x104u); if ( !byte_ACAD5C ) sub_420410(); sprintf((char *)&v8, "%sSpawnApps.hb", byte_ACA520); v2 = operator new(0x2224u); v9 = 0; if ( v2 ) v3 = sub_6CBF30(v2); else v3 = 0; v9 = -1; if ( v3 ) { sub_6CBFB0(v3, &v8); if ( sub_6CBEC0(v3, 1u) != -1 ) { v4 = sub_6CBE40(v3, 1, 0); if ( v4 ) { v5 = (char *)(v4 + 8); v6 = v1 + 344 - v5; do { v7 = *v5; v5[v6] = *v5; ++v5; } while ( v7 ); } nullsub_29(v3); operator delete(v3); } } } // 6CBFA0: using guessed type int __thiscall nullsub_29(_DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00489D70) -------------------------------------------------------- char __thiscall sub_489D70(HWND *this, int a2, int a3) { char result; // al HWND *v4; // esi result = a2 - 1; v4 = this; if ( a2 == 1 ) { DestroyWindow(this[86]); result = sub_8F86A0(&unk_BA6B10, v4); } return result; } //----- (00489DA0) -------------------------------------------------------- char __thiscall sub_489DA0(_BYTE *this) { _BYTE *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v5; // eax char *v6; // eax int v7; // edx char v8; // cl FILE v9; // [esp+10h] [ebp-114h] int v10; // [esp+120h] [ebp-4h] v1 = this; memset(&v9, 0, 0x104u); if ( !byte_ACAD5C ) sub_420410(); sprintf((char *)&v9, "%sSpawnApps.hb", byte_ACA520); v2 = operator new(0x2224u); v10 = 0; if ( v2 ) v3 = sub_6CBF30(v2); else v3 = 0; v10 = -1; if ( !v3 ) return 0; sub_6CBFB0(v3, &v9); if ( sub_6CBEC0(v3, 1u) == -1 ) return 0; v5 = sub_6CBE40(v3, 1, 1); if ( v5 ) { v6 = (char *)(v5 + 8); v7 = v1 + 348 - v6; do { v8 = *v6; v6[v7] = *v6; ++v6; } while ( v8 ); } nullsub_29(v3); operator delete(v3); return 1; } // 6CBFA0: using guessed type int __thiscall nullsub_29(_DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00489EC0) -------------------------------------------------------- BOOL __thiscall sub_489EC0(HWND *this, int a2) { return sub_489B60(this); } //----- (00489ED0) -------------------------------------------------------- char __thiscall sub_489ED0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // edi volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi volatile LONG **v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // esi int v12; // [esp+14h] [ebp-18h] int v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\Account\\SpawnAppsButton.nif"); sub_8F66B0(v4, (int)&v14, v3); if ( !v14 ) return 0; v5 = (volatile LONG *)sub_43D0D0(0x1Au); v6 = v5; v7 = sub_8FB140(v14, (int)"Frame", (int)&v12, (int)&v13, v5); if ( !sub_8F1440(v2, 0, 0, (int)v7, 0, a2, (int)"SignUpWin", 0) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v14; v15 = -1; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v10 = sub_8FB140(v14, (int)"RegisterNor", (int)&v12, (int)&v13, v6); sub_8FB650(v10, v14, (int)"RegisterClick"); sub_8FB650(v10, v14, (int)"RegisterOver"); sub_8FE0F0(v12, v13, (int)v10, (int)v2, 0, 0, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.82999998, 0.64999998); sub_489C60(v2); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048A090) -------------------------------------------------------- char __thiscall sub_48A090(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // ebx volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al int v10; // eax volatile LONG *v11; // edi const CHAR *v12; // eax volatile LONG **v13; // edi int v14; // [esp+28h] [ebp-20h] int v15; // [esp+2Ch] [ebp-1Ch] int v16; // [esp+30h] [ebp-18h] int v17; // [esp+34h] [ebp-14h] int v18; // [esp+38h] [ebp-10h] int v19; // [esp+44h] [ebp-4h] volatile LONG v20; // [esp+50h] [ebp+8h] v2 = (int)this; v18 = 0; v3 = dword_BA6BA0; v19 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\Account\\SpawnAppsNotice.nif"); sub_8F66B0(v4, (int)&v18, v3); if ( !v18 ) return 0; v5 = (volatile LONG *)sub_43D0D0(0x1Au); v6 = v5; v7 = sub_8FB140(v18, (int)"Frame", (int)&v16, (int)&v17, v5); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"SpawnAppsWin", 0) || !sub_8F71E0(v18, (int)"Title", &v16, &v17, &v14, &v15) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v18; v19 = -1; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v10 = sub_421050(0); v11 = sub_8F4A20(v16, v17, v14, v15, v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8D98); v20 = *v11; v12 = sub_40A910(-1763458324); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v11, v12); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); if ( sub_8F71E0( v18, (int)"WebPage", (_DWORD *)(v2 + 876), (_DWORD *)(v2 + 880), (_DWORD *)(v2 + 884), (_DWORD *)(v2 + 888)) ) { sub_8FB140(v18, (int)"WebPage", (int)&v16, (int)&v17, v6); v13 = sub_8FB140(v18, (int)"ClsNor", (int)&v16, (int)&v17, v6); sub_8FB650(v13, v18, (int)"ClsClick"); sub_8FB650(v13, v18, (int)"ClsOver"); sub_8FE0F0(v16, v17, (int)v13, v2, 1, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_489DA0((_BYTE *)v2); sub_489B10((_DWORD *)v2); v19 = -1; sub_410C00(&v18); result = 1; } else { v19 = -1; sub_410C00(&v18); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048A340) -------------------------------------------------------- int __cdecl sub_48A340(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x358u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &SignUpWin::`vftable'; *(_DWORD *)(v2 + 232) = &SignUpWin::`vftable'; memset((void *)(v2 + 344), 0, 0x200u); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B9284: using guessed type void *SignUpWin::`vftable'; // 9B92A4: using guessed type void *SignUpWin::`vftable'; //----- (0048A4A0) -------------------------------------------------------- int __cdecl sub_48A4A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x37Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &SpawnAppsWin::`vftable'; *(_DWORD *)(v2 + 232) = &SpawnAppsWin::`vftable'; memset((void *)(v2 + 348), 0, 0x200u); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B94C8: using guessed type void *SpawnAppsWin::`vftable'; // 9B94E4: using guessed type void *SpawnAppsWin::`vftable'; //----- (0048A600) -------------------------------------------------------- int __thiscall sub_48A600(char *this) { char *v1; // esi int v2; // ecx int v3; // eax int v4; // edx unsigned int v5; // ebx int v6; // eax char *v7; // eax char v8; // cl void (__thiscall *v9)(char *, int *); // edx unsigned int v10; // edx signed int v12; // [esp-4h] [ebp-234h] int v13; // [esp+8h] [ebp-228h] int v14; // [esp+Ch] [ebp-224h] int v15; // [esp+10h] [ebp-220h] int v16; // [esp+14h] [ebp-21Ch] unsigned int v17; // [esp+18h] [ebp-218h] int v18; // [esp+1Ch] [ebp-214h] int v19; // [esp+20h] [ebp-210h] int v20; // [esp+24h] [ebp-20Ch] int v21; // [esp+28h] [ebp-208h] char v22; // [esp+2Ch] [ebp-204h] char v23; // [esp+2Dh] [ebp-203h] v1 = this; v2 = *((_DWORD *)this + 216); v3 = *((_DWORD *)v1 + 215); v4 = *((_DWORD *)v1 + 217); v5 = 0; v12 = 511; v19 = v2; v18 = v3; v6 = *((_DWORD *)v1 + 218); v20 = v4; v21 = v6; v22 = 0; memset(&v23, 0, 0x1FFu); v7 = v1 + 348; do { v8 = *v7; v7[&v22 - (v1 + 348)] = *v7; ++v7; } while ( v8 ); v12 = 0; *((_DWORD *)v1 + 86) = sub_427200((char)hWnd, dword_ACDC7C, &v22, (int)&v18); v9 = *(void (__thiscall **)(char *, int *))(*(_DWORD *)v1 + 208); v13 = 0; v14 = 0; v15 = 0; v16 = 0; v9(v1, &v13); v10 = v16 - v15; v17 = 0; if ( xRight >= (unsigned int)(v14 - v13) && dword_AC2F78 >= v10 ) { v5 = (unsigned int)(xRight - (v14 - v13)) >> 1; v17 = (dword_AC2F78 - v10) >> 1; } (*(void (__thiscall **)(char *, unsigned int))(*(_DWORD *)v1 + 172))(v1, v5); return (*(int (__thiscall **)(char *, unsigned int))(*(_DWORD *)v1 + 176))(v1, v17); } //----- (0048A750) -------------------------------------------------------- void *__thiscall sub_48A750(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SignUpWin::`vftable'; *((_DWORD *)this + 58) = &SignUpWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B9284: using guessed type void *SignUpWin::`vftable'; // 9B92A4: using guessed type void *SignUpWin::`vftable'; //----- (0048A790) -------------------------------------------------------- void *__thiscall sub_48A790(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SpawnAppsWin::`vftable'; *((_DWORD *)this + 58) = &SpawnAppsWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B94C8: using guessed type void *SpawnAppsWin::`vftable'; // 9B94E4: using guessed type void *SpawnAppsWin::`vftable'; //----- (0048A830) -------------------------------------------------------- HINSTANCE __thiscall sub_48A830(const char *this) { const CHAR *v1; // edx HINSTANCE result; // eax v1 = this + 364; result = (HINSTANCE)strlen(this + 364); if ( result ) result = ShellExecuteA(0, "open", v1, 0, 0, 5); return result; } //----- (0048A870) -------------------------------------------------------- HINSTANCE __thiscall sub_48A870(const char *this) { const CHAR *v1; // edx HINSTANCE result; // eax v1 = this + 1388; result = (HINSTANCE)strlen(this + 1388); if ( result ) result = ShellExecuteA(0, "open", v1, 0, 0, 5); return result; } //----- (0048A8B0) -------------------------------------------------------- char *__thiscall sub_48A8B0(int this, char *a2) { int v2; // edi char *result; // eax v2 = this; if ( a2 ) { if ( *a2 ) { memset((void *)(this + 364), 0, 0x400u); result = strncpy((char *)(v2 + 364), a2, 0x400u); *(_BYTE *)(v2 + 1387) = 0; } } return result; } //----- (0048A900) -------------------------------------------------------- char *__thiscall sub_48A900(int this, char *a2) { int v2; // edi char *result; // eax v2 = this; if ( a2 ) { if ( *a2 ) { memset((void *)(this + 1388), 0, 0x400u); result = strncpy((char *)(v2 + 1388), a2, 0x400u); *(_BYTE *)(v2 + 2411) = 0; } } return result; } //----- (0048A9C0) -------------------------------------------------------- char __thiscall sub_48A9C0(_DWORD **this) { _DWORD **v1; // esi _BYTE *v2; // edi _BYTE *v3; // eax v1 = this; v2 = (_BYTE *)(*(int (**)(void))(*this[87] + 452))(); v3 = (_BYTE *)(*(int (**)(void))(*v1[88] + 452))(); v1[90] = (_DWORD *)1; if ( !*v2 ) return 0; v1[90] = 0; v1[90] = (_DWORD *)2; if ( !*v3 ) return 0; v1[90] = 0; return 1; } //----- (0048AA20) -------------------------------------------------------- int __thiscall sub_48AA20(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[87]; if ( v2 ) { v1[89] = 1; (*(void (**)(void))(*(_DWORD *)v2 + 480))(); } (*(void (__thiscall **)(_DWORD *, signed int))(*v1 + 252))(v1, 1); return (*(int (__stdcall **)(void *))(*(_DWORD *)v1[88] + 460))(&unk_9B9729); } //----- (0048AA70) -------------------------------------------------------- int __thiscall sub_48AA70(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[87]; if ( v2 ) { v1[89] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 488))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[88] + 488))(1); } return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 252))(v1, 0); } //----- (0048AAC0) -------------------------------------------------------- char __thiscall sub_48AAC0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; switch ( this[90] ) { case 1: goto LABEL_12; case 2: if ( !this[87] ) break; v3 = this[88]; v2[89] = 2; goto LABEL_6; case 3: LABEL_12: v3 = this[87]; if ( v3 ) { v2[89] = 1; LABEL_6: (*(void (**)(void))(*(_DWORD *)v3 + 480))(); break; } break; } v2[90] = 0; return 1; } //----- (0048AB60) -------------------------------------------------------- LONG __thiscall sub_48AB60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &AccountWin::`vftable'; this[58] = &AccountWin::`vftable'; v2 = this[87]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0; } v3 = v1[88]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[88] = 0; } v4 = v1[88]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[87]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_8F10F0(v1); } // 9B9808: using guessed type void *AccountWin::`vftable'; // 9B9824: using guessed type void *AccountWin::`vftable'; //----- (0048AC80) -------------------------------------------------------- int __thiscall sub_48AC80(_BYTE *this) { _BYTE *v1; // esi int result; // eax int v3; // ecx v1 = this; result = sub_8F28C0(this); v3 = *((_DWORD *)v1 + 87); if ( v3 ) { *((_DWORD *)v1 + 89) = 1; result = (*(int (**)(void))(*(_DWORD *)v3 + 480))(); } return result; } //----- (0048ACB0) -------------------------------------------------------- int __thiscall sub_48ACB0(_BYTE *this) { _BYTE *v1; // esi int result; // eax int v3; // ecx v1 = this; result = sub_8F28E0(this); v3 = *((_DWORD *)v1 + 87); if ( v3 ) { *((_DWORD *)v1 + 89) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 488))(1); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v1 + 88) + 488))(1); } return result; } //----- (0048ACF0) -------------------------------------------------------- char __thiscall sub_48ACF0(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax int v10; // eax volatile LONG *v11; // edx volatile LONG **v12; // edi volatile LONG **v13; // edi volatile LONG *v14; // eax volatile LONG *v15; // eax int v16; // ecx volatile LONG **v17; // edi volatile LONG **v18; // edi void (__thiscall ***v19)(_DWORD, signed int); // esi int v20; // [esp+10h] [ebp-20h] int v21; // [esp+14h] [ebp-1Ch] int v22; // [esp+18h] [ebp-18h] int v23; // [esp+1Ch] [ebp-14h] int v24; // [esp+20h] [ebp-10h] int v25; // [esp+2Ch] [ebp-4h] v2 = (int)this; v24 = 0; v25 = 0; v3 = (volatile LONG *)sub_43D0D0(3u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v24; v25 = -1; if ( !v24 || InterlockedDecrement((volatile LONG *)(v24 + 4)) ) return 0; v5 = v24 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Account\\LoginInputPanel.nif"); sub_8F66B0(v8, (int)&v24, v7); if ( !v24 ) return 0; v9 = sub_8FB140(v24, (int)"InputPanel", (int)&v22, (int)&v23, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"AccountWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v24; v25 = -1; if ( !v24 || InterlockedDecrement((volatile LONG *)(v24 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v11 = *(volatile LONG **)v2; v20 = v10; v21 = (*((int (__thiscall **)(int))v11 + 37))(v2); v12 = sub_8FB140(v24, (int)"Login", (int)&v22, (int)&v23, v3); sub_8FB650(v12, v24, (int)"LoginClick"); sub_8FB650(v12, v24, (int)"LoginOver"); sub_8FE0F0(v22, v23, (int)v12, v2, 0, 0, 0); v13 = sub_8FB140(v24, (int)"Quit", (int)&v22, (int)&v23, v3); sub_8FB650(v13, v24, (int)"QuitClick"); sub_8FB650(v13, v24, (int)"QuitOver"); sub_8FE0F0(v22, v23, (int)v13, v2, 1, 0, 0); if ( sub_8F71E0(v24, (int)"ID", &v22, &v23, &v20, &v21) ) { v14 = sub_45A900(v22 + 2, v23 + 4, v20, v21, v2, 1342177280, 18, 3, 0, 0, 1); sub_56FF80((_DWORD *)(v2 + 348), (int)v14); } sub_8F71E0(v24, (int)"Password", &v22, &v23, &v20, &v21); v15 = sub_45A900(v22 + 2, v23 + 4, v20, v21, v2, 1342177312, 16, 3, 0, 0, 1); sub_56FF80((_DWORD *)(v2 + 352), (int)v15); v16 = *(_DWORD *)(v2 + 348); if ( v16 ) (*(void (**)(void))(*(_DWORD *)v16 + 480))(); sub_459B60(*(_DWORD **)(v2 + 348), 2); sub_459B60(*(_DWORD **)(v2 + 352), 2); v17 = sub_8FB140(v24, (int)"RegisterNomal", (int)&v22, (int)&v23, 0); sub_8FB650(v17, v24, (int)"RegisterClick"); sub_8FB650(v17, v24, (int)"RegisterOver"); sub_8FE0F0(v22, v23, (int)v17, v2, 3, 0, 0); v18 = sub_8FB140(v24, (int)"ForgotPWNomal", (int)&v22, (int)&v23, 0); sub_8FB650(v18, v24, (int)"ForgotPWClick"); sub_8FB650(v18, v24, (int)"ForgotPWOver"); sub_8FE0F0(v22, v23, (int)v18, v2, 4, 0, 0); v25 = -1; if ( v24 ) { v19 = (void (__thiscall ***)(_DWORD, signed int))v24; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v19 ) (**v19)(v19, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048B0A0) -------------------------------------------------------- volatile LONG *__thiscall sub_48B0A0(_DWORD *this) { int v1; // esi volatile LONG *result; // eax char *v3; // eax int v4; // ecx v1 = (int)this; if ( this[90] == 1 ) { v3 = (char *)sub_40C190(-1628315387); } else { result = (volatile LONG *)(this[90] - 2); if ( this[90] != 2 ) goto LABEL_7; v3 = (char *)sub_40C190(-248365224); } result = sub_462C30(1, v3); if ( result ) result = (volatile LONG *)sub_4618E0(result, v1, 5, 2, 0, 0, 0, 0); LABEL_7: v4 = *(_DWORD *)(v1 + 348); if ( v4 ) { *(_DWORD *)(v1 + 356) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v4 + 488))(1); result = (volatile LONG *)(*(int (__stdcall **)(signed int))(**(_DWORD **)(v1 + 352) + 488))(1); } return result; } //----- (0048B120) -------------------------------------------------------- char __thiscall sub_48B120(void *this, int a2) { void *v2; // esi void (__thiscall *v3)(void *, int *); // edx int v5; // [esp+1Ch] [ebp-14h] int v6; // [esp+20h] [ebp-10h] int v7; // [esp+24h] [ebp-Ch] int v8; // [esp+28h] [ebp-8h] int v9; // [esp+2Ch] [ebp-4h] v2 = this; sub_48ACF0(this, a2); v3 = *(void (__thiscall **)(void *, int *))(*(_DWORD *)v2 + 184); v5 = 0; v6 = 0; v7 = 0; v8 = 0; v3(v2, &v5); sub_4022F0(xRight, dword_AC2F78, v6 - v5 + 1, v8 - v7 + 1, 0.83600003, 0.75, (int)&v9, (int)&a2); (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)v2 + 308))(v2, v9, a2); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); return 1; } //----- (0048B220) -------------------------------------------------------- char __thiscall sub_48B220(int this, int a2, int a3) { int v3; // esi int v4; // eax int v5; // ecx char *v6; // edi char *v7; // eax int v8; // ecx v3 = this; v4 = *(_DWORD *)(this + 356) - 1; if ( *(_DWORD *)(this + 356) == 1 ) { if ( *(_DWORD *)(this + 348) ) { v8 = *(_DWORD *)(this + 352); *(_DWORD *)(v3 + 356) = 2; LOBYTE(v4) = (*(int (**)(void))(*(_DWORD *)v8 + 480))(); } } else { v4 = *(_DWORD *)(this + 356) - 2; if ( *(_DWORD *)(this + 356) == 2 ) { if ( a2 == 1 && (LOBYTE(v4) = sub_48A9C0((_DWORD **)this), (_BYTE)v4) ) { v6 = (char *)(*(int (**)(void))(**(_DWORD **)(v3 + 352) + 452))(); v7 = (char *)(*(int (**)(void))(**(_DWORD **)(v3 + 348) + 452))(); LOBYTE(v4) = sub_487D40(*(_DWORD ***)(v3 + 296), v7, v6); } else { v5 = *(_DWORD *)(v3 + 348); if ( v5 ) { *(_DWORD *)(v3 + 356) = 1; LOBYTE(v4) = (*(int (**)(void))(*(_DWORD *)v5 + 480))(); } } } } return v4; } //----- (0048B2D0) -------------------------------------------------------- int __thiscall sub_48B2D0(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax _DWORD *v4; // ecx _DWORD *v5; // ecx char *v6; // edi char *v7; // eax v2 = this; sub_459B60(this[87], 2); sub_459B60(v2[88], 2); result = (*(int (**)(void))(*v2[88] + 492))(); if ( (_BYTE)result && v2[87] ) { v4 = v2[88]; v2[89] = (_DWORD *)2; result = (*(int (**)(void))(*v4 + 480))(); } if ( !*((_BYTE *)v2 + 344) ) { if ( byte_B68509 ) { v5 = v2[88]; *((_BYTE *)v2 + 344) = 1; v6 = (char *)(*(int (**)(void))(*v5 + 452))(); v7 = (char *)(*(int (**)(void))(*v2[87] + 452))(); sub_487D40((_DWORD **)v2[74], v7, v6); result = ((int (__thiscall *)(_DWORD **, _DWORD))(*v2)[64])(v2, 0); } } return result; } // B68509: using guessed type char byte_B68509; //----- (0048B380) -------------------------------------------------------- HINSTANCE __thiscall sub_48B380(char *this, HINSTANCE a2, int a3) { char *v3; // esi HINSTANCE result; // eax char *v5; // edi char *v6; // eax _DWORD *v7; // ecx v3 = this; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = a2; switch ( (unsigned int)a2 ) { case 0u: if ( sub_48A9C0((_DWORD **)v3) ) { v5 = (char *)(*(int (**)(void))(**((_DWORD **)v3 + 88) + 452))(); v6 = (char *)(*(int (**)(void))(**((_DWORD **)v3 + 87) + 452))(); result = (HINSTANCE)sub_487D40(*((_DWORD ***)v3 + 74), v6, v5); } else { result = (HINSTANCE)sub_48B0A0(v3); } break; case 1u: v7 = (_DWORD *)*((_DWORD *)v3 + 74); result = (HINSTANCE)sub_487480(); break; case 2u: result = (HINSTANCE)(*(int (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 544))(v3, 0); break; case 3u: result = sub_48A830(v3); break; case 4u: result = sub_48A870(v3); break; default: return result; } return result; } //----- (0048B450) -------------------------------------------------------- int __cdecl sub_48B450(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x96Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &AccountWin::`vftable'; *(_DWORD *)(v2 + 232) = &AccountWin::`vftable'; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_BYTE *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B9808: using guessed type void *AccountWin::`vftable'; // 9B9824: using guessed type void *AccountWin::`vftable'; //----- (0048B5B0) -------------------------------------------------------- void *__thiscall sub_48B5B0(void *this, char a2) { void *v2; // esi v2 = this; sub_48AB60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0048B5E0) -------------------------------------------------------- int __thiscall sub_48B5E0(_DWORD *this) { return this[87]; } //----- (0048B5F0) -------------------------------------------------------- signed int __thiscall sub_48B5F0(int this) { signed int result; // eax result = -256; *(_DWORD *)(this + 592) = -1; *(_DWORD *)(this + 600) = -1; *(_DWORD *)(this + 596) = -1; *(_BYTE *)(this + 604) = 0; *(_BYTE *)(this + 606) = 0; return result; } //----- (0048B630) -------------------------------------------------------- char __thiscall sub_48B630(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[163]); sub_8F86A0(&unk_BA6B10, v1[164]); return sub_8F86A0(&unk_BA6B10, v1[165]); } //----- (0048B700) -------------------------------------------------------- void __thiscall sub_48B700(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi v3 = this; if ( !a2 ) { if ( (*(unsigned __int8 (**)(void))(*this[86] + 260))() ) sub_8F86A0(&unk_BA6B10, v3[86]); else sub_8F9D50(&unk_BA6B10, v3[86], 0, 0, 0); } } //----- (0048B800) -------------------------------------------------------- int __thiscall sub_48B800(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) { if ( this[103] ) result = (*(int (__stdcall **)(int))(*this[103] + 472))(a2); } return result; } //----- (0048B830) -------------------------------------------------------- int __thiscall sub_48B830(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi signed int v3; // ebx int result; // eax int v5; // eax int v6; // edi bool v7; // zf _DWORD *v8; // [esp+Ch] [ebp-10h] signed int v9; // [esp+10h] [ebp-Ch] int v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] v10 = 8 * this[86]; v8 = this; v11 = 32 * this[86]; v1 = this + 105; v9 = 8; do { v2 = v1; v3 = 5; do { result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)*v2 + 256))(0); ++v2; --v3; } while ( v3 ); if ( v10 < (unsigned int)dword_B7D1BC ) { v5 = v8[159]; if ( v10 >= (v8[160] - v5) >> 2 ) { LABEL_11: v6 = v1[4]; LABEL_12: result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 256))(v6, 1); } else { result = *(unsigned __int8 *)(dword_B7D1C0 + 18 * *(_DWORD *)(v11 + v5) + 17); switch ( result ) { case 0: case 2: case 3: case 4: goto LABEL_11; case 1: v6 = v1[3]; goto LABEL_12; case 5: case 10: v6 = v1[1]; goto LABEL_12; case 6: case 7: case 8: v6 = *v1; goto LABEL_12; case 9: v6 = v1[2]; goto LABEL_12; default: break; } } } v11 += 4; v7 = v9-- == 1; ++v10; v1 = v2; } while ( !v7 ); return result; } // B7D1BC: using guessed type int dword_B7D1BC; // B7D1C0: using guessed type int dword_B7D1C0; //----- (0048B940) -------------------------------------------------------- FILE *__thiscall sub_48B940(char *this) { char *v1; // edi char *v2; // eax FILE *result; // eax FILE *v4; // esi v1 = this; if ( !byte_ACAD5C ) sub_420410(); v2 = sub_7549E0("%s\\WCInfo.hsb", byte_ACA520); result = fopen(v2, "w+b"); v4 = result; if ( result ) { fwrite(v1 + 592, 4u, 1u, result); fwrite(v1 + 344, 4u, 1u, v4); result = (FILE *)fclose(v4); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048B9B0) -------------------------------------------------------- char __thiscall sub_48B9B0(char *this) { char *v1; // edi char *v2; // eax FILE *v3; // eax FILE *v4; // esi v1 = this; if ( !byte_ACAD5C ) sub_420410(); v2 = sub_7549E0("%s\\WCInfo.hsb", byte_ACA520); v3 = fopen(v2, "rb"); v4 = v3; if ( !v3 ) return 0; fread(v1 + 592, 4u, 1u, v3); fread(v1 + 344, 4u, 1u, v4); fclose(v4); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048BA20) -------------------------------------------------------- int __thiscall sub_48BA20(_DWORD **this) { _DWORD **v1; // esi int *v2; // ecx float *v3; // edi int v4; // ST34_4 int v5; // ebx v1 = this; ((void (__thiscall *)(_DWORD **, int, int, _DWORD, _DWORD))(*this)[59])( this, xRight, dword_AC2F78, 0.52999997, 0.60000002); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[163] + 236))(xRight, dword_AC2F78, 0.94999999, 0.059999999); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[164] + 236))(xRight, dword_AC2F78, 0.94999999, 0.15000001); v2 = v1[165]; v3 = (float *)v1[164]; v4 = *v2; v5 = (*(int (__stdcall **)(signed int))(*v2 + 144))((signed int)v3[23]); return (*(int (__thiscall **)(_DWORD *, int))(v4 + 308))(v1[165], (signed int)v3[22] - v5); } //----- (0048BB20) -------------------------------------------------------- char __thiscall sub_48BB20(volatile LONG **this, int a2) { volatile LONG **v2; // esi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi void (__thiscall ***v7)(_DWORD, signed int); // esi char v8; // [esp+10h] [ebp-2Ch] char v9; // [esp+24h] [ebp-18h] char v10; // [esp+28h] [ebp-14h] int v11; // [esp+2Ch] [ebp-10h] int v12; // [esp+38h] [ebp-4h] v2 = this; v11 = 0; v12 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Account\\Option.nif"); sub_8F66B0(v3, (int)&v11, 0); if ( !v11 ) return 0; v4 = sub_8FB140(v11, (int)"Frame", (int)&v9, (int)&v10, 0); if ( !sub_8F1440(v2, 0, 0, (int)v4, 0, a2, (int)"Option", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v11; v12 = -1; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(&v8); LOBYTE(v12) = 1; sub_455FF0(&v8, (int)v2); sub_456000(&v8, 0, 0); sub_456380(&v8, v11); sub_456B30(&v8, 0, "Option", 0, 3); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.94999999, 0.15000001); LOBYTE(v12) = 0; sub_4562E0(&v8); v7 = (void (__thiscall ***)(_DWORD, signed int))v11; v12 = -1; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v7 ) (**v7)(v7, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048BCC0) -------------------------------------------------------- bool __thiscall sub_48BCC0(int this) { char v1; // al int v2; // edx bool result; // al if ( !*(_BYTE *)(this + 411) ) { v1 = *(_BYTE *)(this + 395); byte_AB66E7 = v1; v2 = *(_DWORD *)(this + 391); dword_AB66DF = *(_DWORD *)(this + 387); dword_AB66E3 = v2; result = v1 == 0; *(_BYTE *)(*(_DWORD *)(this + 344) + 380) = result; byte_ACDEF4 = 1; } *(_BYTE *)(this + 411) = 0; return result; } // AB66E3: using guessed type int dword_AB66E3; // AB66E7: using guessed type char byte_AB66E7; // ACDEF4: using guessed type char byte_ACDEF4; //----- (0048BD10) -------------------------------------------------------- void __thiscall sub_48BD10(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; if ( dword_BA6AB4 >= 1 && !(*(unsigned __int8 (__stdcall **)(LONG, LONG))(*this + 332))(pt.x, pt.y) ) sub_8F86A0(&unk_BA6B10, v2); } // BA6AB4: using guessed type int dword_BA6AB4; //----- (0048BD90) -------------------------------------------------------- char __thiscall sub_48BD90(char *this, int a2) { char *v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi bool v4; // zf char result; // al volatile LONG *v6; // eax volatile LONG *v7; // edi int v8; // edi char *v9; // eax volatile LONG **v10; // eax int v11; // edi int v12; // ebx volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax int v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax volatile LONG *v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax volatile LONG *v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // esi const char *v38; // [esp+48h] [ebp-E8h] const char *v39; // [esp+4Ch] [ebp-E4h] const char *v40; // [esp+50h] [ebp-E0h] const char *v41; // [esp+54h] [ebp-DCh] const char *v42; // [esp+58h] [ebp-D8h] volatile LONG *v43; // [esp+5Ch] [ebp-D4h] int v44; // [esp+60h] [ebp-D0h] signed int v45; // [esp+64h] [ebp-CCh] volatile LONG **v46; // [esp+68h] [ebp-C8h] int v47; // [esp+6Ch] [ebp-C4h] volatile LONG *v48; // [esp+70h] [ebp-C0h] int v49; // [esp+74h] [ebp-BCh] int v50; // [esp+78h] [ebp-B8h] int v51; // [esp+7Ch] [ebp-B4h] char v52; // [esp+80h] [ebp-B0h] char v53; // [esp+A0h] [ebp-90h] int v54; // [esp+12Ch] [ebp-4h] v2 = this; v49 = 0; v54 = 0; v48 = (volatile LONG *)sub_43D0D0(0x10u); if ( !v48 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v49; v54 = -1; if ( !v49 || InterlockedDecrement((volatile LONG *)(v49 + 4)) ) return 0; v4 = v49 == 0; LABEL_5: if ( !v4 ) (**v3)(v3, 1); return 0; } v6 = (volatile LONG *)sub_43D0D0(0x11u); v7 = v6; v43 = v6; if ( !v6 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v49; v54 = -1; if ( !v49 || InterlockedDecrement((volatile LONG *)(v49 + 4)) ) return 0; v4 = v49 == 0; goto LABEL_5; } *((_DWORD *)v2 + 145) = (*(int (__thiscall **)(volatile LONG *))(*v6 + 60))(v6); *((_DWORD *)v2 + 146) = (*(int (__thiscall **)(volatile LONG *))(*v7 + 64))(v7); v8 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v9 = (char *)sub_401410(byte_ACAB50, "\\Account\\LoginServerList.nif"); sub_8F66B0(v9, (int)&v49, v8); if ( !v49 ) return 0; v10 = sub_8FB140(v49, (int)"Frame", (int)&v51, (int)&v50, 0); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, a2, (int)"WorldSelectWin", 0) ) { v11 = v51; v12 = v50; v13 = sub_8FB140(v49, (int)"Panel01", (int)&v51, (int)&v50, v48); v14 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v13, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v46 = sub_8FB140(v49, (int)"SelectNor", (int)&v51, (int)&v50, v48); sub_8FB650(v46, v49, (int)"SelectClick"); sub_8FB650(v46, v49, (int)"SelectOver"); sub_8FE0F0(v51 - v11, v50 - v12, (int)v46, (int)v2, 0, 0, 0); v47 = 1; v45 = (signed int)(v2 + 388); v44 = 8; do { memset(&v53, 0, 0x80u); sprintf(&v53, "ServerNameNor_%.2d", v47); v46 = sub_8FB140(v49, (int)&v53, (int)&v51, (int)&v50, v43); memset(&v53, 0, 0x80u); sprintf(&v53, "ServerNameClick_%.2d", v47); sub_8FB650(v46, v49, (int)&v53); memset(&v53, 0, 0x80u); sprintf(&v53, "ServerNameOver_%.2d", v47); sub_8FB650(v46, v49, (int)&v53); v15 = sub_8FE0F0(v51 - v11, v50 - v12, (int)v46, (int)v2, ++v47, 0, 0); *(_DWORD *)v45 = v15; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 256))(v15, 0); v45 += 4; --v44; } while ( v44 ); v38 = "ServerConGood_"; v39 = "ServerConBusy_"; v40 = "ServerConNormal_"; v41 = "ServerConCheck_"; v42 = "ServerConClosed_"; v16 = 0; v45 = 105; do { v47 = 0; v44 = v16 + 1; do { sprintf(&v52, "%s%.2d", (&v38)[v47], v44); v17 = sub_8FB140(v49, (int)&v52, (int)&v51, (int)&v50, v48); v18 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v17, (int)v2, 0, 0); if ( v18 ) { *(_DWORD *)&v2[4 * (v47 + v45)] = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 256))(v18, 0); } ++v47; } while ( v47 < 5 ); v16 = v44; v45 += 5; } while ( v45 < 145 ); v46 = sub_8FB140(v49, (int)"BtnLeft_Nor", (int)&v51, (int)&v50, v48); sub_8FB650(v46, v49, (int)"BtnLeft_Click"); sub_8FB650(v46, v49, (int)"BtnLeft_Over"); sub_8FE0F0(v51 - v11, v50 - v12, (int)v46, (int)v2, 10, 0, 0); v46 = sub_8FB140(v49, (int)"BtnRight_Nor", (int)&v51, (int)&v50, v48); sub_8FB650(v46, v49, (int)"BtnRight_Click"); sub_8FB650(v46, v49, (int)"BtnRight_Over"); sub_8FE0F0(v51 - v11, v50 - v12, (int)v46, (int)v2, 11, 0, 0); v19 = sub_8FB140(v49, (int)"Num_01", (int)&v51, (int)&v50, v48); v20 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v19, (int)v2, 0, 0); *((_DWORD *)v2 + 88) = v20; (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 256))(v20, 1); v21 = sub_8FB140(v49, (int)"Num_02", (int)&v51, (int)&v50, v48); v22 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v21, (int)v2, 0, 0); *((_DWORD *)v2 + 89) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 256))(v22, 0); v23 = sub_8FB140(v49, (int)"Num_03", (int)&v51, (int)&v50, v48); v24 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v23, (int)v2, 0, 0); *((_DWORD *)v2 + 90) = v24; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 256))(v24, 0); v25 = sub_8FB140(v49, (int)"Num_04", (int)&v51, (int)&v50, v48); v26 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v25, (int)v2, 0, 0); *((_DWORD *)v2 + 91) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 256))(v26, 0); v27 = sub_8FB140(v49, (int)"Num_05", (int)&v51, (int)&v50, v48); v28 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v27, (int)v2, 0, 0); *((_DWORD *)v2 + 92) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 256))(v28, 0); v29 = sub_8FB140(v49, (int)"Num_06", (int)&v51, (int)&v50, v48); v30 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v29, (int)v2, 0, 0); *((_DWORD *)v2 + 93) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 256))(v30, 0); v31 = sub_8FB140(v49, (int)"Num_07", (int)&v51, (int)&v50, v48); v32 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v31, (int)v2, 0, 0); *((_DWORD *)v2 + 94) = v32; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 256))(v32, 0); v33 = sub_8FB140(v49, (int)"Num_08", (int)&v51, (int)&v50, v48); v34 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v33, (int)v2, 0, 0); *((_DWORD *)v2 + 95) = v34; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 256))(v34, 0); v35 = sub_8FB140(v49, (int)"Num_09", (int)&v51, (int)&v50, v48); v36 = sub_8F3EB0(v51 - v11, v50 - v12, (int)v35, (int)v2, 0, 0); *((_DWORD *)v2 + 96) = v36; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 256))(v36, 0); (*(void (__thiscall **)(char *, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.52999997, 0.60000002); if ( sub_48B9B0(v2) ) v2[605] = 1; v37 = (void (__thiscall ***)(_DWORD, signed int))v49; v54 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v37 ) (**v37)(v37, 1); result = 1; } else { v54 = -1; sub_410C00(&v49); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048C730) -------------------------------------------------------- char __thiscall sub_48C730(char *this, int a2) { char *v2; // esi char result; // al v2 = this; sub_487490(*((_DWORD ***)this + 74)); sub_48B940(v2); result = 0; *((_DWORD *)v2 + 149) = -1; v2[604] = 0; v2[606] = 0; return result; } //----- (0048C770) -------------------------------------------------------- FILE *__thiscall sub_48C770(char *this, unsigned int a2) { char *v2; // esi int v3; // edi signed int v4; // ebx FILE *result; // eax unsigned int v6; // eax int v7; // ebx int v8; // eax int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = (int)(this + 388); v9 = (int)(this + 388); v4 = 8; do { result = (FILE *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 532))(0); v3 += 4; --v4; } while ( v4 ); if ( a2 < 8 ) { v6 = 8 * *((_DWORD *)v2 + 86); if ( v6 + a2 >= dword_B7D1BC || (v7 = *((_DWORD *)v2 + 159), v7 == *((_DWORD *)v2 + 160)) ) { if ( v6 >= (*((_DWORD *)v2 + 160) - *((_DWORD *)v2 + 159)) >> 2 ) *((_DWORD *)v2 + 87) = *(unsigned __int8 *)(dword_B7D1C0 + 18 * **((_DWORD **)v2 + 159) + 16); else *((_DWORD *)v2 + 87) = *(unsigned __int8 *)(dword_B7D1C0 + 18 * *(_DWORD *)(*((_DWORD *)v2 + 159) + 32 * *((_DWORD *)v2 + 86)) + 16); result = (FILE *)(*(int (__stdcall **)(signed int))(**(_DWORD **)v9 + 532))(1); } else { v8 = *(_DWORD *)(v7 + 4 * (v6 + a2)); if ( v8 < dword_B7D1BC && v8 >= 0 ) *((_DWORD *)v2 + 87) = *(unsigned __int8 *)(dword_B7D1C0 + 18 * v8 + 16); result = (FILE *)(*(int (__stdcall **)(signed int))(**(_DWORD **)&v2[4 * a2 + 388] + 532))(1); if ( v2[606] ) { sub_487490(*((_DWORD ***)v2 + 74)); result = sub_48B940(v2); *((_DWORD *)v2 + 149) = -1; v2[604] = 0; v2[606] = 0; } } } return result; } // B7D1BC: using guessed type int dword_B7D1BC; // B7D1C0: using guessed type int dword_B7D1C0; //----- (0048C8C0) -------------------------------------------------------- void __stdcall sub_48C8C0(int a1) { int v1; // eax int v2; // eax int v3; // esi int v4; // eax int v5; // eax int v6; // esi int v7; // eax int v8; // eax int v9; // esi float v10; // [esp+4h] [ebp-8h] float v11; // [esp+8h] [ebp-4h] if ( a1 ) { v1 = *(_DWORD *)(a1 + 288); v2 = v1 ? *(_DWORD *)(v1 + 8) : 0; v3 = **(_DWORD **)(v2 + 12); if ( v3 ) { v10 = 0.0; v11 = 0.0; sub_868090(v3, 0, 0, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v3, 0, 1, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v3, 0, 2, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v3, 0, 3, 0, &v10); v4 = *(_DWORD *)(a1 + 288); v5 = v4 ? *(_DWORD *)(v4 + 8) : 0; v6 = *(_DWORD *)(*(_DWORD *)(v5 + 12) + 8); if ( v6 ) { v10 = 0.0; v11 = 0.0; sub_868090(v6, 0, 0, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v6, 0, 1, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v6, 0, 2, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v6, 0, 3, 0, &v10); v7 = *(_DWORD *)(a1 + 288); if ( v7 ) v8 = *(_DWORD *)(v7 + 8); else v8 = 0; v9 = *(_DWORD *)(*(_DWORD *)(v8 + 12) + 4); if ( v9 ) { v10 = 0.0; v11 = 0.0; sub_868090(v9, 0, 0, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v9, 0, 1, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v9, 0, 2, 0, &v10); v10 = 0.0; v11 = 0.0; sub_868090(v9, 0, 3, 0, &v10); } } } } } //----- (0048CA60) -------------------------------------------------------- char __thiscall sub_48CA60(volatile LONG **this, int a2) { volatile LONG **v2; // edi volatile LONG *v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // ebx volatile LONG **v11; // esi void (__thiscall ***v12)(_DWORD, signed int); // esi int v13; // [esp+18h] [ebp-18h] int v14; // [esp+1Ch] [ebp-14h] int v15; // [esp+20h] [ebp-10h] int v16; // [esp+2Ch] [ebp-4h] int v17; // [esp+38h] [ebp+8h] v2 = this; v15 = 0; v16 = 0; v3 = (volatile LONG *)sub_43D0D0(0x10u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( !v15 || InterlockedDecrement((volatile LONG *)(v15 + 4)) ) return 0; v5 = v15 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Account\\Exit.nif"); sub_8F66B0(v8, (int)&v15, v7); if ( !v15 ) return 0; v9 = sub_8FB140(v15, (int)"Frame", (int)&v13, (int)&v14, v3); if ( !sub_8F1440(v2, 0, 0, (int)v9, 0, a2, (int)"WorldSelectExitWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( !v15 || InterlockedDecrement((volatile LONG *)(v15 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = v13; v17 = v14; v11 = sub_8FB140(v15, (int)"CancelNor", (int)&v13, (int)&v14, v3); sub_8FB650(v11, v15, (int)"CancelClick"); sub_8FB650(v11, v15, (int)"CancelOver"); sub_8FE0F0(v13 - v10, v14 - v17, (int)v11, (int)v2, 0, 0, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.94999999, 0.059999999); v16 = -1; if ( v15 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048CC50) -------------------------------------------------------- char __thiscall sub_48CC50(int *this, int a2, int a3) { char result; // al if ( !a2 ) result = sub_487DB0(this[74]); return result; } //----- (0048CC70) -------------------------------------------------------- char __thiscall sub_48CC70(void *this, int a2) { int v2; // edi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // esi char v10; // ST1C_1 int v11; // ST20_4 int v12; // ST24_4 int v13; // ST28_4 const CHAR *v14; // ST10_4 int v15; // ST0C_4 int v16; // eax volatile LONG *v17; // esi char v18; // ST1C_1 int v19; // ST20_4 int v20; // ST24_4 int v21; // ST28_4 int v22; // ST0C_4 int v23; // eax volatile LONG *v24; // eax char v25; // ST18_1 int v26; // ST1C_4 int v27; // ST20_4 int v28; // ST24_4 const CHAR *v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi int v31[5]; // [esp+Ch] [ebp-2Ch] int v32; // [esp+20h] [ebp-18h] int v33; // [esp+24h] [ebp-14h] int v34; // [esp+28h] [ebp-10h] int v35; // [esp+34h] [ebp-4h] v2 = (int)this; v34 = 0; v35 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Account\\OptionSet.nif"); sub_8F66B0(v3, (int)&v34, 0); if ( !v34 ) return 0; v4 = sub_8FB140(v34, (int)"Panel01", (int)&v32, (int)&v33, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"OptionSet", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v34; v35 = -1; if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v34, (int)"Theme", (int)&v32, (int)&v33, v7); else v8 = sub_8FB140(v34, (int)"Theme", (int)&v32, (int)&v33, 0); sub_8F3EB0(v32, v33, (int)v8, v2, 0, 0); sub_456260(v31); LOBYTE(v35) = 1; sub_455FF0(v31, v2); sub_456000(v31, 0, 0); sub_456380(v31, v34); sub_456820(v31, (int)"Panel02", 0); v9 = sub_456B30(v31, 0, "Apply", 0, 3); v10 = dword_AA8C68; v11 = dword_AA8C6C; v12 = dword_AA8C70; v13 = dword_AA8C74; v14 = sub_40C190(-1611008794); v15 = (*(int (__thiscall **)(volatile LONG *))(*v9 + 148))(v9); v16 = (*(int (__thiscall **)(volatile LONG *))(*v9 + 144))(v9); sub_4561C0(v31, 0, 0, v16, v15, (int)v14, v9, 0, v10, v11, v12, v13, 5, 0, 0); sub_456B30(v31, 1, "Cls", 0, 3); v17 = sub_456B30(v31, 2, "Resolution", 0, 3); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v23 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); *(_DWORD *)(v2 + 412) = sub_4561C0(v31, 0, 0, v23, v22, (int)"-", v17, 0, v18, v19, v20, v21, 5, 0, 0); v24 = sub_456E70(v31, 3, "WinMode", 0, 2); *(_DWORD *)(v2 + 344) = v24; *((_BYTE *)v24 + 380) = byte_AB66E7 == 0; v25 = dword_AA8C68; v26 = dword_AA8C6C; v27 = dword_AA8C70; v28 = dword_AA8C74; v29 = sub_40C190(861157773); sub_456A50(v31, (int)"WinModeText", (int)v29, 0, v25, v26, v27, v28, 5, 0, 0, 0); LOBYTE(v35) = 0; sub_4562E0(v31); v35 = -1; if ( v34 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v34; if ( !InterlockedDecrement((volatile LONG *)(v34 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AB66E7: using guessed type char byte_AB66E7; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048CFA0) -------------------------------------------------------- char __thiscall sub_48CFA0(int this, int a2, int a3) { int v3; // eax bool v4; // zf LOBYTE(v3) = a2; switch ( a2 ) { case 0: *(_BYTE *)(this + 411) = 1; goto LABEL_5; case 1: LABEL_5: LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this); break; case 2: LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(this + 296), 21, 0, 0); break; case 3: *(_BYTE *)(*(_DWORD *)(this + 344) + 380) = *(_BYTE *)(*(_DWORD *)(this + 344) + 380) == 0; v3 = *(_DWORD *)(this + 344); v4 = *(_BYTE *)(v3 + 380) == 0; byte_ACDEF4 = 1; byte_AB66E7 = v4; break; default: return v3; } return v3; } // AB66E7: using guessed type char byte_AB66E7; // ACDEF4: using guessed type char byte_ACDEF4; //----- (0048D030) -------------------------------------------------------- int __thiscall sub_48D030(int this) { int v1; // ebx char v3; // [esp+Ch] [ebp-104h] v1 = this; qmemcpy((void *)(this + 348), &dword_AB66B8, 0x3Fu); sprintf(&v3, "%i x %i", *(_DWORD *)(v1 + 387), *(_DWORD *)(v1 + 391)); return (*(int (__stdcall **)(char *))(**(_DWORD **)(v1 + 412) + 472))(&v3); } // AB66B8: using guessed type int dword_AB66B8; // AB66F1: using guessed type float flt_AB66F1; // AB66F6: using guessed type char byte_AB66F6; //----- (0048D0B0) -------------------------------------------------------- LONG __thiscall sub_48D0B0(void *this) { _DWORD *v1; // esi v1 = this; *(_DWORD *)this = &WorldSelectWin::`vftable'; *((_DWORD *)this + 58) = &WorldSelectWin::`vftable'; *((_DWORD *)this + 148) = -1; *((_DWORD *)this + 150) = -1; *((_DWORD *)this + 149) = -1; *((_WORD *)this + 302) = 0; *((_BYTE *)this + 606) = 0; if ( *((_DWORD *)this + 159) ) operator delete(*((void **)this + 159)); v1[159] = 0; v1[160] = 0; v1[161] = 0; return sub_8F10F0(v1); } // 9BA408: using guessed type void *WorldSelectWin::`vftable'; // 9BA424: using guessed type void *WorldSelectWin::`vftable'; //----- (0048D120) -------------------------------------------------------- FILE *__thiscall sub_48D120(_DWORD *this) { _DWORD *v1; // ebx char *v2; // eax FILE *result; // eax FILE *v4; // esi int v5; // edi int v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] v1 = this; if ( !byte_ACAD5C ) sub_420410(); v2 = sub_7549E0("%s\\SOrder.sdf", byte_ACA520); result = fopen(v2, "rb"); v4 = result; v5 = 0; if ( result ) { v7 = 0; v6 = 0; fread(&v7, 4u, 1u, result); if ( v7 > 0 ) { do { if ( feof(v4) ) break; fread(&v6, 4u, 1u, v4); sub_5B3CF0(v1 + 159, &v6); ++v5; } while ( v5 < v7 ); } result = (FILE *)fclose(v4); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0048D1D0) -------------------------------------------------------- int *__thiscall sub_48D1D0(_DWORD *this) { int *result; // eax _DWORD *v2; // esi int v3; // edi int v4; // ebx unsigned int v5; // eax int v6; // edi int v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] result = (int *)this[159]; v2 = this + 159; v3 = dword_B7D1BC; v7 = dword_B7D1BC; if ( result == (int *)this[160] ) { v4 = 0; v8 = 0; if ( dword_B7D1BC >= 0 ) { do { v5 = v2[1]; if ( (unsigned int)&v8 >= v5 || *v2 > (unsigned int)&v8 ) { if ( v5 == v2[2] ) sub_5E2180((int)v2, 1); result = (int *)v2[1]; if ( result ) *result = v4; } else { v6 = ((signed int)&v8 - *v2) >> 2; if ( v5 == v2[2] ) sub_5E2180((int)v2, 1); result = (int *)v2[1]; if ( result ) *result = *(_DWORD *)(*v2 + 4 * v6); v3 = v7; } v2[1] += 4; v8 = ++v4; } while ( v4 <= v3 ); } } return result; } // B7D1BC: using guessed type int dword_B7D1BC; //----- (0048D270) -------------------------------------------------------- int __cdecl sub_48D270(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WorldSelectExitWin::`vftable'; *(_DWORD *)(v2 + 232) = &WorldSelectExitWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B9D34: using guessed type void *WorldSelectExitWin::`vftable'; // 9B9D54: using guessed type void *WorldSelectExitWin::`vftable'; //----- (0048D3B0) -------------------------------------------------------- int __cdecl sub_48D3B0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WorldSelectOptionWin::`vftable'; *(_DWORD *)(v2 + 232) = &WorldSelectOptionWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9B9F78: using guessed type void *WorldSelectOptionWin::`vftable'; // 9B9F94: using guessed type void *WorldSelectOptionWin::`vftable'; //----- (0048D4F0) -------------------------------------------------------- int __cdecl sub_48D4F0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &WorldSelectOptionSetWin::`vftable'; *(_DWORD *)(v2 + 232) = &WorldSelectOptionSetWin::`vftable'; sub_6BD450(v2 + 348); *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 412) = 0; *(_BYTE *)(v2 + 411) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BA1B8: using guessed type void *WorldSelectOptionSetWin::`vftable'; // 9BA1D4: using guessed type void *WorldSelectOptionSetWin::`vftable'; //----- (0048D650) -------------------------------------------------------- _DWORD *__thiscall sub_48D650(_DWORD *this) { _DWORD *v1; // esi const void *v2; // eax void *v3; // ebx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &WorldSelectWin::`vftable'; v1[58] = &WorldSelectWin::`vftable'; sub_8D0610((_BYTE *)v1 + 608); v1[159] = 0; v1[160] = 0; v1[161] = 0; *((float *)v1 + 147) = 0.0; v1[146] = 0; v1[145] = 0; v1[148] = -1; v1[150] = -1; v1[149] = -1; *((_WORD *)v1 + 302) = 0; *((_BYTE *)v1 + 606) = 0; sub_74E360((const void **)v1 + 159, (char *)0x1E); v2 = (const void *)v1[160]; v3 = (void *)v1[159]; if ( v3 != v2 ) { memcpy_0(v3, v2, 0); v1[160] = v3; } sub_48D120(v1); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BA408: using guessed type void *WorldSelectWin::`vftable'; // 9BA424: using guessed type void *WorldSelectWin::`vftable'; //----- (0048D750) -------------------------------------------------------- volatile LONG *__cdecl sub_48D750(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x298u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_48D650(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0048D880) -------------------------------------------------------- int __thiscall sub_48D880(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi signed int v3; // edi int v4; // esi signed int v5; // edi double v6; // st7 int v7; // ecx double v8; // st6 signed int v9; // esi float v10; // edi int v11; // edx int result; // eax int v13; // eax int v14; // esi int v15; // eax int v16; // eax int v17; // eax int v18; // edi int v19; // eax int v20; // eax int v21; // edi int v22; // esi int v23; // esi int v24; // esi float v25; // [esp+Ch] [ebp-A0h] float v26; // [esp+10h] [ebp-9Ch] float v27; // [esp+14h] [ebp-98h] float v28; // [esp+18h] [ebp-94h] float v29; // [esp+1Ch] [ebp-90h] float v30; // [esp+20h] [ebp-8Ch] float v31; // [esp+24h] [ebp-88h] float v32; // [esp+28h] [ebp-84h] float v33; // [esp+2Ch] [ebp-80h] float v34; // [esp+30h] [ebp-7Ch] float v35; // [esp+34h] [ebp-78h] float v36; // [esp+38h] [ebp-74h] float v37; // [esp+3Ch] [ebp-70h] float v38; // [esp+40h] [ebp-6Ch] float v39; // [esp+44h] [ebp-68h] float v40; // [esp+48h] [ebp-64h] double v41; // [esp+4Ch] [ebp-60h] float v42; // [esp+54h] [ebp-58h] float v43; // [esp+58h] [ebp-54h] float v44; // [esp+5Ch] [ebp-50h] float v45; // [esp+60h] [ebp-4Ch] float v46; // [esp+64h] [ebp-48h] float v47; // [esp+68h] [ebp-44h] float v48; // [esp+6Ch] [ebp-40h] float v49; // [esp+70h] [ebp-3Ch] int v50; // [esp+74h] [ebp-38h] float v51; // [esp+78h] [ebp-34h] float v52; // [esp+7Ch] [ebp-30h] float v53; // [esp+80h] [ebp-2Ch] float v54; // [esp+84h] [ebp-28h] int v55; // [esp+88h] [ebp-24h] float v56; // [esp+8Ch] [ebp-20h] float v57; // [esp+90h] [ebp-1Ch] int v58; // [esp+94h] [ebp-18h] float v59; // [esp+98h] [ebp-14h] float v60; // [esp+9Ch] [ebp-10h] float v61; // [esp+A0h] [ebp-Ch] float v62; // [esp+A4h] [ebp-8h] float v63; // [esp+A8h] [ebp-4h] v1 = this; v2 = (int)(this + 88); v3 = 9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0); v2 += 4; --v3; } while ( v3 ); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[v1[86] + 88] + 256))(1); v1[150] = -1; v4 = (int)(v1 + 97); v5 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 532))(0); v4 += 4; --v5; } while ( v5 ); if ( v1[159] == v1[160] ) sub_48D1D0(v1); v6 = (double)(unsigned int)v1[145]; v50 = 8 * v1[86]; v7 = v50; v61 = v6; v54 = 268.0 / v61; v61 = 2.0 / v61; v8 = v61; v53 = v61; v61 = (double)(unsigned int)v1[146]; v9 = 0; LODWORD(v10) = v1 + 97; v55 = 0; v58 = 4 * v50; v57 = 32.0 / v61; v61 = 2.0 / v61; v52 = v61; v56 = v61; LODWORD(v61) = v1 + 97; v51 = v8; while ( 1 ) { v11 = v1[159]; result = v1[160]; if ( v11 == result ) break; if ( v9 + v7 > (unsigned int)(((result - v11) >> 2) - 1) || (v13 = *(_DWORD *)(v58 + v11), v13 >= dword_B7D1BC) || v13 < 0 ) { sub_48C8C0(*(_DWORD *)LODWORD(v10)); } else { if ( v1[150] < v9 ) v1[150] = v9; v14 = *(_DWORD *)LODWORD(v10); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)LODWORD(v10) + 256))(*(_DWORD *)LODWORD(v10), 1); v15 = *(_DWORD *)(v58 + v1[159]) / 3; LODWORD(v60) = *(_DWORD *)(v58 + v1[159]) % 3; v62 = *(float *)&v15; v16 = *(_DWORD *)(v14 + 288); v59 = (v53 + v54) * (double)SLODWORD(v60) + v51; v41 = v52 + v57; v63 = v41 * ((double)SLODWORD(v62) * 3.0) + v56; if ( v16 ) v17 = *(_DWORD *)(v16 + 8); else v17 = 0; v18 = **(_DWORD **)(v17 + 12); v27 = v59; v28 = v63; sub_868090(v18, 0, 0, 0, &v27); v35 = v59; v62 = v63 + v57; v36 = v62; sub_868090(v18, 0, 1, 0, &v35); v60 = v59 + v54; v42 = v60; v43 = v62; sub_868090(v18, 0, 2, 0, &v42); v48 = v60; v49 = v63; sub_868090(v18, 0, 3, 0, &v48); v19 = *(_DWORD *)(v14 + 288); v63 = v63 + v41; if ( v19 ) v20 = *(_DWORD *)(v19 + 8); else v20 = 0; v21 = *(_DWORD *)(*(_DWORD *)(v20 + 12) + 8); v39 = v59; v40 = v63; sub_868090(v21, 0, 0, 0, &v39); v31 = v59; v62 = v63 + v57; v32 = v62; sub_868090(v21, 0, 1, 0, &v31); v46 = v60; v47 = v62; sub_868090(v21, 0, 2, 0, &v46); v44 = v60; v45 = v63; sub_868090(v21, 0, 3, 0, &v44); v22 = *(_DWORD *)(v14 + 288); v63 = v63 + v41; if ( v22 ) v23 = *(_DWORD *)(v22 + 8); else v23 = 0; v24 = *(_DWORD *)(*(_DWORD *)(v23 + 12) + 4); v37 = v59; v38 = v63; sub_868090(v24, 0, 0, 0, &v37); v33 = v59; v62 = v63 + v57; v34 = v62; sub_868090(v24, 0, 1, 0, &v33); v29 = v60; v30 = v62; sub_868090(v24, 0, 2, 0, &v29); v25 = v60; v26 = v63; sub_868090(v24, 0, 3, 0, &v25); v10 = v61; v9 = v55; } v58 += 4; ++v9; LODWORD(v10) += 4; v55 = v9; v61 = v10; if ( v9 >= 8 ) return sub_48B830(v1); v7 = v50; } return result; } // B7D1BC: using guessed type int dword_B7D1BC; //----- (0048DC90) -------------------------------------------------------- int __thiscall sub_48DC90(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // ebx int v5; // edi int result; // eax int v7; // [esp+14h] [ebp+8h] v2 = this; this[163] = sub_48D270(a2); v2[164] = sub_48D3B0(a2); v3 = sub_48D4F0(a2); v4 = v2[164]; v2[165] = v3; v5 = *(_DWORD *)v3; v7 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 144))(v3, (signed int)*(float *)(v4 + 92)); result = (*(int (__thiscall **)(_DWORD, int))(v5 + 308))(v2[165], (signed int)*(float *)(v4 + 88) - v7); *(_DWORD *)(v2[164] + 344) = v2[165]; return result; } //----- (0048DD20) -------------------------------------------------------- FILE *__thiscall sub_48DD20(_BYTE *this) { _BYTE *v1; // esi bool v2; // zf FILE *result; // eax v1 = this; sub_8F28C0(this); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 163)); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 164)); sub_48D1D0(v1); v2 = v1[605] == 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 87) = -1; if ( v2 ) { *((_DWORD *)v1 + 148) = -1; *((_DWORD *)v1 + 150) = -1; *((_DWORD *)v1 + 149) = -1; v1[604] = 0; v1[606] = 0; } result = (FILE *)sub_48D880(v1); if ( v1[605] ) result = sub_48C770(v1, *((_DWORD *)v1 + 148)); return result; } //----- (0048DDB0) -------------------------------------------------------- FILE *__thiscall sub_48DDB0(char *this) { char *v1; // esi int v2; // eax FILE *result; // eax v1 = this; v2 = *((_DWORD *)this + 86); if ( 8 * v2 + 8 < (unsigned int)dword_B7D1BC ) *((_DWORD *)this + 86) = v2 + 1; sub_48D880(this); result = (FILE *)*((_DWORD *)v1 + 148); if ( result != (FILE *)-1 ) result = sub_48C770(v1, *((_DWORD *)v1 + 148)); return result; } // B7D1BC: using guessed type int dword_B7D1BC; //----- (0048DDF0) -------------------------------------------------------- FILE *__thiscall sub_48DDF0(char *this) { char *v1; // esi int v2; // eax FILE *result; // eax v1 = this; v2 = *((_DWORD *)this + 86); if ( v2 ) *((_DWORD *)this + 86) = v2 - 1; sub_48D880(this); result = (FILE *)*((_DWORD *)v1 + 148); if ( result != (FILE *)-1 ) result = sub_48C770(v1, *((_DWORD *)v1 + 148)); return result; } //----- (0048DE20) -------------------------------------------------------- char __thiscall sub_48DE20(int this, float a2) { int v2; // esi int v3; // eax char v4; // cl char v5; // bl unsigned int v6; // eax unsigned int v7; // eax v2 = this; if ( !(*(_BYTE *)(this + 28) & 1) && sub_8D0630((float *)(this + 608), a2) ) { *(_BYTE *)(v2 + 604) = 0; *(_DWORD *)(v2 + 596) = -1; } LOBYTE(v3) = dword_ACDC84; v4 = *(_BYTE *)(dword_ACDC84 + 48); if ( !(v4 & 2) && *(_BYTE *)(dword_ACDC84 + 80) & 2 || (v5 = *(_BYTE *)(dword_ACDC84 + 42), !(v5 & 1)) && *(_BYTE *)(dword_ACDC84 + 74) & 1 ) { v3 = *(_DWORD *)(v2 + 592); if ( v3 == -1 ) goto LABEL_31; if ( v3 ) { v7 = v3 - 1; *(_DWORD *)(v2 + 592) = v7; LOBYTE(v3) = (unsigned int)sub_48C770((char *)v2, v7); } } else { if ( (v4 & 0x40 || !(*(_BYTE *)(dword_ACDC84 + 80) & 0x40)) && (*(_BYTE *)(dword_ACDC84 + 43) & 1 || !(*(_BYTE *)(dword_ACDC84 + 75) & 1)) ) { if ( !(v4 & 8) && *(_BYTE *)(dword_ACDC84 + 80) & 8 || !(v5 & 8) && *(_BYTE *)(dword_ACDC84 + 74) & 8 ) { sub_48DDF0((char *)v2); LOBYTE(v3) = (unsigned int)sub_48C770((char *)v2, *(_DWORD *)(v2 + 592)); } else if ( !(v4 & 0x10) && *(_BYTE *)(dword_ACDC84 + 80) & 0x10 || !(v5 & 0x20) && *(_BYTE *)(dword_ACDC84 + 74) & 0x20 ) { sub_48DDB0((char *)v2); LOBYTE(v3) = (unsigned int)sub_48C770((char *)v2, *(_DWORD *)(v2 + 592)); } else if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 || !(*(_BYTE *)(dword_ACDC84 + 65) & 2) ) { if ( !(*(_BYTE *)(dword_ACDC84 + 36) & 0x10) && *(_BYTE *)(dword_ACDC84 + 68) & 0x10 || !(*(_BYTE *)(dword_ACDC84 + 46) & 4) && *(_BYTE *)(dword_ACDC84 + 78) & 4 ) { LOBYTE(v3) = sub_48C730((char *)v2, 1); } } else { sub_48B5F0(v2); LOBYTE(v3) = sub_487DB0(*(_DWORD *)(v2 + 296)); } return v3; } v3 = *(_DWORD *)(v2 + 592); if ( v3 == -1 ) { LABEL_31: *(_DWORD *)(v2 + 592) = 0; LOBYTE(v3) = (unsigned int)sub_48C770((char *)v2, 0); return v3; } if ( v3 != 7 && v3 != *(_DWORD *)(v2 + 600) ) { v6 = v3 + 1; *(_DWORD *)(v2 + 592) = v6; LOBYTE(v3) = (unsigned int)sub_48C770((char *)v2, v6); } } return v3; } // ACDC84: using guessed type int dword_ACDC84; //----- (0048DFC0) -------------------------------------------------------- void __thiscall sub_48DFC0(int this, int a2, int a3) { int v3; // esi char v4; // al v3 = this; switch ( a2 ) { case 0: sub_48C730((char *)this, 1); break; case 1: sub_487DB0(*(_DWORD *)(this + 296)); break; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: v4 = *(_BYTE *)(this + 604); if ( !v4 ) goto LABEL_14; if ( *(_DWORD *)(this + 596) == a2 ) *(_BYTE *)(this + 606) = 1; if ( !v4 ) { LABEL_14: sub_8D06A0((float *)(this + 608), flt_ACCFCC); *(float *)(v3 + 628) = 0.5; *(_BYTE *)(v3 + 604) = 1; *(_DWORD *)(v3 + 596) = a2; } sub_48C770((char *)v3, a2 - 2); *(_DWORD *)(v3 + 592) = a2 - 2; break; case 10: sub_48DDF0((char *)this); break; case 11: sub_48DDB0((char *)this); break; default: return; } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0048E0A0) -------------------------------------------------------- char __thiscall sub_48E0A0(_BYTE *this, int a2) { if ( !a2 ) return 0; if ( (this[(a2 >> 3) + 33] >> (a2 & 7)) & 1 || !((this[(a2 >> 3) + 65] >> (a2 & 7)) & 1) ) return 0; return 1; } //----- (0048E0E0) -------------------------------------------------------- void *__thiscall sub_48E0E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WorldSelectExitWin::`vftable'; *((_DWORD *)this + 58) = &WorldSelectExitWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B9D34: using guessed type void *WorldSelectExitWin::`vftable'; // 9B9D54: using guessed type void *WorldSelectExitWin::`vftable'; //----- (0048E120) -------------------------------------------------------- void *__thiscall sub_48E120(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WorldSelectOptionWin::`vftable'; *((_DWORD *)this + 58) = &WorldSelectOptionWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9B9F78: using guessed type void *WorldSelectOptionWin::`vftable'; // 9B9F94: using guessed type void *WorldSelectOptionWin::`vftable'; //----- (0048E160) -------------------------------------------------------- void *__thiscall sub_48E160(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WorldSelectOptionSetWin::`vftable'; *((_DWORD *)this + 58) = &WorldSelectOptionSetWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BA1B8: using guessed type void *WorldSelectOptionSetWin::`vftable'; // 9BA1D4: using guessed type void *WorldSelectOptionSetWin::`vftable'; //----- (0048E1A0) -------------------------------------------------------- void *__thiscall sub_48E1A0(void *this, char a2) { void *v2; // esi v2 = this; sub_48D0B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0048E1D0) -------------------------------------------------------- int __stdcall sub_48E1D0(int a1, _WORD *a2) { int result; // eax result = a1; if ( *a2 == 1667 ) byte_B68508 = 1; return result; } // B68508: using guessed type char byte_B68508; //----- (0048E1F0) -------------------------------------------------------- int __stdcall sub_48E1F0(int a1, _WORD *a2) { byte_AC9CD6 = 0; dword_AC9CD8 = 0; byte_AC9CD5 = 1; if ( *a2 == 3504 ) { byte_AC9CD6 = 1; dword_AC9CD8 = (unsigned __int16)a2[1]; } return a1; } // AC9CD5: using guessed type char byte_AC9CD5; // AC9CD6: using guessed type char byte_AC9CD6; // AC9CD8: using guessed type int dword_AC9CD8; //----- (0048E270) -------------------------------------------------------- int __stdcall sub_48E270(int a1, unsigned __int16 *a2) { sub_6BC280(a2); byte_AC9CD3 = 1; byte_AC9CCF = 1; return a1; } // AC9CCF: using guessed type char byte_AC9CCF; // AC9CD3: using guessed type char byte_AC9CD3; //----- (0048E2A0) -------------------------------------------------------- int __stdcall sub_48E2A0(int a1, _WORD *a2) { int result; // eax sub_6BC8C0(a2); result = a1; byte_AC9CCE = 1; return result; } // AC9CCE: using guessed type char byte_AC9CCE; //----- (0048E2C0) -------------------------------------------------------- int __stdcall sub_48E2C0(int a1, _WORD *a2) { signed int v2; // esi char *v3; // edi byte_AC9CBE = 1; sub_632A30(&dword_AD46F0); sub_631EE0(&off_AAEBCC); sub_631F90(&off_AAEBCC, (int)&dword_AD46F0); byte_AC9CD4 = 0; byte_ACE3B4 = 1; v2 = 0; if ( *a2 > 0u ) { v3 = (char *)(a2 + 1); do { sub_633240(&dword_AD46F0, v3); ++v2; v3 += 7; } while ( v2 < (unsigned __int16)*a2 ); } return a1; } // AAEBCC: using guessed type int (__stdcall *(*off_AAEBCC)[2])(int); // AC9CBE: using guessed type char byte_AC9CBE; // AC9CD4: using guessed type char byte_AC9CD4; // ACE3B4: using guessed type char byte_ACE3B4; // AD46F0: using guessed type int dword_AD46F0; //----- (0048E330) -------------------------------------------------------- void __thiscall sub_48E330(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // eax int v4; // ecx __int16 v5; // [esp+4h] [ebp-Ch] __int16 v6; // [esp+8h] [ebp-8h] char v7; // [esp+Fh] [ebp-1h] v1 = this; if ( this[67] != -1 ) { v2 = this[74]; if ( v2 ) { v6 = 14346; sub_906000(v2, &v6, 2u); v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4BE160(v3); v5 = 5127; sub_905F90(v1[74], &v5, 2u); v4 = v1[74]; v7 = *((_BYTE *)v1 + 268); sub_906000(v4, &v7, 1u); } } } //----- (0048E3C0) -------------------------------------------------------- void __thiscall sub_48E3C0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char v3; // al int v4; // ecx __int16 v5; // [esp+4h] [ebp-8h] char v6; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[74]; if ( v2 ) { v5 = 4097; sub_905F90(v2, &v5, 2u); v3 = sub_680660(byte_AD9238); v4 = v1[74]; v6 = v3; sub_906000(v4, &v6, 1u); } } //----- (0048E410) -------------------------------------------------------- int __stdcall sub_48E410(int a1, int a2) { int v2; // edx int v3; // eax v2 = *(unsigned __int16 *)(a2 + 16); dword_B7D178 = *(_DWORD *)a2; dword_B7D17C = *(_DWORD *)(a2 + 4); dword_B7D180 = *(_DWORD *)(a2 + 8); v3 = *(_DWORD *)(a2 + 12); dword_B7D188 = v2; dword_B7D184 = v3; sub_8EEFC0(dword_ACDD58, 0); return a1; } // ACDD58: using guessed type int dword_ACDD58; // B7D178: using guessed type int dword_B7D178; // B7D17C: using guessed type int dword_B7D17C; // B7D180: using guessed type int dword_B7D180; // B7D184: using guessed type int dword_B7D184; //----- (0048E460) -------------------------------------------------------- char __stdcall sub_48E460(_BYTE *a1) { void *v2; // [esp+Ch] [ebp-1Ch] int v3; // [esp+10h] [ebp-18h] int v4; // [esp+14h] [ebp-14h] int v5; // [esp+18h] [ebp-10h] int v6; // [esp+24h] [ebp-4h] byte_AC9CBE = 1; sub_632A30(&dword_AD46F0); sub_631EE0(&off_AAEBCC); sub_631F90(&off_AAEBCC, (int)&dword_AD46F0); byte_AC9CD4 = 0; byte_ACE3B4 = 0; if ( *a1 ) { byte_ACE3B4 = 1; v2 = operator new[](0x400u); v3 = 1024; v4 = 0; v5 = 0; v6 = 0; sub_631E60(&v2, a1 + 1, 0x400u); if ( sub_632790(&v2) ) { sub_632A80((char *)&dword_AD46F0); operator delete[](v2); return 1; } byte_ACE3B4 = 0; operator delete[](v2); } else { byte_ACE3B4 = 0; if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 5 ) byte_AC9CD4 = 1; } return 0; } // AAEBCC: using guessed type int (__stdcall *(*off_AAEBCC)[2])(int); // AC9CBE: using guessed type char byte_AC9CBE; // AC9CD4: using guessed type char byte_AC9CD4; // ACE3B4: using guessed type char byte_ACE3B4; // AD46F0: using guessed type int dword_AD46F0; //----- (0048E590) -------------------------------------------------------- char __stdcall sub_48E590(_BYTE *a1) { char result; // al int v2; // ecx __int16 v3; // [esp+4h] [ebp-4h] result = 1; byte_AC9CBF = 1; if ( *a1 ) { v2 = *(_DWORD *)(a1 + 1); v3 = *(_WORD *)(a1 + 5); if ( (_WORD)v2 == (_WORD)dword_B92030 && BYTE2(v2) == BYTE2(dword_B92030) && HIBYTE(v2) == HIBYTE(dword_B92030) && (_BYTE)v3 == (_BYTE)dword_B92034 ) { qmemcpy(&dword_B92030, a1 + 1, 0x17u); dword_AD0198 = (unsigned int)dword_B92034 >> 24; byte_AC9CD1 = 1; } else { byte_AC9CD1 = 0; result = 0; } } else { byte_AC9CD1 = 0; result = 0; } return result; } // AC9CBF: using guessed type char byte_AC9CBF; // AC9CD1: using guessed type char byte_AC9CD1; // AD0198: using guessed type int dword_AD0198; // B92030: using guessed type int dword_B92030; // B92034: using guessed type int dword_B92034; //----- (0048E640) -------------------------------------------------------- char __stdcall sub_48E640(int a1) { char result; // al int v2; // ecx result = 1; byte_AC9CCC = 1; if ( *(_BYTE *)a1 ) { v2 = *(_DWORD *)(a1 + 1); if ( (_WORD)v2 == (_WORD)dword_AB6718 && BYTE2(v2) == BYTE2(dword_AB6718) && HIBYTE(v2) == HIBYTE(dword_AB6718) && (unsigned __int8)*(_WORD *)(a1 + 5) == (_BYTE)word_AB671C ) { qmemcpy(&dword_AB6718, (const void *)(a1 + 1), 0xFAu); byte_AC9CD2 = 1; } else { byte_AC9CD2 = 0; result = 0; } } else { byte_AC9CD2 = 0; result = 0; } return result; } // AB6718: using guessed type int dword_AB6718; // AB671C: using guessed type __int16 word_AB671C; // AC9CCC: using guessed type char byte_AC9CCC; // AC9CD2: using guessed type char byte_AC9CD2; //----- (0048E6E0) -------------------------------------------------------- char __stdcall sub_48E6E0(_BYTE *a1) { char result; // al int v2; // eax __int16 v3; // [esp+8h] [ebp-4h] sub_6BC4D0(); if ( byte_AC9CCE == 1 ) return 1; byte_AC9CCD = 1; if ( *a1 ) { v2 = *(_DWORD *)(a1 + 1); v3 = *(_WORD *)(a1 + 5); if ( (_WORD)v2 == (_WORD)dword_AB6818 && BYTE2(v2) == BYTE2(dword_AB6818) && HIBYTE(v2) == HIBYTE(dword_AB6818) && (_BYTE)v3 == (_BYTE)word_AB681C ) { qmemcpy(&dword_AB6818, a1 + 1, 0xF4u); byte_AC9CD0 = 1; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { sub_4B5B10(); byte_AC9CD3 = 1; } result = 1; } else { byte_AC9CD0 = 0; result = 0; } } else { byte_AC9CD0 = 0; result = 0; } return result; } // AB6818: using guessed type int dword_AB6818; // AB681C: using guessed type __int16 word_AB681C; // AC9CCD: using guessed type char byte_AC9CCD; // AC9CCE: using guessed type char byte_AC9CCE; // AC9CD0: using guessed type char byte_AC9CD0; // AC9CD3: using guessed type char byte_AC9CD3; //----- (0048E7C0) -------------------------------------------------------- char __stdcall sub_48E7C0(int a1) { int v1; // eax __int16 v3; // [esp+4h] [ebp-4h] byte_AC9CCF = 1; if ( !*(_BYTE *)a1 ) return 0; v1 = *(_DWORD *)(a1 + 1); v3 = *(_WORD *)(a1 + 5); if ( (_WORD)v1 != word_B91FF8 || BYTE2(v1) != byte_B91FFA || HIBYTE(v1) != byte_B91FFB || (_BYTE)v3 != (_BYTE)dword_B91FFC ) { return 0; } qmemcpy(&word_B91FF8, (const void *)(a1 + 1), 0x37u); byte_AC9CD3 = 1; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_498220(); return 1; } // AC9CCF: using guessed type char byte_AC9CCF; // AC9CD3: using guessed type char byte_AC9CD3; // B91FF8: using guessed type __int16 word_B91FF8; // B91FFA: using guessed type char byte_B91FFA; // B91FFB: using guessed type char byte_B91FFB; // B91FFC: using guessed type int dword_B91FFC; //----- (0048E910) -------------------------------------------------------- int __thiscall sub_48E910(void *this, int a2, _WORD *a3) { void *v3; // ebx _DWORD *v4; // eax int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx int v12; // eax int v14; // [esp+8h] [ebp-20h] int v15; // [esp+Ch] [ebp-1Ch] int v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] int v20; // [esp+20h] [ebp-8h] int v21; // [esp+24h] [ebp-4h] v3 = this; if ( *a3 == 7768 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( v4 ) { qmemcpy(&v14, a3 + 1, 0x20u); v5 = v14; v4[28] = v15; v6 = v17; v4[27] = v5; v7 = v16; v4[30] = v6; v8 = v19; v4[29] = v7; v9 = v18; v4[32] = v8; v10 = v21; v4[31] = v9; v11 = v20; v4[34] = v10; v4[33] = v11; sub_415B60(v3); v12 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v12 ) { *(_BYTE *)(v12 + 2332) = 1; return a2; } } } else { sub_415B60(this); } return a2; } // ACDD50: using guessed type int dword_ACDD50; //----- (0048E9D0) -------------------------------------------------------- int __stdcall sub_48E9D0(int a1, int a2) { _DWORD *v2; // ecx _DWORD *v3; // eax _DWORD *v4; // eax float *v5; // eax float *v6; // eax v2 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v3 = operator new(0x14u); if ( v3 ) v4 = sub_439430(v3); else v4 = 0; v2 = v4; dword_ACB2E4 = (int)v4; } sub_439620(v2, 0); v5 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v6 = (float *)operator new(0xB4u); if ( v6 ) v5 = sub_4546A0(v6); else v5 = 0; dword_ACCFE0 = (int)v5; } *((_BYTE *)v5 + 4) = 1; return a1; } // ACB2E4: using guessed type int dword_ACB2E4; // ACCFE0: using guessed type int dword_ACCFE0; //----- (0048EA90) -------------------------------------------------------- char __thiscall sub_48EA90(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[74]; v6 = 4369; sub_905F90(v3, &v6, 2u); v4 = v2[74]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (0048EAE0) -------------------------------------------------------- int __thiscall sub_48EAE0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi char *v4; // eax int v5; // ecx v3 = this; if ( *a3 == 199 ) v4 = (char *)sub_40C190(-2038724912); else v4 = (char *)sub_40C190(1076860256); sub_462C30(1, v4); v5 = v3[9]; v3[67] = -1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v5 + 252))(1); return a2; } //----- (0048EB40) -------------------------------------------------------- int __thiscall sub_48EB40(_DWORD **this, int a2, int a3) { char *v3; // edi _DWORD **v4; // esi void (__thiscall ***v5)(_DWORD, signed int); // ebx _DWORD *v6; // ecx char v7; // al v3 = (char *)a3; v4 = this; sub_6806D0(byte_AD9238, *(_BYTE *)a3); sub_681610(byte_AD9238, *v3); (*(void (__stdcall **)(int *, _DWORD))(*v4[(unsigned __int8)*v3 + 55] + 120))(&a3, v4[(unsigned __int8)*v3 + 61][175]); if ( a3 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } nullsub_23(v4[(unsigned __int8)*v3 + 61]); v4[(unsigned __int8)*v3 + 61] = 0; v6 = v4[9]; v4[67] = (_DWORD *)-1; (*(void (__stdcall **)(signed int))(*v6 + 252))(1); v7 = 0; if ( v4[61] ) v7 = 1; if ( v4[62] ) v7 = 1; if ( v4[63] ) v7 = 1; if ( v4[64] ) v7 = 1; if ( v4[65] ) v7 = 1; if ( !v4[66] && !v7 ) sub_4917D0((_DWORD **)v4[9]); if ( (*(unsigned __int8 (**)(void))(*v4[76] + 260))() == 1 ) sub_8F86A0(&unk_BA6B10, v4[76]); return a2; } // 664490: using guessed type _DWORD __stdcall nullsub_23(_DWORD); //----- (0048EC70) -------------------------------------------------------- int __thiscall sub_48EC70(void *this, int a2, unsigned __int16 *a3) { signed int v3; // eax int v4; // edi const CHAR *v5; // eax char *v6; // esi volatile LONG *v7; // eax char v9; // [esp+8h] [ebp-18h] int v10; // [esp+10h] [ebp-10h] v3 = *a3; v4 = (int)this; if ( v3 > 1410 ) { switch ( v3 ) { case 1411: v5 = sub_40C190(916022610); break; case 1412: v5 = sub_40C190(1016253352); break; case 1413: v5 = sub_40C190(547208352); break; case 1414: v5 = sub_40C190(1033203029); break; case 1415: v5 = sub_40C190(1134324063); break; case 1416: v5 = sub_40C190(731674969); break; case 1417: v5 = sub_40C190(848194976); break; case 1418: v5 = sub_40C190(1083799451); break; case 1419: v5 = sub_40C190(697658719); break; case 1420: v5 = sub_40C190(680879780); break; case 1421: v5 = sub_40C190(-297174961); break; case 1422: v5 = sub_40C190(546793820); break; case 1423: v5 = sub_40C190(849373601); break; case 1424: v5 = sub_40C190(91254085); break; case 1425: v5 = sub_40C190(-409573026); break; case 1426: v5 = sub_40C190(2129243814); break; case 1427: v5 = sub_40C190(932542547); break; case 1428: v5 = sub_40C190(965374299); break; case 1429: v5 = sub_40C190(-1303385310); break; default: goto LABEL_8; } } else if ( v3 == 1410 ) { v5 = sub_40C190(-527534261); } else { switch ( v3 ) { case 321: v5 = sub_40C190(239413302); goto LABEL_9; case 322: case 323: v5 = sub_40C190(844857999); goto LABEL_9; case 324: v5 = sub_40C190(726568865); goto LABEL_9; case 328: sub_40A910(1905624285); break; default: break; } LABEL_8: v5 = sub_40C190(-2139391874); } LABEL_9: v6 = (char *)v5; if ( v5 ) { if ( *(_DWORD *)(v4 + 292) ) sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v4 + 292)); v7 = sub_462C30(1, v6); v10 = 14; sub_461760(v7, v4, &v9, 0); } return a2; } //----- (0048EE70) -------------------------------------------------------- void __thiscall sub_48EE70(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx int v8; // ecx __int16 v9; // [esp+8h] [ebp-20h] char v10; // [esp+Ch] [ebp-1Ch] int v11; // [esp+Dh] [ebp-1Bh] int v12; // [esp+11h] [ebp-17h] int v13; // [esp+15h] [ebp-13h] int v14; // [esp+19h] [ebp-Fh] int v15; // [esp+1Dh] [ebp-Bh] v6 = this; v7 = this[74]; if ( v7 ) { v9 = 5135; sub_905F90(v7, &v9, 2u); v15 = 0; v14 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = sub_680660(byte_AD9238); v12 = a3; v13 = a4; v11 = a2; v15 = a6; v8 = v6[74]; v14 = a5; sub_906000(v8, &v10, 0x15u); } } //----- (0048EF10) -------------------------------------------------------- int __thiscall sub_48EF10(_DWORD *this, int a2, int a3) { __int16 v3; // ax _DWORD *v4; // ebx int v5; // edi int v6; // edx int v7; // eax int v8; // edx _DWORD *v9; // eax int v10; // esi _DWORD *v11; // ebx char *v12; // eax char v14[4]; // [esp+Ch] [ebp-84h] int v15; // [esp+10h] [ebp-80h] int v16; // [esp+14h] [ebp-7Ch] int v17; // [esp+18h] [ebp-78h] int v18; // [esp+1Ch] [ebp-74h] char v19; // [esp+20h] [ebp-70h] v3 = *(_WORD *)(a3 + 21); v4 = this; if ( v3 == 208 ) { v5 = sub_680580(byte_AD9238, *(_BYTE *)a3); if ( v5 ) { v6 = *(_DWORD *)(a3 + 5); *(_DWORD *)v14 = *(_DWORD *)(a3 + 1); v16 = *(_DWORD *)(a3 + 9); v7 = *(_DWORD *)(a3 + 17); v15 = v6; v8 = *(_DWORD *)(a3 + 13); v18 = v7; v9 = (_DWORD *)(v5 + 4); v19 = 0; v17 = v8; v9[4] = 0; v9[3] = 0; v9[2] = 0; v9[1] = 0; *v9 = 0; strncpy((char *)(v5 + 4), v14, 0x14u); v10 = v4[9]; if ( v10 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v10 + 352) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v10 + 356) + 240))(1); sub_4915C0((_DWORD *)v4[9], v5); } v11 = (_DWORD *)v4[76]; if ( v11 ) sub_8F86A0(&unk_BA6B10, v11); } } else if ( v3 == 209 ) { v12 = (char *)sub_40C190(815092362); sub_462CA0(1, v12); } return a2; } //----- (0048F020) -------------------------------------------------------- void __thiscall sub_48F020(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx int v8; // ecx __int16 v9; // [esp+8h] [ebp-20h] char v10; // [esp+Ch] [ebp-1Ch] int v11; // [esp+Dh] [ebp-1Bh] int v12; // [esp+11h] [ebp-17h] int v13; // [esp+15h] [ebp-13h] int v14; // [esp+19h] [ebp-Fh] int v15; // [esp+1Dh] [ebp-Bh] v6 = this; v7 = this[74]; if ( v7 ) { v9 = -19447; sub_905F90(v7, &v9, 2u); v15 = 0; v14 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = sub_680660(byte_AD9238); v12 = a3; v13 = a4; v11 = a2; v15 = a6; v8 = v6[74]; v14 = a5; sub_906000(v8, &v10, 0x15u); } } //----- (0048F0C0) -------------------------------------------------------- int __thiscall sub_48F0C0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // edi int v4; // ST0C_4 char *v5; // eax char *v6; // eax char *v7; // eax int v8; // eax int v9; // edx _DWORD *v10; // ST04_4 _DWORD *v11; // ecx int v12; // esi _DWORD *v14; // [esp+Ch] [ebp-20h] char v15[4]; // [esp+10h] [ebp-1Ch] int v16; // [esp+14h] [ebp-18h] int v17; // [esp+18h] [ebp-14h] int v18; // [esp+1Ch] [ebp-10h] int v19; // [esp+20h] [ebp-Ch] char v20; // [esp+24h] [ebp-8h] v14 = this; v3 = sub_680580(byte_AD9238, *((_BYTE *)a3 + 2)); if ( v3 ) { switch ( *a3 ) { case 0x20C0u: v8 = *(_DWORD *)((char *)a3 + 11); v9 = *(_DWORD *)((char *)a3 + 7); *(_DWORD *)v15 = *(_DWORD *)((char *)a3 + 3); v18 = *(_DWORD *)((char *)a3 + 15); v17 = v8; v16 = v9; v10 = (_DWORD *)(v3 + 4); v19 = *(_DWORD *)((char *)a3 + 19); v20 = 0; v10[4] = 0; v10[3] = 0; v10[2] = 0; v10[1] = 0; *v10 = 0; strncpy((char *)(v3 + 4), v15, 0x14u); *(_WORD *)(v3 + 119) = 0; v11 = (_DWORD *)v14[9]; if ( v11 ) sub_4915C0(v11, v3); v12 = v14[9]; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v12 + 352) + 240))(1); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v12 + 356) + 240))(*(_DWORD *)(v12 + 356), 1); v7 = (char *)sub_40A910(-689566961); break; case 0x20C7u: v7 = (char *)sub_40A910(170205213); break; case 0x20D1u: v7 = (char *)sub_40C190(-1447043387); break; default: v4 = *a3; v5 = (char *)sub_40A910(-1478966544); v6 = sub_7549E0(v5, v4); sub_462C30(1, v6); LABEL_12: sub_8F86A0(&unk_BA6B10, (_DWORD *)v14[76]); return a2; } sub_462C30(1, v7); goto LABEL_12; } return a2; } //----- (0048F210) -------------------------------------------------------- int __thiscall sub_48F210(void *this, int a2, int a3) { int v3; // esi char *v4; // eax volatile LONG *v5; // eax char v7; // [esp+4h] [ebp-2Ch] int v8; // [esp+Ch] [ebp-24h] int v9; // [esp+10h] [ebp-20h] char v10; // [esp+18h] [ebp-18h] int v11; // [esp+20h] [ebp-10h] int v12; // [esp+24h] [ebp-Ch] v3 = (int)this; v4 = (char *)sub_4090F0(508134292); v5 = sub_462C30(2, v4); v8 = 20; v11 = 20; v9 = 0; v12 = 1; sub_461760(v5, v3, &v7, &v10); return a2; } //----- (0048F280) -------------------------------------------------------- int __thiscall sub_48F280(_DWORD *this, int a2, signed int a3, int a4, unsigned __int16 *a5) { int result; // eax result = 0; switch ( a2 ) { case 3: if ( a3 == 23 ) { result = sub_48E1D0(a4, a5); } else if ( a3 == 52 ) { result = sub_48E910(this, a4, a5); } break; case 4: if ( a3 > 272 ) { if ( a3 == 285 ) result = sub_48E9D0(a4, (int)a5); } else { switch ( a3 ) { case 272: result = sub_48F210(this, a4, (int)a5); break; case 2: result = sub_48EC70(this, a4, a5); break; case 3: result = sub_48E410(a4, (int)a5); break; } } break; case 5: switch ( a3 ) { case 10: result = sub_48EAE0(this, a4, a5); break; case 12: result = sub_48EB40((_DWORD **)this, a4, (int)a5); break; case 16: result = sub_48EF10(this, a4, (int)a5); break; } break; case 8: if ( a3 == 17 ) result = a4; break; case 22: if ( a3 == 11 ) { sub_48E7C0((int)a5); result = a4; } break; case 28: switch ( a3 ) { case 3: sub_48E460(a5); result = a4; break; case 5: sub_48E590(a5); result = a4; break; case 7: case 9: goto LABEL_41; case 11: sub_48E7C0((int)a5); result = a4; break; case 13: sub_48E640((int)a5); result = a4; break; case 15: sub_48E6E0(a5); result = a4; break; case 50: result = sub_48E2C0(a4, a5); break; case 51: result = sub_48E2A0(a4, a5); break; case 52: result = sub_48E270(a4, a5); break; default: return result; } break; case 31: if ( a3 == 7 ) result = sub_48E1F0(a4, a5); break; case 36: if ( a3 == 16 ) { if ( *(_BYTE *)a5 <= 0x14u ) byte_AB0C88 = *(_BYTE *)a5; LABEL_41: result = a4; } break; case 45: if ( a3 == 12 ) result = sub_48F0C0(this, a4, a5); break; default: return result; } return result; } // AB0C88: using guessed type char byte_AB0C88; //----- (0048F660) -------------------------------------------------------- int __stdcall sub_48F660(int a1, unsigned __int8 *a2) { sub_686030((int *)&byte_ADA230, a2, (int)a2); sub_633040((char *)&dword_AD46F0); return a1; } // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; //----- (0048F6A0) -------------------------------------------------------- int __stdcall sub_48F6A0(int a1, _WORD *a2) { signed int v2; // edi int v3; // esi sub_6F2B10(); v2 = 0; if ( *a2 > 0u ) { v3 = (int)(a2 + 1); do { sub_6F2BF0(v3); ++v2; v3 += 14; } while ( v2 < (unsigned __int16)*a2 ); } return a1; } //----- (0048F700) -------------------------------------------------------- int __stdcall sub_48F700(int a1, int *a2) { sub_6815B0(byte_AD9238, *a2, a2[1]); sub_6815D0(byte_AD9238, a2[2], a2[3]); return a1; } //----- (0048F760) -------------------------------------------------------- char __thiscall sub_48F760(_DWORD *this, int a2) { _BYTE **v2; // esi bool v3; // al char result; // al int v5; // ecx int v6; // ecx v2 = (_BYTE **)this; v3 = byte_AC9CCD || byte_AC9CCE; if ( byte_AC9CBE && byte_AC9CBF && byte_AC9CCC && v3 && byte_AC9CCF && byte_AC9CD5 ) { byte_AC9CBE = 0; byte_AC9CBF = 0; byte_AC9CCC = 0; byte_AC9CCD = 0; byte_AC9CCE = 0; byte_AC9CCF = 0; byte_AC9CD5 = 0; sub_8EF1C0(dword_ACDD5C, this + 10); sub_8EEF60(v2); result = (unsigned int)sub_906240(v2[9]); } else { v5 = this[9]; if ( v5 ) (*(void (__stdcall **)(_BYTE **, signed int))(*(_DWORD *)v5 + 16))(v2, 100); result = sub_8EEEE0(v2); v6 = (int)v2[9]; if ( v6 ) result = sub_9060A0(v6); } return result; } // AC9CBE: using guessed type char byte_AC9CBE; // AC9CBF: using guessed type char byte_AC9CBF; // AC9CCC: using guessed type char byte_AC9CCC; // AC9CCD: using guessed type char byte_AC9CCD; // AC9CCE: using guessed type char byte_AC9CCE; // AC9CCF: using guessed type char byte_AC9CCF; // AC9CD5: using guessed type char byte_AC9CD5; // ACDD5C: using guessed type int dword_ACDD5C; //----- (0048F8C0) -------------------------------------------------------- int __stdcall sub_48F8C0(int a1, int a2) { int v2; // eax int v3; // ecx int v4; // edx int v5; // eax int v6; // eax char v7; // cl int result; // eax int v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] sub_6BE6F0(*(_BYTE *)(a2 + 102) & 1); sub_6824C0(byte_AD9238, a2); v2 = *(_DWORD *)(a2 + 8); v3 = *(_DWORD *)(a2 + 12); v9 = *(_DWORD *)(a2 + 4); v4 = *(_DWORD *)(a2 + 16); v10 = v2; v5 = *(_DWORD *)(a2 + 20); v12 = v4; v13 = v5; v11 = v3; v14 = 0; BYTE2(v13) = 0; v6 = 0; do { v7 = *((_BYTE *)&v9 + v6); *((_BYTE *)&dword_B684B8 + v6++) = v7; } while ( v7 ); result = a1; dword_B684F8 = *(unsigned __int8 *)(a2 + 25); return result; } // B684B8: using guessed type int dword_B684B8; // B684F8: using guessed type int dword_B684F8; //----- (0048F950) -------------------------------------------------------- _DWORD *__thiscall sub_48F950(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &ZoneLoginNetFrameWork::`vftable'; v1[9] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9BA6CC: using guessed type void *ZoneLoginNetFrameWork::`vftable'; //----- (0048F9B0) -------------------------------------------------------- void __thiscall sub_48F9B0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi void *v4; // ST04_4 v1 = this; *this = &ZoneLoginNetFrameWork::`vftable'; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } v3 = v1[9]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v4); } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9BA6CC: using guessed type void *ZoneLoginNetFrameWork::`vftable'; //----- (0048FA60) -------------------------------------------------------- char __thiscall sub_48FA60(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx int v4; // edi _DWORD *v5; // esi char v7; // [esp+Ch] [ebp-2Ch] int v8; // [esp+14h] [ebp-24h] char v9[4]; // [esp+20h] [ebp-18h] int v10; // [esp+24h] [ebp-14h] int v11; // [esp+28h] [ebp-10h] int v12; // [esp+2Ch] [ebp-Ch] char v13; // [esp+30h] [ebp-8h] v2 = this; v10 = dword_B7D17C; v3 = dword_AB7F34[dword_AB7F30]; v4 = this[9]; *(_DWORD *)v9 = dword_B7D178; v11 = dword_B7D180; v12 = dword_B7D184; v13 = 0; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[9] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } sub_905DE0((char *)v2[9], v9); sub_905E10((_DWORD *)v2[9], dword_B7D188); v8 = 9; sub_8EF240(v2, &v7); *((_BYTE *)v2 + 32) = 1; v5 = sub_6CD770(); sub_74A7E0(v5); (*(void (__thiscall **)(_DWORD *))(*v5 + 36))(v5); return 1; } // AB7F30: using guessed type int dword_AB7F30; // B7D178: using guessed type int dword_B7D178; // B7D17C: using guessed type int dword_B7D17C; // B7D180: using guessed type int dword_B7D180; // B7D184: using guessed type int dword_B7D184; //----- (0048FB40) -------------------------------------------------------- void __thiscall sub_48FB40(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } v1[7] = 0; *((_BYTE *)v1 + 32) = 0; } //----- (0048FB80) -------------------------------------------------------- void __thiscall sub_48FB80(_DWORD **this, int a2, int a3, int a4) { void *v4; // esi char v5; // [esp+4h] [ebp-18h] int v6; // [esp+Ch] [ebp-10h] v4 = this; if ( a2 == 9 && !(*(unsigned __int8 (**)(void))(*this[9] + 8))() ) { v6 = 11; sub_8EF1C0(dword_ACDD5C, &v5); sub_8EEF60(v4); } } // ACDD5C: using guessed type int dword_ACDD5C; //----- (0048FBE0) -------------------------------------------------------- int __thiscall sub_48FBE0(void *this, int a2, unsigned __int16 *a3) { void *v3; // esi int v4; // ecx char *v5; // eax volatile LONG *v6; // eax char v8; // [esp+4h] [ebp-18h] int v9; // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] v3 = this; v4 = *a3; v9 = 13; v10 = v4; if ( v4 == 327 ) { sub_74CF60((char *)&unk_BA0610, *((unsigned __int8 *)a3 + 2)); v9 = 12; v5 = (char *)sub_40C190(-2003182891); v6 = sub_462C30(1, v5); sub_8F81A0(&unk_BA6B10, v6); } sub_8EF1C0(dword_ACDD5C, &v8); sub_8EEF60(v3); return a2; } // ACDD5C: using guessed type int dword_ACDD5C; //----- (0048FC70) -------------------------------------------------------- int __thiscall sub_48FC70(_DWORD *this, int a2, const void *a3) { _DWORD *v3; // esi int result; // eax v3 = this; sub_680780((int)byte_AD9238, a3); LOWORD(a3) = 28676; sub_906000(dword_AB7F4C, &a3, 2u); LOWORD(a3) = 28684; sub_906000(dword_AB7F4C, &a3, 2u); LOWORD(a3) = 31750; sub_906000(dword_AB7F4C, &a3, 2u); result = a2; v3[12] = 15; return result; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (0048FCF0) -------------------------------------------------------- void __thiscall sub_48FCF0(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx signed int v3; // ebx _DWORD *v4; // esi char *v5; // esi _DWORD *v6; // eax __int16 v7; // [esp+10h] [ebp-70Ch] __int16 v8; // [esp+14h] [ebp-708h] char v9[4]; // [esp+16h] [ebp-706h] int v10; // [esp+1Ah] [ebp-702h] int v11; // [esp+1Eh] [ebp-6FEh] int v12; // [esp+22h] [ebp-6FAh] int v13; // [esp+26h] [ebp-6F6h] char v14; // [esp+2Ah] [ebp-6F2h] char v15; // [esp+32h] [ebp-6EAh] char v16[4]; // [esp+68Ch] [ebp-90h] int v17; // [esp+690h] [ebp-8Ch] int v18; // [esp+694h] [ebp-88h] int v19; // [esp+698h] [ebp-84h] int v20; // [esp+69Ch] [ebp-80h] char v21; // [esp+6A0h] [ebp-7Ch] int v22; // [esp+718h] [ebp-4h] v1 = this; v2 = this[9]; v3 = 0; if ( v2 ) { v7 = 6145; sub_905F90(v2, &v7, 2u); v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; `eh vector constructor iterator'(&v14, 0x20u, 51, sub_486D80, nullsub_6); v8 = word_B7D19C; v22 = 0; v4 = (_DWORD *)sub_6805D0((int)byte_AD9238); v16[0] = 0; memset(&v16[1], 0, 0x7Fu); *(_DWORD *)v16 = v4[1]; v17 = v4[2]; v18 = v4[3]; v19 = v4[4]; v20 = v4[5]; v21 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v16, 0x14u); v5 = &v15; do { v6 = (_DWORD *)sub_74CF40((char *)&unk_BA0610, v3); *((_DWORD *)v5 - 2) = *v6; *((_DWORD *)v5 - 1) = v6[1]; *(_DWORD *)v5 = v6[2]; *((_DWORD *)v5 + 1) = v6[3]; *((_DWORD *)v5 + 2) = v6[4]; *((_DWORD *)v5 + 3) = v6[5]; *((_DWORD *)v5 + 4) = v6[6]; *((_DWORD *)v5 + 5) = v6[7]; ++v3; v5 += 32; } while ( v3 < 51 ); sub_906000(v1[9], &v8, 0x676u); v22 = -1; `eh vector destructor iterator'(&v14, 0x20u, 51, nullsub_6); } } // B7D19C: using guessed type __int16 word_B7D19C; //----- (0048FEE0) -------------------------------------------------------- int __stdcall sub_48FEE0(int a1, _DWORD *a2) { int v2; // eax const CHAR *v3; // eax int v4; // edx CHAR v5; // cl _DWORD *v6; // eax _DWORD *v7; // edi int v8; // esi int v9; // eax int v10; // eax const CHAR *v11; // eax int v13; // [esp+10h] [ebp-1Ch] int v14; // [esp+14h] [ebp-18h] int v15; // [esp+18h] [ebp-14h] int v16; // [esp+1Ch] [ebp-10h] int v17; // [esp+20h] [ebp-Ch] char v18; // [esp+24h] [ebp-8h] sub_680750((int)byte_AD9238, a2); v2 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (*(_BYTE *)a2 >> 2) & 0x1F); if ( v2 ) v3 = (const CHAR *)(v2 + 21); else v3 = &byte_9A8050; v4 = (char *)&dword_B684D8 - v3; do { v5 = *v3; v3[v4] = *v3; ++v3; } while ( v5 ); v6 = (_DWORD *)sub_680740(byte_AD9238); v7 = v6; v13 = v6[1]; v14 = v6[2]; v15 = v6[3]; v16 = v6[4]; v17 = v6[5]; v18 = 0; BYTE2(v17) = 0; v8 = BT_OpenLogFile("UserInfo.txt"); BT_SetLogFlags(v8, 2); v9 = BT_GetLogFileName(v8); BT_AddLogFile(v9); BT_ClearLog(v8); BT_AppLogEntryF(v8, 4, "UserAccount [ %s ]", byte_AD9238); BT_AppLogEntryF(v8, 4, "CharID [ %d ]", *v7); BT_AppLogEntryF(v8, 4, "CharName [ %s ]", &v13); v10 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (*(_BYTE *)a2 >> 2) & 0x1F); if ( v10 ) v11 = (const CHAR *)(v10 + 21); else v11 = &byte_9A8050; BT_AppLogEntryF(v8, 4, "CharClass [ %s ]", v11); BT_CloseLogFile(v8); return a1; } // 9A5010: using guessed type int __stdcall BT_ClearLog(_DWORD); // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); // AC9C84: using guessed type int dword_AC9C84; // B684D8: using guessed type int dword_B684D8; //----- (00490030) -------------------------------------------------------- int __thiscall sub_490030(int this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // esi int result; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax v5 = (_DWORD *)this; result = 0; switch ( a2 ) { case 2: if ( a3 == 7 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 36) + 12))(*a5); sub_48FCF0(v5); result = a4; } break; case 4: switch ( a3 ) { case 56: result = sub_48F8C0(a4, (int)a5); break; case 57: result = sub_48FEE0(a4, a5); break; case 58: v7 = sub_6CD770(); sub_74AC80(v7, (int)a5); result = a4; break; case 59: v8 = sub_6CD770(); sub_74AD60(v8, (int)a5); result = a4; break; case 60: sub_680FF0(byte_AD9238, a5); result = a4; break; case 61: sub_6BFFF0((unsigned __int8 *)a5); result = a4; break; case 62: sub_6BEDF0(a5); result = a4; break; case 71: result = sub_48F660(a4, (unsigned __int8 *)a5); break; case 72: goto LABEL_29; case 73: sub_67D1B0((int)dword_AD8EBC, (int)a5); result = a4; break; case 74: result = sub_48F6A0(a4, a5); break; case 206: v9 = sub_6CD770(); sub_74AE60(v9, (int)a5); result = a4; break; case 215: v10 = sub_6CD770(); sub_74AF30(v10, (int)a5); result = a4; break; case 222: result = sub_48F700(a4, (int *)a5); break; default: return result; } break; case 6: if ( a3 == 2 ) { result = sub_48FC70((_DWORD *)this, a4, a5); } else if ( a3 == 4 ) { result = sub_48FBE0((void *)this, a4, a5); } break; case 8: if ( a3 == 17 ) result = a4; break; case 17: if ( a3 == 30 ) { v11 = sub_6CD770(); sub_6CD120(v11, a5); goto LABEL_29; } break; case 36: if ( a3 == 16 ) { if ( *(_BYTE *)a5 > 0x14u ) { LABEL_29: result = a4; } else { byte_AB0C88 = *(_BYTE *)a5; result = a4; } } break; default: return result; } return result; } // AB0C88: using guessed type char byte_AB0C88; //----- (00490360) -------------------------------------------------------- int *sub_490360() { return &dword_ACE3B8; } // ACE3B8: using guessed type int dword_ACE3B8; //----- (00490370) -------------------------------------------------------- int sub_490370() { return dword_ACE3B8; } // ACE3B8: using guessed type int dword_ACE3B8; //----- (004903A0) -------------------------------------------------------- void *__thiscall sub_4903A0(void *this, char a2) { void *v2; // esi v2 = this; sub_48F9B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00490410) -------------------------------------------------------- char __thiscall sub_490410(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // eax volatile LONG *v11; // eax int v12; // eax volatile LONG *v13; // edi volatile LONG v14; // ebx const CHAR *v15; // eax int v16; // eax volatile LONG *v17; // eax int v18; // eax volatile LONG *v19; // edi volatile LONG v20; // ebx const CHAR *v21; // eax int v22; // eax volatile LONG *v23; // eax int v24; // eax volatile LONG *v25; // edi volatile LONG v26; // ebx const CHAR *v27; // eax int v28; // eax volatile LONG *v29; // eax int v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ebx const CHAR *v34; // eax volatile LONG **v35; // eax int v36; // eax int v37; // eax volatile LONG *v38; // eax volatile LONG *v39; // edi volatile LONG v40; // ebx const CHAR *v41; // eax volatile LONG **v42; // eax int v43; // eax int v44; // eax volatile LONG *v45; // eax volatile LONG *v46; // edi volatile LONG v47; // ebx const CHAR *v48; // eax volatile LONG *v49; // [esp+10h] [ebp-24h] int v50; // [esp+14h] [ebp-20h] int v51; // [esp+18h] [ebp-1Ch] int v52; // [esp+1Ch] [ebp-18h] int v53; // [esp+20h] [ebp-14h] int v54; // [esp+24h] [ebp-10h] int v55; // [esp+30h] [ebp-4h] v2 = (int)this; v50 = 0; v55 = 0; v3 = (volatile LONG *)sub_43D0D0(5u); v49 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v50; v55 = -1; if ( !v50 || InterlockedDecrement((volatile LONG *)(v50 + 4)) ) return 0; v5 = v50 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\CharSelect\\SelectCharCharInfo.nif"); sub_8F66B0(v8, (int)&v50, v7); if ( !v50 ) return 0; v9 = sub_8FB140(v50, (int)"CharInfoPanel", (int)&v53, (int)&v54, v3); if ( !sub_8F1440((volatile LONG **)v2, 32, 47, (int)v9, 0, a2, (int)"CharSelectInfoWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v50; v55 = -1; if ( !v50 || InterlockedDecrement((volatile LONG *)(v50 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } if ( !sub_8F71E0(v50, (int)"Name", &v53, &v54, &v51, &v52) ) goto LABEL_23; v10 = sub_421050(0); v11 = sub_8F4A20(v53, v54 + 2, v51, v52, v10, v2, 0, 0); *(_DWORD *)(v2 + 344) = v11; (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 1); v12 = sub_421050(0); v13 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v12, v2, 0, 0); v14 = *v13; v15 = sub_40C190(1319409301); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v14 + 472))(v13, v15); (*(void (__thiscall **)(volatile LONG *, void *))(*v13 + 468))(v13, &unk_AA8D48); if ( !sub_8F71E0(v50, (int)"Level", &v53, &v54, &v51, &v52) ) goto LABEL_23; v16 = sub_421050(0); v17 = sub_8F4A20(v53, v54 + 2, v51, v52, v16, v2, 0, 0); *(_DWORD *)(v2 + 348) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 1); v18 = sub_421050(0); v19 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v18, v2, 0, 0); v20 = *v19; v21 = sub_40C190(-1734041703); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, void *))(*v19 + 468))(v19, &unk_AA8D48); if ( !sub_8F71E0(v50, (int)"Job", &v53, &v54, &v51, &v52) ) goto LABEL_23; v22 = sub_421050(0); v23 = sub_8F4A20(v53, v54 + 2, v51, v52, v22, v2, 0, 0); *(_DWORD *)(v2 + 352) = v23; (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 1); v24 = sub_421050(0); v25 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v24, v2, 0, 0); v26 = *v25; v27 = sub_40C190(-1766684000); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v26 + 472))(v25, v27); (*(void (__thiscall **)(volatile LONG *, void *))(*v25 + 468))(v25, &unk_AA8D48); if ( !sub_8F71E0(v50, (int)"Position", &v53, &v54, &v51, &v52) ) { LABEL_23: v55 = -1; sub_410C00(&v50); return 0; } v28 = sub_421050(0); v29 = sub_8F4A20(v53, v54 + 2, v51, v52, v28, v2, 0, 0); *(_DWORD *)(v2 + 356) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 1); v30 = sub_421050(0); v31 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v30, v2, 0, 0); v32 = v31; v33 = *v31; v34 = sub_40C190(-1527321620); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); (*(void (__thiscall **)(volatile LONG *, void *))(*v32 + 468))(v32, &unk_AA8D48); v35 = sub_8FB140(v50, (int)"HpDark", (int)&v53, (int)&v54, v49); sub_8F3EB0(v53, v54, (int)v35, v2, 0, 0); v36 = sub_421050(0); *(_DWORD *)(v2 + 360) = sub_8F4A20(v53, v54 + 1, v51, v52, v36, v2, 0, 0); v37 = sub_421050(0); v38 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v37, v2, 0, 0); v39 = v38; v40 = *v38; v41 = sub_40C190(1214204324); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v39, v41); (*(void (__thiscall **)(volatile LONG *, void *))(*v39 + 468))(v39, &unk_AA8D48); v42 = sub_8FB140(v50, (int)"SpDark", (int)&v53, (int)&v54, v49); sub_8F3EB0(v53, v54, (int)v42, v2, 0, 0); v43 = sub_421050(0); *(_DWORD *)(v2 + 364) = sub_8F4A20(v53, v54 + 1, v51, v52, v43, v2, 0, 0); v44 = sub_421050(0); v45 = sub_8F4A20(v53 - 42, v54 + 1, v51, v52, v44, v2, 0, 0); v46 = v45; v47 = *v45; v48 = sub_40C190(1398753700); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v47 + 472))(v46, v48); (*(void (__thiscall **)(volatile LONG *, void *))(*v46 + 468))(v46, &unk_AA8D48); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v55 = -1; sub_410C00(&v50); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00490CD0) -------------------------------------------------------- void *__thiscall sub_490CD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharSelectInfoWin::`vftable'; *((_DWORD *)this + 58) = &CharSelectInfoWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BA78C: using guessed type void *CharSelectInfoWin::`vftable'; // 9BA7AC: using guessed type void *CharSelectInfoWin::`vftable'; //----- (00490D60) -------------------------------------------------------- char sub_490D60() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( v0 ) { v0[27] = 0; v0[28] = 0; v0[29] = 0; v0[30] = 0; v0[31] = 0; v0[32] = 0; v0[33] = 0; v0[34] = 0; } return sub_6F36A0(&off_AB7F2C, 3, 51, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00490DE0) -------------------------------------------------------- char __stdcall sub_490DE0(int a1) { char result; // al result = dword_ACDC84; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { if ( !(*(_BYTE *)(dword_ACDC84 + 65) & 2) ) result = sub_490D60(); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00490E00) -------------------------------------------------------- char __thiscall sub_490E00(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // edi int v13; // ST5C_4 int v14; // ST58_4 int v15; // ST54_4 int v16; // eax volatile LONG *v17; // eax int v18; // eax int v19; // edi const CHAR *v20; // eax int v21; // edi int v22; // eax volatile LONG **v23; // edi volatile LONG *v24; // ST5C_4 int v25; // ST58_4 int v26; // ST54_4 int v27; // eax volatile LONG *v28; // edi int v29; // eax const CHAR *v30; // eax float *v31; // eax volatile LONG **v32; // edi volatile LONG *v33; // ST5C_4 volatile LONG *v34; // edi int v35; // ST58_4 int v36; // ST54_4 int v37; // eax volatile LONG *v38; // edi float *v39; // eax int v40; // eax const CHAR *v41; // eax volatile LONG **v42; // edi volatile LONG *v43; // ST5C_4 volatile LONG *v44; // edi int v45; // ST58_4 int v46; // ST54_4 int v47; // eax volatile LONG *v48; // edi float *v49; // eax int v50; // eax const CHAR *v51; // eax volatile LONG **v52; // edi volatile LONG *v53; // ST5C_4 volatile LONG *v54; // edi int v55; // ST58_4 int v56; // ST54_4 int v57; // eax volatile LONG *v58; // edi volatile LONG v59; // ebx float *v60; // eax volatile LONG v61; // ebx int v62; // eax volatile LONG v63; // ebx const CHAR *v64; // eax void (__thiscall ***v65)(_DWORD, signed int); // esi char v66; // [esp+78h] [ebp-2Ch] void (__thiscall **v67)(_DWORD, _DWORD); // [esp+88h] [ebp-1Ch] int v68; // [esp+8Ch] [ebp-18h] int v69; // [esp+90h] [ebp-14h] int v70; // [esp+94h] [ebp-10h] int v71; // [esp+A0h] [ebp-4h] int v72; // [esp+ACh] [ebp+8h] v2 = (int)this; v70 = 0; v3 = dword_BA6BA0; v71 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\CharSelect\\SelectPanel.nif"); sub_8F66B0(v4, (int)&v70, v3); if ( !v70 ) return 0; v5 = sub_8FB140(v70, (int)"Plane01", (int)&v68, (int)&v69, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"CharSelectMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v70; v71 = -1; if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v69; v9 = v68; v72 = v69; v10 = sub_8FB140(v70, (int)"TextPanel", (int)&v68, (int)&v69, 0); v11 = sub_8F3EB0(v68 - v9, v69 - v8, (int)v10, v2, 0, 0); v12 = v11; v13 = (int)v11; v14 = sub_421050(0); v15 = (*(int (__thiscall **)(volatile LONG *))(*v12 + 148))(v12); v16 = (*(int (__thiscall **)(volatile LONG *))(*v12 + 144))(v12); v17 = sub_8F4A20(0, 2, v16, v15, v14, v13, 0, 0); *(_DWORD *)(v2 + 348) = v17; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 488))(v17, 0); v18 = *(_DWORD *)(*(_DWORD *)(v2 + 348) + 288); if ( v18 ) *(_BYTE *)(v18 + 285) = 1; v19 = **(_DWORD **)(v2 + 348); v20 = sub_40C190(1593688511); (*(void (__thiscall **)(_DWORD, const CHAR *))(v19 + 472))(*(_DWORD *)(v2 + 348), v20); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); sub_9076A0(*(_DWORD **)(*(_DWORD *)(v2 + 348) + 288), 6); v21 = **(_DWORD **)(v2 + 348); v22 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v21 + 452))(*(_DWORD *)(v2 + 348), v22); v23 = sub_8FB140(v70, (int)"CreatCharNor", (int)&v68, (int)&v69, 0); sub_8FB650(v23, v70, (int)"CreatCharClick"); sub_8FB650(v23, v70, (int)"CreatCharOver"); v24 = sub_8FE0F0(v68 - v9, v69 - v72, (int)v23, v2, 0, 0, 0); *((_BYTE *)v24 + 320) = 0; v25 = sub_421050(0); v26 = (*(int (__thiscall **)(volatile LONG *))(*v24 + 148))(v24); v27 = (*(int (__thiscall **)(volatile LONG *))(*v24 + 144))(v24); v28 = sub_8F4A20(0, 2, v27, v26, v25, (int)v24, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v28; v29 = sub_421050(3); ((void (__thiscall **)(volatile LONG *, int))v67)[113](v28, v29); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v28; v30 = sub_40C190(-538755284); ((void (__thiscall **)(volatile LONG *, const CHAR *))v67)[118](v28, v30); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v28; v31 = sub_419EE0((float *)&v66, 0x37u, 0xFFu, 0, 0xFFu); ((void (__thiscall **)(volatile LONG *, float *))v67)[117](v28, v31); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); sub_9074F0(*((_DWORD *)v28 + 72), 1); v32 = sub_8FB140(v70, (int)"DelCharNor", (int)&v68, (int)&v69, 0); sub_8FB650(v32, v70, (int)"DelCharClick"); sub_8FB650(v32, v70, (int)"DelCharOver"); v33 = sub_8FE0F0(v68 - v9, v69 - v72, (int)v32, v2, 1, 0, 0); *(_DWORD *)(v2 + 356) = v33; v34 = v33; v35 = sub_421050(0); v36 = (*(int (__thiscall **)(volatile LONG *))(*v34 + 148))(v34); v37 = (*(int (__thiscall **)(volatile LONG *))(*v34 + 144))(v34); v38 = sub_8F4A20(0, 2, v37, v36, v35, (int)v33, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v38; v39 = sub_419EE0((float *)&v66, 0x37u, 0xFFu, 0, 0xFFu); ((void (__thiscall **)(volatile LONG *, float *))v67)[117](v38, v39); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v38; v40 = sub_421050(3); ((void (__thiscall **)(volatile LONG *, int))v67)[113](v38, v40); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v38; v41 = sub_40C190(-521714145); ((void (__thiscall **)(volatile LONG *, const CHAR *))v67)[118](v38, v41); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); sub_9074F0(*((_DWORD *)v38 + 72), 1); v42 = sub_8FB140(v70, (int)"StartNor", (int)&v68, (int)&v69, 0); sub_8FB650(v42, v70, (int)"StartClick"); sub_8FB650(v42, v70, (int)"StartOver"); v43 = sub_8FE0F0(v68 - v9, v69 - v72, (int)v42, v2, 2, 0, 0); *(_DWORD *)(v2 + 352) = v43; v44 = v43; v45 = sub_421050(0); v46 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 148))(v44); v47 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 144))(v44); v48 = sub_8F4A20(0, 2, v47, v46, v45, (int)v43, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v48; v49 = sub_419EE0((float *)&v66, 0x37u, 0xFFu, 0, 0xFFu); ((void (__thiscall **)(volatile LONG *, float *))v67)[117](v48, v49); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v48; v50 = sub_421050(3); ((void (__thiscall **)(volatile LONG *, int))v67)[113](v48, v50); v67 = (void (__thiscall **)(_DWORD, _DWORD))*v48; v51 = sub_40C190(-2001867802); ((void (__thiscall **)(volatile LONG *, const CHAR *))v67)[118](v48, v51); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); sub_9074F0(*((_DWORD *)v48 + 72), 1); v52 = sub_8FB140(v70, (int)"PrePageNor", (int)&v68, (int)&v69, 0); sub_8FB650(v52, v70, (int)"PrePageClick"); sub_8FB650(v52, v70, (int)"PrePageOver"); v53 = sub_8FE0F0(v68 - v9, v69 - v72, (int)v52, v2, 3, 0, 0); *(_DWORD *)(v2 + 344) = v53; v54 = v53; v55 = sub_421050(0); v56 = (*(int (__thiscall **)(volatile LONG *))(*v54 + 148))(v54); v57 = (*(int (__thiscall **)(volatile LONG *))(*v54 + 144))(v54); v58 = sub_8F4A20(0, 2, v57, v56, v55, (int)v53, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v58 + 488))(v58, 5); v59 = *v58; v60 = sub_419EE0((float *)&v66, 0x37u, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(volatile LONG *, float *))(v59 + 468))(v58, v60); v61 = *v58; v62 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v61 + 452))(v58, v62); v63 = *v58; v64 = sub_40C190(-402399177); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v63 + 472))(v58, v64); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v58 + 240))(v58, 0); sub_9074F0(*((_DWORD *)v58 + 72), 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 1.0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v71 = -1; if ( v70 ) { v65 = (void (__thiscall ***)(_DWORD, signed int))v70; if ( !InterlockedDecrement((volatile LONG *)(v70 + 4)) ) { if ( v65 ) (**v65)(v65, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00491510) -------------------------------------------------------- int __thiscall sub_491510(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = sub_402FC0(this, a2); if ( v2[86] ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[86] + 240))(1); result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2[86] + 248))(1); } return result; } //----- (00491560) -------------------------------------------------------- void __thiscall sub_491560(void **this, int a2, int a3) { switch ( a2 ) { case 0: sub_415B90(this[74]); break; case 1: sub_415BE0(this[74]); break; case 2: sub_415AB0(this[74]); break; case 3: sub_490D60(); break; default: return; } } //----- (004915C0) -------------------------------------------------------- void __thiscall sub_4915C0(_DWORD *this, int a2) { int v2; // ecx int v3; // edx int v4; // ebx int v5; // edi int v6; // eax int v7; // ecx int *v8; // esi int v9; // edx int v10; // eax int v11; // edi int v12; // ecx int v13; // edx const char *v14; // eax int v15; // ST08_4 const char *v16; // eax int v17; // [esp-Ch] [ebp-4F8h] _DWORD *v18; // [esp+4h] [ebp-4E8h] char v19[4]; // [esp+Ch] [ebp-4E0h] int v20; // [esp+10h] [ebp-4DCh] int v21; // [esp+14h] [ebp-4D8h] char v22; // [esp+18h] [ebp-4D4h] char v23; // [esp+19h] [ebp-4D3h] int v24; // [esp+418h] [ebp-D4h] int v25; // [esp+41Ch] [ebp-D0h] int v26; // [esp+420h] [ebp-CCh] int v27; // [esp+424h] [ebp-C8h] int v28; // [esp+428h] [ebp-C4h] char v29; // [esp+42Ch] [ebp-C0h] char v30[4]; // [esp+498h] [ebp-54h] int v31; // [esp+49Ch] [ebp-50h] int v32; // [esp+4D8h] [ebp-14h] int v33; // [esp+4DCh] [ebp-10h] int v34; // [esp+4E0h] [ebp-Ch] char v35; // [esp+4E4h] [ebp-8h] v18 = this; if ( a2 && this[87] ) { v2 = *(_DWORD *)(a2 + 8); v3 = *(_DWORD *)(a2 + 12); v4 = *(_DWORD *)(a2 + 31); v5 = *(_DWORD *)(a2 + 27); v24 = *(_DWORD *)(a2 + 4); v6 = *(_DWORD *)(a2 + 16); v25 = v2; v7 = *(_DWORD *)(a2 + 20); v8 = (int *)(a2 + 27); v27 = v6; v26 = v3; v9 = *(_DWORD *)(a2 + 35); v28 = v7; v29 = 0; v34 = v9; v35 = 0; memset(v30, 0, 0x40u); *(_DWORD *)v30 = v5; v31 = v4; if ( !strcmp("GuildT04", v30) ) { v21 = 0; v20 = 0; *(_DWORD *)v19 = 0; strncpy(v19, v30, 0xCu); v10 = sub_4316B0(v19); } else { v10 = sub_4316B0(v8); } v11 = v10; if ( v10 ) { v22 = 0; memset(&v23, 0, 0x3FFu); v12 = *(_DWORD *)(a2 + 35); v13 = *v8; v33 = *(_DWORD *)(a2 + 31); v34 = v12; v32 = v13; v35 = 0; v17 = v11 + 14; if ( !strcmp((const char *)&v32, "EldPri") ) { v14 = sub_40C190(810633290); sprintf(&v22, v14, &v24, v17); } else { v15 = *(unsigned __int16 *)(a2 + 24); v16 = sub_40C190(1250922350); sprintf(&v22, v16, v15, &v24, v17); } if ( v18[87] ) (*(void (__stdcall **)(char *))(*(_DWORD *)v18[87] + 472))(&v22); } } } //----- (004917D0) -------------------------------------------------------- int __thiscall sub_4917D0(_DWORD **this) { _DWORD **v1; // esi int v2; // edi const CHAR *v3; // eax v1 = this; v2 = *this[87]; v3 = sub_40C190(-370225401); return (*(int (__thiscall **)(_DWORD *, const CHAR *))(v2 + 472))(v1[87], v3); } //----- (00491800) -------------------------------------------------------- int __cdecl sub_491800(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CharSelectMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &CharSelectMenuWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BAACC: using guessed type void *CharSelectMenuWin::`vftable'; // 9BAAEC: using guessed type void *CharSelectMenuWin::`vftable'; //----- (00491940) -------------------------------------------------------- char __thiscall sub_491940(_BYTE *this, int a2) { if ( !a2 ) return 0; if ( !((this[(a2 >> 3) + 33] >> (a2 & 7)) & 1) || (this[(a2 >> 3) + 65] >> (a2 & 7)) & 1 ) return 0; return 1; } //----- (00491980) -------------------------------------------------------- void *__thiscall sub_491980(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharSelectMenuWin::`vftable'; *((_DWORD *)this + 58) = &CharSelectMenuWin::`vftable'; *((_DWORD *)this + 86) = 0; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BAACC: using guessed type void *CharSelectMenuWin::`vftable'; // 9BAAEC: using guessed type void *CharSelectMenuWin::`vftable'; //----- (00491A60) -------------------------------------------------------- char __thiscall sub_491A60(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax int v11; // ST10_4 int v12; // ST0C_4 int v13; // eax volatile LONG *v14; // eax int v15; // edi float *v16; // eax int v17; // edi int v18; // eax const char *v19; // eax void (__thiscall ***v20)(_DWORD, signed int); // esi char v21; // [esp+30h] [ebp-42Ch] int v22; // [esp+40h] [ebp-41Ch] int v23; // [esp+44h] [ebp-418h] int v24; // [esp+48h] [ebp-414h] char v25; // [esp+4Ch] [ebp-410h] int v26; // [esp+458h] [ebp-4h] v2 = (int)this; v24 = 0; v3 = dword_BA6BA0; v26 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\Game\\MessageWin02.nif"); sub_8F66B0(v4, (int)&v24, v3); if ( !v24 ) return 0; v5 = sub_8FB140(v24, (int)"Panel01", (int)&v23, (int)&v22, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"EventFriendCountWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v24; v26 = -1; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v24, (int)"Theme", (int)&v23, (int)&v22, v8); else v9 = sub_8FB140(v24, (int)"Theme", (int)&v23, (int)&v22, 0); v10 = sub_8F3EB0(v23, v22, (int)v9, v2, 0, 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_421050(0); v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 148))(v2); v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v14 = sub_8F4A20(0, 0, v13, v12, v11, v2, 0, 0); *(_DWORD *)(v2 + 348) = v14; (*(void (__thiscall **)(volatile LONG *, signed int))(*v14 + 488))(v14, 5); v15 = **(_DWORD **)(v2 + 348); v16 = sub_419EE0((float *)&v21, 0x37u, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v15 + 468))(*(_DWORD *)(v2 + 348), v16); v17 = **(_DWORD **)(v2 + 348); v18 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v17 + 452))(*(_DWORD *)(v2 + 348), v18); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 348) + 472))("EventFriendWin"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v2 + 348) + 288), 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.079999998, 0.050000001); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v19 = sub_40C190(-488255444); sprintf(&v25, v19, 0); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 348) + 472))(&v25); v26 = -1; if ( v24 ) { v20 = (void (__thiscall ***)(_DWORD, signed int))v24; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v20 ) (**v20)(v20, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00491E90) -------------------------------------------------------- void *__thiscall sub_491E90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &EventFriendCountWin::`vftable'; *((_DWORD *)this + 58) = &EventFriendCountWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BAD68: using guessed type void *EventFriendCountWin::`vftable'; // 9BAD84: using guessed type void *EventFriendCountWin::`vftable'; //----- (00491EE0) -------------------------------------------------------- char __thiscall sub_491EE0(char *this) { char *v1; // esi signed int v2; // kr00_4 int v3; // esi char v4; // al char v6[128]; // [esp+Ch] [ebp-84h] v1 = this; memset(v6, 0, 0x64u); strncpy(v6, v1, 0x5Au); v2 = strlen(v6); v3 = 0; if ( v2 <= 0 ) return 0; while ( IsDBCSLeadByte(v6[v3]) ) { ++v3; LABEL_32: if ( ++v3 >= v2 ) return 0; } v4 = v6[v3]; if ( v4 != 32 && v4 != 39 && v4 != 92 && v4 != 47 && v4 != 58 && v4 != 42 && v4 != 63 && v4 != 60 && v4 != 62 && v4 != 124 && v4 != 126 && v4 != 33 && v4 != 64 && v4 != 37 && v4 != 38 && v4 != 59 && v4 != 46 && v4 != 44 && v4 != 34 && v4 != 96 && v4 != 40 && v4 != 41 && v4 != 43 && v4 != 45 && v4 != 35 && v4 != 36 && v4 != 91 && v4 != 93 ) { goto LABEL_32; } return 1; } // 491EE0: using guessed type char var_84[128]; //----- (00492010) -------------------------------------------------------- void __thiscall sub_492010(_DWORD ***this, const char *a2) { sub_604E10(this[176], a2); } //----- (00492020) -------------------------------------------------------- void __thiscall sub_492020(_DWORD ***this, char *a2) { sub_604E40(this[176], a2); } //----- (00492030) -------------------------------------------------------- void __userpurge sub_492030(int a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, int a8) { sub_4EB180(*(_DWORD *)(a1 + 1040), a2, a3, a4, (int)&a5, 0, 0.0); } //----- (00492060) -------------------------------------------------------- void __thiscall sub_492060(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD **v3; // ecx v2 = this; if ( this[176] ) sub_604420(a2); v3 = (_DWORD **)v2[177]; if ( v3 ) sub_600E20(v3, a2); } //----- (00492090) -------------------------------------------------------- void __thiscall sub_492090(_DWORD *this, int a2) { _DWORD **v2; // ecx v2 = (_DWORD **)this[177]; if ( v2 ) sub_600EE0(v2, a2); } //----- (004920B0) -------------------------------------------------------- void sub_4920B0(int a1, char *a2, ...) { _DWORD **v2; // ecx char v3; // [esp+4h] [ebp-104h] va_list va; // [esp+118h] [ebp+10h] va_start(va, a2); vsprintf(&v3, a2, va); if ( *(_DWORD *)(a1 + 704) ) sub_604420((int)&v3); v2 = *(_DWORD ***)(a1 + 708); if ( v2 ) sub_600E20(v2, (int)&v3); } //----- (00492120) -------------------------------------------------------- void __thiscall sub_492120(_DWORD ***this, int a2) { _DWORD ***v2; // esi v2 = this; sub_604460(this[176], a2); sub_600E80(v2[177], a2); } //----- (00492150) -------------------------------------------------------- char __usercall sub_492150@(BYTE *a1@, _DWORD *a2) { if ( IsDBCSLeadByte(*a1) || *a1 != 47 ) return 0; *a2 = 1; return 1; } //----- (00492180) -------------------------------------------------------- char __usercall sub_492180@(_BYTE *a1@, _BYTE *a2@, _DWORD *a3@) { _BYTE *v3; // edi _BYTE *v4; // esi v3 = a2; v4 = a1; *a3 = 0; if ( a2 ) { if ( a1 ) { LOBYTE(a1) = *a1; if ( (_BYTE)a1 ) { if ( (_BYTE)a1 != 32 ) { do { if ( !(_BYTE)a1 ) break; if ( IsDBCSLeadByte((BYTE)a1) ) { *v3 = *v4; v3[1] = v4[1]; v3 += 2; v4 += 2; *a3 += 2; } else { *v3++ = *v4++; ++*a3; } LOBYTE(a1) = *v4; } while ( *v4 != 32 ); } } } } return (char)a1; } //----- (004921E0) -------------------------------------------------------- char __fastcall sub_4921E0(char *a1) { char v1; // al if ( a1 ) { v1 = *a1; if ( *a1 ) { while ( v1 == 32 ) { v1 = (a1++)[1]; if ( !v1 ) return 1; } } } return 0; } //----- (00492210) -------------------------------------------------------- char __cdecl sub_492210(_BYTE *a1) { _DWORD *v1; // ecx _BYTE *v2; // eax _DWORD *v3; // ebx char v5; // [esp+4h] [ebp-104h] v2 = a1; v3 = v1; if ( !a1 || !*a1 ) return 0; if ( *a1 == 32 ) { do ++v2; while ( *v2 == 32 ); } *v1 = 0; sub_492180(v2, &v5, v1); ++*v3; return 1; } //----- (00492280) -------------------------------------------------------- char __thiscall sub_492280(_BYTE *this) { _BYTE *v1; // esi char result; // al int v3; // [esp+4h] [ebp-108h] char v4; // [esp+8h] [ebp-104h] v1 = this; if ( !this || !*this ) goto LABEL_12; if ( *this == 32 ) { do ++v1; while ( *v1 == 32 ); } if ( *v1 && (v3 = 0, sub_492180(v1, &v4, &v3), v3) && v1[v3] ) result = 1; else LABEL_12: result = 0; return result; } //----- (00492300) -------------------------------------------------------- char __usercall sub_492300@(const char *a1@, _DWORD *a2) { if ( !a1 || strncmp(a1, "w ", 2u) && strncmp(a1, "W ", 2u) ) return 0; *a2 = 2; return 1; } //----- (00492340) -------------------------------------------------------- char __usercall sub_492340@(const char *a1@, _DWORD *a2) { if ( !a1 || strncmp(a1, "v ", 2u) && strncmp(a1, "V ", 2u) ) return 0; *a2 = 2; return 1; } //----- (00492380) -------------------------------------------------------- char __stdcall sub_492380(_BYTE *a1, int a2) { BYTE v2; // ST0C_1 int v3; // eax _BYTE *v4; // esi unsigned int v6; // [esp+4h] [ebp-4h] v2 = *(_BYTE *)a2; v6 = 0; v3 = IsDBCSLeadByte(v2); if ( !v3 && *(_BYTE *)a2 == 47 ) { if ( a2 != -1 && (!strncmp((const char *)(a2 + 1), "w ", 2u) || !strncmp((const char *)(a2 + 1), "W ", 2u)) ) { v4 = (_BYTE *)(a2 + 2); } else { v3 = strncmp((const char *)(a2 + 1), "friendship", 0xAu); if ( v3 ) return v3; v4 = (_BYTE *)(a2 + 11); } LOBYTE(v3) = *v4; if ( *v4 ) { if ( (_BYTE)v3 == 32 ) { do ++v4; while ( *v4 == 32 ); } sub_492180(v4, a1, &v6); LOBYTE(v3) = v6; if ( v6 && v6 <= 0x14 ) a1[v6] = 0; } } return v3; } //----- (00492530) -------------------------------------------------------- char __usercall sub_492530@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "p ", 2u) && strncmp(a1, "P ", 2u) ) return 0; *a2 = 2; return 1; } //----- (00492570) -------------------------------------------------------- char __usercall sub_492570@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "g ", 2u) && strncmp(a1, "G ", 2u) ) return 0; *a2 = 2; return 1; } //----- (004925B0) -------------------------------------------------------- char __usercall sub_4925B0@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "a ", 2u) && strncmp(a1, "A ", 2u) ) return 0; *a2 = 2; return 1; } //----- (004925F0) -------------------------------------------------------- char __usercall sub_4925F0@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "f ", 2u) && strncmp(a1, "F ", 2u) ) return 0; *a2 = 2; return 1; } //----- (00492630) -------------------------------------------------------- char __usercall sub_492630@(_DWORD *a1@, const char *a2@) { char result; // al if ( !strncmp(a2, "r ", 2u) || !strncmp(a2, "R ", 2u) ) { *a1 = 2; result = 1; } else if ( !strncmp(a2, &byte_9BB260, 3u) ) { *a1 = 3; result = 1; } else { result = 0; } return result; } //----- (00492690) -------------------------------------------------------- char __usercall sub_492690@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "s ", 2u) && strncmp(a1, "S ", 2u) ) return 0; *a2 = 2; return 1; } //----- (004926D0) -------------------------------------------------------- char __usercall sub_4926D0@(const char *a1@, _DWORD *a2) { if ( strncmp(a1, "n", 2u) && strncmp(a1, "N", 2u) ) return 0; *a2 = 2; return 1; } //----- (00492730) -------------------------------------------------------- void __thiscall sub_492730(_DWORD ***this, int a2, char *a3) { sub_605D00(this[176], a2, a3); } //----- (00492740) -------------------------------------------------------- int __thiscall sub_492740(_DWORD *this) { int result; // eax result = (this[1] - *this) / 28; this[4] = result; return result; } //----- (00492760) -------------------------------------------------------- void __thiscall sub_492760(_DWORD ***this, char *a2, int a3) { _DWORD ***v3; // esi v3 = this; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { sub_605FE0(this[176], a2, a3); sub_600910(v3[177], a2, a3); } } //----- (004927A0) -------------------------------------------------------- void __thiscall sub_4927A0(_DWORD ***this, char *a2, char a3) { _DWORD ***v3; // esi v3 = this; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { sub_606200(this[176], a2, a3); sub_600920(v3[177], a2, a3); } } //----- (00492820) -------------------------------------------------------- void __thiscall sub_492820(_DWORD ***this, char *a2) { _DWORD ***v2; // esi v2 = this; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { sub_606420(this[176], a2); sub_600950(v2[177], a2); } } //----- (00492860) -------------------------------------------------------- void __thiscall sub_492860(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("[%s] : %s", v10, a7); sub_6050A0(v7[176], (int)v8); v9 = sub_7549E0("[%s] : %s", v10, a7); sub_600B20((_DWORD **)v7[177], (int)v9); } } //----- (00492900) -------------------------------------------------------- void __thiscall sub_492900(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v7 = this; *(_DWORD *)v9 = a2; v10 = a3; v11 = a4; v12 = a5; v13 = a6; v14 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("[%s] : %s", v9, a7); sub_605180(v7[176], (int)v8); } } //----- (00492980) -------------------------------------------------------- void __thiscall sub_492980(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v7 = this; *(_DWORD *)v9 = a2; v10 = a3; v11 = a4; v12 = a5; v13 = a6; v14 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v9, a7); sub_6051F0(v7[176], (int)v8); } } //----- (00492A00) -------------------------------------------------------- void __thiscall sub_492A00(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("[%s] : %s", v10, a7); sub_6052D0(v7[176], (int)v8); v9 = sub_7549E0("[%s] : %s", v10, a7); sub_600B80((_DWORD **)v7[177], (int)v9); } } //----- (00492AA0) -------------------------------------------------------- void __thiscall sub_492AA0(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v10, a7); sub_605110(v7[176], (int)v8); v9 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v10, a7); sub_600B20((_DWORD **)v7[177], (int)v9); } } //----- (00492B40) -------------------------------------------------------- void __thiscall sub_492B40(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v10, a7); sub_605340(v7[176], (int)v8); v9 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v10, a7); sub_600B80((_DWORD **)v7[177], (int)v9); } } //----- (00492BE0) -------------------------------------------------------- void __thiscall sub_492BE0(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("[%s] : %s", v10, a7); sub_6053B0(v7[176], (int)v8); v9 = sub_7549E0("[%s] : %s", v10, a7); sub_600CA0((_DWORD **)v7[177], (int)v9); } } //----- (00492C80) -------------------------------------------------------- void __thiscall sub_492C80(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; *(_DWORD *)v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; v15 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v10, a7); sub_605420(v7[176], (int)v8); v9 = sub_7549E0("{color, #FFFF00,[%s]} : %s", v10, a7); sub_600CA0((_DWORD **)v7[177], (int)v9); } } //----- (00492D20) -------------------------------------------------------- void __thiscall sub_492D20(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // ebx char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; if ( !byte_B92008 ) { v11 = a3; dword_ACEB10 = a3; *(_DWORD *)v10 = a2; v12 = a4; v13 = a5; v14 = a6; v15 = 0; *(_DWORD *)dword_ACEB0C = a2; dword_ACEB14 = a4; dword_ACEB18 = a5; dword_ACEB1C = a6; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("{color,#FFFF00,[From %s]} : %s", v10, a7); sub_605030(v7[176], (int)v8); v9 = sub_7549E0("{color,#FFFF00,[From %s]} : %s", v10, a7); sub_600AC0((_DWORD **)v7[177], (int)v9); } } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // B92008: using guessed type char byte_B92008; //----- (00492DF0) -------------------------------------------------------- void __thiscall sub_492DF0(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // ebx char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; if ( !byte_B92008 ) { v11 = a3; dword_ACEB10 = a3; *(_DWORD *)v10 = a2; v12 = a4; v13 = a5; v14 = a6; v15 = 0; *(_DWORD *)dword_ACEB0C = a2; dword_ACEB14 = a4; dword_ACEB18 = a5; dword_ACEB1C = a6; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v8 = sub_7549E0("[To %s] : %s", v10, a7); sub_605030(v7[176], (int)v8); v9 = sub_7549E0("[To %s] : %s", v10, a7); sub_600AC0((_DWORD **)v7[177], (int)v9); } } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // B92008: using guessed type char byte_B92008; //----- (00492EC0) -------------------------------------------------------- void __thiscall sub_492EC0(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char *v10; // eax char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v7 = this; v12 = a3; *(_DWORD *)v11 = a2; v15 = a6; v13 = a4; v14 = a5; v16 = 0; if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { if ( !strcmp(v11, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()) ) { v8 = sub_7549E0("[%s] : %s", v11, a7); sub_604F50(v7[176], (int)v8); v9 = sub_7549E0("[%s] : %s", v11, a7); } else { v10 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v11, a7); sub_604F50(v7[176], (int)v10); v9 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v11, a7); } sub_600A60((_DWORD **)v7[177], (int)v9); } } //----- (00492FC0) -------------------------------------------------------- void __thiscall sub_492FC0(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char *v9; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v7 = this; if ( !byte_B92008 ) { v11 = a3; dword_ACEB10 = a3; *(_DWORD *)v10 = a2; v13 = a5; *(_DWORD *)dword_ACEB0C = a2; v12 = a4; v14 = a6; v15 = 0; dword_ACEB14 = a4; dword_ACEB18 = a5; dword_ACEB1C = a6; v8 = sub_7549E0("[From %s] : %s", v10, a7); sub_604EE0(v7[176], (int)v8); v9 = sub_7549E0("[From %s] : %s", v10, a7); sub_600A00((_DWORD **)v7[177], (int)v9); } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // B92008: using guessed type char byte_B92008; //----- (00493120) -------------------------------------------------------- void __thiscall sub_493120(char **this, int a2, int a3, int a4, int a5, int a6, int a7) { char **v7; // esi char *v8; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v7 = this; v10 = a3; *(_DWORD *)v9 = a2; v12 = a5; v11 = a4; v13 = a6; v14 = 0; v8 = sub_7549E0("{color,#FFFF00,[%s]} : %s", v9, a7); sub_604E70(v7[176], (int)v8); } //----- (00493190) -------------------------------------------------------- char __thiscall sub_493190(_BYTE *this, char a2) { char result; // al result = a2; this[2556] = a2; return result; } //----- (004931A0) -------------------------------------------------------- _DWORD *__thiscall sub_4931A0(int *this) { bool v1; // sf int v2; // esi int v3; // edi _DWORD *result; // eax v1 = this[4]-- - 1 < 0; if ( v1 ) this[4] = 0; v2 = this[4]; v3 = *this; if ( v2 >= (this[1] - *this) / 28 ) return 0; result = (_DWORD *)(v3 + 28 * v2); if ( *(_DWORD *)(v3 + 28 * v2 + 20) >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (004931F0) -------------------------------------------------------- _DWORD *__thiscall sub_4931F0(int *this) { int v1; // edi int v2; // esi signed int v3; // ecx _DWORD *result; // eax ++this[4]; v1 = *this; v2 = this[1] - *this; if ( this[4] >= v2 / 28 ) this[4] = v2 / 28 - 1; v3 = this[4]; if ( v3 <= -1 ) return 0; result = (_DWORD *)(v1 + 28 * v3); if ( *(_DWORD *)(v1 + 28 * v3 + 20) >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (00493240) -------------------------------------------------------- void __thiscall sub_493240(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ecx const char *v3; // eax const CHAR *v4; // eax v1 = this; v2 = (_DWORD **)this[176]; if ( v2 && (unsigned __int8)sub_604E00(v2) && !sub_605CF0((_DWORD *)v1[176]) ) { v3 = (const char *)sub_6057B0((_DWORD **)v1[176]); if ( strchr(v3, 9) ) { sub_605D40((_DWORD **)v1[176], (int)&unk_9BAFB6); v4 = sub_4090F0(239409453); sub_492060(v1, (int)v4); } } } //----- (004932B0) -------------------------------------------------------- bool __usercall sub_4932B0@(int a1@, char *a2, int a3) { const char *v3; // eax size_t v5; // kr00_4 v3 = sub_40C190(a1); if ( !v3 || !strcmp(v3, (const char *)&unk_9BAFB7) ) return 0; v5 = strlen(v3); *(_DWORD *)a3 = v5; return strncmp(a2, v3, v5) == 0; } //----- (00493330) -------------------------------------------------------- char __thiscall sub_493330(_DWORD *this, int a2, char a3) { const char *v3; // eax char *i; // esi char v5; // al int v6; // ecx char *v7; // edx char v8; // al int v9; // ecx char *v10; // edx int v11; // eax __int16 v12; // di char *v13; // eax char v15; // al int v16; // ecx char *v17; // edx int *v18; // eax int v19; // [esp-20h] [ebp-44Ch] int v20; // [esp-1Ch] [ebp-448h] int v21; // [esp-18h] [ebp-444h] int v22; // [esp-14h] [ebp-440h] int v23; // [esp-10h] [ebp-43Ch] _DWORD *v24; // [esp+10h] [ebp-41Ch] char v25; // [esp+14h] [ebp-418h] char v26; // [esp+28h] [ebp-404h] char v27; // [esp+29h] [ebp-403h] char v28; // [esp+128h] [ebp-304h] char v29; // [esp+129h] [ebp-303h] char v30; // [esp+228h] [ebp-204h] char v31; // [esp+229h] [ebp-203h] char v32; // [esp+328h] [ebp-104h] char v33; // [esp+329h] [ebp-103h] v24 = this; if ( a3 ) v3 = sub_40C190(-1584543809); else v3 = sub_40C190(875891470); for ( i = (char *)(strlen(v3) + a2); *i == 32; ++i ) ; v28 = 0; memset(&v29, 0, 0xFEu); v5 = *i; v6 = 0; if ( *i != 32 ) { v7 = (char *)(&v28 - i); while ( v5 ) { i[(_DWORD)v7] = v5; v5 = (i++)[1]; ++v6; if ( v5 == 32 ) goto LABEL_10; } v13 = (char *)sub_40C190(-434300655); goto LABEL_20; } LABEL_10: for ( *(&v28 + v6) = 0; *i == 32; ++i ) ; v26 = 0; memset(&v27, 0, 0xFEu); v8 = *i; v9 = 0; if ( *i != 32 ) { v10 = (char *)(&v26 - i); while ( v8 ) { i[(_DWORD)v10] = v8; v8 = (i++)[1]; ++v9; if ( v8 == 32 ) goto LABEL_16; } v13 = (char *)sub_40C190(-434235119); goto LABEL_20; } LABEL_16: *(&v26 + v9) = 0; v11 = atoi(&v26); v12 = v11; if ( a3 && !v11 ) { v13 = (char *)sub_40C190(-434169583); LABEL_20: sub_462CA0(1, v13); return 0; } sprintf(&v26, "%i", v11); for ( ; *i == 32; ++i ) ; v32 = 0; memset(&v33, 0, 0xFEu); v15 = *i; v16 = 0; if ( *i != 32 ) { v17 = (char *)(&v32 - i); while ( v15 ) { i[(_DWORD)v17] = v15; v15 = (i++)[1]; ++v16; if ( v15 == 32 ) goto LABEL_28; } v13 = (char *)sub_40C190(-434104047); goto LABEL_20; } LABEL_28: *(&v32 + v16) = 0; if ( &v32 + strlen(&v32) + 1 == &v33 ) { v13 = (char *)sub_40C190(-434038511); goto LABEL_20; } v30 = 0; memset(&v31, 0, 0xFEu); sprintf(&v30, "%s", i); if ( &v30 + strlen(&v30) + 1 == &v31 ) { v13 = (char *)sub_40C190(-433972975); goto LABEL_20; } v18 = (int *)sub_416970(&v25, &v28); v19 = *v18; v20 = v18[1]; v21 = v18[2]; v22 = v18[3]; v23 = v18[4]; if ( a3 ) sub_4C8870(v24, v19, v20, v21, v22, v23, v12, (int)&v32, (int)&v30); else sub_4C8AD0(v24, v19, v20, v21, v22, v23, v12, (int)&v32, (int)&v30); return 1; } //----- (004935F0) -------------------------------------------------------- char *__thiscall sub_4935F0(int this) { int v2; // eax int v3; // edx _DWORD *i; // eax _DWORD *v5; // eax if ( !*(_DWORD *)(this + 8) ) return 0; v2 = *(_DWORD *)(this + 16); if ( v2 ) *(_DWORD *)(this + 16) = v2 - 1; v3 = *(_DWORD *)(this + 16); for ( i = **(_DWORD ***)(this + 4); v3; i = (_DWORD *)*i ) --v3; v5 = i + 2; if ( v5[5] >= 0x10u ) v5 = (_DWORD *)*v5; return sub_7549E0("%s", v5); } //----- (00493630) -------------------------------------------------------- char *__thiscall sub_493630(int this) { unsigned int v1; // edx unsigned int v3; // eax int v4; // edx _DWORD *i; // eax _DWORD *v6; // eax v1 = *(_DWORD *)(this + 8); if ( !v1 ) return 0; v3 = *(_DWORD *)(this + 16) + 1; if ( v3 < v1 ) *(_DWORD *)(this + 16) = v3; v4 = *(_DWORD *)(this + 16); for ( i = **(_DWORD ***)(this + 4); v4; i = (_DWORD *)*i ) --v4; v6 = i + 2; if ( v6[5] >= 0x10u ) v6 = (_DWORD *)*v6; return sub_7549E0("%s", v6); } //----- (00493670) -------------------------------------------------------- char __thiscall sub_493670(_DWORD ***this) { _DWORD ***v1; // edi _DWORD *v2; // eax const char *v3; // esi char *v4; // eax v1 = this; LOBYTE(v2) = sub_604E00(this[176]); if ( (_BYTE)v2 ) { v3 = (const char *)sub_6057B0(v1[176]); if ( !_stricmp(v3, "/r ") || (v2 = (_DWORD *)strcmp(v3, (const char *)&unk_9BB1CC)) == 0 ) { v2 = v1[642]; if ( v2 ) { v1[644] = (_DWORD **)((char *)v2 - 1); v2 = v1[641][1] + 2; if ( v1[641][1][7] >= 0x10u ) v2 = (_DWORD *)*v2; if ( v2 ) { v4 = sub_7549E0("/w %s ", v2); LOBYTE(v2) = sub_605D40(v1[176], (int)v4); } } } } return (char)v2; } //----- (00493720) -------------------------------------------------------- char __thiscall sub_493720(_DWORD ***this) { _DWORD ***v1; // ebx _DWORD *v2; // eax const char *v3; // esi char *v4; // eax _BYTE *v5; // ecx char v6; // al char *v7; // ST08_4 char *v8; // eax char *v9; // ST08_4 v1 = this; LOBYTE(v2) = sub_604E00(this[176]); if ( !(_BYTE)v2 ) { v1[640] = 0; return (char)v2; } if ( v1[640] == (_DWORD **)2 && !strlen((const char *)sub_6057B0(v1[176])) ) v1[640] = 0; v2 = v1[640]; if ( !v2 ) { v3 = (const char *)sub_6057B0(v1[176]); if ( !_stricmp(v3, "/w ") || (v2 = (_DWORD *)strcmp(v3, (const char *)&unk_9BB1E0)) == 0 ) { v2 = v1[642]; if ( v2 ) { v1[644] = (_DWORD **)((char *)v2 - 1); v2 = v1[641][1] + 2; if ( v1[641][1][7] >= 0x10u ) v2 = (_DWORD *)*v2; if ( v2 ) { v4 = sub_7549E0("/w %s ", v2); LOBYTE(v2) = sub_605D40(v1[176], (int)v4); v1[640] = (_DWORD **)1; } } } return (char)v2; } if ( v2 != (_DWORD *)1 ) return (char)v2; v5 = (_BYTE *)dword_ACDC84; v6 = *(_BYTE *)(dword_ACDC84 + 48); if ( v6 & 2 && !(*(_BYTE *)(dword_ACDC84 + 80) & 2) ) { v7 = sub_4935F0((int)(v1 + 640)); v8 = sub_7549E0("/w %s ", v7); LABEL_22: sub_605D40(v1[176], (int)v8); v5 = (_BYTE *)dword_ACDC84; goto LABEL_23; } if ( v6 & 0x40 && !(*(_BYTE *)(dword_ACDC84 + 80) & 0x40) ) { v9 = sub_493630((int)(v1 + 640)); v8 = sub_7549E0("/w %s ", v9); goto LABEL_22; } LABEL_23: if ( v5[34] & 0x40 && !(v5[66] & 0x40) ) { sub_605D40(v1[176], (int)"/w "); v1[640] = (_DWORD **)2; v5 = (_BYTE *)dword_ACDC84; } v2 = 0; while ( !*((_BYTE *)v2 + (_DWORD)v5 + 33) ) { v2 = (_DWORD *)((char *)v2 + 1); if ( (unsigned int)v2 >= 0x20 ) return (char)v2; } if ( !(v5[48] & 0x42) && !(v5[34] & 0x40) ) v1[640] = (_DWORD **)2; return (char)v2; } // ACDC84: using guessed type int dword_ACDC84; //----- (004938F0) -------------------------------------------------------- char __thiscall sub_4938F0(void *this, char *a2) { char *v2; // esi int v3; // ebx BYTE *v4; // esi BYTE v5; // al char *i; // esi char v8; // al BYTE v9; // al BYTE v10; // al BYTE v11; // al BYTE v12; // al const char *j; // esi const char *v14; // eax const char *v15; // eax _DWORD *v16; // eax int v17; // eax char *v18; // esi int v19; // edi BYTE v20; // al int v21; // eax void **v22; // eax int *v23; // eax int v24; // ecx int v25; // eax char *v26; // eax int v27; // ecx char *v28; // eax char *v29; // eax float *v30; // eax float *v31; // eax float *v32; // esi float *v33; // eax int v34; // ecx int v35; // edx int v36; // eax char v37; // al int v38; // ecx char *v39; // esi float *v40; // esi unsigned __int16 v41; // ax char *v42; // eax char *v43; // eax char *v44; // eax char *v45; // [esp-4h] [ebp-64h] signed __int64 v46; // [esp+4h] [ebp-5Ch] int v47; // [esp+Ch] [ebp-54h] float v48; // [esp+10h] [ebp-50h] float v49[2]; // [esp+14h] [ebp-4Ch] float v50[3]; // [esp+28h] [ebp-38h] int v51; // [esp+34h] [ebp-2Ch] float v52; // [esp+38h] [ebp-28h] float v53; // [esp+3Ch] [ebp-24h] float v54; // [esp+40h] [ebp-20h] int v55; // [esp+44h] [ebp-1Ch] char *v56; // [esp+48h] [ebp-18h] char v57[4]; // [esp+4Ch] [ebp-14h] int v58; // [esp+50h] [ebp-10h] int v59; // [esp+54h] [ebp-Ch] char v60; // [esp+58h] [ebp-8h] v2 = a2; v3 = (int)this; if ( sub_4932B0(-1751598159, a2, (int)&v55) && *(_DWORD *)(v3 + 148) >= 100 ) { v4 = (BYTE *)&a2[v55]; v5 = a2[v55]; if ( a2[v55] == 32 ) goto LABEL_213; while ( v5 ) { if ( IsDBCSLeadByte(v5) && v4[1] ) v4 += 2; else ++v4; v5 = *v4; if ( *v4 == 32 ) goto LABEL_12; } if ( *v4 == 32 ) { LABEL_213: do LABEL_12: ++v4; while ( *v4 == 32 ); } sub_4B76A0((_DWORD *)v3, v4); return 1; } if ( !strncmp(a2, "note", 4u) && *(_DWORD *)(v3 + 148) >= 100 ) { for ( i = a2 + 4; *i == 32; ++i ) ; sub_4B76A0((_DWORD *)v3, i); return 1; } if ( !strncmp(a2, "goto", 4u) && *(_DWORD *)(v3 + 148) >= 100 ) { v8 = *a2; if ( *a2 == 32 ) goto LABEL_214; while ( v8 ) { if ( IsDBCSLeadByte(v8) && v2[1] ) v2 += 2; else ++v2; v8 = *v2; if ( *v2 == 32 ) goto LABEL_30; } if ( *v2 == 32 ) { LABEL_214: do LABEL_30: ++v2; while ( *v2 == 32 ); } *(float *)&v51 = atof(v2); v9 = *v2; if ( *v2 == 32 ) goto LABEL_215; while ( v9 ) { if ( IsDBCSLeadByte(v9) && v2[1] ) v2 += 2; else ++v2; v9 = *v2; if ( *v2 == 32 ) goto LABEL_40; } if ( *v2 == 32 ) { LABEL_215: do LABEL_40: ++v2; while ( *v2 == 32 ); } v52 = atof(v2); sub_69AD10((float *)byte_ADB468, *(float *)&v51, v52, (int)&v51); sub_4A1330((_DWORD *)v3, (int)&v51, 1); } if ( strncmp(v2, "amblight", 8u) || *(_DWORD *)(v3 + 148) < 100 ) { if ( !strncmp(v2, "fdel", 4u) && *(_DWORD *)(v3 + 148) >= 100 ) { for ( j = v2 + 4; *j == 32; ++j ) ; *(float *)&v55 = COERCE_FLOAT((signed __int64 *)((char *)&v46 + 4)); v46 = 20i64; v49[1] = 0.0; v49[0] = 0.0; v48 = 0.0; v47 = 0; strncpy((char *)&v46 + 4, j, 0x14u); sub_4C1CB0((_DWORD *)v3, SHIDWORD(v46), v47, SLODWORD(v48), SLODWORD(v49[0]), SLODWORD(v49[1])); return 1; } if ( !strncmp(v2, "action", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { sub_4A5280((_DWORD *)v3); return 1; } if ( !strncmp(v2, "go", 2u) && *(_DWORD *)(v3 + 148) >= 100 ) { sub_4A5650(v3, v3, 100); return 1; } if ( !strncmp(v2, "showchr", 7u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_WORD *)(*((_DWORD *)dword_AD8EBC + 175) + 28) &= 0xFFFEu; return 1; } if ( !strncmp(v2, "hidechr", 7u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_WORD *)(*((_DWORD *)dword_AD8EBC + 175) + 28) |= 1u; return 1; } if ( !strncmp(v2, "zoomrate", 8u) && *(_DWORD *)(v3 + 148) >= 50 ) { v56 = v2 + 8; sub_496500(&v56); *(float *)&v55 = atof(v56); sub_692EB0((float *)byte_ADB468, *(float *)&v55); return 1; } if ( !strncmp(v2, "killme", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) terminate(); if ( !strncmp(v2, "zoommin", 7u) && *(_DWORD *)(v3 + 148) >= 50 ) { v56 = v2 + 7; sub_496500(&v56); *(float *)&v55 = atof(v56); sub_692ED0((float *)byte_ADB468, *(float *)&v55); return 1; } if ( !strncmp(v2, "zoommax", 7u) && *(_DWORD *)(v3 + 148) >= 50 ) { v56 = v2 + 7; sub_496500(&v56); *(float *)&v55 = atof(v56); sub_692EF0((float *)byte_ADB468, *(float *)&v55); return 1; } if ( !strncmp(v2, "ton", 3u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(v3 + 2656) = 1; return 1; } if ( !strncmp(v2, "toff", 4u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(v3 + 2656) = 0; return 1; } LODWORD(v49[1]) = strlen(sub_40C190(875891470)); v14 = sub_40C190(875891470); if ( !strncmp(v2, v14, LODWORD(v49[1])) && *(_DWORD *)(v3 + 148) >= 100 ) return sub_493330((_DWORD *)v3, (int)v2, 0); LODWORD(v49[1]) = strlen(sub_40C190(-1584543809)); v15 = sub_40C190(-1584543809); if ( !strncmp(v2, v15, LODWORD(v49[1])) && *(_DWORD *)(v3 + 148) >= 100 ) return sub_493330((_DWORD *)v3, (int)v2, 1); if ( !strncmp(v2, "GM", 2u) && *(_DWORD *)(v3 + 148) >= 20 ) { if ( *(_DWORD *)(v3 + 1132) ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 1132)); v16 = *(_DWORD **)(v3 + 1136); } else { if ( strncmp(v2, "ShopWin", 7u) || *(_DWORD *)(v3 + 148) < 100 ) { if ( !strcmp(v2, "SendDT") && *(_DWORD *)(v3 + 148) >= 100 ) { sub_4B72F0((_DWORD *)v3); return 1; } if ( !strncmp(v2, "timetest", 8u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 8; sub_496500(&v56); v17 = atoi(v56); sub_496590(&byte_B68508, v17 != 0); return 1; } if ( !strncmp(v2, "time", 4u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 4; sub_496500(&v56); v18 = v56; v19 = atoi(v56); v20 = *v18; if ( *v18 != 32 ) { do { if ( !v20 ) break; if ( IsDBCSLeadByte(v20) && v18[1] ) v18 += 2; else ++v18; v20 = *v18; } while ( *v18 != 32 ); v56 = v18; } sub_496500(&v56); v21 = atoi(v56); sub_4965F0(&byte_B68508, v19, v21); return 1; } if ( !strncmp(v2, "onedaytime", 0xAu) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 10; sub_496500(&v56); *(float *)&v55 = atof(v56); sub_496520((float *)&byte_B68508, *(float *)&v55); return 1; } if ( !strcmp(v2, "run15") && *(_DWORD *)(v3 + 148) >= 100 ) { v22 = sub_4967C0(); sub_6D0F30((char **)v22, 15, 0, 0.0); return 1; } if ( !strcmp(v2, "effecton") && *(_DWORD *)(v3 + 148) >= 50 ) { byte_AB58AB = 1; return 1; } if ( !strcmp(v2, "effectoff") && *(_DWORD *)(v3 + 148) >= 50 ) { byte_AB58AB = 0; return 1; } if ( !strncmp(v2, "getdir", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 220))(&v51); v23 = sub_439D70(byte_ADB468, v50); v24 = *v23; *(double *)v49 = v53; *(_DWORD *)v57 = v24; *(double *)&v47 = v52; *(double *)&v46 = *(float *)&v51; v45 = "%s %f %f %f"; } else { if ( strncmp(v2, "getpos", 6u) || *(_DWORD *)(v3 + 148) < 100 ) { if ( !strncmp(v2, "fogon", 5u) && *(_DWORD *)(v3 + 148) >= 50 ) { sub_694720((_DWORD **)byte_ADB468, 1); return 1; } if ( !strncmp(v2, "fogoff", 6u) && *(_DWORD *)(v3 + 148) >= 50 ) { sub_694720((_DWORD **)byte_ADB468, 0); return 1; } if ( !strncmp(v2, "dlighton", 8u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(dword_B670EC + 176) = 1; return 1; } if ( !strncmp(v2, "dlightoff", 9u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(dword_B670EC + 176) = 0; return 1; } if ( !strncmp(v2, "BeautyShop", 0xAu) && *(_DWORD *)(v3 + 148) >= 100 ) { sub_4A8C00((_DWORD *)v3); return 1; } if ( !strncmp(v2, "showHP", 6u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(*(_DWORD *)(v3 + 568) + 846) = 1; return 1; } if ( !strncmp(v2, "hideHP", 6u) && *(_DWORD *)(v3 + 148) >= 50 ) { *(_BYTE *)(*(_DWORD *)(v3 + 568) + 846) = 0; return 1; } if ( !strncmp(v2, "OpenKQ", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { v16 = *(_DWORD **)(v3 + 768); goto LABEL_122; } if ( !strncmp(v2, "Decal", 5u) && *(_DWORD *)(v3 + 148) >= 100 ) { v28 = sub_4199F0(); v29 = (char *)sub_401410(v28, "MineArea100.nif"); v30 = (float *)sub_8D03E0(v29, 0); v31 = sub_6A9ED0((int *)&unk_B683E8, v30); v32 = v31; if ( v31 ) { sub_6AA070(v31, 300.0); *(float *)&v55 = -(flt_ACCFCC + 1.0); sub_6A96C0(v32, *(float *)&v55); v33 = sub_653B10(dword_AD8EBC, v50); v34 = *(_DWORD *)v33; v35 = *((_DWORD *)v33 + 1); v36 = *((_DWORD *)v33 + 2); *((_DWORD *)v32 + 39) = v34; *((_DWORD *)v32 + 40) = v35; *((_DWORD *)v32 + 41) = v36; } } else if ( !strncmp(v2, "rideon", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 6; sub_496500(&v56); v37 = atoi(v56); v38 = *((_DWORD *)dword_AD8EBC + 1026); if ( v38 ) sub_4BFAE0((_DWORD *)v3, *(_WORD *)(v38 + 2916), v37); } else if ( !strncmp(v2, "rideoff", 7u) && *(_DWORD *)(v3 + 148) >= 100 ) { sub_4BFB30((_DWORD *)v3); } else if ( !strncmp(v2, "sound", 5u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 5; sub_496500(&v56); (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 200))(&v51); v39 = v56; sub_6BABB0(&dword_AB6520, (int)v56, (int)&v51); (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 200))(&v51); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 220))(v50); v40 = (float *)(unsigned __int16)atoi(v39); v41 = rand(); sub_6664B0(dword_AD8C90, v40, v41, (int)&v51, (int)v50, 0, 0); } else if ( !strncmp(v2, "sndmin", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 6; sub_496500(&v56); *(float *)&v56 = atof(v56); sub_6B5E90(dword_AB6530, *(float *)&v56); v54 = 0.0; *(float *)&v55 = 0.0; sub_6B5770((float *)dword_AB6530, (float *)&v55, &v54); v42 = sub_7549E0("min[ %f ], max [ %f ]", (_QWORD)v55, v54); sub_492060((_DWORD *)v3, (int)v42); } else if ( !strncmp(v2, "sndmax", 6u) && *(_DWORD *)(v3 + 148) >= 100 ) { v56 = v2 + 6; sub_496500(&v56); *(float *)&v56 = atof(v56); sub_6B5ED0(dword_AB6530, *(float *)&v56); *(float *)&v55 = 0.0; v54 = 0.0; sub_6B5770((float *)dword_AB6530, &v54, (float *)&v55); v43 = sub_7549E0("min[ %f ], max [ %f ]", v54, (_QWORD)v55); sub_492060((_DWORD *)v3, (int)v43); } else { if ( strncmp(v2, "sndinfo", 0xAu) || *(_DWORD *)(v3 + 148) < 100 ) return 0; *(float *)&v55 = 0.0; v54 = 0.0; sub_6B5770((float *)dword_AB6530, &v54, (float *)&v55); v44 = sub_7549E0("min[ %f ], max [ %f ]", v54, (_QWORD)v55); sub_492060((_DWORD *)v3, (int)v44); } return 1; } (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 200))(&v51); v23 = sub_439D70(byte_ADB468, v50); v27 = *v23; *(double *)v49 = v53; *(_DWORD *)v57 = v27; *(double *)&v47 = v52; *(double *)&v46 = *(float *)&v51; v45 = "%s %f %f %f"; } v58 = v23[1]; v25 = v23[2]; v60 = 0; v59 = v25; v26 = sub_7549E0(v45, v57, v46, v47, v48, v49[0], v49[1]); sub_492060((_DWORD *)v3, (int)v26); return 1; } v16 = *(_DWORD **)(v3 + 588); } if ( v16 ) { LABEL_122: sub_8F82A0(&unk_BA6B10, v16); return 1; } return 1; } *(float *)&v51 = 0.0; v52 = 0.0; v53 = 0.0; v10 = *v2; if ( *v2 == 32 ) goto LABEL_216; while ( v10 ) { if ( IsDBCSLeadByte(v10) && v2[1] ) v2 += 2; else ++v2; v10 = *v2; if ( *v2 == 32 ) goto LABEL_53; } if ( *v2 == 32 ) { LABEL_216: do LABEL_53: ++v2; while ( *v2 == 32 ); } *(float *)&v51 = atof(v2); v11 = *v2; if ( *v2 == 32 ) goto LABEL_217; while ( v11 ) { if ( IsDBCSLeadByte(v11) && v2[1] ) v2 += 2; else ++v2; v11 = *v2; if ( *v2 == 32 ) goto LABEL_63; } if ( *v2 == 32 ) { LABEL_217: do LABEL_63: ++v2; while ( *v2 == 32 ); } v52 = atof(v2); v12 = *v2; if ( *v2 == 32 ) goto LABEL_218; while ( v12 ) { if ( IsDBCSLeadByte(v12) && v2[1] ) v2 += 2; else ++v2; v12 = *v2; if ( *v2 == 32 ) goto LABEL_73; } if ( *v2 == 32 ) { LABEL_218: do LABEL_73: ++v2; while ( *v2 == 32 ); } v53 = atof(v2); sub_694750(byte_ADB468, &v51); return 1; } // AB58AB: using guessed type char byte_AB58AB; // AB6530: using guessed type int dword_AB6530; // ACCFCC: using guessed type float flt_ACCFCC; // B670EC: using guessed type int dword_B670EC; // B68508: using guessed type char byte_B68508; //----- (00494840) -------------------------------------------------------- _DWORD *__thiscall sub_494840(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = 0; this[4] = 0; *((_BYTE *)this + 20) = 1; return result; } //----- (00494860) -------------------------------------------------------- void __thiscall sub_494860(int *this) { int *v1; // esi v1 = this; if ( *this ) { sub_40ACB0(*this, this[1]); operator delete((void *)*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (004948F0) -------------------------------------------------------- void __thiscall sub_4948F0(int *this, void *a2) { int *v2; // ebx int v3; // eax void *v4; // [esp+10h] [ebp-2Ch] int v5; // [esp+20h] [ebp-1Ch] unsigned int v6; // [esp+24h] [ebp-18h] int v7; // [esp+38h] [ebp-4h] v2 = this; if ( *((_BYTE *)this + 20) ) { v3 = (this[1] - *this) / 28; if ( !v3 || sub_40C2F0( (unsigned __int8 *)(*this + 28 * v3 - 28), 0, *(_DWORD *)(*this + 28 * v3 - 28 + 16), (unsigned __int8 *)a2, strlen((const char *)a2)) ) { v6 = 15; v5 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, a2, strlen((const char *)a2)); v7 = 0; sub_40B060(v2, (const void **)&v4); if ( v6 >= 0x10 ) operator delete(v4); } } else { *((_BYTE *)this + 20) = 1; } } //----- (004949F0) -------------------------------------------------------- void __thiscall sub_4949F0(_DWORD *this, void *a2) { int **v2; // eax int *v3; // ebx void *v4; // esi char **v5; // edi unsigned int v6; // esi unsigned __int8 *v7; // eax unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // zf signed int v12; // eax char *v13; // esi int v14; // ST0C_4 char *v15; // ST08_4 char **v16; // eax char *v17; // ecx char *v18; // eax char *v19; // esi _DWORD *v20; // [esp+10h] [ebp-54h] bool v21; // [esp+1Bh] [ebp-49h] void *v22; // [esp+1Ch] [ebp-48h] int v23; // [esp+2Ch] [ebp-38h] unsigned int v24; // [esp+30h] [ebp-34h] void *v25; // [esp+38h] [ebp-2Ch] unsigned int v26; // [esp+48h] [ebp-1Ch] unsigned int v27; // [esp+4Ch] [ebp-18h] int v28; // [esp+60h] [ebp-4h] v2 = (int **)this[1]; v3 = *v2; v4 = a2; v5 = (char **)(this + 1); v20 = this; if ( *v2 == (int *)v2 ) { LABEL_17: v24 = 15; v23 = 0; LOBYTE(v22) = 0; sub_4018E0(&v22, v4, strlen((const char *)v4)); v13 = *v5; v14 = *((_DWORD *)*v5 + 1); v15 = *v5; v28 = 1; v16 = sub_496930(v15, v14, &v22); v17 = v5[1]; if ( (unsigned int)(153391688 - (_DWORD)v17) < 1 ) std::_Xlength_error("list too long"); v5[1] = v17 + 1; *((_DWORD *)v13 + 1) = v16; *(_DWORD *)v16[1] = v16; if ( v24 >= 0x10 ) operator delete(v22); while ( v20[2] >= 0x64u ) { v19 = *(char **)*v5; if ( v19 != *v5 ) { **((_DWORD **)v19 + 1) = *(_DWORD *)v19; *(_DWORD *)(*(_DWORD *)v19 + 4) = *((_DWORD *)v19 + 1); if ( *((_DWORD *)v19 + 7) >= 0x10u ) operator delete(*((void **)v19 + 2)); *((_DWORD *)v19 + 7) = 15; *((_DWORD *)v19 + 6) = 0; v19[8] = 0; operator delete(v19); --v5[1]; } } } else { while ( 1 ) { v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4018E0(&v25, v4, strlen((const char *)v4)); v6 = v3[6]; v7 = (unsigned __int8 *)(v3 + 2); if ( (unsigned int)v3[7] >= 0x10 ) v7 = *(unsigned __int8 **)v7; v8 = v26; if ( v26 >= v6 ) v8 = v3[6]; v9 = (unsigned __int8 *)v25; if ( v27 < 0x10 ) v9 = (unsigned __int8 *)&v25; v10 = sub_40C0B0(v9, v7, v8); v11 = v10 == 0; if ( !v10 ) { if ( v26 >= v6 ) v12 = v26 != v6; else v12 = -1; v11 = v12 == 0; } v21 = v11; v28 = -1; if ( v27 >= 0x10 ) operator delete(v25); if ( v21 ) break; v3 = (int *)*v3; v4 = a2; if ( v3 == (int *)*v5 ) goto LABEL_17; } v18 = *v5; if ( *v5 != (char *)v3 && v18 != (char *)*v3 ) sub_496740(v5, (int)v18, v5, (int)v3, *v3, 1u); } } //----- (00494C00) -------------------------------------------------------- char __thiscall sub_494C00(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // edi char *v4; // esi BYTE v5; // al const CHAR *v6; // eax char *v8; // esi BYTE v9; // al char *v10; // eax char *v11; // eax int v12; // esi _DWORD **v13; // ecx BYTE *v14; // esi BYTE v15; // al char *v16; // esi BYTE v17; // al int *v18; // eax char *v19; // esi BYTE v20; // al char *v21; // esi BYTE v22; // al const CHAR *v23; // eax bool v24; // zf char *v25; // edi int v26; // esi char *v27; // edi const CHAR *v28; // eax unsigned int v29; // kr00_4 BYTE v30; // al char *v31; // esi int v32; // eax int *v33; // eax float *v34; // esi BYTE v35; // al char *v36; // esi char *v37; // esi char *v38; // eax int v39; // ebx BYTE v40; // al _DWORD *v41; // eax _DWORD *v42; // ecx int v43; // eax char *v44; // esi char *v45; // eax BYTE v46; // al char *v47; // esi _DWORD *v48; // eax _DWORD *v49; // ecx int v50; // eax int v51; // [esp-10h] [ebp-188h] int v52; // [esp-Ch] [ebp-184h] int v53; // [esp-8h] [ebp-180h] int v54; // [esp-4h] [ebp-17Ch] float v55; // [esp+0h] [ebp-178h] int v56; // [esp+14h] [ebp-164h] int v57; // [esp+18h] [ebp-160h] char *v58; // [esp+1Ch] [ebp-15Ch] int v59; // [esp+20h] [ebp-158h] char v60; // [esp+24h] [ebp-154h] int v61; // [esp+30h] [ebp-148h] unsigned int v62; // [esp+34h] [ebp-144h] char v63; // [esp+38h] [ebp-140h] char v64[4]; // [esp+3Ch] [ebp-13Ch] int v65; // [esp+40h] [ebp-138h] int v66; // [esp+44h] [ebp-134h] int v67; // [esp+48h] [ebp-130h] float v68; // [esp+4Ch] [ebp-12Ch] char v69[256]; // [esp+50h] [ebp-128h] char v70; // [esp+150h] [ebp-28h] char v71; // [esp+164h] [ebp-14h] int v72; // [esp+174h] [ebp-4h] v2 = a2; v3 = this; v56 = (int)this; v58 = a2; if ( sub_4932B0(1131439703, a2, (int)&v57) ) { v4 = &a2[v57]; v5 = a2[v57]; if ( a2[v57] == 32 ) goto LABEL_255; while ( v5 ) { if ( IsDBCSLeadByte(v5) && v4[1] ) v4 += 2; else ++v4; v5 = *v4; if ( *v4 == 32 ) goto LABEL_11; } if ( *v4 == 32 ) { LABEL_255: do LABEL_11: ++v4; while ( *v4 == 32 ); } if ( !byte_B9E5CD && !byte_B9E5CC ) { if ( sub_718A50(&dword_B9E560) ) { v6 = sub_40A910(69861649); sub_492060((_DWORD *)v56, (int)v6); } else { sub_4C1490((_DWORD *)v56, v4); } return 1; } v68 = 0.0; v67 = 0; v66 = 0; v65 = 0; *(_DWORD *)v64 = 0; strncpy(v64, v4, 0x14u); sub_4CB290((_DWORD *)v56, *(int *)v64, v65, v66, v67, SLODWORD(v68)); return 1; } if ( !strncmp(a2, "contract", 8u) ) { v8 = &a2[v57]; v9 = a2[v57]; if ( a2[v57] == 32 ) goto LABEL_256; while ( v9 ) { if ( IsDBCSLeadByte(v9) && v8[1] ) v8 += 2; else ++v8; v9 = *v8; if ( *v8 == 32 ) goto LABEL_30; } if ( *v8 == 32 ) { LABEL_256: do LABEL_30: ++v8; while ( *v8 == 32 ); } sub_4C1490(v3, v8); return 1; } if ( !strncmp(a2, "server", 6u) ) { if ( !strcmp("GFT-GRM0", (const char *)&unk_B7C50C) ) { v55 = 3.1765652e-20; } else if ( !strcmp("GFT-GRM1", (const char *)&unk_B7C50C) ) { v55 = 1.2706261e-19; } else if ( !strcmp("GFT-ENG0", (const char *)&unk_B7C50C) ) { v55 = 5.0825043e-19; } else if ( !strcmp("GFT-GRM2", (const char *)&unk_B7C50C) ) { v55 = 2.0330017e-18; } else if ( !strcmp("GFT-GRM3", (const char *)&unk_B7C50C) ) { v55 = 8.1320068e-18; } else if ( !strcmp("GFT-GRM4", (const char *)&unk_B7C50C) ) { v55 = 3.2528027e-17; } else if ( !strcmp("GFT-FRA0", (const char *)&unk_B7C50C) ) { v55 = 1.3011211e-16; } else if ( !strcmp("GFT-GRM5", (const char *)&unk_B7C50C) ) { v55 = 5.2044844e-16; } else if ( !strcmp("GFT-SPA0", (const char *)&unk_B7C50C) ) { v55 = 2.0817937e-15; } else if ( !strcmp("GFT-FRA1", (const char *)&unk_B7C50C) ) { v55 = 8.327175e-15; } else if ( !strcmp("GFT-GRM6", (const char *)&unk_B7C50C) ) { v55 = 3.197741e-20; } else if ( !strcmp("GFT-ITA0", (const char *)&unk_B7C50C) ) { v55 = 1.2790964e-19; } else if ( !strcmp("GFT-ENG1", (const char *)&unk_B7C50C) ) { v55 = 5.1163856e-19; } else if ( !strcmp("GFT-GRM7", (const char *)&unk_B7C50C) ) { v55 = 2.0465542e-18; } else if ( !strcmp("GFT-FRA2", (const char *)&unk_B7C50C) ) { v55 = 8.1862169e-18; } else if ( !strcmp("ENID", (const char *)&unk_B7C50C) ) { v55 = 2.0330017e-18; } else if ( !strcmp("PAGEL", (const char *)&unk_B7C50C) ) { v55 = 1.2706261e-19; } else if ( !strcmp("ISYA", (const char *)&unk_B7C50C) ) { v55 = 3.1765652e-20; } else if ( !strcmp("JENIRA", (const char *)&unk_B7C50C) ) { v55 = 5.0825043e-19; } else { v55 = -8.384477e-34; } v55 = COERCE_FLOAT(sub_40C190(SLODWORD(v55))); v10 = (char *)sub_40C190(1194065829); v11 = sub_7549E0(v10, v55); v12 = (int)v11; if ( v3[176] ) sub_604420((int)v11); v13 = (_DWORD **)v3[177]; if ( v13 ) sub_600E20(v13, v12); return 1; } if ( sub_4932B0(-416867062, a2, (int)&v57) ) { v14 = (BYTE *)&a2[v57]; v15 = a2[v57]; if ( a2[v57] != 32 ) { do { if ( !v15 ) break; if ( IsDBCSLeadByte(v15) && v14[1] ) v14 += 2; else ++v14; v15 = *v14; } while ( *v14 != 32 ); } if ( sub_718A50(&dword_B9E560) ) sub_4BE160(v3); else sub_4C15B0(v3); return 1; } if ( sub_4932B0(825234002, a2, (int)&v57) ) { v16 = &a2[v57]; v17 = a2[v57]; v58 = &a2[v57]; if ( v17 != 32 ) { do { if ( !v17 ) break; if ( IsDBCSLeadByte(v17) && v16[1] ) v16 += 2; else ++v16; v17 = *v16; } while ( *v16 != 32 ); v58 = v16; } sub_496500(&v58); if ( byte_B9E5CC ) { v18 = (int *)sub_416970(v64, v58); sub_4CB990(v3, *v18, v18[1], v18[2], v18[3], v18[4]); } else { sub_4C1600(v3, v58); } return 1; } if ( sub_4932B0(-2089572196, a2, (int)&v57) ) { v19 = &a2[v57]; v20 = a2[v57]; v58 = &a2[v57]; if ( v20 != 32 ) { do { if ( !v20 ) break; if ( IsDBCSLeadByte(v20) && v19[1] ) v19 += 2; else ++v19; v20 = *v19; } while ( *v19 != 32 ); v58 = v19; } sub_496500(&v58); sub_4C1700(v3, v58); return 1; } if ( sub_4932B0(-84466138, a2, (int)&v57) ) { v21 = &a2[v57]; v22 = a2[v57]; v58 = &a2[v57]; if ( v22 != 32 ) { do { if ( !v22 ) break; if ( IsDBCSLeadByte(v22) && v21[1] ) v21 += 2; else ++v21; v22 = *v21; } while ( *v21 != 32 ); v58 = v21; } sub_496500(&v58); sub_4D7D50(v3, v58); return 1; } if ( sub_4932B0(-685441262, a2, (int)&v57) ) { if ( sub_718A50(&dword_B9E560) && !byte_B9E5CC ) { v23 = sub_40A910(826544367); sub_492060(v3, (int)v23); return 1; } if ( dword_B9DCC4 ) { sub_4BDE40(v3); return 1; } return 1; } if ( !sub_492530(a2, &v57) ) { if ( sub_492570(a2, &v57) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) sub_4D6C90(v3, v58); return 1; } if ( sub_4925B0(a2, &v57) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) sub_4D6F70(v3, v58); return 1; } if ( sub_4925F0(a2, &v57) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) sub_4D7A70(v3, v58); return 1; } if ( sub_492300(a2, &v57) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); v25 = v58; v57 = 0; sub_492180(v58, v69, &v57); v26 = v57; if ( v57 && (unsigned int)v57 <= 0x14 ) { v55 = COERCE_FLOAT(v69); v69[v57] = 0; sub_416970(v64, (char *)LODWORD(v55)); v27 = &v25[v26]; v24 = *v27 == 0; v58 = v27; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) { sub_4D66A0((_DWORD *)v56, *(int *)v64, v65, v66, v67, SLODWORD(v68), v58); sub_4949F0((_DWORD *)(v56 + 2560), v69); } return 1; } v55 = -0.0016414917; goto LABEL_157; } if ( sub_492630(&v57, a2) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); sub_4169E0(dword_ACEB0C, (int)&v70); v71 = 0; v29 = strlen(&v70); if ( !v29 || v29 > 0x14 ) { v55 = 246189.58; LABEL_157: v28 = sub_40C190(SLODWORD(v55)); sub_492060((_DWORD *)v56, (int)v28); return 1; } sub_416970(v64, &v70); if ( *v58 ) { sub_4D66A0((_DWORD *)v56, *(int *)v64, v65, v66, v67, SLODWORD(v68), v58); sub_4949F0((_DWORD *)(v56 + 2560), &v70); return 1; } return 1; } if ( !strncmp(a2, "friendship", 0xAu) ) { v30 = a2[10]; v31 = a2 + 10; v58 = a2 + 10; if ( !v30 ) return 1; if ( v30 != 32 ) { do { if ( !v30 ) break; if ( IsDBCSLeadByte(v30) && v31[1] ) v31 += 2; else ++v31; v30 = *v31; } while ( *v31 != 32 ); v58 = v31; } sub_496500(&v58); if ( *v58 ) { v57 = (int)&v51; sub_416970((char *)&v51, v58); sub_4C1AF0(v56, v51, v52, v53, v54, SLODWORD(v55)); return 1; } return 1; } if ( sub_492690(a2, &v57) ) { v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) { sub_4D63D0((_DWORD *)v56, v58); return 1; } return 1; } if ( !strncmp(a2, aAt, 6u) ) { sub_4A1650((float *)v56, *((_BYTE **)dword_AD8EBC + 1026)); return 1; } if ( !strncmp(a2, "looting", 7u) ) { sub_4E4D90((_DWORD *)v56, 0); return 1; } if ( strncmp(a2, "pm", 2u) ) { if ( !strncmp(a2, "trade", 5u) ) { v32 = sub_6645B0(dword_AD8C90, a2 + 6); if ( v32 && *(_BYTE *)(v32 + 2680) ) { sub_4A7670((_DWORD **)v56, v32); return 1; } return 1; } if ( !strncmp(a2, "whisper", 7u) ) { if ( a2[7] != 32 ) return 1; v62 = 15; v61 = 0; LOBYTE(v59) = 0; v72 = 0; sub_4018E0(&v59, "/w ", 3u); sub_401E30(&v59, a2 + 8); sub_401D10((int)&v59, " ", 1u); v33 = (int *)v59; if ( v62 < 0x10 ) v33 = &v59; sub_4A40B0((_DWORD *)v56, (int)v33); sub_636A10(&v59); return 1; } if ( !strncmp(a2, "stick", 5u) ) { v34 = (float *)v56; sub_8D06A0((float *)(v56 + 116), flt_ACCFCC); *(float *)(v56 + 136) = 1.0; sub_4DE8F0(v34, *((_DWORD *)dword_AD8EBC + 1026), COERCE_FLOAT(1)); return 1; } if ( !strncmp(a2, "assist", 6u) ) { sub_4DF0A0((_DWORD *)v56); return 1; } if ( !strncmp(a2, "autorun", 7u) ) { sub_4DF0F0((_DWORD *)v56); return 1; } if ( sub_4926D0(a2, &v57) ) return 1; if ( !strncmp(a2, "HPSton", 6u) ) { sub_4A6A00((void *)v56); return 1; } if ( !strncmp(a2, "SPSton", 6u) ) { sub_4A6A60((void *)v56); return 1; } if ( !strncmp(a2, "Ignore", 6u) ) { v35 = a2[6]; v36 = a2 + 6; v58 = a2 + 6; if ( !v35 ) return 1; if ( v35 != 32 ) { do { if ( !v35 ) break; if ( IsDBCSLeadByte(v35) && v36[1] ) v36 += 2; else ++v36; v35 = *v36; } while ( *v36 != 32 ); v58 = v36; } sub_496500(&v58); v37 = v58; if ( !*v58 || sub_491EE0(v58) ) return 1; sub_416970(v64, v37); v51 = *(_DWORD *)v64; v52 = v65; v53 = v66; v54 = v67; v55 = v68; if ( !sub_496720(*(_DWORD **)(v56 + 912), v64[0], v65, v66, v67, SLODWORD(v68)) ) { sub_4CA580((_DWORD *)v56, *(int *)v64, v65, v66, v67, SLODWORD(v68)); v38 = (char *)sub_40C190(1047758216); sub_4920B0(v56, v38, v37); return 1; } return 1; } if ( sub_492340(a2, &v57) ) { v39 = v56; if ( *(_DWORD *)(v56 + 5080) != 1 ) return 1; v40 = *a2; if ( *a2 != 32 ) { do { if ( !v40 ) break; if ( IsDBCSLeadByte(v40) && v2[1] ) v2 += 2; else ++v2; v40 = *v2; } while ( *v2 != 32 ); v58 = v2; } sub_496500(&v58); v41 = (_DWORD *)sub_680810(byte_AD9238); sub_4169E0(v41, (int)&v70); v42 = *(_DWORD **)(v56 + 768); v71 = 0; v43 = sub_60CDD0(v42); if ( sub_4E3810((_DWORD **)v56, v43) ) { v44 = v58; if ( strcmp(v58, (const char *)&unk_9BAFC2) ) { if ( strcmp(v58, &v70) && sub_60CF90(*(_DWORD ***)(v56 + 4992), v58) ) { v45 = &v70; LABEL_236: sub_5C3E80(*(_DWORD ***)(v39 + 4988), (int)v45); sub_5C3EE0(*(_DWORD ***)(v39 + 4988), (int)v44); sub_4BFF30((_DWORD *)v39); return 1; } } } } else if ( !strncmp(a2, "vote", 4u) ) { v39 = v56; if ( *(_DWORD *)(v56 + 5080) != 1 ) return 1; v46 = a2[4]; v47 = a2 + 4; v58 = a2 + 4; if ( v46 != 32 ) { do { if ( !v46 ) break; if ( IsDBCSLeadByte(v46) && v47[1] ) v47 += 2; else ++v47; v46 = *v47; } while ( *v47 != 32 ); v58 = v47; } sub_496500(&v58); v48 = (_DWORD *)sub_680810(byte_AD9238); sub_4169E0(v48, (int)&v60); v49 = *(_DWORD **)(v56 + 768); v63 = 0; v50 = sub_60CDD0(v49); if ( sub_4E3810((_DWORD **)v56, v50) ) { v44 = v58; if ( strcmp(v58, (const char *)&unk_9BAFC3) ) { if ( strcmp(v58, &v60) && sub_60CF90(*(_DWORD ***)(v56 + 4992), v58) ) { v45 = &v60; goto LABEL_236; } } } } } return 0; } v24 = a2[v57] == 0; v58 = &a2[v57]; if ( v24 ) return 1; sub_496500(&v58); if ( *v58 ) sub_4D69B0(v3, v58); return 1; } // ACCFCC: using guessed type float flt_ACCFCC; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; // 494C00: using guessed type char var_128[256]; //----- (00496030) -------------------------------------------------------- void __thiscall sub_496030(int this, char *a2, const char *a3, int a4) { char *v4; // esi bool v5; // zf int v6; // edi char v7; // al unsigned int v8; // eax char *i; // ecx _DWORD *v10; // ecx int v11; // edi const char *v12; // eax char v13; // al char *v14; // esi int v15; // edi char j; // al const char *v17; // eax char *v18; // ebx char *v19; // eax char v20; // al char *v21; // esi char *v22; // eax int v23; // esi char *v24; // eax int v25; // [esp+10h] [ebp-214h] int v26; // [esp+14h] [ebp-210h] char *v27; // [esp+18h] [ebp-20Ch] char v28; // [esp+1Eh] [ebp-206h] char v29; // [esp+1Fh] [ebp-205h] char v30; // [esp+20h] [ebp-204h] char v31[256]; // [esp+120h] [ebp-104h] v4 = a2; v5 = *a2 == 47; v6 = this; v26 = this; if ( v5 ) { v7 = a2[1]; if ( v7 == 119 || v7 == 87 ) { memset((void *)(this + 1300), 0, 0x400u); memcpy((void *)(v6 + 1300), a2, strlen(a2)); *(_BYTE *)(v6 + 2324) = 1; } } if ( *a2 ) { v8 = strlen(a2); for ( i = &a2[v8 - 1]; v8; --v8 ) { if ( *i != 32 ) break; *i-- = 0; } if ( *a2 ) { v10 = *(_DWORD **)(v6 + 704); if ( v10 && sub_605CF0(v10) ) { v11 = 0; memset(&v30, 0, 0x100u); memset(v31, 0, 0x100u); if ( *a2 ) { do { if ( !strncmp(v4, "{color,", 7u) ) { v12 = (const char *)sub_451700(v31); if ( v12 ) { strncat(&v30, v12, strlen(v12)); memset(v31, 0, 0x100u); v11 = 0; } strncat(v31, "{color,", 7u); v13 = v4[7]; v14 = v4 + 7; v15 = v11 + 7; if ( v13 ) { while ( v13 != 44 ) { ++v14; v31[v15] = v13; v13 = *v14; ++v15; if ( !*v14 ) goto LABEL_23; } for ( j = *v14; *v14; ++v15 ) { if ( j == 125 ) break; ++v14; v31[v15] = j; j = *v14; } } LABEL_23: v31[v15] = *v14; v4 = v14 + 1; strncat(&v30, v31, strlen(v31)); memset(v31, 0, 0x100u); v11 = 0; } else if ( IsDBCSLeadByte(*v4) ) { strncat(v31, v4, 2u); v4 += 2; v11 += 2; } else { v31[v11++] = *v4++; } } while ( *v4 ); } v17 = (const char *)sub_451700(v31); if ( v17 ) strncat(&v30, v17, strlen(v17)); v6 = v26; v18 = &v30; } else { v18 = (char *)sub_451700(a2); } LOBYTE(v25) = *v18; v28 = 0; if ( IsDBCSLeadByte(v25) || *v18 != 47 ) { switch ( (char)v25 ) { case 36: if ( !*(_BYTE *)(v6 + 145) ) break; v29 = sub_4938F0((void *)v6, v18 + 1); v20 = v28; goto LABEL_37; case 37: case 38: case 42: break; default: sub_4518A0(v18); break; } LABEL_39: if ( !a3 ) { if ( *v18 && !sub_4921E0(v18) ) { sub_4948F0((int *)(v6 + 2536), v18); sub_492740((_DWORD *)(v6 + 2536)); } LABEL_59: sub_4D6090((_DWORD *)v6, v18); return; } if ( sub_492300(a3 + 1, &v27) && sub_492280(v18) ) { if ( !sub_492210(v18) ) goto LABEL_52; sub_4948F0((int *)(v6 + 2536), &v27[(_DWORD)v18]); } else { if ( !*v18 || sub_4921E0(v18) ) { LABEL_52: v27 = strcpy(sub_7549E0(0), a3); strcat(v27, v18); v21 = v27; if ( sub_492150((BYTE *)v27, &v25) ) { v22 = &v21[v25]; v23 = v26; if ( sub_494C00((_DWORD *)v26, v22) ) return; v24 = (char *)sub_40C190(676950934); sub_4920B0(v23, v24); v6 = v23; } else { v6 = v26; } goto LABEL_59; } sub_4948F0((int *)(v6 + 2536), v18); } sub_492740((_DWORD *)(v6 + 2536)); goto LABEL_52; } v25 = 1; v29 = sub_494C00((_DWORD *)v6, v18 + 1); if ( !v29 ) { v19 = (char *)sub_40C190(676950934); sub_4920B0(v6, v19); } v20 = 1; LABEL_37: if ( v29 != 1 && v20 != 1 ) goto LABEL_39; } } } // 496030: using guessed type char var_104[256]; //----- (00496500) -------------------------------------------------------- _DWORD *__cdecl sub_496500(_DWORD *a1) { _DWORD *result; // eax for ( result = a1; *(_BYTE *)*a1 == 32; ++*a1 ) ; return result; } //----- (00496520) -------------------------------------------------------- void __thiscall sub_496520(float *this, float a2) { float *v2; // esi float v3; // ST08_4 v2 = this; this[21289] = this[21287]; this[21290] = this[21288]; this[21291] = flt_AB52A0; v3 = sub_6A17B0((int)this, flt_ACCFCC); flt_AB52A0 = a2; v2[21287] = v3; v2[21288] = flt_ACCFCC; } // AB52A0: using guessed type float flt_AB52A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00496590) -------------------------------------------------------- void __thiscall sub_496590(void *this, char a2) { int v2; // esi float v3; // ST0C_4 v2 = (int)this; v3 = sub_6A17B0((int)this, flt_ACCFCC); byte_B684FC = a2; *(float *)(v2 + 85012) = 0.0; *(float *)(v2 + 85012) = v3 - sub_6A17B0(v2, flt_ACCFCC); } // ACCFCC: using guessed type float flt_ACCFCC; // B684FC: using guessed type char byte_B684FC; //----- (004965F0) -------------------------------------------------------- int __thiscall sub_4965F0(void *this, int a2, int a3) { int v3; // esi float v4; // ST0C_4 int result; // eax v3 = (int)this; v4 = sub_6A17B0((int)this, flt_ACCFCC); byte_B684FC = 1; *(float *)(v3 + 85012) = 0.0; *(float *)(v3 + 85012) = v4 - sub_6A17B0(v3, flt_ACCFCC); result = a3 + 60 * a2; flt_B68500 = (double)(60 * result) * (flt_AB52A0 / 86400.0); return result; } // AB52A0: using guessed type float flt_AB52A0; // ACCFCC: using guessed type float flt_ACCFCC; // B684FC: using guessed type char byte_B684FC; // B68500: using guessed type float flt_B68500; //----- (00496680) -------------------------------------------------------- int __thiscall sub_496680(int this) { int v1; // esi v1 = this; *(_WORD *)(this + 4) = 0; *(_BYTE *)(this + 6) = 0; *(_BYTE *)(this + 10) = 0; *(_WORD *)(this + 8) = 0; *(_BYTE *)(this + 14) = 0; *(_WORD *)(this + 12) = 0; *(_WORD *)(this + 16) = 0; *(_BYTE *)(this + 18) = 0; *(_WORD *)(this + 20) = 0; *(_BYTE *)(this + 22) = 0; *(_WORD *)(this + 24) = 0; *(_BYTE *)(this + 26) = 0; *(_WORD *)(this + 28) = 0; *(_BYTE *)(this + 30) = 0; *(_WORD *)(this + 32) = 0; *(_BYTE *)(this + 34) = 0; *(_WORD *)(this + 36) = 0; *(_BYTE *)(this + 38) = 0; *(_WORD *)(this + 40) = 0; *(_BYTE *)(this + 42) = 0; memset(&unk_B9E0F0, 0, 0x64u); return v1; } //----- (004966F0) -------------------------------------------------------- int *sub_4966F0() { if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } return &dword_ACE484; } // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (00496720) -------------------------------------------------------- bool __thiscall sub_496720(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { return sub_74DA80(this + 90, &a2) != 0; } //----- (00496740) -------------------------------------------------------- int __thiscall sub_496740(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 153391688 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (004967C0) -------------------------------------------------------- void **sub_4967C0() { _DWORD *v0; // eax void **v2; // [esp+4h] [ebp-1Ch] char *v3; // [esp+10h] [ebp-10h] int v4; // [esp+1Ch] [ebp-4h] if ( !(dword_ACE4C4 & 1) ) { dword_ACE4C4 |= 1u; v4 = 0; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } dword_ACE4B8 = 0; v0 = operator new(0xCu); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_ACE4B4 = v0; *v0 = v0; *((_DWORD *)dword_ACE4B4 + 1) = dword_ACE4B4; dword_ACE4C0 = (int)&dword_ACE484; atexit(sub_9A17E0); } return &dword_ACE4B4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ACE4B8: using guessed type int dword_ACE4B8; // ACE4C0: using guessed type int dword_ACE4C0; // ACE4C4: using guessed type int dword_ACE4C4; //----- (004968A0) -------------------------------------------------------- void **__cdecl sub_4968A0(int a1, int a2, void *a3) { void **v3; // edi void **v4; // esi if ( a1 == a2 ) return (void **)a3; v3 = (void **)a3; v4 = (void **)(a1 + 20); do { if ( v3 != v4 - 5 ) { if ( (unsigned int)v3[5] >= 0x10 ) operator delete(*v3); v3[5] = (void *)15; v3[4] = 0; *(_BYTE *)v3 = 0; if ( (unsigned int)*v4 >= 0x10 ) { *v3 = *(v4 - 5); *(v4 - 5) = 0; } else { memcpy_0(v3, v4 - 5, (size_t)*(v4 - 1) + 1); } v3[4] = *(v4 - 1); v3[5] = *v4; *(v4 - 1) = 0; *v4 = 0; } v4 += 7; v3 += 7; } while ( v4 - 5 != (void **)a2 ); return v3; } //----- (00496930) -------------------------------------------------------- char **__stdcall sub_496930(char *a1, int a2, void *a3) { char **v3; // esi int v4; // edx _BYTE *v5; // ecx int v7; // [esp+0h] [ebp-30h] void **v8; // [esp+10h] [ebp-20h] void *v9; // [esp+1Ch] [ebp-14h] int *v10; // [esp+20h] [ebp-10h] int v11; // [esp+2Ch] [ebp-4h] v10 = &v7; v3 = (char **)operator new(0x24u); v9 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a1); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v4 = a2; *v3 = a1; v5 = v3 + 2; v11 = 0; v3[1] = (char *)v4; a1 = (char *)(v3 + 2); a2 = (int)(v3 + 2); LOBYTE(v11) = 1; if ( v3 != (char **)-8 ) { v3[6] = 0; v3[7] = (char *)15; *v5 = 0; sub_406450(v5, a3); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00496A00) -------------------------------------------------------- void sub_496A00() { char *v0; // esi int v1; // ecx int v2; // eax v0 = dword_AD8EBC; v1 = *((_DWORD *)dword_AD8EBC + 175); if ( v1 ) { v2 = (*(int (**)(void))(*(_DWORD *)v1 + 4))(); if ( v2 ) { while ( (char *)v2 != dword_BA6660 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return; } *(_BYTE *)(*((_DWORD *)v0 + 175) + 232) = 0; } } } //----- (00496A10) -------------------------------------------------------- void sub_496A10() { sub_6514A0((float *)dword_AD8EBC); } //----- (00496A20) -------------------------------------------------------- void sub_496A20() { sub_651500((float *)dword_AD8EBC); } //----- (00496A60) -------------------------------------------------------- signed int __cdecl sub_496A60(int a1) { signed int result; // eax switch ( a1 ) { case 9: case 21: result = 0; break; case 10: result = 2; break; default: result = 1; break; } return result; } //----- (00496AB0) -------------------------------------------------------- _BYTE *__thiscall sub_496AB0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax _BYTE *result; // eax v1 = this; v2 = sub_524E00(0); v1[17] = v2; (**((void (__stdcall ***)(int))v2 + 58))((int)(v1 + 2)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[17] + 256))(0); result = sub_8F2880((_BYTE *)v1[17], 0); v1[16] = 0; return result; } //----- (00496B90) -------------------------------------------------------- unsigned int __thiscall sub_496B90(int *this) { signed int v1; // eax signed int v2; // edi int *v3; // esi _DWORD *v4; // ebx int v5; // edx int *v6; // edi int v7; // ebx int *v8; // esi signed int v9; // edi unsigned int result; // eax v1 = HIBYTE(dword_B92034); v2 = 0; v3 = this; dword_AD0198 = HIBYTE(dword_B92034); if ( BYTE2(dword_B92034) ) { do { if ( v2 ) { if ( *((_BYTE *)&dword_B92038 + 3 * v2 + 2) ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[v2 + 163]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[v2 + 168]); v4 = (_DWORD *)v3[v2 + 168]; } else { sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[v2 + 168]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[v2 + 163]); v4 = (_DWORD *)v3[v2 + 163]; } v5 = *((unsigned __int8 *)&dword_B92038 + 3 * v2 + 1); } else { if ( BYTE2(dword_B92038) ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[163]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[168]); v4 = (_DWORD *)v3[168]; } else { sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[168]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[163]); v4 = (_DWORD *)v3[163]; } v5 = BYTE1(dword_B92038); } v4[87] = v5; sub_5A03D0(v4); sub_5A0350(v4); ++v2; } while ( v2 < BYTE2(dword_B92034) ); v1 = dword_AD0198; } if ( v1 < 4 ) { v6 = &v3[v1 + 169]; v7 = 4 - v1; do { sub_8F86A0(&unk_BA6B10, (_DWORD *)*(v6 - 5)); sub_8F86A0(&unk_BA6B10, (_DWORD *)*v6); ++v6; --v7; } while ( v7 ); } sub_5A0490(v3[163]); sub_5A3790((_DWORD *)v3[163]); sub_5A0490(v3[168]); sub_5A3790((_DWORD *)v3[168]); v8 = v3 + 169; v9 = 4; do { sub_5A0490(*(v8 - 5)); sub_5A3790((_DWORD *)*(v8 - 5)); sub_5A0490(*v8); result = sub_5A3790((_DWORD *)*v8); ++v8; --v9; } while ( v9 ); return result; } // AD0198: using guessed type int dword_AD0198; // B92034: using guessed type int dword_B92034; // B92038: using guessed type int dword_B92038; //----- (00496D40) -------------------------------------------------------- void __thiscall sub_496D40(char **this) { char **v1; // esi char *v2; // ecx _DWORD **v3; // edi signed int v4; // ebx v1 = this; if ( byte_AC9CCE ) { sub_556E70(this[145], 1); } else if ( byte_AC9CD0 ) { v2 = this[145]; sub_551F60(0); sub_557450(v1[145], 0); sub_556000((_DWORD **)v1[145]); } v3 = (_DWORD **)(v1 + 169); v4 = 4; do { sub_5A1820(v1[163]); sub_5A1820(v1[168]); sub_5A1820(*(v3 - 5)); sub_5A1820(*v3); ++v3; --v4; } while ( v4 ); } // AC9CCE: using guessed type char byte_AC9CCE; // AC9CD0: using guessed type char byte_AC9CD0; //----- (00496DD0) -------------------------------------------------------- char __thiscall sub_496DD0(int *this) { int *v1; // esi int *v2; // edi signed int v3; // ebx int v4; // eax int v5; // esi v1 = this; if ( this[138] ) sub_6BD4D0(this[138]); if ( v1[142] ) sub_6BD4D0(v1[142]); if ( v1[176] ) sub_6BD4D0(v1[176]); if ( v1[177] ) sub_6BD4D0(v1[177]); if ( v1[178] ) sub_6BD4D0(v1[178]); if ( v1[179] ) sub_6BD4D0(v1[179]); if ( v1[182] ) sub_6BD4D0(v1[182]); if ( v1[183] ) sub_6BD4D0(v1[183]); if ( v1[184] ) sub_6BD4D0(v1[184]); if ( v1[185] ) sub_6BD4D0(v1[185]); if ( v1[186] ) sub_6BD4D0(v1[186]); if ( v1[188] ) sub_6BD4D0(v1[188]); if ( v1[189] ) sub_6BD4D0(v1[189]); if ( v1[190] ) sub_6BD4D0(v1[190]); if ( v1[191] ) sub_6BD4D0(v1[191]); if ( v1[192] ) sub_6BD4D0(v1[192]); if ( v1[193] ) sub_6BD4D0(v1[193]); if ( v1[194] ) sub_6BD4D0(v1[194]); if ( v1[1277] ) sub_6BD4D0(v1[1277]); if ( v1[233] ) sub_6BD4D0(v1[233]); if ( v1[234] ) sub_6BD4D0(v1[234]); if ( v1[235] ) sub_6BD4D0(v1[235]); if ( v1[236] ) sub_6BD4D0(v1[236]); if ( v1[237] ) sub_6BD4D0(v1[237]); if ( v1[241] ) sub_6BD4D0(v1[241]); if ( v1[246] ) sub_6BD4D0(v1[246]); if ( v1[247] ) sub_6BD4D0(v1[247]); if ( v1[248] ) sub_6BD4D0(v1[248]); if ( v1[253] ) sub_6BD4D0(v1[253]); if ( v1[258] ) sub_6BD4D0(v1[258]); if ( v1[143] ) sub_6BD4D0(v1[143]); if ( v1[144] ) sub_6BD4D0(v1[144]); if ( v1[163] ) sub_6BD4D0(v1[163]); if ( v1[168] ) sub_6BD4D0(v1[168]); if ( v1[267] ) sub_6BD4D0(v1[267]); v2 = v1 + 169; v3 = 4; do { if ( *(v2 - 5) ) sub_6BD4D0(*(v2 - 5)); v4 = *v2; if ( *v2 ) LOBYTE(v4) = sub_6BD4D0(*v2); ++v2; --v3; } while ( v3 ); v5 = v1[160]; if ( v5 ) LOBYTE(v4) = sub_6BD4D0(v5); return v4; } //----- (004970D0) -------------------------------------------------------- int __thiscall sub_4970D0(_DWORD *this, int a2) { int result; // eax result = 0; switch ( a2 ) { case 0: result = this[138]; break; case 1: result = this[142]; break; case 2: result = this[163]; break; case 3: result = this[168]; break; case 4: result = this[164]; break; case 5: result = this[165]; break; case 6: result = this[166]; break; case 7: result = this[167]; break; case 8: result = this[169]; break; case 9: result = this[170]; break; case 10: result = this[171]; break; case 11: result = this[172]; break; case 12: result = this[139]; break; case 13: result = this[141]; break; case 14: result = this[216]; break; case 15: result = this[227]; break; case 16: result = this[193]; break; case 17: result = this[192]; break; case 18: result = this[229]; break; case 19: result = this[178]; break; case 20: result = this[179]; break; case 21: result = this[182]; break; case 22: result = this[143]; break; case 23: result = this[176]; break; case 24: result = this[177]; break; case 25: result = this[160]; break; case 26: result = this[155]; break; default: return result; } return result; } //----- (00497270) -------------------------------------------------------- _DWORD *__thiscall sub_497270(_DWORD *this, void *a2) { char *v2; // ecx _DWORD *result; // eax v2 = (char *)this[149]; if ( v2 ) result = sub_599090(v2, a2); return result; } //----- (00497290) -------------------------------------------------------- void __thiscall sub_497290(_DWORD *this) { unsigned int v1; // ebx _DWORD *v2; // edi int v3; // esi int v4; // eax int v5; // ecx unsigned int v6; // [esp+2Ch] [ebp-4h] v1 = 0; v2 = this; v6 = 0; if ( dword_AB671E ) { while ( 1 ) { switch ( v1 ) { case 0u: v3 = v2[138]; goto LABEL_30; case 1u: v3 = v2[142]; goto LABEL_30; case 2u: v3 = v2[163]; goto LABEL_30; case 3u: v3 = v2[168]; goto LABEL_30; case 4u: v3 = v2[164]; goto LABEL_30; case 5u: v3 = v2[165]; goto LABEL_30; case 6u: v3 = v2[166]; goto LABEL_30; case 7u: v3 = v2[167]; goto LABEL_30; case 8u: v3 = v2[169]; goto LABEL_30; case 9u: v3 = v2[170]; goto LABEL_30; case 0xAu: v3 = v2[171]; goto LABEL_30; case 0xBu: v3 = v2[172]; goto LABEL_30; case 0xCu: v3 = v2[139]; goto LABEL_30; case 0xDu: v3 = v2[141]; goto LABEL_30; case 0xEu: v3 = v2[216]; goto LABEL_30; case 0xFu: v3 = v2[227]; goto LABEL_30; case 0x10u: v3 = v2[193]; goto LABEL_30; case 0x11u: v3 = v2[192]; goto LABEL_30; case 0x12u: v3 = v2[229]; goto LABEL_30; case 0x13u: v3 = v2[178]; goto LABEL_30; case 0x14u: v3 = v2[179]; goto LABEL_30; case 0x15u: v3 = v2[182]; goto LABEL_30; case 0x16u: v3 = v2[143]; goto LABEL_30; case 0x17u: v3 = v2[176]; goto LABEL_30; case 0x18u: v3 = v2[177]; goto LABEL_30; case 0x19u: v3 = v2[160]; goto LABEL_30; case 0x1Au: v3 = v2[155]; LABEL_30: if ( !v3 ) goto LABEL_41; if ( v3 == v2[176] ) { v4 = dword_AB67FA; v5 = dword_AB6802; } else { if ( v3 != v2[177] ) goto LABEL_38; v4 = dword_AB67FE; v5 = dword_AB6806; } if ( !v4 && !v5 ) return; (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 540))(v3, v4, v5); LABEL_38: (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v3 + 308))( v3, (signed int)(flt_AB6722[2 * v6] * (double)(unsigned int)xRight), (signed int)(flt_AB6726[2 * v1] * (double)(unsigned int)dword_AC2F78)); if ( v3 == v2[229] ) (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))( v3, xRight, dword_AC2F78, 0.0, 0.5); v1 = v6; LABEL_41: v6 = ++v1; if ( v1 >= dword_AB671E ) return; break; default: goto LABEL_41; } } } } // AB671E: using guessed type int dword_AB671E; // AB6722: using guessed type float flt_AB6722[]; // AB67FA: using guessed type int dword_AB67FA; // AB67FE: using guessed type int dword_AB67FE; // AB6802: using guessed type int dword_AB6802; // AB6806: using guessed type int dword_AB6806; //----- (00497510) -------------------------------------------------------- void __thiscall sub_497510(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // edi int v4; // ecx int v5; // edi v1 = this; v2 = this[584]; if ( v2 ) { sub_905F40(v2); v3 = v1[584]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[584] = 0; } } v4 = v1[585]; if ( v4 ) { if ( !*((_BYTE *)v1 + 2344) ) { sub_905F40(v4); v5 = v1[585]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v1[585] = 0; } } } } //----- (004975A0) -------------------------------------------------------- char __thiscall sub_4975A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx _DWORD *v3; // eax int v4; // edi v1 = this; v2 = 0; if ( !this[129] ) { v3 = operator new(0x20u); if ( v3 ) v2 = sub_435790(v3); v4 = v1[129]; if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[129] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } *(_DWORD *)(v1[129] + 8) = v1; } sub_435530((_DWORD *)v1[129], 11, 28, 1, 0, 0); sub_435530((_DWORD *)v1[129], 244, 53, 1, 0, 0); sub_435530((_DWORD *)v1[129], 29, 1, 1, 0, 0); sub_435530((_DWORD *)v1[129], 30, 59, 1, 0, 0); sub_435530((_DWORD *)v1[129], 31, 60, 1, 0, 0); sub_435530((_DWORD *)v1[129], 32, 61, 1, 0, 0); sub_435530((_DWORD *)v1[129], 33, 62, 1, 0, 0); sub_435530((_DWORD *)v1[129], 34, 63, 1, 0, 0); sub_435530((_DWORD *)v1[129], 35, 64, 1, 0, 0); sub_435530((_DWORD *)v1[129], 44, 15, 1, 0, 0); sub_435530((_DWORD *)v1[129], 45, 2, 1, 0, 0); sub_435530((_DWORD *)v1[129], 46, 3, 1, 0, 0); sub_435530((_DWORD *)v1[129], 47, 4, 1, 0, 0); sub_435530((_DWORD *)v1[129], 48, 5, 1, 0, 0); sub_435530((_DWORD *)v1[129], 49, 6, 1, 0, 0); sub_435530((_DWORD *)v1[129], 50, 7, 1, 0, 0); sub_435530((_DWORD *)v1[129], 51, 8, 1, 0, 0); sub_435530((_DWORD *)v1[129], 52, 9, 1, 0, 0); sub_435530((_DWORD *)v1[129], 53, 10, 1, 0, 0); sub_435530((_DWORD *)v1[129], 54, 11, 1, 0, 0); sub_435530((_DWORD *)v1[129], 55, 12, 1, 0, 0); sub_435530((_DWORD *)v1[129], 56, 13, 1, 0, 0); sub_435530((_DWORD *)v1[129], 57, 2, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 58, 3, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 59, 4, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 60, 5, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 61, 6, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 62, 7, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 63, 8, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 64, 9, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 65, 10, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 66, 11, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 67, 12, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 68, 13, 0, (_DWORD *)0x40, 0); sub_435530((_DWORD *)v1[129], 69, 2, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 70, 3, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 71, 4, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 72, 5, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 73, 6, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 74, 7, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 75, 8, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 76, 9, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 77, 10, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 78, 11, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 79, 12, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 80, 13, 0, (_DWORD *)1, 0); sub_435530((_DWORD *)v1[129], 81, 2, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 82, 3, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 83, 4, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 84, 5, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 85, 6, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 86, 7, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 87, 8, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 88, 9, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 89, 10, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 90, 11, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 91, 12, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 92, 13, 0, (_DWORD *)4, 0); sub_435530((_DWORD *)v1[129], 103, 44, 1, 0, 0); sub_435530((_DWORD *)v1[129], 104, 18, 1, 0, 0); sub_435530((_DWORD *)v1[129], 105, 16, 1, 0, 0); sub_435530((_DWORD *)v1[129], 106, 46, 1, 0, 0); sub_435530((_DWORD *)v1[129], 107, 23, 1, 0, 0); sub_435530((_DWORD *)v1[129], 108, 37, 1, 0, 0); sub_435530((_DWORD *)v1[129], 109, 47, 1, 0, 0); sub_435530((_DWORD *)v1[129], 110, 33, 1, 0, 0); sub_435530((_DWORD *)v1[129], 111, 50, 1, 0, 0); sub_435530((_DWORD *)v1[129], 162, 35, 1, 0, 0); sub_435530((_DWORD *)v1[129], 172, 48, 1, 0, 0); sub_435530((_DWORD *)v1[129], 173, 120, 1, 0, 0); sub_435530((_DWORD *)v1[129], 16, 38, 1, 0, 0); sub_435530((_DWORD *)v1[129], 112, 25, 1, 0, 0); sub_435530((_DWORD *)v1[129], 20, 45, 1, 0, 0); sub_435530((_DWORD *)v1[129], 192, 125, 1, 0, 0); sub_435530((_DWORD *)v1[129], 20, 45, 1, 0, 0); sub_435530((_DWORD *)v1[129], 245, 34, 1, 0, 0); sub_435530((_DWORD *)v1[129], 245, 24, 1, 0, 0); sub_435530((_DWORD *)v1[129], 245, 20, 1, 0, 0); sub_435530((_DWORD *)v1[129], 245, 19, 1, 0, 0); sub_435530((_DWORD *)v1[129], 245, 44, 1, 0, 0); return 1; } //----- (00497D70) -------------------------------------------------------- char __usercall sub_497D70@(int a1@, int a2@) { int v2; // esi char result; // al v2 = a1; sub_6BEDA0(); sub_6BE700(); if ( dword_AD8EBC ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() == 1 ) sub_654B20(dword_AD8EBC, 0); if ( dword_AD8EBC && dword_AD8EBC[1449] ) sub_6524E0((int)dword_AD8EBC, a2, 0); } result = (unsigned int)sub_665FD0(dword_AD8C90); if ( dword_AD8EBC ) result = sub_67DDD0(dword_AD8EBC); if ( *(_DWORD *)(v2 + 980) ) { sub_4B75F0((_DWORD *)v2); result = sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 980)); } *(_DWORD *)(v2 + 2512) = 0; return result; } //----- (00497E10) -------------------------------------------------------- char __thiscall sub_497E10(void *this) { void *v1; // esi float *v2; // eax float *v3; // eax char *v4; // ecx _BYTE *v5; // ecx v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 4) && byte_AC9CD4 ) { v4 = (char *)*((_DWORD *)v1 + 262); if ( v4 ) { if ( sub_61DB70(v4, 1u) ) sub_6ADD80(&unk_B91250, dword_AD8EBC, flt_ACCFCC); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 262)); } v5 = (_BYTE *)*((_DWORD *)v1 + 194); if ( v5 ) sub_6298F0(v5, 1u); sub_619E80(*((void **)v1 + 245), 111, 110, (void *)0xFFFF, 0, (void *)1); LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 245)); } return (char)v2; } // AC9CD4: using guessed type char byte_AC9CD4; // ACCFCC: using guessed type float flt_ACCFCC; // ACCFE0: using guessed type int dword_ACCFE0; //----- (00497F40) -------------------------------------------------------- char __thiscall sub_497F40(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx __int16 v5; // [esp+4h] [ebp-20h] int v6; // [esp+8h] [ebp-1Ch] int v7; // [esp+Ch] [ebp-18h] int v8; // [esp+10h] [ebp-14h] int v9; // [esp+14h] [ebp-10h] int v10; // [esp+18h] [ebp-Ch] int v11; // [esp+1Ch] [ebp-8h] v1 = this; v2 = this[585]; v5 = 28689; sub_905F90(v2, &v5, 2u); HIBYTE(dword_B92034) = dword_AD0198; BYTE2(dword_B92034) = 5; v6 = dword_B92030; v7 = dword_B92034; v9 = dword_B9203C; v8 = dword_B92038; v10 = dword_B92040; v3 = v1[585]; v11 = dword_B92044; sub_906000(v3, &v6, 0x18u); return sub_9060A0(v1[585]); } // AD0198: using guessed type int dword_AD0198; // B92030: using guessed type int dword_B92030; // B92034: using guessed type int dword_B92034; // B92038: using guessed type int dword_B92038; // B9203C: using guessed type int dword_B9203C; // B92040: using guessed type int dword_B92040; // B92044: using guessed type int dword_B92044; //----- (00497FE0) -------------------------------------------------------- char __thiscall sub_497FE0(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx unsigned int v3; // edi _DWORD *v4; // eax _DWORD **v5; // esi _DWORD *v6; // edx double v7; // st7 _DWORD *v8; // eax float v9; // ST18_4 int v10; // ecx __int16 v12; // [esp+10h] [ebp-198h] unsigned int v13; // [esp+14h] [ebp-194h] float v14; // [esp+18h] [ebp-190h] char v15; // [esp+1Ch] [ebp-18Ch] __int16 v16; // [esp+114h] [ebp-94h] v1 = this; v2 = this[585]; v12 = 28693; sub_905F90(v2, &v12, 2u); memset(&v15, 0, 0x188u); v3 = 0; if ( dword_AB671E ) { do { v4 = (_DWORD *)sub_4970D0(v1, v3); v5 = (_DWORD **)v4; if ( v4 ) { v6 = (_DWORD *)*v4; v14 = *(float *)&xRight; v13 = ((int (__thiscall *)(_DWORD *))v6[41])(v4); v7 = (double)(signed int)v13 / (double)LODWORD(v14); v8 = *v5; v13 = dword_AC2F78; v9 = v7; v14 = COERCE_FLOAT(((int (__thiscall *)(_DWORD **))v8[42])(v5)); v14 = (double)SLODWORD(v14) / (double)v13; flt_AB6722[2 * v3] = v9; flt_AB6726[2 * v3] = v14; if ( v5 == (_DWORD **)v1[176] ) { sub_6044C0(v5, &dword_AB67FA, &dword_AB6802); } else if ( v5 == (_DWORD **)v1[177] ) { sub_600F90(v5, &dword_AB67FE, &dword_AB6806); } } ++v3; } while ( v3 < dword_AB671E ); } qmemcpy(&v15, &dword_AB6718, 0xF8u); v10 = v1[585]; v16 = *((_WORD *)&dword_AB6718 + 124); sub_906000(v10, &v15, 0x188u); return sub_9060A0(v1[585]); } // AB6718: using guessed type int dword_AB6718; // AB671E: using guessed type int dword_AB671E; // AB6722: using guessed type float flt_AB6722[]; // AB67FA: using guessed type int dword_AB67FA; // AB67FE: using guessed type int dword_AB67FE; // AB6802: using guessed type int dword_AB6802; // AB6806: using guessed type int dword_AB6806; //----- (00498180) -------------------------------------------------------- char __thiscall sub_498180(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx __int16 v4; // [esp+Ch] [ebp-13Ch] char v5; // [esp+10h] [ebp-138h] v1 = this; v2 = this[585]; v4 = 28694; sub_905F90(v2, &v4, 2u); memset(&v5, 0, 0x134u); qmemcpy(&v5, &dword_AB6818, 0xF4u); sub_906000(v1[585], &v5, 0x134u); return sub_9060A0(v1[585]); } // AB6818: using guessed type int dword_AB6818; //----- (00498220) -------------------------------------------------------- char sub_498220() { char v0; // bl signed int v1; // edx char *v2; // eax char v3; // cl unsigned __int16 v5; // [esp+8h] [ebp-404h] char v6; // [esp+Ch] [ebp-400h] memset((char *)&v5 + 1, 0, 0x3FFu); v0 = byte_B92000; v5 = 29; v1 = 0; v2 = &v6; do { *((_WORD *)v2 - 1) = v1; switch ( (unsigned __int16)v1 ) { case 0u: v3 = BYTE2(dword_B91FFC); goto LABEL_26; case 1u: v3 = HIBYTE(dword_B91FFC); goto LABEL_26; case 2u: case 0x15u: *v2 = v0; break; case 3u: v3 = byte_B92001; goto LABEL_26; case 4u: v3 = byte_B92002; goto LABEL_26; case 5u: v3 = byte_B92003; goto LABEL_26; case 6u: v3 = byte_B92004; goto LABEL_26; case 7u: v3 = byte_B92005; goto LABEL_26; case 8u: v3 = byte_B92006; goto LABEL_26; case 9u: v3 = byte_B9202B; goto LABEL_26; case 0xAu: v3 = byte_B9202C; goto LABEL_26; case 0xBu: v3 = byte_B9202D; goto LABEL_26; case 0xCu: v3 = byte_B92008; goto LABEL_26; case 0xDu: v3 = byte_B92009; goto LABEL_26; case 0xEu: v3 = byte_B9200A; goto LABEL_26; case 0xFu: v3 = byte_B9200B; goto LABEL_26; case 0x10u: v3 = byte_B9200C; goto LABEL_26; case 0x11u: v3 = byte_B9200D; goto LABEL_26; case 0x13u: v3 = byte_B92026; goto LABEL_26; case 0x14u: v3 = byte_B92027; goto LABEL_26; case 0x16u: v3 = byte_B92028; goto LABEL_26; case 0x1Bu: v3 = byte_B9202E; goto LABEL_26; case 0x1Cu: v3 = byte_AB66F6; LABEL_26: *v2 = v3; break; default: break; } ++v1; v2 += 3; } while ( v1 < v5 ); return sub_6F36A0(&off_AB7F2C, 28, 59, &v5, 3 * v5 + 2); } // AB66F6: using guessed type char byte_AB66F6; // AB7F2C: using guessed type void **off_AB7F2C; // B91FFC: using guessed type int dword_B91FFC; // B92000: using guessed type char byte_B92000; // B92001: using guessed type char byte_B92001; // B92002: using guessed type char byte_B92002; // B92003: using guessed type char byte_B92003; // B92004: using guessed type char byte_B92004; // B92005: using guessed type char byte_B92005; // B92006: using guessed type char byte_B92006; // B92008: using guessed type char byte_B92008; // B92009: using guessed type char byte_B92009; // B9200A: using guessed type char byte_B9200A; // B9200B: using guessed type char byte_B9200B; // B9200C: using guessed type char byte_B9200C; // B9200D: using guessed type char byte_B9200D; // B92026: using guessed type char byte_B92026; // B92027: using guessed type char byte_B92027; // B92028: using guessed type char byte_B92028; // B9202B: using guessed type char byte_B9202B; // B9202C: using guessed type char byte_B9202C; // B9202D: using guessed type char byte_B9202D; // B9202E: using guessed type char byte_B9202E; //----- (00498400) -------------------------------------------------------- int __stdcall sub_498400(int a1, int a2) { int v2; // esi int v3; // esi int v4; // eax int v5; // edx unsigned int v6; // edi int result; // eax bool v8; // zf v2 = 0; if ( (_WORD)a2 != -1 ) { v3 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)a2) ) v4 = *(_DWORD *)(v5 + 4 * (unsigned __int16)a2); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v2 = v4; } v6 = 0; if ( !sub_49F550() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD948 + 4), v6); if ( result && *(_DWORD *)(result + 34) == a1 ) { if ( v2 ) { v8 = strcmp((const char *)(result + 38), (const char *)(v2 + 2)) == 0; } else { if ( !a1 ) return result; v8 = a1 == 2; } if ( v8 ) break; } if ( ++v6 >= sub_49F550() ) return 0; } return result; } // ACB230: using guessed type int dword_ACB230; // ACD948: using guessed type int dword_ACD948; //----- (004984E0) -------------------------------------------------------- char __thiscall sub_4984E0(_DWORD *this) { int v1; // ebx _DWORD *v2; // edi int v3; // esi int v5; // esi int v6; // ebx v1 = dword_AB7F34[dword_AB7F30]; v2 = this; v3 = this[584]; if ( v3 != v1 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[584] = v1; if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); } if ( !v2[584] ) return 0; v5 = v2[585]; v6 = dword_AB7F4C; if ( v5 != dword_AB7F4C ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v2[585] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } if ( !v2[585] ) return 0; sub_906260((_BYTE *)v2[584]); return 1; } // AB7F30: using guessed type int dword_AB7F30; // AB7F4C: using guessed type int dword_AB7F4C; //----- (004985A0) -------------------------------------------------------- int __usercall sub_4985A0@(int a1@, int a2@) { int v2; // edi int v3; // eax int v4; // eax void *v5; // ecx void *v6; // ecx int v7; // esi int v8; // eax float *v9; // esi int v10; // eax float v11; // ecx int v12; // ebx int (*v13)(void); // edx int v14; // eax int v15; // eax int v16; // ebx int v17; // eax int v18; // eax int v19; // edx int v20; // ebx int v21; // eax int v22; // ecx _DWORD **v23; // ecx double v24; // st7 int v25; // esi void (__thiscall *v26)(int, int *, int); // edx _DWORD **v27; // ecx double v28; // st7 int v29; // esi void (__thiscall *v30)(int, int *, int); // edx _DWORD **v31; // ecx int v32; // esi void (__thiscall *v33)(int, int *); // edx _DWORD **v34; // ecx int v35; // esi void (__thiscall *v36)(int, int *); // edx _DWORD **v37; // ecx int v38; // esi void (__thiscall *v39)(int, int *); // edx int v40; // eax int result; // eax int v42; // eax int v43; // [esp+218h] [ebp-34h] int v44; // [esp+224h] [ebp-28h] int v45; // [esp+228h] [ebp-24h] int v46; // [esp+22Ch] [ebp-20h] int v47; // [esp+230h] [ebp-1Ch] char v48; // [esp+234h] [ebp-18h] void (__thiscall **v49)(_DWORD, int); // [esp+238h] [ebp-14h] float v50; // [esp+23Ch] [ebp-10h] unsigned int v51; // [esp+240h] [ebp-Ch] float v52; // [esp+244h] [ebp-8h] int v53; // [esp+248h] [ebp-4h] v2 = a1; if ( *(_DWORD *)(a1 + 712) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(a1 + 712) + 236))(xRight, dword_AC2F78, 0.0, 0.5); if ( *(_DWORD *)(v2 + 736) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 736) + 236))(xRight, dword_AC2F78, 0.5, 0.5); if ( *(_DWORD *)(v2 + 904) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 904) + 236))(xRight, dword_AC2F78, 0.5, 0.5); if ( *(_DWORD *)(v2 + 740) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 740) + 236))(xRight, dword_AC2F78, 0.5, 0.5); v3 = *(_DWORD *)(v2 + 572); if ( v3 ) { v4 = *(_DWORD *)(v3 + 532); if ( v4 ) (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v4 + 236))(v4, xRight, dword_AC2F78, 0.5, 0.5); } v5 = *(void **)(v2 + 552); if ( v5 ) sub_49F570(v5, xRight, dword_AC2F78, 0.0, 0.0); v6 = *(void **)(v2 + 572); if ( v6 ) sub_49F5F0(v6, xRight, dword_AC2F78, 1.0, 0.0); v52 = 0.0; v53 = 0; if ( *(_DWORD *)(v2 + 652) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 652) + 236))(xRight, dword_AC2F78, 0.0, 1.0); if ( *(_BYTE *)(*(_DWORD *)(v2 + 652) + 1094) ) v53 = 1; } v43 = a2; if ( *(_DWORD *)(v2 + 672) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 672) + 236))(xRight, dword_AC2F78, 1.0, 0.0); v7 = **(_DWORD **)(v2 + 672); v8 = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v2 + 672) + 164))(160); (*(void (__thiscall **)(_DWORD, int))(v7 + 308))(*(_DWORD *)(v2 + 672), v8); if ( *(_BYTE *)(*(_DWORD *)(v2 + 672) + 1094) ) LODWORD(v52) = 1; } v9 = (float *)(v2 + 676); v51 = 4; do { if ( *((_DWORD *)v9 - 5) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**((_DWORD **)v9 - 5) + 236))(xRight, dword_AC2F78, 0.0, 1.0); v10 = (*(int (**)(void))(**((_DWORD **)v9 - 5) + 148))(); v11 = *(v9 - 5); v12 = v53 * v10; v49 = (void (__thiscall **)(_DWORD, int))(**((_DWORD **)v9 - 5) + 308); v13 = *(int (**)(void))(*(_DWORD *)LODWORD(v11) + 168); v50 = v11; v14 = v13(); v15 = (*(int (__stdcall **)(int))(*(_DWORD *)LODWORD(v50) + 164))(v14 - v12); (*v49)(*((_DWORD *)v9 - 5), v15); if ( *(_BYTE *)(*((_DWORD *)v9 - 5) + 1094) ) ++v53; } if ( *(_DWORD *)v9 ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)v9 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v16 = **(_DWORD **)v9; v17 = (*(int (__stdcall **)(signed int))(**(_DWORD **)v9 + 164))(160); (*(void (__thiscall **)(_DWORD, int))(v16 + 308))(*(_DWORD *)v9, v17); v18 = (*(int (**)(void))(**(_DWORD **)v9 + 144))(); v19 = **(_DWORD **)v9; v20 = LODWORD(v52) * v18; v49 = (void (__thiscall **)(_DWORD, int))(**(_DWORD **)v9 + 308); v21 = (*(int (__stdcall **)(signed int))(v19 + 164))(160); (*v49)(*(_DWORD *)v9, v21 - v20); if ( *(_BYTE *)(*(_DWORD *)v9 + 1094) ) ++LODWORD(v52); } ++v9; --v51; } while ( *(float *)&v51 != 0.0 ); v22 = *(_DWORD *)(*(_DWORD *)(v2 + 572) + 532); if ( v22 ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v22 + 236))(xRight, dword_AC2F78, 0.5, 0.5); v23 = *(_DWORD ***)(v2 + 704); if ( v23 ) { sub_6044C0(v23, &v48, (int *)&v49); LODWORD(v50) = dword_AC2F78 - (_DWORD)v49 - 100; v24 = (double)LODWORD(v50); v50 = *(float *)&dword_AC2F78; v25 = *(_DWORD *)(v2 + 704); v26 = *(void (__thiscall **)(int, int *, int))(*(_DWORD *)v25 + 208); v50 = *(float *)&dword_AC2F78; v52 = *(float *)&xRight; v53 = v25; v44 = 0; v45 = 0; v46 = 0; v47 = 0; *(float *)&v51 = v24 / (double)(unsigned int)dword_AC2F78; v26(v25, &v44, v43); (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v25 + 308))( v53, (signed int)((double)LODWORD(v52) * 0.0 - (double)v44), (signed int)((double)LODWORD(v50) * *(float *)&v51)); } v27 = *(_DWORD ***)(v2 + 708); if ( v27 ) { sub_600F90(v27, &v48, (int *)&v49); LODWORD(v50) = dword_AC2F78 - (_DWORD)v49 - 100; v28 = (double)LODWORD(v50); v50 = *(float *)&dword_AC2F78; v29 = *(_DWORD *)(v2 + 708); v30 = *(void (__thiscall **)(int, int *, int))(*(_DWORD *)v29 + 208); v50 = *(float *)&dword_AC2F78; v52 = *(float *)&xRight; v53 = v29; v44 = 0; v45 = 0; v46 = 0; v47 = 0; *(float *)&v51 = v28 / (double)(unsigned int)dword_AC2F78; v30(v29, &v44, v43); (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v29 + 308))( v53, (signed int)((double)LODWORD(v52) - (double)v45), (signed int)((double)LODWORD(v50) * *(float *)&v51)); sub_601110(*(_DWORD **)(v2 + 708)); } if ( *(_DWORD *)(v2 + 640) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 640) + 236))( xRight, dword_AC2F78, 0.56999999, 0.2); if ( *(_DWORD *)(v2 + 568) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 568) + 236))( xRight, dword_AC2F78, 0.52999997, 0.0); if ( *(_DWORD *)(v2 + 716) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 716) + 236))(xRight, dword_AC2F78, 0.75, 0.5); if ( *(_DWORD *)(v2 + 772) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 772) + 236))(xRight, dword_AC2F78, 0.75, 0.5); if ( *(_DWORD *)(v2 + 728) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 728) + 236))(xRight, dword_AC2F78, 0.75, 0.5); if ( *(_DWORD *)(v2 + 776) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 776) + 236))(xRight, dword_AC2F78, 0.75, 0.5); sub_6BC200(byte_B92048); v31 = *(_DWORD ***)(v2 + 852); if ( v31 ) { sub_4EF2F0(v31); sub_4EF310(*(_DWORD **)(v2 + 852), 10, 1); v32 = *(_DWORD *)(v2 + 852); v52 = flt_B92089; v50 = flt_B9208D; v33 = *(void (__thiscall **)(int, int *))(*(_DWORD *)v32 + 208); v51 = xRight; v49 = (void (__thiscall **)(_DWORD, int))dword_AC2F78; v53 = v32; v44 = 0; v45 = 0; v46 = 0; v47 = 0; v33(v32, &v44); (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v32 + 308))( v53, (signed int)((double)v51 * v52 - (double)v44), (signed int)((double)(unsigned int)v49 * v50)); } v34 = *(_DWORD ***)(v2 + 856); if ( v34 ) { sub_4EF2F0(v34); sub_4EF310(*(_DWORD **)(v2 + 856), 10, 1); v35 = *(_DWORD *)(v2 + 856); v52 = flt_B92095; v50 = flt_B92099; v36 = *(void (__thiscall **)(int, int *))(*(_DWORD *)v35 + 208); v51 = xRight; v49 = (void (__thiscall **)(_DWORD, int))dword_AC2F78; v53 = v35; v44 = 0; v45 = 0; v46 = 0; v47 = 0; v36(v35, &v44); (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v35 + 308))( v53, (signed int)((double)v51 * v52 - (double)v44), (signed int)((double)(unsigned int)v49 * v50)); } v37 = *(_DWORD ***)(v2 + 860); if ( v37 ) { sub_4EF2F0(v37); sub_4EF310(*(_DWORD **)(v2 + 860), 10, 1); v38 = *(_DWORD *)(v2 + 860); v52 = flt_B92095; v39 = *(void (__thiscall **)(int, int *))(*(_DWORD *)v38 + 208); v51 = xRight; v50 = flt_B92099 + 0.02800000086426735; v49 = (void (__thiscall **)(_DWORD, int))dword_AC2F78; v53 = v38; v44 = 0; v45 = 0; v46 = 0; v47 = 0; v39(v38, &v44); (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)v38 + 308))( v53, (signed int)((double)v51 * v52 - (double)v44), (signed int)((double)(unsigned int)v49 * v50)); } if ( *(_DWORD *)(v2 + 1112) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 1112) + 236))( xRight, dword_AC2F78, 0.89999998, 0.30000001); if ( *(_DWORD *)(v2 + 1048) ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 1048) + 236))( xRight, dword_AC2F78, 0.69999999, 0.1); if ( sub_6D3900() ) { v40 = sub_6D3900(); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v40 + 236))( v40, xRight, dword_AC2F78, 0.57999998, 0.15000001); } result = sub_6D3920(); if ( result ) { v42 = sub_6D3920(); result = (*(int (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v42 + 236))( v42, xRight, dword_AC2F78, 0.69999999, 0.15000001); } if ( *(_DWORD *)(v2 + 1036) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 1036) + 236))( xRight, dword_AC2F78, 0.5, 0.80000001); if ( *(_DWORD *)(v2 + 5104) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 5104) + 236))( xRight, dword_AC2F78, 0.5, 0.5); if ( *(_DWORD *)(v2 + 564) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 564) + 236))( xRight, dword_AC2F78, 0.30000001, 0.5); if ( *(_DWORD *)(v2 + 5116) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 5116) + 236))( xRight, dword_AC2F78, 0.30000001, 0.5); if ( *(_DWORD *)(v2 + 5128) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 5128) + 236))( xRight, dword_AC2F78, 0.30000001, 0.5); if ( *(_DWORD *)(v2 + 5132) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 5132) + 236))( xRight, dword_AC2F78, 0.30000001, 0.5); if ( *(_DWORD *)(v2 + 620) ) result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 620) + 236))( xRight, dword_AC2F78, 0.30000001, 0.5); return result; } // 4985A0: could not find valid save-restore pair for esi // B92089: using guessed type float flt_B92089; // B9208D: using guessed type float flt_B9208D; // B92095: using guessed type float flt_B92095; // B92099: using guessed type float flt_B92099; //----- (004990F0) -------------------------------------------------------- char __thiscall sub_4990F0(_DWORD **this) { _DWORD **v1; // edi int *v2; // esi signed int v3; // ebx char result; // al _DWORD *v5; // ecx _DWORD **v6; // ecx double v7; // st7 _DWORD *v8; // ecx _DWORD **v9; // ecx double v10; // st7 _DWORD *v11; // ecx _DWORD *v12; // ecx int v13; // esi int v14; // eax int **v15; // esi int v16; // eax int v17; // ecx int v18; // ebx int (*v19)(void); // edx int v20; // eax int v21; // eax int v22; // ebx int v23; // eax int v24; // eax int v25; // edx int v26; // ebx int v27; // eax double v28; // st7 float v29; // ST19C_4 float v30; // ST198_4 float v31; // ST198_4 float v32; // ST19C_4 float v33; // ST198_4 float v34; // ST198_4 float v35; // ST198_4 float v36; // ST19C_4 float v37; // ST198_4 float v38; // ST19C_4 float v39; // ST198_4 float v40; // ST198_4 _DWORD *v41; // ecx _DWORD *v42; // ecx float v43; // ST19C_4 float v44; // ST198_4 float v45; // ST19C_4 float v46; // ST198_4 float v47; // ST19C_4 float v48; // ST198_4 float v49; // ST198_4 float v50; // ST19C_4 int *v51; // esi signed int v52; // ebx void (__thiscall **v53)(int *, int); // [esp+1ACh] [ebp-14h] int v54; // [esp+1B0h] [ebp-10h] int v55; // [esp+1B4h] [ebp-Ch] float v56; // [esp+1B8h] [ebp-8h] int v57; // [esp+1BCh] [ebp-4h] v1 = this; if ( this[144] ) (*(void (__stdcall **)(int, int))(*this[144] + 308))(xRight - 44, dword_AC2F78 - 40); sub_6BD660((int)v1[142]); sub_6BD660((int)v1[139]); sub_6BD660((int)v1[141]); sub_6BD660((int)v1[216]); sub_6BD660((int)v1[227]); sub_6BD660((int)v1[193]); sub_6BD660((int)v1[192]); sub_6BD660((int)v1[178]); sub_6BD660((int)v1[179]); sub_6BD660((int)v1[182]); sub_6BD660((int)v1[143]); sub_6BD660((int)v1[177]); sub_6BD660((int)v1[155]); if ( dword_ACEAFC ) { v5 = v1[138]; if ( byte_ACEAF9 ) { if ( v5 ) sub_49F570(v5, xRight, dword_AC2F78, 0.0, 0.0); v6 = (_DWORD **)v1[176]; if ( v6 ) { sub_6044C0(v6, &v53, &v55); v54 = dword_AC2F78 - v55 - 100; v7 = (double)(unsigned int)v54; v54 = dword_AC2F78; v8 = v1[176]; v56 = v7 / (double)(unsigned int)dword_AC2F78; sub_49F570(v8, xRight, dword_AC2F78, 0.0, v56); } v9 = (_DWORD **)v1[177]; if ( v9 ) { sub_600F90(v9, &v53, &v55); v54 = dword_AC2F78 - v55 - 100; v10 = (double)(unsigned int)v54; v54 = dword_AC2F78; v11 = v1[177]; v56 = v10 / (double)(unsigned int)dword_AC2F78; sub_49F5F0(v11, xRight, dword_AC2F78, 1.0, v56); } v12 = v1[143]; if ( v12 ) sub_49F5F0(v12, xRight, dword_AC2F78, 1.0, 0.0); v56 = 0.0; v57 = 0; if ( v1[163] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[163] + 236))(xRight, dword_AC2F78, 0.0, 1.0); if ( *((_BYTE *)v1[163] + 1094) ) v57 = 1; } if ( v1[168] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[168] + 236))(xRight, dword_AC2F78, 1.0, 0.0); v13 = *v1[168]; v14 = (*(int (__stdcall **)(signed int))(*v1[168] + 164))(160); (*(void (__thiscall **)(_DWORD *, int))(v13 + 308))(v1[168], v14); if ( *((_BYTE *)v1[168] + 1094) ) LODWORD(v56) = 1; } v15 = v1 + 169; v55 = 4; do { if ( *(v15 - 5) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(v15 - 5) + 236))(xRight, dword_AC2F78, 0.0, 0.92500001); v16 = (*(int (**)(void))(**(v15 - 5) + 148))(); v17 = (int)*(v15 - 5); v18 = v57 * v16; v53 = (void (__thiscall **)(int *, int))(**(v15 - 5) + 308); v19 = *(int (**)(void))(*(_DWORD *)v17 + 168); v54 = v17; v20 = v19(); v21 = (*(int (__stdcall **)(int))(*(_DWORD *)v54 + 164))(v20 - v18); (*v53)(*(v15 - 5), v21); if ( *((_BYTE *)*(v15 - 5) + 1094) ) ++v57; } if ( *v15 ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v15 + 236))(xRight, dword_AC2F78, 0.94499999, 0.0); v22 = **v15; v23 = (*(int (__stdcall **)(signed int))(**v15 + 164))(160); (*(void (__thiscall **)(int *, int))(v22 + 308))(*v15, v23); v24 = (*(int (**)(void))(**v15 + 144))(); v25 = **v15; v26 = LODWORD(v56) * v24; v53 = (void (__thiscall **)(int *, int))(**v15 + 308); v27 = (*(int (__stdcall **)(signed int))(v25 + 164))(160); (*v53)(*v15, v27 - v26); if ( *((_BYTE *)*v15 + 1094) ) ++LODWORD(v56); } ++v15; --v55; } while ( v55 ); if ( v1[316] ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[316] + 236))(xRight, dword_AC2F78, 0.95300001, 0.66000003); if ( v1[262] ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[262] + 236))(xRight, dword_AC2F78, 0.69999999, 0.1); if ( v1[263] ) (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[263] + 236))(xRight, dword_AC2F78, 1.0, 0.60000002); v28 = 0.5; if ( v1[317] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[317] + 236))(xRight, dword_AC2F78, 0.5, 0.5); v28 = 0.5; } if ( v1[318] ) { v29 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[318] + 236))( xRight, dword_AC2F78, 0.63999999, LODWORD(v29)); v28 = 0.5; } if ( v1[287] ) { v30 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[287] + 236))(xRight, dword_AC2F78, LODWORD(v30), 0.2); v28 = 0.5; } if ( v1[161] ) { v31 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[161] + 236))(xRight, dword_AC2F78, LODWORD(v31), 0.2); v28 = 0.5; } if ( v1[314] ) { v32 = v28; v33 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[314] + 236))( xRight, dword_AC2F78, LODWORD(v33), LODWORD(v32)); v28 = 0.5; } if ( v1[260] ) { v34 = v28; (*(void (__stdcall **)(int, int, _DWORD, signed int))(*v1[260] + 228))(xRight, dword_AC2F78, LODWORD(v34), 150); v28 = 0.5; } if ( v1[261] ) { v35 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[261] + 236))(xRight, dword_AC2F78, LODWORD(v35), 0.13); v28 = 0.5; } if ( v1[1236] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1236] + 236))( xRight, dword_AC2F78, 0.51999998, 0.89999998); v28 = 0.5; } if ( v1[1238] ) { v36 = v28; v37 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1238] + 236))( xRight, dword_AC2F78, LODWORD(v37), LODWORD(v36)); v28 = 0.5; } if ( v1[1237] ) { v38 = v28; v39 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1237] + 236))( xRight, dword_AC2F78, LODWORD(v39), LODWORD(v38)); v28 = 0.5; } if ( v1[1234] ) { v40 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1234] + 236))(xRight, dword_AC2F78, LODWORD(v40), 0.2); v28 = 0.5; } v41 = v1[206]; if ( v41 ) { sub_49F5F0(v41, xRight, dword_AC2F78, 1.0, 0.30000001); v28 = 0.5; } v42 = v1[207]; if ( v42 ) { sub_49F5F0(v42, xRight, dword_AC2F78, 0.98000002, 0.30000001); v28 = 0.5; } if ( v1[208] ) { v43 = v28; v44 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[208] + 236))( xRight, dword_AC2F78, LODWORD(v44), LODWORD(v43)); v28 = 0.5; } if ( v1[198] ) { v45 = v28; v46 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[198] + 236))( xRight, dword_AC2F78, LODWORD(v46), LODWORD(v45)); v28 = 0.5; } if ( v1[209] ) { v47 = v28; v48 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[209] + 236))( xRight, dword_AC2F78, LODWORD(v48), LODWORD(v47)); v28 = 0.5; } if ( v1[305] ) { v49 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[305] + 236))( xRight, dword_AC2F78, LODWORD(v49), 0.60000002); v28 = 0.5; } if ( v1[1219] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1219] + 236))( xRight, dword_AC2F78, 0.89999998, 0.66000003); v28 = 0.5; } if ( v1[1220] ) { v50 = v28; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[1220] + 236))(xRight, dword_AC2F78, 1.0, LODWORD(v50)); } } else { sub_6BD660((int)v1[138]); sub_6BD660((int)v1[163]); sub_6BD660((int)v1[168]); v51 = (int *)(v1 + 169); v52 = 4; do { sub_6BD660(*(v51 - 5)); sub_6BD660(*v51); ++v51; --v52; } while ( v52 ); sub_6BD660((int)v1[176]); } result = sub_6BD660((int)v1[160]); } else { sub_6BD660((int)v1[138]); sub_6BD660((int)v1[163]); sub_6BD660((int)v1[168]); v2 = (int *)(v1 + 169); v3 = 4; do { sub_6BD660(*(v2 - 5)); sub_6BD660(*v2); ++v2; --v3; } while ( v3 ); result = sub_6BD660((int)v1[176]); } return result; } // ACEAF9: using guessed type char byte_ACEAF9; // ACEAFC: using guessed type int dword_ACEAFC; //----- (00499AE0) -------------------------------------------------------- char sub_499AE0() { _DWORD *v0; // esi _DWORD *v1; // eax int *v2; // eax _DWORD *v3; // eax int v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // esi float v9; // ST00_4 _DWORD *v10; // esi int *v11; // eax int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] char v15; // [esp+18h] [ebp-8h] v0 = (_DWORD *)sub_6807B0(byte_AD9238); v1 = sub_439D70(byte_ADB468, &v12); if ( *v1 == *v0 && v1[1] == v0[1] && v1[2] == v0[2] ) { sub_695790(1); sub_69E4D0(byte_ADB468); } else { v2 = (int *)sub_6807B0(byte_AD9238); dword_B6711C = *v2; dword_B67120 = v2[1]; dword_B67124 = v2[2]; v3 = (_DWORD *)sub_6807B0(byte_AD9238); v4 = sub_4316B0(v3); if ( v4 ) *((_DWORD *)dword_AD8EBC + 1361) = *(_DWORD *)(v4 + 72); byte_B6712C = *(_BYTE *)(v4 + 58); sub_695790(0); v5 = (_DWORD *)sub_6807B0(byte_AD9238); v6 = sub_49F8D0(v5); v7 = v6; if ( !v6 ) { sub_6807B0(byte_AD9238); return 0; } if ( *(_BYTE *)(v6 + 130) ) sub_698060(byte_ADB468); else sub_697FF0(byte_ADB468); v9 = (double)*(unsigned __int16 *)(v7 + 209); sub_692EF0((float *)byte_ADB468, v9); } v10 = (_DWORD *)dword_AB6528; v11 = (int *)sub_6807B0(byte_AD9238); v12 = *v11; v13 = v11[1]; v14 = v11[2]; v15 = 0; if ( v10 ) sub_6B8FC0(v10, (int)&v12); return 1; } // 695790: using guessed type _DWORD __stdcall sub_695790(char); // AB6528: using guessed type int dword_AB6528; // B6711C: using guessed type int dword_B6711C; // B67120: using guessed type int dword_B67120; // B67124: using guessed type int dword_B67124; // B6712C: using guessed type char byte_B6712C; //----- (00499C50) -------------------------------------------------------- char __thiscall sub_499C50(_DWORD ****this) { int v1; // eax char result; // al char *v3; // ebx signed int v4; // esi bool v5; // cf char *v6; // esi char v7; // bl unsigned __int8 (__thiscall *v8)(char *); // eax float *v9; // eax float *v10; // eax _DWORD ****v11; // [esp+Ch] [ebp-10h] v11 = this; v1 = sub_6807A0(byte_AD9238); result = sub_67B9D0(dword_AD8EBC, v1); if ( result ) { sub_69E480(byte_ADB468, (char)dword_AD8EBC); v3 = dword_AD8EBC; v4 = 0; v5 = 1; do { if ( v5 && dword_ADA534[v4] ) sub_6790F0(v3 + 776, (_DWORD *)dword_ADA534[v4]); v5 = (unsigned int)++v4 < 0x1E; } while ( v4 < 30 ); v6 = dword_AD8EBC; v7 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 48))(); v8 = *(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v6 + 48); v6[1924] = 1; *((_DWORD *)v6 + 482) = 0; if ( v7 != v8(v6) ) v6[1925] = 1; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 228))(1); sub_6C17E0((int)&dword_B9DC70); sub_719F30((char *)&dword_B9E560); sub_5B64D0(v11[138]); if ( !dword_ACCFE0 ) { v9 = (float *)operator new(0xB4u); if ( v9 ) v10 = sub_4546A0(v9); else v10 = 0; dword_ACCFE0 = (int)v10; } result = 1; } return result; } // ACCFE0: using guessed type int dword_ACCFE0; // ADA534: using guessed type int dword_ADA534[]; // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (00499DA0) -------------------------------------------------------- char __thiscall sub_499DA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax int v3; // ebx _DWORD *v4; // eax int v5; // eax _DWORD *v6; // esi int v7; // eax v1 = this; v2 = operator new(0x30u); v3 = 0; if ( v2 ) v4 = sub_833100(v2); else v4 = 0; v1[587] = v4; v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 680))(); v6 = (_DWORD *)v5; if ( v5 ) { if ( *(_DWORD *)(v5 + 188) > 0u ) v3 = **(_DWORD **)(v5 + 180); sub_8D8240((_DWORD *)(v3 + 176)); v7 = *(_DWORD *)(v3 + 172); *(_DWORD *)(v7 + 56) = sub_4A1170; *(_DWORD *)(v7 + 60) = v1 + 588; sub_833600((_DWORD *)v1[587], v6, 0, -1, 1); } sub_833620((_DWORD *)v1[587], (_DWORD *)dword_ADB6D0, 0, -1, 1); return 1; } // ADB6D0: using guessed type int dword_ADB6D0; //----- (00499E80) -------------------------------------------------------- _DWORD *__thiscall sub_499E80(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx _DWORD *v3; // ST00_4 _DWORD *v4; // eax _DWORD **v5; // ebx _DWORD *v6; // ebx _DWORD *v7; // ST00_4 _DWORD **v8; // ebx unsigned int v9; // ebx int v10; // ecx _DWORD *result; // eax signed int v12; // [esp+8h] [ebp-4h] signed int v13; // [esp+8h] [ebp-4h] signed int v14; // [esp+8h] [ebp-4h] v1 = this; sub_4A0060(this + 156); sub_8F88C0(&unk_BA6B10); sub_5D53B0(); if ( v1[150] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[150]); v1[150] = 0; } if ( v1[136] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[136]); v1[136] = 0; } if ( v1[137] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[137]); v1[137] = 0; } if ( dword_AD01E8 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_AD01E8); dword_AD01E8 = 0; } if ( dword_ACEC34 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_ACEC34); dword_ACEC34 = 0; } if ( dword_AD019C ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_AD019C); dword_AD019C = 0; } if ( dword_AD01E0 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_AD01E0); dword_AD01E0 = 0; } if ( v1[138] ) { sub_6BD4D0(v1[138]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[138]); v1[138] = 0; } if ( v1[285] ) { sub_6BD4D0(v1[285]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[285]); v1[285] = 0; } if ( v1[286] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[286]); v1[286] = 0; } if ( v1[139] ) { sub_6BD4D0(v1[139]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[139]); v1[139] = 0; } if ( v1[141] ) { sub_6BD4D0(v1[141]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[141]); v1[141] = 0; } if ( v1[155] ) { sub_6BD4D0(v1[155]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[155]); v1[155] = 0; } if ( v1[1296] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1296]); v1[1296] = 0; } if ( v1[142] ) { sub_6BD4D0(v1[142]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[142]); v1[142] = 0; } if ( v1[143] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[143]); v1[143] = 0; } if ( v1[163] ) { sub_6BD4D0(v1[163]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[163]); v1[163] = 0; } if ( v1[168] ) { sub_6BD4D0(v1[168]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[168]); v1[168] = 0; } v2 = v1 + 169; v12 = 4; do { if ( *(v2 - 5) ) { sub_6BD4D0(*(v2 - 5)); sub_8F9E00(&unk_BA6B10, (_DWORD *)*(v2 - 5)); *(v2 - 5) = 0; } if ( *v2 ) { sub_6BD4D0(*v2); sub_8F9E00(&unk_BA6B10, (_DWORD *)*v2); *v2 = 0; } ++v2; --v12; } while ( v12 ); if ( v1[144] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[144]); v1[144] = 0; } if ( v1[176] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[176]); v1[176] = 0; } if ( v1[177] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[177]); v1[177] = 0; } if ( v1[178] ) { sub_6BD4D0(v1[178]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[178]); v1[178] = 0; } if ( v1[213] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[213]); v1[213] = 0; } if ( v1[214] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[214]); v1[214] = 0; } if ( v1[215] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[215]); v1[215] = 0; } if ( v1[185] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[185]); v1[185] = 0; } if ( v1[179] ) { sub_6BD4D0(v1[179]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[179]); v1[179] = 0; } if ( v1[180] ) { sub_6BD4D0(v1[180]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[180]); v1[180] = 0; } if ( v1[182] ) { sub_6BD4D0(v1[182]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[182]); v1[182] = 0; } if ( v1[193] ) { sub_6BD4D0(v1[193]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[193]); v1[193] = 0; } if ( v1[192] ) { sub_6BD4D0(v1[192]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[192]); v1[192] = 0; } if ( v1[194] ) { sub_6BD4D0(v1[194]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[194]); v1[194] = 0; v1[149] = 0; } if ( v1[263] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[263]); v1[263] = 0; } if ( v1[147] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[147]); v1[147] = 0; } if ( v1[148] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[148]); v1[148] = 0; } if ( v1[151] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[151]); v1[151] = 0; } if ( v1[233] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[233]); v1[233] = 0; } if ( v1[145] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[145]); v1[145] = 0; } if ( v1[146] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[146]); v1[146] = 0; } if ( v1[262] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[262]); v1[262] = 0; } if ( v1[152] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[152]); v1[152] = 0; } if ( v1[232] ) v1[232] = 0; if ( v1[230] ) v1[230] = 0; if ( v1[231] ) v1[231] = 0; if ( v1[229] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[229]); v1[229] = 0; } if ( v1[220] ) { sub_6BD4D0(v1[220]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[220]); v1[220] = 0; } if ( v1[219] ) { sub_6BD4D0(v1[219]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[219]); v1[219] = 0; } if ( v1[221] ) { sub_6BD4D0(v1[221]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[221]); v1[221] = 0; } if ( v1[222] ) { sub_6BD4D0(v1[222]); sub_52E850((_DWORD *)v1[222]); v3 = (_DWORD *)v1[222]; v1[224] = 0; sub_8F9E00(&unk_BA6B10, v3); v1[222] = 0; } if ( v1[223] ) { sub_6BD4D0(v1[223]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[223]); v1[223] = 0; } if ( v1[216] ) { sub_6BD4D0(v1[216]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[216]); v1[216] = 0; } if ( v1[227] ) { sub_6BD4D0(v1[227]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[227]); v1[227] = 0; } if ( v1[217] ) { sub_6BD4D0(v1[217]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[217]); v1[217] = 0; } if ( v1[225] ) { sub_6BD4D0(v1[225]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[225]); v1[225] = 0; } if ( v1[243] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[243]); v1[243] = 0; } if ( v1[244] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[244]); v1[244] = 0; } if ( v1[289] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[289]); v1[289] = 0; } if ( v1[184] ) { sub_6BD4D0(v1[184]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[184]); v1[184] = 0; } if ( v1[183] ) { sub_6BD4D0(v1[183]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[183]); v1[183] = 0; } if ( v1[186] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[186]); v1[186] = 0; } if ( v1[187] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[187]); v1[187] = 0; } if ( v1[188] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[188]); v1[188] = 0; } if ( v1[195] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[195]); v1[195] = 0; } if ( v1[196] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[196]); v1[196] = 0; } if ( v1[197] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[197]); v1[197] = 0; } if ( v1[198] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[198]); v1[198] = 0; } if ( v1[199] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[199]); v1[199] = 0; } if ( v1[200] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[200]); v1[200] = 0; } if ( v1[197] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[201]); v1[201] = 0; if ( v1[197] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[202]); v1[202] = 0; if ( v1[197] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[203]); v1[203] = 0; } } } if ( v1[206] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[206]); v1[206] = 0; } if ( v1[207] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[207]); v1[207] = 0; } if ( v1[205] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[205]); v1[205] = 0; } if ( v1[204] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[204]); v1[204] = 0; } if ( v1[208] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[208]); v1[208] = 0; } if ( v1[209] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[209]); v1[209] = 0; } if ( v1[211] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[211]); v1[211] = 0; } if ( v1[210] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[210]); v1[210] = 0; } if ( v1[212] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[212]); v1[212] = 0; } if ( v1[257] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[257]); v1[257] = 0; } sub_582A50((int *)v1[181]); if ( v1[234] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[234]); v1[234] = 0; } if ( v1[235] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[235]); v1[235] = 0; } if ( v1[236] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[236]); v1[236] = 0; } if ( v1[237] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[237]); v1[237] = 0; } if ( v1[245] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[245]); v1[245] = 0; } if ( v1[246] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[246]); v1[246] = 0; } if ( v1[247] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[247]); v1[247] = 0; } if ( v1[248] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[248]); v1[248] = 0; } if ( v1[249] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[249]); v1[249] = 0; } if ( v1[250] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[250]); v1[250] = 0; } if ( v1[251] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[251]); v1[251] = 0; } if ( v1[252] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[252]); v1[252] = 0; } if ( v1[253] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[253]); v1[253] = 0; } if ( v1[254] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[254]); v1[254] = 0; } if ( v1[255] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[255]); v1[255] = 0; } if ( v1[256] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[256]); v1[256] = 0; } if ( v1[258] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[258]); v1[258] = 0; } if ( v1[238] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[238]); v1[238] = 0; } if ( v1[240] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[240]); v1[240] = 0; } if ( v1[239] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[239]); v1[239] = 0; } if ( v1[241] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[241]); v1[241] = 0; } if ( v1[259] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[259]); v1[259] = 0; } if ( v1[260] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[260]); v1[260] = 0; } if ( v1[261] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[261]); v1[261] = 0; } if ( v1[287] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[287]); v1[287] = 0; } if ( v1[288] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[288]); v1[288] = 0; } v4 = (_DWORD *)dword_ACE4CC; if ( dword_ACE4CC ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_ACE4CC); v4 = 0; dword_ACE4CC = 0; } if ( dword_ACE4C8 ) { sub_8F9E00(&unk_BA6B10, v4); dword_ACE4C8 = 0; } if ( v1[189] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[189]); v1[189] = 0; } if ( v1[190] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[190]); v1[190] = 0; } if ( v1[191] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[191]); v1[191] = 0; } if ( v1[267] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[267]); v1[267] = 0; } if ( v1[265] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[265]); v1[265] = 0; } if ( v1[264] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[264]); v1[264] = 0; } if ( v1[284] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[284]); v1[284] = 0; } if ( v1[283] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[283]); v1[283] = 0; } if ( v1[266] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[266]); v1[266] = 0; } if ( v1[228] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[228]); v1[228] = 0; } if ( v1[153] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[153]); v1[153] = 0; } if ( v1[154] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[154]); v1[154] = 0; } sub_6DC770(byte_ADB468); if ( v1[268] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[268]); v1[268] = 0; OutputDebugStringA("Clear m_pkMHInputPassWordWin\n"); } if ( v1[269] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[269]); v1[269] = 0; OutputDebugStringA("Clear m_pkMHAnnounceWin\n"); } if ( v1[270] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[270]); v1[277] = 0; OutputDebugStringA("Clear m_pkMHJoinWin\n"); } if ( v1[277] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[277]); v1[277] = 0; OutputDebugStringA("Clear m_pkMHJoinWin\n"); } if ( v1[276] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[276]); v1[276] = 0; OutputDebugStringA("Clear m_pkMHJoinWin\n"); } if ( v1[271] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[271]); v1[271] = 0; OutputDebugStringA("Clear m_pkMHInfoWin\n"); } if ( v1[272] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[272]); v1[272] = 0; OutputDebugStringA("Clear m_pkMHSettingWin\n"); } if ( v1[273] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[273]); v1[273] = 0; OutputDebugStringA(aClearMPkmhpo); } if ( v1[274] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[274]); v1[274] = 0; OutputDebugStringA(aClear); } if ( v1[275] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[275]); v1[275] = 0; OutputDebugStringA("Clear m_pkMHEditRoomWin\n"); } if ( v1[278] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[278]); v1[278] = 0; OutputDebugStringA("Clear m_pkMHMinimizeWin\n"); } if ( v1[281] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[281]); v1[281] = 0; OutputDebugStringA("Clear m_pkMHItemInventoryWin\n"); } sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[282]); v1[282] = 0; if ( v1[304] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[304]); v1[304] = 0; } if ( v1[318] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[318]); v1[318] = 0; } if ( v1[305] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[305]); v1[305] = 0; } v5 = (_DWORD **)(v1 + 306); v13 = 4; do { if ( *v5 ) { sub_8F9E00(&unk_BA6B10, *v5); *v5 = 0; } ++v5; --v13; } while ( v13 ); if ( v1[310] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[310]); v1[310] = 0; } if ( v1[313] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[313]); v1[313] = 0; } if ( v1[314] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[314]); v1[314] = 0; } if ( v1[316] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[316]); v1[316] = 0; } if ( v1[317] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[317]); v1[317] = 0; } if ( v1[160] ) { sub_6BD4D0(v1[160]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[160]); v1[160] = 0; } if ( v1[161] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[161]); v1[161] = 0; } sub_58AF20(); v6 = (_DWORD *)v1[293]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[292] + 8))(v1 + 292, v7); } v1[295] = 0; v1[293] = 0; v1[294] = 0; if ( v1[319] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[319]); v1[319] = 0; } if ( v1[320] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[320]); v1[320] = 0; } if ( v1[321] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[321]); v1[321] = 0; } if ( v1[323] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[323]); v1[323] = 0; } if ( v1[324] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[324]); v1[324] = 0; } if ( v1[1219] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1219]); v1[1219] = 0; } if ( v1[1220] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1220]); v1[1220] = 0; } if ( v1[1218] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1218]); v1[1218] = 0; } if ( v1[162] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[162]); v1[162] = 0; } if ( v1[1234] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1234]); v1[1234] = 0; } v8 = (_DWORD **)(v1 + 1229); v14 = 4; do { if ( *v8 ) sub_8F9E00(&unk_BA6B10, *v8); ++v8; --v14; } while ( v14 ); v9 = 420; do { v10 = v1[1227]; if ( *(_DWORD *)(v9 + v10) ) sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v9 + v10)); v9 += 4; } while ( v9 < 0x1AC ); if ( v1[1227] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1227]); v1[1227] = 0; } if ( v1[1228] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1228]); v1[1228] = 0; } if ( v1[1236] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1236]); v1[1236] = 0; } if ( v1[1237] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1237]); v1[1237] = 0; } if ( v1[1238] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1238]); v1[1238] = 0; } if ( v1[1243] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1243]); v1[1243] = 0; } if ( v1[1244] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1244]); v1[1244] = 0; } if ( v1[1245] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1245]); v1[1245] = 0; } if ( v1[1246] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1246]); v1[1246] = 0; } if ( v1[1247] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1247]); v1[1247] = 0; } if ( v1[1271] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1271]); v1[1271] = 0; } if ( v1[1272] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1272]); v1[1272] = 0; } if ( v1[1273] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1273]); v1[1273] = 0; } if ( v1[1276] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1276]); v1[1276] = 0; } if ( v1[1277] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1277]); v1[1277] = 0; } if ( v1[1279] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1279]); v1[1279] = 0; } if ( v1[1282] ) { sub_6BD4D0(v1[1282]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1282]); v1[1282] = 0; } if ( v1[1283] ) { sub_6BD4D0(v1[1283]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1283]); v1[1283] = 0; } if ( v1[1292] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1292]); v1[1292] = 0; } if ( v1[1293] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1293]); v1[1293] = 0; } if ( v1[1294] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1294]); v1[1294] = 0; } if ( v1[1295] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1295]); v1[1295] = 0; } result = (_DWORD *)v1[1301]; if ( result ) { result = sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[1301]); v1[1301] = 0; } return result; } // ACE4C8: using guessed type int dword_ACE4C8; // ACE4CC: using guessed type int dword_ACE4CC; // ACEC34: using guessed type int dword_ACEC34; // AD019C: using guessed type int dword_AD019C; // AD01E0: using guessed type int dword_AD01E0; // AD01E8: using guessed type int dword_AD01E8; //----- (0049B480) -------------------------------------------------------- int __thiscall sub_49B480(void *this) { int v1; // esi void *v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi _DWORD *v8; // eax char *v9; // edi _DWORD *v10; // ecx _DWORD *v11; // eax _DWORD *v12; // eax int v13; // ecx float *v14; // eax float *v15; // eax _DWORD *v16; // eax _DWORD *v17; // eax int result; // eax v1 = (int)this; sub_909460(0); sub_909470(0); sub_6BD4B0(); sub_62EAF0(); sub_6453B0(); sub_6D37C0(); sub_6FD570(); sub_6D1790(); sub_6C4F50(); sub_715700(); sub_714D80(); sub_68C570(); sub_6C2C50(); sub_499E80((_DWORD *)v1); sub_6AD0E0(&unk_B91250); sub_8333D0(*(_DWORD **)(v1 + 2348)); v2 = *(void **)(v1 + 2348); if ( v2 ) { sub_833170(*(_DWORD **)(v1 + 2348)); operator delete(v2); } sub_497D70(v1, (int)v2); if ( dword_AB6524 ) { sub_6B7C20((float *)dword_AB6524, 0.0); unknown_libname_12(&dword_AB6520); } sub_6BA240(&dword_AB6520); v3 = *(_DWORD *)(v1 + 516); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v1 + 516) = 0; } sub_497510((_DWORD *)v1); sub_46E3D0(0); sub_67EC50(); v4 = *(_DWORD *)(v1 + 2476); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 2476) = 0; } v5 = *(_DWORD *)(v1 + 2480); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v1 + 2480) = 0; } v6 = *(_DWORD *)(v1 + 2488); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v1 + 2488) = 0; } v7 = *(_DWORD *)(v1 + 2492); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v1 + 2492) = 0; } sub_6D14F0(); sub_6D1570(); v8 = sub_6CF210(); sub_6CE900(v8); sub_6CF210(); sub_6CF270(); v9 = *(char **)(v1 + 5096); *(_BYTE *)(v1 + 4932) = 1; if ( v9 ) { sub_6B00A0(v9); operator delete(v9); *(_DWORD *)(v1 + 5096) = 0; } v10 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v11 = operator new(0x14u); if ( v11 ) v12 = sub_439430(v11); else v12 = 0; v10 = v12; dword_ACB2E4 = (int)v12; } sub_439360(v10); v13 = dword_ACCFE0; if ( !dword_ACCFE0 ) { v14 = (float *)operator new(0xB4u); if ( v14 ) v15 = sub_4546A0(v14); else v15 = 0; v13 = (int)v15; dword_ACCFE0 = (int)v15; } sub_453C60(v13); if ( !dword_ACCF98 ) { v16 = operator new(0x28u); if ( v16 ) v17 = sub_4534E0(v16); else v17 = 0; dword_ACCF98 = (int)v17; } result = sub_453220(); *(_BYTE *)(v1 + 32) = 0; *(_DWORD *)(v1 + 28) = 0; return result; } // 453220: using guessed type int sub_453220(void); // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); // 6BA240: using guessed type int __thiscall sub_6BA240(_DWORD); // AB6524: using guessed type int dword_AB6524; // ACB2E4: using guessed type int dword_ACB2E4; // ACCF98: using guessed type int dword_ACCF98; // ACCFE0: using guessed type int dword_ACCFE0; //----- (0049B770) -------------------------------------------------------- char __usercall sub_49B770@(int a1@, int a2@, int a3@) { int v3; // esi _DWORD *v4; // eax int v5; // eax char result; // al int v7; // eax int v8; // eax int v9; // eax int v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // eax unsigned int v13; // edi unsigned int v14; // eax float *v15; // ecx unsigned int v16; // edi unsigned int v17; // eax float *v18; // ecx unsigned int v19; // edi unsigned int v20; // eax float *v21; // ecx volatile LONG *v22; // eax int v23; // eax volatile LONG *v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // eax volatile LONG *v27; // eax int v28; // ebx void ***v29; // edi volatile LONG *v30; // eax int v31; // ebx _DWORD *v32; // eax _DWORD *v33; // eax volatile LONG *v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax volatile LONG *v37; // eax _BYTE *v38; // ecx int v39; // eax _DWORD *v40; // ecx int v41; // eax int v42; // ecx int v43; // eax int v44; // edx int v45; // eax int v46; // ecx volatile LONG *v47; // eax _DWORD *v48; // ecx int v49; // eax _DWORD *v50; // eax _DWORD *v51; // eax volatile LONG *v52; // eax _DWORD *v53; // eax volatile LONG *v54; // eax _DWORD *v55; // eax int v56; // eax volatile LONG *v57; // eax unsigned int v58; // eax unsigned int *v59; // eax volatile LONG *v60; // eax int v61; // ebx volatile LONG **v62; // edi int v63; // ebx int v64; // eax int v65; // eax int v66; // ecx float *v67; // ecx int v68; // edi _DWORD *v69; // ebx _DWORD *v70; // eax _DWORD *v71; // ecx int v72; // edi _DWORD *v73; // eax _DWORD *v74; // ecx int v75; // eax _DWORD *v76; // eax int v77; // STE4_4 _DWORD *v78; // eax _DWORD *v79; // ecx int v80; // STE4_4 _DWORD *v81; // eax _DWORD *v82; // ecx int v83; // STE4_4 _DWORD *v84; // eax _DWORD *v85; // ecx int v86; // STE4_4 _DWORD *v87; // eax _DWORD *v88; // ecx int v89; // STE4_4 _DWORD *v90; // eax _DWORD *v91; // ecx int v92; // STE4_4 _DWORD *v93; // eax _DWORD *v94; // ecx int v95; // STE4_4 _DWORD *v96; // eax _DWORD *v97; // ecx int v98; // STE4_4 _DWORD *v99; // eax _DWORD *v100; // ecx int v101; // STE4_4 _DWORD *v102; // eax _DWORD *v103; // ecx int v104; // STE4_4 _DWORD *v105; // eax _DWORD *v106; // ecx int v107; // STE4_4 _DWORD *v108; // eax _DWORD *v109; // ecx int v110; // STE4_4 _DWORD *v111; // eax _DWORD *v112; // ecx int v113; // STE4_4 _DWORD *v114; // eax _DWORD *v115; // ecx int v116; // STE8_4 _DWORD *v117; // eax _DWORD *v118; // ecx int v119; // STE8_4 _DWORD *v120; // eax _DWORD *v121; // ecx int v122; // STE8_4 _DWORD *v123; // eax _DWORD *v124; // ecx int v125; // STE8_4 _DWORD *v126; // eax _DWORD *v127; // ecx int v128; // STE8_4 _DWORD *v129; // eax _DWORD *v130; // ecx int v131; // STE8_4 _DWORD *v132; // eax _DWORD *v133; // ecx _BYTE *v134; // eax int v135; // STE8_4 _DWORD *v136; // eax _DWORD *v137; // ecx int v138; // eax int v139; // STE8_4 _DWORD *v140; // eax _DWORD *v141; // ecx void **v142; // eax int v143; // eax bool v144; // zf int v145; // eax volatile LONG *v146; // eax int v147; // STE8_4 _DWORD *v148; // eax _DWORD *v149; // ecx int v150; // STE8_4 _DWORD *v151; // eax _DWORD *v152; // ecx int v153; // STE8_4 _DWORD *v154; // eax _DWORD *v155; // ecx int v156; // STE8_4 _DWORD *v157; // eax _DWORD *v158; // ecx int v159; // STE8_4 _DWORD *v160; // eax _DWORD *v161; // ecx int v162; // STE8_4 _DWORD *v163; // eax _DWORD *v164; // ecx int v165; // STE8_4 _DWORD *v166; // eax _DWORD *v167; // ecx int v168; // edi _DWORD *v169; // eax _DWORD *v170; // ecx int v171; // edi _DWORD *v172; // eax _DWORD *v173; // ecx int v174; // esi _DWORD *v175; // eax _DWORD *v176; // ecx int v177; // [esp+D4h] [ebp-11Ch] int v178; // [esp+D8h] [ebp-118h] int v179; // [esp+D8h] [ebp-118h] float v180; // [esp+E0h] [ebp-110h] _DWORD *v181; // [esp+E0h] [ebp-110h] int *v182; // [esp+E0h] [ebp-110h] int *v183; // [esp+E0h] [ebp-110h] signed int v184; // [esp+E0h] [ebp-110h] signed int v185; // [esp+E4h] [ebp-10Ch] signed int v186; // [esp+E4h] [ebp-10Ch] volatile LONG **v187; // [esp+E4h] [ebp-10Ch] char Src; // [esp+ECh] [ebp-104h] v3 = a1; memset((void *)(a1 + 2660), 0, 0x800u); v4 = (_DWORD *)sub_559730(); *(_DWORD *)(v3 + 544) = v4; sub_8F82A0(&unk_BA6B10, v4); v5 = sub_559730(); *(_DWORD *)(v3 + 548) = v5; if ( !v5 ) return 0; *(_BYTE *)(v5 + 324) = 0; sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 548)); if ( !dword_AD01E8 ) { v7 = sub_43D0D0(1u); dword_AD01E8 = sub_5C1E00(v7, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_AD01E8); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 240))(0); } if ( !dword_ACEC34 ) { v8 = sub_43D0D0(1u); dword_ACEC34 = (int)sub_541780(v8, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_ACEC34); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACEC34 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACEC34 + 240))(0); } if ( !dword_AD019C ) { v9 = sub_43D0D0(1u); dword_AD019C = (int)sub_5A89A0(v9, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_AD019C); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD019C + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD019C + 240))(0); } if ( !dword_AD01E0 ) { v10 = sub_43D0D0(1u); dword_AD01E0 = sub_5B4B30(v10, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_AD01E0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E0 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E0 + 240))(0); } v11 = sub_584630(v3); *(_DWORD *)(v3 + 1068) = v11; sub_8F82A0(&unk_BA6B10, v11); (*(void (__stdcall **)(int, int, _DWORD, _DWORD, int))(**(_DWORD **)(v3 + 1068) + 236))( xRight, dword_AC2F78, 0.89999998, 0.5, a3); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1068) + 256))(0); v12 = sub_5B8850(v3); *(_DWORD *)(v3 + 552) = v12; sub_8F82A0(&unk_BA6B10, v12); v13 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))(); v14 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 100))(); v15 = *(float **)(*(_DWORD *)(v3 + 552) + 376); v15[75] = (double)v13; v15[76] = (double)v14; sub_49F670(v15); v16 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 104))(); v17 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 108))(); v18 = *(float **)(*(_DWORD *)(v3 + 552) + 380); v18[75] = (double)v16; v18[76] = (double)v17; sub_49F670(v18); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v3 + 552) + 520))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 552) + 240))(1); v19 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 120))(); v20 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 124))(); v21 = *(float **)(*(_DWORD *)(v3 + 552) + 384); v21[75] = (double)v19; v21[76] = (double)v20; sub_49F670(v21); v22 = sub_54FFB0(v3); *(_DWORD *)(v3 + 556) = v22; *(_DWORD *)(v3 + 560) = *((_DWORD *)v22 + 184); *(_DWORD *)(v3 + 564) = sub_43F9B0(v3); *(_DWORD *)(v3 + 620) = sub_4328D0(v3); v23 = sub_43D0D0(1u); v24 = sub_541780(v23, 7, 7); *(_DWORD *)(v3 + 5184) = v24; result = sub_53F8D0((void *)v24); if ( result ) { v25 = sub_5BF1D0(v3); *(_DWORD *)(v3 + 568) = v25; (*(void (__thiscall **)(volatile LONG *, signed int, int, int))(*v25 + 520))(v25, 1, a2, v178); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 568) + 240))(1); v26 = sub_56E090(v3); *(_DWORD *)(v3 + 572) = v26; sub_8F82A0(&unk_BA6B10, v26); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 572) + 520))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 572) + 240))(1); v27 = sub_5A2040(v3, 0); *(_DWORD *)(v3 + 652) = v27; sub_8F82A0(&unk_BA6B10, v27); *(_DWORD *)(v3 + 672) = sub_5A2040(v3, 1); v28 = 0; v29 = (void ***)(v3 + 676); do { *(v29 - 5) = (void **)sub_5A2180(v3, 0, v28); sprintf(&Src, "ShortCutSubWin%i", v28); sub_85AB50(*(v29 - 5), &Src); *v29 = (void **)sub_5A2180(v3, 1, v28); sprintf(&Src, "ShortCutSubWinV%i", v28); sub_85AB50(*v29, &Src); *(_BYTE *)(v3 + v28++ + 692) = 0; ++v29; } while ( v28 < 4 ); sub_4E3D40(10); v30 = sub_55BC20(v3); *(_DWORD *)(v3 + 576) = v30; sub_8F82A0(&unk_BA6B10, v30); *(_DWORD *)(v3 + 704) = sub_60AD00(v3); v31 = 0; do { sub_6054B0(*(_DWORD *)(v3 + 704), v31, v3, dword_B9200E[v31] & 0xFFFFFF7F, v31); ++v31; } while ( v31 < 5 ); (*(void (__cdecl **)(signed int, signed int))(**(_DWORD **)(v3 + 704) + 380))(27, 1); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 704)); v32 = (_DWORD *)sub_5BBE90(v3); *(_DWORD *)(v3 + 708) = v32; sub_601370(v32, dword_B92022 | 0x80); (*(void (__stdcall **)(signed int, signed int))(**(_DWORD **)(v3 + 708) + 380))(19, 1); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 708)); *(_DWORD *)(v3 + 712) = sub_4F97F0(v3); *(_DWORD *)(v3 + 716) = sub_538B00(v3); *(_DWORD *)(v3 + 984) = sub_50D280(v3, 1); *(_DWORD *)(v3 + 988) = sub_50D280(v3, 2); *(_DWORD *)(v3 + 992) = sub_50D280(v3, 3); *(_DWORD *)(v3 + 996) = sub_50D3C0(v3, 1); *(_DWORD *)(v3 + 1000) = sub_50D3C0(v3, 2); *(_DWORD *)(v3 + 1004) = sub_50D3C0(v3, 3); v33 = (_DWORD *)sub_50D130(v3); *(_DWORD *)(v3 + 1008) = v33; sub_8F82A0(&unk_BA6B10, v33); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1008) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1008) + 240))(0); *(_DWORD *)(v3 + 1012) = sub_5C7980(v3); *(_DWORD *)(v3 + 1016) = sub_5C7AC0(v3); v34 = sub_4F1AB0(v3, 0); *(_DWORD *)(v3 + 852) = v34; sub_8F82A0(&unk_BA6B10, v34); v35 = sub_4F1AB0(v3, 1); *(_DWORD *)(v3 + 856) = v35; sub_8F82A0(&unk_BA6B10, v35); v36 = sub_4F1AB0(v3, 2); *(_DWORD *)(v3 + 860) = v36; sub_8F82A0(&unk_BA6B10, v36); sub_4E3D40(30); v37 = sub_567450(v3); v38 = *(_BYTE **)(v3 + 716); *(_DWORD *)(v3 + 720) = v37; sub_535FE0(v38); *(_DWORD *)(v3 + 728) = sub_5B0430(v3); *(_DWORD *)(v3 + 732) = sub_5BCD00(v3); *(_DWORD *)(v3 + 736) = sub_568DC0(v3); *(_DWORD *)(v3 + 740) = sub_5915D0(v3); *(_DWORD *)(v3 + 744) = sub_50AD30(v3); *(_DWORD *)(v3 + 748) = sub_5330D0(v3); *(_DWORD *)(v3 + 752) = sub_573FD0(v3); *(_DWORD *)(v3 + 780) = sub_574120(v3); *(_DWORD *)(v3 + 784) = sub_732D70(v3, 1); *(_DWORD *)(v3 + 788) = sub_732D70(v3, 0); *(_DWORD *)(v3 + 792) = sub_732750(0); *(_DWORD *)(v3 + 796) = sub_732AE0(0); *(_DWORD *)(v3 + 800) = sub_732C30(0); *(_DWORD *)(v3 + 804) = sub_739AF0(0); *(_DWORD *)(v3 + 808) = sub_732EA0(0); *(_DWORD *)(v3 + 812) = sub_6184E0(0, (int)"DiceGameNpcDlgWin", 0); *(_DWORD *)(v3 + 828) = sub_726C90(v3); *(_DWORD *)(v3 + 824) = sub_726B50(v3); *(_DWORD *)(v3 + 820) = sub_726110(v3); *(_DWORD *)(v3 + 816) = sub_726DD0(v3); *(_DWORD *)(v3 + 832) = sub_732FE0(v3); *(_DWORD *)(v3 + 836) = sub_741CC0(v3); *(_DWORD *)(v3 + 844) = sub_741F40(v3); *(_DWORD *)(v3 + 840) = sub_742140(v3); *(_DWORD *)(v3 + 848) = sub_741DF0(v3); *(_DWORD *)(v3 + 756) = sub_46AFE0(v3); *(_DWORD *)(v3 + 760) = sub_614700(v3); v39 = sub_5315C0(v3); v40 = *(_DWORD **)(v3 + 724); *(_DWORD *)(v3 + 764) = v39; sub_582A30(v40, v3); sub_8D06A0((float *)(v3 + 5140), flt_ACCFCC); *(float *)(v3 + 5160) = 5.0; *(_DWORD *)(v3 + 772) = sub_4E8910(v3); *(_DWORD *)(v3 + 768) = sub_60EDE0(v3); *(_DWORD *)(v3 + 776) = sub_624770(v3); *(_DWORD *)(v3 + 864) = sub_514010(v3); *(_DWORD *)(v3 + 868) = sub_5E5250(v3); *(_DWORD *)(v3 + 880) = sub_57EAD0(v3); *(_DWORD *)(v3 + 876) = sub_430F00((void (__thiscall **)(volatile LONG *, const CHAR *))v3); *(_DWORD *)(v3 + 884) = sub_6FB090(v3); *(_DWORD *)(v3 + 888) = sub_52EB30(v3); *(_DWORD *)(v3 + 892) = sub_52E410(v3); *(_DWORD *)(v3 + 900) = sub_710510(v3); *(_DWORD *)(v3 + 912) = sub_4FB840(v3); *(_DWORD *)(v3 + 904) = 0; *(_DWORD *)(v3 + 908) = sub_5136F0(v3); *(_DWORD *)(v3 + 916) = sub_5CC020(v3); v41 = sub_5CDD50(v3); v42 = *(_DWORD *)(v3 + 916); *(_DWORD *)(v3 + 920) = v41; *(_DWORD *)(v41 + 412) = v42; v43 = sub_5D0D10(v3); v44 = *(_DWORD *)(v3 + 916); *(_DWORD *)(v3 + 924) = v43; *(_DWORD *)(v43 + 344) = v44; v45 = sub_5CEB20(v3); v46 = *(_DWORD *)(v3 + 916); *(_DWORD *)(v3 + 928) = v45; *(_DWORD *)(v45 + 308) = v46; sub_4E3D40(40); *(_DWORD *)(v3 + 932) = sub_4F2FF0(v3); *(_DWORD *)(v3 + 936) = sub_54AEA0(v3); *(_DWORD *)(v3 + 940) = sub_5C2E70(v3); *(_DWORD *)(v3 + 944) = sub_578E80(v3); *(_DWORD *)(v3 + 948) = sub_57A3B0(v3); *(_DWORD *)(v3 + 1020) = sub_510290(v3); *(_DWORD *)(v3 + 1024) = sub_4F4380(v3); *(_DWORD *)(v3 + 1032) = sub_575F40(v3); *(_DWORD *)(v3 + 952) = sub_59EB50(v3); *(_DWORD *)(v3 + 960) = sub_5982C0(v3); *(_DWORD *)(v3 + 956) = sub_596220(v3); *(_DWORD *)(v3 + 980) = sub_6184E0(v3, (int)"NPCDialogWin", 1); *(_DWORD *)(v3 + 964) = sub_5BA220(v3); v47 = sub_599650(v3); *(_DWORD *)(v3 + 596) = v47; if ( v47 ) { v48 = *(_DWORD **)(v3 + 776); if ( v48 ) sub_6217C0(v48, (int)v47); } *(_DWORD *)(v3 + 1140) = sub_59ABE0(v3); *(_DWORD *)(v3 + 1144) = sub_5E0370(v3); *(_DWORD *)(v3 + 1028) = sub_549D20(v3); v49 = sub_43D0D0(1u); *(_DWORD *)(v3 + 972) = sub_58E5D0(v49, 5, 5, v3); v50 = (_DWORD *)sub_50A1D0(2048, 1536, v3); *(_DWORD *)(v3 + 976) = v50; sub_8F8610(&unk_BA6B10, v50); v51 = (_DWORD *)sub_4F3800(v3, 0); *(_DWORD *)(v3 + 1036) = v51; sub_8F82A0(&unk_BA6B10, v51); v52 = sub_4EB370(v3); *(_DWORD *)(v3 + 1040) = v52; sub_8F82A0(&unk_BA6B10, v52); v53 = (_DWORD *)sub_5DE760(v3); *(_DWORD *)(v3 + 1148) = v53; sub_8F85E0(&unk_BA6B10, v53); v54 = sub_4EB370(v3); *(_DWORD *)(v3 + 1044) = v54; if ( v54 ) { sub_8F82A0(&unk_BA6B10, v54); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v3 + 1044) + 236))( xRight, dword_AC2F78, 0.5, 0.13); } sub_4E3D40(50); v55 = (_DWORD *)sub_5DED60(v3); *(_DWORD *)(v3 + 1064) = v55; sub_8F82A0(&unk_BA6B10, v55); *(_DWORD *)(v3 + 1156) = sub_5C6080(2048, 1536, v3); *(_DWORD *)(v3 + 584) = sub_52C9C0(v3); *(_DWORD *)(v3 + 1152) = sub_5839B0(v3); *(_DWORD *)(v3 + 588) = sub_59FF10(v3); v56 = sub_457890(v3); *(_DWORD *)(v3 + 592) = v56; if ( !v56 ) goto LABEL_165; *(_DWORD *)(v3 + 580) = sub_557300(v3); *(_DWORD *)(v3 + 608) = sub_4224E0(v3); *(_DWORD *)(v3 + 1048) = sub_61E250(v3); v57 = sub_61D070(v3); *(_DWORD *)(v3 + 1052) = v57; sub_8F82A0(&unk_BA6B10, v57); *(_DWORD *)(v3 + 604) = sub_59BEA0(v3); *(_DWORD *)(v3 + 612) = sub_5C94C0(v3); *(_DWORD *)(v3 + 616) = sub_5C8B80(v3); *(_DWORD *)(v3 + 1220) = sub_5E9570(v3); *(_DWORD *)(v3 + 4876) = sub_588E60(v3); if ( byte_B9202D ) sub_4A5B80((_DWORD *)v3); *(_DWORD *)(v3 + 4880) = sub_5890D0(v3); sub_4E6D30((_DWORD *)(v3 + 4884), 0xC5u); v58 = 0; do { *(_DWORD *)(v58 + *(_DWORD *)(v3 + 4884)) = -1; v58 += 4; } while ( v58 < 0x314 ); *(_DWORD *)(v3 + 4900) = 0; *(_BYTE *)(v3 + 4904) = 0; v180 = 0.0; v59 = (unsigned int *)sub_7474E0((_DWORD *)(dword_ACD9D8 + 4), 0); if ( v59 ) v180 = (double)*v59 / 1000.0; v60 = sub_4EF0A0(v3, v180); *(_DWORD *)(v3 + 4872) = v60; if ( byte_B9202C ) sub_8F82A0(&unk_BA6B10, v60); v61 = 0; v62 = (volatile LONG **)(v3 + 1224); do { if ( !*v62 ) *v62 = sub_722180(v3, v61); ++v61; ++v62; } while ( v61 < 4 ); *(_DWORD *)(v3 + 1240) = sub_720F90(v3); *(_DWORD *)(v3 + 1252) = sub_720E50(v3); *(_DWORD *)(v3 + 1256) = sub_5E9570(v3); v63 = *(_DWORD *)(v3 + 1260); if ( v63 ) { if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) && v63 ) (**(void (__thiscall ***)(int, signed int))v63)(v63, 1); *(_DWORD *)(v3 + 1260) = 0; } *(_DWORD *)(v3 + 1264) = sub_574F20(v3); *(_DWORD *)(v3 + 1268) = sub_55EC60(v3); *(_DWORD *)(v3 + 1076) = sub_4EB370(v3); v64 = sub_6EC6F0(v3); *(_DWORD *)(v3 + 1072) = v64; if ( !v64 && off_AC0554 ) off_AC0554("m_pkMHInputPassWordWin Error", &byte_9BB5AB, 0); v65 = sub_6F0F10(v3); *(_DWORD *)(v3 + 1124) = v65; if ( !v65 && off_AC0554 ) off_AC0554("Reairwin Error", byte_9BB5AE, 0); *(_DWORD *)(v3 + 1080) = sub_6E8FC0(v3); *(_DWORD *)(v3 + 1112) = sub_6EDC20(v3); *(_DWORD *)(v3 + 1084) = sub_6EABC0(v3); *(_DWORD *)(v3 + 1092) = sub_6EF120(v3); *(_DWORD *)(v3 + 1096) = sub_6E9520(v3); *(_DWORD *)(v3 + 1100) = sub_6E6E30(v3); *(_DWORD *)(v3 + 1088) = sub_6F1720(v3); *(_DWORD *)(v3 + 1104) = sub_6ED7F0(v3); *(_DWORD *)(v3 + 1108) = sub_6EE3A0(v3); v66 = *(_DWORD *)(v3 + 1084); *(_DWORD *)(v3 + 1116) = v66; (*(void (__stdcall **)(int, int, _DWORD, _DWORD, int, int))(*(_DWORD *)v66 + 236))( xRight, dword_AC2F78, 1.0, 0.43000001, v177, v179); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v3 + 1076) + 236))( xRight, dword_AC2F78, 0.5, 0.80000001); *(_DWORD *)(v3 + 1128) = sub_55CEC0(v3); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v3 + 1220) + 236))( xRight, dword_AC2F78, 0.5, 0.60000002); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 1220)); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v3 + 1256) + 236))(xRight, dword_AC2F78, 0.5, 0.5); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 1256)); *(_DWORD *)(v3 + 1216) = sub_68C380(v3); *(_DWORD *)(v3 + 1272) = sub_5745A0(v3); if ( !(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 224))() && (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x14 ) { sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 1272)); } *(_DWORD *)(v3 + 1060) = sub_58EFA0(v3); *(_DWORD *)(v3 + 1056) = sub_5972E0(v3); *(_DWORD *)(v3 + 1136) = sub_642800(v3); *(_DWORD *)(v3 + 1160) = 0; if ( byte_AC9CD6 ) { v67 = *(float **)(v3 + 1060); if ( v67 ) sub_58EC50(v67, 60 * dword_AC9CD8); } v68 = *(_DWORD *)(v3 + 1268); v69 = (_DWORD *)(v3 + 1168); v70 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1168) + 4))(v3 + 1168); v70[2] = v68; *v70 = 0; v70[1] = *(_DWORD *)(v3 + 1176); v71 = *(_DWORD **)(v3 + 1176); if ( v71 ) *v71 = v70; else *(_DWORD *)(v3 + 1172) = v70; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v70; v72 = *(_DWORD *)(v3 + 1128); v73 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v73[2] = v72; *v73 = 0; v73[1] = *(_DWORD *)(v3 + 1176); v74 = *(_DWORD **)(v3 + 1176); if ( v74 ) *v74 = v73; else *(_DWORD *)(v3 + 1172) = v73; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v73; v75 = sub_5C15D0(v3); *(_DWORD *)(v3 + 640) = v75; (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v75 + 236))( v75, xRight, dword_AC2F78, 0.56999999, 0.2); *(_DWORD *)(v3 + 644) = sub_5E9570(v3); *(_DWORD *)(v3 + 1276) = sub_59D7D0(v3); *(_DWORD *)(v3 + 1280) = sub_59D6A0(v3); *(_DWORD *)(v3 + 1284) = sub_57D040(v3); *(_DWORD *)(v3 + 1292) = sub_524040(v3); *(_DWORD *)(v3 + 1296) = sub_6204A0(v3); v181 = *(_DWORD **)(v3 + 1204); while ( v181 ) { v76 = v181; v181 = (_DWORD *)*v181; (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)(v3 + 1200) + 8))(v3 + 1200, v76); } *(_DWORD *)(v3 + 1212) = 0; *(_DWORD *)(v3 + 1204) = 0; *(_DWORD *)(v3 + 1208) = 0; v77 = *(_DWORD *)(v3 + 552); v78 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v78[2] = v77; *v78 = 0; v78[1] = *(_DWORD *)(v3 + 1208); v79 = *(_DWORD **)(v3 + 1208); if ( v79 ) *v79 = v78; else *(_DWORD *)(v3 + 1204) = v78; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v78; v80 = *(_DWORD *)(v3 + 572); v81 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v81[2] = v80; *v81 = 0; v81[1] = *(_DWORD *)(v3 + 1208); v82 = *(_DWORD **)(v3 + 1208); if ( v82 ) *v82 = v81; else *(_DWORD *)(v3 + 1204) = v81; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v81; v83 = *(_DWORD *)(v3 + 704); v84 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v84[2] = v83; *v84 = 0; v84[1] = *(_DWORD *)(v3 + 1208); v85 = *(_DWORD **)(v3 + 1208); if ( v85 ) *v85 = v84; else *(_DWORD *)(v3 + 1204) = v84; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v84; v86 = *(_DWORD *)(v3 + 568); v87 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v87[2] = v86; *v87 = 0; v87[1] = *(_DWORD *)(v3 + 1208); v88 = *(_DWORD **)(v3 + 1208); if ( v88 ) *v88 = v87; else *(_DWORD *)(v3 + 1204) = v87; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v87; v89 = *(_DWORD *)(v3 + 652); v90 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v90[2] = v89; *v90 = 0; v90[1] = *(_DWORD *)(v3 + 1208); v91 = *(_DWORD **)(v3 + 1208); if ( v91 ) *v91 = v90; else *(_DWORD *)(v3 + 1204) = v90; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v90; v92 = *(_DWORD *)(v3 + 576); v93 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v93[2] = v92; *v93 = 0; v93[1] = *(_DWORD *)(v3 + 1208); v94 = *(_DWORD **)(v3 + 1208); if ( v94 ) *v94 = v93; else *(_DWORD *)(v3 + 1204) = v93; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v93; v95 = *(_DWORD *)(v3 + 640); v96 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v96[2] = v95; *v96 = 0; v96[1] = *(_DWORD *)(v3 + 1208); v97 = *(_DWORD **)(v3 + 1208); if ( v97 ) *v97 = v96; else *(_DWORD *)(v3 + 1204) = v96; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v96; v98 = *(_DWORD *)(v3 + 644); v99 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v99[2] = v98; *v99 = 0; v99[1] = *(_DWORD *)(v3 + 1208); v100 = *(_DWORD **)(v3 + 1208); if ( v100 ) *v100 = v99; else *(_DWORD *)(v3 + 1204) = v99; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v99; v101 = *(_DWORD *)(v3 + 1264); v102 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v102[2] = v101; *v102 = 0; v102[1] = *(_DWORD *)(v3 + 1208); v103 = *(_DWORD **)(v3 + 1208); if ( v103 ) *v103 = v102; else *(_DWORD *)(v3 + 1204) = v102; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v102; v104 = *(_DWORD *)(v3 + 4876); v105 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v105[2] = v104; *v105 = 0; v105[1] = *(_DWORD *)(v3 + 1208); v106 = *(_DWORD **)(v3 + 1208); if ( v106 ) *v106 = v105; else *(_DWORD *)(v3 + 1204) = v105; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v105; v107 = *(_DWORD *)(v3 + 652); v108 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v108[2] = v107; *v108 = 0; v108[1] = *(_DWORD *)(v3 + 1208); v109 = *(_DWORD **)(v3 + 1208); if ( v109 ) *v109 = v108; else *(_DWORD *)(v3 + 1204) = v108; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v108; v110 = *(_DWORD *)(v3 + 672); v111 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v111[2] = v110; *v111 = 0; v111[1] = *(_DWORD *)(v3 + 1208); v112 = *(_DWORD **)(v3 + 1208); if ( v112 ) *v112 = v111; else *(_DWORD *)(v3 + 1204) = v111; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v111; v113 = *(_DWORD *)(v3 + 1048); v114 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v114[2] = v113; *v114 = 0; v114[1] = *(_DWORD *)(v3 + 1208); v115 = *(_DWORD **)(v3 + 1208); if ( v115 ) *v115 = v114; else *(_DWORD *)(v3 + 1204) = v114; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v114; v182 = (int *)(v3 + 656); v185 = 4; do { v116 = *v182; v117 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v117[2] = v116; *v117 = 0; v117[1] = *(_DWORD *)(v3 + 1208); v118 = *(_DWORD **)(v3 + 1208); if ( v118 ) *v118 = v117; else *(_DWORD *)(v3 + 1204) = v117; *(_DWORD *)(v3 + 1208) = v117; ++*(_DWORD *)(v3 + 1212); ++v182; --v185; } while ( v185 ); v183 = (int *)(v3 + 676); v186 = 4; do { v119 = *v183; v120 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v120[2] = v119; *v120 = 0; v120[1] = *(_DWORD *)(v3 + 1208); v121 = *(_DWORD **)(v3 + 1208); if ( v121 ) *v121 = v120; else *(_DWORD *)(v3 + 1204) = v120; ++v183; *(_DWORD *)(v3 + 1208) = v120; ++*(_DWORD *)(v3 + 1212); --v186; } while ( v186 ); v122 = *(_DWORD *)(v3 + 708); v123 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v123[2] = v122; *v123 = 0; v123[1] = *(_DWORD *)(v3 + 1208); v124 = *(_DWORD **)(v3 + 1208); if ( v124 ) *v124 = v123; else *(_DWORD *)(v3 + 1204) = v123; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v123; v125 = *(_DWORD *)(v3 + 852); v126 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v126[2] = v125; *v126 = 0; v126[1] = *(_DWORD *)(v3 + 1208); v127 = *(_DWORD **)(v3 + 1208); if ( v127 ) *v127 = v126; else *(_DWORD *)(v3 + 1204) = v126; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v126; v128 = *(_DWORD *)(v3 + 856); v129 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v129[2] = v128; *v129 = 0; v129[1] = *(_DWORD *)(v3 + 1208); v130 = *(_DWORD **)(v3 + 1208); if ( v130 ) *v130 = v129; else *(_DWORD *)(v3 + 1204) = v129; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v129; v131 = *(_DWORD *)(v3 + 860); v132 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v132[2] = v131; *v132 = 0; v132[1] = *(_DWORD *)(v3 + 1208); v133 = *(_DWORD **)(v3 + 1208); if ( v133 ) *v133 = v132; else *(_DWORD *)(v3 + 1204) = v132; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v132; v134 = (_BYTE *)sub_59F260(v3); *(_DWORD *)(v3 + 648) = v134; sub_59ED90(v134, 1); v135 = *(_DWORD *)(v3 + 648); v136 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v136[2] = v135; *v136 = 0; v136[1] = *(_DWORD *)(v3 + 1208); v137 = *(_DWORD **)(v3 + 1208); if ( v137 ) *v137 = v136; else *(_DWORD *)(v3 + 1204) = v136; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v136; v138 = sub_4EDE80(v3); v139 = v138; *(_DWORD *)(v3 + 4944) = v138; v140 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v140[2] = v139; *v140 = 0; v140[1] = *(_DWORD *)(v3 + 1208); v141 = *(_DWORD **)(v3 + 1208); if ( v141 ) *v141 = v140; else *(_DWORD *)(v3 + 1204) = v140; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v140; v142 = (void **)sub_4EB370(v3); *(_DWORD *)(v3 + 4936) = v142; sub_85AB50(v142, "WelcomeMsgWin"); v143 = sub_421050(6); sub_4EACD0(*(char **)(v3 + 4936), v143); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 4936)); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v3 + 4936) + 236))(xRight, dword_AC2F78); *(_DWORD *)(v3 + 4908) = sub_507750(v3, 0); *(_DWORD *)(v3 + 4912) = sub_507750(v3, 1); v187 = (volatile LONG **)(v3 + 4916); v184 = 4; do { *v187 = sub_4FE330(v3); v144 = v184-- == 1; ++v187; } while ( !v144 ); *(_DWORD *)(v3 + 4948) = sub_4EE7A0(v3); *(_DWORD *)(v3 + 4952) = sub_4ED680(v3); sub_4A5D00((_DWORD *)v3); v145 = *(_DWORD *)(v3 + 4944); if ( v145 ) { *(_WORD *)(v145 + 28) |= 1u; *(_BYTE *)(v145 + 356) = 0; } *(_DWORD *)(v3 + 4972) = sub_50E8E0(v3); *(_DWORD *)(v3 + 4976) = sub_4442E0(v3); *(_DWORD *)(v3 + 4980) = sub_41F5C0(v3); *(_DWORD *)(v3 + 4984) = sub_420270(v3); *(_DWORD *)(v3 + 4988) = sub_5C4770(v3); *(_DWORD *)(v3 + 4992) = *(_DWORD *)(*(_DWORD *)(v3 + 768) + 115700); *(_DWORD *)(v3 + 4996) = *(_DWORD *)(*(_DWORD *)(v3 + 768) + 115704); *(_DWORD *)(v3 + 5084) = sub_5322A0(v3); *(_DWORD *)(v3 + 5088) = sub_5323D0(v3); *(_DWORD *)(v3 + 5092) = sub_558B60(v3); v146 = sub_434FE0(v3); *(_DWORD *)(v3 + 5168) = v146; if ( v146 ) { *(_DWORD *)(v3 + 5104) = sub_561160(v3); *(_DWORD *)(v3 + 5108) = sub_444B50(v3); *(_DWORD *)(v3 + 5116) = sub_4485D0(v3); *(_DWORD *)(v3 + 5120) = sub_417320(v3); *(_DWORD *)(v3 + 5128) = sub_44FE50(v3); *(_DWORD *)(v3 + 5132) = sub_43DEE0(v3); *(_DWORD *)(v3 + 5136) = sub_4196A0(v3); *(_DWORD *)(v3 + 5172) = sub_42BD40(v3); *(_DWORD *)(v3 + 5176) = sub_44A8E0(v3); *(_DWORD *)(v3 + 5180) = sub_441EA0(v3); v147 = *(_DWORD *)(v3 + 5116); v148 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v148[2] = v147; *v148 = 0; v148[1] = *(_DWORD *)(v3 + 1176); v149 = *(_DWORD **)(v3 + 1176); if ( v149 ) *v149 = v148; else *(_DWORD *)(v3 + 1172) = v148; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v148; v150 = *(_DWORD *)(v3 + 560); v151 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v151[2] = v150; *v151 = 0; v151[1] = *(_DWORD *)(v3 + 1176); v152 = *(_DWORD **)(v3 + 1176); if ( v152 ) *v152 = v151; else *(_DWORD *)(v3 + 1172) = v151; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v151; v153 = *(_DWORD *)(v3 + 1268); v154 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v154[2] = v153; *v154 = 0; v154[1] = *(_DWORD *)(v3 + 1176); v155 = *(_DWORD **)(v3 + 1176); if ( v155 ) *v155 = v154; else *(_DWORD *)(v3 + 1172) = v154; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v154; v156 = *(_DWORD *)(v3 + 5132); v157 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v157[2] = v156; *v157 = 0; v157[1] = *(_DWORD *)(v3 + 1176); v158 = *(_DWORD **)(v3 + 1176); if ( v158 ) *v158 = v157; else *(_DWORD *)(v3 + 1172) = v157; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v157; v159 = *(_DWORD *)(v3 + 980); v160 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v160[2] = v159; *v160 = 0; v160[1] = *(_DWORD *)(v3 + 1176); v161 = *(_DWORD **)(v3 + 1176); if ( v161 ) *v161 = v160; else *(_DWORD *)(v3 + 1172) = v160; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v160; v162 = *(_DWORD *)(v3 + 5176); v163 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v163[2] = v162; *v163 = 0; v163[1] = *(_DWORD *)(v3 + 1176); v164 = *(_DWORD **)(v3 + 1176); if ( v164 ) *v164 = v163; else *(_DWORD *)(v3 + 1172) = v163; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v163; v165 = *(_DWORD *)(v3 + 4980); v166 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v3 + 1200) + 4))(v3 + 1200); v166[2] = v165; *v166 = 0; v166[1] = *(_DWORD *)(v3 + 1208); v167 = *(_DWORD **)(v3 + 1208); if ( v167 ) *v167 = v166; else *(_DWORD *)(v3 + 1204) = v166; ++*(_DWORD *)(v3 + 1212); *(_DWORD *)(v3 + 1208) = v166; v168 = *(_DWORD *)(v3 + 4980); v169 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v169[2] = v168; *v169 = 0; v169[1] = *(_DWORD *)(v3 + 1176); v170 = *(_DWORD **)(v3 + 1176); if ( v170 ) *v170 = v169; else *(_DWORD *)(v3 + 1172) = v169; ++*(_DWORD *)(v3 + 1180); *(_DWORD *)(v3 + 1176) = v169; v171 = *(_DWORD *)(v3 + 5128); v172 = (_DWORD *)(*(int (__thiscall **)(int))(*v69 + 4))(v3 + 1168); v172[2] = v171; *v172 = 0; v172[1] = *(_DWORD *)(v3 + 1176); v173 = *(_DWORD **)(v3 + 1176); if ( v173 ) *v173 = v172; else *(_DWORD *)(v3 + 1172) = v172; *(_DWORD *)(v3 + 1176) = v172; ++*(_DWORD *)(v3 + 1180); v174 = *(_DWORD *)(v3 + 5132); v175 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v69 + 4))(v69); v175[2] = v174; *v175 = 0; v175[1] = v69[2]; v176 = (_DWORD *)v69[2]; if ( v176 ) *v176 = v175; else v69[1] = v175; ++v69[3]; v69[2] = v175; result = 1; } else { LABEL_165: result = 0; } } return result; } // 49B770: could not find valid save-restore pair for ebx // 49B770: could not find valid save-restore pair for edi // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // AC9CD6: using guessed type char byte_AC9CD6; // AC9CD8: using guessed type int dword_AC9CD8; // ACCFCC: using guessed type float flt_ACCFCC; // ACD9D8: using guessed type int dword_ACD9D8; // ACEC34: using guessed type int dword_ACEC34; // AD019C: using guessed type int dword_AD019C; // AD01E0: using guessed type int dword_AD01E0; // AD01E8: using guessed type int dword_AD01E8; // B92022: using guessed type int dword_B92022; // B9202C: using guessed type char byte_B9202C; // B9202D: using guessed type char byte_B9202D; //----- (0049D4F0) -------------------------------------------------------- char __userpurge sub_49D4F0@(int a1@, int a2@, int a3@, int a4) { int v4; // edi _DWORD *v5; // eax _DWORD *v6; // ecx int v8; // ecx char *v9; // eax _DWORD **v10; // esi signed int v11; // ebx char *v12; // eax volatile LONG *v13; // eax char *v14; // eax void **v15; // eax int v16; // esi void **v17; // ebx char *v18; // eax void **v19; // eax int v20; // esi void **v21; // ebx char *v22; // eax void **v23; // eax int v24; // esi void **v25; // ebx char *v26; // eax void **v27; // eax int v28; // esi void **v29; // ebx _DWORD *v30; // eax _DWORD *v31; // esi void (__thiscall *v32)(_DWORD *, int); // eax _DWORD *v33; // eax _DWORD *v34; // esi void (__thiscall *v35)(_DWORD *, int); // eax char *v36; // ecx void (__thiscall ***v37)(void *, signed int); // esi const void **v38; // ecx char *v39; // esi signed int v40; // ebx _DWORD *v41; // eax _DWORD *v42; // eax _DWORD *v43; // eax _DWORD *v44; // eax _DWORD *v45; // eax _DWORD *v46; // eax _DWORD *v47; // eax _DWORD *v48; // eax _DWORD *v49; // eax _DWORD *v50; // eax _DWORD *v51; // eax _DWORD *v52; // eax _DWORD *v53; // eax _DWORD *v54; // eax _DWORD *v55; // eax _DWORD *v56; // eax _DWORD *v57; // eax _DWORD *v58; // eax _DWORD *v59; // eax _DWORD *v60; // eax _DWORD *v61; // eax _DWORD *v62; // eax _DWORD *v63; // eax _DWORD *v64; // eax _DWORD *v65; // eax _DWORD *v66; // eax _DWORD *v67; // eax _DWORD *v68; // eax _DWORD *v69; // eax _DWORD *v70; // eax _DWORD *v71; // eax _DWORD *v72; // eax _DWORD *v73; // eax _DWORD *v74; // eax _DWORD *v75; // eax _DWORD *v76; // eax _DWORD *v77; // eax _DWORD *v78; // eax _DWORD *v79; // eax _DWORD *v80; // eax _DWORD *v81; // eax _DWORD *v82; // eax _DWORD *v83; // eax _DWORD *v84; // eax _DWORD *v85; // eax _DWORD *v86; // eax _DWORD *v87; // eax _DWORD *v88; // eax _DWORD *v89; // eax _DWORD *v90; // eax _DWORD *v91; // eax _DWORD *v92; // eax _DWORD *v93; // eax _DWORD *v94; // eax _DWORD *v95; // eax _DWORD *v96; // eax _DWORD *v97; // eax _DWORD *v98; // eax _DWORD *v99; // eax _DWORD *v100; // eax _DWORD *v101; // eax _DWORD *v102; // eax _DWORD *v103; // eax _DWORD *v104; // eax _DWORD *v105; // eax _DWORD *v106; // eax _DWORD *v107; // eax _DWORD *v108; // eax _DWORD *v109; // eax _DWORD *v110; // eax _DWORD *v111; // eax _DWORD *v112; // eax _DWORD *v113; // eax _DWORD *v114; // eax _DWORD *v115; // eax _DWORD *v116; // eax _DWORD *v117; // eax _DWORD *v118; // eax _DWORD *v119; // eax _DWORD *v120; // eax _DWORD *v121; // eax int v122; // eax _DWORD *v123; // eax int v124; // ebx _DWORD *v125; // eax void *v126; // eax volatile LONG *v127; // ebx volatile LONG *v128; // eax void *v129; // eax volatile LONG *v130; // ebx volatile LONG *v131; // eax _DWORD *v132; // eax _DWORD *v133; // eax _DWORD *v134; // eax _DWORD *v135; // eax _DWORD *v136; // eax _DWORD *v137; // eax char *v138; // ebx _DWORD *v139; // eax _DWORD *v140; // eax _DWORD *v141; // eax _DWORD *v142; // eax _DWORD *v143; // eax _DWORD *v144; // eax void ***v145; // eax float *v146; // ecx void *v147; // eax float *v148; // eax _DWORD *v149; // eax _DWORD *v150; // eax _DWORD *v151; // eax _DWORD *v152; // eax _DWORD *v153; // eax _DWORD *v154; // eax int v155; // eax _DWORD *v156; // eax _DWORD *v157; // eax _DWORD *v158; // eax int v159; // [esp+30h] [ebp-5Ch] int v160; // [esp+38h] [ebp-54h] void *v161; // [esp+3Ch] [ebp-50h] char v162; // [esp+40h] [ebp-4Ch] int v163; // [esp+48h] [ebp-44h] char v164; // [esp+54h] [ebp-38h] int v165; // [esp+5Ch] [ebp-30h] char v166; // [esp+68h] [ebp-24h] int v167; // [esp+70h] [ebp-1Ch] int v168; // [esp+78h] [ebp-14h] int v169; // [esp+88h] [ebp-4h] v4 = a1; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } dword_ACE484 = v4; *((_DWORD *)sub_6CD770() + 49) = v4; v5 = sub_6CF210(); sub_6CF680(v5); sub_4E3D40(0); v6 = *(_DWORD **)(v4 + 652); if ( v6 ) sub_5A03D0(v6); if ( !sub_4984E0((_DWORD *)v4) || !sub_4975A0((_DWORD *)v4) || !sub_49B770(v4, a2, v4) ) return 0; if ( !byte_AC9CD1 ) { HIWORD(dword_B92034) = 5; v8 = 0; v9 = (char *)&dword_B92038 + 1; do { *v9 = v8; *(v9 - 1) = 12; v9[1] = 0; v9 += 3; ++v8; } while ( (signed int)v9 < (signed int)byte_B92048 ); } sub_496B90((int *)v4); sub_63ADC0(byte_AD8A08, byte_B9202B); sub_4E3D40(60); if ( !byte_AC9CD2 || byte_B92007 || dword_AB66DF != dword_AB680A && dword_AB66E3 != dword_AB680E ) sub_4985A0(v4, a3); else sub_497290((_DWORD *)v4); sub_496D40((char **)v4); sub_632A80((char *)&dword_AD46F0); sub_5A3790(*(_DWORD **)(v4 + 652)); sub_5A3790(*(_DWORD **)(v4 + 672)); v10 = (_DWORD **)(v4 + 676); v11 = 4; do { sub_5A3790(*(v10 - 5)); sub_5A3790(*v10); ++v10; --v11; } while ( v11 ); sub_8D06A0((float *)(v4 + 2624), flt_ACCFCC); *(float *)(v4 + 2644) = 5.0; sub_4E3D40(70); if ( !sub_499AE0() ) return 0; sub_66D910((char *)&unk_AD8D28); sub_4E3D40(95); if ( !sub_499DA0((_DWORD *)v4) ) return 0; if ( !sub_499C50((_DWORD ****)v4) ) { v12 = (char *)sub_40A910(2123137170); v13 = sub_462C30(1, v12); if ( v13 ) { v167 = 251; v168 = 0; sub_461760(v13, v4, &v166, 0); } else { v163 = 251; sub_8EF240((void *)v4, &v162); } return 1; } sub_4E3D40(100); sub_49F7B0(&dword_AB66B8); v165 = 9; sub_8EF240((void *)v4, &v164); if ( !byte_ACAD5C ) sub_420410(); v14 = (char *)sub_401410(byte_ACA838, "KQuestSucc.nif"); v15 = sub_8D03E0(v14, 0); v16 = *(_DWORD *)(v4 + 2476); v17 = v15; if ( (void **)v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v4 + 2476) = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)v17 + 1); } if ( !byte_ACAD5C ) sub_420410(); v18 = (char *)sub_401410(byte_ACA838, "KQuestFail.nif"); v19 = sub_8D03E0(v18, 0); v20 = *(_DWORD *)(v4 + 2480); v21 = v19; if ( (void **)v20 != v19 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *(_DWORD *)(v4 + 2480) = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)v21 + 1); } if ( !byte_ACAD5C ) sub_420410(); v22 = (char *)sub_401410(byte_ACA838, "OX_O.nif"); v23 = sub_8D03E0(v22, 0); v24 = *(_DWORD *)(v4 + 2488); v25 = v23; if ( (void **)v24 != v23 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); *(_DWORD *)(v4 + 2488) = v25; if ( v25 ) InterlockedIncrement((volatile LONG *)v25 + 1); } if ( !byte_ACAD5C ) sub_420410(); v26 = (char *)sub_401410(byte_ACA838, "OX_X.nif"); v27 = sub_8D03E0(v26, 0); v28 = *(_DWORD *)(v4 + 2492); v29 = v27; if ( (void **)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *(_DWORD *)(v4 + 2492) = v29; if ( v29 ) InterlockedIncrement((volatile LONG *)v29 + 1); } *(_BYTE *)(v4 + 32) = 1; SetFocus(hWnd); dword_AAE830 = v4; sub_6BED10(); v30 = operator new(0x48u); v31 = v30; v161 = v30; v169 = 0; if ( v30 ) { sub_6C2E00((void ***)v30, 0); *v31 = &GatheringTask::`vftable'; v31[2] = &GatheringTask::`vftable'; } else { v31 = 0; } v32 = *(void (__thiscall **)(_DWORD *, int))v31[2]; v169 = -1; v32(v31 + 2, v4); v33 = operator new(0x4Cu); v34 = v33; v161 = v33; v169 = 1; if ( v33 ) { sub_6C2E00((void ***)v33, 0); *v34 = &ProductTask::`vftable'; v34[2] = &ProductTask::`vftable'; } else { v34 = 0; } v35 = *(void (__thiscall **)(_DWORD *, int))v34[2]; v169 = -1; v35(v34 + 2, v4); sub_6D8870(v4); sub_6FDBE0(v4); sub_6D18B0(v4); sub_62FE80(); v36 = (char *)*sub_49F490(&v161); v169 = 2; sub_62FF70(v36); v169 = -1; if ( v161 ) { v37 = (void (__thiscall ***)(void *, signed int))v161; if ( !InterlockedDecrement((volatile LONG *)v161 + 1) ) { if ( v37 ) (**v37)(v37, 1); } } sub_6C9C50(v4); v38 = *(const void ***)(v4 + 1052); if ( v38 ) sub_61D280(v38); sub_497E10((void *)v4); sub_7177E0(v4); sub_714FB0(v4); sub_68CCB0(v4); v39 = (char *)(v4 + 4720); v40 = 6; do { *((_DWORD *)v39 + 1) = 0; *(_DWORD *)v39 = 0; *((_DWORD *)v39 - 1) = 0; *((_DWORD *)v39 - 2) = 0; *((_DWORD *)v39 - 3) = 0; strncpy(v39 - 12, &byte_9BB5AA, 0x14u); v39 += 20; --v40; } while ( v40 ); sub_909460(1); sub_909470(1); *(_BYTE *)(v4 + 2344) = 0; sub_4A0060((_DWORD *)(v4 + 624)); v41 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 716)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v41, 0); v42 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 728)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v42, 0); v43 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 732)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v43, 0); v44 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 772)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v44, 0); v45 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 776)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v45, 0); v46 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 924)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v46, 0); v47 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 944)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v47, 0); v48 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 936)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v48, 0); v49 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 948)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v49, 0); v50 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 964)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v50, 0); v51 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 984)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v51, 0); v52 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 988)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v52, 0); v53 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 992)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v53, 0); v54 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 996)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v54, 0); v55 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1000)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v55, 0); v56 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1004)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v56, 0); v57 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1012)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v57, 0); v58 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1016)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v58, 0); v59 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1032)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v59, 0); v60 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 768)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v60, 0); v61 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 736)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v61, 0); v62 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 740)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v62, 0); v63 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 712)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v63, 0); v64 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 916)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v64, 0); v65 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 864)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v65, 0); v66 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 868)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v66, 0); v161 = *(void **)(*(_DWORD *)(v4 + 868) + 496); v67 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v67, 0); v68 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 872)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v68, 0); v69 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 876)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v69, 0); v70 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 880)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v70, 0); v71 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 884)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v71, 0); v72 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 888)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v72, 0); v161 = *(void **)(v4 + 580); v73 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v73, 0); v161 = *(void **)(*(_DWORD *)(v4 + 572) + 532); v74 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v74, 0); v161 = (void *)sub_569900(*(_DWORD ***)(v4 + 572)); v75 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v75, 0); v76 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 556)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v76, 0); v77 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 560)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v77, 0); v78 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 564)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v78, 0); v79 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 620)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v79, 0); v80 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5184)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v80, 0); v81 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 584)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v81, 0); v82 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1028)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v82, 0); v83 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1024)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v83, 0); v84 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 612)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v84, 0); v85 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 616)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v85, 0); sub_6C2CA0(0.0); v161 = (void *)sub_6D3810(); v86 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v86, 0); v161 = (void *)sub_6D3830(); v87 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v87, 0); v161 = (void *)dword_B9DE60; v88 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v88, 0); v89 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 900)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v89, 0); v161 = *(void **)(*(_DWORD *)(v4 + 900) + 444); v90 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v90, 0); v161 = (void *)sub_7154A0(); v91 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v91, 0); v161 = (void *)sub_7154F0(); v92 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v92, 0); v161 = (void *)sub_7154B0(); v93 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v93, 0); v161 = (void *)sub_7154C0(); v94 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v94, 0); v161 = (void *)sub_7154D0(); v95 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v95, 0); v161 = (void *)sub_7154E0(); v96 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v96, 0); v161 = (void *)sub_714D70(); v97 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v97, 0); v161 = *(void **)(v4 + 912); v98 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v98, 0); v99 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1240)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v99, 0); v100 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1268)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v100, 0); v101 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1144)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v101, 0); v161 = (void *)sub_4F4B90(*(_DWORD **)(v4 + 712)); v102 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v102, 0); v161 = (void *)sub_5AF5A0(*(_DWORD **)(v4 + 728)); v103 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v103, 0); v161 = (void *)sub_6D1780(); v104 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v104, 0); v161 = *(void **)(sub_6D3840() + 344); v105 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v105, 0); v106 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 980)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v106, 0); v107 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 952)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v107, 0); v108 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1056)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v108, 0); v109 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 588)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v109, 0); v110 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 592)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v110, 0); v111 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 720)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v111, 0); v112 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 608)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v112, 0); v161 = (void *)sub_6D3870(); v113 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v113, 0); v161 = (void *)sub_6D38D0(); v114 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v114, 0); v161 = (void *)sub_6D3880(); v115 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v115, 0); v116 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1128)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v116, 0); v117 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1104)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v117, 0); *(_BYTE *)(v4 + 2659) = 1; v161 = (void *)sub_6D3840(); v118 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v118, 0); v161 = (void *)sub_6D3860(); v119 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v119, 0); v161 = (void *)sub_6D3890(); v120 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v120, 0); v161 = *(void **)(*(_DWORD *)(v4 + 772) + 584); v121 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v121, 0); v122 = *(_DWORD *)(v4 + 776); if ( v122 ) { v161 = *(void **)(v122 + 672); v123 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v123, 0); } v124 = *(_DWORD *)(v4 + 980); if ( v124 ) { v161 = *(void **)(*(_DWORD *)(v124 + 348) + 496); v125 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v125, 0); } sub_6BD320((unsigned __int8)byte_AB66EC); v126 = operator new(0x28u); v161 = v126; v169 = 3; if ( v126 ) v161 = sub_6B3D80((float *)v126); else v161 = 0; v127 = *(volatile LONG **)(v4 + 4832); v169 = -1; if ( v127 != v161 ) { if ( v127 && !InterlockedDecrement(v127 + 1) && v127 ) (**(void (__thiscall ***)(void *, signed int))v127)((void *)v127, 1); v128 = (volatile LONG *)v161; *(_DWORD *)(v4 + 4832) = v161; if ( v128 ) InterlockedIncrement(v128 + 1); } v129 = operator new(0x5Cu); v161 = v129; v169 = 4; if ( v129 ) v161 = sub_6B4F60((float *)v129); else v161 = 0; v130 = *(volatile LONG **)(v4 + 4836); v169 = -1; if ( v130 != v161 ) { if ( v130 && !InterlockedDecrement(v130 + 1) && v130 ) (**(void (__thiscall ***)(void *, signed int))v130)((void *)v130, 1); v131 = (volatile LONG *)v161; *(_DWORD *)(v4 + 4836) = v161; if ( v131 ) InterlockedIncrement(v131 + 1); } v132 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1284)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v132, 0); v133 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1292)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v133, 0); v134 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 1296)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v134, 0); v135 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4880)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v135, 0); v136 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4908)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v136, 0); v137 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4912)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v160, v137, 0); v138 = (char *)(v4 + 4916); v161 = (void *)4; do { v139 = sub_49FAD0((_DWORD *)(v4 + 624), v138); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v139, 0); v138 += 4; v161 = (char *)v161 - 1; } while ( v161 ); v140 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4952)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v140, 0); v141 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4948)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v141, 0); v142 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5104)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v142, 0); v143 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5116)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v143, 0); v144 = operator new(0x1E0u); v161 = v144; v169 = 5; if ( v144 ) v145 = (void ***)sub_6AFFF0(v144); else v145 = 0; v169 = -1; *(_DWORD *)(v4 + 5096) = v145; sub_6B0110(v145); v146 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v147 = operator new(0xB4u); v161 = v147; v169 = 6; if ( v147 ) v148 = sub_4546A0((float *)v147); else v148 = 0; v146 = v148; v169 = -1; dword_ACCFE0 = (int)v148; } sub_4547E0(v146, v4); v149 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5120)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v149, 0); v150 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 4980)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v150, 0); v151 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5128)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v151, 0); v152 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5132)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v152, 0); v153 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5136)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v153, 0); v154 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5172)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v154, 0); v155 = *(_DWORD *)(v4 + 864); if ( !v155 ) return 0; v161 = *(void **)(v155 + 22280); if ( !v161 ) return 0; v156 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)&v161); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v156, 0); v157 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5176)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v157, 0); v158 = sub_49FAD0((_DWORD *)(v4 + 624), (char *)(v4 + 5180)); sub_8DE1B0((_DWORD *)(v4 + 624), (int)&v159, v158, 0); sub_4B6700(); return 1; } // 9BB844: using guessed type void *GatheringTask::`vftable'; // 9BB860: using guessed type void *GatheringTask::`vftable'; // 9BB878: using guessed type void *ProductTask::`vftable'; // 9BB894: using guessed type void *ProductTask::`vftable'; // AAE830: using guessed type int dword_AAE830; // AB66B8: using guessed type int dword_AB66B8; // AB66E3: using guessed type int dword_AB66E3; // AB66EC: using guessed type char byte_AB66EC; // AB680A: using guessed type int dword_AB680A; // AB680E: using guessed type int dword_AB680E; // AC9CD1: using guessed type char byte_AC9CD1; // AC9CD2: using guessed type char byte_AC9CD2; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // ACCFE0: using guessed type int dword_ACCFE0; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // AD46F0: using guessed type int dword_AD46F0; // B92007: using guessed type char byte_B92007; // B9202B: using guessed type char byte_B9202B; // B92034: using guessed type int dword_B92034; // B92038: using guessed type int dword_B92038; // B9DE60: using guessed type int dword_B9DE60; //----- (0049EBC0) -------------------------------------------------------- char __thiscall sub_49EBC0(_DWORD *this, int a2, int a3, int a4, __int16 *a5) { int v5; // edi float *v6; // ecx char result; // al char *v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // esi int v13; // ebx char v14; // cl int v15; // eax __int16 *v16; // esi char *v17; // eax int v18; // ebx int v19; // eax int v20; // eax int v21; // eax unsigned __int16 *v22; // eax char *v23; // esi char *v24; // eax char *v25; // edi char *v26; // eax int v27; // [esp+14h] [ebp+8h] unsigned __int16 *v28; // [esp+20h] [ebp+14h] char *v29; // [esp+20h] [ebp+14h] v5 = (int)this; if ( a2 != 8 ) return 0; switch ( a3 ) { case 46: if ( a5[2] != 2817 ) { v6 = (float *)this[17]; *(_DWORD *)(v5 + 64) = 0; sub_524330(v6); sub_65B830(dword_AD8EBC); return 1; } v8 = sub_664AB0(dword_AD8C90, a5[1]); v27 = (int)v8; if ( !v8 ) return 1; v9 = sub_49F370(*((unsigned __int16 *)v8 + 471)); if ( !v9 ) return 1; v10 = sub_496A60(*(_DWORD *)(v9 + 99)); v11 = sub_498400(v10, (unsigned __int16)*a5); v12 = v11; if ( !v11 ) return 1; v28 = (unsigned __int16 *)sub_40C8D0((void *)(v11 + 134)); if ( !v28 ) return 1; sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v5 + 68)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 68)); v13 = *(_DWORD *)(v12 + 166); if ( sub_6F3100(5) ) v13 /= 2; v14 = *(_BYTE *)(v12 + 38); v15 = 3; if ( v14 == 65 ) { v15 = 5; } else if ( v14 == 67 || v14 == 77 ) { v15 = 4; } sub_524A20(*(_DWORD *)(v5 + 68), 0x3E8u, v13, v15); sub_65D480((int)dword_AD8EBC, v5, v27, *v28); *(_DWORD *)(v5 + 64) = 2; result = 1; break; case 47: v16 = a5; v29 = sub_664AB0(dword_AD8C90, *a5); v17 = sub_664AB0(dword_AD8C90, v16[1]); v18 = (int)v17; if ( !v29 ) return 1; if ( !v17 ) return 1; v19 = sub_49F370(*((unsigned __int16 *)v17 + 471)); if ( !v19 ) return 1; v20 = sub_496A60(*(_DWORD *)(v19 + 99)); v21 = sub_498400(v20, (unsigned __int16)v16[2]); if ( !v21 ) return 1; v22 = (unsigned __int16 *)sub_40C8D0((void *)(v21 + 134)); if ( !v22 ) return 1; sub_65D480((int)v29, v5, v18, *v22); return 1; case 49: v23 = sub_664AB0(dword_AD8C90, *a5); sub_664AB0(dword_AD8C90, a5[1]); if ( !v23 ) return 1; sub_65B830(v23); if ( v23 == dword_AD8EBC ) sub_524330(*(float **)(v5 + 68)); return 1; case 51: if ( *a5 == 2817 ) { v24 = sub_664AB0(dword_AD8C90, a5[1]); if ( v24 ) sub_65B790(v24); } sub_524350(*(float **)(v5 + 68)); sub_65B830(dword_AD8EBC); *(_DWORD *)(v5 + 64) = 0; return 1; case 52: v25 = sub_664AB0(dword_AD8C90, *a5); v26 = sub_664AB0(dword_AD8C90, a5[1]); if ( v26 ) sub_65B790(v26); if ( !v25 ) return 1; sub_65B830(v25); return 1; default: return 0; } return result; } //----- (0049EEB0) -------------------------------------------------------- int __stdcall sub_49EEB0(int a1, _DWORD *a2) { unsigned int v2; // ebx int v3; // eax int v4; // edi char *v5; // eax unsigned int v6; // edi int v7; // eax int v8; // eax int *v9; // eax int v10; // ebx unsigned int v11; // esi int v12; // eax unsigned int v13; // edi unsigned int v14; // edx unsigned __int8 *v15; // ecx int v16; // eax bool v17; // sf signed int v18; // eax int *v20; // eax int v21; // esi int *v22; // esi signed int v23; // edi int v24; // [esp+10h] [ebp-80h] int v25; // [esp+14h] [ebp-7Ch] int v26; // [esp+18h] [ebp-78h] _DWORD *v27; // [esp+1Ch] [ebp-74h] int *v28; // [esp+20h] [ebp-70h] unsigned int v29; // [esp+24h] [ebp-6Ch] int v30; // [esp+28h] [ebp-68h] unsigned int v31; // [esp+2Ch] [ebp-64h] void *v32; // [esp+30h] [ebp-60h] void *v33; // [esp+34h] [ebp-5Ch] int v34; // [esp+40h] [ebp-50h] unsigned int v35; // [esp+44h] [ebp-4Ch] unsigned int v36; // [esp+48h] [ebp-48h] unsigned int v37; // [esp+4Ch] [ebp-44h] char v38; // [esp+50h] [ebp-40h] int *v39; // [esp+54h] [ebp-3Ch] int v40; // [esp+8Ch] [ebp-4h] v27 = a2; *a2 = 1; v2 = 0; v30 = 0; `eh vector constructor iterator'(&v38, 0x10u, 3, sub_4A01F0, sub_4A0190); v40 = 0; if ( sub_49F550() ) { do { v3 = sub_7474E0((_DWORD *)(dword_ACD948 + 4), v2); v4 = v3; if ( v3 && *(_DWORD *)(v3 + 34) == a1 ) { if ( !strcmp((const char *)(v3 + 38), (const char *)&unk_9BB5A8) ) { v40 = -1; `eh vector destructor iterator'(&v38, 0x10u, 3, sub_4A0190); return v4; } if ( v4 + 38 + strlen((const char *)(v4 + 38)) + 1 != v4 + 39 ) { v35 = 15; v34 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, (void *)(v4 + 38), strlen((const char *)(v4 + 38))); v37 = v2; LOBYTE(v40) = 1; v5 = sub_4A00B0(&v38, (char *)&v32); sub_7478C0(&v38, (int)&v24, v5, 0); LOBYTE(v40) = 0; if ( v35 >= 0x10 ) operator delete(v32); } } ++v2; } while ( v2 < sub_49F550() ); } sub_6F3170(2, &v26); v6 = 0; v29 = 8 * (3 * v26 + 6); v31 = 0; while ( 1 ) { v7 = dword_ADA234[v6]; if ( v7 ) { v8 = *(_DWORD *)(v7 + 112); if ( v8 ) { v36 = 15; v35 = 0; LOBYTE(v33) = 0; sub_4018E0(&v33, (void *)(v8 + 2), strlen((const char *)(v8 + 2))); LOBYTE(v40) = 2; v9 = sub_4F1D20(&v38, (int)&v33); v10 = (int)v39; v28 = v9; if ( v9 == v39 ) goto LABEL_41; v11 = v9[7]; v12 = (int)(v9 + 3); if ( *(_DWORD *)(v12 + 20) >= 0x10u ) v12 = *(_DWORD *)v12; v13 = v35; v14 = v35; if ( v35 >= v11 ) v14 = v11; v15 = (unsigned __int8 *)v33; if ( v36 < 0x10 ) v15 = (unsigned __int8 *)&v33; v16 = sub_40C0B0(v15, (unsigned __int8 *)v12, v14); v17 = v16 < 0; if ( !v16 ) { if ( v13 >= v11 ) v18 = v13 != v11; else v18 = -1; v17 = v18 < 0; } v6 = v31; if ( v17 ) { LABEL_41: v25 = v10; v20 = &v25; } else { v20 = (int *)&v28; } v21 = *v20; LOBYTE(v40) = 0; if ( v36 >= 0x10 ) { operator delete(v33); v10 = (int)v39; } v36 = 15; v35 = 0; LOBYTE(v33) = 0; if ( v21 != v10 ) break; } } v31 = ++v6; if ( v6 >= 0xC0 ) goto LABEL_36; } if ( v6 >= v29 ) *v27 = 0; v30 = sub_7474E0((_DWORD *)(dword_ACD948 + 4), *(_DWORD *)(v21 + 40)); LABEL_36: v22 = (int *)&v39; v23 = 3; do { sub_484780(*(void **)(*v22 + 4)); *(_DWORD *)(*v22 + 4) = *v22; *(_DWORD *)*v22 = *v22; *(_DWORD *)(*v22 + 8) = *v22; v22[1] = 0; v22 += 4; --v23; } while ( v23 ); v40 = -1; `eh vector destructor iterator'(&v38, 0x10u, 3, sub_4A0190); return v30; } // ACD948: using guessed type int dword_ACD948; //----- (0049F1D0) -------------------------------------------------------- char __thiscall sub_49F1D0(_DWORD *this, int a2, _DWORD **a3, int a4) { int v4; // eax _DWORD *v5; // esi _DWORD **v6; // ebx int v7; // eax int v8; // eax int v9; // edi const CHAR *v10; // eax const CHAR *v11; // edi LOBYTE(v4) = a2 - 30; v5 = this; if ( a2 == 30 ) { if ( !this[14] ) { v6 = a3; LOBYTE(v4) = sub_65C3B0(*a3); if ( !(_BYTE)v4 ) { v7 = sub_49F370(*((unsigned __int16 *)*v6 + 471)); v8 = sub_496A60(*(_DWORD *)(v7 + 99)); v9 = v8; v4 = (unsigned __int16)sub_49F930(v8); if ( (_WORD)v4 != -1 ) { if ( !sub_6BE900(v4) || (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { v10 = sub_40C190(1821530491); } else if ( sub_49EEB0(v9, &a2) ) { if ( a2 ) { LOWORD(a3) = *((_WORD *)*v6 + 274); LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 8, 45, &a3, 2u); v5[14] = 1; return v4; } v10 = sub_40C190(-1074321369); } else { v10 = sub_40C190(-12878195); } v11 = v10; if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 4))(25, v10, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 20))(25, v11, v5); } LOBYTE(v4) = (*(int (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(*v5 + 20))(v5, 25, v11, v5); } } } } else { LOBYTE(v4) = a2 - 31; if ( a2 == 31 ) { if ( this[14] == 2 ) { LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 8, 50, 0, 0); v5[14] = 3; } } else { LOBYTE(v4) = a2 - 32; if ( a2 == 32 && this[14] == 2 ) { if ( !a3 ) sub_6F3D10(&off_AB7F2C, 8, 48, 0, 0); sub_524330((float *)v5[15]); LOBYTE(v4) = sub_65B830(dword_AD8EBC); v5[14] = 0; } } } return v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0049F370) -------------------------------------------------------- int __cdecl sub_49F370(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (0049F3C0) -------------------------------------------------------- _DWORD *__thiscall sub_49F3C0(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 45) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 45) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 45) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 45) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 45) ) goto LABEL_11; return result; } //----- (0049F420) -------------------------------------------------------- void __cdecl sub_49F420(float a1) { flt_AB66C2 = a1; if ( !byte_ADB629 ) flt_B6706C = a1 * flt_AB66F1; } // AB66C2: using guessed type float flt_AB66C2; // AB66F1: using guessed type float flt_AB66F1; // ADB629: using guessed type char byte_ADB629; // B6706C: using guessed type float flt_B6706C; //----- (0049F460) -------------------------------------------------------- void *__thiscall sub_49F460(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9BB7D8: using guessed type void *NiTListBase>,NiPointer>::`vftable'; //----- (0049F490) -------------------------------------------------------- _DWORD *__cdecl sub_49F490(_DWORD *a1) { int v1; // eax v1 = dword_AD1608; *a1 = dword_AD1608; if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); return a1; } // AD1608: using guessed type int dword_AD1608; //----- (0049F4C0) -------------------------------------------------------- int __thiscall sub_49F4C0(_DWORD *this, unsigned int a2) { int result; // eax if ( this[47] > a2 ) result = *(_DWORD *)(this[45] + 4 * a2); else result = 0; return result; } //----- (0049F4F0) -------------------------------------------------------- void sub_49F4F0(int a1, char *a2, ...) { va_list va; // [esp+14h] [ebp+10h] va_start(va, a2); if ( *(_DWORD *)(a1 + 4) ) { vsprintf(byte_ACE4D0, a2, va); sub_492060(*(_DWORD **)(a1 + 4), (int)byte_ACE4D0); } } //----- (0049F530) -------------------------------------------------------- int sub_49F530() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA4C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA4C: using guessed type int dword_ACDA4C; //----- (0049F550) -------------------------------------------------------- int sub_49F550() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD948 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD948: using guessed type int dword_ACD948; //----- (0049F570) -------------------------------------------------------- int __thiscall sub_49F570(void *this, int a2, int a3, float a4, float a5) { void *v5; // esi int v7; // [esp+8h] [ebp-10h] int v8; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] int v10; // [esp+14h] [ebp-4h] v5 = this; v7 = 0; v8 = 0; v9 = 0; v10 = 0; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 208))(this, &v7); return (*(int (__thiscall **)(void *, signed int))(*(_DWORD *)v5 + 308))( v5, (signed int)((double)(unsigned int)a2 * a4 - (double)v7)); } //----- (0049F5F0) -------------------------------------------------------- int __thiscall sub_49F5F0(void *this, int a2, int a3, float a4, float a5) { void *v5; // esi int v7; // [esp+8h] [ebp-10h] int v8; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] int v10; // [esp+14h] [ebp-4h] v5 = this; v7 = 0; v8 = 0; v9 = 0; v10 = 0; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 208))(this, &v7); return (*(int (__thiscall **)(void *, signed int))(*(_DWORD *)v5 + 308))( v5, (signed int)((double)(unsigned int)a2 * a4 - (double)v8)); } //----- (0049F670) -------------------------------------------------------- unsigned int __thiscall sub_49F670(float *this) { int v1; // edx unsigned int v2; // esi unsigned int result; // eax unsigned int v4; // [esp+8h] [ebp-8h] int v5; // [esp+Ch] [ebp-4h] v1 = *((_DWORD *)this + 74); if ( v1 && v1 != 2 ) { if ( v1 != 1 && v1 != 3 ) v2 = v4; else v2 = *(_DWORD *)(**(_DWORD **)(*(_DWORD *)(*((_DWORD *)this + 72) + 8) + 36) + 24); } else { v2 = *(_DWORD *)(**(_DWORD **)(*(_DWORD *)(*((_DWORD *)this + 72) + 8) + 36) + 20); } if ( 0.0 == this[76] ) { result = 0; } else { result = (signed __int64)(this[75] / this[76] * (double)v2); if ( result > v2 ) result = v2; } if ( !v1 || (LOBYTE(v5) = 0, v1 == 1) ) LOBYTE(v5) = 1; if ( !v1 || v1 == 2 ) return (*(int (__stdcall **)(unsigned int, int))(*(_DWORD *)this + 484))(result, v5); if ( v1 == 3 || v1 == 1 ) result = (*(int (__stdcall **)(unsigned int, int))(*(_DWORD *)this + 488))(result, v5); return result; } //----- (0049F760) -------------------------------------------------------- int __cdecl sub_49F760(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (0049F7B0) -------------------------------------------------------- int __cdecl sub_49F7B0(const void *a1) { int result; // eax qmemcpy(&dword_AB66B8, a1, 0x3Fu); sub_6BD7A0(flt_AB66BE); if ( !byte_ADB629 ) flt_B6706C = flt_AB66F1 * flt_AB66C2; *(float *)(dword_B66FB0 + 292) = flt_AB66D2; dword_B67100 = dword_AB66D6; sub_6BD810(byte_AB66DA); result = dword_AB66DF; dword_AB680A = dword_AB66DF; dword_AB680E = dword_AB66E3; return result; } // AB66B8: using guessed type int dword_AB66B8; // AB66BE: using guessed type float flt_AB66BE; // AB66C2: using guessed type float flt_AB66C2; // AB66D2: using guessed type float flt_AB66D2; // AB66D6: using guessed type int dword_AB66D6; // AB66DA: using guessed type char byte_AB66DA; // AB66E3: using guessed type int dword_AB66E3; // AB66F1: using guessed type float flt_AB66F1; // AB680A: using guessed type int dword_AB680A; // AB680E: using guessed type int dword_AB680E; // ADB629: using guessed type char byte_ADB629; // B6706C: using guessed type float flt_B6706C; // B67100: using guessed type int dword_B67100; //----- (0049F840) -------------------------------------------------------- _DWORD *__thiscall sub_49F840(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase>,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BB7D8: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9BB7F0: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (0049F8D0) -------------------------------------------------------- int __cdecl sub_49F8D0(_DWORD *a1) { unsigned int v1; // edi int v2; // eax v1 = 0; if ( !sub_49F530() ) return 0; while ( 1 ) { v2 = sub_7474E0((_DWORD *)(dword_ACDA4C + 4), v1); if ( *(_DWORD *)(v2 + 2) == *a1 && *(_DWORD *)(v2 + 6) == a1[1] && *(_DWORD *)(v2 + 10) == a1[2] ) break; if ( ++v1 >= sub_49F530() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA4C + 4), v1); } // ACDA4C: using guessed type int dword_ACDA4C; //----- (0049F930) -------------------------------------------------------- signed __int16 __cdecl sub_49F930(int a1) { unsigned int v1; // esi int v2; // eax v1 = 0; if ( !sub_49F550() ) return -1; while ( 1 ) { v2 = sub_7474E0((_DWORD *)(dword_ACD948 + 4), v1); if ( *(_DWORD *)(v2 + 34) == a1 ) break; if ( ++v1 >= sub_49F550() ) return -1; } return *(_WORD *)v2; } // ACD948: using guessed type int dword_ACD948; //----- (0049F980) -------------------------------------------------------- int __thiscall sub_49F980(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase>,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase>,NiPointer>::`vftable'; return result; } // 9BB7D8: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9BB7F0: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (0049FA00) -------------------------------------------------------- LONG __fastcall sub_49FA00(_DWORD *a1) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ST00_4 _DWORD *v4; // esi _DWORD *v5; // edi _DWORD *v6; // ST00_4 _DWORD *v8; // [esp+14h] [ebp-10h] v8 = a1; v1 = a1 + 12; a1[12] = &NiTPointerListBase>,NiPointer>::`vftable'; v2 = (_DWORD *)a1[13]; if ( v2 ) { do { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } while ( v2 ); a1 = v8; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase>,NiPointer>::`vftable'; v4 = a1 + 8; a1[8] = &NiTPointerListBase>,NiPointer>::`vftable'; v5 = (_DWORD *)a1[9]; if ( v5 ) { do { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v6); } while ( v5 ); a1 = v8; } v4[3] = 0; v4[1] = 0; v4[2] = 0; *v4 = &NiTListBase>,NiPointer>::`vftable'; *a1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9BB7D8: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9BB7F0: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (0049FAD0) -------------------------------------------------------- _DWORD *__thiscall sub_49FAD0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax void **v4; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x14u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 8) = 0; if ( result != (_DWORD *)-12 ) result[3] = *(_DWORD *)a2; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0049FB40) -------------------------------------------------------- int __thiscall sub_49FB40(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax int result; // eax v1 = this; v2 = sub_592AE0(0); v1[17] = v2; (**(void (__stdcall ***)(int))(v2 + 232))((int)(v1 + 2)); v3 = sub_4F3800(0, 1); v1[18] = v3; (**(void (__stdcall ***)(int))(v3 + 232))((int)(v1 + 2)); sub_8F2880((_BYTE *)v1[18], 0); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[18]); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[18] + 256))(0); dword_B9DE60 = v1[17]; return result; } // B9DE60: using guessed type int dword_B9DE60; //----- (0049FBB0) -------------------------------------------------------- int __cdecl sub_49FBB0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (0049FC00) -------------------------------------------------------- void __thiscall sub_49FC00(int *this, int a2, __int16 *a3, int a4) { int v4; // ebx float *v5; // ecx int v6; // ecx __int16 *v7; // esi int v8; // edi int v9; // esi int v10; // esi int v11; // edx v4 = (int)this; switch ( a2 ) { case 33: sub_593A30(this[15], *a3); break; case 34: v7 = a3; LOWORD(a3) = *a3; sub_6F3D10(&off_AB7F2C, 8, 53, &a3, 2u); v8 = (unsigned __int16)*v7; v9 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v8) ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v9 + 200) ) { v11 = *(_DWORD *)(v9 + 196); if ( *(_DWORD *)(v11 + 4 * v8) ) v10 = *(_DWORD *)(v11 + 4 * v8); else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 64)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 64)); if ( v10 ) sub_4F34B0(*(_DWORD *)(v4 + 64), *(_DWORD *)(v10 + 203), 0); sub_65D6A0((int *)dword_AD8EBC, v4, v8); break; case 35: sub_6F3D10(&off_AB7F2C, 8, 57, 0, 0); if ( dword_AD8EBC ) (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); v5 = *(float **)(v4 + 64); if ( v5 ) sub_4F31E0(v5); v6 = *(_DWORD *)(v4 + 60); if ( v6 ) sub_5928D0(v6); break; } } // AB7F2C: using guessed type void **off_AB7F2C; // ACE8D0: using guessed type int dword_ACE8D0; //----- (0049FD20) -------------------------------------------------------- char __userpurge sub_49FD20@(int a1@, int a2@, int a3, int a4, int a5, __int16 *a6) { int v6; // edi __int16 *v7; // eax char result; // al int v9; // esi const CHAR *v10; // ebx int *v11; // eax char *v12; // eax int v13; // esi const CHAR *v14; // ebx _DWORD *v15; // esi _DWORD *v16; // eax int v17; // ecx _DWORD *v18; // esi _DWORD *v19; // eax char *v20; // esi _DWORD *v21; // edi _DWORD *v22; // eax v6 = a1; if ( a3 == 8 ) { switch ( a4 ) { case 54: v9 = a1 + 8; v10 = sub_40C190(187771224); if ( *(_DWORD *)(v6 + 12) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v6 + 12) + 4))(25, v10, v6 + 8); if ( *(_DWORD *)(v6 + 12) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v6 + 12) + 20))(25, v10, v6 + 8); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)v9 + 20))(v6 + 8, 25, v10, v6 + 8); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); sub_4F31E0(*(float **)(v6 + 72)); sub_5928D0(*(_DWORD *)(v6 + 68)); goto LABEL_11; case 55: goto LABEL_11; case 56: v11 = (int *)sub_664AB0(dword_AD8C90, *a6); if ( v11 ) sub_65D6A0(v11, a2, v6); return 1; case 58: v12 = sub_664AB0(dword_AD8C90, *a6); if ( v12 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v12 + 340))(v12); return 1; case 59: if ( a6[1] == 2817 ) { sub_4F3590(*(_DWORD *)(a1 + 72)); sub_593480(*(_DWORD **)(v6 + 68)); if ( !sub_592960(*(_DWORD *)(v6 + 68)) ) (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); v18 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); v19 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370(&unk_B91250, "PrdctSucc", *v19, v19[1], v19[2], *v18, v18[1], v18[2], flt_ACCFCC, 1.0); goto LABEL_27; } v13 = a1 + 8; v14 = sub_40C190(-822983896); if ( *(_DWORD *)(v6 + 12) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v6 + 12) + 4))(25, v14, v6 + 8); if ( *(_DWORD *)(v6 + 12) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v6 + 12) + 20))(25, v14, v6 + 8); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)v13 + 20))(v6 + 8, 25, v14, v6 + 8); sub_4F31E0(*(float **)(v6 + 72)); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); v15 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); v16 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370(&unk_B91250, "PrdctFail", *v16, v16[1], v16[2], *v15, v15[1], v15[2], flt_ACCFCC, 1.0); v17 = *(_DWORD *)(v6 + 68); if ( v17 ) { sub_5928D0(v17); result = 1; } else { LABEL_11: result = 1; } break; case 60: v20 = sub_664AB0(dword_AD8C90, *a6); if ( v20 ) { (*(void (__thiscall **)(char *))(*(_DWORD *)v20 + 340))(v20); v21 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v20 + 212))(v20); v22 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v20 + 196))(v20); sub_6AF370(&unk_B91250, "PrdctSucc", *v22, v22[1], v22[2], *v21, v21[1], v21[2], flt_ACCFCC, 1.0); } goto LABEL_27; default: goto LABEL_30; } } else if ( a3 != 18 || a4 != 29 ) { LABEL_30: result = 0; } else { v7 = sub_6BE790(*a6); if ( v7 ) { *((_DWORD *)v7 + 1) = *(_DWORD *)(a6 + 1); result = 1; } else { LABEL_27: result = 1; } } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004A0060) -------------------------------------------------------- int __thiscall sub_4A0060(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[17] ) { do { sub_67AEC0((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 17) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (004A00B0) -------------------------------------------------------- char *__thiscall sub_4A00B0(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v6; // [esp+0h] [ebp-38h] void **v7; // [esp+10h] [ebp-28h] void *v8; // [esp+1Ch] [ebp-1Ch] char *v9; // [esp+20h] [ebp-18h] void *v10; // [esp+24h] [ebp-14h] int *v11; // [esp+28h] [ebp-10h] int v12; // [esp+34h] [ebp-4h] v11 = &v6; v2 = this; v3 = (char *)operator new(0x30u); v10 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a2); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v12 = 0; v9 = v3 + 12; v8 = v3 + 12; LOBYTE(v12) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_4017F0((const void **)v3 + 3, (const void **)v4, 0, (void *)0xFFFFFFFF); *((_DWORD *)v3 + 10) = *((_DWORD *)v4 + 7); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004A0190) -------------------------------------------------------- void __thiscall sub_4A0190(void *this) { void **v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] void *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = (void **)this; v5 = this; v2 = (int *)*((_DWORD *)this + 1); v3 = *v2; v6 = 0; sub_4847E0(this, (int *)&v4, v3, (int)v2); operator delete(v1[1]); } //----- (004A01F0) -------------------------------------------------------- void __thiscall sub_4A01F0(void *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v3; // [esp+4h] [ebp-10h] char *v4; // [esp+10h] [ebp-4h] v1 = this; *((_DWORD *)this + 2) = 0; v2 = operator new(0x30u); if ( !v2 ) { v4 = 0; std::exception::exception((std::exception *)&v3, (const char *const *)&v4); v3 = &std::bad_alloc::`vftable'; _CxxThrowException(&v3, &_TI2_AVbad_alloc_std__); } v1[1] = v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)(v1[1] + 8) = v1[1]; *(_BYTE *)(v1[1] + 44) = 1; *(_BYTE *)(v1[1] + 45) = 1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004A0350) -------------------------------------------------------- void __thiscall sub_4A0350(int this) { int v1; // edi float *v2; // esi float *v3; // eax float v4; // ST08_4 float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST14_4 int v9; // eax v1 = this; if ( *(_BYTE *)(this + 504) != 1 && *(_DWORD *)(this + 496) ) { v2 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v3 = (float *)(*(int (**)(void))(**(_DWORD **)(v1 + 496) + 196))(); v4 = *v3 - *v2; v5 = v3[1] - v2[1]; v6 = v3[2] - v2[2]; v7 = v4 * v4 + v5 * v5 + v6 * v6; v8 = sqrt(v7); if ( v8 <= 200.0 ) { v9 = sub_58BFC0(*(const char **)(v1 + 492)); sub_58E080(*(_DWORD **)(v1 + 972), v1, v9); } } } //----- (004A04A0) -------------------------------------------------------- int __thiscall sub_4A04A0(_DWORD *this) { return this[129]; } //----- (004A04B0) -------------------------------------------------------- void __thiscall sub_4A04B0(_DWORD *this, char *a2) { char *v2; // edi _DWORD *v3; // esi char *v4; // eax int v5; // eax bool v6; // cl int v7; // eax int v8; // [esp-14h] [ebp-24h] int v9; // [esp-10h] [ebp-20h] int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] int v12; // [esp-4h] [ebp-14h] int *v13; // [esp+Ch] [ebp-4h] char *v14; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; if ( a2 ) { v4 = sub_6649B0(dword_AD8C90, a2); v3[124] = v4; v14 = v4; v13 = &v8; v12 = 0; v11 = 0; v10 = 0; v9 = 0; v8 = 0; strncpy((char *)&v8, v2, 0x14u); v5 = sub_6C11C0(&dword_B9DC70, v8, v9, v10, v11, v12); v3[125] = v5; v6 = v14 && dword_AD8EBC == v14; *((_BYTE *)v3 + 505) = v5 != 0; *((_BYTE *)v3 + 504) = v6; v12 = 0; v11 = 0; v10 = 0; v9 = 0; v8 = 0; strncpy((char *)&v8, v2, 0x14u); v7 = sub_718D10(&dword_B9E560, v8, v9, v10, v11, v12); v3[127] = v7; *((_BYTE *)v3 + 512) = v7 != 0; v3[123] = v2; } } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (004A0580) -------------------------------------------------------- char __usercall sub_4A0580@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl int v7; // eax int v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v9); v10 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v9; v6 = v4; v10 = -1; if ( v9 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v9; v5 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 && *(_BYTE *)(v2 + 504) != 1 && *(_DWORD *)(v2 + 496) ) { v7 = sub_58D110(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); } return v5; } //----- (004A0640) -------------------------------------------------------- char __usercall sub_4A0640@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl int v7; // eax int v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v9); v10 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v9; v6 = v4; v10 = -1; if ( v9 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v9; v5 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 && *(_BYTE *)(v2 + 504) != 1 ) { v5 = *(_DWORD *)(v2 + 496); if ( v5 ) { v7 = sub_58A800(*(_DWORD *)(v2 + 496)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); } } return v5; } //----- (004A0700) -------------------------------------------------------- char __usercall sub_4A0700@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl _DWORD *v7; // eax int v8; // eax int v10; // [esp+10h] [ebp-10h] int v11; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v10); v11 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v10; v6 = v4; v11 = -1; if ( v10 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v10; v5 = InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 && *(_BYTE *)(v2 + 504) != 1 ) { if ( *(_DWORD *)(v2 + 496) ) { v7 = (_DWORD *)sub_6D3800(); LOBYTE(v5) = sub_6D30E0(v7); if ( (_BYTE)v5 ) { v8 = sub_58AB30(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v8); } } } return v5; } //----- (004A07D0) -------------------------------------------------------- char __usercall sub_4A07D0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl int v7; // eax int v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v9); v10 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v9; v6 = v4; v10 = -1; if ( v9 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v9; v5 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 ) { LOBYTE(v5) = sub_718A50(&dword_B9E560); if ( (_BYTE)v5 != 1 && *(_BYTE *)(v2 + 505) != 1 && *(_BYTE *)(v2 + 504) != 1 ) { v7 = sub_58A940(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); } } return v5; } // B9E560: using guessed type int dword_B9E560; //----- (004A08A0) -------------------------------------------------------- char __usercall sub_4A08A0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax const char *v6; // ST04_4 int v7; // eax int v9; // [esp+10h] [ebp-2Ch] bool v10; // [esp+17h] [ebp-25h] char v11[4]; // [esp+18h] [ebp-24h] int v12; // [esp+1Ch] [ebp-20h] int v13; // [esp+20h] [ebp-1Ch] int v14; // [esp+24h] [ebp-18h] int v15; // [esp+28h] [ebp-14h] int v16; // [esp+38h] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v9); v16 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v9; v10 = v4; v16 = -1; if ( v9 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v9; v5 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v10 ) { LOBYTE(v5) = sub_718A50(&dword_B9E560); if ( (_BYTE)v5 != 1 && *(_BYTE *)(v2 + 504) != 1 ) { if ( *(_DWORD *)(v2 + 496) ) { v6 = *(const char **)(v2 + 492); v15 = 0; v14 = 0; v13 = 0; v12 = 0; *(_DWORD *)v11 = 0; strncpy(v11, v6, 0x14u); LOBYTE(v5) = sub_4E2170((_DWORD *)v2, v11); if ( (_BYTE)v5 != 1 ) { v7 = sub_58D1C0(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); } } } } return v5; } // B9E560: using guessed type int dword_B9E560; //----- (004A09B0) -------------------------------------------------------- char __usercall sub_4A09B0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v12; // [esp+10h] [ebp-10h] int v13; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v12); v13 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v12; v6 = v4; v13 = -1; if ( v12 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v12; v5 = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 ) { LOBYTE(v5) = sub_718A50(&dword_B9E560); if ( (_BYTE)v5 != 1 ) { LOBYTE(v5) = sub_6C1560(&dword_B9DC70); if ( (_BYTE)v5 == 1 && *(_BYTE *)(v2 + 505) == 1 && !*(_BYTE *)(v2 + 504) ) { v7 = sub_58AA80(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); if ( *(_BYTE *)(*(_DWORD *)(v2 + 500) + 20) == 1 ) { v8 = sub_58ABE0(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v8); } } if ( dword_B9DCC4 && !*(_BYTE *)(v2 + 512) && *(_BYTE *)(v2 + 504) == 1 ) { v9 = sub_58AC90(); sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v9); v10 = sub_58D080(); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v10); } } } return v5; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; //----- (004A0AF0) -------------------------------------------------------- char __usercall sub_4A0AF0@(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx bool v4; // zf LONG v5; // eax bool v6; // bl int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v13; // [esp+10h] [ebp-10h] int v14; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v13); v14 = 0; v4 = sub_6C4EE0(v3) == 1; LOBYTE(v5) = v13; v6 = v4; v14 = -1; if ( v13 ) { a2 = (int (__thiscall ***)(_DWORD, signed int))v13; v5 = InterlockedDecrement((volatile LONG *)(v13 + 4)); if ( !v5 ) { if ( a2 ) LOBYTE(v5) = (**a2)(a2, 1); } } if ( !v6 ) { LOBYTE(v5) = sub_718A50(&dword_B9E560); if ( (_BYTE)v5 ) { if ( *(_BYTE *)(v2 + 512) ) { if ( *(_BYTE *)(v2 + 504) == 1 ) v8 = sub_58CD10(*(_DWORD *)(v2 + 492)); else v8 = sub_58CB00(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v8); if ( byte_B9E5CC ) { LOBYTE(v5) = sub_719000( &dword_B9E560, **(_DWORD **)(v2 + 508), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 4), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 8), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 12), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 16)); if ( !(_BYTE)v5 && dword_B9E5C0 == 2 ) { v9 = sub_58CE70(*(_DWORD *)(v2 + 492)); LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v9); } if ( !*(_BYTE *)(v2 + 504) ) { v10 = sub_58CC60(*(_DWORD *)(v2 + 492)); sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v10); v11 = sub_58CDC0(*(_DWORD *)(v2 + 492)); sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v11); if ( sub_719040( &dword_B9E560, **(_DWORD **)(v2 + 508), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 4), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 8), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 12), *(_DWORD *)(*(_DWORD *)(v2 + 508) + 16)) ) { v7 = sub_58CFD0(*(_DWORD *)(v2 + 492)); } else { v7 = sub_58CF20(*(_DWORD *)(v2 + 492)); } goto LABEL_22; } } } else if ( byte_B9E5CC || byte_B9E5CD ) { v7 = sub_58CBB0(*(_DWORD *)(v2 + 492)); LABEL_22: LOBYTE(v5) = sub_58E080(*(_DWORD **)(v2 + 972), (int)a2, v7); return v5; } } } return v5; } // B9E560: using guessed type int dword_B9E560; // B9E5C0: using guessed type int dword_B9E5C0; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; //----- (004A0D00) -------------------------------------------------------- char __thiscall sub_4A0D00(void *this) { int v1; // edi _BYTE *v2; // ecx bool v3; // zf LONG v4; // eax bool v5; // bl int (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // eax int v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] v1 = (int)this; v2 = (_BYTE *)*sub_4A3B80(&v9); v10 = 0; v3 = sub_6C4EE0(v2) == 1; LOBYTE(v4) = v9; v5 = v3; v10 = -1; if ( v9 ) { v6 = (int (__thiscall ***)(_DWORD, signed int))v9; v4 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v4 ) { if ( v6 ) LOBYTE(v4) = (**v6)(v6, 1); } } if ( !v5 && *(_BYTE *)(v1 + 504) != 1 ) { v7 = sub_58C8B0(*(const char **)(v1 + 492)); LOBYTE(v4) = sub_58E080(*(_DWORD **)(v1 + 972), v1, v7); } return v4; } //----- (004A0DB0) -------------------------------------------------------- void __thiscall sub_4A0DB0(int this) { int v1; // edi float *v2; // esi float *v3; // eax float v4; // ST08_4 float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST14_4 _DWORD *v9; // ecx int v10; // eax v1 = this; if ( *(_BYTE *)(this + 504) != 1 && *(_DWORD *)(this + 496) && (*(_BYTE *)(this + 505) || *(_BYTE *)(this + 512)) ) { v2 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v3 = (float *)(*(int (**)(void))(**(_DWORD **)(v1 + 496) + 196))(); v4 = *v3 - *v2; v5 = v3[1] - v2[1]; v6 = v3[2] - v2[2]; v7 = v5 * v5 + v4 * v4 + v6 * v6; v8 = sqrt(v7); if ( v8 <= 300.0 ) { v9 = *(_DWORD **)(*(_DWORD *)(v1 + 496) + 2924); if ( v9 ) { if ( sub_744720(v9) && (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() != 1 && !*((_DWORD *)dword_AD8EBC + 731) ) { v10 = sub_58D270(*(_DWORD *)(v1 + 492)); sub_58E080(*(_DWORD **)(v1 + 972), v1, v10); } } } } } //----- (004A0EC0) -------------------------------------------------------- void __fastcall sub_4A0EC0(unsigned int a1) { unsigned int v1; // edi _DWORD **v2; // eax unsigned int v3; // ebx int v4; // eax unsigned int v5; // ecx int v6; // esi int *v7; // eax int v8; // ecx int v9; // eax int v10; // eax unsigned int v11; // esi _BYTE *v12; // eax signed int v13; // ecx unsigned int v14; // ebx unsigned int *v15; // eax unsigned int v16; // edx unsigned int v17; // eax int v18; // eax _BYTE *v19; // eax signed int v20; // ecx int v21; // eax unsigned int v22; // [esp+Ch] [ebp-14h] unsigned int v23; // [esp+10h] [ebp-10h] unsigned int v24; // [esp+14h] [ebp-Ch] unsigned int v25; // [esp+18h] [ebp-8h] unsigned int v26; // [esp+1Ch] [ebp-4h] v1 = a1; v26 = a1; sub_58DFD0(*(_DWORD **)(a1 + 972)); v2 = (_DWORD **)sub_921C10(); v3 = 0; dword_ACE8D8 = (int)v2; if ( v2[4] ) v4 = *v2[2]; else v4 = 0; v5 = *(_DWORD *)(v4 + 1116); dword_ACE8D4 = v4; v25 = v5; v23 = GetSystemMetrics(0); v22 = GetSystemMetrics(1); v6 = v1 + 160; if ( byte_AB66E7 ) { do { v1 = 0; if ( v25 ) { do { v7 = *(int **)(*(_DWORD *)(dword_ACE8D4 + 1108) + 4 * v1); if ( !*(_BYTE *)(v6 + 4) ) { v8 = *v7; if ( *v7 == *(_DWORD *)(v6 - 4) ) { v9 = v7[1]; if ( v9 == *(_DWORD *)v6 && (v8 != 800 || v9 != 600) ) { v10 = sub_58B5F0(v3); sub_58E080(*(_DWORD **)(v26 + 972), v1, v10); *(_BYTE *)(v6 + 4) = 1; } } } ++v1; } while ( v1 < v25 ); } ++v3; v6 += 16; } while ( v3 < 0x15 ); v11 = v26; v12 = (_BYTE *)(v26 + 164); v13 = 21; do { *v12 = 0; v12 += 16; --v13; } while ( v13 ); } else { v24 = 0; do { v14 = 0; if ( v25 ) { do { v15 = *(unsigned int **)(*(_DWORD *)(dword_ACE8D4 + 1108) + 4 * v14); if ( !*(_BYTE *)(v6 + 4) ) { v1 = *v15; v16 = *(_DWORD *)(v6 - 4); if ( *v15 == v16 ) { v17 = v15[1]; if ( v17 == *(_DWORD *)v6 && v23 >= v16 && v22 >= *(_DWORD *)v6 && (v1 != 800 || v17 != 600) ) { v18 = sub_58B5F0(v24); sub_58E080(*(_DWORD **)(v26 + 972), v1, v18); *(_BYTE *)(v6 + 4) = 1; } } } ++v14; } while ( v14 < v25 ); } v6 += 16; ++v24; } while ( v24 < 0x15 ); v19 = (_BYTE *)(v26 + 164); v20 = 21; do { *v19 = 0; v19 += 16; --v20; } while ( v20 ); v11 = v26; } v21 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v11 + 972), v1, v21); sub_58D930(*(_DWORD **)(v11 + 972), 0); (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v11 + 972) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v11 + 972)); } // AB66E7: using guessed type char byte_AB66E7; // ACE8D4: using guessed type int dword_ACE8D4; // ACE8D8: using guessed type int dword_ACE8D8; //----- (004A10B0) -------------------------------------------------------- bool sub_4A10B0() { return !*((_DWORD *)dword_AD8EBC + 6) && *((_DWORD *)dword_AD8EBC + 8) <= 0 && *((_DWORD *)dword_AD8EBC + 11) <= 0 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 320))(); } //----- (004A10E0) -------------------------------------------------------- char sub_4A10E0() { int v0; // eax DNameNode *v1; // eax v0 = dword_ACD1F8; if ( !dword_ACD1F8 ) { v1 = (DNameNode *)operator new(8u); if ( v1 ) v0 = DNameNode::DNameNode(v1); else v0 = 0; dword_ACD1F8 = v0; } if ( *(_DWORD *)(v0 + 4) != 1 ) return 0; sub_46E3D0(15); return 1; } // ACD1F8: using guessed type int dword_ACD1F8; //----- (004A1170) -------------------------------------------------------- int __cdecl sub_4A1170(int a1) { int v1; // esi float *v2; // edi int result; // eax double v4; // st7 double v5; // st6 signed int v6; // eax signed int v7; // ecx signed int v8; // edx double v9; // st7 int v10; // eax int v11; // ecx double v12; // st6 double v13; // st6 float v14; // ST08_4 double v15; // st6 float v16; // ST0C_4 double v17; // st7 float v18; // [esp+14h] [ebp-20h] float v19; // [esp+18h] [ebp-1Ch] float v20; // [esp+1Ch] [ebp-18h] float v21; // [esp+20h] [ebp-14h] float v22; // [esp+24h] [ebp-10h] float v23; // [esp+28h] [ebp-Ch] float v24; // [esp+2Ch] [ebp-8h] float v25; // [esp+30h] [ebp-4h] float v26; // [esp+3Ch] [ebp+8h] float v27; // [esp+3Ch] [ebp+8h] signed int v28; // [esp+3Ch] [ebp+8h] float v29; // [esp+3Ch] [ebp+8h] v1 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 8) + 172) + 60); v2 = *(float **)(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 172) + 48); result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 12))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 172) + 48)); if ( result == 1 ) { if ( ++*(_DWORD *)v1 > 1u ) return result; *(_DWORD *)(v1 + 4) = v2; v26 = fabs(v2[6]); v25 = v26; v27 = fabs(v2[9]); v24 = v27; *(float *)&v28 = fabs(v2[12]); v4 = v25; v5 = v24; if ( v24 >= (double)v25 ) { if ( *(float *)&v28 >= v5 ) { v28 = (signed int)(v2[12] / *(float *)&v28); v6 = 0; v7 = 1; v8 = 2; } else { v28 = (signed int)(v2[9] / v5); v6 = 2; v7 = 0; v8 = 1; } } else if ( *(float *)&v28 >= v4 ) { v6 = v28; v7 = v28; v8 = v28; } else { v28 = (signed int)(v2[6] / v4); v6 = 1; v7 = 2; v8 = 0; } *(_DWORD *)(v1 + 44) = v6; *(_DWORD *)(v1 + 52) = v8; *(_DWORD *)(v1 + 48) = v7; v29 = (double)v28; v9 = v2[3 * v6 + 4]; v10 = (int)&v2[3 * v6 + 4]; v11 = 3 * v7; v18 = v9 * v29; v19 = *(float *)(v10 + 4) * v29; v12 = *(float *)(v10 + 8); v21 = v18; v22 = v19; v20 = v12 * v29; v13 = v2[v11 + 4]; v23 = v20; v14 = v13 * v29; v15 = v2[v11 + 5]; v18 = v14; v16 = v15 * v29; v17 = v29 * v2[v11 + 6]; v19 = v16; v20 = 0.0; v23 = 0.0; sub_4430B0(&v21); sub_4430B0(&v18); *(float *)(v1 + 8) = v21; *(float *)(v1 + 12) = v22; *(float *)(v1 + 16) = v23; *(float *)(v1 + 20) = v18; *(float *)(v1 + 24) = v19; *(float *)(v1 + 28) = v20; *(float *)(v1 + 32) = 0.0; *(float *)(v1 + 36) = 0.0; *(float *)(v1 + 40) = 1.0; } return 0; } //----- (004A1330) -------------------------------------------------------- void __thiscall sub_4A1330(_DWORD *this, int a2, char a3) { _DWORD *v3; // ebx int v4; // edi const CHAR *v5; // eax int v6; // esi float **v7; // esi float *v8; // eax int v9; // ST04_4 int v10; // ST08_4 int v11; // ST0C_4 int v12; // ST10_4 const CHAR *v13; // eax const CHAR *v14; // eax int v15; // [esp+14h] [ebp-10h] v3 = this; if ( BYTE2(dword_AD0354) ) { BYTE2(dword_AD0354) = 0; return; } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() ) { if ( *((_DWORD *)dword_AD8EBC + 731) ) { if ( *((_DWORD *)dword_AD8EBC + 730) ) { sub_4A3A00(v3 + 1210, (_DWORD *)a2, a3); sub_4BFB30(v3); return; } if ( !sub_65BA20(dword_AD8EBC) ) return; } v4 = a2; if ( sub_699590(byte_ADB468, *(float *)a2, *(float *)(a2 + 4)) == 1 ) { v5 = sub_40C190(760315809); sub_492060(v3, (int)v5); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 36))() ) { if ( *((_DWORD *)dword_AD8EBC + 6) || sub_64F900(dword_AD8EBC, 350) ) { v14 = sub_40A910(643403153); sub_492060(v3, (int)v14); } else { v6 = *sub_49F490(&a2); sub_410C00(&a2); if ( v6 ) { if ( *(_BYTE *)(v6 + 52) ) { *(_BYTE *)(v6 + 52) = 0; v7 = (float **)v3[305]; if ( v7 ) { sub_5E9180((float **)v3[305]); v8 = sub_419EE0((float *)&v15, 0xFFu, 0x90u, 0, 0xFFu); v9 = *(_DWORD *)v8; v10 = *((_DWORD *)v8 + 1); v11 = *((_DWORD *)v8 + 2); v12 = *((_DWORD *)v8 + 3); v13 = sub_40A910(1011971465); sub_5E9030(v7, (int)v13, v9, v10, v11, v12, 0, 3.0); } } } if ( a3 ) sub_4A3C10((int)byte_ADB468, *(_DWORD *)v4, *(float *)(v4 + 4), *(_DWORD *)(v4 + 8)); else *(_WORD *)(dword_B67118 + 28) |= 1u; *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, (_DWORD *)v4); sub_67D830((int)dword_AD8EBC); } } } } // AD0354: using guessed type int dword_AD0354; // B67118: using guessed type int dword_B67118; //----- (004A1540) -------------------------------------------------------- char __thiscall sub_4A1540(_DWORD *this, _BYTE *a2) { int v2; // edi char v4; // al int v5; // ST04_4 int v6; // eax int v7; // eax v2 = (int)this; if ( !a2 ) { sub_4A7730(); return 0; } if ( !sub_4A7770(this, (int)a2) ) return 0; v4 = dword_AD8EBC[1924]; if ( v4 == 4 || v4 == 5 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)a2 + 32))(a2) && sub_651680((int)a2) ) { if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); sub_67B660(dword_AD8EBC, 2); } if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)a2 + 48))(a2) ) sub_67B660(dword_AD8EBC, 2); if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)a2 + 32))(a2) ) { if ( sub_651680((int)a2) ) { v5 = sub_6516C0(a2) != 0 ? 120 : 3; sub_4A8140(v2, v5); } else if ( sub_650B20(a2) ) { sub_4A8140(v2, 174); } } v6 = sub_650CF0(a2); if ( v6 ) { v7 = sub_4A3CB0(1, (const char *)(v6 + 2)); if ( v7 ) sub_4A8140(v2, v7); } return 1; } //----- (004A1650) -------------------------------------------------------- void __thiscall sub_4A1650(float *this, _BYTE *a2) { float *v2; // edi int v3; // esi char *v4; // ecx int v5; // eax char *v6; // ecx int v7; // esi float **v8; // esi float *v9; // eax int v10; // ST04_4 int v11; // ST08_4 int v12; // ST0C_4 int v13; // ST10_4 const CHAR *v14; // eax int v15; // [esp+10h] [ebp-10h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { sub_4A1540(v2, a2); } else if ( dword_AD8EBC[1924] != 4 ) { v3 = (int)a2; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() && sub_65BA20(dword_AD8EBC) && !(*(unsigned __int8 (**)(void))(**((_DWORD **)v2 + 185) + 260))() ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 48))(v3) && *(_BYTE *)(v3 + 1924) == 5 ) { v4 = dword_AD8EBC; if ( dword_AD8EBC[1924] == 2 ) { sub_443390(dword_AD8EBC, 1); sub_4B7550(v2, 1); v4 = dword_AD8EBC; } sub_67B660(v4, 2); dword_AD8EBC[4116] = 0; } else if ( sub_65C360(dword_AD8EBC) && sub_650B20((_DWORD *)v3) ) { OutputDebugStringA(aAi); } else { v5 = sub_67DA80(dword_AD8EBC, v3); v6 = dword_AD8EBC; if ( v5 == 3 || *((_DWORD *)dword_AD8EBC + 11) <= 0 && *(_DWORD *)(v3 + 44) > 0 ) { if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550(v2, 2); v6 = dword_AD8EBC; } sub_67B660(v6, 2); dword_AD8EBC[4116] = 0; } else if ( sub_651680(v3) == 1 ) { sub_67B660(dword_AD8EBC, 2); dword_AD8EBC[4116] = 0; } if ( *((_DWORD *)v2 + 28) ) sub_4DE8F0(v2, 0, 0.0); v7 = *sub_49F490(&a2); sub_410C00(&a2); if ( v7 ) { if ( *(_BYTE *)(v7 + 52) ) { *(_BYTE *)(v7 + 52) = 0; v8 = (float **)*((_DWORD *)v2 + 305); if ( v8 ) { sub_5E9180(*((float ***)v2 + 305)); v9 = sub_419EE0((float *)&v15, 0xFFu, 0x90u, 0, 0xFFu); v10 = *(_DWORD *)v9; v11 = *((_DWORD *)v9 + 1); v12 = *((_DWORD *)v9 + 2); v13 = *((_DWORD *)v9 + 3); v14 = sub_40A910(1011971465); sub_5E9030(v8, (int)v14, v10, v11, v12, v13, 0, 3.0); } } } } } } } } //----- (004A1880) -------------------------------------------------------- void __thiscall sub_4A1880(_DWORD *this, int a2) { _DWORD *v2; // ebx const CHAR *v3; // eax int v4; // eax int v5; // eax const CHAR *v6; // eax int v7; // eax int v8; // edi v2 = this; if ( sub_672F50(dword_AD8EBC + 776) ) { v3 = sub_40A910(1924458949); sub_492060(v2, (int)v3); return; } if ( byte_AB017F && a2 ) { v4 = *(unsigned __int16 *)(a2 + 4); if ( (_WORD)v4 == 1302 ) goto LABEL_20; v5 = sub_49F760(v4); if ( !v5 ) return; if ( (*(_DWORD *)(v5 + 106) != 1 || sub_684CE0(&byte_ADA230) < 192) && sub_685060(&byte_ADA230, *(_WORD *)(a2 + 4)) ) { LABEL_20: v7 = sub_49F760(*(unsigned __int16 *)(a2 + 4)); v8 = v7; if ( v7 && sub_74DFD0(&dword_AD9E70, *(_DWORD *)(v7 + 274)) && !sub_74DF70(&dword_AD9E70, *(_DWORD *)(v8 + 274)) && *(_DWORD *)(v8 + 98) != 3 && (sub_59C810(v2[319], v8, *(unsigned __int16 *)(a2 + 4), *(_WORD *)(a2 + 6)), v2[319]) ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[319]); } else { sub_4B7C70(v2, *(_WORD *)(a2 + 6)); } } else { v6 = sub_40C190(-184949776); sub_492060(v2, (int)v6); } } } // AB017F: using guessed type char byte_AB017F; // AD9E70: using guessed type int dword_AD9E70; // ADA230: using guessed type char byte_ADA230; //----- (004A19C0) -------------------------------------------------------- void __userpurge sub_4A19C0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3) { int v3; // esi int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax int v9; // eax _DWORD *v10; // ecx int v11; // eax v3 = a1; sub_58DFD0(*(_DWORD **)(a1 + 972)); sub_4A04B0((_DWORD *)v3, a3); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { v4 = sub_58A8B0(); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v4); } if ( *(_BYTE *)(v3 + 504) != 1 && *(_DWORD *)(v3 + 496) ) { v5 = sub_58C980(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v5); } sub_4A0580(v3, a2); sub_4A0640(v3, a2); sub_4A0700(v3, a2); sub_4A07D0(v3, a2); sub_4A09B0(v3, a2); sub_4A0AF0(v3, a2); if ( *(_BYTE *)(v3 + 504) != 1 ) { v6 = sub_58C0A0(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v6); } if ( *(_BYTE *)(v3 + 505) || *(_BYTE *)(v3 + 512) && *(_BYTE *)(v3 + 504) != 1 ) { v7 = sub_58CA30(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v7); } sub_4A0350(v3); sub_4A0D00((void *)v3); sub_4A0DB0(v3); if ( *(_BYTE *)(v3 + 504) != 1 && *(_DWORD *)(v3 + 5080) == 1 ) { v8 = sub_60CDD0(*(_DWORD **)(v3 + 768)); if ( sub_4E3810((_DWORD **)v3, v8) ) { v9 = sub_58D320(*(_DWORD *)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v9); } } sub_4A08A0(v3, a2); v10 = *(_DWORD **)(v3 + 972); if ( v10[104] ) { v11 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v11); sub_58D930(*(_DWORD **)(v3 + 972), 0); (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v3 + 972) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 972)); } else { sub_58DFD0(v10); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 972)); } } //----- (004A1BA0) -------------------------------------------------------- void __userpurge sub_4A1BA0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3) { int v3; // esi int v4; // eax int v5; // eax _DWORD *v6; // ecx int v7; // eax v3 = a1; sub_58DFD0(*(_DWORD **)(a1 + 972)); sub_4A04B0((_DWORD *)v3, a3); sub_4A0AF0(v3, a2); if ( *(_BYTE *)(v3 + 504) != 1 ) { v4 = sub_58C0A0(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v4); } if ( *(_BYTE *)(v3 + 505) || *(_BYTE *)(v3 + 512) && *(_BYTE *)(v3 + 504) != 1 ) { v5 = sub_58CA30(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v5); } v6 = *(_DWORD **)(v3 + 972); if ( v6[104] ) { v7 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v7); sub_58D930(*(_DWORD **)(v3 + 972), 0); (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v3 + 972) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 972)); } else { sub_58DFD0(v6); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 972)); } } //----- (004A1CA0) -------------------------------------------------------- void __userpurge sub_4A1CA0(int a1@, int (__thiscall ***a2)(_DWORD, signed int)@, char *a3) { int v3; // esi int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax _DWORD *v9; // ecx int v10; // eax v3 = a1; sub_58DFD0(*(_DWORD **)(a1 + 972)); sub_4A04B0((_DWORD *)v3, a3); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { v4 = sub_58A8B0(); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v4); } if ( *(_BYTE *)(v3 + 504) != 1 && *(_DWORD *)(v3 + 496) ) { v5 = sub_58C980(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v5); } sub_4A0580(v3, a2); sub_4A0640(v3, a2); sub_4A0700(v3, a2); if ( *(_BYTE *)(v3 + 504) != 1 ) { v6 = sub_58C0A0(*(const char **)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v6); } sub_4A0350(v3); sub_4A0D00((void *)v3); sub_4A0DB0(v3); if ( *(_BYTE *)(v3 + 504) != 1 && *(_DWORD *)(v3 + 5080) == 1 ) { v7 = sub_60CDD0(*(_DWORD **)(v3 + 768)); if ( sub_4E3810((_DWORD **)v3, v7) ) { v8 = sub_58D320(*(_DWORD *)(v3 + 492)); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v8); } } sub_4A08A0(v3, a2); v9 = *(_DWORD **)(v3 + 972); if ( v9[104] ) { v10 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v3 + 972), (int)a2, v10); sub_58D930(*(_DWORD **)(v3 + 972), 0); (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v3 + 972) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 972)); } else { sub_58DFD0(v9); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 972)); } } //----- (004A1E30) -------------------------------------------------------- char __stdcall sub_4A1E30(float *a1) { float *v1; // esi signed int v2; // eax int v4; // edi const unsigned __int8 *v5; // ecx const unsigned __int8 *v6; // eax bool v7; // zf const unsigned __int8 *v8; // ecx const unsigned __int8 *v9; // eax const unsigned __int8 *v10; // ecx const unsigned __int8 *v11; // eax __int16 v12; // ax const unsigned __int8 *v13; // ecx const unsigned __int8 *v14; // eax int v15; // ecx int v16; // edx int v17; // eax int v18; // esi char v19; // [esp+1Eh] [ebp+Ah] char v20; // [esp+1Eh] [ebp+Ah] v1 = a1; if ( *a1 == *(float *)(dword_ADB50C + 88) && a1[1] == *(float *)(dword_ADB50C + 92) && a1[2] == *(float *)(dword_ADB50C + 96) ) { return 1; } if ( dword_ADB4F8 != 3 ) { if ( dword_ADB4F8 != 5 || (unsigned int)dword_ADB4EC <= 5 ) return 1; v13 = dword_AAE850; if ( (unsigned int)dword_AAE864 < 0x10 ) v13 = (const unsigned __int8 *)&dword_AAE850; v14 = dword_ADB4DC; if ( (unsigned int)dword_ADB4F0 < 0x10 ) v14 = (const unsigned __int8 *)&dword_ADB4DC; v7 = _mbsnbcmp(v14, v13, dword_AAE860) == 0; goto LABEL_34; } if ( (unsigned int)dword_ADB4EC > 5 ) { v2 = sub_6DB510(byte_ADB468); if ( v2 == -1 ) return 0; v4 = sub_6E2400(&unk_ADB488, v2); if ( !v4 ) return 0; v5 = dword_AAE850; if ( (unsigned int)dword_AAE864 < 0x10 ) v5 = (const unsigned __int8 *)&dword_AAE850; v6 = dword_ADB4DC; if ( (unsigned int)dword_ADB4F0 < 0x10 ) v6 = (const unsigned __int8 *)&dword_ADB4DC; if ( _mbsnbcmp(v6, v5, dword_AAE860) ) { v8 = dword_AAE834; if ( (unsigned int)dword_AAE848 < 0x10 ) v8 = (const unsigned __int8 *)&dword_AAE834; v9 = dword_ADB4DC; if ( (unsigned int)dword_ADB4F0 < 0x10 ) v9 = (const unsigned __int8 *)&dword_ADB4DC; if ( _mbsnbcmp(v9, v8, dword_AAE844) ) { v10 = dword_AAE86C; if ( (unsigned int)dword_AAE880 < 0x10 ) v10 = (const unsigned __int8 *)&dword_AAE86C; v11 = dword_ADB4DC; if ( (unsigned int)dword_ADB4F0 < 0x10 ) v11 = (const unsigned __int8 *)&dword_ADB4DC; if ( _mbsnbcmp(v11, v10, dword_AAE87C) ) return 1; v12 = *(_WORD *)(v4 + 68); v7 = *(_BYTE *)(v4 + 70) == 1; } else { v20 = *(_BYTE *)(v4 + 70); v7 = (unsigned __int8)*(_WORD *)(v4 + 68) == 1; } } else { v7 = *(_WORD *)(v4 + 68) >> 8 == 1; v19 = *(_BYTE *)(v4 + 70); } LABEL_34: if ( v7 ) { v15 = *(_DWORD *)v1; v16 = *((_DWORD *)v1 + 1); v17 = dword_ADB50C; v18 = *((_DWORD *)v1 + 2); *(_DWORD *)(dword_ADB50C + 88) = v15; *(_DWORD *)(v17 + 92) = v16; *(_DWORD *)(v17 + 96) = v18; } } return 1; } // AAE848: using guessed type int dword_AAE848; // AAE864: using guessed type int dword_AAE864; // AAE880: using guessed type int dword_AAE880; // ADB4EC: using guessed type int dword_ADB4EC; // ADB4F0: using guessed type int dword_ADB4F0; // ADB4F8: using guessed type int dword_ADB4F8; // ADB50C: using guessed type int dword_ADB50C; //----- (004A2030) -------------------------------------------------------- void __thiscall sub_4A2030(float *this, char *a2) { int v2; // esi float *v3; // ebx _DWORD *v4; // eax int v5; // edi char v6; // cl int v7; // esi float v8[3]; // [esp+8h] [ebp-Ch] v2 = (int)a2; v3 = this; if ( a2 && a2 != dword_AD8EBC && !byte_ACF576 && !sub_64FF40(dword_AD8EBC, 61) ) { sub_67B690(dword_AD8EBC, 0); if ( *((_DWORD *)dword_AD8EBC + 1026) == v2 ) sub_4A1650(v3, (_BYTE *)v2); else sub_4A1540(v3, (_BYTE *)v2); v4 = sub_439D70(byte_ADB468, v8); if ( sub_4316B0(v4) ) { v5 = sub_49F370(*(unsigned __int16 *)(v2 + 942)); if ( v5 ) { if ( sub_651680(v2) && *(_DWORD *)(v5 + 99) == 15 ) { LOWORD(a2) = *(_WORD *)(v2 + 548); sub_6F3D10(&off_AB7F2C, 29, 202, &a2, 2u); } } } v6 = dword_AD8EBC[1924]; if ( v6 != 4 && v6 != 5 ) { v7 = *((_DWORD *)dword_AD8EBC + 1026); if ( v7 ) { sub_4A3910((void *)v7, v8, (int)dword_AD8EBC); if ( *(_BYTE *)(v7 + 1924) == 5 && sub_443070(v8) < 150.0 ) sub_4B89E0((_DWORD **)v3, *(_WORD *)(v7 + 548)); } } } } // AB7F2C: using guessed type void **off_AB7F2C; // ACF576: using guessed type char byte_ACF576; //----- (004A2160) -------------------------------------------------------- void __thiscall sub_4A2160(_DWORD *this, char *a2) { int (__thiscall ***v2)(_DWORD, signed int); // edi char v3; // al char *v4; // eax v2 = (int (__thiscall ***)(_DWORD, signed int))this; if ( a2 && a2 != dword_AD8EBC ) { if ( *((char **)dword_AD8EBC + 1026) != a2 ) { if ( !sub_4A7770(this, (int)a2) ) return; v3 = dword_AD8EBC[1924]; if ( v3 == 4 || v3 == 5 ) return; if ( sub_651680((int)a2) ) sub_67B660(dword_AD8EBC, 2); } if ( a2[2680] ) { if ( dword_ADB4FC <= 1 ) { v4 = (char *)(*(int (__thiscall **)(char *))(*(_DWORD *)a2 + 84))(a2); sub_4A19C0((int)v2, v2, v4); } } } } // ADB4FC: using guessed type int dword_ADB4FC; //----- (004A21E0) -------------------------------------------------------- char __thiscall sub_4A21E0(void *this, signed int a2, _DWORD *a3, LONG a4, _DWORD *a5, int *a6, int a7) { int v7; // esi _DWORD *v8; // ecx unsigned int v9; // eax int *v10; // ecx unsigned int v11; // eax signed int v12; // eax signed int v13; // ebx char *v14; // eax volatile LONG *v15; // eax char v17; // al struct tagPOINT Point; // [esp+Ch] [ebp-30h] _DWORD *v19; // [esp+14h] [ebp-28h] int v20; // [esp+18h] [ebp-24h] struct tagPOINT v21; // [esp+1Ch] [ebp-20h] char v22; // [esp+24h] [ebp-18h] int v23; // [esp+2Ch] [ebp-10h] int v24; // [esp+34h] [ebp-8h] v19 = a5; v7 = (int)this; v21.y = a4; if ( dword_ADB4F8 >= 1 ) { GetCursorPos(&Point); v8 = *(_DWORD **)(v7 + 1108); v20 = **(_DWORD **)(v7 + 1108); v9 = sub_6EDFE0(v8); (*(void (__thiscall **)(_DWORD, unsigned int))(v20 + 172))(*(_DWORD *)(v7 + 1108), Point.x - v9); v10 = *(int **)(v7 + 1108); v20 = *v10; v11 = sub_6EE040(v10); (*(void (__thiscall **)(_DWORD, unsigned int))(v20 + 176))(*(_DWORD *)(v7 + 1108), Point.y - v11); if ( dword_BA6AA8 < 1 ) { v13 = a2; goto LABEL_12; } v12 = sub_69C6B0((float *)byte_ADB468, a3, (_DWORD *)v21.y, v19, (int)a6); v13 = v12; if ( v12 >= 6 ) { if ( v12 <= 7 ) { sub_4A3A60(*(_BYTE **)(v7 + 1108), 0); } else if ( v12 == 9 ) { if ( !dword_BA6B64 ) { v14 = (char *)sub_40A910(1044334994); v15 = sub_462C30(2, v14); v23 = 227; v24 = 0; sub_461760(v15, v7, &v22, 0); } goto LABEL_12; } } if ( v13 == 7 ) return 1; LABEL_12: if ( !dword_ADB50C || v13 == 5 ) return 0; v17 = (*(_BYTE *)(dword_ACDC84 + 36) >> 5) & 1; if ( v17 && !(*(_BYTE *)(dword_ACDC84 + 68) & 0x20) && !(*(_BYTE *)(dword_ACDC84 + 40) & 1) ) { GetCursorPos(&v21); sub_6DC2B0(byte_ADB468, v21.x, v21.y, *a6, a6[1], a6[2], 0); sub_4A3A60(*(_BYTE **)(v7 + 1108), 1); return 0; } if ( !v17 ) goto LABEL_32; if ( !(*(_BYTE *)(dword_ACDC84 + 40) & 1) ) { GetCursorPos(&v21); sub_6DBBC0(byte_ADB468, v21.x, v21.y, 0); return 0; } if ( !v17 ) { LABEL_32: if ( *(_BYTE *)(dword_ACDC84 + 68) & 0x20 ) { SetCursorPos(X, Y); sub_4A3A60(*(_BYTE **)(v7 + 1108), 0); return 0; } } sub_4A1E30((float *)a6); return 0; } if ( !dword_ADB4F8 || dword_BA6AA8 < 1 || sub_69C170((float *)byte_ADB468, dword_ADB4F8, (int)a3, a4, (int)a6, 0) != 8 ) return 0; return 1; } // ACDC84: using guessed type int dword_ACDC84; // ADB4F8: using guessed type int dword_ADB4F8; // ADB50C: using guessed type int dword_ADB50C; // BA6AA8: using guessed type int dword_BA6AA8; // BA6B64: using guessed type int dword_BA6B64; //----- (004A2420) -------------------------------------------------------- void __thiscall sub_4A2420(void *this, int a2) { int v2; // ebx int v3; // esi int v4; // edi int v5; // edi _DWORD *v6; // eax int v7; // eax int v8; // eax unsigned __int16 *v9; // esi int v10; // eax __int16 v11; // cx int v12; // [esp+0h] [ebp-4h] int v13; // [esp+Ch] [ebp+8h] v12 = (int)this; if ( dword_ADB4F8 <= 1 ) { v2 = a2; if ( a2 ) { v3 = *(_DWORD *)(a2 + 8); v4 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(a2 + 8)) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v6 = (_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)v3); v5 = *v6 ? *v6 : 0; } else { v5 = 0; } } else { v5 = 0; } v7 = sub_4A3DB0((unsigned __int8 *)(v5 + 2)); v13 = v7; if ( v5 ) { if ( (unsigned __int16)dword_ADB5F2 == *(_DWORD *)(v2 + 4) ) { v8 = sub_4A3D40(*(_DWORD *)(v2 + 8), 30000, 0); v9 = (unsigned __int16 *)v8; if ( !v8 ) goto LABEL_22; if ( *(_BYTE *)(v8 + 4) > 1u ) { v10 = rand(); v9 = (unsigned __int16 *)sub_4A3C90(v10 % *((unsigned __int8 *)v9 + 4) + *v9); } if ( v9 ) { v11 = *(_WORD *)(v2 + 4); HIWORD(dword_ADB5F2) = *v9; LOWORD(dword_ADB5F2) = v11; if ( v13 ) sub_4A7A40(v12, v2, v5 + 34, v5 + 34, v2, *(_BYTE *)(v13 + 145) != 0, 1); } else { LABEL_22: sub_4A7A40(v12, v2, v5 + 34, v5 + 34, v2, *(_BYTE *)(v13 + 145) != 0, 0); } } else { sub_4A7A40(v12, v2, v5 + 34, v5 + 34, v2, *(_BYTE *)(v7 + 145) != 0, 0); } } } } } // ACB230: using guessed type int dword_ACB230; // ADB4F8: using guessed type int dword_ADB4F8; // ADB5F2: using guessed type int dword_ADB5F2; //----- (004A2550) -------------------------------------------------------- void __thiscall sub_4A2550(void *this, unsigned __int16 a2) { int v2; // edi int v3; // eax int v4; // edx int v5; // edx int v6; // eax char *v7; // eax volatile LONG *v8; // eax _DWORD *v9; // [esp+8h] [ebp-4Ch] int v10; // [esp+Ch] [ebp-48h] char v11; // [esp+10h] [ebp-44h] int v12; // [esp+18h] [ebp-3Ch] char v13; // [esp+24h] [ebp-30h] int v14; // [esp+2Ch] [ebp-28h] int v15; // [esp+30h] [ebp-24h] char v16[4]; // [esp+38h] [ebp-1Ch] int v17; // [esp+3Ch] [ebp-18h] int v18; // [esp+40h] [ebp-14h] int v19; // [esp+44h] [ebp-10h] int v20; // [esp+48h] [ebp-Ch] char v21; // [esp+4Ch] [ebp-8h] v2 = (int)this; if ( !dword_BA6B64 ) { v10 = a2; sub_4A3E20(&unk_B9E1CC, &v9, &v10); if ( v9 != dword_B9E1D0 ) { v3 = v9[4]; if ( v3 ) { v4 = *(_DWORD *)(v3 + 18); *(_DWORD *)v16 = *(_DWORD *)(v3 + 14); v18 = *(_DWORD *)(v3 + 22); v17 = v4; v5 = *(_DWORD *)(v3 + 26); v6 = *(_DWORD *)(v3 + 30); v19 = v5; v20 = v6; v21 = 0; v7 = (char *)sub_40A910(2123883487); v8 = sub_462C30(2, v7, v16); if ( v8 ) { v15 = a2; v14 = 242; v12 = 243; sub_461760(v8, v2, &v13, &v11); } } } } } // BA6B64: using guessed type int dword_BA6B64; //----- (004A2620) -------------------------------------------------------- void __thiscall sub_4A2620(int *this) { int v1; // esi _DWORD *v2; // esi _DWORD *v3; // edi int v4; // ecx char v5; // bl char v6; // al signed int v7; // eax char *v8; // eax char *v9; // edi unsigned __int16 *v10; // eax int v11; // ecx _DWORD *v12; // eax LONG v13; // edx double v14; // st7 LONG v15; // eax int v16; // ecx int v17; // edi float **v18; // edi float *v19; // eax int v20; // ST08_4 int v21; // ST0C_4 int v22; // ST10_4 int v23; // ST14_4 const CHAR *v24; // eax char v25; // cl int v26; // ecx _DWORD *v27; // eax int v28; // ecx _DWORD *v29; // eax int v30; // eax int v31; // eax int v32; // eax int v33; // ebx int v34; // eax unsigned __int16 *v35; // edi int v36; // eax __int16 v37; // ax signed __int16 v38; // cx int v39; // eax int v40; // eax int v41; // eax signed int v42; // ebx int v43; // eax _DWORD **v44; // eax int v45; // eax int v46; // eax int v47; // ecx int v48; // eax unsigned __int8 *v49; // edi float *v50; // eax int v51; // ecx char v52; // bl int v53; // eax int v54; // ecx int v55; // eax int v56; // ecx int v57; // eax int v58; // ecx int v59; // eax int v60; // ecx int v61; // ecx int v62; // eax int v63; // edi int v64; // ecx int v65; // edi int v66; // edi int v67; // eax int v68; // [esp+2Ch] [ebp-34h] float v69[3]; // [esp+30h] [ebp-30h] char v70; // [esp+3Ch] [ebp-24h] float v71; // [esp+48h] [ebp-18h] struct tagPOINT Point; // [esp+4Ch] [ebp-14h] int v73; // [esp+54h] [ebp-Ch] char *v74; // [esp+58h] [ebp-8h] unsigned __int16 *v75; // [esp+5Ch] [ebp-4h] v1 = (int)this; if ( dword_B67404 == 1 ) { sub_46E3D0(12); if ( !(*(_BYTE *)(dword_ACDC84 + 33) & 2) || (unsigned __int8)sub_604E00(*(_DWORD ***)(v1 + 704)) ) { if ( dword_BA6AA8 >= 1 && sub_69C6A0((float *)byte_ADB468, v1 + 520, v1 + 532, &v74, (int)v69, &Point.y, (signed __int16 *)&v75) == 2 ) { sub_68BFA0(*(int **)(v1 + 1216)); } } else { dword_B67404 = 2; } return; } if ( dword_B67408 == 1 ) { sub_46E3D0(13); if ( dword_ACEC24 != 7 ) sub_537BA0(*(_DWORD **)(v1 + 716), 0); if ( !(*(_BYTE *)(dword_ACDC84 + 33) & 2) || (unsigned __int8)sub_604E00(*(_DWORD ***)(v1 + 704)) ) { if ( dword_BA6AA8 >= 1 && sub_69C6A0((float *)byte_ADB468, v1 + 520, v1 + 532, &v74, (int)v69, &Point.y, (signed __int16 *)&v75) == 2 ) { v2 = *(_DWORD **)(v1 + 716); if ( v2 ) sub_537BA0(v2, 0); } } else { dword_B67408 = 2; } return; } if ( dword_B6740C == 1 ) { sub_46E3D0(14); v3 = *(_DWORD **)(v1 + 716); if ( dword_ACEC24 != 9 ) sub_534620(*(_DWORD **)(v1 + 716)); if ( !(*(_BYTE *)(dword_ACDC84 + 33) & 2) || (unsigned __int8)sub_604E00(*(_DWORD ***)(v1 + 704)) ) { v4 = v3[370]; v5 = 1; if ( v4 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v4 + 260))() == 1 ) v5 = 0; if ( dword_BA6AA8 >= 1 && v5 && sub_69C6A0((float *)byte_ADB468, v1 + 520, v1 + 532, &v74, (int)v69, &Point.y, (signed __int16 *)&v75) == 2 ) { sub_534620(v3); } } else { dword_B6740C = 2; } return; } sub_435250(this[129]); sub_4A3820(); if ( sub_4A10E0() != 1 ) { v6 = *(_BYTE *)(dword_ACDC84 + 48); if ( v6 >= 0 ) { if ( v6 & 4 ) sub_693050(byte_ADB468, 70); } else { sub_693050(byte_ADB468, -70); } sub_493240((_DWORD *)v1); sub_493720((_DWORD ***)v1); sub_493670((_DWORD ***)v1); sub_862960((float *)dword_B66FB0, *(float *)&pt.x, *(float *)&pt.y, v1 + 520, COERCE_FLOAT(v1 + 532)); v73 = 0xFFFF; if ( !dword_ADB4F8 || !dword_ADB4C8 || (v7 = sub_69C6A0( (float *)byte_ADB468, v1 + 520, v1 + 532, (char **)&v75, (int)&v70, (int *)&v74, (signed __int16 *)&v73), sub_4A21E0((void *)v1, v7, (_DWORD *)(v1 + 520), v1 + 532, &v75, (int *)&v70, (int)&v74) != 1) ) { if ( dword_BA6AA8 >= 1 ) { if ( dword_AD89FC ) { v8 = sub_664AB0(dword_AD8C90, *(_WORD *)(dword_AD89FC + 12)); v9 = v8; if ( v8 && v8[1924] == 5 ) { (*(void (__thiscall **)(char *))(*(_DWORD *)v8 + 84))(v8); sub_4A2030((float *)v1, v9); goto LABEL_44; } } else if ( dword_AD89E8 ) { v10 = (unsigned __int16 *)sub_4A3ED0(&unk_B9E1CC, *(_WORD *)(dword_AD89E8 + 8)); if ( v10 ) { sub_4A2550((void *)v1, *v10); LABEL_44: if ( dword_BA6AA8 ) --dword_BA6AA8; return; } } if ( dword_BA6AA8 >= 1 ) { v11 = *(_DWORD *)(v1 + 1240); if ( v11 ) { if ( dword_BA6B9C != v11 && *(_BYTE *)(v11 + 440) ) sub_71B810(v11); } } } v12 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); *(_DWORD *)(v1 + 60) = *v12; *(_DWORD *)(v1 + 64) = v12[1]; *(_DWORD *)(v1 + 68) = v12[2]; v71 = *(float *)(dword_B66FB0 + 104); Point.x = *(LONG *)(dword_B66FB0 + 116); v13 = Point.x; v14 = *(float *)(dword_B66FB0 + 128); *(float *)(v1 + 72) = v71; *(float *)&Point.y = v14; v15 = Point.y; *(_DWORD *)(v1 + 76) = v13; *(_DWORD *)(v1 + 80) = v15; if ( dword_BA6AC0 >= 1 && dword_BA6A9C >= 1 && sub_4A10B0() == 1 ) { v16 = v1 + 36; *(_BYTE *)(v16 + 5) = 1; *(_BYTE *)v16 = 1; if ( *(_BYTE *)(v1 + 42) ) sub_4E3330((_DWORD *)v16, 0); v17 = *sub_49F490(&v74); sub_410C00(&v74); if ( v17 ) { if ( *(_BYTE *)(v17 + 52) ) { *(_BYTE *)(v17 + 52) = 0; v18 = *(float ***)(v1 + 1220); if ( v18 ) { sub_5E9180(*(float ***)(v1 + 1220)); v19 = sub_419EE0((float *)&v68, 0xFFu, 0x90u, 0, 0xFFu); v20 = *(_DWORD *)v19; v21 = *((_DWORD *)v19 + 1); v22 = *((_DWORD *)v19 + 2); v23 = *((_DWORD *)v19 + 3); v24 = sub_40A910(1011971465); sub_5E9030(v18, (int)v24, v20, v21, v22, v23, 0, 3.0); } } } } if ( (unsigned __int8)sub_604E00(*(_DWORD ***)(v1 + 704)) && !*(_DWORD *)(v1 + 2560) ) { v25 = *(_BYTE *)(dword_ACDC84 + 48); if ( v25 & 2 || !(*(_BYTE *)(dword_ACDC84 + 80) & 2) ) { if ( v25 & 0x40 || !(*(_BYTE *)(dword_ACDC84 + 80) & 0x40) ) { if ( *(_BYTE *)(dword_ACDC84 + 34) >= 0 && *(_BYTE *)(dword_ACDC84 + 66) < 0 ) sub_604770(*(_DWORD *)(v1 + 704)); } else { v28 = *(_DWORD *)(v1 + 704); if ( !sub_6043E0() ) { v29 = sub_4931F0((int *)(v1 + 2536)); sub_605D40(*(_DWORD ***)(v1 + 704), (int)v29); } } } else { v26 = *(_DWORD *)(v1 + 704); if ( !sub_6043E0() ) { v27 = sub_4931A0((int *)(v1 + 2536)); sub_605D40(*(_DWORD ***)(v1 + 704), (int)v27); } } } if ( dword_BA6ACC < 1 ) goto LABEL_91; dword_ACE8E8 = 1; GetCursorPos(&Point); dword_ACE8E4 = Point.x; dword_ACE8E0 = Point.y; sub_46E2D0(0); if ( dword_ADB4F8 > 1 ) goto LABEL_91; v30 = sub_69B200(byte_ADB468, (float *)(v1 + 520), (float *)(v1 + 532), (int)&v70); if ( v30 ) { v31 = sub_6E25A0(v30); v32 = sub_6E2D00(&unk_ADB488, v31); v33 = v32; if ( v32 ) { v34 = sub_4A3D40(*(_DWORD *)(v32 + 8), 30000, 0); v35 = (unsigned __int16 *)v34; if ( v34 ) { if ( *(_BYTE *)(v34 + 4) > 1u ) { v36 = rand(); v35 = (unsigned __int16 *)sub_4A3C90(v36 % *((unsigned __int8 *)v35 + 4) + *v35); } if ( v35 ) { v37 = *v35; LOWORD(dword_ADB5F2) = *(_WORD *)(v33 + 4); HIWORD(dword_ADB5F2) = v37; } } if ( word_ADB624 == -1 ) word_ADB624 = *(_WORD *)(v33 + 4); goto LABEL_91; } dword_ADB5F2 = -1; if ( word_ADB624 != -1 ) { LABEL_91: if ( dword_ACE8E8 ) { sub_693040(byte_ADB468, dword_BA6A70, dword_BA6A6C); if ( dword_BA6A70 || dword_BA6A6C ) byte_ACE8DC = 1; SetCursorPos(dword_ACE8E4, dword_ACE8E0); if ( dword_ACE8E8 ) { if ( !*(_BYTE *)(dword_ACDC88 + 145) ) { dword_ACE8E8 = 0; sub_46E2D0(1); if ( dword_ADB4F8 <= 1 ) { v39 = sub_69B200(byte_ADB468, (float *)(v1 + 520), (float *)(v1 + 532), (int)&v70); if ( v39 ) { v40 = sub_6E25A0(v39); v41 = sub_6E2D00(&unk_ADB488, v40); if ( v41 ) { if ( word_ADB624 == *(_WORD *)(v41 + 4) ) sub_4A2420((void *)v1, v41); } } word_ADB624 = -1; } } } } if ( dword_BA6A68 && !byte_BA6BA4 && !*(_BYTE *)(v1 + 697) ) sub_693050(byte_ADB468, dword_BA6A68); dword_ADA1D8 = 0; if ( dword_BA6B64 ) { sub_46E3D0(0); } else if ( *(_DWORD *)(v1 + 2512) == 1 ) { sub_46E3D0(5); sub_69BE40( (float *)byte_ADB468, *(_DWORD *)(v1 + 520), *(_DWORD *)(v1 + 524), *(_DWORD *)(v1 + 528), *(_DWORD *)(v1 + 532), *(_DWORD *)(v1 + 536), *(_DWORD *)(v1 + 540), (int)v69, (float *)&v74); sub_698350((_DWORD **)byte_ADB468, v69); sub_698360((_BYTE **)byte_ADB468, 1); } else { sub_698360((_BYTE **)byte_ADB468, 0); v74 = (char *)dword_BA6B9C; dword_AD8BF8 = 0; if ( dword_BA6B9C || dword_BA6A7C ) { v42 = 0; } else { v42 = sub_69B300( byte_ADB468, (float *)(v1 + 520), COERCE_FLOAT(v1 + 532), (char **)&v75, &Point.y, (signed __int16 *)&v73); if ( *(_BYTE *)(dword_ACDC88 + 129) ) { if ( (unsigned __int8)sub_604E00(*(_DWORD ***)(v1 + 704)) == 1 && !BYTE2(dword_AD0354) ) sub_4A3AC0(*(_DWORD ***)(v1 + 704), 0); if ( sub_6D1780() ) { v43 = sub_6D1780(); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v43 + 944) + 492))() == 1 ) { v44 = (_DWORD **)sub_6D1780(); sub_4A3B60(v44); } } if ( sub_6D3840() ) { v45 = sub_6D3840(); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(*(_DWORD *)(v45 + 344) + 408) + 492))() == 1 ) { v46 = sub_6D3840(); sub_4A3AA0(*(_DWORD ***)(v46 + 344)); } } sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 1080)); } } switch ( v42 ) { case 0: case 4: if ( dword_ADB4F8 == 2 && !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 1124) + 260))() ) { sub_46E3D0(11); return; } v51 = *(_DWORD *)(v1 + 704); v52 = 0; if ( !v51 || v74 ) goto LABEL_161; v53 = (unsigned __int8)sub_6057D0(v51) - 1; if ( v53 ) { if ( v53 != 1 ) goto LABEL_161; sub_46E3D0(3); } else { sub_46E3D0(2); } v52 = 1; LABEL_161: v54 = *(_DWORD *)(v1 + 852); if ( !v54 || v74 ) goto LABEL_168; v55 = (unsigned __int8)sub_4EF3E0(v54) - 1; if ( v55 ) { if ( v55 != 1 ) goto LABEL_168; sub_46E3D0(3); } else { sub_46E3D0(2); } v52 = 1; LABEL_168: v56 = *(_DWORD *)(v1 + 856); if ( !v56 || v74 ) goto LABEL_175; v57 = (unsigned __int8)sub_4EF3E0(v56) - 1; if ( v57 ) { if ( v57 != 1 ) goto LABEL_175; sub_46E3D0(3); } else { sub_46E3D0(2); } v52 = 1; LABEL_175: v58 = *(_DWORD *)(v1 + 860); if ( !v58 || v74 ) goto LABEL_182; v59 = (unsigned __int8)sub_4EF3E0(v58) - 1; if ( v59 ) { if ( v59 != 1 ) goto LABEL_182; sub_46E3D0(3); } else { sub_46E3D0(2); } v52 = 1; LABEL_182: if ( dword_BA6AA8 >= 1 ) { v60 = *(_DWORD *)(v1 + 1240); if ( v60 ) sub_71B810(v60); } if ( v52 ) break; v61 = *(_DWORD *)(v1 + 708); if ( !v61 || v74 ) goto LABEL_192; v62 = (unsigned __int8)sub_601630(v61) - 1; if ( v62 ) { if ( v62 == 1 ) { sub_46E3D0(3); } else { LABEL_192: if ( !byte_BA6A88 ) { if ( dword_ADB4F8 != 2 || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 1124) + 260))() ) sub_46E3D0(0); else sub_46E3D0(11); } } } else { sub_46E3D0(2); } break; case 1: dword_AD8BF8 = (int)v75; if ( dword_BA6AA8 >= 1 ) { v47 = *(_DWORD *)(v1 + 1240); if ( v47 ) sub_71B810(v47); } if ( sub_650B20(v75) ) { switch ( sub_67C8C0(v75) ) { case 4: case 6: case 7: sub_46E3D0(7); break; case 5: case 8: sub_46E3D0(8); break; default: break; } } else if ( sub_651680((int)v75) ) { if ( !sub_6516C0(v75) ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v75 + 32))() || (v48 = *(_DWORD *)(sub_49F370(v75[471]) + 99), v48 != 24) && v48 != 29 ) { sub_46E3D0(6); } } } else if ( sub_67DA80(dword_AD8EBC, (int)v75) == 3 ) { v49 = (unsigned __int8 *)sub_6CF210(); if ( v49 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v75 + 32))() ) { sub_6D0140(v49, (int)v75); if ( strlen((const char *)sub_6CED70(v49)) ) { v50 = sub_653B10(v75, v69); sub_6CED80((int)v49, (int)v49, v1, *(_DWORD *)v50, *((_DWORD *)v50 + 1), v50[2]); (*(void (**)(void))(*(_DWORD *)dword_AD01E8 + 552))(); } } } sub_46E3D0(1); } if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v75 + 32))() && !sub_651680((int)v75) ) dword_AD8BF8 = (int)v75; break; case 3: if ( *(_BYTE *)(dword_ACDC88 + 129) ) { sub_46E3D0(3); } else { sub_46E3D0(2); dword_ADA1D8 = Point.y; } break; default: break; } } if ( dword_BA6AD8 >= 1 ) { if ( !byte_ACE8DC ) { Point.y = 0xFFFF; if ( sub_69C6A0( (float *)byte_ADB468, v1 + 520, v1 + 532, &v74, (int)v69, (int *)&v75, (signed __int16 *)&Point.y) == 1 ) { sub_4A2160((_DWORD *)v1, v74); if ( dword_BA6AD8 ) --dword_BA6AD8; } } byte_ACE8DC = 0; } if ( *(_BYTE *)(dword_ACDC84 + 36) & 0x20 && (v63 = *(_DWORD *)(dword_ACEC34 + 1620), (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACEC34 + 260))()) && v63 && !*(_DWORD *)(*(_DWORD *)(dword_ACEC34 + 1620) + 98) && (v64 = *(_DWORD *)(dword_ACEC34 + 1616)) != 0 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v64 + 4))() == 5 ) { v65 = (*(int (**)(void))(*(_DWORD *)dword_ACEC34 + 164))(); v66 = (*(int (**)(void))(*(_DWORD *)dword_ACEC34 + 144))() + v65; v67 = (*(int (**)(void))(*(_DWORD *)dword_ACEC34 + 168))(); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v1 + 1008) + 308))(v66, v67); (*(void (**)(void))(**(_DWORD **)(v1 + 1008) + 268))(); sub_4A80D0((char **)v1, *(_DWORD *)(dword_ACEC34 + 1616)); } else { sub_4A5AE0((_DWORD **)v1); } return; } v38 = MEMORY[4]; } else { dword_ADB5F2 = -1; v38 = -1; } word_ADB624 = v38; goto LABEL_91; } } } // ACDC84: using guessed type int dword_ACDC84; // ACDC88: using guessed type int dword_ACDC88; // ACE8DC: using guessed type char byte_ACE8DC; // ACE8E8: using guessed type int dword_ACE8E8; // ACEC24: using guessed type int dword_ACEC24; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; // AD0354: using guessed type int dword_AD0354; // AD89E8: using guessed type int dword_AD89E8; // AD89FC: using guessed type int dword_AD89FC; // AD8BF8: using guessed type int dword_AD8BF8; // ADA1D8: using guessed type int dword_ADA1D8; // ADB4C8: using guessed type int dword_ADB4C8; // ADB4F8: using guessed type int dword_ADB4F8; // ADB5F2: using guessed type int dword_ADB5F2; // ADB624: using guessed type __int16 word_ADB624; // B67404: using guessed type int dword_B67404; // B67408: using guessed type int dword_B67408; // B6740C: using guessed type int dword_B6740C; // BA6A68: using guessed type int dword_BA6A68; // BA6A6C: using guessed type int dword_BA6A6C; // BA6A70: using guessed type int dword_BA6A70; // BA6A7C: using guessed type int dword_BA6A7C; // BA6A88: using guessed type char byte_BA6A88; // BA6A9C: using guessed type int dword_BA6A9C; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC0: using guessed type int dword_BA6AC0; // BA6ACC: using guessed type int dword_BA6ACC; // BA6AD8: using guessed type int dword_BA6AD8; // BA6B64: using guessed type int dword_BA6B64; // BA6B9C: using guessed type int dword_BA6B9C; // BA6BA4: using guessed type char byte_BA6BA4; //----- (004A33D0) -------------------------------------------------------- void __thiscall sub_4A33D0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // edi unsigned int v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax int v9; // eax char v10; // [esp+17h] [ebp-2Dh] void *v11; // [esp+18h] [ebp-2Ch] unsigned int v12; // [esp+28h] [ebp-1Ch] unsigned int v13; // [esp+2Ch] [ebp-18h] int v14; // [esp+40h] [ebp-4h] v1 = this; sub_58DFD0(this[243]); v2 = v1[271]; v3 = sub_464F50((_DWORD *)v2[116]); v4 = sub_4650C0((_DWORD *)v2[116], v3, 0); v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4018E0(&v11, v4, strlen((const char *)v4)); v5 = v1[271]; v14 = 0; if ( v5[97] ) { v6 = (int)(v5 + 93); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; } else { v6 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v5[111] + 484))(v5[111]); } v7 = v6 + 1; if ( !sub_40C2F0((unsigned __int8 *)&v11, 0, v12, (unsigned __int8 *)v6, strlen((const char *)v6)) || (v10 = 1, dword_ADB4FC != 2) ) { v10 = 0; } v14 = -1; if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; if ( v10 ) { v8 = sub_58C420(); sub_58E080(v1[243], v7, v8); v9 = sub_58A9F0(); sub_58E080(v1[243], v7, v9); sub_58D930(v1[243], 0); (*(void (__stdcall **)(LONG, LONG))(*v1[243] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v1[243]); } } // ADB4FC: using guessed type int dword_ADB4FC; //----- (004A3570) -------------------------------------------------------- void __thiscall sub_4A3570(_DWORD **this) { _DWORD **v1; // ebx __int16 *v2; // eax int v3; // eax int v4; // edi __int16 v5; // si int v6; // ebx char *v7; // eax int v8; // eax _DWORD *v9; // ecx char *v10; // eax char *v11; // ST04_4 int v12; // ebx int v13; // esi int v14; // eax int v15; // ecx int v16; // eax char *v17; // edx char v18; // cl char *v19; // eax char *v20; // edx char v21; // cl unsigned int v22; // eax char *v23; // edi char v24; // cl char *v25; // edi __int16 v26; // ST08_2 int v27; // ecx _DWORD *v28; // ecx int v29; // [esp-10h] [ebp-CCh] int v30; // [esp+4h] [ebp-B8h] _DWORD **v31; // [esp+8h] [ebp-B4h] __int16 *v32; // [esp+Ch] [ebp-B0h] unsigned __int8 v33[104]; // [esp+10h] [ebp-ACh] char v34[32]; // [esp+78h] [ebp-44h] char v35[32]; // [esp+97h] [ebp-25h] char v36[32]; // [esp+98h] [ebp-24h] v1 = this; v31 = this; sub_58DFD0(this[243]); v2 = (__int16 *)sub_40C8D0("GoddessWing"); v3 = sub_685510(&byte_ADA230, *v2); if ( v3 ) { qmemcpy(v33, (const void *)(v3 + 8), 0x67u); if ( v33[2] ) { v4 = 0; v30 = 0; if ( v33[2] ) { v32 = (__int16 *)&v33[3]; while ( 1 ) { v5 = *v32; if ( *v32 == -1 ) { v6 = v4 + 1; v29 = v4 + 1; if ( !sub_40C190(-1679039015) ) { v7 = sub_7549E0(" %d. Empty Space", v29); v8 = sub_58BDD0(v4, v7, v5); v9 = v31[243]; goto LABEL_25; } v10 = (char *)sub_40C190(1312697893); v11 = sub_7549E0(v10, v29); v8 = sub_58BDD0(v4, v11, v5); } else { v12 = (unsigned __int16)*v32; v13 = dword_ACB234; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB234 + 16))(dword_ACB234, v12) ) { if ( (unsigned __int16)v12 <= *(_WORD *)(v13 + 200) ) { v15 = *(_DWORD *)(v13 + 196); if ( *(_DWORD *)(v15 + 4 * v12) ) v14 = *(_DWORD *)(v15 + 4 * v12); else v14 = 0; } else { v14 = 0; } } else { v14 = 0; } v16 = v14 + 14; v17 = &v34[-v16]; do { v18 = *(_BYTE *)v16; v17[v16] = *(_BYTE *)v16; ++v16; } while ( v18 ); v6 = v4 + 1; v19 = sub_7549E0(" %d. ", v4 + 1); v20 = (char *)(v36 - v19); do { v21 = *v19; v19[(_DWORD)v20] = *v19; ++v19; } while ( v21 ); v22 = strlen(v34) + 1; v23 = v35; do v24 = (v23++)[1]; while ( v24 ); qmemcpy(v23, v34, 4 * (v22 >> 2)); v25 = &v23[4 * (v22 >> 2)]; v26 = *v32; v27 = v22 & 3; qmemcpy(v25, &v34[4 * (v22 >> 2)], v27); v4 = (int)&v25[v27]; v8 = sub_58BDD0(v30, v36, v26); } v9 = v31[243]; LABEL_25: sub_58E080(v9, v4, v8); v32 += 5; v30 = v6; if ( v6 >= v33[2] ) { v1 = v31; break; } v4 = v6; } } } v28 = v1[243]; if ( v28[104] ) { sub_58D930(v28, 0); (*(void (__stdcall **)(LONG, LONG))(*v1[243] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v1[243]); } else { sub_58DFD0(v28); sub_8F86A0(&unk_BA6B10, v1[243]); } } } // ACB234: using guessed type int dword_ACB234; // ADA230: using guessed type char byte_ADA230; // 4A3570: using guessed type char var_44[32]; // 4A3570: using guessed type char var_24[32]; //----- (004A37E0) -------------------------------------------------------- BOOL __thiscall sub_4A37E0(float *this, float *a2) { return *a2 == *this && a2[1] == this[1] && a2[2] == this[2]; } //----- (004A3820) -------------------------------------------------------- int sub_4A3820() { int result; // eax DNameNode *v1; // eax result = dword_ACD1F8; if ( !dword_ACD1F8 ) { v1 = (DNameNode *)operator new(8u); if ( v1 ) { result = DNameNode::DNameNode(v1); dword_ACD1F8 = result; } else { result = 0; dword_ACD1F8 = 0; } } return result; } // ACD1F8: using guessed type int dword_ACD1F8; //----- (004A38A0) -------------------------------------------------------- int __cdecl sub_4A38A0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACB234; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB234 + 16))(dword_ACB234, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACB234: using guessed type int dword_ACB234; //----- (004A38F0) -------------------------------------------------------- float *__thiscall sub_4A38F0(float *this, float *a2) { float *result; // eax result = a2; *a2 = this[26]; a2[1] = this[29]; a2[2] = this[32]; return result; } //----- (004A3910) -------------------------------------------------------- float *__thiscall sub_4A3910(void *this, float *a2, int a3) { void *v3; // esi float *result; // eax int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx float v9; // ecx float v10; // edx float v11; // [esp+8h] [ebp-30h] float v12; // [esp+Ch] [ebp-2Ch] float v13; // [esp+10h] [ebp-28h] float v14; // [esp+14h] [ebp-24h] float v15; // [esp+18h] [ebp-20h] float v16; // [esp+1Ch] [ebp-1Ch] int v17; // [esp+20h] [ebp-18h] int v18; // [esp+24h] [ebp-14h] int v19; // [esp+28h] [ebp-10h] float v20; // [esp+2Ch] [ebp-Ch] float v21; // [esp+30h] [ebp-8h] float v22; // [esp+34h] [ebp-4h] float v23; // [esp+44h] [ebp+Ch] float v24; // [esp+44h] [ebp+Ch] v3 = this; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 220))(this, &v17); if ( a3 ) { (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v3 + 200))(v3, &v11); (*(void (__thiscall **)(int, float *))(*(_DWORD *)a3 + 200))(a3, &v14); v20 = v14 - v11; v21 = v15 - v12; v22 = v16 - v13; v23 = v21 * v21 + v20 * v20 + v22 * v22; v24 = sqrt(v23); result = a2; if ( v24 >= 1.0 ) { v9 = v21; *a2 = v20; v10 = v22; a2[1] = v9; a2[2] = v10; } else { v7 = v18; *(_DWORD *)a2 = v17; v8 = v19; *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; } } else { result = a2; v5 = v18; *(_DWORD *)a2 = v17; v6 = v19; *((_DWORD *)a2 + 1) = v5; *((_DWORD *)a2 + 2) = v6; } return result; } //----- (004A3A00) -------------------------------------------------------- int __thiscall sub_4A3A00(_DWORD *this, _DWORD *a2, char a3) { int result; // eax *(_WORD *)this = -1; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = dword_BA45C0; this[5] = dword_BA45C4; this[6] = dword_BA45C8; *((_BYTE *)this + 28) = 0; this[4] = *a2; this[5] = a2[1]; result = a2[2]; this[6] = result; *((_BYTE *)this + 28) = a3; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004A3A60) -------------------------------------------------------- int __thiscall sub_4A3A60(_BYTE *this, int a2) { int v2; // esi v2 = (int)this; this[368] = a2; sub_6EDE30((int)this, a2, 7, a2); sub_6EDE30(v2, a2, 8, a2); return sub_6EDE30(v2, a2, 4, 1); } //----- (004A3AA0) -------------------------------------------------------- int __thiscall sub_4A3AA0(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[102] + 488))(1); } //----- (004A3AC0) -------------------------------------------------------- int __thiscall sub_4A3AC0(_DWORD **this, char a2) { _DWORD **v2; // esi void (__stdcall *v3)(signed int); // edx int result; // eax v2 = this; v3 = *(void (__stdcall **)(signed int))(*this[96] + 256); if ( a2 ) { v3(1); (*(void (__stdcall **)(signed int))(*v2[113] + 256))(1); (*(void (__stdcall **)(signed int))(*v2[112] + 256))(1); result = (*(int (**)(void))(*v2[116] + 480))(); } else { v3(0); (*(void (__stdcall **)(_DWORD))(*v2[113] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[112] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*v2[116] + 488))(0); } return result; } //----- (004A3B60) -------------------------------------------------------- int __thiscall sub_4A3B60(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[236] + 488))(1); } //----- (004A3B80) -------------------------------------------------------- _DWORD *__cdecl sub_4A3B80(_DWORD *a1) { int v1; // eax v1 = dword_B9DE5C; *a1 = dword_B9DE5C; if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); return a1; } // B9DE5C: using guessed type int dword_B9DE5C; //----- (004A3BB0) -------------------------------------------------------- int __thiscall sub_4A3BB0(int this, float a2, float a3, int a4) { int v4; // esi int v5; // eax int result; // eax v4 = this; if ( *(_DWORD *)(this + 572592) ) { sub_69AD10((float *)this, a2, a3, (int)&a2); v5 = *(_DWORD *)(v4 + 572592); *(float *)(v5 + 88) = a2; *(float *)(v5 + 92) = a3; *(_DWORD *)(v5 + 96) = a4; result = sub_85BED0(*(_DWORD ***)(v4 + 572592), 0.0, 1); } return result; } //----- (004A3C10) -------------------------------------------------------- int __thiscall sub_4A3C10(int this, int a2, float a3, int a4) { int v4; // esi int v5; // eax bool v6; // zf int result; // eax float *v8; // eax int v9; // [esp+10h] [ebp-Ch] float v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] v4 = this; v5 = *(_DWORD *)(this + 572592); *(_WORD *)(v5 + 28) &= 0xFFFEu; v6 = v5 == 0; result = LODWORD(a3); v9 = a2; v10 = a3; v11 = a4; if ( !v6 ) { sub_69AD10((float *)this, *(float *)&a2, a3, (int)&v9); v8 = *(float **)(v4 + 572592); *((_DWORD *)v8 + 22) = v9; v8[23] = v10; *((_DWORD *)v8 + 24) = v11; result = sub_85BED0(*(_DWORD ***)(v4 + 572592), 0.0, 1); } return result; } //----- (004A3C90) -------------------------------------------------------- int __cdecl sub_4A3C90(unsigned int a1) { return sub_7474E0((_DWORD *)(dword_ACD928 + 4), a1); } // ACD928: using guessed type int dword_ACD928; //----- (004A3CB0) -------------------------------------------------------- int __cdecl sub_4A3CB0(int a1, const char *a2) { int v3; // eax unsigned int v4; // edi unsigned int v5; // esi int v6; // eax if ( !a2 ) return 0; v3 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( !v4 ) return 0; while ( 1 ) { v6 = sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v5); if ( v6 ) { if ( *(_DWORD *)(v6 + 8) == a1 && !strcmp((const char *)(v6 + 12), a2) ) break; } if ( ++v5 >= v4 ) return 0; } return *(_DWORD *)(v6 + 4); } // ACD9D0: using guessed type int dword_ACD9D0; //----- (004A3D40) -------------------------------------------------------- int __cdecl sub_4A3D40(__int16 a1, int a2, int a3) { int v3; // eax unsigned int v4; // edi int v5; // ebx unsigned int v6; // esi int v7; // eax v3 = *(_DWORD *)(dword_ACD928 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; v6 = 0; if ( !v4 ) return 0; while ( 1 ) { v7 = sub_7474E0((_DWORD *)(dword_ACD928 + 4), v6); if ( *(_WORD *)(v7 + 2) != a1 || *(unsigned __int16 *)(v7 + 5) != a2 ) goto LABEL_9; if ( v5 == a3 ) return sub_7474E0((_DWORD *)(dword_ACD928 + 4), v6); ++v5; LABEL_9: if ( ++v6 >= v4 ) return 0; } } // ACD928: using guessed type int dword_ACD928; //----- (004A3DB0) -------------------------------------------------------- int __cdecl sub_4A3DB0(unsigned __int8 *a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi int v4; // eax v1 = *(_DWORD *)(dword_ACD930 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { v4 = sub_7474E0((_DWORD *)(dword_ACD930 + 4), v3); if ( !_mbscmp((const unsigned __int8 *)(v4 + 2), a1) ) break; if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD930 + 4), v3); } // ACD930: using guessed type int dword_ACD930; //----- (004A3E20) -------------------------------------------------------- int **__thiscall sub_4A3E20(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 21) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (004A3E90) -------------------------------------------------------- BOOL __cdecl sub_4A3E90(int a1, unsigned __int8 *a2) { return sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), a2, strlen((const char *)a2)) != 0; } //----- (004A3ED0) -------------------------------------------------------- int __thiscall sub_4A3ED0(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_4A3E20(this, (int **)&v4, &a2); if ( v4 == v2[1] ) result = 0; else result = *(_DWORD *)(v4 + 16); return result; } //----- (004A3F00) -------------------------------------------------------- void __thiscall sub_4A3F00(char *this, const char *a2) { signed int v2; // ebx _DWORD **v3; // edi signed int v4; // edi _DWORD **v5; // esi char *v6; // [esp+0h] [ebp-4h] v6 = this; if ( *((_DWORD *)this + 1) ) { if ( *this ) { v2 = 0; v3 = (_DWORD **)(this + 20); while ( strcmp((const char *)sub_570420(*v3), a2) ) { ++v2; ++v3; if ( v2 >= 4 ) return; } *(_BYTE *)(*(_DWORD *)&v6[4 * v2 + 20] + 348) = 1; } else { v4 = 0; v5 = (_DWORD **)(this + 4); while ( strcmp((const char *)sub_57FF20(*v5), a2) ) { ++v4; ++v5; if ( v4 >= 4 ) return; } *(_BYTE *)(*(_DWORD *)&v6[4 * v4 + 4] + 348) = 1; } } } //----- (004A4000) -------------------------------------------------------- int __thiscall sub_4A4000(char *this, char *a2) { int v2; // eax char *v3; // ecx int result; // eax char v5; // dl v2 = (int)(this + 68); *(_DWORD *)v2 = 0; *(_DWORD *)(v2 + 4) = 0; *(_DWORD *)(v2 + 8) = 0; *(_DWORD *)(v2 + 12) = 0; *(_BYTE *)(v2 + 16) = 0; v3 = a2; result = v2 - (_DWORD)a2; do { v5 = *v3; v3[result] = *v3; ++v3; } while ( v5 ); return result; } //----- (004A4060) -------------------------------------------------------- void __thiscall sub_4A4060(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[256] ) { if ( (*(unsigned __int8 (**)(void))(*this[256] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[256]); else sub_8F82A0(&unk_BA6B10, v1[256]); } } //----- (004A40B0) -------------------------------------------------------- char __thiscall sub_4A40B0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax _DWORD **v4; // ecx v2 = this; v3 = sub_8F8280(&unk_BA6B10); if ( v2[185] == v3 || (v3 = sub_8F8280(&unk_BA6B10), v2[186] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[188] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[195] != v3) ) { v4 = (_DWORD **)v2[176]; if ( v4 ) { LOBYTE(v3) = sub_604E00(v4); if ( !(_BYTE)v3 ) LOBYTE(v3) = sub_605D40((_DWORD **)v2[176], a2); } } return v3; } //----- (004A4130) -------------------------------------------------------- char __thiscall sub_4A4130(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax _DWORD **v4; // ecx v2 = this; v3 = sub_8F8280(&unk_BA6B10); if ( v2[185] == v3 || (v3 = sub_8F8280(&unk_BA6B10), v2[186] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[188] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[195] != v3) ) { v4 = (_DWORD **)v2[176]; if ( v4 ) { LOBYTE(v3) = sub_604E00(v4); if ( !(_BYTE)v3 ) LOBYTE(v3) = sub_605D40((_DWORD **)v2[176], a2); } } return v3; } //----- (004A41B0) -------------------------------------------------------- char __thiscall sub_4A41B0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax _DWORD **v4; // ecx v2 = this; v3 = sub_8F8280(&unk_BA6B10); if ( v2[185] == v3 || (v3 = sub_8F8280(&unk_BA6B10), v2[186] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[188] != v3) && (v3 = sub_8F8280(&unk_BA6B10), v2[195] != v3) ) { v4 = (_DWORD **)v2[176]; if ( v4 ) { LOBYTE(v3) = sub_604E00(v4); if ( !(_BYTE)v3 ) LOBYTE(v3) = sub_605D40((_DWORD **)v2[176], a2); } } return v3; } //----- (004A4230) -------------------------------------------------------- char __thiscall sub_4A4230(_DWORD *this) { int v1; // eax v1 = this[178]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[178]); return v1; } //----- (004A42A0) -------------------------------------------------------- char __thiscall sub_4A42A0(char *this) { int *v1; // eax char *v2; // edi int **v3; // esi int v4; // edi int v5; // eax _BYTE *v6; // eax int **v7; // esi int v8; // edi int v9; // ebx int *v10; // ST48_4 int v11; // eax int v12; // eax _BYTE *v13; // ecx int v14; // esi int v15; // eax int **v16; // esi int v17; // edi int v18; // ebx int v19; // eax int v20; // ebx int v21; // eax char *v23; // [esp+44h] [ebp-10h] signed int v24; // [esp+4Ch] [ebp-8h] signed int v25; // [esp+4Ch] [ebp-8h] signed int v26; // [esp+50h] [ebp-4h] signed int v27; // [esp+50h] [ebp-4h] LOBYTE(v1) = dword_AD0198; v2 = this; v23 = this; if ( dword_AD0198 == 4 ) { v3 = (int **)(this + 676); v4 = dword_AD0198; do { if ( *((_BYTE *)*(v3 - 5) + 1094) ) sub_8F86A0(&unk_BA6B10, *(v3 - 5)); v1 = *v3; if ( *((_BYTE *)*v3 + 1094) ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, *v3); ++v3; --v4; } while ( v4 ); dword_AD0198 = 0; } else if ( *(_DWORD *)&this[4 * dword_AD0198 + 656] && *(_DWORD *)&this[4 * dword_AD0198 + 676] ) { if ( this[dword_AD0198 + 692] ) v5 = *(_DWORD *)&this[4 * dword_AD0198 + 676]; else v5 = *(_DWORD *)&this[4 * dword_AD0198 + 656]; if ( *(_BYTE *)(v5 + 1094) ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v5); else sub_8F82A0(&unk_BA6B10, (_DWORD *)v5); v6 = (_BYTE *)*((_DWORD *)v2 + 163); v26 = 0; if ( v6[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v6 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v26 = 1; } v7 = (int **)(v2 + 656); v24 = 4; do { if ( *((_BYTE *)*v7 + 1094) ) { v8 = (unsigned __int16)v26 * (*(int (**)(void))(**v7 + 148))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v7 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v9 = **v7; v10 = *v7; v11 = (*(int (**)(void))(**v7 + 168))(); v12 = (*(int (__stdcall **)(int))(*v10 + 164))(v11 - v8); (*(void (__thiscall **)(int *, int))(v9 + 308))(*v7, v12); ++v26; v2 = v23; } ++v7; --v24; } while ( v24 ); v13 = (_BYTE *)*((_DWORD *)v2 + 168); v27 = 0; if ( v13[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v13 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v14 = **((_DWORD **)v2 + 168); v15 = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 168) + 164))(160); (*(void (__thiscall **)(_DWORD, int))(v14 + 308))(*((_DWORD *)v2 + 168), v15); v27 = 1; } v16 = (int **)(v2 + 676); v25 = 4; do { v1 = *v16; if ( *((_BYTE *)*v16 + 1094) ) { v17 = (unsigned __int16)v27 * (*(int (**)(void))(*v1 + 144))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v16 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v18 = **v16; v19 = (*(int (__stdcall **)(signed int))(**v16 + 164))(160); (*(void (__thiscall **)(int *, int))(v18 + 308))(*v16, v19); v20 = **v16; v21 = (*(int (__stdcall **)(signed int))(**v16 + 164))(160); LOBYTE(v1) = (*(int (__thiscall **)(int *, int))(v20 + 308))(*v16, v21 - v17); ++v27; } ++v16; --v25; } while ( v25 ); ++dword_AD0198; } return (char)v1; } // AD0198: using guessed type int dword_AD0198; //----- (004A4560) -------------------------------------------------------- void __thiscall sub_4A4560(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi signed int v4; // ebx _BYTE *v5; // ecx int **v6; // esi int v7; // edi int v8; // ebx int *v9; // ST58_4 int v10; // eax int v11; // eax _BYTE *v12; // ecx int v13; // esi int v14; // eax int **v15; // esi int v16; // edi int v17; // ebx int v18; // eax int v19; // ebx int v20; // eax _DWORD *v21; // [esp+54h] [ebp-Ch] signed int v22; // [esp+5Ch] [ebp-4h] signed int v23; // [esp+5Ch] [ebp-4h] signed int v24; // [esp+6Ch] [ebp+Ch] signed int v25; // [esp+6Ch] [ebp+Ch] v3 = this; v21 = this; if ( a3 && a2 ) { BYTE2(dword_B92038) = a3 == this[163]; sub_5A0490(a2); v4 = 1; if ( *(_BYTE *)(a3 + 1094) ) { v4 = *(_DWORD *)(a3 + 348); sub_8F86A0(&unk_BA6B10, (_DWORD *)a3); } if ( *(_BYTE *)(a2 + 1094) ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)a2); } else { sub_8F82A0(&unk_BA6B10, (_DWORD *)a2); *(_DWORD *)(a2 + 348) = v4; sub_5A03D0((_DWORD *)a2); sub_5A0350((_DWORD *)a2); sub_5A1820((_DWORD *)a2); } v5 = (_BYTE *)v3[163]; v24 = 0; if ( v5[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v5 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v24 = 1; } v6 = (int **)(v3 + 164); v22 = 4; do { if ( *((_BYTE *)*v6 + 1094) ) { v7 = (unsigned __int16)v24 * (*(int (**)(void))(**v6 + 148))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v6 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v8 = **v6; v9 = *v6; v10 = (*(int (**)(void))(**v6 + 168))(); v11 = (*(int (__stdcall **)(int))(*v9 + 164))(v10 - v7); (*(void (__thiscall **)(int *, int))(v8 + 308))(*v6, v11); ++v24; v3 = v21; } ++v6; --v22; } while ( v22 ); v12 = (_BYTE *)v3[168]; v25 = 0; if ( v12[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v12 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v13 = *(_DWORD *)v3[168]; v14 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v3[168] + 164))(160); (*(void (__thiscall **)(_DWORD, int))(v13 + 308))(v3[168], v14); v25 = 1; } v15 = (int **)(v3 + 169); v23 = 4; do { if ( *((_BYTE *)*v15 + 1094) ) { v16 = (unsigned __int16)v25 * (*(int (**)(void))(**v15 + 144))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v15 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v17 = **v15; v18 = (*(int (__stdcall **)(signed int))(**v15 + 164))(160); (*(void (__thiscall **)(int *, int))(v17 + 308))(*v15, v18); v19 = **v15; v20 = (*(int (__stdcall **)(signed int))(**v15 + 164))(160); (*(void (__thiscall **)(int *, int))(v19 + 308))(*v15, v20 - v16); ++v25; } ++v15; --v23; } while ( v23 ); sub_5A3790((_DWORD *)a2); } } // B92038: using guessed type int dword_B92038; //----- (004A47F0) -------------------------------------------------------- unsigned int __thiscall sub_4A47F0(_DWORD *this, int a2, unsigned int a3) { unsigned int result; // eax _DWORD *v4; // edi _DWORD *v5; // ebx int v6; // esi _BYTE *v7; // ecx int **v8; // esi int v9; // edi int v10; // ebx int *v11; // ST58_4 int v12; // eax int v13; // eax _BYTE *v14; // ecx int v15; // esi int v16; // eax int **v17; // esi int v18; // edi int v19; // ebx int v20; // eax int v21; // ebx int v22; // eax _DWORD *v23; // [esp+54h] [ebp-Ch] signed int v24; // [esp+5Ch] [ebp-4h] signed int v25; // [esp+5Ch] [ebp-4h] signed int v26; // [esp+5Ch] [ebp-4h] signed int v27; // [esp+6Ch] [ebp+Ch] signed int v28; // [esp+6Ch] [ebp+Ch] result = a3; v4 = this; v23 = this; if ( a3 ) { v5 = (_DWORD *)a2; if ( a2 ) { v6 = *(_DWORD *)(a2 + 1096); *((_BYTE *)&dword_B9203C + 3 * v6 + 1) = a3 == this[v6 + 164]; sub_5A0490(a2); v24 = 1; if ( *(_BYTE *)(a3 + 1094) ) { v24 = *(_DWORD *)(a3 + 348); sub_8F86A0(&unk_BA6B10, (_DWORD *)a3); } if ( *(_BYTE *)(a2 + 1094) ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)a2); } else { sub_8F82A0(&unk_BA6B10, (_DWORD *)a2); *((_BYTE *)v4 + v6 + 692) = *(_BYTE *)(a2 + 344); *(_DWORD *)(a2 + 348) = v24; sub_5A03D0((_DWORD *)a2); sub_5A0350((_DWORD *)a2); sub_5A1820((_DWORD *)a2); } v7 = (_BYTE *)v4[163]; v27 = 0; if ( v7[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v7 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v27 = 1; } v8 = (int **)(v4 + 164); v25 = 4; do { if ( *((_BYTE *)*v8 + 1094) ) { v9 = (unsigned __int16)v27 * (*(int (**)(void))(**v8 + 148))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v8 + 236))(xRight, dword_AC2F78, 0.0, 1.0); v10 = **v8; v11 = *v8; v12 = (*(int (**)(void))(**v8 + 168))(); v13 = (*(int (__stdcall **)(int))(*v11 + 164))(v12 - v9); (*(void (__thiscall **)(int *, int))(v10 + 308))(*v8, v13); ++v27; v5 = (_DWORD *)a2; v4 = v23; } ++v8; --v25; } while ( v25 ); v14 = (_BYTE *)v4[168]; v28 = 0; if ( v14[1094] ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v14 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v15 = *(_DWORD *)v4[168]; v16 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v4[168] + 164))(160); (*(void (__thiscall **)(_DWORD, int))(v15 + 308))(v4[168], v16); v28 = 1; } v17 = (int **)(v4 + 169); v26 = 4; do { if ( *((_BYTE *)*v17 + 1094) ) { v18 = (unsigned __int16)v28 * (*(int (**)(void))(**v17 + 144))(); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**v17 + 236))(xRight, dword_AC2F78, 1.0, 0.0); v19 = **v17; v20 = (*(int (__stdcall **)(signed int))(**v17 + 164))(160); (*(void (__thiscall **)(int *, int))(v19 + 308))(*v17, v20); v21 = **v17; v22 = (*(int (__stdcall **)(signed int))(**v17 + 164))(160); (*(void (__thiscall **)(int *, int))(v21 + 308))(*v17, v22 - v18); ++v28; v5 = (_DWORD *)a2; } ++v17; --v26; } while ( v26 ); result = sub_5A3790(v5); } } return result; } // B9203C: using guessed type int dword_B9203C; //----- (004A4AB0) -------------------------------------------------------- unsigned int __thiscall sub_4A4AB0(_DWORD **this) { _DWORD **v1; // esi _DWORD **v2; // esi signed int v3; // edi unsigned int result; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*this[163] + 260))() ) sub_5A3790(v1[163]); if ( (*(unsigned __int8 (**)(void))(*v1[168] + 260))() ) sub_5A3790(v1[168]); v2 = v1 + 169; v3 = 4; do { if ( (*(unsigned __int8 (**)(void))(**(v2 - 5) + 260))() ) sub_5A3790(*(v2 - 5)); result = (*(int (**)(void))(**v2 + 260))(); if ( (_BYTE)result ) result = sub_5A3790(*v2); ++v2; --v3; } while ( v3 ); return result; } //----- (004A4BA0) -------------------------------------------------------- char __thiscall sub_4A4BA0(_DWORD *this) { int v1; // eax v1 = this[268]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[268]); return v1; } //----- (004A4BC0) -------------------------------------------------------- char __thiscall sub_4A4BC0(_DWORD *this) { _DWORD **v1; // ecx char result; // al v1 = (_DWORD **)this[245]; if ( v1 ) result = sub_615820(v1); return result; } //----- (004A4BE0) -------------------------------------------------------- char __thiscall sub_4A4BE0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // eax v2 = this; v3 = this[279]; if ( v3 ) { LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[279]); v2[279] = 0; if ( !a2 ) { v4 = (_DWORD *)v2[271]; v2[279] = v4; LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v4); } } return v3; } //----- (004A4C30) -------------------------------------------------------- char __thiscall sub_4A4C30(_DWORD *this) { char result; // al if ( this[264] ) result = sub_4BCFA0(this); return result; } //----- (004A4C40) -------------------------------------------------------- bool __thiscall sub_4A4C40(_DWORD **this) { return sub_8F82A0(&unk_BA6B10, this[154]) != 0; } //----- (004A4C60) -------------------------------------------------------- char __thiscall sub_4A4C60(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; result = (*(int (**)(void))(*this[154] + 260))(); if ( result ) result = sub_8F86A0(&unk_BA6B10, v1[154]); return result; } //----- (004A4CA0) -------------------------------------------------------- void __thiscall sub_4A4CA0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[257] ) { if ( (*(unsigned __int8 (**)(void))(*this[257] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[257]); else sub_8F82A0(&unk_BA6B10, v1[257]); } } //----- (004A4CF0) -------------------------------------------------------- char __thiscall sub_4A4CF0(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*this[183] + 236))(xRight, dword_AC2F78, 0.5, 0.5); if ( v1[183] ) { if ( (*(unsigned __int8 (**)(void))(*v1[183] + 260))() ) result = sub_8F86A0(&unk_BA6B10, v1[183]); else result = sub_8F82A0(&unk_BA6B10, v1[183]); } return result; } //----- (004A4D80) -------------------------------------------------------- _DWORD *__usercall sub_4A4D80@(_DWORD *a1@, int a2@, int a3@) { _DWORD *v3; // esi v3 = a1; sub_6BEDA0(); sub_6BE700(); nullsub_10(v3); sub_497F40(v3); sub_497FE0(v3); sub_498180(v3); sub_498220(); sub_64F980(dword_AD8EBC, 0); sub_6BDA20(a2, a3); return sub_8EF040(v3, dword_ACDD5C, 0); } // 4970C0: using guessed type int __thiscall nullsub_10(_DWORD); // ACDD5C: using guessed type int dword_ACDD5C; //----- (004A4DE0) -------------------------------------------------------- int __thiscall sub_4A4DE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; nullsub_10(this); sub_497F40(v1); sub_497FE0(v1); sub_498180(v1); sub_498220(); sub_6BEDA0(); sub_6BE700(); sub_64F980(dword_AD8EBC, 0); sub_6F3C20(&off_AB7F2C); return sub_8F00A0((int)&unk_BA6A18, 0); } // 4970C0: using guessed type int __thiscall nullsub_10(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A4E40) -------------------------------------------------------- int sub_4A4E40() { sub_6F3C20(&off_AB7F2C); return sub_8F00A0((int)&unk_BA6A18, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A4E90) -------------------------------------------------------- int __thiscall sub_4A4E90(int **this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5, int a6) { this[186][94] = a6; return sub_50A4E0(this[186], a2, a3, a4, a5); } //----- (004A4ED0) -------------------------------------------------------- int __thiscall sub_4A4ED0(volatile LONG **this, _DWORD *a2, _DWORD *a3, int a4) { return sub_532A50(this[187], a2, a3, a4); } //----- (004A4EE0) -------------------------------------------------------- int __thiscall sub_4A4EE0(volatile LONG **this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5, int a6) { volatile LONG **v6; // esi int result; // eax v6 = this; sub_572750(this[188], a2, a3, a4, a5); result = a6; if ( a6 ) result = sub_5729D0((_DWORD **)v6[188], a6); return result; } //----- (004A4F20) -------------------------------------------------------- char __thiscall sub_4A4F20(_DWORD **this, int a2, int a3, int a4, int a5) { _DWORD **v5; // esi char result; // al v5 = this; result = sub_8F3540(this[195]); if ( !result ) result = sub_572B30(v5[195], a2, a3, a4, a5); return result; } //----- (004A4F60) -------------------------------------------------------- char __thiscall sub_4A4F60(_DWORD **this, char a2, char a3) { _DWORD **v3; // esi char result; // al v3 = this; if ( a2 ) { sub_8F86A0(&unk_BA6B10, this[246]); sub_8F86A0(&unk_BA6B10, v3[247]); result = sub_8F86A0(&unk_BA6B10, v3[248]); } if ( a3 ) { sub_8F86A0(&unk_BA6B10, v3[249]); sub_8F86A0(&unk_BA6B10, v3[250]); result = sub_8F86A0(&unk_BA6B10, v3[251]); } return result; } //----- (004A4FE0) -------------------------------------------------------- char __thiscall sub_4A4FE0(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[253]); } //----- (004A5000) -------------------------------------------------------- char __thiscall sub_4A5000(_DWORD *this) { int v1; // eax v1 = this[180]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[180]); return v1; } //----- (004A5020) -------------------------------------------------------- char __thiscall sub_4A5020(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[179]); } //----- (004A5050) -------------------------------------------------------- void __thiscall sub_4A5050(_DWORD ***this, int a2) { sub_535730(this[179], a2); } //----- (004A5060) -------------------------------------------------------- char __thiscall sub_4A5060(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = this[192]; if ( v3 ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)this[192]); sub_60D6D0((void *)v2[192]); LOBYTE(v3) = sub_4B8E30(v2); } return v3; } //----- (004A5090) -------------------------------------------------------- char __thiscall sub_4A5090(_DWORD *this, char a2, int a3) { _DWORD *v3; // esi char *v4; // ecx char result; // al v3 = this; v4 = (char *)this[194]; if ( v4 ) { if ( a2 ) sub_62AB80(v4, a3); else sub_62AB80(v4, 1); result = sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[194]); } return result; } //----- (004A50D0) -------------------------------------------------------- char __thiscall sub_4A50D0(_DWORD *this) { int v1; // eax v1 = this[194]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[194]); return v1; } //----- (004A50F0) -------------------------------------------------------- char __thiscall sub_4A50F0(_DWORD *this) { int v1; // eax v1 = this[146]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[146]); return v1; } //----- (004A5110) -------------------------------------------------------- char __thiscall sub_4A5110(_DWORD *this) { int v1; // eax v1 = this[146]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[146]); return v1; } //----- (004A5130) -------------------------------------------------------- char __thiscall sub_4A5130(_DWORD *this) { int v1; // eax v1 = this[148]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[148]); return v1; } //----- (004A5170) -------------------------------------------------------- char __thiscall sub_4A5170(_DWORD *this, const char *a2) { char result; // al _DWORD **v3; // ecx result = (char)a2; if ( a2 ) { v3 = (_DWORD **)this[1220]; if ( v3 ) result = sub_58A2C0(v3, a2); } return result; } //----- (004A51B0) -------------------------------------------------------- char __thiscall sub_4A51B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx char result; // al v1 = this; v2 = (_DWORD *)this[153]; if ( v2 ) { sub_5C8DA0(v2); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[153]); } return result; } //----- (004A5200) -------------------------------------------------------- char __thiscall sub_4A5200(_DWORD *this) { int v1; // eax v1 = this[152]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[152]); return v1; } //----- (004A5240) -------------------------------------------------------- char __thiscall sub_4A5240(_DWORD *this) { int v1; // eax v1 = this[147]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[147]); return v1; } //----- (004A5260) -------------------------------------------------------- char __thiscall sub_4A5260(_DWORD *this) { int v1; // eax v1 = this[192]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[192]); return v1; } //----- (004A5280) -------------------------------------------------------- char __thiscall sub_4A5280(_DWORD *this) { int v1; // eax v1 = this[193]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[193]); return v1; } //----- (004A52A0) -------------------------------------------------------- char __thiscall sub_4A52A0(_DWORD *this) { int v1; // eax v1 = this[193]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[193]); return v1; } //----- (004A52E0) -------------------------------------------------------- char __thiscall sub_4A52E0(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[227]); } //----- (004A5300) -------------------------------------------------------- char __thiscall sub_4A5300(_DWORD *this) { int v1; // eax v1 = this[228]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[228]); return v1; } //----- (004A5320) -------------------------------------------------------- signed int __thiscall sub_4A5320(_DWORD *this) { _DWORD *v1; // ecx signed int result; // eax v1 = (_DWORD *)this[228]; if ( v1 ) result = sub_4FBCD0(v1); return result; } //----- (004A5330) -------------------------------------------------------- void __thiscall sub_4A5330(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[313]; if ( v2 ) { if ( !sub_8F3540(v2) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[313] + 236))(xRight, dword_AC2F78, 0.5, 0.5); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[313]); } } } //----- (004A5390) -------------------------------------------------------- char __thiscall sub_4A5390(_DWORD *this) { int v1; // eax v1 = this[313]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[313]); return v1; } //----- (004A53B0) -------------------------------------------------------- char __thiscall sub_4A53B0(_DWORD *this) { int v1; // eax v1 = this[316]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[316]); return v1; } //----- (004A53D0) -------------------------------------------------------- char __thiscall sub_4A53D0(_DWORD *this) { int v1; // eax v1 = this[317]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[317]); return v1; } //----- (004A53F0) -------------------------------------------------------- char __thiscall sub_4A53F0(_DWORD *this) { int v1; // eax v1 = this[317]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[317]); return v1; } //----- (004A5410) -------------------------------------------------------- char __thiscall sub_4A5410(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[223]); } //----- (004A5450) -------------------------------------------------------- void __thiscall sub_4A5450(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[220]; if ( v2 ) { if ( sub_8F3540(v2) ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[220]); else sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[220]); } } //----- (004A5490) -------------------------------------------------------- void __thiscall sub_4A5490(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[310]; if ( v2 ) { if ( sub_8F3540(v2) ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[310]); else sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[310]); } } //----- (004A54D0) -------------------------------------------------------- void __thiscall sub_4A54D0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // edi int v4; // eax int v5; // edi int v6; // eax v1 = this; v2 = this[226]; if ( v2 ) { v3 = *(_DWORD *)v1[216]; v4 = (*(int (**)(void))(*(_DWORD *)v2 + 164))(); (*(void (__thiscall **)(_DWORD, int))(v3 + 172))(v1[216], v4); v5 = *(_DWORD *)v1[216]; v6 = (*(int (**)(void))(*(_DWORD *)v1[226] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v5 + 176))(v1[216], v6); sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[226]); v1[226] = 0; } } //----- (004A5550) -------------------------------------------------------- char __thiscall sub_4A5550(int this, int a2) { int v2; // esi char result; // al v2 = this; if ( !a2 ) return sub_5CED50(*(_DWORD *)(this + 924)); if ( a2 == 1 ) { result = sub_5CC290(*(_DWORD *)(this + 920)); *(_BYTE *)(v2 + 698) = 1; } else { result = a2 - 2; if ( a2 == 2 ) result = sub_5CE2F0(*(_BYTE **)(this + 928)); } return result; } //----- (004A55A0) -------------------------------------------------------- char __thiscall sub_4A55A0(int this, int a2) { char result; // al if ( !a2 ) return sub_5CED80(*(void ***)(this + 924)); if ( a2 == 1 ) return sub_5CDD00(*(void **)(this + 920)); result = a2 - 2; if ( a2 == 2 ) result = sub_5CE470(*(_DWORD ***)(this + 928)); return result; } //----- (004A55E0) -------------------------------------------------------- void __usercall sub_4A55E0(int a1@, int a2@, int a3@) { int v3; // esi int *v4; // ecx int v5; // esi int *v6; // ebx int v7; // [esp+8h] [ebp-4h] int v8; // [esp+8h] [ebp-4h] v3 = a1; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(a1 + 916) + 236))(xRight, dword_AC2F78, 0.0, 0.5); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 916)); sub_5CE370(*(_DWORD ***)(v3 + 928)); sub_5CC660(*(_DWORD ***)(v3 + 920)); v4 = *(int **)(v3 + 924); v5 = v7; v8 = a2; v6 = v4; if ( v4[86] ) { qmemcpy((char *)v4 + 289, &word_B91FF8, 0x37u); sub_5CF550(v4, (_BYTE *)v4 + 289); sub_5CBF20(v6[86], 0); (*(void (__cdecl **)(int *, signed int, int, int, int))(*(_DWORD *)v6[86] + 116))(v6, 1, a3, v5, v8); (*(void (__thiscall **)(int *, signed int))(*v6 + 256))(v6, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v6[86]); } } // 4A55E0: could not find valid save-restore pair for ebx // 4A55E0: could not find valid save-restore pair for edi // B91FF8: using guessed type __int16 word_B91FF8; // B9202C: using guessed type char byte_B9202C; //----- (004A5650) -------------------------------------------------------- void __usercall sub_4A5650(int a1@, int a2@, int a3@) { int v3; // esi int v4; // ecx int v5; // esi _DWORD *v6; // ebx int v7; // [esp+8h] [ebp-4h] int v8; // [esp+8h] [ebp-4h] v3 = a1; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(a1 + 916) + 236))(xRight, dword_AC2F78, 0.0, 0.5); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 916)); sub_5CE370(*(_DWORD ***)(v3 + 928)); sub_5CF230(*(_DWORD ***)(v3 + 924)); v4 = *(_DWORD *)(v3 + 920); v5 = v7; v8 = a2; v6 = (_DWORD *)v4; if ( *(_DWORD *)(v4 + 412) ) { qmemcpy((void *)(v4 + 349), &dword_AB66B8, 0x3Fu); sub_5CD8D0(v4, v4 + 349); *(_BYTE *)(v6[78] + 380) = byte_AB66E7 == 0; sub_5CBF20(v6[103], 1); (*(void (__cdecl **)(_DWORD *, signed int, int, int, int))(*(_DWORD *)v6[103] + 116))(v6, 1, a3, v5, v8); (*(void (__thiscall **)(_DWORD *, signed int))(*v6 + 256))(v6, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v6[103]); } } // 4A5650: could not find valid save-restore pair for ebx // 4A5650: could not find valid save-restore pair for edi // AB66B8: using guessed type int dword_AB66B8; // AB66E7: using guessed type char byte_AB66E7; // AB66F1: using guessed type float flt_AB66F1; //----- (004A56C0) -------------------------------------------------------- void __usercall sub_4A56C0(int a1@, int a2@) { int v2; // esi int v3; // esi int v4; // ST10_4 int *v5; // edi v2 = a1; (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(a1 + 916) + 236))(xRight, dword_AC2F78, 0.0, 0.5); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 916)); sub_5CF230(*(_DWORD ***)(v2 + 924)); sub_5CC660(*(_DWORD ***)(v2 + 920)); v3 = *(_DWORD *)(v2 + 928); if ( *(_DWORD *)(v3 + 308) ) { v4 = a2; v5 = sub_6BC0C0(); sub_4637A0(*(_DWORD **)(v3 + 288), v5[2]); sub_4637A0(*(_DWORD **)(v3 + 292), v5[3]); sub_4637A0(*(_DWORD **)(v3 + 296), v5[4]); sub_4637A0(*(_DWORD **)(v3 + 300), v5[5]); sub_5CBF20(*(_DWORD *)(v3 + 308), 2); (*(void (__cdecl **)(int, signed int, int))(**(_DWORD **)(v3 + 308) + 116))(v3, 1, v4); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, 1); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 308)); } } // 4A56C0: could not find valid save-restore pair for edi //----- (004A5730) -------------------------------------------------------- char __thiscall sub_4A5730(_DWORD **this) { return sub_8F82A0(&unk_BA6B10, this[145]); } //----- (004A5750) -------------------------------------------------------- char __thiscall sub_4A5750(_BYTE **this) { _BYTE **v1; // esi v1 = this; sub_5CDC30(this[230]); sub_5D0C40((int)v1[231]); return sub_8F86A0(&unk_BA6B10, v1[229]); } //----- (004A5790) -------------------------------------------------------- char __thiscall sub_4A5790(_DWORD *this, __int16 a2) { return sub_4B72A0(this, 17, 7, &a2, 2u); } //----- (004A57B0) -------------------------------------------------------- char __thiscall sub_4A57B0(_DWORD *this, __int16 a2) { return sub_4B72A0(this, 17, 11, &a2, 2u); } //----- (004A57D0) -------------------------------------------------------- char __thiscall sub_4A57D0(_DWORD *this, char a2) { char result; // al if ( a2 ) result = sub_4B72A0(this, 2, 122, 0, 0); else result = sub_4B72A0(this, 2, 24, 0, 0); return result; } //----- (004A5800) -------------------------------------------------------- char __thiscall sub_4A5800(_DWORD *this, __int16 a2, char a3, int a4) { __int16 v5; // [esp+0h] [ebp-8h] char v6; // [esp+2h] [ebp-6h] int v7; // [esp+3h] [ebp-5h] v6 = a3; v5 = a2; v7 = a4; return sub_4B72A0(this, 17, 2, &v5, 7u); } //----- (004A5860) -------------------------------------------------------- char __thiscall sub_4A5860(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[276]); } //----- (004A5880) -------------------------------------------------------- signed int sub_4A5880() { sub_6DE060(byte_ADB468, 0, 1); return sub_6DE220(byte_ADB468); } //----- (004A58A0) -------------------------------------------------------- char sub_4A58A0() { char v1; // [esp+1h] [ebp-1h] v1 = 0; return sub_6F3D10(&off_AB7F2C, 35, 86, &v1, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A58C0) -------------------------------------------------------- char __thiscall sub_4A58C0(_DWORD **this, char a2) { _DWORD **v2; // esi v2 = this; if ( a2 != 1 ) return sub_8F86A0(&unk_BA6B10, this[282]); sub_8F82A0(&unk_BA6B10, this[179]); return sub_8F82A0(&unk_BA6B10, v2[282]); } //----- (004A5910) -------------------------------------------------------- void __thiscall sub_4A5910(_DWORD *this, char a2) { char *v2; // ecx v2 = (char *)this[179]; if ( v2 ) { if ( a2 ) sub_537470(v2); else sub_537640(v2); } } //----- (004A5940) -------------------------------------------------------- int __thiscall sub_4A5940(_DWORD **this, char a2, 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) { _DWORD **v29; // ebx int *v30; // esi int result; // eax _DWORD *v32; // ebx char v33; // [esp+Ch] [ebp-6Ch] unsigned __int8 v34; // [esp+47h] [ebp-31h] unsigned __int8 v35; // [esp+48h] [ebp-30h] __int16 v36; // [esp+70h] [ebp-8h] char v37; // [esp+72h] [ebp-6h] v29 = this; qmemcpy(&v33, &a2, 0x64u); v36 = a27; v37 = BYTE2(a27); v30 = a28; if ( byte_ACEBE0 == 1 ) { byte_ACEBE0 = 0; sub_8F86A0(&unk_BA6B10, this[246]); sub_8F86A0(&unk_BA6B10, v29[247]); sub_8F86A0(&unk_BA6B10, v29[248]); sub_8F86A0(&unk_BA6B10, v29[249]); sub_8F86A0(&unk_BA6B10, v29[250]); sub_8F86A0(&unk_BA6B10, v29[251]); byte_ACEBE0 = 1; } else { sub_8F86A0(&unk_BA6B10, this[246]); sub_8F86A0(&unk_BA6B10, v29[247]); sub_8F86A0(&unk_BA6B10, v29[248]); sub_8F86A0(&unk_BA6B10, v29[249]); sub_8F86A0(&unk_BA6B10, v29[250]); sub_8F86A0(&unk_BA6B10, v29[251]); } result = a29; if ( a29 ) { if ( a29 != 1 ) return result; result = v34 - v35; if ( v34 == v35 ) { v32 = v29[249]; } else if ( --result ) { if ( --result ) return result; v32 = v29[251]; } else { v32 = v29[250]; } } else { result = v34 - v35; if ( v34 == v35 ) { v32 = v29[246]; } else if ( --result ) { if ( --result ) return result; v32 = v29[248]; } else { v32 = v29[247]; } } if ( v32 ) { sub_8F82A0(&unk_BA6B10, v32); result = sub_50B0B0((int)v32, (int)v32, (unsigned __int16 *)&v33, v30); } return result; } // ACEBE0: using guessed type char byte_ACEBE0; //----- (004A5AE0) -------------------------------------------------------- int __thiscall sub_4A5AE0(_DWORD **this) { _DWORD **v1; // esi int result; // eax char *v3; // ecx v1 = this; result = (*(int (**)(void))(*this[252] + 260))(); if ( (_BYTE)result ) { v3 = (char *)v1[252]; if ( *((_WORD *)v3 + 202) != -1 ) sub_50AF40(v3); result = (*(int (__stdcall **)(_DWORD))(*v1[252] + 256))(0); } return result; } //----- (004A5B30) -------------------------------------------------------- char __thiscall sub_4A5B30(_DWORD *this) { int v1; // eax _DWORD *v2; // ecx v1 = this[262]; *(_DWORD *)(v1 + 496) = 2; v2 = (_DWORD *)this[262]; if ( v2 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, v2); return v1; } //----- (004A5B60) -------------------------------------------------------- char __thiscall sub_4A5B60(_DWORD *this) { int v1; // eax v1 = this[262]; if ( v1 ) LOBYTE(v1) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this[262]); return v1; } //----- (004A5B80) -------------------------------------------------------- char __thiscall sub_4A5B80(_DWORD *this) { int v1; // eax v1 = this[1219]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[1219]); return v1; } //----- (004A5BA0) -------------------------------------------------------- void __thiscall sub_4A5BA0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[1219] ) { if ( (*(unsigned __int8 (**)(void))(*this[1219] + 260))() == 1 ) sub_8F86A0(&unk_BA6B10, v1[1219]); } } //----- (004A5C20) -------------------------------------------------------- void __thiscall sub_4A5C20(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[1220] ) { if ( (*(unsigned __int8 (**)(void))(*this[1220] + 260))() == 1 ) sub_8F86A0(&unk_BA6B10, v1[1220]); } } //----- (004A5C60) -------------------------------------------------------- void __thiscall sub_4A5C60(_DWORD **this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx v1 = this; v2 = this + 169; v3 = 4; do { sub_5A1820(v1[163]); sub_5A1820(v1[168]); sub_5A1820(*(v2 - 5)); sub_5A1820(*v2); ++v2; --v3; } while ( v3 ); } //----- (004A5CA0) -------------------------------------------------------- char __thiscall sub_4A5CA0(_DWORD *this, char a2) { int v2; // eax _DWORD *v4; // [esp-4h] [ebp-4h] v2 = this[1227]; if ( v2 ) { v4 = (_DWORD *)this[1227]; if ( a2 ) LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, v4); else LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v4); } return v2; } //----- (004A5CD0) -------------------------------------------------------- char __thiscall sub_4A5CD0(_DWORD *this, char a2) { int v2; // eax _DWORD *v4; // [esp-4h] [ebp-4h] v2 = this[1228]; if ( v2 ) { v4 = (_DWORD *)this[1228]; if ( a2 ) LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, v4); else LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v4); } return v2; } //----- (004A5D00) -------------------------------------------------------- char __thiscall sub_4A5D00(_DWORD *this) { int v1; // eax v1 = this[1236]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[1236]); return v1; } //----- (004A5D20) -------------------------------------------------------- char __thiscall sub_4A5D20(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; if ( this[1237] ) { (*(void (**)(void))(*this[1237] + 268))(); result = sub_8F82A0(&unk_BA6B10, v1[1237]); } return result; } //----- (004A5D50) -------------------------------------------------------- void __thiscall sub_4A5D50(_DWORD **this) { _DWORD **v1; // esi int v2; // eax v1 = this; if ( this[1238] ) { if ( (*(unsigned __int8 (**)(void))(*this[1238] + 260))() ) { sub_8F86A0(&unk_BA6B10, v1[1238]); } else { sub_8F82A0(&unk_BA6B10, v1[1238]); v2 = sub_4ED190(v1[1238]); if ( v2 != -1 ) sub_4BF630(v1, v2, 27); *((_BYTE *)v1[1238] + 344) = 1; } } } //----- (004A5DC0) -------------------------------------------------------- char __thiscall sub_4A5DC0(_DWORD *this, char a2) { int v2; // eax _DWORD *v4; // [esp-4h] [ebp-4h] v2 = this[240]; if ( v2 ) { v4 = (_DWORD *)this[240]; if ( a2 ) LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, v4); else LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v4); } return v2; } //----- (004A5DF0) -------------------------------------------------------- char __thiscall sub_4A5DF0(_DWORD *this, char a2) { int v2; // eax _DWORD *v4; // [esp-4h] [ebp-4h] v2 = this[239]; if ( v2 ) { v4 = (_DWORD *)this[239]; if ( a2 ) LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, v4); else LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v4); } return v2; } //----- (004A5E20) -------------------------------------------------------- void __thiscall sub_4A5E20(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1273] ) { v3 = this[1273]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1273]); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1273]); } } } //----- (004A5E90) -------------------------------------------------------- char __thiscall sub_4A5E90(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char result; // al v1 = this; v2 = this[179]; if ( v2 ) { sub_533AD0(v2); result = sub_534910((_DWORD *)v1[179]); } return result; } //----- (004A5EB0) -------------------------------------------------------- char __thiscall sub_4A5EB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_4B75F0(this); return sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[1284]); } //----- (004A5ED0) -------------------------------------------------------- void __thiscall sub_4A5ED0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1292] ) { v3 = this[1292]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1292]); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1292]); } } } //----- (004A5F40) -------------------------------------------------------- void __thiscall sub_4A5F40(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1293] ) { v3 = this[1293]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1293]); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1293]); } } } //----- (004A5FB0) -------------------------------------------------------- void __thiscall sub_4A5FB0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1295] ) { v3 = this[1295]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1295]); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1295]); } } } //----- (004A6020) -------------------------------------------------------- void __thiscall sub_4A6020(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1294] ) { v3 = this[1294]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1294]); sub_448E70((_DWORD **)v2[1294]); } } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1294]); } } } //----- (004A6090) -------------------------------------------------------- LRESULT __thiscall sub_4A6090(_DWORD **this, const char *a2, int a3) { LRESULT result; // eax result = (LRESULT)a2; if ( a2 ) result = sub_60B310(this[176], a2, a3); return result; } //----- (004A60B0) -------------------------------------------------------- void __thiscall sub_4A60B0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[1296] ) { v3 = this[1296]; if ( a2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1296]); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1296]); } } } //----- (004A6140) -------------------------------------------------------- char __thiscall sub_4A6140(int **this, int a2, signed int a3, int a4) { char result; // al int **v5; // esi int v6; // edi int v7; // eax int v8; // ecx int v9; // edi int v10; // ecx int v11; // edi float *v12; // eax float v13; // ST0C_4 float v14; // ST10_4 result = a2; v5 = this; if ( a2 ) { sub_547C20(this[1296], a2); sub_53E140((_DWORD **)v5[1296]); v6 = (*(int (**)(void))(*v5[1296] + 144))(); v7 = (*(int (**)(void))(*v5[1296] + 148))(); v8 = xRight - v6; v9 = a4; v10 = v8 - a3; if ( v10 < 0 ) a3 += v10; if ( dword_AC2F78 - v7 - a4 < 0 ) v9 = dword_AC2F78 - v7; v11 = v9 - (*(int (**)(void))(*v5[163] + 148))(); v12 = (float *)v5[1296]; v13 = (double)a3; v12[22] = v13; v14 = (double)v11; v12[23] = v14; v12[24] = 0.0; result = (*(int (**)(void))(*v5[1296] + 264))(); if ( v5[1296] ) { result = (*(int (**)(void))(*v5[1296] + 260))(); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v5[1296]); } } return result; } //----- (004A6240) -------------------------------------------------------- char __thiscall sub_4A6240(_DWORD **this) { char result; // al if ( this[151] ) result = (*(int (**)(void))(*this[151] + 260))(); else result = 0; return result; } //----- (004A6260) -------------------------------------------------------- int __thiscall sub_4A6260(_DWORD ***this, int a2, int a3) { dword_AAEBA8 = a2; dword_AAEBAC = a3; dword_AB680A = a2; dword_AB680E = a3; return sub_5CC6F0(this[230], a2, a3); } // AB680A: using guessed type int dword_AB680A; // AB680E: using guessed type int dword_AB680E; //----- (004A6290) -------------------------------------------------------- float *__thiscall sub_4A6290(_DWORD *this) { float *result; // eax float *v2; // eax result = (float *)this[178]; if ( result ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)this[178]); result = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v2 = (float *)operator new(0xB4u); if ( v2 ) result = sub_4546A0(v2); else result = 0; dword_ACCFE0 = (int)result; } *((_BYTE *)result + 5) = 1; } return result; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (004A6310) -------------------------------------------------------- void __thiscall sub_4A6310(_DWORD **this) { _DWORD *v1; // esi _DWORD *v2; // esi v1 = this; if ( this[178] ) { if ( (*(unsigned __int8 (**)(void))(*this[178] + 260))() ) { v2 = (_DWORD *)v1[178]; if ( v2 ) sub_8F86A0(&unk_BA6B10, v2); } else { sub_4A6290(v1); } } } //----- (004A6350) -------------------------------------------------------- void __thiscall sub_4A6350(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // esi v1 = this; if ( this[180] ) { if ( (*(unsigned __int8 (**)(void))(*this[180] + 260))() ) { sub_8F86A0(&unk_BA6B10, v1[180]); } else { v2 = v1[180]; if ( v2 ) sub_8F82A0(&unk_BA6B10, v2); } } } //----- (004A63A0) -------------------------------------------------------- void __thiscall sub_4A63A0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[182] ) { if ( (*(unsigned __int8 (**)(void))(*this[182] + 260))() ) { sub_8F86A0(&unk_BA6B10, v1[182]); } else { sub_5B21E0(v1[182]); sub_8F82A0(&unk_BA6B10, v1[182]); *((_BYTE *)sub_4388B0() + 7) = 1; } } } //----- (004A6400) -------------------------------------------------------- void __thiscall sub_4A6400(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // esi char *v3; // ecx v1 = this; if ( this[194] ) { if ( (*(unsigned __int8 (**)(void))(*this[194] + 260))() ) { v2 = v1[194]; if ( v2 ) sub_8F86A0(&unk_BA6B10, v2); } else { v3 = (char *)v1[194]; if ( v3 ) { sub_62AB80(v3, 1); sub_8F82A0(&unk_BA6B10, v1[194]); } } } } //----- (004A6460) -------------------------------------------------------- void __thiscall sub_4A6460(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[1220] ) { if ( (*(unsigned __int8 (**)(void))(*this[1220] + 260))() ) { if ( v1[1220] ) { if ( (*(unsigned __int8 (**)(void))(*v1[1220] + 260))() == 1 ) sub_8F86A0(&unk_BA6B10, v1[1220]); } } else { sub_588490(v1[1220]); if ( v1[1220] && !(*(unsigned __int8 (**)(void))(*v1[1220] + 260))() ) sub_8F82A0(&unk_BA6B10, v1[1220]); } } } //----- (004A64F0) -------------------------------------------------------- char __thiscall sub_4A64F0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // ecx int v4; // ecx int v5; // eax float v6; // edx float v7; // ecx int v8; // ST14_4 __int16 v10; // [esp+10h] [ebp-24h] __int64 v11; // [esp+14h] [ebp-20h] unsigned __int16 v12; // [esp+1Eh] [ebp-16h] __int16 v13; // [esp+20h] [ebp-14h] int v14; // [esp+22h] [ebp-12h] int v15; // [esp+26h] [ebp-Eh] int v16; // [esp+2Ah] [ebp-Ah] v1 = this; v2 = this[275]; if ( v2 ) { v3 = *(_DWORD **)(v2 + 3592); if ( v3 ) { sub_5D5470(v3); v4 = v1[584]; v10 = 12295; sub_905F90(v4, &v10, 2u); Sleep(1u); v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v6 = *(float *)(v5 + 4); v7 = *(float *)v5; v8 = *(_DWORD *)(v5 + 8); HIDWORD(v11) = v12 | 0xC00; v13 = *(_WORD *)(v1[275] + 3596); v14 = 1; v15 = (signed __int64)v7; v11 = (signed __int64)v6; v16 = v11; LOBYTE(v2) = sub_906000(v1[584], &v13, 0xEu); } } return v2; } //----- (004A65F0) -------------------------------------------------------- LONG sub_4A65F0() { _BYTE *v0; // ecx LONG result; // eax int (__thiscall ***v2)(_DWORD, signed int); // esi LONG v3; // [esp+8h] [ebp-10h] int v4; // [esp+14h] [ebp-4h] v0 = (_BYTE *)*sub_4A3B80(&v3); v4 = 0; sub_6C4F90(v0); result = v3; v4 = -1; if ( v3 ) { v2 = (int (__thiscall ***)(_DWORD, signed int))v3; result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v2 ) result = (**v2)(v2, 1); } } return result; } //----- (004A6670) -------------------------------------------------------- void __thiscall sub_4A6670(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // ecx __int16 v4; // di int v5; // eax v1 = this; if ( this[196] ) { v2 = this[275]; if ( v2 ) { v3 = *(_DWORD **)(v2 + 3592); if ( v3 ) { v4 = *(_WORD *)(v2 + 3596); v5 = sub_5D5470(v3); sub_4B10D0((_DWORD **)v1[196], *(_QWORD *)(v5 + 38)); *(_WORD *)(v1[196] + 393) = v4; sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[196]); } } } } //----- (004A66E0) -------------------------------------------------------- void __thiscall sub_4A66E0(_DWORD *this) { int v1; // eax int v2; // ecx void (__thiscall ***v3)(_DWORD, signed int); // esi int v4; // [esp+8h] [ebp-14h] __int16 v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] if ( this[197] ) { v1 = this[275]; if ( v1 ) { if ( *(_DWORD *)(v1 + 3592) ) { v5 = *(_WORD *)(v1 + 3596); v2 = *sub_4A3B80(&v4); v6 = 0; sub_6C4EA0(&v5); v6 = -1; if ( v4 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } } } } } //----- (004A6790) -------------------------------------------------------- void __thiscall sub_4A6790(_DWORD **this) { if ( !dword_ACD0B0 ) sub_582BA0(this[181]); } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A67B0) -------------------------------------------------------- char __thiscall sub_4A67B0(_DWORD *this) { int v1; // eax v1 = this[152]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[152]); return v1; } //----- (004A67D0) -------------------------------------------------------- void __thiscall sub_4A67D0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // esi v1 = this; if ( this[147] ) { if ( (*(unsigned __int8 (**)(void))(*this[147] + 260))() ) { sub_59F6C0((int)v1[147]); } else { v2 = v1[147]; if ( v2 ) sub_8F82A0(&unk_BA6B10, v2); } } } //----- (004A6820) -------------------------------------------------------- char __thiscall sub_4A6820(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550(v1, 2); } else { sub_443390(dword_AD8EBC, 1); sub_4B7550(v1, 1); } result = sub_65B9D0(dword_AD8EBC, 100000); if ( result ) result = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); return result; } //----- (004A6880) -------------------------------------------------------- void __thiscall sub_4A6880(_BYTE *this) { _BYTE *v1; // esi v1 = this; if ( !dword_ACD0B0 && sub_4A10B0() ) { v1[41] = 1; v1[36] = 1; } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A68A0) -------------------------------------------------------- void __thiscall sub_4A68A0(_BYTE *this) { _BYTE *v1; // esi v1 = this; if ( !dword_ACD0B0 && sub_4A10B0() ) { v1[41] = 1; v1[37] = 1; } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A68C0) -------------------------------------------------------- void __thiscall sub_4A68C0(_BYTE *this) { _BYTE *v1; // esi v1 = this; if ( !dword_ACD0B0 && sub_4A10B0() ) { v1[41] = 1; v1[38] = 1; } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A68E0) -------------------------------------------------------- void __thiscall sub_4A68E0(_BYTE *this) { _BYTE *v1; // esi v1 = this; if ( !dword_ACD0B0 && sub_4A10B0() ) { v1[41] = 1; v1[39] = 1; } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A6900) -------------------------------------------------------- void __thiscall sub_4A6900(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax v1 = this; if ( !dword_ACD0B0 && sub_4A10B0() && (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))() > 0 && !sub_64D0D0((_DWORD *)dword_AD8EBC + 21) && sub_64D0C0((_DWORD *)dword_AD8EBC + 21) <= 0 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() && !sub_65C360(dword_AD8EBC) && !sub_65C450(dword_AD8EBC) && sub_65BA20(dword_AD8EBC) && !v1[628] ) { sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 356))() ) { sub_4B7720(v1); } else { (*(void (__cdecl **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v2 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v2); } } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A6920) -------------------------------------------------------- char sub_4A6920() { int v0; // eax char *v1; // ecx int v2; // eax v0 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 224))(); if ( !v0 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 228))(1); v1 = dword_AD8EBC; v2 = *((_DWORD *)dword_AD8EBC + 731); if ( v2 && !*((_DWORD *)dword_AD8EBC + 730) ) { (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v2 + 228))(*((_DWORD *)dword_AD8EBC + 731), 1); v1 = dword_AD8EBC; } LOBYTE(v0) = sub_65B9D0(v1, 100000); if ( !(_BYTE)v0 ) LOBYTE(v0) = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 368))(); } return v0; } //----- (004A69A0) -------------------------------------------------------- char sub_4A69A0() { char *v0; // ecx int v1; // eax char result; // al (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 228))(0); v0 = dword_AD8EBC; v1 = *((_DWORD *)dword_AD8EBC + 731); if ( v1 && !*((_DWORD *)dword_AD8EBC + 730) ) { (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1 + 228))(*((_DWORD *)dword_AD8EBC + 731), 0); v0 = dword_AD8EBC; } result = sub_65B9D0(v0, 100000); if ( !result ) result = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 368))(); return result; } //----- (004A6A00) -------------------------------------------------------- void __thiscall sub_4A6A00(void *this) { void *v1; // esi float *v2; // ecx int v3; // esi v1 = this; if ( !dword_ACD0B0 ) { if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0EA0((_DWORD **)&dword_ACE484); v2 = (float *)*((_DWORD *)v1 + 138); if ( v2 ) { v3 = *((_DWORD *)v1 + 138); if ( sub_5B8180(v2) ) sub_4B84A0(*(_DWORD **)(v3 + 296)); } } } // ACD0B0: using guessed type int dword_ACD0B0; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (004A6A60) -------------------------------------------------------- void __thiscall sub_4A6A60(void *this) { void *v1; // esi float *v2; // ecx int v3; // esi v1 = this; if ( !dword_ACD0B0 ) { if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0E70((_DWORD **)&dword_ACE484); v2 = (float *)*((_DWORD *)v1 + 138); if ( v2 ) { v3 = *((_DWORD *)v1 + 138); if ( sub_5B8230(v2) ) sub_4B84E0(*(_DWORD **)(v3 + 296)); } } } // ACD0B0: using guessed type int dword_ACD0B0; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (004A6AC0) -------------------------------------------------------- char __thiscall sub_4A6AC0(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0F10((_DWORD **)&dword_ACE484); result = (*(int (**)(void))(*v1[246] + 260))(); if ( !result ) { result = (*(int (**)(void))(*v1[247] + 260))(); if ( !result ) { result = (*(int (**)(void))(*v1[248] + 260))(); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v1[246]); } } return result; } // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (004A6B50) -------------------------------------------------------- char __thiscall sub_4A6B50(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0F10((_DWORD **)&dword_ACE484); return sub_8F82A0(&unk_BA6B10, v1[253]); } // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (004A6BA0) -------------------------------------------------------- float *__thiscall sub_4A6BA0(_DWORD **this) { _DWORD **v1; // esi float *result; // eax float *v3; // eax _DWORD **v4; // ecx v1 = this; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0EF0((_DWORD **)&dword_ACE484); sub_8F82A0(&unk_BA6B10, v1[179]); result = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) result = sub_4546A0(v3); else result = 0; dword_ACCFE0 = (int)result; } *((_BYTE *)result + 6) = 1; v4 = (_DWORD **)v1[144]; if ( v4 ) result = (float *)sub_559AC0(v4); return result; } // ACCFE0: using guessed type int dword_ACCFE0; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (004A6C70) -------------------------------------------------------- char __thiscall sub_4A6C70(_DWORD *this, char a2) { _DWORD *v2; // esi char result; // al v2 = this; if ( a2 ) sub_4B75F0(this); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[234]); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6CB0) -------------------------------------------------------- void __thiscall sub_4A6CB0(_DWORD **this) { _DWORD **v1; // esi char v2; // al v1 = this; if ( !(*(unsigned __int8 (**)(void))(*this[179] + 260))() ) sub_4A6BA0(v1); if ( !(*(unsigned __int8 (**)(void))(*v1[236] + 260))() ) sub_8F82A0(&unk_BA6B10, v1[236]); v2 = sub_6807E0(byte_AD9238); sub_578C10(v1[236], v2); dword_ACEC24 = 1; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6D20) -------------------------------------------------------- char __thiscall sub_4A6D20(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; sub_4B75F0(this); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[236]); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6D50) -------------------------------------------------------- char __thiscall sub_4A6D50(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; if ( !(*(unsigned __int8 (**)(void))(*this[179] + 260))() ) sub_4A6BA0(v1); result = (*(int (**)(void))(*v1[237] + 260))(); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v1[237]); dword_ACEC24 = 1; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6DA0) -------------------------------------------------------- char __thiscall sub_4A6DA0(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; sub_4B75F0(this); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[237]); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6DD0) -------------------------------------------------------- char __thiscall sub_4A6DD0(_DWORD **this, unsigned __int8 a2) { _DWORD **v2; // esi char result; // al v2 = this; sub_5B9340(this[241], a2); if ( !(*(unsigned __int8 (**)(void))(*v2[179] + 260))() ) sub_4A6BA0(v2); result = (*(int (**)(void))(*v2[241] + 260))(); if ( !result ) { result = sub_8F82A0(&unk_BA6B10, v2[241]); dword_ACEC24 = 2; } return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A6E40) -------------------------------------------------------- char __thiscall sub_4A6E40(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; if ( !this[582] ) sub_4B75F0(this); sub_6F3D10(&off_AB7F2C, 12, 77, 0, 0); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[241]); dword_ACEC24 = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACEC24: using guessed type int dword_ACEC24; //----- (004A6E80) -------------------------------------------------------- char __thiscall sub_4A6E80(_DWORD **this, __int16 a2) { char *v2; // eax char *v3; // edi int v4; // ebx int v5; // esi int v6; // esi int v7; // ebx int v8; // edx int v9; // esi int v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax char result; // al _DWORD **v14; // [esp+Ch] [ebp-4h] v14 = this; v2 = sub_664AB0(dword_AD8C90, a2); v3 = v2; v4 = 0; v5 = 0; if ( v2 ) { v6 = dword_ACDA48; v7 = *((unsigned __int16 *)v2 + 471); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) ) { v8 = *(_DWORD *)(v6 + 196); v4 = *(_DWORD *)(v8 + 4 * v7) ? *(_DWORD *)(v8 + 4 * v7) : 0; } else { v4 = 0; } } else { v4 = 0; } v9 = dword_ACDA74; v10 = *((unsigned __int16 *)v3 + 471); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v10) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = (_DWORD *)(*(_DWORD *)(v9 + 196) + 4 * v10); v5 = *v11 ? *v11 : 0; } else { v5 = 0; } } else { v5 = 0; } if ( v4 ) { if ( *(_DWORD *)(v4 + 99) == 14 ) { v12 = (_DWORD *)sub_6D3890(); sub_8F82A0(&unk_BA6B10, v12); } else if ( !(*(unsigned __int8 (**)(void))(*v14[179] + 260))() ) { sub_4A6BA0(v14); } } } result = (*(int (**)(void))(*v14[258] + 260))(); if ( !result ) { if ( v5 ) sub_5763B0(v14[258], *(_DWORD *)(v5 + 170)); result = sub_8F82A0(&unk_BA6B10, v14[258]); if ( v4 ) { if ( *(_DWORD *)(v4 + 99) != 14 ) dword_ACEC24 = 1; } } return result; } // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; // ACEC24: using guessed type int dword_ACEC24; //----- (004A6FD0) -------------------------------------------------------- int __thiscall sub_4A6FD0(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; sub_4B75F0(this); sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[258]); sub_575440((_DWORD *)v1[258], 0, 0); result = sub_575440((_DWORD *)v1[258], 1, 0); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7020) -------------------------------------------------------- void __thiscall sub_4A7020(_DWORD **this) { _DWORD *v1; // esi _DWORD *v2; // esi v1 = this; if ( !dword_ACD0B0 && this[178] ) { if ( (*(unsigned __int8 (**)(void))(*this[178] + 260))() ) { v2 = (_DWORD *)v1[178]; if ( v2 ) sub_8F86A0(&unk_BA6B10, v2); } else { sub_4A6290(v1); } } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A7080) -------------------------------------------------------- void __userpurge sub_4A7080(int a1@, int a2@, int a3@, int a4, void *a5) { int v5; // esi char *v6; // ecx float *v7; // eax float *v8; // eax v5 = a1; v6 = *(char **)(a1 + 776); if ( v6 ) { sub_62AB80(v6, (int)a5); sub_623280(*(_DWORD *)(v5 + 776), a2, a3, a4); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 776)); v7 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v8 = (float *)operator new(0xB4u); if ( v8 ) v7 = sub_4546A0(v8); else v7 = 0; dword_ACCFE0 = (int)v7; } if ( *((_BYTE *)v7 + 4) ) { sub_62AB80(*(char **)(v5 + 776), 2); *((_BYTE *)sub_4388B0() + 17) = 1; } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (004A7150) -------------------------------------------------------- void __thiscall sub_4A7150(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // ecx int v3; // eax v1 = this; if ( this[227] ) { v2 = (_BYTE *)*((_DWORD *)dword_AD8EBC + 1026); if ( v2 ) { if ( v2[2680] ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 84))(); sub_510C30((_DWORD **)v1[227], v3); } } sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[227]); } } //----- (004A71A0) -------------------------------------------------------- void __thiscall sub_4A71A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx _DWORD *v3; // esi v1 = this; v2 = (_DWORD *)this[228]; if ( v2 ) { if ( sub_8F3540(v2) ) { v3 = (_DWORD *)v1[228]; if ( v3 ) sub_8F86A0(&unk_BA6B10, v3); } else { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[228] + 236))(xRight, dword_AC2F78, 0.5, 0.5); if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v1[228] + 244))() ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[228] + 240))(1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[228]); } } } //----- (004A7240) -------------------------------------------------------- char __thiscall sub_4A7240(void *this) { void *v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 4) ) { v2 = (float *)*((_DWORD *)v1 + 316); if ( v2 ) LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 316)); } return (char)v2; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (004A72D0) -------------------------------------------------------- void __thiscall sub_4A72D0(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // ecx int v3; // eax v1 = this; if ( this[223] ) { v2 = (_BYTE *)*((_DWORD *)dword_AD8EBC + 1026); if ( v2 ) { if ( v2[2680] ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 84))(); sub_52CE20((_DWORD **)v1[223], v3); } } sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[223]); } } //----- (004A7320) -------------------------------------------------------- char __thiscall sub_4A7320(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[234]); dword_ACEC24 = 0; if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0E50((_DWORD **)&dword_ACE484); sub_54D7C0(v1[139]); return sub_8F82A0(&unk_BA6B10, v1[139]); } // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ACEC24: using guessed type int dword_ACEC24; //----- (004A7390) -------------------------------------------------------- char __thiscall sub_4A7390(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[234]); dword_ACEC24 = 0; sub_43F490(v1[141]); return sub_8F82A0(&unk_BA6B10, v1[141]); } // ACEC24: using guessed type int dword_ACEC24; //----- (004A73D0) -------------------------------------------------------- char *__thiscall sub_4A73D0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax char v4; // [esp+4h] [ebp-14h] v1 = this; v2 = sub_4B0FA0((int)&dword_B9DC70, &v4); sub_4C1540(v1, *v2, v2[1], v2[2], v2[3], v2[4]); return sub_6C1190(&dword_B9DC70); } // B9DC70: using guessed type int dword_B9DC70; //----- (004A7420) -------------------------------------------------------- char *__thiscall sub_4A7420(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax char v4; // [esp+4h] [ebp-14h] v1 = this; v2 = sub_4B0FA0((int)&dword_B9DC70, &v4); sub_4B7E90(v1, *v2, v2[1], v2[2], v2[3], v2[4]); return sub_6C1190(&dword_B9DC70); } // B9DC70: using guessed type int dword_B9DC70; //----- (004A7470) -------------------------------------------------------- char __thiscall sub_4A7470(_DWORD *this) { _DWORD *v1; // edi LONG v2; // eax int v3; // esi v1 = this; LOBYTE(v2) = sub_4B8220(this); v3 = v1[242]; if ( v3 ) { v2 = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !v2 && v3 ) LOBYTE(v2) = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[242] = 0; } return v2; } //----- (004A74B0) -------------------------------------------------------- char __thiscall sub_4A74B0(_DWORD *this) { _DWORD *v1; // edi LONG v2; // eax int v3; // esi v1 = this; LOBYTE(v2) = sub_4B81F0(this); v3 = v1[242]; if ( v3 ) { v2 = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !v2 && v3 ) LOBYTE(v2) = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[242] = 0; } return v2; } //----- (004A74F0) -------------------------------------------------------- void __thiscall sub_4A74F0(_DWORD *this, void *a2) { if ( a2 ) { sub_4C1BF0( this, *(_DWORD *)a2, *((_DWORD *)a2 + 1), *((_DWORD *)a2 + 2), *((_DWORD *)a2 + 3), *((_DWORD *)a2 + 4), 1); operator delete(a2); } } //----- (004A7540) -------------------------------------------------------- void __thiscall sub_4A7540(_DWORD *this, void *a2) { if ( a2 ) { sub_4C1BF0( this, *(_DWORD *)a2, *((_DWORD *)a2 + 1), *((_DWORD *)a2 + 2), *((_DWORD *)a2 + 3), *((_DWORD *)a2 + 4), 0); operator delete(a2); } } //----- (004A7590) -------------------------------------------------------- void __thiscall sub_4A7590(_DWORD *this, void *a2) { if ( a2 ) { sub_4C1CB0(this, *(_DWORD *)a2, *((_DWORD *)a2 + 1), *((_DWORD *)a2 + 2), *((_DWORD *)a2 + 3), *((_DWORD *)a2 + 4)); operator delete(a2); } } //----- (004A75D0) -------------------------------------------------------- char __thiscall sub_4A75D0(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[234]); dword_ACEC24 = 0; sub_432CB0((_BYTE **)v1[155]); sub_432280((int)v1[155]); sub_4322A0((_DWORD **)v1[155], 1); return sub_8F82A0(&unk_BA6B10, v1[155]); } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7630) -------------------------------------------------------- char __thiscall sub_4A7630(_DWORD **this, char a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_8F86A0(&unk_BA6B10, this[155]); dword_ACEC24 = 0; if ( a2 ) result = sub_4B75F0(v2); return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7670) -------------------------------------------------------- void __thiscall sub_4A7670(_DWORD **this, int a2) { _DWORD *v2; // esi v2 = this; if ( this[243] ) sub_8F86A0(&unk_BA6B10, this[243]); if ( a2 ) sub_4C1A70(v2, *(_WORD *)(a2 + 548)); } //----- (004A76B0) -------------------------------------------------------- char __thiscall sub_4A76B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi v1 = this; v2 = (_DWORD *)this[242]; if ( v2 ) { sub_8F86A0(&unk_BA6B10, v2); LOBYTE(v2) = sub_4B81F0(v1); v3 = v1[242]; if ( v3 ) { v2 = (_DWORD *)InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !v2 && v3 ) LOBYTE(v2) = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[242] = 0; } } return (char)v2; } //----- (004A7710) -------------------------------------------------------- void __thiscall sub_4A7710(float *this) { if ( !dword_ACD0B0 ) sub_4A1650(this, *((_BYTE **)dword_AD8EBC + 1026)); } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A7730) -------------------------------------------------------- char sub_4A7730() { if ( !*((_DWORD *)dword_AD8EBC + 1026) ) return 0; sub_6F3D10(&off_AB7F2C, 9, 8, 0, 0); sub_67D370(dword_AD8EBC, 0); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A7770) -------------------------------------------------------- char __thiscall sub_4A7770(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx _BYTE *v4; // edi v2 = a2; v3 = this; if ( !a2 || *(_WORD *)(a2 + 548) == -1 || !sub_67CC40(dword_AD8EBC, (_DWORD *)a2) ) return 0; v4 = *(_BYTE **)(a2 + 2924); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 660))(a2) ) { if ( !sub_744000((_BYTE *)a2) ) v2 = sub_7441C0((_DWORD *)a2, 0); } else if ( v4 && sub_744000(v4) ) { v2 = (int)v4; } if ( !v2 ) return 0; sub_67D370(dword_AD8EBC, (_BYTE *)v2); dword_AD8EBC[4116] = 1; dword_AD8EBC[4144] = 0; sub_4B78F0(v3, *(_WORD *)(v2 + 548)); return 1; } //----- (004A7840) -------------------------------------------------------- char __thiscall sub_4A7840(_DWORD **this, char *a2) { _DWORD **v2; // esi char v4[4]; // [esp+4h] [ebp-18h] int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] _DWORD *v7; // [esp+10h] [ebp-Ch] int v8; // [esp+14h] [ebp-8h] v2 = this; v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, a2, 0x14u); sub_4BABA0(v2, *(_DWORD **)v4, v5, v6, v7, v8); return sub_6068C0(v2[176], 1); } //----- (004A78C0) -------------------------------------------------------- char __usercall sub_4A78C0@(int a1@, void (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx char v4; // bl int v5; // ecx LONG v6; // eax int (__thiscall ***v7)(_DWORD, signed int); // esi int v9; // [esp+10h] [ebp-14h] __int16 v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v9); v11 = 0; v4 = sub_6C4EE0(v3); v11 = -1; if ( v9 ) { a2 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( a2 ) (**a2)(a2, 1); } } if ( v4 ) { v5 = *sub_4A3B80(&v9); v11 = 1; *(_BYTE *)(v5 + 5236) = 1; sub_6C5DA0(v5, (int)a2); LOBYTE(v6) = v9; v11 = -1; if ( v9 ) { v7 = (int (__thiscall ***)(_DWORD, signed int))v9; v6 = InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v6 ) { if ( v7 ) LOBYTE(v6) = (**v7)(v7, 1); } } } else { if ( *(_DWORD *)(v2 + 1116) ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 1116)); *(_DWORD *)(v2 + 1116) = 0; } v10 = -29672; LOBYTE(v6) = sub_906000(*(_DWORD *)(v2 + 2336), &v10, 2u); byte_ADB650 = 0; } return v6; } // ADB650: using guessed type char byte_ADB650; //----- (004A79F0) -------------------------------------------------------- char __thiscall sub_4A79F0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-4h] v2 = this; v3 = this[584]; v5 = -29678; sub_905F90(v3, &v5, 2u); return sub_906000(v2[584], &a2, 2u); } //----- (004A7A40) -------------------------------------------------------- char __userpurge sub_4A7A40@(int a1@, int a2@, int a3@, int a4, int a5, char a6, char a7) { char result; // al int v8; // esi int v9; // ecx int v10; // ST08_4 int v11; // ST04_4 int *v12; // ecx double v13; // ST18_8 int v14; // ebx int v15; // edi double v16; // ST10_8 double v17; // st7 unsigned int v18; // [esp+24h] [ebp+10h] result = a5; v8 = a1; if ( a5 ) { v9 = *(_DWORD *)(a1 + 1080); v10 = a2; *(_WORD *)(v9 + 510) = *(_WORD *)(a5 + 4); v11 = a3; *(_BYTE *)(v9 + 508) = a6; *(_BYTE *)(v9 + 509) = a7; sub_6E89F0((char *)v9); v12 = *(int **)(v8 + 1080); v13 = (double)pt.y; v14 = *v12; v15 = *(_DWORD *)(v8 + 1080); v16 = (double)pt.x; v17 = v13 - (double)(unsigned int)(*(int (__stdcall **)(int, int))(*v12 + 148))(v11, v10) * 0.5; v18 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v15 + 144))(v15, (signed int)v17); (*(void (__thiscall **)(_DWORD, signed int))(v14 + 308))( *(_DWORD *)(v8 + 1080), (signed int)(v16 - (double)v18 * 0.5)); result = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v8 + 1080)); } return result; } // 4A7A40: could not find valid save-restore pair for ebx // 4A7A40: could not find valid save-restore pair for edi //----- (004A7B20) -------------------------------------------------------- char __thiscall sub_4A7B20(_DWORD **this, int a2) { char result; // al _DWORD **v3; // esi result = a2; v3 = this; if ( a2 ) { if ( a2 == 1 ) { result = sub_8F3540(this[279]); if ( result == 1 ) { if ( v3[279] ) (*(void (__stdcall **)(_DWORD))(*v3[279] + 256))(0); result = sub_8F82A0(&unk_BA6B10, v3[278]); *((_BYTE *)v3[278] + 344) = 1; } } } else { if ( this[279] ) (*(void (__stdcall **)(_DWORD))(*this[279] + 256))(0); result = sub_8F82A0(&unk_BA6B10, v3[278]); *((_BYTE *)v3[278] + 344) = 0; } return result; } //----- (004A7BC0) -------------------------------------------------------- char __thiscall sub_4A7BC0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // edi int v4; // ecx int v5; // esi _DWORD *v6; // ecx int v7; // esi _DWORD *v8; // ecx int v9; // esi _DWORD *v10; // ecx result = a2; v3 = this; if ( a2 ) { if ( a2 == 1 && *(_BYTE *)(this[278] + 344) == 1 ) { v7 = this[279]; if ( v7 ) { if ( !strcmp(*(const char **)(v7 + 8), "mhGuestBookWin") ) { v8 = (_DWORD *)v3[279]; *(_BYTE *)(v7 + 364) = 1; sub_6E9260(v8); } v9 = v3[279]; if ( !strcmp(*(const char **)(v9 + 8), "mhEditRoomWin") ) { v10 = (_DWORD *)v3[279]; *(_BYTE *)(v9 + 3656) = 1; sub_6E5900(v10); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[279] + 256))(1); } result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[278]); *(_BYTE *)(v3[278] + 344) = 0; } } else { v4 = this[279]; if ( v4 ) { if ( !strcmp(*(const char **)(v4 + 8), "mhGuestBookWin") ) { *(_BYTE *)(v4 + 364) = 1; sub_6E9260((_DWORD *)v4); } v5 = v3[279]; if ( !strcmp(*(const char **)(v5 + 8), "mhEditRoomWin") ) { v6 = (_DWORD *)v3[279]; *(_BYTE *)(v5 + 3656) = 1; sub_6E5900(v6); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[279] + 256))(1); } result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[278]); } return result; } //----- (004A7D80) -------------------------------------------------------- char __thiscall sub_4A7D80(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; dword_ACEC24 = 4; if ( !(*(unsigned __int8 (**)(void))(*this[179] + 260))() ) sub_4A6BA0(v1); v2 = (_DWORD *)sub_6D3890(); sub_5F9940(v2); v3 = (_DWORD *)sub_6D3890(); return sub_8F82A0(&unk_BA6B10, v3); } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7DD0) -------------------------------------------------------- char sub_4A7DD0() { _DWORD *v0; // eax char result; // al v0 = (_DWORD *)sub_6D3890(); result = sub_8F86A0(&unk_BA6B10, v0); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7DF0) -------------------------------------------------------- char __thiscall sub_4A7DF0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax char result; // al _DWORD *v4; // eax v1 = this; v2 = sub_7154F0(); result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( result != 1 ) { dword_ACEC24 = 5; if ( !(*(unsigned __int8 (**)(void))(*v1[179] + 260))() ) sub_4A6BA0(v1); v4 = (_DWORD *)sub_7154F0(); result = sub_8F82A0(&unk_BA6B10, v4); } return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7E40) -------------------------------------------------------- char sub_4A7E40() { _DWORD *v0; // eax char result; // al v0 = (_DWORD *)sub_7154F0(); result = sub_8F86A0(&unk_BA6B10, v0); dword_ACEC24 = 0; return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004A7E60) -------------------------------------------------------- void __thiscall sub_4A7E60(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi char *v4; // ecx _DWORD *v5; // eax v3 = this; v4 = (char *)this[179]; if ( v4 ) { v5 = (_DWORD *)v3[281]; if ( v5 ) { if ( a2 ) { sub_537470(v4); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[281]); } else { sub_8F86A0(&unk_BA6B10, v5); sub_6F00F0((_BYTE *)v3[281]); if ( !a3 && dword_ADB4F8 == 2 ) { sub_6DFA50(byte_ADB468, 1); sub_6DCBA0((int)byte_ADB468, 0xFFFF); sub_6F0090(v3[281], 0xFFFF); } sub_537640((char *)v3[179]); } } } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004A7F00) -------------------------------------------------------- void __thiscall sub_4A7F00(_DWORD *this) { _DWORD *v1; // esi int v2; // eax char v3; // [esp+4h] [ebp-4h] __int16 v4; // [esp+5h] [ebp-3h] v1 = this; if ( this[281] ) { v2 = this[281]; v4 = *(_WORD *)(v2 + 346); v3 = *(_BYTE *)(v2 + 345); sub_6F3D10(&off_AB7F2C, 12, 51, &v3, 3u); sub_6DFA50(byte_ADB468, 1); if ( v1[179] ) { if ( v1[281] ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[281]); sub_6F00F0((_BYTE *)v1[281]); sub_537640((char *)v1[179]); } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A7F90) -------------------------------------------------------- char __thiscall sub_4A7F90(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char result; // al __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; sub_6F3D10(&off_AB7F2C, 6, 28, 0, 0); sub_6F3B60(&off_AB7F2C); v2 = v1[585]; result = 31; *((_BYTE *)v1 + 2344) = 1; v4 = 3103; if ( v2 ) { sub_905F90(v2, &v4, 2u); result = sub_906000(v1[585], &v5, 1u); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A7FF0) -------------------------------------------------------- char __thiscall sub_4A7FF0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 4284; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004A8040) -------------------------------------------------------- void __thiscall sub_4A8040(_DWORD *this) { _DWORD *v1; // esi v1 = (_DWORD *)this[1283]; if ( v1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v1 + 260))(this[1283]) ) sub_8F86A0(&unk_BA6B10, v1); } } //----- (004A8070) -------------------------------------------------------- signed int __thiscall sub_4A8070(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx signed int result; // eax signed int v4; // esi int v5; // edi v1 = this; switch ( sub_652070(dword_AD8EBC) ) { case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v2 = v1[142]; if ( !v2 ) goto LABEL_4; v4 = 0; v5 = v2 + 708; do { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)v5 + 260))() ) break; ++v4; v5 += 4; } while ( v4 < 7 ); result = v4; break; default: LABEL_4: result = 0; break; } return result; } //----- (004A80D0) -------------------------------------------------------- int __thiscall sub_4A80D0(char **this, int a2) { char **v2; // ebx char *v3; // ecx __int16 v4; // si __int16 v6; // [esp+4h] [ebp-68h] __int16 v7; // [esp+68h] [ebp-4h] char v8; // [esp+6Ah] [ebp-2h] v2 = this; sub_50AF40(this[252]); if ( a2 ) { qmemcpy(&v6, (const void *)(a2 + 8), 0x64u); v3 = v2[252]; v7 = *(_WORD *)(a2 + 108); v8 = *(_BYTE *)(a2 + 110); v4 = v6; if ( v6 != *((_WORD *)v3 + 202) ) { sub_50B620((_DWORD **)v3, a2); *((_WORD *)v2[252] + 202) = v4; } } return (*(int (__stdcall **)(signed int))(*(_DWORD *)v2[252] + 256))(1); } //----- (004A8140) -------------------------------------------------------- char __thiscall sub_4A8140(int this, int a2) { int v2; // esi int v3; // eax _DWORD *v4; // ecx v2 = this; if ( byte_B9202D ) { v3 = *(_DWORD *)(this + 4884); if ( *(_DWORD *)(v3 + 4 * a2) < 0 ) { if ( *(_BYTE *)(this + 4904) ) { LOBYTE(v3) = sub_4B5D50(a2); *(_DWORD *)(*(_DWORD *)(v2 + 4884) + 4 * a2) = a2; v4 = *(_DWORD **)(v2 + 4880); if ( v4 ) { sub_589200(v4, a2); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 4880)); } } } } return v3; } // B9202D: using guessed type char byte_B9202D; //----- (004A81F0) -------------------------------------------------------- bool __thiscall sub_4A81F0(int this, int a2) { return byte_B9202D && *(_DWORD *)(*(_DWORD *)(this + 4884) + 4 * a2) < 0 && *(_BYTE *)(this + 4904); } // B9202D: using guessed type char byte_B9202D; //----- (004A8220) -------------------------------------------------------- void __thiscall sub_4A8220(_DWORD **this) { _DWORD **v1; // esi const CHAR *v2; // eax const CHAR *v3; // eax const CHAR *v4; // eax v1 = this; if ( !dword_ACD0B0 ) { if ( byte_AD8CD8 ) { if ( sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; v2 = sub_40C190(1111582330); sub_492060(v1, (int)v2); sub_4B72A0(v1, 2, 24, 0, 0); } else { v3 = sub_40C190(1396447817); sub_492060(v1, (int)v3); } } else if ( dword_ADB4F8 || *((_DWORD *)dword_AD8EBC + 731) && *((_DWORD *)dword_AD8EBC + 730) || dword_B9DCC4 || (*(unsigned __int8 (**)(void))(*this[235] + 260))() ) { v4 = sub_40C190(810388089); sub_492060(v1, (int)v4); } else if ( !*((_BYTE *)v1 + 5112) ) { sub_4B72A0(v1, 2, 122, 0, 0); } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACD0B0: using guessed type int dword_ACD0B0; // AD8CD8: using guessed type char byte_AD8CD8; // ADB4F8: using guessed type int dword_ADB4F8; // B9DCC4: using guessed type int dword_B9DCC4; //----- (004A8320) -------------------------------------------------------- void __thiscall sub_4A8320(_DWORD *this) { _DWORD *v1; // esi const CHAR *v2; // eax v1 = this; if ( dword_AD8EBC[1924] == 1 ) { if ( !dword_ACD0B0 ) sub_8EEE70(this, 163, 0, 0); } else { v2 = sub_40C190(-1432126754); sub_492060(v1, (int)v2); } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A8370) -------------------------------------------------------- void __usercall sub_4A8370(int a1@, double a2@) { int v2; // esi const CHAR *v3; // eax const CHAR *v4; // eax DWORD v5; // eax int v6; // edx int v7; // eax float *v8; // eax const CHAR *v9; // eax char v10; // al const CHAR *v11; // eax const CHAR *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax v2 = a1; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { v3 = sub_40A910(984782460); sub_492060((_DWORD *)v2, (int)v3); return; } if ( (sub_650CC0(dword_AD8EBC) || !(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 12))()) && !sub_64FA00(dword_AD8EBC, 373) ) { v4 = sub_40A910(-1616219249); sub_492060((_DWORD *)v2, (int)v4); return; } if ( !dword_ACD0B0 && dword_ACE9B0 + 2000 < timeGetTime() ) { v5 = timeGetTime(); v6 = *(_DWORD *)dword_AD8EBC; dword_ACE9B0 = v5; if ( (*(unsigned __int8 (**)(void))(v6 + 36))() ) { v7 = *(_DWORD *)(v2 + 2512); if ( v7 != 2 ) { if ( v7 == 3 ) { if ( sub_6508C0(dword_AD8EBC) ) return; v8 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v8); sub_4B79A0((_DWORD *)v2); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() && !sub_65C360(dword_AD8EBC) && !sub_65C450(dword_AD8EBC) ) { if ( sub_662E50((_DWORD *)dword_AD8EBC + 424) ) { v9 = sub_40C190(-1499365218); sub_492060((_DWORD *)v2, (int)v9); } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() && (v10 = dword_AD8EBC[1924], v10 != 4) && v10 != 5 ) { v11 = sub_40C190(-1683326303); sub_492060((_DWORD *)v2, (int)v11); } else if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 740) + 260))() || dword_AD8EBC[1924] == 5 ) { v14 = sub_40C190(-1432126754); sub_492060((_DWORD *)v2, (int)v14); } else if ( *((_DWORD *)dword_AD8EBC + 8) <= 0 ) { if ( *((_DWORD *)dword_AD8EBC + 11) <= 0 && !sub_4E37C0((_DWORD *)v2, a2) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { v13 = sub_4090F0(-1109462809); sub_492060((_DWORD *)v2, (int)v13); } else if ( dword_AD8EBC[1924] == 4 ) { sub_4B77A0((_DWORD *)v2); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); sub_443390(dword_AD8EBC, 4); sub_4A8140(v2, 48); sub_4B77D0((_DWORD *)v2); } } } else { v12 = sub_40A910(2019588285); sub_492060((_DWORD *)v2, (int)v12); } } } } } } // ACD0AC: using guessed type int dword_ACD0AC; // ACD0B0: using guessed type int dword_ACD0B0; // ACE9B0: using guessed type int dword_ACE9B0; //----- (004A87B0) -------------------------------------------------------- void __thiscall sub_4A87B0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[179] ) { if ( (*(unsigned __int8 (**)(void))(*this[179] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[179]); else sub_4A6BA0(v1); } } //----- (004A87F0) -------------------------------------------------------- void __thiscall sub_4A87F0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ecx v1 = this; if ( this[193] ) { if ( (*(unsigned __int8 (**)(void))(*this[193] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[193]); else sub_8F82A0(&unk_BA6B10, v1[193]); if ( byte_B9202D && v1[1221][116] < 0 && *((_BYTE *)v1 + 4904) ) { sub_4B5D50(116); v1[1221][116] = 116; v2 = v1[1220]; if ( v2 ) { sub_589200(v2, 116); sub_8F82A0(&unk_BA6B10, v1[1220]); } } } } // B9202D: using guessed type char byte_B9202D; //----- (004A88A0) -------------------------------------------------------- void __thiscall sub_4A88A0(_DWORD **this) { _DWORD **v1; // esi const CHAR *v2; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { v2 = sub_40A910(-588501992); sub_492060(v1, (int)v2); } else if ( !dword_ADB4F8 ) { sub_8F82A0(&unk_BA6B10, v1[276]); } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004A88F0) -------------------------------------------------------- char __thiscall sub_4A88F0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[268]; if ( v2 ) { (*(void (**)(void))(**(_DWORD **)(v2 + 344) + 468))(); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v1[268] + 260))() ) LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[268]); else LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[268]); } return v2; } //----- (004A8950) -------------------------------------------------------- void __thiscall sub_4A8950(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax _DWORD *v3; // ecx int v4; // eax char v5; // si int v6; // eax void **v7; // eax const CHAR *v8; // eax unsigned __int16 v9; // [esp+18h] [ebp-74h] unsigned __int16 v10; // [esp+1Bh] [ebp-71h] float v11; // [esp+2Dh] [ebp-5Fh] int v12; // [esp+80h] [ebp-Ch] float v13; // [esp+84h] [ebp-8h] float v14; // [esp+88h] [ebp-4h] v1 = this; v2 = this[275]; if ( v2 ) { v3 = *(_DWORD **)(v2 + 3592); if ( v3 ) { v4 = sub_5D5470(v3); if ( v4 ) { if ( dword_ADB4F8 < 1 ) { v8 = sub_40A910(-1715362306); sub_492060(v1, (int)v8); } else { qmemcpy(&v9, (const void *)(v4 + 8), 0x67u); sub_6DE220(byte_ADB468); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[277]); sub_8EEE70(v1, 224, 1, 0); *(float *)&v12 = -100.0; v5 = v10; v13 = -100.0; v14 = -100.0; if ( sub_6DE850(byte_ADB468, v10, v9, (int)&v12, v11, 0, 1) == 1 ) { v6 = sub_6E2400(&unk_ADB488, v5); v7 = (void **)sub_4B12C0(*(_DWORD *)(v6 + 64)); sub_6DFB70(byte_ADB468, v7, 3, 1); } else { sub_6DE220(byte_ADB468); sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[277]); } } } } } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004A8A70) -------------------------------------------------------- void __thiscall sub_4A8A70(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax int v4; // ecx void **v5; // eax v2 = this; if ( a2 ) { sub_6DE220(byte_ADB468); sub_8F82A0(&unk_BA6B10, v2[277]); v3 = *(_DWORD *)(a2 + 64); if ( *(_BYTE *)(v3 + 12) && (v4 = *(_DWORD *)(v3 + 8)) != 0 ) v5 = *(void ***)(v4 + 12); else v5 = *(void ***)(v3 + 4); sub_6DFB70(byte_ADB468, v5, 3, 0); sub_8EEE70(v2, 224, 1, 0); } } //----- (004A8AE0) -------------------------------------------------------- void __thiscall sub_4A8AE0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // ecx int v5; // eax const CHAR *v6; // eax char v7; // [esp+4h] [ebp-68h] __int16 v8; // [esp+7h] [ebp-65h] v2 = this; v3 = this[275]; if ( v3 ) { if ( dword_ADB4F8 < 1 ) { v6 = sub_40A910(-1715362306); sub_492060(v2, (int)v6); } else if ( a2 == 1 ) { v4 = *(_DWORD **)(v3 + 3592); if ( v4 ) { v5 = sub_5D5470(v4); if ( v5 ) { qmemcpy(&v7, (const void *)(v5 + 8), 0x67u); sub_6E1360(v8); } } } else if ( dword_ADB600 ) { sub_6E1360(*(_DWORD *)(dword_ADB600 + 4)); } } } // ADB4F8: using guessed type int dword_ADB4F8; // ADB600: using guessed type int dword_ADB600; //----- (004A8B80) -------------------------------------------------------- void __thiscall sub_4A8B80(_DWORD **this) { int v1; // esi const CHAR *v2; // eax v1 = (int)this; if ( this[184] ) { if ( (*(unsigned __int8 (**)(void))(*this[184] + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 736)); } else { if ( dword_ADB4F8 <= 0 ) v2 = sub_40C190(-84526279); else v2 = sub_40A910(-95796673); sub_568160(*(_DWORD ***)(v1 + 736), (int)v2); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 736)); sub_4A8140(v1, 48); } } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004A8C00) -------------------------------------------------------- void __thiscall sub_4A8C00(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax int v4; // ecx const CHAR *v5; // eax __int16 v6; // [esp+4h] [ebp-4h] v1 = this; if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { sub_4B7970(v1); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } if ( v1[628] == 3 && !sub_6508C0(dword_AD8EBC) ) { v2 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v2); sub_4B79A0(v1); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v3 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v3); v4 = v1[584]; if ( v4 ) { v6 = 3122; sub_905F90(v4, &v6, 2u); sub_6F3B60(&off_AB7F2C); *((_BYTE *)v1 + 2344) = 1; sub_6BEDA0(); sub_6BE700(); nullsub_10(v1); sub_497F40(v1); sub_497FE0(v1); sub_498180(v1); sub_498220(); sub_64F980(dword_AD8EBC, 0); sub_8EF040(v1, dword_ACDD70, 0); } else { v5 = sub_40C190(-875638214); sub_492060(v1, (int)v5); } } // 4970C0: using guessed type int __thiscall nullsub_10(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; // ACDD70: using guessed type int dword_ACDD70; //----- (004A8D50) -------------------------------------------------------- char __thiscall sub_4A8D50(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // edi const CHAR *v3; // eax LONG v4; // eax float *v5; // eax float *v6; // eax _BYTE *v8; // [esp+Ch] [ebp-10h] int v9; // [esp+18h] [ebp-4h] v1 = this; sub_4A3B80(&v8); v2 = v8; v9 = 0; if ( v8 && sub_6C4EE0(v8) ) { if ( *((_DWORD *)v2 + 1322) != 4 ) { v3 = sub_40A910(765422997); sub_492060(v1, (int)v3); } v9 = -1; v4 = InterlockedDecrement((volatile LONG *)v2 + 1); if ( !v4 ) LOBYTE(v4) = (**(int (__thiscall ***)(_BYTE *, signed int))v2)(v2, 1); } else { v9 = -1; if ( v2 && !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(_BYTE *, signed int))v2)(v2, 1); if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); sub_5B64C0((_BYTE *)v1[138], 0); if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { sub_4B7970(v1); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } if ( v1[628] == 3 && !sub_6508C0(dword_AD8EBC) ) { v5 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v5); sub_4B79A0(v1); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v6 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v6); sub_5C57F0((_DWORD *)v1[289], 1); sub_5C5800((_DWORD *)v1[289], v1[129]); sub_8F85E0(&unk_BA6B10, (_DWORD *)v1[289]); LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 4, 113, 0, 0); } return v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A8F40) -------------------------------------------------------- char __usercall sub_4A8F40@(int a1@, int a2@) { int v2; // esi int v3; // edi const CHAR *v4; // eax LONG v5; // eax float *v6; // eax float *v7; // eax _BYTE *v9; // [esp+Ch] [ebp-10h] int v10; // [esp+18h] [ebp-4h] v2 = a1; sub_4A3B80(&v9); v3 = (int)v9; v10 = 0; if ( v9 && sub_6C4EE0(v9) ) { if ( *(_DWORD *)(v3 + 5288) != 4 ) { v4 = sub_40A910(765422997); sub_492060((_DWORD *)v2, (int)v4); } v10 = -1; v5 = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !v5 ) LOBYTE(v5) = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } else { v10 = -1; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); sub_5B64C0(*(_BYTE **)(v2 + 552), 0); if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { sub_4B7970((_DWORD *)v2); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } if ( *(_DWORD *)(v2 + 2512) == 3 && !sub_6508C0(dword_AD8EBC) ) { v6 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v6); sub_4B79A0((_DWORD *)v2); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v7 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v7); sub_5C57F0(*(_DWORD **)(v2 + 1156), 0); sub_5C5800(*(_DWORD **)(v2 + 1156), *(_DWORD *)(v2 + 516)); sub_8F85E0(&unk_BA6B10, *(_DWORD **)(v2 + 1156)); sub_6F3D10(&off_AB7F2C, 4, 113, 0, 0); nullsub_10(v2); sub_497F40((_DWORD *)v2); sub_497FE0((_DWORD *)v2); sub_498180((_DWORD *)v2); sub_498220(); LOBYTE(v5) = sub_6BDA20(a2, v3); } return v5; } // 4970C0: using guessed type int __thiscall nullsub_10(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A9150) -------------------------------------------------------- void __usercall sub_4A9150(int a1@, void (__thiscall ***a2)(_DWORD, signed int)@) { int v2; // esi _BYTE *v3; // ecx char v4; // bl bool v5; // bl void (__thiscall ***v6)(_DWORD, signed int); // edi const CHAR *v7; // eax float *v8; // eax float *v9; // eax int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = a1; v3 = (_BYTE *)*sub_4A3B80(&v11); v12 = 0; v4 = sub_6C4EE0(v3); v12 = -1; if ( v11 ) { a2 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( a2 ) (**a2)(a2, 1); } } if ( v4 ) { v5 = *(_DWORD *)(*sub_4A3B80(&v10) + 5288) != 4; if ( v10 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } if ( v5 ) { v7 = sub_40A910(765422997); sub_492060((_DWORD *)v2, (int)v7); } } else { if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); sub_5B64C0(*(_BYTE **)(v2 + 552), 0); if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { sub_4B7970((_DWORD *)v2); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } if ( *(_DWORD *)(v2 + 2512) == 3 && !sub_6508C0(dword_AD8EBC) ) { v8 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v8); sub_4B79A0((_DWORD *)v2); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v9 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v9); sub_5C57F0(*(_DWORD **)(v2 + 1156), 2); sub_5C5800(*(_DWORD **)(v2 + 1156), *(_DWORD *)(v2 + 516)); sub_8F85E0(&unk_BA6B10, *(_DWORD **)(v2 + 1156)); sub_6F3D10(&off_AB7F2C, 4, 113, 0, 0); nullsub_10(v2); sub_497F40((_DWORD *)v2); sub_497FE0((_DWORD *)v2); sub_498180((_DWORD *)v2); sub_498220(); sub_6BDA20(v4, (int)a2); } } // 4970C0: using guessed type int __thiscall nullsub_10(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A9380) -------------------------------------------------------- char __thiscall sub_4A9380(_DWORD *this, int a2, int a3, int a4) { int v4; // edi _DWORD *v5; // esi int v7; // eax int v8; // ecx int v9; // eax _DWORD **v10; // ecx const CHAR *v11; // eax v4 = 0; v5 = this; if ( !a2 || !*(_DWORD *)(a2 + 112) ) return 0; v7 = 0; while ( 1 ) { v8 = dword_ADA534[v7]; if ( v8 ) { if ( *(_WORD *)(a2 + 8) == *(_WORD *)(v8 + 8) ) break; } if ( (unsigned int)++v7 >= 0x1E ) goto LABEL_10; } v4 = v7; LABEL_10: v9 = sub_4B1600(*(unsigned __int16 *)(a2 + 8)); if ( v9 ) { if ( sub_6BF080(*(_WORD *)(v9 + 2)) ) { v10 = (_DWORD **)v5[179]; if ( v10 ) { sub_535790(v10, v4); return 1; } } else { v11 = sub_40C190(-2047355183); sub_492060(v5, (int)v11); } } return 1; } // ADA534: using guessed type int dword_ADA534[]; //----- (004A9420) -------------------------------------------------------- void __thiscall sub_4A9420(_DWORD ***this, int a2, int a3, int a4) { unsigned int v4; // eax int v5; // edx unsigned int v6; // eax int v7; // edx _DWORD *v8; // ecx if ( a2 && *(_DWORD *)(a2 + 112) ) { v4 = 0; do { v5 = dword_ADA534[v4]; if ( v5 && *(_WORD *)(a2 + 8) == *(_WORD *)(v5 + 8) ) { sub_535800(this[179], v4); return; } ++v4; } while ( v4 < 0x1E ); v6 = 0; while ( 1 ) { v7 = dword_ADA234[v6]; if ( v7 ) { if ( *(_WORD *)(a2 + 8) == *(_WORD *)(v7 + 8) ) break; } if ( ++v6 >= 0xC0 ) return; } v8 = this[179]; if ( v8 ) sub_53D160(v8, v6, a4); } } // ADA534: using guessed type int dword_ADA534[]; //----- (004A94B0) -------------------------------------------------------- void __thiscall sub_4A94B0(_DWORD *this, int a2, int a3, int a4) { unsigned int v4; // eax _DWORD *v5; // ecx v4 = *(_DWORD *)(a3 + 8); if ( v4 < 0xC0 && dword_ADA234[v4] ) { v5 = (_DWORD *)this[179]; if ( v5 ) sub_53D160(v5, v4, a4); } } //----- (004A9520) -------------------------------------------------------- void __thiscall sub_4A9520(_DWORD *this) { _DWORD *v1; // esi _BYTE *v2; // ecx char *v3; // ecx int v4; // eax char *v5; // ecx int v6; // eax const CHAR *v7; // eax v1 = this; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))() > 0 && !sub_64D0D0((_DWORD *)dword_AD8EBC + 21) && sub_64D0C0((_DWORD *)dword_AD8EBC + 21) <= 0 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() && !sub_65C360(dword_AD8EBC) && !sub_65C450(dword_AD8EBC) && sub_65BA20(dword_AD8EBC) && !dword_ACD0B0 && (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() != 4 && *((_DWORD *)dword_AD8EBC + 8) <= 0 && *((_DWORD *)dword_AD8EBC + 11) <= 0 ) { if ( !(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 224))() ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { v2 = (_BYTE *)*((_DWORD *)dword_AD8EBC + 731); if ( v2 ) { if ( !sub_743FF0(v2) || *(_DWORD *)(v1[1243] + 436) ) goto LABEL_20; LABEL_25: if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x14 ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[318]); return; } if ( *(_DWORD *)(v1[285] + 376) <= 0 ) goto LABEL_25; } LABEL_20: (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 228))(1); v3 = dword_AD8EBC; v4 = *((_DWORD *)dword_AD8EBC + 731); if ( v4 && !*((_DWORD *)dword_AD8EBC + 730) ) { (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v4 + 228))(*((_DWORD *)dword_AD8EBC + 731), 1); v3 = dword_AD8EBC; } if ( !sub_65B9D0(v3, 100000) ) sub_4DEB90(v1, SLODWORD(flt_ACCFCC), 1); goto LABEL_25; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 228))(0); v5 = dword_AD8EBC; v6 = *((_DWORD *)dword_AD8EBC + 731); if ( v6 && !*((_DWORD *)dword_AD8EBC + 730) ) { (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v6 + 228))(*((_DWORD *)dword_AD8EBC + 731), 0); v5 = dword_AD8EBC; } if ( !sub_65B9D0(v5, 100000) ) sub_4DEB90(v1, SLODWORD(flt_ACCFCC), 1); if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x14 ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[318]); v7 = sub_40A910(-1398501891); sub_492060(v1, (int)v7); } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A9790) -------------------------------------------------------- char __thiscall sub_4A9790(_DWORD *this) { _DWORD *v1; // edi int v2; // eax int v3; // esi int v4; // eax int v5; // edx int v6; // ecx int v7; // ecx int v8; // edx int v9; // ecx unsigned int v10; // esi _BYTE *v11; // ecx v1 = this; v2 = this[1208]; if ( *(_BYTE *)(v2 + 28) ) return v2; v3 = *((_DWORD *)dword_AD8EBC + 1026); if ( !v3 || sub_652070(*((_BYTE **)dword_AD8EBC + 1026)) || sub_651680(v3) || *(_BYTE *)(v3 + 2496) ) { v4 = dword_ADB658; v5 = dword_ADB654; } else { v4 = dword_ADB658; v5 = dword_ADB654; v6 = dword_ACE9B4; if ( dword_ACE9B4 < (unsigned int)((dword_ADB658 - dword_ADB654) >> 2) && (unsigned int)dword_ACE9B4 < 5 ) goto LABEL_11; } v6 = 0; dword_ACE9B4 = 0; LABEL_11: if ( v6 < (v4 - v5) >> 2 ) v7 = *(_DWORD *)(v5 + 4 * v6); else v7 = 0; v2 = sub_6646E0(dword_AD8C90, v7); if ( v2 ) { v2 = dword_ADB658; v8 = dword_ADB654; v9 = dword_ACE9B4; v10 = (dword_ADB658 - dword_ADB654) >> 2; if ( dword_ACE9B4 < v10 ) { while ( 1 ) { v11 = (_BYTE *)(v9 < (v2 - v8) >> 2 ? *(_DWORD *)(v8 + 4 * v9) : 0); LOBYTE(v2) = sub_4A1540(v1, v11); if ( (_BYTE)v2 == 1 ) break; v9 = dword_ACE9B4 + 1; dword_ACE9B4 = v9; if ( v9 >= v10 ) return v2; v2 = dword_ADB658; v8 = dword_ADB654; } ++dword_ACE9B4; } } return v2; } // ACE9B4: using guessed type int dword_ACE9B4; // ADB654: using guessed type int dword_ADB654; // ADB658: using guessed type int dword_ADB658; //----- (004A98A0) -------------------------------------------------------- void __thiscall sub_4A98A0(void *this) { int v1; // esi const CHAR *v2; // eax char *v3; // eax volatile LONG *v4; // eax char v5; // [esp+4h] [ebp-54h] int v6; // [esp+Ch] [ebp-4Ch] char v7; // [esp+18h] [ebp-40h] int v8; // [esp+20h] [ebp-38h] char v9; // [esp+2Ch] [ebp-2Ch] int v10; // [esp+34h] [ebp-24h] char v11; // [esp+40h] [ebp-18h] int v12; // [esp+48h] [ebp-10h] v1 = (int)this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { v2 = sub_40A910(984782460); sub_492060((_DWORD *)v1, (int)v2); } else { sub_4A7770((_DWORD *)v1, (int)dword_AD8EBC); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 36))() ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 740) + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 740)); } else if ( !byte_ACF576 ) { v3 = (char *)sub_40C190(1110593666); v4 = sub_462CA0(4, v3); v6 = 164; v10 = 165; v12 = 166; v8 = 167; sub_4617F0(v4, v1, &v5, &v9, &v11, &v7); sub_4A8140(v1, 53); byte_ACF576 = 1; } } } } // ACF576: using guessed type char byte_ACF576; //----- (004A99C0) -------------------------------------------------------- char __usercall sub_4A99C0@(int a1@, int a2@) { int v2; // esi char result; // al int v4; // edi int v5; // eax int v6; // [esp+0h] [ebp-4h] v2 = a1; result = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 648))(); if ( result ) { byte_ACF576 = 0; } else { if ( (*(unsigned __int8 (__stdcall **)(int))(**(_DWORD **)(v2 + 948) + 260))(a2) ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 948)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 944) + 260))() ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 944)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 936) + 260))() ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 936)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 1032) + 260))() ) sub_4A6FD0((_DWORD *)v2); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v2); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 740)); v4 = **(_DWORD **)(v2 + 740); v5 = (*(int (__stdcall **)(int))(**(_DWORD **)(v2 + 740) + 168))(v6); (*(void (__thiscall **)(_DWORD, signed int, int))(v4 + 308))(*(_DWORD *)(v2 + 740), 30, v5); sub_58F3D0(*(_WORD ***)(v2 + 740)); result = sub_590CC0(*(_DWORD ***)(v2 + 740), 3); } return result; } // ACEC24: using guessed type int dword_ACEC24; // ACF576: using guessed type char byte_ACF576; //----- (004A9B00) -------------------------------------------------------- char __usercall sub_4A9B00@(int a1@, int a2@) { int v2; // esi char result; // al int v4; // edi int v5; // eax int v6; // [esp+0h] [ebp-4h] v2 = a1; result = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 648))(); if ( result ) { byte_ACF576 = 0; } else { if ( (*(unsigned __int8 (__stdcall **)(int))(**(_DWORD **)(v2 + 948) + 260))(a2) ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 948)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 944) + 260))() ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 944)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 936) + 260))() ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 936)); dword_ACEC24 = 0; } if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 1032) + 260))() ) sub_4A6FD0((_DWORD *)v2); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v2); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 740)); v4 = **(_DWORD **)(v2 + 740); v5 = (*(int (__stdcall **)(int))(**(_DWORD **)(v2 + 740) + 168))(v6); (*(void (__thiscall **)(_DWORD, signed int, int))(v4 + 308))(*(_DWORD *)(v2 + 740), 30, v5); sub_58F3D0(*(_WORD ***)(v2 + 740)); result = sub_590CC0(*(_DWORD ***)(v2 + 740), 1); } return result; } // ACEC24: using guessed type int dword_ACEC24; // ACF576: using guessed type char byte_ACF576; //----- (004A9C40) -------------------------------------------------------- void __thiscall sub_4A9C40(_DWORD **this) { _DWORD **v1; // esi const CHAR *v2; // eax const CHAR *v3; // eax const CHAR *v4; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*this[1276] + 260))() ) { v2 = sub_4090F0(-1348044832); sub_492060(v1, (int)v2); } else if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))() > 0 ) { if ( (unsigned __int8)sub_55F4C0((float *)v1[1276]) ) { sub_8F82A0(&unk_BA6B10, v1[1276]); } else { v4 = sub_4090F0(-469032900); sub_492060(v1, (int)v4); } } else { v3 = sub_4090F0(-16783817); sub_492060(v1, (int)v3); } } //----- (004A9CD0) -------------------------------------------------------- void __thiscall sub_4A9CD0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( !dword_ACD0B0 && this[179] ) { if ( (*(unsigned __int8 (**)(void))(*this[179] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[179]); else sub_4A6BA0(v1); } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A9D20) -------------------------------------------------------- void __thiscall sub_4A9D20(_DWORD *this) { _DWORD *v1; // esi int v2; // eax char *v3; // eax int v4; // eax char *v5; // eax v1 = this; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() != 4 && !dword_ACD0B0 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_AD8EBC + 464))(0, -1.0) ) { (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 452))(); if ( (float)-1.0 >= 0.0 ) { v2 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 448))(); if ( v2 >= 0 ) { v3 = (char *)sub_4B1560(v2); if ( v3 ) sub_4B7870(v1, *v3, (signed __int64)((float)-1.0 * 1000.0)); } } } else { v4 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 448))(); if ( v4 >= 0 ) { v5 = (char *)sub_4B1560(v4); if ( v5 ) sub_4B7810(v1, *v5); } } } } // ACD0B0: using guessed type int dword_ACD0B0; //----- (004A9E30) -------------------------------------------------------- void __thiscall sub_4A9E30(_DWORD *this, int a2) { _DWORD *v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax int v7; // ecx int v8; // ebx int v9; // eax int v10; // ebx int v11; // eax v2 = this; this[175] = a2; switch ( a2 ) { case 0: v3 = (int *)this[216]; goto LABEL_11; case 1: v3 = (int *)this[217]; sub_6F36A0(&off_AB7F2C, 29, 190, 0, 0); v4 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v4) ) sub_6F36A0(&off_AB7F2C, 29, 195, 0, 0); sub_6F36A0(&off_AB7F2C, 38, 7, 0, 0); sub_6F36A0(&off_AB7F2C, 29, 24, 0, 0); v5 = (_DWORD *)sub_6D3800(); sub_6D3380(v5); goto LABEL_11; case 2: v3 = (int *)this[219]; goto LABEL_11; case 3: v3 = (int *)this[221]; goto LABEL_11; case 4: v3 = (int *)this[222]; goto LABEL_11; case 5: v6 = (_DWORD *)sub_715490(); sub_7153F0(v6); sub_6F36A0(&off_AB7F2C, 38, 7, 0, 0); v3 = (int *)v2[225]; if ( v3 ) { sub_70F470((_DWORD *)v2[225]); LABEL_11: if ( v3 ) { v7 = v2[216]; v2[226] = v3; v8 = *v3; v9 = (*(int (**)(void))(*(_DWORD *)v7 + 164))(); (*(void (__thiscall **)(int *, int))(v8 + 172))(v3, v9); v10 = *v3; v11 = (*(int (**)(void))(*(_DWORD *)v2[216] + 168))(); (*(void (__thiscall **)(int *, int))(v10 + 176))(v3, v11); sub_8F82A0(&unk_BA6B10, v3); switch ( a2 ) { case 1: sub_4A8140((int)v2, 91); break; case 3: sub_4A8140((int)v2, 109); break; case 4: sub_4A8140((int)v2, 85); break; case 5: sub_4A8140((int)v2, 93); break; default: return; } } } break; default: return; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004A9FF0) -------------------------------------------------------- _DWORD *__thiscall sub_4A9FF0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int v4; // edi _DWORD *result; // eax _DWORD *v6; // ecx v2 = this; v3 = (_DWORD *)this[285]; if ( v3 ) sub_59A7C0(v3, a2); sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[285]); v4 = v2[285]; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[300] + 4))(v2 + 300); result[2] = v4; *result = 0; result[1] = v2[302]; v6 = (_DWORD *)v2[302]; if ( v6 ) { *v6 = result; ++v2[303]; } else { ++v2[303]; v2[301] = result; } v2[302] = result; return result; } //----- (004AA080) -------------------------------------------------------- void __thiscall sub_4AA080(_BYTE **this, char a2) { _BYTE **v2; // esi const CHAR *v3; // eax v2 = this; if ( sub_54CE90(this[139]) == 1 ) { v3 = sub_40C190(-941299944); sub_492060(v2, (int)v3); } else { sub_8F86A0(&unk_BA6B10, v2[139]); dword_ACEC24 = 0; if ( a2 ) sub_4B75F0(v2); sub_8F86A0(&unk_BA6B10, v2[140]); } } // ACEC24: using guessed type int dword_ACEC24; //----- (004AA0F0) -------------------------------------------------------- void __thiscall sub_4AA0F0(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ecx const CHAR *v4; // eax v2 = this; v3 = (_DWORD *)this[141]; if ( v3 && sub_43F000(v3) ) { v4 = sub_4090F0(493651573); sub_492060(v2, (int)v4); } else { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[141]); dword_ACEC24 = 0; if ( a2 ) sub_4B75F0(v2); } } // ACEC24: using guessed type int dword_ACEC24; //----- (004AA150) -------------------------------------------------------- _DWORD *__thiscall sub_4AA150(void *this, int a2, int a3, int a4, int a5, int a6) { int v6; // esi const char *v7; // eax volatile LONG *v8; // edi int *v9; // eax char v11; // [esp+Ch] [ebp-130h] int v12; // [esp+14h] [ebp-128h] int *v13; // [esp+1Ch] [ebp-120h] char v14; // [esp+20h] [ebp-11Ch] int v15; // [esp+120h] [ebp-1Ch] int v16; // [esp+124h] [ebp-18h] int v17; // [esp+128h] [ebp-14h] int v18; // [esp+12Ch] [ebp-10h] int v19; // [esp+130h] [ebp-Ch] char v20; // [esp+134h] [ebp-8h] v6 = (int)this; v17 = a4; v15 = a2; v16 = a3; v18 = a5; v19 = a6; v20 = 0; v7 = sub_40C190(-1803625028); sprintf(&v14, v7, &v15); v8 = sub_462CA0(2, &v14); v9 = (int *)operator new(0x14u); if ( v9 ) { v9[4] = 0; v9[3] = 0; v9[2] = 0; v9[1] = 0; *v9 = 0; } else { v9 = 0; } *v9 = a2; v9[1] = a3; v9[2] = a4; v9[3] = a5; v9[4] = a6; v13 = v9; v12 = 120; return sub_461760(v8, v6, &v11, 0); } //----- (004AA230) -------------------------------------------------------- char __thiscall sub_4AA230(_DWORD *this, char *a2) { _DWORD *v2; // esi int v4; // [esp+4h] [ebp-44h] int v5; // [esp+8h] [ebp-40h] int v6; // [esp+Ch] [ebp-3Ch] int v7; // [esp+10h] [ebp-38h] int v8; // [esp+14h] [ebp-34h] int v9; // [esp+18h] [ebp-30h] int v10; // [esp+1Ch] [ebp-2Ch] int v11; // [esp+20h] [ebp-28h] char v12[4]; // [esp+24h] [ebp-24h] int v13; // [esp+28h] [ebp-20h] int v14; // [esp+2Ch] [ebp-1Ch] int v15; // [esp+30h] [ebp-18h] int v16; // [esp+34h] [ebp-14h] int v17; // [esp+38h] [ebp-10h] int v18; // [esp+3Ch] [ebp-Ch] int v19; // [esp+40h] [ebp-8h] v2 = this; v19 = 0; v18 = 0; v17 = 0; v16 = 0; v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; strncpy(v12, a2, 0x20u); v6 = v14; v4 = *(_DWORD *)v12; v9 = v17; v5 = v13; v7 = v15; v8 = v16; v10 = v18; v11 = v19; return sub_4B72A0(v2, 27, 6, &v4, 0x20u); } //----- (004AA2E0) -------------------------------------------------------- char __thiscall sub_4AA2E0(_DWORD *this, char *a2) { _DWORD *v2; // esi int v4; // [esp+4h] [ebp-44h] int v5; // [esp+8h] [ebp-40h] int v6; // [esp+Ch] [ebp-3Ch] int v7; // [esp+10h] [ebp-38h] int v8; // [esp+14h] [ebp-34h] int v9; // [esp+18h] [ebp-30h] int v10; // [esp+1Ch] [ebp-2Ch] int v11; // [esp+20h] [ebp-28h] char v12[4]; // [esp+24h] [ebp-24h] int v13; // [esp+28h] [ebp-20h] int v14; // [esp+2Ch] [ebp-1Ch] int v15; // [esp+30h] [ebp-18h] int v16; // [esp+34h] [ebp-14h] int v17; // [esp+38h] [ebp-10h] int v18; // [esp+3Ch] [ebp-Ch] int v19; // [esp+40h] [ebp-8h] v2 = this; v19 = 0; v18 = 0; v17 = 0; v16 = 0; v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; strncpy(v12, a2, 0x20u); v6 = v14; v4 = *(_DWORD *)v12; v9 = v17; v5 = v13; v7 = v15; v8 = v16; v10 = v18; v11 = v19; return sub_4B72A0(v2, 27, 8, &v4, 0x20u); } //----- (004AA390) -------------------------------------------------------- char __thiscall sub_4AA390(_DWORD *this) { char result; // al if ( dword_ADB4F8 < 1 ) result = sub_4A7770(this, (int)dword_AD8EBC); return result; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004AA3B0) -------------------------------------------------------- char __thiscall sub_4AA3B0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax v1 = this; v2 = (int *)sub_6C10B0(&dword_B9DC70, 0); if ( v2 ) { v2 = (int *)sub_664630(dword_AD8C90, *v2, v2[1], v2[2], v2[3], v2[4]); if ( v2 ) LOBYTE(v2) = sub_4A7770(v1, (int)v2); } return (char)v2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004AA400) -------------------------------------------------------- char __thiscall sub_4AA400(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax v1 = this; v2 = (int *)sub_6C10B0(&dword_B9DC70, 1u); if ( v2 ) { v2 = (int *)sub_664630(dword_AD8C90, *v2, v2[1], v2[2], v2[3], v2[4]); if ( v2 ) LOBYTE(v2) = sub_4A7770(v1, (int)v2); } return (char)v2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004AA450) -------------------------------------------------------- char __thiscall sub_4AA450(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax v1 = this; v2 = (int *)sub_6C10B0(&dword_B9DC70, 2u); if ( v2 ) { v2 = (int *)sub_664630(dword_AD8C90, *v2, v2[1], v2[2], v2[3], v2[4]); if ( v2 ) LOBYTE(v2) = sub_4A7770(v1, (int)v2); } return (char)v2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004AA4A0) -------------------------------------------------------- char __thiscall sub_4AA4A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax v1 = this; v2 = (int *)sub_6C10B0(&dword_B9DC70, 3u); if ( v2 ) { v2 = (int *)sub_664630(dword_AD8C90, *v2, v2[1], v2[2], v2[3], v2[4]); if ( v2 ) LOBYTE(v2) = sub_4A7770(v1, (int)v2); } return (char)v2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004AA4F0) -------------------------------------------------------- char __thiscall sub_4AA4F0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax v1 = this; v2 = (int *)sub_6C10B0(&dword_B9DC70, 4u); if ( v2 ) { v2 = (int *)sub_664630(dword_AD8C90, *v2, v2[1], v2[2], v2[3], v2[4]); if ( v2 ) LOBYTE(v2) = sub_4A7770(v1, (int)v2); } return (char)v2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004AA540) -------------------------------------------------------- void __thiscall sub_4AA540(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx char *v4; // edi int v5; // eax int v6; // esi int v7; // ebx int v8; // edx int v9; // esi int v10; // edi int *v11; // eax const char *v12; // eax int v13; // eax const char *v14; // eax int v15; // eax char v16; // bl const CHAR *v17; // eax int v18; // [esp+8h] [ebp-Ch] _DWORD *v19; // [esp+Ch] [ebp-8h] char v20; // [esp+13h] [ebp-1h] char v21; // [esp+1Fh] [ebp+Bh] v2 = this; v3 = 0; v19 = this; if ( this[179] ) { v4 = dword_AD8EBC; if ( !a2 && *(_WORD *)(dword_AD8EBC + 981) == -1 && *(_WORD *)(dword_AD8EBC + 967) == -1 ) { *(_BYTE *)(this[179] + 1617) = 0; sub_536340((_DWORD *)this[179]); *(_BYTE *)(v2[179] + 1672) = 0; sub_536580((_DWORD *)v2[179]); return; } v5 = *(unsigned __int16 *)(dword_AD8EBC + 981); v21 = 0; v20 = 0; v18 = 0; if ( (_WORD)v5 != -1 ) { v6 = dword_ACB230; v7 = *(unsigned __int16 *)(dword_AD8EBC + 981); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) ) { v8 = *(_DWORD *)(v6 + 196); if ( *(_DWORD *)(v8 + 4 * v7) ) v3 = *(_DWORD *)(v8 + 4 * v7); else v3 = 0; } else { v3 = 0; } } else { v3 = 0; } v2 = v19; } if ( *(_WORD *)(v4 + 967) != -1 ) { v9 = dword_ACB230; v10 = *(unsigned __int16 *)(v4 + 967); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v10) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v10); if ( *v11 ) v18 = *v11; else v18 = 0; } else { v18 = 0; } } else { v18 = 0; } v2 = v19; } if ( v3 ) { v12 = sub_4B17D0((const char *)(v3 + 2)); if ( v12 ) { v13 = *((_DWORD *)v12 + 9) - 1; if ( v13 ) { if ( v13 == 1 ) v20 = 1; } else { v21 = 1; } } if ( !v18 ) goto LABEL_38; } else if ( !v18 ) { return; } v14 = sub_4B17D0((const char *)(v18 + 2)); if ( v14 ) { v15 = *((_DWORD *)v14 + 9) - 1; if ( !v15 ) { v16 = v20; v21 = 1; goto LABEL_40; } if ( v15 == 1 ) { v16 = 1; goto LABEL_39; } } LABEL_38: v16 = v20; LABEL_39: if ( !v21 ) { if ( !v16 ) { v17 = sub_40A910(-856106548); sub_492060(v2, (int)v17); } goto LABEL_43; } LABEL_40: sub_8EEE70(v2, 253, 1, 0); LABEL_43: *(_BYTE *)(v2[179] + 1617) = v21; sub_536340((_DWORD *)v2[179]); *(_BYTE *)(v2[179] + 1672) = v16; sub_536580((_DWORD *)v2[179]); } } // ACB230: using guessed type int dword_ACB230; //----- (004AA750) -------------------------------------------------------- void __userpurge sub_4AA750(_DWORD *a1@, double a2@, char a3, int a4, unsigned int a5, unsigned int a6, int a7) { _DWORD *v7; // ebx unsigned int v8; // edi _DWORD **v9; // ebx _DWORD *v10; // esi const CHAR *v11; // eax _BYTE *v12; // esi _DWORD ***v13; // edi signed int v14; // ebx _DWORD *v15; // esi unsigned int v16; // [esp+14h] [ebp-Ch] _DWORD *v17; // [esp+18h] [ebp-8h] unsigned int v18; // [esp+1Ch] [ebp-4h] char v19; // [esp+2Bh] [ebp+Bh] v7 = a1; v17 = a1; if ( a3 ) { if ( !sub_4E37C0(a1, a2) ) { v8 = 0; v16 = 0; v18 = 0; v19 = 0; v9 = (_DWORD **)(v7 + 1229); do { v10 = *v9; if ( *v9 ) { if ( (unsigned __int8)sub_4FD850(v10, a4, a6) ) { v11 = sub_40A910(-1270667234); goto LABEL_14; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v10 + 260))(v10) ) { ++v18; } else if ( !v19 ) { v16 = v8; v19 = 1; } } ++v8; ++v9; } while ( v8 < 4 ); if ( v18 >= 4 ) { v11 = sub_40A910(-957161531); LABEL_14: sub_492060(v17, (int)v11); return; } v12 = (_BYTE *)v17[v16 + 1229]; if ( v12 ) { sub_4FF700(v12, a4, a5, a6, a7); (*(void (__thiscall **)(_BYTE *, int, int, _DWORD, _DWORD))(*(_DWORD *)v12 + 236))( v12, xRight, dword_AC2F78, 0.5, 0.5); sub_8F81A0(&unk_BA6B10, v12); sub_8F82A0(&unk_BA6B10, v12); } } } else { v13 = (_DWORD ***)(a1 + 1229); v14 = 4; do { v15 = *v13; if ( *v13 ) { sub_4FDB70(*v13); sub_8F86A0(&unk_BA6B10, v15); } ++v13; --v14; } while ( v14 ); } } //----- (004AA8A0) -------------------------------------------------------- void __thiscall sub_4AA8A0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char *v4; // eax v3 = this; if ( this[1243] && (*(unsigned __int8 (**)(void))(*(_DWORD *)this[1243] + 260))() != 1 ) { v4 = sub_664AB0(dword_AD8C90, a2); if ( v4 ) { *(_DWORD *)(v3[1243] + 448) = *((_DWORD *)v4 + 743); *(_DWORD *)(v3[1243] + 452) = a3; sub_50EB10((_DWORD *)v3[1243]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[1243]); a2 = v3[1243]; sub_6B9900(v3 + 300, &a2); } } } //----- (004AA940) -------------------------------------------------------- char sub_4AA940() { int v0; // esi __int16 *v1; // eax v0 = sub_6E2400(&unk_ADB488, dword_ADB5F2); v1 = (__int16 *)sub_4B1B80(SHIWORD(dword_ADB5F2)); if ( v0 && v1 ) LOBYTE(v1) = sub_6E1470((_DWORD *)dword_ADB4C8, *v1, *(_WORD *)(v0 + 4)); return (char)v1; } // ADB4C8: using guessed type int dword_ADB4C8; // ADB5F2: using guessed type int dword_ADB5F2; //----- (004AA990) -------------------------------------------------------- unsigned int __userpurge sub_4AA990@(int a1@, int a2@, int a3@, char a4, int a5) { int v5; // esi unsigned int result; // eax int v7; // ST18_4 int v8; // ST14_4 int v9; // ebx int v10; // edi int v11; // eax int v12; // ecx int v13; // eax int v14; // edi const CHAR *v15; // eax volatile LONG *v16; // eax const CHAR *v17; // eax volatile LONG *v18; // eax int v19; // eax int v20; // eax _DWORD *v21; // ecx int v22; // ebx int v23; // eax int v24; // eax int v25; // ST18_4 int v26; // eax int v27; // eax v5 = a1; result = sub_58DFD0(*(_DWORD **)(a1 + 972)); if ( *(_DWORD *)(v5 + 972) ) { result = *(_DWORD *)(v5 + 1100); if ( result ) { v7 = a2; v8 = a3; v9 = *(unsigned __int16 *)(sub_5D5470(*(_DWORD **)(result + 3592)) + 8); v10 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, v9, v8, v7) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v10 + 200) ) { v12 = *(_DWORD *)(v10 + 196); if ( *(_DWORD *)(v12 + 4 * v9) ) v11 = *(_DWORD *)(v12 + 4 * v9); else v11 = 0; } else { v11 = 0; } } else { v11 = 0; } v13 = sub_4A3DB0((unsigned __int8 *)(v11 + 2)); v14 = *(_DWORD *)(v13 + 98); if ( v14 || strcmp("MINIGAME", (const char *)(v13 + 66)) ) { if ( v14 == 1 ) { v17 = sub_40A910(813727112); v18 = sub_58E290(v17, 231, 0, 0, 0, 0, 0); sub_58E080(*(_DWORD **)(v5 + 972), 1, (int)v18); if ( a4 == 1 ) { v16 = (volatile LONG *)sub_58C5A0(1); } else { v19 = sub_58C640(); sub_58E080(*(_DWORD **)(v5 + 972), 1, v19); v16 = (volatile LONG *)sub_58C6C0(); } } else { if ( a4 == 1 ) { v20 = sub_58C5A0(1); } else { v26 = sub_58C640(); sub_58E080(*(_DWORD **)(v5 + 972), v14, v26); v20 = sub_58C6C0(); } sub_58E080(*(_DWORD **)(v5 + 972), v14, v20); v21 = *(_DWORD **)(*(_DWORD *)(v5 + 1100) + 3592); if ( !v21 ) goto LABEL_27; v22 = sub_5D5470(v21); if ( !v22 ) goto LABEL_27; v23 = sub_6DB2D0(v22, *(_DWORD *)(*(_DWORD *)(v5 + 1124) + 360)); v14 = v23; v24 = sub_58C170(v23); sub_58E080(*(_DWORD **)(v5 + 972), v14, v24); if ( v14 == 100000 || v14 == 200000 ) { v16 = (volatile LONG *)sub_58C220(100); } else { v25 = sub_6DC040(v22, *(_DWORD *)(*(_DWORD *)(v5 + 1124) + 360)); v16 = (volatile LONG *)sub_58C220(v25); } } } else { v15 = sub_40A910(-1904687155); v16 = sub_58E290(v15, 230, 0, 0, 0, 0, 0); } sub_58E080(*(_DWORD **)(v5 + 972), v14, (int)v16); LABEL_27: v27 = sub_58A9F0(); sub_58E080(*(_DWORD **)(v5 + 972), v14, v27); sub_58D930(*(_DWORD **)(v5 + 972), 0); (*(void (__cdecl **)(LONG, LONG))(**(_DWORD **)(v5 + 972) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 972)); result = a5; if ( dword_ADB564 != a5 ) dword_ADB564 = a5; return result; } } return result; } // 4AA990: could not find valid save-restore pair for ebx // 4AA990: could not find valid save-restore pair for edi // ACB230: using guessed type int dword_ACB230; // ADB564: using guessed type int dword_ADB564; //----- (004AAC10) -------------------------------------------------------- char __thiscall sub_4AAC10(_DWORD *this, int a2) { _DWORD *v2; // eax int v3; // esi int *v4; // edi int v5; // eax const CHAR *v6; // ebx int v7; // eax int v8; // ecx int v9; // eax bool v10; // zf int v11; // ebx _DWORD *v12; // eax _BYTE *v13; // ecx char v14; // bl char *v15; // eax volatile LONG *v16; // eax int v17; // ecx int v18; // ebx int v19; // eax int v20; // ecx int v21; // eax int v22; // ebx int v23; // eax int v24; // eax const CHAR *v26; // [esp-10h] [ebp-4Ch] int v27; // [esp-Ch] [ebp-48h] char v28; // [esp-8h] [ebp-44h] int v29; // [esp-4h] [ebp-40h] char v30; // [esp+10h] [ebp-2Ch] int v31; // [esp+14h] [ebp-28h] char v32; // [esp+18h] [ebp-24h] int v33; // [esp+20h] [ebp-1Ch] int v34; // [esp+28h] [ebp-14h] int v35; // [esp+38h] [ebp-4h] LOBYTE(v2) = a2; v3 = (int)this; switch ( a2 ) { case 0: v4 = (int *)this[271]; v2 = (_DWORD *)v4[117]; this[280] = *v2; goto LABEL_20; case 1: v4 = (int *)this[274]; LOBYTE(v2) = sub_4B9010(this); goto LABEL_20; case 2: v4 = (int *)this[275]; v2 = *(_DWORD **)(v4[919] + 8); this[280] = v2; if ( dword_ADB4FC == 2 ) goto LABEL_20; return (char)v2; case 3: v4 = (int *)this[273]; this[280] = *(_DWORD *)(v4[96] + 12); goto LABEL_20; case 4: v4 = (int *)this[272]; v5 = this[271]; this[280] = *(_DWORD *)(v4[94] + 16); if ( dword_ADB4FC == 2 ) { if ( *(_DWORD *)(v5 + 416) ) { v6 = (const CHAR *)(v5 + 400); if ( *(_DWORD *)(v5 + 420) >= 0x10u ) v6 = *(const CHAR **)v6; } else { v6 = 0; } v7 = (*(int (**)(void))(**(_DWORD **)(v5 + 456) + 484))(); v8 = *(_DWORD *)(v3 + 1084); v29 = v7; LOBYTE(v31) = *(_BYTE *)(v8 + 428); v28 = v31; v27 = *(_DWORD *)(v8 + 432); v26 = v6; } else { v9 = (*(int (**)(void))(**(_DWORD **)(v5 + 456) + 484))(); v8 = *(_DWORD *)(v3 + 1084); v10 = *(_DWORD *)(v8 + 416) == 0; v11 = *(_DWORD *)(v8 + 432); LOBYTE(v31) = *(_BYTE *)(v8 + 428); v29 = v9; v28 = v31; v27 = v11; v26 = (const CHAR *)((unsigned __int8)(v10 - 1) != 0 ? (unsigned int)"........" : 0); } v12 = sub_4B1BE0(v8); LOBYTE(v2) = sub_4B1C10(*(_DWORD ***)(v3 + 1088), (int)v12, v26, v27, v28, v29); goto LABEL_20; case 5: v13 = (_BYTE *)*sub_4A3B80(&v30); v35 = 0; v14 = sub_6C4EE0(v13); v35 = -1; sub_410C00(&v30); if ( v14 ) v15 = (char *)sub_40A910(-856420867); else v15 = (char *)sub_40A910(-554110486); v16 = sub_462CA0(2, v15); v33 = 206; v34 = 0; LOBYTE(v2) = (unsigned int)sub_461760(v16, v3, &v32, 0); *(_BYTE *)(*(_DWORD *)(v3 + 1120) + 380) = 1; break; default: v4 = (int *)this[271]; LABEL_20: if ( v4 ) { v17 = *(_DWORD *)(v3 + 1116); v18 = *v4; if ( v17 ) { v19 = (*(int (**)(void))(*(_DWORD *)v17 + 164))(); (*(void (__thiscall **)(int *, int))(v18 + 172))(v4, v19); v20 = *(_DWORD *)(v3 + 1116); } else { v21 = (*(int (**)(void))(**(_DWORD **)(v3 + 1084) + 164))(); (*(void (__thiscall **)(int *, int))(v18 + 172))(v4, v21); v20 = *(_DWORD *)(v3 + 1084); } v22 = *v4; v23 = (*(int (**)(void))(*(_DWORD *)v20 + 168))(); (*(void (__thiscall **)(int *, int))(v22 + 176))(v4, v23); v24 = *(_DWORD *)(v3 + 1120); if ( v24 ) *(_BYTE *)(v24 + 380) = 1; sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 1116)); *(_DWORD *)(v3 + 1116) = v4; LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, v4); } break; } return (char)v2; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (004AAED0) -------------------------------------------------------- void __thiscall sub_4AAED0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx int *v4; // edi int v5; // ebx int v6; // eax int v7; // ebx int v8; // eax v1 = this; v2 = this[226]; if ( v2 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() && !v1[175] ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); } v3 = v1[216]; v4 = (int *)v1[216]; v1[175] = 0; if ( v4 ) { v1[226] = v4; v5 = *v4; v6 = (*(int (**)(void))(*(_DWORD *)v3 + 164))(); (*(void (__thiscall **)(int *, int))(v5 + 172))(v4, v6); v7 = *v4; v8 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v7 + 176))(v4, v8); sub_8F82A0(&unk_BA6B10, v4); } } //----- (004AAF70) -------------------------------------------------------- void __thiscall sub_4AAF70(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[226]; if ( v2 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() && v1[175] == 1 ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); } sub_4A9E30(v1, 1); } //----- (004AAFC0) -------------------------------------------------------- void __thiscall sub_4AAFC0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int *v3; // edi int v4; // ecx int v5; // ebx int v6; // eax int v7; // ebx int v8; // eax v1 = this; v2 = this[226]; if ( !v2 ) goto LABEL_7; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() ) { sub_4A54D0(v1); LABEL_7: v1[175] = 4; goto LABEL_8; } if ( v1[175] == 4 ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); v1[175] = 4; LABEL_8: v3 = (int *)v1[222]; if ( v3 ) { v4 = v1[216]; v1[226] = v3; v5 = *v3; v6 = (*(int (**)(void))(*(_DWORD *)v4 + 164))(); (*(void (__thiscall **)(int *, int))(v5 + 172))(v3, v6); v7 = *v3; v8 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v7 + 176))(v3, v8); sub_8F82A0(&unk_BA6B10, v3); sub_4A8140((int)v1, 85); } } //----- (004AB080) -------------------------------------------------------- void __thiscall sub_4AB080(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // eax int *v4; // edi int v5; // ecx int v6; // ebx int v7; // eax int v8; // ebx int v9; // eax v1 = this; v2 = this[226]; if ( !v2 ) goto LABEL_7; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() ) { sub_4A54D0(v1); LABEL_7: v1[175] = 5; goto LABEL_8; } if ( v1[175] == 5 ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); v1[175] = 5; LABEL_8: v3 = (_DWORD *)sub_715490(); sub_7153F0(v3); sub_6F36A0(&off_AB7F2C, 38, 7, 0, 0); v4 = (int *)v1[225]; if ( v4 ) { sub_70F470((_DWORD *)v1[225]); if ( v4 ) { v5 = v1[216]; v1[226] = v4; v6 = *v4; v7 = (*(int (**)(void))(*(_DWORD *)v5 + 164))(); (*(void (__thiscall **)(int *, int))(v6 + 172))(v4, v7); v8 = *v4; v9 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v8 + 176))(v4, v9); sub_8F82A0(&unk_BA6B10, v4); sub_4A8140((int)v1, 93); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004AB170) -------------------------------------------------------- void __thiscall sub_4AB170(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int *v3; // edi int v4; // ecx int v5; // ebx int v6; // eax int v7; // ebx int v8; // eax v1 = this; v2 = this[226]; if ( !v2 ) goto LABEL_7; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() ) { sub_4A54D0(v1); LABEL_7: v1[175] = 2; goto LABEL_8; } if ( v1[175] == 2 ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); v1[175] = 2; LABEL_8: v3 = (int *)v1[219]; if ( v3 ) { v4 = v1[216]; v1[226] = v3; v5 = *v3; v6 = (*(int (**)(void))(*(_DWORD *)v4 + 164))(); (*(void (__thiscall **)(int *, int))(v5 + 172))(v3, v6); v7 = *v3; v8 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v7 + 176))(v3, v8); sub_8F82A0(&unk_BA6B10, v3); } } //----- (004AB230) -------------------------------------------------------- void __thiscall sub_4AB230(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int *v3; // edi int v4; // ecx int v5; // ebx int v6; // eax int v7; // ebx int v8; // eax v1 = this; v2 = this[226]; if ( !v2 ) goto LABEL_7; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() ) { sub_4A54D0(v1); LABEL_7: v1[175] = 3; goto LABEL_8; } if ( v1[175] == 3 ) { sub_4A54D0(v1); v1[175] = -1; return; } sub_4A54D0(v1); v1[175] = 3; LABEL_8: v3 = (int *)v1[221]; if ( v3 ) { v4 = v1[216]; v1[226] = v3; v5 = *v3; v6 = (*(int (**)(void))(*(_DWORD *)v4 + 164))(); (*(void (__thiscall **)(int *, int))(v5 + 172))(v3, v6); v7 = *v3; v8 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v7 + 176))(v3, v8); sub_8F82A0(&unk_BA6B10, v3); sub_4A8140((int)v1, 109); } } //----- (004AB2F0) -------------------------------------------------------- void __thiscall sub_4AB2F0(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // esi __int16 v5; // si char *v6; // eax int v7; // eax int v8; // eax int v9; // eax __int16 v10; // ax int v11; // edi signed int v12; // eax bool v13; // cf int v14; // ecx int v15; // eax int v16; // eax unsigned int v17; // eax int v18; // eax v3 = this; if ( a2 < 0x64 ) { v4 = dword_AD46F4[a2]; if ( v4 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 1 ) { v5 = *(_WORD *)(v4 + 8); if ( v5 != -1 && !v3[628] ) { sub_67B660(dword_AD8EBC, 4); v6 = dword_AD8EBC; *((_WORD *)dword_AD8EBC + 2064) = v5; *((_DWORD *)v6 + 1031) = 1; } } else if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 2 ) { v7 = sub_4B0DC0(*(_DWORD *)(v4 + 8)); if ( v7 ) { v8 = *(_DWORD *)(v7 + 101); if ( v8 ) { v9 = v8 - 1; if ( v9 ) { if ( v9 == 1 ) sub_4E78D0(*(void **)(v3[193] + 584), *(_DWORD *)(v4 + 16)); } else { sub_4E7FB0((_DWORD *)v3[193], *(_DWORD *)(v4 + 16)); } } else { sub_4EA450((_DWORD *)v3[193], *(_DWORD *)(v4 + 16)); } } } else if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 4 ) { v10 = *(_WORD *)(v4 + 12); if ( v10 != -1 ) { v11 = sub_685510(&byte_ADA230, v10); if ( v11 ) { v12 = 0; v13 = 1; while ( 1 ) { if ( v13 ) { v14 = dword_ADA534[v12]; if ( v14 ) { if ( *(_WORD *)(v11 + 8) == *(_WORD *)(v14 + 8) ) break; } } v13 = (unsigned int)++v12 < 0x1E; if ( v12 >= 30 ) { sub_4A9420((_DWORD ***)v3, v11, v4, a3); return; } } v15 = sub_4B1600(*(unsigned __int16 *)(v11 + 8)); if ( v15 ) { v16 = sub_4B15B0(*(unsigned __int16 *)(v15 + 2)); if ( v16 ) { if ( *(_BYTE *)(v16 + 2) ) sub_4A9380(v3, v11, v4, a3); } } } } } else if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 5 ) { v17 = *(_DWORD *)(v4 + 8); if ( v17 < 0xC0 ) { v18 = dword_ADA234[v17]; if ( v18 ) { if ( *(_WORD *)(v18 + 8) != -1 ) sub_4A94B0(v3, v18, v4, a3); } } } } } } // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (004AB4D0) -------------------------------------------------------- void __thiscall sub_4AB4D0(_BYTE **this) { _BYTE **v1; // esi const CHAR *v2; // eax _DWORD *v3; // ecx const CHAR *v4; // eax _BYTE *v5; // ecx v1 = this; if ( sub_54CE90(this[139]) == 1 ) { v2 = sub_40C190(-941299944); sub_492060(v1, (int)v2); } else { sub_8F86A0(&unk_BA6B10, v1[139]); dword_ACEC24 = 0; sub_8F86A0(&unk_BA6B10, v1[140]); } v3 = v1[141]; if ( v3 && sub_43F000(v3) ) { v4 = sub_4090F0(493651573); sub_492060(v1, (int)v4); } else { sub_8F86A0(&unk_BA6B10, v1[141]); dword_ACEC24 = 0; } sub_8F86A0(&unk_BA6B10, v1[155]); dword_ACEC24 = 0; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v1[179] + 260))() ) sub_4A6BA0((_DWORD **)v1); dword_ACEC24 = 1; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v1[234] + 260))() ) sub_8F82A0(&unk_BA6B10, v1[234]); v5 = v1[234]; *((_DWORD *)v5 + 87) = 0; *((_DWORD *)v5 + 86) = 0; *((_DWORD *)v5 + 154) = 0; sub_54A380((int **)v5); } // ACEC24: using guessed type int dword_ACEC24; //----- (004AB5F0) -------------------------------------------------------- void __thiscall sub_4AB5F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ecx _DWORD *v4; // ecx int *v5; // edi int v6; // ecx int v7; // ebx int v8; // eax int v9; // ebx int v10; // eax v1 = this; v2 = (_DWORD *)this[226]; if ( v2 ) { v3 = (_DWORD *)this[218]; if ( v2 == v3 && sub_8F3540(v3) ) { sub_4A54D0(v1); return; } v4 = (_DWORD *)v1[219]; if ( (_DWORD *)v1[226] == v4 && sub_8F3540(v4) ) { sub_4A54D0(v1); return; } sub_4A54D0(v1); } v5 = (int *)v1[219]; v1[175] = 2; if ( v5 ) { v6 = v1[216]; v1[226] = v5; v7 = *v5; v8 = (*(int (**)(void))(*(_DWORD *)v6 + 164))(); (*(void (__thiscall **)(int *, int))(v7 + 172))(v5, v8); v9 = *v5; v10 = (*(int (**)(void))(*(_DWORD *)v1[216] + 168))(); (*(void (__thiscall **)(int *, int))(v9 + 176))(v5, v10); sub_8F82A0(&unk_BA6B10, v5); } } //----- (004AB6B0) -------------------------------------------------------- _DWORD *__thiscall sub_4AB6B0(char *this) { char *v1; // esi _DWORD *result; // eax int v3; // edi _DWORD *v4; // ecx _DWORD *v5; // edx int v6; // esi int v7; // [esp+8h] [ebp-4h] v1 = this; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) sub_8F86A0(&unk_BA6B10, *((_DWORD **)v1 + 285)); result = (_DWORD *)*((_DWORD *)v1 + 301); v3 = *((_DWORD *)v1 + 285); v4 = v1 + 1200; if ( result ) { while ( 1 ) { v5 = result + 2; v6 = (int)result; result = (_DWORD *)*result; if ( v3 == *v5 ) break; if ( !result ) goto LABEL_6; } } else { LABEL_6: v6 = 0; } v7 = v6; if ( v6 ) result = (_DWORD *)sub_403620(v4, (_DWORD **)&v7); return result; } //----- (004AB820) -------------------------------------------------------- void __thiscall sub_4AB820(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // [esp+4h] [ebp-4h] v1 = this; if ( this[1243] ) { if ( (*(unsigned __int8 (**)(void))(*this[1243] + 260))() == 1 ) { sub_8F86A0(&unk_BA6B10, v1[1243]); v2 = v1[1243]; sub_937220(v1 + 300, (int *)&v2); (*(void (__stdcall **)(_DWORD))(*v1[1243] + 256))(0); } } } //----- (004AB890) -------------------------------------------------------- int __usercall sub_4AB890@(int a1@, int a2@) { int v2; // esi _DWORD *v3; // ecx int v4; // ecx _DWORD *v5; // ecx const CHAR *v6; // eax _DWORD *v7; // ecx const CHAR *v8; // eax int v9; // ecx int v10; // eax int v11; // eax const char *v12; // eax const CHAR *v13; // eax _DWORD *v14; // eax int v15; // edi int v16; // ebx _DWORD **v17; // ecx _DWORD *v18; // ecx _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // ecx _DWORD *v22; // eax _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax char v27; // [esp+40h] [ebp-20h] void *v28; // [esp+4Ch] [ebp-14h] int v29; // [esp+50h] [ebp-10h] int v30; // [esp+5Ch] [ebp-4h] v2 = a1; sub_6BD840(); sub_49F570(*(void **)(v2 + 852), xRight, dword_AC2F78, flt_B92089, flt_B9208D); sub_4EF2F0(*(_DWORD ***)(v2 + 852)); sub_4EF310(*(_DWORD **)(v2 + 852), (unsigned __int16)word_B92091 / 20, (unsigned __int16)word_B92093 / 20); sub_49F570(*(void **)(v2 + 856), xRight, dword_AC2F78, flt_B92095, flt_B92099); sub_4EF2F0(*(_DWORD ***)(v2 + 856)); sub_4EF310(*(_DWORD **)(v2 + 856), (unsigned __int16)word_B9209D / 20, (unsigned __int16)word_B9209F / 20); v3 = *(_DWORD **)(v2 + 860); if ( v3 ) { sub_4F0B50(v3); sub_4EF2F0(*(_DWORD ***)(v2 + 860)); sub_4EF310(*(_DWORD **)(v2 + 860), (unsigned __int16)word_B920B1 / 20, (unsigned __int16)word_B920B3 / 20); sub_49F570(*(void **)(v2 + 860), xRight, dword_AC2F78, flt_B920A9, flt_B920AD); } sub_518F50(*(_DWORD *)(*(_DWORD *)(v2 + 572) + 532), a2, flt_B920A1); v4 = *(_DWORD *)(v2 + 864); if ( *(_BYTE *)(v4 + 11196) != byte_B92088 ) sub_511DF0(v4); sub_4B7210((_DWORD *)v2, 22, 27, 0, 0); sub_4C0D30((_DWORD *)v2); *(_BYTE *)(v2 + 145) = 0; sub_4D6090((_DWORD *)v2, "&adminlevel"); if ( dword_B9DCC4 ) sub_4B7F70((_DWORD *)v2); v5 = *(_DWORD **)(v2 + 724); if ( v5 ) sub_582B90(v5); sub_4B0F00((_DWORD *)(v2 + 36)); sub_4AB6B0((char *)v2); if ( sub_54CE90(*(_BYTE **)(v2 + 556)) == 1 ) { v6 = sub_40C190(-941299944); sub_492060((_DWORD *)v2, (int)v6); } else { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 556)); dword_ACEC24 = 0; sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 560)); } v7 = *(_DWORD **)(v2 + 564); if ( v7 && sub_43F000(v7) ) { v8 = sub_4090F0(493651573); sub_492060((_DWORD *)v2, (int)v8); } else { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 564)); dword_ACEC24 = 0; sub_4B75F0((_DWORD *)v2); } if ( *(_DWORD *)(v2 + 768) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 768)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 620)); dword_ACEC24 = 0; sub_4B75F0((_DWORD *)v2); if ( dword_ACEC34 && (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACEC34 + 260))() ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACEC34 + 256))(0); v9 = *(_DWORD *)(v2 + 1008); if ( v9 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v9 + 260))() ) sub_4A5AE0((_DWORD **)v2); sub_6C2EE0(); byte_AD0C38 = 1; byte_ACEB00 = 1; if ( !dword_AD8EBC[5448] && (sub_652070(dword_AD8EBC) == 4 || sub_652070(dword_AD8EBC) == 5 || sub_652070(dword_AD8EBC) == 9 || sub_652070(dword_AD8EBC) == 10 || sub_652070(dword_AD8EBC) == 14 || sub_652070(dword_AD8EBC) == 15 || sub_652070(dword_AD8EBC) == 19 || sub_652070(dword_AD8EBC) == 20 || sub_652070(dword_AD8EBC) == 24 || sub_652070(dword_AD8EBC) == 25 || sub_652070(dword_AD8EBC) == 27) ) { if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) < 0x78 ) sub_6AF8E0(&unk_B91250, (int)&v29, "Aura100", (int)dword_AD8EBC, 1, flt_ACCFCC, 1, 1, 0, 1); else sub_6AF8E0(&unk_B91250, (int)&v29, "Aura120", (int)dword_AD8EBC, 1, flt_ACCFCC, 1, 1, 0, 1); dword_AD8EBC[5448] = 1; } if ( *(_DWORD *)(v2 + 648) ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 648)); if ( *(_DWORD *)(v2 + 716) ) { v10 = dword_ADA598; if ( dword_ADA598 || (v10 = dword_ADA5A4) != 0 ) { v11 = *(_DWORD *)(v10 + 112); if ( v11 ) { v12 = sub_4B17D0((const char *)(v11 + 2)); a2 = (int)v12; if ( v12 ) { *(_BYTE *)(*(_DWORD *)(v2 + 716) + 1617) = *((_DWORD *)v12 + 9) == 1; sub_533900(*(_BYTE **)(v2 + 716), *((_DWORD *)v12 + 9) == 1); sub_536340(*(_DWORD **)(v2 + 716)); *(_BYTE *)(*(_DWORD *)(v2 + 716) + 1672) = *(_DWORD *)(a2 + 36) == 2; sub_536580(*(_DWORD **)(v2 + 716)); } } } } if ( *(_BYTE *)(v2 + 4932) && *(_DWORD *)(v2 + 4936) ) { v13 = sub_40A910(-1192828409); sub_4EB180(*(_DWORD *)(v2 + 4936), a2, v2, (int)v13, (int)aIii, 1, 10.0); *(_BYTE *)(v2 + 4932) = 0; } v14 = sub_439D70(byte_ADB468, &v27); v15 = sub_49F8D0(v14); sub_6984E0(byte_ADB468); v16 = sub_698050(byte_ADB468); if ( v15 ) { sub_5694B0(*(_DWORD *)(v2 + 572), *(float *)(v15 + 112)); sub_5698A0( *(_DWORD *)(v2 + 572), *(unsigned __int16 *)(v15 + 169), *(unsigned __int16 *)(v15 + 171), *(unsigned __int16 *)(v15 + 173), *(unsigned __int16 *)(v15 + 175)); sub_56CEB0(*(_DWORD *)(v2 + 572), *(_BYTE *)(v15 + 116) != 0); } sub_5693E0(*(float **)(v2 + 572), v16); v17 = *(_DWORD ***)(v2 + 568); if ( v17 ) sub_5BD6A0(v17, byte_B920B5); v18 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v19 = operator new(0x14u); v28 = v19; v30 = 0; if ( v19 ) v20 = sub_439430(v19); else v20 = 0; v18 = v20; v30 = -1; dword_ACB2E4 = (int)v20; } if ( !sub_4394D0(v18, 1) ) { v21 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v22 = operator new(0x14u); v28 = v22; v30 = 1; if ( v22 ) v23 = sub_439430(v22); else v23 = 0; v21 = v23; v30 = -1; dword_ACB2E4 = (int)v23; } if ( sub_439620(v21, (void *)1) ) { v24 = sub_470E30(); sub_4394D0(v24, 1); } } v25 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v25) ) nullsub_43(dword_AD8EBC); return sub_534850(*(_DWORD **)(v2 + 716), byte_B9202E); } // 715320: using guessed type int __cdecl nullsub_43(_DWORD); // ACB2E4: using guessed type int dword_ACB2E4; // ACCFCC: using guessed type float flt_ACCFCC; // ACEB00: using guessed type char byte_ACEB00; // ACEC24: using guessed type int dword_ACEC24; // ACEC34: using guessed type int dword_ACEC34; // AD0C38: using guessed type char byte_AD0C38; // ADA598: using guessed type int dword_ADA598; // ADA5A4: using guessed type int dword_ADA5A4; // B9202E: using guessed type char byte_B9202E; // B92088: using guessed type char byte_B92088; // B92089: using guessed type float flt_B92089; // B9208D: using guessed type float flt_B9208D; // B92091: using guessed type __int16 word_B92091; // B92093: using guessed type __int16 word_B92093; // B92095: using guessed type float flt_B92095; // B92099: using guessed type float flt_B92099; // B9209D: using guessed type __int16 word_B9209D; // B9209F: using guessed type __int16 word_B9209F; // B920A1: using guessed type float flt_B920A1; // B920A9: using guessed type float flt_B920A9; // B920AD: using guessed type float flt_B920AD; // B920B1: using guessed type __int16 word_B920B1; // B920B3: using guessed type __int16 word_B920B3; // B920B5: using guessed type char byte_B920B5; // B9DCC4: using guessed type int dword_B9DCC4; //----- (004ABFA0) -------------------------------------------------------- char __thiscall sub_4ABFA0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi char v4; // [esp+8h] [ebp-4h] v1 = this; v2 = this[276]; (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 460))(&unk_9BB947); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 364) + 460))(&unk_9BB932); *(_BYTE *)(*(_DWORD *)(v2 + 348) + 380) = 0; sub_4B1C90((_DWORD **)v2, (int)&unk_9BB933); _itoa(2, &v4, 10); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 356) + 460))(&v4); return sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[276]); } //----- (004AC040) -------------------------------------------------------- char __thiscall sub_4AC040(_DWORD *this) { return sub_4AAC10(this, 0); } //----- (004AC050) -------------------------------------------------------- void __thiscall sub_4AC050(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // edi _DWORD *v4; // ST00_4 void **v5; // [esp+10h] [ebp-1Ch] _DWORD *v6; // [esp+14h] [ebp-18h] int v7; // [esp+18h] [ebp-14h] int v8; // [esp+1Ch] [ebp-10h] int v9; // [esp+28h] [ebp-4h] v1 = this; v8 = 0; v6 = 0; v7 = 0; v5 = &PgTList::`vftable'; v9 = 0; sub_4B1650(&v5); v2 = v6; if ( v6 ) { do { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_DWORD *)(v1[1221] + 4 * v3) < 0 && *((_BYTE *)v1 + 4904) ) { sub_4B5D50(v3); *(_DWORD *)(v1[1221] + 4 * v3) = v3; } } while ( v2 ); v2 = v6; } v5 = &PgTList::`vftable'; v9 = 1; while ( v2 ) { v4 = v2; v2 = (_DWORD *)*v2; ((void (__thiscall *)(void ***, _DWORD *))v5[2])(&v5, v4); } } // 9BBBDC: using guessed type void *PgTList::`vftable'; //----- (004AC130) -------------------------------------------------------- void __usercall sub_4AC130(int a1@, double a2@) { int v2; // esi int v3; // eax float *v4; // eax _DWORD *v5; // esi int v6; // edi const char *v7; // eax _DWORD *v8; // edi int v9; // eax _DWORD **v10; // edi _DWORD **v11; // ecx int v12; // eax int v13; // eax _DWORD **v14; // ecx int v15; // ecx _BYTE *v16; // eax _DWORD *v17; // ST08_4 int v18; // ecx _DWORD *v19; // eax _DWORD *v20; // eax int v21; // ecx void **v22; // [esp+10h] [ebp-24h] int v23; // [esp+14h] [ebp-20h] int v24; // [esp+18h] [ebp-1Ch] unsigned int v25; // [esp+1Ch] [ebp-18h] char v26; // [esp+20h] [ebp-14h] int v27; // [esp+24h] [ebp-10h] int v28; // [esp+30h] [ebp-4h] v2 = a1; if ( dword_ACEC24 == 8 ) { sub_8EEE70((_DWORD *)a1, 266, 0, 0); *(_BYTE *)(v2 + 696) = 0; return; } if ( dword_B67404 == 2 ) { sub_68BFA0(*(int **)(a1 + 1216)); return; } if ( dword_B67408 == 2 ) { sub_537BA0(*(_DWORD **)(a1 + 716), 0); return; } if ( dword_B6740C == 2 ) { sub_534620(*(_DWORD **)(a1 + 716)); return; } v3 = *(_DWORD *)(a1 + 2512); if ( v3 == 3 ) { if ( !sub_6508C0(dword_AD8EBC) ) { v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v4); sub_4B79A0((_DWORD *)v2); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } return; } if ( v3 == 1 ) { *(_DWORD *)(a1 + 2512) = 0; return; } if ( dword_ADB50C || dword_ADB600 ) { sub_4A5880(); return; } if ( dword_ADB4F8 == 2 && *(_DWORD *)(a1 + 1124) ) { sub_4A7E60((_DWORD *)a1, 0, 0); v5 = (_DWORD *)dword_BA6B48; if ( dword_BA6B48 ) { do { v6 = v5[2]; v7 = *(const char **)(v6 + 8); v5 = (_DWORD *)*v5; if ( v7 && !strncmp(v7, "MsgBox", 6u) ) sub_4628C0(v6); } while ( v5 ); } return; } v25 = 0; v23 = 0; v24 = 0; v22 = &NiTList::`vftable'; v8 = (_DWORD *)dword_BA6B48; v28 = 0; if ( dword_BA6B48 ) { do { v9 = v8[2]; v8 = (_DWORD *)*v8; v27 = v9; if ( *sub_6AD950((_DWORD *)(v2 + 624), (int **)&v26, &v27) != *(int **)(v2 + 628) ) sub_6B9900(&v22, &v27); } while ( v8 ); if ( v25 > 0 ) { if ( *(_BYTE *)(v2 + 2659) ) { v10 = *(_DWORD ***)(v24 + 8); if ( v10 ) { v11 = *(_DWORD ***)(v2 + 980); if ( v10 == v11 ) { sub_615820(v11); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 936) ) { sub_4B75F0((_DWORD *)v2); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 936)); dword_ACEC24 = 0; v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 1032) ) { sub_4A6FD0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 768) ) { sub_4A5260((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 944) ) { sub_4A6D20((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 != *(_DWORD ***)(v2 + 1240) && v10 != *(_DWORD ***)(v2 + 1284) ) { if ( v10 == *(_DWORD ***)(v2 + 948) ) { sub_4A6DA0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 556) ) { sub_4AA080((_BYTE **)v2, 1); v28 = -1; sub_4B1860(&v22); return; } v12 = *(_DWORD *)(v2 + 564); if ( v10 == (_DWORD **)v12 ) { *(_DWORD *)(v12 + 460) = 0; sub_4AA0F0((_DWORD *)v2, 1); v28 = -1; sub_4B1860(&v22); return; } v13 = *(_DWORD *)(v2 + 620); if ( v10 == (_DWORD **)v13 ) { *(_DWORD *)(v13 + 480) = 0; sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 620)); dword_ACEC24 = 0; sub_4B75F0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } v14 = *(_DWORD ***)(v2 + 5184); if ( v10 == v14 ) { if ( v14 && ((unsigned __int8 (*)(void))(*v14)[65])() == 1 ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 5184)); goto LABEL_83; } if ( v10 == *(_DWORD ***)(v2 + 964) ) { sub_4A6E40((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } v15 = *(_DWORD *)(v2 + 584); if ( v10 == (_DWORD **)v15 ) { sub_52C490(v15); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == (_DWORD **)sub_6D3810() ) { v16 = (_BYTE *)sub_6D3810(); sub_5DD210(v16); v17 = (_DWORD *)sub_6D3810(); sub_8F86A0(&unk_BA6B10, v17); LABEL_83: v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 612) ) { sub_4A51B0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 != *(_DWORD ***)(v2 + 616) ) { if ( v10 == *(_DWORD ***)(v2 + 588) ) { sub_4A67D0((_DWORD **)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 608) ) { sub_4A67B0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } v18 = *(_DWORD *)(v2 + 952); if ( v10 == (_DWORD **)v18 ) { sub_59DCD0(v18); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == (_DWORD **)sub_6D38D0() ) { v19 = (_DWORD *)sub_6D38D0(); sub_8F86A0(&unk_BA6B10, v19); v20 = (_DWORD *)sub_6D38E0(); sub_8F82A0(&unk_BA6B10, v20); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 1104) ) { sub_4ABFA0((_DWORD *)v2); v28 = -1; sub_4B1860(&v22); return; } if ( v10 == *(_DWORD ***)(v2 + 4916) || v10 == *(_DWORD ***)(v2 + 4920) || v10 == *(_DWORD ***)(v2 + 4924) || v10 == *(_DWORD ***)(v2 + 4928) ) { if ( sub_4E37C0((_DWORD *)v2, a2) ) goto LABEL_83; sub_4FDB70(v10); } else { v21 = *(_DWORD *)(v2 + 5116); if ( v10 == (_DWORD **)v21 ) { sub_446870(v21); v28 = -1; sub_4B1860(&v22); return; } } } } sub_8F86A0(&unk_BA6B10, v10); goto LABEL_83; } } } } if ( !sub_4A7730() && *(_BYTE *)(v2 + 2659) ) sub_4A4CF0((_DWORD **)v2); v28 = -1; sub_4B1860(&v22); } // 4628C0: using guessed type int __thiscall sub_4628C0(_DWORD); // 9BBBEC: using guessed type void *NiTList::`vftable'; // ACEC24: using guessed type int dword_ACEC24; // ADB4F8: using guessed type int dword_ADB4F8; // ADB50C: using guessed type int dword_ADB50C; // ADB600: using guessed type int dword_ADB600; // B67404: using guessed type int dword_B67404; // B67408: using guessed type int dword_B67408; // B6740C: using guessed type int dword_B6740C; // BA6B48: using guessed type int dword_BA6B48; //----- (004AC870) -------------------------------------------------------- char __thiscall sub_4AC870(void *this, __int16 a2, int a3, int a4, int a5, int a6) { int v6; // esi char *v7; // eax void *v8; // edi _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // esi CHAR *v12; // eax void *v13; // eax void *v14; // edi _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // esi CHAR *v18; // eax int v19; // eax _DWORD **v20; // ecx char *v21; // eax char *v22; // eax void *v24; // [esp-2Ch] [ebp-84h] int v25; // [esp-28h] [ebp-80h] int v26; // [esp-24h] [ebp-7Ch] int v27; // [esp-20h] [ebp-78h] int v28; // [esp-1Ch] [ebp-74h] int v29; // [esp-18h] [ebp-70h] int v30; // [esp-14h] [ebp-6Ch] int v31; // [esp-10h] [ebp-68h] int v32; // [esp-Ch] [ebp-64h] void *v33; // [esp-8h] [ebp-60h] void ***v34; // [esp-4h] [ebp-5Ch] _DWORD *v35; // [esp+10h] [ebp-48h] void **v36; // [esp+14h] [ebp-44h] int v37; // [esp+18h] [ebp-40h] int v38; // [esp+1Ch] [ebp-3Ch] int v39; // [esp+20h] [ebp-38h] void *v40; // [esp+24h] [ebp-34h] void *v41; // [esp+28h] [ebp-30h] int v42; // [esp+2Ch] [ebp-2Ch] void *v43; // [esp+30h] [ebp-28h] char v44[4]; // [esp+34h] [ebp-24h] int v45; // [esp+38h] [ebp-20h] int v46; // [esp+3Ch] [ebp-1Ch] int v47; // [esp+40h] [ebp-18h] char v48; // [esp+44h] [ebp-14h] int v49; // [esp+54h] [ebp-4h] v6 = (int)this; v42 = (int)this; v7 = sub_664AB0(dword_AD8C90, a2); if ( !v7 ) return 0; v35 = sub_443A80(*((_DWORD *)v7 + 739)); if ( !v35 || !*(_DWORD *)(v6 + 980) ) return 0; v39 = 0; v37 = 0; v38 = 0; v36 = &NiTList::`vftable'; v49 = 0; v8 = operator new(0x2Cu); v41 = v8; LOBYTE(v49) = 1; if ( v8 ) { v9 = operator new(0x10u); v43 = v9; LOBYTE(v49) = 2; if ( v9 ) v43 = sub_86B500(v9, "PetSetName"); else v43 = 0; v10 = operator new(0x10u); v11 = v10; v40 = v10; LOBYTE(v49) = 3; if ( v10 ) { sub_868D00(v10); *v11 = &NiIntegerExtraData::`vftable'; v11[3] = 0; } else { v11 = 0; } v34 = 0; v33 = v43; v32 = (int)v11; v31 = 0; LOBYTE(v49) = 1; v12 = (CHAR *)sub_4090F0(1860891635); v40 = &v24; sub_4019E0(&v24, v12); v13 = (void *)sub_4B2610((int)v8, v24, v25, v26, v27, v28, v29, v30, v31, v32, (int)v33, (int)v34); v6 = v42; } else { v13 = 0; } LOBYTE(v49) = 0; v43 = v13; sub_6B9900(&v36, &v43); v14 = operator new(0x2Cu); v40 = v14; LOBYTE(v49) = 4; if ( v14 ) { v15 = operator new(0x10u); v41 = v15; LOBYTE(v49) = 5; if ( v15 ) v43 = sub_86B500(v15, "PetSetNameCancel"); else v43 = 0; LOBYTE(v49) = 4; v16 = operator new(0x10u); v17 = v16; v41 = v16; LOBYTE(v49) = 6; if ( v16 ) { sub_868D00(v16); *v17 = &NiIntegerExtraData::`vftable'; v17[3] = 0; } else { v17 = 0; } v34 = 0; v33 = v43; v32 = (int)v17; v31 = 0; LOBYTE(v49) = 4; v18 = (CHAR *)sub_4090F0(-1137955786); v41 = &v24; sub_4019E0(&v24, v18); v19 = sub_4B2610((int)v14, v24, v25, v26, v27, v28, v29, v30, v31, v32, (int)v33, (int)v34); v6 = v42; } else { v19 = 0; } v42 = v19; LOBYTE(v49) = 0; sub_6B9900(&v36, &v42); *(_DWORD *)v44 = a3; v47 = a6; v20 = *(_DWORD ***)(v6 + 980); v45 = a4; v46 = a5; v48 = 0; sub_615820(v20); v34 = &v36; v33 = v44; v21 = (char *)sub_4090F0(-2089063282); v22 = sub_7549E0(v21); sub_618F30(*(_DWORD *)(v6 + 980), (int)(v35 + 1), v22, (int)v34); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v6 + 980)); v49 = -1; sub_4B1970(&v36); return 1; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; // 9BBBFC: using guessed type void *NiTList::`vftable'; //----- (004ACB00) -------------------------------------------------------- void __thiscall sub_4ACB00(_DWORD *this, int a2) { _DWORD *v2; // ebx const char *v3; // eax const char *v4; // esi const CHAR *v5; // eax const char *v6; // eax const char *v7; // esi const char *v8; // eax unsigned __int8 v9; // al int v10; // ecx unsigned int v11; // eax int v12; // edx const char *v13; // eax size_t v14; // kr00_4 int v15; // edx const char *v16; // eax unsigned int v17; // eax int v18; // edx const char *v19; // eax const CHAR *v20; // eax char *v21; // edx char v22; // cl const char *v23; // eax int v24; // ecx const CHAR *v25; // eax int (*v26)(void); // eax const char *v27; // eax size_t v28; // kr04_4 int v29; // edx const char *v30; // eax size_t v31; // kr08_4 int v32; // edx const char *v33; // eax const char *v34; // eax const char *v35; // esi const CHAR *v36; // eax char *v37; // edx char v38; // cl int v39; // eax _DWORD *v40; // eax const char *v41; // esi void *v42; // esi unsigned __int8 *v43; // eax int v44; // ecx int v45; // ecx int v46; // eax void *v47; // esi int v48; // eax const char *v49; // eax bool v50; // zf const char *v51; // esi const char *v52; // eax const char *v53; // esi size_t v54; // kr18_4 int v55; // edx const char *v56; // eax int v57; // ecx unsigned int v58; // kr1C_4 int v59; // edx char v60; // al int v61; // ecx char v62; // [esp-88h] [ebp-17Ch] int v63; // [esp-84h] [ebp-178h] int v64; // [esp-80h] [ebp-174h] int v65; // [esp-7Ch] [ebp-170h] int v66; // [esp-78h] [ebp-16Ch] int v67; // [esp-74h] [ebp-168h] int v68; // [esp-70h] [ebp-164h] int v69; // [esp-6Ch] [ebp-160h] int v70; // [esp-68h] [ebp-15Ch] int v71; // [esp-64h] [ebp-158h] int v72; // [esp-60h] [ebp-154h] int v73; // [esp-5Ch] [ebp-150h] int v74; // [esp-58h] [ebp-14Ch] int v75; // [esp-54h] [ebp-148h] int v76; // [esp-50h] [ebp-144h] int v77; // [esp-4Ch] [ebp-140h] int v78; // [esp-48h] [ebp-13Ch] int v79; // [esp-44h] [ebp-138h] int v80; // [esp-40h] [ebp-134h] int v81; // [esp-3Ch] [ebp-130h] int v82; // [esp-38h] [ebp-12Ch] int v83; // [esp-34h] [ebp-128h] int v84; // [esp-30h] [ebp-124h] int v85; // [esp-2Ch] [ebp-120h] int v86; // [esp-28h] [ebp-11Ch] int v87; // [esp-24h] [ebp-118h] int v88; // [esp-20h] [ebp-114h] int v89; // [esp-1Ch] [ebp-110h] int v90; // [esp-18h] [ebp-10Ch] int v91; // [esp-14h] [ebp-108h] int v92; // [esp-10h] [ebp-104h] int v93; // [esp-Ch] [ebp-100h] int *v94; // [esp-8h] [ebp-FCh] size_t v95; // [esp-4h] [ebp-F8h] bool v96; // [esp+16h] [ebp-DEh] unsigned __int8 v97; // [esp+17h] [ebp-DDh] int v98; // [esp+18h] [ebp-DCh] unsigned __int8 v99; // [esp+1Ch] [ebp-D8h] char v100[4]; // [esp+1Dh] [ebp-D7h] char v101[4]; // [esp+21h] [ebp-D3h] char v102; // [esp+25h] [ebp-CFh] char v103[4]; // [esp+26h] [ebp-CEh] int v104; // [esp+2Ah] [ebp-CAh] int v105; // [esp+2Eh] [ebp-C6h] int v106; // [esp+32h] [ebp-C2h] int v107; // [esp+36h] [ebp-BEh] char v108; // [esp+3Ah] [ebp-BAh] char v109; // [esp+3Bh] [ebp-B9h] char v110; // [esp+3Ch] [ebp-B8h] char v111; // [esp+A0h] [ebp-54h] char v112[4]; // [esp+A4h] [ebp-50h] int v113; // [esp+A8h] [ebp-4Ch] int v114; // [esp+ACh] [ebp-48h] int v115; // [esp+B0h] [ebp-44h] int v116; // [esp+B4h] [ebp-40h] char v117; // [esp+B8h] [ebp-3Ch] char v118[4]; // [esp+BCh] [ebp-38h] int v119; // [esp+C0h] [ebp-34h] char v120; // [esp+C4h] [ebp-30h] void *v121; // [esp+C8h] [ebp-2Ch] unsigned int v122; // [esp+D8h] [ebp-1Ch] unsigned int v123; // [esp+DCh] [ebp-18h] int v124; // [esp+F0h] [ebp-4h] LOWORD(v98) = v98 & 0x3FF | 0x8C00; v2 = this; if ( dword_ADB4F8 ) { if ( dword_ADB4F8 < 0 ) return; qmemcpy(&v99, &byte_ADB56C, 0x84u); *(_DWORD *)v112 = 0; v113 = 0; v114 = 0; v115 = 0; v116 = 0; v117 = 0; *(_DWORD *)v118 = 0; v119 = 0; v120 = 0; v26 = *(int (**)(void))(**(_DWORD **)(this[272] + 364) + 452); v111 = *(&byte_ADB56C + 132); v27 = (const char *)v26(); v97 = atoi(v27); v28 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 360) + 452))()); v29 = **(_DWORD **)(v2[272] + 360); v95 = v28; v30 = (const char *)(*(int (**)(void))(v29 + 452))(); strncpy(v112, v30, v28); v31 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 368) + 452))()); v32 = **(_DWORD **)(v2[272] + 368); v95 = v31; v33 = (const char *)(*(int (**)(void))(v32 + 452))(); strncpy(v118, v33, v31); v34 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 360) + 452))(); v35 = (const char *)sub_451700(v34); if ( strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 360) + 452))(), v35) ) goto LABEL_3; if ( &v112[strlen(v112) + 1] == &v112[1] ) { v36 = sub_40C190(-449231809); v37 = (char *)(v112 - v36); do { v38 = *v36; v37[(_DWORD)v36] = *v36; ++v36; } while ( v38 ); } v39 = v2[271]; LOWORD(v98) = v98 & 0xFC2E | 0x2E; if ( *(_DWORD *)(v39 + 360) ) { v40 = (_DWORD *)(v39 + 344); if ( v40[5] >= 0x10u ) v40 = (_DWORD *)*v40; } else { v40 = (_DWORD *)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v39 + 448) + 484))(*(_DWORD *)(v39 + 448)); } if ( !v40 || (v41 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 360) + 452))(), strcmp((const char *)sub_4B1BE0(v2[271]), v41)) ) { sub_905F90(v2[584], &v98, 2u); sub_906000(v2[584], v112, 0x15u); Sleep(2u); } v42 = (void *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 368) + 452))(); v123 = 15; v122 = 0; LOBYTE(v121) = 0; sub_4018E0(&v121, v42, strlen((const char *)v42)); v43 = (unsigned __int8 *)v121; v44 = v2[271] + 400; v124 = 0; if ( v123 < 0x10 ) v43 = (unsigned __int8 *)&v121; v96 = sub_40C2F0((unsigned __int8 *)v44, 0, *(_DWORD *)(v44 + 16), v43, v122) != 0; v124 = -1; if ( v123 >= 0x10 ) operator delete(v121); if ( v96 ) { v45 = v2[584]; LOWORD(v98) = v98 & 0xFC2B | 0x2B; sub_905F90(v45, &v98, 2u); sub_906000(v2[584], v118, 9u); Sleep(2u); } if ( v97 == v99 ) { LABEL_39: v47 = (void *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 368) + 452))(); v123 = 15; v122 = 0; LOBYTE(v121) = 0; sub_4018E0(&v121, v47, strlen((const char *)v47)); v48 = v2[271]; v124 = 1; sub_4017F0((const void **)(v48 + 400), (const void **)&v121, 0, (void *)0xFFFFFFFF); v124 = -1; if ( v123 >= 0x10 ) operator delete(v121); if ( (*(int (**)(void))(**(_DWORD **)(v2[271] + 456) + 484))() ) { if ( !(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))() ) goto LABEL_47; v51 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[271] + 456) + 484))(); v50 = strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))(), v51) == 0; } else { if ( !(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))() ) goto LABEL_49; v49 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))(); v50 = &v49[strlen(v49) + 1] == v49 + 1; } if ( v50 ) goto LABEL_49; LABEL_47: v52 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))(); v53 = (const char *)sub_451700(v52); if ( !strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))(), v53) ) { memset(&v100[3], 0, 0x80u); v100[3] = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))()); v54 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))()); v55 = **(_DWORD **)(v2[272] + 372); v95 = v54; v56 = (const char *)(*(int (**)(void))(v55 + 452))(); strncpy(v101, v56, v54); v57 = v2[584]; LOWORD(v98) = v98 & 0xFC48 | 0x48; sub_905F90(v57, &v98, 2u); v58 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[272] + 372) + 452))()); sub_906000(v2[584], &v100[3], v58 + 1); Sleep(2u); LABEL_49: v59 = *(_DWORD *)(v2[272] + 356); if ( *(_BYTE *)(v2[271] + 428) != *(_BYTE *)(v59 + 380) ) { v60 = *(_BYTE *)(v59 + 380); v95 = 2; LOWORD(v98) = v98 & 0xFC43 | 0x43; v61 = v2[584]; v96 = v60; sub_905F90(v61, &v98, 2u); sub_906000(v2[584], &v96, 1u); Sleep(2u); } return; } LABEL_3: v5 = sub_40C190(610680710); sub_492060(v2, (int)v5); return; } LOWORD(v98) = v98 & 0xFC32 | 0x32; if ( v97 <= 0xFu ) { if ( v97 >= 2u ) { LABEL_38: sub_905F90(v2[584], &v98, 2u); sub_906000(v2[584], &v97, 1u); Sleep(2u); goto LABEL_39; } v46 = *(_DWORD *)(v2[271] + 432); } else { v46 = *(_DWORD *)(v2[271] + 432); } v97 = v46; goto LABEL_38; } LOWORD(v98) = v98 & 0xFC03 | 3; sub_905F90(this[584], &v98, 2u); *(_DWORD *)v103 = 0; v104 = 0; v105 = 0; v106 = 0; v107 = 0; v108 = 0; *(_DWORD *)v100 = 0; *(_DWORD *)v101 = 0; v102 = 0; memset(&v110, 0, 0x65u); v3 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 352) + 452))(); v4 = (const char *)sub_451700(v3); if ( strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 352) + 452))(), v4) ) goto LABEL_3; v6 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 364) + 452))(); v7 = (const char *)sub_451700(v6); if ( strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 364) + 452))(), v7) ) goto LABEL_3; v8 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 356) + 452))(); v9 = atoi(v8); v10 = v2[276]; v99 = v9; v11 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v10 + 352) + 452))()); v12 = **(_DWORD **)(v2[276] + 352); v95 = v11; v13 = (const char *)(*(int (**)(void))(v12 + 452))(); strncpy(v103, v13, v95); v14 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 360) + 452))()); v15 = **(_DWORD **)(v2[276] + 360); v95 = v14; v16 = (const char *)(*(int (**)(void))(v15 + 452))(); strncpy(v100, v16, v14); v17 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 364) + 452))()); v18 = **(_DWORD **)(v2[276] + 364); v95 = v17; v19 = (const char *)(*(int (**)(void))(v18 + 452))(); strncpy(&v110, v19, v95); if ( &v103[strlen(v103) + 1] == &v103[1] ) { v20 = sub_40C190(-449231809); v21 = (char *)(v103 - v20); do { v22 = *v20; v21[(_DWORD)v20] = *v20; ++v20; } while ( v22 ); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2[276] + 352) + 460))(v103); } if ( !v99 ) { sub_4B13B0((_DWORD **)v2[276], 2); v23 = (const char *)(*(int (**)(void))(**(_DWORD **)(v2[276] + 356) + 452))(); v99 = atoi(v23); LABEL_11: v109 = *(_BYTE *)(*(_DWORD *)(v2[276] + 348) + 380); qmemcpy(&v62, &v99, 0x84u); sub_4B0E80( byte_ADB468, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, (int)v94, v111); v95 = 133; v94 = (int *)&v99; sub_906000(v2[584], &v99, 0x85u); byte_ADB650 = 1; sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[276]); v95 = 2; v94 = &v98; v24 = v2[584]; LOWORD(v98) = v98 & 0xFC03 | 3; sub_905F90(v24, &v98, 2u); return; } if ( v99 <= 0xFu ) goto LABEL_11; sub_4B13B0((_DWORD **)v2[276], 15); v99 = sub_4B1390((_DWORD **)v2[276]); v25 = sub_40A910(1519154067); sub_492060(v2, (int)v25); } // ADB4F8: using guessed type int dword_ADB4F8; // ADB56C: using guessed type char byte_ADB56C; // ADB650: using guessed type char byte_ADB650; //----- (004AD610) -------------------------------------------------------- void __thiscall sub_4AD610(_DWORD *this, __int16 a2) { _DWORD *v2; // ebx _DWORD *v3; // ecx int v4; // esi int v5; // edi int v6; // ebx _DWORD *v7; // ST10_4 char *v8; // ecx unsigned int v9; // esi char *v10; // eax char *v11; // edi CHAR *v12; // eax int v13; // eax unsigned int v14; // edi unsigned int v15; // esi int v16; // eax char *v17; // esi CHAR *v18; // eax unsigned int v19; // ebx int v20; // edi unsigned int v21; // esi int *v22; // edi int v23; // ebx _DWORD *v24; // esi int v25; // eax void *v26; // [esp+10h] [ebp-84h] int v27; // [esp+14h] [ebp-80h] int v28; // [esp+20h] [ebp-74h] char *v29; // [esp+24h] [ebp-70h] unsigned int v30; // [esp+28h] [ebp-6Ch] _DWORD *v31; // [esp+2Ch] [ebp-68h] char *v32; // [esp+30h] [ebp-64h] unsigned int v33; // [esp+34h] [ebp-60h] char v34[56]; // [esp+38h] [ebp-5Ch] int v35; // [esp+70h] [ebp-24h] int v36; // [esp+74h] [ebp-20h] int v37; // [esp+78h] [ebp-1Ch] int v38; // [esp+7Ch] [ebp-18h] int v39; // [esp+80h] [ebp-14h] int v40; // [esp+90h] [ebp-4h] v2 = this; v31 = this; if ( this[1227] ) { `eh vector constructor iterator'(v34, 0x1Cu, 2, sub_401C00, sub_636A10); v3 = (_DWORD *)v2[1227]; v40 = 0; v33 = 0; v4 = sub_503FF0(v3, 0); v5 = sub_503FF0((_DWORD *)v2[1227], 1); v6 = sub_503FF0((_DWORD *)v2[1227], 2); v39 = sub_503FF0((_DWORD *)v31[1227], 3); v7 = (_DWORD *)(v31[1227] + 372); v35 = 4 * v4; v36 = v4; v37 = v5; v38 = v6; sub_4B2690(&v26, v7); v8 = (char *)v26; v9 = (v27 - (signed int)v26) >> 4; LOBYTE(v40) = 1; v30 = 0; if ( !v9 ) goto LABEL_38; v10 = v34; v32 = (char *)v26; do { if ( *(_DWORD *)v8 < 5u && *(&v35 + *(_DWORD *)v8) == *((_DWORD *)v8 + 2) ) { ++v33; v11 = v10; v29 = v10 + 28; v12 = (CHAR *)sub_40A910(-885975262); sub_4018E0(v11, v12, strlen(v12)); if ( v33 >= 2 ) goto LABEL_20; v10 = v29; v8 = v32; } v8 += 16; ++v30; v32 = v8; } while ( v30 < v9 ); if ( v33 < 2 ) { LABEL_38: v13 = *(_DWORD *)(dword_ACD9E8 + 56); if ( v13 ) v14 = *(_DWORD *)(v13 + 40); else v14 = 0; v15 = 0; if ( v14 ) { while ( 1 ) { v16 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v15); if ( v16 ) { if ( *(_WORD *)v16 == a2 ) break; } if ( ++v15 >= v14 ) goto LABEL_20; } if ( sub_4B1730((char *)(v16 + 2)) ) { v17 = &v34[28 * v33++]; v18 = (CHAR *)sub_40A910(-885975262); sub_4018E0(v17, v18, strlen(v18)); } } } LABEL_20: v19 = v33; if ( v33 ) { v20 = (int)v31; v21 = 420; do { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v21 + *(_DWORD *)(v20 + 4908))); v21 += 4; } while ( v21 < 0x1AC ); if ( v19 ) { v22 = (int *)v34; v23 = 420; v32 = (char *)v33; do { if ( v22[4] ) { v24 = *(_DWORD **)(v23 + v31[1227]); if ( v24 ) { if ( (unsigned int)v22[5] < 0x10 ) v25 = (int)v22; else v25 = *v22; sub_4FFD20((int)v24, v23, (int)v22, v25); sub_8F82A0(&unk_BA6B10, v24); v23 += 4; } } v22 += 7; --v32; } while ( v32 ); } v28 = 49; v29 = 0; sub_6B69F0(dword_AB6534, (int)&v28, 0.0, 0); } if ( v26 ) operator delete(v26); v40 = -1; `eh vector destructor iterator'(v34, 0x1Cu, 2, sub_636A10); } } // AB6534: using guessed type int dword_AB6534; // ACD9E8: using guessed type int dword_ACD9E8; // 4AD610: using guessed type char var_5C[56]; //----- (004AD8F0) -------------------------------------------------------- void __userpurge sub_4AD8F0(unsigned int a1@, double a2@, int a3, char *a4, void *a5) { unsigned int v5; // esi int v6; // ecx signed int v7; // ecx signed int v8; // eax signed int v9; // eax signed int v10; // ecx signed int v11; // eax signed int v12; // edx int v13; // ecx bool v14; // al _DWORD **v15; // ecx _DWORD **v16; // ecx int v17; // eax int v18; // eax const char *v19; // eax char *v20; // ecx char *v21; // ecx unsigned __int8 v22; // al int v23; // ecx int v24; // eax int v25; // edx int v26; // eax int v27; // edx int v28; // eax int v29; // ST18_4 char *v30; // eax char *v31; // ST1C_4 const CHAR *v32; // eax _DWORD *v33; // eax _DWORD ***v34; // edi signed int v35; // ebx _DWORD *v36; // esi _DWORD ***v37; // edi signed int v38; // ebx _DWORD *v39; // esi int v40; // [esp-8h] [ebp-4Ch] int v41; // [esp-4h] [ebp-48h] int v42; // [esp+Ch] [ebp-38h] int v43; // [esp+10h] [ebp-34h] int v44; // [esp+14h] [ebp-30h] int v45; // [esp+18h] [ebp-2Ch] int v46; // [esp+1Ch] [ebp-28h] int v47; // [esp+24h] [ebp-20h] char v48; // [esp+28h] [ebp-1Ch] char v49; // [esp+3Ch] [ebp-8h] v5 = a1; switch ( a3 ) { case 9: if ( !dword_ACEAFC ) dword_ACEAFC = 1; sub_4AB890(a1, (int)a5); sub_4A5E90((_DWORD *)v5); return; case 10: if ( !dword_ACEAFC ) dword_ACEAFC = 1; sub_4AB890(a1, (int)a5); return; case 11: sub_4A40B0((_DWORD *)a1, 0); return; case 12: sub_4A6310((_DWORD **)a1); return; case 13: sub_4A87B0((_DWORD **)a1); return; case 14: goto LABEL_115; case 15: goto LABEL_117; case 16: sub_4A6400((_DWORD **)a1); return; case 17: sub_4A6460((_DWORD **)a1); return; case 18: goto LABEL_119; case 19: goto LABEL_123; case 20: sub_4A4CA0((_DWORD **)a1); return; case 21: sub_4A67B0((_DWORD *)a1); return; case 22: sub_4A4CF0((_DWORD **)a1); return; case 24: sub_4A8F40(a1, (int)a4); return; case 25: sub_4A8D50((_DWORD *)a1); return; case 26: sub_4A9150(a1, (void (__thiscall ***)(_DWORD, signed int))a5); return; case 27: sub_4A4DE0((_DWORD *)a1); return; case 28: sub_4A4E40(); return; case 29: sub_4AC130(a1, a2); return; case 30: sub_4AA390((_DWORD *)a1); return; case 31: sub_4AA3B0((_DWORD *)a1); return; case 32: sub_4AA400((_DWORD *)a1); return; case 33: sub_4AA450((_DWORD *)a1); return; case 34: sub_4AA4A0((_DWORD *)a1); return; case 35: sub_4AA4F0((_DWORD *)a1); return; case 36: sub_496A00(); return; case 37: sub_496A10(); return; case 38: sub_496A20(); return; case 39: nullsub_7(); return; case 40: nullsub_8(); return; case 41: nullsub_9(); return; case 42: v6 = *(_DWORD *)(a1 + 1024); if ( v6 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v6 + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v5 + 1024)); else sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 1024)); } return; case 43: sub_4A7710((float *)a1); return; case 44: sub_4A9790((_DWORD *)a1); return; case 45: sub_4AB2F0((_DWORD *)a1, 0, 1); return; case 46: sub_4AB2F0((_DWORD *)a1, 1u, 1); return; case 47: sub_4AB2F0((_DWORD *)a1, 2u, 1); return; case 48: sub_4AB2F0((_DWORD *)a1, 3u, 1); return; case 49: sub_4AB2F0((_DWORD *)a1, 4u, 1); return; case 50: sub_4AB2F0((_DWORD *)a1, 5u, 1); return; case 51: sub_4AB2F0((_DWORD *)a1, 6u, 1); return; case 52: sub_4AB2F0((_DWORD *)a1, 7u, 1); return; case 53: sub_4AB2F0((_DWORD *)a1, 8u, 1); return; case 54: sub_4AB2F0((_DWORD *)a1, 9u, 1); return; case 55: sub_4AB2F0((_DWORD *)a1, 0xAu, 1); return; case 56: sub_4AB2F0((_DWORD *)a1, 0xBu, 1); return; case 57: sub_4AB2F0((_DWORD *)a1, 0x12u, 1); return; case 58: sub_4AB2F0((_DWORD *)a1, 0x13u, 1); return; case 59: sub_4AB2F0((_DWORD *)a1, 0x14u, 1); return; case 60: sub_4AB2F0((_DWORD *)a1, 0x15u, 1); return; case 61: sub_4AB2F0((_DWORD *)a1, 0x16u, 1); return; case 62: sub_4AB2F0((_DWORD *)a1, 0x17u, 1); return; case 63: sub_4AB2F0((_DWORD *)a1, 0x18u, 1); return; case 64: sub_4AB2F0((_DWORD *)a1, 0x19u, 1); return; case 65: sub_4AB2F0((_DWORD *)a1, 0x1Au, 1); return; case 66: sub_4AB2F0((_DWORD *)a1, 0x1Bu, 1); return; case 67: sub_4AB2F0((_DWORD *)a1, 0x1Cu, 1); return; case 68: sub_4AB2F0((_DWORD *)a1, 0x1Du, 1); return; case 69: sub_4AB2F0((_DWORD *)a1, 0x24u, 1); return; case 70: sub_4AB2F0((_DWORD *)a1, 0x25u, 1); return; case 71: sub_4AB2F0((_DWORD *)a1, 0x26u, 1); return; case 72: sub_4AB2F0((_DWORD *)a1, 0x27u, 1); return; case 73: sub_4AB2F0((_DWORD *)a1, 0x28u, 1); return; case 74: sub_4AB2F0((_DWORD *)a1, 0x29u, 1); return; case 75: sub_4AB2F0((_DWORD *)a1, 0x2Au, 1); return; case 76: sub_4AB2F0((_DWORD *)a1, 0x2Bu, 1); return; case 77: sub_4AB2F0((_DWORD *)a1, 0x2Cu, 1); return; case 78: sub_4AB2F0((_DWORD *)a1, 0x2Du, 1); return; case 79: sub_4AB2F0((_DWORD *)a1, 0x2Eu, 1); return; case 80: sub_4AB2F0((_DWORD *)a1, 0x2Fu, 1); return; case 81: sub_4AB2F0((_DWORD *)a1, 0x36u, 1); return; case 82: sub_4AB2F0((_DWORD *)a1, 0x37u, 1); return; case 83: sub_4AB2F0((_DWORD *)a1, 0x38u, 1); return; case 84: sub_4AB2F0((_DWORD *)a1, 0x39u, 1); return; case 85: sub_4AB2F0((_DWORD *)a1, 0x3Au, 1); return; case 86: sub_4AB2F0((_DWORD *)a1, 0x3Bu, 1); return; case 87: sub_4AB2F0((_DWORD *)a1, 0x3Cu, 1); return; case 88: sub_4AB2F0((_DWORD *)a1, 0x3Du, 1); return; case 89: sub_4AB2F0((_DWORD *)a1, 0x3Eu, 1); return; case 90: sub_4AB2F0((_DWORD *)a1, 0x3Fu, 1); return; case 91: sub_4AB2F0((_DWORD *)a1, 0x40u, 1); return; case 92: sub_4AB2F0((_DWORD *)a1, 0x41u, 1); return; case 93: sub_4AB2F0((_DWORD *)a1, (unsigned int)a4, (int)a5); return; case 97: sub_4A6820((_DWORD *)a1); return; case 98: sub_4A6880((_BYTE *)a1); return; case 99: sub_4A68A0((_BYTE *)a1); return; case 100: sub_4A68E0((_BYTE *)a1); return; case 101: sub_4A68C0((_BYTE *)a1); return; case 102: sub_4A6900((_DWORD *)a1); return; case 103: sub_4A9520((_DWORD *)a1); return; case 104: sub_4A6A00((void *)a1); return; case 105: sub_4A6A60((void *)a1); return; case 106: sub_4A7020((_DWORD **)a1); return; case 107: sub_4A9CD0((_DWORD **)a1); return; case 108: if ( !dword_ACD0B0 ) LABEL_115: sub_4A63A0((_DWORD **)a1); return; case 109: if ( !dword_ACD0B0 ) LABEL_117: sub_4A87F0((_DWORD **)a1); return; case 110: if ( !dword_ACD0B0 ) LABEL_119: sub_4AAED0((_DWORD *)a1); return; case 111: sub_4A6790((_DWORD **)a1); return; case 112: sub_4A9D20((_DWORD *)a1); return; case 113: sub_4A73D0((_DWORD *)a1); return; case 114: sub_4A7420((_DWORD *)a1); return; case 115: sub_4A7470((_DWORD *)a1); return; case 116: sub_4A74B0((_DWORD *)a1); return; case 117: sub_4B8250((_DWORD *)a1); return; case 118: sub_4A74F0((_DWORD *)a1, a5); return; case 119: sub_4A7540((_DWORD *)a1, a5); return; case 120: sub_4A7590((_DWORD *)a1, a5); return; case 128: sub_4A19C0(a1, (int (__thiscall ***)(_DWORD, signed int))a5, a4); return; case 129: sub_4A1BA0(a1, (int (__thiscall ***)(_DWORD, signed int))a5, a4); return; case 130: sub_4A1CA0(a1, (int (__thiscall ***)(_DWORD, signed int))a5, a4); return; case 132: sub_4A76B0((_DWORD *)a1); return; case 134: sub_4A42A0((char *)a1); return; case 135: sub_4A4560((_DWORD *)a1, *(_DWORD *)(a1 + 672), *(_DWORD *)(a1 + 652)); return; case 136: sub_4A4560((_DWORD *)a1, *(_DWORD *)(a1 + 652), *(_DWORD *)(a1 + 672)); return; case 137: sub_4A47F0((_DWORD *)a1, *(_DWORD *)(a1 + 4 * (_DWORD)a4 + 676), *(_DWORD *)(a1 + 4 * (_DWORD)a4 + 656)); return; case 138: sub_4A47F0((_DWORD *)a1, *(_DWORD *)(a1 + 4 * (_DWORD)a4 + 656), *(_DWORD *)(a1 + 4 * (_DWORD)a4 + 676)); return; case 139: sub_4A4AB0((_DWORD **)a1); return; case 140: if ( !dword_ACD0B0 ) { byte_ACEAFA = 1; sub_496DD0((int *)a1); } return; case 141: sub_4A0EC0(a1); return; case 142: v7 = 800; v8 = 600; goto LABEL_147; case 143: v41 = 768; dword_AAEBA8 = 1024; dword_AAEBAC = 768; dword_AB680A = 1024; dword_AB680E = 768; v40 = 1024; goto LABEL_149; case 144: v9 = 1280; goto LABEL_152; case 145: v9 = 1280; v10 = 960; goto LABEL_153; case 146: v11 = 1280; v12 = 1024; goto LABEL_156; case 147: v7 = 1400; v8 = 1050; goto LABEL_147; case 148: v11 = 1600; v12 = 1200; LABEL_156: v41 = v12; dword_AAEBAC = v12; dword_AB680E = v12; dword_AAEBA8 = v11; dword_AB680A = v11; v40 = v11; goto LABEL_149; case 149: case 154: v9 = 1600; v10 = 900; goto LABEL_153; case 150: v7 = 1920; v8 = 1440; goto LABEL_147; case 151: v7 = 1920; dword_AAEBAC = 1200; dword_AB680E = 1200; v41 = 1200; goto LABEL_148; case 152: v7 = 1680; v8 = 1050; goto LABEL_147; case 153: v9 = 1280; v10 = 800; goto LABEL_153; case 155: v9 = 1440; v10 = 900; goto LABEL_153; case 156: v7 = 1920; v8 = 1080; goto LABEL_147; case 157: v7 = 2560; v8 = 1440; goto LABEL_147; case 158: v7 = 2560; v8 = 1600; goto LABEL_147; case 159: v7 = 3840; v8 = 2160; goto LABEL_147; case 160: v9 = 1366; LABEL_152: v10 = 768; LABEL_153: v41 = v10; dword_AAEBAC = v10; dword_AB680E = v10; dword_AAEBA8 = v9; dword_AB680A = v9; v40 = v9; goto LABEL_149; case 161: v7 = 3440; v8 = 1440; LABEL_147: dword_AAEBAC = v8; dword_AB680E = v8; v41 = v8; LABEL_148: dword_AAEBA8 = v7; dword_AB680A = v7; v40 = v7; LABEL_149: byte_ACEAFA = 1; sub_5CC6F0(*(_DWORD ***)(v5 + 920), v40, v41); sub_496DD0((int *)v5); break; case 162: if ( !dword_ACD0B0 ) LABEL_123: sub_4A8B80((_DWORD **)a1); break; case 163: sub_4A98A0((void *)a1); break; case 164: sub_4A99C0(a1, (int)a5); break; case 165: sub_4A9B00(a1, (int)a5); break; case 166: sub_4A9C40((_DWORD **)a1); break; case 167: byte_ACF576 = 0; break; case 172: sub_4A8320((_DWORD *)a1); break; case 173: sub_4A8370(a1, a2); break; case 175: *(_BYTE *)(a1 + 2654) = *(_BYTE *)(a1 + 2654) == 0; break; case 176: *(_BYTE *)(a1 + 2655) = *(_BYTE *)(a1 + 2655) == 0; break; case 177: *(_BYTE *)(a1 + 2656) = *(_BYTE *)(a1 + 2656) == 0; break; case 178: *(_BYTE *)(a1 + 2657) = *(_BYTE *)(a1 + 2657) == 0; break; case 179: v13 = *(_DWORD *)(a1 + 548); v14 = *(_BYTE *)(v5 + 2658) == 0; *(_BYTE *)(v5 + 2658) = v14; *(_BYTE *)(v13 + 296) = v14; break; case 181: v15 = *(_DWORD ***)(a1 + 572); if ( v15 ) sub_56C150(v15); break; case 182: v16 = *(_DWORD ***)(a1 + 572); if ( v16 ) sub_569910(v16); break; case 183: sub_4A8220((_DWORD **)a1); break; case 184: sub_4A6350((_DWORD **)a1); break; case 185: case 191: sub_4A4060((_DWORD **)a1); break; case 187: sub_604720(*(void **)(a1 + 704)); break; case 188: sub_604710(*(void **)(a1 + 704)); break; case 189: sub_604700(*(void **)(a1 + 704)); break; case 190: sub_6046F0(*(void **)(a1 + 704)); break; case 192: case 214: sub_4A88A0((_DWORD **)a1); break; case 195: sub_4A79F0((_DWORD *)a1, *(_WORD *)(*(_DWORD *)(a1 + 1084) + 440)); break; case 196: sub_6DB4C0(byte_ADB468); break; case 197: sub_4A8AE0((_DWORD *)a1, 1); break; case 198: sub_4A8950((_DWORD *)a1); break; case 199: sub_4A64F0((_DWORD *)a1); break; case 200: sub_4A33D0((_DWORD **)a1); break; case 201: sub_4ACB00((_DWORD *)a1, (int)a4); break; case 205: v19 = (const char *)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(a1 + 1072) + 344) + 452))(); sub_4C9100((_DWORD *)v5, *(_WORD *)(*(_DWORD *)(v5 + 1072) + 348), v19); break; case 206: sub_4A78C0(a1, (void (__thiscall ***)(_DWORD, signed int))a5); break; case 215: sub_4ABFA0((_DWORD *)a1); break; case 216: sub_4A88F0((_DWORD *)a1); break; case 217: sub_4A4BA0((_DWORD *)a1); break; case 219: sub_4AAC10((_DWORD *)a1, 2); break; case 220: sub_4AA940(); break; case 221: if ( dword_ADB600 ) { sub_69BE40( (float *)byte_ADB468, *(_DWORD *)(a1 + 520), *(_DWORD *)(a1 + 524), *(_DWORD *)(a1 + 528), *(_DWORD *)(a1 + 532), *(_DWORD *)(a1 + 536), *(_DWORD *)(a1 + 540), (int)&v44, 0); v22 = sub_6DD410(dword_ADB600, (float *)&v44); sub_6DC3F0((int)byte_ADB468, (int)&v44, v22, (int)a4); } break; case 222: sub_4A8A70((_DWORD **)a1, dword_ADB600); break; case 223: v17 = *(_DWORD *)(a1 + 1084); if ( *(_DWORD *)(v17 + 416) ) { v18 = v17 + 400; if ( *(_DWORD *)(v18 + 20) >= 0x10u ) v18 = *(_DWORD *)v18; sub_4B12E0(*(_DWORD ***)(a1 + 1088), (const CHAR *)v18); } break; case 224: sub_4A7B20((_DWORD **)a1, (int)a4); break; case 225: sub_4A7BC0((_DWORD *)a1, (int)a4); break; case 226: sub_4A5880(); break; case 227: sub_4A58A0(); break; case 228: sub_4A8AE0((_DWORD *)a1, 0); break; case 229: sub_4A65F0(); break; case 230: sub_4A6670((_DWORD *)a1); break; case 231: sub_4A66E0((_DWORD *)a1); break; case 232: sub_6DC230((int)byte_ADB468); break; case 233: v20 = *(char **)(a1 + 716); if ( v20 ) sub_537470(v20); OutputDebugStringA("PGFM_CHARINV_LOCK\n"); break; case 234: v21 = *(char **)(a1 + 716); if ( v21 ) sub_537640(v21); OutputDebugStringA("PGFM_CHARINV_UNLOCK\n"); break; case 235: sub_4A7F00((_DWORD *)a1); break; case 236: sub_4A3570((_DWORD **)a1); break; case 237: sub_5C90A0(*(_DWORD **)(a1 + 612), 0); break; case 238: sub_5C90A0(*(_DWORD **)(a1 + 612), 1); break; case 239: sub_5C90A0(*(_DWORD **)(a1 + 612), 2); break; case 240: sub_5C90A0(*(_DWORD **)(a1 + 612), 3); break; case 241: sub_5C90A0(*(_DWORD **)(a1 + 612), 4); break; case 242: v23 = *(_DWORD *)(a1 + 1072); LOWORD(v47) = (_WORD)a4; *(_WORD *)(v23 + 348) = (_WORD)a4; v24 = sub_4A3ED0(&unk_B9E1CC, (char)a4); if ( v24 ) sub_4B27E0(*(_DWORD **)(v5 + 1084), (void *)(v24 + 40), 0); sub_4B72A0((_DWORD *)v5, 35, 14, &v47, 2u); break; case 244: sub_4A4130((_DWORD *)a1, (int)&unk_9BB930); break; case 245: sub_4AAF70((_DWORD *)a1); break; case 246: sub_4AAFC0((_DWORD *)a1); break; case 247: sub_4AB080((_DWORD *)a1); break; case 248: sub_4AB170((_DWORD *)a1); break; case 249: sub_4AB230((_DWORD *)a1); break; case 250: sub_6047A0(*(void **)(a1 + 704)); break; case 251: sub_4A7F90((_DWORD *)a1); break; case 252: if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() || !sub_65BA20(dword_AD8EBC) ) { sub_4E3330((_DWORD *)(v5 + 36), *(_BYTE *)(v5 + 42) == 0); sub_4DE8F0((float *)v5, 0, 0.0); } break; case 253: sub_4A7FF0((_DWORD *)a1, a4 == (char *)1); break; case 254: sub_4A5490((_DWORD *)a1); break; case 255: if ( sub_6857A0(&byte_ADA230, &v47) ) sub_4BF1B0( (_DWORD *)v5, (v47 ^ (unsigned __int16)a4) & 0x3FF ^ v47, (unsigned __int16)a5 & 0x3FF | (unsigned __int16)a5 & 0xFC00); break; case 256: if ( a5 ) { v25 = *(_DWORD *)a5; v26 = *((_DWORD *)a5 + 1); v44 = *((_DWORD *)a5 + 2); v42 = v25; v27 = *((_DWORD *)a5 + 3); v43 = v26; v28 = *((_DWORD *)a5 + 4); v45 = v27; v46 = v28; sub_4169E0(&v42, (int)&v48); v49 = 0; v29 = (*(int (__cdecl **)(char *))(*(_DWORD *)dword_AD8EBC + 84))(&v48); v30 = (char *)sub_40A910(-1682528011); v31 = sub_7549E0(v30, v29); v32 = sub_40A910(-1734087687); sub_4C8870( (_DWORD *)v5, *(_DWORD *)a5, *((_DWORD *)a5 + 1), *((_DWORD *)a5 + 2), *((_DWORD *)a5 + 3), *((_DWORD *)a5 + 4), 30000, (int)v32, (int)v31); operator delete(a5); } break; case 257: case 259: if ( a5 ) operator delete(a5); break; case 258: if ( a5 ) { sub_4CD4F0( (_DWORD *)a1, *(_DWORD *)a5, *((_DWORD *)a5 + 1), *((_DWORD *)a5 + 2), *((_DWORD *)a5 + 3), *((_DWORD *)a5 + 4)); operator delete(a5); } break; case 260: sub_4A5790((_DWORD *)a1, (__int16)a5); break; case 261: sub_4BF200((_DWORD *)a1, (__int16)a5); break; case 263: sub_4D4E00((_DWORD *)a1, (unsigned int)a5); break; case 264: if ( *(_DWORD *)(a1 + 716) ) dword_ACEC24 = (int)a5; break; case 266: v33 = (_DWORD *)sub_4A3820(); sub_46EE40(v33, 1); if ( *(_DWORD *)(v5 + 716) ) dword_ACEC24 = 0; *(_BYTE *)(v5 + 696) = 0; break; case 267: sub_4A5C60((_DWORD **)a1); break; case 268: sub_4BF390((_DWORD *)a1, a2, (char)a4); v34 = (_DWORD ***)(v5 + 4916); v35 = 4; do { v36 = *v34; if ( *v34 ) { sub_4FDB70(*v34); sub_8F86A0(&unk_BA6B10, v36); } ++v34; --v35; } while ( v35 ); break; case 269: v37 = (_DWORD ***)(a1 + 4916); v38 = 4; do { v39 = *v37; if ( *v37 ) { sub_4FDB70(*v37); sub_8F86A0(&unk_BA6B10, v39); } ++v37; --v38; } while ( v38 ); break; case 270: sub_4C0900((_DWORD *)a1, (int)a4); break; case 271: sub_55CB50(*(_DWORD *)(a1 + 1128)); break; default: return; } } // 496A30: using guessed type int nullsub_7(void); // 496A40: using guessed type int nullsub_8(void); // 496A50: using guessed type int nullsub_9(void); // AB680A: using guessed type int dword_AB680A; // AB680E: using guessed type int dword_AB680E; // ACD0B0: using guessed type int dword_ACD0B0; // ACEAFA: using guessed type char byte_ACEAFA; // ACEAFC: using guessed type int dword_ACEAFC; // ACEC24: using guessed type int dword_ACEC24; // ACF576: using guessed type char byte_ACF576; // ADA230: using guessed type char byte_ADA230; // ADB600: using guessed type int dword_ADB600; //----- (004AF770) -------------------------------------------------------- void __thiscall sub_4AF770(void *this, int a2) { char *v2; // ebx char v3; // al int v4; // esi signed int v5; // ecx char *v6; // edx char v7; // al int v8; // eax _DWORD *v9; // eax const CHAR *v10; // eax unsigned __int8 v11; // bl int v12; // eax _DWORD *v13; // eax char v14; // al unsigned __int16 v15; // [esp+Ch] [ebp-38h] int v16; // [esp+Eh] [ebp-36h] char v17; // [esp+17h] [ebp-2Dh] int v18; // [esp+18h] [ebp-2Ch] int v19; // [esp+1Ch] [ebp-28h] char v20[32]; // [esp+20h] [ebp-24h] v2 = *(char **)a2; v3 = **(_BYTE **)a2; v4 = (int)this; v5 = 0; v19 = v4; if ( v3 ) { v6 = (char *)(v20 - v2); do { if ( v3 == 32 ) break; if ( v5 >= 31 ) break; v2[(_DWORD)v6] = v3; v3 = (v2++)[1]; ++v5; } while ( v3 ); } v7 = *v2; for ( v20[v5] = 0; v7; v7 = (v2++)[1] ) { if ( v7 != 32 && v7 != 9 ) break; } if ( !strcmp(v20, "server_ack") ) { LOBYTE(v19) = atoi(v2); sub_4B7750((_DWORD *)v4, v19); } else if ( !strcmp(v20, "opendlg") ) { if ( !strcmp(v2, "itemupgrade") ) { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v4); dword_ACEC24 = 0; sub_4A7320((_DWORD **)v4); } else if ( !strcmp(v2, "weapontitle") ) { sub_54D7C0(*(_DWORD **)(v4 + 556)); dword_ACEC24 = 0; if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v4); sub_4A6B50((_DWORD **)v4); } else if ( !strcmp(v2, "enchant") ) { sub_54D7C0(*(_DWORD **)(v4 + 556)); dword_ACEC24 = 0; if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v4); byte_ACEBE0 = 1; sub_4A6AC0((_DWORD **)v4); } else if ( !strcmp(v2, "kingdomquestwin") ) { sub_4A5060((_DWORD *)v4, 1); sub_4B75F0((_DWORD *)v4); } else if ( !strcmp(v2, "make_karis") ) { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 1128) + 260))() ) { sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 716)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 1128)); } } else if ( !strcmp(v2, "guildmenu") ) { v8 = sub_6D3880(); if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v8 + 260))(v8) ) { v9 = (_DWORD *)sub_6D3880(); sub_8F82A0(&unk_BA6B10, v9); } } else if ( !strcmp(v2, "moverupgrade") ) { if ( sub_4F3200(*(float **)(v4 + 1036)) || dword_AD8EBC[1924] == 6 ) { v10 = sub_4090F0(-489754875); sub_492060((_DWORD *)v4, (int)v10); sub_615820(*(_DWORD ***)(v4 + 980)); } else { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v4); sub_4A7390((_DWORD **)v4); dword_ACEC24 = 0; } } else if ( !strcmp(v2, "itemmix") ) { dword_ACEC24 = 0; if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 716) + 260))() ) sub_4A6BA0((_DWORD **)v4); sub_4A75D0((_DWORD **)v4); } } else if ( !strcmp(v20, "HolyReward_Req") ) { sub_4B72A0((_DWORD *)v4, 37, 60, &v17, 1u); sub_615820(*(_DWORD ***)(v4 + 980)); } else if ( !strcmp(v20, "linkto") ) { sscanf(v2, "%d %d", &v18, &v19); sub_615820(*(_DWORD ***)(v4 + 980)); sub_6175B0(*(void **)(v4 + 980), v18, v19); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 980)); } else if ( !strcmp(v20, "quest_ack") ) { v11 = atoi(v2); v12 = *(_DWORD *)(a2 + 12); if ( v12 != -1 ) { v15 = *(_WORD *)(a2 + 4); v16 = v12; v13 = sub_6CD770(); if ( v13 ) { v18 = v15; *(_DWORD *)sub_4B2760(v13 + 45, &v18) = v16; v4 = v19; } sub_4B72A0((_DWORD *)v4, 17, 17, &v15, 6u); } sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), v11); } else if ( !strcmp(v20, "logout") ) { if ( !strcmp(v2, "beautyshop") ) sub_4A8C00((_DWORD *)v4); } else if ( !strcmp(v20, "getin") ) { if ( !strcmp(v2, "weddinghall") ) sub_6F3D10(&off_AB7F2C, 8, 86, 0, 0); } else if ( !strcmp(v20, "Gladiator") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 4); } else if ( !strcmp(v20, "Knight") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 5); } else if ( !strcmp(v20, "HolyKnight") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 9); } else if ( !strcmp(v20, "Guardian") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 10); } else if ( !strcmp(v20, "SharpShooter") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 14); } else if ( !strcmp(v20, "Ranger") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 15); } else if ( !strcmp(v20, "Warrock") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 19); } else if ( !strcmp(v20, "Wizard") ) { if ( *(_DWORD *)(a2 + 4) != -1 ) sub_4A5800((_DWORD *)v4, *(_WORD *)(a2 + 4), *(_BYTE *)(a2 + 8), 20); } else if ( !strcmp(v20, "NpcAct") ) { v14 = atoi(v2); sub_4BF840((_DWORD *)v4, v14); } } // AB7F2C: using guessed type void **off_AB7F2C; // ACEBE0: using guessed type char byte_ACEBE0; // ACEC24: using guessed type int dword_ACEC24; // 4AF770: using guessed type char var_24[32]; //----- (004B0210) -------------------------------------------------------- void __thiscall sub_4B0210(int this, int a2, unsigned __int8 *a3, int a4) { int v4; // esi float **v5; // ecx _DWORD *v6; // esi int v7; // ecx int v8; // eax char *v9; // edi char *v10; // edi char *v11; // edi int v12; // edi char *v13; // eax int v14; // edi const char *v15; // edi int v16; // eax char *v17; // edi char *v18; // edi char *v19; // edi char *v20; // edi char *v21; // edi char *v22; // edi const char *v23; // eax int *v24; // eax int *v25; // eax char *v26; // edi _BYTE *v27; // eax _BYTE *v28; // edi const CHAR *v29; // eax int v30; // edi int v31; // edi _DWORD *v32; // eax _DWORD **v33; // ecx int v34; // edi int v35; // edi int v36; // ecx _DWORD *v37; // ecx int v38; // edi int v39; // ecx float *v40; // eax char *v41; // eax _WORD *v42; // ecx __int16 v43; // ax char *v44; // eax _WORD *v45; // ecx __int16 v46; // ax __int16 v47; // ax _WORD *v48; // eax int v49; // eax char *v50; // eax char *v51; // eax volatile LONG *v52; // eax int v53; // edx int v54; // [esp-10h] [ebp-A0h] int v55; // [esp-Ch] [ebp-9Ch] int v56; // [esp-8h] [ebp-98h] int v57; // [esp-4h] [ebp-94h] float v58; // [esp+0h] [ebp-90h] char v59; // [esp+10h] [ebp-80h] char v60; // [esp+23h] [ebp-6Dh] int v61; // [esp+24h] [ebp-6Ch] int *v62; // [esp+28h] [ebp-68h] char v63; // [esp+2Ch] [ebp-64h] char v64; // [esp+40h] [ebp-50h] char v65; // [esp+54h] [ebp-3Ch] int v66; // [esp+5Ch] [ebp-34h] int v67; // [esp+60h] [ebp-30h] char v68; // [esp+68h] [ebp-28h] char v69; // [esp+7Ch] [ebp-14h] int v70; // [esp+8Ch] [ebp-4h] v4 = this; switch ( a2 ) { case 15: v8 = *(_DWORD *)a3; if ( *(_DWORD *)a3 > 1005 ) { switch ( v8 ) { case 1014: if ( sub_718A50(&dword_B9E560) ) { v23 = (const char *)*((_DWORD *)a3 + 2); v61 = 4; sub_718EA0(&dword_B9E560, v23, (unsigned int *)&v61, (int *)&v62); if ( v61 != 4 ) { sub_71ACE0(*(_BYTE **)(v4 + 4 * v61 + 1224), (int)v62); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 4 * v61 + 1224) + 260))() ) { if ( dword_B9DCC4 ) sub_4A3F00(*(char **)(v4 + 724), *((const char **)a3 + 2)); } } } else if ( dword_B9DCC4 ) { sub_4A3F00(*(char **)(v4 + 724), *((const char **)a3 + 2)); } break; case 1020: v15 = (const char *)*((_DWORD *)a3 + 2); if ( v15 ) { v16 = sub_6645B0(dword_AD8C90, v15); if ( v16 ) sub_4A7770((_DWORD *)v4, v16); } break; case 1021: v17 = (char *)*((_DWORD *)a3 + 2); if ( v17 ) { v62 = &v54; sub_416970((char *)&v54, v17); sub_4CB290((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1022: v18 = (char *)*((_DWORD *)a3 + 2); if ( v18 ) { v62 = &v54; sub_416970((char *)&v54, v18); sub_4CB990((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1023: sub_4BE160((_DWORD *)this); break; case 1024: v19 = (char *)*((_DWORD *)a3 + 2); if ( v19 ) { v62 = &v54; sub_416970((char *)&v54, v19); sub_4CBE20((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1025: v20 = (char *)*((_DWORD *)a3 + 2); if ( v20 ) { v62 = &v54; sub_416970((char *)&v54, v20); sub_4CC200((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1026: v21 = (char *)*((_DWORD *)a3 + 2); if ( v21 ) { v62 = &v54; sub_416970((char *)&v54, v21); sub_4CBFA0((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1027: v22 = (char *)*((_DWORD *)a3 + 2); if ( v22 ) { v62 = &v54; sub_416970((char *)&v54, v22); sub_4CC0C0((_DWORD *)v4, v54, v55, v56, v57, SLODWORD(v58)); } break; case 1031: if ( *(_DWORD *)(this + 972) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); if ( *(_DWORD *)(v4 + 1284) ) { sub_4A8140(v4, 166); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 1284)); } break; case 1034: v24 = (int *)sub_416970(&v63, *((char **)a3 + 2)); sub_4CD900((_DWORD *)v4, v24); break; case 1035: v25 = (int *)sub_416970(&v64, *((char **)a3 + 2)); sub_4C1AF0(v4, *v25, v25[1], v25[2], v25[3], v25[4]); break; case 1036: v26 = (char *)*((_DWORD *)a3 + 2); v62 = &v54; sub_416970((char *)&v54, v26); v27 = sub_6648F0(dword_AD8C90, v54, v55, v56, v57, SLODWORD(v58)); v28 = v27; if ( v27 ) { if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v27 + 488))(v27) ) { v30 = *((_DWORD *)v28 + 731); if ( v30 ) { if ( sub_7447B0((_DWORD *)v30, (unsigned int *)&v62) ) sub_4BFAE0((_DWORD *)v4, *(_WORD *)(v30 + 548), (char)v62); } } } else { v29 = sub_4090F0(1686538963); sub_492060((_DWORD *)v4, (int)v29); } break; case 1037: v31 = *((_DWORD *)a3 + 2); v32 = (_DWORD *)sub_680810(byte_AD9238); sub_4169E0(v32, (int)&v68); v33 = *(_DWORD ***)(v4 + 4988); v69 = 0; sub_5C3E80(v33, (int)&v68); sub_5C3EE0(*(_DWORD ***)(v4 + 4988), v31); sub_4BFF30((_DWORD *)v4); break; default: return; } } else if ( *(_DWORD *)a3 == 1005 ) { sub_52CE20(*(_DWORD ***)(this + 892), *((_DWORD *)a3 + 2)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 892)); } else { switch ( v8 ) { case 1: v12 = *((_DWORD *)a3 + 2); if ( *(_DWORD *)(this + 972) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); if ( v12 ) sub_4C1A70((_DWORD *)v4, *(_WORD *)(v12 + 548)); return; case 2: v11 = (char *)*((_DWORD *)a3 + 2); if ( *(_DWORD *)(this + 972) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); if ( v11 ) sub_4C1490((_DWORD *)v4, v11); return; case 3: v10 = (char *)*((_DWORD *)a3 + 2); if ( *(_DWORD *)(this + 972) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); if ( v10 ) sub_4C1600((_DWORD *)v4, v10); return; case 4: v9 = (char *)*((_DWORD *)a3 + 2); if ( v9 ) sub_4C1700((_DWORD *)this, v9); v6 = *(_DWORD **)(v4 + 972); goto LABEL_7; case 5: if ( *(_DWORD *)(this + 972) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); sub_4C15B0((_DWORD *)v4); return; case 6: v14 = sub_6645B0(dword_AD8C90, *((const char **)a3 + 2)); sub_8D06A0((float *)(v4 + 116), flt_ACCFCC); LODWORD(v58) = 1; *(float *)(v4 + 136) = 1.0; sub_4DE8F0((float *)v4, v14, v58); return; case 7: sub_606A20(*(_DWORD ***)(this + 704), *((char **)a3 + 2)); return; case 8: sub_6F3D10(&off_AB7F2C, 4, 176, 0, 0); return; case 9: v6 = *(_DWORD **)(this + 972); goto LABEL_7; case 10: v13 = (char *)sub_4B2590(); sub_4A4000(v13, *((char **)a3 + 2)); break; default: return; } } return; case 23: sub_4C3390((_DWORD *)this, (int)a3); return; case 24: sub_4B8EF0((int *)this, (int)a3); return; case 25: sub_492060((_DWORD *)this, (int)a3); return; case 26: sub_492090((_DWORD *)this, (int)a3); return; case 27: if ( !*(_DWORD *)(this + 1260) ) return; if ( *(_DWORD *)a3 ) { if ( *(_DWORD *)a3 != 1 ) goto LABEL_105; v58 = 0.0; } else { LODWORD(v58) = 1; } sub_4CB420((_DWORD *)this, SLOBYTE(v58)); LABEL_105: v38 = *(_DWORD *)(v4 + 1260); if ( v38 ) { if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v38 ) (**(void (__thiscall ***)(int, signed int))v38)(v38, 1); *(_DWORD *)(v4 + 1260) = 0; } return; case 37: sub_4AF770((void *)this, (int)a3); return; case 40: sub_4A54D0((_DWORD *)this); sub_4A9E30((_DWORD *)v4, *(_DWORD *)a3); return; case 41: sub_5E3E70(*(unsigned __int8 **)(this + 868)); return; case 45: sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 1144)); return; case 46: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 1148)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 1148)); sub_5DE410(*(_DWORD ***)(v4 + 1148), (int)a3); return; case 50: sub_5DFC20(*(_DWORD ***)(this + 1144)); return; case 51: sub_5DFEC0(*(_DWORD ***)(this + 1144)); return; case 52: v34 = *(_DWORD *)a3; sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 604)); sub_59B050(*(_DWORD **)(v4 + 604), v34); return; case 53: v35 = *(_DWORD *)a3; sub_5C9E30(*(_BYTE **)(this + 612)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 612)); sub_5C8D70(*(_DWORD **)(v4 + 612), v35); return; case 54: sub_6F3B60(&off_AB7F2C); v36 = *(_DWORD *)(v4 + 2340); *(_BYTE *)(v4 + 2344) = 1; LOWORD(v61) = 3103; if ( v36 ) { sub_905F90(v36, &v61, 2u); sub_906000(*(_DWORD *)(v4 + 2340), &v60, 1u); } return; case 55: sub_5AF520(*(_DWORD ***)(this + 728)); return; case 57: v5 = *(float ***)(this + 1076); if ( v5 ) sub_4B11E0(v5); return; case 58: sub_4ABFA0((_DWORD *)this); return; case 60: sub_4AAC10((_DWORD *)this, 0); return; case 61: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 972)); sub_4B1DB0(*(_DWORD *)(v4 + 1084)); sub_4B1F50(*(_DWORD ***)(v4 + 1092)); return; case 62: sub_4AAC10((_DWORD *)this, *(_DWORD *)a3); return; case 63: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 1108)); return; case 64: sub_8EEE70((_DWORD *)this, 225, 1, 0); return; case 65: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 1112)); v7 = *(_DWORD *)(v4 + 1116); if ( v7 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v7 + 260))() ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 1116) + 256))(1); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 1116)); } return; case 66: v6 = *(_DWORD **)(this + 1080); LABEL_7: if ( v6 ) sub_8F86A0(&unk_BA6B10, v6); return; case 67: sub_5AF570(*(_DWORD **)(this + 728), *a3); return; case 71: sub_70F470(*(_DWORD **)(this + 900)); return; case 72: v39 = *(_DWORD *)(this + 1216); LOWORD(v62) = *(_WORD *)a3; sub_68C180(v39, (unsigned __int16)v62); sub_8F9D50(&unk_BA6B10, *(volatile LONG **)(v4 + 1216), 0, 0, 0); return; case 73: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 1148)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 644)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 644)); v40 = sub_4B1B10((float *)&v59, 0x23u); sub_5E9030( *(float ***)(v4 + 644), (int)a3, *(_DWORD *)v40, *((_DWORD *)v40 + 1), *((_DWORD *)v40 + 2), *((_DWORD *)v40 + 3), 0, 0.0); return; case 76: v37 = *(_DWORD **)(this + 568); if ( v37 ) sub_5BD4E0(v37, 0, *a3, 0); return; case 79: v41 = (char *)sub_443D80(*(_DWORD ***)(this + 4976)); v62 = &v55; sub_4B0E50((char *)&v55, v41); v42 = *(_WORD **)(v4 + 4976); v70 = 0; v43 = sub_443DC0(v42); v70 = -1; sub_4AC870((void *)v4, v43, v55, v56, v57, SLODWORD(v58)); return; case 80: v44 = (char *)sub_443D80(*(_DWORD ***)(this + 4976)); v62 = &v55; sub_4B0E50((char *)&v55, v44); v45 = *(_WORD **)(v4 + 4976); v70 = 1; v46 = sub_443DC0(v45); v70 = -1; sub_4CDF80(v46, v55, v56, v57, SLODWORD(v58)); return; case 81: v47 = sub_443DC0(*(_WORD **)(this + 4976)); sub_4B6590(v47); return; case 82: if ( a3 ) { v48 = sub_4B1D30(*((_WORD *)a3 + 2)); if ( v48 ) { v49 = sub_40C8D0(v48 + 1); if ( v49 ) { LODWORD(v58) = v49 + 34; v50 = (char *)sub_4090F0(1819840425); v51 = sub_7549E0(v50, v58); v52 = sub_462C30(2, v51); if ( v52 ) { v53 = *(_DWORD *)a3; v66 = 270; v67 = v53; sub_461760(v52, v4, &v65, 0); } } } } return; default: return; } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; //----- (004B0D60) -------------------------------------------------------- char *sub_4B0D60() { return dword_BA47E8; } //----- (004B0D70) -------------------------------------------------------- int __cdecl sub_4B0D70(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA74: using guessed type int dword_ACDA74; //----- (004B0DC0) -------------------------------------------------------- int __cdecl sub_4B0DC0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACB6C4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (004B0E20) -------------------------------------------------------- void *__thiscall sub_4B0E20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,ScriptBtn *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9BBB8C: using guessed type void *NiTListBase,ScriptBtn *>::`vftable'; //----- (004B0E50) -------------------------------------------------------- char *__thiscall sub_4B0E50(char *this, char *a2) { char *v2; // esi v2 = this; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; strncpy(this, a2, 0x10u); return v2; } //----- (004B0E80) -------------------------------------------------------- char *__thiscall sub_4B0E80(char *this, char a2, 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, char a35) { char *v35; // ebx char *result; // eax char v37; // [esp+Ch] [ebp-8Ch] char v38; // [esp+Dh] [ebp-8Bh] char v39; // [esp+16h] [ebp-82h] char v40; // [esp+90h] [ebp-8h] v35 = this; qmemcpy(&v37, &a2, 0x84u); v40 = a35; strncpy(this + 270, &v39, 0x14u); result = strncpy(v35 + 261, &v38, 8u); v35[260] = v37; return result; } //----- (004B0F00) -------------------------------------------------------- int __thiscall sub_4B0F00(_DWORD *this) { int result; // eax *this = 0; this[1] = 0; *((_WORD *)this + 4) = 0; *((_BYTE *)this + 10) = 0; this[3] = dword_BA45C0; this[4] = dword_BA45C4; this[5] = dword_BA45C8; this[6] = dword_BA45C0; this[7] = dword_BA45C4; this[8] = dword_BA45C8; this[9] = dword_BA45C0; this[10] = dword_BA45C4; this[11] = dword_BA45C8; this[12] = dword_BA45C0; this[13] = dword_BA45C4; this[14] = dword_BA45C8; this[15] = dword_BA45C0; this[16] = dword_BA45C4; result = dword_BA45C8; this[17] = dword_BA45C8; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004B0FA0) -------------------------------------------------------- _DWORD *__thiscall sub_4B0FA0(int this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = *(_DWORD *)(this + 57); a2[1] = *(_DWORD *)(this + 61); a2[2] = *(_DWORD *)(this + 65); v3 = *(_DWORD *)(this + 69); v4 = *(_DWORD *)(this + 73); a2[3] = v3; a2[4] = v4; return result; } //----- (004B0FE0) -------------------------------------------------------- int __thiscall sub_4B0FE0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST08_4 int result; // eax v1 = this; *this = &NiTPointerListBase,unsigned int>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,unsigned int>::`vftable'; return result; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBB9C: using guessed type void *NiTPointerListBase,unsigned int>::`vftable'; //----- (004B1070) -------------------------------------------------------- void *__thiscall sub_4B1070(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,unsigned int>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; //----- (004B10A0) -------------------------------------------------------- void *__thiscall sub_4B10A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PgWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9BBB7C: using guessed type void *NiTListBase,PgWin *>::`vftable'; //----- (004B10D0) -------------------------------------------------------- int __thiscall sub_4B10D0(_DWORD **this, __int64 a2) { _DWORD **v2; // esi signed __int64 v3; // rax signed __int64 v4; // rax signed __int64 v5; // rax signed __int64 v6; // rax char v8; // [esp+Ch] [ebp-84h] v2 = this; v3 = sub_680E90(a2); sprintf(&v8, "%I64d", v3); (*(void (__stdcall **)(char *))(*v2[91] + 472))(&v8); v4 = sub_680EB0(a2); sprintf(&v8, "%I64d", v4); (*(void (__stdcall **)(char *))(*v2[90] + 472))(&v8); v5 = sub_680F00(a2); sprintf(&v8, "%I64d", v5); (*(void (__stdcall **)(char *))(*v2[89] + 472))(&v8); v6 = sub_680F60(a2); sprintf(&v8, "%I64d", v6); return (*(int (__stdcall **)(char *))(*v2[88] + 472))(&v8); } //----- (004B11E0) -------------------------------------------------------- void __thiscall sub_4B11E0(float **this) { float **v1; // ebx float **v2; // esi signed int v3; // edi v1 = this; v2 = this + 94; v3 = 3; do { (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)*v2 + 148))(&byte_9A8050); sub_4EAAF0(*v2, -1.0); ++v2; --v3; } while ( v3 ); *((_BYTE *)v1 + 344) = 0; } //----- (004B1230) -------------------------------------------------------- _DWORD *__thiscall sub_4B1230(_DWORD *this) { _DWORD *result; // eax result = this; this[3] = 0; this[1] = 0; this[2] = 0; *this = &NiTPointerListBase,PgWin *>::`vftable'; return result; } // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (004B1250) -------------------------------------------------------- void *__thiscall sub_4B1250(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiIntegerExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; //----- (004B1280) -------------------------------------------------------- int sub_4B1280() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD978 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD978: using guessed type int dword_ACD978; //----- (004B12A0) -------------------------------------------------------- int sub_4B12A0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD980 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD980: using guessed type int dword_ACD980; //----- (004B12C0) -------------------------------------------------------- int __thiscall sub_4B12C0(int this) { int v1; // eax int result; // eax if ( *(_BYTE *)(this + 12) && (v1 = *(_DWORD *)(this + 8)) != 0 ) result = *(_DWORD *)(v1 + 12); else result = *(_DWORD *)(this + 4); return result; } //----- (004B12E0) -------------------------------------------------------- int __thiscall sub_4B12E0(_DWORD **this, const CHAR *a2) { _DWORD **v2; // esi int result; // eax int v4; // [esp+0h] [ebp-8h] v2 = this; (*(void (__stdcall **)(const CHAR *))(*this[92] + 460))(a2); (*(void (**)(void))(*v2[92] + 452))(); if ( a2 && a2 != &byte_9A8050 ) { *((_BYTE *)v2[88] + 380) = 1; (*(void (__stdcall **)(signed int, int))(*v2[92] + 240))(1, v4); result = (*(int (__cdecl **)(signed int))(*v2[92] + 256))(1); } else { *((_BYTE *)v2[88] + 380) = 0; (*(void (__stdcall **)(signed int, int))(*v2[92] + 488))(1, v4); (*(void (__stdcall **)(_DWORD))(*v2[92] + 240))(0); result = (*(int (__cdecl **)(_DWORD))(*v2[92] + 256))(0); } return result; } //----- (004B1390) -------------------------------------------------------- int __thiscall sub_4B1390(_DWORD **this) { const char *v1; // eax v1 = (const char *)(*(int (**)(void))(*this[89] + 452))(); return atoi(v1); } //----- (004B13B0) -------------------------------------------------------- int __thiscall sub_4B13B0(_DWORD **this, char a2) { _DWORD **v2; // esi v2 = this; _itoa(a2, &a2, 10); return (*(int (__stdcall **)(char *))(*v2[89] + 460))(&a2); } //----- (004B13F0) -------------------------------------------------------- int __thiscall sub_4B13F0(_DWORD **this, int a2, int a3) { int result; // eax _DWORD **v4; // esi result = a2; v4 = this; *((_BYTE *)this[a2 + 86] + 380) = a3; if ( !a2 ) { if ( !(_BYTE)a3 ) (*(void (__stdcall **)(signed int))(*this[90] + 488))(1); (*(void (__stdcall **)(int))(*v4[90] + 240))(a3); result = (*(int (__stdcall **)(int))(*v4[90] + 256))(a3); } return result; } //----- (004B1450) -------------------------------------------------------- int __thiscall sub_4B1450(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST08_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,unsigned int>::`vftable'; return result; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBBDC: using guessed type void *PgTList::`vftable'; //----- (004B14D0) -------------------------------------------------------- _DWORD *__thiscall sub_4B14D0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,unsigned int>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBBDC: using guessed type void *PgTList::`vftable'; //----- (004B1560) -------------------------------------------------------- int __cdecl sub_4B1560(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_452120() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v1) + 105) != a1 ) { if ( ++v1 >= sub_452120() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v1); } // ACB6C4: using guessed type int dword_ACB6C4; //----- (004B15B0) -------------------------------------------------------- int __cdecl sub_4B15B0(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4B1280() ) return 0; while ( *(unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD978 + 4), v1) != a1 ) { if ( ++v1 >= sub_4B1280() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD978 + 4), v1); } // ACD978: using guessed type int dword_ACD978; //----- (004B1600) -------------------------------------------------------- int __cdecl sub_4B1600(int a1) { unsigned int v1; // esi unsigned __int16 *v2; // eax v1 = 0; if ( !sub_4B12A0() ) return 0; while ( 1 ) { v2 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD980 + 4), v1); if ( v2 ) { if ( *v2 == a1 ) break; } if ( ++v1 >= sub_4B12A0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD980 + 4), v1); } // ACD980: using guessed type int dword_ACD980; //----- (004B1650) -------------------------------------------------------- void __cdecl sub_4B1650(_DWORD *a1) { _DWORD *v1; // esi unsigned int v2; // ebx int v3; // eax int v4; // eax int v5; // edi _DWORD *v6; // eax _DWORD *v7; // ecx unsigned int v8; // [esp+10h] [ebp+8h] v1 = a1; v2 = 0; if ( a1 ) { v3 = *(_DWORD *)(dword_ACD9D0 + 56); v8 = v3 ? *(_DWORD *)(v3 + 40) : 0; if ( v8 > 0 ) { do { v4 = sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v2); if ( v4 && *(_BYTE *)(v4 + 76) ) { v5 = *(_DWORD *)(v4 + 4); v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); v6[2] = v5; *v6 = 0; v6[1] = v1[2]; v7 = (_DWORD *)v1[2]; if ( v7 ) *v7 = v6; else v1[1] = v6; ++v1[3]; v1[2] = v6; } ++v2; } while ( v2 < v8 ); } } } // ACD9D0: using guessed type int dword_ACD9D0; //----- (004B16E0) -------------------------------------------------------- _WORD *__cdecl sub_4B16E0(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _WORD *result; // eax v1 = *(_DWORD *)(dword_ACD9E8 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9E8: using guessed type int dword_ACD9E8; //----- (004B1730) -------------------------------------------------------- int __cdecl sub_4B1730(char *a1) { int v1; // eax unsigned int v2; // esi int v3; // eax int v4; // ebx size_t v5; // eax unsigned int v7; // [esp+Ch] [ebp-8h] unsigned int v8; // [esp+10h] [ebp-4h] v1 = *(_DWORD *)(dword_ACD9F8 + 56); v2 = 0; if ( v1 ) v8 = *(_DWORD *)(v1 + 40); else v8 = 0; v7 = 0; if ( v8 <= 0 ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACD9F8 + 4), v2); v4 = v3; if ( v3 ) break; LABEL_9: v7 = ++v2; if ( v2 >= v8 ) return 0; } v5 = strlen((const char *)(v3 + 4)); if ( v5 != strlen(a1) || strncmp((const char *)(v4 + 4), a1, v5) ) { v2 = v7; goto LABEL_9; } return v4; } // ACD9F8: using guessed type int dword_ACD9F8; //----- (004B17D0) -------------------------------------------------------- const char *__cdecl sub_4B17D0(const char *a1) { const char *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi const char *result; // eax v1 = a1; if ( !a1 || !*a1 ) return 0; v2 = *(_DWORD *)(dword_ACDA38 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { result = (const char *)sub_7474E0((_DWORD *)(dword_ACDA38 + 4), v4); if ( result ) { if ( !strcmp(result, v1) ) return result; v1 = a1; } ++v4; } while ( v4 < v3 ); } return 0; } // ACDA38: using guessed type int dword_ACDA38; //----- (004B1860) -------------------------------------------------------- int __thiscall sub_4B1860(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PgWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWin *>::`vftable'; return result; } // 9BBB7C: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (004B18E0) -------------------------------------------------------- _DWORD *__thiscall sub_4B18E0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PgWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBB7C: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; //----- (004B1970) -------------------------------------------------------- int __thiscall sub_4B1970(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,ScriptBtn *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,ScriptBtn *>::`vftable'; return result; } // 9BBB8C: using guessed type void *NiTListBase,ScriptBtn *>::`vftable'; // 9BBBCC: using guessed type void *NiTPointerListBase,ScriptBtn *>::`vftable'; //----- (004B19F0) -------------------------------------------------------- _DWORD *__thiscall sub_4B19F0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,ScriptBtn *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,ScriptBtn *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBB8C: using guessed type void *NiTListBase,ScriptBtn *>::`vftable'; // 9BBBCC: using guessed type void *NiTPointerListBase,ScriptBtn *>::`vftable'; //----- (004B1A80) -------------------------------------------------------- _DWORD *__thiscall sub_4B1A80(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,unsigned int>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,unsigned int>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBB9C: using guessed type void *NiTPointerListBase,unsigned int>::`vftable'; //----- (004B1B10) -------------------------------------------------------- float *__cdecl sub_4B1B10(float *a1, unsigned int a2) { float *result; // eax unsigned __int8 *v3; // eax if ( dword_ACD914 && (v3 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), a2)) != 0 ) { sub_419EE0(a1, v3[4], v3[5], v3[6], 0xFFu); result = a1; } else { sub_419EE0(a1, 0xFFu, 0, 0xFFu, 0xFFu); result = a1; } return result; } // ACD914: using guessed type int dword_ACD914; //----- (004B1B80) -------------------------------------------------------- int __cdecl sub_4B1B80(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACD928 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( a1 != *(_WORD *)sub_7474E0((_DWORD *)(dword_ACD928 + 4), v3) ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD928 + 4), v3); } // ACD928: using guessed type int dword_ACD928; //----- (004B1BE0) -------------------------------------------------------- _DWORD *__thiscall sub_4B1BE0(int this) { _DWORD *result; // eax if ( !*(_DWORD *)(this + 360) ) return (_DWORD *)(*(int (**)(void))(**(_DWORD **)(this + 448) + 484))(); result = (_DWORD *)(this + 344); if ( *(_DWORD *)(this + 364) >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (004B1C10) -------------------------------------------------------- int __thiscall sub_4B1C10(_DWORD **this, int a2, const CHAR *a3, int a4, char a5, int a6) { _DWORD **v6; // esi v6 = this; (*(void (__stdcall **)(int))(*this[90] + 460))(a2); (*(void (__stdcall **)(int))(*v6[93] + 460))(a6); *((_BYTE *)v6[89] + 380) = a5; sub_4B12E0(v6, a3); _itoa(a4, &a5, 10); return (*(int (__stdcall **)(char *))(*v6[91] + 460))(&a5); } //----- (004B1C90) -------------------------------------------------------- int __thiscall sub_4B1C90(_DWORD **this, int a2) { _DWORD **v2; // esi unsigned int v3; // kr00_4 _DWORD *v4; // ecx int result; // eax int v6; // [esp+0h] [ebp-4h] v2 = this; (*(void (__stdcall **)(int))(*this[90] + 460))(a2); v3 = strlen((const char *)(*(int (**)(void))(*v2[90] + 452))()); v4 = v2[86]; if ( v3 ) { *((_BYTE *)v4 + 380) = 1; (*(void (__stdcall **)(signed int, int))(*v2[90] + 240))(1, v6); result = (*(int (__cdecl **)(signed int))(*v2[90] + 256))(1); } else { *((_BYTE *)v4 + 380) = 0; (*(void (__stdcall **)(signed int, int))(*v2[90] + 488))(1, v6); (*(void (__stdcall **)(_DWORD))(*v2[90] + 240))(0); result = (*(int (__cdecl **)(_DWORD))(*v2[90] + 256))(0); } return result; } //----- (004B1D30) -------------------------------------------------------- _WORD *__cdecl sub_4B1D30(__int16 a1) { unsigned int v1; // esi _WORD *result; // eax v1 = 0; if ( !sub_419A40() ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v1); if ( result ) { if ( *result == a1 ) break; } if ( ++v1 >= sub_419A40() ) return 0; } return result; } // AC9CE0: using guessed type int dword_AC9CE0; //----- (004B1D70) -------------------------------------------------------- _DWORD *__cdecl sub_4B1D70(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 4 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; } v3 += 4; } return result; } //----- (004B1DB0) -------------------------------------------------------- _DWORD *__thiscall sub_4B1DB0(int this) { _DWORD *result; // eax bool v2; // cf result = (_DWORD *)(this + 400); v2 = *(_DWORD *)(this + 420) < 0x10u; *(_DWORD *)(this + 416) = 0; if ( !v2 ) result = (_DWORD *)*result; *(_BYTE *)result = 0; *(_BYTE *)(this + 428) = 0; *(_DWORD *)(this + 432) = 0; *(_DWORD *)(this + 436) = 0; *(_DWORD *)(this + 440) = -1; return result; } //----- (004B1DF0) -------------------------------------------------------- int __thiscall sub_4B1DF0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 21) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (004B1ED0) -------------------------------------------------------- char __stdcall sub_4B1ED0(int a1, int a2, int a3, int a4) { return 0; } //----- (004B1EE0) -------------------------------------------------------- BOOL __cdecl sub_4B1EE0(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a2; return sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), v2, *(_DWORD *)(a2 + 16)) != 0; } //----- (004B1F10) -------------------------------------------------------- void *__thiscall sub_4B1F10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_ACE9B8 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BBC1C: using guessed type void *ISingletonTask::`vftable'; // 9BBC38: using guessed type void *ISingletonTask::`vftable'; // ACE9B8: using guessed type int dword_ACE9B8; //----- (004B1F50) -------------------------------------------------------- int __thiscall sub_4B1F50(_DWORD **this) { _DWORD **v1; // esi int result; // eax char v3; // [esp+4h] [ebp-4h] v1 = this; result = *this[93]; if ( (_DWORD *)result != this[93] ) { do result = *sub_6CDBF0(v1 + 92, (int *)&v3, result); while ( (_DWORD *)result != v1[93] ); } return result; } //----- (004B1F90) -------------------------------------------------------- int __thiscall sub_4B1F90(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_6A0F70(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_6A0F70(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_6A0F70(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_4DC030(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_717D90(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_4B1DF0(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 21) ) sub_6A0F70(v4, a2, 0, a3, v6); else sub_6A0F70(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 21) ) sub_6A0F70(v4, a2, 0, (int)a4, v6); else sub_6A0F70(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (004B20F0) -------------------------------------------------------- char __thiscall sub_4B20F0(_DWORD *this, int a2, _DWORD *a3, int a4) { char result; // al int v5; // eax char *v6; // esi _BYTE *v7; // edi char v8; // dl char v9[4]; // [esp+0h] [ebp-18h] int v10; // [esp+4h] [ebp-14h] int v11; // [esp+8h] [ebp-10h] int v12; // [esp+Ch] [ebp-Ch] int v13; // [esp+10h] [ebp-8h] result = (char)this; if ( a2 == 28 ) { if ( *a3 ) { this[3] = 2; } else { v5 = (int)(this + 15); *(_DWORD *)v5 = 0; *(_DWORD *)(v5 + 4) = 0; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 12) = 0; v6 = (char *)a3[1]; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; v7 = this + 15; do { v8 = *v6; *v7++ = *v6++; } while ( v8 ); v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, (const char *)v5, 0x14u); result = sub_6F36A0(&off_AB7F2C, 29, 9, v9, 0x14u); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B21B0) -------------------------------------------------------- char __thiscall sub_4B21B0(int this) { int v1; // esi char result; // al char v3[4]; // [esp+14h] [ebp-18h] int v4; // [esp+18h] [ebp-14h] int v5; // [esp+1Ch] [ebp-10h] int v6; // [esp+20h] [ebp-Ch] int v7; // [esp+24h] [ebp-8h] v1 = this; if ( *(_BYTE *)(this + 68) ) { v7 = 0; v6 = 0; v5 = 0; v4 = 0; *(_DWORD *)v3 = 0; strncpy(v3, (const char *)(this + 68), 0x14u); result = sub_6F36A0(&off_AB7F2C, 29, 9, v3, 0x14u); } else { *(_DWORD *)(this + 64) = sub_45EB80(); sub_40C190(362567049); sub_45E560(*(_DWORD ***)(v1 + 64)); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v1 + 64) + 232))(*(_DWORD *)(v1 + 64) + 232, v1 + 8); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v1 + 64) + 236))(xRight, dword_AC2F78, 0.5, 0.5); result = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 64)); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B2290) -------------------------------------------------------- bool __thiscall sub_4B2290(char *this, int a2, int a3, int a4, int a5) { char *v5; // edi bool result; // al signed int v7; // eax char *v8; // eax char *v9; // eax char *v10; // eax char *v11; // eax char *v12; // eax int v13; // eax _DWORD *v14; // esi const CHAR *v15; // eax _DWORD *v16; // eax char v17; // bl void (__thiscall ***v18)(_DWORD, signed int); // esi _DWORD *v19; // esi const CHAR *v20; // eax int v21; // [esp-4h] [ebp-20h] int v22; // [esp-4h] [ebp-20h] v5 = this; if ( a2 != 29 || a3 != 10 ) return 0; v7 = *(unsigned __int16 *)(a5 + 20); if ( v7 > 6352 ) { switch ( v7 ) { case 7112: v11 = (char *)sub_40A910(-158644368); sub_462CA0(1, v11); break; case 7120: v12 = (char *)sub_40A910(1441837268); sub_462CA0(1, v12); break; case 7122: v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v22 = 140082800; goto LABEL_21; case 7257: v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v22 = 2145890036; goto LABEL_21; case 7258: v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v22 = -746040772; LABEL_21: v14 = (_DWORD *)v13; v15 = sub_40A910(v22); sub_492060(v14, (int)v15); break; default: break; } } else if ( v7 == 6352 ) { v21 = (int)(this + 68); v9 = (char *)sub_40A910(1859037177); LABEL_10: v10 = sub_7549E0(v9, v21); sub_462CA0(1, v10); } else { switch ( v7 ) { case 3280: case 3281: case 3283: v8 = (char *)sub_40C190(2111682039); goto LABEL_8; case 3282: v21 = (int)(this + 68); v9 = (char *)sub_40C190(705954356); goto LABEL_10; case 3284: v8 = (char *)sub_40C190(-993400289); LABEL_8: sub_462CA0(1, v8); break; case 3285: v21 = (int)(this + 68); v9 = (char *)sub_40C190(-1111769578); goto LABEL_10; case 3286: v9 = (char *)sub_40C190(-1310998958); goto LABEL_10; default: break; } } v16 = sub_4A3B80(&a2); v17 = sub_6C4EE0((_BYTE *)*v16); if ( a2 ) { v18 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v18 ) (**v18)(v18, 1); } } if ( v17 ) { v19 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v20 = sub_40C190(-1310998958); sub_492060(v19, (int)v20); result = a4 != 0; } else { *((_DWORD *)v5 + 5) = 2; result = 1; } return result; } //----- (004B2590) -------------------------------------------------------- int sub_4B2590() { int result; // eax void ***v1; // eax int v2; // esi result = dword_ACE9B8; if ( !dword_ACE9B8 ) { v1 = (void ***)operator new(0x58u); v2 = (int)v1; if ( v1 ) { sub_6C2E00(v1, 0); *(_DWORD *)v2 = &GuildJoinReqTask::`vftable'; *(_DWORD *)(v2 + 8) = &GuildJoinReqTask::`vftable'; *(_BYTE *)(v2 + 68) = 0; } else { v2 = 0; } result = v2; dword_ACE9B8 = v2; } return result; } // 9BBC50: using guessed type void *GuildJoinReqTask::`vftable'; // 9BBC6C: using guessed type void *GuildJoinReqTask::`vftable'; // ACE9B8: using guessed type int dword_ACE9B8; //----- (004B2610) -------------------------------------------------------- int __thiscall sub_4B2610(int this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12) { int v12; // esi bool v13; // cf int v14; // edx int v15; // eax int v16; // ecx v12 = this; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 15; *(_BYTE *)this = 0; sub_4017F0((const void **)this, (const void **)&a2, 0, (void *)0xFFFFFFFF); v13 = (unsigned int)a7 < 0x10; v14 = a10; v15 = a11; *(_BYTE *)(v12 + 28) = a9; v16 = a12; *(_DWORD *)(v12 + 32) = v14; *(_DWORD *)(v12 + 36) = v15; *(_DWORD *)(v12 + 40) = v16; if ( !v13 ) operator delete(a2); return v12; } //----- (004B2690) -------------------------------------------------------- _DWORD *__thiscall sub_4B2690(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // esi unsigned int v4; // esi _DWORD *v5; // eax _DWORD *v6; // ST04_4 _DWORD *v7; // ST00_4 int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; v10 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = a2[1] - *a2; *this = 0; v4 = v3 >> 4; this[1] = 0; this[2] = 0; if ( v4 ) { if ( v4 > 0xFFFFFFF ) std::_Xlength_error("vector too long"); v5 = sub_7031B0((char *)v4); *v2 = v5; v2[1] = v5; v2[2] = &v5[4 * v4]; v6 = (_DWORD *)a2[1]; v7 = (_DWORD *)*a2; v12 = 0; v2[1] = sub_4B1D70(v7, v6, v5); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004B2760) -------------------------------------------------------- int __thiscall sub_4B2760(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi _DWORD *v6; // eax char v8[4]; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 21) ) { if ( *(_DWORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; *(_DWORD *)v8 = *a2; v9 = 0; v6 = sub_5E8850(v2, v8); sub_4B1F90(v2, (int)&a2, v5, v6); return (int)(a2 + 4); } //----- (004B27E0) -------------------------------------------------------- int __thiscall sub_4B27E0(_DWORD *this, void *a2, char a3) { _DWORD *v3; // esi bool v4; // cf _BYTE *v5; // eax int (__stdcall *v6)(void *); // eax int result; // eax _DWORD *v8; // [esp+10h] [ebp-30h] void *v9; // [esp+14h] [ebp-2Ch] int v10; // [esp+24h] [ebp-1Ch] unsigned int v11; // [esp+28h] [ebp-18h] int v12; // [esp+3Ch] [ebp-4h] v3 = this + 86; v4 = this[91] < 0x10u; v8 = this; this[90] = 0; if ( v4 ) v5 = this + 86; else v5 = (_BYTE *)*v3; *v5 = 0; v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, a2, strlen((const char *)a2)); v12 = 0; sub_406450(v3, &v9); v12 = -1; if ( v11 >= 0x10 ) operator delete(v9); v6 = *(int (__stdcall **)(void *))(*(_DWORD *)v8[112] + 472); v11 = 15; v10 = 0; LOBYTE(v9) = 0; result = v6(a2); if ( a3 ) result = sub_6EB000(v8); return result; } //----- (004B2900) -------------------------------------------------------- char *__stdcall sub_4B2900(char *a1, char *a2) { char *result; // eax char *i; // esi result = strstr(a1, a2); for ( i = result; result; i = result ) { memcpy_0(i, &i[strlen(a2)], strlen(&i[strlen(a2)]) + 1); result = strstr(i, a2); } return result; } //----- (004B2970) -------------------------------------------------------- int __thiscall sub_4B2970(_DWORD *this, int a2, int a3) { void (__stdcall ****v3)(char **, void **); // ecx v3 = (void (__stdcall ****)(char **, void **))this[219]; if ( v3 ) sub_42F110(v3, (char *)&a3); return a2; } //----- (004B29A0) -------------------------------------------------------- int __userpurge sub_4B29A0@(int a1@, int a2@, int a3, _BYTE *a4) { int v4; // ecx v4 = *(_DWORD *)(a1 + 876); if ( v4 ) sub_42F0C0(v4, a2, a4); return a3; } //----- (004B29C0) -------------------------------------------------------- int __thiscall sub_4B29C0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // ecx v3 = this; if ( !*a3 ) { v4 = this[219]; if ( v4 ) { sub_42CE90(v4, (int)(a3 + 1)); if ( sub_8F3540((_DWORD *)v3[219]) ) sub_42CB50((_DWORD **)v3[219]); } } return a2; } //----- (004B2A10) -------------------------------------------------------- int __thiscall sub_4B2A10(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[219]; if ( v3 ) sub_42E620(v3, a3); return a2; } //----- (004B2A30) -------------------------------------------------------- int __thiscall sub_4B2A30(_DWORD *this, int a2, int *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[219]; if ( v3 ) sub_42CEC0(v3, a3); return a2; } //----- (004B2A50) -------------------------------------------------------- int __thiscall sub_4B2A50(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[219]; if ( v3 ) sub_42CFB0(v3, a3); return a2; } //----- (004B2A70) -------------------------------------------------------- int __userpurge sub_4B2A70@(int a1@, int a2@, int a3, char *a4) { int v4; // ecx v4 = *(_DWORD *)(a1 + 876); if ( v4 ) sub_42E860(v4, a2, *a4); return a3; } //----- (004B2A90) -------------------------------------------------------- int __thiscall sub_4B2A90(_DWORD *this, int a2, unsigned __int8 *a3) { if ( *(_WORD *)(a3 + 1) ) sub_58F280(*(_DWORD ***)(this[185] + 4 * *a3 + 512), *(unsigned __int16 *)(a3 + 1)); else sub_5D5B70(*(_WORD **)(this[185] + 4 * *a3 + 512), 0, 1); return a2; } //----- (004B2B00) -------------------------------------------------------- int __thiscall sub_4B2B00(int *this, int a2, _WORD *a3) { int *v3; // esi v3 = this; if ( *a3 == 2625 ) { sub_590390(this[185], 0); sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[185]); sub_4DE490(0, 4); sub_60D6D0((void *)v3[192]); } return a2; } //----- (004B2B50) -------------------------------------------------------- int __stdcall sub_4B2B50(int a1, int a2) { char *v2; // eax char *v3; // esi void *v4; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = v2; if ( v2 ) { *((_DWORD *)v2 + 43) = *(unsigned __int8 *)(a2 + 2); if ( !*(_BYTE *)(a2 + 2) ) { sub_650B90(v2, 0); v4 = sub_74CD00(&unk_AD8C08, *(_BYTE *)(a2 + 2), 0); LABEL_6: sub_650910(v3, (int)v4); return a1; } if ( *(_BYTE *)(a2 + 2) != 10 ) { sub_650B90(v2, 1); v4 = sub_74CD00(&unk_AD8C08, *(_BYTE *)(a2 + 2), *(_BYTE *)(a2 + 3)); goto LABEL_6; } } return a1; } //----- (004B2BF0) -------------------------------------------------------- int __thiscall sub_4B2BF0(_DWORD *this, int a2, int a3) { int v3; // ecx if ( *(_BYTE *)a3 == 1 ) { v3 = this[190]; if ( v3 ) sub_613FE0(v3, *(unsigned __int16 *)(a3 + 1)); } return a2; } //----- (004B2C20) -------------------------------------------------------- int __stdcall sub_4B2C20(int a1, int *a2) { sub_680E70(byte_AD9238, *a2, a2[1]); return a1; } //----- (004B2C60) -------------------------------------------------------- int __thiscall sub_4B2C60(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // esi _DWORD **v4; // ecx v3 = this; sub_6820C0(byte_AD9238, a3); v4 = (_DWORD **)v3[138]; if ( v4 ) sub_5B8450(v4); return a2; } //----- (004B2C90) -------------------------------------------------------- int __thiscall sub_4B2C90(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // edi signed int v4; // esi int v5; // edi _DWORD *v7; // [esp+Ch] [ebp-4h] v3 = this; v7 = this; sub_6F2B10(); v4 = 0; if ( *a3 > 0u ) { v5 = (int)(a3 + 1); do { sub_6F2BF0(v5); ++v4; v5 += 14; } while ( v4 < (unsigned __int16)*a3 ); v3 = v7; } sub_4F4560(v3[256]); *(float *)(v3[215] + 744) = 0.0; return a2; } //----- (004B2D10) -------------------------------------------------------- int __stdcall sub_4B2D10(int a1, _BYTE *a2) { unsigned int v2; // esi unsigned int *v3; // edi v2 = 0; if ( *a2 ) { v3 = (unsigned int *)(a2 + 1); do { sub_6838D0(&unk_ADA1E0, v3); ++v2; v3 = (unsigned int *)((char *)v3 + 15); } while ( v2 < (unsigned __int8)*a2 ); } return a1; } //----- (004B2D50) -------------------------------------------------------- int __thiscall sub_4B2D50(void *this, int a2, int a3) { int v3; // esi _DWORD *v4; // eax char *v5; // eax v3 = (int)this; v4 = operator new(0x20u); if ( v4 ) sub_62EE80(v4, v3, a3); v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 12)); if ( v5 && (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v5 + 32))(v5) ) sub_4A8140(v3, 129); return a2; } //----- (004B2E10) -------------------------------------------------------- int __stdcall sub_4B2E10(int a1, unsigned __int8 *a2) { unsigned __int8 v2; // bl v2 = 0; if ( *a2 ) { do sub_6E1730(&unk_B9E1CC, (__int16 *)&a2[64 * v2++ + 1]); while ( v2 < *a2 ); } return a1; } //----- (004B2E70) -------------------------------------------------------- int __thiscall sub_4B2E70(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // esi __int16 v4; // ax const char *v5; // eax v3 = this; v4 = a3[1]; if ( v4 != 5824 ) { if ( v4 != 5831 && v4 != 5832 && v4 != 5839 ) { v5 = sub_41A850((unsigned __int16)a3[1]); sub_492060(v3, (int)v5); return a2; } sub_6DD640(byte_ADB468, *a3, a3[1]); } return a2; } //----- (004B2EE0) -------------------------------------------------------- int __stdcall sub_4B2EE0(int a1, _BYTE *a2) { signed int v2; // esi _DWORD *v3; // edi v2 = 0; if ( *a2 ) { v3 = a2 + 1; do { sub_62F830(v3, &dword_ABD498, 0); ++v2; v3 += 4; } while ( v2 < (unsigned __int8)*a2 ); } return a1; } // ABD498: using guessed type int dword_ABD498; //----- (004B2F50) -------------------------------------------------------- int __stdcall sub_4B2F50(int a1, unsigned int *a2) { int v2; // ST08_4 int v3; // ST04_4 float v4; // ST04_4 float v5; // ST00_4 *(float *)&v2 = (double)a2[1]; *(float *)&v3 = (double)*a2; if ( !sub_67B570((float *)dword_AD8EBC, v3, v2) ) { v4 = (double)a2[1]; v5 = (double)*a2; (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_AD8EBC + 236))(LODWORD(v5), LODWORD(v4), 0); } return a1; } //----- (004B2FD0) -------------------------------------------------------- int __thiscall sub_4B2FD0(int *this, int a2, int a3) { char *v3; // eax char *v4; // esi float v5; // ST04_4 float v6; // ST00_4 v3 = sub_4E2910(this, *(_WORD *)a3, 8, 19); v4 = v3; if ( v3 ) { if ( (unsigned int)((*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 440))(v3) - 1) <= 2 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 340))(v4); if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v4 + 320))(v4) ) { v5 = (double)*(unsigned int *)(a3 + 6); v6 = (double)*(unsigned int *)(a3 + 2); (*(void (__thiscall **)(char *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v4 + 236))(v4, LODWORD(v6), LODWORD(v5), 0); } } return a2; } //----- (004B3060) -------------------------------------------------------- int __thiscall sub_4B3060(float *this, int a2, unsigned __int16 *a3) { float *v3; // esi v3 = this; sub_4E3330((_DWORD *)this + 9, 0); sub_4DE8F0(v3, 0, 0.0); sub_4F34B0(*((_DWORD *)v3 + 259), *a3, 1); return a2; } //----- (004B30C0) -------------------------------------------------------- int __thiscall sub_4B30C0(char **this, int a2, unsigned __int8 *a3) { int v3; // ebx char *v4; // edi int v5; // eax int v6; // edx char **v8; // [esp+Ch] [ebp-8Ch] char v9[132]; // [esp+10h] [ebp-88h] v8 = this; if ( a3[21] > 0x80u ) a3[21] = -128; v3 = *a3; if ( v3 > 0 ) { v4 = (char *)&a3[a3[21] + 22]; do { sub_492730((_DWORD ***)v8, 8, v4); v4 += 103; --v3; } while ( v3 ); } strncpy(v9, (const char *)a3 + 22, a3[21]); v5 = *(_DWORD *)(a3 + 17); v6 = *(_DWORD *)(a3 + 1); v9[a3[21]] = 0; sub_492DF0(v8, v6, *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), v5, (int)v9); return a2; } // 4B30C0: using guessed type char var_88[132]; //----- (004B3190) -------------------------------------------------------- int __stdcall sub_4B3190(int a1, __int16 *a2) { char *v2; // eax v2 = sub_664AB0(dword_AD8C90, *a2); if ( v2 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v2 + 356))(v2); return a1; } //----- (004B31D0) -------------------------------------------------------- int __stdcall sub_4B31D0(int a1, __int16 *a2) { char *v2; // eax char *v3; // esi v2 = sub_664AB0(dword_AD8C90, *a2); v3 = v2; if ( v2 ) { (*(void (__thiscall **)(char *, _DWORD, __int16 *))(*(_DWORD *)v2 + 64))(v2, 0, a2 + 1); (*(void (__thiscall **)(char *, _DWORD, signed int))(*(_DWORD *)v3 + 40))(v3, 0, 4); } return a1; } //----- (004B3220) -------------------------------------------------------- int __stdcall sub_4B3220(int a1, __int16 *a2) { char *v2; // eax char *v3; // esi void (__thiscall *v4)(char *, signed int, signed int); // eax v2 = sub_664AB0(dword_AD8C90, *a2); v3 = v2; if ( v2 ) { (*(void (__thiscall **)(char *, signed int))(*(_DWORD *)v2 + 240))(v2, 1); v4 = *(void (__thiscall **)(char *, signed int, signed int))(*(_DWORD *)v3 + 40); *((_WORD *)v3 + 88) = a2[1]; v4(v3, 1, 4); } return a1; } //----- (004B3270) -------------------------------------------------------- int __stdcall sub_4B3270(int a1, _WORD *a2) { if ( *a2 == 2689 ) sub_4DE490(0, 4); return a1; } //----- (004B32B0) -------------------------------------------------------- int __stdcall sub_4B32B0(int a1, unsigned __int16 *a2) { float v2; // ST04_4 float v3; // ST04_4 v2 = (double)*a2; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 260))(LODWORD(v2)); v3 = (double)a2[1]; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 264))(LODWORD(v3)); return a1; } //----- (004B3300) -------------------------------------------------------- int __thiscall sub_4B3300(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B3330) -------------------------------------------------------- int __stdcall sub_4B3330(int a1, unsigned int *a2) { float v2; // ST04_4 float v3; // ST00_4 v2 = (double)a2[1]; v3 = (double)*a2; (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_AD8EBC + 236))(LODWORD(v3), LODWORD(v2), 0); return a1; } //----- (004B3380) -------------------------------------------------------- int __thiscall sub_4B3380(void *this, int a2, int a3) { int v3; // esi _DWORD *v4; // eax v3 = (int)this; v4 = operator new(0x18u); if ( v4 ) sub_62EF20(v4, v3, a3); return a2; } //----- (004B33E0) -------------------------------------------------------- int __thiscall sub_4B33E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // esi unsigned int v5; // eax _DWORD **v6; // ecx v3 = this; v4 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))(); sub_650BA0(dword_AD8EBC, *(_WORD *)(a3 + 4), *(_DWORD *)a3); v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))(); sub_680C20((int)byte_AD9238, v5); if ( !(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))() && v4 ) (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 644))(); v6 = (_DWORD **)v3[138]; if ( v6 ) sub_5B8450(v6); return a2; } //----- (004B3470) -------------------------------------------------------- int __thiscall sub_4B3470(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi _DWORD **v4; // ecx v3 = this; sub_680C90((int)byte_AD9238, *a3); (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 140))(*a3); v4 = (_DWORD **)v3[138]; if ( v4 ) sub_5B8450(v4); return a2; } //----- (004B34E0) -------------------------------------------------------- int __thiscall sub_4B34E0(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // esi char *v4; // eax v3 = this; v4 = sub_664AB0(dword_AD8C90, *a3); if ( v4 ) sub_4A1540(v3, v4); return a2; } //----- (004B3510) -------------------------------------------------------- int __thiscall sub_4B3510(float *this, int a2, __int16 *a3) { float *v3; // esi int result; // eax char *v5; // eax v3 = this; if ( *a3 == -1 ) { sub_67D370(dword_AD8EBC, 0); result = a2; } else { v5 = sub_664AB0(dword_AD8C90, *a3); if ( v5 ) sub_4A2030(v3, v5); result = a2; } return result; } //----- (004B3580) -------------------------------------------------------- int __thiscall sub_4B3580(int *this, int a2, unsigned __int16 *a3) { int *v3; // edi char *v4; // esi char *v5; // eax v3 = this; v4 = sub_4E2910(this, a3[1], 9, 54); v5 = sub_4E2910(v3, a3[2], 9, 54); if ( v4 && v4 != dword_AD8EBC ) { (*(void (__thiscall **)(char *, char *, signed int, _DWORD))(*(_DWORD *)v4 + 312))(v4, v5, 1, *a3); (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 540))(v4); } return a2; } //----- (004B35E0) -------------------------------------------------------- int __thiscall sub_4B35E0(void *this, int a2, __int16 *a3) { void *v3; // esi char *v4; // eax char *v5; // edi int v6; // eax float *v7; // ecx v3 = this; v4 = sub_664AB0(dword_AD8C90, *a3); v5 = v4; if ( v4 ) { if ( sub_65B690(v4) ) sub_65F350(v5, COERCE_FLOAT(1)); if ( v5 == dword_AD8EBC ) { v6 = *((_DWORD *)v3 + 628); if ( v6 == 2 || v6 == 3 ) { v7 = (float *)*((_DWORD *)v3 + 259); *((_DWORD *)v3 + 628) = 0; sub_4F31E0(v7); sub_64E020((_DWORD *)dword_AD8EBC + 21, dword_AD8EBC, (_DWORD *)1, 0); sub_65F350(dword_AD8EBC, 0.0); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); OutputDebugStringA("On_NC_BAT_SOMEONESKILLBASH_CASTCUT_CMD\n"); } } } return a2; } //----- (004B3690) -------------------------------------------------------- int __thiscall sub_4B3690(int *this, int a2, unsigned __int16 *a3) { int *v3; // edi char *v4; // esi char *v5; // eax v3 = this; v4 = sub_4E2910(this, a3[1], 9, 66); v5 = sub_4E2910(v3, a3[2], 9, 66); if ( v4 && v4 != dword_AD8EBC && v5 ) { (*(void (__thiscall **)(char *, char *, signed int, _DWORD))(*(_DWORD *)v4 + 312))(v4, v5, 1, *a3); (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 540))(v4); } return a2; } //----- (004B3700) -------------------------------------------------------- int __thiscall sub_4B3700(int *this, int a2, unsigned __int16 *a3) { char *v3; // eax char *v4; // esi v3 = sub_4E2910(this, a3[1], 9, 67); v4 = v3; if ( v3 && v3 != dword_AD8EBC ) { sub_650960((int)v3, *((_DWORD *)a3 + 1), *((_DWORD *)a3 + 2), 1); (*(void (__thiscall **)(char *, _DWORD, _DWORD, signed int, _DWORD))(*(_DWORD *)v4 + 308))( v4, *((_DWORD *)a3 + 1), *((_DWORD *)a3 + 2), 1, *a3); (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 540))(v4); } return a2; } //----- (004B3770) -------------------------------------------------------- int __thiscall sub_4B3770(_BYTE *this, int a2, int a3) { this[2532] = 0; OutputDebugStringA("On_NC_BAT_SKILLBASH_CASTABORT_ACK\n"); sub_64E020((_DWORD *)dword_AD8EBC + 21, dword_AD8EBC, (_DWORD *)1, 0); sub_65F350(dword_AD8EBC, 0.0); return a2; } //----- (004B37B0) -------------------------------------------------------- int __stdcall sub_4B37B0(int a1, _DWORD *a2) { int v2; // eax if ( sub_680740(byte_AD9238) ) { v2 = sub_680740(byte_AD9238); *(_DWORD *)(v2 + 55) += *a2; } return a1; } //----- (004B3800) -------------------------------------------------------- int __thiscall sub_4B3800(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // ecx v3 = this[139]; if ( v3 ) sub_54D3E0(v3, *a3); return a2; } //----- (004B3860) -------------------------------------------------------- int __thiscall sub_4B3860(_DWORD *this, int a2, _BYTE *a3) { unsigned int v3; // edi _DWORD *v4; // ebx unsigned __int8 *v5; // esi int v6; // eax _DWORD *v7; // ecx v3 = 0; v4 = this; if ( *a3 ) { v5 = a3 + 22; do { v6 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)(v5 - 21), *(_DWORD *)(v5 - 17), *(_DWORD *)(v5 - 13), *(_DWORD *)(v5 - 9), *(_DWORD *)(v5 - 5)); if ( v6 ) { *(_DWORD *)(v6 + 24) = *v5; *(_DWORD *)(v6 + 36) = *(_DWORD *)(v5 + 1); *(_DWORD *)(v6 + 40) = *(_DWORD *)(v5 + 5); *(_BYTE *)(v6 + 53) = v5[13]; *(_BYTE *)(v6 + 52) = *(v5 - 1); *(_BYTE *)(v6 + 64) = 1; *(_DWORD *)(v6 + 48) = *(_DWORD *)(v5 + 9); v7 = (_DWORD *)v4[181]; if ( v7 ) sub_582B90(v7); } ++v3; v5 += 35; } while ( v3 < (unsigned __int8)*a3 ); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004B3900) -------------------------------------------------------- int __stdcall sub_4B3900(int a1, _BYTE *a2) { unsigned int v2; // edi unsigned int *v3; // esi int v4; // eax v2 = 0; if ( *a2 ) { v3 = (unsigned int *)(a2 + 21); do { v4 = sub_6C11C0(&dword_B9DC70, *(v3 - 5), *(v3 - 4), *(v3 - 3), *(v3 - 2), *(v3 - 1)); if ( v4 ) { *(float *)(v4 + 56) = (double)*v3; *(float *)(v4 + 60) = (double)v3[1]; *(_BYTE *)(v4 + 64) = 1; } ++v2; v3 += 7; } while ( v2 < (unsigned __int8)*a2 ); } return a1; } // B9DC70: using guessed type int dword_B9DC70; //----- (004B3980) -------------------------------------------------------- int __stdcall sub_4B3980(int a1, int *a2) { int v2; // eax v2 = sub_6C11C0(&dword_B9DC70, *a2, a2[1], a2[2], a2[3], a2[4]); if ( v2 ) *(_BYTE *)(v2 + 64) = 0; return a1; } // B9DC70: using guessed type int dword_B9DC70; //----- (004B39C0) -------------------------------------------------------- int __userpurge sub_4B39C0@(int a1@, int a2@, int a3, int a4) { int v4; // ebx unsigned __int16 i; // di v4 = a1; if ( !sub_8F3540(*(_DWORD **)(a1 + 880)) ) return a3; sub_57DBB0(*(_DWORD **)(v4 + 880)); if ( !sub_57E8F0(*(_DWORD *)(v4 + 880), a2, *(_WORD *)a4, *(_WORD *)(a4 + 4), *(_BYTE *)(a4 + 3) != 0) ) return a3; for ( i = 0; i < *(_WORD *)(a4 + 6); ++i ) sub_57DA70(*(_DWORD **)(v4 + 880), 154 * i + a4 + 8); sub_57DC80(*(_DWORD **)(v4 + 880)); return a3; } //----- (004B3B80) -------------------------------------------------------- int __thiscall sub_4B3B80(char **this, int a2, LPCSTR lpString) { char **v3; // esi v3 = this; sub_59E670(this[238], lpString); sub_59DC50(v3[238], lpString[128]); sub_8F82A0(&unk_BA6B10, v3[238]); return a2; } //----- (004B3BD0) -------------------------------------------------------- int __thiscall sub_4B3BD0(_DWORD *this, int a2, _BYTE *a3) { _DWORD **v3; // esi v3 = (_DWORD **)this; this[582] = (unsigned __int8)a3[10]; if ( sub_62E5B0(a3) == 1 ) sub_4A6DD0(v3, a3[9]); return a2; } //----- (004B3C10) -------------------------------------------------------- int __stdcall sub_4B3C10(int a1, unsigned __int16 *a2) { float v2; // ST04_4 v2 = (double)*(unsigned int *)(a2 + 1); sub_6C0100(*a2, v2); return a1; } //----- (004B3C40) -------------------------------------------------------- int __stdcall sub_4B3C40(int a1, unsigned __int8 *a2) { unsigned __int8 *v2; // esi _DWORD *v3; // eax v2 = a2; v3 = sub_686B80((unsigned __int16 *)(a2 + 1), (int *)&a2); if ( v3 ) sub_633540((int)v3, *v2); return a1; } //----- (004B3CA0) -------------------------------------------------------- int __thiscall sub_4B3CA0(_DWORD ***this, int a2, __int64 *a3) { sub_5C2330(this[235], *a3); return a2; } //----- (004B3D30) -------------------------------------------------------- int __thiscall sub_4B3D30(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // esi v3 = this; sub_6333D0(0); sub_5C2420(v3[235]); return a2; } //----- (004B3D80) -------------------------------------------------------- int __thiscall sub_4B3D80(int *this, int a2, unsigned __int8 *a3) { int v3; // ebx int *v4; // edi _DWORD *v5; // esi v3 = *a3; v4 = this; v5 = a3 + 1; sub_510DB0(this[216]); sub_50FE50(v4[255]); if ( v3 > 0 ) { do { sub_513A00((_DWORD *)v4[216], v5, 1); sub_5103F0((_DWORD *)v4[255], v5, 1); v5 += 18; --v3; } while ( v3 ); } return a2; } //----- (004B3DE0) -------------------------------------------------------- int __thiscall sub_4B3DE0(_DWORD **this, int a2, _DWORD *a3) { _DWORD **v3; // esi v3 = this; sub_513A00(this[216], a3, 0); sub_5103F0(v3[255], a3, 0); return a2; } //----- (004B3E10) -------------------------------------------------------- int __thiscall sub_4B3E10(_DWORD **this, int a2, int *a3) { _DWORD **v3; // edi v3 = this; sub_513B80(this[216], *a3, a3[1], a3[2], a3[3], a3[4], a3[5], a3[6], a3[7]); sub_5104B0(v3[255], *a3, a3[1], a3[2], a3[3], a3[4], a3[5], a3[6], a3[7]); return a2; } //----- (004B3EB0) -------------------------------------------------------- int __thiscall sub_4B3EB0(_DWORD **this, int a2, int a3) { _DWORD **v3; // edi v3 = this; sub_513BD0( this[216], *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_BYTE *)(a3 + 20) != 0); sub_510500( v3[255], *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_BYTE *)(a3 + 20) != 0); return a2; } //----- (004B3F40) -------------------------------------------------------- int __thiscall sub_4B3F40(_DWORD **this, int a2, int a3) { _DWORD **v3; // edi v3 = this; sub_513C20( this[216], *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_BYTE *)(a3 + 20)); sub_510550( v3[255], *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_BYTE *)(a3 + 20)); return a2; } //----- (004B3FC0) -------------------------------------------------------- int __thiscall sub_4B3FC0(_DWORD *this, int a2, unsigned int *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[216]; if ( v3 ) sub_512090(v3, *a3); return a2; } //----- (004B4000) -------------------------------------------------------- int __thiscall sub_4B4000(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi _BYTE *v4; // ecx v3 = this; v4 = (_BYTE *)this[192]; if ( v4 ) sub_60D6A0(v4, a3); sub_6F0130((const __time32_t *)v3[281], a3); return a2; } //----- (004B4030) -------------------------------------------------------- int __thiscall sub_4B4030(_DWORD *this, int a2, _WORD *a3) { int *v3; // ecx v3 = (int *)this[192]; if ( v3 ) sub_60EC40(v3, a3); return a2; } //----- (004B4050) -------------------------------------------------------- int __thiscall sub_4B4050(int **this, int a2, unsigned __int16 *a3) { unsigned __int16 v3; // si int **i; // ebx v3 = 0; for ( i = this; v3 < *a3; ++v3 ) sub_60CC80(i[192], *(_DWORD *)&a3[2 * v3 + 1]); sub_60E1D0((int)i[192]); return a2; } //----- (004B40A0) -------------------------------------------------------- int __thiscall sub_4B40A0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[192]; if ( v3 ) sub_60EC70(v3, a3); return a2; } //----- (004B40D0) -------------------------------------------------------- int __thiscall sub_4B40D0(int this, int a2, int a3) { _DWORD *v3; // esi _DWORD **v4; // ecx _DWORD **v5; // ecx v3 = (_DWORD *)this; *(_BYTE *)(*(unsigned __int8 *)a3 + a3 + 1) = 0; if ( *(_BYTE *)a3 > 1u ) { sub_4920B0(this, (char *)(a3 + 1)); *(_DWORD *)(v3[192] + 520) = -1; v4 = (_DWORD **)v3[1248]; if ( v4 ) sub_60CEF0(v4); v5 = (_DWORD **)v3[1249]; if ( v5 ) sub_60D1E0(v5); } return a2; } //----- (004B4140) -------------------------------------------------------- int __thiscall sub_4B4140(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[190]; if ( v3 ) sub_613F90(v3, *a3); return a2; } //----- (004B41B0) -------------------------------------------------------- int __stdcall sub_4B41B0(int a1, unsigned __int8 *a2) { unsigned __int8 v2; // cl unsigned __int8 v3; // cl unsigned __int8 v4; // al float v6; // [esp+0h] [ebp-18h] float v7; // [esp+4h] [ebp-14h] float v8; // [esp+8h] [ebp-10h] float v9; // [esp+Ch] [ebp-Ch] float v10; // [esp+10h] [ebp-8h] float v11; // [esp+14h] [ebp-4h] v2 = *a2; v11 = 0.0; v10 = 0.0; v9 = 0.0; if ( v2 ) v11 = (double)v2 / 255.0; v3 = a2[1]; if ( v3 ) v10 = (double)v3 / 255.0; v4 = a2[2]; if ( v4 ) v9 = (double)v4 / 255.0; sub_694610(byte_ADB468); v6 = v11; v7 = v10; v8 = v9; sub_694750(byte_ADB468, &v6); return a1; } //----- (004B4260) -------------------------------------------------------- int __thiscall sub_4B4260(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi size_t v4; // ebx int v5; // ST0C_4 _DWORD *v6; // ecx CHAR String[2048]; // [esp+Ch] [ebp-804h] v3 = this; memset(String, 0, 0x800u); v4 = *((unsigned __int8 *)a3 + 2); memcpy(String, (char *)a3 + 3, v4); v5 = *a3; v6 = (_DWORD *)v3[245]; String[v4] = 0; sub_6177C0(v6, v5, String, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[245]); return a2; } // 4B4260: using guessed type CHAR String[2048]; //----- (004B4310) -------------------------------------------------------- int __thiscall sub_4B4310(void *this, int a2, _BYTE *a3) { void *v3; // esi void *v4; // eax const void **v5; // ecx v3 = this; v4 = sub_6CD770(); sub_74B0B0(v4, a3); v5 = (const void **)*((_DWORD *)v3 + 263); if ( v5 ) sub_61D280(v5); return a2; } //----- (004B4350) -------------------------------------------------------- int __thiscall sub_4B4350(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax int v4; // eax float *v5; // ecx float *v7; // ecx v3 = *a3; if ( (_WORD)v3 == 3496 ) goto LABEL_11; v4 = v3 - 3497; if ( !v4 ) { v7 = (float *)this[265]; if ( v7 ) sub_58EC50(v7, *(_DWORD *)(a3 + 1)); return a2; } if ( v4 == 1 ) { LABEL_11: v5 = (float *)this[265]; if ( v5 ) { sub_58EC50(v5, 0); return a2; } } return a2; } //----- (004B43B0) -------------------------------------------------------- int __stdcall sub_4B43B0(int a1, int a2) { char *v2; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); sub_67A1D0((int)(v2 + 776), *(_BYTE *)(a2 + 2) != 0); return a1; } //----- (004B44A0) -------------------------------------------------------- int __thiscall sub_4B44A0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi v3 = this; sub_6F2C70(*a3); sub_4F4560(v3[256]); *(float *)(v3[215] + 744) = 0.0; return a2; } //----- (004B44E0) -------------------------------------------------------- int __thiscall sub_4B44E0(_WORD **this, int a2, _WORD *a3) { _WORD **v3; // esi v3 = this; sub_5C66E0(this[254], a3); sub_8F82A0(&unk_BA6B10, v3[254]); return a2; } //----- (004B4510) -------------------------------------------------------- int __stdcall sub_4B4510(int a1, unsigned __int8 *a2) { sub_6BE6D0(); sub_6BE610(*a2); sub_5D79E0(); return a1; } //----- (004B4560) -------------------------------------------------------- int __thiscall sub_4B4560(_DWORD *this, int a2, char *a3) { int v3; // ecx if ( (unsigned __int8)*a3 <= 0x14u ) { v3 = this[185]; sub_58F400(*a3); } return a2; } //----- (004B4580) -------------------------------------------------------- int __thiscall sub_4B4580(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 1792 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B45B0) -------------------------------------------------------- int __thiscall sub_4B45B0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4545 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B45E0) -------------------------------------------------------- int __stdcall sub_4B45E0(int a1, int a2) { int v2; // edx int v4; // [esp+4h] [ebp-Ch] float v5; // [esp+8h] [ebp-8h] float v6; // [esp+Ch] [ebp-4h] v2 = *(unsigned __int16 *)(a2 + 1); v4 = *(int *)(a2 + 3); v5 = *(float *)(a2 + 7); v6 = *(float *)(a2 + 11); sub_6DEA90(byte_ADB468, v2, (int)&v4, *(float *)(a2 + 15)); return a1; } //----- (004B4620) -------------------------------------------------------- int __stdcall sub_4B4620(int a1, _BYTE *a2) { signed int v2; // edi int v3; // esi char v4; // al int v5; // edx int v7; // [esp+18h] [ebp-Ch] float v8; // [esp+1Ch] [ebp-8h] float v9; // [esp+20h] [ebp-4h] sub_6DE220(byte_ADB468); v2 = 0; if ( *a2 ) { v3 = (int)(a2 + 9); do { v4 = *(_BYTE *)(v3 + 12); v5 = *(unsigned __int16 *)(v3 - 6); v7 = *(int *)(v3 - 4); v8 = *(float *)v3; v9 = *(float *)(v3 + 4); sub_6DE850(byte_ADB468, *(unsigned __int16 *)(v3 - 8), v5, (int)&v7, *(float *)(v3 + 8), v4, 1); ++v2; v3 += 21; } while ( v2 < (unsigned __int8)*a2 ); } return a1; } //----- (004B4690) -------------------------------------------------------- int __thiscall sub_4B4690(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4545 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B46C0) -------------------------------------------------------- int __thiscall sub_4B46C0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4545 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B46F0) -------------------------------------------------------- int __stdcall sub_4B46F0(int a1, unsigned __int8 *a2) { unsigned __int8 *v2; // ebx int v3; // eax unsigned __int8 *v4; // edi unsigned __int8 *v5; // esi _DWORD *v6; // eax char v7; // dl char v8; // ST10_1 int v9; // edx int v11; // [esp+18h] [ebp-18h] float v12; // [esp+1Ch] [ebp-14h] float v13; // [esp+20h] [ebp-10h] int v14; // [esp+24h] [ebp-Ch] int v15; // [esp+28h] [ebp-8h] char v16; // [esp+2Ch] [ebp-4h] v2 = a2; v3 = *a2; v15 = 0; if ( v3 ) { v4 = a2 + 3; v14 = v3; do { v5 = v4; v6 = sub_688200(v4, &v16, &v15); v4 += v15; if ( v6 && v5[5] & 1 ) { v7 = v5[32]; v11 = *((int *)v5 + 3); v8 = v7; v9 = *((unsigned __int16 *)v5 + 3); v12 = *((float *)v5 + 4); v13 = *((float *)v5 + 5); sub_6DE850(byte_ADB468, v9, *(unsigned __int16 *)(v5 + 3), (int)&v11, *((float *)v5 + 6), v8, 1); } --v14; } while ( v14 ); sub_686030((int *)&byte_ADA230, v2, (int)v2); HIBYTE(a2) = 1; sub_6F3D10(&off_AB7F2C, 35, 29, (char *)&a2 + 3, 1u); } return a1; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (004B47B0) -------------------------------------------------------- int __thiscall sub_4B47B0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B47E0) -------------------------------------------------------- int __thiscall sub_4B47E0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4560 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4810) -------------------------------------------------------- int __thiscall sub_4B4810(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4840) -------------------------------------------------------- int __thiscall sub_4B4840(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4870) -------------------------------------------------------- int __thiscall sub_4B4870(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B48A0) -------------------------------------------------------- int __thiscall sub_4B48A0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { nullsub_11(); if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } } return a2; } // 4A5850: using guessed type int nullsub_11(void); //----- (004B48E0) -------------------------------------------------------- int __thiscall sub_4B48E0(_DWORD *this, int a2, signed int *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850(*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4910) -------------------------------------------------------- int __thiscall sub_4B4910(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 5312 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4940) -------------------------------------------------------- int __stdcall sub_4B4940(int a1, int a2) { sub_6DB490( byte_ADB468, *(_WORD *)(a2 + 4), *(unsigned __int16 *)(a2 + 6), *(_WORD *)a2, *(_WORD *)(a2 + 2), *(unsigned __int8 *)(a2 + 8), *(unsigned __int8 *)(a2 + 9)); return a1; } //----- (004B4980) -------------------------------------------------------- int __thiscall sub_4B4980(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4481 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B49B0) -------------------------------------------------------- int __thiscall sub_4B49B0(_DWORD **this, int a2, _WORD *a3) { signed int v3; // edi int v4; // esi __int64 v6; // [esp-8h] [ebp-18h] _DWORD **v7; // [esp+Ch] [ebp-4h] v3 = 0; v7 = this; if ( *a3 > 0u ) { v4 = (int)(a3 + 1); do { LODWORD(v6) = *(_DWORD *)v4; WORD2(v6) = *(_WORD *)(v4 + 4); sub_6EEED0(v7[273], v6); ++v3; v4 += 6; } while ( v3 < (unsigned __int16)*a3 ); } return a2; } //----- (004B4A10) -------------------------------------------------------- int __thiscall sub_4B4A10(_DWORD **this, int a2, int a3) { __int64 v4; // [esp-8h] [ebp-Ch] LODWORD(v4) = *(_DWORD *)a3; WORD2(v4) = *(_WORD *)(a3 + 4); sub_6EEED0(this[273], v4); return a2; } //----- (004B4A50) -------------------------------------------------------- int __thiscall sub_4B4A50(_DWORD **this, int a2, _WORD *a3) { sub_6EEF30(this[273], *a3); return a2; } //----- (004B4AD0) -------------------------------------------------------- char __stdcall sub_4B4AD0(__int16 a1) { char result; // al result = a1; if ( a1 != -1 ) result = sub_6F3D10(&off_AB7F2C, 35, 77, &a1, 2u); return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B4B00) -------------------------------------------------------- char sub_4B4B00() { char v1; // [esp+1h] [ebp-1h] v1 = 0; return sub_6F3D10(&off_AB7F2C, 35, 83, &v1, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B4B40) -------------------------------------------------------- int __stdcall sub_4B4B40(int a1, unsigned __int8 *a2) { unsigned __int8 v2; // bl v2 = 0; if ( *a2 ) { do { sub_6DE3E0(byte_ADB468, a2[4 * v2 + 3], *(unsigned __int16 *)&a2[4 * v2 + 1]); ++v2; } while ( v2 < *a2 ); } return a1; } //----- (004B4B80) -------------------------------------------------------- char __stdcall sub_4B4B80(int a1) { HIBYTE(a1) = a1; return sub_6F3D10(&off_AB7F2C, 12, 42, (char *)&a1 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B4BB0) -------------------------------------------------------- int __thiscall sub_4B4BB0(_DWORD **this, int a2, int a3) { if ( a3 ) sub_52E3E0(this[222], (_DWORD *)a3, *(_BYTE *)(a3 + 20)); return a2; } //----- (004B4C00) -------------------------------------------------------- int __thiscall sub_4B4C00(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4C30) -------------------------------------------------------- int __thiscall sub_4B4C30(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 6593 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4C60) -------------------------------------------------------- char __stdcall sub_4B4C60(int a1, __int16 a2) { HIBYTE(a2) = 0; if ( a1 != 2 ) HIBYTE(a2) = 1; return sub_6F3D10(&off_AB7F2C, 29, 180, &a2, 2u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B4CA0) -------------------------------------------------------- int __thiscall sub_4B4CA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; if ( *(_WORD *)a3 == 7184 ) { sub_74DA00((int *)(this[228] + 360), (_DWORD *)(a3 + 2)); sub_4A5320(v3); } return a2; } //----- (004B4CE0) -------------------------------------------------------- int __thiscall sub_4B4CE0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 7208 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B4D10) -------------------------------------------------------- int __thiscall sub_4B4D10(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // ecx int v4; // eax if ( a3 ) { v3 = (_DWORD *)this[190]; v4 = a3[1] - *a3; if ( v4 > 0 ) { sub_614660(v3, v4); return a2; } sub_614660(v3, 0); } return a2; } //----- (004B4D50) -------------------------------------------------------- int __thiscall sub_4B4D50(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi _DWORD *v4; // ecx bool v5; // bl int v6; // ecx int v7; // eax int v8; // esi char v10; // [esp+Fh] [ebp-1h] v3 = this; v4 = (_DWORD *)this[192]; v5 = 0; v10 = 0; if ( v4 ) { v5 = v4[129] == *a3; v10 = sub_60CD70(v4); } v6 = v3[143]; if ( v6 ) { sub_56C480(v6, *a3); if ( v5 ) { v7 = v3[143]; *(_BYTE *)(v7 + 617) = 0; *(_BYTE *)(v7 + 618) = 1; } v8 = v3[143]; *(_BYTE *)(v8 + 616) = v10; *(_BYTE *)(v8 + 618) = 1; } return a2; } //----- (004B4DD0) -------------------------------------------------------- int __thiscall sub_4B4DD0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // ebx _DWORD *v4; // ecx _DWORD *v5; // ecx int v6; // edi _WORD *v7; // eax int v8; // esi bool v9; // al int v10; // eax char v12; // [esp+7h] [ebp-1h] int v13; // [esp+14h] [ebp+Ch] v3 = this; v4 = (_DWORD *)this[192]; v12 = 0; if ( v4 ) v12 = sub_60CD70(v4); v5 = (_DWORD *)v3[143]; if ( v5 ) { sub_56B170(v5); if ( *a3 ) { v6 = (int)(a3 + 3); v13 = (unsigned __int16)*a3; do { v7 = operator new(8u); if ( v7 ) { *(_DWORD *)v7 = -1; v7[2] = -1; *((_BYTE *)v7 + 6) = 1; v8 = (int)v7; } else { v8 = 0; } *(_DWORD *)v8 = *(_DWORD *)(v6 - 4); *(_WORD *)(v8 + 4) = *(_WORD *)v6; v9 = sub_680890((unsigned __int8 *)byte_AD9238) >= (unsigned int)*(unsigned __int8 *)(v6 + 2) && sub_680890((unsigned __int8 *)byte_AD9238) <= (unsigned int)*(unsigned __int8 *)(v6 + 3); *(_BYTE *)(v8 + 6) = v9; sub_56C420((_DWORD *)v3[143], v8); v6 += 8; --v13; } while ( v13 ); } v10 = v3[143]; *(_BYTE *)(v10 + 616) = v12; *(_BYTE *)(v10 + 618) = 1; } return a2; } //----- (004B4EB0) -------------------------------------------------------- int __stdcall sub_4B4EB0(int a1, __int16 *a2) { char *v2; // eax char *v3; // esi v2 = sub_664AB0(dword_AD8C90, *a2); v3 = v2; if ( v2 && (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 500))(v2) ) { sub_65F350(v3, 0.0); sub_64E020((_DWORD *)v3 + 21, v3, (_DWORD *)1, 0); } return a1; } //----- (004B4F00) -------------------------------------------------------- int __stdcall sub_4B4F00(int a1, int a2) { sub_6B2470((char *)&unk_B912C8, *(_WORD *)a2, *(unsigned __int16 *)(a2 + 3), 4 * (*(_BYTE *)(a2 + 2) & 1) | 1, 0); return a1; } //----- (004B4F40) -------------------------------------------------------- int __userpurge sub_4B4F40@(int *a1@, int a2@, int a3, int a4) { char *v4; // eax v4 = sub_4E2910(a1, *(_WORD *)a4, 4, 190); if ( v4 ) sub_6524E0((int)v4, a2, *(_BYTE *)(a4 + 2) != 0); return a3; } //----- (004B4F80) -------------------------------------------------------- int __thiscall sub_4B4F80(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; v4 = sub_41A850(*a3); sub_492060(v3, (int)v4); return a2; } //----- (004B4FB0) -------------------------------------------------------- int __thiscall sub_4B4FB0(_DWORD **this, int a2, int a3) { _DWORD **v3; // edi int *v4; // eax int v5; // eax v3 = this; sub_718DC0( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), *(unsigned __int8 *)(a3 + 2), *(unsigned __int8 *)(a3 + 3), 1); v4 = (int *)sub_718D10( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v4 ) sub_56F630(v3[143], v4); if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) { v5 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v5 ) *(_BYTE *)(v5 + 20) = 1; } return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; //----- (004B5080) -------------------------------------------------------- int __thiscall sub_4B5080(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // edi int v4; // eax int v5; // eax v3 = this; v4 = sub_718D10( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v4 ) sub_56C190(v3[143], v4); sub_718DC0( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), *(unsigned __int8 *)(a3 + 2), *(unsigned __int8 *)(a3 + 3), 0); if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) { v5 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v5 ) { *(_BYTE *)(v5 + 20) = 0; *(_BYTE *)(v5 + 64) = 0; } } return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; //----- (004B5150) -------------------------------------------------------- int __thiscall sub_4B5150(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 7808 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B5180) -------------------------------------------------------- int __thiscall sub_4B5180(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 7808 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B51B0) -------------------------------------------------------- int __thiscall sub_4B51B0(_DWORD ***this, int a2, int *a3) { _DWORD ***v3; // edi int v4; // eax int v5; // eax v3 = this; v4 = sub_718D10(&dword_B9E560, *a3, a3[1], a3[2], a3[3], a3[4]); if ( v4 ) { *(_BYTE *)(v4 + 64) = 0; sub_56C190(v3[143], v4); } v5 = sub_6C11C0(&dword_B9DC70, *a3, a3[1], a3[2], a3[3], a3[4]); if ( v5 ) *(_BYTE *)(v5 + 64) = 0; return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (004B5240) -------------------------------------------------------- int __thiscall sub_4B5240(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 7808 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B5270) -------------------------------------------------------- int __thiscall sub_4B5270(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B52A0) -------------------------------------------------------- int __thiscall sub_4B52A0(_DWORD **this, int a2, int a3) { _DWORD **v3; // ebx int *v4; // eax int *v5; // esi int v6; // eax v3 = this; sub_718B60(&dword_B9E560, a3); v4 = (int *)sub_718E40(&dword_B9E560, *(unsigned __int8 *)(a3 + 3) + 5 * *(unsigned __int8 *)(a3 + 2)); v5 = v4; if ( v4 ) sub_56F630(v3[143], v4); if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) { if ( v5 ) { v6 = sub_6C11C0(&dword_B9DC70, *v5, v5[1], v5[2], v5[3], v5[4]); if ( v6 ) { *(_DWORD *)(v6 + 28) = *(_DWORD *)(a3 + 4); *(_DWORD *)(v6 + 28) = *(_DWORD *)(a3 + 4); *(_BYTE *)(v6 + 64) = 1; } } } return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; //----- (004B5340) -------------------------------------------------------- int __thiscall sub_4B5340(_DWORD **this, int a2, _BYTE *a3) { int *v3; // edi unsigned int v4; // ebx int v5; // eax int v6; // esi int v7; // eax double v8; // st7 _DWORD *v9; // ecx int v11; // [esp+Ch] [ebp-18h] unsigned int v12; // [esp+14h] [ebp-10h] _DWORD **v13; // [esp+1Ch] [ebp-8h] unsigned int v14; // [esp+20h] [ebp-4h] v13 = this; v14 = 0; if ( *a3 ) { v3 = (int *)(a3 + 1); do { v4 = v3[1]; v12 = v3[2]; v11 = *v3; v5 = sub_718E40(&dword_B9E560, ((unsigned int)*v3 >> 24) + 5 * (unsigned __int8)((unsigned int)*v3 >> 16)); v6 = v5; if ( v5 ) { *(float *)(v5 + 56) = (double)v4; *(float *)(v5 + 60) = (double)v12; *(_BYTE *)(v5 + 20) = 1; *(_BYTE *)(v5 + 64) = 1; sub_56F630(v13[143], (int *)v5); if ( BYTE2(v11) == dword_B9E568 ) { v7 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)v6, *(_DWORD *)(v6 + 4), *(_DWORD *)(v6 + 8), *(_DWORD *)(v6 + 12), *(_DWORD *)(v6 + 16)); if ( v7 ) { *(float *)(v7 + 56) = *(float *)(v6 + 56); v8 = *(float *)(v6 + 60); *(_BYTE *)(v7 + 20) = 1; *(float *)(v7 + 60) = v8; *(_BYTE *)(v7 + 64) = 1; } } } v3 += 3; ++v14; } while ( v14 < (unsigned __int8)*a3 ); } v9 = v13[181]; if ( v9 ) sub_582B90(v9); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; //----- (004B5460) -------------------------------------------------------- int __thiscall sub_4B5460(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B5490) -------------------------------------------------------- int __thiscall sub_4B5490(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B54E0) -------------------------------------------------------- int __thiscall sub_4B54E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B5530) -------------------------------------------------------- int __thiscall sub_4B5530(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B5560) -------------------------------------------------------- int __thiscall sub_4B5560(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *(_WORD *)(a3 + 20) != 7808 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v4); } return a2; } //----- (004B5590) -------------------------------------------------------- char __thiscall sub_4B5590(_DWORD ***this, int a2, char a3, char a4) { BYTE2(a2) = a3; HIBYTE(a2) = a4; sub_4E2C80(this, 1); return sub_6F3D10(&off_AB7F2C, 35, 98, &a2, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B55D0) -------------------------------------------------------- int __thiscall sub_4B55D0(_DWORD ***this, int a2, _WORD *a3) { _DWORD ***v3; // edi int v4; // esi int v5; // eax int v6; // esi int v7; // eax int v9; // [esp+2Ch] [ebp-Ch] float v10; // [esp+30h] [ebp-8h] v3 = this; if ( *a3 == 5912 ) { if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v4 = *(_DWORD *)dword_AD8EBC; v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); (*(void (__thiscall **)(char *, int))(v4 + 192))(dword_AD8EBC, v5); sub_4E2C80(v3, 0); v6 = *(_DWORD *)dword_AD8EBC; v7 = sub_67B5C0(dword_AD8EBC); (*(void (__thiscall **)(char *, int, _DWORD, float *, signed int))(v6 + 232))(dword_AD8EBC, v7, 0, &flt_AB399C, 1); if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 200))(&v9); sub_69AD10((float *)byte_ADB468, *(float *)&v9, v10, (int)&v9); (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 188))(&v9); } } return a2; } // AB399C: using guessed type float flt_AB399C; //----- (004B5710) -------------------------------------------------------- int __thiscall sub_4B5710(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ecx v3 = this; if ( a3 ) { v4 = (_DWORD *)this[320]; if ( v4 ) { sub_59D410(v4, *(_WORD *)a3, *(_DWORD *)(a3 + 2)); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[320]); } } return a2; } //----- (004B5750) -------------------------------------------------------- int __thiscall sub_4B5750(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi signed int v4; // eax const char *v5; // eax v3 = this; if ( a3 ) { v4 = *a3; if ( (_WORD)v4 != 0x2000 ) { v5 = sub_41A850(v4); sub_492060(v3, (int)v5); } } return a2; } //----- (004B57B0) -------------------------------------------------------- char __stdcall sub_4B57B0(int a1, char a2, char a3) { BYTE1(a1) = a2; BYTE2(a1) = a3; return sub_6F36A0(&off_AB7F2C, 2, 70, &a1, 3u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B57E0) -------------------------------------------------------- int __stdcall sub_4B57E0(int a1, _WORD *a2) { signed int v2; // edi unsigned __int16 *v3; // esi float v4; // ST04_4 v2 = 0; if ( *a2 > 0u ) { v3 = a2 + 1; do { v4 = (double)(*((_DWORD *)v3 + 1) / 0x3E8u); sub_6BF6A0(*v3, v4); ++v2; v3 += 4; } while ( v2 < (unsigned __int16)*a2 ); } return a1; } //----- (004B5840) -------------------------------------------------------- int __thiscall sub_4B5840(int **this, int a2, int a3) { int **v3; // edi int *v4; // esi int *v5; // ebx v3 = this; if ( *(_BYTE *)a3 ) { sub_513AF0( this[216], *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_510420( v3[255], *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_52E2D0( (char *)v3[222], *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_6C1860( &dword_B9DC70, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_71A430( (unsigned int *)&dword_B9E560, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_6F9910((_DWORD **)v3[221], (_DWORD *)(a3 + 1)); sub_5E4780((unsigned __int8 *)v3[217], (int *)(a3 + 1)); sub_70FB80( v3[225], *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17)); sub_74DA00(v3[228] + 90, (_DWORD *)(a3 + 1)); } else { v4 = (int *)(a3 + 21); v5 = (int *)(a3 + 1); sub_513490(this[216], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_5E3C00(v3[217], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_70F2D0(v3[225], *v5, v5[1], v5[2], v5[3], v5[4], *v4, v4[1], v4[2], v4[3], v4[4]); sub_510240(v3[255], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_52E0E0(v3[222], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_6FB010((_DWORD **)v3[221], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_7190B0(&dword_B9E560, (int *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_6C1610(&dword_B9DC70, (int *)(a3 + 1), (_DWORD *)(a3 + 21)); sub_4FB7C0(v3[228], (_DWORD *)(a3 + 1), (_DWORD *)(a3 + 21)); } sub_4A5320(v3); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (004B5A70) -------------------------------------------------------- int __thiscall sub_4B5A70(_DWORD **this, int a2, _WORD *a3) { _DWORD **v3; // esi _DWORD *v4; // edx v3 = this; if ( *a3 == 2896 ) { if ( this[194] ) { sub_8F86A0(&unk_BA6B10, this[194]); v4 = v3[194]; if ( v4[168] ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v4[168]); } } return a2; } //----- (004B5B10) -------------------------------------------------------- char sub_4B5B10() { signed int v0; // eax char *v1; // ecx char v2; // dl unsigned __int16 v4; // [esp+0h] [ebp-404h] char v5; // [esp+5h] [ebp-3FFh] memset((char *)&v4 + 1, 0, 0x3FFu); v4 = 95; v0 = 0; v1 = &v5; do { *v1 = HIBYTE(word_B91652[4 * v0]); v2 = word_B91652[4 * v0]; *(_WORD *)(v1 - 3) = v0; *(v1 - 1) = v2; ++v0; v1 += 4; } while ( v0 < 95 ); return sub_6F36A0(&off_AB7F2C, 28, 57, &v4, 4 * v4 + 2); } // AB7F2C: using guessed type void **off_AB7F2C; // B91652: using guessed type __int16 word_B91652[]; //----- (004B5BC0) -------------------------------------------------------- int __thiscall sub_4B5BC0(_DWORD *this, int a2, _WORD *a3) { int v3; // edx signed int v4; // esi unsigned __int16 *v5; // eax if ( *a3 == 8464 ) { v3 = this[145]; if ( v3 ) { v4 = 0; if ( a3[1] > 0u ) { v5 = a3 + 2; do { *(_BYTE *)(258 * *v5 + v3 + 601) = *((_BYTE *)v5 + 3); *(_BYTE *)(258 * *v5 + v3 + 600) = *((_BYTE *)v5 + 2); ++v4; v5 += 2; } while ( v4 < (unsigned __int16)a3[1] ); } sub_556000((_DWORD **)this[145]); } } return a2; } //----- (004B5CB0) -------------------------------------------------------- int __thiscall sub_4B5CB0(int this, int a2, _BYTE *a3) { int v3; // eax *(_BYTE *)(this + 152) = *a3 != 0; v3 = (unsigned __int8)*a3; *(_DWORD *)(this + 148) = v3; *(_BYTE *)(this + 145) = v3 > 0; return a2; } //----- (004B5CE0) -------------------------------------------------------- int __thiscall sub_4B5CE0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 8544 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B5D10) -------------------------------------------------------- int __thiscall sub_4B5D10(_BYTE *this) { _BYTE *v1; // esi int result; // eax char v3; // [esp+7h] [ebp-1h] v1 = this; sub_6F3D10(&off_AB7F2C, 8, 112, &v3, 1u); result = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 244))(); v1[5100] = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B5D50) -------------------------------------------------------- char __stdcall sub_4B5D50(int a1) { HIBYTE(a1) = a1; return sub_6F36A0(&off_AB7F2C, 4, 218, (char *)&a1 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B5D80) -------------------------------------------------------- int __thiscall sub_4B5D80(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx unsigned int v4; // edi unsigned __int16 *v5; // esi v3 = this; if ( !this[1227] ) return a2; v4 = 0; if ( *(_WORD *)(a3 + 4) > 0u ) { v5 = (unsigned __int16 *)(a3 + 14); do { sub_503EC0((_DWORD *)v3[1227], *v5, *((unsigned __int8 *)v5 + 2), *((_DWORD *)v5 - 1), *((_DWORD *)v5 - 2)); sub_506E40((_DWORD *)v3[1227], *((_DWORD *)v5 - 2), *v5); ++v4; v5 = (unsigned __int16 *)((char *)v5 + 11); } while ( v4 < *(unsigned __int16 *)(a3 + 4) ); } return a2; } //----- (004B5E00) -------------------------------------------------------- int __thiscall sub_4B5E00(_DWORD *this, int a2, int a3) { unsigned int v3; // edi unsigned __int16 *v4; // esi _DWORD *v6; // [esp+0h] [ebp-4h] v6 = this; if ( !this[1227] ) return a2; v3 = 0; if ( *(_WORD *)(a3 + 4) <= 0u ) return a2; v4 = (unsigned __int16 *)(a3 + 6); while ( 1 ) { sub_503E40((_DWORD *)this[1227], *v4, v4[1]); ++v3; v4 += 2; if ( v3 >= *(unsigned __int16 *)(a3 + 4) ) break; this = v6; } return a2; } //----- (004B5E70) -------------------------------------------------------- int __thiscall sub_4B5E70(_DWORD *this, int a2, int a3) { unsigned int v3; // esi unsigned __int16 *v4; // edi _DWORD *v6; // [esp+0h] [ebp-4h] v6 = this; if ( !this[1227] ) return a2; v3 = 0; if ( *(_WORD *)(a3 + 4) <= 0u ) return a2; v4 = (unsigned __int16 *)(a3 + 6); while ( 1 ) { sub_503E70((_DWORD *)this[1227], *v4, 1); ++v3; ++v4; if ( v3 >= *(unsigned __int16 *)(a3 + 4) ) break; this = v6; } return a2; } //----- (004B5EE0) -------------------------------------------------------- int __thiscall sub_4B5EE0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi unsigned int *v4; // ecx unsigned int v5; // ebx unsigned __int16 *v6; // esi const char *v8; // eax v3 = this; if ( a3[10] != 11200 ) { v8 = sub_41A850(a3[10]); sub_492060(v3, (int)v8); return a2; } v4 = (unsigned int *)this[1228]; if ( !v4 ) return a2; sub_508450(v4); v5 = 0; if ( a3[13] > 0u ) { v6 = a3 + 18; do { sub_503EC0((_DWORD *)v3[1228], *v6, *((unsigned __int8 *)v6 + 2), *((_DWORD *)v6 - 1), *((_DWORD *)v6 - 2)); sub_506E40((_DWORD *)v3[1228], *((_DWORD *)v6 - 2), *v6); ++v5; v6 = (unsigned __int16 *)((char *)v6 + 11); } while ( v5 < a3[13] ); } sub_5085B0((int *)v3[1228], 0); sub_4A5CD0(v3, 1); return a2; } //----- (004B5FA0) -------------------------------------------------------- int __thiscall sub_4B5FA0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // ebx unsigned int v4; // edi unsigned __int16 *v5; // esi const char *v7; // eax v3 = this; if ( a3[10] != 11200 ) { v7 = sub_41A850(a3[10]); sub_492060(v3, (int)v7); return a2; } if ( !this[1228] ) return a2; v4 = 0; if ( a3[13] > 0u ) { v5 = a3 + 14; do { sub_503E40((_DWORD *)v3[1228], *v5, v5[1]); ++v4; v5 += 2; } while ( v4 < a3[13] ); } sub_5085B0((int *)v3[1228], 0); sub_4A5CD0(v3, 1); return a2; } //----- (004B6030) -------------------------------------------------------- int __thiscall sub_4B6030(_DWORD **this, int a2, __int16 *a3) { _DWORD **v3; // esi _DWORD **v4; // esi signed int v5; // ebx v3 = this; sub_5A26B0(this[163], *a3); sub_5A26B0(v3[168], *a3); v4 = v3 + 169; v5 = 4; do { sub_5A26B0(*(v4 - 5), *a3); sub_5A26B0(*v4, *a3); ++v4; --v5; } while ( v5 ); return a2; } //----- (004B6090) -------------------------------------------------------- int __thiscall sub_4B6090(_BYTE **this, int a2, int a3) { _BYTE **v3; // edi int v4; // ebx unsigned __int16 v5; // ax int v6; // esi signed int v8; // [esp+18h] [ebp+Ch] v3 = this; sub_4F4C40(this[178], 1); v4 = a3; sub_4F7E10(v3[178], *(_WORD *)a3); sub_4F4D70(v3[178], *(unsigned __int16 *)(a3 + 4)); sub_4F4D80(v3[178], *(unsigned __int16 *)(a3 + 2)); v5 = *(_WORD *)(a3 + 4); if ( v5 ) { v8 = 0; if ( v5 > 0u ) { v6 = v4 + 6; do { sub_4F9920((unsigned int *)v3[178], *(_DWORD *)v6, *(_WORD *)(v6 + 4)); v6 += 6; ++v8; } while ( v8 < *(unsigned __int16 *)(v4 + 4) ); } } return a2; } //----- (004B6130) -------------------------------------------------------- int __stdcall sub_4B6130(int a1, int a2) { char *v2; // edi void (__thiscall *v3)(char *, float *); // edx float v5; // [esp+8h] [ebp-24h] float v6; // [esp+Ch] [ebp-20h] float v7; // [esp+10h] [ebp-1Ch] float v8; // [esp+14h] [ebp-18h] float v9; // [esp+18h] [ebp-14h] float v10; // [esp+20h] [ebp-Ch] float v11; // [esp+24h] [ebp-8h] float v12; // [esp+28h] [ebp-4h] v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { v5 = (double)*(unsigned int *)(a2 + 2); v6 = (double)*(unsigned int *)(a2 + 6); v8 = (double)*(unsigned int *)(a2 + 10); v9 = (double)*(unsigned int *)(a2 + 14); v10 = v8 - v5; v5 = v10; v3 = *(void (__thiscall **)(char *, float *))(*(_DWORD *)v2 + 192); v11 = v9 - v6; v6 = v11; v12 = 0.0; v7 = 0.0; v3(v2, &v5); (*(void (__thiscall **)(char *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 316))( v2, *(_DWORD *)(a2 + 10), *(_DWORD *)(a2 + 14), *(unsigned __int16 *)(a2 + 19)); } return a1; } //----- (004B6200) -------------------------------------------------------- int __thiscall sub_4B6200(char **this, int a2, unsigned __int8 *a3) { char **v3; // esi char *v4; // eax v3 = this; sub_4ED620(this[1238], a3, a3[36], (int)(a3 + 37), (int)(a3 + 66), a3[65]); v4 = v3[1236]; *((_WORD *)v4 + 14) &= 0xFFFEu; v4[356] = 1; return a2; } //----- (004B6250) -------------------------------------------------------- int __thiscall sub_4B6250(_DWORD **this, int a2, unsigned __int8 *a3) { sub_4ED0E0(this[1238], *a3); return a2; } //----- (004B6270) -------------------------------------------------------- int __thiscall sub_4B6270(_DWORD **this, int a2, const void *a3) { _DWORD **v3; // esi _DWORD *v4; // eax v3 = this; sub_4ECC20(this[1238]); sub_4ED620((char *)v3[1238], a3, 0, 0, 0, 0); v4 = v3[1236]; *((_WORD *)v4 + 14) &= 0xFFFEu; *((_BYTE *)v4 + 356) = 1; sub_4ED960(v3[1236], 0); return a2; } //----- (004B62D0) -------------------------------------------------------- int __thiscall sub_4B62D0(_DWORD *this, int a2, unsigned __int16 *a3) { float *v3; // ecx v3 = (float *)this[191]; if ( v3 ) sub_5312A0(v3, *a3); return a2; } //----- (004B62F0) -------------------------------------------------------- int __userpurge sub_4B62F0@(int a1@, int a2@, int a3, int a4) { int *v4; // eax v4 = (int *)sub_664AB0(dword_AD8C90, *(_WORD *)a4); if ( v4 ) sub_65CF20(v4, a1, a2, (char *)(a4 + 2), 0); return a3; } //----- (004B6320) -------------------------------------------------------- int __stdcall sub_4B6320(int a1, int a2) { char *v2; // eax char *v3; // edi int v4; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = v2; if ( v2 ) { v4 = sub_65C1C0(v2); if ( v4 ) { if ( !strcmp((const char *)(v4 + 2), (const char *)(a2 + 2)) ) (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 340))(v3); } } return a1; } //----- (004B6390) -------------------------------------------------------- int __thiscall sub_4B6390(_DWORD *this, int a2, unsigned __int16 *a3) { int *v3; // ecx v3 = (int *)this[143]; if ( v3 ) sub_56F7B0(v3, a3); return a2; } //----- (004B63F0) -------------------------------------------------------- int __thiscall sub_4B63F0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 12392 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B6420) -------------------------------------------------------- int __thiscall sub_4B6420(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 12416 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B6450) -------------------------------------------------------- int __thiscall sub_4B6450(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 12432 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B6480) -------------------------------------------------------- int __stdcall sub_4B6480(int a1, int a2) { char *v2; // esi float v3; // ST04_4 float v4; // ST04_4 v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { v3 = (double)*(unsigned __int16 *)(a2 + 2); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v2 + 260))(v2, LODWORD(v3)); v4 = (double)*(unsigned __int16 *)(a2 + 4); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v2 + 264))(v2, LODWORD(v4)); } return a1; } //----- (004B6520) -------------------------------------------------------- int __thiscall sub_4B6520(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 13376 && *a3 != 13440 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004B6590) -------------------------------------------------------- char __stdcall sub_4B6590(__int16 a1) { return sub_6F3D10(&off_AB7F2C, 53, 9, &a1, 2u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B65C0) -------------------------------------------------------- int __thiscall sub_4B65C0(_DWORD *this, int a2, _BYTE *a3) { int v3; // eax bool v4; // zf _BYTE *v5; // ebx char **v6; // ecx _BYTE *v7; // ebx char **v8; // ecx int v10; // [esp-1Ch] [ebp-30h] int v11; // [esp-18h] [ebp-2Ch] int v12; // [esp-14h] [ebp-28h] int v13; // [esp-10h] [ebp-24h] int v14; // [esp-Ch] [ebp-20h] int v15; // [esp-8h] [ebp-1Ch] char v16; // [esp-4h] [ebp-18h] int v17; // [esp+Ch] [ebp-8h] _DWORD *v18; // [esp+10h] [ebp-4h] signed int v19; // [esp+20h] [ebp+Ch] v3 = (int)this; v4 = this[1245] == 0; v18 = this; if ( !v4 ) { v5 = a3; v17 = 20; do { if ( *v5 ) { qmemcpy(&v10, v5, 0x18u); v6 = *(char ***)(v3 + 4980); v16 = v5[24]; sub_41F2D0(v6, v10, v11, v12, v13, v14, v15, *(int *)&v16); v3 = (int)v18; } v5 += 25; --v17; } while ( v17 ); v7 = a3 + 500; v19 = 20; do { if ( *v7 ) { qmemcpy(&v10, v7, 0x18u); v8 = (char **)v18[1245]; v16 = v7[24]; sub_41F320(v8, v10, v11, v12, v13, v14, v15, *(int *)&v16); } v7 += 25; --v19; } while ( v19 ); sub_8F82A0(&unk_BA6B10, (_DWORD *)v18[1245]); } return a2; } //----- (004B6670) -------------------------------------------------------- int __thiscall sub_4B6670(_DWORD *this, int a2, unsigned int *a3) { int v3; // ecx float v4; // ST00_4 v3 = this[1246]; if ( v3 ) { v4 = (double)*a3; sub_41FF40(v3, v4); } return a2; } //----- (004B66A0) -------------------------------------------------------- int __stdcall sub_4B66A0(int a1, __int16 *a2) { char *v2; // eax int v3; // eax v2 = sub_664AB0(dword_AD8C90, *a2); if ( v2 ) { v3 = (*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 196))(v2); sub_6BABB0(&dword_AB6520, (int)(a2 + 1), v3); } return a1; } //----- (004B66E0) -------------------------------------------------------- char sub_4B66E0() { return sub_6F36A0(&off_AB7F2C, 2, 110, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B6700) -------------------------------------------------------- char sub_4B6700() { return sub_6F36A0(&off_AB7F2C, 2, 120, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B6720) -------------------------------------------------------- int __thiscall sub_4B6720(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi char *v4; // eax int result; // eax _DWORD *v6; // ecx char *v7; // eax char *v8; // eax v3 = this; if ( *a3 == 16128 ) { v6 = (_DWORD *)this[148]; if ( v6 ) { if ( a3[1] ) { sub_4579F0(v6, (int)(a3 + 2), a3[1]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[148]); } else { v8 = sub_7549E0("[INFO] Popup Web URL is empty\n"); OutputDebugStringA(v8); } result = a2; } else { v7 = sub_7549E0("On_NC_MISC_GET_WEB_URL_ACK Error : m_pkWebBrowserWin is nullptr\n"); OutputDebugStringA(v7); result = a2; } } else { v4 = sub_7549E0("On_NC_MISC_GET_WEB_URL_ACK Error: %d\n", *a3); OutputDebugStringA(v4); result = a2; } return result; } //----- (004B67D0) -------------------------------------------------------- int __thiscall sub_4B67D0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD **v4; // ecx int v6; // eax int v7; // esi unsigned int v8; // ebx _DWORD *v9; // ecx int v10; // ecx unsigned __int8 *v11; // [esp+10h] [ebp+Ch] unsigned __int8 *v12; // [esp+10h] [ebp+Ch] v3 = this; v4 = (_DWORD **)this[1248]; if ( !v4 ) return 0; if ( !v3[1249] ) return 0; v6 = v3[192]; if ( !v6 ) return 0; v7 = a3; if ( *(_WORD *)a3 != 12568 ) { if ( *(_WORD *)a3 == 12569 ) { sub_60CEF0(v4); return a2; } return a2; } sub_60D700(v6, 0); sub_60D7B0(v3[1248], 0); sub_60D8A0(v3[1249], 0); sub_60CEF0((_DWORD **)v3[1248]); sub_60D1E0((_DWORD **)v3[1249]); v8 = 0; if ( *(_BYTE *)(a3 + 25) != 2 ) { if ( *(_BYTE *)(a3 + 2) > 0u ) { v12 = (unsigned __int8 *)(a3 + 3); do { v10 = v3[1249]; if ( v10 ) sub_60E7D0(v10, v8, v12); v12 += 23; ++v8; } while ( v8 < *(unsigned __int8 *)(v7 + 2) ); } sub_60DD90((_DWORD **)v3[1249]); return a2; } if ( *(_BYTE *)(a3 + 2) > 0u ) { v11 = (unsigned __int8 *)(a3 + 3); do { v9 = (_DWORD *)v3[1248]; if ( v9 ) sub_60E650(v9, v11); v11 += 23; ++v8; } while ( v8 < *(unsigned __int8 *)(v7 + 2) ); } sub_60DC40((_DWORD **)v3[1248]); return a2; } //----- (004B68F0) -------------------------------------------------------- int __thiscall sub_4B68F0(_DWORD *this, int a2) { int result; // eax result = this[1248]; if ( result ) { *(_DWORD *)(result + 352) = a2; result = this[1249]; if ( result ) *(_DWORD *)(result + 368) = a2; } return result; } //----- (004B6940) -------------------------------------------------------- int __thiscall sub_4B6940(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi CHAR String; // [esp+8h] [ebp-804h] v3 = this; memset(&String, 0, 0x800u); memcpy(&String, (const void *)(a3 + 34), *(unsigned __int8 *)(a3 + 33)); sub_617920(v3[245], a3, &String, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[245]); return a2; } //----- (004B69C0) -------------------------------------------------------- int __thiscall sub_4B69C0(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // edi int *v4; // ecx signed int v5; // eax const char *v6; // eax v3 = this; v4 = (int *)this[141]; if ( v4 ) { v5 = *(unsigned __int16 *)a3; if ( (_WORD)v5 != 12840 ) { v6 = sub_41A850(v5); sub_492060(v3, (int)v6); return a2; } sub_43F4F0(v4); sub_43F0E0(v3[141], (int)v3, (unsigned __int8)a3[4], a3[2] != 0, a3[3] != 0); } return a2; } //----- (004B6A30) -------------------------------------------------------- int __thiscall sub_4B6A30(_DWORD *this, int a2, int a3) { unsigned __int8 v3; // dl _DWORD *v4; // esi _DWORD *v5; // ecx _DWORD *v7; // ecx v3 = *(_BYTE *)(a3 + 14); v4 = this; if ( v3 == 1 ) { v5 = (_DWORD *)this[1272]; if ( v5 ) { sub_532750(v5, *(_WORD *)a3, *(_DWORD *)(a3 + 2), *(_DWORD *)(a3 + 6), *(_DWORD *)(a3 + 10), *(_DWORD *)(a3 + 15)); sub_8F82A0(&unk_BA6B10, (_DWORD *)v4[1272]); return a2; } } else { v7 = (_DWORD *)this[1271]; if ( v7 ) { sub_532530(v7, *(_WORD *)a3, *(_DWORD *)(a3 + 2), *(_DWORD *)(a3 + 6), *(_DWORD *)(a3 + 10), v3, a3 + 15); sub_8F82A0(&unk_BA6B10, (_DWORD *)v4[1271]); } } return a2; } //----- (004B6AE0) -------------------------------------------------------- int __thiscall sub_4B6AE0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi _DWORD **v4; // ecx v3 = this; sub_680CA0((int)byte_AD9238, *a3); (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 156))(*a3); v4 = (_DWORD **)v3[138]; if ( v4 ) sub_5B8450(v4); return a2; } //----- (004B6B30) -------------------------------------------------------- int __thiscall sub_4B6B30(_DWORD *this, int a2, unsigned int *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[1274]; if ( v3 ) sub_6AFEC0(v3, *a3); return a2; } //----- (004B6B50) -------------------------------------------------------- int __thiscall sub_4B6B50(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi unsigned int v4; // esi v3 = this; if ( this[1273] ) { sub_4A5E20(this, 1); v4 = 0; do { sub_5589D0((_DWORD *)v3[1273], v4, *(_DWORD *)(a3 + 4 * v4)); ++v4; } while ( v4 < 2 ); } return a2; } //----- (004B6B90) -------------------------------------------------------- int __thiscall sub_4B6B90(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi float *v4; // ecx v3 = this; v4 = (float *)this[1277]; if ( v4 ) { if ( *(_BYTE *)a3 ) { if ( *(_BYTE *)a3 == 1 ) sub_8F86A0(&unk_BA6B10, v4); } else { sub_444810(v4, *(unsigned __int16 *)(a3 + 1)); if ( *((_BYTE *)v3 + 5112) ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[1277]); return a2; } } } return a2; } //----- (004B6BF0) -------------------------------------------------------- int __thiscall sub_4B6BF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = *(_DWORD **)(this[192] + 115704); if ( v3 ) { sub_60E9E0(v3, a3); sub_60DD90((_DWORD **)v3); } return a2; } //----- (004B6C40) -------------------------------------------------------- int __thiscall sub_4B6C40(_DWORD *this, int a2, char *a3) { _BYTE *v3; // ecx v3 = (_BYTE *)this[240]; if ( v3 ) sub_597520(v3, *a3); return a2; } //----- (004B6C80) -------------------------------------------------------- int __thiscall sub_4B6C80(_DWORD **this, int a2, int a3) { if ( this[1279] ) sub_8F82A0(&unk_BA6B10, this[1279]); return a2; } //----- (004B6CA0) -------------------------------------------------------- int __thiscall sub_4B6CA0(_DWORD **this, int a2, _WORD *a3) { if ( *a3 == 12872 ) sub_4467F0(this[1279]); return a2; } //----- (004B6CD0) -------------------------------------------------------- int __thiscall sub_4B6CD0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi char *v5; // eax _BYTE *v7; // ecx v3 = *a3; v4 = this; if ( v3 == 13824 ) { v7 = (_BYTE *)this[1280]; if ( v7 ) sub_416B60(v7, *((_BYTE *)a3 + 2)); } else if ( (unsigned int)(v3 - 13825) <= 6 ) { v5 = sub_7549E0("Error ChatColorSystem[ %d ]", *a3); sub_492060(v4, (int)v5); return a2; } return a2; } //----- (004B6D30) -------------------------------------------------------- int __thiscall sub_4B6D30(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi _DWORD *v4; // ecx signed int v5; // eax const char *v6; // eax v3 = this; v4 = (_DWORD *)this[1282]; if ( v4 ) { v5 = *a3; if ( (_WORD)v5 != 13848 ) { v6 = sub_41A850(v5); sub_492060(v3, (int)v6); return a2; } sub_44FA40(v4); } return a2; } //----- (004B6D80) -------------------------------------------------------- int __thiscall sub_4B6D80(_DWORD *this, int a2, _WORD *a3) { _BYTE *v3; // ecx char v5; // [esp+8h] [ebp-38h] __int16 v6; // [esp+38h] [ebp-8h] qmemcpy(&v5, a3, 0x30u); v3 = (_BYTE *)this[1283]; v6 = a3[24]; sub_43DD20(v3, &v5); return a2; } //----- (004B6E10) -------------------------------------------------------- int __thiscall sub_4B6E10(int *this, int a2, int a3) { char *v3; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 4, 190); if ( v3 ) sub_652500((int)v3, a3, *(_BYTE *)(a3 + 2) != 0); return a2; } //----- (004B6E50) -------------------------------------------------------- int __thiscall sub_4B6E50(char **this, int a2, _WORD *a3) { if ( *a3 == 13896 ) sub_43DAC0(this[1283], a3[1]); return a2; } //----- (004B6E80) -------------------------------------------------------- int __thiscall sub_4B6E80(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int result; // eax v3 = this; if ( this[234] && (*(unsigned __int8 (**)(void))(*(_DWORD *)this[234] + 260))() == 1 ) { sub_54A080((_DWORD **)v3[234], a3); result = a2; } else { if ( v3[258] ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[258] + 260))() == 1 ) sub_575770((_DWORD *)v3[258], a3); } result = a2; } return result; } //----- (004B6EF0) -------------------------------------------------------- int __thiscall sub_4B6EF0(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // esi int result; // eax v3 = this; if ( this[234] && (*(unsigned __int8 (**)(void))(*(_DWORD *)this[234] + 260))() == 1 ) { sub_549FF0((int **)v3[234], *a3); result = a2; } else { if ( v3[258] ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[258] + 260))() == 1 ) sub_575660((_DWORD *)v3[258], *a3); } result = a2; } return result; } //----- (004B6F70) -------------------------------------------------------- int __thiscall sub_4B6F70(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // esi _DWORD *v4; // ecx v3 = this; v4 = (_DWORD *)this[1284]; if ( v4 ) { sub_419460(v4, *a3); sub_417D20((_DWORD **)v3[1284], *(_QWORD *)(a3 + 1)); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[1284]); } return a2; } //----- (004B6FE0) -------------------------------------------------------- int __thiscall sub_4B6FE0(_DWORD ***this, int a2, int a3) { int *v3; // esi __int16 v4; // ax v3 = (int *)sub_569900(this[143]); if ( v3 ) { v4 = *(_WORD *)a3; if ( *(_WORD *)a3 == 14152 ) { if ( (*(unsigned __int8 (__thiscall **)(int *))(*v3 + 260))(v3) ) { sub_8F86A0(&unk_BA6B10, v3); return a2; } } else if ( v4 ) { sub_5CA8C0(v3, v4, *(_BYTE *)(a3 + 2)); } } return a2; } //----- (004B7050) -------------------------------------------------------- int __thiscall sub_4B7050(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax char v6; // [esp+4h] [ebp-4h] v3 = this; v6 = 1; if ( this[155] ) { if ( *a3 != 14272 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); v6 = 0; } sub_432D10((_DWORD *)v3[155], v6); } return a2; } //----- (004B70B0) -------------------------------------------------------- int __thiscall sub_4B70B0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // ecx v3 = this[139]; if ( v3 ) sub_54D3E0(v3, *a3); return a2; } //----- (004B70D0) -------------------------------------------------------- int __thiscall sub_4B70D0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // ecx v3 = this[139]; if ( v3 ) sub_54D3E0(v3, *a3); return a2; } //----- (004B7110) -------------------------------------------------------- int __thiscall sub_4B7110(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ecx v3 = this; v4 = (_DWORD *)this[1295]; if ( v4 ) sub_441CB0( v4, a3 + 5, (_WORD *)(a3 + 3), (unsigned __int8 *)a3, (unsigned __int8 *)(a3 + 1), (unsigned __int8 *)(a3 + 2)); sub_4A5FB0(v3, 1); return a2; } //----- (004B7150) -------------------------------------------------------- int __thiscall sub_4B7150(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[1294]; if ( v3 ) sub_44AA10(v3, a3, (int)(a3 + 1)); return a2; } //----- (004B7180) -------------------------------------------------------- int __stdcall sub_4B7180(int a1, int a2) { int v3; // [esp-40h] [ebp-84h] int v4; // [esp-3Ch] [ebp-80h] int v5; // [esp-38h] [ebp-7Ch] int v6; // [esp-34h] [ebp-78h] int v7; // [esp-30h] [ebp-74h] int v8; // [esp-2Ch] [ebp-70h] int v9; // [esp-28h] [ebp-6Ch] int v10; // [esp-24h] [ebp-68h] int v11; // [esp-20h] [ebp-64h] int v12; // [esp-1Ch] [ebp-60h] int v13; // [esp-18h] [ebp-5Ch] int v14; // [esp-14h] [ebp-58h] int v15; // [esp-10h] [ebp-54h] int v16; // [esp-Ch] [ebp-50h] int v17; // [esp-8h] [ebp-4Ch] int v18; // [esp-4h] [ebp-48h] int v19; // [esp+0h] [ebp-44h] int v20; // [esp+4h] [ebp-40h] int v21; // [esp+8h] [ebp-3Ch] int v22; // [esp+Ch] [ebp-38h] int v23; // [esp+10h] [ebp-34h] int v24; // [esp+14h] [ebp-30h] int v25; // [esp+18h] [ebp-2Ch] int v26; // [esp+1Ch] [ebp-28h] int v27; // [esp+20h] [ebp-24h] int v28; // [esp+24h] [ebp-20h] int v29; // [esp+28h] [ebp-1Ch] int v30; // [esp+2Ch] [ebp-18h] int v31; // [esp+30h] [ebp-14h] int v32; // [esp+34h] [ebp-10h] int v33; // [esp+38h] [ebp-Ch] qmemcpy(&v19, (const void *)(a2 + 64), 0x3Cu); qmemcpy(&v11, (const void *)(a2 + 32), 0x20u); qmemcpy(&v3, (const void *)a2, 0x20u); sub_401060( v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); return a1; } //----- (004B7210) -------------------------------------------------------- char __thiscall sub_4B7210(_DWORD *this, int a2, int a3, void *a4, size_t a5) { _DWORD *v5; // esi int v6; // ecx v5 = this; v6 = this[585]; LOWORD(a3) = ((_WORD)a2 << 10) | a3 & 0x3FF; sub_905F90(v6, &a3, 2u); return sub_906000(v5[585], a4, a5); } //----- (004B72A0) -------------------------------------------------------- char __thiscall sub_4B72A0(_DWORD *this, int a2, int a3, void *a4, size_t a5) { _DWORD *v5; // esi int v6; // ecx v5 = this; v6 = this[584]; LOWORD(a3) = ((_WORD)a2 << 10) | a3 & 0x3FF; sub_905F90(v6, &a3, 2u); return sub_906000(v5[584], a4, a5); } //----- (004B72F0) -------------------------------------------------------- char __thiscall sub_4B72F0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-84h] char v5; // [esp+8h] [ebp-80h] DWORD v6; // [esp+Ch] [ebp-7Ch] v1 = this; v6 = timeGetTime(); v2 = v1[584]; v4 = 2066; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], &v5, 0x7Cu); } //----- (004B7350) -------------------------------------------------------- char __thiscall sub_4B7350(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 4174; return sub_906000(v1, &v3, 2u); } //----- (004B7380) -------------------------------------------------------- char __thiscall sub_4B7380(_DWORD *this, float *a2, float *a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+Ch] [ebp-24h] __int64 v8; // [esp+10h] [ebp-20h] int v9; // [esp+1Ch] [ebp-14h] int v10; // [esp+20h] [ebp-10h] int v11; // [esp+24h] [ebp-Ch] int v12; // [esp+28h] [ebp-8h] v3 = this; v4 = this[584]; v7 = 8215; sub_905F90(v4, &v7, 2u); v8 = (signed __int64)*a2; v9 = v8; v8 = (signed __int64)a2[1]; v10 = v8; v8 = (signed __int64)*a3; v11 = v8; v5 = v3[584]; v8 = (signed __int64)a3[1]; v12 = v8; return sub_906000(v5, &v9, 0x10u); } //----- (004B7460) -------------------------------------------------------- char __thiscall sub_4B7460(int this, float *a2, float *a3) { int v3; // esi int v4; // ecx int v5; // ecx char result; // al __int16 v7; // [esp+Ch] [ebp-24h] __int64 v8; // [esp+10h] [ebp-20h] int v9; // [esp+1Ch] [ebp-14h] int v10; // [esp+20h] [ebp-10h] int v11; // [esp+24h] [ebp-Ch] int v12; // [esp+28h] [ebp-8h] v3 = this; if ( *(_BYTE *)(this + 5100) ) { v4 = *(_DWORD *)(this + 2336); v7 = 8217; sub_905F90(v4, &v7, 2u); v8 = (signed __int64)*a2; v9 = v8; v8 = (signed __int64)a2[1]; v10 = v8; v8 = (signed __int64)*a3; v11 = v8; v5 = *(_DWORD *)(v3 + 2336); v8 = (signed __int64)a3[1]; v12 = v8; result = sub_906000(v5, &v9, 0x10u); } return result; } //----- (004B7550) -------------------------------------------------------- char __thiscall sub_4B7550(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 8200; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B75A0) -------------------------------------------------------- char __thiscall sub_4B75A0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[584]; v7 = 8202; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; return sub_906000(v4, &v6, 2u); } //----- (004B75F0) -------------------------------------------------------- char __thiscall sub_4B75F0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 8203; return sub_906000(v1, &v3, 2u); } //----- (004B7620) -------------------------------------------------------- char __thiscall sub_4B7620(_DWORD *this, float *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v6; // [esp+4h] [ebp-14h] int v7; // [esp+8h] [ebp-10h] __int64 v8; // [esp+Ch] [ebp-Ch] __int16 v9; // [esp+14h] [ebp-4h] v2 = this; v3 = this[584]; v9 = 8210; sub_905F90(v3, &v9, 2u); v8 = (signed __int64)*a2; v6 = v8; v4 = v2[584]; v8 = (signed __int64)a2[1]; v7 = v8; return sub_906000(v4, &v6, 8u); } //----- (004B76A0) -------------------------------------------------------- void __thiscall sub_4B76A0(_DWORD *this, void *a2) { char *v2; // edi _DWORD *v3; // esi int v4; // ecx __int16 v5; // [esp+8h] [ebp-4h] v2 = (char *)a2; v3 = this; if ( a2 && *(_BYTE *)a2 ) { v4 = this[585]; v5 = 8208; sub_905F90(v4, &v5, 2u); BYTE1(a2) = strlen(v2); if ( BYTE1(a2) > 0x80u ) BYTE1(a2) = -128; sub_905F90(v3[585], &a2, 2u); sub_906000(v3[585], v2, BYTE1(a2)); sub_9060A0(v3[585]); } } //----- (004B7720) -------------------------------------------------------- char __thiscall sub_4B7720(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 8228; return sub_906000(v1, &v3, 2u); } //----- (004B7750) -------------------------------------------------------- char __thiscall sub_4B7750(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 8221; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B77A0) -------------------------------------------------------- char __thiscall sub_4B77A0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 8234; return sub_906000(v1, &v3, 2u); } //----- (004B77D0) -------------------------------------------------------- char __thiscall sub_4B77D0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax int v3; // ecx __int16 v5; // [esp+4h] [ebp-4h] v1 = this; v2 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v2); v3 = v1[584]; v5 = 8231; return sub_906000(v3, &v5, 2u); } //----- (004B7810) -------------------------------------------------------- char __thiscall sub_4B7810(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+Bh] [ebp-1h] v2 = this; v3 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))(); if ( v3 != 4 ) { v4 = v2[584]; v7 = 8224; sub_905F90(v4, &v7, 2u); v5 = v2[584]; v8 = a2; LOBYTE(v3) = sub_906000(v5, &v8, 1u); } return v3; } //----- (004B7870) -------------------------------------------------------- char __thiscall sub_4B7870(_DWORD *this, char a2, __int16 a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx char v7; // [esp+4h] [ebp-8h] __int16 v8; // [esp+5h] [ebp-7h] __int16 v9; // [esp+8h] [ebp-4h] v3 = this; v4 = this[584]; v9 = 8226; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 3u); } //----- (004B78F0) -------------------------------------------------------- char __thiscall sub_4B78F0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[584]; v7 = 9217; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; return sub_906000(v4, &v6, 2u); } //----- (004B7940) -------------------------------------------------------- char __thiscall sub_4B7940(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 9259; return sub_906000(v1, &v3, 2u); } //----- (004B7970) -------------------------------------------------------- char __thiscall sub_4B7970(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 9266; return sub_906000(v1, &v3, 2u); } //----- (004B79A0) -------------------------------------------------------- void __thiscall sub_4B79A0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx float *v3; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[584]; v4 = 9284; sub_906000(v2, &v4, 2u); v3 = (float *)v1[259]; v1[628] = 0; sub_4F31E0(v3); *((_BYTE *)v1 + 2532) = 1; } //----- (004B7A00) -------------------------------------------------------- char __thiscall sub_4B7A00(int *this, __int16 a2, __int16 a3, __int16 a4) { char result; // al __int16 v5; // [esp+Ch] [ebp-8h] _WORD v6[3]; // [esp+Eh] [ebp-6h] v6[0] = (a3 << 10) | a4 & 0x3FF; v5 = *((_WORD *)dword_AD8EBC + 274); v6[1] = a2; result = sub_4E4580(this, flt_ACCFCC, a2, (int)v6); if ( result ) result = sub_6F3D10(&off_AB7F2C, 7, 1, &v5, 6u); return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004B7A80) -------------------------------------------------------- char __thiscall sub_4B7A80(_DWORD *this, __int16 a2, int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-Ch] int v8; // [esp+6h] [ebp-Ah] __int16 v9; // [esp+Ch] [ebp-4h] v3 = this; v4 = this[584]; v9 = 12291; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 6u); } //----- (004B7AD0) -------------------------------------------------------- char __thiscall sub_4B7AD0(_DWORD *this, char a2, int a3) { _DWORD *v3; // esi float *v4; // eax void *v5; // eax int v6; // ecx int v7; // ecx char v9; // [esp+8h] [ebp-1Ch] int v10; // [esp+9h] [ebp-1Bh] void *v11; // [esp+10h] [ebp-14h] __int16 v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v3 = this; v4 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v5 = operator new(0xB4u); v11 = v5; v13 = 0; if ( v5 ) v4 = sub_4546A0((float *)v5); else v4 = 0; v13 = -1; dword_ACCFE0 = (int)v4; } if ( !*((_BYTE *)v4 + 11) ) { v6 = v3[584]; v12 = 12294; sub_905F90(v6, &v12, 2u); v7 = v3[584]; v9 = a2; v10 = a3; LOBYTE(v4) = sub_906000(v7, &v9, 5u); } return (char)v4; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (004B7B90) -------------------------------------------------------- char __thiscall sub_4B7B90(_DWORD *this, __int16 *a2, __int16 *a3) { _DWORD *v3; // esi int v4; // ecx __int16 v5; // dx int v6; // ecx __int16 v8; // [esp+4h] [ebp-8h] __int16 v9; // [esp+6h] [ebp-6h] __int16 v10; // [esp+8h] [ebp-4h] v3 = this; v4 = this[584]; v10 = 12299; sub_905F90(v4, &v10, 2u); v5 = *a3; v6 = v3[584]; v8 = *a2; v9 = v5; return sub_906000(v6, &v8, 4u); } //----- (004B7C70) -------------------------------------------------------- char __thiscall sub_4B7C70(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx char result; // al __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; if ( !byte_ADA230 ) { v3 = this[584]; v7 = 12297; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; result = sub_906000(v4, &v6, 2u); byte_ADA230 = 1; } return result; } // ADA230: using guessed type char byte_ADA230; //----- (004B7CD0) -------------------------------------------------------- char __thiscall sub_4B7CD0(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12304; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004B7D20) -------------------------------------------------------- char __thiscall sub_4B7D20(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12368; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004B7DC0) -------------------------------------------------------- char __thiscall sub_4B7DC0(_DWORD *this, char a2, char a3, char a4, char a5, char a6, int a7) { _DWORD *v7; // esi int v8; // ecx int v9; // ecx __int16 v11; // [esp+4h] [ebp-14h] char v12; // [esp+8h] [ebp-10h] char v13; // [esp+9h] [ebp-Fh] char v14; // [esp+Ah] [ebp-Eh] char v15; // [esp+Bh] [ebp-Dh] int v16; // [esp+Ch] [ebp-Ch] char v17; // [esp+10h] [ebp-8h] v7 = this; v8 = this[584]; v11 = 12311; sub_905F90(v8, &v11, 2u); v12 = a2; v14 = a4; v15 = a5; v13 = a3; v16 = a7; v9 = v7[584]; v17 = a6; return sub_906000(v9, &v12, 9u); } //----- (004B7E40) -------------------------------------------------------- char __thiscall sub_4B7E40(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 12328; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B7E90) -------------------------------------------------------- char __thiscall sub_4B7E90(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx int v8; // ecx __int16 v10; // [esp+4h] [ebp-1Ch] int v11; // [esp+8h] [ebp-18h] int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] int v15; // [esp+18h] [ebp-8h] v6 = this; v7 = this[585]; v10 = 14341; sub_905F90(v7, &v10, 2u); v13 = a4; v11 = a2; v12 = a3; v8 = v6[585]; v14 = a5; v15 = a6; return sub_906000(v8, &v11, 0x14u); } //----- (004B7F70) -------------------------------------------------------- char __thiscall sub_4B7F70(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 14408; return sub_906000(v1, &v3, 2u); } //----- (004B7FA0) -------------------------------------------------------- char __thiscall sub_4B7FA0(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[585]; v7 = 14411; sub_905F90(v4, &v7, 2u); v5 = v3[585]; v9 = a3; v8 = a2; return sub_906000(v5, &v8, 2u); } //----- (004B7FF0) -------------------------------------------------------- char __thiscall sub_4B7FF0(_DWORD *this, __int16 a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+6h] [ebp-6h] __int16 v9; // [esp+8h] [ebp-4h] v3 = this; v4 = this[585]; v9 = 14420; sub_905F90(v4, &v9, 2u); v5 = v3[585]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 3u); } //----- (004B8040) -------------------------------------------------------- char __thiscall sub_4B8040(_DWORD *this, void *a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-4h] v2 = this; v3 = this[585]; v5 = 14416; sub_905F90(v3, &v5, 2u); return sub_906000(v2[585], a2, 0x80u); } //----- (004B8080) -------------------------------------------------------- char __thiscall sub_4B8080(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[585]; LOWORD(v3) = 14418; return sub_906000(v1, &v3, 2u); } //----- (004B80B0) -------------------------------------------------------- char __thiscall sub_4B80B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = -16376; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004B80F0) -------------------------------------------------------- char __thiscall sub_4B80F0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = -16383; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004B8130) -------------------------------------------------------- int __thiscall sub_4B8130(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // ecx int v6; // [esp+4h] [ebp-14h] int v7; // [esp+8h] [ebp-10h] int v8; // [esp+Ch] [ebp-Ch] v3 = this; if ( !*a3 ) { v4 = this[219]; if ( v4 ) { v8 = 0; v7 = 0; v6 = 0; sub_42CE90(v4, (int)&v6); if ( sub_8F3540((_DWORD *)v3[219]) ) sub_42CB50((_DWORD **)v3[219]); } } return a2; } //----- (004B81A0) -------------------------------------------------------- char __thiscall sub_4B81A0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 15362; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B81F0) -------------------------------------------------------- char __thiscall sub_4B81F0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19459; return sub_906000(v1, &v3, 2u); } //----- (004B8220) -------------------------------------------------------- char __thiscall sub_4B8220(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19462; return sub_906000(v1, &v3, 2u); } //----- (004B8250) -------------------------------------------------------- char __thiscall sub_4B8250(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19463; return sub_906000(v1, &v3, 2u); } //----- (004B8280) -------------------------------------------------------- char __thiscall sub_4B8280(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 19469; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B82D0) -------------------------------------------------------- char __thiscall sub_4B82D0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 19473; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004B8320) -------------------------------------------------------- char __thiscall sub_4B8320(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx int v7; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] __int16 v9; // [esp+Ch] [ebp-4h] v3 = this; v4 = this[584]; v9 = 19477; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 8u); } //----- (004B8370) -------------------------------------------------------- char __thiscall sub_4B8370(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19481; return sub_906000(v1, &v3, 2u); } //----- (004B83A0) -------------------------------------------------------- char __thiscall sub_4B83A0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19487; return sub_906000(v1, &v3, 2u); } //----- (004B83D0) -------------------------------------------------------- char __thiscall sub_4B83D0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 19466; return sub_906000(v1, &v3, 2u); } //----- (004B8400) -------------------------------------------------------- char __thiscall sub_4B8400(_DWORD *this, __int16 a2) { __int16 v2; // di _DWORD *v3; // esi int v4; // ecx int v5; // ecx char result; // al __int16 v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 ) { v4 = this[584]; a2 = 20481; sub_905F90(v4, &a2, 2u); v5 = v3[584]; v7 = v2; result = sub_906000(v5, &v7, 2u); } return result; } //----- (004B8450) -------------------------------------------------------- char __thiscall sub_4B8450(_DWORD *this, __int16 a2) { __int16 v2; // di _DWORD *v3; // esi int v4; // ecx int v5; // ecx char result; // al __int16 v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 ) { v4 = this[584]; a2 = 20482; sub_905F90(v4, &a2, 2u); v5 = v3[584]; v7 = v2; result = sub_906000(v5, &v7, 2u); } return result; } //----- (004B84A0) -------------------------------------------------------- char __thiscall sub_4B84A0(_DWORD *this) { _DWORD *v1; // esi char result; // al int v3; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; result = sub_65B9D0(dword_AD8EBC, 500000); if ( !result ) { v3 = v1[584]; v4 = 20487; result = sub_906000(v3, &v4, 2u); } return result; } //----- (004B84E0) -------------------------------------------------------- char __thiscall sub_4B84E0(_DWORD *this) { _DWORD *v1; // esi char result; // al int v3; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; result = sub_65B9D0(dword_AD8EBC, 500000); if ( !result ) { v3 = v1[584]; v4 = 20489; result = sub_906000(v3, &v4, 2u); } return result; } //----- (004B8520) -------------------------------------------------------- unsigned int __cdecl sub_4B8520(unsigned __int16 a1, int a2) { unsigned int result; // eax unsigned int v3; // edi char v4; // dl char v5; // cl char v6; // bl size_t *v7; // eax char v8; // dl char v9; // bl char v10; // cl char v11; // al char v12; // al char v13; // al int v14; // [esp+4h] [ebp-1Ch] unsigned int v15; // [esp+8h] [ebp-18h] char v16; // [esp+Ch] [ebp-14h] int v17; // [esp+10h] [ebp-10h] int v18; // [esp+14h] [ebp-Ch] char v19; // [esp+1Ah] [ebp-6h] char v20; // [esp+1Bh] [ebp-5h] int v21; // [esp+1Ch] [ebp-4h] unsigned int v22; // [esp+28h] [ebp+8h] v18 = 1; result = (unsigned __int16)sub_6BF8C0(a1, &v17); v3 = result; v22 = (unsigned __int16)result; if ( (_WORD)result != -1 ) { result = 0; v14 = 0; LOWORD(v15) = 0; if ( a2 ) { v4 = BYTE1(a2); v5 = a2; result = *(int *)((char *)&v14 + 2); v6 = BYTE2(a2); do { if ( v18 > v17 ) break; if ( v5 > 0 ) { HIWORD(v14) = result & 0xFFF0 | v5 & 0xF; LOWORD(result) = result & 0xFFF0 | v5 & 0xF; LOBYTE(a2) = 0; } if ( v4 > 0 ) { HIWORD(v14) = result & 0xFF0F | 16 * (v4 & 0xF); LOWORD(result) = result & 0xFF0F | 16 * (v4 & 0xF); BYTE1(a2) = 0; } if ( v6 > 0 ) { HIWORD(v14) = result & 0xF0FF | ((v6 & 0xF) << 8); LOWORD(result) = result & 0xF0FF | ((v6 & 0xF) << 8); BYTE2(a2) = 0; } if ( SHIBYTE(a2) > 0 ) { HIWORD(v14) = result & 0xFFF | (SHIBYTE(a2) << 12); HIBYTE(a2) = 0; } v7 = sub_6BE850((size_t *)&v16, v3); v8 = *((_BYTE *)v7 + 3); v9 = *((_BYTE *)v7 + 2); v10 = *(_BYTE *)v7; v11 = *((_BYTE *)v7 + 1); v20 = v8; v19 = v9; if ( (a2 & 0x80u) != 0 ) { if ( v10 >= -(char)a2 ) v10 = -(char)a2; if ( v10 > 0 ) { v9 = v19; LOWORD(v15) = v15 & 0xFFF0 | v10 & 0xF; LOBYTE(a2) = v10 + a2; } v3 = v22; } if ( (a2 & 0x8000) != 0 ) { if ( v11 >= -SBYTE1(a2) ) v11 = -BYTE1(a2); if ( v11 > 0 ) { LOWORD(v15) = v15 & 0xFF0F | 16 * (v11 & 0xF); BYTE1(a2) += v11; } } if ( (a2 & 0x800000) != 0 ) { v12 = v9 >= -SBYTE2(a2) ? -BYTE2(a2) : v9; if ( v12 > 0 ) { LOWORD(v15) = v15 & 0xF0FF | ((v12 & 0xF) << 8); BYTE2(a2) += v12; } } if ( a2 < 0 ) { v13 = v20; if ( v20 >= -SHIBYTE(a2) ) v13 = -HIBYTE(a2); if ( v13 > 0 ) { LOWORD(v15) = v15 & 0xFFF | (v13 << 12); HIBYTE(a2) += v13; } } LOBYTE(v21) = (BYTE2(v14) & 0xF) - (v15 & 0xF); BYTE1(v21) = (BYTE2(v14) >> 4) - ((unsigned __int8)v15 >> 4); result = *(int *)((char *)&v14 + 2); BYTE2(v21) = (HIBYTE(v14) & 0xF) - (BYTE1(v15) & 0xF); HIBYTE(v21) = ((*(unsigned int *)((char *)&v14 + 2) >> 12) & 0xF) - ((v15 >> 12) & 0xF); if ( v21 ) { sub_6BF0F0(v3, v21); LOWORD(v14) = v3; sub_6F3D10(&off_AB7F2C, 18, 17, &v14, 6u); result = *(int *)((char *)&v14 + 2); } ++v18; v6 = BYTE2(a2); v4 = BYTE1(a2); v5 = a2; v22 = ++v3; } while ( a2 ); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B87C0) -------------------------------------------------------- unsigned int __stdcall sub_4B87C0(int a1) { unsigned __int16 *v1; // eax __int16 v2; // dx unsigned int v3; // ecx int v5; // [esp+10h] [ebp+8h] v1 = (unsigned __int16 *)a1; v2 = *(_WORD *)(a1 + 2); LOBYTE(v5) = (*(_BYTE *)(a1 + 2) & 0xF) - (*(_BYTE *)(a1 + 4) & 0xF); v3 = v1[2]; BYTE1(v5) = ((unsigned __int8)v2 >> 4) - (((unsigned __int8)v1[2] >> 4) & 0xF); BYTE2(v5) = ((v1[1] >> 8) & 0xF) - (BYTE1(v3) & 0xF); HIBYTE(v5) = (((unsigned int)v1[1] >> 12) & 0xF) - ((v3 >> 12) & 0xF); return sub_4B8520(*v1, v5); } //----- (004B8840) -------------------------------------------------------- char __thiscall sub_4B8840(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 18442; return sub_906000(v1, &v3, 2u); } //----- (004B8870) -------------------------------------------------------- char __thiscall sub_4B8870(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[585]; v4 = 21535; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], 0, 0); } //----- (004B88B0) -------------------------------------------------------- char __thiscall sub_4B88B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[585]; v4 = 21533; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], 0, 0); } //----- (004B88F0) -------------------------------------------------------- char __thiscall sub_4B88F0(_DWORD *this, __int16 *a2, __int16 *a3, int a4) { _DWORD *v4; // esi int v5; // ecx __int16 v6; // dx int v7; // ecx __int16 v9; // [esp+4h] [ebp-Ch] __int16 v10; // [esp+6h] [ebp-Ah] int v11; // [esp+8h] [ebp-8h] __int16 v12; // [esp+Ch] [ebp-4h] v4 = this; v5 = this[584]; v12 = 12301; sub_905F90(v5, &v12, 2u); v6 = *a3; v9 = *a2; v7 = v4[584]; v10 = v6; v11 = a4; sub_905F90(v7, &v9, 8u); return sub_906000(v4[584], 0, 0); } //----- (004B8960) -------------------------------------------------------- char __thiscall sub_4B8960(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[584]; v4 = 26628; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], 0, 0); } //----- (004B89A0) -------------------------------------------------------- char __thiscall sub_4B89A0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[584]; v4 = 26640; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], 0, 0); } //----- (004B89E0) -------------------------------------------------------- char __thiscall sub_4B89E0(_DWORD **this, __int16 a2) { _DWORD **v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-8h] __int16 v6; // [esp+8h] [ebp-4h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*this[185] + 260))() ) sub_8F86A0(&unk_BA6B10, v2[185]); v6 = 26631; sub_905F90((int)v2[584], &v6, 2u); v3 = (int)v2[584]; v5 = a2; sub_905F90(v3, &v5, 2u); return sub_906000((int)v2[584], 0, 0); } //----- (004B8A60) -------------------------------------------------------- char __thiscall sub_4B8A60(_DWORD *this, __int16 a2, char a3, __int16 a4) { _DWORD *v4; // esi int v5; // ecx int v6; // ecx __int16 v8; // [esp+4h] [ebp-Ch] char v9; // [esp+6h] [ebp-Ah] __int16 v10; // [esp+7h] [ebp-9h] __int16 v11; // [esp+Ch] [ebp-4h] v4 = this; byte_AB0180 = 0; v5 = this[584]; v11 = 26637; sub_905F90(v5, &v11, 2u); v8 = a2; v10 = a4; v6 = v4[584]; v9 = a3; sub_905F90(v6, &v8, 5u); return sub_906000(v4[584], 0, 0); } // AB0180: using guessed type char byte_AB0180; //----- (004B8AD0) -------------------------------------------------------- int __userpurge sub_4B8AD0@(int *a1@, int a2@, int a3, int a4) { char *v4; // ebx _DWORD *v5; // eax __int16 v6; // cx void (__thiscall *v7)(char *, signed int, signed int); // eax char v9; // [esp-24h] [ebp-30h] int v10; // [esp-20h] [ebp-2Ch] int v11; // [esp-1Ch] [ebp-28h] int v12; // [esp-18h] [ebp-24h] int v13; // [esp-14h] [ebp-20h] int v14; // [esp-10h] [ebp-1Ch] int v15; // [esp-Ch] [ebp-18h] signed int v16; // [esp-4h] [ebp-10h] if ( *((_WORD *)dword_AD8EBC + 274) != *(_WORD *)a4 ) { v4 = sub_4E2910(a1, *(_WORD *)a4, 26, 3); if ( v4 ) { v5 = (_DWORD *)sub_63DA50(byte_AD8A08, *(_WORD *)a4); if ( v5 ) sub_63E080(byte_AD8A08, a2, v5); v6 = *(_WORD *)(a4 + 2); v7 = *(void (__thiscall **)(char *, signed int, signed int))(*(_DWORD *)v4 + 40); v16 = 5; *((_WORD *)v4 + 88) = v6; v7(v4, 1, v16); v16 = *(_BYTE *)(a4 + 14) != 0; qmemcpy(&v9, (const void *)(a4 + 15), 0x1Cu); sub_650B60(v4, v9, v10, v11, v12, v13, v14, v15, *(_WORD *)(a4 + 43), v16); } } return a3; } //----- (004B8B60) -------------------------------------------------------- int __userpurge sub_4B8B60@(int *a1@, int a2@, int a3, __int16 *a4) { int *v4; // edi char *v5; // eax char *v6; // esi int v8; // [esp-4h] [ebp-Ch] v4 = a1; if ( *((_WORD *)dword_AD8EBC + 274) != *a4 ) { v8 = a2; v5 = sub_4E2910(a1, *a4, 26, 6); v6 = v5; if ( v5 ) { if ( !(*(unsigned __int8 (__thiscall **)(char *, int))(*(_DWORD *)v5 + 648))(v5, v8) ) (*(void (__thiscall **)(char *, _DWORD, __int16 *))(*(_DWORD *)v6 + 64))(v6, 0, a4 + 1); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v6 + 40))(v6, 0); } if ( v4[185] ) { if ( dword_AB0C84 ) { if ( dword_AB0C84 == 2 && word_ACF574 == *a4 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v4[185] + 260))() ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v4[185]); } else if ( word_ACF574 == *a4 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v4[185] + 260))() ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v4[185]); return a3; } } } return a3; } // 4B8B60: could not find valid save-restore pair for esi // AB0C84: using guessed type int dword_AB0C84; // ACF574: using guessed type __int16 word_ACF574; //----- (004B8C50) -------------------------------------------------------- char __thiscall sub_4B8C50(_DWORD *this, __int16 a2) { _DWORD *v2; // esi DWORD v3; // eax int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = timeGetTime(); if ( dword_ACEAA0 + 5000 <= v3 ) { byte_AB0180 = 0; v4 = v2[584]; v7 = 26634; sub_905F90(v4, &v7, 2u); v6 = a2; sub_905F90(v2[584], &v6, 2u); LOBYTE(v3) = sub_906000(v2[584], 0, 0); } return v3; } // AB0180: using guessed type char byte_AB0180; // ACEAA0: using guessed type int dword_ACEAA0; //----- (004B8CC0) -------------------------------------------------------- char __thiscall sub_4B8CC0(_DWORD *this, int a2, __int16 a3, char a4) { _DWORD *v4; // esi int v5; // ecx int v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v4 = this; v8 = a3; v7 = a2; v5 = this[584]; v9 = a4; a3 = 26643; sub_905F90(v5, &a3, 2u); return sub_906000(v4[584], &v7, 6u); } //----- (004B8D10) -------------------------------------------------------- char __thiscall sub_4B8D10(_DWORD *this, int a2, __int16 a3) { char result; // al _DWORD *v4; // esi int v5; // ecx int v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] result = a2; v4 = this; if ( a2 != -1 && a3 != -1 ) { v7 = a3; v6 = a2; v5 = this[584]; a3 = 26645; sub_905F90(v5, &a3, 2u); result = sub_906000(v4[584], &v6, 6u); } return result; } //----- (004B8D70) -------------------------------------------------------- char __thiscall sub_4B8D70(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // ecx int v5; // ecx char v7; // [esp+4h] [ebp-4h] char v8; // [esp+5h] [ebp-3h] __int16 v9; // [esp+6h] [ebp-2h] v2 = this; v3 = this[178]; if ( v3 ) { v4 = *(_DWORD *)(v3 + 564); if ( v4 ) { v7 = *(_BYTE *)(v4 + 4 * a2 + 344); if ( v7 != 10 ) { v8 = *(_BYTE *)(*(_DWORD *)(v3 + 564) + 4 * a2 + 345) & 0x3F; v9 = 0; } v5 = v2[584]; LOWORD(a2) = 24577; sub_905F90(v5, &a2, 2u); LOBYTE(v3) = sub_906000(v2[584], &v7, 4u); } } return v3; } //----- (004B8DF0) -------------------------------------------------------- char __thiscall sub_4B8DF0(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // ecx int v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; LOWORD(a2) = 22531; v4 = this[585]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[585], &v6, 4u); } //----- (004B8E30) -------------------------------------------------------- char __thiscall sub_4B8E30(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = 22555; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004B8E70) -------------------------------------------------------- char __thiscall sub_4B8E70(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // ecx int v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; LOWORD(a2) = 22533; v4 = this[585]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[585], &v6, 4u); } //----- (004B8EB0) -------------------------------------------------------- char __thiscall sub_4B8EB0(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // ecx int v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; LOWORD(a2) = 22535; v4 = this[585]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[585], &v6, 4u); } //----- (004B8EF0) -------------------------------------------------------- char __thiscall sub_4B8EF0(int *this, int a2) { void *v2; // edi int *v3; // esi size_t v4; // ebx char result; // al int v6; // ecx v2 = *(void **)(a2 + 4); v3 = this; if ( v2 ) { v4 = *(_DWORD *)(a2 + 8); LOWORD(a2) = (*(_WORD *)a2 << 10) | *(_WORD *)(a2 + 2) & 0x3FF; sub_905F90(this[585], &a2, 2u); result = sub_906000(v3[585], v2, v4); } else { v6 = this[585]; LOWORD(a2) = (*(_WORD *)a2 << 10) | *(_WORD *)(a2 + 2) & 0x3FF; result = sub_906000(v6, &a2, 2u); } return result; } //----- (004B8F80) -------------------------------------------------------- int __thiscall sub_4B8F80(_DWORD *this, int a2, void *a3) { _DWORD *v3; // edi _DWORD *v4; // esi int v5; // ecx int v7; // ecx v3 = a3; v4 = this; if ( *((_DWORD *)a3 + 11) ) { v3[12] = timeGetTime(); v5 = v4[585]; LOWORD(a3) = 2067; sub_905F90(v5, &a3, 2u); sub_906000(v4[585], v3, 0xA4u); } else { v3[11] = timeGetTime(); v7 = v4[584]; LOWORD(a3) = 2067; sub_905F90(v7, &a3, 2u); sub_906000(v4[584], v3, 0xA4u); } return a2; } //----- (004B9010) -------------------------------------------------------- char __thiscall sub_4B9010(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[585]; LOWORD(v3) = 2075; return sub_906000(v1, &v3, 2u); } //----- (004B9040) -------------------------------------------------------- int __thiscall sub_4B9040(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax int v5; // ecx int v7; // edi int v8; // ecx v3 = this; if ( *a3 != 4368 ) { sub_492060(this, (int)"Item Mall Web Key DB Error!"); return a2; } if ( !dword_ADB4F8 ) goto LABEL_17; v4 = this[279]; if ( !v4 ) goto LABEL_17; if ( !_mbscmp("mhGuestBookWin", *(const unsigned __int8 **)(v4 + 8)) ) { v5 = v3[279]; if ( !*(_BYTE *)(v5 + 364) ) { sub_6E9650(v5, (int)(a3 + 1), v3[275] + 344); return a2; } return a2; } if ( _mbscmp("mhEditRoomWin", *(const unsigned __int8 **)(v3[279] + 8)) ) { LABEL_17: v8 = v3[147]; if ( v8 ) { sub_59F620(v8); sub_59F660((_BYTE *)v3[147], a3 + 1, 0); sub_4A67D0((_DWORD **)v3); return a2; } return a2; } v7 = v3[279]; sub_6E5810((char *)v3[275], 1); if ( !*(_BYTE *)(v7 + 3656) ) sub_6E6F60((int *)v7, (int)(a3 + 1)); return a2; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004B9150) -------------------------------------------------------- int __userpurge sub_4B9150@(int a1@, int a2@, int a3@, int a4, int a5) { int v5; // esi v5 = a1; word_B7D19C = *(_WORD *)a5; sub_680620(byte_AD9238, (void *)(a5 + 3), *(unsigned __int8 *)(a5 + 2)); sub_6F3480(*(void **)(v5 + 2340)); sub_4A4D80((_DWORD *)v5, a2, a3); return a4; } // B7D19C: using guessed type __int16 word_B7D19C; //----- (004B91B0) -------------------------------------------------------- int __stdcall sub_4B91B0(int a1, int a2) { char *v2; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { *((_DWORD *)v2 + 169) = *(_DWORD *)(a2 + 2); v2[680] = 0; } return a1; } //----- (004B91F0) -------------------------------------------------------- int __stdcall sub_4B91F0(int a1, int a2) { int v2; // eax char *v3; // eax v2 = sub_714D70(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2) ) sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v3 ) { *((_DWORD *)v3 + 169) = *(_DWORD *)(a2 + 2); v3[680] = 1; } return a1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004B9250) -------------------------------------------------------- int __userpurge sub_4B9250@(int a1@, int a2@, int a3, int a4) { int v4; // esi int v5; // ecx int v6; // eax int v7; // ecx void (__thiscall ***v8)(_DWORD, signed int); // edi _BYTE *v9; // ecx _DWORD *v10; // ecx int v11; // eax _DWORD *v12; // eax int v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // eax int v17; // eax _DWORD *v18; // eax int v19; // eax _DWORD *v20; // eax int v21; // eax _DWORD *v22; // eax float **v23; // ecx _DWORD *v24; // ecx _DWORD *v25; // ecx int v26; // ecx int v28; // [esp+20h] [ebp-14h] int v29; // [esp+24h] [ebp-10h] int v30; // [esp+30h] [ebp-4h] v4 = a1; v5 = a4; *(_DWORD *)(v4 + 2408) = dword_ACDD6C; v6 = v4 + 2433; *(_DWORD *)v6 = *(_DWORD *)v5; *(_DWORD *)(v6 + 4) = *(_DWORD *)(v5 + 4); *(_WORD *)(v6 + 8) = *(_WORD *)(v5 + 8); *(_BYTE *)(v4 + 2432) = 1; *(_DWORD *)(v4 + 2428) = v4 + 2433; *(_DWORD *)(v4 + 2424) = 1; sub_8EF0D0((void *)v4, dword_ACDD6C, (_DWORD *)(v4 + 2412)); v7 = *(_DWORD *)(v4 + 740); v8 = 0; if ( v7 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v7 + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 740)); sub_56BED0(*(_DWORD **)(v4 + 572)); sub_56C0A0(*(_DWORD ***)(v4 + 572)); sub_56B270(*(_DWORD **)(v4 + 572)); sub_56B5A0(*(_DWORD **)(v4 + 572)); sub_4F31E0(*(float **)(v4 + 1036)); *(_DWORD *)(v4 + 2512) = 0; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) sub_654B20(dword_AD8EBC, 0); sub_5847D0(*(_DWORD **)(v4 + 1068), 0); sub_582CF0(*(_DWORD ***)(v4 + 1152)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1152) + 256))(0); sub_4A53F0((_DWORD *)v4); if ( *(_BYTE *)(v4 + 42) ) sub_4E3330((_DWORD *)(v4 + 36), 0); sub_4DE8F0((float *)v4, 0, 0.0); if ( dword_ADB4F8 ) { v9 = (_BYTE *)*sub_4A3B80(&v29); v30 = 0; LOBYTE(a2) = sub_6C4EE0(v9); v30 = -1; if ( v29 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v29; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( (_BYTE)a2 ) { LOWORD(a4) = 7312; v10 = (_DWORD *)*sub_4A3B80(&v28); v30 = 1; sub_6C7E20(v10, &a4); v30 = -1; if ( v28 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } } sub_4A4BE0((_DWORD *)v4, 1); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 1108)); } v11 = sub_6D38C0(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v11 + 260))(v11) ) { v12 = (_DWORD *)sub_6D38C0(); sub_8F86A0(&unk_BA6B10, v12); } v13 = sub_6D3860(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v13 + 260))(v13) ) { v14 = (_DWORD *)sub_6D3860(); sub_8F86A0(&unk_BA6B10, v14); } v15 = sub_6D3810(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v15 + 260))(v15) ) { v16 = (_DWORD *)sub_6D3810(); sub_8F86A0(&unk_BA6B10, v16); } v17 = sub_6D3840(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v17 + 260))(v17) ) { v18 = (_DWORD *)sub_6D3840(); sub_8F86A0(&unk_BA6B10, v18); } sub_569950(*(_DWORD ***)(v4 + 572), 0); v19 = sub_6D4850(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v19 + 260))(v19) ) { v20 = (_DWORD *)sub_6D4850(); sub_8F86A0(&unk_BA6B10, v20); } v21 = sub_6D4860(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v21 + 260))(v21) ) { v22 = (_DWORD *)sub_6D4860(); sub_8F86A0(&unk_BA6B10, v22); } sub_6BDA20(a2, (int)v8); v23 = *(float ***)(v4 + 1044); if ( v23 ) sub_4B11E0(v23); if ( *(_DWORD *)(v4 + 764) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 764)); v24 = *(_DWORD **)(v4 + 4836); if ( v24 ) sub_6B4B70(v24); sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; sub_6AC800(&unk_B91250); v25 = *(_DWORD **)(v4 + 5104); if ( v25 ) { sub_55F210(v25); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 5104)); } sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 4984)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 4980)); v26 = *(_DWORD *)(v4 + 572); if ( v26 ) sub_56C880(v26); return a3; } // ACCFCC: using guessed type float flt_ACCFCC; // ACDD6C: using guessed type int dword_ACDD6C; // AD8CD8: using guessed type char byte_AD8CD8; // ADB4F8: using guessed type int dword_ADB4F8; //----- (004B9690) -------------------------------------------------------- int __fastcall sub_4B9690(int a1, int a2, int a3, unsigned __int16 *a4) { int v4; // ebx char *v5; // esi float *v6; // eax _DWORD *v7; // eax __int16 v8; // ST20_2 int *v9; // eax int v10; // ST10_4 int v11; // ST14_4 int v12; // ST18_4 int v13; // ST1C_4 int v14; // ST20_4 _DWORD *v15; // eax int v17; // [esp+20h] [ebp-8h] v4 = a1; if ( !byte_AD8CD8 && *((_BYTE *)a4 + 32) ) { if ( *((_WORD *)dword_AD8EBC + 274) != *a4 ) sub_667180(dword_AD8C90, a2, (int)a4, 0); v5 = sub_4E2910((int *)v4, *a4, 7, 6); if ( v5 ) { v6 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); if ( sub_67C450(dword_AD8EBC, v6) ) { v7 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); sub_6AF370(&unk_B91250, "Regen", *v7, v7[1], v7[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } v5[1449] = *((_BYTE *)a4 + 206) != 0; if ( sub_652070(v5) == 4 || sub_652070(v5) == 5 || sub_652070(v5) == 9 || sub_652070(v5) == 10 || sub_652070(v5) == 14 || sub_652070(v5) == 15 || sub_652070(v5) == 19 || sub_652070(v5) == 20 || sub_652070(v5) == 24 || sub_652070(v5) == 25 || sub_652070(v5) == 27 ) { v8 = *((_WORD *)v5 + 274); *((_DWORD *)v5 + 682) = *((unsigned __int8 *)a4 + 207); v9 = (int *)sub_6AB1D0(&unk_B91250, v8); if ( v9 ) sub_6ACDF0(&unk_B91250, v9); if ( *((_BYTE *)a4 + 207) < 0x78u ) sub_6AF8E0(&unk_B91250, (int)&v17, "Aura100", (int)v5, 1, flt_ACCFCC, 1, 1, 0, 1); else sub_6AF8E0(&unk_B91250, (int)&v17, "Aura120", (int)v5, 1, flt_ACCFCC, 1, 1, 0, 1); } v10 = *(_DWORD *)(a4 + 1); v11 = *(_DWORD *)(a4 + 3); v12 = *(_DWORD *)(a4 + 5); v13 = *(_DWORD *)(a4 + 7); v14 = *(_DWORD *)(a4 + 9); v15 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715390(v15, v10, v11, v12, v13, v14) && dword_AD8EBC != v5 ) nullsub_43(v5); } if ( *((_BYTE *)a4 + 243) != 2 ) sub_56F920(*(_DWORD **)(v4 + 572), *a4); sub_67A1D0((int)(v5 + 776), *((_BYTE *)a4 + 245) != 0); } return a3; } // 715320: using guessed type int __cdecl nullsub_43(_DWORD); // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004B98F0) -------------------------------------------------------- int __fastcall sub_4B98F0(int a1, int a2, int a3, unsigned __int8 *a4) { signed int v4; // ebx unsigned __int8 *v5; // edi char *v6; // eax int v7; // esi __int16 v8; // ax int *v9; // eax int v10; // ST10_4 int v11; // ST14_4 int v12; // ST18_4 int v13; // ST1C_4 int v14; // ST20_4 _DWORD *v15; // eax int v17; // [esp+20h] [ebp-8h] int v18; // [esp+24h] [ebp-4h] v17 = a1; if ( !byte_AD8CD8 ) { sub_667280(dword_AD8C90, a2, a4); v4 = 0; if ( *a4 ) { v5 = a4 + 208; do { v6 = sub_664AB0(dword_AD8C90, *(_WORD *)(v5 - 207)); v7 = (int)v6; if ( v6 ) { if ( sub_652070(v6) == 4 || sub_652070((_BYTE *)v7) == 5 || sub_652070((_BYTE *)v7) == 9 || sub_652070((_BYTE *)v7) == 10 || sub_652070((_BYTE *)v7) == 14 || sub_652070((_BYTE *)v7) == 15 || sub_652070((_BYTE *)v7) == 19 || sub_652070((_BYTE *)v7) == 20 || sub_652070((_BYTE *)v7) == 24 || sub_652070((_BYTE *)v7) == 25 || sub_652070((_BYTE *)v7) == 27 ) { v8 = *(_WORD *)(v7 + 548); *(_DWORD *)(v7 + 2728) = *v5; v9 = (int *)sub_6AB1D0(&unk_B91250, v8); if ( v9 ) sub_6ACDF0(&unk_B91250, v9); if ( *v5 < 0x78u ) sub_6AF8E0(&unk_B91250, (int)&v18, "Aura100", v7, 1, flt_ACCFCC, 1, 1, 0, 1); else sub_6AF8E0(&unk_B91250, (int)&v18, "Aura120", v7, 1, flt_ACCFCC, 1, 1, 0, 1); } v10 = *(_DWORD *)(v5 - 205); v11 = *(_DWORD *)(v5 - 201); v12 = *(_DWORD *)(v5 - 197); v13 = *(_DWORD *)(v5 - 193); v14 = *(_DWORD *)(v5 - 189); v15 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715390(v15, v10, v11, v12, v13, v14) && dword_AD8EBC != (char *)v7 ) nullsub_43(v7); if ( *(_BYTE *)(v7 + 2952) != 2 ) sub_56F920(*(_DWORD **)(v17 + 572), *(unsigned __int16 *)(v7 + 548)); sub_67A1D0(v7 + 776, v5[38] != 0); } ++v4; v5 += 246; } while ( v4 < *a4 ); } } return a3; } // 715320: using guessed type int __cdecl nullsub_43(_DWORD); // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004B9AD0) -------------------------------------------------------- int __thiscall sub_4B9AD0(int *this, int a2, int a3) { char *v3; // eax char *v4; // esi int v5; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 7, 2); v4 = v3; if ( v3 ) { *((_DWORD *)v3 + 364) = *(unsigned __int8 *)(a3 + 4); sub_653D00(v3, *(unsigned __int16 *)(a3 + 2)); if ( *(_BYTE *)(a3 + 4) == 17 ) { v5 = sub_6AB1D0(&unk_B91250, *((_WORD *)v4 + 274)); if ( v5 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 84))(v5, 0); } } return a2; } //----- (004B9B40) -------------------------------------------------------- int __thiscall sub_4B9B40(int *this, int a2, int a3) { char *v3; // eax char *v4; // edi v3 = sub_4E2910(this, *(_WORD *)a3, 7, 3); v4 = v3; if ( v3 ) { *((_DWORD *)v3 + 364) = *(unsigned __int8 *)(a3 + 5); sub_673190(v3 + 776, *(_WORD *)(a3 + 2), *(_BYTE *)(a3 + 4)); sub_654000(v4, *(unsigned __int16 *)(a3 + 2), *(_BYTE *)(a3 + 4)); } return a2; } //----- (004B9BA0) -------------------------------------------------------- int __thiscall sub_4B9BA0(int *this, int a2, __int16 *a3) { __int16 *v3; // ebx char *v4; // eax char *v5; // esi int v6; // edi int v7; // edx int *v8; // eax int v9; // eax int v10; // eax char *v11; // eax int v13; // ecx int *v14; // [esp+Ch] [ebp-4h] v3 = a3; v14 = this; v4 = sub_4E2910(this, *a3, 7, 5); v5 = v4; if ( v4 ) { sub_654000(v4, (unsigned __int16)v3[1], *((_BYTE *)v3 + 4)); if ( *((_DWORD *)v5 + 43) == 10 ) { v6 = dword_ACB230; v7 = *(_DWORD *)dword_ACB230; a3 = (__int16 *)(unsigned __int16)v3[1]; if ( (*(unsigned __int8 (__thiscall **)(int, __int16 *))(v7 + 16))(dword_ACB230, a3) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v6 + 200) ) { v8 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)a3); if ( *v8 ) { v9 = *v8; if ( v9 ) { if ( *(_DWORD *)(v9 + 102) == 5 ) { v10 = (unsigned __int16)v3[3]; if ( (_WORD)v10 == -1 ) { if ( *((_DWORD *)v5 + 43) == 10 ) { sub_650B90(v5, 0); v13 = v14[178]; if ( v13 ) { LOWORD(a3) = 0; sub_4F4BA0(v13, (int)&a3); } } } else { v11 = sub_4DC370(v10, *((unsigned __int8 *)v3 + 8)); if ( v11 ) { sub_650910(v5, (int)v11); sub_650B90(v5, 1); return a2; } } } } } } } } } return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004B9CB0) -------------------------------------------------------- int __thiscall sub_4B9CB0(int *this, int a2, __int16 *a3) { __int16 *v3; // ebx int *v4; // edi char *v5; // eax char *v6; // esi void *v7; // eax int v8; // ecx int v9; // eax v3 = a3; v4 = this; v5 = sub_4E2910(this, *a3, 7, 4); v6 = v5; if ( v5 ) { sub_654520((int)v5, *((unsigned __int8 *)v3 + 2)); if ( *((_DWORD *)v6 + 43) == 10 ) { if ( *((_BYTE *)v3 + 2) == 12 ) { v7 = sub_74CD00(&unk_AD8C08, 0, 0); sub_650910(v6, (int)v7); sub_650B90(v6, 0); } v8 = v4[178]; if ( v8 ) { LOWORD(a3) = 0; sub_4F4BA0(v8, (int)&a3); } } } if ( *((_BYTE *)v3 + 2) == 17 && (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 656))(v6) >= 100 ) { v9 = sub_6AB1D0(&unk_B91250, *((_WORD *)v6 + 274)); if ( v9 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 84))(v9, 1); } return a2; } //----- (004B9D70) -------------------------------------------------------- int __stdcall sub_4B9D70(int a1, int a2) { int v2; // esi int v3; // edi int v4; // esi int *v5; // eax char *v6; // eax _DWORD *v7; // eax int result; // eax v2 = dword_ACE8D0; v3 = *(unsigned __int16 *)(a2 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v2 + 200) ) { v5 = (int *)(*(_DWORD *)(v2 + 196) + 4 * v3); if ( *v5 ) v4 = *v5; else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v6 = sub_664AB0(dword_AD8C90, *(_WORD *)(a2 + 2)); if ( v4 && v6 && *(_DWORD *)(v4 + 531) == 65 ) { v7 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 212))(v6); sub_62F830((_DWORD *)a2, v7, 1); result = a1; } else { sub_62F830((_DWORD *)a2, &dword_ABD498, 0); result = a1; } return result; } // ABD498: using guessed type int dword_ABD498; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004B9E20) -------------------------------------------------------- int __stdcall sub_4B9E20(int a1, int a2) { int v2; // edx int v3; // ecx int v4; // eax int v5; // edx char v6; // al int v7; // ecx int v8; // edx int v10; // [esp+4h] [ebp-28h] int v11; // [esp+8h] [ebp-24h] int v12; // [esp+Ch] [ebp-20h] int v13; // [esp+10h] [ebp-1Ch] int v14; // [esp+14h] [ebp-18h] int v15; // [esp+18h] [ebp-14h] int v16; // [esp+1Ch] [ebp-10h] int v17; // [esp+20h] [ebp-Ch] char v18; // [esp+24h] [ebp-8h] if ( *((_WORD *)dword_AD8EBC + 274) != *(_WORD *)a2 ) sub_666700(dword_AD8C90, (unsigned __int16 *)a2); v2 = *(_DWORD *)(a2 + 14); v3 = *(_DWORD *)(a2 + 22); v11 = *(_DWORD *)(a2 + 18); v14 = *(_DWORD *)(a2 + 30); v4 = *(_DWORD *)(a2 + 42); v10 = v2; v5 = *(_DWORD *)(a2 + 26); v17 = v4; v6 = *(_BYTE *)(a2 + 13); v12 = v3; v7 = *(_DWORD *)(a2 + 34); v13 = v5; v8 = *(_DWORD *)(a2 + 38); v15 = v7; v16 = v8; v18 = 0; if ( v6 ) { if ( (unsigned __int8)(v6 - 1) <= 1u ) sub_699710(byte_ADB468, (char *)&v10, 0); } else { sub_699710(byte_ADB468, (char *)&v10, 1); } return a1; } //----- (004B9EC0) -------------------------------------------------------- int __stdcall sub_4B9EC0(int a1, _BYTE *a2) { signed int v2; // edi int *v3; // esi int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx int v8; // edx char v9; // al int v10; // ecx int v11; // edx int v13; // [esp+8h] [ebp-28h] int v14; // [esp+Ch] [ebp-24h] int v15; // [esp+10h] [ebp-20h] int v16; // [esp+14h] [ebp-1Ch] int v17; // [esp+18h] [ebp-18h] int v18; // [esp+1Ch] [ebp-14h] int v19; // [esp+20h] [ebp-10h] int v20; // [esp+24h] [ebp-Ch] char v21; // [esp+28h] [ebp-8h] v2 = 0; if ( *a2 ) { v3 = (int *)(a2 + 23); do { sub_666700(dword_AD8C90, (unsigned __int16 *)v3 - 11); v4 = *(v3 - 2); v5 = *(v3 - 1); v15 = *v3; v6 = v3[3]; v13 = v4; v7 = v3[1]; v14 = v5; v8 = v3[2]; v18 = v6; v9 = *((_BYTE *)v3 - 9); v16 = v7; v10 = v3[4]; v17 = v8; v11 = v3[5]; v19 = v10; v20 = v11; v21 = 0; if ( v9 ) { if ( (unsigned __int8)(v9 - 1) <= 1u ) sub_699710(byte_ADB468, (char *)&v13, 0); } else { sub_699710(byte_ADB468, (char *)&v13, 1); } ++v2; v3 += 12; } while ( v2 < (unsigned __int8)*a2 ); } return a1; } //----- (004B9F70) -------------------------------------------------------- int __thiscall sub_4B9F70(int *this, int a2, unsigned __int8 *a3) { int *v3; // edi char *v4; // eax char *v5; // ebx const char *v6; // eax int v7; // eax int v8; // eax int v9; // eax char *v10; // ebx unsigned __int8 v11; // al int v12; // ST1C_4 int v13; // ST1C_4 unsigned __int8 v14; // al __int16 v15; // cx int v17; // [esp+Ch] [ebp-2B8h] char *v18; // [esp+10h] [ebp-2B4h] int v19; // [esp+14h] [ebp-2B0h] int v20; // [esp+18h] [ebp-2ACh] int v21; // [esp+1Ch] [ebp-2A8h] int v22; // [esp+20h] [ebp-2A4h] int v23; // [esp+24h] [ebp-2A0h] int v24; // [esp+28h] [ebp-29Ch] char v25[4]; // [esp+2Ch] [ebp-298h] int v26; // [esp+30h] [ebp-294h] int v27; // [esp+34h] [ebp-290h] int v28; // [esp+38h] [ebp-28Ch] int v29; // [esp+3Ch] [ebp-288h] int v30; // [esp+40h] [ebp-284h] char v31; // [esp+140h] [ebp-184h] char v32[128]; // [esp+240h] [ebp-84h] v3 = this; v4 = sub_4E2910(this, *(_WORD *)(a3 + 1), 8, 2); v5 = v4; v18 = v4; if ( v4 ) { v6 = (const char *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 84))(v4); v29 = 0; v28 = 0; v27 = 0; v26 = 0; *(_DWORD *)v25 = 0; strncpy(v25, v6, 0x14u); v20 = v26; v21 = v27; v23 = v29; v7 = v3[228]; v19 = *(_DWORD *)v25; v22 = v28; if ( !sub_74DA80((_DWORD *)(v7 + 360), &v19) || (v20 = v26, v21 = v27, v23 = v29, v8 = v3[228], v19 = *(_DWORD *)v25, v22 = v28, (v9 = sub_74DA80((_DWORD *)(v8 + 360), &v19)) != 0) && *(_BYTE *)(v9 + 20) == 1 ) { v17 = *a3; if ( v17 > 0 ) { v10 = (char *)&a3[a3[3] + 7]; v24 = *a3; do { sub_492730((_DWORD ***)v3, 1, v10); v10 += 103; --v24; } while ( v24 ); v5 = v18; } v11 = a3[3]; if ( v11 && v11 <= 0x80u ) { memset(v32, 0, 0x80u); strncpy(v32, (const char *)a3 + 7, a3[3]); v32[a3[3]] = 0; memset(&v31, 0, 0x100u); if ( v5 == dword_AD8EBC ) { v12 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v5 + 84))(v5, v32); sprintf(&v31, "[%s] : %s", v12); } else { v13 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v5 + 84))(v5, v32); sprintf(&v31, "{color,#FFFF00,[%s]} : %s", v13); } v14 = a3[4]; if ( v14 & 2 ) { v15 = *(_WORD *)(a3 + 1); if ( v14 & 1 ) { if ( v15 == *((_WORD *)dword_AD8EBC + 274) ) sub_492010((_DWORD ***)v3, &v31); else sub_492020((_DWORD ***)v3, &v31); } else if ( v15 == *((_WORD *)dword_AD8EBC + 274) ) { sub_492760((_DWORD ***)v3, &v31, a3[5]); } else { sub_4927A0((_DWORD ***)v3, &v31, a3[5]); } } if ( v17 ) { memset(&v30, 0, 0x100u); sub_4E2390(v32, (int)&v30, 0); sub_63E8C0(byte_AD8A08, *((unsigned __int16 *)v5 + 274), &v30, a3[5], a3[6]); } else { sub_63E8C0(byte_AD8A08, *((unsigned __int16 *)v5 + 274), v32, a3[5], a3[6]); } } } } return a2; } // 4B9F70: using guessed type char var_84[128]; //----- (004BA280) -------------------------------------------------------- int __thiscall sub_4BA280(void *this, int a2, const char *a3) { void *v3; // edi char *v4; // ebx char v5; // cl int v6; // ebx int v7; // edx int *v8; // eax int v9; // ebx char *v10; // eax char *v11; // eax int v12; // eax int v13; // eax int v14; // eax int v15; // eax int v16; // eax int v17; // esi int v19; // [esp+Ch] [ebp-2CCh] int v20; // [esp+10h] [ebp-2C8h] int v21; // [esp+14h] [ebp-2C4h] int v22; // [esp+18h] [ebp-2C0h] int v23; // [esp+1Ch] [ebp-2BCh] int v24; // [esp+20h] [ebp-2B8h] int v25; // [esp+24h] [ebp-2B4h] char v26[4]; // [esp+28h] [ebp-2B0h] int v27; // [esp+2Ch] [ebp-2ACh] int v28; // [esp+30h] [ebp-2A8h] int v29; // [esp+34h] [ebp-2A4h] int v30; // [esp+38h] [ebp-2A0h] char v31; // [esp+3Ch] [ebp-29Ch] char v32; // [esp+13Ch] [ebp-19Ch] char v33[128]; // [esp+23Ch] [ebp-9Ch] int v34; // [esp+2BCh] [ebp-1Ch] int v35; // [esp+2C0h] [ebp-18h] int v36; // [esp+2C4h] [ebp-14h] int v37; // [esp+2C8h] [ebp-10h] int v38; // [esp+2CCh] [ebp-Ch] char v39; // [esp+2D0h] [ebp-8h] v3 = this; v19 = *(unsigned __int8 *)a3; if ( v19 > 0 ) { v4 = (char *)&a3[*((unsigned __int8 *)a3 + 22) + 23]; v25 = *(unsigned __int8 *)a3; do { sub_492730((_DWORD ***)v3, 2, v4); v4 += 103; --v25; } while ( v25 ); } v5 = a3[22]; if ( v5 && (unsigned __int8)v5 <= 0x80u ) { if ( a3[21] & 2 ) { v6 = dword_ACDA48; v7 = *(_DWORD *)dword_ACDA48; v25 = *(unsigned __int16 *)(a3 + 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(v7 + 16))(dword_ACDA48, v25) ) { if ( (unsigned __int16)v25 <= *(_WORD *)(v6 + 200) ) { v8 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v25); if ( *v8 ) { v9 = *v8; if ( *v8 ) { memset(v33, 0, 0x80u); strncpy(v33, a3 + 23, *((unsigned __int8 *)a3 + 22)); v33[*((unsigned __int8 *)a3 + 22)] = 0; memset(&v32, 0, 0x100u); sprintf(&v32, "[%s] : %s", v9 + 34, v33); v10 = sub_7549E0("%s", &v32); sub_604F50(*((char **)v3 + 176), (int)v10); v11 = sub_7549E0("%s", &v32); sub_600A60(*((_DWORD ***)v3 + 177), (int)v11); v12 = sub_6645B0(dword_AD8C90, (const char *)(v9 + 34)); if ( v12 ) sub_63E690(byte_AD8A08, *(unsigned __int16 *)(v12 + 548), v33); } } } } } else { v30 = 0; v29 = 0; v28 = 0; v27 = 0; *(_DWORD *)v26 = 0; strncpy(v26, a3 + 1, 0x14u); v35 = v27; v21 = v27; v34 = *(_DWORD *)v26; v20 = *(_DWORD *)v26; v13 = *((_DWORD *)v3 + 228); v36 = v28; v37 = v29; v22 = v28; v38 = v30; v39 = 0; v23 = v29; v24 = v30; if ( !sub_74DA80((_DWORD *)(v13 + 360), &v20) || (v21 = v27, v22 = v28, v24 = v30, v14 = *((_DWORD *)v3 + 228), v20 = *(_DWORD *)v26, v23 = v29, (v15 = sub_74DA80((_DWORD *)(v14 + 360), &v20)) != 0) && *(_BYTE *)(v15 + 20) == 1 ) { memset(v33, 0, 0x80u); strncpy(v33, a3 + 23, *((unsigned __int8 *)a3 + 22)); v33[*((unsigned __int8 *)a3 + 22)] = 0; memset(&v31, 0, 0x100u); sprintf(&v31, "[%s] : %s", &v34, v33); if ( a3[21] & 1 ) sub_493120((char **)v3, *(int *)v26, v27, v28, v29, v30, (int)v33); else sub_492EC0((char **)v3, *(int *)v26, v27, v28, v29, v30, (int)v33); v16 = sub_6645B0(dword_AD8C90, (const char *)&v34); v17 = v16; if ( v16 ) { if ( v19 ) { memset(&v32, 0, 0x100u); sub_4E2390(v33, (int)&v32, 0); sub_63E690(byte_AD8A08, *(unsigned __int16 *)(v17 + 548), &v32); } else { sub_63E690(byte_AD8A08, *(unsigned __int16 *)(v16 + 548), v33); } } } } } return a2; } // ACDA48: using guessed type int dword_ACDA48; // 4BA280: using guessed type char var_9C[128]; //----- (004BA660) -------------------------------------------------------- int __userpurge sub_4BA660@(int *a1@, int a2@, int a3@, int a4, int a5) { int v5; // edi char *v6; // eax char *v7; // esi int v8; // eax double v9; // st7 float v10; // ecx float v11; // edx float v12; // eax unsigned int *v13; // ebx double v14; // st7 signed int v15; // eax int v16; // edi float v17; // ST14_4 float v18; // ST0C_4 float v19; // ST08_4 int v21; // [esp+14h] [ebp-4Ch] int v22; // [esp+1Ch] [ebp-44h] float v23; // [esp+28h] [ebp-38h] float v24; // [esp+2Ch] [ebp-34h] float v25; // [esp+34h] [ebp-2Ch] float v26; // [esp+38h] [ebp-28h] float v27; // [esp+40h] [ebp-20h] float v28; // [esp+44h] [ebp-1Ch] float v29; // [esp+48h] [ebp-18h] float v30; // [esp+4Ch] [ebp-14h] float v31; // [esp+50h] [ebp-10h] float v32; // [esp+54h] [ebp-Ch] unsigned int *v33; // [esp+58h] [ebp-8h] float v34; // [esp+5Ch] [ebp-4h] float v35; // [esp+6Ch] [ebp+Ch] float v36; // [esp+6Ch] [ebp+Ch] float v37; // [esp+6Ch] [ebp+Ch] float v38; // [esp+6Ch] [ebp+Ch] float v39; // [esp+6Ch] [ebp+Ch] v5 = a5; if ( *((_WORD *)dword_AD8EBC + 274) != *(_WORD *)a5 ) { v21 = a3; v6 = sub_4E2910(a1, *(_WORD *)a5, 8, 24); v7 = v6; if ( v6 ) { sub_6566F0(v6); if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v7 + 320))(v7) ) { v8 = (*(int (__thiscall **)(char *, int, int))(*(_DWORD *)v7 + 196))(v7, a2, v21); v9 = (double)*(unsigned int *)(a5 + 10); v10 = *(float *)v8; v11 = *(float *)(v8 + 4); v12 = *(float *)(v8 + 8); v13 = (unsigned int *)(a5 + 10); v30 = v10; v31 = v11; v32 = v12; v25 = v9; v14 = (double)*(unsigned int *)(a5 + 14); v33 = (unsigned int *)(a5 + 14); v26 = v14; v23 = (double)*(unsigned int *)(a5 + 2); v24 = (double)*(unsigned int *)(a5 + 6); v27 = v10 - v25; v28 = v11 - v26; v29 = v32 - v32; v35 = v28 * v28 + v27 * v27 + v29 * v29; v36 = sqrt(v35); v34 = v36; v27 = v23 - v25; v28 = v24 - v26; v29 = v32 - v32; v37 = v28 * v28 + v27 * v27 + v29 * v29; v38 = sqrt(v37); if ( 0.0 != v34 && v38 != 0.0 && (v15 = *(unsigned __int16 *)(v5 + 18), (_WORD)v15) ) { v39 = v34 / (v38 / (double)v15); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v7 + 260))(v7, LODWORD(v39)); } else { v16 = *(_DWORD *)v7; v17 = sub_650630(); (*(void (__thiscall **)(char *, _DWORD))(v16 + 260))(v7, LODWORD(v17)); } v18 = (double)*v33; v19 = (double)*v13; sub_69AD10((float *)byte_ADB468, v19, v18, (int)&v22); if ( !(*(int (__thiscall **)(char *))(*(_DWORD *)v7 + 224))(v7) ) { (*(void (__thiscall **)(char *, int *, _DWORD, float *))(*(_DWORD *)v7 + 232))(v7, &v22, 0, &flt_AB399C); return a4; } (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v7 + 228))(v7, 0); (*(void (__thiscall **)(char *, int *, signed int, float *, signed int))(*(_DWORD *)v7 + 232))( v7, &v22, 1, &flt_AB399C, 1); } } } return a4; } // 4BA660: could not find valid save-restore pair for esi // AB399C: using guessed type float flt_AB399C; //----- (004BA8C0) -------------------------------------------------------- int __userpurge sub_4BA8C0@(int *a1@, int a2@, int a3@, int a4, int a5) { int v5; // edi char *v6; // eax unsigned __int16 *v7; // esi int v8; // eax float v9; // ecx double v10; // st7 float v11; // edx float v12; // eax signed int v13; // eax void (__thiscall *v14)(unsigned __int16 *, _DWORD); // edx double v15; // st7 float v16; // ST20_4 float v17; // ST1C_4 float v18; // ST18_4 int v20; // [esp+20h] [ebp-54h] int v21; // [esp+28h] [ebp-4Ch] int v22; // [esp+2Ch] [ebp-48h] float v23; // [esp+34h] [ebp-40h] float v24; // [esp+38h] [ebp-3Ch] float v25; // [esp+40h] [ebp-34h] float v26; // [esp+44h] [ebp-30h] float v27; // [esp+4Ch] [ebp-28h] float v28; // [esp+50h] [ebp-24h] float v29; // [esp+54h] [ebp-20h] float v30; // [esp+58h] [ebp-1Ch] float v31; // [esp+5Ch] [ebp-18h] float v32; // [esp+60h] [ebp-14h] unsigned int *v33; // [esp+64h] [ebp-10h] float v34; // [esp+68h] [ebp-Ch] float v35; // [esp+6Ch] [ebp-8h] float v36; // [esp+70h] [ebp-4h] float v37; // [esp+80h] [ebp+Ch] float v38; // [esp+80h] [ebp+Ch] v5 = a5; if ( *((_WORD *)dword_AD8EBC + 274) != *(_WORD *)a5 ) { v20 = a3; v6 = sub_4E2910(a1, *(_WORD *)a5, 8, 26); v7 = (unsigned __int16 *)v6; if ( v6 ) { sub_6566F0(v6); if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v7 + 320))(v7) ) { sub_4B0D70(v7[471]); v8 = (*(int (__thiscall **)(unsigned __int16 *, int, int))(*(_DWORD *)v7 + 196))(v7, a2, v20); v9 = *(float *)v8; v10 = (double)*(unsigned int *)(a5 + 10); v11 = *(float *)(v8 + 4); v12 = *(float *)(v8 + 8); v30 = v9; v31 = v11; v32 = v12; v36 = v10; v25 = v36; v33 = (unsigned int *)(a5 + 14); v37 = (double)*(unsigned int *)(a5 + 14); v26 = v37; v23 = (double)*(unsigned int *)(v5 + 2); v24 = (double)*(unsigned int *)(v5 + 6); v27 = v9 - v36; v28 = v11 - v37; v29 = v32 - v32; v35 = v28 * v28 + v27 * v27 + v29 * v29; v35 = sqrt(v35); v34 = v35; v27 = v23 - v36; v28 = v24 - v37; v29 = v32 - v32; v35 = v28 * v28 + v27 * v27 + v29 * v29; v35 = sqrt(v35); if ( 0.0 != v34 && v35 != 0.0 && (v13 = *(unsigned __int16 *)(v5 + 18), (_WORD)v13) ) { v14 = *(void (__thiscall **)(unsigned __int16 *, _DWORD))(*(_DWORD *)v7 + 264); v38 = v34 * ((double)v13 / v35); v15 = v38; } else { (*(void (__thiscall **)(unsigned __int16 *, _DWORD, float, _DWORD))(*(_DWORD *)v7 + 236))( v7, LODWORD(v36), COERCE_FLOAT(LODWORD(v37)), 0); v14 = *(void (__thiscall **)(unsigned __int16 *, _DWORD))(*(_DWORD *)v7 + 264); v15 = (double)*(unsigned __int16 *)(v5 + 18); } v16 = v15; v14(v7, LODWORD(v16)); v17 = (double)*v33; v18 = (double)*(unsigned int *)(v5 + 10); sub_69AD10((float *)byte_ADB468, v18, v17, (int)&v21); if ( (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v7 + 224))(v7) == 1 ) { (*(void (__thiscall **)(unsigned __int16 *, int *, _DWORD))(*(_DWORD *)v7 + 232))(v7, &v21, 0); return a4; } (*(void (__thiscall **)(unsigned __int16 *, signed int, int, int))(*(_DWORD *)v7 + 228))(v7, 1, v21, v22); (*(void (__thiscall **)(unsigned __int16 *, int *, signed int, float *, signed int))(*(_DWORD *)v7 + 232))( v7, &v21, 1, &flt_AB399C, 1); } } } return a4; } // 4BA8C0: could not find valid save-restore pair for ebx // 4BA8C0: could not find valid save-restore pair for esi // AB399C: using guessed type float flt_AB399C; //----- (004BAB60) -------------------------------------------------------- int __thiscall sub_4BAB60(int *this, int a2, int a3) { char *v3; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 8, 9); if ( v3 && v3[1924] != *(_BYTE *)(a3 + 2) ) sub_443390(v3, *(_BYTE *)(a3 + 2)); return a2; } //----- (004BABA0) -------------------------------------------------------- _DWORD *__thiscall sub_4BABA0(_DWORD *this, _DWORD *a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *result; // eax _DWORD *v7; // esi char v8; // cl signed int v9; // ebx _DWORD *v10; // edi char v11[4]; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] int v15; // [esp+1Ch] [ebp-8h] result = a2; v7 = this; v8 = 0; if ( (_DWORD *)v7[1177] == a2 && v7[1178] == a3 && v7[1179] == a4 && (_DWORD *)v7[1180] == a5 && v7[1181] == a6 ) v8 = 1; if ( (_DWORD *)v7[1182] == a2 && v7[1183] == a3 && v7[1184] == a4 && (_DWORD *)v7[1185] == a5 && v7[1186] == a6 ) v8 = 1; if ( (_DWORD *)v7[1187] == a2 && v7[1188] == a3 && v7[1189] == a4 && (_DWORD *)v7[1190] == a5 && v7[1191] == a6 ) v8 = 1; if ( (_DWORD *)v7[1192] == a2 && v7[1193] == a3 && v7[1194] == a4 && (_DWORD *)v7[1195] == a5 && v7[1196] == a6 ) v8 = 1; if ( (_DWORD *)v7[1197] == a2 && v7[1198] == a3 && v7[1199] == a4 && (_DWORD *)v7[1200] == a5 && v7[1201] == a6 ) v8 = 1; if ( (_DWORD *)v7[1202] != a2 || v7[1203] != a3 || v7[1204] != a4 || (result = a5, (_DWORD *)v7[1205] != a5) || v7[1206] != a6 ) { if ( !v8 ) { v9 = 0; v10 = v7 + 1179; do { v15 = 0; v14 = 0; v13 = 0; v12 = 0; *(_DWORD *)v11 = 0; strncpy(v11, byte_9BBC96, 0x14u); if ( *(v10 - 2) == *(_DWORD *)v11 && *(v10 - 1) == v12 && *v10 == v13 && v10[1] == v14 && v10[2] == v15 ) { result = &v7[5 * v9 + 1177]; *result = a2; result[1] = a3; result[2] = a4; result[3] = a5; result[4] = a6; return result; } ++v9; v10 += 5; } while ( v9 < 6 ); v7[1177] = v7[1182]; v7[1178] = v7[1183]; v7[1179] = v7[1184]; v7[1180] = v7[1185]; v7[1181] = v7[1186]; v7[1182] = v7[1187]; v7[1183] = v7[1188]; v7[1184] = v7[1189]; v7[1185] = v7[1190]; v7[1186] = v7[1191]; v7[1187] = v7[1192]; v7[1188] = v7[1193]; v7[1189] = v7[1194]; v7[1190] = v7[1195]; v7[1191] = v7[1196]; v7[1192] = v7[1197]; v7[1193] = v7[1198]; v7[1194] = v7[1199]; v7[1195] = v7[1200]; v7[1196] = v7[1201]; v7[1197] = v7[1202]; v7[1198] = v7[1203]; v7[1199] = v7[1204]; v7[1200] = v7[1205]; v7[1201] = v7[1206]; v7[1202] = a2; result = a5; v7[1203] = a3; v7[1204] = a4; v7[1205] = a5; v7[1206] = a6; } } return result; } //----- (004BAEF0) -------------------------------------------------------- int __thiscall sub_4BAEF0(_DWORD ***this, int a2, int a3) { int v3; // ebx char *v4; // edi int v5; // ebx int v6; // edx int v7; // ecx int v8; // eax int v9; // ecx int v10; // eax int v11; // edx int v12; // ecx int v13; // eax int v14; // edx int v15; // eax int v16; // edx int v17; // ecx int v18; // edx int v19; // eax int v20; // eax int v21; // eax int v23; // [esp+Ch] [ebp-B8h] int v24; // [esp+10h] [ebp-B4h] int v25; // [esp+14h] [ebp-B0h] int v26; // [esp+18h] [ebp-ACh] int v27; // [esp+1Ch] [ebp-A8h] _DWORD ***v28; // [esp+20h] [ebp-A4h] char v29[132]; // [esp+24h] [ebp-A0h] int v30; // [esp+A8h] [ebp-1Ch] int v31; // [esp+ACh] [ebp-18h] int v32; // [esp+B0h] [ebp-14h] int v33; // [esp+B4h] [ebp-10h] int v34; // [esp+B8h] [ebp-Ch] char v35; // [esp+BCh] [ebp-8h] v3 = (int)this; v28 = this; if ( *(_BYTE *)(a3 + 21) > 0x80u ) *(_BYTE *)(a3 + 21) = -128; if ( (signed int)*(unsigned __int8 *)(a3 + 20) > 0 ) { v4 = (char *)(*(unsigned __int8 *)(a3 + 21) + a3 + 22); v5 = *(unsigned __int8 *)(a3 + 20); do { sub_492730(v28, 16, v4); v4 += 103; --v5; } while ( v5 ); v3 = (int)v28; } strncpy(v29, (const char *)(a3 + 22), *(unsigned __int8 *)(a3 + 21)); v6 = *(unsigned __int8 *)(a3 + 21); v7 = *(_DWORD *)(a3 + 4); v30 = *(_DWORD *)a3; v8 = *(_DWORD *)(a3 + 12); v31 = v7; v9 = *(_DWORD *)(a3 + 16); v33 = v8; v10 = *(_DWORD *)(a3 + 4); v29[v6] = 0; v11 = *(_DWORD *)(a3 + 8); v34 = v9; v12 = *(_DWORD *)(a3 + 8); v24 = v10; v13 = *(_DWORD *)(a3 + 16); v32 = v11; v14 = *(_DWORD *)a3; v25 = v12; v27 = v13; v15 = *(_DWORD *)(v3 + 912); v23 = v14; v16 = *(_DWORD *)(a3 + 12); v35 = 0; v26 = v16; if ( !sub_74DA80((_DWORD *)(v15 + 360), &v23) ) goto LABEL_16; v17 = *(_DWORD *)(a3 + 8); v18 = *(_DWORD *)a3; v24 = *(_DWORD *)(a3 + 4); v19 = *(_DWORD *)(a3 + 16); v25 = v17; v27 = v19; v20 = *(_DWORD *)(v3 + 912); v23 = v18; v26 = *(_DWORD *)(a3 + 12); v21 = sub_74DA80((_DWORD *)(v20 + 360), &v23); if ( v21 ) { if ( *(_BYTE *)(v21 + 20) == 1 ) { LABEL_16: if ( !strcmp((const char *)&v30, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()) ) sub_492860( (char **)v3, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), (int)v29); else sub_492AA0( (char **)v3, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), (int)v29); } } return a2; } // 4BAEF0: using guessed type char var_A0[132]; //----- (004BB0E0) -------------------------------------------------------- int __thiscall sub_4BB0E0(_DWORD ***this, int a2, int a3) { int v3; // ebx char *v4; // edi int v5; // ebx int v6; // ecx int v7; // edx int v8; // eax int v9; // ecx int v10; // edx int v11; // eax int v12; // ecx int v13; // eax int v14; // eax int v15; // ecx char v17[4]; // [esp+Ch] [ebp-B8h] int v18; // [esp+10h] [ebp-B4h] int v19; // [esp+14h] [ebp-B0h] int v20; // [esp+18h] [ebp-ACh] int v21; // [esp+1Ch] [ebp-A8h] _DWORD ***v22; // [esp+20h] [ebp-A4h] char v23[132]; // [esp+24h] [ebp-A0h] char v24[4]; // [esp+A8h] [ebp-1Ch] int v25; // [esp+ACh] [ebp-18h] int v26; // [esp+B0h] [ebp-14h] int v27; // [esp+B4h] [ebp-10h] int v28; // [esp+B8h] [ebp-Ch] char v29; // [esp+BCh] [ebp-8h] v3 = (int)this; v22 = this; if ( *(_BYTE *)(a3 + 25) > 0x80u ) *(_BYTE *)(a3 + 25) = -128; if ( *(_DWORD *)a3 == *((_DWORD *)dword_AD8EBC + 169) ) { if ( (signed int)*(unsigned __int8 *)(a3 + 24) > 0 ) { v4 = (char *)(*(unsigned __int8 *)(a3 + 25) + a3 + 26); v5 = *(unsigned __int8 *)(a3 + 24); do { sub_492730(v22, 32, v4); v4 += 103; --v5; } while ( v5 ); v3 = (int)v22; } strncpy(v23, (const char *)(a3 + 26), *(unsigned __int8 *)(a3 + 25)); v6 = *(_DWORD *)(a3 + 4); v7 = *(_DWORD *)(a3 + 8); v23[*(unsigned __int8 *)(a3 + 25)] = 0; v8 = *(_DWORD *)(a3 + 12); *(_DWORD *)v24 = v6; v9 = *(_DWORD *)(a3 + 16); v26 = v8; v27 = v9; v25 = v7; v28 = *(_DWORD *)(a3 + 20); v29 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; strncpy(v17, v24, 0x14u); if ( !sub_74DA80((_DWORD *)(*(_DWORD *)(v3 + 912) + 360), v17) ) goto LABEL_17; v10 = *(_DWORD *)(a3 + 12); v11 = *(_DWORD *)(a3 + 4); v18 = *(_DWORD *)(a3 + 8); v21 = *(_DWORD *)(a3 + 20); v12 = *(_DWORD *)(v3 + 912); v19 = v10; *(_DWORD *)v17 = v11; v20 = *(_DWORD *)(a3 + 16); v13 = sub_74DA80((_DWORD *)(v12 + 360), v17); if ( v13 ) { if ( *(_BYTE *)(v13 + 20) == 1 ) { LABEL_17: v14 = strcmp(v24, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()); v15 = *(_DWORD *)(a3 + 4); if ( v14 ) sub_492B40( (char **)v3, v15, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), (int)v23); else sub_492A00( (char **)v3, v15, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), (int)v23); } } } return a2; } // 4BB0E0: using guessed type char var_A0[132]; //----- (004BB2F0) -------------------------------------------------------- int __thiscall sub_4BB2F0(_DWORD ***this, int a2, int a3) { int v3; // eax char *v4; // edi int v5; // ebx int v6; // edx int v7; // eax int v8; // ecx int v9; // edx int v10; // edi int v11; // ecx int v12; // edx int v13; // eax int v14; // eax int v15; // eax char v17[4]; // [esp+Ch] [ebp-B8h] int v18; // [esp+10h] [ebp-B4h] int v19; // [esp+14h] [ebp-B0h] int v20; // [esp+18h] [ebp-ACh] int v21; // [esp+1Ch] [ebp-A8h] _DWORD ***v22; // [esp+20h] [ebp-A4h] char v23[132]; // [esp+24h] [ebp-A0h] char v24[4]; // [esp+A8h] [ebp-1Ch] int v25; // [esp+ACh] [ebp-18h] int v26; // [esp+B0h] [ebp-14h] int v27; // [esp+B4h] [ebp-10h] int v28; // [esp+B8h] [ebp-Ch] char v29; // [esp+BCh] [ebp-8h] v3 = *(unsigned __int8 *)(a3 + 24); v22 = this; if ( v3 > 0 ) { v4 = (char *)(*(unsigned __int8 *)(a3 + 25) + a3 + 26); v5 = v3; do { sub_492730(v22, 4096, v4); v4 += 103; --v5; } while ( v5 ); } if ( *(_BYTE *)(a3 + 25) > 0x80u ) *(_BYTE *)(a3 + 25) = -128; if ( *(_DWORD *)a3 == *((_DWORD *)dword_AD8EBC + 169) ) { strncpy(v23, (const char *)(a3 + 26), *(unsigned __int8 *)(a3 + 25)); v6 = *(_DWORD *)(a3 + 4); v7 = *(_DWORD *)(a3 + 8); v23[*(unsigned __int8 *)(a3 + 25)] = 0; v8 = *(_DWORD *)(a3 + 12); *(_DWORD *)v24 = v6; v9 = *(_DWORD *)(a3 + 16); v26 = v8; v27 = v9; v25 = v7; v28 = *(_DWORD *)(a3 + 20); v29 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; strncpy(v17, v24, 0x14u); v10 = (int)v22; if ( !sub_74DA80(v22[228] + 90, v17) ) goto LABEL_16; v11 = *(_DWORD *)(a3 + 12); v12 = *(_DWORD *)(a3 + 4); v18 = *(_DWORD *)(a3 + 8); v13 = *(_DWORD *)(a3 + 20); v19 = v11; v21 = v13; v14 = *(_DWORD *)(v10 + 912); *(_DWORD *)v17 = v12; v20 = *(_DWORD *)(a3 + 16); v15 = sub_74DA80((_DWORD *)(v14 + 360), v17); if ( v15 ) { if ( *(_BYTE *)(v15 + 20) == 1 ) { LABEL_16: if ( !strcmp(v24, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()) ) sub_492BE0( (char **)v10, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), (int)v23); else sub_492C80( (char **)v10, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), (int)v23); } } } return a2; } // 4BB2F0: using guessed type char var_A0[132]; //----- (004BB500) -------------------------------------------------------- int __thiscall sub_4BB500(void **this, int a2, unsigned __int16 *a3) { void **v3; // ebx int v4; // edi int v5; // esi int v6; // edx int v7; // eax int result; // eax v3 = this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACDA48 + 16))(*a3); v4 = *a3; v5 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v4) && (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) && (v6 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v6 + 4 * v4)) && (v7 = *(_DWORD *)(v6 + 4 * v4)) != 0 && *(_DWORD *)(v7 + 170) == 23 ) { sub_4A53D0(v3); result = a2; } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[258] + 260))() || (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[234] + 260))() || (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[241] + 260))() || (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[236] + 260))() || (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[237] + 260))() ) { OutputDebugStringA("\ni don't open the dialog since shop is open\n"); result = a2; } else { sub_6175B0(v3[245], *a3, 0); sub_8F82A0(&unk_BA6B10, v3[245]); result = a2; } return result; } // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; //----- (004BB620) -------------------------------------------------------- int __stdcall sub_4BB620(int a1, int a2) { char *v2; // ebx int v3; // edi int v4; // esi int v5; // edx unsigned __int8 *v6; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { v3 = *(unsigned __int8 *)(a2 + 2); v4 = dword_ACB6C4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v5 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v5 + 4 * v3) ) { v6 = *(unsigned __int8 **)(v5 + 4 * v3); if ( v6 ) (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v2 + 456))(v2, *v6); } } } } return a1; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (004BB690) -------------------------------------------------------- int __userpurge sub_4BB690@(int a1@, int a2, int a3) { char *v3; // eax char *v4; // ebx int v5; // ST0C_4 int v6; // edi int v7; // esi unsigned __int8 *v8; // eax int v9; // edx float v11; // [esp+24h] [ebp+Ch] v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); v4 = v3; if ( v3 && v3 != dword_AD8EBC ) { v5 = a1; v6 = *(unsigned __int8 *)(a3 + 2); v7 = dword_ACB6C4; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v6, v5) && (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) && (v9 = *(_DWORD *)(v7 + 196), *(_DWORD *)(v9 + 4 * v6)) ) { v8 = *(unsigned __int8 **)(v9 + 4 * v6); } else { v8 = 0; } (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v4 + 456))(v4, *v8); v11 = (double)*(unsigned __int16 *)(a3 + 3) / 1000.0; (*(void (__thiscall **)(char *, signed int, _DWORD))(*(_DWORD *)v4 + 464))(v4, 1, LODWORD(v11)); } return a2; } // 4BB690: could not find valid save-restore pair for edi // ACB6C4: using guessed type int dword_ACB6C4; //----- (004BB740) -------------------------------------------------------- int __thiscall sub_4BB740(int *this, int a2, int a3) { char *v3; // eax char *v4; // esi _DWORD *v5; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 8, 64); v4 = v3; if ( v3 ) { sub_65DD20(v3, *(unsigned __int16 *)(a3 + 2)); sub_443390(v4, 6); v5 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); sub_6AF370(&unk_B91250, "Pet_St01", *v5, v5[1], v5[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BB7E0) -------------------------------------------------------- int __thiscall sub_4BB7E0(char *this, int a2, int a3) { char *v3; // esi _DWORD *v4; // eax v3 = this; if ( dword_AD8EBC ) { sub_65DC00((float *)dword_AD8EBC); sub_443390(dword_AD8EBC, 1); v4 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370(&unk_B91250, "Pet_Fi01", *v4, v4[1], v4[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } sub_4AB6B0(v3); sub_4A6920(); return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BB880) -------------------------------------------------------- int __thiscall sub_4BB880(int *this, int a2, __int16 *a3) { float *v3; // eax float *v4; // esi _DWORD *v5; // eax v3 = (float *)sub_4E2910(this, *a3, 8, 67); v4 = v3; if ( v3 ) { sub_65DC00(v3); sub_443390(v4, 1); v5 = (_DWORD *)(*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 196))(v4); sub_6AF370(&unk_B91250, "Pet_Fi01", *v5, v5[1], v5[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BB920) -------------------------------------------------------- int __thiscall sub_4BB920(_DWORD **this, int a2, int a3) { _DWORD **v3; // ebx char *v4; // eax char *v5; // esi _DWORD *v7; // eax int v8; // eax v3 = this; v4 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 1)); v5 = v4; if ( *(_WORD *)(a3 + 1) == -1 ) { if ( (*(_BYTE *)a3 & 0xF) == 1 ) { sub_8F86A0(&unk_BA6B10, v3[160]); sub_67B6A0(dword_AD8EBC, 0xFFFF); return a2; } } else if ( v4 ) { if ( !(*(_BYTE *)a3 & 0xF) ) { sub_650BA0(v4, *(_WORD *)(a3 + 28), *(_DWORD *)(a3 + 3)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 136))(v5, *(_DWORD *)(a3 + 7)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 140))(v5, *(_DWORD *)(a3 + 11)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 144))(v5, *(_DWORD *)(a3 + 15)); sub_67B6A0(dword_AD8EBC, 0xFFFF); sub_67D370(dword_AD8EBC, v5); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 156))(v5, *(_DWORD *)(a3 + 19)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 160))(v5, *(_DWORD *)(a3 + 23)); v7 = v3[142]; if ( v7 ) *((_BYTE *)v7 + 845) = *(_BYTE *)(a3 + 27); dword_AD8EBC[4112] = (*(_BYTE *)a3 & 0x10) == 16; if ( !(*(_BYTE *)a3 & 0xF) ) { if ( v3[284] ) { v8 = (*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 84))(v5); sub_641EF0((_DWORD **)v3[284], v8); } } } if ( (*(_BYTE *)a3 & 0xF) == 1 ) { sub_650D00(v5, *(_WORD *)(a3 + 28), *(_DWORD *)(a3 + 3)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 180))(v5, *(_DWORD *)(a3 + 7)); sub_67B6A0(dword_AD8EBC, *(_WORD *)(a3 + 1)); sub_5BD160(v3[160], *(unsigned __int8 *)(a3 + 27)); if ( !*((_BYTE *)v3[142] + 844) ) { sub_8F86A0(&unk_BA6B10, v3[160]); return a2; } sub_8F82A0(&unk_BA6B10, v3[160]); } } return a2; } //----- (004BBAF0) -------------------------------------------------------- int __thiscall sub_4BBAF0(void *this, int a2, _DWORD *a3) { int v3; // esi _DWORD *v4; // eax __int16 v5; // ST20_2 char *v6; // eax char *v7; // esi int v9; // [esp+20h] [ebp-14h] void *v10; // [esp+24h] [ebp-10h] int v11; // [esp+30h] [ebp-4h] v3 = (int)this; v4 = operator new(0x14u); v10 = v4; v11 = 0; if ( v4 ) sub_62F000(v4, v3, a3); v5 = *(_WORD *)a3; v11 = -1; v6 = sub_664AB0(dword_AD8C90, v5); v7 = v6; if ( v6 && (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 656))(v6) == 120 && (sub_652070(v7) == 4 || sub_652070(v7) == 5 || sub_652070(v7) == 9 || sub_652070(v7) == 10 || sub_652070(v7) == 14 || sub_652070(v7) == 15 || sub_652070(v7) == 19 || sub_652070(v7) == 20 || sub_652070(v7) == 24 || sub_652070(v7) == 25 || sub_652070(dword_AD8EBC) == 27) ) { sub_6AF8E0(&unk_B91250, (int)&v9, "Aura120", (int)v7, 1, flt_ACCFCC, 1, 1, 0, 1); } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BBC30) -------------------------------------------------------- int __thiscall sub_4BBC30(char *this, int a2, int a3) { char *v3; // ebx char *v4; // eax int v5; // esi signed int v6; // esi int v7; // edi int v8; // eax int *v9; // ebx int v10; // ecx int v11; // ecx int *v12; // esi signed int v13; // ebx int v14; // ecx int v15; // ecx char *v17; // [esp+18h] [ebp-20Ch] int *v18; // [esp+1Ch] [ebp-208h] char v19; // [esp+20h] [ebp-204h] char v20; // [esp+21h] [ebp-203h] char v21; // [esp+120h] [ebp-104h] char v22; // [esp+121h] [ebp-103h] v3 = this; v17 = this; v4 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 2)); v5 = (int)v4; if ( v4 ) { sub_64D0F0((_DWORD *)v4 + 21, *(_WORD *)a3); if ( *(_WORD *)(v5 + 548) == *((_WORD *)dword_AD8EBC + 274) ) { sub_4F3590(*((_DWORD *)v3 + 259)); sub_65B7B0((int)dword_AD8EBC, 1); v6 = 0; *((_DWORD *)v3 + 628) = 0; v7 = *(unsigned __int16 *)(a3 + 4); if ( !sub_64FF40(dword_AD8EBC, 31) && (_WORD)v7 != -1 ) { v21 = 0; memset(&v22, 0, 0xFFu); v19 = 0; memset(&v20, 0, 0xFFu); v8 = sub_49FBB0(v7); if ( v8 ) { sprintf(&v21, "%s", v8 + 2); strncpy(&v19, &v21, strlen(&v21) - 2); if ( !strcmp(&v19, "GroundStrike") ) sub_67B750((int)dword_AD8EBC, 1, v7); } if ( !sub_5A1550(*((_DWORD **)v3 + 163), v7) && !sub_5A1550(*((_DWORD **)v3 + 168), v7) ) { v9 = (int *)(v3 + 676); v18 = v9; while ( !sub_5A1550((_DWORD *)*(v9 - 5), v7) && !sub_5A1550((_DWORD *)*v9, v7) ) { ++v6; ++v9; if ( v6 >= 4 ) { sub_6BFD20(v7, flt_ACCFCC, 0.0, 0.0); v10 = *((_DWORD *)v17 + 163); nullsub_15(v7, LODWORD(flt_ACCFCC)); v11 = *((_DWORD *)v17 + 168); nullsub_15(v7, LODWORD(flt_ACCFCC)); v12 = v18; v13 = 4; do { v14 = *(v12 - 5); nullsub_15(v7, LODWORD(flt_ACCFCC)); v15 = *v12; nullsub_15(v7, LODWORD(flt_ACCFCC)); ++v12; --v13; } while ( v13 ); return a2; } } } } } else { sub_65B7B0(v5, 1); } } else { OutputDebugStringA("haven't char\n"); } return a2; } // 5A0810: using guessed type _DWORD __stdcall nullsub_15(_DWORD, _DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BBEC0) -------------------------------------------------------- int __stdcall sub_4BBEC0(int a1, __int16 *a2) { char *v2; // eax char *v3; // esi int v5; // eax v2 = sub_664AB0(dword_AD8C90, *a2); v3 = v2; if ( v2 && (*((_WORD *)v2 + 274) != *((_WORD *)dword_AD8EBC + 274) || !sub_65C360(dword_AD8EBC)) ) { (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 376))(v3); sub_64EB10((_DWORD *)v3 + 21); if ( v3[2680] ) sub_651970((int)v3); if ( sub_65B9D0(v3, 300000) ) { (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 340))(v3); return a1; } if ( *((_DWORD *)v3 + 7) && !sub_656DB0(v3) ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 500))(v3) ) { sub_65F350(v3, COERCE_FLOAT(1)); LOBYTE(v5) = sub_64E020((_DWORD *)v3 + 21, v3, (_DWORD *)1, 0); sub_64E0C0(v5, (_DWORD *)v3 + 21, 1); } } } return a1; } //----- (004BBFA0) -------------------------------------------------------- int __thiscall sub_4BBFA0(volatile LONG **this, int a2, __int16 *a3) { __int16 *v3; // edi int v4; // edx char v5; // cl int v6; // esi char *v7; // eax int ***v8; // ebx unsigned int v9; // eax char *v10; // eax __int16 v11; // ax __int16 v12; // ax int ***v13; // esi signed int v14; // edi __int16 v15; // ax __int16 v16; // ax int v18; // [esp+4h] [ebp-4h] char *v19; // [esp+14h] [ebp+Ch] v3 = a3; v18 = (int)this; if ( *((_WORD *)dword_AD8EBC + 274) == a3[1] ) sub_5C5A20(this[289]); v19 = sub_664AB0(dword_AD8C90, *a3); if ( v19 ) { v4 = (unsigned __int16)v3[3]; if ( v4 < 0 ) v4 = 0; if ( v4 & 0xFFFF0000 ) v4 = (unsigned __int16)v4; v5 = *((_BYTE *)v3 + 4); v6 = v4 | (*((_DWORD *)v3 + 2) != 0 ? 0 : 2147483648) | ((v5 & 0x80 | ((v5 & 0x48 | 2 * (v5 & 2 | 16 * (v5 & 4 | 8 * (v5 & 1)))) << 9)) << 13); if ( v5 & 0x10 && v19 == dword_AD8EBC && sub_684D70(&byte_ADA230) ) sub_684F90(&byte_ADA230); if ( *((_BYTE *)v3 + 5) & 1 && v19 == dword_AD8EBC && sub_684DB0(&byte_ADA230) ) sub_684FF0(&byte_ADA230); sub_64D8A0( (_DWORD *)v19 + 21, *((unsigned __int8 *)v3 + 15), *((unsigned __int8 *)v3 + 14), v6, (unsigned __int16)v3[1], (unsigned __int16)v3[6], *((_DWORD *)v3 + 2), 1); if ( !*((_DWORD *)v3 + 2) ) { v7 = sub_664AB0(dword_AD8C90, v3[1]); if ( v7 ) v7[2496] = 1; } if ( v19 != dword_AD8EBC || *((_DWORD *)v3 + 2) ) { v8 = (int ***)v18; } else { v8 = (int ***)v18; v9 = *(_DWORD *)(v18 + 4900); if ( v9 < 3 ) *(_DWORD *)(v18 + 4900) = v9 + 1; if ( *(_DWORD *)(v18 + 4900) == 3 ) { sub_4A8140(v18, 186); ++*(_DWORD *)(v18 + 4900); } } v10 = sub_664AB0(dword_AD8C90, v3[1]); if ( v10 && v10 == dword_AD8EBC && sub_67B770(dword_AD8EBC) && v6 ) { v11 = sub_67B780(dword_AD8EBC); sub_5A0540(v8[163], v11); v12 = sub_67B780(dword_AD8EBC); sub_5A0540(v8[168], v12); v13 = v8 + 169; v14 = 4; do { v15 = sub_67B780(dword_AD8EBC); sub_5A0540(*(v13 - 5), v15); v16 = sub_67B780(dword_AD8EBC); sub_5A0540(*v13, v16); ++v13; --v14; } while ( v14 ); } } return a2; } // ADA230: using guessed type char byte_ADA230; //----- (004BC1D0) -------------------------------------------------------- int __stdcall sub_4BC1D0(int a1, int a2) { char *v2; // eax char *v3; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { sub_64D8A0( (_DWORD *)v2 + 21, *(unsigned __int8 *)(a2 + 12), *(unsigned __int8 *)(a2 + 11), (*(_DWORD *)(a2 + 5) != 0 ? 0 : 2147483648) | ((*(_BYTE *)(a2 + 4) & 2 | ((*(_BYTE *)(a2 + 4) & 1) << 9)) << 20), *(unsigned __int16 *)(a2 + 2), *(unsigned __int16 *)(a2 + 9), *(_DWORD *)(a2 + 5), 0); if ( !*(_DWORD *)(a2 + 5) ) { v3 = sub_664AB0(dword_AD8C90, *(_WORD *)(a2 + 2)); if ( v3 ) v3[2496] = 1; } } return a1; } //----- (004BC260) -------------------------------------------------------- int __stdcall sub_4BC260(int a1, __int16 *a2) { __int16 v2; // bx char *v3; // esi char *v4; // edi float *v5; // eax v2 = *a2; v3 = sub_664AB0(dword_AD8C90, *a2); if ( v3 ) { v4 = sub_664AB0(dword_AD8C90, a2[1]); if ( v4 ) { if ( !v3[2496] || !sub_65B9D0(v3, 500000) ) { if ( sub_651F90(v4, v2) ) (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 644))(v3); } if ( sub_67DA80(dword_AD8EBC, (int)v3) == 3 && *((_WORD *)v4 + 274) == *((_WORD *)dword_AD8EBC + 274) ) { v5 = sub_4388B0(); sub_453C30(v5); return a1; } } else { (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 644))(v3); } } return a1; } //----- (004BC320) -------------------------------------------------------- int __stdcall sub_4BC320(int a1, int a2) { if ( *(_WORD *)a2 == *((_WORD *)dword_AD8EBC + 274) ) sub_6807C0(byte_AD9238, (_DWORD *)(a2 + 4)); return a1; } //----- (004BC350) -------------------------------------------------------- int __thiscall sub_4BC350(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi _BYTE *v4; // ecx char v5; // bl volatile LONG *v6; // esi char v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v3 = this; if ( byte_B9DCA8 != 1 && !dword_B9DCC4 ) { if ( byte_B9200A || byte_AD8CD8 || (v4 = (_BYTE *)*sub_4A3B80(&v8), v9 = 0, v5 = sub_6C4EE0(v4), v9 = -1, sub_410C00(&v8), v5) ) { sub_4B7E90(v3, *a3, a3[1], a3[2], a3[3], a3[4]); } else { sub_6C1150((int)&dword_B9DC70, a3); v6 = sub_57B620((int)v3); sub_8F82A0(&unk_BA6B10, v6); sub_645440((float *)v6 + 86, 15.0); } } return a2; } // AD8CD8: using guessed type char byte_AD8CD8; // B9200A: using guessed type char byte_B9200A; // B9DC70: using guessed type int dword_B9DC70; // B9DCA8: using guessed type char byte_B9DCA8; // B9DCC4: using guessed type int dword_B9DCC4; //----- (004BC450) -------------------------------------------------------- int __thiscall sub_4BC450(void *this, int a2, unsigned __int8 *a3) { void *v3; // edi _DWORD *v4; // ecx unsigned int v5; // esi int *v6; // eax v3 = this; sub_6C1220((int)&dword_B9DC70, a3); v4 = (_DWORD *)*((_DWORD *)v3 + 181); if ( v4 ) sub_582B90(v4); v5 = 0; if ( dword_B9DCC4 ) { do { v6 = (int *)sub_6C10B0(&dword_B9DC70, v5); if ( v6 ) sub_56F590(*((int **)v3 + 143), v6); ++v5; } while ( v5 < dword_B9DCC4 ); } LOWORD(a3) = 14408; sub_906000(*((_DWORD *)v3 + 584), &a3, 2u); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (004BC4D0) -------------------------------------------------------- int __thiscall sub_4BC4D0(_DWORD *this, int a2, _BYTE *a3) { unsigned int v3; // edi _DWORD *v4; // esi int v5; // eax _DWORD *v6; // ecx _DWORD *v8; // [esp+Ch] [ebp-8h] v3 = 0; v8 = this; if ( *a3 ) { v4 = a3 + 21; do { v5 = sub_6C11C0(&dword_B9DC70, *(v4 - 5), *(v4 - 4), *(v4 - 3), *(v4 - 2), *(v4 - 1)); if ( v5 ) { *(_DWORD *)(v5 + 28) = *v4; *(_DWORD *)(v5 + 32) = v4[1]; *(_BYTE *)(v5 + 64) = 1; *(_DWORD *)(v5 + 44) = v4[2]; v6 = (_DWORD *)v8[181]; if ( v6 ) sub_582B90(v6); } ++v3; v4 += 8; } while ( v3 < (unsigned __int8)*a3 ); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004BC570) -------------------------------------------------------- int __thiscall sub_4BC570(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // edi int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+6h] [ebp-6h] __int16 v9; // [esp+8h] [ebp-4h] v3 = this; if ( sub_8F3540(this[220]) ) { v4 = v3[220][88]; v9 = 14420; sub_905F90((int)v3[585], &v9, 2u); v5 = (int)v3[585]; v7 = v4; v8 = 50; sub_906000(v5, &v7, 3u); } return a2; } //----- (004BC5E0) -------------------------------------------------------- int __thiscall sub_4BC5E0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int *v4; // eax _DWORD *v5; // ecx int v6; // edi int v7; // ecx int v8; // ecx __int16 v10; // [esp+4h] [ebp-20h] __int16 v11; // [esp+8h] [ebp-1Ch] char v12; // [esp+Ah] [ebp-1Ah] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] int v17; // [esp+1Ch] [ebp-8h] v3 = this; if ( *a3 == 1365 ) { v4 = (int *)sub_680810(byte_AD9238); v13 = *v4; v14 = v4[1]; v15 = v4[2]; v16 = v4[3]; v5 = (_DWORD *)v3[220]; v17 = v4[4]; sub_57DA90(v5, &v13); if ( sub_8F3540((_DWORD *)v3[220]) ) { v6 = *(_DWORD *)(v3[220] + 352); v7 = v3[585]; v10 = 14420; sub_905F90(v7, &v10, 2u); v8 = v3[585]; v11 = v6; v12 = 50; sub_906000(v8, &v11, 3u); } } return a2; } //----- (004BC6A0) -------------------------------------------------------- int __thiscall sub_4BC6A0(_DWORD **this, int a2, _WORD *a3) { int v3; // esi int v4; // edi int v5; // ecx int v6; // eax int v7; // eax _DWORD **v9; // [esp+Ch] [ebp-4h] v3 = dword_ACB230; v4 = *(unsigned __int16 *)((char *)a3 + 5); v9 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * v4) ) { v6 = *(_DWORD *)(v5 + 4 * v4); if ( v6 ) { v7 = *(_DWORD *)(v6 + 102); if ( v7 == 35 || v7 == 16 ) sub_6316A0(a3); else sub_631920(a3); sub_4A6E80(v9, a3[1]); } } } } return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004BC720) -------------------------------------------------------- int __thiscall sub_4BC720(_DWORD **this, int a2, unsigned int *a3) { _DWORD **v3; // esi char *v4; // esi char v5; // bl unsigned __int8 (__thiscall *v6)(char *); // eax _DWORD *v7; // eax v3 = this; sub_8F86A0(&unk_BA6B10, this[240]); sub_8F86A0(&unk_BA6B10, v3[239]); v4 = dword_AD8EBC; v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 48))(); v6 = *(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v4 + 48); v4[1924] = 1; *((_DWORD *)v4 + 482) = 0; if ( v5 != v6(v4) ) v4[1925] = 1; (*(void (__stdcall **)(unsigned int))(*(_DWORD *)dword_AD8EBC + 128))(*a3); (*(void (__stdcall **)(unsigned int))(*(_DWORD *)dword_AD8EBC + 140))(a3[1]); dword_AD8EBC[2496] = 0; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); sub_680C20((int)byte_AD9238, *a3); sub_680C90((int)byte_AD9238, a3[1]); v7 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370(&unk_B91250, "RevivalTarget", *v7, v7[1], v7[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BC850) -------------------------------------------------------- int __stdcall sub_4BC850(int a1, int a2) { char *v2; // eax char *v3; // esi void (__thiscall *v4)(char *, _DWORD); // edx _DWORD *v5; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = v2; if ( v2 ) { sub_443390(v2, 1); v4 = *(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 128); v3[2496] = 0; v3[2689] = 0; v4(v3, *(_DWORD *)(a2 + 2)); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 140))(v3, *(_DWORD *)(a2 + 6)); (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 340))(v3); v5 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); sub_6AF370( &unk_B91250, "RevivalTarget", *v5, v5[1], v5[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } return a1; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BC920) -------------------------------------------------------- int __thiscall sub_4BC920(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // esi unsigned int v4; // eax int v5; // ecx v3 = this; v4 = sub_633650(*a3); if ( v4 < 0xC0 ) { v5 = *(_DWORD *)(v3[179] + 4 * v4 + 348); if ( v5 ) sub_536E90(v5, 0); } return a2; } //----- (004BC960) -------------------------------------------------------- void __thiscall sub_4BC960(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi unsigned int v3; // eax int v4; // ecx v1 = this; v2 = 0; do { if ( sub_633520(v2) ) { v3 = sub_6333A0(v2); if ( v3 < 0xC0 ) { v4 = *(_DWORD *)(v1[179] + 4 * v3 + 348); if ( v4 ) sub_536E90(v4, 0); } } ++v2; } while ( v2 < 0xC ); sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[235]); sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[179]); sub_633450(0); sub_633460(); } //----- (004BC9E0) -------------------------------------------------------- int __stdcall sub_4BC9E0(int a1, __int16 *a2) { float *v2; // eax float *v3; // eax int v5; // [esp+4h] [ebp-14h] int v6; // [esp+8h] [ebp-10h] int v7; // [esp+14h] [ebp-4h] sub_680DC0((int)byte_AD9238, *a2); v5 = 16; v6 = 0; sub_6B69F0(dword_AB6534, (int)&v5, 0.0, 0); v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); v7 = 0; if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } *((_BYTE *)v2 + 8) = 1; return a1; } // AB6534: using guessed type int dword_AB6534; // ACCFE0: using guessed type int dword_ACCFE0; //----- (004BCA90) -------------------------------------------------------- int __stdcall sub_4BCA90(int a1, __int16 *a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] sub_680DE0((int)byte_AD9238, *a2); v3 = 16; v4 = 0; sub_6B69F0(dword_AB6534, (int)&v3, 0.0, 0); return a1; } // AB6534: using guessed type int dword_AB6534; //----- (004BCAE0) -------------------------------------------------------- int __thiscall sub_4BCAE0(int *this, int a2, int a3) { float *v3; // eax int v5; // [esp+Ch] [ebp-8h] float v6; // [esp+10h] [ebp-4h] v3 = (float *)this[619]; if ( v3 ) { v3[22] = 500.0; *(float *)&v5 = -500.0; v3[23] = -500.0; v6 = 0.0; v3[24] = 0.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, this[619]); *(float *)&v5 = 0.0; v6 = 0.0; sub_6B69F0(dword_AB6534, (int)&v5, 0.0, 0); } return a2; } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BCB60) -------------------------------------------------------- int __thiscall sub_4BCB60(int *this, int a2, int a3) { float *v3; // eax int v5; // [esp+Ch] [ebp-8h] float v6; // [esp+10h] [ebp-4h] v3 = (float *)this[620]; if ( v3 ) { v3[22] = 500.0; *(float *)&v5 = -500.0; v3[23] = -500.0; v6 = 0.0; v3[24] = 0.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, this[620]); v5 = 1; v6 = 0.0; sub_6B69F0(dword_AB6534, (int)&v5, 0.0, 0); } return a2; } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BCBE0) -------------------------------------------------------- int __thiscall sub_4BCBE0(_DWORD ***this, int a2, unsigned __int8 *a3) { _DWORD ***v3; // esi signed int v4; // edi int v5; // esi int v6; // edx int v7; // eax int v8; // ecx int v9; // edx int v10; // ST1C_4 int v11; // ST18_4 int v12; // ST0C_4 int v13; // ST08_4 int v14; // ST04_4 _DWORD *v15; // ecx _DWORD ***v17; // [esp+Ch] [ebp-20h] int v18; // [esp+10h] [ebp-1Ch] int v19; // [esp+14h] [ebp-18h] int v20; // [esp+18h] [ebp-14h] int v21; // [esp+1Ch] [ebp-10h] int v22; // [esp+20h] [ebp-Ch] char v23; // [esp+24h] [ebp-8h] v3 = this; v17 = this; sub_582CF0(this[288]); sub_582D30(v3[288], *(_DWORD *)(a3 + 1)); v4 = 0; if ( *a3 ) { v5 = (int)(a3 + 13); do { v6 = *(_DWORD *)(v5 - 4); v7 = *(_DWORD *)v5; v18 = *(_DWORD *)(v5 - 8); v8 = *(_DWORD *)(v5 + 4); v19 = v6; v9 = *(_DWORD *)(v5 + 8); v21 = v8; v10 = *(_DWORD *)(v5 + 26); v20 = v7; LOBYTE(v7) = *(_BYTE *)(v5 + 12); v22 = v9; v11 = *(unsigned __int8 *)(v5 + 13); v12 = *(_DWORD *)(v5 + 22); v13 = *(_DWORD *)(v5 + 18); v14 = *(_DWORD *)(v5 + 14); v15 = v17[288]; v23 = 0; sub_582DB0(v15, &v18, v14, v13, v12, v7 & 0x7F, (unsigned __int8)v7 >> 7, v11, v10); ++v4; v5 += 38; } while ( v4 < *a3 ); v3 = v17; } sub_8F82A0(&unk_BA6B10, v3[288]); return a2; } //----- (004BCCB0) -------------------------------------------------------- int __thiscall sub_4BCCB0(_DWORD *this, int a2, _BYTE *a3) { unsigned int v3; // edi int *v4; // esi int v5; // edx int v6; // ecx int v7; // eax int v8; // ecx int v9; // ST0C_4 int v10; // eax int v11; // ST04_4 _DWORD *v12; // ecx _DWORD *v14; // [esp+8h] [ebp-20h] int v15; // [esp+Ch] [ebp-1Ch] int v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] char v20; // [esp+20h] [ebp-8h] v3 = 0; v14 = this; if ( *a3 ) { v4 = (int *)(a3 + 26); do { v5 = *v4; v6 = *(v4 - 1); v15 = *(v4 - 2); v7 = v4[1]; v16 = v6; v8 = v4[2]; v17 = v5; v9 = v4[3]; v18 = v7; v10 = v4[4]; v19 = v8; v11 = v4[5]; v12 = (_DWORD *)v14[267]; v20 = 0; sub_584800(v12, &v15, v11, v10, v9); ++v3; v4 += 8; } while ( v3 < (unsigned __int8)*a3 ); } return a2; } //----- (004BCD40) -------------------------------------------------------- int __stdcall sub_4BCD40(int a1, _DWORD *a2) { float v2; // ST2C_4 int v3; // ecx int v4; // edx int v5; // eax _DWORD *v6; // eax float v7; // ST1C_4 char Src[4]; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] int v11; // [esp+24h] [ebp-10h] int v12; // [esp+28h] [ebp-Ch] char v13; // [esp+2Ch] [ebp-8h] v2 = 0.0; v3 = a2[1]; v4 = a2[2]; *(_DWORD *)Src = *a2; v5 = a2[3]; v10 = v3; v12 = v5; v11 = v4; v13 = 0; v6 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v7 = (double)(unsigned int)a2[4]; sub_6AF370(&unk_B91250, Src, *v6, v6[1], v6[2], SLOBYTE(v2), COERCE_INT(1.0), COERCE_INT(0.0), v7, 1.0); return a1; } //----- (004BCE00) -------------------------------------------------------- int __thiscall sub_4BCE00(int *this, int a2, int a3) { char *v3; // esi char v4; // al v3 = sub_4E2910(this, *(_WORD *)a3, 27, 9); if ( v3 ) { v4 = *(_BYTE *)(a3 + 2); if ( v4 ) { if ( (unsigned __int8)(v4 - 1) <= 1u ) { sub_65DB50(v3, flt_ACCFCC, 0); sub_699710(byte_ADB468, v3 + 2511, 0); } } else { sub_65DB50(v3, flt_ACCFCC, 1); sub_699710(byte_ADB468, v3 + 2511, 1); } } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BCE70) -------------------------------------------------------- int __thiscall sub_4BCE70(int *this, int a2, int a3) { char *v3; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 27, 11); if ( v3 ) v3[1936] = *(_BYTE *)(a3 + 2); return a2; } //----- (004BCEA0) -------------------------------------------------------- int __stdcall sub_4BCEA0(int a1, char *a2) { unsigned __int8 v2; // al int result; // eax float v4; // [esp+10h] [ebp+Ch] flt_B6706C = (double)*(unsigned __int16 *)(a2 + 1); v2 = *a2; v4 = 0.0; if ( v2 ) v4 = (double)v2 / 100.0; sub_6946D0((_DWORD **)byte_ADB468, v4); result = a1; byte_ADB629 = 1; return result; } // ADB629: using guessed type char byte_ADB629; // B6706C: using guessed type float flt_B6706C; //----- (004BCF00) -------------------------------------------------------- int __userpurge sub_4BCF00@(int a1@, int a2, int a3) { int *v3; // edi int v4; // edx int v5; // eax int v6; // ecx int v7; // edx int v8; // eax int v9; // ecx int v10; // edx int (__thiscall **v11)(int *); // eax int (__thiscall *v12)(int *); // edx float *v13; // eax char v15[4]; // [esp+8h] [ebp-28h] int v16; // [esp+Ch] [ebp-24h] int v17; // [esp+10h] [ebp-20h] int v18; // [esp+14h] [ebp-1Ch] int v19; // [esp+18h] [ebp-18h] int v20; // [esp+1Ch] [ebp-14h] int v21; // [esp+20h] [ebp-10h] int v22; // [esp+24h] [ebp-Ch] char v23; // [esp+28h] [ebp-8h] v3 = (int *)sub_664AB0(dword_AD8C90, *(_WORD *)a3); if ( v3 ) { v4 = *(_DWORD *)(a3 + 6); v5 = *(_DWORD *)(a3 + 10); *(_DWORD *)v15 = *(_DWORD *)(a3 + 2); v6 = *(_DWORD *)(a3 + 14); v16 = v4; v7 = *(_DWORD *)(a3 + 18); v17 = v5; v8 = *(_DWORD *)(a3 + 22); v18 = v6; v9 = *(_DWORD *)(a3 + 26); v19 = v7; v10 = *(_DWORD *)(a3 + 30); v20 = v8; v11 = (int (__thiscall **)(int *))v3[21]; v21 = v9; v22 = v10; v12 = *v11; v23 = 0; if ( v12(v3 + 21) ) { v13 = (float *)(*(int (__thiscall **)(int *))v3[21])(v3 + 21); sub_4DC550(v13); } sub_65CF20(v3, a1, (int)v3, v15, 0); } return a2; } //----- (004BCFA0) -------------------------------------------------------- char __thiscall sub_4BCFA0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = -32763; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004BCFE0) -------------------------------------------------------- char __thiscall sub_4BCFE0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // ecx char result; // al int v6; // [esp+4h] [ebp-4h] v2 = this; if ( this[264] ) { v3 = a2; LOWORD(a2) = -32765; v4 = this[585]; v6 = v3; sub_905F90(v4, &a2, 2u); result = sub_906000(v2[585], &v6, 4u); } return result; } //----- (004BD030) -------------------------------------------------------- char __thiscall sub_4BD030(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = 31748; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004BD070) -------------------------------------------------------- char __thiscall sub_4BD070(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-4h] char v6; // [esp+6h] [ebp-2h] v2 = this; v5 = *((_WORD *)dword_AD8EBC + 274); v3 = this[584]; v6 = a2; a2 = 4422; sub_905F90(v3, &a2, 2u); return sub_906000(v2[584], &v5, 3u); } //----- (004BD0C0) -------------------------------------------------------- char __thiscall sub_4BD0C0(_DWORD *this, char a2) { _DWORD *v2; // esi DWORD v3; // eax DWORD v4; // eax int v5; // ecx __int16 v7; // [esp+8h] [ebp-8h] char v8; // [esp+Fh] [ebp-1h] v2 = this; v3 = timeGetTime(); if ( dword_ACEAA4 + 2000 < v3 ) { v4 = timeGetTime(); v5 = v2[584]; dword_ACEAA4 = v4; v7 = -29695; sub_905F90(v5, &v7, 2u); v8 = a2; LOBYTE(v3) = sub_906000(v2[584], &v8, 1u); } return v3; } // ACEAA4: using guessed type int dword_ACEAA4; //----- (004BD130) -------------------------------------------------------- int __stdcall sub_4BD130(int a1, unsigned __int8 *a2) { int result; // eax sub_681560((int)byte_AD9238); result = a1; *(_DWORD *)dword_AD9E30 = *a2; return result; } //----- (004BD150) -------------------------------------------------------- void __thiscall sub_4BD150(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax char *v4; // edi unsigned int v5; // eax size_t v6; // ebx int v7; // ecx __int16 v8; // [esp+4h] [ebp-8h] char v9; // [esp+8h] [ebp-4h] char v10; // [esp+9h] [ebp-3h] v1 = this; if ( this[151] ) { v2 = this[584]; v8 = 8267; sub_905F90(v2, &v8, 2u); v3 = v1[151]; v9 = *(_BYTE *)(v3 + 660); v4 = (char *)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v3 + 344) + 452))(*(_DWORD *)(v3 + 344)); v5 = strlen(v4); v6 = v5 + 1; v7 = v1[584]; v10 = v5 + 1; sub_905F90(v7, &v9, 2u); sub_906000(v1[584], v4, v6); } } //----- (004BD1E0) -------------------------------------------------------- char __thiscall sub_4BD1E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx __int16 v5; // [esp+4h] [ebp-8h] char v6; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v5 = 6164; sub_905F90(v2, &v5, 2u); v3 = v1[584]; v6 = *(_BYTE *)(v1[153] + 408); sub_905F90(v3, &v6, 1u); return sub_906000(v1[584], &v6, 0); } //----- (004BD240) -------------------------------------------------------- char __thiscall sub_4BD240(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx __int16 v5; // [esp+4h] [ebp-8h] char v6; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v5 = 6166; sub_905F90(v2, &v5, 2u); v3 = v1[584]; v6 = *(_BYTE *)(v1[153] + 408); sub_905F90(v3, &v6, 1u); return sub_906000(v1[584], &v6, 0); } //----- (004BD2A0) -------------------------------------------------------- int __thiscall sub_4BD2A0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax _BYTE *v5; // ecx char v6; // bl void (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v8; // ecx void (__thiscall ***v9)(_DWORD, signed int); // esi _DWORD *v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v3 = this; v11 = this; if ( *a3 == 4481 ) { v5 = (_BYTE *)*sub_4A3B80(&v13); v14 = 0; v6 = sub_6C4EE0(v5); v14 = -1; if ( v13 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } if ( v6 ) { LOWORD(a3) = 7312; v8 = (_DWORD *)*sub_4A3B80(&v12); v14 = 1; sub_6C7E20(v8, &a3); v14 = -1; if ( v12 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } } sub_8F86A0(&unk_BA6B10, (_DWORD *)v11[277]); } else { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); } return a2; } //----- (004BD3C0) -------------------------------------------------------- int __thiscall sub_4BD3C0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax v3 = this; if ( *a3 != 4545 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); byte_ADB55E = 1; } return a2; } // ADB55E: using guessed type char byte_ADB55E; //----- (004BD400) -------------------------------------------------------- int __thiscall sub_4BD400(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax v3 = this; v4 = sub_6E2400(&unk_ADB488, *(_WORD *)(this[270] + 510)); if ( v4 && *(_DWORD *)(v4 + 4) == a3 + 1 ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[270]); sub_6DEB30(byte_ADB468, *(_WORD *)(a3 + 1), 1); return a2; } //----- (004BD460) -------------------------------------------------------- int __thiscall sub_4BD460(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi _DWORD *v4; // esi v3 = this; sub_6DCF60(byte_ADB468, *a3); if ( dword_ADB4F8 == 5 && dword_ADB4FC == 2 ) { sub_6DE220(byte_ADB468); sub_67D370(dword_AD8EBC, 0); } v4 = (_DWORD *)v3[271]; if ( v4 ) { sub_6EACF0(v4); sub_6EB000(v4); } return a2; } // ADB4F8: using guessed type int dword_ADB4F8; // ADB4FC: using guessed type int dword_ADB4FC; //----- (004BD4C0) -------------------------------------------------------- int __thiscall sub_4BD4C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // esi v3 = this; sub_6DD990(byte_ADB468, *(unsigned __int16 *)(a3 + 1), *(_BYTE *)a3); v4 = (_DWORD *)v3[271]; if ( v4 ) { sub_6EACF0(v4); sub_6EB000(v4); } return a2; } //----- (004BD500) -------------------------------------------------------- int __thiscall sub_4BD500(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const char *v5; // eax v3 = this; if ( *(_DWORD *)a3 != 4481 ) { v5 = sub_41A850(*(_DWORD *)a3); sub_492060(v3, (int)v5); return a2; } if ( dword_ADB4F8 ) return a2; if ( *(_BYTE *)(a3 + 4) ) sub_8EEE70(this, 205, 0, 0); else sub_8EEE70(this, 216, 0, 0); return a2; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004BD570) -------------------------------------------------------- int __thiscall sub_4BD570(int *this, int a2, int a3) { char *v3; // eax char *v4; // esi float v5; // ST2C_4 float v6; // ST30_4 _DWORD *v7; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 35, 42); v4 = v3; if ( v3 ) { v5 = (double)*(unsigned int *)(a3 + 2); v6 = (double)*(unsigned int *)(a3 + 6); (*(void (__thiscall **)(char *, _DWORD, _DWORD, signed int))(*(_DWORD *)v3 + 236))(v3, LODWORD(v5), LODWORD(v6), 1); v7 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); sub_6AF370( &unk_B91250, "RevivalTarget", *v7, v7[1], v7[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BD640) -------------------------------------------------------- int __thiscall sub_4BD640(_DWORD *this, int a2, _WORD *a3) { if ( *a3 != 4481 ) *(_BYTE *)(*(_DWORD *)(this[272] + 356) + 380) = *(_BYTE *)(*(_DWORD *)(this[272] + 356) + 380) == 0; return a2; } //----- (004BD680) -------------------------------------------------------- char __stdcall sub_4BD680(__int16 a1) { int v1; // eax LOBYTE(v1) = a1; if ( a1 != -1 ) { v1 = sub_6E2400(&unk_ADB488, 96); if ( !v1 ) LOBYTE(v1) = sub_6F3D10(&off_AB7F2C, 35, 80, &a1, 2u); } return v1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004BD6C0) -------------------------------------------------------- int __thiscall sub_4BD6C0(float *this, int a2, _BYTE *a3) { float *v3; // esi int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v3 = this; sub_8D06A0(this + 649, flt_ACCFCC); v3[654] = 4.0; if ( *a3 == 1 ) { if ( *((_DWORD *)v3 + 622) ) { *((_BYTE *)v3 + 2652) = 1; *((_BYTE *)v3 + 2653) = 1; LABEL_7: v5 = 30; v6 = 0; sub_6B69F0(dword_AB6534, (int)&v5, 0.0, 0); return a2; } } else if ( *a3 == 2 && *((_DWORD *)v3 + 623) ) { *((_BYTE *)v3 + 2652) = 1; *((_BYTE *)v3 + 2653) = 0; goto LABEL_7; } return a2; } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BD7A0) -------------------------------------------------------- int __stdcall sub_4BD7A0(int a1, __int16 *a2) { __int16 *v2; // edi int v3; // ebx int v4; // esi int v5; // edx int v6; // eax char *v8; // [esp+10h] [ebp+Ch] v2 = a2; v8 = sub_664AB0(dword_AD8C90, *a2); if ( v8 ) { v3 = (unsigned __int16)v2[9]; v4 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v5 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v5 + 4 * v3) ) { v6 = *(_DWORD *)(v5 + 4 * v3); if ( v6 ) { if ( *(_DWORD *)(v6 + 539) == 67 ) { *(_DWORD *)(v8 + 2933) = *(_DWORD *)(v2 + 5); *(_DWORD *)(v8 + 2937) = *(_DWORD *)(v2 + 7); *((_WORD *)v8 + 1475) = v2[9]; return a1; } (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v8 + 316))( *(_DWORD *)(v2 + 5), *(_DWORD *)(v2 + 7), (unsigned __int16)v2[9]); } } } } } return a1; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (004BD860) -------------------------------------------------------- int __thiscall sub_4BD860(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // ebx int v4; // esi signed int v5; // esi int v6; // edi v3 = this; v4 = this[228]; Concurrency::details::_NonReentrantLock::_Release((Concurrency::details::_NonReentrantLock *)(v4 + 360)); sub_4637A0(*(_DWORD **)(v4 + 344), 0); *(_DWORD *)(*(_DWORD *)(v4 + 348) + 344) = 0; v5 = 0; if ( *a3 > 0u ) { v6 = (int)(a3 + 1); do { sub_74DB30((_DWORD *)(v3[228] + 360), v6); ++v5; v6 += 22; } while ( v5 < (unsigned __int16)*a3 ); } sub_4A5320(v3); return a2; } //----- (004BD8F0) -------------------------------------------------------- char __thiscall sub_4BD8F0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[585]; v4 = -22517; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], 0, 0); } //----- (004BD930) -------------------------------------------------------- int __thiscall sub_4BD930(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // edi int v4; // esi v3 = this; if ( *a3 == 7200 ) { v4 = this[228]; Concurrency::details::_NonReentrantLock::_Release((Concurrency::details::_NonReentrantLock *)(v4 + 360)); sub_4637A0(*(_DWORD **)(v4 + 344), 0); *(_DWORD *)(*(_DWORD *)(v4 + 348) + 344) = 0; sub_4A5320(v3); } return a2; } //----- (004BD990) -------------------------------------------------------- char __thiscall sub_4BD990(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v4 = -27584; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], &v5, 1u); } //----- (004BD9D0) -------------------------------------------------------- char __thiscall sub_4BD9D0(_DWORD *this, __int16 a2) { __int16 v2; // ax _DWORD *v3; // esi int v4; // ecx __int16 v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; a2 = 9300; v4 = this[584]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[584], &v6, 2u); } //----- (004BDA20) -------------------------------------------------------- int __thiscall sub_4BDA20(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi char *v4; // eax _DWORD *v5; // ecx v3 = this; v4 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); v5 = (_DWORD *)v3[142]; if ( v5 && (*(_WORD *)a3 == -1 || *((char **)dword_AD8EBC + 1026) == v4) ) sub_5BD4E0(v5, *(unsigned __int8 *)(a3 + 2), 1, 1); return a2; } //----- (004BDA80) -------------------------------------------------------- int __stdcall sub_4BDA80(int a1, int a2) { char *v2; // eax char *v3; // esi float v4; // ST10_4 float v5; // ST10_4 float v6; // ST0C_4 float v7; // ST08_4 float v8; // ST0C_4 float v9; // ST08_4 int v11; // [esp+1Ch] [ebp-18h] int v12; // [esp+28h] [ebp-Ch] v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = v2; if ( v2 ) { sub_6566F0(v2); v4 = (double)*(unsigned __int16 *)(a2 + 18); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 260))(v3, LODWORD(v4)); v5 = (double)*(unsigned __int16 *)(a2 + 18); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 264))(v3, LODWORD(v5)); v6 = (double)*(unsigned int *)(a2 + 14); v7 = (double)*(unsigned int *)(a2 + 10); sub_69AD10((float *)byte_ADB468, v7, v6, (int)&v12); v8 = (double)*(unsigned int *)(a2 + 14); v9 = (double)*(unsigned int *)(a2 + 10); sub_69AD10((float *)byte_ADB468, v9, v8, (int)&v11); if ( *((_WORD *)v3 + 274) == *((_WORD *)dword_AD8EBC + 274) ) sub_67B700((int)dword_AD8EBC, &v12); if ( *(_BYTE *)(a2 + 20) & 1 ) { (*(void (__thiscall **)(char *, int *, _DWORD, int *, _DWORD))(*(_DWORD *)v3 + 232))(v3, &v12, 0, &v11, 0); return a1; } (*(void (__thiscall **)(char *, int *, _DWORD, float *, _DWORD))(*(_DWORD *)v3 + 232))(v3, &v12, 0, &flt_AB399C, 0); } return a1; } // AB399C: using guessed type float flt_AB399C; //----- (004BDBC0) -------------------------------------------------------- int __stdcall sub_4BDBC0(int a1, int a2) { int v2; // edi char *v3; // eax char *v4; // ebx int v5; // esi float v6; // ST04_4 float v7; // ST00_4 double v8; // st7 void *v9; // ecx float v10; // ST08_4 float v11; // ST08_4 float v13; // [esp+18h] [ebp-24h] int v14; // [esp+24h] [ebp-18h] float v15; // [esp+28h] [ebp-14h] float v16; // [esp+2Ch] [ebp-10h] int v17; // [esp+30h] [ebp-Ch] float v18; // [esp+34h] [ebp-8h] float v19; // [esp+38h] [ebp-4h] float v20; // [esp+48h] [ebp+Ch] v2 = a2; v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v4 = v3; if ( v3 ) { sub_6566F0(v3); v5 = 0; if ( *(_BYTE *)(a2 + 5) ) { while ( 1 ) { v6 = (double)*(unsigned int *)(v2 + 8 * v5 + 10); v7 = (double)*(unsigned int *)(v2 + 8 * v5 + 6); if ( !sub_69AD10((float *)byte_ADB468, v7, v6, (int)&v17) ) break; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v14 = v17; v15 = v18; v16 = v19; if ( !v5 && *((_WORD *)v4 + 274) == *((_WORD *)dword_AD8EBC + 274) ) { sub_4DC1F0(v4, &v13, (float *)&v14); v8 = v13; sub_7DB3EA(v9); v20 = v8; if ( v20 <= 0.0 ) sub_404380((float *)&unk_B66FB8, -540); else sub_404380((float *)&unk_B66FB8, 540); } sub_656EF0((char **)v4, (int)&v17); if ( ++v5 >= *(unsigned __int8 *)(v2 + 5) ) goto LABEL_10; } } else { LABEL_10: v10 = (double)*(unsigned __int16 *)(v2 + 2); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v4 + 264))(v4, LODWORD(v10)); v11 = (double)*(unsigned __int16 *)(v2 + 2); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v4 + 260))(v4, LODWORD(v11)); } } return a1; } //----- (004BDD20) -------------------------------------------------------- int __stdcall sub_4BDD20(int a1, _BYTE *a2) { char v2; // al v2 = a2[36]; qmemcpy(&unk_ACCFA8, a2, 0x24u); flt_ACCFD8 = flt_ACCFCC; byte_ACCFDC = v2; QueryPerformanceCounter(&PerformanceCount); return a1; } // ACCFCC: using guessed type float flt_ACCFCC; // ACCFD8: using guessed type float flt_ACCFD8; // ACCFDC: using guessed type char byte_ACCFDC; //----- (004BDD60) -------------------------------------------------------- int __thiscall sub_4BDD60(_BYTE *this, int a2, _WORD *a3) { _BYTE *v3; // ebx _DWORD *v4; // eax int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx int v13; // [esp+8h] [ebp-20h] int v14; // [esp+Ch] [ebp-1Ch] int v15; // [esp+10h] [ebp-18h] int v16; // [esp+14h] [ebp-14h] int v17; // [esp+18h] [ebp-10h] int v18; // [esp+1Ch] [ebp-Ch] int v19; // [esp+20h] [ebp-8h] int v20; // [esp+24h] [ebp-4h] v3 = this; if ( *a3 == 7768 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( v4 ) { qmemcpy(&v13, a3 + 1, 0x20u); v5 = v13; v4[28] = v14; v6 = v16; v4[27] = v5; v7 = v15; v4[30] = v6; v8 = v18; v4[29] = v7; v9 = v17; v4[32] = v8; v10 = v20; v4[31] = v9; v11 = v19; v4[34] = v10; v4[33] = v11; v3[2332] = 1; sub_6F3C20(&off_AB7F2C); sub_8EF040(v3, dword_ACDD50, 0); return a2; } } else { this[2332] = 0; sub_6F3C20(&off_AB7F2C); sub_8EF040(v3, dword_ACDD50, 0); } return a2; } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (004BDE40) -------------------------------------------------------- char __thiscall sub_4BDE40(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = -20479; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004BDE80) -------------------------------------------------------- int __thiscall sub_4BDE80(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // esi int *v4; // esi signed int v5; // ebx unsigned int v6; // esi int v7; // eax int v8; // esi unsigned int v9; // edi int v10; // esi _DWORD *v11; // eax int v12; // eax _DWORD *v14; // [esp+Ch] [ebp-20h] _DWORD ***v15; // [esp+10h] [ebp-1Ch] char v16[4]; // [esp+14h] [ebp-18h] int v17; // [esp+18h] [ebp-14h] int v18; // [esp+1Ch] [ebp-10h] int v19; // [esp+20h] [ebp-Ch] int v20; // [esp+24h] [ebp-8h] v3 = this; v15 = this; if ( !sub_718A50(&dword_B9E560) ) sub_56C260(v3[143]); sub_718C50( &dword_B9E560, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); sub_718BF0( &dword_B9E560, *(_DWORD *)(a3 + 100), *(_DWORD *)(a3 + 104), *(_DWORD *)(a3 + 108), *(_DWORD *)(a3 + 112), *(_DWORD *)(a3 + 116)); v14 = v3[310]; v4 = (int *)(a3 + 28); v5 = 4; do { v20 = 0; v19 = 0; v18 = 0; v17 = 0; *(_DWORD *)v16 = 0; strncpy(v16, &byte_9BBD1B, 0x14u); if ( *(v4 - 2) != *(_DWORD *)v16 || *(v4 - 1) != v17 || *v4 != v18 || v4[1] != v19 || v4[2] != v20 ) sub_719DB0((unsigned int *)&dword_B9E560, *(v4 - 2), *(v4 - 1), *v4, v4[1], v4[2], 1); v4 += 5; --v5; } while ( v5 ); sub_718A20(&dword_B9E560, *(_BYTE *)(a3 + 120), *(_BYTE *)(a3 + 121)); if ( v14 ) { sub_71D8F0(v14, *(_BYTE *)(a3 + 121)); sub_71D9D0(v14, *(_BYTE *)(a3 + 120)); } sub_71A130(&dword_B9E560, a3); sub_56C0A0(v15[143]); v6 = 0; do { v7 = sub_718E40(&dword_B9E560, v6); if ( v7 && *(_BYTE *)(v7 + 64) ) sub_56F630(v15[143], (int *)v7); ++v6; } while ( v6 < 0x14 ); v8 = dword_B9E568; v9 = 0; if ( (dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568]) / 68 ) { do { v10 = sub_718E40(&dword_B9E560, v8 + v9 + 4 * v8); if ( v10 ) { v11 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)v10 != *v11 || *(_DWORD *)(v10 + 4) != v11[1] || *(_DWORD *)(v10 + 8) != v11[2] || *(_DWORD *)(v10 + 12) != v11[3] || *(_DWORD *)(v10 + 16) != v11[4] ) { v12 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)v10, *(_DWORD *)(v10 + 4), *(_DWORD *)(v10 + 8), *(_DWORD *)(v10 + 12), *(_DWORD *)(v10 + 16)); if ( v12 ) { *(_BYTE *)(v12 + 20) = *(_BYTE *)(v10 + 20); if ( !*(_BYTE *)(v10 + 20) ) *(_BYTE *)(v12 + 64) = 0; } } } v8 = dword_B9E568; ++v9; } while ( v9 < (dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568]) / 68 ); } return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004BE110) -------------------------------------------------------- char __thiscall sub_4BE110(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // esi int v4; // ecx v3 = this; HIBYTE(a2) = a3; v4 = this[585]; a3 = -20472; sub_905F90(v4, &a3, 2u); return sub_906000(v3[585], &a2, 2u); } //----- (004BE160) -------------------------------------------------------- char __thiscall sub_4BE160(_DWORD *this) { _DWORD *v1; // esi char result; // al int v3; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; result = sub_718A50(&dword_B9E560); if ( result ) { v3 = v1[585]; v4 = -20460; sub_905F90(v3, &v4, 2u); result = sub_906000(v1[585], &v5, 1u); } return result; } // B9E560: using guessed type int dword_B9E560; //----- (004BE1B0) -------------------------------------------------------- int __thiscall sub_4BE1B0(_DWORD ***this, int a2, _BYTE *a3) { _DWORD ***v3; // ebx int *v4; // eax int *v5; // eax unsigned int v6; // esi int v7; // eax int v8; // esi unsigned int v9; // edx unsigned int v10; // edi int v11; // esi _DWORD *v12; // eax int v13; // eax int v14; // ecx int v15; // edx int v16; // eax int v17; // ecx int v18; // edx int v19; // eax _DWORD *v20; // ecx int v22; // [esp+Ch] [ebp-1Ch] int v23; // [esp+10h] [ebp-18h] int v24; // [esp+14h] [ebp-14h] int v25; // [esp+18h] [ebp-10h] int v26; // [esp+1Ch] [ebp-Ch] char v27; // [esp+20h] [ebp-8h] v3 = this; if ( dword_B9DCC4 && !sub_718A50(&dword_B9E560) ) { v4 = sub_6C1530(&dword_B9DC70, &v22); sub_718C50(&dword_B9E560, *v4, v4[1], v4[2], v4[3], v4[4]); v5 = sub_6C1530(&dword_B9DC70, &v22); sub_718BF0(&dword_B9E560, *v5, v5[1], v5[2], v5[3], v5[4]); } sub_719AA0(&dword_B9E560, a3); sub_56C260(v3[143]); v6 = 0; do { v7 = sub_718E40(&dword_B9E560, v6); if ( v7 && *(_BYTE *)(v7 + 64) ) sub_56F630(v3[143], (int *)v7); ++v6; } while ( v6 < 0x14 ); v8 = dword_B9E568; if ( (unsigned int)dword_B9E568 < 4 ) { v9 = (signed int)((unsigned __int64)(2021161081i64 * (dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568])) >> 32) >> 5; v10 = 0; if ( v9 + (v9 >> 31) ) { do { v11 = sub_718E40(&dword_B9E560, v8 + v10 + 4 * v8); if ( v11 ) { v12 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)v11 != *v12 || *(_DWORD *)(v11 + 4) != v12[1] || *(_DWORD *)(v11 + 8) != v12[2] || *(_DWORD *)(v11 + 12) != v12[3] || *(_DWORD *)(v11 + 16) != v12[4] ) { v13 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)v11, *(_DWORD *)(v11 + 4), *(_DWORD *)(v11 + 8), *(_DWORD *)(v11 + 12), *(_DWORD *)(v11 + 16)); if ( v13 ) { *(_DWORD *)(v13 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v13 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v13 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v13 + 40) = *(_DWORD *)(v11 + 40); *(_BYTE *)(v13 + 64) = *(_BYTE *)(v11 + 64); *(_BYTE *)(v13 + 52) = *(_BYTE *)(v11 + 52); *(_BYTE *)(v13 + 20) = *(_BYTE *)(v11 + 20); *(_DWORD *)(v13 + 24) = *(_DWORD *)(v11 + 24); *(_DWORD *)(v13 + 44) = *(_DWORD *)(v11 + 44); *(_DWORD *)(v13 + 48) = *(_DWORD *)(v11 + 48); } else { v14 = *(_DWORD *)v11; v15 = *(_DWORD *)(v11 + 4); v27 = *(_BYTE *)(v11 + 52); v16 = *(_DWORD *)(v11 + 8); v22 = v14; v17 = *(_DWORD *)(v11 + 12); v24 = v16; v23 = v15; v18 = *(_DWORD *)(v11 + 16); v25 = v17; v26 = v18; v19 = sub_6C1330(&dword_B9DC70, (int)&v22); if ( v19 ) { *(_DWORD *)(v19 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v19 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v19 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v19 + 40) = *(_DWORD *)(v11 + 40); *(_BYTE *)(v19 + 64) = *(_BYTE *)(v11 + 64); *(_BYTE *)(v19 + 20) = *(_BYTE *)(v11 + 20); *(_DWORD *)(v19 + 24) = *(_DWORD *)(v11 + 24); *(_DWORD *)(v19 + 44) = *(_DWORD *)(v11 + 44); *(_DWORD *)(v19 + 48) = *(_DWORD *)(v11 + 48); } } } } v8 = dword_B9E568; ++v10; } while ( v10 < (dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568]) / 68 ); } } v20 = v3[181]; if ( v20 ) sub_582B90(v20); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004BE450) -------------------------------------------------------- int __thiscall sub_4BE450(_DWORD *this, int a2, unsigned __int8 *a3) { unsigned int v3; // eax _DWORD *v4; // ebx _DWORD *v5; // edi unsigned int v6; // eax _DWORD *v7; // ecx int v8; // eax unsigned int v9; // ebx unsigned int v10; // ecx int *v11; // eax _DWORD *v12; // edi unsigned int v13; // ecx int *v14; // eax _DWORD *v15; // edi int v16; // esi int v17; // edi int v18; // esi _DWORD *v19; // eax int v20; // eax char v21; // dl int v22; // ecx int v23; // eax int v24; // edx int v25; // ecx int v26; // eax unsigned int v27; // esi int v28; // eax _DWORD *v29; // ecx _DWORD *v31; // [esp+Ch] [ebp-24h] int v32; // [esp+10h] [ebp-20h] int v33; // [esp+14h] [ebp-1Ch] int v34; // [esp+18h] [ebp-18h] int v35; // [esp+1Ch] [ebp-14h] int v36; // [esp+20h] [ebp-10h] int v37; // [esp+24h] [ebp-Ch] char v38; // [esp+28h] [ebp-8h] v32 = dword_B9E568; v3 = a3[22]; v4 = this; v31 = this; if ( v3 >= 4 ) v5 = 0; else v5 = (_DWORD *)this[v3 + 306]; v6 = a3[26]; if ( v6 >= 4 ) v7 = 0; else v7 = (_DWORD *)this[v6 + 306]; if ( v5 && v7 ) { v8 = a3[27]; v9 = v7[v8 + 220]; sub_71BF50(v7, v8, v5[a3[23] + 220]); sub_71BF50(v5, a3[23], v9); v4 = v31; } sub_719340(&dword_B9E560, a3); v10 = a3[22]; v11 = &dword_B9E5E4[4 * v10]; if ( *v11 == v11[1] ) { v12 = (_DWORD *)(v10 >= 4 ? 0 : v4[v10 + 306]); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v12 + 260))(v12) ) sub_8F86A0(&unk_BA6B10, v12); } v13 = a3[26]; v14 = &dword_B9E5E4[4 * v13]; if ( *v14 == v14[1] ) { v15 = (_DWORD *)(v13 >= 4 ? 0 : v4[v13 + 306]); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v15 + 260))(v15) ) sub_8F86A0(&unk_BA6B10, v15); } if ( v32 != dword_B9E568 || dword_B9E568 == a3[22] || dword_B9E568 == a3[26] ) { sub_6C17E0((int)&dword_B9DC70); v16 = dword_B9E568; v17 = 0; if ( (dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568]) / 68 ) { while ( 1 ) { v18 = sub_718E40(&dword_B9E560, v16 + v17 + 4 * v16); if ( !v18 ) goto LABEL_37; v19 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)v18 == *v19 && *(_DWORD *)(v18 + 4) == v19[1] && *(_DWORD *)(v18 + 8) == v19[2] && *(_DWORD *)(v18 + 12) == v19[3] && *(_DWORD *)(v18 + 16) == v19[4] ) { goto LABEL_37; } v20 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)v18, *(_DWORD *)(v18 + 4), *(_DWORD *)(v18 + 8), *(_DWORD *)(v18 + 12), *(_DWORD *)(v18 + 16)); if ( v20 ) break; v22 = *(_DWORD *)(v18 + 4); v23 = *(_DWORD *)v18; v38 = *(_BYTE *)(v18 + 52); v24 = *(_DWORD *)(v18 + 8); v34 = v22; v25 = *(_DWORD *)(v18 + 16); v35 = v24; v33 = v23; v26 = *(_DWORD *)(v18 + 12); v37 = v25; v36 = v26; v20 = sub_6C1330(&dword_B9DC70, (int)&v33); if ( v20 ) { *(_DWORD *)(v20 + 28) = *(_DWORD *)(v18 + 28); *(_DWORD *)(v20 + 32) = *(_DWORD *)(v18 + 32); *(_DWORD *)(v20 + 36) = *(_DWORD *)(v18 + 36); *(_DWORD *)(v20 + 40) = *(_DWORD *)(v18 + 40); *(_BYTE *)(v20 + 64) = *(_BYTE *)(v18 + 64); v21 = *(_BYTE *)(v18 + 20); goto LABEL_36; } LABEL_37: v16 = dword_B9E568; if ( ++v17 >= (unsigned int)((dword_B9E5E4[4 * dword_B9E568 + 1] - dword_B9E5E4[4 * dword_B9E568]) / 68) ) goto LABEL_38; } *(_DWORD *)(v20 + 28) = *(_DWORD *)(v18 + 28); *(_DWORD *)(v20 + 32) = *(_DWORD *)(v18 + 32); *(_DWORD *)(v20 + 36) = *(_DWORD *)(v18 + 36); *(_DWORD *)(v20 + 40) = *(_DWORD *)(v18 + 40); *(_BYTE *)(v20 + 64) = *(_BYTE *)(v18 + 64); *(_BYTE *)(v20 + 52) = *(_BYTE *)(v18 + 52); v21 = *(_BYTE *)(v18 + 20); LABEL_36: *(_BYTE *)(v20 + 20) = v21; *(_DWORD *)(v20 + 24) = *(_DWORD *)(v18 + 24); goto LABEL_37; } } LABEL_38: sub_56C260((_DWORD **)v4[143]); v27 = 0; do { v28 = sub_718E40(&dword_B9E560, v27); if ( v28 && *(_BYTE *)(v28 + 64) ) sub_56F630((_DWORD *)v4[143], (int *)v28); ++v27; } while ( v27 < 0x14 ); v29 = (_DWORD *)v4[181]; if ( v29 ) sub_582B90(v29); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004BE7A0) -------------------------------------------------------- int __thiscall sub_4BE7A0(_DWORD ***this, int a2, unsigned __int8 *a3) { int v3; // eax int v4; // ebx char *v5; // edi int v6; // ebx int v7; // edx int v8; // ecx int v9; // eax int v10; // ecx int v11; // eax int v12; // edx int v13; // ecx int v14; // eax int v15; // edx int v16; // eax int v17; // edx int v18; // ecx int v19; // edx int v20; // eax int v21; // eax int v22; // eax int v24; // [esp+Ch] [ebp-B8h] int v25; // [esp+10h] [ebp-B4h] int v26; // [esp+14h] [ebp-B0h] int v27; // [esp+18h] [ebp-ACh] int v28; // [esp+1Ch] [ebp-A8h] _DWORD ***v29; // [esp+20h] [ebp-A4h] char v30[132]; // [esp+24h] [ebp-A0h] int v31; // [esp+A8h] [ebp-1Ch] int v32; // [esp+ACh] [ebp-18h] int v33; // [esp+B0h] [ebp-14h] int v34; // [esp+B4h] [ebp-10h] int v35; // [esp+B8h] [ebp-Ch] char v36; // [esp+BCh] [ebp-8h] v3 = *a3; v4 = (int)this; v29 = this; if ( v3 > 0 ) { v5 = (char *)&a3[a3[21] + 22]; v6 = v3; do { sub_492730(v29, 0x2000, v5); v5 += 103; --v6; } while ( v6 ); v4 = (int)v29; } if ( a3[21] > 0x80u ) a3[21] = -128; strncpy(v30, (const char *)a3 + 22, a3[21]); v7 = a3[21]; v8 = *(_DWORD *)(a3 + 5); v31 = *(_DWORD *)(a3 + 1); v9 = *(_DWORD *)(a3 + 13); v32 = v8; v10 = *(_DWORD *)(a3 + 17); v34 = v9; v11 = *(_DWORD *)(a3 + 5); v30[v7] = 0; v12 = *(_DWORD *)(a3 + 9); v35 = v10; v13 = *(_DWORD *)(a3 + 9); v25 = v11; v14 = *(_DWORD *)(a3 + 17); v33 = v12; v15 = *(_DWORD *)(a3 + 1); v26 = v13; v28 = v14; v16 = *(_DWORD *)(v4 + 912); v24 = v15; v17 = *(_DWORD *)(a3 + 13); v36 = 0; v27 = v17; if ( !sub_74DA80((_DWORD *)(v16 + 360), &v24) ) goto LABEL_16; v18 = *(_DWORD *)(a3 + 9); v19 = *(_DWORD *)(a3 + 1); v25 = *(_DWORD *)(a3 + 5); v20 = *(_DWORD *)(a3 + 17); v26 = v18; v28 = v20; v21 = *(_DWORD *)(v4 + 912); v24 = v19; v27 = *(_DWORD *)(a3 + 13); v22 = sub_74DA80((_DWORD *)(v21 + 360), &v24); if ( v22 ) { if ( *(_BYTE *)(v22 + 20) == 1 ) { LABEL_16: if ( !strcmp((const char *)&v31, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()) ) sub_492900( (char **)v4, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17), (int)v30); else sub_492980( (char **)v4, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17), (int)v30); } } return a2; } // 4BE7A0: using guessed type char var_A0[132]; //----- (004BE9A0) -------------------------------------------------------- int __thiscall sub_4BE9A0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi const char *v4; // eax int v5; // esi int v6; // eax int v8; // [esp+1Ch] [ebp-Ch] float v9; // [esp+20h] [ebp-8h] v3 = this; if ( *(_WORD *)(a3 + 4) != 5896 ) { v4 = sub_41A850(*(unsigned __int16 *)(a3 + 4)); sub_492060(v3, (int)v4); if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v5 = *(_DWORD *)dword_AD8EBC; v6 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); (*(void (__thiscall **)(char *, int))(v5 + 192))(dword_AD8EBC, v6); sub_4E2C80((_DWORD ***)v3, 0); if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 200))(&v8); sub_69AD10((float *)byte_ADB468, *(float *)&v8, v9, (int)&v8); (*(void (__stdcall **)(int *))(*(_DWORD *)dword_AD8EBC + 188))(&v8); } } return a2; } //----- (004BEA90) -------------------------------------------------------- int __stdcall sub_4BEA90(int a1, _WORD *a2) { signed int v2; // edi int v3; // esi char *v4; // eax if ( !dword_ADB4F8 ) return a1; v2 = 0; if ( *a2 <= 0u ) return a1; v3 = (int)(a2 + 1); do { v4 = sub_664AB0(dword_AD8C90, *(_WORD *)v3); if ( v4 ) { sub_665B10(dword_AD8C90, (int)v4); sub_6DCFD0(byte_ADB468, v3); sub_6DB8B0(byte_ADB468, *(unsigned __int8 *)(v3 + 4), *(_WORD *)v3, *(_WORD *)(v3 + 2)); } ++v2; v3 += 6; } while ( v2 < (unsigned __int16)*a2 ); return a1; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004BEB20) -------------------------------------------------------- char __thiscall sub_4BEB20(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = -29595; return sub_906000(v1, &v3, 2u); } //----- (004BEB50) -------------------------------------------------------- int __userpurge sub_4BEB50@(_DWORD ***a1@, float *a2@, signed int a3@, int a4@, int a5, _WORD *a6) { unsigned __int16 *v6; // edi __int16 *v7; // ebx char *v8; // eax char *v9; // esi void (__thiscall *v10)(char *, int *, _DWORD, float *, signed int); // edx int v11; // edi int v12; // eax int v13; // esi int v14; // eax int v15; // esi int v16; // ecx int v18; // [esp+28h] [ebp-2Ch] float *v19; // [esp+2Ch] [ebp-28h] signed int v20; // [esp+30h] [ebp-24h] float v21; // [esp+34h] [ebp-20h] float v22; // [esp+38h] [ebp-1Ch] int v23; // [esp+40h] [ebp-14h] float v24; // [esp+44h] [ebp-10h] _DWORD ***v25; // [esp+4Ch] [ebp-8h] int v26; // [esp+50h] [ebp-4h] v25 = a1; if ( !dword_ADB4F8 ) return a5; v20 = a3; v6 = a6; v26 = 0; if ( *a6 <= 0u ) return a5; v19 = a2; v18 = a4; v7 = a6 + 1; do { v8 = sub_664AB0(dword_AD8C90, *v7); v9 = v8; if ( v8 ) { if ( v8 != dword_AD8EBC && !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v8 + 248))(v8) ) { (*(void (__thiscall **)(char *, int *))(*(_DWORD *)v9 + 200))(v9, &v23); sub_69AD10((float *)byte_ADB468, *(float *)&v23, v24, (int)&v23); v10 = *(void (__thiscall **)(char *, int *, _DWORD, float *, signed int))(*(_DWORD *)v9 + 232); *(float *)&v23 = *(float *)&v23 + 1.0; v10(v9, &v23, 0, &flt_AB399C, 1); v11 = *(_DWORD *)v9; v12 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 212))(v9); (*(void (__thiscall **)(char *, int))(v11 + 192))(v9, v12); v6 = a6; } sub_6DB900(byte_ADB468, *v7); if ( v9 == dword_AD8EBC && (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) { sub_67CD10(dword_AD8EBC); sub_4E2C80(v25, 0); if ( (*(unsigned __int8 (__stdcall **)(int, float *, signed int))(*(_DWORD *)dword_AD8EBC + 248))(v18, v19, v20) ) { v13 = *(_DWORD *)dword_AD8EBC; v20 = 1; v19 = &flt_AB399C; v14 = sub_67B5C0(dword_AD8EBC); (*(void (__thiscall **)(char *, int, _DWORD))(v13 + 232))(dword_AD8EBC, v14, 0); } else { (*(void (__stdcall **)(float *, _DWORD, _DWORD))(*(_DWORD *)dword_AD8EBC + 200))( &v21, LODWORD(v21), LODWORD(v22)); sub_69AD10((float *)byte_ADB468, v22, v22, (int)&v21); LODWORD(v22) = 1; v20 = 0; v21 = v21 + 1.0; v19 = &v21; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 232))(); } v15 = *(_DWORD *)dword_AD8EBC; v18 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); (*(void (__thiscall **)(char *))(v15 + 192))(dword_AD8EBC); } } v16 = *v6; ++v7; ++v26; } while ( v26 < v16 ); return a5; } // 4BEB50: could not find valid save-restore pair for ebx // 4BEB50: could not find valid save-restore pair for edi // 4BEB50: could not find valid save-restore pair for esi // AB399C: using guessed type float flt_AB399C; // ADB4F8: using guessed type int dword_ADB4F8; //----- (004BED50) -------------------------------------------------------- char __thiscall sub_4BED50(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 12345; return sub_906000(v1, &v3, 2u); } //----- (004BED80) -------------------------------------------------------- char __thiscall sub_4BED80(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 18474; return sub_906000(v1, &v3, 2u); } //----- (004BEDB0) -------------------------------------------------------- int __stdcall sub_4BEDB0(int a1, unsigned __int16 *a2) { unsigned __int16 *v2; // ebx char *v3; // eax char *v4; // esi _DWORD *v5; // edi int v6; // eax int v7; // ebx int v8; // esi int *v9; // eax int v10; // eax int v12; // [esp+8h] [ebp-8h] char *v13; // [esp+Ch] [ebp-4h] v2 = a2; v3 = sub_664AB0(dword_AD8C90, *a2); v4 = v3; v13 = v3; if ( v3 ) { if ( sub_64F900(v3, *(_DWORD *)(a2 + 1)) ) { v5 = *(_DWORD **)(sub_64F860(v4) + 4); if ( v5 ) { do { sub_64F860(v4); v6 = v5[2]; v5 = (_DWORD *)*v5; v12 = v6; if ( v6 ) { v7 = *(unsigned __int16 *)(v6 + 20); v8 = dword_ACDA7C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v9 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v7); if ( *v9 ) { v10 = *v9; if ( v10 ) { if ( *(_DWORD *)(v10 + 34) == *(_DWORD *)(a2 + 1) ) *(_DWORD *)(v12 + 112) = *(_DWORD *)(a2 + 5); } } } } v4 = v13; } } while ( v5 ); v2 = a2; } } } sub_6AD290(&unk_B91250, (int *)(v2 + 1), *v2); return a1; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004BEE80) -------------------------------------------------------- int __stdcall sub_4BEE80(int a1, unsigned __int16 *a2) { unsigned __int16 *v2; // ebx char *v3; // esi int *v4; // edi _DWORD *v5; // edi int v6; // eax int v7; // ebx int v8; // esi int *v9; // eax int v10; // eax int v12; // [esp+4h] [ebp-10h] signed int v13; // [esp+8h] [ebp-Ch] char *v14; // [esp+Ch] [ebp-8h] _DWORD *v15; // [esp+10h] [ebp-4h] v2 = a2; if ( !a2 ) return a1; v3 = sub_664AB0(dword_AD8C90, *a2); v14 = v3; v13 = 0; if ( !*((_BYTE *)a2 + 2) ) return a1; v4 = (int *)((char *)a2 + 3); v15 = (_DWORD *)((char *)a2 + 3); do { sub_6AD290(&unk_B91250, v4, *v2); if ( v3 ) { if ( sub_64F900(v3, *v4) ) { v5 = *(_DWORD **)(sub_64F860(v3) + 4); if ( v5 ) { do { sub_64F860(v3); v6 = v5[2]; v5 = (_DWORD *)*v5; v12 = v6; if ( v6 ) { v7 = *(unsigned __int16 *)(v6 + 20); v8 = dword_ACDA7C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v9 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v7); if ( *v9 ) { v10 = *v9; if ( v10 ) { if ( *(_DWORD *)(v10 + 34) == *v15 ) *(_DWORD *)(v12 + 112) = v15[2]; } } } } v3 = v14; } } while ( v5 ); v2 = a2; } } } v4 = v15 + 3; ++v13; v15 += 3; } while ( v13 < *((unsigned __int8 *)v2 + 2) ); return a1; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004BEFA0) -------------------------------------------------------- int __thiscall sub_4BEFA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // edx int v5; // eax int v6; // ecx int v7; // eax _DWORD **v8; // ecx const char *v9; // eax int v11; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v3 = this; if ( *(_WORD *)(a3 + 20) == 1368 ) { if ( this[321] ) { sub_6C15E0( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); v4 = *(_DWORD *)(a3 + 8); v5 = *(_DWORD *)a3; v12 = *(_DWORD *)(a3 + 4); v6 = *(_DWORD *)(a3 + 16); v13 = v4; v11 = v5; v7 = *(_DWORD *)(a3 + 12); v15 = v6; v8 = (_DWORD **)v3[321]; v14 = v7; v16 = 0; sub_57B850(v8, (int)&v11); } } else { v9 = sub_41A850(*(unsigned __int16 *)(a3 + 20)); sub_492060(v3, (int)v9); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004BF060) -------------------------------------------------------- int __thiscall sub_4BF060(_DWORD **this, int a2, int a3) { int v3; // esi _DWORD **v4; // edi _DWORD **v5; // ecx int v6; // edx int v7; // eax int v8; // edx int v10; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v3 = a3; v4 = this; sub_57CE30(this[321], *(_BYTE *)a3); sub_57CD50(v4[321], *(_BYTE *)(a3 + 1)); sub_6C1100(&dword_B9DC70, *(_BYTE *)v3, *(_BYTE *)(v3 + 1)); sub_6C15E0( &dword_B9DC70, *(_DWORD *)(v3 + 2), *(_DWORD *)(v3 + 6), *(_DWORD *)(v3 + 10), *(_DWORD *)(v3 + 14), *(_DWORD *)(v3 + 18)); v5 = (_DWORD **)v4[321]; if ( v5 ) { v6 = *(_DWORD *)(a3 + 2); v11 = *(_DWORD *)(a3 + 6); v7 = *(_DWORD *)(a3 + 14); v10 = v6; v8 = *(_DWORD *)(a3 + 10); v13 = v7; v12 = v8; v14 = *(_DWORD *)(a3 + 18); v15 = 0; sub_57B850(v5, (int)&v10); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004BF120) -------------------------------------------------------- int __thiscall sub_4BF120(_DWORD *this, int a2, int a3) { char *v3; // ecx v3 = (char *)this[323]; if ( v3 ) sub_523F60(v3, a3); return a2; } //----- (004BF140) -------------------------------------------------------- int __thiscall sub_4BF140(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // esi int v4; // ecx bool v5; // al float v6; // ST00_4 v3 = this; if ( this[176] ) { v4 = this[176]; v5 = a3[1] != 0; *(_BYTE *)(*(_DWORD *)(v4 + 356) + 324) = v5; *(_BYTE *)(*(_DWORD *)(v4 + 784) + 380) = v5; v6 = (double)(unsigned __int8)a3[2]; sub_605C50((_DWORD **)v3[176], v6); sub_605C20((_DWORD *)v3[176], *a3 != 0); } return a2; } //----- (004BF1B0) -------------------------------------------------------- char __thiscall sub_4BF1B0(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // esi int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+6h] [ebp-6h] __int16 v8; // [esp+8h] [ebp-4h] v3 = this; v7 = a2; v6 = a3; v4 = this[584]; v8 = 12356; sub_905F90(v4, &v8, 2u); return sub_906000(v3[584], &v6, 4u); } //----- (004BF200) -------------------------------------------------------- char __thiscall sub_4BF200(_DWORD *this, __int16 a2) { __int16 v2; // ax _DWORD *v3; // esi int v4; // ecx __int16 v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; a2 = 17428; v4 = this[584]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[584], &v6, 2u); } //----- (004BF250) -------------------------------------------------------- char __thiscall sub_4BF250(_DWORD *this, __int16 a2) { __int16 v2; // ax _DWORD *v3; // esi int v4; // ecx __int16 v6; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; a2 = 17430; v4 = this[584]; v6 = v2; sub_905F90(v4, &a2, 2u); return sub_906000(v3[584], &v6, 2u); } //----- (004BF2A0) -------------------------------------------------------- int __thiscall sub_4BF2A0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; if ( *a3 == 8480 ) { sub_6BC280(a3 + 1); v4 = (_DWORD *)v3[231]; qmemcpy((char *)v4 + 289, &word_B91FF8, 0x37u); sub_5CF550(v4, (_BYTE *)v4 + 289); } return a2; } // B91FF8: using guessed type __int16 word_B91FF8; // B9202C: using guessed type char byte_B9202C; //----- (004BF2F0) -------------------------------------------------------- char __thiscall sub_4BF2F0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-4h] v2 = this; v5 = 16421; v3 = this[584]; HIBYTE(a2) = a2; sub_905F90(v3, &v5, 2u); return sub_906000(v2[584], (char *)&a2 + 3, 1u); } //----- (004BF330) -------------------------------------------------------- int __userpurge sub_4BF330@(int a1@, int a2, int a3) { char *v3; // ecx v3 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 1)); if ( v3 ) sub_65F070( (int)v3, a1, 100 * (*(_DWORD *)(a3 + 3) / 0x2710u), 10000 * (*(_DWORD *)(a3 + 3) / 0x2710u), 100 * (*(_DWORD *)(a3 + 3) / 0x64u - 100 * (*(_DWORD *)(a3 + 3) / 0x2710u))); return a2; } //----- (004BF390) -------------------------------------------------------- char __userpurge sub_4BF390@(_DWORD *a1@, double a2@, char a3) { _DWORD *v3; // esi char result; // al int v5; // ecx int v6; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+Bh] [ebp-1h] v3 = a1; result = sub_4E37C0(a1, a2); if ( !result ) { v5 = v3[584]; v7 = -15352; sub_905F90(v5, &v7, 2u); v6 = v3[584]; v8 = a3; result = sub_906000(v6, &v8, 1u); } return result; } //----- (004BF3E0) -------------------------------------------------------- char __thiscall sub_4BF3E0(_DWORD *this, __int16 a2, int a3) { _DWORD *v3; // esi int v4; // ecx signed __int16 v5; // ax int v6; // ecx __int16 v8; // [esp+4h] [ebp-8h] __int16 v9; // [esp+6h] [ebp-6h] __int16 v10; // [esp+8h] [ebp-4h] v3 = this; v4 = this[584]; v10 = -15348; sub_905F90(v4, &v10, 2u); v5 = a3; v8 = a2; if ( !a3 ) v5 = -1; v6 = v3[584]; v9 = v5; return sub_906000(v6, &v8, 4u); } //----- (004BF440) -------------------------------------------------------- char __thiscall sub_4BF440(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] __int16 v8; // [esp+6h] [ebp-6h] __int16 v9; // [esp+8h] [ebp-4h] v3 = this; v4 = this[584]; v9 = -15344; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 4u); } //----- (004BF490) -------------------------------------------------------- int __thiscall sub_4BF490(int *this, int a2, __int16 *a3) { int *v3; // esi int *v4; // esi signed int v5; // ebx v3 = this; sub_5A1AC0(this[163], *a3); sub_5A1AC0(v3[168], *a3); v4 = v3 + 169; v5 = 4; do { sub_5A1AC0(*(v4 - 5), *a3); sub_5A1AC0(*v4, *a3); ++v4; --v5; } while ( v5 ); sub_6BFD20((unsigned __int16)*a3, flt_ACCFCC, 0.0, 0.0); return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BF510) -------------------------------------------------------- int __thiscall sub_4BF510(_BYTE *this, int a2, int a3) { int v3; // ebx int v4; // esi int v5; // esi int v6; // edx char *v7; // ebx char *v8; // eax float v9; // ST14_4 _BYTE *v11; // [esp+28h] [ebp-4h] v11 = this; if ( sub_64D0F0((_DWORD *)dword_AD8EBC + 21, *(_WORD *)a3) ) return a2; v3 = *(unsigned __int16 *)(a3 + 2); v4 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v6 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v6 + 4 * v3) ) v5 = *(_DWORD *)(v6 + 4 * v3); else v5 = 0; } else { v5 = 0; } } else { v5 = 0; } v7 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 4)); v8 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 6)); if ( v5 && v7 ) { if ( v8 ) { v9 = (double)*(unsigned int *)(v5 + 191); sub_6AED40( &unk_B91250, (char *)(v5 + 195), v5 + 291, (int)v7, (int)v8, flt_ACCFCC, v9, 0, *(_DWORD *)(v5 + 323), *(_WORD *)(a3 + 2) != 0, 0xFFFF); v11[4940] = 1; *((_WORD *)v11 + 2471) = *(_WORD *)(a3 + 2); } } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACEA9C: using guessed type int dword_ACEA9C; //----- (004BF630) -------------------------------------------------------- char __thiscall sub_4BF630(_DWORD *this, int a2, char a3) { int v3; // esi unsigned __int16 v4; // di _DWORD *v5; // ebx _BYTE **v6; // eax _BYTE *v7; // esi int v8; // ecx int v9; // ecx __int16 v11; // [esp+Ch] [ebp-4h] v3 = dword_ACDA68; v4 = a2; v5 = this; LOBYTE(v6) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, a2); if ( (_BYTE)v6 ) { if ( v4 <= *(_WORD *)(v3 + 200) ) { v6 = (_BYTE **)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *v6 ) { v7 = *v6; if ( *v6 ) { v8 = v5[585]; v11 = 4337; sub_905F90(v8, &v11, 2u); LOBYTE(a2) = a3; v9 = v5[585]; BYTE1(a2) = *v7; LOBYTE(v6) = sub_906000(v9, &a2, 2u); } } } } return (char)v6; } // ACDA68: using guessed type int dword_ACDA68; //----- (004BF6B0) -------------------------------------------------------- char __thiscall sub_4BF6B0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 4354; return sub_906000(v1, &v3, 2u); } //----- (004BF6E0) -------------------------------------------------------- char __thiscall sub_4BF6E0(_DWORD *this) { int v1; // ecx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = this[584]; LOWORD(v3) = 4355; return sub_906000(v1, &v3, 2u); } //----- (004BF710) -------------------------------------------------------- int __thiscall sub_4BF710(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi float v4; // ST0C_4 float v5; // ST08_4 float *v6; // eax float v7; // edx double v8; // st7 float v9; // ST10_4 float v10; // ST0C_4 int v12; // [esp+Ch] [ebp-34h] float v13; // [esp+1Ch] [ebp-24h] float v14; // [esp+20h] [ebp-20h] float v15; // [esp+24h] [ebp-1Ch] int v16; // [esp+28h] [ebp-18h] float v17; // [esp+2Ch] [ebp-14h] float v18; // [esp+30h] [ebp-10h] float v19; // [esp+34h] [ebp-Ch] float v20; // [esp+38h] [ebp-8h] float v21; // [esp+3Ch] [ebp-4h] v3 = this; if ( this[1209] ) { if ( !*(_BYTE *)a3 ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 676))(&v13); v12 = 4; LABEL_6: sub_6B4D30((float *)v3[1209], flt_ACCFCC, 0.5, v12, 1); return a2; } if ( *(_BYTE *)a3 == 1 ) { v4 = (double)*(unsigned int *)(a3 + 5); v5 = (double)*(unsigned int *)(a3 + 1); sub_69AD10((float *)byte_ADB468, v5, v4, (int)&v16); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 676))(&v13); v6 = (float *)v3[1209]; v19 = *(float *)&v16 - v13; v20 = v17 - v14; v7 = v20; v8 = v18 - v15; v6[11] = v19; v6[12] = v7; v21 = v8; v6[13] = v21; v9 = (double)*(unsigned __int16 *)(a3 + 11); v10 = (double)*(unsigned __int16 *)(a3 + 9); sub_6B4690((void *)v3[1209], v10, v9); v12 = 3; *(float *)(v3[1209] + 64) = (double)*(unsigned __int16 *)(a3 + 13); goto LABEL_6; } } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BF840) -------------------------------------------------------- char __thiscall sub_4BF840(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 8307; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004BF890) -------------------------------------------------------- int __thiscall sub_4BF890(int *this, int a2, int a3) { int *v3; // ebx int v4; // esi char *v5; // edi char *v6; // eax int v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi v3 = this; v4 = a3; v5 = sub_4E2910(this, *(_WORD *)(a3 + 2), 51, 4); if ( v5 ) { v6 = sub_4E2910(v3, *(_WORD *)v4, 51, 4); sub_7443B0(v5, (int)v6, (volatile LONG **)*(unsigned __int8 *)(v4 + 4)); sub_744200(v5, &a3, *(unsigned __int8 *)(v4 + 4)); v7 = a3; if ( a3 ) { sub_6AF370( &unk_B91250, "Pet_St01", *(_DWORD *)(a3 + 140), *(_DWORD *)(a3 + 144), *(_DWORD *)(a3 + 148), dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); v7 = a3; } if ( v7 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BF9B0) -------------------------------------------------------- int __thiscall sub_4BF9B0(int *this, int a2, int a3) { char *v3; // eax char *v4; // edi int **v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // esi v3 = sub_4E2910(this, *(_WORD *)a3, 51, 8); v4 = v3; if ( v3 ) { v5 = (int **)*((_DWORD *)v3 + 731); if ( v5 ) { sub_744200(v5, &a3, *((_DWORD *)v3 + 730)); if ( a3 ) sub_6AF370( &unk_B91250, "Pet_Fi01", *(_DWORD *)(a3 + 140), *(_DWORD *)(a3 + 144), *(_DWORD *)(a3 + 148), dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); sub_744BC0(v5, 0, 0, 0); sub_7444F0(v5, *((_DWORD *)v4 + 730)); if ( a3 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } } } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BFAE0) -------------------------------------------------------- char __thiscall sub_4BFAE0(_DWORD *this, __int16 a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+6h] [ebp-6h] __int16 v9; // [esp+8h] [ebp-4h] v3 = this; v4 = this[584]; v9 = -13311; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 3u); } //----- (004BFB30) -------------------------------------------------------- char __thiscall sub_4BFB30(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v4 = -13307; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], &v5, 1u); } //----- (004BFB70) -------------------------------------------------------- int __stdcall sub_4BFB70(int a1, int a2) { char *v2; // eax int v3; // edx int v4; // ecx int v5; // edx void (__thiscall *v6)(char *, int *); // edx int v8; // [esp+4h] [ebp-18h] int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] char v12; // [esp+14h] [ebp-8h] v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { v3 = *(_DWORD *)(a2 + 6); v8 = *(_DWORD *)(a2 + 2); v4 = *(_DWORD *)(a2 + 10); v9 = v3; v5 = *(_DWORD *)(a2 + 14); v10 = v4; v11 = v5; v6 = *(void (__thiscall **)(char *, int *))(*(_DWORD *)v2 + 88); v12 = 0; v6(v2, &v8); } return a1; } //----- (004BFBE0) -------------------------------------------------------- int __thiscall sub_4BFBE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi float *v4; // ecx v3 = this; v4 = (float *)this[1246]; if ( v4 ) { sub_41FF00(v4, flt_ACCFCC); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[1246]); } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004BFC20) -------------------------------------------------------- int __userpurge sub_4BFC20@(int a1@, int a2, int a3) { char *v3; // ecx v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); if ( v3 ) sub_65F070( (int)v3, a1, 100 * (*(_DWORD *)(a3 + 2) / 0x2710u), 10000 * (*(_DWORD *)(a3 + 2) / 0x2710u), 100 * (*(_DWORD *)(a3 + 2) / 0x64u - 100 * (*(_DWORD *)(a3 + 2) / 0x2710u))); return a2; } //----- (004BFC80) -------------------------------------------------------- int __stdcall sub_4BFC80(int a1, _DWORD *a2) { _DWORD *v2; // eax v2 = sub_6CD770(); if ( v2 ) { sub_6CD120(v2, a2); byte_AB7288 = 1; } return a1; } // AB7288: using guessed type char byte_AB7288; //----- (004BFCB0) -------------------------------------------------------- int __thiscall sub_4BFCB0(void *this, int a2, int a3) { int v3; // edx void *v4; // ebx int v5; // ecx int v6; // eax int v7; // ecx int v8; // edx int v9; // ecx int v10; // eax int v11; // edx size_t v12; // eax char v14; // [esp+Ch] [ebp-158h] char v15[256]; // [esp+30h] [ebp-134h] int v16; // [esp+130h] [ebp-34h] int v17; // [esp+134h] [ebp-30h] int v18; // [esp+138h] [ebp-2Ch] int v19; // [esp+13Ch] [ebp-28h] int v20; // [esp+140h] [ebp-24h] char v21; // [esp+144h] [ebp-20h] int v22; // [esp+148h] [ebp-1Ch] int v23; // [esp+14Ch] [ebp-18h] int v24; // [esp+150h] [ebp-14h] int v25; // [esp+154h] [ebp-10h] int v26; // [esp+158h] [ebp-Ch] char v27; // [esp+15Ch] [ebp-8h] v3 = *(_DWORD *)(a3 + 8); v4 = this; v5 = *(_DWORD *)(a3 + 4); v16 = *(_DWORD *)a3; v6 = *(_DWORD *)(a3 + 12); v17 = v5; v7 = *(_DWORD *)(a3 + 16); v19 = v6; v20 = v7; v18 = v3; v21 = 0; if ( strcmp((const char *)&v16, (const char *)&unk_9BBD2B) ) strcpy((char *)v4 + 5000, (const char *)&v16); v8 = *(_DWORD *)(a3 + 20); v9 = *(_DWORD *)(a3 + 28); v23 = *(_DWORD *)(a3 + 24); v10 = *(_DWORD *)(a3 + 36); v22 = v8; v11 = *(_DWORD *)(a3 + 32); v24 = v9; v26 = v10; v25 = v11; v27 = 0; if ( strcmp((const char *)&v22, (const char *)&unk_9BBD61) ) strcpy((char *)v4 + 5040, (const char *)&v22); _mktime32((struct tm *)(a3 + 41)); sub_5C3E80(*((_DWORD ***)v4 + 1247), (int)&v16); sub_5C3EE0(*((_DWORD ***)v4 + 1247), (int)&v22); sub_5C40B0(*((_DWORD *)v4 + 1247), *(unsigned __int8 *)(a3 + 40)); LOBYTE(v12) = *(_BYTE *)(a3 + 77); if ( (_BYTE)v12 ) { v12 = (unsigned __int8)v12; if ( (signed int)(unsigned __int8)v12 < 256 ) { strncpy(v15, (const char *)(a3 + 78), v12); v15[*(unsigned __int8 *)(a3 + 77)] = 0; sub_5C4040(*((_DWORD **)v4 + 1247), (int)v15); } } qmemcpy(&v14, (const void *)(a3 + 41), 0x24u); qmemcpy((void *)(*((_DWORD *)v4 + 1247) + 392), &v14, 0x24u); sub_5C4300(*((_DWORD *)v4 + 1247), 0); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v4 + 1247)); return a2; } // 4BFCB0: using guessed type char var_134[256]; //----- (004BFE90) -------------------------------------------------------- char __thiscall sub_4BFE90(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[585]; v7 = 22570; sub_905F90(v3, &v7, 2u); v4 = v2[585]; v6 = a2; return sub_906000(v4, &v6, 4u); } //----- (004BFEE0) -------------------------------------------------------- char __thiscall sub_4BFEE0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[585]; v7 = 22577; sub_905F90(v3, &v7, 2u); v4 = v2[585]; v6 = a2; return sub_906000(v4, &v6, 4u); } //----- (004BFF30) -------------------------------------------------------- char __thiscall sub_4BFF30(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[585]; v4 = 22580; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], &v5, 1u); } //----- (004BFF70) -------------------------------------------------------- int __stdcall sub_4BFF70(int a1, int a2) { int v2; // esi int v3; // eax int v4; // ecx _DWORD *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // [esp-8h] [ebp-20h] BOOL v9; // [esp-4h] [ebp-1Ch] int *v10; // [esp+8h] [ebp-10h] int v11; // [esp+14h] [ebp-4h] v2 = a2; sub_68F1B0((int)byte_ADB468, a2, &a2, a2); v3 = a2; v11 = 0; if ( a2 ) { v4 = *(_DWORD *)(v2 + 33); if ( !v4 ) { if ( *(_BYTE *)(v2 + 32) ) *(_WORD *)(a2 + 28) &= 0xFFFEu; else *(_WORD *)(a2 + 28) |= 1u; LABEL_10: v3 = a2; goto LABEL_11; } if ( v4 == 1 ) { v9 = *(_BYTE *)(v2 + 32) != 0; v8 = a2; v10 = &v8; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); LOBYTE(v11) = 1; v5 = sub_4DBE80(); LOBYTE(v11) = 0; sub_68D370(v5, v8, (int *)v9); goto LABEL_10; } } LABEL_11: v11 = -1; if ( v3 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } return a1; } //----- (004C0060) -------------------------------------------------------- int __thiscall sub_4C0060(int *this, int a2, int a3) { char *v3; // eax v3 = sub_4E2910(this, *(_WORD *)a3, 8, 118); if ( v3 ) *((_DWORD *)v3 + 732) = *(unsigned __int8 *)(a3 + 2); return a2; } //----- (004C0090) -------------------------------------------------------- int __thiscall sub_4C0090(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax float *v5; // ecx char *v6; // eax v3 = this; if ( *a3 != 12584 ) { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); if ( *a3 == 12593 ) { v5 = (float *)v3[259]; v3[628] = 0; sub_4F31E0(v5); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() ) sub_65F350(dword_AD8EBC, 0.0); } } v6 = dword_AD8EBC; dword_AD8EBC[5472] = 0; *((_DWORD *)v6 + 1369) = 0; return a2; } //----- (004C0120) -------------------------------------------------------- char __thiscall sub_4C0120(_DWORD *this, char a2, __int16 a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-14h] char v8; // [esp+8h] [ebp-10h] __int16 v9; // [esp+9h] [ebp-Fh] int v10; // [esp+Bh] [ebp-Dh] int v11; // [esp+Fh] [ebp-9h] v3 = this; v4 = this[584]; v7 = 12366; sub_905F90(v4, &v7, 2u); v9 = a3; v5 = v3[584]; v8 = a2; v10 = 0; v11 = 0; return sub_906000(v5, &v8, 0xBu); } //----- (004C0190) -------------------------------------------------------- char __thiscall sub_4C0190(_DWORD *this, char a2, int a3, int a4) { _DWORD *v4; // esi int v5; // ecx int v6; // ecx __int16 v8; // [esp+4h] [ebp-14h] char v9; // [esp+8h] [ebp-10h] __int16 v10; // [esp+9h] [ebp-Fh] int v11; // [esp+Bh] [ebp-Dh] int v12; // [esp+Fh] [ebp-9h] v4 = this; v5 = this[584]; v8 = 12366; sub_905F90(v5, &v8, 2u); v10 = -1; v9 = a2; v11 = a3; v6 = v4[584]; v12 = a4; return sub_906000(v6, &v9, 0xBu); } //----- (004C0200) -------------------------------------------------------- char __thiscall sub_4C0200(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12369; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C0250) -------------------------------------------------------- char __thiscall sub_4C0250(_DWORD *this, __int16 a2, int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-Ch] int v8; // [esp+6h] [ebp-Ah] __int16 v9; // [esp+Ch] [ebp-4h] v3 = this; v4 = this[584]; v9 = -23539; sub_905F90(v4, &v9, 2u); v5 = v3[584]; v7 = a2; v8 = a3; return sub_906000(v5, &v7, 6u); } //----- (004C02A0) -------------------------------------------------------- int __stdcall sub_4C02A0(int a1, unsigned __int8 *a2) { _DWORD *v2; // ecx _DWORD *v3; // eax _DWORD *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi _DWORD *v6; // ecx _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax float *v10; // eax float *v11; // eax v2 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v3 = operator new(0x14u); if ( v3 ) v4 = sub_439430(v3); else v4 = 0; v2 = v4; dword_ACB2E4 = (int)v4; } v5 = sub_4394D0(v2, 0); if ( v5 ) goto LABEL_24; v6 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v7 = operator new(0x14u); if ( v7 ) v8 = sub_439430(v7); else v8 = 0; v6 = v8; dword_ACB2E4 = (int)v8; } if ( sub_439620(v6, 0) ) { v9 = sub_470E30(); v5 = sub_4394D0(v9, 0); } v10 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v11 = (float *)operator new(0xB4u); if ( v11 ) v10 = sub_4546A0(v11); else v10 = 0; dword_ACCFE0 = (int)v10; } *((_BYTE *)v10 + 4) = 1; if ( v5 ) LABEL_24: sub_43BA70(v5, *a2); return a1; } // ACB2E4: using guessed type int dword_ACB2E4; // ACCFE0: using guessed type int dword_ACCFE0; //----- (004C03D0) -------------------------------------------------------- char __thiscall sub_4C03D0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 4375; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004C0420) -------------------------------------------------------- int __thiscall sub_4C0420(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax float v5; // ST0C_4 float v6; // ST08_4 float *v7; // eax float v8; // edx double v9; // st7 float v10; // ST0C_4 float v11; // [esp+1Ch] [ebp-24h] float v12; // [esp+20h] [ebp-20h] float v13; // [esp+24h] [ebp-1Ch] int v14; // [esp+28h] [ebp-18h] float v15; // [esp+2Ch] [ebp-14h] float v16; // [esp+30h] [ebp-10h] float v17; // [esp+34h] [ebp-Ch] float v18; // [esp+38h] [ebp-8h] float v19; // [esp+3Ch] [ebp-4h] v3 = this; if ( this[1209] ) { if ( !*(_BYTE *)a3 ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 676))(&v11); sub_6B4D30((float *)v3[1209], flt_ACCFCC, 0.5, 4, 1); result = a2; *((_BYTE *)v3 + 5112) = 0; return result; } if ( *(_BYTE *)a3 == 1 ) { v5 = (double)*(unsigned int *)(a3 + 5); v6 = (double)*(unsigned int *)(a3 + 1); sub_69AD10((float *)byte_ADB468, v6, v5, (int)&v14); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 676))(&v11); v7 = (float *)v3[1209]; v17 = *(float *)&v14 - v11; v18 = v15 - v12; v8 = v18; v9 = v16 - v13; v7[11] = v17; v7[12] = v8; v19 = v9; v7[13] = v19; v10 = (double)*(unsigned __int16 *)(a3 + 11); sub_6B4690((void *)v3[1209], v10, 89.0); *(float *)(v3[1209] + 64) = (double)*(unsigned __int16 *)(a3 + 9); sub_6B4D30((float *)v3[1209], flt_ACCFCC, 0.5, 3, 1); *((_BYTE *)v3 + 5112) = 1; } } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C0590) -------------------------------------------------------- int __thiscall sub_4C0590(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // esi int result; // eax v3 = this; if ( *a3 ) { if ( sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); sub_666040(dword_AD8C90); result = a2; byte_AD8CD8 = 1; return result; } } else if ( sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; sub_4A57D0(v3, 0); } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004C0620) -------------------------------------------------------- char __thiscall sub_4C0620(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[585]; v6 = 22583; sub_905F90(v3, &v6, 2u); v4 = v2[585]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004C0690) -------------------------------------------------------- char __thiscall sub_4C0690(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12371; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C06E0) -------------------------------------------------------- char __thiscall sub_4C06E0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; v3 = this[584]; v6 = 12373; sub_905F90(v3, &v6, 2u); v4 = v2[584]; v7 = a2; return sub_906000(v4, &v7, 1u); } //----- (004C0730) -------------------------------------------------------- char __thiscall sub_4C0730(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12375; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C0780) -------------------------------------------------------- char __thiscall sub_4C0780(_DWORD *this, int *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx int v5; // ecx int v6; // edx int v7; // eax int v8; // ecx __int16 v10; // [esp+4h] [ebp-20h] int v11; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] int v16; // [esp+1Ch] [ebp-8h] v2 = this; v3 = this[584]; v10 = 4388; sub_905F90(v3, &v10, 2u); v4 = *a2; v12 = a2[1]; v5 = a2[3]; v11 = v4; v6 = a2[2]; v14 = v5; v13 = v6; v7 = a2[5]; v8 = v2[584]; v15 = a2[4]; v16 = v7; return sub_906000(v8, &v11, 0x18u); } //----- (004C0800) -------------------------------------------------------- char __thiscall sub_4C0800(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v4 = 4390; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], &v5, 1u); } //----- (004C0840) -------------------------------------------------------- char __thiscall sub_4C0840(_DWORD *this, int *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx int v5; // ecx int v6; // edx int v7; // eax int v8; // ecx __int16 v10; // [esp+4h] [ebp-20h] int v11; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] int v16; // [esp+1Ch] [ebp-8h] v2 = this; v3 = this[584]; v10 = 4392; sub_905F90(v3, &v10, 2u); v4 = *a2; v12 = a2[1]; v5 = a2[3]; v11 = v4; v6 = a2[2]; v14 = v5; v13 = v6; v7 = a2[5]; v8 = v2[584]; v15 = a2[4]; v16 = v7; return sub_906000(v8, &v11, 0x18u); } //----- (004C08C0) -------------------------------------------------------- char __thiscall sub_4C08C0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[584]; v4 = 4394; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], &v5, 1u); } //----- (004C0900) -------------------------------------------------------- char __thiscall sub_4C0900(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[584]; v7 = 4398; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; return sub_906000(v4, &v6, 4u); } //----- (004C0950) -------------------------------------------------------- int __thiscall sub_4C0950(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax const char *v6; // eax v3 = this; if ( *a3 == 13912 ) { if ( dword_AD8EBC ) { if ( dword_AD8EBC != (char *)-776 ) { v4 = *((_DWORD *)dword_AD8EBC + 203); if ( v4 ) { sub_6AF890(&unk_B91250, (int)&a3, "ChargedOff", v4, flt_ACCFCC, 0); return a2; } } } } else { v6 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v6); } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C09C0) -------------------------------------------------------- char __thiscall sub_4C09C0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx __int16 v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[584]; v7 = 12377; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; return sub_906000(v4, &v6, 2u); } //----- (004C0A10) -------------------------------------------------------- int __stdcall sub_4C0A10(int a1, int a2) { int v2; // esi int v3; // edi v2 = dword_ACB230; v3 = *(unsigned __int16 *)(a2 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200) && *(_DWORD *)(*(_DWORD *)(v2 + 196) + 4 * v3) ) { sub_6312A0((unsigned __int8 *)a2); } return a1; } // ACB230: using guessed type int dword_ACB230; //----- (004C0A60) -------------------------------------------------------- char __thiscall sub_4C0A60(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-8h] __int16 v6; // [esp+8h] [ebp-4h] v2 = this; v6 = 29957; v3 = this[585]; v5 = a2; sub_905F90(v3, &v6, 2u); return sub_906000(v2[585], &v5, 2u); } //----- (004C0AB0) -------------------------------------------------------- char __thiscall sub_4C0AB0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[585]; v4 = 29953; sub_905F90(v2, &v4, 2u); return sub_906000(v1[585], 0, 0); } //----- (004C0AF0) -------------------------------------------------------- char __thiscall sub_4C0AF0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v6; // [esp+4h] [ebp-8h] __int16 v7; // [esp+8h] [ebp-4h] v2 = this; v3 = this[584]; v7 = 12391; sub_905F90(v3, &v7, 2u); v4 = v2[584]; v6 = a2; return sub_906000(v4, &v6, 4u); } //----- (004C0B40) -------------------------------------------------------- char __thiscall sub_4C0B40(_DWORD *this, char a2, char a3, char a4) { _DWORD *v4; // esi int v5; // ecx int v6; // ecx char v8; // [esp+4h] [ebp-8h] char v9; // [esp+5h] [ebp-7h] char v10; // [esp+6h] [ebp-6h] __int16 v11; // [esp+8h] [ebp-4h] v4 = this; v5 = this[584]; v11 = 12393; sub_905F90(v5, &v11, 2u); v9 = a2; v8 = a4; v6 = v4[584]; v10 = a3; return sub_906000(v6, &v8, 3u); } //----- (004C0B90) -------------------------------------------------------- char __thiscall sub_4C0B90(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12395; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C0BE0) -------------------------------------------------------- int __thiscall sub_4C0BE0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi signed int v4; // eax const char *v5; // eax _DWORD **v6; // ecx char v8; // [esp+4h] [ebp-4h] v3 = this; v8 = 1; if ( *(_DWORD *)(this[179] + 1480) ) { v4 = *a3; if ( (_WORD)v4 != 12881 ) { v5 = sub_41A850(v4); sub_492060(v3, (int)v5); v8 = 0; } v6 = *(_DWORD ***)(v3[179] + 1480); if ( v6 ) sub_4456A0(v6, v8); sub_534620((_DWORD *)v3[179]); } return a2; } //----- (004C0C50) -------------------------------------------------------- char __thiscall sub_4C0C50(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12397; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C0CA0) -------------------------------------------------------- char __thiscall sub_4C0CA0(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // ecx int v5; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; v4 = this[584]; v7 = 12399; sub_905F90(v4, &v7, 2u); v5 = v3[584]; v8 = a2; v9 = a3; return sub_906000(v5, &v8, 2u); } //----- (004C0CF0) -------------------------------------------------------- char __thiscall sub_4C0CF0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[584]; v4 = -23529; sub_905F90(v2, &v4, 2u); return sub_906000(v1[584], 0, 0); } //----- (004C0D30) -------------------------------------------------------- void __thiscall sub_4C0D30(_DWORD *this) { int v1; // esi int v2; // ecx int v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // ebx float **v5; // edi float *v6; // eax int v7; // ST04_4 int v8; // ST08_4 int v9; // ST0C_4 int v10; // ST10_4 const CHAR *v11; // eax int v12; // eax unsigned __int8 v13; // al int v14; // ecx _DWORD *v15; // ecx _DWORD *v16; // eax int v17; // eax _DWORD *v18; // eax _DWORD *v19; // ecx int v20; // ecx int *v21; // eax int v22; // ecx int v23; // edx int v24; // eax int v25; // eax float v26; // [esp+24h] [ebp-A8h] float v27; // [esp+28h] [ebp-A4h] int v28; // [esp+30h] [ebp-9Ch] __int16 v29; // [esp+34h] [ebp-98h] char v30[4]; // [esp+38h] [ebp-94h] int v31; // [esp+3Ch] [ebp-90h] int v32; // [esp+40h] [ebp-8Ch] char v33; // [esp+44h] [ebp-88h] int v34; // [esp+B8h] [ebp-14h] int v35; // [esp+BCh] [ebp-10h] int v36; // [esp+C0h] [ebp-Ch] char v37; // [esp+C4h] [ebp-8h] v1 = (int)this; v2 = this[584]; if ( v2 ) { v29 = 6147; sub_906000(v2, &v29, 2u); if ( dword_ADB4F8 ) sub_6F3D10(&off_AB7F2C, 35, 10, 0, 0); if ( sub_64FA00(dword_AD8EBC, 289) ) sub_569950(*(_DWORD ***)(v1 + 572), 1); *(_BYTE *)(v1 + 152) = 0; v3 = *sub_49F490(&v28); if ( v28 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } if ( v3 ) { if ( *(_DWORD *)(v3 + 60) == 2 ) { if ( *(_BYTE *)(v3 + 52) ) *(_DWORD *)(v3 + 60) = 3; } else if ( *(_BYTE *)(v3 + 52) ) { *(_BYTE *)(v3 + 52) = 0; v5 = *(float ***)(v1 + 1220); if ( v5 ) { sub_5E9180(*(float ***)(v1 + 1220)); v6 = sub_419EE0((float *)&v34, 0xFFu, 0x90u, 0, 0xFFu); v7 = *(_DWORD *)v6; v8 = *((_DWORD *)v6 + 1); v9 = *((_DWORD *)v6 + 2); v10 = *((_DWORD *)v6 + 3); v11 = sub_40A910(1011971465); sub_5E9030(v5, (int)v11, v7, v8, v9, v10, 0, 3.0); } (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v26); (*(void (__stdcall **)(_DWORD, _DWORD, signed int))(*(_DWORD *)dword_AD8EBC + 236))( LODWORD(v26), LODWORD(v27), 1); } } sub_4E1F20((_DWORD **)v1, byte_B6712C != 7); v12 = *(_DWORD *)(v1 + 1048); if ( v12 ) { if ( *(_DWORD *)(v12 + 496) == 1 ) { v13 = sub_680890((unsigned __int8 *)byte_AD9238); v14 = *(_DWORD *)(v1 + 1048); if ( sub_61D700(v13) ) sub_4A5B30((_DWORD *)v1); } } v15 = *(_DWORD **)(v1 + 1068); if ( v15 ) sub_583BB0(v15); sub_6A9790((int)&unk_B683E8); if ( *(_DWORD *)(v1 + 572) ) { v16 = sub_439D70(byte_ADB468, &v26); *(_DWORD *)v30 = *v16; v31 = v16[1]; v32 = v16[2]; v33 = 0; if ( !strncmp(v30, "KDMine", 6u) ) { v17 = *(_DWORD *)(v1 + 572); if ( v17 ) { v18 = *(_DWORD **)(v17 + 532); if ( v18 ) sub_8F82A0(&unk_BA6B10, v18); } } } if ( *(_DWORD *)(v1 + 980) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 980)); if ( *(_BYTE *)(v1 + 5112) ) { v19 = *(_DWORD **)(v1 + 4836); *(_BYTE *)(v1 + 5112) = 0; if ( v19 ) sub_6B4B70(v19); if ( sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; sub_4A57D0((_DWORD *)v1, 0); } } if ( *(_DWORD *)(v1 + 5108) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 5108)); v20 = *(_DWORD *)(v1 + 572); if ( v20 ) sub_56C880(v20); *(_BYTE *)(v1 + 5100) = 1; v21 = sub_439D70(byte_ADB468, &v26); v22 = *v21; v23 = v21[1]; v24 = v21[2]; v34 = v22; v35 = v23; v36 = v24; v37 = 0; v25 = sub_4A3CB0(3, (const char *)&v34); if ( v25 ) sub_4A8140(v1, v25); } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; // ADB4F8: using guessed type int dword_ADB4F8; // B6712C: using guessed type char byte_B6712C; //----- (004C1090) -------------------------------------------------------- void __thiscall sub_4C1090(int this, int a2, __int16 a3) { _DWORD *v3; // ebx int v4; // eax int v5; // esi int *v6; // eax int v7; // esi int v8; // edi const CHAR *v9; // eax const CHAR *v10; // eax int v11; // ecx int v12; // ecx int v13; // [esp+4h] [ebp-10h] int v14; // [esp+8h] [ebp-Ch] __int16 v15; // [esp+Ch] [ebp-8h] __int16 v16; // [esp+Eh] [ebp-6h] __int16 v17; // [esp+10h] [ebp-4h] v3 = (_DWORD *)this; if ( !*(_DWORD *)(this + 2512) && !*(_BYTE *)(this + 2532) ) { v4 = sub_680BF0((int)byte_AD9238); v5 = dword_ACE8D0; v13 = v4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)a2); if ( *v6 ) { v7 = *v6; if ( *v6 ) { v8 = *(_DWORD *)(v7 + 160); sub_6BFA60((int)&v14, a2); if ( BYTE1(v14) ) v8 -= *(_DWORD *)(v7 + 4 * SBYTE1(v14) + 463); if ( v13 >= v8 ) { if ( sub_680C10((int)byte_AD9238) >= *(_DWORD *)(v7 + 176) ) { if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550(v3, 2); } v11 = v3[584]; v17 = 9280; sub_905F90(v11, &v17, 2u); v15 = a2; v12 = v3[584]; v16 = a3; sub_906000(v12, &v15, 4u); v3[628] = 2; v3[629] = 0; } else { v10 = sub_4090F0(1080038243); sub_492060(v3, (int)v10); } } else { v9 = sub_40C190(711347001); sub_492060(v3, (int)v9); } } } } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (004C1200) -------------------------------------------------------- void __thiscall sub_4C1200(int this, unsigned __int16 a2, int a3, int a4) { bool v4; // zf int v5; // eax int v6; // esi int *v7; // eax int v8; // esi int v9; // edi const CHAR *v10; // eax const CHAR *v11; // eax _DWORD *v12; // esi int v13; // ecx int v14; // [esp+4h] [ebp-20h] int v15; // [esp+8h] [ebp-1Ch] __int16 v16; // [esp+Ch] [ebp-18h] _DWORD *v17; // [esp+10h] [ebp-14h] unsigned __int16 v18; // [esp+14h] [ebp-10h] int v19; // [esp+16h] [ebp-Eh] int v20; // [esp+1Ah] [ebp-Ah] v4 = *(_DWORD *)(this + 2512) == 1; v17 = (_DWORD *)this; if ( v4 && !*(_BYTE *)(this + 2532) ) { v5 = sub_680BF0((int)byte_AD9238); v6 = dword_ACE8D0; v14 = v5; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( a2 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * a2); if ( *v7 ) { v8 = *v7; if ( *v7 ) { v9 = *(_DWORD *)(v8 + 160); sub_6BFA60((int)&v15, a2); if ( BYTE1(v15) ) v9 -= *(_DWORD *)(v8 + 4 * SBYTE1(v15) + 463); if ( v14 >= v9 ) { if ( sub_680C10((int)byte_AD9238) >= *(_DWORD *)(v8 + 176) ) { if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); v12 = v17; sub_4B7550(v17, 2); } else { v12 = v17; } v16 = 9281; sub_905F90(v12[584], &v16, 2u); v20 = a4; v13 = v12[584]; v18 = a2; v19 = a3; sub_906000(v13, &v18, 0xAu); v12[628] = 2; } else { v11 = sub_4090F0(1080038243); sub_492060(v17, (int)v11); } } else { v10 = sub_40C190(711347001); sub_492060(v17, (int)v10); } } } } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (004C1390) -------------------------------------------------------- void __thiscall sub_4C1390(_DWORD *this, char a2) { _DWORD *v2; // esi const CHAR *v3; // eax int v4; // ecx int v5; // ecx __int16 v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = this; if ( sub_672F50(dword_AD8EBC + 776) ) { v3 = sub_40A910(-1057101103); sub_492060(v2, (int)v3); } else { v4 = v2[584]; v6 = 12303; sub_905F90(v4, &v6, 2u); v5 = v2[584]; v7 = a2; sub_906000(v5, &v7, 1u); } } //----- (004C1410) -------------------------------------------------------- void __thiscall sub_4C1410(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi const CHAR *v4; // eax int v5; // ecx int v6; // ecx __int16 v7; // [esp+4h] [ebp-8h] char v8; // [esp+8h] [ebp-4h] char v9; // [esp+9h] [ebp-3h] v3 = this; if ( sub_672F50(dword_AD8EBC + 776) ) { v4 = sub_40A910(-1090968040); sub_492060(v3, (int)v4); } else { v5 = v3[584]; v7 = 12306; sub_905F90(v5, &v7, 2u); v6 = v3[584]; v8 = a2; v9 = a3; sub_906000(v6, &v8, 2u); } } //----- (004C1490) -------------------------------------------------------- void __thiscall sub_4C1490(_DWORD *this, char *a2) { _DWORD *v2; // esi const CHAR *v3; // eax int v4; // ecx __int16 v5; // [esp+Ch] [ebp-1Ch] char v6[4]; // [esp+10h] [ebp-18h] int v7; // [esp+14h] [ebp-14h] int v8; // [esp+18h] [ebp-10h] int v9; // [esp+1Ch] [ebp-Ch] int v10; // [esp+20h] [ebp-8h] v2 = this; if ( byte_AD8CD8 ) { v3 = sub_40C190(31960633); sub_492060(v2, (int)v3); } else { v4 = this[585]; v5 = 14338; sub_905F90(v4, &v5, 2u); v10 = 0; v9 = 0; v8 = 0; v7 = 0; *(_DWORD *)v6 = 0; strncpy(v6, a2, 0x14u); sub_906000(v2[585], v6, 0x14u); } } // AD8CD8: using guessed type char byte_AD8CD8; //----- (004C1540) -------------------------------------------------------- char __thiscall sub_4C1540(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx int v8; // ecx __int16 v10; // [esp+4h] [ebp-1Ch] int v11; // [esp+8h] [ebp-18h] int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] int v15; // [esp+18h] [ebp-8h] v6 = this; v7 = this[585]; v10 = 14340; sub_905F90(v7, &v10, 2u); v13 = a4; v11 = a2; v12 = a3; v8 = v6[585]; v14 = a5; v15 = a6; return sub_906000(v8, &v11, 0x14u); } //----- (004C15B0) -------------------------------------------------------- void __thiscall sub_4C15B0(_DWORD *this) { _DWORD *v1; // esi const CHAR *v2; // eax int v3; // ecx __int16 v4; // [esp+4h] [ebp-4h] v1 = this; if ( dword_B9DCC4 ) { v3 = this[585]; v4 = 14346; sub_906000(v3, &v4, 2u); } else { v2 = sub_40C190(2107436777); sub_492060(v1, (int)v2); } } // B9DCC4: using guessed type int dword_B9DCC4; //----- (004C1600) -------------------------------------------------------- void __thiscall sub_4C1600(_DWORD *this, char *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx const CHAR *v5; // eax __int16 v6; // [esp+4h] [ebp-30h] char v7[4]; // [esp+8h] [ebp-2Ch] int v8; // [esp+Ch] [ebp-28h] int v9; // [esp+10h] [ebp-24h] int v10; // [esp+14h] [ebp-20h] int v11; // [esp+18h] [ebp-1Ch] int v12; // [esp+1Ch] [ebp-18h] int v13; // [esp+20h] [ebp-14h] int v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] int v16; // [esp+2Ch] [ebp-8h] v2 = this; if ( a2 && *a2 && (v11 = 0, v10 = 0, v9 = 0, v8 = 0, *(_DWORD *)v7 = 0, strncpy(v7, a2, 0x14u), sub_6C11C0(&dword_B9DC70, *(int *)v7, v8, v9, v10, v11)) ) { v3 = v2[585]; v6 = 14356; sub_905F90(v3, &v6, 2u); v12 = *(_DWORD *)v7; v14 = v9; v13 = v8; v15 = v10; v4 = v2[585]; v16 = v11; sub_906000(v4, &v12, 0x14u); } else { v5 = sub_40C190(371359901); sub_492060(v2, (int)v5); } } // B9DC70: using guessed type int dword_B9DC70; //----- (004C1700) -------------------------------------------------------- void __thiscall sub_4C1700(_DWORD *this, char *a2) { _DWORD *v2; // esi const CHAR *v3; // eax int v4; // ecx int v5; // ecx __int16 v6; // [esp+4h] [ebp-30h] char v7[4]; // [esp+8h] [ebp-2Ch] int v8; // [esp+Ch] [ebp-28h] int v9; // [esp+10h] [ebp-24h] int v10; // [esp+14h] [ebp-20h] int v11; // [esp+18h] [ebp-1Ch] int v12; // [esp+1Ch] [ebp-18h] int v13; // [esp+20h] [ebp-14h] int v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] int v16; // [esp+2Ch] [ebp-8h] v2 = this; if ( dword_B9DCC4 ) { if ( a2 ) { if ( *a2 ) { v11 = 0; v10 = 0; v9 = 0; v8 = 0; *(_DWORD *)v7 = 0; strncpy(v7, a2, 0x14u); if ( sub_6C11C0(&dword_B9DC70, *(int *)v7, v8, v9, v10, v11) ) { v4 = v2[585]; v6 = 14376; sub_905F90(v4, &v6, 2u); v12 = *(_DWORD *)v7; v14 = v9; v13 = v8; v15 = v10; v5 = v2[585]; v16 = v11; sub_906000(v5, &v12, 0x14u); return; } } } v3 = sub_40C190(1194130603); } else { v3 = sub_40C190(2107436777); } sub_492060(v2, (int)v3); } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (004C1810) -------------------------------------------------------- void __thiscall sub_4C1810(_DWORD *this, int a2) { _DWORD *v2; // esi _BYTE *v3; // ecx const CHAR *v4; // eax int v5; // edx int v6; // eax int v7; // ecx __int16 v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v2 = this; v3 = (_BYTE *)this[185]; if ( v3 && sub_58F2C0(v3) ) { v4 = sub_4090F0(311392081); sub_492060(v2, (int)v4); } else { v5 = *(_DWORD *)(a2 + 8); v6 = *(_DWORD *)a2; v10 = *(_DWORD *)(a2 + 4); v11 = v5; v9 = v6; LOBYTE(v6) = *(_BYTE *)(a2 + 12); v8 = -16381; v7 = v2[585]; v12 = v6; sub_905F90(v7, &v8, 2u); sub_906000(v2[585], &v9, 0xDu); } } //----- (004C18C0) -------------------------------------------------------- char __thiscall sub_4C18C0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // eax int v4; // edx char v5; // cl int v6; // ecx __int16 v8; // [esp+8h] [ebp-18h] char v9[4]; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; v2 = this; strncpy(v9, "Invalid", 0xCu); v3 = *(_DWORD *)(a2 + 8); v4 = *(_DWORD *)(a2 + 4); *(_DWORD *)v9 = *(_DWORD *)a2; v5 = *(_BYTE *)(a2 + 12); v11 = v3; v10 = v4; v12 = v5; v6 = v2[585]; v8 = -16379; sub_905F90(v6, &v8, 2u); return sub_906000(v2[585], v9, 0xDu); } //----- (004C1950) -------------------------------------------------------- char __thiscall sub_4C1950(_DWORD *this, int a2, char a3) { char result; // al _DWORD *v4; // esi char v5; // cl int v6; // edx int v7; // eax int v8; // ecx __int16 v9; // [esp+4h] [ebp-18h] int v10; // [esp+8h] [ebp-14h] int v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] char v13; // [esp+14h] [ebp-8h] char v14; // [esp+15h] [ebp-7h] result = a2; v4 = this; v5 = *(_BYTE *)(a2 + 12); v12 = 0; v11 = 0; v10 = 0; if ( v5 != v13 || *(_DWORD *)a2 || *(_DWORD *)(a2 + 4) || *(_DWORD *)(a2 + 8) ) { v14 = a3; v10 = *(_DWORD *)a2; v6 = *(_DWORD *)(a2 + 4); v7 = *(_DWORD *)(a2 + 8); v13 = v5; v11 = v6; v9 = -16373; v8 = v4[585]; v12 = v7; sub_905F90(v8, &v9, 2u); result = sub_906000(v4[585], &v10, 0xEu); } return result; } //----- (004C19E0) -------------------------------------------------------- char __thiscall sub_4C19E0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // esi char v4; // cl int v5; // edx int v6; // eax int v7; // ecx __int16 v8; // [esp+4h] [ebp-18h] int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] char v12; // [esp+14h] [ebp-8h] result = a2; v3 = this; v4 = *(_BYTE *)(a2 + 12); v11 = 0; v10 = 0; v9 = 0; if ( v4 != v12 || *(_DWORD *)a2 || *(_DWORD *)(a2 + 4) || *(_DWORD *)(a2 + 8) ) { v9 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 4); v6 = *(_DWORD *)(a2 + 8); v12 = v4; v10 = v5; v8 = -16372; v7 = v3[585]; v11 = v6; sub_905F90(v7, &v8, 2u); result = sub_906000(v3[585], &v9, 0xDu); } return result; } //----- (004C1A70) -------------------------------------------------------- void __thiscall sub_4C1A70(_DWORD *this, __int16 a2) { _DWORD *v2; // esi const CHAR *v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx __int16 v7; // [esp+4h] [ebp-8h] __int16 v8; // [esp+8h] [ebp-4h] v2 = this; if ( byte_AD8CD8 ) { v3 = sub_40C190(-237584599); LABEL_6: sub_492060(v2, (int)v3); return; } v4 = this[242]; if ( !v4 || !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4 + 260))() ) { v5 = v2[584]; v8 = 19457; sub_905F90(v5, &v8, 2u); v6 = v2[584]; v7 = a2; sub_906000(v6, &v7, 2u); v3 = sub_40C190(-1847339783); goto LABEL_6; } } // AD8CD8: using guessed type char byte_AD8CD8; //----- (004C1AF0) -------------------------------------------------------- void __thiscall sub_4C1AF0(int this, int a2, int a3, int a4, int a5, int a6) { int v6; // esi int *v7; // eax int v8; // eax int v9; // ecx char *v10; // eax __int16 v11; // [esp+8h] [ebp-48h] int v12; // [esp+Ch] [ebp-44h] int v13; // [esp+10h] [ebp-40h] int v14; // [esp+14h] [ebp-3Ch] int v15; // [esp+18h] [ebp-38h] int v16; // [esp+1Ch] [ebp-34h] int v17; // [esp+20h] [ebp-30h] int v18; // [esp+24h] [ebp-2Ch] int v19; // [esp+28h] [ebp-28h] int v20; // [esp+2Ch] [ebp-24h] int v21; // [esp+30h] [ebp-20h] char v22[4]; // [esp+34h] [ebp-1Ch] int v23; // [esp+38h] [ebp-18h] int v24; // [esp+3Ch] [ebp-14h] int v25; // [esp+40h] [ebp-10h] int v26; // [esp+44h] [ebp-Ch] char v27; // [esp+48h] [ebp-8h] v6 = this; v16 = 0; v15 = 0; v14 = 0; v13 = 0; v12 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; v17 = 0; v7 = (int *)sub_680810(byte_AD9238); v12 = *v7; v13 = v7[1]; v14 = v7[2]; v15 = v7[3]; v8 = v7[4]; v17 = a2; v16 = v8; v20 = a5; v18 = a3; v19 = a4; v9 = *(_DWORD *)(v6 + 2340); v21 = a6; v11 = 21505; sub_905F90(v9, &v11, 2u); sub_906000(*(_DWORD *)(v6 + 2340), &v12, 0x28u); v24 = a4; *(_DWORD *)v22 = a2; v23 = a3; v25 = a5; v26 = a6; v27 = 0; v10 = (char *)sub_4090F0(725894279); sub_4920B0(v6, v10, v22); } //----- (004C1BF0) -------------------------------------------------------- char __thiscall sub_4C1BF0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { _DWORD *v7; // esi int *v8; // eax int v9; // eax int v10; // ecx __int16 v12; // [esp+4h] [ebp-34h] int v13; // [esp+8h] [ebp-30h] int v14; // [esp+Ch] [ebp-2Ch] int v15; // [esp+10h] [ebp-28h] int v16; // [esp+14h] [ebp-24h] int v17; // [esp+18h] [ebp-20h] int v18; // [esp+1Ch] [ebp-1Ch] int v19; // [esp+20h] [ebp-18h] int v20; // [esp+24h] [ebp-14h] int v21; // [esp+28h] [ebp-10h] int v22; // [esp+2Ch] [ebp-Ch] char v23; // [esp+30h] [ebp-8h] v7 = this; v17 = 0; v16 = 0; v15 = 0; v14 = 0; v13 = 0; v22 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; v8 = (int *)sub_680810(byte_AD9238); v13 = *v8; v14 = v8[1]; v15 = v8[2]; v16 = v8[3]; v9 = v8[4]; v18 = a2; v19 = a3; v17 = v9; v21 = a5; v22 = a6; v20 = a4; v12 = 21508; v10 = v7[585]; v23 = a7; sub_905F90(v10, &v12, 2u); return sub_906000(v7[585], &v13, 0x29u); } //----- (004C1CB0) -------------------------------------------------------- char __thiscall sub_4C1CB0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int *v7; // eax int v8; // eax int v9; // ecx __int16 v11; // [esp+4h] [ebp-30h] int v12; // [esp+8h] [ebp-2Ch] int v13; // [esp+Ch] [ebp-28h] int v14; // [esp+10h] [ebp-24h] int v15; // [esp+14h] [ebp-20h] int v16; // [esp+18h] [ebp-1Ch] int v17; // [esp+1Ch] [ebp-18h] int v18; // [esp+20h] [ebp-14h] int v19; // [esp+24h] [ebp-10h] int v20; // [esp+28h] [ebp-Ch] int v21; // [esp+2Ch] [ebp-8h] v6 = this; v16 = 0; v15 = 0; v14 = 0; v13 = 0; v12 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; v17 = 0; v7 = (int *)sub_680810(byte_AD9238); v12 = *v7; v13 = v7[1]; v14 = v7[2]; v15 = v7[3]; v8 = v7[4]; v17 = a2; v16 = v8; v20 = a5; v18 = a3; v19 = a4; v9 = v6[585]; v21 = a6; v11 = 21509; sub_905F90(v9, &v11, 2u); return sub_906000(v6[585], &v12, 0x28u); } //----- (004C1D70) -------------------------------------------------------- int __thiscall sub_4C1D70(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // esi __int16 v4; // cx int v5; // eax const CHAR *v6; // eax v3 = this; v4 = *a3; v5 = v3[186]; if ( v5 ) *(_DWORD *)(v5 + 348) = 0; if ( v4 != 1089 && v4 == 1095 ) { v6 = sub_40A910(372273015); sub_492060(v3, (int)v6); } return a2; } //----- (004C1DD0) -------------------------------------------------------- void __thiscall sub_4C1DD0(int this, char a2) { int v2; // ebx const CHAR *v3; // eax char v4; // al char v5; // dl int v6; // eax _BYTE *v7; // ecx char *v8; // eax int v9; // ecx char v10; // al unsigned int v11; // esi signed int v12; // edi _WORD *v13; // esi int v14; // ecx signed int v15; // esi int v16; // eax int v17; // ecx float *v18; // eax __int16 v19; // [esp+4h] [ebp-40h] unsigned int v20; // [esp+8h] [ebp-3Ch] char v21; // [esp+Fh] [ebp-35h] char v22; // [esp+10h] [ebp-34h] __int16 v23; // [esp+2Ch] [ebp-18h] char v24; // [esp+2Eh] [ebp-16h] char v25; // [esp+30h] [ebp-14h] char v26; // [esp+31h] [ebp-13h] int v27; // [esp+32h] [ebp-12h] int v28; // [esp+36h] [ebp-Eh] __int16 v29; // [esp+3Ah] [ebp-Ah] v2 = this; if ( *(_BYTE *)(this + 42) ) { sub_4E3330((_DWORD *)(this + 36), 0); (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); } if ( *(_DWORD *)(v2 + 112) ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); sub_4DE8F0((float *)v2, 0, 0.0); } if ( sub_662E50((_DWORD *)dword_AD8EBC + 424) ) { v3 = sub_40C190(-1851355186); LABEL_7: sub_492060((_DWORD *)v2, (int)v3); return; } if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { v4 = dword_AD8EBC[1924]; if ( v4 != 4 && v4 != 5 ) { v3 = sub_40C190(-1700752701); goto LABEL_7; } } v5 = dword_AD8EBC[1924]; if ( v5 == 4 ) { v3 = sub_40C190(-1751738414); goto LABEL_7; } v6 = *(_DWORD *)(v2 + 768); if ( v6 && *(_BYTE *)(v6 + 512) ) { v3 = sub_4090F0(-2030499118); goto LABEL_7; } if ( v5 != 5 && !sub_65B9D0(dword_AD8EBC, 100000) ) { v3 = sub_40C190(-638309845); goto LABEL_7; } if ( *(_DWORD *)(v2 + 740) ) { v7 = *(_BYTE **)(v2 + 876); if ( v7 && sub_42C980(v7) ) { v8 = sub_431680(&v25); sub_4C18C0((_DWORD *)v2, (int)v8); } v9 = *(_DWORD *)(v2 + 2336); v19 = 26625; sub_905F90(v9, &v19, 2u); v10 = 0; v11 = 0; v21 = 0; if ( byte_AB0C88 ) { v12 = 512; do { if ( sub_5D5470(*(_DWORD **)(v12 + *(_DWORD *)(v2 + 740))) ) ++v21; ++v11; v12 += 4; } while ( v11 < (unsigned __int8)byte_AB0C88 ); v10 = v21; } v13 = (_WORD *)(*(_DWORD *)(v2 + 740) + 344); qmemcpy(&v22, v13, 0x1Cu); v14 = *(_DWORD *)(v2 + 2336); v23 = v13[14]; v24 = a2 & 1 | 2 * v10; sub_905F90(v14, &v22, 0x1Fu); v20 = 0; if ( byte_AB0C88 ) { v15 = 512; do { if ( sub_5D5470(*(_DWORD **)(v15 + *(_DWORD *)(v2 + 740))) ) { v16 = *(_DWORD *)(v2 + 740); v25 = *(_BYTE *)(*(_DWORD *)(v16 + v15) + 456); if ( (unsigned __int8)v25 > 0xC0u ) return; v26 = v20; v17 = *(_DWORD *)(v16 + v15); v27 = *(_DWORD *)(v17 + 464); v28 = *(_DWORD *)(v17 + 468); if ( !a2 ) v29 = *(_WORD *)(*(_DWORD *)(v16 + v15) + 472); sub_905F90(*(_DWORD *)(v2 + 2336), &v25, 0xCu); } v15 += 4; ++v20; } while ( v20 < (unsigned __int8)byte_AB0C88 ); } sub_906000(*(_DWORD *)(v2 + 2336), 0, 0); v18 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v2, v18); } } // AB0C88: using guessed type char byte_AB0C88; //----- (004C2080) -------------------------------------------------------- int __thiscall sub_4C2080(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax const CHAR *v7; // eax const CHAR *v8; // eax v3 = *a3; v4 = this; if ( (_WORD)v3 == 2625 ) { v5 = sub_40C190(-2102795035); sub_492060(v4, (int)v5); if ( v4[185] ) { sub_4B8C50(v4, word_ACF574); return a2; } } else { switch ( v3 ) { case 2626: v7 = sub_40C190(-1360146718); goto LABEL_29; case 2627: v7 = sub_40C190(-990587926); goto LABEL_29; case 2628: v7 = sub_40C190(-1225862178); goto LABEL_29; case 2629: v7 = sub_40C190(-1174683327); goto LABEL_29; case 2630: v7 = sub_40C190(692132976); goto LABEL_29; case 2631: v7 = sub_40C190(1874234520); goto LABEL_29; case 2632: v7 = sub_40C190(-1140860070); goto LABEL_29; case 2633: v7 = sub_40C190(-906353097); goto LABEL_29; case 2634: v7 = sub_40C190(373625774); goto LABEL_29; case 2635: v7 = sub_40C190(-1443504921); goto LABEL_29; case 2636: v7 = sub_40C190(-29023195); goto LABEL_29; case 2637: v7 = sub_40C190(1638094719); goto LABEL_29; case 2638: v7 = sub_40C190(1618240491); goto LABEL_29; case 2639: v7 = sub_40C190(-954000831); goto LABEL_29; case 2640: v7 = sub_40C190(-924913905); goto LABEL_29; case 2641: v7 = sub_40C190(1837598645); goto LABEL_29; case 2642: v7 = sub_40C190(1552853712); goto LABEL_29; case 2643: v7 = sub_40C190(1894110192); goto LABEL_29; case 2644: v7 = sub_40C190(-1275054031); goto LABEL_29; case 2645: v7 = sub_40C190(-1494079410); goto LABEL_29; case 2649: v7 = sub_40C190(1536324270); goto LABEL_29; case 2650: v7 = sub_40C190(1843836924); goto LABEL_29; case 2660: v8 = sub_40A910(525105808); sub_492060(v4, (int)v8); return a2; default: v7 = sub_40C190(1303411583); LABEL_29: sub_492060(v4, (int)v7); break; } } return a2; } // ACF574: using guessed type __int16 word_ACF574; //----- (004C2260) -------------------------------------------------------- int __userpurge sub_4C2260@(int a1@, int a2@, int a3, unsigned __int16 *a4) { int v4; // ebx int v5; // eax _DWORD *v6; // eax __int16 *v7; // esi const CHAR *v8; // eax int result; // eax const CHAR *v10; // eax char v11; // [esp-24h] [ebp-30h] int v12; // [esp-20h] [ebp-2Ch] int v13; // [esp-1Ch] [ebp-28h] int v14; // [esp-18h] [ebp-24h] int v15; // [esp-14h] [ebp-20h] int v16; // [esp-10h] [ebp-1Ch] int v17; // [esp-Ch] [ebp-18h] int v18; // [esp-4h] [ebp-10h] v4 = a1; *((_WORD *)dword_AD8EBC + 88) = sub_686330(&byte_ADA230); v5 = *a4; if ( (_WORD)v5 == 2625 ) { v6 = (_DWORD *)sub_63DA50(byte_AD8A08, *((_WORD *)dword_AD8EBC + 274)); if ( v6 ) sub_63E080(byte_AD8A08, a2, v6); sub_590390(*(_DWORD *)(v4 + 740), 1); sub_4DE490(1, 5); v7 = (__int16 *)(*(_DWORD *)(v4 + 740) + 344); qmemcpy(&v11, v7, 0x1Cu); sub_650B60(dword_AD8EBC, v11, v12, v13, v14, v15, v16, v17, v7[14], dword_AB0C84 == 1); v8 = sub_40C190(-972825633); sub_492060((_DWORD *)v4, (int)v8); sub_60D6D0(*(void **)(v4 + 768)); result = a3; } else { switch ( v5 ) { case 2626: v18 = -402666947; break; case 2627: v18 = -1398831983; break; case 2628: v18 = -486416046; break; case 2629: v18 = 1971516096; break; case 2630: v18 = 894462606; break; case 2634: v18 = 700027015; break; case 2635: v18 = -2014592036; break; case 2636: v18 = -1816557376; break; case 2637: v18 = -623122149; break; case 2638: v18 = -1057755603; break; case 2639: v18 = -2106740905; break; case 2640: v18 = 1428501545; break; case 2641: v18 = -288375884; break; case 2642: v18 = -551473119; break; case 2643: v18 = -331677142; break; case 2645: v18 = 1637078780; break; case 2649: v18 = 861087124; break; default: v18 = -1482197565; break; } v10 = sub_40C190(v18); sub_492060((_DWORD *)v4, (int)v10); result = a3; } return result; } // AB0C84: using guessed type int dword_AB0C84; // ADA230: using guessed type char byte_ADA230; //----- (004C2440) -------------------------------------------------------- int __thiscall sub_4C2440(int *this, int a2, unsigned __int16 *a3) { int v3; // ebx char *v4; // esi _DWORD *v5; // eax int *v6; // esi char *v7; // eax char v9; // [esp-24h] [ebp-54h] int v10; // [esp-20h] [ebp-50h] int v11; // [esp-1Ch] [ebp-4Ch] int v12; // [esp-18h] [ebp-48h] int v13; // [esp-14h] [ebp-44h] int v14; // [esp-10h] [ebp-40h] int v15; // [esp-Ch] [ebp-3Ch] signed int v16; // [esp-8h] [ebp-38h] signed int v17; // [esp-4h] [ebp-34h] char v18; // [esp+Ch] [ebp-24h] __int16 v19; // [esp+28h] [ebp-8h] __int16 v20; // [esp+2Ah] [ebp-6h] int *v21; // [esp+2Ch] [ebp-4h] v3 = *a3; qmemcpy(&v18, a3 + 1, 0x1Cu); v17 = 18; v16 = 26; v15 = v3; v21 = this; v19 = a3[15]; v4 = sub_4E2910(this, v3, 26, 18); if ( v4 ) { v5 = (_DWORD *)sub_63DA50(byte_AD8A08, v3); if ( v5 ) sub_63E080(byte_AD8A08, (int)&v20, v5); v17 = (unsigned __int8)v4[208]; qmemcpy(&v9, &v18, 0x1Cu); sub_650B60(v4, v9, v10, v11, v12, v13, v14, v15, v19, v17); if ( *((_WORD *)dword_AD8EBC + 274) != (_WORD)v3 ) { v6 = v21; if ( v21[185] ) { if ( (!dword_AB0C84 || dword_AB0C84 == 2) && word_ACF574 == (_WORD)v3 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v21[185] + 260))() ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v6[185]); v7 = (char *)sub_40A910(1032023721); sub_462CA0(1, v7); } } } } return a2; } // AB0C84: using guessed type int dword_AB0C84; // ACF574: using guessed type __int16 word_ACF574; //----- (004C2530) -------------------------------------------------------- int __thiscall sub_4C2530(int *this, int a2, unsigned __int16 *a3) { int v3; // eax int *v4; // ebx char *v5; // esi int v6; // eax int v7; // esi unsigned __int8 v8; // al int v9; // edx int v10; // eax _DWORD *v11; // edi _WORD *v12; // ecx int v13; // eax int v14; // edx int v15; // edx int v16; // edi int v17; // ecx int v18; // ecx int v19; // ebx const CHAR *v20; // eax char v22; // [esp-24h] [ebp-6Ch] int v23; // [esp-20h] [ebp-68h] int v24; // [esp-1Ch] [ebp-64h] int v25; // [esp-18h] [ebp-60h] int v26; // [esp-14h] [ebp-5Ch] int v27; // [esp-10h] [ebp-58h] int v28; // [esp-Ch] [ebp-54h] __int16 v29; // [esp-8h] [ebp-50h] signed int v30; // [esp-4h] [ebp-4Ch] int v31; // [esp+Ch] [ebp-3Ch] int v32; // [esp+10h] [ebp-38h] int v33; // [esp+14h] [ebp-34h] unsigned __int16 *v34; // [esp+18h] [ebp-30h] char *v35; // [esp+1Ch] [ebp-2Ch] unsigned __int8 v36; // [esp+23h] [ebp-25h] int v37; // [esp+24h] [ebp-24h] int v38; // [esp+28h] [ebp-20h] int v39; // [esp+2Ch] [ebp-1Ch] int v40; // [esp+30h] [ebp-18h] int v41; // [esp+34h] [ebp-14h] int v42; // [esp+38h] [ebp-10h] int v43; // [esp+3Ch] [ebp-Ch] __int16 v44; // [esp+40h] [ebp-8h] byte_AB0180 = 1; v3 = *a3; v4 = this; v34 = a3; if ( (_WORD)v3 != 2625 ) { switch ( v3 ) { case 2631: v30 = 710359622; break; case 2632: v30 = 1990232328; break; case 2633: v30 = -2070162203; break; case 2640: v30 = 1738108077; break; case 2644: v30 = 1872881375; break; case 2645: v30 = 1637078780; break; default: v30 = -1223961910; break; } goto LABEL_27; } v5 = sub_4E2910(this, a3[1], 26, 8); v35 = v5; if ( !v5 ) { v30 = -302243239; LABEL_27: v20 = sub_40C190(v30); sub_492060(v4, (int)v20); return a2; } word_ACF574 = a3[1]; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[179] + 260))() ) sub_4A6BA0((_DWORD **)v4); sub_8F82A0(&unk_BA6B10, (_DWORD *)v4[185]); if ( !v5[208] ) { sub_651900((int)v5, (int)a3); v30 = v5[208] == 0; qmemcpy(&v22, v5 + 178, 0x1Eu); v5 = v35; sub_650B60(v35, v22, v23, v24, v25, v26, v27, v28, v29, v30); sub_6518E0((__int16 *)v5); } sub_590CC0((_DWORD **)v4[185], 0); v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; v43 = 0; v44 = 0; dword_ACEC24 = 0; v6 = v4[185]; qmemcpy(&v37, v5 + 178, 0x1Eu); (*(void (__stdcall **)(int *))(**(_DWORD **)(v6 + 496) + 460))(&v37); sub_58F3D0((_WORD **)v4[185]); if ( *((_BYTE *)v34 + 4) ) { v7 = (int)v34 + 5; v33 = 0; do { v8 = *(_BYTE *)v7; v9 = *(_DWORD *)(v7 + 2); HIBYTE(v35) = *(_BYTE *)(v7 + 1); v36 = v8; v10 = *(_DWORD *)(v7 + 6); v31 = v9; v32 = v10; v11 = sub_6876E0((unsigned __int16 *)(v7 + 10)); if ( !v11 ) break; v12 = *(_WORD **)(4 * HIBYTE(v35) + 512 + v4[185]); v35 = (char *)(4 * HIBYTE(v35) + 512); sub_5D5B70(v12, (int)v11, 1); v13 = *(_DWORD *)&v35[v4[185]]; v14 = v31; *(_DWORD *)(v13 + 468) = v32; *(_DWORD *)(v13 + 464) = v14; if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v11 + 16))(v11) > 1 && !(*(int (__thiscall **)(_DWORD *))(*v11 + 12))(v11) ) { sub_5D5B70(*(_WORD **)(v4[185] + 4 * *(unsigned __int8 *)(v7 + 1) + 512), 0, 1); } v15 = *((unsigned __int8 *)v34 + 4); v7 += v36 + 1; ++v33; } while ( v33 < v15 ); v16 = (int)v34; if ( dword_AD8EBC[1924] == 2 ) { sub_443390(dword_AD8EBC, 1); v30 = 2; *(_DWORD *)&v29 = &v35; v17 = v4[584]; LOWORD(v35) = 8200; sub_905F90(v17, &v35, 2u); v18 = v4[584]; v36 = 1; sub_906000(v18, &v36, 1u); } v19 = v4[1276]; if ( v19 ) sub_55F250(v19, *(_WORD *)(v16 + 2)); } return a2; } // AB0180: using guessed type char byte_AB0180; // ACEC24: using guessed type int dword_ACEC24; // ACF574: using guessed type __int16 word_ACF574; //----- (004C2840) -------------------------------------------------------- int __thiscall sub_4C2840(int *this, int a2, unsigned __int16 *a3) { int v3; // eax int *v4; // ebx char *v5; // esi int v6; // eax _WORD *v7; // eax int v8; // edx int v9; // ecx int v10; // edx _DWORD *v11; // eax _DWORD *v12; // edi int v13; // ecx int v14; // esi int v15; // eax int v16; // edx int v17; // ecx int v18; // ecx int v19; // ecx int v20; // ecx int v21; // ebx const CHAR *v22; // eax char v24; // [esp-24h] [ebp-70h] int v25; // [esp-20h] [ebp-6Ch] int v26; // [esp-1Ch] [ebp-68h] int v27; // [esp-18h] [ebp-64h] int v28; // [esp-14h] [ebp-60h] int v29; // [esp-10h] [ebp-5Ch] int v30; // [esp-Ch] [ebp-58h] __int16 v31; // [esp-8h] [ebp-54h] signed int v32; // [esp-4h] [ebp-50h] int v33; // [esp+Ch] [ebp-40h] int v34; // [esp+10h] [ebp-3Ch] int v35; // [esp+14h] [ebp-38h] int v36; // [esp+18h] [ebp-34h] unsigned __int16 *v37; // [esp+1Ch] [ebp-30h] _WORD *i; // [esp+20h] [ebp-2Ch] unsigned __int8 v39; // [esp+27h] [ebp-25h] char v40; // [esp+28h] [ebp-24h] byte_AB0180 = 1; v3 = *a3; v4 = this; v37 = a3; if ( (_WORD)v3 != 2625 ) { switch ( v3 ) { case 2631: v32 = 710359622; break; case 2632: v32 = 1990232328; break; case 2633: v32 = -2070162203; break; case 2640: v32 = 1738108077; break; case 2644: v32 = 1872881375; break; case 2645: v32 = 1637078780; break; default: v32 = -1223961910; break; } goto LABEL_28; } v5 = sub_4E2910(this, a3[1], 26, 9); i = v5; if ( !v5 ) { v32 = -302243239; LABEL_28: v22 = sub_40C190(v32); sub_492060(v4, (int)v22); return a2; } word_ACF574 = a3[1]; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[179] + 260))() ) sub_4A6BA0((_DWORD **)v4); sub_8F82A0(&unk_BA6B10, (_DWORD *)v4[185]); if ( v5[208] ) { sub_651900((int)v5, (int)a3); v32 = v5[208] == 0; qmemcpy(&v24, v5 + 178, 0x1Eu); v5 = (char *)i; sub_650B60(i, v24, v25, v26, v27, v28, v29, v30, v31, v32); sub_6518E0((__int16 *)v5); } sub_590CC0((_DWORD **)v4[185], 2); dword_ACEC24 = 3; v6 = v4[185]; qmemcpy(&v40, v5 + 178, 0x1Eu); (*(void (__stdcall **)(char *))(**(_DWORD **)(v6 + 496) + 460))(&v40); sub_58F3D0((_WORD **)v4[185]); if ( *((_BYTE *)v37 + 4) ) { v7 = v37 + 4; v35 = 0; for ( i = v37 + 4; ; v7 = i ) { v8 = *(_DWORD *)v7; v39 = *((_BYTE *)v7 - 3); v9 = *((_DWORD *)v7 + 1); v33 = v8; v10 = (unsigned __int16)v7[4]; v32 = (unsigned __int16)*(v7 - 1); v34 = v9; v36 = v10; v11 = sub_6899D0(v32); v12 = v11; if ( !v11 ) break; v13 = v4[185]; v32 = 1; v14 = 4 * v39 + 512; sub_5D5B70(*(_WORD **)(v14 + v13), (int)v11, 1); v15 = *(_DWORD *)(v14 + v4[185]); v16 = v34; *(_DWORD *)(v15 + 464) = v33; *(_DWORD *)(v15 + 468) = v16; v17 = *(_DWORD *)(v14 + v4[185]); v32 = (unsigned __int16)v36; *(_WORD *)(v17 + 472) = v36; sub_58F280((_DWORD **)v17, v32); if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v12 + 16))(v12) > 1 && !(_WORD)v36 ) sub_5D5B70(*(_WORD **)(v14 + v4[185]), 0, 1); v18 = *((unsigned __int8 *)v37 + 4); i = (_WORD *)((char *)i + 13); if ( ++v35 >= v18 ) break; } if ( dword_AD8EBC[1924] == 2 ) { sub_443390(dword_AD8EBC, 1); v19 = v4[584]; LOWORD(i) = 8200; sub_905F90(v19, &i, 2u); v32 = 1; *(_DWORD *)&v31 = &v39; v20 = v4[584]; v39 = 1; sub_906000(v20, &v39, 1u); } v21 = v4[1276]; if ( v21 ) sub_55F250(v21, v37[1]); } return a2; } // AB0180: using guessed type char byte_AB0180; // ACEC24: using guessed type int dword_ACEC24; // ACF574: using guessed type __int16 word_ACF574; //----- (004C2B40) -------------------------------------------------------- int __thiscall sub_4C2B40(int *this, int a2, int a3) { int *v3; // ebx const CHAR *v4; // eax char *v5; // edi const CHAR *v6; // eax _DWORD *v7; // eax char v8; // al int v9; // esi unsigned __int8 v10; // al int v11; // edx _DWORD *v12; // eax int v13; // edi int v14; // edi int v15; // eax int v16; // ecx int v17; // ecx int v19; // [esp+8h] [ebp-3Ch] int v20; // [esp+Ch] [ebp-38h] signed int v21; // [esp+14h] [ebp-30h] __int16 v22; // [esp+18h] [ebp-2Ch] unsigned __int8 v23; // [esp+1Fh] [ebp-25h] char v24; // [esp+20h] [ebp-24h] v3 = this; byte_AB0180 = 1; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this[185] + 260))() ) { if ( *(_WORD *)a3 == 2625 ) { v5 = sub_4E2910(v3, *(_WORD *)(a3 + 2), 26, 11); if ( v5 ) { word_ACF574 = *(_WORD *)(a3 + 2); sub_590CC0((_DWORD **)v3[185], 0); v7 = (_DWORD *)v3[185]; qmemcpy(&v24, v5 + 178, 0x1Eu); (*(void (__stdcall **)(char *))(*(_DWORD *)v7[124] + 460))(&v24); sub_58F3D0((_WORD **)v3[185]); v8 = *(_BYTE *)(a3 + 4); if ( v8 ) { v9 = a3 + 5; v21 = 0; if ( v8 ) { do { v10 = *(_BYTE *)v9; v11 = *(_DWORD *)(v9 + 2); HIBYTE(v22) = *(_BYTE *)(v9 + 1); v23 = v10; v19 = v11; v20 = *(_DWORD *)(v9 + 6); v12 = sub_6876E0((unsigned __int16 *)(v9 + 10)); if ( !v12 ) break; v13 = 4 * HIBYTE(v22) + 512; sub_5D5B70(*(_WORD **)(v13 + v3[185]), (int)v12, 1); v14 = *(_DWORD *)(v13 + v3[185]); v15 = v23; *(_DWORD *)(v14 + 464) = v19; v9 += v15 + 1; *(_DWORD *)(v14 + 468) = v20; ++v21; } while ( v21 < *(unsigned __int8 *)(a3 + 4) ); } if ( dword_AD8EBC[1924] == 2 ) { sub_443390(dword_AD8EBC, 1); v16 = v3[584]; v22 = 8200; sub_905F90(v16, &v22, 2u); v17 = v3[584]; v23 = 1; sub_906000(v17, &v23, 1u); } } } else { v6 = sub_40C190(-302243239); sub_492060(v3, (int)v6); } } } else { if ( !(dword_ACEAB0 & 1) ) { dword_ACEAB0 |= 1u; flt_ACEAAC = flt_ACCFCC; } if ( flt_ACEAAC + 1000.0 < flt_ACCFCC ) { flt_ACEAAC = flt_ACCFCC; if ( *(_WORD *)a3 == 2651 ) { v4 = sub_40A910(1032023721); sub_492060(v3, (int)v4); } } } return a2; } // AB0180: using guessed type char byte_AB0180; // ACCFCC: using guessed type float flt_ACCFCC; // ACEAAC: using guessed type float flt_ACEAAC; // ACEAB0: using guessed type int dword_ACEAB0; // ACF574: using guessed type __int16 word_ACF574; //----- (004C2D60) -------------------------------------------------------- int __thiscall sub_4C2D60(int *this, int a2, _WORD *a3) { int *v3; // ebx unsigned __int8 (*v4)(void); // edx const CHAR *v5; // eax char *v6; // esi const CHAR *v7; // eax _DWORD *v8; // eax int v9; // esi int v10; // edi unsigned __int8 v11; // al int v12; // edx unsigned __int16 v13; // cx _DWORD *v14; // eax int v15; // esi int v16; // eax int v17; // ecx int v18; // ecx int v19; // ecx unsigned __int16 v21; // [esp+8h] [ebp-3Ch] int v22; // [esp+Ch] [ebp-38h] int v23; // [esp+10h] [ebp-34h] signed int v24; // [esp+14h] [ebp-30h] _WORD *v25; // [esp+18h] [ebp-2Ch] unsigned __int8 v26; // [esp+1Fh] [ebp-25h] char v27; // [esp+20h] [ebp-24h] v3 = this; byte_AB0180 = 1; v4 = *(unsigned __int8 (**)(void))(*(_DWORD *)this[185] + 260); v25 = a3; if ( v4() ) { if ( *a3 == 2625 ) { v6 = sub_4E2910(v3, a3[1], 26, 12); if ( v6 ) { word_ACF574 = a3[1]; sub_590CC0((_DWORD **)v3[185], 2); v8 = (_DWORD *)v3[185]; qmemcpy(&v27, v6 + 178, 0x1Eu); (*(void (__stdcall **)(char *))(*(_DWORD *)v8[124] + 460))(&v27); sub_58F3D0((_WORD **)v3[185]); v9 = (int)v25; if ( *((_BYTE *)v25 + 4) ) { v24 = 0; v10 = (int)(v25 + 4); do { v11 = *(_BYTE *)(v10 - 3); v12 = *(_DWORD *)(v10 + 4); v22 = *(_DWORD *)v10; v13 = *(_WORD *)(v10 + 8); v26 = *(_BYTE *)(v10 - 3); v23 = v12; v21 = v13; if ( v13 ) { v14 = sub_6899D0(*(_WORD *)(v10 - 2)); if ( !v14 ) break; v15 = 4 * v26 + 512; sub_5D5B70(*(_WORD **)(v15 + v3[185]), (int)v14, 1); v16 = *(_DWORD *)(v15 + v3[185]); *(_DWORD *)(v16 + 464) = v22; *(_DWORD *)(v16 + 468) = v23; v17 = *(_DWORD *)(v15 + v3[185]); *(_WORD *)(v17 + 472) = v21; sub_58F280((_DWORD **)v17, v21); v9 = (int)v25; } else { sub_5D5B70(*(_WORD **)(v3[185] + 4 * v11 + 512), 0, 1); } v10 += 13; ++v24; } while ( v24 < *(unsigned __int8 *)(v9 + 4) ); if ( dword_AD8EBC[1924] == 2 ) { sub_443390(dword_AD8EBC, 1); v18 = v3[584]; LOWORD(v25) = 8200; sub_905F90(v18, &v25, 2u); v19 = v3[584]; v26 = 1; sub_906000(v19, &v26, 1u); } } } else { v7 = sub_40C190(-302243239); sub_492060(v3, (int)v7); } } } else { if ( !(dword_ACEAB8 & 1) ) { dword_ACEAB8 |= 1u; flt_ACEAB4 = flt_ACCFCC; } if ( flt_ACEAB4 + 1000.0 < flt_ACCFCC ) { flt_ACEAB4 = flt_ACCFCC; if ( *a3 == 2651 ) { v5 = sub_40A910(1032023721); sub_492060(v3, (int)v5); } } } return a2; } // AB0180: using guessed type char byte_AB0180; // ACCFCC: using guessed type float flt_ACCFCC; // ACEAB4: using guessed type float flt_ACEAB4; // ACEAB8: using guessed type int dword_ACEAB8; // ACF574: using guessed type __int16 word_ACF574; //----- (004C2FB0) -------------------------------------------------------- int __thiscall sub_4C2FB0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax int result; // eax char *v6; // ecx v3 = this; sub_664AB0(dword_AD8C90, a3[4]); if ( *a3 == 12744 ) { v6 = (char *)v3[1276]; if ( v6 ) sub_5612E0(v6, (int)a3); result = a2; } else { v4 = sub_4090F0(-469032900); sub_492060(v3, (int)v4); result = a2; } return result; } //----- (004C3010) -------------------------------------------------------- int __thiscall sub_4C3010(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // esi _WORD *v4; // ecx const CHAR *v5; // eax v3 = this; v4 = (_WORD *)this[1276]; if ( v4 && sub_55EF20(v4, *a3) ) { sub_55F210((_DWORD *)v3[1276]); v5 = sub_4090F0(1251633071); sub_492060(v3, (int)v5); } return a2; } //----- (004C3060) -------------------------------------------------------- int __thiscall sub_4C3060(_DWORD *this, int a2, unsigned __int8 *a3) { __int16 v3; // ax _DWORD *v4; // edi char *v5; // eax unsigned int v6; // ecx unsigned int v7; // edx int v8; // ecx int v9; // ecx __int16 v10; // ax unsigned __int8 v11; // dl void *v12; // eax unsigned __int8 v13; // dl int v14; // ebx unsigned int v15; // esi unsigned int v16; // eax char *v17; // ecx int v18; // eax int v19; // eax _DWORD *v20; // eax char v22; // bl const CHAR *v23; // eax const CHAR *v24; // eax int v25; // [esp-4h] [ebp-1Ch] unsigned __int8 v26; // [esp+Ch] [ebp-Ch] _DWORD *v27; // [esp+10h] [ebp-8h] int v28; // [esp+14h] [ebp-4h] v3 = *((_WORD *)a3 + 2); v4 = this; v27 = this; if ( v3 != 2561 ) { v22 = 0; if ( v3 != 2563 ) goto LABEL_37; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { v25 = 895035253; } else { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() ) goto LABEL_37; v25 = 1078991129; } v22 = 1; v23 = sub_40C190(v25); sub_492060(v4, (int)v23); LABEL_37: if ( *((_WORD *)a3 + 2) == 2564 ) { v24 = sub_40A910(-1120856242); } else { if ( v22 ) return a2; v24 = sub_40C190(-435175665); } sub_492060(v4, (int)v24); return a2; } v5 = dword_AD8EBC; v6 = 0; if ( *((_DWORD *)dword_AD8EBC + 1007) ) { do { if ( (v5[2 * v6 + 2957] & 0xC0) == -64 ) { v5[2 * v6 + 2957] = v5[2 * v6 + 2957] & 0x3F | 0x80; v5 = dword_AD8EBC; } ++v6; } while ( v6 < *((_DWORD *)v5 + 1007) ); } v7 = 0; if ( *((_DWORD *)v5 + 1013) ) { v8 = 0; do { if ( v5[v8 + 4036] == 3 ) { v5[v8 + 4036] = 2; v5 = dword_AD8EBC; } ++v7; v8 += 6; } while ( v7 < *((_DWORD *)v5 + 1013) ); } *((_DWORD *)v5 + 43) = *a3; v9 = v4[178]; if ( v9 ) { v10 = *((_WORD *)a3 + 1); BYTE1(v28) = a3[1]; v11 = *a3; HIWORD(v28) = v10; LOBYTE(v28) = v11; sub_4F4BA0(v9, (int)&v28); } if ( *a3 != 10 ) { v12 = sub_74CD00(&unk_AD8C08, *a3, a3[1]); v13 = *a3; v14 = (int)v12; v28 = (int)v12; v26 = v13; if ( !v13 ) { dword_AD8EBC[2957] |= 0xC0u; sub_650B90(dword_AD8EBC, 0); sub_650910(dword_AD8EBC, (int)&unk_9BBC95); goto LABEL_25; } v15 = *((_DWORD *)dword_AD8EBC + 1007); v16 = 0; if ( !v15 ) goto LABEL_24; v17 = dword_AD8EBC + 2957; while ( 1 ) { if ( *(v17 - 1) == v13 ) { if ( (*v17 & 0x3F) == a3[1] ) { dword_AD8EBC[2 * v16 + 2957] |= 0xC0u; v14 = v28; sub_650910(dword_AD8EBC, v28); sub_650B90(dword_AD8EBC, 1); LABEL_24: v4 = v27; LABEL_25: if ( v14 ) { v18 = v4[178]; if ( v18 ) (*(void (__stdcall **)(int))(**(_DWORD **)(v18 + 344) + 472))(v14); break; } return a2; } v13 = v26; } ++v16; v17 += 2; if ( v16 >= v15 ) { v14 = v28; goto LABEL_24; } } } v19 = v4[178]; if ( !v19 ) return a2; v20 = *(_DWORD **)(v19 + 564); if ( !v20 ) return a2; sub_4FA410(v20); return a2; } //----- (004C32C0) -------------------------------------------------------- int __thiscall sub_4C32C0(int this, int a2, int a3) { int v3; // esi char *v4; // ecx char *v5; // ecx void *v6; // ST08_4 char *v7; // eax int v8; // esi _DWORD *v9; // ecx v3 = this; dword_AD8EBC[2 * *((_DWORD *)dword_AD8EBC + 1007) + 2956] = *(_BYTE *)a3; v4 = &dword_AD8EBC[2 * *((_DWORD *)dword_AD8EBC + 1007) + 2957]; *v4 ^= (*v4 ^ *(_BYTE *)(a3 + 1)) & 0x3F; v5 = &dword_AD8EBC[2 * *((_DWORD *)dword_AD8EBC + 1007) + 2957]; *v5 = *(_BYTE *)(a3 + 1) ^ (*v5 ^ *(_BYTE *)(a3 + 1)) & 0x3F; v6 = sub_74CD00(&unk_AD8C08, *(_BYTE *)a3, *(_BYTE *)(a3 + 1) & 0x3F); v7 = (char *)sub_40C190(895756154); sub_4920B0(v3, v7, v6); sub_4A8140(v3, 44); ++*((_DWORD *)dword_AD8EBC + 1007); v8 = *(_DWORD *)(v3 + 712); if ( v8 ) { v9 = *(_DWORD **)(v8 + 564); if ( v9 ) sub_4FA410(v9); } return a2; } //----- (004C3390) -------------------------------------------------------- void __thiscall sub_4C3390(_DWORD *this, int a2) { _DWORD *v2; // edi const CHAR *v3; // eax int v4; // esi int v5; // ecx bool v6; // zf int *v7; // [esp-Ch] [ebp-10h] size_t v8; // [esp-8h] [ebp-Ch] v2 = this; if ( dword_ADB4F8 ) { v3 = sub_40C190(-2097885992); sub_492060(v2, (int)v3); } else { v4 = a2; v5 = this[584]; v6 = *(_DWORD *)(a2 + 4) == 0; LOWORD(a2) = (*(_WORD *)a2 << 10) | *(_WORD *)(a2 + 2) & 0x3FF; v8 = 2; v7 = &a2; if ( !v6 ) { sub_905F90(v5, &a2, 2u); v8 = *(_DWORD *)(v4 + 8); v5 = v2[584]; v7 = *(int **)(v4 + 4); } sub_906000(v5, v7, v8); } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004C3410) -------------------------------------------------------- int __thiscall sub_4C3410(void *this, int a2, _WORD *a3) { void *v3; // esi int result; // eax char *v5; // eax v3 = this; if ( *a3 == 1667 ) { result = a2; byte_B68508 = 1; } else { if ( *a3 == 1675 ) { v5 = (char *)sub_40C190(-808578239); sub_462C30(1, v5); sub_6F3C20(&off_AB7F2C); sub_8EF040(v3, dword_ACDD50, 0); } result = a2; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; // B68508: using guessed type char byte_B68508; //----- (004C3480) -------------------------------------------------------- int __thiscall sub_4C3480(void *this, int a2, int a3) { int v3; // esi double v4; // st7 int v5; // eax const CHAR *v6; // eax v3 = (int)this; OutputDebugStringA("CHAR_DEAD_MENU_OPEN!!!!\n"); sub_597500(*(float **)(v3 + 960), *(_BYTE *)a3); sub_5974D0(*(float **)(v3 + 960), flt_ACCFCC); sub_5959B0(*(float **)(v3 + 956), *(_DWORD *)a3 / 0x3Cu); v4 = flt_ACCFCC; sub_5959D0(*(float **)(v3 + 956), flt_ACCFCC); sub_597580(*(_BYTE **)(v3 + 960), *(_BYTE *)(a3 + 4)); sub_64F980(dword_AD8EBC, 0); sub_5975F0(*(char **)(v3 + 960), 0, 1); v5 = sub_5346B0(*(char **)(v3 + 716), 3, 1); sub_598170(*(char **)(v3 + 960), v5); sub_537470(*(char **)(v3 + 716)); sub_537800(*(_DWORD **)(v3 + 716)); if ( *(_DWORD *)(a3 + 5) == 1 ) sub_4A5DF0((_DWORD *)v3, 1); else sub_4A5DC0((_DWORD *)v3, 1); *(_DWORD *)(v3 + 2512) = 0; sub_4A8140(v3, 42); if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 9 ) { v6 = sub_40A910(-715773374); sub_492060((_DWORD *)v3, (int)v6); } if ( sub_4E37C0((_DWORD *)v3, v4) == 1 ) sub_4AA750((_DWORD *)v3, v4, 0, 0, 0, 0, 0); return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C35D0) -------------------------------------------------------- int __thiscall sub_4C35D0(_DWORD ***this, int a2, unsigned __int16 *a3) { _DWORD ***v3; // edi _DWORD *v4; // eax int v5; // edi int v6; // ebx int *v7; // eax int v8; // eax char *v9; // edi float *v10; // eax _DWORD *v11; // eax char *v12; // eax _DWORD **v13; // eax int *v15; // [esp+1Ch] [ebp-4h] v3 = this; v15 = (int *)this; sub_6668A0(dword_AD8C90, a3); sub_56F350(v3[143], (__int16 *)a3); v4 = (_DWORD *)sub_6807B0(byte_AD9238); if ( *(_BYTE *)(sub_4316B0(v4) + 58) == 1 ) sub_5696C0(v3[143], (__int16 *)a3); v5 = dword_ACDA48; v6 = *(unsigned __int16 *)((char *)a3 + 3); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v7 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v6); if ( *v7 ) { v8 = *v7; if ( v8 ) { if ( !*(_BYTE *)(v8 + 82) ) { v9 = sub_4E2910(v15, *a3, 7, 8); if ( v9 ) { v10 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 196))(v9); if ( sub_67C450(dword_AD8EBC, v10) ) { v11 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 196))(v9); sub_6AF370( &unk_B91250, "Regen", *v11, v11[1], v11[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } } } } } } } if ( *((_BYTE *)a3 + 157) != 2 ) sub_56F920((_DWORD *)v15[143], *a3); v12 = sub_664AB0(dword_AD8C90, *a3); if ( v12 ) { v13 = (_DWORD **)*((_DWORD *)v12 + 175); if ( v13 ) sub_85BED0(v13, 0.0, 1); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; // ACDA48: using guessed type int dword_ACDA48; //----- (004C3750) -------------------------------------------------------- int __thiscall sub_4C3750(int **this, int a2, unsigned __int8 *a3) { int **v3; // edi __int16 *v4; // esi int v5; // edi char *v6; // eax _DWORD **v7; // eax v3 = this; sub_666B00(dword_AD8C90, a3); sub_56FC90(v3[143], a3); if ( *a3 ) { v4 = (__int16 *)(a3 + 1); v5 = *a3; do { v6 = sub_664AB0(dword_AD8C90, *v4); if ( v6 ) { v7 = (_DWORD **)*((_DWORD *)v6 + 175); if ( v7 ) sub_85BED0(v7, 0.0, 1); } v4 = (__int16 *)((char *)v4 + 159); --v5; } while ( v5 ); } return a2; } //----- (004C37C0) -------------------------------------------------------- int __thiscall sub_4C37C0(char **this, int a2, unsigned __int8 *a3) { char **v3; // edi char *v4; // ebx int v5; // ecx int v6; // edx int v7; // eax char *v8; // eax int v9; // ecx int v10; // edx int v11; // eax char *v12; // eax int v13; // eax int v14; // ecx bool v15; // zf int v16; // edx int v17; // eax int v18; // ecx int v19; // eax char *v20; // ecx int v22; // [esp+Ch] [ebp-BCh] char v23[132]; // [esp+10h] [ebp-B8h] int v24; // [esp+94h] [ebp-34h] int v25; // [esp+98h] [ebp-30h] int v26; // [esp+9Ch] [ebp-2Ch] int v27; // [esp+A0h] [ebp-28h] int v28; // [esp+A4h] [ebp-24h] char v29; // [esp+A8h] [ebp-20h] int v30; // [esp+ACh] [ebp-1Ch] int v31; // [esp+B0h] [ebp-18h] int v32; // [esp+B4h] [ebp-14h] int v33; // [esp+B8h] [ebp-10h] int v34; // [esp+BCh] [ebp-Ch] char v35; // [esp+C0h] [ebp-8h] v3 = this; if ( (signed int)*a3 > 0 ) { v4 = (char *)&a3[a3[22] + 23]; v22 = *a3; do { sub_492730((_DWORD ***)v3, 8, v4); v4 += 103; --v22; } while ( v22 ); } v5 = *(_DWORD *)(a3 + 9); v6 = *(_DWORD *)(a3 + 1); v31 = *(_DWORD *)(a3 + 5); v7 = *(_DWORD *)(a3 + 17); v32 = v5; v34 = v7; v8 = v3[228]; v30 = v6; v33 = *(_DWORD *)(a3 + 13); if ( !sub_74DA80((_DWORD *)v8 + 90, &v30) ) goto LABEL_17; v9 = *(_DWORD *)(a3 + 9); v10 = *(_DWORD *)(a3 + 1); v31 = *(_DWORD *)(a3 + 5); v11 = *(_DWORD *)(a3 + 17); v32 = v9; v34 = v11; v12 = v3[228]; v30 = v10; v33 = *(_DWORD *)(a3 + 13); v13 = sub_74DA80((_DWORD *)v12 + 90, &v30); if ( v13 ) { if ( *(_BYTE *)(v13 + 20) == 1 ) { LABEL_17: if ( a3[22] > 0x80u ) a3[22] = -128; strncpy(v23, (const char *)a3 + 23, a3[22]); v14 = *(_DWORD *)(a3 + 1); v15 = (a3[21] & 1) == 0; v23[a3[22]] = 0; if ( v15 ) sub_492D20( v3, v14, *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17), (int)v23); else sub_492FC0( v3, v14, *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD *)(a3 + 13), *(_DWORD *)(a3 + 17), (int)v23); sub_4BABA0( v3, *(_DWORD **)(a3 + 1), *(_DWORD *)(a3 + 5), *(_DWORD *)(a3 + 9), *(_DWORD **)(a3 + 13), *(_DWORD *)(a3 + 17)); v25 = dword_ACEB10; v26 = dword_ACEB14; v24 = *(_DWORD *)dword_ACEB0C; v28 = dword_ACEB1C; v27 = dword_ACEB18; v29 = 0; sub_4949F0(v3 + 640, &v24); if ( !sub_604730((_DWORD **)v3[176]) ) { v16 = *(_DWORD *)(a3 + 9); v17 = *(_DWORD *)(a3 + 1); v31 = *(_DWORD *)(a3 + 5); v18 = *(_DWORD *)(a3 + 17); v32 = v16; v30 = v17; v19 = *(_DWORD *)(a3 + 13); v34 = v18; v20 = v3[176]; v33 = v19; v35 = 0; sub_604750((_DWORD **)v20); } } } return a2; } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // 4C37C0: using guessed type char var_B8[132]; //----- (004C39E0) -------------------------------------------------------- int __thiscall sub_4C39E0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v6; // eax v3 = this; switch ( *a3 ) { case 0xF69: v6 = sub_40C190(1287158389); goto LABEL_7; case 0xF6A: v6 = sub_40C190(-1950122029); LABEL_7: sub_492060(v3, (int)v6); return a2; case 0xF6C: v4 = sub_40A910(-1056252640); sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004C3A40) -------------------------------------------------------- int __thiscall sub_4C3A40(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 != 1984 ) { if ( *a3 == 1985 ) v4 = sub_40C190(-1560227629); else v4 = sub_40C190(-2002217335); sub_492060(v3, (int)v4); } return a2; } //----- (004C3A90) -------------------------------------------------------- int __thiscall sub_4C3A90(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 != 3371 ) { if ( *a3 == 3372 ) v4 = sub_40C190(1988193177); else v4 = sub_40C190(-757129437); sub_492060(v3, (int)v4); } return a2; } //----- (004C3AE0) -------------------------------------------------------- int __thiscall sub_4C3AE0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax v3 = *a3; v4 = this; if ( (_WORD)v3 != 6136 ) { switch ( v3 ) { case 6137: case 6138: v5 = sub_40C190(-1293162460); goto LABEL_6; case 6139: v5 = sub_40C190(-822552364); goto LABEL_6; case 6140: v5 = sub_40C190(946227955); LABEL_6: sub_492060(v4, (int)v5); break; default: return a2; } } return a2; } //----- (004C3B50) -------------------------------------------------------- int __thiscall sub_4C3B50(int this, int a2, unsigned __int16 *a3) { float *v3; // esi int result; // eax const CHAR *v5; // eax const CHAR *v6; // eax v3 = (float *)this; switch ( *a3 ) { case 0xA81u: if ( *(_BYTE *)(this + 42) ) sub_4E3330((_DWORD *)(this + 36), 0); sub_4DE8F0(v3, 0, 0.0); *((_WORD *)dword_AD8EBC + 88) = sub_686330(&byte_ADA230); sub_4DE490(1, 4); result = a2; break; case 0xA83u: sub_443390(dword_AD8EBC, 1); v5 = sub_40C190(995632280); sub_492060(v3, (int)v5); result = a2; break; case 0xA86u: sub_443390(dword_AD8EBC, 1); v6 = sub_40A910(2019588285); sub_492060(v3, (int)v6); result = a2; break; default: sub_443390(dword_AD8EBC, 1); result = a2; break; } return result; } // ADA230: using guessed type char byte_ADA230; //----- (004C3C40) -------------------------------------------------------- int __thiscall sub_4C3C40(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi _DWORD *v4; // eax const CHAR *v5; // eax v3 = this; if ( dword_AD8EBC ) { sub_65DD20(dword_AD8EBC, *a3); sub_443390(dword_AD8EBC, 6); v4 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370(&unk_B91250, "Pet_St01", *v4, v4[1], v4[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } sub_4A6920(); sub_4A9FF0(v3, *a3); v5 = sub_40C190(1128801657); sub_492060(v3, (int)v5); return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C3D00) -------------------------------------------------------- int __thiscall sub_4C3D00(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi _DWORD *v4; // ecx const CHAR *v5; // eax v3 = this; v4 = (_DWORD *)this[285]; if ( v4 ) sub_599FD0(v4, (unsigned __int16)*a3); if ( !*a3 ) { sub_4A69A0(); v5 = sub_40C190(-2119901726); sub_492060(v3, (int)v5); } return a2; } //----- (004C3D50) -------------------------------------------------------- signed int __userpurge sub_4C3D50@(int a1@, signed int a2, unsigned int *a3) { signed int result; // eax int v4; // edx float v5; // ST04_4 float v6; // ST00_4 float v7; // ST08_4 float v8; // ST04_4 int v9; // [esp+10h] [ebp-Ch] int v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] result = a2; if ( a2 == 8 ) { v4 = *((_DWORD *)dword_AD8EBC + 8); if ( v4 > 0 ) goto LABEL_15; if ( *((_DWORD *)dword_AD8EBC + 11) <= 0 ) return result; if ( v4 > 0 ) { LABEL_15: if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); } v5 = (double)a3[1]; v6 = (double)*a3; if ( sub_69AD10((float *)byte_ADB468, v6, v5, (int)&v9) ) { v7 = (double)a3[1]; v8 = (double)*a3; if ( !sub_699590(byte_ADB468, v8, v7) ) { if ( (*(int (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 224))(a1) != 1 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 228))(1); *(_WORD *)(dword_B67118 + 28) |= 1u; (*(void (__stdcall **)(int, int, int))(*(_DWORD *)dword_AD8EBC + 244))(v9, v10, v11); (*(void (__cdecl **)(int *, _DWORD, float *, signed int))(*(_DWORD *)dword_AD8EBC + 232))( &v9, 0, &flt_AB399C, 1); } } result = 8; } return result; } // 4C3D50: could not find valid save-restore pair for esi // AB399C: using guessed type float flt_AB399C; // B67118: using guessed type int dword_B67118; //----- (004C3E80) -------------------------------------------------------- int __stdcall sub_4C3E80(int a1, unsigned int *a2) { float v2; // ST08_4 float v3; // ST04_4 int v5; // [esp+10h] [ebp-Ch] if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 224))() ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 228))(0); v2 = (double)a2[1]; v3 = (double)*a2; sub_69AD10((float *)byte_ADB468, v3, v2, (int)&v5); *(_WORD *)(dword_B67118 + 28) |= 1u; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 244))(); (*(void (__stdcall **)(int *, _DWORD, float *, signed int))(*(_DWORD *)dword_AD8EBC + 232))(&v5, 0, &flt_AB399C, 1); return a1; } // AB399C: using guessed type float flt_AB399C; // B67118: using guessed type int dword_B67118; //----- (004C3F30) -------------------------------------------------------- int __thiscall sub_4C3F30(void *this, int a2, unsigned __int8 *a3) { int v3; // edi _DWORD *v4; // eax unsigned __int8 *v5; // ebx bool v6; // zf int *v7; // eax int v8; // eax unsigned int v9; // eax int v10; // eax int v11; // esi unsigned int v12; // ST20_4 int v13; // eax int v14; // ecx void *v15; // eax char *v16; // ecx int v17; // esi void (__thiscall ***v18)(void *, signed int); // ebx float **v19; // esi float *v20; // eax int v21; // ST0C_4 int v22; // ST10_4 int v23; // ST14_4 int v24; // ST18_4 const CHAR *v25; // eax _BYTE *v26; // ecx const CHAR *v27; // eax int v28; // eax int v30; // [esp+24h] [ebp-30h] int v31; // [esp+34h] [ebp-20h] char v32; // [esp+38h] [ebp-1Ch] int v33; // [esp+3Ch] [ebp-18h] void *v34; // [esp+40h] [ebp-14h] char v35; // [esp+47h] [ebp-Dh] int v36; // [esp+50h] [ebp-4h] v3 = (int)this; v4 = operator new(0xFCu); v34 = v4; v5 = a3; v36 = 0; if ( v4 ) sub_62EC30(v4, v3, a3); v6 = *a3 == 120; v36 = -1; if ( v6 && (sub_652070(dword_AD8EBC) == 4 || sub_652070(dword_AD8EBC) == 5 || sub_652070(dword_AD8EBC) == 9 || sub_652070(dword_AD8EBC) == 10 || sub_652070(dword_AD8EBC) == 14 || sub_652070(dword_AD8EBC) == 15 || sub_652070(dword_AD8EBC) == 19 || sub_652070(dword_AD8EBC) == 20 || sub_652070(dword_AD8EBC) == 24 || sub_652070(dword_AD8EBC) == 25 || sub_652070(dword_AD8EBC) == 27) ) { v7 = (int *)sub_6AB1D0(&unk_B91250, *((_WORD *)dword_AD8EBC + 274)); if ( v7 ) sub_6ACDF0(&unk_B91250, v7); if ( sub_6AF8E0(&unk_B91250, (int)&v31, "Aura120", (int)dword_AD8EBC, 1, flt_ACCFCC, 1, 1, 0, 1) == 1 ) { v8 = sub_6AB1D0(&unk_B91250, *((_WORD *)dword_AD8EBC + 274)); if ( v8 ) { if ( *(_WORD *)(dword_AD8EBC + 977) != -1 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 84))(v8, 0); } } } sub_6808A0(byte_AD9238, *a3); if ( sub_686650(&byte_ADA230, &v33) ) { v9 = v33 & 0x3FF; if ( v9 < 0xC0 ) { v10 = dword_ADA234[v9]; if ( v10 ) { v11 = *(_DWORD *)(v10 + 112); if ( v11 ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v3 + 1264) + 260))() ) sub_4A53B0((_DWORD *)v3); v12 = *(_DWORD *)(v11 + 127); v13 = sub_680890((unsigned __int8 *)byte_AD9238); sub_574DB0(*(_DWORD **)(v3 + 1264), v13, v12); sub_4A7240((void *)v3); LOWORD(v34) = 16421; v14 = *(_DWORD *)(v3 + 2336); v35 = 1; sub_905F90(v14, &v34, 2u); sub_906000(*(_DWORD *)(v3 + 2336), &v35, 1u); } } } } v15 = sub_6CD770(); if ( !(*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v15 + 4))(v15, *a3) ) byte_AB7288 = 1; v16 = *(char **)(v3 + 1048); if ( v16 && sub_61DB70(v16, *a3) ) { sub_6ADD80(&unk_B91250, dword_AD8EBC, flt_ACCFCC); *(_DWORD *)(*(_DWORD *)(v3 + 1048) + 496) = 1; } if ( !sub_6F3100(35) && sub_680890((unsigned __int8 *)byte_AD9238) == 61 ) { v17 = *sub_49F490(&v34); if ( v34 ) { v18 = (void (__thiscall ***)(void *, signed int))v34; if ( !InterlockedDecrement((volatile LONG *)v34 + 1) && v18 ) (**v18)(v18, 1); v5 = a3; } if ( v17 ) { if ( *(_BYTE *)(v17 + 52) ) { *(_BYTE *)(v17 + 52) = 0; v19 = *(float ***)(v3 + 1220); if ( v19 ) { sub_5E9180(*(float ***)(v3 + 1220)); v20 = sub_419EE0((float *)&v30, 0xFFu, 0x90u, 0, 0xFFu); v21 = *(_DWORD *)v20; v22 = *((_DWORD *)v20 + 1); v23 = *((_DWORD *)v20 + 2); v24 = *((_DWORD *)v20 + 3); v25 = sub_40A910(1011971465); sub_5E9030(v19, (int)v25, v21, v22, v23, v24, 0, 3.0); } } } } v26 = *(_BYTE **)(v3 + 776); if ( v26 ) sub_6298F0(v26, *v5); if ( *(_DWORD *)(v3 + 1148) && *v5 == 20 ) { v27 = sub_40C190(1806421701); sub_5DE410(*(_DWORD ***)(v3 + 1148), (int)v27); } _itoa(*v5, &v32, 10); v28 = sub_4A3CB0(2, &v32); if ( v28 ) sub_4A8140(v3, v28); return a2; } // AB7288: using guessed type char byte_AB7288; // ACCFCC: using guessed type float flt_ACCFCC; // ADA230: using guessed type char byte_ADA230; //----- (004C4330) -------------------------------------------------------- int __thiscall sub_4C4330(_DWORD *this, int a2, unsigned int *a3) { unsigned int v3; // ST08_4 _DWORD *v4; // edi const char *v5; // eax char v7; // [esp+8h] [ebp-104h] v3 = *a3; v4 = this; v5 = sub_40C190(-1425804056); sprintf(&v7, v5, v3); sub_492060(v4, (int)&v7); sub_680900((int)byte_AD9238, *a3); return a2; } //----- (004C43A0) -------------------------------------------------------- int __thiscall sub_4C43A0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi float *v4; // ecx const CHAR *v5; // eax int result; // eax v3 = this; v4 = (float *)this[259]; v3[628] = 0; sub_4F31E0(v4); OutputDebugStringA("On_NC_BAT_SKILLBASH_CAST_FAIL_ACK\n"); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() ) sub_65F350(dword_AD8EBC, 0.0); switch ( *a3 ) { case 0xFC0: v5 = sub_40C190(389548321); break; case 0xFC1: v5 = sub_40C190(630474109); break; case 0xFC2: v5 = sub_40C190(629886075); break; case 0xFC3: v5 = sub_40C190(591201640); break; case 0xFC4: v5 = sub_40C190(-850589155); break; case 0xFC5: v5 = sub_40C190(474745207); break; case 0xFC6: v5 = sub_40C190(507315571); break; case 0xFC7: v5 = sub_40C190(-907426088); break; case 0xFC8: v5 = sub_40C190(-722093020); break; case 0xFC9: v5 = sub_40C190(-2064074280); break; case 0xFCA: v5 = sub_40C190(-850853584); break; case 0xFCB: v5 = sub_40C190(662462590); break; case 0xFCC: v5 = sub_40C190(2130554840); break; case 0xFCD: v5 = sub_40C190(-705035220); break; case 0xFCE: v5 = sub_40C190(-789381623); break; case 0xFCF: v5 = sub_40C190(-2102609221); break; case 0xFD0: v5 = sub_40A910(-816975562); break; case 0xFD4: v5 = sub_40A910(189478006); break; case 0xFD7: v5 = sub_40A910(-799135188); break; case 0xFD8: v5 = sub_40A910(240524161); break; case 0xFD9: v5 = sub_40C190(-371122133); break; default: v5 = sub_40C190(-396479446); break; } sub_492060(v3, (int)v5); result = a2; if ( *a3 == 4048 ) dword_AD8EBC[4112] = 1; return result; } //----- (004C4560) -------------------------------------------------------- int __thiscall sub_4C4560(void *this, int a2, unsigned __int16 *a3) { unsigned __int16 *v3; // esi int v4; // edi _DWORD *v5; // eax int v6; // ebx __int16 v7; // ax unsigned int v8; // ebx int v9; // ebx int *v10; // eax int v11; // ecx int v12; // ebx int v13; // eax unsigned __int16 v14; // dx unsigned int v15; // eax unsigned int v16; // ecx int v17; // ebx int v18; // eax unsigned int v19; // eax int v20; // ebx unsigned __int16 v21; // ax int *v22; // eax int v23; // ebx __int16 v24; // ST08_2 int v25; // eax int v26; // eax int v27; // ebx _DWORD *v28; // ecx _DWORD *v29; // eax _DWORD *v30; // eax char *v31; // eax int v32; // eax int v33; // ebx int v34; // eax int v35; // ebx int v36; // ebx int v37; // ecx int v38; // ecx int v39; // ecx unsigned int v40; // eax char v42; // [esp+Ch] [ebp-10h] int v43; // [esp+10h] [ebp-Ch] int v44; // [esp+14h] [ebp-8h] int v45; // [esp+18h] [ebp-4h] int v46; // [esp+28h] [ebp+Ch] _DWORD **v47; // [esp+28h] [ebp+Ch] v3 = a3; v4 = (int)this; v5 = sub_686B80(a3 + 2, (int *)&v42); v6 = a3[1]; v46 = (int)v5; v7 = (unsigned __int16)v6 >> 10; if ( (unsigned __int16)v6 >> 10 == 9 ) { v8 = v6 & 0x3FF; if ( v8 < 0xC0 ) { v9 = dword_ADA234[v8]; if ( v9 ) { v10 = (int *)sub_6CD770(); v11 = *(unsigned __int16 *)(v9 + 8); v12 = *v10; v44 = v11; v45 = (int)v10; v13 = sub_6854B0(&byte_ADA230, v11); (*(void (__thiscall **)(int, int, int))(v12 + 16))(v45, v44, v13); } } v14 = v3[1]; v15 = v3[1] & 0x3FF; if ( v15 < 0xC0 ) v45 = dword_ADA234[v15]; else v45 = 0; v16 = *v3 & 0x3FF; if ( v16 < 0xC0 ) v17 = dword_ADA234[v16]; else v17 = 0; if ( !((v14 ^ *v3) & 0x3FF) ) goto LABEL_112; v18 = *(_DWORD *)(v4 + 4828); if ( !v18 ) { if ( v45 ) { if ( v17 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v45 + 4))() == 24 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v17 + 4))(v17) == 24 ) { *(_DWORD *)(v4 + 4828) = 1; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 0); goto LABEL_25; } if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v45 + 4))() != 24 ) { *(_DWORD *)(v4 + 4828) = 3; sub_4E1E00((char **)v4, *v3 & 0x3FF); goto LABEL_25; } } *(_DWORD *)(v4 + 4828) = 2; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); sub_4E1E00((char **)v4, *v3 & 0x3FF); } LABEL_25: v19 = v3[1]; v20 = v46; if ( *(_BYTE *)(*(_DWORD *)(v4 + 612) + 390) ) *(_BYTE *)(v4 + 144) = sub_5337F0(*(_DWORD **)(v4 + 716), v19 >> 10, v46, v19 & 0x3FF); else sub_5337F0(*(_DWORD **)(v4 + 716), v19 >> 10, v46, v19 & 0x3FF); sub_685E60(&byte_ADA230, (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); v21 = v3[1]; if ( !((v21 ^ *v3) & 0x3FF) && v21 == *v3 && v46 ) { v22 = (int *)sub_6CD770(); v23 = *v22; v24 = *(_WORD *)(v46 + 8); v44 = *(unsigned __int16 *)(v46 + 8); v45 = (int)v22; v25 = sub_6854B0(&byte_ADA230, v24); (*(void (__thiscall **)(int, int, int))(v23 + 12))(v45, v44, v25); v20 = v46; } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 36))() && sub_8F3540(*(_DWORD **)(v4 + 960)) ) { v26 = sub_5346B0(*(char **)(v4 + 716), 3, 1); sub_598170(*(char **)(v4 + 960), v26); } *(float *)(*(_DWORD *)(v4 + 860) + 744) = 0.0; sub_4F4560(*(_DWORD *)(v4 + 1024)); sub_593A20((unsigned __int16 *)dword_B9DE60); if ( v20 ) { v27 = *(_DWORD *)(v20 + 112); if ( v27 ) { if ( !((v3[1] ^ *v3) & 0x3FF) ) { switch ( *(_DWORD *)(v27 + 102) ) { case 4: case 5: case 6: case 7: case 8: sub_4A8140(v4, 131); break; case 0xA: if ( *(_DWORD *)(v27 + 110) != 25 ) sub_4A8140(v4, 132); break; case 0xE: sub_4A8140(v4, 150); break; case 0x10: sub_4A8140(v4, 158); break; case 0x12: sub_4A8140(v4, 49); break; case 0x17: sub_4A8140(v4, 180); break; case 0x23: sub_4A8140(v4, 154); break; default: goto LABEL_109; } } } } goto LABEL_109; } if ( v18 == 3 ) { *(_DWORD *)(v4 + 4828) = 0; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); } else { LABEL_112: *(_DWORD *)(v4 + 4828) = 0; } sub_4E1E50((char **)v4); goto LABEL_25; } switch ( v7 ) { case 6: sub_62E4C0(v46, v6 & 0x3FF); v28 = *(_DWORD **)(v4 + 964); if ( v28 ) sub_5B8E50(v28); goto LABEL_109; case 12: sub_566930(*(_DWORD ***)(v4 + 720), (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); sub_685E60(&byte_ADA230, (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); sub_4F4560(*(_DWORD *)(v4 + 1024)); goto LABEL_109; case 4: sub_62F4C0(v46, v6 & 0x3FF); if ( sub_6D3890() ) { v29 = (_DWORD *)sub_6D3890(); sub_5F9940(v29); } goto LABEL_109; case 0: sub_718780(v46, v6 & 0x3FF); if ( sub_7154F0() ) { v30 = (_DWORD *)sub_7154F0(); sub_70C060(v30); } if ( sub_7154E0() ) { v31 = (char *)sub_7154E0(); sub_701BB0(v31); } goto LABEL_109; case 13: case 3: case 14: case 16: v40 = v3[1]; if ( v46 ) { sub_4DC7E0(&byte_ADA230, v40 >> 10, v40 & 0x3FF); sub_684AA0(&byte_ADA230, (unsigned int)v3[1] >> 10, v3[1] & 0x3FF, v46); } else { sub_684AA0(&byte_ADA230, v40 >> 10, v40 & 0x3FF, 0); } goto LABEL_109; case 2: v43 = sub_4DC950(&byte_ADA230, v6 & 0x3FF); v45 = *v3; v44 = sub_4DC950(&byte_ADA230, v45 & 0x3FF); if ( !((v6 ^ v45) & 0x3FF) ) { *(_DWORD *)(v4 + 4828) = 0; LABEL_78: sub_4E1E50((char **)v4); goto LABEL_79; } v32 = *(_DWORD *)(v4 + 4828); if ( v32 ) { *(_DWORD *)(v4 + 4828) = 0; if ( v32 == 3 ) sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); goto LABEL_78; } v33 = v43; if ( v43 ) { if ( v44 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v43 + 4))(v43) == 24 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v44 + 4))() == 24 ) { *(_DWORD *)(v4 + 4828) = 1; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 0); goto LABEL_79; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v33 + 4))(v33) != 24 ) { *(_DWORD *)(v4 + 4828) = 3; sub_4E1E00((char **)v4, *v3 & 0x3FF); goto LABEL_79; } } *(_DWORD *)(v4 + 4828) = 2; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); sub_4E1E00((char **)v4, *v3 & 0x3FF); } LABEL_79: sub_5337F0(*(_DWORD **)(v4 + 716), (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); sub_685E60(&byte_ADA230, (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); goto LABEL_109; } if ( v7 != 15 ) goto LABEL_109; v43 = sub_4DC950(&byte_ADA230, v6 & 0x3FF); v45 = *v3; v44 = sub_4DC950(&byte_ADA230, v45 & 0x3FF); if ( !((v6 ^ v45) & 0x3FF) ) goto LABEL_93; v34 = *(_DWORD *)(v4 + 4828); if ( v34 ) { if ( v34 == 3 ) { *(_DWORD *)(v4 + 4828) = 0; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); LABEL_94: sub_4E1E50((char **)v4); goto LABEL_95; } LABEL_93: *(_DWORD *)(v4 + 4828) = 0; goto LABEL_94; } v35 = v43; if ( v43 ) { if ( v44 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v43 + 4))(v43) == 24 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v44 + 4))() == 24 ) { *(_DWORD *)(v4 + 4828) = 1; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 0); goto LABEL_95; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v35 + 4))(v35) != 24 ) { *(_DWORD *)(v4 + 4828) = 3; sub_4E1E00((char **)v4, *v3 & 0x3FF); goto LABEL_95; } } *(_DWORD *)(v4 + 4828) = 2; sub_632970((char *)&dword_AD46F0, *v3 & 0x3FF, v3[1] & 0x3FF, 1); sub_4E1E00((char **)v4, *v3 & 0x3FF); } LABEL_95: v36 = v46; sub_4E8190(*(_WORD ****)(v4 + 772), (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); sub_685E60(&byte_ADA230, (unsigned int)v3[1] >> 10, v46, v3[1] & 0x3FF); v37 = *(_DWORD *)(v4 + 652); if ( *(_BYTE *)(v37 + 1095) ) sub_5A1430((_DWORD *)v37, v3[1] & 0x3FF, v46); v38 = *(_DWORD *)(v4 + 672); if ( *(_BYTE *)(v38 + 1095) ) sub_5A1430((_DWORD *)v38, v3[1] & 0x3FF, v46); v47 = (_DWORD **)(v4 + 676); v44 = 4; do { v39 = (int)*(v47 - 5); if ( *(_BYTE *)(v39 + 1095) ) sub_5A1430((_DWORD *)v39, v3[1] & 0x3FF, v36); if ( *((_BYTE *)*v47 + 1095) ) sub_5A1430(*v47, v3[1] & 0x3FF, v36); ++v47; --v44; } while ( v44 ); LABEL_109: sub_4A4AB0((_DWORD **)v4); *(float *)(*(_DWORD *)(v4 + 860) + 744) = 0.0; return a2; } // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; // B9DE60: using guessed type int dword_B9DE60; //----- (004C4F20) -------------------------------------------------------- int __thiscall sub_4C4F20(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi _DWORD *v4; // eax int v5; // edi unsigned int v6; // eax int v7; // eax int v8; // edi int v9; // esi int v10; // eax int *v11; // edi _DWORD *v12; // esi char v13; // al int v14; // edi int v15; // esi int *v16; // eax int v17; // eax const char *v18; // eax int v19; // eax int v20; // esi __int16 *v21; // esi int v22; // eax _DWORD *v23; // ecx char v24; // al int v25; // eax char v27; // [esp+Ch] [ebp-80h] _WORD *v28; // [esp+10h] [ebp-7Ch] _DWORD *v29; // [esp+14h] [ebp-78h] int v30; // [esp+18h] [ebp-74h] _DWORD *v31; // [esp+1Ch] [ebp-70h] char v32; // [esp+20h] [ebp-6Ch] __int16 v33; // [esp+29h] [ebp-63h] __int16 v34; // [esp+2Fh] [ebp-5Dh] __int16 v35; // [esp+35h] [ebp-57h] unsigned __int16 v36; // [esp+3Bh] [ebp-51h] __int16 v37; // [esp+84h] [ebp-8h] char v38; // [esp+86h] [ebp-6h] v3 = this; v29 = this; v28 = (_WORD *)(a3 + 3); v4 = sub_686B80((unsigned __int16 *)(a3 + 3), (int *)&v27); v5 = (int)v4; v31 = v4; sub_4A4AB0(v3); v6 = *(unsigned __int8 *)(a3 + 2); if ( v6 < 0x1E ) v7 = dword_ADA534[v6]; else v7 = 0; if ( v5 ) { sub_6BAA10(*(unsigned __int16 *)(v5 + 8)); } else if ( v7 ) { sub_6BAA10(*(unsigned __int16 *)(v7 + 8)); } sub_5337F0(v3[179], 8, v5, *(unsigned __int8 *)(a3 + 2)); v8 = *(unsigned __int8 *)(a3 + 2); v9 = dword_ADA534[v8]; v10 = (int)v31; v11 = &dword_ADA534[v8]; if ( (_DWORD *)v9 != v31 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = (int)v31; } *v11 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v12 = v29; sub_4F4560(v29[256]); v30 = 0xFFFF; if ( !v31 ) { sub_654520((int)dword_AD8EBC, *(unsigned __int8 *)(a3 + 2)); goto LABEL_45; } if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0ED0((_DWORD **)&dword_ACE484); v13 = *(_BYTE *)(a3 + 2); if ( v13 == 25 || v13 == 28 ) { *((_DWORD *)dword_AD8EBC + 364) = *(unsigned __int8 *)(a3 + 2); if ( *(_BYTE *)(a3 + 2) == 25 ) { v14 = *(unsigned __int16 *)(dword_AD8EBC + 981); v15 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v14) ) { if ( (unsigned __int16)v14 <= *(_WORD *)(v15 + 200) ) { v16 = (int *)(*(_DWORD *)(v15 + 196) + 4 * v14); if ( *v16 ) { v17 = *v16; LABEL_28: if ( v17 ) { v18 = sub_4B17D0((const char *)(v17 + 2)); if ( v18 ) { if ( *((_DWORD *)v18 + 9) == 2 ) sub_4A8040(v29); } } goto LABEL_32; } } } } else if ( *(_BYTE *)(a3 + 2) == 28 ) { v17 = sub_49F760(*(unsigned __int16 *)(dword_AD8EBC + 967)); goto LABEL_28; } } LABEL_32: sub_654220(dword_AD8EBC, (int)v31); v19 = sub_685140(&byte_ADA230); v20 = v19; if ( v19 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v19 + 4))(v19) == 5 ) { v21 = (__int16 *)(v20 + 8); qmemcpy(&v32, v21, 0x64u); v21 += 50; v37 = *v21; v38 = *((_BYTE *)v21 + 2); if ( v33 != -1 && v36 == v33 ) v30 = v36; if ( v34 != -1 && v36 == v34 ) v30 = v36; if ( v35 != -1 && v36 == v35 ) v30 = v36; } sub_67C4F0(dword_AD8EBC, dword_AD8EBC[172], v30); v12 = v29; LABEL_45: v22 = v12[178]; if ( v22 ) { (*(void (__stdcall **)(char *))(**(_DWORD **)(v22 + 344) + 472))(dword_AD8EBC + 209); v23 = *(_DWORD **)(v12[178] + 564); if ( v23 ) sub_4FA410(v23); } v24 = *(_BYTE *)(a3 + 2); if ( v24 == 25 || v24 == 28 ) sub_4AA540(v12, (int)v31); if ( *(_BYTE *)(a3 + 2) == 17 ) { v25 = sub_6AB1D0(&unk_B91250, *((_WORD *)dword_AD8EBC + 274)); if ( v25 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v25 + 84))(*v28 == -1); } return a2; } // ACB230: using guessed type int dword_ACB230; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (004C5230) -------------------------------------------------------- int __thiscall sub_4C5230(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // edi unsigned int v4; // eax int v5; // esi const CHAR *v6; // eax v3 = this; if ( (*a3 & 0xFC00) == 0x2000 ) { v4 = *a3 & 0x3FF; if ( v4 < 0x1E ) v5 = dword_ADA534[v4]; else v5 = 0; if ( v5 == sub_684D70(&byte_ADA230) ) { v6 = sub_40A910(255678066); sub_492060(v3, (int)v6); } } return a2; } // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (004C5290) -------------------------------------------------------- int __thiscall sub_4C5290(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax _DWORD *v6; // eax _DWORD *v7; // edi int v8; // esi int v9; // eax bool v10; // zf int result; // eax v3 = *a3; v4 = this; if ( (_WORD)v3 == 513 ) { v5 = sub_40C190(-1778126862); LABEL_10: sub_492060(v4, (int)v5); } else { switch ( v3 ) { case 517: case 519: case 523: v5 = sub_40C190(698305403); goto LABEL_10; case 522: v5 = sub_40C190(543232885); goto LABEL_10; case 524: v5 = sub_40C190(457132922); goto LABEL_10; case 525: v5 = sub_40C190(480666965); goto LABEL_10; case 527: v5 = sub_4090F0(1350813924); goto LABEL_10; case 529: v5 = sub_4090F0(1188938409); goto LABEL_10; default: break; } } v6 = sub_6CD770(); v7 = v6; v8 = *v6; v9 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v10 = (*(int (__thiscall **)(_DWORD *, int))(v8 + 4))(v7, v9) == 0; result = a2; if ( v10 ) byte_AB7288 = 1; return result; } // AB7288: using guessed type char byte_AB7288; //----- (004C5370) -------------------------------------------------------- int __thiscall sub_4C5370(_DWORD *this, int a2, unsigned __int16 *a3) { __int16 v3; // ax _DWORD *v4; // esi const CHAR *v5; // eax const char *v6; // eax _DWORD *v7; // eax _DWORD *v8; // edi int v9; // esi int v10; // eax bool v11; // zf int result; // eax int v13; // [esp+8h] [ebp-8h] int v14; // [esp+Ch] [ebp-4h] v3 = *a3; v4 = this; if ( *a3 == 897 ) { v13 = 16; v14 = 0; sub_6B69F0(dword_AB6534, (int)&v13, 0.0, 0); } else if ( v3 == 912 || v3 == 911 ) { v6 = sub_41A850(*a3); sub_492060(v4, (int)v6); } else { v5 = sub_40C190(-1533771405); sub_492060(v4, (int)v5); } v7 = sub_6CD770(); v8 = v7; v9 = *v7; v10 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v11 = (*(int (__thiscall **)(_DWORD *, int))(v9 + 4))(v8, v10) == 0; result = a2; if ( v11 ) byte_AB7288 = 1; return result; } // AB6534: using guessed type int dword_AB6534; // AB7288: using guessed type char byte_AB7288; //----- (004C5420) -------------------------------------------------------- int __thiscall sub_4C5420(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax v3 = *a3; v4 = this; if ( (_WORD)v3 != 577 ) { switch ( v3 ) { case 578: case 579: case 580: case 581: case 582: case 583: case 584: case 585: return a2; case 586: v5 = sub_40C190(-857857511); break; case 588: v5 = sub_40C190(237968494); break; default: v5 = sub_40C190(-2019655305); break; } sub_492060(v4, (int)v5); } return a2; } //----- (004C54A0) -------------------------------------------------------- int __thiscall sub_4C54A0(_DWORD *this, int a2, unsigned __int16 *a3) { signed int v3; // eax _DWORD *v4; // esi int v5; // eax const CHAR *v6; // eax _DWORD *v7; // eax _DWORD *v8; // edi int v9; // esi int v10; // eax bool v11; // zf int result; // eax v3 = *a3; v4 = this; if ( (_WORD)v3 == 769 ) goto LABEL_13; if ( v3 <= 903 ) { if ( v3 != 903 ) { v5 = v3 - 781; if ( v5 ) { if ( v5 != 1 ) goto LABEL_13; v6 = sub_40C190(-2097885992); } else { v6 = sub_40C190(-673766128); } goto LABEL_12; } goto LABEL_11; } if ( v3 == 907 ) { LABEL_11: v6 = sub_40C190(-2045716265); goto LABEL_12; } if ( v3 != 5057 ) goto LABEL_13; v6 = sub_40C190(-723786798); LABEL_12: sub_492060(v4, (int)v6); LABEL_13: byte_AB017F = 1; v7 = sub_6CD770(); v8 = v7; v9 = *v7; v10 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v11 = (*(int (__thiscall **)(_DWORD *, int))(v9 + 4))(v8, v10) == 0; result = a2; if ( v11 ) byte_AB7288 = 1; return result; } // AB017F: using guessed type char byte_AB017F; // AB7288: using guessed type char byte_AB7288; //----- (004C5540) -------------------------------------------------------- int __thiscall sub_4C5540(int this, int a2, int a3) { __int16 v3; // ax _DWORD *v4; // ebx const CHAR *v5; // eax const CHAR *v6; // eax int v7; // edi int v8; // esi int *v9; // eax int v10; // esi char *v11; // eax int v12; // ST0C_4 char *v13; // eax const void **v14; // ecx _DWORD *v15; // eax _DWORD *v16; // edi int v17; // esi int v18; // eax bool v19; // zf int result; // eax byte_ADA230 = 0; v3 = *(_WORD *)(a3 + 6); v4 = (_DWORD *)this; if ( v3 != 833 ) { switch ( v3 ) { case 836: v5 = sub_40C190(-479580360); break; case 837: v5 = sub_40C190(-2045716265); break; case 838: v5 = sub_40C190(-184949776); break; default: switch ( v3 ) { case 843: sub_683050(&unk_ADA1E0, (_DWORD *)*(unsigned __int16 *)(a3 + 8)); goto LABEL_44; case 8193: v6 = sub_40A910(1928714430); break; case 8194: v6 = sub_40A910(-129922485); break; case 8195: v6 = sub_40A910(-11891623); break; case 8196: v6 = sub_40A910(-1057409271); break; case 8201: v6 = sub_40A910(89423199); break; case 844: v6 = sub_40A910(-1057409271); break; case 845: v6 = sub_40A910(1569354170); break; case 8197: v6 = sub_40A910(1739641539); break; case 846: v6 = sub_40A910(19531596); break; case 834: v6 = sub_40A910(388566327); break; default: v5 = sub_40C190(901151362); goto LABEL_32; } sub_492060(v4, (int)v6); goto LABEL_44; } LABEL_32: sub_492060(v4, (int)v5); goto LABEL_44; } sub_6BA9B0(*(unsigned __int16 *)a3); v7 = *(unsigned __int16 *)a3; v8 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v9 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v7); if ( *v9 ) { v10 = *v9; if ( *v9 ) { if ( *(_DWORD *)(a3 + 2) ) { v12 = *(_DWORD *)(a3 + 2); v13 = (char *)sub_40C190(-1039408403); sub_4920B0((int)v4, v13, v10 + 34, v12); } else { v11 = (char *)sub_40C190(-1056185619); sub_4920B0((int)v4, v11, v10 + 34); } v14 = (const void **)v4[263]; if ( v14 ) sub_61D280(v14); if ( *(_DWORD *)(v10 + 102) == 30 ) sub_4A8140((int)v4, 147); } } } } LABEL_44: v15 = sub_6CD770(); v16 = v15; v17 = *v15; v18 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v19 = (*(int (__thiscall **)(_DWORD *, int))(v17 + 4))(v16, v18) == 0; result = a2; if ( v19 ) byte_AB7288 = 1; return result; } // AB7288: using guessed type char byte_AB7288; // ACB230: using guessed type int dword_ACB230; // ADA230: using guessed type char byte_ADA230; //----- (004C5780) -------------------------------------------------------- int __thiscall sub_4C5780(void *this, int a2, int a3) { int v3; // edx int v4; // ecx int v5; // edi int v6; // ebx int v7; // eax int v8; // edx int v9; // edx int v10; // eax int v11; // ST10_4 int v12; // ST0C_4 char *v13; // eax int v15; // [esp+Ch] [ebp-20h] char v16[4]; // [esp+10h] [ebp-1Ch] int v17; // [esp+14h] [ebp-18h] int v18; // [esp+18h] [ebp-14h] int v19; // [esp+1Ch] [ebp-10h] int v20; // [esp+20h] [ebp-Ch] char v21; // [esp+24h] [ebp-8h] v15 = (int)this; if ( sub_718A50(&dword_B9E560) ) { if ( sub_718D10( &dword_B9E560, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)) ) { v3 = *(_DWORD *)a3; v4 = *(_DWORD *)(a3 + 8); v5 = dword_ACB230; v6 = *(unsigned __int16 *)(a3 + 20); v17 = *(_DWORD *)(a3 + 4); v7 = *(_DWORD *)(a3 + 16); *(_DWORD *)v16 = v3; v8 = *(_DWORD *)(a3 + 12); v18 = v4; v20 = v7; v19 = v8; v21 = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v9 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v9 + 4 * v6) ) { v10 = *(_DWORD *)(v9 + 4 * v6); if ( v10 ) { if ( *(_DWORD *)(v10 + 102) != 32 ) { v11 = *(_DWORD *)(a3 + 22); v12 = v10 + 34; v13 = (char *)sub_40A910(964587371); sub_4920B0(v15, v13, v16, v12, v11); } } } } } } } return a2; } // ACB230: using guessed type int dword_ACB230; // B9E560: using guessed type int dword_B9E560; //----- (004C5880) -------------------------------------------------------- int __thiscall sub_4C5880(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v6; // eax v3 = this; if ( *a3 != 641 ) { if ( *a3 == 659 ) { v4 = sub_40A910(1011894147); sub_492060(v3, (int)v4); return a2; } v6 = sub_40C190(-2020046205); sub_492060(v3, (int)v6); } return a2; } //----- (004C58E0) -------------------------------------------------------- int __thiscall sub_4C58E0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 != 705 ) { v4 = sub_40C190(-1834125376); sub_492060(v3, (int)v4); } return a2; } //----- (004C5910) -------------------------------------------------------- int __thiscall sub_4C5910(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi __int16 v4; // ax const CHAR *v5; // eax int result; // eax const CHAR *v7; // eax const CHAR *v8; // eax const CHAR *v9; // eax const CHAR *v10; // eax const CHAR *v11; // eax const CHAR *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax const char *v15; // eax int v16; // ebx int v17; // esi int *v18; // eax int v19; // esi int v20; // eax float *v21; // ecx float *v22; // ecx const CHAR *v23; // ST00_4 int v24; // eax v3 = this; v4 = *a3; if ( *a3 == 1792 ) { v16 = a3[1]; v17 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v16) ) { if ( (unsigned __int16)v16 <= *(_WORD *)(v17 + 200) ) { v18 = (int *)(*(_DWORD *)(v17 + 196) + 4 * v16); if ( *v18 ) { v19 = *v18; if ( *v18 ) { if ( *(_DWORD *)(v19 + 102) == 23 ) { v20 = sub_4DCB90((const char *)(v19 + 2)); if ( v20 ) sub_4DCB40((_DWORD *)v3[285], (signed int)((double)*(unsigned __int16 *)(v20 + 206) * 0.1)); } if ( *(_DWORD *)(v19 + 102) == 22 ) { v21 = (float *)v3[285]; if ( v21 ) sub_599F40(v21); v22 = (float *)v3[1243]; if ( v22 ) sub_50DE80(v22); } if ( a3[1] == 30072 ) { if ( sub_40C190(-1968988463) ) { v23 = sub_40C190(-1968988463); sub_492060(v3, (int)v23); } else { sub_492060(v3, (int)"Unknown Text"); } } if ( *(_DWORD *)(v19 + 110) == 17 ) { v24 = sub_6AB1D0(&unk_B91250, *((_WORD *)dword_AD8EBC + 274)); if ( v24 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v24 + 84))(v24, 0); } } } } } return a2; } switch ( v4 ) { case 4290: v5 = sub_40C190(-2047355183); sub_492060(v3, (int)v5); return a2; case 4296: v7 = sub_40C190(1772188246); sub_492060(v3, (int)v7); return a2; case 4298: v8 = sub_40C190(1655424162); sub_492060(v3, (int)v8); return a2; case 4297: v9 = sub_40C190(-2085523873); sub_492060(v3, (int)v9); return a2; case 4295: v10 = sub_40C190(-1141985811); sub_492060(v3, (int)v10); return a2; case 1802: case 1806: case 4292: case 1807: return a2; case 1818: v11 = sub_40A910(1668910691); LABEL_42: sub_492060(v3, (int)v11); return a2; case 1819: v11 = sub_40A910(1720809315); goto LABEL_42; case 1820: v11 = sub_40A910(709925228); goto LABEL_42; case 1812: v12 = sub_40C190(925329271); sub_492060(v3, (int)v12); return a2; case 1816: if ( *sub_40C190(-130730741) ) { v13 = sub_40C190(-130730741); sub_492060(v3, (int)v13); } else { sub_492060(v3, (int)"Unknown Text"); } result = a2; break; case 1817: if ( *sub_40C190(1263769745) ) { v14 = sub_40C190(1263769745); sub_492060(v3, (int)v14); } else { sub_492060(v3, (int)"Unknown text"); } result = a2; break; case 1827: v11 = sub_40A910(1366584935); goto LABEL_42; case 1828: v11 = sub_40A910(-522534179); goto LABEL_42; case 1829: v11 = sub_40A910(2047470041); goto LABEL_42; case 1830: v11 = sub_40A910(-2000297776); goto LABEL_42; default: v15 = sub_41A850(*a3); sub_492060(v3, (int)v15); result = a2; break; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (004C5CD0) -------------------------------------------------------- int __thiscall sub_4C5CD0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax _DWORD *v5; // eax _DWORD *v6; // edi int v7; // esi int v8; // eax bool v9; // zf int result; // eax v3 = this; if ( *(_WORD *)(a3 + 8) == 3968 ) { sub_62E1F0(*(_QWORD *)a3); } else if ( *(_WORD *)(a3 + 8) == 3971 ) { v4 = sub_40C190(-584508371); sub_492060(v3, (int)v4); } v5 = sub_6CD770(); v6 = v5; v7 = *v5; v8 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v9 = (*(int (__thiscall **)(_DWORD *, int))(v7 + 4))(v6, v8) == 0; result = a2; if ( v9 ) byte_AB7288 = 1; return result; } // AB7288: using guessed type char byte_AB7288; //----- (004C5D50) -------------------------------------------------------- int __thiscall sub_4C5D50(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax _DWORD *v5; // eax _DWORD *v6; // edi int v7; // esi int v8; // eax bool v9; // zf int result; // eax v3 = this; if ( *(_WORD *)(a3 + 8) == 3968 ) { sub_62E1F0(*(_QWORD *)a3); } else if ( *(_WORD *)(a3 + 8) == 3971 ) { v4 = sub_40C190(756689201); sub_492060(v3, (int)v4); } v5 = sub_6CD770(); v6 = v5; v7 = *v5; v8 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 656))(); v9 = (*(int (__thiscall **)(_DWORD *, int))(v7 + 4))(v6, v8) == 0; result = a2; if ( v9 ) byte_AB7288 = 1; return result; } // AB7288: using guessed type char byte_AB7288; //----- (004C5DD0) -------------------------------------------------------- int __thiscall sub_4C5DD0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // ecx int v5; // ecx int v6; // eax _DWORD **v8; // ecx signed int v9; // esi _DWORD *v10; // edi const CHAR *v11; // eax _DWORD *v12; // [esp+8h] [ebp-4h] v3 = this; v12 = this; if ( *(_WORD *)a3 != 4161 ) { v11 = sub_40C190(-1025038835); sub_492060(v3, (int)v11); return a2; } v4 = this[179]; if ( !*(_WORD *)(a3 + 3) ) { v5 = *(_DWORD *)(v4 + 1436); v6 = *(_DWORD *)(v5 + 388); if ( v6 ) { *(_DWORD *)(v5 + 388) = v6 - 1; return a2; } return a2; } sub_533A90(v4, 1); sub_533AE0((_BYTE *)v3[179]); v8 = (_DWORD **)v3[144]; if ( v8 ) sub_559AC0(v8); if ( *(_BYTE *)(a3 + 2) & 1 ) sub_74E270(&unk_ADB2A8); v9 = 0; if ( *(_WORD *)(a3 + 3) > 0u ) { v10 = (_DWORD *)(a3 + 5); do { sub_74E160(&unk_ADB2A8, v10); ++v9; v10 += 4; } while ( v9 < *(unsigned __int16 *)(a3 + 3) ); v3 = v12; } sub_5338A0(v3[179]); return a2; } //----- (004C5EC0) -------------------------------------------------------- int __thiscall sub_4C5EC0(int this, int a2, int a3) { signed int v3; // eax int v4; // edi int *v5; // eax int v6; // edx int v7; // eax int v8; // edx int v9; // eax char *v10; // eax int v11; // ecx _DWORD *v12; // ecx int v13; // ecx int v14; // edx int v15; // ecx char *v16; // eax const char *v17; // eax __int16 v19; // [esp+8h] [ebp-20h] char v20[4]; // [esp+Ch] [ebp-1Ch] int v21; // [esp+10h] [ebp-18h] int v22; // [esp+14h] [ebp-14h] int v23; // [esp+18h] [ebp-10h] int v24; // [esp+1Ch] [ebp-Ch] char v25; // [esp+20h] [ebp-8h] v3 = *(unsigned __int16 *)(a3 + 21); v4 = this; if ( (_WORD)v3 == 1217 ) { v5 = (int *)sub_6C1330(&dword_B9DC70, a3); if ( v5 ) sub_56F590(*(int **)(v4 + 572), v5); v6 = *(_DWORD *)a3; v7 = *(_DWORD *)(a3 + 4); v22 = *(_DWORD *)(a3 + 8); *(_DWORD *)v20 = v6; v8 = *(_DWORD *)(a3 + 12); v21 = v7; v9 = *(_DWORD *)(a3 + 16); v23 = v8; v24 = v9; v25 = 0; v10 = (char *)sub_40C190(-1616679965); sub_4920B0(v4, v10, v20); v11 = *(_DWORD *)(v4 + 2336); v19 = 14408; sub_906000(v11, &v19, 2u); v12 = *(_DWORD **)(v4 + 724); if ( v12 ) sub_582B90(v12); } else { v13 = *(_DWORD *)a3; v21 = *(_DWORD *)(a3 + 4); v14 = *(_DWORD *)(a3 + 12); *(_DWORD *)v20 = v13; v15 = *(_DWORD *)(a3 + 8); v23 = v14; v22 = v15; v24 = *(_DWORD *)(a3 + 16); v25 = 0; v16 = (char *)sub_41A850(v3); sub_4920B0(v4, v16, v20); if ( *(_WORD *)(a3 + 21) == 1242 ) { v17 = sub_41A850(1242); sub_492060((_DWORD *)v4, (int)v17); } } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C5FE0) -------------------------------------------------------- int __thiscall sub_4C5FE0(int this, int a2, int a3) { int v3; // edi _DWORD *v4; // eax int v5; // ecx const CHAR *v6; // eax int v7; // edx int v8; // ecx int v9; // edx char *v10; // eax int v11; // eax _DWORD *v12; // ecx char v14[4]; // [esp+8h] [ebp-1Ch] int v15; // [esp+Ch] [ebp-18h] int v16; // [esp+10h] [ebp-14h] int v17; // [esp+14h] [ebp-10h] int v18; // [esp+18h] [ebp-Ch] char v19; // [esp+1Ch] [ebp-8h] v3 = this; v4 = (_DWORD *)sub_680810(byte_AD9238); v5 = *(_DWORD *)a3; if ( *(_DWORD *)a3 != *v4 || *(_DWORD *)(a3 + 4) != v4[1] || *(_DWORD *)(a3 + 8) != v4[2] || *(_DWORD *)(a3 + 12) != v4[3] || *(_DWORD *)(a3 + 16) != v4[4] ) { v7 = *(_DWORD *)(a3 + 4); v16 = *(_DWORD *)(a3 + 8); *(_DWORD *)v14 = v5; v8 = *(_DWORD *)(a3 + 12); v15 = v7; v9 = *(_DWORD *)(a3 + 16); v17 = v8; v18 = v9; v19 = 0; v10 = (char *)sub_40C190(-2053454359); sub_4920B0(v3, v10, v14); v11 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); if ( v11 ) sub_56C010(*(_DWORD ***)(v3 + 572), v11); sub_6C1860( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); } else { v6 = sub_40C190(-480625360); sub_492060((_DWORD *)v3, (int)v6); sub_6C10D0((int)&dword_B9DC70); sub_56C0A0(*(_DWORD ***)(v3 + 572)); if ( *(_DWORD *)(v3 + 1284) && (*(unsigned __int8 (**)(void))(**(_DWORD **)(v3 + 1284) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 1284)); if ( *(_DWORD *)(v3 + 1280) && (*(unsigned __int8 (**)(void))(**(_DWORD **)(v3 + 1280) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 1280)); if ( *(_DWORD *)(v3 + 1276) && (*(unsigned __int8 (**)(void))(**(_DWORD **)(v3 + 1276) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 1276)); } v12 = *(_DWORD **)(v3 + 724); if ( v12 ) sub_582B90(v12); return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C61C0) -------------------------------------------------------- int __thiscall sub_4C61C0(int this, int a2, int a3) { int v3; // eax int v4; // edi _DWORD *v5; // eax const CHAR *v6; // eax int v7; // eax int v8; // edx int v9; // eax char *v10; // eax int v11; // eax int v12; // eax int v13; // eax const CHAR *v14; // eax _DWORD *v15; // ecx char v17[4]; // [esp+8h] [ebp-1Ch] int v18; // [esp+Ch] [ebp-18h] int v19; // [esp+10h] [ebp-14h] int v20; // [esp+14h] [ebp-10h] int v21; // [esp+18h] [ebp-Ch] char v22; // [esp+1Ch] [ebp-8h] v3 = *(unsigned __int16 *)(a3 + 20); v4 = this; if ( (_WORD)v3 == 1345 ) { v5 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)a3 != *v5 || *(_DWORD *)(a3 + 4) != v5[1] || *(_DWORD *)(a3 + 8) != v5[2] || *(_DWORD *)(a3 + 12) != v5[3] || *(_DWORD *)(a3 + 16) != v5[4] ) { v7 = *(_DWORD *)(a3 + 4); v8 = *(_DWORD *)(a3 + 12); *(_DWORD *)v17 = *(_DWORD *)a3; v19 = *(_DWORD *)(a3 + 8); v18 = v7; v9 = *(_DWORD *)(a3 + 16); v20 = v8; v21 = v9; v22 = 0; v10 = (char *)sub_40C190(-2053454359); sub_4920B0(v4, v10, v17); v11 = sub_6C11C0( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); if ( v11 ) sub_56C010(*(_DWORD ***)(v4 + 572), v11); sub_6C1860( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); } else { v6 = sub_40C190(-537466395); sub_492060((_DWORD *)v4, (int)v6); sub_6C17E0((int)&dword_B9DC70); sub_56C0A0(*(_DWORD ***)(v4 + 572)); } } else { v12 = v3 - 1346; if ( v12 ) { v13 = v12 - 1; if ( v13 ) { if ( v13 != 3 ) goto LABEL_18; v14 = sub_40A910(511928227); } else { v14 = sub_40A910(1063604170); } } else { v14 = sub_40A910(1826203867); } sub_492060((_DWORD *)v4, (int)v14); } LABEL_18: v15 = *(_DWORD **)(v4 + 724); if ( v15 ) sub_582B90(v15); return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C6340) -------------------------------------------------------- int __thiscall sub_4C6340(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // esi const CHAR *v4; // eax _DWORD *v5; // ecx v3 = this; sub_6C17E0((int)&dword_B9DC70); sub_56C0A0(v3[143]); v4 = sub_40C190(1078076590); sub_492060(v3, (int)v4); if ( v3[321] && ((unsigned __int8 (*)(void))(*v3[321])[65])() ) sub_8F86A0(&unk_BA6B10, v3[321]); if ( v3[320] && ((unsigned __int8 (*)(void))(*v3[320])[65])() ) sub_8F86A0(&unk_BA6B10, v3[320]); if ( v3[319] && ((unsigned __int8 (*)(void))(*v3[319])[65])() ) sub_8F86A0(&unk_BA6B10, v3[319]); v5 = v3[181]; if ( v5 ) sub_582B90(v5); return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C6420) -------------------------------------------------------- int __thiscall sub_4C6420(int this, int a2, int a3) { int v3; // eax _DWORD *v4; // edi _DWORD *v5; // eax char *v6; // eax int v7; // edx int v8; // eax int v9; // ecx int v10; // ecx _DWORD *v11; // ecx int v12; // eax int v13; // eax const CHAR *v14; // eax char *v16; // [esp-4h] [ebp-28h] char v17[4]; // [esp+8h] [ebp-1Ch] int v18; // [esp+Ch] [ebp-18h] int v19; // [esp+10h] [ebp-14h] int v20; // [esp+14h] [ebp-10h] int v21; // [esp+18h] [ebp-Ch] char v22; // [esp+1Ch] [ebp-8h] v3 = *(unsigned __int16 *)(a3 + 20); v4 = (_DWORD *)this; if ( (_WORD)v3 != 1352 ) { v12 = v3 - 1346; if ( v12 ) { v13 = v12 - 1; if ( !v13 ) { v14 = sub_40A910(-1546396466); goto LABEL_16; } if ( v13 != 6 ) return a2; } v14 = sub_40A910(-116124644); LABEL_16: sub_492060(v4, (int)v14); return a2; } v5 = (_DWORD *)sub_680810(byte_AD9238); if ( *v5 != *(_DWORD *)a3 || v5[1] != *(_DWORD *)(a3 + 4) || v5[2] != *(_DWORD *)(a3 + 8) || v5[3] != *(_DWORD *)(a3 + 12) || v5[4] != *(_DWORD *)(a3 + 16) ) { v7 = *(_DWORD *)(a3 + 8); v8 = *(_DWORD *)(a3 + 12); *(_DWORD *)v17 = *(_DWORD *)a3; v9 = *(_DWORD *)(a3 + 4); v19 = v7; v18 = v9; v10 = *(_DWORD *)(a3 + 16); v16 = v17; v20 = v8; v21 = v10; v22 = 0; v6 = (char *)sub_40C190(625894495); } else { v6 = (char *)sub_40C190(-603379951); } sub_4920B0((int)v4, v6, v16); sub_6C14C0( &dword_B9DC70, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); v11 = (_DWORD *)v4[181]; if ( v11 ) sub_582B90(v11); sub_4A8140((int)v4, 166); return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C6550) -------------------------------------------------------- int __thiscall sub_4C6550(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // edi _DWORD *v4; // ecx const CHAR *v5; // eax char *v6; // edx CHAR v7; // cl const CHAR *v8; // eax char *v9; // edx CHAR v10; // cl const CHAR *v11; // eax char *v12; // edx CHAR v13; // cl const CHAR *v14; // eax char *v15; // edx CHAR v16; // cl const CHAR *v17; // eax const CHAR *v18; // ST04_4 char *v19; // eax const CHAR *v20; // ST04_4 char v22; // [esp+8h] [ebp-204h] char v23; // [esp+9h] [ebp-203h] v3 = this; sub_6C1100(&dword_B9DC70, a3[1], *a3); v4 = (_DWORD *)v3[321]; if ( v4 ) { sub_57CE30(v4, a3[1]); sub_57CD50((_DWORD *)v3[321], *a3); } v22 = 0; memset(&v23, 0, 0x1FFu); switch ( *a3 ) { case 0u: v5 = sub_40A910(-1585524522); v6 = (char *)(&v22 - v5); do { v7 = *v5; v5[(_DWORD)v6] = *v5; ++v5; } while ( v7 ); break; case 1u: v8 = sub_40A910(773398838); v9 = (char *)(&v22 - v8); do { v10 = *v8; v8[(_DWORD)v9] = *v8; ++v8; } while ( v10 ); break; case 2u: v11 = sub_40A910(840444185); v12 = (char *)(&v22 - v11); do { v13 = *v11; v11[(_DWORD)v12] = *v11; ++v11; } while ( v13 ); break; case 3u: v14 = sub_40A910(-1427520735); v15 = (char *)(&v22 - v14); do { v16 = *v14; v14[(_DWORD)v15] = *v14; ++v14; } while ( v16 ); break; default: break; } switch ( a3[1] ) { case 0u: v17 = sub_4090F0(225928826); goto LABEL_20; case 1u: v18 = sub_4090F0(225994362); v19 = sub_7549E0(&v22, v18); goto LABEL_21; case 2u: v20 = sub_4090F0(226059898); v19 = sub_7549E0(&v22, v20); goto LABEL_21; case 3u: v17 = sub_4090F0(226125434); LABEL_20: v19 = sub_7549E0(&v22, v17); LABEL_21: sub_492060(v3, (int)v19); break; default: return a2; } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004C6720) -------------------------------------------------------- int __thiscall sub_4C6720(int this, int a2, int a3) { int v3; // esi int v4; // edi _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // ebx int v8; // edi int *v9; // eax _DWORD *v10; // eax char *v11; // eax int v13; // [esp+18h] [ebp-8h] int v14; // [esp+1Ch] [ebp-4h] v3 = this; if ( *(_BYTE *)(a3 + 2) ) { sub_6BE710(*(_WORD *)a3); v4 = sub_4DCAF0(*(_WORD *)a3); if ( !v4 ) goto LABEL_14; v5 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370( &unk_B91250, "SkillLevelUp", *v5, v5[1], v5[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); goto LABEL_13; } sub_6BE9E0(*(_WORD *)a3, 0, 0); if ( (unsigned __int8)sub_6BE7F0(*(_WORD *)a3) ) { v6 = (_DWORD *)dword_B9DE60; if ( dword_B9DE60 ) { if ( sub_8F3540((_DWORD *)dword_B9DE60) ) sub_593480(v6); } } v7 = *(unsigned __int16 *)a3; v8 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v9 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v7); if ( *v9 ) { v4 = *v9; if ( *v9 ) { v10 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370( &unk_B91250, "SkillLevelUp", *v10, v10[1], v10[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); LABEL_13: v11 = (char *)sub_40C190(-470013628); sub_4920B0(v3, v11, v4 + 34); sub_5B21E0(*(_DWORD **)(v3 + 728)); goto LABEL_14; } } } } LABEL_14: if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } sub_6D0E10((_DWORD **)&dword_ACE484); v13 = 15; v14 = 0; sub_6B69F0(dword_AB6534, (int)&v13, 0.0, 0); return a2; } // AB6534: using guessed type int dword_AB6534; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ACE8D0: using guessed type int dword_ACE8D0; // B9DE60: using guessed type int dword_B9DE60; //----- (004C6940) -------------------------------------------------------- int __thiscall sub_4C6940(_DWORD ***this, int a2, __int16 *a3) { __int16 v3; // ax _DWORD ***v4; // ebx int v5; // edi int v6; // esi int *v7; // eax int v8; // esi char *v9; // eax char *v10; // eax int result; // eax char *v12; // eax _DWORD *v13; // esi int v14; // eax int v15; // ST0C_4 char *v16; // eax char *v17; // eax const char *v18; // eax v3 = a3[1]; v4 = this; if ( v3 == 5377 ) { v5 = (unsigned __int16)*a3; v6 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v5); if ( *v7 ) { v8 = *v7; if ( *v7 ) { if ( !strcmp((const char *)(v8 + 2), "SummonMate01") ) { sub_6BE470(*a3); v9 = (char *)sub_40C190(-2035390595); v10 = sub_7549E0(v9, v8 + 34); sub_492060(v4, (int)v10); } else { v12 = (char *)sub_40C190(2107886324); sub_462CA0(1, v12); v13 = (_DWORD *)dword_B9DE60; if ( dword_B9DE60 ) { if ( sub_8F3540((_DWORD *)dword_B9DE60) ) sub_8F86A0(&unk_BA6B10, v13); } sub_5AF550(v4[182]); sub_6BE3A0(*a3); } sub_5B21E0(v4[182]); } } } } result = a2; } else if ( v3 == 5381 ) { v14 = sub_4DCAF0(*a3); if ( v14 ) { v15 = v14 + 34; v16 = (char *)sub_40C190(-2035390595); v17 = sub_7549E0(v16, v15); sub_492060(v4, (int)v17); } sub_6BE540(*a3); sub_5B21E0(v4[182]); result = a2; } else { v18 = sub_41A850((unsigned __int16)a3[1]); sub_492060(v4, (int)v18); result = a2; } return result; } // ACE8D0: using guessed type int dword_ACE8D0; // B9DE60: using guessed type int dword_B9DE60; //----- (004C6AE0) -------------------------------------------------------- int __thiscall sub_4C6AE0(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; sub_6BE6F0(0); sub_6BE6D0(); sub_6BE610(*a3); sub_5D79E0(); v4 = sub_40C190(-1818458989); sub_492060(v3, (int)v4); return a2; } //----- (004C6B20) -------------------------------------------------------- int __thiscall sub_4C6B20(int **this, int a2, int a3) { int **v3; // esi const CHAR *v4; // eax int v6; // ST08_4 const CHAR *v7; // eax char *v8; // eax v3 = this; if ( *(_WORD *)(a3 + 2) == 2177 ) { sub_6BF3D0(*(_WORD *)a3); sub_5D79E0(); v4 = sub_40C190(-918538186); sub_492060(v3, (int)v4); sub_5AF540(v3[182], 1); } else { sub_6BF4D0(*(_WORD *)a3); v6 = *(unsigned __int16 *)(a3 + 2); v7 = sub_40C190(-469447482); v8 = sub_7549E0("%s errcode:%d", v7, v6); sub_492060(v3, (int)v8); } return a2; } //----- (004C6BE0) -------------------------------------------------------- int __thiscall sub_4C6BE0(int this, int a2, int a3) { int v3; // esi unsigned int v4; // eax unsigned int v5; // ecx int v6; // ST08_4 char *v7; // eax v3 = this; v4 = sub_6BE600(); v5 = *(unsigned __int8 *)a3; if ( v5 > v4 ) { v6 = v5 - v4; v7 = (char *)sub_40C190(-773117377); sub_4920B0(v3, v7, v6); } sub_6BE610(*(unsigned __int8 *)a3); return a2; } //----- (004C6C30) -------------------------------------------------------- int __thiscall sub_4C6C30(int this, int a2, int a3) { __int16 v3; // ax int v4; // esi char *v5; // eax v3 = *(_WORD *)(a3 + 2); v4 = this; if ( v3 != 2817 && v3 == 2820 ) { v5 = (char *)sub_40C190(1231647851); sub_4920B0(v4, v5); } return a2; } //----- (004C6C70) -------------------------------------------------------- int __thiscall sub_4C6C70(int this, int a2, int a3) { _DWORD *v3; // edi _BYTE *v4; // ecx char v5; // bl void (__thiscall ***v6)(void *, signed int); // esi char *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // esi volatile LONG *v10; // ebx _DWORD *v11; // ecx void *v12; // eax void *v14; // [esp+24h] [ebp-3Ch] char v15; // [esp+28h] [ebp-38h] int v16; // [esp+30h] [ebp-30h] char v17; // [esp+3Ch] [ebp-24h] int v18; // [esp+44h] [ebp-1Ch] int v19; // [esp+5Ch] [ebp-4h] v3 = (_DWORD *)this; if ( byte_B92009 ) { sub_8EEE70((_DWORD *)this, 116, 0, 0); } else { v4 = (_BYTE *)*sub_4A3B80(&v14); v19 = 0; v5 = sub_6C4EE0(v4); v19 = -1; if ( v14 ) { v6 = (void (__thiscall ***)(void *, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)v14 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } if ( v5 ) { sub_8EEE70(v3, 116, 0, 0); } else { v7 = (char *)sub_40C190(1805379038); v8 = sub_462CA0(2, v7); v9 = (volatile LONG *)v3[242]; v10 = v8; if ( v9 != v8 ) { if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); v3[242] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v11 = (_DWORD *)v3[242]; v16 = 115; v18 = 116; sub_461760(v11, (int)v3, &v15, &v17); v12 = operator new(0x10u); v14 = v12; v19 = 1; if ( v12 ) sub_645590((float *)v12, 15.0, 132, (int)v3); } } return a2; } // B92009: using guessed type char byte_B92009; //----- (004C6DE0) -------------------------------------------------------- int __thiscall sub_4C6DE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax int v5; // esi const CHAR *v6; // eax v3 = this; v4 = (_DWORD *)this[242]; if ( v4 ) { sub_8F86A0(&unk_BA6B10, v4); v5 = v3[242]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v3[242] = 0; } } v6 = sub_40C190(-1981691701); sub_492060(v3, (int)v6); return a2; } //----- (004C6E50) -------------------------------------------------------- int __thiscall sub_4C6E50(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax int v5; // esi const CHAR *v6; // eax v3 = this; v4 = (_DWORD *)this[242]; if ( v4 ) { sub_8F86A0(&unk_BA6B10, v4); v5 = v3[242]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v3[242] = 0; } } v6 = sub_40C190(-399373027); sub_492060(v3, (int)v6); return a2; } //----- (004C6EC0) -------------------------------------------------------- int __thiscall sub_4C6EC0(int *this, int a2, __int16 *a3) { int *v3; // esi _DWORD *v4; // edi int *v5; // eax __int16 v6; // cx char *v7; // eax int v9; // [esp+Ch] [ebp-1Ch] int v10; // [esp+10h] [ebp-18h] int v11; // [esp+14h] [ebp-14h] int v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] char v14; // [esp+20h] [ebp-8h] v3 = this; if ( this[242] ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)this[242]); v4 = (_DWORD *)v3[242]; if ( v4 ) { if ( !InterlockedDecrement(v4 + 1) && v4 ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); v3[242] = 0; } } sub_4BC960(v3); v5 = (int *)sub_680810(byte_AD9238); v9 = *v5; v10 = v5[1]; v11 = v5[2]; v6 = *a3; v12 = v5[3]; v13 = v5[4]; v14 = 0; v7 = sub_4E2910(v3, v6, 19, 9); if ( v7 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v7 + 84))(v7); sub_5C2170((_DWORD **)v3[235]); sub_5C2150((_DWORD **)v3[235]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[235]); sub_633450(1); sub_4A6BA0((_DWORD **)v3); return a2; } //----- (004C6FD0) -------------------------------------------------------- int __thiscall sub_4C6FD0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi const CHAR *v4; // eax v3 = this; v4 = sub_40C190(723988090); sub_492060(v3, (int)v4); sub_8F86A0(&unk_BA6B10, v3[235]); sub_4BC960(v3); return a2; } //----- (004C7010) -------------------------------------------------------- int __thiscall sub_4C7010(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi const CHAR *v4; // eax v3 = this; v4 = sub_40C190(2095041727); sub_492060(v3, (int)v4); sub_8F86A0(&unk_BA6B10, v3[235]); sub_4BC960(v3); return a2; } //----- (004C7080) -------------------------------------------------------- int __thiscall sub_4C7080(_DWORD *this, int a2, unsigned __int8 *a3) { unsigned int v3; // eax _DWORD *v4; // edi int v5; // ecx unsigned int v6; // eax int v7; // eax v3 = *a3; v4 = this; if ( v3 < 0xC0 ) { v5 = dword_ADA234[v3]; if ( v5 ) { sub_6335A0(v5, a3[1], *a3); v6 = *a3; if ( v6 < 0xC0 ) { v7 = *(_DWORD *)(v4[179] + 4 * v6 + 348); if ( v7 ) { sub_536E90(v7, 1); sub_4A4AB0((_DWORD **)v4); } } } } return a2; } //----- (004C71B0) -------------------------------------------------------- int __thiscall sub_4C71B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; v4 = sub_40C190(842349697); sub_492060(v3, (int)v4); sub_4BC960(v3); return a2; } //----- (004C71E0) -------------------------------------------------------- int __thiscall sub_4C71E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; v4 = sub_40C190(1045307963); sub_492060(v3, (int)v4); sub_4BC960(v3); return a2; } //----- (004C7240) -------------------------------------------------------- int __thiscall sub_4C7240(char *this, int a2, int a3) { char *v3; // esi int v4; // eax char **v5; // edi signed int v6; // ebx char **v7; // edi signed int v8; // ebx float *v9; // eax float *v10; // eax int v12; // [esp+1Ch] [ebp-10h] int v13; // [esp+28h] [ebp-4h] v3 = this; v4 = sub_680D20((int)byte_AD9238) - 1; if ( v4 >= 0 ) sub_680DC0((int)byte_AD9238, v4); sub_6BA650(&dword_AB6520, 26); sub_5B6550(*((float **)v3 + 138)); sub_6AF890(&unk_B91250, (int)&v12, "HPSoulStone", *((_DWORD *)dword_AD8EBC + 175), flt_ACCFCC, 0); sub_5A08A0(*((char **)v3 + 163)); v5 = (char **)(v3 + 656); v6 = 4; do { sub_5A08A0(*v5); ++v5; --v6; } while ( v6 ); sub_5A08A0(*((char **)v3 + 168)); v7 = (char **)(v3 + 676); v8 = 4; do { sub_5A08A0(*v7); ++v7; --v8; } while ( v8 ); sub_4E7750(*((_DWORD **)v3 + 193)); v9 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v10 = (float *)operator new(0xB4u); v13 = 0; if ( v10 ) v9 = sub_4546A0(v10); else v9 = 0; dword_ACCFE0 = (int)v9; } *((_BYTE *)v9 + 9) = 1; return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACCFE0: using guessed type int dword_ACCFE0; //----- (004C7370) -------------------------------------------------------- int __thiscall sub_4C7370(char *this, int a2, int a3) { char *v3; // edi int v4; // eax char **v5; // esi signed int v6; // ebx char **v7; // esi signed int v8; // ebx int v10; // [esp+14h] [ebp-4h] v3 = this; v4 = sub_680D30((int)byte_AD9238) - 1; if ( v4 >= 0 ) sub_680DE0((int)byte_AD9238, v4); sub_6BA650(&dword_AB6520, 26); sub_5B6590(*((_DWORD *)v3 + 138)); sub_6AF890(&unk_B91250, (int)&v10, "SPSoulStone", *((_DWORD *)dword_AD8EBC + 175), flt_ACCFCC, 0); sub_5A0960(*((char **)v3 + 163)); v5 = (char **)(v3 + 656); v6 = 4; do { sub_5A0960(*v5); ++v5; --v6; } while ( v6 ); sub_5A0960(*((char **)v3 + 168)); v7 = (char **)(v3 + 676); v8 = 4; do { sub_5A0960(*v7); ++v7; --v8; } while ( v8 ); sub_4E7790(*((_DWORD **)v3 + 193)); return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C7470) -------------------------------------------------------- int __stdcall sub_4C7470(int a1, __int16 *a2) { char *v2; // eax v2 = sub_664AB0(dword_AD8C90, *a2); if ( v2 ) sub_6AF890(&unk_B91250, (int)&a2, "HPSoulStone", *((_DWORD *)v2 + 175), flt_ACCFCC, 0); return a1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C74C0) -------------------------------------------------------- int __stdcall sub_4C74C0(int a1, __int16 *a2) { char *v2; // eax v2 = sub_664AB0(dword_AD8C90, *a2); if ( v2 ) sub_6AF890(&unk_B91250, (int)&a2, "SPSoulStone", *((_DWORD *)v2 + 175), flt_ACCFCC, 0); return a1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C7510) -------------------------------------------------------- int __thiscall sub_4C7510(int this, int a2, int a3) { int v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // eax char *v7; // eax int *v9; // [esp-4h] [ebp-24h] int v10; // [esp+4h] [ebp-1Ch] int v11; // [esp+8h] [ebp-18h] int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] char v15; // [esp+18h] [ebp-8h] v3 = this; v4 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)a3 == *v4 && *(_DWORD *)(a3 + 4) == v4[1] && *(_DWORD *)(a3 + 8) == v4[2] && *(_DWORD *)(a3 + 12) == v4[3] && *(_DWORD *)(a3 + 16) == v4[4] ) { v5 = *(_DWORD *)(a3 + 24); v10 = *(_DWORD *)(a3 + 20); v12 = *(_DWORD *)(a3 + 28); v14 = *(_DWORD *)(a3 + 36); v6 = *(unsigned __int16 *)(a3 + 40); v11 = v5; v13 = *(_DWORD *)(a3 + 32); v15 = 0; switch ( v6 ) { case 2369: case 2378: case 2379: return a2; case 2370: v9 = &v10; v7 = (char *)sub_40C190(1742195142); break; case 2371: v9 = &v10; v7 = (char *)sub_40C190(-588834787); break; case 2373: v9 = &v10; v7 = (char *)sub_40C190(1836934070); break; case 2374: v9 = &v10; v7 = (char *)sub_40C190(2023654015); break; case 2375: v9 = &v10; v7 = (char *)sub_40C190(831738218); break; case 2376: v9 = &v10; v7 = (char *)sub_40C190(1654830774); break; case 2377: sub_4920B0(v3, "DB Error", &v10); return a2; case 2380: v7 = (char *)sub_40A910(-653249739); break; case 2381: v7 = (char *)sub_40A910(560256217); break; case 2382: v7 = (char *)sub_40A910(-1731532249); break; default: v7 = (char *)sub_40C190(1894897646); break; } sub_4920B0(v3, v7, v9); } return a2; } //----- (004C76B0) -------------------------------------------------------- int __thiscall sub_4C76B0(_DWORD *this, int a2, int *a3) { int v3; // edi int v4; // ecx int v5; // edx int v6; // ecx int v7; // edx const char *v8; // eax _DWORD *v9; // eax volatile LONG *v11; // [esp+Ch] [ebp-148h] char v12; // [esp+10h] [ebp-144h] int v13; // [esp+18h] [ebp-13Ch] _DWORD *v14; // [esp+20h] [ebp-134h] char v15; // [esp+24h] [ebp-130h] int v16; // [esp+2Ch] [ebp-128h] _DWORD *v17; // [esp+34h] [ebp-120h] char v18; // [esp+38h] [ebp-11Ch] int v19; // [esp+138h] [ebp-1Ch] int v20; // [esp+13Ch] [ebp-18h] int v21; // [esp+140h] [ebp-14h] int v22; // [esp+144h] [ebp-10h] int v23; // [esp+148h] [ebp-Ch] char v24; // [esp+14Ch] [ebp-8h] v3 = (int)this; if ( *(_BYTE *)(this[216] + 11196) ) { v4 = a3[5]; v5 = a3[6]; v21 = a3[7]; v19 = v4; v6 = a3[8]; v20 = v5; v7 = a3[9]; v22 = v6; v23 = v7; v24 = 0; v8 = sub_40C190(-768596687); sprintf(&v18, v8, &v19); v11 = sub_462CA0(2, &v18); v9 = operator new(0x14u); if ( v9 ) { v9[4] = 0; v9[3] = 0; v9[2] = 0; v9[1] = 0; *v9 = 0; } else { v9 = 0; } *v9 = a3[5]; v9[1] = a3[6]; v9[2] = a3[7]; v9[3] = a3[8]; v9[4] = a3[9]; v17 = v9; v14 = v9; v16 = 118; v13 = 119; sub_461760(v11, v3, &v15, &v12); } else { sub_4C1BF0(this, a3[5], a3[6], a3[7], a3[8], a3[9], 0); } return a2; } //----- (004C77F0) -------------------------------------------------------- int __thiscall sub_4C77F0(int this, int a2, int a3) { int v3; // edx int v4; // eax int v5; // edi int v6; // ecx char *v7; // eax int *v9; // [esp-4h] [ebp-28h] int v10; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v3 = *(_DWORD *)(a3 + 28); v10 = *(_DWORD *)(a3 + 20); v13 = *(_DWORD *)(a3 + 32); v4 = *(unsigned __int16 *)(a3 + 40); v5 = this; v11 = *(_DWORD *)(a3 + 24); v6 = *(_DWORD *)(a3 + 36); v12 = v3; v14 = v6; v15 = 0; switch ( v4 ) { case 2385: sub_513AF0( *(int **)(v5 + 864), *(_DWORD *)(a3 + 20), *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36)); sub_510420( *(int **)(v5 + 1020), *(_DWORD *)(a3 + 20), *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36)); v9 = &v10; v7 = (char *)sub_40C190(2106828212); goto LABEL_6; case 2386: sub_4920B0(v5, " DB Error", &v10); return a2; case 2387: v9 = &v10; v7 = (char *)sub_40C190(2023654015); goto LABEL_6; case 2388: return a2; default: v7 = (char *)sub_40C190(-1970150455); LABEL_6: sub_4920B0(v5, v7, v9); break; } return a2; } //----- (004C7910) -------------------------------------------------------- int __thiscall sub_4C7910(int this, int a2, int a3) { int v3; // edi int v4; // eax int v5; // ecx int v6; // eax int v7; // ecx char *v8; // eax int v9; // ecx __int16 v11; // [esp+8h] [ebp-20h] char v12[4]; // [esp+Ch] [ebp-1Ch] int v13; // [esp+10h] [ebp-18h] int v14; // [esp+14h] [ebp-14h] int v15; // [esp+18h] [ebp-10h] int v16; // [esp+1Ch] [ebp-Ch] char v17; // [esp+20h] [ebp-8h] v3 = this; sub_513B20( *(_DWORD **)(this + 864), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); sub_510450( *(_DWORD **)(v3 + 1020), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); v4 = *(_DWORD *)a3; v5 = *(_DWORD *)(a3 + 4); v14 = *(_DWORD *)(a3 + 8); *(_DWORD *)v12 = v4; v6 = *(_DWORD *)(a3 + 12); v13 = v5; v7 = *(_DWORD *)(a3 + 16); v15 = v6; v16 = v7; v17 = 0; v8 = (char *)sub_40C190(1011622464); sub_4920B0(v3, v8, v12); sub_6BA650(&dword_AB6520, 13); v9 = *(_DWORD *)(v3 + 2340); v11 = 21533; sub_905F90(v9, &v11, 2u); sub_906000(*(_DWORD *)(v3 + 2340), 0, 0); return a2; } //----- (004C7A10) -------------------------------------------------------- int __thiscall sub_4C7A10(int this, int a2, int a3) { int v3; // edi int v4; // eax int v5; // ecx int v6; // eax int v7; // ecx char *v8; // eax char v10[4]; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] char v15; // [esp+1Ch] [ebp-8h] v3 = this; sub_513B50( *(_DWORD **)(this + 864), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); sub_510480( *(_DWORD **)(v3 + 1020), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); v4 = *(_DWORD *)a3; v5 = *(_DWORD *)(a3 + 4); v12 = *(_DWORD *)(a3 + 8); *(_DWORD *)v10 = v4; v6 = *(_DWORD *)(a3 + 12); v11 = v5; v7 = *(_DWORD *)(a3 + 16); v13 = v6; v14 = v7; v15 = 0; v8 = (char *)sub_40C190(1129456276); sub_4920B0(v3, v8, v10); return a2; } //----- (004C7AD0) -------------------------------------------------------- int __thiscall sub_4C7AD0(int this, int a2, int a3) { int v3; // edx int v4; // esi int v5; // eax char *v6; // eax char v8[4]; // [esp+4h] [ebp-1Ch] int v9; // [esp+8h] [ebp-18h] int v10; // [esp+Ch] [ebp-14h] int v11; // [esp+10h] [ebp-10h] int v12; // [esp+14h] [ebp-Ch] char v13; // [esp+18h] [ebp-8h] v3 = *(_DWORD *)(a3 + 4); v4 = this; *(_DWORD *)v8 = *(_DWORD *)a3; v10 = *(_DWORD *)(a3 + 8); v9 = v3; v5 = *(_DWORD *)(a3 + 16); v11 = *(_DWORD *)(a3 + 12); v12 = v5; v13 = 0; v6 = (char *)sub_40C190(505486130); sub_4920B0(v4, v6, v8); return a2; } //----- (004C7B40) -------------------------------------------------------- int __thiscall sub_4C7B40(int this, int a2, int a3) { int v3; // eax int v4; // edi int v5; // ecx int v6; // eax int v7; // ecx char *v8; // eax _DWORD *v9; // eax char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v3 = *(_DWORD *)a3; v4 = this; v5 = *(_DWORD *)(a3 + 4); v13 = *(_DWORD *)(a3 + 8); *(_DWORD *)v11 = v3; v6 = *(_DWORD *)(a3 + 12); v12 = v5; v7 = *(_DWORD *)(a3 + 16); v14 = v6; v15 = v7; v16 = 0; v8 = (char *)sub_40C190(2140503221); sub_4920B0(v4, v8, v11); v9 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)a3 != *v9 || *(_DWORD *)(a3 + 4) != v9[1] || *(_DWORD *)(a3 + 8) != v9[2] || *(_DWORD *)(a3 + 12) != v9[3] || *(_DWORD *)(a3 + 16) != v9[4] ) { sub_513AF0( *(int **)(v4 + 864), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); sub_510420( *(int **)(v4 + 1020), *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); } return a2; } //----- (004C7C30) -------------------------------------------------------- int __thiscall sub_4C7C30(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // edi _DWORD *v4; // ebx int v5; // eax int v6; // eax const CHAR *v7; // eax const CHAR *v9; // eax int v10; // ecx int v11; // esi _DWORD *v12; // edi int v13; // [esp+8h] [ebp-4h] int v14; // [esp+18h] [ebp+Ch] v3 = a3[1]; v4 = this; v5 = *a3 - 14016; v13 = a3[1]; v14 = (int)(a3 + 2); if ( v5 ) { v6 = v5 - 1; if ( !v6 ) { v9 = sub_4090F0(122959204); sub_492060(v4, (int)v9); return a2; } if ( v6 == 4 ) { v7 = sub_40C190(1396447817); sub_492060(v4, (int)v7); return a2; } } else { v10 = this[216]; if ( v10 ) { sub_510ED0(v10); sub_512D10((_DWORD *)v4[216]); v11 = 0; if ( v3 > 0 ) { v12 = (_DWORD *)v14; do { sub_513C70((_DWORD *)v4[216], v12, v11++); v12 += 18; } while ( v11 < v13 ); } } } return a2; } //----- (004C7CF0) -------------------------------------------------------- int __thiscall sub_4C7CF0(int this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // ecx int v5; // ebx int v6; // ST08_4 char *v7; // eax const CHAR *v9; // eax v3 = (_DWORD *)this; switch ( *(unsigned __int16 *)a3 ) { case 0x36C0u: v4 = *(_DWORD **)(this + 864); v5 = *(unsigned __int8 *)(a3 + 8); if ( !v4 ) return a2; sub_512090(v4, *(_DWORD *)(a3 + 2)); v6 = sub_49F760(*(unsigned __int16 *)(a3 + 6)) + 34; v7 = (char *)sub_4090F0(-665709785); sub_4920B0((int)v3, v7, v6, v5); return a2; case 0x36C1u: v9 = sub_4090F0(122959204); goto LABEL_8; case 0x36C2u: v9 = sub_4090F0(307638574); goto LABEL_8; case 0x36C3u: v9 = sub_4090F0(104673576); goto LABEL_8; case 0x36C4u: v9 = sub_40C190(543232885); LABEL_8: sub_492060(v3, (int)v9); break; default: return a2; } return a2; } //----- (004C7DB0) -------------------------------------------------------- int __thiscall sub_4C7DB0(int this, int a2, int a3) { int v3; // ST08_4 int v4; // esi char *v5; // eax v3 = *(_DWORD *)a3; v4 = this; v5 = (char *)sub_4090F0(2008145366); sub_4920B0(v4, v5, v3); return a2; } //----- (004C7DE0) -------------------------------------------------------- int __thiscall sub_4C7DE0(int this, int a2, int a3) { int v3; // esi char *v4; // eax char *v5; // eax char v7; // [esp+8h] [ebp-4h] v3 = this; v7 = 0; switch ( *(unsigned __int16 *)(a3 + 4) ) { case 0x991u: v4 = (char *)sub_40C190(826806066); sub_4920B0(v3, v4); v7 = 1; sub_6BA650(&dword_AB6520, 20); *(_WORD *)(*(_DWORD *)(v3 + 572) + 617) = 257; goto LABEL_13; case 0x992u: v5 = (char *)sub_40C190(2040516820); break; case 0x993u: v5 = (char *)sub_40C190(-505889715); break; case 0x994u: v5 = (char *)sub_40C190(-918680015); break; case 0x995u: v5 = (char *)sub_40C190(1736795256); break; case 0x996u: v5 = (char *)sub_40C190(1854108259); break; case 0x997u: v5 = (char *)sub_40C190(1667330002); break; case 0x998u: v5 = (char *)sub_40C190(-371338450); break; case 0x999u: goto LABEL_13; case 0x99Au: v5 = (char *)sub_40A910(-817692439); break; default: v5 = (char *)sub_40C190(-653932567); break; } sub_4920B0(v3, v5); LABEL_13: sub_60CC40(*(_DWORD *)(v3 + 768), *(_DWORD *)a3, v7); return a2; } //----- (004C7ED0) -------------------------------------------------------- int __thiscall sub_4C7ED0(int this, int a2, int a3) { int v3; // esi char *v4; // eax char *v6; // eax v3 = this; if ( *(_WORD *)(a3 + 4) == 2465 ) { v6 = (char *)sub_40C190(-925709498); sub_4920B0(v3, v6); *(_WORD *)(*(_DWORD *)(v3 + 572) + 617) = 256; } else if ( *(_WORD *)(a3 + 4) == 2466 ) { v4 = (char *)sub_40C190(1989663941); sub_4920B0(v3, v4); return a2; } return a2; } //----- (004C7F30) -------------------------------------------------------- int __thiscall sub_4C7F30(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v5; // eax v3 = this; if ( this[1292] ) { sub_4A5ED0(this, 1); sub_4342E0((char *)v3[1292], *(_BYTE *)a3 != 0); sub_4341A0((char *)v3[1292], 0, *(_DWORD *)(a3 + 6)); sub_434280((_BYTE *)v3[1292], 0, *(_DWORD *)(a3 + 2)); sub_4341A0((char *)v3[1292], 1, *(_DWORD *)(a3 + 14)); sub_434280((_BYTE *)v3[1292], 1, *(_DWORD *)(a3 + 10)); switch ( *(unsigned __int16 *)(a3 + 18) ) { case 0x23u: case 0x26u: sub_4344D0((_DWORD *)v3[1292], *(unsigned __int8 *)(a3 + 1)); return a2; case 0x24u: v5 = sub_4090F0(-131998703); break; case 0x2Au: v5 = sub_4090F0(-436753625); break; default: return a2; } sub_434320((_DWORD *)v3[1292], (int)v5); } return a2; } //----- (004C8020) -------------------------------------------------------- int __thiscall sub_4C8020(_DWORD *this, int a2, unsigned int *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( this[1292] ) { sub_4A5ED0(this, 1); sub_4342E0((char *)v3[1292], 0); sub_4341A0((char *)v3[1292], 0, a3[1]); sub_434280((_BYTE *)v3[1292], 0, *a3); sub_4341A0((char *)v3[1292], 1, a3[3]); sub_434280((_BYTE *)v3[1292], 1, a3[2]); v4 = sub_4090F0(-131998703); sub_434320((_DWORD *)v3[1292], (int)v4); } return a2; } //----- (004C80B0) -------------------------------------------------------- int __thiscall sub_4C80B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi const CHAR *v4; // eax _DWORD *v6; // ecx __int16 v7; // ax __int16 v8; // dx unsigned int v9; // eax int v10; // eax unsigned int v11; // eax const CHAR *v12; // eax int v13; // [esp+8h] [ebp-8h] int v14; // [esp+Ch] [ebp-4h] v3 = this; if ( *(_WORD *)(a3 + 5) != 2489 ) { if ( *(_WORD *)(a3 + 5) == 2491 ) { v4 = sub_40C190(-264367844); goto LABEL_5; } if ( *(_WORD *)(a3 + 5) != 2529 ) { v4 = sub_40C190(-385076149); LABEL_5: sub_492060(v3, (int)v4); sub_5C6680((_DWORD **)v3[253], (_WORD *)a3); return a2; } } if ( *(_BYTE *)(a3 + 4) ) v6 = (_DWORD *)this[253]; else v6 = (_DWORD *)this[254]; v7 = *(_WORD *)(a3 + 2); v8 = *(_WORD *)(a3 + 2) >> 10; if ( v8 == 9 ) { v9 = v7 & 0x3FF; if ( v9 < 0xC0 ) { v10 = dword_ADA234[v9]; goto LABEL_16; } } else if ( v8 == 8 ) { v11 = v7 & 0x3FF; if ( v11 < 0x1E ) { v10 = dword_ADA534[v11]; LABEL_16: if ( v10 ) sub_5C67C0(v6, a3, v10); goto LABEL_18; } } LABEL_18: if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } nullsub_30(&dword_ACE484); v12 = sub_40C190(1953263335); sub_492060(v3, (int)v12); v13 = 3; v14 = 0; sub_6B69F0(dword_AB6534, (int)&v13, 0.0, 0); return a2; } // 6D0CF0: using guessed type int __thiscall nullsub_30(_DWORD); // AB6534: using guessed type int dword_AB6534; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ADA534: using guessed type int dword_ADA534[]; //----- (004C8210) -------------------------------------------------------- int __thiscall sub_4C8210(_DWORD **this, int a2, int *a3) { _DWORD **v3; // esi int v4; // eax const CHAR *v5; // eax v3 = this; if ( this[287] ) { sub_8F86A0(&unk_BA6B10, this[287]); sub_8F82A0(&unk_BA6B10, v3[287]); } v4 = *a3; if ( *a3 == 8224 ) { v5 = sub_40A910(-2002760365); LABEL_11: sub_5DE410((_DWORD **)v3[287], (int)v5); return a2; } switch ( v4 ) { case 8227: v5 = sub_40A910(-568456976); goto LABEL_11; case 8225: v5 = sub_40A910(237306620); goto LABEL_11; case 8226: v5 = sub_40A910(-1125472595); goto LABEL_11; } return a2; } //----- (004C82D0) -------------------------------------------------------- char __thiscall sub_4C82D0(const char *this, char a2, int a3, int a4, int a5, int a6, void *a7, void *a8) { const char *v8; // ebx const char *v9; // esi const char *v10; // edi signed int v11; // eax char *v12; // eax int v14; // ecx signed int v15; // eax signed int v16; // eax __int16 v17; // [esp+Ch] [ebp-11Ch] int v18; // [esp+10h] [ebp-118h] char v19; // [esp+14h] [ebp-114h] int v20; // [esp+114h] [ebp-14h] int v21; // [esp+118h] [ebp-10h] int v22; // [esp+11Ch] [ebp-Ch] int v23; // [esp+120h] [ebp-8h] v8 = (const char *)a8; v9 = this; v10 = (const char *)a7; v11 = (unsigned __int16)strlen(this + 2660); if ( v11 >= 2048 ) { v18 = 2048; } else { v18 = v11; if ( !(_WORD)v11 ) { v12 = (char *)sub_40C190(-566482141); return (unsigned int)sub_462CA0(1, v12); } } v14 = *((_DWORD *)v9 + 585); v17 = -32767; sub_905F90(v14, &v17, 2u); sub_905F90(*((_DWORD *)v9 + 585), &a2, 0x14u); v20 = 0; v21 = 0; v22 = 0; v23 = 0; v15 = strlen(v10); if ( v15 >= 16 ) v15 = 16; memcpy(&v20, v10, v15); sub_905F90(*((_DWORD *)v9 + 585), &v20, 0x10u); memset(&v19, 0, 0x100u); v16 = strlen(v8); if ( v16 >= 256 ) v16 = 256; memcpy(&v19, v8, v16); sub_905F90(*((_DWORD *)v9 + 585), &v19, 0x100u); sub_905F90(*((_DWORD *)v9 + 585), &v18, 2u); sub_905F90(*((_DWORD *)v9 + 585), (void *)(v9 + 2660), (unsigned __int16)v18); return sub_906000(*((_DWORD *)v9 + 585), 0, 0); } //----- (004C8470) -------------------------------------------------------- int __thiscall sub_4C8470(_DWORD *this, int a2, int a3) { int v3; // esi _DWORD *v4; // edi _DWORD *v5; // ecx char *v6; // eax __int16 v8; // [esp+8h] [ebp-4h] v3 = a3; v4 = this; v5 = (_DWORD *)this[264]; if ( *(_WORD *)(a3 + 24) == 3904 ) { if ( v5 ) sub_597150(v5, *(_DWORD *)(a3 + 20)); } else { if ( v5 ) sub_597220((_DWORD **)v5); switch ( *(unsigned __int16 *)(v3 + 24) ) { case 0xF41u: v6 = (char *)sub_40C190(-316401549); goto LABEL_14; case 0xF42u: v6 = (char *)sub_40C190(236885669); goto LABEL_14; case 0xF43u: v6 = (char *)sub_40C190(1751116755); goto LABEL_14; case 0xF44u: v6 = (char *)sub_40C190(1735648986); goto LABEL_14; case 0xF45u: v6 = (char *)sub_40C190(-1294866470); goto LABEL_14; case 0xF46u: v6 = (char *)sub_40C190(-1228937183); goto LABEL_14; case 0xF58u: v6 = (char *)sub_40C190(-723960768); LABEL_14: sub_462CA0(1, v6); break; default: break; } } v8 = -32763; sub_905F90(v4[585], &v8, 2u); sub_906000(v4[585], (char *)&a3 + 3, 1u); return a2; } //----- (004C8570) -------------------------------------------------------- int __thiscall sub_4C8570(_DWORD ***this, int a2, __int16 *a3) { _DWORD ***v3; // ebx __int16 v4; // ax int v5; // ecx const CHAR *v6; // eax int v7; // ecx const CHAR *v8; // eax char *v9; // eax char v11; // [esp+8h] [ebp-84h] v3 = this; sub_596500(this[264], 1); v4 = *a3; if ( *a3 == 3904 ) { v5 = (int)v3[264]; if ( v5 ) { sub_597040(v5, 1); sub_596460(v3[264], *(_DWORD *)(a3 + 1)); v6 = sub_40C190(-381402828); (*(void (__stdcall **)(const CHAR *))(*v3[264][89] + 472))(v6); if ( *((_BYTE *)a3 + 6) ) { if ( *((_BYTE *)a3 + 6) == 1 ) { sub_596500(v3[264], 0); sub_40C190(876449166); sub_596440(v3[264]); } else if ( *((_BYTE *)a3 + 6) == 2 ) { sub_596500(v3[264], 0); sub_40C190(-369539022); sub_596440(v3[264]); } } else { sub_40C190(777148293); sub_596440(v3[264]); sub_40C190(825637691); sub_5964E0(v3[264]); } qmemcpy(&v11, (char *)a3 + 7, 0x80u); sub_5964C0(v3[264]); (*(void (__stdcall **)(_DWORD))(*v3[264][95] + 240))(0); if ( !((unsigned __int8 (*)(void))(*v3[264])[65])() ) sub_8F82A0(&unk_BA6B10, v3[264]); } } else if ( v4 == 3936 ) { v7 = (int)v3[264]; if ( v7 ) { sub_597040(v7, 0); if ( !((unsigned __int8 (*)(void))(*v3[264])[65])() ) sub_8F82A0(&unk_BA6B10, v3[264]); sub_40C190(-385795013); sub_5964E0(v3[264]); (*(void (__stdcall **)(signed int))(*v3[264][95] + 240))(1); v8 = sub_40C190(-319731154); (*(void (__stdcall **)(const CHAR *))(*v3[264][89] + 472))(v8); } } else if ( v4 == 3928 ) { v9 = (char *)sub_40C190(943996236); sub_462CA0(1, v9); } return a2; } //----- (004C87D0) -------------------------------------------------------- int __thiscall sub_4C87D0(_DWORD *this, int a2, int a3) { int *v3; // edi _DWORD *v4; // esi int v5; // ecx char *v6; // eax int v7; // ecx int result; // eax char *v9; // eax __int16 v10; // [esp+8h] [ebp-4h] v3 = (int *)a3; v4 = this; if ( *(_WORD *)(a3 + 4) == 3904 ) { v5 = this[264]; if ( v5 ) { sub_597040(v5, 1); sub_596460((_DWORD *)v4[264], *v3); } v6 = (char *)sub_40C190(37499414); sub_462CA0(1, v6); v7 = v4[585]; v10 = -32763; sub_905F90(v7, &v10, 2u); sub_906000(v4[585], (char *)&a3 + 3, 1u); result = a2; } else { v9 = (char *)sub_40C190(-1008146150); sub_462CA0(1, v9); result = a2; } return result; } //----- (004C8870) -------------------------------------------------------- char __thiscall sub_4C8870(_DWORD *this, int a2, int a3, int a4, int a5, int a6, __int16 a7, int a8, int a9) { _DWORD *v9; // esi int v10; // ecx __int16 v12; // [esp+8h] [ebp-70h] int v13; // [esp+Ch] [ebp-6Ch] int v14; // [esp+10h] [ebp-68h] int v15; // [esp+14h] [ebp-64h] int v16; // [esp+18h] [ebp-60h] int v17; // [esp+1Ch] [ebp-5Ch] __int16 v18; // [esp+20h] [ebp-58h] char v19; // [esp+22h] [ebp-56h] char v20; // [esp+32h] [ebp-46h] v9 = this; v13 = a2; v14 = a3; v15 = a4; v16 = a5; v17 = a6; v18 = a7; sprintf(&v19, "%s", a8); sprintf(&v20, "%s", a9); v10 = v9[585]; v12 = 31745; sub_905F90(v10, &v12, 2u); return sub_906000(v9[585], &v13, 0x66u); } //----- (004C8910) -------------------------------------------------------- int __stdcall sub_4C8910(int a1, int a2) { int v2; // eax char *v3; // eax v2 = *(unsigned __int16 *)(a2 + 20); if ( (_WORD)v2 != 3456 ) { switch ( v2 ) { case 3457: v3 = (char *)sub_40C190(-2139448214); goto LABEL_11; case 3458: v3 = (char *)sub_40C190(1546358); goto LABEL_11; case 3459: v3 = (char *)sub_40C190(1300797298); goto LABEL_11; case 3460: v3 = (char *)sub_40C190(1384682853); goto LABEL_11; case 3461: v3 = (char *)sub_40C190(-991493666); goto LABEL_11; case 3462: v3 = (char *)sub_40C190(-1068421346); goto LABEL_11; case 3463: v3 = (char *)sub_40C190(1793651919); goto LABEL_11; case 3464: v3 = (char *)sub_40C190(2056757980); LABEL_11: sub_462CA0(1, v3); break; default: return a1; } } return a1; } //----- (004C89C0) -------------------------------------------------------- int __thiscall sub_4C89C0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // edi int v4; // ST10_4 const char *v5; // eax float *v6; // ecx const CHAR *v7; // eax int v8; // ecx __int16 v10; // [esp+8h] [ebp-108h] char v11; // [esp+Ch] [ebp-104h] char v12; // [esp+Dh] [ebp-103h] v3 = this; v11 = 0; memset(&v12, 0, 0xFFu); v4 = (unsigned __int16)*a3; v5 = sub_40C190(979011469); sprintf(&v11, v5, v4, a3 + 1, a3 + 9); sub_462CA0(1, &v11); v6 = (float *)v3[265]; if ( v6 ) sub_58EC50(v6, 60 * (unsigned __int16)*a3); if ( *a3 ) { if ( dword_B9DCC4 ) { v8 = v3[585]; v10 = 14346; sub_906000(v8, &v10, 2u); } else { v7 = sub_40C190(2107436777); sub_492060(v3, (int)v7); } } return a2; } // B9DCC4: using guessed type int dword_B9DCC4; //----- (004C8AB0) -------------------------------------------------------- int __stdcall sub_4C8AB0(int a1, int a2) { char *v2; // eax v2 = (char *)sub_40C190(-2003591229); sub_462CA0(1, v2); return a1; } //----- (004C8AD0) -------------------------------------------------------- char __thiscall sub_4C8AD0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, __int16 a7, int a8, int a9) { _DWORD *v9; // esi int v10; // ecx __int16 v12; // [esp+8h] [ebp-70h] int v13; // [esp+Ch] [ebp-6Ch] int v14; // [esp+10h] [ebp-68h] int v15; // [esp+14h] [ebp-64h] int v16; // [esp+18h] [ebp-60h] int v17; // [esp+1Ch] [ebp-5Ch] __int16 v18; // [esp+20h] [ebp-58h] char v19; // [esp+22h] [ebp-56h] char v20; // [esp+32h] [ebp-46h] v9 = this; v13 = a2; v14 = a3; v15 = a4; v16 = a5; v17 = a6; v18 = a7; sprintf(&v19, "%s", a8); sprintf(&v20, "%s", a9); v10 = v9[585]; v12 = 31753; sub_905F90(v10, &v12, 2u); return sub_906000(v9[585], &v13, 0x66u); } //----- (004C8B70) -------------------------------------------------------- int __stdcall sub_4C8B70(int a1, int a2) { int v2; // eax char *v3; // eax v2 = *(unsigned __int16 *)(a2 + 20); if ( (_WORD)v2 != 3488 ) { switch ( v2 ) { case 3463: v3 = (char *)sub_40C190(1793651919); goto LABEL_10; case 3489: v3 = (char *)sub_40C190(-1987780414); goto LABEL_10; case 3490: v3 = (char *)sub_40C190(-454774867); goto LABEL_10; case 3491: v3 = (char *)sub_40C190(-2071155248); goto LABEL_10; case 3492: v3 = (char *)sub_40C190(-2105560368); goto LABEL_10; case 3493: v3 = (char *)sub_40C190(-285727697); goto LABEL_10; case 3494: v3 = (char *)sub_40C190(-1068421346); LABEL_10: sub_462CA0(1, v3); break; default: return a1; } } return a1; } //----- (004C8C40) -------------------------------------------------------- int __thiscall sub_4C8C40(_DWORD *this, int a2, __int16 *a3) { __int16 v3; // ax _DWORD *v4; // esi const CHAR *v6; // eax const CHAR *v7; // ST00_4 v3 = *a3; v4 = this; if ( *a3 == 4417 ) { if ( *sub_40C190(1279541885) ) { v7 = sub_40C190(1279541885); sub_492060(v4, (int)v7); } else { sub_492060(v4, (int)"Unknown text"); } *(_BYTE *)(v4[153] + 390) = 1; return a2; } if ( v3 == 4419 ) { if ( !*sub_40C190(1755809411) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(1755809411); goto LABEL_6; } if ( v3 == 4420 ) { if ( !*sub_40C190(1045376585) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(1045376585); LABEL_6: sub_492060(v4, (int)v6); return a2; } if ( v3 != 4422 ) return a2; if ( *sub_40C190(-2051372307) ) { v6 = sub_40C190(-2051372307); goto LABEL_6; } sub_492060(v4, (int)"Unknown Text"); return a2; } //----- (004C8D60) -------------------------------------------------------- int __thiscall sub_4C8D60(_BYTE **this, int a2, __int16 *a3) { __int16 v3; // ax _DWORD *v4; // esi const CHAR *v6; // eax v3 = *a3; v4 = this; if ( *a3 == 4417 ) { sub_5C8D00(this[153], 1); *(_DWORD *)(v4[153] + 412) = *(_DWORD *)(v4[153] + 408); if ( !*sub_40C190(-1549894235) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(-1549894235); goto LABEL_21; } switch ( v3 ) { case 4420: if ( !*sub_40C190(1045376585) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(1045376585); LABEL_21: sub_492060(v4, (int)v6); return a2; case 4422: if ( !*sub_40C190(-2051372307) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(-2051372307); goto LABEL_21; case 4421: if ( !*sub_40C190(-1735617160) ) { sub_492060(v4, (int)"Unknown"); return a2; } v6 = sub_40C190(-1735617160); goto LABEL_21; case 4419: if ( !*sub_40C190(2058342152) ) { sub_492060(v4, (int)"Unknown Text"); return a2; } v6 = sub_40C190(2058342152); goto LABEL_21; } return a2; } //----- (004C8ED0) -------------------------------------------------------- int __thiscall sub_4C8ED0(_DWORD *this, int a2, unsigned __int8 *a3) { unsigned __int8 *v3; // esi bool v4; // zf int v5; // ebx char v6; // al int v7; // edx char v8; // ST10_1 int v9; // eax int v10; // eax size_t v11; // eax void *v12; // eax _DWORD *v13; // edi const CHAR *v14; // eax int v15; // ecx int v17; // [esp+18h] [ebp-28h] const CHAR *v18; // [esp+1Ch] [ebp-24h] const CHAR *v19; // [esp+20h] [ebp-20h] const CHAR *v20; // [esp+24h] [ebp-1Ch] int v21; // [esp+28h] [ebp-18h] float v22; // [esp+2Ch] [ebp-14h] float v23; // [esp+30h] [ebp-10h] _DWORD *v24; // [esp+34h] [ebp-Ch] float v25; // [esp+38h] [ebp-8h] int v26; // [esp+3Ch] [ebp-4h] v3 = a3; v4 = *a3 == 0; v24 = this; v26 = 0; if ( !v4 ) { v5 = (int)(a3 + 10); do { v6 = *(_BYTE *)(v5 + 12); v7 = *(unsigned __int16 *)(v5 - 6); v21 = *(int *)(v5 - 4); v22 = *(float *)v5; v23 = *(float *)(v5 + 4); v8 = v6; v9 = *(unsigned __int16 *)(v5 - 8); v25 = *(float *)(v5 + 8); if ( sub_6DE850(byte_ADB468, v9, v7, (int)&v21, v25, v8, 1) != 1 ) { v18 = &byte_9A8050; v19 = &byte_9A8050; v20 = &byte_9A8050; v17 = -1243729871; v10 = *(_DWORD *)(dword_AC9C80 + 56); if ( v10 ) v11 = *(_DWORD *)(v10 + 40); else v11 = 0; v12 = bsearch(&v17, dword_ACB3A4, v11, 0x10u, sub_4508B0); v13 = v12; if ( v12 ) { if ( strcmp(*((const char **)v12 + 2), "None") ) sub_6BA890(&dword_AB6520, v13[2]); if ( strcmp((const char *)v13[3], "None") ) sub_6BA680(&dword_AB6520, v13[3]); v14 = (const CHAR *)v13[1]; } else { v14 = &byte_9A8050; } sub_492060(v24, (int)v14); v3 = a3; } v15 = *v3; v5 += 21; ++v26; } while ( v26 < v15 ); } if ( v3[1] == -1 ) { HIBYTE(a3) = 1; sub_6F3D10(&off_AB7F2C, 35, 29, (char *)&a3 + 3, 1u); } return a2; } // AB7F2C: using guessed type void **off_AB7F2C; // AC9C80: using guessed type int dword_AC9C80; //----- (004C9060) -------------------------------------------------------- int __stdcall sub_4C9060(int a1, _BYTE *a2) { char *v2; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi if ( *a2 == 1 ) { sub_6DFA50(byte_ADB468, 1); if ( dword_ADB4F8 == 1 ) { v2 = (char *)sub_40A910(1921615530); sub_4DC730(byte_ADB468, v2); return a1; } } else { if ( dword_ADB4F8 == 1 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_ADB568); v4 = (void (__thiscall ***)(_DWORD, signed int))dword_ADB568; if ( dword_ADB568 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_ADB568 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } dword_ADB568 = 0; } } sub_6DFA50(byte_ADB468, 1); } return a1; } // ADB4F8: using guessed type int dword_ADB4F8; // ADB568: using guessed type int dword_ADB568; //----- (004C9100) -------------------------------------------------------- char __thiscall sub_4C9100(_DWORD *this, __int16 a2, const char *a3) { _DWORD *v3; // esi const CHAR *v4; // eax __int16 v6; // [esp+8h] [ebp-10h] int v7; // [esp+Ah] [ebp-Eh] int v8; // [esp+Eh] [ebp-Ah] char v9; // [esp+12h] [ebp-6h] v6 = a2; v7 = 0; v8 = 0; v9 = 0; v3 = this; strcpy((char *)&v7, a3); if ( byte_AD8CD8 && sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; v4 = sub_40C190(1111582330); sub_492060(v3, (int)v4); sub_4A57D0(v3, 0); } return sub_6F3D10(&off_AB7F2C, 35, 16, &v6, 0xBu); } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004C91C0) -------------------------------------------------------- int __thiscall sub_4C91C0(_DWORD *this, int a2, char a3) { unsigned __int8 *v3; // eax _DWORD *v4; // esi int v5; // edi const CHAR *v6; // eax v3 = (unsigned __int8 *)a3; v4 = this; byte_ADB56C = *(_BYTE *)a3; *(_DWORD *)(this[271] + 432) = (unsigned __int8)byte_ADB56C; v5 = this[272]; _itoa(*v3, &a3, 10); (*(void (__stdcall **)(char *))(**(_DWORD **)(v5 + 364) + 460))(&a3); sub_6EB000((_DWORD *)v4[271]); v6 = sub_40A910(524045198); sub_492060(v4, (int)v6); return a2; } // ADB56C: using guessed type char byte_ADB56C; //----- (004C9240) -------------------------------------------------------- int __thiscall sub_4C9240(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; (*(void (__stdcall **)(int))(**(_DWORD **)(this[271] + 456) + 472))(a3 + 1); (*(void (__stdcall **)(int))(**(_DWORD **)(v3[272] + 372) + 460))(a3 + 1); v4 = sub_40A910(1803914448); sub_492060(v3, (int)v4); return a2; } //----- (004C92A0) -------------------------------------------------------- int __thiscall sub_4C92A0(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 ) v4 = sub_40A910(658849686); else v4 = sub_40A910(-487893969); sub_492060(v3, (int)v4); *(_BYTE *)(*(_DWORD *)(v3[272] + 356) + 380) = *a3 != 0; *(_BYTE *)(v3[271] + 428) = *a3 != 0; return a2; } //----- (004C9300) -------------------------------------------------------- int __thiscall sub_4C9300(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // ecx int v5; // eax _DWORD *v6; // eax int v7; // ecx int v8; // edx int v9; // ebx _DWORD *v10; // esi float v11; // ST20_4 const CHAR *v12; // eax int v13; // ecx char v15; // [esp+14h] [ebp-Ch] float v16; // [esp+2Ch] [ebp+Ch] v3 = this; if ( *(_WORD *)(a3 + 4) == 6768 ) { v4 = this[275]; v5 = sub_6E5CC0(*(unsigned __int16 *)(v3[281] + 346)); if ( !v5 ) goto LABEL_13; *(_DWORD *)(v5 + 33) = *(_DWORD *)a3; v6 = (_DWORD *)sub_6E2400(&unk_ADB488, *(_WORD *)(v3[281] + 346)); if ( v6 ) { v7 = v6[16]; if ( v7 ) { if ( *(_BYTE *)(v7 + 12) && (v8 = *(_DWORD *)(v7 + 8)) != 0 ) v9 = *(_DWORD *)(v8 + 12); else v9 = *(_DWORD *)(v7 + 4); v16 = flt_ACCFCC; v10 = sub_4DC6F0(v6, &v15); v11 = sub_6AB100(&unk_B91250, "InMyHome_Repair01", v9); sub_6AF370( &unk_B91250, "InMyHome_Repair01", *v10, v10[1], v10[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, v16, v11); } } v12 = sub_40A910(791645580); } else { v12 = sub_41A850(*(unsigned __int16 *)(a3 + 4)); } sub_492060(v3, (int)v12); LABEL_13: sub_6F00F0((_BYTE *)v3[281]); sub_6DCBA0((int)byte_ADB468, 0xFFFF); v13 = v3[281]; if ( v13 ) sub_6F0090(v13, 0xFFFF); return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C9460) -------------------------------------------------------- int __thiscall sub_4C9460(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx int v4; // eax int v5; // esi int v6; // ST04_4 int v7; // ST00_4 _DWORD **v8; // eax const CHAR *v10; // eax v3 = this; if ( *(_WORD *)a3 != 4672 ) { if ( *(_WORD *)a3 == 4674 ) { v10 = sub_40C190(1988193177); sub_492060(v3, (int)v10); } return a2; } if ( sub_62F590(a3) != 1 ) return a2; v4 = sub_6D3800(); v5 = v4; if ( v4 ) { *(_DWORD *)(v4 + 2736) = *(_DWORD *)(a3 + 10); *(_DWORD *)(v4 + 2740) = *(_DWORD *)(a3 + 14); } if ( sub_6D3890() ) { v6 = *(_DWORD *)(v5 + 2740); v7 = *(_DWORD *)(v5 + 2736); v8 = (_DWORD **)sub_6D3890(); sub_5FA1B0(v8, v7, v6); } sub_4A7D80((_DWORD **)v3); return a2; } //----- (004C9590) -------------------------------------------------------- int __stdcall sub_4C9590(int a1, int a2) { char *v2; // eax int v3; // edi int v4; // esi char *v5; // ebx int v6; // esi int v7; // edx _DWORD *v8; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = *(unsigned __int16 *)(a2 + 10); v4 = dword_ACB230; v5 = v2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v7 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v7 + 4 * v3) ) v6 = *(_DWORD *)(v7 + 4 * v3); else v6 = 0; } else { v6 = 0; } } else { v6 = 0; } if ( v5 && v6 ) { v8 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); sub_6AF370( &unk_B91250, (char *)(v6 + 2), *v8, v8[1], v8[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } return 0; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACB230: using guessed type int dword_ACB230; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004C9660) -------------------------------------------------------- int __thiscall sub_4C9660(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // edi const CHAR *v5; // eax int result; // eax const char *v7; // eax v3 = this; if ( *a3 == 5760 ) { v4 = this[282]; sub_55C470((_DWORD *)this[282]); *(_DWORD *)(v4 + 440) = 0; v5 = sub_40C190(781748338); sub_492060(v3, (int)v5); result = a2; } else { v7 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v7); result = a2; *(_DWORD *)(v3[282] + 440) = 0; } return result; } //----- (004C96E0) -------------------------------------------------------- int __thiscall sub_4C96E0(_DWORD **this, int a2, unsigned __int16 *a3) { _DWORD **v3; // edi __int16 v4; // cx const char *v5; // eax char *v6; // eax char *v7; // eax int result; // eax const char *v9; // eax int v10; // eax int v11; // ecx int v12; // eax int v13; // ecx char *v14; // eax char *v15; // eax char v16; // [esp+4h] [ebp-5Ch] char v17[4]; // [esp+44h] [ebp-1Ch] int v18; // [esp+48h] [ebp-18h] int v19; // [esp+4Ch] [ebp-14h] int v20; // [esp+50h] [ebp-10h] int v21; // [esp+54h] [ebp-Ch] char v22; // [esp+58h] [ebp-8h] v3 = this; v4 = *a3; if ( *a3 == 5952 || v4 == 5969 ) { sub_52E2A0(v3[222], (int)(a3 + 1)); v10 = *(_DWORD *)(a3 + 1); v11 = *(_DWORD *)(a3 + 3); v19 = *(_DWORD *)(a3 + 5); *(_DWORD *)v17 = v10; v12 = *(_DWORD *)(a3 + 7); v18 = v11; v13 = *(_DWORD *)(a3 + 9); v20 = v12; v21 = v13; v22 = 0; v14 = (char *)sub_40C190(2077080791); v15 = sub_7549E0(v14, v17); sub_492060(v3, (int)v15); result = a2; } else { if ( v4 == 5962 ) { v5 = sub_40A910(-1768432428); strftime(&v16, 0x1Fu, v5, (const struct tm *)(a3 + 16)); v6 = (char *)sub_40C190(1660071856); v7 = sub_7549E0(v6, &v16); sub_492060(v3, (int)v7); } else { v9 = sub_41A850(*a3); sub_492060(v3, (int)v9); } result = a2; } return result; } //----- (004C9810) -------------------------------------------------------- int __thiscall sub_4C9810(char **this, int a2, int *a3) { char **v3; // edi int v4; // edx int v5; // eax int v6; // edx int v7; // eax char *v8; // eax char *v9; // eax const char *v10; // eax char v12[4]; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] char v17; // [esp+1Ch] [ebp-8h] v3 = this; if ( *((_WORD *)a3 + 10) == 5952 ) { v4 = *a3; v5 = a3[1]; v14 = a3[2]; *(_DWORD *)v12 = v4; v6 = a3[3]; v13 = v5; v7 = a3[4]; v15 = v6; v16 = v7; v17 = 0; v8 = (char *)sub_40C190(-599253454); v9 = sub_7549E0(v8, v12); sub_492060(v3, (int)v9); sub_52E2D0(v3[222], *a3, a3[1], a3[2], a3[3], a3[4]); } else { v10 = sub_41A850(*((unsigned __int16 *)a3 + 10)); sub_492060(v3, (int)v10); } return a2; } //----- (004C98D0) -------------------------------------------------------- int __thiscall sub_4C98D0(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi char v4; // al void *v5; // eax _DWORD *v6; // ecx char *v7; // eax const char *v9; // eax char v10; // [esp+4h] [ebp-1Ch] char v11; // [esp+18h] [ebp-8h] v3 = this; if ( *(_WORD *)(a3 + 1) == 5952 ) { v4 = *a3; if ( !*a3 ) { v5 = (void *)sub_40C190(-201539279); LABEL_9: sub_492060(v3, (int)v5); goto LABEL_10; } if ( v4 == 1 ) { v6 = (_DWORD *)(this[222] + 376); if ( v3[222] != -376 ) { sub_4169E0(v6, (int)&v10); v11 = 0; v7 = (char *)sub_40C190(1312700252); v5 = sub_7549E0(v7, &v10); goto LABEL_9; } } else if ( v4 == 2 ) { v5 = (void *)sub_40C190(422647597); goto LABEL_9; } LABEL_10: sub_52E300((char *)v3[222]); return a2; } v9 = sub_41A850(*(unsigned __int16 *)(a3 + 1)); sub_492060(v3, (int)v9); return a2; } //----- (004C99A0) -------------------------------------------------------- int __thiscall sub_4C99A0(_DWORD **this, int a2, int *a3) { _DWORD **v3; // edi _BYTE *v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // ebx int v6; // eax int v7; // ecx int v8; // eax int v9; // ecx char *v10; // eax char *v11; // eax volatile LONG *v12; // eax _DWORD *v13; // ecx int v14; // ecx int v15; // esi int v17; // [esp+10h] [ebp-30h] char v18; // [esp+17h] [ebp-29h] char v19[4]; // [esp+18h] [ebp-28h] int v20; // [esp+1Ch] [ebp-24h] int v21; // [esp+20h] [ebp-20h] int v22; // [esp+24h] [ebp-1Ch] int v23; // [esp+28h] [ebp-18h] char v24; // [esp+2Ch] [ebp-14h] int v25; // [esp+3Ch] [ebp-4h] v3 = this; v4 = (_BYTE *)*sub_4A3B80(&v17); v25 = 0; v18 = sub_6C4EE0(v4); v25 = -1; if ( v17 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v17; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } if ( !v18 ) { sub_52E7A0(v3[222], *a3, a3[1], a3[2], a3[3], a3[4], a3[5], a3[6], a3[7], a3[8], a3[9]); v6 = *a3; v7 = a3[1]; v21 = a3[2]; *(_DWORD *)v19 = v6; v8 = a3[3]; v20 = v7; v9 = a3[4]; v22 = v8; v23 = v9; v24 = 0; v10 = (char *)sub_40C190(927534894); v11 = sub_7549E0(v10, v19); v12 = sub_462CA0(6, v11); v13 = v3[222]; if ( v13 ) v14 = (int)(v13 + 58); else v14 = 0; v15 = (int)(v12 + 58); (**((void (__thiscall ***)(int, int))v12 + 58))((int)(v12 + 58), v14); (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v15 + 8))(v15, v3[224]); v3[224] = (_DWORD *)((char *)v3[224] + 1); } return a2; } //----- (004C9B10) -------------------------------------------------------- int __thiscall sub_4C9B10(char **this, int a2, int a3) { char **v3; // edi int v4; // ecx int v5; // edx char v6; // al int v7; // ecx char *v8; // eax void *v9; // eax char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v3 = this; if ( a3 ) { v4 = *(_DWORD *)(a3 + 4); v5 = *(_DWORD *)(a3 + 8); *(_DWORD *)v11 = *(_DWORD *)a3; v14 = *(_DWORD *)(a3 + 12); v6 = *(_BYTE *)(a3 + 20); v12 = v4; v7 = *(_DWORD *)(a3 + 16); v13 = v5; v15 = v7; v16 = 0; if ( v6 == 1 ) { v8 = (char *)sub_40C190(-1935176752); } else if ( v6 == 2 ) { v8 = (char *)sub_40C190(-1529493553); } else { if ( v6 ) { LABEL_12: sub_52E2D0( v3[222], *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16)); return a2; } if ( sub_4169A0((_DWORD *)a3, (_DWORD *)v3[222] + 94) ) { v9 = (void *)sub_40C190(-201539279); LABEL_11: sub_492060(v3, (int)v9); goto LABEL_12; } v8 = (char *)sub_40C190(-599253454); } v9 = sub_7549E0(v8, v11); goto LABEL_11; } return a2; } //----- (004C9C00) -------------------------------------------------------- int __thiscall sub_4C9C00(_DWORD **this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi const char *v4; // eax int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx char *v10; // eax char *v11; // eax char v12[4]; // [esp+4h] [ebp-1Ch] int v13; // [esp+8h] [ebp-18h] int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] int v16; // [esp+14h] [ebp-Ch] char v17; // [esp+18h] [ebp-8h] v3 = this; if ( a3 ) { if ( *a3 != 5952 && *a3 != 5969 ) { v4 = sub_41A850(*a3); sub_492060(v3, (int)v4); return a2; } sub_52E350(this[222], (int)(a3 + 1)); v6 = *(_DWORD *)(a3 + 1); v7 = *(_DWORD *)(a3 + 3); v14 = *(_DWORD *)(a3 + 5); *(_DWORD *)v12 = v6; v8 = *(_DWORD *)(a3 + 7); v13 = v7; v9 = *(_DWORD *)(a3 + 9); v15 = v8; v16 = v9; v17 = 0; v10 = (char *)sub_40C190(1212772470); v11 = sub_7549E0(v10, v12); sub_492060(v3, (int)v11); } return a2; } //----- (004C9CD0) -------------------------------------------------------- int __thiscall sub_4C9CD0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // eax int v4; // ecx int v5; // edx _DWORD *v6; // eax int v7; // ebx int v8; // edi char *v9; // eax char *v10; // eax _DWORD **v12; // [esp+4h] [ebp-20h] char v13[4]; // [esp+8h] [ebp-1Ch] int v14; // [esp+Ch] [ebp-18h] int v15; // [esp+10h] [ebp-14h] int v16; // [esp+14h] [ebp-10h] int v17; // [esp+18h] [ebp-Ch] char v18; // [esp+1Ch] [ebp-8h] v3 = this; v12 = (_DWORD **)this; if ( a3 ) { v4 = *a3; v5 = a3[1]; v6 = (_DWORD *)v3[222]; v16 = a3[3]; v7 = a3[4]; v8 = a3[2]; *(_DWORD *)v13 = v4; v14 = v5; v15 = v8; v17 = v7; v18 = 0; if ( v6[94] != v4 || v6[95] != v5 || v6[96] != v8 || v6[97] != a3[3] || v6[98] != v7 ) v9 = (char *)sub_40C190(-2020674347); else v9 = (char *)sub_40C190(2096680140); v10 = sub_7549E0(v9, v13); sub_492060(v12, (int)v10); sub_52E380(v12[222], a3); } return a2; } //----- (004C9DA0) -------------------------------------------------------- int __thiscall sub_4C9DA0(_DWORD *this, int a2, _BYTE *a3) { _WORD *v3; // ebx int v4; // esi int v5; // edi int v6; // ecx int v7; // eax int v8; // eax int v9; // ST08_4 int v10; // ST04_4 char *v11; // eax char *v12; // eax int v13; // ST08_4 char *v14; // eax signed int v16; // [esp+4h] [ebp-8h] _DWORD *v17; // [esp+8h] [ebp-4h] v17 = this; if ( a3 ) { v16 = 0; if ( *a3 ) { v3 = a3 + 3; do { v4 = dword_ACB230; v5 = (unsigned __int16)*(v3 - 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = *(_DWORD *)(v6 + 4 * v5); if ( v7 ) { v8 = v7 + 34; if ( *v3 ) { v9 = (unsigned __int16)*v3; v10 = v8; v11 = (char *)sub_40C190(-1878019353); v12 = sub_7549E0(v11, v10, v9); } else { v13 = v8; v14 = (char *)sub_40C190(834364315); v12 = sub_7549E0(v14, v13); } sub_492060(v17, (int)v12); } } } } v3 += 2; ++v16; } while ( v16 < (unsigned __int8)*a3 ); } } return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004C9E80) -------------------------------------------------------- int __thiscall sub_4C9E80(_DWORD *this, int a2, _DWORD *a3) { int v3; // edx unsigned int v4; // ecx unsigned int v5; // eax unsigned int v6; // ebx unsigned int v7; // esi signed __int64 v8; // rax int v9; // eax char v10; // cl const char *v11; // edx unsigned int v12; // eax char *v13; // edi char v14; // cl char *v15; // edi char v16; // al signed __int64 v17; // rax unsigned int v18; // eax char *v19; // edi char v20; // cl const char *v21; // ecx unsigned int v22; // eax const char *v23; // esi char *v24; // edi char v25; // cl char *v26; // edi char v27; // al signed __int64 v28; // rax unsigned int v29; // eax char *v30; // edi char v31; // cl const char *v32; // ecx unsigned int v33; // eax const char *v34; // esi char *v35; // edi char v36; // cl char *v37; // edi char v38; // al signed __int64 v39; // rax unsigned int v40; // eax char *v41; // edi char v42; // cl const char *v43; // ecx unsigned int v44; // eax const char *v45; // esi char *v46; // edi char v47; // cl char *v48; // edi char v49; // al char *v50; // eax char *v51; // eax unsigned int v53; // [esp+4h] [ebp-224h] _DWORD *v54; // [esp+8h] [ebp-220h] char v55[256]; // [esp+Ch] [ebp-21Ch] char v56[256]; // [esp+10Bh] [ebp-11Dh] char v57[256]; // [esp+10Ch] [ebp-11Ch] char v58[4]; // [esp+20Ch] [ebp-1Ch] int v59; // [esp+210h] [ebp-18h] int v60; // [esp+214h] [ebp-14h] int v61; // [esp+218h] [ebp-10h] int v62; // [esp+21Ch] [ebp-Ch] char v63; // [esp+220h] [ebp-8h] v54 = this; if ( !a3 ) return a2; v3 = a3[1]; *(_DWORD *)v58 = *a3; v60 = a3[2]; v62 = a3[4]; v4 = a3[5]; v59 = v3; v5 = a3[6]; v6 = v4; v7 = a3[6]; v61 = a3[3]; v63 = 0; v53 = v5; if ( !(v5 | v4) ) return a2; memset(v55, 0, 0x100u); memset(v57, 0, 0x100u); if ( sub_680E90(__PAIR__(v7, v6)) ) { v8 = sub_680E90(__PAIR__(v7, v6)); sprintf(v55, "%I64d", v8); v9 = 0; do { v10 = v55[v9]; v57[v9++] = v10; } while ( v10 ); v11 = sub_40C190(1197446809); v12 = strlen(v11) + 1; v13 = v56; do v14 = (v13++)[1]; while ( v14 ); qmemcpy(v13, v11, v12); v15 = v56; do v16 = (v15++)[1]; while ( v16 ); v7 = v53; *v15 = 0; } if ( sub_680EB0(__PAIR__(v7, v6)) ) { v17 = sub_680EB0(__PAIR__(v7, v6)); sprintf(v55, "%I64d", v17); v18 = strlen(v55) + 1; v19 = v56; do v20 = (v19++)[1]; while ( v20 ); qmemcpy(v19, v55, v18); v21 = sub_40C190(1201903011); v22 = strlen(v21) + 1; v23 = v21; v24 = v56; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, v23, v22); v26 = v56; do v27 = (v26++)[1]; while ( v27 ); v7 = v53; *v26 = 0; } if ( sub_680F00(__PAIR__(v7, v6)) ) { v28 = sub_680F00(__PAIR__(v7, v6)); sprintf(v55, "%I64d", v28); v29 = strlen(v55) + 1; v30 = v56; do v31 = (v30++)[1]; while ( v31 ); qmemcpy(v30, v55, v29); v32 = sub_40C190(-1732930065); v33 = strlen(v32) + 1; v34 = v32; v35 = v56; do v36 = (v35++)[1]; while ( v36 ); qmemcpy(v35, v34, v33); v37 = v56; do v38 = (v37++)[1]; while ( v38 ); v7 = v53; *v37 = 0; } if ( sub_680F60(__PAIR__(v7, v6)) ) { v39 = sub_680F60(__PAIR__(v7, v6)); sprintf(v55, "%I64d", v39); v40 = strlen(v55) + 1; v41 = v56; do v42 = (v41++)[1]; while ( v42 ); qmemcpy(v41, v55, v40); v43 = sub_40C190(-2001757707); v44 = strlen(v43) + 1; v45 = v43; v46 = v56; do v47 = (v46++)[1]; while ( v47 ); qmemcpy(v46, v45, v44); v48 = v56; do v49 = (v48++)[1]; while ( v49 ); *v48 = 0; } v50 = (char *)sub_40C190(-1900843882); v51 = sub_7549E0(v50, v58, v57); sub_492060(v54, (int)v51); return a2; } // 4C9E80: using guessed type char var_21C[256]; // 4C9E80: using guessed type char var_11C[256]; //----- (004CA250) -------------------------------------------------------- int __thiscall sub_4CA250(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi int v4; // edx int v5; // eax char *v6; // eax char *v7; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v3 = this; if ( a3 ) { v4 = a3[1]; *(_DWORD *)v9 = *a3; v11 = a3[2]; v10 = v4; v5 = a3[4]; v12 = a3[3]; v13 = v5; v14 = 0; v6 = (char *)sub_40C190(-353189919); v7 = sub_7549E0(v6, v9); sub_492060(v3, (int)v7); } return a2; } //----- (004CA2D0) -------------------------------------------------------- int __thiscall sub_4CA2D0(_DWORD *this, int a2, unsigned __int8 *a3) { int v3; // edi _DWORD *v4; // ebx unsigned __int8 *v5; // esi int v6; // ecx int v7; // eax bool v8; // al _DWORD **v9; // ecx _DWORD *v10; // eax _DWORD *v11; // edi int *v12; // ebx int v13; // esi _DWORD *v15; // [esp+Ch] [ebp-10h] unsigned __int8 *v16; // [esp+10h] [ebp-Ch] int v17; // [esp+14h] [ebp-8h] int v18; // [esp+18h] [ebp-4h] v3 = *a3; v4 = this; v15 = this; v5 = a3 + 1; a3 = 0; if ( v3 ) { sub_6848A0(&byte_ADA230); sub_533A50(v4[179], 1); v8 = sub_533AE0((_BYTE *)v4[179]); v9 = (_DWORD **)v4[144]; LOBYTE(v18) = v8; if ( v9 ) sub_559AC0(v9); if ( v3 ) { v18 = v3; do { v10 = sub_688200(v5, &v17, &a3); v5 = &v5[(_DWORD)a3]; v11 = v10; if ( v10 ) { v12 = &dword_ADAEF8[v17 & 0x3FF]; v16 = v5; v13 = *v12; if ( (_DWORD *)*v12 != v10 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *v12 = (int)v11; InterlockedIncrement(v11 + 1); } ++dword_ADB1F8; v5 = v16; v4 = v15; } --v18; } while ( v18 ); } } else { v6 = *(_DWORD *)(this[179] + 1448); v7 = *(_DWORD *)(v6 + 388); if ( v7 ) *(_DWORD *)(v6 + 388) = v7 - 1; } sub_535FC0(v4[179]); return a2; } // ADA230: using guessed type char byte_ADA230; // ADB1F8: using guessed type int dword_ADB1F8; //----- (004CA3E0) -------------------------------------------------------- int __thiscall sub_4CA3E0(_DWORD *this, int a2, _BYTE *a3) { _WORD *v3; // ebx int v4; // esi int v5; // edi int v6; // ecx int v7; // eax int v8; // eax int v9; // ST08_4 int v10; // ST04_4 char *v11; // eax char *v12; // eax int v13; // ST08_4 char *v14; // eax signed int v16; // [esp+4h] [ebp-8h] _DWORD *v17; // [esp+8h] [ebp-4h] v17 = this; if ( a3 ) { v16 = 0; if ( *a3 ) { v3 = a3 + 3; do { v4 = dword_ACB230; v5 = (unsigned __int16)*(v3 - 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = *(_DWORD *)(v6 + 4 * v5); if ( v7 ) { v8 = v7 + 34; if ( *v3 ) { v9 = (unsigned __int16)*v3; v10 = v8; v11 = (char *)sub_40C190(-2120513030); v12 = sub_7549E0(v11, v10, v9); } else { v13 = v8; v14 = (char *)sub_40C190(844049062); v12 = sub_7549E0(v14, v13); } sub_492060(v17, (int)v12); } } } } v3 += 2; ++v16; } while ( v16 < (unsigned __int8)*a3 ); } } return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004CA4C0) -------------------------------------------------------- int __thiscall sub_4CA4C0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi int v4; // eax char *v5; // eax int result; // eax int v7; // eax const CHAR *v8; // eax v3 = this; v4 = *a3; if ( (_WORD)v4 != 6104 ) { v7 = v4 - 6105; if ( v7 ) { if ( v7 != 1 ) return a2; v8 = sub_40C190(1922102688); } else { v8 = sub_40C190(1436046487); } sub_492060(v3, (int)v8); return a2; } if ( sub_7188D0((int)a3) != 1 ) return a2; v5 = (char *)sub_7154E0(); sub_701BB0(v5); if ( *(_BYTE *)(sub_7154E0() + 868) ) { *(_BYTE *)(sub_7154E0() + 868) = 0; result = a2; } else { if ( *(_BYTE *)(sub_7154D0() + 532) ) *(_BYTE *)(sub_7154D0() + 532) = 0; else sub_4A7DF0((_DWORD **)v3); result = a2; } return result; } //----- (004CA580) -------------------------------------------------------- char __thiscall sub_4CA580(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx int v8; // eax int v9; // ecx int v11; // [esp+4h] [ebp-30h] int v12; // [esp+8h] [ebp-2Ch] int v13; // [esp+Ch] [ebp-28h] int v14; // [esp+10h] [ebp-24h] int v15; // [esp+14h] [ebp-20h] __int16 v16; // [esp+18h] [ebp-1Ch] int v17; // [esp+1Ch] [ebp-18h] int v18; // [esp+20h] [ebp-14h] int v19; // [esp+24h] [ebp-10h] int v20; // [esp+28h] [ebp-Ch] int v21; // [esp+2Ch] [ebp-8h] v6 = this; v12 = a3; v15 = a6; v7 = this[228]; v13 = a4; v11 = a2; v14 = a5; v8 = sub_74DA80((_DWORD *)(v7 + 360), &v11); if ( !v8 ) { v17 = a2; v18 = a3; v20 = a5; v19 = a4; v21 = a6; v9 = v6[585]; v16 = -22525; sub_905F90(v9, &v16, 2u); LOBYTE(v8) = sub_906000(v6[585], &v17, 0x14u); } return v8; } //----- (004CA630) -------------------------------------------------------- int __thiscall sub_4CA630(int this, int a2, int a3) { _DWORD *v3; // esi __int16 v4; // ax char *v5; // eax const char *v7; // eax char v8; // [esp+4h] [ebp-1Ch] char v9; // [esp+18h] [ebp-8h] v3 = (_DWORD *)this; v4 = *(_WORD *)a3; if ( *(_WORD *)a3 == 7171 || v4 == 7176 || v4 == 7172 || v4 == 7175 ) { v7 = sub_41A850(*(unsigned __int16 *)a3); sub_492060(v3, (int)v7); } else if ( v4 == 7168 ) { sub_4169E0((_DWORD *)(a3 + 2), (int)&v8); v9 = 0; v5 = (char *)sub_40C190(1047758216); sub_4920B0((int)v3, v5, &v8); sub_74DB30((_DWORD *)(v3[228] + 360), a3 + 2); sub_4A5320(v3); return a2; } return a2; } //----- (004CA700) -------------------------------------------------------- char __thiscall sub_4CA700(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -22521; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CA770) -------------------------------------------------------- int __thiscall sub_4CA770(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 4356 ) { v4 = sub_40A910(104947356); sub_492060(v3, (int)v4); } return a2; } //----- (004CA7A0) -------------------------------------------------------- int __thiscall sub_4CA7A0(void **this, int a2, int a3) { void **v3; // esi int result; // eax const CHAR *v5; // ST0C_4 const CHAR *v6; // eax v3 = this; if ( *(_WORD *)a3 == 7264 ) { v5 = sub_40A910(-703985899); v6 = sub_40A910(1502118327); sub_4A4F20((_DWORD **)v3, 0, 1, (int)v6, (int)v5); sub_4DC400((_DWORD **)v3[195], *(_QWORD *)(a3 + 2)); result = a2; } else { sub_6175B0(this[245], 89, 1); sub_8F82A0(&unk_BA6B10, v3[245]); result = a2; *((_BYTE *)v3[245] + 344) = 0; } return result; } //----- (004CA830) -------------------------------------------------------- int __thiscall sub_4CA830(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 7272 ) { v4 = sub_40A910(373112380); sub_492060(v3, (int)v4); } return a2; } //----- (004CA860) -------------------------------------------------------- int __thiscall sub_4CA860(_DWORD *this, int a2, unsigned int *a3) { signed int v3; // ebx unsigned int v4; // esi _DWORD *v5; // edi int v6; // ST1C_4 char *v7; // eax char *v8; // eax signed __int64 v9; // rax int v10; // eax char v11; // cl const char *v12; // edx unsigned int v13; // eax char *v14; // edi char v15; // cl char *v16; // edi char v17; // al signed __int64 v18; // rax unsigned int v19; // eax char *v20; // edi char v21; // cl const char *v22; // ecx unsigned int v23; // eax const char *v24; // esi char *v25; // edi char v26; // cl char *v27; // edi char v28; // al signed __int64 v29; // rax unsigned int v30; // eax char *v31; // edi char v32; // cl const char *v33; // ecx unsigned int v34; // eax const char *v35; // esi char *v36; // edi char v37; // cl char *v38; // edi char v39; // al signed __int64 v40; // rax unsigned int v41; // eax char *v42; // edi char v43; // cl const char *v44; // ecx unsigned int v45; // eax const char *v46; // esi char *v47; // edi char v48; // cl char *v49; // edi char v50; // al char *v51; // eax char *v52; // eax const CHAR *v53; // eax _DWORD *v55; // [esp+Ch] [ebp-210h] unsigned int v56; // [esp+10h] [ebp-20Ch] char v57[256]; // [esp+18h] [ebp-204h] char v58[256]; // [esp+117h] [ebp-105h] char v59[256]; // [esp+118h] [ebp-104h] v3 = a3[1]; v4 = *a3; v5 = this; v55 = this; v56 = *a3; if ( v3 >= 0 && (v3 > 0 || v4) ) { v6 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v7 = (char *)sub_40A910(-1511577850); v8 = sub_7549E0(v7, v6); sub_492060(v5, (int)v8); memset(v57, 0, 0x100u); memset(v59, 0, 0x100u); if ( sub_680E90(__PAIR__(v3, v4)) ) { v9 = sub_680E90(__PAIR__(v3, v4)); sprintf(v57, "%I64d", v9); v10 = 0; do { v11 = v57[v10]; v59[v10++] = v11; } while ( v11 ); v12 = sub_40C190(1197446809); v13 = strlen(v12) + 1; v14 = v58; do v15 = (v14++)[1]; while ( v15 ); qmemcpy(v14, v12, v13); v16 = v58; do v17 = (v16++)[1]; while ( v17 ); v4 = v56; *v16 = 0; } if ( sub_680EB0(__PAIR__(v3, v4)) ) { v18 = sub_680EB0(__PAIR__(v3, v4)); sprintf(v57, "%I64d", v18); v19 = strlen(v57) + 1; v20 = v58; do v21 = (v20++)[1]; while ( v21 ); qmemcpy(v20, v57, v19); v22 = sub_40C190(1201903011); v23 = strlen(v22) + 1; v24 = v22; v25 = v58; do v26 = (v25++)[1]; while ( v26 ); qmemcpy(v25, v24, v23); v27 = v58; do v28 = (v27++)[1]; while ( v28 ); v4 = v56; *v27 = 0; } if ( sub_680F00(__PAIR__(v3, v4)) ) { v29 = sub_680F00(__PAIR__(v3, v4)); sprintf(v57, "%I64d", v29); v30 = strlen(v57) + 1; v31 = v58; do v32 = (v31++)[1]; while ( v32 ); qmemcpy(v31, v57, v30); v33 = sub_40C190(-1732930065); v34 = strlen(v33) + 1; v35 = v33; v36 = v58; do v37 = (v36++)[1]; while ( v37 ); qmemcpy(v36, v35, v34); v38 = v58; do v39 = (v38++)[1]; while ( v39 ); v4 = v56; *v38 = 0; } if ( sub_680F60(__PAIR__(v3, v4)) ) { v40 = sub_680F60(__PAIR__(v3, v4)); sprintf(v57, "%I64d", v40); v41 = strlen(v57) + 1; v42 = v58; do v43 = (v42++)[1]; while ( v43 ); qmemcpy(v42, v57, v41); v44 = sub_40C190(-2001757707); v45 = strlen(v44) + 1; v46 = v44; v47 = v58; do v48 = (v47++)[1]; while ( v48 ); qmemcpy(v47, v46, v45); v49 = v58; do v50 = (v49++)[1]; while ( v50 ); *v49 = 0; } v51 = (char *)sub_40A910(1853988785); v52 = sub_7549E0(v51, v59); sub_492060(v55, (int)v52); v53 = sub_40A910(-2063099482); sub_492060(v55, (int)v53); } return a2; } // 4CA860: using guessed type char var_204[256]; // 4CA860: using guessed type char var_104[256]; //----- (004CAC20) -------------------------------------------------------- int __thiscall sub_4CAC20(_DWORD *this, int a2, __int16 *a3) { __int16 v3; // ax _DWORD *v4; // esi const CHAR *v5; // eax v3 = *a3; v4 = this; if ( *a3 != 7280 ) { if ( v3 == 7281 ) { v5 = sub_40A910(-416657028); LABEL_6: sub_492060(v4, (int)v5); return a2; } if ( v3 == 7282 ) { v5 = sub_40A910(-1611809086); goto LABEL_6; } } return a2; } //----- (004CAC70) -------------------------------------------------------- int __thiscall sub_4CAC70(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char v4; // bl const CHAR *v5; // eax _DWORD *v6; // ecx int v7; // ecx bool v8; // al int result; // eax const CHAR *v10; // eax v3 = this; if ( *(_WORD *)a3 == 7680 ) { sub_6524E0((int)dword_AD8EBC, a3, *(_BYTE *)(a3 + 2) != 0); v4 = 0; if ( !*(_BYTE *)(a3 + 2) && dword_AD8EBC[2724] ) { dword_AD8EBC[2724] = 0; v5 = sub_40A910(-1342974730); sub_492060(v3, (int)v5); v4 = 1; } v6 = (_DWORD *)v3[179]; if ( !v6 ) return a2; sub_536340(v6); sub_533900((_BYTE *)v3[179], 1); v7 = v3[179]; if ( *(_BYTE *)(v7 + 1617) ) { if ( v4 ) v8 = 0; else v8 = sub_6863C0(&byte_ADA230) == 0; sub_536230(v3[179], *(_BYTE *)(a3 + 2) != 0, v8); return a2; } sub_536230(v7, *(_BYTE *)(a3 + 2) != 0, 1); result = a2; } else { if ( *(_WORD *)a3 != 7681 ) return a2; v10 = sub_40A910(660437100); sub_492060(v3, (int)v10); result = a2; } return result; } // ADA230: using guessed type char byte_ADA230; //----- (004CAD80) -------------------------------------------------------- int __thiscall sub_4CAD80(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 4052 ) { v4 = sub_40A910(189478006); sub_492060(v3, (int)v4); } return a2; } //----- (004CADB0) -------------------------------------------------------- int __thiscall sub_4CADB0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( (unsigned int)*a3 - 7745 <= 1 ) { v4 = sub_40A910(900498567); sub_492060(v3, (int)v4); } return a2; } //----- (004CADF0) -------------------------------------------------------- int __thiscall sub_4CADF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v5; // eax v3 = this; if ( *(_WORD *)(a3 + 2) == 7808 ) { v4 = sub_40A910(1166047102); sub_492060(v3, (int)v4); v5 = sub_40A910(-1782201120); } else { v5 = sub_41A850(*(unsigned __int16 *)(a3 + 2)); } sub_492060(v3, (int)v5); return a2; } //----- (004CAE60) -------------------------------------------------------- int __thiscall sub_4CAE60(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // edi _DWORD *v4; // eax const CHAR *v5; // eax char *v6; // eax char *v7; // eax int *v8; // eax int *v9; // eax unsigned int v10; // edx unsigned int v11; // esi int *v12; // eax char v14; // [esp+8h] [ebp-30h] char v15[4]; // [esp+1Ch] [ebp-1Ch] int v16; // [esp+20h] [ebp-18h] int v17; // [esp+24h] [ebp-14h] int v18; // [esp+28h] [ebp-10h] int v19; // [esp+2Ch] [ebp-Ch] char v20; // [esp+30h] [ebp-8h] v3 = this; v4 = sub_6C1530(&dword_B9DC70, &v14); *(_DWORD *)v15 = *v4; v16 = v4[1]; v17 = v4[2]; v18 = v4[3]; v19 = v4[4]; v20 = 0; v5 = sub_40A910(1098279563); sub_492060(v3, (int)v5); v6 = (char *)sub_40A910(1175066421); v7 = sub_7549E0(v6, v15); sub_492060(v3, (int)v7); if ( !sub_718A50(&dword_B9E560) ) sub_56C260(v3[143]); if ( dword_B9DCC4 ) { v8 = sub_6C1530(&dword_B9DC70, &v14); sub_718C50(&dword_B9E560, *v8, v8[1], v8[2], v8[3], v8[4]); v9 = sub_6C1530(&dword_B9DC70, &v14); sub_718BF0(&dword_B9E560, *v9, v9[1], v9[2], v9[3], v9[4]); } sub_7196E0((char *)&dword_B9E560, a3); sub_56C0A0(v3[143]); v10 = (signed int)((unsigned __int64)(2021161081i64 * (dword_B9E5E8 - dword_B9E5E4[0])) >> 32) >> 5; v11 = 0; if ( v10 + (v10 >> 31) ) { do { v12 = (int *)sub_718E40(&dword_B9E560, v11); if ( v12 ) sub_56F630(v3[143], v12); ++v11; } while ( v11 < (dword_B9E5E8 - dword_B9E5E4[0]) / 68 ); } return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; // B9E5E4: using guessed type int dword_B9E5E4[]; // B9E5E8: using guessed type int dword_B9E5E8; //----- (004CB010) -------------------------------------------------------- int __thiscall sub_4CB010(char *this, int a2, int a3) { char *v3; // esi const CHAR *v4; // eax unsigned int v5; // ebx _DWORD **v6; // eax _DWORD *v7; // edi unsigned int v8; // esi _DWORD *v9; // ecx _DWORD **v10; // ebx unsigned int v11; // esi _DWORD *v12; // edi int v14; // [esp+Ch] [ebp-Ch] char *v15; // [esp+10h] [ebp-8h] int v16; // [esp+14h] [ebp-4h] v3 = this; v15 = this; sub_6C17E0((int)&dword_B9DC70); sub_56C260(*((_DWORD ***)v3 + 143)); v4 = sub_40A910(-1753193089); sub_492060(v3, (int)v4); v5 = 0; v6 = (_DWORD **)(v3 + 1224); v14 = (int)(v3 + 1224); v16 = (int)(v3 + 1224); do { v7 = *v6; if ( *v6 ) { v8 = 0; do sub_71BF50(v7, v8++, 0); while ( v8 < 5 ); v3 = v15; } ++v5; v6 = (_DWORD **)(v16 + 4); v16 += 4; } while ( v5 < 4 ); v9 = (_DWORD *)*((_DWORD *)v3 + 310); if ( v9 ) { sub_71D8F0(v9, 0); sub_71D9D0(*((_DWORD **)v3 + 310), 0); } v10 = (_DWORD **)v14; v11 = 0; do { v12 = *v10; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v12 + 260))(v12) ) sub_8F86A0(&unk_BA6B10, v12); ++v11; ++v10; } while ( v11 < 4 ); sub_719F30((char *)&dword_B9E560); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (004CB0F0) -------------------------------------------------------- int __thiscall sub_4CB0F0(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // edi _DWORD *v4; // ecx const CHAR *v5; // eax char *v6; // edx CHAR v7; // cl const CHAR *v8; // eax char *v9; // edx CHAR v10; // cl const CHAR *v11; // eax char *v12; // edx CHAR v13; // cl const CHAR *v14; // eax char *v15; // edx CHAR v16; // cl const CHAR *v17; // eax const CHAR *v18; // ST04_4 char *v19; // eax const CHAR *v20; // ST04_4 char v22; // [esp+8h] [ebp-204h] char v23; // [esp+9h] [ebp-203h] v3 = this; sub_718A20(&dword_B9E560, *a3, a3[1]); v4 = (_DWORD *)v3[310]; if ( v4 ) { sub_71D8F0(v4, a3[1]); sub_71D9D0((_DWORD *)v3[310], *a3); } v22 = 0; memset(&v23, 0, 0x1FFu); switch ( a3[1] ) { case 0u: v5 = sub_40A910(-1585524522); v6 = (char *)(&v22 - v5); do { v7 = *v5; v5[(_DWORD)v6] = *v5; ++v5; } while ( v7 ); break; case 1u: v8 = sub_40A910(773398838); v9 = (char *)(&v22 - v8); do { v10 = *v8; v8[(_DWORD)v9] = *v8; ++v8; } while ( v10 ); break; case 2u: v11 = sub_40A910(840444185); v12 = (char *)(&v22 - v11); do { v13 = *v11; v11[(_DWORD)v12] = *v11; ++v11; } while ( v13 ); break; case 3u: v14 = sub_40A910(-1427520735); v15 = (char *)(&v22 - v14); do { v16 = *v14; v14[(_DWORD)v15] = *v14; ++v14; } while ( v16 ); break; default: break; } switch ( *a3 ) { case 0u: v17 = sub_4090F0(225928826); goto LABEL_20; case 1u: v18 = sub_4090F0(225994362); v19 = sub_7549E0(&v22, v18); goto LABEL_21; case 2u: v20 = sub_4090F0(226059898); v19 = sub_7549E0(&v22, v20); goto LABEL_21; case 3u: v17 = sub_4090F0(226125434); LABEL_20: v19 = sub_7549E0(&v22, v17); LABEL_21: sub_492060(v3, (int)v19); break; default: return a2; } return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CB290) -------------------------------------------------------- char __thiscall sub_4CB290(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -20468; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CB300) -------------------------------------------------------- int __thiscall sub_4CB300(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi __int16 v4; // cx int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // ST04_4 int v11; // ST08_4 int v12; // ST0C_4 int v13; // ST10_4 void *v14; // eax char *v15; // eax int v16; // edx int v17; // eax char v19[4]; // [esp+4h] [ebp-1Ch] int v20; // [esp+8h] [ebp-18h] int v21; // [esp+Ch] [ebp-14h] int v22; // [esp+10h] [ebp-10h] int v23; // [esp+14h] [ebp-Ch] char v24; // [esp+18h] [ebp-8h] v3 = this; v4 = *(_WORD *)(a3 + 20); if ( v4 != 7808 ) { if ( v4 == 7880 ) { v5 = *(_DWORD *)(a3 + 4); *(_DWORD *)v19 = *(_DWORD *)a3; v6 = *(_DWORD *)(a3 + 8); v20 = v5; v7 = *(_DWORD *)(a3 + 12); v21 = v6; v8 = *(_DWORD *)(a3 + 16); v22 = v7; v9 = *(_DWORD *)a3; v23 = v8; v10 = *(_DWORD *)(a3 + 4); v11 = *(_DWORD *)(a3 + 8); v12 = *(_DWORD *)(a3 + 12); v13 = *(_DWORD *)(a3 + 16); v24 = 0; if ( sub_718D10(&dword_B9E560, v9, v10, v11, v12, v13) ) { v14 = (void *)sub_40A910(826544367); LABEL_12: sub_492060(v3, (int)v14); return a2; } v15 = (char *)sub_40A910(2096360410); } else { if ( v4 != 7879 ) { if ( v4 == 7892 ) v14 = (void *)sub_4090F0(-437067263); else v14 = (void *)sub_41A850(*(unsigned __int16 *)(a3 + 20)); goto LABEL_12; } v16 = *(_DWORD *)(a3 + 4); *(_DWORD *)v19 = *(_DWORD *)a3; v21 = *(_DWORD *)(a3 + 8); v20 = v16; v17 = *(_DWORD *)(a3 + 16); v22 = *(_DWORD *)(a3 + 12); v23 = v17; v24 = 0; v15 = (char *)sub_40A910(-1040440812); } v14 = sub_7549E0(v15, v19); goto LABEL_12; } return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CB420) -------------------------------------------------------- char __thiscall sub_4CB420(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx __int16 v5; // [esp+4h] [ebp-20h] char v6; // [esp+8h] [ebp-1Ch] int v7; // [esp+9h] [ebp-1Bh] int v8; // [esp+Dh] [ebp-17h] int v9; // [esp+11h] [ebp-13h] int v10; // [esp+15h] [ebp-Fh] int v11; // [esp+19h] [ebp-Bh] v2 = this; v7 = dword_B9E5A5; v6 = a2; v10 = dword_B9E5B1; v8 = dword_B9E5A9; v9 = dword_B9E5AD; v3 = this[585]; v11 = dword_B9E5B5; v5 = -20465; sub_905F90(v3, &v5, 2u); return sub_906000(v2[585], &v6, 0x15u); } // B9E5A5: using guessed type int dword_B9E5A5; // B9E5A9: using guessed type int dword_B9E5A9; // B9E5AD: using guessed type int dword_B9E5AD; // B9E5B1: using guessed type int dword_B9E5B1; // B9E5B5: using guessed type int dword_B9E5B5; //----- (004CB4B0) -------------------------------------------------------- int __thiscall sub_4CB4B0(_DWORD *this, int a2, int a3) { bool v3; // zf int v4; // edx _DWORD *v5; // esi int v6; // ecx int v7; // edx int v8; // ecx char *v9; // eax char *v10; // eax char v12[4]; // [esp+4h] [ebp-1Ch] int v13; // [esp+8h] [ebp-18h] int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] int v16; // [esp+14h] [ebp-Ch] char v17; // [esp+18h] [ebp-8h] v3 = *(_BYTE *)(a3 + 20) == 0; v4 = *(_DWORD *)(a3 + 4); v5 = this; *(_DWORD *)v12 = *(_DWORD *)a3; v6 = *(_DWORD *)(a3 + 8); v13 = v4; v7 = *(_DWORD *)(a3 + 12); v14 = v6; v8 = *(_DWORD *)(a3 + 16); v15 = v7; v16 = v8; v17 = 0; if ( v3 ) { v9 = (char *)sub_40A910(1970102223); v10 = sub_7549E0(v9, v12); sub_492060(v5, (int)v10); } return a2; } //----- (004CB530) -------------------------------------------------------- int __thiscall sub_4CB530(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // eax int v5; // edx int v6; // eax int v7; // edx int v8; // eax char *v9; // eax char *v10; // eax unsigned int v11; // eax _DWORD *v12; // eax int *v13; // eax _DWORD *v14; // eax int v15; // ecx int v16; // edx int v17; // eax int v18; // ecx int v19; // eax _DWORD *v20; // ecx char v22[4]; // [esp+Ch] [ebp-34h] int v23; // [esp+10h] [ebp-30h] int v24; // [esp+14h] [ebp-2Ch] int v25; // [esp+18h] [ebp-28h] int v26; // [esp+1Ch] [ebp-24h] char v27; // [esp+20h] [ebp-20h] char v28[4]; // [esp+24h] [ebp-1Ch] int v29; // [esp+28h] [ebp-18h] int v30; // [esp+2Ch] [ebp-14h] int v31; // [esp+30h] [ebp-10h] int v32; // [esp+34h] [ebp-Ch] char v33; // [esp+38h] [ebp-8h] v3 = this; v4 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)(a3 + 4) != *v4 || *(_DWORD *)(a3 + 8) != v4[1] || *(_DWORD *)(a3 + 12) != v4[2] || *(_DWORD *)(a3 + 16) != v4[3] || *(_DWORD *)(a3 + 20) != v4[4] ) { v5 = *(_DWORD *)(a3 + 4); v6 = *(_DWORD *)(a3 + 8); v30 = *(_DWORD *)(a3 + 12); *(_DWORD *)v28 = v5; v7 = *(_DWORD *)(a3 + 16); v29 = v6; v8 = *(_DWORD *)(a3 + 20); v31 = v7; v32 = v8; v33 = 0; v9 = (char *)sub_40A910(-354805991); v10 = sub_7549E0(v9, v28); sub_492060(v3, (int)v10); v11 = *(unsigned __int8 *)(a3 + 2); if ( v11 < 4 ) { v12 = (_DWORD *)v3[v11 + 306]; if ( v12 ) sub_71BF50(v12, *(unsigned __int8 *)(a3 + 3), 0); } sub_7191A0(&dword_B9E560, a3); v13 = (int *)sub_718D10( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v13 ) sub_56F630((_DWORD *)v3[143], v13); if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) { v14 = (_DWORD *)sub_680810(byte_AD9238); if ( sub_4DBFF0((_DWORD *)(a3 + 4), v14) ) { v26 = 0; v25 = 0; v24 = 0; v23 = 0; *(_DWORD *)v22 = 0; strncpy(v22, &byte_9BBD2A, 0x14u); if ( sub_4DBFF0((_DWORD *)(a3 + 4), v22) ) { if ( !sub_6C11C0( &dword_B9DC70, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)) ) { v15 = *(_DWORD *)(a3 + 8); v16 = *(_DWORD *)(a3 + 12); v27 = 0; v17 = *(_DWORD *)(a3 + 4); v23 = v15; v18 = *(_DWORD *)(a3 + 20); v24 = v16; *(_DWORD *)v22 = v17; v19 = *(_DWORD *)(a3 + 16); v26 = v18; v25 = v19; sub_6C1330(&dword_B9DC70, (int)v22); } } } } } v20 = (_DWORD *)v3[181]; if ( v20 ) sub_582B90(v20); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; //----- (004CB710) -------------------------------------------------------- int __thiscall sub_4CB710(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax _DWORD **v5; // edi unsigned int v6; // ebx _DWORD *v7; // edi unsigned int v8; // esi _DWORD **v9; // ebx unsigned int v10; // esi _DWORD *v11; // edi _DWORD *v12; // ecx const CHAR *v13; // eax int v14; // eax unsigned int v15; // ecx int *v16; // eax _DWORD *v17; // ebx int v18; // edx int v19; // eax int v20; // edx int v21; // eax char *v22; // eax char *v23; // eax _DWORD *v24; // ecx _DWORD **v26; // [esp+Ch] [ebp-28h] _DWORD **v27; // [esp+10h] [ebp-24h] _DWORD *v28; // [esp+14h] [ebp-20h] char v29[4]; // [esp+18h] [ebp-1Ch] int v30; // [esp+1Ch] [ebp-18h] int v31; // [esp+20h] [ebp-14h] int v32; // [esp+24h] [ebp-10h] int v33; // [esp+28h] [ebp-Ch] char v34; // [esp+2Ch] [ebp-8h] v3 = this; v28 = this; v4 = (_DWORD *)sub_680810(byte_AD9238); if ( *v4 != *(_DWORD *)(a3 + 4) || v4[1] != *(_DWORD *)(a3 + 8) || v4[2] != *(_DWORD *)(a3 + 12) || v4[3] != *(_DWORD *)(a3 + 16) || v4[4] != *(_DWORD *)(a3 + 20) ) { v14 = sub_718D10( &dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); if ( v14 ) sub_56C190((_DWORD **)v3[143], v14); sub_71A2F0( (unsigned int *)&dword_B9E560, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), *(unsigned __int8 *)(a3 + 2), *(_BYTE *)(a3 + 3)); v15 = *(unsigned __int8 *)(a3 + 2); v16 = &dword_B9E5E4[4 * v15]; if ( *v16 == v16[1] ) { v17 = (_DWORD *)(v15 >= 4 ? 0 : v3[v15 + 306]); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v17 + 260))(v17) ) sub_8F86A0(&unk_BA6B10, v17); } if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) sub_6C1860( &dword_B9DC70, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 12), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20)); v18 = *(_DWORD *)(a3 + 4); v19 = *(_DWORD *)(a3 + 8); v31 = *(_DWORD *)(a3 + 12); *(_DWORD *)v29 = v18; v20 = *(_DWORD *)(a3 + 16); v30 = v19; v21 = *(_DWORD *)(a3 + 20); v32 = v20; v33 = v21; v34 = 0; v22 = (char *)sub_40A910(-1617372483); v23 = sub_7549E0(v22, v29); sub_492060(v3, (int)v23); } else { sub_6C17E0((int)&dword_B9DC70); sub_56C260((_DWORD **)v3[143]); v5 = (_DWORD **)(v3 + 306); v6 = 0; v26 = v5; v27 = v5; do { v7 = *v5; if ( v7 ) { v8 = 0; do sub_71BF50(v7, v8++, 0); while ( v8 < 5 ); } ++v6; v5 = v27 + 1; ++v27; } while ( v6 < 4 ); v9 = v26; v10 = 0; do { v11 = *v9; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v11 + 260))(v11) ) sub_8F86A0(&unk_BA6B10, v11); ++v10; ++v9; } while ( v10 < 4 ); v12 = (_DWORD *)v28[310]; if ( v12 ) { sub_71D8F0(v12, 0); sub_71D9D0((_DWORD *)v28[310], 0); } sub_719F30((char *)&dword_B9E560); v13 = sub_40A910(1093562771); sub_492060(v28, (int)v13); v3 = v28; } v24 = (_DWORD *)v3[181]; if ( v24 ) sub_582B90(v24); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004CB990) -------------------------------------------------------- char __thiscall sub_4CB990(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -20456; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CBA00) -------------------------------------------------------- int __thiscall sub_4CBA00(_DWORD *this, int a2, _DWORD *a3) { int v3; // edx _DWORD *v4; // esi int v5; // eax char *v6; // eax char *v7; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v3 = a3[1]; v4 = this; *(_DWORD *)v9 = *a3; v11 = a3[2]; v10 = v3; v5 = a3[4]; v12 = a3[3]; v13 = v5; v14 = 0; v6 = (char *)sub_40A910(1316124038); v7 = sub_7549E0(v6, v9); sub_492060(v4, (int)v7); return a2; } //----- (004CBA70) -------------------------------------------------------- int __thiscall sub_4CBA70(char *this, int a2, int a3) { char *v3; // ebx _DWORD *v4; // eax unsigned int v5; // edi _DWORD **v6; // ebx _DWORD *v7; // esi _DWORD *v8; // ecx int v9; // eax unsigned int v10; // ecx int *v11; // eax _DWORD *v12; // edi int v13; // edx int v14; // eax int v15; // edx int v16; // eax char *v17; // eax char *v18; // eax _DWORD *v19; // ecx char *v21; // [esp+Ch] [ebp-20h] char v22[4]; // [esp+10h] [ebp-1Ch] int v23; // [esp+14h] [ebp-18h] int v24; // [esp+18h] [ebp-14h] int v25; // [esp+1Ch] [ebp-10h] int v26; // [esp+20h] [ebp-Ch] char v27; // [esp+24h] [ebp-8h] v3 = this; v21 = this; v4 = (_DWORD *)sub_680810(byte_AD9238); if ( *v4 != *(_DWORD *)(a3 + 24) || v4[1] != *(_DWORD *)(a3 + 28) || v4[2] != *(_DWORD *)(a3 + 32) || v4[3] != *(_DWORD *)(a3 + 36) || v4[4] != *(_DWORD *)(a3 + 40) ) { v9 = sub_718D10( &dword_B9E560, *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40)); if ( v9 ) sub_56C190(*((_DWORD ***)v3 + 143), v9); sub_71A2F0( (unsigned int *)&dword_B9E560, *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40), *(unsigned __int8 *)(a3 + 2), *(_BYTE *)(a3 + 3)); v10 = *(unsigned __int8 *)(a3 + 2); v11 = &dword_B9E5E4[4 * v10]; if ( *v11 == v11[1] ) { v12 = (_DWORD *)(v10 >= 4 ? 0 : *(_DWORD *)&v3[4 * v10 + 1224]); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v12 + 260))(v12) ) sub_8F86A0(&unk_BA6B10, v12); } if ( *(unsigned __int8 *)(a3 + 2) == dword_B9E568 ) sub_6C1860( &dword_B9DC70, *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40)); v13 = *(_DWORD *)(a3 + 24); v14 = *(_DWORD *)(a3 + 28); v24 = *(_DWORD *)(a3 + 32); *(_DWORD *)v22 = v13; v15 = *(_DWORD *)(a3 + 36); v23 = v14; v16 = *(_DWORD *)(a3 + 40); v25 = v15; v26 = v16; v27 = 0; v17 = (char *)sub_40A910(-4732709); v18 = sub_7549E0(v17, v22); sub_492060(v3, (int)v18); } else { sub_6C17E0((int)&dword_B9DC70); sub_56C260(*((_DWORD ***)v3 + 143)); v5 = 0; v6 = (_DWORD **)(v3 + 1224); do { v7 = *v6; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v7 + 260))(v7) ) sub_8F86A0(&unk_BA6B10, v7); ++v5; ++v6; } while ( v5 < 4 ); v8 = (_DWORD *)*((_DWORD *)v21 + 310); if ( v8 ) { sub_71D8F0(v8, 0); sub_71D9D0(*((_DWORD **)v21 + 310), 0); } sub_719F30((char *)&dword_B9E560); v3 = v21; } v19 = (_DWORD *)*((_DWORD *)v3 + 181); if ( v19 ) sub_582B90(v19); return a2; } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E568: using guessed type int dword_B9E568; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004CBCA0) -------------------------------------------------------- char __thiscall sub_4CBCA0(_DWORD *this, int a2, char a3) { _DWORD *v3; // edi int v4; // ecx __int16 v5; // si int *v6; // ecx unsigned int v7; // eax int *v8; // eax int v9; // ecx int *v10; // esi int v11; // ecx unsigned int v12; // ebx int *v13; // eax __int16 v15; // [esp+Ch] [ebp-38h] __int16 v16; // [esp+10h] [ebp-34h] unsigned __int8 v17; // [esp+12h] [ebp-32h] unsigned __int8 v18; // [esp+13h] [ebp-31h] __int16 v19; // [esp+14h] [ebp-30h] char v20; // [esp+16h] [ebp-2Eh] char v21; // [esp+17h] [ebp-2Dh] int v22; // [esp+18h] [ebp-2Ch] int v23; // [esp+1Ch] [ebp-28h] int v24; // [esp+20h] [ebp-24h] int v25; // [esp+24h] [ebp-20h] int v26; // [esp+28h] [ebp-1Ch] int v27; // [esp+2Ch] [ebp-18h] int v28; // [esp+30h] [ebp-14h] int v29; // [esp+34h] [ebp-10h] int v30; // [esp+38h] [ebp-Ch] int v31; // [esp+3Ch] [ebp-8h] v26 = 0; v25 = 0; v24 = 0; v23 = 0; v22 = 0; v31 = 0; v30 = 0; v29 = 0; v28 = 0; v27 = 0; v3 = this; v17 = a2 / 5; v4 = v17; v5 = word_B9E5D4[2 * v4]; v18 = a2 % 5; v6 = &dword_B9E5E4[4 * v4]; v16 = v5; v7 = (v6[1] - *v6) / 68; if ( v7 > v18 ) { v8 = (int *)(*v6 + 68 * v18); v22 = *v8; v23 = v8[1]; v24 = v8[2]; v25 = v8[3]; v26 = v8[4]; v20 = a3 / 5; v9 = a3 / 5; v19 = word_B9E5D4[2 * v9]; v10 = &dword_B9E5E4[4 * v9]; v11 = v10[1] - *v10; v12 = (unsigned __int8)(a3 % 5); v21 = a3 % 5; if ( v11 / 68 > v12 ) { v13 = (int *)(*v10 + 68 * v12); v27 = *v13; v28 = v13[1]; v29 = v13[2]; v30 = v13[3]; v31 = v13[4]; } v15 = -20441; sub_905F90(v3[585], &v15, 2u); LOBYTE(v7) = sub_906000(v3[585], &v16, 0x30u); } return v7; } // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (004CBE20) -------------------------------------------------------- char __thiscall sub_4CBE20(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -20437; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CBE90) -------------------------------------------------------- int __thiscall sub_4CBE90(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi int v4; // edx int v5; // eax int v6; // edx int v7; // eax char *v8; // eax char *v9; // eax _DWORD *v10; // ecx char v12[4]; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] char v17; // [esp+1Ch] [ebp-8h] v3 = this; sub_718C50(&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9]); if ( sub_719040(&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9]) ) sub_719DB0((unsigned int *)&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9], 0); v4 = a3[5]; v5 = a3[6]; v14 = a3[7]; *(_DWORD *)v12 = v4; v6 = a3[8]; v13 = v5; v7 = a3[9]; v15 = v6; v16 = v7; v17 = 0; v8 = (char *)sub_40A910(1175066421); v9 = sub_7549E0(v8, v12); sub_492060(v3, (int)v9); v10 = (_DWORD *)v3[181]; if ( v10 ) sub_582B90(v10); return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CBFA0) -------------------------------------------------------- char __thiscall sub_4CBFA0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -20432; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CC010) -------------------------------------------------------- int __thiscall sub_4CC010(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi int v4; // edx int v5; // eax int v6; // edx int v7; // eax char *v8; // eax char *v9; // eax _DWORD *v10; // ecx char v12[4]; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] char v17; // [esp+1Ch] [ebp-8h] v3 = this; sub_719DB0((unsigned int *)&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9], 1); v4 = a3[5]; v5 = a3[6]; v14 = a3[7]; *(_DWORD *)v12 = v4; v6 = a3[8]; v13 = v5; v7 = a3[9]; v15 = v6; v16 = v7; v17 = 0; v8 = (char *)sub_40A910(796222080); v9 = sub_7549E0(v8, v12); sub_492060(v3, (int)v9); v10 = (_DWORD *)v3[181]; if ( v10 ) sub_582B90(v10); return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CC0C0) -------------------------------------------------------- char __thiscall sub_4CC0C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = -20427; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CC130) -------------------------------------------------------- int __thiscall sub_4CC130(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx int v8; // eax int v9; // edx int v10; // ecx int v11; // edx int v12; // edx char *v13; // eax char *v14; // eax char v16[4]; // [esp+8h] [ebp-34h] int v17; // [esp+Ch] [ebp-30h] int v18; // [esp+10h] [ebp-2Ch] int v19; // [esp+14h] [ebp-28h] int v20; // [esp+18h] [ebp-24h] char v21; // [esp+1Ch] [ebp-20h] int v22; // [esp+20h] [ebp-1Ch] int v23; // [esp+24h] [ebp-18h] int v24; // [esp+28h] [ebp-14h] int v25; // [esp+2Ch] [ebp-10h] int v26; // [esp+30h] [ebp-Ch] char v27; // [esp+34h] [ebp-8h] v3 = this; sub_719DB0((unsigned int *)&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9], 0); v4 = a3[2]; v5 = *a3; v17 = a3[1]; v6 = a3[4]; v18 = v4; v7 = a3[5]; v20 = v6; v8 = a3[7]; *(_DWORD *)v16 = v5; v9 = a3[3]; v22 = v7; v10 = a3[8]; v24 = v8; v19 = v9; v11 = a3[6]; v25 = v10; v23 = v11; v12 = a3[9]; v21 = 0; v26 = v12; v27 = 0; v13 = (char *)sub_40A910(-1938659953); v14 = sub_7549E0(v13, v16, &v22); sub_492060(v3, (int)v14); return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CC200) -------------------------------------------------------- void __thiscall sub_4CC200(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { const CHAR *v6; // eax int v7; // ecx _DWORD *v8; // [esp+Ch] [ebp-20h] __int16 v9; // [esp+10h] [ebp-1Ch] int v10; // [esp+14h] [ebp-18h] int v11; // [esp+18h] [ebp-14h] int v12; // [esp+1Ch] [ebp-10h] int v13; // [esp+20h] [ebp-Ch] int v14; // [esp+24h] [ebp-8h] v8 = this; v10 = a2; v11 = a3; v12 = a4; v13 = a5; v14 = a6; if ( sub_719000(&dword_B9E560, a2, a3, a4, a5, a6) ) { v6 = sub_40A910(-1834787399); sub_492060(v8, (int)v6); } else { v7 = v8[585]; v9 = -20422; sub_905F90(v7, &v9, 2u); sub_906000(v8[585], &v10, 0x14u); } } // B9E560: using guessed type int dword_B9E560; //----- (004CC2C0) -------------------------------------------------------- int __thiscall sub_4CC2C0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // edi int v4; // edx int v5; // eax int v6; // edx int v7; // eax char *v8; // eax char *v9; // eax char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v3 = this; sub_718BF0(&dword_B9E560, a3[5], a3[6], a3[7], a3[8], a3[9]); v4 = a3[5]; v5 = a3[6]; v13 = a3[7]; *(_DWORD *)v11 = v4; v6 = a3[8]; v12 = v5; v7 = a3[9]; v14 = v6; v15 = v7; v16 = 0; v8 = (char *)sub_40A910(554775348); v9 = sub_7549E0(v8, v11); sub_492060(v3, (int)v9); return a2; } // B9E560: using guessed type int dword_B9E560; //----- (004CC360) -------------------------------------------------------- int __thiscall sub_4CC360(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 8130 ) { v4 = sub_40A910(-874329295); sub_492060(v3, (int)v4); } return a2; } //----- (004CC390) -------------------------------------------------------- int __thiscall sub_4CC390(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax const char *v6; // eax v3 = this; if ( *a3 != 7808 ) { if ( *a3 == 8067 ) { v4 = sub_40A910(-874329295); sub_492060(v3, (int)v4); return a2; } v6 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v6); } return a2; } //----- (004CC3F0) -------------------------------------------------------- int __thiscall sub_4CC3F0(void *this, int a2, const char *a3) { char *v3; // esi int v4; // ebx int v5; // ebx char *v6; // esi const CHAR *v7; // ST14_4 char *v8; // eax const CHAR *v9; // ST14_4 const CHAR *v10; // eax char *v11; // eax int v13; // [esp+18h] [ebp-118h] unsigned int v14; // [esp+1Ch] [ebp-114h] void *v15; // [esp+20h] [ebp-110h] char v16[132]; // [esp+24h] [ebp-10Ch] char v17[132]; // [esp+A8h] [ebp-88h] v15 = this; if ( byte_B9E564 ) { if ( (signed int)*(unsigned __int8 *)a3 > 0 ) { v3 = (char *)&a3[*((unsigned __int8 *)a3 + 21) + 22]; v4 = *(unsigned __int8 *)a3; do { sub_492730((_DWORD ***)v15, 0x2000, v3); v3 += 103; --v4; } while ( v4 ); } if ( a3[21] > 0x80u ) *((_BYTE *)a3 + 21) = -128; strncpy(v17, a3 + 22, *((unsigned __int8 *)a3 + 21)); v5 = 0; v17[*((unsigned __int8 *)a3 + 21)] = 0; v13 = 0; v14 = 0; v6 = v17; if ( v17[0] ) { while ( 1 ) { if ( IsDBCSLeadByte(*v6) ) { v6 += 2; v5 += 2; } else { ++v6; ++v5; } if ( ++v13 >= 50 ) break; if ( !*v6 ) goto LABEL_15; } v14 = strlen(v6); } LABEL_15: *((_BYTE *)a3 + 21) = v5; strncpy(v16, a3 + 22, (unsigned __int8)v5); v16[*((unsigned __int8 *)a3 + 21)] = 0; if ( v14 ) { v7 = sub_40C190(-84466138); v8 = sub_7549E0("%s : %s...", v7, v16); } else { v9 = sub_40C190(-84466138); v8 = sub_7549E0("%s : %s", v9, v16); } if ( byte_B9E564 ) { sub_5E90F0(*((float ***)v15 + 314), 3, (int)v8, dword_AA8CB8, dword_AA8CBC, dword_AA8CC0, dword_AA8CC4, 3.0); sub_6BA650(&dword_AB6520, 41); if ( *((_DWORD *)dword_AD8EBC + 12) <= 0 ) { v10 = sub_40C190(-84466138); v11 = sub_7549E0("%s : %s", v10, v17); sub_605260(*((char **)v15 + 176), (int)v11); } } } return a2; } // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // B9E564: using guessed type char byte_B9E564; // 4CC3F0: using guessed type char var_88[132]; // 4CC3F0: using guessed type char var_10C[132]; //----- (004CC600) -------------------------------------------------------- int __thiscall sub_4CC600(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi char *v4; // eax int v5; // esi int (*v6)(void); // eax int v7; // ST08_4 char *v8; // eax char *v9; // eax int v11; // ST04_4 char *v12; // eax char *v13; // eax v3 = this; if ( a3 ) { v4 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); if ( v4 ) { v5 = *(_DWORD *)(a3 + 2); v6 = *(int (**)(void))(*(_DWORD *)v4 + 84); if ( v5 == 65534 ) { v7 = v6(); v8 = (char *)sub_40A910(2140594113); v9 = sub_7549E0(v8, v7); sub_492060(v3, (int)v9); return a2; } v11 = ((int (__cdecl *)(int))v6)(v5); v12 = (char *)sub_40A910(2007403708); v13 = sub_7549E0(v12, v11); sub_492060(v3, (int)v13); } } return a2; } //----- (004CC690) -------------------------------------------------------- int __thiscall sub_4CC690(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // edi int v4; // edx int v5; // ecx int v6; // edi int v7; // eax int v8; // edx int v9; // ebx int v10; // edx int v11; // eax int v12; // ST0C_4 int v13; // ST08_4 char *v14; // eax char *v15; // eax const char *v17; // eax _DWORD *v18; // [esp+8h] [ebp-20h] char v19[4]; // [esp+Ch] [ebp-1Ch] int v20; // [esp+10h] [ebp-18h] int v21; // [esp+14h] [ebp-14h] int v22; // [esp+18h] [ebp-10h] int v23; // [esp+1Ch] [ebp-Ch] char v24; // [esp+20h] [ebp-8h] v3 = this; v18 = this; if ( a3 ) { if ( *a3 == 8200 ) { v4 = *(_DWORD *)(a3 + 1); v5 = *(_DWORD *)(a3 + 5); v6 = dword_ACB230; v20 = *(_DWORD *)(a3 + 3); v7 = *(_DWORD *)(a3 + 9); *(_DWORD *)v19 = v4; v8 = *(_DWORD *)(a3 + 7); v9 = a3[13]; v21 = v5; v23 = v7; v22 = v8; v24 = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v6 + 200) ) { v10 = *(_DWORD *)(v6 + 196); if ( *(_DWORD *)(v10 + 4 * v9) ) { v11 = *(_DWORD *)(v10 + 4 * v9); if ( v11 ) { v12 = *(_DWORD *)(a3 + 11); v13 = v11 + 34; v14 = (char *)sub_40A910(-705835581); v15 = sub_7549E0(v14, v19, v13, v12); sub_492060(v18, (int)v15); } } } } } else { v17 = sub_41A850(*a3); sub_492060(v3, (int)v17); } } return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004CC780) -------------------------------------------------------- void __thiscall sub_4CC780(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi _DWORD *v7; // eax const CHAR *v8; // eax __int16 v9; // [esp+4h] [ebp-30h] char v10; // [esp+8h] [ebp-2Ch] int v11; // [esp+1Ch] [ebp-18h] int v12; // [esp+20h] [ebp-14h] int v13; // [esp+24h] [ebp-10h] int v14; // [esp+28h] [ebp-Ch] int v15; // [esp+2Ch] [ebp-8h] v6 = this; v12 = a3; v13 = a4; v11 = a2; v15 = a6; v14 = a5; v7 = sub_6C15B0(&dword_B9DC70, &v10); if ( *v7 != a2 || v7[1] != a3 || v7[2] != a4 || v7[3] != a5 || v7[4] != a6 ) { v9 = 14426; sub_905F90(v6[585], &v9, 2u); sub_906000(v6[585], &v11, 0x14u); } else { v8 = sub_40A910(-1834787399); sub_492060(v6, (int)v8); } } // B9DC70: using guessed type int dword_B9DC70; //----- (004CC850) -------------------------------------------------------- int __thiscall sub_4CC850(_DWORD ***this, int a2, _DWORD *a3) { int v3; // edx _DWORD ***v4; // esi int v5; // eax char *v6; // eax char *v7; // eax const char *v8; // eax int v9; // eax char v11[4]; // [esp+8h] [ebp-30h] int v12; // [esp+Ch] [ebp-2Ch] int v13; // [esp+10h] [ebp-28h] int v14; // [esp+14h] [ebp-24h] int v15; // [esp+18h] [ebp-20h] char v16[4]; // [esp+1Ch] [ebp-1Ch] int v17; // [esp+20h] [ebp-18h] int v18; // [esp+24h] [ebp-14h] int v19; // [esp+28h] [ebp-10h] int v20; // [esp+2Ch] [ebp-Ch] char v21; // [esp+30h] [ebp-8h] v3 = a3[1]; v4 = this; *(_DWORD *)v16 = *a3; v18 = a3[2]; v17 = v3; v5 = a3[4]; v19 = a3[3]; v20 = v5; v21 = 0; v6 = (char *)sub_40A910(1603178162); v7 = sub_7549E0(v6, v16); sub_492060(v4, (int)v7); if ( v4[321] ) { v8 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v15 = 0; v14 = 0; v13 = 0; v12 = 0; *(_DWORD *)v11 = 0; strncpy(v11, v8, 0x14u); sub_6C15E0(&dword_B9DC70, *(int *)v11, v12, v13, v14, v15); v9 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); sub_57B850(v4[321], v9); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004CC940) -------------------------------------------------------- int __thiscall sub_4CC940(_DWORD ***this, int a2, int *a3) { int v3; // edx int v4; // eax _DWORD ***v5; // edi int v6; // ecx int v7; // edx int v8; // ecx int v9; // eax int v10; // edx int v11; // eax int v12; // eax char *v13; // eax char *v14; // eax char v16[4]; // [esp+8h] [ebp-34h] int v17; // [esp+Ch] [ebp-30h] int v18; // [esp+10h] [ebp-2Ch] int v19; // [esp+14h] [ebp-28h] int v20; // [esp+18h] [ebp-24h] char v21; // [esp+1Ch] [ebp-20h] int v22; // [esp+20h] [ebp-1Ch] int v23; // [esp+24h] [ebp-18h] int v24; // [esp+28h] [ebp-14h] int v25; // [esp+2Ch] [ebp-10h] int v26; // [esp+30h] [ebp-Ch] char v27; // [esp+34h] [ebp-8h] v3 = a3[2]; v4 = *a3; v5 = this; v17 = a3[1]; v6 = a3[4]; v18 = v3; v7 = a3[5]; v20 = v6; v8 = a3[7]; *(_DWORD *)v16 = v4; v9 = a3[3]; v22 = v7; v10 = a3[8]; v24 = v8; v19 = v9; v11 = a3[6]; v25 = v10; v23 = v11; v12 = a3[9]; v21 = 0; v26 = v12; v27 = 0; v13 = (char *)sub_40A910(372386089); v14 = sub_7549E0(v13, v16, &v22); sub_492060(v5, (int)v14); if ( v5[321] ) { sub_6C15E0(&dword_B9DC70, a3[5], a3[6], a3[7], a3[8], a3[9]); sub_57B850(v5[321], (int)&v22); } return a2; } // B9DC70: using guessed type int dword_B9DC70; //----- (004CCA20) -------------------------------------------------------- char __stdcall sub_4CCA20(int a1, int a2, int a3) { int v3; // eax int v5; // [esp+0h] [ebp-10h] int v6; // [esp+4h] [ebp-Ch] int v7; // [esp+8h] [ebp-8h] v7 = 0; v6 = 0; v5 = 0; v3 = sub_4316B0(&a1); if ( v3 ) { v5 = a1; v6 = a2; v7 = a3; LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 6, 31, &v5, 0xCu); } return v3; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004CCA90) -------------------------------------------------------- int __thiscall sub_4CCA90(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 16256 ) { if ( sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); sub_666040(dword_AD8C90); byte_AD8CD8 = 1; } sub_6E1550(&unk_B9E1CC, 1); v4 = sub_40C190(-842687); } else { v4 = sub_40C190(810388089); } sub_492060(v3, (int)v4); return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004CCB10) -------------------------------------------------------- int __thiscall sub_4CCB10(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi unsigned int v4; // ST04_4 char *v5; // eax char *v6; // eax char *v8; // eax unsigned int v9; // [esp-4h] [ebp-8h] v3 = this; v9 = *a3 % 0x3Cu; if ( (signed int)(*a3 / 0x3Cu) <= 0 ) { v8 = (char *)sub_40A910(442127767); v6 = sub_7549E0(v8, v9); } else { v4 = *a3 / 0x3Cu; v5 = (char *)sub_40A910(627004829); v6 = sub_7549E0(v5, v4, v9); } sub_492060(v3, (int)v6); return a2; } //----- (004CCB80) -------------------------------------------------------- int __thiscall sub_4CCB80(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi char *v5; // eax int v6; // eax int v7; // ebx int v8; // edi int v9; // esi int v10; // edi int *v11; // eax const char *v12; // eax int result; // eax int v14; // eax const CHAR *v15; // eax const CHAR *v16; // eax char v17[4]; // [esp+8h] [ebp-44h] int v18; // [esp+Ch] [ebp-40h] int v19; // [esp+10h] [ebp-3Ch] int v20; // [esp+14h] [ebp-38h] int v21; // [esp+18h] [ebp-34h] char v22[4]; // [esp+1Ch] [ebp-30h] int v23; // [esp+20h] [ebp-2Ch] int v24; // [esp+24h] [ebp-28h] int v25; // [esp+28h] [ebp-24h] int v26; // [esp+2Ch] [ebp-20h] char v27[4]; // [esp+30h] [ebp-1Ch] int v28; // [esp+34h] [ebp-18h] int v29; // [esp+38h] [ebp-14h] int v30; // [esp+3Ch] [ebp-10h] int v31; // [esp+40h] [ebp-Ch] char v32; // [esp+44h] [ebp-8h] v3 = *a3; v4 = this; if ( (_WORD)v3 == 8368 ) { v5 = (char *)sub_40A910(781222205); sub_462C30(1, v5); v6 = sub_6805D0((int)byte_AD9238); v7 = a3[1]; v8 = dword_ACB230; v9 = v6; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v11 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v7); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } v26 = 0; v25 = 0; v24 = 0; v23 = 0; *(_DWORD *)v22 = 0; v12 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; strncpy(v17, v12, 0x14u); *(_DWORD *)v27 = *(_DWORD *)(v9 + 4); v28 = *(_DWORD *)(v9 + 8); v29 = *(_DWORD *)(v9 + 12); v30 = *(_DWORD *)(v9 + 16); v31 = *(_DWORD *)(v9 + 20); v32 = 0; v26 = 0; v25 = 0; v24 = 0; v23 = 0; *(_DWORD *)v22 = 0; strncpy(v22, v27, 0x14u); if ( *(_DWORD *)v22 != *(_DWORD *)v17 || v23 != v18 || v24 != v19 || v25 != v20 || v26 != v21 ) v9 = sub_681CC0(byte_AD9238, v17); if ( v9 && v10 ) { if ( *(_DWORD *)(v10 + 374) != 4 ) { result = a2; if ( *(_DWORD *)(v10 + 374) == 5 ) *(_WORD *)(v9 + 119) = 257; return result; } *(_BYTE *)(v9 + 119) = 1; } return a2; } v14 = v3 - 8377; if ( v14 ) { if ( v14 != 1 ) { v15 = sub_40C190(577119654); sub_492060(v4, (int)v15); return a2; } v16 = sub_40A910(170205213); } else { v16 = sub_40A910(-1964077166); } sub_492060(v4, (int)v16); return a2; } // ACB230: using guessed type int dword_ACB230; //----- (004CCD70) -------------------------------------------------------- int __thiscall sub_4CCD70(_DWORD *this, int a2, unsigned __int16 *a3) { unsigned __int16 *v3; // edx _WORD *v4; // eax unsigned __int16 v5; // ax _DWORD *v6; // edi _DWORD *v7; // esi int v8; // ebx unsigned int v9; // eax unsigned int v10; // eax int v11; // eax int v12; // eax _DWORD *v13; // eax int v14; // eax const CHAR *v15; // eax int result; // eax _DWORD **v17; // ecx const CHAR *v18; // eax char v19; // [esp+Ch] [ebp-70h] unsigned __int8 v20; // [esp+47h] [ebp-35h] char v21; // [esp+48h] [ebp-34h] int v22; // [esp+74h] [ebp-8h] _DWORD *v23; // [esp+78h] [ebp-4h] _WORD *v24; // [esp+88h] [ebp+Ch] v3 = a3; v4 = a3 + 1; v24 = v4; v5 = *v4; v6 = this; v7 = 0; v8 = 0; v23 = this; if ( v5 >> 10 == 9 ) { v9 = v5 & 0x3FF; if ( v9 >= 0xC0 ) goto LABEL_17; v8 = dword_ADA234[v9]; } else { if ( v5 >> 10 != 8 ) goto LABEL_17; v10 = v5 & 0x3FF; if ( v10 >= 0x1E ) { v8 = 0; goto LABEL_17; } v8 = dword_ADA534[v10]; } if ( v8 ) { qmemcpy(&v19, (const void *)(v8 + 8), 0x67u); v11 = v20; if ( !v21 ) v11 = v20 + 1; v12 = v11 - 1; if ( v12 ) { if ( v12 == 1 ) { v7 = (_DWORD *)v23[247]; v6 = v23; goto LABEL_17; } v13 = v23; v7 = (_DWORD *)v23[248]; } else { v13 = v23; v7 = (_DWORD *)v23[246]; } v6 = v13; } LABEL_17: v14 = *v3; if ( v14 == 8320 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v7 + 260))(v7) ) sub_50B250(v7, (int)v24, v8); v17 = (_DWORD **)v6[252]; if ( v17 ) sub_50B620(v17, v8); if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } nullsub_30(&dword_ACE484); v18 = sub_4090F0(1906887153); sub_492060(v6, (int)v18); v22 = 3; v23 = 0; sub_6B69F0(dword_AB6534, (int)&v22, 0.0, 0); result = a2; } else { if ( (unsigned int)(v14 - 8321) > 7 ) v15 = sub_40C190(-385076149); else v15 = sub_41A850(*v3); sub_492060(v6, (int)v15); if ( v7 ) sub_50B020(v7, v24); result = a2; } return result; } // 6D0CF0: using guessed type int __thiscall nullsub_30(_DWORD); // AB6534: using guessed type int dword_AB6534; // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; // ADA534: using guessed type int dword_ADA534[]; //----- (004CCF00) -------------------------------------------------------- int __thiscall sub_4CCF00(_DWORD *this, int a2, unsigned __int16 *a3) { unsigned __int16 *v3; // edx _WORD *v4; // eax unsigned __int16 v5; // ax _DWORD *v6; // edi _DWORD *v7; // esi int v8; // ebx unsigned int v9; // eax unsigned int v10; // eax int v11; // eax int v12; // eax _DWORD *v13; // eax int v14; // eax const CHAR *v15; // eax int result; // eax _DWORD **v17; // ecx const CHAR *v18; // eax char v19; // [esp+Ch] [ebp-70h] unsigned __int8 v20; // [esp+47h] [ebp-35h] char v21; // [esp+48h] [ebp-34h] int v22; // [esp+74h] [ebp-8h] _DWORD *v23; // [esp+78h] [ebp-4h] _WORD *v24; // [esp+88h] [ebp+Ch] v3 = a3; v4 = a3 + 1; v24 = v4; v5 = *v4; v6 = this; v7 = 0; v8 = 0; v23 = this; if ( v5 >> 10 == 9 ) { v9 = v5 & 0x3FF; if ( v9 >= 0xC0 ) goto LABEL_17; v8 = dword_ADA234[v9]; } else { if ( v5 >> 10 != 8 ) goto LABEL_17; v10 = v5 & 0x3FF; if ( v10 >= 0x1E ) { v8 = 0; goto LABEL_17; } v8 = dword_ADA534[v10]; } if ( v8 ) { qmemcpy(&v19, (const void *)(v8 + 8), 0x67u); v11 = v20; if ( !v21 ) v11 = v20 + 1; v12 = v11 - 1; if ( v12 ) { if ( v12 == 1 ) { v7 = (_DWORD *)v23[250]; v6 = v23; goto LABEL_17; } v13 = v23; v7 = (_DWORD *)v23[251]; } else { v13 = v23; v7 = (_DWORD *)v23[249]; } v6 = v13; } LABEL_17: v14 = *v3; if ( v14 == 8336 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v7 + 260))(v7) ) sub_50B250(v7, (int)v24, v8); v17 = (_DWORD **)v6[252]; if ( v17 ) sub_50B620(v17, v8); v22 = 3; v23 = 0; sub_6B69F0(dword_AB6534, (int)&v22, 0.0, 0); v18 = sub_4090F0(-2118859565); sub_492060(v6, (int)v18); result = a2; } else { if ( (unsigned int)(v14 - 8337) > 4 ) v15 = sub_40C190(-385076149); else v15 = sub_41A850(*v3); sub_492060(v6, (int)v15); if ( v7 ) sub_50B020(v7, v24); result = a2; } return result; } // AB6534: using guessed type int dword_AB6534; // ADA534: using guessed type int dword_ADA534[]; //----- (004CD060) -------------------------------------------------------- int __thiscall sub_4CD060(_DWORD *this, int a2, unsigned __int16 *a3) { unsigned __int16 v3; // ax _DWORD *v4; // ebx __int16 v5; // cx unsigned int v6; // eax unsigned int v7; // eax int v8; // eax int v9; // eax _DWORD *v10; // ecx int v11; // eax const CHAR *v12; // eax _DWORD *v13; // ebx _DWORD *v15; // esi _DWORD **v16; // ecx _DWORD *v17; // ebx char v18; // [esp+8h] [ebp-78h] unsigned __int8 v19; // [esp+43h] [ebp-3Dh] char v20; // [esp+44h] [ebp-3Ch] int v21; // [esp+70h] [ebp-10h] _WORD *v22; // [esp+74h] [ebp-Ch] _DWORD *v23; // [esp+78h] [ebp-8h] int v24; // [esp+7Ch] [ebp-4h] v22 = a3 + 1; v3 = a3[1]; v4 = this; v5 = a3[1] >> 10; v23 = 0; v24 = 0; if ( v5 == 9 ) { v6 = v3 & 0x3FF; if ( v6 >= 0xC0 ) { v24 = 0; goto LABEL_27; } v24 = dword_ADA234[v6]; } else { if ( v5 != 8 ) goto LABEL_27; v7 = v3 & 0x3FF; if ( v7 >= 0x1E ) { v24 = 0; goto LABEL_27; } v24 = dword_ADA534[v7]; } if ( v24 ) { qmemcpy(&v18, (const void *)(v24 + 8), 0x67u); v8 = v19; if ( !v20 ) v8 = v19 + 1; v9 = v8 - 1; if ( v9 ) { if ( v9 == 1 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v4[250] + 260))() ) { v10 = (_DWORD *)v4[250]; } else { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[247] + 260))() ) goto LABEL_27; v10 = (_DWORD *)v4[247]; } } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v4[251] + 260))() ) { v10 = (_DWORD *)v4[251]; } else { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[248] + 260))() ) goto LABEL_27; v10 = (_DWORD *)v4[248]; } } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v4[249] + 260))() ) { v10 = (_DWORD *)v4[249]; } else { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[246] + 260))() ) goto LABEL_27; v10 = (_DWORD *)v4[246]; } v23 = v10; } LABEL_27: v11 = *a3; if ( v11 != 8352 ) { if ( (unsigned int)(v11 - 8353) > 4 ) v12 = sub_40C190(-385076149); else v12 = sub_41A850(*a3); sub_492060(v4, (int)v12); if ( v23 ) { sub_50B020(v23, v22); v13 = (_DWORD *)v4[179]; if ( v13 ) sub_537BA0(v13, 0); } return a2; } v15 = v23; if ( v23 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v23 + 260))(v23) ) sub_50B250(v15, (int)v22, v24); v16 = (_DWORD **)v4[252]; if ( v16 ) sub_50B620(v16, v24); v21 = 3; v22 = 0; sub_6B69F0(dword_AB6534, (int)&v21, 0.0, 0); v17 = (_DWORD *)v4[179]; if ( !v17 ) return a2; sub_537BA0(v17, 1); return a2; } // AB6534: using guessed type int dword_AB6534; // ADA534: using guessed type int dword_ADA534[]; //----- (004CD290) -------------------------------------------------------- int __thiscall sub_4CD290(_DWORD *this, int a2, int a3) { unsigned __int16 v3; // ax unsigned int v4; // eax int v5; // ebx unsigned int v6; // eax int v7; // esi _DWORD *v8; // esi _DWORD **v9; // ecx char v11; // [esp+4h] [ebp-6Ch] unsigned __int8 v12; // [esp+3Fh] [ebp-31h] char v13; // [esp+40h] [ebp-30h] _DWORD *v14; // [esp+6Ch] [ebp-4h] v3 = *(_WORD *)a3; v14 = this; if ( v3 >> 10 == 9 ) { v4 = v3 & 0x3FF; if ( v4 >= 0xC0 ) return a2; v5 = dword_ADA234[v4]; } else { if ( v3 >> 10 != 8 ) return a2; v6 = v3 & 0x3FF; if ( v6 >= 0x1E ) return a2; v5 = dword_ADA534[v6]; } if ( v5 ) { qmemcpy(&v11, (const void *)(v5 + 8), 0x67u); v7 = v12; if ( !v13 ) v7 = v12 + 1; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v5 + 80))( v5, *(unsigned __int8 *)(a3 + 2), *(unsigned __int8 *)(a3 + 3)); if ( v7 == 1 ) { v8 = (_DWORD *)v14[246]; } else if ( v7 == 2 ) { v8 = (_DWORD *)v14[247]; } else { v8 = (_DWORD *)v14[248]; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v8 + 260))(v8) ) sub_50B250(v8, a3, v5); v9 = (_DWORD **)v14[252]; if ( v9 ) sub_50B620(v9, v5); } return a2; } // ADA534: using guessed type int dword_ADA534[]; //----- (004CD380) -------------------------------------------------------- char __thiscall sub_4CD380(void *this) { void *v2; // [esp+0h] [ebp-4h] v2 = this; LOWORD(v2) = 28741; return sub_906000(dword_AB7F4C, &v2, 2u); } // AB7F4C: using guessed type int dword_AB7F4C; //----- (004CD3B0) -------------------------------------------------------- char __thiscall sub_4CD3B0(void *this) { void *v2; // [esp+0h] [ebp-4h] v2 = this; LOWORD(v2) = 28739; return sub_906000(dword_AB7F4C, &v2, 2u); } // AB7F4C: using guessed type int dword_AB7F4C; //----- (004CD3E0) -------------------------------------------------------- int __thiscall sub_4CD3E0(_DWORD **this, int a2, _BYTE *a3) { _DWORD **v3; // esi unsigned int v4; // eax int v5; // eax int v6; // edi unsigned int v7; // ST04_4 int v8; // eax v3 = this; if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) > 1 && *a3 == 1 ) { if ( sub_686650(&byte_ADA230, &a3) ) { v4 = (unsigned __int16)a3 & 0x3FF; if ( v4 < 0xC0 ) { v5 = dword_ADA234[v4]; if ( v5 ) { v6 = *(_DWORD *)(v5 + 112); if ( v6 ) { if ( (*(unsigned __int8 (**)(void))(*v3[316] + 260))() ) sub_4A53B0(v3); v7 = *(_DWORD *)(v6 + 127); v8 = sub_680890((unsigned __int8 *)byte_AD9238); sub_574DB0(v3[316], v8, v7); sub_4A7240(v3); } } } } } return a2; } // ADA230: using guessed type char byte_ADA230; //----- (004CD480) -------------------------------------------------------- char __thiscall sub_4CD480(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = 2143; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CD4F0) -------------------------------------------------------- char __thiscall sub_4CD4F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // ecx __int16 v9; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v6 = this; v10 = a2; v11 = a3; v13 = a5; v12 = a4; v14 = a6; v7 = this[585]; v9 = 2145; sub_905F90(v7, &v9, 2u); return sub_906000(v6[585], &v10, 0x14u); } //----- (004CD560) -------------------------------------------------------- int __thiscall sub_4CD560(_DWORD *this, int a2, int a3) { int v3; // edx _DWORD *v4; // esi int v5; // ecx int v6; // edx int v7; // ecx signed int v8; // eax char *v9; // eax void *v10; // eax char v12[4]; // [esp+4h] [ebp-1Ch] int v13; // [esp+8h] [ebp-18h] int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] int v16; // [esp+14h] [ebp-Ch] char v17; // [esp+18h] [ebp-8h] v3 = *(_DWORD *)(a3 + 4); v4 = this; *(_DWORD *)v12 = *(_DWORD *)a3; v5 = *(_DWORD *)(a3 + 8); v13 = v3; v6 = *(_DWORD *)(a3 + 12); v14 = v5; v7 = *(_DWORD *)(a3 + 16); v8 = *(unsigned __int16 *)(a3 + 20); v15 = v6; v16 = v7; v17 = 0; if ( (_WORD)v8 == 8552 ) { v9 = (char *)sub_40A910(564370797); v10 = sub_7549E0(v9, v12); } else { v10 = (void *)sub_41A850(v8); } sub_492060(v4, (int)v10); return a2; } //----- (004CD5F0) -------------------------------------------------------- int __thiscall sub_4CD5F0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 8560 ) v4 = sub_40A910(1923190644); else v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); return a2; } //----- (004CD640) -------------------------------------------------------- int __thiscall sub_4CD640(void *this, int a2, int a3) { void *v3; // ebx int v4; // esi void (__thiscall ***v5)(_DWORD, signed int); // edi float **v6; // esi float *v7; // eax int v8; // ST04_4 int v9; // ST08_4 int v10; // ST0C_4 int v11; // ST10_4 const CHAR *v12; // eax int v14; // [esp+14h] [ebp-10h] v3 = this; if ( *(_WORD *)a3 != 9216 ) { v4 = *sub_49F490(&a3); if ( a3 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } if ( v4 ) { if ( *(_BYTE *)(v4 + 52) ) { *(_BYTE *)(v4 + 52) = 0; v6 = (float **)*((_DWORD *)v3 + 305); if ( v6 ) { sub_5E9180(*((float ***)v3 + 305)); v7 = sub_419EE0((float *)&v14, 0xFFu, 0x90u, 0, 0xFFu); v8 = *(_DWORD *)v7; v9 = *((_DWORD *)v7 + 1); v10 = *((_DWORD *)v7 + 2); v11 = *((_DWORD *)v7 + 3); v12 = sub_40A910(1011971465); sub_5E9030(v6, (int)v12, v8, v9, v10, v11, 0, 3.0); } } } } return a2; } //----- (004CD720) -------------------------------------------------------- int __userpurge sub_4CD720@(int a1@, double a2@, int a3, unsigned __int16 *a4) { int v4; // edi unsigned int v5; // eax _DWORD *v6; // esi int v7; // ebx int v8; // eax int v9; // esi unsigned __int16 *v10; // eax const char *v12; // eax unsigned int v13; // [esp+8h] [ebp-4h] unsigned int v14; // [esp+18h] [ebp+Ch] v4 = a1; if ( *a4 != 11136 ) { sub_4FDC50(*(float **)(a1 + 4916)); sub_4AA750((_DWORD *)v4, a2, 0, 0, 0, 0, 0); v12 = sub_41A850(*a4); sub_492060((_DWORD *)v4, (int)v12); return a3; } v5 = *((unsigned __int8 *)a4 + 2); if ( v5 >= 0xC0 ) return a3; v6 = (_DWORD *)dword_ADA234[v5]; if ( !v6 ) return a3; v7 = 0; v14 = (*(int (__thiscall **)(_DWORD *))(*v6 + 56))(v6); v8 = (*(int (__thiscall **)(_DWORD *))(*v6 + 64))(v6); v9 = v6[28]; v13 = v8; if ( v9 ) { v10 = (unsigned __int16 *)sub_4DCD20((char *)(v9 + 2)); if ( v10 ) v7 = *v10; } sub_4FF700(*(_BYTE **)(v4 + 4916), v7, v13, v14, 0); sub_4FD910(*(_BYTE **)(v4 + 4916)); return a3; } //----- (004CD800) -------------------------------------------------------- int __thiscall sub_4CD800(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi const CHAR *v4; // eax _DWORD *v5; // ecx const char *v7; // eax v3 = this; if ( a3[2] == 11168 ) { if ( a3[1] == -1 ) v4 = sub_40A910(-1243488801); else v4 = sub_40A910(1283428236); sub_492060(v3, (int)v4); v5 = (_DWORD *)v3[1227]; if ( v5 ) { sub_503E40(v5, *a3, a3[1]); sub_5085B0((int *)v3[1227], 0); return a2; } } else { v7 = sub_41A850(a3[2]); sub_492060(v3, (int)v7); } return a2; } //----- (004CD890) -------------------------------------------------------- int __thiscall sub_4CD890(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi _DWORD *v4; // ecx const CHAR *v5; // eax int result; // eax const char *v7; // eax v3 = this; if ( a3[1] == 11176 ) { v4 = (_DWORD *)this[1227]; if ( v4 ) { sub_503E70(v4, *a3, 1); sub_5085B0((int *)v3[1227], 0); } v5 = sub_40A910(-1392790096); sub_492060(v3, (int)v5); result = a2; } else { v7 = sub_41A850(a3[1]); sub_492060(v3, (int)v7); result = a2; } return result; } //----- (004CD900) -------------------------------------------------------- char __thiscall sub_4CD900(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // ecx int v4; // edx int v5; // eax int v6; // edx int v7; // eax int v8; // ecx __int16 v10; // [esp+8h] [ebp-1Ch] int v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] int v15; // [esp+1Ch] [ebp-8h] v2 = this; v3 = this[584]; v10 = -15359; sub_905F90(v3, &v10, 2u); v4 = *a2; v5 = a2[1]; v13 = a2[2]; v11 = v4; v6 = a2[3]; v12 = v5; v7 = a2[4]; v8 = v2[584]; v14 = v6; v15 = v7; return sub_906000(v8, &v11, 0x14u); } //----- (004CD980) -------------------------------------------------------- int __thiscall sub_4CD980(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax unsigned int v5; // ecx _DWORD *v6; // ecx int v7; // eax const char *v8; // eax int result; // eax int v10; // eax int v11; // ST04_4 char *v12; // eax char *v13; // eax v3 = this; dword_ACEC24 = 0; v4 = this[179]; v5 = *(_DWORD *)(v4 + 1504); if ( v5 < 0xC0 && (v6 = *(_DWORD **)(v4 + 4 * v5 + 348)) != 0 ) v7 = sub_5D5470(v6); else v7 = 0; if ( *a3 == 10368 ) { if ( v7 ) { v10 = *(_DWORD *)(v7 + 112); if ( v10 ) { v11 = v10 + 34; v12 = (char *)sub_40A910(1844690929); v13 = sub_7549E0(v12, v11); sub_492060(v3, (int)v13); } } sub_5347C0((float *)v3[179]); sub_6BA650(&dword_AB6520, 47); result = a2; } else { v8 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v8); result = a2; } return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (004CDA30) -------------------------------------------------------- int __userpurge sub_4CDA30@(int a1@, int a2@, int a3, int a4) { int v4; // esi const CHAR *v5; // eax const CHAR *v6; // eax int v7; // eax v4 = a1; if ( *(_DWORD *)(a1 + 4936) ) { v5 = sub_40A910(-684572879); sub_4EB180(*(_DWORD *)(v4 + 4936), a2, v4, (int)v5, (int)aIii, 1, 10.0); } v6 = sub_40A910(2043209673); sub_492120((_DWORD ***)v4, (int)v6); sub_4ECF70(*(_DWORD *)(v4 + 4952)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 4944)); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 4952) + 260))() ) { v7 = sub_4ED190(*(_BYTE **)(v4 + 4952)); if ( v7 != -1 ) { sub_4BF630((_DWORD *)v4, v7, 27); return a3; } } else { sub_4ED960(*(_DWORD **)(v4 + 4944), 1); } return a3; } //----- (004CDAF0) -------------------------------------------------------- int __thiscall sub_4CDAF0(int *this, int a2, unsigned __int16 *a3) { int *v3; // ebx unsigned __int16 *v4; // esi char *v5; // eax char *v6; // edi unsigned __int16 *v7; // ecx const CHAR *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi v3 = this; v4 = a3; v5 = sub_664AB0(dword_AD8C90, *a3); v6 = v5; if ( v5 ) { sub_7443B0(v5, (int)dword_AD8EBC, (volatile LONG **)*((unsigned __int8 *)v4 + 2)); sub_744200(v6, &a3, *((unsigned __int8 *)v4 + 2)); v7 = a3; if ( a3 ) { sub_6AF370( &unk_B91250, "Pet_St01", *((_DWORD *)a3 + 35), *((_DWORD *)a3 + 36), *((_DWORD *)a3 + 37), dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); v7 = a3; } if ( !*((_BYTE *)v4 + 2) ) { v8 = sub_40C190(1128801657); sub_492060(v3, (int)v8); sub_4AA8A0(v3, *v4, *((unsigned __int8 *)v4 + 3)); v7 = a3; } if ( v7 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } } else { sub_4B7A00(v3, *v4, 51, 2); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004CDC50) -------------------------------------------------------- int __thiscall sub_4CDC50(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int **v4; // esi void (__thiscall ***v5)(_DWORD, signed int); // esi int v7; // [esp+18h] [ebp-10h] int v8; // [esp+24h] [ebp-4h] v3 = this; if ( dword_AD8EBC ) { v4 = (int **)*((_DWORD *)dword_AD8EBC + 731); if ( v4 ) { sub_744200(v4, &v7, *((_DWORD *)dword_AD8EBC + 730)); v8 = 0; if ( v7 ) sub_6AF370( &unk_B91250, "Pet_Fi01", *(_DWORD *)(v7 + 140), *(_DWORD *)(v7 + 144), *(_DWORD *)(v7 + 148), dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); sub_744BC0(v4, 0, 0, 0); sub_7444F0(v4, *((_DWORD *)dword_AD8EBC + 730)); if ( (unsigned __int8)sub_4DC790((float *)v3 + 1210) ) { sub_4A1330(v3, (int)(v3 + 1214), *((_BYTE *)v3 + 4868)); *((_WORD *)v3 + 2420) = -1; v3[1211] = 0; v3[1212] = 0; v3[1213] = 0; v3[1214] = dword_BA45C0; v3[1215] = dword_BA45C4; v3[1216] = dword_BA45C8; *((_BYTE *)v3 + 4868) = 0; } v5 = (void (__thiscall ***)(_DWORD, signed int))v7; v8 = -1; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v5 ) (**v5)(v5, 1); } } sub_4AB820((_DWORD **)v3); sub_4A6920(); return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004CDDF0) -------------------------------------------------------- int __thiscall sub_4CDDF0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax const CHAR *v5; // eax v3 = this; v4 = this[1243]; if ( v4 ) { if ( !*(_DWORD *)(v4 + 436) && *a3 ) sub_4A6920(); *(_DWORD *)(v3[1243] + 436) = (unsigned __int16)*a3; sub_50E840((_DWORD *)v3[1243]); } if ( !*a3 ) { sub_4A69A0(); v5 = sub_40C190(-2119901726); sub_492060(v3, (int)v5); } return a2; } //----- (004CDE60) -------------------------------------------------------- int __thiscall sub_4CDE60(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi signed int v4; // eax _DWORD *v5; // edi int v6; // ebx const CHAR *v7; // eax int result; // eax const char *v9; // eax v3 = this; v4 = *a3; if ( (_WORD)v4 == 13520 ) { v5 = sub_443A80(*(_DWORD *)(a3 + 1)); if ( v5 ) { sub_615820((_DWORD **)v3[245]); v6 = v3[245]; v7 = sub_4090F0(-2072286066); sub_617920(v6, (int)(v5 + 1), v7, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[245]); } result = a2; } else { v9 = sub_41A850(v4); sub_492060(v3, (int)v9); result = a2; } return result; } //----- (004CDEF0) -------------------------------------------------------- int __thiscall sub_4CDEF0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi signed int v4; // eax _DWORD *v5; // edi int v6; // ebx const CHAR *v7; // eax int result; // eax const char *v9; // eax v3 = this; v4 = *a3; if ( (_WORD)v4 == 13520 ) { v5 = sub_443A80(*(_DWORD *)(a3 + 1)); if ( v5 ) { sub_615820((_DWORD **)v3[245]); v6 = v3[245]; v7 = sub_4090F0(-2055508850); sub_617920(v6, (int)(v5 + 1), v7, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[245]); } result = a2; } else { v9 = sub_41A850(v4); sub_492060(v3, (int)v9); result = a2; } return result; } //----- (004CDF80) -------------------------------------------------------- char __stdcall sub_4CDF80(__int16 a1, int a2, int a3, int a4, int a5) { __int16 v6; // [esp+0h] [ebp-18h] int v7; // [esp+2h] [ebp-16h] int v8; // [esp+6h] [ebp-12h] int v9; // [esp+Ah] [ebp-Eh] int v10; // [esp+Eh] [ebp-Ah] v8 = a3; v7 = a2; v6 = a1; v10 = a5; v9 = a4; return sub_6F3D10(&off_AB7F2C, 53, 7, &v6, 0x12u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004CDFE0) -------------------------------------------------------- int __thiscall sub_4CDFE0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // eax float *v6; // ecx _DWORD *v7; // ST00_4 void (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // eax _DWORD *v10; // eax float *v11; // ecx _DWORD *v12; // ST00_4 void (__thiscall ***v13)(_DWORD, signed int); // edi const char *v14; // eax int v16; // [esp+Ch] [ebp-14h] int v17; // [esp+10h] [ebp-10h] int v18; // [esp+1Ch] [ebp-4h] v3 = this; if ( *a3 == 12456 ) { v4 = this[179]; if ( v4 ) { *(_WORD *)(**(_DWORD **)(v4 + 1632) + 28) &= 0xFFFEu; v5 = sub_4DC970((_DWORD *)this[179], &v17); v6 = *(float **)(v3[179] + 1632); v7 = (_DWORD *)*v5; v18 = 0; sub_6B0B40(v6, v7); v18 = -1; if ( v17 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v17; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } v9 = **(_DWORD **)(v3[179] + 1636); *(_WORD *)(v9 + 28) &= 0xFFFEu; v10 = sub_4DC9A0((_DWORD *)v3[179], &v16); v11 = *(float **)(v3[179] + 1636); v12 = (_DWORD *)*v10; v18 = 1; sub_6B0B40(v11, v12); v18 = -1; if ( v16 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } } sub_6BA650(&dword_AB6520, 63); } v14 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v14); return a2; } //----- (004CE140) -------------------------------------------------------- int __thiscall sub_4CE140(_DWORD *this, int a2, __int16 *a3) { __int16 v3; // ax _DWORD *v4; // esi _DWORD *v5; // ecx const CHAR *v7; // eax v3 = *a3; v4 = this; if ( *a3 == 12353 || v3 == 12354 || v3 == 12355 ) { v7 = sub_40A910(643471247); sub_492060(v4, (int)v7); } else if ( v3 == 12352 ) { v5 = (_DWORD *)this[147]; if ( v5 ) { sub_5A0040(v5, (int)(a3 + 2), a3[1]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v4[147]); return a2; } } return a2; } //----- (004CE1D0) -------------------------------------------------------- int __thiscall sub_4CE1D0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v6; // eax v3 = this; switch ( *a3 ) { case 0x3103: v6 = sub_40A910(-1073467108); goto LABEL_7; case 0x3108: v6 = sub_40A910(627352709); LABEL_7: sub_492060(v3, (int)v6); return a2; case 0x3109: v4 = sub_4090F0(1370853055); sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004CE230) -------------------------------------------------------- int __thiscall sub_4CE230(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax int v6; // eax char *v7; // eax char *v8; // eax const CHAR *v10; // eax int v11; // [esp-4h] [ebp-8h] v3 = this; v4 = this[1247]; if ( v4 && *a3 == 12560 ) { v5 = *(_DWORD *)(v4 + 432); if ( v5 ) { v6 = v5 - 1; if ( !v6 ) { v11 = (int)(this + 1260); v7 = (char *)sub_40A910(965973653); goto LABEL_7; } if ( v6 == 1 ) { v11 = (int)(this + 1260); v7 = (char *)sub_40A910(-1919363109); LABEL_7: v8 = sub_7549E0(v7, v11); sub_492060(v3, (int)v8); return a2; } } else { v10 = sub_40A910(-1850677035); sub_492060(v3, (int)v10); } } return a2; } //----- (004CE2C0) -------------------------------------------------------- int __thiscall sub_4CE2C0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi int v4; // edx int v5; // eax char *v6; // eax char *v7; // eax char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v3 = this; if ( this[1247] ) { v4 = a3[1]; *(_DWORD *)v9 = *a3; v11 = a3[2]; v10 = v4; v5 = a3[4]; v12 = a3[3]; v13 = v5; v14 = 0; v6 = (char *)sub_40A910(2147347413); v7 = sub_7549E0(v6, v9); sub_492060(v3, (int)v7); sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[1247]); } return a2; } //----- (004CE350) -------------------------------------------------------- int __thiscall sub_4CE350(_DWORD *this, int a2, _BYTE *a3) { int v3; // eax unsigned int v4; // edi unsigned int v5; // esi _BYTE *v6; // eax int v8; // ST0C_4 int v9; // ST08_4 int v10; // ST04_4 char *v11; // eax void *v12; // eax _DWORD *v13; // [esp+8h] [ebp-4h] v3 = *(_DWORD *)(dword_ACDA18 + 56); v13 = this; if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { while ( 1 ) { v6 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACDA18 + 4), v5); if ( !v6 ) break; if ( *a3 == *v6 ) { if ( v5 ) { v12 = (void *)sub_40A910(424167965); } else { v8 = (unsigned __int8)a3[3]; v9 = (unsigned __int8)a3[2]; v10 = (unsigned __int8)a3[1]; v11 = (char *)sub_40A910(-1868063526); v12 = sub_7549E0(v11, v10, v9, v8); } sub_492060(v13, (int)v12); return a2; } if ( ++v5 >= v4 ) return a2; } } return a2; } // ACDA18: using guessed type int dword_ACDA18; //----- (004CE420) -------------------------------------------------------- int __thiscall sub_4CE420(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi int v4; // ecx const CHAR *v5; // eax v3 = this; v4 = this[1247]; if ( v4 ) { if ( *a3 == 12576 ) { sub_5C4300(v4, 1); sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[1247]); } else if ( *a3 == 12578 ) { v5 = sub_4090F0(-1136445411); sub_492060(v3, (int)v5); return a2; } } return a2; } //----- (004CE480) -------------------------------------------------------- int __thiscall sub_4CE480(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 12482 ) { v4 = sub_40C190(2058342152); sub_492060(v3, (int)v4); } return a2; } //----- (004CE4B0) -------------------------------------------------------- int __thiscall sub_4CE4B0(_DWORD *this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD *v4; // esi int v5; // eax char v6; // dl int v7; // eax _DWORD *v8; // esi char v9; // al const CHAR *v10; // eax _DWORD *v11; // ecx _DWORD *v13; // [esp+Ch] [ebp-34h] char v14[4]; // [esp+10h] [ebp-30h] int v15; // [esp+14h] [ebp-2Ch] int v16; // [esp+18h] [ebp-28h] int v17; // [esp+1Ch] [ebp-24h] int v18; // [esp+20h] [ebp-20h] int v19; // [esp+24h] [ebp-1Ch] int v20; // [esp+28h] [ebp-18h] int v21; // [esp+2Ch] [ebp-14h] int v22; // [esp+30h] [ebp-10h] int v23; // [esp+34h] [ebp-Ch] char v24; // [esp+38h] [ebp-8h] v3 = *a3; v4 = this; v13 = this; if ( (_WORD)v3 == 12784 ) { v23 = 0; v22 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; v17 = 0; v16 = 0; v15 = 0; *(_DWORD *)v14 = 0; v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); sub_4DC090(v5, v14); v19 = *(_DWORD *)v14; v20 = v15; v21 = v16; v6 = *((_BYTE *)a3 + 2); v22 = v17; v7 = v4[192]; v23 = v18; v24 = v6; v8 = *(_DWORD **)(v7 + 115704); if ( v8 ) { sub_60E9E0(v8, (int)&v19); sub_60DD90((_DWORD **)v8); sub_60D190((_DWORD **)v8, *((_BYTE *)a3 + 2)); v9 = *((_BYTE *)a3 + 2); if ( !v9 ) { v10 = sub_4090F0(892535867); v11 = v13; LABEL_11: sub_492060(v11, (int)v10); return a2; } if ( v9 == 1 ) { v10 = sub_4090F0(977142649); v11 = v13; goto LABEL_11; } } } else { switch ( v3 ) { case 12785: case 12786: case 12787: case 12789: case 12790: case 12791: v10 = sub_4090F0(447169094); goto LABEL_10; case 12788: v10 = sub_4090F0(1503014957); LABEL_10: v11 = v4; goto LABEL_11; default: return a2; } } return a2; } //----- (004CE5F0) -------------------------------------------------------- int __thiscall sub_4CE5F0(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi int v4; // eax const CHAR *v5; // eax v3 = this; v4 = *a3; if ( v4 == 12872 ) { *(_BYTE *)(this[1279] + 700) = 1; sub_4464C0((_DWORD *)this[1279], (_BYTE *)a3 + 2); } else if ( (unsigned int)(v4 - 12873) <= 7 ) { v5 = sub_4090F0(-437663549); sub_492060(v3, (int)v5); return a2; } return a2; } //----- (004CE650) -------------------------------------------------------- int __thiscall sub_4CE650(_BYTE **this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 13864 ) { sub_43D820(this[1283], 1); } else if ( *a3 == 13867 ) { v4 = sub_4090F0(187181706); sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004CE6A0) -------------------------------------------------------- int __thiscall sub_4CE6A0(_BYTE **this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax v3 = this; if ( *a3 == 13880 ) { sub_43D8B0(this[1283], 1); } else if ( *a3 == 13883 ) { v4 = sub_4090F0(187181706); sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004CE6F0) -------------------------------------------------------- int __thiscall sub_4CE6F0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v6; // eax v3 = this; switch ( *a3 ) { case 0x366B: v6 = sub_4090F0(1188938409); sub_492060(v3, (int)v6); break; case 0x366C: v4 = sub_40C190(698305403); goto LABEL_5; case 0x366D: v4 = sub_40C190(543232885); LABEL_5: sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004CE750) -------------------------------------------------------- int __thiscall sub_4CE750(_DWORD *this, int a2, unsigned __int16 *a3) { _DWORD *v3; // esi int v4; // ecx int result; // eax const CHAR *v6; // eax const CHAR *v7; // eax const CHAR *v8; // eax char *v9; // eax v3 = this; switch ( *a3 ) { case 0x3680u: v4 = this[1284]; sub_417E10(); result = a2; break; case 0x3682u: v6 = sub_4090F0(1420051551); sub_492060(v3, (int)v6); result = a2; break; case 0x3684u: v8 = sub_4090F0(127813735); sub_492060(v3, (int)v8); result = a2; break; case 0x3685u: v7 = sub_4090F0(1402624100); sub_492060(v3, (int)v7); result = a2; break; default: v9 = sub_7549E0("Error Class Change[ %d ]", *a3); sub_492060(v3, (int)v9); result = a2; break; } return result; } //----- (004CE810) -------------------------------------------------------- int __thiscall sub_4CE810(_DWORD *this, int a2, int a3) { _BYTE *v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax _DWORD **v7; // ecx v3 = (_BYTE *)a3; v4 = this; if ( *(_WORD *)(a3 + 12) == 14848 ) { v7 = (_DWORD **)this[1294]; if ( v7 ) { a3 = *(unsigned __int8 *)(a3 + 18); sub_449770(v7, *(float *)&v4, (int)(v3 + 14), &a3, v3 + 19, v3, v3 + 4, v3 + 8); } } else if ( *(_WORD *)(a3 + 12) == 14849 ) { v5 = sub_4090F0(-1819319334); sub_492060(v4, (int)v5); return a2; } return a2; } //----- (004CE880) -------------------------------------------------------- int __thiscall sub_4CE880(_DWORD *this, int a2, int a3) { _BYTE *v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax _DWORD **v7; // ecx v3 = (_BYTE *)a3; v4 = this; if ( *(_WORD *)(a3 + 12) == 14848 ) { v7 = (_DWORD **)this[1294]; if ( v7 ) { a3 = *(unsigned __int8 *)(a3 + 18); sub_449770(v7, *(float *)&v4, (int)(v3 + 14), &a3, v3 + 19, v3, v3 + 4, v3 + 8); } } else if ( *(_WORD *)(a3 + 12) == 14849 ) { v5 = sub_4090F0(-1819319334); sub_492060(v4, (int)v5); return a2; } return a2; } //----- (004CE8F0) -------------------------------------------------------- int __thiscall sub_4CE8F0(_DWORD *this, int a2, int a3) { _BYTE *v3; // eax _DWORD *v4; // esi const CHAR *v5; // eax _DWORD **v7; // ecx v3 = (_BYTE *)a3; v4 = this; if ( *(_WORD *)(a3 + 12) == 14848 ) { v7 = (_DWORD **)this[1294]; if ( v7 ) { a3 = *(unsigned __int8 *)(a3 + 18); sub_449770(v7, *(float *)&v4, (int)(v3 + 14), &a3, v3 + 19, v3, v3 + 4, v3 + 8); } } else if ( *(_WORD *)(a3 + 12) == 14849 ) { v5 = sub_4090F0(-1819319334); sub_492060(v4, (int)v5); return a2; } return a2; } //----- (004CE960) -------------------------------------------------------- int __thiscall sub_4CE960(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const CHAR *v4; // eax _DWORD *v6; // ecx v3 = this; if ( *a3 == 14848 ) { v6 = (_DWORD *)this[1294]; if ( v6 ) sub_449D00(v6, (int)a3); } else if ( *a3 == 14849 ) { v4 = sub_4090F0(-1819319334); sub_492060(v3, (int)v4); return a2; } return a2; } //----- (004CE9B0) -------------------------------------------------------- int __stdcall sub_4CE9B0(int a1, int a2) { int v2; // eax const char *v3; // eax const char *v4; // ST0C_4 const char *v5; // ST0C_4 const char *v6; // ST0C_4 char v8; // [esp+4h] [ebp-104h] char v9; // [esp+84h] [ebp-84h] v2 = sub_4316B0((_DWORD *)(a2 + 20)); strncpy(&v8, (const char *)(v2 + 14), 0x20u); if ( *(_BYTE *)(a2 + 32) == 2 ) { v3 = sub_4090F0(1076295557); strncat(&v8, v3, 0x80u); } if ( *(_BYTE *)(a2 + 33) ) { if ( *(_BYTE *)(a2 + 33) == 1 ) { v5 = sub_4090F0(775171171); strncpy(&v9, v5, 0x80u); } else if ( *(_BYTE *)(a2 + 33) == 2 ) { v4 = sub_4090F0(-1635490939); strncpy(&v9, v4, 0x80u); } } else { v6 = sub_4090F0(-1819237176); strncpy(&v9, v6, 0x80u); } return a1; } //----- (004CEA90) -------------------------------------------------------- char __thiscall sub_4CEA90(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // edx int v5; // ecx int v6; // ecx __int16 v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v2 = this; v3 = this[585]; v8 = -23525; sub_905F90(v3, &v8, 2u); v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 8); v10 = *(_DWORD *)(a2 + 4); v9 = v4; LOBYTE(v4) = *(_BYTE *)(a2 + 12); v11 = v5; v6 = v2[585]; v12 = v4; return sub_906000(v6, &v9, 0xDu); } //----- (004CEB00) -------------------------------------------------------- char __thiscall sub_4CEB00(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // edx int v5; // ecx int v6; // ecx __int16 v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v2 = this; v3 = this[585]; v8 = -23524; sub_905F90(v3, &v8, 2u); v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 8); v10 = *(_DWORD *)(a2 + 4); v9 = v4; LOBYTE(v4) = *(_BYTE *)(a2 + 12); v11 = v5; v6 = v2[585]; v12 = v4; return sub_906000(v6, &v9, 0xDu); } //----- (004CEB70) -------------------------------------------------------- char __thiscall sub_4CEB70(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // edx int v5; // ecx int v6; // ecx __int16 v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v2 = this; v3 = this[585]; v8 = -23523; sub_905F90(v3, &v8, 2u); v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 8); v10 = *(_DWORD *)(a2 + 4); v9 = v4; LOBYTE(v4) = *(_BYTE *)(a2 + 12); v11 = v5; v6 = v2[585]; v12 = v4; return sub_906000(v6, &v9, 0xDu); } //----- (004CEBE0) -------------------------------------------------------- char __thiscall sub_4CEBE0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // edx int v5; // ecx int v6; // ecx __int16 v8; // [esp+8h] [ebp-18h] int v9; // [esp+Ch] [ebp-14h] int v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] char v12; // [esp+18h] [ebp-8h] v2 = this; v3 = this[585]; v8 = -23522; sub_905F90(v3, &v8, 2u); v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 8); v10 = *(_DWORD *)(a2 + 4); v9 = v4; LOBYTE(v4) = *(_BYTE *)(a2 + 12); v11 = v5; v6 = v2[585]; v12 = v4; return sub_906000(v6, &v9, 0xDu); } //----- (004CEC50) -------------------------------------------------------- int __thiscall sub_4CEC50(_BYTE **this, int a2, int a3) { _BYTE **v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi int v5; // ecx int v6; // eax _BYTE *v7; // ecx _BYTE *v8; // ecx void (__thiscall ***v9)(_DWORD, signed int); // ebx _DWORD *v10; // ecx int v11; // eax _DWORD *v12; // eax int v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // eax int v17; // eax _DWORD *v18; // eax int v19; // eax _DWORD *v20; // eax int v21; // eax _DWORD *v22; // eax float **v23; // ecx _DWORD *v24; // ecx _DWORD *v25; // ecx int v27; // [esp+24h] [ebp-14h] int v28; // [esp+28h] [ebp-10h] int v29; // [esp+34h] [ebp-4h] v3 = this; v4 = 0; sub_9063C0(this[584], 0); v5 = a3; v3[602] = (_BYTE *)dword_ACDD6C; *(_BYTE **)((char *)v3 + 2443) = *(_BYTE **)v5; *(_BYTE **)((char *)v3 + 2447) = *(_BYTE **)(v5 + 4); v6 = (int)v3 + 2443; *(_WORD *)(v6 + 8) = *(_WORD *)(v5 + 8); *(_DWORD *)(v6 + 10) = *(_DWORD *)(v5 + 10); *(_DWORD *)(v6 + 14) = *(_DWORD *)(v5 + 14); *(_DWORD *)(v6 + 18) = *(_DWORD *)(v5 + 18); *(_DWORD *)(v6 + 22) = *(_DWORD *)(v5 + 22); *(_WORD *)(v6 + 26) = *(_WORD *)(v5 + 26); *(_WORD *)(v6 + 28) = *(_WORD *)(v5 + 28); v7 = v3[185]; *((_BYTE *)v3 + 2432) = 0; v3[607] = (char *)v3 + 2443; v3[606] = 0; if ( v7 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v7 + 260))() ) sub_8F86A0(&unk_BA6B10, v3[185]); sub_905F40((int)v3[584]); sub_56BED0(v3[143]); sub_56C0A0((_DWORD **)v3[143]); sub_56B270(v3[143]); sub_56B5A0(v3[143]); sub_5847D0(v3[267], 1); sub_582CF0((_DWORD **)v3[288]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[288] + 256))(0); sub_4F31E0((float *)v3[259]); v3[628] = 0; v8 = (_BYTE *)*sub_4A3B80(&v28); v29 = 0; LOBYTE(v9) = sub_6C4EE0(v8); v29 = -1; if ( v28 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } if ( (_BYTE)v9 ) { LOWORD(a3) = 7312; v10 = (_DWORD *)*sub_4A3B80(&v27); v29 = 1; sub_6C7E20(v10, &a3); v29 = -1; if ( v27 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v27; if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } } sub_4A4BE0(v3, 1); sub_8F86A0(&unk_BA6B10, v3[277]); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) sub_654B20(dword_AD8EBC, 0); sub_5847D0(v3[267], 1); sub_582CF0((_DWORD **)v3[288]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[288] + 256))(0); sub_4A53F0(v3); if ( *((_BYTE *)v3 + 42) ) sub_4E3330(v3 + 9, 0); sub_4DE8F0((float *)v3, 0, 0.0); v11 = sub_6D38C0(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v11 + 260))(v11) ) { v12 = (_DWORD *)sub_6D38C0(); sub_8F86A0(&unk_BA6B10, v12); } v13 = sub_6D3860(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v13 + 260))(v13) ) { v14 = (_DWORD *)sub_6D3860(); sub_8F86A0(&unk_BA6B10, v14); } v15 = sub_6D3810(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v15 + 260))(v15) ) { v16 = (_DWORD *)sub_6D3810(); sub_8F86A0(&unk_BA6B10, v16); } v17 = sub_6D3840(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v17 + 260))(v17) ) { v18 = (_DWORD *)sub_6D3840(); sub_8F86A0(&unk_BA6B10, v18); } sub_569950((_DWORD **)v3[143], 0); v19 = sub_6D4850(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v19 + 260))(v19) ) { v20 = (_DWORD *)sub_6D4850(); sub_8F86A0(&unk_BA6B10, v20); } v21 = sub_6D4860(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v21 + 260))(v21) ) { v22 = (_DWORD *)sub_6D4860(); sub_8F86A0(&unk_BA6B10, v22); } sub_6BDA20((unsigned __int8)v9, (int)v4); v23 = (float **)v3[261]; if ( v23 ) sub_4B11E0(v23); if ( v3[191] ) sub_8F86A0(&unk_BA6B10, v3[191]); v24 = v3[1209]; if ( v24 ) sub_6B4B70(v24); sub_8EF0D0(v3, dword_ACDD6C, v3 + 603); sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; if ( v3[1247] ) sub_8F86A0(&unk_BA6B10, v3[1247]); sub_6AC800(&unk_B91250); v25 = v3[1276]; if ( v25 ) { sub_55F210(v25); sub_8F86A0(&unk_BA6B10, v3[1276]); } sub_8F86A0(&unk_BA6B10, v3[1246]); sub_8F86A0(&unk_BA6B10, v3[1245]); return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACDD6C: using guessed type int dword_ACDD6C; // AD8CD8: using guessed type char byte_AD8CD8; //----- (004CF080) -------------------------------------------------------- int __userpurge sub_4CF080@(int a1@, int a2@, int a3, int a4) { int v4; // esi _BYTE *v5; // eax int v6; // ST04_4 int v7; // ST08_4 int v8; // ST0C_4 int v9; // ST10_4 const CHAR *v10; // eax unsigned __int8 v12; // [esp-10h] [ebp-24h] unsigned __int8 v13; // [esp-Ch] [ebp-20h] unsigned __int8 v14; // [esp-8h] [ebp-1Ch] int v15; // [esp+4h] [ebp-10h] int v16; // [esp+8h] [ebp-Ch] int v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v4 = a1; *(_BYTE *)(*(_DWORD *)(a1 + 1040) + 344) = 1; if ( !dword_ACD914 ) { v14 = -1; v13 = dword_ACD914; v12 = -1; LABEL_6: sub_419EE0((float *)&v15, v12, v13, v14, 0xFFu); goto LABEL_7; } v5 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( v5 ) { v14 = v5[6]; v13 = v5[5]; v12 = v5[4]; goto LABEL_6; } sub_419EE0((float *)&v15, 0xFFu, 0, 0xFFu, 0xFFu); LABEL_7: v6 = v15; v7 = v16; v8 = v17; v9 = v18; v10 = sub_40A910(-1963532548); sub_492030(v4, a2, v4, (int)v10, v6, v7, v8, v9); v17 = 2; v18 = 0; sub_6B69F0(dword_AB6534, (int)&v17, 0.0, 0); dword_AD8EBC[4147] |= 2u; return a3; } // AB6534: using guessed type int dword_AB6534; // ACD914: using guessed type int dword_ACD914; //----- (004CF160) -------------------------------------------------------- int __userpurge sub_4CF160@(int a1@, int a2@, int a3, int a4) { int v4; // esi _BYTE *v5; // eax int v6; // ST04_4 int v7; // ST08_4 int v8; // ST0C_4 int v9; // ST10_4 const CHAR *v10; // eax unsigned __int8 v12; // [esp-10h] [ebp-24h] unsigned __int8 v13; // [esp-Ch] [ebp-20h] unsigned __int8 v14; // [esp-8h] [ebp-1Ch] int v15; // [esp+4h] [ebp-10h] int v16; // [esp+8h] [ebp-Ch] int v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v4 = a1; *(_BYTE *)(*(_DWORD *)(a1 + 1040) + 344) = 1; if ( !dword_ACD914 ) { v14 = -1; v13 = dword_ACD914; v12 = -1; LABEL_6: sub_419EE0((float *)&v15, v12, v13, v14, 0xFFu); goto LABEL_7; } v5 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( v5 ) { v14 = v5[6]; v13 = v5[5]; v12 = v5[4]; goto LABEL_6; } sub_419EE0((float *)&v15, 0xFFu, 0, 0xFFu, 0xFFu); LABEL_7: v6 = v15; v7 = v16; v8 = v17; v9 = v18; v10 = sub_40A910(-1963532548); sub_492030(v4, a2, v4, (int)v10, v6, v7, v8, v9); v17 = 2; v18 = 0; sub_6B69F0(dword_AB6534, (int)&v17, 0.0, 0); dword_AD8EBC[4147] |= 1u; return a3; } // AB6534: using guessed type int dword_AB6534; // ACD914: using guessed type int dword_ACD914; //----- (004CF240) -------------------------------------------------------- int __stdcall sub_4CF240(int a1, unsigned __int16 *a2) { unsigned __int16 *v2; // esi int v3; // edi unsigned __int16 v4; // bx char *v5; // eax char *v6; // esi char *v7; // edi _DWORD *v8; // eax int v9; // eax int v11; // [esp+14h] [ebp-4h] v2 = a2; v3 = sub_7474E0((_DWORD *)(dword_ACD924 + 4), *a2); v11 = v3; if ( v3 ) { v4 = 0; if ( a2[1] > 0u ) { while ( 1 ) { v5 = sub_664AB0(dword_AD8C90, v2[v4 + 2]); v6 = v5; if ( v5 ) { v7 = (char *)(v3 + 146); if ( *v7 != 45 ) { v8 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); sub_6AF370(&unk_B91250, v7, *v8, v8[1], v8[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); } if ( *(_BYTE *)(v11 + 178) != 45 && (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 12))(v6) == 1 ) { v9 = (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 196))(v6); sub_6BABB0(&dword_AB6520, v11 + 178, v9); } } v2 = a2; if ( ++v4 >= a2[1] ) break; v3 = v11; } } } return a1; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ACCFCC: using guessed type float flt_ACCFCC; // ACD924: using guessed type int dword_ACD924; //----- (004CF360) -------------------------------------------------------- int __thiscall sub_4CF360(void *this, int a2, int a3) { unsigned __int8 v3; // bl int v4; // esi const char *v5; // eax int v6; // edx int *v7; // eax char v9; // [esp+Ch] [ebp-198h] char v10; // [esp+1Ch] [ebp-188h] char v11; // [esp+11Ch] [ebp-88h] char v12[128]; // [esp+120h] [ebp-84h] v3 = *(_BYTE *)(a3 + 1); v4 = (int)this; if ( v3 ) { memset(v12, 0, 0x80u); strncpy(v12, (const char *)(a3 + 2), v3); v12[*(unsigned __int8 *)(a3 + 1)] = 0; memset(&v10, 0, 0x100u); v5 = sub_40C190(942690442); sprintf(&v10, v5, v12); v6 = *(_DWORD *)(v4 + 1040); v11 = 0; *(_BYTE *)(v6 + 344) = 1; v7 = (int *)sub_4B1B10((float *)&v9, 0x32u); sub_492030(v4, a3, v4, (int)&v10, *v7, v7[1], v7[2], v7[3]); sub_492120((_DWORD ***)v4, (int)&v10); } return a2; } // 4CF360: using guessed type char var_84[128]; //----- (004CF460) -------------------------------------------------------- int __thiscall sub_4CF460(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // edi _DWORD *v4; // ebx unsigned int v5; // eax double v6; // st7 unsigned __int16 *v7; // eax unsigned __int16 *v8; // esi int v9; // edi int v10; // esi int v11; // edx int v12; // eax char v13; // al const CHAR *v14; // eax const CHAR *v15; // eax _DWORD *v17; // [esp+18h] [ebp-8h] float v18; // [esp+1Ch] [ebp-4h] unsigned __int16 *v19; // [esp+2Ch] [ebp+Ch] v3 = this; v17 = this; if ( dword_AD8EBC ) { v4 = a3; v5 = a3[1]; if ( v5 == -1 ) v6 = -3.0; else v6 = (double)v5 / 1000.0; v18 = v6; v7 = (unsigned __int16 *)sub_4DCEF0(*(_WORD *)a3); v8 = v7; v19 = v7; if ( v7 ) { v9 = *v7; v10 = dword_ACDA80; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v10 + 200) ) { v11 = *(_DWORD *)(v10 + 196); if ( *(_DWORD *)(v11 + 4 * v9) ) { v12 = *(_DWORD *)(v11 + 4 * v9); if ( v12 ) { if ( *(_BYTE *)(v12 + 398) != 45 && *((_DWORD *)v19 + 63) ) { v13 = (*(int (__stdcall **)(_DWORD, float, _DWORD))(*(_DWORD *)dword_AD8EBC + 16))( *v4, COERCE_FLOAT(LODWORD(v18)), 0); v3 = v17; v8 = v19; } else { v13 = (*(int (__stdcall **)(_DWORD, float, signed int))(*(_DWORD *)dword_AD8EBC + 16))( *v4, COERCE_FLOAT(LODWORD(v18)), 1); v3 = v17; v8 = v19; } LABEL_16: if ( !v13 || !v8 ) return a2; switch ( *((_DWORD *)v8 + 61) ) { case 3: v14 = sub_40C190(1325059531); break; case 4: v14 = sub_40C190(1745404876); break; case 5: v14 = sub_40C190(174404483); break; default: goto LABEL_25; } sub_492060(v3, (int)v14); LABEL_25: if ( *(_DWORD *)(v8 + 17) == 337 ) { v15 = sub_40A910(1327088824); sub_492060(v3, (int)v15); } return a2; } } } } v3 = v17; v8 = v19; } v13 = HIBYTE(a2); goto LABEL_16; } return a2; } // ACDA80: using guessed type int dword_ACDA80; //----- (004CF5D0) -------------------------------------------------------- int __thiscall sub_4CF5D0(int ***this, int a2, __int16 *a3) { __int16 *v3; // esi int ***v4; // ebx char *v5; // eax char *v6; // edi int v7; // edx __int16 v8; // ax __int16 v9; // ax int ***v10; // esi signed int v11; // ebx __int16 v12; // ax __int16 v13; // ax int v14; // eax unsigned int v15; // ebx unsigned __int16 *v16; // eax int v17; // ebx int v18; // esi int v19; // edx int v20; // eax int v22; // [esp+2Ch] [ebp-8h] char v23; // [esp+33h] [ebp-1h] v3 = a3; v4 = this; v5 = sub_664AB0(dword_AD8C90, *a3); v6 = v5; if ( !v5 ) return a2; v7 = (unsigned __int16)v3[3]; v22 = (unsigned __int16)v3[3]; if ( v5 == dword_AD8EBC && v7 > 0 ) { if ( sub_67B770(dword_AD8EBC) ) { v8 = sub_67B780(dword_AD8EBC); sub_5A0540(v4[163], v8); v9 = sub_67B780(dword_AD8EBC); sub_5A0540(v4[168], v9); v10 = v4 + 169; v11 = 4; do { v12 = sub_67B780(dword_AD8EBC); sub_5A0540(*(v10 - 5), v12); v13 = sub_67B780(dword_AD8EBC); sub_5A0540(*v10, v13); ++v10; --v11; } while ( v11 ); v3 = a3; } v7 = v22; } v14 = (unsigned __int16)v3[4]; HIBYTE(a3) = 1; if ( v14 == 14 || (_WORD)v14 == 339 ) HIBYTE(a3) = 0; if ( (_WORD)v14 == 871 ) HIBYTE(a3) = 0; if ( v7 > 0 && HIBYTE(a3) ) (*(void (__thiscall **)(char *, int, signed int))(*(_DWORD *)v6 + 412))(v6, v7, 1); if ( !*(_DWORD *)(v3 + 1) ) { if ( sub_650B20(v6) ) sub_65B790(v6); else (*(void (__thiscall **)(char *))(*(_DWORD *)v6 + 644))(v6); } v15 = (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 92))(v6); v23 = 0; if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v6 + 32))(v6) && !v22 ) { if ( v15 == 1 ) { if ( *(_DWORD *)(v3 + 1) <= 1u ) goto LABEL_28; } else if ( *(_DWORD *)(v3 + 1) < v15 ) { goto LABEL_28; } v23 = 1; } LABEL_28: if ( (*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 92))(v6) > 0 ) { sub_650BA0(v6, v3[5], *(_DWORD *)(v3 + 1)); if ( *((_WORD *)v6 + 274) == *((_WORD *)dword_AD8EBC + 2057) ) sub_650D00(v6, v3[5], *(_DWORD *)(v3 + 1)); } if ( !v23 && HIBYTE(a3) ) sub_6B34A0(&unk_B912C8, (void *)(unsigned __int16)*v3, v22); if ( !v22 && HIBYTE(a3) && *((_BYTE *)v3 + 12) == 1 ) sub_6B26A0(&unk_B912C8, (void *)(unsigned __int16)*v3); if ( v3[4] != -1 ) { v16 = (unsigned __int16 *)sub_4DCEF0(v3[4]); if ( v16 ) { v17 = *v16; v18 = dword_ACDA80; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v17) ) { if ( (unsigned __int16)v17 <= *(_WORD *)(v18 + 200) ) { v19 = *(_DWORD *)(v18 + 196); if ( *(_DWORD *)(v19 + 4 * v17) ) { v20 = *(_DWORD *)(v19 + 4 * v17); if ( v20 ) { if ( *(_BYTE *)(v20 + 470) != 45 ) sub_6AF8E0( &unk_B91250, (int)&a3, (char *)(v20 + 470), (int)v6, *(_DWORD *)(v20 + 502), flt_ACCFCC, 0, 0, 0, 1); } } } } } } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACDA80: using guessed type int dword_ACDA80; //----- (004CF850) -------------------------------------------------------- int __thiscall sub_4CF850(void *this, int a2, int *a3) { int v3; // edi int v4; // esi int *v5; // eax int v6; // edx int v7; // eax int v8; // esi char *v9; // eax int v11; // [esp-10h] [ebp-28h] int v12; // [esp-Ch] [ebp-24h] int v13; // [esp-8h] [ebp-20h] int v14; // [esp-4h] [ebp-1Ch] char v15; // [esp+8h] [ebp-10h] v3 = (int)this; v4 = sub_4DCC20(*a3); if ( v4 ) { v5 = (int *)sub_4B1B10((float *)&v15, 0x32u); v11 = *v5; v12 = v5[1]; v6 = v5[2]; v7 = v5[3]; v8 = v4 + 4; v13 = v6; v14 = v7; v9 = sub_7549E0("%s", v8); sub_492030(v3, v3, v8, (int)v9, v11, v12, v13, v14); } return a2; } //----- (004CF8C0) -------------------------------------------------------- int __userpurge sub_4CF8C0@(int a1@, int a2@, int a3, _DWORD *a4) { int v4; // edx int v5; // esi int v6; // ecx int v7; // edx _BYTE *v8; // eax int v9; // ST08_4 int v10; // ST0C_4 int v11; // ST10_4 int v12; // ST14_4 char *v13; // eax char *v14; // eax unsigned __int8 v16; // [esp-10h] [ebp-40h] unsigned __int8 v17; // [esp-Ch] [ebp-3Ch] unsigned __int8 v18; // [esp-8h] [ebp-38h] int v19; // [esp+4h] [ebp-2Ch] int v20; // [esp+8h] [ebp-28h] int v21; // [esp+Ch] [ebp-24h] int v22; // [esp+10h] [ebp-20h] char v23[4]; // [esp+14h] [ebp-1Ch] int v24; // [esp+18h] [ebp-18h] int v25; // [esp+1Ch] [ebp-14h] int v26; // [esp+20h] [ebp-10h] int v27; // [esp+24h] [ebp-Ch] char v28; // [esp+28h] [ebp-8h] v4 = a4[1]; v5 = a1; *(_DWORD *)v23 = *a4; v6 = a4[2]; v24 = v4; v7 = a4[3]; v27 = a4[4]; v25 = v6; v26 = v7; v28 = 0; if ( !dword_ACD914 ) { v18 = -1; v17 = dword_ACD914; v16 = -1; LABEL_6: sub_419EE0((float *)&v19, v16, v17, v18, 0xFFu); goto LABEL_7; } v8 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( v8 ) { v18 = v8[6]; v17 = v8[5]; v16 = v8[4]; goto LABEL_6; } sub_419EE0((float *)&v19, 0xFFu, 0, 0xFFu, 0xFFu); LABEL_7: v9 = v19; v10 = v20; v11 = v21; v12 = v22; v13 = (char *)sub_4090F0(-1226460906); v14 = sub_7549E0(v13, v23); sub_492030(v5, a2, v5, (int)v14, v9, v10, v11, v12); return a3; } // ACD914: using guessed type int dword_ACD914; //----- (004CF9B0) -------------------------------------------------------- int __thiscall sub_4CF9B0(_DWORD ***this, int a2, char *a3) { _DWORD ***v3; // edi int v4; // eax const CHAR *v5; // ebx const CHAR *v6; // eax _DWORD *v7; // eax const char *v8; // eax int v10; // [esp+20h] [ebp-88h] char v11; // [esp+24h] [ebp-84h] v3 = this; v4 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (unsigned __int8)*a3); v5 = &byte_9A8050; if ( v4 ) v5 = (const CHAR *)(v4 + 21); if ( *a3 ) { v7 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6AF370( &unk_B91250, "SkillLevelUp", *v7, v7[1], v7[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); v8 = sub_40C190(-700236766); sprintf(&v11, v8, v5); sub_492060(v3, (int)&v11); sub_6807F0(byte_AD9238, *a3); dword_AD8EBC[944] = *a3; sub_4F7690(v3[178], *a3); if ( sub_652070(dword_AD8EBC) == 4 || sub_652070(dword_AD8EBC) == 5 || sub_652070(dword_AD8EBC) == 9 || sub_652070(dword_AD8EBC) == 10 || sub_652070(dword_AD8EBC) == 14 || sub_652070(dword_AD8EBC) == 15 || sub_652070(dword_AD8EBC) == 19 || sub_652070(dword_AD8EBC) == 20 || sub_652070(dword_AD8EBC) == 24 || sub_652070(dword_AD8EBC) == 25 || sub_652070(dword_AD8EBC) == 27 ) { sub_6AF8E0(&unk_B91250, (int)&v10, "Aura100", (int)dword_AD8EBC, 1, flt_ACCFCC, 1, 1, 0, 1); } } else { v6 = sub_40C190(-622084406); sub_492060(v3, (int)v6); } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // AC9C84: using guessed type int dword_AC9C84; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004CFBC0) -------------------------------------------------------- int __thiscall sub_4CFBC0(int *this, int a2, int a3) { int *v3; // ebx char *v4; // esi int v5; // eax _DWORD *v6; // eax int v7; // ST1C_4 const char *v8; // eax int v10; // [esp+20h] [ebp-8Ch] const CHAR *v11; // [esp+24h] [ebp-88h] char v12; // [esp+28h] [ebp-84h] v3 = this; if ( *(_WORD *)a3 == *((_WORD *)dword_AD8EBC + 274) ) sub_6807F0(byte_AD9238, *(_BYTE *)(a3 + 2)); v4 = sub_4E2910(v3, *(_WORD *)a3, 4, 90); if ( v4 ) { v5 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a3 + 2)); if ( v5 ) v11 = (const CHAR *)(v5 + 21); else v11 = &byte_9A8050; v6 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); sub_6AF370( &unk_B91250, "SkillLevelUp", *v6, v6[1], v6[2], dword_ABD498, dword_ABD49C, dword_ABD4A0, flt_ACCFCC, 1.0); v7 = (*(int (__thiscall **)(char *, const CHAR *))(*(_DWORD *)v4 + 84))(v4, v11); v8 = sub_40C190(2028457663); sprintf(&v12, v8, v7); sub_492060(v3, (int)&v12); v4[944] = *(_BYTE *)(a3 + 2); if ( sub_652070(v4) == 4 || sub_652070(v4) == 5 || sub_652070(v4) == 9 || sub_652070(v4) == 10 || sub_652070(v4) == 14 || sub_652070(v4) == 15 || sub_652070(v4) == 19 || sub_652070(v4) == 20 || sub_652070(v4) == 24 || sub_652070(v4) == 25 || sub_652070(v4) == 27 ) { sub_6AF8E0(&unk_B91250, (int)&v10, "Aura100", (int)v4, 1, flt_ACCFCC, 1, 1, 0, 1); } } return a2; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // AC9C84: using guessed type int dword_AC9C84; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004CFDA0) -------------------------------------------------------- int __thiscall sub_4CFDA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ST00_4 _WORD *v5; // eax const CHAR *v6; // eax v3 = this; sub_6F2BF0(a3); sub_4F4560(v3[256]); v4 = (_DWORD *)v3[256]; *(float *)(v3[215] + 744) = 0.0; sub_8F82A0(&unk_BA6B10, v4); v5 = sub_4B1D30(*(_WORD *)(a3 + 4)); if ( v5 && *((_DWORD *)v5 + 9) == 33 ) { v6 = sub_40A910(558641026); sub_492060(v3, (int)v6); } return a2; } //----- (004CFE20) -------------------------------------------------------- int __userpurge sub_4CFE20@(_DWORD *a1@, int a2@, int a3, _WORD *a4) { _DWORD *v4; // esi const char *v5; // eax float **v7; // ecx float *v8; // ST04_4 const CHAR *v9; // eax char v10; // [esp+8h] [ebp-10h] v4 = a1; if ( *a4 == 4546 ) { sub_6DFA50(byte_ADB468, 1); if ( dword_ADB4F8 ) { if ( v4[269] ) { v8 = sub_4B1B10((float *)&v10, 0x32u); v9 = sub_40A910(1921615530); sub_4EB180(v4[269], a2, (int)v4, (int)v9, (int)v8, 1, 1000000.0); } } } else { if ( *a4 != 4547 ) { v5 = sub_41A850((unsigned __int16)*a4); sub_492060(v4, (int)v5); return a3; } sub_6DFA50(byte_ADB468, 1); v7 = (float **)v4[269]; if ( v7 ) { sub_4B11E0(v7); return a3; } } return a3; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004CFEE0) -------------------------------------------------------- int __thiscall sub_4CFEE0(_DWORD *this, int a2, int a3) { int v3; // edi _DWORD *v4; // ecx int v5; // esi int v6; // eax int *v7; // eax _DWORD *v8; // ecx char v9; // bl _WORD *v10; // eax int v11; // edi char v13; // [esp+Ch] [ebp-10h] char v14; // [esp+2Bh] [ebp+Fh] v3 = (int)this; v4 = (_DWORD *)this[143]; if ( v4 ) { v5 = a3; if ( sub_56B240(v4, *(_DWORD *)a3) ) { *(_BYTE *)(*(unsigned __int8 *)(a3 + 8) + a3 + 9) = 0; if ( sub_680890((unsigned __int8 *)byte_AD9238) < (unsigned int)*(unsigned __int8 *)(a3 + 6) || sub_680890((unsigned __int8 *)byte_AD9238) > (unsigned int)*(unsigned __int8 *)(a3 + 7) ) { v14 = 0; } else { v14 = 1; sub_4A8140(v3, 169); } v6 = *(_DWORD *)(v3 + 1040); if ( v6 && v14 ) { *(_BYTE *)(v6 + 344) = 1; v7 = (int *)sub_4B1B10((float *)&v13, 0x32u); sub_492030(v3, v3, v5, v5 + 9, *v7, v7[1], v7[2], v7[3]); } v8 = *(_DWORD **)(v3 + 768); v9 = 0; if ( v8 ) v9 = sub_60CD70(v8); v10 = operator new(8u); if ( v10 ) { *(_DWORD *)v10 = -1; v10[2] = -1; *((_BYTE *)v10 + 6) = 1; } else { v10 = 0; } *(_DWORD *)v10 = *(_DWORD *)v5; v10[2] = *(_WORD *)(v5 + 4); *((_BYTE *)v10 + 6) = v14; sub_56C420(*(_DWORD **)(v3 + 572), (int)v10); v11 = *(_DWORD *)(v3 + 572); *(_BYTE *)(v11 + 616) = v9; *(_BYTE *)(v11 + 618) = 1; } } return a2; } //----- (004D0020) -------------------------------------------------------- int __thiscall sub_4D0020(_DWORD *this, int a2, int *a3) { _DWORD *v3; // ebx _BYTE *v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx char *v10; // eax char *v11; // eax volatile LONG *v12; // eax int v14; // [esp+10h] [ebp-30h] char v15; // [esp+17h] [ebp-29h] char v16[4]; // [esp+18h] [ebp-28h] int v17; // [esp+1Ch] [ebp-24h] int v18; // [esp+20h] [ebp-20h] int v19; // [esp+24h] [ebp-1Ch] int v20; // [esp+28h] [ebp-18h] char v21; // [esp+2Ch] [ebp-14h] int v22; // [esp+3Ch] [ebp-4h] v3 = this; v4 = (_BYTE *)*sub_4A3B80(&v14); v22 = 0; v15 = sub_6C4EE0(v4); v22 = -1; if ( v14 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } if ( !v15 ) { if ( v3[315] || sub_718A50(&dword_B9E560) ) { sub_4CB420(v3, 0); } else { v6 = *a3; v7 = a3[1]; v18 = a3[2]; *(_DWORD *)v16 = v6; v8 = a3[3]; v17 = v7; v9 = a3[4]; v19 = v8; v20 = v9; v21 = 0; v10 = (char *)sub_40A910(604704291); v11 = sub_7549E0(v10, v16); v12 = sub_462CA0(2, v11); sub_56FF80(v3 + 315, (int)v12); (**(void (__thiscall ***)(int, _DWORD *))(v3[315] + 232))(v3[315] + 232, v3); dword_B9E5A5 = *a3; dword_B9E5A9 = a3[1]; dword_B9E5AD = a3[2]; dword_B9E5B1 = a3[3]; dword_B9E5B5 = a3[4]; } } return a2; } // B9E560: using guessed type int dword_B9E560; // B9E5A5: using guessed type int dword_B9E5A5; // B9E5A9: using guessed type int dword_B9E5A9; // B9E5AD: using guessed type int dword_B9E5AD; // B9E5B1: using guessed type int dword_B9E5B1; // B9E5B5: using guessed type int dword_B9E5B5; //----- (004D0180) -------------------------------------------------------- int __thiscall sub_4D0180(int ***this, int a2, unsigned __int16 *a3) { unsigned __int16 *v3; // esi __int16 v4; // ax int v5; // eax int v6; // eax int v7; // eax int v8; // edi int v9; // ebx char *v10; // edi int result; // eax int v12; // eax int v13; // eax int v14; // edi int v15; // eax bool v16; // zf int v17; // esi char *v18; // eax int v19; // edi __int16 v20; // ax int v21; // esi __int16 v22; // ax int ***v23; // esi signed int v24; // ebx __int16 v25; // ax __int16 v26; // ax int v27; // eax _DWORD *v28; // esi unsigned int v29; // esi char v30; // bl int v31; // eax int v32; // esi int v33; // eax int v34; // eax int v35; // eax int v36; // edi int v37; // edx int v38; // [esp+20h] [ebp-18h] int ***v39; // [esp+24h] [ebp-14h] int v40; // [esp+28h] [ebp-10h] int v41; // [esp+2Ch] [ebp-Ch] int v42; // [esp+30h] [ebp-8h] char v43; // [esp+37h] [ebp-1h] v3 = a3; v4 = a3[1]; v39 = this; v41 = (int)sub_664AB0(dword_AD8C90, v4); if ( !v41 ) return a2; if ( *((_BYTE *)v3 + 4) ) { v12 = sub_4DCEF0(*v3); if ( v12 ) { v13 = sub_4DCC70((const char *)(v12 + 2), 0); if ( v13 ) { v14 = sub_4DCEA0(*(_WORD *)(v13 + 39)); if ( v14 ) { v15 = 0; if ( !strcmp((const char *)(v14 + 36), "None") ) v15 = 0; if ( !strcmp((const char *)(v14 + 36), "Ground") ) v15 = 1; if ( !strcmp((const char *)(v14 + 36), "HairLink") ) v15 = 3; if ( !strcmp((const char *)(v14 + 36), "Chest") ) v15 = 2; sub_6AF8E0(&unk_B91250, (int)&v40, (char *)(v14 + 4), v41, v15, flt_ACCFCC, 0, 0, 0, 1); } } } v16 = *((_BYTE *)v3 + 4) == 0; v40 = 0; if ( v16 ) return a2; v17 = (int)v3 + 7; v41 = v17; while ( 1 ) { v18 = sub_664AB0(dword_AD8C90, *(_WORD *)(v17 - 2)); v42 = (int)v18; if ( v18 ) break; LABEL_79: v37 = *((unsigned __int8 *)a3 + 4); v17 = v41 + 12; ++v40; v41 += 12; if ( v40 >= v37 ) return a2; } v19 = *(_DWORD *)(v17 + 4); if ( v18 == dword_AD8EBC && sub_67B770(dword_AD8EBC) && v19 > 0 ) { v20 = sub_67B780(dword_AD8EBC); v21 = (int)v39; sub_5A0540(v39[163], v20); v22 = sub_67B780(dword_AD8EBC); sub_5A0540(*(int ***)(v21 + 672), v22); v23 = (int ***)(v21 + 676); v24 = 4; do { v25 = sub_67B780(dword_AD8EBC); sub_5A0540(*(v23 - 5), v25); v26 = sub_67B780(dword_AD8EBC); sub_5A0540(*v23, v26); ++v23; --v24; } while ( v24 ); } v27 = *a3; v43 = 1; if ( v27 == 14 || (_WORD)v27 == 339 ) v43 = 0; if ( (_WORD)v27 == 871 ) v43 = 0; if ( v19 > 0 && v43 ) { v28 = (_DWORD *)v42; (*(void (__thiscall **)(int, int, signed int))(*(_DWORD *)v42 + 412))(v42, v19, 1); } else { v28 = (_DWORD *)v42; } if ( !*(_DWORD *)v41 ) { if ( sub_650B20(v28) ) sub_65B790(v28); else (*(void (__thiscall **)(_DWORD *))(*v28 + 644))(v28); } v29 = (*(int (**)(void))(*(_DWORD *)v42 + 92))(); v30 = 0; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v42 + 32))() && !v19 ) { if ( v29 == 1 ) { if ( *(_DWORD *)v41 <= 1u ) goto LABEL_60; } else if ( *(_DWORD *)v41 < v29 ) { goto LABEL_60; } v30 = 1; } LABEL_60: v31 = (*(int (**)(void))(*(_DWORD *)v42 + 92))(); v32 = v41; if ( v31 > 0 ) { sub_650BA0((char *)v42, *(_WORD *)(v41 + 8), *(_DWORD *)v41); if ( *(_WORD *)(v42 + 548) == *((_WORD *)dword_AD8EBC + 2057) ) sub_650D00((_DWORD *)v42, *(_WORD *)(v32 + 8), *(_DWORD *)v32); } if ( !v30 && v43 ) sub_6B34A0(&unk_B912C8, (void *)*(unsigned __int16 *)(v32 - 2), v19); if ( *a3 != -1 ) { v33 = sub_4DCEF0(*a3); if ( v33 ) { v34 = sub_4DCC70((const char *)(v33 + 2), 1); if ( v34 ) { v35 = sub_4DCEA0(*(_WORD *)(v34 + 39)); if ( v35 ) { v36 = 0; if ( !strcmp((const char *)(v35 + 36), "None") ) v36 = 0; if ( !strcmp((const char *)(v35 + 36), "Ground") ) v36 = 1; if ( !strcmp((const char *)(v35 + 36), "HairLink") ) v36 = 3; if ( !strcmp((const char *)(v35 + 36), "Chest") ) v36 = 2; sub_6AF8E0(&unk_B91250, (int)&v38, (char *)(v35 + 4), v42, v36, flt_ACCFCC, 0, 0, 0, 1); } } } } goto LABEL_79; } v5 = sub_4DCEF0(*v3); if ( !v5 ) return a2; v6 = sub_4DCC70((const char *)(v5 + 2), 0); if ( !v6 ) return a2; v7 = sub_4DCEA0(*(_WORD *)(v6 + 39)); v8 = v7; if ( !v7 ) return a2; v9 = 0; if ( !strcmp((const char *)(v7 + 36), "None") ) v9 = 0; if ( !strcmp((const char *)(v8 + 36), "Ground") ) v9 = 1; if ( !strcmp((const char *)(v8 + 36), "HairLink") ) v9 = 3; if ( !strcmp((const char *)(v8 + 36), "Chest") ) v9 = 2; v10 = (char *)(v8 + 4); if ( sub_64FA00((_DWORD *)v41, 373) ) { if ( (char *)v41 == dword_AD8EBC ) sub_6AF8E0(&unk_B91250, (int)&a3, v10, v41, v9, flt_ACCFCC, 0, 0, 0, 1); else sub_6AF8E0(&unk_B91250, (int)&a3, v10, v41, v9, flt_ACCFCC, 0, 0, 0, 0); result = a2; } else { sub_6AF8E0(&unk_B91250, (int)&a3, v10, v41, v9, flt_ACCFCC, 0, 0, 0, 1); result = a2; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004D0810) -------------------------------------------------------- int __thiscall sub_4D0810(int ***this, int a2, unsigned __int16 *a3) { int v3; // eax int v4; // eax int v5; // eax int v6; // ebx int v7; // edi char *v8; // eax char *v9; // edi int v10; // esi __int16 v11; // ax __int16 v12; // ax int ***v13; // esi signed int v14; // ebx __int16 v15; // ax __int16 v16; // ax int v17; // eax unsigned int v18; // esi char v19; // bl int ***v21; // [esp+20h] [ebp-Ch] int v22; // [esp+24h] [ebp-8h] char v23; // [esp+2Bh] [ebp-1h] v21 = this; v22 = (int)sub_664AB0(dword_AD8C90, a3[1]); if ( v22 ) { v3 = sub_4DCEF0(*a3); if ( v3 ) { v4 = sub_4DCC70((const char *)(v3 + 2), 0); if ( v4 ) { v5 = sub_4DCEA0(*(_WORD *)(v4 + 39)); v6 = v5; if ( v5 ) { v7 = 0; if ( !strcmp((const char *)(v5 + 36), "None") ) v7 = 0; if ( !strcmp((const char *)(v6 + 36), "Ground") ) v7 = 1; if ( !strcmp((const char *)(v6 + 36), "HairLink") ) v7 = 3; if ( !strcmp((const char *)(v6 + 36), "Chest") ) v7 = 2; sub_6AF8E0(&unk_B91250, (int)&v22, (char *)(v6 + 4), v22, v7, flt_ACCFCC, 0, 0, 0, 1); } } } } v8 = sub_664AB0(dword_AD8C90, a3[2]); v9 = v8; if ( v8 ) { v10 = a3[5]; v22 = a3[5]; if ( v8 == dword_AD8EBC && sub_67B770(dword_AD8EBC) && v10 > 0 ) { v11 = sub_67B780(dword_AD8EBC); sub_5A0540(v21[163], v11); v12 = sub_67B780(dword_AD8EBC); sub_5A0540(v21[168], v12); v13 = v21 + 169; v14 = 4; do { v15 = sub_67B780(dword_AD8EBC); sub_5A0540(*(v13 - 5), v15); v16 = sub_67B780(dword_AD8EBC); sub_5A0540(*v13, v16); ++v13; --v14; } while ( v14 ); v10 = v22; } v17 = *a3; v23 = 1; if ( v17 == 14 || (_WORD)v17 == 339 ) v23 = 0; if ( (_WORD)v17 == 871 ) v23 = 0; if ( v10 > 0 && v23 ) (*(void (__thiscall **)(char *, int, signed int))(*(_DWORD *)v9 + 412))(v9, v10, 1); if ( !*(_DWORD *)(a3 + 3) ) { if ( sub_650B20(v9) ) sub_65B790(v9); else (*(void (__thiscall **)(char *))(*(_DWORD *)v9 + 644))(v9); } v18 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 92))(v9); v19 = 0; if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v9 + 32))(v9) || v22 ) goto LABEL_40; if ( v18 == 1 ) { if ( *(_DWORD *)(a3 + 3) <= 1u ) goto LABEL_40; } else if ( *(_DWORD *)(a3 + 3) < v18 ) { LABEL_40: if ( (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 92))(v9) > 0 ) { sub_650BA0(v9, a3[6], *(_DWORD *)(a3 + 3)); if ( *((_WORD *)v9 + 274) == *((_WORD *)dword_AD8EBC + 2057) ) sub_650D00(v9, a3[6], *(_DWORD *)(a3 + 3)); } if ( !v19 && v23 ) sub_6B34A0(&unk_B912C8, (void *)a3[2], v22); return a2; } v19 = 1; goto LABEL_40; } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004D0B50) -------------------------------------------------------- int __thiscall sub_4D0B50(void *this, int a2, _DWORD *a3) { int v3; // edx int v4; // ebx int v5; // ecx int v6; // edx int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx unsigned int v11; // esi int v12; // edi _BYTE *v13; // eax int v14; // ST08_4 int v15; // ST0C_4 int v16; // edi int v17; // ST10_4 int v18; // ST14_4 char *v19; // eax char *v20; // eax unsigned __int8 v22; // [esp-10h] [ebp-54h] unsigned __int8 v23; // [esp-Ch] [ebp-50h] unsigned __int8 v24; // [esp-8h] [ebp-4Ch] int v25; // [esp+Ch] [ebp-38h] int v26; // [esp+10h] [ebp-34h] int v27; // [esp+14h] [ebp-30h] int v28; // [esp+18h] [ebp-2Ch] char v29[4]; // [esp+1Ch] [ebp-28h] int v30; // [esp+20h] [ebp-24h] int v31; // [esp+24h] [ebp-20h] int v32; // [esp+28h] [ebp-1Ch] int v33; // [esp+2Ch] [ebp-18h] int v34; // [esp+30h] [ebp-14h] int v35; // [esp+34h] [ebp-10h] int v36; // [esp+38h] [ebp-Ch] char v37; // [esp+3Ch] [ebp-8h] v3 = a3[1]; v4 = (int)this; *(_DWORD *)v29 = *a3; v5 = a3[2]; v30 = v3; v6 = a3[3]; v31 = v5; v7 = a3[4]; v32 = v6; v8 = a3[5]; v33 = v7; v9 = a3[6]; v34 = v8; v10 = a3[7]; v35 = v9; v36 = v10; v37 = 0; v11 = 0; if ( sub_4DC650() > 0 ) { while ( 1 ) { v12 = sub_7474E0((_DWORD *)(dword_ACDA48 + 4), v11); if ( !strncmp((const char *)(v12 + 2), v29, 0x20u) ) break; if ( (signed int)++v11 >= sub_4DC650() ) return a2; } if ( dword_ACD914 ) { v13 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( v13 ) { v24 = v13[6]; v23 = v13[5]; v22 = v13[4]; } else { v24 = -1; v23 = 0; v22 = -1; } sub_419EE0((float *)&v25, v22, v23, v24, 0xFFu); } else { sub_419EE0((float *)&v25, 0xFFu, dword_ACD914, 0xFFu, 0xFFu); } v14 = v25; v15 = v26; v16 = v12 + 34; v17 = v27; v18 = v28; v19 = (char *)sub_40A910(861888119); v20 = sub_7549E0(v19, v16); sub_492030(v4, v16, v11, (int)v20, v14, v15, v17, v18); } return a2; } // ACD914: using guessed type int dword_ACD914; // ACDA48: using guessed type int dword_ACDA48; //----- (004D0CA0) -------------------------------------------------------- int __thiscall sub_4D0CA0(void *this, int a2, _DWORD *a3) { int v3; // edx int v4; // ebx int v5; // ecx int v6; // edx int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx unsigned int v11; // esi int v12; // edi _BYTE *v13; // eax int v14; // ST08_4 int v15; // ST0C_4 int v16; // edi int v17; // ST10_4 int v18; // ST14_4 char *v19; // eax char *v20; // eax unsigned __int8 v22; // [esp-10h] [ebp-54h] unsigned __int8 v23; // [esp-Ch] [ebp-50h] unsigned __int8 v24; // [esp-8h] [ebp-4Ch] int v25; // [esp+Ch] [ebp-38h] int v26; // [esp+10h] [ebp-34h] int v27; // [esp+14h] [ebp-30h] int v28; // [esp+18h] [ebp-2Ch] char v29[4]; // [esp+1Ch] [ebp-28h] int v30; // [esp+20h] [ebp-24h] int v31; // [esp+24h] [ebp-20h] int v32; // [esp+28h] [ebp-1Ch] int v33; // [esp+2Ch] [ebp-18h] int v34; // [esp+30h] [ebp-14h] int v35; // [esp+34h] [ebp-10h] int v36; // [esp+38h] [ebp-Ch] char v37; // [esp+3Ch] [ebp-8h] v3 = a3[1]; v4 = (int)this; *(_DWORD *)v29 = *a3; v5 = a3[2]; v30 = v3; v6 = a3[3]; v31 = v5; v7 = a3[4]; v32 = v6; v8 = a3[5]; v33 = v7; v9 = a3[6]; v34 = v8; v10 = a3[7]; v35 = v9; v36 = v10; v37 = 0; v11 = 0; if ( sub_4DC650() > 0 ) { while ( 1 ) { v12 = sub_7474E0((_DWORD *)(dword_ACDA48 + 4), v11); if ( !strncmp((const char *)(v12 + 2), v29, 0x20u) ) break; if ( (signed int)++v11 >= sub_4DC650() ) return a2; } if ( dword_ACD914 ) { v13 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( v13 ) { v24 = v13[6]; v23 = v13[5]; v22 = v13[4]; } else { v24 = -1; v23 = 0; v22 = -1; } sub_419EE0((float *)&v25, v22, v23, v24, 0xFFu); } else { sub_419EE0((float *)&v25, 0xFFu, dword_ACD914, 0xFFu, 0xFFu); } v14 = v25; v15 = v26; v16 = v12 + 34; v17 = v27; v18 = v28; v19 = (char *)sub_40A910(861906031); v20 = sub_7549E0(v19, v16); sub_492030(v4, v16, v11, (int)v20, v14, v15, v17, v18); } return a2; } // ACD914: using guessed type int dword_ACD914; // ACDA48: using guessed type int dword_ACDA48; //----- (004D0DF0) -------------------------------------------------------- int __stdcall sub_4D0DF0(int a1, const char *a2) { int v2; // eax OutputDebugStringA("RCV :On_NC_SCENARIO_MESSAGE_CMD\n"); v2 = sub_438BD0(a2); if ( v2 ) sub_44DD70(v2, 0, 0xFFFF); return a1; } //----- (004D0E30) -------------------------------------------------------- int __stdcall sub_4D0E30(int a1, int a2) { char *v2; // esi int v3; // eax v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); if ( v2 ) { v3 = sub_4DCEA0(*(_WORD *)(a2 + 2)); if ( v3 ) sub_6AB760(&unk_B91250, v3, 0, 0.0, v2, 0, 0, 0xFFFF, 0); } return a1; } //----- (004D0E90) -------------------------------------------------------- int __thiscall sub_4D0E90(_DWORD *this, int a2, int a3) { int v3; // eax int v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int *v8; // eax int v9; // ecx int v10; // edx int v11; // ecx int v12; // edx unsigned int v13; // edi int v14; // eax _BYTE *v15; // eax int *v16; // eax int v17; // ST10_4 int v18; // ST0C_4 int v19; // ST08_4 char *v20; // eax char *v21; // eax int v22; // ST20_4 int v23; // ST1C_4 int v24; // ST18_4 char *v25; // eax char *v26; // eax char *v27; // eax char *v28; // eax int *v29; // eax int v30; // ST14_4 int v31; // ST18_4 int v32; // ST1C_4 int v33; // ST20_4 int v34; // ST10_4 int v35; // ST0C_4 int v36; // ST08_4 char *v37; // eax char *v38; // eax char *v39; // eax char *v40; // eax int v41; // ST20_4 int v42; // ST1C_4 int v43; // ST18_4 char *v44; // eax int v46; // [esp-10h] [ebp-54h] int v47; // [esp-Ch] [ebp-50h] int v48; // [esp-8h] [ebp-4Ch] int v49; // [esp-4h] [ebp-48h] unsigned int v50; // [esp+Ch] [ebp-38h] int v51; // [esp+10h] [ebp-34h] int v52; // [esp+14h] [ebp-30h] int v53; // [esp+18h] [ebp-2Ch] int v54; // [esp+1Ch] [ebp-28h] int v55; // [esp+20h] [ebp-24h] char v56; // [esp+24h] [ebp-20h] char v57[4]; // [esp+28h] [ebp-1Ch] int v58; // [esp+2Ch] [ebp-18h] int v59; // [esp+30h] [ebp-14h] int v60; // [esp+34h] [ebp-10h] int v61; // [esp+38h] [ebp-Ch] char v62; // [esp+3Ch] [ebp-8h] v3 = *(_DWORD *)a3; v4 = *(_DWORD *)(a3 + 8); v5 = this; v58 = *(_DWORD *)(a3 + 4); v6 = *(_DWORD *)(a3 + 16); *(_DWORD *)v57 = v3; v7 = *(_DWORD *)(a3 + 12); v61 = v6; v59 = v4; v60 = v7; v62 = 0; v8 = (int *)sub_680810(byte_AD9238); v9 = v8[1]; v51 = *v8; v10 = v8[2]; v52 = v9; v11 = v8[3]; v53 = v10; v12 = v8[4]; v54 = v11; v55 = v12; v56 = 0; v13 = 0; if ( strcmp((const char *)&v51, v57) ) { v14 = *(_DWORD *)(dword_ACDA18 + 56); v50 = v14 ? *(_DWORD *)(v14 + 40) : 0; if ( v50 > 0 ) { do { v15 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACDA18 + 4), v13); if ( !v15 ) break; if ( *(_BYTE *)(a3 + 20) == *v15 ) { v16 = (int *)sub_4B1B10((float *)&v52, 0x32u); v46 = *v16; v47 = v16[1]; v48 = v16[2]; v49 = v16[3]; if ( v13 ) { v27 = (char *)sub_4090F0(555308411); v28 = sub_7549E0(v27, v57); sub_492030((int)v5, v13, a3, (int)v28, v46, v47, v48, v49); v29 = (int *)sub_4B1B10((float *)&v52, 0x32u); v30 = *v29; v31 = v29[1]; v32 = v29[2]; v33 = v29[3]; v34 = *(unsigned __int8 *)(a3 + 23); v35 = *(unsigned __int8 *)(a3 + 22); v36 = *(unsigned __int8 *)(a3 + 21); v37 = (char *)sub_4090F0(639197060); v38 = sub_7549E0(v37, v36, v35, v34); sub_492030((int)v5, v13, a3, (int)v38, v30, v31, v32, v33); v39 = (char *)sub_4090F0(555308411); v40 = sub_7549E0(v39, v57); sub_492060(v5, (int)v40); v41 = *(unsigned __int8 *)(a3 + 23); v42 = *(unsigned __int8 *)(a3 + 22); v43 = *(unsigned __int8 *)(a3 + 21); v44 = (char *)sub_4090F0(639197060); v26 = sub_7549E0(v44, v43, v42, v41); } else { v17 = *(unsigned __int8 *)(a3 + 23); v18 = *(unsigned __int8 *)(a3 + 22); v19 = *(unsigned __int8 *)(a3 + 21); v20 = (char *)sub_4090F0(611813260); v21 = sub_7549E0(v20, v57, v19, v18, v17); sub_492030((int)v5, 0, a3, (int)v21, v46, v47, v48, v49); v22 = *(unsigned __int8 *)(a3 + 23); v23 = *(unsigned __int8 *)(a3 + 22); v24 = *(unsigned __int8 *)(a3 + 21); v25 = (char *)sub_4090F0(611813260); v26 = sub_7549E0(v25, v57, v24, v23, v22); } sub_492060(v5, (int)v26); return a2; } ++v13; } while ( v13 < v50 ); } } return a2; } // ACDA18: using guessed type int dword_ACDA18; //----- (004D10E0) -------------------------------------------------------- int __thiscall sub_4D10E0(_DWORD *this, int a2, int a3) { int v3; // eax int v4; // edx _DWORD *v5; // edi int v6; // ecx int v7; // eax int *v8; // eax int v9; // ecx int v10; // edx int v11; // ecx int v12; // edx int *v13; // eax int v14; // ST14_4 int v15; // ST18_4 int v16; // ST1C_4 int v17; // ST20_4 int v18; // ST10_4 int v19; // ST0C_4 int v20; // ST08_4 char *v21; // eax char *v22; // eax int v23; // ST20_4 int v24; // ST1C_4 int v25; // ST18_4 char *v26; // eax char *v27; // eax int v29; // [esp+8h] [ebp-34h] int v30; // [esp+Ch] [ebp-30h] int v31; // [esp+10h] [ebp-2Ch] int v32; // [esp+14h] [ebp-28h] int v33; // [esp+18h] [ebp-24h] char v34; // [esp+1Ch] [ebp-20h] char v35[4]; // [esp+20h] [ebp-1Ch] int v36; // [esp+24h] [ebp-18h] int v37; // [esp+28h] [ebp-14h] int v38; // [esp+2Ch] [ebp-10h] int v39; // [esp+30h] [ebp-Ch] char v40; // [esp+34h] [ebp-8h] v3 = *(_DWORD *)a3; v4 = *(_DWORD *)(a3 + 8); v5 = this; v36 = *(_DWORD *)(a3 + 4); v6 = *(_DWORD *)(a3 + 16); *(_DWORD *)v35 = v3; v7 = *(_DWORD *)(a3 + 12); v39 = v6; v37 = v4; v38 = v7; v40 = 0; v8 = (int *)sub_680810(byte_AD9238); v9 = v8[1]; v29 = *v8; v10 = v8[2]; v30 = v9; v11 = v8[3]; v31 = v10; v12 = v8[4]; v32 = v11; v33 = v12; v34 = 0; if ( strcmp((const char *)&v29, v35) ) { v13 = (int *)sub_4B1B10((float *)&v30, 0x32u); v14 = *v13; v15 = v13[1]; v16 = v13[2]; v17 = v13[3]; v18 = *(unsigned __int8 *)(a3 + 22); v19 = *(unsigned __int8 *)(a3 + 21); v20 = *(unsigned __int8 *)(a3 + 20); v21 = (char *)sub_4090F0(623454776); v22 = sub_7549E0(v21, v35, v20, v19, v18); sub_492030((int)v5, (int)v5, a3, (int)v22, v14, v15, v16, v17); } v23 = *(unsigned __int8 *)(a3 + 22); v24 = *(unsigned __int8 *)(a3 + 21); v25 = *(unsigned __int8 *)(a3 + 20); v26 = (char *)sub_4090F0(623454776); v27 = sub_7549E0(v26, v35, v25, v24, v23); sub_492060(v5, (int)v27); return a2; } //----- (004D1220) -------------------------------------------------------- void __thiscall sub_4D1220(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, void *a8, int a9, int a10, int a11, int a12, int a13, int a14) { int v14; // ecx int v15; // ebx int v16; // edi _BYTE *v17; // eax size_t v18; // eax int v19; // esi char *v20; // ecx int v21; // ecx _DWORD *v22; // [esp+10h] [ebp-B0h] __int16 v23; // [esp+14h] [ebp-ACh] int v24; // [esp+18h] [ebp-A8h] int v25; // [esp+1Ch] [ebp-A4h] int v26; // [esp+20h] [ebp-A0h] int v27; // [esp+24h] [ebp-9Ch] int v28; // [esp+28h] [ebp-98h] char v29; // [esp+2Ch] [ebp-94h] unsigned __int8 v30; // [esp+2Dh] [ebp-93h] int v31; // [esp+30h] [ebp-90h] int v32; // [esp+BCh] [ebp-4h] v22 = this; v14 = this[585]; v15 = 0; v32 = 0; v23 = 22567; sub_905F90(v14, &v23, 2u); v24 = a2; v27 = a5; v25 = a3; v26 = a4; v28 = a6; v29 = a7; v16 = a12; if ( a12 > 127 ) v16 = 127; v31 = 0; while ( 1 ) { v17 = a8; if ( (unsigned int)a13 < 0x10 ) v17 = &a8; v18 = (IsDBCSLeadByte(v17[v15]) != 0) + 1; v19 = v18 + v15; if ( (signed int)(v18 + v15) > v16 ) break; v20 = (char *)a8; if ( (unsigned int)a13 < 0x10 ) v20 = (char *)&a8; memcpy((char *)&v31 + v15, &v20[v15], v18); v15 = v19; } v21 = v22[585]; *((_BYTE *)&v31 + v15) = 0; v30 = v15; sub_905F90(v21, &v24, 0x16u); sub_906000(v22[585], &v31, v30); if ( (unsigned int)a13 >= 0x10 ) operator delete(a8); } //----- (004D1390) -------------------------------------------------------- int __thiscall sub_4D1390(int *this, int a2, __int16 *a3) { __int16 *v3; // esi int *v4; // ebx char *v5; // edi char *v6; // eax _DWORD *v7; // eax char *v9; // [esp+14h] [ebp+Ch] v3 = a3; v4 = this; v9 = sub_664AB0(dword_AD8C90, *a3); if ( v9 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACE8D0 + 16))((unsigned __int16)v3[1]); v5 = sub_4E2910(v4, *v3, 9, 79); v6 = sub_4E2910(v4, v3[2], 9, 79); if ( v5 && v5 != dword_AD8EBC && v6 ) { (*(void (__thiscall **)(char *, char *, signed int, _DWORD))(*(_DWORD *)v5 + 312))( v5, v6, 1, (unsigned __int16)v3[1]); (*(void (__thiscall **)(char *))(*(_DWORD *)v5 + 540))(v5); } v7 = operator new(0x18u); if ( v7 ) { v7[4] = 0; v7[2] = 0; v7[3] = 0; v7[1] = &NiTList::`vftable'; } else { v7 = 0; } *(_WORD *)v7 = v3[1]; *((_WORD *)v7 + 10) = v3[3]; sub_64D390((int)(v9 + 84), (int)v7); } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D1460) -------------------------------------------------------- int __thiscall sub_4D1460(__int16 *this, int a2, unsigned __int16 *a3) { int v3; // edi int v4; // ebx _DWORD *v5; // eax __int16 v6; // dx __int16 *v8; // [esp+Ch] [ebp-4h] v8 = this; sub_664AB0(dword_AD8C90, this[1264]); v3 = dword_ACE8D0; v4 = *a3; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v4) && (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * v4) ) { *((_DWORD *)v8 + 630) = *(_DWORD *)(a3 + 1); *((_DWORD *)v8 + 631) = *(_DWORD *)(a3 + 3); sub_650960((int)dword_AD8EBC, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 3), 1); v5 = operator new(0x18u); if ( v5 ) { v5[4] = 0; v5[2] = 0; v5[3] = 0; v5[1] = &NiTList::`vftable'; } else { v5 = 0; } v6 = *a3; *((_WORD *)v5 + 10) = a3[5]; *(_WORD *)v5 = v6; sub_64D390((int)(dword_AD8EBC + 84), (int)v5); } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D1530) -------------------------------------------------------- int __thiscall sub_4D1530(int *this, int a2, __int16 *a3) { __int16 *v3; // esi int v4; // edi int v5; // ebx char *v6; // eax char *v7; // edi _DWORD *v8; // eax int *v10; // [esp+Ch] [ebp-4h] char *v11; // [esp+1Ch] [ebp+Ch] v3 = a3; v10 = this; v11 = sub_664AB0(dword_AD8C90, *a3); if ( v11 ) { v4 = dword_ACE8D0; v5 = (unsigned __int16)v3[1]; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) && *(_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * v5) ) { v6 = sub_4E2910(v10, *v3, 9, 81); v7 = v6; if ( v6 && v6 != dword_AD8EBC ) { (*(void (__thiscall **)(char *, _DWORD, _DWORD, signed int, _DWORD))(*(_DWORD *)v6 + 308))( v6, *((_DWORD *)v3 + 1), *((_DWORD *)v3 + 2), 1, (unsigned __int16)v3[1]); (*(void (__thiscall **)(char *))(*(_DWORD *)v7 + 540))(v7); } sub_650960((int)v11, *((_DWORD *)v3 + 1), *((_DWORD *)v3 + 2), 1); v8 = operator new(0x18u); if ( v8 ) { v8[4] = 0; v8[2] = 0; v8[3] = 0; v8[1] = &NiTList::`vftable'; } else { v8 = 0; } *(_WORD *)v8 = v3[1]; *((_WORD *)v8 + 10) = v3[6]; sub_64D390((int)(v11 + 84), (int)v8); } } } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D1640) -------------------------------------------------------- int __thiscall sub_4D1640(int ***this, int a2, int a3) { char *v3; // eax __int16 v4; // ax char *v5; // eax bool v6; // zf int v7; // edi int v8; // edx char v9; // al char v10; // cl char v11; // si char v12; // bl unsigned int v13; // esi __int16 v14; // ax int v15; // ebx __int16 v16; // ax int ***v17; // ebx __int16 v18; // ax __int16 v19; // ax char *v20; // eax char *v21; // ebx __int16 v22; // dx __int16 v23; // ax _DWORD *v24; // esi _DWORD *v25; // ST18_4 unsigned int v26; // edx void **v28; // [esp+10h] [ebp-34h] _DWORD *v29; // [esp+14h] [ebp-30h] int v30; // [esp+18h] [ebp-2Ch] int v31; // [esp+1Ch] [ebp-28h] _DWORD *v32; // [esp+20h] [ebp-24h] int ***v33; // [esp+24h] [ebp-20h] unsigned int v34; // [esp+28h] [ebp-1Ch] int v35; // [esp+2Ch] [ebp-18h] char *v36; // [esp+30h] [ebp-14h] char v37; // [esp+36h] [ebp-Eh] char v38; // [esp+37h] [ebp-Dh] int v39; // [esp+40h] [ebp-4h] v33 = this; v3 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 2)); v36 = v3; if ( v3 ) { v32 = (_DWORD *)sub_64D0F0((_DWORD *)v3 + 21, *(_WORD *)a3); v4 = *(_WORD *)(a3 + 7); v38 = 0; v37 = 0; if ( v4 != -1 && *(_WORD *)(a3 + 5) == 1620 ) { v5 = sub_664AB0(dword_AD8C90, v4); if ( v5 ) v5[2689] = 1; } v6 = *(_BYTE *)(a3 + 4) == 0; v34 = 0; if ( !v6 ) { v7 = a3 + 11; do { v8 = *(_DWORD *)(v7 + 2); if ( v8 < 0 ) v8 = 0; if ( v8 & 0xFFFF0000 ) v8 = (unsigned __int16)v8; v9 = *(_BYTE *)v7; v10 = *(_BYTE *)v7; v11 = *(_BYTE *)v7; v12 = *(_BYTE *)v7; if ( *(_WORD *)(v7 - 2) == *((_WORD *)dword_AD8EBC + 274) ) { v13 = v8 | (*(_DWORD *)(v7 + 6) != 0 ? 0 : 2147483648) | ((v9 & 0x10) != 16 ? 0 : 0x10000000) | ((v9 & 0x20) != 32 ? 0 : 0x8000000) | ((v10 & 0x40 | 2 * (*(_BYTE *)(v7 + 1) & 2 | 8 * (v10 & 8 | 16 * (~v9 & 1 | 2 * (v12 & 4 | 4 * (v11 & 2))) | 2))) << 18); if ( sub_67B770(dword_AD8EBC) && v13 > 0 ) { v14 = sub_67B780(dword_AD8EBC); v15 = (int)v33; sub_5A0540(v33[163], v14); v16 = sub_67B780(dword_AD8EBC); sub_5A0540(*(int ***)(v15 + 672), v16); v17 = (int ***)(v15 + 676); v35 = 4; do { v18 = sub_67B780(dword_AD8EBC); sub_5A0540(*(v17 - 5), v18); v19 = sub_67B780(dword_AD8EBC); sub_5A0540(*v17, v19); ++v17; --v35; } while ( v35 ); } } else { v13 = v8 | (*(_DWORD *)(v7 + 6) != 0 ? 0 : 2147483648) | ((v9 & 0x10) != 16 ? 0 : 0x10000000) | ((v9 & 0x20) != 32 ? 0 : 0x8000000) | ((v10 & 0x40 | 2 * (*(_BYTE *)(v7 + 1) & 2 | 8 * (v10 & 8 | 16 * (~v9 & 1 | 2 * (v12 & 4 | 4 * (v11 & 2))) | 3))) << 18); } if ( !v38 && *(_BYTE *)v7 < 0 && v36 == dword_AD8EBC && sub_684D70(&byte_ADA230) ) { sub_684F90(&byte_ADA230); v38 = 1; } if ( !v37 && *(_BYTE *)(v7 + 1) & 4 && v36 == dword_AD8EBC && sub_684DB0(&byte_ADA230) ) { sub_684FF0(&byte_ADA230); v37 = 1; } if ( !*(_DWORD *)(v7 + 6) || *(_BYTE *)(v7 + 1) & 1 ) { v20 = sub_664AB0(dword_AD8C90, *(_WORD *)(v7 - 2)); v21 = v20; if ( v20 ) { if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v20 + 660))(v20) ) v21[2496] = 1; } } if ( v32 ) { v22 = *((_WORD *)dword_AD8EBC + 274); if ( *((_WORD *)v36 + 274) == v22 ) { sub_64D230(v32, v13, *(_WORD *)(v7 - 2), *(unsigned __int16 *)(v7 + 10), *(_DWORD *)(v7 + 6), 1, 0, 1); } else { v23 = *(_WORD *)(v7 - 2); if ( v23 == v22 ) sub_64D230(v32, v13, v23, *(unsigned __int16 *)(v7 + 10), *(_DWORD *)(v7 + 6), 1, 0, *(_WORD *)a3); else sub_64D230(v32, v13, v23, *(unsigned __int16 *)(v7 + 10), *(_DWORD *)(v7 + 6), 0, 0, -1); } } else { v31 = 0; v29 = 0; v30 = 0; v28 = &NiTList::`vftable'; v39 = 0; sub_438A70(&v28); if ( *((_WORD *)v36 + 274) == *((_WORD *)dword_AD8EBC + 274) ) sub_64D230(&v28, v13, *(_WORD *)(v7 - 2), *(unsigned __int16 *)(v7 + 10), *(_DWORD *)(v7 + 6), 1, 0, -1); else sub_64D230( &v28, v13, *(_WORD *)(v7 - 2), *(unsigned __int16 *)(v7 + 10), *(_DWORD *)(v7 + 6), *(_WORD *)(v7 - 2) == *((_WORD *)dword_AD8EBC + 274), 0, -1); sub_64D600(&v28, v36, 0); v39 = 1; sub_438A70(&v28); v28 = &NiTPointerListBase,DamageInfo *>::`vftable'; v24 = v29; v39 = 2; while ( v24 ) { v25 = v24; v24 = (_DWORD *)*v24; ((void (__thiscall *)(void ***, _DWORD *))v28[2])(&v28, v25); } v31 = 0; v29 = 0; v30 = 0; v39 = -1; v28 = &NiTListBase,DamageInfo *>::`vftable'; } v26 = *(unsigned __int8 *)(a3 + 4); v7 += 14; ++v34; } while ( v34 < v26 ); } } else { OutputDebugStringA("haven't char\n"); } return a2; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; // 9AD4BC: using guessed type void *NiTList::`vftable'; // ADA230: using guessed type char byte_ADA230; //----- (004D1AC0) -------------------------------------------------------- int __thiscall sub_4D1AC0(_DWORD *this, int a2, int a3) { char *v3; // edi unsigned int v4; // esi int v5; // edx unsigned int v6; // ecx int v7; // eax int v8; // edx unsigned int v9; // ecx int v10; // eax char v11; // al int v12; // edi char v13; // bl unsigned int v14; // esi int v15; // esi const CHAR *v16; // eax int v17; // edx unsigned int v18; // edi _BYTE *v19; // eax const CHAR *v21; // eax char v22; // [esp+14h] [ebp-20h] int v23; // [esp+1Ch] [ebp-18h] int *v24; // [esp+20h] [ebp-14h] unsigned int v25; // [esp+28h] [ebp-Ch] char *v26; // [esp+2Ch] [ebp-8h] _DWORD *v27; // [esp+30h] [ebp-4h] v27 = this; v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); v26 = v3; if ( !v3 ) return a2; sub_4DD290(dword_AD8C90, &v24); sub_4DD2B0(dword_AD8C90, &v22); v4 = v25; if ( v25 == v23 ) { LABEL_16: v11 = (*(int (__thiscall **)(char *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 16))(v3, *(_DWORD *)(a3 + 2), -3.0, 0); v12 = *(unsigned __int16 *)(a3 + 2); v13 = v11; v14 = 0; if ( sub_4DC310() ) { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v14) + 34) != v12 ) { if ( ++v14 >= sub_4DC310() ) goto LABEL_19; } v15 = sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v14); } else { LABEL_19: v15 = 0; } if ( v26 != dword_AD8EBC || !v13 || !v15 ) return a2; switch ( *(_DWORD *)(v15 + 244) ) { case 3: v16 = sub_40C190(1325059531); break; case 4: v16 = sub_40C190(1745404876); break; case 5: v16 = sub_40C190(174404483); break; default: goto LABEL_37; } sub_492060(v27, (int)v16); LABEL_37: if ( *(_DWORD *)(v15 + 34) == 337 ) { v21 = sub_40A910(1327088824); sub_492060(v27, (int)v21); } return a2; } while ( 1 ) { if ( v24 ) v5 = *v24; else v5 = 0; v6 = *(_DWORD *)(v5 + 8); v7 = v4; if ( v6 <= v4 ) v7 = v4 - v6; if ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4 * v7) + 248) ) { if ( v24 ) v8 = *v24; else v8 = 0; v9 = *(_DWORD *)(v8 + 8); v10 = v4; if ( v9 <= v4 ) v10 = v4 - v9; if ( *(_WORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v8 + 4) + 4 * v10) + 248) + 548) == *((_WORD *)v3 + 274) ) break; } if ( ++v4 == v23 ) goto LABEL_16; } if ( v24 ) v17 = *v24; else v17 = 0; v18 = *(_DWORD *)(v17 + 8); if ( v18 <= v4 ) v4 -= v18; v19 = (_BYTE *)(*(_DWORD *)(*(_DWORD *)(v17 + 4) + 4 * v4) + *(_DWORD *)(a3 + 2) / 8 + 91); *v19 |= 1 << *(_DWORD *)(a3 + 2) % 8; return a2; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004D1CB0) -------------------------------------------------------- int __thiscall sub_4D1CB0(void *this, int a2, float a3) { int v3; // edi unsigned __int16 *v4; // esi unsigned int v5; // eax double v6; // st7 unsigned __int16 v7; // ax int v8; // eax unsigned __int8 (__stdcall *v9)(int, _DWORD, _DWORD); // edx int v10; // ebx int v11; // eax unsigned int v12; // esi int v13; // edx unsigned int v14; // ecx int v15; // eax float v16; // ebx int v17; // edx unsigned int v18; // edi _BYTE *v19; // eax const CHAR *v21; // eax int v22; // esi float **v23; // esi float *v24; // eax int v25; // ST04_4 int v26; // ST08_4 int v27; // ST0C_4 int v28; // ST10_4 const CHAR *v29; // eax int v30; // esi void (__thiscall ***v31)(_DWORD, signed int); // edi float **v32; // esi float *v33; // eax int v34; // ST04_4 int v35; // ST08_4 int v36; // ST0C_4 int v37; // ST10_4 const CHAR *v38; // eax const CHAR *v39; // eax int v40; // eax int v41; // eax float *v42; // ecx double v43; // st7 float v44; // ST14_4 unsigned __int8 *v45; // eax int v46; // [esp+24h] [ebp-2Ch] char v47; // [esp+28h] [ebp-28h] int v48; // [esp+30h] [ebp-20h] int *v49; // [esp+34h] [ebp-1Ch] unsigned int v50; // [esp+3Ch] [ebp-14h] int v51; // [esp+40h] [ebp-10h] int v52; // [esp+44h] [ebp-Ch] float v53; // [esp+48h] [ebp-8h] int v54; // [esp+4Ch] [ebp-4h] v3 = (int)this; v54 = (int)this; if ( !dword_AD8EBC ) return a2; v4 = (unsigned __int16 *)LODWORD(a3); v5 = *(_DWORD *)(LODWORD(a3) + 4); if ( v5 == -1 ) { v6 = -3.0; } else { v51 = *(_DWORD *)(LODWORD(a3) + 4); v6 = (double)v5 / 1000.0; } v7 = *(_WORD *)LODWORD(a3); v53 = v6; v8 = sub_4DCEF0(v7); v9 = *(unsigned __int8 (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_AD8EBC + 16); v10 = v8; v11 = *(_DWORD *)v4; v52 = v10; if ( !v9(v11, LODWORD(v53), 0) || (v53 = COERCE_FLOAT(sub_4DCEF0(*v4)), v53 == 0.0) ) { LABEL_49: if ( *((_DWORD *)dword_AD8EBC + 6) || *((_DWORD *)dword_AD8EBC + 8) > 0 ) { if ( *(_BYTE *)(v3 + 42) ) sub_4E3330((_DWORD *)(v3 + 36), 0); sub_4DE8F0((float *)v3, 0, 0.0); } v40 = *(_DWORD *)v4; if ( *(_DWORD *)v4 == 76 || v40 == 370 || v40 == 414 ) { a3 = 0.0099999998; if ( v10 ) { v41 = sub_4DCF40((const char *)(v10 + 212)); if ( v41 ) a3 = (double)*(unsigned int *)(v41 + 43); } v42 = *(float **)(v3 + 4832); a3 = a3 / 1000.0; v43 = a3; a3 = 0.25 * a3 * 3.0; v44 = v43; sub_6B4180(v42, v44, a3); sub_67D370(dword_AD8EBC, 0); if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { LOWORD(a3) = 9266; sub_906000(*(_DWORD *)(v3 + 2336), &a3, 2u); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } } v45 = (unsigned __int8 *)sub_4DCE10((const char *)(v10 + 2), 0); if ( v45 ) sub_44DC50(v45); return a2; } sub_4DD290(dword_AD8C90, &v49); sub_4DD2B0(dword_AD8C90, &v47); v12 = v50; if ( v50 == v48 ) { LABEL_17: v16 = v53; switch ( *(_DWORD *)(LODWORD(v53) + 244) ) { case 3: v21 = sub_40C190(1325059531); goto LABEL_27; case 4: v21 = sub_40C190(1745404876); goto LABEL_27; case 5: v21 = sub_40C190(174404483); LABEL_27: sub_492060((_DWORD *)v3, (int)v21); break; case 6: case 7: if ( *(_BYTE *)(v3 + 42) ) sub_4E3330((_DWORD *)(v3 + 36), 0); sub_4DE8F0((float *)v3, 0, 0.0); v22 = *sub_49F490(&v51); sub_410C00(&v51); if ( v22 ) { if ( *(_BYTE *)(v22 + 52) ) { *(_BYTE *)(v22 + 52) = 0; v23 = *(float ***)(v3 + 1220); if ( v23 ) { sub_5E9180(*(float ***)(v3 + 1220)); v24 = sub_419EE0((float *)&v46, 0xFFu, 0x90u, 0, 0xFFu); v25 = *(_DWORD *)v24; v26 = *((_DWORD *)v24 + 1); v27 = *((_DWORD *)v24 + 2); v28 = *((_DWORD *)v24 + 3); v29 = sub_40A910(1011971465); sub_5E9030(v23, (int)v29, v25, v26, v27, v28, 0, 3.0); } } } break; default: break; } if ( *(_DWORD *)(LODWORD(v16) + 248) == 8 ) { if ( *(_BYTE *)(v3 + 42) ) sub_4E3330((_DWORD *)(v3 + 36), 0); sub_4DE8F0((float *)v3, 0, 0.0); v30 = *sub_49F490(&v51); if ( v51 ) { v31 = (void (__thiscall ***)(_DWORD, signed int))v51; if ( !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v31 ) (**v31)(v31, 1); v3 = v54; } if ( v30 ) { if ( *(_BYTE *)(v30 + 52) ) { *(_BYTE *)(v30 + 52) = 0; v32 = *(float ***)(v3 + 1220); if ( v32 ) { sub_5E9180(*(float ***)(v3 + 1220)); v33 = sub_419EE0((float *)&v46, 0xFFu, 0x90u, 0, 0xFFu); v34 = *(_DWORD *)v33; v35 = *((_DWORD *)v33 + 1); v36 = *((_DWORD *)v33 + 2); v37 = *((_DWORD *)v33 + 3); v38 = sub_40A910(1011971465); sub_5E9030(v32, (int)v38, v34, v35, v36, v37, 0, 3.0); } } } } if ( *(_DWORD *)(LODWORD(v16) + 34) == 337 ) { v39 = sub_40A910(1327088824); sub_492060((_DWORD *)v3, (int)v39); } v10 = v52; v4 = (unsigned __int16 *)LODWORD(a3); goto LABEL_49; } v51 = *((unsigned __int16 *)dword_AD8EBC + 274); while ( 1 ) { if ( v49 ) v13 = *v49; else v13 = 0; v14 = *(_DWORD *)(v13 + 8); v15 = v12; if ( v14 <= v12 ) v15 = v12 - v14; if ( *(_WORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v13 + 4) + 4 * v15) + 248) + 548) == (_WORD)v51 ) break; if ( ++v12 == v48 ) { v3 = v54; goto LABEL_17; } } if ( v49 ) v17 = *v49; else v17 = 0; v18 = *(_DWORD *)(v17 + 8); if ( v18 <= v12 ) v12 -= v18; v19 = (_BYTE *)(*(_DWORD *)(*(_DWORD *)(v17 + 4) + 4 * v12) + *(_DWORD *)LODWORD(a3) / 8 + 91); *v19 |= 1 << *(_DWORD *)LODWORD(a3) % 8; return a2; } //----- (004D2120) -------------------------------------------------------- int __thiscall sub_4D2120(_DWORD *this, int a2, int a3) { int v3; // edi __int16 v4; // ax char *v5; // ebx unsigned int v6; // esi __int16 v7; // di _DWORD *v8; // ebx int v9; // edx unsigned int v10; // ecx int v11; // eax int v12; // edi unsigned int v13; // esi int v14; // esi const CHAR *v15; // eax int v16; // eax int v17; // edi unsigned int v18; // ecx int v19; // edx int v20; // edx unsigned int v21; // ecx _BYTE *v22; // eax int v24; // eax unsigned __int8 *v25; // eax char v26; // [esp+Ch] [ebp-20h] int v27; // [esp+14h] [ebp-18h] _DWORD *v28; // [esp+18h] [ebp-14h] unsigned int v29; // [esp+20h] [ebp-Ch] char *v30; // [esp+24h] [ebp-8h] _DWORD *v31; // [esp+28h] [ebp-4h] v3 = a3; v4 = *(_WORD *)a3; v31 = this; v5 = sub_664AB0(dword_AD8C90, v4); v30 = v5; if ( !v5 ) return a2; sub_4DD290(dword_AD8C90, &v28); sub_4DD2B0(dword_AD8C90, &v26); v6 = v29; if ( v29 == v27 ) { LABEL_12: (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v5 + 20))(v5, *(_DWORD *)(v3 + 2)); v12 = *(unsigned __int16 *)(v3 + 2); v13 = 0; if ( sub_4DC310() ) { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v13) + 34) != v12 ) { if ( ++v13 >= sub_4DC310() ) goto LABEL_15; } v14 = sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v13); } else { LABEL_15: v14 = 0; } if ( v5 != dword_AD8EBC ) return a2; if ( !v14 ) goto LABEL_36; if ( *(_DWORD *)(v14 + 244) == 1 ) { v15 = sub_40C190(-448188345); } else { if ( *(_DWORD *)(v14 + 244) != 2 ) goto LABEL_36; v15 = sub_40C190(760753277); } sub_492060(v31, (int)v15); LABEL_36: v24 = *(_DWORD *)(a3 + 2); if ( v24 == 76 || v24 == 370 || v24 == 414 ) sub_6B3D30(v31[1208]); v25 = (unsigned __int8 *)sub_4DCE10((const char *)(v14 + 2), 1); if ( v25 ) sub_44DC50(v25); return a2; } v7 = *((_WORD *)v5 + 274); while ( 1 ) { v8 = v28; if ( v28 ) v9 = *v28; else v9 = 0; v10 = *(_DWORD *)(v9 + 8); v11 = v6; if ( v10 <= v6 ) v11 = v6 - v10; if ( *(_WORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4 * v11) + 248) + 548) == v7 ) break; if ( ++v6 == v27 ) { v5 = v30; v3 = a3; goto LABEL_12; } } v16 = *(_DWORD *)(a3 + 2) / 8; v17 = *(_DWORD *)(a3 + 2) % 8; if ( v28 ) v8 = (_DWORD *)*v28; v18 = v8[2]; v19 = v6; if ( v18 <= v6 ) v19 = v6 - v18; if ( !*(_BYTE *)(*(_DWORD *)(v8[1] + 4 * v19) + v16 + 91) || !(1 << v17) ) return a2; if ( v28 ) v20 = *v28; else v20 = 0; v21 = *(_DWORD *)(v20 + 8); if ( v21 <= v6 ) v6 -= v21; v22 = (_BYTE *)(*(_DWORD *)(*(_DWORD *)(v20 + 4) + 4 * v6) + v16 + 91); *v22 ^= 1 << v17; return a2; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004D2330) -------------------------------------------------------- int __thiscall sub_4D2330(int *this, int a2, unsigned __int16 *a3) { int *v3; // ebx int v4; // ecx int v5; // ecx int *v6; // esi int v7; // ecx int v8; // ecx int v9; // esi int v10; // ebx int *v11; // eax int v12; // eax _DWORD *v13; // eax int v14; // edi int v15; // eax char v16; // al unsigned int *v17; // ebx int v18; // esi char *v19; // eax int result; // eax unsigned int v21; // [esp+18h] [ebp-1Ch] char v22; // [esp+1Ch] [ebp-18h] int *v23; // [esp+20h] [ebp-14h] signed int v24; // [esp+24h] [ebp-10h] int v25; // [esp+24h] [ebp-10h] int v26; // [esp+28h] [ebp-Ch] int v27; // [esp+2Ch] [ebp-8h] char v28; // [esp+32h] [ebp-2h] char v29; // [esp+33h] [ebp-1h] v3 = this; v23 = this; sub_4F3590(this[259]); if ( !sub_64FF40(dword_AD8EBC, 31) ) { sub_6BFD20(*a3, flt_ACCFCC, 0.0, 0.0); v4 = v3[163]; nullsub_15(*a3, LODWORD(flt_ACCFCC)); v5 = v3[168]; nullsub_15(*a3, LODWORD(flt_ACCFCC)); v6 = v3 + 169; v24 = 4; do { v7 = *(v6 - 5); nullsub_15(*a3, LODWORD(flt_ACCFCC)); v8 = *v6; nullsub_15(*a3, LODWORD(flt_ACCFCC)); ++v6; --v24; } while ( v24 ); } v29 = 0; v28 = 0; sub_664AB0(dword_AD8C90, *((_WORD *)v3 + 1264)); v9 = dword_ACE8D0; v10 = *a3; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v10) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v10); if ( *v11 ) { v12 = *v11; v27 = v12; if ( v12 && *(_DWORD *)(v12 + 259) ) { v23[630] = *(_DWORD *)((char *)a3 + 3); v23[631] = *(_DWORD *)((char *)a3 + 7); sub_650960((int)dword_AD8EBC, *(_DWORD *)((char *)a3 + 3), *(_DWORD *)((char *)a3 + 7), 1); } } else { v27 = 0; } } else { v27 = 0; } } else { v27 = 0; } sub_65B7B0((int)dword_AD8EBC, 1); v13 = operator new(0x18u); if ( v13 ) { v13[4] = 0; v13[2] = 0; v13[3] = 0; v13[1] = &NiTList::`vftable'; v26 = (int)v13; } else { v26 = 0; } *(_WORD *)v26 = *a3; v21 = 0; if ( *((_BYTE *)a3 + 2) > 0u ) { v14 = (int)a3 + 13; do { v15 = *(_DWORD *)(v14 + 2); v25 = v15; if ( v15 < 0 ) { v15 = 0; v25 = 0; } if ( v15 & 0xFFFF0000 ) v25 = (unsigned __int16)v15; v16 = *(_BYTE *)v14; v17 = (unsigned int *)(v14 + 6); v18 = v25 | (*(_DWORD *)(v14 + 6) != 0 ? 0 : 2147483648) | ((v16 & 0x20) != 32 ? 0 : 0x8000000) | ((v16 & 0x10) != 16 ? 0 : 0x10000000) | ((v16 & 0x40 | 16 * (v16 & 8 | 16 * (~*(_BYTE *)v14 & 1 | 2 * (*(_BYTE *)v14 & 4 | 4 * (*(_BYTE *)v14 & 2))) | 2)) << 18); if ( sub_4E2A50(*(unsigned __int16 *)(v14 - 2), (int *)(v14 + 6)) ) { if ( !v29 && *(_BYTE *)v14 < 0 && sub_684D70(&byte_ADA230) ) { sub_684F90(&byte_ADA230); v29 = 1; } if ( !v28 && *(_BYTE *)(v14 + 1) & 2 && sub_684DB0(&byte_ADA230) ) { sub_684FF0(&byte_ADA230); v28 = 1; } if ( !*v17 ) { v19 = sub_664AB0(dword_AD8C90, *(_WORD *)(v14 - 2)); if ( v19 ) v19[2496] = 1; } v22 = 1; if ( !strcmp((const char *)(v27 + 2), "Revival01") ) v22 = 0; sub_64D230((_DWORD *)(v26 + 4), v18, *(_WORD *)(v14 - 2), *(unsigned __int16 *)(v14 + 10), *v17, v22, 0, -1); } v14 += 14; ++v21; } while ( v21 < *((unsigned __int8 *)a3 + 2) ); } sub_64D390((int)(dword_AD8EBC + 84), v26); result = a2; v23[628] = 0; return result; } // 5A0810: using guessed type _DWORD __stdcall nullsub_15(_DWORD, _DWORD); // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; // ADA230: using guessed type char byte_ADA230; //----- (004D26B0) -------------------------------------------------------- void __thiscall sub_4D26B0(_DWORD *this, int ****a2) { int **v2; // esi _DWORD *v3; // edi int v4; // esi int ***v5; // edi int **v6; // eax char *v7; // ecx unsigned __int16 v8; // [esp+Ch] [ebp-404h] char v9; // [esp+11h] [ebp-3FFh] v2 = (int **)a2[1]; v3 = this; if ( v2 ) { memset((char *)&v8 + 1, 0, 0x3FFu); v8 = (unsigned __int16)v2; v4 = v3[145]; if ( v4 ) { v5 = *a2; v6 = **a2; if ( v6 != (int **)*a2 ) { v7 = &v9; do { *(_WORD *)(v7 - 3) = *((_WORD *)v6 + 4); *v7 = *(_BYTE *)(258 * (_DWORD)v6[2] + v4 + 601); *(v7 - 1) = *(_BYTE *)(258 * (_DWORD)v6[2] + v4 + 600); v6 = (int **)*v6; v7 += 4; } while ( v6 != (int **)v5 ); } sub_6F36A0(&off_AB7F2C, 28, 57, &v8, 4 * v8 + 2); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004D2780) -------------------------------------------------------- void __thiscall sub_4D2780(float **this) { float **v1; // esi float **v2; // eax float *v3; // ecx float *v4; // edi v1 = this; v2 = (float **)*this; v3 = *(float **)*this; if ( v3 != (float *)v2 ) { do { if ( flt_ACCFCC - v3[3] > 30.0 ) { v4 = *(float **)v3; if ( v3 != *v1 ) { **((_DWORD **)v3 + 1) = v4; *(float *)(*(_DWORD *)v3 + 4) = v3[1]; operator delete(v3); v1[1] = (float *)((char *)v1[1] - 1); } v3 = v4; } v3 = *(float **)v3; } while ( v3 != *v1 ); } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004D27D0) -------------------------------------------------------- int __stdcall sub_4D27D0(int a1, int a2) { char *v2; // eax char *v3; // ebx int *v4; // edi int ****v6; // eax int **v7; // ecx unsigned int v8; // esi int v9; // edx unsigned int v10; // ecx int v11; // eax int v12; // ecx unsigned int v13; // eax _DWORD *v14; // eax char v15; // [esp+Ch] [ebp-24h] char v16; // [esp+18h] [ebp-18h] int *v17; // [esp+24h] [ebp-Ch] int v18; // [esp+28h] [ebp-8h] unsigned int v19; // [esp+2Ch] [ebp-4h] v2 = sub_664AB0(dword_AD8C90, *(_WORD *)a2); v3 = v2; v4 = 0; if ( v2 ) { if ( *(_WORD *)(a2 + 2) == -1 ) { sub_650E40(v2, 0); if ( *(_DWORD *)(a2 + 4) == 871 ) sub_656CE0((_DWORD **)v3); else sub_654B20(v3, 0); if ( v3[1449] ) sub_674DE0((int)(v3 + 776), 0, 1); if ( v3[1460] ) { sub_674FF0((int)(v3 + 776), a2, 1); return a1; } } else { v17 = 0; v18 = 0; v6 = (int ****)sub_4DD290(dword_AD8C90, &v16); if ( *v6 ) { v7 = **v6; if ( v7 ) { v4 = *v7; v17 = *v7; } } v19 = (unsigned int)v6[2]; v8 = v19; if ( v8 != sub_4DD2B0(dword_AD8C90, &v16)[2] ) { while ( 1 ) { if ( v4 ) v9 = *v4; else v9 = 0; v10 = *(_DWORD *)(v9 + 8); v11 = v8; if ( v10 <= v8 ) v11 = v8 - v10; if ( *(char **)(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4 * v11) + 248) == v3 ) { if ( v4 ) v12 = *v4; else v12 = 0; v13 = *(_DWORD *)(v12 + 8); if ( v13 <= v8 ) v8 -= v13; *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v12 + 4) + 4 * v8) + 82) = *(_WORD *)(a2 + 2); } sub_4DD780(&v17, &v15, 0); v14 = sub_4DD2B0(dword_AD8C90, &v16); v8 = v19; if ( v19 == v14[2] ) break; v4 = v17; } } sub_650E40(v3, 1); if ( *(_DWORD *)(a2 + 4) == 871 ) sub_656C30(v3, (_DWORD *)*(unsigned __int16 *)(a2 + 2)); else sub_6549B0(v3, (_DWORD *)*(unsigned __int16 *)(a2 + 2)); (*(void (__thiscall **)(char *, signed int))(*(_DWORD *)v3 + 240))(v3, 1); if ( sub_67B6C0(dword_AD8EBC) == 17 && *((char **)dword_AD8EBC + 1026) == v3 ) sub_67D370(dword_AD8EBC, 0); } } return a1; } //----- (004D2980) -------------------------------------------------------- int __thiscall sub_4D2980(__int16 *this, int a2, unsigned __int16 *a3) { int v3; // esi int v4; // edi _DWORD *v5; // eax __int16 v6; // dx sub_664AB0(dword_AD8C90, this[1264]); v3 = dword_ACE8D0; v4 = *a3; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v4) && (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) && *(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * v4) ) { v5 = operator new(0x18u); if ( v5 ) { v5[4] = 0; v5[2] = 0; v5[3] = 0; v5[1] = &NiTList::`vftable'; } else { v5 = 0; } v6 = *a3; *((_WORD *)v5 + 10) = a3[2]; *(_WORD *)v5 = v6; sub_64D390((int)(dword_AD8EBC + 84), (int)v5); } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D2ED0) -------------------------------------------------------- int __thiscall sub_4D2ED0(volatile LONG **this, int a2, int a3) { char *v3; // eax char *v4; // ebx float *v5; // edi int v6; // eax int v7; // edi __int16 v8; // ST18_2 bool v9; // al _DWORD *v11; // eax char v12; // al __int16 v13; // ST18_2 bool v14; // al int v15; // [esp+Ch] [ebp-4h] v15 = (int)this; if ( *((_WORD *)dword_AD8EBC + 274) == *(_WORD *)(a3 + 2) ) sub_5C5A20(this[289]); v3 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); v4 = v3; v5 = 0; if ( v3 ) { if ( v3 == dword_AD8EBC ) { v6 = sub_64D1D0((_DWORD *)v3 + 21); v7 = v6; if ( v6 && *(_WORD *)(v6 + 38) == -1 ) { *(_WORD *)(v6 + 38) = *(unsigned __int8 *)(a3 + 8); *(float *)(v6 + 8) = (double)*(unsigned __int16 *)(a3 + 5) / 1000.0; *(float *)(v6 + 4) = flt_ACCFCC; v8 = *(unsigned __int8 *)(a3 + 7); v9 = sub_652200(v4); sub_64D230((_DWORD *)(v7 + 16), 0x20000000, *(_WORD *)(a3 + 2), -131072, 0, 0, v9, v8); return a2; } v5 = 0; } v11 = operator new(0x28u); if ( v11 ) { v11[7] = 0; v11[5] = 0; v11[6] = 0; v11[4] = &NiTList::`vftable'; *((_WORD *)v11 + 6) = 0; *((_BYTE *)v11 + 14) = 0; v11[8] = -1; *((_BYTE *)v11 + 36) = 0; *((_WORD *)v11 + 19) = -1; v5 = (float *)v11; } *(_BYTE *)v5 = sub_653940(v4, *(_BYTE *)(a3 + 4)); v12 = sub_652070(v4); if ( sub_4DC110(v12, 11) ) *(_BYTE *)v5 = 1; v5[2] = (double)*(unsigned __int16 *)(a3 + 5) / 1000.0; v5[1] = flt_ACCFCC; *((_WORD *)v5 + 19) = *(unsigned __int8 *)(a3 + 8); v13 = *(unsigned __int8 *)(a3 + 7); v14 = sub_652200(v4); sub_64D230((_DWORD *)v5 + 4, 0x20000000, *(_WORD *)(a3 + 2), -131072, 0, 0, v14, v13); sub_64E6E0((_DWORD *)v4 + 21, v5); if ( v4 == dword_AD8EBC ) sub_4A8140(v15, 11); } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; //----- (004D3070) -------------------------------------------------------- int __stdcall sub_4D3070(int a1, unsigned __int16 *a2) { unsigned __int16 *v2; // esi __int16 *v3; // ebx _DWORD *v4; // eax char *v5; // ecx char v6; // dl Concurrency::details::HardwareAffinity *v7; // eax Concurrency::details::HardwareAffinity *v8; // edi int v9; // esi int v10; // eax _DWORD *v12; // [esp+8h] [ebp-4h] v2 = a2; a2 = (unsigned __int16 *)*a2; sub_4A3E20(&unk_B9E1CC, &v12, &a2); if ( v12 != dword_B9E1D0 ) { v3 = (__int16 *)v12[4]; if ( v3 ) { v4 = v3 + 20; *v4 = 0; v4[1] = 0; v4[2] = 0; v4[3] = 0; v4[4] = 0; v5 = (char *)(v2 + 1); do { v6 = *v5; v5[(char *)(v3 + 20) - (char *)(v2 + 1)] = *v5; ++v5; } while ( v6 ); v7 = sub_63AA40(byte_AD8A08, *v3); v8 = v7; if ( v7 ) { v9 = *(_DWORD *)v7; v10 = sub_63AA10(byte_AD8A08); (*(void (__thiscall **)(Concurrency::details::HardwareAffinity *, _DWORD, int))(v9 + 4))( v8, (unsigned __int16)*v3, v10); } } } return a1; } //----- (004D3110) -------------------------------------------------------- void __thiscall sub_4D3110(_DWORD *this, __int16 a2) { int v2; // esi char *v3; // ecx char *v4; // eax char *v5; // edi int v6; // ST04_4 char **v7; // eax int v8; // ecx char *v9; // eax int v10; // ST0C_4 char *v11; // eax char *v12; // eax int v13; // [esp+8h] [ebp-Ch] float v14; // [esp+Ch] [ebp-8h] _DWORD *v15; // [esp+10h] [ebp-4h] v2 = (int)(this + 645); v15 = this; v3 = (char *)this[645]; v4 = *(char **)v3; if ( *(char **)v3 == v3 ) { LABEL_4: v5 = v3; v14 = flt_ACCFCC; v6 = *((_DWORD *)v3 + 1); LOWORD(v13) = a2; v7 = sub_509130(v3, v6, (int)&v13); v8 = *(_DWORD *)(v2 + 4); if ( (unsigned int)(536870910 - v8) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v2 + 4) = v8 + 1; *((_DWORD *)v5 + 1) = v7; *(_DWORD *)v7[1] = v7; v9 = sub_664AB0(dword_AD8C90, a2); if ( v9 ) { v10 = (*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 84))(v9); v11 = (char *)sub_40C190(-471581899); v12 = sub_7549E0(v11, v10); sub_492090(v15, (int)v12); } } else { while ( *((_WORD *)v4 + 4) != a2 ) { v4 = *(char **)v4; if ( v4 == v3 ) goto LABEL_4; } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004D31D0) -------------------------------------------------------- char __stdcall sub_4D31D0(void *a1, int a2, int a3, int a4) { int i; // esi size_t v5; // eax int v6; // ebx void ***v7; // eax int v8; // esi int v9; // edi int v10; // eax int v11; // edx int v12; // esi int v13; // esi int v14; // edi int v15; // eax int v16; // ecx int v17; // esi int v18; // edi int v19; // eax int v20; // edx int v21; // esi int v22; // edi int v23; // eax int v24; // ecx int v25; // esi int v26; // edi int v27; // eax int v28; // edx int v29; // esi int v30; // edi int v31; // eax int v32; // ecx int v33; // ebx int v34; // edi int v35; // eax int v36; // edx int v37; // esi int v38; // edi int v39; // eax int v40; // edx void **v41; // ecx void *v42; // eax void **v43; // esi void **v45; // eax void *v46; // ecx void **v47; // esi int v48; // [esp+18h] [ebp-194h] void **v49; // [esp+18h] [ebp-194h] char v50; // [esp+1Ch] [ebp-190h] char v51; // [esp+1Dh] [ebp-18Fh] char v52[128]; // [esp+11Ch] [ebp-90h] int v53; // [esp+1A8h] [ebp-4h] v53 = 0; memset(v52, 0, 0x80u); v48 = strlen((const char *)a4); if ( v48 > 127 ) v48 = 127; for ( i = 0; ; i = v6 ) { v5 = (IsDBCSLeadByte(v52[i]) != 0) + 1; v6 = v5 + i; if ( (signed int)(v5 + i) > v48 ) break; memcpy(&v52[i], (const void *)(i + a4), v5); } v7 = (void ***)a1; v52[i] = 0; v49 = *(void ***)a1; if ( *(void **)a1 == a1 ) { LABEL_86: v41 = *v7; *v7 = (void **)v7; *((_DWORD *)a1 + 1) = a1; v42 = a1; if ( v41 != a1 ) { do { v43 = (void **)*v41; operator delete(v41); v42 = a1; v41 = v43; } while ( v43 != a1 ); } operator delete(v42); return 1; } while ( 1 ) { v50 = 0; memset(&v51, 0, 0xFFu); v8 = dword_ACB230; v9 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) ) { v11 = *(_DWORD *)(v8 + 196); v10 = *(_DWORD *)(v11 + 4 * v9) ? *(_DWORD *)(v11 + 4 * v9) : 0; } else { v10 = 0; } } else { v10 = 0; } if ( *(_DWORD *)(v10 + 110) == 10 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { v13 = dword_ACB230; v14 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v14) ) { if ( (unsigned __int16)v14 <= *(_WORD *)(v13 + 200) ) { v16 = *(_DWORD *)(v13 + 196); v15 = *(_DWORD *)(v16 + 4 * v14) ? *(_DWORD *)(v16 + 4 * v14) : 0; } else { v15 = 0; } } else { v15 = 0; } if ( *(_DWORD *)(v15 + 110) == 12 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { v17 = dword_ACB230; v18 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v18) ) { if ( (unsigned __int16)v18 <= *(_WORD *)(v17 + 200) ) { v20 = *(_DWORD *)(v17 + 196); v19 = *(_DWORD *)(v20 + 4 * v18) ? *(_DWORD *)(v20 + 4 * v18) : 0; } else { v19 = 0; } } else { v19 = 0; } if ( *(_DWORD *)(v19 + 110) == 7 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { v21 = dword_ACB230; v22 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v22) ) { if ( (unsigned __int16)v22 <= *(_WORD *)(v21 + 200) ) { v24 = *(_DWORD *)(v21 + 196); v23 = *(_DWORD *)(v24 + 4 * v22) ? *(_DWORD *)(v24 + 4 * v22) : 0; } else { v23 = 0; } } else { v23 = 0; } if ( *(_DWORD *)(v23 + 110) == 21 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { v25 = dword_ACB230; v26 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v26) ) { if ( (unsigned __int16)v26 <= *(_WORD *)(v25 + 200) ) { v28 = *(_DWORD *)(v25 + 196); v27 = *(_DWORD *)(v28 + 4 * v26) ? *(_DWORD *)(v28 + 4 * v26) : 0; } else { v27 = 0; } } else { v27 = 0; } if ( *(_DWORD *)(v27 + 110) == 1 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { v29 = dword_ACB230; v30 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v30) ) { if ( (unsigned __int16)v30 <= *(_WORD *)(v29 + 200) ) { v32 = *(_DWORD *)(v29 + 196); v31 = *(_DWORD *)(v32 + 4 * v30) ? *(_DWORD *)(v32 + 4 * v30) : 0; } else { v31 = 0; } } else { v31 = 0; } if ( *(_DWORD *)(v31 + 110) == 19 ) { v12 = *((unsigned __int8 *)v49 + 10); } else { if ( *(_DWORD *)(sub_49F760(*((unsigned __int16 *)v49 + 4)) + 110) != 6 && *(_DWORD *)(sub_49F760(*((unsigned __int16 *)v49 + 4)) + 110) != 23 && *(_DWORD *)(sub_49F760(*((unsigned __int16 *)v49 + 4)) + 110) != 15 && *(_DWORD *)(sub_49F760(*((unsigned __int16 *)v49 + 4)) + 110) != 16 && *(_DWORD *)(sub_49F760(*((unsigned __int16 *)v49 + 4)) + 110) != 14 ) { goto LABEL_76; } v12 = *((unsigned __int8 *)v49 + 18); } } } } } } if ( v12 ) { v33 = *((unsigned __int16 *)v49 + 4); v34 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v33) ) { if ( (unsigned __int16)v33 <= *(_WORD *)(v34 + 200) ) { v36 = *(_DWORD *)(v34 + 196); if ( *(_DWORD *)(v36 + 4 * v33) ) v35 = *(_DWORD *)(v36 + 4 * v33); else v35 = 0; } else { v35 = 0; } } else { v35 = 0; } sprintf(&v50, "<\t%s [+%d]\t>", v35 + 34, v12); goto LABEL_84; } LABEL_76: v37 = dword_ACB230; v38 = *((unsigned __int16 *)v49 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v38) ) { if ( (unsigned __int16)v38 <= *(_WORD *)(v37 + 200) ) { v40 = *(_DWORD *)(v37 + 196); v39 = *(_DWORD *)(v40 + 4 * v38) ? *(_DWORD *)(v40 + 4 * v38) : 0; } else { v39 = 0; } } else { v39 = 0; } sprintf(&v50, "<\t%s\t>", v39 + 34); LABEL_84: if ( !strstr(v52, &v50) ) break; sub_4B2900(v52, &v50); v7 = (void ***)a1; v49 = (void **)*v49; if ( v49 == a1 ) goto LABEL_86; } v45 = *(void ***)a1; *(_DWORD *)a1 = a1; *((_DWORD *)a1 + 1) = a1; v46 = a1; if ( v45 != a1 ) { do { v47 = (void **)*v45; operator delete(v45); v46 = a1; v45 = v47; } while ( v47 != a1 ); } operator delete(v46); return 0; } // ACB230: using guessed type int dword_ACB230; // 4D31D0: using guessed type char var_90[128]; //----- (004D36C0) -------------------------------------------------------- int __thiscall sub_4D36C0(void ***this, int a2, char a3) { __int16 *v3; // edi void ***v4; // ebx char *v5; // eax int v6; // esi int *v7; // eax _DWORD *v8; // eax int **v9; // ecx int v11; // [esp+Ch] [ebp-8h] v3 = (__int16 *)a3; v4 = this; v5 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); v6 = (int)v5; if ( dword_ADB4F8 ) { if ( !v5 ) goto LABEL_16; sub_6DBEB0(byte_ADB468, *((volatile LONG **)v5 + 175)); } if ( v6 ) { if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 32))(v6) && !sub_651680(v6) && !sub_650B20((_DWORD *)v6) && sub_6516C0((_BYTE *)v6) ) { v7 = (int *)sub_6AB1D0(&unk_B91250, *v3); if ( v7 ) sub_6ACDF0(&unk_B91250, v7); } if ( !*(_BYTE *)(v6 + 2510) ) { *(_DWORD *)&a3 = (unsigned __int16)*v3; v8 = sub_4DD530(&unk_AD8CA8, &a3); sub_4DD450(&unk_AD8CA8, (int)&v11, v8, 0); } if ( *(_BYTE *)(v6 + 1924) == 6 ) { v9 = *(int ***)(v6 + 2924); if ( v9 ) sub_744BC0(v9, 0, 0, 0); } } LABEL_16: sub_56BF70(v4[143], (unsigned __int16)*v3); sub_6A9BC0(&unk_B683E8, *v3); sub_56B500(v4[143], (unsigned __int16)*v3); return a2; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (004D39A0) -------------------------------------------------------- int __thiscall sub_4D39A0(_DWORD *this, int a2, unsigned __int16 *a3) { unsigned __int16 *v3; // ebx char *v4; // eax int v5; // esi int v6; // edi int *v7; // eax const CHAR *v8; // eax _DWORD *v9; // eax signed int v10; // eax char v11; // al unsigned int *v12; // edi int v13; // esi void *v14; // eax char *v15; // eax int v16; // ST18_4 char *v17; // eax char *v18; // eax int v20; // [esp+10h] [ebp-24h] char v21; // [esp+14h] [ebp-20h] char *v22; // [esp+18h] [ebp-1Ch] int v23; // [esp+1Ch] [ebp-18h] int v24; // [esp+20h] [ebp-14h] const char *v25; // [esp+20h] [ebp-14h] _DWORD *v26; // [esp+24h] [ebp-10h] signed int v27; // [esp+40h] [ebp+Ch] v26 = this; v3 = a3; v4 = sub_664AB0(dword_AD8C90, *a3); v5 = dword_ACE8D0; v6 = a3[1]; v22 = v4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v7 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v6); if ( *v7 ) v24 = *v7; else v24 = 0; } else { v24 = 0; } } else { v24 = 0; } if ( a3[1] == 4520 ) { v8 = sub_40A910(-1868262738); sub_492090(v26, (int)v8); } if ( v22 && v22 != dword_AD8EBC ) { sub_65B7B0((int)v22, 1); v9 = operator new(0x18u); if ( v9 ) { v9[4] = 0; v9[2] = 0; v9[3] = 0; v9[1] = &NiTList::`vftable'; v23 = (int)v9; } else { v23 = 0; } *(_WORD *)v23 = a3[1]; v10 = *(_DWORD *)(a3 + 7); v20 = *((unsigned __int16 *)dword_AD8EBC + 274); v27 = v10; if ( v10 < 0 ) { v27 = 0; v10 = 0; } if ( v10 & 0xFFFF0000 ) v27 = (unsigned __int16)v10; v11 = *((_BYTE *)v3 + 12); v12 = (unsigned int *)(v3 + 9); v13 = v27 | (*(_DWORD *)(v3 + 9) != 0 ? 0 : 2147483648) | ((v11 & 0x20) != 32 ? 0 : 0x8000000) | ((v11 & 0x10) != 16 ? 0 : 0x10000000) | ((v11 & 0x40 | 16 * (v11 & 8 | 16 * (~*((_BYTE *)v3 + 12) & 1 | 2 * (v3[6] & 4 | 4 * (v3[6] & 2))) | 3)) << 18); sub_4E2A50(v20, (int *)(v3 + 9)); v21 = 1; v25 = (const char *)(v24 + 2); if ( !strcmp(v25, "Revival01") ) v21 = 0; sub_64D230((_DWORD *)(v23 + 4), v13, v20, v3[11], *v12, v21, 0, -1); if ( *v12 ) { if ( v3[6] & 1 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)v22 + 32))() ) sub_4D3110(v26, *v3); } else { if ( v3[6] & 1 ) { if ( v27 > 0 && !dword_AD8EBC[2496] && !(*(unsigned __int8 (**)(void))(*(_DWORD *)v22 + 32))() ) { v14 = operator new(0x30u); if ( v14 ) sub_62F1A0(v14, (int)v26, *((unsigned __int16 *)dword_AD8EBC + 274), *v3); } } dword_AD8EBC[2496] = 1; if ( dword_AD8EBC[1924] == 3 && v13 >= 0 ) { v15 = sub_664AB0(dword_AD8C90, *v3); if ( v15 ) { v16 = (*(int (__thiscall **)(char *))(*(_DWORD *)v15 + 84))(v15); v17 = (char *)sub_40A910(1202084518); v18 = sub_7549E0(v17, v16); sub_492090(v26, (int)v18); } } } if ( strcmp(v25, "Revival01") ) sub_64D390((int)(v22 + 84), v23); } return a2; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D3D00) -------------------------------------------------------- int __userpurge sub_4D3D00@(int a1@, int a2, int a3) { int v3; // edi int v4; // ebx int v5; // ST1C_4 int v6; // esi int *v7; // eax int v8; // eax _DWORD *v9; // eax int v10; // esi int v11; // ebx int *v12; // eax int v13; // esi unsigned int *v14; // edi int v15; // ebx char *v16; // eax unsigned int v18; // [esp+8h] [ebp-14h] char *v19; // [esp+Ch] [ebp-10h] char v20; // [esp+10h] [ebp-Ch] _DWORD *v21; // [esp+14h] [ebp-8h] int v22; // [esp+18h] [ebp-4h] v3 = a3; v19 = sub_664AB0(dword_AD8C90, *(_WORD *)a3); if ( v19 ) { v4 = *(unsigned __int16 *)(a3 + 2); v5 = a1; v6 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v4, v5) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v4); if ( *v7 ) { v8 = *v7; if ( v8 ) { if ( *(_DWORD *)(v8 + 259) > 0u ) sub_650960((int)v19, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), 1); } } } } sub_65B7B0((int)v19, 1); v9 = operator new(0x18u); if ( v9 ) { v9[4] = 0; v9[2] = 0; v9[3] = 0; v9[1] = &NiTList::`vftable'; v21 = v9; } else { v21 = 0; } *(_WORD *)v21 = *(_WORD *)(a3 + 2); v10 = dword_ACE8D0; v11 = *(unsigned __int16 *)(a3 + 2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v11) ) { if ( (unsigned __int16)v11 <= *(_WORD *)(v10 + 200) ) { v12 = (int *)(*(_DWORD *)(v10 + 196) + 4 * v11); if ( *v12 ) v22 = *v12; else v22 = 0; } else { v22 = 0; } } else { v22 = 0; } v18 = 0; if ( *(_BYTE *)(a3 + 12) ) { v13 = a3 + 23; do { if ( *(_WORD *)(v13 - 10) != *((_WORD *)dword_AD8EBC + 274) ) { v14 = (unsigned int *)(v13 - 8); v20 = (*(_BYTE *)v13 >> 4) & 1; v15 = (unsigned int)sub_800000 | (*(_DWORD *)(v13 - 8) != 0 ? 0 : 2147483648) | ((*(_BYTE *)v13 & 8) != 8 ? 0 : 0x8000000) | ((*(_BYTE *)v13 & 4) != 4 ? 0 : 0x10000000) | ((*(_BYTE *)v13 & 2) != 2 ? 0 : 0x20000000) | ((~*(_BYTE *)v13 & 1) << 26); if ( !strcmp((const char *)(v22 + 2), "Revival01") ) v20 = 0; if ( sub_4E2A50(*(unsigned __int16 *)(v13 - 10), (int *)(v13 - 8)) ) { if ( v20 ) { sub_664AB0(dword_AD8C90, *(_WORD *)(v13 - 10)); v15 |= *(_DWORD *)(v13 - 4); } sub_64D230(v21 + 1, v15, *(_WORD *)(v13 - 10), *(unsigned __int16 *)(v13 + 1), *v14, v20, 0, -1); if ( !*v14 ) { v16 = sub_664AB0(dword_AD8C90, *(_WORD *)(v13 - 10)); if ( v16 ) v16[2496] = 1; } } v3 = a3; } v13 += 13; ++v18; } while ( v18 < *(unsigned __int8 *)(v3 + 12) ); } if ( !v21[4] ) { sub_438C80(v21 + 1); operator delete(v21); return a2; } if ( strcmp((const char *)(v22 + 2), "Revival01") ) sub_64D390((int)(v19 + 84), (int)v21); } return a2; } // 4D3D00: could not find valid save-restore pair for esi // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004D3FE0) -------------------------------------------------------- int __thiscall sub_4D3FE0(_DWORD *this, int a2, __int16 *a3) { _DWORD *v3; // eax _DWORD *v4; // edi void *v5; // eax int v6; // eax int v7; // eax bool v8; // zf void *v9; // eax void *v10; // ST08_4 const char *v11; // eax void *v12; // ST08_4 const char *v13; // eax void *v14; // eax void *v15; // ST08_4 const char *v16; // eax void *v17; // eax void *v18; // ST08_4 const char *v19; // eax _DWORD *v20; // eax _DWORD *v22; // [esp+10h] [ebp-150h] __int16 v23; // [esp+14h] [ebp-14Ch] char v24; // [esp+16h] [ebp-14Ah] void *v25; // [esp+34h] [ebp-12Ch] int v26; // [esp+44h] [ebp-11Ch] unsigned int v27; // [esp+48h] [ebp-118h] char v28; // [esp+50h] [ebp-110h] int v29; // [esp+15Ch] [ebp-4h] v22 = this; v3 = sub_6CD770(); v4 = v3; v5 = (void *)sub_74E810((_DWORD *)v3[1], (unsigned __int16)*a3); v26 = 0; LOBYTE(v25) = 0; v27 = 15; sub_4018E0(&v25, v5, strlen((const char *)v5)); v6 = (unsigned __int16)a3[1] - 2881; v29 = 0; if ( v6 ) { v7 = v6 - 4; if ( v7 ) { v8 = v7 == 1; v9 = v25; if ( v8 ) { if ( v27 < 0x10 ) v9 = &v25; v12 = v9; v13 = sub_40C190(-1762334265); sprintf(&v28, v13, v12); sub_492060(v22, (int)&v28); } else { if ( v27 < 0x10 ) v9 = &v25; v10 = v9; v11 = sub_40C190(-1762334265); sprintf(&v28, v11, v10); sub_492060(v22, (int)&v28); } } else { v14 = v25; if ( v27 < 0x10 ) v14 = &v25; v15 = v14; v16 = sub_40C190(-1762334265); sprintf(&v28, v16, v15); sub_492060(v22, (int)&v28); } } else { sub_74AE30(v4, a3); v17 = v25; if ( v27 < 0x10 ) v17 = &v25; v18 = v17; v19 = sub_40C190(-890099629); sprintf(&v28, v19, v18); sub_492060(v22, (int)&v28); byte_AB7288 = 1; v20 = sub_6CF210(); sub_6CEFA0(v20, (_DWORD *)(unsigned __int16)*a3); sub_4E2100((_DWORD ***)v22, *a3, 1); v23 = *a3; v24 = 20; sub_74A8B0(v4, &v23); } if ( v27 >= 0x10 ) operator delete(v25); return a2; } // AB7288: using guessed type char byte_AB7288; //----- (004D4230) -------------------------------------------------------- int __thiscall sub_4D4230(int this, int a2, int a3) { int v3; // ebx char *v4; // eax char *v5; // eax char *v6; // edi _DWORD **v7; // eax void *v8; // eax char *v9; // eax int v11; // eax _DWORD *v12; // eax _DWORD **v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax const void **v16; // ecx void *v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax char v22[4]; // [esp+10h] [ebp-2Ch] unsigned int v23; // [esp+24h] [ebp-18h] int v24; // [esp+38h] [ebp-4h] v3 = this; switch ( *(_DWORD *)(a3 + 2) ) { case 0: switch ( *(unsigned __int16 *)(a3 + 15) ) { case 0xC00u: v4 = (char *)sub_40C190(-1191907764); goto LABEL_18; case 0xC01u: v4 = (char *)sub_40C190(1820086166); goto LABEL_18; case 0xC03u: v4 = (char *)sub_40C190(1659279358); goto LABEL_18; case 0xC04u: v4 = (char *)sub_40C190(-857943483); goto LABEL_18; case 0xC05u: v4 = (char *)sub_40C190(86968147); goto LABEL_18; case 0xC06u: v4 = (char *)sub_40C190(-942351289); goto LABEL_18; case 0xC07u: v4 = (char *)sub_40C190(-1310217730); goto LABEL_18; case 0xC08u: v4 = (char *)sub_40C190(276315285); goto LABEL_18; case 0xC09u: v4 = (char *)sub_40C190(-1208968369); goto LABEL_18; case 0xC0Au: v4 = (char *)sub_40C190(387904071); goto LABEL_18; case 0xC0Bu: v4 = (char *)sub_40C190(271315267); goto LABEL_18; case 0xC0Cu: v4 = (char *)sub_40C190(-1226722804); goto LABEL_18; case 0xC0Du: v4 = (char *)sub_40C190(-1259626166); goto LABEL_18; case 0xC0Eu: v4 = (char *)sub_40C190(-757425067); goto LABEL_18; case 0xC0Fu: v5 = (char *)sub_40C190(327364250); v4 = sub_7549E0(v5, 40); LABEL_18: v6 = v4; if ( v4 ) { v7 = (_DWORD **)sub_6CD770(); v8 = (void *)sub_74E810(v7[1], *(unsigned __int16 *)a3); sub_4019E0(v22, v8); v9 = *(char **)v22; v24 = 0; if ( v23 < 0x10 ) v9 = v22; sub_4920B0(v3, v6, v9); v24 = -1; sub_636A10(v22); } break; default: goto LABEL_22; } goto LABEL_22; case 1: LABEL_22: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 980)); return a2; case 2: v11 = *(_DWORD *)(a3 + 11); if ( v11 ) { if ( v11 == 1 ) { sub_61A0F0(*(float **)(this + 980), *(_DWORD *)(a3 + 7), (void *)*(unsigned __int16 *)a3, *(_BYTE *)(a3 + 2)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 980)); } } else { sub_619E80( *(void **)(this + 980), *(unsigned __int16 *)(a3 + 15), *(_DWORD *)(a3 + 7), (void *)*(unsigned __int16 *)a3, *(_BYTE *)(a3 + 2), (void *)(*(_BYTE *)(a3 + 6) == 0)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 980)); } return a2; case 5: v12 = sub_6CD770(); sub_74A8F0(v12, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; return a2; case 6: v13 = (_DWORD **)sub_6CD770(); sub_74A950(v13, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; v14 = sub_6CF210(); sub_6CF740(v14, *(_WORD *)a3); sub_4E2100((_DWORD ***)v3, *(_WORD *)a3, 0); sub_6BA650(&dword_AB6520, 7); return a2; case 7: v15 = sub_6CD770(); sub_74AA50(v15, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; goto LABEL_31; case 8: v19 = sub_6CD770(); sub_74AAF0(v19, *(_WORD *)(a3 + 7), *(_BYTE *)(a3 + 9)); byte_AB7288 = 1; break; case 9: v20 = sub_6CD770(); sub_74AB50(v20, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; break; case 0xA: v17 = sub_6CD770(); sub_74B890((int)v17, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; v18 = sub_6CF210(); sub_6CEFA0(v18, (_DWORD *)*(unsigned __int16 *)a3); sub_6BA650(&dword_AB6520, 8); LABEL_31: v16 = *(const void ***)(v3 + 1052); if ( v16 ) sub_61D280(v16); break; case 0xC: v21 = sub_6CD770(); sub_74AC20(v21, *(_WORD *)(a3 + 7)); byte_AB7288 = 1; break; default: return a2; } return a2; } // AB7288: using guessed type char byte_AB7288; //----- (004D4620) -------------------------------------------------------- void __thiscall sub_4D4620(_DWORD *this, char *a2, char a3) { const CHAR *v3; // eax _DWORD *v4; // [esp+10h] [ebp-44h] void *v5; // [esp+14h] [ebp-40h] unsigned int v6; // [esp+24h] [ebp-30h] unsigned int v7; // [esp+28h] [ebp-2Ch] char v8; // [esp+30h] [ebp-24h] char v9[4]; // [esp+31h] [ebp-23h] int v10; // [esp+35h] [ebp-1Fh] int v11; // [esp+39h] [ebp-1Bh] int v12; // [esp+3Dh] [ebp-17h] int v13; // [esp+50h] [ebp-4h] v4 = this; v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, a2, strlen(a2)); v13 = 0; if ( v6 <= 0x10 ) { if ( sub_4515F0(a2) ) { if ( v7 >= 0x10 ) operator delete(v5); } else { v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, a2, 0x10u); v8 = a3; sub_6F3D10(&off_AB7F2C, 29, 172, &v8, 0x11u); if ( v7 >= 0x10 ) operator delete(v5); } } else { v3 = sub_40C190(-1984563513); sub_492060(v4, (int)v3); if ( v7 >= 0x10 ) operator delete(v5); } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004D4730) -------------------------------------------------------- int __thiscall sub_4D4730(_DWORD *this, int a2, unsigned __int8 *a3) { int v3; // edi _DWORD *v4; // esi unsigned int v5; // eax signed int v6; // ecx signed int v7; // eax float *v8; // eax float *v9; // eax int v10; // esi _DWORD *v11; // eax int v12; // eax int v13; // eax int v14; // eax char v16; // [esp+Ch] [ebp-1Ch] _DWORD *v17; // [esp+18h] [ebp-10h] int v18; // [esp+24h] [ebp-4h] v3 = (int)this; v17 = this; v4 = this + 1221; sub_4E6D30(this + 1221, 0xC5u); v5 = 0; do { *(_DWORD *)(v5 + *v4) = -1; v5 += 4; } while ( v5 < 0x314 ); v6 = 0; if ( *a3 ) { do { v7 = a3[v6 + 1]; if ( v7 < 197 ) { *(_DWORD *)(*v4 + 4 * v7) = v7; v3 = (int)v17; } ++v6; } while ( v6 < *a3 ); } *(_BYTE *)(v3 + 4904) = 1; v8 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v9 = (float *)operator new(0xB4u); v18 = 0; if ( v9 ) v8 = sub_4546A0(v9); else v8 = 0; v18 = -1; dword_ACCFE0 = (int)v8; } if ( *((_BYTE *)v8 + 4) == 1 ) sub_4AC050((_DWORD *)v3); v10 = 1; v11 = sub_439D70(byte_ADB468, &v16); v12 = sub_4316B0(v11); if ( v12 ) { v13 = *(unsigned __int8 *)(v12 + 58); if ( v13 ) { v14 = v13 - 3; if ( v14 ) { if ( v14 == 1 ) v10 = 192; } else { v10 = 190; } } else { v10 = 188; } } sub_4A8140(v3, v10); return a2; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (004D4860) -------------------------------------------------------- int __thiscall sub_4D4860(_DWORD ***this, int a2, int a3) { int v3; // eax char *v4; // edi const CHAR *v5; // eax int v6; // eax char *v7; // eax char *v8; // eax _DWORD ***v10; // [esp+Ch] [ebp-30h] void *v11; // [esp+10h] [ebp-2Ch] int v12; // [esp+20h] [ebp-1Ch] unsigned int v13; // [esp+24h] [ebp-18h] int v14; // [esp+38h] [ebp-4h] v10 = this; OutputDebugStringA("RCV :On_NC_SCENARIO_NPCCHAT_CMD\n"); v3 = sub_438BD0((const char *)a3); sub_44DD70(v3, 0, *(unsigned __int16 *)(a3 + 33)); v4 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 33)); if ( v4 ) { v5 = sub_4DCFD0((const char *)a3); if ( v5 ) { v6 = (*(int (__thiscall **)(char *, const CHAR *))(*(_DWORD *)v4 + 84))(v4, v5); v13 = 15; v12 = 0; LOBYTE(v11) = 0; v7 = sub_7549E0("[%s] : %s", v6); sub_4018E0(&v11, v7, strlen(v7)); v8 = (char *)v11; v14 = 0; if ( v13 < 0x10 ) v8 = (char *)&v11; sub_492820(v10, v8); if ( v13 >= 0x10 ) operator delete(v11); } } else { OutputDebugStringA("SCENARIO_NPCCHAT_CMD Error. There's no NpcHandle\n"); } return a2; } //----- (004D4990) -------------------------------------------------------- int __thiscall sub_4D4990(_DWORD *this, int a2, int a3) { int v3; // eax unsigned int v4; // ebx unsigned int v5; // esi _DWORD *v6; // eax _DWORD *v7; // edi bool v9; // zf CHAR *v10; // eax _DWORD **v11; // ecx const CHAR *v12; // eax _WORD *v13; // ecx _DWORD *v14; // [esp+10h] [ebp-3Ch] int v15; // [esp+14h] [ebp-38h] int v16; // [esp+1Ch] [ebp-30h] LPCSTR lpString; // [esp+20h] [ebp-2Ch] int v18; // [esp+30h] [ebp-1Ch] unsigned int v19; // [esp+34h] [ebp-18h] int v20; // [esp+48h] [ebp-4h] v14 = this; v15 = *(_DWORD *)(a3 + 2); v3 = *(_DWORD *)(dword_ACB380 + 56); v16 = 13504; if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { while ( 1 ) { v6 = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACB380 + 4), v5); v7 = v6; if ( v6 ) { if ( *v6 == v15 ) break; } if ( ++v5 >= v4 ) goto LABEL_8; } v19 = 15; v18 = 0; LOBYTE(lpString) = 0; v9 = *(_BYTE *)(a3 + 6) == 0; v20 = 0; if ( v9 ) v10 = (CHAR *)sub_4090F0(-2105840498); else v10 = (CHAR *)sub_4090F0(-2122617714); sub_4018E0(&lpString, v10, strlen(v10)); v11 = (_DWORD **)v14[245]; if ( v11 ) { sub_615820(v11); v12 = lpString; if ( v19 < 0x10 ) v12 = (const CHAR *)&lpString; sub_617920(v14[245], (int)(v7 + 1), v12, 0); sub_8F82A0(&unk_BA6B10, (_DWORD *)v14[245]); } v13 = (_WORD *)v14[1244]; if ( v13 ) { sub_443DA0(v13, *(_WORD *)a3); sub_8F82A0(&unk_BA6B10, (_DWORD *)v14[1244]); } v20 = -1; if ( v19 >= 0x10 ) operator delete((void *)lpString); } else { LABEL_8: v16 = 13505; } HIWORD(v16) = *(_WORD *)a3; sub_6F3D10(&off_AB7F2C, 53, 6, &v16, 4u); return a2; } // AB7F2C: using guessed type void **off_AB7F2C; // ACB380: using guessed type int dword_ACB380; //----- (004D4B50) -------------------------------------------------------- int __stdcall sub_4D4B50(int a1, unsigned __int16 *a2) { size_t v2; // ST04_4 void *v3; // eax void *v5; // [esp+4h] [ebp-2Ch] int v6; // [esp+14h] [ebp-1Ch] unsigned int v7; // [esp+18h] [ebp-18h] int v8; // [esp+2Ch] [ebp-4h] v7 = 15; v6 = 0; LOBYTE(v5) = 0; v2 = *a2; v8 = 0; sub_401D10((int)&v5, a2 + 1, v2); if ( v6 ) { v3 = v5; if ( v7 < 0x10 ) v3 = &v5; sub_6BA680(&dword_AB6520, (int)v3); } if ( v7 >= 0x10 ) operator delete(v5); return a1; } //----- (004D4C00) -------------------------------------------------------- int __thiscall sub_4D4C00(_DWORD *this, int a2, unsigned __int8 *a3) { _DWORD *v3; // esi size_t v4; // ST04_4 void *v5; // eax void *v7; // [esp+8h] [ebp-2Ch] int v8; // [esp+18h] [ebp-1Ch] unsigned int v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+30h] [ebp-4h] v3 = this; v9 = 15; v8 = 0; LOBYTE(v7) = 0; v4 = *a3; v10 = 0; sub_401D10((int)&v7, a3 + 1, v4); if ( v8 ) { v5 = v7; if ( v9 < 0x10 ) v5 = &v7; sub_492060(v3, (int)v5); } if ( v9 >= 0x10 ) operator delete(v7); return a2; } //----- (004D4CA0) -------------------------------------------------------- int __thiscall sub_4D4CA0(_DWORD *this, int a2, int a3) { unsigned __int16 v3; // si __int16 v4; // ax __int16 v5; // ax char *v6; // eax _DWORD *v7; // esi void *v9; // [esp-1Ch] [ebp-2Ch] int v10; // [esp-18h] [ebp-28h] int v11; // [esp-14h] [ebp-24h] int v12; // [esp-10h] [ebp-20h] int v13; // [esp-Ch] [ebp-1Ch] int v14; // [esp-8h] [ebp-18h] int v15; // [esp-4h] [ebp-14h] void **v16; // [esp+4h] [ebp-Ch] _DWORD *v17; // [esp+8h] [ebp-8h] char v18; // [esp+Fh] [ebp-1h] v17 = this; v16 = &v9; v14 = 15; v13 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, "PopUpDialogNPC_Raemi_LimitLv", 0x1Cu); v3 = sub_747F30(&unk_ACDC6C, v9, v10, v11, v12, v13, v14, v15); if ( sub_680890((unsigned __int8 *)byte_AD9238) > (unsigned int)v3 ) goto LABEL_9; v16 = &v9; v14 = 15; v13 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, "PopUpDialogNPC_Raemi", 0x14u); v4 = sub_747F30(&unk_ACDC6C, v9, v10, v11, v12, v13, v14, v15); v5 = sub_664710(dword_AD8C90, v4); if ( v5 == -1 ) goto LABEL_9; v6 = sub_664AB0(dword_AD8C90, v5); if ( v6 ) { v7 = v17; sub_4B75A0(v17, *((_WORD *)v6 + 274)); } else { LABEL_9: v7 = v17; } v15 = 2; LOWORD(v17) = -16368; sub_905F90(v7[584], &v17, 2u); sub_906000(v7[584], &v18, 1u); return a2; } //----- (004D4D90) -------------------------------------------------------- int __stdcall sub_4D4D90(int a1, unsigned __int16 *a2) { __int16 v2; // bx int v3; // edi _DWORD *v4; // esi _DWORD *v5; // eax char v7[2]; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v2 = *a2; v3 = *(_DWORD *)(a2 + 1); a2 = (unsigned __int16 *)*a2; v4 = sub_6D14F0(); sub_4A3E20(v4, (int **)&v8, &a2); if ( v8 != v4[1] ) sub_6CDBF0(v4, (int *)&a2, v8); *(_WORD *)v7 = v2; v8 = v3; v5 = sub_67FF90(v4, v7); sub_6E19E0(v4, (int)v7, v5, 0); return a1; } //----- (004D4E00) -------------------------------------------------------- void __thiscall sub_4D4E00(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi _DWORD *v3; // ecx DNameNode *v4; // eax int v5; // eax int v6; // ebx _DWORD *v7; // ecx char *v8; // esi void ***v9; // eax void ***v10; // esi int v11; // eax unsigned int v12; // ecx _DWORD *v13; // ecx int v14; // eax int v15; // eax const CHAR *v16; // eax int v17; // eax v2 = this; v3 = (_DWORD *)dword_ACD1F8; dword_ACEC24 = 0; if ( !dword_ACD1F8 ) { v4 = (DNameNode *)operator new(8u); if ( v4 ) v5 = DNameNode::DNameNode(v4); else v5 = 0; v3 = (_DWORD *)v5; dword_ACD1F8 = v5; } sub_46EE40(v3, 1); v6 = a2; if ( a2 < 0xC0 ) { v7 = *(_DWORD **)(v2[179] + 4 * a2 + 348); if ( v7 ) { v8 = (char *)sub_5D5470(v7); a2 = (unsigned int)v8; if ( v8 ) { if ( !dword_ACEABC ) { v9 = (void ***)operator new(0x5Cu); v10 = v9; if ( v9 ) { sub_6C2E00(v9, 0); *v10 = &ItemUseTask::`vftable'; v10[2] = &ItemUseTask::`vftable'; } else { v10 = 0; } dword_ACEABC = (int)v10; if ( !v10 ) return; v8 = (char *)a2; } v11 = v2[179]; v12 = *(_DWORD *)(v11 + 1500); if ( v12 < 0xC0 ) { v13 = *(_DWORD **)(v11 + 4 * v12 + 348); if ( v13 ) { v14 = sub_5D5470(v13); if ( v14 ) { v15 = *(_DWORD *)(v14 + 112); if ( v15 ) { if ( *(_DWORD *)(v15 + 374) == 6 ) { if ( sub_6869F0(v8) == 1 ) { v17 = v2[179]; BYTE1(a2) = v6; LOBYTE(a2) = *(_BYTE *)(v17 + 1500); sub_6F3D10(&off_AB7F2C, 12, 72, &a2, 2u); sub_533940((_DWORD *)v2[179], v6); dword_ACEC24 = 8; return; } v16 = sub_40A910(-666297026); } else { v16 = sub_40A910(61231997); } sub_492060(v2, (int)v16); } } } } } } } } // 9BC4D4: using guessed type void *ItemUseTask::`vftable'; // 9BC4F0: using guessed type void *ItemUseTask::`vftable'; // AB7F2C: using guessed type void **off_AB7F2C; // ACD1F8: using guessed type int dword_ACD1F8; // ACEABC: using guessed type int dword_ACEABC; // ACEC24: using guessed type int dword_ACEC24; //----- (004D4FD0) -------------------------------------------------------- int __thiscall sub_4D4FD0(_WORD **this, int a2, int a3) { _WORD **v3; // edi const CHAR *v4; // eax int result; // eax float v6; // ST0C_4 float v7; // ST08_4 int v8; // esi float *v9; // ebx float *v10; // edi float *v11; // eax float *v12; // edi float *v13; // esi float *v14; // eax int v15; // edi char *v16; // eax volatile LONG *v17; // esi int v18; // eax int v19; // eax int v20; // [esp+18h] [ebp-20h] int v21; // [esp+1Ch] [ebp-1Ch] int v22; // [esp+20h] [ebp-18h] int v23; // [esp+24h] [ebp-14h] char v24[4]; // [esp+2Ch] [ebp-Ch] float *v25; // [esp+30h] [ebp-8h] _DWORD **v26; // [esp+34h] [ebp-4h] v3 = this; v26 = (_DWORD **)this; if ( *(_WORD *)a3 == 12744 ) { v6 = (double)*(unsigned int *)(a3 + 8); v7 = (double)*(unsigned int *)(a3 + 4); sub_69AD10((float *)byte_ADB468, v7, v6, (int)&v20); v8 = *(unsigned __int16 *)(a3 + 2); v9 = sub_6AE000(&unk_B91250, "MarketSearchTarget1", v8); v10 = sub_6AE000(&unk_B91250, "MarketSearchTarget2", v8); v11 = sub_6AE000(&unk_B91250, "MarketSearchTarget3", v8); if ( v10 ) { *((_BYTE *)v10 + 140) = 1; *((_DWORD *)v10 + 36) = v11; *(_DWORD *)v24 = 0; v25 = v10; sub_4DDBF0(&unk_B9129C, (int)&v23, v24); } if ( v9 ) { *((_DWORD *)v9 + 36) = v10; sub_6AAD40((int)v9); } v12 = sub_6AF040(&unk_B91250, "MarketSearchMe1", v20, v21, v22, (int)dword_AD8EBC); v13 = sub_6AF040(&unk_B91250, "MarketSearchMe2", v20, v21, v22, (int)dword_AD8EBC); v14 = sub_6AF040(&unk_B91250, "MarketSearchMe3", v20, v21, v22, (int)dword_AD8EBC); if ( v13 ) { *((_DWORD *)v13 + 36) = v14; *((_BYTE *)v13 + 140) = 1; *(_DWORD *)v24 = 0; v25 = v13; sub_4DDBF0(&unk_B9129C, (int)&v23, v24); } if ( v12 ) { *((_DWORD *)v12 + 36) = v13; sub_6AAD40((int)v12); } v15 = (int)v26; sub_8F86A0(&unk_BA6B10, v26[1276]); v16 = (char *)sub_4090F0(-2119260219); v17 = sub_462CA0(7, v16); v18 = *(_DWORD *)(v15 + 5104); if ( v18 ) v19 = v18 + 232; else v19 = 0; (**((void (__thiscall ***)(int, int))v17 + 58))((int)(v17 + 58), v19); (*(void (__thiscall **)(volatile LONG *, int, int, _DWORD, _DWORD))(*v17 + 236))( v17, xRight, dword_AC2F78, 0.5, 0.64999998); sub_55F1C0(*(_DWORD **)(v15 + 5104), (int)v17); result = a2; } else { v4 = sub_4090F0(-1764381446); sub_492060(v3, (int)v4); sub_55EF00(v3[1276], 0xFFFF); result = a2; } return result; } //----- (004D5230) -------------------------------------------------------- int __thiscall sub_4D5230(_DWORD *this, int a2, _BYTE *a3) { bool v3; // zf int v4; // edi int *v5; // eax int v6; // esi unsigned __int64 v7; // ST0C_8 void *v8; // esi void *v9; // eax void *v10; // eax const char *v11; // eax int v12; // ecx void *v13; // ecx void *v14; // eax char v16; // [esp+10h] [ebp-ACh] _DWORD *v17; // [esp+20h] [ebp-9Ch] char v18; // [esp+24h] [ebp-98h] void *v19; // [esp+28h] [ebp-94h] int v20; // [esp+30h] [ebp-8Ch] int v21; // [esp+34h] [ebp-88h] int v22; // [esp+38h] [ebp-84h] unsigned int v23; // [esp+3Ch] [ebp-80h] int v24; // [esp+40h] [ebp-7Ch] void *v25; // [esp+44h] [ebp-78h] int v26; // [esp+54h] [ebp-68h] unsigned int v27; // [esp+58h] [ebp-64h] void *v28; // [esp+60h] [ebp-5Ch] int v29; // [esp+70h] [ebp-4Ch] unsigned int v30; // [esp+74h] [ebp-48h] char *v31; // [esp+7Ch] [ebp-40h] int v32; // [esp+8Ch] [ebp-30h] unsigned int v33; // [esp+90h] [ebp-2Ch] char v34[4]; // [esp+98h] [ebp-24h] int v35; // [esp+9Ch] [ebp-20h] int v36; // [esp+A0h] [ebp-1Ch] unsigned int v37; // [esp+A4h] [ebp-18h] int v38; // [esp+A8h] [ebp-14h] int v39; // [esp+B8h] [ebp-4h] v3 = *a3 == 11; v4 = (int)this; v17 = this; if ( v3 ) { v30 = 15; v29 = 0; LOBYTE(v28) = 0; sub_4018E0(&v28, a3 + 2, strlen(a3 + 2)); v39 = 0; v18 = 37; v6 = sub_417B90((unsigned __int8 *)&v28, (unsigned __int8 *)&v18, 0x100000000ui64); if ( v6 != -1 ) { v18 = 37; do { sub_4DD5A0(&v28, v6, 1u, 2u, 37); HIDWORD(v7) = 1; LODWORD(v7) = v6 + 2; v6 = sub_417B90((unsigned __int8 *)&v28, (unsigned __int8 *)&v18, v7); } while ( v6 != -1 ); } v18 = 58; v8 = (void *)sub_417B90((unsigned __int8 *)&v28, (unsigned __int8 *)&v18, 0x100000000ui64); v33 = 15; v32 = 0; LOBYTE(v31) = 0; v27 = 15; v26 = 0; LOBYTE(v25) = 0; LOBYTE(v39) = 2; if ( v8 != (void *)-1 ) { v9 = (void *)sub_426900((const void **)&v28, (int)&v19, 0, v8); LOBYTE(v39) = 3; sub_406450(&v31, v9); LOBYTE(v39) = 2; if ( v23 >= 0x10 ) operator delete(v19); v10 = (void *)sub_426900((const void **)&v28, (int)&v19, (unsigned int)v8 + 1, (void *)0xFFFFFFFF); LOBYTE(v39) = 4; sub_406450(&v25, v10); LOBYTE(v39) = 2; if ( v23 >= 0x10 ) operator delete(v19); v11 = v31; if ( v33 < 0x10 ) v11 = (const char *)&v31; v38 = 0; v37 = 0; v36 = 0; v35 = 0; *(_DWORD *)v34 = 0; strncpy(v34, v11, 0x14u); v21 = v35; v24 = v38; v12 = v17[228]; v22 = v36; v20 = *(_DWORD *)v34; v23 = v37; if ( sub_74DA80((_DWORD *)(v12 + 360), &v20) && !sub_4DC520((_DWORD *)v17[228], v34[0], v35, v36, v37, v38) ) { sub_636A10(&v25); sub_636A10(&v31); sub_636A10(&v28); return a2; } v13 = v25; if ( v27 < 0x10 ) v13 = &v25; v14 = v31; if ( v33 < 0x10 ) v14 = &v31; sub_4E1E90((_DWORD ***)v17, (int)v14, (int)v13); if ( v27 >= 0x10 ) operator delete(v25); } v27 = 15; v26 = 0; LOBYTE(v25) = 0; if ( v33 >= 0x10 ) operator delete(v31); v33 = 15; v32 = 0; LOBYTE(v31) = 0; if ( v30 >= 0x10 ) operator delete(v28); } else { v5 = (int *)sub_4B1B10((float *)&v16, 0x32u); sub_492030(v4, v4, (int)(a3 + 2), (int)(a3 + 2), *v5, v5[1], v5[2], v5[3]); } return a2; } //----- (004D5530) -------------------------------------------------------- int __thiscall sub_4D5530(_DWORD *this, int a2, _BYTE *a3) { _DWORD *v3; // esi _DWORD **v4; // ecx char v5; // bl void **v7; // [esp-Ch] [ebp-68h] void *v8; // [esp+14h] [ebp-48h] int v9; // [esp+24h] [ebp-38h] unsigned int v10; // [esp+28h] [ebp-34h] void *v11; // [esp+30h] [ebp-2Ch] int v12; // [esp+40h] [ebp-1Ch] unsigned int v13; // [esp+44h] [ebp-18h] int v14; // [esp+58h] [ebp-4h] v3 = this; if ( dword_ADB4FC != 2 ) { v4 = (_DWORD **)this[272]; if ( *a3 ) sub_4B12E0(v4, 0); else sub_4B12E0(v4, "........"); if ( *a3 ) { v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4018E0(&v11, &unk_9BBC9F, 0); v14 = 1; v5 = 2; v7 = &v11; } else { v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4018E0(&v8, "........", 8u); v14 = 0; v5 = 1; v7 = &v8; } sub_4017F0((const void **)(v3[271] + 400), (const void **)v7, 0, (void *)0xFFFFFFFF); if ( v5 & 2 ) { v5 &= 0xFDu; if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; } if ( v5 & 1 && v10 >= 0x10 ) operator delete(v8); } return a2; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (004D5670) -------------------------------------------------------- int __thiscall sub_4D5670(_DWORD *this, int a2, int a3) { signed int v3; // eax _DWORD *v4; // esi int v5; // eax unsigned int v6; // ecx _DWORD *v7; // edx __time32_t v8; // esi int v9; // edi int v10; // esi int v11; // eax __int16 v12; // di unsigned int v13; // ebx unsigned int v14; // esi _WORD *v15; // eax int v16; // ST0C_4 char *v17; // eax void *v18; // eax _DWORD *v19; // ecx void *v21; // [esp+10h] [ebp-50h] int v22; // [esp+14h] [ebp-4Ch] float v23; // [esp+20h] [ebp-40h] _DWORD *v24; // [esp+24h] [ebp-3Ch] char v25; // [esp+2Bh] [ebp-35h] struct tm Tm; // [esp+2Ch] [ebp-34h] int v27; // [esp+5Ch] [ebp-4h] v3 = *(unsigned __int16 *)(a3 + 8); v4 = this; v24 = this; if ( (_WORD)v3 != 11152 ) { v18 = (void *)sub_41A850(v3); v19 = v4; LABEL_24: sub_492060(v19, (int)v18); return a2; } v5 = this[1227]; if ( v5 ) { v25 = 0; sub_4DDD20(&v21, (_DWORD *)(v5 + 388)); v27 = 0; v6 = 0; if ( (v22 - (signed int)v21) / 20 ) { v7 = (char *)v21 + 16; while ( *(v7 - 3) != *(unsigned __int16 *)(a3 + 1) || *v7 ) { ++v6; v7 += 5; if ( v6 >= (v22 - (signed int)v21) / 20 ) goto LABEL_10; } v25 = 1; } LABEL_10: qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v8 = _mktime32(&Tm); v23 = flt_ACCFCC - flt_ACCFD8; v9 = (int)v24; v10 = (signed int)v23 + v8; sub_503EC0( (_DWORD *)v24[1227], *(unsigned __int16 *)(a3 + 1), *(unsigned __int8 *)(a3 + 3), *(_DWORD *)(a3 + 4), v10); sub_506E40(*(_DWORD **)(v9 + 4908), v10, *(unsigned __int16 *)(a3 + 1)); sub_5084A0(*(int **)(v9 + 4908), *(unsigned __int16 *)(a3 + 1)); if ( v25 ) sub_4AD610((_DWORD *)v9, *(_WORD *)(a3 + 1)); v27 = -1; if ( v21 ) operator delete(v21); } v11 = *(_DWORD *)(dword_ACD9EC + 56); v12 = *(_WORD *)(a3 + 1); if ( v11 ) v13 = *(_DWORD *)(v11 + 40); else v13 = 0; v14 = 0; if ( v13 ) { while ( 1 ) { v15 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9EC + 4), v14); if ( v15 ) { if ( *v15 == v12 ) break; } if ( ++v14 >= v13 ) return a2; } v16 = (int)(v15 + 17); v17 = (char *)sub_40A910(2028329433); v18 = sub_7549E0(v17, v16); v19 = v24; goto LABEL_24; } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACCFD8: using guessed type float flt_ACCFD8; // ACD9EC: using guessed type int dword_ACD9EC; //----- (004D5850) -------------------------------------------------------- int __thiscall sub_4D5850(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi const CHAR *v4; // eax int result; // eax int v6; // ebx int v7; // edi int *v8; // eax int v9; // edi unsigned __int16 *v10; // eax _DWORD *v11; // eax char *v12; // eax char *v13; // eax int v14; // [esp-Ch] [ebp-10h] v3 = this; switch ( *(unsigned __int16 *)(a3 + 2) ) { case 0x2C11u: v4 = sub_40A910(373771838); goto LABEL_3; case 0x2C12u: v4 = sub_40A910(-1242440745); goto LABEL_3; case 0x2C13u: v4 = sub_40A910(1905386452); goto LABEL_3; case 0x2C14u: v4 = sub_40A910(68830594); goto LABEL_3; case 0x2C15u: v4 = sub_40A910(-74412445); goto LABEL_3; case 0x2C16u: v4 = sub_40A910(1322308560); LABEL_3: sub_492060(v3, (int)v4); result = a2; break; default: v6 = *(unsigned __int8 *)(a3 + 1); v7 = dword_ACDA68; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) ) { v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * v6); if ( *v8 ) { v9 = *v8; if ( *v8 ) { v10 = (unsigned __int16 *)sub_40C8D0((void *)(v9 + 6)); if ( v10 ) { v11 = sub_6899D0(*v10); if ( v11 ) { sub_4EE660(v3[1237], a3, v9, *(unsigned __int8 *)(a3 + 1), (int)v11); sub_4ED040((_BYTE *)v3[1238], *(unsigned __int8 *)(a3 + 1)); if ( *(_DWORD *)(v9 + 1) ) { sub_4EBAF0((_DWORD *)v3[1238]); v14 = *(unsigned __int8 *)(v9 + 5); v12 = (char *)sub_40A910(-1245442766); } else { sub_4A5D20((_DWORD **)v3); v14 = *(unsigned __int8 *)(v9 + 5); v12 = (char *)sub_40A910(-1341377258); } v13 = sub_7549E0(v12, v14); sub_492120((_DWORD ***)v3, (int)v13); } } } } } } result = a2; break; } return result; } // ACDA68: using guessed type int dword_ACDA68; //----- (004D59B0) -------------------------------------------------------- int __stdcall sub_4D59B0(int a1, const char *a2) { unsigned __int8 *v2; // ebx char *v3; // esi char *v4; // edi int *v5; // ebx int *v6; // esi int *v7; // edx int *v8; // ecx char *v9; // eax char *v10; // eax void *v11; // eax signed int v13; // [esp+10h] [ebp-FCh] int v14; // [esp+14h] [ebp-F8h] unsigned int v15; // [esp+18h] [ebp-F4h] void *v16; // [esp+1Ch] [ebp-F0h] unsigned int v17; // [esp+30h] [ebp-DCh] void *v18; // [esp+38h] [ebp-D4h] int v19; // [esp+48h] [ebp-C4h] unsigned int v20; // [esp+4Ch] [ebp-C0h] void *v21; // [esp+54h] [ebp-B8h] unsigned int v22; // [esp+64h] [ebp-A8h] unsigned int v23; // [esp+68h] [ebp-A4h] char v24[4]; // [esp+70h] [ebp-9Ch] unsigned int v25; // [esp+84h] [ebp-88h] int *v26; // [esp+8Ch] [ebp-80h] unsigned int v27; // [esp+A0h] [ebp-6Ch] int *v28; // [esp+A8h] [ebp-64h] unsigned int v29; // [esp+BCh] [ebp-50h] int *v30; // [esp+C4h] [ebp-48h] unsigned int v31; // [esp+D8h] [ebp-34h] int *v32; // [esp+E0h] [ebp-2Ch] unsigned int v33; // [esp+F4h] [ebp-18h] int v34; // [esp+108h] [ebp-4h] v14 = sub_438BD0(a2); v20 = 15; v19 = 0; LOBYTE(v18) = 0; v23 = 15; v34 = 0; v22 = 0; LOBYTE(v21) = 0; sub_4018E0(&v21, (void *)(a2 + 37), strlen(a2 + 37)); LOBYTE(v34) = 1; if ( v22 > 0 ) { `eh vector constructor iterator'(v24, 0x1Cu, 5, sub_401C00, sub_636A10); v15 = 0; v2 = (unsigned __int8 *)(a2 + 32); LOBYTE(v34) = 2; v3 = v24; v13 = 5; do { v4 = (char *)sub_426900((const void **)&v21, (int)&v16, v15, (void *)*v2); if ( v3 != v4 ) { if ( *((_DWORD *)v3 + 5) >= 0x10u ) operator delete(*(void **)v3); *((_DWORD *)v3 + 5) = 15; *((_DWORD *)v3 + 4) = 0; *v3 = 0; if ( *((_DWORD *)v4 + 5) >= 0x10u ) { *(_DWORD *)v3 = *(_DWORD *)v4; *(_DWORD *)v4 = 0; } else { memcpy_0(v3, v4, *((_DWORD *)v4 + 4) + 1); } *((_DWORD *)v3 + 4) = *((_DWORD *)v4 + 4); *((_DWORD *)v3 + 5) = *((_DWORD *)v4 + 5); *((_DWORD *)v4 + 4) = 0; *((_DWORD *)v4 + 5) = 0; } LOBYTE(v34) = 2; if ( v17 >= 0x10 ) operator delete(v16); v15 += *v2; v3 += 28; ++v2; --v13; } while ( v13 ); v5 = v32; if ( v33 < 0x10 ) v5 = (int *)&v32; v6 = v30; if ( v31 < 0x10 ) v6 = (int *)&v30; v7 = v28; if ( v29 < 0x10 ) v7 = (int *)&v28; v8 = v26; if ( v27 < 0x10 ) v8 = (int *)&v26; v9 = *(char **)v24; if ( v25 < 0x10 ) v9 = v24; v10 = sub_7549E0((char *)(v14 + 34), v9, v8, v7, v6, v5); sub_4018E0(&v18, v10, strlen(v10)); LOBYTE(v34) = 1; `eh vector destructor iterator'(v24, 0x1Cu, 5, sub_636A10); } v11 = v18; if ( v20 < 0x10 ) v11 = &v18; sub_44DD70(v14, v11, 0xFFFF); if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v20 >= 0x10 ) operator delete(v18); return a1; } //----- (004D5C60) -------------------------------------------------------- int __stdcall sub_4D5C60(int a1, unsigned __int16 *a2) { unsigned __int16 *v2; // esi unsigned __int8 *v3; // ebx char *v4; // esi char *v5; // edi int *v6; // edi int *v7; // esi int *v8; // edx int *v9; // ecx char *v10; // eax char *v11; // eax void *v12; // eax int v14; // [esp+14h] [ebp-FCh] signed int v15; // [esp+18h] [ebp-F8h] unsigned int v16; // [esp+1Ch] [ebp-F4h] void *v17; // [esp+20h] [ebp-F0h] unsigned int v18; // [esp+34h] [ebp-DCh] void *v19; // [esp+3Ch] [ebp-D4h] int v20; // [esp+4Ch] [ebp-C4h] unsigned int v21; // [esp+50h] [ebp-C0h] void *v22; // [esp+58h] [ebp-B8h] unsigned int v23; // [esp+68h] [ebp-A8h] unsigned int v24; // [esp+6Ch] [ebp-A4h] char v25[4]; // [esp+74h] [ebp-9Ch] unsigned int v26; // [esp+88h] [ebp-88h] int *v27; // [esp+90h] [ebp-80h] unsigned int v28; // [esp+A4h] [ebp-6Ch] int *v29; // [esp+ACh] [ebp-64h] unsigned int v30; // [esp+C0h] [ebp-50h] int *v31; // [esp+C8h] [ebp-48h] unsigned int v32; // [esp+DCh] [ebp-34h] int *v33; // [esp+E4h] [ebp-2Ch] unsigned int v34; // [esp+F8h] [ebp-18h] int v35; // [esp+10Ch] [ebp-4h] v2 = a2; v14 = sub_438BD0((const char *)a2 + 2); if ( v14 ) { v21 = 15; v20 = 0; LOBYTE(v19) = 0; v24 = 15; v35 = 0; v23 = 0; LOBYTE(v22) = 0; sub_4018E0(&v22, (char *)a2 + 39, strlen((const char *)a2 + 39)); LOBYTE(v35) = 1; if ( v23 > 0 ) { `eh vector constructor iterator'(v25, 0x1Cu, 5, sub_401C00, sub_636A10); v16 = 0; v3 = (unsigned __int8 *)(a2 + 17); LOBYTE(v35) = 2; v4 = v25; v15 = 5; do { v5 = (char *)sub_426900((const void **)&v22, (int)&v17, v16, (void *)*v3); if ( v4 != v5 ) { if ( *((_DWORD *)v4 + 5) >= 0x10u ) operator delete(*(void **)v4); *((_DWORD *)v4 + 5) = 15; *((_DWORD *)v4 + 4) = 0; *v4 = 0; if ( *((_DWORD *)v5 + 5) >= 0x10u ) { *(_DWORD *)v4 = *(_DWORD *)v5; *(_DWORD *)v5 = 0; } else { memcpy_0(v4, v5, *((_DWORD *)v5 + 4) + 1); } *((_DWORD *)v4 + 4) = *((_DWORD *)v5 + 4); *((_DWORD *)v4 + 5) = *((_DWORD *)v5 + 5); *((_DWORD *)v5 + 4) = 0; *((_DWORD *)v5 + 5) = 0; } LOBYTE(v35) = 2; if ( v18 >= 0x10 ) operator delete(v17); v16 += *v3; v4 += 28; ++v3; --v15; } while ( v15 ); v6 = v33; if ( v34 < 0x10 ) v6 = (int *)&v33; v7 = v31; if ( v32 < 0x10 ) v7 = (int *)&v31; v8 = v29; if ( v30 < 0x10 ) v8 = (int *)&v29; v9 = v27; if ( v28 < 0x10 ) v9 = (int *)&v27; v10 = *(char **)v25; if ( v26 < 0x10 ) v10 = v25; v11 = sub_7549E0((char *)(v14 + 34), v10, v9, v8, v7, v6); sub_4018E0(&v19, v11, strlen(v11)); LOBYTE(v35) = 1; `eh vector destructor iterator'(v25, 0x1Cu, 5, sub_636A10); v2 = a2; } v12 = v19; if ( v21 < 0x10 ) v12 = &v19; sub_44DD70(v14, v12, *v2); if ( v24 >= 0x10 ) operator delete(v22); v24 = 15; v23 = 0; LOBYTE(v22) = 0; if ( v21 >= 0x10 ) operator delete(v19); } return a1; } //----- (004D5F20) -------------------------------------------------------- int __stdcall sub_4D5F20(int a1, unsigned int *a2) { float v2; // ST0C_4 float v3; // ST08_4 int *v4; // eax _DWORD *v5; // eax float *v7; // edi float *v8; // esi float *v9; // eax int v10; // [esp+14h] [ebp-1Ch] int v11; // [esp+18h] [ebp-18h] int v12; // [esp+1Ch] [ebp-14h] int v13; // [esp+20h] [ebp-10h] char v14[4]; // [esp+28h] [ebp-8h] int v15; // [esp+2Ch] [ebp-4h] v2 = (double)a2[1]; v3 = (double)*a2; sub_69AD10((float *)byte_ADB468, v3, v2, (int)&v10); a2 = (unsigned int *)1; v4 = *sub_4DD710(&unk_B9129C, (int **)&v15, &a2); if ( v4 == (int *)dword_B912A0 ) { v7 = sub_6AF040(&unk_B91250, "MarketSearchMe1", v10, v11, v12, (int)dword_AD8EBC); v8 = sub_6AF040(&unk_B91250, "MarketSearchMe2", v10, v11, v12, (int)dword_AD8EBC); v9 = sub_6AF040(&unk_B91250, "MarketSearchMe3", v10, v11, v12, (int)dword_AD8EBC); if ( v8 ) { *((_DWORD *)v8 + 36) = v9; *((_BYTE *)v8 + 140) = 1; *(_DWORD *)v14 = 1; v15 = (int)v8; sub_4DDBF0(&unk_B9129C, (int)&v13, v14); } if ( v7 ) { *((_DWORD *)v7 + 36) = v8; sub_6AAD40((int)v7); } } else { v5 = (_DWORD *)v4[4]; if ( v5 ) { v5[138] = v10; v5[139] = v11; v5[140] = v12; return a1; } } return a1; } // B912A0: using guessed type int dword_B912A0; //----- (004D6090) -------------------------------------------------------- void __thiscall sub_4D6090(_DWORD *this, const char *a2) { int v2; // esi char v3; // al int v4; // ecx int i; // ebx BYTE v6; // cl const void *v7; // esi size_t v8; // eax int v9; // edi int *v10; // eax int *v11; // edi int v12; // esi int **v13; // ecx int **v14; // eax int v15; // ecx int *v16; // eax int *v17; // edx int v18; // ecx int v19; // edi int *v20; // ebx int *v21; // eax int *v22; // esi void *v23; // [esp-10h] [ebp-4F4h] int v24; // [esp-Ch] [ebp-4F0h] char *v25; // [esp-8h] [ebp-4ECh] int v26; // [esp-4h] [ebp-4E8h] char v27; // [esp+10h] [ebp-4D4h] void **v28; // [esp+1Ch] [ebp-4C8h] char *v29; // [esp+28h] [ebp-4BCh] _DWORD *v30; // [esp+2Ch] [ebp-4B8h] int *v31; // [esp+30h] [ebp-4B4h] int v32; // [esp+34h] [ebp-4B0h] __int16 v33; // [esp+3Ch] [ebp-4A8h] int v34; // [esp+40h] [ebp-4A4h] int v35; // [esp+44h] [ebp-4A0h] char v36; // [esp+48h] [ebp-49Ch] unsigned __int8 v37; // [esp+49h] [ebp-49Bh] int v38; // [esp+4Ch] [ebp-498h] char v39[128]; // [esp+454h] [ebp-90h] int v40; // [esp+4E0h] [ebp-4h] v2 = (int)a2; v3 = *a2; v30 = this; v34 = (int)a2; if ( v3 == 36 || !v3 ) return; v4 = this[584]; v33 = 8193; sub_905F90(v4, &v33, 2u); v35 = strlen(a2); if ( v35 > 127 ) v35 = 127; memset(v39, 0, 0x80u); for ( i = 0; ; i = v9 ) { v6 = *(_BYTE *)(v2 + i); v7 = (const void *)(i + v2); v8 = (IsDBCSLeadByte(v6) != 0) + 1; v9 = v8 + i; if ( (signed int)(v8 + i) > v35 ) break; memcpy(&v39[i], v7, v8); v2 = v34; } v26 = 112; v39[i] = 0; v32 = 0; v10 = (int *)operator new(v26); if ( !v10 ) { v29 = 0; std::exception::exception((std::exception *)&v28, (const char *const *)&v29); v28 = &std::bad_alloc::`vftable'; _CxxThrowException(&v28, &_TI2_AVbad_alloc_std__); } v11 = v10; *v10 = (int)v10; v31 = v10; v10[1] = (int)v10; v40 = 0; v12 = (int)v30; v13 = (int **)v30[176]; if ( v13 ) { v14 = (int **)sub_60C4F0(v13, (char ***)&v27); LOBYTE(v40) = 1; sub_4DDE00(&v31, v14); LOBYTE(v40) = 0; sub_4E6E90(&v27); if ( v32 ) { memset(&v38, 0, 0x406u); v26 = v34; v34 = (int)&v23; sub_4DDC60((char ***)&v23, &v31); if ( !sub_4D31D0(v23, v24, (int)v25, v26) ) { sub_4E6E90(&v31); return; } v16 = (int *)*v31; v35 = 0; if ( v16 != v31 ) { v17 = &v38; do { ++v35; qmemcpy((char *)v17 + 2, (char *)v16 + 10, 0x65u); *(_WORD *)v17 = *((_WORD *)v16 + 4); v16 = (int *)*v16; v17 = (int *)((char *)v17 + 103); } while ( v16 != v31 ); v12 = (int)v30; } v18 = *(_DWORD *)(v12 + 2336); v36 = v35; v37 = i; sub_905F90(v18, &v36, 2u); v26 = v37; sub_905F90(*(_DWORD *)(v12 + 2336), v39, v37); v19 = v35; if ( v35 > 0 ) { v20 = &v38; do { sub_905F90(*(_DWORD *)(v12 + 2336), v20, 0x67u); v20 = (int *)((char *)v20 + 103); --v19; } while ( v19 ); } sub_906000(*(_DWORD *)(v12 + 2336), 0, 0); v11 = v31; goto LABEL_24; } v11 = v31; } v26 = 2; v25 = &v36; v15 = *(_DWORD *)(v12 + 2336); v36 = 0; v37 = i; sub_905F90(v15, &v36, 2u); sub_906000(*(_DWORD *)(v12 + 2336), v39, v37); LABEL_24: v21 = (int *)*v11; *v11 = (int)v11; v11[1] = (int)v11; if ( v21 != v11 ) { do { v22 = (int *)*v21; operator delete(v21); v21 = v22; } while ( v22 != v11 ); } operator delete(v11); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // 4D6090: using guessed type char var_90[128]; //----- (004D63D0) -------------------------------------------------------- void __thiscall sub_4D63D0(_DWORD *this, void *a2) { char *v2; // edi int v3; // esi int v4; // ecx _DWORD *v5; // eax _DWORD *v6; // ebx int **v7; // ecx int **v8; // eax _DWORD *v9; // eax int v10; // ebx int *v11; // edx int *v12; // edi _DWORD *v13; // eax _DWORD *v14; // esi void *v15; // [esp-10h] [ebp-474h] int v16; // [esp-Ch] [ebp-470h] int v17; // [esp-8h] [ebp-46Ch] void *v18; // [esp-4h] [ebp-468h] char v19; // [esp+10h] [ebp-454h] void **v20; // [esp+1Ch] [ebp-448h] void **v21; // [esp+20h] [ebp-444h] char *v22; // [esp+2Ch] [ebp-438h] _DWORD *v23; // [esp+30h] [ebp-434h] char *v24; // [esp+34h] [ebp-430h] _DWORD *v25; // [esp+38h] [ebp-42Ch] int v26; // [esp+3Ch] [ebp-428h] __int16 v27; // [esp+44h] [ebp-420h] char v28; // [esp+48h] [ebp-41Ch] unsigned __int8 v29; // [esp+49h] [ebp-41Bh] int v30; // [esp+4Ch] [ebp-418h] int v31; // [esp+460h] [ebp-4h] v2 = (char *)a2; v3 = (int)this; v23 = this; v22 = (char *)a2; if ( !a2 || !*(_BYTE *)a2 ) return; v4 = this[584]; v27 = 8222; sub_905F90(v4, &v27, 2u); v26 = 0; v5 = operator new(0x70u); if ( !v5 ) { v24 = 0; std::exception::exception((std::exception *)&v21, (const char *const *)&v24); v21 = &std::bad_alloc::`vftable'; _CxxThrowException(&v21, &_TI2_AVbad_alloc_std__); } v6 = v5; *v5 = v5; v25 = v5; v5[1] = v5; v7 = *(int ***)(v3 + 704); v31 = 0; if ( v7 ) { v8 = (int **)sub_60C4F0(v7, (char ***)&v19); LOBYTE(v31) = 1; sub_4DDE00(&v25, v8); LOBYTE(v31) = 0; sub_4E6E90(&v19); if ( v26 ) { memset(&v30, 0, 0x406u); v18 = a2; v20 = &v15; sub_4DDC60((char ***)&v15, &v25); if ( !sub_4D31D0(v15, v16, v17, (int)v18) ) { sub_4E6E90(&v25); return; } v9 = (_DWORD *)*v25; v10 = 0; if ( (_DWORD *)*v25 != v25 ) { v11 = &v30; do { qmemcpy((char *)v11 + 2, (char *)v9 + 10, 0x65u); *(_WORD *)v11 = *((_WORD *)v9 + 4); v9 = (_DWORD *)*v9; ++v10; v11 = (int *)((char *)v11 + 103); } while ( v9 != v25 ); v3 = (int)v23; v2 = v22; } v28 = v10; v29 = strlen(v2); if ( v29 > 0x80u ) v29 = -128; sub_905F90(*(_DWORD *)(v3 + 2336), &v28, 2u); sub_905F90(*(_DWORD *)(v3 + 2336), v2, v29); if ( v10 > 0 ) { v12 = &v30; do { sub_905F90(*(_DWORD *)(v3 + 2336), v12, 0x67u); v12 = (int *)((char *)v12 + 103); --v10; } while ( v10 ); } sub_906000(*(_DWORD *)(v3 + 2336), 0, 0); v6 = v25; goto LABEL_23; } v6 = v25; } v28 = 0; v29 = strlen((const char *)a2); if ( v29 > 0x80u ) v29 = -128; sub_905F90(*(_DWORD *)(v3 + 2336), &v28, 2u); sub_906000(*(_DWORD *)(v3 + 2336), a2, v29); LABEL_23: v13 = (_DWORD *)*v6; *v6 = v6; v6[1] = v6; if ( v13 != v6 ) { do { v14 = (_DWORD *)*v13; operator delete(v13); v13 = v14; } while ( v14 != v6 ); } operator delete(v6); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D66A0) -------------------------------------------------------- void __thiscall sub_4D66A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, void *a7) { void *v7; // edi int v8; // esi int v9; // ecx void **v10; // eax void **v11; // ebx int **v12; // ecx int **v13; // eax int v14; // ecx void **v15; // eax int *v16; // edx int v17; // ecx int *v18; // edi void **v19; // eax void **v20; // esi void *v21; // [esp-10h] [ebp-48Ch] int v22; // [esp-Ch] [ebp-488h] char *v23; // [esp-8h] [ebp-484h] size_t v24; // [esp-4h] [ebp-480h] char v25; // [esp+10h] [ebp-46Ch] void **v26; // [esp+1Ch] [ebp-460h] void *v27; // [esp+28h] [ebp-454h] _DWORD *v28; // [esp+2Ch] [ebp-450h] char *v29; // [esp+30h] [ebp-44Ch] void **v30; // [esp+34h] [ebp-448h] int v31; // [esp+38h] [ebp-444h] __int16 v32; // [esp+40h] [ebp-43Ch] void **v33; // [esp+44h] [ebp-438h] void **v34; // [esp+48h] [ebp-434h] char v35; // [esp+4Ch] [ebp-430h] int v36; // [esp+4Dh] [ebp-42Fh] int v37; // [esp+51h] [ebp-42Bh] int v38; // [esp+55h] [ebp-427h] int v39; // [esp+59h] [ebp-423h] int v40; // [esp+5Dh] [ebp-41Fh] unsigned __int8 v41; // [esp+61h] [ebp-41Bh] int v42; // [esp+64h] [ebp-418h] int v43; // [esp+478h] [ebp-4h] v7 = a7; v8 = (int)this; v28 = this; v27 = a7; if ( !a7 || !*(_BYTE *)a7 ) return; v9 = this[585]; v32 = 8204; sub_905F90(v9, &v32, 2u); v36 = a2; v37 = a3; v39 = a5; v38 = a4; v40 = a6; v34 = (void **)strlen((const char *)a7); if ( (signed int)v34 > 128 ) v34 = (void **)128; v31 = 0; v10 = (void **)operator new(0x70u); if ( !v10 ) { v29 = 0; std::exception::exception((std::exception *)&v26, (const char *const *)&v29); v26 = &std::bad_alloc::`vftable'; _CxxThrowException(&v26, &_TI2_AVbad_alloc_std__); } v11 = v10; *v10 = v10; v30 = v10; v10[1] = v10; v12 = *(int ***)(v8 + 704); v43 = 0; if ( v12 ) { v13 = (int **)sub_60C4F0(v12, (char ***)&v25); LOBYTE(v43) = 1; sub_4DDE00((int **)&v30, v13); LOBYTE(v43) = 0; sub_4E6E90(&v25); if ( v31 ) { memset(&v42, 0, 0x406u); v24 = (size_t)a7; v33 = &v21; sub_4DDC60((char ***)&v21, (int **)&v30); if ( !sub_4D31D0(v21, v22, (int)v23, v24) ) { sub_4E6E90(&v30); return; } v11 = v30; v15 = (void **)*v30; v33 = 0; if ( v15 != v30 ) { v16 = &v42; do { v33 = (void **)((char *)v33 + 1); qmemcpy((char *)v16 + 2, (char *)v15 + 10, 0x65u); *(_WORD *)v16 = *((_WORD *)v15 + 4); v15 = (void **)*v15; v16 = (int *)((char *)v16 + 103); } while ( v15 != v11 ); v8 = (int)v28; v7 = v27; } v24 = 22; v23 = &v35; v17 = *(_DWORD *)(v8 + 2340); v35 = (char)v33; v41 = (unsigned __int8)v34; sub_905F90(v17, &v35, 0x16u); sub_905F90(*(_DWORD *)(v8 + 2340), v7, v41); if ( (signed int)v33 > 0 ) { v18 = &v42; v34 = v33; do { sub_905F90(*(_DWORD *)(v8 + 2340), v18, 0x67u); v18 = (int *)((char *)v18 + 103); v34 = (void **)((char *)v34 - 1); } while ( v34 ); } v24 = 0; v23 = 0; goto LABEL_21; } v11 = v30; } v24 = 22; v23 = &v35; v14 = *(_DWORD *)(v8 + 2340); v35 = 0; v41 = (unsigned __int8)v34; sub_905F90(v14, &v35, 0x16u); v24 = v41; v23 = (char *)a7; LABEL_21: sub_906000(*(_DWORD *)(v8 + 2340), v23, v24); v19 = (void **)*v11; *v11 = v11; v11[1] = v11; if ( v19 != v11 ) { do { v20 = (void **)*v19; operator delete(v19); v19 = v20; } while ( v20 != v11 ); } operator delete(v11); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D69B0) -------------------------------------------------------- void __thiscall sub_4D69B0(_DWORD *this, void *a2) { void *v2; // edi int v3; // esi int v4; // ecx void **v5; // eax void **v6; // ebx int **v7; // ecx int **v8; // eax int v9; // ecx void **v10; // eax int *v11; // edx int v12; // ecx int *v13; // edi void **v14; // eax void **v15; // esi void *v16; // [esp-10h] [ebp-478h] int v17; // [esp-Ch] [ebp-474h] char *v18; // [esp-8h] [ebp-470h] size_t v19; // [esp-4h] [ebp-46Ch] char v20; // [esp+10h] [ebp-458h] void **v21; // [esp+1Ch] [ebp-44Ch] _DWORD *v22; // [esp+28h] [ebp-440h] char *v23; // [esp+2Ch] [ebp-43Ch] void *v24; // [esp+30h] [ebp-438h] void **v25; // [esp+34h] [ebp-434h] int v26; // [esp+38h] [ebp-430h] __int16 v27; // [esp+40h] [ebp-428h] void **v28; // [esp+44h] [ebp-424h] void **v29; // [esp+48h] [ebp-420h] char v30; // [esp+4Ch] [ebp-41Ch] unsigned __int8 v31; // [esp+4Dh] [ebp-41Bh] int v32; // [esp+50h] [ebp-418h] int v33; // [esp+464h] [ebp-4h] v2 = a2; v3 = (int)this; v22 = this; v24 = a2; if ( !a2 || !*(_BYTE *)a2 ) return; v4 = this[585]; v27 = 8212; sub_905F90(v4, &v27, 2u); v29 = (void **)strlen((const char *)a2); if ( (signed int)v29 > 128 ) v29 = (void **)128; v26 = 0; v5 = (void **)operator new(0x70u); if ( !v5 ) { v23 = 0; std::exception::exception((std::exception *)&v21, (const char *const *)&v23); v21 = &std::bad_alloc::`vftable'; _CxxThrowException(&v21, &_TI2_AVbad_alloc_std__); } v6 = v5; *v5 = v5; v25 = v5; v5[1] = v5; v7 = *(int ***)(v3 + 704); v33 = 0; if ( v7 ) { v8 = (int **)sub_60C4F0(v7, (char ***)&v20); LOBYTE(v33) = 1; sub_4DDE00((int **)&v25, v8); LOBYTE(v33) = 0; sub_4E6E90(&v20); if ( v26 ) { memset(&v32, 0, 0x406u); v19 = (size_t)a2; v28 = &v16; sub_4DDC60((char ***)&v16, (int **)&v25); if ( !sub_4D31D0(v16, v17, (int)v18, v19) ) { sub_4E6E90(&v25); return; } v6 = v25; v10 = (void **)*v25; v28 = 0; if ( v10 != v25 ) { v11 = &v32; do { v28 = (void **)((char *)v28 + 1); qmemcpy((char *)v11 + 2, (char *)v10 + 10, 0x65u); *(_WORD *)v11 = *((_WORD *)v10 + 4); v10 = (void **)*v10; v11 = (int *)((char *)v11 + 103); } while ( v10 != v6 ); v3 = (int)v22; v2 = v24; } v19 = 2; v18 = &v30; v12 = *(_DWORD *)(v3 + 2340); v30 = (char)v28; v31 = (unsigned __int8)v29; sub_905F90(v12, &v30, 2u); sub_905F90(*(_DWORD *)(v3 + 2340), v2, v31); if ( (signed int)v28 > 0 ) { v13 = &v32; v29 = v28; do { sub_905F90(*(_DWORD *)(v3 + 2340), v13, 0x67u); v13 = (int *)((char *)v13 + 103); v29 = (void **)((char *)v29 - 1); } while ( v29 ); } v19 = 0; v18 = 0; goto LABEL_21; } v6 = v25; } v19 = 2; v31 = (unsigned __int8)v29; v9 = *(_DWORD *)(v3 + 2340); v30 = 0; sub_905F90(v9, &v30, 2u); v19 = v31; v18 = (char *)a2; LABEL_21: sub_906000(*(_DWORD *)(v3 + 2340), v18, v19); v14 = (void **)*v6; *v6 = v6; v6[1] = v6; if ( v14 != v6 ) { do { v15 = (void **)*v14; operator delete(v14); v14 = v15; } while ( v15 != v6 ); } operator delete(v6); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D6C90) -------------------------------------------------------- void __thiscall sub_4D6C90(_DWORD *this, void *a2) { void *v2; // edi int v3; // esi int v4; // ecx void **v5; // eax void **v6; // ebx int **v7; // ecx int **v8; // eax int v9; // ecx void **v10; // eax int *v11; // edx int v12; // ecx int *v13; // edi void **v14; // eax void **v15; // esi void *v16; // [esp-10h] [ebp-478h] int v17; // [esp-Ch] [ebp-474h] char *v18; // [esp-8h] [ebp-470h] size_t v19; // [esp-4h] [ebp-46Ch] char v20; // [esp+10h] [ebp-458h] void **v21; // [esp+1Ch] [ebp-44Ch] _DWORD *v22; // [esp+28h] [ebp-440h] char *v23; // [esp+2Ch] [ebp-43Ch] void *v24; // [esp+30h] [ebp-438h] void **v25; // [esp+34h] [ebp-434h] int v26; // [esp+38h] [ebp-430h] __int16 v27; // [esp+40h] [ebp-428h] void **v28; // [esp+44h] [ebp-424h] void **v29; // [esp+48h] [ebp-420h] char v30; // [esp+4Ch] [ebp-41Ch] unsigned __int8 v31; // [esp+4Dh] [ebp-41Bh] int v32; // [esp+50h] [ebp-418h] int v33; // [esp+464h] [ebp-4h] v2 = a2; v3 = (int)this; v22 = this; v24 = a2; if ( !a2 || !*(_BYTE *)a2 ) return; v4 = this[585]; v27 = 29811; sub_905F90(v4, &v27, 2u); v29 = (void **)strlen((const char *)a2); if ( (signed int)v29 > 128 ) v29 = (void **)128; v26 = 0; v5 = (void **)operator new(0x70u); if ( !v5 ) { v23 = 0; std::exception::exception((std::exception *)&v21, (const char *const *)&v23); v21 = &std::bad_alloc::`vftable'; _CxxThrowException(&v21, &_TI2_AVbad_alloc_std__); } v6 = v5; *v5 = v5; v25 = v5; v5[1] = v5; v7 = *(int ***)(v3 + 704); v33 = 0; if ( v7 ) { v8 = (int **)sub_60C4F0(v7, (char ***)&v20); LOBYTE(v33) = 1; sub_4DDE00((int **)&v25, v8); LOBYTE(v33) = 0; sub_4E6E90(&v20); if ( v26 ) { memset(&v32, 0, 0x406u); v19 = (size_t)a2; v28 = &v16; sub_4DDC60((char ***)&v16, (int **)&v25); if ( !sub_4D31D0(v16, v17, (int)v18, v19) ) { sub_4E6E90(&v25); return; } v6 = v25; v10 = (void **)*v25; v28 = 0; if ( v10 != v25 ) { v11 = &v32; do { v28 = (void **)((char *)v28 + 1); qmemcpy((char *)v11 + 2, (char *)v10 + 10, 0x65u); *(_WORD *)v11 = *((_WORD *)v10 + 4); v10 = (void **)*v10; v11 = (int *)((char *)v11 + 103); } while ( v10 != v6 ); v3 = (int)v22; v2 = v24; } v19 = 2; v18 = &v30; v12 = *(_DWORD *)(v3 + 2340); v30 = (char)v28; v31 = (unsigned __int8)v29; sub_905F90(v12, &v30, 2u); sub_905F90(*(_DWORD *)(v3 + 2340), v2, v31); if ( (signed int)v28 > 0 ) { v13 = &v32; v29 = v28; do { sub_905F90(*(_DWORD *)(v3 + 2340), v13, 0x67u); v13 = (int *)((char *)v13 + 103); v29 = (void **)((char *)v29 - 1); } while ( v29 ); } v19 = 0; v18 = 0; goto LABEL_21; } v6 = v25; } v19 = 2; v31 = (unsigned __int8)v29; v9 = *(_DWORD *)(v3 + 2340); v30 = 0; sub_905F90(v9, &v30, 2u); v19 = v31; v18 = (char *)a2; LABEL_21: sub_906000(*(_DWORD *)(v3 + 2340), v18, v19); v14 = (void **)*v6; *v6 = v6; v6[1] = v6; if ( v14 != v6 ) { do { v15 = (void **)*v14; operator delete(v14); v14 = v15; } while ( v15 != v6 ); } operator delete(v6); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D6F70) -------------------------------------------------------- void __thiscall sub_4D6F70(_DWORD *this, void *a2) { void *v2; // edi int v3; // esi int v4; // ecx void **v5; // eax void **v6; // ebx int **v7; // ecx int **v8; // eax int v9; // ecx void **v10; // eax int *v11; // edx int v12; // ecx int *v13; // edi void **v14; // eax void **v15; // esi void *v16; // [esp-10h] [ebp-478h] int v17; // [esp-Ch] [ebp-474h] char *v18; // [esp-8h] [ebp-470h] size_t v19; // [esp-4h] [ebp-46Ch] char v20; // [esp+10h] [ebp-458h] void **v21; // [esp+1Ch] [ebp-44Ch] _DWORD *v22; // [esp+28h] [ebp-440h] char *v23; // [esp+2Ch] [ebp-43Ch] void *v24; // [esp+30h] [ebp-438h] void **v25; // [esp+34h] [ebp-434h] int v26; // [esp+38h] [ebp-430h] __int16 v27; // [esp+40h] [ebp-428h] void **v28; // [esp+44h] [ebp-424h] void **v29; // [esp+48h] [ebp-420h] char v30; // [esp+4Ch] [ebp-41Ch] unsigned __int8 v31; // [esp+4Dh] [ebp-41Bh] int v32; // [esp+50h] [ebp-418h] int v33; // [esp+464h] [ebp-4h] v2 = a2; v3 = (int)this; v22 = this; v24 = a2; if ( !a2 || !*(_BYTE *)a2 ) return; v4 = this[585]; v27 = -26520; sub_905F90(v4, &v27, 2u); v29 = (void **)strlen((const char *)a2); if ( (signed int)v29 > 128 ) v29 = (void **)128; v26 = 0; v5 = (void **)operator new(0x70u); if ( !v5 ) { v23 = 0; std::exception::exception((std::exception *)&v21, (const char *const *)&v23); v21 = &std::bad_alloc::`vftable'; _CxxThrowException(&v21, &_TI2_AVbad_alloc_std__); } v6 = v5; *v5 = v5; v25 = v5; v5[1] = v5; v7 = *(int ***)(v3 + 704); v33 = 0; if ( v7 ) { v8 = (int **)sub_60C4F0(v7, (char ***)&v20); LOBYTE(v33) = 1; sub_4DDE00((int **)&v25, v8); LOBYTE(v33) = 0; sub_4E6E90(&v20); if ( v26 ) { memset(&v32, 0, 0x406u); v19 = (size_t)a2; v28 = &v16; sub_4DDC60((char ***)&v16, (int **)&v25); if ( !sub_4D31D0(v16, v17, (int)v18, v19) ) { sub_4E6E90(&v25); return; } v6 = v25; v10 = (void **)*v25; v28 = 0; if ( v10 != v25 ) { v11 = &v32; do { v28 = (void **)((char *)v28 + 1); qmemcpy((char *)v11 + 2, (char *)v10 + 10, 0x65u); *(_WORD *)v11 = *((_WORD *)v10 + 4); v10 = (void **)*v10; v11 = (int *)((char *)v11 + 103); } while ( v10 != v6 ); v3 = (int)v22; v2 = v24; } v19 = 2; v18 = &v30; v12 = *(_DWORD *)(v3 + 2340); v30 = (char)v28; v31 = (unsigned __int8)v29; sub_905F90(v12, &v30, 2u); sub_905F90(*(_DWORD *)(v3 + 2340), v2, v31); if ( (signed int)v28 > 0 ) { v13 = &v32; v29 = v28; do { sub_905F90(*(_DWORD *)(v3 + 2340), v13, 0x67u); v13 = (int *)((char *)v13 + 103); v29 = (void **)((char *)v29 - 1); } while ( v29 ); } v19 = 0; v18 = 0; goto LABEL_21; } v6 = v25; } v19 = 2; v31 = (unsigned __int8)v29; v9 = *(_DWORD *)(v3 + 2340); v30 = 0; sub_905F90(v9, &v30, 2u); v19 = v31; v18 = (char *)a2; LABEL_21: sub_906000(*(_DWORD *)(v3 + 2340), v18, v19); v14 = (void **)*v6; *v6 = v6; v6[1] = v6; if ( v14 != v6 ) { do { v15 = (void **)*v14; operator delete(v14); v14 = v15; } while ( v15 != v6 ); } operator delete(v6); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D7250) -------------------------------------------------------- int __thiscall sub_4D7250(int **this, int a2, __int16 *a3) { int **v3; // edi __int16 v4; // ax char *v5; // eax int v6; // esi int *v7; // eax int v8; // eax int *v9; // edi int v10; // eax int *v11; // eax char v13; // [esp+10h] [ebp-14h] __int16 v14; // [esp+14h] [ebp-10h] int v15; // [esp+20h] [ebp-4h] v3 = this; sub_8E5020(); v4 = *a3; v15 = 0; v14 = v4; switch ( sub_74C880((unsigned __int16 *)&v14, (unsigned __int16 *)&v13) ) { case 1: if ( !sub_683050(&unk_ADA1E0, (_DWORD *)(unsigned __int16)*a3) ) sub_62F110(2, (unsigned __int16)*a3, 1); goto LABEL_35; case 2: case 4: case 5: case 8: case 0xA: case 0xB: case 0xC: v5 = sub_664AB0(dword_AD8C90, *a3); v6 = (int)v5; if ( v5 ) { if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v5 + 32))(v5) && !sub_651680(v6) && !sub_650B20((_DWORD *)v6) && sub_6516C0((_BYTE *)v6) ) { v7 = (int *)sub_6AB1D0(&unk_B91250, *a3); if ( v7 ) sub_6ACDF0(&unk_B91250, v7); } v8 = sub_4B0D70(*(unsigned __int16 *)(v6 + 942)); if ( v8 && !strcmp((const char *)(v8 + 2), "KQ_G_Boss") ) sub_5696D0(v3[143], 1); if ( sub_651680(v6) ) sub_56BF70((void **)v3[143], *(unsigned __int16 *)(v6 + 548)); sub_6A9BC0(&unk_B683E8, *(_WORD *)(v6 + 548)); sub_56B500(v3[143], *(unsigned __int16 *)(v6 + 548)); } if ( dword_ADB4F8 ) { sub_6DB900(byte_ADB468, *a3); sub_6DCF60(byte_ADB468, (unsigned __int16)*a3); if ( dword_ADB4F8 == 5 && dword_ADB4FC == 2 ) { sub_6DE220(byte_ADB468); sub_67D370(dword_AD8EBC, 0); } v9 = v3[271]; if ( v9 ) { sub_6EACF0(v9); sub_6EB000(v9); } } if ( !v6 ) goto LABEL_29; if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 32))(v6) || sub_651680(v6) ) { if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 664))(v6) ) { LABEL_29: sub_6678A0(dword_AD8C90, a3); goto LABEL_35; } } else { v10 = sub_4B0D70(*(unsigned __int16 *)(v6 + 942)); if ( !v10 || sub_4DD9E0((char *)(v10 + 2)) ) goto LABEL_29; } sub_4DD990(dword_AD8C90, v6); LABEL_35: v15 = -1; nullsub_6(&v14); return a2; case 3: sub_6E1670(&unk_B9E1CC, *a3); goto LABEL_35; case 6: sub_62F730(*a3); goto LABEL_35; case 9: v11 = sub_4DE270(); if ( v11 ) sub_4DD7F0(v11); goto LABEL_35; default: goto LABEL_35; } } // ADB4F8: using guessed type int dword_ADB4F8; // ADB4FC: using guessed type int dword_ADB4FC; //----- (004D7540) -------------------------------------------------------- int __stdcall sub_4D7540(int a1, unsigned __int16 *a2) { int *v2; // eax int v3; // edx v2 = sub_4DE270(); if ( v2 ) sub_4DDE60((int)v2, v3, a2); return a1; } //----- (004D7560) -------------------------------------------------------- int __stdcall sub_4D7560(int a1, unsigned __int8 *a2) { int *v2; // eax int v3; // edx int v4; // esi int *v6; // [esp+0h] [ebp-4h] v2 = sub_4DE270(); v6 = v2; if ( v2 ) { v4 = 0; if ( *a2 ) { while ( 1 ) { sub_4DDE60((int)v2, v3, (unsigned __int16 *)(a2 + 1)); if ( ++v4 >= *a2 ) break; v2 = v6; } } } return a1; } //----- (004D75B0) -------------------------------------------------------- int __thiscall sub_4D75B0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // esi const char *v4; // eax const char *v5; // eax void *v6; // eax int v7; // eax void *v8; // eax const void **v9; // ecx const CHAR *v10; // eax void *v12; // [esp+18h] [ebp-2Ch] int v13; // [esp+28h] [ebp-1Ch] unsigned int v14; // [esp+2Ch] [ebp-18h] int v15; // [esp+40h] [ebp-4h] v3 = this; if ( *a3 == 4481 ) { v5 = (const char *)(*(int (**)(void))(**(_DWORD **)(this[276] + 356) + 452))(); *(_DWORD *)(v3[271] + 432) = atoi(v5); v6 = (void *)(*(int (**)(void))(**(_DWORD **)(v3[276] + 352) + 452))(); sub_4B27E0((_DWORD *)v3[271], v6, 0); v7 = (*(int (**)(void))(**(_DWORD **)(v3[276] + 364) + 452))(); (*(void (__stdcall **)(int))(**(_DWORD **)(v3[271] + 456) + 472))(v7); v8 = (void *)(*(int (**)(void))(**(_DWORD **)(v3[276] + 360) + 452))(); v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4018E0(&v12, v8, strlen((const char *)v8)); v9 = (const void **)(v3[271] + 400); v15 = 0; sub_4017F0(v9, (const void **)&v12, 0, (void *)0xFFFFFFFF); v15 = -1; if ( v14 >= 0x10 ) operator delete(v12); v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4A5860((_DWORD **)v3); if ( byte_AD8CD8 && sub_8D0630((float *)&unk_AD8CDC, flt_ACCFCC) ) { sub_8D06A0((float *)&unk_AD8CDC, flt_ACCFCC); byte_AD8CD8 = 0; v10 = sub_40C190(1111582330); sub_492060(v3, (int)v10); sub_4A57D0(v3, 0); } } else { v4 = sub_41A850((unsigned __int16)*a3); sub_492060(v3, (int)v4); byte_ADB650 = 0; } return a2; } // ACCFCC: using guessed type float flt_ACCFCC; // AD8CD8: using guessed type char byte_AD8CD8; // ADB650: using guessed type char byte_ADB650; //----- (004D7790) -------------------------------------------------------- int __thiscall sub_4D7790(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // ebx unsigned int v5; // ebx const CHAR *v6; // eax int v7; // ST00_4 void *v8; // eax const char *v9; // eax void *v10; // eax void *v11; // eax const void **v12; // ecx char *v14; // [esp+10h] [ebp-34h] char v15[4]; // [esp+14h] [ebp-30h] void *v16; // [esp+18h] [ebp-2Ch] int v17; // [esp+28h] [ebp-1Ch] unsigned int v18; // [esp+2Ch] [ebp-18h] int v19; // [esp+40h] [ebp-4h] v3 = (int)this; if ( *(_DWORD *)a3 == 4481 ) { v4 = this[275]; *(_DWORD *)v15 = a3 + 108; sub_4018E0((_DWORD *)(v4 + 344), (void *)(a3 + 107), strlen((const char *)(a3 + 107))); v5 = 0; if ( dword_AD8CD4 ) { do { sub_6DD990(byte_ADB468, *(unsigned __int16 *)(v5 + a3 + 2 * v5 + 94 + 47), *(_BYTE *)(v5 + a3 + 2 * v5 + 140)); if ( !v5 ) { v14 = sub_664AB0(dword_AD8C90, *(_WORD *)(a3 + 141)); if ( v14 ) { v7 = *(unsigned __int8 *)(a3 + 140); *(_WORD *)v15 = 12336; _itoa(v7, v15, 10); v8 = (void *)(*(int (**)(void))(*(_DWORD *)v14 + 84))(); sub_4DE190(*(_DWORD **)(v3 + 1084), v8); } else { v6 = sub_40A910(556346252); sub_492060((_DWORD *)v3, (int)v6); } } ++v5; } while ( v5 < dword_AD8CD4 ); } } else { v9 = sub_41A850(*(_DWORD *)a3); sub_492060((_DWORD *)v3, (int)v9); } (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v3 + 1084) + 456) + 472))(a3 + 6); *(_DWORD *)(*(_DWORD *)(v3 + 1084) + 436) = *(unsigned __int8 *)(a3 + 139); *(_BYTE *)(*(_DWORD *)(v3 + 1084) + 428) = *(_BYTE *)(a3 + 5) != 0; *(_DWORD *)(*(_DWORD *)(v3 + 1084) + 432) = *(unsigned __int8 *)(a3 + 4); if ( dword_ADB4FC == 2 ) { v10 = (void *)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(v3 + 1104) + 352) + 452))(); sub_4B27E0(*(_DWORD **)(v3 + 1084), v10, 0); v11 = (void *)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(v3 + 1104) + 360) + 452))(); v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4018E0(&v16, v11, strlen((const char *)v11)); v12 = (const void **)(*(_DWORD *)(v3 + 1084) + 400); v19 = 0; sub_4017F0(v12, (const void **)&v16, 0, (void *)0xFFFFFFFF); v19 = -1; if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4A5860((_DWORD **)v3); } sub_4AAC10((_DWORD *)v3, 0); sub_4A8140(v3, 61); return a2; } // AD8CD4: using guessed type int dword_AD8CD4; // ADB4FC: using guessed type int dword_ADB4FC; //----- (004D7A00) -------------------------------------------------------- int __thiscall sub_4D7A00(_DWORD **this, int a2, char *a3) { _DWORD **v3; // esi const CHAR *v4; // eax v3 = this; strncpy(byte_ADB576, a3, 0x14u); sub_4B27E0(v3[271], a3, 0); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[272][90] + 460))(a3); sub_6EB000(v3[271]); v4 = sub_40A910(775065480); sub_492060(v3, (int)v4); return a2; } //----- (004D7A70) -------------------------------------------------------- void __thiscall sub_4D7A70(_DWORD *this, void *a2) { void *v2; // edi int v3; // esi int v4; // ecx void **v5; // eax void **v6; // ebx int **v7; // ecx int **v8; // eax int v9; // ecx void **v10; // eax int *v11; // edx int v12; // ecx int *v13; // edi void **v14; // eax void **v15; // esi void *v16; // [esp-10h] [ebp-478h] int v17; // [esp-Ch] [ebp-474h] char *v18; // [esp-8h] [ebp-470h] size_t v19; // [esp-4h] [ebp-46Ch] char v20; // [esp+10h] [ebp-458h] void **v21; // [esp+1Ch] [ebp-44Ch] _DWORD *v22; // [esp+28h] [ebp-440h] char *v23; // [esp+2Ch] [ebp-43Ch] void *v24; // [esp+30h] [ebp-438h] void **v25; // [esp+34h] [ebp-434h] int v26; // [esp+38h] [ebp-430h] __int16 v27; // [esp+40h] [ebp-428h] void **v28; // [esp+44h] [ebp-424h] void **v29; // [esp+48h] [ebp-420h] char v30; // [esp+4Ch] [ebp-41Ch] unsigned __int8 v31; // [esp+4Dh] [ebp-41Bh] int v32; // [esp+50h] [ebp-418h] int v33; // [esp+464h] [ebp-4h] v2 = a2; v3 = (int)this; v22 = this; v24 = a2; if ( !a2 || !*(_BYTE *)a2 ) return; v4 = this[585]; v27 = -20417; sub_905F90(v4, &v27, 2u); v29 = (void **)strlen((const char *)a2); if ( (signed int)v29 > 128 ) v29 = (void **)128; v26 = 0; v5 = (void **)operator new(0x70u); if ( !v5 ) { v23 = 0; std::exception::exception((std::exception *)&v21, (const char *const *)&v23); v21 = &std::bad_alloc::`vftable'; _CxxThrowException(&v21, &_TI2_AVbad_alloc_std__); } v6 = v5; *v5 = v5; v25 = v5; v5[1] = v5; v7 = *(int ***)(v3 + 704); v33 = 0; if ( v7 ) { v8 = (int **)sub_60C4F0(v7, (char ***)&v20); LOBYTE(v33) = 1; sub_4DDE00((int **)&v25, v8); LOBYTE(v33) = 0; sub_4E6E90(&v20); if ( v26 ) { memset(&v32, 0, 0x406u); v19 = (size_t)a2; v28 = &v16; sub_4DDC60((char ***)&v16, (int **)&v25); if ( !sub_4D31D0(v16, v17, (int)v18, v19) ) { sub_4E6E90(&v25); return; } v6 = v25; v10 = (void **)*v25; v28 = 0; if ( v10 != v25 ) { v11 = &v32; do { v28 = (void **)((char *)v28 + 1); qmemcpy((char *)v11 + 2, (char *)v10 + 10, 0x65u); *(_WORD *)v11 = *((_WORD *)v10 + 4); v10 = (void **)*v10; v11 = (int *)((char *)v11 + 103); } while ( v10 != v6 ); v3 = (int)v22; v2 = v24; } v19 = 2; v18 = &v30; v12 = *(_DWORD *)(v3 + 2340); v30 = (char)v28; v31 = (unsigned __int8)v29; sub_905F90(v12, &v30, 2u); sub_905F90(*(_DWORD *)(v3 + 2340), v2, v31); if ( (signed int)v28 > 0 ) { v13 = &v32; v29 = v28; do { sub_905F90(*(_DWORD *)(v3 + 2340), v13, 0x67u); v13 = (int *)((char *)v13 + 103); v29 = (void **)((char *)v29 - 1); } while ( v29 ); } v19 = 0; v18 = 0; goto LABEL_21; } v6 = v25; } v19 = 2; v31 = (unsigned __int8)v29; v9 = *(_DWORD *)(v3 + 2340); v30 = 0; sub_905F90(v9, &v30, 2u); v19 = v31; v18 = (char *)a2; LABEL_21: sub_906000(*(_DWORD *)(v3 + 2340), v18, v19); v14 = (void **)*v6; *v6 = v6; v6[1] = v6; if ( v14 != v6 ) { do { v15 = (void **)*v14; operator delete(v14); v14 = v15; } while ( v15 != v6 ); } operator delete(v6); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004D7D50) -------------------------------------------------------- void __thiscall sub_4D7D50(_DWORD *this, void *a2) { void *v2; // edi _DWORD *v3; // esi const CHAR *v4; // eax int v5; // ecx void **v6; // eax void **v7; // ebx int **v8; // ecx int **v9; // eax int v10; // ecx void **v11; // eax int *v12; // edx int v13; // ecx int *v14; // edi void **v15; // eax void **v16; // esi void *v17; // [esp-10h] [ebp-478h] int v18; // [esp-Ch] [ebp-474h] char *v19; // [esp-8h] [ebp-470h] size_t v20; // [esp-4h] [ebp-46Ch] char v21; // [esp+10h] [ebp-458h] void **v22; // [esp+1Ch] [ebp-44Ch] _DWORD *v23; // [esp+28h] [ebp-440h] char *v24; // [esp+2Ch] [ebp-43Ch] void *v25; // [esp+30h] [ebp-438h] void **v26; // [esp+34h] [ebp-434h] int v27; // [esp+38h] [ebp-430h] __int16 v28; // [esp+40h] [ebp-428h] void **v29; // [esp+44h] [ebp-424h] void **v30; // [esp+48h] [ebp-420h] char v31; // [esp+4Ch] [ebp-41Ch] unsigned __int8 v32; // [esp+4Dh] [ebp-41Bh] int v33; // [esp+50h] [ebp-418h] int v34; // [esp+464h] [ebp-4h] v2 = a2; v3 = this; v23 = this; v25 = a2; if ( !byte_B9E5CC && !byte_B9E5CD ) { v4 = sub_40A910(513700948); sub_492060(v3, (int)v4); return; } if ( a2 && *(_BYTE *)a2 ) { v5 = this[585]; v28 = -20414; sub_905F90(v5, &v28, 2u); v30 = (void **)strlen((const char *)a2); if ( (signed int)v30 > 128 ) v30 = (void **)128; v27 = 0; v6 = (void **)operator new(0x70u); if ( !v6 ) { v24 = 0; std::exception::exception((std::exception *)&v22, (const char *const *)&v24); v22 = &std::bad_alloc::`vftable'; _CxxThrowException(&v22, &_TI2_AVbad_alloc_std__); } v7 = v6; *v6 = v6; v26 = v6; v6[1] = v6; v8 = (int **)v3[176]; v34 = 0; if ( v8 ) { v9 = (int **)sub_60C4F0(v8, (char ***)&v21); LOBYTE(v34) = 1; sub_4DDE00((int **)&v26, v9); LOBYTE(v34) = 0; sub_4E6E90(&v21); if ( v27 ) { memset(&v33, 0, 0x406u); v20 = (size_t)a2; v29 = &v17; sub_4DDC60((char ***)&v17, (int **)&v26); if ( !sub_4D31D0(v17, v18, (int)v19, v20) ) { sub_4E6E90(&v26); return; } v7 = v26; v11 = (void **)*v26; v29 = 0; if ( v11 != v26 ) { v12 = &v33; do { v29 = (void **)((char *)v29 + 1); qmemcpy((char *)v12 + 2, (char *)v11 + 10, 0x65u); *(_WORD *)v12 = *((_WORD *)v11 + 4); v11 = (void **)*v11; v12 = (int *)((char *)v12 + 103); } while ( v11 != v7 ); v3 = v23; v2 = v25; } v20 = 2; v19 = &v31; v13 = v3[585]; v31 = (char)v29; v32 = (unsigned __int8)v30; sub_905F90(v13, &v31, 2u); sub_905F90(v3[585], v2, v32); if ( (signed int)v29 > 0 ) { v14 = &v33; v30 = v29; do { sub_905F90(v3[585], v14, 0x67u); v14 = (int *)((char *)v14 + 103); v30 = (void **)((char *)v30 - 1); } while ( v30 ); } v20 = 0; v19 = 0; goto LABEL_24; } v7 = v26; } v20 = 2; v32 = (unsigned __int8)v30; v10 = v3[585]; v31 = 0; sub_905F90(v10, &v31, 2u); v20 = v32; v19 = (char *)a2; LABEL_24: sub_906000(v3[585], v19, v20); v15 = (void **)*v7; *v7 = v7; v7[1] = v7; if ( v15 != v7 ) { do { v16 = (void **)*v15; operator delete(v15); v15 = v16; } while ( v16 != v7 ); } operator delete(v7); } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; //----- (004D8050) -------------------------------------------------------- int __thiscall sub_4D8050(void *this, int a2, const void *a3) { int v3; // esi int *v4; // eax int v6; // [esp-28h] [ebp-30h] int v7; // [esp-24h] [ebp-2Ch] int v8; // [esp-20h] [ebp-28h] int v9; // [esp-1Ch] [ebp-24h] int v10; // [esp-18h] [ebp-20h] int v11; // [esp-14h] [ebp-1Ch] int v12; // [esp-10h] [ebp-18h] int v13; // [esp-Ch] [ebp-14h] int v14; // [esp-8h] [ebp-10h] int v15; // [esp-4h] [ebp-Ch] v3 = (int)this; v4 = sub_4DE3D0(); v15 = -1; v14 = 1; v4[1] = v3; qmemcpy(&v6, a3, 0x20u); sub_680250(v4, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); return a2; } //----- (004D8090) -------------------------------------------------------- int __thiscall sub_4D8090(void *this, int a2, const void *a3) { int v3; // esi int *v4; // eax int v6; // [esp-28h] [ebp-30h] int v7; // [esp-24h] [ebp-2Ch] int v8; // [esp-20h] [ebp-28h] int v9; // [esp-1Ch] [ebp-24h] int v10; // [esp-18h] [ebp-20h] int v11; // [esp-14h] [ebp-1Ch] int v12; // [esp-10h] [ebp-18h] int v13; // [esp-Ch] [ebp-14h] int v14; // [esp-8h] [ebp-10h] int v15; // [esp-4h] [ebp-Ch] v3 = (int)this; v4 = sub_4DE3D0(); v15 = -1; v14 = 2; v4[1] = v3; qmemcpy(&v6, a3, 0x20u); sub_680250(v4, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); return a2; } //----- (004D80D0) -------------------------------------------------------- int __userpurge sub_4D80D0@(int a1@, double a2@, int a3, int a4, int a5, int a6) { int v6; // ebx int v7; // edi int v8; // edx unsigned int v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax void *v15; // eax _DWORD *v16; // ecx v6 = a1; v7 = 0; if ( sub_6C28F0(a3, a4, a5, a6) ) v7 = a5; switch ( a3 ) { case 2: switch ( a4 ) { case 16: return sub_4B2BF0((_DWORD *)v6, a5, a6); case 18: *(_DWORD *)(a6 + 8) = timeGetTime(); return a5; case 19: return sub_4B8F80((_DWORD *)v6, a5, (void *)a6); case 28: return sub_4B9040((_DWORD *)v6, a5, (_WORD *)a6); case 66: return sub_4CAD80((_DWORD *)v6, a5, (_WORD *)a6); case 69: return sub_4BF140((_DWORD *)v6, a5, (_BYTE *)a6); case 72: return sub_4CCB10((_DWORD *)v6, a5, (_DWORD *)a6); case 73: return sub_4BDD20(a5, (_BYTE *)a6); case 96: return sub_4B5CE0((_DWORD *)v6, a5, (_WORD *)a6); case 98: return sub_4CD560((_DWORD *)v6, a5, a6); case 103: return sub_4CD5F0((_DWORD *)v6, a5, (_WORD *)a6); case 108: return sub_4D0B50((void *)v6, a5, (_DWORD *)a6); case 109: return sub_4D0CA0((void *)v6, a5, (_DWORD *)a6); case 111: return sub_4CE140((_DWORD *)v6, a5, (__int16 *)a6); case 121: return sub_4B6720((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 123: return sub_4CCA90((_DWORD *)v6, a5, (_WORD *)a6); default: return v7; } return v7; case 3: switch ( a4 ) { case 20: return sub_4B9150(v6, v6, v7, a5, a6); case 21: *(_BYTE *)(v6 + 2344) = 0; return v7; case 23: return sub_4C3410((void *)v6, a5, (_WORD *)a6); case 52: return sub_4BDD60((_BYTE *)v6, a5, (_WORD *)a6); default: return v7; } return v7; case 4: if ( a4 <= 323 ) { if ( a4 == 323 ) return sub_4B7180(a5, a6); switch ( a4 ) { case 51: return sub_4B2C20(a5, (int *)a6); case 52: sub_681E70(byte_AD9238, (_BYTE *)a6); return a5; case 53: return sub_4B2C60((_DWORD *)v6, a5, (_BYTE *)a6); case 74: return sub_4B2C90((_DWORD *)v6, a5, (_WORD *)a6); case 77: return sub_4C3480((void *)v6, a5, a6); case 79: return sub_4B9250(v6, v6, a5, a6); case 80: return sub_4CEC50((_BYTE **)v6, a5, a6); case 89: return sub_4CF9B0((_DWORD ***)v6, a5, (char *)a6); case 90: return sub_4CFBC0((int *)v6, a5, a6); case 91: *(_DWORD *)dword_AD9E30 = *(unsigned __int8 *)a6; return a5; case 110: return sub_4B91B0(a5, a6); case 111: v10 = *(_DWORD *)a6; *(_DWORD *)(sub_680740(byte_AD9238) + 55) = v10; return a5; case 150: return sub_4B91F0(a5, a6); case 175: return sub_4D27D0(a5, a6); case 189: return sub_4CAC70((_DWORD *)v6, a5, a6); case 190: return sub_4B4F40((int *)v6, v7, a5, a6); case 198: return sub_4B5CB0(v6, a5, (_BYTE *)a6); case 206: v11 = sub_6CD770(); sub_74AE60(v11, a6); return a5; case 212: return sub_4CD3E0((_DWORD **)v6, a5, (_BYTE *)a6); case 215: v12 = sub_6CD770(); sub_74AF30(v12, a6); return a5; case 217: return sub_4D4730((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 223: return sub_4B6090((_BYTE **)v6, a5, a6); case 228: return sub_4B5D80((_DWORD *)v6, a5, a6); case 231: return sub_4B5E00((_DWORD *)v6, a5, a6); case 234: return sub_4B5E70((_DWORD *)v6, a5, a6); case 237: return sub_4B6200((char **)v6, a5, (unsigned __int8 *)a6); case 240: return sub_4CDA30(v6, v7, a5, a6); case 242: return sub_4D5850((_DWORD *)v6, a5, a6); case 245: return sub_4B6250((_DWORD **)v6, a5, (unsigned __int8 *)a6); case 246: return sub_4B6270((_DWORD **)v6, a5, (const void *)a6); case 278: return sub_4C02A0(a5, (unsigned __int8 *)a6); case 291: return sub_4B6D80((_DWORD *)v6, a5, (_WORD *)a6); case 293: return sub_4CE650((_BYTE **)v6, a5, (_WORD *)a6); case 295: sub_43D820(*(_BYTE **)(v6 + 5132), 0); return a5; case 297: return sub_4CE6A0((_BYTE **)v6, a5, (_WORD *)a6); case 299: sub_43D8B0(*(_BYTE **)(v6 + 5132), 0); return a5; case 300: return sub_4B6E10((int *)v6, a5, a6); case 301: return sub_4B6E50((char **)v6, a5, (_WORD *)a6); case 303: return sub_4C0950((_DWORD *)v6, a5, (_WORD *)a6); default: return v7; } } return v7; case 6: switch ( a4 ) { case 5: return sub_4D7250((int **)v6, a5, (__int16 *)a6); case 9: return sub_4B9250(v6, v6, a5, a6); case 10: return sub_4CEC50((_BYTE **)v6, a5, a6); case 18: return sub_4CF080(v6, v7, a5, a6); case 19: dword_AD8EBC[4147] &= 0xFDu; return a5; case 21: return sub_4C8C40((_DWORD *)v6, a5, (__int16 *)a6); case 23: return sub_4C8D60((_BYTE **)v6, a5, (__int16 *)a6); case 24: return sub_4CF160(v6, v7, a5, a6); case 25: dword_AD8EBC[4147] &= 0xFEu; return a5; case 27: return sub_4B4C30((_DWORD *)v6, a5, (_WORD *)a6); case 29: return sub_4CADB0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 31: return sub_4BF120((_DWORD *)v6, a5, a6); case 32: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v6 + 1292)); v7 = a5; break; case 39: *(_DWORD *)(v6 + 5080) = *(_DWORD *)a6; break; case 40: dword_AD8EBC[4147] |= 4u; v7 = a5; break; case 41: dword_AD8EBC[4147] &= 0xFBu; v7 = a5; break; case 42: sub_4D4CA0((_DWORD *)v6, a5, a6); break; case 43: sub_4B6C40((_DWORD *)v6, a5, (char *)a6); break; case 44: sub_56C7E0(*(_DWORD **)(v6 + 572), *(_DWORD *)a6); break; default: return v7; } return v7; case 7: switch ( a4 ) { case 2: return sub_4B9AD0((int *)v6, a5, a6); case 3: return sub_4B9B40((int *)v6, a5, a6); case 4: return sub_4B9CB0((int *)v6, a5, (__int16 *)a6); case 5: return sub_4B9BA0((int *)v6, a5, (__int16 *)a6); case 6: return sub_4B9690(v6, v8, a5, (unsigned __int16 *)a6); case 7: return sub_4B98F0(v6, v8, a5, (unsigned __int8 *)a6); case 8: return sub_4C35D0((_DWORD ***)v6, a5, (unsigned __int16 *)a6); case 9: return sub_4C3750((int **)v6, a5, (unsigned __int8 *)a6); case 10: return sub_4B2D50((void *)v6, a5, a6); case 11: return sub_4B2D10(a5, (_BYTE *)a6); case 12: return sub_4B9D70(a5, a6); case 13: return sub_4B2EE0(a5, (_BYTE *)a6); case 14: return sub_4D36C0((void ***)v6, a5, a6); case 15: return sub_4B9E20(a5, a6); case 16: return sub_4B9EC0(a5, (_BYTE *)a6); case 17: return sub_4D7540(a5, (unsigned __int16 *)a6); case 18: return sub_4D7560(a5, (unsigned __int8 *)a6); case 19: sub_6E1730(&unk_B9E1CC, (__int16 *)a6); return a5; case 20: return sub_4B2E10(a5, (unsigned __int8 *)a6); case 24: return sub_4BEDB0(a5, (unsigned __int16 *)a6); case 25: return sub_4BEE80(a5, (unsigned __int16 *)a6); case 26: sub_6651F0(dword_AD8C90, (unsigned __int16 *)a6); return a5; case 27: sub_6652E0(dword_AD8C90, (_BYTE *)a6); return a5; case 28: sub_667650(dword_AD8C90, (unsigned __int16 *)a6); return a5; case 29: sub_667760(dword_AD8C90, (_BYTE *)a6); return a5; case 30: return sub_4B43B0(a5, a6); default: return v7; } return v7; case 8: switch ( a4 ) { case 2: return sub_4B9F70((int *)v6, a5, (unsigned __int8 *)a6); case 4: case 6: case 38: return a5; case 9: return sub_4BAB60((int *)v6, a5, a6); case 13: return sub_4C37C0((char **)v6, a5, (unsigned __int8 *)a6); case 14: return sub_4C39E0((_DWORD *)v6, a5, (_WORD *)a6); case 15: return sub_4B30C0((char **)v6, a5, (unsigned __int8 *)a6); case 17: return sub_4CF360((void *)v6, a5, a6); case 19: return sub_4B2FD0((int *)v6, a5, a6); case 21: return sub_4BAEF0((_DWORD ***)v6, a5, a6); case 22: return sub_4C3A40((_DWORD *)v6, a5, (_WORD *)a6); case 24: return sub_4BA660((int *)v6, v6, a5, a5, a6); case 26: return sub_4BA8C0((int *)v6, v6, a5, a5, a6); case 27: return sub_4B2F50(a5, (unsigned int *)a6); case 28: return sub_4BB500((void **)v6, a5, (unsigned __int16 *)a6); case 31: return sub_4BA280((void *)v6, a5, (const char *)a6); case 33: return sub_4BB620(a5, a6); case 35: return sub_4BB690(v7, a5, a6); case 37: return sub_4B3190(a5, (__int16 *)a6); case 40: return sub_4C3B50(v6, a5, (unsigned __int16 *)a6); case 41: return sub_4B3220(a5, (__int16 *)a6); case 43: return sub_4B3270(a5, (_WORD *)a6); case 44: return sub_4B31D0(a5, (__int16 *)a6); case 61: sub_4DE490(0, 4); return a5; case 62: return sub_4B32B0(a5, (unsigned __int16 *)a6); case 63: return sub_4C3C40((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 64: return sub_4BB740((int *)v6, a5, a6); case 65: return sub_4B3300((_DWORD *)v6, a5, (_WORD *)a6); case 66: return sub_4BB7E0((char *)v6, a5, a6); case 67: return sub_4BB880((int *)v6, a5, (__int16 *)a6); case 70: return sub_4C3D00((_DWORD *)v6, a5, (_WORD *)a6); case 71: return sub_4B3060((float *)v6, a5, (unsigned __int16 *)a6); case 72: sub_4F31E0(*(float **)(v6 + 1036)); return a5; case 73: return sub_4C3D50(a5, a5, (unsigned int *)a6); case 74: return sub_4B3330(a5, (unsigned int *)a6); case 76: return sub_4B4580((_DWORD *)v6, a5, (_WORD *)a6); case 77: return sub_4C3E80(a5, (unsigned int *)a6); case 104: return sub_4B4CE0((_DWORD *)v6, a5, (_WORD *)a6); case 105: return sub_4BDA80(a5, a6); case 106: return sub_4BDBC0(a5, a6); case 111: return sub_4B4F00(a5, a6); case 113: return sub_4CD640((void *)v6, a5, a6); case 114: return sub_4BF330(v6, a5, a6); case 116: return sub_4B62F0(v6, v7, a5, a6); case 117: return sub_4B6320(a5, a6); case 118: return sub_4C0060((int *)v6, a5, a6); case 119: return sub_4B6B30((_DWORD *)v6, a5, (unsigned int *)a6); case 120: return sub_4D4B50(a5, (unsigned __int16 *)a6); case 121: return sub_4D5C60(a5, (unsigned __int16 *)a6); case 122: return sub_4B66A0(a5, (__int16 *)a6); case 123: return sub_4D0E30(a5, a6); case 124: return sub_4BFC20(v6, a5, a6); default: return v7; } return v7; case 9: switch ( a4 ) { case 2: return sub_4BB920((_DWORD **)v6, a5, a6); case 11: return sub_4B3380((void *)v6, a5, a6); case 12: return sub_4C3F30((void *)v6, a5, (unsigned __int8 *)a6); case 13: return sub_4BBAF0((void *)v6, a5, (_DWORD *)a6); case 14: return sub_4B33E0((_DWORD *)v6, a5, a6); case 15: return sub_4B3470((_DWORD *)v6, a5, (int *)a6); case 16: nullsub_25(*(_DWORD *)a6); return a5; case 17: return sub_4C4330((_DWORD *)v6, a5, (unsigned int *)a6); case 39: return sub_4D1AC0((_DWORD *)v6, a5, a6); case 40: return sub_4D2120((_DWORD *)v6, a5, a6); case 41: return sub_4D1CB0((void *)v6, a5, *(float *)&a6); case 42: return sub_4CF460((_DWORD *)v6, a5, (_DWORD *)a6); case 52: return sub_4C43A0((_DWORD *)v6, a5, (_WORD *)a6); case 53: *(_DWORD *)(v6 + 2512) = 3; return a5; case 54: return sub_4B3580((int *)v6, a5, (unsigned __int16 *)a6); case 56: return sub_4B35E0((void *)v6, a5, (__int16 *)a6); case 57: return sub_4D2330((int *)v6, a5, (unsigned __int16 *)a6); case 58: return sub_4D39A0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 59: return sub_4D3D00(a5, a5, a6); case 60: return sub_4CF5D0((int ***)v6, a5, (__int16 *)a6); case 61: return sub_4BBEC0(a5, (__int16 *)a6); case 63: return sub_4B34E0((_DWORD *)v6, a5, (__int16 *)a6); case 66: return sub_4B3690((int *)v6, a5, (unsigned __int16 *)a6); case 67: return sub_4B3700((int *)v6, a5, (unsigned __int16 *)a6); case 69: return sub_4B3770((_BYTE *)v6, a5, a6); case 70: return sub_4B37B0(a5, (_DWORD *)a6); case 71: return sub_4D2ED0((volatile LONG **)v6, a5, a6); case 72: return sub_4BBFA0((volatile LONG **)v6, a5, (__int16 *)a6); case 73: return sub_4BC1D0(a5, a6); case 74: return sub_4BC260(a5, (__int16 *)a6); case 75: return sub_4BC320(a5, a6); case 77: return sub_4B3510((float *)v6, a5, (__int16 *)a6); case 78: return sub_4D2980((__int16 *)v6, a5, (unsigned __int16 *)a6); case 79: return sub_4D1390((int *)v6, a5, (__int16 *)a6); case 80: return sub_4D1460((__int16 *)v6, a5, (unsigned __int16 *)a6); case 81: return sub_4D1530((int *)v6, a5, (__int16 *)a6); case 82: return sub_4D1640((int ***)v6, a5, a6); case 83: return sub_4BDA20((_DWORD *)v6, a5, a6); case 85: sub_4CAC20((_DWORD *)v6, a5, (__int16 *)a6); return v7; case 86: return sub_4B4EB0(a5, (__int16 *)a6); case 87: return sub_4BBC30((char *)v6, a5, a6); case 89: return sub_4CF850((void *)v6, a5, (int *)a6); case 90: return sub_4D0180((int ***)v6, a5, (unsigned __int16 *)a6); case 91: return sub_4D0810((int ***)v6, a5, (unsigned __int16 *)a6); case 92: return sub_4B6030((_DWORD **)v6, a5, (__int16 *)a6); case 93: return sub_4BF490((int *)v6, a5, (__int16 *)a6); case 94: return sub_4BF510((_BYTE *)v6, a5, a6); case 95: return sub_4B6AE0((_DWORD *)v6, a5, (int *)a6); default: return v7; } return v7; case 12: switch ( a4 ) { case 1: return sub_4C4560((void *)v6, a5, (unsigned __int16 *)a6); case 2: return sub_4C4F20((_DWORD **)v6, a5, a6); case 4: return sub_4C5290((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 5: return sub_4C5370((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 8: return sub_4C54A0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 10: return sub_4C5540(v6, a5, a6); case 12: return sub_4C5420((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 14: return sub_4C1D70((_DWORD *)v6, a5, (__int16 *)a6); case 17: return sub_4C5880((_DWORD *)v6, a5, (_WORD *)a6); case 19: return sub_4C58E0((_DWORD *)v6, a5, (_WORD *)a6); case 20: return sub_4C5780((void *)v6, a5, a6); case 22: return sub_4C5910((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 24: return sub_4B3800((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 27: byte_ADA230 = 0; return a5; case 29: return sub_4C5CD0((_DWORD *)v6, a5, a6); case 31: return sub_4C5D50((_DWORD *)v6, a5, a6); case 33: return sub_4C5DD0((_DWORD *)v6, a5, a6); case 41: return sub_4C9590(a5, a6); case 43: return sub_4C9660((_DWORD *)v6, a5, (_WORD *)a6); case 45: return sub_4CA2D0((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 46: return sub_4B4C00((_DWORD *)v6, a5, (_WORD *)a6); case 52: return sub_4C9300((_DWORD *)v6, a5, a6); case 56: return sub_4C5230((_DWORD *)v6, a5, (_WORD *)a6); case 58: return a5; case 59: return sub_4B5710((_DWORD *)v6, a5, a6); case 61: return sub_4B5750((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 62: return sub_4CC600((_DWORD *)v6, a5, a6); case 63: return sub_4CC690((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 65: return sub_4CCD70((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 67: return sub_4CCF00((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 69: return sub_4CD060((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 70: return sub_4CD290((_DWORD *)v6, a5, a6); case 73: return sub_4CD980((_DWORD *)v6, a5, (_WORD *)a6); case 75: return sub_4CDFE0((_DWORD *)v6, a5, (_WORD *)a6); case 79: return sub_4C0090((_DWORD *)v6, a5, (_WORD *)a6); case 82: return sub_4B69C0((_DWORD *)v6, a5, (_BYTE *)a6); case 84: return sub_4CE5F0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 86: return sub_4B6CD0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 88: return sub_4B6D30((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 90: return sub_4CE6F0((_DWORD *)v6, a5, (_WORD *)a6); case 91: return sub_4C0A10(a5, a6); case 92: return sub_4B6E80((_DWORD *)v6, a5, (_WORD *)a6); case 93: return sub_4B6EF0((_DWORD *)v6, a5, (__int16 *)a6); case 95: return sub_4CE750((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 96: return sub_4B6F70((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 98: return sub_4B6CA0((_DWORD **)v6, a5, (_WORD *)a6); case 104: return sub_4B6FE0((_DWORD ***)v6, a5, a6); case 106: return sub_4B7050((_DWORD *)v6, a5, (_WORD *)a6); case 108: return sub_4C0BE0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 110: return sub_4B70B0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 112: return sub_4B70D0((_DWORD *)v6, a5, (unsigned __int16 *)a6); default: return v7; } return v7; case 14: switch ( a4 ) { case 3: return sub_4BC350((_DWORD *)v6, a5, (int *)a6); case 7: return sub_4C5EC0(v6, a5, a6); case 9: return sub_4BC450((void *)v6, a5, (unsigned __int8 *)a6); case 11: return sub_4C5FE0(v6, a5, a6); case 21: return sub_4C61C0(v6, a5, a6); case 30: return sub_4C6340((_DWORD ***)v6, a5, a6); case 41: return sub_4C6420(v6, a5, a6); case 50: return sub_4BC4D0((_DWORD *)v6, a5, (_BYTE *)a6); case 51: return sub_4B3860((_DWORD *)v6, a5, (_BYTE *)a6); case 61: sub_6C1480(&dword_B9DC70, (int *)a6); return a5; case 71: sub_6C1440(&dword_B9DC70, (int *)a6); return a5; case 73: return sub_4B3900(a5, (_BYTE *)a6); case 74: return sub_4B3980(a5, (int *)a6); case 76: return sub_4C6550((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 81: return sub_4BC570((_DWORD **)v6, a5, a6); case 83: return sub_4BC5E0((_DWORD *)v6, a5, (_WORD *)a6); case 85: return sub_4B39C0(v6, v7, a5, a6); case 86: return a5; case 91: return sub_4BEFA0((_DWORD *)v6, a5, a6); case 92: return sub_4CC850((_DWORD ***)v6, a5, (_DWORD *)a6); case 93: return sub_4CC940((_DWORD ***)v6, a5, (int *)a6); case 95: return sub_4BF060((_DWORD **)v6, a5, a6); default: return v7; } return v7; case 15: switch ( a4 ) { case 1: return sub_4B3B80((char **)v6, a5, (LPCSTR)a6); case 3: nullsub_18(a6); sub_4AB4D0((_BYTE **)v6); return a5; case 4: nullsub_19(a6); sub_4A6CB0((_DWORD **)v6); return a5; case 5: sub_6313F0((int *)a6); sub_4A6D50((_DWORD **)v6); return a5; case 6: return a5; case 7: v13 = sub_40C190(779056276); goto LABEL_329; case 8: return sub_4B3BD0((_DWORD *)v6, a5, (_BYTE *)a6); case 9: sub_631560((_WORD *)a6); sub_4AB4D0((_BYTE **)v6); return a5; case 10: sub_6319F0((_WORD *)a6); sub_4A6CB0((_DWORD **)v6); return a5; case 11: return sub_4BC6A0((_DWORD **)v6, a5, (_WORD *)a6); case 14: return sub_4B6C80((_DWORD **)v6, a5, a6); case 15: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v6 + 952)); return a5; case 16: sub_4A6020((_DWORD *)v6, 1); return a5; default: return v7; } return v7; case 17: switch ( a4 ) { case 1: return sub_4D4230(v6, a5, a6); case 8: return sub_4D3FE0((_DWORD *)v6, a5, (__int16 *)a6); case 12: v15 = sub_6CD770(); sub_74B090(v15, (unsigned __int16 *)a6); return a5; case 13: return sub_4B4310((void *)v6, a5, (_BYTE *)a6); case 16: case 23: return a5; case 18: v13 = sub_40C190(-1862477369); goto LABEL_329; case 19: return sub_4B4F80((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 21: return sub_4B5A70((_DWORD **)v6, a5, (_WORD *)a6); case 30: return sub_4BFC80(a5, (_DWORD *)a6); case 32: return sub_4CE480((_DWORD *)v6, a5, (_WORD *)a6); default: return v7; } return v7; case 18: switch ( a4 ) { case 4: return sub_4C6720(v6, a5, a6); case 5: v13 = sub_40C190(-2002271783); goto LABEL_329; case 14: v13 = sub_40C190(877163883); goto LABEL_329; case 15: return sub_4C6AE0((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 16: return sub_4C6BE0(v6, a5, a6); case 20: return sub_4C6B20((int **)v6, a5, a6); case 30: return sub_4BC720((_DWORD **)v6, a5, (unsigned int *)a6); case 31: return sub_4BC850(a5, a6); case 33: return sub_4B3C10(a5, (unsigned __int16 *)a6); case 35: return sub_4C6C30(v6, a5, a6); case 39: return sub_4C6940((_DWORD ***)v6, a5, (__int16 *)a6); case 40: return sub_4BD7A0(a5, (__int16 *)a6); case 41: sub_5975F0(*(char **)(v6 + 960), 3, 1); return a5; case 43: return a5; case 44: return sub_4B57E0(a5, (_WORD *)a6); case 45: return sub_4B6130(a5, a6); default: return v7; } return v7; case 19: switch ( a4 ) { case 2: return sub_4C6C70(v6, a5, a6); case 4: return sub_4C6DE0((_DWORD *)v6, a5, a6); case 8: return sub_4C6E50((_DWORD *)v6, a5, a6); case 9: return sub_4C6EC0((int *)v6, a5, (__int16 *)a6); case 11: return sub_4C6FD0((_DWORD **)v6, a5, a6); case 12: return sub_4C7010((_DWORD **)v6, a5, a6); case 14: v13 = sub_40C190(1253278094); goto LABEL_329; case 15: return sub_4C7080((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 16: return sub_4B3C40(a5, (unsigned __int8 *)a6); case 18: v13 = sub_40C190(-1800239915); goto LABEL_329; case 19: return sub_4BC920((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 20: sub_633600(*(unsigned __int8 *)a6); return a5; case 22: v13 = sub_40C190(-1727014436); goto LABEL_329; case 23: case 33: return a5; case 24: return sub_4B3CA0((_DWORD ***)v6, a5, (__int64 *)a6); case 26: v13 = sub_40C190(-1802078511); goto LABEL_329; case 27: sub_6333D0(1); return a5; case 28: sub_6333C0(1); return a5; case 29: return sub_4B3D30((_DWORD ***)v6, a5, a6); case 30: sub_6333C0(0); return a5; case 32: v13 = sub_40C190(-1998010431); goto LABEL_329; case 34: sub_633400(1); return a5; case 35: return sub_4C71E0((_DWORD *)v6, a5, a6); case 36: return sub_4C71B0((_DWORD *)v6, a5, a6); default: return v7; } return v7; case 20: switch ( a4 ) { case 3: return sub_4BC9E0(a5, (__int16 *)a6); case 4: return sub_4BCA90(a5, (__int16 *)a6); case 5: v13 = sub_40C190(-755182111); goto LABEL_329; case 6: v13 = sub_40C190(-436420129); goto LABEL_329; case 8: return sub_4C7240((char *)v6, a5, a6); case 10: return sub_4C7370((char *)v6, a5, a6); case 11: return sub_4C7470(a5, (__int16 *)a6); case 12: return sub_4C74C0(a5, (__int16 *)a6); default: return v7; } return v7; case 21: switch ( a4 ) { case 2: return sub_4C7510(v6, a5, a6); case 3: return sub_4C76B0((_DWORD *)v6, a5, (int *)a6); case 6: return sub_4C77F0(v6, a5, a6); case 7: return sub_4B3D80((int *)v6, a5, (unsigned __int8 *)a6); case 8: return sub_4B3DE0((_DWORD **)v6, a5, (_DWORD *)a6); case 9: return sub_4C7910(v6, a5, a6); case 10: return sub_4C7A10(v6, a5, a6); case 11: return sub_4C7AD0(v6, a5, a6); case 12: return sub_4C7B40(v6, a5, a6); case 13: return sub_4B3E10((_DWORD **)v6, a5, (int *)a6); case 14: return sub_4B3EB0((_DWORD **)v6, a5, a6); case 15: return sub_4B3F40((_DWORD **)v6, a5, a6); case 30: return sub_4B3FC0((_DWORD *)v6, a5, (unsigned int *)a6); case 32: return sub_4C7C30((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 34: return sub_4C7CF0(v6, a5, a6); case 36: return sub_4CF8C0(v6, v7, a5, (_DWORD *)a6); case 37: return sub_4C7DB0(v6, a5, a6); default: return v7; } return v7; case 22: switch ( a4 ) { case 4: sub_6106B0(*(_DWORD **)(v6 + 768), a6); return a5; case 6: return sub_4C7DE0(v6, a5, a6); case 8: return sub_4C7ED0(v6, a5, a6); case 10: case 12: case 25: return a5; case 11: return sub_4B40D0(v6, a5, a6); case 18: return sub_4BCAE0((int *)v6, a5, a6); case 19: return sub_4BCB60((int *)v6, a5, a6); case 20: return sub_4BCBE0((_DWORD ***)v6, a5, (unsigned __int8 *)a6); case 24: return sub_4B4140((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 28: return sub_4B4000((_DWORD *)v6, a5, (_DWORD *)a6); case 29: return sub_4B4030((_DWORD *)v6, a5, (_WORD *)a6); case 30: return sub_4B4050((int **)v6, a5, (unsigned __int16 *)a6); case 31: return sub_4B40A0((_DWORD *)v6, a5, (_WORD *)a6); case 33: return sub_4BCCB0((_DWORD *)v6, a5, (_BYTE *)a6); case 34: return sub_4B4D10((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 35: return sub_4CA770((_DWORD *)v6, a5, (_WORD *)a6); case 36: return sub_4CFEE0((_DWORD *)v6, a5, a6); case 37: return sub_4B4D50((_DWORD *)v6, a5, (int *)a6); case 38: return sub_4B4DD0((_DWORD *)v6, a5, (_WORD *)a6); case 40: return sub_4CE1D0((_DWORD *)v6, a5, (_WORD *)a6); case 41: return sub_4BFCB0((void *)v6, a5, a6); case 43: return sub_4CE230((_DWORD *)v6, a5, (_WORD *)a6); case 44: return sub_4D0E90((_DWORD *)v6, a5, a6); case 45: return sub_4D10E0((_DWORD *)v6, a5, a6); case 46: return sub_4CE2C0((_DWORD *)v6, a5, (_DWORD *)a6); case 47: return sub_4CE350((_DWORD *)v6, a5, (_BYTE *)a6); case 48: v14 = sub_40A910(624511521); sub_492060((_DWORD *)v6, (int)v14); return a5; case 50: return sub_4B67D0((_DWORD *)v6, a5, a6); case 53: return sub_4CE420((_DWORD *)v6, a5, (_WORD *)a6); case 54: return sub_4B6B50((_DWORD *)v6, a5, a6); case 56: return sub_4CE4B0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 57: return sub_4B6BF0((_DWORD *)v6, a5, a6); case 58: dword_AD8EBC[2952] = *(_BYTE *)a6; return a5; case 60: return sub_4C7F30((_DWORD *)v6, a5, a6); case 61: return sub_4C8020((_DWORD *)v6, a5, (unsigned int *)a6); default: return v7; } return v7; case 23: switch ( a4 ) { case 2: return sub_4C80B0((_DWORD *)v6, a5, a6); case 3: v13 = sub_40C190(-2047229489); LABEL_329: sub_492060((_DWORD *)v6, (int)v13); LABEL_330: v7 = a5; break; case 13: sub_6850C0(&byte_ADA230, *(_WORD *)a6); v7 = a5; break; } return v7; case 24: switch ( a4 ) { case 2: return sub_4C3060((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 3: return sub_4B2B50(a5, a6); case 4: return sub_4C32C0(v6, a5, a6); } return v7; case 25: if ( a4 == 2 ) return sub_4D5230((_DWORD *)v6, a5, (_BYTE *)a6); return v7; case 26: switch ( a4 ) { case 2: return sub_4C2260(v6, v7, a5, (unsigned __int16 *)a6); case 3: return sub_4B8AD0((int *)v6, v7, a5, a6); case 5: return sub_4B2B00((int *)v6, a5, (_WORD *)a6); case 6: return sub_4B8B60((int *)v6, a5, a5, (__int16 *)a6); case 8: return sub_4C2530((int *)v6, a5, (unsigned __int16 *)a6); case 9: return sub_4C2840((int *)v6, a5, (unsigned __int16 *)a6); case 11: return sub_4C2B40((int *)v6, a5, a6); case 12: return sub_4C2D60((int *)v6, a5, (_WORD *)a6); case 14: return sub_4C2080((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 15: return sub_4B2A90((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 17: sub_590390(*(_DWORD *)(v6 + 740), 0); return a5; case 18: return sub_4C2440((int *)v6, a5, (unsigned __int16 *)a6); case 20: return sub_4C2FB0((_DWORD *)v6, a5, (_WORD *)a6); case 22: return sub_4D4FD0((_WORD **)v6, a5, a6); case 23: return sub_4C3010((_DWORD *)v6, a5, (__int16 *)a6); default: return v7; } return v7; case 27: switch ( a4 ) { case 1: return sub_4BCD40(a5, (_DWORD *)a6); case 2: case 3: return a5; case 4: return sub_4C8210((_DWORD **)v6, a5, (int *)a6); case 5: return sub_4D8050((void *)v6, a5, (const void *)a6); case 7: return sub_4D8090((void *)v6, a5, (const void *)a6); case 9: return sub_4BCE00((int *)v6, a5, a6); case 10: return sub_4B41B0(a5, (unsigned __int8 *)a6); case 11: return sub_4BCE70((int *)v6, a5, a6); case 12: return sub_4B4260((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 13: return sub_4BCF00(v6, a5, a6); case 14: return sub_4BCEA0(a5, (char *)a6); case 15: sub_664A30(dword_AD8C90, a6); return a5; case 16: return sub_4BD6C0((float *)v6, a5, (_BYTE *)a6); case 17: return sub_4D4860((_DWORD ***)v6, a5, a6); case 18: return sub_4D0DF0(a5, (const char *)a6); case 20: return sub_4BF710((_DWORD *)v6, a5, a6); case 21: return sub_4D59B0(a5, (const char *)a6); case 22: return sub_4B62D0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 23: return sub_4B6390((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 24: return sub_4BFF70(a5, a6); case 25: return sub_4B6940((_DWORD *)v6, a5, a6); case 26: return sub_4C0420((_DWORD *)v6, a5, a6); case 27: return sub_4D4C00((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 28: return sub_4C0590((_DWORD *)v6, a5, (_BYTE *)a6); case 29: return sub_4B6B90((_DWORD *)v6, a5, a6); case 30: return sub_4D5F20(a5, (unsigned int *)a6); case 31: sub_6AC9F0(&unk_B91250, 1); return a5; case 32: return sub_4B65C0((_DWORD *)v6, a5, (_BYTE *)a6); case 33: return sub_4BFBE0((_DWORD *)v6, a5, a6); case 34: return sub_4B6670((_DWORD *)v6, a5, (unsigned int *)a6); default: return v7; } return v7; case 28: switch ( a4 ) { case 60: return a5; case 68: return sub_4B5BC0((_DWORD *)v6, a5, (_WORD *)a6); case 70: return sub_4BF2A0((_DWORD *)v6, a5, (_WORD *)a6); } return v7; case 29: switch ( a4 ) { case 116: return sub_4BB0E0((_DWORD ***)v6, a5, a6); case 117: return sub_4C3A90((_DWORD *)v6, a5, (_WORD *)a6); case 141: return sub_4D4D90(a5, (unsigned __int16 *)a6); case 146: return sub_4C9460((_DWORD *)v6, a5, a6); default: return v7; } return v7; case 31: switch ( a4 ) { case 2: return sub_4C8910(a5, a6); case 3: return sub_4C89C0((_DWORD *)v6, a5, (_WORD *)a6); case 5: return sub_4B4350((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 8: return sub_4C8AB0(a5, a6); case 10: return sub_4C8B70(a5, a6); default: return v7; } return v7; case 32: switch ( a4 ) { case 2: return sub_4C8470((_DWORD *)v6, a5, a6); case 4: return sub_4C87D0((_DWORD *)v6, a5, a6); case 6: return sub_4C8570((_DWORD ***)v6, a5, (__int16 *)a6); } return v7; case 35: switch ( a4 ) { case 2: case 78: case 81: case 84: case 87: case 88: return a5; case 4: return sub_4D75B0((_DWORD *)v6, a5, (_WORD *)a6); case 5: sub_6E1730(&unk_B9E1CC, (__int16 *)(a6 + 2)); return a5; case 8: return sub_4B46F0(a5, (unsigned __int8 *)a6); case 9: return sub_4C8ED0((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 11: return sub_4D7790((_DWORD *)v6, a5, a6); case 12: return sub_4BD4C0((_DWORD *)v6, a5, a6); case 13: return sub_4BD460((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 15: return sub_4BD500((_DWORD *)v6, a5, a6); case 17: return sub_4B47B0((_DWORD *)v6, a5, (_WORD *)a6); case 25: return sub_4BD2A0((_DWORD *)v6, a5, (_WORD *)a6); case 27: return sub_4CFE20((_DWORD *)v6, v7, a5, (_WORD *)a6); case 28: return sub_4C9060(a5, (_BYTE *)a6); case 30: return sub_4B46C0((_DWORD *)v6, a5, (_WORD *)a6); case 32: return sub_4B45B0((_DWORD *)v6, a5, (_WORD *)a6); case 33: return sub_4B45E0(a5, a6); case 35: return sub_4BD3C0((_DWORD *)v6, a5, (_WORD *)a6); case 36: return sub_4B4620(a5, (_BYTE *)a6); case 38: return sub_4B4690((_DWORD *)v6, a5, (_WORD *)a6); case 39: return sub_4BD400((_DWORD *)v6, a5, a6); case 41: return sub_4B47E0((_DWORD *)v6, a5, (_WORD *)a6); case 42: return sub_4BD570((int *)v6, a5, a6); case 44: return sub_4B4810((_DWORD *)v6, a5, (_WORD *)a6); case 45: return sub_4D5530((_DWORD *)v6, a5, (_BYTE *)a6); case 47: return sub_4B4840((_DWORD *)v6, a5, (_WORD *)a6); case 48: return sub_4D7A00((_DWORD **)v6, a5, (char *)a6); case 49: return sub_4D3070(a5, (unsigned __int16 *)a6); case 51: return sub_4B4870((_DWORD *)v6, a5, (_WORD *)a6); case 52: return sub_4C91C0((_DWORD *)v6, a5, a6); case 54: return sub_4B48A0((_DWORD *)v6, a5, (_WORD *)a6); case 56: return sub_4B48E0((_DWORD *)v6, a5, (signed int *)a6); case 62: return sub_4B4910((_DWORD *)v6, a5, (_WORD *)a6); case 63: return sub_4B4940(a5, a6); case 65: return sub_4B2E70((_DWORD *)v6, a5, (__int16 *)a6); case 66: return sub_4CF240(a5, (unsigned __int16 *)a6); case 68: return sub_4BD640((_DWORD *)v6, a5, (_WORD *)a6); case 69: return sub_4C92A0((_DWORD *)v6, a5, (_BYTE *)a6); case 73: return sub_4B4980((_DWORD *)v6, a5, (_WORD *)a6); case 74: return sub_4C9240((_DWORD *)v6, a5, a6); case 75: return sub_4B49B0((_DWORD **)v6, a5, (_WORD *)a6); case 76: return sub_4B4A10((_DWORD **)v6, a5, a6); case 79: return sub_4B4A50((_DWORD **)v6, a5, (_WORD *)a6); case 97: return sub_4B4B40(a5, (unsigned __int8 *)a6); case 99: return sub_4BE9A0((_DWORD *)v6, a5, a6); case 100: return sub_4BEA90(a5, (_WORD *)a6); case 102: return sub_4B55D0((_DWORD ***)v6, a5, (_WORD *)a6); case 103: return sub_4BEB50((_DWORD ***)v6, (float *)v6, v7, a5, a5, (_WORD *)a6); default: return v7; } return v7; case 36: switch ( a4 ) { case 3: return sub_4CFDA0((_DWORD *)v6, a5, a6); case 4: return sub_4B44A0((_DWORD *)v6, a5, (int *)a6); case 11: return sub_4B44E0((_WORD **)v6, a5, (_WORD *)a6); case 12: return sub_4BD130(a5, (unsigned __int8 *)a6); case 13: return sub_4B4510(a5, (unsigned __int8 *)a6); case 14: case 15: return a5; case 16: return sub_4B4560((_DWORD *)v6, a5, (char *)a6); default: return v7; } return v7; case 37: switch ( a4 ) { case 2: return sub_4C96E0((_DWORD **)v6, a5, (unsigned __int16 *)a6); case 3: return sub_4CA250((_DWORD *)v6, a5, (_DWORD *)a6); case 4: return sub_4C99A0((_DWORD **)v6, a5, (int *)a6); case 7: return sub_4C98D0((_DWORD *)v6, a5, (char *)a6); case 11: return sub_4C9810((char **)v6, a5, (int *)a6); case 20: sub_52E320(*(_DWORD **)(v6 + 888), a6); return a5; case 21: return sub_4C9C00((_DWORD **)v6, a5, (unsigned __int16 *)a6); case 22: return sub_4C9CD0((_DWORD *)v6, a5, (int *)a6); case 23: if ( !a6 ) goto LABEL_330; sub_52E3B0(*(_DWORD **)(v6 + 888), (_DWORD *)a6); return a5; case 24: return sub_4C9B10((char **)v6, a5, a6); case 25: return sub_4B4BB0((_DWORD **)v6, a5, a6); case 26: return sub_4C9DA0((_DWORD *)v6, a5, (_BYTE *)a6); case 27: return sub_4C9E80((_DWORD *)v6, a5, (_DWORD *)a6); case 61: return sub_4CA7A0((void **)v6, a5, a6); case 65: return sub_4CA830((_DWORD *)v6, a5, (_WORD *)a6); case 69: return sub_4CA860((_DWORD *)v6, a5, (unsigned int *)a6); default: return v7; } return v7; case 38: switch ( a4 ) { case 105: return sub_4BB2F0((_DWORD ***)v6, a5, a6); case 106: return sub_4C3AE0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 110: return sub_4CA4C0((_DWORD *)v6, a5, (unsigned __int16 *)a6); } return v7; case 40: if ( a4 == 6 ) return sub_4CA3E0((_DWORD *)v6, a5, (_BYTE *)a6); return v7; case 41: switch ( a4 ) { case 12: return sub_4B6A30((_DWORD *)v6, a5, a6); case 18: return sub_4B7110((_DWORD *)v6, a5, a6); case 24: return sub_4B7150((_DWORD *)v6, a5, (_WORD *)a6); case 33: return sub_4CE810((_DWORD *)v6, a5, a6); case 34: return sub_4CE880((_DWORD *)v6, a5, a6); case 35: return sub_4CE8F0((_DWORD *)v6, a5, a6); case 36: return sub_4CE960((_DWORD *)v6, a5, (_WORD *)a6); case 37: return sub_4CE9B0(a5, a6); default: return v7; } return v7; case 42: switch ( a4 ) { case 2: return sub_4BD860((_DWORD *)v6, a5, (_WORD *)a6); case 6: return sub_4CA630(v6, a5, a6); case 10: return sub_4B4CA0((_DWORD *)v6, a5, a6); case 14: return sub_4BD930((_DWORD *)v6, a5, (_WORD *)a6); default: return v7; } return v7; case 44: switch ( a4 ) { case 2: return sub_4CADF0((_DWORD *)v6, a5, a6); case 3: return sub_4CAE60((_DWORD ***)v6, a5, a6); case 5: return sub_4BDE80((_DWORD ***)v6, a5, a6); case 6: return sub_4CB010((char *)v6, a5, a6); case 9: return sub_4B5150((_DWORD *)v6, a5, (_WORD *)a6); case 10: return sub_4CB0F0((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 13: return sub_4CB300((_DWORD *)v6, a5, a6); case 14: return sub_4D0020((_DWORD *)v6, a5, (int *)a6); case 16: return sub_4B5180((_DWORD *)v6, a5, (_WORD *)a6); case 17: return sub_4CB4B0((_DWORD *)v6, a5, a6); case 18: return sub_4CB530((_DWORD *)v6, a5, a6); case 21: return sub_4B5240((_DWORD *)v6, a5, (_WORD *)a6); case 22: return sub_4CB710((_DWORD *)v6, a5, a6); case 25: return sub_4B5270((_DWORD *)v6, a5, a6); case 26: return sub_4CBA00((_DWORD *)v6, a5, (_DWORD *)a6); case 27: return sub_4CBA70((char *)v6, a5, a6); case 30: return sub_4B4FB0((_DWORD **)v6, a5, a6); case 32: return sub_4B5080((_DWORD ***)v6, a5, a6); case 33: return sub_4B51B0((_DWORD ***)v6, a5, (int *)a6); case 34: return sub_4B52A0((_DWORD **)v6, a5, a6); case 35: return sub_4BE1B0((_DWORD ***)v6, a5, (_BYTE *)a6); case 38: return sub_4B5340((_DWORD **)v6, a5, (_BYTE *)a6); case 40: return sub_4B5460((_DWORD *)v6, a5, a6); case 41: return sub_4BE450((_DWORD *)v6, a5, (unsigned __int8 *)a6); case 44: return sub_4B5490((_DWORD *)v6, a5, a6); case 45: case 50: v16 = *(_DWORD **)(v6 + 724); if ( !v16 ) goto LABEL_330; sub_582B90(v16); return a5; case 46: return sub_4CBE90((_DWORD *)v6, a5, (int *)a6); case 49: return sub_4B54E0((_DWORD *)v6, a5, a6); case 51: return sub_4CC010((_DWORD *)v6, a5, (int *)a6); case 54: return sub_4B5530((_DWORD *)v6, a5, a6); case 55: case 60: return a5; case 56: return sub_4CC130((_DWORD *)v6, a5, (int *)a6); case 59: return sub_4B5560((_DWORD *)v6, a5, a6); case 61: return sub_4CC2C0((_DWORD *)v6, a5, (int *)a6); case 64: return sub_4CC360((_DWORD *)v6, a5, (_WORD *)a6); case 65: return sub_4BE7A0((_DWORD ***)v6, a5, (unsigned __int8 *)a6); case 67: return sub_4CC390((_DWORD *)v6, a5, (_WORD *)a6); case 68: return sub_4CC3F0((void *)v6, a5, (const char *)a6); default: return v7; } return v7; case 45: if ( a4 == 13 ) return sub_4B5840((int **)v6, a5, a6); if ( a4 != 19 ) return v7; return sub_4CCB80((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 48: switch ( a4 ) { case 2: return sub_4B29A0(v6, v7, a5, (_BYTE *)a6); case 4: return sub_4B29C0((_DWORD *)v6, a5, (_WORD *)a6); case 6: return sub_4B8130((_DWORD *)v6, a5, (_WORD *)a6); case 9: return sub_4B2970((_DWORD *)v6, a5, a6); case 10: return sub_4B2A10((_DWORD *)v6, a5, a6); case 13: return sub_4B2A30((_DWORD *)v6, a5, (int *)a6); case 15: return sub_4B2A50((_DWORD *)v6, a5, (_BYTE *)a6); case 17: return sub_4B2A70(v6, v7, a5, (char *)a6); default: return v7; } return v7; case 49: switch ( a4 ) { case 5: return sub_4B5EE0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 6: return sub_4B5FA0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 7: return sub_4CD720(v6, a2, a5, (unsigned __int16 *)a6); case 11: return sub_4D5670((_DWORD *)v6, a5, a6); case 15: return sub_4CD800((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 19: return sub_4CD890((_DWORD *)v6, a5, (unsigned __int16 *)a6); default: return v7; } return v7; case 51: switch ( a4 ) { case 2: return sub_4CDAF0((int *)v6, a5, (unsigned __int16 *)a6); case 3: return sub_4B63F0((_DWORD *)v6, a5, (_WORD *)a6); case 4: return sub_4BF890((int *)v6, a5, a6); case 6: return sub_4CDC50((_DWORD *)v6, a5, a6); case 7: return sub_4B6420((_DWORD *)v6, a5, (_WORD *)a6); case 8: return sub_4BF9B0((int *)v6, a5, a6); case 9: return sub_4B6450((_DWORD *)v6, a5, (_WORD *)a6); case 10: return sub_4CDDF0((_DWORD *)v6, a5, (_WORD *)a6); case 13: return sub_4B6480(a5, a6); default: return v7; } return v7; case 53: switch ( a4 ) { case 5: return sub_4D4990((_DWORD *)v6, a5, a6); case 8: return sub_4CDE60((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 10: return sub_4CDEF0((_DWORD *)v6, a5, (unsigned __int16 *)a6); case 17: return sub_4B6520((_DWORD *)v6, a5, (_WORD *)a6); case 19: return sub_4BFB70(a5, a6); default: return v7; } return v7; default: return v7; } } // 631280: using guessed type int __cdecl nullsub_18(_DWORD); // 631290: using guessed type int __cdecl nullsub_19(_DWORD); // 680CB0: using guessed type _DWORD __stdcall nullsub_25(_DWORD); // ADA230: using guessed type char byte_ADA230; // B9DC70: using guessed type int dword_B9DC70; //----- (004DBE80) -------------------------------------------------------- _DWORD *sub_4DBE80() { _DWORD *result; // eax _DWORD *v1; // eax result = (_DWORD *)dword_ADB460; if ( !dword_ADB460 ) { v1 = operator new(0x1Cu); if ( v1 ) { result = sub_68CEC0(v1); dword_ADB460 = (int)result; } else { result = 0; dword_ADB460 = 0; } } return result; } // ADB460: using guessed type int dword_ADB460; //----- (004DBF00) -------------------------------------------------------- int __cdecl sub_4DBF00(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA7C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004DBF50) -------------------------------------------------------- int __cdecl sub_4DBF50(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA80; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA80: using guessed type int dword_ACDA80; //----- (004DBFA0) -------------------------------------------------------- int __cdecl sub_4DBFA0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACEA9C: using guessed type int dword_ACEA9C; //----- (004DBFF0) -------------------------------------------------------- BOOL __thiscall sub_4DBFF0(_DWORD *this, _DWORD *a2) { return *this != *a2 || this[1] != a2[1] || this[2] != a2[2] || this[3] != a2[3] || this[4] != a2[4]; } //----- (004DC030) -------------------------------------------------------- _DWORD *__thiscall sub_4DC030(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 21) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 21) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 21) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 21) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 21) ) goto LABEL_11; return result; } //----- (004DC090) -------------------------------------------------------- char *__cdecl sub_4DC090(int a1, char *a2) { char *result; // eax char v3; // cl char v4[4]; // [esp+Ch] [ebp-18h] int v5; // [esp+10h] [ebp-14h] int v6; // [esp+14h] [ebp-10h] int v7; // [esp+18h] [ebp-Ch] int v8; // [esp+1Ch] [ebp-8h] result = (char *)a1; if ( strlen((const char *)a1) < 0x13 ) { *(_DWORD *)v4 = 0; v5 = 0; v6 = 0; v7 = 0; v8 = 0; do { v3 = *result; v4[(_DWORD)result - a1] = *result; ++result; } while ( v3 ); *((_DWORD *)a2 + 4) = 0; *((_DWORD *)a2 + 3) = 0; *((_DWORD *)a2 + 2) = 0; *((_DWORD *)a2 + 1) = 0; *(_DWORD *)a2 = 0; result = strncpy(a2, v4, 0x14u); } return result; } //----- (004DC110) -------------------------------------------------------- char __cdecl sub_4DC110(char a1, char a2) { char result; // al result = a1; if ( a1 ) { switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: result = a2 == 1; break; case 6: case 7: case 8: case 9: case 0xA: result = a2 == 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: result = a2 == 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: result = a2 == 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: result = a2 == 21; break; case 0x1A: case 0x1B: result = a2 == 26; break; default: result = a2 == 0; break; } } return result; } //----- (004DC1F0) -------------------------------------------------------- float *__thiscall sub_4DC1F0(void *this, float *a2, float *a3) { void *v3; // esi float *result; // eax int v5; // edx int v6; // ecx float v7; // ecx float v8; // edx int v9; // [esp+4h] [ebp-24h] int v10; // [esp+8h] [ebp-20h] int v11; // [esp+Ch] [ebp-1Ch] float v12; // [esp+10h] [ebp-18h] float v13; // [esp+14h] [ebp-14h] float v14; // [esp+18h] [ebp-10h] float v15; // [esp+1Ch] [ebp-Ch] float v16; // [esp+20h] [ebp-8h] float v17; // [esp+24h] [ebp-4h] float v18; // [esp+34h] [ebp+Ch] float v19; // [esp+34h] [ebp+Ch] v3 = this; (*(void (__thiscall **)(void *, int *))(*(_DWORD *)this + 220))(this, &v9); (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v3 + 200))(v3, &v12); v15 = *a3 - v12; v16 = a3[1] - v13; v17 = a3[2] - v14; v18 = v16 * v16 + v15 * v15 + v17 * v17; v19 = sqrt(v18); result = a2; if ( v19 >= 1.0 ) { v7 = v16; *a2 = v15; v8 = v17; a2[1] = v7; a2[2] = v8; } else { v5 = v10; *(_DWORD *)a2 = v9; v6 = v11; *((_DWORD *)a2 + 1) = v5; *((_DWORD *)a2 + 2) = v6; } return result; } //----- (004DC2A0) -------------------------------------------------------- int __thiscall sub_4DC2A0(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 >= 4 ) result = 0; else result = this[a2 + 306]; return result; } //----- (004DC2C0) -------------------------------------------------------- int *__thiscall sub_4DC2C0(int *this, int *a2) { int v2; // eax int *v3; // esi v2 = *a2; v3 = this; *this = *a2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return v3; } //----- (004DC2F0) -------------------------------------------------------- int sub_4DC2F0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD920 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD920: using guessed type int dword_ACD920; //----- (004DC310) -------------------------------------------------------- int sub_4DC310() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA7C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004DC330) -------------------------------------------------------- int sub_4DC330() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA84 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA84: using guessed type int dword_ACDA84; //----- (004DC350) -------------------------------------------------------- int __cdecl sub_4DC350(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (004DC370) -------------------------------------------------------- char *__cdecl sub_4DC370(int a1, int a2) { int v2; // esi int v3; // ecx int v4; // eax int v5; // esi int v6; // eax char *result; // eax int v8; // [esp-4h] [ebp-Ch] v2 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a1) ) return (char *)&byte_9A8050; if ( (unsigned __int16)a1 > *(_WORD *)(v2 + 200) ) return (char *)&byte_9A8050; v3 = *(_DWORD *)(v2 + 196); if ( !*(_DWORD *)(v3 + 4 * (unsigned __int16)a1) ) return (char *)&byte_9A8050; v4 = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); if ( !v4 ) return (char *)&byte_9A8050; v5 = v4 + 34; v6 = sub_74CC90(dword_B9DE68, a1, a2); if ( !v6 ) return (char *)&byte_9A8050; v8 = v6 + 19; if ( *(_BYTE *)(v6 + 3) ) result = sub_7549E0("%s %s %s", v6 + 3, v5, v8); else result = sub_7549E0("%s %s", v5, v8); return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (004DC400) -------------------------------------------------------- int __thiscall sub_4DC400(_DWORD **this, __int64 a2) { _DWORD **v2; // edi signed __int64 v3; // rax signed __int64 v4; // rax signed __int64 v5; // rax signed __int64 v6; // rax char v8; // [esp+Ch] [ebp-84h] v2 = this; v3 = sub_680E90(a2); sprintf(&v8, "%I64d", v3); (*(void (__stdcall **)(char *))(*v2[91] + 472))(&v8); v4 = sub_680EB0(a2); sprintf(&v8, "%I64d", v4); (*(void (__stdcall **)(char *))(*v2[90] + 472))(&v8); v5 = sub_680F00(a2); sprintf(&v8, "%I64d", v5); (*(void (__stdcall **)(char *))(*v2[89] + 472))(&v8); v6 = sub_680F60(a2); sprintf(&v8, "%I64d", v6); (*(void (__stdcall **)(char *))(*v2[88] + 472))(&v8); return (*(int (__stdcall **)(bool))(*v2[94] + 240))(a2 != 0); } //----- (004DC520) -------------------------------------------------------- bool __thiscall sub_4DC520(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { int v6; // eax bool result; // al v6 = sub_74DA80(this + 90, &a2); if ( v6 ) result = *(_BYTE *)(v6 + 20) == 1; else result = 0; return result; } //----- (004DC550) -------------------------------------------------------- int __thiscall sub_4DC550(float *this) { float *v1; // esi int v2; // ebx int result; // eax unsigned int i; // edi int v5; // ecx _DWORD *v6; // edi _DWORD *v7; // ST04_4 _DWORD *v8; // edi _DWORD *v9; // ST04_4 v1 = this; v2 = *((_DWORD *)this + 4); result = 0; if ( v2 ) { for ( i = 0; i < *(_DWORD *)(v2 + 72); ++i ) { v5 = *(_DWORD *)(*(_DWORD *)(v2 + 64) + 4 * i); if ( v5 ) { sub_80D580(v5, 0.0, 0); result = 0; } } } v1[7] = -6.8056465e38/*NaN*/; v1[8] = -3.4028235e38; *((_BYTE *)v1 + 40) = 0; v1[11] = 0.0; v1[9] = 3.4028235e38; *((_BYTE *)v1 + 41) = 0; v1[12] = 3.4028235e38; v1[13] = -3.4028235e38; v1[15] = 0.0; v1[14] = -3.4028235e38; v1[16] = -6.8056465e38/*NaN*/; v1[17] = 0.0; v1[18] = -6.8056465e38/*NaN*/; v1[19] = 0.0; *((_BYTE *)v1 + 116) = 0; v1[20] = -3.4028235e38; v6 = (_DWORD *)*((_DWORD *)v1 + 22); if ( v6 ) { do { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*((_DWORD *)v1 + 21) + 8))((_DWORD *)v1 + 21, v7); } while ( v6 ); result = 0; } v1[24] = 0.0; v1[22] = 0.0; v1[23] = 0.0; v8 = (_DWORD *)*((_DWORD *)v1 + 26); if ( v8 ) { do { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*((_DWORD *)v1 + 25) + 8))((_DWORD *)v1 + 25, v9); } while ( v8 ); result = 0; } v1[28] = 0.0; v1[26] = 0.0; v1[27] = 0.0; v1[46] = 0.0; return result; } //----- (004DC650) -------------------------------------------------------- int sub_4DC650() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA48 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (004DC670) -------------------------------------------------------- int sub_4DC670() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACEAA8 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACEAA8: using guessed type int dword_ACEAA8; //----- (004DC690) -------------------------------------------------------- int sub_4DC690() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA54 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA54: using guessed type int dword_ACDA54; //----- (004DC6B0) -------------------------------------------------------- int sub_4DC6B0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA5C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA5C: using guessed type int dword_ACDA5C; //----- (004DC6D0) -------------------------------------------------------- int sub_4DC6D0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9B4 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9B4: using guessed type int dword_ACD9B4; //----- (004DC6F0) -------------------------------------------------------- _DWORD *__thiscall sub_4DC6F0(_DWORD *this, _DWORD *a2) { int v2; // eax int v3; // ecx _DWORD *v4; // eax int v5; // edx int v6; // eax v2 = this[16]; if ( *(_BYTE *)(v2 + 12) && (v3 = *(_DWORD *)(v2 + 8)) != 0 ) v4 = *(_DWORD **)(v3 + 12); else v4 = *(_DWORD **)(v2 + 4); *a2 = v4[22]; v5 = v4[23]; v6 = v4[24]; a2[1] = v5; a2[2] = v6; return a2; } //----- (004DC730) -------------------------------------------------------- volatile LONG *__thiscall sub_4DC730(void *this, char *a2) { void *v2; // ebx volatile LONG *result; // eax volatile LONG *v4; // esi volatile LONG *v5; // edi v2 = this; result = sub_462CA0(0, a2); v4 = (volatile LONG *)*((_DWORD *)v2 + 64); v5 = result; if ( v4 != result ) { if ( v4 ) { result = (volatile LONG *)InterlockedDecrement(v4 + 1); if ( !result ) { if ( v4 ) result = (volatile LONG *)(**(int (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); } } *((_DWORD *)v2 + 64) = v5; if ( v5 ) result = (volatile LONG *)InterlockedIncrement(v5 + 1); } return result; } //----- (004DC790) -------------------------------------------------------- BOOL __thiscall sub_4DC790(float *this) { return *(float *)&dword_BA45C0 != this[4] || *(float *)&dword_BA45C4 != this[5] || *(float *)&dword_BA45C8 != this[6]; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004DC7E0) -------------------------------------------------------- int __thiscall sub_4DC7E0(_DWORD *this, int a2, unsigned int a3) { int result; // eax switch ( a2 ) { case 3: if ( a3 > 0x62 ) goto LABEL_10; result = this[a3 + 426]; break; case 13: if ( a3 > 0x62 ) goto LABEL_10; result = this[a3 + 524]; break; case 14: if ( a3 > 0x62 ) goto LABEL_10; result = this[a3 + 622]; break; case 16: if ( a3 > 0x62 ) goto LABEL_10; result = this[a3 + 720]; break; default: LABEL_10: result = 0; break; } return result; } //----- (004DC880) -------------------------------------------------------- LONG __thiscall sub_4DC880(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx int v5; // esi result = a3; v4 = this; v5 = this[a3 + 193]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 193] = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (004DC8E0) -------------------------------------------------------- LONG __thiscall sub_4DC8E0(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // edi int v5; // esi result = a3; v4 = this; v5 = this[a3 + 818]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 818] = a2; if ( !a2 ) goto LABEL_10; result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( a2 ) { ++v4[1010]; return result; } LABEL_10: --v4[1010]; return result; } //----- (004DC950) -------------------------------------------------------- int __thiscall sub_4DC950(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < 0xC0 ) result = this[a2 + 818]; else result = 0; return result; } //----- (004DC970) -------------------------------------------------------- _DWORD *__thiscall sub_4DC970(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[410]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (004DC9A0) -------------------------------------------------------- _DWORD *__thiscall sub_4DC9A0(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[411]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (004DC9D0) -------------------------------------------------------- _DWORD *__thiscall sub_4DC9D0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 15) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (004DCA30) -------------------------------------------------------- int __thiscall sub_4DCA30(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 15) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (004DCA90) -------------------------------------------------------- _DWORD *__thiscall sub_4DCA90(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 15) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 15) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 15) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 15) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 15) ) goto LABEL_11; return result; } //----- (004DCAF0) -------------------------------------------------------- int __cdecl sub_4DCAF0(__int16 a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4DC670() ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1) != a1 ) { if ( ++v1 >= sub_4DC670() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1); } // ACEAA8: using guessed type int dword_ACEAA8; //----- (004DCB40) -------------------------------------------------------- int __thiscall sub_4DCB40(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // ecx int v4; // edi char *v5; // eax char *v6; // eax v2 = this; v3 = (int *)this[103]; v2[95] = a2; v4 = *v3; v5 = (char *)sub_40A910(-453757369); v6 = sub_7549E0(v5, a2); return (*(int (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[103], v6); } //----- (004DCB90) -------------------------------------------------------- int __cdecl sub_4DCB90(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_4DC690() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_4DC690() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v1); } // ACDA54: using guessed type int dword_ACDA54; //----- (004DCC20) -------------------------------------------------------- int __cdecl sub_4DCC20(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4DC6B0() ) return 0; while ( *(_DWORD *)sub_7474E0((_DWORD *)(dword_ACDA5C + 4), v1) != a1 ) { if ( ++v1 >= sub_4DC6B0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA5C + 4), v1); } // ACDA5C: using guessed type int dword_ACDA5C; //----- (004DCC70) -------------------------------------------------------- int __cdecl sub_4DCC70(const char *a1, int a2) { unsigned int v2; // edi if ( !a1 || !*a1 ) return 0; v2 = 0; if ( !sub_4DC6D0() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACD9B4 + 4), v2) + 6), a1) || *(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD9B4 + 4), v2) + 38) != a2 ) { if ( ++v2 >= sub_4DC6D0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD9B4 + 4), v2); } // ACD9B4: using guessed type int dword_ACD9B4; //----- (004DCD20) -------------------------------------------------------- int __cdecl sub_4DCD20(char *a1) { int v1; // eax unsigned int v2; // esi int v3; // eax int v4; // ebx size_t v5; // eax unsigned int v7; // [esp+Ch] [ebp-8h] unsigned int v8; // [esp+10h] [ebp-4h] v1 = *(_DWORD *)(dword_ACD9E8 + 56); v2 = 0; if ( v1 ) v8 = *(_DWORD *)(v1 + 40); else v8 = 0; v7 = 0; if ( v8 <= 0 ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v2); v4 = v3; if ( v3 ) break; LABEL_9: v7 = ++v2; if ( v2 >= v8 ) return 0; } v5 = strlen((const char *)(v3 + 2)); if ( v5 != strlen(a1) || strncmp((const char *)(v4 + 2), a1, v5) ) { v2 = v7; goto LABEL_9; } return v4; } // ACD9E8: using guessed type int dword_ACD9E8; //----- (004DCDC0) -------------------------------------------------------- _WORD *__cdecl sub_4DCDC0(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _WORD *result; // eax v1 = *(_DWORD *)(dword_ACD9EC + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9EC + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9EC: using guessed type int dword_ACD9EC; //----- (004DCE10) -------------------------------------------------------- int __cdecl sub_4DCE10(const char *a1, int a2) { const char *v2; // ebx int v3; // eax unsigned int v4; // edi unsigned int v5; // esi int result; // eax v2 = a1; if ( !a1 || !*a1 ) return 0; v3 = *(_DWORD *)(dword_ACDA34 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { do { result = sub_7474E0((_DWORD *)(dword_ACDA34 + 4), v5); if ( result && *(_DWORD *)(result + 32) == a2 ) { if ( !strcmp((const char *)result, v2) ) return result; v2 = a1; } ++v5; } while ( v5 < v4 ); } return 0; } // ACDA34: using guessed type int dword_ACDA34; //----- (004DCEA0) -------------------------------------------------------- int __cdecl sub_4DCEA0(unsigned __int16 a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4DC2F0() ) return 0; while ( *(_DWORD *)sub_7474E0((_DWORD *)(dword_ACD920 + 4), v1) != a1 ) { if ( ++v1 >= sub_4DC2F0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD920 + 4), v1); } // ACD920: using guessed type int dword_ACD920; //----- (004DCEF0) -------------------------------------------------------- int __cdecl sub_4DCEF0(unsigned __int16 a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4DC310() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v1) + 34) != a1 ) { if ( ++v1 >= sub_4DC310() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA7C + 4), v1); } // ACDA7C: using guessed type int dword_ACDA7C; //----- (004DCF40) -------------------------------------------------------- int __cdecl sub_4DCF40(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_4DC330() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACDA84 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_4DC330() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA84 + 4), v1); } // ACDA84: using guessed type int dword_ACDA84; //----- (004DCFD0) -------------------------------------------------------- const CHAR *__cdecl sub_4DCFD0(const char *a1) { unsigned int v2; // esi int v3; // eax if ( !a1 ) return &byte_9A8050; v2 = 0; if ( !sub_438970() ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACB2E0 + 4), v2); if ( v3 ) { if ( v3 != -2 && !strcmp(a1, (const char *)(v3 + 2)) ) break; } if ( ++v2 >= sub_438970() ) return 0; } return (const CHAR *)(v3 + 34); } // ACB2E0: using guessed type int dword_ACB2E0; //----- (004DD060) -------------------------------------------------------- int __thiscall sub_4DD060(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x7FFFFFFE ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 14) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 14) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 15) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 14) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 14) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 15) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 14) = 1; *(_BYTE *)(v13 + 14) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 14) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 14) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 15) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 14) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 14) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 15) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 14) = 1; *(_BYTE *)(v22 + 14) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 14) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 14) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 14) = 1; return result; } //----- (004DD290) -------------------------------------------------------- _DWORD *__thiscall sub_4DD290(int *this, _DWORD *a2) { int v2; // edx _DWORD *result; // eax int v4; // ecx v2 = this[3]; result = a2; v4 = *this; a2[1] = 0; *a2 = v4; a2[2] = v2; return result; } //----- (004DD2B0) -------------------------------------------------------- _DWORD *__thiscall sub_4DD2B0(int *this, _DWORD *a2) { int v2; // edx _DWORD *result; // eax int v4; // ecx v2 = this[3] + this[4]; result = a2; v4 = *this; a2[1] = 0; *a2 = v4; a2[2] = v2; return result; } //----- (004DD2D0) -------------------------------------------------------- _DWORD *__thiscall sub_4DD2D0(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ecx _DWORD *result; // eax _DWORD *v4; // edi v1 = this; v2 = (_DWORD **)*this; result = *v2; *v2 = v2; *(_DWORD *)(*v1 + 4) = *v1; v1[1] = 0; if ( result != (_DWORD *)*v1 ) { do { v4 = (_DWORD *)*result; operator delete(result); result = v4; } while ( v4 != (_DWORD *)*v1 ); } return result; } //----- (004DD310) -------------------------------------------------------- int __thiscall sub_4DD310(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 41698710 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (004DD390) -------------------------------------------------------- char **__stdcall sub_4DD390(char *a1, int a2, int a3) { char **result; // eax int v4; // edx int v5; // esi int v6; // edi void **v7; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x70u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a1); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) { v5 = a3; qmemcpy(result + 2, (const void *)a3, 0x64u); v5 += 100; v6 = (int)(result + 27); *(_WORD *)v6 = *(_WORD *)v5; *(_BYTE *)(v6 + 2) = *(_BYTE *)(v5 + 2); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004DD400) -------------------------------------------------------- _DWORD *__cdecl sub_4DD400(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 5 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; result[4] = v3[4]; } v3 += 5; } return result; } //----- (004DD450) -------------------------------------------------------- int __thiscall sub_4DD450(_DWORD *this, int a2, void *a3, int a4) { _WORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned __int16 v10; // di int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 15) ) { v10 = *((_WORD *)a3 + 6); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v7 + 12) >= v10; else v9 = v10 < *(_WORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 15) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_4DD060(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DCA90(&a4); v11 = a4; v4 = a3; } if ( *(_WORD *)(v11 + 12) >= v4[6] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_4DD060(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (004DD530) -------------------------------------------------------- _DWORD *__thiscall sub_4DD530(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax void **v4; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x10u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 7) = 0; if ( result != (_DWORD *)-12 ) *((_WORD *)result + 6) = *(_WORD *)a2; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004DD5A0) -------------------------------------------------------- int __thiscall sub_4DD5A0(_DWORD *this, int a2, size_t a3, size_t a4, char a5) { int v5; // esi unsigned int v6; // ecx unsigned int v7; // ebx int v8; // eax size_t v9; // ecx unsigned int v10; // edx char *v11; // eax char *v12; // edx void *v13; // edi unsigned int v14; // edx unsigned int v15; // edx char *v16; // eax int result; // eax bool v18; // cf char *v19; // [esp+Ch] [ebp-4h] int v20; // [esp+1Ch] [ebp+Ch] v5 = (int)this; v6 = this[4]; if ( v6 < a2 ) std::_Xout_of_range("invalid string position"); v7 = a3; v8 = v6 - a2; if ( v6 - a2 < a3 ) v7 = v6 - a2; if ( -1 - a4 <= v6 - v7 ) std::_Xlength_error("string too long"); v9 = a4; v20 = v8 - v7; if ( a4 < v7 ) { v10 = *(_DWORD *)(v5 + 20); if ( v10 < 0x10 ) v11 = (char *)v5; else v11 = *(char **)v5; if ( v10 < 0x10 ) v12 = (char *)v5; else v12 = *(char **)v5; memcpy_0(&v12[a2 + a4], &v11[a2 + v7], v20); v9 = a4; } if ( !v9 && !v7 ) return v5; v13 = (void *)(v9 + *(_DWORD *)(v5 + 16) - v7); if ( (unsigned int)v13 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v14 = *(_DWORD *)(v5 + 20); if ( v14 < (unsigned int)v13 ) { sub_4015D0((const void **)v5, v13, *(_DWORD *)(v5 + 16)); v9 = a4; if ( v13 ) { LABEL_21: if ( v7 < v9 ) { v15 = *(_DWORD *)(v5 + 20); if ( v15 < 0x10 ) v16 = (char *)v5; else v16 = *(char **)v5; if ( v15 < 0x10 ) v19 = (char *)v5; else v19 = *(char **)v5; memcpy_0(&v19[a2 + v9], &v16[a2 + v7], v20); v9 = a4; } sub_40A9F0((_DWORD *)v5, a2, v9, a5); v18 = *(_DWORD *)(v5 + 20) < 0x10u; *(_DWORD *)(v5 + 16) = v13; if ( !v18 ) { *((_BYTE *)v13 + *(_DWORD *)v5) = 0; return v5; } *((_BYTE *)v13 + v5) = 0; } return v5; } if ( v13 ) goto LABEL_21; *(_DWORD *)(v5 + 16) = 0; if ( v14 < 0x10 ) { result = v5; *(_BYTE *)v5 = 0; } else { **(_BYTE **)v5 = 0; result = v5; } return result; } //----- (004DD710) -------------------------------------------------------- int **__thiscall sub_4DD710(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 21) ) { if ( (unsigned int)v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < (unsigned int)v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (004DD780) -------------------------------------------------------- _DWORD *__thiscall sub_4DD780(_DWORD *this, _DWORD *a2, int a3) { _DWORD *result; // eax _DWORD **v4; // edx _DWORD *v5; // edx int v6; // edx result = a2; v4 = (_DWORD **)*this; *a2 = 0; a2[1] = 0; if ( v4 ) { v5 = *v4; if ( v5 ) *a2 = *v5; } v6 = this[2]; a2[2] = v6; this[2] = v6 + 1; return result; } //----- (004DD7C0) -------------------------------------------------------- int __thiscall sub_4DD7C0(int this) { int result; // eax result = this; *(_DWORD *)(this + 28) = 0; *(_DWORD *)(this + 20) = 0; *(_DWORD *)(this + 24) = 0; *(_DWORD *)(this + 16) = &NiTList::`vftable'; *(_WORD *)(this + 12) = 0; *(_BYTE *)(this + 14) = 0; *(_BYTE *)(this + 36) = 0; *(_DWORD *)(this + 32) = -1; *(_WORD *)(this + 38) = -1; return result; } // 9AD4BC: using guessed type void *NiTList::`vftable'; //----- (004DD7F0) -------------------------------------------------------- char __thiscall sub_4DD7F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax int v7; // ecx _BYTE *v8; // ebx int *v9; // esi v1 = this; if ( this[3] ) { v2 = (_DWORD *)this[2]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { sub_6ACDF0(&unk_B91250, (int *)v3[4]); if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != (_DWORD *)v1[2] ); } v7 = v1[2]; v8 = *(_BYTE **)(v7 + 4); v9 = *(int **)(v7 + 4); if ( !v8[21] ) { do { sub_6DA320((void *)v9[2]); v9 = (int *)*v9; operator delete(v8); v8 = v9; } while ( !*((_BYTE *)v9 + 21) ); } *(_DWORD *)(v1[2] + 4) = v1[2]; *(_DWORD *)v1[2] = v1[2]; *(_DWORD *)(v1[2] + 8) = v1[2]; v1[3] = 0; } return 1; } //----- (004DD8C0) -------------------------------------------------------- int __thiscall sub_4DD8C0(_DWORD *this, char *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int result; // eax char **v7; // eax int v8; // ecx int v11; // [esp+0h] [ebp-28h] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int *v14; // [esp+18h] [ebp-10h] int v15; // [esp+24h] [ebp-4h] v14 = &v11; v5 = this; v12 = (int)this; result = a3; v13 = a3; v15 = 0; while ( result != a4 ) { v7 = sub_4DD390(a2, *((_DWORD *)a2 + 1), result + 8); v8 = v5[1]; if ( (unsigned int)(41698710 - v8) < 1 ) std::_Xlength_error("list too long"); v5[1] = v8 + 1; *((_DWORD *)a2 + 1) = v7; *(_DWORD *)v7[1] = v7; result = *(_DWORD *)a3; a3 = *(_DWORD *)a3; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004DD990) -------------------------------------------------------- int __thiscall sub_4DD990(_DWORD *this, char a2) { int v2; // edi _DWORD *v3; // esi _DWORD *v4; // eax int v6; // [esp+8h] [ebp-8h] v2 = a2; v3 = this; sub_651500((float *)a2); *(_DWORD *)&a2 = *(unsigned __int16 *)(v2 + 548); v4 = sub_4DD530(v3 + 10, &a2); return sub_4DD450(v3 + 10, (int)&v6, v4, 0); } //----- (004DD9E0) -------------------------------------------------------- char __cdecl sub_4DD9E0(char *a1) { int v1; // eax unsigned int v2; // esi void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl unsigned int v15; // [esp+10h] [ebp-38h] unsigned int v16; // [esp+18h] [ebp-30h] void *v17; // [esp+1Ch] [ebp-2Ch] unsigned int v18; // [esp+2Ch] [ebp-1Ch] unsigned int v19; // [esp+30h] [ebp-18h] int v20; // [esp+44h] [ebp-4h] v1 = *(_DWORD *)(dword_ACDA28 + 56); v2 = 0; if ( v1 ) v16 = *(_DWORD *)(v1 + 40); else v16 = 0; v15 = 0; if ( v16 <= 0 ) return 0; while ( 1 ) { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACDA28 + 4), v2); if ( v3 ) break; LABEL_19: v15 = ++v2; if ( v2 >= v16 ) return 0; } v19 = 15; v18 = 0; LOBYTE(v17) = 0; sub_4018E0(&v17, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v18; v6 = v4; v7 = v18; if ( v18 >= v4 ) v7 = v4; v8 = v19; v9 = (unsigned __int8 *)v17; if ( v19 < 0x10 ) v9 = (unsigned __int8 *)&v17; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v20 = -1; if ( v8 >= 0x10 ) operator delete(v17); v19 = 15; v18 = 0; LOBYTE(v17) = 0; if ( !v13 ) { v2 = v15; goto LABEL_19; } return 1; } // ACDA28: using guessed type int dword_ACDA28; //----- (004DDB30) -------------------------------------------------------- int sub_4DDB30() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_ACEABC; if ( !dword_ACEABC ) { v1 = (void ***)operator new(0x5Cu); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &ItemUseTask::`vftable'; v2[2] = &ItemUseTask::`vftable'; } else { v2 = 0; } result = (int)v2; dword_ACEABC = (int)v2; } return result; } // 9BC4D4: using guessed type void *ItemUseTask::`vftable'; // 9BC4F0: using guessed type void *ItemUseTask::`vftable'; // ACEABC: using guessed type int dword_ACEABC; //----- (004DDBB0) -------------------------------------------------------- void *__thiscall sub_4DDBB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_ACEABC = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BC498: using guessed type void *ISingletonTask::`vftable'; // 9BC4B4: using guessed type void *ISingletonTask::`vftable'; // ACEABC: using guessed type int dword_ACEABC; //----- (004DDBF0) -------------------------------------------------------- int __thiscall sub_4DDBF0(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // ecx bool v7; // zf unsigned int v8; // edi int v9; // ecx int result; // eax v3 = this; v4 = sub_5E8850(this, a3); v5 = v3[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 21) == 0; LOBYTE(a3) = 1; if ( v7 ) { v8 = v4[3]; do { v5 = v6; LOBYTE(a3) = v8 < *(_DWORD *)(v6 + 12); if ( (_BYTE)a3 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 21) ); } v9 = *(_DWORD *)sub_6A0F70(v3, (int)&a3, (char)a3, v5, v4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (004DDC60) -------------------------------------------------------- char ***__thiscall sub_4DDC60(char ***this, int **a2) { char ***v2; // esi char **v3; // eax char *v4; // ecx int *v5; // eax int v6; // edx int v8; // [esp+0h] [ebp-34h] void **v9; // [esp+10h] [ebp-24h] char *v10; // [esp+1Ch] [ebp-18h] char ***v11; // [esp+20h] [ebp-14h] int *v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v12 = &v8; v2 = this; v11 = this; this[1] = 0; v3 = (char **)operator new(0x70u); if ( !v3 ) { v10 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v10); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v2 = v3; *v3 = (char *)v3; (*v2)[1] = (char *)*v2; v4 = **v2; v5 = *a2; v6 = **a2; v13 = 0; LOBYTE(v13) = 1; sub_4DD8C0(v2, v4, v6, (int)v5, (int)a2); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004DDD20) -------------------------------------------------------- _DWORD *__thiscall sub_4DDD20(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // edi _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; v9 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = (a2[1] - *a2) / 20; *this = 0; this[1] = 0; this[2] = 0; if ( v3 ) { if ( v3 > 0xCCCCCCC ) std::_Xlength_error("vector too long"); v4 = sub_71A550((char *)v3); v2[2] = &v4[5 * v3]; *v2 = v4; v2[1] = v4; v5 = (_DWORD *)a2[1]; v6 = (_DWORD *)*a2; v11 = 0; v2[1] = sub_4DD400(v6, v5, v4); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004DDE00) -------------------------------------------------------- void __thiscall sub_4DDE00(int **this, int **a2) { int **v2; // esi int *v3; // eax int *v4; // edi v2 = this; if ( this != a2 ) { v3 = (int *)**this; **this = (int)*this; (*this)[1] = (int)*this; this[1] = 0; if ( v3 != *this ) { do { v4 = (int *)*v3; operator delete(v3); v3 = v4; } while ( v4 != *v2 ); } if ( a2[1] ) sub_4DD310(v2, **v2, a2, **a2, (int)*a2, (unsigned int)a2[1]); } } //----- (004DDE60) -------------------------------------------------------- char __fastcall sub_4DDE60(int a1, int a2, unsigned __int16 *a3) { double v3; // st7 int v4; // ebx float v5; // ST18_4 float v6; // ST14_4 int v7; // ecx int v8; // eax int v9; // edx int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx float *v14; // edi float *v15; // eax int v17; // eax _DWORD *v18; // ebx int *v19; // eax int *v20; // [esp+1Ch] [ebp-CCh] int v21; // [esp+20h] [ebp-C8h] int v22; // [esp+24h] [ebp-C4h] int v23; // [esp+28h] [ebp-C0h] int v24; // [esp+2Ch] [ebp-BCh] int v25; // [esp+30h] [ebp-B8h] int v26; // [esp+34h] [ebp-B4h] int v27; // [esp+38h] [ebp-B0h] float v28; // [esp+3Ch] [ebp-ACh] char v29; // [esp+40h] [ebp-A8h] char Src[4]; // [esp+64h] [ebp-84h] int v31; // [esp+68h] [ebp-80h] int v32; // [esp+6Ch] [ebp-7Ch] int v33; // [esp+70h] [ebp-78h] int v34; // [esp+74h] [ebp-74h] int v35; // [esp+78h] [ebp-70h] int v36; // [esp+7Ch] [ebp-6Ch] int v37; // [esp+80h] [ebp-68h] char v38; // [esp+84h] [ebp-64h] v3 = (double)*(unsigned int *)(a3 + 19); v4 = a1; v25 = dword_BA45C4; v24 = dword_BA45C0; v27 = a1; v26 = dword_BA45C8; v5 = v3; v6 = (double)*(unsigned int *)(a3 + 17); sub_69ACA0((int)byte_ADB468, v6, v5, (int)&v24, 0); LODWORD(v28) = *((unsigned __int8 *)a3 + 42); v28 = (flt_BA45B4 + flt_BA45B4) * (double)SLODWORD(v28) / 180.0; sub_85D810((float *)&v29, v28); sub_85DA90((float *)&v29, (float *)&v21, (float *)&dword_AB4FE8); v7 = *(_DWORD *)(a3 + 5); v8 = *(_DWORD *)(a3 + 3); *(_DWORD *)Src = *(_DWORD *)(a3 + 1); v9 = *(_DWORD *)(a3 + 7); v32 = v7; v10 = *(_DWORD *)(a3 + 11); v33 = v9; v11 = *(_DWORD *)(a3 + 13); v31 = v8; v12 = *(_DWORD *)(a3 + 9); v35 = v10; v13 = *(unsigned __int16 *)((char *)a3 + 43); v36 = v11; v34 = v12; v37 = *(_DWORD *)(a3 + 15); v38 = 0; if ( (_WORD)v13 == -1 ) { v14 = sub_6AE0A0(&unk_B91250, Src, v24, v25, v26, v21, v22, v23, SLODWORD(flt_ACCFCC), 1); } else { v15 = sub_6AE1D0(&unk_B91250, Src, v13, v21, v22, v23, SLODWORD(flt_ACCFCC)); v14 = v15; if ( !v15 ) return 0; *((_BYTE *)v15 + 524) = 0; } if ( !v14 ) return 0; v17 = *((_DWORD *)v14 + 28); if ( v17 ) { LODWORD(v28) = *(unsigned __int16 *)((char *)a3 + 45); v28 = (double)SLODWORD(v28) / 1000.0; v28 = fabs(v28); *(float *)(v17 + 100) = v28; } *((_BYTE *)v14 + 140) = *((_BYTE *)a3 + 47) & 1; sub_6AAD40((int)v14); v18 = (_DWORD *)(v4 + 4); LODWORD(v28) = *a3; v19 = *sub_4DD710(v18, &v20, &v28); v28 = *(float *)&v19; if ( *(int **)(v27 + 8) != v19 ) { sub_6ACDF0(&unk_B91250, (int *)v19[4]); sub_6CDBF0(v18, (int *)&v20, SLODWORD(v28)); } v27 = *a3; *(_DWORD *)sub_680000(v18, &v27) = v14; return 1; } // AB4FE8: using guessed type int dword_AB4FE8; // ACCFCC: using guessed type float flt_ACCFCC; // BA45B4: using guessed type float flt_BA45B4; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004DE110) -------------------------------------------------------- void *__thiscall sub_4DE110(void *this, char a2) { void *v2; // edi void **v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST04_4 char v7; // [esp+Ch] [ebp-14h] char *v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v2 = this; v3 = (void **)((char *)this + 4); *(_DWORD *)this = &EffectObjectMgr::`vftable'; v8 = (char *)this + 4; v4 = (_DWORD *)*((_DWORD *)this + 2); v5 = (_DWORD *)*v4; v9 = 0; sub_6CDE90((_DWORD *)this + 1, (int *)&v7, v5, v4); operator delete(v3[1]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BC508: using guessed type void *EffectObjectMgr::`vftable'; //----- (004DE190) -------------------------------------------------------- int __thiscall sub_4DE190(_DWORD *this, void *a2) { _DWORD *v2; // esi bool v3; // cf _BYTE *v4; // eax int (__stdcall *v5)(void *); // edx _DWORD *v7; // [esp+10h] [ebp-30h] void *v8; // [esp+14h] [ebp-2Ch] int v9; // [esp+24h] [ebp-1Ch] unsigned int v10; // [esp+28h] [ebp-18h] int v11; // [esp+3Ch] [ebp-4h] v2 = this + 93; v3 = this[98] < 0x10u; v7 = this; this[97] = 0; if ( v3 ) v4 = this + 93; else v4 = (_BYTE *)*v2; *v4 = 0; v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4018E0(&v8, a2, strlen((const char *)a2)); v11 = 0; sub_406450(v2, &v8); v11 = -1; if ( v10 >= 0x10 ) operator delete(v8); v5 = *(int (__stdcall **)(void *))(*(_DWORD *)v7[111] + 472); v10 = 15; v9 = 0; LOBYTE(v8) = 0; return v5(a2); } //----- (004DE270) -------------------------------------------------------- int *sub_4DE270() { _DWORD *v0; // eax void **v2; // [esp+8h] [ebp-1Ch] char *v3; // [esp+14h] [ebp-10h] int v4; // [esp+20h] [ebp-4h] if ( !(dword_ACEAD4 & 1) ) { dword_ACEAD4 |= 1u; v4 = 0; dword_ACEAC0 = (int)&EffectObjectMgr::`vftable'; dword_ACEACC = 0; v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_ACEAC8 = v0; *v0 = v0; *((_DWORD *)dword_ACEAC8 + 1) = dword_ACEAC8; *((_DWORD *)dword_ACEAC8 + 2) = dword_ACEAC8; *((_BYTE *)dword_ACEAC8 + 20) = 1; *((_BYTE *)dword_ACEAC8 + 21) = 1; atexit(sub_9A1910); } return &dword_ACEAC0; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9BC508: using guessed type void *EffectObjectMgr::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACEAC0: using guessed type int dword_ACEAC0; // ACEACC: using guessed type int dword_ACEACC; // ACEAD4: using guessed type int dword_ACEAD4; //----- (004DE350) -------------------------------------------------------- void __thiscall sub_4DE350(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi v1 = this; *this = &AreaInfoMgr::`vftable'; v2 = (_DWORD **)this[2]; v3 = *v2; *v2 = v2; *(_DWORD *)(v1[2] + 4) = v1[2]; v1[3] = 0; if ( v3 != (_DWORD *)v1[2] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != (_DWORD *)v1[2] ); } operator delete((void *)v1[2]); } // 9BC510: using guessed type void *AreaInfoMgr::`vftable'; //----- (004DE3A0) -------------------------------------------------------- void *__thiscall sub_4DE3A0(void *this, char a2) { void *v2; // esi v2 = this; sub_4DE350(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004DE3D0) -------------------------------------------------------- int *sub_4DE3D0() { _DWORD *v0; // eax void **v2; // [esp+8h] [ebp-1Ch] char *v3; // [esp+14h] [ebp-10h] int v4; // [esp+20h] [ebp-4h] if ( !(dword_ACEAEC & 1) ) { dword_ACEAEC |= 1u; v4 = 0; dword_ACEAD8 = (int)&AreaInfoMgr::`vftable'; dword_ACEAE4 = 0; v0 = operator new(0x30u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_ACEAE0 = v0; *v0 = v0; *((_DWORD *)dword_ACEAE0 + 1) = dword_ACEAE0; dword_ACEADC = 0; atexit(sub_9A1990); } return &dword_ACEAD8; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9BC510: using guessed type void *AreaInfoMgr::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACEAD8: using guessed type int dword_ACEAD8; // ACEADC: using guessed type int dword_ACEADC; // ACEAE4: using guessed type int dword_ACEAE4; // ACEAEC: using guessed type int dword_ACEAEC; //----- (004DE490) -------------------------------------------------------- int __stdcall sub_4DE490(int a1, int a2) { int result; // eax char *v3; // eax result = (*(int (__stdcall **)(int, int))(*(_DWORD *)dword_AD8EBC + 40))(a1, a2); if ( (_BYTE)a1 ) { v3 = sub_686370(&byte_ADA230); result = sub_6BA680(&dword_AB6520, (int)v3); } return result; } // ADA230: using guessed type char byte_ADA230; //----- (004DE4D0) -------------------------------------------------------- void __thiscall sub_4DE4D0(float *this, int a2) { float *v2; // ebx char *v3; // esi int v4; // edi float *v5; // edi float *v6; // eax double v7; // st7 void (__stdcall *v8)(char *); // edx double v9; // st7 float v10; // [esp+Ch] [ebp-14h] float v11; // [esp+10h] [ebp-10h] float v12; // [esp+14h] [ebp-Ch] double v13; // [esp+18h] [ebp-8h] v2 = this; v3 = (char *)*((_DWORD *)dword_AD8EBC + 1026); v4 = sub_67DA80(dword_AD8EBC, *((_DWORD *)dword_AD8EBC + 1026)); if ( v3 && (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 36))(v3) && !sub_651680((int)v3) && ((*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 32))(v3) || v4 == 3) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) goto LABEL_15; if ( !sub_64D0C0((_DWORD *)dword_AD8EBC + 21) ) goto LABEL_15; v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); v6 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v10 = *v5 - *v6; v11 = v5[1] - v6[1]; v7 = v5[2] - v6[2]; v8 = *(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 296); v12 = v7; v8(v3); *((float *)&v13 + 1) = v7; v13 = flt_AAEBA4 + *((float *)&v13 + 1); v9 = sub_4E1760(&v10); if ( v13 * v13 >= v9 ) { LABEL_15: if ( dword_AD8EBC == v3 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; } } else { *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; sub_4A1650(v2, v3); } } else { dword_AD8EBC[4144] = 0; *((_DWORD *)dword_AD8EBC + 1027) = 0; } } // AAEBA4: using guessed type float flt_AAEBA4; //----- (004DE8F0) -------------------------------------------------------- void __thiscall sub_4DE8F0(float *this, int a2, float a3) { float *v3; // edi int v4; // eax int v5; // ebx int v6; // esi float *v7; // esi float *v8; // edi void (__stdcall *v9)(int); // eax float v10; // ST20_4 float v11; // ST24_4 float v12; // ST28_4 float *v13; // eax float v14; // eax float v15; // ST14_4 float v16; // ST18_4 float v17; // ST1C_4 float v18; // [esp+28h] [ebp-10h] float v19; // [esp+2Ch] [ebp-Ch] float v20; // [esp+30h] [ebp-8h] float *v21; // [esp+34h] [ebp-4h] float v22; // [esp+44h] [ebp+Ch] v3 = this; v21 = this; this[28] = 0.0; if ( a2 && (char *)a2 != dword_AD8EBC && !sub_64D0C0((_DWORD *)dword_AD8EBC + 21) ) { v4 = sub_6646E0(dword_AD8C90, a2); v5 = v4; if ( v4 ) { *((_DWORD *)v3 + 28) = v4; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 488))(v4) != 1 || (v6 = *(_DWORD *)(*((_DWORD *)v3 + 28) + 2924)) == 0 ) { v6 = v5; } if ( sub_8D0630(v3 + 29, flt_ACCFCC) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 248))(v6) || LOBYTE(a3) ) { v7 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 196))(v5); v8 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v9 = *(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 296); v18 = *v7 - *v8; v19 = v7[1] - v8[1]; v20 = v7[2] - v8[2]; v9(v5); v22 = v18 * v18 + v19 * v19 + v20 * v20; if ( v22 > 2500.0 ) { v18 = *v8 - *v7; v19 = v8[1] - v7[1]; v20 = v8[2] - v7[2]; sub_4430B0(&v18); v10 = v18 * 50.0; v11 = v19 * 50.0; v12 = 50.0 * v20; v13 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 196))(v5); v18 = *v13; v19 = v13[1]; v14 = v13[2]; v15 = v10 + v18; v18 = v15; v16 = v19 + v11; v19 = v16; v17 = v14 + v12; v20 = v17; sub_4A1330(v21, (int)&v18, 0); } } } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004DEAD0) -------------------------------------------------------- bool __thiscall sub_4DEAD0(_DWORD *this) { _DWORD *v1; // esi int v3; // eax float *v4; // eax v1 = this; if ( dword_AD8EBC[2496] || *((_DWORD *)dword_AD8EBC + 6) ) return 1; if ( sub_65C670(dword_AD8EBC) ) goto LABEL_11; v3 = v1[628]; if ( v3 == 2 ) return 1; if ( v3 == 3 ) { if ( !sub_6508C0(dword_AD8EBC) ) { v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v4); sub_4B79A0(v1); sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); goto LABEL_9; } return 1; } LABEL_9: if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() && !sub_65FBD0(dword_AD8EBC) ) return 1; LABEL_11: if ( *((_DWORD *)dword_AD8EBC + 8) > 0 || *((_DWORD *)dword_AD8EBC + 6) ) return 1; return *((_DWORD *)dword_AD8EBC + 11) > 0; } //----- (004DEB90) -------------------------------------------------------- char __thiscall sub_4DEB90(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi char result; // al int *v5; // eax int v6; // esi float v7[3]; // [esp+4h] [ebp-18h] int v8; // [esp+10h] [ebp-Ch] int v9; // [esp+14h] [ebp-8h] int v10; // [esp+18h] [ebp-4h] v3 = this; if ( sub_4DEAD0(this) == 1 ) { result = (char)dword_AD8EBC; *((_DWORD *)dword_AD8EBC + 1030) = 0; } else { if ( sub_64D0C0((_DWORD *)dword_AD8EBC + 21) > 0 ) { sub_4B7970(v3); sub_64EB10((_DWORD *)dword_AD8EBC + 21); } if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); v5 = (int *)sub_67B5C0(dword_AD8EBC); v8 = *v5; v9 = v5[1]; v10 = v5[2]; result = sub_64F900(dword_AD8EBC, 358); if ( !result ) { result = sub_64FCB0(dword_AD8EBC, 110); if ( !result ) { v6 = *((_DWORD *)dword_AD8EBC + 731); if ( !v6 || *((_DWORD *)dword_AD8EBC + 730) ) { (*(void (__stdcall **)(int *, int, float *, signed int))(*(_DWORD *)dword_AD8EBC + 232))( &v8, a3, &flt_AB399C, 1); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(v7); if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 224))() ) sub_4B7460((int)v3, v7, (float *)&v8); else sub_4B7380(v3, v7, (float *)&v8); } else { (*(void (__thiscall **)(int, int *, int, float *, signed int))(*(_DWORD *)v6 + 232))( v6, &v8, a3, &flt_AB399C, 1); sub_67E120(v6 + 1588, (int)(dword_AD8EBC + 1588)); (*(void (__thiscall **)(int, float *))(*(_DWORD *)v6 + 200))(v6, v7); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 224))(v6) ) sub_4B7460((int)v3, v7, (float *)&v8); else sub_4B7380(v3, v7, (float *)&v8); } *((_DWORD *)dword_AD8EBC + 1030) = 0; result = (char)dword_AD8EBC; dword_AD8EBC[4144] = 0; } } } return result; } // AB399C: using guessed type float flt_AB399C; //----- (004DED70) -------------------------------------------------------- char *__userpurge sub_4DED70@(_DWORD *a1@, int a2@, int a3, float a4, int a5) { char *result; // eax _DWORD *v6; // ebx void (__thiscall *v7)(int, float *, int); // edx signed int v8; // edi signed int v9; // esi float v10; // ST20_4 const CHAR *v11; // eax int v12; // eax char v13; // [esp+2Ch] [ebp-2Ch] int v14; // [esp+38h] [ebp-20h] float v15; // [esp+3Ch] [ebp-1Ch] float v16; // [esp+40h] [ebp-18h] float v17; // [esp+44h] [ebp-14h] float v18; // [esp+48h] [ebp-10h] float v19; // [esp+4Ch] [ebp-Ch] float v20; // [esp+50h] [ebp-8h] float v21; // [esp+54h] [ebp-4h] int v22; // [esp+60h] [ebp+8h] signed int v23; // [esp+64h] [ebp+Ch] result = dword_AD8EBC; v6 = a1; if ( !*((_DWORD *)dword_AD8EBC + 6) ) { sub_4A3910((void *)a3, (float *)&v14, (int)dword_AD8EBC); sub_4430B0((float *)&v14); v7 = *(void (__thiscall **)(int, float *, int))(*(_DWORD *)a3 + 200); *(float *)&v14 = *(float *)&v14 * a4; v15 = v15 * a4; v16 = a4 * v16; v7(a3, &v17, a2); v17 = *(float *)&v14 + v17; v18 = v15 + v18; v19 = v19 + v16; if ( sub_699470(byte_ADB468, v17, v18) == 1 ) { v8 = -20; v22 = -20; while ( 2 ) { v9 = -20; v23 = -20; v20 = (double)v22; do { v21 = (double)v23 + v18; v10 = v21; v21 = v20 + v17; if ( !sub_699470(byte_ADB468, v21, v10) ) { v17 = (double)v22 + v17; v18 = (double)v23 + v18; goto LABEL_10; } v23 = ++v9; } while ( v9 < 20 ); v22 = ++v8; if ( v8 < 20 ) continue; break; } v11 = sub_40C190(760315809); sub_492060(v6, (int)v11); result = (char *)(*(int (__cdecl **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); } else { LABEL_10: (*(void (__stdcall **)(float *, _DWORD, float *, signed int))(*(_DWORD *)dword_AD8EBC + 232))( &v17, 0, &flt_AB399C, 1); *(float *)&v14 = v17; v15 = v18; v16 = v19; if ( dword_B67118 ) { sub_69AD10((float *)byte_ADB468, v17, v18, (int)&v14); v12 = dword_B67118; *(float *)(dword_B67118 + 88) = *(float *)&v14; *(float *)(v12 + 92) = v15; *(float *)(v12 + 96) = v16; sub_85BED0((_DWORD **)dword_B67118, 0.0, 1); } (*(void (__cdecl **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v13); if ( a5 ) { sub_67B690(dword_AD8EBC, a5); } else if ( dword_AD8EBC[4144] ) { sub_67B690(dword_AD8EBC, 3); } else { sub_67B690(dword_AD8EBC, 0); } result = (char *)sub_67B590((int)dword_AD8EBC, &v17); } } return result; } // 4DED70: could not find valid save-restore pair for edi // AB399C: using guessed type float flt_AB399C; // B67118: using guessed type int dword_B67118; //----- (004DEF80) -------------------------------------------------------- void __thiscall sub_4DEF80(_DWORD *this, int a2, float a3, int a4) { _DWORD *v4; // edi float *v5; // eax float v6; // edx int v7; // eax char v8; // [esp+8h] [ebp-30h] char v9; // [esp+14h] [ebp-24h] float v10; // [esp+20h] [ebp-18h] float v11; // [esp+24h] [ebp-14h] float v12; // [esp+28h] [ebp-10h] float v13; // [esp+2Ch] [ebp-Ch] float v14; // [esp+30h] [ebp-8h] int v15; // [esp+34h] [ebp-4h] v4 = this; if ( !*((_DWORD *)dword_AD8EBC + 6) ) { v5 = sub_4DC1F0(dword_AD8EBC, (float *)&v9, (float *)a2); v10 = -*v5; v11 = -v5[1]; v12 = -v5[2]; sub_4430B0(&v10); v6 = *(float *)(a2 + 4); v7 = *(_DWORD *)(a2 + 8); v13 = *(float *)a2; v10 = v10 * a3; v11 = a3 * v11; v13 = v13 + v10; v14 = v6 + v11; *(float *)&v15 = 0.0; if ( !sub_4DEAD0(v4) ) (*(void (__stdcall **)(float *, _DWORD, float *, signed int))(*(_DWORD *)dword_AD8EBC + 232))( &v13, 0, &flt_AB399C, 1); sub_4A3BB0((int)byte_ADB468, v13, v14, v15); (*(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v8); if ( a4 ) { sub_67B690(dword_AD8EBC, a4); } else if ( dword_AD8EBC[4144] ) { sub_67B690(dword_AD8EBC, 3); } else { sub_67B690(dword_AD8EBC, 0); } sub_67B590((int)dword_AD8EBC, &v13); } } // AB399C: using guessed type float flt_AB399C; //----- (004DF0A0) -------------------------------------------------------- char __thiscall sub_4DF0A0(_DWORD *this) { char result; // al int v2; // esi _DWORD *v3; // edi __int16 v4; // ax char *v5; // eax result = (char)dword_AD8EBC; v2 = *((_DWORD *)dword_AD8EBC + 1026); v3 = this; if ( v2 && *(_BYTE *)(v2 + 2680) && (char *)v2 != dword_AD8EBC ) { v4 = sub_6508F0((_WORD *)(v2 + 84)); v5 = sub_664AB0(dword_AD8C90, v4); if ( v5 ) result = sub_4A1540(v3, v5); else result = nullsub_13(v2); } return result; } // 4B7A70: using guessed type _DWORD __stdcall nullsub_13(_DWORD); //----- (004DF0F0) -------------------------------------------------------- void __thiscall sub_4DF0F0(_DWORD *this) { float *v1; // eax int v2; // ecx _DWORD *v3; // esi v3 = this; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 92))() > 0 && !sub_64D0D0((_DWORD *)dword_AD8EBC + 21) && sub_64D0C0((_DWORD *)dword_AD8EBC + 21) <= 0 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() && !sub_65C360(dword_AD8EBC) && !sub_65C450(dword_AD8EBC) ) { if ( sub_65BA20(dword_AD8EBC) ) { if ( *((_DWORD *)dword_AD8EBC + 8) <= 0 && *((_DWORD *)dword_AD8EBC + 11) <= 0 && !v3[628] ) { sub_4E3330(v3 + 9, *((_BYTE *)v3 + 42) == 0); if ( !*((_BYTE *)v3 + 42) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { (*(void (__cdecl **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v1 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v3, v1); v2 = *((_DWORD *)dword_AD8EBC + 731); if ( v2 ) (*(void (__cdecl **)(signed int))(*(_DWORD *)v2 + 240))(1); } } } } } } //----- (004DF1E0) -------------------------------------------------------- char __thiscall sub_4DF1E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int v3; // ebx int v4; // eax char *v5; // eax char *v6; // eax int v8; // [esp-4h] [ebp-10h] v1 = this; v2 = (_DWORD *)sub_684D70(&byte_ADA230); v3 = sub_685140(&byte_ADA230); v4 = sub_684D60(&byte_ADA230); if ( v2 ) { if ( !(*(int (__thiscall **)(_DWORD *))(*v2 + 76))(v2) ) { v8 = v2[28] + 34; v5 = (char *)sub_40A910(255678066); goto LABEL_7; } } else if ( !v4 ) { return 1; } if ( !v3 ) { v5 = (char *)sub_40A910(1135981509); LABEL_7: v6 = sub_7549E0(v5, v8); sub_492060(v1, (int)v6); return 0; } return 1; } // ADA230: using guessed type char byte_ADA230; //----- (004DF260) -------------------------------------------------------- void __thiscall sub_4DF260(void *this, int a2, int a3, int a4) { int v4; // esi int v5; // ebx int v6; // edi const CHAR *v7; // eax int v8; // eax int v9; // ebx _DWORD *v10; // eax int v11; // eax float *v12; // eax unsigned int v13; // eax char *v14; // eax const CHAR *v15; // eax char v16; // [esp+4h] [ebp-Ch] int v17; // [esp+18h] [ebp+8h] int v18; // [esp+18h] [ebp+8h] v4 = (int)this; if ( !*((_DWORD *)dword_AD8EBC + 7) ) { if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550((_DWORD *)v4, 2); } v5 = dword_ACE8D0; v6 = a2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v5 + 200) && *(_DWORD *)(*(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)a2) ) { if ( *((_DWORD *)dword_AD8EBC + 7) ) { v7 = sub_40A910(608581482); LABEL_16: sub_492060((_DWORD *)v4, (int)v7); return; } if ( !sub_65B9D0(dword_AD8EBC, 500000) && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v8 = sub_49FBB0(a2); v9 = v8; v17 = v8; if ( v8 ) { if ( *(_BYTE *)(v8 + 667) == 1 ) { v10 = sub_439D70(byte_ADB468, &v16); v11 = sub_4316B0(v10); if ( !v11 ) { if ( *(_DWORD *)(v4 + 2512) ) sub_4E1EC0((_DWORD *)v4); goto LABEL_19; } if ( *(_BYTE *)(v11 + 71) == 1 ) { v7 = sub_40A910(2022678145); goto LABEL_16; } } if ( dword_AD8EBC[2496] ) return; if ( *(_DWORD *)(v9 + 110) == 6 || sub_4DF1E0((_DWORD *)v4) ) { if ( (_WORD)v6 != 1620 || !*(_BYTE *)(a4 + 2689) ) { if ( sub_6BEAC0(v6) && !sub_65C1E0(dword_AD8EBC) ) { (*(void (__thiscall **)(int))(*(_DWORD *)a4 + 196))(a4); sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() == 1 && ((*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a4 + 32))(a4) && *(_DWORD *)(v17 + 180) < 0x33u || !sub_6BF020(v6)) ) { if ( *(_BYTE *)(v4 + 42) ) sub_4E3330((_DWORD *)(v4 + 36), 0); *(_DWORD *)(v4 + 112) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v12 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v4, v12); } sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); if ( *(_DWORD *)(v4 + 2512) == 1 ) *(_DWORD *)(v4 + 2512) = 0; sub_64EB10((_DWORD *)dword_AD8EBC + 21); if ( sub_4DBFA0(v6) ) { v18 = sub_49FBB0(v6); (*(void (__stdcall **)(int, signed int, int))(*(_DWORD *)dword_AD8EBC + 312))(a4, 1, v6); if ( v18 ) { v13 = *(_DWORD *)(v18 + 203); if ( v13 ) sub_4F34B0(*(_DWORD *)(v4 + 1036), v13, 0); else sub_65B7B0((int)dword_AD8EBC, 1); } *(_WORD *)(v4 + 2528) = *(_WORD *)(a4 + 548); *(_WORD *)(v4 + 2530) = v6; if ( dword_AD8EBC[5472] ) sub_4C0120((_DWORD *)v4, *((_DWORD *)dword_AD8EBC + 1369), *(_WORD *)(a4 + 548)); else sub_4C1090(v4, v6, *(_WORD *)(a4 + 548)); v14 = dword_AD8EBC; dword_AD8EBC[5472] = 0; *((_DWORD *)v14 + 1369) = 0; } dword_AD8EBC[4144] = 1; return; } v15 = sub_40C190(-152361682); sub_492060((_DWORD *)v4, (int)v15); } sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } LABEL_19: sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return; } if ( *(_DWORD *)(v4 + 2512) ) sub_4E1EC0((_DWORD *)v4); sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; } } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (004DF670) -------------------------------------------------------- char __thiscall sub_4DF670(void *this, int a2, int a3, int a4, int a5) { int v5; // esi char *v6; // ecx const CHAR *v7; // eax _DWORD *v9; // edi int v10; // ebx int v11; // eax char *v12; // eax char *v13; // eax int v14; // ST0C_4 char *v15; // eax char *v16; // eax float *v17; // eax unsigned __int16 *v18; // edi const CHAR *v19; // eax unsigned int v20; // eax int v21; // eax char *v22; // eax const CHAR *v23; // eax v5 = (int)this; v6 = dword_AD8EBC; if ( *((_DWORD *)dword_AD8EBC + 7) ) return 0; if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550((_DWORD *)v5, 2); v6 = dword_AD8EBC; } if ( *((_DWORD *)v6 + 7) ) { v7 = sub_40A910(608581482); sub_492060((_DWORD *)v5, (int)v7); return 0; } if ( sub_65B9D0(v6, 500000) ) return 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v9 = (_DWORD *)sub_684D70(&byte_ADA230); v10 = sub_685140(&byte_ADA230); v11 = sub_684D60(&byte_ADA230); if ( v9 ) { if ( !(*(int (__thiscall **)(_DWORD *))(*v9 + 76))(v9) ) { v14 = v9[28] + 34; v15 = (char *)sub_40A910(255678066); v16 = sub_7549E0(v15, v14); sub_492060((_DWORD *)v5, (int)v16); sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return 0; } } else if ( !v11 ) { goto LABEL_16; } if ( !v10 ) { v12 = (char *)sub_40A910(1135981509); v13 = sub_7549E0(v12); sub_492060((_DWORD *)v5, (int)v13); if ( *(_DWORD *)(v5 + 2512) ) sub_4E1EC0((_DWORD *)v5); sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return 0; } LABEL_16: if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() || dword_AD8EBC[2496] ) return 0; if ( !sub_6BEAC0(a2) || sub_65C1E0(dword_AD8EBC) ) { v23 = sub_40C190(-152361682); sub_492060((_DWORD *)v5, (int)v23); return 1; } (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); *((_DWORD *)dword_AD8EBC + 1030) = 0; sub_4E1810((int)dword_AD8EBC); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() == 1 && !sub_6BF020(a2) ) { if ( *(_BYTE *)(v5 + 42) ) sub_4E3330((_DWORD *)(v5 + 36), 0); *(_DWORD *)(v5 + 112) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v17 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620((_DWORD *)v5, v17); } sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); v18 = (unsigned __int16 *)sub_49FBB0(a2); if ( *(_DWORD *)(v18 + 55) != 6 && !sub_4DF1E0((_DWORD *)v5) ) { sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return 0; } sub_650810(dword_AD8EBC); if ( !sub_685240(&byte_ADA230, *(_DWORD *)(v18 + 55)) ) { v19 = sub_40C190(-371122133); LABEL_35: sub_492060((_DWORD *)v5, (int)v19); return 0; } if ( !sub_67CC20(dword_AD8EBC) ) return 0; if ( sub_64F900(dword_AD8EBC, 34) ) { v19 = sub_40C190(-907426088); goto LABEL_35; } (*(void (__stdcall **)(int, int, signed int, int))(*(_DWORD *)dword_AD8EBC + 308))(a4, a5, 1, a2); v20 = *(_DWORD *)((char *)v18 + 203); if ( v20 ) { sub_4F34B0(*(_DWORD *)(v5 + 1036), v20, 0); } else { v21 = sub_4DBFA0(*v18); if ( !v21 || *(_DWORD *)(v21 + 87) != 1 ) { sub_650960((int)dword_AD8EBC, a4, a5, 0); sub_65B7B0((int)dword_AD8EBC, 1); } } *(_WORD *)(v5 + 2528) = -1; *(_WORD *)(v5 + 2530) = a2; if ( dword_AD8EBC[5472] ) sub_4C0190((_DWORD *)v5, *((_DWORD *)dword_AD8EBC + 1369), a4, a5); else sub_4C1200(v5, a2, a4, a5); v22 = dword_AD8EBC; dword_AD8EBC[5472] = 0; *((_DWORD *)v22 + 1369) = 0; dword_AD8EBC[4144] = 1; return 1; } // ADA230: using guessed type char byte_ADA230; //----- (004DFA80) -------------------------------------------------------- char __thiscall sub_4DFA80(_DWORD *this, char a2) { _DWORD *v2; // esi double v3; // st7 int v4; // ebx int v5; // edi int *v6; // eax int v7; // edi char result; // al float *v9; // eax double v10; // st7 double v11; // st6 int v12; // eax float v13; // ST18_4 int v14; // [esp+1Ch] [ebp-1Ch] float v15; // [esp+20h] [ebp-18h] float v16; // [esp+28h] [ebp-10h] __int64 v17; // [esp+2Ch] [ebp-Ch] char v18; // [esp+37h] [ebp-1h] v2 = this; if ( this[628] != 1 || !sub_69BE40((float *)byte_ADB468, this[130], this[131], this[132], this[133], this[134], this[135], (int)&v14, 0) ) { return 0; } v3 = *(float *)&v14; v2[629] = 1; v18 = 0; v2[630] = (signed __int64)v3; v17 = (signed __int64)v15; v2[631] = v17; v4 = *((unsigned __int16 *)dword_AD8EBC + 2064); v5 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v4) || (unsigned __int16)v4 > *(_WORD *)(v5 + 200) || (v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4), !*v6) || (v7 = *v6) == 0 ) { sub_65F350(dword_AD8EBC, 0.0); return 0; } v9 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v10 = *(float *)&v14; v16 = *v9 - *(float *)&v14; v11 = v9[1]; v12 = *(_DWORD *)(v7 + 180) * *(_DWORD *)(v7 + 180); *(float *)&v17 = v11 - v15; *((float *)&v17 + 1) = *(float *)&v17 * *(float *)&v17 + v16 * v16; if ( *((float *)&v17 + 1) >= (double)(unsigned int)v12 ) { if ( *((_BYTE *)v2 + 42) || v2[28] ) { sub_4E3330(v2 + 9, 0); v2[28] = 0; } if ( !a2 ) return v18; v13 = (double)*(unsigned int *)(v7 + 180); sub_4DEF80(v2, (int)&v14, v13, 6); } else { v17 = (signed __int64)v10; if ( sub_4DF670(v2, v4, SLODWORD(flt_ACCFCC), (signed __int64)v10, (signed __int64)v15) ) { v18 = 1; result = 1; v2[628] = 2; return result; } } return 1; } // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (004DFCD0) -------------------------------------------------------- void __thiscall sub_4DFCD0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi _DWORD *v4; // ebx int v5; // ebx int v6; // edx int v7; // eax signed int v8; // eax int v9; // edi signed int v10; // eax int v11; // ecx float *v12; // eax int v13; // ecx int v14; // [esp+4h] [ebp-20h] int v15; // [esp+8h] [ebp-1Ch] int v16; // [esp+Ch] [ebp-18h] char *v17; // [esp+10h] [ebp-14h] int v18; // [esp+14h] [ebp-10h] char *v19; // [esp+18h] [ebp-Ch] char *v20; // [esp+1Ch] [ebp-8h] char v21; // [esp+20h] [ebp-4h] char v22; // [esp+21h] [ebp-3h] v1 = this; if ( dword_BA6AA8 < 1 || sub_69C6A0( (float *)byte_ADB468, (int)(this + 130), (int)(this + 133), (char **)&v18, (int)&v14, (int *)&v17, (signed __int16 *)&v21) != 2 ) { goto LABEL_75; } if ( dword_B67404 ) { sub_68BFA0((int *)v1[304]); return; } if ( dword_B67408 ) { sub_537BA0((_DWORD *)v1[179], 0); return; } if ( dword_ACEC24 != 8 ) { LABEL_75: v2 = sub_4A3B80(&v20); v3 = (void (__thiscall ***)(_DWORD, signed int))v20; v4 = (_DWORD *)*v2; if ( v20 && !InterlockedDecrement((volatile LONG *)v20 + 1) && v3 ) (**v3)(v3, 1); if ( !v4 || !sub_6C4F30(v4) ) { v22 = 0; if ( dword_BA6AA8 >= 1 ) { v22 = *((_BYTE *)v1 + 42); if ( v22 ) *((_BYTE *)v1 + 42) = 0; } v20 = (char *)(v1 + 9); v5 = sub_4E2510((char *)v1 + 36); if ( v22 && !*((_BYTE *)v1 + 42) ) { v5 = 0; *((_BYTE *)v1 + 42) = 1; } if ( *((_DWORD *)dword_AD8EBC + 6) ) v5 = 0; switch ( v5 ) { case 0: if ( dword_BA6AA8 >= 1 && !sub_4DFA80(v1, 1) ) { v9 = dword_ADB4F8; v10 = sub_69C6A0( (float *)byte_ADB468, (int)(v1 + 130), (int)(v1 + 133), &v17, (int)&v14, (int *)&v19, (signed __int16 *)&v18); switch ( v10 ) { case 1: sub_4A2030((float *)v1, v17); goto LABEL_41; case 2: v1[28] = 0; if ( *((_DWORD *)dword_AD8EBC + 8) > 0 ) goto LABEL_68; if ( v9 != 3 ) { if ( v9 == 4 ) sub_6DFA50(byte_ADB468, 1); else sub_4A1330(v1, (int)&v14, 1); } if ( dword_BA6AB4 ) --dword_BA6AB4; if ( !v22 ) return; sub_4E3330(v20, 0); goto LABEL_68; case 3: sub_4E35B0(v1, (int)v19); goto LABEL_41; case 4: sub_4A2550(v1, v18); LABEL_41: if ( dword_BA6AB4 ) --dword_BA6AB4; goto LABEL_68; case 5: case 10: if ( dword_ADB4F8 != 2 ) goto LABEL_68; v11 = v1[281]; if ( v10 == 5 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v11 + 260))() && word_ADB614 != -1 ) { sub_6F0090(v1[281], word_ADB614); sub_4A7E60(v1, 1, 1); } } else if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v11 + 260))() && v1[281] ) { sub_4A7E60(v1, 0, 0); } return; case 8: if ( !dword_ADB604 ) sub_4A1330(v1, (int)&v14, 1); goto LABEL_68; default: goto LABEL_68; } } goto LABEL_68; case 1: if ( dword_BA6AA8 < 1 ) goto LABEL_68; v8 = sub_69C6A0( (float *)byte_ADB468, (int)(v1 + 130), (int)(v1 + 133), &v19, (int)&v14, &v18, (signed __int16 *)&v17); if ( dword_ACEC24 == 8 && v8 ) { sub_8EEE70(v1, 266, 0, 0); *((_BYTE *)v1 + 696) = 0; return; } switch ( v8 ) { case 1: if ( !sub_4DFA80(v1, 0) ) { sub_4A2030((float *)v1, v19); goto LABEL_34; } break; case 2: sub_4DFA80(v1, 0); break; case 3: sub_4E35B0(v1, v18); goto LABEL_34; case 4: sub_4A2550(v1, (unsigned __int16)v17); LABEL_34: if ( dword_BA6AB4 ) --dword_BA6AB4; break; default: break; } LABEL_68: if ( !v22 ) goto LABEL_71; if ( v5 ) { sub_4E3330(v20, 0); LABEL_71: if ( v5 ) sub_6C29C0(32, 0); } break; case 2: v6 = v1[25]; v7 = v1[26]; v14 = v1[24]; v1[28] = 0; v15 = v6; v16 = v7; sub_4A1330(v1, (int)&v14, 0); goto LABEL_68; case 3: if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 320))() ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v12 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v12); v13 = *((_DWORD *)dword_AD8EBC + 731); if ( v13 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v13 + 240))(1); } } goto LABEL_68; default: goto LABEL_68; } } } else { sub_8EEE70(v1, 266, 0, 0); *((_BYTE *)v1 + 696) = 0; } } // ACEC24: using guessed type int dword_ACEC24; // ADB4F8: using guessed type int dword_ADB4F8; // ADB604: using guessed type int dword_ADB604; // ADB614: using guessed type __int16 word_ADB614; // B67404: using guessed type int dword_B67404; // B67408: using guessed type int dword_B67408; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; //----- (004E01A0) -------------------------------------------------------- void __thiscall sub_4E01A0(void *this, float a2) { void *v2; // ebx int v3; // esi float v4; // edi float **v5; // esi float *v6; // eax int v7; // ST04_4 int v8; // ST08_4 int v9; // ST0C_4 int v10; // ST10_4 const CHAR *v11; // eax bool v12; // al char *v13; // ecx int v14; // ebx unsigned __int16 *v15; // edi int v16; // eax float v17; // esi const CHAR *v18; // eax const CHAR *v19; // eax const CHAR *v20; // eax const CHAR *v21; // eax int v22; // eax int v23; // eax const CHAR *v24; // eax _DWORD *v25; // ecx char v26; // al _DWORD *v27; // esi signed int v28; // eax char *v29; // esi bool v30; // bl char v31; // bl bool v32; // zf int v33; // eax int v34; // eax const CHAR *v35; // eax const CHAR *v36; // eax int v37; // eax const CHAR *v38; // eax double v39; // st7 int v40; // ebx _DWORD *v41; // edi float v42; // ST18_4 const CHAR *v43; // eax int v44; // [esp+28h] [ebp-28h] float v45[3]; // [esp+2Ch] [ebp-24h] int v46; // [esp+38h] [ebp-18h] float v47; // [esp+3Ch] [ebp-14h] int v48; // [esp+40h] [ebp-10h] float v49; // [esp+44h] [ebp-Ch] _DWORD *v50; // [esp+48h] [ebp-8h] unsigned __int8 v51; // [esp+4Fh] [ebp-1h] v2 = this; v50 = this; if ( !sub_65C1E0(dword_AD8EBC) ) { if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); v3 = *sub_49F490(&v49); if ( v49 != 0.0 ) { v4 = v49; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v49) + 4)) && v4 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v4))(LODWORD(v4), 1); } if ( v3 ) { if ( *(_BYTE *)(v3 + 52) ) { *(_BYTE *)(v3 + 52) = 0; v5 = (float **)*((_DWORD *)v2 + 305); if ( v5 ) { sub_5E9180(*((float ***)v2 + 305)); v6 = sub_419EE0((float *)&v44, 0xFFu, 0x90u, 0, 0xFFu); v7 = *(_DWORD *)v6; v8 = *((_DWORD *)v6 + 1); v9 = *((_DWORD *)v6 + 2); v10 = *((_DWORD *)v6 + 3); v11 = sub_40A910(1011971465); sub_5E9030(v5, (int)v11, v7, v8, v9, v10, 0, 3.0); } } } v12 = sub_67CAB0(dword_AD8EBC); v13 = dword_AD8EBC; if ( !v12 ) goto LABEL_29; if ( sub_662E50((_DWORD *)dword_AD8EBC + 424) ) return; v14 = *((unsigned __int16 *)dword_AD8EBC + 2064); v46 = v14; v15 = (unsigned __int16 *)sub_49FBB0(v14); if ( !v15 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } if ( !sub_67CC20(dword_AD8EBC) ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; sub_4E1810((int)dword_AD8EBC); return; } if ( (unsigned __int8)sub_6BE7D0(v14) ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; if ( sub_6BE900(v14) == 1 ) { LOWORD(a2) = v14; sub_6C29C0(33, (int)&a2); } return; } *(float *)&v16 = COERCE_FLOAT(sub_680BF0((int)byte_AD9238)); v17 = *((float *)v15 + 40); v49 = *(float *)&v16; sub_6BFA60((int)&v48, v14); if ( BYTE1(v48) ) LODWORD(v17) -= *(_DWORD *)((char *)&v15[2 * SBYTE1(v48) + 231] + 1); if ( SLODWORD(v49) < SLODWORD(v17) ) { v18 = sub_40C190(711347001); sub_492060(v50, (int)v18); *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } if ( sub_680C10((int)byte_AD9238) < *((_DWORD *)v15 + 44) ) { v19 = sub_4090F0(1080038243); sub_492060(v50, (int)v19); v13 = dword_AD8EBC; LABEL_29: *((_DWORD *)v13 + 1030) = 0; return; } sub_650810(dword_AD8EBC); if ( !sub_685240(&byte_ADA230, *(_DWORD *)(v15 + 55)) ) { v20 = sub_40C190(-371122133); sub_492060(v50, (int)v20); *((_DWORD *)dword_AD8EBC + 1030) = 0; sub_4E1810((int)dword_AD8EBC); return; } if ( sub_64F900(dword_AD8EBC, 34) ) { v21 = sub_40C190(-907426088); sub_492060(v50, (int)v21); *((_DWORD *)dword_AD8EBC + 1030) = 0; sub_4E1810((int)dword_AD8EBC); return; } v22 = *((_DWORD *)v15 + 46); if ( v22 == 3 || v22 == 8 ) { v23 = *((_DWORD *)dword_AD8EBC + 1026); if ( v23 ) { if ( *((_DWORD *)dword_AD8EBC + 169) != *(_DWORD *)(v23 + 676) && dword_AD8EBC[4112] ) { v24 = sub_40A910(-2137675903); v25 = v50; LABEL_40: sub_492060(v25, (int)v24); sub_4E1810((int)dword_AD8EBC); *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return; } } } v26 = sub_64F900(dword_AD8EBC, 394); v27 = v50; if ( !v26 ) { v51 = *((_BYTE *)v15 + 668); v28 = sub_4A8070(v50); if ( v28 < v51 ) { if ( v51 ) { v24 = sub_40A910(2123995119); v25 = v27; goto LABEL_40; } } } switch ( *((_DWORD *)v15 + 46) ) { case 0: case 3: case 5: case 7: case 8: v29 = (char *)*((_DWORD *)dword_AD8EBC + 1026); v30 = v29 && (!(*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v29 + 36))(*((_DWORD *)dword_AD8EBC + 1026)) || v29[2496]); if ( v29 && sub_650B20(v29) ) { v31 = 0; } else { if ( v30 ) v32 = *(_DWORD *)((char *)v15 + 199) == 1; else v32 = *(_DWORD *)((char *)v15 + 199) == 0; v31 = v32; } v49 = COERCE_FLOAT(sub_67DA80(dword_AD8EBC, (int)v29)); switch ( *((_DWORD *)v15 + 46) ) { case 3: v34 = sub_4DBFA0(*v15); break; case 7: if ( v29 && !v29[2680] ) { v31 = 0; goto LABEL_79; } goto LABEL_78; case 8: *(float *)&v33 = COERCE_FLOAT(sub_4DBFA0(*v15)); v32 = *(_DWORD *)((char *)v15 + 527) == 5; v47 = *(float *)&v33; if ( v32 && v29 && sub_650CF0(v29) && *(_DWORD *)(sub_650CF0(v29) + 99) == 16 ) { LABEL_78: v31 = 1; goto LABEL_79; } v34 = LODWORD(v47); break; default: goto LABEL_79; } if ( !v34 || !*(_BYTE *)(v34 + 38) || v29 && v31 && LODWORD(v49) != 3 && LODWORD(v49) != 1 ) { LABEL_79: if ( v29 ) { if ( LODWORD(v49) == 1 ) { v36 = sub_40C190(828799337); sub_492060(v50, (int)v36); dword_AD8EBC[4144] = 0; LABEL_107: *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } if ( v31 ) { v37 = *((_DWORD *)v15 + 46); if ( (v37 || LODWORD(v49) == 3) && (v37 != 3 || LODWORD(v49) != 3) ) { if ( v37 != 8 || *(_DWORD *)((char *)v15 + 527) != 5 || *((_DWORD *)v29 + 13) <= 0 ) { v39 = sub_4E17C0(dword_AD8EBC, (int)v29); v47 = v39; v40 = v46; (*(void (__stdcall **)(char *, int))(*(_DWORD *)dword_AD8EBC + 304))(v29, v46); v49 = v39; (*(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 300))(v29); if ( v49 + 50.0 <= v47 ) { v41 = v50; if ( *((_BYTE *)v50 + 42) || v50[28] ) { sub_4E3330(v50 + 9, 0); v41[28] = 0; } a2 = v49 - 1.0; dword_AD8EBC[4144] = 1; sub_4DED70(v41, (int)v41, (int)v29, a2, 4); } else { if ( *((_BYTE *)v15 + 192) && dword_AD8EBC[4144] ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(v45); sub_4B7620(v50, v45); } sub_4DF260(v50, v40, SLODWORD(a2), (int)v29); } } else { v38 = sub_40A910(-799135188); sub_492060(v50, (int)v38); dword_AD8EBC[4144] = 0; } goto LABEL_107; } } v35 = sub_40C190(-264097460); } else { v35 = sub_40C190(-1968863276); } sub_492060(v50, (int)v35); dword_AD8EBC[4144] = 0; goto LABEL_107; } v29 = dword_AD8EBC; v49 = 0.0; goto LABEL_78; case 1: case 2: sub_4DF260(v27, v14, SLODWORD(a2), (int)dword_AD8EBC); goto LABEL_107; case 4: if ( !sub_6BEAC0(v14) || (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() ) { v43 = sub_40C190(-152361682); sub_492060(v27, (int)v43); } else { v42 = (double)*(unsigned int *)(sub_49FBB0(v14) + 259); sub_698370((void **)byte_ADB468, v42); v27[628] = 1; } goto LABEL_107; default: goto LABEL_107; } } } // ADA230: using guessed type char byte_ADA230; //----- (004E0910) -------------------------------------------------------- void __thiscall sub_4E0910(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi double v4; // st7 char *v5; // ecx bool v6; // bl float *v7; // eax void *v8; // eax float *v9; // esi int v10; // eax double v11; // st7 int v12; // eax __int16 v13; // di bool v14; // al double v15; // st7 float v16; // ST14_4 float v17; // [esp+18h] [ebp-10h] float v18; // [esp+1Ch] [ebp-Ch] float v19; // [esp+20h] [ebp-8h] float v20; // [esp+24h] [ebp-4h] v2 = a2; v3 = this; sub_4A3910(dword_AD8EBC, &v17, a2); *(float *)&a2 = v18 * v18 + v17 * v17 + v19 * v19; *(float *)&a2 = sqrt(*(float *)&a2); v4 = *(float *)&a2; (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 296))(v2); v20 = v4; v5 = dword_AD8EBC; if ( dword_AD8EBC[1924] == 1 ) { sub_443390(dword_AD8EBC, 2); sub_4B7550(v3, 2); v5 = dword_AD8EBC; } if ( v5 != (char *)v2 ) { v6 = sub_67DA80(v5, v2) != 1; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 500))() ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 196))(v2); if ( sub_65C360(dword_AD8EBC) ) sub_6C29C0(32, 0); if ( flt_AAEBA4 + v20 - 10.0 > *(float *)&a2 && v6 ) { if ( !dword_AD8EBC[2496] && !*((_DWORD *)dword_AD8EBC + 7) && !*(_BYTE *)(v2 + 2496) && !sub_64D0C0((_DWORD *)dword_AD8EBC + 21) ) { *((_DWORD *)dword_AD8EBC + 1027) = *((_DWORD *)dword_AD8EBC + 1026); v7 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v3, v7); (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); if ( sub_650B20((_DWORD *)v2) ) { a2 = v2; sub_6C29C0(30, (int)&a2); } else if ( sub_4DF1E0(v3) ) { v8 = operator new(0x28u); if ( v8 ) v9 = (float *)sub_4DD7C0((int)v8); else v9 = 0; *(_BYTE *)v9 = 0; v9[1] = flt_ACCFCC; *((_BYTE *)v9 + 13) = 1; dword_AD8EBC[4144] = 1; sub_4B7940(v3); v10 = sub_685140(&byte_ADA230); if ( v10 ) v11 = (double)*(unsigned int *)(sub_49F760(*(unsigned __int16 *)(v10 + 8)) + 123) / 1000.0; else v11 = 1.0; v9[2] = v11; v12 = *((_DWORD *)dword_AD8EBC + 1026); v13 = -1; if ( v12 ) v13 = *(_WORD *)(v12 + 548); v14 = sub_652200(dword_AD8EBC); sub_64D230((_DWORD *)v9 + 4, 0x20000000, v13, -131072, 0, 0, v14, -1); sub_64E6E0((_DWORD *)dword_AD8EBC + 21, v9); } } } else { *(float *)&a2 = v20 - 1.0; v15 = *(float *)&a2; dword_AD8EBC[4144] = 1; v16 = v15; sub_4DED70(v3, (int)v3, v2, v16, 0); } } } } // AAEBA4: using guessed type float flt_AAEBA4; // ACCFCC: using guessed type float flt_ACCFCC; // ADA230: using guessed type char byte_ADA230; //----- (004E0BC0) -------------------------------------------------------- void __thiscall sub_4E0BC0(_DWORD *this, int a2) { int v2; // edi char v3; // bl int v4; // eax int v5; // esi int v6; // eax unsigned __int8 v7; // bl const CHAR *v8; // eax int v9; // eax int *v10; // ecx int *v11; // eax int v12; // eax int v13; // ST28_4 float *v14; // eax int v15; // ebx float v16; // [esp+20h] [ebp-58h] float v17; // [esp+24h] [ebp-54h] _DWORD *v18; // [esp+2Ch] [ebp-4Ch] int v19; // [esp+30h] [ebp-48h] float v20; // [esp+34h] [ebp-44h] int v21; // [esp+38h] [ebp-40h] int v22; // [esp+3Ch] [ebp-3Ch] float v23; // [esp+40h] [ebp-38h] int v24; // [esp+44h] [ebp-34h] float v25; // [esp+48h] [ebp-30h] int *v26; // [esp+4Ch] [ebp-2Ch] unsigned int v27; // [esp+60h] [ebp-18h] int v28; // [esp+74h] [ebp-4h] v18 = this; if ( !dword_ADB4F8 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } if ( sub_662E50((_DWORD *)dword_AD8EBC + 424) == 1 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } v2 = dword_ADB618; v3 = dword_ADB61C; v22 = dword_ADB618; v23 = *(float *)&dword_ADB61C; v24 = dword_ADB620; v4 = sub_6E2400(&unk_ADB488, dword_ADB618); v5 = v4; if ( !v4 ) { *((_DWORD *)dword_AD8EBC + 1030) = v4; return; } v6 = sub_49F760(*(_DWORD *)(v4 + 8)); if ( !v6 ) goto LABEL_12; v25 = COERCE_FLOAT(sub_4A3DB0((unsigned __int8 *)(v6 + 2))); if ( v25 == 0.0 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } v7 = sub_6DC560(byte_ADB468, v2, *((_WORD *)dword_AD8EBC + 274), v3); LOBYTE(v23) = v7; if ( v7 == -1 ) { v8 = sub_40A910(1519606789); sub_492060(v18, (int)v8); LABEL_12: *((_DWORD *)dword_AD8EBC + 1030) = 0; return; } sub_6DB7F0((int)byte_ADB468, v2, SLOBYTE(v23), v24); sub_4019E0(&v26, "ActPos"); v28 = 0; sub_6E52A0(&v26, v7, 2); v9 = sub_4B12C0(*(_DWORD *)(v5 + 64)); v10 = v26; if ( v27 < 0x10 ) v10 = (int *)&v26; v11 = (int *)(*(int (__thiscall **)(int, int *))(*(_DWORD *)v9 + 72))(v9, v10); if ( v11 ) { v19 = v11[35]; v20 = *((float *)v11 + 36); v21 = v11[37]; if ( *(_BYTE *)(LODWORD(v25) + 135) ) sub_69AD10((float *)byte_ADB468, *(float *)&v19, v20, (int)&v19); if ( ((*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 || (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))()) && (v7 != BYTE1(v23) || HIWORD(v22) != (_WORD)v22) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); } else { v12 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v16 = *(float *)v12; v17 = *(float *)(v12 + 4); v13 = *(_DWORD *)(v12 + 8); v14 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); if ( (unsigned __int8)sub_85ECE0(v14, (float *)&v19) ) { v25 = v16 - *(float *)&v19; v25 = fabs(v25); v23 = v25; v25 = v17 - v20; v25 = fabs(v25); *(float *)&v24 = v25; if ( sub_4E1790(&v23) > 1.5 ) { sub_69AD10((float *)byte_ADB468, *(float *)&v19, v20, (int)&v19); sub_4DEF80(v18, (int)&v19, 0.0, 7); *((_DWORD *)dword_AD8EBC + 1030) = 0; } else { (*(void (__stdcall **)(int *, int *))(*(_DWORD *)dword_AD8EBC + 184))(&v19, &v19); } } else { if ( (_WORD)v22 != -1 ) { v15 = v24; if ( *(float *)&v24 != 0.0 ) { (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 324))(); sub_4B5590((_DWORD ***)v18, v2, SLOBYTE(v23), *(_BYTE *)(v15 + 3)); } } *((_DWORD *)dword_AD8EBC + 1030) = 0; } } } else { *((_DWORD *)dword_AD8EBC + 1030) = 0; } sub_636A10(&v26); } // ADB4F8: using guessed type int dword_ADB4F8; // ADB618: using guessed type int dword_ADB618; // ADB61C: using guessed type int dword_ADB61C; // ADB620: using guessed type int dword_ADB620; //----- (004E0F40) -------------------------------------------------------- void __thiscall sub_4E0F40(_DWORD *this, int a2) { _DWORD *v2; // edi char *v3; // eax int v4; // esi int v5; // eax int v6; // esi float *v7; // eax double v8; // st7 int v9; // eax int v10; // eax _BYTE *v11; // ebx int v12; // eax float *v13; // eax float *v14; // eax float *v15; // eax float v16; // [esp+1Ch] [ebp-14h] float v17; // [esp+20h] [ebp-10h] float v18; // [esp+24h] [ebp-Ch] float v19; // [esp+28h] [ebp-8h] float v20; // [esp+2Ch] [ebp-4h] v2 = this; if ( sub_65C360(dword_AD8EBC) && *((_DWORD *)dword_AD8EBC + 1026) == *((_DWORD *)dword_AD8EBC + 1027) ) return; if ( sub_4DEAD0(v2) == 1 ) { v3 = dword_AD8EBC; v4 = *((_DWORD *)dword_AD8EBC + 1026); if ( v4 ) { if ( sub_651680(*((_DWORD *)dword_AD8EBC + 1026)) ) { sub_4B75A0(v2, *(_WORD *)(v4 + 548)); *((_DWORD *)dword_AD8EBC + 1030) = 0; } v3 = dword_AD8EBC; } if ( v3[1924] == 2 && *((_DWORD *)v3 + 6) ) { v5 = *((_DWORD *)v3 + 1026); if ( v5 ) sub_4E0910(v2, v5); } return; } if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); v6 = *((_DWORD *)dword_AD8EBC + 1026); if ( !v6 ) { *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v7 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v2, v7); return; } if ( !sub_662E50((_DWORD *)dword_AD8EBC + 424) ) { sub_4A3910((void *)v6, &v16, (int)dword_AD8EBC); v19 = v17 * v17 + v16 * v16 + v18 * v18; v19 = sqrt(v19); v8 = v19; v20 = v19; if ( sub_651680(v6) ) { if ( v20 < 150.0 ) { v9 = sub_49F370(*(unsigned __int16 *)(v6 + 942)); if ( v9 && ((v10 = *(_DWORD *)(v9 + 99), v10 == 23) || v10 == 26) ) { v11 = (_BYTE *)*sub_4A3B80(&v19); sub_410C00(&v19); if ( v11 && !sub_6C4EE0(v11) ) sub_727200(*(_WORD *)(v6 + 548)); } else { sub_4B75A0(v2, *(_WORD *)(v6 + 548)); } sub_6BA7B0(&dword_AB6520, *(_WORD *)(v6 + 942)); v12 = sub_49F370(*(unsigned __int16 *)(v6 + 942)); if ( !v12 || *(_DWORD *)(v12 + 99) == 15 ) goto LABEL_34; goto LABEL_32; } } else { if ( *(_BYTE *)(v6 + 1924) != 5 ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 296))(v6); (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 300))(v6); v19 = v8; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 36))(v6) ) { if ( dword_AD8EBC[1924] == 2 ) { sub_4E0910(v2, v6); } else if ( v19 + 50.0 >= v20 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v15 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v2, v15); } else { v19 = v19 - 1.0; sub_4DED70(v2, (int)v2, v6, v19, 0); } *((_DWORD *)dword_AD8EBC + 1030) = 0; } else { if ( v19 + 50.0 >= v20 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v14 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v2, v14); } else { v19 = v19 - 1.0; sub_4DED70(v2, (int)v2, v6, v19, 0); } *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; } return; } if ( v20 < 150.0 ) { sub_4B89E0((_DWORD **)v2, *(_WORD *)(v6 + 548)); LABEL_32: (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 240))(1); v13 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v2, v13); LABEL_34: *((_DWORD *)dword_AD8EBC + 1030) = 0; dword_AD8EBC[4144] = 0; return; } } sub_4DED70(v2, (int)v2, v6, 99.0, 0); goto LABEL_34; } } //----- (004E1340) -------------------------------------------------------- char __userpurge sub_4E1340@(_DWORD *a1@, float a2@, int a3) { _DWORD *v3; // ebx int (*v4)(void); // edx char result; // al int v6; // esi float **v7; // esi float *v8; // eax int v9; // ST04_4 int v10; // ST08_4 int v11; // ST0C_4 int v12; // ST10_4 const CHAR *v13; // eax char *v14; // ecx int v15; // esi double v16; // st7 int v17; // [esp+20h] [ebp-1Ch] float v18; // [esp+30h] [ebp-Ch] float v19; // [esp+34h] [ebp-8h] _DWORD *v20; // [esp+38h] [ebp-4h] v3 = a1; v4 = *(int (**)(void))(*(_DWORD *)dword_AD8EBC + 500); v20 = a1; result = v4(); if ( !result ) { result = sub_65B9D0(dword_AD8EBC, 500000); if ( !result ) { result = (char)dword_AD8EBC; if ( !dword_AD8EBC[2496] ) { sub_6C29C0(32, 0); if ( sub_65C450(dword_AD8EBC) ) sub_6C29C0(35, 0); v6 = *sub_49F490(&v19); if ( v19 != 0.0 ) { a2 = v19; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v19) + 4)) && a2 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(a2))(LODWORD(a2), 1); } if ( v6 ) { if ( *(_BYTE *)(v6 + 52) ) { *(_BYTE *)(v6 + 52) = 0; v7 = (float **)v3[305]; if ( v7 ) { sub_5E9180((float **)v3[305]); v8 = sub_419EE0((float *)&v17, 0xFFu, 0x90u, 0, 0xFFu); v9 = *(_DWORD *)v8; v10 = *((_DWORD *)v8 + 1); v11 = *((_DWORD *)v8 + 2); v12 = *((_DWORD *)v8 + 3); v13 = sub_40A910(1011971465); sub_5E9030(v7, (int)v13, v9, v10, v11, v12, 0, 3.0); } } } result = sub_662E50((_DWORD *)dword_AD8EBC + 424); if ( !result ) { v14 = dword_AD8EBC; v15 = *((_DWORD *)dword_AD8EBC + 1026); if ( v15 ) { result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v15 + 36))(*((_DWORD *)dword_AD8EBC + 1026)); if ( !result || (result = sub_651680(v15)) != 0 ) { v14 = dword_AD8EBC; } else { v14 = dword_AD8EBC; if ( dword_AD8EBC[4144] && dword_AD8EBC[1924] == 2 ) { v16 = sub_4E17C0(dword_AD8EBC, v15); v19 = v16; (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 296))(v15); (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 300))(v15); v18 = v16; (*(void (__thiscall **)(int))(*(_DWORD *)v15 + 32))(v15); if ( dword_AD8EBC[1924] == 2 ) { sub_4E0910(v20, v15); result = (char)dword_AD8EBC; *((_DWORD *)dword_AD8EBC + 1030) = 0; } else { if ( v18 + 50.0 < v19 ) { v18 = v18 - 1.0; sub_4DED70(v20, SLODWORD(a2), v15, v18, 0); } dword_AD8EBC[4144] = 0; result = (char)dword_AD8EBC; *((_DWORD *)dword_AD8EBC + 1030) = 0; } return result; } } } *((_DWORD *)v14 + 1030) = 0; dword_AD8EBC[4144] = 0; return result; } } } } return result; } //----- (004E15C0) -------------------------------------------------------- unsigned int __userpurge sub_4E15C0@(float *a1@, float a2@, float a3) { char *v3; // eax float *v4; // esi int v5; // ecx int v6; // eax unsigned int result; // eax v3 = dword_AD8EBC; v4 = a1; switch ( *((_DWORD *)dword_AD8EBC + 1030) ) { case 0: sub_4DE4D0(a1, SLODWORD(a3)); break; case 1: sub_4DEB90(a1, SLODWORD(a3), 0); break; case 2: sub_4E0F40(a1, SLODWORD(a3)); break; case 3: sub_4E1340(a1, a2, SLODWORD(a3)); break; case 4: sub_4E01A0(a1, a3); break; case 5: goto LABEL_11; case 6: v5 = *((unsigned __int16 *)dword_AD8EBC + 2064); if ( (_WORD)v5 == -1 ) goto LABEL_11; if ( sub_4DF670(v4, v5, SLODWORD(flt_ACCFCC), *((_DWORD *)v4 + 630), *((_DWORD *)v4 + 631)) ) { *((_DWORD *)v4 + 628) = 2; *((_DWORD *)dword_AD8EBC + 1030) = 0; } else { v4[628] = 0.0; sub_4E1810((int)dword_AD8EBC); v3 = dword_AD8EBC; LABEL_11: *((_DWORD *)v3 + 1030) = 0; } break; case 7: sub_4E0BC0(a1, SLODWORD(a3)); break; default: break; } sub_4DFCD0(v4); if ( !(dword_ACEAF4 & 1) ) { dword_ACEAF4 |= 1u; dword_ACEAF0 = timeGetTime(); } v6 = *((_DWORD *)v4 + 628); if ( v6 && v6 != 1 ) { result = timeGetTime(); if ( result > dword_ACEAF0 + 6000 ) { sub_4B79A0(v4); result = sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } } else { result = timeGetTime(); dword_ACEAF0 = result; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; // ACEAF0: using guessed type int dword_ACEAF0; // ACEAF4: using guessed type int dword_ACEAF4; //----- (004E1760) -------------------------------------------------------- double __thiscall sub_4E1760(float *this) { return (float)(this[1] * this[1] + *this * *this + this[2] * this[2]); } //----- (004E1790) -------------------------------------------------------- double __thiscall sub_4E1790(float *this) { float v1; // ST00_4 v1 = this[1] * this[1] + *this * *this; return (float)sqrt(v1); } //----- (004E17C0) -------------------------------------------------------- double __thiscall sub_4E17C0(void *this, int a2) { float v3; // [esp+0h] [ebp-Ch] float v4; // [esp+4h] [ebp-8h] float v5; // [esp+8h] [ebp-4h] float v6; // [esp+14h] [ebp+8h] sub_4A3910(this, &v3, a2); v6 = v4 * v4 + v3 * v3 + v5 * v5; return (float)sqrt(v6); } //----- (004E1810) -------------------------------------------------------- int __thiscall sub_4E1810(int this) { *(_DWORD *)(this + 4124) = 0; *(_WORD *)(this + 4128) = -1; return sub_67B690((_DWORD *)this, 0); } //----- (004E1830) -------------------------------------------------------- _DWORD *__cdecl sub_4E1830(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACD964 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD964 + 4), v3); if ( *result == a1 ) break; if ( ++v3 >= v2 ) return 0; } return result; } // ACD964: using guessed type int dword_ACD964; //----- (004E1890) -------------------------------------------------------- int __thiscall sub_4E1890(int this) { int result; // eax result = 0; *(_DWORD *)(this + 176) = 768; *(_DWORD *)(this + 192) = 768; *(_DWORD *)(this + 256) = 1200; *(_DWORD *)(this + 304) = 1200; *(_DWORD *)(this + 172) = 1024; *(_DWORD *)(this + 188) = 1280; *(_DWORD *)(this + 204) = 1280; *(_DWORD *)(this + 220) = 1280; *(_DWORD *)(this + 224) = 1024; *(_DWORD *)(this + 312) = 3; *(_DWORD *)(this + 328) = 3; *(_DWORD *)(this + 332) = 1280; *(_DWORD *)(this + 344) = 3; *(_DWORD *)(this + 376) = 3; *(_DWORD *)(this + 156) = 800; *(_DWORD *)(this + 160) = 600; *(_BYTE *)(this + 164) = 0; *(_DWORD *)(this + 168) = 0; *(_BYTE *)(this + 180) = 0; *(_DWORD *)(this + 184) = 0; *(_BYTE *)(this + 196) = 0; *(_DWORD *)(this + 200) = 1; *(_DWORD *)(this + 208) = 960; *(_BYTE *)(this + 212) = 0; *(_DWORD *)(this + 216) = 0; *(_BYTE *)(this + 228) = 0; *(_DWORD *)(this + 232) = 2; *(_DWORD *)(this + 236) = 1400; *(_DWORD *)(this + 240) = 1050; *(_BYTE *)(this + 244) = 0; *(_DWORD *)(this + 248) = 0; *(_DWORD *)(this + 252) = 1600; *(_BYTE *)(this + 260) = 0; *(_DWORD *)(this + 264) = 0; *(_DWORD *)(this + 268) = 1600; *(_DWORD *)(this + 272) = 900; *(_BYTE *)(this + 276) = 0; *(_DWORD *)(this + 280) = 4; *(_DWORD *)(this + 284) = 1920; *(_DWORD *)(this + 288) = 1400; *(_BYTE *)(this + 292) = 0; *(_DWORD *)(this + 296) = 4; *(_DWORD *)(this + 300) = 1920; *(_BYTE *)(this + 308) = 0; *(_DWORD *)(this + 316) = 1680; *(_DWORD *)(this + 320) = 1050; *(_BYTE *)(this + 324) = 0; *(_DWORD *)(this + 336) = 800; *(_BYTE *)(this + 340) = 0; *(_DWORD *)(this + 348) = 1600; *(_DWORD *)(this + 352) = 900; *(_BYTE *)(this + 356) = 0; *(_DWORD *)(this + 360) = 4; *(_DWORD *)(this + 364) = 1440; *(_DWORD *)(this + 368) = 900; *(_BYTE *)(this + 372) = 0; *(_DWORD *)(this + 380) = 1920; *(_DWORD *)(this + 384) = 1080; *(_BYTE *)(this + 388) = 0; *(_DWORD *)(this + 392) = 4; *(_DWORD *)(this + 396) = 2560; *(_DWORD *)(this + 400) = 1440; *(_BYTE *)(this + 404) = 0; *(_DWORD *)(this + 408) = 4; *(_DWORD *)(this + 412) = 2560; *(_DWORD *)(this + 416) = 1600; *(_BYTE *)(this + 420) = 0; *(_DWORD *)(this + 424) = 0; *(_DWORD *)(this + 464) = 1440; *(_DWORD *)(this + 428) = 3840; *(_DWORD *)(this + 432) = 2160; *(_BYTE *)(this + 436) = 0; *(_DWORD *)(this + 440) = 4; *(_DWORD *)(this + 444) = 1366; *(_DWORD *)(this + 448) = 768; *(_BYTE *)(this + 452) = 0; *(_DWORD *)(this + 456) = 4; *(_DWORD *)(this + 460) = 3440; *(_BYTE *)(this + 468) = 0; *(_DWORD *)(this + 472) = 4; return result; } //----- (004E1B50) -------------------------------------------------------- void __thiscall sub_4E1B50(int this, _DWORD *a2) { int v2; // esi _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax int v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax int v14; // ecx v2 = this; if ( a2 == *(_DWORD **)(this + 556) ) { sub_4AA080((_BYTE **)this, 1); return; } if ( a2 == *(_DWORD **)(this + 936) ) { sub_4A6C70((_DWORD *)this, 1); return; } if ( a2 == *(_DWORD **)(this + 944) ) { sub_4A6D20((_DWORD *)this); return; } if ( a2 == *(_DWORD **)(this + 564) ) { sub_4AA0F0((_DWORD *)this, 1); return; } if ( a2 == *(_DWORD **)(this + 620) ) { sub_4A7630((_DWORD **)this, 1); return; } if ( a2 == *(_DWORD **)(this + 948) ) { sub_4A6DA0((_DWORD *)this); return; } if ( a2 == *(_DWORD **)(this + 964) ) { if ( !*(_DWORD *)(this + 2328) ) sub_4A6E40((_DWORD *)this); return; } if ( a2 == *(_DWORD **)(this + 1032) ) { sub_4A6FD0((_DWORD *)this); return; } if ( a2 == *(_DWORD **)(this + 5136) ) { sub_4A5EB0((_DWORD *)this); return; } if ( a2 == *(_DWORD **)(this + 1012) ) { sub_4A4FE0((_DWORD **)this); return; } if ( a2 == *(_DWORD **)(this + 1268) ) { sub_4A53F0((_DWORD *)this); return; } if ( a2 == (_DWORD *)sub_6D3810() ) { v3 = (_DWORD *)sub_6D3810(); sub_8F86A0(&unk_BA6B10, v3); return; } if ( a2 == (_DWORD *)sub_6D3840() ) { v4 = (_DWORD *)sub_6D3840(); sub_8F86A0(&unk_BA6B10, v4); return; } if ( a2 == (_DWORD *)sub_6D3860() ) { v5 = (_DWORD *)sub_6D3860(); sub_8F86A0(&unk_BA6B10, v5); return; } if ( a2 == (_DWORD *)sub_6D3890() ) { v6 = sub_6D3890(); nullsub_16(v6); v7 = (_DWORD *)sub_6D3890(); sub_8F86A0(&unk_BA6B10, v7); return; } if ( a2 == *(_DWORD **)(v2 + 1128) ) { sub_4A58C0((_DWORD **)v2, 0); return; } if ( a2 == (_DWORD *)sub_7154A0() ) { v8 = (_DWORD *)sub_7154A0(); sub_8F86A0(&unk_BA6B10, v8); return; } if ( a2 == (_DWORD *)sub_7154F0() ) { sub_4A7E40(); return; } if ( a2 == (_DWORD *)sub_7154D0() ) { v9 = (_DWORD *)sub_7154D0(); sub_8F86A0(&unk_BA6B10, v9); return; } if ( a2 == (_DWORD *)sub_7154E0() ) { v10 = (_DWORD *)sub_7154E0(); sub_8F86A0(&unk_BA6B10, v10); return; } if ( a2 == (_DWORD *)sub_7154C0() ) { v11 = (_DWORD *)sub_7154C0(); sub_8F86A0(&unk_BA6B10, v11); return; } if ( a2 == (_DWORD *)sub_7154B0() ) { v12 = (_DWORD *)sub_7154B0(); sub_8F86A0(&unk_BA6B10, v12); return; } if ( a2 == (_DWORD *)sub_714D70() ) { v13 = (_DWORD *)sub_714D70(); goto LABEL_48; } v14 = *(_DWORD *)(v2 + 5116); if ( a2 == (_DWORD *)v14 ) { sub_446870(v14); return; } if ( a2 == *(_DWORD **)(v2 + 5176) ) { sub_4A6020((_DWORD *)v2, 0); return; } v13 = *(_DWORD **)(v2 + 4980); if ( a2 == v13 ) { LABEL_48: sub_8F86A0(&unk_BA6B10, v13); return; } if ( a2 == *(_DWORD **)(v2 + 980) ) sub_4A4BC0((_DWORD *)v2); } // 5F9920: using guessed type int __thiscall nullsub_16(_DWORD); //----- (004E1E00) -------------------------------------------------------- int __thiscall sub_4E1E00(char **this, int a2) { char **v2; // esi char **v3; // esi signed int v4; // ebx int result; // eax v2 = this; sub_5A0A20(this[163], a2); sub_5A0A20(v2[168], a2); v3 = v2 + 169; v4 = 4; do { sub_5A0A20(*(v3 - 5), a2); result = sub_5A0A20(*v3, a2); ++v3; --v4; } while ( v4 ); return result; } //----- (004E1E50) -------------------------------------------------------- int __thiscall sub_4E1E50(char **this) { char **v1; // esi char **v2; // esi signed int v3; // edi int result; // eax v1 = this; sub_5A0A60(this[163]); sub_5A0A60(v1[168]); v2 = v1 + 169; v3 = 4; do { sub_5A0A60(*(v2 - 5)); result = sub_5A0A60(*v2); ++v2; --v3; } while ( v3 ); return result; } //----- (004E1E90) -------------------------------------------------------- void __thiscall sub_4E1E90(_DWORD ***this, int a2, int a3) { _DWORD ***v3; // esi char *v4; // eax v3 = this; v4 = sub_7549E0("[%s] : %s", a2, a3); sub_605810(v3[176], v4); } //----- (004E1EC0) -------------------------------------------------------- char __thiscall sub_4E1EC0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax float *v3; // eax v1 = this; v2 = this[628]; if ( v2 == 3 ) { LOBYTE(v2) = sub_6508C0(dword_AD8EBC); if ( !(_BYTE)v2 ) { v3 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_4B7620(v1, v3); sub_4B79A0(v1); LOBYTE(v2) = sub_65F350(dword_AD8EBC, COERCE_FLOAT(1)); } } else if ( v2 == 1 ) { this[628] = 0; } return v2; } //----- (004E1F20) -------------------------------------------------------- char __thiscall sub_4E1F20(_DWORD **this, char a2) { _DWORD **v2; // esi char result; // al v2 = this; if ( a2 ) { sub_8F86A0(&unk_BA6B10, this[206]); result = sub_8F86A0(&unk_BA6B10, v2[207]); } else if ( (*(unsigned __int8 (**)(void))(*this[206] + 260))() ) { sub_8F86A0(&unk_BA6B10, v2[206]); result = sub_8F82A0(&unk_BA6B10, v2[207]); } else { sub_8F86A0(&unk_BA6B10, v2[207]); result = sub_8F82A0(&unk_BA6B10, v2[206]); } return result; } //----- (004E1FC0) -------------------------------------------------------- char __thiscall sub_4E1FC0(_DWORD *this) { int v1; // eax v1 = this[205]; if ( v1 ) LOBYTE(v1) = sub_8F82A0(&unk_BA6B10, (_DWORD *)this[205]); return v1; } //----- (004E1FE0) -------------------------------------------------------- void __thiscall sub_4E1FE0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[204] ) { if ( (*(unsigned __int8 (**)(void))(*this[204] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[204]); else sub_8F82A0(&unk_BA6B10, v1[204]); } } //----- (004E2030) -------------------------------------------------------- int __thiscall sub_4E2030(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi int result; // eax v4 = this; if ( a4 ) { if ( this[249] ) result = (*(int (__stdcall **)(int, int))(*this[249] + 308))(a2, a3); if ( v4[250] ) result = (*(int (__stdcall **)(int, int))(*v4[250] + 308))(a2, a3); if ( v4[251] ) result = (*(int (__stdcall **)(int, int))(*v4[251] + 308))(a2, a3); } else { if ( this[246] ) result = (*(int (__stdcall **)(int, int))(*this[246] + 308))(a2, a3); if ( v4[247] ) result = (*(int (__stdcall **)(int, int))(*v4[247] + 308))(a2, a3); if ( v4[248] ) result = (*(int (__stdcall **)(int, int))(*v4[248] + 308))(a2, a3); } return result; } //----- (004E2100) -------------------------------------------------------- __int16 __thiscall sub_4E2100(_DWORD ***this, __int16 a2, char a3) { return sub_534730(this[179], a2, a3); } //----- (004E2150) -------------------------------------------------------- bool __thiscall sub_4E2150(_DWORD *this) { _DWORD **v1; // ecx v1 = (_DWORD **)this[176]; return v1 && (unsigned __int8)sub_604E00(v1); } //----- (004E2170) -------------------------------------------------------- bool __thiscall sub_4E2170(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx BOOL v3; // eax v2 = (_DWORD *)this[216]; if ( v2 ) v3 = sub_510EC0(v2, a2) != 0; else LOBYTE(v3) = 0; return v3; } //----- (004E21A0) -------------------------------------------------------- int __thiscall sub_4E21A0(_DWORD *this, int a2, int a3) { signed int v3; // eax _DWORD *v4; // edx v3 = 0; v4 = this + 40; while ( *(v4 - 1) != a2 || *v4 != a3 ) { ++v3; v4 += 4; if ( v3 >= 21 ) return 0; } return this[4 * v3 + 42]; } //----- (004E21E0) -------------------------------------------------------- int __stdcall sub_4E21E0(int a1, int a2, char *a3) { char *v3; // esi int v4; // edi int result; // eax char v6; // dl char v7; // dl char v8; // dl char v9; // al char v10; // dl char v11; // dl unsigned __int8 v12; // al char v13; // dl unsigned __int8 v14; // al char v15; // [esp+Ch] [ebp-4h] __int16 v16; // [esp+Dh] [ebp-3h] char v17; // [esp+Fh] [ebp-1h] v3 = a3; v4 = a2; sprintf(a3, "%I64d", a1, a2); a3 = v3 + 1; result = strlen(v3); if ( result <= 9 ) { if ( result <= 6 ) { if ( result > 3 ) { *(_WORD *)((char *)&a3 + 1) = 0; a2 = 0; LOWORD(a3) = (unsigned __int8)v3[result - 3]; v13 = v3[result - 2]; v14 = v3[result - 1]; BYTE1(a3) = v13; HIWORD(a3) = v14; HIBYTE(a3) = 0; result = sprintf(v3, "%I64d.%s", __PAIR__(v4, a1) / 1000, &a3); } } else { LOBYTE(a3) = v3[result - 3]; v10 = v3[result - 2]; *(_WORD *)((char *)&a3 + 1) = 0; BYTE1(a3) = v10; HIWORD(a3) = (unsigned __int8)v3[result - 1]; LOBYTE(a2) = v3[result - 6]; v11 = v3[result - 5]; v12 = v3[result - 4]; BYTE1(a2) = v11; HIWORD(a2) = v12; result = sprintf(v3, "%I64d.%s.%s", __PAIR__(v4, a1) / 1000000, &a2, &a3); } } else { LOBYTE(a3) = v3[result - 3]; v6 = v3[result - 2]; *(_WORD *)((char *)&a3 + 1) = 0; BYTE1(a3) = v6; HIWORD(a3) = (unsigned __int8)v3[result - 1]; LOBYTE(a2) = v3[result - 6]; v7 = v3[result - 5]; *(_WORD *)((char *)&a2 + 1) = 0; BYTE1(a2) = v7; HIWORD(a2) = (unsigned __int8)v3[result - 4]; v15 = v3[result - 9]; v8 = v3[result - 8]; v9 = v3[result - 7]; LOBYTE(v16) = v8; HIBYTE(v16) = v9; v17 = 0; result = sprintf(v3, "%I64d.%s.%s.%s", __PAIR__(v4, a1) / 1000000000, &v15, &a2, &a3); } return result; } //----- (004E2390) -------------------------------------------------------- char *__stdcall sub_4E2390(char *a1, int a2, int a3) { char *result; // eax char *v4; // esi int v5; // edi char i; // bl char v7; // al char *v8; // [esp+8h] [ebp-10Ch] char v9; // [esp+10h] [ebp-104h] result = (char *)a2; v4 = a1; if ( a1 ) { v5 = 0; memset(&v9, 0, 0x100u); if ( *a1 ) { i = 0; v8 = &v9; while ( 1 ) { if ( a3 && a3 == v5 ) goto LABEL_19; if ( !strncmp(v4, "{color,", 7u) ) break; if ( i && !strncmp(v4, "}", 1u) ) { ++v4; ++v5; i = 0; } else { if ( !IsDBCSLeadByte(*v4) ) { *v8++ = *v4; LABEL_17: ++v4; ++v5; goto LABEL_18; } strncat(&v9, v4, 2u); v8 += 2; v4 += 2; v5 += 2; } LABEL_18: if ( !*v4 ) goto LABEL_19; } v7 = v4[7]; v4 += 7; v5 += 7; for ( i = 1; v7; ++v5 ) { if ( v7 == 44 ) break; v7 = (v4++)[1]; } goto LABEL_17; } LABEL_19: result = strncpy((char *)a2, &v9, strlen(&v9)); } return result; } //----- (004E24E0) -------------------------------------------------------- _DWORD *__thiscall sub_4E24E0(void *this) { void *v1; // esi v1 = this; sub_6F3C20(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (004E2510) -------------------------------------------------------- int __thiscall sub_4E2510(char *this) { float *v1; // esi char v2; // al bool v3; // zf char v4; // bl float v5; // edx float v6; // ecx char v7; // al signed int v8; // edi float v9; // eax float v10; // ecx float *v11; // eax float v12; // ecx float v13; // edx float v14; // eax float v15; // edx float v16; // eax float v17; // edx float v18; // eax double v19; // st6 float v20; // ecx double v21; // st6 float v22; // ecx float v23; // edx float v24; // eax float v25; // ecx float v26; // edx float v27; // eax float v28; // edx float v29; // eax int v30; // ecx int v31; // edx int v32; // eax char v33; // dl char v34; // al char v35; // cl int result; // eax float v37; // [esp+14h] [ebp-44h] float v38; // [esp+18h] [ebp-40h] float v39; // [esp+1Ch] [ebp-3Ch] float v40; // [esp+20h] [ebp-38h] float v41; // [esp+24h] [ebp-34h] float v42; // [esp+28h] [ebp-30h] float v43; // [esp+2Ch] [ebp-2Ch] float v44; // [esp+30h] [ebp-28h] float v45; // [esp+34h] [ebp-24h] float v46; // [esp+38h] [ebp-20h] float v47; // [esp+3Ch] [ebp-1Ch] float v48; // [esp+40h] [ebp-18h] float v49; // [esp+44h] [ebp-14h] float v50; // [esp+48h] [ebp-10h] float v51; // [esp+4Ch] [ebp-Ch] int v52; // [esp+50h] [ebp-8h] int v53; // [esp+54h] [ebp-4h] v1 = (float *)this; v2 = this[6]; v53 = 0; if ( v2 ) { if ( !(*(_BYTE *)(dword_ACDC84 + 38) & 4) ) { v3 = this[1] == 0; this[5] = 1; if ( v3 && !this[3] && !this[2] ) *this = 1; } } v4 = this[5]; if ( v4 || v2 ) { v5 = *((float *)this + 9); v6 = *((float *)this + 11); v47 = v1[10]; v7 = *(_BYTE *)v1; v8 = 1; v53 = 1; *((_BYTE *)v1 + 4) = 1; v46 = v5; v48 = v6; if ( *((_BYTE *)v1 + 7) != v7 || *((_BYTE *)v1 + 8) != *((_BYTE *)v1 + 1) || *((_BYTE *)v1 + 9) != *((_BYTE *)v1 + 2) || *((_BYTE *)v1 + 10) != *((_BYTE *)v1 + 3) ) { v53 = 2; } else { v37 = v1[3] - v1[6]; v38 = v1[4] - v1[7]; v39 = v1[5] - v1[8]; if ( sub_443070(&v37) <= 50.0 ) { LABEL_39: v33 = *((_BYTE *)v1 + 1); v34 = *((_BYTE *)v1 + 2); *((_BYTE *)v1 + 7) = *(_BYTE *)v1; v35 = *((_BYTE *)v1 + 3); *((_BYTE *)v1 + 8) = v33; *((_BYTE *)v1 + 9) = v34; *((_BYTE *)v1 + 10) = v35; goto LABEL_40; } v53 = 2; if ( !v4 && *((_BYTE *)v1 + 6) ) { v9 = v1[13]; v10 = v1[14]; v46 = v1[12]; v47 = v9; v48 = v10; } } v48 = 0.0; sub_4430B0(&v46); v43 = -v46; v44 = -v47; v45 = -v48; sub_443140(&v46, &v40, (float *)&dword_ABD4A4); sub_443140((float *)&dword_ABD4A4, &v37, &v46); v49 = *(float *)&dword_BA45C0; v50 = *(float *)&dword_BA45C4; v51 = *(float *)&dword_BA45C8; if ( byte_B670BC == 1 ) { v11 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); v12 = *v11; v13 = v11[1]; v14 = v11[2]; v46 = v12; v47 = v13; v48 = v14; } if ( *(_BYTE *)v1 ) { v49 = v49 + v46; v50 = v50 + v47; v51 = v51 + v48; } sub_4430B0(&v49); if ( *((_BYTE *)v1 + 1) ) { v49 = v49 + v43; v50 = v50 + v44; v51 = v51 + v45; } sub_4430B0(&v49); if ( *((_BYTE *)v1 + 2) ) { v49 = v40 + v49; v50 = v41 + v50; v51 = v42 + v51; } sub_4430B0(&v49); if ( *((_BYTE *)v1 + 3) ) { v49 = v37 + v49; v50 = v38 + v50; v51 = v39 + v51; } sub_4430B0(&v49); if ( !*((_BYTE *)v1 + 5) ) { v15 = v1[13]; v16 = v1[14]; v49 = v1[12]; v50 = v15; v51 = v16; } v17 = v50; v18 = v51; v19 = v49 * 100.0; v1[12] = v49; v20 = v1[6]; v37 = v19; v43 = v20; v21 = v50; v1[13] = v17; v44 = v1[7]; v1[14] = v18; v38 = v21 * 100.0; v45 = v1[8]; v39 = 100.0 * v51; v43 = v37 + v43; v44 = v38 + v44; v45 = v45 + v39; if ( sub_699590(byte_ADB468, v43, v44) ) { v52 = 1; while ( 1 ) { v22 = v1[6]; v23 = v1[7]; v24 = v1[8]; *(float *)&v52 = (double)v52; v48 = v24; v37 = v49 * *(float *)&v52; v38 = *(float *)&v52 * v50; v46 = v37 + v22; v47 = v38 + v23; if ( sub_699590(byte_ADB468, v46, v47) ) break; ++v8; v52 = v8; if ( v8 >= 100 ) goto LABEL_38; } v25 = v1[6]; v52 = v8 - 1; v26 = v1[7]; v27 = v1[8]; *(float *)&v52 = (double)(v8 - 1); v37 = v49 * *(float *)&v52; v38 = v50 * *(float *)&v52; v39 = *(float *)&v52 * v51; v46 = v37 + v25; v43 = v46; v47 = v38 + v26; v44 = v47; v48 = v39 + v27; v45 = v48; } LABEL_38: v28 = v44; v29 = v45; v1[15] = v43; v30 = *((_DWORD *)v1 + 6); v1[16] = v28; v31 = *((_DWORD *)v1 + 7); v1[17] = v29; v32 = *((_DWORD *)v1 + 8); *((_DWORD *)v1 + 3) = v30; *((_DWORD *)v1 + 4) = v31; *((_DWORD *)v1 + 5) = v32; goto LABEL_39; } if ( this[4] ) { *(_DWORD *)(this + 7) = 0; v53 = 3; } LABEL_40: result = v53; *((_BYTE *)v1 + 4) = *((_BYTE *)v1 + 5); *((_BYTE *)v1 + 5) = 0; *v1 = 0.0; return result; } // ABD4A4: using guessed type int dword_ABD4A4; // ACDC84: using guessed type int dword_ACDC84; // B670BC: using guessed type char byte_B670BC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004E2910) -------------------------------------------------------- char *__thiscall sub_4E2910(int *this, __int16 a2, __int16 a3, __int16 a4) { int *v4; // edi char *result; // eax v4 = this; if ( byte_AD8CD8 == 1 ) return 0; result = sub_664AB0(dword_AD8C90, a2); if ( result ) { result[1482] = 1; } else { sub_4B7A00(v4, a2, a3, a4); result = 0; } return result; } // AD8CD8: using guessed type char byte_AD8CD8; //----- (004E2960) -------------------------------------------------------- void __thiscall sub_4E2960(_DWORD *this) { int v1; // ebx _DWORD *v2; // esi int v3; // edi float v4; // [esp+4h] [ebp-10h] float v5; // [esp+8h] [ebp-Ch] float v6; // [esp+Ch] [ebp-8h] float v7; // [esp+10h] [ebp-4h] v1 = (int)this; if ( this[296] ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v4); v4 = v4 - *(float *)(v1 + 1188); v5 = v5 - *(float *)(v1 + 1192); v6 = v6 - *(float *)(v1 + 1196); v7 = v6 * v6 + v4 * v4 + v5 * v5; if ( v7 > 28900.0 ) { sub_4E1B50(v1, *(_DWORD **)(v1 + 1184)); *(_DWORD *)(v1 + 1184) = 0; } } else { v2 = (_DWORD *)this[293]; if ( v2 ) { while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3) ) break; } if ( !v2 ) return; } *(_DWORD *)(v1 + 1184) = v3; (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 200))(v1 + 1188); } } } //----- (004E2A50) -------------------------------------------------------- char __stdcall sub_4E2A50(int a1, int *a2) { int v2; // eax char *v3; // eax int *v5; // edx bool v6; // sf unsigned __int8 v7; // of int *v8; // eax if ( (_WORD)a1 == *((_WORD *)dword_AD8EBC + 274) ) { v2 = sub_680CC0((int)byte_AD9238); } else { v3 = sub_664AB0(dword_AD8C90, a1); if ( !v3 ) return 0; v2 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 100))(v3); } a1 = v2; if ( !v2 ) return 0; v5 = a2; v7 = __OFSUB__(v2, *a2); v6 = v2 - *a2 < 0; a2 = (int *)*a2; v8 = &a1; if ( !(v6 ^ v7) ) v8 = (int *)&a2; *v5 = *v8; return 1; } //----- (004E2AC0) -------------------------------------------------------- char __thiscall sub_4E2AC0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ebx LONG v3; // eax int (__thiscall ***v4)(_DWORD, signed int); // edi _DWORD *v5; // eax int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)*sub_4A3B80(&v7); LOBYTE(v3) = v7; if ( v7 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v7; v3 = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !v3 ) { if ( v4 ) LOBYTE(v3) = (**v4)(v4, 1); } } if ( v2 ) { if ( sub_6C4F30(v2) ) { if ( !(*(unsigned __int8 (**)(void))(*v1[208] + 260))() ) { sub_8F86A0(&unk_BA6B10, v1[199]); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v1[208]); return v3; } v5 = v1[208]; } else { if ( !(*(unsigned __int8 (**)(void))(*v1[198] + 260))() ) { sub_8F86A0(&unk_BA6B10, v1[199]); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v1[198]); return v3; } v5 = v1[198]; } sub_8F86A0(&unk_BA6B10, v5); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v1[199]); } return v3; } //----- (004E2BC0) -------------------------------------------------------- char __thiscall sub_4E2BC0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // edi LONG v3; // eax int (__thiscall ***v4)(_DWORD, signed int); // ebx int v6; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)*sub_4A3B80(&v6); LOBYTE(v3) = v6; if ( v6 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v6; v3 = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v3 ) { if ( v4 ) LOBYTE(v3) = (**v4)(v4, 1); } } if ( v2 ) { LOBYTE(v3) = sub_6C4F30(v2); if ( (_BYTE)v3 ) { if ( v2[1322] == 4 ) { if ( (*(unsigned __int8 (**)(void))(*v1[209] + 260))() ) { sub_8F82A0(&unk_BA6B10, v1[212]); LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, v1[209]); } else { sub_8F86A0(&unk_BA6B10, v1[212]); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v1[209]); } } } } return v3; } //----- (004E2C80) -------------------------------------------------------- unsigned int __thiscall sub_4E2C80(_DWORD ***this, char a2) { _DWORD ***v2; // esi unsigned int result; // eax _DWORD ***v4; // esi signed int v5; // ebx _DWORD **v6; // ecx v2 = this; sub_4E86F0(this[193], a2); sub_5A1970(v2[163], a2); result = sub_5A1970(v2[168], a2); v4 = v2 + 169; v5 = 4; do { v6 = *(v4 - 5); if ( v6 ) result = sub_5A1970(v6, a2); if ( *v4 ) result = sub_5A1970(*v4, a2); ++v4; --v5; } while ( v5 ); return result; } //----- (004E2D60) -------------------------------------------------------- char __thiscall sub_4E2D60(_BYTE *this, _DWORD *a2, _DWORD *a3) { _BYTE *v3; // esi int v4; // edi int v5; // eax v3 = this; if ( byte_BA6BA5 ) { v4 = a2[8]; v5 = sub_8F8280(&unk_BA6B10); if ( v4 != v5 ) goto LABEL_9; } LOBYTE(v5) = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*a2 + 332))(a2, pt.x, pt.y); if ( !(_BYTE)v5 ) { if ( dword_BA6A68 ) return v5; LABEL_9: v3[697] = 0; return v5; } v3[697] = 1; LOBYTE(v5) = dword_BA6A68; if ( dword_BA6A68 <= 0 ) { if ( dword_BA6A68 < 0 ) LOBYTE(v5) = sub_5FBDB0(a3); } else { LOBYTE(v5) = sub_5FCF60(a3); } return v5; } // BA6A68: using guessed type int dword_BA6A68; // BA6BA5: using guessed type char byte_BA6BA5; //----- (004E2DF0) -------------------------------------------------------- char __thiscall sub_4E2DF0(_DWORD *this, char a2) { _DWORD *v2; // edi int *v3; // eax int v4; // esi _BYTE *v5; // ebx int v7; // [esp+4h] [ebp-8h] int *v8; // [esp+8h] [ebp-4h] v2 = this; v3 = (int *)this[301]; if ( v3 ) { while ( 1 ) { v4 = v3[2]; v3 = (int *)*v3; v8 = v3; if ( v4 ) { v3 = (int *)v2[1236]; if ( (int *)v4 == v3 ) { if ( a2 && *((_BYTE *)v3 + 356) ) *((_WORD *)v3 + 14) &= 0xFFFEu; else *((_WORD *)v3 + 14) |= 1u; } else { if ( a2 ) *(_WORD *)(v4 + 28) &= 0xFFFEu; else *(_WORD *)(v4 + 28) |= 1u; if ( v4 == v2[142] ) { v5 = (_BYTE *)*((_DWORD *)dword_AD8EBC + 1026); if ( a2 == 1 ) { if ( !v5 || (v7 = sub_650CF0(*((_DWORD **)dword_AD8EBC + 1026)), sub_6516C0(v5)) || v7 && *(_DWORD *)(v7 + 99) == 29 ) { *(_WORD *)(v2[142] + 28) |= 1u; } else { *(_WORD *)(v2[142] + 28) &= 0xFFFEu; sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[142]); } } } if ( dword_B9DCC4 ) sub_582B00((int *)v2[181], a2 == 0); if ( a2 && dword_AD8EBC[1924] == 6 ) { if ( v4 == v2[1243] ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[1243]); v3 = (int *)v2[285]; if ( (int *)v4 == v3 ) LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, (_DWORD *)v2[285]); } else { if ( v4 == v2[1243] ) sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[1243]); v3 = (int *)v2[285]; if ( (int *)v4 == v3 ) LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[285]); } } } if ( !v8 ) break; v3 = v8; } } return (char)v3; } // B9DCC4: using guessed type int dword_B9DCC4; //----- (004E3280) -------------------------------------------------------- char __thiscall sub_4E3280(_DWORD *this, int a2, __int16 a3) { char *v3; // ecx char result; // al char *v5; // ecx if ( this[628] ) return 1; sub_67B660(dword_AD8EBC, 4); v3 = dword_AD8EBC; result = 1; *((_WORD *)dword_AD8EBC + 2064) = a3; *((_DWORD *)v3 + 1031) = 1; v5 = dword_AD8EBC; dword_AD8EBC[5472] = 1; *((_DWORD *)v5 + 1369) = a2; return result; } //----- (004E32E0) -------------------------------------------------------- char __thiscall sub_4E32E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char result; // al v1 = this; v2 = this[585]; if ( v2 && *(_BYTE *)(v2 + 9) != 1 ) { result = sub_4E65D0(v1 + 585); *((_BYTE *)v1 + 2344) = 1; } else { sub_6F3C20(&off_AB7F2C); result = (unsigned int)sub_8EF040(v1, dword_ACDD50, 0); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (004E3330) -------------------------------------------------------- void __thiscall sub_4E3330(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax int v4; // ecx int v5; // edx _DWORD *v6; // edi const CHAR *v7; // eax v2 = this; if ( a2 ) { v3 = this[9]; v4 = this[10]; v5 = v2[11]; v2[12] = v3; v2[13] = v4; *((_BYTE *)v2 + 5) = 1; *(_BYTE *)v2 = 1; v2[14] = v5; } v6 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( a2 ) { if ( !*((_BYTE *)v2 + 6) ) { v7 = sub_40A910(1062370716); LABEL_8: sub_492060(v6, (int)v7); goto LABEL_9; } } else if ( *((_BYTE *)v2 + 6) ) { v7 = sub_40A910(1519156613); goto LABEL_8; } LABEL_9: *((_BYTE *)v2 + 6) = a2; } //----- (004E33A0) -------------------------------------------------------- void __thiscall sub_4E33A0(_BYTE *this) { _BYTE *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax int v5; // ST00_4 void (__thiscall ***v6)(_DWORD, signed int); // edi int v7; // ecx HWND v8; // eax _DWORD *v9; // ecx _DWORD *v10; // ecx int v11; // ecx int v12; // edi _DWORD *v13; // eax _DWORD *v14; // eax int v15; // esi HWND v16; // esi int v17; // [esp+10h] [ebp-118h] char v18; // [esp+14h] [ebp-114h] int v19; // [esp+124h] [ebp-4h] v1 = this; v2 = sub_8E5FC0(); sub_8E5970(v2); if ( v1[2657] ) sub_68F530((int *)byte_ADB468); if ( v1[2655] ) sub_63AA20((int)byte_AD8A08); if ( v1[2656] ) sub_6B1950(&unk_B912C8); v3 = sub_8E5FC0(); sub_8E59E0(v3); if ( v1[5125] ) { if ( v1[2654] ) sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); } else if ( v1[5124] ) { v4 = (_DWORD *)sub_46F100(); if ( v4 ) { v5 = *sub_4E6780(v4, &v17); v19 = 0; sub_6CC430(v5, hWnd, (int)&v18, 260); v19 = -1; if ( v17 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v17; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } v7 = *((_DWORD *)v1 + 146); *((_WORD *)v1 + 2562) = 256; v8 = *(HWND *)(v7 + 5016); if ( v8 ) ShowWindow(v8, 5); } } v9 = (_DWORD *)*((_DWORD *)v1 + 1208); if ( v9 ) sub_6B3E10(v9, dword_BA46D0); v10 = (_DWORD *)*((_DWORD *)v1 + 1209); if ( v10 ) sub_6B4790(v10, dword_BA46D0); v11 = dword_ACCF98; v12 = dword_BA46D0; if ( !dword_ACCF98 ) { v13 = operator new(0x28u); v19 = 1; if ( v13 ) v14 = sub_4534E0(v13); else v14 = 0; v11 = (int)v14; v19 = -1; dword_ACCF98 = (int)v14; } sub_452FA0(v11, v12); if ( !v1[5125] ) { v1[5124] = 1; v15 = *((_DWORD *)v1 + 146); if ( v15 ) { v16 = *(HWND *)(v15 + 5016); if ( v16 ) ShowWindow(v16, 0); } } } // ACCF98: using guessed type int dword_ACCF98; // BA46D0: using guessed type int dword_BA46D0; //----- (004E35B0) -------------------------------------------------------- void __thiscall sub_4E35B0(_DWORD *this, int a2) { _DWORD *v2; // ebx float *v3; // esi float *v4; // eax const CHAR *v5; // eax int v6; // edi int v7; // [esp+14h] [ebp-Ch] float v8; // [esp+18h] [ebp-8h] float v9; // [esp+1Ch] [ebp-4h] v2 = this; if ( a2 && !sub_65B9D0(dword_AD8EBC, 500000) && !dword_AD8EBC[2496] && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() && sub_65BA20(dword_AD8EBC) ) { v3 = *(float **)(a2 + 12); v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); if ( *(_BYTE *)(a2 + 8) ) { *(float *)&v7 = *v4 - v3[22]; v8 = v4[1] - v3[23]; v9 = v4[2] - v3[24]; if ( sub_443070((float *)&v7) <= 125.0 ) { sub_4A1880(v2, a2); return; } } else { v5 = sub_40C190(-2045716265); sub_492060(v2, (int)v5); } v6 = *(_DWORD *)(a2 + 12); v7 = *(int *)(v6 + 88); v8 = *(float *)(v6 + 92); v9 = *(float *)(v6 + 96); sub_4DEF80(v2, (int)&v7, 70.0, 5); } } //----- (004E36C0) -------------------------------------------------------- _DWORD *__thiscall sub_4E36C0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ecx v2 = this + 292; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[292] + 4))(this + 292); result[2] = a2; *result = 0; result[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (004E3710) -------------------------------------------------------- char __stdcall sub_4E3710(_DWORD *a1, _DWORD *a2) { int v2; // esi _DWORD *v3; // eax int v4; // ecx v2 = a1[8]; if ( v2 == sub_8F8280(&unk_BA6B10) ) goto LABEL_19; v3 = (_DWORD *)sub_8F8280(&unk_BA6B10); if ( v3 == (_DWORD *)dword_AD01E8 ) { LOBYTE(v3) = dword_BA6B50; v4 = dword_BA6B50 - 2; if ( dword_BA6B50 - 2 < (unsigned int)dword_BA6B50 ) { v3 = (_DWORD *)dword_BA6B48; if ( dword_BA6B50 != 2 ) { do { if ( v3 ) v3 = (_DWORD *)*v3; else v3 = 0; --v4; } while ( v4 ); } if ( v3 ) { v3 = (_DWORD *)v3[2]; if ( v3 == (_DWORD *)a1[8] ) { LABEL_19: LOBYTE(v3) = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*a1 + 332))(a1, pt.x, pt.y); if ( (_BYTE)v3 ) { LOBYTE(v3) = dword_BA6A68; byte_BA6BA5 = 1; if ( dword_BA6A68 <= 0 ) { if ( dword_BA6A68 < 0 ) LOBYTE(v3) = sub_463C50(a2); } else { LOBYTE(v3) = sub_463C10(a2); } } } } } } return (char)v3; } // AD01E8: using guessed type int dword_AD01E8; // BA6A68: using guessed type int dword_BA6A68; // BA6B48: using guessed type int dword_BA6B48; // BA6B50: using guessed type int dword_BA6B50; // BA6BA5: using guessed type char byte_BA6BA5; //----- (004E37C0) -------------------------------------------------------- char __usercall sub_4E37C0@(_DWORD *a1@, double a2@) { _DWORD *v2; // edi int v3; // esi const CHAR *v4; // eax v2 = a1; v3 = a1[1229]; if ( !v3 || !sub_4FD890((_BYTE *)a1[1229]) && !(unsigned __int8)sub_4FD8B0(v3, a2) ) return 0; v4 = sub_40A910(-1027164657); sub_492060(v2, (int)v4); return 1; } //----- (004E3810) -------------------------------------------------------- bool __thiscall sub_4E3810(_DWORD **this, int a2) { int v2; // eax int v3; // eax bool result; // al if ( a2 != -1 && (v2 = sub_60CC90(this[192], a2)) != 0 && (v3 = sub_4E67B0(*(unsigned __int16 *)(v2 + 7))) != 0 ) result = *(_BYTE *)(v3 + 2) != 0; else result = 0; return result; } //----- (004E3850) -------------------------------------------------------- char __usercall sub_4E3850@(_DWORD *a1@, double a2@) { _DWORD *v2; // esi int v3; // edi const CHAR *v4; // eax const char *v6; // eax v2 = a1; v3 = a1[1229]; if ( v3 && (sub_4FD890((_BYTE *)a1[1229]) || (unsigned __int8)sub_4FD8B0(v3, a2)) ) { v4 = sub_40A910(-1027164657); sub_492060(v2, (int)v4); return 0; } if ( v2[139] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[139] + 260))() || v2[141] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[141] + 260))() ) { goto LABEL_23; } if ( v2[1279] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[1279] + 260))() ) { v6 = sub_41A850(12458); goto LABEL_8; } if ( v2[1282] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[1282] + 260))() || v2[1283] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[1283] + 260))() || v2[155] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[155] + 260))() ) { LABEL_23: v6 = sub_41A850(12460); LABEL_8: sub_492060(v2, (int)v6); return 0; } return 1; } //----- (004E3970) -------------------------------------------------------- void __thiscall sub_4E3970(_DWORD *this, int *a2, int *a3) { int v3; // ebx int v4; // esi int v5; // edi int v6; // edx int v7; // eax bool v8; // zf _DWORD *v9; // [esp+0h] [ebp-8h] int *v10; // [esp+4h] [ebp-4h] v9 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 36))() ) { if ( dword_AD8EBC[1449] ) { v10 = a2; if ( a2 != a3 ) { while ( 1 ) { v3 = *v10; v4 = dword_ACB230; v5 = *(unsigned __int16 *)(*v10 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = *(_DWORD *)(v6 + 4 * v5); if ( v7 ) { if ( sub_682850(&dword_AD9E70, *(_DWORD *)(v7 + 274)) ) break; } } } } ++v10; if ( v10 == a3 ) return; } if ( !dword_B9DCC4 || (!dword_B9E5C8 ? (v8 = byte_B9DCA0 == 0) : (v8 = dword_B9E5C0 == 0), v8) ) sub_4A1880(v9, v3); } } } } // ACB230: using guessed type int dword_ACB230; // AD9E70: using guessed type int dword_AD9E70; // B9DCA0: using guessed type char byte_B9DCA0; // B9DCC4: using guessed type int dword_B9DCC4; // B9E5C0: using guessed type int dword_B9E5C0; // B9E5C8: using guessed type int dword_B9E5C8; //----- (004E3A60) -------------------------------------------------------- char __usercall sub_4E3A60@(_DWORD *a1@, double a2@) { _DWORD *v2; // esi const CHAR *v3; // eax char result; // al int v5; // edi const CHAR *v6; // eax int v7; // ecx int v8; // [esp+4h] [ebp-8h] int v9; // [esp+8h] [ebp-4h] v2 = a1; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() ) { v3 = sub_40A910(1538157772); sub_492060(v2, (int)v3); result = 0; } else { v5 = v2[1229]; if ( v5 && (sub_4FD890((_BYTE *)v2[1229]) || (unsigned __int8)sub_4FD8B0(v5, a2)) ) { v6 = sub_40A910(-1027164657); sub_492060(v2, (int)v6); result = 0; } else { sub_4AA750(v2, a2, 0, 0, 0, 0, 0); sub_4AA750(v2, a2, 1, 1, 0, 0, 0); v7 = v2[1229]; if ( v7 ) { sub_4FDD90(v7); v8 = 48; v9 = 0; sub_6B69F0(dword_AB6534, (int)&v8, 0.0, 0); } result = 1; } } return result; } // AB6534: using guessed type int dword_AB6534; //----- (004E3B30) -------------------------------------------------------- void __thiscall sub_4E3B30(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int *v3; // eax int *v4; // esi _DWORD *v5; // eax int **v6; // eax int *j; // eax int *i; // eax _DWORD *v9; // esi _DWORD *v10; // eax _DWORD *v11; // esi _DWORD *v12; // ST00_4 void **v13; // [esp+Ch] [ebp-1Ch] _DWORD *v14; // [esp+10h] [ebp-18h] _DWORD *v15; // [esp+14h] [ebp-14h] int v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v1 = this; if ( byte_ACEB01 == 1 && !GetFocus() ) { v2 = 0; v16 = 0; v14 = 0; v15 = 0; v13 = &PgTList::`vftable'; v3 = (int *)v1[1240]; v4 = (int *)*v3; v17 = 0; if ( v4 != v3 ) { do { if ( v4[4] ) { v5 = (_DWORD *)((int (__thiscall *)(void ***))v13[1])(&v13); v5[2] = v4[4]; *v5 = 0; v5[1] = v15; if ( v15 ) { *v15 = v5; v2 = (int)v14; } else { v2 = (int)v5; v14 = v5; } ++v16; v15 = v5; } if ( !*((_BYTE *)v4 + 21) ) { v6 = (int **)v4[2]; if ( *((_BYTE *)v6 + 21) ) { for ( i = (int *)v4[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v4 != (int *)i[2] ) break; v4 = i; } v4 = i; } else { v4 = (int *)v4[2]; for ( j = *v6; !*((_BYTE *)j + 21); j = (int *)*j ) v4 = j; } } } while ( v4 != (int *)v1[1240] ); } v9 = (_DWORD *)v2; if ( v2 ) { do { v10 = (_DWORD *)v9[2]; v9 = (_DWORD *)*v9; if ( v10 ) sub_8F86A0(&unk_BA6B10, v10); } while ( v9 ); v2 = (int)v14; } v11 = (_DWORD *)v2; if ( v2 ) { do { v12 = v11; v11 = (_DWORD *)*v11; ((void (__thiscall *)(void ***, _DWORD *))v13[2])(&v13, v12); } while ( v11 ); } } } // 9B90D8: using guessed type void *PgTList::`vftable'; // ACEB01: using guessed type char byte_ACEB01; //----- (004E3C80) -------------------------------------------------------- char __thiscall sub_4E3C80(_DWORD *this) { _DWORD *v1; // edi int *i; // eax int *v3; // esi int **v4; // eax v1 = this; i = (int *)this[157]; v3 = (int *)*i; if ( (int *)*i != i ) { do { LOBYTE(i) = sub_8F86A0(&unk_BA6B10, (_DWORD *)v3[3]); if ( !*((_BYTE *)v3 + 17) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 17) ) { for ( i = (int *)v3[1]; !*((_BYTE *)i + 17); i = (int *)i[1] ) { if ( v3 != (int *)i[2] ) break; v3 = i; } v3 = i; } else { v3 = (int *)v3[2]; for ( i = *v4; !*((_BYTE *)i + 17); i = (int *)*i ) v3 = i; } } } while ( v3 != (int *)v1[157] ); } return (char)i; } //----- (004E3D40) -------------------------------------------------------- void __stdcall sub_4E3D40(signed int a1) { _DWORD *v1; // eax int v2; // esi _DWORD *v3; // edi int v4; // esi FILE *v5; // eax FILE *v6; // eax int v7; // esi int v8; // esi int *v9; // esi int v10; // esi CHAR *v11; // eax _DWORD *v12; // esi _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // esi _DWORD *v16; // eax _DWORD *v17; // eax _DWORD *v18; // esi _WORD *v19; // ecx _DWORD *v20; // ebx float v21; // ST38_4 _DWORD *v22; // eax _DWORD *v23; // eax char *v24; // ecx _DWORD *v25; // eax int v26; // ebx _DWORD *v27; // eax int v28; // ebx _DWORD *v29; // ebx int v30; // eax _DWORD *v31; // [esp+24h] [ebp-130h] char *v32; // [esp+28h] [ebp-12Ch] int v33; // [esp+38h] [ebp-11Ch] unsigned int v34; // [esp+3Ch] [ebp-118h] char Src; // [esp+44h] [ebp-110h] int v36; // [esp+150h] [ebp-4h] v1 = (_DWORD *)sub_6807B0(byte_AD9238); v2 = sub_49F8D0(v1); v3 = 0; if ( v2 ) { if ( !byte_ACAD5C ) sub_420410(); v4 = v2 + 132; sprintf(&Src, "%sLoading\\%s.png", byte_ACAB50, v4); v5 = fopen(&Src, "r"); if ( v5 ) { fclose(v5); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sLoading\\%s.tga", byte_ACAB50, v4); } v6 = fopen(&Src, "r"); if ( v6 ) goto LABEL_71; v7 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, 0) ) { v9 = *(int **)(v7 + 196); if ( *v9 ) v8 = *v9; else v8 = 0; } else { v8 = 0; } if ( !byte_ACAD5C ) sub_420410(); v10 = v8 + 132; sprintf(&Src, "%sLoading\\%s.png", byte_ACAB50, v10); v6 = fopen(&Src, "r"); if ( v6 ) { LABEL_71: fclose(v6); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sLoading\\%s.tga", byte_ACAB50, v10); } if ( !byte_ACAD5C ) sub_420410(); v34 = 15; v33 = 0; LOBYTE(v32) = 0; v11 = (CHAR *)sub_401410(byte_ACAB50, "loading\\NowLoadingTextColor.tga"); sub_4018E0(&v32, v11, strlen(v11)); v36 = 0; v12 = operator new(0xC4u); LOBYTE(v36) = 1; if ( v12 ) { v13 = operator new(0x70u); LOBYTE(v36) = 2; if ( v13 ) v14 = sub_868440(v13, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v14 = 0; LOBYTE(v36) = 1; v3 = sub_868C00(v12, (int)v14); } LOBYTE(v36) = 0; v15 = operator new(0xC4u); LOBYTE(v36) = 3; if ( v15 ) { v16 = operator new(0x70u); LOBYTE(v36) = 4; if ( v16 ) { v17 = sub_868440(v16, 0, 1, 1u, 1, 1, 4, 1, 2, 1); LOBYTE(v36) = 3; v18 = sub_868C00(v15, (int)v17); } else { LOBYTE(v36) = 3; v18 = sub_868C00(v15, 0); } } else { v18 = 0; } v19 = (_WORD *)v3[46]; LOBYTE(v36) = 0; sub_867880(v19, 4, 0, 0); v20 = 0; sub_867880((_WORD *)v18[46], 4, 0, 0); sub_867E60(v3[46], 0, 0.0, 0.0, 1.0, 1.0); v21 = (double)a1 / 100.0 * 0.5 + 0.5; sub_867E60(v18[46], 0, 0.0, 0.87900001, v21, 0.121); sub_867680(v3[46]); sub_867680(v18[46]); sub_867FF0(v3[46], 0, &dword_ABD518); sub_867FF0(v18[46], 0, &dword_ABD518); sub_8681A0(v3[46], 0, 0, 0.0, 0.0, 1.0, 1.0); sub_8681A0(v18[46], 0, 0, 0.0, 0.0, v21, 1.0); v22 = operator new(0x44u); LOBYTE(v36) = 5; if ( v22 ) v31 = sub_863D50(v22, &Src); else v31 = 0; LOBYTE(v36) = 0; sub_470EE0((_DWORD **)v31, 0); v23 = operator new(0x44u); LOBYTE(v36) = 6; if ( v23 ) { v24 = v32; if ( v34 < 0x10 ) v24 = (char *)&v32; v20 = sub_863D50(v23, v24); } LOBYTE(v36) = 0; sub_470EE0((_DWORD **)v20, 0); sub_403700(v3, (int)v31); sub_403700(v18, (int)v20); v25 = operator new(0x28u); v26 = (int)v25; LOBYTE(v36) = 7; if ( v25 ) { sub_85B2B0(v25); *(_DWORD *)v26 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v26 + 28) = 0; *(_DWORD *)(v26 + 32) = 0; *(_DWORD *)(v26 + 36) = 1; } else { v26 = 0; } LOBYTE(v36) = 0; *(_DWORD *)(v26 + 32) = 1; *(_DWORD *)(v26 + 36) = 0; sub_403700(v3, v26); sub_403700(v18, v26); v27 = operator new(0x20u); v28 = (int)v27; LOBYTE(v36) = 8; if ( v27 ) { sub_85B2B0(v27); *(_DWORD *)v28 = &NiAlphaProperty::`vftable'; *(_WORD *)(v28 + 28) = 236; *(_BYTE *)(v28 + 30) = 0; } else { v28 = 0; } *(_WORD *)(v28 + 28) &= 0xFFFEu; LOBYTE(v36) = 0; sub_403700(v3, v28); sub_403700(v18, v28); sub_85C4D0(v3); sub_85BED0((_DWORD **)v3, 0.0, 1); sub_85C4D0(v18); sub_85BED0((_DWORD **)v18, 0.0, 1); v29 = (_DWORD *)dword_BA46D0; if ( !*(_DWORD *)(dword_BA46D0 + 116) && !*(_DWORD *)(dword_BA46D0 + 120) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_BA46D0 + 264))(dword_BA46D0) ) { v29[29] = 1; } if ( (v29[29] == 1 || v29[30] == 1) && !*((_BYTE *)v29 + 128) ) { v30 = (*(int (__thiscall **)(_DWORD *))(*v29 + 104))(v29); sub_44ED20((int)v29, v30, 7); } if ( (v29[29] == 1 || v29[30] == 1) && *((_BYTE *)v29 + 128) == 1 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v29 + 284))(v29, 0); sub_868B60(v3); sub_868B60(v18); sub_44EDF0(v29); if ( v29[29] == 1 && !v29[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v29 + 268))(v29) ) v29[29] = 2; if ( v29[29] == 2 && !v29[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v29 + 272))(v29) ) { ++v29[31]; v29[29] = 0; } (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); (*(void (__thiscall **)(_DWORD *, signed int))*v18)(v18, 1); if ( v34 >= 0x10 ) operator delete(v32); } } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ABD518: using guessed type int dword_ABD518; // ACAD5C: using guessed type char byte_ACAD5C; // ACDA4C: using guessed type int dword_ACDA4C; // BA46D0: using guessed type int dword_BA46D0; //----- (004E43B0) -------------------------------------------------------- void __thiscall sub_4E43B0(_DWORD *this, float a2) { int v2; // eax float *v3; // edi float *v4; // esi float *v5; // eax float *v6; // edx v2 = this[624]; if ( v2 != this[625] ) { v3 = (float *)this[624]; if ( v2 != this[625] ) { do { if ( *v3 + 1.0 >= a2 ) { v3 += 2; } else { v4 = (float *)this[625]; v5 = v3 + 2; if ( v3 + 2 != v4 ) { v6 = v3; do { *v6 = *v5; v6[1] = v5[1]; v5 += 2; v6 += 2; } while ( v5 != v4 ); } this[625] -= 8; } } while ( v3 != (float *)this[625] ); } } } //----- (004E4490) -------------------------------------------------------- void __usercall sub_4E4490(int a1@, double a2@) { int v2; // edi int v3; // eax unsigned int v4; // esi _DWORD *v5; // eax int v6; // eax int v7; // ebx int v8; // esi v2 = a1; if ( *(_DWORD *)(a1 + 716) ) { v3 = *(_DWORD *)(a1 + 716); v4 = *(_DWORD *)(v3 + 1620); if ( v4 < 0xC0 && (v5 = *(_DWORD **)(v3 + 4 * v4 + 348)) != 0 ) v6 = sub_5D5470(v5); else v6 = 0; if ( v6 == *(_DWORD *)(*(_DWORD *)(v2 + 716) + 1624) ) { v7 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v7, v4); (**(void (__thiscall ***)(int, int))(v7 + 8))(v7 + 8, v2); } else { sub_4FDC50(*(float **)(v2 + 4916)); sub_4AA750((_DWORD *)v2, a2, 0, 0, 0, 0, 0); } if ( v4 < 0xC0 ) { v8 = *(_DWORD *)(*(_DWORD *)(v2 + 716) + 4 * v4 + 348); if ( v8 ) sub_536E90(v8, 0); } } } //----- (004E4580) -------------------------------------------------------- char __thiscall sub_4E4580(int *this, float a2, __int16 a3, int a4) { int v4; // edx int *v5; // esi int v6; // edi int v7; // ecx __int16 v8; // ax unsigned int v9; // eax int v10; // edx int v11; // ecx int v12; // edi unsigned int v13; // eax char result; // al unsigned int v15; // eax unsigned int v16; // ecx char *v17; // ecx _DWORD *v18; // eax int v19; // ecx int v20; // ecx unsigned int v21; // eax unsigned int v22; // eax unsigned int v23; // ecx char *v24; // ecx int v25; // eax int v26; // ecx float v27; // [esp+0h] [ebp-8h] int v28; // [esp+4h] [ebp-4h] v4 = this[624]; v5 = this + 624; v6 = this[625]; if ( v4 == v6 ) { LABEL_7: v27 = a2; v8 = *(_WORD *)a4; LOWORD(v28) = a3; HIWORD(v28) = v8; v9 = v5[1]; if ( (unsigned int)&v27 >= v9 || (v10 = *v5, *v5 > (unsigned int)&v27) ) { v20 = v5[2]; if ( v9 == v20 ) { v21 = (signed int)(v9 - *v5) >> 3; if ( v21 > 0x1FFFFFFE ) std::_Xlength_error("vector too long"); v22 = v21 + 1; v23 = (v20 - *v5) >> 3; if ( v22 > v23 ) { if ( 0x1FFFFFFF - (v23 >> 1) >= v23 ) v24 = (char *)((v23 >> 1) + v23); else v24 = 0; if ( (unsigned int)v24 < v22 ) v24 = (char *)v22; sub_4E6ED0(v5, v24); } } v25 = v5[1]; if ( v25 ) { v26 = v28; *(float *)v25 = v27; *(_DWORD *)(v25 + 4) = v26; } } else { v11 = v5[2]; v12 = ((signed int)&v27 - v10) >> 3; if ( v9 == v11 ) { v13 = (signed int)(v9 - v10) >> 3; if ( v13 > 0x1FFFFFFE ) std::_Xlength_error("vector too long"); v15 = v13 + 1; v16 = (v11 - v10) >> 3; if ( v15 > v16 ) { if ( 0x1FFFFFFF - (v16 >> 1) >= v16 ) v17 = (char *)((v16 >> 1) + v16); else v17 = 0; if ( (unsigned int)v17 < v15 ) v17 = (char *)v15; sub_4E6ED0(v5, v17); } } v18 = (_DWORD *)v5[1]; if ( v18 ) { v19 = *v5; *v18 = *(_DWORD *)(*v5 + 8 * v12); v18[1] = *(_DWORD *)(v19 + 8 * v12 + 4); v5[1] += 8; return 1; } } v5[1] += 8; result = 1; } else { while ( 1 ) { if ( a3 == *(_WORD *)(v4 + 4) ) { v7 = *(unsigned __int16 *)(v4 + 6); if ( !(((unsigned __int16)v7 ^ *(_WORD *)a4) & 0xFC00) && !((v7 ^ *(unsigned __int16 *)a4) & 0x3FF) && *(float *)v4 + 1.0 > a2 ) { break; } } v4 += 8; if ( v4 == v6 ) goto LABEL_7; } result = 0; } return result; } //----- (004E4710) -------------------------------------------------------- void __userpurge sub_4E4710(_DWORD *a1@, double a2@, int a3, int a4, unsigned int a5, unsigned int a6) { _DWORD *v6; // edi _BYTE *v7; // esi const CHAR *v8; // eax bool v9; // cf int v10; // esi int v11; // ST28_4 int v12; // eax unsigned int v13; // ecx _DWORD *v14; // edx char *v15; // eax int v16; // esi unsigned int v17; // ecx char *v18; // eax volatile LONG *v19; // esi _DWORD *v20; // [esp+10h] [ebp-5Ch] int v21; // [esp+14h] [ebp-58h] char v22; // [esp+18h] [ebp-54h] int v23; // [esp+20h] [ebp-4Ch] char v24; // [esp+2Ch] [ebp-40h] void *v25; // [esp+30h] [ebp-3Ch] int v26; // [esp+34h] [ebp-38h] int v27; // [esp+38h] [ebp-34h] char *v28; // [esp+40h] [ebp-2Ch] int v29; // [esp+50h] [ebp-1Ch] unsigned int v30; // [esp+54h] [ebp-18h] int v31; // [esp+68h] [ebp-4h] v6 = a1; v20 = a1; v21 = 0; v30 = 15; v29 = 0; LOBYTE(v28) = 0; v7 = (_BYTE *)a1[1229]; v31 = 0; if ( v7 && (sub_4FD890(v7) || (unsigned __int8)sub_4FD8B0((int)v7, a2)) ) { v8 = sub_40A910(-1027164657); sub_492060(v6, (int)v8); v9 = v30 < 0x10; } else { sub_4AA750(v6, a2, 0, 0, 0, 0, 0); sub_4AA750(v20, a2, 1, a4, a5, a6, 0); v10 = v20[1229]; if ( v10 ) { v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 168))(v10); v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 148))(v10) + v11; } v12 = v20[1227]; if ( v12 ) { sub_4DDD20(&v25, (_DWORD *)(v12 + 388)); LOBYTE(v31) = 1; v13 = 0; if ( !((v26 - (signed int)v25) / 20) ) goto LABEL_12; v14 = (char *)v25 + 4; while ( *v14 != a4 ) { ++v13; v14 += 5; if ( v13 >= (v26 - (signed int)v25) / 20 ) goto LABEL_12; } if ( *((_DWORD *)v25 + 5 * v13 + 4) > 0 ) { if ( *((_DWORD *)v25 + 5 * v13 + 2) <= a5 ) v15 = (char *)sub_40A910((int)&loc_516870); else v15 = (char *)sub_40A910((int)&loc_4B7C71); v16 = (int)(v15 + 1); v17 = (unsigned int)&v15[strlen(v15) + 1]; } else { LABEL_12: v15 = (char *)sub_40A910(-968609762); v16 = (int)(v15 + 1); v17 = (unsigned int)&v15[strlen(v15) + 1]; } sub_4018E0(&v28, v15, v17 - v16); LOBYTE(v31) = 0; if ( v25 ) operator delete(v25); } v18 = v28; if ( v30 < 0x10 ) v18 = (char *)&v28; v19 = sub_462C30(2, v18); if ( v19 ) { v27 = a3; v26 = 268; v23 = 269; sub_461760(v19, (int)v20, &v24, &v22); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 176))(v19, v21); } v9 = v30 < 0x10; } if ( !v9 ) operator delete(v28); } //----- (004E4980) -------------------------------------------------------- void __thiscall sub_4E4980(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi _DWORD *v3; // ST0C_4 _DWORD *v4; // ST08_4 int v5; // edi int v6; // edi _DWORD **v7; // ecx _DWORD *v8; // eax _DWORD *v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi _DWORD *v18; // ebx _DWORD *v19; // ST0C_4 int v20; // edi _DWORD *v21; // ebx _DWORD *v22; // ST0C_4 int v23; // edi _DWORD *v24; // ST0C_4 _DWORD *v25; // ST08_4 int v26; // edi void *v27; // ST0C_4 _DWORD *v28; // [esp+10h] [ebp-18h] _DWORD *v29; // [esp+14h] [ebp-14h] _DWORD *v30; // [esp+18h] [ebp-10h] int v31; // [esp+24h] [ebp-4h] v1 = this; v30 = this; *this = &GameFrameWork::`vftable'; v31 = 22; sub_6BD4C0(); v2 = (void *)v1[181]; if ( v2 ) { nullsub_14(v1[181]); operator delete(v2); } LOBYTE(v31) = 21; sub_405430(v1 + 1297); v29 = v1 + 1239; v3 = (_DWORD *)v1[1240]; v4 = *(_DWORD **)v1[1240]; LOBYTE(v31) = 23; sub_6CDE90(v1 + 1239, (int *)&v28, v4, v3); operator delete((void *)v1[1240]); if ( v1[1221] ) operator delete((void *)v1[1221]); v1[1221] = 0; v1[1222] = 0; v1[1223] = 0; v5 = v1[1209]; LOBYTE(v31) = 18; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[1208]; LOBYTE(v31) = 17; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); LOBYTE(v31) = 16; `eh vector destructor iterator'(v1 + 1177, 0x14u, 6, nullsub_6); v7 = (_DWORD **)v1[645]; v8 = *v7; *v7 = v7; *(_DWORD *)(v1[645] + 4) = v1[645]; v1[646] = 0; if ( v8 != (_DWORD *)v1[645] ) { do { v9 = (_DWORD *)*v8; operator delete(v8); v8 = v9; } while ( v9 != (_DWORD *)v1[645] ); } operator delete((void *)v1[645]); sub_6CCEF0((void ***)v1 + 641); operator delete((void *)v1[641]); LOBYTE(v31) = 13; sub_494860(v1 + 634); if ( v1[624] ) operator delete((void *)v1[624]); v1[624] = 0; v1[625] = 0; v1[626] = 0; v10 = v1[623]; LOBYTE(v31) = 11; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[622]; LOBYTE(v31) = 10; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[620]; LOBYTE(v31) = 9; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = v1[619]; LOBYTE(v31) = 8; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[585]; LOBYTE(v31) = 7; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = v1[584]; LOBYTE(v31) = 6; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v16 = v1[315]; LOBYTE(v31) = 5; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = (int)(v1 + 300); v28 = (_DWORD *)v17; *(_DWORD *)v17 = &NiTPointerListBase,PgWin *>::`vftable'; v18 = (_DWORD *)v1[301]; LOBYTE(v31) = 24; while ( v18 ) { v19 = v18; v18 = (_DWORD *)*v18; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v17 + 8))(v1 + 300, v19); } v1[303] = 0; v1[301] = 0; v1[302] = 0; *(_DWORD *)v17 = &NiTListBase,PgWin *>::`vftable'; v20 = (int)(v1 + 292); v28 = (_DWORD *)v20; *(_DWORD *)v20 = &NiTPointerListBase,PgWin *>::`vftable'; v21 = (_DWORD *)v1[293]; LOBYTE(v31) = 25; while ( v21 ) { v22 = v21; v21 = (_DWORD *)*v21; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v20 + 8))(v1 + 292, v22); } v1[295] = 0; v1[293] = 0; v1[294] = 0; *(_DWORD *)v20 = &NiTListBase,PgWin *>::`vftable'; v23 = v1[242]; LOBYTE(v31) = 2; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v28 = v1 + 156; v24 = (_DWORD *)v1[157]; v25 = *(_DWORD **)v1[157]; LOBYTE(v31) = 26; sub_4E6DC0(v1 + 156, (int *)&v29, v25, v24); operator delete((void *)v1[157]); v26 = v1[129]; LOBYTE(v31) = 0; if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v27 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v27); } // 5826F0: using guessed type int __thiscall nullsub_14(_DWORD); // 6BD4C0: using guessed type int sub_6BD4C0(void); // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9BBB7C: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; // 9BC684: using guessed type void *GameFrameWork::`vftable'; //----- (004E4D90) -------------------------------------------------------- void __thiscall sub_4E4D90(_DWORD *this, _DWORD *a2) { unsigned int v2; // ebx int *v3; // esi int v4; // edi int v5; // eax int v6; // eax int v7; // esi int v8; // eax int *v9; // esi int *v10; // ebx float *v11; // esi float *v12; // edi int v13; // eax _DWORD *v14; // edx int v15; // esi unsigned int v16; // eax unsigned int v17; // eax unsigned int v18; // ecx char *v19; // ecx unsigned int v20; // eax unsigned int v21; // eax unsigned int v22; // ecx char *v23; // ecx int *v24; // edx signed int v25; // eax signed int v26; // ecx int v27; // eax int v28; // edx _DWORD *v29; // eax _DWORD *v30; // eax int *v31; // eax int *v32; // edi int v33; // esi int *v34; // edi int v35; // esi int v36; // [esp-44h] [ebp-DCh] _DWORD *v37; // [esp-4h] [ebp-9Ch] char v38; // [esp+10h] [ebp-88h] int *v39; // [esp+50h] [ebp-48h] int *v40; // [esp+54h] [ebp-44h] int v41; // [esp+58h] [ebp-40h] void *v42; // [esp+60h] [ebp-38h] void *v43; // [esp+64h] [ebp-34h] _BYTE *v44; // [esp+68h] [ebp-30h] unsigned int v45; // [esp+70h] [ebp-28h] float v46; // [esp+74h] [ebp-24h] float v47; // [esp+78h] [ebp-20h] _DWORD *v48; // [esp+7Ch] [ebp-1Ch] int *v49; // [esp+80h] [ebp-18h] unsigned int v50; // [esp+84h] [ebp-14h] char v51; // [esp+8Bh] [ebp-Dh] int v52; // [esp+94h] [ebp-4h] int *v53; // [esp+A0h] [ebp+8h] v48 = this; v2 = 0; v3 = 0; v39 = 0; v40 = 0; v41 = 0; v4 = dword_ADB684; v52 = 0; if ( dword_ADB684 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)dword_ADB684 + 4))(dword_ADB684); if ( v5 ) { while ( (char *)v5 != dword_BA455C ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_16; } v50 = *(_DWORD *)(v4 + 188); if ( v50 ) { do { if ( *(_DWORD *)(v4 + 188) > v2 ) { v6 = *(_DWORD *)(v4 + 180); v7 = *(_DWORD *)(v6 + 4 * v2); if ( v7 ) { v8 = sub_682C80(&unk_ADA1E0, *(_DWORD *)(v6 + 4 * v2)); if ( v8 ) { if ( *(_BYTE *)(v8 + 8) ) { v49 = (int *)v7; InterlockedIncrement((volatile LONG *)(v7 + 4)); LOBYTE(v52) = 1; sub_4E7210(&v39, (char *)&v49); v9 = v49; LOBYTE(v52) = 0; if ( v49 ) { if ( !InterlockedDecrement(v49 + 1) ) (*(void (__thiscall **)(int *, signed int))*v9)(v9, 1); } } } } } ++v2; } while ( v2 < v50 ); v3 = v39; } } } LABEL_16: v49 = v3; v42 = 0; v43 = 0; v44 = 0; LOBYTE(v52) = 2; sub_4E6D30(&v42, 0); v10 = (int *)v42; v51 = 0; if ( v3 != v40 ) { do { v11 = (float *)*v49; v12 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v13 = sub_682C80(&unk_ADA1E0, (int)v11); v50 = v13; if ( v13 ) { if ( *(_BYTE *)(v13 + 8) ) { v47 = *v12 - v11[22]; v46 = v12[1] - v11[23]; *(float *)&v45 = v12[2] - v11[24]; *(float *)&v45 = v47 * v47 + v46 * v46 + *(float *)&v45 * *(float *)&v45; *(float *)&v45 = sqrt(*(float *)&v45); if ( *(float *)&v45 <= 100.0 ) { v14 = v43; v51 = 1; if ( &v50 >= v43 || v10 > (int *)&v50 ) { if ( v43 == v44 ) { v20 = ((_BYTE *)v43 - (_BYTE *)v10) >> 2; if ( v20 > 0x3FFFFFFE ) LABEL_54: std::_Xlength_error("vector too long"); v21 = v20 + 1; v22 = (v44 - (_BYTE *)v10) >> 2; if ( v21 > v22 ) { if ( 0x3FFFFFFF - (v22 >> 1) >= v22 ) v23 = (char *)((v22 >> 1) + v22); else v23 = 0; if ( (unsigned int)v23 < v21 ) v23 = (char *)v21; sub_74E360((const void **)&v42, v23); v10 = (int *)v42; v14 = v43; } } if ( v14 ) *v14 = v50; } else { v15 = ((char *)&v50 - (char *)v10) >> 2; if ( v43 == v44 ) { v16 = ((_BYTE *)v43 - (_BYTE *)v10) >> 2; if ( v16 > 0x3FFFFFFE ) goto LABEL_54; v17 = v16 + 1; v18 = (v44 - (_BYTE *)v10) >> 2; if ( v17 > v18 ) { if ( 0x3FFFFFFF - (v18 >> 1) >= v18 ) v19 = (char *)((v18 >> 1) + v18); else v19 = 0; if ( (unsigned int)v19 < v17 ) v19 = (char *)v17; sub_74E360((const void **)&v42, v19); v10 = (int *)v42; v14 = v43; } } if ( v14 ) *v14 = v10[v15]; } v43 = v14 + 1; } } } ++v49; } while ( v49 != v40 ); v3 = v39; } v24 = (int *)v43; v25 = ((_BYTE *)v43 - (_BYTE *)v10) >> 2; v26 = 1; v49 = (int *)v25; if ( v25 ) { if ( v25 < 1 ) v26 = ((_BYTE *)v43 - (_BYTE *)v10) >> 2; v45 = (unsigned int)&v10[v26]; v27 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212))(); v28 = *(_DWORD *)dword_AD8EBC; v37 = (_DWORD *)v27; v29 = (_DWORD *)(*(int (**)(void))(v28 + 196))(); v30 = sub_69CC00(&v38, v29, v37); v37 = 0; qmemcpy(&v36, v30, 0x40u); sub_4E6FA0(v10, v45, (unsigned int)v43); if ( v51 ) { if ( a2 ) { if ( a2 == (_DWORD *)1 ) sub_4E3970(v48, v10, (int *)v43); } else { sub_4A1880(v48, *v10); } } v24 = (int *)v43; v3 = v39; } if ( v10 != v24 ) { memcpy_0(v10, v24, 0); v43 = v10; } if ( v3 != v40 ) { v37 = a2; v31 = sub_63FFD0(v40, v40, v3); v53 = v31; v32 = v31; if ( v31 != v40 ) { do { v33 = *v32; if ( *v32 && !InterlockedDecrement((volatile LONG *)(v33 + 4)) && v33 ) (**(void (__thiscall ***)(int, signed int))v33)(v33, 1); ++v32; } while ( v32 != v40 ); v3 = v39; v31 = v53; } v40 = v31; } if ( v10 ) operator delete(v10); v52 = -1; if ( v3 ) { v34 = v3; if ( v3 != v40 ) { do { v35 = *v34; if ( *v34 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); } ++v34; } while ( v34 != v40 ); v3 = v39; } operator delete(v3); } } // ADB684: using guessed type int dword_ADB684; //----- (004E51E0) -------------------------------------------------------- int __thiscall sub_4E51E0(_DWORD *this) { int v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax int v6; // edi char *v7; // eax _DWORD *v8; // eax char *v9; // edi void **v11; // [esp+10h] [ebp-30h] void **v12; // [esp+1Ch] [ebp-24h] _DWORD *v13; // [esp+28h] [ebp-18h] char *v14; // [esp+2Ch] [ebp-14h] char *v15; // [esp+30h] [ebp-10h] int v16; // [esp+3Ch] [ebp-4h] v1 = (int)this; v13 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); *(_DWORD *)(v1 + 16) = 1; *(_DWORD *)(v1 + 20) = -1; *(_DWORD *)(v1 + 24) = 0; *(_DWORD *)(v1 + 28) = 0; *(_BYTE *)(v1 + 32) = 0; v16 = 0; *(_DWORD *)v1 = &GameFrameWork::`vftable'; sub_4B0F00((_DWORD *)(v1 + 36)); sub_8D0610((_BYTE *)(v1 + 116)); *(_DWORD *)(v1 + 516) = 0; LOBYTE(v16) = 1; *(_DWORD *)(v1 + 632) = 0; v2 = operator new(0x14u); if ( !v2 ) { v14 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v14); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 628) = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)(v1 + 628) + 4) = *(_DWORD *)(v1 + 628); *(_DWORD *)(*(_DWORD *)(v1 + 628) + 8) = *(_DWORD *)(v1 + 628); *(_BYTE *)(*(_DWORD *)(v1 + 628) + 16) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 628) + 17) = 1; *(_DWORD *)(v1 + 968) = 0; *(_DWORD *)(v1 + 1180) = 0; *(_DWORD *)(v1 + 1172) = 0; *(_DWORD *)(v1 + 1176) = 0; *(_DWORD *)(v1 + 1168) = &NiTList::`vftable'; *(_DWORD *)(v1 + 1212) = 0; *(_DWORD *)(v1 + 1204) = 0; *(_DWORD *)(v1 + 1208) = 0; *(_DWORD *)(v1 + 1200) = &NiTList::`vftable'; *(_DWORD *)(v1 + 1260) = 0; *(_DWORD *)(v1 + 2336) = 0; *(_DWORD *)(v1 + 2340) = 0; *(_DWORD *)(v1 + 2352) = 0; *(_DWORD *)(v1 + 2465) = 0; *(_DWORD *)(v1 + 2461) = 0; *(_DWORD *)(v1 + 2457) = 0; *(_DWORD *)(v1 + 2453) = 0; *(_DWORD *)(v1 + 2476) = 0; *(_DWORD *)(v1 + 2480) = 0; *(_DWORD *)(v1 + 2488) = 0; *(_DWORD *)(v1 + 2492) = 0; *(_DWORD *)(v1 + 2496) = 0; *(_DWORD *)(v1 + 2500) = 0; *(_DWORD *)(v1 + 2504) = 0; sub_494840((_DWORD *)(v1 + 2536)); LOBYTE(v16) = 14; *(_DWORD *)(v1 + 2568) = 0; v3 = operator new(0x24u); if ( !v3 ) { v14 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v14); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 2564) = v3; *v3 = v3; *(_DWORD *)(*(_DWORD *)(v1 + 2564) + 4) = *(_DWORD *)(v1 + 2564); LOBYTE(v16) = 15; *(_DWORD *)(v1 + 2584) = 0; v4 = operator new(0x10u); if ( !v4 ) { v15 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&v15); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 2580) = v4; *v4 = v4; *(_DWORD *)(*(_DWORD *)(v1 + 2580) + 4) = *(_DWORD *)(v1 + 2580); sub_8D0610((_BYTE *)(v1 + 2596)); sub_8D0610((_BYTE *)(v1 + 2624)); `eh vector constructor iterator'((void *)(v1 + 4708), 0x14u, 6, sub_6F72B0, nullsub_6); *(_DWORD *)(v1 + 4832) = 0; *(_DWORD *)(v1 + 4836) = 0; *(_DWORD *)(v1 + 4884) = 0; *(_DWORD *)(v1 + 4888) = 0; *(_DWORD *)(v1 + 4892) = 0; LOBYTE(v16) = 20; *(_DWORD *)(v1 + 4964) = 0; v5 = operator new(0x18u); if ( !v5 ) { v15 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&v15); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 4960) = v5; *v5 = v5; *(_DWORD *)(*(_DWORD *)(v1 + 4960) + 4) = *(_DWORD *)(v1 + 4960); *(_DWORD *)(*(_DWORD *)(v1 + 4960) + 8) = *(_DWORD *)(v1 + 4960); *(_BYTE *)(*(_DWORD *)(v1 + 4960) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 4960) + 21) = 1; sub_8D0610((_BYTE *)(v1 + 5140)); sub_404E60((_DWORD *)(v1 + 5188)); LOBYTE(v16) = 22; *(_BYTE *)(v1 + 145) = 0; sub_4E1890(v1); *(_DWORD *)(v1 + 596) = 0; *(_DWORD *)(v1 + 544) = 0; *(_DWORD *)(v1 + 548) = 0; *(_DWORD *)(v1 + 552) = 0; *(_DWORD *)(v1 + 568) = 0; *(_DWORD *)(v1 + 556) = 0; *(_DWORD *)(v1 + 1140) = 0; *(_DWORD *)(v1 + 1144) = 0; *(_DWORD *)(v1 + 572) = 0; *(_DWORD *)(v1 + 576) = 0; *(_DWORD *)(v1 + 612) = 0; *(_DWORD *)(v1 + 652) = 0; *(_DWORD *)(v1 + 672) = 0; *(_DWORD *)(v1 + 656) = 0; *(_DWORD *)(v1 + 676) = 0; *(_DWORD *)(v1 + 660) = 0; *(_DWORD *)(v1 + 680) = 0; *(_DWORD *)(v1 + 664) = 0; *(_DWORD *)(v1 + 684) = 0; *(_DWORD *)(v1 + 668) = 0; *(_DWORD *)(v1 + 688) = 0; *(_DWORD *)(v1 + 704) = 0; *(_DWORD *)(v1 + 708) = 0; *(_DWORD *)(v1 + 712) = 0; *(_DWORD *)(v1 + 716) = 0; *(_DWORD *)(v1 + 720) = 0; *(_DWORD *)(v1 + 728) = 0; *(_DWORD *)(v1 + 732) = 0; *(_DWORD *)(v1 + 736) = 0; *(_DWORD *)(v1 + 740) = 0; *(_DWORD *)(v1 + 744) = 0; *(_DWORD *)(v1 + 4844) = 0; *(_DWORD *)(v1 + 4848) = 0; *(_DWORD *)(v1 + 4852) = 0; *(_WORD *)(v1 + 4840) = -1; *(_DWORD *)(v1 + 4856) = dword_BA45C0; *(_DWORD *)(v1 + 4860) = dword_BA45C4; *(_DWORD *)(v1 + 4864) = dword_BA45C8; *(_BYTE *)(v1 + 4868) = 0; *(_DWORD *)(v1 + 748) = 0; *(_DWORD *)(v1 + 752) = 0; *(_DWORD *)(v1 + 780) = 0; *(_DWORD *)(v1 + 852) = 0; *(_DWORD *)(v1 + 856) = 0; *(_DWORD *)(v1 + 756) = 0; *(_DWORD *)(v1 + 724) = 0; *(_DWORD *)(v1 + 772) = 0; *(_DWORD *)(v1 + 768) = 0; *(_DWORD *)(v1 + 776) = 0; *(_DWORD *)(v1 + 864) = 0; *(_DWORD *)(v1 + 916) = 0; *(_DWORD *)(v1 + 920) = 0; *(_DWORD *)(v1 + 908) = 0; *(_DWORD *)(v1 + 868) = 0; *(_DWORD *)(v1 + 932) = 0; *(_DWORD *)(v1 + 936) = 0; *(_DWORD *)(v1 + 940) = 0; v6 = *(_DWORD *)(v1 + 968); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v1 + 968) = 0; } *(_DWORD *)(v1 + 976) = 0; *(_DWORD *)(v1 + 944) = 0; *(_DWORD *)(v1 + 948) = 0; *(_DWORD *)(v1 + 980) = 0; *(_DWORD *)(v1 + 952) = 0; *(_DWORD *)(v1 + 580) = 0; *(_DWORD *)(v1 + 1020) = 0; *(_DWORD *)(v1 + 2408) = 0; *(_BYTE *)(v1 + 2432) = 1; *(_DWORD *)(v1 + 2512) = 0; *(_BYTE *)(v1 + 2532) = 0; v7 = (char *)operator new(0x24u); v14 = v7; LOBYTE(v16) = 23; if ( v7 ) v8 = sub_5826D0(v7); else v8 = 0; LOBYTE(v16) = 22; *(_DWORD *)(v1 + 724) = v8; *(_DWORD *)(v1 + 2654) = 16843009; *(_BYTE *)(v1 + 2658) = 0; *(_WORD *)(v1 + 2652) = 0; *(_BYTE *)(v1 + 144) = 0; *(_BYTE *)(v1 + 698) = 0; *(_DWORD *)(v1 + 584) = 0; *(_DWORD *)(v1 + 588) = 0; *(_DWORD *)(v1 + 592) = 0; *(_DWORD *)(v1 + 2560) = 0; *(_DWORD *)(v1 + 608) = 0; *(_DWORD *)(v1 + 760) = 0; *(_DWORD *)(v1 + 764) = 0; *(_DWORD *)(v1 + 1068) = 0; memset((void *)(v1 + 2660), 0, 0x800u); *(_DWORD *)(v1 + 1052) = 0; *(_DWORD *)(v1 + 1048) = 0; *(_DWORD *)(v1 + 1056) = 0; *(_DWORD *)(v1 + 1060) = 0; *(_DWORD *)(v1 + 652) = 0; *(_DWORD *)(v1 + 1132) = 0; *(_DWORD *)(v1 + 1136) = 0; *(_DWORD *)(v1 + 904) = 0; *(_DWORD *)(v1 + 600) = 0; *(_DWORD *)(v1 + 1184) = 0; *(_DWORD *)(v1 + 1024) = 0; *(_DWORD *)(v1 + 1028) = 0; *(_DWORD *)(v1 + 1128) = 0; *(_DWORD *)(v1 + 112) = 0; v9 = (char *)(v1 + 4720); v15 = (char *)6; do { *((_DWORD *)v9 + 1) = 0; *(_DWORD *)v9 = 0; *((_DWORD *)v9 - 1) = 0; *((_DWORD *)v9 - 2) = 0; *((_DWORD *)v9 - 3) = 0; strncpy(v9 - 12, byte_9BC53C, 0x14u); v9 += 20; --v15; } while ( v15 ); *(_DWORD *)(v1 + 4828) = 0; *(_DWORD *)(v1 + 884) = 0; *(_DWORD *)(v1 + 888) = 0; *(_DWORD *)(v1 + 892) = 0; *(_DWORD *)(v1 + 896) = 0; *(_DWORD *)(v1 + 900) = 0; memset((void *)(v1 + 1300), 0, 0x400u); *(_BYTE *)(v1 + 2324) = 0; *(_BYTE *)(v1 + 697) = 0; *(_DWORD *)(v1 + 700) = -1; *(_DWORD *)(v1 + 1216) = 0; *(_DWORD *)(v1 + 1124) = 0; *(_DWORD *)(v1 + 912) = 0; *(_DWORD *)(v1 + 1224) = 0; *(_DWORD *)(v1 + 1228) = 0; *(_DWORD *)(v1 + 1232) = 0; *(_DWORD *)(v1 + 1236) = 0; *(_DWORD *)(v1 + 1240) = 0; *(_DWORD *)(v1 + 1252) = 0; *(_DWORD *)(v1 + 1256) = 0; *(_BYTE *)(v1 + 2332) = 0; sub_4E6ED0((_DWORD *)(v1 + 2496), (char *)0x64); *(_DWORD *)(v1 + 984) = 0; *(_DWORD *)(v1 + 988) = 0; *(_DWORD *)(v1 + 992) = 0; *(_DWORD *)(v1 + 996) = 0; *(_DWORD *)(v1 + 1000) = 0; *(_DWORD *)(v1 + 1004) = 0; *(_DWORD *)(v1 + 1008) = 0; *(_DWORD *)(v1 + 1264) = 0; *(_DWORD *)(v1 + 1268) = 0; *(_BYTE *)(v1 + 152) = 0; *(_DWORD *)(v1 + 1220) = 0; *(_DWORD *)(v1 + 784) = 0; *(_DWORD *)(v1 + 788) = 0; *(_DWORD *)(v1 + 792) = 0; *(_DWORD *)(v1 + 796) = 0; *(_DWORD *)(v1 + 800) = 0; *(_DWORD *)(v1 + 804) = 0; *(_DWORD *)(v1 + 808) = 0; *(_DWORD *)(v1 + 812) = 0; *(_DWORD *)(v1 + 828) = 0; *(_DWORD *)(v1 + 824) = 0; *(_DWORD *)(v1 + 820) = 0; *(_DWORD *)(v1 + 816) = 0; *(_DWORD *)(v1 + 832) = 0; *(_DWORD *)(v1 + 836) = 0; *(_DWORD *)(v1 + 844) = 0; *(_DWORD *)(v1 + 840) = 0; *(_DWORD *)(v1 + 848) = 0; *(_DWORD *)(v1 + 4908) = 0; *(_DWORD *)(v1 + 4912) = 0; *(_DWORD *)(v1 + 4916) = 0; *(_DWORD *)(v1 + 4920) = 0; *(_DWORD *)(v1 + 4924) = 0; *(_DWORD *)(v1 + 4928) = 0; *(_BYTE *)(v1 + 4932) = 1; *(_DWORD *)(v1 + 4936) = 0; *(_BYTE *)(v1 + 4940) = 0; *(_WORD *)(v1 + 4942) = -1; *(_DWORD *)(v1 + 4944) = 0; *(_DWORD *)(v1 + 4948) = 0; *(_DWORD *)(v1 + 4952) = 0; *(_DWORD *)(v1 + 1120) = 0; *(_DWORD *)(v1 + 4972) = 0; *(_DWORD *)(v1 + 4976) = 0; *(_DWORD *)(v1 + 4980) = 0; *(_DWORD *)(v1 + 4984) = 0; *(_DWORD *)(v1 + 2328) = 0; *(_DWORD *)(v1 + 4988) = 0; *(_DWORD *)(v1 + 4992) = 0; *(_BYTE *)(v1 + 5000) = 0; *(_BYTE *)(v1 + 5040) = 0; *(_DWORD *)(v1 + 5092) = 0; *(_DWORD *)(v1 + 5096) = 0; *(_BYTE *)(v1 + 5100) = 1; *(_DWORD *)(v1 + 5104) = 0; *(_DWORD *)(v1 + 5108) = 0; *(_BYTE *)(v1 + 5112) = 0; *(_DWORD *)(v1 + 564) = 0; *(_DWORD *)(v1 + 5116) = 0; *(_DWORD *)(v1 + 560) = 0; *(_DWORD *)(v1 + 5120) = 0; *(_WORD *)(v1 + 5124) = 256; *(_DWORD *)(v1 + 5128) = 0; *(_DWORD *)(v1 + 5132) = 0; *(_DWORD *)(v1 + 5136) = 0; *(_DWORD *)(v1 + 5168) = 0; *(_DWORD *)(v1 + 5204) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9BBBEC: using guessed type void *NiTList::`vftable'; // 9BC684: using guessed type void *GameFrameWork::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (004E5A60) -------------------------------------------------------- void __thiscall sub_4E5A60(int this, float a2) { int v2; // esi void *v3; // edi unsigned int v4; // eax bool v5; // zf float *v6; // eax float v7; // edx float v8; // ecx int v9; // eax float *v10; // eax float v11; // ecx float v12; // edx _DWORD **v13; // ecx int v14; // ecx int v15; // ecx int v16; // eax _DWORD *v17; // ecx _BYTE *v18; // ebx unsigned __int8 v19; // al unsigned __int8 v20; // al int v21; // edx int *v22; // eax void **v23; // eax _BYTE *v24; // ecx _BYTE *v25; // ecx int v26; // ecx int v27; // ecx volatile LONG **v28; // edi char *v29; // eax volatile LONG *v30; // eax char *v31; // eax volatile LONG *v32; // eax char *v33; // eax int v34; // ecx int v35; // ecx int v36; // ecx int v37; // ecx int v38; // edx int v39; // eax int v40; // ecx int *v41; // ecx float *v42; // ecx _BYTE *v43; // ecx int v44; // ecx int v45; // eax _DWORD *v46; // ecx _DWORD *v47; // eax _DWORD *v48; // ecx _DWORD *v49; // eax _DWORD *v50; // eax int v51; // ecx void *v52; // eax float *v53; // eax _DWORD *v54; // ecx _DWORD *v55; // eax _DWORD *v56; // eax _DWORD *v57; // ebx int v58; // edi int v59; // ecx const char *v60; // eax void *v61; // [esp+30h] [ebp-6Ch] void **v62; // [esp+34h] [ebp-68h] _DWORD *(__thiscall *v63)(void *); // [esp+38h] [ebp-64h] int v64; // [esp+3Ch] [ebp-60h] float v65; // [esp+40h] [ebp-5Ch] float v66; // [esp+44h] [ebp-58h] float v67; // [esp+48h] [ebp-54h] char v68; // [esp+4Ch] [ebp-50h] char v69; // [esp+4Dh] [ebp-4Fh] int v70; // [esp+98h] [ebp-4h] v2 = this; v3 = *(void **)(this + 1124); if ( v3 ) { v4 = timeGetTime(); sub_6F0060((int)v3, v4); } if ( sub_8D0630((float *)(v2 + 2596), a2) && *(_BYTE *)(v2 + 2652) ) { v5 = *(_BYTE *)(v2 + 2653) == 0; v65 = 500.0; v66 = -500.0; v67 = 0.0; if ( v5 ) { v10 = *(float **)(v2 + 2492); v11 = v66; v10[22] = v65; v12 = v67; v10[23] = v11; v10[24] = v12; v9 = *(_DWORD *)(v2 + 2492); } else { v6 = *(float **)(v2 + 2488); v7 = v66; v6[22] = v65; v8 = v67; v6[23] = v7; v6[24] = v8; v9 = *(_DWORD *)(v2 + 2488); } sub_8FA270(&unk_BA6B10, flt_ACCFCC, v9); *(_BYTE *)(v2 + 2652) = 0; } if ( byte_ACEAF9 ) { sub_4A6260((_DWORD ***)v2, dword_AAEBA8, dword_AAEBAC); sub_4990F0((_DWORD **)v2); byte_ACEAFB = 1; byte_ACEAF9 = 0; v13 = *(_DWORD ***)(v2 + 4872); if ( v13 ) sub_4EECE0(v13, dword_AAEBA8, dword_AAEBAC); } if ( *(_BYTE *)(v2 + 698) ) { if ( byte_ACEAFB ) { sub_4985A0(v2, v2); *(_BYTE *)(v2 + 698) = 0; byte_ACEAFB = 0; } *(_BYTE *)(v2 + 698) = 0; } sub_6C2CA0(flt_ACCFCC); v14 = *(_DWORD *)(v2 + 2336); *(_DWORD *)(v2 + 2592) = 0; if ( v14 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v14 + 16))(v2, 100); v15 = *(_DWORD *)(v2 + 2340); *(_DWORD *)(v2 + 2592) = 1; if ( v15 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v15 + 16))(v2, 100); sub_62EBB0(); sub_8F8AE0(&unk_BA6B10, 1); if ( dword_B67404 ) { v3 = (void *)dword_BA6B9C; if ( dword_BA6B9C ) { v16 = (*(int (__thiscall **)(int))(*(_DWORD *)dword_BA6B9C + 4))(dword_BA6B9C); if ( v16 ) { while ( (_UNKNOWN *)v16 != &unk_ACEC28 ) { v16 = *(_DWORD *)(v16 + 4); if ( !v16 ) goto LABEL_27; } (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 616))(v3); } } } LABEL_27: v17 = *(_DWORD **)(v2 + 876); if ( v17 && sub_8F3540(v17) ) sub_42EB50(*(_DWORD **)(v2 + 876), a2); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); if ( sub_8D0630((float *)(v2 + 5140), a2) ) sub_582B90(*(_DWORD **)(v2 + 724)); sub_4E2960((_DWORD *)v2); sub_4D2780((float **)(v2 + 2580)); sub_6BF570(a2); v18 = (_BYTE *)*sub_49F490(&v61); if ( v61 ) { v3 = v61; if ( !InterlockedDecrement((volatile LONG *)v61 + 1) ) { if ( v3 ) (**(void (__thiscall ***)(void *, signed int))v3)(v3, 1); } } if ( v18 ) sub_630650(v18, SLODWORD(a2)); sub_4A2620((int *)v2); sub_8EEEE0((_DWORD *)v2); if ( !*(_BYTE *)(v2 + 2659) && !(*(_BYTE *)(dword_ACDC84 + 33) & 2) && *(_BYTE *)(dword_ACDC84 + 65) & 2 ) *(_BYTE *)(v2 + 2659) = 1; if ( byte_AB7288 ) { if ( *(_DWORD *)(v2 + 1048) ) { v19 = sub_680890((unsigned __int8 *)byte_AD9238); if ( sub_61DB70(*(char **)(v2 + 1048), v19) ) { if ( byte_AD0C38 ) { sub_6ADD80(&unk_B91250, dword_AD8EBC, flt_ACCFCC); *(_DWORD *)(*(_DWORD *)(v2 + 1048) + 496) = 1; } else { sub_4A5B30((_DWORD *)v2); } } } } else if ( !byte_AD0C38 ) { v20 = sub_680890((unsigned __int8 *)byte_AD9238); if ( sub_61DB70(*(char **)(v2 + 1048), v20) ) { sub_4A5B30((_DWORD *)v2); byte_AD0C38 = 1; } } sub_4E15C0((float *)v2, *(float *)&v3, a2); sub_666180(dword_AD8C90, v21, a2); sub_6830D0(&unk_ADA1E0, SLODWORD(a2)); if ( dword_AD8EBC[1449] && !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() ) { if ( sub_6863C0(&byte_ADA230) ) { sub_4A7FF0((_DWORD *)v2, 0); dword_AD8EBC[2724] = 1; } else { sub_4E4D90((_DWORD *)v2, (_DWORD *)1); } } nullsub_35(LODWORD(a2)); v22 = sub_4DE3D0(); sub_680370(v22); if ( sub_58D8E0(*(char **)(v2 + 972), 1000) ) { if ( dword_ADB4F8 ) sub_6DCB60((int)byte_ADB468, 1); } else if ( dword_ADB4F8 ) { sub_6DCB60((int)byte_ADB468, 0); if ( dword_ADB564 != -1 ) dword_ADB564 = -1; } sub_68F0A0(byte_ADB468, 2, (int)v3, *(float *)&v2, a2); v23 = sub_4967C0(); sub_6D11E0(v23, a2); sub_4DE270(); sub_6BACD0(&dword_AB6520, a2, dword_B66FB0); sub_63B700(byte_AD8A08, a2, dword_B66FB0); sub_6B2B80(&unk_B912C8, a2, dword_B66FB0); v24 = *(_BYTE **)(v2 + 544); if ( v24 ) sub_559140(v24); v25 = *(_BYTE **)(v2 + 548); if ( v25 ) sub_559140(v25); v26 = *(_DWORD *)(v2 + 2336); if ( v26 ) sub_9060A0(v26); v27 = *(_DWORD *)(v2 + 2340); if ( v27 ) sub_9060A0(v27); v28 = (volatile LONG **)(v2 + 5204); if ( !*(_DWORD *)(v2 + 5204) ) { if ( byte_B68508 == 1 ) { v62 = &std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; v63 = sub_4E24E0; v64 = v2; v66 = COERCE_FLOAT(&v62); v70 = 0; v29 = (char *)sub_40C190(374499920); v30 = sub_41E360(0, v2, 1, v29); *v28 = v30; sub_41E140((void *)v30, 1, (int)&v62); byte_B68508 = 0; v70 = -1; if ( v66 != 0.0 ) (*(void (__stdcall **)(bool))(*(_DWORD *)LODWORD(v66) + 12))(LODWORD(v66) != (_DWORD)&v62); } else if ( *(_BYTE *)(*(_DWORD *)(v2 + 2340) + 9) ) { v63 = sub_4E24E0; v62 = &std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; v64 = v2; v66 = COERCE_FLOAT(&v62); v70 = 1; v31 = (char *)sub_40C190(-808578239); v32 = sub_41E360(0, v2, 1, v31); *v28 = v32; sub_41E140((void *)v32, 1, (int)&v62); v70 = -1; if ( v66 != 0.0 ) (*(void (__stdcall **)(bool))(*(_DWORD *)LODWORD(v66) + 12))(LODWORD(v66) != (_DWORD)&v62); } else if ( *(_BYTE *)(*(_DWORD *)(v2 + 2336) + 9) && !*(_BYTE *)(v2 + 2344) ) { sub_4E6E60(&v62, (int)sub_4E32E0, v2); v70 = 2; v33 = (char *)sub_40C190(-875638214); sub_40C080(v2, (volatile LONG **)(v2 + 5204), v33, (int)&v62); v70 = -1; sub_585390(&v62); } } v34 = *(_DWORD *)(v2 + 756); if ( v34 ) sub_46AEA0(v34, (int)v28, v2, SLODWORD(a2), dword_B66FB0, dword_BA6B30); v35 = *(_DWORD *)(v2 + 760); if ( dword_AD036C ) { if ( v35 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)v35 + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 760)); } else if ( v35 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v35 + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 760)); } v36 = *(_DWORD *)(v2 + 764); if ( dword_ACEC18 ) { if ( v36 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)v36 + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 764)); } else if ( v36 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v36 + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 764)); } v37 = *(_DWORD *)(v2 + 1060); if ( dword_ACF570 ) { if ( v37 && !(*(unsigned __int8 (**)(void))(*(_DWORD *)v37 + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 1060)); } else if ( v37 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v37 + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 1060)); sub_4BD030((_DWORD *)v2); } if ( *(_BYTE *)(v2 + 5112) ) sub_4E2DF0((_DWORD *)v2, 0); else sub_4E2DF0((_DWORD *)v2, byte_B92005); v39 = *(_DWORD *)(v2 + 112); if ( v39 ) sub_4DE8F0((float *)v2, v39, 0.0); v40 = *(_DWORD *)(v2 + 4832); if ( v40 ) sub_6B3E60(v40, a2); v41 = *(int **)(v2 + 4836); if ( v41 ) sub_6B4BC0(v41, v38, a2); sub_6454B0(a2); sub_4E43B0((_DWORD *)v2, a2); sub_632CB0(&dword_AD46F0, a2); v42 = *(float **)(v2 + 4872); if ( v42 ) sub_4EEDC0(v42, a2); v43 = *(_BYTE **)(v2 + 4952); if ( v43 && *(_DWORD *)(v2 + 4944) ) { if ( sub_4ED200(v43) ) sub_4ED960(*(_DWORD **)(v2 + 4944), 1); v44 = *(_DWORD *)(v2 + 4952); if ( *(_DWORD *)(v44 + 1292) == 28 && sub_4ED280(v44) ) { v45 = *(_DWORD *)(v2 + 4944); *(_WORD *)(v45 + 28) |= 1u; *(_BYTE *)(v45 + 356) = 0; } } sub_4E3B30((_DWORD *)v2); v46 = (_DWORD *)dword_ADB460; if ( !dword_ADB460 ) { v47 = operator new(0x1Cu); v61 = v47; v70 = 3; if ( v47 ) { v46 = sub_68CEC0(v47); v70 = -1; dword_ADB460 = (int)v46; } else { v46 = 0; v70 = -1; dword_ADB460 = 0; } } sub_68D4C0(v46, SLODWORD(a2)); v48 = (_DWORD *)dword_ACB2E4; if ( !dword_ACB2E4 ) { v49 = operator new(0x14u); v61 = v49; v70 = 4; if ( v49 ) v50 = sub_439430(v49); else v50 = 0; v48 = v50; v70 = -1; dword_ACB2E4 = (int)v50; } sub_439550(v48, a2); v51 = dword_ACCFE0; if ( !dword_ACCFE0 ) { v52 = operator new(0xB4u); v61 = v52; v70 = 5; if ( v52 ) v53 = sub_4546A0((float *)v52); else v53 = 0; v51 = (int)v53; v70 = -1; dword_ACCFE0 = (int)v53; } sub_453D20(v51, SLODWORD(a2)); v54 = (_DWORD *)dword_ACCF98; if ( !dword_ACCF98 ) { v55 = operator new(0x28u); v61 = v55; v70 = 6; if ( v55 ) v56 = sub_4534E0(v55); else v56 = 0; v54 = v56; v70 = -1; dword_ACCF98 = (int)v56; } sub_453440(v54, a2); v57 = (_DWORD *)dword_BA6B48; if ( dword_BA6B48 ) { do { v58 = v57[2]; v57 = (_DWORD *)*v57; if ( v58 ) { v68 = 0; memset(&v69, 0, 0x3Fu); v59 = *(_DWORD *)(v58 + 8); if ( v59 ) { strncpy(&v68, *(const char **)(v58 + 8), strlen(*(const char **)(v58 + 8)) - 3); v60 = sub_4E6810(&v68); if ( v60 ) sub_4A8140(v2, *((_DWORD *)v60 + 17)); } } } while ( v57 ); } } // 6E1540: using guessed type _DWORD __stdcall nullsub_35(_DWORD); // 9BC654: using guessed type void *std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; // AB7288: using guessed type char byte_AB7288; // ACB2E4: using guessed type int dword_ACB2E4; // ACCF98: using guessed type int dword_ACCF98; // ACCFCC: using guessed type float flt_ACCFCC; // ACCFE0: using guessed type int dword_ACCFE0; // ACDC84: using guessed type int dword_ACDC84; // ACEAF9: using guessed type char byte_ACEAF9; // ACEAFB: using guessed type char byte_ACEAFB; // ACEC18: using guessed type int dword_ACEC18; // ACF570: using guessed type int dword_ACF570; // AD036C: using guessed type int dword_AD036C; // AD0C38: using guessed type char byte_AD0C38; // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; // ADB460: using guessed type int dword_ADB460; // ADB4F8: using guessed type int dword_ADB4F8; // ADB564: using guessed type int dword_ADB564; // B67404: using guessed type int dword_B67404; // B68508: using guessed type char byte_B68508; // B92005: using guessed type char byte_B92005; // BA6B30: using guessed type int dword_BA6B30; // BA6B48: using guessed type int dword_BA6B48; // BA6B9C: using guessed type int dword_BA6B9C; //----- (004E64C0) -------------------------------------------------------- int __cdecl sub_4E64C0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA4C: using guessed type int dword_ACDA4C; //----- (004E6510) -------------------------------------------------------- int sub_4E6510(int a1, int a2, int a3, int *a4, ...) { int v4; // edi int v5; // esi int result; // eax va_list va; // [esp+20h] [ebp+18h] va_start(va, a4); v4 = a2; v5 = (a2 - 1) / 2; if ( a3 >= a2 ) { result = (int)a4; *(_DWORD *)(a1 + 4 * a2) = *a4; } else { while ( sub_69CCC0((int)va, *(_DWORD *)(a1 + 4 * v5), *a4) ) { *(_DWORD *)(a1 + 4 * v4) = *(_DWORD *)(a1 + 4 * v5); v4 = v5; result = (v5 - 1) / 2; v5 = (v5 - 1) / 2; if ( a3 >= v4 ) { *(_DWORD *)(a1 + 4 * v4) = *a4; return result; } } result = (int)a4; *(_DWORD *)(a1 + 4 * v4) = *a4; } return result; } //----- (004E65A0) -------------------------------------------------------- void *__thiscall sub_4E65A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,IOptionBase *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9BC608: using guessed type void *NiTListBase,IOptionBase *>::`vftable'; //----- (004E65D0) -------------------------------------------------------- char __cdecl sub_4E65D0(int *a1) { int *v1; // esi int v2; // ecx int v3; // ecx char result; // al __int16 v5; // [esp+4h] [ebp-4h] v1 = a1; if ( *a1 ) { sub_6F3B60(&off_AB7F2C); v2 = *v1; v5 = 3103; sub_905F90(v2, &v5, 2u); sub_906000(*v1, (char *)&a1 + 3, 1u); v3 = *v1; LOWORD(a1) = 3195; result = sub_906000(v3, &a1, 2u); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004E6630) -------------------------------------------------------- void *__stdcall sub_4E6630(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x1FFFFFFF || (result = operator new(8 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004E6690) -------------------------------------------------------- void __thiscall sub_4E6690(void **this) { operator delete(this[1]); } //----- (004E66A0) -------------------------------------------------------- char sub_4E66A0(int a1, int a2, int a3, int *a4, ...) { int v4; // eax int v5; // esi bool v6; // zf int v7; // eax int v8; // edx int v9; // edi int v10; // esi int v11; // eax char v13; // [esp+Ch] [ebp-44h] int v14; // [esp+4Ch] [ebp-4h] char v15; // [esp+68h] [ebp+18h] va_list va; // [esp+68h] [ebp+18h] int v17; // [esp+6Ch] [ebp+1Ch] int v18; // [esp+70h] [ebp+20h] int v19; // [esp+74h] [ebp+24h] int v20; // [esp+78h] [ebp+28h] int v21; // [esp+7Ch] [ebp+2Ch] int v22; // [esp+80h] [ebp+30h] int v23; // [esp+84h] [ebp+34h] int v24; // [esp+88h] [ebp+38h] int v25; // [esp+8Ch] [ebp+3Ch] int v26; // [esp+90h] [ebp+40h] int v27; // [esp+94h] [ebp+44h] int v28; // [esp+98h] [ebp+48h] int v29; // [esp+9Ch] [ebp+4Ch] int v30; // [esp+A0h] [ebp+50h] int v31; // [esp+A4h] [ebp+54h] va_list va1; // [esp+A8h] [ebp+58h] va_start(va1, a4); va_start(va, a4); *(_DWORD *)&v15 = va_arg(va1, _DWORD); v17 = va_arg(va1, _DWORD); v18 = va_arg(va1, _DWORD); v19 = va_arg(va1, _DWORD); v20 = va_arg(va1, _DWORD); v21 = va_arg(va1, _DWORD); v22 = va_arg(va1, _DWORD); v23 = va_arg(va1, _DWORD); v24 = va_arg(va1, _DWORD); v25 = va_arg(va1, _DWORD); v26 = va_arg(va1, _DWORD); v27 = va_arg(va1, _DWORD); v28 = va_arg(va1, _DWORD); v29 = va_arg(va1, _DWORD); v30 = va_arg(va1, _DWORD); v31 = va_arg(va1, _DWORD); v4 = a2; v5 = 2 * a2 + 2; v14 = a2; v6 = v5 == a3; if ( v5 < a3 ) { do { if ( sub_69CCC0((int)va, *(_DWORD *)(a1 + 4 * v5), *(_DWORD *)(a1 + 4 * v5 - 4)) ) --v5; v7 = a2; v8 = *(_DWORD *)(a1 + 4 * v5); a2 = v5; v5 = 2 * v5 + 2; *(_DWORD *)(a1 + 4 * v7) = v8; v6 = v5 == a3; } while ( v5 < a3 ); v4 = a2; } if ( v6 ) { *(_DWORD *)(a1 + 4 * v4) = *(_DWORD *)(a1 + 4 * a3 - 4); a2 = a3 - 1; } qmemcpy(&v13, va, 0x40u); v9 = a2; v10 = (a2 - 1) / 2; if ( v14 >= a2 ) { v11 = *a4; *(_DWORD *)(a1 + 4 * a2) = *a4; } else { while ( 1 ) { LOBYTE(v11) = sub_69CCC0((int)&v13, *(_DWORD *)(a1 + 4 * v10), *a4); if ( !(_BYTE)v11 ) break; *(_DWORD *)(a1 + 4 * v9) = *(_DWORD *)(a1 + 4 * v10); v9 = v10; v10 = (v10 - 1) / 2; if ( v14 >= v9 ) { LOBYTE(v11) = (_BYTE)a4; *(_DWORD *)(a1 + 4 * v9) = *a4; return v11; } } *(_DWORD *)(a1 + 4 * v9) = *a4; } return v11; } //----- (004E6780) -------------------------------------------------------- _DWORD *__thiscall sub_4E6780(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[3]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (004E67B0) -------------------------------------------------------- int __cdecl sub_4E67B0(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACDA1C + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACDA1C + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA1C + 4), v3); } // ACDA1C: using guessed type int dword_ACDA1C; //----- (004E6810) -------------------------------------------------------- const char *__cdecl sub_4E6810(const char *a1) { const char *result; // eax int v2; // eax unsigned int v3; // edi unsigned int v4; // esi if ( !a1 ) return 0; v2 = *(_DWORD *)(dword_ACD9E0 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( !v3 ) return 0; while ( 1 ) { result = (const char *)sub_7474E0((_DWORD *)(dword_ACD9E0 + 4), v4); if ( result ) { if ( !strcmp(result, a1) ) break; } if ( ++v4 >= v3 ) return 0; } return result; } // ACD9E0: using guessed type int dword_ACD9E0; //----- (004E6890) -------------------------------------------------------- _DWORD *__thiscall sub_4E6890(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,IOptionBase *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,IOptionBase *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9BC608: using guessed type void *NiTListBase,IOptionBase *>::`vftable'; // 9BC618: using guessed type void *NiTPointerListBase,IOptionBase *>::`vftable'; //----- (004E6920) -------------------------------------------------------- void ***sub_4E6920() { return &std::tr1::_Bind,GameFrameWork *>> `RTTI Type Descriptor'; } // AAED68: using guessed type void **std::tr1::_Bind,GameFrameWork *>> `RTTI Type Descriptor'; //----- (004E6930) -------------------------------------------------------- char *__thiscall sub_4E6930(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0xCu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9BC654: using guessed type void *std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004E6990) -------------------------------------------------------- int sub_4E6990(int a1, int a2, ...) { int v2; // ebx int result; // eax int i; // edx int v5; // ecx int v6; // eax int v7; // edi int v8; // esi int v9; // eax int v10; // edx int v11; // ecx char v12; // [esp-40h] [ebp-98h] int v13; // [esp-4h] [ebp-5Ch] char v14; // [esp+Ch] [ebp-4Ch] int v15; // [esp+4Ch] [ebp-Ch] int v16; // [esp+50h] [ebp-8h] int v17; // [esp+54h] [ebp-4h] int v18; // [esp+60h] [ebp+8h] int v19; // [esp+64h] [ebp+Ch] char v20; // [esp+68h] [ebp+10h] va_list va; // [esp+68h] [ebp+10h] int v22; // [esp+6Ch] [ebp+14h] int v23; // [esp+70h] [ebp+18h] int v24; // [esp+74h] [ebp+1Ch] int v25; // [esp+78h] [ebp+20h] int v26; // [esp+7Ch] [ebp+24h] int v27; // [esp+80h] [ebp+28h] int v28; // [esp+84h] [ebp+2Ch] int v29; // [esp+88h] [ebp+30h] int v30; // [esp+8Ch] [ebp+34h] int v31; // [esp+90h] [ebp+38h] int v32; // [esp+94h] [ebp+3Ch] int v33; // [esp+98h] [ebp+40h] int v34; // [esp+9Ch] [ebp+44h] int v35; // [esp+A0h] [ebp+48h] int v36; // [esp+A4h] [ebp+4Ch] va_list va1; // [esp+A8h] [ebp+50h] va_start(va1, a2); va_start(va, a2); *(_DWORD *)&v20 = va_arg(va1, _DWORD); v22 = va_arg(va1, _DWORD); v23 = va_arg(va1, _DWORD); v24 = va_arg(va1, _DWORD); v25 = va_arg(va1, _DWORD); v26 = va_arg(va1, _DWORD); v27 = va_arg(va1, _DWORD); v28 = va_arg(va1, _DWORD); v29 = va_arg(va1, _DWORD); v30 = va_arg(va1, _DWORD); v31 = va_arg(va1, _DWORD); v32 = va_arg(va1, _DWORD); v33 = va_arg(va1, _DWORD); v34 = va_arg(va1, _DWORD); v35 = va_arg(va1, _DWORD); v36 = va_arg(va1, _DWORD); v2 = a1; v16 = (a2 - a1) >> 2; result = v16 / 2; if ( v16 / 2 > 0 ) { for ( i = 2 * result + 2; ; i = v17 ) { v5 = *(_DWORD *)(v2 + 4 * result - 4); v6 = result - 1; v15 = v5; qmemcpy(&v14, va, 0x40u); v7 = v16; v18 = v6; v17 = i - 2; v19 = v6; v8 = i - 2; if ( i - 2 < v16 ) { do { v9 = *(_DWORD *)(v2 + 4 * v8); v13 = *(_DWORD *)(v2 + 4 * v8 - 4); if ( sub_69CCC0((int)&v14, v9, v13) ) --v8; v10 = v19; v11 = *(_DWORD *)(v2 + 4 * v8); v19 = v8; v8 = 2 * v8 + 2; *(_DWORD *)(v2 + 4 * v10) = v11; } while ( v8 < v7 ); v6 = v18; } if ( v8 == v7 ) { *(_DWORD *)(v2 + 4 * v19) = *(_DWORD *)(v2 + 4 * v7 - 4); v19 = v7 - 1; } qmemcpy(&v12, &v14, 0x40u); result = sub_4E6510(v2, v19, v6, &v15); if ( v18 <= 0 ) break; result = v18; } } return result; } //----- (004E6A70) -------------------------------------------------------- int *__thiscall sub_4E6A70(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 17) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_8DDBD0(&a3); if ( *(_BYTE *)(*v3 + 17) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 17) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 17) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6910C0((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 17) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_691420(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 17) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 17) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 16); *(_BYTE *)(v5 + 16) = *((_BYTE *)v3 + 16); *((_BYTE *)v3 + 16) = v13; LABEL_35: if ( v18[16] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 16) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[16] ) { v15[16] = 1; *(_BYTE *)(v6 + 16) = 0; sub_8DDC80(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[17] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 16) = 1; v15[16] = 0; sub_6913C0(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[16] = *(_BYTE *)(v6 + 16); *(_BYTE *)(v6 + 16) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) = 1; sub_8DDC80(i, v6); break; } } else { if ( !v15[16] ) { v15[16] = 1; *(_BYTE *)(v6 + 16) = 0; sub_6913C0(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[17] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 16) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) = 1; v15[16] = 0; sub_8DDC80(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[16] = *(_BYTE *)(v6 + 16); *(_BYTE *)(v6 + 16) = 1; *(_BYTE *)(*(_DWORD *)v15 + 16) = 1; sub_6913C0(i, (_DWORD *)v6); break; } } v15[16] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 16) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (004E6CC0) -------------------------------------------------------- int sub_4E6CC0(_DWORD *a1, ...) { _DWORD *v1; // ebx int result; // eax int v3; // edx char v4; // [esp-40h] [ebp-4Ch] int v5; // [esp+14h] [ebp+8h] int v6; // [esp+18h] [ebp+Ch] va_list va; // [esp+18h] [ebp+Ch] va_list va1; // [esp+1Ch] [ebp+10h] va_start(va1, a1); va_start(va, a1); v6 = va_arg(va1, _DWORD); v1 = a1; result = v6 - (_DWORD)a1; if ( (signed int)((v6 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *(_DWORD *)((char *)v1 + result - 4); *(_DWORD *)((char *)v1 + result - 4) = *v1; v6 = v3; v5 = result - 4; qmemcpy(&v4, va1, 0x40u); sub_4E66A0((int)v1, 0, (result - 4) >> 2, (int *)va); result = v5; } while ( (signed int)(v5 & 0xFFFFFFFC) > 4 ); } return result; } //----- (004E6D30) -------------------------------------------------------- unsigned int __thiscall sub_4E6D30(_DWORD *this, unsigned int a2) { int v2; // esi const void *v3; // ecx unsigned int result; // eax void *v5; // edi int v6; // edx v2 = (int)this; v3 = (const void *)this[1]; result = (_DWORD)((_DWORD)v3 - *(_DWORD *)v2) >> 2; if ( result <= a2 ) { if ( result < a2 ) { sub_5E2180(v2, a2 - result); v6 = (*(_DWORD *)(v2 + 4) - *(_DWORD *)v2) >> 2; if ( a2 != v6 ) memset(*(void **)(v2 + 4), 0, 4 * (a2 - v6)); result = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 4) = result + 4 * (a2 - ((*(_DWORD *)(v2 + 4) - *(_DWORD *)v2) >> 2)); } } else { v5 = (void *)(*(_DWORD *)v2 + 4 * a2); if ( v5 != v3 ) { result = (unsigned int)memcpy_0(v5, v3, 0); *(_DWORD *)(v2 + 4) = v5; } } return result; } //----- (004E6DC0) -------------------------------------------------------- int *__thiscall sub_4E6DC0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 17) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 17) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 17); j = (int *)*j ) v10 = j; a3 = v10; } } sub_4E6A70(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_4A0060(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (004E6E60) -------------------------------------------------------- _DWORD *__thiscall sub_4E6E60(_DWORD *this, int a2, int a3) { _DWORD *result; // eax result = this; if ( this ) { *this = &std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; this[1] = a2; this[2] = a3; } this[4] = this; return result; } // 9BC654: using guessed type void *std::tr1::_Impl_no_alloc0,GameFrameWork *>>,0>,void>::`vftable'; //----- (004E6E90) -------------------------------------------------------- void __thiscall sub_4E6E90(void *this) { void **v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi v1 = (void **)this; v2 = *(_DWORD ***)this; v3 = *v2; *v2 = v2; *((_DWORD *)*v1 + 1) = *v1; v1[1] = 0; if ( v3 != *v1 ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != *v1 ); } operator delete(*v1); } //----- (004E6ED0) -------------------------------------------------------- char *__thiscall sub_4E6ED0(_DWORD *this, char *a2) { _DWORD *v2; // esi char *result; // eax char *v4; // ebx _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 int v7; // edi int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; result = a2; if ( (unsigned int)a2 > 0x1FFFFFFF ) std::_Xlength_error("vector too long"); if ( (this[2] - *this) >> 3 < (unsigned int)a2 ) { v4 = (char *)sub_4E6630(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v9 = v4; v11 = 0; sub_7481A0(v6, v5, v4); v7 = (v2[1] - *v2) >> 3; if ( *v2 ) operator delete((void *)*v2); result = a2; v2[2] = &v4[8 * (_DWORD)a2]; v2[1] = &v4[8 * v7]; *v2 = v4; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004E6FA0) -------------------------------------------------------- int sub_4E6FA0(int *a1, unsigned int a2, unsigned int a3, ...) { int *v3; // ebx int v4; // edx int v5; // eax char v7; // [esp-48h] [ebp-5Ch] char v8; // [esp-40h] [ebp-54h] int v9; // [esp-8h] [ebp-1Ch] int v10; // [esp-4h] [ebp-18h] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] char v13; // [esp+28h] [ebp+14h] va_list va; // [esp+28h] [ebp+14h] int v15; // [esp+2Ch] [ebp+18h] int v16; // [esp+30h] [ebp+1Ch] int v17; // [esp+34h] [ebp+20h] int v18; // [esp+38h] [ebp+24h] int v19; // [esp+3Ch] [ebp+28h] int v20; // [esp+40h] [ebp+2Ch] int v21; // [esp+44h] [ebp+30h] int v22; // [esp+48h] [ebp+34h] int v23; // [esp+4Ch] [ebp+38h] int v24; // [esp+50h] [ebp+3Ch] int v25; // [esp+54h] [ebp+40h] int v26; // [esp+58h] [ebp+44h] int v27; // [esp+5Ch] [ebp+48h] int v28; // [esp+60h] [ebp+4Ch] int v29; // [esp+64h] [ebp+50h] va_list va1; // [esp+68h] [ebp+54h] va_start(va1, a3); va_start(va, a3); *(_DWORD *)&v13 = va_arg(va1, _DWORD); v15 = va_arg(va1, _DWORD); v16 = va_arg(va1, _DWORD); v17 = va_arg(va1, _DWORD); v18 = va_arg(va1, _DWORD); v19 = va_arg(va1, _DWORD); v20 = va_arg(va1, _DWORD); v21 = va_arg(va1, _DWORD); v22 = va_arg(va1, _DWORD); v23 = va_arg(va1, _DWORD); v24 = va_arg(va1, _DWORD); v25 = va_arg(va1, _DWORD); v26 = va_arg(va1, _DWORD); v27 = va_arg(va1, _DWORD); v28 = va_arg(va1, _DWORD); v29 = va_arg(va1, _DWORD); v3 = (int *)a2; v11 = (signed int)(a2 - (_DWORD)a1) >> 2; if ( v11 > 1 ) { v10 = 0; v9 = 0; qmemcpy(&v7, va, 0x40u); sub_4E6990((int)a1, a2); } if ( a2 < a3 ) { do { v4 = *v3; v10 = *a1; if ( sub_69CCC0((int)va, v4, v10) ) { v5 = *v3; *v3 = *a1; v12 = v5; qmemcpy(&v8, va, 0x40u); sub_4E66A0((int)a1, 0, v11, &v12); } ++v3; } while ( (unsigned int)v3 < a3 ); } qmemcpy(&v8, va, 0x40u); return sub_4E6CC0(a1, a2); } //----- (004E7060) -------------------------------------------------------- void __thiscall sub_4E7060(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_4E6DC0(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (004E70C0) -------------------------------------------------------- char *__thiscall sub_4E70C0(int **this, char *a2) { int **v2; // esi char *result; // eax int *v4; // eax int *v5; // ebx int *v6; // ST04_4 int *v7; // ST00_4 int *v8; // ecx int *v9; // eax int v10; // edi int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; result = a2; if ( (unsigned int)a2 > 0x3FFFFFFF ) std::_Xlength_error("vector too long"); if ( this[2] - *this < (unsigned int)a2 ) { v4 = (int *)sub_68B040(a2); v5 = v4; v6 = v2[1]; v7 = *v2; v12 = v4; v14 = 0; sub_640070(v7, v6, v4); v8 = v2[1]; v9 = *v2; v10 = v2[1] - *v2; v14 = -1; if ( v9 ) { sub_467720(v9, v8); operator delete(*v2); } result = (char *)&v5[v10]; v2[2] = &v5[(_DWORD)a2]; v2[1] = (int *)result; *v2 = v5; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004E71B0) -------------------------------------------------------- char *__thiscall sub_4E71B0(int this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 2; if ( 0x3FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 2; if ( (unsigned int)result > v4 ) { if ( 0x3FFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_4E70C0((int **)this, v5); } return result; } //----- (004E7210) -------------------------------------------------------- char *__thiscall sub_4E7210(_DWORD *this, char *a2) { _DWORD *v2; // esi char *result; // eax int v4; // ecx int v5; // edi char **v6; // ecx int v7; // edi v2 = this; result = (char *)this[1]; if ( a2 >= result || (v4 = *this, *v2 > (unsigned int)a2) ) { if ( result == (char *)v2[2] ) sub_4E71B0((int)v2, 1); result = (char *)v2[1]; if ( result ) { v7 = *(_DWORD *)a2; *(_DWORD *)result = *(_DWORD *)a2; if ( v7 ) result = (char *)InterlockedIncrement((volatile LONG *)(v7 + 4)); } } else { v5 = (signed int)&a2[-v4] >> 2; if ( result == (char *)v2[2] ) result = sub_4E71B0((int)v2, 1); v6 = (char **)v2[1]; if ( v6 ) { result = *(char **)(*v2 + 4 * v5); *v6 = result; if ( result ) { result = (char *)InterlockedIncrement((volatile LONG *)result + 1); v2[1] += 4; return result; } } } v2[1] += 4; return result; } //----- (004E72C0) -------------------------------------------------------- int *sub_4E72C0() { return &dword_ACEB04; } // ACEB04: using guessed type int dword_ACEB04; //----- (004E72D0) -------------------------------------------------------- int sub_4E72D0() { return dword_ACEB04; } // ACEB04: using guessed type int dword_ACEB04; //----- (004E72E0) -------------------------------------------------------- void *__thiscall sub_4E72E0(void *this, char a2) { void *v2; // esi v2 = this; sub_4E4980(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004E7330) -------------------------------------------------------- char __thiscall sub_4E7330(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[95] = a6; result = sub_907E00(this, a2, a3, 32, 32, a5, 0, 0); if ( result ) { v6[96] = a4; result = 1; } return result; } //----- (004E7380) -------------------------------------------------------- char __stdcall sub_4E7380(int a1, int a2, int a3) { return 0; } //----- (004E7390) -------------------------------------------------------- int __thiscall sub_4E7390(int this) { int v1; // esi v1 = this; sub_8F2EA0((void **)this, (const char *)(*(_DWORD *)(this + 392) + 33)); return sub_8F2F90(v1); } //----- (004E7400) -------------------------------------------------------- bool __thiscall sub_4E7400(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D5860(this, a2, a3, a4) != 0; } //----- (004E74A0) -------------------------------------------------------- bool __thiscall sub_4E74A0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) != 0; } //----- (004E74D0) -------------------------------------------------------- char sub_4E74D0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ActionWin"); return (char)v0; } //----- (004E7500) -------------------------------------------------------- LONG __thiscall sub_4E7500(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &ActionIconWin::`vftable'; this[58] = &ActionIconWin::`vftable'; v2 = this[101]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[100]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_5D3FC0(v1); } // 9BCE54: using guessed type void *ActionIconWin::`vftable'; // 9BCE74: using guessed type void *ActionIconWin::`vftable'; //----- (004E75C0) -------------------------------------------------------- _DWORD *__thiscall sub_4E75C0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ActionWin::`vftable'; v1[58] = &ActionWin::`vftable'; v1[122] = &PgWinDrop::`vftable'; v1[123] = 0; v1[124] = 0; v2 = (int)(v1 + 126); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; memset(v1 + 86, 0, 0x48u); memset(v1 + 104, 0, 0x48u); v1[123] = v1 + 126; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9BD0DC: using guessed type void *ActionWin::`vftable'; // 9BD0FC: using guessed type void *ActionWin::`vftable'; //----- (004E7690) -------------------------------------------------------- int __thiscall sub_4E7690(_DWORD *this, int a2) { int result; // eax this[128] = 9; this[130] = 3; this[131] = a2; this[129] = 0; result = **(unsigned __int8 **)(this[a2 + 86] + 392); this[138] = result; this[124] = this; dword_BA6BCC = (int)(this + 122); return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (004E76F0) -------------------------------------------------------- int __thiscall sub_4E76F0(_DWORD *this, int a2) { int result; // eax this[128] = 9; this[130] = 3; this[131] = a2; this[129] = 1; result = **(unsigned __int8 **)(this[a2 + 104] + 392); this[138] = result; this[124] = this; dword_BA6BCC = (int)(this + 122); return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (004E7750) -------------------------------------------------------- void __thiscall sub_4E7750(_DWORD *this) { _DWORD *v1; // ecx v1 = (_DWORD *)this[94]; if ( v1[98] ) sub_5D37A0(v1, flt_ACCFCC, 7.0, 0.0); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004E7790) -------------------------------------------------------- void __thiscall sub_4E7790(_DWORD *this) { _DWORD *v1; // ecx v1 = (_DWORD *)this[95]; if ( v1[98] ) sub_5D37A0(v1, flt_ACCFCC, 7.0, 0.0); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004E7850) -------------------------------------------------------- char __thiscall sub_4E7850(_DWORD *this) { _DWORD *v1; // esi int v2; // edi char result; // al void (__thiscall *v4)(_DWORD *, int *, int *); // edx int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = 0; if ( v2 ) { v4 = *(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180); v5 = 0; v6 = 0; v4(v1, &v5, &v6); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v2 + 772) + 308))(v5, v6); result = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 772)); } return result; } //----- (004E78D0) -------------------------------------------------------- char __thiscall sub_4E78D0(void *this, char a2) { char result; // al void *v3; // [esp-2h] [ebp-4h] int v4; // [esp-2h] [ebp-4h] v3 = this; result = sub_65B9D0(dword_AD8EBC, 500000); if ( !result && !dword_AD8EBC[2496] ) { result = dword_AD8EBC[1924]; if ( result != 4 && result != 5 ) { if ( (*(int (__cdecl **)(int))(*(_DWORD *)dword_AD8EBC + 440))(v4) != 4 || (result = (char)dword_AD8EBC, *((_DWORD *)dword_AD8EBC + 1030)) ) { HIBYTE(v3) = a2; result = sub_6F3D10(&off_AB7F2C, 8, 103, (char *)&v3 + 3, 1u); } } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (004E7950) -------------------------------------------------------- char __thiscall sub_4E7950(void *this, int a2, int a3, int a4) { byte_BA6BD0 = 1; (*(void (**)(void))(*(_DWORD *)this + 528))(); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (004E7970) -------------------------------------------------------- char __thiscall sub_4E7970(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[96]); return (char)v2; } //----- (004E79A0) -------------------------------------------------------- char __thiscall sub_4E79A0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[96]); return (char)v2; } //----- (004E79D0) -------------------------------------------------------- int __thiscall sub_4E79D0(_DWORD *this, float a2, float a3, float a4, float a5) { _DWORD *v5; // esi int result; // eax float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v5 = this; result = this[101]; if ( result ) { v7 = a2 / 255.0; v8 = a3 / 255.0; v9 = a4 / 255.0; v10 = a5 / 255.0; sub_867FF0(*(_DWORD *)(result + 184), 0, &v7); sub_867680(*(_DWORD *)(v5[101] + 184)); sub_85C4D0((_DWORD *)v5[101]); result = sub_85BED0((_DWORD **)v5[101], 0.0, 1); } return result; } //----- (004E7A50) -------------------------------------------------------- int __thiscall sub_4E7A50(_DWORD *this, int a2) { _DWORD *v2; // esi double v3; // st7 float v4; // ST08_4 float v5; // ST04_4 float v6; // ST00_4 int result; // eax int v8; // eax _DWORD *v9; // ecx float v10; // [esp+Ch] [ebp-8h] v2 = this; if ( this[94] ) { if ( sub_680D20((int)byte_AD9238) ) { v3 = 0.0; v10 = 0.0; } else { v10 = 128.0; v3 = 0.0; } v4 = v3; v5 = v3; v6 = v3; sub_4E79D0((_DWORD *)v2[94], v6, v5, v4, v10); } result = (unsigned __int8)sub_6807E0(byte_AD9238); switch ( result ) { case 26: case 27: return result; default: if ( v2[95] ) { v8 = sub_680D30((int)byte_AD9238); v9 = (_DWORD *)v2[95]; if ( v8 ) result = sub_4E79D0(v9, 0.0, 0.0, 0.0, 0.0); else result = sub_4E79D0(v9, 0.0, 0.0, 0.0, 128.0); } break; } return result; } //----- (004E7B40) -------------------------------------------------------- int __thiscall sub_4E7B40(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi int *v4; // ecx v1 = this; (*(void (__stdcall **)(_DWORD))(*this + 324))(0.0); result = sub_5D5470(v1); v3 = result; if ( result ) { result = sub_402BF0(v1); if ( result ) { v4 = (int *)v1[68]; if ( v4 ) { sub_547C20(v4, v3); result = sub_8F2F90((int)v1); } } } return result; } //----- (004E7B90) -------------------------------------------------------- char __thiscall sub_4E7B90(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (004E7BC0) -------------------------------------------------------- char __thiscall sub_4E7BC0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (004E7BF0) -------------------------------------------------------- int __thiscall sub_4E7BF0(void *this) { int result; // eax signed int v2; // ebx char *v3; // ecx _WORD **v4; // edi int v5; // esi int v6; // esi _DWORD *v7; // eax char *i; // [esp+Ch] [ebp-10Ch] char v9; // [esp+10h] [ebp-108h] result = (int)this; v2 = 0; v3 = (char *)(&unk_ADB0A4 - (_UNKNOWN *)this); v4 = (_WORD **)(result + 344); for ( i = v3; ; v3 = i ) { if ( (unsigned int)v2 < 0x2A ) { v5 = *(int *)((char *)v4 + (_DWORD)v3); if ( v5 ) { sub_5D5B70(*v4, v5, 1); result = sub_4522A0((const char *)(*(_DWORD *)(v5 + 112) + 2)); v6 = result; if ( result ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v9, "%s\\Icon\\%s.dds", byte_ACAB50, v6 + 67); v7 = sub_486130((int)&v9); result = (*(int (__stdcall **)(_DWORD *, _DWORD, signed int, signed int))(*(_DWORD *)*v4 + 584))( v7, *(unsigned __int16 *)(v6 + 99), 32, 32); } } } ++v2; ++v4; if ( v2 >= 42 ) break; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004E7CC0) -------------------------------------------------------- unsigned __int16 *__thiscall sub_4E7CC0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned __int16 *result; // eax unsigned __int16 *v4; // edi unsigned __int8 *v5; // eax v2 = this; result = (unsigned __int16 *)sub_5D5470((_DWORD *)this[a2 + 86]); v4 = result; if ( result ) { v2[136] = 21; v2[138] = 0; v2[141] = a2; v2[137] = 2; v5 = (unsigned __int8 *)sub_4522A0((const char *)(*((_DWORD *)result + 28) + 2)); if ( v5 ) v2[146] = *v5; v2[139] = v4; v2[140] = 0; v2[137] = a2; v2[150] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v4 + 12))(v4); v2[132] = v2; dword_BA6BCC = (int)(v2 + 130); result = (unsigned __int16 *)sub_6BA9B0(v4[4]); } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (004E7D80) -------------------------------------------------------- char __thiscall sub_4E7D80(_WORD **this, int a2, int a3, unsigned int a4) { _WORD **v4; // ebx int v5; // esi _DWORD *v6; // eax char v8; // [esp+Ch] [ebp-108h] v4 = this; if ( a2 != 15 || a4 >= 0x2A ) return 0; sub_5D5B70(this[a4 + 86], a3, 1); if ( a3 ) { v5 = sub_4522A0((const char *)(*(_DWORD *)(a3 + 112) + 2)); if ( v5 ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v8, "%s\\Icon\\%s.dds", byte_ACAB50, v5 + 67); v6 = sub_486130((int)&v8); (*(void (__stdcall **)(_DWORD *, _DWORD, signed int, signed int))(*(_DWORD *)v4[a4 + 86] + 584))( v6, *(unsigned __int16 *)(v5 + 99), 32, 32); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004E7E60) -------------------------------------------------------- signed int __thiscall sub_4E7E60(char *this, char a2) { int v2; // ecx int v3; // eax const char *v4; // ebx unsigned int v5; // edi _BYTE *v6; // eax int v8; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] _DWORD **v10; // [esp+14h] [ebp-4h] v2 = (int)(this + 344); v9 = 0; v8 = v2; v10 = (_DWORD **)v2; while ( 1 ) { if ( v2 ) { v3 = sub_5D5470(*v10); if ( v3 ) { v4 = (const char *)(*(_DWORD *)(v3 + 112) + 2); if ( *(_DWORD *)(v3 + 112) != -2 ) { if ( *v4 ) { v5 = 0; if ( sub_452120() ) { while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v5) + 1), v4) ) { if ( ++v5 >= sub_452120() ) goto LABEL_13; } v6 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v5); if ( v6 ) { if ( *v6 == a2 ) return v9; } } } } } } LABEL_13: ++v10; if ( ++v9 >= 42 ) return -1; v2 = v8; } } // ACB6C4: using guessed type int dword_ACB6C4; //----- (004E7FB0) -------------------------------------------------------- void __thiscall sub_4E7FB0(_DWORD *this, int a2) { _DWORD *v2; // esi char v3; // al int v4; // eax char *v5; // esi char *v6; // edi char v7; // bl __int16 v8; // di __int16 *v9; // ebx _DWORD *v10; // ecx int v11; // eax int v12; // esi int v13; // eax char v14; // [esp+4h] [ebp-1Ch] int v15; // [esp+14h] [ebp-Ch] _DWORD *v16; // [esp+1Ch] [ebp-4h] v2 = this; v16 = this; if ( !sub_65B9D0(dword_AD8EBC, 500000) && !dword_AD8EBC[2496] ) { v3 = dword_AD8EBC[1924]; if ( v3 != 4 && v3 != 5 ) { v4 = v2[a2 + 104]; v5 = *(char **)(v4 + 392); v6 = *(char **)(v4 + 396); if ( v5 ) { v7 = *v5; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v16[a2 + 104] + 244))() ) { v8 = dword_ADB618; v9 = (__int16 *)dword_ADB620; v10 = (_DWORD *)v16[74]; v15 = dword_ADB61C; sub_4EA7F0(v10, (int)&v14); v11 = sub_4EA9F0(*v9, *v5); if ( v8 != -1 && v11 ) { sub_6DC3F0((int)byte_ADB468, (int)&v14, (unsigned __int8)v15, *(unsigned __int8 *)(v11 + 3)); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v12 = *(_DWORD *)dword_AD8EBC; v13 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); (*(void (__thiscall **)(char *, int))(v12 + 192))(dword_AD8EBC, v13); } } } else { if ( v6 ) v7 = *v6; sub_4B7810((_DWORD *)v16[74], v7); } } } } } // ADB618: using guessed type int dword_ADB618; // ADB61C: using guessed type int dword_ADB61C; // ADB620: using guessed type int dword_ADB620; //----- (004E8110) -------------------------------------------------------- char __thiscall sub_4E8110(void **this) { void **v1; // esi char result; // al int v3; // [esp+4h] [ebp-8h] int v4; // [esp+8h] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); result = 0; if ( v1[146] ) { v3 = 0; v4 = 0; (*((void (__thiscall **)(void **, int *, int *))*v1 + 45))(v1, &v3, &v4); (*(void (__stdcall **)(int, int))(*(_DWORD *)v1[146] + 308))(v3, v4); sub_4E7BF0(v1[146]); result = sub_8F82A0(&unk_BA6B10, v1[146]); } return result; } //----- (004E8190) -------------------------------------------------------- char __thiscall sub_4E8190(_WORD ***this, int a2, int a3, unsigned int a4) { if ( a2 != 15 || a4 >= 0x2A ) return 0; sub_4E7D80(this[146], 15, a3, a4); return 1; } //----- (004E81C0) -------------------------------------------------------- char __thiscall sub_4E81C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 3: LOBYTE(v3) = sub_4E7850(this); break; case 5: LOBYTE(v3) = sub_4E78D0(this, a3); break; case 6: LOBYTE(v3) = (unsigned int)sub_4E7CC0(this, a3); break; case 7: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "ActionWin_Premium"); break; default: return (char)v3; } return (char)v3; } //----- (004E8230) -------------------------------------------------------- int __thiscall sub_4E8230(_DWORD **this, char a2) { int result; // eax __int16 *v3; // ebx int v4; // edi _DWORD **v5; // esi double v6; // st7 float v7; // ST08_4 float v8; // ST04_4 float v9; // ST00_4 int v10; // [esp+24h] [ebp-4h] signed int v11; // [esp+30h] [ebp+8h] LOBYTE(v10) = 0; if ( !a2 ) LOBYTE(v10) = 1; result = dword_ADB618; v3 = (__int16 *)dword_ADB620; v4 = 0; v5 = this + 86; v11 = 42; do { if ( *v5 ) { result = sub_5D5470(*v5); if ( result ) { result = sub_4522A0((const char *)(*(_DWORD *)(result + 112) + 2)); if ( result ) { if ( v3 ) { result = sub_4EA9F0(*v3, *(_BYTE *)result); v4 = result; } if ( !v4 ) { if ( (_BYTE)v10 ) v6 = 1.0; else v6 = 0.44999999; v7 = v6; v8 = v6; v9 = v6; sub_5D4B50(*v5, v9, v8, v7); result = (*(int (__stdcall **)(int))(**v5 + 240))(v10); } } } } ++v5; --v11; } while ( v11 ); return result; } // ADB618: using guessed type int dword_ADB618; // ADB620: using guessed type int dword_ADB620; //----- (004E8300) -------------------------------------------------------- _DWORD *__thiscall sub_4E8300(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax int v4; // edi char *v5; // eax _DWORD *v6; // eax int v7; // eax _DWORD *v8; // eax int v9; // edi _DWORD *v10; // ecx _DWORD *v11; // edi _DWORD *v12; // eax _DWORD *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // edi int v16; // eax _DWORD *v17; // eax int v18; // edi _DWORD *v19; // ecx _DWORD *v20; // eax _WORD *v21; // edi int v22; // eax _DWORD *v23; // ecx void (__thiscall ***v24)(_DWORD, signed int); // edi void *v26; // [esp+2Ch] [ebp-3Ch] void *v27; // [esp+30h] [ebp-38h] void *v28; // [esp+34h] [ebp-34h] void *v29; // [esp+38h] [ebp-30h] void *v30; // [esp+3Ch] [ebp-2Ch] _DWORD *v31; // [esp+40h] [ebp-28h] void *v32; // [esp+44h] [ebp-24h] void *v33; // [esp+48h] [ebp-20h] void *v34; // [esp+4Ch] [ebp-1Ch] void *v35; // [esp+50h] [ebp-18h] int v36; // [esp+54h] [ebp-14h] void *v37; // [esp+58h] [ebp-10h] int v38; // [esp+64h] [ebp-4h] v1 = this; v31 = this; sub_5D35C0(this); *v1 = &ActionIconWin::`vftable'; v1[58] = &ActionIconWin::`vftable'; v38 = 0; v1[100] = 0; v1[101] = 0; LOBYTE(v38) = 2; sub_5D4380(v1, 0x20u, (volatile LONG *)0x20); v2 = (_DWORD *)v1[83]; v1[95] = 0; v1[98] = 0; v1[99] = 0; v3 = sub_85C050(v2, 0); sub_4EAA40((_DWORD *)v1[83], v3); v36 = 0; v4 = dword_BA6BA0; LOBYTE(v38) = 3; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\IconMaterial.nif"); sub_8F66B0(v5, (int)&v36, v4); if ( v36 ) { v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v36 + 72))("Plane01"); v7 = sub_85C050(v6, 0); if ( v7 ) { sub_403700((_DWORD *)v1[83], v7); } else { v8 = operator new(0x20u); v9 = (int)v8; v32 = v8; LOBYTE(v38) = 4; if ( v8 ) { sub_85B2B0(v8); *(_DWORD *)v9 = &NiAlphaProperty::`vftable'; *(_WORD *)(v9 + 28) = 236; *(_BYTE *)(v9 + 30) = 0; } else { v9 = 0; } v32 = (void *)v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); *(_WORD *)(v9 + 28) |= 1u; v10 = (_DWORD *)v1[83]; LOBYTE(v38) = 5; sub_403700(v10, v9); LOBYTE(v38) = 3; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } *(float *)&v37 = 0.0 / 255.0; v35 = v37; v34 = v37; v33 = v37; v32 = v37; v11 = operator new(0xC4u); v37 = v11; LOBYTE(v38) = 6; if ( v11 ) { v12 = operator new(0x70u); v30 = v12; LOBYTE(v38) = 7; if ( v12 ) { v13 = sub_868440(v12, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v38) = 6; v14 = sub_868C00(v11, (int)v13); } else { LOBYTE(v38) = 6; v14 = sub_868C00(v11, 0); } v37 = (void *)v14; } else { *(float *)&v37 = 0.0; v14 = 0; } v15 = (volatile LONG *)v1[101]; LOBYTE(v38) = 3; if ( v15 != v14 ) { if ( v15 ) { if ( !InterlockedDecrement(v15 + 1) && v15 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v15)(v15, 1); v14 = (volatile LONG *)v37; } v1[101] = v14; if ( v14 ) InterlockedIncrement(v14 + 1); } sub_867880(*(_WORD **)(v1[101] + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v1[101] + 184), 0, 0.0, 0.0, 32.0, 32.0); v16 = v1[101]; v26 = v35; v27 = v34; v28 = v33; v29 = v32; sub_867FF0(*(_DWORD *)(v16 + 184), 0, &v26); v17 = operator new(0x20u); v18 = (int)v17; v30 = v17; LOBYTE(v38) = 8; if ( v17 ) { sub_85B2B0(v17); *(_DWORD *)v18 = &NiAlphaProperty::`vftable'; *(_WORD *)(v18 + 28) = 236; *(_BYTE *)(v18 + 30) = 0; } else { v18 = 0; } *(_WORD *)(v18 + 28) |= 1u; v19 = (_DWORD *)v1[101]; LOBYTE(v38) = 3; sub_403700(v19, v18); v20 = operator new(0x28u); v21 = v20; v30 = v20; LOBYTE(v38) = 9; if ( v20 ) { sub_85B2B0(v20); v21[14] = 0; *(_DWORD *)v21 = &NiVertexColorProperty::`vftable'; *((_DWORD *)v21 + 8) = 0; *((_DWORD *)v21 + 9) = 1; v22 = (int)v21; } else { v22 = 0; } *(_DWORD *)(v22 + 32) = 1; *(_DWORD *)(v22 + 36) = 0; v23 = (_DWORD *)v1[101]; LOBYTE(v38) = 3; sub_403700(v23, v22); sub_867680(*(_DWORD *)(v1[101] + 184)); sub_85C4D0((_DWORD *)v1[101]); sub_85BED0((_DWORD **)v1[101], 0.0, 1); sub_85A860(v1, v1[101], 0); sub_85C4D0(v1); sub_85BED0((_DWORD **)v1, 0.0, 1); LOBYTE(v38) = 2; if ( v36 ) { v24 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v24 ) (**v24)(v24, 1); } } } return v1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9BCE54: using guessed type void *ActionIconWin::`vftable'; // 9BCE74: using guessed type void *ActionIconWin::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004E86F0) -------------------------------------------------------- int __thiscall sub_4E86F0(_DWORD **this, char a2) { double v2; // st7 double v3; // st6 __int16 *v4; // ebx int v5; // edi _DWORD **v6; // esi char *v7; // eax float v8; // ST08_4 float v9; // ST04_4 float v10; // ST00_4 _DWORD **v12; // [esp+24h] [ebp-Ch] signed int v13; // [esp+28h] [ebp-8h] int v14; // [esp+2Ch] [ebp-4h] v12 = this; LOBYTE(v14) = 0; if ( !a2 ) LOBYTE(v14) = 1; v2 = 0.44999999; v3 = 1.0; v4 = (__int16 *)dword_ADB620; v5 = 0; v6 = this + 104; v13 = 18; do { if ( *v6 ) { v7 = (char *)(*v6)[98]; if ( v7 ) { if ( v4 ) { v2 = 0.44999999; v5 = sub_4EA9F0(*v4, *v7); v3 = 1.0; } if ( !v5 ) { if ( (_BYTE)v14 ) v2 = v3; v8 = v2; v9 = v2; v10 = v2; sub_5D4B50(*v6, v10, v9, v8); (*(void (__stdcall **)(int))(**v6 + 240))(v14); v2 = 0.44999999; v3 = 1.0; } } } ++v6; --v13; } while ( v13 ); return sub_4E8230((_DWORD **)v12[146], a2); } // ADB618: using guessed type int dword_ADB618; // ADB620: using guessed type int dword_ADB620; //----- (004E87D0) -------------------------------------------------------- volatile LONG *__cdecl sub_4E87D0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x198u); v9 = v5; v10 = 0; if ( v5 ) v6 = sub_4E8300(v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 608))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (004E8910) -------------------------------------------------------- volatile LONG *__cdecl sub_4E8910(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x250u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4E75C0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004E8A40) -------------------------------------------------------- int __cdecl sub_4E8A40(int a1, int a2, int a3) { void *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1C4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D6D00((void **)v3); *(_DWORD *)v4 = &PremiumActionIcon::`vftable'; *(_DWORD *)(v4 + 232) = &PremiumActionIcon::`vftable'; *(_DWORD *)(v4 + 448) = -1; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9BC978: using guessed type void *PremiumActionIcon::`vftable'; // 9BC994: using guessed type void *PremiumActionIcon::`vftable'; //----- (004E8B90) -------------------------------------------------------- int __cdecl sub_4E8B90(int a1) { void *v1; // eax int v2; // esi int v3; // eax void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v1 = operator new(0x260u); v2 = (int)v1; v6 = v1; v7 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &PremiumActionWin::`vftable'; *(_DWORD *)(v2 + 232) = &PremiumActionWin::`vftable'; v3 = v2 + 536; *(_DWORD *)(v2 + 520) = &PgWinDrop::`vftable'; *(_DWORD *)(v2 + 528) = 0; *(_DWORD *)v3 = &DropContents::`vftable'; *(_WORD *)(v3 + 60) = -1; *(_DWORD *)(v3 + 64) = 0; *(_DWORD *)(v2 + 524) = v2 + 536; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v2); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9BD324: using guessed type void *PremiumActionWin::`vftable'; // 9BD344: using guessed type void *PremiumActionWin::`vftable'; //----- (004E8D00) -------------------------------------------------------- char __thiscall sub_4E8D00(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax const char *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax const char *v30; // eax volatile LONG **v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG v34; // edx int v35; // ST34_4 int v36; // ST30_4 int v37; // eax volatile LONG *v38; // eax volatile LONG v39; // edx const CHAR *v40; // eax volatile LONG **v41; // eax _WORD *v42; // eax int *v43; // ecx volatile LONG *v44; // ecx void (__thiscall ***v45)(_DWORD, signed int); // esi int v46; // [esp+10h] [ebp-70h] int v47; // [esp+14h] [ebp-6Ch] volatile LONG *v48; // [esp+18h] [ebp-68h] volatile LONG *v49; // [esp+1Ch] [ebp-64h] volatile LONG **v50; // [esp+20h] [ebp-60h] int v51; // [esp+24h] [ebp-5Ch] int v52; // [esp+28h] [ebp-58h] int v53; // [esp+2Ch] [ebp-54h] char v54; // [esp+30h] [ebp-50h] int v55; // [esp+7Ch] [ebp-4h] v2 = (int)this; v51 = 0; v3 = dword_BA6BA0; v55 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ActionWin_Premium.nif"); sub_8F66B0(v4, (int)&v51, v3); if ( !v51 ) return 0; v5 = (volatile LONG *)sub_43D0D0(4u); v49 = v5; if ( !v5 || (v8 = sub_8FB140(v51, (int)"Frame", (int)&v53, (int)&v52, v5), !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"PremiumActionWin", 0)) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v51; v55 = -1; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v9 = v53; v10 = v52; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v51, (int)"Theme", (int)&v53, (int)&v52, v11); else v12 = sub_8FB140(v51, (int)"Theme", (int)&v53, (int)&v52, 0); sub_8F3EB0(v53 - v9, v52 - v10, (int)v12, v2, 0, 0); v13 = sub_8FB140(v51, (int)"IconSlot", (int)&v53, (int)&v52, v49); sub_8F3EB0(v53 - v9, v52 - v10, (int)v13, v2, 0, 0); if ( !sub_8F71E0(v51, (int)"WinTitle", &v53, &v52, &v47, &v46) ) goto LABEL_28; v14 = sub_421050(7); v15 = sub_8F4A20(v53 - v9, v52 - v10, v47, v46, v14, v2, 0, 0); v16 = *v15; v50 = (volatile LONG **)v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 1); (*((void (__stdcall **)(int *))*v50 + 117))(&dword_AA8D98); v48 = *v50 + 118; v17 = sub_40C190(-1867997723); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v48)(v50, v17); (*((void (__stdcall **)(_DWORD))*v50 + 60))(0); v18 = sub_8FB140(v51, (int)"Panel01", (int)&v53, (int)&v52, v49); v19 = sub_8F3EB0(v53 - v9, v52 - v10, (int)v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = sub_8FB140(v51, (int)"Panel02", (int)&v53, (int)&v52, v49); v21 = sub_8F3EB0(v53 - v9, v52 - v10, (int)v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v22 = (volatile LONG *)sub_43D0D0(0x12u); v50 = (volatile LONG **)v22; if ( v22 ) { v23 = sub_8FB140(v51, (int)"Tab00Off", (int)&v53, (int)&v52, v22); v48 = sub_8FE0F0(v53 - v9, v52 - v10, (int)v23, v2, 3, 0, 0); *((_DWORD *)v48 + 68) = dword_AD01E8; v24 = sub_40A910(659783809); sub_8F2EA0((void **)v48, v24); v25 = sub_8FB140(v51, (int)"Tab00On", (int)&v53, (int)&v52, (volatile LONG *)v50); v26 = sub_8F3EB0(v53 - v9, v52 - v10, (int)v25, v2, 0, 0); *(_DWORD *)(v2 + 512) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 512) + 256))(0); v27 = sub_8FB140(v51, (int)"Tab01Off", (int)&v53, (int)&v52, v49); sub_8FE0F0(v53 - v9, v52 - v10, (int)v27, v2, 2, 0, 0); v28 = sub_8FB140(v51, (int)"Tab01On", (int)&v53, (int)&v52, v49); v29 = sub_8F3EB0(v53 - v9, v52 - v10, (int)v28, v2, 0, 0); *(_DWORD *)(v2 + 516) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 240))(v29, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 516) + 256))(1); *(_DWORD *)(*(_DWORD *)(v2 + 516) + 272) = dword_AD01E8; v30 = sub_40A910(660568215); sub_8F2EA0(*(void ***)(v2 + 516), v30); v31 = sub_8FB140(v51, (int)"Num01", (int)&v53, (int)&v52, v49); sub_8F3EB0(v53 - v9, v52 - v10, (int)v31, v2, 0, 0); v50 = sub_8FB140(v51, (int)"ClsNor", (int)&v53, (int)&v52, v49); sub_8FB650(v50, v51, (int)"ClsClick"); sub_8FB650(v50, v51, (int)"ClsOver"); sub_90C8D0(v53 - v9, v52 - v10, (int)v50, v2); v48 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v51 + 72))("HelpLinkNor") ) { v50 = sub_8FB140(v51, (int)"HelpLinkNor", (int)&v53, (int)&v52, v48); sub_8FB650(v50, v51, (int)"HelpLinkClick"); sub_8FB650(v50, v51, (int)"HelpLinkOver"); sub_8FE0F0(v53 - v9, v52 - v10, (int)v50, v2, 7, 0, 0); } v32 = sub_8FB140(v51, (int)"Title01", (int)&v53, (int)&v52, v49); v33 = sub_8F3EB0(v53 - v9, v52 - v10, (int)v32, v2, 0, 0); v34 = *v33; v49 = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v34 + 240))(v33, 0); v35 = sub_421050(7); v36 = (*(int (**)(void))(*v49 + 148))(); v37 = (*(int (**)(void))(*v49 + 144))(); v38 = sub_8F4A20(v53 - v9, v52 - v10, v37, v36, v35, v2, 0, 0); v39 = *v38; v50 = (volatile LONG **)v38; (*(void (__thiscall **)(volatile LONG *, signed int))(v39 + 488))(v38, 5); (*((void (__stdcall **)(int *))*v50 + 117))(&dword_AA8D98); v48 = *v50 + 118; v40 = sub_40A910(2064830684); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v48)(v50, v40); (*((void (__stdcall **)(_DWORD))*v50 + 60))(0); v50 = 0; v49 = (volatile LONG *)(v2 + 344); do { v48 = (volatile LONG *)((char *)v50 + 1); sprintf(&v54, "IconSlot%03d", (char *)v50 + 1); v41 = sub_8FB140(v51, (int)&v54, (int)&v53, (int)&v52, 0); sub_8F3EB0(v53 - v9, v52 - v10, (int)v41, v2, 0, 0); v42 = (_WORD *)sub_4E8A40(v53 - v9 + 1, v52 - v10 + 1, v2); *v49 = (volatile LONG)v42; sub_5D5B70(v42, 0, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v49 + 516))(6); (*(void (__stdcall **)(signed int))(**(_DWORD **)v49 + 560))(5); v43 = (int *)v49; *(_DWORD *)(*v49 + 272) = dword_ACEC34; sub_5D3170(*v43, 1); v44 = v49; *(_DWORD *)(*v49 + 448) = v50; v50 = (volatile LONG **)v48; v49 = v44 + 1; } while ( (signed int)v48 < 42 ); v45 = (void (__thiscall ***)(_DWORD, signed int))v51; v55 = -1; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v45 ) (**v45)(v45, 1); result = 1; } else { LABEL_28: v55 = -1; sub_410C00(&v51); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (004E9590) -------------------------------------------------------- char __thiscall sub_4E9590(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax char result; // al volatile LONG **v9; // eax int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // eax volatile LONG v17; // edx const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // ST30_4 volatile LONG **v27; // eax volatile LONG *v28; // eax const char *v29; // eax volatile LONG **v30; // eax const char *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // eax int v36; // edx volatile LONG **v37; // eax volatile LONG *v38; // eax volatile LONG v39; // edx int v40; // ST54_4 int v41; // ST50_4 int v42; // eax volatile LONG *v43; // eax volatile LONG v44; // edx const CHAR *v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG v48; // edx int v49; // ST54_4 int v50; // ST50_4 int v51; // eax volatile LONG *v52; // eax volatile LONG v53; // edx const CHAR *v54; // eax char *v55; // eax signed int v56; // eax volatile LONG **v57; // eax int v58; // ecx int v59; // edx volatile LONG **v60; // eax int v61; // eax int v62; // edx int v63; // ecx int v64; // eax int v65; // edi volatile LONG **v66; // eax __int16 v67; // dx int v68; // eax volatile LONG *v69; // eax volatile LONG **v70; // ecx int v71; // edx volatile LONG *v72; // eax volatile LONG *v73; // ecx volatile LONG **v74; // edx volatile LONG *v75; // eax volatile LONG **v76; // ecx int v77; // edx int v78; // ecx unsigned __int8 *v79; // eax int v80; // eax int v81; // edi int v82; // eax void (__thiscall ***v83)(_DWORD, signed int); // esi int v84; // [esp+74h] [ebp-3BCh] int v85; // [esp+78h] [ebp-3B8h] int v86; // [esp+7Ch] [ebp-3B4h] int v87; // [esp+80h] [ebp-3B0h] char *v88; // [esp+84h] [ebp-3ACh] int v89; // [esp+88h] [ebp-3A8h] char *v90; // [esp+8Ch] [ebp-3A4h] unsigned int v91; // [esp+90h] [ebp-3A0h] int v92; // [esp+94h] [ebp-39Ch] char *v93; // [esp+98h] [ebp-398h] volatile LONG *v94; // [esp+9Ch] [ebp-394h] volatile LONG **v95; // [esp+A0h] [ebp-390h] volatile LONG *v96; // [esp+A4h] [ebp-38Ch] volatile LONG *v97; // [esp+A8h] [ebp-388h] int v98; // [esp+ACh] [ebp-384h] int v99; // [esp+B0h] [ebp-380h] int v100; // [esp+B4h] [ebp-37Ch] char v101; // [esp+B8h] [ebp-378h] char v102; // [esp+BCh] [ebp-374h] char v103; // [esp+1D8h] [ebp-258h] char v104; // [esp+1DCh] [ebp-254h] char v105; // [esp+2F8h] [ebp-138h] char v106; // [esp+3FCh] [ebp-34h] int v107; // [esp+42Ch] [ebp-4h] v2 = (int)this; v87 = a2; v98 = 0; v3 = dword_BA6BA0; v107 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ActionWin.nif"); sub_8F66B0(v4, (int)&v98, v3); if ( !v98 ) return 0; v5 = (volatile LONG *)sub_43D0D0(4u); v96 = v5; if ( !v5 || (v9 = sub_8FB140(v98, (int)"Frame", (int)&v100, (int)&v99, v5), !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ActionWin", 0)) ) { LABEL_5: v6 = (void (__thiscall ***)(_DWORD, signed int))v98; v107 = -1; if ( v98 ) { v7 = InterlockedDecrement((volatile LONG *)(v98 + 4)); LABEL_7: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v10 = v99; v11 = v100; v86 = v99; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v98, (int)"Theme", (int)&v100, (int)&v99, v12); else v13 = sub_8FB140(v98, (int)"Theme", (int)&v100, (int)&v99, 0); sub_8F3EB0(v100 - v11, v99 - v10, (int)v13, v2, 0, 0); v14 = sub_8FB140(v98, (int)"IconSlot", (int)&v100, (int)&v99, v96); sub_8F3EB0(v100 - v11, v99 - v10, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v98, (int)"WinTitle", &v100, &v99, &v85, &v84) ) goto LABEL_63; v15 = sub_421050(7); v16 = sub_8F4A20(v100 - v11, v99 - v10, v85, v84, v15, v2, 0, 0); v17 = *v16; v97 = v16; (*(void (__thiscall **)(volatile LONG *, signed int))(v17 + 488))(v16, 1); (*(void (__stdcall **)(int *))(*v97 + 468))(&dword_AA8D98); v94 = (volatile LONG *)(*v97 + 472); v18 = sub_40C190(-1867997723); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v94)(v97, v18); (*(void (__stdcall **)(_DWORD))(*v97 + 240))(0); v19 = sub_8FB140(v98, (int)"Panel01", (int)&v100, (int)&v99, v96); v20 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(v98, (int)"Panel02", (int)&v100, (int)&v99, v96); v22 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v21, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = (volatile LONG *)sub_43D0D0(0x12u); v94 = v23; if ( v23 ) { v24 = sub_8FB140(v98, (int)"Tab00Off", (int)&v100, (int)&v99, v23); v25 = sub_8FE0F0(v100 - v11, v99 - v10, (int)v24, v2, 0, 0, 0); v26 = v94; *((_DWORD *)v25 + 68) = dword_AD01E8; v27 = sub_8FB140(v98, (int)"Tab00On", (int)&v100, (int)&v99, v26); v28 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v27, v2, 0, 0); *(_DWORD *)(v2 + 576) = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 240))(v28, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 576) + 256))(1); *(_DWORD *)(*(_DWORD *)(v2 + 576) + 272) = dword_AD01E8; v29 = sub_40A910(659783809); sub_8F2EA0(*(void ***)(v2 + 576), v29); v30 = sub_8FB140(v98, (int)"Tab01Off", (int)&v100, (int)&v99, v96); v94 = sub_8FE0F0(v100 - v11, v99 - v10, (int)v30, v2, 6, 0, 0); *((_DWORD *)v94 + 68) = dword_AD01E8; v31 = sub_40A910(660568215); sub_8F2EA0((void **)v94, v31); v32 = sub_8FB140(v98, (int)"Tab01On", (int)&v100, (int)&v99, v96); v33 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v32, v2, 0, 0); *(_DWORD *)(v2 + 580) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 580) + 256))(0); v34 = sub_8FB140(v98, (int)"Num01", (int)&v100, (int)&v99, v96); sub_8F3EB0(v100 - v11, v99 - v10, (int)v34, v2, 0, 0); v95 = sub_8FB140(v98, (int)"ClsNor", (int)&v100, (int)&v99, v96); sub_8FB650(v95, v98, (int)"ClsClick"); sub_8FB650(v95, v98, (int)"ClsOver"); sub_8FE0F0(v100 - v11, v99 - v10, (int)v95, v2, 1, 0, 0); v35 = (volatile LONG *)sub_43D0D0(4u); v36 = *(_DWORD *)v98; v94 = v35; if ( (*(int (__stdcall **)(const char *))(v36 + 72))("HelpLinkNor") ) { v95 = sub_8FB140(v98, (int)"HelpLinkNor", (int)&v100, (int)&v99, v94); sub_8FB650(v95, v98, (int)"HelpLinkClick"); sub_8FB650(v95, v98, (int)"HelpLinkOver"); sub_8FE0F0(v100 - v11, v99 - v10, (int)v95, v2, 7, 0, 0); } v37 = sub_8FB140(v98, (int)"Title01", (int)&v100, (int)&v99, v96); v38 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v37, v2, 0, 0); v39 = *v38; v95 = (volatile LONG **)v38; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v39 + 240))(v38, 0); v40 = sub_421050(7); v41 = (*((int (**)(void))*v95 + 37))(); v42 = (*((int (**)(void))*v95 + 36))(); v43 = sub_8F4A20(v100 - v11, v99 - v10, v42, v41, v40, v2, 0, 0); v44 = *v43; v97 = v43; (*(void (__thiscall **)(volatile LONG *, signed int))(v44 + 488))(v43, 5); (*(void (__stdcall **)(int *))(*v97 + 468))(&dword_AA8D98); v94 = (volatile LONG *)(*v97 + 472); v45 = sub_40C190(-650564547); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v94)(v97, v45); (*(void (__stdcall **)(_DWORD))(*v97 + 240))(0); v46 = sub_8FB140(v98, (int)"Title02", (int)&v100, (int)&v99, v96); v47 = sub_8F3EB0(v100 - v11, v99 - v10, (int)v46, v2, 0, 0); v48 = *v47; v95 = (volatile LONG **)v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v48 + 240))(v47, 0); v49 = sub_421050(7); v50 = (*((int (**)(void))*v95 + 37))(); v51 = (*((int (**)(void))*v95 + 36))(); v52 = sub_8F4A20(v100 - v11, v99 - v10, v51, v50, v49, v2, 0, 0); v53 = *v52; v97 = v52; (*(void (__thiscall **)(volatile LONG *, signed int))(v53 + 488))(v52, 5); (*(void (__stdcall **)(int *))(*v97 + 468))(&dword_AA8D98); v94 = (volatile LONG *)(*v97 + 472); v54 = sub_40C190(-1900812560); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v94)(v97, v54); (*(void (__stdcall **)(_DWORD))(*v97 + 240))(0); v55 = sub_4083B0(); sprintf(&v105, "%s\\Icon\\Action000.dds", v55); v94 = sub_486130((int)&v105); v56 = 0; v93 = &v104; do { v91 = v56 + 1; sprintf(&v106, "IconSlot%03d", v56 + 1); v57 = sub_8FB140(v98, (int)&v106, (int)&v100, (int)&v99, v96); sub_8F3EB0(v100 - v11, v99 - v10, (int)v57, v2, 0, 0); v58 = (int)v93; v59 = v100; *(_DWORD *)v93 = v99; v56 = v91; *(_DWORD *)(v58 - 4) = v59; v93 = (char *)(v58 + 16); } while ( v56 < 18 ); v92 = 0; v93 = &v102; do { sprintf(&v106, "IconSlot%03d", v92 + 19); v60 = sub_8FB140(v98, (int)&v106, (int)&v100, (int)&v99, v96); sub_8F3EB0(v100 - v11, v99 - v10, (int)v60, v2, 0, 0); v61 = (int)v93; v62 = v100; *(_DWORD *)v93 = v99; v63 = v92 + 1; *(_DWORD *)(v61 - 4) = v62; v92 = v63; v93 = (char *)(v61 + 16); } while ( v63 < 18 ); v64 = *(_DWORD *)(dword_ACB6C4 + 56); if ( v64 ) v93 = *(char **)(v64 + 40); else v93 = 0; v92 = 0; v97 = 0; v91 = 0; if ( (unsigned int)v93 > 0 ) { v88 = &v101; v90 = &v103; v96 = (volatile LONG *)(v2 + 416); v65 = v2 + 344; do { v66 = (volatile LONG **)sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v91); v95 = v66; if ( !v66 ) break; v67 = *(_WORD *)((char *)v66 + 65); if ( v67 == -1 ) { v68 = *(int *)((char *)v66 + 101); if ( v68 ) { if ( v68 == 1 ) { v72 = sub_4E87D0(*(_DWORD *)v88 - v11 + 1, *((_DWORD *)v88 + 1) - v86 + 1, (int)v97, v2, v87); v73 = v96; v74 = v95; *v96 = (volatile LONG)v72; *((_DWORD *)v72 + 97) = 1; (*(void (__stdcall **)(volatile LONG *, _DWORD, signed int, signed int))(**(_DWORD **)v73 + 584))( v94, *(unsigned __int16 *)((char *)v74 + 99), 32, 32); (*(void (__stdcall **)(signed int))(**(_DWORD **)v96 + 516))(4); (*(void (__stdcall **)(signed int))(**(_DWORD **)v96 + 560))(5); v75 = v96; *(_DWORD *)(*v96 + 304) = 1; *(_DWORD *)(*v75 + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)v75 + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v96 + 256))(1); v76 = v95; v77 = (int)v97; *(_DWORD *)(*v96 + 392) = v95; if ( !sub_6329D0((char *)&dword_AD46F0, *(unsigned __int8 *)v76, v77) ) goto LABEL_5; v97 = (volatile LONG *)((char *)v97 + 1); ++v96; v88 += 16; } } else { switch ( sub_6807E0(byte_AD9238) ) { case 0x1A: case 0x1B: if ( !strcmp((const char *)v95 + 1, "SPSton") ) goto LABEL_47; break; default: break; } v69 = sub_4E87D0(*(_DWORD *)v90 - v11 + 1, *((_DWORD *)v90 + 1) - v86 + 1, v92, v2, v87); *(_DWORD *)v65 = v69; *((_DWORD *)v69 + 97) = 0; (*(void (__stdcall **)(volatile LONG *, _DWORD, signed int, signed int))(**(_DWORD **)v65 + 584))( v94, *(unsigned __int16 *)((char *)v95 + 99), 32, 32); (*(void (__stdcall **)(signed int))(**(_DWORD **)v65 + 516))(2); (*(void (__stdcall **)(signed int))(**(_DWORD **)v65 + 560))(3); *(_DWORD *)(*(_DWORD *)v65 + 304) = 1; *(_DWORD *)(*(_DWORD *)v65 + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)v65 + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v65 + 256))(1); v70 = v95; v71 = v92; *(_DWORD *)(*(_DWORD *)v65 + 392) = v95; if ( !sub_6329D0((char *)&dword_AD46F0, *(unsigned __int8 *)v70, v71) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v98; v107 = -1; if ( !v98 ) return 0; v7 = InterlockedDecrement((volatile LONG *)(v98 + 4)); goto LABEL_7; } ++v92; v65 += 4; v90 += 16; } } else { v78 = 0; if ( (signed int)v97 > 0 ) { v89 = v2 + 416; do { if ( !*(_DWORD *)v89 ) break; v79 = *(unsigned __int8 **)(*(_DWORD *)v89 + 392); if ( !v79 ) break; if ( v67 == *v79 ) { *(_DWORD *)(*(_DWORD *)(v2 + 4 * v78 + 416) + 396) = v95; break; } v89 += 4; ++v78; } while ( v78 < (signed int)v97 ); } } LABEL_47: ++v91; } while ( v91 < (unsigned int)v93 ); } v80 = sub_4E8B90(v87); v81 = v80; *(_DWORD *)(v2 + 584) = v80; if ( v80 ) { v82 = (*(int (__thiscall **)(int))(*(_DWORD *)v80 + 4))(v80); if ( v82 ) { while ( (_UNKNOWN *)v82 != &unk_BA6A8C ) { v82 = *(_DWORD *)(v82 + 4); if ( !v82 ) goto LABEL_56; } (*(void (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v2 + 116))(v2, v81, 0); sub_85C4D0((_DWORD *)v2); sub_85BED0((_DWORD **)v2, 0.0, 1); } } LABEL_56: (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.5); v83 = (void (__thiscall ***)(_DWORD, signed int))v98; v107 = -1; if ( v98 && !InterlockedDecrement((volatile LONG *)(v98 + 4)) && v83 ) (**v83)(v83, 1); result = 1; } else { LABEL_63: v107 = -1; sub_410C00(&v98); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACB6C4: using guessed type int dword_ACB6C4; // AD01E8: using guessed type int dword_AD01E8; // AD46F0: using guessed type int dword_AD46F0; //----- (004EA450) -------------------------------------------------------- void __thiscall sub_4EA450(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // eax int v4; // edi int v5; // esi void *v6; // eax int *v7; // eax float **v8; // [esp+Ch] [ebp-130h] int *v9; // [esp+10h] [ebp-12Ch] int v10; // [esp+20h] [ebp-11Ch] unsigned int v11; // [esp+24h] [ebp-118h] char v12; // [esp+2Ch] [ebp-110h] int v13; // [esp+138h] [ebp-4h] v2 = this; v8 = (float **)this; if ( !sub_65B9D0(dword_AD8EBC, 500000) && !dword_AD8EBC[2496] ) { v3 = v2[a2 + 86]; if ( v3 ) { v4 = *(_DWORD *)(v3 + 392); if ( v4 ) { v5 = *((_DWORD *)dword_AD8EBC + 1026); v11 = 15; v10 = 0; LOBYTE(v9) = 0; v13 = 0; if ( !v5 ) goto LABEL_15; if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5) ) { v6 = (void *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5); sub_40AC00(&v9, v6); } if ( !strcmp((const char *)(v4 + 1), "attack") ) { sub_4DE8F0(v8[74], 0, 0.0); sub_4E3330((_DWORD *)v8[74] + 9, 0); } v7 = v9; if ( v11 < 0x10 ) LABEL_15: v7 = (int *)&v9; sprintf(&v12, "/%s %s", v4 + 1, v7); sub_496030((int)v8[74], &v12, 0, 0); sub_636A10(&v9); } } } } //----- (004EA690) -------------------------------------------------------- void __thiscall sub_4EA690(int this, int a2, int a3) { switch ( a2 ) { case 1: sub_4A52A0(*(_DWORD **)(this + 296)); break; case 2: sub_4E7690((_DWORD *)this, a3); break; case 3: sub_4EA450((_DWORD *)this, a3); break; case 4: sub_4E76F0((_DWORD *)this, a3); break; case 5: sub_4E7FB0((_DWORD *)this, a3); break; case 6: sub_4E8110((void **)this); break; case 7: sub_4E74D0(); break; default: return; } } //----- (004EA720) -------------------------------------------------------- char __thiscall sub_4EA720(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // edi int v5; // eax int v6; // eax _DWORD *v7; // ecx v3 = a2; v4 = this; if ( a2[2] == 21 ) { if ( !a2[4] ) { v5 = a2[5]; if ( v5 ) sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } v6 = v3[3]; if ( v6 != a3 ) { LOWORD(a2) = a3 & 0x3FF | 0x3C00; v7 = (_DWORD *)v4[74]; LOWORD(a3) = v6 & 0x3FF | 0x3C00; sub_4B7B90(v7, (__int16 *)&a3, (__int16 *)&a2); } } return 0; } //----- (004EA790) -------------------------------------------------------- char __thiscall sub_4EA790(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx char result; // al _DWORD *v6; // esi int v7; // edi _DWORD *v8; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 ) return 0; v7 = v6[2]; v8 = (_DWORD *)sub_402BF0(this); if ( v7 && v7 != 21 ) result = 0; else result = sub_4EA720(v8, v6, v4[112]); return result; } //----- (004EA7F0) -------------------------------------------------------- char __thiscall sub_4EA7F0(_DWORD *this, int a2) { return sub_69BE40((float *)byte_ADB468, this[130], this[131], this[132], this[133], this[134], this[135], a2, 0); } //----- (004EA850) -------------------------------------------------------- int sub_4EA850() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD934 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD934: using guessed type int dword_ACD934; //----- (004EA870) -------------------------------------------------------- void *__thiscall sub_4EA870(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PremiumActionIcon::`vftable'; *((_DWORD *)this + 58) = &PremiumActionIcon::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BC978: using guessed type void *PremiumActionIcon::`vftable'; // 9BC994: using guessed type void *PremiumActionIcon::`vftable'; //----- (004EA8B0) -------------------------------------------------------- void *__thiscall sub_4EA8B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ActionInvTabButWin::`vftable'; *((_DWORD *)this + 58) = &ActionInvTabButWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BCC00: using guessed type void *ActionInvTabButWin::`vftable'; // 9BCC1C: using guessed type void *ActionInvTabButWin::`vftable'; //----- (004EA8F0) -------------------------------------------------------- char __thiscall sub_4EA8F0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[75]); return (char)v2; } //----- (004EA920) -------------------------------------------------------- void *__thiscall sub_4EA920(void *this, char a2) { void *v2; // esi v2 = this; sub_4E7500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004EA950) -------------------------------------------------------- void *__thiscall sub_4EA950(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ActionWin::`vftable'; *((_DWORD *)this + 58) = &ActionWin::`vftable'; *((_DWORD *)this + 126) = &DropContents::`vftable'; *((_DWORD *)this + 122) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9BD0DC: using guessed type void *ActionWin::`vftable'; // 9BD0FC: using guessed type void *ActionWin::`vftable'; //----- (004EA9A0) -------------------------------------------------------- void *__thiscall sub_4EA9A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PremiumActionWin::`vftable'; *((_DWORD *)this + 58) = &PremiumActionWin::`vftable'; *((_DWORD *)this + 134) = &DropContents::`vftable'; *((_DWORD *)this + 130) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9BD324: using guessed type void *PremiumActionWin::`vftable'; // 9BD344: using guessed type void *PremiumActionWin::`vftable'; //----- (004EA9F0) -------------------------------------------------------- int __cdecl sub_4EA9F0(__int16 a1, char a2) { unsigned int v2; // esi int result; // eax v2 = 0; if ( !sub_4EA850() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD934 + 4), v2); if ( *(_WORD *)result == a1 && *(_BYTE *)(result + 2) == a2 ) break; if ( ++v2 >= sub_4EA850() ) return 0; } return result; } // ACD934: using guessed type int dword_ACD934; //----- (004EAA40) -------------------------------------------------------- LONG __thiscall sub_4EAA40(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi LONG v6; // [esp+10h] [ebp-10h] int v7; // [esp+1Ch] [ebp-4h] v2 = this; v3 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v7 = 0; sub_6BB9F0(v2 + 39, &v6, &a2); result = v6; if ( v6 ) { v5 = (int (__thiscall ***)(_DWORD, signed int))v6; result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } v7 = -1; if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } return result; } //----- (004EAAF0) -------------------------------------------------------- void __thiscall sub_4EAAF0(float *this, float a2) { this[83] = a2; this[84] = 1.0; sub_907230((int)this, 1.0); } //----- (004EAB20) -------------------------------------------------------- void __thiscall sub_4EAB20(float *this, float a2, char a3) { float *v3; // esi double v4; // st7 float v5; // ST0C_4 float v6; // ST0C_4 float v7; // ST0C_4 float v8; // ST0C_4 v3 = this; if ( this[83] < 1000000.0 ) { v4 = 0.0; if ( this[83] <= 0.0 ) { if ( this[84] > 0.0 ) { v5 = this[84] - (flt_ACCFD0 + flt_ACCFD0); this[84] = v5; if ( v5 <= 0.0 ) this[84] = 0.0; if ( this[84] > 0.0 ) { v6 = this[84] * flt_BA45B8; v7 = sin(v6); v4 = v7; } v8 = v4; sub_907230((int)this, v8); } } else { this[83] = this[83] - flt_ACCFD0; } } sub_906DB0(v3, a2, a3); } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (004EAC00) -------------------------------------------------------- void __thiscall sub_4EAC00(float *this, float *a2) { int v2; // esi float v3; // ebx int v4; // eax int v5; // edx void (__thiscall *v6)(int, float *); // edx float v7; // [esp+18h] [ebp-1Ch] float v8; // [esp+1Ch] [ebp-18h] float v9; // [esp+20h] [ebp-14h] float v10; // [esp+28h] [ebp-Ch] float v11; // [esp+2Ch] [ebp-8h] float v12; // [esp+30h] [ebp-4h] v2 = (int)this; if ( a2 ) { v3 = *this; this[83] = a2[83]; this[84] = a2[84]; v4 = (*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 152))(a2); (*(void (__thiscall **)(int, int))(LODWORD(v3) + 148))(v2, v4); sub_9071D0(a2, &v10); v5 = *(_DWORD *)v2; v7 = v10; v6 = *(void (__thiscall **)(int, float *))(v5 + 176); v8 = v11; v9 = v12; v6(v2, &v7); sub_907230(v2, *(float *)(v2 + 336)); } } //----- (004EAC90) -------------------------------------------------------- void __thiscall sub_4EAC90(int this, float a2) { if ( 1000000.0 != *(float *)(this + 368) && !(*(_BYTE *)(this + 28) & 1) ) { if ( sub_8D0630((float *)(this + 348), a2) ) byte_ACEB20 = 0; } } // ACEB20: using guessed type char byte_ACEB20; //----- (004EACD0) -------------------------------------------------------- int __thiscall sub_4EACD0(char *this, int a2) { int v2; // esi signed int v3; // edi int result; // eax v2 = (int)(this + 376); v3 = 3; do { if ( *(_DWORD *)v2 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)v2 + 144))(a2); v2 += 4; --v3; } while ( v3 ); return result; } //----- (004EAD10) -------------------------------------------------------- float *__thiscall sub_4EAD10(float *this, volatile LONG *a2) { float *v2; // esi int v3; // edi v2 = this; sub_90EEA0(this, a2); *(_DWORD *)v2 = &PgFadeTextGeometry::`vftable'; v2[85] = 0.0; v2[83] = 1000000.0; v2[84] = 1.0; v3 = *((_DWORD *)v2 + 85); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[85] = 0.0; } return v2; } // 9BD594: using guessed type void *PgFadeTextGeometry::`vftable'; //----- (004EAE40) -------------------------------------------------------- _DWORD *__thiscall sub_4EAE40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &AnnounceWin::`vftable'; v1[58] = &AnnounceWin::`vftable'; sub_8D0610((_BYTE *)v1 + 348); `eh vector constructor iterator'( v1 + 94, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_WORD *)v1 + 172) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BD64C: using guessed type void *AnnounceWin::`vftable'; // 9BD66C: using guessed type void *AnnounceWin::`vftable'; //----- (004EAED0) -------------------------------------------------------- char __thiscall sub_4EAED0(volatile LONG **this, int a2) { int *v2; // edi int v4; // eax volatile LONG *v5; // ebx int *v6; // esi void *v7; // eax volatile LONG *v8; // eax int v9; // ebx int v10; // eax int v11; // ebx _BYTE *v12; // eax int v13; // eax int v14; // edx float v15; // ST38_4 int v16; // edx int v17; // eax void (__thiscall *v18)(int *, int, _DWORD); // edx unsigned __int8 v19; // [esp+14h] [ebp-74h] unsigned __int8 v20; // [esp+18h] [ebp-70h] unsigned __int8 v21; // [esp+1Ch] [ebp-6Ch] float v22[4]; // [esp+40h] [ebp-48h] struct tagSIZE psizl; // [esp+50h] [ebp-38h] volatile LONG *v24; // [esp+58h] [ebp-30h] int v25; // [esp+5Ch] [ebp-2Ch] int v26; // [esp+60h] [ebp-28h] void *v27; // [esp+64h] [ebp-24h] struct tagRECT rc; // [esp+68h] [ebp-20h] int v29; // [esp+84h] [ebp-4h] v2 = (int *)this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"AnnounceWin", 0) ) return 0; v4 = sub_421050(3); v5 = (volatile LONG *)v4; v24 = (volatile LONG *)v4; if ( !v4 ) return 0; SelectObject(*(HDC *)(v4 + 192), *(HGDIOBJ *)(v4 + 184)); sub_4593C0(v5, "W", 1, &psizl); v26 = -2; SetRect(&rc, 0, 0, 500, psizl.cy); v6 = v2 + 94; v25 = 3; while ( 1 ) { v7 = operator new(0x158u); v27 = v7; v29 = 0; if ( v7 ) { v8 = (volatile LONG *)sub_4EAD10((float *)v7, v5); v27 = (void *)v8; } else { v27 = 0; v8 = 0; } v9 = *v6; v29 = -1; if ( (volatile LONG *)v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8 = (volatile LONG *)v27; } *v6 = (int)v8; if ( v8 ) InterlockedIncrement(v8 + 1); } sub_9074F0(*v6, 1); (*(void (__stdcall **)(struct tagRECT *))(*(_DWORD *)*v6 + 136))(&rc); v10 = *v6; *(_DWORD *)(v10 + 308) = 1; if ( *(_DWORD *)(v10 + 280) != 18 ) { *(_DWORD *)(v10 + 280) = 18; *(_BYTE *)(v10 + 300) = 1; } v11 = *v6; if ( dword_ACD914 ) { v12 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( !v12 ) { sub_419EE0(v22, 0xFFu, 0, 0xFFu, 0xFFu); goto LABEL_25; } v21 = v12[6]; v20 = v12[5]; v19 = v12[4]; } else { v21 = -1; v20 = dword_ACD914; v19 = -1; } sub_419EE0(v22, v19, v20, v21, 0xFFu); LABEL_25: (*(void (__thiscall **)(int, float *))(*(_DWORD *)v11 + 176))(v11, v22); v13 = *v6; v14 = *(_DWORD *)(*v6 + 92); v15 = (double)v26; v16 = *(_DWORD *)(*v6 + 96); *(_DWORD *)(v13 + 88) = *(_DWORD *)(*v6 + 88); *(float *)(v13 + 92) = v15; *(_DWORD *)(v13 + 96) = v16; v17 = *v6; v18 = *(void (__thiscall **)(int *, int, _DWORD))(*v2 + 116); v26 += psizl.cy + 2; v18(v2, v17, 0); ++v6; if ( !--v25 ) break; v5 = v24; } sub_85C4D0(v2); (*(void (__thiscall **)(int *, signed int))(*v2 + 152))(v2, 500); (*(void (__thiscall **)(int *, signed int))(*v2 + 156))(v2, 45); (*(void (__thiscall **)(int *, int, int, _DWORD, _DWORD))(*v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 240))(v2, 0); return 1; } // ACD914: using guessed type int dword_ACD914; //----- (004EB180) -------------------------------------------------------- void __userpurge sub_4EB180(int a1@, int a2@, int a3@, int a4, int a5, char a6, float a7) { int v7; // esi float **v8; // edi signed int v9; // ebx signed int v10; // ebx int v11; // ecx int v12; // ecx int *v13; // edi unsigned __int8 *v14; // eax int v15; // edx int *v16; // eax int *v17; // ecx int v18; // ecx int v19; // [esp+10h] [ebp-18h] int v20; // [esp+14h] [ebp-14h] int v21; // [esp+18h] [ebp-10h] float v22; // [esp+1Ch] [ebp-Ch] v20 = a3; v19 = a2; v7 = a1; if ( 0.0 == a7 ) a7 = 15.0; v8 = (float **)(a1 + 376); if ( a6 ) { v10 = 3; do { (*(void (__stdcall **)(void *))(*(_DWORD *)*v8 + 148))(&unk_9BD586); v11 = (int)*v8; *(float *)(v11 + 332) = -1.0; *(float *)(v11 + 336) = 1.0; sub_907230(v11, 1.0); ++v8; --v10; } while ( v10 ); } else { v9 = 2; do { sub_4EAC00(*v8, v8[1]); ++v8; --v9; } while ( v9 ); } if ( *(_BYTE *)(v7 + 344) ) { (*(void (__stdcall **)(int, int, int, int, _DWORD))(**(_DWORD **)(v7 + 384) + 176))(a5, v19, v20, v21, LODWORD(v22)); (*(void (__stdcall **)(int))(**(_DWORD **)(v7 + 384) + 148))(a4); v12 = *(_DWORD *)(v7 + 384); *(float *)(v12 + 332) = a7; *(float *)(v12 + 336) = 1.0; sub_907230(v12, 1.0); sub_8D06A0((float *)(v7 + 348), flt_ACCFCC); *(float *)(v7 + 368) = 30.0; byte_ACEB20 = 1; *(_WORD *)(v7 + 344) = 0; return; } if ( !*(_BYTE *)(v7 + 345) ) { v17 = *(int **)(v7 + 384); v15 = *v17; v16 = (int *)a5; goto LABEL_19; } v13 = *(int **)(v7 + 384); if ( !dword_ACD914 ) { sub_419EE0((float *)&v21, 0xFFu, dword_ACD914, 0xFFu, 0xFFu); LABEL_17: v15 = *v13; v16 = &v21; v17 = v13; goto LABEL_19; } v14 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 7u); if ( v14 ) { sub_419EE0((float *)&v21, v14[4], v14[5], v14[6], 0xFFu); goto LABEL_17; } sub_419EE0((float *)&v21, 0xFFu, 0, 0xFFu, 0xFFu); v15 = *v13; v16 = &v21; v17 = v13; LABEL_19: (*(void (__thiscall **)(int *, int *, int, int, int, _DWORD))(v15 + 176))(v17, v16, v19, v20, v21, LODWORD(v22)); (*(void (__stdcall **)(int))(**(_DWORD **)(v7 + 384) + 148))(a4); v18 = *(_DWORD *)(v7 + 384); *(float *)(v18 + 332) = a7; *(float *)(v18 + 336) = 1.0; sub_907230(v18, 1.0); *(_WORD *)(v7 + 344) = 0; } // 4EB180: could not find valid save-restore pair for edi // 4EB180: could not find valid save-restore pair for esi // ACCFCC: using guessed type float flt_ACCFCC; // ACD914: using guessed type int dword_ACD914; // ACEB20: using guessed type char byte_ACEB20; //----- (004EB370) -------------------------------------------------------- volatile LONG *__cdecl sub_4EB370(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x184u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4EAE40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( sub_4EAED0((volatile LONG **)v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } result = 0; } return result; } //----- (004EB4A0) -------------------------------------------------------- char *sub_4EB4A0() { return dword_BA455C; } //----- (004EB4B0) -------------------------------------------------------- _BYTE *__thiscall sub_4EB4B0(_DWORD *this) { _BYTE *result; // eax result = (_BYTE *)this[72]; if ( !result || !*result ) result = 0; return result; } //----- (004EB4D0) -------------------------------------------------------- int __thiscall sub_4EB4D0(_DWORD *this) { return this[79]; } //----- (004EB4E0) -------------------------------------------------------- int __thiscall sub_4EB4E0(_DWORD *this) { return this[80]; } //----- (004EB4F0) -------------------------------------------------------- int __thiscall sub_4EB4F0(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 136))(); } //----- (004EB500) -------------------------------------------------------- void __thiscall sub_4EB500(void *this, float *a2) { int v2; // edi float v3; // [esp+Ch] [ebp-Ch] float v4; // [esp+10h] [ebp-8h] float v5; // [esp+14h] [ebp-4h] v3 = *a2; v4 = a2[1]; v2 = (int)this; v5 = a2[2]; sub_907140((int)this, &v3); sub_907230(v2, a2[3]); } //----- (004EB540) -------------------------------------------------------- char __thiscall sub_4EB540(_BYTE *this, char a2) { char result; // al result = a2; this[324] = a2; return result; } //----- (004EB550) -------------------------------------------------------- char __thiscall sub_4EB550(_BYTE *this) { return this[324]; } //----- (004EB560) -------------------------------------------------------- int __thiscall sub_4EB560(_DWORD **this, volatile LONG *a2) { _DWORD **v2; // ebx int result; // eax volatile LONG *v4; // esi v2 = this; result = sub_907290(this, a2); v4 = v2[78]; if ( v4 != a2 ) { if ( v4 ) { result = InterlockedDecrement(v4 + 1); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); } } v2[78] = a2; if ( a2 ) result = InterlockedIncrement(a2 + 1); } return result; } //----- (004EB5C0) -------------------------------------------------------- void *__thiscall sub_4EB5C0(void *this, char a2) { void *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 85); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_90F000(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004EB650) -------------------------------------------------------- _DWORD *__thiscall sub_4EB650(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &AnnounceWin::`vftable'; *((_DWORD *)this + 58) = &AnnounceWin::`vftable'; `eh vector destructor iterator'((char *)this + 376, 4u, 3, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BD64C: using guessed type void *AnnounceWin::`vftable'; // 9BD66C: using guessed type void *AnnounceWin::`vftable'; //----- (004EB6E0) -------------------------------------------------------- void __cdecl __noreturn sub_4EB6E0(int a1) { _CxxThrowException(&a1, &_TI1_AVCAtlException_ATL__); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A840D0: using guessed type int _TI1_AVCAtlException_ATL__; //----- (004EB700) -------------------------------------------------------- __time64_t *__thiscall sub_4EB700(__time64_t *this, signed int a2, int a3, int a4, unsigned int a5, unsigned int a6, unsigned int a7, int a8) { __time64_t *v8; // esi __time64_t v9; // rax struct tm Tm; // [esp+4h] [ebp-28h] v8 = this; if ( a2 < 1900 ) sub_4EB6E0(-2147467259); if ( (unsigned int)(a3 - 1) > 0xB ) sub_4EB6E0(-2147467259); if ( (unsigned int)(a4 - 1) > 0x1E ) sub_4EB6E0(-2147467259); if ( a5 > 0x17 ) sub_4EB6E0(-2147467259); if ( a6 > 0x3B ) sub_4EB6E0(-2147467259); if ( a7 > 0x3B ) sub_4EB6E0(-2147467259); Tm.tm_sec = a7; Tm.tm_year = a2 - 1900; Tm.tm_min = a6; Tm.tm_hour = a5; Tm.tm_mday = a4; Tm.tm_mon = a3 - 1; Tm.tm_isdst = a8; v9 = _mktime64(&Tm); *v8 = v9; if ( (HIDWORD(v9) & (unsigned int)v9) == -1 ) sub_4EB6E0(-2147024809); return v8; } //----- (004EB7F0) -------------------------------------------------------- void __thiscall sub_4EB7F0(void *this) { *(_DWORD *)this = &AttendCheckBut::`vftable'; *((_DWORD *)this + 1) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 6) = 0; *((_DWORD *)this + 7) = 0; } // 9BDC04: using guessed type void *AttendCheckBut::`vftable'; //----- (004EB810) -------------------------------------------------------- int __thiscall sub_4EB810(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[3] + 468))(a2); (*(void (__stdcall **)(int))(*v2[4] + 468))(a2); return (*(int (__stdcall **)(int))(*v2[5] + 468))(a2); } //----- (004EB850) -------------------------------------------------------- _DWORD *__stdcall sub_4EB850(int a1) { _DWORD *v1; // eax _DWORD *v2; // esi v1 = operator new(0x184u); if ( v1 ) v2 = sub_9063E0(v1); else v2 = 0; if ( v2 ) sub_900390( (int)v2, *(LPCSTR *)(a1 + 32), *(_DWORD *)a1, *(_DWORD *)(a1 + 4), *(_DWORD *)(a1 + 8), *(_DWORD *)(a1 + 12), *(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 20), *(_DWORD *)(a1 + 24), *(_DWORD *)(a1 + 28), *(_DWORD *)(a1 + 36), 512, 5); return v2; } //----- (004EB900) -------------------------------------------------------- char __thiscall sub_4EB900(_DWORD *this) { return sub_8F86A0(&unk_BA6B10, this); } //----- (004EB910) -------------------------------------------------------- int __thiscall sub_4EB910(_DWORD *this, const void *a2, int a3) { _DWORD *v3; // ebx int v4; // edx unsigned int v5; // ecx int v6; // eax int **v7; // esi errno_t v8; // eax int v9; // ebx int v10; // eax int v11; // edi char *v12; // eax int v13; // edi char *v14; // eax int result; // eax signed int v16; // [esp+Ch] [ebp-58h] __time64_t Time; // [esp+10h] [ebp-54h] struct tm v18; // [esp+18h] [ebp-4Ch] struct tm Tm; // [esp+3Ch] [ebp-28h] v3 = this; qmemcpy(this + 314, a2, 0x24u); v4 = this[317]; v5 = this[318]; v3[323] = a3; v6 = v3[319] + 1900; if ( v6 < 1900 ) sub_4EB6E0(-2147467259); if ( v5 > 0xB ) sub_4EB6E0(-2147467259); if ( (unsigned int)(v4 - 1) > 0x1E ) sub_4EB6E0(-2147467259); Tm.tm_mon = v5; Tm.tm_sec = 0; Tm.tm_min = 0; Tm.tm_hour = 0; Tm.tm_mday = v4; Tm.tm_year = v6 - 1900; Tm.tm_isdst = -1; Time = _mktime64(&Tm); if ( (HIDWORD(Time) & (unsigned int)Time) == -1 ) sub_4EB6E0(-2147024809); v7 = (int **)(v3 + 93); v16 = 28; do { v8 = _localtime64_s(&Tm, &Time); v9 = v8 == 0 ? Tm.tm_mday : 0; if ( _localtime64_s(&v18, &Time) ) v10 = 0; else v10 = v18.tm_mon + 1; v11 = **(v7 - 2); v12 = sub_7549E0("%d", v10); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(*(v7 - 2), v12); v13 = **v7; v14 = sub_7549E0("%d", v9); result = (*(int (__thiscall **)(int *, char *))(v13 + 472))(*v7, v14); Time += 86400i64; v7 += 8; --v16; } while ( v16 ); return result; } //----- (004EBA70) -------------------------------------------------------- char __stdcall sub_4EBA70(int a1) { unsigned int v1; // eax _DWORD *v2; // ebx int v3; // esi int v4; // ecx v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = (_DWORD *)v1; if ( v1 ) { v3 = dword_ACDA68; LOBYTE(v1) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, a1); if ( (_BYTE)v1 ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v3 + 200) ) { v1 = *(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a1; if ( *(_DWORD *)v1 ) { v1 = *(_DWORD *)v1; if ( v1 ) { v4 = *(unsigned __int8 *)(v1 + 5); v1 = 7 * v4 - 1; if ( v1 <= 0x1B ) LOBYTE(v1) = sub_4BF630(v2, a1, 7 * v4 - 1); } } } } } return v1; } // ACDA68: using guessed type int dword_ACDA68; //----- (004EBAF0) -------------------------------------------------------- LONG __thiscall sub_4EBAF0(_DWORD *this) { _DWORD *v1; // esi LONG result; // eax v1 = this; if ( this[326] ) { sub_6BA650(&dword_AB6520, 45); result = sub_6B0B40((float *)v1[326], (_DWORD *)v1[327]); } return result; } //----- (004EBB20) -------------------------------------------------------- int __thiscall sub_4EBB20(_DWORD *this, int a2, int a3, int a4, volatile LONG *a5) { _DWORD *v5; // esi int v6; // ebx char *v7; // eax int result; // eax int (__thiscall ***v9)(_DWORD, signed int); // esi bool v10; // zf volatile LONG **v11; // ebx int v12; // edi int v13; // ST1C_4 int v14; // ebx volatile LONG *v15; // ecx int v16; // ST20_4 int v17; // eax volatile LONG *v18; // eax int v19; // eax int v20; // eax volatile LONG *v21; // eax int v22; // eax int v23; // eax volatile LONG *v24; // eax int v25; // [esp+10h] [ebp-18h] int v26; // [esp+14h] [ebp-14h] int v27; // [esp+18h] [ebp-10h] int v28; // [esp+24h] [ebp-4h] int v29; // [esp+34h] [ebp+Ch] int v30; // [esp+34h] [ebp+Ch] int v31; // [esp+38h] [ebp+10h] int v32; // [esp+38h] [ebp+10h] int v33; // [esp+38h] [ebp+10h] int v34; // [esp+3Ch] [ebp+14h] v5 = this; v27 = 0; v6 = dword_BA6BA0; v28 = 0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\AttendStamp.nif"); sub_8F66B0(v7, (int)&v27, v6); result = v27; if ( v27 ) { v11 = sub_8FB140(v27, (int)"BaseStamp", (int)&v25, (int)&v26, a5); if ( sub_8FB650(v11, v27, (int)"SuccessStamp") != 1 ) sub_8FB650(v11, v27, (int)"SuccessStamp00"); sub_8FB650(v11, v27, (int)"FailStamp"); v12 = a4; v13 = (int)v11; v14 = a3; v5[1] = sub_8F3EB0(a2, a3, v13, a4, 0, 0); v15 = sub_8FB140(v27, (int)"Month", (int)&v25, (int)&v26, a5)[9]; v16 = a4; v31 = *(_DWORD *)(*v15 + 24); v29 = *(_DWORD *)(*v15 + 20); v17 = sub_421050(1); v18 = sub_8F4A20(a2 + v25, v14 + v26, v29, v31, v17, v16, 0, 0); v5[3] = v18; (*(void (__thiscall **)(volatile LONG *, int *))(*v18 + 468))(v18, &dword_AA8C68); (*(void (__stdcall **)(signed int))(*(_DWORD *)v5[3] + 488))(1); v19 = *sub_8FB140(v27, (int)"Slash", (int)&v25, (int)&v26, a5)[9]; v32 = *(_DWORD *)(v19 + 24); v30 = *(_DWORD *)(v19 + 20); v20 = sub_421050(1); v21 = sub_8F4A20(a2 + v25, v14 + v26, v30, v32, v20, v12, 0, 0); v5[4] = v21; (*(void (__thiscall **)(volatile LONG *, int *))(*v21 + 468))(v21, &dword_AA8C68); (*(void (__stdcall **)(const char *))(*(_DWORD *)v5[4] + 472))("/"); v22 = *sub_8FB140(v27, (int)"Day", (int)&v25, (int)&v26, a5)[9]; v34 = *(_DWORD *)(v22 + 24); v33 = *(_DWORD *)(v22 + 20); v23 = sub_421050(1); v24 = sub_8F4A20(a2 + v25, v14 + v26, v33, v34, v23, v12, 0, 0); v5[5] = v24; (*(void (__thiscall **)(volatile LONG *, int *))(*v24 + 468))(v24, &dword_AA8C68); (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v5[5] + 488))(v5[5], 1); result = v27; v28 = -1; if ( v27 ) { v9 = (int (__thiscall ***)(_DWORD, signed int))v27; result = InterlockedDecrement((volatile LONG *)(v27 + 4)); if ( !result ) { v10 = v9 == 0; LABEL_14: if ( !v10 ) result = (**v9)(v9, 1); return result; } } } else { if ( off_AC0554 ) { off_AC0554("Game\\AttendStamp.nif load fail", "LoadFail", 0); result = v27; } v28 = -1; if ( result ) { v9 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { v10 = v9 == 0; goto LABEL_14; } } } return result; } // AA8C68: using guessed type int dword_AA8C68; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (004EBE00) -------------------------------------------------------- char __thiscall sub_4EBE00(_DWORD *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7) { _DWORD *v7; // esi int v8; // ebx char *v9; // eax int v10; // eax int (__thiscall ***v11)(_DWORD, signed int); // esi bool v12; // zf volatile LONG **v13; // ebx int v14; // edi int v15; // ST1C_4 int v16; // ebx volatile LONG *v17; // eax int v18; // ecx volatile LONG *v19; // eax int v20; // eax int v21; // eax volatile LONG *v22; // eax int v23; // eax int v24; // eax volatile LONG *v25; // eax int v26; // eax int v27; // eax volatile LONG *v28; // eax int v29; // edi char *v30; // eax int (__thiscall ***v31)(_DWORD, signed int); // esi float *v32; // edi int v33; // eax float *v34; // eax float *v35; // ecx int (__thiscall ***v36)(_DWORD, signed int); // esi int v38; // [esp+10h] [ebp-1Ch] int v39; // [esp+14h] [ebp-18h] int v40; // [esp+18h] [ebp-14h] int v41; // [esp+1Ch] [ebp-10h] int v42; // [esp+28h] [ebp-4h] int v43; // [esp+38h] [ebp+Ch] int v44; // [esp+38h] [ebp+Ch] _DWORD *v45; // [esp+3Ch] [ebp+10h] volatile LONG **v46; // [esp+44h] [ebp+18h] int v47; // [esp+44h] [ebp+18h] int v48; // [esp+44h] [ebp+18h] int v49; // [esp+44h] [ebp+18h] void *v50; // [esp+48h] [ebp+1Ch] v7 = this; v41 = 0; v8 = dword_BA6BA0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v9 = (char *)sub_401410(byte_ACAB50, "Game\\AttendStamp.nif"); sub_8F66B0(v9, (int)&v41, v8); v10 = v41; if ( v41 ) { v13 = sub_8FB140(v41, (int)"BaseStamp", (int)&v39, (int)&v40, a7); if ( sub_8FB650(v13, v41, (int)"SuccessStamp") != 1 ) sub_8FB650(v13, v41, (int)"SuccessStamp00"); sub_8FB650(v13, v41, (int)"FailStamp"); sub_8FB650(v13, v41, (int)"GiftDisableBtn"); v14 = a6; v15 = (int)v13; v16 = a3; v17 = sub_8F3EB0(a2, a3, v15, a6, 0, 0); v18 = v41; v7[1] = v17; v46 = sub_8FB140(v18, (int)"GiftBtnNor", (int)&v39, (int)&v40, a7); sub_8FB650(v46, v41, (int)"GiftBtnClick"); sub_8FB650(v46, v41, (int)"GiftBtnNor"); if ( sub_8FB650(v46, v41, (int)"MissonComplete") != 1 ) sub_8FB650(v46, v41, (int)"MissonComplete00"); v19 = sub_8FE0F0(a2 + v39, a3 + v40, (int)v46, v14, a4, 0, 0); v7[2] = v19; (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 520))(v19, a5); *(_WORD *)(v7[2] + 28) |= 1u; v45 = (_DWORD *)v7[2]; v20 = *sub_8FB140(v41, (int)"Month", (int)&v39, (int)&v40, a7)[9]; v47 = *(_DWORD *)(v20 + 24); v43 = *(_DWORD *)(v20 + 20); v21 = sub_421050(1); v22 = sub_8F4A20(a2 + v39, v16 + v40, v43, v47, v21, v14, 0, 0); v7[3] = v22; (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 1); v23 = *sub_8FB140(v41, (int)"Slash", (int)&v39, (int)&v40, a7)[9]; v48 = *(_DWORD *)(v23 + 24); v44 = *(_DWORD *)(v23 + 20); v24 = sub_421050(1); v25 = sub_8F4A20(a2 + v39, v16 + v40, v44, v48, v24, v14, 0, 0); v7[4] = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 1); (*(void (__stdcall **)(const char *))(*(_DWORD *)v7[4] + 472))("/"); v26 = *sub_8FB140(v41, (int)"Day", (int)&v39, (int)&v40, a7)[9]; v50 = *(void **)(v26 + 24); v49 = *(_DWORD *)(v26 + 20); v27 = sub_421050(1); v28 = sub_8F4A20(a2 + v39, v16 + v40, v49, (int)v50, v27, v14, 0, 0); v7[5] = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 1); v38 = 0; v29 = dword_BA6BA0; LOBYTE(v42) = 1; if ( !byte_ACAD5C ) sub_420410(); v30 = (char *)sub_401410(byte_ACA838, "AttendReward.nif"); LOBYTE(v10) = sub_8F66B0(v30, (int)&v38, v29); if ( v38 ) { v32 = (float *)operator new(0x44u); LOBYTE(v42) = 2; if ( v32 ) { v33 = sub_85BD60((void *)v38); v34 = sub_6B0A90(v32, v33); } else { v34 = 0; } v7[7] = v34; *((_BYTE *)v34 + 65) = 1; v35 = (float *)v7[7]; LOBYTE(v42) = 1; sub_6B0B40(v35, v45); LOBYTE(v10) = v38; LOBYTE(v42) = 0; if ( v38 ) { v36 = (int (__thiscall ***)(_DWORD, signed int))v38; v10 = InterlockedDecrement((volatile LONG *)(v38 + 4)); if ( !v10 ) { if ( v36 ) LOBYTE(v10) = (**v36)(v36, 1); } } v11 = (int (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 ) { v10 = InterlockedDecrement((volatile LONG *)(v41 + 4)); if ( !v10 ) { v12 = v11 == 0; LABEL_30: if ( !v12 ) LOBYTE(v10) = (**v11)(v11, 1); return v10; } } } else { v31 = (int (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 ) { v10 = InterlockedDecrement((volatile LONG *)(v41 + 4)); if ( !v10 ) { if ( v31 ) LOBYTE(v10) = (**v31)(v31, 1); } } } } else { if ( off_AC0554 ) { off_AC0554("Game\\AttendStamp.nif load fail", "LoadFail", 0); v10 = v41; } v42 = -1; if ( v10 ) { v11 = (int (__thiscall ***)(_DWORD, signed int))v10; v10 = InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !v10 ) { v12 = v11 == 0; goto LABEL_30; } } } return v10; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (004EC270) -------------------------------------------------------- void __thiscall sub_4EC270(_DWORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // ecx int v4; // esi v2 = this; v3 = (_WORD *)this[1]; if ( v3 ) { v2[6] = a2; if ( a2 ) { if ( a2 == 4 ) { if ( v2[2] && v2[7] ) { v3[14] |= 1u; *(_WORD *)(v2[2] + 28) &= 0xFFFEu; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[2] + 240))(0); *(_WORD *)(*(_DWORD *)v2[7] + 28) |= 1u; } } else if ( a2 == 5 ) { if ( v2[2] ) { if ( v2[7] ) { v3[14] |= 1u; *(_WORD *)(v2[2] + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[2] + 240))(1); *(_WORD *)(*(_DWORD *)v2[7] + 28) &= 0xFFFEu; } } } else { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 492))(a2); } } else { v3[14] &= 0xFFFEu; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[1] + 492))(0); v4 = v2[2]; if ( v4 ) *(_WORD *)(v4 + 28) |= 1u; } } } //----- (004EC360) -------------------------------------------------------- char __thiscall sub_4EC360(volatile LONG **this, void *a2) { volatile LONG **v2; // ebx int v3; // esi char *v4; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf char result; // al _DWORD *v9; // eax int v10; // eax int v11; // esi int v12; // eax volatile LONG *v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi volatile LONG **v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi int v17; // esi int v18; // edi volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // esi volatile LONG v22; // edi const CHAR *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax volatile LONG *v26; // eax int v27; // esi const CHAR *v28; // eax volatile LONG *v29; // esi volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax int v33; // ecx int v34; // eax int *v35; // edi int v36; // edx int v37; // eax bool v38; // sf unsigned __int8 v39; // of int v40; // edx void (__thiscall ***v41)(_DWORD, signed int); // esi void (__thiscall ***v42)(_DWORD, signed int); // esi int v43; // eax volatile LONG *v44; // esi char *v45; // eax void (__thiscall ***v46)(_DWORD, signed int); // esi float *v47; // esi int v48; // eax float *v49; // eax float *v50; // eax void (__thiscall ***v51)(_DWORD, signed int); // esi void (__thiscall ***v52)(_DWORD, signed int); // esi void (__thiscall ***v53)(_DWORD, signed int); // esi int v54; // [esp+50h] [ebp-84h] int v55; // [esp+58h] [ebp-7Ch] int v56; // [esp+74h] [ebp-60h] float v57; // [esp+84h] [ebp-50h] float v58; // [esp+88h] [ebp-4Ch] float v59; // [esp+8Ch] [ebp-48h] int v60; // [esp+90h] [ebp-44h] int v61; // [esp+94h] [ebp-40h] volatile LONG **v62; // [esp+98h] [ebp-3Ch] int v63; // [esp+9Ch] [ebp-38h] int v64; // [esp+A0h] [ebp-34h] int v65; // [esp+A4h] [ebp-30h] volatile LONG *v66; // [esp+A8h] [ebp-2Ch] int v67; // [esp+ACh] [ebp-28h] int v68; // [esp+B0h] [ebp-24h] int v69; // [esp+B4h] [ebp-20h] int v70; // [esp+B8h] [ebp-1Ch] int v71; // [esp+BCh] [ebp-18h] int v72; // [esp+C0h] [ebp-14h] int v73; // [esp+C4h] [ebp-10h] int v74; // [esp+D0h] [ebp-4h] volatile LONG **v75; // [esp+DCh] [ebp+8h] volatile LONG **v76; // [esp+DCh] [ebp+8h] void *v77; // [esp+DCh] [ebp+8h] v2 = this; v73 = 0; v3 = dword_BA6BA0; v74 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\AttendWin.nif"); sub_8F66B0(v4, (int)&v73, v3); v5 = v73; if ( !v73 ) { if ( off_AC0554 ) { off_AC0554("Game\\AttendWin.nif load fail", "LoadFail", 0); v5 = v73; } v74 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { v7 = v6 == 0; LABEL_9: if ( !v7 ) (**v6)(v6, 1); } } return 0; } v9 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v73 + 72))("Frame"); v10 = sub_85C050(v9, 8); v11 = v10; v68 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v12 = **(_DWORD **)(v11 + 40); LOBYTE(v74) = 1; if ( !v12 || (v13 = *(volatile LONG **)(v12 + 4), (v66 = v13) == 0) ) { LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v14 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) && v14 ) { (**v14)(v14, 1); return 0; } return 0; } v15 = sub_8FB140(v73, (int)"Frame", (int)&v71, (int)&v72, v13); if ( sub_8F1440(v2, 0, 0, (int)v15, 0, (int)a2, (int)"AttendCheckWin", 0) ) { v17 = v71; v18 = v72; v19 = sub_8FB140(v73, (int)"Panel01", (int)&v71, (int)&v72, 0); sub_8F3EB0(v71, v72, (int)v19, (int)v2, 0, 0); v75 = sub_8FB140(v73, (int)"CloseBtnNor", (int)&v71, (int)&v72, v66); sub_8FB650(v75, v73, (int)"CloseBtnClick"); sub_8FB650(v75, v73, (int)"CloseBtnOver"); sub_8FE0F0(v71, v72, (int)v75, (int)v2, 0, 0, 0); if ( sub_8F71E0(v73, (int)"WinTitle", &v71, &v72, &v69, &v70) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v71 - v17, v72 - v18, v69, v70, v20, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40A910(-448968143); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v76 = sub_8FB140(v73, (int)"Text02", (int)&v71, (int)&v72, 0); qmemcpy(&v54, sub_420870(9), 0x34u); v55 = 700; v54 = 14; v56 = 1; v24 = sub_4EB850((int)&v54); sub_56FF80(v2 + 328, (int)v24); v54 = 16; v25 = sub_4EB850((int)&v54); sub_56FF80(v2 + 329, (int)v25); v26 = sub_8F4A20(v71, v72, *(_DWORD *)(*v76[9] + 20), *(_DWORD *)(*v76[9] + 24), (int)v2[329], (int)v2, 0, 0); v2[312] = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v27 = *v2[312]; v28 = sub_40A910(847155075); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v27 + 472))(v2[312], v28); v29 = v66; v30 = sub_8FB140(v73, (int)"Text01", (int)&v71, (int)&v72, v66); v31 = sub_8F4A20(v71, v72, *(_DWORD *)(*v30[9] + 20), *(_DWORD *)(*v30[9] + 24), (int)v2[328], (int)v2, 0, 0); v2[313] = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = sub_8FB140(v73, (int)"Start", (int)&v71, (int)&v72, v29); v61 = v71; v33 = *v32[9]; v60 = v72; v69 = *(_DWORD *)(v33 + 20); v70 = *(_DWORD *)(*v32[9] + 24); v34 = 0; v35 = (int *)(v2 + 88); v77 = 0; v63 = 0; v62 = v2 + 88; while ( 2 ) { v36 = 0; v65 = 0; v64 = v34; do { if ( (unsigned int)v34 > 0x1B ) { v42 = (void (__thiscall ***)(_DWORD, signed int))v68; LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) (**v42)(v42, 1); v6 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) ) { v7 = v6 == 0; goto LABEL_9; } return 0; } v37 = v61 + v36 * (v69 + 2); v39 = __OFSUB__(v36, 6); v38 = v36 - 6 < 0; v40 = *v35; if ( v38 ^ v39 ) { (*(void (__thiscall **)(int *, int, int, volatile LONG **, volatile LONG *))(v40 + 8))( v35, v37, v60 + (_DWORD)v77 * (v70 + 2), v2, v29); } else { (*(void (__thiscall **)(int *, int, int, signed int, void *, volatile LONG **, volatile LONG *))(v40 + 4))( v35, v37, v60 + (_DWORD)v77 * (v70 + 2), 1, v77, v2, v29); v29 = v66; } v36 = v65 + 1; v34 = v64 + 1; v35 += 8; v65 = v36; ++v64; } while ( v36 < 7 ); v77 = (char *)v77 + 1; v34 = v63 + 7; v35 = (int *)(v62 + 56); v63 = v34; v62 += 56; if ( v34 < 28 ) continue; break; } if ( sub_8F71E0(v73, (int)"Frame", &v71, &v72, &v69, &v70) ) { v43 = sub_421050(1); v44 = sub_8F4A20(v71, v72, v69, v70, v43, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); sub_56FF80(v2 + 327, (int)v44); v67 = 0; LOBYTE(v74) = 2; if ( !byte_ACAD5C ) sub_420410(); v45 = (char *)sub_401410(byte_ACA838, "AttendRewardFull.nif"); sub_8F66B0(v45, (int)&v67, 0); if ( v67 ) { v47 = (float *)operator new(0x44u); LOBYTE(v74) = 3; if ( v47 ) { v48 = sub_85BD60((void *)v67); v49 = sub_6B0A90(v47, v48); } else { v49 = 0; } LOBYTE(v74) = 2; v2[326] = (volatile LONG *)v49; if ( v49 ) { v50 = *(float **)v49; v57 = 0.0; v58 = 0.0; v50[22] = 0.0; v59 = 1000.0; v50[23] = 0.0; v50[24] = 1000.0; (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.5); } LOBYTE(v74) = 1; if ( v67 ) { v51 = (void (__thiscall ***)(_DWORD, signed int))v67; if ( !InterlockedDecrement((volatile LONG *)(v67 + 4)) ) { if ( v51 ) (**v51)(v51, 1); } } v52 = (void (__thiscall ***)(_DWORD, signed int))v68; LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) (**v52)(v52, 1); v53 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) && v53 ) (**v53)(v53, 1); return 1; } v46 = (void (__thiscall ***)(_DWORD, signed int))v68; LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) (**v46)(v46, 1); v6 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) ) { v7 = v6 == 0; goto LABEL_9; } } else { v41 = (void (__thiscall ***)(_DWORD, signed int))v68; LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) (**v41)(v41, 1); v6 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) ) { v7 = v6 == 0; goto LABEL_9; } } return 0; } LOBYTE(v74) = 0; sub_410C00(&v68); v74 = -1; sub_410C00(&v73); result = 0; } else { LOBYTE(v74) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v16 = (void (__thiscall ***)(_DWORD, signed int))v73; v74 = -1; if ( !v73 || InterlockedDecrement((volatile LONG *)(v73 + 4)) || !v16 ) return 0; (**v16)(v16, 1); result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (004ECB50) -------------------------------------------------------- char __thiscall sub_4ECB50(void *this, int a2, int a3) { char result; // al if ( !a2 ) return (*(int (**)(void))(*(_DWORD *)this + 540))(); result = a2 - 1; if ( a2 == 1 ) result = sub_4EBA70(a3); return result; } //----- (004ECB80) -------------------------------------------------------- _DWORD **__thiscall sub_4ECB80(_DWORD *this, float a2) { _DWORD *v2; // esi _BYTE *v3; // ecx _DWORD **result; // eax int v5; // edi int v6; // ST04_4 char *v7; // eax char *v8; // eax v2 = this; v3 = (_BYTE *)this[326]; if ( v3[64] ) { byte_ACEB21 = 1; sub_6B0C00(v3, a2); } if ( byte_ACEB21 == 1 && !*(_BYTE *)(v2[326] + 64) ) { result = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !result ) return result; sub_4A5D20(result); byte_ACEB21 = 0; } v5 = *(_DWORD *)v2[313]; v6 = v2[324]; v7 = (char *)sub_40A910(-566539711); v8 = sub_7549E0(v7, v6, 28); return (_DWORD **)(*(int (__thiscall **)(_DWORD, char *))(v5 + 472))(v2[313], v8); } // ACEB21: using guessed type char byte_ACEB21; //----- (004ECC20) -------------------------------------------------------- int __thiscall sub_4ECC20(_DWORD *this) { _DWORD *v1; // esi int v2; // esi signed int v3; // edi int v4; // eax int v5; // eax int result; // eax v1 = this; this[87] = sub_4ED880(0); v1[323] = 0; v1[324] = 0; *((_BYTE *)v1 + 1300) = 0; v2 = (int)(v1 + 89); v3 = 28; do { v4 = *(_DWORD *)v2; if ( *(_DWORD *)v2 ) { *(_DWORD *)(v2 + 20) = 0; *(_WORD *)(v4 + 28) &= 0xFFFEu; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 492))(0); v5 = *(_DWORD *)(v2 + 4); if ( v5 ) *(_WORD *)(v5 + 28) |= 1u; } (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 8) + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 12) + 468))(&dword_AA8C68); result = (*(int (__stdcall **)(int *))(**(_DWORD **)(v2 + 16) + 468))(&dword_AA8C68); v2 += 32; --v3; } while ( v3 ); return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (004ECCC0) -------------------------------------------------------- int __thiscall sub_4ECCC0(char *this, int a2) { char *v2; // edi unsigned int v3; // ebx int v4; // esi int result; // eax int v6; // ecx int v7; // ecx v2 = this; if ( a2 ) { v3 = 0; v4 = (int)(this + 356); do { result = a2; if ( *(_BYTE *)(v3 + a2) == 1 ) { v6 = *(_DWORD *)v4; if ( *(_DWORD *)v4 ) { *(_DWORD *)(v4 + 20) = 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v6 + 492))(1); } (*(void (__stdcall **)(float *))(**(_DWORD **)(v4 + 8) + 468))(&flt_AA8C78); (*(void (__stdcall **)(float *))(**(_DWORD **)(v4 + 12) + 468))(&flt_AA8C78); result = (*(int (__stdcall **)(float *))(**(_DWORD **)(v4 + 16) + 468))(&flt_AA8C78); ++*((_DWORD *)v2 + 324); } if ( v3 < *((_DWORD *)v2 + 323) ) { if ( !*(_DWORD *)(v4 + 20) ) { v7 = *(_DWORD *)v4; if ( *(_DWORD *)v4 ) { *(_DWORD *)(v4 + 20) = 2; (*(void (__stdcall **)(signed int))(*(_DWORD *)v7 + 492))(2); } } (*(void (__stdcall **)(float *))(**(_DWORD **)(v4 + 8) + 468))(&flt_AA8C78); (*(void (__stdcall **)(float *))(**(_DWORD **)(v4 + 12) + 468))(&flt_AA8C78); result = (*(int (__stdcall **)(float *))(**(_DWORD **)(v4 + 16) + 468))(&flt_AA8C78); } ++v3; v4 += 32; } while ( v3 < 0x1C ); } return result; } // AA8C78: using guessed type float flt_AA8C78; //----- (004ECDB0) -------------------------------------------------------- void __thiscall sub_4ECDB0(_DWORD *this, int a2, int a3) { int v3; // ebx int v4; // edi int v5; // esi int *v6; // eax int v7; // eax unsigned int v8; // eax int v9; // esi int v10; // eax bool v11; // zf unsigned int v12; // ebx int v13; // esi int *v14; // eax int v15; // eax int v16; // ecx unsigned int v17; // eax int v18; // esi _DWORD *v19; // edx int v20; // ecx _DWORD *v21; // [esp+Ch] [ebp-4h] v3 = 0; v21 = this; if ( a3 <= 0 ) { LABEL_14: v12 = 0; if ( v21[87] ) { do { v13 = dword_ACDA68; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA68 + 16))( dword_ACDA68, (unsigned __int16)v12) ) break; if ( (unsigned __int16)v12 > *(_WORD *)(v13 + 200) ) break; v14 = (int *)(*(_DWORD *)(v13 + 196) + 4 * (unsigned __int16)v12); if ( !*v14 ) break; v15 = *v14; if ( !v15 ) break; v16 = *(unsigned __int8 *)(v15 + 5); v17 = 7 * v16 - 1; if ( v17 >= 0x1C ) break; v18 = v21[8 * v17 + 94]; v19 = &v21[8 * v17 + 94]; if ( v17 > v21[323] ) { v18 = 3; } else { v20 = 7 * v16 - 1; if ( (v17 & 0x80000000) == 0 ) { do { if ( v20 != v17 && *(v19 - 4) ) break; if ( *v19 != 1 ) goto LABEL_28; v19 -= 8; --v20; } while ( v20 >= 0 ); } v18 = 5; } LABEL_28: sub_4EC270(&v21[8 * (v17 + 11)], v18); ++v12; } while ( v12 < v21[87] ); } } else { while ( 1 ) { v4 = *(unsigned __int8 *)(v3 + a2); v5 = dword_ACDA68; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, v4) ) break; if ( (unsigned __int16)v4 > *(_WORD *)(v5 + 200) ) break; v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4); if ( !*v6 ) break; v7 = *v6; if ( !v7 ) break; if ( *(_DWORD *)(v7 + 1) == 1 ) { *((_BYTE *)v21 + 1300) = 1; } else { v8 = 7 * *(unsigned __int8 *)(v7 + 5) - 1; if ( v8 > 0x1B ) return; v9 = (int)&v21[8 * (v8 + 11)]; v10 = *(_DWORD *)(v9 + 4); if ( v10 ) { v11 = *(_DWORD *)(v9 + 8) == 0; *(_DWORD *)(v9 + 24) = 4; if ( !v11 ) { if ( *(_DWORD *)(v9 + 28) ) { *(_WORD *)(v10 + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v9 + 8) + 28) &= 0xFFFEu; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 8) + 240))(0); *(_WORD *)(**(_DWORD **)(v9 + 28) + 28) |= 1u; } } } } if ( ++v3 >= a3 ) goto LABEL_14; } } } // ACDA68: using guessed type int dword_ACDA68; //----- (004ECF70) -------------------------------------------------------- void __thiscall sub_4ECF70(int this) { int v1; // edi unsigned int v2; // edx int v3; // eax _DWORD *v4; // ecx int v5; // eax int v6; // esi v1 = this; v2 = *(_DWORD *)(this + 1292); if ( v2 < 0x1C ) { *(_BYTE *)(this + 344) = 0; if ( *(_DWORD *)(32 * v2 + this + 360) ) { v3 = v2 - 1; if ( (signed int)(v2 - 1) >= 0 ) { v4 = (_DWORD *)(32 * v3 + this + 376); do { if ( *(v4 - 4) ) break; if ( *v4 != 1 ) goto LABEL_9; v4 -= 8; --v3; } while ( v3 >= 0 ); } v5 = 5; } else { LABEL_9: v5 = 1; } sub_4EC270((_DWORD *)(v1 + 32 * (v2 + 11)), v5); v6 = 32 * (*(_DWORD *)(v1 + 1292) + 11); (*(void (__stdcall **)(float *))(**(_DWORD **)(v6 + v1 + 12) + 468))(&flt_AA8C78); (*(void (__stdcall **)(float *))(**(_DWORD **)(v6 + v1 + 16) + 468))(&flt_AA8C78); (*(void (__stdcall **)(float *))(**(_DWORD **)(v6 + v1 + 20) + 468))(&flt_AA8C78); if ( *(_DWORD *)(v1 + 1292) == 27 ) *(_DWORD *)(v1 + 1292) = 28; ++*(_DWORD *)(v1 + 1296); } } // AA8C78: using guessed type float flt_AA8C78; //----- (004ED040) -------------------------------------------------------- void __thiscall sub_4ED040(_BYTE *this, int a2) { int v2; // esi _BYTE *v3; // ebx int *v4; // eax int v5; // eax unsigned int v6; // eax v2 = dword_ACDA68; v3 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v2 + 200) ) { v4 = (int *)(*(_DWORD *)(v2 + 196) + 4 * (unsigned __int16)a2); if ( *v4 ) { v5 = *v4; if ( v5 ) { v3[344] = 1; if ( *(_DWORD *)(v5 + 1) == 1 ) { v3[1300] = 1; } else { v6 = 7 * *(unsigned __int8 *)(v5 + 5) - 1; if ( v6 < 0x1C ) { if ( *(_DWORD *)&v3[32 * v6 + 360] ) sub_4EC270(&v3[32 * (v6 + 11)], 4); } } } } } } } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED0E0) -------------------------------------------------------- void __thiscall sub_4ED0E0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // ecx int v5; // eax int v6; // ecx int v7; // eax v2 = this; if ( a2 <= 0x1C ) { v3 = this[323]; if ( v3 < 0x1C ) { v4 = this[8 * v3 + 94]; *((_BYTE *)v2 + 344) = 0; if ( !v4 || v4 == 3 ) { v5 = 8 * (v3 + 11); v6 = v2[v5 + 1]; if ( v6 ) { v2[v5 + 6] = 2; (*(void (__stdcall **)(signed int))(*(_DWORD *)v6 + 492))(2); } sub_4EB810((_DWORD **)&v2[8 * (v2[323] + 11)], (int)&flt_AA8C78); } v2[323] = a2; if ( a2 == 28 ) { v7 = sub_4ED7D0(1); if ( v7 ) { if ( v2[324] < (unsigned int)*(unsigned __int8 *)(v7 + 5) ) *((_BYTE *)v2 + 1300) = 1; } } } } } // AA8C78: using guessed type float flt_AA8C78; //----- (004ED190) -------------------------------------------------------- signed int __thiscall sub_4ED190(_BYTE *this) { _BYTE *v1; // ebx signed int v3; // edi unsigned __int8 *v4; // eax unsigned int v5; // esi int v6; // [esp+4h] [ebp-4h] v1 = this; if ( this[344] ) return -1; v3 = -1; v6 = 0; if ( sub_4ED7B0() ) { do { v4 = (unsigned __int8 *)sub_4ED820(1, (unsigned int *)&v6); if ( v4 ) { if ( *((_DWORD *)v1 + 324) >= (unsigned int)v4[5] ) v3 = *v4; } v5 = ++v6; } while ( v5 < sub_4ED7B0() ); } return v3; } //----- (004ED200) -------------------------------------------------------- char __thiscall sub_4ED200(_BYTE *this) { _BYTE *v1; // esi bool v3; // zf int v4; // eax int v5; // eax int v6; // eax unsigned int v7; // [esp+4h] [ebp-4h] v1 = this; if ( sub_4ED190(this) != -1 ) return 1; v3 = *((_DWORD *)v1 + 87) == 0; v7 = 0; if ( !v3 ) { do { v4 = sub_4ED820(0, &v7); if ( !v4 ) break; v5 = 7 * *(unsigned __int8 *)(v4 + 5) - 1; if ( v5 < 0 || v5 >= 28 ) break; v6 = *(_DWORD *)&v1[32 * v5 + 376]; if ( v6 == 5 ) return 1; if ( v6 == 3 ) break; ++v7; } while ( v7 < *((_DWORD *)v1 + 87) ); } return 0; } //----- (004ED280) -------------------------------------------------------- char __thiscall sub_4ED280(int this) { int v1; // edi unsigned int v2; // esi int v4; // eax int v5; // eax int v6; // eax v1 = this; if ( !*(_BYTE *)(this + 1300) ) return 0; v2 = 0; if ( !*(_DWORD *)(this + 348) ) return 1; while ( v2 < sub_4ED7B0() ) { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v2) + 1) ) { if ( ++v2 >= sub_4ED7B0() ) return 0; } v4 = sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v2); if ( !v4 ) break; v5 = 7 * *(unsigned __int8 *)(v4 + 5) - 1; if ( v5 < 0 ) break; if ( v5 >= 28 ) break; v6 = *(_DWORD *)(32 * v5 + v1 + 376); if ( v6 == 5 || v6 == 3 ) break; if ( ++v2 >= *(_DWORD *)(v1 + 348) ) return 1; } return 0; } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED330) -------------------------------------------------------- void __thiscall sub_4ED330(void *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi v1 = this; v2 = (int *)*((_DWORD *)this + 7); *(_DWORD *)this = &AttendCheckBut::`vftable'; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v2); v1[7] = 0; } } // 9BDC04: using guessed type void *AttendCheckBut::`vftable'; //----- (004ED3D0) -------------------------------------------------------- _DWORD *__thiscall sub_4ED3D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &AttendCheckWin::`vftable'; v1[58] = &AttendCheckWin::`vftable'; *((_BYTE *)v1 + 344) = 0; v1[87] = 0; `eh vector constructor iterator'(v1 + 88, 0x20u, 28, sub_4EB7F0, sub_4ED330); v1[312] = 0; v1[313] = 0; v1[323] = 0; v1[324] = 0; *((_BYTE *)v1 + 1300) = 0; v1[326] = 0; v1[327] = 0; `eh vector constructor iterator'( v1 + 328, 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BDC14: using guessed type void *AttendCheckWin::`vftable'; // 9BDC34: using guessed type void *AttendCheckWin::`vftable'; //----- (004ED4A0) -------------------------------------------------------- LONG __thiscall sub_4ED4A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx int v4; // edi int v5; // edi int v6; // edi v1 = this; *this = &AttendCheckWin::`vftable'; this[58] = &AttendCheckWin::`vftable'; v2 = (int *)this[326]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[326] = 0; } v4 = v1[328]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[328] = 0; } v5 = v1[329]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[329] = 0; } `eh vector destructor iterator'(v1 + 328, 4u, 2, sub_410C00); v6 = v1[327]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); `eh vector destructor iterator'(v1 + 88, 0x20u, 28, sub_4ED330); return sub_8F10F0(v1); } // 9BDC14: using guessed type void *AttendCheckWin::`vftable'; // 9BDC34: using guessed type void *AttendCheckWin::`vftable'; //----- (004ED620) -------------------------------------------------------- void __thiscall sub_4ED620(char *this, const void *a2, int a3, int a4, int a5, int a6) { char *v6; // esi v6 = this; *((_DWORD *)this + 87) = sub_4ED880(0); sub_4EB910(v6, a2, a3); sub_4ECCC0(v6, a4); sub_4ECDB0(v6, a5, a6); if ( *((_DWORD *)v6 + 323) == 28 && sub_4ED190(v6) == -1 ) v6[1300] = 1; } //----- (004ED680) -------------------------------------------------------- volatile LONG *__cdecl sub_4ED680(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x528u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4ED3D0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004ED7B0) -------------------------------------------------------- int sub_4ED7B0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA68 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED7D0) -------------------------------------------------------- int __cdecl sub_4ED7D0(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4ED7B0() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v1) + 1) != a1 ) { if ( ++v1 >= sub_4ED7B0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v1); } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED820) -------------------------------------------------------- int __cdecl sub_4ED820(int a1, unsigned int *a2) { unsigned int v2; // esi int result; // eax v2 = *a2; if ( v2 >= sub_4ED7B0() ) { LABEL_4: *a2 = v2; result = 0; } else { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v2) + 1) != a1 ) { if ( ++v2 >= sub_4ED7B0() ) goto LABEL_4; } *a2 = v2; result = sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v2); } return result; } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED880) -------------------------------------------------------- int __cdecl sub_4ED880(int a1) { int v1; // ebx unsigned int v2; // esi v1 = 0; v2 = 0; if ( sub_4ED7B0() ) { do { if ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA68 + 4), v2) + 1) == a1 ) ++v1; ++v2; } while ( v2 < sub_4ED7B0() ); } return v1; } // ACDA68: using guessed type int dword_ACDA68; //----- (004ED8C0) -------------------------------------------------------- void *__thiscall sub_4ED8C0(void *this, char a2) { void *v2; // esi v2 = this; sub_4ED330(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004ED8F0) -------------------------------------------------------- void *__thiscall sub_4ED8F0(void *this, char a2) { void *v2; // esi v2 = this; sub_4ED4A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004ED960) -------------------------------------------------------- int __thiscall sub_4ED960(_DWORD *this, char a2) { int v2; // eax int result; // eax v2 = this[87]; if ( v2 ) { if ( a2 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; else *(_WORD *)(v2 + 28) |= 1u; } result = this[86]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) |= 1u; else *(_WORD *)(result + 28) &= 0xFFFEu; } return result; } //----- (004EDA00) -------------------------------------------------------- char __thiscall sub_4EDA00(void *this, void *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // edi volatile LONG **v9; // edi volatile LONG *v10; // eax _DWORD *v11; // edi int v12; // ebx char *v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi float *v15; // ebx int v16; // eax float *v17; // eax void (__thiscall ***v18)(_DWORD, signed int); // esi void (__thiscall ***v19)(_DWORD, signed int); // esi int v20; // [esp+1Ch] [ebp-1Ch] int v21; // [esp+20h] [ebp-18h] int v22; // [esp+24h] [ebp-14h] int v23; // [esp+28h] [ebp-10h] int v24; // [esp+34h] [ebp-4h] v2 = (int)this; v23 = 0; v3 = dword_BA6BA0; v24 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\AttendButton.nif"); sub_8F66B0(v4, (int)&v23, v3); if ( !v23 ) return 0; v5 = sub_8FB140(v23, (int)"InertNor", (int)&v21, (int)&v22, 0); if ( !v5 ) v5 = sub_8FB140(v23, (int)"Inert00_Nor", (int)&v21, (int)&v22, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"AttendButton", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v23; v24 = -1; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_8FB140(v23, (int)"InertNor", (int)&v21, (int)&v22, 0); if ( v8 ) { sub_8FB650(v8, v23, (int)"InertClick"); } else { v8 = sub_8FB140(v23, (int)"Inert00_Nor", (int)&v21, (int)&v22, 0); sub_8FB650(v8, v23, (int)"Inert00_Click"); } *(_DWORD *)(v2 + 344) = sub_8FE0F0(v21, v22, (int)v8, v2, 0, 0, 0); v9 = sub_8FB140(v23, (int)"ActiveNor", (int)&v21, (int)&v22, 0); if ( v9 ) { sub_8FB650(v9, v23, (int)"AcctiveClick"); } else { v9 = sub_8FB140(v23, (int)"Active00_Nor", (int)&v21, (int)&v22, 0); sub_8FB650(v9, v23, (int)"Acctive00_Click"); } v10 = sub_8FE0F0(v21, v22, (int)v9, v2, 0, 0, 0); *(_DWORD *)(v2 + 348) = v10; *((_WORD *)v10 + 14) |= 1u; v11 = *(_DWORD **)(v2 + 348); v20 = 0; v12 = dword_BA6BA0; LOBYTE(v24) = 1; if ( !byte_ACAD5C ) sub_420410(); v13 = (char *)sub_401410(byte_ACA838, "AttendButtonEff.nif"); sub_8F66B0(v13, (int)&v20, v12); if ( v20 ) { v15 = (float *)operator new(0x44u); LOBYTE(v24) = 2; if ( v15 ) { v16 = sub_85BD60((void *)v20); v17 = sub_6B0A90(v15, v16); } else { v17 = 0; } LOBYTE(v24) = 1; *(_DWORD *)(v2 + 352) = v17; sub_6B0B40(v17, v11); *(_BYTE *)(*(_DWORD *)(v2 + 352) + 65) = 1; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.050000001, 0.2); LOBYTE(v24) = 0; if ( v20 ) { v18 = (void (__thiscall ***)(_DWORD, signed int))v20; if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) { if ( v18 ) (**v18)(v18, 1); } } v19 = (void (__thiscall ***)(_DWORD, signed int))v23; v24 = -1; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v19 ) (**v19)(v19, 1); result = 1; } else { v14 = (void (__thiscall ***)(_DWORD, signed int))v23; v24 = -1; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v14 ) (**v14)(v14, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004EDD60) -------------------------------------------------------- void __thiscall sub_4EDD60(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD **v4; // eax int v5; // eax int v6; // eax v3 = this; if ( !a2 ) { v4 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { sub_4A5D50(v4); v5 = v3[87]; if ( v5 ) *(_WORD *)(v5 + 28) |= 1u; v6 = v3[86]; if ( v6 ) *(_WORD *)(v6 + 28) &= 0xFFFEu; } } } //----- (004EDDB0) -------------------------------------------------------- LONG __thiscall sub_4EDDB0(_DWORD *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi v1 = this; *this = &AttendIconWin::`vftable'; this[58] = &AttendIconWin::`vftable'; v2 = (int *)this[88]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); v1[88] = 0; } return sub_8F10F0(v1); } // 9BDF20: using guessed type void *AttendIconWin::`vftable'; // 9BDF3C: using guessed type void *AttendIconWin::`vftable'; //----- (004EDE80) -------------------------------------------------------- int __cdecl sub_4EDE80(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &AttendIconWin::`vftable'; *(_DWORD *)(v2 + 232) = &AttendIconWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_BYTE *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BDF20: using guessed type void *AttendIconWin::`vftable'; // 9BDF3C: using guessed type void *AttendIconWin::`vftable'; //----- (004EDFE0) -------------------------------------------------------- void *__thiscall sub_4EDFE0(void *this, char a2) { void *v2; // esi v2 = this; sub_4EDDB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004EE070) -------------------------------------------------------- char __thiscall sub_4EE070(_DWORD *this) { return sub_8F86A0(&unk_BA6B10, this); } //----- (004EE080) -------------------------------------------------------- int __thiscall sub_4EE080(void *this, int a2, int a3) { void *v3; // esi int result; // eax int v5; // [esp+4h] [ebp-8h] int v6; // [esp+8h] [ebp-4h] v3 = this; if ( !a2 ) { v5 = 49; v6 = 0; sub_6B69F0(dword_AB6534, (int)&v5, 0.0, 0); result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 540))(v3); } return result; } // AB6534: using guessed type int dword_AB6534; //----- (004EE0D0) -------------------------------------------------------- char __thiscall sub_4EE0D0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf _DWORD *v9; // eax int v10; // eax int v11; // edi int v12; // eax volatile LONG *v13; // ebx volatile LONG **v14; // eax volatile LONG **v15; // edi int v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax int v19; // eax int v20; // edi int v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // edi int v26; // ST38_4 int v27; // eax volatile LONG *v28; // ecx int v29; // edi int v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // edi volatile LONG *v33; // edi char v34; // ST2C_1 int v35; // ST30_4 int v36; // ST34_4 int v37; // ST38_4 const CHAR *v38; // eax volatile LONG *v39; // eax volatile LONG *v40; // edi volatile LONG v41; // ebx int v42; // eax char v43; // [esp+38h] [ebp-38h] int v44; // [esp+4Ch] [ebp-24h] int v45; // [esp+50h] [ebp-20h] int v46; // [esp+54h] [ebp-1Ch] int v47; // [esp+58h] [ebp-18h] int v48; // [esp+5Ch] [ebp-14h] int v49; // [esp+60h] [ebp-10h] int v50; // [esp+6Ch] [ebp-4h] int v51; // [esp+78h] [ebp+8h] int v52; // [esp+78h] [ebp+8h] v2 = (int)this; v49 = 0; v3 = dword_BA6BA0; v50 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\AttendMsg.nif"); sub_8F66B0(v4, (int)&v49, v3); v5 = v49; if ( !v49 ) { if ( off_AC0554 ) { off_AC0554("Game\\AttendMsg.nif load fail", "LoadFail", 0); v5 = v49; } v50 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( InterlockedDecrement((volatile LONG *)(v5 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_9; } v9 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v49 + 72))("Frame"); v10 = sub_85C050(v9, 8); v11 = v10; v46 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v12 = **(_DWORD **)(v11 + 40); LOBYTE(v50) = 1; if ( !v12 || (v13 = *(volatile LONG **)(v12 + 4)) == 0 ) { LOBYTE(v50) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v6 = (void (__thiscall ***)(_DWORD, signed int))v49; v50 = -1; if ( !v49 || InterlockedDecrement((volatile LONG *)(v49 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_9; } v14 = sub_8FB140(v49, (int)"Frame", (int)&v47, (int)&v48, v13); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v14, 0, a2, (int)"AttendRewardWin", 0) ) { LOBYTE(v50) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v6 = (void (__thiscall ***)(_DWORD, signed int))v49; v50 = -1; if ( !v49 || InterlockedDecrement((volatile LONG *)(v49 + 4)) ) return 0; v7 = v6 == 0; LABEL_9: if ( !v7 ) (**v6)(v6, 1); return 0; } sub_456260(&v43); LOBYTE(v50) = 2; sub_455FF0(&v43, v2); sub_456000(&v43, 0, 0); sub_456380(&v43, v49); v15 = sub_8FB140(v49, (int)"CloseBtnNor", (int)&v47, (int)&v48, v13); sub_8FB650(v15, v49, (int)"CloseBtnClick"); sub_8FB650(v15, v49, (int)"CloseBtnOver"); sub_90C8D0(v47, v48, (int)v15, v2); if ( !sub_8F71E0(v49, (int)"Title", &v47, &v48, &v44, &v45) ) { LOBYTE(v50) = 1; sub_4562E0(&v43); LOBYTE(v50) = 0; sub_410C00(&v46); v50 = -1; sub_410C00(&v49); return 0; } v16 = sub_421050(7); v17 = sub_8F4A20(v47, v48, v44, v45, v16, v2, 0, 0); *(_DWORD *)(v2 + 344) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v18 = sub_8FB140(v49, (int)"Panel01", (int)&v47, (int)&v48, v13); sub_8F3EB0(v47, v48, (int)v18, v2, 0, 0); v19 = *sub_8FB140(v49, (int)"Text01", (int)&v47, (int)&v48, 0)[9]; v20 = *(_DWORD *)(v19 + 24); v51 = *(_DWORD *)(v19 + 20); v21 = sub_421050(3); v22 = sub_8F4A20(v47, v48, v51, v20, v21, v2, 0, 0); *(_DWORD *)(v2 + 348) = v22; (*(void (__thiscall **)(volatile LONG *, float *))(*v22 + 468))(v22, &flt_AA8C78); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 348) + 488))(5); v23 = sub_8FB140(v49, (int)"IconSlot", (int)&v47, (int)&v48, v13); sub_8F3EB0(v47, v48, (int)v23, v2, 0, 0); v24 = sub_8FB140(v49, (int)"Image", (int)&v47, (int)&v48, 0); v25 = sub_8F3EB0(v47, v48, (int)v24, v2, 0, 0); v26 = (*(int (__thiscall **)(volatile LONG *))(*v25 + 168))(v25); v27 = (*(int (__thiscall **)(volatile LONG *))(*v25 + 164))(v25); *(_DWORD *)(v2 + 352) = sub_5D6E20(v27, v26, v2); v28 = sub_8FB140(v49, (int)"Text02", (int)&v47, (int)&v48, v13)[9]; v29 = *(_DWORD *)(*v28 + 24); v52 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(3); v31 = sub_8F4A20(v47, v48, v52, v29, v30, v2, 0, 0); *(_DWORD *)(v2 + 356) = v31; (*(void (__thiscall **)(volatile LONG *, float *))(*v31 + 468))(v31, &flt_AA8C78); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 356) + 488))(4); v32 = sub_8FB140(v49, (int)"OkBtnNor", (int)&v47, (int)&v48, v13); sub_8FB650(v32, v49, (int)"OkBtnClick"); sub_8FB650(v32, v49, (int)"OkBtnOver"); v33 = sub_8FE0F0(v47, v48, (int)v32, v2, 0, 0, 0); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_40C190(1331644831); v39 = sub_456040((int)v33, (int)v38, v34, v35, v36, v37, 5); v40 = v39; v41 = *v39; v42 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v41 + 452))(v40, v42); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v50) = 1; sub_4562E0(&v43); LOBYTE(v50) = 0; sub_410C00(&v46); v50 = -1; sub_410C00(&v49); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8C78: using guessed type float flt_AA8C78; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (004EE660) -------------------------------------------------------- void __userpurge sub_4EE660(int a1@, int a2@, int a3@, int a4, int a5) { int v5; // esi int v6; // edi int *v7; // eax int v8; // eax int v9; // edi const CHAR *v10; // eax int v11; // edi const CHAR *v12; // eax int v13; // edi const CHAR *v14; // eax const CHAR *v15; // eax int v16; // [esp-8h] [ebp-Ch] int v17; // [esp-4h] [ebp-8h] v5 = a1; if ( a5 ) { v16 = a3; v6 = dword_ACDA68; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA68 + 16))(dword_ACDA68, a4) ) { if ( (unsigned __int16)a4 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)a4); if ( *v7 ) { v8 = *v7; if ( v8 ) { if ( *(_DWORD *)(v8 + 1) ) { v13 = **(_DWORD **)(v5 + 344); if ( *(_BYTE *)(v8 + 5) == 28 ) { v14 = sub_40A910(-2133853998); (*(void (__thiscall **)(_DWORD, const CHAR *, int, int))(v13 + 472))( *(_DWORD *)(v5 + 344), v14, v16, a2); v17 = -2071488123; } else { v15 = sub_40A910(-736872677); (*(void (__thiscall **)(_DWORD, const CHAR *, int, int))(v13 + 472))( *(_DWORD *)(v5 + 344), v15, v16, a2); v17 = -1865223985; } v11 = **(_DWORD **)(v5 + 348); v12 = sub_40A910(v17); } else { v9 = **(_DWORD **)(v5 + 344); v10 = sub_40A910(1822285529); (*(void (__thiscall **)(_DWORD, const CHAR *, int, int))(v9 + 472))(*(_DWORD *)(v5 + 344), v10, v16, a2); v11 = **(_DWORD **)(v5 + 348); v12 = sub_40A910(1773003217); } (*(void (__thiscall **)(_DWORD, const CHAR *))(v11 + 472))(*(_DWORD *)(v5 + 348), v12); sub_5D5B70(*(_WORD **)(v5 + 352), a5, 1); (*(void (__cdecl **)(int))(**(_DWORD **)(v5 + 356) + 472))(*(_DWORD *)(a5 + 112) + 34); } } } } } } // 4EE660: could not find valid save-restore pair for ebx // 4EE660: could not find valid save-restore pair for edi // ACDA68: using guessed type int dword_ACDA68; //----- (004EE7A0) -------------------------------------------------------- int __cdecl sub_4EE7A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &AttendRewardWin::`vftable'; *(_DWORD *)(v2 + 232) = &AttendRewardWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BE244: using guessed type void *AttendRewardWin::`vftable'; // 9BE264: using guessed type void *AttendRewardWin::`vftable'; //----- (004EE900) -------------------------------------------------------- void *__thiscall sub_4EE900(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AttendRewardWin::`vftable'; *((_DWORD *)this + 58) = &AttendRewardWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BE244: using guessed type void *AttendRewardWin::`vftable'; // 9BE264: using guessed type void *AttendRewardWin::`vftable'; //----- (004EE960) -------------------------------------------------------- void __thiscall sub_4EE960(float *this, int a2) { float *v2; // esi v2 = this; (*(void (__stdcall **)(int))(**((_DWORD **)this + 96) + 148))(a2); (*(void (__stdcall **)(_DWORD **))(**((_DWORD **)v2 + 96) + 176))((_DWORD **)v2 + 88); sub_4EAAF0(*((float **)v2 + 96), v2[93]); } //----- (004EEA50) -------------------------------------------------------- void __thiscall sub_4EEA50(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(void *))(*this[96] + 148))(&unk_9BE498); sub_4EAAF0((float *)v1[96], -1.0); } //----- (004EEA80) -------------------------------------------------------- BOOL __stdcall sub_4EEA80(unsigned int a1, unsigned int a2) { return sub_680890((unsigned __int8 *)byte_AD9238) >= a1 && sub_680890((unsigned __int8 *)byte_AD9238) <= a2; } //----- (004EEAB0) -------------------------------------------------------- char __thiscall sub_4EEAB0(volatile LONG **this, int a2) { int v2; // esi int v4; // eax int v5; // edi int v6; // eax int v7; // ebx int v8; // ST1C_4 int v9; // ST18_4 _DWORD *v10; // eax volatile LONG *v11; // eax float *v12; // eax float *v13; // eax int v14; // eax struct tagRECT rc; // [esp+34h] [ebp-20h] int v16; // [esp+50h] [ebp-4h] v2 = (int)this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"BasicInfoTipWin", 0) ) return 0; v4 = sub_421050(8); v5 = v4; if ( !v4 ) return 0; v6 = *(_DWORD *)(v4 + 384); v7 = 4 * v6; v8 = 4 * v6; v9 = xRight; v10 = sub_8F62B0(0, 0, 0, 255); v11 = sub_8F3D50((int)v10, 0, 0, v9, v8, v2, 0, 0); *(_DWORD *)(v2 + 388) = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 256))(v11, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 276))(*(float *)(v2 + 380)); SelectObject(*(HDC *)(v5 + 192), *(HGDIOBJ *)(v5 + 184)); SetRect(&rc, 0, 0, xRight, v7); v12 = (float *)operator new(0x158u); v16 = 0; if ( v12 ) v13 = sub_4EAD10(v12, (volatile LONG *)v5); else v13 = 0; v16 = -1; *(_DWORD *)(v2 + 384) = v13; sub_9074F0((int)v13, 0); (*(void (__stdcall **)(struct tagRECT *))(**(_DWORD **)(v2 + 384) + 136))(&rc); v14 = *(_DWORD *)(v2 + 384); *(_DWORD *)(v14 + 308) = 5; if ( *(_DWORD *)(v14 + 280) != 34 ) { *(_DWORD *)(v14 + 280) = 34; *(_BYTE *)(v14 + 300) = 1; } (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 384) + 176))(v2 + 352); sub_85C4D0((_DWORD *)v2); (*(void (__thiscall **)(int, int))(*(_DWORD *)v2 + 156))(v2, v7); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.67000002); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 388) + 116))(*(_DWORD *)(v2 + 384), 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 240))(v2, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 256))(v2, 1); return 1; } //----- (004EECE0) -------------------------------------------------------- int __thiscall sub_4EECE0(_DWORD **this, int xRight, int a3) { _DWORD **v3; // esi int result; // eax int v5; // eax _DWORD *v6; // esi struct tagRECT rc; // [esp+14h] [ebp-14h] v3 = this; if ( this[97] ) (*(void (__stdcall **)(int))(*this[97] + 468))(xRight); result = ((int (__thiscall *)(_DWORD **, int, int, _DWORD, _DWORD))(*v3)[59])(v3, xRight, a3, 0.5, 0.67000002); if ( v3[96] ) { v5 = (*(int (**)(void))(*v3[97] + 204))(); SetRect(&rc, 0, 0, xRight, v5); (*(void (__stdcall **)(struct tagRECT *))(*v3[96] + 136))(&rc); v6 = v3[96]; result = 34; v6[77] = 5; if ( v6[70] != 34 ) { v6[70] = 34; *((_BYTE *)v6 + 300) = 1; } } return result; } //----- (004EEDC0) -------------------------------------------------------- void __thiscall sub_4EEDC0(float *this, float a2) { float *v2; // esi _DWORD *v3; // ecx float *v4; // ecx double v5; // st7 int v6; // eax unsigned int v7; // eax int v8; // eax int v9; // edi _DWORD *v10; // eax void (__thiscall *v11)(float *); // edx double v12; // st7 int v13; // eax int v14; // ecx float v15; // [esp+1Ch] [ebp+8h] float v16; // [esp+1Ch] [ebp+8h] float v17; // [esp+1Ch] [ebp+8h] v2 = this; v3 = (_DWORD *)*((_DWORD *)this + 97); if ( v3 && *((_DWORD *)v2 + 96) ) { if ( !byte_B9202C ) { v2[87] = a2; if ( !sub_8F3540(v3) ) return; v4 = (float *)*((_DWORD *)v2 + 96); if ( 1.0 == v4[84] ) sub_4EAAF0(v4, 0.0); } v5 = a2 - v2[87]; if ( v2[94] < v5 ) { v6 = *(_DWORD *)(dword_ACD9D4 + 56); if ( v6 ) v7 = *(_DWORD *)(v6 + 40); else v7 = 0; if ( *((_DWORD *)v2 + 86) >= v7 ) v2[86] = 0.0; v8 = sub_7474E0((_DWORD *)(dword_ACD9D4 + 4), *((_DWORD *)v2 + 86)); v9 = v8; if ( v8 && (unsigned __int8)sub_4EEA80(*(unsigned __int8 *)(v8 + 288), *(unsigned __int8 *)(v8 + 289)) ) { sub_4EEA50((_DWORD **)v2); sub_4EE960(v2, v9 + 32); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 97) + 256))(1); v5 = a2; v10 = *(_DWORD **)v2; v2[87] = a2; v11 = (void (__thiscall *)(float *))v10[67]; *((_BYTE *)v2 + 368) = 1; v11(v2); } ++*((_DWORD *)v2 + 86); } if ( sub_8F3540(*((_DWORD **)v2 + 97)) ) { if ( *((_BYTE *)v2 + 368) && ((*(void (**)(void))(**((_DWORD **)v2 + 97) + 280))(), v2[95] > v5) ) { v12 = flt_ACCFD0 + flt_ACCFD0; v15 = v12; (*(void (**)(void))(**((_DWORD **)v2 + 97) + 280))(); v16 = v12 + v15; if ( v2[95] < (double)v16 ) v16 = v2[95]; (*(void (__stdcall **)(float))(**((_DWORD **)v2 + 97) + 276))(COERCE_FLOAT(LODWORD(v16))); } else { v13 = *((_DWORD *)v2 + 96); v14 = *((_DWORD *)v2 + 97); *((_BYTE *)v2 + 368) = 0; v17 = *(float *)(v13 + 336); (*(void (**)(void))(*(_DWORD *)v14 + 280))(); if ( v17 >= (double)v17 ) (*(void (__stdcall **)(float))(**((_DWORD **)v2 + 97) + 276))(COERCE_FLOAT(LODWORD(v17))); if ( 0.0 == v17 ) (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 97) + 256))(0); } } } } // ACCFD0: using guessed type float flt_ACCFD0; // ACD9D4: using guessed type int dword_ACD9D4; // B9202C: using guessed type char byte_B9202C; //----- (004EEFF0) -------------------------------------------------------- int __thiscall sub_4EEFF0(void *this, float a2) { int v2; // esi int result; // eax v2 = (int)this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(float *)(v2 + 348) = 0.0; *(_DWORD *)v2 = &BasicInfoTipWin::`vftable'; *(_DWORD *)(v2 + 232) = &BasicInfoTipWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; sub_4B1B10((float *)(v2 + 352), 7u); *(float *)(v2 + 372) = 10.0; *(_BYTE *)(v2 + 368) = 0; *(float *)(v2 + 376) = a2; *(_DWORD *)(v2 + 384) = 0; result = v2; *(float *)(v2 + 380) = 0.30000001; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BE4A0: using guessed type void *BasicInfoTipWin::`vftable'; // 9BE4BC: using guessed type void *BasicInfoTipWin::`vftable'; //----- (004EF0A0) -------------------------------------------------------- volatile LONG *__cdecl sub_4EF0A0(int a1, float a2) { void *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v2 = operator new(0x188u); v6 = v2; v7 = 0; if ( v2 ) v3 = (volatile LONG *)sub_4EEFF0(v2, a2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( sub_4EEAB0((volatile LONG **)v3, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } result = 0; } return result; } //----- (004EF1E0) -------------------------------------------------------- void *__thiscall sub_4EF1E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &BasicInfoTipWin::`vftable'; *((_DWORD *)this + 58) = &BasicInfoTipWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BE4A0: using guessed type void *BasicInfoTipWin::`vftable'; // 9BE4BC: using guessed type void *BasicInfoTipWin::`vftable'; //----- (004EF220) -------------------------------------------------------- __time64_t __thiscall sub_4EF220(unsigned int *this) { unsigned int v1; // eax unsigned int v2; // edx int v3; // ecx struct tm Tm; // [esp+0h] [ebp-28h] v1 = *this; v2 = *this >> 19; v3 = *this >> 25; Tm.tm_hour = v2 & 0x3F; Tm.tm_min = v3; Tm.tm_year = (unsigned __int8)v1 + 100; Tm.tm_sec = 0; Tm.tm_mday = (v1 >> 13) & 0x3F; Tm.tm_mon = ((v1 >> 8) & 0x1F) - 1; Tm.tm_isdst = -1; return _mktime64(&Tm); } //----- (004EF290) -------------------------------------------------------- int __thiscall sub_4EF290(_DWORD **this) { _DWORD **v1; // esi signed int v2; // edi int result; // eax v1 = this + 90; v2 = 40; do { (*(void (__stdcall **)(_DWORD))(**v1 + 256))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 248))(0); (*(void (__stdcall **)(_DWORD))(*v1[40] + 256))(0); result = sub_5D0F80((_DWORD **)v1[40]); ++v1; --v2; } while ( v2 ); return result; } //----- (004EF2F0) -------------------------------------------------------- int __thiscall sub_4EF2F0(_DWORD **this) { return (*(int (**)(void))(*this[89] + 540))(); } //----- (004EF310) -------------------------------------------------------- int __thiscall sub_4EF310(_DWORD *this, int a2, int a3) { int v3; // edx signed int v4; // eax int v5; // ebx signed int v6; // edi int v7; // esi int result; // eax _DWORD *v9; // [esp+0h] [ebp-10h] int v10; // [esp+4h] [ebp-Ch] int v11; // [esp+8h] [ebp-8h] int v12; // [esp+Ch] [ebp-4h] v3 = a3; v4 = 0; v9 = this; v12 = 0; v10 = 0; if ( a3 > 0 ) { v11 = 0; do { if ( v4 >= 40 ) break; v5 = 0; if ( a2 > 0 ) { v6 = 22; v7 = (int)&v9[v4 + 130]; do { if ( v4 >= 40 ) break; (*(void (__stdcall **)(int))(**(_DWORD **)(v7 - 160) + 172))(v6 - 2); (*(void (__stdcall **)(int))(**(_DWORD **)(v7 - 160) + 176))(v11); (*(void (__stdcall **)(signed int))(**(_DWORD **)v7 + 172))(v6); (*(void (__stdcall **)(int))(**(_DWORD **)v7 + 176))(v11 + 2); v4 = ++v12; ++v5; v7 += 4; v6 += 20; } while ( v5 < a2 ); } v3 = a3; v11 += 20; ++v10; } while ( v10 < a3 ); } result = v3 * a2; v9[172] = v3 * a2; return result; } //----- (004EF3E0) -------------------------------------------------------- char __thiscall sub_4EF3E0(int this) { char v2; // bl char *v3; // ecx if ( !*(_BYTE *)(this + 686) ) return 0; v2 = 0; if ( *(float *)(this + 740) < 1.0 ) return 0; v3 = *(char **)(this + 356); if ( v3 ) { if ( v3[365] ) return 2; if ( (unsigned __int8)sub_45B520(v3) ) v2 = 1; } return v2; } //----- (004EF430) -------------------------------------------------------- int __thiscall sub_4EF430(char *this, char *a2, int a3, unsigned int *a4) { char *v4; // esi int result; // eax unsigned int v6; // ecx int v7; // edi void ***v8; // esi int v9; // ebx int *v10; // eax int v11; // ebx double v12; // st7 signed int v13; // eax char *v14; // eax char *v15; // ST0C_4 void **v16; // ST14_4 char *v17; // eax char *v18; // eax void **v19; // ecx int v20; // eax bool v21; // zf int v22; // [esp-4h] [ebp-18h] int v23; // [esp+4h] [ebp-10h] int v24; // [esp+4h] [ebp-10h] char *v25; // [esp+8h] [ebp-Ch] int v26; // [esp+Ch] [ebp-8h] unsigned __int16 v27; // [esp+10h] [ebp-4h] int v28; // [esp+10h] [ebp-4h] int v29; // [esp+10h] [ebp-4h] unsigned int v30; // [esp+1Ch] [ebp+8h] v4 = this; v25 = this; result = *(_DWORD *)(sub_64F860(a2) + 4); v6 = *a4; v30 = *a4; if ( !result ) { *a4 = v6; return result; } v7 = (int)&v4[4 * v6 + 360]; v8 = (void ***)&v4[4 * v6 + 520]; while ( v6 < 0x28 ) { v9 = dword_ACDA80; v26 = *(_DWORD *)result; v23 = *(_DWORD *)(result + 8); v27 = *(_WORD *)(v23 + 20); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA80 + 16))( dword_ACDA80, *(unsigned __int16 *)(v23 + 20)) ) { if ( v27 <= *(_WORD *)(v9 + 200) ) { v10 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v27); if ( *v10 ) v28 = *v10; else v28 = 0; } else { v28 = 0; } } else { v28 = 0; } result = v28; if ( *(_BYTE *)(v28 + 526) ) { if ( *((_DWORD *)v25 + 172) - 1 < v30 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); result = (*((int (__stdcall **)(_DWORD))**v8 + 64))(0); LABEL_32: ++v30; ++v8; v7 += 4; goto LABEL_33; } if ( *(_DWORD *)(v28 + 522) == a3 ) { v11 = v23; sub_5D0FB0(*v8, *(unsigned __int16 *)(v23 + 20)); v12 = *(float *)(v23 + 36); v13 = (signed int)v12; if ( (unsigned int)(signed int)v12 > 0x927C0 ) { v19 = *v8; v18 = (char *)(v28 + 70); } else { if ( v13 < 60 ) { v22 = v13 == 59 ? 59 : v13 + 1; v14 = (char *)sub_40C190(-1733121819); } else { v22 = (signed int)v12 / 60; v14 = (char *)sub_40C190(-1666406160); } v15 = sub_7549E0(v14, v22); v16 = *v8; v17 = (char *)sub_40C190(-330414800); v18 = sub_7549E0(v17, v28 + 70, "\n\n", v15); v19 = v16; } sub_8F2EA0(v19, v18); (*v8)[68] = (void *)dword_AD01E8; (*((void (__cdecl **)(signed int))**v8 + 64))(1); (*((void (__cdecl **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v7 + 256))(1); ++v30; ++v8; v7 += 4; if ( *(_DWORD *)(v11 + 112) ) { v24 = *(unsigned __int16 *)(v11 + 20); v29 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v24); if ( (_BYTE)result ) { result = v24; if ( (unsigned __int16)v24 <= *(_WORD *)(v29 + 200) ) { v20 = *(_DWORD *)(v29 + 196); v21 = *(_DWORD *)(v20 + 4 * (unsigned __int16)v24) == 0; result = v20 + 4 * (unsigned __int16)v24; if ( !v21 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v8, *(_DWORD *)(v11 + 112)); (*((void (__stdcall **)(signed int))**v8 + 64))(1); (*((void (__stdcall **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v7 + 256))(1); goto LABEL_32; } } } } } } } } LABEL_33: v6 = v30; if ( !v26 ) { *a4 = v30; return result; } result = v26; } result = (int)a4; *a4 = v6; return result; } // 4EF430: could not find valid save-restore pair for ebx // 4EF430: could not find valid save-restore pair for edi // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; // AD01E8: using guessed type int dword_AD01E8; //----- (004EF700) -------------------------------------------------------- int __thiscall sub_4EF700(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi unsigned int v3; // ebx unsigned int v4; // ecx unsigned int v5; // edi unsigned int v6; // edx _DWORD *v7; // edi int v8; // ST04_4 unsigned int v9; // eax _DWORD *v10; // eax int v11; // eax int result; // eax v2 = this; sub_8F1140(this, a2); if ( dword_BA6AB4 >= 1 && *((_BYTE *)v2 + 685) ) { v3 = (*(int (**)(void))(*v2[89] + 144))(); v4 = (*(int (**)(void))(*v2[89] + 148))(); v5 = v3 / 0x14; v6 = v4 / 0x14; if ( v3 % 0x14 > 0xA ) ++v5; if ( v4 % 0x14 > 0xA ) ++v6; (*(void (__stdcall **)(unsigned int, unsigned int))(*v2[89] + 540))(20 * v5, 20 * v6); *((_BYTE *)v2 + 685) = 0; } v7 = v2[89]; v8 = (*(int (__thiscall **)(_DWORD *))(*v7 + 148))(v2[89]) / 0x14u; v9 = (*(int (__thiscall **)(_DWORD *))(*v7 + 144))(v7); sub_4EF310(v2, v9 / 0x14, v8); v10 = v2[170]; if ( v10 ) { v11 = (int)v10 - 1; if ( v11 ) { result = v11 - 1; if ( !result ) { word_B920B1 = (*(int (**)(void))(*v2[89] + 144))(); result = (*(int (**)(void))(*v2[89] + 148))(); word_B920B3 = result; } } else { word_B9209D = (*(int (**)(void))(*v2[89] + 144))(); result = (*(int (**)(void))(*v2[89] + 148))(); word_B9209F = result; } } else { word_B92091 = (*(int (**)(void))(*v2[89] + 144))(); result = (*(int (**)(void))(*v2[89] + 148))(); word_B92093 = result; } return result; } // B92091: using guessed type __int16 word_B92091; // B92093: using guessed type __int16 word_B92093; // B9209D: using guessed type __int16 word_B9209D; // B9209F: using guessed type __int16 word_B9209F; // B920B1: using guessed type __int16 word_B920B1; // B920B3: using guessed type __int16 word_B920B3; // BA6AB4: using guessed type int dword_BA6AB4; //----- (004EF900) -------------------------------------------------------- char *__stdcall sub_4EF900(char *a1, size_t a2, int a3) { char *v3; // eax char *v4; // eax v3 = (char *)sub_40A910(592182822); v4 = sub_7549E0(v3, a3); return strncpy(a1, v4, a2); } //----- (004EF930) -------------------------------------------------------- char *__stdcall sub_4EF930(char *a1, int a2) { __time64_t v2; // ST24_8 __time64_t v3; // rax int v4; // edi int v5; // esi char *v6; // eax char *v7; // eax char *v8; // eax char *v9; // eax char *result; // eax char *v11; // eax char *v12; // eax char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax char *v19; // eax char *v20; // eax int v21; // esi double v22; // [esp+14h] [ebp-F8h] int v23; // [esp+20h] [ebp-ECh] struct tm Tm; // [esp+24h] [ebp-E8h] char v25; // [esp+48h] [ebp-C4h] char v26; // [esp+49h] [ebp-C3h] char v27; // [esp+88h] [ebp-84h] char v28; // [esp+89h] [ebp-83h] char v29; // [esp+C8h] [ebp-44h] char v30; // [esp+C9h] [ebp-43h] if ( !a2 || !a1 ) return "-"; qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v2 = _mktime64(&Tm); v3 = sub_4EF220((unsigned int *)(a2 + 10)); v22 = _difftime64(v3, v2); v23 = sub_453AE0(v22); v4 = sub_453AC0(v22); v5 = sub_453B00(v22); v25 = 0; memset(&v26, 0, 0x3Fu); v27 = 0; memset(&v28, 0, 0x3Fu); v29 = 0; memset(&v30, 0, 0x3Fu); if ( v22 < 86400.0 ) { if ( v22 < 3600.0 ) { v21 = v5 % 60; if ( v21 ) { sub_4EF900(&v29, 0x40u, v21); sprintf(a1, "%s", &v29); } else { sub_4EF900(&v29, 0x40u, 1); sprintf(a1, "%s", &v29); } result = a1; } else { v17 = (char *)sub_40A910(710015352); v18 = sub_7549E0(v17, v4 % 24); strncpy(&v27, v18, 0x40u); v19 = (char *)sub_40A910(592182822); v20 = sub_7549E0(v19, v5 % 60); strncpy(&v29, v20, 0x40u); sprintf(a1, "%s %s", &v27, &v29); result = a1; } } else { if ( v4 ) { v11 = (char *)sub_40A910(776205606); v12 = sub_7549E0(v11, v23); strncpy(&v25, v12, 0x40u); v13 = (char *)sub_40A910(710015352); v14 = sub_7549E0(v13, v4 % 24); strncpy(&v27, v14, 0x40u); v15 = (char *)sub_40A910(592182822); v16 = sub_7549E0(v15, v5 % 60); strncpy(&v29, v16, 0x40u); sprintf(a1, "%s %s %s", &v25, &v27, &v29); } else { v6 = (char *)sub_40A910(776205606); v7 = sub_7549E0(v6, v23); strncpy(&v25, v7, 0x40u); v8 = (char *)sub_40A910(592182822); v9 = sub_7549E0(v8, v5 % 60); strncpy(&v29, v9, 0x40u); sprintf(a1, "%s %s", &v25, &v29); } result = a1; } return result; } //----- (004EFD30) -------------------------------------------------------- char __thiscall sub_4EFD30(void *this, int a2, int a3) { int v3; // esi volatile LONG *v4; // ebx void (__thiscall ***v5)(_DWORD, signed int); // esi bool v6; // zf char *v8; // eax const char *v9; // ecx volatile LONG **v10; // ebx void (__thiscall ***v11)(_DWORD, signed int); // esi const char *v12; // eax float v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax int v16; // eax int v17; // edx int v18; // eax int v19; // ecx float v20; // ST3C_4 float v21; // ST38_4 int v22; // eax float v23; // eax float *v24; // eax int v25; // eax float v26; // edx float *v27; // eax float v28; // edx float v29; // edx int v30; // eax float v31; // edx int v32; // ebx float v33; // eax float *v34; // eax int v35; // eax int v36; // eax float v37; // edx float v38; // edx int v39; // eax float v40; // edx int v41; // ebx float v42; // eax int v43; // ebx _DWORD *v44; // ecx float v45; // eax _DWORD *v46; // ebx int v47; // edx int v48; // ebx volatile LONG **v49; // eax volatile LONG *v50; // eax int v51; // eax int v52; // eax int v53; // edi int v54; // eax volatile LONG *v55; // eax const CHAR *v56; // eax volatile LONG *v57; // eax const CHAR *v58; // eax volatile LONG *v59; // eax volatile LONG **v60; // edi volatile LONG **v61; // eax volatile LONG *v62; // eax volatile LONG *v63; // ecx volatile LONG *v64; // eax volatile LONG *v65; // eax volatile LONG *v66; // eax double v67; // st7 float v68; // ST3C_4 void (__thiscall *v69)(int, signed int); // edx void (__thiscall ***v70)(_DWORD, signed int); // esi float v71; // [esp+50h] [ebp-50h] float v72; // [esp+54h] [ebp-4Ch] float v73; // [esp+58h] [ebp-48h] float v74; // [esp+5Ch] [ebp-44h] void *v75; // [esp+60h] [ebp-40h] void *v76; // [esp+64h] [ebp-3Ch] int v77; // [esp+68h] [ebp-38h] int v78; // [esp+6Ch] [ebp-34h] volatile LONG *v79; // [esp+70h] [ebp-30h] int v80; // [esp+74h] [ebp-2Ch] int v81; // [esp+78h] [ebp-28h] volatile LONG **v82; // [esp+7Ch] [ebp-24h] int v83; // [esp+80h] [ebp-20h] int v84; // [esp+84h] [ebp-1Ch] int v85; // [esp+88h] [ebp-18h] int v86; // [esp+8Ch] [ebp-14h] int v87; // [esp+90h] [ebp-10h] int v88; // [esp+9Ch] [ebp-4h] signed int v89; // [esp+A8h] [ebp+8h] v3 = (int)this; v87 = 0; v88 = 0; v83 = 0; v86 = 0; v77 = 0; v78 = 0; v84 = 0; v85 = 0; v4 = (volatile LONG *)sub_43D0D0(4u); v79 = v4; if ( !v4 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v87; v88 = -1; if ( v87 && !InterlockedDecrement((volatile LONG *)(v87 + 4)) ) { v6 = v87 == 0; LABEL_5: if ( !v6 ) (**v5)(v5, 1); } return 0; } v75 = (void *)dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\BuffDeBuffWin.nif"); sub_8F66B0(v8, (int)&v87, (int)v75); if ( !v87 ) return 0; v9 = 0; if ( a3 ) { if ( a3 == 1 ) { v9 = "DeBuffBox"; } else if ( a3 == 2 ) { v9 = "ChargedBuff"; } } else { v9 = "BuffBox"; } v10 = sub_8FB140(v87, (int)v9, (int)&v78, (int)&v77, v4); v77 = 0; v78 = 0; if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v10, 0, a2, (int)"StatusbuffWin", 0) ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v87; v88 = -1; if ( v87 && !InterlockedDecrement((volatile LONG *)(v87 + 4)) && v11 ) (**v11)(v11, 1); return 0; } switch ( a3 ) { case 0: v12 = sub_40A910(-1765875726); goto LABEL_29; case 1: v12 = sub_40A910(-569123870); goto LABEL_29; case 2: v12 = sub_40A910(-770659305); LABEL_29: sub_8F2EA0((void **)v3, v12); break; } *(float *)&v75 = COERCE_FLOAT(operator new(0xC4u)); LOBYTE(v88) = 1; if ( *(float *)&v75 == 0.0 ) { v15 = 0; } else { v13 = COERCE_FLOAT(operator new(0x70u)); *(float *)&v76 = v13; LOBYTE(v88) = 2; if ( v13 == 0.0 ) { LOBYTE(v88) = 1; v15 = sub_868C00(v75, 0); } else { v14 = sub_868440((_DWORD *)LODWORD(v13), 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v88) = 1; v15 = sub_868C00(v75, (int)v14); } } LOBYTE(v88) = 0; sub_56FF80((_DWORD *)(v3 + 692), (int)v15); sub_867880(*(_WORD **)(*(_DWORD *)(v3 + 692) + 184), 4, 0, 0); v16 = *v10[9]; v17 = *(_DWORD *)(v16 + 24); v18 = *(_DWORD *)(v16 + 20); v19 = *(_DWORD *)(*(_DWORD *)(v3 + 692) + 184); *(float *)&v76 = (double)(v78 + 1); *(float *)&v75 = (double)(v77 + 1); v80 = v18 - 2; v21 = (double)(unsigned int)(v18 - 2); v20 = (double)(unsigned int)(v17 - 2); sub_867E60(v19, 0, *(float *)&v76, *(float *)&v75, v21, v20); v22 = *(_DWORD *)(v3 + 692); v71 = 0.0; v72 = 0.0; v73 = 0.0; v74 = 0.0; sub_867FF0(*(_DWORD *)(v22 + 184), 0, &v71); v23 = COERCE_FLOAT(operator new(0x60u)); *(float *)&v75 = v23; LOBYTE(v88) = 3; if ( v23 == 0.0 ) v24 = 0; else v24 = sub_85EBC0((float *)LODWORD(v23)); LOBYTE(v88) = 0; sub_56FF80((_DWORD *)(v3 + 696), (int)v24); v25 = *(_DWORD *)(v3 + 696); *(float *)(v25 + 32) = 255.0; *(float *)(v25 + 36) = 0.0; v72 = 255.0; *(float *)(v25 + 40) = 0.0; v26 = v72; v73 = 0.0; v74 = 0.0; ++*(_DWORD *)(v25 + 88); v27 = *(float **)(v3 + 696); v72 = 255.0; ++*((_DWORD *)v27 + 22); v27[11] = v26; v28 = v73; v73 = 0.0; v27[12] = v28; v29 = v74; v74 = 0.0; v27[13] = v29; v30 = *(_DWORD *)(v3 + 696); v31 = v72; ++*(_DWORD *)(v30 + 88); *(float *)(v30 + 68) = v31; *(float *)(v30 + 72) = v73; *(float *)(v30 + 76) = v74; v32 = *(_DWORD *)(v3 + 696); ++*(_DWORD *)(v32 + 88); *(float *)(v32 + 84) = 0.5; v33 = COERCE_FLOAT(operator new(0x60u)); *(float *)&v75 = v33; LOBYTE(v88) = 4; if ( v33 == 0.0 ) v34 = 0; else v34 = sub_85EBC0((float *)LODWORD(v33)); LOBYTE(v88) = 0; sub_56FF80((_DWORD *)(v3 + 700), (int)v34); v35 = *(_DWORD *)(v3 + 700); *(float *)(v35 + 32) = 255.0; *(float *)(v35 + 36) = 0.0; v72 = 255.0; *(float *)(v35 + 40) = 0.0; v73 = 0.0; v74 = 0.0; ++*(_DWORD *)(v35 + 88); v36 = *(_DWORD *)(v3 + 700); v72 = 255.0; ++*(_DWORD *)(v36 + 88); *(float *)(v36 + 44) = 255.0; v37 = v73; v73 = 0.0; *(float *)(v36 + 48) = v37; v38 = v74; v74 = 0.0; *(float *)(v36 + 52) = v38; v39 = *(_DWORD *)(v3 + 700); v40 = v72; ++*(_DWORD *)(v39 + 88); *(float *)(v39 + 68) = v40; *(float *)(v39 + 72) = v73; *(float *)(v39 + 76) = v74; v41 = *(_DWORD *)(v3 + 700); ++*(_DWORD *)(v41 + 88); *(float *)(v41 + 84) = 0.0; sub_403700(*(_DWORD **)(v3 + 692), *(_DWORD *)(v3 + 696)); v42 = COERCE_FLOAT(operator new(0x20u)); v43 = LODWORD(v42); *(float *)&v75 = v42; LOBYTE(v88) = 5; if ( v42 == 0.0 ) { v43 = 0; } else { sub_85B2B0((_DWORD *)LODWORD(v42)); *(_DWORD *)v43 = &NiAlphaProperty::`vftable'; *(_WORD *)(v43 + 28) = 236; *(_BYTE *)(v43 + 30) = 0; } *(_WORD *)(v43 + 28) |= 1u; v44 = *(_DWORD **)(v3 + 692); LOBYTE(v88) = 0; sub_403700(v44, v43); v45 = COERCE_FLOAT(operator new(0x44u)); *(float *)&v75 = v45; LOBYTE(v88) = 6; if ( v45 == 0.0 ) v46 = 0; else v46 = sub_863BB0((_DWORD *)LODWORD(v45)); LOBYTE(v88) = 0; sub_42AB40(v46, (int)v79); sub_45C760((_DWORD **)v46, 0); v46[7] = 2; sub_403700(*(_DWORD **)(v3 + 692), (int)v46); sub_867680(*(_DWORD *)(*(_DWORD *)(v3 + 692) + 184)); sub_85C4D0(*(_DWORD **)(v3 + 692)); sub_85BED0(*(_DWORD ***)(v3 + 692), 0.0, 1); (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v3 + 116))(v3, *(_DWORD *)(v3 + 692), 0); v47 = v77; v48 = v78; *(_DWORD *)(v3 + 272) = dword_AD01E8; v80 = v47; v49 = sub_8FB140(v87, (int)"ReSizeBox", (int)&v84, (int)&v85, 0); v82 = v49; v50 = sub_45C5B0((int)v49[14], 7, 7, v84 - v48, v85 - v80, v3, a2); sub_56FF80((_DWORD *)(v3 + 356), (int)v50); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 356) + 240))(0); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 356) + 540))( *(_DWORD *)(*v82[9] + 20), *(_DWORD *)(*v82[9] + 24)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 356) + 520))(0); *(_BYTE *)(*(_DWORD *)(v3 + 356) + 364) = 1; v51 = *(_DWORD *)(v3 + 356); *(_DWORD *)(v51 + 396) = 600; *(_DWORD *)(v51 + 392) = 20; v52 = *(_DWORD *)(v3 + 356); *(_DWORD *)(v52 + 400) = 20; *(_DWORD *)(v52 + 404) = 400; v53 = *(_DWORD *)(v3 + 356); (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v53 + 256))(*(_DWORD *)(v3 + 356), 0); v54 = sub_43D0D0(1u); v55 = sub_58E5D0(v54, 4, 4, 0); sub_56FF80((_DWORD *)(v3 + 344), (int)v55); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v3 + 344) + 232))(*(_DWORD *)(v3 + 344) + 232, v3 + 232); sub_58DFD0(*(_DWORD **)(v3 + 344)); v56 = sub_40A910(-1979460622); v57 = sub_58E290(v56, 0, 0, 0, 0, 0, 0); *((_DWORD *)v57 + 83) = 1014; sub_58E080(*(_DWORD **)(v3 + 344), v53, (int)v57); v58 = sub_40A910(-1793728783); v59 = sub_58E290(v58, 0, 0, 0, 0, 0, 0); *((_DWORD *)v59 + 83) = 1013; sub_58E080(*(_DWORD **)(v3 + 344), v53, (int)v59); sub_58D930(*(_DWORD **)(v3 + 344), 0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 344) + 256))(*(_DWORD *)(v3 + 344), 0); v89 = 1; v60 = (volatile LONG **)(v3 + 520); while ( a3 ) { if ( a3 == 1 ) { if ( !sub_8F71E0(v87, (int)"CharDeBuffBox00", &v79, &v81, &v86, &v83) ) goto LABEL_77; v61 = sub_8FB140(v87, (int)"CharDeBuffBox00", (int)&v84, (int)&v85, 0); } else { if ( a3 != 2 ) goto LABEL_58; if ( !sub_8F71E0(v87, (int)"ChargedBuffBox", &v79, &v81, &v86, &v83) ) goto LABEL_77; v61 = sub_8FB140(v87, (int)"ChargedBuffBox", (int)&v84, (int)&v85, 0); } LABEL_57: v82 = v61; LABEL_58: *(float *)&v62 = COERCE_FLOAT(sub_8F3EB0(v84 + v86 * v89 - v48, v85 - v80, (int)v82, v3, 0, 0)); v63 = *(v60 - 40); v75 = (void *)v62; v76 = (void *)v63; if ( v63 != v62 ) { if ( *(float *)&v63 != 0.0 && !InterlockedDecrement(v63 + 1) && *(float *)&v76 != 0.0 ) (**(void (__stdcall ***)(signed int))v76)(1); v64 = (volatile LONG *)v75; *(v60 - 40) = (volatile LONG *)v75; if ( v64 ) InterlockedIncrement(v64 + 1); } (*(void (__stdcall **)(_DWORD))(**(v60 - 40) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(v60 - 40) + 256))(0); if ( a3 ) { if ( a3 != 1 ) { if ( a3 == 2 ) { v65 = sub_5D1B00((int)v79 + v86 * v89 - v48 + 2, v81 - v80 + 2, v86 - 4, v83 - 4, v3, 0); sub_56FF80(v60, (int)v65); *((_BYTE *)*v60 + 412) = 1; } goto LABEL_72; } v66 = sub_5D1B00((int)v79 + v86 * v89 - v48 + 2, v81 - v80 + 2, v86 - 4, v83 - 4, v3, 0); } else { v66 = sub_5D1B00((int)v79 + v86 * v89 - v48 + 2, v81 - v80 + 2, v86 - 4, v83 - 4, v3, 1); } sub_56FF80(v60, (int)v66); LABEL_72: (*(void (__stdcall **)(_DWORD))(**v60 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v60 + 256))(0); ++v89; ++v60; if ( v89 - 1 >= 40 ) { sub_4EF310((_DWORD *)v3, 20, 1); *(_DWORD *)(v3 + 680) = a3; if ( a3 ) { if ( a3 == 1 ) { (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))( v3, xRight, dword_AC2F78, 0.1, 0.25999999); } else if ( a3 == 2 ) { v67 = 0.28799999; goto LABEL_82; } } else { v67 = 0.22; LABEL_82: v68 = v67; (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))( v3, xRight, dword_AC2F78, 0.1, LODWORD(v68)); } v69 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 520); *(float *)(v3 + 744) = 0.0; v69(v3, 1); v88 = -1; if ( v87 ) { v70 = (void (__thiscall ***)(_DWORD, signed int))v87; if ( !InterlockedDecrement((volatile LONG *)(v87 + 4)) ) { if ( v70 ) (**v70)(v70, 1); } } return 1; } } if ( sub_8F71E0(v87, (int)"CharBuffBox00", &v79, &v81, &v86, &v83) ) { v61 = sub_8FB140(v87, (int)"CharBuffBox00", (int)&v84, (int)&v85, 0); goto LABEL_57; } LABEL_77: v5 = (void (__thiscall ***)(_DWORD, signed int))v87; v88 = -1; if ( v87 && !InterlockedDecrement((volatile LONG *)(v87 + 4)) ) { v6 = v5 == 0; goto LABEL_5; } return 0; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (004F07B0) -------------------------------------------------------- char __thiscall sub_4F07B0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi void **v6; // ST30_4 char *v7; // ST0C_4 const CHAR *v8; // eax char *v9; // eax int v10; // eax void *v11; // esi unsigned int v12; // eax unsigned int v13; // ecx unsigned int v14; // esi unsigned __int8 *v15; // eax int v16; // eax bool v17; // zf signed int v18; // eax void *v19; // eax void *v20; // [esp+10h] [ebp-C4h] unsigned int v21; // [esp+18h] [ebp-BCh] unsigned int v22; // [esp+1Ch] [ebp-B8h] char *v23; // [esp+20h] [ebp-B4h] bool v24; // [esp+27h] [ebp-ADh] void *v25; // [esp+28h] [ebp-ACh] unsigned int v26; // [esp+38h] [ebp-9Ch] unsigned int v27; // [esp+3Ch] [ebp-98h] char v28; // [esp+44h] [ebp-90h] char v29; // [esp+45h] [ebp-8Fh] int v30; // [esp+D0h] [ebp-4h] v4 = this; if ( !a2 ) return 0; v28 = 0; memset(&v29, 0, 0x7Fu); v6 = (void **)v4[a4 + 130]; v7 = sub_4EF930(&v28, a3); v8 = sub_40C190(-330414791); v9 = sub_7549E0("%s\n\n%s: %s", a2 + 70, v8, v7); sub_8F2EA0(v6, v9); *(_DWORD *)(v4[a4 + 130] + 272) = dword_AD01E8; sub_5D0EB0((_DWORD *)v4[a4 + 130], a2 + 38, *(_DWORD *)(a2 + 34)); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[a4 + 130] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[a4 + 130] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[a4 + 130] + 248))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[a4 + 90] + 256))(1); v10 = *(_DWORD *)(dword_ACD9C8 + 56); v23 = (char *)(a2 + 2); if ( v10 ) v22 = *(_DWORD *)(v10 + 40); else v22 = 0; v21 = 0; if ( v22 <= 0 ) { LABEL_20: v19 = 0; } else { while ( 1 ) { v11 = (void *)sub_7474E0((_DWORD *)(dword_ACD9C8 + 4), v21); v20 = v11; v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4018E0(&v25, v11, strlen((const char *)v11)); v12 = strlen(v23); v13 = v26; v14 = v12; if ( v26 >= v12 ) v13 = v12; v15 = (unsigned __int8 *)v25; if ( v27 < 0x10 ) v15 = (unsigned __int8 *)&v25; v16 = sub_40C0B0(v15, (unsigned __int8 *)v23, v13); v17 = v16 == 0; if ( !v16 ) { if ( v26 >= v14 ) v18 = v26 != v14; else v18 = -1; v17 = v18 == 0; } v24 = v17; v30 = -1; if ( v27 >= 0x10 ) operator delete(v25); v27 = 15; v26 = 0; LOBYTE(v25) = 0; if ( v24 ) break; if ( ++v21 >= v22 ) goto LABEL_20; } v19 = v20; } *(_BYTE *)(v4[a4 + 130] + 382) = v19 != 0; *(_DWORD *)(v4[a4 + 130] + 416) = a3; return 1; } // ACD9C8: using guessed type int dword_ACD9C8; // AD01E8: using guessed type int dword_AD01E8; //----- (004F0A80) -------------------------------------------------------- void __thiscall sub_4F0A80(_DWORD *this, void *a2) { _DWORD *v2; // ebx int *v3; // edi int *v4; // [esp+10h] [ebp-30h] void *v5; // [esp+14h] [ebp-2Ch] int v6; // [esp+24h] [ebp-1Ch] unsigned int v7; // [esp+28h] [ebp-18h] int v8; // [esp+3Ch] [ebp-4h] v2 = this; if ( a2 ) { v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, a2, strlen((const char *)a2)); v8 = 0; v3 = *sub_96AAE0(v2 + 187, &v4, (int)&v5); v8 = -1; if ( v7 >= 0x10 ) operator delete(v5); if ( v3 != (int *)v2[188] ) sub_484500(v2 + 187, (int *)&v4, (int)v3); } } //----- (004F0B50) -------------------------------------------------------- int *__thiscall sub_4F0B50(_DWORD *this) { _DWORD *v1; // edi int *result; // eax int v3; // esi int v4; // ecx int v5; // eax int j; // eax int i; // eax char v8; // [esp+8h] [ebp-4h] v1 = this; result = (int *)this[188]; v3 = *result; if ( (int *)*result != result ) { do { v4 = v3; if ( !*(_BYTE *)(v3 + 45) ) { v5 = *(_DWORD *)(v3 + 8); if ( *(_BYTE *)(v5 + 45) ) { for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD *)(i + 8) ) break; v3 = i; } v3 = i; } else { v3 = *(_DWORD *)(v3 + 8); for ( j = *(_DWORD *)v5; !*(_BYTE *)(j + 45); j = *(_DWORD *)j ) v3 = j; } } result = sub_484500(v1 + 187, (int *)&v8, v4); } while ( v3 != v1[188] ); } return result; } //----- (004F0BD0) -------------------------------------------------------- void __thiscall sub_4F0BD0(_DWORD *this, void *a2) { _DWORD *v2; // edi int *v3; // edi _DWORD *v4; // esi char *v5; // eax int v6; // [esp+10h] [ebp-5Ch] char v7; // [esp+14h] [ebp-58h] int **v8; // [esp+18h] [ebp-54h] _DWORD *v9; // [esp+1Ch] [ebp-50h] void *v10; // [esp+20h] [ebp-4Ch] int v11; // [esp+30h] [ebp-3Ch] unsigned int v12; // [esp+34h] [ebp-38h] char v13; // [esp+3Ch] [ebp-30h] void *v14; // [esp+40h] [ebp-2Ch] int v15; // [esp+50h] [ebp-1Ch] unsigned int v16; // [esp+54h] [ebp-18h] int v17; // [esp+68h] [ebp-4h] v2 = this; v8 = (int **)this; if ( a2 ) { v12 = 15; v11 = 0; LOBYTE(v10) = 0; v13 = 0; v16 = 15; v17 = 0; v15 = 0; LOBYTE(v14) = 0; sub_4018E0(&v14, a2, strlen((const char *)a2)); LOBYTE(v17) = 1; v9 = v2 + 187; v3 = *sub_96AAE0(v2 + 187, (int **)&v7, (int)&v14); LOBYTE(v17) = 0; if ( v16 >= 0x10 ) operator delete(v14); if ( v3 == v8[188] ) { v16 = 15; v15 = 0; LOBYTE(v14) = 0; sub_4018E0(&v14, a2, strlen((const char *)a2)); LOBYTE(v17) = 2; sub_406450(&v10, &v14); LOBYTE(v17) = 0; if ( v16 >= 0x10 ) operator delete(v14); v4 = v9; v13 = 0; v5 = sub_4F2000(v9, (char *)&v10); sub_7478C0(v4, (int)&v6, v5, 0); } else { *((_BYTE *)v3 + 40) = 0; } if ( v12 >= 0x10 ) operator delete(v10); } } //----- (004F0D20) -------------------------------------------------------- void __thiscall sub_4F0D20(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx __time64_t v4; // ST08_8 __time64_t v5; // rax double v6; // st7 void *v7; // esi _DWORD *v8; // eax int *v9; // edi int v10; // eax _DWORD *v11; // edi int v12; // ST0C_4 int v13; // ST08_4 char *v14; // eax char *v15; // eax int v16; // ST08_4 _DWORD *v17; // ebx char *v18; // eax char *v19; // eax signed int v20; // [esp-4h] [ebp-58h] char v21; // [esp+10h] [ebp-44h] double v22; // [esp+14h] [ebp-40h] int v23; // [esp+1Ch] [ebp-38h] struct tm Tm; // [esp+20h] [ebp-34h] int v25; // [esp+50h] [ebp-4h] v3 = this; v23 = a2; HIDWORD(v22) = a3; if ( a2 ) { if ( a3 ) { qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v4 = _mktime64(&Tm); v5 = sub_4EF220((unsigned int *)(HIDWORD(v22) + 10)); v6 = _difftime64(v5, v4); v22 = v6; if ( v6 <= 3600.0 && v6 > 2.0 ) { v7 = (void *)(v23 + 2); v8 = sub_4019E0(&Tm.tm_hour, (void *)(v23 + 2)); v25 = 0; v9 = *sub_96AAE0(v3 + 187, (int **)&v21, (int)v8); v25 = -1; sub_636A10(&Tm.tm_hour); v23 = (signed int)(v22 / 60.0); v10 = sub_40C8D0(v7); HIDWORD(v22) = v10; if ( v10 ) { switch ( v23 ) { case 5: if ( v9 != (int *)v3[188] ) { v11 = (_DWORD *)v3[74]; v12 = v23; v13 = v10 + 34; v14 = (char *)sub_40A910(373291836); v15 = sub_7549E0(v14, v13, v12); sub_492060(v11, (int)v15); sub_4F0A80(v3, v7); } return; case 60: if ( v9 == (int *)v3[188] ) { sub_4F0BD0(v3, v7); v10 = HIDWORD(v22); } if ( !*((_BYTE *)v9 + 40) ) { v20 = 60; LABEL_19: v16 = v10 + 34; *((_BYTE *)v9 + 40) = 1; v17 = (_DWORD *)v3[74]; v18 = (char *)sub_40A910(373291836); v19 = sub_7549E0(v18, v16, v20); sub_492060(v17, (int)v19); return; } break; case 30: if ( v9 == (int *)v3[188] ) { sub_4F0BD0(v3, v7); v10 = HIDWORD(v22); } if ( !*((_BYTE *)v9 + 40) ) { v20 = 30; goto LABEL_19; } break; default: if ( v9 == (int *)v3[188] ) sub_4F0BD0(v3, v7); else *((_BYTE *)v9 + 40) = 0; break; } } } } } } //----- (004F0F10) -------------------------------------------------------- void __thiscall sub_4F0F10(_DWORD *this, int *a2) { int (__thiscall **v2)(void *, char); // eax int *v3; // edi int (__thiscall *v4)(void *, char); // eax __int16 v5; // bx unsigned int v6; // esi int v7; // eax char *v8; // esi int v9; // ebx int v10; // [esp+0h] [ebp-Ch] int (__thiscall **v11)(void *, char); // [esp+4h] [ebp-8h] _DWORD *v12; // [esp+8h] [ebp-4h] int v13; // [esp+14h] [ebp+8h] v12 = this; v2 = sub_6F2B00()[1]; if ( v2 ) { v3 = a2; while ( *v3 < 40 ) { v11 = (int (__thiscall **)(void *, char))*v2; v4 = v2[2]; v13 = (int)v4; if ( v4 ) { v5 = *((_WORD *)v4 + 2); v6 = 0; if ( sub_419A40() ) { while ( 1 ) { v7 = sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v6); if ( v7 ) { if ( *(_WORD *)v7 == v5 ) break; } if ( ++v6 >= sub_419A40() ) goto LABEL_18; } v8 = (char *)(v7 + 2); v9 = sub_4F1CA0((char *)(v7 + 2)); v10 = sub_4F1C20(v8); if ( v12[172] - 1 >= (unsigned int)*v3 ) { if ( v9 && sub_4F07B0(v12, v9, v13, *v3) == 1 ) ++*v3; if ( v10 ) sub_4F0D20(v12, v10, v13); } else { (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v12[*v3 + 90] + 256))(v12[*v3 + 90], 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v12[*v3 + 130] + 256))(0); ++*v3; } } } LABEL_18: if ( !v11 ) break; v2 = v11; } } } // AC9CE0: using guessed type int dword_AC9CE0; //----- (004F1020) -------------------------------------------------------- LONG __thiscall sub_4F1020(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ST0C_4 int v3; // ST0C_4 int v4; // ST08_4 int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi char v11; // [esp+10h] [ebp-18h] _DWORD *v12; // [esp+14h] [ebp-14h] _DWORD *v13; // [esp+18h] [ebp-10h] int v14; // [esp+24h] [ebp-4h] v1 = this; v13 = this; *this = &StatusBuffWin::`vftable'; this[58] = &StatusBuffWin::`vftable'; v2 = (_DWORD *)this[86]; v14 = 9; sub_8F9E00(&unk_BA6B10, v2); v12 = v1 + 187; v3 = v1[188]; v4 = *(_DWORD *)v1[188]; LOBYTE(v14) = 10; sub_4847E0(v1 + 187, (int *)&v11, v4, v3); operator delete((void *)v1[188]); LOBYTE(v14) = 7; sub_85B2F0(v1 + 176); v5 = v1[175]; LOBYTE(v14) = 6; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[174]; LOBYTE(v14) = 5; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[173]; LOBYTE(v14) = 4; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); LOBYTE(v14) = 3; `eh vector destructor iterator'(v1 + 130, 4u, 40, sub_410C00); LOBYTE(v14) = 2; `eh vector destructor iterator'(v1 + 90, 4u, 40, sub_410C00); v8 = v1[89]; LOBYTE(v14) = 1; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[86]; LOBYTE(v14) = 0; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v14 = -1; return sub_8F10F0(v1); } // 9BE7DC: using guessed type void *StatusBuffWin::`vftable'; // 9BE7FC: using guessed type void *StatusBuffWin::`vftable'; //----- (004F11D0) -------------------------------------------------------- int __thiscall sub_4F11D0(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax int result; // eax signed int v6; // eax signed int v7; // eax signed int v8; // eax double v9; // st7 double v10; // st6 _BYTE *v11; // ecx double v12; // st6 int v13; // eax int v14; // eax bool v15; // zf float v16; // [esp+18h] [ebp-4h] v2 = this; v3 = this[170]; if ( v3 ) { v4 = v3 - 1; if ( v4 ) { result = v4 - 1; if ( !result ) { v6 = (*(int (**)(void))(*this + 164))(); v16 = *(float *)&v6; flt_B920A9 = (double)v6 / (double)(unsigned int)xRight; result = (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2); v16 = *(float *)&result; flt_B920AD = (double)result / (double)(unsigned int)dword_AC2F78; } } else { v7 = (*(int (**)(void))(*this + 164))(); v16 = *(float *)&v7; flt_B92095 = (double)v7 / (double)(unsigned int)xRight; result = (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2); v16 = *(float *)&result; flt_B92099 = (double)result / (double)(unsigned int)dword_AC2F78; } } else { v8 = (*(int (**)(void))(*this + 164))(); v16 = *(float *)&v8; flt_B92089 = (double)v8 / (double)(unsigned int)xRight; result = (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2); v16 = *(float *)&result; flt_B9208D = (double)result / (double)(unsigned int)dword_AC2F78; } if ( !*((_BYTE *)v2 + 686) ) goto LABEL_33; if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[89] + 332))(pt.x, pt.y) ) { if ( *((float *)v2 + 184) > 0.0 ) *((float *)v2 + 184) = *((float *)v2 + 184) - flt_ACCFD0 * 10.0; if ( *((float *)v2 + 184) <= 0.0 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[89] + 256))(1); v9 = 1.0; if ( *((float *)v2 + 185) < 1.0 ) { v16 = flt_ACCFD0 + flt_ACCFD0 + *((float *)v2 + 185); v10 = v16; *((float *)v2 + 185) = v16; if ( v10 > 1.0 ) *((float *)v2 + 185) = 1.0; if ( *((float *)v2 + 185) < 1.0 ) { v16 = flt_BA45B8 * *((float *)v2 + 185); v16 = sin(v16); v9 = v16; } LABEL_23: v13 = v2[175]; v16 = v9; *(float *)(v13 + 84) = v16; ++*(_DWORD *)(v13 + 88); goto LABEL_25; } } } else { v11 = (_BYTE *)v2[89]; if ( v11[365] ) goto LABEL_25; v9 = 0.0; if ( *((float *)v2 + 185) > 0.0 ) { v16 = *((float *)v2 + 185) - (flt_ACCFD0 + flt_ACCFD0); v12 = v16; *((float *)v2 + 185) = v16; if ( v12 <= 0.0 ) { *((float *)v2 + 185) = 0.0; *((float *)v2 + 184) = 1.0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 256))(0); v9 = 0.0; } if ( v9 < *((float *)v2 + 185) ) { v16 = flt_BA45B8 * *((float *)v2 + 185); v16 = sin(v16); v9 = v16; } goto LABEL_23; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 256))(0); v14 = v2[175]; *(float *)(v14 + 84) = 0.0; ++*(_DWORD *)(v14 + 88); } LABEL_25: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[89] + 276))(*(float *)(v2[175] + 84)); v15 = v2[170] == 2; v16 = 0.0; if ( v15 ) { if ( a2 > *((float *)v2 + 186) + 10.0 ) { sub_4EF290((_DWORD **)v2); sub_4F0F10(v2, (int *)&v16); *((float *)v2 + 186) = a2; } } else { sub_4EF290((_DWORD **)v2); sub_64F860(dword_AD8EBC); if ( v2[170] ) { sub_4EF430((char *)v2, dword_AD8EBC, 4, (unsigned int *)&v16); } else { sub_4EF430((char *)v2, dword_AD8EBC, 1, (unsigned int *)&v16); sub_4EF430((char *)v2, dword_AD8EBC, 2, (unsigned int *)&v16); sub_4EF430((char *)v2, dword_AD8EBC, 3, (unsigned int *)&v16); sub_4EF430((char *)v2, dword_AD8EBC, 0, (unsigned int *)&v16); } } result = LODWORD(v16); if ( v2[172] < LODWORD(v16) ) { *(_WORD *)(v2[173] + 28) &= 0xFFFEu; return result; } LABEL_33: *(_WORD *)(v2[173] + 28) |= 1u; return result; } // ACCFD0: using guessed type float flt_ACCFD0; // B92089: using guessed type float flt_B92089; // B9208D: using guessed type float flt_B9208D; // B92095: using guessed type float flt_B92095; // B92099: using guessed type float flt_B92099; // B920A9: using guessed type float flt_B920A9; // B920AD: using guessed type float flt_B920AD; // BA45B8: using guessed type float flt_BA45B8; //----- (004F15E0) -------------------------------------------------------- void __userpurge sub_4F15E0(int a1@, double a2@, int a3, int a4, int a5) { int v5; // edi int v6; // eax int v7; // eax _DWORD *v8; // esi int (__thiscall *v9)(int); // edx int v10; // eax int v11; // ebx int v12; // eax int v13; // esi signed int v14; // ebx bool v15; // zf int v16; // esi signed int v17; // ebx v5 = a1; switch ( a3 ) { case 5: if ( sub_4030A0((_DWORD *)(a1 - 232), a2, pt.x, pt.y) ) *(_BYTE *)(v5 + 452) = 1; break; case 6: if ( sub_4030A0((_DWORD *)(a1 - 232), a2, pt.x, pt.y) ) { if ( *(_BYTE *)(v5 + 452) ) { (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v5 + 112) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 112)); } *(_BYTE *)(v5 + 452) = 0; } break; case 14: v6 = *(_DWORD *)(a1 + 124); if ( v6 ) v7 = v6 + 232; else v7 = 0; if ( a5 == v7 ) { v8 = (_DWORD *)a4; *(_BYTE *)(a1 + 453) = 1; if ( v8[2] && *v8 ) { v9 = *(int (__thiscall **)(int))(*(_DWORD *)(a1 - 232) + 164); a4 = *(_DWORD *)(a1 - 232); v10 = v9(a1 - 232); (*(void (__thiscall **)(int, int))(a4 + 172))(v5 - 232, *v8 + v10); } if ( v8[3] && v8[1] ) { v11 = *(_DWORD *)(v5 - 232); v12 = (*(int (__thiscall **)(int))(v11 + 168))(v5 - 232); (*(void (__thiscall **)(int, int))(v11 + 176))(v5 - 232, v8[1] + v12); } } break; case 15: if ( *(_DWORD *)a4 == 1013 ) { if ( !*(_BYTE *)(a1 + 454) ) { v16 = a1 + 288; v17 = 40; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v16 - 160) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v16 + 256))(1); v16 += 4; --v17; } while ( v17 ); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 + 124) + 256))(1); v15 = *(_DWORD *)(v5 + 448) == 2; *(_BYTE *)(v5 + 454) = 1; if ( v15 ) { sub_4EF290((_DWORD **)(v5 - 232)); a4 = 0; sub_4F0F10((_DWORD *)(v5 - 232), &a4); } } } else if ( *(_DWORD *)a4 == 1014 ) { if ( *(_BYTE *)(a1 + 454) ) { v13 = a1 + 288; v14 = 40; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 - 160) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 256))(0); v13 += 4; --v14; } while ( v14 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 124) + 256))(0); v15 = *(_DWORD *)(v5 + 448) == 2; *(_BYTE *)(v5 + 454) = 0; if ( v15 ) sub_4EF290((_DWORD **)(v5 - 232)); } } break; default: return; } } //----- (004F1860) -------------------------------------------------------- char *__thiscall sub_4F1860(char *this) { char *v1; // esi _DWORD *v2; // eax int *v3; // ebx int v4; // edi int v5; // edi int v6; // edi int v7; // edi void **v9; // [esp+10h] [ebp-24h] char *v10; // [esp+1Ch] [ebp-18h] char *v11; // [esp+20h] [ebp-14h] int v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v1 = this; v10 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &StatusBuffWin::`vftable'; *((_DWORD *)v1 + 58) = &StatusBuffWin::`vftable'; v13 = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 89) = 0; `eh vector constructor iterator'( v1 + 360, 4u, 40, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 520, 4u, 40, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 173) = 0; *((_DWORD *)v1 + 174) = 0; *((_DWORD *)v1 + 175) = 0; sub_85B2B0((_DWORD *)v1 + 176); *((_DWORD *)v1 + 176) = &NiAlphaProperty::`vftable'; *((_WORD *)v1 + 366) = 236; v1[734] = 0; LOBYTE(v13) = 8; *((_DWORD *)v1 + 189) = 0; v2 = operator new(0x30u); if ( !v2 ) { v11 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v11); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 188) = v2; *v2 = v2; *(_DWORD *)(*((_DWORD *)v1 + 188) + 4) = *((_DWORD *)v1 + 188); *(_DWORD *)(*((_DWORD *)v1 + 188) + 8) = *((_DWORD *)v1 + 188); *(_BYTE *)(*((_DWORD *)v1 + 188) + 44) = 1; *(_BYTE *)(*((_DWORD *)v1 + 188) + 45) = 1; *((float *)v1 + 184) = 1.0; LOBYTE(v13) = 9; v3 = (int *)(v1 + 520); *((float *)v1 + 185) = 0.0; v12 = 40; do { v4 = *(v3 - 40); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(v3 - 40) = 0; } v5 = *v3; if ( *v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v3 = 0; } ++v3; --v12; } while ( v12 ); v6 = *((_DWORD *)v1 + 86); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v1 + 86) = 0; } v7 = *((_DWORD *)v1 + 89); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v1 + 89) = 0; } *(_WORD *)(v1 + 685) = 256; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9BE7DC: using guessed type void *StatusBuffWin::`vftable'; // 9BE7FC: using guessed type void *StatusBuffWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004F1AB0) -------------------------------------------------------- volatile LONG *__cdecl sub_4F1AB0(int a1, int a2) { void *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x2FCu); v6 = v2; v7 = 0; if ( v2 ) v3 = (volatile LONG *)sub_4F1860((char *)v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (004F1BE0) -------------------------------------------------------- int sub_4F1BE0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA64 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA64: using guessed type int dword_ACDA64; //----- (004F1C00) -------------------------------------------------------- int sub_4F1C00() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA60 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA60: using guessed type int dword_ACDA60; //----- (004F1C20) -------------------------------------------------------- int __cdecl sub_4F1C20(char *a1) { size_t v2; // edi unsigned int v3; // esi const char *v4; // eax if ( !a1 ) return 0; v2 = strlen(a1); v3 = 0; if ( !sub_4F1BE0() ) return 0; while ( 1 ) { v4 = (const char *)(sub_7474E0((_DWORD *)(dword_ACDA64 + 4), v3) + 2); if ( v4 ) { if ( !strncmp(v4, a1, v2) ) break; } if ( ++v3 >= sub_4F1BE0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA64 + 4), v3); } // ACDA64: using guessed type int dword_ACDA64; //----- (004F1CA0) -------------------------------------------------------- int __cdecl sub_4F1CA0(char *a1) { size_t v2; // edi unsigned int v3; // esi const char *v4; // eax if ( !a1 ) return 0; v2 = strlen(a1); v3 = 0; if ( !sub_4F1C00() ) return 0; while ( 1 ) { v4 = (const char *)(sub_7474E0((_DWORD *)(dword_ACDA60 + 4), v3) + 2); if ( v4 ) { if ( !strncmp(v4, a1, v2) ) break; } if ( ++v3 >= sub_4F1C00() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA60 + 4), v3); } // ACDA60: using guessed type int dword_ACDA60; //----- (004F1D20) -------------------------------------------------------- int *__thiscall sub_4F1D20(_DWORD *this, int a2) { int *result; // eax int *v3; // edi unsigned __int8 *v4; // edx unsigned int v5; // ebx unsigned __int8 *v6; // eax unsigned int v7; // esi unsigned int v8; // ecx int v9; // eax bool v10; // sf unsigned int v11; // [esp+4h] [ebp-8h] int *v12; // [esp+8h] [ebp-4h] result = (int *)this[1]; v3 = (int *)result[1]; v12 = (int *)this[1]; if ( !*((_BYTE *)v3 + 45) ) { v4 = (unsigned __int8 *)a2; v5 = *(_DWORD *)(a2 + 16); v11 = *(_DWORD *)(a2 + 20); while ( 1 ) { v6 = (unsigned __int8 *)(v3 + 3); if ( v11 >= 0x10 ) v4 = *(unsigned __int8 **)v4; v7 = v3[7]; v8 = v3[7]; if ( v7 >= v5 ) v8 = v5; if ( (unsigned int)v3[8] >= 0x10 ) v6 = *(unsigned __int8 **)v6; v9 = sub_40C0B0(v6, v4, v8); v10 = v9 < 0; if ( !v9 ) { if ( v7 < v5 ) goto LABEL_14; LOBYTE(v9) = v7 != v5; v10 = v9 < 0; } if ( v10 ) { LABEL_14: v3 = (int *)v3[2]; goto LABEL_16; } v12 = v3; v3 = (int *)*v3; LABEL_16: if ( *((_BYTE *)v3 + 45) ) return v12; v4 = (unsigned __int8 *)a2; } } return result; } //----- (004F1DB0) -------------------------------------------------------- int __thiscall sub_4F1DB0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x7FFFFFE ) { if ( *((_DWORD *)a5 + 8) >= 0x10u ) operator delete(*((void **)a5 + 3)); *((_DWORD *)a5 + 8) = 15; *((_DWORD *)a5 + 7) = 0; *((_BYTE *)a5 + 12) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 44) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 44) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 45) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 45) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_53: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v13 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 44) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 45) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 45) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_53; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v22 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 44) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 44) = 1; return result; } //----- (004F2000) -------------------------------------------------------- char *__thiscall sub_4F2000(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v6; // [esp+0h] [ebp-38h] void **v7; // [esp+10h] [ebp-28h] void *v8; // [esp+1Ch] [ebp-1Ch] char *v9; // [esp+20h] [ebp-18h] void *v10; // [esp+24h] [ebp-14h] int *v11; // [esp+28h] [ebp-10h] int v12; // [esp+34h] [ebp-4h] v11 = &v6; v2 = this; v3 = (char *)operator new(0x30u); v10 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a2); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v12 = 0; v9 = v3 + 12; v8 = v3 + 12; LOBYTE(v12) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_4017F0((const void **)v3 + 3, (const void **)v4, 0, (void *)0xFFFFFFFF); v3[40] = v4[28]; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004F20E0) -------------------------------------------------------- void *__thiscall sub_4F20E0(void *this, char a2) { void *v2; // esi v2 = this; sub_4F1020(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004F2110) -------------------------------------------------------- char __thiscall sub_4F2110(volatile LONG *this) { int *v1; // esi volatile LONG *v2; // eax v1 = (int *)this; sub_8F2BC0(this, 1, 0, 0); v2 = (volatile LONG *)v1[87]; if ( v2 ) LOBYTE(v2) = sub_8F2BC0(v2, 5, v1[88], v1[86]); return (char)v2; } //----- (004F21F0) -------------------------------------------------------- int __thiscall sub_4F21F0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx const char *v4; // eax unsigned int v5; // eax unsigned int v6; // ecx char v8; // [esp+4h] [ebp-24h] v2 = this; v3 = this[93]; v2[86] = 0; v4 = (const char *)(*(int (**)(void))(*(_DWORD *)v3 + 452))(); if ( v4 && *v4 ) v2[86] = atoi(v4); v5 = a2 + 10 * v2[86]; v6 = v2[90]; v2[86] = v5; if ( v5 > v6 ) v2[86] = v6; sprintf(&v8, "%u", v2[86]); return (*(int (__stdcall **)(char *))(*(_DWORD *)v2[93] + 464))(&v8); } //----- (004F22A0) -------------------------------------------------------- int __thiscall sub_4F22A0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx const char *v3; // eax unsigned int v4; // ecx unsigned int v5; // eax char v7; // [esp+4h] [ebp-24h] v1 = this; v2 = this[93]; v1[86] = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); if ( v3 && *v3 ) v1[86] = atoi(v3); v4 = v1[90]; v5 = 100 * v1[86]; v1[86] = v5; if ( v5 > v4 ) v1[86] = v4; sprintf(&v7, "%u", v1[86]); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[93] + 464))(&v7); } //----- (004F2340) -------------------------------------------------------- int __thiscall sub_4F2340(_DWORD *this) { _DWORD *v1; // esi int v2; // ST08_4 char v4; // [esp+4h] [ebp-24h] v1 = this; v2 = this[90]; this[86] = v2; sprintf(&v4, "%u", v2); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[93] + 464))(&v4); } //----- (004F23A0) -------------------------------------------------------- int __thiscall sub_4F23A0(_DWORD *this) { _DWORD *v1; // esi char v3; // [esp+4h] [ebp-24h] v1 = this; this[86] = 0; sprintf(&v3, "%u", 0); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[93] + 464))(&v3); } //----- (004F2400) -------------------------------------------------------- int __thiscall sub_4F2400(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx const char *v3; // eax unsigned int v4; // eax char v6; // [esp+4h] [ebp-24h] v1 = this; v2 = this[93]; v1[86] = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); if ( v3 && *v3 ) v1[86] = atoi(v3); v4 = v1[90]; if ( ++v1[86] > v4 ) v1[86] = v4; sprintf(&v6, "%u", v1[86]); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[93] + 464))(&v6); } //----- (004F24A0) -------------------------------------------------------- int __thiscall sub_4F24A0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx const char *v3; // eax int v4; // eax char v6; // [esp+4h] [ebp-24h] v1 = this; v2 = this[93]; v1[86] = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); if ( v3 && *v3 ) v1[86] = atoi(v3); v4 = v1[86]; if ( v4 ) v1[86] = v4 - 1; sprintf(&v6, "%u", v1[86]); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[93] + 464))(&v6); } //----- (004F2600) -------------------------------------------------------- LONG __thiscall sub_4F2600(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &CalculatorWin::`vftable'; this[58] = &CalculatorWin::`vftable'; v2 = this[93]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[93] = 0; } v3 = v1[93]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9BEB30: using guessed type void *CalculatorWin::`vftable'; // 9BEB4C: using guessed type void *CalculatorWin::`vftable'; //----- (004F26C0) -------------------------------------------------------- char __thiscall sub_4F26C0(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi char *v6; // eax volatile LONG **v7; // eax volatile LONG **v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // edi volatile LONG *v11; // edi int v12; // ST64_4 int v13; // ST60_4 int v14; // eax volatile LONG *v15; // edi const CHAR *v16; // eax volatile LONG **v17; // edi volatile LONG *v18; // edi int v19; // ST64_4 int v20; // ST60_4 int v21; // eax volatile LONG *v22; // edi const CHAR *v23; // eax int v24; // edi volatile LONG **v25; // eax volatile LONG *v26; // ST68_4 int v27; // ST64_4 int v28; // ST60_4 int v29; // eax volatile LONG *v30; // edi volatile LONG **v31; // eax volatile LONG *v32; // ST68_4 int v33; // ST64_4 int v34; // ST60_4 int v35; // eax volatile LONG *v36; // edi volatile LONG **v37; // eax volatile LONG *v38; // ST68_4 int v39; // ST64_4 int v40; // ST60_4 int v41; // eax volatile LONG *v42; // edi volatile LONG **v43; // eax volatile LONG *v44; // ST68_4 int v45; // ST64_4 int v46; // ST60_4 int v47; // eax volatile LONG *v48; // edi int v49; // edi volatile LONG *v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // eax volatile LONG **v53; // edi volatile LONG **v54; // edi void (__thiscall ***v55)(_DWORD, signed int); // esi int v56; // [esp+84h] [ebp-4Ch] int v57; // [esp+88h] [ebp-48h] int i; // [esp+8Ch] [ebp-44h] int v59; // [esp+90h] [ebp-40h] int v60; // [esp+94h] [ebp-3Ch] int v61; // [esp+98h] [ebp-38h] char v62; // [esp+9Ch] [ebp-34h] int v63; // [esp+CCh] [ebp-4h] v2 = (int)this; v61 = 0; v63 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) goto LABEL_23; i = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\Calculator.nif"); sub_8F66B0(v6, (int)&v61, i); if ( !v61 ) return 0; v7 = sub_8FB140(v61, (int)"Frame", (int)&v59, (int)&v60, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"CalculatorWin", 0) ) goto LABEL_23; v8 = sub_8FB140(v61, (int)"Panel01", (int)&v59, (int)&v60, v3); sub_8F3EB0(v59, v60, (int)v8, v2, 0, 0); v9 = sub_8FB140(v61, (int)"Panel02", (int)&v59, (int)&v60, v3); sub_8F3EB0(v59, v60, (int)v9, v2, 0, 0); v10 = sub_8FB140(v61, (int)"OkNor", (int)&v59, (int)&v60, v3); sub_8FB650(v10, v61, (int)"OkClick"); sub_8FB650(v10, v61, (int)"OkOver"); v11 = sub_8FE0F0(v59, v60, (int)v10, v2, 0, 0, 0); v12 = sub_421050(0); v13 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 148))(v11); v14 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 144))(v11); v15 = sub_8F4A20(0, 1, v14, v13, v12, (int)v11, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); i = *v15 + 472; v16 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))i)(v15, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v17 = sub_8FB140(v61, (int)"CancelNor", (int)&v59, (int)&v60, v3); sub_8FB650(v17, v61, (int)"CancelClick"); sub_8FB650(v17, v61, (int)"CancelOver"); v18 = sub_8FE0F0(v59, v60, (int)v17, v2, 0, 0, 0); v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v18 + 148))(v18); v21 = (*(int (__thiscall **)(volatile LONG *))(*v18 + 144))(v18); v22 = sub_8F4A20(0, 1, v21, v20, v19, (int)v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); i = *v22 + 472; v23 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))i)(v22, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v24 = 0; for ( i = 0; ; v24 = i ) { sprintf(&v62, "CalNum%02d", v24); v25 = sub_8FB140(v61, (int)&v62, (int)&v59, (int)&v60, v3); v26 = sub_8FE0F0(v59, v60, (int)v25, v2, v24 + 2, 0, 0); v27 = sub_421050(2); v28 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 148))(v26); v29 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 144))(v26); v30 = sub_8F4A20(0, 1, v29, v28, v27, (int)v26, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 488))(v30, 5); sprintf(&v62, "%d", i); (*(void (__thiscall **)(volatile LONG *, char *))(*v30 + 472))(v30, &v62); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); (*(void (__thiscall **)(volatile LONG *, float *))(*v30 + 468))(v30, &flt_AA8C78); if ( ++i >= 10 ) break; } v31 = sub_8FB140(v61, (int)"CalNum000", (int)&v59, (int)&v60, v3); v32 = sub_8FE0F0(v59, v60, (int)v31, v2, 13, 0, 0); v33 = sub_421050(0); v34 = (*(int (__thiscall **)(volatile LONG *))(*v32 + 148))(v32); v35 = (*(int (__thiscall **)(volatile LONG *))(*v32 + 144))(v32); v36 = sub_8F4A20(0, 1, v35, v34, v33, (int)v32, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 488))(v36, 5); (*(void (__thiscall **)(volatile LONG *, const char *))(*v36 + 472))(v36, "00"); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); (*(void (__thiscall **)(volatile LONG *, float *))(*v36 + 468))(v36, &flt_AA8C78); v37 = sub_8FB140(v61, (int)"CalMax", (int)&v59, (int)&v60, v3); v38 = sub_8FE0F0(v59, v60, (int)v37, v2, 13, 0, 0); v39 = sub_421050(0); v40 = (*(int (__thiscall **)(volatile LONG *))(*v38 + 148))(v38); v41 = (*(int (__thiscall **)(volatile LONG *))(*v38 + 144))(v38); v42 = sub_8F4A20(0, 1, v41, v40, v39, (int)v38, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); (*(void (__thiscall **)(volatile LONG *, const char *))(*v42 + 472))(v42, "M"); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); (*(void (__thiscall **)(volatile LONG *, float *))(*v42 + 468))(v42, &flt_AA8C78); v43 = sub_8FB140(v61, (int)"CalClear", (int)&v59, (int)&v60, v3); v44 = sub_8FE0F0(v59, v60, (int)v43, v2, 14, 0, 0); v45 = sub_421050(0); v46 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 148))(v44); v47 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 144))(v44); v48 = sub_8F4A20(0, 1, v47, v46, v45, (int)v44, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); (*(void (__thiscall **)(volatile LONG *, const char *))(*v48 + 472))(v48, "C"); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); (*(void (__thiscall **)(volatile LONG *, float *))(*v48 + 468))(v48, &flt_AA8C78); if ( !sub_8F71E0(v61, (int)"CalTex", &v59, &v60, &v57, &v56) ) goto LABEL_23; v49 = sub_421050(0); v56 = *(_DWORD *)(v49 + 384) + 2; v50 = sub_8F4A20(v59, v60 + 2, v57, v56, v49, v2, 0, 0); *(_DWORD *)(v2 + 364) = v50; (*(void (__thiscall **)(volatile LONG *, void *))(*v50 + 472))(v50, &unk_9BEA36); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 364) + 488))(1); v51 = sub_8F4A20(v59, v56 + v60 + 2, v57, v56, v49, v2, 0, 0); *(_DWORD *)(v2 + 368) = v51; (*(void (__thiscall **)(volatile LONG *, void *))(*v51 + 472))(v51, &unk_9BEA37); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); if ( !sub_8F71E0(v61, (int)"CalNumInput", &v59, &v60, &v57, &v56) ) { LABEL_23: v4 = (void (__thiscall ***)(_DWORD, signed int))v61; v63 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v52 = sub_45A900(v59 + 4, v60 + 1, v57 - 8, v56 - 1, v2, 1342185472, 10, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 372), (int)v52); v53 = sub_8FB140(v61, (int)"PlusNor", (int)&v59, (int)&v60, v3); sub_8FB650(v53, v61, (int)"PlusClick"); sub_8FB650(v53, v61, (int)"PlusOver"); sub_8FE0F0(v59, v60, (int)v53, v2, 15, 0, 0); v54 = sub_8FB140(v61, (int)"MinusNor", (int)&v59, (int)&v60, v3); sub_8FB650(v54, v61, (int)"MinusClick"); sub_8FB650(v54, v61, (int)"MinusOver"); sub_8FE0F0(v59, v60, (int)v54, v2, 16, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v63 = -1; if ( v61 ) { v55 = (void (__thiscall ***)(_DWORD, signed int))v61; if ( !InterlockedDecrement((volatile LONG *)(v61 + 4)) ) { if ( v55 ) (**v55)(v55, 1); } } return 1; } // AA8C78: using guessed type float flt_AA8C78; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004F2EE0) -------------------------------------------------------- char __thiscall sub_4F2EE0(volatile LONG *this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 0: result = sub_4F2110(this); break; case 1: result = sub_8F2BC0(this, 1, 0, 0); break; case 2: result = sub_4F21F0(this, 0); break; case 3: result = sub_4F21F0(this, 1); break; case 4: result = sub_4F21F0(this, 2); break; case 5: result = sub_4F21F0(this, 3); break; case 6: result = sub_4F21F0(this, 4); break; case 7: result = sub_4F21F0(this, 5); break; case 8: result = sub_4F21F0(this, 6); break; case 9: result = sub_4F21F0(this, 7); break; case 10: result = sub_4F21F0(this, 8); break; case 11: result = sub_4F21F0(this, 9); break; case 12: result = sub_4F22A0(this); break; case 13: result = sub_4F2340(this); break; case 14: result = sub_4F23A0(this); break; case 15: result = sub_4F2400(this); break; case 16: result = sub_4F24A0(this); break; default: return result; } return result; } //----- (004F2FF0) -------------------------------------------------------- int __cdecl sub_4F2FF0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x178u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CalculatorWin::`vftable'; *(_DWORD *)(v2 + 232) = &CalculatorWin::`vftable'; *(_DWORD *)(v2 + 372) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BEB30: using guessed type void *CalculatorWin::`vftable'; // 9BEB4C: using guessed type void *CalculatorWin::`vftable'; //----- (004F3130) -------------------------------------------------------- void *__thiscall sub_4F3130(void *this, char a2) { void *v2; // esi v2 = this; sub_4F2600(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004F31E0) -------------------------------------------------------- void __thiscall sub_4F31E0(float *this) { this[87] = 0.0; this[88] = 1.0; } //----- (004F3200) -------------------------------------------------------- bool __thiscall sub_4F3200(float *this) { return this[87] > 0.0; } //----- (004F3220) -------------------------------------------------------- char __thiscall sub_4F3220(void *this, int a2, int a3) { int v3; // esi const char *v4; // ebx int v5; // edi char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi int v10; // edi int v11; // ebx volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax void (__thiscall ***v19)(_DWORD, signed int); // esi int v20; // [esp+2Ch] [ebp-14h] int v21; // [esp+30h] [ebp-10h] int v22; // [esp+3Ch] [ebp-4h] v3 = (int)this; v20 = 0; v22 = 0; v4 = "Game\\ProductBar.nif"; if ( !(_BYTE)a3 ) v4 = "Game\\CastingBar.nif"; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, v4); sub_8F66B0(v6, (int)&v20, v5); if ( !v20 ) return 0; v7 = sub_8FB140(v20, (int)"Panel01", (int)&v21, (int)&a3, 0); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v7, 0, a2, (int)"CastingProgressWin", 0) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v20; v22 = -1; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v10 = v21; v11 = a3; v12 = sub_8FB140(v20, (int)"Panel02", (int)&v21, (int)&a3, 0); sub_8F3EB0(v21 - v10, a3 - v11, (int)v12, v3, 0, 0); v13 = sub_8FB140(v20, (int)"Fill_HP", (int)&v21, (int)&a3, 0); v14 = sub_90CB20(v21 - v10, a3 - v11, (int)v13, v3, 2); *(_DWORD *)(v3 + 356) = v14; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v15 = sub_8FB140(v20, (int)"Fill_HP_Start", (int)&v21, (int)&a3, 0); v16 = sub_90CB20(v21 - v10, a3 - v11, (int)v15, v3, 2); *(_DWORD *)(v3 + 360) = v16; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = sub_8FB140(v20, (int)"Fill_HP_End", (int)&v21, (int)&a3, 0); v18 = sub_90CB20(v21 - v10, a3 - v11, (int)v17, v3, 2); *(_DWORD *)(v3 + 364) = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 240))(v3, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); sub_8F2880((_BYTE *)v3, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))( v3, xRight, dword_AC2F78, 0.5, 0.80000001); v22 = -1; if ( v20 ) { v19 = (void (__thiscall ***)(_DWORD, signed int))v20; if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) { if ( v19 ) (**v19)(v19, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004F34B0) -------------------------------------------------------- int __thiscall sub_4F34B0(int this, unsigned int a2, char a3) { int v3; // esi float *v4; // ecx double v5; // st7 int result; // eax v3 = this; *(float *)(this + 344) = flt_ACCFCC; v4 = *(float **)(this + 356); *(float *)(v3 + 348) = (double)a2 / 1000.0; *(float *)(v3 + 352) = 1.0; if ( 1.0 != v4[76] || 0.0 != v4[75] ) { v5 = 0.0; v4[76] = 1.0; v4[75] = *(float *)&v5; sub_49F670(v4); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, 1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 276))(v3, 1.0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 360) + 256))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 364) + 256))(0); *(_BYTE *)(v3 + 368) = a3; *(_BYTE *)(v3 + 369) = 0; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (004F3590) -------------------------------------------------------- void __thiscall sub_4F3590(int this) { int v1; // esi int v2; // ecx float *v3; // ecx v1 = this; *(float *)(this + 348) = 0.0; v2 = *(_DWORD *)(this + 360); *(float *)(v1 + 352) = 1.0; (*(void (__cdecl **)(signed int))(*(_DWORD *)v2 + 256))(1); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v1 + 364) + 256))(1); v3 = *(float **)(v1 + 356); if ( 1.0 != v3[76] || 1.0 != v3[75] ) { v3[76] = 1.0; v3[75] = 1.0; sub_49F670(v3); } } //----- (004F3610) -------------------------------------------------------- void __thiscall sub_4F3610(_BYTE *this, float a2) { double v2; // st7 double v3; // st6 _BYTE *v4; // esi double v5; // rt0 double v6; // st6 double v7; // st7 float v8; // ST04_4 float v9; // ST00_4 double v10; // st7 float v11; // [esp+14h] [ebp+8h] float v12; // [esp+14h] [ebp+8h] float v13; // [esp+14h] [ebp+8h] float v14; // [esp+14h] [ebp+8h] float v15; // [esp+14h] [ebp+8h] v2 = 0.0; v3 = 1.0; v4 = this; if ( !this[369] ) { if ( sub_65B9D0(dword_AD8EBC, 500000) || dword_AD8EBC[2496] ) { v2 = 0.0; v4[369] = 1; *((float *)v4 + 87) = 0.0; v3 = 1.0; *((float *)v4 + 88) = 1.0; } else { v2 = 0.0; v3 = 1.0; } } v5 = v3; v6 = v2; v7 = v5; if ( v6 >= *((float *)v4 + 87) ) { v10 = v6; if ( v6 >= *((float *)v4 + 88) ) { (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); } else { v12 = *((float *)v4 + 88) - (flt_ACCFD0 + flt_ACCFD0); *((float *)v4 + 88) = v12; if ( v12 <= v6 ) *((float *)v4 + 88) = v6; if ( v6 < *((float *)v4 + 88) ) { v13 = *((float *)v4 + 88) * flt_BA45B8; v14 = sin(v13); v10 = v14; } v15 = v10; (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v4 + 276))(v4, LODWORD(v15)); } } else { v11 = (a2 - *((float *)v4 + 86)) / *((float *)v4 + 87); if ( v11 > v7 ) { if ( v4[368] ) { *((float *)v4 + 87) = v6; *((float *)v4 + 88) = v7; } else { v8 = v7; v9 = v7; sub_4F39A0(*((float **)v4 + 89), v9, v8); (*(void (__stdcall **)(signed int))(**((_DWORD **)v4 + 90) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v4 + 91) + 256))(1); } } else { sub_4F39A0(*((float **)v4 + 89), 0.94999999, v11); if ( v11 >= 0.0 ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v4 + 90) + 256))(1); if ( v11 >= 0.949999988079071 ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v4 + 91) + 256))(1); } } } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (004F3800) -------------------------------------------------------- int __cdecl sub_4F3800(int a1, int a2) { void *v2; // eax int v3; // esi void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x174u); v3 = (int)v2; v6 = v2; v7 = 0; if ( v2 ) { Concurrency::overwrite_buffer::overwrite_buffer(v2); *(_DWORD *)v3 = &CastingProgressWin::`vftable'; *(_DWORD *)(v3 + 232) = &CastingProgressWin::`vftable'; *(float *)(v3 + 344) = 3.4028235e38; *(_DWORD *)(v3 + 356) = 0; *(_WORD *)(v3 + 368) = 0; *(float *)(v3 + 348) = 0.0; } else { v3 = 0; } if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v3); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BEDE0: using guessed type void *CastingProgressWin::`vftable'; // 9BEDFC: using guessed type void *CastingProgressWin::`vftable'; //----- (004F3960) -------------------------------------------------------- void *__thiscall sub_4F3960(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CastingProgressWin::`vftable'; *((_DWORD *)this + 58) = &CastingProgressWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BEDE0: using guessed type void *CastingProgressWin::`vftable'; // 9BEDFC: using guessed type void *CastingProgressWin::`vftable'; //----- (004F39A0) -------------------------------------------------------- void __thiscall sub_4F39A0(float *this, float a2, float a3) { double v3; // st7 if ( a2 != this[76] || a3 != this[75] ) { v3 = a3; this[76] = a2; this[75] = *(float *)&v3; sub_49F670(this); } } //----- (004F39F0) -------------------------------------------------------- int __cdecl sub_4F39F0(int a1, char *a2, int a3) { int result; // eax if ( a3 >= 17 ) { if ( (unsigned __int8)a1 == 255 ) result = sprintf(a2, &byte_9BF041); else result = sprintf( a2, "%04d-%02d-%02d %02d:%02d", (unsigned __int8)a1 + 2000, ((unsigned int)a1 >> 8) & 0x1F, ((unsigned int)a1 >> 13) & 0x3F, ((unsigned int)a1 >> 19) & 0x3F, (unsigned int)a1 >> 25); } return result; } //----- (004F3B10) -------------------------------------------------------- int __userpurge sub_4F3B10@(_WORD **a1@, int a2@, _DWORD *a3) { _WORD **v3; // esi _WORD *v4; // ecx int result; // eax unsigned __int16 *v6; // ebx int (__thiscall *v7)(_DWORD *); // eax int *v8; // eax int v9; // edi char *v10; // eax int v11; // [esp-4h] [ebp-24h] char v12; // [esp+8h] [ebp-18h] v3 = a1; v4 = *a1; if ( a3 ) { v11 = a2; v6 = (unsigned __int16 *)a3[29]; if ( v6 ) { sub_5D5EA0((int)v4, (int)a3, *v6); (*(void (__stdcall **)(unsigned __int16 *, int))(*(_DWORD *)v3[1] + 472))(v6 + 190, v11); v7 = *(int (__thiscall **)(_DWORD *))(*a3 + 44); v12 = 0; v8 = (int *)v7(a3); if ( v8 ) sub_4F39F0(*v8, &v12, 18); v9 = *(_DWORD *)v3[2]; v10 = sub_7549E0("~ %s", &v12); result = (*(int (__thiscall **)(_WORD *, char *))(v9 + 472))(v3[2], v10); } else { sub_5D5EA0((int)v4, (int)a3, 0xFFFF); (*(void (__stdcall **)(void *, int))(*(_DWORD *)v3[1] + 472))(&unk_9BF051, v11); result = (*(int (__thiscall **)(_WORD *, void *))(*(_DWORD *)v3[2] + 472))(v3[2], &unk_9BF052); } } else { sub_5D5B70(v4, 0, 1); (*(void (__stdcall **)(void *))(*(_DWORD *)v3[1] + 472))(&unk_9BF04A); result = (*(int (__thiscall **)(_WORD *, void *))(*(_DWORD *)v3[2] + 472))(v3[2], &unk_9BF04B); } return result; } // 4F3B10: could not find valid save-restore pair for ebx //----- (004F3CA0) -------------------------------------------------------- char __thiscall sub_4F3CA0(volatile LONG **this, int a2) { volatile LONG **v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // esi const CHAR *v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax float v12; // esi volatile LONG **v13; // edi signed int v14; // ebx char *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // eax char *v18; // eax volatile LONG *v19; // eax int v20; // eax char *v21; // eax volatile LONG *v22; // esi volatile LONG *v23; // edi const char *v24; // eax volatile LONG *v25; // esi const char *v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // ecx volatile LONG *v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi int v31; // [esp-10h] [ebp-64h] int v32; // [esp-Ch] [ebp-60h] int v33; // [esp-8h] [ebp-5Ch] const char *v34; // [esp-4h] [ebp-58h] int *v35; // [esp+0h] [ebp-54h] float v36; // [esp+4h] [ebp-50h] float v37; // [esp+8h] [ebp-4Ch] int v38[5]; // [esp+1Ch] [ebp-38h] volatile LONG **v39; // [esp+30h] [ebp-24h] int v40; // [esp+34h] [ebp-20h] int v41; // [esp+38h] [ebp-1Ch] int v42; // [esp+3Ch] [ebp-18h] int v43; // [esp+40h] [ebp-14h] int v44; // [esp+44h] [ebp-10h] int v45; // [esp+50h] [ebp-4h] v2 = this; v39 = this; v44 = 0; v3 = dword_BA6BA0; v45 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ComItemWin.nif"); sub_8F66B0(v4, (int)&v44, v3); if ( !v44 ) return 0; v5 = sub_8FB140(v44, (int)"Panel01", (int)&v40, (int)&v42, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"ChargedItemWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v44; v45 = -1; if ( v44 && !InterlockedDecrement((volatile LONG *)(v44 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v38); LOBYTE(v45) = 1; sub_455FF0(v38, (int)v2); sub_456000(v38, v40, v42); sub_456380(v38, v44); sub_456820(v38, (int)"Panel02", 0); sub_4563D0(v38, 10, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v8 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("HelpLinkNor") ) sub_4563D0(v38, 13, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v8); v31 = dword_AA8D98; v32 = dword_AA8D9C; v33 = dword_AA8DA0; v34 = (const char *)dword_AA8DA4; v9 = sub_40C190(1032349563); sub_4566A0(v38, (int)"WinTitle", (int)v9, v31, v32, v33, (int)v34, 5, 0, 3); *(float *)&v10 = COERCE_FLOAT(sub_43D0D0(0x13u)); if ( *(float *)&v10 == 0.0 ) { v37 = 0.0; v36 = COERCE_FLOAT(&v43); v35 = &v41; v34 = "Theme"; } else { v37 = *(float *)&v10; v36 = COERCE_FLOAT(&v43); v35 = &v41; v34 = "Theme"; } v11 = sub_8FB140(v44, (int)v34, (int)v35, SLODWORD(v36), (volatile LONG *)LODWORD(v37)); sub_8F3EB0(v41 - v40, v43 - v42, (int)v11, (int)v2, 0, 0); LODWORD(v12) = 1; v13 = v2 + 91; v14 = 4; do { v37 = 0.0; v36 = v12; v15 = sub_7549E0("Slot%02d", v12); v16 = sub_456820(v38, (int)v15, (volatile LONG *)LODWORD(v37)); v17 = sub_5D6E20(3, 3, (int)v16); LODWORD(v37) = 1; v36 = 0.0; *(v13 - 1) = v17; sub_5D5B70(v17, SLODWORD(v36), SLOBYTE(v37)); v37 = 0.0; v36 = 0.0; v35 = (int *)4; v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = (const char *)dword_AA8C74; v18 = sub_7549E0("ItemTxt%02d", v12); v19 = sub_456980( v38, (int)v18, (int)&unk_9BF053, 0, v31, v32, v33, (int)v34, (int)v35, (volatile LONG *)LODWORD(v36), SLOBYTE(v37)); v37 = 0.0; *v13 = v19; v20 = *((_DWORD *)v19 + 72); v36 = 0.0; v35 = (int *)5; *(_BYTE *)(v20 + 284) = 1; v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = (const char *)dword_AA8C74; v21 = sub_7549E0("ItemUseTerm%02d", v12); v13[1] = sub_456980( v38, (int)v21, (int)&unk_9BF07F, 0, v31, v32, v33, (int)v34, (int)v35, (volatile LONG *)LODWORD(v36), SLOBYTE(v37)); ++LODWORD(v12); v13 += 3; --v14; } while ( v14 ); sub_456820(v38, (int)"Panel03", 0); v22 = (volatile LONG *)sub_43D0D0(0x1Cu); v23 = sub_4563D0(v38, 11, (int)"PrePageNor", (int)"PrePageClick", (int)"PrePageOver", 0, v22); v37 = 8.3775814e25; *((_DWORD *)v23 + 68) = dword_AD01E8; v24 = sub_4090F0(SLODWORD(v37)); sub_8F2EA0((void **)v23, v24); v25 = sub_4563D0(v38, 12, (int)"NextPageNor", (int)"NextPageClick", (int)"NextPageOver", 0, v22); v37 = 1.7053656e-16; *((_DWORD *)v25 + 68) = dword_AD01E8; v26 = sub_4090F0(SLODWORD(v37)); sub_8F2EA0((void **)v25, v26); sub_456820(v38, (int)"Number", 0); v27 = sub_456760(v38, (int)"Number01", (int)&unk_9BF091, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v28 = v39; v37 = 0.5; v39[104] = v27; v29 = *v28; v36 = 0.0; (*((void (__stdcall **)(int, int, _DWORD, float))v29 + 59))(xRight, dword_AC2F78, 0.0, COERCE_FLOAT(LODWORD(v37))); LOBYTE(v45) = 0; sub_4562E0(v38); v45 = -1; if ( v44 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v44; if ( !InterlockedDecrement((volatile LONG *)(v44 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (004F4170) -------------------------------------------------------- int __userpurge sub_4F4170@(int *a1@, int a2@, int a3) { int *v3; // esi int result; // eax const char *v5; // eax unsigned __int16 *v6; // eax unsigned __int16 *v7; // ebx int v8; // edi char *v9; // eax int v10; // [esp-4h] [ebp-38h] char v11; // [esp+8h] [ebp-2Ch] char v12; // [esp+1Ch] [ebp-18h] v3 = a1; if ( a3 ) { v10 = a2; v5 = (const char *)sub_4B1D30(*(_WORD *)(a3 + 4)); if ( v5 && (v6 = (unsigned __int16 *)sub_4F4810(v5 + 2), (v7 = v6) != 0) ) { sub_5D5EA0(*v3, a3, *v6); (*(void (__stdcall **)(unsigned __int16 *, int))(*(_DWORD *)v3[1] + 472))(v7 + 190, v10); sub_4F39F0(*(_DWORD *)(a3 + 6), &v11, 20); sub_4F39F0(*(_DWORD *)(a3 + 10), &v12, 20); v8 = *(_DWORD *)v3[2]; v9 = sub_7549E0("%s~%s", &v11, &v12); result = (*(int (__thiscall **)(int, char *))(v8 + 472))(v3[2], v9); } else { sub_5D5EA0(*v3, a3, 0xFFFF); (*(void (__stdcall **)(void *, int))(*(_DWORD *)v3[1] + 472))(&unk_9BF051, v10); result = (*(int (__thiscall **)(int, void *))(*(_DWORD *)v3[2] + 472))(v3[2], &unk_9BF052); } } else { sub_5D5B70((_WORD *)*a1, 0, 1); (*(void (__stdcall **)(void *))(*(_DWORD *)v3[1] + 472))(&unk_9BF042); result = (*(int (__thiscall **)(int, void *))(*(_DWORD *)v3[2] + 472))(v3[2], &unk_9BF043); } return result; } // 4F4170: could not find valid save-restore pair for ebx //----- (004F42A0) -------------------------------------------------------- _DWORD *__thiscall sub_4F42A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ChargedItemListWin::`vftable'; v1[58] = &ChargedItemListWin::`vftable'; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[104] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BF1A8: using guessed type void *ChargedItemListWin::`vftable'; // 9BF1C4: using guessed type void *ChargedItemListWin::`vftable'; //----- (004F4380) -------------------------------------------------------- volatile LONG *__cdecl sub_4F4380(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4F42A0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004F44B0) -------------------------------------------------------- int (__thiscall ***__thiscall sub_4F44B0(char *this))(void *, char) { char *v1; // esi int (__thiscall ***result)(void *, char); // eax int (__thiscall ***v3)(void *, char); // edi _DWORD *v4; // esi int (__thiscall **v5)(void *, char); // ebx int v6; // edi unsigned int v7; // eax int v8; // edi int v9; // [esp+8h] [ebp-4h] v1 = this; result = sub_6F2B00(); v3 = result; if ( result[3] ) { v4 = v1 + 344; result = (int (__thiscall ***)(void *, char))sub_4E6D30(v4, 0); v5 = v3[1]; while ( v5 ) { v6 = (int)v5[2]; result = (int (__thiscall ***)(void *, char))(v5 + 2); v5 = (int (__thiscall **)(void *, char))*v5; v9 = v6; if ( v6 && *(_BYTE *)(v6 + 10) != -1 ) { v7 = v4[1]; if ( (unsigned int)&v9 >= v7 || *v4 > (unsigned int)&v9 ) { if ( v7 == v4[2] ) sub_5E2180((int)v4, 1); result = (int (__thiscall ***)(void *, char))v4[1]; if ( result ) *result = (int (__thiscall **)(void *, char))v6; } else { v8 = ((signed int)&v9 - *v4) >> 2; if ( v7 == v4[2] ) sub_5E2180((int)v4, 1); result = (int (__thiscall ***)(void *, char))v4[1]; if ( result ) *result = *(int (__thiscall ***)(void *, char))(*v4 + 4 * v8); } v4[1] += 4; } } } return result; } //----- (004F4560) -------------------------------------------------------- int __thiscall sub_4F4560(int this) { int v1; // edi unsigned int v2; // ebx unsigned int v3; // esi int v4; // ecx int v5; // eax int v6; // eax unsigned int v7; // ebx unsigned int v8; // eax _DWORD *v9; // eax bool v10; // zf int result; // eax int v12; // esi int v13; // eax unsigned int v14; // eax int v15; // esi char *v16; // eax int v17; // [esp+Ch] [ebp-Ch] signed int v18; // [esp+10h] [ebp-8h] int *v19; // [esp+10h] [ebp-8h] _WORD **v20; // [esp+10h] [ebp-8h] int *v21; // [esp+14h] [ebp-4h] int v22; // [esp+14h] [ebp-4h] int v23; // [esp+14h] [ebp-4h] v1 = this; v2 = 4 * *(_DWORD *)(this + 408); v17 = 4 * *(_DWORD *)(this + 408); v3 = 0; sub_4F44B0((char *)this); v21 = (int *)(v1 + 360); v18 = 4; do { sub_4F4170(v21, v2, 0); v21 += 3; --v18; } while ( v18 ); v4 = *(_DWORD *)(v1 + 344); v5 = *(_DWORD *)(v1 + 348); if ( v4 != v5 && v2 < (v5 - v4) >> 2 ) { v22 = 4 * v2; v3 = 0; v19 = (int *)(v1 + 360); do { v6 = *(_DWORD *)(v1 + 344); if ( v3 + v2 >= (*(_DWORD *)(v1 + 348) - v6) >> 2 ) break; sub_4F4170(v19, v2, *(_DWORD *)(v22 + v6)); v22 += 4; v19 += 3; ++v3; } while ( v3 < 4 ); } v7 = v17 + v3 - ((*(_DWORD *)(v1 + 348) - *(_DWORD *)(v1 + 344)) >> 2); if ( v3 < 4 ) { v20 = (_WORD **)(v1 + 4 * (3 * v3 + 90)); v23 = 4 - v3; do { v8 = sub_6F2FC0(); if ( v7 >= v8 ) v9 = (_DWORD *)sub_6F3220(v7 - v8); else v9 = (_DWORD *)sub_6F30D0(v7); sub_4F3B10(v20, v7++, v9); v10 = v23-- == 1; v20 += 3; } while ( !v10 ); } result = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 260))(v1); if ( (_BYTE)result ) { v12 = (*(_DWORD *)(v1 + 348) - *(_DWORD *)(v1 + 344)) >> 2; v13 = v12 + sub_6F3250(); if ( v13 ) v14 = ((unsigned int)(v13 - 1) >> 2) + 1; else v14 = 1; v15 = **(_DWORD **)(v1 + 416); v16 = sub_7549E0("%d / %d", *(_DWORD *)(v1 + 408) + 1, v14); result = (*(int (__thiscall **)(_DWORD, char *))(v15 + 472))(*(_DWORD *)(v1 + 416), v16); } return result; } //----- (004F46E0) -------------------------------------------------------- int __thiscall sub_4F46E0(_BYTE *this) { int v1; // esi v1 = (int)this; sub_8F28C0(this); *(_DWORD *)(v1 + 412) = 0; return sub_4F4560(v1); } //----- (004F4700) -------------------------------------------------------- unsigned int __thiscall sub_4F4700(_DWORD *this) { int v1; // edi int v2; // ebx int v3; // esi unsigned int result; // eax v1 = (int)this; v2 = this[102]; v3 = (this[87] - this[86]) >> 2; result = v3 + sub_6F3250(); if ( 4 * v2 + 4 < result ) { *(_DWORD *)(v1 + 408) = v2 + 1; result = sub_4F4560(v1); } return result; } //----- (004F4770) -------------------------------------------------------- char __thiscall sub_4F4770(int this, int a2, int a3) { _DWORD *v3; // eax int v4; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 10: LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); break; case 11: v4 = *(_DWORD *)(this + 408); if ( v4 ) *(_DWORD *)(this + 408) = v4 - 1; LOBYTE(v3) = sub_4F4560(this); break; case 12: LOBYTE(v3) = sub_4F4700((_DWORD *)this); break; case 13: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "ComItemWin"); break; default: return (char)v3; } return (char)v3; } //----- (004F47F0) -------------------------------------------------------- int sub_4F47F0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA70 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA70: using guessed type int dword_ACDA70; //----- (004F4810) -------------------------------------------------------- int __cdecl sub_4F4810(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_4F47F0() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACDA70 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_4F47F0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA70 + 4), v1); } // ACDA70: using guessed type int dword_ACDA70; //----- (004F48A0) -------------------------------------------------------- _DWORD *__thiscall sub_4F48A0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ChargedItemListWin::`vftable'; *((_DWORD *)this + 58) = &ChargedItemListWin::`vftable'; if ( *((_DWORD *)this + 86) ) operator delete(*((void **)this + 86)); v2[86] = 0; v2[87] = 0; v2[88] = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BF1A8: using guessed type void *ChargedItemListWin::`vftable'; // 9BF1C4: using guessed type void *ChargedItemListWin::`vftable'; //----- (004F4910) -------------------------------------------------------- int __stdcall sub_4F4910(int a1, int a2, char *a3) { char *v3; // esi int v4; // edi int result; // eax char v6; // dl char v7; // dl char v8; // dl char v9; // al char v10; // dl char v11; // dl unsigned __int8 v12; // al char v13; // dl unsigned __int8 v14; // al char v15; // [esp+Ch] [ebp-4h] __int16 v16; // [esp+Dh] [ebp-3h] char v17; // [esp+Fh] [ebp-1h] v3 = a3; v4 = a2; sprintf(a3, "%I64d", a1, a2); a3 = v3 + 1; result = strlen(v3); if ( result <= 9 ) { if ( result <= 6 ) { if ( result > 3 ) { *(_WORD *)((char *)&a3 + 1) = 0; a2 = 0; LOWORD(a3) = (unsigned __int8)v3[result - 3]; v13 = v3[result - 2]; v14 = v3[result - 1]; BYTE1(a3) = v13; HIWORD(a3) = v14; HIBYTE(a3) = 0; result = sprintf(v3, "%I64d.%s", __PAIR__(v4, a1) / 1000, &a3); } } else { LOBYTE(a3) = v3[result - 3]; v10 = v3[result - 2]; *(_WORD *)((char *)&a3 + 1) = 0; BYTE1(a3) = v10; HIWORD(a3) = (unsigned __int8)v3[result - 1]; LOBYTE(a2) = v3[result - 6]; v11 = v3[result - 5]; v12 = v3[result - 4]; BYTE1(a2) = v11; HIWORD(a2) = v12; result = sprintf(v3, "%I64d.%s.%s", __PAIR__(v4, a1) / 1000000, &a2, &a3); } } else { LOBYTE(a3) = v3[result - 3]; v6 = v3[result - 2]; *(_WORD *)((char *)&a3 + 1) = 0; BYTE1(a3) = v6; HIWORD(a3) = (unsigned __int8)v3[result - 1]; LOBYTE(a2) = v3[result - 6]; v7 = v3[result - 5]; *(_WORD *)((char *)&a2 + 1) = 0; BYTE1(a2) = v7; HIWORD(a2) = (unsigned __int8)v3[result - 4]; v15 = v3[result - 9]; v8 = v3[result - 8]; v9 = v3[result - 7]; LOBYTE(v16) = v8; HIBYTE(v16) = v9; v17 = 0; result = sprintf(v3, "%I64d.%s.%s.%s", __PAIR__(v4, a1) / 1000000000, &v15, &a2, &a3); } return result; } //----- (004F4AC0) -------------------------------------------------------- char __thiscall sub_4F4AC0(int *this) { int *v1; // esi v1 = this; if ( !this[115] ) this[115] = sub_5B5C70(this[74]); return sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[115]); } //----- (004F4B00) -------------------------------------------------------- void __thiscall sub_4F4B00(int *this) { int *v1; // esi v1 = this; if ( !this[141] ) this[141] = sub_4FA4A0(this[74]); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[141]); sub_4FA410((_DWORD *)v1[141]); sub_4FA790((char *)v1[141], (unsigned __int8 *)v1 + 620); } //----- (004F4B60) -------------------------------------------------------- int __thiscall sub_4F4B60(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[141]); sub_8F86A0(&unk_BA6B10, v1[154]); return sub_8F28E0(v1); } //----- (004F4B90) -------------------------------------------------------- int __thiscall sub_4F4B90(_DWORD *this) { return this[154]; } //----- (004F4BA0) -------------------------------------------------------- void __thiscall sub_4F4BA0(int this, int a2) { unsigned __int8 *v2; // edx char *v3; // ecx if ( a2 ) { *(_BYTE *)(this + 621) ^= (*(_BYTE *)(this + 621) ^ *(_BYTE *)(a2 + 1)) & 0x3F; *(_WORD *)(this + 622) = *(_WORD *)(a2 + 2); v2 = (unsigned __int8 *)(this + 620); v3 = *(char **)(this + 564); *v2 = *(_BYTE *)a2; if ( v3 ) sub_4FA790(v3, v2); } } //----- (004F4BF0) -------------------------------------------------------- char sub_4F4BF0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ChrStatus"); return (char)v0; } //----- (004F4C20) -------------------------------------------------------- char sub_4F4C20() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5CA0(v0, 1); return (char)v0; } //----- (004F4C40) -------------------------------------------------------- char __thiscall sub_4F4C40(_BYTE *this, char a2) { char result; // al result = a2; this[1144] = a2; return result; } //----- (004F4D70) -------------------------------------------------------- int __thiscall sub_4F4D70(_DWORD *this, int a2) { int result; // eax result = a2; this[160] = a2; return result; } //----- (004F4D80) -------------------------------------------------------- int __thiscall sub_4F4D80(_DWORD *this, unsigned int a2) { int result; // eax result = -858993459 * a2; this[161] = a2 / 0xA; return result; } //----- (004F4DA0) -------------------------------------------------------- int __stdcall sub_4F4DA0(int a1, int a2, int a3, int a4, int a5, float a6) { double v6; // st6 signed int v7; // ebx int result; // eax v6 = (double)a3 * a6; v7 = (signed int)(a6 * (double)a5); (*(void (__thiscall **)(int))(*(_DWORD *)a1 + 468))(a1); if ( (signed int)v6 == v7 ) result = (*(int (**)(int, const char *, ...))(*(_DWORD *)a1 + 476))(a1, "%d", (signed int)v6); else result = (*(int (**)(int, const char *, ...))(*(_DWORD *)a1 + 476))(a1, "%d ~ %d", (signed int)v6, v7); return result; } // 4F4DA0: could not find valid save-restore pair for edi //----- (004F4E40) -------------------------------------------------------- int __stdcall sub_4F4E40(int a1, int a2, int a3, int a4, float a5) { signed int v5; // edi int result; // eax v5 = (signed int)(a5 * (double)a3); (*(void (__thiscall **)(int))(*(_DWORD *)a1 + 468))(a1); if ( a4 ) result = (*(int (**)(int, const char *, ...))(*(_DWORD *)a1 + 476))(a1, "%d (+%d)", v5, a4); else result = (*(int (**)(int, const char *, ...))(*(_DWORD *)a1 + 476))(a1, "%d", v5); return result; } // 4F4E40: could not find valid save-restore pair for edi //----- (004F4F50) -------------------------------------------------------- void __userpurge sub_4F4F50(int a1@, int a2@, int a3, int a4) { int v4; // esi v4 = a1; switch ( a3 ) { case 9: sub_4F4AC0((int *)a1); break; case 10: sub_6CB8C0(*(_DWORD **)(a1 + 568), 0); break; case 11: sub_6CB8C0(*(_DWORD **)(a1 + 568), 2); break; case 12: sub_6CB8C0(*(_DWORD **)(a1 + 568), 1); break; case 13: sub_6CB8C0(*(_DWORD **)(a1 + 568), 3); break; case 14: sub_6CB8C0(*(_DWORD **)(a1 + 568), 4); break; case 15: sub_6CB830(*(_DWORD **)(a1 + 568), 0); break; case 16: sub_6CB830(*(_DWORD **)(a1 + 568), 2); break; case 17: sub_6CB830(*(_DWORD **)(a1 + 568), 1); break; case 18: sub_6CB830(*(_DWORD **)(a1 + 568), 3); break; case 19: sub_6CB830(*(_DWORD **)(a1 + 568), 4); break; case 20: sub_4F4B00((int *)a1); break; case 21: if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(a1 + 616) + 260))() ) { sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v4 + 616)); } else { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(**(_DWORD **)(v4 + 616) + 236))( xRight, dword_AC2F78, 0.5, 0.5); sub_50F600(*(_DWORD ***)(v4 + 616), a2, (unsigned int *)&unk_AD9E48); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 616)); } break; case 22: sub_4F4BF0(); break; case 23: sub_4F4C20(); break; default: return; } } //----- (004F5180) -------------------------------------------------------- char __thiscall sub_4F5180(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax const CHAR *v18; // eax int v19; // ST19C_4 int v20; // ST198_4 int v21; // eax const CHAR *v22; // eax volatile LONG *v23; // eax const char *v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // eax const char *v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // eax const char *v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // eax const char *v33; // eax volatile LONG *v34; // eax volatile LONG *v35; // eax const char *v36; // eax volatile LONG *v37; // eax volatile LONG **v38; // eax int v39; // eax const CHAR *v40; // eax int v41; // eax volatile LONG *v42; // eax char *v43; // ecx unsigned int v44; // eax int v45; // eax const CHAR *v46; // eax int v47; // eax volatile LONG *v48; // eax int v49; // eax const CHAR *v50; // eax int v51; // eax volatile LONG *v52; // eax int v53; // eax const CHAR *v54; // eax int v55; // eax volatile LONG *v56; // eax int v57; // eax const CHAR *v58; // eax int v59; // eax void **v60; // eax int v61; // eax const CHAR *v62; // eax int v63; // eax volatile LONG *v64; // eax int v65; // eax const CHAR *v66; // eax const char *v67; // eax int v68; // eax const CHAR *v69; // eax const char *v70; // eax int v71; // eax const CHAR *v72; // eax const char *v73; // eax int v74; // eax const CHAR *v75; // eax const char *v76; // eax int v77; // eax const CHAR *v78; // eax const char *v79; // eax int v80; // eax volatile LONG *v81; // eax int v82; // eax volatile LONG *v83; // eax int v84; // eax volatile LONG *v85; // eax int v86; // eax volatile LONG *v87; // eax int v88; // eax const CHAR *v89; // eax const char *v90; // eax int v91; // eax volatile LONG *v92; // eax int v93; // eax volatile LONG *v94; // eax const CHAR *v95; // eax const char *v96; // eax int v97; // eax volatile LONG *v98; // eax const char *v99; // eax int v100; // eax volatile LONG *v101; // eax int v102; // eax volatile LONG *v103; // eax int v104; // eax const CHAR *v105; // eax const char *v106; // eax int v107; // eax volatile LONG *v108; // eax int v109; // eax const CHAR *v110; // eax const char *v111; // eax int v112; // eax volatile LONG *v113; // eax int v114; // eax const CHAR *v115; // eax int v116; // eax volatile LONG *v117; // eax int v118; // eax volatile LONG *v119; // eax int v120; // eax const CHAR *v121; // eax int v122; // eax volatile LONG *v123; // eax int v124; // eax const CHAR *v125; // eax int v126; // eax volatile LONG *v127; // eax int v128; // eax const CHAR *v129; // eax int v130; // eax volatile LONG *v131; // eax int v132; // eax const CHAR *v133; // eax int v134; // eax volatile LONG *v135; // eax int v136; // eax const CHAR *v137; // eax int v138; // eax volatile LONG *v139; // eax int v140; // eax const CHAR *v141; // eax int v142; // eax volatile LONG *v143; // eax volatile LONG *v144; // eax const char *v145; // eax int v146; // ST19C_4 int v147; // ST198_4 int v148; // eax const CHAR *v149; // eax volatile LONG *v150; // eax int v151; // ST1A0_4 int v152; // ST19C_4 int v153; // ST198_4 int v154; // eax const CHAR *v155; // eax int v156; // eax char v157; // [esp+1BCh] [ebp-3Ch] void (__thiscall **v158)(volatile LONG *, const CHAR *); // [esp+1D0h] [ebp-28h] volatile LONG *v159; // [esp+1D4h] [ebp-24h] int v160; // [esp+1D8h] [ebp-20h] int v161; // [esp+1DCh] [ebp-1Ch] int v162; // [esp+1E0h] [ebp-18h] int v163; // [esp+1E4h] [ebp-14h] int v164; // [esp+1E8h] [ebp-10h] int v165; // [esp+1F4h] [ebp-4h] volatile LONG **v166; // [esp+200h] [ebp+8h] volatile LONG *v167; // [esp+200h] [ebp+8h] volatile LONG **v168; // [esp+200h] [ebp+8h] volatile LONG *v169; // [esp+200h] [ebp+8h] volatile LONG **v170; // [esp+200h] [ebp+8h] volatile LONG *v171; // [esp+200h] [ebp+8h] volatile LONG *v172; // [esp+200h] [ebp+8h] volatile LONG **v173; // [esp+200h] [ebp+8h] volatile LONG **v174; // [esp+200h] [ebp+8h] volatile LONG **v175; // [esp+200h] [ebp+8h] volatile LONG **v176; // [esp+200h] [ebp+8h] volatile LONG **v177; // [esp+200h] [ebp+8h] volatile LONG **v178; // [esp+200h] [ebp+8h] volatile LONG **v179; // [esp+200h] [ebp+8h] volatile LONG **v180; // [esp+200h] [ebp+8h] volatile LONG **v181; // [esp+200h] [ebp+8h] volatile LONG **v182; // [esp+200h] [ebp+8h] volatile LONG *v183; // [esp+200h] [ebp+8h] volatile LONG *v184; // [esp+200h] [ebp+8h] volatile LONG *v185; // [esp+200h] [ebp+8h] volatile LONG *v186; // [esp+200h] [ebp+8h] volatile LONG *v187; // [esp+200h] [ebp+8h] volatile LONG *v188; // [esp+200h] [ebp+8h] volatile LONG *v189; // [esp+200h] [ebp+8h] volatile LONG *v190; // [esp+200h] [ebp+8h] volatile LONG *v191; // [esp+200h] [ebp+8h] volatile LONG *v192; // [esp+200h] [ebp+8h] volatile LONG *v193; // [esp+200h] [ebp+8h] volatile LONG *v194; // [esp+200h] [ebp+8h] void (__thiscall **v195)(_DWORD, const CHAR *); // [esp+200h] [ebp+8h] volatile LONG *v196; // [esp+200h] [ebp+8h] volatile LONG *v197; // [esp+200h] [ebp+8h] volatile LONG *v198; // [esp+200h] [ebp+8h] volatile LONG *v199; // [esp+200h] [ebp+8h] volatile LONG *v200; // [esp+200h] [ebp+8h] volatile LONG *v201; // [esp+200h] [ebp+8h] volatile LONG *v202; // [esp+200h] [ebp+8h] volatile LONG *v203; // [esp+200h] [ebp+8h] volatile LONG *v204; // [esp+200h] [ebp+8h] volatile LONG **v205; // [esp+200h] [ebp+8h] void **v206; // [esp+200h] [ebp+8h] volatile LONG *v207; // [esp+200h] [ebp+8h] volatile LONG **v208; // [esp+200h] [ebp+8h] volatile LONG *v209; // [esp+200h] [ebp+8h] volatile LONG *v210; // [esp+200h] [ebp+8h] char v211; // [esp+203h] [ebp+Bh] v2 = (int)this; v164 = 0; v165 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v159 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v164; v165 = -1; if ( !v164 || InterlockedDecrement((volatile LONG *)(v164 + 4)) ) return 0; v5 = v164 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\ChrStatus.nif"); sub_8F66B0(v8, (int)&v164, v7); if ( !v164 ) return 0; v9 = sub_8FB140(v164, (int)"Frame", (int)&v162, (int)&v163, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CharInfoWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v164; v165 = -1; if ( !v164 || InterlockedDecrement((volatile LONG *)(v164 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v162; v11 = v163; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v164, (int)"Theme", (int)&v162, (int)&v163, v12); else v13 = sub_8FB140(v164, (int)"Theme", (int)&v162, (int)&v163, 0); sub_8F3EB0(v162 - v10, v163 - v11, (int)v13, v2, 0, 0); v166 = sub_8FB140(v164, (int)"ClsNor", (int)&v162, (int)&v163, v159); sub_8FB650(v166, v164, (int)"ClsClick"); sub_8FB650(v166, v164, (int)"ClsOver"); sub_90C8D0(v162 - v10, v163 - v11, (int)v166, v2); v167 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v164 + 72))("HelpLinkNor") ) { v168 = sub_8FB140(v164, (int)"HelpLinkNor", (int)&v162, (int)&v163, v167); sub_8FB650(v168, v164, (int)"HelpLinkClick"); sub_8FB650(v168, v164, (int)"HelpLinkOver"); sub_8FE0F0(v162 - v10, v163 - v11, (int)v168, v2, 22, 0, 0); } v14 = sub_8FB140(v164, (int)"Panel01", (int)&v162, (int)&v163, v159); v15 = sub_8F3EB0(v162 - v10, v163 - v11, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v164, (int)"Panel02", (int)&v162, (int)&v163, v159); sub_8F3EB0(v162 - v10, v163 - v11, (int)v16, v2, 0, 0); if ( !sub_8F71E0(v164, (int)"WinTitle", &v162, &v163, &v160, &v161) ) goto LABEL_76; v17 = sub_421050(7); v169 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v17, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v169 + 488))(v169, 1); (*(void (__stdcall **)(int *))(*v169 + 468))(&dword_AA8D98); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v169 + 472); v18 = sub_40C190(-688464161); (*v158)(v169, v18); (*(void (__stdcall **)(_DWORD))(*v169 + 240))(0); v170 = sub_8FB140(v164, (int)"SubNameBtnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v170, v164, (int)"SubNameBtnClick"); sub_8FB650(v170, v164, (int)"SubNameBtnOver"); v171 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v170, v2, 20, 0, 0); v19 = sub_421050(7); v20 = (*(int (**)(void))(*v171 + 148))(); v21 = (*(int (**)(void))(*v171 + 144))(); v172 = sub_8F4A20(0, 1, v21, v20, v19, (int)v171, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v172 + 488))(v172, 5); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v172 + 472); v22 = sub_40C190(473839482); (*v158)(v172, v22); (*(void (__stdcall **)(_DWORD))(*v172 + 240))(0); v173 = sub_8FB140(v164, (int)"StrUpNor", (int)&v162, (int)&v163, v159); sub_8FB650(v173, v164, (int)"StrUpClick"); sub_8FB650(v173, v164, (int)"StrUpOver"); v23 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v173, v2, 10, 0, 0); *(_DWORD *)(v2 + 572) = v23; *((_DWORD *)v23 + 68) = dword_AD01E8; v24 = sub_40A910(-981436021); sub_8F2EA0(*(void ***)(v2 + 572), v24); v174 = sub_8FB140(v164, (int)"StrDnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v174, v164, (int)"StrDnClick"); sub_8FB650(v174, v164, (int)"StrDnOver"); v25 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v174, v2, 15, 0, 0); *(_DWORD *)(v2 + 592) = v25; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 256))(v25, 0); v175 = sub_8FB140(v164, (int)"DexUpNor", (int)&v162, (int)&v163, v159); sub_8FB650(v175, v164, (int)"DexUpClick"); sub_8FB650(v175, v164, (int)"DexUpOver"); v26 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v175, v2, 11, 0, 0); *(_DWORD *)(v2 + 576) = v26; *((_DWORD *)v26 + 68) = dword_AD01E8; v27 = sub_40A910(-981436021); sub_8F2EA0(*(void ***)(v2 + 576), v27); v176 = sub_8FB140(v164, (int)"DexDnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v176, v164, (int)"DexDnClick"); sub_8FB650(v176, v164, (int)"DexDnOver"); v28 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v176, v2, 16, 0, 0); *(_DWORD *)(v2 + 596) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 256))(v28, 0); v177 = sub_8FB140(v164, (int)"ConUpNor", (int)&v162, (int)&v163, v159); sub_8FB650(v177, v164, (int)"ConUpClick"); sub_8FB650(v177, v164, (int)"ConUpOver"); v29 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v177, v2, 12, 0, 0); *(_DWORD *)(v2 + 580) = v29; *((_DWORD *)v29 + 68) = dword_AD01E8; v30 = sub_40A910(-981436021); sub_8F2EA0(*(void ***)(v2 + 580), v30); v178 = sub_8FB140(v164, (int)"ConDnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v178, v164, (int)"ConDnClick"); sub_8FB650(v178, v164, (int)"ConDnOver"); v31 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v178, v2, 17, 0, 0); *(_DWORD *)(v2 + 600) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 256))(v31, 0); v179 = sub_8FB140(v164, (int)"IntUpNor", (int)&v162, (int)&v163, v159); sub_8FB650(v179, v164, (int)"IntUpClick"); sub_8FB650(v179, v164, (int)"IntUpOver"); v32 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v179, v2, 13, 0, 0); *(_DWORD *)(v2 + 584) = v32; *((_DWORD *)v32 + 68) = dword_AD01E8; v33 = sub_40A910(-981436021); sub_8F2EA0(*(void ***)(v2 + 584), v33); v180 = sub_8FB140(v164, (int)"IntDnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v180, v164, (int)"IntDnClick"); sub_8FB650(v180, v164, (int)"IntDnOver"); v34 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v180, v2, 18, 0, 0); *(_DWORD *)(v2 + 604) = v34; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 256))(v34, 0); v181 = sub_8FB140(v164, (int)"MenUpNor", (int)&v162, (int)&v163, v159); sub_8FB650(v181, v164, (int)"MenUpClick"); sub_8FB650(v181, v164, (int)"MenUpOver"); v35 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v181, v2, 14, 0, 0); *(_DWORD *)(v2 + 588) = v35; *((_DWORD *)v35 + 68) = dword_AD01E8; v36 = sub_40A910(-981436021); sub_8F2EA0(*(void ***)(v2 + 588), v36); v182 = sub_8FB140(v164, (int)"MenDnNor", (int)&v162, (int)&v163, v159); sub_8FB650(v182, v164, (int)"MenDnClick"); sub_8FB650(v182, v164, (int)"MenDnOver"); v37 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v182, v2, 19, 0, 0); *(_DWORD *)(v2 + 608) = v37; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 256))(v37, 0); v38 = sub_8FB140(v164, (int)"IconSlot", (int)&v162, (int)&v163, v159); sub_8F3EB0(v162 - v10, v163 - v11, (int)v38, v2, 0, 0); if ( !sub_8F71E0(v164, (int)"SubName", &v162, &v163, &v160, &v161) ) goto LABEL_76; v39 = sub_421050(7); v183 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v39, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v183 + 472); v40 = sub_40C190(-537856442); (*v158)(v183, v40); (*(void (__stdcall **)(_DWORD))(*v183 + 240))(0); if ( !sub_8F71E0(v164, (int)"SubNameTxt", &v162, &v163, &v160, &v161) ) goto LABEL_76; v41 = sub_421050(7); v42 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v41, v2, 0, 0); *(_DWORD *)(v2 + 344) = v42; (*(void (__thiscall **)(volatile LONG *, const char *))(*v42 + 472))(v42, "-"); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 344) + 472))(dword_AD8EBC + 209); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); *(_BYTE *)(v2 + 620) = 0; v43 = dword_AD8EBC; v44 = 0; v211 = 0; if ( *((_DWORD *)dword_AD8EBC + 1007) ) { do { if ( v211 ) break; if ( (v43[2 * v44 + 2957] & 0xC0) == -64 ) { *(_BYTE *)(v2 + 620) = v43[2 * v44 + 2956]; v211 = 1; *(_BYTE *)(v2 + 621) ^= (*(_BYTE *)(v2 + 621) ^ dword_AD8EBC[2 * v44 + 2957]) & 0x3F; v43 = dword_AD8EBC; } ++v44; } while ( v44 < *((_DWORD *)v43 + 1007) ); } if ( !sub_8F71E0(v164, (int)"sID", &v162, &v163, &v160, &v161) ) goto LABEL_76; v45 = sub_421050(7); v184 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v45, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v184 + 472); v46 = sub_40C190(-2136697195); (*v158)(v184, v46); (*(void (__stdcall **)(_DWORD))(*v184 + 240))(0); if ( !sub_8F71E0(v164, (int)"sIDTxt", &v162, &v163, &v160, &v161) ) goto LABEL_76; v47 = sub_421050(7); v48 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v47, v2, 0, 0); *(_DWORD *)(v2 + 368) = v48; (*(void (__thiscall **)(volatile LONG *, const char *))(*v48 + 472))(v48, "-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); if ( !sub_8F71E0(v164, (int)"Job", &v162, &v163, &v160, &v161) ) goto LABEL_76; v49 = sub_421050(7); v185 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v49, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v185 + 472); v50 = sub_40C190(1247775651); (*v158)(v185, v50); (*(void (__stdcall **)(_DWORD))(*v185 + 240))(0); if ( !sub_8F71E0(v164, (int)"JobTxt", &v162, &v163, &v160, &v161) ) goto LABEL_76; v51 = sub_421050(7); v52 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v51, v2, 0, 0); *(_DWORD *)(v2 + 348) = v52; (*(void (__thiscall **)(volatile LONG *, const char *))(*v52 + 472))(v52, "-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); if ( !sub_8F71E0(v164, (int)"Guild", &v162, &v163, &v160, &v161) ) goto LABEL_76; v53 = sub_421050(7); v186 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v53, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v186 + 472); v54 = sub_40C190(-1951690071); (*v158)(v186, v54); (*(void (__stdcall **)(_DWORD))(*v186 + 240))(0); if ( !sub_8F71E0(v164, (int)"GuildTxt", &v162, &v163, &v160, &v161) ) goto LABEL_76; v55 = sub_421050(7); v56 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v55, v2, 0, 0); *(_DWORD *)(v2 + 352) = v56; (*(void (__thiscall **)(volatile LONG *, const char *))(*v56 + 472))(v56, "-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); if ( !sub_8F71E0(v164, (int)"nExp", &v162, &v163, &v160, &v161) ) goto LABEL_76; v57 = sub_421050(7); v187 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v57, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v187 + 240))(v187, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v187 + 472); v58 = sub_40C190(1163893164); (*v158)(v187, v58); if ( !sub_8F71E0(v164, (int)"nExpVal", &v162, &v163, &v160, &v161) ) goto LABEL_76; v59 = sub_421050(7); v60 = (void **)sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v59, v2, 0, 0); *(_DWORD *)(v2 + 380) = v60; sub_8F2EA0(v60, (const char *)&unk_9BF3F7); *(_DWORD *)(*(_DWORD *)(v2 + 380) + 272) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"honor", &v162, &v163, &v160, &v161) ) goto LABEL_76; v61 = sub_421050(7); v188 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v61, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v188 + 240))(v188, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v188 + 472); v62 = sub_40C190(-1683056920); (*v158)(v188, v62); if ( !sub_8F71E0(v164, (int)"honorVal", &v162, &v163, &v160, &v161) ) goto LABEL_76; v63 = sub_421050(7); v64 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v63, v2, 0, 0); *(_DWORD *)(v2 + 436) = v64; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v64 + 240))(v64, 0); if ( !sub_8F71E0(v164, (int)"Strength", &v162, &v163, &v160, &v161) ) goto LABEL_76; v65 = sub_421050(7); v189 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v65, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v189 + 472); v66 = sub_40C190(1398774696); (*v158)(v189, v66); v67 = sub_40C190(-83215808); sub_8F2EA0((void **)v189, v67); *((_DWORD *)v189 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"Dexterity", &v162, &v163, &v160, &v161) ) goto LABEL_76; v68 = sub_421050(7); v190 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v68, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v190 + 472); v69 = sub_40C190(1147117977); (*v158)(v190, v69); v70 = sub_40C190(-334872527); sub_8F2EA0((void **)v190, v70); *((_DWORD *)v190 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"Constitution", &v162, &v163, &v160, &v161) ) goto LABEL_76; v71 = sub_421050(7); v191 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v71, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v191 + 472); v72 = sub_40C190(-1666479391); (*v158)(v191, v72); v73 = sub_40C190(877868416); sub_8F2EA0((void **)v191, v73); *((_DWORD *)v191 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"Intelligence", &v162, &v163, &v160, &v161) ) goto LABEL_76; v74 = sub_421050(7); v192 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v74, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v192 + 472); v75 = sub_40C190(1231003042); (*v158)(v192, v75); v76 = sub_40C190(-250987462); sub_8F2EA0((void **)v192, v76); *((_DWORD *)v192 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"MentalPower", &v162, &v163, &v160, &v161) ) goto LABEL_76; v77 = sub_421050(7); v193 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v77, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v193 + 472); v78 = sub_40C190(1465883805); (*v158)(v193, v78); v79 = sub_40C190(-16106699); sub_8F2EA0((void **)v193, v79); *((_DWORD *)v193 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"StrNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v80 = sub_421050(7); v81 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v80, v2, 0, 0); *(_DWORD *)(v2 + 392) = v81; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v81 + 240))(v81, 0); if ( !sub_8F71E0(v164, (int)"DexNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v82 = sub_421050(7); v83 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v82, v2, 0, 0); *(_DWORD *)(v2 + 396) = v83; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v83 + 240))(v83, 0); if ( !sub_8F71E0(v164, (int)"ConNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v84 = sub_421050(7); v85 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v84, v2, 0, 0); *(_DWORD *)(v2 + 400) = v85; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v85 + 240))(v85, 0); if ( !sub_8F71E0(v164, (int)"IntNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v86 = sub_421050(7); v87 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v86, v2, 0, 0); *(_DWORD *)(v2 + 404) = v87; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v87 + 240))(v87, 0); if ( !sub_8F71E0(v164, (int)"HP", &v162, &v163, &v160, &v161) ) goto LABEL_76; v88 = sub_421050(7); v194 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v88, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v194 + 472); v89 = sub_40C190(1214204324); (*v158)(v194, v89); v90 = sub_40C190(-536349629); sub_8F2EA0((void **)v194, v90); *((_DWORD *)v194 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"HPNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v91 = sub_421050(7); v92 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v91, v2, 0, 0); *(_DWORD *)(v2 + 356) = v92; (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 356) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); if ( !sub_8F71E0(v164, (int)"SP", &v162, &v163, &v160, &v161) ) goto LABEL_76; v93 = sub_421050(7); v94 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v93, v2, 0, 0); *(_DWORD *)(v2 + 1148) = v94; v195 = (void (__thiscall **)(_DWORD, const CHAR *))(*v94 + 472); v95 = sub_40C190(1398753700); (*v195)(*(_DWORD *)(v2 + 1148), v95); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1148) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1148) + 256))(0); v96 = sub_40C190(-351800253); sub_8F2EA0(*(void ***)(v2 + 1148), v96); *(_DWORD *)(*(_DWORD *)(v2 + 1148) + 272) = dword_AD01E8; v97 = sub_421050(7); v98 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v97, v2, 0, 0); *(_DWORD *)(v2 + 1152) = v98; (*(void (__thiscall **)(volatile LONG *, const char *))(*v98 + 472))(v98, "LP"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1152) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1152) + 256))(0); v99 = sub_4090F0(-1682793603); sub_8F2EA0(*(void ***)(v2 + 1152), v99); *(_DWORD *)(*(_DWORD *)(v2 + 1152) + 272) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"SPNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v100 = sub_421050(7); v101 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v100, v2, 0, 0); *(_DWORD *)(v2 + 360) = v101; (*(void (__thiscall **)(volatile LONG *, signed int))(*v101 + 488))(v101, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 360) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 256))(0); v102 = sub_421050(7); v103 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v102, v2, 0, 0); *(_DWORD *)(v2 + 1156) = v103; (*(void (__thiscall **)(volatile LONG *, signed int))(*v103 + 488))(v103, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 1156) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1156) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1156) + 256))(0); if ( !sub_8F71E0(v164, (int)"Point", &v162, &v163, &v160, &v161) ) goto LABEL_76; v104 = sub_421050(7); v196 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v104, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v196 + 472); v105 = sub_40C190(-1532128605); (*v158)(v196, v105); v106 = sub_40C190(1128610382); sub_8F2EA0((void **)v196, v106); *((_DWORD *)v196 + 68) = dword_AD01E8; if ( !sub_8F71E0(v164, (int)"PointNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v107 = sub_421050(7); v108 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v107, v2, 0, 0); *(_DWORD *)(v2 + 364) = v108; (*(void (__thiscall **)(volatile LONG *, signed int))(*v108 + 488))(v108, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 364) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); if ( sub_8F71E0(v164, (int)"KillPoint", &v162, &v163, &v160, &v161) ) { v109 = sub_421050(7); v197 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v109, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v197 + 472); v110 = sub_40C190(-118168511); (*v158)(v197, v110); v111 = sub_40C190(-1868787744); sub_8F2EA0((void **)v197, v111); *((_DWORD *)v197 + 68) = dword_AD01E8; } if ( sub_8F71E0(v164, (int)"KillPointVal", &v162, &v163, &v160, &v161) ) { v112 = sub_421050(7); v113 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v112, v2, 0, 0); *(_DWORD *)(v2 + 440) = v113; (*(void (__thiscall **)(volatile LONG *, signed int))(*v113 + 488))(v113, 1); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 440) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 440) + 240))(0); } if ( !sub_8F71E0(v164, (int)"Point01", &v162, &v163, &v160, &v161) ) goto LABEL_76; v114 = sub_421050(7); v198 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v114, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v198 + 472); v115 = sub_40C190(912271154); (*v158)(v198, v115); (*(void (__stdcall **)(_DWORD))(*v198 + 240))(0); if ( !sub_8F71E0(v164, (int)"PointNum01", &v162, &v163, &v160, &v161) ) goto LABEL_76; v116 = sub_421050(7); v117 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v116, v2, 0, 0); *(_DWORD *)(v2 + 612) = v117; (*(void (__thiscall **)(volatile LONG *, signed int))(*v117 + 488))(v117, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 612) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 612) + 240))(0); if ( !sub_8F71E0(v164, (int)"MenNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v118 = sub_421050(7); v119 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v118, v2, 0, 0); *(_DWORD *)(v2 + 408) = v119; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v119 + 240))(v119, 0); if ( !sub_8F71E0(v164, (int)"WeaponClass", &v162, &v163, &v160, &v161) ) goto LABEL_76; v120 = sub_421050(7); v199 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v120, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v199 + 472); v121 = sub_40C190(-750632630); (*v158)(v199, v121); (*(void (__stdcall **)(_DWORD))(*v199 + 240))(0); if ( !sub_8F71E0(v164, (int)"WPNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v122 = sub_421050(7); v123 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v122, v2, 0, 0); *(_DWORD *)(v2 + 412) = v123; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v123 + 240))(v123, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 412) + 488))(2); if ( !sub_8F71E0(v164, (int)"ArmorClass", &v162, &v163, &v160, &v161) ) goto LABEL_76; v124 = sub_421050(7); v200 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v124, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v200 + 472); v125 = sub_40C190(877144875); (*v158)(v200, v125); (*(void (__stdcall **)(_DWORD))(*v200 + 240))(0); if ( !sub_8F71E0(v164, (int)"ACNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v126 = sub_421050(7); v127 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v126, v2, 0, 0); *(_DWORD *)(v2 + 416) = v127; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v127 + 240))(v127, 0); if ( !sub_8F71E0(v164, (int)"ToHit", &v162, &v163, &v160, &v161) ) goto LABEL_76; v128 = sub_421050(7); v201 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v128, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v201 + 472); v129 = sub_40C190(-1711017506); (*v158)(v201, v129); (*(void (__stdcall **)(_DWORD))(*v201 + 240))(0); if ( !sub_8F71E0(v164, (int)"THNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v130 = sub_421050(7); v131 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v130, v2, 0, 0); *(_DWORD *)(v2 + 420) = v131; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v131 + 240))(v131, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 420) + 488))(2); if ( !sub_8F71E0(v164, (int)"ToBlock", &v162, &v163, &v160, &v161) ) goto LABEL_76; v132 = sub_421050(7); v202 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v132, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v202 + 472); v133 = sub_40C190(-638981554); (*v158)(v202, v133); (*(void (__stdcall **)(_DWORD))(*v202 + 240))(0); if ( !sub_8F71E0(v164, (int)"TBNum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v134 = sub_421050(7); v135 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v134, v2, 0, 0); *(_DWORD *)(v2 + 424) = v135; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v135 + 240))(v135, 0); if ( !sub_8F71E0(v164, (int)"MagicAtt", &v162, &v163, &v160, &v161) ) goto LABEL_76; v136 = sub_421050(7); v203 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v136, v2, 0, 0); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v203 + 472); v137 = sub_40C190(994800536); (*v158)(v203, v137); (*(void (__stdcall **)(_DWORD))(*v203 + 240))(0); if ( !sub_8F71E0(v164, (int)"MANum", &v162, &v163, &v160, &v161) ) goto LABEL_76; v138 = sub_421050(7); v139 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v138, v2, 0, 0); *(_DWORD *)(v2 + 428) = v139; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v139 + 240))(v139, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 428) + 488))(2); if ( !sub_8F71E0(v164, (int)"MagicRes", &v162, &v163, &v160, &v161) || (v140 = sub_421050(7), v204 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v140, v2, 0, 0), v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v204 + 472), v141 = sub_40C190(758937240), (*v158)(v204, v141), (*(void (__stdcall **)(_DWORD))(*v204 + 240))(0), !sub_8F71E0(v164, (int)"MRNum", &v162, &v163, &v160, &v161)) ) { LABEL_76: v165 = -1; sub_410C00(&v164); return 0; } v142 = sub_421050(7); v143 = sub_8F4A20(v162 - v10, v163 - v11, v160, v161, v142, v2, 0, 0); *(_DWORD *)(v2 + 432) = v143; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v143 + 240))(v143, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 432) + 488))(2); v205 = sub_8FB140(v164, (int)"Btn04Nor", (int)&v162, (int)&v163, v159); sub_8FB650(v205, v164, (int)"Btn04Click"); sub_8FB650(v205, v164, (int)"Btn04Over"); sub_8FB650(v205, v164, (int)"Btn04Disable"); v144 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v205, v2, 23, 0, 0); v206 = (void **)v144; *((_DWORD *)v144 + 68) = dword_AD01E8; v145 = sub_40A910(-14128261); sub_8F2EA0(v206, v145); v146 = sub_421050(7); v147 = (*((int (**)(void))*v206 + 37))(); v148 = (*((int (**)(void))*v206 + 36))(); v207 = sub_8F4A20(0, 0, v148, v147, v146, (int)v206, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v207 + 488))(v207, 5); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v207 + 472); v149 = sub_40A910(-2136179776); (*v158)(v207, v149); (*(void (__stdcall **)(_DWORD))(*v207 + 240))(0); v208 = sub_8FB140(v164, (int)"FreeStatNor", (int)&v162, (int)&v163, v159); sub_8FB650(v208, v164, (int)"FreeStatClick"); sub_8FB650(v208, v164, (int)"FreeStatOver"); v150 = sub_8FE0F0(v162 - v10, v163 - v11, (int)v208, v2, 21, 0, 0); v209 = v150; v151 = (int)v150; v152 = sub_421050(7); v153 = (*(int (**)(void))(*v209 + 148))(); v154 = (*(int (**)(void))(*v209 + 144))(); v210 = sub_8F4A20(0, 1, v154, v153, v152, v151, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v210 + 488))(v210, 5); v158 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v210 + 472); v155 = sub_40C190(-369606365); (*v158)(v210, v155); (*(void (__stdcall **)(_DWORD))(*v210 + 240))(0); sub_456260(&v157); LOBYTE(v165) = 1; sub_456000(&v157, v10, v11); sub_455FF0(&v157, v2); sub_456380(&v157, v164); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.5); v156 = sub_43D0D0(1u); *(_DWORD *)(v2 + 616) = sub_50FBD0(v156, 7, 7); LOBYTE(v165) = 0; sub_4562E0(&v157); v165 = -1; sub_410C00(&v164); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (004F7620) -------------------------------------------------------- int __thiscall sub_4F7620(_DWORD *this, int a2, int a3, char a4) { int v4; // edi int result; // eax unsigned int v6; // esi unsigned int v7; // ecx int v8; // edx v4 = this[156]; result = a2; v6 = 0; v7 = (this[157] - v4) / 6; if ( v7 ) { v8 = v4; if ( v7 <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { *(_DWORD *)a2 = *(_DWORD *)v8; *(_WORD *)(a2 + 4) = *(_WORD *)(v8 + 4); if ( *(_BYTE *)a2 == a4 && *(unsigned __int8 *)(a2 + 1) == a3 ) break; ++v6; v8 += 6; } while ( v7 > v6 ); } return result; } //----- (004F7690) -------------------------------------------------------- int __thiscall sub_4F7690(_DWORD **this, unsigned __int8 a2) { _DWORD **v2; // esi int v3; // eax const CHAR *v4; // eax v2 = this; v3 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), a2); if ( v3 ) v4 = (const CHAR *)(v3 + 21); else v4 = &byte_9A8050; return (*(int (__stdcall **)(const CHAR *))(*v2[87] + 472))(v4); } // AC9C84: using guessed type int dword_AC9C84; //----- (004F76D0) -------------------------------------------------------- void __thiscall sub_4F76D0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ST1C_4 int v4; // ST18_4 int v5; // ST14_4 int v6; // eax int v7; // ST18_4 int v8; // eax int v9; // ST18_4 int v10; // eax int v11; // ST18_4 int v12; // eax int v13; // ST1C_4 int v14; // ST18_4 int v15; // ST14_4 int v16; // eax int v17; // ST1C_4 int v18; // ST18_4 int v19; // ST14_4 int v20; // eax int v21; // ST18_4 int v22; // eax int v23; // ST18_4 int v24; // eax int v25; // ST18_4 int v26; // eax int v27; // ST1C_4 int v28; // ST18_4 int v29; // ST14_4 int v30; // eax int v31; // edi int v32; // ST1C_4 int v33; // ST18_4 int v34; // ST14_4 int v35; // eax int v36; // ST1C_4 int v37; // ST18_4 int v38; // ST14_4 int v39; // eax int v40; // ST18_4 int v41; // eax int v42; // ST18_4 int v43; // eax int v44; // ST18_4 int v45; // eax int v46; // ST18_4 int v47; // eax int v48; // edi int v49; // ST18_4 int v50; // eax int v51; // ST18_4 int v52; // eax int v53; // ST1C_4 int v54; // ST18_4 int v55; // ST14_4 int v56; // eax int v57; // ST18_4 int v58; // eax int v59; // ST18_4 int v60; // eax int v61; // ST1C_4 int v62; // ST18_4 int v63; // ST14_4 int v64; // eax float v65; // [esp+0h] [ebp-230h] char v66; // [esp+Ch] [ebp-224h] int v67; // [esp+Eh] [ebp-222h] char v68; // [esp+14h] [ebp-21Ch] int v69; // [esp+16h] [ebp-21Ah] int v70[2]; // [esp+1Ch] [ebp-214h] int v71; // [esp+24h] [ebp-20Ch] char v72; // [esp+2Ch] [ebp-204h] char v73; // [esp+2Dh] [ebp-203h] char v74; // [esp+12Ch] [ebp-104h] char v75; // [esp+12Dh] [ebp-103h] v2 = this; if ( a2 ) { v74 = 0; memset(&v75, 0, 0xFFu); v72 = 0; memset(&v73, 0, 0xFFu); sprintf(&v74, "%s", a2 + 2); strncpy(&v72, &v74, strlen(&v74) - 2); if ( *(_WORD *)(a2 + 240) ) { v65 = 1.0; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { v3 = sub_680B10((int)byte_AD9238); v4 = sub_6809D0((int)byte_AD9238); v5 = sub_680B00((int)byte_AD9238); v6 = sub_6809C0((int)byte_AD9238); sub_4F4DA0(v2[103], v6, v5, v4, v3, v65); v7 = sub_680B20((int)byte_AD9238); v8 = sub_6809E0((int)byte_AD9238); sub_4F4E40(v2[104], v8, v7, 0, 1.0); v9 = sub_680B30((int)byte_AD9238); v10 = sub_6809F0((int)byte_AD9238); sub_4F4E40(v2[105], v10, v9, 0, 1.0); sub_4F7620(v2, (int)&v71, 0, 35); v11 = *(int *)((char *)&v71 + 2); v12 = sub_680A00((int)byte_AD9238); sub_4F4E40(v2[106], v12, v11, 0, 1.0); v13 = sub_680B60((int)byte_AD9238); v14 = sub_680A20((int)byte_AD9238); v15 = sub_680B50((int)byte_AD9238); v16 = sub_680A10((int)byte_AD9238); sub_4F4DA0(v2[107], v16, v15, v14, v13, 1.0); } else { v17 = sub_680B10((int)byte_AD9238); v18 = sub_6809D0((int)byte_AD9238); v19 = sub_680B00((int)byte_AD9238); v20 = sub_6809C0((int)byte_AD9238); sub_4F4DA0(v2[103], v20, v19, v18, v17, v65); v21 = sub_680B20((int)byte_AD9238); v22 = sub_6809E0((int)byte_AD9238); sub_4F4E40(v2[104], v22, v21, 0, 1.0); v23 = sub_680B30((int)byte_AD9238); v24 = sub_6809F0((int)byte_AD9238); sub_4F4E40(v2[105], v24, v23, 0, 1.0); v25 = sub_680B40((int)byte_AD9238); v26 = sub_680A00((int)byte_AD9238); sub_4F4E40(v2[106], v26, v25, 0, 1.0); v27 = sub_680B60((int)byte_AD9238); v28 = sub_680A20((int)byte_AD9238); v29 = sub_680B50((int)byte_AD9238); v30 = sub_680A10((int)byte_AD9238); sub_4F4DA0(v2[107], v30, v29, v28, v27, 1.0); } goto LABEL_8; } if ( !strcmp(&v72, "StrongFury") ) { *(double *)v70 = (double)sub_680CC0((int)byte_AD9238); *(double *)v70 = *(double *)v70 - (double)sub_680BE0((int)byte_AD9238); *(float *)&v71 = *(double *)v70 / (double)sub_680CC0((int)byte_AD9238) * 100.0; v31 = (signed int)(*(float *)&v71 / (double)(unsigned int)v2[161]); sub_4F7620(v2, (int)&v66, v31, 28); sub_4F7620(v2, (int)&v71, v31, 29); sub_4F7620(v2, (int)v70, v31, 30); sub_4F7620(v2, (int)&v68, v31, 31); v32 = *(int *)((char *)&v71 + 2); v33 = sub_6809D0((int)byte_AD9238); v34 = v67; v35 = sub_6809C0((int)byte_AD9238); sub_4F4DA0(v2[103], v35, v34, v33, v32, 1.0); v36 = v69; v37 = sub_680A20((int)byte_AD9238); v38 = *(int *)((char *)v70 + 2); v39 = sub_680A10((int)byte_AD9238); sub_4F4DA0(v2[107], v39, v38, v37, v36, 1.0); v40 = sub_680B20((int)byte_AD9238); v41 = sub_6809E0((int)byte_AD9238); sub_4F4E40(v2[104], v41, v40, 0, 1.0); v42 = sub_680B30((int)byte_AD9238); v43 = sub_6809F0((int)byte_AD9238); sub_4F4E40(v2[105], v43, v42, 0, 1.0); v44 = sub_680B40((int)byte_AD9238); v45 = sub_680A00((int)byte_AD9238); sub_4F4E40(v2[106], v45, v44, 0, 1.0); LABEL_8: v46 = sub_680B70((int)byte_AD9238); v47 = sub_680A30((int)byte_AD9238); sub_4F4E40(v2[108], v47, v46, 0, 1.0); return; } if ( !strcmp(&v72, "StrongEndure") ) { *(double *)v70 = (double)sub_680CC0((int)byte_AD9238); *(double *)v70 = *(double *)v70 - (double)sub_680BE0((int)byte_AD9238); *(float *)&v71 = *(double *)v70 / (double)sub_680CC0((int)byte_AD9238) * 100.0; v48 = (signed int)(*(float *)&v71 / (double)(unsigned int)v2[161]); sub_4F7620(v2, (int)v70, v48, 32); sub_4F7620(v2, (int)&v68, v48, 33); v49 = *(int *)((char *)v70 + 2); v50 = sub_6809E0((int)byte_AD9238); sub_4F4E40(v2[104], v50, v49, 0, 1.0); v51 = v69; v52 = sub_680A30((int)byte_AD9238); sub_4F4E40(v2[108], v52, v51, 0, 1.0); v53 = sub_680B10((int)byte_AD9238); v54 = sub_6809D0((int)byte_AD9238); v55 = sub_680B00((int)byte_AD9238); v56 = sub_6809C0((int)byte_AD9238); sub_4F4DA0(v2[103], v56, v55, v54, v53, 1.0); v57 = sub_680B30((int)byte_AD9238); v58 = sub_6809F0((int)byte_AD9238); sub_4F4E40(v2[105], v58, v57, 0, 1.0); v59 = sub_680B40((int)byte_AD9238); v60 = sub_680A00((int)byte_AD9238); sub_4F4E40(v2[106], v60, v59, 0, 1.0); v61 = sub_680B60((int)byte_AD9238); v62 = sub_680A20((int)byte_AD9238); v63 = sub_680B50((int)byte_AD9238); v64 = sub_680A10((int)byte_AD9238); sub_4F4DA0(v2[107], v64, v63, v62, v61, 1.0); } } } //----- (004F7E10) -------------------------------------------------------- unsigned int __thiscall sub_4F7E10(_DWORD *this, __int16 a2) { _WORD *v2; // edx int v3; // esi unsigned int result; // eax __int16 v5; // di unsigned int v6; // ecx unsigned int v7; // eax _BYTE *v8; // edx int v9; // ecx int v10; // edi unsigned int v11; // eax unsigned int v12; // eax unsigned int v13; // ecx char *v14; // ecx int v15; // ecx unsigned int v16; // eax unsigned int v17; // eax unsigned int v18; // ecx char *v19; // ecx v2 = (_WORD *)this[282]; v3 = (int)(this + 282); result = (this[283] - (signed int)v2) >> 1; v5 = a2; v6 = 0; if ( result ) { if ( result <= 0 ) std::_Xout_of_range("invalid vector subscript"); while ( *v2 != a2 ) { ++v6; ++v2; if ( result <= v6 ) goto LABEL_5; } } else { LABEL_5: v7 = *(_DWORD *)(v3 + 4); if ( (unsigned int)&a2 >= v7 || (v8 = *(_BYTE **)v3, *(_DWORD *)v3 > (unsigned int)&a2) ) { v15 = *(_DWORD *)(v3 + 8); if ( v7 == v15 ) { v16 = (signed int)(v7 - *(_DWORD *)v3) >> 1; if ( v16 > 0x7FFFFFFE ) std::_Xlength_error("vector too long"); v17 = v16 + 1; v18 = (v15 - *(_DWORD *)v3) >> 1; if ( v17 > v18 ) { if ( 0x7FFFFFFF - (v18 >> 1) >= v18 ) v19 = (char *)((v18 >> 1) + v18); else v19 = 0; if ( (unsigned int)v19 < v17 ) v19 = (char *)v17; sub_4F9A90((const void **)v3, v19); } } result = *(_DWORD *)(v3 + 4); if ( result ) *(_WORD *)result = v5; } else { v9 = *(_DWORD *)(v3 + 8); v10 = ((char *)&a2 - v8) >> 1; if ( v7 == v9 ) { v11 = (signed int)(v7 - (_DWORD)v8) >> 1; if ( v11 > 0x7FFFFFFE ) std::_Xlength_error("vector too long"); v12 = v11 + 1; v13 = (v9 - (signed int)v8) >> 1; if ( v12 > v13 ) { if ( 0x7FFFFFFF - (v13 >> 1) >= v13 ) v14 = (char *)((v13 >> 1) + v13); else v14 = 0; if ( (unsigned int)v14 < v12 ) v14 = (char *)v12; sub_4F9A90((const void **)v3, v14); } } result = *(_DWORD *)(v3 + 4); if ( result ) { *(_WORD *)result = *(_WORD *)(*(_DWORD *)v3 + 2 * v10); *(_DWORD *)(v3 + 4) += 2; return result; } } *(_DWORD *)(v3 + 4) += 2; } return result; } //----- (004F82F0) -------------------------------------------------------- void __cdecl sub_4F82F0(unsigned __int64 *a1, _BYTE *a2, _BYTE *a3, _DWORD *a4) { unsigned int v4; // ebx signed int v5; // esi float v6; // ST58_4 float v7; // ST58_4 unsigned int v8; // edi unsigned __int64 v9; // rax float v10; // ST58_4 float v11; // ST58_4 unsigned __int64 v12; // rax unsigned int v13; // edi int k; // esi unsigned __int64 v15; // kr08_8 unsigned __int64 v16; // rax _DWORD *v17; // ebx char *v18; // esi unsigned __int64 v19; // kr10_8 char *v20; // esi unsigned int v21; // ST08_4 int v22; // eax unsigned __int64 v23; // [esp+18h] [ebp-8Ch] unsigned int v24; // [esp+2Ch] [ebp-78h] unsigned __int64 v25; // [esp+30h] [ebp-74h] unsigned __int64 i; // [esp+38h] [ebp-6Ch] unsigned __int64 j; // [esp+44h] [ebp-60h] void *v28; // [esp+4Ch] [ebp-58h] int v29; // [esp+5Ch] [ebp-48h] unsigned int v30; // [esp+60h] [ebp-44h] void *v31; // [esp+68h] [ebp-3Ch] int v32; // [esp+78h] [ebp-2Ch] unsigned int v33; // [esp+7Ch] [ebp-28h] char v34; // [esp+84h] [ebp-20h] int v35; // [esp+85h] [ebp-1Fh] int v36; // [esp+89h] [ebp-1Bh] int v37; // [esp+8Dh] [ebp-17h] __int16 v38; // [esp+91h] [ebp-13h] char v39; // [esp+93h] [ebp-11h] int v40; // [esp+A0h] [ebp-4h] if ( (unsigned __int8)*a3 + (unsigned __int8)*a2 <= 19 ) { sub_4018E0(a4, &unk_9BF42D, 0); v4 = 0; v5 = 1; if ( *a2 ) { v6 = (double)(unsigned __int8)*a2; v7 = pow(10.0, v6); v4 = (unsigned __int64)v7 >> 32; v5 = (unsigned __int64)v7; } v8 = 0; LODWORD(v9) = 1; if ( *a3 ) { v10 = (double)(unsigned __int8)*a3; v11 = pow(10.0, v10); v9 = (unsigned __int64)v11; v8 = HIDWORD(v9); } v12 = __PAIR__(v8, (unsigned int)v9) * __PAIR__(v4, v5); for ( i = *a1; i / v12; i /= 0xAui64 ) ; for ( j = i; j / __PAIR__(v4, v5); j /= 0xAui64 ) ; v13 = v5; v24 = v4; for ( k = (unsigned __int8)*a2 % 3; k > 0; v13 = v15 ) { --k; v15 = __PAIR__(v24, v13) / 0xA; v24 = __PAIR__(v24, v13) / 0xA >> 32; } v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v34 = 0; v25 = j; if ( v24 | v13 ) { do { v16 = v25 / __PAIR__(v24, v13); v23 = v25 % __PAIR__(v24, v13); if ( (unsigned __int16)(v25 / __PAIR__(v24, v13)) ) { v17 = a4; if ( a4[4] && (unsigned __int16)v16 < 0x64u ) { if ( (unsigned __int16)v16 >= 0xAu ) sub_401D10((int)a4, "0", 1u); else sub_401D10((int)a4, "00", 2u); } v18 = _itoa((unsigned __int16)(v25 / __PAIR__(v24, v13)), &v34, 10); sub_401D10((int)a4, v18, strlen(v18)); if ( v25 < 0x3E8 ) goto LABEL_29; sub_401D10((int)a4, ".", 1u); v25 %= __PAIR__(v24, v13); if ( !v23 ) sub_401D10((int)a4, "000", 3u); } else if ( (v24 || v13 >= 0x3E8) && a4[4] ) { sub_401D10((int)a4, ".000", 4u); } v19 = __PAIR__(v24, v13) / 0x3E8; v24 = __PAIR__(v24, v13) / 0x3E8 >> 32; v13 = v19; } while ( __PAIR__(v24, (unsigned int)v19) ); } v17 = a4; LABEL_29: if ( *a3 && j < *a1 ) { sub_401D10((int)v17, ",", 1u); v33 = 15; v32 = 0; LOBYTE(v31) = 0; v20 = _i64toa(i, &v34, 10); sub_4018E0(&v31, v20, strlen(v20)); v21 = (unsigned __int8)*a2; v40 = 0; v22 = sub_426900((const void **)&v31, (int)&v28, v21, (void *)0xFFFFFFFF); LOBYTE(v40) = 1; sub_401C20(v17, v22, 0, 0xFFFFFFFF); if ( v30 >= 0x10 ) operator delete(v28); v30 = 15; v29 = 0; LOBYTE(v28) = 0; if ( v33 >= 0x10 ) operator delete(v31); } } else { sub_4018E0(a4, "too many digits", 0xFu); } } //----- (004F86D0) -------------------------------------------------------- void __thiscall sub_4F86D0(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ecx int v5; // edx int v6; // edi int v7; // ebx int v8; // eax int v9; // eax unsigned __int8 v10; // al int v11; // eax const CHAR *v12; // ebx int v13; // edi int v14; // eax char *v15; // eax __int64 v16; // rax signed int v17; // ebx __int64 v18; // kr00_8 __int64 v19; // rax __int64 v20; // kr08_8 double v21; // st7 _DWORD *v22; // eax _DWORD *v23; // eax int v24; // ecx int v25; // edi int v26; // eax char *v27; // eax unsigned __int8 *v28; // edi int v29; // ST14_4 int v30; // ST10_4 int v31; // eax int v32; // ST14_4 int v33; // ST10_4 int v34; // eax int v35; // ST14_4 int v36; // ST10_4 int v37; // eax int v38; // ST14_4 int v39; // ST10_4 int v40; // eax int v41; // ST14_4 int v42; // ST10_4 int v43; // eax int v44; // ecx unsigned int v45; // eax unsigned int v46; // edi int v47; // eax int v48; // ST14_4 int v49; // ST10_4 int v50; // ST0C_4 int v51; // eax int v52; // eax int v53; // edi signed int v54; // ebx int v55; // eax int v56; // edi signed int v57; // ebx int v58; // eax int v59; // edi signed int v60; // ebx int v61; // ST14_4 int v62; // ST10_4 int v63; // ST0C_4 int v64; // eax int v65; // eax int v66; // edi double v67; // st7 signed int v68; // ebx int v69; // edi int v70; // ST18_4 int v71; // eax int v72; // edi int v73; // ST18_4 int v74; // eax int v75; // ecx int v76; // edi int v77; // ST18_4 int v78; // eax int v79; // edi char *v80; // eax int v81; // edi int v82; // eax char *v83; // eax int v84; // eax int v85; // ecx int v86; // edi int v87; // eax char *v88; // eax int v89; // [esp+1Ch] [ebp-1E0h] int v90[2]; // [esp+34h] [ebp-1C8h] __int64 v91; // [esp+3Ch] [ebp-1C0h] char v92; // [esp+46h] [ebp-1B6h] char v93; // [esp+47h] [ebp-1B5h] void *v94; // [esp+48h] [ebp-1B4h] int v95; // [esp+58h] [ebp-1A4h] unsigned int v96; // [esp+5Ch] [ebp-1A0h] void *v97; // [esp+64h] [ebp-198h] int v98; // [esp+74h] [ebp-188h] unsigned int v99; // [esp+78h] [ebp-184h] char v100; // [esp+80h] [ebp-17Ch] char v101; // [esp+81h] [ebp-17Bh] int v102; // [esp+180h] [ebp-7Ch] int v103; // [esp+184h] [ebp-78h] int v104; // [esp+188h] [ebp-74h] int v105; // [esp+18Ch] [ebp-70h] int v106; // [esp+190h] [ebp-6Ch] char v107; // [esp+194h] [ebp-68h] int v108; // [esp+198h] [ebp-64h] int v109; // [esp+19Ch] [ebp-60h] int v110; // [esp+1A0h] [ebp-5Ch] int v111; // [esp+1A4h] [ebp-58h] char v112; // [esp+1A8h] [ebp-54h] char v113; // [esp+1ACh] [ebp-50h] int v114; // [esp+1ADh] [ebp-4Fh] int v115; // [esp+1B1h] [ebp-4Bh] int v116; // [esp+1B5h] [ebp-47h] int v117; // [esp+1B9h] [ebp-43h] int v118; // [esp+1BDh] [ebp-3Fh] int v119; // [esp+1C1h] [ebp-3Bh] int v120; // [esp+1C5h] [ebp-37h] __int16 v121; // [esp+1C9h] [ebp-33h] char v122; // [esp+1CBh] [ebp-31h] char v123; // [esp+1CCh] [ebp-30h] int v124; // [esp+1CDh] [ebp-2Fh] int v125; // [esp+1D1h] [ebp-2Bh] int v126; // [esp+1D5h] [ebp-27h] int v127; // [esp+1D9h] [ebp-23h] int v128; // [esp+1DDh] [ebp-1Fh] int v129; // [esp+1E1h] [ebp-1Bh] int v130; // [esp+1E5h] [ebp-17h] __int16 v131; // [esp+1E9h] [ebp-13h] char v132; // [esp+1EBh] [ebp-11h] int v133; // [esp+1F8h] [ebp-4h] v2 = this; v3 = (int *)sub_680810(byte_AD9238); v4 = *v3; v5 = v3[1]; v6 = v3[2]; v7 = v3[3]; v8 = v3[4]; v103 = v5; v106 = v8; v9 = v2[92]; v102 = v4; v104 = v6; v105 = v7; v107 = 0; (*(void (**)(int, const char *, ...))(*(_DWORD *)v9 + 476))(v9, "%s", &v102); v10 = sub_6807E0(byte_AD9238); v11 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v10); v12 = &byte_9A8050; if ( v11 ) v12 = (const CHAR *)(v11 + 21); v13 = *(_DWORD *)v2[87]; v14 = sub_680890((unsigned __int8 *)byte_AD9238); v15 = sub_7549E0("%s (Lv %d)", v12, v14); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(v2[87], v15); v16 = sub_6808D0((int)byte_AD9238); v18 = v16 - sub_6808B0((int)byte_AD9238); v17 = HIDWORD(v18); *(_QWORD *)v90 = v18; v19 = sub_6808C0((int)byte_AD9238); v20 = v19 - sub_6808B0((int)byte_AD9238); v91 = v20; if ( v18 >= 0 && (SHIDWORD(v18) > 0 || v90[0]) ) v21 = (double)v91 / (double)*(signed __int64 *)v90 * 100.0; else v21 = 0.0; v123 = 0; v124 = 0; v125 = 0; v126 = 0; v127 = 0; v128 = 0; v129 = 0; v130 = 0; v131 = 0; v132 = 0; v113 = 0; v114 = 0; v115 = 0; v116 = 0; v117 = 0; v118 = 0; v119 = 0; v120 = 0; v121 = 0; v122 = 0; sub_4F4910(v20, SHIDWORD(v20), &v123); sub_4F4910(v90[0], SHIDWORD(v18), &v113); v96 = 15; v95 = 0; LOBYTE(v94) = 0; sub_4018E0(&v94, &v123, strlen(&v123)); v133 = 0; v98 = 0; LOBYTE(v97) = 0; v99 = 15; sub_4018E0(&v97, &v113, strlen(&v113)); LOBYTE(v133) = 1; if ( SHIDWORD(v20) > 0 || v20 >= 0 && (unsigned int)v91 > 0xF4240 || v17 > 0 || v17 >= 0 && v90[0] > 0xF4240u ) { v100 = 0; memset(&v101, 0, 0xFFu); sprintf(&v100, "%s/%s", &v123, &v113); if ( v20 >= 0 && (SHIDWORD(v20) > 0 || (unsigned int)v91 > 0xF4240) ) { v92 = 0; v93 = 10; v91 = (signed __int64)__PAIR__(HIDWORD(v20), (unsigned int)v91) / 1000000; sub_4F82F0((unsigned __int64 *)&v91, &v93, &v92, &v94); sub_401D10((int)&v94, "M", 1u); } if ( v17 >= 0 && (v17 > 0 || v90[0] > 0xF4240u) ) { v93 = 0; v92 = 10; *(_QWORD *)v90 = __PAIR__(v17, v90[0]) / 1000000; sub_4F82F0((unsigned __int64 *)v90, &v92, &v93, &v97); sub_401D10((int)&v97, "M", 1u); } sub_8F2EA0((void **)v2[95], &v100); *(_DWORD *)(v2[95] + 272) = dword_AD01E8; if ( v99 < 0x10 ) HIDWORD(v91) = &v97; else HIDWORD(v91) = v97; if ( v96 < 0x10 ) v90[1] = (int)&v94; else v90[1] = (int)v94; (*(void (**)(_DWORD, const char *, ...))(*(_DWORD *)v2[95] + 476))( v2[95], "%s/%s %I64d%%", v90[1], HIDWORD(v91), (unsigned __int64)v21); } else { (*(void (**)(_DWORD, const char *, ...))(*(_DWORD *)v2[95] + 476))( v2[95], "%s/%s %I64d%%", &v123, &v113, (unsigned __int64)v21); *(_DWORD *)(v2[95] + 272) = 0; } v22 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v22) ) { v23 = (_DWORD *)sub_6D3800(); v108 = v23[4]; v109 = v23[5]; v24 = v2[88]; v110 = v23[6]; v111 = v23[7]; v112 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v24 + 472))(&v108); } else { (*(void (__stdcall **)(const char *))(*(_DWORD *)v2[88] + 472))("-"); } if ( sub_680740(byte_AD9238) ) { v25 = *(_DWORD *)v2[109]; v26 = sub_680740(byte_AD9238); v27 = sub_7549E0("%d", *(_DWORD *)(v26 + 55)); (*(void (__thiscall **)(_DWORD, char *))(v25 + 472))(v2[109], v27); } v28 = (unsigned __int8 *)sub_680740(byte_AD9238); v29 = v28[88]; v30 = sub_680AA0((int)byte_AD9238); v31 = sub_680960((int)byte_AD9238); sub_4F4E40(v2[98], v31, v30, v29, 1.0); v32 = v28[90]; v33 = sub_680AB0((int)byte_AD9238); v34 = sub_680970((int)byte_AD9238); sub_4F4E40(v2[99], v34, v33, v32, 1.0); v35 = v28[89]; v36 = sub_680AC0((int)byte_AD9238); v37 = sub_680980((int)byte_AD9238); sub_4F4E40(v2[100], v37, v36, v35, 1.0); v38 = v28[91]; v39 = sub_680AE0((int)byte_AD9238); v40 = sub_6809A0((int)byte_AD9238); sub_4F4E40(v2[101], v40, v39, v38, 1.0); v41 = v28[92]; v42 = sub_680AF0((int)byte_AD9238); v43 = sub_6809B0((int)byte_AD9238); sub_4F4E40(v2[102], v43, v42, v41, 1.0); if ( *((_BYTE *)v2 + 1144) ) { v44 = v2[282]; v45 = (v2[283] - v44) >> 1; if ( v45 ) { v46 = 0; if ( v45 ) { if ( v45 <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { v47 = sub_4DCAF0(*(_WORD *)(v44 + 2 * v46)); if ( v47 ) sub_4F76D0(v2, v47); v44 = v2[282]; ++v46; } while ( (v2[283] - v44) >> 1 > v46 ); } } } else { v48 = sub_680B10((int)byte_AD9238); v49 = sub_6809D0((int)byte_AD9238); v50 = sub_680B00((int)byte_AD9238); v51 = sub_6809C0((int)byte_AD9238); sub_4F4DA0(v2[103], v51, v50, v49, v48, 1.0); v90[1] = sub_680B20((int)byte_AD9238); v52 = sub_6809E0((int)byte_AD9238); v53 = v2[104]; HIDWORD(v91) = (signed int)(double)v52; v54 = (signed int)(double)v90[1]; if ( HIDWORD(v91) == v54 ) { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v53 + 468))(v53, &dword_AA8C68); } else if ( SHIDWORD(v91) <= v54 ) { (*(void (__thiscall **)(int, char *))(*(_DWORD *)v53 + 468))(v53, aIii); } else { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v53 + 468))(v53, &dword_AA8C88); } (*(void (**)(int, const char *, ...))(*(_DWORD *)v53 + 476))(v53, "%d", v54); v90[1] = sub_680B30((int)byte_AD9238); v55 = sub_6809F0((int)byte_AD9238); v56 = v2[105]; HIDWORD(v91) = (signed int)(double)v55; v57 = (signed int)(double)v90[1]; if ( HIDWORD(v91) == v57 ) { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v56 + 468))(v56, &dword_AA8C68); } else if ( SHIDWORD(v91) <= v57 ) { (*(void (__thiscall **)(int, char *))(*(_DWORD *)v56 + 468))(v56, aIii); } else { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v56 + 468))(v56, &dword_AA8C88); } (*(void (**)(int, const char *, ...))(*(_DWORD *)v56 + 476))(v56, "%d", v57); v90[1] = sub_680B40((int)byte_AD9238); v58 = sub_680A00((int)byte_AD9238); v59 = v2[106]; HIDWORD(v91) = (signed int)(double)v58; v60 = (signed int)(double)v90[1]; if ( HIDWORD(v91) == v60 ) { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v59 + 468))(v59, &dword_AA8C68); } else if ( SHIDWORD(v91) <= v60 ) { (*(void (__thiscall **)(int, char *))(*(_DWORD *)v59 + 468))(v59, aIii); } else { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v59 + 468))(v59, &dword_AA8C88); } (*(void (**)(int, const char *, ...))(*(_DWORD *)v59 + 476))(v59, "%d", v60); v61 = sub_680B60((int)byte_AD9238); v62 = sub_680A20((int)byte_AD9238); v63 = sub_680B50((int)byte_AD9238); v64 = sub_680A10((int)byte_AD9238); sub_4F4DA0(v2[107], v64, v63, v62, v61, 1.0); HIDWORD(v91) = sub_680B70((int)byte_AD9238); v65 = sub_680A30((int)byte_AD9238); v66 = v2[108]; v90[1] = v65; v67 = (double)SHIDWORD(v91); v68 = (signed int)(double)v65; HIDWORD(v91) = (signed int)v67; if ( v68 == (signed int)v67 ) { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v66 + 468))(v66, &dword_AA8C68); } else if ( v68 <= (signed int)v67 ) { (*(void (__thiscall **)(int, char *))(*(_DWORD *)v66 + 468))(v66, aIii); } else { (*(void (__thiscall **)(int, int *))(*(_DWORD *)v66 + 468))(v66, &dword_AA8C88); } (*(void (**)(int, const char *, ...))(*(_DWORD *)v66 + 476))(v66, "%d", HIDWORD(v91)); } v69 = *(_DWORD *)v2[89]; v70 = sub_680CC0((int)byte_AD9238); v71 = sub_680BE0((int)byte_AD9238); (*(void (**)(_DWORD, const char *, ...))(v69 + 476))(v2[89], "%d/%d", v71, v70); switch ( sub_652070(dword_AD8EBC) ) { case 0x1A: case 0x1B: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[288] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[288] + 256))(1); v72 = *(_DWORD *)v2[289]; v73 = sub_680CF0((int)byte_AD9238); v74 = sub_680C10((int)byte_AD9238); (*(void (**)(_DWORD, const char *, ...))(v72 + 476))(v2[289], "%d/%d", v74, v73); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[289] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[287] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[287] + 256))(0); v75 = v2[90]; break; default: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[287] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[287] + 256))(1); v76 = *(_DWORD *)v2[90]; v77 = sub_680CD0((int)byte_AD9238); v78 = sub_680BF0((int)byte_AD9238); (*(void (**)(_DWORD, const char *, ...))(v76 + 476))(v2[90], "%d/%d", v78, v77); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[90] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[288] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[288] + 256))(0); v75 = v2[289]; break; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v75 + 256))(0); v79 = *(_DWORD *)v2[91]; v80 = sub_7549E0("%d", *(_DWORD *)dword_AD9E30); (*(void (__thiscall **)(_DWORD, char *))(v79 + 472))(v2[91], v80); if ( v2[110] ) { v81 = *(_DWORD *)v2[110]; v82 = sub_680740(byte_AD9238); v83 = sub_7549E0("%d Point", *(_DWORD *)(v82 + 95)); (*(void (__thiscall **)(_DWORD, char *))(v81 + 472))(v2[110], v83); } v84 = sub_685620(&byte_ADA230); v85 = v2[148]; if ( v84 ) { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v85 + 256))(1, v89); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[149] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[150] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[151] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[152] + 256))(1); v86 = *(_DWORD *)v2[153]; v87 = sub_685620(&byte_ADA230); v88 = sub_7549E0("%2d", v87); (*(void (__thiscall **)(_DWORD, char *))(v86 + 472))(v2[153], v88); } else { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v85 + 256))(0, v89); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[149] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[150] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[151] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[152] + 256))(0); (*(void (__thiscall **)(_DWORD, const char *))(*(_DWORD *)v2[153] + 472))(v2[153], "0"); } if ( v99 >= 0x10 ) operator delete(v97); v99 = 15; v98 = 0; LOBYTE(v97) = 0; if ( v96 >= 0x10 ) operator delete(v94); } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AC9C84: using guessed type int dword_AC9C84; // AD01E8: using guessed type int dword_AD01E8; // ADA230: using guessed type char byte_ADA230; //----- (004F9350) -------------------------------------------------------- _DWORD *__thiscall sub_4F9350(_DWORD *this) { _DWORD *v1; // esi void ***v2; // eax void ***v3; // edi void ***v4; // eax int v5; // edi void *v6; // edi const void *v7; // eax void *v8; // edi const void *v9; // ecx int v10; // ecx void ***v14; // [esp+14h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CharInfoWin::`vftable'; v1[58] = &CharInfoWin::`vftable'; v1[142] = 0; v1[156] = 0; v1[157] = 0; v1[158] = 0; v1[282] = 0; v1[283] = 0; v1[284] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[141] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[110] = 0; v2 = (void ***)operator new(0x44u); v3 = v2; if ( v2 ) { sub_6C2E00(v2, 0); v4 = v3; *v3 = &StatPointReqTask::`vftable'; v3[2] = &StatPointReqTask::`vftable'; v14 = v3; } else { v14 = 0; v4 = 0; } v5 = v1[142]; if ( (void ***)v5 != v4 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4 = v14; } v1[142] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)v4 + 1); } (**(void (__thiscall ***)(int, int))(v1[142] + 8))(v1[142] + 8, (int)(v1 + 58)); v1[148] = 0; v1[149] = 0; v1[150] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; *((_BYTE *)v1 + 1144) = 0; v1[160] = 0; v1[161] = 0; v6 = (void *)v1[282]; v7 = (const void *)v1[283]; if ( v6 != v7 ) { memcpy_0(v6, v7, 0); v1[283] = v6; } if ( (v1[283] - v1[282]) & 0xFFFFFFFE ) { v8 = (void *)v1[282]; v9 = (const void *)v1[283]; if ( v8 != v9 ) { memcpy_0(v8, v9, 0); v1[283] = v8; } } if ( (v1[157] - v1[156]) / 6 ) { v10 = v1[156]; if ( v10 != v1[157] ) v1[157] = v10; } v1[287] = 0; v1[288] = 0; v1[289] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BF998: using guessed type void *StatPointReqTask::`vftable'; // 9BF9B4: using guessed type void *StatPointReqTask::`vftable'; // 9BF9CC: using guessed type void *CharInfoWin::`vftable'; // 9BF9EC: using guessed type void *CharInfoWin::`vftable'; //----- (004F9630) -------------------------------------------------------- LONG __thiscall sub_4F9630(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi int v4; // ecx const void *v7; // ecx void *v8; // edi int v9; // edi v1 = this; *this = &CharInfoWin::`vftable'; this[58] = &CharInfoWin::`vftable'; v2 = this[142]; if ( v2 ) *(_DWORD *)(v2 + 20) = 2; v3 = this[142]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[142] = 0; } if ( (v1[157] - v1[156]) / 6 ) { v4 = v1[156]; if ( v4 != v1[157] ) v1[157] = v4; } if ( (v1[283] - v1[282]) & 0xFFFFFFFE ) { v7 = (const void *)v1[283]; v8 = (void *)v1[282]; if ( v8 != v7 ) { memcpy_0(v8, v7, 0); v1[283] = v8; } } v1[160] = 0; v1[161] = 0; *((_BYTE *)v1 + 1144) = 0; if ( v1[282] ) operator delete((void *)v1[282]); v1[282] = 0; v1[283] = 0; v1[284] = 0; if ( v1[156] ) operator delete((void *)v1[156]); v1[156] = 0; v1[157] = 0; v1[158] = 0; v9 = v1[142]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return sub_8F10F0(v1); } // 9BF9CC: using guessed type void *CharInfoWin::`vftable'; // 9BF9EC: using guessed type void *CharInfoWin::`vftable'; //----- (004F97F0) -------------------------------------------------------- volatile LONG *__cdecl sub_4F97F0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x488u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_4F9350(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004F9920) -------------------------------------------------------- int __thiscall sub_4F9920(unsigned int *this, int a2, __int16 a3) { unsigned int v3; // edx unsigned int *v4; // ecx unsigned int v5; // edi unsigned int v6; // edx unsigned int v7; // eax int result; // eax unsigned int v9; // esi int v10; // edx __int16 v11; // ST14_2 v3 = this[157]; v4 = this + 156; v5 = *v4; v6 = (unsigned __int64)(715827883i64 * (signed int)(v3 - *v4)) >> 32; v7 = v6 + (v6 >> 31); if ( !(v6 + (v6 >> 31)) ) return sub_4F9EC0(v4, (unsigned int)&a2); v9 = 0; if ( !v7 ) return sub_4F9EC0(v4, (unsigned int)&a2); if ( v7 <= 0 ) goto LABEL_13; while ( 1 ) { v10 = *(_DWORD *)v5; v11 = *(_WORD *)(v5 + 4); if ( __PAIR__(BYTE1(v10), (unsigned __int8)*(_DWORD *)v5) == (_WORD)a2 ) break; ++v9; v5 += 6; if ( v7 <= v9 ) return sub_4F9EC0(v4, (unsigned int)&a2); } if ( v7 <= v9 ) LABEL_13: std::_Xout_of_range("invalid vector subscript"); result = *v4 + 6 * v9; *(_DWORD *)result = a2; *(_WORD *)(result + 4) = a3; return result; } //----- (004F99D0) -------------------------------------------------------- void *__stdcall sub_4F99D0(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x7FFFFFFF || (result = operator new(2 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004F9A30) -------------------------------------------------------- void *__stdcall sub_4F9A30(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x2AAAAAAA || (result = operator new(6 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (004F9A90) -------------------------------------------------------- char *__thiscall sub_4F9A90(const void **this, char *a2) { char *result; // eax const void **v3; // esi char *v4; // ebx int v5; // edi result = a2; v3 = this; if ( (unsigned int)a2 > 0x7FFFFFFF ) std::_Xlength_error("vector too long"); if ( ((_BYTE *)this[2] - (_BYTE *)*this) >> 1 < (unsigned int)a2 ) { v4 = (char *)sub_4F99D0(a2); memcpy_0(v4, *v3, 2 * (((_BYTE *)v3[1] - (_BYTE *)*v3) >> 1)); v5 = ((_BYTE *)v3[1] - (_BYTE *)*v3) >> 1; if ( *v3 ) operator delete((void *)*v3); result = a2; *v3 = v4; v3[2] = &v4[2 * (_DWORD)a2]; v3[1] = &v4[2 * v5]; } return result; } //----- (004F9B10) -------------------------------------------------------- int __cdecl sub_4F9B10(int a1, int a2, int a3) { int v3; // ecx int result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 6 ) { if ( result ) { *(_DWORD *)result = *(_DWORD *)v3; *(_WORD *)(result + 4) = *(_WORD *)(v3 + 4); } v3 += 6; } return result; } //----- (004F9B40) -------------------------------------------------------- char *__thiscall sub_4F9B40(int this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 1; if ( 0x7FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 1; if ( (unsigned int)result > v4 ) { if ( 0x7FFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_4F9A90((const void **)this, v5); } return result; } //----- (004F9BA0) -------------------------------------------------------- int __thiscall sub_4F9BA0(_DWORD *this, int a2, size_t a3, char a4) { int v4; // esi size_t v5; // eax void *v6; // edi unsigned int v7; // ecx unsigned int v8; // eax char *v9; // ecx int result; // eax char *v11; // eax bool v12; // cf v4 = (int)this; v5 = this[4]; if ( v5 < a2 ) std::_Xout_of_range("invalid string position"); if ( -1 - v5 <= a3 ) std::_Xlength_error("string too long"); if ( !a3 ) return v4; v6 = (void *)(v5 + a3); if ( v5 + a3 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v7 = this[5]; if ( v7 < (unsigned int)v6 ) { sub_4015D0((const void **)v4, v6, v5); if ( v6 ) { LABEL_10: v8 = *(_DWORD *)(v4 + 20); if ( v8 < 0x10 ) v9 = (char *)v4; else v9 = *(char **)v4; if ( v8 < 0x10 ) v11 = (char *)v4; else v11 = *(char **)v4; memcpy_0(&v11[a2 + a3], &v9[a2], *(_DWORD *)(v4 + 16) - a2); sub_40A9F0((_DWORD *)v4, a2, a3, a4); v12 = *(_DWORD *)(v4 + 20) < 0x10u; *(_DWORD *)(v4 + 16) = v6; if ( !v12 ) { *((_BYTE *)v6 + *(_DWORD *)v4) = 0; return v4; } *((_BYTE *)v6 + v4) = 0; } return v4; } if ( v6 ) goto LABEL_10; *(_DWORD *)(v4 + 16) = 0; if ( v7 < 0x10 ) { result = v4; *(_BYTE *)v4 = 0; } else { **(_BYTE **)v4 = 0; result = v4; } return result; } //----- (004F9CE0) -------------------------------------------------------- _WORD *__thiscall sub_4F9CE0(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // edi _WORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *this > (unsigned int)a2 ) { if ( v3 == this[2] ) sub_4F9B40((int)this, 1); result = (_WORD *)v2[1]; if ( result ) *result = *a2; } else { v4 = ((signed int)a2 - *this) >> 1; if ( v3 == this[2] ) sub_4F9B40((int)this, 1); result = (_WORD *)v2[1]; if ( result ) { *result = *(_WORD *)(*v2 + 2 * v4); v2[1] += 2; return result; } } v2[1] += 2; return result; } //----- (004F9D50) -------------------------------------------------------- unsigned int __thiscall sub_4F9D50(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax void *v4; // eax int v5; // ST04_4 signed int v6; // ST00_4 int v7; // edi int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; if ( (unsigned int)a2 > 0x2AAAAAAA ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 6; if ( result < (unsigned int)a2 ) { v4 = sub_4F9A30(a2); v5 = v2[1]; v6 = *v2; v9 = v4; v11 = 0; sub_4F9B10(v6, v5, (int)v4); v7 = (signed int)(v2[1] - *v2) / 6; if ( *v2 ) operator delete((void *)*v2); result = (unsigned int)v9; v2[2] = (unsigned int)v9 + 6 * (_DWORD)a2; v2[1] = result + 6 * v7; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (004F9E40) -------------------------------------------------------- unsigned int __thiscall sub_4F9E40(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 6; if ( 715827882 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 6; if ( v3 > result ) { if ( 715827882 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_4F9D50(this, v5); } return result; } //----- (004F9EC0) -------------------------------------------------------- unsigned int __thiscall sub_4F9EC0(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx int v4; // esi int v5; // ecx unsigned int result; // eax v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_4F9E40(v2, 1); result = v2[1]; if ( result ) { *(_DWORD *)result = *(_DWORD *)a2; *(_WORD *)(result + 4) = *(_WORD *)(a2 + 4); } } else { v4 = (signed int)(a2 - *v2) / 6; if ( v3 == v2[2] ) sub_4F9E40(v2, 1); v5 = *v2 + 6 * v4; result = v2[1]; if ( result ) { *(_DWORD *)result = *(_DWORD *)v5; *(_WORD *)(result + 4) = *(_WORD *)(v5 + 4); v2[1] += 6; return result; } } v2[1] += 6; return result; } //----- (004F9F50) -------------------------------------------------------- void *__thiscall sub_4F9F50(void *this, char a2) { void *v2; // esi v2 = this; sub_4F9630(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004FA020) -------------------------------------------------------- int __thiscall sub_4FA020(_BYTE *this) { _BYTE *v1; // ebx int v2; // esi signed int v3; // edi v1 = this; v2 = (int)(this + 2608); v3 = 7; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 472))(&unk_9BFC36); v2 += 4; --v3; } while ( v3 ); return sub_8F28E0(v1); } //----- (004FA070) -------------------------------------------------------- void __thiscall sub_4FA070(_DWORD *this, int a2, unsigned __int8 a3, char a4, int a5, __int16 a6) { _DWORD *v6; // edi _DWORD *v7; // ecx unsigned int v8; // esi void *v9; // eax unsigned int v10; // eax void *v11; // eax void *v12; // eax int v13; // [esp-14h] [ebp-18h] int v14; // [esp-10h] [ebp-14h] int v15; // [esp-Ch] [ebp-10h] v6 = this; v7 = (_DWORD *)this[625]; if ( v7 && a5 ) { v8 = 0; switch ( a5 ) { case 1: v12 = sub_74CD00(&unk_AD8C08, a3, a4); v10 = ((int (__thiscall *)(_DWORD, void *))loc_466CA0)(v6[625], v12); v15 = 0; v14 = 0; v13 = 0; break; case 2: v11 = sub_74CD00(&unk_AD8C08, a3, a4); v10 = ((int (__thiscall *)(_DWORD, void *))loc_466CA0)(v6[625], v11); v15 = 255; v14 = 255; v13 = 255; break; case 3: v9 = sub_74CD00(&unk_AD8C08, a3, a4); v10 = ((int (__thiscall *)(_DWORD, void *))loc_466CA0)(v6[625], v9); v15 = 255; v14 = 0; v13 = 255; break; default: sub_464C80(v7, 0, 0, 0, 255, 255); LABEL_11: LOBYTE(v6[v8 + 86]) = a3; BYTE1(v6[v8 + 86]) = ((_BYTE)a5 << 6) | a4 & 0x3F; HIWORD(v6[v8 + 86]) = a6; return; } v8 = v10; sub_464C80((_DWORD *)v6[625], v10, 0, v13, v14, v15); goto LABEL_11; } } //----- (004FA170) -------------------------------------------------------- char sub_4FA170() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "CharTitle"); return (char)v0; } //----- (004FA1A0) -------------------------------------------------------- void sub_4FA1A0() { char *v0; // esi unsigned int v1; // edx unsigned int v2; // ebx signed int v3; // eax signed int v4; // edi int v5; // edx __int16 v6; // cx __int16 v7; // cx bool v8; // zf unsigned int v9; // [esp+4h] [ebp-Ch] int v10; // [esp+8h] [ebp-8h] signed int v11; // [esp+Ch] [ebp-4h] v0 = dword_AD8EBC; v9 = *((_DWORD *)dword_AD8EBC + 1007); v1 = v9; if ( v9 != 1 ) { v2 = 1; v11 = 1; v3 = 2958; v10 = v9 - 1; do { if ( v2 < v1 ) { v4 = v3; v5 = v1 - v2; do { if ( v0[v3 - 2] == v0[v4] ) { v6 = *(_WORD *)&v0[v3]; *(_WORD *)&v0[v3] = *(_WORD *)&v0[v4]; *(_WORD *)&dword_AD8EBC[v4] = v6; v0 = dword_AD8EBC; if ( (unsigned __int8)(dword_AD8EBC[v3 - 1] & 0x3F) > (unsigned __int8)(dword_AD8EBC[v3 + 1] & 0x3F) ) { v7 = *(_WORD *)&dword_AD8EBC[v3 - 2]; *(_WORD *)&dword_AD8EBC[v3 - 2] = *(_WORD *)&dword_AD8EBC[v3]; *(_WORD *)&dword_AD8EBC[v3] = v7; v0 = dword_AD8EBC; } } v4 += 2; --v5; } while ( v5 ); v1 = v9; v2 = v11; } ++v2; v3 += 2; v8 = v10-- == 1; v11 = v2; } while ( !v8 ); } } //----- (004FA2E0) -------------------------------------------------------- char __thiscall sub_4FA2E0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[625], v2[626]); return v3; } //----- (004FA310) -------------------------------------------------------- int __thiscall sub_4FA310(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // esi signed int v4; // edi v1 = this; result = sub_464F50(this[625]); if ( (unsigned int)BYTE1(v1[result + 86]) >> 6 == 2 ) { sub_4B8D70(v1[644], result); v3 = (int)(v1 + 652); v4 = 7; do { result = (*(int (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9BFC37); v3 += 4; --v4; } while ( v4 ); } return result; } //----- (004FA360) -------------------------------------------------------- int __thiscall sub_4FA360(_DWORD *this) { *(_DWORD *)(this[625] + 344) = *(_DWORD *)(this[626] + 300); return sub_465130((_DWORD *)this[625]); } //----- (004FA390) -------------------------------------------------------- int __thiscall sub_4FA390(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (004FA410) -------------------------------------------------------- signed int __thiscall sub_4FA410(_DWORD *this) { _DWORD *v1; // edi char *v2; // ecx unsigned int v3; // esi signed int result; // eax v1 = this; if ( this[625] ) { sub_4FA1A0(); sub_466A50((_DWORD *)v1[625]); v2 = dword_AD8EBC; v3 = 0; if ( *((_DWORD *)dword_AD8EBC + 1007) ) { do { sub_4FA070( v1, v3, v2[2 * v3 + 2956], v2[2 * v3 + 2957] & 0x3F, (unsigned int)(unsigned __int8)v2[2 * v3 + 2957] >> 6, 0); v2 = dword_AD8EBC; ++v3; } while ( v3 < *((_DWORD *)dword_AD8EBC + 1007) ); } sub_465130((_DWORD *)v1[625]); result = sub_4638F0((_DWORD *)v1[626], *(_DWORD *)(v1[625] + 336)); } return result; } //----- (004FA4A0) -------------------------------------------------------- int __cdecl sub_4FA4A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+10h] [ebp-10h] int v6; // [esp+1Ch] [ebp-4h] v1 = operator new(0xA50u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &CharTitleWin::`vftable'; *(_DWORD *)(v2 + 232) = &CharTitleWin::`vftable'; sub_747420((_DWORD *)(v2 + 2512)); *(_DWORD *)(v2 + 2508) = 0; *(_DWORD *)(v2 + 2504) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9BFEC8: using guessed type void *CharTitleWin::`vftable'; // 9BFEE4: using guessed type void *CharTitleWin::`vftable'; //----- (004FA600) -------------------------------------------------------- void __thiscall sub_4FA600(_BYTE *this, int a2) { _BYTE *v2; // ebx int v3; // esi signed int v4; // edi const char *v5; // edi char *v6; // eax int v7; // esi char *v8; // eax char *v9; // eax unsigned int v10; // edi int v11; // edx int v12; // esi void *v13; // [esp+10h] [ebp-1Ch] _BYTE *v14; // [esp+14h] [ebp-18h] int v15; // [esp+28h] [ebp-4h] v2 = this; sub_4FB570(&v13, (unsigned __int8)this[4 * a2 + 344], this[4 * a2 + 345] & 0x3F); v15 = 0; v3 = (int)(v2 + 2608); v4 = 7; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9BFC3E); v3 += 4; --v4; } while ( v4 ); v5 = (const char *)sub_74CD00(&unk_AD8C08, v2[4 * a2 + 344], v2[4 * a2 + 345] & 0x3F); if ( !strcmp(dword_AD8EBC + 209, v5) ) { v6 = (char *)v13; } else { v7 = **((_DWORD **)v2 + 652); v8 = (char *)sub_40A910(-623582415); v9 = sub_7549E0(v8, v5); (*(void (__thiscall **)(_DWORD, char *))(v7 + 472))(*((_DWORD *)v2 + 652), v9); v6 = (char *)v13; if ( v2[4 * a2 + 344] != 10 && v13 != v14 ) { v10 = 0; if ( (v14 - (_BYTE *)v13) >> 2 ) { v11 = -2612 - (_DWORD)v2; v12 = (int)(v2 + 2612); while ( 1 ) { (*(void (__stdcall **)(int))(**(_DWORD **)v12 + 472))(*(_DWORD *)&v6[v12 + v11] + 5); v6 = (char *)v13; ++v10; v12 += 4; if ( v10 >= (v14 - (_BYTE *)v13) >> 2 ) break; v11 = -2612 - (_DWORD)v2; } } } } if ( v6 ) operator delete(v6); } //----- (004FA790) -------------------------------------------------------- void __thiscall sub_4FA790(char *this, unsigned __int8 *a2) { int v2; // esi signed int v3; // ebx unsigned __int8 v4; // al char v5; // ST08_1 void *v6; // eax int v7; // ebx int v8; // esi void *v9; // ST08_4 char *v10; // eax char *v11; // eax char *v12; // eax unsigned int v13; // edi int v14; // edx int v15; // esi void *v16; // [esp+10h] [ebp-20h] int v17; // [esp+14h] [ebp-1Ch] _DWORD **v18; // [esp+20h] [ebp-10h] int v19; // [esp+2Ch] [ebp-4h] v18 = (_DWORD **)this; if ( a2 ) { v2 = (int)(this + 2580); v3 = 7; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 472))(&unk_9BFC3F); v2 += 4; --v3; } while ( v3 ); sub_4FB570(&v16, *a2, a2[1] & 0x3F); v4 = *a2; v5 = a2[1] & 0x3F; v19 = 0; v6 = sub_74CD00(&unk_AD8C08, v4, v5); if ( v6 && (v7 = (int)v18, v8 = *v18[645], v9 = v6, v10 = (char *)sub_40A910(-505729724), v11 = sub_7549E0(v10, v9), (*(void (__thiscall **)(_DWORD, char *))(v8 + 472))(*(_DWORD *)(v7 + 2580), v11), *a2) && *a2 != 10 ) { v12 = (char *)v16; v13 = 0; if ( (v17 - (signed int)v16) >> 2 ) { v14 = -2584 - v7; v15 = v7 + 2584; while ( 1 ) { (*(void (__stdcall **)(int))(**(_DWORD **)v15 + 472))(*(_DWORD *)&v12[v15 + v14] + 5); v12 = (char *)v16; ++v13; v15 += 4; if ( v13 >= (v17 - (signed int)v16) >> 2 ) break; v14 = -2584 - v7; } } } else { v12 = (char *)v16; } if ( v12 ) operator delete(v12); } } //----- (004FA8E0) -------------------------------------------------------- void __thiscall sub_4FA8E0(int this, int a2, int a3) { int v3; // eax switch ( a2 ) { case 10: sub_4FA310((_DWORD **)this); break; case 11: sub_4FA360((_DWORD *)this); break; case 12: sub_4FA600((_BYTE *)this, a3); break; case 13: v3 = *(_DWORD *)(this + 2508); if ( v3 ) *(_DWORD *)(this + 2508) = v3 - 1; break; case 14: ++*(_DWORD *)(this + 2508); break; case 15: sub_4FA170(); break; default: return; } } //----- (004FA960) -------------------------------------------------------- char __thiscall sub_4FA960(_DWORD *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi bool v4; // zf char result; // al int v6; // ebx char *v7; // eax volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // eax int v18; // eax int v19; // eax int *v20; // ecx int v21; // edx int v22; // eax int v23; // edx volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG v27; // edx int v28; // eax int v29; // edx volatile LONG *v30; // eax int v31; // eax volatile LONG *v32; // eax volatile LONG v33; // edx const CHAR *v34; // eax int v35; // eax volatile LONG *v36; // eax volatile LONG v37; // edx const CHAR *v38; // eax int *v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax volatile LONG **v42; // eax int v43; // edx void **v44; // eax void **v45; // eax void **v46; // eax void **v47; // eax void **v48; // eax void **v49; // eax int v50; // eax int v51; // eax int v52; // ecx int (*v53)(void); // eax int v54; // eax int v55; // eax void (__thiscall ***v56)(_DWORD, signed int); // esi void *v57; // [esp+8Ch] [ebp-80h] int v58; // [esp+90h] [ebp-7Ch] int v59; // [esp+94h] [ebp-78h] char v60; // [esp+98h] [ebp-74h] char v61; // [esp+9Ch] [ebp-70h] int v62; // [esp+A0h] [ebp-6Ch] int v63; // [esp+A4h] [ebp-68h] int v64; // [esp+A8h] [ebp-64h] int v65; // [esp+ACh] [ebp-60h] int v66; // [esp+B0h] [ebp-5Ch] int v67; // [esp+B4h] [ebp-58h] int v68; // [esp+B8h] [ebp-54h] int v69; // [esp+BCh] [ebp-50h] int v70; // [esp+C0h] [ebp-4Ch] volatile LONG *v71; // [esp+C4h] [ebp-48h] int v72; // [esp+C8h] [ebp-44h] int *v73; // [esp+CCh] [ebp-40h] int v74; // [esp+D0h] [ebp-3Ch] int v75; // [esp+D4h] [ebp-38h] int *v76; // [esp+D8h] [ebp-34h] int v77; // [esp+DCh] [ebp-30h] void *v78; // [esp+E0h] [ebp-2Ch] int v79; // [esp+F0h] [ebp-1Ch] unsigned int v80; // [esp+F4h] [ebp-18h] int v81; // [esp+108h] [ebp-4h] v2 = (int)this; this[644] = a2; v77 = 0; v81 = 0; v71 = (volatile LONG *)sub_43D0D0(4u); if ( !v71 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v77; v81 = -1; if ( !v77 || InterlockedDecrement((volatile LONG *)(v77 + 4)) ) return 0; v4 = v77 == 0; LABEL_5: if ( !v4 ) (**v3)(v3, 1); return 0; } v6 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\CharTitle.nif"); sub_8F66B0(v7, (int)&v77, v6); if ( !v77 ) return 0; v8 = sub_8FB140(v77, (int)"Plane01", (int)&v75, (int)&v74, 0); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"CharTitleWin", 0) ) { v10 = v75; v11 = v74; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v77, (int)"Theme", (int)&v75, (int)&v74, v12); else v13 = sub_8FB140(v77, (int)"Theme", (int)&v75, (int)&v74, 0); sub_8F3EB0(v75 - v10, v74 - v11, (int)v13, v2, 0, 0); v76 = (int *)sub_8FB140(v77, (int)"ClsNor", (int)&v75, (int)&v74, v71); sub_8FB650(v76, v77, (int)"ClsClick"); sub_8FB650(v76, v77, (int)"ClsOver"); sub_90C8D0(v75 - v10, v74 - v11, (int)v76, v2); v72 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("HelpLinkNor") ) { v76 = (int *)sub_8FB140(v77, (int)"HelpLinkNor", (int)&v75, (int)&v74, (volatile LONG *)v72); sub_8FB650(v76, v77, (int)"HelpLinkClick"); sub_8FB650(v76, v77, (int)"HelpLinkOver"); sub_8FE0F0(v75 - v10, v74 - v11, (int)v76, v2, 15, 0, 0); } v14 = sub_8FB140(v77, (int)"Panel01", (int)&v75, (int)&v74, v71); v15 = sub_8F3EB0(v75 - v10, v74 - v11, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v77, (int)"Panel02", (int)&v75, (int)&v74, v71); sub_8F3EB0(v75 - v10, v74 - v11, (int)v16, v2, 0, 0); v17 = sub_8FB140(v77, (int)"Panel03", (int)&v75, (int)&v74, v71); v76 = (int *)sub_8F3EB0(v75 - v10, v74 - v11, (int)v17, v2, 0, 0); v18 = sub_421050(0); v69 = v18; if ( v18 ) { v19 = *(_DWORD *)(v18 + 384); v20 = v76; *(_DWORD *)(v2 + 2636) = v19; v21 = *v20; v72 = v19; v22 = (*(int (**)(void))(v21 + 144))(); v23 = *v76; v68 = v22; (*(void (**)(void))(v23 + 148))(); v70 = 0; v72 *= 2; v73 = (int *)(v2 + 2580); do { v24 = sub_8F4A20( v72, v70 * (*(_DWORD *)(v2 + 2636) + 8) + 5, v68, *(_DWORD *)(v2 + 2636) + 8, v69, (int)v76, 0, 0); *v73 = (int)v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v73 + 240))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)*v73 + 472))(&unk_9BFC1F); ++v73; ++v70; } while ( v70 < 7 ); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 2580) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 2580) + 472))(dword_AD8EBC + 209); v25 = sub_8FB140(v77, (int)"Panel04", (int)&v75, (int)&v74, v71); v26 = sub_8F3EB0(v75 - v10, v74 - v11, (int)v25, v2, 0, 0); v27 = *v26; v76 = (int *)v26; v28 = (*(int (__thiscall **)(volatile LONG *))(v27 + 144))(v26); v29 = *v76; v68 = v28; (*(void (**)(void))(v29 + 148))(); v70 = 0; v73 = (int *)(v2 + 2608); do { v30 = sub_8F4A20( v72, v70 * (*(_DWORD *)(v2 + 2636) + 8) + 5, v68, *(_DWORD *)(v2 + 2636) + 8, v69, (int)v76, 0, 0); *v73 = (int)v30; (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 488))(v30, 4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v73 + 240))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)*v73 + 472))(&unk_9BFC35); ++v73; ++v70; } while ( v70 < 7 ); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 2608) + 468))(aIii); if ( !sub_8F71E0(v77, (int)"WinTitle", &v75, &v74, &v66, &v67) ) goto LABEL_50; v31 = sub_421050(7); v32 = sub_8F4A20(v75 - v10, v74 - v11, v66, v67, v31, v2, 0, 0); v33 = *v32; v76 = (int *)v32; (*(void (__thiscall **)(volatile LONG *, signed int))(v33 + 488))(v32, 5); (*(void (__stdcall **)(int *))(*v76 + 468))(&dword_AA8D98); v72 = *v76 + 472; v34 = sub_40C190(1755415238); (*(void (__thiscall **)(int *, const CHAR *))v72)(v76, v34); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); if ( !sub_8F71E0(v77, (int)"OkNor", &v75, &v74, &v66, &v67) ) { LABEL_50: v3 = (void (__thiscall ***)(_DWORD, signed int))v77; v81 = -1; if ( !v77 || InterlockedDecrement((volatile LONG *)(v77 + 4)) ) return 0; v4 = v3 == 0; goto LABEL_5; } v76 = (int *)sub_8FB140(v77, (int)"OkNor", (int)&v75, (int)&v74, v71); sub_8FB650(v76, v77, (int)"OkClick"); sub_8FB650(v76, v77, (int)"OkOver"); sub_8FE0F0(v75 - v10, v74 - v11, (int)v76, v2, 10, 0, 0); v35 = sub_421050(7); v36 = sub_8F4A20(v75 - v10, v74 - v11, v66, v67, v35, v2, 0, 0); v37 = *v36; v76 = (int *)v36; (*(void (__thiscall **)(volatile LONG *, signed int))(v37 + 488))(v36, 5); (*(void (__stdcall **)(int *))(*v76 + 468))(&dword_AA8C68); v72 = *v76 + 472; v38 = sub_40C190(-1510287891); (*(void (__thiscall **)(int *, const CHAR *))v72)(v76, v38); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); v57 = 0; v58 = 0; v59 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; LOBYTE(v81) = 1; v39 = (int *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v57, 1); *v39 = 1; v39[1] = v77; v73 = v39; v80 = 15; v79 = 0; LOBYTE(v78) = 0; sub_4018E0(&v78, "ColumnBarNor", 0xCu); LOBYTE(v81) = 2; v72 = (int)(v73 + 18); sub_40B060(v73 + 18, (const void **)&v78); LOBYTE(v81) = 1; if ( v80 >= 0x10 ) operator delete(v78); v80 = 15; v79 = 0; LOBYTE(v78) = 0; sub_4018E0(&v78, "ColumnBarClick", 0xEu); LOBYTE(v81) = 3; sub_40B060((int *)v72, (const void **)&v78); LOBYTE(v81) = 1; if ( v80 >= 0x10 ) operator delete(v78); v80 = 15; v79 = 0; LOBYTE(v78) = 0; sub_4018E0(&v78, "ColumnBarOver", 0xDu); LOBYTE(v81) = 4; sub_40B060((int *)v72, (const void **)&v78); LOBYTE(v81) = 1; if ( v80 >= 0x10 ) operator delete(v78); v73 = (int *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v57, 2); *v73 = 2; v80 = 15; v79 = 0; LOBYTE(v78) = 0; sub_4018E0(&v78, "Column01", 8u); LOBYTE(v81) = 5; sub_40B060(v73 + 18, (const void **)&v78); LOBYTE(v81) = 1; if ( v80 >= 0x10 ) operator delete(v78); v73[1] = v77; v80 = 15; v79 = 0; LOBYTE(v78) = 0; sub_466680(&v57, 0); v40 = sub_8FB140(v77, (int)"ColumnBox", (int)&v75, (int)&v74, v71); v41 = sub_466330(v75 - v10, v74 - v11, (int)v40, *(float *)&v2, (int **)&v57, 0, 0); *(_DWORD *)(v2 + 2500) = v41; *((_DWORD *)v41 + 88) = 12; sub_465130(*(_DWORD **)(v2 + 2500)); v42 = sub_8FB140(v77, (int)"SlideBar_SlideBtnMiddle", (int)&v75, (int)&v74, v71); v43 = *(_DWORD *)v77; v76 = (int *)v42; v44 = (void **)(*(int (__stdcall **)(const char *))(v43 + 72))("SlideBar_DnBtnNor"); sub_85AB50(v44, "SlideBar_DnBtnNor"); v45 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("SlideBar_DnBtnClick"); sub_85AB50(v45, "SlideBar_DnBtnClick"); v46 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("SlideBar_DnBtnOver"); sub_85AB50(v46, "SlideBar_DnBtnOver"); v47 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("SlideBar_UpBtnNor"); sub_85AB50(v47, "SlideBar_UpBtnNor"); v48 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("SlideBar_UpBtnClick"); sub_85AB50(v48, "SlideBar_UpBtnClick"); v49 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("SlideBar_UpBtnOver"); sub_85AB50(v49, "SlideBar_UpBtnOver"); v50 = sub_464310(v77, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v76, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 2504) = v50; *(_DWORD *)(v50 + 312) = 11; *(_DWORD *)(*(_DWORD *)(v2 + 2504) + 304) = 1; v51 = **(_DWORD **)(v2 + 2504); v52 = *(_DWORD *)(v2 + 2504); v69 = v51; v53 = *(int (**)(void))(v51 + 168); v72 = v52; v54 = v53(); v55 = (*(int (__stdcall **)(int))(*(_DWORD *)v72 + 164))(v54 - 10); (*(void (__thiscall **)(_DWORD, int))(v69 + 308))(*(_DWORD *)(v2 + 2504), v55 - 6); v76 = (int *)sub_8FB140(v77, (int)"PrePageNor", (int)&v75, (int)&v74, v71); sub_8FB650(v76, v77, (int)"PrePageClick"); sub_8FB650(v76, v77, (int)"PrePageOver"); sub_8FE0F0(v75 - v10, v74 - v11, (int)v76, v2, 13, 0, 0); v76 = (int *)sub_8FB140(v77, (int)"NextPageNor", (int)&v75, (int)&v74, v71); sub_8FB650(v76, v77, (int)"NextPageClick"); sub_8FB650(v76, v77, (int)"NextPageOver"); sub_8FE0F0(v75 - v10, v74 - v11, (int)v76, v2, 14, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_4FA410((_DWORD *)v2); LOBYTE(v81) = 0; if ( v57 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v57, v58, &v60, v72); operator delete(v57); } v56 = (void (__thiscall ***)(_DWORD, signed int))v77; v57 = 0; v58 = 0; v59 = 0; v81 = -1; if ( v77 && !InterlockedDecrement((volatile LONG *)(v77 + 4)) && v56 ) (**v56)(v56, 1); result = 1; } else { v81 = -1; sub_410C00(&v77); result = 0; } } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v77; v81 = -1; if ( v77 && !InterlockedDecrement((volatile LONG *)(v77 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004FB4D0) -------------------------------------------------------- _DWORD *__thiscall sub_4FB4D0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &CharTitleWin::`vftable'; *((_DWORD *)this + 58) = &CharTitleWin::`vftable'; sub_747510((void **)this + 628); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9BFEC8: using guessed type void *CharTitleWin::`vftable'; // 9BFEE4: using guessed type void *CharTitleWin::`vftable'; //----- (004FB550) -------------------------------------------------------- int sub_4FB550() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9AC + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9AC: using guessed type int dword_ACD9AC; //----- (004FB570) -------------------------------------------------------- _DWORD *__cdecl sub_4FB570(_DWORD *a1, int a2, char a3) { unsigned int v3; // ebx int v4; // edi unsigned int v5; // eax int v6; // edi _DWORD *v7; // eax int *v8; // eax int v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v3 = 0; *a1 = 0; a1[1] = 0; a1[2] = 0; v11 = 0; if ( sub_4FB550() ) { do { v4 = sub_7474E0((_DWORD *)(dword_ACD9AC + 4), v3); v10 = v4; if ( *(_DWORD *)v4 == a2 && *(_BYTE *)(v4 + 4) == a3 ) { v5 = a1[1]; if ( (unsigned int)&v10 >= v5 || *a1 > (unsigned int)&v10 ) { if ( v5 == a1[2] ) sub_5E2180((int)a1, 1); v8 = (int *)a1[1]; if ( v8 ) *v8 = v4; } else { v6 = ((signed int)&v10 - *a1) >> 2; if ( v5 == a1[2] ) sub_5E2180((int)a1, 1); v7 = (_DWORD *)a1[1]; if ( v7 ) *v7 = *(_DWORD *)(*a1 + 4 * v6); } a1[1] += 4; } ++v3; } while ( v3 < sub_4FB550() ); } return a1; } // ACD9AC: using guessed type int dword_ACD9AC; //----- (004FB790) -------------------------------------------------------- char __thiscall sub_4FB790(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[87], v2[86]); return v3; } //----- (004FB7C0) -------------------------------------------------------- _DWORD *__thiscall sub_4FB7C0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax result = (_DWORD *)sub_74DA80(this + 90, a2); if ( result ) { *result = *a3; result[1] = a3[1]; result[2] = a3[2]; result[3] = a3[3]; result[4] = a3[4]; } return result; } //----- (004FB800) -------------------------------------------------------- void __thiscall sub_4FB800(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax volatile LONG *v3; // eax v1 = this; if ( this[90] ) { v2 = (char *)sub_40A910(772803935); v3 = sub_462C30(2, v2); (**((void (__stdcall ***)(int))v3 + 58))((int)(v1 + 58)); *((_BYTE *)v1 + 356) = 1; } } //----- (004FB840) -------------------------------------------------------- int __cdecl sub_4FB840(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x129Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &ChatBlockListWin::`vftable'; *(_DWORD *)(v2 + 232) = &ChatBlockListWin::`vftable'; sub_74DAE0((_DWORD *)(v2 + 360)); *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_BYTE *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C0278: using guessed type void *ChatBlockListWin::`vftable'; // 9C0294: using guessed type void *ChatBlockListWin::`vftable'; //----- (004FB9A0) -------------------------------------------------------- void __thiscall sub_4FB9A0(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx _BYTE *v7; // eax CHAR *v8; // eax void *v9; // eax void *v10; // eax signed int v11; // [esp+10h] [ebp-48h] void *v12; // [esp+14h] [ebp-44h] int v13; // [esp+24h] [ebp-34h] unsigned int v14; // [esp+28h] [ebp-30h] int v15; // [esp+30h] [ebp-28h] int v16; // [esp+34h] [ebp-24h] int v17; // [esp+38h] [ebp-20h] int v18; // [esp+3Ch] [ebp-1Ch] int v19; // [esp+40h] [ebp-18h] char v20; // [esp+44h] [ebp-14h] int v21; // [esp+54h] [ebp-4h] v1 = this; v14 = 15; v13 = 0; LOBYTE(v12) = 0; v21 = 0; v11 = 0; if ( this[90] > 0 ) { v2 = (int)(this + 93); do { v3 = *(_DWORD *)(v2 - 4); v4 = *(_DWORD *)v2; v15 = *(_DWORD *)(v2 - 8); v5 = *(_DWORD *)(v2 + 4); v16 = v3; v6 = *(_DWORD *)(v2 + 8); v18 = v5; v7 = v12; v17 = v4; v19 = v6; v20 = 0; v13 = 0; if ( v14 < 0x10 ) v7 = &v12; *v7 = 0; sub_401D10((int)&v12, &v15, strlen((const char *)&v15)); if ( *(_BYTE *)(v2 + 13) == 1 ) { sub_40AB50(&v12, 1u, 32); v8 = (CHAR *)sub_40A910(237258604); sub_401D10((int)&v12, v8, strlen(v8)); v9 = v12; if ( v14 < 0x10 ) v9 = &v12; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[87], v9); sub_464C80((_DWORD *)v1[87], v11, 0, 128, 128, 128); } else { v10 = v12; if ( v14 < 0x10 ) v10 = &v12; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[87], v10); } v2 += 22; ++v11; } while ( v11 < v1[90] ); } sub_466AF0((_DWORD *)v1[87], 0, 0, 0); sub_465130((_DWORD *)v1[87]); if ( v14 >= 0x10 ) operator delete(v12); } //----- (004FBB40) -------------------------------------------------------- void __thiscall sub_4FBB40(_DWORD **this) { _DWORD **v1; // esi signed int v2; // eax _DWORD *v3; // esi int v4; // eax void *v5; // eax const char *v6; // eax _DWORD **v7; // [esp+10h] [ebp-80h] char v8; // [esp+14h] [ebp-7Ch] void *v9; // [esp+18h] [ebp-78h] unsigned int v10; // [esp+2Ch] [ebp-64h] void *v11; // [esp+34h] [ebp-5Ch] int v12; // [esp+44h] [ebp-4Ch] unsigned int v13; // [esp+48h] [ebp-48h] char *v14; // [esp+50h] [ebp-40h] int v15; // [esp+60h] [ebp-30h] unsigned int v16; // [esp+64h] [ebp-2Ch] char v17[4]; // [esp+6Ch] [ebp-24h] int v18; // [esp+70h] [ebp-20h] int v19; // [esp+74h] [ebp-1Ch] int v20; // [esp+78h] [ebp-18h] int v21; // [esp+7Ch] [ebp-14h] int v22; // [esp+8Ch] [ebp-4h] v1 = this; v7 = this; v2 = sub_464F50(this[87]); if ( v2 >= 0 ) { v3 = sub_4650C0(v1[87], v2, 0); v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4018E0(&v11, v3, strlen((const char *)v3)); v22 = 0; v16 = 15; LOBYTE(v22) = 1; v15 = 0; LOBYTE(v14) = 0; v8 = 40; v4 = sub_417B90((unsigned __int8 *)&v11, (unsigned __int8 *)&v8, 0x100000000ui64); if ( v4 == -1 ) { sub_4017F0((const void **)&v14, (const void **)&v11, 0, (void *)0xFFFFFFFF); } else { v5 = (void *)sub_426900((const void **)&v11, (int)&v9, 0, (void *)(v4 - 1)); LOBYTE(v22) = 2; sub_406450(&v14, v5); LOBYTE(v22) = 1; if ( v10 >= 0x10 ) operator delete(v9); } v6 = v14; if ( v16 < 0x10 ) v6 = (const char *)&v14; v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; strncpy(v17, v6, 0x14u); sub_4CA700(v7[74], *(int *)v17, v18, v19, v20, v21); if ( v16 >= 0x10 ) operator delete(v14); v16 = 15; v15 = 0; LOBYTE(v14) = 0; if ( v13 >= 0x10 ) operator delete(v11); } } //----- (004FBCD0) -------------------------------------------------------- signed int __thiscall sub_4FBCD0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx signed int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { sub_466A50(v2); sub_4FB9A0(v1); result = sub_4638F0((_DWORD *)v1[86], *(_DWORD *)(v1[87] + 336)); } return result; } //----- (004FBD10) -------------------------------------------------------- void __thiscall sub_4FBD10(int this, int a2, _DWORD *a3, int a4) { int v4; // esi v4 = this; if ( *(_DWORD *)(this + 116) ) { if ( a2 == 27 && a3 ) { if ( !*a3 && *(_BYTE *)(this + 124) ) { sub_4BD8F0(*(_DWORD **)(this + 64)); sub_4FBCD0((_DWORD *)(v4 - 232)); *(_BYTE *)(v4 + 124) = 0; } if ( *a3 == 1 ) *(_BYTE *)(v4 + 124) = 0; } *(_DWORD *)(v4 + 120) = sub_464F50(*(_DWORD **)(v4 + 116)); } } //----- (004FBD70) -------------------------------------------------------- char __thiscall sub_4FBD70(volatile LONG **this, volatile LONG **a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // edi volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // eax volatile LONG v19; // edx const CHAR *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // eax volatile LONG **v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG **v26; // eax int v27; // eax int v28; // ecx int (*v29)(void); // edx int v30; // eax int v31; // eax volatile LONG *v32; // edi char v33; // ST1C_1 int v34; // ST20_4 int v35; // ST24_4 int v36; // ST28_4 const CHAR *v37; // eax volatile LONG *v38; // edi char v39; // ST1C_1 int v40; // ST20_4 int v41; // ST24_4 int v42; // ST28_4 const CHAR *v43; // eax int v44; // [esp+3Ch] [ebp-8Ch] int v45; // [esp+40h] [ebp-88h] int v46; // [esp+44h] [ebp-84h] char v47; // [esp+4Ch] [ebp-7Ch] int v48; // [esp+50h] [ebp-78h] int v49; // [esp+54h] [ebp-74h] int v50; // [esp+58h] [ebp-70h] int v51; // [esp+5Ch] [ebp-6Ch] int v52[5]; // [esp+60h] [ebp-68h] int v53; // [esp+74h] [ebp-54h] int v54; // [esp+78h] [ebp-50h] int v55; // [esp+7Ch] [ebp-4Ch] volatile LONG *v56; // [esp+80h] [ebp-48h] volatile LONG *v57; // [esp+84h] [ebp-44h] int v58; // [esp+88h] [ebp-40h] int v59; // [esp+8Ch] [ebp-3Ch] int v60; // [esp+90h] [ebp-38h] volatile LONG **v61; // [esp+94h] [ebp-34h] int v62; // [esp+98h] [ebp-30h] const void *v63[7]; // [esp+9Ch] [ebp-2Ch] int v64; // [esp+C4h] [ebp-4h] v2 = this; v61 = a2; v62 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v64 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ChatBlockList.nif"); sub_8F66B0(v4, (int)&v62, v3); if ( !v62 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v62 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v55 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v64) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v56 = v9) == 0) ) { LOBYTE(v64) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v62; v64 = -1; if ( v62 && !InterlockedDecrement((volatile LONG *)(v62 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v62, (int)"Frame", (int)&v60, (int)&v59, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, (int)v61, (int)"BlockListWin", 0) ) { v14 = v60; v58 = v59; v15 = (volatile LONG *)sub_43D0D0(0x13u); if ( v15 ) v16 = sub_8FB140(v62, (int)"Theme", (int)&v60, (int)&v59, v15); else v16 = sub_8FB140(v62, (int)"Theme", (int)&v60, (int)&v59, 0); sub_8F3EB0(v60 - v14, v59 - v58, (int)v16, (int)v2, 0, 0); if ( sub_8F71E0(v62, (int)"WinTitle", &v60, &v59, &v54, &v53) ) { v17 = sub_421050(7); v18 = sub_8F4A20(v60 - v14, v59 - v58, v54, v53, v17, (int)v2, 0, 0); v19 = *v18; v61 = (volatile LONG **)v18; (*(void (__thiscall **)(volatile LONG *, signed int))(v19 + 488))(v18, 1); v57 = *v61; v20 = sub_40A910(893287063); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v57 + 118))(v61, v20); (*((void (__stdcall **)(_DWORD))*v61 + 60))(0); v61 = sub_8FB140(v62, (int)"ClsNor", (int)&v60, (int)&v59, v56); sub_8FB650(v61, v62, (int)"ClsClick"); sub_8FB650(v61, v62, (int)"ClsOver"); sub_8FE0F0(v60 - v14, v59 - v58, (int)v61, (int)v2, 7, 0, 0); v57 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v62 + 72))("HelpLinkNor") ) { v61 = sub_8FB140(v62, (int)"HelpLinkNor", (int)&v60, (int)&v59, v57); sub_8FB650(v61, v62, (int)"HelpLinkClick"); sub_8FB650(v61, v62, (int)"HelpLinkOver"); sub_8FE0F0(v60 - v14, v59 - v58, (int)v61, (int)v2, 9, 0, 0); } v21 = sub_8FB140(v62, (int)"Panel01", (int)&v60, (int)&v59, v56); sub_8F3EB0(v60 - v14, v59 - v58, (int)v21, (int)v2, 0, 0); v44 = 0; v45 = 0; v46 = 0; v47 = 0; v48 = 0; v49 = 0; v50 = 0; v51 = 0; LOBYTE(v64) = 2; v22 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v44, 1); *v22 = (volatile LONG *)1; v22[1] = (volatile LONG *)v62; v61 = v22; sub_4019E0(v63, "ColumnBarNor"); LOBYTE(v64) = 3; v57 = (volatile LONG *)(v61 + 18); sub_40B060((int *)v61 + 18, v63); LOBYTE(v64) = 2; sub_636A10(v63); sub_4019E0(v63, "ColumnBarOver"); LOBYTE(v64) = 4; sub_40B060((int *)v57, v63); LOBYTE(v64) = 2; sub_636A10(v63); v23 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v44, 2); v61 = v23; *v23 = (volatile LONG *)2; sub_4019E0(v63, "Column01"); LOBYTE(v64) = 5; sub_40B060((int *)v61 + 18, v63); LOBYTE(v64) = 2; sub_636A10(v63); v61[1] = (volatile LONG *)v62; v48 = 3; v49 = 0; sub_466680(&v44, 0); v24 = sub_8FB140(v62, (int)"TextBox", (int)&v60, (int)&v59, v56); v25 = sub_466330(v60 - v14, v59 - v58, (int)v24, *(float *)&v2, (int **)&v44, 0, 0); v2[87] = v25; *((_DWORD *)v25 + 88) = 8; sub_464D00(v2[87], 0); sub_465130(v2[87]); v26 = sub_8FB140(v62, (int)"SlideBar_SlideBtnMiddle", (int)&v60, (int)&v59, v56); v27 = sub_464310(v62, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v26, 0, v2); v2[86] = (volatile LONG *)v27; *(_DWORD *)(v27 + 312) = 4; *((_DWORD *)v2[86] + 76) = 1; v28 = (int)v2[86]; v29 = *(int (**)(void))(*v2[86] + 168); v56 = (volatile LONG *)*v2[86]; v57 = (volatile LONG *)v28; v30 = v29(); v31 = (*(int (__stdcall **)(int))(*v57 + 164))(v30); (*((void (__thiscall **)(volatile LONG *, int))v56 + 77))(v2[86], v31); sub_4638F0(v2[86], *((_DWORD *)v2[87] + 84)); sub_456260(v52); LOBYTE(v64) = 6; sub_455FF0(v52, (int)v2); sub_456000(v52, v14, v58); sub_456380(v52, v62); v32 = sub_4563D0(v52, 1, (int)"Btn01Nor", (int)"Btn01Click", (int)"Btn01Over", 0, 0); v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = dword_AA8C70; v36 = dword_AA8C74; v37 = sub_40A910(-775220698); sub_456040((int)v32, (int)v37, v33, v34, v35, v36, 5); v38 = sub_4563D0(v52, 2, (int)"Btn02Nor", (int)"Btn02Click", (int)"Btn02Over", 0, 0); v39 = dword_AA8C68; v40 = dword_AA8C6C; v41 = dword_AA8C70; v42 = dword_AA8C74; v43 = sub_40A910(-1932802607); sub_456040((int)v38, (int)v43, v39, v40, v41, v42, 5); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v64) = 2; sub_4562E0(v52); LOBYTE(v64) = 1; sub_40AE10((void **)&v44); LOBYTE(v64) = 0; sub_410C00(&v55); v64 = -1; sub_410C00(&v62); result = 1; } else { LOBYTE(v64) = 0; sub_410C00(&v55); v64 = -1; sub_410C00(&v62); result = 0; } } else { LOBYTE(v64) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v62; v64 = -1; if ( !v62 || InterlockedDecrement((volatile LONG *)(v62 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (004FC490) -------------------------------------------------------- int __thiscall sub_4FC490(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[87]; if ( result ) { v3 = (_DWORD *)this[86]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[86] + 300); result = sub_465130((_DWORD *)v1[87]); } } return result; } //----- (004FC4E0) -------------------------------------------------------- _DWORD *__thiscall sub_4FC4E0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ChatBlockListWin::`vftable'; *((_DWORD *)this + 58) = &ChatBlockListWin::`vftable'; sub_74DB10((_DWORD *)this + 90); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C0278: using guessed type void *ChatBlockListWin::`vftable'; // 9C0294: using guessed type void *ChatBlockListWin::`vftable'; //----- (004FC560) -------------------------------------------------------- void __thiscall sub_4FC560(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi _DWORD *v4; // eax v3 = this; switch ( a2 ) { case 1: sub_4FBB40(this); break; case 2: sub_4FB800(this); break; case 4: sub_4FC490(this); break; case 7: ((void (__stdcall *)(_DWORD))(*this)[60])(0); sub_4A5300(v3[74]); break; case 9: v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) sub_4A5170(v4, "ChatBlockList"); break; default: return; } } //----- (004FC620) -------------------------------------------------------- char __thiscall sub_4FC620(int this, int a2, int a3) { _DWORD *v3; // esi int v4; // edi char *v5; // eax v3 = (_DWORD *)this; if ( a2 == 1 ) { v4 = *(_DWORD *)(this + 296); v5 = (char *)(*(int (**)(void))(**(_DWORD **)(this + 344) + 456))(); sub_496030(v4, v5, 0, 0); } return sub_8F86A0(&unk_BA6B10, v3); } //----- (004FC690) -------------------------------------------------------- LONG __thiscall sub_4FC690(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &ChatEditWin::`vftable'; this[58] = &ChatEditWin::`vftable'; v2 = this[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = v1[86]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9C04FC: using guessed type void *ChatEditWin::`vftable'; // 9C051C: using guessed type void *ChatEditWin::`vftable'; //----- (004FC750) -------------------------------------------------------- char __thiscall sub_4FC750(void *this, volatile LONG *a2, int a3) { int v3; // edi int v4; // esi char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG **v9; // eax volatile LONG *v10; // esi int v11; // ST0C_4 int v12; // ST08_4 int v13; // ST04_4 int v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // esi volatile LONG *v17; // ebx void (__thiscall ***v18)(_DWORD, signed int); // esi int v19; // [esp+1Ch] [ebp-18h] int v20; // [esp+20h] [ebp-14h] int v21; // [esp+24h] [ebp-10h] int v22; // [esp+30h] [ebp-4h] v3 = (int)this; v21 = 0; v4 = dword_BA6BA0; v22 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "ChatInputWin.nif"); sub_8F66B0(v5, (int)&v21, v4); if ( !v21 ) return 0; v6 = sub_8FB140(v21, (int)"frame", (int)&v19, (int)&v20, a2); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v6, 0, a3, (int)"CharEditWin", 0) ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v21; v22 = -1; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } v9 = sub_8FB140(v21, (int)"chat input", (int)&v19, (int)&v20, a2); v10 = sub_8F3EB0(v19, v20, (int)v9, v3, 0, 0); v11 = (*(int (__thiscall **)(volatile LONG *))(*v10 + 148))(v10) - 1; v12 = (*(int (__thiscall **)(volatile LONG *))(*v10 + 144))(v10) - 1; v13 = (*(int (__thiscall **)(volatile LONG *))(*v10 + 168))(v10) + 3; v14 = (*(int (__thiscall **)(volatile LONG *))(*v10 + 164))(v10); v15 = sub_45A900(v14 + 2, v13, v12, v11, v3, 1342177280, 128, 5, 1, 0, 1); v16 = *(volatile LONG **)(v3 + 344); v17 = v15; if ( v16 != v15 ) { if ( v16 && !InterlockedDecrement(v16 + 1) && v16 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); *(_DWORD *)(v3 + 344) = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 1.0); v18 = (void (__thiscall ***)(_DWORD, signed int))v21; v22 = -1; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v18 ) (**v18)(v18, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (004FCAB0) -------------------------------------------------------- void *__thiscall sub_4FCAB0(void *this, char a2) { void *v2; // esi v2 = this; sub_4FC690(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004FCAE0) -------------------------------------------------------- void __thiscall sub_4FCAE0(int this, __int16 a2) { double v2; // st7 v2 = *(float *)(this + 300); *(_WORD *)(this + 306) = a2; if ( 0.0 != v2 ) *(float *)(this + 300) = *(float *)(this + 300) - 1.0; if ( *(float *)(this + 300) == 0.0 ) sub_6BF780(a2); } //----- (004FCB30) -------------------------------------------------------- void __thiscall sub_4FCB30(int this) { *(_WORD *)(this + 28) |= 1u; *(_BYTE *)(this + 292) = 0; } //----- (004FCB80) -------------------------------------------------------- LONG __thiscall sub_4FCB80(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi v1 = this; *this = &ClockShadowWin::`vftable'; this[58] = &ClockShadowWin::`vftable'; v2 = (volatile LONG *)this[72]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[72] = 0; } v3 = (volatile LONG *)v1[72]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); return sub_8F29C0(v1); } // 9C0740: using guessed type void *ClockShadowWin::`vftable'; // 9C075C: using guessed type void *ClockShadowWin::`vftable'; //----- (004FCC40) -------------------------------------------------------- char *__thiscall sub_4FCC40(_DWORD *this) { char *result; // eax int v2; // ecx signed int v3; // edx if ( !(dword_ACEBDC & 1) ) { dword_ACEBDC |= 1u; flt_ACEB28 = 16.0; flt_ACEB2C = 0.0; flt_ACEB30 = 0.0; flt_ACEB3C = 0.0; flt_ACEB34 = 16.0; flt_ACEB38 = 16.0; flt_ACEB40 = 32.0; flt_ACEB4C = 32.0; flt_ACEB64 = 32.0; flt_ACEB68 = 32.0; flt_ACEB70 = 32.0; flt_ACEB74 = 32.0; flt_ACEB8C = 32.0; flt_ACEB98 = 32.0; flt_ACEB44 = 0.0; flt_ACEB48 = 0.0; flt_ACEB50 = 0.0; flt_ACEB54 = 0.0; flt_ACEB60 = 0.0; flt_ACEB6C = 0.0; flt_ACEB78 = 0.0; flt_ACEB84 = 0.0; flt_ACEB88 = 0.0; flt_ACEB90 = 0.0; flt_ACEB94 = 0.0; flt_ACEB9C = 0.0; flt_ACEBA8 = 0.0; flt_ACEBAC = 0.0; flt_ACEBB0 = 0.0; flt_ACEBB4 = 0.0; flt_ACEBB8 = 0.0; flt_ACEBBC = 0.0; flt_ACEBC0 = 0.0; flt_ACEBCC = 0.0; flt_ACEBD4 = 0.0; flt_ACEBD8 = 0.0; flt_ACEB58 = 16.0; flt_ACEB5C = 16.0; flt_ACEB7C = 16.0; flt_ACEB80 = 16.0; flt_ACEBA0 = 16.0; flt_ACEBA4 = 16.0; flt_ACEBC4 = 16.0; flt_ACEBC8 = 16.0; flt_ACEBD0 = 16.0; } result = *(char **)(*(_DWORD *)(this[72] + 184) + 32); v2 = (char *)&flt_ACEB28 - result; v3 = 15; do { *(_DWORD *)result = *(_DWORD *)&result[v2]; *((_DWORD *)result + 1) = *(_DWORD *)&result[v2 + 4]; *((_DWORD *)result + 2) = *(_DWORD *)&result[v2 + 8]; result += 12; --v3; } while ( v3 ); return result; } // ACEB28: using guessed type float flt_ACEB28; // ACEB2C: using guessed type float flt_ACEB2C; // ACEB30: using guessed type float flt_ACEB30; // ACEB34: using guessed type float flt_ACEB34; // ACEB38: using guessed type float flt_ACEB38; // ACEB3C: using guessed type float flt_ACEB3C; // ACEB40: using guessed type float flt_ACEB40; // ACEB44: using guessed type float flt_ACEB44; // ACEB48: using guessed type float flt_ACEB48; // ACEB4C: using guessed type float flt_ACEB4C; // ACEB50: using guessed type float flt_ACEB50; // ACEB54: using guessed type float flt_ACEB54; // ACEB58: using guessed type float flt_ACEB58; // ACEB5C: using guessed type float flt_ACEB5C; // ACEB60: using guessed type float flt_ACEB60; // ACEB64: using guessed type float flt_ACEB64; // ACEB68: using guessed type float flt_ACEB68; // ACEB6C: using guessed type float flt_ACEB6C; // ACEB70: using guessed type float flt_ACEB70; // ACEB74: using guessed type float flt_ACEB74; // ACEB78: using guessed type float flt_ACEB78; // ACEB7C: using guessed type float flt_ACEB7C; // ACEB80: using guessed type float flt_ACEB80; // ACEB84: using guessed type float flt_ACEB84; // ACEB88: using guessed type float flt_ACEB88; // ACEB8C: using guessed type float flt_ACEB8C; // ACEB90: using guessed type float flt_ACEB90; // ACEB94: using guessed type float flt_ACEB94; // ACEB98: using guessed type float flt_ACEB98; // ACEB9C: using guessed type float flt_ACEB9C; // ACEBA0: using guessed type float flt_ACEBA0; // ACEBA4: using guessed type float flt_ACEBA4; // ACEBA8: using guessed type float flt_ACEBA8; // ACEBAC: using guessed type float flt_ACEBAC; // ACEBB0: using guessed type float flt_ACEBB0; // ACEBB4: using guessed type float flt_ACEBB4; // ACEBB8: using guessed type float flt_ACEBB8; // ACEBBC: using guessed type float flt_ACEBBC; // ACEBC0: using guessed type float flt_ACEBC0; // ACEBC4: using guessed type float flt_ACEBC4; // ACEBC8: using guessed type float flt_ACEBC8; // ACEBCC: using guessed type float flt_ACEBCC; // ACEBD0: using guessed type float flt_ACEBD0; // ACEBD4: using guessed type float flt_ACEBD4; // ACEBD8: using guessed type float flt_ACEBD8; // ACEBDC: using guessed type int dword_ACEBDC; //----- (004FCDB0) -------------------------------------------------------- char *__thiscall sub_4FCDB0(int this, float a2, float a3, float a4) { *(_BYTE *)(this + 292) = 1; *(float *)(this + 296) = a2 - a4; *(float *)(this + 300) = a3; return sub_4FCC40((_DWORD *)this); } //----- (004FCE60) -------------------------------------------------------- void __fastcall sub_4FCE60(float a1, int a2, float a3) { float v3; // esi signed int v4; // edi double v5; // st7 _DWORD *v6; // eax int v7; // ecx int v8; // edx _DWORD *v9; // eax int v10; // ecx int v11; // edx _DWORD *v12; // eax int v13; // ecx int v14; // edx _DWORD *v15; // eax int v16; // ecx int v17; // edx double v18; // st6 double v19; // st7 double v20; // st7 double v21; // st6 double v22; // st7 double v23; // st7 double v24; // st7 double v25; // st6 double v26; // st7 double v27; // st7 double v28; // st7 double v29; // st6 double v30; // st7 double v31; // st7 double v32; // st7 int v33; // eax __int16 v34; // ax float v35; // [esp+0h] [ebp-4h] float v36; // [esp+Ch] [ebp+8h] float v37; // [esp+Ch] [ebp+8h] float v38; // [esp+Ch] [ebp+8h] float v39; // [esp+Ch] [ebp+8h] float v40; // [esp+Ch] [ebp+8h] float v41; // [esp+Ch] [ebp+8h] float v42; // [esp+Ch] [ebp+8h] float v43; // [esp+Ch] [ebp+8h] float v44; // [esp+Ch] [ebp+8h] float v45; // [esp+Ch] [ebp+8h] float v46; // [esp+Ch] [ebp+8h] float v47; // [esp+Ch] [ebp+8h] float v48; // [esp+Ch] [ebp+8h] float v49; // [esp+Ch] [ebp+8h] float v50; // [esp+Ch] [ebp+8h] float v51; // [esp+Ch] [ebp+8h] float v52; // [esp+Ch] [ebp+8h] float v53; // [esp+Ch] [ebp+8h] float v54; // [esp+Ch] [ebp+8h] float v55; // [esp+Ch] [ebp+8h] float v56; // [esp+Ch] [ebp+8h] float v57; // [esp+Ch] [ebp+8h] float v58; // [esp+Ch] [ebp+8h] float v59; // [esp+Ch] [ebp+8h] float v60; // [esp+Ch] [ebp+8h] float v61; // [esp+Ch] [ebp+8h] float v62; // [esp+Ch] [ebp+8h] float v63; // [esp+Ch] [ebp+8h] float v64; // [esp+Ch] [ebp+8h] float v65; // [esp+Ch] [ebp+8h] v35 = a1; v3 = a1; v36 = a3 - *(float *)(LODWORD(a1) + 296); if ( *(_BYTE *)(LODWORD(a1) + 292) && *(float *)(LODWORD(a1) + 300) > (double)v36 ) { v4 = 0; v37 = v36 / *(float *)(LODWORD(a1) + 300); v5 = v37; if ( v37 > 0.125 ) { v6 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(LODWORD(a1) + 288) + 184) + 32); v7 = v6[7]; *v6 = v6[6]; v8 = v6[8]; v6[1] = v7; v6[2] = v8; v4 = 1; } if ( v5 > 0.375 ) { v9 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(LODWORD(v3) + 288) + 184) + 32); v10 = v9[16]; v9[9] = v9[15]; v11 = v9[17]; v9[10] = v10; v9[11] = v11; v4 = 2; } if ( v5 > 0.625 ) { v12 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(LODWORD(v3) + 288) + 184) + 32); v13 = v12[25]; v12[18] = v12[24]; v14 = v12[26]; v12[19] = v13; v12[20] = v14; v4 = 3; } if ( v5 >= 0.875 ) { v15 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(LODWORD(v3) + 288) + 184) + 32); v16 = v15[34]; v15[27] = v15[33]; v17 = v15[35]; v15[28] = v16; v15[29] = v17; v4 = 4; } if ( v5 < 1.0 ) { if ( *(_BYTE *)(LODWORD(v3) + 304) ) *(_WORD *)(LODWORD(v3) + 28) &= 0xFFFEu; else *(_WORD *)(LODWORD(v3) + 28) |= 1u; v18 = v5 * (flt_BA45B4 + flt_BA45B4); v19 = flt_BA45B4; v38 = v18; switch ( v4 ) { case 0: v39 = tan(v38); v40 = v39 * 16.0; v35 = v40 + 16.0; v38 = 0.0; break; case 1: v20 = v19 * 0.25; v41 = v38 - v20; v21 = v20; v22 = v41; v42 = v21; if ( v42 < v22 ) { v45 = v22 - v21; v46 = tan(v45); v23 = v46 * 16.0 + 16.0; } else { v43 = v21 - v22; v44 = tan(v43); v23 = 16.0 - v44 * 16.0; } v47 = v23; v35 = 32.0; v38 = v47 + 0.0; break; case 2: v24 = v19 * 0.25; v48 = v38 - v24 * 3.0; v25 = v24; v26 = v48; v49 = v25; if ( v49 < v26 ) { v52 = v26 - v25; v53 = tan(v52); v27 = v53 * 16.0 + 16.0; } else { v50 = v25 - v26; v51 = tan(v50); v27 = 16.0 - v51 * 16.0; } v54 = v27; v35 = 32.0 - v54; v38 = 32.0; break; case 3: v28 = v19 * 0.25; v55 = v38 - v28 * 5.0; v29 = v28; v30 = v55; v56 = v29; if ( v56 < v30 ) { v59 = v30 - v29; v60 = tan(v59); v31 = v60 * 16.0 + 16.0; } else { v57 = v29 - v30; v58 = tan(v57); v31 = 16.0 - v58 * 16.0; } v61 = v31; v35 = 0.0; v38 = 32.0 - v61; break; case 4: v32 = v19 * 0.25; v62 = v38 - v32 * 7.0; v63 = v32 - v62; v64 = tan(v63); v65 = 16.0 - v64 * 16.0; v35 = v65 + 0.0; v38 = 0.0; break; default: break; } v33 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(LODWORD(v3) + 288) + 184) + 32); *(float *)(v33 + 36 * v4) = v35; *(float *)(v33 + 36 * v4 + 4) = v38; *(_WORD *)(*(_DWORD *)(*(_DWORD *)(LODWORD(v3) + 288) + 184) + 50) |= 1u; } else { *(_WORD *)(LODWORD(v3) + 28) |= 1u; } } else { v34 = *(_WORD *)(LODWORD(a1) + 306); *(_WORD *)(LODWORD(a1) + 28) |= 1u; *(_BYTE *)(LODWORD(a1) + 292) = 0; if ( v34 != -1 ) { *(float *)(LODWORD(a1) + 300) = 0.0; sub_6BF780(v34); *(_WORD *)(LODWORD(v3) + 306) = -1; } } } // BA45B4: using guessed type float flt_BA45B4; //----- (004FD260) -------------------------------------------------------- int __thiscall sub_4FD260(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax int v3; // ebx _WORD *v4; // esi unsigned int v5; // eax _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // esi _DWORD *v9; // eax _DWORD *v10; // eax _WORD *v11; // esi int v12; // ebx _DWORD *v13; // esi void *v14; // eax float *v15; // esi int v16; // eax volatile LONG *v17; // ebx int v19; // [esp+1Ch] [ebp-34h] int v20; // [esp+20h] [ebp-30h] int v21; // [esp+24h] [ebp-2Ch] int v22; // [esp+28h] [ebp-28h] float v23; // [esp+2Ch] [ebp-24h] float v24; // [esp+30h] [ebp-20h] float v25; // [esp+34h] [ebp-1Ch] void *v26; // [esp+38h] [ebp-18h] int v27; // [esp+3Ch] [ebp-14h] _DWORD *v28; // [esp+40h] [ebp-10h] int v29; // [esp+4Ch] [ebp-4h] v1 = this; v2 = operator new[](0xB4u); v3 = (int)v2; v28 = v2; v4 = operator new[](0x1Eu); v5 = 0; do { v4[v5] = v5; ++v5; } while ( v5 < 0xF ); v6 = operator new(0xC4u); v26 = v6; v29 = 0; if ( v6 ) v7 = sub_866D90(v6, 15, v3, 0, 0, 0, 0, 0, 5, (int)v4); else v7 = 0; v8 = v1[72]; v29 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[72] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } sub_4FCC40(v1); sub_86B6C0((float *)&v19, 15, (float *)v28); v9 = *(_DWORD **)(v1[72] + 184); v9[4] = v19; v9[5] = v20; v9[6] = v21; v9[7] = v22; sub_85BED0((_DWORD **)v1[72], 0.0, 1); v10 = operator new(0x20u); v11 = v10; v26 = v10; v29 = 1; if ( v10 ) { sub_85B2B0(v10); *(_DWORD *)v11 = &NiAlphaProperty::`vftable'; v11[14] = 236; *((_BYTE *)v11 + 30) = 0; v12 = (int)v11; } else { v12 = 0; } *(_WORD *)(v12 + 28) |= 1u; v29 = -1; v13 = operator new(0x28u); v26 = v13; v29 = 2; if ( v13 ) { sub_85B2B0(v13); *v13 = &NiVertexColorProperty::`vftable'; *((_WORD *)v13 + 14) = 0; v13[8] = 0; v13[9] = 1; v28 = v13; } else { v28 = 0; v13 = 0; } v29 = -1; v13[8] = 0; v13[9] = 0; v14 = operator new(0x60u); v26 = v14; v29 = 3; if ( v14 ) v15 = sub_85EBC0((float *)v14); else v15 = 0; *((_DWORD *)v15 + 22) += 2; v23 = 0.0; v27 = v12; v24 = 0.0; v25 = 0.0; v15[17] = 0.0; v15[21] = 0.75; v15[18] = 0.0; v15[19] = 0.0; v26 = (void *)v1[72]; InterlockedIncrement((volatile LONG *)(v12 + 4)); v29 = 4; sub_8A6330((_DWORD *)v26 + 39, &v27); v29 = -1; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v16 = v1[72]; v26 = v28; v17 = v28 + 1; v27 = v16; InterlockedIncrement(v28 + 1); v29 = 5; sub_8A6330((_DWORD *)(v27 + 156), (int *)&v26); v29 = -1; if ( !InterlockedDecrement(v17) ) (*(void (__stdcall **)(signed int))*v28)(1); v27 = v1[72]; v26 = v15; InterlockedIncrement((volatile LONG *)v15 + 1); v29 = 6; sub_8A6330((_DWORD *)(v27 + 156), (int *)&v26); v29 = -1; if ( !InterlockedDecrement((volatile LONG *)v15 + 1) ) (**(void (__thiscall ***)(float *, signed int))v15)(v15, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v1 + 116))(v1, v1[72], 0); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (004FD570) -------------------------------------------------------- char __thiscall sub_4FD570(_DWORD *this, int a2, int a3, _DWORD *a4) { _DWORD *v4; // esi char result; // al v4 = this; result = sub_8F2900(this, a2, a3, 32, 32, a4, 0, 0); if ( result ) { sub_4FD260(v4); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v4 + 240))(v4, 0); result = 1; } return result; } //----- (004FD5C0) -------------------------------------------------------- int __cdecl sub_4FD5C0(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x134u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_8F2740(v3); *(_DWORD *)v4 = &ClockShadowWin::`vftable'; *(_DWORD *)(v4 + 232) = &ClockShadowWin::`vftable'; *(_DWORD *)(v4 + 288) = 0; *(_BYTE *)(v4 + 292) = 0; *(_BYTE *)(v4 + 304) = 1; *(_WORD *)(v4 + 306) = -1; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 452))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9C0740: using guessed type void *ClockShadowWin::`vftable'; // 9C075C: using guessed type void *ClockShadowWin::`vftable'; //----- (004FD730) -------------------------------------------------------- _DWORD *__thiscall sub_4FD730(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = (_DWORD *)this[46]; result[4] = *a2; result[5] = a2[1]; result[6] = a2[2]; result[7] = a2[3]; return result; } //----- (004FD760) -------------------------------------------------------- void *__thiscall sub_4FD760(void *this, char a2) { void *v2; // esi v2 = this; sub_4FCB80((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004FD790) -------------------------------------------------------- void __usercall sub_4FD790(int a1@, double a2@) { int v2; // esi v2 = a1; if ( *(_DWORD *)(a1 + 452) ) { (*(void (**)(void))(**(_DWORD **)(a1 + 452) + 280))(); if ( 0.0 != a2 && !*(_BYTE *)(v2 + 456) && !*(_BYTE *)(v2 + 457) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 452) + 276))(0.0); } } //----- (004FD850) -------------------------------------------------------- int __thiscall sub_4FD850(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax v3 = this; result = (*(int (**)(void))(*this + 260))(); if ( (_BYTE)result ) result = v3[110] == a2 && v3[111] == a3; return result; } //----- (004FD890) -------------------------------------------------------- char __thiscall sub_4FD890(_BYTE *this) { _BYTE *v1; // esi v1 = this; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)this + 260))() ) v1[456] = 0; return v1[456]; } //----- (004FD8B0) -------------------------------------------------------- BOOL __usercall sub_4FD8B0@(int a1@, double a2@) { int v2; // esi int v3; // ecx bool v4; // al v2 = a1; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)a1 + 260))() ) *(_BYTE *)(v2 + 457) = 0; v3 = *(_DWORD *)(v2 + 452); v4 = 0; if ( v3 ) { (*(void (**)(void))(*(_DWORD *)v3 + 280))(); v4 = a2 > 0.0; } return *(_BYTE *)(v2 + 457) || v4; } //----- (004FD910) -------------------------------------------------------- void __thiscall sub_4FD910(_BYTE *this) { this[457] = 1; } //----- (004FD920) -------------------------------------------------------- int __thiscall sub_4FD920(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi v2 = this; if ( !*((_BYTE *)this + 456) ) { if ( dword_BA6AA8 >= 1 && !*((_BYTE *)this + 309) ) { this[108] = (*(int (**)(void))(*this + 164))(); v2[109] = (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2); return sub_8F1140(v2, a2); } if ( dword_BA6AB4 >= 1 && *((_BYTE *)this + 309) == 1 && this[108] == (*(int (**)(void))(*this + 164))() && v2[109] == (*(int (__thiscall **)(_DWORD *))(*v2 + 168))(v2) ) { v2[111] = 0; v2[110] = 0; v2[108] = 0; v2[109] = 0; sub_8F2BC0(v2, 1, 0, 0); } } return sub_8F1140(v2, a2); } // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; //----- (004FD9F0) -------------------------------------------------------- void __thiscall sub_4FD9F0(float *this, int a2) { float *v2; // esi float v3; // ST08_4 double v4; // st7 int v5; // ecx float v6; // eax void (__thiscall *v7)(float *, signed int); // edx v2 = this; if ( *((_BYTE *)this + 457) ) { v3 = this[117] - flt_ACCFD0; this[117] = v3; v4 = 0.0; if ( v3 < 0.0 ) this[117] = 0.0; v5 = *((_DWORD *)this + 113); if ( v5 ) { (*(void (__stdcall **)(float))(*(_DWORD *)v5 + 276))(v2[117]); v4 = 0.0; } if ( v4 == v2[117] ) { v6 = *v2; v2[115] = v4; v7 = *(void (__thiscall **)(float *, signed int))(LODWORD(v6) + 520); v2[116] = v4; *((_BYTE *)v2 + 457) = 0; v2[118] = 0.0; v7(v2, 1); } } } // ACCFD0: using guessed type float flt_ACCFD0; //----- (004FDAA0) -------------------------------------------------------- _DWORD *__stdcall sub_4FDAA0(int a1) { int v1; // eax _DWORD *result; // eax int v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v1 = sub_8667C0(); result = (_DWORD *)(*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v1 + 8))(v1, a1, 0); if ( result ) { v3 = 6; v4 = 2; v5 = 0; result = sub_865FA0((int)result, &v3); } return result; } //----- (004FDB20) -------------------------------------------------------- int __thiscall sub_4FDB20(_BYTE *this, unsigned int a2) { _BYTE *v2; // ebx unsigned int v3; // edi unsigned int v4; // esi int result; // eax int v6; // ecx v2 = this; if ( !this[456] ) { v3 = a2; if ( a2 > 9 ) v3 = 9; v4 = 0; if ( v3 ) { do { result = *((_DWORD *)v2 + 96); v6 = *(_DWORD *)(result + 4 * v4); if ( v6 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v6 + 256))(1); ++v4; } while ( v4 < v3 ); } } return result; } //----- (004FDB70) -------------------------------------------------------- int __thiscall sub_4FDB70(_DWORD **this) { _DWORD **v1; // edi unsigned int v2; // esi int result; // eax int v4; // ecx unsigned int v5; // esi int v6; // ecx unsigned int v7; // esi int v8; // ecx unsigned int v9; // esi int v10; // ecx v1 = this; if ( this[87] ) (*(void (__stdcall **)(void *))(*this[87] + 472))(&unk_9C09A6); if ( v1[88] ) (*(void (__stdcall **)(void *))(*v1[88] + 472))(&unk_9C09A7); v2 = 0; do { result = (int)v1[92]; v4 = *(_DWORD *)(v2 + result); if ( v4 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 256))(0); v2 += 4; } while ( v2 < 0x10 ); v5 = 0; do { v6 = v1[96][v5]; if ( v6 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 256))(0); ++v5; } while ( v5 < 9 ); v7 = 0; do { v8 = v1[100][v7]; if ( v8 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 256))(0); ++v7; } while ( v7 < 5 ); v9 = 0; do { v10 = v1[104][v9]; if ( v10 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v10 + 256))(0); ++v9; } while ( v9 < 6 ); return result; } //----- (004FDC50) -------------------------------------------------------- int __thiscall sub_4FDC50(float *this) { float *v1; // esi _DWORD *v2; // ecx v1 = this; sub_4FDB70((_DWORD **)this); v2 = (_DWORD *)*((_DWORD *)v1 + 113); v1[115] = 0.0; v1[116] = 0.0; *((_WORD *)v1 + 228) = 0; v1[118] = 0.0; (*(void (__stdcall **)(_DWORD))(*v2 + 276))(0.0); return (*(int (__thiscall **)(float *, signed int))(*(_DWORD *)v1 + 520))(v1, 1); } //----- (004FDCA0) -------------------------------------------------------- int __thiscall sub_4FDCA0(_DWORD *this, char *a2) { int v2; // eax int result; // eax int v4; // eax int v5; // edi size_t v6; // eax signed int v7; // eax int v8; // ecx int v9; // ecx _DWORD *v10; // [esp+0h] [ebp-Ch] int v11; // [esp+4h] [ebp-8h] unsigned int v12; // [esp+8h] [ebp-4h] v2 = *(_DWORD *)(dword_ACDA48 + 56); v10 = this; if ( v2 ) v12 = *(_DWORD *)(v2 + 40); else v12 = 0; result = 0; v11 = 0; if ( v12 ) { do { v4 = sub_7474E0((_DWORD *)(dword_ACDA48 + 4), result); v5 = v4; if ( v4 ) { v6 = strlen((const char *)(v4 + 2)); if ( v6 == strlen(a2) ) { result = strncmp((const char *)(v5 + 2), a2, v6); if ( !result ) break; v5 = 0; } } result = v11 + 1; v11 = result; } while ( result < v12 ); if ( v5 ) { v7 = *(_DWORD *)(v5 + 95); if ( v7 < 5 ) { v8 = *(_DWORD *)(v10[100] + 4 * v7); if ( v8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v8 + 256))(1); } result = *(_DWORD *)(v5 + 99); if ( result < 6 ) { v9 = *(_DWORD *)(v10[104] + 4 * result); if ( v9 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v9 + 256))(1); } } } return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (004FDD90) -------------------------------------------------------- int __thiscall sub_4FDD90(int this) { _DWORD *v1; // esi unsigned int v2; // eax int v3; // ecx unsigned int v4; // ecx v1 = (_DWORD *)this; *(float *)(this + 460) = 0.0; *(_WORD *)(this + 456) = 1; *(float *)(this + 464) = flt_ACCFCC; *(float *)(this + 468) = 0.0; v2 = rand(); v3 = *(_DWORD *)(dword_ACD9E8 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v1[118] = v2 % v4 + 1; return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 520))(v1, 0); } // ACCFCC: using guessed type float flt_ACCFCC; // ACD9E8: using guessed type int dword_ACD9E8; //----- (004FDDF0) -------------------------------------------------------- LONG __thiscall sub_4FDDF0(void **this) { void **v1; // esi v1 = this; *this = &CollectCardWin::`vftable'; this[58] = &CollectCardWin::`vftable'; if ( this[104] ) operator delete(this[104]); v1[104] = 0; v1[105] = 0; v1[106] = 0; if ( v1[100] ) operator delete(v1[100]); v1[100] = 0; v1[101] = 0; v1[102] = 0; if ( v1[96] ) operator delete(v1[96]); v1[96] = 0; v1[97] = 0; v1[98] = 0; if ( v1[92] ) operator delete(v1[92]); v1[92] = 0; v1[93] = 0; v1[94] = 0; return sub_8F10F0(v1); } // 9C0AA4: using guessed type void *CollectCardWin::`vftable'; // 9C0AC4: using guessed type void *CollectCardWin::`vftable'; //----- (004FDEB0) -------------------------------------------------------- char *__thiscall sub_4FDEB0(char *this) { char *v1; // esi _DWORD *v2; // ecx const void *v3; // ecx int v4; // edx unsigned int v5; // eax void *v6; // edx unsigned int v7; // ecx char *v8; // ecx int v9; // eax const void *v10; // ecx int v11; // edx int v12; // ebx unsigned int v13; // eax void *v14; // edx unsigned int v15; // eax unsigned int v16; // ecx char *v17; // ecx int v18; // eax int v19; // edx _DWORD *v20; // ebx const void *v21; // ecx int v22; // edx unsigned int v23; // eax void *v24; // edx int v25; // eax unsigned int v26; // eax unsigned int v27; // ecx char *v28; // ecx int v29; // eax void *v31; // [esp+18h] [ebp-14h] void *v32; // [esp+18h] [ebp-14h] int v33; // [esp+18h] [ebp-14h] unsigned int v34; // [esp+1Ch] [ebp-10h] unsigned int v35; // [esp+1Ch] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v2 = v1 + 368; *(_DWORD *)v1 = &CollectCardWin::`vftable'; *((_DWORD *)v1 + 58) = &CollectCardWin::`vftable'; *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 90) = 0; *((_DWORD *)v1 + 91) = 0; *v2 = 0; v2[1] = 0; v2[2] = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 97) = 0; *((_DWORD *)v1 + 98) = 0; *((_DWORD *)v1 + 100) = 0; *((_DWORD *)v1 + 101) = 0; *((_DWORD *)v1 + 102) = 0; *((_DWORD *)v1 + 104) = 0; *((_DWORD *)v1 + 105) = 0; *((_DWORD *)v1 + 106) = 0; *((float *)v1 + 115) = 0.0; *((float *)v1 + 116) = 0.0; *((float *)v1 + 117) = 0.0; *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 110) = 0; *((_DWORD *)v1 + 111) = 0; *((_DWORD *)v1 + 113) = 0; *((_WORD *)v1 + 228) = 0; *((_DWORD *)v1 + 118) = 0; sub_4E6D30((_DWORD *)v1 + 92, 4u); **((_DWORD **)v1 + 92) = 0; *(_DWORD *)(*((_DWORD *)v1 + 92) + 4) = 0; *(_DWORD *)(*((_DWORD *)v1 + 92) + 8) = 0; *(_DWORD *)(*((_DWORD *)v1 + 92) + 12) = 0; v3 = (const void *)*((_DWORD *)v1 + 97); v4 = *((_DWORD *)v1 + 96); v5 = (*((_DWORD *)v1 + 97) - v4) >> 2; if ( v5 <= 9 ) { if ( v5 < 9 ) { if ( 0x3FFFFFFF - (9 - v5) < v5 ) std::_Xlength_error("vector too long"); v7 = (*((_DWORD *)v1 + 98) - v4) >> 2; if ( v7 < 9 ) { if ( 0x3FFFFFFF - (v7 >> 1) >= v7 ) v8 = (char *)((v7 >> 1) + v7); else v8 = 0; if ( (unsigned int)v8 < 9 ) v8 = (char *)9; sub_74E360((const void **)v1 + 96, v8); } v9 = (*((_DWORD *)v1 + 97) - *((_DWORD *)v1 + 96)) >> 2; if ( v9 != 9 ) memset(*((void **)v1 + 97), 0, 4 * (9 - v9)); *((_DWORD *)v1 + 97) += 4 * (9 - ((*((_DWORD *)v1 + 97) - *((_DWORD *)v1 + 96)) >> 2)); } } else { v6 = (void *)(v4 + 36); v31 = v6; if ( v6 != v3 ) { memcpy_0(v6, v3, 0); *((_DWORD *)v1 + 97) = v31; } } **((_DWORD **)v1 + 96) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 4) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 8) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 12) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 16) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 20) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 24) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 28) = 0; *(_DWORD *)(*((_DWORD *)v1 + 96) + 32) = 0; v10 = (const void *)*((_DWORD *)v1 + 101); v11 = *((_DWORD *)v1 + 100); v12 = (int)(v1 + 400); v13 = (*((_DWORD *)v1 + 101) - v11) >> 2; if ( v13 <= 5 ) { if ( v13 < 5 ) { v34 = (*((_DWORD *)v1 + 101) - v11) >> 2; if ( 0x3FFFFFFF - (5 - v13) < v34 ) std::_Xlength_error("vector too long"); v15 = 5 - v13 + v34; v16 = (*((_DWORD *)v1 + 102) - v11) >> 2; if ( v15 > v16 ) { if ( 0x3FFFFFFF - (v16 >> 1) >= v16 ) v17 = (char *)((v16 >> 1) + v16); else v17 = 0; if ( (unsigned int)v17 < v15 ) v17 = (char *)v15; sub_74E360((const void **)v1 + 100, v17); } v18 = (*((_DWORD *)v1 + 101) - *((_DWORD *)v1 + 100)) >> 2; if ( v18 != 5 ) memset(*((void **)v1 + 101), 0, 4 * (5 - v18)); v12 = (int)(v1 + 400); *((_DWORD *)v1 + 101) += 4 * (5 - ((*((_DWORD *)v1 + 101) - *((_DWORD *)v1 + 100)) >> 2)); } } else { v14 = (void *)(v11 + 20); v32 = v14; if ( v14 != v10 ) { memcpy_0(v14, v10, 0); *((_DWORD *)v1 + 101) = v32; } } **(_DWORD **)v12 = 0; *(_DWORD *)(*(_DWORD *)v12 + 4) = 0; *(_DWORD *)(*(_DWORD *)v12 + 8) = 0; *(_DWORD *)(*(_DWORD *)v12 + 12) = 0; v19 = *(_DWORD *)v12; v20 = v1 + 416; *(_DWORD *)(v19 + 16) = 0; v21 = (const void *)*((_DWORD *)v1 + 105); v22 = *((_DWORD *)v1 + 104); v23 = (*((_DWORD *)v1 + 105) - v22) >> 2; if ( v23 <= 6 ) { if ( v23 < 6 ) { v35 = (*((_DWORD *)v1 + 105) - v22) >> 2; if ( 0x3FFFFFFF - (6 - v23) < v35 ) std::_Xlength_error("vector too long"); v26 = 6 - v23 + v35; v27 = (*((_DWORD *)v1 + 106) - v22) >> 2; if ( v26 > v27 ) { if ( 0x3FFFFFFF - (v27 >> 1) >= v27 ) v28 = (char *)((v27 >> 1) + v27); else v28 = 0; if ( (unsigned int)v28 < v26 ) v28 = (char *)v26; sub_74E360((const void **)v1 + 104, v28); } v29 = (*((_DWORD *)v1 + 105) - *((_DWORD *)v1 + 104)) >> 2; if ( v29 != 6 ) memset(*((void **)v1 + 105), 0, 4 * (6 - v29)); v20 = v1 + 416; v25 = *((_DWORD *)v1 + 105) + 4 * (6 - ((*((_DWORD *)v1 + 105) - *((_DWORD *)v1 + 104)) >> 2)); goto LABEL_49; } } else { v24 = (void *)(v22 + 24); v33 = (int)v24; if ( v24 != v21 ) { memcpy_0(v24, v21, 0); v25 = v33; LABEL_49: v20[1] = v25; goto LABEL_50; } } LABEL_50: *(_DWORD *)*v20 = 0; *(_DWORD *)(*v20 + 4) = 0; *(_DWORD *)(*v20 + 8) = 0; *(_DWORD *)(*v20 + 12) = 0; *(_DWORD *)(*v20 + 16) = 0; *(_DWORD *)(*v20 + 20) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C0AA4: using guessed type void *CollectCardWin::`vftable'; // 9C0AC4: using guessed type void *CollectCardWin::`vftable'; //----- (004FE330) -------------------------------------------------------- volatile LONG *__cdecl sub_4FE330(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1DCu); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_4FDEB0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (004FE460) -------------------------------------------------------- char __thiscall sub_4FE460(volatile LONG **this, int a2) { volatile LONG **v2; // esi const CHAR *v3; // edi int v4; // eax int v5; // eax volatile LONG *v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi char result; // al int v9; // eax volatile LONG *v10; // ecx int v11; // eax int v12; // edi char *v13; // eax _DWORD *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax unsigned int v17; // edi _DWORD *v18; // eax char *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax _DWORD *v22; // eax char *v23; // eax volatile LONG **v24; // eax int v25; // ST4C_4 int v26; // ST48_4 int (*v27)(void); // edx int v28; // ST44_4 int v29; // eax volatile LONG *v30; // eax unsigned int v31; // edi char *v32; // eax volatile LONG **v33; // eax int v34; // ecx volatile LONG *v35; // edi int v36; // eax volatile LONG *v37; // eax CHAR *v38; // eax CHAR *v39; // eax CHAR *v40; // eax CHAR *v41; // eax CHAR *v42; // eax char *v43; // eax volatile LONG **v44; // eax volatile LONG **v45; // edi volatile LONG *v46; // eax unsigned int v47; // ecx const char *v48; // eax unsigned int v49; // edi bool v50; // zf CHAR *v51; // eax CHAR *v52; // eax CHAR *v53; // eax CHAR *v54; // eax CHAR *v55; // eax CHAR *v56; // eax char *v57; // eax volatile LONG **v58; // eax volatile LONG **v59; // edi volatile LONG *v60; // eax unsigned int v61; // ecx const char *v62; // eax unsigned int v63; // edi volatile LONG **v64; // eax volatile LONG *v65; // eax int v66; // eax int v67; // ST48_4 _DWORD *v68; // eax volatile LONG *v69; // eax int v70; // eax volatile LONG *v71; // eax int v72; // eax volatile LONG *v73; // eax void (__thiscall ***v74)(_DWORD, signed int); // esi int v75; // [esp+58h] [ebp-324h] int v76; // [esp+68h] [ebp-314h] int v77; // [esp+6Ch] [ebp-310h] int v78; // [esp+70h] [ebp-30Ch] unsigned int v79; // [esp+74h] [ebp-308h] unsigned int v80; // [esp+78h] [ebp-304h] unsigned int v81; // [esp+7Ch] [ebp-300h] int v82; // [esp+80h] [ebp-2FCh] char v83[4]; // [esp+84h] [ebp-2F8h] unsigned int v84; // [esp+88h] [ebp-2F4h] unsigned int v85; // [esp+8Ch] [ebp-2F0h] CHAR *v86; // [esp+90h] [ebp-2ECh] char v87; // [esp+94h] [ebp-2E8h] char v88; // [esp+B0h] [ebp-2CCh] char v89; // [esp+CCh] [ebp-2B0h] char v90; // [esp+E8h] [ebp-294h] int v91; // [esp+104h] [ebp-278h] int v92; // [esp+114h] [ebp-268h] int v93; // [esp+118h] [ebp-264h] char v94; // [esp+120h] [ebp-25Ch] int v95; // [esp+130h] [ebp-24Ch] int v96; // [esp+134h] [ebp-248h] char v97; // [esp+13Ch] [ebp-240h] int v98; // [esp+14Ch] [ebp-230h] int v99; // [esp+150h] [ebp-22Ch] char v100; // [esp+158h] [ebp-224h] int v101; // [esp+168h] [ebp-214h] int v102; // [esp+16Ch] [ebp-210h] char v103; // [esp+174h] [ebp-208h] int v104; // [esp+184h] [ebp-1F8h] int v105; // [esp+188h] [ebp-1F4h] char v106; // [esp+190h] [ebp-1ECh] int v107; // [esp+1A0h] [ebp-1DCh] int v108; // [esp+1A4h] [ebp-1D8h] int v109; // [esp+1ACh] [ebp-1D0h] int v110; // [esp+1BCh] [ebp-1C0h] int v111; // [esp+1C0h] [ebp-1BCh] char v112; // [esp+1C8h] [ebp-1B4h] int v113; // [esp+1D8h] [ebp-1A4h] int v114; // [esp+1DCh] [ebp-1A0h] char v115; // [esp+1E4h] [ebp-198h] int v116; // [esp+1F4h] [ebp-188h] int v117; // [esp+1F8h] [ebp-184h] char v118; // [esp+200h] [ebp-17Ch] int v119; // [esp+210h] [ebp-16Ch] int v120; // [esp+214h] [ebp-168h] char v121; // [esp+21Ch] [ebp-160h] int v122; // [esp+22Ch] [ebp-150h] int v123; // [esp+230h] [ebp-14Ch] char v124; // [esp+238h] [ebp-144h] int v125; // [esp+248h] [ebp-134h] int v126; // [esp+24Ch] [ebp-130h] int v127; // [esp+254h] [ebp-128h] int v128; // [esp+264h] [ebp-118h] int v129; // [esp+268h] [ebp-114h] char v130; // [esp+270h] [ebp-10Ch] int v131; // [esp+280h] [ebp-FCh] int v132; // [esp+284h] [ebp-F8h] char v133; // [esp+28Ch] [ebp-F0h] int v134; // [esp+29Ch] [ebp-E0h] int v135; // [esp+2A0h] [ebp-DCh] char v136; // [esp+2A8h] [ebp-D4h] int v137; // [esp+2B8h] [ebp-C4h] int v138; // [esp+2BCh] [ebp-C0h] char v139; // [esp+2C4h] [ebp-B8h] int v140; // [esp+2D4h] [ebp-A8h] int v141; // [esp+2D8h] [ebp-A4h] int v142; // [esp+2E0h] [ebp-9Ch] int v143; // [esp+2F0h] [ebp-8Ch] int v144; // [esp+2F4h] [ebp-88h] char v145; // [esp+2FCh] [ebp-80h] int v146; // [esp+30Ch] [ebp-70h] int v147; // [esp+310h] [ebp-6Ch] char v148; // [esp+318h] [ebp-64h] int v149; // [esp+328h] [ebp-54h] int v150; // [esp+32Ch] [ebp-50h] char v151; // [esp+334h] [ebp-48h] int v152; // [esp+344h] [ebp-38h] int v153; // [esp+348h] [ebp-34h] char v154; // [esp+350h] [ebp-2Ch] int v155; // [esp+360h] [ebp-1Ch] int v156; // [esp+364h] [ebp-18h] int v157; // [esp+378h] [ebp-4h] v2 = this; v86 = (CHAR *)a2; v82 = 0; v157 = 0; v80 = 0; v79 = 0; v84 = 0; v85 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACAB50, "Collect\\Max\\AncientStonie01.png"); v4 = sub_8667C0(); v5 = (*(int (__thiscall **)(int, const CHAR *, _DWORD))(*(_DWORD *)v4 + 8))(v4, v3, 0); if ( v5 ) { v76 = 6; v77 = 2; v78 = 0; v6 = sub_865FA0(v5, &v76); } else { v6 = 0; } v2[86] = v6; if ( !v6 ) goto LABEL_56; v9 = (*(int (__thiscall **)(volatile LONG *))(*v6 + 60))(v6); v10 = v2[86]; v80 = v9; v11 = (*(int (**)(void))(*v10 + 64))(); v12 = dword_BA6BA0; v79 = v11; if ( !byte_ACAD5C ) sub_420410(); v13 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_BCard.nif"); sub_8F66B0(v13, (int)&v82, v12); if ( !v82 ) return 0; if ( !sub_8F71E0(v82, (int)"Frame", &v84, &v85, &v80, &v79) ) { LABEL_56: v7 = (void (__thiscall ***)(_DWORD, signed int))v82; v157 = -1; if ( v82 && !InterlockedDecrement((volatile LONG *)(v82 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } v14 = sub_8FAC60((int *)v2[86], 1, v84, v85, v80, v79); if ( sub_8F1440(v2, v84, v85, (int)v14, 0, (int)v86, (int)"CollectCardWin", 0) ) { v15 = sub_8FB140(v82, (int)"Panel01", (int)&v84, (int)&v85, 0); v16 = sub_8F3EB0(v84, v85, (int)v15, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); sub_4019E0(&v87, "S"); LOBYTE(v157) = 1; sub_4019E0(&v88, "A"); LOBYTE(v157) = 2; sub_4019E0(&v89, "B"); LOBYTE(v157) = 3; sub_4019E0(&v90, "C"); LOBYTE(v157) = 4; v17 = 0; *(_DWORD *)v83 = &v87; do { v18 = *(_DWORD **)v83; if ( *(_DWORD *)(*(_DWORD *)v83 + 20) >= 0x10u ) v18 = **(_DWORD ***)v83; v86 = (CHAR *)v82; v19 = sub_7549E0("%sCardBack", v18); v20 = sub_8FB140((int)v86, (int)v19, (int)&v84, (int)&v85, 0); v86 = (CHAR *)&v2[92][v17]; v21 = sub_8F3EB0(v84, v85, (int)v20, (int)v2, 0, 0); *(_DWORD *)v86 = v21; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[92][v17] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[92][v17] + 240))(0); if ( *(_DWORD *)(*(_DWORD *)v83 + 20) < 0x10u ) v22 = *(_DWORD **)v83; else v22 = **(_DWORD ***)v83; v86 = (CHAR *)v82; v23 = sub_7549E0("%sCard", v22); v24 = sub_8FB140((int)v86, (int)v23, (int)&v84, (int)&v85, 0); v25 = v2[92][v17]; v26 = (int)v24; v27 = *(int (**)(void))(*(_DWORD *)v25 + 168); v86 = (CHAR *)v2[92][v17]; v28 = v85 - v27(); v29 = (*(int (**)(void))(*(_DWORD *)v86 + 164))(); v30 = sub_8F3EB0(v84 - v29, v28, v26, v25, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); *(_DWORD *)v83 += 28; ++v17; } while ( v17 < 4 ); v31 = 0; do { v86 = (CHAR *)v82; v81 = v31 + 1; v32 = sub_7549E0("Star%02d", v31 + 1); v33 = sub_8FB140((int)v86, (int)v32, (int)&v84, (int)&v85, 0); v34 = v31; v35 = v2[96]; v86 = (CHAR *)(v34 * 4); v35[v34] = (volatile LONG)sub_8F3EB0(v84, v85, (int)v33, (int)v2, 0, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)((char *)v2[96] + (_DWORD)v86) + 240))(0); v31 = v81; } while ( v81 < 9 ); if ( sub_8F71E0(v82, (int)"SerialNumber", &v84, &v85, &v80, &v79) ) { v36 = sub_421050(0); v37 = sub_8F4A20(v84, v85, v80, v79, v36, (int)v2, 0, 0); v2[87] = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 4); (*(void (__stdcall **)(void *))(*v2[87] + 472))(&unk_9C0983); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); } v129 = 15; v128 = 0; LOBYTE(v127) = 0; sub_4018E0(&v127, "AT_Normal", 9u); LOBYTE(v157) = 5; v132 = 15; v131 = 0; v130 = 0; sub_4018E0(&v130, "AT_Chief", 8u); LOBYTE(v157) = 6; v135 = 15; v134 = 0; v133 = 0; sub_4018E0(&v133, "AT_Boss", 7u); LOBYTE(v157) = 7; v138 = 15; v137 = 0; v136 = 0; sub_4018E0(&v136, "AT_Hero", 7u); LOBYTE(v157) = 8; v141 = 15; v140 = 0; v139 = 0; sub_4018E0(&v139, "AT_Elite", 8u); LOBYTE(v157) = 9; v38 = (CHAR *)sub_40C190(37435462); v144 = 15; v143 = 0; LOBYTE(v142) = 0; v86 = v38 + 1; sub_4018E0(&v142, v38, strlen(v38)); LOBYTE(v157) = 10; v39 = (CHAR *)sub_40C190(-81118143); v147 = 15; v146 = 0; v145 = 0; v86 = v39 + 1; sub_4018E0(&v145, v39, strlen(v39)); LOBYTE(v157) = 11; v40 = (CHAR *)sub_40C190(-268419763); v150 = 15; v149 = 0; v148 = 0; v86 = v40 + 1; sub_4018E0(&v148, v40, strlen(v40)); LOBYTE(v157) = 12; v41 = (CHAR *)sub_40C190(-435799732); v153 = 15; v152 = 0; v151 = 0; v86 = v41 + 1; sub_4018E0(&v151, v41, strlen(v41)); LOBYTE(v157) = 13; v42 = (CHAR *)sub_40C190(-13939903); v156 = 15; v155 = 0; v154 = 0; sub_4018E0(&v154, v42, strlen(v42)); LOBYTE(v157) = 14; v81 = 0; *(_DWORD *)v83 = 0; v86 = (CHAR *)5; do { if ( *(unsigned int *)((char *)&v129 + *(_DWORD *)v83) < 0x10 ) v43 = (char *)&v127 + *(_DWORD *)v83; else v43 = *(char **)((char *)&v127 + *(_DWORD *)v83); v44 = sub_8FB140(v82, (int)v43, (int)&v84, (int)&v85, 0); v45 = (volatile LONG **)((char *)v2[100] + v81); v46 = sub_8F3EB0(v84, v85, (int)v44, (int)v2, 0, 0); v47 = v81; *v45 = v46; *(_DWORD *)(*(volatile LONG *)((char *)v2[100] + v47) + 272) = dword_AD01E8; if ( *(unsigned int *)((char *)&v144 + *(_DWORD *)v83) < 0x10 ) v48 = (char *)&v142 + *(_DWORD *)v83; else v48 = *(const char **)((char *)&v142 + *(_DWORD *)v83); v49 = v81; sub_8F2EA0(*(void ***)((char *)v2[100] + v81), v48); *(_DWORD *)v83 += 28; v50 = v86-- == (CHAR *)1; v81 = v49 + 4; } while ( !v50 ); v93 = 15; v92 = 0; LOBYTE(v91) = 0; sub_4018E0(&v91, "MT_Human", 8u); LOBYTE(v157) = 15; v96 = 15; v95 = 0; v94 = 0; sub_4018E0(&v94, "MT_Magiclife", 0xCu); LOBYTE(v157) = 16; v99 = 15; v98 = 0; v97 = 0; sub_4018E0(&v97, "MT_Spirit", 9u); LOBYTE(v157) = 17; v102 = 15; v101 = 0; v100 = 0; sub_4018E0(&v100, "MT_Beast", 8u); LOBYTE(v157) = 18; v105 = 15; v104 = 0; v103 = 0; sub_4018E0(&v103, "MT_Elemental", 0xCu); LOBYTE(v157) = 19; v108 = 15; v107 = 0; v106 = 0; sub_4018E0(&v106, "MT_Undead", 9u); LOBYTE(v157) = 20; v51 = (CHAR *)sub_40C190(-1443501576); v111 = 15; v110 = 0; LOBYTE(v109) = 0; v86 = v51 + 1; sub_4018E0(&v109, v51, strlen(v51)); LOBYTE(v157) = 21; v52 = (CHAR *)sub_40C190(-516671685); v114 = 15; v113 = 0; v112 = 0; v86 = v52 + 1; sub_4018E0(&v112, v52, strlen(v52)); LOBYTE(v157) = 22; v53 = (CHAR *)sub_40C190(-117703948); v117 = 15; v116 = 0; v115 = 0; v86 = v53 + 1; sub_4018E0(&v115, v53, strlen(v53)); LOBYTE(v157) = 23; v54 = (CHAR *)sub_40C190(-1711932436); v120 = 15; v119 = 0; v118 = 0; v86 = v54 + 1; sub_4018E0(&v118, v54, strlen(v54)); LOBYTE(v157) = 24; v55 = (CHAR *)sub_40C190(-298502588); v123 = 15; v122 = 0; v121 = 0; v86 = v55 + 1; sub_4018E0(&v121, v55, strlen(v55)); LOBYTE(v157) = 25; v56 = (CHAR *)sub_40C190(-420090385); v126 = 15; v125 = 0; v124 = 0; sub_4018E0(&v124, v56, strlen(v56)); LOBYTE(v157) = 26; v81 = 0; *(_DWORD *)v83 = 0; v86 = (CHAR *)6; do { if ( *(unsigned int *)((char *)&v93 + *(_DWORD *)v83) < 0x10 ) v57 = (char *)&v91 + *(_DWORD *)v83; else v57 = *(char **)((char *)&v91 + *(_DWORD *)v83); v58 = sub_8FB140(v82, (int)v57, (int)&v84, (int)&v85, 0); v59 = (volatile LONG **)((char *)v2[104] + v81); v60 = sub_8F3EB0(v84, v85, (int)v58, (int)v2, 0, 0); v61 = v81; *v59 = v60; *(_DWORD *)(*(volatile LONG *)((char *)v2[104] + v61) + 272) = dword_AD01E8; if ( *(unsigned int *)((char *)&v111 + *(_DWORD *)v83) < 0x10 ) v62 = (char *)&v109 + *(_DWORD *)v83; else v62 = *(const char **)((char *)&v109 + *(_DWORD *)v83); v63 = v81; sub_8F2EA0(*(void ***)((char *)v2[104] + v81), v62); *(_DWORD *)v83 += 28; v50 = v86-- == (CHAR *)1; v81 = v63 + 4; } while ( !v50 ); v64 = sub_8FB140(v82, (int)"Unidentified", (int)&v84, (int)&v85, 0); v65 = sub_8F3EB0(v84, v85, (int)v64, (int)v2, 0, 0); v2[91] = v65; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v65 + 240))(v65, 0); v66 = (*((int (__thiscall **)(volatile LONG **))*v2 + 37))(v2); v67 = (*((int (__thiscall **)(volatile LONG **, int))*v2 + 36))(v2, v66); v68 = sub_8F62B0(255, 255, 255, 255); v69 = sub_8F3D50((int)v68, 0, 0, v67, (int)v2, 0, 0, v75); v2[113] = v69; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v69 + 276))(v69, 0.0); (*(void (__stdcall **)(signed int))(*v2[113] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v2[113] + 240))(0); if ( sub_8F71E0(v82, (int)"Title", &v84, &v85, &v80, &v79) ) { v70 = sub_421050(0); v71 = sub_8F4A20(v84, v85, v80, v79, v70, (int)v2, 0, 0); v2[88] = v71; (*(void (__thiscall **)(volatile LONG *, signed int))(*v71 + 488))(v71, 5); (*(void (__stdcall **)(void *))(*v2[88] + 472))(&unk_9C098A); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); } if ( sub_8F71E0(v82, (int)"Text", &v84, &v85, &v80, &v79) ) { v72 = sub_421050(0); v73 = sub_8F4A20(v84, v85, v80, v79, v72, (int)v2, 0, 0); v2[90] = v73; (*(void (__thiscall **)(volatile LONG *, signed int))(*v73 + 488))(v73, 5); (*(void (__stdcall **)(void *))(*v2[90] + 472))(&unk_9C098B); (*(void (__stdcall **)(_DWORD))(*v2[90] + 240))(0); } (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v157) = 20; `eh vector destructor iterator'(&v109, 0x1Cu, 6, sub_636A10); LOBYTE(v157) = 14; `eh vector destructor iterator'(&v91, 0x1Cu, 6, sub_636A10); LOBYTE(v157) = 9; `eh vector destructor iterator'(&v142, 0x1Cu, 5, sub_636A10); LOBYTE(v157) = 4; `eh vector destructor iterator'(&v127, 0x1Cu, 5, sub_636A10); LOBYTE(v157) = 0; `eh vector destructor iterator'(&v87, 0x1Cu, 4, sub_636A10); v157 = -1; if ( v82 ) { v74 = (void (__thiscall ***)(_DWORD, signed int))v82; if ( !InterlockedDecrement((volatile LONG *)(v82 + 4)) ) { if ( v74 ) (**v74)(v74, 1); } } result = 1; } else { v157 = -1; sub_410C00(&v82); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (004FF330) -------------------------------------------------------- void __thiscall sub_4FF330(int this, unsigned int a2, int a3, unsigned int a4) { CHAR *v4; // esi CHAR *v5; // esi CHAR *v6; // esi CHAR *v7; // esi char *v8; // eax bool v9; // cf int v10; // edi char *v11; // ST08_4 char *v12; // eax char *v13; // eax int v14; // [esp+18h] [ebp-84h] char v15[16]; // [esp+1Ch] [ebp-80h] int v16; // [esp+2Ch] [ebp-70h] int v17; // [esp+30h] [ebp-6Ch] char v18; // [esp+38h] [ebp-64h] int v19; // [esp+48h] [ebp-54h] int v20; // [esp+4Ch] [ebp-50h] char v21; // [esp+54h] [ebp-48h] int v22; // [esp+64h] [ebp-38h] int v23; // [esp+68h] [ebp-34h] char v24; // [esp+70h] [ebp-2Ch] int v25; // [esp+80h] [ebp-1Ch] int v26; // [esp+84h] [ebp-18h] int v27; // [esp+98h] [ebp-4h] v14 = this; if ( !*(_BYTE *)(this + 456) && a4 < 4 && *(_DWORD *)(this + 348) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 348) + 256))(1); v17 = 15; v16 = 0; v15[0] = 0; v4 = (CHAR *)sub_40A910(-12361620); sub_4018E0(v15, v4, strlen(v4)); v27 = 0; v5 = (CHAR *)sub_40A910(-12366228); v20 = 15; v19 = 0; v18 = 0; sub_4018E0(&v18, v5, strlen(v5)); LOBYTE(v27) = 1; v6 = (CHAR *)sub_40A910(-12365972); v23 = 15; v22 = 0; v21 = 0; sub_4018E0(&v21, v6, strlen(v6)); LOBYTE(v27) = 2; v7 = (CHAR *)sub_40A910(-12365716); v26 = 15; v25 = 0; v24 = 0; sub_4018E0(&v24, v7, strlen(v7)); v8 = &v15[28 * a4]; v9 = *((_DWORD *)v8 + 5) < 0x10u; v27 = 3; if ( !v9 ) v8 = *(char **)v8; v10 = **(_DWORD **)(v14 + 348); v11 = v8; v12 = (char *)sub_40A910(1939918011); v13 = sub_7549E0(v12, a3, v11, (char)(a2 / 0xF4240 + 64), (a2 % 0xF4240 - a2 % 0x2710) / 0x2710, a2 % 0x2710); (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(*(_DWORD *)(v14 + 348), v13); v27 = -1; `eh vector destructor iterator'(v15, 0x1Cu, 4, sub_636A10); } } // 4FF330: using guessed type char var_80[16]; //----- (004FF570) -------------------------------------------------------- void __thiscall sub_4FF570(_DWORD *this, char *a2) { char *v2; // edi _DWORD *v3; // esi char *v4; // eax _DWORD *v5; // ecx char *v6; // ebx unsigned int v7; // eax char *v8; // edx void *v9; // eax int v10; // [esp+10h] [ebp-40h] _DWORD *v11; // [esp+14h] [ebp-3Ch] _DWORD *v12; // [esp+18h] [ebp-38h] char *v13; // [esp+1Ch] [ebp-34h] void *v14; // [esp+24h] [ebp-2Ch] int v15; // [esp+34h] [ebp-1Ch] unsigned int v16; // [esp+38h] [ebp-18h] int v17; // [esp+4Ch] [ebp-4h] v2 = a2; v3 = this; v12 = this; if ( this[90] ) { v16 = 15; v15 = 0; LOBYTE(v14) = 0; v17 = 0; sub_7549E0(0); v4 = sub_7549E0(0); v5 = (_DWORD *)v3[90]; v13 = v4; v11 = *(_DWORD **)(v5[72] + 312); v10 = (*(int (**)(void))(*v5 + 144))(); if ( strlen(a2) ) { do { v6 = sub_900720(v11, v2, v10, 0); strncpy(v13, v2, v6 - v2); v13[v6 - v2] = 0; sub_401D10((int)&v14, v13, strlen(v13)); v7 = strlen(v6); v8 = "\n"; if ( !v7 ) v8 = (char *)&unk_9C099B; sub_401D10((int)&v14, v8, strlen(v8)); v2 = v6; } while ( strlen(v6) ); v3 = v12; } v9 = v14; if ( v16 < 0x10 ) v9 = &v14; (*(void (__stdcall **)(void *))(*(_DWORD *)v3[90] + 472))(v9); if ( v16 >= 0x10 ) operator delete(v14); } } //----- (004FF700) -------------------------------------------------------- void __thiscall sub_4FF700(_BYTE *this, int a2, unsigned int a3, unsigned int a4, int a5) { int v5; // esi int v6; // eax unsigned int v7; // edi int v8; // ebx char *v9; // edi int v10; // ecx int v11; // ecx _DWORD *v12; // eax int v13; // ST08_4 char *v14; // eax char *v15; // eax char *v16; // eax char *v17; // eax _DWORD *v18; // eax int v19; // ecx unsigned int v20; // [esp+4h] [ebp-4h] v5 = (int)this; if ( this[456] || this[457] || !(*(unsigned __int8 (**)(void))(*(_DWORD *)this + 260))() || *(_DWORD *)(v5 + 440) != a2 || *(_DWORD *)(v5 + 444) != a4 ) { sub_4FDB70((_DWORD **)v5); if ( !*(_BYTE *)(v5 + 456) ) { *(_DWORD *)(v5 + 440) = a2; *(_DWORD *)(v5 + 444) = a4; *(_DWORD *)(v5 + 448) = a3; } v6 = *(_DWORD *)(dword_ACD9E8 + 56); v7 = 0; v20 = v6 ? *(_DWORD *)(v6 + 40) : 0; if ( v20 > 0 ) { while ( 1 ) { v8 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v7); if ( v8 ) { if ( *(_WORD *)v8 == (_WORD)a2 ) break; } if ( ++v7 >= v20 ) return; } v9 = (char *)sub_4DCDC0(a2); if ( v9 ) { v10 = *(_DWORD *)(v5 + 352); if ( v10 ) (*(void (__stdcall **)(_WORD *))(*(_DWORD *)v10 + 472))((_WORD *)v9 + 17); v11 = *(_DWORD *)(v5 + 364); if ( v11 ) (*(void (__stdcall **)(int))(*(_DWORD *)v11 + 256))(a5); if ( (_BYTE)a5 ) { v12 = sub_4FFA60(*(_DWORD *)(v8 + 38)); if ( v12 ) { v13 = (int)(v12 + 1); v14 = (char *)sub_40A910(-22185620); v15 = sub_7549E0(v14, v13); sub_4FF570((_DWORD *)v5, v15); } } else { if ( !byte_ACAD5C ) sub_420410(); v16 = (char *)sub_401410(byte_ACAB50, "Collect\\Max\\%s.png"); v17 = sub_7549E0(v16, v9 + 2); v18 = sub_4FDAA0((int)v17); if ( v18 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v5 + 452))(v5, v18); v19 = *(_DWORD *)(*(_DWORD *)(v5 + 368) + 4 * *(_DWORD *)(v8 + 34)); if ( v19 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v19 + 256))(1); sub_4FDCA0((_DWORD *)v5, v9 + 354); sub_4FF330(v5, a4, (unsigned __int8)v9[386], *(_DWORD *)(v8 + 34)); sub_4FDB20((_BYTE *)v5, a3); sub_4FF570((_DWORD *)v5, v9 + 98); } } } } } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9E8: using guessed type int dword_ACD9E8; //----- (004FF8F0) -------------------------------------------------------- void __thiscall sub_4FF8F0(int this, float a2) { int v2; // esi float v3; // ST14_4 float v4; // ST14_4 double v5; // st7 int v6; // eax double v7; // st7 int v8; // ecx unsigned int v9; // eax int v10; // ecx unsigned int v11; // ecx int v12; // edx int v13; // eax int v14; // edx float v15; // [esp+14h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 456) ) { v3 = flt_ACCFD0 + *(float *)(this + 460); *(float *)(this + 460) = v3; if ( v3 <= 4.0 ) goto LABEL_17; v4 = flt_ACCFD0 + flt_ACCFD0 + *(float *)(this + 468); *(float *)(this + 468) = v4; if ( v4 > 1.0 ) *(float *)(this + 468) = 1.0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 452) + 276))(*(float *)(this + 468)); v5 = *(float *)(v2 + 468); if ( 1.0 != v5 ) { LABEL_17: v7 = a2; v15 = a2 - *(float *)(v2 + 464); if ( v15 > 0.035 ) { v8 = *(_DWORD *)(v2 + 472); *(float *)(v2 + 464) = v7; sub_4FF700((_BYTE *)v2, v8, 0, 0, 0); v9 = rand(); v10 = *(_DWORD *)(dword_ACD9E8 + 56); if ( v10 ) v11 = *(_DWORD *)(v10 + 40); else v11 = 0; v12 = v9 % v11; v13 = *(_DWORD *)(v2 + 472); v14 = v12 + 1; if ( v14 == v13 ) v14 = v13 + 1; *(_DWORD *)(v2 + 472) = v14; } } else { *(_BYTE *)(v2 + 456) = 0; v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v6 ) sub_4E4490(v6, v5); } } } // ACCFD0: using guessed type float flt_ACCFD0; // ACD9E8: using guessed type int dword_ACD9E8; //----- (004FFA30) -------------------------------------------------------- void __thiscall sub_4FFA30(float *this, float a2) { float *v2; // esi v2 = this; sub_4FF8F0((int)this, a2); sub_4FD9F0(v2, SLODWORD(a2)); } //----- (004FFA60) -------------------------------------------------------- _DWORD *__cdecl sub_4FFA60(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACD9F0 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9F0 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9F0: using guessed type int dword_ACD9F0; //----- (004FFAB0) -------------------------------------------------------- void *__thiscall sub_4FFAB0(void *this, char a2) { void *v2; // esi v2 = this; sub_4FDDF0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (004FFB70) -------------------------------------------------------- int __thiscall sub_4FFB70(_DWORD *this) { return this[83]; } //----- (004FFCD0) -------------------------------------------------------- char __thiscall sub_4FFCD0(volatile LONG *this, int a2, int a3) { char result; // al if ( !a2 ) result = sub_8F2BC0(this, 1, 0, 0); return result; } //----- (004FFCF0) -------------------------------------------------------- void __thiscall sub_4FFCF0(int this, float a2) { if ( a2 - *(float *)(this + 364) > 3.0 ) sub_8F2BC0((volatile LONG *)this, 1, 0, 0); } //----- (004FFD20) -------------------------------------------------------- void __userpurge sub_4FFD20(int a1@, int a2@, int a3@, int a4) { int v4; // esi unsigned int v5; // edi int *v6; // ecx int v7; // ebx int v8; // edi int v9; // eax int v10; // ebx int v11; // edi int v12; // eax int v13; // [esp+4h] [ebp-8h] int v14; // [esp+14h] [ebp+8h] int v15; // [esp+14h] [ebp+8h] v4 = a1; if ( *(_DWORD *)(a1 + 356) ) { (*(void (__stdcall **)(int, int, int))(**(_DWORD **)(a1 + 356) + 472))(a4, a3, a2); (*(void (__stdcall **)(int *))(**(_DWORD **)(v4 + 356) + 492))(&v13); v5 = v13; if ( v13 <= 0 ) v5 = 1; (*(void (__cdecl **)(unsigned int))(**(_DWORD **)(v4 + 348) + 468))(v5); (*(void (__cdecl **)(unsigned int))(**(_DWORD **)(v4 + 348) + 172))(*(_DWORD *)(v4 + 360) - (v5 >> 1)); v6 = *(int **)(v4 + 344); v7 = *v6; v8 = *(_DWORD *)(v4 + 348); v14 = (*(int (**)(void))(*v6 + 144))(); v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 164))(v8); (*(void (__thiscall **)(_DWORD, int))(v7 + 172))(*(_DWORD *)(v4 + 344), v9 - v14); v10 = **(_DWORD **)(v4 + 352); v11 = *(_DWORD *)(v4 + 348); v15 = (*(int (**)(void))(**(_DWORD **)(v4 + 348) + 164))(); v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 144))(v11); (*(void (__thiscall **)(_DWORD, int))(v10 + 172))(*(_DWORD *)(v4 + 352), v12 + v15); } } //----- (004FFE20) -------------------------------------------------------- _DWORD *__stdcall sub_4FFE20(int a1) { int v1; // eax _DWORD *result; // eax int v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v1 = sub_8667C0(); result = (_DWORD *)(*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v1 + 8))(v1, a1, 0); if ( result ) { v3 = 6; v4 = 2; v5 = 0; result = sub_865FA0((int)result, &v3); } return result; } //----- (004FFE70) -------------------------------------------------------- int __thiscall sub_4FFE70(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int v3; // ecx v1 = this; this[90] = 0; v2 = 0; do { v3 = *(_DWORD *)(v2 + v1[83]); if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0); v2 += 4; } while ( v2 < 0x10 ); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 240))(v1, 0); } //----- (004FFEC0) -------------------------------------------------------- char __thiscall sub_4FFEC0(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7) { int v7; // esi int v8; // edi _DWORD *v9; // ebx volatile LONG **v10; // eax int v12; // ebx int v13; // ST44_4 volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax volatile LONG *v17; // eax int v18; // [esp+14h] [ebp-18h] int v19; // [esp+18h] [ebp-14h] int v20; // [esp+1Ch] [ebp-10h] int v21; // [esp+28h] [ebp-4h] v7 = (int)this; v8 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v21 = 0; if ( !v8 ) return 0; v20 = 0; a2 = 0; v18 = 0; v19 = 0; v9 = a6; if ( a6 ) { v18 = (*(int (__thiscall **)(_DWORD *))(*a6 + 164))(a6); v19 = (*(int (__thiscall **)(_DWORD *))(*v9 + 168))(v9); } v10 = sub_8FB140(v8, a3, (int)&v20, (int)&a2, 0); if ( !sub_8FE3B0((volatile LONG **)v7, v20 - v18, a2 - v19, (int)v10, v9, a7, 0, 0) ) { v21 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return 0; } v12 = v20; v13 = a2; v14 = sub_8FB140(v8, a4, (int)&v20, (int)&a2, 0); v15 = sub_8F3EB0(v20 - v12, a2 - v13, (int)v14, v7, 0, 0); *(_DWORD *)(v7 + 324) = v15; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v8, a5, (int)&v20, (int)&a2, 0); v17 = sub_8F3EB0(v20 - v12, a2 - v13, (int)v16, v7, 0, 0); *(_DWORD *)(v7 + 328) = v17; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); *(_DWORD *)(v7 + 272) = dword_AD01E8; v21 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return 1; } // AD01E8: using guessed type int dword_AD01E8; //----- (00500080) -------------------------------------------------------- int __thiscall sub_500080(_DWORD **this, _DWORD *a2) { _DWORD **v2; // esi int result; // eax v2 = this; (*(void (__stdcall **)(_DWORD))(*this[81] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[82] + 256))(0); v2[83] = a2; if ( !a2 ) return (*(int (__stdcall **)(signed int))(*v2[81] + 256))(1); result = (int)a2 - 1; if ( a2 == (_DWORD *)1 ) result = (*(int (__stdcall **)(signed int))(*v2[82] + 256))(1); return result; } //----- (005000F0) -------------------------------------------------------- int __thiscall sub_5000F0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ebx int *v3; // esi int v4; // edi int v5; // eax int result; // eax int v7; // ecx _DWORD *v8; // [esp+Ch] [ebp-4h] v1 = this; v8 = this; v2 = 0; do { v3 = *(int **)(v2 + v1[72]); if ( v3 ) { (*(void (__thiscall **)(int *, void *))(*v3 + 472))(v3, &unk_9C0CFF); v4 = *v3; v5 = sub_421050(0); (*(void (__thiscall **)(int *, int))(v4 + 452))(v3, v5); (*(void (__thiscall **)(int *, int *))(*v3 + 468))(v3, &dword_AA8C68); v1 = v8; } result = v1[76]; v7 = *(_DWORD *)(v2 + result); if ( v7 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 256))(0); v2 += 4; } while ( v2 < 0x14 ); return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (00500180) -------------------------------------------------------- int __thiscall sub_500180(int *this) { int *v1; // ebx unsigned int v2; // ecx unsigned int v3; // esi int v4; // eax unsigned int v5; // edi int v6; // esi void (__thiscall **v7)(int, char *); // ST14_4 char *v8; // eax int v9; // esi int result; // eax int *v11; // esi int v12; // edi int v13; // eax int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] unsigned int v17; // [esp+1Ch] [ebp-8h] unsigned int v18; // [esp+20h] [ebp-4h] v1 = this; sub_5000F0(this); v2 = v1[87] + 1; v3 = v1[86] / 5u; if ( v3 >= v2 / 5 ) v18 = v2 % 5; else v18 = 5; v4 = v1[85] + (*(int (**)(void))(**(_DWORD **)v1[72] + 144))(); v5 = 0; v14 = v4; if ( v18 ) { v17 = v4 * (5 - v18) >> 1; v16 = 5 * v3; do { v6 = *(_DWORD *)(v1[72] + 4 * v5); v15 = v17 + v1[84]; if ( v6 ) { v7 = (void (__thiscall **)(int, char *))(*(_DWORD *)v6 + 472); v8 = sub_7549E0("%d", v16 + v5 + 1); (*v7)(v6, v8); (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 172))(v6, v15); v4 = v14; } v9 = *(_DWORD *)(v1[76] + 4 * v5); if ( v9 ) { (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v9 + 520))(v9, v5 + v16); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 172))(v9, v15); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 256))(v9, 1); v4 = v14; } v17 += v4; ++v5; } while ( v5 < v18 ); } result = v1[72]; v11 = *(int **)(result + 4 * (v1[86] % 5u)); if ( v11 ) { v12 = *v11; v13 = sub_421050(6); (*(void (__thiscall **)(int *, int))(v12 + 452))(v11, v13); result = (*(int (__thiscall **)(int *, int *))(*v11 + 468))(v11, &dword_AA8CB8); } return result; } // AA8CB8: using guessed type int dword_AA8CB8; //----- (00500300) -------------------------------------------------------- char __thiscall sub_500300(_DWORD *this, int a2, int a3, _DWORD *a4) { _DWORD *v4; // esi char result; // al v4 = this; result = sub_5D5860(this, a2, a3, a4); if ( result ) { *((_BYTE *)v4 + 448) = 0; result = 1; } return result; } //----- (00500330) -------------------------------------------------------- void __thiscall sub_500330(int this, float a2) { int v2; // eax if ( *(_BYTE *)(this + 448) ) { v2 = *(_DWORD *)(this + 356); if ( *(_DWORD *)(this + 384) ) { *(_WORD *)(v2 + 28) &= 0xFFFEu; sub_5D31A0(this, a2); return; } *(_WORD *)(v2 + 28) |= 1u; } sub_5D31A0(this, a2); } //----- (00500380) -------------------------------------------------------- void __thiscall sub_500380(volatile LONG *this) { volatile LONG *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ecx int v4; // eax v1 = this; if ( *((_DWORD *)this + 93) < 5u ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD **)(*((_DWORD *)v1 + 87) + 4 * *((_DWORD *)v1 + 93)); if ( v3 ) { v4 = sub_5D5470(v3); if ( v4 ) sub_4BF440(v2, *((_DWORD *)v1 + 92), *(_WORD *)(v4 + 8)); sub_8F2BC0(v1, 1, 0, 0); } } } } //----- (005003F0) -------------------------------------------------------- void __thiscall sub_5003F0(int this, unsigned int a2) { int v2; // eax int v3; // eax if ( a2 < 5 ) { v2 = *(_DWORD *)(*(_DWORD *)(this + 348) + 4 * *(_DWORD *)(this + 372)); if ( v2 ) *(_BYTE *)(v2 + 448) = 0; v3 = *(_DWORD *)(*(_DWORD *)(this + 348) + 4 * a2); if ( v3 ) *(_BYTE *)(v3 + 448) = 1; *(_BYTE *)(this + 364) = 1; *(_DWORD *)(this + 372) = a2; } else { *(_BYTE *)(this + 364) = 0; } } //----- (00500450) -------------------------------------------------------- int __thiscall sub_500450(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi int result; // eax int v4; // esi int (__thiscall *v5)(int, _DWORD); // eax v1 = this; v2 = 0; do { result = v1[87]; v4 = *(_DWORD *)(v2 + result); if ( v4 ) { sub_5D5B70((_WORD *)v4, 0, 1); sub_5D3170(v4, 0); v5 = *(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256); *(_BYTE *)(v4 + 448) = 0; result = v5(v4, 0); } v2 += 4; } while ( v2 < 0x14 ); return result; } //----- (005004B0) -------------------------------------------------------- int __thiscall sub_5004B0(int this) { int v1; // edi unsigned int v2; // esi int result; // eax v1 = this; *(_BYTE *)(this + 376) = 0; *(_DWORD *)(this + 380) = 0; v2 = 0; do { result = *(_DWORD *)(v2 + *(_DWORD *)(v1 + 344)); if ( result ) { if ( *(_DWORD *)(result + 356) ) result = (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(result + 356) + 256))( *(_DWORD *)(result + 356), 1); } v2 += 4; } while ( v2 < 0x10 ); return result; } //----- (00500510) -------------------------------------------------------- int __thiscall sub_500510(_DWORD *this, int a2, int a3) { int v3; // edi unsigned int v4; // edx _DWORD *v5; // esi v3 = 0; v4 = 0; if ( !((this[91] - this[90]) / 20) ) return 0; v5 = (_DWORD *)this[90]; while ( *v5 != a2 ) { LABEL_6: ++v4; v5 += 5; if ( v4 >= (this[91] - this[90]) / 20 ) return 0; } if ( v3 != a3 ) { ++v3; goto LABEL_6; } return this[90] + 20 * v4; } //----- (005005D0) -------------------------------------------------------- void __thiscall sub_5005D0(float *this) { this[91] = flt_ACCFCC; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00500620) -------------------------------------------------------- char __thiscall sub_500620(int *this, int a2) { int *v2; // esi int v3; // eax int v4; // eax unsigned int v5; // eax unsigned int v6; // ecx int v7; // ST0C_4 int v8; // ST08_4 volatile LONG *v9; // eax v2 = this; switch ( a2 ) { case 0: this[86] = 0; break; case 1: v3 = this[86]; if ( v3 ) v4 = v3 - 1; else v4 = 0; goto LABEL_10; case 2: v5 = this[86]; v6 = this[87]; if ( v5 < v6 ) v6 = v5 + 1; v2[86] = v6; break; case 3: v4 = this[87]; LABEL_10: this[86] = v4; break; default: break; } sub_500180(v2); v7 = v2[89]; v8 = v2[88]; v9 = (volatile LONG *)sub_402BF0(v2); return sub_8F2BC0(v9, 5, v8, v7); } //----- (005006C0) -------------------------------------------------------- void __thiscall sub_5006C0(int this, int a2, unsigned int a3) { if ( a2 ) { if ( a2 == 1 ) { *(_BYTE *)(this + 364) = 0; *(_DWORD *)(this + 372) = 0; sub_8F2BC0((volatile LONG *)this, 1, 0, 0); } else if ( a2 == 2 ) { sub_5003F0(this, a3); } } else { sub_500380((volatile LONG *)this); } } //----- (00500710) -------------------------------------------------------- void __thiscall sub_500710(volatile LONG *this) { volatile LONG *v1; // esi _DWORD *v2; // edi const CHAR *v3; // eax int v4; // eax v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { if ( *((_BYTE *)v1 + 376) ) { v4 = *(_DWORD *)(*((_DWORD *)v1 + 86) + 4 * *((_DWORD *)v1 + 95)); if ( v4 ) sub_4BF3E0(v2, *((_DWORD *)v1 + 96), *(_DWORD *)(v4 + 360)); sub_8F2BC0(v1, 1, 0, 0); } else { v3 = sub_40A910(1484942465); sub_492060(v2, (int)v3); } } } //----- (00500790) -------------------------------------------------------- void __thiscall sub_500790(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( a2 < 4 ) { sub_5004B0((int)this); v3 = *(_DWORD *)(v2[86] + 4 * a2); if ( v3 ) { if ( *(_DWORD *)(v3 + 356) ) (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 356) + 256))(*(_DWORD *)(v3 + 356), 0); } *((_BYTE *)v2 + 376) = 1; v2[95] = a2; } } //----- (005007F0) -------------------------------------------------------- char __thiscall sub_5007F0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // ecx int v17; // ST58_4 int v18; // eax volatile LONG *v19; // eax unsigned int v20; // eax void (__thiscall ***v21)(_DWORD, signed int); // esi int v22; // [esp+2Ch] [ebp-18h] int v23; // [esp+30h] [ebp-14h] int v24; // [esp+34h] [ebp-10h] int v25; // [esp+40h] [ebp-4h] volatile LONG **v26; // [esp+4Ch] [ebp+8h] int v27; // [esp+4Ch] [ebp+8h] v2 = (int)this; v22 = 0; v3 = dword_BA6BA0; v25 = 0; v23 = 0; v24 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_GetPopup.nif"); sub_8F66B0(v4, (int)&v22, v3); if ( !v22 ) return 0; v5 = sub_8FB140(v22, (int)"Panel01", (int)&v23, (int)&v24, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"CollectCardChoiceWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v22; v25 = -1; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v23; v9 = v24; v26 = sub_8FB140(v22, (int)"ClsNor", (int)&v23, (int)&v24, 0); sub_8FB650(v26, v22, (int)"ClsClick"); sub_8FB650(v26, v22, (int)"ClsOver"); sub_8FE0F0(v23, v24, (int)v26, v2, 0, 0, 0); v10 = sub_8FB140(v22, (int)"BtnMiddle", (int)&v23, (int)&v24, 0); v11 = sub_8F3EB0(v23 - v8, v24 - v9, (int)v10, v2, 0, 0); *(_DWORD *)(v2 + 348) = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); *(_DWORD *)(v2 + 360) = (*(int (**)(void))(**(_DWORD **)(v2 + 348) + 164))(); v12 = sub_8FB140(v22, (int)"Left", (int)&v23, (int)&v24, 0); v13 = sub_8F3EB0(v23 - v8, v24 - v9, (int)v12, v2, 0, 0); *(_DWORD *)(v2 + 344) = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v22, (int)"BtnRight", (int)&v23, (int)&v24, 0); v15 = sub_8F3EB0(v23 - v8, v24 - v9, (int)v14, v2, 0, 0); *(_DWORD *)(v2 + 352) = v15; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v22, (int)"Text", (int)&v23, (int)&v24, 0)[9]; v27 = *(_DWORD *)(*v16 + 24); v17 = *(_DWORD *)(*v16 + 20); v18 = sub_421050(0); v19 = sub_8F4A20(v23 - v8, v24 - v9, v17, v27, v18, v2, 0, 0); *(_DWORD *)(v2 + 356) = v19; (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); (*(void (__thiscall **)(int, int, int, unsigned int, _DWORD))(*(_DWORD *)v2 + 232))( v2, xRight, dword_AC2F78, ((unsigned int)xRight >> 1) - (v20 >> 1), 0.2); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v25 = -1; if ( v22 ) { v21 = (void (__thiscall ***)(_DWORD, signed int))v22; if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) { if ( v21 ) (**v21)(v21, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00500B20) -------------------------------------------------------- char __thiscall sub_500B20(int *this, int a2, int a3) { int *v3; // esi char result; // al int v5; // ST0C_4 int v6; // ST08_4 volatile LONG *v7; // eax v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_500620(this, a3); } else { result = a3; if ( this[86] != a3 ) { this[86] = a3; sub_500180(this); v5 = v3[89]; v6 = v3[88]; v7 = (volatile LONG *)sub_402BF0(v3); result = sub_8F2BC0(v7, 5, v6, v5); } } return result; } //----- (00500BD0) -------------------------------------------------------- int __cdecl sub_500BD0(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x154u); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_8FE000(v6); *(_DWORD *)v7 = &CollectRwItemWin::`vftable'; *(_DWORD *)(v7 + 232) = &CollectRwItemWin::`vftable'; *(_DWORD *)(v7 + 324) = 0; *(_DWORD *)(v7 + 328) = 0; *(_DWORD *)(v7 + 332) = 0; *(_DWORD *)(v7 + 336) = 0; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int))(*(_DWORD *)v7 + 560))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9C0FD8: using guessed type void *CollectRwItemWin::`vftable'; // 9C0FF4: using guessed type void *CollectRwItemWin::`vftable'; //----- (00500D40) -------------------------------------------------------- LONG __thiscall sub_500D40(void **this) { void **v1; // esi v1 = this; *this = &CollectPageWin::`vftable'; this[58] = &CollectPageWin::`vftable'; if ( this[80] ) operator delete(this[80]); v1[80] = 0; v1[81] = 0; v1[82] = 0; if ( v1[76] ) operator delete(v1[76]); v1[76] = 0; v1[77] = 0; v1[78] = 0; if ( v1[72] ) operator delete(v1[72]); v1[72] = 0; v1[73] = 0; v1[74] = 0; return sub_8F29C0(v1); } // 9C1964: using guessed type void *CollectPageWin::`vftable'; // 9C1984: using guessed type void *CollectPageWin::`vftable'; //----- (00500DD0) -------------------------------------------------------- int __cdecl sub_500DD0(int a1, int a2, int a3) { void *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1C4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D6D00((void **)v3); *(_DWORD *)v4 = &CollectRwChoiceInv::`vftable'; *(_DWORD *)(v4 + 232) = &CollectRwChoiceInv::`vftable'; *(_BYTE *)(v4 + 448) = 0; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9C122C: using guessed type void *CollectRwChoiceInv::`vftable'; // 9C124C: using guessed type void *CollectRwChoiceInv::`vftable'; //----- (00500F70) -------------------------------------------------------- char __thiscall sub_500F70(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // eax volatile LONG *v9; // ebx volatile LONG v10; // edi const CHAR *v11; // eax unsigned int v12; // edi int v13; // ebx char *v14; // eax int v15; // ebx int *v16; // eax int v17; // ebx int v18; // edi int v19; // eax int v20; // ST20_4 volatile LONG **v21; // edi volatile LONG *v22; // ST28_4 volatile LONG *v23; // edi int v24; // ST24_4 int v25; // ST20_4 int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx const CHAR *v29; // eax volatile LONG **v30; // edi volatile LONG *v31; // ST28_4 int v32; // ST24_4 int v33; // ST20_4 int v34; // eax volatile LONG *v35; // edi volatile LONG v36; // ebx const CHAR *v37; // eax void (__thiscall ***v38)(_DWORD, signed int); // esi int v39; // [esp+48h] [ebp-20h] int v40; // [esp+4Ch] [ebp-1Ch] int v41; // [esp+50h] [ebp-18h] int v42; // [esp+54h] [ebp-14h] int v43; // [esp+58h] [ebp-10h] int v44; // [esp+64h] [ebp-4h] int *v45; // [esp+70h] [ebp+8h] v2 = (int)this; v43 = 0; v3 = dword_BA6BA0; v44 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_RwChoice.nif"); sub_8F66B0(v4, (int)&v43, v3); if ( !v43 ) return 0; v5 = sub_8FB140(v43, (int)"Frame", (int)&v41, (int)&v42, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"CollectRwChoiceWin", 0) || !sub_8F71E0(v43, (int)"TextWin", &v41, &v42, &v39, &v40) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v43; v44 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_421050(0); v9 = sub_8F4A20(v41, v42, v39, v40, v8, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v9 + 488))(v9, 5); v10 = *v9; v11 = sub_40A910(205684799); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v10 + 472))(v9, v11); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v12 = 0; do { v13 = v43; v14 = sub_7549E0("Reward%02d", v12 + 1); sub_8FB140(v13, (int)v14, (int)&v41, (int)&v42, 0); v15 = 4 * v12; v45 = (int *)(4 * v12 + *(_DWORD *)(v2 + 348)); *v45 = sub_500DD0(v41, v42, v2); (*(void (__stdcall **)(signed int))(**(_DWORD **)(4 * v12 + *(_DWORD *)(v2 + 348)) + 516))(2); (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(4 * v12 + *(_DWORD *)(v2 + 348)) + 520))(v12); ++v12; *(_DWORD *)(*(_DWORD *)(v15 + *(_DWORD *)(v2 + 348)) + 272) = dword_ACEC34; } while ( v12 < 5 ); *(_DWORD *)(v2 + 376) = (*(int (**)(void))(***(_DWORD ***)(v2 + 348) + 164))(); v16 = *(int **)(v2 + 348); v17 = *v16; v18 = (*(int (**)(void))(*(_DWORD *)v16[1] + 164))() - *(_DWORD *)(v2 + 376); v19 = (*(int (__thiscall **)(int))(*(_DWORD *)v17 + 144))(v17); v20 = v43; *(_DWORD *)(v2 + 380) = v18 - v19; v21 = sub_8FB140(v20, (int)"OkBtnNor", (int)&v41, (int)&v42, 0); sub_8FB650(v21, v43, (int)"OkBtnClick"); sub_8FB650(v21, v43, (int)"OkBtnOver"); sub_8FB650(v21, v43, (int)"OkBtnDisable"); v22 = sub_8FE0F0(v41, v42, (int)v21, v2, 0, 0, 0); *(_DWORD *)(v2 + 344) = v22; v23 = v22; v24 = sub_421050(7); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 0, v26, v25, v24, (int)v22, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v28 = *v27; v29 = sub_40A910(-1159011804); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); v30 = sub_8FB140(v43, (int)"CancelBtnNor", (int)&v41, (int)&v42, 0); sub_8FB650(v30, v43, (int)"CancelBtnClick"); sub_8FB650(v30, v43, (int)"CancelBtnOver"); v31 = sub_8FE0F0(v41, v42, (int)v30, v2, 1, 0, 0); v32 = sub_421050(7); v33 = (*(int (__thiscall **)(volatile LONG *))(*v31 + 148))(v31); v34 = (*(int (__thiscall **)(volatile LONG *))(*v31 + 144))(v31); v35 = sub_8F4A20(0, 0, v34, v33, v32, (int)v31, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v36 = *v35; v37 = sub_40A910(-1494818857); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v44 = -1; if ( v43 ) { v38 = (void (__thiscall ***)(_DWORD, signed int))v43; if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) { if ( v38 ) (**v38)(v38, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (005013D0) -------------------------------------------------------- int __cdecl sub_5013D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(float *)(v2 + 364) = 0.0; *(_DWORD *)v2 = &CollectPopupWin::`vftable'; *(_DWORD *)(v2 + 232) = &CollectPopupWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C14B8: using guessed type void *CollectPopupWin::`vftable'; // 9C14D4: using guessed type void *CollectPopupWin::`vftable'; //----- (00501540) -------------------------------------------------------- _DWORD *__thiscall sub_501540(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_907A90(this); *v1 = &CardSlotWin::`vftable'; v1[58] = &CardSlotWin::`vftable'; v1[83] = 0; v1[84] = 0; v1[85] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; sub_4E6D30(v1 + 83, 4u); *(_DWORD *)v1[83] = 0; *(_DWORD *)(v1[83] + 4) = 0; *(_DWORD *)(v1[83] + 8) = 0; *(_DWORD *)(v1[83] + 12) = 0; return v1; } // 9C16F8: using guessed type void *CardSlotWin::`vftable'; // 9C1714: using guessed type void *CardSlotWin::`vftable'; //----- (00501610) -------------------------------------------------------- volatile LONG *__cdecl sub_501610(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x17Cu); v10 = v6; v11 = 0; if ( v6 ) v7 = sub_501540(v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 584))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (00501750) -------------------------------------------------------- char __thiscall sub_501750(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7) { unsigned int v7; // edi int v8; // esi char *v9; // eax volatile LONG **v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi _DWORD *v13; // eax char *v14; // eax int v15; // ebx char *v16; // eax volatile LONG **v17; // eax int v18; // ebx char *v19; // eax int v20; // ebx char *v21; // eax volatile LONG **v22; // eax int v23; // ST20_4 int v24; // ST1C_4 int v25; // eax int v26; // ST18_4 int v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax int v31; // eax int v32; // ST1C_4 _DWORD *v33; // eax volatile LONG *v34; // eax void (__thiscall ***v35)(_DWORD, signed int); // esi int v36; // [esp+18h] [ebp-A0h] int v37; // [esp+28h] [ebp-90h] char *i; // [esp+28h] [ebp-90h] int v39; // [esp+2Ch] [ebp-8Ch] int v40; // [esp+30h] [ebp-88h] int v41; // [esp+34h] [ebp-84h] char v42; // [esp+38h] [ebp-80h] int v43; // [esp+48h] [ebp-70h] int v44; // [esp+4Ch] [ebp-6Ch] char v45; // [esp+54h] [ebp-64h] int v46; // [esp+64h] [ebp-54h] int v47; // [esp+68h] [ebp-50h] char v48; // [esp+70h] [ebp-48h] int v49; // [esp+80h] [ebp-38h] int v50; // [esp+84h] [ebp-34h] char v51; // [esp+8Ch] [ebp-2Ch] int v52; // [esp+9Ch] [ebp-1Ch] int v53; // [esp+A0h] [ebp-18h] int v54; // [esp+B4h] [ebp-4h] v7 = 0; v8 = (int)this; v41 = 0; v54 = 0; v40 = 0; v39 = 0; v37 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v9 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_SCard.nif"); sub_8F66B0(v9, (int)&v41, v37); if ( !v41 ) return 0; v10 = sub_8FB140(v41, (int)"SmallImage", (int)&v40, (int)&v39, 0); if ( !sub_907C90((volatile LONG **)v8, a2, a3, (int)v10, a4, a6, a7) ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v41; v54 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v13 = sub_8F62B0(0, 0, 0, 255); if ( v13 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v8 + 452))(v8, v13); *(_DWORD *)(v8 + 376) = a5; v44 = 15; v43 = 0; v42 = 0; sub_4018E0(&v42, "S", 1u); LOBYTE(v54) = 1; v47 = 15; v46 = 0; v45 = 0; sub_4018E0(&v45, "A", 1u); LOBYTE(v54) = 2; v50 = 15; v49 = 0; v48 = 0; sub_4018E0(&v48, "B", 1u); LOBYTE(v54) = 3; v53 = 15; v52 = 0; v51 = 0; sub_4018E0(&v51, "C", 1u); v14 = &v42; LOBYTE(v54) = 4; for ( i = &v42; ; v14 = i ) { if ( *((_DWORD *)v14 + 5) >= 0x10u ) v14 = *(char **)v14; v15 = v41; v16 = sub_7549E0("%sCardBack", v14); v17 = sub_8FB140(v15, (int)v16, (int)&v40, (int)&v39, 0); v18 = *(_DWORD *)(v8 + 332); *(_DWORD *)(v18 + v7) = sub_8F3EB0(v40, v39, (int)v17, v8, 0, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + *(_DWORD *)(v8 + 332)) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + *(_DWORD *)(v8 + 332)) + 240))(0); v19 = i; if ( *((_DWORD *)i + 5) >= 0x10u ) v19 = *(char **)i; v20 = v41; v21 = sub_7549E0("%sCard", v19); v22 = sub_8FB140(v20, (int)v21, (int)&v40, (int)&v39, 0); v23 = *(_DWORD *)(*(_DWORD *)(v8 + 332) + v7); v24 = (int)v22; v25 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v23 + 168))(*(_DWORD *)(*(_DWORD *)(v8 + 332) + v7)); v26 = v39 - v25; v27 = (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 164))(v23); v28 = sub_8F3EB0(v40 - v27, v26, v24, v23, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); i += 28; v7 += 4; if ( v7 >= 0x10 ) break; } v29 = sub_8FB140(v41, (int)"Unidentified", (int)&v40, (int)&v39, 0); v30 = sub_8F3EB0(v40, v39, (int)v29, v8, 0, 0); *(_DWORD *)(v8 + 352) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); v31 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 148))(v8); v32 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v8 + 144))(v8, v31); v33 = sub_8F62B0(0, 0, 0, 255); v34 = sub_8F3D50((int)v33, 0, 0, v32, v8, 0, 0, v36); *(_DWORD *)(v8 + 356) = v34; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 276))(v34, 0.69999999); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 356) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 356) + 240))(0); *(_DWORD *)(v8 + 272) = dword_AD01E8; LOBYTE(v54) = 0; `eh vector destructor iterator'(&v42, 0x1Cu, 4, sub_636A10); v54 = -1; if ( v41 ) { v35 = (void (__thiscall ***)(_DWORD, signed int))v41; if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v35 ) (**v35)(v35, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00501B70) -------------------------------------------------------- _WORD *__thiscall sub_501B70(void **this, void *a2, int a3, unsigned int a4, void *a5) { void **v5; // ebx void *v6; // ecx _WORD *result; // eax _WORD *v8; // eax _WORD *v9; // esi char *v10; // eax char *v11; // eax _DWORD *v12; // eax int v13; // ecx CHAR *v14; // esi CHAR *v15; // esi CHAR *v16; // esi CHAR *v17; // eax char *v18; // eax bool v19; // cf char *v20; // ST08_4 int v21; // ST04_4 char *v22; // eax char *v23; // ST10_4 char *v24; // eax char *v25; // eax int v26; // ST14_4 char *v27; // eax char *v28; // eax _WORD *v29; // [esp+10h] [ebp-94h] void *v30; // [esp+18h] [ebp-8Ch] unsigned int v31; // [esp+1Ch] [ebp-88h] unsigned int v32; // [esp+20h] [ebp-84h] _WORD *v33; // [esp+20h] [ebp-84h] char v34[16]; // [esp+24h] [ebp-80h] int v35; // [esp+34h] [ebp-70h] int v36; // [esp+38h] [ebp-6Ch] char v37; // [esp+40h] [ebp-64h] int v38; // [esp+50h] [ebp-54h] int v39; // [esp+54h] [ebp-50h] char v40; // [esp+5Ch] [ebp-48h] int v41; // [esp+6Ch] [ebp-38h] int v42; // [esp+70h] [ebp-34h] char v43; // [esp+78h] [ebp-2Ch] int v44; // [esp+88h] [ebp-1Ch] int v45; // [esp+8Ch] [ebp-18h] int v46; // [esp+A0h] [ebp-4h] v5 = this; sub_4FFE70(this); v6 = v5[88]; v5[91] = (void *)a3; v5[90] = a2; v5[92] = (void *)a4; v5[93] = a5; if ( v6 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v6 + 256))(a5 == 0); v30 = v5[90]; result = *(_WORD **)(dword_ACD9EC + 56); if ( result ) v32 = *((_DWORD *)result + 10); else v32 = 0; v31 = 0; if ( v32 > 0 ) { while ( 1 ) { v8 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9EC + 4), v31); v9 = v8; v29 = v8; if ( v8 ) { if ( *v8 == (_WORD)v30 ) break; } result = (_WORD *)(v31 + 1); v31 = (unsigned int)result; if ( (unsigned int)result >= v32 ) return result; } if ( (signed int)a5 <= 0 ) { v26 = (int)(v8 + 17); v27 = (char *)sub_40A910(811233628); v28 = sub_7549E0(v27, v26); sub_8F2EA0(v5, v28); } else { result = sub_4B16E0((unsigned int)v5[90]); v33 = result; if ( !result ) return result; if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACAB50, "Collect\\Min\\%s.png"); v11 = sub_7549E0(v10, v9 + 1); v12 = sub_4FFE20((int)v11); if ( v12 ) (*((void (__thiscall **)(void **, _DWORD *))*v5 + 113))(v5, v12); v13 = *((_DWORD *)v5[83] + *(_DWORD *)(v33 + 17)); if ( v13 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v13 + 256))(1); v36 = 15; v35 = 0; v34[0] = 0; v14 = (CHAR *)sub_40A910(-12361620); sub_4018E0(v34, v14, strlen(v14)); v46 = 0; v15 = (CHAR *)sub_40A910(-12366228); v39 = 15; v38 = 0; v37 = 0; sub_4018E0(&v37, v15, strlen(v15)); LOBYTE(v46) = 1; v16 = (CHAR *)sub_40A910(-12365972); v42 = 15; v41 = 0; v40 = 0; sub_4018E0(&v40, v16, strlen(v16)); LOBYTE(v46) = 2; v17 = (CHAR *)sub_40A910(-12365716); v45 = 15; v44 = 0; v43 = 0; sub_4018E0(&v43, v17, strlen(v17)); v18 = &v34[28 * *(_DWORD *)(v33 + 17)]; v19 = *((_DWORD *)v18 + 5) < 0x10u; v46 = 3; if ( !v19 ) v18 = *(char **)v18; v20 = v18; v21 = *((unsigned __int8 *)v29 + 386); v22 = (char *)sub_40A910(1939918011); v23 = sub_7549E0(v22, v21, v20, (char)(a4 / 0xF4240 + 64), (a4 % 0xF4240 - a4 % 0x2710) / 0x2710, a4 % 0x2710); v24 = (char *)sub_40A910(523512172); v25 = sub_7549E0(v24, v29 + 17, v23, a3); sub_8F2EA0(v5, v25); v46 = -1; `eh vector destructor iterator'(v34, 0x1Cu, 4, sub_636A10); } result = (_WORD *)(*((int (__thiscall **)(void **, signed int))*v5 + 60))(v5, 1); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9EC: using guessed type int dword_ACD9EC; // 501B70: using guessed type char var_80[16]; //----- (00501F10) -------------------------------------------------------- const void **__thiscall sub_501F10(const void **this) { const void **v1; // esi const void *v2; // ecx char *v3; // edi unsigned int v4; // eax void *v5; // edi unsigned int v6; // eax unsigned int v7; // ecx char *v8; // ecx int v9; // eax unsigned int v11; // [esp+14h] [ebp-10h] v1 = this; sub_8F2740(this); *v1 = &CollectPageWin::`vftable'; v1[58] = &CollectPageWin::`vftable'; v1[72] = 0; v1[73] = 0; v1[74] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[80] = 0; v1[81] = 0; v1[82] = 0; v1[84] = 0; v1[85] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; sub_4E6D30(v1 + 72, 5u); sub_4E6D30(v1 + 76, 5u); *(_DWORD *)v1[72] = 0; *(_DWORD *)v1[76] = 0; *((_DWORD *)v1[72] + 1) = 0; *((_DWORD *)v1[76] + 1) = 0; *((_DWORD *)v1[72] + 2) = 0; *((_DWORD *)v1[76] + 2) = 0; *((_DWORD *)v1[72] + 3) = 0; *((_DWORD *)v1[76] + 3) = 0; *((_DWORD *)v1[72] + 4) = 0; *((_DWORD *)v1[76] + 4) = 0; v2 = v1[81]; v3 = (char *)v1[80]; v4 = ((_BYTE *)v1[81] - v3) >> 2; if ( v4 <= 4 ) { if ( v4 < 4 ) { v11 = ((_BYTE *)v1[81] - v3) >> 2; if ( 0x3FFFFFFF - (4 - v4) < v11 ) std::_Xlength_error("vector too long"); v6 = 4 - v4 + v11; v7 = ((_BYTE *)v1[82] - v3) >> 2; if ( v6 > v7 ) { if ( 0x3FFFFFFF - (v7 >> 1) >= v7 ) v8 = (char *)((v7 >> 1) + v7); else v8 = 0; if ( (unsigned int)v8 < v6 ) v8 = (char *)v6; sub_74E360(v1 + 80, v8); } v9 = ((_BYTE *)v1[81] - (_BYTE *)v1[80]) >> 2; if ( v9 != 4 ) memset((void *)v1[81], 0, 4 * (4 - v9)); v1[81] = (char *)v1[81] + 4 * (4 - (((_BYTE *)v1[81] - (_BYTE *)v1[80]) >> 2)); } } else { v5 = v3 + 16; if ( v5 != v2 ) { memcpy_0(v5, v2, 0); v1[81] = v5; } } *(_DWORD *)v1[80] = 0; *((_DWORD *)v1[80] + 1) = 0; *((_DWORD *)v1[80] + 2) = 0; *((_DWORD *)v1[80] + 3) = 0; return v1; } // 9C1964: using guessed type void *CollectPageWin::`vftable'; // 9C1984: using guessed type void *CollectPageWin::`vftable'; //----- (00502160) -------------------------------------------------------- volatile LONG *__cdecl sub_502160(int a1, int a2, int a3, int a4, int a5, int a6) { void *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x168u); v10 = v6; v11 = 0; if ( v6 ) v7 = (volatile LONG *)sub_501F10((const void **)v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 452))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (005022A0) -------------------------------------------------------- char __thiscall sub_5022A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7) { int v7; // ebx _DWORD *v8; // esi int v9; // eax char *v10; // ecx char *v11; // eax int v12; // edx unsigned int v14; // edi unsigned int v15; // ST44_4 char *v16; // eax volatile LONG **v17; // eax int v18; // ebx int v19; // edi int v20; // eax int v21; // edx int v22; // ebx int v23; // eax int *v24; // eax int v25; // ebx int v26; // edi int v27; // ebx char *v28; // edi char *v29; // eax char *v30; // eax volatile LONG **v31; // eax bool v32; // cf char *v33; // eax char *v34; // eax char *v35; // eax volatile LONG **v36; // edi void (__thiscall ***v37)(_DWORD, signed int); // esi int v38; // [esp+1Ch] [ebp-94h] int v39; // [esp+20h] [ebp-90h] int v40; // [esp+24h] [ebp-8Ch] char *i; // [esp+28h] [ebp-88h] volatile LONG **v42; // [esp+2Ch] [ebp-84h] char v43; // [esp+30h] [ebp-80h] int v44; // [esp+40h] [ebp-70h] int v45; // [esp+44h] [ebp-6Ch] char v46; // [esp+4Ch] [ebp-64h] int v47; // [esp+5Ch] [ebp-54h] int v48; // [esp+60h] [ebp-50h] char v49; // [esp+68h] [ebp-48h] int v50; // [esp+78h] [ebp-38h] int v51; // [esp+7Ch] [ebp-34h] char v52; // [esp+84h] [ebp-2Ch] int v53; // [esp+94h] [ebp-1Ch] int v54; // [esp+98h] [ebp-18h] int v55; // [esp+ACh] [ebp-4h] v7 = a2; v8 = this; v40 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v9 = 0; v55 = 0; if ( !a2 ) return 0; v10 = 0; v38 = 0; v39 = 0; if ( a7 ) { v11 = (char *)(*(int (__thiscall **)(_DWORD *))(*a7 + 164))(a7); v12 = *a7; i = v11; v9 = (*(int (__thiscall **)(_DWORD *))(v12 + 168))(a7); v10 = i; } if ( !sub_8F2900(v8, a3 - (_DWORD)v10, a4 - v9, a5, a6, a7, 0, 0) ) { v55 = -1; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); return 0; } v14 = 0; while ( 1 ) { v15 = v14 + 1; v16 = sub_7549E0("PageBtn%02d", v14 + 1); v17 = sub_8FB140(v7, (int)v16, (int)&v38, (int)&v39, 0); v18 = v8[76]; v42 = v17; v19 = 4 * v14; *(_DWORD *)(v18 + v19) = sub_8FE0F0(v38 - a3, v39 - a4, (int)v17, (int)v8, 0, 0, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19 + v8[76]) + 276))(0.0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19 + v8[76]) + 256))(0); v20 = *v42[9]; v21 = *(_DWORD *)(v20 + 20); v22 = v8[72]; i = *(char **)(v20 + 24); v42 = (volatile LONG **)v21; v23 = sub_421050(0); *(_DWORD *)(v22 + v19) = sub_8F4A20(v38 - a3, v39 - a4, (int)v42, (int)i, v23, (int)v8, 0, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v19 + v8[72]) + 488))(9); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v19 + v8[72]) + 240))(*(_DWORD *)(v19 + v8[72]), 0); v14 = v15; if ( v15 >= 5 ) break; v7 = v40; } v8[84] = (*(int (**)(void))(**(_DWORD **)v8[72] + 164))(); v24 = (int *)v8[72]; v25 = *v24; v26 = (*(int (**)(void))(*(_DWORD *)v24[1] + 164))() - v8[84]; v8[85] = v26 - (*(int (__thiscall **)(int))(*(_DWORD *)v25 + 144))(v25); v27 = 0; v45 = 15; v44 = 0; v43 = 0; sub_4018E0(&v43, "First", 5u); LOBYTE(v55) = 1; v48 = 15; v47 = 0; v46 = 0; sub_4018E0(&v46, "Front", 5u); LOBYTE(v55) = 2; v51 = 15; v50 = 0; v49 = 0; sub_4018E0(&v49, "Next", 4u); LOBYTE(v55) = 3; v54 = 15; v53 = 0; v52 = 0; sub_4018E0(&v52, "Last", 4u); v28 = &v43; LOBYTE(v55) = 4; for ( i = &v43; ; v28 = i ) { if ( *((_DWORD *)v28 + 5) < 0x10u ) v29 = v28; else v29 = *(char **)v28; v30 = sub_7549E0("%sPageNor", v29); v31 = sub_8FB140(v40, (int)v30, (int)&v38, (int)&v39, 0); v32 = *((_DWORD *)v28 + 5) < 0x10u; v42 = v31; if ( v32 ) v33 = v28; else v33 = *(char **)v28; v34 = sub_7549E0("%sPageClick", v33); sub_8FB650(v42, v40, (int)v34); if ( *((_DWORD *)v28 + 5) >= 0x10u ) v28 = *(char **)v28; v35 = sub_7549E0("%sPageOver", v28); sub_8FB650(v42, v40, (int)v35); v36 = (volatile LONG **)(4 * v27 + v8[80]); *v36 = sub_8FE0F0(v38 - a3, v39 - a4, (int)v42, (int)v8, 1, 0, 0); (*(void (__stdcall **)(int))(**(_DWORD **)(v8[80] + 4 * v27) + 520))(v27); i += 28; if ( (unsigned int)++v27 >= 4 ) break; } LOBYTE(v55) = 0; `eh vector destructor iterator'(&v43, 0x1Cu, 4, sub_636A10); v37 = (void (__thiscall ***)(_DWORD, signed int))v40; v55 = -1; if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) ) (**v37)(v37, 1); return 1; } //----- (005026E0) -------------------------------------------------------- _DWORD *__thiscall sub_5026E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CollectRwChoiceWin::`vftable'; v1[58] = &CollectRwChoiceWin::`vftable'; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; *((_BYTE *)v1 + 364) = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; sub_4E6D30(v1 + 87, 5u); *(_DWORD *)v1[87] = 0; *(_DWORD *)(v1[87] + 4) = 0; *(_DWORD *)(v1[87] + 8) = 0; *(_DWORD *)(v1[87] + 12) = 0; *(_DWORD *)(v1[87] + 16) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C1B50: using guessed type void *CollectRwChoiceWin::`vftable'; // 9C1B6C: using guessed type void *CollectRwChoiceWin::`vftable'; //----- (005027B0) -------------------------------------------------------- volatile LONG *__cdecl sub_5027B0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x180u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5026E0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005028E0) -------------------------------------------------------- char __thiscall sub_5028E0(void *this, int a2) { int v2; // esi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi bool v6; // zf volatile LONG **v8; // eax volatile LONG *v9; // eax char *v10; // ebx char *v11; // eax int v12; // edi char *v13; // eax volatile LONG **v14; // edi char *v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax volatile LONG *v19; // eax int v20; // ebx int v21; // edi unsigned int v22; // ST54_4 char *v23; // eax volatile LONG **v24; // eax int v25; // edi int v26; // ebx volatile LONG **v27; // eax int (__thiscall *v28)(int); // edx unsigned int v29; // ecx int v30; // eax int v31; // ebx volatile LONG **v32; // eax int (__thiscall *v33)(int); // edx unsigned int v34; // ecx int v35; // eax LONG v36; // eax int v37; // edi volatile LONG *v38; // eax volatile LONG **v39; // edi volatile LONG *v40; // ST38_4 int v41; // ST34_4 int v42; // ST30_4 int v43; // eax volatile LONG *v44; // edi volatile LONG v45; // ebx const CHAR *v46; // eax volatile LONG **v47; // edi volatile LONG *v48; // ST38_4 int v49; // ST34_4 int v50; // ST30_4 int v51; // eax volatile LONG *v52; // edi volatile LONG v53; // ebx const CHAR *v54; // eax void (__thiscall ***v55)(_DWORD, signed int); // esi int v56; // [esp+4Ch] [ebp-9Ch] int v57; // [esp+50h] [ebp-98h] int v58; // [esp+54h] [ebp-94h] volatile LONG **v59; // [esp+58h] [ebp-90h] int v60; // [esp+5Ch] [ebp-8Ch] int v61; // [esp+60h] [ebp-88h] int v62; // [esp+64h] [ebp-84h] char v63; // [esp+68h] [ebp-80h] int v64; // [esp+78h] [ebp-70h] int v65; // [esp+7Ch] [ebp-6Ch] char v66; // [esp+84h] [ebp-64h] int v67; // [esp+94h] [ebp-54h] int v68; // [esp+98h] [ebp-50h] char v69; // [esp+A0h] [ebp-48h] int v70; // [esp+B0h] [ebp-38h] int v71; // [esp+B4h] [ebp-34h] char v72; // [esp+BCh] [ebp-2Ch] int v73; // [esp+CCh] [ebp-1Ch] int v74; // [esp+D0h] [ebp-18h] int v75; // [esp+E4h] [ebp-4h] v2 = (int)this; v62 = 0; v75 = 0; v57 = 0; v56 = 0; v61 = 0; v60 = 0; v58 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_CardChoice.nif"); sub_8F66B0(v3, (int)&v62, v58); if ( !v62 ) return 0; v4 = sub_8FB140(v62, (int)"Frame", (int)&v61, (int)&v60, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"CollectCardChoiceWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v62; v75 = -1; if ( !v62 || InterlockedDecrement((volatile LONG *)(v62 + 4)) ) return 0; v6 = v5 == 0; goto LABEL_8; } v8 = sub_8FB140(v62, (int)"Panel01", (int)&v61, (int)&v60, 0); v9 = sub_8F3EB0(v61, v60, (int)v8, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v65 = 15; v64 = 0; v63 = 0; sub_4018E0(&v63, "S", 1u); LOBYTE(v75) = 1; v68 = 15; v67 = 0; v66 = 0; sub_4018E0(&v66, "A", 1u); LOBYTE(v75) = 2; v71 = 15; v70 = 0; v69 = 0; sub_4018E0(&v69, "B", 1u); LOBYTE(v75) = 3; v74 = 15; v73 = 0; v72 = 0; sub_4018E0(&v72, "C", 1u); LOBYTE(v75) = 4; v58 = 0; v10 = &v63; do { if ( *((_DWORD *)v10 + 5) < 0x10u ) v11 = v10; else v11 = *(char **)v10; v12 = v62; v13 = sub_7549E0("%sRankNor", v11); v14 = sub_8FB140(v12, (int)v13, (int)&v61, (int)&v60, 0); if ( *((_DWORD *)v10 + 5) < 0x10u ) v15 = v10; else v15 = *(char **)v10; v59 = (volatile LONG **)v62; v16 = sub_7549E0("%sRankClick", v15); sub_8FB650(v14, (int)v59, (int)v16); if ( *((_DWORD *)v10 + 5) < 0x10u ) v17 = v10; else v17 = *(char **)v10; v59 = (volatile LONG **)v62; v18 = sub_7549E0("%sRankOver", v17); sub_8FB650(v14, (int)v59, (int)v18); v19 = sub_8FE0F0(v61, v60, (int)v14, v2, 2, 0, 0); (*(void (__thiscall **)(volatile LONG *, int))(*v19 + 520))(v19, v58); v10 += 28; ++v58; } while ( (unsigned int)v58 < 4 ); v20 = 0; do { v21 = v62; v22 = v20 + 1; v23 = sub_7549E0("SelectCard%02d", v20 + 1); v24 = sub_8FB140(v21, (int)v23, (int)&v61, (int)&v60, 0); v58 = (int)sub_8F3EB0(v61, v60, (int)v24, v2, 0, 0); v25 = 4 * v20; v59 = (volatile LONG **)(4 * v20 + *(_DWORD *)(v2 + 344)); *v59 = sub_501610(v61, v60, v2, v20, 3, 3); (*(void (__stdcall **)(int))(**(_DWORD **)(4 * v20 + *(_DWORD *)(v2 + 344)) + 520))(v20); (*(void (__stdcall **)(int))(**(_DWORD **)(4 * v20 + *(_DWORD *)(v2 + 344)) + 564))(v20); v26 = *(_DWORD *)(4 * v20 + *(_DWORD *)(v2 + 344)); v27 = (volatile LONG **)(*(int (**)(void))(*(_DWORD *)v58 + 144))(); v28 = *(int (__thiscall **)(int))(*(_DWORD *)v26 + 144); v59 = v27; v29 = (unsigned int)v27 - v28(v26); v30 = *(_DWORD *)(v2 + 344); v61 += v29 >> 1; v31 = *(_DWORD *)(v25 + v30); v32 = (volatile LONG **)(*(int (**)(void))(*(_DWORD *)v58 + 148))(); v33 = *(int (__thiscall **)(int))(*(_DWORD *)v31 + 148); v59 = v32; v34 = (unsigned int)v32 - v33(v31); v35 = *(_DWORD *)(v2 + 344); v60 += v34 >> 1; (*(void (__stdcall **)(int))(**(_DWORD **)(v25 + v35) + 172))(v61); (*(void (__thiscall **)(_DWORD, int))(**(_DWORD **)(v25 + *(_DWORD *)(v2 + 344)) + 176))( *(_DWORD *)(v25 + *(_DWORD *)(v2 + 344)), v60); v20 = v22; } while ( v22 < 4 ); if ( !sub_8F71E0(v62, (int)"FirstPageNor", &v61, &v60, &v57, &v56) ) { LOBYTE(v75) = 0; `eh vector destructor iterator'(&v63, 0x1Cu, 4, sub_636A10); v5 = (void (__thiscall ***)(_DWORD, signed int))v62; v75 = -1; if ( !v62 ) return 0; v36 = InterlockedDecrement((volatile LONG *)(v62 + 4)); LABEL_27: if ( !v36 ) { v6 = v5 == 0; LABEL_8: if ( !v6 ) (**v5)(v5, 1); } return 0; } v37 = v61; if ( !sub_8F71E0(v62, (int)"LastPageNor", &v61, &v60, &v57, &v56) ) { LOBYTE(v75) = 0; `eh vector destructor iterator'(&v63, 0x1Cu, 4, sub_636A10); v5 = (void (__thiscall ***)(_DWORD, signed int))v62; v75 = -1; if ( !v62 ) return 0; v36 = InterlockedDecrement((volatile LONG *)(v62 + 4)); goto LABEL_27; } v57 += v61 - v37; v38 = sub_502160(v62, v61, v60, v57, v56, v2); *(_DWORD *)(v2 + 388) = v38; *((_DWORD *)v38 + 88) = 4; v39 = sub_8FB140(v62, (int)"OkBtnNor", (int)&v61, (int)&v60, 0); sub_8FB650(v39, v62, (int)"OkBtnClick"); sub_8FB650(v39, v62, (int)"OkBtnOver"); v40 = sub_8FE0F0(v61, v60, (int)v39, v2, 0, 0, 0); v41 = sub_421050(7); v42 = (*(int (__thiscall **)(volatile LONG *))(*v40 + 148))(v40); v43 = (*(int (__thiscall **)(volatile LONG *))(*v40 + 144))(v40); v44 = sub_8F4A20(0, 0, v43, v42, v41, (int)v40, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v45 = *v44; v46 = sub_40A910(-1159011804); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v45 + 472))(v44, v46); v47 = sub_8FB140(v62, (int)"CancelBtnNor", (int)&v61, (int)&v60, 0); sub_8FB650(v47, v62, (int)"CancelBtnClick"); sub_8FB650(v47, v62, (int)"CancelBtnOver"); v48 = sub_8FE0F0(v61, v60, (int)v47, v2, 1, 0, 0); v49 = sub_421050(7); v50 = (*(int (__thiscall **)(volatile LONG *))(*v48 + 148))(v48); v51 = (*(int (__thiscall **)(volatile LONG *))(*v48 + 144))(v48); v52 = sub_8F4A20(0, 0, v51, v50, v49, (int)v48, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v52 + 488))(v52, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 240))(v52, 0); v53 = *v52; v54 = sub_40A910(-1494818857); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v53 + 472))(v52, v54); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v75) = 0; `eh vector destructor iterator'(&v63, 0x1Cu, 4, sub_636A10); v75 = -1; if ( v62 ) { v55 = (void (__thiscall ***)(_DWORD, signed int))v62; if ( !InterlockedDecrement((volatile LONG *)(v62 + 4)) ) { if ( v55 ) (**v55)(v55, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00503080) -------------------------------------------------------- unsigned int __thiscall sub_503080(_DWORD *this, int a2) { _DWORD *v2; // ebx unsigned int result; // eax unsigned int v4; // ecx int v5; // esi unsigned int v6; // eax int v7; // edi void (__thiscall *v8)(int, signed int); // eax signed int v9; // [esp-Ch] [ebp-1Ch] int v10; // [esp+4h] [ebp-Ch] int v11; // [esp+8h] [ebp-8h] unsigned int v12; // [esp+Ch] [ebp-4h] v2 = this; sub_5004B0((int)this); result = v2[97]; if ( result ) { v10 = *(_DWORD *)(result + 344); v4 = (v2[91] - v2[90]) / 20; result = 0; v11 = (v2[91] - v2[90]) / 20; v12 = 0; while ( 1 ) { v5 = *(_DWORD *)(v2[86] + 4 * result); if ( !v5 ) goto LABEL_12; v6 = result + 4 * v10; if ( v6 >= v4 ) { v9 = 0; } else { v7 = sub_500510(v2, a2, v6); v8 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 256); if ( !v7 ) { v8(v5, 0); goto LABEL_12; } v8(v5, 1); sub_501B70((void **)v5, *(void **)(v7 + 4), *(_DWORD *)(v7 + 8), *(_DWORD *)(v7 + 12), *(void **)(v7 + 16)); if ( !*(_DWORD *)(v5 + 356) ) goto LABEL_12; v5 = *(_DWORD *)(v5 + 356); v9 = 1; } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 256))(v5, v9); LABEL_12: result = v12 + 1; v12 = result; if ( result >= 4 ) return result; v4 = v11; } } return result; } //----- (00503160) -------------------------------------------------------- unsigned int __thiscall sub_503160(int this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // ebx int i; // eax unsigned int v6; // eax v2 = (_DWORD *)this; if ( *(_DWORD *)(this + 388) ) { v3 = *(_DWORD **)(this + 360); v4 = 0; for ( i = (*(_DWORD *)(this + 364) - (signed int)v3) / 20; i; --i ) { if ( *v3 == a2 ) ++v4; v3 += 5; } *(_DWORD *)(*(_DWORD *)(this + 388) + 344) = 0; if ( v4 ) v6 = (unsigned int)(v4 - 1) >> 2; else v6 = 0; *(_DWORD *)(*(_DWORD *)(this + 388) + 348) = v6; *(_DWORD *)(*(_DWORD *)(this + 388) + 356) = a2; sub_500180(*(int **)(this + 388)); } return sub_503080(v2, a2); } //----- (00503200) -------------------------------------------------------- unsigned int __thiscall sub_503200(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx unsigned int v4; // edi unsigned int result; // eax int v6; // eax unsigned int v7; // esi _WORD *v8; // eax _WORD *v9; // ebx unsigned __int16 *v10; // eax _DWORD *v11; // eax int v12; // edi unsigned int v13; // esi char *v14; // eax unsigned int v15; // [esp+8h] [ebp-20h] unsigned int v16; // [esp+Ch] [ebp-1Ch] int v17; // [esp+10h] [ebp-18h] int v18; // [esp+14h] [ebp-14h] int v19; // [esp+18h] [ebp-10h] _DWORD *v20; // [esp+1Ch] [ebp-Ch] int v21; // [esp+20h] [ebp-8h] unsigned int v22; // [esp+24h] [ebp-4h] v1 = this; v20 = this; sub_500450(this); v18 = v1[95] + (*(int (**)(void))(**(_DWORD **)v1[87] + 144))(); v2 = sub_503810(v1[92]); v3 = v2; v4 = 0; result = 5 - v2; v15 = v3; v16 = result; v22 = 0; if ( v3 ) { v19 = 0; while ( 1 ) { v6 = *(_DWORD *)(dword_ACD9F4 + 56); v17 = v1[92]; v21 = 0; if ( v6 ) v7 = *(_DWORD *)(v6 + 40); else v7 = 0; if ( v7 > 0 ) { do { v8 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9F4 + 4), v4); v9 = v8; if ( v8 && *v8 == (_WORD)v17 ) { if ( v21 == v22 ) { v10 = (unsigned __int16 *)sub_40C8D0(v8 + 4); if ( v10 ) { v11 = sub_6899D0(*v10); if ( v11 ) { v12 = *(_DWORD *)(v20[87] + 4 * v22); if ( v12 ) { v13 = v19 + v20[94] + (v18 * v16 >> 1); sub_5D5B70((_WORD *)v12, (int)v11, 1); v14 = sub_7549E0("%d", (unsigned __int16)v9[36]); (*(void (__stdcall **)(char *))(**(_DWORD **)(v12 + 380) + 472))(v14); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v12 + 380) + 256))(1); (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v12 + 172))(v12, v13); sub_5D3170(v12, 1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v12 + 256))(v12, 1); } } } break; } ++v21; } ++v4; } while ( v4 < v7 ); } v19 += v18; result = v22 + 1; v22 = result; if ( result >= v15 ) break; v1 = v20; v4 = 0; } } return result; } // ACD9F4: using guessed type int dword_ACD9F4; //----- (005033A0) -------------------------------------------------------- _DWORD *__thiscall sub_5033A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CollectCardChoiceWin::`vftable'; v1[58] = &CollectCardChoiceWin::`vftable'; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; *((_BYTE *)v1 + 376) = 0; v1[95] = 0; v1[96] = 0; sub_4E6D30(v1 + 86, 4u); *(_DWORD *)v1[86] = 0; *(_DWORD *)(v1[86] + 4) = 0; *(_DWORD *)(v1[86] + 8) = 0; *(_DWORD *)(v1[86] + 12) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C1D90: using guessed type void *CollectCardChoiceWin::`vftable'; // 9C1DAC: using guessed type void *CollectCardChoiceWin::`vftable'; //----- (00503470) -------------------------------------------------------- LONG __thiscall sub_503470(void **this) { void **v1; // esi v1 = this; *this = &CollectCardChoiceWin::`vftable'; this[58] = &CollectCardChoiceWin::`vftable'; if ( this[90] ) operator delete(this[90]); v1[90] = 0; v1[91] = 0; v1[92] = 0; if ( v1[86] ) operator delete(v1[86]); v1[86] = 0; v1[87] = 0; v1[88] = 0; return sub_8F10F0(v1); } // 9C1D90: using guessed type void *CollectCardChoiceWin::`vftable'; // 9C1DAC: using guessed type void *CollectCardChoiceWin::`vftable'; //----- (005034E0) -------------------------------------------------------- volatile LONG *__cdecl sub_5034E0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5033A0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00503610) -------------------------------------------------------- unsigned int __thiscall sub_503610(void *this) { return sub_503160((int)this, 0); } //----- (00503620) -------------------------------------------------------- void __thiscall sub_503620(int this, int a2, unsigned int a3) { switch ( a2 ) { case 0: sub_500710((volatile LONG *)this); break; case 1: *(_BYTE *)(this + 376) = 0; sub_8F86A0(&unk_BA6B10, (_DWORD *)this); break; case 2: sub_503160(this, a3); break; case 3: sub_500790((_DWORD *)this, a3); break; case 4: sub_503080((_DWORD *)this, a3); break; default: return; } } //----- (00503690) -------------------------------------------------------- _DWORD *__thiscall sub_503690(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax _DWORD *v3; // ecx v1 = this; result = (_DWORD *)this[91]; v3 = (_DWORD *)this[90]; if ( v3 != result ) { result = sub_503860(result, result, v3); v1[91] = result; } return result; } //----- (005036C0) -------------------------------------------------------- unsigned int __thiscall sub_5036C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ecx v3 = this; v4 = this[86]; v3[92] = a2; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 240))(a3); return sub_503200(v3); } //----- (00503700) -------------------------------------------------------- _DWORD *__thiscall sub_503700(unsigned int *this, int a2, int a3, int a4, int a5, int a6) { int v7; // [esp+0h] [ebp-18h] int v8; // [esp+4h] [ebp-14h] int v9; // [esp+8h] [ebp-10h] int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] v8 = a3; v7 = a2; v10 = a5; v9 = a4; v11 = a6; return sub_509840(this + 90, &v7); } //----- (00503750) -------------------------------------------------------- void *__thiscall sub_503750(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CollectRwItemWin::`vftable'; *((_DWORD *)this + 58) = &CollectRwItemWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C0FD8: using guessed type void *CollectRwItemWin::`vftable'; // 9C0FF4: using guessed type void *CollectRwItemWin::`vftable'; //----- (00503790) -------------------------------------------------------- void *__thiscall sub_503790(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CollectRwChoiceInv::`vftable'; *((_DWORD *)this + 58) = &CollectRwChoiceInv::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C122C: using guessed type void *CollectRwChoiceInv::`vftable'; // 9C124C: using guessed type void *CollectRwChoiceInv::`vftable'; //----- (005037D0) -------------------------------------------------------- void *__thiscall sub_5037D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CollectPopupWin::`vftable'; *((_DWORD *)this + 58) = &CollectPopupWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C14B8: using guessed type void *CollectPopupWin::`vftable'; // 9C14D4: using guessed type void *CollectPopupWin::`vftable'; //----- (00503810) -------------------------------------------------------- int __cdecl sub_503810(int a1) { int v1; // eax int v2; // ebx unsigned int v3; // edi unsigned int v4; // esi unsigned __int16 *v5; // eax v1 = *(_DWORD *)(dword_ACD9F4 + 56); v2 = 0; if ( v1 ) v3 = *(_DWORD *)(v1 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { v5 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD9F4 + 4), v4); if ( v5 && *v5 == a1 ) ++v2; ++v4; } while ( v4 < v3 ); } return v2; } // ACD9F4: using guessed type int dword_ACD9F4; //----- (00503860) -------------------------------------------------------- _DWORD *__cdecl sub_503860(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 5 ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; result[4] = v3[4]; v3 += 5; } return result; } //----- (005038A0) -------------------------------------------------------- _DWORD *__cdecl sub_5038A0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 5 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; result[4] = v3[4]; } v3 += 5; } return result; } //----- (005038E0) -------------------------------------------------------- _DWORD *__thiscall sub_5038E0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &CardSlotWin::`vftable'; *((_DWORD *)this + 58) = &CardSlotWin::`vftable'; if ( *((_DWORD *)this + 83) ) operator delete(*((void **)this + 83)); v2[83] = 0; v2[84] = 0; v2[85] = 0; sub_907B00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C16F8: using guessed type void *CardSlotWin::`vftable'; // 9C1714: using guessed type void *CardSlotWin::`vftable'; //----- (00503950) -------------------------------------------------------- void *__thiscall sub_503950(void *this, char a2) { void *v2; // esi v2 = this; sub_500D40((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00503980) -------------------------------------------------------- _DWORD *__thiscall sub_503980(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &CollectRwChoiceWin::`vftable'; *((_DWORD *)this + 58) = &CollectRwChoiceWin::`vftable'; if ( *((_DWORD *)this + 87) ) operator delete(*((void **)this + 87)); v2[87] = 0; v2[88] = 0; v2[89] = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C1B50: using guessed type void *CollectRwChoiceWin::`vftable'; // 9C1B6C: using guessed type void *CollectRwChoiceWin::`vftable'; //----- (005039F0) -------------------------------------------------------- void *__thiscall sub_5039F0(void *this, char a2) { void *v2; // esi v2 = this; sub_503470((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00503A20) -------------------------------------------------------- bool __cdecl sub_503A20(_DWORD *a1, _DWORD *a2) { return *a1 > *a2; } //----- (00503A40) -------------------------------------------------------- void __thiscall sub_503A40(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[91] != 1 ) { v3 = this[76]; if ( v3 ) { v2[90] = a2; (*(void (__stdcall **)(LONG, LONG))(*(_DWORD *)v3 + 308))(pt.x, pt.y); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[76] + 240))(1); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v2[76]); } } } //----- (00503B00) -------------------------------------------------------- int __thiscall sub_503B00(int **this, int a2, int a3, int a4, int a5) { int result; // eax if ( this[75] ) { this[75][86] = a2; this[75][87] = a3; this[75][88] = a4; this[75][89] = a5; result = sub_500180(this[75]); } return result; } //----- (00503BB0) -------------------------------------------------------- char sub_503BB0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "Collect_Main"); return (char)v0; } //----- (00503C30) -------------------------------------------------------- void __userpurge sub_503C30(int a1@, double a2@, int a3) { _DWORD *v3; // eax int v4; // esi unsigned int v5; // edi unsigned int v6; // ebx _DWORD *v7; // eax v3 = *(_DWORD **)(*(_DWORD *)(a1 + 344) + 4 * a3); v4 = 0; v5 = 0; v6 = 0; if ( v3 ) { v4 = v3[90]; v5 = v3[91]; v6 = v3[92]; } v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_4AA750(v7, a2, 1, v4, v5, v6, 0); } //----- (00503D10) -------------------------------------------------------- _WORD *__thiscall sub_503D10(_DWORD *this, int a2, void *a3, int a4, unsigned int a5, void *a6) { _DWORD *v6; // edi _WORD *result; // eax void **v8; // esi int v9; // ecx int v10; // eax v6 = this; result = (_WORD *)this[86]; v8 = *(void ***)&result[2 * a2]; if ( v8 ) { (*((void (__thiscall **)(void **, bool))*v8 + 64))(v8, a3 != 0); result = sub_501B70(v8, a3, a4, a5, a6); } v9 = *(_DWORD *)(v6[82] + 4 * a2); if ( v9 ) { v10 = 0; if ( !v6[91] ) LOBYTE(v10) = a3 == 0; result = (_WORD *)(*(int (__stdcall **)(int))(*(_DWORD *)v9 + 256))(v10); } return result; } //----- (00503D90) -------------------------------------------------------- int __thiscall sub_503D90(_DWORD **this) { _DWORD **v1; // edi unsigned int v2; // esi int result; // eax int v4; // ecx v1 = this; if ( this[74] ) (*(void (__stdcall **)(_DWORD))(*this[74] + 256))(0); v2 = 0; do { result = (int)v1[78]; v4 = *(_DWORD *)(v2 + result); if ( v4 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 256))(0); v2 += 4; } while ( v2 < 0x10 ); return result; } //----- (00503E40) -------------------------------------------------------- unsigned int __thiscall sub_503E40(_DWORD *this, unsigned int a2, int a3) { unsigned int result; // eax result = (this[90] - this[89]) & 0xFFFFFFFC; if ( result == 240 ) { result = a2; *(_DWORD *)(this[89] + 4 * a2) = a3; } return result; } //----- (00503E70) -------------------------------------------------------- char __thiscall sub_503E70(_DWORD *this, int a2, char a3) { __int64 v3; // rax int v4; // esi _DWORD *v5; // ecx v3 = (unsigned int)((this[94] - this[93]) >> 4); if ( (_DWORD)v3 ) { v4 = this[93]; v5 = (_DWORD *)(v4 + 4); while ( *v5 != a2 ) { ++HIDWORD(v3); v5 += 4; if ( HIDWORD(v3) >= (unsigned int)v3 ) return v3; } LOBYTE(v3) = a3; *(_BYTE *)(v4 + 16 * HIDWORD(v3) + 12) = a3; } return v3; } //----- (00503EC0) -------------------------------------------------------- unsigned int __thiscall sub_503EC0(_DWORD *this, int a2, int a3, int a4, int a5) { unsigned int result; // eax _DWORD *v6; // edx result = 0; if ( (this[98] - this[97]) / 20 ) { v6 = (_DWORD *)(this[97] + 4); while ( *v6 != a2 ) { ++result; v6 += 5; if ( result >= (this[98] - this[97]) / 20 ) return result; } result *= 20; *(_DWORD *)(result + this[97] + 8) = a3; *(_DWORD *)(result + this[97] + 12) = a4; *(_DWORD *)(result + this[97] + 16) = a5; } return result; } //----- (00503FF0) -------------------------------------------------------- int __thiscall sub_503FF0(_DWORD *this, int a2) { int v2; // esi int v3; // eax _DWORD *v4; // ecx v2 = 0; v3 = (this[98] - this[97]) / 20; if ( v3 ) { v4 = (_DWORD *)this[97]; do { if ( *v4 == a2 && v4[4] > 0 ) ++v2; v4 += 5; --v3; } while ( v3 ); } return v2; } //----- (00504070) -------------------------------------------------------- char __thiscall sub_504070(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ebx int v4; // edi _DWORD *v5; // ecx _DWORD *v6; // esi int v8; // [esp+8h] [ebp-4h] v1 = this; v2 = sub_402BF0(this); v3 = v2; if ( v2 ) { v4 = 0; LOBYTE(v8) = 0; if ( v1[90] ) { v5 = (_DWORD *)v1[90]; v4 = v5[84]; LOBYTE(v2) = sub_4FFB70(v5) == 1; LOBYTE(v8) = v2; } v6 = *(_DWORD **)(v3 + 412); if ( v6 ) { sub_5036C0(v6, v4, v8); sub_8F82A0(&unk_BA6B10, v6); LOBYTE(v2) = sub_8F81A0(&unk_BA6B10, v6); } } return v2; } //----- (005040E0) -------------------------------------------------------- char __thiscall sub_5040E0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax unsigned int v4; // ecx int v5; // eax int v6; // eax int v7; // ST0C_4 volatile LONG *v8; // eax v2 = this; if ( a2 ) { if ( a2 == 1 ) { v3 = this[93]; v4 = this[94]; if ( v3 < v4 ) v4 = v3 + 1; v2[93] = v4; } } else { v5 = this[93]; if ( v5 ) v6 = v5 - 1; else v6 = 0; this[93] = v6; } v7 = v2[92]; v8 = (volatile LONG *)sub_402BF0(v2); return sub_8F2BC0(v8, 5, 2, v7); } //----- (00504170) -------------------------------------------------------- void __thiscall sub_504170(float *this, int a2, unsigned int a3, unsigned int a4, unsigned int a5, char a6) { float *v6; // esi _DWORD **v7; // ecx const char *v8; // eax char *v9; // eax v6 = this; v7 = (_DWORD **)*((_DWORD *)this + 90); if ( v7 ) { if ( a2 ) { if ( a6 ) { sub_500080(v7, (_DWORD *)2); v8 = sub_40A910(339313753); } else { sub_500080(v7, (_DWORD *)(a5 >= a3)); if ( a5 >= a3 ) { v8 = sub_40A910(-2136305480); } else { v9 = (char *)sub_40A910(531400788); v8 = sub_7549E0(v9, a5, a3); } } sub_8F2EA0(*((void ***)v6 + 90), v8); (*(void (__stdcall **)(signed int))(**((_DWORD **)v6 + 90) + 256))(1); *(_DWORD *)(*((_DWORD *)v6 + 90) + 336) = a2; v6[95] = (double)a3; v6[96] = (double)a4; } else { ((void (__stdcall *)(_DWORD))(*v7)[64])(0); } } } //----- (005042A0) -------------------------------------------------------- char __thiscall sub_5042A0(void *this, int a2, char *a3, int a4) { int v4; // esi int v5; // edi volatile LONG **v6; // eax int v8; // ebx volatile LONG **v9; // eax volatile LONG **v10; // eax unsigned int v11; // ST58_4 char *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // ST5C_4 volatile LONG **v15; // eax volatile LONG *v16; // eax int v17; // eax int v18; // ST58_4 int v19; // ST5C_4 int v20; // eax volatile LONG *v21; // eax _DWORD *v22; // ST58_4 void (__thiscall **v23)(_DWORD *, const CHAR *); // ST5C_4 const CHAR *v24; // eax int v25; // eax int v26; // ST58_4 int v27; // ST5C_4 int v28; // eax volatile LONG *v29; // eax int v30; // eax int v31; // ecx int v32; // edx volatile LONG **v33; // eax int v34; // ST58_4 volatile LONG **v35; // ST5C_4 int v36; // eax void (__thiscall **v37)(int, const CHAR *); // ST58_4 const CHAR *v38; // eax int v39; // eax int v40; // ecx int v41; // edx int v42; // eax int v43; // ST58_4 volatile LONG **v44; // ST5C_4 int v45; // eax int v46; // eax char *v47; // eax int v48; // eax volatile LONG **v49; // ST58_4 int v50; // ecx const char *v51; // eax int v52; // eax volatile LONG *v53; // eax const CHAR *v54; // eax void **v55; // ebx const CHAR *v56; // eax void **v57; // ebx int v58; // [esp+14h] [ebp-28h] int v59; // [esp+18h] [ebp-24h] unsigned int v60; // [esp+18h] [ebp-24h] int v61; // [esp+1Ch] [ebp-20h] volatile LONG **v62; // [esp+20h] [ebp-1Ch] int v63; // [esp+24h] [ebp-18h] int v64; // [esp+28h] [ebp-14h] char *v65; // [esp+2Ch] [ebp-10h] int v66; // [esp+38h] [ebp-4h] v4 = (int)this; v5 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v66 = 0; if ( !v5 ) return 0; v63 = 0; v61 = 0; a2 = 0; v65 = 0; v6 = sub_8FB140(v5, (int)"Panel04", (int)&a2, (int)&v65, 0); if ( !sub_8F43D0((volatile LONG **)v4, a2, (int)v65, (int)v6, a3, 0, 0) ) goto LABEL_5; v8 = a2; a3 = v65; v9 = sub_8FB140(v5, (int)"Panel05", (int)&a2, (int)&v65, 0); sub_8F3EB0(a2 - v8, v65 - a3, (int)v9, v4, 0, 0); v10 = sub_8FB140(v5, (int)"Panel06", (int)&a2, (int)&v65, 0); sub_8F3EB0(a2 - v8, v65 - a3, (int)v10, v4, 0, 0); v64 = 0; do { v11 = v64 + 1; v12 = sub_7549E0("Card%02d", v64 + 1); v13 = sub_8FB140(v5, (int)v12, (int)&a2, (int)&v65, 0); sub_8F3EB0(a2 - v8, v65 - a3, (int)v13, v4, 0, 0); v14 = (volatile LONG **)(4 * v64 + *(_DWORD *)(v4 + 344)); v62 = (volatile LONG **)(4 * v64); *v14 = sub_501610(a2 - v8, v65 - a3, v4, v64, 2, 5); (*(void (__stdcall **)(int))(**(volatile LONG **)((char *)v62 + *(_DWORD *)(v4 + 344)) + 520))(v64); (*(void (__stdcall **)(int))(**(volatile LONG **)((char *)v62 + *(_DWORD *)(v4 + 344)) + 564))(v64); (*(void (__stdcall **)(_DWORD))(**(volatile LONG **)((char *)v62 + *(_DWORD *)(v4 + 344)) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(volatile LONG **)((char *)v62 + *(_DWORD *)(v4 + 344)) + 256))(0); v64 = v11; } while ( v11 < 0xC ); if ( !sub_8F71E0(v5, (int)"FirstPageNor", &a2, &v65, &v63, &v61) || (v58 = a2, v59 = (int)v65, !sub_8F71E0(v5, (int)"LastPageNor", &a2, &v65, &v63, &v61)) ) { LABEL_5: v66 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return 0; } v63 += a2 - v58; *(_DWORD *)(v4 + 300) = sub_502160(v5, v58, v59, v63, v61, v4); v15 = sub_8FB140(v5, (int)"Panel08", (int)&a2, (int)&v65, 0); v16 = sub_8F3EB0(a2 - v8, v65 - a3, (int)v15, v4, 0, 0); *(_DWORD *)(v4 + 308) = v16; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 308) + 256))(0); v17 = *sub_8FB140(v5, (int)"Text05", (int)&a2, (int)&v65, 0)[9]; v18 = *(_DWORD *)(v17 + 24); v19 = *(_DWORD *)(v17 + 20); v62 = (volatile LONG **)(*(_DWORD *)(v4 + 312) + 4); v20 = sub_421050(0); v21 = sub_8F4A20(a2 - v8, v65 - a3, v19, v18, v20, v4, 0, 0); *v62 = v21; (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 4) + 488))(5); v22 = *(_DWORD **)(*(_DWORD *)(v4 + 312) + 4); v23 = (void (__thiscall **)(_DWORD *, const CHAR *))(*v22 + 472); v24 = sub_40A910(-63234007); (*v23)(v22, v24); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 4) + 256))(0); v25 = *sub_8FB140(v5, (int)"Text07", (int)&a2, (int)&v65, 0)[9]; v26 = *(_DWORD *)(v25 + 24); v27 = *(_DWORD *)(v25 + 20); v62 = (volatile LONG **)(*(_DWORD *)(v4 + 312) + 12); v28 = sub_421050(0); v29 = sub_8F4A20(a2 - v8, v65 - a3, v27, v26, v28, v4, 0, 0); *v62 = v29; (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 12) + 488))(4); (*(void (__stdcall **)(void *))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 12) + 472))(&unk_9C1FF6); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 12) + 256))(0); if ( !(_BYTE)a4 ) { v30 = *sub_8FB140(v5, (int)"Text04", (int)&a2, (int)&v65, 0)[9]; v31 = *(_DWORD *)(v30 + 24); v32 = *(_DWORD *)(v30 + 20); v33 = *(volatile LONG ***)(v4 + 312); a4 = v31; v34 = v32; v35 = v33; v36 = sub_421050(0); *v35 = sub_8F4A20(a2 - v8, v65 - a3, v34, a4, v36, v4, 0, 0); (*(void (__stdcall **)(signed int))(***(_DWORD ***)(v4 + 312) + 488))(5); a4 = **(_DWORD **)(v4 + 312); v37 = (void (__thiscall **)(int, const CHAR *))(*(_DWORD *)a4 + 472); v38 = sub_40A910(-1345844210); (*v37)(a4, v38); (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(v4 + 312) + 256))(0); v39 = *sub_8FB140(v5, (int)"Text06", (int)&a2, (int)&v65, 0)[9]; v40 = *(_DWORD *)(v39 + 24); v41 = *(_DWORD *)(v39 + 20); v42 = *(_DWORD *)(v4 + 312); a4 = v40; v43 = v41; v44 = (volatile LONG **)(v42 + 8); v45 = sub_421050(0); *v44 = sub_8F4A20(a2 - v8, v65 - a3, v43, a4, v45, v4, 0, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 8) + 488))(4); (*(void (__stdcall **)(void *))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 8) + 472))(&unk_9C1FF7); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v4 + 312) + 8) + 256))(0); v46 = sub_500BD0(v5, (int)"Reward02Able01", (int)"Reward02Disable01", (int)"Reward02Effect01", v4, 3); *(_DWORD *)(v4 + 296) = v46; *(_DWORD *)(v46 + 272) = dword_AD01E8; sub_8F2EA0(*(void ***)(v4 + 296), (const char *)&unk_9C1FFE); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 296) + 256))(0); v62 = sub_8FB140(v5, (int)"CardBtnNor", (int)&a2, (int)&v65, 0); sub_8FB650(v62, v5, (int)"CardBtnClick"); sub_8FB650(v62, v5, (int)"CardBtnOver"); a4 = 0; while ( 1 ) { v60 = a4 + 1; v47 = sub_7549E0("CardBtn%02d", a4 + 1); if ( !sub_8F71E0(v5, (int)v47, &a2, &v65, &v63, &v61) ) goto LABEL_5; v48 = *(_DWORD *)(v4 + 328); v64 = 4 * a4; v49 = (volatile LONG **)(4 * a4 + v48); *v49 = sub_8FE0F0(a2 - v8, v65 - a3, (int)v62, v4, 4, 0, 0); (*(void (__stdcall **)(int))(**(_DWORD **)(v64 + *(_DWORD *)(v4 + 328)) + 520))(a4); v50 = v64; *(_DWORD *)(*(_DWORD *)(v64 + *(_DWORD *)(v4 + 328)) + 272) = dword_AD01E8; a4 = v50 + *(_DWORD *)(v4 + 328); v51 = sub_40A910(-114090654); sub_8F2EA0(*(void ***)a4, v51); a4 = v60; if ( v60 >= 0xC ) { v52 = sub_43D0D0(1u); v53 = sub_58E5D0(v52, 4, 4, 0); *(_DWORD *)(v4 + 304) = v53; (**((void (__stdcall ***)(int))v53 + 58))(v4 + 232); sub_58DFD0(*(_DWORD **)(v4 + 304)); v54 = sub_40A910(-1800614461); v55 = (void **)sub_58E290(v54, 0, 0, 0, 0, 0, 0); sub_58D580(v55, (void *)0x4D, 0); sub_58E080(*(_DWORD **)(v4 + 304), v5, (int)v55); v56 = sub_40A910(-1597586216); v57 = (void **)sub_58E290(v56, 0, 0, 0, 0, 0, 0); sub_58D580(v57, (void *)0x4E, 0); sub_58E080(*(_DWORD **)(v4 + 304), v5, (int)v57); sub_58D930(*(_DWORD **)(v4 + 304), 0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 304) + 256))(*(_DWORD *)(v4 + 304), 0); break; } } } v66 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return 1; } // AD01E8: using guessed type int dword_AD01E8; //----- (00504AD0) -------------------------------------------------------- char __thiscall sub_504AD0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ebx int v4; // edi _DWORD *v5; // ecx _DWORD *v6; // esi int v8; // [esp+8h] [ebp-4h] v1 = this; v2 = sub_402BF0(this); v3 = v2; if ( v2 ) { v4 = 0; LOBYTE(v8) = 0; if ( v1[74] ) { v5 = (_DWORD *)v1[74]; v4 = v5[84]; LOBYTE(v2) = sub_4FFB70(v5) == 1; LOBYTE(v8) = v2; } v6 = *(_DWORD **)(v3 + 412); if ( v6 ) { sub_5036C0(v6, v4, v8); sub_8F82A0(&unk_BA6B10, v6); LOBYTE(v2) = sub_8F81A0(&unk_BA6B10, v6); } } return v2; } //----- (00504C00) -------------------------------------------------------- unsigned int __thiscall sub_504C00(_DWORD *this) { _DWORD *v1; // esi unsigned int result; // eax int v3; // eax int v4; // eax unsigned int v5; // ecx unsigned int v6; // ebx int v7; // edi unsigned int v8; // ecx _DWORD *v9; // edx _DWORD *v10; // edi void **v11; // ecx int v12; // ecx int v13; // eax unsigned int v14; // [esp+4h] [ebp-Ch] unsigned int v15; // [esp+8h] [ebp-8h] int v16; // [esp+Ch] [ebp-4h] void **v17; // [esp+Ch] [ebp-4h] v1 = this; result = this[102]; if ( result ) { v3 = *(_DWORD *)(result + 300); if ( v3 ) v4 = *(_DWORD *)(v3 + 344); else v4 = 0; v5 = (this[90] - this[89]) >> 2; v6 = 0; result = 12 * v4; v14 = v5; v16 = 0; v15 = result; while ( 1 ) { if ( result < v5 ) { v7 = v1[97]; v8 = 0; if ( (v1[98] - v7) / 20 ) { v9 = (_DWORD *)(v7 + 4); while ( *v9 != *(_DWORD *)(v1[89] + 4 * v15) ) { ++v8; v9 += 5; if ( v8 >= (v1[98] - v7) / 20 ) goto LABEL_12; } v13 = v7 + 20 * v8; if ( !v13 || *(_DWORD *)(v13 + 16) <= 0 ) { LABEL_12: v6 = v16; goto LABEL_13; } v6 = v16; sub_503D10( (_DWORD *)v1[102], v16, *(void **)(v1[89] + 4 * v15), *(_DWORD *)(v13 + 8), *(_DWORD *)(v13 + 12), *(void **)(v13 + 16)); } else { LABEL_13: v10 = (_DWORD *)v1[102]; v11 = *(void ***)(v10[86] + 4 * v6); v17 = v11; if ( v11 ) { (*((void (__stdcall **)(_DWORD))*v11 + 64))(0); sub_501B70(v17, 0, 0, 0, 0); } v12 = *(_DWORD *)(v10[82] + 4 * v6); if ( v12 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v12 + 256))(v10[91] == 0); } } ++v6; result = v15 + 1; v16 = v6; ++v15; if ( v6 >= 0xC ) break; v5 = v14; } } return result; } //----- (00504D40) -------------------------------------------------------- void __userpurge sub_504D40(_DWORD *a1@, double a2@, int a3, unsigned int a4) { volatile LONG *v4; // eax switch ( a3 ) { case 0: sub_503C30((int)a1, a2, a4); break; case 1: sub_504070(a1); break; case 2: sub_5040E0(a1, a4); break; case 3: if ( a4 < 5 ) { v4 = (volatile LONG *)sub_402BF0(a1); sub_8F2BC0(v4, 5, 2, a4); } break; default: return; } } //----- (00504DB0) -------------------------------------------------------- unsigned int __thiscall sub_504DB0(void *this) { double v1; // st7 unsigned int v2; // ebx int v3; // eax unsigned int v4; // esi unsigned int v5; // edi int v6; // eax double v7; // st6 float *v8; // ecx float *v9; // ecx unsigned int v10; // esi unsigned int result; // eax float *v12; // ecx unsigned int v13; // [esp+4h] [ebp-20h] float v14; // [esp+8h] [ebp-1Ch] float v15; // [esp+Ch] [ebp-18h] float v16; // [esp+10h] [ebp-14h] float v17; // [esp+14h] [ebp-10h] float v18; // [esp+18h] [ebp-Ch] float v19; // [esp+1Ch] [ebp-8h] v1 = 0.0; v16 = 0.0; v17 = 0.0; v18 = 0.0; v13 = (unsigned int)this; v19 = 0.0; v2 = 0; v14 = 0.0; do { v3 = *(_DWORD *)(dword_ACD9E8 + 56); v4 = 0; v15 = 0.0; if ( v3 ) v5 = *(_DWORD *)(v3 + 40); else v5 = 0; if ( v5 > 0 ) { do { v6 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v4); if ( v6 && *(_DWORD *)(v6 + 34) == v2 ) ++LODWORD(v15); ++v4; } while ( v4 < v5 ); v1 = 0.0; } v15 = (double)LODWORD(v15); ++v2; v7 = v15; *(&v15 + v2) = v15; v14 = v7 + v14; } while ( v2 < 4 ); v8 = **(float ***)(v13 + 296); if ( v8 ) { v8[75] = v1; v8[76] = v14; sub_49F670(v8); v1 = 0.0; } v9 = *(float **)(*(_DWORD *)(v13 + 296) + 20); if ( v9 ) { v9[75] = v1; v9[76] = v14; sub_49F670(v9); v1 = 0.0; } v10 = 0; do { result = v13; v12 = *(float **)(*(_DWORD *)(v13 + 296) + v10 + 4); if ( v12 ) { v12[75] = v1; v12[76] = *(float *)((char *)&v16 + v10); result = sub_49F670(v12); v1 = 0.0; } v10 += 4; } while ( v10 < 0x10 ); return result; } // ACD9E8: using guessed type int dword_ACD9E8; //----- (00504F10) -------------------------------------------------------- void __thiscall sub_504F10(void *this) { void *v1; // edi unsigned int v2; // ecx int v3; // eax int *v4; // ebx int v5; // esi char *v6; // eax float **v7; // ecx float *v8; // esi int *v9; // ebx double v10; // st7 float *v11; // ecx double v12; // st6 int v13; // esi float v14; // ST18_4 char *v15; // eax int v16; // edx int v17; // ecx double v18; // st7 bool v19; // c0 bool v20; // c3 double v21; // st7 float *v22; // ecx int *v23; // ebx int v24; // esi char *v25; // eax signed int v26; // [esp+8h] [ebp-10h] float v27; // [esp+Ch] [ebp-Ch] float v28; // [esp+10h] [ebp-8h] float v29; // [esp+14h] [ebp-4h] v29 = 0.0; v27 = 0.0; v1 = this; v28 = 0.0; v2 = 4; v26 = 4; do { v3 = *(_DWORD *)(v2 + *((_DWORD *)v1 + 74)); v4 = *(int **)(v2 + *((_DWORD *)v1 + 78)); if ( v3 && v4 ) { v5 = *v4; v29 = *(float *)(v3 + 300); v27 = *(float *)(v3 + 304); v28 = v28 + v29; v6 = sub_7549E0("%d/%d", (signed int)v29, (signed int)v27); (*(void (__thiscall **)(int *, char *))(v5 + 472))(v4, v6); v2 = v26; } v2 += 4; v26 = v2; } while ( v2 < 0x14 ); v7 = (float **)*((_DWORD *)v1 + 74); v8 = *v7; v9 = (int *)**((_DWORD **)v1 + 78); if ( *v7 && v9 ) { v10 = v28; if ( v28 != v8[75] ) { v11 = *v7; v8[75] = v28; sub_49F670(v11); v10 = v28; } v12 = v8[76]; v13 = *v9; v14 = v12; v15 = sub_7549E0("%d/%d", (signed int)v10, (signed int)v14); (*(void (__thiscall **)(int *, char *))(v13 + 472))(v9, v15); } v16 = *((_DWORD *)v1 + 74); v17 = *(_DWORD *)(v16 + 4 * *((_DWORD *)v1 + 92)); if ( v17 ) { v27 = *((float *)v1 + 95) - *((float *)v1 + 96); v18 = *(float *)(v17 + 300) - *((float *)v1 + 96); v19 = 0.0 < v18; v20 = 0.0 == v18; v21 = 0.0; if ( v19 || v20 ) v21 = *(float *)(v17 + 300) - *((float *)v1 + 96); v29 = v21; } v22 = *(float **)(v16 + 20); v23 = *(int **)(*((_DWORD *)v1 + 78) + 20); if ( v22 && v23 ) { if ( v27 != v22[76] || v29 != v22[75] ) { v22[76] = v27; v22[75] = v29; sub_49F670(v22); } v24 = *v23; v25 = sub_7549E0("%d", (signed int)*((float *)v1 + 95)); (*(void (__thiscall **)(int *, char *))(v24 + 472))(v23, v25); } } //----- (005050E0) -------------------------------------------------------- LONG __thiscall sub_5050E0(void **this) { void **v1; // esi v1 = this; *this = &CollectMainWin::`vftable'; this[58] = &CollectMainWin::`vftable'; if ( this[86] ) operator delete(this[86]); v1[86] = 0; v1[87] = 0; v1[88] = 0; if ( v1[82] ) operator delete(v1[82]); v1[82] = 0; v1[83] = 0; v1[84] = 0; if ( v1[78] ) operator delete(v1[78]); v1[78] = 0; v1[79] = 0; v1[80] = 0; if ( v1[74] ) operator delete(v1[74]); v1[74] = 0; v1[75] = 0; v1[76] = 0; return sub_8F3CC0(v1); } // 9C22C0: using guessed type void *CollectMainWin::`vftable'; // 9C22DC: using guessed type void *CollectMainWin::`vftable'; //----- (005051A0) -------------------------------------------------------- LONG __thiscall sub_5051A0(void **this) { void **v1; // esi v1 = this; *this = &CollectCardListWin::`vftable'; this[58] = &CollectCardListWin::`vftable'; if ( this[86] ) operator delete(this[86]); v1[86] = 0; v1[87] = 0; v1[88] = 0; if ( v1[82] ) operator delete(v1[82]); v1[82] = 0; v1[83] = 0; v1[84] = 0; if ( v1[78] ) operator delete(v1[78]); v1[78] = 0; v1[79] = 0; v1[80] = 0; return sub_8F3CC0(v1); } // 9C24E8: using guessed type void *CollectCardListWin::`vftable'; // 9C2504: using guessed type void *CollectCardListWin::`vftable'; //----- (00505230) -------------------------------------------------------- _DWORD *__thiscall sub_505230(_DWORD *this) { _DWORD *v1; // ebx const void *v2; // ecx int v3; // edi unsigned int v4; // eax void *v5; // edi unsigned int v6; // ecx char *v7; // ecx int v8; // eax const void *v9; // ecx int v10; // edi unsigned int v11; // eax void *v12; // edi unsigned int v13; // eax unsigned int v14; // ecx char *v15; // ecx int v16; // eax unsigned int v18; // [esp+1Ch] [ebp-10h] v1 = this; sub_8F3C20(this); *v1 = &CollectMainWin::`vftable'; v1[58] = &CollectMainWin::`vftable'; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[78] = 0; v1[79] = 0; v1[80] = 0; v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; *((float *)v1 + 95) = 0.0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; sub_4E6D30(v1 + 74, 6u); sub_4E6D30(v1 + 78, 6u); *(_DWORD *)v1[74] = 0; *(_DWORD *)v1[78] = 0; *(_DWORD *)(v1[74] + 4) = 0; *(_DWORD *)(v1[78] + 4) = 0; *(_DWORD *)(v1[74] + 8) = 0; *(_DWORD *)(v1[78] + 8) = 0; *(_DWORD *)(v1[74] + 12) = 0; *(_DWORD *)(v1[78] + 12) = 0; *(_DWORD *)(v1[74] + 16) = 0; *(_DWORD *)(v1[78] + 16) = 0; *(_DWORD *)(v1[74] + 20) = 0; *(_DWORD *)(v1[78] + 20) = 0; v2 = (const void *)v1[83]; v3 = v1[82]; v4 = (v1[83] - v3) >> 2; if ( v4 <= 6 ) { if ( v4 < 6 ) { if ( 0x3FFFFFFF - (6 - v4) < v4 ) std::_Xlength_error("vector too long"); v6 = (v1[84] - v3) >> 2; if ( v6 < 6 ) { if ( 0x3FFFFFFF - (v6 >> 1) >= v6 ) v7 = (char *)((v6 >> 1) + v6); else v7 = 0; if ( (unsigned int)v7 < 6 ) v7 = (char *)6; sub_74E360((const void **)v1 + 82, v7); } v8 = (v1[83] - v1[82]) >> 2; if ( v8 != 6 ) memset((void *)v1[83], 0, 4 * (6 - v8)); v1[83] += 4 * (6 - ((v1[83] - v1[82]) >> 2)); } } else { v5 = (void *)(v3 + 24); if ( v5 != v2 ) { memcpy_0(v5, v2, 0); v1[83] = v5; } } *(_DWORD *)v1[82] = 0; *(_DWORD *)(v1[82] + 4) = 0; *(_DWORD *)(v1[82] + 8) = 0; *(_DWORD *)(v1[82] + 12) = 0; *(_DWORD *)(v1[82] + 16) = 0; v9 = (const void *)v1[87]; v10 = v1[86]; v11 = (v1[87] - v10) >> 2; if ( v11 <= 4 ) { if ( v11 < 4 ) { v18 = (v1[87] - v10) >> 2; if ( 0x3FFFFFFF - (4 - v11) < v18 ) std::_Xlength_error("vector too long"); v13 = 4 - v11 + v18; v14 = (v1[88] - v10) >> 2; if ( v13 > v14 ) { if ( 0x3FFFFFFF - (v14 >> 1) >= v14 ) v15 = (char *)((v14 >> 1) + v14); else v15 = 0; if ( (unsigned int)v15 < v13 ) v15 = (char *)v13; sub_74E360((const void **)v1 + 86, v15); } v16 = (v1[87] - v1[86]) >> 2; if ( v16 != 4 ) memset((void *)v1[87], 0, 4 * (4 - v16)); v1[87] += 4 * (4 - ((v1[87] - v1[86]) >> 2)); } } else { v12 = (void *)(v10 + 16); if ( v12 != v9 ) { memcpy_0(v12, v9, 0); v1[87] = v12; } } *(_DWORD *)v1[86] = 0; *(_DWORD *)(v1[86] + 4) = 0; *(_DWORD *)(v1[86] + 8) = 0; *(_DWORD *)(v1[86] + 12) = 0; return v1; } // 9C22C0: using guessed type void *CollectMainWin::`vftable'; // 9C22DC: using guessed type void *CollectMainWin::`vftable'; //----- (005055C0) -------------------------------------------------------- volatile LONG *__cdecl sub_5055C0(int a1, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x184u); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_505230(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 516))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (00505700) -------------------------------------------------------- char __thiscall sub_505700(void *this, int a2, volatile LONG **a3, char a4) { unsigned int v4; // edi int v5; // esi volatile LONG **v6; // eax char result; // al volatile LONG **v8; // eax volatile LONG **v9; // eax char *v10; // eax char *v11; // eax volatile LONG **v12; // eax int v13; // ebx int v14; // ebx int v15; // ST20_4 int v16; // ST1C_4 int v17; // ST18_4 int v18; // eax volatile LONG *v19; // eax CHAR *v20; // eax CHAR *v21; // eax CHAR *v22; // eax CHAR *v23; // eax CHAR *v24; // eax CHAR *v25; // eax CHAR *v26; // eax CHAR *v27; // eax CHAR *v28; // eax CHAR *v29; // eax char **v30; // edi char *v31; // eax char *v32; // eax char *v33; // eax char *v34; // eax int v35; // ebx int v36; // edi volatile LONG *v37; // eax char *v38; // ecx const char *v39; // eax int v40; // edi int v41; // ST1C_4 int v42; // ST18_4 int v43; // eax volatile LONG *v44; // edi int *v45; // eax bool v46; // zf int v47; // ebx int v48; // eax volatile LONG *v49; // edi const CHAR *v50; // eax int v51; // eax volatile LONG *v52; // edi const CHAR *v53; // eax int v54; // edi char *v55; // eax volatile LONG *v56; // eax unsigned int v57; // edi int v58; // eax volatile LONG *v59; // edi const CHAR *v60; // eax volatile LONG **v61; // eax volatile LONG *v62; // edi int v63; // ST1C_4 int v64; // ST18_4 int v65; // eax volatile LONG *v66; // eax const CHAR *v67; // eax unsigned int *v68; // eax volatile LONG **v69; // eax int (__thiscall *v70)(volatile LONG *); // edx int v71; // eax char *v72; // edi char *v73; // eax char *v74; // eax char *v75; // eax char *v76; // eax char *v77; // eax char *v78; // eax volatile LONG *v79; // eax int v80; // [esp+14h] [ebp-2C0h] volatile LONG **v81; // [esp+18h] [ebp-2BCh] volatile LONG **v82; // [esp+18h] [ebp-2BCh] int v83; // [esp+1Ch] [ebp-2B8h] int v84; // [esp+20h] [ebp-2B4h] char *i; // [esp+24h] [ebp-2B0h] int v86; // [esp+28h] [ebp-2ACh] int v87; // [esp+2Ch] [ebp-2A8h] unsigned int v88; // [esp+30h] [ebp-2A4h] int v89; // [esp+34h] [ebp-2A0h] int v90; // [esp+38h] [ebp-29Ch] volatile LONG **v91; // [esp+3Ch] [ebp-298h] char v92; // [esp+40h] [ebp-294h] int v93; // [esp+50h] [ebp-284h] int v94; // [esp+54h] [ebp-280h] char v95; // [esp+5Ch] [ebp-278h] int v96; // [esp+6Ch] [ebp-268h] int v97; // [esp+70h] [ebp-264h] char v98; // [esp+78h] [ebp-25Ch] int v99; // [esp+88h] [ebp-24Ch] int v100; // [esp+8Ch] [ebp-248h] char v101; // [esp+94h] [ebp-240h] int v102; // [esp+A4h] [ebp-230h] int v103; // [esp+A8h] [ebp-22Ch] char v104; // [esp+B0h] [ebp-224h] int v105; // [esp+C0h] [ebp-214h] int v106; // [esp+C4h] [ebp-210h] char v107; // [esp+CCh] [ebp-208h] int v108; // [esp+DCh] [ebp-1F8h] int v109; // [esp+E0h] [ebp-1F4h] char v110; // [esp+E8h] [ebp-1ECh] int v111; // [esp+F8h] [ebp-1DCh] int v112; // [esp+FCh] [ebp-1D8h] char v113; // [esp+104h] [ebp-1D0h] int v114; // [esp+114h] [ebp-1C0h] int v115; // [esp+118h] [ebp-1BCh] int v116[4]; // [esp+120h] [ebp-1B4h] int v117; // [esp+130h] [ebp-1A4h] int v118[2]; // [esp+134h] [ebp-1A0h] char v119; // [esp+13Ch] [ebp-198h] int v120; // [esp+14Ch] [ebp-188h] int v121; // [esp+150h] [ebp-184h] char v122; // [esp+158h] [ebp-17Ch] int v123; // [esp+168h] [ebp-16Ch] int v124; // [esp+16Ch] [ebp-168h] char v125; // [esp+174h] [ebp-160h] int v126; // [esp+184h] [ebp-150h] int v127; // [esp+188h] [ebp-14Ch] char v128; // [esp+190h] [ebp-144h] int v129; // [esp+1A0h] [ebp-134h] int v130; // [esp+1A4h] [ebp-130h] int v131[4]; // [esp+1ACh] [ebp-128h] int v132; // [esp+1BCh] [ebp-118h] int v133[2]; // [esp+1C0h] [ebp-114h] char v134; // [esp+1C8h] [ebp-10Ch] int v135; // [esp+1D8h] [ebp-FCh] int v136; // [esp+1DCh] [ebp-F8h] char v137; // [esp+1E4h] [ebp-F0h] int v138; // [esp+1F4h] [ebp-E0h] int v139; // [esp+1F8h] [ebp-DCh] char v140; // [esp+200h] [ebp-D4h] int v141; // [esp+210h] [ebp-C4h] int v142; // [esp+214h] [ebp-C0h] char v143; // [esp+21Ch] [ebp-B8h] int v144; // [esp+22Ch] [ebp-A8h] int v145; // [esp+230h] [ebp-A4h] char v146[16]; // [esp+238h] [ebp-9Ch] int v147; // [esp+248h] [ebp-8Ch] int v148[2]; // [esp+24Ch] [ebp-88h] char v149; // [esp+254h] [ebp-80h] int v150; // [esp+264h] [ebp-70h] int v151; // [esp+268h] [ebp-6Ch] char v152; // [esp+270h] [ebp-64h] int v153; // [esp+280h] [ebp-54h] int v154; // [esp+284h] [ebp-50h] char v155; // [esp+28Ch] [ebp-48h] int v156; // [esp+29Ch] [ebp-38h] int v157; // [esp+2A0h] [ebp-34h] char v158; // [esp+2A8h] [ebp-2Ch] int v159; // [esp+2B8h] [ebp-1Ch] int v160; // [esp+2BCh] [ebp-18h] int v161; // [esp+2D0h] [ebp-4h] v4 = 0; v5 = (int)this; v88 = a2; v91 = a3; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v161 = 0; if ( !a2 ) return 0; v84 = 0; v83 = 0; v89 = 0; v90 = 0; v6 = sub_8FB140(a2, (int)"Panel03", (int)&v89, (int)&v90, 0); if ( !sub_8F43D0((volatile LONG **)v5, v89, v90, (int)v6, v91, 0, 0) ) { v161 = -1; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); return 0; } v87 = v89; v86 = v90; v8 = sub_8FB140(a2, (int)"Panel07", (int)&v89, (int)&v90, 0); sub_8F3EB0(v89 - v87, v90 - v86, (int)v8, v5, 0, 0); if ( !a4 ) { v9 = sub_8FB140(a2, (int)"RwGaugeBar", (int)&v89, (int)&v90, 0); sub_8F3EB0(v89 - v87, v90 - v86, (int)v9, v5, 0, 0); } v100 = 15; v99 = 0; v98 = 0; sub_4018E0(&v98, "AllRank", 7u); LOBYTE(v161) = 1; v103 = 15; v102 = 0; v101 = 0; sub_4018E0(&v101, "SRank", 5u); LOBYTE(v161) = 2; v106 = 15; v105 = 0; v104 = 0; sub_4018E0(&v104, "ARank", 5u); LOBYTE(v161) = 3; v109 = 15; v108 = 0; v107 = 0; sub_4018E0(&v107, "BRank", 5u); LOBYTE(v161) = 4; v112 = 15; v111 = 0; v110 = 0; sub_4018E0(&v110, "CRank", 5u); LOBYTE(v161) = 5; v115 = 15; v114 = 0; v113 = 0; sub_4018E0(&v113, "Rw", 2u); v10 = &v98; LOBYTE(v161) = 6; for ( i = &v98; ; v10 = i ) { if ( *((_DWORD *)v10 + 5) >= 0x10u ) v10 = *(char **)v10; v11 = sub_7549E0("%sGauge", v10); v12 = sub_8FB140(v88, (int)v11, (int)&v89, (int)&v90, 0); v13 = *(_DWORD *)(v5 + 296); *(_DWORD *)(v13 + v4) = sub_90CB20(v89 - v87, v90 - v86, (int)v12, v5, 2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + *(_DWORD *)(v5 + 296)) + 240))(0); v14 = *(_DWORD *)(*(_DWORD *)(v5 + 296) + v4); v15 = *(_DWORD *)(*(_DWORD *)(v5 + 296) + v4); v91 = (volatile LONG **)(v4 + *(_DWORD *)(v5 + 312)); v16 = sub_421050(0); v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 148))(v14); v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 144))(v14); v19 = sub_8F4A20(0, 0, v18, v17, v16, v15, 0, 0); *v91 = v19; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + *(_DWORD *)(v5 + 312)) + 488))(6); (*(void (__stdcall **)(void *))(**(_DWORD **)(v4 + *(_DWORD *)(v5 + 312)) + 472))(&unk_9C1FE7); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + *(_DWORD *)(v5 + 312)) + 240))(0); i += 28; v4 += 4; if ( v4 >= 0x18 ) break; } v148[0] = 15; v147 = 0; v146[0] = 0; sub_4018E0(v146, "All", 3u); LOBYTE(v161) = 7; v151 = 15; v150 = 0; v149 = 0; sub_4018E0(&v149, "S", 1u); LOBYTE(v161) = 8; v154 = 15; v153 = 0; v152 = 0; sub_4018E0(&v152, "A", 1u); LOBYTE(v161) = 9; v157 = 15; v156 = 0; v155 = 0; sub_4018E0(&v155, "B", 1u); LOBYTE(v161) = 10; v160 = 15; v159 = 0; v158 = 0; sub_4018E0(&v158, "C", 1u); LOBYTE(v161) = 11; v20 = (CHAR *)sub_40A910(676079879); v133[0] = 15; v132 = 0; LOBYTE(v131[0]) = 0; v91 = (volatile LONG **)(v20 + 1); sub_4018E0(v131, v20, strlen(v20)); LOBYTE(v161) = 12; v21 = (CHAR *)sub_40A910(643372554); v136 = 15; v135 = 0; v134 = 0; v91 = (volatile LONG **)(v21 + 1); sub_4018E0(&v134, v21, strlen(v21)); LOBYTE(v161) = 13; v22 = (CHAR *)sub_40A910(341382666); v139 = 15; v138 = 0; v137 = 0; v91 = (volatile LONG **)(v22 + 1); sub_4018E0(&v137, v22, strlen(v22)); LOBYTE(v161) = 14; v23 = (CHAR *)sub_40A910(358159882); v142 = 15; v141 = 0; v140 = 0; v91 = (volatile LONG **)(v23 + 1); sub_4018E0(&v140, v23, strlen(v23)); LOBYTE(v161) = 15; v24 = (CHAR *)sub_40A910(374937098); v145 = 15; v144 = 0; v143 = 0; v91 = (volatile LONG **)(v24 + 1); sub_4018E0(&v143, v24, strlen(v24)); LOBYTE(v161) = 16; v25 = (CHAR *)sub_40A910(1638716055); v118[0] = 15; v117 = 0; LOBYTE(v116[0]) = 0; v91 = (volatile LONG **)(v25 + 1); sub_4018E0(v116, v25, strlen(v25)); LOBYTE(v161) = 17; v26 = (CHAR *)sub_40A910(1570863942); v121 = 15; v120 = 0; v119 = 0; v91 = (volatile LONG **)(v26 + 1); sub_4018E0(&v119, v26, strlen(v26)); LOBYTE(v161) = 18; v27 = (CHAR *)sub_40A910(1569684294); v124 = 15; v123 = 0; v122 = 0; v91 = (volatile LONG **)(v27 + 1); sub_4018E0(&v122, v27, strlen(v27)); LOBYTE(v161) = 19; v28 = (CHAR *)sub_40A910(1569749830); v127 = 15; v126 = 0; v125 = 0; v91 = (volatile LONG **)(v28 + 1); sub_4018E0(&v125, v28, strlen(v28)); LOBYTE(v161) = 20; v29 = (CHAR *)sub_40A910(1569815366); v130 = 15; v129 = 0; v128 = 0; sub_4018E0(&v128, v29, strlen(v29)); LOBYTE(v161) = 21; i = 0; v80 = 0; v91 = (volatile LONG **)5; do { v30 = (char **)&v146[v80 * 4]; if ( (unsigned int)v148[v80] < 0x10 ) v31 = &v146[v80 * 4]; else v31 = *v30; v32 = sub_7549E0("%sRankNonSelect", v31); v81 = sub_8FB140(v88, (int)v32, (int)&v89, (int)&v90, 0); if ( (unsigned int)v148[v80] < 0x10 ) v33 = &v146[v80 * 4]; else v33 = *v30; v34 = sub_7549E0("%sRankSelect", v33); sub_8FB650(v81, v88, (int)v34); v35 = *(_DWORD *)(v5 + 328); v36 = 4 * (_DWORD)i; v37 = sub_465940(v89 - v87, v90 - v86, (int)v81, v5, 3, 0); v38 = i; *(_DWORD *)(v35 + v36) = v37; *(_DWORD *)(*(_DWORD *)(v36 + *(_DWORD *)(v5 + 328)) + 384) = v38; *(_DWORD *)(*(_DWORD *)(v36 + *(_DWORD *)(v5 + 328)) + 272) = dword_AD01E8; if ( (unsigned int)v118[v80] < 0x10 ) v39 = (const char *)&v116[v80]; else v39 = (const char *)v116[v80]; sub_8F2EA0(*(void ***)(v36 + *(_DWORD *)(v5 + 328)), v39); v40 = *(_DWORD *)(v36 + *(_DWORD *)(v5 + 328)); v41 = sub_421050(0); v42 = (*(int (__thiscall **)(int))(*(_DWORD *)v40 + 148))(v40); v43 = (*(int (__thiscall **)(int))(*(_DWORD *)v40 + 144))(v40); v44 = sub_8F4A20(0, 0, v43, v42, v41, v40, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); if ( (unsigned int)v133[v80] < 0x10 ) v45 = &v131[v80]; else v45 = (int *)v131[v80]; (*(void (__thiscall **)(volatile LONG *, int *))(*v44 + 472))(v44, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); ++i; v46 = v91 == (volatile LONG **)1; v91 = (volatile LONG **)((char *)v91 - 1); v80 += 7; } while ( !v46 ); v47 = v88; if ( sub_8F71E0(v88, (int)"Text01", &v89, &v90, &v84, &v83) && (v48 = sub_421050(0), v49 = sub_8F4A20(v89 - v87, v90 - v86, v84, v83, v48, v5, 0, 0), (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 4), v91 = (volatile LONG **)(*v49 + 472), v50 = sub_40A910(1118985416), ((void (__thiscall *)(volatile LONG *, const CHAR *))*v91)(v49, v50), (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0), sub_8F71E0(v47, (int)"Text02", &v89, &v90, &v84, &v83)) ) { v51 = sub_421050(0); v52 = sub_8F4A20(v89 - v87, v90 - v86, v84, v83, v51, v5, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v52 + 488))(v52, 4); v91 = (volatile LONG **)(*v52 + 472); v53 = sub_40A910(22220924); ((void (__thiscall *)(volatile LONG *, const CHAR *))*v91)(v52, v53); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 240))(v52, 0); v54 = 0; do { v88 = v54 + 1; v55 = sub_7549E0("Card%02d", v54 + 1); if ( !sub_8F71E0(v47, (int)v55, &v89, &v90, &v84, &v83) ) { LOBYTE(v161) = 16; `eh vector destructor iterator'(v116, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 11; `eh vector destructor iterator'(v131, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 6; `eh vector destructor iterator'(v146, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 0; `eh vector destructor iterator'(&v98, 0x1Cu, 6, sub_636A10); v161 = -1; if ( !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); return 0; } v91 = (volatile LONG **)(4 * v54 + *(_DWORD *)(v5 + 344)); v56 = sub_501610(v89 - v87, v90 - v86, v5, v54, 0, 0); *v91 = v56; (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v5 + 344) + 4 * v54) + 520))(v54); (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v5 + 344) + 4 * v54) + 564))(v54); v54 = v88; } while ( v88 < 4 ); if ( a4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v5 + 296) + 20) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v5 + 312) + 20) + 256))(0); v57 = 0; do { *(_BYTE *)(*(_DWORD *)(v57 + *(_DWORD *)(v5 + 328)) + 380) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v57 + *(_DWORD *)(v5 + 328)) + 240))(0); v57 += 4; } while ( v57 < 0x14 ); } else { *(_BYTE *)(**(_DWORD **)(v5 + 328) + 380) = 1; if ( !sub_8F71E0(v47, (int)"Text03", &v89, &v90, &v84, &v83) ) goto LABEL_30; v58 = sub_421050(0); v59 = sub_8F4A20(v89 - v87, v90 - v86, v84, v83, v58, v5, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v59 + 488))(v59, 4); v91 = (volatile LONG **)(*v59 + 472); v60 = sub_40A910(-906607861); ((void (__thiscall *)(volatile LONG *, const CHAR *))*v91)(v59, v60); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); v61 = sub_8FB140(v47, (int)"RwAll", (int)&v89, (int)&v90, 0); v62 = sub_8F3EB0(v89 - v87, v90 - v86, (int)v61, v5, 0, 0); v63 = sub_421050(0); v64 = (*(int (__thiscall **)(volatile LONG *))(*v62 + 148))(v62); v65 = (*(int (__thiscall **)(volatile LONG *))(*v62 + 144))(v62); v66 = sub_8F4A20(0, 0, v65, v64, v63, (int)v62, 0, 0); *(_DWORD *)(v5 + 364) = v66; (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 488))(v66, 5); v91 = (volatile LONG **)(**(_DWORD **)(v5 + 364) + 472); v67 = sub_40A910(676079879); ((void (__thiscall *)(_DWORD, const CHAR *))*v91)(*(_DWORD *)(v5 + 364), v67); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 364) + 240))(0); v68 = (unsigned int *)sub_500BD0(v47, (int)"Reward02Able", (int)"Reward02Disable", (int)"Reward02Effect", v5, 1); *(_DWORD *)(v5 + 360) = v68; v88 = *v68; v69 = (volatile LONG **)(*(int (__thiscall **)(unsigned int *))(v88 + 168))(v68); v70 = *(int (__thiscall **)(volatile LONG *))(*v62 + 148); v91 = v69; v71 = v70(v62); (*(void (__thiscall **)(_DWORD, int))(v88 + 176))(*(_DWORD *)(v5 + 360), (int)v91 - v71); v94 = 15; v93 = 0; v92 = 0; sub_4018E0(&v92, "Front", 5u); LOBYTE(v161) = 22; v97 = 15; v96 = 0; v95 = 0; sub_4018E0(&v95, "Next", 4u); v88 = 0; LOBYTE(v161) = 23; v72 = &v92; do { if ( *((_DWORD *)v72 + 5) < 0x10u ) v73 = v72; else v73 = *(char **)v72; v74 = sub_7549E0("Rw%sNor", v73); v82 = sub_8FB140(v47, (int)v74, (int)&v89, (int)&v90, 0); if ( *((_DWORD *)v72 + 5) < 0x10u ) v75 = v72; else v75 = *(char **)v72; v76 = sub_7549E0("Rw%sClick", v75); sub_8FB650(v82, v47, (int)v76); if ( *((_DWORD *)v72 + 5) < 0x10u ) v77 = v72; else v77 = *(char **)v72; v78 = sub_7549E0("Rw%sOver", v77); sub_8FB650(v82, v47, (int)v78); v79 = sub_8FE0F0(v89 - v87, v90 - v86, (int)v82, v5, 2, 0, 0); (*(void (__thiscall **)(volatile LONG *, unsigned int))(*v79 + 520))(v79, v88); v72 += 28; ++v88; } while ( v88 < 2 ); LOBYTE(v161) = 21; `eh vector destructor iterator'(&v92, 0x1Cu, 2, sub_636A10); } sub_504DB0((void *)v5); LOBYTE(v161) = 16; `eh vector destructor iterator'(v116, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 11; `eh vector destructor iterator'(v131, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 6; `eh vector destructor iterator'(v146, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 0; `eh vector destructor iterator'(&v98, 0x1Cu, 6, sub_636A10); v161 = -1; if ( !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); result = 1; } else { LABEL_30: LOBYTE(v161) = 16; `eh vector destructor iterator'(v116, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 11; `eh vector destructor iterator'(v131, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 6; `eh vector destructor iterator'(v146, 0x1Cu, 5, sub_636A10); LOBYTE(v161) = 0; `eh vector destructor iterator'(&v98, 0x1Cu, 6, sub_636A10); v161 = -1; if ( InterlockedDecrement((volatile LONG *)(v47 + 4)) ) return 0; (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); result = 0; } return result; } // AD01E8: using guessed type int dword_AD01E8; // 505700: using guessed type char var_9C[16]; // 505700: using guessed type int var_88[2]; // 505700: using guessed type int var_114[2]; // 505700: using guessed type int var_128[4]; // 505700: using guessed type int var_1A0[2]; // 505700: using guessed type int var_1B4[4]; //----- (00506820) -------------------------------------------------------- void __thiscall sub_506820(int this) { int v1; // edi int v2; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax char *v9; // eax int v10; // esi unsigned int v11; // ecx void *v12; // eax void *v13; // [esp+10h] [ebp-2Ch] int v14; // [esp+20h] [ebp-1Ch] unsigned int v15; // [esp+24h] [ebp-18h] int v16; // [esp+38h] [ebp-4h] v1 = this; v2 = **(_DWORD **)(this + 328); if ( v2 ) *(_BYTE *)(v2 + 380) = 0; v3 = *(_DWORD *)(*(_DWORD *)(this + 328) + 4); if ( v3 ) *(_BYTE *)(v3 + 380) = 0; v4 = *(_DWORD *)(*(_DWORD *)(this + 328) + 8); if ( v4 ) *(_BYTE *)(v4 + 380) = 0; v5 = *(_DWORD *)(*(_DWORD *)(this + 328) + 12); if ( v5 ) *(_BYTE *)(v5 + 380) = 0; v6 = *(_DWORD *)(*(_DWORD *)(this + 328) + 16); if ( v6 ) *(_BYTE *)(v6 + 380) = 0; v7 = *(_DWORD *)(*(_DWORD *)(this + 328) + 4 * *(_DWORD *)(this + 368)); if ( v7 ) *(_BYTE *)(v7 + 380) = 1; if ( *(_DWORD *)(this + 364) ) { v15 = 15; v14 = 0; LOBYTE(v13) = 0; v8 = *(_DWORD *)(this + 368); v16 = 0; switch ( v8 ) { case 0: v9 = (char *)sub_40A910(676079879); v10 = (int)(v9 + 1); v11 = (unsigned int)&v9[strlen(v9) + 1]; goto LABEL_20; case 1: v9 = (char *)sub_40A910(643372554); v10 = (int)(v9 + 1); v11 = (unsigned int)&v9[strlen(v9) + 1]; goto LABEL_20; case 2: v9 = (char *)sub_40A910(341382666); v10 = (int)(v9 + 1); v11 = (unsigned int)&v9[strlen(v9) + 1]; goto LABEL_20; case 3: v9 = (char *)sub_40A910(358159882); v10 = (int)(v9 + 1); v11 = (unsigned int)&v9[strlen(v9) + 1]; goto LABEL_20; case 4: v9 = (char *)sub_40A910(374937098); v10 = (int)(v9 + 1); v11 = (unsigned int)&v9[strlen(v9) + 1]; LABEL_20: sub_4018E0(&v13, v9, v11 - v10); v12 = v13; if ( v15 < 0x10 ) goto LABEL_21; break; default: LABEL_21: v12 = &v13; break; } (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 364) + 472))(v12); if ( v15 >= 0x10 ) operator delete(v13); } } //----- (00506A10) -------------------------------------------------------- _DWORD *__thiscall sub_506A10(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ebx const void *v3; // ecx int v4; // edx unsigned int v5; // eax int v6; // esi int v7; // eax unsigned int v8; // ecx char *v9; // ecx int v10; // eax unsigned int v11; // eax const void *v12; // ecx int v13; // edx _DWORD *v14; // esi unsigned int v15; // eax int v16; // ebx unsigned int v17; // ecx char *v18; // ecx int v19; // eax unsigned int v20; // eax _DWORD *v22; // [esp+14h] [ebp-10h] v1 = this; v22 = this; sub_8F3C20(this); *v1 = &CollectCardListWin::`vftable'; v1[58] = &CollectCardListWin::`vftable'; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[79] = 0; v1[80] = 0; v2 = v1 + 82; *v2 = 0; v2[1] = 0; v2[2] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[90] = 0; v1[91] = 0; sub_4E6D30(v1 + 78, 4u); *(_DWORD *)v1[78] = 0; *(_DWORD *)(v1[78] + 4) = 0; *(_DWORD *)(v1[78] + 8) = 0; *(_DWORD *)(v1[78] + 12) = 0; v3 = (const void *)v1[83]; v4 = v1[82]; v5 = (v1[83] - v1[82]) >> 2; if ( v5 <= 0xC ) { if ( v5 < 0xC ) { if ( 0x3FFFFFFF - (12 - v5) < v5 ) std::_Xlength_error("vector too long"); v8 = (v1[84] - v4) >> 2; if ( v8 < 0xC ) { if ( 0x3FFFFFFF - (v8 >> 1) >= v8 ) v9 = (char *)((v8 >> 1) + v8); else v9 = 0; if ( (unsigned int)v9 < 0xC ) v9 = (char *)12; sub_74E360((const void **)v1 + 82, v9); } v10 = (v1[83] - v1[82]) >> 2; if ( v10 != 12 ) { memset((void *)v1[83], 0, 4 * (12 - v10)); v1 = v22; } v7 = v2[1] + 4 * (12 - ((v2[1] - *v2) >> 2)); goto LABEL_17; } } else { v6 = v4 + 48; if ( (const void *)(v4 + 48) != v3 ) { memcpy_0((void *)(v4 + 48), v3, 0); v7 = v6; LABEL_17: v2[1] = v7; goto LABEL_18; } } LABEL_18: v11 = 0; do { *(_DWORD *)(v11 + *v2) = 0; v11 += 4; } while ( v11 < 0x30 ); v12 = (const void *)v1[87]; v13 = v1[86]; v14 = v1 + 86; v15 = (v1[87] - v13) >> 2; if ( v15 <= 0xC ) { if ( v15 < 0xC ) { if ( 0x3FFFFFFF - (12 - v15) < v15 ) std::_Xlength_error("vector too long"); v17 = (v1[88] - v13) >> 2; if ( v17 < 0xC ) { if ( 0x3FFFFFFF - (v17 >> 1) >= v17 ) v18 = (char *)((v17 >> 1) + v17); else v18 = 0; if ( (unsigned int)v18 < 0xC ) v18 = (char *)12; sub_74E360((const void **)v1 + 86, v18); } v19 = (v1[87] - v1[86]) >> 2; if ( v19 != 12 ) { memset((void *)v1[87], 0, 4 * (12 - v19)); v1 = v22; } v14 = v1 + 86; v1[87] += 4 * (12 - ((v1[87] - v1[86]) >> 2)); } } else { v16 = v13 + 48; if ( (const void *)(v13 + 48) != v12 ) { memcpy_0((void *)(v13 + 48), v12, 0); v1[87] = v16; } } v20 = 0; do { *(_DWORD *)(v20 + *v14) = 0; v20 += 4; } while ( v20 < 0x30 ); return v1; } // 9C24E8: using guessed type void *CollectCardListWin::`vftable'; // 9C2504: using guessed type void *CollectCardListWin::`vftable'; //----- (00506CD0) -------------------------------------------------------- volatile LONG *__cdecl sub_506CD0(int a1, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x170u); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_506A10(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 516))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (00506E40) -------------------------------------------------------- char **__thiscall sub_506E40(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // ecx char **result; // eax int v6; // edi int v7; // ST04_4 int v8; // ecx int v9; // [esp+4h] [ebp-8h] int v10; // [esp+8h] [ebp-4h] v3 = (int)(this + 86); v4 = this[86]; result = *(char ***)v4; if ( *(_DWORD *)v4 == v4 ) { LABEL_4: v6 = v4; v10 = a3; v7 = *(_DWORD *)(v4 + 4); v9 = a2; result = sub_509130((char *)v4, v7, (int)&v9); v8 = *(_DWORD *)(v3 + 4); if ( (unsigned int)(536870910 - v8) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v3 + 4) = v8 + 1; *(_DWORD *)(v6 + 4) = result; *(_DWORD *)result[1] = result; } else { while ( result[3] != (char *)a3 ) { result = (char **)*result; if ( result == (char **)v4 ) goto LABEL_4; } result[2] = (char *)a2; } return result; } //----- (00506ED0) -------------------------------------------------------- void __userpurge sub_506ED0(int a1@, double a2@, int a3) { _DWORD *v3; // eax unsigned int v4; // edi int v5; // ebx unsigned int v6; // esi _DWORD *v7; // eax int v8; // eax unsigned int v9; // edi unsigned int v10; // esi int v11; // eax _DWORD *v12; // esi unsigned __int8 *v13; // edi const char *v14; // eax void *v15; // ST10_4 char *v16; // eax char *v17; // edi char *v18; // ebx unsigned int v19; // eax char *v20; // edx void *v21; // eax int v22; // edi const CHAR *v23; // eax char *v24; // [esp+10h] [ebp-40h] _DWORD *v25; // [esp+14h] [ebp-3Ch] _DWORD *v26; // [esp+18h] [ebp-38h] int v27; // [esp+1Ch] [ebp-34h] int v28; // [esp+1Ch] [ebp-34h] int v29; // [esp+20h] [ebp-30h] void *v30; // [esp+24h] [ebp-2Ch] int v31; // [esp+34h] [ebp-1Ch] unsigned int v32; // [esp+38h] [ebp-18h] int v33; // [esp+4Ch] [ebp-4h] v27 = a1; v3 = *(_DWORD **)(*(_DWORD *)(a1 + 344) + 4 * a3); v4 = 0; v5 = 0; v6 = 0; v29 = 0; if ( v3 ) { v5 = v3[90]; v6 = v3[91]; v4 = v3[92]; v29 = v3[93]; } v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_4AA750(v7, a2, 1, v5, v6, v4, v29 == 0); v8 = *(_DWORD *)(dword_ACD9E8 + 56); if ( v8 ) v9 = *(_DWORD *)(v8 + 40); else v9 = 0; v10 = 0; if ( v9 ) { while ( 1 ) { v11 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v10); if ( v11 ) { if ( *(_WORD *)v11 == (_WORD)v5 ) break; } if ( ++v10 >= v9 ) return; } v12 = *(_DWORD **)(*(_DWORD *)(v27 + 312) + 12); v25 = v12; if ( v12 ) { v13 = (unsigned __int8 *)sub_4B1730((char *)(v11 + 2)); if ( v13 ) { v32 = 15; v31 = 0; LOBYTE(v30) = 0; v33 = 0; sub_7549E0(0); sub_7549E0(0); v24 = sub_7549E0(0); v26 = *(_DWORD **)(v12[72] + 312); v28 = (signed int)((double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v12 + 144))(v12) / 1.049999952316284); if ( v29 ) { v15 = sub_74CD00(&unk_AD8C08, *v13, 0); v16 = (char *)sub_40A910(1821010339); v14 = sub_7549E0(v16, v15); } else { v14 = sub_40A910(1486053303); } v17 = (char *)v14; if ( strlen(v14) ) { do { v18 = sub_900720(v26, v17, v28, 0); strncpy(v24, v17, v18 - v17); v24[v18 - v17] = 0; sub_401D10((int)&v30, v24, strlen(v24)); v19 = strlen(v18); v20 = "\n"; if ( !v19 ) v20 = (char *)&unk_9C1FFF; sub_401D10((int)&v30, v20, strlen(v20)); v17 = v18; } while ( strlen(v18) ); v12 = v25; } v21 = v30; if ( v32 < 0x10 ) v21 = &v30; (*(void (__thiscall **)(_DWORD *, void *))(*v12 + 472))(v12, v21); if ( v32 >= 0x10 ) operator delete(v30); } else { v22 = *v12; v23 = sub_40A910(-699391225); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v22 + 472))(v12, v23); } } } } // ACD9E8: using guessed type int dword_ACD9E8; //----- (00507180) -------------------------------------------------------- void __thiscall sub_507180(_DWORD *this, int a2) { int v2; // eax int v3; // ebx unsigned int *v4; // edi int v5; // eax int v6; // esi void *v7; // ebx int *v8; // esi int v9; // ecx void *v10; // [esp+10h] [ebp-20h] int v11; // [esp+14h] [ebp-1Ch] _DWORD *v12; // [esp+20h] [ebp-10h] int v13; // [esp+2Ch] [ebp-4h] int v14; // [esp+38h] [ebp+8h] v12 = this; v2 = sub_402BF0(this); v3 = v2; if ( v2 ) { v4 = *(unsigned int **)(v2 + 416); if ( v4 ) { v5 = v12[75]; v6 = 0; if ( v5 ) v6 = a2 + 12 * *(_DWORD *)(v5 + 344); sub_503690(*(_DWORD **)(v3 + 416)); v4[96] = v6; sub_4DDD20(&v10, (_DWORD *)(v3 + 388)); v7 = v10; v13 = 0; if ( (v11 - (signed int)v10) / 20 ) { v8 = (int *)((char *)v10 + 16); v14 = (v11 - (signed int)v10) / 20; do { v9 = *v8; v12 = (_DWORD *)*v8; if ( (double)(signed int)v12 > 0.0 ) sub_503700(v4, *(v8 - 4), *(v8 - 3), *(v8 - 2), *(v8 - 1), v9); v8 += 5; --v14; } while ( v14 ); } sub_8F82A0(&unk_BA6B10, v4); sub_8F81A0(&unk_BA6B10, v4); if ( v7 ) operator delete(v7); } } } //----- (005072B0) -------------------------------------------------------- void __thiscall sub_5072B0(_DWORD **this, int a2, unsigned int a3, unsigned int a4) { _DWORD **v4; // esi char *v5; // eax char *v6; // eax unsigned int v7; // edi int v8; // ecx int v9; // eax unsigned int v10; // ebx unsigned int v11; // edi _WORD *v12; // eax _DWORD *v13; // esi char *v14; // eax char *v15; // edi char *v16; // ebx unsigned int v17; // eax char *v18; // edx void *v19; // eax int v20; // [esp-8h] [ebp-58h] int v21; // [esp-4h] [ebp-54h] char *v22; // [esp+10h] [ebp-40h] _DWORD *v23; // [esp+14h] [ebp-3Ch] _DWORD *v24; // [esp+18h] [ebp-38h] int v25; // [esp+1Ch] [ebp-34h] int v26; // [esp+1Ch] [ebp-34h] void *v27; // [esp+24h] [ebp-2Ch] int v28; // [esp+34h] [ebp-1Ch] unsigned int v29; // [esp+38h] [ebp-18h] int v30; // [esp+4Ch] [ebp-4h] v4 = this; sub_503D90(this); if ( a2 ) { if ( v4[74] ) { (*(void (__stdcall **)(signed int))(*v4[74] + 256))(1); v4[74][84] = a2; sub_500080((_DWORD **)v4[74], (_DWORD *)(a4 >= a3)); if ( a4 >= a3 ) { v21 = a3; v20 = a4; v5 = (char *)sub_40A910(-2136305480); } else { v21 = a3; v20 = a4; v5 = (char *)sub_40A910(531400788); } v6 = sub_7549E0(v5, v20, v21); sub_8F2EA0((void **)v4[74], v6); } v7 = 0; do { v8 = v4[78][v7]; if ( v8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v8 + 256))(1); ++v7; } while ( v7 < 4 ); v9 = *(_DWORD *)(dword_ACD9F4 + 56); v10 = 0; v25 = 0; if ( v9 ) v10 = *(_DWORD *)(v9 + 40); v11 = 0; if ( v10 ) { do { v12 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9F4 + 4), v11); if ( v12 && *v12 == (_WORD)a2 ) { if ( !v25 ) { v13 = (_DWORD *)v4[78][2]; v23 = v13; if ( v13 ) { v29 = 15; v28 = 0; LOBYTE(v27) = 0; v30 = 0; sub_7549E0(0); sub_7549E0(0); v22 = sub_7549E0(0); v24 = *(_DWORD **)(v13[72] + 312); v26 = (signed int)((double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v13 + 144))(v13) / 1.049999952316284); v14 = (char *)sub_40A910(-900855029); v15 = sub_7549E0(v14, a3); if ( strlen(v15) ) { do { v16 = sub_900720(v24, v15, v26, 0); strncpy(v22, v15, v16 - v15); v22[v16 - v15] = 0; sub_401D10((int)&v27, v22, strlen(v22)); v17 = strlen(v16); v18 = "\n"; if ( !v17 ) v18 = (char *)&unk_9C2006; sub_401D10((int)&v27, v18, strlen(v18)); v15 = v16; } while ( strlen(v16) ); v13 = v23; } v19 = v27; if ( v29 < 0x10 ) v19 = &v27; (*(void (__thiscall **)(_DWORD *, void *))(*v13 + 472))(v13, v19); if ( v29 >= 0x10 ) operator delete(v27); } return; } ++v25; } ++v11; } while ( v11 < v10 ); } } } // ACD9F4: using guessed type int dword_ACD9F4; //----- (00507570) -------------------------------------------------------- _DWORD *__thiscall sub_507570(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CollectWin::`vftable'; v1[58] = &CollectWin::`vftable'; v7 = 0; v1[87] = 0; v2 = operator new(0x10u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[86] = v2; *v2 = v2; *(_DWORD *)(v1[86] + 4) = v1[86]; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9C2710: using guessed type void *CollectWin::`vftable'; // 9C272C: using guessed type void *CollectWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00507670) -------------------------------------------------------- LONG __thiscall sub_507670(void **this) { void **v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi v1 = this; *this = &CollectWin::`vftable'; this[58] = &CollectWin::`vftable'; if ( this[97] ) operator delete(this[97]); v1[97] = 0; v1[98] = 0; v1[99] = 0; if ( v1[93] ) operator delete(v1[93]); v1[93] = 0; v1[94] = 0; v1[95] = 0; if ( v1[89] ) operator delete(v1[89]); v1[89] = 0; v1[90] = 0; v1[91] = 0; v2 = (_DWORD **)v1[86]; v3 = *v2; *v2 = v2; *((_DWORD *)v1[86] + 1) = v1[86]; v1[87] = 0; if ( v3 != v1[86] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != v1[86] ); } operator delete(v1[86]); return sub_8F10F0(v1); } // 9C2710: using guessed type void *CollectWin::`vftable'; // 9C272C: using guessed type void *CollectWin::`vftable'; //----- (00507750) -------------------------------------------------------- volatile LONG *__cdecl sub_507750(int a1, int a2) { _DWORD *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x1ACu); v6 = v2; v7 = 0; if ( v2 ) v3 = sub_507570(v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (00507890) -------------------------------------------------------- void __userpurge sub_507890(_DWORD *a1@, double a2@, int a3, int a4) { volatile LONG *v4; // eax volatile LONG *v5; // eax switch ( a3 ) { case 0: v4 = (volatile LONG *)sub_402BF0(a1); sub_8F2BC0(v4, 5, 3, 0); break; case 1: v5 = (volatile LONG *)sub_402BF0(a1); sub_8F2BC0(v5, 5, 4, a4); break; case 2: sub_506ED0((int)a1, a2, a4); break; case 3: sub_504AD0(a1); break; case 4: sub_507180(a1, a4); break; case 5: sub_503A40(a1, a4); break; default: return; } } //----- (00507930) -------------------------------------------------------- void __thiscall sub_507930(int *this, int a2, int a3, int a4) { int *v4; // edi _DWORD *v5; // eax int v6; // edx int v7; // esi v4 = this; if ( a2 == 77 ) { sub_507180(this - 58, this[32]); } else if ( a2 == 78 ) { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) { v6 = v4[17]; LOWORD(v7) = 0; if ( v6 ) v7 = v4[32] + 12 * *(_DWORD *)(v6 + 344); sub_4BF3E0(v5, v7, 0); } } } //----- (005079A0) -------------------------------------------------------- int __thiscall sub_5079A0(_DWORD *this) { int result; // eax unsigned int v2; // esi int v3; // edi unsigned __int16 *v4; // ebx int v5; // edx int v6; // edi unsigned int v7; // eax unsigned int v8; // ecx unsigned int v9; // edi _DWORD *v10; // edi int v11; // ecx int v12; // edx int v13; // ecx _DWORD *v14; // [esp+8h] [ebp-20h] unsigned int v15; // [esp+Ch] [ebp-1Ch] unsigned int v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] int v20; // [esp+20h] [ebp-8h] result = *(_DWORD *)(dword_ACD9F4 + 56); v2 = 0; v3 = 0; v14 = this; if ( result ) v16 = *(_DWORD *)(result + 40); else v16 = 0; v15 = 0; if ( v16 > 0 ) { do { result = sub_7474E0((_DWORD *)(dword_ACD9F4 + 4), v2); v4 = (unsigned __int16 *)result; if ( result ) { result = *(unsigned __int16 *)result; if ( v3 != result ) { v5 = v4[3]; v6 = *(_DWORD *)(v4 + 1); v18 = *v4; v7 = v14[94]; v17 = v6; v19 = v5; LOBYTE(v20) = 0; if ( (unsigned int)&v17 >= v7 || (v8 = v14[93], v8 > (unsigned int)&v17) ) { if ( v7 == v14[95] ) sub_5096A0(v14 + 93, 1); result = v14[94]; if ( result ) { v11 = v18; v12 = v19; *(_DWORD *)result = v6; *(_DWORD *)(result + 4) = v11; v13 = v20; *(_DWORD *)(result + 8) = v12; *(_DWORD *)(result + 12) = v13; } } else { v9 = (unsigned int)&v17 - v8; if ( v7 == v14[95] ) sub_5096A0(v14 + 93, 1); result = v14[94]; v10 = (_DWORD *)(v14[93] + (v9 & 0xFFFFFFF0)); if ( result ) { *(_DWORD *)result = *v10; *(_DWORD *)(result + 4) = v10[1]; *(_DWORD *)(result + 8) = v10[2]; *(_DWORD *)(result + 12) = v10[3]; } } v14[94] += 16; v3 = *v4; v2 = v15; } } v15 = ++v2; } while ( v2 < v16 ); } return result; } // ACD9F4: using guessed type int dword_ACD9F4; //----- (00507AE0) -------------------------------------------------------- unsigned __int16 *__thiscall sub_507AE0(unsigned int *this) { int v1; // eax unsigned int v2; // ebx unsigned int v3; // esi _DWORD *v4; // edi unsigned __int16 *result; // eax int v6; // esi unsigned int v7; // [esp+Ch] [ebp-4h] v1 = *(_DWORD *)(dword_ACD9E8 + 56); v2 = 0; if ( v1 ) { v3 = *(_DWORD *)(v1 + 40); v7 = *(_DWORD *)(v1 + 40); } else { v7 = 0; v3 = 0; } v4 = this + 97; result = (unsigned __int16 *)sub_509780(this + 97, v3); if ( v3 > 0 ) { v6 = 0; do { result = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v2); if ( result ) { *(_DWORD *)(v6 + *v4) = *(_DWORD *)(result + 17); *(_DWORD *)(v6 + *v4 + 4) = *result; result = 0; *(_DWORD *)(v6 + *v4 + 8) = 0; *(_DWORD *)(v6 + *v4 + 12) = 0; *(_DWORD *)(v6 + *v4 + 16) = 0; } ++v2; v6 += 20; } while ( v2 < v7 ); } return result; } // ACD9E8: using guessed type int dword_ACD9E8; //----- (00507B60) -------------------------------------------------------- void __thiscall sub_507B60(int *this, int a2) { int v2; // edi bool v3; // zf int *v4; // eax unsigned int v5; // ebx int v6; // esi unsigned int v7; // ecx _DWORD *v8; // edx float *v9; // eax int v10; // ecx unsigned int v11; // ebx void *v12; // edi int v13; // eax void **v14; // esi void **v15; // esi unsigned int v16; // ebx _DWORD *v17; // esi unsigned int v18; // edi int i; // eax float *v20; // ecx int v21; // edi _DWORD *v22; // esi int v23; // eax int v24; // ebx unsigned int v25; // ecx char *v26; // esi char *v27; // eax char *v28; // edi int v29; // edi unsigned int v30; // ecx unsigned int v31; // ecx unsigned int v32; // edx char *v33; // edx char *v34; // ecx int v35; // ecx unsigned int v36; // ecx unsigned int v37; // ecx unsigned int v38; // edx char *v39; // edx unsigned int v40; // ecx unsigned int v41; // edx void *v42; // edi char *v43; // [esp+10h] [ebp-44h] char *v44; // [esp+14h] [ebp-40h] int v45; // [esp+18h] [ebp-3Ch] int v46; // [esp+20h] [ebp-34h] float v47; // [esp+24h] [ebp-30h] int *v48; // [esp+28h] [ebp-2Ch] int *v49; // [esp+2Ch] [ebp-28h] unsigned int v50; // [esp+30h] [ebp-24h] unsigned int v51; // [esp+34h] [ebp-20h] unsigned int v52; // [esp+38h] [ebp-1Ch] unsigned int v53; // [esp+3Ch] [ebp-18h] unsigned int v54; // [esp+40h] [ebp-14h] int v55; // [esp+50h] [ebp-4h] v2 = (int)this; v3 = this[101] == 0; v48 = this; if ( !v3 ) { sub_5098F0(this + 86, (unsigned __int8 (__cdecl *)(int *, int *))sub_503A20); v4 = **(int ***)(v2 + 344); v5 = 0; v50 = 0; v49 = v4; while ( v49 != *(int **)(v2 + 344) ) { v6 = *(_DWORD *)(v2 + 388); v7 = 0; if ( (*(_DWORD *)(v2 + 392) - v6) / 20 ) { v8 = (_DWORD *)(v6 + 4); while ( *v8 != v49[3] ) { ++v7; v8 += 5; if ( v7 >= (*(_DWORD *)(v2 + 392) - v6) / 20 ) goto LABEL_14; } v9 = (float *)(v6 + 20 * v7); if ( v9 ) { v47 = v9[4]; if ( SLODWORD(v47) > 0 ) { v10 = *((_DWORD *)v9 + 2); v11 = *((_DWORD *)v9 + 3); v12 = (void *)*((_DWORD *)v9 + 1); v13 = *(_DWORD *)(v48[101] + 344); v46 = v10; v14 = *(void ***)(v13 + 4 * v50); if ( v14 ) { (*((void (__thiscall **)(void **, bool))*v14 + 64))(v14, v12 != 0); sub_501B70(v14, v12, v46, v11, (void *)LODWORD(v47)); } ++v50; v2 = (int)v48; } } LABEL_14: v5 = v50; } v49 = (int *)*v49; if ( v5 >= 4 ) goto LABEL_21; } for ( ; v5 < 4; ++v5 ) { v15 = *(void ***)(*(_DWORD *)(*(_DWORD *)(v2 + 404) + 344) + 4 * v5); if ( v15 ) { (*((void (__thiscall **)(void **, _DWORD))*v15 + 64))(v15, 0); sub_501B70(v15, 0, 0, 0, 0); } } LABEL_21: v16 = 0; do { v17 = (_DWORD *)v48[97]; v18 = 0; for ( i = (v48[98] - (signed int)v17) / 20; i; --i ) { if ( *v17 == v16 && v17[4] > 0 ) ++v18; v17 += 5; } *(&v51 + v16) = v18; v47 = (double)v18; v20 = *(float **)(*(_DWORD *)(v48[101] + 296) + 4 * v16 + 4); if ( v20 && v47 != v20[75] ) { v20[75] = v47; sub_49F670(v20); } ++v16; } while ( v16 < 4 ); v21 = (int)v48; v22 = (_DWORD *)v48[101]; if ( v22[92] != a2 ) v22[93] = 0; v23 = sub_509060(a2); v22[92] = a2; v22[94] = v23 - 1; v47 = *(float *)(*(_DWORD *)(v21 + 404) + 372); v24 = 0; v25 = (*(_DWORD *)(v21 + 376) - *(_DWORD *)(v21 + 372)) >> 4; v26 = 0; v27 = 0; v50 = v25; v43 = 0; v44 = 0; v45 = 0; v55 = 0; v46 = 0; if ( v25 ) { v49 = 0; while ( 1 ) { v28 = (char *)v49 + *(_DWORD *)(v21 + 372); if ( *(_DWORD *)v28 == a2 ) break; LABEL_62: v49 += 4; v21 = (int)v48; if ( ++v46 >= v25 ) goto LABEL_63; } if ( v28 >= v27 || v26 > v28 ) { if ( v27 == (char *)v24 ) { v36 = (v27 - v26) >> 4; if ( v36 > 0xFFFFFFE ) LABEL_64: std::_Xlength_error("vector too long"); v37 = v36 + 1; v38 = (v24 - (signed int)v26) >> 4; if ( v37 > v38 ) { if ( 0xFFFFFFF - (v38 >> 1) >= v38 ) v39 = (char *)((v38 >> 1) + v38); else v39 = 0; if ( (unsigned int)v39 < v37 ) v39 = (char *)v37; sub_5093E0(&v43, v39); v24 = v45; v27 = v44; v26 = v43; } } if ( !v27 ) goto LABEL_61; *(_DWORD *)v27 = *(_DWORD *)v28; *((_DWORD *)v27 + 1) = *((_DWORD *)v28 + 1); *((_DWORD *)v27 + 2) = *((_DWORD *)v28 + 2); v35 = *((_DWORD *)v28 + 3); } else { v29 = v28 - v26; if ( v27 == (char *)v24 ) { v30 = (v27 - v26) >> 4; if ( v30 > 0xFFFFFFE ) goto LABEL_64; v31 = v30 + 1; v32 = (v24 - (signed int)v26) >> 4; if ( v31 > v32 ) { if ( 0xFFFFFFF - (v32 >> 1) >= v32 ) v33 = (char *)((v32 >> 1) + v32); else v33 = 0; if ( (unsigned int)v33 < v31 ) v33 = (char *)v31; sub_5093E0(&v43, v33); v24 = v45; v27 = v44; v26 = v43; } } v34 = &v26[v29 & 0xFFFFFFF0]; if ( !v27 ) goto LABEL_61; *(_DWORD *)v27 = *(_DWORD *)v34; *((_DWORD *)v27 + 1) = *((_DWORD *)v34 + 1); *((_DWORD *)v27 + 2) = *((_DWORD *)v34 + 2); v35 = *((_DWORD *)v34 + 3); } *((_DWORD *)v27 + 3) = v35; LABEL_61: v25 = v50; v27 += 16; v44 = v27; goto LABEL_62; } LABEL_63: v40 = 0; switch ( a2 ) { case 0: v40 = v51 + v52 + v53 + v54; break; case 1: v40 = v51; break; case 2: v40 = v52; break; case 3: v40 = v53; break; case 4: v40 = v54; break; default: break; } if ( LODWORD(v47) < (v27 - v26) >> 4 ) { v41 = 0; if ( v47 != 0.0 ) v41 = *(_DWORD *)&v26[16 * LODWORD(v47) - 8]; sub_504170( *(float **)(v21 + 404), *(_DWORD *)&v26[16 * LODWORD(v47) + 4], *(_DWORD *)&v26[16 * LODWORD(v47) + 8], v41, v40, v26[16 * LODWORD(v47) + 12]); } v42 = *(void **)(v21 + 404); sub_504F10(v42); sub_506820((int)v42); if ( v26 ) operator delete(v26); } } //----- (00507FC0) -------------------------------------------------------- void __thiscall sub_507FC0(_DWORD *this, int a2) { int v2; // esi int v3; // eax signed int v4; // ecx int v5; // ebx unsigned int v6; // eax unsigned int v7; // edx int v8; // edi int v9; // eax int v10; // ebx int v11; // edi int v12; // ebx _DWORD *v13; // edi unsigned int v14; // ecx int i; // eax int v16; // eax bool v17; // zf int v18; // ecx int v19; // edx unsigned int v20; // ebx unsigned int v21; // eax unsigned int v22; // ecx unsigned int *v23; // edi unsigned int v24; // ecx int v25; // edx void **v26; // eax void **v27; // esi void *v28; // edx char *v29; // ecx int *v30; // esi int v31; // edx BOOL v32; // eax int *v33; // ecx _DWORD *v34; // esi void **v35; // ecx void *v36; // [esp+10h] [ebp-40h] int v37; // [esp+14h] [ebp-3Ch] int v38; // [esp+18h] [ebp-38h] unsigned int v39; // [esp+20h] [ebp-30h] unsigned int v40; // [esp+24h] [ebp-2Ch] _DWORD *v41; // [esp+28h] [ebp-28h] int v42; // [esp+2Ch] [ebp-24h] void *v43; // [esp+30h] [ebp-20h] int v44; // [esp+34h] [ebp-1Ch] void **v45; // [esp+38h] [ebp-18h] char *v46; // [esp+3Ch] [ebp-14h] int v47; // [esp+4Ch] [ebp-4h] v2 = (int)this; v3 = this[102]; v41 = this; if ( v3 ) { v4 = 0; switch ( a2 ) { case 0: v4 = 1; break; case 1: v4 = 2; break; case 2: v4 = 3; break; case 3: v4 = 4; break; default: break; } v5 = *(_DWORD *)(v2 + 372); v6 = (*(_DWORD *)(v2 + 376) - v5) >> 4; v7 = 0; if ( !v6 ) goto LABEL_12; v8 = *(_DWORD *)(v2 + 372); while ( *(_DWORD *)v8 != v4 || *(_BYTE *)(v8 + 12) ) { ++v7; v8 += 16; if ( v7 >= v6 ) goto LABEL_12; } v12 = 16 * v7 + v5; if ( v12 ) { v13 = *(_DWORD **)(v2 + 388); v14 = 0; for ( i = (*(_DWORD *)(v2 + 392) - (signed int)v13) / 20; i; --i ) { if ( *v13 == a2 && v13[4] > 0 ) ++v14; v13 += 5; } sub_5072B0(*(_DWORD ***)(v2 + 408), *(_DWORD *)(v12 + 4), *(_DWORD *)(v12 + 8), v14); } else { LABEL_12: sub_503D90(*(_DWORD ***)(v2 + 408)); } v9 = *(_DWORD *)(*(_DWORD *)(v2 + 408) + 300); v10 = 0; if ( v9 ) v11 = *(_DWORD *)(v9 + 344); else v11 = 0; v16 = 0; v17 = (*(_DWORD *)(v2 + 392) - *(_DWORD *)(v2 + 388)) / 20 == 0; v18 = (*(_DWORD *)(v2 + 392) - *(_DWORD *)(v2 + 388)) / 20; v36 = 0; v37 = 0; v38 = 0; v47 = 1; if ( !v17 ) { v46 = (char *)v18; do { v19 = *(_DWORD *)(v2 + 388); if ( *(_DWORD *)(v10 + v19) == a2 ) sub_509840((unsigned int *)&v36, (_DWORD *)(v10 + v19)); v10 += 20; --v46; } while ( v46 ); v16 = v37; } v20 = 0; v21 = (v16 - (signed int)v36) / 20; v22 = 12 * v11; v40 = v21; v44 = 12 * v11; v23 = (unsigned int *)((char *)v36 + 240 * v11 + 12); while ( 1 ) { if ( v22 >= v21 ) { v34 = *(_DWORD **)(v2 + 408); v35 = *(void ***)(v20 + v34[86]); v45 = v35; if ( v35 ) { (*((void (__stdcall **)(_DWORD))*v35 + 64))(0); sub_501B70(v45, 0, 0, 0, 0); } v33 = *(int **)(v20 + v34[82]); if ( v33 ) { v31 = *v33; v32 = v34[91] == 0; LABEL_43: (*(void (__thiscall **)(int *, BOOL))(v31 + 256))(v33, v32); goto LABEL_44; } } else { v24 = *v23; v25 = *(v23 - 1); v43 = (void *)v23[1]; v26 = *(void ***)(v2 + 408); v39 = v24; v27 = *(void ***)((char *)v26[86] + v20); v42 = v25; v28 = (void *)*(v23 - 2); v46 = (char *)*(v23 - 2); v45 = v26; if ( v27 ) { (*((void (__thiscall **)(void **, bool))*v27 + 64))(v27, v28 != 0); sub_501B70(v27, v46, v42, v39, v43); v26 = v45; v28 = v46; } v29 = (char *)v26[82]; v30 = *(int **)&v29[v20]; if ( v30 ) { if ( v26[91] ) { v31 = *v30; v32 = 0; } else { v17 = v28 == 0; v31 = *v30; v32 = v17; } v33 = *(int **)&v29[v20]; goto LABEL_43; } } LABEL_44: v22 = v44 + 1; v20 += 4; v23 += 5; ++v44; if ( v20 >= 0x30 ) { if ( v36 ) operator delete(v36); return; } v2 = (int)v41; v21 = v40; } } } //----- (005082B0) -------------------------------------------------------- void __thiscall sub_5082B0(int *this, int a2) { int *v2; // esi int v3; // ebx _DWORD *v4; // edi int v5; // eax int v6; // ecx int **v7; // edi int v8; // eax int *v9; // ecx v2 = this; v3 = a2 - 2; switch ( a2 ) { case 0: (*(void (__stdcall **)(signed int))(*(_DWORD *)this[101] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[102] + 256))(0); sub_507B60(v2, 0); break; case 1: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[101] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[102] + 256))(1); v4 = (_DWORD *)v2[102]; v4[91] = 0; sub_503D90((_DWORD **)v4); v5 = v4[75]; if ( v5 ) { *(_DWORD *)(v5 + 344) = 0; *(_DWORD *)(v4[75] + 348) = 4; *(_DWORD *)(v4[75] + 352) = 0; *(_DWORD *)(v4[75] + 356) = 0; sub_500180((int *)v4[75]); } v6 = v4[77]; if ( v6 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v6 + 256))(v4[91] == 1); sub_504C00(v2); break; case 2: case 3: case 4: case 5: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[101] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[102] + 256))(1); v7 = (int **)v2[102]; v7[91] = (int *)1; v8 = sub_509010(v3); sub_503B00(v7, 0, (v8 - 1) / 0xCu, 1, v3); v9 = v7[77]; if ( v9 ) (*(void (__stdcall **)(bool))(*v9 + 256))(v7[91] == (int *)1); sub_507FC0(v2, v3); break; default: return; } } //----- (00508450) -------------------------------------------------------- unsigned __int16 *__thiscall sub_508450(unsigned int *this) { unsigned int *v1; // edi unsigned int v2; // eax v1 = this; sub_5095B0(this + 86, 0); sub_4E6D30(v1 + 89, 0x3Cu); v2 = 0; do { *(_DWORD *)(v2 + v1[89]) = 0; v2 += 4; } while ( v2 < 0xF0 ); sub_5079A0(v1); return sub_507AE0(v1); } //----- (005084A0) -------------------------------------------------------- void __thiscall sub_5084A0(int *this, int a2) { int v2; // eax unsigned int v3; // ebx unsigned int v4; // esi _WORD *v5; // eax _WORD *v6; // edi _DWORD *v7; // esi unsigned int v8; // eax unsigned int v9; // ecx int v10; // ecx int *v11; // [esp+8h] [ebp-8h] unsigned int v12; // [esp+Ch] [ebp-4h] v2 = *(_DWORD *)(dword_ACD9E8 + 56); v11 = this; if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { while ( 1 ) { v5 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v4); v6 = v5; if ( v5 ) { if ( *v5 == (_WORD)a2 ) break; } if ( ++v4 >= v3 ) return; } v7 = (_DWORD *)v11[97]; v8 = (v11[98] - (signed int)v7) / 20; v12 = 0; v9 = 0; if ( v8 ) { do { if ( v7[1] == a2 ) break; if ( *v7 == *(_DWORD *)(v6 + 17) ) ++v12; ++v9; v7 += 5; } while ( v9 < v8 ); } sub_5082B0(v11, *(_DWORD *)(v6 + 17) + 2); v10 = v11[102]; if ( v10 ) { if ( *(_DWORD *)(v10 + 300) ) { *(_DWORD *)(*(_DWORD *)(v10 + 300) + 344) = v12 / 0xC; sub_500180(*(int **)(v10 + 300)); } } sub_507FC0(v11, *(_DWORD *)(v6 + 17)); } } // ACD9E8: using guessed type int dword_ACD9E8; //----- (005085B0) -------------------------------------------------------- void __thiscall sub_5085B0(int *this, int a2) { int *v2; // esi int v3; // eax v2 = this; if ( (*(unsigned __int8 (**)(void))(*this + 260))() ) { if ( v2[101] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[101] + 260))() ) { sub_507B60(v2, 0); } else if ( v2[102] && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[102] + 260))() ) { v3 = *(_DWORD *)(v2[102] + 364); if ( v3 ) { if ( v3 == 1 ) sub_507FC0(v2, a2); } else { sub_504C00(v2); } } } } //----- (00508640) -------------------------------------------------------- char __thiscall sub_508640(void *this, void (__thiscall **a2)(_DWORD, int), int a3) { int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // eax volatile LONG *v9; // edi const CHAR *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // edi volatile LONG **v13; // edi volatile LONG **v14; // eax volatile LONG **v15; // eax CHAR *v16; // eax CHAR *v17; // eax CHAR *v18; // eax CHAR *v19; // eax CHAR *v20; // eax CHAR *v21; // eax unsigned int v22; // eax bool v23; // cf char *v24; // ecx char *v25; // eax int v26; // edi char *v27; // eax volatile LONG **v28; // edi int v29; // eax char *v30; // eax int v31; // eax char *v32; // eax void **v33; // edi const char *v34; // eax volatile LONG *v35; // eax int v36; // ecx volatile LONG *v37; // eax void (__thiscall **v38)(_DWORD, _DWORD); // edi int *v39; // edi int *v40; // edi int v41; // edx int v42; // eax int (__thiscall *v43)(int *); // edx int v44; // eax unsigned int v45; // eax void (__thiscall ***v46)(_DWORD, signed int); // esi int v47; // [esp+30h] [ebp-190h] _DWORD *v48; // [esp+34h] [ebp-18Ch] int v49; // [esp+38h] [ebp-188h] int v50; // [esp+3Ch] [ebp-184h] void (__thiscall **v51)(_DWORD, int); // [esp+40h] [ebp-180h] unsigned int v52; // [esp+44h] [ebp-17Ch] char *v53; // [esp+48h] [ebp-178h] int v54; // [esp+4Ch] [ebp-174h] int v55; // [esp+50h] [ebp-170h] int v56; // [esp+54h] [ebp-16Ch] int v57; // [esp+58h] [ebp-168h] int v58; // [esp+5Ch] [ebp-164h] char v59[16]; // [esp+60h] [ebp-160h] int v60; // [esp+70h] [ebp-150h] int v61; // [esp+74h] [ebp-14Ch] char v62; // [esp+7Ch] [ebp-144h] int v63; // [esp+8Ch] [ebp-134h] int v64; // [esp+90h] [ebp-130h] char v65; // [esp+98h] [ebp-128h] int v66; // [esp+A8h] [ebp-118h] int v67; // [esp+ACh] [ebp-114h] char v68; // [esp+B4h] [ebp-10Ch] int v69; // [esp+C4h] [ebp-FCh] int v70; // [esp+C8h] [ebp-F8h] char v71; // [esp+D0h] [ebp-F0h] int v72; // [esp+E0h] [ebp-E0h] int v73; // [esp+E4h] [ebp-DCh] char v74; // [esp+ECh] [ebp-D4h] int v75; // [esp+FCh] [ebp-C4h] int v76; // [esp+100h] [ebp-C0h] int v77[4]; // [esp+108h] [ebp-B8h] int v78; // [esp+118h] [ebp-A8h] int v79[2]; // [esp+11Ch] [ebp-A4h] char v80; // [esp+124h] [ebp-9Ch] int v81; // [esp+134h] [ebp-8Ch] int v82; // [esp+138h] [ebp-88h] char v83; // [esp+140h] [ebp-80h] int v84; // [esp+150h] [ebp-70h] int v85; // [esp+154h] [ebp-6Ch] char v86; // [esp+15Ch] [ebp-64h] int v87; // [esp+16Ch] [ebp-54h] int v88; // [esp+170h] [ebp-50h] char v89; // [esp+178h] [ebp-48h] int v90; // [esp+188h] [ebp-38h] int v91; // [esp+18Ch] [ebp-34h] char v92; // [esp+194h] [ebp-2Ch] int v93; // [esp+1A4h] [ebp-1Ch] int v94; // [esp+1A8h] [ebp-18h] int v95; // [esp+1BCh] [ebp-4h] v3 = (int)this; v51 = a2; v58 = 0; v95 = 0; v47 = 0; v49 = 0; v56 = 0; v55 = 0; v57 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\Collect_Main.nif"); sub_8F66B0(v4, (int)&v58, v57); if ( !v58 ) return 0; v5 = sub_8FB140(v58, (int)"Frame", (int)&v56, (int)&v55, 0); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v5, 0, (int)a2, (int)"CollectWin", 0) || !sub_8F71E0(v58, (int)"WinTitle", &v56, &v55, &v47, &v49) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v58; v95 = -1; if ( v58 && !InterlockedDecrement((volatile LONG *)(v58 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_421050(7); v9 = sub_8F4A20(v56, v55, v47, v49, v8, v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v9 + 488))(v9, 5); if ( (_BYTE)a3 ) v10 = sub_40A910(-2019657590); else v10 = sub_40A910(-2136179776); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(*v9 + 472))(v9, v10); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v11 = sub_8FB140(v58, (int)"Theme", (int)&v56, (int)&v55, 0); sub_8F3EB0(v56, v55, (int)v11, v3, 0, 0); v12 = sub_8FB140(v58, (int)"ClsNor", (int)&v56, (int)&v55, 0); sub_8FB650(v12, v58, (int)"ClsClick"); sub_8FB650(v12, v58, (int)"ClsOver"); sub_8FE0F0(v56, v55, (int)v12, v3, 0, 0, 0); v13 = sub_8FB140(v58, (int)"HelpLinkNor", (int)&v56, (int)&v55, 0); sub_8FB650(v13, v58, (int)"HelpLinkClick"); sub_8FB650(v13, v58, (int)"HelpLinkOver"); sub_8FE0F0(v56, v55, (int)v13, v3, 8, 0, 0); v14 = sub_8FB140(v58, (int)"Panel01", (int)&v56, (int)&v55, 0); sub_8F3EB0(v56, v55, (int)v14, v3, 0, 0); v15 = sub_8FB140(v58, (int)"Panel02", (int)&v56, (int)&v55, 0); sub_8F3EB0(v56, v55, (int)v15, v3, 0, 0); v61 = 15; v60 = 0; v59[0] = 0; sub_4018E0(v59, "Main", 4u); LOBYTE(v95) = 1; v64 = 15; v63 = 0; v62 = 0; sub_4018E0(&v62, "MyList", 6u); LOBYTE(v95) = 2; v67 = 15; v66 = 0; v65 = 0; sub_4018E0(&v65, "SRank", 5u); LOBYTE(v95) = 3; v70 = 15; v69 = 0; v68 = 0; sub_4018E0(&v68, "ARank", 5u); LOBYTE(v95) = 4; v73 = 15; v72 = 0; v71 = 0; sub_4018E0(&v71, "BRank", 5u); LOBYTE(v95) = 5; v76 = 15; v75 = 0; v74 = 0; sub_4018E0(&v74, "CRank", 5u); LOBYTE(v95) = 6; v16 = (CHAR *)sub_40A910(699892336); v79[0] = 15; v78 = 0; LOBYTE(v77[0]) = 0; v57 = (int)(v16 + 1); sub_4018E0(v77, v16, strlen(v16)); LOBYTE(v95) = 7; v17 = (CHAR *)sub_40A910(155200808); v82 = 15; v81 = 0; v80 = 0; v57 = (int)(v17 + 1); sub_4018E0(&v80, v17, strlen(v17)); LOBYTE(v95) = 8; v18 = (CHAR *)sub_40A910(-856113884); v85 = 15; v84 = 0; v83 = 0; v57 = (int)(v18 + 1); sub_4018E0(&v83, v18, strlen(v18)); LOBYTE(v95) = 9; v19 = (CHAR *)sub_40A910(-1158103772); v88 = 15; v87 = 0; v86 = 0; v57 = (int)(v19 + 1); sub_4018E0(&v86, v19, strlen(v19)); LOBYTE(v95) = 10; v20 = (CHAR *)sub_40A910(-1141326556); v91 = 15; v90 = 0; v89 = 0; v57 = (int)(v20 + 1); sub_4018E0(&v89, v20, strlen(v20)); LOBYTE(v95) = 11; v21 = (CHAR *)sub_40A910(-1124549340); v94 = 15; v93 = 0; v92 = 0; sub_4018E0(&v92, v21, strlen(v21)); v22 = 0; LOBYTE(v95) = 12; v50 = 0; v52 = 0; v57 = 6; while ( 1 ) { v23 = *(unsigned int *)((char *)&v61 + v22) < 0x10; v24 = (char *)&v61 + v22; v25 = &v59[v22]; v48 = v24; v53 = v25; if ( !v23 ) v25 = *(char **)v25; v26 = v58; v27 = sub_7549E0("%sNor", v25); v28 = sub_8FB140(v26, (int)v27, (int)&v56, (int)&v55, 0); v29 = (int)(*v48 < 0x10u ? v53 : *(_DWORD *)v53); v54 = v58; v30 = sub_7549E0("%sClick", v29); sub_8FB650(v28, v54, (int)v30); v31 = (int)(*v48 < 0x10u ? v53 : *(_DWORD *)v53); v54 = v58; v32 = sub_7549E0("%sOver", v31); sub_8FB650(v28, v54, (int)v32); v33 = (void **)sub_8FE0F0(v56, v55, (int)v28, v3, 1, 0, 0); (*((void (__thiscall **)(void **, int))*v33 + 130))(v33, v50); v33[68] = (void *)dword_AD01E8; v34 = (const char *)((unsigned int)v79[v52 / 4] < 0x10 ? &v77[v52 / 4] : v77[v52 / 4]); sub_8F2EA0(v33, v34); v52 += 28; ++v50; if ( !--v57 ) break; v22 = v52; } v35 = sub_5055C0(v58, v3, a3); v36 = v58; *(_DWORD *)(v3 + 404) = v35; v37 = sub_506CD0(v36, v3, a3); *(_DWORD *)(v3 + 408) = v37; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 256))(v37, 0); if ( !(_BYTE)a3 ) { v38 = v51; *(_DWORD *)(v3 + 412) = sub_5027B0((int)v51); *(_DWORD *)(v3 + 416) = sub_5034E0((int)v38); v39 = (int *)(v3 + 420); v57 = 2; do { *v39 = sub_5013D0((int)v51); ++v39; --v57; } while ( v57 ); v40 = *(int **)(v3 + 420); v41 = *v40; v51 = (void (__thiscall **)(_DWORD, int))(**(_DWORD **)(v3 + 424) + 176); v42 = (*(int (__thiscall **)(int *))(v41 + 168))(v40); v43 = *(int (__thiscall **)(int *))(*v40 + 148); v54 = v42; v44 = v43(v40); (*v51)(*(_DWORD *)(v3 + 424), v44 + v54); } sub_5095B0((_DWORD *)(v3 + 344), 0); sub_4E6D30((_DWORD *)(v3 + 356), 0x3Cu); v45 = 0; do { *(_DWORD *)(v45 + *(_DWORD *)(v3 + 356)) = 0; v45 += 4; } while ( v45 < 0xF0 ); sub_5079A0((_DWORD *)v3); sub_507AE0((unsigned int *)v3); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 0.5); sub_5085B0((int *)v3, 0); LOBYTE(v95) = 6; `eh vector destructor iterator'(v77, 0x1Cu, 6, sub_636A10); LOBYTE(v95) = 0; `eh vector destructor iterator'(v59, 0x1Cu, 6, sub_636A10); v95 = -1; if ( v58 ) { v46 = (void (__thiscall ***)(_DWORD, signed int))v58; if ( !InterlockedDecrement((volatile LONG *)(v58 + 4)) ) { if ( v46 ) (**v46)(v46, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // 508640: using guessed type char var_160[16]; // 508640: using guessed type int var_A4[2]; // 508640: using guessed type int var_B8[4]; //----- (00508F50) -------------------------------------------------------- void __thiscall sub_508F50(volatile LONG *this, int a2, int a3) { switch ( a2 ) { case 0: sub_8F2BC0(this, 1, 0, 0); break; case 1: sub_5082B0((int *)this, a3); break; case 2: sub_507B60((int *)this, a3); break; case 3: sub_504C00(this); break; case 4: sub_507FC0(this, a3); break; case 8: sub_503BB0(); break; default: return; } } //----- (00508FD0) -------------------------------------------------------- void __thiscall sub_508FD0(int *this) { int *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*(_DWORD *)this[101] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[102] + 256))(0); sub_507B60(v1, 0); } //----- (00509010) -------------------------------------------------------- int __cdecl sub_509010(int a1) { int v1; // eax int v2; // ebx unsigned int v3; // edi unsigned int v4; // esi int v5; // eax v1 = *(_DWORD *)(dword_ACD9E8 + 56); v2 = 0; if ( v1 ) v3 = *(_DWORD *)(v1 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { v5 = sub_7474E0((_DWORD *)(dword_ACD9E8 + 4), v4); if ( v5 && *(_DWORD *)(v5 + 34) == a1 ) ++v2; ++v4; } while ( v4 < v3 ); } return v2; } // ACD9E8: using guessed type int dword_ACD9E8; //----- (00509060) -------------------------------------------------------- int __cdecl sub_509060(int a1) { int v1; // eax int v2; // edi unsigned int v3; // ebx unsigned int v4; // esi unsigned __int16 *v5; // eax int v7; // [esp+Ch] [ebp-4h] v1 = *(_DWORD *)(dword_ACD9F4 + 56); v2 = 0; v7 = 0; if ( v1 ) v3 = *(_DWORD *)(v1 + 40); else v3 = 0; v4 = 0; if ( !v3 ) return 0; do { v5 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD9F4 + 4), v4); if ( v5 && *v5 != v2 && *(_DWORD *)(v5 + 1) == a1 ) { ++v7; v2 = *v5; } ++v4; } while ( v4 < v3 ); return v7; } // ACD9F4: using guessed type int dword_ACD9F4; //----- (005090D0) -------------------------------------------------------- void __thiscall sub_5090D0(void *this) { void *v1; // esi _DWORD *v2; // eax void **v3; // [esp+4h] [ebp-10h] char *v4; // [esp+10h] [ebp-4h] v1 = this; *((_DWORD *)this + 1) = 0; v2 = operator new(0x10u); if ( !v2 ) { v4 = 0; std::exception::exception((std::exception *)&v3, (const char *const *)&v4); v3 = &std::bad_alloc::`vftable'; _CxxThrowException(&v3, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v1 = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)v1 + 4) = *(_DWORD *)v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00509130) -------------------------------------------------------- char **__stdcall sub_509130(char *a1, int a2, int a3) { char **result; // eax int v4; // edx int v5; // edx void **v6; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x10u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) { v5 = a3; result[2] = *(char **)a3; result[3] = *(char **)(v5 + 4); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005091A0) -------------------------------------------------------- _DWORD *__usercall sub_5091A0@(_DWORD *result@, _DWORD *a2, int a3) { int v3; // edx v3 = a3; if ( a3 ) { result = a2; do { if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 0; result[4] = 0; } result += 5; --v3; } while ( v3 ); } return result; } //----- (005091D0) -------------------------------------------------------- void __cdecl sub_5091D0(_DWORD *a1, int a2) { int v2; // ecx _DWORD *v3; // eax v2 = a2; if ( a2 > 0 ) { v3 = a1; do { if ( v3 ) { *v3 = 0; v3[1] = 0; } --v2; v3 += 2; } while ( v2 > 0 ); } } //----- (00509200) -------------------------------------------------------- _DWORD *__cdecl sub_509200(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 4 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; } v3 += 4; } return result; } //----- (00509240) -------------------------------------------------------- char **__stdcall sub_509240(char *a1, int a2) { char **v2; // eax char **v3; // esi int v4; // ecx int v6; // [esp+0h] [ebp-30h] void **v7; // [esp+10h] [ebp-20h] void *v8; // [esp+1Ch] [ebp-14h] int *v9; // [esp+20h] [ebp-10h] int v10; // [esp+2Ch] [ebp-4h] v9 = &v6; v2 = (char **)operator new(0x10u); v3 = v2; v8 = v2; if ( !v2 ) { a1 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a1); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v4 = a2; *v2 = a1; v10 = 0; v2[1] = (char *)v4; sub_5091D0(v2 + 2, 1); return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00509300) -------------------------------------------------------- void __thiscall sub_509300(int ***this, int ***a2, unsigned __int8 (__cdecl *a3)(int *, int *)) { int ***v3; // edx int **v4; // eax int *v5; // esi int **v6; // edi int *v7; // ebx int v8; // edi int **v9; // [esp+0h] [ebp-Ch] int ***v10; // [esp+4h] [ebp-8h] int **v11; // [esp+8h] [ebp-4h] v3 = a2; v10 = this; if ( a2 != this ) { v4 = *a2; v5 = **a2; v6 = *this; v7 = **this; v9 = *this; v11 = *a2; if ( v7 == (int *)*this ) { LABEL_9: if ( v5 != (int *)v4 ) sub_74E3E0(this, (int)v6, v3, (int)v5, (int)v4, (unsigned int)v3[1]); } else { while ( v5 != (int *)v4 ) { if ( a3(v5 + 2, v7 + 2) ) { v8 = *v5; sub_74E3E0(v10, (int)v7, a2, (int)v5, *v5, 1u); v5 = (int *)v8; v6 = v9; } else { v7 = (int *)*v7; } v4 = v11; if ( v7 == (int *)v6 ) { v3 = a2; this = v10; goto LABEL_9; } } } } } //----- (00509380) -------------------------------------------------------- void *__thiscall sub_509380(void *this, char a2) { void *v2; // esi v2 = this; sub_5050E0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005093B0) -------------------------------------------------------- void *__thiscall sub_5093B0(void *this, char a2) { void *v2; // esi v2 = this; sub_5051A0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005093E0) -------------------------------------------------------- char *__thiscall sub_5093E0(_DWORD *this, char *a2) { _DWORD *v2; // esi char *result; // eax char *v4; // ebx _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 int v7; // edi int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; result = a2; if ( (unsigned int)a2 > 0xFFFFFFF ) std::_Xlength_error("vector too long"); if ( (this[2] - *this) >> 4 < (unsigned int)a2 ) { v4 = (char *)sub_7031B0(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v9 = v4; v11 = 0; sub_509200(v6, v5, v4); v7 = v2[1] - *v2; if ( *v2 ) operator delete((void *)*v2); result = &v4[16 * (_DWORD)a2]; v2[2] = result; v2[1] = &v4[v7 & 0xFFFFFFF0]; *v2 = v4; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005094B0) -------------------------------------------------------- unsigned int __thiscall sub_5094B0(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0xCCCCCCC ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 20; if ( result < (unsigned int)a2 ) { v4 = sub_71A550(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v10 = v4; v12 = 0; sub_5038A0(v6, v5, v4); v7 = (signed int)((unsigned __int64)(1717986919i64 * (signed int)(v2[1] - *v2)) >> 32) >> 3; v8 = v7 + (v7 >> 31); if ( *v2 ) operator delete((void *)*v2); result = (unsigned int)v10; v2[2] = (unsigned int)v10 + 20 * (_DWORD)a2; v2[1] = result + 20 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005095B0) -------------------------------------------------------- void __thiscall sub_5095B0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // eax unsigned int v4; // ebx int v5; // edi char **v6; // eax int v7; // ecx _DWORD **v10; // eax int v11; // [esp+0h] [ebp-24h] _DWORD *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] int v15; // [esp+2Ch] [ebp+8h] v13 = &v11; v2 = this; v12 = this; v3 = this[1]; v4 = a2; if ( a2 <= v3 ) { if ( a2 < v3 ) { do { v10 = *(_DWORD ***)(*v2 + 4); if ( v10 != (_DWORD **)*v2 ) { *v10[1] = *v10; (*v10)[1] = v10[1]; operator delete(v10); --v2[1]; } } while ( a2 < v2[1] ); } } else { v15 = 0; v14 = 0; while ( v2[1] < v4 ) { v5 = *v2; v6 = sub_509240((char *)*v2, *(_DWORD *)(*v2 + 4)); v7 = v2[1]; if ( (unsigned int)(536870910 - v7) < 1 ) std::_Xlength_error("list too long"); ++v15; v2[1] = v7 + 1; *(_DWORD *)(v5 + 4) = v6; *(_DWORD *)v6[1] = v6; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005096A0) -------------------------------------------------------- char *__thiscall sub_5096A0(_DWORD *this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (this[1] - *this) >> 4; if ( 0xFFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (this[2] - *this) >> 4; if ( (unsigned int)result > v4 ) { if ( 0xFFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_5093E0(this, v5); } return result; } //----- (00509700) -------------------------------------------------------- unsigned int __thiscall sub_509700(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 20; if ( 214748364 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 20; if ( v3 > result ) { if ( 214748364 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_5094B0(this, v5); } return result; } //----- (00509780) -------------------------------------------------------- int __thiscall sub_509780(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi _DWORD *v3; // ebx int v4; // ecx int result; // eax v2 = this; v3 = (_DWORD *)this[1]; v4 = this[1] - *this; result = v4 / 20; if ( v4 / 20 <= a2 ) { if ( v4 / 20 < a2 ) { sub_509700(v2, a2 - result); sub_5091A0((_DWORD *)((signed int)(v2[1] - *v2) / 20), (_DWORD *)v2[1], a2 - (signed int)(v2[1] - *v2) / 20); result = (signed int)(v2[1] - *v2) / 20; v2[1] += 20 * (a2 - result); } } else { result = *v2 + 20 * a2; if ( (_DWORD *)result != v3 ) { result = (int)sub_503860(v3, v3, (_DWORD *)(*v2 + 20 * a2)); v2[1] = result; } } return result; } //----- (00509840) -------------------------------------------------------- _DWORD *__thiscall sub_509840(unsigned int *this, _DWORD *a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx _DWORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_509700(v2, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *a2; result[1] = a2[1]; result[2] = a2[2]; result[3] = a2[3]; result[4] = a2[4]; } } else { v4 = (signed int)((unsigned __int64)(1717986919i64 * (signed int)((signed int)a2 - *v2)) >> 32) >> 3; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_509700(v2, 1); v6 = (_DWORD *)(*v2 + 20 * v5); result = (_DWORD *)v2[1]; if ( result ) { *result = *v6; result[1] = v6[1]; result[2] = v6[2]; result[3] = v6[3]; result[4] = v6[4]; v2[1] += 20; return result; } } v2[1] += 20; return result; } //----- (005098F0) -------------------------------------------------------- void __thiscall sub_5098F0(int *this, unsigned __int8 (__cdecl *a2)(int *, int *)) { int *v2; // esi bool v3; // cf int **v4; // eax int **v5; // ebx unsigned int v6; // eax int v7; // eax int v8; // ecx int *v9; // edx int v10; // edi unsigned int v11; // edi char *v12; // esi int v13; // ecx int v14; // eax int *v15; // eax int v16; // ecx int v17; // edx int v18; // ecx int ***v19; // edi char *v20; // eax int *v21; // eax int *v22; // esi void **v23; // [esp+10h] [ebp-170h] char *v24; // [esp+1Ch] [ebp-164h] unsigned __int8 (__cdecl *v25)(int *, int *); // [esp+20h] [ebp-160h] int **v26; // [esp+24h] [ebp-15Ch] int v27; // [esp+28h] [ebp-158h] char v28[4]; // [esp+2Ch] [ebp-154h] int *v29; // [esp+30h] [ebp-150h] unsigned int v30; // [esp+34h] [ebp-14Ch] char v31[12]; // [esp+38h] [ebp-148h] char v32; // [esp+44h] [ebp-13Ch] char v33; // [esp+158h] [ebp-28h] int v34; // [esp+17Ch] [ebp-4h] v2 = this; v3 = (unsigned int)this[1] < 2; v29 = this; v25 = a2; if ( !v3 ) { v27 = 0; v4 = (int **)operator new(0x10u); if ( !v4 ) { v24 = 0; std::exception::exception((std::exception *)&v23, (const char *const *)&v24); v23 = &std::bad_alloc::`vftable'; _CxxThrowException(&v23, &_TI2_AVbad_alloc_std__); } v5 = v4; *v4 = (int *)v4; v26 = v4; v4[1] = (int *)v4; v34 = 0; `eh vector constructor iterator'(v31, 0xCu, 26, sub_5090D0, sub_4E6E90); v6 = 0; LOBYTE(v34) = 1; v30 = 0; if ( v2[1] ) { do { v7 = **(_DWORD **)*v2; v8 = *(_DWORD *)*v2; v9 = *v5; if ( &v26 != (int ***)v2 ) { if ( (unsigned int)(536870910 - v27) < 1 ) std::_Xlength_error("list too long"); ++v27; --v2[1]; } **(_DWORD **)(v8 + 4) = v7; **(_DWORD **)(v7 + 4) = v9; *(_DWORD *)v9[1] = v8; v10 = v9[1]; v9[1] = *(_DWORD *)(v7 + 4); *(_DWORD *)(v7 + 4) = *(_DWORD *)(v8 + 4); *(_DWORD *)(v8 + 4) = v10; v11 = 0; if ( !v30 ) goto LABEL_38; v12 = v31; do { if ( !*((_DWORD *)v12 + 1) ) break; sub_509300((int ***)v12, &v26, v25); if ( v12 == (char *)&v26 ) { v5 = v26; } else { v5 = *(int ***)v12; v13 = v27; *(_DWORD *)v12 = v26; v14 = *((_DWORD *)v12 + 1); v26 = v5; *((_DWORD *)v12 + 1) = v13; v27 = v14; } ++v11; v12 += 12; } while ( v11 < v30 ); if ( v11 == 25 ) { sub_509300((int ***)&v33, &v26, v25); v5 = v26; v2 = v29; } else { LABEL_38: v2 = v29; v15 = (int *)&v31[12 * v11]; if ( v15 != (int *)&v26 ) { v16 = *v15; v17 = v27; *v15 = (int)v5; v5 = (int **)v16; v18 = v15[1]; v26 = v5; v15[1] = v17; v27 = v18; } if ( v11 == v30 ) ++v30; } } while ( v2[1] ); v6 = v30; } if ( v6 > 1 ) { v19 = (int ***)&v32; v29 = (int *)(v6 - 1); do { sub_509300(v19, v19 - 3, v25); v19 += 3; v29 = (int *)((char *)v29 - 1); } while ( v29 ); v6 = v30; } v20 = &v28[12 * v6]; v25 = *(unsigned __int8 (__cdecl **)(int *, int *))*v2; if ( v2 != (int *)v20 && *((_DWORD *)v20 + 1) ) sub_74E3E0(v2, (int)v25, v20, **(_DWORD **)v20, *(_DWORD *)v20, *((_DWORD *)v20 + 1)); LOBYTE(v34) = 0; `eh vector destructor iterator'(v31, 0xCu, 26, sub_4E6E90); v21 = *v5; *v5 = (int *)v5; v5[1] = (int *)v5; if ( v21 != (int *)v5 ) { do { v22 = (int *)*v21; operator delete(v21); v21 = v22; } while ( v22 != (int *)v5 ); } operator delete(v5); } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // 5098F0: using guessed type char var_148[12]; // 5098F0: using guessed type char var_154[4]; //----- (00509BE0) -------------------------------------------------------- void *__thiscall sub_509BE0(void *this, char a2) { void *v2; // esi v2 = this; sub_507670((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00509C10) -------------------------------------------------------- char __thiscall sub_509C10(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi char result; // al v4 = this; result = sub_8F2900(this, 0, 0, a2, a3, 0, 0, 0); if ( result ) { v4[72] = a4; result = 1; } return result; } //----- (00509CA0) -------------------------------------------------------- void __thiscall sub_509CA0(_DWORD *this, int a2, _DWORD *a3, int a4) { if ( a2 == 27 && a3 && *a3 && *a3 == 1 ) this[3] = 2; } //----- (00509CD0) -------------------------------------------------------- void __thiscall sub_509CD0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; if ( dword_BA6AB4 >= 1 && ((unsigned __int8 (__stdcall *)(LONG, LONG))(*this)[83])(pt.x, pt.y) == 1 && *(_DWORD *)(sub_4A3820() + 4) == 1 ) { sub_8EEE70(v2[72], 266, 0, 0); } } // BA6AB4: using guessed type int dword_BA6AB4; //----- (00509D20) -------------------------------------------------------- unsigned int __thiscall sub_509D20(int this) { unsigned int result; // eax _DWORD **v2; // esi bool v3; // zf int v4; // [esp+4h] [ebp-Ch] int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] result = *(unsigned __int16 *)(this + 68); switch ( result >> 10 ) { case 3u: result &= 0x3FFu; if ( result > 0x62 ) goto LABEL_15; result = dword_ADA8D8[result]; goto LABEL_14; case 8u: result &= 0x3FFu; if ( result >= 0x1E ) goto LABEL_15; result = dword_ADA534[result]; goto LABEL_14; case 9u: result &= 0x3FFu; if ( result >= 0xC0 ) goto LABEL_15; result = dword_ADA234[result]; goto LABEL_14; case 0xDu: result &= 0x3FFu; if ( result > 0x62 ) goto LABEL_15; result = dword_ADAA60[result]; goto LABEL_14; case 0xEu: result &= 0x3FFu; if ( result > 0x62 ) goto LABEL_15; result = dword_ADABE8[result]; goto LABEL_14; case 0x10u: result &= 0x3FFu; if ( result > 0x62 ) goto LABEL_15; result = dword_ADAD70[result]; LABEL_14: if ( !result ) goto LABEL_15; if ( *(_DWORD *)(result + 112) ) { v5 = this + 68; v2 = (_DWORD **)(this + 8); *(_DWORD *)(this + 64) = 0; v3 = *(_DWORD *)(this + 12) == 0; v4 = 458764; v6 = 14; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(**(_DWORD **)(this + 12) + 4))(23, &v4, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(23, &v4, v2); } result = ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 23, &v4, v2); } else { LABEL_15: *(_DWORD *)(this + 20) = 2; } break; default: return result; } return result; } // ADA534: using guessed type int dword_ADA534[]; //----- (00509E60) -------------------------------------------------------- char __thiscall sub_509E60(int this, int a2, int a3, int a4, _WORD *a5) { char result; // al __int16 v6; // ax unsigned int v7; // eax int v8; // esi unsigned int v9; // eax unsigned int v10; // eax unsigned int v11; // eax unsigned int v12; // eax unsigned int v13; // eax int *v14; // edi int v15; // eax int v16; // esi int v17; // ebx int v18; // eax int v19; // [esp+0h] [ebp-4h] v19 = this; if ( a2 != 12 || a3 != 8 ) return 0; v6 = *(_WORD *)(this + 68); switch ( (unsigned int)*(unsigned __int16 *)(this + 68) >> 10 ) { case 0u: v7 = v6 & 0x3FF; if ( v7 >= 0xC0 ) goto LABEL_20; v8 = dword_ADA234[v7]; goto LABEL_17; case 1u: v9 = v6 & 0x3FF; if ( v9 >= 0x1E ) goto LABEL_20; v8 = dword_ADA534[v9]; goto LABEL_17; case 0xEu: v10 = v6 & 0x3FF; if ( v10 > 0x62 ) goto LABEL_20; v8 = dword_ADA8D8[v10]; goto LABEL_17; case 0xFu: v11 = v6 & 0x3FF; if ( v11 > 0x62 ) goto LABEL_20; v8 = dword_ADAA60[v11]; goto LABEL_17; case 0x10u: v12 = v6 & 0x3FF; if ( v12 > 0x62 ) goto LABEL_20; v8 = dword_ADABE8[v12]; goto LABEL_17; case 0x11u: v13 = v6 & 0x3FF; if ( v13 <= 0x62 ) { v8 = dword_ADAD70[v13]; LABEL_17: if ( v8 ) { if ( *a5 == 769 ) { v14 = (int *)sub_6CD770(); v15 = *(unsigned __int16 *)(v8 + 8); v16 = *v14; v17 = v15; v18 = sub_6854B0(&byte_ADA230, v15); (*(void (__thiscall **)(int *, int, int))(v16 + 16))(v14, v17, v18); this = v19; } } } LABEL_20: *(_DWORD *)(this + 20) = 2; result = 1; break; default: result = 0; break; } return result; } // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (00509FA0) -------------------------------------------------------- void ***__thiscall sub_509FA0(void ***this, _WORD *a2, void **a3, void **a4, void **a5) { void ***v5; // esi v5 = this; sub_6C2E00(this, 0); *v5 = &ItemDropTask::`vftable'; v5[2] = &ItemDropTask::`vftable'; *((_WORD *)v5 + 34) = *a2; *(void ***)((char *)v5 + 74) = a4; *(void ***)((char *)v5 + 70) = a3; *(void ***)((char *)v5 + 78) = a5; return v5; } // 9C2B38: using guessed type void *ItemDropTask::`vftable'; // 9C2B54: using guessed type void *ItemDropTask::`vftable'; //----- (00509FE0) -------------------------------------------------------- char __thiscall sub_509FE0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi int v5; // esi int v6; // ST0C_4 _WORD **v7; // eax int v9; // eax int v10; // ST24_4 __int16 v11; // ax void ***v12; // ecx void ***v13; // eax void (__stdcall *v14)(int); // eax int v15; // ST0C_4 float v16; // [esp+Ch] [ebp-28h] float v17; // [esp+10h] [ebp-24h] int v18; // [esp+24h] [ebp-10h] int v19; // [esp+30h] [ebp-4h] v4 = this; if ( !*(_DWORD *)a2 ) return 0; v5 = *(_DWORD *)(*(_DWORD *)a2 + 4); if ( !v5 ) return 0; if ( *(_DWORD *)(v5 + 8) == 4 ) sub_6BA650(&dword_AB6520, 3); if ( *(_DWORD *)(v5 + 16) ) return 0; if ( *(_DWORD *)(v5 + 8) == 20 ) { v6 = *(_DWORD *)(v5 + 12); v7 = (_WORD **)sub_7154E0(); sub_700FF0(v7, v6); return 0; } v9 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v10 = *(_DWORD *)(v9 + 8); v16 = *(float *)v9; v17 = *(float *)(v9 + 4); switch ( *(_DWORD *)(v5 + 8) ) { case 0: v11 = v18 & 0x3FF | 0x2400; break; case 1: v11 = v18 & 0x3FF | 0x2000; break; case 0xE: v11 = v18 & 0x3FF | 0xC00; break; case 0xF: v11 = v18 & 0x3FF | 0x3400; break; case 0x10: v11 = v18 & 0x3FF | 0x3800; break; case 0x11: v11 = v18 & 0x3FF | 0x4000; break; default: return 0; } LOWORD(v18) = (v11 ^ *(_WORD *)(v5 + 12)) & 0x3FF ^ v11; v12 = (void ***)operator new(0x54u); v19 = 0; if ( v12 ) v13 = sub_509FA0(v12, &v18, *(void ***)(v5 + 64), (void **)(signed __int64)v16, (void **)(signed __int64)v17); else v13 = 0; v14 = (void (__stdcall *)(int))*v13[2]; v15 = v4[72]; v19 = -1; v14(v15); return 1; } //----- (0050A1D0) -------------------------------------------------------- int __cdecl sub_50A1D0(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x124u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_8F2740(v3); *(_DWORD *)v4 = &DesktopWin::`vftable'; *(_DWORD *)(v4 + 232) = &DesktopWin::`vftable'; *(_DWORD *)(v4 + 288) = 0; *(_BYTE *)(v4 + 254) = 1; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 452))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9C2950: using guessed type void *DesktopWin::`vftable'; // 9C296C: using guessed type void *DesktopWin::`vftable'; //----- (0050A320) -------------------------------------------------------- void *__thiscall sub_50A320(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &DesktopWin::`vftable'; *((_DWORD *)this + 58) = &DesktopWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C2950: using guessed type void *DesktopWin::`vftable'; // 9C296C: using guessed type void *DesktopWin::`vftable'; //----- (0050A360) -------------------------------------------------------- void *__thiscall sub_50A360(void *this, char a2) { void *v2; // esi v2 = this; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0050A460) -------------------------------------------------------- int __thiscall sub_50A460(_DWORD *this, int a2) { _DWORD *v2; // esi char v4; // [esp+4h] [ebp-24h] v2 = this; this[87] = a2; sprintf(&v4, "%u", a2); return (*(int (__stdcall **)(char *))(*(_DWORD *)v2[86] + 464))(&v4); } //----- (0050A4C0) -------------------------------------------------------- int __thiscall sub_50A4C0(_DWORD **this) { _BYTE *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[86] + 488))(1); return sub_8F28E0(v1); } //----- (0050A4E0) -------------------------------------------------------- int __thiscall sub_50A4E0(int *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5) { int *v5; // esi int v6; // edi unsigned int v7; // eax int v8; // edi unsigned int v9; // eax char v11; // [esp+8h] [ebp-24h] v5 = this; (*(void (__stdcall **)(int))(*(_DWORD *)this[92] + 472))(a5); v5[87] = (int)a4; sprintf(&v11, "%u", a4); (*(void (__stdcall **)(char *))(*(_DWORD *)v5[86] + 464))(&v11); (*(void (**)(void))(*(_DWORD *)v5[86] + 480))(); sub_459C60((_DWORD *)v5[86]); v5[89] = (int)a3; v5[88] = (int)a2; v5[90] = (int)a4; sub_8F82A0(&unk_BA6B10, v5); v6 = *v5; v7 = (*(int (__thiscall **)(int *))(*v5 + 144))(v5); (*(void (__thiscall **)(int *, unsigned int))(v6 + 172))(v5, pt.x - (v7 >> 1)); v8 = *v5; v9 = (*(int (__thiscall **)(int *))(*v5 + 148))(v5); return (*(int (__thiscall **)(int *, unsigned int))(v8 + 176))(v5, pt.y - (v9 >> 1)); } //----- (0050A650) -------------------------------------------------------- char __thiscall sub_50A650(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // eax volatile LONG *v16; // edi int v17; // ST4C_4 int v18; // ST48_4 int v19; // ST44_4 int v20; // eax volatile LONG *v21; // edi volatile LONG v22; // ebx const CHAR *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // eax volatile LONG *v26; // edi int v27; // ST4C_4 int v28; // ST48_4 int v29; // ST44_4 int v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx const CHAR *v33; // eax int v34; // eax int v35; // ebx int v36; // edi int v37; // ST48_4 int v38; // ST44_4 int v39; // eax volatile LONG *v40; // eax volatile LONG *v41; // edi int *v42; // ebx int v43; // edi const CHAR *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi int v46; // [esp+48h] [ebp-28h] int v47; // [esp+4Ch] [ebp-24h] int v48; // [esp+50h] [ebp-20h] volatile LONG *v49; // [esp+54h] [ebp-1Ch] int v50; // [esp+58h] [ebp-18h] int v51; // [esp+5Ch] [ebp-14h] int v52; // [esp+60h] [ebp-10h] int v53; // [esp+6Ch] [ebp-4h] int v54; // [esp+78h] [ebp+8h] v2 = (int)this; v52 = 0; v53 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v49 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v52 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v8, (int)&v52, v7); if ( !v52 ) return 0; v9 = sub_8FB140(v52, (int)"Panel01", (int)&v50, (int)&v51, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CalculatorWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, v10); else v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, 0); v12 = sub_8F3EB0(v50, v51, (int)v11, v2, 0, 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); if ( sub_8F71E0(v52, (int)"LotInput", &v50, &v51, &v47, &v48) ) { v13 = sub_8FB140(v52, (int)"LotInput", (int)&v50, (int)&v51, v3); sub_8F3EB0(v50, v51, (int)v13, v2, 0, 0); *(_DWORD *)(v2 + 344) = sub_45A900(v50 + 2, v51 + 4, v47, v48, v2, 1342185472, 10, 3, 0, 0, 1); } v14 = sub_8FB140(v52, (int)"BtnNor02", (int)&v50, (int)&v51, v3); sub_8FB650(v14, v52, (int)"BtnClick02"); sub_8FB650(v14, v52, (int)"BtnOver02"); v15 = sub_8FE0F0(v50, v51, (int)v14, v2, 0, 0, 0); v16 = v15; v17 = (int)v15; v18 = sub_421050(0); v19 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 148))(v16); v20 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 144))(v16); v21 = sub_8F4A20(0, 1, v20, v19, v18, v17, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v24 = sub_8FB140(v52, (int)"BtnNor04", (int)&v50, (int)&v51, v49); sub_8FB650(v24, v52, (int)"BtnClick04"); sub_8FB650(v24, v52, (int)"BtnOver04"); v25 = sub_8FE0F0(v50, v51, (int)v24, v2, 1, 0, 0); v26 = v25; v27 = (int)v25; v28 = sub_421050(0); v29 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 148))(v26); v30 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 144))(v26); v31 = sub_8F4A20(0, 1, v30, v29, v28, v27, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = *v31; v33 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v31, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v34 = sub_421050(0); v46 = v34; v54 = 0; v35 = v2 + 368; while ( 1 ) { v36 = *(_DWORD *)(v34 + 384); v37 = v34; v38 = *(_DWORD *)(v34 + 384); v39 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v40 = sub_8F4A20(8, v54 * (v36 + 1) + 8, v39 - 16, v38, v37, v2, 0, 0); v41 = *(volatile LONG **)v35; v49 = v40; if ( v41 != v40 ) { if ( v41 ) { if ( !InterlockedDecrement(v41 + 1) && v41 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v41)(v41, 1); v40 = v49; } *(_DWORD *)v35 = v40; if ( v40 ) InterlockedIncrement(v40 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v35 + 240))(0); v35 += 4; if ( ++v54 >= 2 ) break; v34 = v46; } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 488))(5); v42 = *(int **)(v2 + 368); v43 = *v42; v44 = sub_40C190(-352766661); (*(void (__thiscall **)(int *, const CHAR *))(v43 + 472))(v42, v44); (**(void (__stdcall ***)(int))(v2 + 232))(v2 + 232); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v53 = -1; if ( v52 ) { v45 = (void (__thiscall ***)(_DWORD, signed int))v52; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v45 ) (**v45)(v45, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0050AB40) -------------------------------------------------------- void __thiscall sub_50AB40(volatile LONG *this) { volatile LONG *v1; // esi int v2; // ecx const char *v3; // eax unsigned int v4; // eax int v5; // ST0C_4 const char *v6; // eax char v7; // [esp+4h] [ebp-104h] v1 = this; v2 = *((_DWORD *)this + 86); *((_DWORD *)v1 + 87) = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); if ( v3 && *v3 ) *((_DWORD *)v1 + 87) = atoi(v3); if ( *((_DWORD *)v1 + 88) ) { v4 = *((_DWORD *)v1 + 87); if ( v4 && v4 <= *((_DWORD *)v1 + 90) ) { sub_8F2BC0(v1, 1, 0, 0); sub_8F2BC0(*((volatile LONG **)v1 + 88), 5, *((_DWORD *)v1 + 89), *((_DWORD *)v1 + 87)); } else { v5 = *((_DWORD *)v1 + 90); v6 = sub_40C190(-1750689899); sprintf(&v7, v6, v5); sub_492060(*((_DWORD **)v1 + 74), (int)&v7); } } } //----- (0050AC30) -------------------------------------------------------- int __thiscall sub_50AC30(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi v3 = this; sub_50AB40(this); return (*(int (**)(void))(**((_DWORD **)v3 + 86) + 480))(); } //----- (0050AC50) -------------------------------------------------------- _DWORD *__thiscall sub_50AC50(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &DivideWin::`vftable'; v1[58] = &DivideWin::`vftable'; `eh vector constructor iterator'( v1 + 92, 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[94] = 0; v1[87] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C2C10: using guessed type void *DivideWin::`vftable'; // 9C2C2C: using guessed type void *DivideWin::`vftable'; //----- (0050ACE0) -------------------------------------------------------- void __thiscall sub_50ACE0(int this, int a2, int a3) { int v3; // esi volatile LONG *v4; // eax v3 = this; if ( a2 ) { if ( a2 == 1 ) { *(_DWORD *)(this + 348) = 0; sub_8F2BC0((volatile LONG *)this, 1, 0, 0); v4 = *(volatile LONG **)(v3 + 352); if ( v4 ) sub_8F2BC0(v4, 5, *(_DWORD *)(v3 + 356), 0); } } else { sub_50AB40((volatile LONG *)this); } } //----- (0050AD30) -------------------------------------------------------- volatile LONG *__cdecl sub_50AD30(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x17Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_50AC50(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0050AE60) -------------------------------------------------------- _DWORD *__thiscall sub_50AE60(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &DivideWin::`vftable'; *((_DWORD *)this + 58) = &DivideWin::`vftable'; *((_DWORD *)this + 86) = 0; `eh vector destructor iterator'((char *)this + 368, 4u, 2, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C2C10: using guessed type void *DivideWin::`vftable'; // 9C2C2C: using guessed type void *DivideWin::`vftable'; //----- (0050AF40) -------------------------------------------------------- signed int __thiscall sub_50AF40(char *this) { char *v1; // ebx int v2; // esi signed int v3; // edi int v4; // esi signed int v5; // edi signed int result; // eax v1 = this; v2 = (int)(this + 356); v3 = 3; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 472))(&unk_9C2E83); sub_5D2940(*(_DWORD **)(v2 - 4)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 8) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 12) + 256))(0); v2 += 16; --v3; } while ( v3 ); v4 = (int)(v1 + 392); v5 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); v4 += 4; --v5; } while ( v5 ); result = 0xFFFF; *((_WORD *)v1 + 202) = -1; return result; } //----- (0050B020) -------------------------------------------------------- void __thiscall sub_50B020(_DWORD *this, _WORD *a2) { _DWORD *v2; // ebx unsigned int v3; // edi _DWORD **v4; // esi _DWORD *v5; // ecx __int16 v6; // ax signed int v7; // eax v2 = this; v3 = 0; if ( this[99] ) { v4 = (_DWORD **)(this + 86); do { v5 = *v4; v6 = *a2 >> 10; if ( v6 == 9 ) { v7 = 0; } else { if ( v6 != 8 ) return; v7 = 1; } if ( v5[77] == v7 && v5[76] == (*a2 & 0x3FF) ) sub_5D2940(v5); ++v3; v4 += 4; } while ( v3 < v2[99] ); } } //----- (0050B090) -------------------------------------------------------- _WORD *__thiscall sub_50B090(_WORD *this, _WORD *a2) { _WORD *result; // eax result = a2; this[204] = *a2; return result; } //----- (0050B0B0) -------------------------------------------------------- int __userpurge sub_50B0B0@(int a1@, int a2@, unsigned __int16 *a3, int *a4) { int v4; // esi v4 = a1; sub_5D2C60(*(int **)(a1 + 392), a2, *a4); return (*(int (__thiscall **)(int, unsigned __int16 *, _DWORD))(*(_DWORD *)v4 + 548))(v4, a3 + 1, *a3); } //----- (0050B0F0) -------------------------------------------------------- int __thiscall sub_50B0F0(_DWORD *this) { bool v1; // zf _DWORD **v2; // esi int result; // eax int v4; // [esp+0h] [ebp-Ch] int v5; // [esp+4h] [ebp-8h] if ( byte_ACEBE0 ) { v1 = this[59] == 0; v2 = (_DWORD **)(this + 58); v4 = 720904; v5 = 0; if ( !v1 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*(_DWORD *)this[59] + 4))(23, &v4, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(23, &v4, v2); } result = ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 23, &v4, v2); byte_ACEBE0 = 0; } return result; } // ACEBE0: using guessed type char byte_ACEBE0; //----- (0050B170) -------------------------------------------------------- char __thiscall sub_50B170(volatile LONG *this, unsigned int a2, int a3) { char result; // al result = a2; if ( a2 ) { if ( a2 <= 3 ) { result = (*(int (__stdcall **)(unsigned int))(*this + 544))(a2 - 1); } else if ( a2 == 5 ) { result = sub_8F2BC0(this, 1, 0, 0); } } return result; } //----- (0050B1C0) -------------------------------------------------------- _DWORD *__thiscall sub_50B1C0(_DWORD **this) { _DWORD **v1; // ebx unsigned int v2; // edi _DWORD *result; // eax _DWORD **v4; // esi v1 = this; v2 = 0; if ( this[101] ) (*(void (__stdcall **)(_DWORD))(*this[101] + 256))(0); sub_5D2940(v1[98]); result = v1[98]; result[68] = 0; if ( (unsigned int)v1[99] > 0 ) { v4 = v1 + 88; do { (*(void (__stdcall **)(void *))(**(v4 - 1) + 472))(&unk_9C2E9A); (*(void (__stdcall **)(signed int))(**v4 + 240))(1); (*(void (__stdcall **)(_DWORD))(*v4[1] + 240))(0); result = sub_5D2940(*(v4 - 2)); ++v2; v4 += 4; } while ( v2 < (unsigned int)v1[99] ); } return result; } //----- (0050B250) -------------------------------------------------------- int __thiscall sub_50B250(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ecx int result; // eax v3 = this; v4 = (_DWORD *)this[98]; if ( !v4[75] ) { if ( a3 ) { if ( v3[100] == 1 ) sub_5D2940(v4); sub_5D2810((int *)v3[98], a3, 1, 1); } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 548))(v3, a3 + 10, *(unsigned __int16 *)(a3 + 8)); result = sub_6BA650(&dword_AB6520, 3); } return result; } //----- (0050B2C0) -------------------------------------------------------- char __thiscall sub_50B2C0(_DWORD *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al char *v8; // eax volatile LONG *v9; // eax char *v10; // eax volatile LONG *v11; // eax signed int v12; // edi int v13; // esi signed int v14; // ebx char *v15; // eax volatile LONG *v16; // eax char *v17; // eax volatile LONG *v18; // eax _DWORD *v19; // eax const char *v20; // eax char *v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // eax int v24; // edi volatile LONG v25; // esi const CHAR *v26; // eax int v27; // ecx void (__thiscall ***v28)(_DWORD, signed int); // esi int v29; // [esp-14h] [ebp-54h] int v30; // [esp-10h] [ebp-50h] int v31; // [esp-Ch] [ebp-4Ch] int v32; // [esp-8h] [ebp-48h] volatile LONG *v33; // [esp-4h] [ebp-44h] int v34[5]; // [esp+10h] [ebp-30h] _DWORD *v35; // [esp+24h] [ebp-1Ch] int v36; // [esp+28h] [ebp-18h] int v37; // [esp+2Ch] [ebp-14h] int v38; // [esp+30h] [ebp-10h] int v39; // [esp+3Ch] [ebp-4h] v2 = (int)this; v35 = this; v38 = 0; v3 = dword_BA6BA0; v39 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\EnchantToolTip.nif"); sub_8F66B0(v4, (int)&v38, v3); v5 = sub_8FB140(v38, (int)"Panel01", (int)&v36, (int)&v37, 0); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"EnchantGemToolTipWin", 0) ) { sub_456260(v34); LOBYTE(v39) = 1; sub_455FF0(v34, v2); sub_456000(v34, v36, v37); sub_456380(v34, v38); v8 = sub_7549E0("Panel%02d", 2); v9 = sub_456820(v34, (int)v8, 0); *(_DWORD *)(v2 + 392) = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v10 = sub_7549E0("Panel%02d", 3); v11 = sub_456820(v34, (int)v10, 0); *(_DWORD *)(v2 + 396) = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = 1; v13 = v2 + 356; v14 = 3; do { v33 = (volatile LONG *)5; v29 = dword_AA8C68; v30 = dword_AA8C6C; v31 = dword_AA8C70; v32 = dword_AA8C74; v15 = sub_7549E0("TitleName%02d", v12); v16 = sub_456760(v34, (int)v15, (int)&unk_9C2E81, v29, v30, v31, v32, (int)v33); *(_DWORD *)v13 = v16; *(_BYTE *)(*((_DWORD *)v16 + 72) + 284) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)v13 + 488))(4); v33 = 0; v32 = v12; v17 = sub_7549E0("Slot%02d", v12); v18 = sub_456820(v34, (int)v17, v33); *(_DWORD *)(v13 - 8) = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v33 = *(volatile LONG **)(v13 - 8); v19 = sub_5D2DD0(3, 3, (int)v33); v30 = 1854303943; *(_DWORD *)(v13 - 4) = v19; v20 = sub_40A910(v30); sub_8F2EA0(*(void ***)(v13 - 4), v20); *(_DWORD *)(*(_DWORD *)(v13 - 4) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 - 4) + 240))(0); v33 = 0; v32 = v12; v21 = sub_7549E0("RegCancelBtnNor%02d", v12); v22 = sub_456820(v34, (int)v21, v33); *(_DWORD *)(v13 - 12) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 256))(v22, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v13 - 12) + 240))(0); ++v12; v13 += 16; --v14; } while ( v14 ); v23 = sub_456760(v34, (int)"Text01", (int)&unk_9C2E82, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v24 = (int)v35; v35[100] = v23; v25 = *v23; v26 = sub_4090F0(1177818895); v27 = *(_DWORD *)(v24 + 400); v33 = (volatile LONG *)v26; (*(void (__thiscall **)(int, const CHAR *))(v25 + 472))(v27, v26); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v24 + 400) + 240))(0); LOBYTE(v39) = 0; sub_4562E0(v34); v39 = -1; if ( v38 ) { v28 = (void (__thiscall ***)(_DWORD, signed int))v38; if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v28 ) (**v28)(v28, 1); } } result = 1; } else { v6 = (void (__thiscall ***)(_DWORD, signed int))v38; v39 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0050B620) -------------------------------------------------------- char __thiscall sub_50B620(_DWORD **this, int a2) { _DWORD **v2; // ebx unsigned __int8 v4; // al int v5; // edi int **v6; // esi int v7; // edi int v8; // ebx __int16 **v9; // eax __int16 *v10; // edi int v11; // eax int v12; // ebx _DWORD *v13; // edi int v14; // ebx char *v15; // eax char *v16; // eax int v17; // ST08_4 char *v18; // eax int v19; // [esp+8h] [ebp-80h] _DWORD **v20; // [esp+Ch] [ebp-7Ch] int v21; // [esp+10h] [ebp-78h] int v22; // [esp+14h] [ebp-74h] char *v23; // [esp+18h] [ebp-70h] __int16 v24; // [esp+1Ch] [ebp-6Ch] char v25; // [esp+4Eh] [ebp-3Ah] unsigned __int8 v26; // [esp+57h] [ebp-31h] char v27; // [esp+58h] [ebp-30h] v2 = this; v20 = this; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2) != 5 ) return 0; qmemcpy(&v24, (const void *)(a2 + 8), 0x67u); v4 = v26; v5 = 0; v21 = 0; if ( v26 ) { v23 = &v25; v22 = (int)(v2 + 97); v6 = v2 + 87; do { if ( *(_WORD *)v23 == -1 ) { (*(void (__stdcall **)(signed int))(**v6 + 256))(1); if ( v5 > 0 ) (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1); } else { v7 = dword_ACB230; v8 = *(unsigned __int16 *)v23; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v8) ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { v9 = (__int16 **)(*(_DWORD *)(v7 + 196) + 4 * v8); if ( *v9 ) { v10 = *v9; if ( *v9 ) { v11 = sub_4B1600((unsigned __int16)*v10); v19 = v11; if ( v11 ) { v12 = sub_4B15B0(*(unsigned __int16 *)(v11 + 2)); if ( v12 ) { v24 = *v10; v13 = sub_6876E0((unsigned __int16 *)&v24); if ( v13 ) { sub_5D2940(v6[1]); sub_5D2810(v6[1], (int)v13, 0, 0); } v14 = v12 + 3; if ( *(_BYTE *)(v19 + 4) ) { v17 = (unsigned __int8)v23[2]; v18 = (char *)sub_40A910(-890504874); v16 = sub_7549E0(v18, v14, v17); } else { v15 = (char *)sub_40A910(-890504618); v16 = sub_7549E0(v15, v14); } (*(void (__stdcall **)(char *))(*v6[2] + 472))(v16); (*(void (__stdcall **)(signed int))(**v6 + 256))(1); (*(void (__stdcall **)(signed int))(*v6[1] + 256))(1); (*(void (__stdcall **)(_DWORD))(**(v6 - 1) + 256))(0); if ( v21 > 0 ) (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1); } } } } } } v2 = v20; } v4 = v26; v22 += 4; v23 += 3; v5 = v21 + 1; v6 += 4; v21 = v5; } while ( v5 < v26 ); } if ( !v27 ) { (*(void (__stdcall **)(signed int))(*v2[4 * v4 + 86] + 256))(1); (*(void (__stdcall **)(signed int))(*v2[4 * v26 + 87] + 256))(1); if ( v26 ) (*(void (__stdcall **)(signed int))(*v2[v26 + 97] + 256))(1); } return 1; } // ACB230: using guessed type int dword_ACB230; //----- (0050B8A0) -------------------------------------------------------- char __thiscall sub_50B8A0(_DWORD *this, float a2, int a3) { int v3; // ebx int v4; // eax int v5; // eax volatile LONG *v6; // esi char *v7; // eax volatile LONG **v8; // esi char *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi volatile LONG *v12; // eax volatile LONG **v13; // eax const CHAR *v14; // eax const CHAR *v15; // eax volatile LONG *v16; // esi const CHAR *v17; // eax const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax _DWORD *v21; // eax char *v22; // edi void ***v23; // esi char *v24; // eax volatile LONG *v25; // eax int v26; // eax char *v27; // eax volatile LONG *v28; // eax char *v29; // eax volatile LONG *v30; // eax void **v31; // eax const char *v32; // eax const char *v33; // eax void **v34; // ecx char *v35; // eax volatile LONG *v36; // eax int v37; // ecx void **v38; // eax const char *v39; // eax float v40; // edx char *v41; // eax volatile LONG *v42; // eax void (__thiscall ***v43)(_DWORD, signed int); // esi int v44; // [esp+1Ch] [ebp-60h] int v45; // [esp+20h] [ebp-5Ch] char *v46; // [esp+24h] [ebp-58h] char *v47; // [esp+28h] [ebp-54h] char *v48; // [esp+2Ch] [ebp-50h] float v49; // [esp+30h] [ebp-4Ch] float v50; // [esp+34h] [ebp-48h] int v51[5]; // [esp+48h] [ebp-34h] int v52; // [esp+5Ch] [ebp-20h] int v53; // [esp+60h] [ebp-1Ch] int v54; // [esp+64h] [ebp-18h] int v55; // [esp+68h] [ebp-14h] int v56; // [esp+6Ch] [ebp-10h] int v57; // [esp+78h] [ebp-4h] v3 = (int)this; v56 = 0; v4 = a3; this[99] = a3; v5 = v4 - 1; this[100] = 0; v6 = (volatile LONG *)dword_BA6BA0; v57 = 0; if ( v5 ) { if ( v5 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v50 = *(float *)&v6; v49 = COERCE_FLOAT(&v56); v48 = "Game\\EnchantWin02.nif"; } else { if ( !byte_ACAD5C ) sub_420410(); v50 = *(float *)&v6; v49 = COERCE_FLOAT(&v56); v48 = "Game\\EnchantWin03.nif"; } } else { if ( !byte_ACAD5C ) sub_420410(); v50 = *(float *)&v6; v49 = COERCE_FLOAT(&v56); v48 = "Game\\EnchantWin01.nif"; } v7 = (char *)sub_401410(byte_ACAB50, v48); sub_8F66B0(v7, SLODWORD(v49), SLODWORD(v50)); if ( !v56 ) return 0; v8 = sub_8FB140(v56, (int)"Panel01", (int)&v53, (int)&v54, 0); v9 = sub_7549E0("EnchantGemWin%2.d", *(_DWORD *)(v3 + 396)); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v8, 0, SLODWORD(a2), (int)v9, 0) ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v56; v57 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } sub_456260(v51); LOBYTE(v57) = 1; sub_455FF0(v51, v3); sub_456000(v51, v53, v54); sub_456380(v51, v56); *(float *)&v12 = COERCE_FLOAT(sub_43D0D0(0x13u)); if ( *(float *)&v12 == 0.0 ) { v50 = 0.0; v49 = COERCE_FLOAT(&a3); v48 = (char *)&v55; v47 = "Theme"; } else { v50 = *(float *)&v12; v49 = COERCE_FLOAT(&a3); v48 = (char *)&v55; v47 = "Theme"; } v13 = sub_8FB140(v56, (int)v47, (int)v48, SLODWORD(v49), (volatile LONG *)LODWORD(v50)); sub_8F3EB0(v55 - v53, a3 - v54, (int)v13, v3, 0, 0); sub_456820(v51, (int)"Panel02", 0); sub_456820(v51, (int)"Panel03", 0); if ( *(_DWORD *)(v3 + 396) == 3 ) sub_456820(v51, (int)"Panel04", 0); v44 = dword_AA8C68; v45 = dword_AA8C6C; v46 = (char *)dword_AA8C70; v47 = (char *)dword_AA8C74; v14 = sub_40A910(-857666791); sub_456980(v51, (int)"NPCText", (int)v14, 0, v44, v45, (int)v46, (int)v47, 5, 0, 0); v44 = dword_AA8D98; v45 = dword_AA8D9C; v46 = (char *)dword_AA8DA0; v47 = (char *)dword_AA8DA4; v15 = sub_40A910(726607753); sub_456980(v51, (int)"ItemName", (int)v15, 0, v44, v45, (int)v46, (int)v47, 4, 0, 0); sub_4563D0(v51, 5, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v16 = sub_4563D0(v51, 5, (int)"QuitBtnNor", (int)"QuitBtnOver", (int)"QuitBtnClick", 0, 0); v46 = (char *)dword_AA8C68; v47 = (char *)dword_AA8C6C; v48 = (char *)dword_AA8C70; v49 = *(float *)&dword_AA8C74; v17 = sub_40A910(-888789954); sub_456040((int)v16, (int)v17, (char)v46, (int)v47, (int)v48, SLODWORD(v49), 5); v46 = (char *)dword_AA8D98; v47 = (char *)dword_AA8D9C; v48 = (char *)dword_AA8DA0; v49 = *(float *)&dword_AA8DA4; v18 = sub_40A910(525481017); sub_456760(v51, (int)"WinTitle", (int)v18, (char)v46, (int)v47, (int)v48, SLODWORD(v49), 5); v19 = sub_8FB140(v56, (int)"TgetSlot", (int)&v55, (int)&a3, 0); v20 = sub_8F3EB0(v55 - v53, a3 - v54, (int)v19, v3, 0, 0); v21 = sub_5D2DD0(3, 3, (int)v20); *(_DWORD *)(v3 + 392) = v21; (*(void (__thiscall **)(_DWORD *, signed int))(*v21 + 240))(v21, 1); if ( *(_DWORD *)(v3 + 396) > 0u ) { v22 = (char *)1; v23 = (void ***)(v3 + 352); do { v50 = 0.0; v49 = 0.0; v48 = (char *)4; v44 = dword_AA8C68; v45 = dword_AA8C6C; v46 = (char *)dword_AA8C70; v47 = (char *)dword_AA8C74; v24 = sub_7549E0("TitleName%02d", v22); v25 = sub_456980( v51, (int)v24, (int)&unk_9C2E8E, 3, v44, v45, (int)v46, (int)v47, (int)v48, (volatile LONG *)LODWORD(v49), SLOBYTE(v50)); v50 = 0.0; *(v23 - 1) = (void **)v25; v26 = *((_DWORD *)v25 + 72); v49 = *(float *)&v22; v48 = "RegBtnLock%02d"; *(_BYTE *)(v26 + 284) = 1; v49 = COERCE_FLOAT(sub_7549E0(v48, v49)); v48 = v22; v48 = sub_7549E0("RegBtnClick%02d", v22); v47 = v22; v47 = sub_7549E0("RegBtnOver%02d", v22); v46 = v22; v27 = sub_7549E0("RegBtnNor%02d", v22); v28 = sub_4563D0(v51, (int)v22, (int)v27, (int)v47, (int)v48, SLODWORD(v49), (volatile LONG *)LODWORD(v50)); v50 = 0.0; v49 = *(float *)&v22; v48 = "Slot%02d"; *v23 = (void **)v28; v29 = sub_7549E0(v48, v49); v30 = sub_456820(v51, (int)v29, (volatile LONG *)LODWORD(v50)); v31 = (void **)sub_5D2DD0(3, 3, (int)v30); v47 = (char *)776415289; *(v23 - 2) = v31; v32 = sub_40A910((int)v47); sub_8F2EA0(*(v23 - 2), v32); (*(v23 - 2))[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**(v23 - 2) + 60))(1); (*v23)[68] = (void *)dword_AD01E8; v33 = sub_40A910(1519549821); sub_8F2EA0(*v23, v33); (*((void (__stdcall **)(signed int))**v23 + 60))(1); v34 = *v23; v52 = 0; a2 = 0.0; (*((void (__stdcall **)(int *, float *))*v34 + 45))(&v52, &a2); v50 = 0.0; v49 = *(float *)&v22; v35 = sub_7549E0("RegBtnNor%02d", v22); v36 = sub_456820(v51, (int)v35, (volatile LONG *)LODWORD(v50)); v50 = a2; v37 = v52; v23[1] = (void **)v36; (*(void (__thiscall **)(volatile LONG *, int, float))(*v36 + 308))(v36, v37, COERCE_FLOAT(LODWORD(v50))); v38 = v23[1]; v50 = 2.0616661e16; v38[68] = (void *)dword_AD01E8; v39 = sub_40A910(SLODWORD(v50)); sub_8F2EA0(v23[1], v39); (*((void (__stdcall **)(_DWORD))*v23[1] + 69))(0.0); (*((void (__stdcall **)(signed int))*v23[1] + 64))(1); (*((void (__stdcall **)(_DWORD))*v23[1] + 60))(0); ++v22; v23 += 4; } while ( (unsigned int)(v22 - 1) < *(_DWORD *)(v3 + 396) ); } v40 = *(float *)(v3 + 396); v50 = 0.0; v49 = v40; v41 = sub_7549E0("RegCancelBtnNor%02d", v40); v42 = sub_456820(v51, (int)v41, (volatile LONG *)LODWORD(v50)); *(_DWORD *)(v3 + 404) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 256))(v42, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 404) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.0, 0.5); LOBYTE(v57) = 0; sub_4562E0(v51); v57 = -1; if ( v56 ) { v43 = (void (__thiscall ***)(_DWORD, signed int))v56; if ( !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) { if ( v43 ) (**v43)(v43, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0050BEF0) -------------------------------------------------------- void __thiscall sub_50BEF0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi _DWORD *v5; // ebx int v6; // eax int v7; // eax bool v8; // zf int v9; // eax int v10; // ecx int v11; // eax _DWORD **v12; // edi int (__thiscall *v13)(_DWORD *); // eax int v14; // eax int v15; // edx int v16; // eax int v17; // edi int v18; // eax int v19; // eax int v20; // eax const CHAR *v21; // esi const CHAR *v22; // esi char v23; // [esp-70h] [ebp-F4h] int v24; // [esp-6Ch] [ebp-F0h] int v25; // [esp-68h] [ebp-ECh] int v26; // [esp-64h] [ebp-E8h] int v27; // [esp-60h] [ebp-E4h] int v28; // [esp-5Ch] [ebp-E0h] int v29; // [esp-58h] [ebp-DCh] int v30; // [esp-54h] [ebp-D8h] int v31; // [esp-50h] [ebp-D4h] int v32; // [esp-4Ch] [ebp-D0h] int v33; // [esp-48h] [ebp-CCh] int v34; // [esp-44h] [ebp-C8h] int v35; // [esp-40h] [ebp-C4h] int v36; // [esp-3Ch] [ebp-C0h] int v37; // [esp-38h] [ebp-BCh] int v38; // [esp-34h] [ebp-B8h] int v39; // [esp-30h] [ebp-B4h] int v40; // [esp-2Ch] [ebp-B0h] int v41; // [esp-28h] [ebp-ACh] int v42; // [esp-24h] [ebp-A8h] int v43; // [esp-20h] [ebp-A4h] int v44; // [esp-1Ch] [ebp-A0h] int v45; // [esp-18h] [ebp-9Ch] int v46; // [esp-14h] [ebp-98h] int v47; // [esp-10h] [ebp-94h] __int16 v48; // [esp-Ch] [ebp-90h] char v49; // [esp-Ah] [ebp-8Eh] int v50; // [esp-8h] [ebp-8Ch] int v51; // [esp-4h] [ebp-88h] int v52; // [esp+Ch] [ebp-78h] int v53; // [esp+10h] [ebp-74h] _DWORD **v54; // [esp+14h] [ebp-70h] char v55; // [esp+18h] [ebp-6Ch] __int16 v56; // [esp+7Ch] [ebp-8h] char v57; // [esp+7Eh] [ebp-6h] v4 = a4; v5 = this; v53 = a3; v52 = a4; if ( a2 != 22 ) return; v6 = this[40]; if ( v6 ) v7 = v6 + 232; else v7 = 0; v8 = a4 == v7; v9 = *(_DWORD *)a3; if ( v8 ) { if ( *(_DWORD *)(v9 + 16) ) return; v10 = *(_DWORD *)(v9 + 8); if ( v10 ) { if ( v10 != 1 ) return; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(**(_DWORD **)(v9 + 20) + 4))(*(_DWORD *)(v9 + 20)) == 5 ) { v11 = *(_DWORD *)(*(_DWORD *)a3 + 20); if ( !*(_DWORD *)(*(_DWORD *)(v11 + 112) + 98) ) { qmemcpy(&v55, (const void *)(v11 + 8), 0x66u); v51 = dword_ACDD68; v57 = *(_BYTE *)(v11 + 110); v12 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v54 = v12; if ( v12 ) { v13 = *(int (__thiscall **)(_DWORD *))(*(v5 - 58) + 168); v51 = v5[42]; v14 = v13(v5 - 58); v15 = *(v5 - 58); v50 = v14; v16 = (*(int (__thiscall **)(_DWORD *))(v15 + 164))(v5 - 58); sub_4E2030(v12, v16, v50, v51); v51 = v5[42]; qmemcpy(&v23, &v55, 0x64u); v48 = v56; v49 = v57; sub_4A5940( v54, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, *(int *)&v48, (int *)v53, v51); } *(_BYTE *)(v53 + 12) = 0; return; } } v51 = -1913391614; goto LABEL_36; } if ( *(_DWORD *)(v9 + 16) || *(_DWORD *)(v9 + 8) ) return; if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(**(_DWORD **)(v9 + 20) + 4))(*(_DWORD *)(v9 + 20)) != 35 ) { v51 = -721622281; LABEL_36: v22 = sub_40A910(v51); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 4))(25, v22, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 20))(25, v22, v5); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(*v5 + 20))(v5, 25, v22, v5); return; } v8 = v5[41] == 0; v54 = 0; if ( !v8 ) { v17 = (int)(v5 + 30); do { v18 = *(_DWORD *)(v17 - 8); if ( v18 ) v19 = v18 + 232; else v19 = 0; if ( v4 == v19 && (*(unsigned __int8 (**)(void))(**(_DWORD **)v17 + 244))() && v4 ) { v20 = sub_5D2610((_DWORD *)v5[40]); if ( !v20 ) return; if ( *(_DWORD *)(*(_DWORD *)(v20 + 112) + 131) == *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)v53 + 20) + 112) + 131) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)(v4 - 232) + 256))(v4 - 232, 1); *(_BYTE *)(v53 + 12) = 1; } else { v21 = sub_4090F0(-380941952); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 4))(25, v21, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5[1] + 20))(25, v21, v5); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(*v5 + 20))(v5, 25, v21, v5); v4 = v52; } } v17 += 16; v54 = (_DWORD **)((char *)v54 + 1); } while ( (unsigned int)v54 < v5[41] ); } } //----- (0050C1B0) -------------------------------------------------------- int __userpurge sub_50C1B0@(int a1@, signed int a2@, int a3@, int a4, int a5) { int result; // eax int v6; // edi int v7; // esi const char *v8; // eax int v9; // edi int v10; // ebx __int16 **v11; // eax __int16 *v12; // edi int v13; // eax int v14; // ebx _DWORD *v15; // eax int v16; // ebx char *v17; // eax char *v18; // eax int v19; // ST08_4 char *v20; // eax void (__stdcall *v21)(signed int); // eax int v22; // ecx const char *v23; // eax int v24; // esi char v25; // al signed int v26; // [esp-8h] [ebp-90h] int v27; // [esp-4h] [ebp-8Ch] int v28; // [esp+4h] [ebp-84h] signed int v29; // [esp+Ch] [ebp-7Ch] unsigned __int16 *v30; // [esp+10h] [ebp-78h] int v31; // [esp+14h] [ebp-74h] char v32; // [esp+1Bh] [ebp-6Dh] __int16 v33; // [esp+1Ch] [ebp-6Ch] result = a4; v6 = a1; v31 = a1; if ( a4 ) { v27 = a3; v32 = 0; v29 = 0; if ( *(_BYTE *)(a4 + 57) ) { v7 = a1 + 352; v30 = (unsigned __int16 *)(a4 + 48); v26 = a2; do { (*(void (__stdcall **)(void *, signed int))(**(_DWORD **)(v7 - 4) + 472))(&unk_9C2E8F, v26); sub_5D2940(*(_DWORD **)(v7 - 8)); v8 = sub_40A910(1854303943); sub_8F2EA0(*(void ***)(v7 - 8), v8); *(_DWORD *)(*(_DWORD *)(v7 - 8) + 272) = dword_AD01E8; if ( *v30 != -1 || v32 ) { v9 = dword_ACB230; v10 = *v30; v26 = *v30; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230) && (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) && (v11 = (__int16 **)(*(_DWORD *)(v9 + 196) + 4 * v10), *v11) && (v12 = *v11) != 0 ) { v13 = sub_4B1600((unsigned __int16)*v12); v28 = v13; if ( v13 ) { v14 = sub_4B15B0(*(unsigned __int16 *)(v13 + 2)); if ( v14 ) { v33 = *v12; v15 = sub_6876E0((unsigned __int16 *)&v33); if ( v15 ) sub_5D2810(*(int **)(v7 - 8), (int)v15, 1, 1); v16 = v14 + 3; if ( *(_BYTE *)(v28 + 4) ) { v19 = *((unsigned __int8 *)v30 + 2); v20 = (char *)sub_40A910(-890504874); v18 = sub_7549E0(v20, v16, v19); } else { v17 = (char *)sub_40A910(-890504618); v18 = sub_7549E0(v17, v16); } (*(void (__stdcall **)(char *))(**(_DWORD **)(v7 - 4) + 472))(v18); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 240))(0); } } else { v21 = *(void (__stdcall **)(signed int))(**(_DWORD **)v7 + 240); if ( v32 ) { v21(0); } else { v21(1); v32 = 1; } } v6 = v31; } else { v26 = 1; (*(void (**)(void))(**(_DWORD **)v7 + 240))(); } result = a4; v30 = (unsigned __int16 *)((char *)v30 + 3); v7 += 16; ++v29; } while ( v29 < *(unsigned __int8 *)(a4 + 57) ); } v22 = *(_DWORD *)(v6 + 404); if ( *(_BYTE *)(result + 58) ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v22 + 256))(0, v27); } else { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v22 + 256))(1, v27); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 16 * (*(_DWORD *)(v6 + 396) + 21)) + 240))(0); v23 = sub_40A910(1990616711); sub_8F2EA0(*(void ***)(v6 + 16 * *(_DWORD *)(v6 + 396) + 328), v23); } v24 = **(_DWORD **)(v6 + 16 * *(_DWORD *)(v6 + 396) + 340); v25 = (*(int (**)(void))(**(_DWORD **)(v6 + 16 * (*(_DWORD *)(v6 + 396) + 21)) + 244))(); result = (*(int (__thiscall **)(_DWORD, bool))(v24 + 240))( *(_DWORD *)(v6 + 16 * *(_DWORD *)(v6 + 396) + 340), v25 == 0); } return result; } // 50C1B0: could not find valid save-restore pair for ebx // 50C1B0: could not find valid save-restore pair for esi // ACB230: using guessed type int dword_ACB230; // AD01E8: using guessed type int dword_AD01E8; //----- (0050C460) -------------------------------------------------------- char __thiscall sub_50C460(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx int v5; // eax __int16 v6; // ax __int16 v7; // ax char result; // al _DWORD **v9; // esi const CHAR *v10; // edi int v11; // [esp+8h] [ebp-8h] v2 = this; v3 = this[98]; if ( *(_DWORD *)(v3 + 300) || (v4 = v2[4 * a2 + 86], *(_DWORD *)(v4 + 300)) ) { v9 = (_DWORD **)(v2 + 58); v10 = sub_40A910(-1118169279); if ( v9[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 4))(25, v10, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); } else { v5 = *(_DWORD *)(v3 + 308); if ( v5 == 1 ) { v6 = v11 & 0x3FF | 0x2000; LOWORD(v11) = v11 & 0x3FF | 0x2000; } else if ( v5 ) { v6 = v11; } else { v6 = v11 & 0x3FF | 0x2400; LOWORD(v11) = v11 & 0x3FF | 0x2400; } LOWORD(v11) = (v6 ^ *(_WORD *)(v3 + 304)) & 0x3FF ^ v6; v7 = HIWORD(v11) & 0x3FF | 0x2400; HIWORD(v11) = v7; HIWORD(v11) = (v7 ^ *(_WORD *)(v4 + 304)) & 0x3FF ^ v7; result = sub_6F3D10(&off_AB7F2C, 12, 64, &v11, 4u); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0050C580) -------------------------------------------------------- int __thiscall sub_50C580(_DWORD **this) { _DWORD *v1; // esi int result; // eax _DWORD **v3; // edi int v4; // ST08_4 int v5; // ST04_4 int v6; // eax v1 = this; sub_50B1C0(this); sub_50B0F0(v1); result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (_DWORD **)result; if ( result ) { v4 = v1[100]; v5 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1); v6 = (*(int (__thiscall **)(_DWORD *))(*v1 + 164))(v1); result = sub_4E2030(v3, v6, v5, v4); } return result; } //----- (0050C5E0) -------------------------------------------------------- char __thiscall sub_50C5E0(_DWORD *this, float a2, int a3) { int v3; // ebx int v4; // eax int v5; // eax volatile LONG *v6; // esi char *v7; // eax volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG *v11; // eax volatile LONG **v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax volatile LONG *v15; // esi const CHAR *v16; // eax const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax _DWORD *v20; // eax char *v21; // edi void ***v22; // esi char *v23; // eax volatile LONG *v24; // eax int v25; // eax char *v26; // eax volatile LONG *v27; // eax char *v28; // eax volatile LONG *v29; // eax void **v30; // eax const char *v31; // eax const char *v32; // eax void **v33; // ecx char *v34; // eax volatile LONG *v35; // eax int v36; // ecx void **v37; // eax const char *v38; // eax float v39; // edx char *v40; // eax volatile LONG *v41; // eax void (__thiscall ***v42)(_DWORD, signed int); // esi int v43; // [esp+1Ch] [ebp-60h] int v44; // [esp+20h] [ebp-5Ch] char *v45; // [esp+24h] [ebp-58h] char *v46; // [esp+28h] [ebp-54h] char *v47; // [esp+2Ch] [ebp-50h] float v48; // [esp+30h] [ebp-4Ch] float v49; // [esp+34h] [ebp-48h] int v50[5]; // [esp+48h] [ebp-34h] int v51; // [esp+5Ch] [ebp-20h] int v52; // [esp+60h] [ebp-1Ch] int v53; // [esp+64h] [ebp-18h] int v54; // [esp+68h] [ebp-14h] int v55; // [esp+6Ch] [ebp-10h] int v56; // [esp+78h] [ebp-4h] v3 = (int)this; v55 = 0; v4 = a3; this[99] = a3; v5 = v4 - 1; this[100] = 1; v6 = (volatile LONG *)dword_BA6BA0; v56 = 0; if ( v5 ) { if ( v5 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v49 = *(float *)&v6; v48 = COERCE_FLOAT(&v55); v47 = "Game\\EnchantWin02.nif"; } else { if ( !byte_ACAD5C ) sub_420410(); v49 = *(float *)&v6; v48 = COERCE_FLOAT(&v55); v47 = "Game\\EnchantWin03.nif"; } } else { if ( !byte_ACAD5C ) sub_420410(); v49 = *(float *)&v6; v48 = COERCE_FLOAT(&v55); v47 = "Game\\EnchantWin01.nif"; } v7 = (char *)sub_401410(byte_ACAB50, v47); sub_8F66B0(v7, SLODWORD(v48), SLODWORD(v49)); if ( !v55 ) return 0; v8 = sub_8FB140(v55, (int)"Panel01", (int)&v52, (int)&v53, 0); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v8, 0, SLODWORD(a2), (int)"EnchantGemDeleteWin", 0) ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v55; v56 = -1; if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } sub_456260(v50); LOBYTE(v56) = 1; sub_455FF0(v50, v3); sub_456000(v50, v52, v53); sub_456380(v50, v55); *(float *)&v11 = COERCE_FLOAT(sub_43D0D0(0x13u)); if ( *(float *)&v11 == 0.0 ) { v49 = 0.0; v48 = COERCE_FLOAT(&a3); v47 = (char *)&v54; v46 = "Theme"; } else { v49 = *(float *)&v11; v48 = COERCE_FLOAT(&a3); v47 = (char *)&v54; v46 = "Theme"; } v12 = sub_8FB140(v55, (int)v46, (int)v47, SLODWORD(v48), (volatile LONG *)LODWORD(v49)); sub_8F3EB0(v54 - v52, a3 - v53, (int)v12, v3, 0, 0); sub_456820(v50, (int)"Panel02", 0); sub_456820(v50, (int)"Panel03", 0); if ( *(_DWORD *)(v3 + 396) == 3 ) sub_456820(v50, (int)"Panel04", 0); v43 = dword_AA8C68; v44 = dword_AA8C6C; v45 = (char *)dword_AA8C70; v46 = (char *)dword_AA8C74; v13 = sub_40A910(-857666791); sub_456980(v50, (int)"NPCText", (int)v13, 0, v43, v44, (int)v45, (int)v46, 5, 0, 0); v43 = dword_AA8D98; v44 = dword_AA8D9C; v45 = (char *)dword_AA8DA0; v46 = (char *)dword_AA8DA4; v14 = sub_40A910(726607753); sub_456980(v50, (int)"ItemName", (int)v14, 0, v43, v44, (int)v45, (int)v46, 4, 0, 0); sub_4563D0(v50, 5, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v15 = sub_4563D0(v50, 5, (int)"QuitBtnNor", (int)"QuitBtnOver", (int)"QuitBtnClick", 0, 0); v45 = (char *)dword_AA8C68; v46 = (char *)dword_AA8C6C; v47 = (char *)dword_AA8C70; v48 = *(float *)&dword_AA8C74; v16 = sub_40A910(-888789954); sub_456040((int)v15, (int)v16, (char)v45, (int)v46, (int)v47, SLODWORD(v48), 5); v45 = (char *)dword_AA8D98; v46 = (char *)dword_AA8D9C; v47 = (char *)dword_AA8DA0; v48 = *(float *)&dword_AA8DA4; v17 = sub_40A910(508243066); sub_456760(v50, (int)"WinTitle", (int)v17, (char)v45, (int)v46, (int)v47, SLODWORD(v48), 5); v18 = sub_8FB140(v55, (int)"TgetSlot", (int)&v54, (int)&a3, 0); v19 = sub_8F3EB0(v54 - v52, a3 - v53, (int)v18, v3, 0, 0); v20 = sub_5D2DD0(3, 3, (int)v19); *(_DWORD *)(v3 + 392) = v20; (*(void (__thiscall **)(_DWORD *, signed int))(*v20 + 240))(v20, 1); if ( *(_DWORD *)(v3 + 396) > 0u ) { v21 = (char *)1; v22 = (void ***)(v3 + 352); do { v49 = 0.0; v48 = 0.0; v47 = (char *)5; v43 = dword_AA8C68; v44 = dword_AA8C6C; v45 = (char *)dword_AA8C70; v46 = (char *)dword_AA8C74; v23 = sub_7549E0("TitleName%02d", v21); v24 = sub_456980( v50, (int)v23, (int)&unk_9C2E9B, 0, v43, v44, (int)v45, (int)v46, (int)v47, (volatile LONG *)LODWORD(v48), SLOBYTE(v49)); v49 = 0.0; *(v22 - 1) = (void **)v24; v25 = *((_DWORD *)v24 + 72); v48 = *(float *)&v21; v47 = "RegBtnLock%02d"; *(_BYTE *)(v25 + 284) = 1; v48 = COERCE_FLOAT(sub_7549E0(v47, v48)); v47 = v21; v47 = sub_7549E0("RegBtnClick%02d", v21); v46 = v21; v46 = sub_7549E0("RegBtnOver%02d", v21); v45 = v21; v26 = sub_7549E0("RegBtnNor%02d", v21); v27 = sub_4563D0(v50, (int)v21, (int)v26, (int)v46, (int)v47, SLODWORD(v48), (volatile LONG *)LODWORD(v49)); v49 = 0.0; v48 = *(float *)&v21; v47 = "Slot%02d"; *v22 = (void **)v27; v28 = sub_7549E0(v47, v48); v29 = sub_456820(v50, (int)v28, (volatile LONG *)LODWORD(v49)); v30 = (void **)sub_5D2DD0(3, 3, (int)v29); v46 = (char *)1854303943; *(v22 - 2) = v30; v31 = sub_40A910((int)v46); sub_8F2EA0(*(v22 - 2), v31); (*(v22 - 2))[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**(v22 - 2) + 60))(1); (*v22)[68] = (void *)dword_AD01E8; v32 = sub_40A910(1519549821); sub_8F2EA0(*v22, v32); (*((void (__stdcall **)(signed int))**v22 + 60))(1); v33 = *v22; v51 = 0; a2 = 0.0; (*((void (__stdcall **)(int *, float *))*v33 + 45))(&v51, &a2); v49 = 0.0; v48 = *(float *)&v21; v34 = sub_7549E0("RegBtnNor%02d", v21); v35 = sub_456820(v50, (int)v34, (volatile LONG *)LODWORD(v49)); v49 = a2; v36 = v51; v22[1] = (void **)v35; (*(void (__thiscall **)(volatile LONG *, int, float))(*v35 + 308))(v35, v36, COERCE_FLOAT(LODWORD(v49))); v37 = v22[1]; v49 = 2.0616661e16; v37[68] = (void *)dword_AD01E8; v38 = sub_40A910(SLODWORD(v49)); sub_8F2EA0(v22[1], v38); (*((void (__stdcall **)(_DWORD))*v22[1] + 69))(0.0); (*((void (__stdcall **)(signed int))*v22[1] + 64))(1); (*((void (__stdcall **)(_DWORD))*v22[1] + 60))(0); ++v21; v22 += 4; } while ( (unsigned int)(v21 - 1) < *(_DWORD *)(v3 + 396) ); } v39 = *(float *)(v3 + 396); v49 = 0.0; v48 = v39; v40 = sub_7549E0("RegCancelBtnNor%02d", v39); v41 = sub_456820(v50, (int)v40, (volatile LONG *)LODWORD(v49)); *(_DWORD *)(v3 + 404) = v41; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 256))(v41, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 404) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.0, 0.5); LOBYTE(v56) = 0; sub_4562E0(v50); v56 = -1; if ( v55 ) { v42 = (void (__thiscall ***)(_DWORD, signed int))v55; if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) ) { if ( v42 ) (**v42)(v42, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0050CC20) -------------------------------------------------------- char __thiscall sub_50CC20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx _DWORD **v4; // esi const CHAR *v5; // edi char result; // al int v7; // eax __int16 v8; // ax __int16 v9; // cx _DWORD **v10; // esi const CHAR *v11; // edi int v12; // [esp+8h] [ebp-8h] char v13; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[98]; if ( *(_DWORD *)(v3 + 300) ) { v4 = (_DWORD **)(v2 + 58); v5 = sub_40A910(-1118169279); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); } else if ( *(_DWORD *)(v2[4 * a2 + 86] + 300) ) { v10 = (_DWORD **)(v2 + 58); v11 = sub_40A910(441726758); if ( v10[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v10[1] + 4))(25, v11, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v10[1] + 20))(25, v11, v10); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v10)[5])(v10, 25, v11, v10); } else { v7 = *(_DWORD *)(v3 + 308); if ( v7 == 1 ) { v8 = v12 & 0x3FF | 0x2000; LOWORD(v12) = v12 & 0x3FF | 0x2000; } else if ( v7 ) { v8 = v12; } else { v8 = v12 & 0x3FF | 0x2400; LOWORD(v12) = v12 & 0x3FF | 0x2400; } v9 = (v8 ^ *(_WORD *)(v3 + 304)) & 0x3FF; v13 = a2; LOWORD(v12) = v9 ^ v8; result = sub_685860(&byte_ADA230, (_WORD *)&v12 + 1); if ( result ) result = sub_6F3D10(&off_AB7F2C, 12, 66, &v12, 5u); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (0050CD80) -------------------------------------------------------- void __userpurge sub_50CD80(int a1@, int a2@, int a3, int a4) { int v4; // ebx int v5; // edi char v6; // al bool v7; // zf int v8; // esi int v9; // edi int v10; // ebx __int16 **v11; // eax __int16 *v12; // edi int v13; // eax int v14; // ebx _DWORD *v15; // eax int v16; // ebx char *v17; // eax char *v18; // eax int v19; // ST08_4 char *v20; // eax void (__stdcall *v21)(signed int); // eax int v22; // ecx void (__stdcall *v23)(signed int, int); // eax const char *v24; // eax int v25; // esi char v26; // al int v27; // [esp-4h] [ebp-94h] char v28; // [esp+8h] [ebp-88h] int v29; // [esp+Ch] [ebp-84h] int v30; // [esp+10h] [ebp-80h] int v31; // [esp+14h] [ebp-7Ch] int v32; // [esp+18h] [ebp-78h] unsigned __int16 *v33; // [esp+1Ch] [ebp-74h] char v34; // [esp+23h] [ebp-6Dh] __int16 v35; // [esp+24h] [ebp-6Ch] v4 = a3; v5 = a1; v32 = a1; v29 = a3; if ( a3 ) { v27 = a2; v6 = sub_685860(&byte_ADA230, &v28); v7 = *(_BYTE *)(a3 + 57) == 0; v34 = v6; v31 = 0; if ( !v7 ) { v8 = v5 + 352; v33 = (unsigned __int16 *)(a3 + 48); while ( 1 ) { (*(void (__stdcall **)(void *))(**(_DWORD **)(v8 - 4) + 472))(&unk_9C2EAA); sub_5D2940(*(_DWORD **)(v8 - 8)); if ( *v33 != -1 ) break; LABEL_22: v4 = v29; v22 = *(unsigned __int8 *)(v29 + 57); v33 = (unsigned __int16 *)((char *)v33 + 3); v8 += 16; if ( ++v31 >= v22 ) goto LABEL_23; } v9 = dword_ACB230; v10 = *v33; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v10) && (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) && (v11 = (__int16 **)(*(_DWORD *)(v9 + 196) + 4 * v10), *v11) && (v12 = *v11) != 0 ) { v13 = sub_4B1600((unsigned __int16)*v12); v30 = v13; if ( !v13 ) { LABEL_21: v5 = v32; goto LABEL_22; } v14 = sub_4B15B0(*(unsigned __int16 *)(v13 + 2)); if ( v14 ) { v35 = *v12; v15 = sub_6876E0((unsigned __int16 *)&v35); if ( v15 ) sub_5D2810(*(int **)(v8 - 8), (int)v15, 1, 1); v16 = v14 + 3; if ( *(_BYTE *)(v30 + 4) ) { v19 = *((unsigned __int8 *)v33 + 2); v20 = (char *)sub_40A910(-890504874); v18 = sub_7549E0(v20, v16, v19); } else { v17 = (char *)sub_40A910(-890504618); v18 = sub_7549E0(v17, v16); } (*(void (__stdcall **)(char *))(**(_DWORD **)(v8 - 4) + 472))(v18); } v21 = *(void (__stdcall **)(signed int))(**(_DWORD **)v8 + 240); if ( v34 ) { v21(1); goto LABEL_21; } } else { v21 = *(void (__stdcall **)(signed int))(**(_DWORD **)v8 + 240); } v21(0); goto LABEL_21; } LABEL_23: v23 = *(void (__stdcall **)(signed int, int))(**(_DWORD **)(v5 + 404) + 256); if ( *(_BYTE *)(v4 + 58) ) { v23(0, v27); } else { v23(1, v27); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 16 * (*(_DWORD *)(v5 + 396) + 21)) + 240))(0); v24 = sub_40A910(1990616711); sub_8F2EA0(*(void ***)(v5 + 16 * *(_DWORD *)(v5 + 396) + 328), v24); } v25 = **(_DWORD **)(v5 + 16 * *(_DWORD *)(v5 + 396) + 340); v26 = (*(int (**)(void))(**(_DWORD **)(v5 + 16 * (*(_DWORD *)(v5 + 396) + 21)) + 244))(); (*(void (__thiscall **)(_DWORD, bool))(v25 + 240))(*(_DWORD *)(v5 + 16 * *(_DWORD *)(v5 + 396) + 340), v26 == 0); } } // 50CD80: could not find valid save-restore pair for esi // ACB230: using guessed type int dword_ACB230; // ADA230: using guessed type char byte_ADA230; //----- (0050CFF0) -------------------------------------------------------- void __thiscall sub_50CFF0(void ***this) { int v1; // esi bool v2; // zf void ***v3; // ebx int v4; // eax size_t v5; // eax void *v6; // eax _DWORD *v7; // edi const char *v8; // eax int v9; // [esp+4h] [ebp-18h] const CHAR *v10; // [esp+8h] [ebp-14h] const CHAR *v11; // [esp+Ch] [ebp-10h] const CHAR *v12; // [esp+10h] [ebp-Ch] void ***v13; // [esp+14h] [ebp-8h] unsigned int v14; // [esp+18h] [ebp-4h] v1 = (int)this; v2 = this[99] == 0; v13 = this; v14 = 0; if ( !v2 ) { v3 = this + 86; do { v10 = &byte_9A8050; v11 = &byte_9A8050; v12 = &byte_9A8050; v9 = 1854303943; v4 = *(_DWORD *)(dword_AC9C80 + 56); if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; v6 = bsearch(&v9, dword_ACB3A4, v5, 0x10u, sub_4508B0); v7 = v6; if ( v6 ) { if ( strcmp(*((const char **)v6 + 2), "None") ) sub_6BA890(&dword_AB6520, v7[2]); if ( strcmp((const char *)v7[3], "None") ) sub_6BA680(&dword_AB6520, v7[3]); v8 = (const char *)v7[1]; v1 = (int)v13; } else { v8 = &byte_9A8050; } sub_8F2EA0(*v3, v8); (*v3)[68] = (void *)dword_AD01E8; v3 += 4; ++v14; } while ( v14 < *(_DWORD *)(v1 + 396) ); } } // AC9C80: using guessed type int dword_AC9C80; // AD01E8: using guessed type int dword_AD01E8; //----- (0050D130) -------------------------------------------------------- int __cdecl sub_50D130(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x198u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &EnchantGemToolTipWin::`vftable'; *(_DWORD *)(v2 + 232) = &EnchantGemToolTipWin::`vftable'; *(_DWORD *)(v2 + 392) = 0; *(_DWORD *)(v2 + 396) = 0; *(_DWORD *)(v2 + 400) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C31D0: using guessed type void *EnchantGemToolTipWin::`vftable'; // 9C31EC: using guessed type void *EnchantGemToolTipWin::`vftable'; //----- (0050D280) -------------------------------------------------------- int __cdecl sub_50D280(int a1, int a2) { void *v2; // eax int v3; // esi void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x198u); v3 = (int)v2; v6 = v2; v7 = 0; if ( v2 ) { Concurrency::overwrite_buffer::overwrite_buffer(v2); *(_DWORD *)v3 = &EnchantGemWin::`vftable'; *(_DWORD *)(v3 + 232) = &EnchantGemWin::`vftable'; } else { v3 = 0; } if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v3); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C3410: using guessed type void *EnchantGemWin::`vftable'; // 9C342C: using guessed type void *EnchantGemWin::`vftable'; //----- (0050D3C0) -------------------------------------------------------- int __cdecl sub_50D3C0(int a1, int a2) { void *v2; // eax int v3; // esi void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x19Cu); v3 = (int)v2; v6 = v2; v7 = 0; if ( v2 ) { Concurrency::overwrite_buffer::overwrite_buffer(v2); *(_DWORD *)v3 = &EnchantGemDeleteWin::`vftable'; *(_DWORD *)(v3 + 232) = &EnchantGemDeleteWin::`vftable'; } else { v3 = 0; } if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v3); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C3658: using guessed type void *EnchantGemDeleteWin::`vftable'; // 9C3674: using guessed type void *EnchantGemDeleteWin::`vftable'; //----- (0050D500) -------------------------------------------------------- void *__thiscall sub_50D500(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &EnchantGemToolTipWin::`vftable'; *((_DWORD *)this + 58) = &EnchantGemToolTipWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C31D0: using guessed type void *EnchantGemToolTipWin::`vftable'; // 9C31EC: using guessed type void *EnchantGemToolTipWin::`vftable'; //----- (0050D540) -------------------------------------------------------- void *__thiscall sub_50D540(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &EnchantGemWin::`vftable'; *((_DWORD *)this + 58) = &EnchantGemWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C3410: using guessed type void *EnchantGemWin::`vftable'; // 9C342C: using guessed type void *EnchantGemWin::`vftable'; //----- (0050D680) -------------------------------------------------------- int __thiscall sub_50D680(_DWORD *this) { int result; // eax int v2; // ecx result = this[92]; if ( result ) { v2 = this[74]; result = nullsub_49(*(unsigned __int8 *)(result + 380)); } return result; } // 4B4410: using guessed type _DWORD __stdcall nullsub_49(_DWORD); //----- (0050D6B0) -------------------------------------------------------- char __thiscall sub_50D6B0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // ebx volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // edi volatile LONG *v14; // eax int v15; // [esp+1Ch] [ebp-1Ch] int v16; // [esp+20h] [ebp-18h] int v17; // [esp+24h] [ebp-14h] int v18; // [esp+28h] [ebp-10h] int v19; // [esp+34h] [ebp-4h] volatile LONG **v20; // [esp+40h] [ebp+8h] volatile LONG **v21; // [esp+40h] [ebp+8h] volatile LONG **v22; // [esp+40h] [ebp+8h] v2 = (int)this; v18 = 0; v19 = 0; v3 = (volatile LONG *)sub_43D0D0(0xFu); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v18; v19 = -1; if ( !v18 || InterlockedDecrement((volatile LONG *)(v18 + 4)) ) return 0; v5 = v18 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\Event01.nif"); sub_8F66B0(v8, (int)&v18, v7); if ( !v18 ) return 0; v9 = sub_8FB140(v18, (int)"Object01", (int)&v16, (int)&v17, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"EventFriendWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v18; v19 = -1; if ( !v18 || InterlockedDecrement((volatile LONG *)(v18 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v16; v15 = v17; v20 = sub_8FB140(v18, (int)"ClsNor", (int)&v16, (int)&v17, v3); sub_8FB650(v20, v18, (int)"ClsClick"); sub_8FB650(v20, v18, (int)"ClsOver"); sub_8FE0F0(v16 - v10, v17 - v15, (int)v20, v2, 12, 0, 0); v21 = sub_8FB140(v18, (int)"RegistNor", (int)&v16, (int)&v17, v3); sub_8FB650(v21, v18, (int)"RegistClick"); sub_8FB650(v21, v18, (int)"RegistOver"); v11 = sub_8FE0F0(v16 - v10, v17 - v15, (int)v21, v2, 10, 0, 0); *(_DWORD *)(v2 + 344) = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); if ( !*(_DWORD *)(v2 + 344) ) goto LABEL_22; v22 = sub_8FB140(v18, (int)"CheckNor", (int)&v16, (int)&v17, v3); sub_8FB650(v22, v18, (int)"CheckClick"); v12 = sub_465940(v16 - v10, v17 - v15, (int)v22, v2, 14, 0); *(_DWORD *)(v2 + 368) = v12; if ( !v12 || (v13 = sub_8FB140(v18, (int)"Text01", (int)&v16, (int)&v17, v3), sub_8FB650(v13, v18, (int)"Text01"), sub_8FB650(v13, v18, (int)"Text01"), v14 = sub_8FE0F0(v16 - v10, v17 - v15, (int)v13, v2, 14, 0, 0), (*(_DWORD *)(v2 + 360) = v14) == 0) ) { LABEL_22: v19 = -1; sub_410C00(&v18); return 0; } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v19 = -1; sub_410C00(&v18); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0050DA00) -------------------------------------------------------- char __thiscall sub_50DA00(int this, int a2, int a3) { int v3; // eax _DWORD *v4; // esi volatile LONG **v5; // edi const CHAR *v6; // eax int v7; // ecx LOBYTE(v3) = a2 - 10; v4 = (_DWORD *)this; switch ( a2 ) { case 10: v5 = *(volatile LONG ***)(this + 296); v6 = sub_40C190(-2069712406); LOBYTE(v3) = sub_4A4ED0(v5, v4, (_DWORD *)0xD, (int)v6); break; case 11: case 12: LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); break; case 13: v3 = *(_DWORD *)(*(_DWORD *)(this + 296) + 748); if ( v3 ) { v3 = (*(int (**)(void))(**(_DWORD **)(v3 + 344) + 452))(); if ( v3 ) { v7 = v4[74]; LOBYTE(v3) = nullsub_12(v3); } } break; case 14: if ( *(_DWORD *)(this + 368) ) *(_BYTE *)(*(_DWORD *)(this + 368) + 380) = *(_BYTE *)(*(_DWORD *)(this + 368) + 380) == 0; break; default: return v3; } return v3; } // 4B4420: using guessed type _DWORD __stdcall nullsub_12(_DWORD); //----- (0050DC20) -------------------------------------------------------- void *__thiscall sub_50DC20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &EventFriendWin::`vftable'; *((_DWORD *)this + 58) = &EventFriendWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C3940: using guessed type void *EventFriendWin::`vftable'; // 9C395C: using guessed type void *EventFriendWin::`vftable'; //----- (0050DC60) -------------------------------------------------------- void __fastcall sub_50DC60(LONG a1, int a2, int a3, int a4, LONG a5) { int v5; // esi void (__thiscall *v6)(int, LONG *, LONG *); // eax int v7; // eax LONG v8; // [esp+0h] [ebp-4h] v8 = a1; if ( a5 ) { v5 = a1 - 232; a5 = pt.x; v6 = *(void (__thiscall **)(int, LONG *, LONG *))(*(_DWORD *)(a1 - 232) + 224); v8 = pt.y; v6(a1 - 232, &a5, &v8); if ( a5 >= 0 ) { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); if ( a5 < v7 && v8 >= 0 ) (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); } } } //----- (0050DCD0) -------------------------------------------------------- int __thiscall sub_50DCD0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx bool v4; // zf bool v5; // bl int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax v2 = this; v3 = this[99]; v4 = v2[104] == 0; *((_BYTE *)v2 + 444) = a2; v5 = !v4; v6 = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 256))(a2); LOBYTE(v6) = *((_BYTE *)v2 + 444) && v5; (*(void (__stdcall **)(int))(*(_DWORD *)v2[100] + 256))(v6); v7 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[101] + 256))(*((unsigned __int8 *)v2 + 444)); LOBYTE(v7) = *((_BYTE *)v2 + 444) && v5; v8 = (*(int (__stdcall **)(int))(*(_DWORD *)v2[93] + 256))(v7); LOBYTE(v8) = *((_BYTE *)v2 + 444) && v5; v9 = (*(int (__stdcall **)(int))(*(_DWORD *)v2[94] + 256))(v8); LOBYTE(v9) = *((_BYTE *)v2 + 444) && v5; v10 = (*(int (__stdcall **)(int))(*(_DWORD *)v2[95] + 256))(v9); LOBYTE(v10) = *((_BYTE *)v2 + 444) && v5; (*(void (__stdcall **)(int))(*(_DWORD *)v2[97] + 256))(v10); return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 256))(*((unsigned __int8 *)v2 + 444)); } //----- (0050DE80) -------------------------------------------------------- int __thiscall sub_50DE80(float *this) { float *v1; // edi int v2; // esi int v3; // ecx int result; // eax v1 = this; v2 = *((_DWORD *)this + 107); if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); if ( v2 ) { v3 = *((_DWORD *)v1 + 96); if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 452))(v2); } v1[89] = 2.0; result = sub_8D06E0(v1 + 86, flt_ACCFCC, 1); if ( v2 ) { result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0050DF40) -------------------------------------------------------- int __thiscall sub_50DF40(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi bool v3; // bl v2 = this; v3 = dword_BA6AD8 >= 1; if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*this[96] + 332))(pt.x, pt.y) && v3 ) sub_50DCD0(v2, *((_BYTE *)v2 + 444) == 0); return sub_8F1140(v2, a2); } // BA6AD8: using guessed type int dword_BA6AD8; //----- (0050DFE0) -------------------------------------------------------- char *__thiscall sub_50DFE0(char *this) { char *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &FeedMoverWin::`vftable'; *((_DWORD *)v1 + 58) = &FeedMoverWin::`vftable'; sub_8D06C0((float *)v1 + 86); *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 94) = 0; *((_DWORD *)v1 + 95) = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 99) = 0; *((_DWORD *)v1 + 100) = 0; *((_DWORD *)v1 + 101) = 0; *((_DWORD *)v1 + 102) = 0; *((_DWORD *)v1 + 103) = 0; *((_DWORD *)v1 + 104) = 0; `eh vector constructor iterator'( v1 + 420, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 110) = 0; v1[444] = 1; *((_DWORD *)v1 + 112) = -1; *((_DWORD *)v1 + 113) = 0; *((_DWORD *)v1 + 97) = 0; *((_DWORD *)v1 + 98) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C3CC8: using guessed type void *FeedMoverWin::`vftable'; // 9C3CE4: using guessed type void *FeedMoverWin::`vftable'; //----- (0050E0E0) -------------------------------------------------------- char __thiscall sub_50E0E0(_DWORD *this, int a2) { int v2; // esi int v3; // ebx volatile LONG *v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // esi char *v7; // eax volatile LONG **v8; // eax void (__thiscall *v9)(int, signed int); // eax int v10; // edi int v11; // ebx volatile LONG **v12; // eax volatile LONG *v13; // eax char *v14; // eax volatile LONG *v15; // eax char *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // ST48_4 volatile LONG *v30; // eax volatile LONG *v31; // eax int v32; // eax volatile LONG *v33; // eax int v34; // eax volatile LONG *v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi int v37; // [esp+60h] [ebp-24h] int v38; // [esp+60h] [ebp-24h] int v39; // [esp+64h] [ebp-20h] int v40; // [esp+68h] [ebp-1Ch] volatile LONG *v41; // [esp+6Ch] [ebp-18h] int v42; // [esp+70h] [ebp-14h] int v43; // [esp+74h] [ebp-10h] int v44; // [esp+80h] [ebp-4h] v2 = (int)this; v3 = a2; this[92] = a2; v42 = 0; v44 = 0; v4 = (volatile LONG *)sub_43D0D0(4u); v41 = v4; if ( !v4 ) goto LABEL_24; v37 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\PetFace.nif"); sub_8F66B0(v7, (int)&v42, v37); if ( !v42 ) return 0; v8 = sub_8FB140(v42, (int)"Frame", (int)&v43, (int)&a2, v4); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, v3, (int)"FeedMoverWin", 0) ) { LABEL_24: v5 = (void (__thiscall ***)(_DWORD, signed int))v42; v44 = -1; if ( v42 && !InterlockedDecrement((volatile LONG *)(v42 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v9 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 240); *(_BYTE *)(v2 + 254) = 1; v9(v2, 1); v10 = v43; v11 = a2; v12 = sub_8FB140(v42, (int)"Panel03", (int)&v43, (int)&a2, v41); v13 = sub_8F3EB0(v43, a2, (int)v12, v2, 0, 0); *(_DWORD *)(v2 + 392) = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( !byte_ACAD5C ) sub_420410(); v14 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, "coll01"); v15 = sub_486130((int)v14); v38 = (int)v15; if ( !v15 ) { if ( !byte_ACAD5C ) sub_420410(); v16 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, "coll01"); v15 = sub_486130((int)v16); v38 = (int)v15; } v17 = sub_8FB140(v42, (int)"FaceCut_Mon", (int)&v43, (int)&a2, v15); v18 = sub_8F3EB0(v43 - v10, a2 - v11, (int)v17, v2, 0, 0); *(_DWORD *)(v2 + 384) = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 384) + 452))(v38); v19 = sub_8FB140(v42, (int)"Panel04", (int)&v43, (int)&a2, v41); v20 = sub_8F3EB0(v43, a2, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(v42, (int)"Panel02", (int)&v43, (int)&a2, v41); v22 = sub_8F3EB0(v43, a2, (int)v21, v2, 0, 0); *(_DWORD *)(v2 + 388) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = sub_8FB140(v42, (int)"Fill_HP_Start", (int)&v43, (int)&a2, v41); v24 = sub_90CB20(v43 - v10, a2 - v11, (int)v23, v2, 2); *(_DWORD *)(v2 + 376) = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 256))(v24, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v25 = sub_8FB140(v42, (int)"Fill_HP_End", (int)&v43, (int)&a2, v41); v26 = sub_90CB20(v43 - v10, a2 - v11, (int)v25, v2, 2); *(_DWORD *)(v2 + 380) = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 256))(v26, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v27 = sub_8FB140(v42, (int)"Fill_HP", (int)&v43, (int)&a2, v41); v28 = sub_90CB20(v43 - v10, a2 - v11, (int)v27, v2, 2); *(_DWORD *)(v2 + 372) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); sub_8F71E0(v42, (int)"CharName", &v43, &a2, &v39, &v40); v29 = (volatile LONG *)dword_AD01E8; v30 = (volatile LONG *)sub_421050(0); v31 = sub_90AEF0(v43 - v10, a2 - v11, v39, v40, v30, (_DWORD *)v2, (int)"2", 0, 0, 1, v29, (volatile LONG *)0x14); *(_DWORD *)(v2 + 396) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 488))(v31, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 240))(0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 396) + 472))("TestName"); sub_8F71E0(v42, (int)"Num_Hungry", &v43, &a2, &v39, &v40); v32 = sub_421050(0); v33 = sub_8F4A20(v43 - v10, a2 - v11, v39, v40, v32, v2, (int)"2", 0); *(_DWORD *)(v2 + 400) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); sub_8F71E0(v42, (int)"Num_Velocity", &v43, &a2, &v39, &v40); v34 = sub_421050(0); v35 = sub_8F4A20(v43 - v10, a2 - v11, v39, v40, v34, v2, (int)"2", 0); *(_DWORD *)(v2 + 404) = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 240))(0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 404) + 472))("-"); sub_402E40((void *)v2, xRight, dword_AC2F78, COERCE_INT(0.0), COERCE_INT(0.25)); v44 = -1; if ( v42 ) { v36 = (void (__thiscall ***)(_DWORD, signed int))v42; if ( !InterlockedDecrement((volatile LONG *)(v42 + 4)) ) { if ( v36 ) (**v36)(v36, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0050E670) -------------------------------------------------------- void __thiscall sub_50E670(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax _DWORD *v4; // eax v2 = this; sub_8D0730((int)(this + 86), flt_ACCFCC); if ( v3 == 1 && v2[96] ) { v4 = v2 + 105; if ( !v2[109] ) v4 = v2 + 106; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 452))(*v4); } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0050E6D0) -------------------------------------------------------- void __thiscall sub_50E6D0(int this) { int v1; // ebx int v2; // eax unsigned int v3; // edx int v4; // esi int v5; // ST18_4 char *v6; // eax char *v7; // eax unsigned int v8; // eax char *v9; // edi char v10; // cl int v11; // esi int v12; // ST18_4 char *v13; // eax char *v14; // eax char v15; // [esp+4h] [ebp-104h] char v16; // [esp+5h] [ebp-103h] char v17; // [esp+83h] [ebp-85h] char v18; // [esp+84h] [ebp-84h] char v19; // [esp+85h] [ebp-83h] v1 = this; if ( *(_DWORD *)(this + 404) ) { v2 = *(unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACDA30 + 4), *(unsigned __int8 *)(this + 452)); if ( (_WORD)v2 && (v3 = (signed int)((unsigned __int64)(27487790700i64 * v2) >> 32) >> 6, (v4 = v3 + (v3 >> 31)) != 0) ) { v18 = 0; memset(&v19, 0, 0x7Fu); v15 = 0; memset(&v16, 0, 0x7Fu); v5 = *(_DWORD *)(v1 + 440); v6 = (char *)sub_40A910(-453757369); v7 = sub_7549E0(v6, v5); sprintf(&v18, v7); sprintf(&v15, "(+%d)", v4); v8 = strlen(&v15) + 1; v9 = &v17; do v10 = (v9++)[1]; while ( v10 ); qmemcpy(v9, &v15, v8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v1 + 404) + 472))(&v18); } else { v11 = **(_DWORD **)(v1 + 404); v12 = *(_DWORD *)(v1 + 440); v13 = (char *)sub_40A910(-453757369); v14 = sub_7549E0(v13, v12); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(*(_DWORD *)(v1 + 404), v14); } } } // ACDA30: using guessed type int dword_ACDA30; //----- (0050E840) -------------------------------------------------------- void __thiscall sub_50E840(_DWORD *this) { _DWORD *v1; // esi float *v2; // ecx float v3; // ST0C_4 _DWORD *v4; // eax v1 = this; v2 = (float *)this[93]; if ( v2 ) { v3 = (double)(unsigned int)v1[108]; v2[75] = (double)(unsigned int)v1[109]; v2[76] = v3; sub_49F670(v2); } if ( v1[90] != -1 && v1[96] ) { v4 = v1 + 105; if ( !v1[109] ) v4 = v1 + 106; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[96] + 452))(*v4); } } //----- (0050E8E0) -------------------------------------------------------- volatile LONG *__cdecl sub_50E8E0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_50DFE0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( sub_50E0E0(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } result = 0; } return result; } //----- (0050EA10) -------------------------------------------------------- char __thiscall sub_50EA10(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v7; // esi int v8; // eax int v9; // edi int v10; // eax int v11; // esi _DWORD *v12; // esi const CHAR *v13; // eax int v14; // [esp-Ch] [ebp-10h] _DWORD *v15; // [esp+Ch] [ebp+8h] v4 = this; if ( !*(_DWORD *)a2 ) return 0; v5 = *(_DWORD **)(*(_DWORD *)a2 + 4); v15 = v5; if ( v5[2] || v5[4] ) { byte_BA6BD0 = 1; return 0; } v7 = (_DWORD *)v5[5]; if ( !v7 ) { byte_BA6BD0 = 1; return 0; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v7 + 4))(v7) != 22 ) return 0; v8 = v4[102]; if ( !v8 ) return 0; if ( *(_WORD *)(v8 + 48) || (v9 = v4[104]) == 0 ) { v14 = 1906944922; LABEL_18: v12 = (_DWORD *)v4[92]; v13 = sub_40C190(v14); sub_492060(v12, (int)v13); return 0; } v10 = v7[28]; if ( v10 ) { if ( !strncmp((const char *)(v10 + 2), (const char *)(v9 + 32), strlen((const char *)(v10 + 2))) ) { v11 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v11, v15[3]); (**(void (__thiscall ***)(int, _DWORD))(v11 + 8))(v11 + 8, v4[92]); return 1; } v14 = -1141985811; goto LABEL_18; } return 0; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0050EB10) -------------------------------------------------------- void __thiscall sub_50EB10(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi int v5; // eax void *v6; // eax unsigned __int16 *v7; // eax int v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx int v12; // esi char *v13; // eax void *v14; // ecx void *v15; // ecx void *v16; // ecx char *v17; // esi char *v18; // eax _DWORD *v19; // eax _DWORD *v20; // esi _DWORD *v21; // edi _DWORD *v22; // esi char *v23; // edi char *v24; // eax _DWORD *v25; // eax int v26; // ecx int v27; // [esp-4h] [ebp-8Ch] char *v28; // [esp+18h] [ebp-70h] _DWORD *v29; // [esp+1Ch] [ebp-6Ch] int v30; // [esp+20h] [ebp-68h] signed int v31; // [esp+20h] [ebp-68h] char v32; // [esp+24h] [ebp-64h] int v33; // [esp+34h] [ebp-54h] int v34; // [esp+38h] [ebp-50h] char v35; // [esp+40h] [ebp-48h] int v36; // [esp+50h] [ebp-38h] int v37; // [esp+54h] [ebp-34h] char v38; // [esp+5Ch] [ebp-2Ch] int v39; // [esp+6Ch] [ebp-1Ch] int v40; // [esp+70h] [ebp-18h] int v41; // [esp+84h] [ebp-4h] v1 = this; v30 = this[112]; v2 = *(_DWORD *)(dword_ACB374 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { while ( 1 ) { v5 = sub_7474E0((_DWORD *)(dword_ACB374 + 4), v4); if ( v5 ) { if ( *(_DWORD *)v5 == v30 ) break; } if ( ++v4 >= v3 ) goto LABEL_8; } } else { LABEL_8: v5 = 0; } v1[102] = v5; if ( v5 ) { v6 = sub_50EFA0((char *)(v5 + 4)); v1[103] = v6; if ( v6 ) { v7 = (unsigned __int16 *)sub_440720((char *)(v1[102] + 4)); v1[104] = v7; if ( v7 ) v1[108] = v7[33]; v8 = v1[102]; v9 = v1[99] == 0; v1[110] = (signed __int64)((double)*(unsigned __int16 *)(v8 + 44) * 0.1); if ( !v9 ) { v10 = sub_40C8D0((void *)(v8 + 4)); if ( v10 ) { v11 = v1[113]; v27 = v10 + 34; if ( v11 ) { v12 = *(_DWORD *)v1[99]; v13 = sub_7549E0("(+%d)%s", v11, v27); (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(v1[99], v13); } else { (*(void (__thiscall **)(_DWORD, int))(*(_DWORD *)v1[99] + 472))(v1[99], v27); } } } v14 = (void *)(v1[103] + 128); v34 = 15; v33 = 0; v32 = 0; sub_4018E0(&v32, v14, strlen((const char *)v14)); v15 = (void *)(v1[103] + 160); v41 = 0; v36 = 0; v35 = 0; v37 = 15; sub_4018E0(&v35, v15, strlen((const char *)v15)); v16 = (void *)(v1[103] + 192); LOBYTE(v41) = 1; v40 = 15; v39 = 0; v38 = 0; sub_4018E0(&v38, v16, strlen((const char *)v16)); v17 = &v32; v41 = 2; v28 = &v32; v29 = v1 + 105; v31 = 3; while ( 1 ) { if ( *((_DWORD *)v17 + 5) >= 0x10u ) v17 = *(char **)v17; if ( !byte_ACAD5C ) sub_420410(); v18 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v17); v19 = sub_486130((int)v18); v20 = (_DWORD *)*v29; v21 = v19; if ( (_DWORD *)*v29 != v19 ) { if ( v20 && !InterlockedDecrement(v20 + 1) && v20 ) (*(void (__thiscall **)(_DWORD *, signed int))*v20)(v20, 1); *v29 = v21; if ( v21 ) InterlockedIncrement(v21 + 1); } v22 = (_DWORD *)*v29; if ( *v29 ) InterlockedIncrement(v22 + 1); LOBYTE(v41) = 3; if ( !v22 ) { v23 = v28; if ( *((_DWORD *)v28 + 5) >= 0x10u ) v23 = *(char **)v28; if ( !byte_ACAD5C ) sub_420410(); v24 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v23); v25 = sub_486130((int)v24); if ( v25 ) { v22 = v25; InterlockedIncrement(v25 + 1); } } LOBYTE(v41) = 2; if ( v22 && !InterlockedDecrement(v22 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v22)(v22, 1); ++v29; v28 += 28; if ( !--v31 ) break; v17 = v28; } v26 = v1[96]; v1[109] = 0; if ( v26 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v26 + 452))(v1[106]); sub_50E6D0((int)v1); sub_50DCD0(v1, 1); v41 = -1; `eh vector destructor iterator'(&v32, 0x1Cu, 3, sub_636A10); } } } // ACAD5C: using guessed type char byte_ACAD5C; // ACB374: using guessed type int dword_ACB374; //----- (0050EE90) -------------------------------------------------------- _DWORD *__cdecl sub_50EE90(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACB374 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACB374 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACB374: using guessed type int dword_ACB374; //----- (0050EEE0) -------------------------------------------------------- int __cdecl sub_50EEE0(unsigned __int8 a1) { return sub_7474E0((_DWORD *)(dword_ACDA30 + 4), a1); } // ACDA30: using guessed type int dword_ACDA30; //----- (0050EF00) -------------------------------------------------------- _DWORD *__thiscall sub_50EF00(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &FeedMoverWin::`vftable'; *((_DWORD *)this + 58) = &FeedMoverWin::`vftable'; `eh vector destructor iterator'((char *)this + 420, 4u, 3, sub_410C00); nullsub_6(v2 + 86); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C3CC8: using guessed type void *FeedMoverWin::`vftable'; // 9C3CE4: using guessed type void *FeedMoverWin::`vftable'; //----- (0050EFA0) -------------------------------------------------------- void *__cdecl sub_50EFA0(char *a1) { int v1; // eax unsigned int v2; // edi void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl void *v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACDA00 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACDA00 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACDA00: using guessed type int dword_ACDA00; //----- (0050F160) -------------------------------------------------------- char __thiscall sub_50F160(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD **v7; // esi int v9; // ebx int v10; // eax v7 = this; if ( a2 >= 20 ) return 0; v9 = *this[a2 + 104]; v10 = sub_421050(a7); (*(void (__thiscall **)(_DWORD *, int))(v9 + 452))(v7[a2 + 104], v10); (*(void (__stdcall **)(int, int, int, signed int))(*v7[a2 + 104] + 464))(a4, a5, a6, 255); (*(void (__stdcall **)(int))(*v7[a2 + 104] + 472))(a3); return 1; } //----- (0050F1E0) -------------------------------------------------------- char __thiscall sub_50F1E0(volatile LONG *this, int a2, int a3) { int v3; // eax v3 = a2 - 1; if ( a2 == 1 ) LOBYTE(v3) = sub_8F2BC0(this, 1, v3, v3); return v3; } //----- (0050F270) -------------------------------------------------------- char __thiscall sub_50F270(_DWORD **this, signed int a2, int a3) { if ( a2 >= 20 ) return 0; (*(void (__stdcall **)(int))(*this[a2 + 104] + 472))(a3); return 1; } //----- (0050F2A0) -------------------------------------------------------- _DWORD *__thiscall sub_50F2A0(_DWORD **this) { _DWORD **v1; // edi int v2; // esi _DWORD *result; // eax unsigned int v4; // ebx const CHAR *v5; // eax bool v6; // zf int v7; // esi int v8; // esi int *v9; // eax int v10; // edx int v11; // esi unsigned int v12; // eax struct tagSIZE psizl; // [esp+8h] [ebp-18h] _DWORD *v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] _DWORD **v16; // [esp+18h] [ebp-8h] int v17; // [esp+1Ch] [ebp-4h] v1 = this; v2 = (int)(this + 104); result = (_DWORD *)(*(int (**)(void))(*this[104] + 456))(); v14 = result; if ( result ) { SelectObject((HDC)result[48], (HGDIOBJ)result[46]); v4 = 0; v17 = 0; v16 = v1 + 104; v15 = 20; do { v5 = (const CHAR *)(*(int (**)(void))(**(_DWORD **)v2 + 484))(); if ( v5 ) { sub_4593C0(v14, v5, strlen(v5), &psizl); if ( psizl.cx > v4 ) v4 = psizl.cx; v17 += psizl.cy + 3; } v2 = (int)(v16 + 1); v6 = v15-- == 1; ++v16; } while ( !v6 ); v7 = v17; (*(void (__stdcall **)(int))(*v1[124] + 176))(v17); v8 = (*(int (**)(void))(*v1[124] + 148))() + v7; v9 = v1[124]; v10 = *v9; v17 = v8; v11 = *v9; v12 = (*(int (**)(void))(v10 + 144))(); result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, unsigned int))(v11 + 172))(v1[124], (v4 >> 1) - (v12 >> 1) + 20); if ( v4 ) result = (_DWORD *)((int (__thiscall *)(_DWORD **, unsigned int, int))(*v1)[135])( v1, v4 + 2 * (_DWORD)v1[89] + 90, v17 + 2 * (_DWORD)v1[88]); } return result; } //----- (0050F3D0) -------------------------------------------------------- char __thiscall sub_50F3D0(volatile LONG **this, void *a2, int a3, int a4) { volatile LONG **v4; // esi signed int v6; // edi volatile LONG **v7; // ebx int v8; // eax volatile LONG *v9; // eax int v10; // edi char *v11; // eax volatile LONG **v12; // edi volatile LONG *v13; // ST14_4 volatile LONG *v14; // esi int v15; // ST10_4 int v16; // ST0C_4 int v17; // eax volatile LONG *v18; // esi volatile LONG v19; // edi const CHAR *v20; // eax void (__thiscall ***v21)(_DWORD, signed int); // esi v4 = this; if ( !sub_45C530(this, a2, a3, a4, 0, 0, 0, 0) ) return 0; v6 = 0; v7 = v4 + 104; do { v8 = sub_421050(0); v9 = sub_8F4A20((int)v4[89], (int)v4[88] + v6 + 2, 256, 16, v8, (int)v4, 0, 0); *v7 = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v6 += 14; ++v7; } while ( v6 < 280 ); (*((void (__thiscall **)(volatile LONG **))*v4 + 138))(v4); (*((void (__thiscall **)(volatile LONG **, int, int))*v4 + 135))( v4, 2 * (_DWORD)v4[89] + 128, 2 * (_DWORD)v4[88] + 12); a4 = 0; v10 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v11 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v11, (int)&a4, v10); if ( !a4 ) return 0; v12 = sub_8FB140(a4, (int)"BtnNor01", (int)&a2, (int)&a3, 0); sub_8FB650(v12, a4, (int)"BtnClick01"); sub_8FB650(v12, a4, (int)"BtnOver01"); v13 = sub_8FE0F0((int)a2, a3, (int)v12, (int)v4, 1, 0, 0); v4[124] = v13; v14 = v13; v15 = sub_421050(0); v16 = (*(int (__thiscall **)(volatile LONG *))(*v14 + 148))(v14); v17 = (*(int (__thiscall **)(volatile LONG *))(*v14 + 144))(v14); v18 = sub_8F4A20(0, 0, v17, v16, v15, (int)v13, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); v19 = *v18; v20 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v19 + 472))(v18, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); if ( a4 ) { v21 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v21 ) (**v21)(v21, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0050F600) -------------------------------------------------------- _DWORD *__userpurge sub_50F600@(_DWORD **a1@, int a2@, unsigned int *a3) { unsigned int *v3; // edi _DWORD **v4; // esi char *v5; // eax int v6; // ST40_4 _DWORD *v7; // ebx char *v8; // ST3C_4 const CHAR *v9; // eax char *v10; // eax char *v11; // eax _DWORD *v12; // ebx char *v13; // ST44_4 const CHAR *v14; // eax char *v15; // eax char *v16; // eax _DWORD *v17; // ebx char *v18; // ST44_4 const CHAR *v19; // eax char *v20; // eax char *v21; // eax _DWORD *v22; // ebx char *v23; // ST44_4 const CHAR *v24; // eax char *v25; // eax char *v26; // eax _DWORD *v27; // ebx char *v28; // ST44_4 const CHAR *v29; // eax char *v30; // eax char *v31; // eax _DWORD *v32; // ebx char *v33; // ST44_4 const CHAR *v34; // eax char *v35; // eax _DWORD *v36; // ebx char *v37; // ST40_4 const CHAR *v38; // eax char *v39; // eax char *v40; // eax _DWORD *v41; // ebx char *v42; // ST40_4 const CHAR *v43; // eax char *v44; // eax char *v45; // eax _DWORD *v46; // ebx char *v47; // eax _DWORD *v48; // edi double v50[2]; // [esp+3Ch] [ebp-10h] double v51; // [esp+3Ch] [ebp-10h] unsigned int v52; // [esp+40h] [ebp-Ch] signed int v53; // [esp+44h] [ebp-8h] signed int v54; // [esp+44h] [ebp-8h] signed int v55; // [esp+44h] [ebp-8h] signed int v56; // [esp+44h] [ebp-8h] signed int v57; // [esp+44h] [ebp-8h] char *v58; // [esp+44h] [ebp-8h] signed int v59; // [esp+44h] [ebp-8h] signed int v60; // [esp+44h] [ebp-8h] float v61; // [esp+54h] [ebp+8h] float v62; // [esp+54h] [ebp+8h] v3 = a3; v4 = a1; v52 = *a3; if ( (signed int)*a3 <= 0 ) v5 = sub_7549E0("%d", v52); else v5 = sub_7549E0("+%d", v52); v6 = a2; v7 = *v4; v8 = v5; v9 = sub_40C190(373311634); v10 = sub_7549E0("%s : %s", v9, v8); ((void (__thiscall *)(_DWORD **, signed int, char *, int))v7[139])(v4, 2, v10, v6); v53 = a3[1]; if ( v53 <= 0 ) v11 = sub_7549E0("%d", v53); else v11 = sub_7549E0("+%d", v53); v12 = *v4; v13 = v11; v14 = sub_40C190(373378187); v15 = sub_7549E0("%s : %s", v14, v13); ((void (__thiscall *)(_DWORD **, signed int, char *))v12[139])(v4, 3, v15); v54 = a3[4]; if ( v54 <= 0 ) v16 = sub_7549E0("%d", v54); else v16 = sub_7549E0("+%d", v54); v17 = *v4; v18 = v16; v19 = sub_40C190(-788968369); v20 = sub_7549E0("%s : %s", v19, v18); ((void (__thiscall *)(_DWORD **, signed int, char *))v17[139])(v4, 4, v20); v55 = a3[5]; if ( v55 <= 0 ) v21 = sub_7549E0("%d", v55); else v21 = sub_7549E0("+%d", v55); v22 = *v4; v23 = v21; v24 = sub_40C190(960245821); v25 = sub_7549E0("%s : %s", v24, v23); ((void (__thiscall *)(_DWORD **, signed int, char *))v22[139])(v4, 5, v25); v56 = a3[2]; if ( v56 <= 0 ) v26 = sub_7549E0("%d", v56); else v26 = sub_7549E0("+%d", v56); v27 = *v4; v28 = v26; v29 = sub_40C190(658274169); v30 = sub_7549E0("%s : %s", v29, v28); ((void (__thiscall *)(_DWORD **, signed int, char *))v27[139])(v4, 6, v30); v57 = a3[3]; if ( v57 <= 0 ) v31 = sub_7549E0("%d", v57); else v31 = sub_7549E0("+%d", v57); v32 = *v4; v33 = v31; v34 = sub_40C190(792103571); v58 = sub_7549E0("%s : %s", v34, v33); ((void (__thiscall *)(_DWORD **, signed int))v32[139])(v4, 7); v61 = (double)a3[6] / 10.0; v50[0] = v61; if ( v61 <= 0.0 ) v35 = sub_7549E0("%.1f%%", v50[0]); else v35 = sub_7549E0("+%.1f%%", v50[0]); v36 = *v4; v37 = v35; v38 = sub_40C190(764386418); v39 = sub_7549E0("%s : %s", v38, v37); ((void (__thiscall *)(_DWORD **, signed int, char *))v36[139])(v4, 8, v39); v62 = (double)v3[7] / 10.0; v51 = v62; if ( v62 <= 0.0 ) v40 = sub_7549E0("%.1f%%", v51); else v40 = sub_7549E0("+%.1f%%", v51); v41 = *v4; v42 = v40; v43 = sub_40C190(641679252); v44 = sub_7549E0("%s : %s", v43, v42); ((void (__thiscall *)(_DWORD **, signed int, char *, char *))v41[139])(v4, 9, v44, v58); v59 = v3[8]; if ( v59 <= 0 ) v45 = sub_7549E0("%d", v59); else v45 = sub_7549E0("+%d", v59); v46 = *v4; sub_7549E0("MaxHP : %s", v45); ((void (__thiscall *)(_DWORD **, signed int))v46[139])(v4, 10); v60 = v3[9]; if ( v60 <= 0 ) v47 = sub_7549E0("%d", v60); else v47 = sub_7549E0("+%d", v60); v48 = *v4; sub_7549E0("MaxSP : %s", v47); ((void (__thiscall *)(_DWORD **, signed int))v48[139])(v4, 11); return sub_50F2A0(v4); } // 50F600: could not find valid save-restore pair for ebx //----- (0050F910) -------------------------------------------------------- _DWORD *__userpurge sub_50F910@(_DWORD **a1@, int a2@, int a3) { return sub_50F600(a1, a2, (unsigned int *)&unk_AD9E48); } //----- (0050F920) -------------------------------------------------------- int __thiscall sub_50F920(_DWORD *this) { _DWORD *v1; // esi int v2; // edi const CHAR *v3; // eax int v4; // edi const CHAR *v5; // eax int v6; // edi const CHAR *v7; // eax int v8; // edi const CHAR *v9; // eax int v10; // edi const CHAR *v11; // eax int v12; // edi const CHAR *v13; // eax v1 = this; v2 = *this; v3 = sub_40C190(894386555); (*(void (__thiscall **)(_DWORD *, _DWORD, const CHAR *, signed int, signed int, signed int, signed int))(v2 + 548))( v1, 0, v3, 255, 255, 255, 1); (*(void (__thiscall **)(_DWORD *, signed int, const char *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 1, " ", 255, 255, 255, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 2, &unk_9C3F22, 251, 225, 49, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 3, &unk_9C3F23, 149, 251, 192, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 4, &unk_9C3F2F, 154, 251, 49, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 5, &unk_9C3F3A, 154, 251, 49, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 6, &unk_9C3F3B, 101, 163, 255, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 7, &unk_9C3F43, 191, 135, 225, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 8, &unk_9C3F53, 191, 135, 225, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 9, &unk_9C3F9F, 49, 251, 192, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 10, &unk_9C3FAB, 49, 251, 192, 0); (*(void (__thiscall **)(_DWORD *, signed int, void *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 11, &unk_9C3FAE, 191, 135, 225, 0); (*(void (__thiscall **)(_DWORD *, signed int, const char *, signed int, signed int, signed int, _DWORD))(*v1 + 548))( v1, 12, " ", 255, 255, 255, 0); v4 = *v1; v5 = sub_40C190(-1948980230); (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, signed int, signed int, signed int, _DWORD))(v4 + 548))( v1, 13, v5, 251, 225, 49, 0); v6 = *v1; v7 = sub_40C190(-1948914694); (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, signed int, signed int, signed int, _DWORD))(v6 + 548))( v1, 14, v7, 154, 251, 49, 0); v8 = *v1; v9 = sub_40C190(-1948849158); (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, signed int, signed int, signed int, _DWORD))(v8 + 548))( v1, 15, v9, 49, 251, 192, 0); v10 = *v1; v11 = sub_40C190(-1948783622); (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, signed int, signed int, signed int, _DWORD))(v10 + 548))( v1, 16, v11, 101, 163, 255, 0); v12 = *v1; v13 = sub_40C190(-1948718086); return (*(int (__thiscall **)(_DWORD *, signed int, const CHAR *, signed int, signed int, signed int, _DWORD))(v12 + 548))( v1, 17, v13, 191, 135, 225, 0); } //----- (0050FBD0) -------------------------------------------------------- int __cdecl sub_50FBD0(int a1, int a2, int a3) { _BYTE *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1F4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_45B4A0(v3); *(_DWORD *)v4 = &FreeStatView::`vftable'; *(_DWORD *)(v4 + 232) = &FreeStatView::`vftable'; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 560))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9C3FB8: using guessed type void *FreeStatView::`vftable'; // 9C3FD4: using guessed type void *FreeStatView::`vftable'; //----- (0050FD20) -------------------------------------------------------- void *__thiscall sub_50FD20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FreeStatView::`vftable'; *((_DWORD *)this + 58) = &FreeStatView::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C3FB8: using guessed type void *FreeStatView::`vftable'; // 9C3FD4: using guessed type void *FreeStatView::`vftable'; //----- (0050FE50) -------------------------------------------------------- void __thiscall sub_50FE50(int this) { Concurrency::details::_NonReentrantLock::_Release((Concurrency::details::_NonReentrantLock *)(this + 352)); } //----- (0050FEC0) -------------------------------------------------------- char __thiscall sub_50FEC0(int this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2 - 1; if ( a2 == 1 ) { if ( *(_DWORD *)(this + 348) ) { *(_DWORD *)(*(_DWORD *)(this + 348) + 344) = *(_DWORD *)(*(_DWORD *)(this + 344) + 300); LOBYTE(v3) = sub_465130(*(_DWORD **)(this + 348)); } } else if ( a2 == 3 ) { LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); } else { LOBYTE(v3) = a2 - 4; if ( a2 == 4 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "CallFrnd"); } } return (char)v3; } //----- (00510080) -------------------------------------------------------- void __thiscall sub_510080(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx int v3; // esi int v4; // eax int v5; // edx int v6; // eax int v7; // ebx int v8; // eax CHAR *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // ecx int v12; // [esp+4h] [ebp-A0h] char v13; // [esp+8h] [ebp-9Ch] char v14; // [esp+9h] [ebp-9Bh] int v15; // [esp+88h] [ebp-1Ch] int v16; // [esp+8Ch] [ebp-18h] int v17; // [esp+90h] [ebp-14h] int v18; // [esp+94h] [ebp-10h] int v19; // [esp+98h] [ebp-Ch] char v20; // [esp+9Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { sub_466A50(v2); v12 = 0; if ( v1[88] > 0 ) { v3 = (int)(v1 + 92); do { if ( v1[87] ) { v4 = *(_DWORD *)(v3 - 8); v16 = *(_DWORD *)(v3 - 4); v5 = *(_DWORD *)(v3 + 4); v15 = v4; v6 = *(_DWORD *)v3; v18 = v5; v17 = v6; v19 = *(_DWORD *)(v3 + 8); v20 = 0; v7 = ((int (__stdcall *)(int *))loc_466CA0)(&v15); v8 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(v3 + 12)); if ( v8 ) v9 = (CHAR *)(v8 + 21); else v9 = (CHAR *)&byte_9A8050; sub_4661A0((_DWORD *)v1[87], v7, 1, v9); sprintf(&v13, "%d", *(unsigned __int8 *)(v3 + 13)); sub_4661A0((_DWORD *)v1[87], v7, 2, &v13); v13 = *(_BYTE *)(v3 + 14) != 0 ? 111 : 120; v10 = (_DWORD *)v1[87]; v14 = 0; sub_4661A0(v10, v7, 3, &v13); sub_464B20((_DWORD *)v1[87], v7, v3 - 12); sub_464BA0((_DWORD *)v1[87], v7, 1); v11 = (_DWORD *)v1[87]; if ( *(_BYTE *)(v3 - 12) & 1 ) sub_464BE0(v11, v7, 255, 255, 0); else sub_464BE0(v11, v7, 200, 200, 200); } v3 += 72; ++v12; } while ( v12 < v1[88] ); } sub_465130((_DWORD *)v1[87]); sub_4638F0((_DWORD *)v1[86], *(_DWORD *)(v1[87] + 336)); } } // AC9C84: using guessed type int dword_AC9C84; //----- (00510240) -------------------------------------------------------- void __thiscall sub_510240(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; v4 = (_DWORD *)sub_74F770(this + 88, a2); if ( v4 ) { v4[1] = *a3; v4[2] = a3[1]; v4[3] = a3[2]; v4[4] = a3[3]; v4[5] = a3[4]; sub_510080(v3); } } //----- (00510290) -------------------------------------------------------- int __cdecl sub_510290(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2B98u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &FriendCallWin::`vftable'; *(_DWORD *)(v2 + 232) = &FriendCallWin::`vftable'; sub_74F970((_DWORD *)(v2 + 352)); *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C43A8: using guessed type void *FriendCallWin::`vftable'; // 9C43C4: using guessed type void *FriendCallWin::`vftable'; //----- (005103F0) -------------------------------------------------------- void __thiscall sub_5103F0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi v3 = this; sub_74F9C0(this + 88, a2); sub_510080(v3); } //----- (00510420) -------------------------------------------------------- char __thiscall sub_510420(int *this, char a2, int a3, int a4, int a5, int a6) { int *v6; // esi v6 = this; sub_74F6F0(this + 88, &a2); sub_510080(v6); return 1; } //----- (00510450) -------------------------------------------------------- char __thiscall sub_510450(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi v6 = this; sub_74F7D0(this + 88, &a2); sub_510080(v6); return 1; } //----- (00510480) -------------------------------------------------------- char __thiscall sub_510480(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi v6 = this; sub_74FA60(this + 88, &a2); sub_510080(v6); return 1; } //----- (005104B0) -------------------------------------------------------- char __thiscall sub_5104B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, int a8, int a9) { _DWORD *v9; // esi v9 = this; sub_74F840(this + 88, a2, a3, a4, a5, a6, &a7); sub_510080(v9); return 1; } //----- (00510500) -------------------------------------------------------- char __thiscall sub_510500(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { _DWORD *v7; // esi v7 = this; sub_74F8B0(this + 88, a2, a3, a4, a5, a6, a7); sub_510080(v7); return 1; } //----- (00510550) -------------------------------------------------------- char __thiscall sub_510550(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { _DWORD *v7; // esi v7 = this; sub_74F910(this + 88, a2, a3, a4, a5, a6, a7); sub_510080(v7); return 1; } //----- (005105A0) -------------------------------------------------------- char __thiscall sub_5105A0(_DWORD *this, int a2) { int v2; // esi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi int v7; // edi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // edi volatile LONG *v11; // eax _DWORD *v12; // edi int *v13; // edi _DWORD *v14; // edi volatile LONG **v15; // eax volatile LONG *v16; // eax volatile LONG **v17; // eax int v18; // eax int v19; // edi int (__thiscall *v20)(int); // edx int v21; // ecx int v22; // eax int v23; // eax void (__thiscall ***v24)(_DWORD, signed int); // esi void *v25; // [esp+2Ch] [ebp-78h] int v26; // [esp+30h] [ebp-74h] int v27; // [esp+34h] [ebp-70h] char v28; // [esp+38h] [ebp-6Ch] char v29; // [esp+3Ch] [ebp-68h] int v30; // [esp+40h] [ebp-64h] int v31; // [esp+44h] [ebp-60h] int v32; // [esp+48h] [ebp-5Ch] int v33; // [esp+4Ch] [ebp-58h] int v34[5]; // [esp+50h] [ebp-54h] int v35; // [esp+64h] [ebp-40h] int v36; // [esp+68h] [ebp-3Ch] int v37; // [esp+6Ch] [ebp-38h] int v38; // [esp+70h] [ebp-34h] int v39; // [esp+74h] [ebp-30h] void *v40; // [esp+78h] [ebp-2Ch] int v41; // [esp+88h] [ebp-1Ch] unsigned int v42; // [esp+8Ch] [ebp-18h] int v43; // [esp+A0h] [ebp-4h] v2 = (int)this; v39 = 0; this[74] = a2; v43 = 0; v36 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\CallFrnd.nif"); sub_8F66B0(v3, (int)&v39, v36); if ( !v39 ) return 0; v4 = sub_8FB140(v39, (int)"Plane01", (int)&v37, (int)&v38, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"FriendCallWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v39; v43 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v7 = v37; v35 = v37; v36 = v38; v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, v8); else v9 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, 0); sub_8F3EB0(v37 - v7, v38 - v36, (int)v9, v2, 0, 0); sub_456260(v34); LOBYTE(v43) = 1; sub_455FF0(v34, v2); sub_456000(v34, v7, v36); sub_456380(v34, v39); sub_456820(v34, (int)"Panel01", 0); sub_456820(v34, (int)"Panel02", 0); sub_4563D0(v34, 3, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); sub_456760(v34, (int)"WinTitle", (int)&unk_9C4270, dword_AA8D98, dword_AA8D9C, dword_AA8DA0, dword_AA8DA4, 5); sub_456760(v34, (int)"ColumnBox", (int)&unk_9C4288, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v10 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v39 + 72))("HelpLinkNor") ) sub_4563D0(v34, 4, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v10); v11 = sub_4563D0(v34, 1, (int)"OkNor", (int)"OkOver", (int)"OkClick", 0, 0); sub_456040((int)v11, (int)&unk_9C4300, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v25 = 0; v26 = 0; v27 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; LOBYTE(v43) = 2; v12 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v25, 1); *v12 = 1; v12[1] = v39; v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, "ColumnBarNor", 0xCu); v13 = v12 + 18; LOBYTE(v43) = 3; sub_40B060(v13, (const void **)&v40); LOBYTE(v43) = 2; if ( v42 >= 0x10 ) operator delete(v40); v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, "ColumnBarClick", 0xEu); LOBYTE(v43) = 4; sub_40B060(v13, (const void **)&v40); LOBYTE(v43) = 2; if ( v42 >= 0x10 ) operator delete(v40); v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, "ColumnBarOver", 0xDu); LOBYTE(v43) = 5; sub_40B060(v13, (const void **)&v40); LOBYTE(v43) = 2; if ( v42 >= 0x10 ) operator delete(v40); v14 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v25, 2); *v14 = 2; v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, "Column01", 8u); LOBYTE(v43) = 6; sub_40B060(v14 + 18, (const void **)&v40); LOBYTE(v43) = 2; if ( v42 >= 0x10 ) operator delete(v40); v14[1] = v39; v42 = 15; v41 = 0; LOBYTE(v40) = 0; v30 = 5; v31 = 0; sub_466680(&v25, 0); v15 = sub_8FB140(v39, (int)"ListBox", (int)&v37, (int)&v38, 0); v16 = sub_466330(v37 - v35, v38 - v36, (int)v15, *(float *)&v2, (int **)&v25, 0, 0); *(_DWORD *)(v2 + 348) = v16; sub_465130(v16); v17 = sub_8FB140(v39, (int)"SlideBar_SlideBtnMiddle", (int)&v37, (int)&v38, 0); v18 = sub_464310(v39, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v17, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 344) = v18; *(_DWORD *)(v18 + 312) = 2; *(_DWORD *)(*(_DWORD *)(v2 + 344) + 304) = 1; v19 = *(_DWORD *)(v2 + 344); v20 = *(int (__thiscall **)(int))(**(_DWORD **)(v2 + 344) + 168); v21 = *(_DWORD *)(v2 + 344); v35 = **(_DWORD **)(v2 + 344); v22 = v20(v21); v23 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v19 + 164))(v19, v22 - 18); (*(void (__thiscall **)(_DWORD, int))(v35 + 308))(*(_DWORD *)(v2 + 344), v23); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v43) = 1; if ( v25 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v25, v26, &v28, v35); operator delete(v25); } v25 = 0; v26 = 0; v27 = 0; LOBYTE(v43) = 0; sub_4562E0(v34); v24 = (void (__thiscall ***)(_DWORD, signed int))v39; v43 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v24 ) (**v24)(v24, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00510B40) -------------------------------------------------------- _DWORD *__thiscall sub_510B40(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &FriendCallWin::`vftable'; *((_DWORD *)this + 58) = &FriendCallWin::`vftable'; sub_74F9A0((_DWORD *)this + 88); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C43A8: using guessed type void *FriendCallWin::`vftable'; // 9C43C4: using guessed type void *FriendCallWin::`vftable'; //----- (00510C30) -------------------------------------------------------- int __thiscall sub_510C30(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*this[86] + 464))(a2); return result; } //----- (00510C70) -------------------------------------------------------- int __thiscall sub_510C70(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (00510C90) -------------------------------------------------------- int __thiscall sub_510C90(_DWORD **this) { return (*(int (**)(void))(*this[86] + 480))(); } //----- (00510CC0) -------------------------------------------------------- int __thiscall sub_510CC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 0; sub_466AF0(v2, 0, 0, 0); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510CF0) -------------------------------------------------------- int __thiscall sub_510CF0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 1; sub_466AF0(v2, 1, 0, 0); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510D20) -------------------------------------------------------- int __thiscall sub_510D20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 2; sub_466AF0(v2, 2, 0, 1); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510D50) -------------------------------------------------------- int __thiscall sub_510D50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 3; sub_466AF0(v2, 3, 0, 0); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510DB0) -------------------------------------------------------- void __thiscall sub_510DB0(int this) { Concurrency::details::_NonReentrantLock::_Release((Concurrency::details::_NonReentrantLock *)(this + 348)); } //----- (00510E90) -------------------------------------------------------- char sub_510E90() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "FriendList"); return (char)v0; } //----- (00510EC0) -------------------------------------------------------- int __thiscall sub_510EC0(_DWORD *this, _DWORD *a2) { return sub_74F770(this + 87, a2); } //----- (00510ED0) -------------------------------------------------------- void __thiscall sub_510ED0(int this) { Concurrency::details::_NonReentrantLock::_Release((Concurrency::details::_NonReentrantLock *)(this + 11212)); } //----- (00510EE0) -------------------------------------------------------- int __thiscall sub_510EE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 4; sub_466AF0(v2, 4, 0, 0); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510F10) -------------------------------------------------------- int __thiscall sub_510F10(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[2791]; if ( v2 ) { v1[86] = 5; sub_466AF0(v2, 5, 0, 0); result = sub_465130((_DWORD *)v1[2791]); } return result; } //----- (00510F40) -------------------------------------------------------- char __thiscall sub_510F40(_DWORD *this) { unsigned int v1; // eax v1 = this[2800]; if ( v1 >= this[2801] ) LOBYTE(v1) = sub_6F3D10(&off_AB7F2C, 21, 33, 0, 0); return v1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00510F70) -------------------------------------------------------- char __thiscall sub_510F70(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; result = (*(int (**)(void))(*this[5570] + 260))(); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v1[5570]); return result; } //----- (00510FA0) -------------------------------------------------------- int __thiscall sub_510FA0(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi signed int v3; // edi int result; // eax v1 = this; if ( this[5509] ) { v2 = (int)(this + 5510); v3 = 27; do { if ( *(_DWORD *)v2 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0); } v2 += 4; --v3; } while ( v3 ); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[5509] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[5509] + 240))(0); } return result; } //----- (00511070) -------------------------------------------------------- char __thiscall sub_511070(_DWORD **this) { _DWORD **v1; // edi const char *v2; // eax char v4[4]; // [esp+Ch] [ebp-2Ch] int v5; // [esp+10h] [ebp-28h] int v6; // [esp+14h] [ebp-24h] int v7; // [esp+18h] [ebp-20h] int v8; // [esp+1Ch] [ebp-1Ch] char v9[4]; // [esp+20h] [ebp-18h] int v10; // [esp+24h] [ebp-14h] int v11; // [esp+28h] [ebp-10h] int v12; // [esp+2Ch] [ebp-Ch] int v13; // [esp+30h] [ebp-8h] v1 = this; v2 = (const char *)(*(int (**)(void))(*this[86] + 452))(); v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v2, 0x14u); v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, &byte_9C4611, 0x14u); if ( *(_DWORD *)v9 != *(_DWORD *)v4 || v10 != v5 || v11 != v6 || v12 != v7 || v13 != v8 ) sub_4C1AF0((int)v1[74], *(int *)v9, v10, v11, v12, v13); (*(void (__stdcall **)(void *))(*v1[86] + 460))(&unk_9C4612); return sub_4A52E0((_DWORD **)v1[74]); } //----- (00511180) -------------------------------------------------------- char __thiscall sub_511180(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char result; // al v3 = this; if ( !a2 ) return sub_511070(this); result = a2 - 1; if ( a2 == 1 ) { (*(void (__stdcall **)(void *))(*this[86] + 460))(&unk_9C4613); sub_4A52E0((_DWORD **)v3[74]); result = sub_8F86A0(&unk_BA6B10, v3); } return result; } //----- (005111D0) -------------------------------------------------------- char __thiscall sub_5111D0(_DWORD **this, int a2, int a3) { return sub_511070(this); } //----- (005111E0) -------------------------------------------------------- int __thiscall sub_5111E0(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (00511260) -------------------------------------------------------- char __thiscall sub_511260(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[2791], v2[2789]); return v3; } //----- (00511290) -------------------------------------------------------- int __thiscall sub_511290(_BYTE *this, int a2) { _BYTE *v2; // esi int result; // eax v2 = this; if ( this == *(_BYTE **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v2[11198] = 0; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (005112C0) -------------------------------------------------------- LONG __thiscall sub_5112C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx LONG result; // eax int v5; // ecx v2 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v3 = v2[2802]; result = pt.x; if ( !v3 ) { (*(void (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[2796] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v2[2796]); v5 = v2[2796]; goto LABEL_7; } if ( v3 == 1 ) { (*(void (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[5545] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v2[5545]); v5 = v2[5545]; LABEL_7: result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v5 + 240))(1); } *((_BYTE *)v2 + 11198) = 0; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (00511380) -------------------------------------------------------- void __thiscall sub_511380(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(v1[74]); } // AD01E8: using guessed type int dword_AD01E8; //----- (005113B0) -------------------------------------------------------- int __thiscall sub_5113B0(_DWORD *this) { int result; // eax if ( this[2791] ) { *(_DWORD *)(this[2791] + 344) = *(_DWORD *)(this[2789] + 300); result = sub_465130((_DWORD *)this[2791]); } return result; } //----- (005113E0) -------------------------------------------------------- int __thiscall sub_5113E0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (00511440) -------------------------------------------------------- char __thiscall sub_511440(_DWORD *this) { int v1; // eax int v2; // ecx v2 = this[74]; v1 = *(_DWORD *)(v2 + 908); if ( v1 ) LOBYTE(v1) = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 908)); return v1; } //----- (00511450) -------------------------------------------------------- FILE *__thiscall sub_511450(_BYTE *this) { _BYTE *v1; // edi const char *v2; // eax FILE *result; // eax FILE *v4; // esi const char *v5; // eax char v6; // [esp+8h] [ebp-48h] char v7; // [esp+48h] [ebp-8h] v1 = this; if ( !byte_ACAD5C ) sub_420410(); v2 = sub_401410(byte_ACA520, "FPLIST.ons"); result = fopen(v2, "wb"); v4 = result; if ( result ) { memset(&v6, 0, 0x41u); v5 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); strncpy(&v6, v5, 0x40u); v7 = v1[11196]; fwrite(&v6, 0x41u, 1u, v4); result = (FILE *)fclose(v4); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00511740) -------------------------------------------------------- int __thiscall sub_511740(_BYTE *this, int a2) { _BYTE *v2; // esi int result; // eax v2 = this; if ( this == *(_BYTE **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v2[11198] = 1; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (00511770) -------------------------------------------------------- int __thiscall sub_511770(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v4 = v2[5545]; if ( v4 ) { (*(void (__stdcall **)(LONG, LONG))(*(_DWORD *)v4 + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v2[5545]); result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2[5545] + 240))(1); *((_BYTE *)v2 + 11198) = 1; } return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (005117E0) -------------------------------------------------------- char __thiscall sub_5117E0(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_4B8870(this[74]); return sub_4A8140((int)v1[74], 81); } //----- (00511800) -------------------------------------------------------- void __thiscall sub_511800(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; if ( !a2 ) { if ( (*(unsigned __int8 (**)(void))(*this + 260))() ) sub_8F86A0(&unk_BA6B10, v3); } } //----- (00511830) -------------------------------------------------------- char __thiscall sub_511830(_DWORD *this, int a2) { int v2; // esi int v3; // edi int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax int v12; // eax volatile LONG *v13; // edi volatile LONG v14; // ebx const CHAR *v15; // eax volatile LONG **v16; // edi volatile LONG *v17; // ecx int v18; // edi int v19; // ebx int v20; // eax volatile LONG *v21; // edi volatile LONG v22; // ebx const CHAR *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // ecx int v26; // edi int v27; // ebx int v28; // eax volatile LONG *v29; // edi volatile LONG v30; // ebx const CHAR *v31; // eax volatile LONG *v32; // eax void (__thiscall ***v33)(_DWORD, signed int); // esi int v34[5]; // [esp+4Ch] [ebp-30h] int v35; // [esp+60h] [ebp-1Ch] int v36; // [esp+64h] [ebp-18h] int v37; // [esp+68h] [ebp-14h] int v38; // [esp+6Ch] [ebp-10h] int v39; // [esp+78h] [ebp-4h] v2 = (int)this; v38 = 0; v3 = a2; this[74] = a2; v4 = dword_BA6BA0; v39 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\AddFriendList.nif"); sub_8F66B0(v5, (int)&v38, v4); if ( !v38 ) return 0; v6 = sub_8FB140(v38, (int)"Panel01", (int)&v37, (int)&a2, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v6, 0, v3, (int)"FriendAddWin", 0) ) goto LABEL_23; v9 = (volatile LONG *)sub_43D0D0(0x13u); if ( v9 ) v10 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&a2, v9); else v10 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&a2, 0); v11 = sub_8F3EB0(v37 + 2, a2 + 2, (int)v10, v2, 0, 0); if ( v11 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); if ( !sub_8F71E0(v38, (int)"TextBox", &v37, &a2, &v35, &v36) ) { LABEL_23: v7 = (void (__thiscall ***)(_DWORD, signed int))v38; v39 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } v12 = sub_421050(0); v13 = sub_8F4A20(v37, a2, v35, v36, v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v13 + 468))(v13, &dword_AA8D98); v14 = *v13; v15 = sub_40C190(454374253); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v14 + 472))(v13, v15); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v16 = sub_8FB140(v38, (int)"BtnNor02", (int)&v37, (int)&a2, 0); sub_8FB650(v16, v38, (int)"BtnClick02"); sub_8FB650(v16, v38, (int)"BtnOver02"); sub_8FE0F0(v37, a2, (int)v16, v2, 0, 0, 0); v17 = v16[9]; v18 = *(_DWORD *)(*v17 + 24); v19 = *(_DWORD *)(*v17 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v37, a2 + 1, v19, v18, v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40C190(-1969182481); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v24 = sub_8FB140(v38, (int)"BtnNor03", (int)&v37, (int)&a2, 0); sub_8FB650(v24, v38, (int)"BtnClick03"); sub_8FB650(v24, v38, (int)"BtnOver03"); sub_8FE0F0(v37, a2, (int)v24, v2, 1, 0, 0); v25 = v24[9]; v26 = *(_DWORD *)(*v25 + 24); v27 = *(_DWORD *)(*v25 + 20); v28 = sub_421050(0); v29 = sub_8F4A20(v37, a2 + 1, v27, v26, v28, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); v30 = *v29; v31 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v30 + 472))(v29, v31); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); sub_456260(v34); LOBYTE(v39) = 1; sub_456000(v34, 0, 0); sub_455FF0(v34, v2); sub_456380(v34, v38); v32 = sub_4565F0(v34, (int)"InputBox", 16, 1342177280, 0, 1); *(_DWORD *)(v2 + 344) = v32; (*(void (__thiscall **)(volatile LONG *, void *))(*v32 + 460))(v32, &unk_9C45FB); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v2 + 344) + 300) + 60))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v39) = 0; sub_4562E0(v34); v39 = -1; if ( v38 ) { v33 = (void (__thiscall ***)(_DWORD, signed int))v38; if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v33 ) (**v33)(v33, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00511C70) -------------------------------------------------------- void __thiscall sub_511C70(int this, unsigned int *a2) { int v2; // edi int v3; // eax int v4; // edx int v5; // eax int v6; // eax int v7; // ebx int v8; // eax _DWORD *v9; // ecx unsigned int v10; // eax const char *v11; // eax int v12; // ST14_4 int v13; // ST10_4 int v14; // ST0C_4 char *v15; // eax _DWORD *v16; // ecx char v17; // [esp+8h] [ebp-9Ch] int v18; // [esp+88h] [ebp-1Ch] unsigned int v19; // [esp+8Ch] [ebp-18h] int v20; // [esp+90h] [ebp-14h] int v21; // [esp+94h] [ebp-10h] int v22; // [esp+98h] [ebp-Ch] char v23; // [esp+9Ch] [ebp-8h] v2 = this; if ( a2 && *(_DWORD *)(this + 11164) && (!*(_BYTE *)(this + 11168) || *(_BYTE *)a2 & 1) ) { v3 = a2[1]; v19 = a2[2]; v4 = a2[4]; v18 = v3; v5 = a2[3]; v21 = v4; v20 = v5; v6 = a2[5]; v17 = 0; v22 = v6; v23 = 0; v7 = ((int (__stdcall *)(int *))loc_466CA0)(&v18); v8 = sub_4316B0(a2 + 7); v9 = *(_DWORD **)(v2 + 11164); if ( v8 ) sub_4661A0(v9, v7, 4, (void *)(v8 + 14)); else sub_4661A0(v9, v7, 4, "..."); v10 = *a2; if ( *a2 & 1 ) { v11 = sub_40C190(-1778781710); } else { if ( (v10 >> 1) & 0x7FF ) { v12 = (v10 >> 16) & 0x1F; v13 = (unsigned __int16)v10 >> 12; v14 = (v10 >> 1) & 0x7FF; v15 = (char *)sub_40A910(1296251015); sub_517AD0(&v17, 0x80u, v15, v14, v13, v12); goto LABEL_14; } v11 = sub_40C190(-637451970); } sprintf(&v17, v11); LABEL_14: sub_4661A0(*(_DWORD **)(v2 + 11164), v7, 5, &v17); sub_464B20(*(_DWORD **)(v2 + 11164), v7, (int)a2); sub_464BA0(*(_DWORD **)(v2 + 11164), v7, 1); v16 = *(_DWORD **)(v2 + 11164); if ( *(_BYTE *)a2 & 1 ) sub_464BE0(v16, v7, 255, 255, 0); else sub_464BE0(v16, v7, 200, 200, 200); } } //----- (00511DF0) -------------------------------------------------------- void __thiscall sub_511DF0(int this) { int v1; // esi bool v2; // al int v3; // edi const CHAR *v4; // eax const char *v5; // eax const CHAR *v6; // eax const char *v7; // eax _DWORD *v8; // esi const CHAR *v9; // eax int v10; // [esp-4h] [ebp-Ch] v1 = this; v2 = *(_BYTE *)(this + 11196) == 0; *(_BYTE *)(this + 11196) = v2; byte_B92088 = v2; v3 = **(_DWORD **)(this + 11192); if ( *(_BYTE *)(this + 11196) ) { v4 = sub_40A910(760366453); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 11192), v4); v5 = sub_40A910(2058459009); sub_8F2EA0(*(void ***)(v1 + 11188), v5); v10 = 742466590; } else { v6 = sub_40A910(894584111); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 11192), v6); v7 = sub_40A910(1924241351); sub_8F2EA0(*(void ***)(v1 + 11188), v7); v10 = -890167274; } v8 = *(_DWORD **)(v1 + 296); v9 = sub_40A910(v10); sub_492060(v8, (int)v9); } // B92088: using guessed type char byte_B92088; //----- (00512090) -------------------------------------------------------- void __thiscall sub_512090(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ebx char *v5; // eax char *v6; // eax int v7; // ecx void (__stdcall *v8)(signed int); // eax v2 = this; if ( (a2 & 0x80000000) == 0 ) { if ( this[5507] ) { v3 = (int *)this[5537]; if ( v3 ) { v4 = *v3; v5 = (char *)sub_4090F0(-1679506739); v6 = sub_7549E0(v5, a2); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[5537], v6); v7 = v2[5507]; v2[2800] = a2; v8 = *(void (__stdcall **)(signed int))(*(_DWORD *)v7 + 240); if ( a2 < v2[2801] ) v8(0); else v8(1); } } } } //----- (00512110) -------------------------------------------------------- char __thiscall sub_512110(_DWORD *this, int a2) { char result; // al _DWORD *v3; // esi _DWORD *v4; // ecx int v5; // edi char *v6; // eax volatile LONG *v7; // eax _DWORD *v8; // ecx volatile LONG *v9; // ebx _DWORD *v10; // [esp+4h] [ebp-20h] char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] result = a2; v3 = this; if ( a2 >= 0 ) { v4 = (_DWORD *)this[2791]; if ( v4 ) { v5 = a2 + *(_DWORD *)(v3[2789] + 300); if ( v5 >= 0 ) { result = sub_464B60(v4, v5, &v10); if ( result ) { *(_DWORD *)v11 = v10[1]; v12 = v10[2]; v13 = v10[3]; v14 = v10[4]; v15 = v10[5]; v16 = 0; v6 = (char *)sub_4090F0(1619033481); v7 = sub_462C30(2, v6, v11); v8 = (_DWORD *)v3[2791]; v9 = v7; *((_BYTE *)v3 + 11198) = 0; sub_464F90(v8, v5); result = (**((int (__thiscall ***)(int, int))v9 + 58))((int)(v9 + 58), (int)(v3 + 58)); } } } } return result; } //----- (005121E0) -------------------------------------------------------- void __thiscall sub_5121E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx char *v3; // eax volatile LONG *v4; // eax _DWORD *v5; // ecx volatile LONG *v6; // edi _DWORD *v7; // [esp+4h] [ebp-20h] char v8[4]; // [esp+8h] [ebp-1Ch] int v9; // [esp+Ch] [ebp-18h] int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+18h] [ebp-Ch] char v13; // [esp+1Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[5544]; if ( v2 ) { if ( sub_464B60(v2, 0, &v7) ) { *(_DWORD *)v8 = v7[1]; v9 = v7[2]; v10 = v7[3]; v11 = v7[4]; v12 = v7[5]; v13 = 0; v3 = (char *)sub_4090F0(1619033481); v4 = sub_462C30(2, v3, v8); v5 = (_DWORD *)v1[5544]; v6 = v4; *((_BYTE *)v1 + 11198) = 1; sub_464F90(v5, 0); (**((void (__thiscall ***)(int, int))v6 + 58))((int)(v6 + 58), (int)(v1 + 58)); } } } //----- (00512290) -------------------------------------------------------- char __thiscall sub_512290(volatile LONG **this) { volatile LONG **v1; // edi volatile LONG *v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // esi volatile LONG *v12; // ST28_4 int v13; // ST24_4 int v14; // ST20_4 int v15; // eax volatile LONG *v16; // esi volatile LONG v17; // ebx const CHAR *v18; // eax int v19; // eax volatile LONG *v20; // esi volatile LONG v21; // ebx const CHAR *v22; // eax int v23; // eax volatile LONG *v24; // esi volatile LONG v25; // ebx const CHAR *v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi int v31; // [esp+44h] [ebp-20h] int v32; // [esp+48h] [ebp-1Ch] int v33; // [esp+4Ch] [ebp-18h] int v34; // [esp+50h] [ebp-14h] int v35; // [esp+54h] [ebp-10h] int v36; // [esp+60h] [ebp-4h] v1 = this; v35 = 0; v36 = 0; v2 = (volatile LONG *)sub_43D0D0(4u); if ( !v2 ) { v36 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\FriendPointTip.nif"); sub_8F66B0(v5, (int)&v35, v4); if ( !v35 ) return 0; v6 = sub_8FB140(v35, (int)"Panel01", (int)&v33, (int)&v34, v2); if ( sub_8F1440(v1, 0, 0, (int)v6, 0, 0, 0, 0) ) { v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v35, (int)"Theme", (int)&v33, (int)&v34, v8); else v9 = sub_8FB140(v35, (int)"Theme", (int)&v33, (int)&v34, 0); v10 = sub_8F3EB0(v33, v34, (int)v9, (int)v1, 0, 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_8FB140(v35, (int)"BtnNor01", (int)&v33, (int)&v34, v2); sub_8FB650(v11, v35, (int)"BtnClick01"); sub_8FB650(v11, v35, (int)"BtnOver01"); v12 = sub_8FE0F0(v33, v34, (int)v11, (int)v1, 0, 0, 0); v13 = sub_421050(0); v14 = (*(int (__thiscall **)(volatile LONG *))(*v12 + 148))(v12); v15 = (*(int (__thiscall **)(volatile LONG *))(*v12 + 144))(v12); v16 = sub_8F4A20(0, 0, v15, v14, v13, (int)v12, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 5); v17 = *v16; v18 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v17 + 472))(v16, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); sub_8F71E0(v35, (int)"Text00", &v33, &v34, &v31, &v32); v19 = sub_421050(7); v20 = sub_8F4A20(v33, v34, v31, v32, v19, (int)v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 4); v21 = *v20; v22 = sub_4090F0(-1684311120); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v20, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); sub_8F71E0(v35, (int)"Text01", &v33, &v34, &v31, &v32); v23 = sub_421050(7); v24 = sub_8F4A20(v33, v34, v31, v32, v23, (int)v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 4); v25 = *v24; v26 = sub_4090F0(-1684311119); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v25 + 472))(v24, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v27 = (volatile LONG *)sub_43D0D0(0x1Du); v28 = sub_8FB140(v35, (int)"Table", (int)&v33, (int)&v34, v27); v29 = sub_8F3EB0(v33, v34, (int)v28, (int)v1, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v1 + 59))(v1, xRight, dword_AC2F78, 0.5, 0.5); v36 = -1; if ( v35 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v35; if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } result = 1; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v35; v36 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00512690) -------------------------------------------------------- char __thiscall sub_512690(int this, int a2) { char result; // al int v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(*(_DWORD *)(this + 296) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, (volatile LONG *)this); if ( result ) result = sub_517DE0(&unk_BA6B54, v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (005126F0) -------------------------------------------------------- void __thiscall sub_5126F0(int this, int a2) { int v2; // edi int v3; // eax int v4; // edx int v5; // eax int v6; // ebx int v7; // eax CHAR *v8; // eax _DWORD *v9; // ecx _DWORD *v10; // ecx char v11; // [esp+8h] [ebp-9Ch] char v12; // [esp+9h] [ebp-9Bh] int v13; // [esp+88h] [ebp-1Ch] int v14; // [esp+8Ch] [ebp-18h] int v15; // [esp+90h] [ebp-14h] int v16; // [esp+94h] [ebp-10h] int v17; // [esp+98h] [ebp-Ch] char v18; // [esp+9Ch] [ebp-8h] v2 = this; if ( *(_DWORD *)(this + 11164) && (!*(_BYTE *)(this + 11168) || *(_BYTE *)a2 & 1) ) { v3 = *(_DWORD *)(a2 + 4); v14 = *(_DWORD *)(a2 + 8); v4 = *(_DWORD *)(a2 + 16); v13 = v3; v5 = *(_DWORD *)(a2 + 12); v16 = v4; v15 = v5; v17 = *(_DWORD *)(a2 + 20); v18 = 0; v6 = ((int (__stdcall *)(int *))loc_466CA0)(&v13); v7 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a2 + 24)); if ( v7 ) v8 = (CHAR *)(v7 + 21); else v8 = (CHAR *)&byte_9A8050; sub_4661A0(*(_DWORD **)(v2 + 11164), v6, 1, v8); sprintf(&v11, "%d", *(unsigned __int8 *)(a2 + 25)); sub_4661A0(*(_DWORD **)(v2 + 11164), v6, 2, &v11); v11 = *(_BYTE *)(a2 + 26) != 0 ? 111 : 120; v9 = *(_DWORD **)(v2 + 11164); v12 = 0; sub_4661A0(v9, v6, 3, &v11); sub_464B20(*(_DWORD **)(v2 + 11164), v6, a2); sub_464BA0(*(_DWORD **)(v2 + 11164), v6, 1); v10 = *(_DWORD **)(v2 + 11164); if ( *(_BYTE *)a2 & 1 ) sub_464BE0(v10, v6, 255, 255, 0); else sub_464BE0(v10, v6, 200, 200, 200); } } // AC9C84: using guessed type int dword_AC9C84; //----- (00512850) -------------------------------------------------------- void __thiscall sub_512850(void *this, int *a2) { void *v2; // edi int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx int v7; // eax const CHAR *v8; // eax const CHAR *v9; // ST14_4 const char *v10; // eax int v11; // eax int v12; // ST14_4 const char *v13; // eax unsigned int v14; // eax const char *v15; // eax int v16; // ST14_4 int v17; // ST10_4 const char *v18; // eax const char *v19; // [esp-8h] [ebp-ACh] char v20; // [esp+8h] [ebp-9Ch] int v21; // [esp+88h] [ebp-1Ch] int v22; // [esp+8Ch] [ebp-18h] int v23; // [esp+90h] [ebp-14h] int v24; // [esp+94h] [ebp-10h] int v25; // [esp+98h] [ebp-Ch] char v26; // [esp+9Ch] [ebp-8h] v2 = this; if ( a2 ) { sub_5C1AD0((char *)dword_AD01E8); v3 = a2[2]; v4 = a2[3]; v21 = a2[1]; v5 = a2[4]; v22 = v3; v6 = a2[5]; v24 = v5; v25 = v6; v23 = v4; v26 = 0; (*(void (__stdcall **)(_DWORD, int *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 0, &v21, 1, 255, 255, 0); (*(void (__stdcall **)(signed int, void *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 1, &unk_9C461A, 255, 255, 255, 0); v7 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *((unsigned __int8 *)a2 + 24)); if ( v7 ) v8 = (const CHAR *)(v7 + 21); else v8 = &byte_9A8050; v9 = v8; v10 = sub_40C190(-1784030483); sprintf(&v20, v10, v9); (*(void (__stdcall **)(signed int, char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 2, &v20, 255, 255, 255, 0); sprintf(&v20, "LV : %d", *((unsigned __int8 *)a2 + 25)); (*(void (__stdcall **)(signed int, char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 3, &v20, 255, 255, 255, 0); if ( *((_BYTE *)a2 + 26) ) v19 = sub_40C190(-270075320); else v19 = sub_40C190(-1600611340); sprintf(&v20, v19); (*(void (__stdcall **)(signed int, char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 4, &v20, 255, 255, 255, 0); v11 = sub_4316B0(a2 + 7); if ( v11 ) { v12 = v11 + 14; v13 = sub_40C190(-566935731); sprintf(&v20, v13, v12); (*(void (__stdcall **)(signed int, char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 5, &v20, 255, 255, 255, 0); } v14 = *a2; if ( *a2 & 1 ) { v15 = sub_40C190(-1886347311); } else { if ( v14 & 0xFFE ) { v16 = (v14 >> 16) & 0x1F; v17 = (unsigned __int16)v14 >> 12; v18 = sub_40A910(-236143320); sprintf(&v20, v18, v17, v16); LABEL_16: (*(void (__stdcall **)(signed int, char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 6, &v20, 255, 255, 255, 0); (*(void (__stdcall **)(signed int, int *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 7, a2 + 10, 255, 255, 255, 0); (*(void (__stdcall **)(void *))(*(_DWORD *)dword_AD01E8 + 556))(v2); (*(void (__stdcall **)(LONG, LONG))(*(_DWORD *)dword_AD01E8 + 308))(pt.x, pt.y); return; } v15 = sub_40C190(-1797065253); } sprintf(&v20, v15); goto LABEL_16; } } // AC9C84: using guessed type int dword_AC9C84; // AD01E8: using guessed type int dword_AD01E8; //----- (00512B40) -------------------------------------------------------- void __thiscall sub_512B40(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // edx int v4; // eax int v5; // ecx int v6; // eax int v7; // ecx int v8; // ebx int v9; // eax CHAR *v10; // eax char v11; // [esp+8h] [ebp-9Ch] int v12; // [esp+88h] [ebp-1Ch] int v13; // [esp+8Ch] [ebp-18h] int v14; // [esp+90h] [ebp-14h] int v15; // [esp+94h] [ebp-10h] int v16; // [esp+98h] [ebp-Ch] char v17; // [esp+9Ch] [ebp-8h] v2 = this; if ( a2 && this[5543] ) { v3 = *(_DWORD *)(a2 + 12); v4 = *(_DWORD *)(a2 + 4); v13 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)(a2 + 20); v14 = v3; v12 = v4; v6 = *(_DWORD *)(a2 + 16); v16 = v5; v7 = v2[2791]; v15 = v6; v17 = 0; v8 = ((int (__thiscall *)(int, int *))loc_466CA0)(v7, &v12); v9 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a2 + 24)); if ( v9 ) v10 = (CHAR *)(v9 + 21); else v10 = (CHAR *)&byte_9A8050; sub_4661A0((_DWORD *)v2[5543], v8, 1, v10); sprintf(&v11, "%d", *(unsigned __int8 *)(a2 + 25)); sub_4661A0((_DWORD *)v2[5543], v8, 2, &v11); sub_464B20((_DWORD *)v2[5543], v8, a2); sub_464BA0((_DWORD *)v2[5543], v8, 1); sub_464BE0((_DWORD *)v2[5543], v8, 255, 255, 0); } } // AC9C84: using guessed type int dword_AC9C84; //----- (00512D10) -------------------------------------------------------- void __thiscall sub_512D10(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ebx int v4; // edi int i; // esi signed int v6; // ebx int v7; // edi int j; // esi int v9; // edx _DWORD *v10; // [esp+4h] [ebp-4h] v1 = this; v10 = this; if ( this[5543] && this[5541] ) { v2 = this[5508]; v1[2802] = 1; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[5538] + 256))(0); v3 = 0; while ( 1 ) { v4 = (int)&v1[4 * v3]; for ( i = *(_DWORD *)(v4 + 22184); i != *(_DWORD *)(v4 + 22188); i += 4 ) { if ( !*(_DWORD *)i ) break; (*(void (__stdcall **)(bool))(**(_DWORD **)i + 256))(v3 == 2); } if ( ++v3 >= 3 ) break; v1 = v10; } v6 = 0; do { v7 = (int)&v10[4 * v6]; for ( j = *(_DWORD *)(v7 + 22232); j != *(_DWORD *)(v7 + 22236); j += 4 ) { if ( !*(_DWORD *)j ) break; (*(void (__stdcall **)(bool))(**(_DWORD **)j + 256))(v6 == 1); } ++v6; } while ( v6 < 2 ); v9 = v10[5541]; v10[2791] = v10[5543]; v10[2789] = v9; sub_510FA0(v10); sub_466A50((_DWORD *)v10[2791]); sub_465130((_DWORD *)v10[2791]); *(_BYTE *)(v10[5505] + 380) = 0; *(_BYTE *)(v10[5506] + 380) = 1; } } //----- (00513040) -------------------------------------------------------- void __thiscall sub_513040(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ecx signed int v6; // eax int v7; // ecx _DWORD *v8; // ecx signed int v9; // eax char v10; // al signed int v11; // eax _DWORD *v12; // ecx int v13; // ecx _DWORD *v14; // ecx signed int v15; // eax char v16; // al signed int v17; // eax _DWORD *v18; // edi _DWORD **v19; // ecx _DWORD *v20; // ecx signed int v21; // eax _DWORD *v22; // ecx int v23; // [esp-14h] [ebp-44h] int v24; // [esp-10h] [ebp-40h] int v25; // [esp-Ch] [ebp-3Ch] int v26; // [esp-8h] [ebp-38h] int **v27; // [esp-4h] [ebp-34h] int *v28; // [esp+8h] [ebp-28h] char v29; // [esp+Fh] [ebp-21h] int *v30; // [esp+10h] [ebp-20h] char v31; // [esp+14h] [ebp-1Ch] char v32; // [esp+28h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[2733]; if ( v5 ) { v6 = sub_464F50(v5); switch ( a2 ) { case 9: case 12: if ( v4 - 58 == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return; case 18: if ( sub_464B60((_DWORD *)v4[2733], v6, &v30) && v30 ) sub_4AA150((void *)v4[16], v30[1], v30[2], v30[3], v30[4], v30[5]); return; case 19: if ( v6 >= 0 && sub_464B60((_DWORD *)v4[2733], v6, &v30) && v30 ) sub_512850(v4 - 58, v30); return; case 20: v7 = v4[2744]; if ( v7 ) { if ( v7 == 1 ) { if ( *((_BYTE *)v4 + 10966) ) { v8 = (_DWORD *)v4[5486]; if ( !v8 ) return; v9 = sub_464F50(v8); if ( v9 < 0 ) return; v10 = sub_464B60((_DWORD *)v4[5486], v9, &v30); } else { v11 = sub_464F50((_DWORD *)v4[5485]); if ( v11 < 0 ) return; v10 = sub_464B60((_DWORD *)v4[5485], v11, &v30); } } else { v10 = v29; } } else { if ( v6 < 0 ) return; v10 = sub_464B60((_DWORD *)v4[5484], v6, &v30); } if ( v10 && v30 ) { sub_4169E0(v30 + 1, (int)&v31); v12 = (_DWORD *)v4[16]; v32 = 0; sub_4C1490(v12, &v31); } return; case 21: v13 = v4[2744]; if ( v13 ) { if ( v13 == 1 ) { if ( *((_BYTE *)v4 + 10966) ) { v14 = (_DWORD *)v4[5486]; if ( !v14 ) return; v15 = sub_464F50(v14); if ( v15 < 0 ) return; v16 = sub_464B60((_DWORD *)v4[5486], v15, &v30); } else { v17 = sub_464F50((_DWORD *)v4[5485]); if ( v17 < 0 ) return; v16 = sub_464B60((_DWORD *)v4[5485], v17, &v30); } } else { v16 = v29; } } else { if ( v6 < 0 ) return; v16 = sub_464B60((_DWORD *)v4[5484], v6, &v30); } if ( v16 && v30 ) { v18 = v30 + 1; sub_4169E0(v30 + 1, (int)&v31); *(_DWORD *)dword_ACEB0C = *v18; dword_ACEB10 = v18[1]; dword_ACEB14 = v18[2]; dword_ACEB18 = v18[3]; dword_ACEB1C = v18[4]; v19 = (_DWORD **)v4[16]; v32 = 0; sub_4A7840(v19, &v31); } return; case 27: if ( !a3 || *a3 ) return; if ( *((_BYTE *)v4 + 10966) ) { v20 = (_DWORD *)v4[5486]; if ( !v20 ) return; v21 = sub_464F50(v20); if ( v21 < 0 ) return; v22 = (_DWORD *)v4[5486]; v27 = &v30; } else { v21 = sub_464F50((_DWORD *)v4[5485]); if ( v21 < 0 ) return; v27 = &v30; v22 = (_DWORD *)v4[5485]; } if ( sub_464B60(v22, v21, v27) && v30 ) { sub_4169E0(v30 + 1, (int)&v31); v28 = &v23; v32 = 0; sub_416970((char *)&v23, &v31); sub_4C1AF0(v4[16], v23, v24, v25, v26, (int)v27); } break; default: return; } } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // AD01E8: using guessed type int dword_AD01E8; //----- (005133F0) -------------------------------------------------------- void __thiscall sub_5133F0(_DWORD *this) { int v1; // esi _DWORD *v2; // ecx int v3; // ebx unsigned int *v4; // edi int v5; // eax v1 = (int)this; v2 = (_DWORD *)this[2791]; if ( v2 && !*(_DWORD *)(v1 + 11208) ) { sub_466A50(v2); v3 = 0; if ( *(_DWORD *)(v1 + 348) > 0 ) { v4 = (unsigned int *)(v1 + 352); do { v5 = *(_DWORD *)(v1 + 11176); if ( v5 ) { if ( v5 == 1 ) sub_511C70(v1, v4); } else { sub_5126F0(v1, (int)v4); } ++v3; v4 += 18; } while ( v3 < *(_DWORD *)(v1 + 348) ); } sub_466AF0(*(_DWORD **)(v1 + 11164), *(_DWORD *)(v1 + 344), 0, 0); sub_465130(*(_DWORD **)(v1 + 11164)); sub_4638F0(*(_DWORD **)(v1 + 11156), *(_DWORD *)(*(_DWORD *)(v1 + 11164) + 336)); } } //----- (00513490) -------------------------------------------------------- void __thiscall sub_513490(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; v4 = (_DWORD *)sub_74F770(this + 87, a2); if ( v4 ) { v4[1] = *a3; v4[2] = a3[1]; v4[3] = a3[2]; v4[4] = a3[3]; v4[5] = a3[4]; sub_5133F0(v3); } } //----- (005134E0) -------------------------------------------------------- int __thiscall sub_5134E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx int v4; // edx _DWORD *v5; // ebx int i; // edi signed int v7; // eax int v8; // ebx int v9; // edi bool v10; // zf void (__stdcall *v11)(signed int); // eax int result; // eax int v13; // [esp+Ch] [ebp-8h] signed int v14; // [esp+10h] [ebp-4h] signed int v15; // [esp+10h] [ebp-4h] v1 = this; sub_510FA0(this); sub_4B88B0((_DWORD *)v1[74]); v2 = v1[5508]; v1[2802] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[5538] + 256))(1); v3 = v1[5540]; v4 = v1[2794]; v1[2791] = v1[5542]; v1[2789] = v3; v13 = v4; v14 = 0; v5 = v1 + 5547; do { for ( i = *(v5 - 1); i != *v5; i += 4 ) { if ( !*(_DWORD *)i ) break; (*(void (__stdcall **)(bool))(**(_DWORD **)i + 256))(v14 == v13); } v5 += 4; ++v14; } while ( v14 < 3 ); v7 = 0; v15 = 0; do { v8 = 2 * v7; v9 = v1[4 * v7 + 5558]; if ( v9 != v1[4 * v7 + 5559] ) { do { if ( !*(_DWORD *)v9 ) break; v10 = v7 == 0; v11 = *(void (__stdcall **)(signed int))(**(_DWORD **)v9 + 256); if ( v10 ) v11(1); else v11(0); v7 = v15; v9 += 4; } while ( v9 != v1[2 * v8 + 5559] ); } v15 = ++v7; } while ( v7 < 2 ); sub_5133F0(v1); *(_BYTE *)(v1[5505] + 380) = 1; *(_BYTE *)(v1[5506] + 380) = 0; return result; } //----- (00513600) -------------------------------------------------------- void __thiscall sub_513600(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // ebx int v5; // [esp+Ch] [ebp+8h] v2 = this; if ( this[5543] ) { if ( this[5541] ) { v3 = a2; if ( a2 >= 0 ) { sub_512B40(this, (int)&this[18 * a2 + 2804]); if ( a2 < 27 ) { v5 = sub_517CC0((_DWORD *)v2[5543], a2, 3u); v4 = sub_517D50((_DWORD *)v2[5543], v3, 3u) + 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[v3 + 5510] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[v3 + 5510] + 240))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v2[v3 + 5510] + 172))(v5 + 33); (*(void (__thiscall **)(_DWORD, int))(*(_DWORD *)v2[v3 + 5510] + 176))(v2[v3 + 5510], v4); } sub_465130((_DWORD *)v2[5543]); sub_4638F0((_DWORD *)v2[5541], *(_DWORD *)(v2[5543] + 336)); } } } } //----- (005136F0) -------------------------------------------------------- int __cdecl sub_5136F0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &FriendAddWin::`vftable'; *(_DWORD *)(v2 + 232) = &FriendAddWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C4F28: using guessed type void *FriendAddWin::`vftable'; // 9C4F44: using guessed type void *FriendAddWin::`vftable'; //----- (00513830) -------------------------------------------------------- LONG __thiscall sub_513830(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &FriendWin::`vftable'; this[58] = &FriendWin::`vftable'; `eh vector destructor iterator'(this + 5558, 0x10u, 3, sub_467570); `eh vector destructor iterator'(v1 + 5546, 0x10u, 3, sub_467570); sub_74F9A0(v1 + 2803); sub_74F9A0(v1 + 87); return sub_8F10F0(v1); } // 9C53A8: using guessed type void *FriendWin::`vftable'; // 9C53C4: using guessed type void *FriendWin::`vftable'; //----- (005138E0) -------------------------------------------------------- void __thiscall sub_5138E0(int this) { _DWORD *v1; // edi int v2; // eax signed int v3; // ebx int v4; // esi const CHAR *v5; // eax _DWORD *v6; // edi int i; // esi int v8; // [esp-4h] [ebp-18h] _DWORD *v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] v1 = (_DWORD *)this; v2 = *(_DWORD *)(this + 11176); v3 = 0; v9 = (_DWORD *)this; if ( !v2 ) { *(_DWORD *)(this + 11176) = 1; v8 = -655796683; goto LABEL_5; } if ( v2 == 1 ) { *(_DWORD *)(this + 11176) = 0; v8 = 891961159; LABEL_5: v4 = **(_DWORD **)(this + 11172); v5 = sub_40C190(v8); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(v1[2793], v5); } v10 = v1[2794]; v6 = v1 + 5547; do { for ( i = *(v6 - 1); i != *v6; i += 4 ) { if ( !*(_DWORD *)i ) break; (*(void (__stdcall **)(bool))(**(_DWORD **)i + 256))(v3 == v10); } ++v3; v6 += 4; } while ( v3 < 3 ); sub_5133F0(v9); } //----- (00513990) -------------------------------------------------------- void __thiscall sub_513990(int this) { int v1; // esi int *v2; // eax bool v3; // cl int v4; // edi const CHAR *v5; // eax v1 = this; v2 = *(int **)(this + 11180); v3 = *(_BYTE *)(this + 11168) == 0; *(_BYTE *)(v1 + 11168) = v3; if ( v2 ) { v4 = *v2; if ( v3 ) v5 = sub_40C190(674516032); else v5 = sub_40C190(1888327039); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v1 + 11180), v5); sub_5133F0((_DWORD *)v1); } } //----- (00513A00) -------------------------------------------------------- void __thiscall sub_513A00(_DWORD *this, _DWORD *a2, char a3) { _DWORD *v3; // esi int v4; // eax int v5; // ecx int v6; // ebx int v7; // eax int v8; // ecx char *v9; // eax int v10; // eax int i; // edi char v12[4]; // [esp+Ch] [ebp-1Ch] int v13; // [esp+10h] [ebp-18h] int v14; // [esp+14h] [ebp-14h] int v15; // [esp+18h] [ebp-10h] int v16; // [esp+1Ch] [ebp-Ch] char v17; // [esp+20h] [ebp-8h] v3 = this; if ( sub_74F9C0(this + 87, a2) == 1 && !a3 ) { v4 = a2[1]; v5 = a2[2]; v6 = v3[74]; v14 = a2[3]; *(_DWORD *)v12 = v4; v7 = a2[4]; v13 = v5; v8 = a2[5]; v15 = v7; v16 = v8; v17 = 0; v9 = (char *)sub_40C190(-1242773844); sub_4920B0(v6, v9, v12); } v10 = v3[2802]; if ( v10 ) { if ( v10 == 1 ) { if ( sub_74F6F0(v3 + 2803, a2 + 1) ) { sub_510FA0(v3); sub_466A50((_DWORD *)v3[5543]); for ( i = 0; i < v3[2803]; ++i ) sub_513600(v3, i); } } } else { sub_5133F0(v3); } } //----- (00513AF0) -------------------------------------------------------- char __thiscall sub_513AF0(int *this, char a2, int a3, int a4, int a5, int a6) { int *v6; // esi v6 = this; sub_74F6F0(this + 87, &a2); sub_5133F0(v6); return 1; } //----- (00513B20) -------------------------------------------------------- char __thiscall sub_513B20(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi v6 = this; sub_74F7D0(this + 87, &a2); sub_5133F0(v6); return 1; } //----- (00513B50) -------------------------------------------------------- char __thiscall sub_513B50(_DWORD *this, char a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi v6 = this; sub_74FA60(this + 87, &a2); sub_5133F0(v6); return 1; } //----- (00513B80) -------------------------------------------------------- char __thiscall sub_513B80(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7, int a8, int a9) { _DWORD *v9; // esi v9 = this; sub_74F840(this + 87, a2, a3, a4, a5, a6, &a7); sub_5133F0(v9); return 1; } //----- (00513BD0) -------------------------------------------------------- char __thiscall sub_513BD0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { _DWORD *v7; // esi v7 = this; sub_74F8B0(this + 87, a2, a3, a4, a5, a6, a7); sub_5133F0(v7); return 1; } //----- (00513C20) -------------------------------------------------------- char __thiscall sub_513C20(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { _DWORD *v7; // esi v7 = this; sub_74F910(this + 87, a2, a3, a4, a5, a6, a7); sub_5133F0(v7); return 1; } //----- (00513C70) -------------------------------------------------------- void __thiscall sub_513C70(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi v3 = this; if ( a3 >= 0 ) { if ( sub_74F9C0(this + 2803, a2) ) sub_513600(v3, a3); } } //----- (00513CB0) -------------------------------------------------------- int sub_513CB0() { void *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x158u); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { Concurrency::overwrite_buffer::overwrite_buffer(v0); *(_DWORD *)v1 = &FriendPointTipMsg::`vftable'; *(_DWORD *)(v1 + 232) = &FriendPointTipMsg::`vftable'; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 540))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C5168: using guessed type void *FriendPointTipMsg::`vftable'; // 9C5184: using guessed type void *FriendPointTipMsg::`vftable'; //----- (00513DF0) -------------------------------------------------------- char *__thiscall sub_513DF0(char *this) { char *v1; // esi void *v3; // [esp-1Ch] [ebp-3Ch] int v4; // [esp-18h] [ebp-38h] int v5; // [esp-14h] [ebp-34h] int v6; // [esp-10h] [ebp-30h] int v7; // [esp-Ch] [ebp-2Ch] int v8; // [esp-8h] [ebp-28h] int v9; // [esp-4h] [ebp-24h] void **v10; // [esp+Ch] [ebp-14h] char *v11; // [esp+10h] [ebp-10h] int v12; // [esp+1Ch] [ebp-4h] v1 = this; v11 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v12 = 0; *(_DWORD *)v1 = &FriendWin::`vftable'; *((_DWORD *)v1 + 58) = &FriendWin::`vftable'; sub_74F970((_DWORD *)v1 + 87); sub_74F970((_DWORD *)v1 + 2803); `eh vector constructor iterator'(v1 + 22184, 0x10u, 3, unknown_libname_17, sub_467570); `eh vector constructor iterator'(v1 + 22232, 0x10u, 3, unknown_libname_17, sub_467570); v10 = &v3; v1[11168] = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 2789) = 0; *((_DWORD *)v1 + 2790) = 0; *((_DWORD *)v1 + 2791) = 0; *((_DWORD *)v1 + 2793) = 0; *(_WORD *)(v1 + 11197) = 0; *((_DWORD *)v1 + 2800) = 0; *((_DWORD *)v1 + 2802) = 0; *((_DWORD *)v1 + 5505) = 0; *((_DWORD *)v1 + 5506) = 0; *((_DWORD *)v1 + 5543) = 0; *((_DWORD *)v1 + 5541) = 0; *((_DWORD *)v1 + 5540) = 0; *((_DWORD *)v1 + 5542) = 0; *((_DWORD *)v1 + 5544) = 0; *((_DWORD *)v1 + 5509) = 0; *((_DWORD *)v1 + 5539) = 0; *((_DWORD *)v1 + 2794) = 0; *((_DWORD *)v1 + 5545) = 0; v8 = 15; v7 = 0; LOBYTE(v12) = 4; LOBYTE(v3) = 0; sub_4018E0(&v3, "FriendUsePoint", 0xEu); *((_DWORD *)v1 + 2801) = (unsigned __int16)sub_747F30(&unk_ACDC6C, v3, v4, v5, v6, v7, v8, v9); *((_DWORD *)v1 + 5510) = 0; *((_DWORD *)v1 + 5511) = 0; *((_DWORD *)v1 + 5512) = 0; *((_DWORD *)v1 + 5513) = 0; *((_DWORD *)v1 + 5514) = 0; *((_DWORD *)v1 + 5515) = 0; *((_DWORD *)v1 + 5516) = 0; *((_DWORD *)v1 + 5517) = 0; *((_DWORD *)v1 + 5518) = 0; *((_DWORD *)v1 + 5519) = 0; *((_DWORD *)v1 + 5520) = 0; *((_DWORD *)v1 + 5521) = 0; *((_DWORD *)v1 + 5522) = 0; *((_DWORD *)v1 + 5523) = 0; *((_DWORD *)v1 + 5524) = 0; *((_DWORD *)v1 + 5525) = 0; *((_DWORD *)v1 + 5526) = 0; *((_DWORD *)v1 + 5527) = 0; *((_DWORD *)v1 + 5528) = 0; *((_DWORD *)v1 + 5529) = 0; *((_DWORD *)v1 + 5530) = 0; *((_DWORD *)v1 + 5531) = 0; *((_DWORD *)v1 + 5532) = 0; *((_DWORD *)v1 + 5533) = 0; *((_DWORD *)v1 + 5534) = 0; *((_DWORD *)v1 + 5535) = 0; *((_DWORD *)v1 + 5536) = 0; *((_DWORD *)v1 + 5570) = 0; *((_DWORD *)v1 + 2795) = 0; *((_DWORD *)v1 + 2796) = 0; v1[11196] = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C53A8: using guessed type void *FriendWin::`vftable'; // 9C53C4: using guessed type void *FriendWin::`vftable'; //----- (00514010) -------------------------------------------------------- volatile LONG *__cdecl sub_514010(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x570Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_513DF0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00514140) -------------------------------------------------------- void __thiscall sub_514140(_DWORD **this, int a2, int a3) { switch ( a2 ) { case 11: sub_511380(this); break; case 12: sub_4A7150(this[74]); break; case 13: sub_5138E0((int)this); break; case 14: sub_513990((int)this); break; case 16: sub_5113B0(this); break; case 19: sub_510CC0(this); break; case 20: sub_510CF0(this); break; case 21: sub_510D20(this); break; case 22: sub_510D50(this); break; case 23: sub_5112C0(this, a3); break; case 24: sub_511290(this, a3); break; case 25: sub_5113E0(this, 1); break; case 26: sub_5113E0(this, 2); break; case 27: sub_5113E0(this, 3); break; case 28: sub_5113E0(this, 4); break; case 29: sub_5113E0(this, 5); break; case 30: sub_511DF0((int)this); break; case 31: sub_510E90(); break; case 32: sub_5134E0(this); break; case 33: sub_5117E0(this); break; case 34: sub_510F40(this); break; case 35: sub_510F70(this); break; case 36: sub_512110(this, a3); break; case 37: sub_5121E0(this); break; case 38: sub_511740(this, a3); break; case 39: sub_511770(this, a3); break; case 40: sub_510EE0(this); break; case 41: sub_510F10(this); break; default: return; } } //----- (00514300) -------------------------------------------------------- char __thiscall sub_514300(_DWORD *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax char result; // al int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax int v24; // eax volatile LONG *v25; // eax volatile LONG v26; // edx const CHAR *v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // eax volatile LONG **v33; // eax int v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax volatile LONG *v37; // edx volatile LONG *v38; // ecx volatile LONG **v39; // edx int v40; // eax volatile LONG *v41; // eax volatile LONG v42; // edx const CHAR *v43; // eax volatile LONG **v44; // edx volatile LONG *v45; // ecx volatile LONG **v46; // eax int v47; // eax volatile LONG *v48; // eax volatile LONG v49; // edx const CHAR *v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // edx volatile LONG *v53; // ecx volatile LONG **v54; // edx int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx const CHAR *v58; // eax volatile LONG *v59; // eax volatile LONG *v60; // edx volatile LONG *v61; // ecx volatile LONG **v62; // edx int v63; // eax volatile LONG *v64; // eax volatile LONG v65; // edx const CHAR *v66; // eax const char *v67; // eax int v68; // eax volatile LONG **v69; // edx int v70; // eax volatile LONG *v71; // eax volatile LONG v72; // edx const CHAR *v73; // eax const char *v74; // eax int v75; // eax volatile LONG **v76; // edx int v77; // eax volatile LONG *v78; // eax const CHAR *v79; // eax volatile LONG *v80; // eax volatile LONG *v81; // edx volatile LONG *v82; // ecx volatile LONG **v83; // edx int v84; // eax volatile LONG *v85; // eax const CHAR *v86; // eax volatile LONG *v87; // eax volatile LONG **v88; // ecx int v89; // eax volatile LONG *v90; // edx int v91; // eax volatile LONG *v92; // eax const CHAR *v93; // eax const char *v94; // eax volatile LONG **v95; // eax const char *v96; // eax const char *v97; // eax const char *v98; // eax const char *v99; // eax const char *v100; // eax const char *v101; // eax int v102; // eax volatile LONG *v103; // edx int v104; // eax volatile LONG *v105; // eax volatile LONG v106; // edx const CHAR *v107; // eax volatile LONG *v108; // ecx volatile LONG *v109; // eax int v110; // eax volatile LONG *v111; // eax volatile LONG v112; // edx const CHAR *v113; // eax volatile LONG *v114; // ecx volatile LONG *v115; // eax int v116; // eax volatile LONG *v117; // eax volatile LONG v118; // edx const CHAR *v119; // eax volatile LONG *v120; // ecx volatile LONG *v121; // eax int v122; // eax volatile LONG *v123; // eax volatile LONG v124; // edx const CHAR *v125; // eax volatile LONG *v126; // ecx volatile LONG *v127; // eax int v128; // eax volatile LONG *v129; // eax volatile LONG v130; // edx const CHAR *v131; // eax volatile LONG *v132; // ecx volatile LONG *v133; // eax int v134; // eax volatile LONG *v135; // eax volatile LONG v136; // edx const CHAR *v137; // eax volatile LONG *v138; // eax volatile LONG **v139; // edx int v140; // eax volatile LONG *v141; // edx int v142; // eax volatile LONG *v143; // eax volatile LONG v144; // edx const CHAR *v145; // eax volatile LONG *v146; // eax volatile LONG **v147; // edx int v148; // eax volatile LONG *v149; // edx int v150; // eax volatile LONG *v151; // eax volatile LONG v152; // edx const CHAR *v153; // eax volatile LONG *v154; // eax volatile LONG v155; // edx int v156; // eax volatile LONG **v157; // edx int v158; // eax volatile LONG *v159; // eax volatile LONG v160; // edx const CHAR *v161; // eax volatile LONG *v162; // eax volatile LONG v163; // edx int v164; // eax volatile LONG **v165; // edx int v166; // eax volatile LONG *v167; // eax volatile LONG v168; // edx const CHAR *v169; // eax volatile LONG *v170; // eax volatile LONG **v171; // edx int v172; // eax volatile LONG *v173; // edx int v174; // eax volatile LONG *v175; // eax volatile LONG v176; // edx const CHAR *v177; // eax int v178; // ST200_4 char *v179; // eax char *v180; // eax volatile LONG *v181; // eax volatile LONG *v182; // eax volatile LONG *v183; // eax volatile LONG *v184; // eax volatile LONG *v185; // eax volatile LONG **v186; // eax volatile LONG *v187; // eax volatile LONG *v188; // eax volatile LONG *v189; // eax volatile LONG *v190; // eax volatile LONG *v191; // eax volatile LONG *v192; // eax volatile LONG **v193; // eax volatile LONG *v194; // eax const char *v195; // eax volatile LONG **v196; // eax int v197; // eax volatile LONG *v198; // ecx volatile LONG **v199; // eax int v200; // eax volatile LONG *v201; // eax volatile LONG v202; // edx const CHAR *v203; // eax volatile LONG *v204; // eax volatile LONG *v205; // edx volatile LONG *v206; // ecx volatile LONG **v207; // edx int v208; // eax volatile LONG *v209; // eax volatile LONG v210; // edx const CHAR *v211; // eax volatile LONG *v212; // eax volatile LONG *v213; // edx volatile LONG *v214; // ecx volatile LONG **v215; // edx int v216; // eax volatile LONG *v217; // eax volatile LONG v218; // edx const CHAR *v219; // eax volatile LONG *v220; // eax volatile LONG v221; // edx int v222; // eax volatile LONG *v223; // eax int v224; // ST1FC_4 char *v225; // eax char *v226; // eax volatile LONG *v227; // eax volatile LONG *v228; // eax int v229; // eax _DWORD *v230; // ecx int v231; // eax void (__stdcall *v232)(volatile LONG *); // edx volatile LONG **v233; // eax volatile LONG *v234; // eax const char *v235; // eax int v236; // eax volatile LONG *v237; // eax const CHAR *v238; // eax void **v239; // ebx const CHAR *v240; // eax void **v241; // ebx const CHAR *v242; // eax void **v243; // ebx int v244; // eax volatile LONG *v245; // eax const CHAR *v246; // eax void **v247; // edi const CHAR *v248; // eax void **v249; // edi int v250; // eax void (__thiscall ***v251)(_DWORD, signed int); // esi int v252; // [esp+210h] [ebp-1F8h] int v253; // [esp+214h] [ebp-1F4h] int v254; // [esp+218h] [ebp-1F0h] char v255; // [esp+220h] [ebp-1E8h] int v256; // [esp+224h] [ebp-1E4h] int v257; // [esp+228h] [ebp-1E0h] int v258; // [esp+22Ch] [ebp-1DCh] int v259; // [esp+230h] [ebp-1D8h] int v260; // [esp+234h] [ebp-1D4h] int v261; // [esp+238h] [ebp-1D0h] int v262; // [esp+23Ch] [ebp-1CCh] int v263; // [esp+240h] [ebp-1C8h] int v264; // [esp+244h] [ebp-1C4h] volatile LONG *v265; // [esp+248h] [ebp-1C0h] volatile LONG *v266; // [esp+24Ch] [ebp-1BCh] volatile LONG **v267; // [esp+250h] [ebp-1B8h] const void *v268[7]; // [esp+254h] [ebp-1B4h] const void *v269[7]; // [esp+270h] [ebp-198h] const void *v270[7]; // [esp+28Ch] [ebp-17Ch] const void *v271[7]; // [esp+2A8h] [ebp-160h] const void *v272[7]; // [esp+2C4h] [ebp-144h] const void *v273[7]; // [esp+2E0h] [ebp-128h] const void *v274[7]; // [esp+2FCh] [ebp-10Ch] const void *v275[7]; // [esp+318h] [ebp-F0h] const void *v276[7]; // [esp+334h] [ebp-D4h] const void *v277[7]; // [esp+350h] [ebp-B8h] const void *v278[7]; // [esp+36Ch] [ebp-9Ch] const void *v279[7]; // [esp+388h] [ebp-80h] const void *v280[7]; // [esp+3A4h] [ebp-64h] const void *v281[7]; // [esp+3C0h] [ebp-48h] const void *v282[7]; // [esp+3DCh] [ebp-2Ch] int v283; // [esp+404h] [ebp-4h] v2 = (int)this; v264 = 0; this[74] = a2; v3 = dword_BA6BA0; v283 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\FriendList.nif"); sub_8F66B0(v4, (int)&v264, v3); if ( !v264 ) return 0; v5 = sub_8FB140(v264, (int)"Frame", (int)&v263, (int)&v262, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"FriendWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v264; v283 = -1; if ( v264 ) { v7 = InterlockedDecrement((volatile LONG *)(v264 + 4)); goto LABEL_7; } return 0; } v9 = v263; v10 = v262; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v264, (int)"Theme", (int)&v263, (int)&v262, v11); else v12 = sub_8FB140(v264, (int)"Theme", (int)&v263, (int)&v262, 0); sub_8F3EB0(v263 - v9, v262 - v10, (int)v12, v2, 0, 0); v13 = sub_8FB140(v264, (int)"IconSlot", (int)&v263, (int)&v262, 0); sub_8F3EB0(v263 - v9, v262 - v10, (int)v13, v2, 0, 0); if ( !sub_8F71E0(v264, (int)"WinTitle", &v263, &v262, &v260, &v261) ) { LABEL_15: v6 = (void (__thiscall ***)(_DWORD, signed int))v264; v283 = -1; if ( v264 ) { v7 = InterlockedDecrement((volatile LONG *)(v264 + 4)); LABEL_7: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v14 = sub_421050(7); v15 = sub_8F4A20(v263 - v9, v262 - v10, v260, v261, v14, v2, 0, 0); v16 = *v15; v267 = (volatile LONG **)v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 1); (*((void (__stdcall **)(int *))*v267 + 117))(&dword_AA8D98); v266 = *v267 + 118; v17 = sub_40C190(-481277631); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v17); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v267 = sub_8FB140(v264, (int)"ClsNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"ClsClick"); sub_8FB650(v267, v264, (int)"ClsOver"); sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 11, 0, 0); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v264 + 72))("HelpLinkNor") ) { v267 = sub_8FB140(v264, (int)"HelpLinkNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"HelpLinkClick"); sub_8FB650(v267, v264, (int)"HelpLinkOver"); sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 31, 0, 0); } v267 = sub_8FB140(v264, (int)"Plane", (int)&v263, (int)&v262, 0); sub_8F3EB0(v263 - v9, v262 - v10, (int)v267, v2, 0, 0); v266 = sub_8F3EB0(v263 - v9, v262 - v10, (int)v267, v2, 0, 0); sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v18 = sub_8FB140(v264, (int)"FindPlane", (int)&v263, (int)&v262, 0); v19 = sub_8F3EB0(v263 - v9, v262 - v10, (int)v18, v2, 0, 0); v266 = v19; if ( v19 ) { (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); (*(void (__stdcall **)(_DWORD))(*v266 + 256))(0); sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); sub_8FB140(v264, (int)"Text01", (int)&v263, (int)&v262, 0); v20 = sub_421050(9); v21 = sub_8F4A20(v263 - v9, v262 - v10, v260, v261, v20, v2, 0, 0); v22 = *v21; v267 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 5); v266 = *v267 + 118; v23 = sub_40C190(-587993612); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v23); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); sub_8FB140(v264, (int)"Category", (int)&v263, (int)&v262, 0); v24 = sub_421050(9); v25 = sub_8F4A20(v263 - v9, v262 - v10, v260, v261, v24, v2, 0, 0); v26 = *v25; v267 = (volatile LONG **)v25; (*(void (__thiscall **)(volatile LONG *, signed int))(v26 + 488))(v25, 5); v266 = *v267 + 118; v27 = sub_4090F0(776608523); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v27); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v252 = 0; v253 = 0; v254 = 0; v255 = 0; v256 = 0; v257 = 0; v258 = 0; v259 = 0; LOBYTE(v283) = 1; v28 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 1); *v28 = 1; *((_DWORD *)v28 + 1) = v264; v265 = v28; sub_4019E0(v282, "ColumnBarNor"); LOBYTE(v283) = 2; v265 += 18; sub_40B060((int *)v265, v282); LOBYTE(v283) = 1; sub_636A10(v282); sub_4019E0(v282, "ColumnBarClick"); LOBYTE(v283) = 3; sub_40B060((int *)v265, v282); LOBYTE(v283) = 1; sub_636A10(v282); sub_4019E0(v282, "ColumnBarOver"); LOBYTE(v283) = 4; sub_40B060((int *)v265, v282); LOBYTE(v283) = 1; sub_636A10(v282); v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "Column01"); LOBYTE(v283) = 5; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); v29 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v29 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "Column02"); LOBYTE(v283) = 6; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); *((_DWORD *)v265 + 1) = v264; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "Column03"); LOBYTE(v283) = 7; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); *((_DWORD *)v265 + 1) = v264; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "Column04"); LOBYTE(v283) = 8; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); *((_DWORD *)v265 + 1) = v264; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "MoreInfoTitleColumn01"); LOBYTE(v283) = 9; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); *((_DWORD *)v265 + 1) = v264; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v282, "MoreInfoTitleColumn02"); LOBYTE(v283) = 10; sub_40B060((int *)v265 + 18, v282); LOBYTE(v283) = 1; sub_636A10(v282); *((_DWORD *)v265 + 1) = v264; sub_466680(&v252, 0); v30 = sub_8FB140(v264, (int)"Plane01", (int)&v263, (int)&v262, 0); v31 = sub_466330(v263 - v9, v262 - v10, (int)v30, *(float *)&v2, (int **)&v252, 0, 0); *(_DWORD *)(v2 + 22168) = v31; *((_DWORD *)v31 + 89) = 23; *(_DWORD *)(*(_DWORD *)(v2 + 22168) + 352) = 24; sub_465130(*(_DWORD **)(v2 + 22168)); v32 = *(volatile LONG **)(v2 + 22168); *(_DWORD *)(v2 + 11164) = v32; v266 = v32; sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v33 = sub_8FB140(v264, (int)"SlideBar_SlideBtnMiddle", (int)&v263, (int)&v262, 0); v34 = sub_464310(v264, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v33, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 22160) = v34; *(_DWORD *)(v34 + 312) = 16; *(_DWORD *)(*(_DWORD *)(v2 + 22160) + 304) = 1; v35 = *(volatile LONG **)(v2 + 22160); *(_DWORD *)(v2 + 11156) = v35; v266 = v35; sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v267 = sub_8FB140(v264, (int)"Title01Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Title01Click"); sub_8FB650(v267, v264, (int)"Title01Over"); v36 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 19, 0, 0); v37 = v267[9]; v265 = v36; v38 = *(volatile LONG **)(*v37 + 24); v39 = *(volatile LONG ***)(*v37 + 20); v266 = v38; v267 = v39; v40 = sub_421050(7); v41 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v40, v2, 0, 0); v42 = *v41; v267 = (volatile LONG **)v41; (*(void (__thiscall **)(volatile LONG *, signed int))(v42 + 488))(v41, 5); v266 = *v267 + 118; v43 = sub_40C190(1319409301); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v43); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v44 = v267; *(_DWORD *)(v2 + 22032) = v265; *(_DWORD *)(v2 + 22152) = v44; v267 = sub_8FB140(v264, (int)"Title02Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Title02Click"); sub_8FB650(v267, v264, (int)"Title02Over"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 20, 0, 0); v45 = v267[9]; v46 = *(volatile LONG ***)(*v45 + 20); v266 = *(volatile LONG **)(*v45 + 24); v267 = v46; v47 = sub_421050(7); v48 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v47, v2, 0, 0); v49 = *v48; v267 = (volatile LONG **)v48; (*(void (__thiscall **)(volatile LONG *, signed int))(v49 + 488))(v48, 5); v266 = *v267 + 118; v50 = sub_40C190(1247775651); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v50); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v267 = sub_8FB140(v264, (int)"Title03Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Title03Click"); sub_8FB650(v267, v264, (int)"Title03Over"); v51 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 21, 0, 0); v52 = v267[9]; v265 = v51; v53 = *(volatile LONG **)(*v52 + 24); v54 = *(volatile LONG ***)(*v52 + 20); v266 = v53; v267 = v54; v55 = sub_421050(7); v56 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v55, v2, 0, 0); v57 = *v56; v267 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); v266 = *v267 + 118; v58 = sub_40C190(-1946686207); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v58); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v267 = sub_8FB140(v264, (int)"Title04Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Title04Click"); sub_8FB650(v267, v264, (int)"Title04Over"); v59 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 22, 0, 0); v60 = v267[9]; v265 = v59; v61 = *(volatile LONG **)(*v60 + 24); v62 = *(volatile LONG ***)(*v60 + 20); v266 = v61; v267 = v62; v63 = sub_421050(7); v64 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v63, v2, 0, 0); v65 = *v64; v267 = (volatile LONG **)v64; (*(void (__thiscall **)(volatile LONG *, signed int))(v65 + 488))(v64, 5); v266 = *v267 + 118; v66 = sub_40C190(875731632); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v66); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22184), &v266); v267 = sub_8FB140(v264, (int)"AddFrndNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"AddFrndClick"); sub_8FB650(v267, v264, (int)"AddFrndOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 12, 0, 0); *((_DWORD *)v265 + 68) = dword_AD01E8; v67 = sub_40A910(69994509); sub_8F2EA0((void **)v265, v67); v68 = *v267[9]; v69 = *(volatile LONG ***)(v68 + 20); v266 = *(volatile LONG **)(v68 + 24); v267 = v69; v70 = sub_421050(7); v71 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v70, v2, 0, 0); v72 = *v71; v267 = (volatile LONG **)v71; (*(void (__thiscall **)(volatile LONG *, signed int))(v72 + 488))(v71, 5); v266 = *v267 + 118; v73 = sub_40C190(458241676); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v73); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); v267 = sub_8FB140(v264, (int)"AddInfoBtnNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"AddInfoBtnClick"); sub_8FB650(v267, v264, (int)"AddInfoBtnOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 13, 0, 0); *((_DWORD *)v265 + 68) = dword_AD01E8; v74 = sub_40A910(1160914001); sub_8F2EA0((void **)v265, v74); v75 = *v267[9]; v76 = *(volatile LONG ***)(v75 + 20); v266 = *(volatile LONG **)(v75 + 24); v267 = v76; v77 = sub_421050(7); v78 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v77, v2, 0, 0); *(_DWORD *)(v2 + 11172) = v78; (*(void (__thiscall **)(volatile LONG *, signed int))(*v78 + 488))(v78, 5); v266 = (volatile LONG *)(**(_DWORD **)(v2 + 11172) + 472); v79 = sub_40C190(-655796683); (*(void (__thiscall **)(_DWORD, const CHAR *))v266)(*(_DWORD *)(v2 + 11172), v79); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 11172) + 240))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v266 = *(volatile LONG **)(v2 + 11172); sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v267 = sub_8FB140(v264, (int)"ShowAllFrndNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"ShowAllFrndClick"); sub_8FB650(v267, v264, (int)"ShowAllFrndOver"); v80 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 14, 0, 0); v81 = v267[9]; v265 = v80; v82 = *(volatile LONG **)(*v81 + 24); v83 = *(volatile LONG ***)(*v81 + 20); v266 = v82; v267 = v83; v84 = sub_421050(7); v85 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v84, v2, 0, 0); *(_DWORD *)(v2 + 11180) = v85; (*(void (__thiscall **)(volatile LONG *, signed int))(*v85 + 488))(v85, 5); v266 = (volatile LONG *)(**(_DWORD **)(v2 + 11180) + 472); v86 = sub_40C190(960661382); (*(void (__thiscall **)(_DWORD, const CHAR *))v266)(*(_DWORD *)(v2 + 11180), v86); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 11180) + 240))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v266 = *(volatile LONG **)(v2 + 11180); sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v267 = sub_8FB140(v264, (int)"Btn01Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Btn01Click"); sub_8FB650(v267, v264, (int)"Btn01Over"); v87 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 30, 0, 0); v88 = v267; *(_DWORD *)(v2 + 11188) = v87; v89 = *v88[9]; v90 = *(volatile LONG **)(v89 + 20); v266 = *(volatile LONG **)(v89 + 24); v265 = v90; v91 = sub_421050(0); v92 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v265, (int)v266, v91, v2, 0, 0); *(_DWORD *)(v2 + 11192) = v92; (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 5); v266 = (volatile LONG *)(**(_DWORD **)(v2 + 11192) + 472); v93 = sub_40A910(760366453); (*(void (__thiscall **)(_DWORD, const CHAR *))v266)(*(_DWORD *)(v2 + 11192), v93); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 11192) + 240))(0); v94 = sub_40A910(2058459009); sub_8F2EA0(*(void ***)(v2 + 11188), v94); *(_DWORD *)(*(_DWORD *)(v2 + 11188) + 272) = dword_AD01E8; v266 = *(volatile LONG **)(v2 + 11188); sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v266 = *(volatile LONG **)(v2 + 11192); sub_5B3CF0((_DWORD *)(v2 + 22232), &v266); v95 = sub_8FB140(v264, (int)"Base", (int)&v263, (int)&v262, 0); sub_8F3EB0(v263 - v9, v262 - v10, (int)v95, v2, 0, 0); v267 = sub_8FB140(v264, (int)"FriendNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FriendClick"); sub_8FB650(v267, v264, (int)"FriendOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 10, 0, 0); v96 = sub_40C190(-587993612); sub_8F2EA0((void **)v265, v96); *((_DWORD *)v265 + 68) = dword_AD01E8; v267 = sub_8FB140(v264, (int)"MasterNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"MasterClick"); sub_8FB650(v267, v264, (int)"MasterOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 28, 0, 0); v97 = sub_40C190(-196330948); sub_8F2EA0((void **)v265, v97); *((_DWORD *)v265 + 68) = dword_AD01E8; v267 = sub_8FB140(v264, (int)"GuildNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"GuildClick"); sub_8FB650(v267, v264, (int)"GuildOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 25, 0, 0); v98 = sub_40C190(-1679100684); sub_8F2EA0((void **)v265, v98); *((_DWORD *)v265 + 68) = dword_AD01E8; v267 = sub_8FB140(v264, (int)"WeddingNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"WeddingClick"); sub_8FB650(v267, v264, (int)"WeddingOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 27, 0, 0); v99 = sub_40C190(-923451580); sub_8F2EA0((void **)v265, v99); *((_DWORD *)v265 + 68) = dword_AD01E8; v267 = sub_8FB140(v264, (int)"PartyMatchNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"PartyMatchClick"); sub_8FB650(v267, v264, (int)"PartyMatchOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 26, 0, 0); v100 = sub_40C190(474697790); sub_8F2EA0((void **)v265, v100); *((_DWORD *)v265 + 68) = dword_AD01E8; v267 = sub_8FB140(v264, (int)"GuildAcademyNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"GuildAcademyClick"); sub_8FB650(v267, v264, (int)"GuildAcademyOver"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 29, 0, 0); v101 = sub_40C190(624629836); sub_8F2EA0((void **)v265, v101); *((_DWORD *)v265 + 68) = dword_AD01E8; v102 = *sub_8FB140(v264, (int)"Friend", (int)&v263, (int)&v262, 0)[9]; v103 = *(volatile LONG **)(v102 + 20); v266 = *(volatile LONG **)(v102 + 24); v265 = v103; v104 = sub_421050(9); v105 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v104, v2, 0, 0); v106 = *v105; v267 = (volatile LONG **)v105; (*(void (__thiscall **)(volatile LONG *, signed int))(v106 + 488))(v105, 1); v266 = *v267 + 118; v107 = sub_40C190(-587993612); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v107); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v108 = sub_8FB140(v264, (int)"HolyPromise", (int)&v263, (int)&v262, 0)[9]; v109 = *(volatile LONG **)(*v108 + 20); v266 = *(volatile LONG **)(*v108 + 24); v265 = v109; v110 = sub_421050(9); v111 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v110, v2, 0, 0); v112 = *v111; v267 = (volatile LONG **)v111; (*(void (__thiscall **)(volatile LONG *, signed int))(v112 + 488))(v111, 1); v266 = *v267 + 118; v113 = sub_40C190(-196330948); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v113); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v114 = sub_8FB140(v264, (int)"Guild", (int)&v263, (int)&v262, 0)[9]; v115 = *(volatile LONG **)(*v114 + 20); v266 = *(volatile LONG **)(*v114 + 24); v265 = v115; v116 = sub_421050(9); v117 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v116, v2, 0, 0); v118 = *v117; v267 = (volatile LONG **)v117; (*(void (__thiscall **)(volatile LONG *, signed int))(v118 + 488))(v117, 1); v266 = *v267 + 118; v119 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v119); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v120 = sub_8FB140(v264, (int)"Wedding", (int)&v263, (int)&v262, 0)[9]; v121 = *(volatile LONG **)(*v120 + 20); v266 = *(volatile LONG **)(*v120 + 24); v265 = v121; v122 = sub_421050(9); v123 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v122, v2, 0, 0); v124 = *v123; v267 = (volatile LONG **)v123; (*(void (__thiscall **)(volatile LONG *, signed int))(v124 + 488))(v123, 1); v266 = *v267 + 118; v125 = sub_40C190(-923451580); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v125); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v126 = sub_8FB140(v264, (int)"GuildAcademy", (int)&v263, (int)&v262, 0)[9]; v127 = *(volatile LONG **)(*v126 + 20); v266 = *(volatile LONG **)(*v126 + 24); v265 = v127; v128 = sub_421050(9); v129 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v128, v2, 0, 0); v130 = *v129; v267 = (volatile LONG **)v129; (*(void (__thiscall **)(volatile LONG *, signed int))(v130 + 488))(v129, 1); v266 = *v267 + 118; v131 = sub_40C190(-2036079644); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v131); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v132 = sub_8FB140(v264, (int)"PartyMatch", (int)&v263, (int)&v262, 0)[9]; v133 = *(volatile LONG **)(*v132 + 20); v266 = *(volatile LONG **)(*v132 + 24); v265 = v133; v134 = sub_421050(9); v135 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v134, v2, 0, 0); v136 = *v135; v267 = (volatile LONG **)v135; (*(void (__thiscall **)(volatile LONG *, signed int))(v136 + 488))(v135, 1); v266 = *v267 + 118; v137 = sub_40C190(474697790); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v137); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v267 = sub_8FB140(v264, (int)"List_Tab_Off", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"List_Tab_On"); v138 = sub_465940(v263 - v9, v262 - v10, (int)v267, v2, 32, 0); v139 = v267; *(_DWORD *)(v2 + 22020) = v138; *((_BYTE *)v138 + 380) = 1; v140 = *v139[9]; v141 = *(volatile LONG **)(v140 + 20); v266 = *(volatile LONG **)(v140 + 24); v265 = v141; v142 = sub_421050(7); v143 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v142, v2, 0, 0); v144 = *v143; v267 = (volatile LONG **)v143; (*(void (__thiscall **)(volatile LONG *, signed int))(v144 + 488))(v143, 5); v266 = *v267 + 118; v145 = sub_4090F0(1939047303); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v145); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v267 = sub_8FB140(v264, (int)"Find_Tab_Off", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"Find_Tab_On"); v146 = sub_465940(v263 - v9, v262 - v10, (int)v267, v2, 33, 0); v147 = v267; *(_DWORD *)(v2 + 22024) = v146; *((_BYTE *)v146 + 380) = 0; v148 = *v147[9]; v149 = *(volatile LONG **)(v148 + 20); v266 = *(volatile LONG **)(v148 + 24); v265 = v149; v150 = sub_421050(7); v151 = sub_8F4A20(v263, v262, (int)v265, (int)v266, v150, v2, 0, 0); v152 = *v151; v267 = (volatile LONG **)v151; (*(void (__thiscall **)(volatile LONG *, signed int))(v152 + 488))(v151, 5); v266 = *v267 + 118; v153 = sub_4090F0(1938649986); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v153); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v267 = sub_8FB140(v264, (int)"MoreInfoTitle01Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"MoreInfoTitle01Click"); sub_8FB650(v267, v264, (int)"MoreInfoTitle01Over"); v154 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 40, 0, 0); v155 = *v154; v265 = v154; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v155 + 256))(v154, 0); v156 = *v267[9]; v157 = *(volatile LONG ***)(v156 + 20); v266 = *(volatile LONG **)(v156 + 24); v267 = v157; v158 = sub_421050(7); v159 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v158, v2, 0, 0); v160 = *v159; v267 = (volatile LONG **)v159; (*(void (__thiscall **)(volatile LONG *, signed int))(v160 + 488))(v159, 5); v266 = *v267 + 118; v161 = sub_40C190(-570212531); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v161); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); (*((void (__stdcall **)(_DWORD))*v267 + 64))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22200), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22200), &v266); v267 = sub_8FB140(v264, (int)"MoreInfoTitle02Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"MoreInfoTitle02Click"); sub_8FB650(v267, v264, (int)"MoreInfoTitle02Over"); v162 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 41, 0, 0); v163 = *v162; v265 = v162; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v163 + 256))(v162, 0); v164 = *v267[9]; v165 = *(volatile LONG ***)(v164 + 20); v266 = *(volatile LONG **)(v164 + 24); v267 = v165; v166 = sub_421050(7); v167 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v166, v2, 0, 0); v168 = *v167; v267 = (volatile LONG **)v167; (*(void (__thiscall **)(volatile LONG *, signed int))(v168 + 488))(v167, 5); v266 = *v267 + 118; v169 = sub_40C190(-414625737); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v169); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); (*((void (__stdcall **)(_DWORD))*v267 + 64))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22200), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22200), &v266); v267 = sub_8FB140(v264, (int)"UseBtnNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"UseBtnClick"); sub_8FB650(v267, v264, (int)"UseBtnOver"); sub_8FB650(v267, v264, (int)"UseBtnDis"); v170 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 34, 0, 0); v171 = v267; *(_DWORD *)(v2 + 22028) = v170; v172 = *v171[9]; v173 = *(volatile LONG **)(v172 + 20); v266 = *(volatile LONG **)(v172 + 24); v265 = v173; v174 = sub_421050(7); v175 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v265, (int)v266, v174, v2, 0, 0); v176 = *v175; v267 = (volatile LONG **)v175; (*(void (__thiscall **)(volatile LONG *, signed int))(v176 + 488))(v175, 5); v266 = *v267 + 118; v177 = sub_4090F0(-924455127); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v177); *(_DWORD *)(*(_DWORD *)(v2 + 22028) + 272) = dword_AD01E8; v178 = *(_DWORD *)(v2 + 11204); v179 = (char *)sub_4090F0(-620946909); v180 = sub_7549E0(v179, v178); sub_8F2EA0(*(void ***)(v2 + 22028), v180); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v2 + 22028) + 240))(0); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); v267 = sub_8FB140(v264, (int)"FriendHelpNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FriendHelpClick"); sub_8FB650(v267, v264, (int)"FriendHelpOver"); sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 35, 0, 0); sub_40AE60(&v252); v181 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 1); *v181 = 1; *((_DWORD *)v181 + 1) = v264; v265 = v181; sub_4019E0(v269, "FindColumnBarNor"); LOBYTE(v283) = 11; v265 += 18; sub_40B060((int *)v265, v269); LOBYTE(v283) = 1; sub_636A10(v269); sub_4019E0(v275, "FindColumnBarClick"); LOBYTE(v283) = 12; sub_40B060((int *)v265, v275); LOBYTE(v283) = 1; sub_636A10(v275); sub_4019E0(v281, "FindColumnBarOver"); LOBYTE(v283) = 13; sub_40B060((int *)v265, v281); LOBYTE(v283) = 1; sub_636A10(v281); v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v280, "FindColumn00"); LOBYTE(v283) = 14; sub_40B060((int *)v265 + 18, v280); LOBYTE(v283) = 1; sub_636A10(v280); v182 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v182 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v279, "FindColumn01"); LOBYTE(v283) = 15; sub_40B060((int *)v265 + 18, v279); LOBYTE(v283) = 1; sub_636A10(v279); v183 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v183 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v271, "FindColumn02"); LOBYTE(v283) = 16; sub_40B060((int *)v265 + 18, v271); LOBYTE(v283) = 1; sub_636A10(v271); v184 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v184 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v273, "FindColumn03"); LOBYTE(v283) = 17; sub_40B060((int *)v265 + 18, v273); LOBYTE(v283) = 1; sub_636A10(v273); v185 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v185 + 88) = 1; sub_466680(&v252, 0); v186 = sub_8FB140(v264, (int)"FindPlane01", (int)&v263, (int)&v262, 0); v187 = sub_466330(v263 - v9, v262 - v10, (int)v186, *(float *)&v2, (int **)&v252, 0, 0); *(_DWORD *)(v2 + 22172) = v187; *((_DWORD *)v187 + 88) = 24; *(_DWORD *)(*(_DWORD *)(v2 + 22172) + 356) = 23; sub_465130(*(_DWORD **)(v2 + 22172)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22172) + 256))(0); v266 = *(volatile LONG **)(v2 + 22172); sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); sub_40AE60(&v252); v188 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 1); *v188 = 1; *((_DWORD *)v188 + 1) = v264; v265 = v188; sub_4019E0(v278, "InviteColumnBarNor"); LOBYTE(v283) = 18; v265 += 18; sub_40B060((int *)v265, v278); LOBYTE(v283) = 1; sub_636A10(v278); sub_4019E0(v276, "InviteColumnBarClick"); LOBYTE(v283) = 19; sub_40B060((int *)v265, v276); LOBYTE(v283) = 1; sub_636A10(v276); sub_4019E0(v274, "InviteColumnBarOver"); LOBYTE(v283) = 20; sub_40B060((int *)v265, v274); LOBYTE(v283) = 1; sub_636A10(v274); v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v272, "InviteColumn00"); LOBYTE(v283) = 21; sub_40B060((int *)v265 + 18, v272); LOBYTE(v283) = 1; sub_636A10(v272); v189 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v189 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v270, "InviteColumn01"); LOBYTE(v283) = 22; sub_40B060((int *)v265 + 18, v270); LOBYTE(v283) = 1; sub_636A10(v270); v190 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v190 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v268, "InviteColumn02"); LOBYTE(v283) = 23; sub_40B060((int *)v265 + 18, v268); LOBYTE(v283) = 1; sub_636A10(v268); v191 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v191 + 88) = 1; v265 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v252, 2); *v265 = 2; sub_4019E0(v277, "InviteColumn03"); LOBYTE(v283) = 24; sub_40B060((int *)v265 + 18, v277); LOBYTE(v283) = 1; sub_636A10(v277); v192 = v265; *((_DWORD *)v265 + 1) = v264; *((_BYTE *)v192 + 88) = 1; sub_466680(&v252, 0); v193 = sub_8FB140(v264, (int)"InvitePlane", (int)&v263, (int)&v262, 0); v194 = sub_466330(v263 - v9, v262 - v10, (int)v193, *(float *)&v2, (int **)&v252, 0, 0); *(_DWORD *)(v2 + 22176) = v194; *((_DWORD *)v194 + 88) = 38; *(_DWORD *)(*(_DWORD *)(v2 + 22176) + 356) = 39; sub_465130(*(_DWORD **)(v2 + 22176)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22176) + 256))(0); sub_464710(*(_DWORD **)(v2 + 22176), dword_AD01E8); v195 = sub_4090F0(-1919509039); sub_464760(*(_DWORD **)(v2 + 22176), 0, v195); v266 = *(volatile LONG **)(v2 + 22176); sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); v196 = sub_8FB140(v264, (int)"SlideBar_SlideBtnMiddle", (int)&v263, (int)&v262, 0); v197 = sub_464310(v264, (int)"FindSlideBar", "FindSlideBar_UpBtn", "FindSlideBar_DnBtn", (int)v196, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 22164) = v197; *(_DWORD *)(v197 + 312) = 16; *(_DWORD *)(*(_DWORD *)(v2 + 22164) + 304) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22164) + 256))(0); v266 = *(volatile LONG **)(v2 + 22164); sub_5B3CF0((_DWORD *)(v2 + 22248), &v266); v267 = sub_8FB140(v264, (int)"FindTitle00Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FindTitle00Click"); sub_8FB650(v267, v264, (int)"FindTitle00Over"); v265 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 19, 0, 0); v198 = v267[9]; v199 = *(volatile LONG ***)(*v198 + 20); v266 = *(volatile LONG **)(*v198 + 24); v267 = v199; v200 = sub_421050(7); v201 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v200, v2, 0, 0); v202 = *v201; v267 = (volatile LONG **)v201; (*(void (__thiscall **)(volatile LONG *, signed int))(v202 + 488))(v201, 5); v266 = *v267 + 118; v203 = sub_40C190(1319409301); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v203); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); (*(void (__stdcall **)(_DWORD))(*v265 + 256))(0); (*((void (__stdcall **)(_DWORD))*v267 + 64))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v267 = sub_8FB140(v264, (int)"FindTitle01Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FindTitle01Click"); sub_8FB650(v267, v264, (int)"FindTitle01Over"); v204 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 20, 0, 0); v205 = v267[9]; v265 = v204; v206 = *(volatile LONG **)(*v205 + 24); v207 = *(volatile LONG ***)(*v205 + 20); v266 = v206; v267 = v207; v208 = sub_421050(7); v209 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v208, v2, 0, 0); v210 = *v209; v267 = (volatile LONG **)v209; (*(void (__thiscall **)(volatile LONG *, signed int))(v210 + 488))(v209, 5); v266 = *v267 + 118; v211 = sub_40C190(-1766684000); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v211); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); (*(void (__stdcall **)(_DWORD))(*v265 + 256))(0); (*((void (__stdcall **)(_DWORD))*v267 + 64))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v267 = sub_8FB140(v264, (int)"FindTitle02Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FindTitle02Click"); sub_8FB650(v267, v264, (int)"FindTitle02Over"); v212 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 21, 0, 0); v213 = v267[9]; v265 = v212; v214 = *(volatile LONG **)(*v213 + 24); v215 = *(volatile LONG ***)(*v213 + 20); v266 = v214; v267 = v215; v216 = sub_421050(7); v217 = sub_8F4A20(v263 - v9, v262 - v10 + 1, (int)v267, (int)v266, v216, v2, 0, 0); v218 = *v217; v267 = (volatile LONG **)v217; (*(void (__thiscall **)(volatile LONG *, signed int))(v218 + 488))(v217, 5); v266 = *v267 + 118; v219 = sub_40C190(-1734041703); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v266)(v267, v219); (*((void (__stdcall **)(_DWORD))*v267 + 60))(0); (*(void (__stdcall **)(_DWORD))(*v265 + 256))(0); (*((void (__stdcall **)(_DWORD))*v267 + 64))(0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v266 = (volatile LONG *)v267; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v267 = sub_8FB140(v264, (int)"FindTitle03Nor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FindTitle03Click"); sub_8FB650(v267, v264, (int)"FindTitle03Over"); v220 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 0, 0, 0); v221 = *v220; v265 = v220; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v221 + 256))(v220, 0); v266 = v265; sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); sub_8F71E0(v264, (int)"Frind_Point_Text", &v263, &v262, &v260, &v261); v222 = sub_421050(7); v223 = sub_8F4A20(v263 - v9, v262 - v10, v260, v261, v222, v2, 0, 0); *(_DWORD *)(v2 + 22148) = v223; (*(void (__thiscall **)(volatile LONG *, signed int))(*v223 + 488))(v223, 5); v224 = *(_DWORD *)(v2 + 11200); v266 = (volatile LONG *)(**(_DWORD **)(v2 + 22148) + 472); v225 = (char *)sub_4090F0(-1679506739); v226 = sub_7549E0(v225, v224); (*(void (__thiscall **)(_DWORD, char *))v266)(*(_DWORD *)(v2 + 22148), v226); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22148) + 240))(0); v267 = sub_8FB140(v264, (int)"FirendAddNor", (int)&v263, (int)&v262, 0); sub_8FB650(v267, v264, (int)"FirendAddOver"); sub_8FB650(v267, v264, (int)"FirendAddClick"); v266 = 0; v265 = (volatile LONG *)(v2 + 22040); do { v227 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 36, 0, 0); *v265 = (volatile LONG)v227; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v227 + 240))(v227, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v265 + 256))(0); (*(void (__stdcall **)(volatile LONG *))(**(_DWORD **)v265 + 520))(v266); ++v265; v266 = (volatile LONG *)((char *)v266 + 1); } while ( (signed int)v266 < 27 ); v228 = sub_8FE0F0(v263 - v9, v262 - v10, (int)v267, v2, 37, 0, 0); *(_DWORD *)(v2 + 22036) = v228; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v228 + 240))(v228, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22036) + 256))(0); v229 = sub_517CC0(*(_DWORD **)(v2 + 22176), 0, 3u); v230 = *(_DWORD **)(v2 + 22176); v266 = (volatile LONG *)(v229 + 33); v231 = sub_517D50(v230, 0, 3u); v232 = *(void (__stdcall **)(volatile LONG *))(**(_DWORD **)(v2 + 22036) + 172); v265 = (volatile LONG *)(v231 + 1); v232(v266); (*(void (__stdcall **)(volatile LONG *))(**(_DWORD **)(v2 + 22036) + 176))(v265); v233 = sub_8FB140(v264, (int)"ToolTip", (int)&v263, (int)&v262, 0); v234 = sub_8F3EB0(v263 - v9, v262 - v10, (int)v233, v2, 0, 0); *(_DWORD *)(v2 + 22156) = v234; *((_DWORD *)v234 + 68) = dword_AD01E8; v235 = sub_4090F0(-1801329971); sub_8F2EA0(*(void ***)(v2 + 22156), v235); v266 = *(volatile LONG **)(v2 + 22156); sub_5B3CF0((_DWORD *)(v2 + 22216), &v266); v236 = sub_43D0D0(1u); v237 = sub_58E5D0(v236, 4, 4, 0); *(_DWORD *)(v2 + 11184) = v237; (**((void (__stdcall ***)(int))v237 + 58))(v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 11184)); v238 = sub_40C190(725457588); v239 = (void **)sub_58E290(v238, 0, 0, 0, 0, 0, 0); sub_58D580(v239, (void *)0x14, 0); sub_58E080(*(_DWORD **)(v2 + 11184), v2 + 232, (int)v239); v240 = sub_40C190(-1091633134); v241 = (void **)sub_58E290(v240, 0, 0, 0, 0, 0, 0); sub_58D580(v241, (void *)0x15, 0); sub_58E080(*(_DWORD **)(v2 + 11184), v2 + 232, (int)v241); v242 = sub_40C190(-1729496084); v243 = (void **)sub_58E290(v242, 0, 0, 0, 0, 0, 0); sub_58D580(v243, (void *)0x12, 0); sub_58E080(*(_DWORD **)(v2 + 11184), v2 + 232, (int)v243); sub_58D930(*(_DWORD **)(v2 + 11184), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 11184) + 256))(0); v244 = sub_43D0D0(1u); v245 = sub_58E5D0(v244, 4, 4, 0); *(_DWORD *)(v2 + 22180) = v245; (**((void (__stdcall ***)(int))v245 + 58))(v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 22180)); v246 = sub_40C190(725457588); v247 = (void **)sub_58E290(v246, 0, 0, 0, 0, 0, 0); sub_58D580(v247, (void *)0x14, 0); sub_58E080(*(_DWORD **)(v2 + 22180), (int)v247, (int)v247); v248 = sub_40C190(-1091633134); v249 = (void **)sub_58E290(v248, 0, 0, 0, 0, 0, 0); sub_58D580(v249, (void *)0x15, 0); sub_58E080(*(_DWORD **)(v2 + 22180), (int)v249, (int)v249); sub_58D930(*(_DWORD **)(v2 + 22180), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 22180) + 256))(0); v250 = sub_513CB0(); *(_DWORD *)(v2 + 22280) = v250; if ( !v250 ) { LOBYTE(v283) = 0; sub_40AE10((void **)&v252); goto LABEL_15; } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v250 + 256))(v250, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v283) = 0; sub_40AE10((void **)&v252); v251 = (void (__thiscall ***)(_DWORD, signed int))v264; v283 = -1; if ( v264 && !InterlockedDecrement((volatile LONG *)(v264 + 4)) && v251 ) (**v251)(v251, 1); result = 1; } else { v283 = -1; sub_410C00(&v264); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00517AD0) -------------------------------------------------------- char *__cdecl sub_517AD0(char *a1, size_t a2, char *a3, int a4, int a5, int a6) { stru_ACEBE4.tm_year = a4 - 1900; stru_ACEBE4.tm_mon = a5 - 1; stru_ACEBE4.tm_mday = a6; strftime(a1, a2, a3, &stru_ACEBE4); return a1; } //----- (00517B20) -------------------------------------------------------- _DWORD *__thiscall sub_517B20(void **this, void *a2) { void **v2; // esi _DWORD *v3; // eax unsigned int v4; // edi void *v5; // edx int v6; // ebx _DWORD *v7; // ecx _DWORD *v8; // eax int v9; // edi _DWORD *v10; // ecx _DWORD *v11; // eax int v12; // edi _DWORD *v13; // ecx _DWORD *v14; // eax void *v15; // ST00_4 _DWORD *result; // eax _DWORD *v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] unsigned int v19; // [esp+10h] [ebp-4h] char *v20; // [esp+10h] [ebp-4h] v2 = this; v3 = operator new[](16 * (_DWORD)a2); v4 = (unsigned int)v2[2]; v5 = 0; v17 = v3; if ( v4 < (unsigned int)v2[3] ) { v20 = (char *)v2[2]; v12 = 16 * v4; v13 = v3; do { v14 = (char *)*v2 + v12; *v13 = *(_DWORD *)((char *)*v2 + v12); v13[1] = v14[1]; v13[2] = v14[2]; v13[3] = v14[3]; v5 = (char *)v5 + 1; v13 += 4; v12 += 16; ++v20; } while ( v20 < v2[3] ); } else { if ( v4 < (unsigned int)v2[1] ) { v6 = 16 * v4; v18 = 16 * v4; v7 = v3; do { v8 = (char *)*v2 + v6; *v7 = *v8; v7[1] = v8[1]; v7[2] = v8[2]; v7[3] = v8[3]; ++v4; v6 = v18 + 16; v5 = (char *)v5 + 1; v7 += 4; v18 += 16; } while ( v4 < (unsigned int)v2[1] ); v3 = v17; } v9 = 0; v19 = 0; if ( v2[3] ) { v10 = &v3[4 * (_DWORD)v5]; do { v11 = (char *)*v2 + v9; *v10 = *(_DWORD *)((char *)*v2 + v9); v10[1] = v11[1]; v10[2] = v11[2]; v10[3] = v11[3]; v5 = (char *)v5 + 1; v10 += 4; v9 += 16; ++v19; } while ( v19 < (unsigned int)v2[3] ); } } v2[3] = v5; v15 = *v2; v2[2] = 0; v2[1] = a2; operator delete[](v15); result = v17; *v2 = v17; return result; } //----- (00517C40) -------------------------------------------------------- void *__thiscall sub_517C40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FriendAddWin::`vftable'; *((_DWORD *)this + 58) = &FriendAddWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C4F28: using guessed type void *FriendAddWin::`vftable'; // 9C4F44: using guessed type void *FriendAddWin::`vftable'; //----- (00517C80) -------------------------------------------------------- void *__thiscall sub_517C80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FriendPointTipMsg::`vftable'; *((_DWORD *)this + 58) = &FriendPointTipMsg::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5168: using guessed type void *FriendPointTipMsg::`vftable'; // 9C5184: using guessed type void *FriendPointTipMsg::`vftable'; //----- (00517CC0) -------------------------------------------------------- int __thiscall sub_517CC0(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // ecx int v6; // edi int v8; // ebx int v9; // edi v3 = this; v4 = (this[75] - this[74]) >> 2; if ( a2 >= (unsigned int)v4 ) return 0; v5 = *(_DWORD **)(this[74] + 4 * a2); if ( a3 >= (v5[84] - v5[83]) >> 2 ) return 0; v6 = *(_DWORD *)(v5[83] + 4 * a3); if ( !v6 || a2 >= v4 || !v5 ) return 0; v8 = (*(int (**)(void))(*v5 + 164))(); v9 = v8 + (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 164))(v6); return v9 + (*(int (__thiscall **)(_DWORD *))(*v3 + 164))(v3); } //----- (00517D50) -------------------------------------------------------- int __thiscall sub_517D50(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // ecx int v6; // edi int v8; // ebx int v9; // edi v3 = this; v4 = (this[75] - this[74]) >> 2; if ( a2 >= (unsigned int)v4 ) return 0; v5 = *(_DWORD **)(this[74] + 4 * a2); if ( a3 >= (v5[84] - v5[83]) >> 2 ) return 0; v6 = *(_DWORD *)(v5[83] + 4 * a3); if ( !v6 || a2 >= v4 || !v5 ) return 0; v8 = (*(int (**)(void))(*v5 + 168))(); v9 = v8 + (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 168))(v6); return v9 + (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); } //----- (00517DE0) -------------------------------------------------------- int __thiscall sub_517DE0(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi int v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax int result; // eax v5 = this; v6 = this[2]; if ( v6 == -1 ) { v7 = (_DWORD *)*this; this[2] = 0; *v7 = a2; v7[1] = a3; v7[2] = a4; v7[3] = a5; this[3] = 1; } else { if ( v6 == this[3] ) sub_517B20((void **)this, (void *)(2 * this[1])); v8 = (_DWORD *)(*v5 + 16 * v5[3]); *v8 = a2; v8[1] = a3; v8[2] = a4; v8[3] = a5; ++v5[3]; } result = v5[3]; if ( result == v5[1] ) v5[3] = 0; return result; } //----- (00517E60) -------------------------------------------------------- void *__thiscall sub_517E60(void *this, char a2) { void *v2; // esi v2 = this; sub_513830(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00517E90) -------------------------------------------------------- int __thiscall sub_517E90(_DWORD *this, int a2, int a3, int a4, int a5) { int result; // eax this[79] = a2; result = a4; this[80] = a3; this[81] = a4; this[82] = a5; return result; } //----- (00517EC0) -------------------------------------------------------- int __thiscall sub_517EC0(_DWORD **this) { int v1; // esi signed int v2; // edi int result; // eax v1 = (int)(this + 149); v2 = 22; if ( (*(unsigned __int8 (**)(void))(*this[149] + 260))() ) { do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0); v1 += 4; --v2; } while ( v2 ); } else { do { result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v1 + 256))(1); v1 += 4; --v2; } while ( v2 ); } return result; } //----- (00517F70) -------------------------------------------------------- _DWORD *__thiscall sub_517F70(_DWORD **this) { return sub_8F9E00(&unk_BA6B10, this[147]); } //----- (00517F90) -------------------------------------------------------- int __thiscall sub_517F90(_DWORD *this) { return this[147]; } //----- (00517FD0) -------------------------------------------------------- int __thiscall sub_517FD0(_DWORD **this) { _DWORD **v1; // esi char v2; // al void (__stdcall *v3)(signed int); // edx int result; // eax int v5; // esi signed int v6; // edi int v7; // esi signed int v8; // edi v1 = this; v2 = (*(int (**)(void))(*this[341] + 260))(); v3 = *(void (__stdcall **)(signed int))(*v1[341] + 256); if ( v2 ) { v3(0); (*(void (__stdcall **)(_DWORD))(*v1[342] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[329] + 240))(1); (*(void (__stdcall **)(signed int))(*v1[329] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[330] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[330] + 256))(0); v7 = (int)(v1 + 172); v8 = 20; do { if ( *(_DWORD *)v7 ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); v7 += 4; --v8; } while ( v8 ); } else { v3(1); (*(void (__stdcall **)(signed int))(*v1[342] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[329] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[329] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[330] + 240))(1); result = (*(int (__stdcall **)(signed int))(*v1[330] + 256))(1); v5 = (int)(v1 + 172); v6 = 20; do { if ( *(_DWORD *)v5 ) result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v5 + 256))(1); v5 += 4; --v6; } while ( v6 ); } return result; } //----- (00518110) -------------------------------------------------------- int __thiscall sub_518110(char *this) { int v1; // esi signed int v2; // edi int result; // eax v1 = (int)(this + 1156); v2 = 40; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 - 160) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 - 160) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 240))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0); v1 += 4; --v2; } while ( v2 ); return result; } //----- (00518170) -------------------------------------------------------- void __thiscall sub_518170(float *this, float a2) { this[361] = a2; } //----- (00518180) -------------------------------------------------------- int __thiscall sub_518180(_DWORD *this, int a2, int a3, int a4, int a5) { int result; // eax this[362] = a2; result = a4; this[363] = a3; this[364] = a4; this[365] = a5; return result; } //----- (005181B0) -------------------------------------------------------- char __stdcall sub_5181B0(char *a1, const char *a2, signed int a3) { BYTE *v3; // edi signed int v4; // eax signed int v5; // ebx char *v6; // esi char result; // al v3 = (BYTE *)a2; v4 = strlen(a2); if ( v4 && v4 >= a3 ) { v5 = 0; v6 = a1; while ( v5 < a3 ) { if ( IsDBCSLeadByte(*v3) ) { *v6 = *v3; v5 += 2; v6[1] = v3[1]; v3 += 2; v6 += 2; } else { ++v5; *v6++ = *v3++; } } *(_DWORD *)&v6[strlen(v6)] = 3026478; result = 1; } else { strcpy(a1, a2); result = 0; } return result; } //----- (00518250) -------------------------------------------------------- char sub_518250() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MinimapFull"); return (char)v0; } //----- (00518280) -------------------------------------------------------- char __thiscall sub_518280(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax char *v5; // eax v2 = this; v3 = (_DWORD *)this[93]; if ( !v3 ) return 1; while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(v4 + 312)); if ( v5 ) { if ( *((_WORD *)v5 + 471) == *(_WORD *)(a2 + 3) ) break; } } if ( !v3 ) return 1; } *((_BYTE *)v2 + 364) = 0; return 0; } //----- (005182E0) -------------------------------------------------------- int __thiscall sub_5182E0(void *this) { void *v1; // esi int v2; // eax int v3; // ST10_4 float v4; // ST18_4 float v5; // ST14_4 float *v6; // eax int v7; // ecx int v8; // edx int v9; // ecx float *v10; // esi int v11; // eax int v12; // ecx int result; // eax v1 = this; v2 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v3 = *(_DWORD *)(v2 + 8); v4 = (0.02 * *(float *)v2 / *((float *)v1 + 361) - *((float *)v1 + 143)) * *((float *)v1 + 145); v5 = (512.0 - 0.02 * *(float *)(v2 + 4) / *((float *)v1 + 361) - *((float *)v1 + 144)) * *((float *)v1 + 146); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 86) + 256))(1); v6 = (float *)*((_DWORD *)v1 + 86); v7 = *((_DWORD *)v6 + 22); v8 = *((_DWORD *)v6 + 23); v9 = *((_DWORD *)v6 + 24); v6[22] = v4; v6[23] = v5; *((_DWORD *)v6 + 24) = v9; (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 133) + 256))(1); v10 = (float *)*((_DWORD *)v1 + 133); v11 = *((_DWORD *)v10 + 22); v12 = *((_DWORD *)v10 + 23); result = *((_DWORD *)v10 + 24); v10[22] = v4; v10[23] = v5; *((_DWORD *)v10 + 24) = result; return result; } //----- (005183E0) -------------------------------------------------------- int __thiscall sub_5183E0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax float v4; // [esp+4h] [ebp-34h] float v5; // [esp+8h] [ebp-30h] float v6; // [esp+Ch] [ebp-2Ch] float v7[9]; // [esp+10h] [ebp-28h] v1 = this; (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 216))(v7); v2 = *((_DWORD *)dword_AD8EBC + 731); if ( v2 ) (*(void (__thiscall **)(int, float *))(*(_DWORD *)v2 + 220))(v2, &v4); else (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 220))(&v4); v5 = -v5; v6 = -v6; sub_8CF390(&v4, v7); (*(void (__stdcall **)(float *))(*v1[86] + 296))(v7); return (*(int (__stdcall **)(float *))(*v1[133] + 296))(v7); } //----- (00518490) -------------------------------------------------------- char __thiscall sub_518490(_DWORD *this, __int16 a2) { _DWORD *v2; // eax int v3; // ecx v2 = (_DWORD *)this[93]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( *(_WORD *)(v3 + 312) == a2 ) break; } if ( !v2 ) return 0; } return 1; } //----- (00518550) -------------------------------------------------------- int __thiscall sub_518550(_DWORD *this, int a2) { int result; // eax switch ( a2 ) { case 0: result = this[109]; break; case 1: result = this[104]; break; case 2: result = this[112]; break; case 3: result = this[114]; break; case 4: result = this[107]; break; case 5: case 24: result = this[122]; break; case 6: result = this[108]; break; case 7: result = this[105]; break; case 8: result = this[111]; break; case 9: result = this[110]; break; case 10: result = this[103]; break; case 11: result = this[106]; break; case 12: result = this[113]; break; case 14: result = this[116]; break; case 15: result = this[124]; break; case 16: result = this[135]; break; case 17: result = this[136]; break; case 18: result = this[134]; break; case 19: result = this[138]; break; case 20: result = this[137]; break; case 21: result = this[139]; break; case 22: result = 0; break; case 23: result = this[123]; break; case 25: result = this[194]; break; case 26: result = this[196]; break; case 27: result = this[195]; break; case 28: result = this[198]; break; case 29: result = this[197]; break; case 30: result = this[199]; break; default: result = this[115]; break; } return result; } //----- (00518710) -------------------------------------------------------- int __thiscall sub_518710(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi int v8; // eax unsigned int v9; // edx unsigned int v10; // eax _DWORD *v11; // ecx void (__thiscall ***v12)(_DWORD, signed int); // edi _DWORD *v14; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] _DWORD *v16; // [esp+10h] [ebp-4h] v1 = this + 585; v16 = this; v2 = this[586]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = v6[2]; v14 = (_DWORD *)v6[2]; if ( *v6 ) { v6 = (_DWORD *)*v6; } else { v8 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 4))(v1, v6[1]); v9 = v1[1]; v10 = v8 + 1; if ( v10 >= v9 ) { LABEL_14: v6 = 0; } else { v11 = (_DWORD *)(v1[2] + 4 * v10); while ( 1 ) { v6 = (_DWORD *)*v11; if ( *v11 ) break; ++v10; ++v11; if ( v10 >= v9 ) goto LABEL_14; } } } (*(void (__stdcall **)(int *, int))(*(_DWORD *)v16[140] + 120))(&v15, v7); if ( v15 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } sub_8F9E00(&unk_BA6B10, v14); } return sub_940360(v1); } //----- (005187F0) -------------------------------------------------------- char *__thiscall sub_5187F0(int this, char a2) { char *result; // eax __int16 *v3; // ebx char *v4; // esi int v5; // edi int v6; // esi int v7; // esi int v8; // ecx int v9; // [esp+0h] [ebp-4h] char *v10; // [esp+Ch] [ebp+8h] *(_BYTE *)(this + 364) = a2; result = *(char **)(this + 372); v9 = this; if ( result ) { while ( 1 ) { v3 = (__int16 *)*((_DWORD *)result + 2); v10 = *(char **)result; if ( v3 ) { result = sub_664AB0(dword_AD8C90, v3[156]); v4 = result; if ( result ) { (*(void (__thiscall **)(char *))(*(_DWORD *)result + 196))(result); v5 = *((unsigned __int16 *)v4 + 471); v6 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v8 = *(_DWORD *)(v6 + 196); if ( *(_DWORD *)(v8 + 4 * v5) ) v7 = *(_DWORD *)(v8 + 4 * v5); else v7 = 0; } else { v7 = 0; } } else { v7 = 0; } result = (char *)(*(int (__thiscall **)(__int16 *))(*(_DWORD *)v3 + 260))(v3); if ( (_BYTE)result && *(_DWORD *)(v7 + 170) == 13 ) { if ( *(_BYTE *)(v9 + 364) ) result = (char *)(*(int (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); } } } if ( !v10 ) break; result = v10; } } return result; } // ACDA74: using guessed type int dword_ACDA74; //----- (005188E0) -------------------------------------------------------- char __thiscall sub_5188E0(_DWORD **this, unsigned int a2) { unsigned int v2; // esi signed int v3; // ebx _DWORD **v4; // edi _DWORD *v5; // esi _WORD *v6; // edi _DWORD *v7; // eax _DWORD *v8; // edi _WORD *v9; // esi unsigned __int16 v10; // ax unsigned __int16 v11; // ax _DWORD *v12; // edi _WORD *v13; // esi unsigned __int16 v14; // ax unsigned __int16 v15; // ax _DWORD **v17; // [esp+Ch] [ebp-14h] unsigned int v18; // [esp+10h] [ebp-10h] unsigned int v19; // [esp+14h] [ebp-Ch] int v20; // [esp+18h] [ebp-8h] unsigned int v21; // [esp+1Ch] [ebp-4h] v2 = 0; v3 = 0xFFFF; v4 = this; v17 = this; v21 = 0xFFFF; v20 = 0xFFFF; v18 = 0; if ( a2 ) { do { sub_464B60(v4[335], v2, &v21); if ( v21 > 0xFFFF ) ++v18; ++v2; } while ( v2 < a2 ); } v5 = v4[201]; v19 = 0; if ( !v5 ) goto LABEL_15; while ( 1 ) { v6 = (_WORD *)v5[2]; v5 = (_DWORD *)*v5; if ( v6 ) break; LABEL_11: if ( !v5 ) goto LABEL_14; } if ( v3 != (unsigned __int16)sub_569220(v6) ) ++v19; if ( v19 <= v18 ) { v3 = (unsigned __int16)sub_569220(v6); goto LABEL_11; } v21 = (unsigned __int16)sub_569220(v6); LABEL_14: v4 = v17; LABEL_15: LOBYTE(v7) = sub_464B60(v4[335], a2, &v20); if ( v20 != 0xFFFF ) { v8 = v4[367]; while ( v8 ) { v9 = (_WORD *)v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) { v10 = sub_5692E0(v9); if ( v10 != v20 || (v11 = sub_5692D0(v9), v11 != v21) ) (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v9 + 256))(v9, 0); else (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v9 + 256))(v9, 1); } } v12 = v17[201]; while ( v12 ) { v13 = (_WORD *)v12[2]; v12 = (_DWORD *)*v12; if ( v13 ) { v14 = sub_569230(v13); if ( v14 != v20 || (v15 = sub_569220(v13), v15 != v21) ) (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v13 + 256))(v13, 0); else (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v13 + 256))(v13, 1); } } v7 = v17[335]; *((_BYTE *)v7 + 348) = 0; } return (char)v7; } //----- (00518A50) -------------------------------------------------------- void __thiscall sub_518A50(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // ebx _DWORD *v4; // edi _WORD *v5; // esi _DWORD *v6; // edi _WORD *v7; // esi v3 = this; v4 = (_DWORD *)this[367]; while ( v4 ) { v5 = (_WORD *)v4[2]; v4 = (_DWORD *)*v4; if ( sub_5692E0(v5) != a3 || sub_5692D0(v5) != a2 ) (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v5 + 256))(v5, 0); else (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v5 + 256))(v5, 1); } v6 = (_DWORD *)v3[201]; while ( v6 ) { v7 = (_WORD *)v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { if ( sub_569230(v7) != a3 || sub_569220(v7) != a2 ) (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v7 + 256))(v7, 0); else (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v7 + 256))(v7, 1); } } } //----- (00518B40) -------------------------------------------------------- BOOL __thiscall sub_518B40(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax char v4; // [esp+4h] [ebp-Ch] v1 = this; v2 = sub_439D70(byte_ADB468, &v4); return v1[343] == *v2 && v1[344] == v2[1] && v1[345] == v2[2]; } //----- (00518BA0) -------------------------------------------------------- int __thiscall sub_518BA0(float *this) { int result; // eax float *v2; // esi int v3; // edi int v4; // eax int v5; // ebx double v6; // st7 int v7; // eax int v8; // ecx float v9; // ecx float v10; // [esp+Ch] [ebp-28h] float v11; // [esp+10h] [ebp-24h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float *v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] float v16; // [esp+2Ch] [ebp-8h] float v17; // [esp+30h] [ebp-4h] result = *((_DWORD *)this + 88); v14 = this; if ( result ) { while ( 1 ) { v2 = *(float **)(result + 8); result = *(_DWORD *)result; v15 = result; if ( v2 ) { result = sub_5690A0(v2); v3 = result; if ( !result ) return result; if ( !*(_BYTE *)(result + 64) ) goto LABEL_17; v4 = sub_664630( dword_AD8C90, *(_DWORD *)result, *(_DWORD *)(result + 4), *(_DWORD *)(result + 8), *(_DWORD *)(result + 12), *(_DWORD *)(result + 16)); v5 = v4; if ( v4 && sub_6510B0(v4) ) { (*(void (__thiscall **)(int, float *))(*(_DWORD *)v5 + 200))(v5, &v10); v17 = v10; v6 = v11; } else { v17 = *(float *)(v3 + 56); v6 = *(float *)(v3 + 60); } v16 = v6; v17 = (0.02 * v17 / v14[361] - v14[143]) * v14[145]; v16 = (512.0 - 0.02 * v16 / v14[361] - v14[144]) * v14[146]; if ( (unsigned __int8)sub_518B40(v14) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); v7 = *((_DWORD *)v2 + 22); v8 = *((_DWORD *)v2 + 23); v12 = v17; result = *((_DWORD *)v2 + 24); v13 = v16; v9 = v16; v2[22] = v17; v2[23] = v9; *((_DWORD *)v2 + 24) = result; } else { LABEL_17: result = (*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } if ( !v15 ) break; result = v15; } } return result; } //----- (00518D00) -------------------------------------------------------- char __thiscall sub_518D00(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v4; // eax v2 = (_DWORD *)this[88]; if ( !v2 ) return 0; while ( 1 ) { v3 = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = (_DWORD *)sub_5690A0(v3); if ( v4 ) { if ( *v4 == *a2 && v4[1] == a2[1] && v4[2] == a2[2] && v4[3] == a2[3] && v4[4] == a2[4] ) break; } } if ( !v2 ) return 0; } return 1; } //----- (00518D70) -------------------------------------------------------- void __thiscall sub_518D70(float *this) { float *v1; // edi _DWORD *v2; // ebx int v3; // esi unsigned int *v4; // eax float v5; // ST20_4 float v6; // ST1C_4 int v7; // eax int v8; // ecx int v9; // eax v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 575); while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = (unsigned int *)sub_569330((char *)v3); if ( !v4 ) return; v5 = ((double)*v4 * 0.02 / v1[361] - v1[143]) * v1[145]; v6 = (512.0 - 0.02 * (double)v4[1] / v1[361] - v1[144]) * v1[146]; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, 1); v7 = *(_DWORD *)(v3 + 88); v8 = *(_DWORD *)(v3 + 92); v9 = *(_DWORD *)(v3 + 96); *(float *)(v3 + 88) = v5; *(float *)(v3 + 92) = v6; *(_DWORD *)(v3 + 96) = v9; } } } //----- (00518E60) -------------------------------------------------------- int __usercall sub_518E60@(int a1@, int a2@) { int v2; // esi _DWORD *v3; // ecx int v4; // ST18_4 double v5; // st7 float v6; // ST18_4 int result; // eax unsigned int v8; // ebx unsigned int v9; // edi double v10; // st7 float v11; // ST18_4 float v12; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = *(_DWORD **)(a1 + 2316); v4 = v3[75]; v12 = (double)v4 / 100.0; sub_4637A0(v3, v4); (*(void (__stdcall **)(float, int))(**(_DWORD **)(v2 + 2320) + 276))(COERCE_FLOAT(LODWORD(v12)), a2); if ( v12 >= 0.8999999761581421 ) v5 = 1.0; else v5 = 0.0; v6 = v5; result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 276))(v2, LODWORD(v6)); v8 = 0; v9 = (*(_DWORD *)(v2 + 2328) - *(_DWORD *)(v2 + 2324)) >> 2; if ( v9 ) { do { result = *(_DWORD *)(v2 + 2324); if ( *(_DWORD *)(result + 4 * v8) ) { v10 = v12; if ( v12 < 0.5 ) v10 = 0.60000002; v11 = v10; result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(result + 4 * v8) + 276))(LODWORD(v11)); } ++v8; } while ( v8 < v9 ); } flt_B920A1 = v12; return result; } // 518E60: could not find valid save-restore pair for edi // B920A1: using guessed type float flt_B920A1; //----- (00518F50) -------------------------------------------------------- int __userpurge sub_518F50@(int a1@, int a2@, float a3) { int v3; // esi v3 = a1; sub_4637A0(*(_DWORD **)(a1 + 2316), (signed int)(a3 * 100.0)); return sub_518E60(v3, a2); } //----- (00518F80) -------------------------------------------------------- char __thiscall sub_518F80(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi void (__thiscall *v4)(_DWORD *, int *, int *); // edx int v5; // eax int v6; // eax double v7; // st7 char v8; // bl char result; // al int v10; // [esp+4h] [ebp-4h] v3 = this; v4 = *(void (__thiscall **)(_DWORD *, int *, int *))(*this + 224); v10 = a3; a3 = a2; v4(this, &a3, &v10); if ( a3 < 0 ) goto LABEL_12; v5 = (*(int (__thiscall **)(_DWORD *))(*v3 + 144))(v3); if ( a3 >= v5 ) goto LABEL_12; if ( v10 < 0 ) goto LABEL_12; v6 = (*(int (__thiscall **)(_DWORD *))(*v3 + 148))(v3); if ( v10 >= v6 ) goto LABEL_12; v7 = *(float *)(v3[72] + 84); v8 = 1; HIBYTE(a3) = 1; if ( v7 >= 0.8999999761581421 ) v8 = 0; (*(void (__thiscall **)(_DWORD *, bool))(*v3 + 240))(v3, v8 == 0); if ( v8 ) LABEL_12: result = 0; else result = HIBYTE(a3); return result; } //----- (00519060) -------------------------------------------------------- int __thiscall sub_519060(_DWORD **this, int a2, int a3, float a4, float a5) { _DWORD **v5; // esi unsigned int v6; // edi unsigned int v7; // edi int v8; // eax v5 = this; sub_402E40(this, a2, a3, SLODWORD(a4), SLODWORD(a5)); v6 = (unsigned int)(*(int (**)(void))(*v5[341] + 144))() >> 1; v7 = ((unsigned int)(*(int (**)(void))(*v5[339] + 144))() >> 1) + v6; v8 = ((int (__thiscall *)(_DWORD **))(*v5)[41])(v5); return ((int (__thiscall *)(_DWORD **, unsigned int))(*v5)[43])(v5, v7 + v8); } //----- (005190D0) -------------------------------------------------------- void __thiscall sub_5190D0(int this, int *a2) { int v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi void (__thiscall ***v4)(_DWORD, signed int); // edi _DWORD *v5; // edi int v6; // edx int v7; // eax int v8; // edx int v9; // eax void **v10; // eax int v11; // eax _DWORD *v12; // eax _DWORD *v13; // ecx int v14; // [esp+Ch] [ebp-20h] int v15; // [esp+10h] [ebp-1Ch] int v16; // [esp+14h] [ebp-18h] int v17; // [esp+18h] [ebp-14h] int v18; // [esp+1Ch] [ebp-10h] int v19; // [esp+20h] [ebp-Ch] char v20; // [esp+24h] [ebp-8h] v2 = this; sub_455710(*(void **)(this + 560), &v14, *(_DWORD *)(this + 344)); if ( v14 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } sub_455710(*(void **)(v2 + 560), &v14, *(_DWORD *)(v2 + 532)); v4 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v4 ) (**v4)(v4, 1); v5 = (_DWORD *)sub_56D720(0, 0, *(_DWORD *)(v2 + 408), *(_DWORD *)(v2 + 560)); if ( v5 ) { v6 = *a2; v7 = a2[1]; v17 = a2[2]; v15 = v6; v8 = a2[3]; v16 = v7; v9 = a2[4]; v18 = v8; v19 = v9; v20 = 0; v10 = (void **)sub_570000(v5); sub_8F2EA0(v10, (const char *)&v15); v14 = dword_AD01E8; v11 = sub_570000(v5); *(_DWORD *)(v11 + 272) = v14; sub_569070(v5, (int)a2); v12 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v2 + 384) + 4))(v2 + 384); v12[2] = v5; *v12 = 0; v12[1] = *(_DWORD *)(v2 + 392); v13 = *(_DWORD **)(v2 + 392); if ( v13 ) *v13 = v12; else *(_DWORD *)(v2 + 388) = v12; ++*(_DWORD *)(v2 + 396); *(_DWORD *)(v2 + 392) = v12; } sub_442AC0(*(_DWORD **)(v2 + 560), *(_DWORD *)(v2 + 344)); sub_442AC0(*(_DWORD **)(v2 + 560), *(_DWORD *)(v2 + 532)); } // AD01E8: using guessed type int dword_AD01E8; //----- (00519250) -------------------------------------------------------- void __thiscall sub_519250(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *v4; // edi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi _DWORD *v7; // [esp+8h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[97]; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v7 = v3; v3 = (_DWORD *)*v3; if ( v4 ) { v5 = sub_569080(v4); if ( v5 == a2 ) break; } if ( !v3 ) return; } sub_455710((void *)v2[140], &a2, (int)v4); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } sub_403620(v2 + 96, &v7); } } //----- (005192E0) -------------------------------------------------------- void __thiscall sub_5192E0(_DWORD *this) { int v1; // ebx int *v2; // eax int v3; // ecx int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // [esp+4h] [ebp-4h] v1 = (int)this; while ( *(_DWORD *)(v1 + 396) ) { v2 = *(int **)(v1 + 388); v3 = *v2; *(_DWORD *)(v1 + 388) = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else *(_DWORD *)(v1 + 392) = 0; v4 = v2[2]; (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 384) + 8))(v1 + 384, v2); --*(_DWORD *)(v1 + 396); if ( v4 ) { sub_455710(*(void **)(v1 + 560), &v6, v4); if ( v6 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } } //----- (00519390) -------------------------------------------------------- int __thiscall sub_519390(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // edi _DWORD *v5; // esi _DWORD *v6; // ST04_4 int result; // eax int v8; // [esp+Ch] [ebp-4h] v1 = this; v2 = (_DWORD *)this[93]; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { sub_455710((void *)v1[140], &v8, v3); if ( v8 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } } v5 = (_DWORD *)v1[93]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[92] + 8))(v1 + 92, v6); } result = 0; v1[95] = 0; v1[93] = 0; v1[94] = 0; return result; } //----- (00519430) -------------------------------------------------------- char *__thiscall sub_519430(float *this) { float *v1; // ebx char *result; // eax int v3; // esi char *v4; // edi int v5; // eax int v6; // ST18_4 int v7; // ST1C_4 int v8; // ST20_4 float v9; // ST1C_4 double v10; // st7 float v11; // ST20_4 float v12; // [esp+4h] [ebp-1Ch] float v13; // [esp+8h] [ebp-18h] char *v14; // [esp+1Ch] [ebp-4h] v1 = this; result = (char *)*((_DWORD *)this + 93); if ( result ) { while ( 1 ) { v3 = *((_DWORD *)result + 2); result = *(char **)result; v14 = result; if ( v3 ) { result = sub_664AB0(dword_AD8C90, *(_WORD *)(v3 + 312)); v4 = result; if ( result ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACDA74 + 16))(*((unsigned __int16 *)result + 471)); v5 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); v12 = *(float *)v5; v13 = *(float *)(v5 + 4); v6 = *(_DWORD *)(v5 + 8); if ( (unsigned __int8)sub_518B40(v1) ) { v7 = *(_DWORD *)(v3 + 88); result = *(char **)(v3 + 96); v8 = *(_DWORD *)(v3 + 92); v9 = (0.02 * v12 / v1[361] - v1[143]) * v1[145]; v10 = (512.0 - 0.02 * v13 / v1[361] - v1[144]) * v1[146]; *(float *)(v3 + 88) = v9; v11 = v10; *(float *)(v3 + 92) = v11; *(_DWORD *)(v3 + 96) = result; } else { result = (char *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); } } } if ( !v14 ) break; result = v14; } } return result; } // ACDA74: using guessed type int dword_ACDA74; //----- (00519540) -------------------------------------------------------- int __thiscall sub_519540(float *this) { int result; // eax float *v2; // esi int v3; // edi int v4; // eax int v5; // ebx double v6; // st7 int v7; // eax int v8; // ecx float v9; // ecx float v10; // [esp+Ch] [ebp-28h] float v11; // [esp+10h] [ebp-24h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float *v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] float v16; // [esp+2Ch] [ebp-8h] float v17; // [esp+30h] [ebp-4h] result = *((_DWORD *)this + 97); v14 = this; if ( result ) { while ( 1 ) { v2 = *(float **)(result + 8); result = *(_DWORD *)result; v15 = result; if ( v2 ) { result = sub_569080(v2); v3 = result; if ( !result ) return result; if ( !*(_BYTE *)(result + 64) ) goto LABEL_17; v4 = sub_664630( dword_AD8C90, *(_DWORD *)result, *(_DWORD *)(result + 4), *(_DWORD *)(result + 8), *(_DWORD *)(result + 12), *(_DWORD *)(result + 16)); v5 = v4; if ( v4 && sub_6510B0(v4) ) { (*(void (__thiscall **)(int, float *))(*(_DWORD *)v5 + 200))(v5, &v10); v17 = v10; v6 = v11; } else { v17 = *(float *)(v3 + 56); v6 = *(float *)(v3 + 60); } v16 = v6; v17 = (0.02 * v17 / v14[361] - v14[143]) * v14[145]; v16 = (512.0 - 0.02 * v16 / v14[361] - v14[144]) * v14[146]; if ( (unsigned __int8)sub_518B40(v14) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); v7 = *((_DWORD *)v2 + 22); v8 = *((_DWORD *)v2 + 23); v12 = v17; result = *((_DWORD *)v2 + 24); v13 = v16; v9 = v16; v2[22] = v17; v2[23] = v9; *((_DWORD *)v2 + 24) = result; } else { LABEL_17: result = (*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } if ( !v15 ) break; result = v15; } } return result; } //----- (005196A0) -------------------------------------------------------- char __thiscall sub_5196A0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char result; // al _DWORD *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = this + 585; v7 = 0; result = sub_8C4C90(this + 585, a2, &v7); v5 = (_DWORD *)v7; if ( v7 ) { sub_455710((void *)v2[140], &v7, v7); if ( v7 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } sub_8F9E00(&unk_BA6B10, v5); result = sub_916F40(v3, a2); } return result; } //----- (00519720) -------------------------------------------------------- char __thiscall sub_519720(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx unsigned int v5; // eax _DWORD *v6; // esi int v7; // ebx int v8; // eax unsigned int v9; // edx _DWORD *v10; // ecx _DWORD *v12; // [esp+14h] [ebp-8h] float *v13; // [esp+18h] [ebp-4h] v1 = this + 585; v12 = this; v2 = this[586]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD *)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = (_DWORD *)v5; if ( v5 ) { do { v5 = v6[2]; v7 = v6[1]; v6 = (_DWORD *)*v6; v13 = (float *)v5; if ( !v6 ) { v8 = (*(int (__thiscall **)(_DWORD *, int))(*v1 + 4))(v1, v7); v9 = v1[1]; v5 = v8 + 1; if ( v5 >= v9 ) { LABEL_12: v6 = 0; } else { v10 = (_DWORD *)(v1[2] + 4 * v5); while ( 1 ) { v6 = (_DWORD *)*v10; if ( *v10 ) break; ++v5; ++v10; if ( v5 >= v9 ) goto LABEL_12; } } } if ( v13 ) { LOBYTE(v5) = sub_569350(v13, flt_ACCFCC); if ( (_BYTE)v5 ) LOBYTE(v5) = sub_5196A0(v12, v7); } } while ( v6 ); } return v5; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005197D0) -------------------------------------------------------- unsigned int __usercall sub_5197D0@(int a1@, signed int a2@) { _DWORD *v2; // ebx unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx unsigned int result; // eax unsigned int v7; // esi float *v8; // edi int v9; // eax unsigned int v10; // edx unsigned int *v11; // ecx int v12; // eax int v13; // ST18_4 int v14; // ecx int v15; // edx signed int v16; // [esp-4h] [ebp-30h] float v17; // [esp+20h] [ebp-Ch] int v18; // [esp+24h] [ebp-8h] __int16 v19; // [esp+28h] [ebp-4h] float v20; // [esp+28h] [ebp-4h] v2 = (_DWORD *)(a1 + 2356); v18 = a1; v3 = *(_DWORD *)(a1 + 2360); v4 = 0; if ( v3 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } result = *(_DWORD *)(v2[2] + 4 * v4); } else { LABEL_5: result = 0; } v7 = result; if ( result ) { v16 = a2; do { result = *(unsigned __int16 *)(v7 + 4); v8 = *(float **)(v7 + 8); v7 = *(_DWORD *)v7; v19 = result; if ( !v7 ) { v9 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v2 + 4))(v2, result); v10 = v2[1]; result = v9 + 1; if ( result >= v10 ) { LABEL_13: v7 = 0; } else { v11 = (unsigned int *)(v2[2] + 4 * result); while ( 1 ) { v7 = *v11; if ( *v11 ) break; ++result; ++v11; if ( result >= v10 ) goto LABEL_13; } } } if ( v8 ) { result = (unsigned int)sub_664AB0(dword_AD8C90, v19); if ( result ) { v12 = (*(int (__thiscall **)(unsigned int, signed int))(*(_DWORD *)result + 196))(result, v16); v13 = *(_DWORD *)(v12 + 8); v20 = (0.02 * *(float *)v12 / *(float *)(v18 + 1444) - *(float *)(v18 + 572)) * *(float *)(v18 + 580); v17 = (512.0 - 0.02 * *(float *)(v12 + 4) / *(float *)(v18 + 1444) - *(float *)(v18 + 576)) * *(float *)(v18 + 584); if ( (unsigned __int8)sub_518B40((_DWORD *)v18) ) { v16 = 1; (*(void (__thiscall **)(float *))(*(_DWORD *)v8 + 256))(v8); v14 = *((_DWORD *)v8 + 22); v15 = *((_DWORD *)v8 + 23); result = *((_DWORD *)v8 + 24); v8[22] = v20; v8[23] = v17; *((_DWORD *)v8 + 24) = result; } else { v16 = 0; result = (*(int (__thiscall **)(float *))(*(_DWORD *)v8 + 256))(v8); } } } } while ( v7 ); } return result; } // 5197D0: could not find valid save-restore pair for edi //----- (00519940) -------------------------------------------------------- char __thiscall sub_519940(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char result; // al _DWORD *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = this + 589; v7 = 0; result = sub_521BB0(this + 589, a2, &v7); v5 = (_DWORD *)v7; if ( v7 ) { sub_455710((void *)v2[140], &v7, v7); if ( v7 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } sub_8F9E00(&unk_BA6B10, v5); result = sub_521AF0(v3, a2); } return result; } //----- (005199C0) -------------------------------------------------------- int __thiscall sub_5199C0(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx int **v5; // eax int **v6; // esi int v7; // edi int v8; // eax unsigned int v9; // edx unsigned int v10; // eax int ***v11; // ecx void (__thiscall ***v12)(_DWORD, signed int); // edi int *v14; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] _DWORD *v16; // [esp+10h] [ebp-4h] v1 = this + 589; v16 = this; v2 = this[590]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(int ***)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = (int)v6[2]; v14 = v6[2]; if ( *v6 ) { v6 = (int **)*v6; } else { v8 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 4))(v1, *((unsigned __int16 *)v6 + 2)); v9 = v1[1]; v10 = v8 + 1; if ( v10 >= v9 ) { LABEL_14: v6 = 0; } else { v11 = (int ***)(v1[2] + 4 * v10); while ( 1 ) { v6 = *v11; if ( *v11 ) break; ++v10; ++v11; if ( v10 >= v9 ) goto LABEL_14; } } } sub_455710((void *)v16[140], &v15, v7); if ( v15 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } sub_8F9E00(&unk_BA6B10, v14); } return sub_940360(v1); } //----- (00519AA0) -------------------------------------------------------- char __thiscall sub_519AA0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax int v3; // edi char result; // al char v5; // [esp+10h] [ebp-Ch] v1 = this; v2 = sub_439D70(byte_ADB468, &v5); v3 = sub_49F8D0(v2); result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[147] + 236))(xRight, dword_AC2F78, 0.5, 0.5); if ( *(_BYTE *)(v3 + 131) ) result = sub_8F85E0(&unk_BA6B10, v1[147]); return result; } //----- (00519B10) -------------------------------------------------------- void __thiscall sub_519B10(_DWORD *this) { int v1; // ebx int *v2; // eax int v3; // ecx int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int *v6; // eax int v7; // ecx int v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi int *v10; // eax int v11; // ecx int v12; // edi void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // [esp+Ch] [ebp-4h] v1 = (int)this; while ( *(_DWORD *)(v1 + 828) ) { v2 = *(int **)(v1 + 820); v3 = *v2; *(_DWORD *)(v1 + 820) = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else *(_DWORD *)(v1 + 824) = 0; v4 = v2[2]; (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 816) + 8))(v1 + 816, v2); --*(_DWORD *)(v1 + 828); if ( v4 ) { sub_455710(*(void **)(v1 + 560), &v14, v4); if ( v14 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } while ( *(_DWORD *)(v1 + 812) ) { v6 = *(int **)(v1 + 804); v7 = *v6; *(_DWORD *)(v1 + 804) = *v6; if ( v7 ) *(_DWORD *)(v7 + 4) = 0; else *(_DWORD *)(v1 + 808) = 0; v8 = v6[2]; (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 800) + 8))(v1 + 800, v6); --*(_DWORD *)(v1 + 812); if ( v8 ) { sub_455710(*(void **)(v1 + 560), &v14, v8); if ( v14 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } } } while ( *(_DWORD *)(v1 + 1476) ) { v10 = *(int **)(v1 + 1468); v11 = *v10; *(_DWORD *)(v1 + 1468) = *v10; if ( v11 ) *(_DWORD *)(v11 + 4) = 0; else *(_DWORD *)(v1 + 1472) = 0; v12 = v10[2]; (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 1464) + 8))(v1 + 1464, v10); --*(_DWORD *)(v1 + 1476); if ( v12 ) { sub_455710(*(void **)(v1 + 560), &v14, v12); if ( v14 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } } } } //----- (00519CE0) -------------------------------------------------------- unsigned int __thiscall sub_519CE0(_DWORD *this) { _DWORD *v1; // esi unsigned int result; // eax unsigned int v3; // ebx unsigned int v4; // edi int v5; // eax unsigned __int16 *v6; // ebx int v7; // edi signed int v8; // [esp+4h] [ebp-8h] unsigned int v9; // [esp+8h] [ebp-4h] v1 = this; result = sub_49F530(); if ( result ) { v3 = 1; v8 = 1; do { result = sub_49F530(); if ( v3 > result ) break; v4 = 0; v9 = 0; if ( sub_49F530() ) { do { v5 = sub_7474E0((_DWORD *)(dword_ACDA4C + 4), v4); if ( v3 == *(unsigned __int8 *)(v5 + 211) ) { v6 = (unsigned __int16 *)sub_4316B0((_DWORD *)(v5 + 2)); v7 = ((int (__thiscall *)(_DWORD, unsigned __int16 *))loc_466CA0)(v1[333], v6 + 7); sub_4661A0((_DWORD *)v1[333], v7, 0, v6 + 7); sub_464BE0((_DWORD *)v1[333], v7, 255, 255, 255); sub_464B20((_DWORD *)v1[333], v7, *v6); ++v1[354]; v3 = v8; v4 = v9; } v9 = ++v4; } while ( v4 < sub_49F530() ); } v8 = ++v3; result = sub_49F530(); } while ( v3 - 1 < result ); } return result; } // ACDA4C: using guessed type int dword_ACDA4C; //----- (00519DD0) -------------------------------------------------------- void __thiscall sub_519DD0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[334]; if ( v2 ) { v3 = v1[333]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[333] + 344) = *(_DWORD *)(v1[334] + 300); sub_465130((_DWORD *)v1[333]); } } } //----- (00519E20) -------------------------------------------------------- int __thiscall sub_519E20(char *this) { char *v1; // esi int result; // eax _DWORD *v3; // ecx int v4; // edi int v5; // ebx int v6; // eax _DWORD *v7; // ecx int v8; // edi unsigned int v9; // [esp+4h] [ebp-Ch] int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v1 = this; result = sub_518110(this); if ( *((_DWORD *)v1 + 203) ) { v3 = (_DWORD *)*((_DWORD *)v1 + 335); result = v3[75] - v3[74]; v4 = 0; v10 = 0; if ( (signed int)(result & 0xFFFFFFFC) > 0 ) { do { v5 = sub_517CC0(v3, v4, 0); v6 = sub_517D50(*((_DWORD **)v1 + 335), v4, 0); v7 = (_DWORD *)*((_DWORD *)v1 + 335); v11 = v6; if ( sub_464B60(v7, v4 + v7[86], &v9) ) { result = v9; if ( v9 >= 0xFFFF ) { v8 = v9 - 0xFFFF; if ( v9 - 0xFFFF >= *((_DWORD *)v1 + 203) ) return result; (*(void (__stdcall **)(signed int))(**(_DWORD **)&v1[4 * v8 + 996] + 256))(1); (*(void (__stdcall **)(int))(**(_DWORD **)&v1[4 * v8 + 996] + 172))(v5); (*(void (__stdcall **)(int))(**(_DWORD **)&v1[4 * v8 + 996] + 176))(v11 - 5); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v1[4 * v8 + 1156] + 256))(1); (*(void (__stdcall **)(int))(**(_DWORD **)&v1[4 * v8 + 1156] + 172))(v5 + 6); (*(void (__stdcall **)(int))(**(_DWORD **)&v1[4 * v8 + 1156] + 176))(v11); v4 = v10; } } v3 = (_DWORD *)*((_DWORD *)v1 + 335); ++v4; result = (v3[75] - v3[74]) >> 2; v10 = v4; } while ( v4 < result ); } } return result; } //----- (00519F60) -------------------------------------------------------- char __thiscall sub_519F60(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi _DWORD *v3; // ecx char result; // al int v5; // [esp+8h] [ebp-4h] v1 = this; v2 = 0; if ( this[354] ) { do { sub_464B60((_DWORD *)v1[333], v2, &v5); v3 = (_DWORD *)v1[333]; if ( v5 == *((unsigned __int16 *)v1 + 706) ) { sub_4637A0((_DWORD *)v1[334], v2 - ((v3[75] - v3[74]) >> 2) / 2); result = sub_464BE0((_DWORD *)v1[333], v2, 255, 255, 0); } else { result = sub_464BE0(v3, v2, 255, 255, 255); } ++v2; } while ( v2 < v1[354] ); } return result; } //----- (00519FF0) -------------------------------------------------------- void __thiscall sub_519FF0(_DWORD *this, int *a2) { _DWORD *v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi void (__thiscall ***v4)(_DWORD, signed int); // edi _DWORD *v5; // edi int v6; // edx int v7; // eax int v8; // edx int v9; // eax void **v10; // eax int v11; // eax _DWORD *v12; // eax _DWORD *v13; // ecx int v14; // [esp+8h] [ebp-20h] int v15; // [esp+Ch] [ebp-1Ch] int v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] char v20; // [esp+20h] [ebp-8h] v2 = this; if ( !sub_518D00(this, a2) ) { sub_455710((void *)v2[140], &v14, v2[86]); if ( v14 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } sub_455710((void *)v2[140], &v14, v2[133]); v4 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v4 ) (**v4)(v4, 1); v5 = (_DWORD *)sub_56D880(0, 0, v2[102], v2[140]); if ( v5 ) { v6 = *a2; v7 = a2[1]; v17 = a2[2]; v15 = v6; v8 = a2[3]; v16 = v7; v9 = a2[4]; v18 = v8; v19 = v9; v20 = 0; v10 = (void **)sub_570000(v5); sub_8F2EA0(v10, (const char *)&v15); v14 = dword_AD01E8; v11 = sub_570000(v5); *(_DWORD *)(v11 + 272) = v14; sub_569090(v5, (int)a2); v12 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[87] + 4))(v2 + 87); v12[2] = v5; *v12 = 0; v12[1] = v2[89]; v13 = (_DWORD *)v2[89]; if ( v13 ) *v13 = v12; else v2[88] = v12; ++v2[90]; v2[89] = v12; } sub_442AC0((_DWORD *)v2[140], v2[86]); sub_442AC0((_DWORD *)v2[140], v2[133]); } } // AD01E8: using guessed type int dword_AD01E8; //----- (0051A180) -------------------------------------------------------- void __thiscall sub_51A180(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx _DWORD *v4; // edi _DWORD *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi _DWORD *v7; // [esp+4h] [ebp-8h] _DWORD *v8; // [esp+8h] [ebp-4h] v2 = (_DWORD *)this[88]; v8 = this; if ( v2 ) { v3 = (_DWORD *)a2; while ( 1 ) { v4 = (_DWORD *)v2[2]; v7 = v2; v2 = (_DWORD *)*v2; if ( v4 ) { v5 = (_DWORD *)sub_5690A0(v4); if ( v5 ) { if ( *v5 == *v3 && v5[1] == v3[1] && v5[2] == v3[2] && v5[3] == v3[3] && v5[4] == v3[4] ) break; } } if ( !v2 ) return; } sub_455710((void *)v8[140], &a2, (int)v4); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } sub_403620(v8 + 87, &v7); } } //----- (0051A240) -------------------------------------------------------- void __thiscall sub_51A240(_DWORD *this) { int v1; // ebx int *v2; // eax int v3; // ecx int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // [esp+4h] [ebp-4h] v1 = (int)this; while ( *(_DWORD *)(v1 + 360) ) { v2 = *(int **)(v1 + 352); v3 = *v2; *(_DWORD *)(v1 + 352) = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else *(_DWORD *)(v1 + 356) = 0; v4 = v2[2]; (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 348) + 8))(v1 + 348, v2); --*(_DWORD *)(v1 + 360); if ( v4 ) { sub_455710(*(void **)(v1 + 560), &v6, v4); if ( v6 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } } //----- (0051A2F0) -------------------------------------------------------- void __thiscall sub_51A2F0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // ST04_4 void *v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v1 = this; v2 = (_DWORD *)this[575]; while ( v2 ) { v3 = v2[2]; v4 = (void *)v1[140]; v6 = v2; v2 = (_DWORD *)*v2; sub_455710(v4, &v7, v3); if ( v7 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } sub_403620(v1 + 574, &v6); } } //----- (0051A360) -------------------------------------------------------- void __thiscall sub_51A360(int this, int *a2) { int v2; // edi void (__thiscall ***v3)(_DWORD, signed int); // esi void (__thiscall ***v4)(_DWORD, signed int); // esi int v5; // esi _DWORD *v6; // eax int v7; // esi _DWORD *v8; // ebx _DWORD *v9; // eax _DWORD *v10; // ecx int v11; // [esp+Ch] [ebp-4h] v2 = this; sub_455710(*(void **)(this + 560), &v11, *(_DWORD *)(this + 344)); if ( v11 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } sub_455710(*(void **)(v2 + 560), &v11, *(_DWORD *)(v2 + 532)); v4 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v4 ) (**v4)(v4, 1); v5 = *((_DWORD *)dword_AD8EBC + 169); if ( *(_DWORD *)(sub_6D38F0() + 80) == v5 ) { v6 = (_DWORD *)sub_56DCA0(0, 0, *(_DWORD *)(v2 + 2288), *(_DWORD *)(v2 + 560)); } else { v7 = *((_DWORD *)dword_AD8EBC + 169); if ( *(_DWORD *)(sub_6D38F0() + 76) != v7 ) goto LABEL_18; v6 = (_DWORD *)sub_56DCA0(0, 0, *(_DWORD *)(v2 + 2292), *(_DWORD *)(v2 + 560)); } v8 = v6; if ( v6 ) { sub_569310(v6, *a2, a2[1]); v9 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v2 + 2296) + 4))(v2 + 2296); v9[2] = v8; *v9 = 0; v9[1] = *(_DWORD *)(v2 + 2304); v10 = *(_DWORD **)(v2 + 2304); if ( v10 ) *v10 = v9; else *(_DWORD *)(v2 + 2300) = v9; ++*(_DWORD *)(v2 + 2308); *(_DWORD *)(v2 + 2304) = v9; } LABEL_18: sub_442AC0(*(_DWORD **)(v2 + 560), *(_DWORD *)(v2 + 344)); sub_442AC0(*(_DWORD **)(v2 + 560), *(_DWORD *)(v2 + 532)); } //----- (0051A4C0) -------------------------------------------------------- int __thiscall sub_51A4C0(_DWORD *this, float a2) { int result; // eax result = this[72]; ++*(_DWORD *)(result + 88); *(float *)(result + 84) = a2; return result; } //----- (0051A4E0) -------------------------------------------------------- int __thiscall sub_51A4E0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax _DWORD *v4; // eax int v5; // edx _DWORD *v6; // eax int v7; // edx int v8; // eax v1 = this; v2 = (float *)operator new(0x60u); if ( v2 ) v3 = sub_85EBC0(v2); else v3 = 0; v1[72] = v3; *((_DWORD *)v3 + 8) = dword_ABD4FC; *((_DWORD *)v3 + 9) = dword_ABD500; *((_DWORD *)v3 + 10) = dword_ABD504; ++*((_DWORD *)v3 + 22); v4 = (_DWORD *)v1[72]; v4[11] = dword_ABD4FC; v4[12] = dword_ABD500; v5 = dword_ABD504; ++v4[22]; v4[13] = v5; v6 = (_DWORD *)v1[72]; v6[17] = dword_ABD4FC; v6[18] = dword_ABD500; v7 = dword_ABD504; ++v6[22]; v6[19] = v7; v8 = v1[72]; ++*(_DWORD *)(v8 + 88); *(float *)(v8 + 84) = 0.5; return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 240))(v1, 0); } // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; //----- (0051A5E0) -------------------------------------------------------- signed int __thiscall sub_51A5E0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx signed int result; // eax v2 = this + 92; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[92] + 4))(this + 92); v3[2] = a2; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) *v4 = v3; else v2[1] = v3; v2[2] = v3; result = 1; ++v2[3]; return result; } //----- (0051A660) -------------------------------------------------------- char __thiscall sub_51A660(void *this, int a2) { _WORD *v2; // edi void *v3; // ebx _DWORD *v4; // eax int v5; // esi void (__thiscall ***v7)(_DWORD, signed int); // edi _DWORD *v8; // [esp+Ch] [ebp-4h] v2 = (_WORD *)a2; v3 = this; if ( !sub_664AB0(dword_AD8C90, *(_WORD *)a2) ) return 0; v4 = (_DWORD *)*((_DWORD *)v3 + 93); if ( !v4 ) return 0; while ( 1 ) { v5 = v4[2]; v8 = v4; v4 = (_DWORD *)*v4; if ( v5 ) { if ( *(_WORD *)(v5 + 312) == *v2 ) break; } if ( !v4 ) return 0; } sub_455710(*((void **)v3 + 140), &a2, v5); if ( a2 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } sub_403620((_DWORD *)v3 + 92, &v8); sub_8F9E00(&unk_BA6B10, (_DWORD *)v5); return 1; } //----- (0051A720) -------------------------------------------------------- char __userpurge sub_51A720@(int a1@, signed int a2@, float a3) { int v3; // esi _DWORD *v4; // eax int v5; // eax _DWORD *v6; // eax int v7; // eax _DWORD *v8; // esi int v9; // ecx char v11; // [esp+14h] [ebp-Ch] v3 = a1; v4 = (_DWORD *)(a1 + 1384); if ( *(_DWORD *)(a1 + 1404) >= 0x10u ) v4 = (_DWORD *)*v4; (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)(a1 + 400) + 472))(v4); sub_5183E0((_DWORD **)v3); sub_5182E0((void *)v3); if ( sub_718A50(&dword_B9E560) ) sub_518BA0((float *)v3); else sub_519540((float *)v3); sub_519430((float *)v3); sub_519720((_DWORD *)v3); sub_5197D0(v3, a2); sub_518D70((float *)v3); if ( sub_8D0630((float *)(v3 + 504), a3) ) { v5 = *(_DWORD *)(v3 + 344); if ( *(_BYTE *)(v5 + 28) & 1 ) { *(_WORD *)(v5 + 28) &= 0xFFFEu; *(_WORD *)(*(_DWORD *)(v3 + 532) + 28) |= 1u; } else { *(_WORD *)(v5 + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v3 + 532) + 28) &= 0xFFFEu; } } v6 = sub_439D70(byte_ADB468, &v11); if ( *(_DWORD *)(v3 + 1372) != *v6 || *(_DWORD *)(v3 + 1376) != v6[1] || *(_DWORD *)(v3 + 1380) != v6[2] ) { *(_WORD *)(*(_DWORD *)(v3 + 344) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v3 + 532) + 28) |= 1u; } v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) { sub_4E3710(*(_DWORD **)(v3 + 1332), *(_DWORD **)(v3 + 1336)); LOBYTE(v7) = sub_4E3710(*(_DWORD **)(v3 + 1340), *(_DWORD **)(v3 + 1344)); } v8 = *(_DWORD **)(v3 + 372); while ( v8 ) { v9 = v8[2]; LOBYTE(v7) = (_BYTE)v8 + 8; v8 = (_DWORD *)*v8; if ( v9 ) { LOBYTE(v7) = (*(int (__stdcall **)(LONG, LONG))(*(_DWORD *)v9 + 332))(pt.x, pt.y); if ( (_BYTE)v7 ) { v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) LOBYTE(v7) = sub_4A8140(v7, 35); } } } return v7; } // B9E560: using guessed type int dword_B9E560; //----- (0051A8C0) -------------------------------------------------------- char *__thiscall sub_51A8C0(void *this, int a2) { __int16 v2; // si void *v3; // edi char *result; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // esi char *v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; result = sub_664AB0(dword_AD8C90, a2); if ( result ) { result = (char *)*((_DWORD *)v3 + 93); if ( result ) { while ( 1 ) { v5 = *((_DWORD *)result + 2); v7 = result; result = *(char **)result; if ( v5 ) { if ( *(_WORD *)(v5 + 312) == v2 ) break; } if ( !result ) return result; } sub_455710(*((void **)v3 + 140), &a2, v5); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = (char *)sub_403620((_DWORD *)v3 + 92, (_DWORD **)&v7); } } return result; } //----- (0051A960) -------------------------------------------------------- void __thiscall sub_51A960(_DWORD *this, __int16 *a2) { _DWORD *v2; // ebx char *v3; // eax char *v4; // esi int v5; // edi int v6; // esi int *v7; // eax int v8; // eax volatile LONG *v9; // esi int v10; // edi void **v11; // eax int v12; // edi char v13; // [esp+8h] [ebp-8h] unsigned __int16 *v14; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_664AB0(dword_AD8C90, *a2); v4 = v3; v14 = (unsigned __int16 *)v3; if ( v3 ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 32))(v3) ) { v5 = *((unsigned __int16 *)v4 + 471); v6 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v5); if ( *v7 ) { v8 = *v7; if ( v8 ) { if ( *(_DWORD *)(v8 + 170) == 13 && !strcmp((const char *)(v8 + 2), "KQ_G_Boss") ) { if ( !sub_518280(v2, (int)a2) ) return; sub_455710((void *)v2[140], (int *)&v13, v2[86]); sub_410C00(&v13); sub_455710((void *)v2[140], (int *)&v13, v2[133]); sub_410C00(&v13); v9 = sub_56D5E0(0, 0, v2[107], (int)(v2 + 117), v2[140], 0); if ( v9 ) { v10 = sub_49F370(v14[471]); if ( v10 && sub_570000(v9) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v14 + 32))() ) { v11 = (void **)sub_570000(v9); sub_8F2EA0(v11, (const char *)(v10 + 34)); v12 = dword_AD01E8; *(_DWORD *)(sub_570000(v9) + 272) = v12; } } *((_WORD *)v9 + 156) = *a2; sub_51A5E0(v2, (int)v9); } } sub_442AC0((_DWORD *)v2[140], v2[86]); sub_442AC0((_DWORD *)v2[140], v2[133]); } } } } } } } // ACDA74: using guessed type int dword_ACDA74; // AD01E8: using guessed type int dword_AD01E8; //----- (0051AB40) -------------------------------------------------------- int *__thiscall sub_51AB40(int this, _WORD *a2) { int v2; // edi int *v3; // esi int *result; // eax int *v5; // esi int v6; // ebx int v7; // eax float *v8; // esi int v9; // eax int v10; // ecx int v11; // eax float v12; // ecx int v13; // ST1C_4 signed int v14; // edx int v15; // esi _DWORD *v16; // ebx int v17; // esi _DWORD *v18; // edi float v19; // [esp+3Ch] [ebp-14h] float v20; // [esp+40h] [ebp-10h] float v21; // [esp+44h] [ebp-Ch] int *v22; // [esp+48h] [ebp-8h] float v23; // [esp+4Ch] [ebp-4h] v2 = this; sub_455710(*(void **)(this + 560), (int *)&v22, *(_DWORD *)(this + 344)); if ( v22 ) { v3 = v22; if ( !InterlockedDecrement(v22 + 1) ) { if ( v3 ) (*(void (__thiscall **)(int *, signed int))*v3)(v3, 1); } } result = sub_455710(*(void **)(v2 + 560), (int *)&v22, *(_DWORD *)(v2 + 532)); v5 = v22; if ( v22 ) { result = (int *)InterlockedDecrement(v22 + 1); if ( !result ) { if ( v5 ) result = (int *)(*(int (__thiscall **)(int *, signed int))*v5)(v5, 1); } } v22 = 0; if ( *a2 > 0u ) { v6 = (int)(a2 + 2); do { v7 = sub_518550((_DWORD *)v2, *(unsigned __int8 *)(v6 + 8)); v8 = (float *)sub_56DDF0(0, 0, v7, *(_DWORD *)(v2 + 560)); if ( v8 ) { v19 = (double)*(unsigned int *)v6; v20 = (double)*(unsigned int *)(v6 + 4); sub_569380(v8, &v19); v23 = (double)*(unsigned int *)(v6 + 9) / 1000.0 + flt_ACCFCC; sub_569340(v8, v23); v23 = (0.02 * v19 / *(float *)(v2 + 1444) - *(float *)(v2 + 572)) * *(float *)(v2 + 580); v21 = (512.0 - 0.02 * v20 / *(float *)(v2 + 1444) - *(float *)(v2 + 576)) * *(float *)(v2 + 584); if ( (unsigned __int8)sub_518B40((_DWORD *)v2) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v8 + 256))(v8, 1); v9 = *((_DWORD *)v8 + 22); v10 = *((_DWORD *)v8 + 23); v11 = *((_DWORD *)v8 + 24); v12 = v21; v8[22] = v23; v8[23] = v12; *((_DWORD *)v8 + 24) = v11; v13 = *(unsigned __int16 *)(v6 - 2); v23 = 0.0; sub_8C4C90((_DWORD *)(v2 + 2340), v13, &v23); if ( v23 != 0.0 ) sub_5196A0((_DWORD *)v2, *(unsigned __int16 *)(v6 - 2)); sub_815C70((_DWORD *)(v2 + 2340), *(unsigned __int16 *)(v6 - 2), (int)v8); } } v14 = (unsigned __int16)*a2; result = (int *)((char *)v22 + 1); v6 += 15; v22 = result; } while ( (signed int)result < v14 ); } v15 = *(_DWORD *)(v2 + 344); v16 = *(_DWORD **)(v2 + 560); if ( v15 ) { result = (int *)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v15 + 4))(*(_DWORD *)(v2 + 344)); if ( result ) { while ( result != (int *)&unk_BA6A8C ) { result = (int *)result[1]; if ( !result ) goto LABEL_23; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v16 + 116))(v16, v15, 0); sub_85C4D0(v16); result = (int *)sub_85BED0((_DWORD **)v16, 0.0, 1); } } LABEL_23: v17 = *(_DWORD *)(v2 + 532); v18 = *(_DWORD **)(v2 + 560); if ( v17 ) { result = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v17 + 4))(v17); if ( result ) { while ( result != (int *)&unk_BA6A8C ) { result = (int *)result[1]; if ( !result ) return result; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v18 + 116))(v18, v17, 0); sub_85C4D0(v18); result = (int *)sub_85BED0((_DWORD **)v18, 0.0, 1); } } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0051ADF0) -------------------------------------------------------- char __thiscall sub_51ADF0(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // eax int v4; // ebx int v6; // [esp+4h] [ebp-4h] v2 = this; v3 = sub_664AB0(dword_AD8C90, a2); if ( v3 ) { LOBYTE(v3) = v3[2952]; if ( (_BYTE)v3 ) { if ( (_BYTE)v3 != 1 ) return (char)v3; v3 = (char *)v2[573]; } else { v3 = (char *)v2[572]; } if ( v3 ) { v3 = (char *)sub_56DF40(0, 0, (int)v3, v2[140]); v4 = (int)v3; if ( v3 ) { v6 = 0; sub_521BB0(v2 + 589, a2, &v6); if ( v6 ) sub_519940(v2, a2); LOBYTE(v3) = sub_521A60(v2 + 589, a2, v4); } } } return (char)v3; } //----- (0051AE90) -------------------------------------------------------- char __thiscall sub_51AE90(_DWORD **this) { _DWORD **v1; // esi char v2; // al _DWORD *v3; // ecx _DWORD *v4; // eax _DWORD *v5; // ecx v1 = this; v2 = (*(int (**)(void))(*this[337] + 260))(); v3 = v1[337]; if ( v2 ) { (*(void (__stdcall **)(_DWORD))(*v3 + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[338] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[333] + 256))(0); LOBYTE(v4) = (*(int (__stdcall **)(_DWORD))(*v1[334] + 256))(0); } else { (*(void (__stdcall **)(signed int))(*v3 + 256))(1); (*(void (__stdcall **)(signed int))(*v1[338] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[333] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[334] + 256))(1); LOBYTE(v4) = sub_519F60(v1); v5 = v1[334]; if ( v5 ) { v4 = v1[333]; if ( v4 ) { sub_4638F0(v5, v4[84]); v1[333][86] = v1[334][75]; LOBYTE(v4) = sub_465130(v1[333]); } } } return (char)v4; } //----- (0051AF90) -------------------------------------------------------- int __thiscall sub_51AF90(char *this, char a2) { char *v2; // esi void (__stdcall *v3)(signed int); // edx int result; // eax v2 = this; v3 = *(void (__stdcall **)(signed int))(**((_DWORD **)this + 339) + 256); if ( a2 == 1 ) { v3(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 340) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 335) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 336) + 256))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 331) + 240))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 331) + 256))(0); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 332) + 240))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 332) + 256))(1); result = sub_519E20(v2); } else { v3(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 340) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 335) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 336) + 256))(0); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 331) + 240))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 331) + 256))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 332) + 240))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 332) + 256))(0); result = sub_518110(v2); } return result; } //----- (0051B0D0) -------------------------------------------------------- void __thiscall sub_51B0D0(char *this) { char *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 336); if ( v2 ) { v3 = *((_DWORD *)v1 + 335); if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(*((_DWORD *)v1 + 335) + 344) = *(_DWORD *)(*((_DWORD *)v1 + 336) + 300); sub_465130(*((_DWORD **)v1 + 335)); sub_519E20(v1); } } } //----- (0051B120) -------------------------------------------------------- char __thiscall sub_51B120(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax _DWORD *v3; // ecx _DWORD *v4; // edx _DWORD *v5; // esi v2 = (_DWORD *)this[93]; v3 = this + 92; if ( v2 ) { while ( 1 ) { v4 = v2 + 2; v5 = v2; v2 = (_DWORD *)*v2; if ( a2 == (_DWORD *)*v4 ) break; if ( !v2 ) goto LABEL_4; } } else { LABEL_4: v5 = 0; } a2 = v5; if ( v5 ) sub_403620(v3, &a2); return 1; } //----- (0051B1D0) -------------------------------------------------------- char __thiscall sub_51B1D0(float *this) { float *v1; // esi int v2; // ecx int v3; // eax v1 = this; sub_8D06A0(this + 126, flt_ACCFCC); v2 = *((_DWORD *)v1 + 333); v1[131] = 0.5; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() == 1 ) sub_51AE90((_DWORD **)v1); if ( *((_DWORD *)v1 + 193) ) { if ( sub_6F3100(35) ) { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 193) + 256))(0); } else if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x3C ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 193) + 256))(1); } } v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A8140(v3, 33); return v3; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0051B270) -------------------------------------------------------- char __thiscall sub_51B270(_DWORD *this, __int16 *a2) { _DWORD *v2; // edi volatile LONG *v3; // eax int v4; // ebx __int16 v5; // dx _DWORD *v6; // eax int v7; // ecx int v8; // eax int v9; // esi const char *v10; // eax const char *v11; // ST14_4 void **v12; // eax int v13; // ebx int v14; // esi int v15; // ebx int v16; // ebx int v17; // esi char *v18; // eax volatile LONG *v19; // esi int v20; // ebx void **v21; // eax int v22; // ebx const char *v24; // [esp-8h] [ebp-18h] char v25; // [esp+8h] [ebp-8h] volatile LONG *v26; // [esp+Ch] [ebp-4h] v2 = this; v3 = (volatile LONG *)sub_664AB0(dword_AD8C90, *a2); v4 = (int)v3; v26 = v3; if ( v3 ) { v5 = *((_WORD *)v3 + 274); v6 = (_DWORD *)v2[93]; if ( v6 ) { while ( 1 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { if ( *(_WORD *)(v7 + 312) == v5 ) break; } if ( !v6 ) goto LABEL_6; } LOBYTE(v3) = sub_518490(v2, v5); if ( (_BYTE)v3 ) { v14 = dword_ACDA48; v15 = *(unsigned __int16 *)(v4 + 942); LOBYTE(v3) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v15); if ( (_BYTE)v3 ) { if ( (unsigned __int16)v15 <= *(_WORD *)(v14 + 200) ) { v3 = (volatile LONG *)(*(_DWORD *)(v14 + 196) + 4 * v15); if ( *v3 ) { LOBYTE(v3) = sub_651680((int)v26); if ( (_BYTE)v3 ) { v3 = (volatile LONG *)sub_4B0D70(*((unsigned __int16 *)v26 + 471)); if ( v3 ) { v3 = *(volatile LONG **)((char *)v3 + 170); switch ( (unsigned int)v3 ) { case 0x10u: v16 = v2[135]; goto LABEL_29; case 0x11u: v16 = v2[136]; goto LABEL_29; case 0x12u: v16 = v2[134]; goto LABEL_29; case 0x13u: v16 = v2[138]; goto LABEL_29; case 0x14u: v16 = v2[137]; goto LABEL_29; case 0x15u: v16 = v2[139]; LABEL_29: v3 = (volatile LONG *)v2[93]; if ( !v3 ) return (char)v3; break; default: return (char)v3; } while ( 1 ) { v17 = *((_DWORD *)v3 + 2); v3 = (volatile LONG *)*v3; if ( v17 ) { if ( *(_WORD *)(v17 + 312) == *a2 ) break; } if ( !v3 ) return (char)v3; } sub_455710((void *)v2[140], (int *)&v25, v17); sub_410C00(&v25); sub_51B120(v2, (_DWORD *)v17); v18 = sub_7549E0("RefCount:%i\n", *(_DWORD *)(v17 + 4)); OutputDebugStringA(v18); v19 = sub_56D5E0(0, 0, v16, (int)(v2 + 117), v2[140], 0); if ( v19 ) { v20 = sub_49F370(*((unsigned __int16 *)v26 + 471)); if ( v20 ) { if ( sub_570000(v19) ) { if ( sub_6516C0(v26) ) v24 = (const char *)sub_651920(v26); else v24 = (const char *)(v20 + 34); v21 = (void **)sub_570000(v19); sub_8F2EA0(v21, v24); v22 = dword_AD01E8; *(_DWORD *)(sub_570000(v19) + 272) = v22; } } } *((_WORD *)v19 + 156) = *a2; LOBYTE(v3) = sub_51A5E0(v2, (int)v19); } } } } } } } else { LABEL_6: LOBYTE(v3) = sub_651680(v4); if ( (_BYTE)v3 ) { v3 = (volatile LONG *)sub_4B0D70(*(unsigned __int16 *)(v4 + 942)); if ( v3 ) { v8 = sub_518550(v2, *(volatile LONG *)((char *)v3 + 170)); v3 = sub_56D5E0(0, 0, v8, (int)(v2 + 117), v2[140], v2[192]); v9 = (int)v3; if ( v3 ) { v26 = (volatile LONG *)sub_49F370(*(unsigned __int16 *)(v4 + 942)); if ( v26 && sub_570000((_DWORD *)v9) ) { if ( sub_6516C0((_BYTE *)v4) ) v10 = (const char *)sub_651920((_BYTE *)v4); else v10 = (char *)v26 + 34; v11 = v10; v12 = (void **)sub_570000((_DWORD *)v9); sub_8F2EA0(v12, v11); v13 = dword_AD01E8; *(_DWORD *)(sub_570000((_DWORD *)v9) + 272) = v13; } *(_WORD *)(v9 + 312) = *a2; LOBYTE(v3) = sub_51A5E0(v2, v9); } } } } } return (char)v3; } // ACDA48: using guessed type int dword_ACDA48; // AD01E8: using guessed type int dword_AD01E8; //----- (0051B5A0) -------------------------------------------------------- int __thiscall sub_51B5A0(float *this) { float *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // eax int *v6; // eax int v7; // edx int v8; // ecx double v9; // st7 int result; // eax float *v11; // edi int v12; // esi double v13; // st7 double v14; // st6 double v15; // st5 double v16; // st4 int v17; // esi double v18; // st4 int v19; // ecx int v20; // edx int v21; // eax float v22; // ecx float *v23; // esi float v24; // edx float v25; // ecx float v26; // eax int v27; // eax double v28; // st7 float *v29; // eax float *v30; // eax void *v31; // ecx float v32; // edx int v33; // eax float v34; // edi void (__thiscall ***v35)(_DWORD, signed int); // edi _DWORD *v36; // edi float *v37; // esi float *v38; // ST24_4 void **v39; // [esp+38h] [ebp-64h] float *v40; // [esp+3Ch] [ebp-60h] _DWORD *v41; // [esp+40h] [ebp-5Ch] int v42; // [esp+44h] [ebp-58h] float v43; // [esp+48h] [ebp-54h] float v44; // [esp+4Ch] [ebp-50h] float v45; // [esp+54h] [ebp-48h] float v46; // [esp+58h] [ebp-44h] float v47; // [esp+60h] [ebp-3Ch] float v48; // [esp+64h] [ebp-38h] float v49; // [esp+68h] [ebp-34h] unsigned int v50; // [esp+6Ch] [ebp-30h] float v51; // [esp+70h] [ebp-2Ch] float v52; // [esp+74h] [ebp-28h] float v53; // [esp+78h] [ebp-24h] float v54; // [esp+7Ch] [ebp-20h] float v55; // [esp+80h] [ebp-1Ch] float v56; // [esp+84h] [ebp-18h] float v57; // [esp+88h] [ebp-14h] float v58; // [esp+8Ch] [ebp-10h] int i; // [esp+98h] [ebp-4h] v1 = this; v42 = 0; v40 = 0; v41 = 0; v39 = &PgTList::`vftable'; v2 = (_DWORD *)*((_DWORD *)this + 367); i = 0; while ( v2 ) { v3 = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { sub_5692F0(v3, &v51); v54 = (0.02 * v51 / v1[361] - v1[143]) * v1[145]; v56 = (512.0 - 0.02 * v52 / v1[361] - v1[144]) * v1[146]; v4 = sub_570000(v3); v50 = (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 144))(v4) >> 1; v55 = (double)v50; v5 = sub_570000(v3); v50 = (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5) >> 1; v57 = (double)v50; v6 = (int *)sub_570000(v3); v7 = v6[23]; v47 = *((float *)v6 + 22); v8 = v6[24]; v54 = v54 - v55; v55 = v56 - v57; v47 = v54; v9 = v55; *((float *)v6 + 22) = v54; v48 = v9; *((float *)v6 + 23) = v48; v6[24] = v8; } } result = *((int *)v1 + 201); v56 = v1[205]; if ( *(float *)&result != 0.0 ) { while ( v56 != 0.0 ) { v11 = *(float **)(result + 8); result = *(int *)result; v54 = *(float *)&result; if ( v11 ) { sub_569250(v11, &v48); v12 = (int)v40; v58 = (0.02 * v48 / v1[361] - v1[143]) * v1[145]; v55 = (512.0 - 0.02 * v49 / v1[361] - v1[144]) * v1[146]; v13 = v55; v14 = v58; if ( v40 ) { v15 = 21.0; do { v16 = *(float *)(v12 + 8); v17 = *(_DWORD *)v12; v57 = v16; v53 = *(float *)(v17 + 8); v12 = *(_DWORD *)v17; v18 = v57; v57 = v57 - v14; v57 = fabs(v57); if ( v57 < v15 ) { v53 = v53 - v13; v53 = fabs(v53); if ( v53 < v15 ) { if ( v14 < v18 ) v57 = v57 * -1.0; v53 = COERCE_FLOAT((*(int (__thiscall **)(float *))(*(_DWORD *)v11 + 144))(v11)); v58 = (double)LODWORD(v53) - v57 + v58; v13 = v55; v15 = 21.0; v14 = v58; } } } while ( v12 ); } v19 = *((_DWORD *)v11 + 22); v20 = *((_DWORD *)v11 + 23); v21 = *((_DWORD *)v11 + 24); v45 = v14; v11[22] = v45; v22 = v56; v46 = v13; v11[23] = v46; *((_DWORD *)v11 + 24) = v21; v23 = *(float **)(LODWORD(v22) + 8); v24 = v23[22]; v53 = v14 - 5.0; v25 = *(float *)LODWORD(v22); v26 = v23[23]; v43 = v24; v57 = v13 - 7.0; v44 = v26; v27 = *((_DWORD *)v23 + 24); v43 = v53; v56 = v25; v28 = v57; v23[22] = v53; v44 = v28; v23[23] = v44; *((_DWORD *)v23 + 24) = v27; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v23 + 240))(v23, 0); (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v23 + 256))(v23, 1); v29 = (float *)((int (__thiscall *)(void ***))v39[1])(&v39); v29[2] = v58; *v29 = 0.0; *((_DWORD *)v29 + 1) = v41; if ( v41 ) *v41 = v29; else v40 = v29; ++v42; v41 = v29; v30 = (float *)((int (__thiscall *)(void ***))v39[1])(&v39); v30[2] = v55; *v30 = 0.0; *((_DWORD *)v30 + 1) = v41; if ( v41 ) *v41 = v30; else v40 = v30; v31 = (void *)*((_DWORD *)v1 + 140); ++v42; v41 = v30; sub_455710(v31, (int *)&v52, (int)v11); if ( v52 != 0.0 ) { v53 = v52; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v52) + 4)) && v53 != 0.0 ) (**(void (__stdcall ***)(signed int))LODWORD(v53))(1); } v32 = *v11; v55 = v1[140]; v33 = (*(int (__thiscall **)(float *))(LODWORD(v32) + 4))(v11); if ( v33 ) { while ( (_UNKNOWN *)v33 != &unk_BA6A8C ) { v33 = *(_DWORD *)(v33 + 4); if ( !v33 ) goto LABEL_34; } (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)LODWORD(v55) + 116))(v11, 0); v34 = v55; sub_85C4D0((_DWORD *)LODWORD(v55)); sub_85BED0((_DWORD **)LODWORD(v34), 0.0, 1); } LABEL_34: sub_455710(*((void **)v1 + 140), (int *)&v50, (int)v23); if ( v50 ) { v35 = (void (__thiscall ***)(_DWORD, signed int))v50; if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v35 ) (**v35)(v35, 1); } } v36 = (_DWORD *)*((_DWORD *)v1 + 140); *(float *)&result = COERCE_FLOAT((*(int (__thiscall **)(float *))(*(_DWORD *)v23 + 4))(v23)); if ( *(float *)&result != 0.0 ) { while ( (_UNKNOWN *)result != &unk_BA6A8C ) { result = *(int *)(result + 4); if ( *(float *)&result == 0.0 ) goto LABEL_43; } (*(void (__thiscall **)(_DWORD *, float *, _DWORD))(*v36 + 116))(v36, v23, 0); sub_85C4D0(v36); *(float *)&result = COERCE_FLOAT(sub_85BED0((_DWORD **)v36, 0.0, 1)); } } LABEL_43: if ( v54 == 0.0 ) break; *(float *)&result = v54; } } v39 = &PgTList::`vftable'; v37 = v40; for ( i = 1; v37; *(float *)&result = COERCE_FLOAT(((int (__thiscall *)(void ***, float *))v39[2])(&v39, v38)) ) { v38 = v37; v37 = *(float **)v37; } return result; } // 9C60C4: using guessed type void *PgTList::`vftable'; //----- (0051BA90) -------------------------------------------------------- char __thiscall sub_51BA90(char *this, unsigned int a2) { char *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx v2 = this; LOBYTE(v3) = sub_5188E0((_DWORD **)this, a2); v4 = (_DWORD *)*((_DWORD *)v2 + 336); if ( v4 ) { v3 = (_DWORD *)*((_DWORD *)v2 + 335); if ( v3 ) { sub_4638F0(v4, v3[84]); *(_DWORD *)(*((_DWORD *)v2 + 335) + 344) = *(_DWORD *)(*((_DWORD *)v2 + 336) + 300); sub_465130(*((_DWORD **)v2 + 335)); LOBYTE(v3) = sub_519E20(v2); } } return (char)v3; } //----- (0051BAF0) -------------------------------------------------------- void __thiscall sub_51BAF0(char *this) { char *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 336); if ( v2 ) { v3 = *((_DWORD *)v1 + 335); if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(*((_DWORD *)v1 + 335) + 344) = *(_DWORD *)(*((_DWORD *)v1 + 336) + 300); sub_465130(*((_DWORD **)v1 + 335)); sub_519E20(v1); } } } //----- (0051BB40) -------------------------------------------------------- char *__thiscall sub_51BB40(char *this) { char *v1; // esi void *v2; // eax size_t v3; // ST18_4 void *v4; // eax size_t v5; // ST08_4 int v6; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &FullMapWin::`vftable'; *((_DWORD *)v1 + 58) = &FullMapWin::`vftable'; *((_DWORD *)v1 + 90) = 0; *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 87) = &PgTList::`vftable'; *((_DWORD *)v1 + 95) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 94) = 0; *((_DWORD *)v1 + 92) = &PgTList::`vftable'; *((_DWORD *)v1 + 99) = 0; *((_DWORD *)v1 + 97) = 0; *((_DWORD *)v1 + 98) = 0; *((_DWORD *)v1 + 96) = &PgTList::`vftable'; *((_DWORD *)v1 + 102) = 0; *((_DWORD *)v1 + 103) = 0; *((_DWORD *)v1 + 104) = 0; *((_DWORD *)v1 + 105) = 0; *((_DWORD *)v1 + 106) = 0; *((_DWORD *)v1 + 107) = 0; *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 110) = 0; *((_DWORD *)v1 + 111) = 0; *((_DWORD *)v1 + 112) = 0; *((_DWORD *)v1 + 113) = 0; *((_DWORD *)v1 + 114) = 0; *((_DWORD *)v1 + 115) = 0; *((_DWORD *)v1 + 116) = 0; *((_DWORD *)v1 + 117) = 0; *((_DWORD *)v1 + 118) = 0; *((_DWORD *)v1 + 119) = 0; *((_DWORD *)v1 + 120) = 0; *((_DWORD *)v1 + 121) = 0; *((_DWORD *)v1 + 122) = 0; *((_DWORD *)v1 + 123) = 0; *((_DWORD *)v1 + 124) = 0; *((_DWORD *)v1 + 125) = 0; sub_8D0610(v1 + 504); *((_DWORD *)v1 + 134) = 0; *((_DWORD *)v1 + 135) = 0; *((_DWORD *)v1 + 136) = 0; *((_DWORD *)v1 + 137) = 0; *((_DWORD *)v1 + 138) = 0; *((_DWORD *)v1 + 139) = 0; *((_DWORD *)v1 + 141) = 0; *((_DWORD *)v1 + 142) = 0; *((_DWORD *)v1 + 192) = 0; *((_DWORD *)v1 + 194) = 0; *((_DWORD *)v1 + 195) = 0; *((_DWORD *)v1 + 196) = 0; *((_DWORD *)v1 + 197) = 0; *((_DWORD *)v1 + 198) = 0; *((_DWORD *)v1 + 199) = 0; *((_DWORD *)v1 + 203) = 0; *((_DWORD *)v1 + 201) = 0; *((_DWORD *)v1 + 202) = 0; *((_DWORD *)v1 + 200) = &PgTList::`vftable'; *((_DWORD *)v1 + 207) = 0; *((_DWORD *)v1 + 205) = 0; *((_DWORD *)v1 + 206) = 0; *((_DWORD *)v1 + 204) = &PgTList::`vftable'; *((_DWORD *)v1 + 208) = 0; `eh vector constructor iterator'( v1 + 836, 4u, 40, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 345) = 0; *((_DWORD *)v1 + 344) = 0; *((_DWORD *)v1 + 343) = 0; *((_DWORD *)v1 + 351) = 15; *((_DWORD *)v1 + 350) = 0; v1[1384] = 0; sub_8D06C0((float *)v1 + 355); *((_DWORD *)v1 + 369) = 0; *((_DWORD *)v1 + 367) = 0; *((_DWORD *)v1 + 368) = 0; *((_DWORD *)v1 + 366) = &PgTList::`vftable'; *((_DWORD *)v1 + 572) = 0; *((_DWORD *)v1 + 573) = 0; *((_DWORD *)v1 + 577) = 0; *((_DWORD *)v1 + 575) = 0; *((_DWORD *)v1 + 576) = 0; *((_DWORD *)v1 + 574) = &PgTList::`vftable'; *((_DWORD *)v1 + 581) = 0; *((_DWORD *)v1 + 582) = 0; *((_DWORD *)v1 + 583) = 0; *((_DWORD *)v1 + 585) = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; *((_DWORD *)v1 + 586) = 37; *((_DWORD *)v1 + 588) = 0; v2 = operator new[](0x94u); v3 = 4 * *((_DWORD *)v1 + 586); *((_DWORD *)v1 + 587) = v2; memset(v2, 0, v3); *((_DWORD *)v1 + 585) = &NiTMap::`vftable'; *((_DWORD *)v1 + 589) = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; *((_DWORD *)v1 + 590) = 37; *((_DWORD *)v1 + 592) = 0; v4 = operator new[](0x94u); v5 = 4 * *((_DWORD *)v1 + 590); *((_DWORD *)v1 + 591) = v4; memset(v4, 0, v5); *((_DWORD *)v1 + 589) = &NiTMap::`vftable'; *((float *)v1 + 361) = 0.0; *((_DWORD *)v1 + 101) = 0; *((_DWORD *)v1 + 86) = 0; *((float *)v1 + 578) = 1.0; *((_DWORD *)v1 + 140) = 0; *((_DWORD *)v1 + 147) = 0; *((_DWORD *)v1 + 171) = 0; *((_DWORD *)v1 + 133) = 0; v1[364] = 0; *((_DWORD *)v1 + 354) = 0; *((_DWORD *)v1 + 193) = 0; v6 = *((_DWORD *)v1 + 192); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v1 + 192) = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; // 9C6114: using guessed type void *PgTList::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; // 9C6134: using guessed type void *PgTList::`vftable'; // 9C6150: using guessed type void *FullMapWin::`vftable'; // 9C616C: using guessed type void *FullMapWin::`vftable'; //----- (0051BF00) -------------------------------------------------------- LONG __thiscall sub_51BF00(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // ST20_4 int v4; // edi _DWORD *v5; // ebx _DWORD *v6; // ST0C_4 int v7; // edi int v8; // edi int v9; // edi _DWORD *v10; // ebx _DWORD *v11; // ST0C_4 int v12; // edi int v13; // edi _DWORD *v14; // ebx _DWORD *v15; // ST0C_4 int v16; // edi _DWORD *v17; // ebx _DWORD *v18; // ST0C_4 int v19; // edi int v20; // edi int v21; // edi int v22; // edi int v23; // edi int v24; // edi int v25; // edi int v26; // edi int v27; // edi int v28; // edi int v29; // edi int v30; // edi int v31; // edi int v32; // edi int v33; // edi int v34; // edi int v35; // edi int v36; // edi int v37; // edi int v38; // edi int v39; // edi int v40; // edi int v41; // edi int v42; // edi int v43; // edi int v44; // edi int v45; // edi int v46; // edi int v47; // edi int v48; // edi int v49; // edi int v50; // edi int v51; // edi int v52; // edi int v53; // edi int v54; // edi _DWORD *v55; // ebx _DWORD *v56; // ST0C_4 int v57; // edi _DWORD *v58; // ebx _DWORD *v59; // ST0C_4 int v60; // edi _DWORD *v61; // ebx _DWORD *v62; // ST0C_4 v1 = this; *this = &FullMapWin::`vftable'; this[58] = &FullMapWin::`vftable'; v2 = (int)(this + 589); *(_DWORD *)v2 = &NiTMap::`vftable'; sub_940360(this + 589); *(_DWORD *)v2 = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); v3 = v1 + 585; *v3 = &NiTMap::`vftable'; sub_940360(v1 + 585); *v3 = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; sub_940360(v1 + 585); operator delete[]((void *)v1[587]); if ( v1[581] ) operator delete((void *)v1[581]); v4 = (int)(v1 + 574); v1[581] = 0; v1[582] = 0; v1[583] = 0; v1[574] = &PgTList::`vftable'; v5 = (_DWORD *)v1[575]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v4 + 8))(v1 + 574, v6); } v1[577] = 0; v1[575] = 0; v1[576] = 0; *(_DWORD *)v4 = &NiTListBase,GTIScanMarkWin *>::`vftable'; v7 = v1[573]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[572]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = (int)(v1 + 366); v1[366] = &PgTList::`vftable'; v10 = (_DWORD *)v1[367]; while ( v10 ) { v11 = v10; v10 = (_DWORD *)*v10; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v9 + 8))(v1 + 366, v11); } v1[369] = 0; v1[367] = 0; v1[368] = 0; *(_DWORD *)v9 = &NiTListBase,MobAreaMarkWin *>::`vftable'; nullsub_6(v1 + 355); if ( v1[351] >= 0x10u ) operator delete((void *)v1[346]); v1[351] = 15; v1[350] = 0; *((_BYTE *)v1 + 1384) = 0; `eh vector destructor iterator'(v1 + 209, 4u, 40, sub_410C00); v12 = v1[208]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = (int)(v1 + 204); v1[204] = &PgTList::`vftable'; v14 = (_DWORD *)v1[205]; while ( v14 ) { v15 = v14; v14 = (_DWORD *)*v14; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v13 + 8))(v1 + 204, v15); } v1[207] = 0; v1[205] = 0; v1[206] = 0; *(_DWORD *)v13 = &NiTListBase,PgWinSpr *>::`vftable'; v16 = (int)(v1 + 200); v1[200] = &PgTList::`vftable'; v17 = (_DWORD *)v1[201]; while ( v17 ) { v18 = v17; v17 = (_DWORD *)*v17; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v16 + 8))(v1 + 200, v18); } v1[203] = 0; v1[201] = 0; v1[202] = 0; *(_DWORD *)v16 = &NiTListBase,QuestHelperMarkWin *>::`vftable'; v19 = v1[199]; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = v1[198]; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = v1[197]; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = v1[196]; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v23 = v1[195]; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v24 = v1[194]; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = v1[192]; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); v26 = v1[142]; if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v27 = v1[141]; if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v28 = v1[139]; if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v29 = v1[138]; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); v30 = v1[137]; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v30 ) (**(void (__thiscall ***)(int, signed int))v30)(v30, 1); v31 = v1[136]; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); v32 = v1[135]; if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); v33 = v1[134]; if ( v33 && !InterlockedDecrement((volatile LONG *)(v33 + 4)) && v33 ) (**(void (__thiscall ***)(int, signed int))v33)(v33, 1); v34 = v1[125]; if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); v35 = v1[124]; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); v36 = v1[123]; if ( v36 && !InterlockedDecrement((volatile LONG *)(v36 + 4)) && v36 ) (**(void (__thiscall ***)(int, signed int))v36)(v36, 1); v37 = v1[122]; if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); v38 = v1[121]; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v38 ) (**(void (__thiscall ***)(int, signed int))v38)(v38, 1); sub_521F40(v1 + 117); v39 = v1[116]; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v39 ) (**(void (__thiscall ***)(int, signed int))v39)(v39, 1); v40 = v1[115]; if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v40 ) (**(void (__thiscall ***)(int, signed int))v40)(v40, 1); v41 = v1[114]; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v41 ) (**(void (__thiscall ***)(int, signed int))v41)(v41, 1); v42 = v1[113]; if ( v42 && !InterlockedDecrement((volatile LONG *)(v42 + 4)) && v42 ) (**(void (__thiscall ***)(int, signed int))v42)(v42, 1); v43 = v1[112]; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v43 ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); v44 = v1[111]; if ( v44 && !InterlockedDecrement((volatile LONG *)(v44 + 4)) && v44 ) (**(void (__thiscall ***)(int, signed int))v44)(v44, 1); v45 = v1[110]; if ( v45 && !InterlockedDecrement((volatile LONG *)(v45 + 4)) && v45 ) (**(void (__thiscall ***)(int, signed int))v45)(v45, 1); v46 = v1[109]; if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) && v46 ) (**(void (__thiscall ***)(int, signed int))v46)(v46, 1); v47 = v1[108]; if ( v47 && !InterlockedDecrement((volatile LONG *)(v47 + 4)) && v47 ) (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); v48 = v1[107]; if ( v48 && !InterlockedDecrement((volatile LONG *)(v48 + 4)) && v48 ) (**(void (__thiscall ***)(int, signed int))v48)(v48, 1); v49 = v1[106]; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v49 ) (**(void (__thiscall ***)(int, signed int))v49)(v49, 1); v50 = v1[105]; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v50 ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); v51 = v1[104]; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v51 ) (**(void (__thiscall ***)(int, signed int))v51)(v51, 1); v52 = v1[103]; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 ) (**(void (__thiscall ***)(int, signed int))v52)(v52, 1); v53 = v1[102]; if ( v53 && !InterlockedDecrement((volatile LONG *)(v53 + 4)) && v53 ) (**(void (__thiscall ***)(int, signed int))v53)(v53, 1); v54 = (int)(v1 + 96); v1[96] = &PgTList::`vftable'; v55 = (_DWORD *)v1[97]; while ( v55 ) { v56 = v55; v55 = (_DWORD *)*v55; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v54 + 8))(v1 + 96, v56); } v1[99] = 0; v1[97] = 0; v1[98] = 0; *(_DWORD *)v54 = &NiTListBase,PartyMarkWin *>::`vftable'; v57 = (int)(v1 + 92); v1[92] = &PgTList::`vftable'; v58 = (_DWORD *)v1[93]; while ( v58 ) { v59 = v58; v58 = (_DWORD *)*v58; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v57 + 8))(v1 + 92, v59); } v1[95] = 0; v1[93] = 0; v1[94] = 0; *(_DWORD *)v57 = &NiTListBase,NpcMarkWin *>::`vftable'; v60 = (int)(v1 + 87); v1[87] = &PgTList::`vftable'; v61 = (_DWORD *)v1[88]; while ( v61 ) { v62 = v61; v61 = (_DWORD *)*v61; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v60 + 8))(v1 + 87, v62); } v1[90] = 0; v1[88] = 0; v1[89] = 0; *(_DWORD *)v60 = &NiTListBase,RaidMarkWin *>::`vftable'; return sub_8F10F0(v1); } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; // 9C6114: using guessed type void *PgTList::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; // 9C6134: using guessed type void *PgTList::`vftable'; // 9C6150: using guessed type void *FullMapWin::`vftable'; // 9C616C: using guessed type void *FullMapWin::`vftable'; //----- (0051C7D0) -------------------------------------------------------- volatile LONG *__cdecl sub_51C7D0(int a1, int a2) { void *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x944u); v6 = v2; v7 = 0; if ( v2 ) v3 = (volatile LONG *)sub_51BB40((char *)v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (0051C900) -------------------------------------------------------- int __thiscall sub_51C900(int this, _BYTE *a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // edi void (__thiscall ***v4)(_DWORD, signed int); // edi signed int v5; // edi __int16 *v6; // ebx int v7; // edi _DWORD *v8; // ebx int v9; // eax int v10; // ebx _DWORD *v11; // edi int v12; // eax _DWORD *v13; // eax int result; // eax char v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+38h] [ebp-4h] v2 = this; sub_455710(*(void **)(this + 560), &v16, *(_DWORD *)(this + 344)); if ( v16 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } sub_455710(*(void **)(v2 + 560), &v16, *(_DWORD *)(v2 + 532)); v4 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v4 ) (**v4)(v4, 1); v5 = 0; if ( *a2 ) { v6 = (__int16 *)(a2 + 1); do { sub_51B270((_DWORD *)v2, v6); ++v5; v6 = (__int16 *)((char *)v6 + 159); } while ( v5 < (unsigned __int8)*a2 ); } v7 = *(_DWORD *)(v2 + 344); v8 = *(_DWORD **)(v2 + 560); if ( v7 ) { v9 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v7 + 4))(*(_DWORD *)(v2 + 344)); if ( v9 ) { while ( (_UNKNOWN *)v9 != &unk_BA6A8C ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_18; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v8 + 116))(v8, v7, 0); sub_85C4D0(v8); sub_85BED0((_DWORD **)v8, 0.0, 1); } } LABEL_18: v10 = *(_DWORD *)(v2 + 532); v11 = *(_DWORD **)(v2 + 560); if ( v10 ) { v12 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 4))(*(_DWORD *)(v2 + 532)); if ( v12 ) { while ( (_UNKNOWN *)v12 != &unk_BA6A8C ) { v12 = *(_DWORD *)(v12 + 4); if ( !v12 ) goto LABEL_24; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v11 + 116))(v11, v10, 0); sub_85C4D0(v11); sub_85BED0((_DWORD **)v11, 0.0, 1); } } LABEL_24: v13 = sub_439D70(byte_ADB468, &v15); result = sub_4316B0(v13); if ( *(_DWORD *)(v2 + 2280) == *(unsigned __int16 *)result ) { *(_DWORD *)(v2 + 2284) += (unsigned __int8)*a2; *(_DWORD *)(v2 + 2280) = *(unsigned __int16 *)result; } else { *(_DWORD *)(v2 + 2284) = (unsigned __int8)*a2; result = *(unsigned __int16 *)result; *(_DWORD *)(v2 + 2280) = result; } return result; } //----- (0051CAA0) -------------------------------------------------------- int __cdecl sub_51CAA0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi int result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x124u); v8 = (int)v7; v11 = v7; v12 = 0; if ( v7 ) { sub_8F2740(v7); *(_DWORD *)v8 = &InvisibleWin::`vftable'; *(_DWORD *)(v8 + 232) = &InvisibleWin::`vftable'; } else { v8 = 0; } if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v12 = 1; sub_403790(&unk_BA6B10, v8); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)v8 + 336))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, (_DWORD *)v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = 0; } return result; } // 9C5D14: using guessed type void *InvisibleWin::`vftable'; // 9C5D34: using guessed type void *InvisibleWin::`vftable'; //----- (0051CC00) -------------------------------------------------------- char __thiscall sub_51CC00(_DWORD *this, char a2) { _DWORD *v2; // esi LONG v3; // eax _DWORD *v4; // ecx int v5; // eax _DWORD *v6; // edi int v7; // ecx int v8; // ebx _DWORD *v9; // eax int v10; // edi _DWORD *v11; // eax int v12; // ecx int v13; // eax _WORD *v14; // edi int v15; // eax int v16; // ecx char *v17; // eax int v18; // edi int v19; // ebx _DWORD *v20; // ecx int v21; // ebx __int16 v22; // ST14_2 char *v23; // eax char *v24; // edi int v25; // ebx int v26; // edi int v27; // ebx int *v28; // eax int v29; // edi volatile LONG *v30; // eax int v31; // ebx int v32; // eax int v33; // ebx int v34; // edx int *v35; // eax int v36; // ebx void **v37; // eax int v38; // ebx __int16 v39; // bx int v40; // eax int v41; // ecx int v42; // eax int v43; // ecx int v44; // eax int v45; // ecx int v46; // eax int v47; // edx int v48; // ebx int v49; // ecx _DWORD *v50; // eax int v51; // edi char *v52; // ebx _DWORD *v53; // eax _DWORD *v54; // edx int v55; // ecx int (__thiscall ***v56)(_DWORD, signed int); // esi int (__thiscall ***v57)(_DWORD, signed int); // esi const char *v59; // [esp+10h] [ebp-5Ch] int v60; // [esp+24h] [ebp-48h] _DWORD *v61; // [esp+30h] [ebp-3Ch] int v62; // [esp+34h] [ebp-38h] char *v63; // [esp+38h] [ebp-34h] int v64; // [esp+3Ch] [ebp-30h] char *v65; // [esp+40h] [ebp-2Ch] int v66; // [esp+44h] [ebp-28h] int v67; // [esp+48h] [ebp-24h] int v68; // [esp+4Ch] [ebp-20h] int v69; // [esp+50h] [ebp-1Ch] int v70; // [esp+54h] [ebp-18h] int v71; // [esp+58h] [ebp-14h] int v72; // [esp+68h] [ebp-4h] v2 = this; v3 = this[101]; v4 = *(_DWORD **)(v3 + 352); if ( !v4 ) return v3; if ( !a2 ) { v62 = sub_45FF90(v4); v9 = sub_439D70(byte_ADB468, &v69); v2[343] = *v9; v2[344] = v9[1]; v2[345] = v9[2]; v10 = 0; v72 = 0; v67 = 0; v11 = (_DWORD *)v2[93]; v12 = 0; if ( !v11 ) { LABEL_8: LOBYTE(v72) = 0; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v8 = v62; v72 = -1; goto LABEL_12; } while ( 1 ) { v60 = v12 + 1; if ( v12 >= v2[571] ) goto LABEL_8; v21 = v11[2]; v61 = (_DWORD *)*v11; v66 = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); v22 = *(_WORD *)(v21 + 312); LOBYTE(v72) = 2; v23 = sub_664AB0(dword_AD8C90, v22); v24 = v23; v63 = v23; if ( v23 ) { if ( !sub_651680((int)v23) ) goto LABEL_73; v25 = *((unsigned __int16 *)v24 + 471); v26 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v25) ) { if ( (unsigned __int16)v25 <= *(_WORD *)(v26 + 200) ) { v28 = (int *)(*(_DWORD *)(v26 + 196) + 4 * v25); if ( *v28 ) v27 = *v28; else v27 = 0; } else { v27 = 0; } } else { v27 = 0; } if ( *(_DWORD *)(v27 + 170) == 22 ) { v56 = (int (__thiscall ***)(_DWORD, signed int))v66; LOBYTE(v72) = 1; v3 = InterlockedDecrement((volatile LONG *)(v66 + 4)); if ( !v3 ) LOBYTE(v3) = (**v56)(v56, 1); v57 = (int (__thiscall ***)(_DWORD, signed int))v67; LOBYTE(v72) = 0; if ( v67 ) { v3 = InterlockedDecrement((volatile LONG *)(v67 + 4)); if ( !v3 ) LOBYTE(v3) = (**v57)(v57, 1); } return v3; } v29 = 0; LOBYTE(v72) = 3; if ( sub_6516C0(v63) ) { v30 = sub_56D5E0(0, 0, v2[122], (int)(v2 + 117), v2[140], v2[192]); } else { v31 = sub_518550(v2, *(_DWORD *)(v27 + 170)); v32 = v67; if ( v67 != v31 ) { if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) ) (**(void (__stdcall ***)(signed int))v67)(1); v67 = v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); v32 = v67; } v30 = sub_56D5E0(0, 0, v32, (int)(v2 + 117), v2[140], v2[192]); } if ( v30 ) { v29 = (int)v30; InterlockedIncrement(v30 + 1); v33 = dword_ACDA48; v34 = *(_DWORD *)dword_ACDA48; v64 = *((unsigned __int16 *)v63 + 471); if ( (*(unsigned __int8 (__thiscall **)(int, int))(v34 + 16))(dword_ACDA48, v64) ) { if ( (unsigned __int16)v64 <= *(_WORD *)(v33 + 200) ) { v35 = (int *)(*(_DWORD *)(v33 + 196) + 4 * (unsigned __int16)v64); if ( *v35 ) { v36 = *v35; if ( *v35 ) { if ( sub_570000((_DWORD *)v29) ) { if ( sub_6516C0(v63) ) v59 = (const char *)sub_651920(v63); else v59 = (const char *)(v36 + 34); v37 = (void **)sub_570000((_DWORD *)v29); sub_8F2EA0(v37, v59); v38 = dword_AD01E8; *(_DWORD *)(sub_570000((_DWORD *)v29) + 272) = v38; } } } } } v39 = *(_WORD *)(v66 + 312); v64 = *(unsigned __int16 *)(v66 + 312); sub_51A660(v2, (int)&v64); *(_WORD *)(v29 + 312) = v39; sub_51A5E0(v2, v29); (*(void (__stdcall **)(int *))(*(_DWORD *)v2[101] + 188))(&v68); v40 = (*(int (**)(void))(*(_DWORD *)v2[101] + 164))(); v41 = v2[101]; v68 += v40; v42 = (*(int (**)(void))(*(_DWORD *)v41 + 168))(); v43 = v2[101]; v69 += v42; v44 = (*(int (**)(void))(*(_DWORD *)v43 + 164))(); v45 = v2[101]; v70 += v44; v46 = (*(int (**)(void))(*(_DWORD *)v45 + 168))(); v47 = v69; v48 = v70; v71 += v46; v49 = v71; *(_DWORD *)(v29 + 316) = v68; *(_DWORD *)(v29 + 320) = v47; *(_DWORD *)(v29 + 324) = v48; *(_DWORD *)(v29 + 328) = v49; *(_BYTE *)(v29 + 332) = 1; } LOBYTE(v72) = 2; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); } else { v50 = (_DWORD *)v2[93]; if ( !v50 ) goto LABEL_73; while ( 1 ) { v51 = v50[2]; v50 = (_DWORD *)*v50; if ( v51 ) { if ( *(_WORD *)(v51 + 312) == *(_WORD *)(v21 + 312) ) break; } if ( !v50 ) goto LABEL_73; } sub_455710((void *)v2[140], (int *)&v65, v51); if ( v65 ) { v52 = v65; if ( !InterlockedDecrement((volatile LONG *)v65 + 1) ) { if ( v52 ) (**(void (__thiscall ***)(char *, signed int))v52)(v52, 1); } } v53 = (_DWORD *)v2[93]; if ( v53 ) { while ( 1 ) { v54 = v53 + 2; v55 = (int)v53; v53 = (_DWORD *)*v53; if ( v51 == *v54 ) break; if ( !v53 ) goto LABEL_67; } } else { LABEL_67: v55 = 0; } v64 = v55; if ( v55 ) sub_403620(v2 + 92, (_DWORD **)&v64); if ( v51 ) sub_8F9E00(&unk_BA6B10, (_DWORD *)v51); } v21 = v66; LABEL_73: LOBYTE(v72) = 1; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v10 = v67; if ( !v61 ) goto LABEL_8; v11 = v61; v12 = v60; } } v5 = v2[93]; if ( v5 ) { v6 = *(_DWORD **)v5; v7 = *(_DWORD *)(v5 + 8); if ( *(_DWORD *)v5 ) { do { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 240))(0); v7 = v6[2]; v6 = (_DWORD *)*v6; } while ( v6 ); } } v8 = sub_698050(byte_ADB468); v62 = v8; LABEL_12: v13 = sub_49F8D0(v2 + 343); v14 = (_WORD *)v13; if ( v13 ) { *((float *)v2 + 361) = *(float *)(v13 + 112); v15 = *(unsigned __int16 *)(v13 + 175); v16 = *(unsigned __int16 *)((char *)v14 + 173); v65 = (char *)*(unsigned __int16 *)((char *)v14 + 171); v2[362] = *(unsigned __int16 *)((char *)v14 + 169); v2[363] = v65; v2[364] = v16; v2[365] = v15; } v17 = (char *)(sub_4316B0(v2 + 343) + 14); v65 = v17 + 1; sub_4018E0(v2 + 346, v17, strlen(v17)); *((_WORD *)v2 + 706) = *v14; LOBYTE(v3) = sub_519F60(v2); if ( v8 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 60))(v8); (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 64))(v8); v18 = v2[364] - v2[362] + 1; v19 = v2[365] - v2[363] + 1; sub_8681A0(*(_DWORD *)(v2[141] + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); sub_867E60(*(_DWORD *)(v2[141] + 184), 0, 0.0, 0.0, 512.0, 512.0); *((float *)v2 + 143) = (double)(signed int)v2[362]; *((float *)v2 + 144) = (double)(signed int)v2[363]; *((float *)v2 + 145) = 512.0 / (double)(unsigned int)v18; v20 = (_DWORD *)v2[142]; *((float *)v2 + 146) = 512.0 / (double)(unsigned int)v19; sub_42AB40(v20, v62); *(_WORD *)(*(_DWORD *)(v2[141] + 184) + 50) |= 9u; LOBYTE(v3) = sub_85C4D0(v2); } return v3; } // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; // AD01E8: using guessed type int dword_AD01E8; //----- (0051D2D0) -------------------------------------------------------- char __thiscall sub_51D2D0(_DWORD **this) { _DWORD **v1; // esi _DWORD **v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax int *v5; // ecx _DWORD *v6; // eax int v7; // ebx int v8; // edi bool v9; // al void *v10; // eax const char *v11; // eax int v12; // edi void *v13; // eax int v14; // eax char *v15; // eax int v16; // edi void *v17; // eax __int16 *v18; // ebx _DWORD *v19; // eax const char *v20; // eax int v21; // edi void *v22; // eax _DWORD *v23; // eax const char *v24; // eax int v25; // edi void *v26; // eax _DWORD *v27; // edi _DWORD *v28; // eax int v29; // edi void *v30; // eax _DWORD *v31; // eax const char *v32; // eax int v33; // edi void *v34; // eax _DWORD **v36; // [esp+10h] [ebp-D8h] _DWORD *v37; // [esp+14h] [ebp-D4h] _DWORD *v38; // [esp+18h] [ebp-D0h] signed __int16 v39; // [esp+1Ch] [ebp-CCh] int v40; // [esp+20h] [ebp-C8h] int *v41; // [esp+24h] [ebp-C4h] __int16 *v42; // [esp+28h] [ebp-C0h] signed int v43; // [esp+2Ch] [ebp-BCh] signed int v44; // [esp+2Ch] [ebp-BCh] bool v45; // [esp+33h] [ebp-B5h] int v46; // [esp+34h] [ebp-B4h] _DWORD *v47; // [esp+38h] [ebp-B0h] void *v48; // [esp+3Ch] [ebp-ACh] int v49; // [esp+4Ch] [ebp-9Ch] unsigned int v50; // [esp+50h] [ebp-98h] char v51; // [esp+58h] [ebp-90h] int v52; // [esp+E4h] [ebp-4h] v1 = this; v2 = (_DWORD **)sub_6CD770(); v36 = v2; v37 = v2[1]; sub_466A50(v1[335]); v3 = sub_6CF210(); v47 = v3; if ( v3 ) { v4 = (_DWORD *)dword_AB76B8; v39 = -1; if ( dword_AB76B8 ) { v40 = 0xFFFF; do { v5 = (int *)v4[2]; v38 = (_DWORD *)*v4; if ( v5 ) { v6 = (_DWORD *)v5[1]; if ( v6 ) { if ( (_DWORD *)v6[1] == v1[343] && (_DWORD *)v6[2] == v1[344] && (_DWORD *)v6[3] == v1[345] ) { v7 = *v5; v46 = *v5; if ( v39 != *(_WORD *)(*v5 + 4) ) { v39 = *(_WORD *)(v7 + 4); v8 = sub_74BA80(v36, *(_WORD *)(v7 + 4)); v9 = sub_6CE8A0(v7); v45 = v9; if ( v8 != 8 || v9 || *(_BYTE *)(v7 + 89) ) { v50 = 15; v49 = 0; LOBYTE(v48) = 0; v52 = 0; v10 = (void *)sub_74E810(v37, *(unsigned __int16 *)(v7 + 4)); sub_4018E0(&v48, v10, strlen((const char *)v10)); if ( v49 ) { memset(&v51, 0, 0x80u); v11 = (const char *)v48; if ( v50 < 0x10 ) v11 = (const char *)&v48; if ( sub_5181B0(&v51, v11, 24) ) sub_4018E0(&v48, &v51, strlen(&v51)); sub_6CF000((int)v47); v12 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C55FA); v13 = v48; if ( v50 < 0x10 ) v13 = &v48; sub_4661A0(v1[335], v12, 1, v13); sub_464BE0(v1[335], v12, 255, 255, 0); sub_464B20(v1[335], v12, v40++); if ( v45 == 1 && !*(_BYTE *)(v7 + 89) ) { v14 = sub_49F370(*(unsigned __int16 *)(v7 + 94)); if ( v14 ) { v15 = sub_7549E0("- NPC %s", v14 + 34); sub_40AC00(&v48, v15); v16 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C55FB); v17 = v48; if ( v50 < 0x10 ) v17 = &v48; sub_4661A0(v1[335], v16, 1, v17); sub_464BE0(v1[335], v16, 255, 255, 255); sub_464B20(v1[335], v16, *(unsigned __int16 *)(v7 + 94)); } } v43 = 0; v18 = (__int16 *)(v46 + 94); do { if ( !*((_BYTE *)v18 - 2) ) break; sub_6CF860(v47, v46, &v48, *v18, 1); v19 = sub_6CED70(v47); sub_4018E0(&v48, v19, strlen((const char *)v19)); if ( v49 ) { memset(&v51, 0, 0x80u); v20 = (const char *)v48; if ( v50 < 0x10 ) v20 = (const char *)&v48; if ( sub_5181B0(&v51, v20, 24) ) sub_4018E0(&v48, &v51, strlen(&v51)); v21 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C560A); v22 = v48; if ( v50 < 0x10 ) v22 = &v48; sub_4661A0(v1[335], v21, 1, v22); sub_464BE0(v1[335], v21, 255, 255, 255); sub_464B20(v1[335], v21, (unsigned __int16)*v18); sub_6CF000((int)v47); } v18 += 4; ++v43; } while ( v43 < 5 ); v44 = 0; v41 = (int *)(v46 + 200); v42 = (__int16 *)(v46 + 134); do { if ( !*((_BYTE *)v42 - 2) ) break; sub_6CFC80(v47, v46, &v48, *v42, 1); v23 = sub_6CED70(v47); sub_4018E0(&v48, v23, strlen((const char *)v23)); if ( v49 ) { memset(&v51, 0, 0x80u); v24 = (const char *)v48; if ( v50 < 0x10 ) v24 = (const char *)&v48; if ( sub_5181B0(&v51, v24, 20) ) sub_4018E0(&v48, &v51, strlen(&v51)); v25 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C560B); v26 = v48; if ( v50 < 0x10 ) v26 = &v48; sub_4661A0(v1[335], v25, 1, v26); sub_464BE0(v1[335], v25, 255, 255, 255); sub_464B20(v1[335], v25, *v41); sub_6CF000((int)v47); } v42 += 3; v41 += 8; ++v44; } while ( v44 < 5 ); v27 = v47; sub_6CFDF0(v47, v46, &v48); v28 = sub_6CED70(v47); sub_4018E0(&v48, v28, strlen((const char *)v28)); if ( v49 ) { v29 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C5621); v30 = v48; if ( v50 < 0x10 ) v30 = &v48; sub_4661A0(v1[335], v29, 1, v30); sub_464BE0(v1[335], v29, 255, 255, 255); sub_464B20(v1[335], v29, *(unsigned __int16 *)(v46 + 8 * v44 + 94)); sub_6CF000((int)v47); v27 = v47; } sub_6CFEB0(v27, v46, &v48); v31 = sub_6CED70(v27); sub_4018E0(&v48, v31, strlen((const char *)v31)); if ( v49 ) { memset(&v51, 0, 0x80u); v32 = (const char *)v48; if ( v50 < 0x10 ) v32 = (const char *)&v48; if ( sub_5181B0(&v51, v32, 20) ) sub_4018E0(&v48, &v51, strlen(&v51)); v33 = ((int (__thiscall *)(_DWORD *, void *))loc_466CA0)(v1[335], &unk_9C5622); v34 = v48; if ( v50 < 0x10 ) v34 = &v48; sub_4661A0(v1[335], v33, 1, v34); sub_464BE0(v1[335], v33, 255, 255, 255); sub_6CF000((int)v47); } ((void (__thiscall *)(_DWORD *, const char *))loc_466CA0)(v1[335], "\n"); } v52 = -1; if ( v50 >= 0x10 ) operator delete(v48); v50 = 15; v49 = 0; LOBYTE(v48) = 0; } } } } } v4 = v38; } while ( v38 ); } LOBYTE(v3) = sub_464D00(v1[335], 4); } return (char)v3; } // AB76B8: using guessed type int dword_AB76B8; //----- (0051DB00) -------------------------------------------------------- int __thiscall sub_51DB00(_DWORD *this) { int v1; // ebx const void **v2; // esi _BYTE *v3; // eax _DWORD *v4; // edi _BYTE *v5; // edx _BYTE *v6; // ecx int v7; // edi unsigned int v8; // eax unsigned int v9; // eax unsigned int v10; // ecx char *v11; // ecx _DWORD *v12; // eax _BYTE *v13; // ecx unsigned int v14; // eax unsigned int v15; // eax unsigned int v16; // ecx char *v17; // ecx _DWORD *v18; // eax int v19; // eax int v20; // edi _BYTE *v21; // eax _BYTE *v22; // edx _BYTE *v23; // ecx int v24; // edi unsigned int v25; // eax unsigned int v26; // eax unsigned int v27; // ecx char *v28; // ecx _DWORD *v29; // eax _BYTE *v30; // ecx unsigned int v31; // eax unsigned int v32; // eax unsigned int v33; // ecx char *v34; // ecx _DWORD *v35; // eax _BYTE *v36; // eax _DWORD *v37; // edi _BYTE *v38; // edx _BYTE *v39; // ecx int v40; // edi unsigned int v41; // eax unsigned int v42; // eax unsigned int v43; // ecx char *v44; // ecx _DWORD *v45; // eax _BYTE *v46; // ecx unsigned int v47; // eax unsigned int v48; // eax unsigned int v49; // ecx char *v50; // ecx _DWORD *v51; // eax int v52; // eax int v54; // [esp+8h] [ebp-14h] int v55; // [esp+Ch] [ebp-10h] _DWORD *v56; // [esp+10h] [ebp-Ch] _DWORD *v57; // [esp+14h] [ebp-8h] _DWORD *v58; // [esp+18h] [ebp-4h] v1 = (int)this; v2 = (const void **)(this + 581); v58 = this; v54 = (int)(this + 140); sub_5B3CF0(this + 581, this + 140); v55 = *(_DWORD *)(v1 + 2316); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(*(_DWORD *)(v1 + 1344) + 292); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1336); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1340); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1332); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 592); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1316); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1320); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1324); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1328); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1368); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1348); sub_5B3CF0(v2, &v55); v55 = *(_DWORD *)(v1 + 1352); sub_5B3CF0(v2, &v55); v55 = 0; v56 = (_DWORD *)(v1 + 596); do { v3 = v2[1]; v4 = (_DWORD *)*v56; v57 = (_DWORD *)*v56; if ( &v57 >= (_DWORD **)v3 || (v5 = *v2, *v2 > &v57) ) { v13 = v2[2]; if ( v3 == v13 ) { v14 = (v3 - (_BYTE *)*v2) >> 2; if ( v14 > 0x3FFFFFFE ) LABEL_35: std::_Xlength_error("vector too long"); v15 = v14 + 1; v16 = (v13 - (_BYTE *)*v2) >> 2; if ( v15 > v16 ) { if ( 0x3FFFFFFF - (v16 >> 1) >= v16 ) v17 = (char *)((v16 >> 1) + v16); else v17 = 0; if ( (unsigned int)v17 < v15 ) v17 = (char *)v15; sub_74E360(v2, v17); v1 = (int)v58; } } v18 = v2[1]; if ( v18 ) *v18 = v4; } else { v6 = v2[2]; v7 = ((char *)&v57 - v5) >> 2; if ( v3 == v6 ) { v8 = (v3 - v5) >> 2; if ( v8 > 0x3FFFFFFE ) goto LABEL_35; v9 = v8 + 1; v10 = (v6 - v5) >> 2; if ( v9 > v10 ) { if ( 0x3FFFFFFF - (v10 >> 1) >= v10 ) v11 = (char *)((v10 >> 1) + v10); else v11 = 0; if ( (unsigned int)v11 < v9 ) v11 = (char *)v9; sub_74E360(v2, v11); v1 = (int)v58; } } v12 = v2[1]; if ( v12 ) *v12 = *((_DWORD *)*v2 + v7); } v19 = v55; v2[1] = (char *)v2[1] + 4; ++v56; v55 = v19 + 1; } while ( (unsigned int)(v19 + 1) < 0x16 ); v55 = 0; v57 = (_DWORD *)(v1 + 1156); do { v20 = *(v57 - 40); v21 = v2[1]; v56 = (_DWORD *)*(v57 - 40); if ( &v56 >= (_DWORD **)v21 || (v22 = *v2, *v2 > &v56) ) { v30 = v2[2]; if ( v21 == v30 ) { v31 = (v21 - (_BYTE *)*v2) >> 2; if ( v31 > 0x3FFFFFFE ) goto LABEL_35; v32 = v31 + 1; v33 = (v30 - (_BYTE *)*v2) >> 2; if ( v32 > v33 ) { if ( 0x3FFFFFFF - (v33 >> 1) >= v33 ) v34 = (char *)((v33 >> 1) + v33); else v34 = 0; if ( (unsigned int)v34 < v32 ) v34 = (char *)v32; sub_74E360(v2, v34); v1 = (int)v58; } } v35 = v2[1]; if ( v35 ) *v35 = v20; } else { v23 = v2[2]; v24 = ((char *)&v56 - v22) >> 2; if ( v21 == v23 ) { v25 = (v21 - v22) >> 2; if ( v25 > 0x3FFFFFFE ) goto LABEL_35; v26 = v25 + 1; v27 = (v23 - v22) >> 2; if ( v26 > v27 ) { if ( 0x3FFFFFFF - (v27 >> 1) >= v27 ) v28 = (char *)((v27 >> 1) + v27); else v28 = 0; if ( (unsigned int)v28 < v26 ) v28 = (char *)v26; sub_74E360(v2, v28); v1 = (int)v58; } } v29 = v2[1]; if ( v29 ) *v29 = *((_DWORD *)*v2 + v24); } v2[1] = (char *)v2[1] + 4; v36 = v2[1]; v37 = (_DWORD *)*v57; v56 = (_DWORD *)*v57; if ( &v56 >= (_DWORD **)v36 || (v38 = *v2, *v2 > &v56) ) { v46 = v2[2]; if ( v36 == v46 ) { v47 = (v36 - (_BYTE *)*v2) >> 2; if ( v47 > 0x3FFFFFFE ) goto LABEL_35; v48 = v47 + 1; v49 = (v46 - (_BYTE *)*v2) >> 2; if ( v48 > v49 ) { if ( 0x3FFFFFFF - (v49 >> 1) >= v49 ) v50 = (char *)((v49 >> 1) + v49); else v50 = 0; if ( (unsigned int)v50 < v48 ) v50 = (char *)v48; sub_74E360(v2, v50); v1 = (int)v58; } } v51 = v2[1]; if ( v51 ) *v51 = v37; } else { v39 = v2[2]; v40 = ((char *)&v56 - v38) >> 2; if ( v36 == v39 ) { v41 = (v36 - v38) >> 2; if ( v41 > 0x3FFFFFFE ) goto LABEL_35; v42 = v41 + 1; v43 = (v39 - v38) >> 2; if ( v42 > v43 ) { if ( 0x3FFFFFFF - (v43 >> 1) >= v43 ) v44 = (char *)((v43 >> 1) + v43); else v44 = 0; if ( (unsigned int)v44 < v42 ) v44 = (char *)v42; sub_74E360(v2, v44); v1 = (int)v58; } } v45 = v2[1]; if ( v45 ) *v45 = *((_DWORD *)*v2 + v40); } v52 = v55; v2[1] = (char *)v2[1] + 4; ++v57; v55 = v52 + 1; } while ( (unsigned int)(v52 + 1) < 0x28 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 684) + 240))(0); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v54 + 240))(0); } //----- (0051DF10) -------------------------------------------------------- unsigned __int8 *__thiscall sub_51DF10(_DWORD *this) { _DWORD *v1; // edi unsigned __int8 *result; // eax int **v3; // eax int *v4; // esi int v5; // ebx int v6; // ecx _WORD *v7; // esi __int16 v8; // ST14_2 int v9; // ST10_4 const void **v10; // eax const char *v11; // eax const char *v12; // ST14_4 void **v13; // eax int v14; // eax _DWORD *v15; // eax _DWORD *v16; // ecx float v17; // edx volatile LONG *v18; // eax int v19; // esi void (__thiscall *v20)(int, _DWORD); // eax _DWORD *v21; // eax _DWORD *v22; // ecx bool v23; // cf int v24; // eax _DWORD *v25; // esi double v26; // st7 double v27; // st6 int v28; // edx int v29; // eax int v30; // eax float v31; // ecx int v32; // edx int v33; // edx int v34; // eax _DWORD *v35; // eax _DWORD *v36; // ecx _DWORD *v37; // eax _DWORD *v38; // ecx _DWORD *v39; // edx _DWORD *v40; // eax _DWORD *v41; // esi _DWORD *v42; // ST14_4 _DWORD **v43; // [esp+10h] [ebp-78h] int *v44; // [esp+14h] [ebp-74h] unsigned __int8 *v45; // [esp+18h] [ebp-70h] int v46; // [esp+1Ch] [ebp-6Ch] int v47; // [esp+20h] [ebp-68h] signed __int16 v48; // [esp+24h] [ebp-64h] int *v49; // [esp+28h] [ebp-60h] void **v50; // [esp+2Ch] [ebp-5Ch] _DWORD *v51; // [esp+30h] [ebp-58h] _DWORD *v52; // [esp+34h] [ebp-54h] int v53; // [esp+38h] [ebp-50h] unsigned int v54; // [esp+3Ch] [ebp-4Ch] int *v55; // [esp+40h] [ebp-48h] __int64 v56; // [esp+44h] [ebp-44h] int v57; // [esp+4Ch] [ebp-3Ch] __int64 v58; // [esp+50h] [ebp-38h] float v59; // [esp+58h] [ebp-30h] void *v60; // [esp+5Ch] [ebp-2Ch] int v61; // [esp+6Ch] [ebp-1Ch] unsigned int v62; // [esp+70h] [ebp-18h] int i; // [esp+84h] [ebp-4h] v1 = this; sub_519B10(this); v43 = (_DWORD **)sub_6CD770(); result = (unsigned __int8 *)sub_6CF210(); v45 = result; if ( result ) { *((_WORD *)result + 30) = -1; v54 = 0; v48 = -1; v57 = 0xFFFF; v53 = 0; v51 = 0; v52 = 0; v50 = &PgTList::`vftable'; v3 = (int **)dword_AB76B8; i = 0; if ( dword_AB76B8 ) { v49 = v1 + 370; v55 = v1 + 209; while ( 1 ) { v4 = v3[2]; v44 = *v3; v59 = *(float *)&v4; if ( *(float *)&v4 == 0.0 ) goto LABEL_55; v5 = v4[1]; if ( !v5 ) goto LABEL_55; if ( *(_DWORD *)(v5 + 4) == v1[343] && *(_DWORD *)(v5 + 8) == v1[344] && *(_DWORD *)(v5 + 12) == v1[345] ) break; LABEL_54: if ( v54 >= 0xC8 ) goto LABEL_56; LABEL_55: if ( !v44 ) goto LABEL_56; v3 = (int **)v44; } if ( sub_74BA80(v43, *(_WORD *)(*v4 + 4)) == 8 && !(unsigned __int8)sub_6CE8A0(*v4) && !*(_BYTE *)(*v4 + 89) ) goto LABEL_55; *((float *)&v58 + 1) = (double)*(unsigned int *)(v5 + 16); v6 = *v4; *((float *)&v56 + 1) = (double)*(unsigned int *)(v5 + 20); v46 = SHIDWORD(v58); v47 = SHIDWORD(v56); if ( v48 != *(_WORD *)(v6 + 4) || (_WORD)v57 != *(_WORD *)(v5 + 2) ) { v7 = (_WORD *)sub_56D9E0(0, 0, v1[208], v1[140], v1[192]); sub_5691A0(v7, *(_WORD *)(*(_DWORD *)LODWORD(v59) + 4)); sub_5691C0(v7, *(_WORD *)(v5 + 2)); sub_5691E0(v7, v46, v47); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v7 + 256))(v7, 0); v62 = 15; v61 = 0; LOBYTE(v60) = 0; v8 = *(_WORD *)(v5 + 2); v9 = *(_DWORD *)LODWORD(v59); LOBYTE(i) = 1; v10 = sub_6D0060(v45, v9, v8); v57 = (int)v10 + 1; sub_4018E0(&v60, v10, strlen((const char *)v10)); v11 = (const char *)v60; if ( v62 < 0x10 ) v11 = (const char *)&v60; v12 = v11; v13 = (void **)sub_570000(v7); sub_8F2EA0(v13, v12); v57 = dword_AD01E8; v14 = sub_570000(v7); *(_DWORD *)(v14 + 272) = v57; v15 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v1[200] + 4))(v1 + 200); v15[2] = v7; *v15 = 0; v15[1] = v1[202]; v16 = (_DWORD *)v1[202]; if ( v16 ) *v16 = v15; else v1[201] = v15; ++v1[203]; v17 = v59; v1[202] = v15; if ( v48 == *(_WORD *)(*(_DWORD *)LODWORD(v17) + 4) ) --v55; v18 = sub_8F3EB0(0, 0, *v55, v1[140], 0, 0); v19 = (int)v18; v20 = *(void (__thiscall **)(int, _DWORD))(*v18 + 240); v57 = v19; v20(v19, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v19 + 256))(v19, 1); v21 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v1[204] + 4))(v1 + 204); v21[2] = v19; *v21 = 0; v21[1] = v1[206]; v22 = (_DWORD *)v1[206]; if ( v22 ) *v22 = v21; else v1[205] = v21; ++v1[207]; ++v55; v23 = v62 < 0x10; v1[206] = v21; v48 = *(_WORD *)(*(_DWORD *)LODWORD(v59) + 4); v57 = *(unsigned __int16 *)(v5 + 2); LOBYTE(i) = 0; if ( !v23 ) operator delete(v60); } if ( v54 >= 0xC8 ) v24 = 0; else v24 = *v49; v25 = (_DWORD *)sub_56DB50(0, 0, v24, v1[140]); sub_5692B0(v25, v46, v47); sub_569290(v25, *(_WORD *)(v5 + 2)); sub_569270(v25, *(_WORD *)(*(_DWORD *)LODWORD(v59) + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v25 + 256))(v25, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v25 + 240))(v25, 0); *((float *)&v56 + 1) = (double)*(unsigned int *)(v5 + 24) * 0.02 / *((float *)v1 + 361) * *((float *)v1 + 145); *((float *)&v58 + 1) = (double)*(unsigned int *)(v5 + 28) * 0.02 / *((float *)v1 + 361) * *((float *)v1 + 146); v59 = 0.02 * (double)*(unsigned int *)(v5 + 32) / *((float *)v1 + 361) * *((float *)v1 + 145); v26 = *((float *)&v56 + 1); if ( 0.0 == *((float *)&v56 + 1) ) { v27 = *((float *)&v58 + 1); if ( *((float *)&v58 + 1) == 0.0 ) { if ( v59 < 40.0 ) v59 = 40.0; v58 = (signed __int64)v59; v28 = *v25; v59 = *(float *)&v58; (*(void (__thiscall **)(_DWORD *, _DWORD))(v28 + 152))(v25, v58); (*(void (__thiscall **)(_DWORD *, float))(*v25 + 156))(v25, COERCE_FLOAT(LODWORD(v59))); v29 = sub_570000(v25); (*(void (__thiscall **)(int, float))(*(_DWORD *)v29 + 468))(v29, COERCE_FLOAT(LODWORD(v59))); v30 = sub_570000(v25); v31 = v59; goto LABEL_41; } } else { v27 = *((float *)&v58 + 1); } if ( v26 < 40.0 ) { *((float *)&v56 + 1) = 40.0; v26 = (float)40.0; } if ( v27 < 40.0 ) *((float *)&v58 + 1) = 40.0; v56 = (signed __int64)v26; v32 = *v25; HIDWORD(v56) = (signed __int64)v26; (*(void (__thiscall **)(_DWORD *, _DWORD))(v32 + 152))(v25, HIDWORD(v56)); v58 = (signed __int64)*((float *)&v58 + 1); v33 = *v25; HIDWORD(v58) = v58; (*(void (__thiscall **)(_DWORD *, _DWORD))(v33 + 156))(v25, v58); v34 = sub_570000(v25); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v34 + 468))(v34, HIDWORD(v56)); v30 = sub_570000(v25); v31 = *((float *)&v58 + 1); LABEL_41: (*(void (__thiscall **)(int, float))(*(_DWORD *)v30 + 472))(v30, COERCE_FLOAT(LODWORD(v31))); v35 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v1[366] + 4))(v1 + 366); v35[2] = v25; *v35 = 0; v35[1] = v1[368]; v36 = (_DWORD *)v1[368]; if ( v36 ) *v36 = v35; else v1[367] = v35; v1[368] = v35; v37 = v51; ++v1[369]; if ( !v37 ) goto LABEL_49; while ( 1 ) { v38 = v37 + 2; v39 = v37; v37 = (_DWORD *)*v37; if ( v5 == *v38 ) break; if ( !v37 ) goto LABEL_49; } if ( !v39 ) { LABEL_49: v40 = (_DWORD *)((int (__thiscall *)(void ***))v50[1])(&v50); v40[2] = v5; *v40 = 0; v40[1] = v52; if ( v52 ) *v52 = v40; else v51 = v40; ++v53; v52 = v40; } ++v54; ++v49; goto LABEL_54; } LABEL_56: sub_521E30(&v50); sub_51D2D0((_DWORD **)v1); sub_51B0D0((char *)v1); sub_51AF90((char *)v1, v1[203] > 0u); result = (unsigned __int8 *)sub_51B5A0((float *)v1); v50 = &PgTList::`vftable'; v41 = v51; for ( i = 2; v41; result = (unsigned __int8 *)((int (__thiscall *)(void ***, _DWORD *))v50[2])(&v50, v42) ) { v42 = v41; v41 = (_DWORD *)*v41; } } return result; } // 9C60B4: using guessed type void *PgTList::`vftable'; // AB76B8: using guessed type int dword_AB76B8; // AD01E8: using guessed type int dword_AD01E8; //----- (0051E690) -------------------------------------------------------- char __thiscall sub_51E690(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi char result; // al unsigned int v4; // eax int v5; // edi int v6; // ebx int v7; // eax int v8; // edx _DWORD *v9; // ecx _DWORD *v10; // eax char v11; // al v2 = this; result = sub_464B60(this[333], a2, &a2); if ( result ) { v4 = a2; *((_WORD *)v2 + 706) = a2; v5 = dword_ACDA4C; v6 = (unsigned __int16)v4; if ( (*(unsigned __int8 (__thiscall **)(int, unsigned int))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, v4) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v8 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v8 + 4 * v6) ) v7 = *(_DWORD *)(v8 + 4 * v6); else v7 = 0; } else { v7 = 0; } } else { v7 = 0; } v2[343] = *(_DWORD **)(v7 + 2); v2[344] = *(_DWORD **)(v7 + 6); v2[345] = *(_DWORD **)(v7 + 10); sub_51AE90(v2); v9 = v2[334]; if ( v9 ) { v10 = v2[333]; if ( v10 ) { sub_4638F0(v9, v10[84]); v2[333][86] = v2[334][75]; sub_465130(v2[333]); } } v11 = sub_6981A0(byte_ADB468, (int)v2[343], (int)v2[344], (int)v2[345]); sub_51CC00(v2, v11); sub_51D2D0(v2); sub_51B0D0((char *)v2); result = (unsigned int)sub_51DF10(v2); } return result; } // ACDA4C: using guessed type int dword_ACDA4C; //----- (0051E7C0) -------------------------------------------------------- void __thiscall sub_51E7C0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int *v4; // eax int v5; // edi int v6; // eax int v7; // eax int v8; // ecx int v9; // edi char v10; // al int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] _DWORD *v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] v2 = this; sub_439D70(byte_ADB468, &v11); v15 = 0xFFFF; v14 = sub_6CF210(); if ( v14 ) { v3 = (_DWORD *)dword_AB76B8; if ( dword_AB76B8 ) { while ( 1 ) { v4 = (int *)v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { v5 = v4[1]; if ( v5 ) { v6 = *v4; if ( *(_WORD *)(v6 + 4) == a2 && sub_6CE960(v6, *(_WORD *)(v5 + 2)) ) { if ( (_WORD)v15 == -1 ) v15 = *(unsigned __int16 *)(v5 + 2); v7 = *(_DWORD *)(v5 + 4); v8 = *(_DWORD *)(v5 + 8); v9 = *(_DWORD *)(v5 + 12); v11 = v7; v12 = v8; v13 = v9; if ( v2[343] == v7 && v2[344] == v8 && v2[345] == v9 ) break; } } } if ( !v3 ) goto LABEL_13; } } else { LABEL_13: v9 = v13; v8 = v12; v7 = v11; } v2[343] = v7; v2[344] = v8; v2[345] = v9; v10 = sub_6981A0(byte_ADB468, v2[343], v8, v9); sub_51CC00(v2, v10); sub_51DF10(v2); sub_8F82A0(&unk_BA6B10, v2); sub_518A50(v2, a2, v15); } } // AB76B8: using guessed type int dword_AB76B8; //----- (0051E8E0) -------------------------------------------------------- void __userpurge sub_51E8E0(int a1@, int a2@, int a3, unsigned int a4) { char *v4; // esi char v5; // al v4 = (char *)a1; switch ( a3 ) { case 1: sub_8F2BC0((volatile LONG *)a1, 1, 0, 0); break; case 2: sub_519AA0((_DWORD **)a1); break; case 3: sub_517EC0((_DWORD **)a1); break; case 4: sub_517FD0((_DWORD **)a1); break; case 5: v5 = (*(int (**)(void))(**(_DWORD **)(a1 + 1340) + 260))(); sub_51AF90(v4, v5 == 0); break; case 6: sub_51AE90((_DWORD **)a1); break; case 7: sub_51E690((_DWORD **)a1, a4); break; case 8: sub_519DD0((_DWORD *)a1); break; case 9: sub_51BA90((char *)a1, a4); break; case 10: sub_51BAF0((char *)a1); break; case 12: sub_518E60(a1, a2); break; case 13: sub_518250(); break; default: return; } } //----- (0051E9D0) -------------------------------------------------------- char __thiscall sub_51E9D0(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // edi char *v5; // eax volatile LONG **v6; // eax int v7; // ebx volatile LONG **v8; // edi volatile LONG **v9; // eax int v10; // edi volatile LONG **v11; // ebx volatile LONG **v12; // eax int v13; // edi volatile LONG **v14; // ebx volatile LONG **v15; // eax int v16; // edi volatile LONG **v17; // ebx volatile LONG **v18; // eax int v19; // edi volatile LONG **v20; // ebx volatile LONG **v21; // eax int v22; // edi volatile LONG **v23; // ebx volatile LONG **v24; // eax int v25; // edi volatile LONG **v26; // ebx volatile LONG **v27; // eax int v28; // edi volatile LONG **v29; // ebx volatile LONG **v30; // eax int v31; // edi volatile LONG **v32; // ebx volatile LONG **v33; // eax int v34; // edi volatile LONG **v35; // ebx volatile LONG **v36; // eax int v37; // edi volatile LONG **v38; // ebx volatile LONG **v39; // eax int v40; // edi volatile LONG **v41; // ebx volatile LONG **v42; // eax int v43; // edi volatile LONG **v44; // ebx volatile LONG **v45; // eax int v46; // edi volatile LONG **v47; // ebx volatile LONG **v48; // eax int v49; // edi volatile LONG **v50; // ebx volatile LONG **v51; // eax int v52; // edi volatile LONG **v53; // ebx volatile LONG **v54; // eax int v55; // edi volatile LONG **v56; // ebx volatile LONG **v57; // eax int v58; // edi volatile LONG **v59; // ebx volatile LONG **v60; // eax int v61; // edi volatile LONG **v62; // ebx volatile LONG **v63; // eax int v64; // edi volatile LONG **v65; // ebx volatile LONG **v66; // eax int v67; // edi volatile LONG **v68; // ebx volatile LONG **v69; // eax int v70; // edi volatile LONG **v71; // ebx volatile LONG **v72; // eax int v73; // edi volatile LONG **v74; // ebx volatile LONG **v75; // eax int v76; // edi volatile LONG **v77; // ebx volatile LONG **v78; // eax int v79; // edi volatile LONG **v80; // ebx volatile LONG **v81; // eax int v82; // edi volatile LONG **v83; // ebx volatile LONG **v84; // eax int v85; // edi volatile LONG **v86; // ebx volatile LONG **v87; // eax int v88; // edi volatile LONG **v89; // ebx volatile LONG **v90; // eax int v91; // edi volatile LONG **v92; // ebx volatile LONG **v93; // eax int v94; // edi volatile LONG **v95; // ebx volatile LONG **v96; // eax int v97; // edi volatile LONG **v98; // ebx volatile LONG **v99; // eax int v100; // edi volatile LONG **v101; // ebx volatile LONG **v102; // eax int v103; // edi volatile LONG **v104; // ebx volatile LONG **v105; // eax int v106; // edi volatile LONG **v107; // ebx volatile LONG **v108; // eax int v109; // edi volatile LONG **v110; // ebx volatile LONG **v111; // eax int v112; // edi volatile LONG **v113; // ebx volatile LONG **v114; // eax int v115; // edi volatile LONG **v116; // ebx volatile LONG **v117; // eax int v118; // edi volatile LONG **v119; // ebx volatile LONG **v120; // eax int v121; // edi volatile LONG **v122; // ebx volatile LONG **v123; // eax void (__thiscall ***v124)(_DWORD, signed int); // esi volatile LONG **v126; // eax volatile LONG *v127; // eax volatile LONG **v128; // ebx volatile LONG *v129; // edi volatile LONG **v130; // edi int v131; // eax volatile LONG *v132; // eax volatile LONG **v133; // eax _WORD *v134; // edi _DWORD *v135; // eax _DWORD *v136; // eax _DWORD *v137; // eax _DWORD *v138; // eax _DWORD *v139; // eax float v140; // eax _WORD *v141; // eax _DWORD *v142; // ecx volatile LONG **v143; // eax int v144; // eax const char *v145; // eax void *v146; // ecx int v147; // eax int v148; // ST18C_4 int v149; // eax int v150; // edx volatile LONG **v151; // eax volatile LONG *v152; // eax _DWORD *v153; // ebx volatile LONG **v154; // edi volatile LONG *v155; // edi const char *v156; // eax volatile LONG **v157; // edi const char *v158; // eax signed int v159; // edi int v160; // ebx char *v161; // eax volatile LONG **v162; // eax volatile LONG *v163; // eax char *v164; // eax volatile LONG **v165; // eax volatile LONG **v166; // eax volatile LONG *v167; // eax volatile LONG **v168; // eax volatile LONG *v169; // eax CHAR *v170; // eax CHAR *v171; // eax CHAR *v172; // eax CHAR *v173; // eax CHAR *v174; // eax CHAR *v175; // eax CHAR *v176; // eax CHAR *v177; // eax CHAR *v178; // eax CHAR *v179; // eax CHAR *v180; // eax CHAR *v181; // eax CHAR *v182; // eax CHAR *v183; // eax CHAR *v184; // eax CHAR *v185; // eax CHAR *v186; // eax int v187; // edi int v188; // ebx char *v189; // eax volatile LONG *v190; // ecx int v191; // ebx int v192; // eax volatile LONG *v193; // eax float v194; // eax int v195; // eax volatile LONG *v196; // eax int v197; // edi int v198; // eax int v199; // edi const CHAR *v200; // eax volatile LONG **v201; // edi const char *v202; // eax volatile LONG **v203; // edi const char *v204; // eax volatile LONG **v205; // eax int v206; // edi volatile LONG **v207; // ebx unsigned int v208; // eax int v209; // edi char *v210; // eax volatile LONG **v211; // eax int v212; // edi volatile LONG **v213; // ebx volatile LONG *v214; // eax volatile LONG ***v215; // edi signed int v216; // ebx signed int v217; // edi int v218; // ebx char *v219; // eax volatile LONG **v220; // eax volatile LONG *v221; // eax _DWORD *v222; // edi int *v223; // edi _DWORD *v224; // edi _DWORD *v225; // edi void *v226; // edi volatile LONG **v227; // ebx int v228; // eax float *v229; // eax volatile LONG **v230; // eax int v231; // eax int *v232; // eax int v233; // ebx int v234; // edi int v235; // eax int v236; // eax volatile LONG **v237; // edi const char *v238; // eax volatile LONG **v239; // edi const char *v240; // eax signed int v241; // edi volatile LONG **v242; // ebx volatile LONG **v243; // eax char *v244; // eax volatile LONG **v245; // eax volatile LONG **v246; // edi volatile LONG *v247; // ebx const char *v248; // eax volatile LONG **v249; // eax volatile LONG *v250; // eax volatile LONG v251; // edx int v252; // edi unsigned int v253; // eax int v254; // edx int v255; // ecx int v256; // ebx unsigned int v257; // eax unsigned int v258; // ecx char *v259; // ecx _DWORD *v260; // ebx _DWORD *v261; // eax int v262; // ecx unsigned int v263; // eax unsigned int v264; // ecx char *v265; // ecx float *v266; // eax float v267; // eax unsigned int v268; // eax _BYTE *v269; // ebx int v270; // ecx int v271; // edx unsigned int v272; // eax unsigned int v273; // eax unsigned int v274; // ecx char *v275; // ecx _DWORD *v276; // edx _DWORD *v277; // eax int v278; // ecx unsigned int v279; // eax unsigned int v280; // eax unsigned int v281; // ecx char *v282; // ecx float *v283; // eax signed int v284; // edi int v285; // ebx char *v286; // eax volatile LONG **v287; // eax volatile LONG *v288; // eax void *v289; // edi _DWORD *v290; // edi int *v291; // edi _DWORD *v292; // edi volatile LONG *v293; // edi volatile LONG **v294; // eax volatile LONG *v295; // eax volatile LONG **v296; // edi void **v297; // eax void **v298; // eax void **v299; // eax void **v300; // eax void **v301; // eax void **v302; // eax int v303; // eax int *v304; // eax int v305; // ebx int v306; // edi int v307; // eax int v308; // eax int v309; // ecx double v310; // st7 volatile LONG *v311; // edx _DWORD *v312; // ebx unsigned int v313; // edi unsigned int v314; // esi double v315; // st7 int v316; // ecx void (__thiscall ***v317)(_DWORD, signed int); // esi void *v318; // [esp+1B0h] [ebp-2A8h] void *v319; // [esp+1B4h] [ebp-2A4h] int v320; // [esp+1B8h] [ebp-2A0h] char v321; // [esp+1BCh] [ebp-29Ch] char v322; // [esp+1C0h] [ebp-298h] int v323; // [esp+1C4h] [ebp-294h] int v324; // [esp+1C8h] [ebp-290h] int v325; // [esp+1CCh] [ebp-28Ch] int v326; // [esp+1D0h] [ebp-288h] int v327; // [esp+1D4h] [ebp-284h] int v328; // [esp+1D8h] [ebp-280h] int v329; // [esp+1DCh] [ebp-27Ch] void *v330; // [esp+1E0h] [ebp-278h] unsigned int v331; // [esp+1E4h] [ebp-274h] float v332; // [esp+1E8h] [ebp-270h] void *v333; // [esp+1ECh] [ebp-26Ch] int v334; // [esp+1F0h] [ebp-268h] int v335; // [esp+1F4h] [ebp-264h] int v336; // [esp+1F8h] [ebp-260h] void *v337; // [esp+1FCh] [ebp-25Ch] int v338; // [esp+20Ch] [ebp-24Ch] unsigned int v339; // [esp+210h] [ebp-248h] char v340; // [esp+218h] [ebp-240h] char v341; // [esp+234h] [ebp-224h] char v342; // [esp+250h] [ebp-208h] char v343; // [esp+26Ch] [ebp-1ECh] char v344; // [esp+288h] [ebp-1D0h] char v345; // [esp+2A4h] [ebp-1B4h] char v346; // [esp+2C0h] [ebp-198h] char v347; // [esp+2DCh] [ebp-17Ch] char v348; // [esp+2F8h] [ebp-160h] char v349; // [esp+314h] [ebp-144h] char v350; // [esp+330h] [ebp-128h] char v351; // [esp+34Ch] [ebp-10Ch] char v352; // [esp+368h] [ebp-F0h] char v353; // [esp+384h] [ebp-D4h] char v354; // [esp+3A0h] [ebp-B8h] char v355; // [esp+3BCh] [ebp-9Ch] char v356; // [esp+3D8h] [ebp-80h] int v357; // [esp+454h] [ebp-4h] v3 = (int)this; v329 = a3; v336 = 0; v357 = 0; if ( !a2 ) return 0; this[101] = a2; v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\MinimapFull.nif"); sub_8F66B0(v5, (int)&v336, v4); if ( !v336 ) return 0; v6 = sub_8FB140(v336, (int)"AutoRunTarget", (int)&v335, (int)&v334, 0); v7 = *(_DWORD *)(v3 + 768); v8 = v6; if ( (volatile LONG **)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v3 + 768) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)v8 + 1); } v9 = sub_8FB140(v336, (int)"NPCLink", (int)&v335, (int)&v334, 0); v10 = *(_DWORD *)(v3 + 488); v11 = v9; if ( (volatile LONG **)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *(_DWORD *)(v3 + 488) = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); } v12 = sub_8FB140(v336, (int)"NPCSoulStone", (int)&v335, (int)&v334, 0); v13 = *(_DWORD *)(v3 + 412); v14 = v12; if ( (volatile LONG **)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(v3 + 412) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)v14 + 1); } v15 = sub_8FB140(v336, (int)"NPCGuild", (int)&v335, (int)&v334, 0); v16 = *(_DWORD *)(v3 + 416); v17 = v15; if ( (volatile LONG **)v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v3 + 416) = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)v17 + 1); } v18 = sub_8FB140(v336, (int)"NPCQuest", (int)&v335, (int)&v334, 0); v19 = *(_DWORD *)(v3 + 420); v20 = v18; if ( (volatile LONG **)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *(_DWORD *)(v3 + 420) = v20; if ( v20 ) InterlockedIncrement((volatile LONG *)v20 + 1); } v21 = sub_8FB140(v336, (int)"NPCStore", (int)&v335, (int)&v334, 0); v22 = *(_DWORD *)(v3 + 424); v23 = v21; if ( (volatile LONG **)v22 != v21 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); *(_DWORD *)(v3 + 424) = v23; if ( v23 ) InterlockedIncrement((volatile LONG *)v23 + 1); } v24 = sub_8FB140(v336, (int)"NPCKingdom", (int)&v335, (int)&v334, 0); v25 = *(_DWORD *)(v3 + 428); v26 = v24; if ( (volatile LONG **)v25 != v24 ) { if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); *(_DWORD *)(v3 + 428) = v26; if ( v26 ) InterlockedIncrement((volatile LONG *)v26 + 1); } v27 = sub_8FB140(v336, (int)"NPCMine", (int)&v335, (int)&v334, 0); v28 = *(_DWORD *)(v3 + 432); v29 = v27; if ( (volatile LONG **)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *(_DWORD *)(v3 + 432) = v29; if ( v29 ) InterlockedIncrement((volatile LONG *)v29 + 1); } v30 = sub_8FB140(v336, (int)"NPCFurniture", (int)&v335, (int)&v334, 0); v31 = *(_DWORD *)(v3 + 436); v32 = v30; if ( (volatile LONG **)v31 != v30 ) { if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); *(_DWORD *)(v3 + 436) = v32; if ( v32 ) InterlockedIncrement((volatile LONG *)v32 + 1); } v33 = sub_8FB140(v336, (int)"NPCSmith", (int)&v335, (int)&v334, 0); v34 = *(_DWORD *)(v3 + 440); v35 = v33; if ( (volatile LONG **)v34 != v33 ) { if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); *(_DWORD *)(v3 + 440) = v35; if ( v35 ) InterlockedIncrement((volatile LONG *)v35 + 1); } v36 = sub_8FB140(v336, (int)"NPCSkill", (int)&v335, (int)&v334, 0); v37 = *(_DWORD *)(v3 + 444); v38 = v36; if ( (volatile LONG **)v37 != v36 ) { if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); *(_DWORD *)(v3 + 444) = v38; if ( v38 ) InterlockedIncrement((volatile LONG *)v38 + 1); } v39 = sub_8FB140(v336, (int)"NPCHelp", (int)&v335, (int)&v334, 0); v40 = *(_DWORD *)(v3 + 448); v41 = v39; if ( (volatile LONG **)v40 != v39 ) { if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v40 ) (**(void (__thiscall ***)(int, signed int))v40)(v40, 1); *(_DWORD *)(v3 + 448) = v41; if ( v41 ) InterlockedIncrement((volatile LONG *)v41 + 1); } v42 = sub_8FB140(v336, (int)"NPCTempler", (int)&v335, (int)&v334, 0); v43 = *(_DWORD *)(v3 + 452); v44 = v42; if ( (volatile LONG **)v43 != v42 ) { if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v43 ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); *(_DWORD *)(v3 + 452) = v44; if ( v44 ) InterlockedIncrement((volatile LONG *)v44 + 1); } v45 = sub_8FB140(v336, (int)"NPCItem", (int)&v335, (int)&v334, 0); v46 = *(_DWORD *)(v3 + 456); v47 = v45; if ( (volatile LONG **)v46 != v45 ) { if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) && v46 ) (**(void (__thiscall ***)(int, signed int))v46)(v46, 1); *(_DWORD *)(v3 + 456) = v47; if ( v47 ) InterlockedIncrement((volatile LONG *)v47 + 1); } v48 = sub_8FB140(v336, (int)"NPCNormal", (int)&v335, (int)&v334, 0); v49 = *(_DWORD *)(v3 + 460); v50 = v48; if ( (volatile LONG **)v49 != v48 ) { if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v49 ) (**(void (__thiscall ***)(int, signed int))v49)(v49, 1); *(_DWORD *)(v3 + 460) = v50; if ( v50 ) InterlockedIncrement((volatile LONG *)v50 + 1); } v51 = sub_8FB140(v336, (int)"NPCWtitle", (int)&v335, (int)&v334, 0); v52 = *(_DWORD *)(v3 + 464); v53 = v51; if ( (volatile LONG **)v52 != v51 ) { if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 ) (**(void (__thiscall ***)(int, signed int))v52)(v52, 1); *(_DWORD *)(v3 + 464) = v53; if ( v53 ) InterlockedIncrement((volatile LONG *)v53 + 1); } v54 = sub_8FB140(v336, (int)"NPCQuestING", (int)&v335, (int)&v334, 0); v55 = *(_DWORD *)(v3 + 468); v56 = v54; if ( (volatile LONG **)v55 != v54 ) { if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) && v55 ) (**(void (__thiscall ***)(int, signed int))v55)(v55, 1); *(_DWORD *)(v3 + 468) = v56; if ( v56 ) InterlockedIncrement((volatile LONG *)v56 + 1); } v57 = sub_8FB140(v336, (int)"NPCQuest", (int)&v335, (int)&v334, 0); v58 = *(_DWORD *)(v3 + 472); v59 = v57; if ( (volatile LONG **)v58 != v57 ) { if ( v58 && !InterlockedDecrement((volatile LONG *)(v58 + 4)) && v58 ) (**(void (__thiscall ***)(int, signed int))v58)(v58, 1); *(_DWORD *)(v3 + 472) = v59; if ( v59 ) InterlockedIncrement((volatile LONG *)v59 + 1); } v60 = sub_8FB140(v336, (int)"NPCQuestEND", (int)&v335, (int)&v334, 0); v61 = *(_DWORD *)(v3 + 476); v62 = v60; if ( (volatile LONG **)v61 != v60 ) { if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v61 ) (**(void (__thiscall ***)(int, signed int))v61)(v61, 1); *(_DWORD *)(v3 + 476) = v62; if ( v62 ) InterlockedIncrement((volatile LONG *)v62 + 1); } v63 = sub_8FB140(v336, (int)"NPCLinkTown", (int)&v335, (int)&v334, 0); v64 = *(_DWORD *)(v3 + 492); v65 = v63; if ( (volatile LONG **)v64 != v63 ) { if ( v64 && !InterlockedDecrement((volatile LONG *)(v64 + 4)) && v64 ) (**(void (__thiscall ***)(int, signed int))v64)(v64, 1); *(_DWORD *)(v3 + 492) = v65; if ( v65 ) InterlockedIncrement((volatile LONG *)v65 + 1); } v66 = sub_8FB140(v336, (int)"NPCQuestLowLevel", (int)&v335, (int)&v334, 0); v67 = *(_DWORD *)(v3 + 480); v68 = v66; if ( (volatile LONG **)v67 != v66 ) { if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v67 ) (**(void (__thiscall ***)(int, signed int))v67)(v67, 1); *(_DWORD *)(v3 + 480) = v68; if ( v68 ) InterlockedIncrement((volatile LONG *)v68 + 1); } v69 = sub_8FB140(v336, (int)"Party", (int)&v335, (int)&v334, 0); v70 = *(_DWORD *)(v3 + 408); v71 = v69; if ( (volatile LONG **)v70 != v69 ) { if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) && v70 ) (**(void (__thiscall ***)(int, signed int))v70)(v70, 1); *(_DWORD *)(v3 + 408) = v71; if ( v71 ) InterlockedIncrement((volatile LONG *)v71 + 1); } v72 = sub_8FB140(v336, (int)"Me01", (int)&v335, (int)&v334, 0); v73 = *(_DWORD *)(v3 + 484); v74 = v72; if ( (volatile LONG **)v73 != v72 ) { if ( v73 && !InterlockedDecrement((volatile LONG *)(v73 + 4)) && v73 ) (**(void (__thiscall ***)(int, signed int))v73)(v73, 1); *(_DWORD *)(v3 + 484) = v74; if ( v74 ) InterlockedIncrement((volatile LONG *)v74 + 1); } v75 = sub_8FB140(v336, (int)"MiniHouse", (int)&v335, (int)&v334, 0); v76 = *(_DWORD *)(v3 + 496); v77 = v75; if ( (volatile LONG **)v76 != v75 ) { if ( v76 && !InterlockedDecrement((volatile LONG *)(v76 + 4)) && v76 ) (**(void (__thiscall ***)(int, signed int))v76)(v76, 1); *(_DWORD *)(v3 + 496) = v77; if ( v77 ) InterlockedIncrement((volatile LONG *)v77 + 1); } v78 = sub_8FB140(v336, (int)"Me02", (int)&v335, (int)&v334, 0); v79 = *(_DWORD *)(v3 + 500); v80 = v78; if ( (volatile LONG **)v79 != v78 ) { if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) && v79 ) (**(void (__thiscall ***)(int, signed int))v79)(v79, 1); *(_DWORD *)(v3 + 500) = v80; if ( v80 ) InterlockedIncrement((volatile LONG *)v80 + 1); } v81 = sub_8FB140(v336, (int)"GuilWarFlag_Yellow", (int)&v335, (int)&v334, 0); v82 = *(_DWORD *)(v3 + 536); v83 = v81; if ( (volatile LONG **)v82 != v81 ) { if ( v82 && !InterlockedDecrement((volatile LONG *)(v82 + 4)) && v82 ) (**(void (__thiscall ***)(int, signed int))v82)(v82, 1); *(_DWORD *)(v3 + 536) = v83; if ( v83 ) InterlockedIncrement((volatile LONG *)v83 + 1); } v84 = sub_8FB140(v336, (int)"GuilWarFlag_Red", (int)&v335, (int)&v334, 0); v85 = *(_DWORD *)(v3 + 540); v86 = v84; if ( (volatile LONG **)v85 != v84 ) { if ( v85 && !InterlockedDecrement((volatile LONG *)(v85 + 4)) && v85 ) (**(void (__thiscall ***)(int, signed int))v85)(v85, 1); *(_DWORD *)(v3 + 540) = v86; if ( v86 ) InterlockedIncrement((volatile LONG *)v86 + 1); } v87 = sub_8FB140(v336, (int)"GuilWarFlag_Blue", (int)&v335, (int)&v334, 0); v88 = *(_DWORD *)(v3 + 544); v89 = v87; if ( (volatile LONG **)v88 != v87 ) { if ( v88 && !InterlockedDecrement((volatile LONG *)(v88 + 4)) && v88 ) (**(void (__thiscall ***)(int, signed int))v88)(v88, 1); *(_DWORD *)(v3 + 544) = v89; if ( v89 ) InterlockedIncrement((volatile LONG *)v89 + 1); } v90 = sub_8FB140(v336, (int)"WarpGray", (int)&v335, (int)&v334, 0); v91 = *(_DWORD *)(v3 + 556); v92 = v90; if ( (volatile LONG **)v91 != v90 ) { if ( v91 && !InterlockedDecrement((volatile LONG *)(v91 + 4)) && v91 ) (**(void (__thiscall ***)(int, signed int))v91)(v91, 1); *(_DWORD *)(v3 + 556) = v92; if ( v92 ) InterlockedIncrement((volatile LONG *)v92 + 1); } v93 = sub_8FB140(v336, (int)"WarpRed", (int)&v335, (int)&v334, 0); v94 = *(_DWORD *)(v3 + 548); v95 = v93; if ( (volatile LONG **)v94 != v93 ) { if ( v94 && !InterlockedDecrement((volatile LONG *)(v94 + 4)) && v94 ) (**(void (__thiscall ***)(int, signed int))v94)(v94, 1); *(_DWORD *)(v3 + 548) = v95; if ( v95 ) InterlockedIncrement((volatile LONG *)v95 + 1); } v96 = sub_8FB140(v336, (int)"WarpBlue", (int)&v335, (int)&v334, 0); v97 = *(_DWORD *)(v3 + 552); v98 = v96; if ( (volatile LONG **)v97 != v96 ) { if ( v97 && !InterlockedDecrement((volatile LONG *)(v97 + 4)) && v97 ) (**(void (__thiscall ***)(int, signed int))v97)(v97, 1); *(_DWORD *)(v3 + 552) = v98; if ( v98 ) InterlockedIncrement((volatile LONG *)v98 + 1); } v99 = sub_8FB140(v336, (int)"ForceRed", (int)&v335, (int)&v334, 0); v100 = *(_DWORD *)(v3 + 2288); v101 = v99; if ( (volatile LONG **)v100 != v99 ) { if ( v100 && !InterlockedDecrement((volatile LONG *)(v100 + 4)) && v100 ) (**(void (__thiscall ***)(int, signed int))v100)(v100, 1); *(_DWORD *)(v3 + 2288) = v101; if ( v101 ) InterlockedIncrement((volatile LONG *)v101 + 1); } v102 = sub_8FB140(v336, (int)"ForceBlue", (int)&v335, (int)&v334, 0); v103 = *(_DWORD *)(v3 + 2292); v104 = v102; if ( (volatile LONG **)v103 != v102 ) { if ( v103 && !InterlockedDecrement((volatile LONG *)(v103 + 4)) && v103 ) (**(void (__thiscall ***)(int, signed int))v103)(v103, 1); *(_DWORD *)(v3 + 2292) = v104; if ( v104 ) InterlockedIncrement((volatile LONG *)v104 + 1); } v105 = sub_8FB140(v336, (int)"ChiefMonster", (int)&v335, (int)&v334, 0); v106 = *(_DWORD *)(v3 + 776); v107 = v105; if ( (volatile LONG **)v106 != v105 ) { if ( v106 && !InterlockedDecrement((volatile LONG *)(v106 + 4)) && v106 ) (**(void (__thiscall ***)(int, signed int))v106)(v106, 1); *(_DWORD *)(v3 + 776) = v107; if ( v107 ) InterlockedIncrement((volatile LONG *)v107 + 1); } v108 = sub_8FB140(v336, (int)"NormalMonster", (int)&v335, (int)&v334, 0); v109 = *(_DWORD *)(v3 + 780); v110 = v108; if ( (volatile LONG **)v109 != v108 ) { if ( v109 && !InterlockedDecrement((volatile LONG *)(v109 + 4)) && v109 ) (**(void (__thiscall ***)(int, signed int))v109)(v109, 1); *(_DWORD *)(v3 + 780) = v110; if ( v110 ) InterlockedIncrement((volatile LONG *)v110 + 1); } v111 = sub_8FB140(v336, (int)"Broken", (int)&v335, (int)&v334, 0); v112 = *(_DWORD *)(v3 + 784); v113 = v111; if ( (volatile LONG **)v112 != v111 ) { if ( v112 && !InterlockedDecrement((volatile LONG *)(v112 + 4)) && v112 ) (**(void (__thiscall ***)(int, signed int))v112)(v112, 1); *(_DWORD *)(v3 + 784) = v113; if ( v113 ) InterlockedIncrement((volatile LONG *)v113 + 1); } v114 = sub_8FB140(v336, (int)"RedWood", (int)&v335, (int)&v334, 0); v115 = *(_DWORD *)(v3 + 788); v116 = v114; if ( (volatile LONG **)v115 != v114 ) { if ( v115 && !InterlockedDecrement((volatile LONG *)(v115 + 4)) && v115 ) (**(void (__thiscall ***)(int, signed int))v115)(v115, 1); *(_DWORD *)(v3 + 788) = v116; if ( v116 ) InterlockedIncrement((volatile LONG *)v116 + 1); } v117 = sub_8FB140(v336, (int)"BlueWood", (int)&v335, (int)&v334, 0); v118 = *(_DWORD *)(v3 + 792); v119 = v117; if ( (volatile LONG **)v118 != v117 ) { if ( v118 && !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v118 ) (**(void (__thiscall ***)(int, signed int))v118)(v118, 1); *(_DWORD *)(v3 + 792) = v119; if ( v119 ) InterlockedIncrement((volatile LONG *)v119 + 1); } v120 = sub_8FB140(v336, (int)"Flag", (int)&v335, (int)&v334, 0); v121 = *(_DWORD *)(v3 + 796); v122 = v120; if ( (volatile LONG **)v121 != v120 ) { if ( v121 && !InterlockedDecrement((volatile LONG *)(v121 + 4)) && v121 ) (**(void (__thiscall ***)(int, signed int))v121)(v121, 1); *(_DWORD *)(v3 + 796) = v122; if ( v122 ) InterlockedIncrement((volatile LONG *)v122 + 1); } v123 = sub_8FB140(v336, (int)"Frame", (int)&v335, (int)&v334, 0); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v123, 0, v329, (int)"FullMapWin", 0) ) { v124 = (void (__thiscall ***)(_DWORD, signed int))v336; v357 = -1; if ( v336 && !InterlockedDecrement((volatile LONG *)(v336 + 4)) ) { if ( v124 ) (**v124)(v124, 1); } return 0; } v328 = v335; v327 = v334; v126 = sub_8FB140(v336, (int)"Panel01", (int)&v335, (int)&v334, 0); v127 = sub_8F3EB0(v335, v334, (int)v126, v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v127 + 240))(v127, 0); v128 = sub_8FB140(v336, (int)"ClsNor", (int)&v335, (int)&v334, 0); sub_8FB650(v128, v336, (int)"ClsClick"); sub_8FB650(v128, v336, (int)"ClsOver"); *(float *)&v333 = COERCE_FLOAT(sub_8FE0F0(v335, v334, (int)v128, v3, 1, 0, 0)); v329 = v3 + 2324; sub_5B3CF0((_DWORD *)(v3 + 2324), &v333); v129 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("HelpLinkNor") ) { v130 = sub_8FB140(v336, (int)"HelpLinkNor", (int)&v335, (int)&v334, v129); sub_8FB650(v130, v336, (int)"HelpLinkClick"); sub_8FB650(v130, v336, (int)"HelpLinkOver"); *(float *)&v333 = COERCE_FLOAT(sub_8FE0F0(v335, v334, (int)v130, v3, 13, 0, 0)); sub_5B3CF0((_DWORD *)(v3 + 2324), &v333); } sub_8F71E0(v336, (int)"WinTitle", &v335, &v334, &v328, &v327); v131 = sub_421050(0); v132 = sub_8F4A20(v335, v334, v328, v327, v131, v3, 0, 0); *(_DWORD *)(v3 + 400) = v132; (*(void (__thiscall **)(volatile LONG *, signed int))(*v132 + 488))(v132, 1); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 400) + 472))(&unk_9C55F9); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 400) + 240))(0); (*(void (__stdcall **)(int *))(**(_DWORD **)(v3 + 400) + 468))(&dword_AA8D98); v133 = sub_8FB140(v336, (int)"Gride_Num", (int)&v335, (int)&v334, 0); *(_DWORD *)(v3 + 684) = sub_8F3EB0(v335, v334, (int)v133, v3, 0, 0); sub_8F71E0(v336, (int)"fullmap", &v335, &v334, &v328, &v327); *(_DWORD *)(v3 + 560) = sub_8F1D90(v335, v334, v328, v327, v3, 0, 0); v134 = sub_8F5E10(1u, 1u, 0, 0, 1u, 1u); v135 = operator new(0xC4u); v330 = v135; LOBYTE(v357) = 1; if ( v135 ) v136 = sub_868C00(v135, (int)v134); else v136 = 0; LOBYTE(v357) = 0; sub_56FF80((_DWORD *)(v3 + 564), (int)v136); v137 = operator new(0x44u); v330 = v137; LOBYTE(v357) = 2; if ( v137 ) v138 = sub_863BB0(v137); else v138 = 0; LOBYTE(v357) = 0; sub_56FF80((_DWORD *)(v3 + 568), (int)v138); sub_42AB40(*(_DWORD **)(v3 + 568), 0); v139 = (_DWORD *)sub_51CAA0(v335, v334, v328, v327, v3, 0, 0); *(_DWORD *)(v3 + 2320) = v139; sub_51A4E0(v139); sub_403700(*(_DWORD **)(v3 + 564), *(_DWORD *)(*(_DWORD *)(v3 + 2320) + 288)); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 560) + 116))(*(_DWORD *)(v3 + 2320), 0); v140 = COERCE_FLOAT(operator new(0x20u)); *(float *)&v333 = v140; LOBYTE(v357) = 3; if ( v140 == 0.0 ) { v141 = 0; } else { sub_85B2B0((_DWORD *)LODWORD(v140)); v141 = v333; *(_DWORD *)v333 = &NiAlphaProperty::`vftable'; v141[14] = 236; *((_BYTE *)v141 + 30) = 0; } v141[14] = v141[14] & 0xFEED | 0xED; v142 = *(_DWORD **)(v3 + 564); LOBYTE(v357) = 0; sub_403700(v142, (int)v141); *(float *)&v143 = COERCE_FLOAT(sub_8FB140(v336, (int)"MovingPoint", (int)&v335, (int)&v334, 0)); v333 = v143; v144 = sub_464310(v336, (int)"AlphaOptBar", "AlphaOptBarLow", "AlphaOptBarHigh", (int)v143, 11, (_DWORD *)v3); *(_DWORD *)(v3 + 2316) = v144; *(_DWORD *)(v144 + 312) = 12; sub_4638F0(*(_DWORD **)(v3 + 2316), 100); *(float *)&v333 = COERCE_FLOAT(sub_8F3EB0(v335, v334, (int)v333, v3, 0, 0)); v145 = sub_40A910(1922602182); sub_8F2EA0((void **)v333, v145); v146 = v333; *((_DWORD *)v333 + 68) = dword_AD01E8; sub_442AC0(*(_DWORD **)(*(_DWORD *)(v3 + 2316) + 292), (int)v146); sub_45C760(*(_DWORD ***)(v3 + 568), 1); *(_DWORD *)(*(_DWORD *)(v3 + 568) + 28) = 2; sub_470EE0(*(_DWORD ***)(v3 + 568), 0); sub_403700(*(_DWORD **)(v3 + 564), *(_DWORD *)(v3 + 568)); sub_85C4D0(*(_DWORD **)(v3 + 564)); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 560) + 116))(*(_DWORD *)(v3 + 564), 0); v147 = sub_56D490(0, 0, *(_DWORD *)(v3 + 484), *(_DWORD *)(v3 + 560)); v148 = *(_DWORD *)(v3 + 560); *(_DWORD *)(v3 + 344) = v147; v149 = sub_56D490(0, 0, *(_DWORD *)(v3 + 500), v148); v150 = v336; *(_DWORD *)(v3 + 532) = v149; v151 = sub_8FB140(v150, (int)"Panel02", (int)&v335, (int)&v334, 0); *(float *)&v152 = COERCE_FLOAT(sub_8F3EB0(v335, v334, (int)v151, v3, 0, 0)); v153 = (_DWORD *)v329; v333 = (void *)v152; sub_5B3CF0((_DWORD *)v329, &v333); v154 = sub_8FB140(v336, (int)"GridNor", (int)&v335, (int)&v334, 0); sub_8FB650(v154, v336, (int)"GridClick"); sub_8FB650(v154, v336, (int)"GridOver"); *(float *)&v155 = COERCE_FLOAT(sub_8FE0F0(v335, v334, (int)v154, v3, 3, 0, 0)); v156 = sub_40C190(-1701024794); sub_8F2EA0((void **)v155, v156); *((_DWORD *)v155 + 68) = dword_AD01E8; v333 = (void *)v155; sub_5B3CF0(v153, &v333); v157 = sub_8FB140(v336, (int)"AllMapBtnNor", (int)&v335, (int)&v334, 0); sub_8FB650(v157, v336, (int)"AllMapBtnClick"); sub_8FB650(v157, v336, (int)"AllMapBtnOver"); *(_DWORD *)(v3 + 592) = sub_8FE0F0(v335, v334, (int)v157, v3, 2, 0, 0); v158 = sub_40C190(-95738556); sub_8F2EA0(*(void ***)(v3 + 592), v158); *(_DWORD *)(*(_DWORD *)(v3 + 592) + 272) = dword_AD01E8; v159 = 0; do { v160 = v336; if ( v159 >= 10 ) { v164 = sub_7549E0("Grid%d", v159 + 1); } else { if ( v159 == 9 ) { v161 = sub_7549E0("Grid%d", 10); v162 = sub_8FB140(v160, (int)v161, (int)&v335, (int)&v334, 0); v163 = sub_8F3EB0(v335, v334, (int)v162, v3, 0, 0); *(_DWORD *)(v3 + 632) = v163; goto LABEL_302; } v164 = sub_7549E0("Grid0%d", v159 + 1); } v165 = sub_8FB140(v160, (int)v164, (int)&v335, (int)&v334, 0); v163 = sub_8F3EB0(v335, v334, (int)v165, v3, 0, 0); *(_DWORD *)(v3 + 4 * v159 + 596) = v163; LABEL_302: (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v163 + 256))(v163, 0); ++v159; } while ( v159 < 22 ); v166 = sub_8FB140(v336, (int)"Panel06", (int)&v335, (int)&v334, 0); v167 = sub_8F3EB0(v335, v334, (int)v166, v3, 0, 0); *(_DWORD *)(v3 + 1364) = v167; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v167 + 240))(v167, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1364) + 256))(0); v168 = sub_8FB140(v336, (int)"Panel05", (int)&v335, (int)&v334, 0); v169 = sub_8F3EB0(v335, v334, (int)v168, v3, 0, 0); *(_DWORD *)(v3 + 1368) = v169; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v169 + 240))(v169, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1368) + 256))(0); `eh vector constructor iterator'(&v340, 0x1Cu, 20, sub_401C00, sub_636A10); LOBYTE(v357) = 4; v170 = (CHAR *)sub_40A910(-500424943); sub_4018E0(&v340, v170, strlen(v170)); v171 = (CHAR *)sub_40A910(961098796); sub_4018E0(&v341, v171, strlen(v171)); v172 = (CHAR *)sub_40A910(-691480541); sub_4018E0(&v342, v172, strlen(v172)); v173 = (CHAR *)sub_40A910(-925304894); sub_4018E0(&v343, v173, strlen(v173)); v174 = (CHAR *)sub_40A910(1028013183); sub_4018E0(&v344, v174, strlen(v174)); v175 = (CHAR *)sub_40A910(-925307434); sub_4018E0(&v345, v175, strlen(v175)); v176 = (CHAR *)sub_40A910(893290097); sub_4018E0(&v346, v176, strlen(v176)); v177 = (CHAR *)sub_40A910(-355065592); sub_4018E0(&v347, v177, strlen(v177)); v178 = (CHAR *)sub_40A910(-756427053); sub_4018E0(&v348, v178, strlen(v178)); v179 = (CHAR *)sub_40A910(-516746998); sub_4018E0(&v349, v179, strlen(v179)); v180 = (CHAR *)sub_40A910(927217719); sub_4018E0(&v350, v180, strlen(v180)); v181 = (CHAR *)sub_40A910(2123604680); sub_4018E0(&v351, v181, strlen(v181)); v182 = (CHAR *)sub_40A910(-1684436521); sub_4018E0(&v352, v182, strlen(v182)); v183 = (CHAR *)sub_40A910(740443522); sub_4018E0(&v353, v183, strlen(v183)); v184 = (CHAR *)sub_40A910(-1007474651); sub_4018E0(&v354, v184, strlen(v184)); v185 = (CHAR *)sub_40A910(777072683); sub_4018E0(&v355, v185, strlen(v185)); v186 = (CHAR *)sub_40A910(-1951999543); sub_4018E0(&v356, v186, strlen(v186)); *(float *)&v333 = 0.0; v332 = COERCE_FLOAT(&v340); v187 = v3 + 688; do { if ( *(_DWORD *)(LODWORD(v332) + 16) ) { v188 = v336; v189 = sub_7549E0("Text%02d", (char *)v333 + 1); v190 = sub_8FB140(v188, (int)v189, (int)&v335, (int)&v334, 0)[9]; v191 = *(_DWORD *)(*v190 + 24); v331 = *(_DWORD *)(*v190 + 20); v192 = sub_421050(9); v193 = sub_8F4A20(v335, v334, v331, v191, v192, v3, 0, 0); *(_DWORD *)v187 = v193; (*(void (__thiscall **)(volatile LONG *, signed int))(*v193 + 488))(v193, 5); if ( *(_DWORD *)(LODWORD(v332) + 20) < 0x10u ) v194 = v332; else v194 = *(float *)LODWORD(v332); (*(void (__stdcall **)(float))(**(_DWORD **)v187 + 472))(COERCE_FLOAT(LODWORD(v194))); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v187 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v187 + 256))(0); } else { *(_DWORD *)v187 = 0; } LODWORD(v332) += 28; v187 += 4; v333 = (char *)v333 + 1; } while ( (unsigned int)v333 < 0x14 ); if ( sub_8F71E0(v336, (int)"Text_AutoRun", &v335, &v334, &v328, &v327) ) { v195 = sub_421050(0); v196 = sub_8F4A20(v335, v334, v328, v327, v195, v3, 0, 0); *(_DWORD *)(v3 + 772) = v196; (*(void (__thiscall **)(volatile LONG *, signed int))(*v196 + 488))(v196, 5); v197 = **(_DWORD **)(v3 + 772); v198 = sub_421050(2); (*(void (__thiscall **)(_DWORD, int))(v197 + 452))(*(_DWORD *)(v3 + 772), v198); v199 = **(_DWORD **)(v3 + 772); v200 = sub_40A910(-1851332376); (*(void (__thiscall **)(_DWORD, const CHAR *))(v199 + 472))(*(_DWORD *)(v3 + 772), v200); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 772) + 240))(0); } v201 = sub_8FB140(v336, (int)"ExBtn_L_Nor", (int)&v335, (int)&v334, 0); sub_8FB650(v201, v336, (int)"ExBtn_L_Over"); sub_8FB650(v201, v336, (int)"ExBtn_L_Click"); *(_DWORD *)(v3 + 1316) = sub_8FE0F0(v335, v334, (int)v201, v3, 4, 0, 0); v202 = sub_40A910(-1885180737); sub_8F2EA0(*(void ***)(v3 + 1316), v202); *(_DWORD *)(*(_DWORD *)(v3 + 1316) + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 1316) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 1316) + 256))(1); v203 = sub_8FB140(v336, (int)"ExBtn_L_Nor01", (int)&v335, (int)&v334, 0); sub_8FB650(v203, v336, (int)"ExBtn_L_Over01"); sub_8FB650(v203, v336, (int)"ExBtn_L_Click01"); *(_DWORD *)(v3 + 1320) = sub_8FE0F0(v335, v334, (int)v203, v3, 4, 0, 0); v204 = sub_40A910(-1885180737); sub_8F2EA0(*(void ***)(v3 + 1320), v204); *(_DWORD *)(*(_DWORD *)(v3 + 1320) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1320) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1320) + 256))(0); v205 = sub_8FB140(v336, (int)"QuestListNumBall", (int)&v335, (int)&v334, 0); v206 = *(_DWORD *)(v3 + 832); v207 = v205; if ( (volatile LONG **)v206 != v205 ) { if ( v206 && !InterlockedDecrement((volatile LONG *)(v206 + 4)) && v206 ) (**(void (__thiscall ***)(int, signed int))v206)(v206, 1); *(_DWORD *)(v3 + 832) = v207; if ( v207 ) InterlockedIncrement((volatile LONG *)v207 + 1); } v208 = 0; LODWORD(v332) = v3 + 836; do { v209 = v336; v331 = v208 + 1; v210 = sub_7549E0("QuestListNum%02d", v208 + 1); v211 = sub_8FB140(v209, (int)v210, (int)&v335, (int)&v334, 0); v212 = *(_DWORD *)LODWORD(v332); v213 = v211; if ( *(volatile LONG ***)LODWORD(v332) != v211 ) { if ( v212 && !InterlockedDecrement((volatile LONG *)(v212 + 4)) && v212 ) (**(void (__thiscall ***)(int, signed int))v212)(v212, 1); *(_DWORD *)LODWORD(v332) = v213; if ( v213 ) InterlockedIncrement((volatile LONG *)v213 + 1); } v208 = v331; LODWORD(v332) += 4; } while ( (signed int)v331 < 40 ); v214 = (volatile LONG *)sub_43D0D0(0x15u); v331 = (unsigned int)v214; if ( v214 ) { v215 = (volatile LONG ***)(v3 + 1480); v216 = 200; while ( 1 ) { *v215 = sub_8FB140(v336, (int)"MobRange", (int)&v335, (int)&v334, v214); ++v215; if ( !--v216 ) break; v214 = (volatile LONG *)v331; } } v217 = 0; v218 = v3 + 1356; do { v331 = v336; v219 = sub_7549E0("Panel%02d", v217 + 3); v220 = sub_8FB140(v331, (int)v219, (int)&v335, (int)&v334, 0); v221 = sub_8F3EB0(v335, v334, (int)v220, v3, 0, 0); *(_DWORD *)v218 = v221; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v221 + 240))(v221, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v218 + 256))(0); ++v217; v218 += 4; } while ( v217 < 2 ); v318 = 0; v319 = 0; v320 = 0; v322 = 0; v323 = 0; v324 = 0; v325 = 0; v326 = 0; LOBYTE(v357) = 5; v222 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v318, 1); *v222 = 1; v222[1] = v336; v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarNor", 0xCu); v223 = v222 + 18; LOBYTE(v357) = 6; sub_40B060(v223, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarClick", 0xEu); LOBYTE(v357) = 7; sub_40B060(v223, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarOver", 0xDu); LOBYTE(v357) = 8; sub_40B060(v223, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v224 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v318, 2); *v224 = 2; v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "Column03", 8u); LOBYTE(v357) = 9; sub_40B060(v224 + 18, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v224[1] = v336; v225 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v318, 2); *v225 = 2; v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "Column01", 8u); LOBYTE(v357) = 10; sub_40B060(v225 + 18, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v225[1] = v336; sub_466680(&v318, 0); v226 = (void *)sub_43D0D0(4u); v330 = v226; v227 = sub_8FB140(v336, (int)"SubText01", (int)&v335, (int)&v334, (volatile LONG *)v226); v228 = sub_421050(9); v229 = sub_466480(v335 + 25, v334, (int)v227, *(float *)&v3, v228, (int **)&v318, 0, 0); *(_DWORD *)(v3 + 1340) = v229; *((_DWORD *)v229 + 88) = 9; sub_464D00(*(_DWORD **)(v3 + 1340), 1); sub_51D2D0((_DWORD **)v3); sub_465130(*(_DWORD **)(v3 + 1340)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1340) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1340) + 256))(0); *(_BYTE *)(*(_DWORD *)(v3 + 1340) + 348) = 0; v230 = sub_8FB140(v336, (int)"SlideBar_SlideBtnMiddle", (int)&v335, (int)&v334, (volatile LONG *)v226); v231 = sub_464310(v336, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v230, 0, (_DWORD *)v3); *(_DWORD *)(v3 + 1344) = v231; *(_DWORD *)(v231 + 312) = 10; *(_DWORD *)(*(_DWORD *)(v3 + 1344) + 304) = 1; v232 = *(int **)(v3 + 1344); v233 = *v232; v234 = *(_DWORD *)(v3 + 1344); v235 = (*(int (__thiscall **)(_DWORD))(*v232 + 168))(*(_DWORD *)(v3 + 1344)); v236 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v234 + 164))(v234, v235); (*(void (__thiscall **)(_DWORD, int))(v233 + 308))(*(_DWORD *)(v3 + 1344), v236); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1344) + 256))(0); sub_4638F0(*(_DWORD **)(v3 + 1344), *(_DWORD *)(*(_DWORD *)(v3 + 1340) + 336)); v237 = sub_8FB140(v336, (int)"ExBtn_R_Nor", (int)&v335, (int)&v334, 0); sub_8FB650(v237, v336, (int)"ExBtn_R_Over"); sub_8FB650(v237, v336, (int)"ExBtn_R_Click"); *(_DWORD *)(v3 + 1324) = sub_8FE0F0(v335, v334, (int)v237, v3, 5, 0, 0); v238 = sub_40A910(-302401986); sub_8F2EA0(*(void ***)(v3 + 1324), v238); *(_DWORD *)(*(_DWORD *)(v3 + 1324) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1324) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1324) + 256))(0); v239 = sub_8FB140(v336, (int)"ExBtn_R_Nor01", (int)&v335, (int)&v334, 0); sub_8FB650(v239, v336, (int)"ExBtn_R_Over01"); sub_8FB650(v239, v336, (int)"ExBtn_R_Click01"); *(_DWORD *)(v3 + 1328) = sub_8FE0F0(v335, v334, (int)v239, v3, 5, 0, 0); v240 = sub_40A910(-302401986); sub_8F2EA0(*(void ***)(v3 + 1328), v240); *(_DWORD *)(*(_DWORD *)(v3 + 1328) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1328) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1328) + 256))(0); v241 = 0; v242 = (volatile LONG **)(v3 + 1156); do { v243 = sub_8FB140(v336, (int)"QuestListNumBall", (int)&v335, (int)&v334, 0); ++v241; *(v242 - 40) = sub_8F3EB0(0, 0, (int)v243, v3, 0, 0); v331 = v336; v244 = sub_7549E0("QuestListNum%02d", v241); v245 = sub_8FB140(v331, (int)v244, (int)&v335, (int)&v334, 0); *v242 = sub_8F3EB0(0, 0, (int)v245, v3, 0, 0); ++v242; } while ( v241 < 40 ); v246 = sub_8FB140(v336, (int)"BtnNor", (int)&v335, (int)&v334, 0); sub_8FB650(v246, v336, (int)"BtnOver"); sub_8FB650(v246, v336, (int)"BtnClick"); *(float *)&v247 = COERCE_FLOAT(sub_8FE0F0(v335, v334, (int)v246, v3, 6, 0, 0)); v248 = sub_40A910(-1911502656); sub_8F2EA0((void **)v247, v248); *((_DWORD *)v247 + 68) = dword_AD01E8; v249 = sub_8FB140(v336, (int)"Btn_arrow", (int)&v335, (int)&v334, 0); *(float *)&v250 = COERCE_FLOAT(sub_8F3EB0(v335, v334, (int)v249, v3, 0, 0)); v251 = *v250; v332 = *(float *)&v250; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v251 + 240))(v250, 0); v252 = v329; v253 = *(_DWORD *)(v329 + 4); v333 = (void *)v247; if ( (unsigned int)&v333 >= v253 || (v254 = *(_DWORD *)v329, *(_DWORD *)v329 > (unsigned int)&v333) ) { v262 = *(_DWORD *)(v329 + 8); if ( v253 == v262 ) { v263 = (signed int)(v253 - *(_DWORD *)v329) >> 2; if ( v263 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v264 = (v262 - *(_DWORD *)v329) >> 2; v331 = v263 + 1; if ( v263 + 1 > v264 ) { if ( 0x3FFFFFFF - (v264 >> 1) >= v264 ) v265 = (char *)((v264 >> 1) + v264); else v265 = 0; if ( (unsigned int)v265 < v331 ) v265 = (char *)v331; sub_74E360((const void **)v329, v265); } } v266 = *(float **)(v252 + 4); if ( v266 ) *v266 = *(float *)&v247; } else { v255 = *(_DWORD *)(v329 + 8); v256 = ((signed int)&v333 - v254) >> 2; if ( v253 == v255 ) { v257 = (signed int)(v253 - v254) >> 2; if ( v257 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v258 = (v255 - v254) >> 2; v331 = v257 + 1; if ( v257 + 1 > v258 ) { if ( 0x3FFFFFFF - (v258 >> 1) >= v258 ) v259 = (char *)((v258 >> 1) + v258); else v259 = 0; if ( (unsigned int)v259 < v331 ) v259 = (char *)v331; sub_74E360((const void **)v329, v259); } } v260 = (_DWORD *)(*(_DWORD *)v252 + 4 * v256); v261 = *(_DWORD **)(v252 + 4); if ( v261 ) *v261 = *v260; } v267 = v332; *(_DWORD *)(v252 + 4) += 4; *(float *)&v333 = v267; v268 = *(_DWORD *)(v252 + 4); if ( (unsigned int)&v333 >= v268 || (v269 = *(_BYTE **)v252, *(_DWORD *)v252 > (unsigned int)&v333) ) { v278 = *(_DWORD *)(v252 + 8); if ( v268 == v278 ) { v279 = (signed int)(v268 - *(_DWORD *)v252) >> 2; if ( v279 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v280 = v279 + 1; v281 = (v278 - *(_DWORD *)v252) >> 2; if ( v280 > v281 ) { if ( 0x3FFFFFFF - (v281 >> 1) >= v281 ) v282 = (char *)((v281 >> 1) + v281); else v282 = 0; if ( (unsigned int)v282 < v280 ) v282 = (char *)v280; sub_74E360((const void **)v252, v282); } } v283 = *(float **)(v252 + 4); if ( v283 ) *v283 = v332; } else { v270 = *(_DWORD *)(v252 + 8); v271 = ((char *)&v333 - v269) >> 2; v331 = ((char *)&v333 - v269) >> 2; if ( v268 == v270 ) { v272 = (signed int)(v268 - (_DWORD)v269) >> 2; if ( v272 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v273 = v272 + 1; v274 = (v270 - (signed int)v269) >> 2; if ( v273 > v274 ) { if ( 0x3FFFFFFF - (v274 >> 1) >= v274 ) v275 = (char *)((v274 >> 1) + v274); else v275 = 0; if ( (unsigned int)v275 < v273 ) v275 = (char *)v273; sub_74E360((const void **)v252, v275); v271 = v331; } } v276 = (_DWORD *)(*(_DWORD *)v252 + 4 * v271); v277 = *(_DWORD **)(v252 + 4); if ( v277 ) *v277 = *v276; } *(_DWORD *)(v252 + 4) += 4; v284 = 0; v285 = v3 + 1348; do { v331 = v336; v286 = sub_7549E0("Panel%02d", v284 + 7); v287 = sub_8FB140(v331, (int)v286, (int)&v335, (int)&v334, 0); v288 = sub_8F3EB0(v335, v334, (int)v287, v3, 0, 0); *(_DWORD *)v285 = v288; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v288 + 240))(v288, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v285 + 256))(0); ++v284; v285 += 4; } while ( v284 < 2 ); if ( v318 != v319 ) { v289 = (void *)((int (__cdecl *)(void *, void *, void *, void *))loc_40AC30)(v319, v319, v318, v330); ((void (__cdecl *)(void *, void *, char *, void *))loc_40ACF0)(v289, v319, &v321, v330); v319 = v289; } v322 = 0; v323 = 0; v324 = 0; v290 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v318, 1); *v290 = 1; v290[1] = v336; v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarNor01", 0xEu); v291 = v290 + 18; LOBYTE(v357) = 11; sub_40B060(v291, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarClick01", 0x10u); LOBYTE(v357) = 12; sub_40B060(v291, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "ColumnBarOver01", 0xFu); LOBYTE(v357) = 13; sub_40B060(v291, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v292 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v318, 2); *v292 = 2; v339 = 15; v338 = 0; LOBYTE(v337) = 0; sub_4018E0(&v337, "Column02", 8u); LOBYTE(v357) = 14; sub_40B060(v292 + 18, (const void **)&v337); LOBYTE(v357) = 5; if ( v339 >= 0x10 ) operator delete(v337); v339 = 15; v338 = 0; LOBYTE(v337) = 0; v292[1] = v336; sub_466680(&v318, 0); v293 = (volatile LONG *)v330; v294 = sub_8FB140(v336, (int)"SubText02", (int)&v335, (int)&v334, (volatile LONG *)v330); v295 = sub_466330(v335, v334, (int)v294, *(float *)&v3, (int **)&v318, 0, 0); *(_DWORD *)(v3 + 1332) = v295; *((_DWORD *)v295 + 88) = 7; sub_464D00(*(_DWORD **)(v3 + 1332), 4); sub_519CE0((_DWORD *)v3); sub_465130(*(_DWORD **)(v3 + 1332)); *(_BYTE *)(*(_DWORD *)(v3 + 1332) + 348) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1332) + 256))(0); v296 = sub_8FB140(v336, (int)"SlideBar_SlideBtnMiddle", (int)&v335, (int)&v334, v293); v297 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v297, "SlideBar_DnBtn01Nor"); v298 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v298, "SlideBar_DnBtn01Click"); v299 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v299, "SlideBar_DnBtn01Over"); v300 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v300, "SlideBar_UpBtn01Nor"); v301 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v301, "SlideBar_UpBtn01Click"); v302 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v336 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v302, "SlideBar_UpBtn01Over"); v303 = sub_464310(v336, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v296, 0, (_DWORD *)v3); *(_DWORD *)(v3 + 1336) = v303; *(_DWORD *)(v303 + 312) = 8; *(_DWORD *)(*(_DWORD *)(v3 + 1336) + 304) = 1; v304 = *(int **)(v3 + 1336); v305 = *v304; v306 = *(_DWORD *)(v3 + 1336); v307 = (*(int (__thiscall **)(_DWORD))(*v304 + 168))(*(_DWORD *)(v3 + 1336)); v308 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v306 + 164))(v306, v307); (*(void (__thiscall **)(_DWORD, int))(v305 + 308))(*(_DWORD *)(v3 + 1336), v308); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 1336) + 256))(0); sub_4638F0(*(_DWORD **)(v3 + 1336), *(_DWORD *)(*(_DWORD *)(v3 + 1332) + 336)); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 0.5); *(_DWORD *)(v3 + 588) = sub_5CAF30(*(_DWORD *)(v3 + 296)); sub_51DB00((_DWORD *)v3); v309 = *(_DWORD *)(v3 + 2316); *(_DWORD *)(v3 + 2280) = 0; *(_DWORD *)(v3 + 2284) = 0; v330 = *(void **)(v309 + 300); *(float *)&v333 = (double)(signed int)v330 / 100.0; sub_4637A0((_DWORD *)v309, (int)v330); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 2320) + 276))(v333); if ( *(float *)&v333 >= 0.8999999761581421 ) v310 = 1.0; else v310 = 0.0; v311 = *(volatile LONG **)v3; v332 = v310; (*((void (__thiscall **)(int, float))v311 + 69))(v3, COERCE_FLOAT(LODWORD(v332))); v312 = (_DWORD *)v329; v313 = 0; v314 = (*(_DWORD *)(v329 + 4) - *(_DWORD *)v329) >> 2; if ( v314 ) { do { if ( *(_DWORD *)(*v312 + 4 * v313) ) { v315 = *(float *)&v333; if ( *(float *)&v333 < 0.5 ) v315 = 0.60000002; v316 = *(_DWORD *)(*v312 + 4 * v313); *(float *)&v329 = v315; (*(void (__stdcall **)(int))(*(_DWORD *)v316 + 276))(v329); } ++v313; } while ( v313 < v314 ); } LOBYTE(v357) = 4; if ( v318 ) { ((void (__cdecl *)(void *, void *, char *, void *))loc_40ACF0)(v318, v319, &v321, v330); operator delete(v318); } v318 = 0; v319 = 0; v320 = 0; LOBYTE(v357) = 0; `eh vector destructor iterator'(&v340, 0x1Cu, 20, sub_636A10); v357 = -1; if ( v336 ) { v317 = (void (__thiscall ***)(_DWORD, signed int))v336; if ( !InterlockedDecrement((volatile LONG *)(v336 + 4)) ) { if ( v317 ) (**v317)(v317, 1); } } return 1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00521A60) -------------------------------------------------------- int __thiscall sub_521A60(_DWORD *this, int a2, int a3) { int v3; // ebx _DWORD *v4; // esi int v5; // eax int *v6; // edi _DWORD *v7; // edi int result; // eax int v9; // [esp+14h] [ebp+8h] v3 = a2; v4 = this; v5 = (*(int (__stdcall **)(int))(*this + 4))(a2); v6 = *(int **)(v4[2] + 4 * v5); v9 = v5; if ( v6 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v4 + 8))(v4, v3, *((unsigned __int16 *)v6 + 2)) ) { v6 = (int *)*v6; if ( !v6 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, int *))(*v4 + 16))(v4, v6); result = (*(int (__thiscall **)(_DWORD *, int *, int, int))(*v4 + 12))(v4, v6, v3, a3); } else { LABEL_4: v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 20))(v4); (*(void (__thiscall **)(_DWORD *, _DWORD *, int, int))(*v4 + 12))(v4, v7, v3, a3); result = v9; *v7 = *(_DWORD *)(v4[2] + 4 * v9); *(_DWORD *)(v4[2] + 4 * v9) = v7; ++v4[3]; } return result; } //----- (00521AF0) -------------------------------------------------------- char __thiscall sub_521AF0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx int **v4; // edi _DWORD *v6; // ebx int *v7; // edi v2 = this; v3 = (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2); v4 = *(int ***)(v2[2] + 4 * v3); if ( !v4 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 8))(v2, a2, *((unsigned __int16 *)v4 + 2)) ) { *(_DWORD *)(v2[2] + 4 * v3) = *v4; (*(void (__thiscall **)(_DWORD *, int **))(*v2 + 16))(v2, v4); (*(void (__thiscall **)(_DWORD *, int **))(*v2 + 24))(v2, v4); --v2[3]; return 1; } v6 = v4; v7 = *v4; if ( !v7 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 8))(v2, a2, *((unsigned __int16 *)v7 + 2)) ) { v6 = v7; v7 = (int *)*v7; if ( !v7 ) return 0; } *v6 = *v7; (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 16))(v2, v7); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 24))(v2, v7); --v2[3]; return 1; } //----- (00521BB0) -------------------------------------------------------- char __thiscall sub_521BB0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi int **v4; // edi v3 = this; v4 = *(int ***)(this[2] + 4 * (*(int (__stdcall **)(int))(*this + 4))(a2)); if ( !v4 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, *((unsigned __int16 *)v4 + 2)) ) { v4 = (int **)*v4; if ( !v4 ) return 0; } *a3 = v4[2]; return 1; } //----- (00521C10) -------------------------------------------------------- unsigned int __thiscall sub_521C10(_DWORD *this, unsigned __int16 a2) { return (unsigned int)a2 % this[1]; } //----- (00521C30) -------------------------------------------------------- BOOL __stdcall sub_521C30(__int16 a1, __int16 a2) { return a1 == a2; } //----- (00521C50) -------------------------------------------------------- int __stdcall sub_521C50(int a1, __int16 a2, int a3) { int result; // eax result = a1; *(_WORD *)(a1 + 4) = a2; *(_DWORD *)(a1 + 8) = a3; return result; } //----- (00521CB0) -------------------------------------------------------- void *__thiscall sub_521CB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,RaidMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; //----- (00521CE0) -------------------------------------------------------- void *__thiscall sub_521CE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NpcMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; //----- (00521D10) -------------------------------------------------------- void *__thiscall sub_521D10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PartyMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; //----- (00521D40) -------------------------------------------------------- void *__thiscall sub_521D40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,GTIScanMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; //----- (00521D70) -------------------------------------------------------- void *__thiscall sub_521D70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,QuestHelperMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; //----- (00521DA0) -------------------------------------------------------- void *__thiscall sub_521DA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PgWinSpr *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; //----- (00521DD0) -------------------------------------------------------- void *__thiscall sub_521DD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,MobAreaMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; //----- (00521E00) -------------------------------------------------------- void *__thiscall sub_521E00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,MobCoordinate *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5FCC: using guessed type void *NiTListBase,MobCoordinate *>::`vftable'; //----- (00521E30) -------------------------------------------------------- int __thiscall sub_521E30(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; return result; } //----- (00521E80) -------------------------------------------------------- void *__thiscall sub_521E80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,float>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C5EFC: using guessed type void *NiTListBase,float>::`vftable'; //----- (00521EB0) -------------------------------------------------------- _DWORD *__thiscall sub_521EB0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,float>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,float>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5EFC: using guessed type void *NiTListBase,float>::`vftable'; // 9C5FEC: using guessed type void *NiTPointerListBase,float>::`vftable'; //----- (00521F40) -------------------------------------------------------- void __thiscall sub_521F40(int *this) { int *v1; // edi int v2; // esi int v3; // esi int v4; // esi int v5; // esi v1 = this; v2 = this[3]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[2]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[1]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *v1; if ( *v1 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } //----- (00522020) -------------------------------------------------------- int __thiscall sub_522020(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NpcMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NpcMarkWin *>::`vftable'; return result; } // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C5F2C: using guessed type void *NiTPointerListBase,NpcMarkWin *>::`vftable'; //----- (005220A0) -------------------------------------------------------- _DWORD *__thiscall sub_5220A0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NpcMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NpcMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C5F2C: using guessed type void *NiTPointerListBase,NpcMarkWin *>::`vftable'; //----- (00522130) -------------------------------------------------------- int __thiscall sub_522130(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,MobCoordinate *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MobCoordinate *>::`vftable'; return result; } // 9C5FCC: using guessed type void *NiTListBase,MobCoordinate *>::`vftable'; // 9C5FDC: using guessed type void *NiTPointerListBase,MobCoordinate *>::`vftable'; //----- (005221B0) -------------------------------------------------------- _DWORD *__thiscall sub_5221B0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,MobCoordinate *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MobCoordinate *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FCC: using guessed type void *NiTListBase,MobCoordinate *>::`vftable'; // 9C5FDC: using guessed type void *NiTPointerListBase,MobCoordinate *>::`vftable'; //----- (00522240) -------------------------------------------------------- int __thiscall sub_522240(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,float>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,float>::`vftable'; return result; } // 9C5EFC: using guessed type void *NiTListBase,float>::`vftable'; // 9C5FEC: using guessed type void *NiTPointerListBase,float>::`vftable'; //----- (005222C0) -------------------------------------------------------- int __thiscall sub_5222C0(_DWORD *this, float *a2) { _DWORD *v2; // esi int result; // eax double v4; // st7 int *v5; // ecx v2 = this; result = (*(int (**)(void))(*this + 4))(); v4 = *a2; *(_DWORD *)result = 0; *(float *)(result + 8) = v4; *(_DWORD *)(result + 4) = v2[2]; v5 = (int *)v2[2]; if ( v5 ) { *v5 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (00522310) -------------------------------------------------------- int __thiscall sub_522310(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NpcMarkWin *>::`vftable'; return result; } // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; //----- (005223B0) -------------------------------------------------------- void __thiscall sub_5223B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap::`vftable'; sub_940360(this); *v1 = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; //----- (00522440) -------------------------------------------------------- void __thiscall sub_522440(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap::`vftable'; sub_940360(this); *v1 = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; //----- (005224B0) -------------------------------------------------------- int __thiscall sub_5224B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MobCoordinate *>::`vftable'; return result; } // 9C5FCC: using guessed type void *NiTListBase,MobCoordinate *>::`vftable'; // 9C60B4: using guessed type void *PgTList::`vftable'; //----- (00522530) -------------------------------------------------------- int __thiscall sub_522530(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,float>::`vftable'; return result; } // 9C5EFC: using guessed type void *NiTListBase,float>::`vftable'; // 9C60C4: using guessed type void *PgTList::`vftable'; //----- (005225B0) -------------------------------------------------------- void **__thiscall sub_5225B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; //----- (005225F0) -------------------------------------------------------- void **__thiscall sub_5225F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; //----- (00522630) -------------------------------------------------------- int __thiscall sub_522630(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,RaidMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,RaidMarkWin *>::`vftable'; return result; } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C5FFC: using guessed type void *NiTPointerListBase,RaidMarkWin *>::`vftable'; //----- (005226B0) -------------------------------------------------------- _DWORD *__thiscall sub_5226B0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NpcMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; //----- (00522740) -------------------------------------------------------- int __thiscall sub_522740(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PartyMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PartyMarkWin *>::`vftable'; return result; } // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C600C: using guessed type void *NiTPointerListBase,PartyMarkWin *>::`vftable'; //----- (005227C0) -------------------------------------------------------- int __thiscall sub_5227C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,QuestHelperMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QuestHelperMarkWin *>::`vftable'; return result; } // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; // 9C601C: using guessed type void *NiTPointerListBase,QuestHelperMarkWin *>::`vftable'; //----- (00522840) -------------------------------------------------------- int __thiscall sub_522840(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PgWinSpr *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWinSpr *>::`vftable'; return result; } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C602C: using guessed type void *NiTPointerListBase,PgWinSpr *>::`vftable'; //----- (005228C0) -------------------------------------------------------- int __thiscall sub_5228C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,MobAreaMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MobAreaMarkWin *>::`vftable'; return result; } // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; // 9C603C: using guessed type void *NiTPointerListBase,MobAreaMarkWin *>::`vftable'; //----- (00522940) -------------------------------------------------------- int __thiscall sub_522940(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,GTIScanMarkWin *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,GTIScanMarkWin *>::`vftable'; return result; } // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C604C: using guessed type void *NiTPointerListBase,GTIScanMarkWin *>::`vftable'; //----- (005229C0) -------------------------------------------------------- _DWORD *__thiscall sub_5229C0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,RaidMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,RaidMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C5FFC: using guessed type void *NiTPointerListBase,RaidMarkWin *>::`vftable'; //----- (00522A50) -------------------------------------------------------- _DWORD *__thiscall sub_522A50(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PartyMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PartyMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C600C: using guessed type void *NiTPointerListBase,PartyMarkWin *>::`vftable'; //----- (00522AE0) -------------------------------------------------------- _DWORD *__thiscall sub_522AE0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,QuestHelperMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestHelperMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; // 9C601C: using guessed type void *NiTPointerListBase,QuestHelperMarkWin *>::`vftable'; //----- (00522B70) -------------------------------------------------------- _DWORD *__thiscall sub_522B70(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PgWinSpr *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWinSpr *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C602C: using guessed type void *NiTPointerListBase,PgWinSpr *>::`vftable'; //----- (00522C00) -------------------------------------------------------- _DWORD *__thiscall sub_522C00(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,MobAreaMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MobAreaMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; // 9C603C: using guessed type void *NiTPointerListBase,MobAreaMarkWin *>::`vftable'; //----- (00522C90) -------------------------------------------------------- _DWORD *__thiscall sub_522C90(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,GTIScanMarkWin *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GTIScanMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C604C: using guessed type void *NiTPointerListBase,GTIScanMarkWin *>::`vftable'; //----- (00522D20) -------------------------------------------------------- _DWORD *__thiscall sub_522D20(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MobCoordinate *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FCC: using guessed type void *NiTListBase,MobCoordinate *>::`vftable'; // 9C60B4: using guessed type void *PgTList::`vftable'; //----- (00522DB0) -------------------------------------------------------- _DWORD *__thiscall sub_522DB0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,float>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5EFC: using guessed type void *NiTListBase,float>::`vftable'; // 9C60C4: using guessed type void *PgTList::`vftable'; //----- (00522E40) -------------------------------------------------------- void **__thiscall sub_522E40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; //----- (00522EC0) -------------------------------------------------------- void **__thiscall sub_522EC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; //----- (00522F40) -------------------------------------------------------- int __thiscall sub_522F40(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,RaidMarkWin *>::`vftable'; return result; } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; //----- (00522FC0) -------------------------------------------------------- int __thiscall sub_522FC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PartyMarkWin *>::`vftable'; return result; } // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; //----- (00523040) -------------------------------------------------------- int __thiscall sub_523040(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,GTIScanMarkWin *>::`vftable'; return result; } // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; //----- (005230C0) -------------------------------------------------------- int __thiscall sub_5230C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QuestHelperMarkWin *>::`vftable'; return result; } // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; // 9C6114: using guessed type void *PgTList::`vftable'; //----- (00523140) -------------------------------------------------------- int __thiscall sub_523140(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PgWinSpr *>::`vftable'; return result; } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; //----- (005231C0) -------------------------------------------------------- int __thiscall sub_5231C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MobAreaMarkWin *>::`vftable'; return result; } // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; // 9C6134: using guessed type void *PgTList::`vftable'; //----- (00523240) -------------------------------------------------------- _DWORD *__thiscall sub_523240(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,RaidMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; //----- (005232D0) -------------------------------------------------------- _DWORD *__thiscall sub_5232D0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PartyMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; //----- (00523360) -------------------------------------------------------- _DWORD *__thiscall sub_523360(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestHelperMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F9C: using guessed type void *NiTListBase,QuestHelperMarkWin *>::`vftable'; // 9C6114: using guessed type void *PgTList::`vftable'; //----- (005233F0) -------------------------------------------------------- _DWORD *__thiscall sub_5233F0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PgWinSpr *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; //----- (00523480) -------------------------------------------------------- _DWORD *__thiscall sub_523480(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MobAreaMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5FBC: using guessed type void *NiTListBase,MobAreaMarkWin *>::`vftable'; // 9C6134: using guessed type void *PgTList::`vftable'; //----- (00523510) -------------------------------------------------------- _DWORD *__thiscall sub_523510(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GTIScanMarkWin *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; //----- (005235A0) -------------------------------------------------------- void *__thiscall sub_5235A0(void *this, char a2) { void *v2; // esi v2 = this; sub_51BF00(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00523700) -------------------------------------------------------- char __thiscall sub_523700(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax _WORD *v5; // esi int *v6; // edx v3 = this; if ( !a2 ) { sub_8F86A0(&unk_BA6B10, this); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v4 ) return v4; v6 = (_DWORD *)((char *)v3 + 373); goto LABEL_9; } if ( a2 == 1 ) { sub_8F86A0(&unk_BA6B10, this); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v4 ) return v4; v6 = (_DWORD *)((char *)v3 + 385); LABEL_9: LOBYTE(v4) = sub_4CCA20(*v6, v6[1], v6[2]); return v4; } LOBYTE(v4) = a2 - 2; if ( a2 == 2 ) { sub_8F86A0(&unk_BA6B10, this); sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = v3 + 90; LOBYTE(v4) = (unsigned int)memset(v5, 0, 0x49u); *v5 = -1; } return v4; } //----- (00523850) -------------------------------------------------------- char __thiscall sub_523850(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax int v16; // ST48_4 int v17; // eax volatile LONG *v18; // eax const CHAR *v19; // eax volatile LONG *v20; // ecx int v21; // ST48_4 int v22; // eax volatile LONG *v23; // eax const CHAR *v24; // eax volatile LONG *v25; // ecx int v26; // ST48_4 int v27; // eax volatile LONG *v28; // eax const CHAR *v29; // eax volatile LONG *v30; // ecx int v31; // ST48_4 int v32; // eax volatile LONG *v33; // eax int v34; // edi const CHAR *v35; // eax int v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // esi volatile LONG *v38; // [esp+4Ch] [ebp-1Ch] int v39; // [esp+50h] [ebp-18h] int v40; // [esp+54h] [ebp-14h] int v41; // [esp+58h] [ebp-10h] int v42; // [esp+64h] [ebp-4h] int v43; // [esp+70h] [ebp+8h] int v44; // [esp+70h] [ebp+8h] volatile LONG **v45; // [esp+70h] [ebp+8h] int v46; // [esp+70h] [ebp+8h] int v47; // [esp+70h] [ebp+8h] volatile LONG **v48; // [esp+70h] [ebp+8h] int v49; // [esp+70h] [ebp+8h] int v50; // [esp+70h] [ebp+8h] volatile LONG **v51; // [esp+70h] [ebp+8h] int v52; // [esp+70h] [ebp+8h] v2 = (int)this; v41 = 0; v3 = dword_BA6BA0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GateChannel.nif"); sub_8F66B0(v4, (int)&v41, v3); v5 = v41; if ( !v41 ) { if ( off_AC0554 ) { off_AC0554("Game\\GateChannel.nif load fail", "LoadFail", 0); v5 = v41; } v42 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = InterlockedDecrement((volatile LONG *)(v5 + 4)); goto LABEL_8; } v38 = (volatile LONG *)sub_43D0D0(4u); if ( !v38 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( !v41 ) return 0; v7 = InterlockedDecrement((volatile LONG *)(v41 + 4)); LABEL_8: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v9 = sub_8FB140(v41, (int)"Panel01", (int)&v39, (int)&v40, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"GateChannelWin", 0) ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v10 ) (**v10)(v10, 1); return 0; } v11 = v39; v12 = v40; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v41, (int)"Theme", (int)&v39, (int)&v40, v13); else v14 = sub_8FB140(v41, (int)"Theme", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39 - v11, v40 - v12, (int)v14, v2, 0, 0); v15 = *sub_8FB140(v41, (int)"Textbox", (int)&v39, (int)&v40, v38)[9]; v43 = *(_DWORD *)(v15 + 24); v16 = *(_DWORD *)(v15 + 20); v17 = sub_421050(0); v18 = sub_8F4A20(v39 - v11, v40 - v12, v16, v43, v17, v2, 0, 0); *(_DWORD *)(v2 + 344) = v18; (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); v44 = **(_DWORD **)(v2 + 344); v19 = sub_40C190(-1750816545); (*(void (__thiscall **)(_DWORD, const CHAR *))(v44 + 472))(*(_DWORD *)(v2 + 344), v19); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v45 = sub_8FB140(v41, (int)"Btn01Nor", (int)&v39, (int)&v40, v38); sub_8FB650(v45, v41, (int)"Btn01Click"); sub_8FB650(v45, v41, (int)"Btn01Over"); sub_8FE0F0(v39 - v11, v40 - v12, (int)v45, v2, 0, 0, 0); v20 = v45[9]; v46 = *(_DWORD *)(*v20 + 24); v21 = *(_DWORD *)(*v20 + 20); v22 = sub_421050(0); v23 = sub_8F4A20(v39 - v11, v40 - v12, v21, v46, v22, v2, 0, 0); *(_DWORD *)(v2 + 348) = v23; (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 5); v47 = **(_DWORD **)(v2 + 348); v24 = sub_40C190(-1750816545); (*(void (__thiscall **)(_DWORD, const CHAR *))(v47 + 472))(*(_DWORD *)(v2 + 348), v24); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); v48 = sub_8FB140(v41, (int)"Btn02Nor", (int)&v39, (int)&v40, v38); sub_8FB650(v48, v41, (int)"Btn02Click"); sub_8FB650(v48, v41, (int)"Btn02Over"); sub_8FE0F0(v39 - v11, v40 - v12, (int)v48, v2, 1, 0, 0); v25 = v48[9]; v49 = *(_DWORD *)(*v25 + 24); v26 = *(_DWORD *)(*v25 + 20); v27 = sub_421050(0); v28 = sub_8F4A20(v39 - v11, v40 - v12, v26, v49, v27, v2, 0, 0); *(_DWORD *)(v2 + 352) = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); v50 = **(_DWORD **)(v2 + 352); v29 = sub_40C190(-1750816545); (*(void (__thiscall **)(_DWORD, const CHAR *))(v50 + 472))(*(_DWORD *)(v2 + 352), v29); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); v51 = sub_8FB140(v41, (int)"Btn03Nor", (int)&v39, (int)&v40, v38); sub_8FB650(v51, v41, (int)"Btn03Click"); sub_8FB650(v51, v41, (int)"Btn03Over"); sub_8FE0F0(v39 - v11, v40 - v12, (int)v51, v2, 2, 0, 0); v30 = v51[9]; v52 = *(_DWORD *)(*v30 + 24); v31 = *(_DWORD *)(*v30 + 20); v32 = sub_421050(0); v33 = sub_8F4A20(v39 - v11, v40 - v12, v31, v52, v32, v2, 0, 0); *(_DWORD *)(v2 + 356) = v33; (*(void (__thiscall **)(volatile LONG *, signed int))(*v33 + 488))(v33, 5); v34 = **(_DWORD **)(v2 + 356); v35 = sub_40C190(-1750816545); (*(void (__thiscall **)(_DWORD, const CHAR *))(v34 + 472))(*(_DWORD *)(v2 + 356), v35); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); v36 = v41; *(_WORD *)(v2 + 360) = -1; v42 = -1; if ( v36 ) { v37 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v37 ) (**v37)(v37, 1); } } return 1; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00523DF0) -------------------------------------------------------- char __thiscall sub_523DF0(int this, int a2) { int v2; // edi _WORD *v3; // esi float v4; // ST14_4 float v5; // ST18_4 double v6; // st7 double v7; // st5 char result; // al float v9; // ebx float v10; // [esp+14h] [ebp-1Ch] float v11; // [esp+18h] [ebp-18h] int v12; // [esp+1Ch] [ebp-14h] float v13; // [esp+20h] [ebp-10h] double v14; // [esp+24h] [ebp-Ch] float v15; // [esp+2Ch] [ebp-4h] v2 = this; v3 = (_WORD *)(this + 360); if ( *(_WORD *)(this + 360) != -1 ) { v4 = (double)*(unsigned int *)(this + 362); v5 = (double)*(unsigned int *)(this + 366); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v10); v13 = v10 - v4; v10 = v13; LODWORD(v15) = *(unsigned __int16 *)(v2 + 370); *(float *)&v14 = v11 - v5; v11 = *(float *)&v14; *((float *)&v14 + 1) = 0.0 - 0.0; v6 = *(float *)&v14; v12 = HIDWORD(v14); v7 = *((float *)&v14 + 1); v14 = (double)SLODWORD(v15); v15 = v6 * v6 + v13 * v13 + v7 * v7; v15 = sqrt(v15); if ( v15 > v14 ) { memset(v3, 0, 0x49u); *v3 = -1; sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); } } result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( result ) { HIDWORD(v14) = *sub_49F490(&v15); if ( v15 != 0.0 ) { v9 = v15; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v15) + 4)) && v9 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v9))(LODWORD(v9), 1); } result = BYTE4(v14); if ( HIDWORD(v14) ) { if ( *(_DWORD *)(HIDWORD(v14) + 60) == 2 ) { memset(v3, 0, 0x49u); *v3 = -1; result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); } } } return result; } //----- (00523F60) -------------------------------------------------------- char __thiscall sub_523F60(char *this, int a2) { char *v2; // esi signed int v3; // edi int v4; // eax int v5; // ebx int v6; // edi int v7; // ST04_4 char *v8; // eax char *v9; // eax signed int v11; // [esp+8h] [ebp-8h] signed int v12; // [esp+Ch] [ebp-4h] int v13; // [esp+18h] [ebp+8h] v2 = this; sub_5241A0(this + 360, a2); v3 = 0; v12 = 1; v11 = 0; if ( v2[372] ) { v13 = (int)(v2 + 348); do { v4 = sub_4316B0(&v2[12 * v3 + 373]); v5 = v4; if ( !v4 ) break; if ( !v3 ) { v6 = **((_DWORD **)v2 + 86); v7 = v4 + 14; v8 = (char *)sub_40A910(793868395); v9 = sub_7549E0(v8, v7); (*(void (__thiscall **)(_DWORD, char *))(v6 + 472))(*((_DWORD *)v2 + 86), v9); v3 = v11; } (*(void (__stdcall **)(int))(**(_DWORD **)v13 + 472))(v5 + 14); v13 += 4; if ( ++v12 > 2 ) break; v11 = ++v3; } while ( v3 < (unsigned __int8)v2[372] ); } return sub_8F82A0(&unk_BA6B10, v2); } //----- (00524040) -------------------------------------------------------- int __cdecl sub_524040(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1B4u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &GateChannelWin::`vftable'; *(_DWORD *)(v2 + 232) = &GateChannelWin::`vftable'; `eh vector constructor iterator'((void *)(v2 + 373), 0xCu, 5, sub_431070, nullsub_6); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C6474: using guessed type void *GateChannelWin::`vftable'; // 9C6494: using guessed type void *GateChannelWin::`vftable'; //----- (005241A0) -------------------------------------------------------- char *__thiscall sub_5241A0(char *this, int a2) { char *result; // eax result = this; *(_WORD *)this = *(_WORD *)a2; *(_DWORD *)(this + 2) = *(_DWORD *)(a2 + 2); *(_DWORD *)(this + 6) = *(_DWORD *)(a2 + 6); *((_WORD *)this + 5) = *(_WORD *)(a2 + 10); this[12] = *(_BYTE *)(a2 + 12); *(_DWORD *)(this + 13) = *(_DWORD *)(a2 + 13); *(_DWORD *)(this + 17) = *(_DWORD *)(a2 + 17); *(_DWORD *)(this + 21) = *(_DWORD *)(a2 + 21); *(_DWORD *)(this + 25) = *(_DWORD *)(a2 + 25); *(_DWORD *)(this + 29) = *(_DWORD *)(a2 + 29); *(_DWORD *)(this + 33) = *(_DWORD *)(a2 + 33); *(_DWORD *)(this + 37) = *(_DWORD *)(a2 + 37); *(_DWORD *)(this + 41) = *(_DWORD *)(a2 + 41); *(_DWORD *)(this + 45) = *(_DWORD *)(a2 + 45); *(_DWORD *)(this + 49) = *(_DWORD *)(a2 + 49); *(_DWORD *)(this + 53) = *(_DWORD *)(a2 + 53); *(_DWORD *)(this + 57) = *(_DWORD *)(a2 + 57); *(_DWORD *)(this + 61) = *(_DWORD *)(a2 + 61); *(_DWORD *)(this + 65) = *(_DWORD *)(a2 + 65); *(_DWORD *)(this + 69) = *(_DWORD *)(a2 + 69); return result; } //----- (00524230) -------------------------------------------------------- _DWORD *__thiscall sub_524230(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &GateChannelWin::`vftable'; *((_DWORD *)this + 58) = &GateChannelWin::`vftable'; `eh vector destructor iterator'((char *)this + 373, 0xCu, 5, nullsub_6); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C6474: using guessed type void *GateChannelWin::`vftable'; // 9C6494: using guessed type void *GateChannelWin::`vftable'; //----- (005242C0) -------------------------------------------------------- float *__thiscall sub_5242C0(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &GatheringWin::`vftable'; *((_DWORD *)v1 + 58) = &GatheringWin::`vftable'; v1[86] = 3.4028235e38; v1[90] = 0.0; v1[99] = 0.0; v1[87] = 0.0; v1[98] = 0.0; v1[100] = 0.0; v1[101] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C6738: using guessed type void *GatheringWin::`vftable'; // 9C6754: using guessed type void *GatheringWin::`vftable'; //----- (00524330) -------------------------------------------------------- void __thiscall sub_524330(float *this) { this[87] = 0.0; this[88] = 1.0; } //----- (00524350) -------------------------------------------------------- void __thiscall sub_524350(float *this) { this[87] = 0.0; this[88] = 1.0; } //----- (00524390) -------------------------------------------------------- void __thiscall sub_524390(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 double v6; // st6 bool v7; // zf signed int v8; // eax double v9; // st7 float v10; // ST28_4 signed int v11; // ebx int v12; // edx void (__thiscall *v13)(int, float *, int *); // eax int v14; // eax int v15; // eax signed int v16; // ecx signed int v17; // eax float *v18; // eax float v19; // ST1C_4 float *v20; // eax float v21; // ST1C_4 int v22; // [esp+2Ch] [ebp-4h] v4 = this; if ( LODWORD(a2) == 9 && *(float *)(this + 116) > 0.0 ) { v5 = flt_ACCFCC - *(float *)(this + 112); v6 = v5 / *(float *)(this + 124); LODWORD(a2) = (signed int)v6; if ( (signed int)v6 >= *(_DWORD *)(this + 152) ) { v8 = (signed int)v6 & 0x80000001; v7 = v8 == 0; a2 = v5 - (double)SLODWORD(a2) * *(float *)(this + 124); if ( v8 < 0 ) v7 = (((_BYTE)v8 - 1) | 0xFFFFFFFE) == -1; if ( v7 ) v9 = a2; else v9 = 1.0 - a2; v10 = v9; a2 = COERCE_FLOAT((*(int (**)(void))(**(_DWORD **)(this + 128) + 164))()); v11 = (signed int)((double)SLODWORD(a2) + (double)*(signed int *)(v4 + 140) * v10); v12 = *(_DWORD *)(a3 + 4); v13 = *(void (__thiscall **)(int, float *, int *))(*(_DWORD *)(v4 - 232) + 224); a2 = *(float *)a3; v22 = v12; v13(v4 - 232, &a2, &v22); if ( a2 >= 0.0 ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)(v4 - 232) + 144))(v4 - 232); if ( SLODWORD(a2) < v14 && v22 >= 0 ) { v15 = (*(int (__thiscall **)(int))(*(_DWORD *)(v4 - 232) + 148))(v4 - 232); if ( v22 < v15 ) { v16 = *(_DWORD *)(v4 + 144); if ( SLODWORD(a2) < v16 || (v17 = *(_DWORD *)(v4 + 148), SLODWORD(a2) >= v17) || v11 < v16 || v11 >= v17 ) { if ( *(_DWORD *)(v4 + 172) ) { v20 = *(float **)(v4 + 168); v21 = (double)SLODWORD(a2); v20[22] = v21; v20[23] = 4.0; v20[24] = -8.0; sub_85BED0(*(_DWORD ***)(v4 + 168), 0.0, 1); sub_6B0B40(*(float **)(v4 + 172), *(_DWORD **)(v4 + 128)); } sub_6BA650(&dword_AB6520, 65); } else { if ( *(_DWORD *)(v4 + 164) ) { v18 = *(float **)(v4 + 160); v19 = (double)SLODWORD(a2); v18[22] = v19; v18[23] = 4.0; v18[24] = -8.0; sub_85BED0(*(_DWORD ***)(v4 + 160), 0.0, 1); sub_6B0B40(*(float **)(v4 + 164), *(_DWORD **)(v4 + 128)); } if ( *(_DWORD *)(v4 + 4) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v4 + 4) + 4))(31, 0, v4); if ( *(_DWORD *)(v4 + 4) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v4 + 4) + 20))(31, 0, v4); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v4 + 20))(v4, 31, 0, v4); sub_6BA650(&dword_AB6520, 64); } } } } ++*(_DWORD *)(v4 + 152); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005245F0) -------------------------------------------------------- char __thiscall sub_5245F0(void *this, void *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax void (__thiscall ***v20)(_DWORD, signed int); // eax float *v21; // eax float *v22; // eax void (__thiscall ***v23)(_DWORD, signed int); // eax float *v24; // eax float *v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi int v27; // [esp+34h] [ebp-18h] int v28; // [esp+38h] [ebp-14h] int v29; // [esp+3Ch] [ebp-10h] int v30; // [esp+48h] [ebp-4h] v2 = (int)this; v27 = 0; v3 = dword_BA6BA0; v30 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ProductBar.nif"); sub_8F66B0(v4, (int)&v27, v3); if ( !v27 ) return 0; v5 = sub_8FB140(v27, (int)"Panel01", (int)&v28, (int)&v29, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"GatheringWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v27; v30 = -1; if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v28; v9 = v29; v10 = sub_8FB140(v27, (int)"Panel02", (int)&v28, (int)&v29, 0); v11 = sub_8F3EB0(v28 - v8, v29 - v9, (int)v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = sub_8FB140(v27, (int)"Fill_HP", (int)&v28, (int)&v29, 0); v13 = sub_90CB20(v28 - v8, v29 - v9, (int)v12, v2, 2); *(_DWORD *)(v2 + 360) = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); *(_DWORD *)(v2 + 372) = (*(int (**)(void))(**(_DWORD **)(v2 + 360) + 144))(); v14 = sub_8FB140(v27, (int)"Fill_HP_Start", (int)&v28, (int)&v29, 0); v15 = sub_90CB20(v28 - v8, v29 - v9, (int)v14, v2, 2); *(_DWORD *)(v2 + 364) = v15; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v27, (int)"Fill_HP_End", (int)&v28, (int)&v29, 0); v17 = sub_90CB20(v28 - v8, v29 - v9, (int)v16, v2, 2); *(_DWORD *)(v2 + 368) = v17; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v18 = sub_8FB140(v27, (int)"PickPoint", (int)&v28, (int)&v29, 0); v19 = sub_8F3EB0(v28 - v8, v29 - v9, (int)v18, v2, 0, 0); *(_DWORD *)(v2 + 388) = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v20 = sub_6AAFB0(&unk_B91250, "GatherSucc"); if ( v20 ) { *(_DWORD *)(v2 + 392) = v20; v21 = (float *)operator new(0x44u); LOBYTE(v30) = 1; if ( v21 ) v22 = sub_6B0A90(v21, *(_DWORD *)(v2 + 392)); else v22 = 0; LOBYTE(v30) = 0; *(_DWORD *)(v2 + 396) = v22; } v23 = sub_6AAFB0(&unk_B91250, "GatherFail"); if ( v23 ) { *(_DWORD *)(v2 + 400) = v23; v24 = (float *)operator new(0x44u); LOBYTE(v30) = 2; if ( v24 ) v25 = sub_6B0A90(v24, *(_DWORD *)(v2 + 400)); else v25 = 0; LOBYTE(v30) = 0; *(_DWORD *)(v2 + 404) = v25; } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.69999999); v26 = (void (__thiscall ***)(_DWORD, signed int))v27; v30 = -1; if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v26 ) (**v26)(v26, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00524960) -------------------------------------------------------- LONG __thiscall sub_524960(_DWORD *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi v1 = this; *this = &GatheringWin::`vftable'; this[58] = &GatheringWin::`vftable'; v2 = (int *)this[99]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); } return sub_8F10F0(v1); } // 9C6738: using guessed type void *GatheringWin::`vftable'; // 9C6754: using guessed type void *GatheringWin::`vftable'; //----- (00524A20) -------------------------------------------------------- int __thiscall sub_524A20(int this, unsigned int a2, int a3, int a4) { int v4; // esi signed int v5; // ebx float *v6; // ecx double v7; // st7 int v8; // edi int v9; // edi int v10; // ecx int v12; // [esp+3Ch] [ebp+8h] v4 = this; v5 = (signed int)((double)*(signed int *)(this + 372) * 0.25); *(float *)(this + 344) = flt_ACCFCC; *(float *)(this + 348) = (double)(a3 * a2) / 1000.0; v6 = *(float **)(this + 360); *(float *)(v4 + 356) = (double)a2 / 1000.0; if ( 1.0 != v6[76] || 0.0 != v6[75] ) { v7 = 0.0; v6[76] = 1.0; v6[75] = *(float *)&v7; sub_49F670(v6); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 256))(v4, 1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 276))(v4, 1.0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 364) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 368) + 256))(0); (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4); if ( v5 > *(_DWORD *)(v4 + 372) ) v5 = *(_DWORD *)(v4 + 372); v12 = *(_DWORD *)(v4 + 360); v8 = rand() % (*(_DWORD *)(v4 + 372) - v5); v9 = (*(int (**)(void))(*(_DWORD *)v12 + 164))() + v8; (*(void (__stdcall **)(int))(**(_DWORD **)(v4 + 388) + 172))(v9); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 388) + 176))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 388) + 468))(v5); v10 = *(_DWORD *)(v4 + 388); *(_DWORD *)(v4 + 376) = v9; *(_DWORD *)(v4 + 380) = v5 + v9; *(_DWORD *)(v4 + 384) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v10 + 256))(1); return (*(int (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v4 + 236))( v4, xRight, dword_AC2F78, 0.5, 0.69999999); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00524BF0) -------------------------------------------------------- void __thiscall sub_524BF0(void *this, float a2) { void *v2; // esi double v3; // st7 double v4; // st6 _BYTE *v5; // ecx double v6; // rt2 double v7; // st6 double v8; // st7 double v9; // st6 signed int v10; // eax bool v11; // zf signed int v12; // eax double v13; // st6 float *v14; // ecx double v15; // st6 float v16; // ST04_4 float v17; // ST04_4 float v18; // ST00_4 double v19; // st7 float v20; // [esp+14h] [ebp+8h] float v21; // [esp+14h] [ebp+8h] float v22; // [esp+14h] [ebp+8h] float v23; // [esp+14h] [ebp+8h] float v24; // [esp+14h] [ebp+8h] float v25; // [esp+14h] [ebp+8h] v2 = this; v3 = 0.0; v4 = 1.0; if ( sub_65B9D0(dword_AD8EBC, 500000) ) { *((float *)v2 + 87) = 0.0; *((float *)v2 + 88) = *(float *)&v4; } v5 = (_BYTE *)*((_DWORD *)v2 + 99); if ( v5 ) { sub_6B0C00(v5, a2); v3 = 0.0; v4 = 1.0; } v6 = v4; v7 = v3; v8 = v6; if ( v7 >= *((float *)v2 + 87) ) { v19 = v7; if ( v7 >= *((float *)v2 + 88) ) { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } else { v22 = *((float *)v2 + 88) - (flt_ACCFD0 + flt_ACCFD0); *((float *)v2 + 88) = v22; if ( v22 <= v7 ) *((float *)v2 + 88) = v7; if ( v7 < *((float *)v2 + 88) ) { v23 = *((float *)v2 + 88) * flt_BA45B8; v24 = sin(v23); v19 = v24; } v25 = v19; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 97) + 256))(0); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 276))(v2, LODWORD(v25)); } } else { v9 = a2 - *((float *)v2 + 86); v10 = (signed int)(v9 / *((float *)v2 + 89)); v20 = v9 - (double)v10 * *((float *)v2 + 89); if ( v10 > *((_DWORD *)v2 + 96) ) *((_DWORD *)v2 + 96) = v10; v12 = v10 & 0x80000001; v11 = v12 == 0; if ( v12 < 0 ) v11 = (((_BYTE)v12 - 1) | 0xFFFFFFFE) == -1; if ( v11 ) v13 = v20; else v13 = 1.0 - v20; v14 = (float *)*((_DWORD *)v2 + 90); v21 = v13; v15 = v21; if ( v21 > v8 ) { v17 = v8; v18 = v8; sub_4F39A0(v14, v18, v17); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 91) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 92) + 256))(1); } else { v16 = v15; sub_4F39A0(v14, 0.94999999, v16); if ( v21 >= 0.0 ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 91) + 256))(1); if ( v21 >= 0.949999988079071 ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 92) + 256))(1); } } } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (00524E00) -------------------------------------------------------- float *__cdecl sub_524E00(int a1) { void *v1; // eax float *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi float *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x198u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5242C0((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement((volatile LONG *)v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(float *, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { sub_8F2880(v2, 0); sub_8F82A0(&unk_BA6B10, v2); (*(void (__thiscall **)(float *))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(float *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(float *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00524F40) -------------------------------------------------------- void *__thiscall sub_524F40(void *this, char a2) { void *v2; // esi v2 = this; sub_524960(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00524F70) -------------------------------------------------------- BOOL __cdecl sub_524F70(int a1, int a2) { return *(_DWORD *)(a2 + 56) < *(_DWORD *)(a1 + 56); } //----- (00524F90) -------------------------------------------------------- BOOL __cdecl sub_524F90(int a1, int a2) { return *(_DWORD *)(a1 + 56) < *(_DWORD *)(a2 + 56); } //----- (00524FB0) -------------------------------------------------------- BOOL __cdecl sub_524FB0(int a1, int a2) { return *(_DWORD *)(a2 + 60) < *(_DWORD *)(a1 + 60); } //----- (00524FD0) -------------------------------------------------------- BOOL __cdecl sub_524FD0(int a1, int a2) { return *(_DWORD *)(a2 + 64) < *(_DWORD *)(a1 + 64); } //----- (00524FF0) -------------------------------------------------------- char __thiscall sub_524FF0(unsigned __int16 *this) { int v1; // eax v1 = this[495]; return sub_6D1650(); } //----- (00525040) -------------------------------------------------------- char sub_525040() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildList"); return (char)v0; } //----- (00525070) -------------------------------------------------------- char __thiscall sub_525070(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[230], v2[231]); return v3; } //----- (005250A0) -------------------------------------------------------- int __thiscall sub_5250A0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[230]; if ( result ) { v3 = (_DWORD *)this[231]; if ( v3 ) sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[230] + 344) = *(_DWORD *)(v1[231] + 300); result = sub_465130((_DWORD *)v1[230]); } return result; } //----- (005250F0) -------------------------------------------------------- int __thiscall sub_5250F0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(LONG, LONG))(*v1[232] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v1[232]); return (*(int (__stdcall **)(signed int))(*v1[232] + 240))(1); } // AD01E8: using guessed type int dword_AD01E8; //----- (00525160) -------------------------------------------------------- int __thiscall sub_525160(int this) { int v1; // esi int *v2; // eax int v3; // edi const CHAR *v4; // eax int v5; // edi v1 = this; v2 = *(int **)(this + 936); *(_BYTE *)(this + 948) = 0; *(_DWORD *)(this + 940) = 23; if ( v2 ) { v3 = *v2; v4 = sub_40A910(-653596178); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 936), v4); } sub_4638F0(*(_DWORD **)(v1 + 924), 0); *(_DWORD *)(*(_DWORD *)(v1 + 920) + 336) = 0; v5 = *(_DWORD *)(v1 + 920); *(float *)(v5 + 340) = 0.0; *(_DWORD *)(v5 + 344) = (signed int)((double)*(signed int *)(v5 + 336) * 0.0); *(_DWORD *)(*(_DWORD *)(v1 + 920) + 344) = 0; *(_DWORD *)(v1 + 956) = 0; *(_DWORD *)(v1 + 960) = 0; *(_DWORD *)(v1 + 964) = 0; *(_DWORD *)(v1 + 968) = 0; *(_DWORD *)(v1 + 972) = 0; *(_DWORD *)(v1 + 976) = 0; *(_DWORD *)(v1 + 980) = 0; *(_DWORD *)(v1 + 984) = 0; (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 944) + 460))(&unk_9C6992); return sub_8F28E0((_BYTE *)v1); } //----- (00525240) -------------------------------------------------------- int *__thiscall sub_525240(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int *result; // eax int v6; // edi const CHAR *v7; // eax int v8; // edi const CHAR *v9; // eax v4 = this; if ( a2 == 74 ) { result = (int *)this[176]; this[177] = 23; if ( result ) { v8 = *result; v9 = sub_40A910(-653596178); result = (int *)(*(int (__thiscall **)(_DWORD, const CHAR *))(v8 + 472))(v4[176], v9); } } else { result = (int *)(a2 - 75); if ( a2 == 75 ) { result = (int *)this[176]; this[177] = 24; if ( result ) { v6 = *result; v7 = sub_40A910(-535629012); result = (int *)(*(int (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(v4[176], v7); } } } return result; } //----- (005252D0) -------------------------------------------------------- void __thiscall sub_5252D0(char *this, _DWORD *a2) { int v2; // esi int v3; // edi int v4; // ST2C_4 _DWORD *v5; // eax int v6; // edx _BYTE *v7; // eax unsigned int v8; // ecx const char *v9; // eax char *v10; // esi char *v11; // ebx BOOL v12; // eax const unsigned __int8 *v13; // edi size_t v14; // ebx unsigned __int8 *v15; // eax const char *v16; // ebx unsigned int v17; // eax char *v18; // edi char v19; // cl unsigned int v20; // edx char *v21; // edi char v22; // cl unsigned int v23; // eax char *v24; // edi char v25; // cl unsigned int v26; // kr00_4 unsigned int v27; // eax char *v28; // esi char *v29; // edi char v30; // cl int v31; // edx unsigned __int8 v32; // bl size_t v33; // ebx unsigned __int8 *v34; // eax const char *v35; // ebx unsigned int v36; // eax char *v37; // edi char v38; // cl unsigned int v39; // edx char *v40; // edi char v41; // cl unsigned int v42; // eax char *v43; // edi char v44; // cl unsigned int v45; // kr04_4 char v46; // cl char *v47; // edi void *v48; // eax unsigned int v49; // eax char *v50; // edi char v51; // cl unsigned int v52; // eax char *v53; // edi char v54; // cl unsigned int v55; // kr08_4 unsigned int v56; // eax char *v57; // esi char *v58; // edi char v59; // cl char *v60; // edi char *v61; // esi char v62; // cl int v63; // eax int v64; // edi unsigned int v65; // eax char *v66; // edi char v67; // cl unsigned int v68; // eax char *v69; // edi char v70; // cl unsigned int v71; // kr0C_4 char v72; // cl int v73; // eax void **v74; // esi _BYTE *v75; // eax unsigned int v76; // ecx const char *v77; // eax char *v78; // esi const unsigned __int8 *v79; // ebx size_t v80; // edi unsigned __int8 *v81; // eax unsigned int v82; // eax char *v83; // edi char v84; // cl const char *v85; // ebx unsigned int v86; // edx char *v87; // edi char v88; // cl unsigned int v89; // eax char *v90; // edi char v91; // cl unsigned int v92; // kr10_4 unsigned int v93; // eax char *v94; // esi char *v95; // edi char v96; // cl int v97; // edi char *v98; // edi char *v99; // edi char v100; // bl const unsigned __int8 *v101; // edi size_t v102; // ebx unsigned __int8 *v103; // eax const char *v104; // ebx unsigned int v105; // eax char *v106; // edi char v107; // cl unsigned int v108; // edx char *v109; // edi char v110; // cl unsigned int v111; // eax char *v112; // edi char v113; // cl unsigned int v114; // kr14_4 char v115; // cl char *v116; // edi int v117; // esi int v118; // edx int v119; // eax CHAR *v120; // eax unsigned int v121; // eax char *v122; // edi char v123; // cl unsigned int v124; // eax char *v125; // edi char v126; // cl char *v127; // edi __int16 *v128; // esi char v129; // cl const char *v130; // eax unsigned int v131; // kr18_4 unsigned int v132; // eax char *v133; // esi char *v134; // edi char v135; // cl unsigned int v136; // eax char *v137; // edi char v138; // cl unsigned int v139; // eax char *v140; // edi char v141; // cl unsigned int v142; // kr1C_4 char v143; // cl int v144; // ST2C_4 _DWORD *v145; // eax int v146; // ecx int v147; // ST2C_4 _DWORD *v148; // eax int v149; // edx int v150; // [esp-Ch] [ebp-514h] char *v151; // [esp-4h] [ebp-50Ch] __int16 v152; // [esp+10h] [ebp-4F8h] char v153; // [esp+12h] [ebp-4F6h] char v154; // [esp+13h] [ebp-4F5h] int v155; // [esp+110h] [ebp-3F8h] void **v156; // [esp+114h] [ebp-3F4h] void **v157; // [esp+160h] [ebp-3A8h] int v158; // [esp+1A8h] [ebp-360h] BYTE v159[4]; // [esp+1ACh] [ebp-35Ch] BYTE v160[4]; // [esp+1B0h] [ebp-358h] BYTE v161[4]; // [esp+1B4h] [ebp-354h] BYTE v162[4]; // [esp+1B8h] [ebp-350h] unsigned __int8 *v163; // [esp+1BCh] [ebp-34Ch] _DWORD *v164; // [esp+1C0h] [ebp-348h] void ***v165; // [esp+1C4h] [ebp-344h] int v166; // [esp+1C8h] [ebp-340h] BYTE TestChar[4]; // [esp+1CCh] [ebp-33Ch] char *v168; // [esp+1D0h] [ebp-338h] int v169; // [esp+1D4h] [ebp-334h] char *v170; // [esp+1D8h] [ebp-330h] void *v171; // [esp+1DCh] [ebp-32Ch] int v172; // [esp+1ECh] [ebp-31Ch] unsigned int v173; // [esp+1F0h] [ebp-318h] char v174; // [esp+1F8h] [ebp-310h] char v175; // [esp+2F7h] [ebp-211h] char v176; // [esp+2F8h] [ebp-210h] char v177; // [esp+3F7h] [ebp-111h] int v178; // [esp+3F8h] [ebp-110h] int v179; // [esp+3FCh] [ebp-10Ch] int v180; // [esp+400h] [ebp-108h] int v181; // [esp+404h] [ebp-104h] char v182; // [esp+408h] [ebp-100h] int v183; // [esp+460h] [ebp-A8h] void **v184; // [esp+464h] [ebp-A4h] void **v185; // [esp+4B0h] [ebp-58h] int v186; // [esp+504h] [ebp-4h] v2 = (int)a2; v3 = (int)this; v168 = this; v164 = a2; sub_529D40(&v155, 2u, 1); v4 = *(_DWORD *)(v3 + 952); v186 = 0; sub_529500(&v155, v4); v5 = sub_52B2F0(&v155, &v171); LOBYTE(v186) = 1; if ( v5[5] >= 0x10u ) v5 = (_DWORD *)*v5; v166 = ((int (__thiscall *)(_DWORD, _DWORD *))loc_466CA0)(*(_DWORD *)(v3 + 920), v5); if ( v173 >= 0x10 ) operator delete(v171); v6 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v6) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 2; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v155, 2u, 1); v186 = 3; v7 = sub_406190(&v155, " "); sub_529AA0(v7, a2); if ( !strcmp((const char *)(v3 + 956), (const char *)&unk_9C6993) || *(_DWORD *)(v3 + 940) != 23 ) goto LABEL_60; v179 = 2032956015; v178 = 1819239291; v180 = 1869376613; v181 = 11383; memset(&v182, 0, 0xF0u); v152 = 125; v153 = 0; memset(&v154, 0, 0xFDu); memset(&v174, 0, 0x100u); memset(&v176, 0, 0x100u); v8 = a2[5]; v170 = (char *)(v8 < 0x10 ? a2 : *a2); *(_DWORD *)v161 = strlen((const char *)(v3 + 956)); v9 = (const char *)(v8 < 0x10 ? a2 : *a2); *(_DWORD *)v159 = strlen(v9); v169 = 0; if ( *(_DWORD *)v159 <= 0 ) { LABEL_60: if ( *(_DWORD *)(v2 + 20) < 0x10u ) v48 = (void *)v2; else v48 = *(void **)v2; sub_4661A0(*(_DWORD **)(v3 + 920), v166, 1, v48); v64 = (int)v168; goto LABEL_79; } v10 = &v176; while ( 1 ) { v11 = v170; TestChar[0] = *v170; v12 = IsDBCSLeadByte(TestChar[0]); v13 = (const unsigned __int8 *)(v168 + 956); if ( !v12 ) break; v162[0] = *v13; if ( !IsDBCSLeadByte(v162[0]) ) { strncpy(v10, v11, 2u); v169 += 2; v10 += 2; v170 = v11 + 2; goto LABEL_58; } if ( TestChar[0] != v162[0] ) { strncpy(v10, v11, 2u); goto LABEL_35; } v14 = *(_DWORD *)v161; strncpy(&v174, v170, *(size_t *)v161); v15 = _mbsstr((const unsigned __int8 *)&v174, v13); v163 = v15; if ( !v15 ) { strncpy(v10, v170, v14); LABEL_35: v169 += 2; v10 += 2; v170 += 2; goto LABEL_58; } v16 = (const char *)v15; if ( !strcmp((const char *)v15, (const char *)v13) ) { if ( !v169 ) { v49 = strlen(&v174) + 1; v50 = &v177; do v51 = (v50++)[1]; while ( v51 ); qmemcpy(v50, &v174, v49); v52 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v53 = &v177; do v54 = (v53++)[1]; while ( v54 ); qmemcpy(v53, &v152, v52); v55 = strlen(v16); v56 = strlen(&v170[v55]) + 1; v57 = &v170[v55]; v58 = &v177; do v59 = (v58++)[1]; while ( v59 ); goto LABEL_68; } if ( v169 > 0 ) { v17 = strlen((const char *)&v178) + 1; v18 = &v175; do v19 = (v18++)[1]; while ( v19 ); qmemcpy(v18, &v178, v17); v20 = strlen(v16) + 1; v21 = &v175; do v22 = (v21++)[1]; while ( v22 ); qmemcpy(v21, v16, v20); v23 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v24 = &v175; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, &v152, v23); v26 = strlen(v16); v27 = strlen(&v170[v26]) + 1; v28 = &v170[v26]; v29 = &v175; do v30 = (v29++)[1]; while ( v30 ); LABEL_30: v31 = v166; qmemcpy(v29, v28, v27); v151 = &v176; v150 = v31; goto LABEL_69; } } else { strncpy(v10, v170, 2u); v169 += 2; v10 += 2; } memset(&v174, 0, 0x100u); v170 += 2; LABEL_58: if ( v169 >= *(_DWORD *)v159 ) { v2 = (int)v164; v3 = (int)v168; goto LABEL_60; } } v32 = *v13; v160[0] = *v13; if ( IsDBCSLeadByte(v160[0]) ) { v47 = v170; strncpy(v10, v170, 1u); ++v169; ++v10; v170 = v47 + 1; goto LABEL_58; } if ( TestChar[0] != v32 ) { strncpy(v10, v170, 1u); goto LABEL_56; } v33 = *(_DWORD *)v161; strncpy(&v174, v170, *(size_t *)v161); v34 = _mbsstr((const unsigned __int8 *)&v174, v13); v163 = v34; if ( !v34 ) { strncpy(v10, v170, v33); LABEL_56: ++v169; ++v10; ++v170; goto LABEL_58; } v35 = (const char *)v34; if ( strcmp((const char *)v34, (const char *)v13) ) { strncpy(v10, v170, 1u); ++v169; ++v10; LABEL_53: memset(&v174, 0, 0x100u); ++v170; goto LABEL_58; } if ( v169 ) { if ( v169 > 0 ) { v36 = strlen((const char *)&v178) + 1; v37 = &v175; do v38 = (v37++)[1]; while ( v38 ); qmemcpy(v37, &v178, v36); v39 = strlen(v35) + 1; v40 = &v175; do v41 = (v40++)[1]; while ( v41 ); qmemcpy(v40, v35, v39); v42 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v43 = &v175; do v44 = (v43++)[1]; while ( v44 ); qmemcpy(v43, &v152, v42); v45 = strlen(v35); v27 = strlen(&v170[v45]) + 1; v28 = &v170[v45]; v29 = &v175; do v46 = (v29++)[1]; while ( v46 ); goto LABEL_30; } goto LABEL_53; } v65 = strlen(&v174) + 1; v66 = &v177; do v67 = (v66++)[1]; while ( v67 ); qmemcpy(v66, &v174, v65); v68 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v69 = &v177; do v70 = (v69++)[1]; while ( v70 ); qmemcpy(v69, &v152, v68); v71 = strlen(v35); v56 = strlen(&v170[v71]) + 1; v57 = &v170[v71]; v58 = &v177; do v72 = (v58++)[1]; while ( v72 ); LABEL_68: qmemcpy(v58, v57, 4 * (v56 >> 2)); v61 = &v57[4 * (v56 >> 2)]; v60 = &v58[4 * (v56 >> 2)]; v62 = v56; v63 = v166; v151 = (char *)&v178; qmemcpy(v60, v61, v62 & 3); v150 = v63; LABEL_69: v64 = (int)v168; sub_4661A0(*((_DWORD **)v168 + 230), v150, 1, v151); v2 = (int)v164; LABEL_79: v73 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v73) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 4; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v155, 2u, 1); v74 = (void **)(v2 + 28); v186 = 5; v165 = (void ***)v74; v75 = sub_406190(&v155, (const char *)&unk_9C6C9C); sub_529AA0(v75, v74); if ( !strcmp((const char *)(v64 + 956), (const char *)&unk_9C69A1) || *(_DWORD *)(v64 + 940) != 24 ) goto LABEL_135; v179 = 2032956015; v178 = 1819239291; v180 = 1869376613; v181 = 11383; memset(&v182, 0, 0xF0u); v152 = 125; v153 = 0; memset(&v154, 0, 0xFDu); memset(&v174, 0, 0x100u); memset(&v176, 0, 0x100u); v76 = (unsigned int)v74[5]; v170 = (char *)(v76 < 0x10 ? v74 : *v74); *(_DWORD *)v162 = strlen((const char *)(v64 + 956)); v77 = (const char *)(v76 < 0x10 ? v74 : *v74); v158 = strlen(v77); v169 = 0; if ( v158 <= 0 ) goto LABEL_135; v78 = &v176; while ( 2 ) { TestChar[0] = *v170; if ( !IsDBCSLeadByte(TestChar[0]) ) { v100 = v168[956]; v101 = (const unsigned __int8 *)(v168 + 956); v159[0] = v168[956]; if ( !IsDBCSLeadByte(v159[0]) ) { if ( TestChar[0] == v100 ) { v102 = *(_DWORD *)v162; strncpy(&v174, v170, *(size_t *)v162); v103 = _mbsstr((const unsigned __int8 *)&v174, v101); *(_DWORD *)v160 = v103; if ( v103 ) { v104 = (const char *)v103; if ( !strcmp((const char *)v103, (const char *)v101) ) { if ( !v169 ) { v136 = strlen(&v174) + 1; v137 = &v177; do v138 = (v137++)[1]; while ( v138 ); qmemcpy(v137, &v174, v136); v139 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v140 = &v177; do v141 = (v140++)[1]; while ( v141 ); qmemcpy(v140, &v152, v139); v142 = strlen(v104); v132 = strlen(&v170[v142]) + 1; v133 = &v170[v142]; v134 = &v177; do v143 = (v134++)[1]; while ( v143 ); goto LABEL_147; } if ( v169 > 0 ) { v105 = strlen((const char *)&v178) + 1; v106 = &v175; do v107 = (v106++)[1]; while ( v107 ); qmemcpy(v106, &v178, v105); v108 = strlen(v104) + 1; v109 = &v175; do v110 = (v109++)[1]; while ( v110 ); qmemcpy(v109, v104, v108); v111 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v112 = &v175; do v113 = (v112++)[1]; while ( v113 ); qmemcpy(v112, &v152, v111); v114 = strlen(v104); v93 = strlen(&v170[v114]) + 1; v94 = &v170[v114]; v95 = &v175; do v115 = (v95++)[1]; while ( v115 ); goto LABEL_104; } } else { strncpy(v78, v170, 1u); ++v169; ++v78; } memset(&v174, 0, 0x100u); ++v170; goto LABEL_133; } strncpy(v78, v170, v102); } else { strncpy(v78, v170, 1u); } ++v169; ++v78; ++v170; goto LABEL_133; } v116 = v170; strncpy(v78, v170, 1u); ++v169; ++v78; v99 = v116 + 1; LABEL_132: v170 = v99; goto LABEL_133; } v79 = (const unsigned __int8 *)(v168 + 956); v161[0] = v168[956]; if ( !IsDBCSLeadByte(v161[0]) ) { v98 = v170; strncpy(v78, v170, 2u); v169 += 2; v78 += 2; v99 = v98 + 2; goto LABEL_132; } if ( TestChar[0] != v161[0] ) { strncpy(v78, v170, 2u); goto LABEL_109; } v80 = *(_DWORD *)v162; strncpy(&v174, v170, *(size_t *)v162); v81 = _mbsstr((const unsigned __int8 *)&v174, v79); v163 = v81; if ( !v81 ) { strncpy(v78, v170, v80); LABEL_109: v169 += 2; v78 += 2; v170 += 2; goto LABEL_133; } if ( strcmp((const char *)v81, (const char *)v79) ) { strncpy(v78, v170, 2u); v169 += 2; v78 += 2; goto LABEL_106; } if ( !v169 ) { v121 = strlen(&v174) + 1; v122 = &v177; do v123 = (v122++)[1]; while ( v123 ); qmemcpy(v122, &v174, v121); v124 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v125 = &v177; do v126 = (v125++)[1]; while ( v126 ); qmemcpy(v125, &v152, 4 * (v124 >> 2)); v128 = &v152 + 2 * (v124 >> 2); v127 = &v125[4 * (v124 >> 2)]; v129 = v124; v130 = (const char *)v163; qmemcpy(v127, v128, v129 & 3); v131 = strlen(v130); v132 = strlen(&v170[v131]) + 1; v133 = &v170[v131]; v134 = &v177; do v135 = (v134++)[1]; while ( v135 ); LABEL_147: qmemcpy(v134, v133, v132); v97 = v166; v117 = (int)v168; sub_4661A0(*((_DWORD **)v168 + 230), v166, 2, &v178); goto LABEL_139; } if ( v169 > 0 ) { v82 = strlen((const char *)&v178) + 1; v83 = &v175; do v84 = (v83++)[1]; while ( v84 ); v85 = (const char *)v163; qmemcpy(v83, &v178, v82); v86 = strlen(v85) + 1; v87 = &v175; do v88 = (v87++)[1]; while ( v88 ); qmemcpy(v87, v85, v86); v89 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v90 = &v175; do v91 = (v90++)[1]; while ( v91 ); qmemcpy(v90, &v152, v89); v92 = strlen(v85); v93 = strlen(&v170[v92]) + 1; v94 = &v170[v92]; v95 = &v175; do v96 = (v95++)[1]; while ( v96 ); LABEL_104: qmemcpy(v95, v94, v93); v97 = v166; sub_4661A0(*((_DWORD **)v168 + 230), v166, 2, &v176); goto LABEL_138; } LABEL_106: memset(&v174, 0, 0x100u); v170 += 2; LABEL_133: if ( v169 < v158 ) continue; break; } v74 = (void **)v165; v64 = (int)v168; LABEL_135: if ( (unsigned int)v74[5] >= 0x10 ) v74 = (void **)*v74; sub_4661A0(*(_DWORD **)(v64 + 920), v166, 2, v74); v97 = v166; LABEL_138: v117 = (int)v168; LABEL_139: v118 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v118) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 6; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); v119 = v164[14]; if ( !v119 ) { v120 = (CHAR *)sub_40C190(1044198562); goto LABEL_157; } if ( v119 == 1 ) { v120 = (CHAR *)sub_40C190(1044934038); LABEL_157: sub_4661A0(*(_DWORD **)(v117 + 920), v97, 3, v120); } sub_529D40(&v155, 2u, 1); v144 = v164[15]; v186 = 7; sub_529500(&v155, v144); v145 = sub_52B2F0(&v155, &v171); LOBYTE(v186) = 8; if ( v145[5] >= 0x10u ) v145 = (_DWORD *)*v145; sub_4661A0(*(_DWORD **)(v117 + 920), v97, 4, v145); if ( v173 >= 0x10 ) operator delete(v171); v146 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v146) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 9; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v183, 2u, 1); v147 = v164[16]; v186 = 10; sub_529500(&v183, v147); v148 = sub_52B2F0(&v183, &v171); LOBYTE(v186) = 11; if ( v148[5] >= 0x10u ) v148 = (_DWORD *)*v148; sub_4661A0(*(_DWORD **)(v117 + 920), v97, 5, v148); if ( v173 >= 0x10 ) operator delete(v171); v149 = *(_DWORD *)(v183 + 4); v173 = 15; v172 = 0; LOBYTE(v171) = 0; v165 = &v185; *(int *)((char *)&v183 + v149) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 12; v184 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v184); sub_423AE0(&v184); *(int *)((char *)&v183 + *(_DWORD *)(v183 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v185 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v185); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (00526660) -------------------------------------------------------- int __thiscall sub_526660(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int v4; // edi int v5; // ST08_4 char *v6; // eax char *v7; // eax int v8; // ecx unsigned __int8 *v9; // edi int v10; // eax _BYTE *v11; // eax const unsigned __int8 *v12; // eax int v13; // ebx int v14; // ST08_4 char *v15; // eax char *v16; // eax int v17; // edx const unsigned __int8 *v18; // ebx _BYTE *v19; // eax int v20; // ebx int v21; // ST08_4 char *v22; // eax char *v23; // eax int v24; // ebx int v25; // ST08_4 char *v26; // eax char *v27; // eax int v28; // ecx char v30; // [esp+10h] [ebp-148h] int v31; // [esp+A8h] [ebp-B0h] void **v32; // [esp+ACh] [ebp-ACh] void **v33; // [esp+BCh] [ebp-9Ch] _DWORD *v34; // [esp+C0h] [ebp-98h] _DWORD *v35; // [esp+CCh] [ebp-8Ch] _DWORD *v36; // [esp+D0h] [ebp-88h] _DWORD *v37; // [esp+DCh] [ebp-7Ch] _DWORD *v38; // [esp+E0h] [ebp-78h] int v39; // [esp+E8h] [ebp-70h] int v40; // [esp+ECh] [ebp-6Ch] void **v41; // [esp+F8h] [ebp-60h] void ***v42; // [esp+140h] [ebp-18h] unsigned int v43; // [esp+144h] [ebp-14h] int v44; // [esp+148h] [ebp-10h] int v45; // [esp+154h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[230]; v2[238] = 0; sub_466A50(v3); v4 = *(_DWORD *)v2[233]; v5 = v2[238]; v6 = (char *)sub_40A910(995377735); v7 = sub_7549E0(v6, v5); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[233], v7); v8 = v2[220] - v2[219]; v43 = 0; if ( v8 / 68 ) { v44 = 0; do { v9 = (unsigned __int8 *)(v44 + v2[219]); if ( a2 ) { v10 = v2[235]; if ( v10 == 23 ) { sub_529D40(&v31, 2u, 1); v45 = 0; v11 = sub_406190(&v31, " "); sub_529AA0(v11, v9); if ( *((_DWORD *)v9 + 5) < 0x10u ) v12 = v9; else v12 = *(const unsigned __int8 **)v9; if ( _mbsstr(v12, (const unsigned __int8 *)v2 + 956) ) { ++v2[238]; v13 = *(_DWORD *)v2[233]; v14 = v2[238]; v15 = (char *)sub_40A910(995377735); v16 = sub_7549E0(v15, v14); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(v2[233], v16); sub_5252D0((char *)v2, v9); } v17 = *(_DWORD *)(v31 + 4); v42 = &v41; *(int *)((char *)&v31 + v17) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v45 = 1; v32 = &std::basic_stringbuf,std::allocator>::`vftable'; if ( v40 & 1 ) operator delete(*v33); *v33 = 0; *v35 = 0; *v37 = 0; *v34 = 0; *v36 = 0; *v38 = 0; v40 &= 0xFFFFFFFE; v39 = 0; sub_423AE0(&v32); *(int *)((char *)&v31 + *(_DWORD *)(v31 + 4)) = (int)&std::basic_ostream>::`vftable'; v45 = -1; v41 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v41); } else if ( v10 == 24 ) { sub_529D40(&v30, 2u, 1); v18 = v9 + 28; v45 = 2; v19 = sub_406190(&v30, " "); sub_529AA0(v19, (_DWORD *)v9 + 7); if ( *((_DWORD *)v9 + 12) >= 0x10u ) v18 = *(const unsigned __int8 **)v18; if ( _mbsstr(v18, (const unsigned __int8 *)v2 + 956) ) { ++v2[238]; v20 = *(_DWORD *)v2[233]; v21 = v2[238]; v22 = (char *)sub_40A910(995377735); v23 = sub_7549E0(v22, v21); (*(void (__thiscall **)(_DWORD, char *))(v20 + 472))(v2[233], v23); sub_5252D0((char *)v2, v9); } v45 = -1; sub_5291C0(&v30); } } else if ( !*((_BYTE *)v2 + 949) ) { ++v2[238]; v24 = *(_DWORD *)v2[233]; v25 = v2[238]; v26 = (char *)sub_40A910(995377735); v27 = sub_7549E0(v26, v25); (*(void (__thiscall **)(_DWORD, char *))(v24 + 472))(v2[233], v27); sub_5252D0((char *)v2, v9); } v28 = v2[220] - v2[219]; v44 += 68; ++v43; } while ( v43 < v28 / 68 ); } return sub_465130((_DWORD *)v2[230]); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (005269D0) -------------------------------------------------------- _DWORD *__thiscall sub_5269D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildListWin::`vftable'; v1[58] = &GuildListWin::`vftable'; v1[219] = 0; v1[220] = 0; v1[221] = 0; v1[228] = 0; v1[236] = 0; *((_WORD *)v1 + 474) = 0; v1[232] = 0; v1[238] = 0; v1[235] = 23; v1[239] = 0; v1[240] = 0; v1[241] = 0; v1[242] = 0; v1[243] = 0; v1[244] = 0; v1[245] = 0; v1[246] = 0; *((_WORD *)v1 + 495) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C6DEC: using guessed type void *GuildListWin::`vftable'; // 9C6E0C: using guessed type void *GuildListWin::`vftable'; //----- (00526A60) -------------------------------------------------------- LONG __thiscall sub_526A60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // ecx _DWORD *v4; // eax v1 = this; *this = &GuildListWin::`vftable'; this[58] = &GuildListWin::`vftable'; v2 = this[236]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[228]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)(v1 + 224)); v1[228] = 0; } v4 = (_DWORD *)v1[219]; if ( v4 ) { sub_5F6400(v4, (_DWORD *)v1[220]); operator delete((void *)v1[219]); } v1[219] = 0; v1[220] = 0; v1[221] = 0; return sub_8F10F0(v1); } // 9C6DEC: using guessed type void *GuildListWin::`vftable'; // 9C6E0C: using guessed type void *GuildListWin::`vftable'; //----- (00526B60) -------------------------------------------------------- volatile LONG *__cdecl sub_526B60(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x3E8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5269D0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00526C90) -------------------------------------------------------- int __thiscall sub_526C90(_DWORD *this) { _DWORD *v1; // esi const void **v2; // eax int v3; // ecx _DWORD *v4; // edi v1 = this; this[239] = 0; this[240] = 0; this[241] = 0; this[242] = 0; this[243] = 0; this[244] = 0; this[245] = 0; this[246] = 0; v2 = (const void **)this[220]; v3 = this[219]; if ( (const void **)v3 != v2 ) { v4 = (_DWORD *)sub_70AC30(v2, v2, v3); sub_5F6400(v4, (_DWORD *)v1[220]); v1[220] = v4; } sub_466A50((_DWORD *)v1[230]); return sub_465130((_DWORD *)v1[230]); } //----- (00526D30) -------------------------------------------------------- void __thiscall sub_526D30(void *this, int a2, unsigned int a3) { int v3; // edx int v4; // ecx int v5; // edx int v6; // ecx int v7; // eax int v8; // edx int v9; // eax int v10; // ecx int v11; // esi char *v12; // eax char *v13; // eax int v14; // edi unsigned int v15; // edx void *v16; // [esp+10h] [ebp-84h] void *v17; // [esp+14h] [ebp-80h] int v18; // [esp+24h] [ebp-70h] unsigned int v19; // [esp+28h] [ebp-6Ch] void *v20; // [esp+30h] [ebp-64h] int v21; // [esp+40h] [ebp-54h] unsigned int v22; // [esp+44h] [ebp-50h] int v23; // [esp+4Ch] [ebp-48h] int v24; // [esp+50h] [ebp-44h] int v25; // [esp+54h] [ebp-40h] int v26; // [esp+58h] [ebp-3Ch] int v27; // [esp+5Ch] [ebp-38h] int v28; // [esp+60h] [ebp-34h] int v29; // [esp+64h] [ebp-30h] char v30; // [esp+68h] [ebp-2Ch] int v31; // [esp+6Ch] [ebp-28h] int v32; // [esp+70h] [ebp-24h] int v33; // [esp+74h] [ebp-20h] int v34; // [esp+78h] [ebp-1Ch] int v35; // [esp+7Ch] [ebp-18h] char v36; // [esp+80h] [ebp-14h] int v37; // [esp+90h] [ebp-4h] v16 = this; v19 = 15; v18 = 0; LOBYTE(v17) = 0; v22 = 15; v21 = 0; LOBYTE(v20) = 0; v37 = 0; sub_4018E0(&v17, (void *)&byte_9A8050, 0); sub_4018E0(&v20, (void *)&byte_9A8050, 0); if ( a2 ) { v3 = *(_DWORD *)(a2 + 12); v4 = *(_DWORD *)(a2 + 8); v26 = *(_DWORD *)(a2 + 4); v29 = *(_DWORD *)(a2 + 16); v28 = v3; v27 = v4; v30 = 0; sub_4018E0(&v17, &v26, strlen((const char *)&v26)); v5 = *(_DWORD *)(a2 + 20); v6 = *(_DWORD *)(a2 + 28); v32 = *(_DWORD *)(a2 + 24); v7 = *(_DWORD *)(a2 + 36); v31 = v5; v8 = *(_DWORD *)(a2 + 32); v35 = v7; v34 = v8; v33 = v6; v36 = 0; LOBYTE(v35) = 0; sub_4018E0(&v20, &v31, strlen((const char *)&v31)); v9 = *(unsigned __int8 *)(a2 + 40); v10 = *(unsigned __int16 *)(a2 + 42); v24 = *(unsigned __int8 *)(a2 + 41); v23 = v9; v25 = v10; if ( a3 > 0 ) { v11 = **((_DWORD **)v16 + 233); v12 = (char *)sub_40A910(995377735); v13 = sub_7549E0(v12, a3); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(*((_DWORD *)v16 + 233), v13); } sub_52BA90((unsigned int *)v16 + 219, (unsigned int)&v17); if ( !*((_BYTE *)v16 + 948) ) { v14 = *((_DWORD *)v16 + 219); v15 = (signed int)((unsigned __int64)(2021161081i64 * (*((_DWORD *)v16 + 220) - v14)) >> 32) >> 5; sub_5F7920(v14, *((_DWORD *)v16 + 220), v15 + (v15 >> 31), (unsigned __int8 (__cdecl *)(int, int))sub_5ED190); *((_BYTE *)v16 + 948) = 1; } } if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v19 >= 0x10 ) operator delete(v17); } //----- (00526F20) -------------------------------------------------------- int __thiscall sub_526F20(_DWORD **this) { _DWORD **v1; // esi int result; // eax _DWORD *v3; // edi char *v4; // eax int v5; // edi char v6; // cl _DWORD *v7; // eax _DWORD *v8; // ecx _DWORD *v9; // edi int (__stdcall ***v10)(char *); // ecx int (__stdcall *v11)(char *); // eax int v12; // eax _DWORD *v13; // ecx float *v14; // edi char v15; // [esp-18h] [ebp-28h] int v16; // [esp-14h] [ebp-24h] int v17; // [esp-10h] [ebp-20h] int v18; // [esp-Ch] [ebp-1Ch] int v19; // [esp-8h] [ebp-18h] int v20; // [esp-4h] [ebp-14h] char *v21; // [esp+Ch] [ebp-4h] v1 = this; result = (*(int (**)(void))(*this[236] + 452))(); if ( result ) { v3 = v1 + 239; *v3 = 0; v3[1] = 0; v3[2] = 0; v3[3] = 0; v3[4] = 0; v3[5] = 0; v3[6] = 0; v3[7] = 0; v4 = (char *)(*(int (**)(void))(*v1[236] + 452))(); v5 = (char *)(v1 + 239) - v4; do { v6 = *v4; v4[v5] = *v4; ++v4; } while ( v6 ); v7 = v1[235]; if ( v7 == (_DWORD *)23 ) { v8 = v1[228]; v9 = v1 + 224; if ( v8 ) { (*(void (__stdcall **)(bool))(*v8 + 12))(v8 != v9); v1[228] = 0; } if ( sub_5ED190 ) { *v9 = &std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; v1[225] = sub_5ED190; v1[228] = v1 + 224; } else { v1[228] = 0; } } else if ( v7 == (_DWORD *)24 ) { sub_529A50(v1 + 224, (int)sub_5F6290); } v10 = (int (__stdcall ***)(char *))v1[228]; v21 = &v15; if ( v10 ) { v11 = **v10; if ( v10 == v1 + 224 ) v12 = v11(&v15); else v12 = v11(0); v19 = v12; } else { v19 = 0; } sub_5F7A60(v1[219], v1[220], v15, v16, v17, v18, v19); v13 = v1[231]; v20 = 0; *((_BYTE *)v1 + 949) = 1; sub_4638F0(v13, v20); v1[230][84] = 0; v14 = (float *)v1[230]; v14[85] = 0.0; *((_DWORD *)v14 + 86) = (signed int)((double)*((signed int *)v14 + 84) * 0.0); v1[230][86] = 0; result = sub_526660(v1, 1); } return result; } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // 9C6D80: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; //----- (00527090) -------------------------------------------------------- int __thiscall sub_527090(int this) { _DWORD *v1; // esi int (__stdcall ***v2)(char *); // edi int v3; // ecx int (__stdcall ***v4)(char *); // eax int v5; // eax char v7; // [esp-18h] [ebp-28h] int v8; // [esp-14h] [ebp-24h] int v9; // [esp-10h] [ebp-20h] int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] char *v12; // [esp+Ch] [ebp-4h] v1 = (_DWORD *)this; *(_BYTE *)(this + 949) = 0; *(_DWORD *)(this + 956) = 0; *(_DWORD *)(this + 960) = 0; *(_DWORD *)(this + 964) = 0; *(_DWORD *)(this + 968) = 0; *(_DWORD *)(this + 972) = 0; *(_DWORD *)(this + 976) = 0; *(_DWORD *)(this + 980) = 0; v2 = (int (__stdcall ***)(char *))(this + 896); *(_DWORD *)(this + 984) = 0; v3 = *(_DWORD *)(this + 912); if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( sub_5ED190 ) { *v2 = (int (__stdcall **)(char *))&std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; v2[1] = (int (__stdcall **)(char *))sub_5ED190; v2[4] = (int (__stdcall **)(char *))v2; } else { v2[4] = 0; } v4 = (int (__stdcall ***)(char *))v2[4]; v12 = &v7; if ( v4 ) { if ( v4 == v2 ) v5 = (**v4)(&v7); else v5 = (**v4)(0); v11 = v5; } else { v11 = 0; } sub_5F7A60(v1[219], v1[220], v7, v8, v9, v10, v11); return sub_526660(v1, 0); } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // 9C6D80: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; //----- (00527170) -------------------------------------------------------- char __thiscall sub_527170(volatile LONG **this, int a2) { volatile LONG **v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax _DWORD *v22; // eax _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax int v30; // eax int v31; // ecx _DWORD *v32; // eax int v33; // eax volatile LONG *v34; // eax volatile LONG v35; // edx const CHAR *v36; // eax int v37; // ecx _DWORD *v38; // eax int v39; // eax volatile LONG *v40; // eax volatile LONG v41; // edx const CHAR *v42; // eax int v43; // ecx _DWORD *v44; // eax int v45; // eax volatile LONG *v46; // eax volatile LONG v47; // edx const CHAR *v48; // eax int v49; // ecx _DWORD *v50; // eax int v51; // eax volatile LONG *v52; // eax volatile LONG v53; // edx const CHAR *v54; // eax int v55; // ecx _DWORD *v56; // eax int v57; // eax volatile LONG *v58; // eax volatile LONG v59; // edx const CHAR *v60; // eax int v61; // ecx _DWORD *v62; // eax int v63; // eax volatile LONG *v64; // eax volatile LONG v65; // edx const CHAR *v66; // eax int v67; // ecx _DWORD *v68; // eax int v69; // eax volatile LONG *v70; // eax int v71; // eax _DWORD *v72; // edx int v73; // eax volatile LONG *v74; // eax const CHAR *v75; // eax volatile LONG **v76; // eax volatile LONG *v77; // eax int v78; // eax volatile LONG *v79; // eax const CHAR *v80; // eax const CHAR *v81; // eax int v82; // eax volatile LONG *v83; // edx int v84; // eax volatile LONG *v85; // edi volatile LONG v86; // ebx const CHAR *v87; // eax int v88; // [esp+C0h] [ebp-70h] int v89; // [esp+C4h] [ebp-6Ch] int v90; // [esp+C8h] [ebp-68h] char v91; // [esp+D0h] [ebp-60h] int v92; // [esp+D4h] [ebp-5Ch] int v93; // [esp+D8h] [ebp-58h] int v94; // [esp+DCh] [ebp-54h] int v95; // [esp+E0h] [ebp-50h] int v96; // [esp+E4h] [ebp-4Ch] int v97; // [esp+E8h] [ebp-48h] volatile LONG *v98; // [esp+ECh] [ebp-44h] int v99; // [esp+F0h] [ebp-40h] int v100; // [esp+F4h] [ebp-3Ch] int v101; // [esp+F8h] [ebp-38h] int v102; // [esp+FCh] [ebp-34h] _DWORD *v103; // [esp+100h] [ebp-30h] const void *v104[7]; // [esp+104h] [ebp-2Ch] int v105; // [esp+12Ch] [ebp-4h] v2 = this; v102 = 0; v105 = 0; v98 = (volatile LONG *)sub_43D0D0(4u); if ( !v98 ) { v105 = -1; if ( v102 && !InterlockedDecrement((volatile LONG *)(v102 + 4)) ) { if ( v102 ) (**(void (__thiscall ***)(int, signed int))v102)(v102, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\GuildList.nif"); sub_8F66B0(v5, (int)&v102, v4); if ( !v102 ) return 0; v6 = sub_8FB140(v102, (int)"Frame", (int)&v101, (int)&v100, 0); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, a2, (int)"GuildListWin", 0) ) { v8 = v101; v9 = v100; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v102, (int)"Theme", (int)&v101, (int)&v100, v10); else v11 = sub_8FB140(v102, (int)"Theme", (int)&v101, (int)&v100, 0); sub_8F3EB0(v101 - v8, v100 - v9, (int)v11, (int)v2, 0, 0); v103 = sub_8FB140(v102, (int)"ClsNor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"ClsClick"); sub_8FB650(v103, v102, (int)"ClsOver"); sub_90C8D0(v101 - v8, v100 - v9, (int)v103, (int)v2); v103 = (_DWORD *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v102 + 72))("HelpLinkNor") ) { v103 = sub_8FB140(v102, (int)"HelpLinkNor", (int)&v101, (int)&v100, v103); sub_8FB650(v103, v102, (int)"HelpLinkClick"); sub_8FB650(v103, v102, (int)"HelpLinkOver"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 25, 0, 0); } v12 = sub_8FB140(v102, (int)"Panel01", (int)&v101, (int)&v100, v98); v13 = sub_8F3EB0(v101 - v8, v100 - v9, (int)v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( sub_8F71E0(v102, (int)"WinTitle", &v101, &v100, &v97, &v96) ) { v14 = sub_421050(7); v15 = sub_8F4A20(v101, v100 - v9, v97, v96, v14, (int)v2, 0, 0); v16 = *v15; v103 = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 5); (*(void (__stdcall **)(int *))(*v103 + 468))(&dword_AA8D98); v99 = *v103; v17 = sub_40A910(743650721); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v17); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v18 = sub_8FB140(v102, (int)"IconSlot", (int)&v101, (int)&v100, v98); sub_8F3EB0(v101 - v8, v100 - v9, (int)v18, (int)v2, 0, 0); v88 = 0; v89 = 0; v90 = 0; v91 = 0; v92 = 0; v93 = 0; v94 = 0; v95 = 0; LOBYTE(v105) = 1; v19 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 1); *v19 = 1; v19[1] = v102; v103 = v19; sub_4019E0(v104, "ColumnBarNor"); LOBYTE(v105) = 2; v103 += 18; sub_40B060(v103, v104); LOBYTE(v105) = 1; sub_636A10(v104); sub_4019E0(v104, "ColumnBarClick"); LOBYTE(v105) = 3; sub_40B060(v103, v104); LOBYTE(v105) = 1; sub_636A10(v104); sub_4019E0(v104, "ColumnBarOver"); LOBYTE(v105) = 4; sub_40B060(v103, v104); LOBYTE(v105) = 1; sub_636A10(v104); v20 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v20; *v20 = 2; sub_4019E0(v104, "Column01"); LOBYTE(v105) = 5; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v103[1] = v102; v21 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v21; *v21 = 2; sub_4019E0(v104, "Column02"); LOBYTE(v105) = 6; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v103[1] = v102; v22 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v22; *v22 = 2; sub_4019E0(v104, "Column03"); LOBYTE(v105) = 7; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v23 = v103; v103[1] = v102; *((_BYTE *)v23 + 88) = 1; v24 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v24; *v24 = 2; sub_4019E0(v104, "Column04"); LOBYTE(v105) = 8; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v103[1] = v102; v25 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v25; *v25 = 2; sub_4019E0(v104, "Column05"); LOBYTE(v105) = 9; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v103[1] = v102; v26 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v88, 2); v103 = v26; *v26 = 2; sub_4019E0(v104, "Column06"); LOBYTE(v105) = 10; sub_40B060(v103 + 18, v104); LOBYTE(v105) = 1; sub_636A10(v104); v103[1] = v102; v92 = 6; v93 = 0; sub_466680(&v88, 0); v27 = sub_8FB140(v102, (int)"SubText01", (int)&v101, (int)&v100, v98); v28 = sub_466330(v101 - v8, v100 - v9, (int)v27, *(float *)&v2, (int **)&v88, 0, 1); v2[230] = v28; sub_465130(v28); v29 = sub_8FB140(v102, (int)"SlideBar_SlideBtnMiddle", (int)&v101, (int)&v100, v98); v30 = sub_464310(v102, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v29, 0, v2); v2[231] = (volatile LONG *)v30; *(_DWORD *)(v30 + 312) = 13; *((_DWORD *)v2[231] + 76) = 1; v103 = sub_8FB140(v102, (int)"Title01Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title01Click"); sub_8FB650(v103, v102, (int)"Title01Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 14, 0, 0); v31 = v103[9]; v32 = *(_DWORD **)(*(_DWORD *)v31 + 20); v99 = *(_DWORD *)(*(_DWORD *)v31 + 24); v103 = v32; v33 = sub_421050(7); v34 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v33, (int)v2, 0, 0); v35 = *v34; v103 = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(v35 + 488))(v34, 5); v99 = *v103; v36 = sub_40A910(649165967); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v36); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Title02Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title02Click"); sub_8FB650(v103, v102, (int)"Title02Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 15, 0, 0); v37 = v103[9]; v38 = *(_DWORD **)(*(_DWORD *)v37 + 20); v99 = *(_DWORD *)(*(_DWORD *)v37 + 24); v103 = v38; v39 = sub_421050(7); v40 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v39, (int)v2, 0, 0); v41 = *v40; v103 = v40; (*(void (__thiscall **)(volatile LONG *, signed int))(v41 + 488))(v40, 5); v99 = *v103; v42 = sub_40A910(-653596178); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v42); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Title03Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title03Click"); sub_8FB650(v103, v102, (int)"Title03Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 16, 0, 0); v43 = v103[9]; v44 = *(_DWORD **)(*(_DWORD *)v43 + 20); v99 = *(_DWORD *)(*(_DWORD *)v43 + 24); v103 = v44; v45 = sub_421050(7); v46 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v45, (int)v2, 0, 0); v47 = *v46; v103 = v46; (*(void (__thiscall **)(volatile LONG *, signed int))(v47 + 488))(v46, 5); v99 = *v103; v48 = sub_40A910(-535629012); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v48); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Title04Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title04Click"); sub_8FB650(v103, v102, (int)"Title04Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 17, 0, 0); v49 = v103[9]; v50 = *(_DWORD **)(*(_DWORD *)v49 + 20); v99 = *(_DWORD *)(*(_DWORD *)v49 + 24); v103 = v50; v51 = sub_421050(7); v52 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v51, (int)v2, 0, 0); v53 = *v52; v103 = v52; (*(void (__thiscall **)(volatile LONG *, signed int))(v53 + 488))(v52, 5); v99 = *v103; v54 = sub_40A910(694369682); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v54); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Title05Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title05Click"); sub_8FB650(v103, v102, (int)"Title05Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 18, 0, 0); v55 = v103[9]; v56 = *(_DWORD **)(*(_DWORD *)v55 + 20); v99 = *(_DWORD *)(*(_DWORD *)v55 + 24); v103 = v56; v57 = sub_421050(7); v58 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v57, (int)v2, 0, 0); v59 = *v58; v103 = v58; (*(void (__thiscall **)(volatile LONG *, signed int))(v59 + 488))(v58, 5); v99 = *v103; v60 = sub_40C190(-2000035884); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v60); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Title06Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Title06Click"); sub_8FB650(v103, v102, (int)"Title06Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 19, 0, 0); v61 = v103[9]; v62 = *(_DWORD **)(*(_DWORD *)v61 + 20); v99 = *(_DWORD *)(*(_DWORD *)v61 + 24); v103 = v62; v63 = sub_421050(7); v64 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v63, (int)v2, 0, 0); v65 = *v64; v103 = v64; (*(void (__thiscall **)(volatile LONG *, signed int))(v65 + 488))(v64, 5); v99 = *v103; v66 = sub_40A910(-1074080219); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v99 + 472))(v103, v66); (*(void (__stdcall **)(_DWORD))(*v103 + 240))(0); v103 = sub_8FB140(v102, (int)"Count_total", (int)&v101, (int)&v100, v98); sub_8F3EB0(v101 - v8, v100 - v9, (int)v103, (int)v2, 0, 0); v67 = v103[9]; v68 = *(_DWORD **)(*(_DWORD *)v67 + 20); v99 = *(_DWORD *)(*(_DWORD *)v67 + 24); v103 = v68; v69 = sub_421050(7); v70 = sub_8F4A20(v101 - v8, v100 - v9 + 1, (int)v103, v99, v69, (int)v2, 0, 0); v2[233] = v70; (*(void (__thiscall **)(volatile LONG *, signed int))(*v70 + 488))(v70, 5); (*(void (__stdcall **)(void *))(*v2[233] + 472))(&unk_9C698B); (*(void (__stdcall **)(_DWORD))(*v2[233] + 240))(0); v103 = sub_8FB140(v102, (int)"SearchChoiceNor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"SearchChoiceClick"); sub_8FB650(v103, v102, (int)"SearchChoiceOver"); sub_8FE0F0(v101, v100, (int)v103, (int)v2, 20, 0, 0); v71 = *(_DWORD *)v103[9]; v72 = *(_DWORD **)(v71 + 20); v99 = *(_DWORD *)(v71 + 24); v103 = v72; v73 = sub_421050(0); v74 = sub_8F4A20(v101, v100 + 1, (int)v103, v99, v73, (int)v2, 0, 0); v2[234] = v74; (*(void (__thiscall **)(volatile LONG *, signed int))(*v74 + 488))(v74, 5); v99 = *v2[234]; v75 = sub_40A910(-653596178); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v99 + 472))(v2[234], v75); (*(void (__stdcall **)(_DWORD))(*v2[234] + 240))(0); v76 = sub_8FB140(v102, (int)"Search_Input", (int)&v101, (int)&v100, v98); sub_8F3EB0(v101, v100, (int)v76, (int)v2, 0, 0); v77 = sub_45A900(v101, v100 + 2, v97, v96, (int)v2, 1342177280, 16, 1, 1, 0, 1); sub_56FF80(v2 + 236, (int)v77); sub_459B60(v2[236], 1); v103 = sub_8FB140(v102, (int)"SearchNor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"SearchClick"); sub_8FB650(v103, v102, (int)"SearchOver"); sub_8FE0F0(v101, v100, (int)v103, (int)v2, 21, 0, 0); v78 = sub_43D0D0(1u); v79 = sub_58E5D0(v78, 4, 4, 0); v2[232] = v79; (**((void (__stdcall ***)(int))v79 + 58))((int)(v2 + 58)); sub_58DFD0(v2[232]); v80 = sub_40A910(-653596178); v103 = sub_58E290(v80, 0, 0, 0, 0, 0, 0); sub_58D580((void **)v103, (void *)0x4A, 0); sub_58E080(v2[232], v9, (int)v103); v81 = sub_40A910(-535629012); v103 = sub_58E290(v81, 0, 0, 0, 0, 0, 0); sub_58D580((void **)v103, (void *)0x4B, 0); sub_58E080(v2[232], v9, (int)v103); sub_58D930(v2[232], 0); (*(void (__stdcall **)(_DWORD))(*v2[232] + 256))(0); v103 = sub_8FB140(v102, (int)"Btn01Nor", (int)&v101, (int)&v100, v98); sub_8FB650(v103, v102, (int)"Btn01Click"); sub_8FB650(v103, v102, (int)"Btn01Over"); sub_8FE0F0(v101 - v8, v100 - v9, (int)v103, (int)v2, 22, 0, 0); v82 = *(_DWORD *)v103[9]; v83 = *(volatile LONG **)(v82 + 20); v99 = *(_DWORD *)(v82 + 24); v98 = v83; v84 = sub_421050(7); v85 = sub_8F4A20(v101 - v8, v100 - v9, (int)v98, v99, v84, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v85 + 488))(v85, 5); v86 = *v85; v87 = sub_40A910(1250851466); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v86 + 472))(v85, v87); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v85 + 240))(v85, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v105) = 0; sub_40AE10((void **)&v88); v105 = -1; sub_410C00(&v102); result = 1; } else { v105 = -1; sub_410C00(&v102); result = 0; } } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v102; v105 = -1; if ( v102 && !InterlockedDecrement((volatile LONG *)(v102 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005281E0) -------------------------------------------------------- char __thiscall sub_5281E0(int this, int a2, int a3) { char result; // al int v4; // esi int v5; // edi char v6; // [esp-18h] [ebp-20h] int v7; // [esp-14h] [ebp-1Ch] int v8; // [esp-10h] [ebp-18h] int v9; // [esp-Ch] [ebp-14h] int v10; // [esp-8h] [ebp-10h] void *v11; // [esp-4h] [ebp-Ch] result = a2 - 11; v4 = this; switch ( a2 ) { case 11: return sub_524FF0((unsigned __int16 *)this); case 12: v11 = (void *)(*(unsigned __int16 *)(this + 990) + 22); return sub_6D1650(); case 13: return sub_5250A0((_DWORD *)this); case 15: if ( byte_ACEC14 ) { byte_ACEC14 = 0; v11 = sub_585460; } else { byte_ACEC14 = 1; v11 = sub_5ED190; } goto LABEL_7; case 16: if ( byte_ACEC13 ) { byte_ACEC13 = 0; v11 = sub_528E20; } else { byte_ACEC13 = 1; v11 = sub_5F6290; } goto LABEL_7; case 17: if ( byte_ACEC12 ) { byte_ACEC12 = 0; v11 = sub_524F90; } else { byte_ACEC12 = 1; v11 = sub_524F70; } goto LABEL_7; case 18: if ( byte_ACEC11 ) { byte_ACEC11 = 0; v11 = sub_5F1EB0; } else { byte_ACEC11 = 1; v11 = sub_524FB0; } goto LABEL_7; case 19: if ( byte_ACEC10 ) { byte_ACEC10 = 0; v11 = sub_5F1ED0; } else { byte_ACEC10 = 1; v11 = sub_524FD0; } LABEL_7: sub_529A50((_DWORD *)(this + 896), (int)v11); sub_5ED0B0(&v6, v4 + 896); sub_5F7A60(*(_DWORD *)(v4 + 876), *(_DWORD *)(v4 + 880), v6, v7, v8, v9, v10); if ( *(_BYTE *)(v4 + 949) ) result = sub_526660((_DWORD *)v4, 1); else result = sub_526660((_DWORD *)v4, 0); break; case 20: result = sub_5250F0((_DWORD **)this); break; case 21: result = sub_526F20((_DWORD **)this); break; case 22: *(_BYTE *)(this + 949) = 0; *(_DWORD *)(this + 956) = 0; *(_DWORD *)(this + 960) = 0; *(_DWORD *)(this + 964) = 0; *(_DWORD *)(this + 968) = 0; *(_DWORD *)(this + 972) = 0; *(_DWORD *)(this + 976) = 0; *(_DWORD *)(this + 980) = 0; *(_DWORD *)(this + 984) = 0; sub_4638F0(*(_DWORD **)(this + 924), 0); *(_DWORD *)(*(_DWORD *)(v4 + 920) + 336) = 0; v5 = *(_DWORD *)(v4 + 920); *(float *)(v5 + 340) = 0.0; *(_DWORD *)(v5 + 344) = (signed int)((double)*(signed int *)(v5 + 336) * 0.0); *(_DWORD *)(*(_DWORD *)(v4 + 920) + 344) = 0; result = sub_527090(v4); break; case 25: result = sub_525040(); break; default: return result; } return result; } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // ACEC10: using guessed type char byte_ACEC10; // ACEC11: using guessed type char byte_ACEC11; // ACEC12: using guessed type char byte_ACEC12; // ACEC13: using guessed type char byte_ACEC13; // ACEC14: using guessed type char byte_ACEC14; //----- (00528450) -------------------------------------------------------- int __thiscall sub_528450(_DWORD *this, int a2, int a3) { _DWORD **v3; // esi int *v4; // edi int v5; // ebx int v6; // eax v3 = (_DWORD **)this; v4 = (int *)this[236]; v5 = *v4; v6 = (*(int (__thiscall **)(_DWORD))(*v4 + 456))(this[236]); (*(void (__thiscall **)(int *, int))(v5 + 460))(v4, v6); (*(void (**)(void))(*v3[236] + 480))(); return sub_526F20(v3); } //----- (00528490) -------------------------------------------------------- void *__thiscall sub_528490(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base2::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9C6CC4: using guessed type void *std::tr1::_Impl_base2::`vftable'; //----- (005284F0) -------------------------------------------------------- _DWORD *__thiscall sub_5284F0(int this) { int v1; // esi _DWORD *result; // eax v1 = this; if ( *(_BYTE *)(this + 64) & 1 ) operator delete(**(void ***)(this + 16)); **(_DWORD **)(v1 + 16) = 0; **(_DWORD **)(v1 + 32) = 0; **(_DWORD **)(v1 + 48) = 0; **(_DWORD **)(v1 + 20) = 0; result = *(_DWORD **)(v1 + 36); *result = 0; **(_DWORD **)(v1 + 52) = 0; *(_DWORD *)(v1 + 64) &= 0xFFFFFFFE; *(_DWORD *)(v1 + 60) = 0; return result; } //----- (00528550) -------------------------------------------------------- char *__thiscall sub_528550(struct std::ios_base *this, char a2) { char *v2; // esi v2 = (char *)this - 8; *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream>::`vftable'; *(_DWORD *)this = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; //----- (00528590) -------------------------------------------------------- signed int __thiscall sub_528590(int this, int a2) { unsigned int v2; // eax v2 = **(_DWORD **)(this + 32); if ( !v2 || v2 <= **(_DWORD **)(this + 16) || a2 != -1 && (_BYTE)a2 != *(_BYTE *)(v2 - 1) && *(_BYTE *)(this + 64) & 2 ) return -1; ++**(_DWORD **)(this + 48); --**(_DWORD **)(this + 32); if ( a2 == -1 ) return 0; ***(_BYTE ***)(this + 32) = a2; return a2; } //----- (005285E0) -------------------------------------------------------- signed int __thiscall sub_5285E0(int this) { unsigned __int8 **v1; // edx unsigned __int8 *v2; // esi _DWORD *v4; // edi unsigned int v5; // eax v1 = *(unsigned __int8 ***)(this + 32); v2 = *v1; if ( !*v1 ) return -1; v4 = *(_DWORD **)(this + 48); if ( v2 < &v2[*v4] ) return *v2; if ( *(_BYTE *)(this + 64) & 4 ) return -1; v5 = **(_DWORD **)(this + 36); if ( !v5 || v5 <= (unsigned int)v2 && *(_DWORD *)(this + 60) <= (unsigned int)v2 ) return -1; if ( *(_DWORD *)(this + 60) < v5 ) *(_DWORD *)(this + 60) = v5; *v4 = *(_DWORD *)(this + 60) - (_DWORD)*v1; return ***(unsigned __int8 ***)(this + 32); } //----- (00528650) -------------------------------------------------------- signed int *__thiscall sub_528650(int this, signed int *a2, __int64 a3, int a4, char a5) { unsigned int *v5; // edx unsigned int v6; // eax int v7; // eax signed int v8; // ebx signed int v9; // esi int v10; // edi int v11; // edi _DWORD *v12; // eax int v13; // edx int v14; // eax int v15; // edi int v16; // edi signed int *result; // eax v5 = *(unsigned int **)(this + 36); v6 = *v5; if ( *v5 && *(_DWORD *)(this + 60) < v6 ) *(_DWORD *)(this + 60) = v6; if ( !(a5 & 1) || (v7 = **(_DWORD **)(this + 32)) == 0 ) { if ( a5 & 2 && *v5 ) { if ( a4 == 2 ) { v8 = (unsigned __int64)(*(_DWORD *)(this + 60) - **(_DWORD **)(this + 16) + a3) >> 32; v9 = *(_DWORD *)(this + 60) - **(_DWORD **)(this + 16) + a3; } else if ( a4 == 1 ) { v8 = (unsigned __int64)((signed int)(*v5 - **(_DWORD **)(this + 16)) + a3) >> 32; v9 = *v5 - **(_DWORD **)(this + 16) + a3; } else if ( a4 ) { v9 = -1; v8 = -1; } else { v8 = HIDWORD(a3); v9 = a3; } if ( v8 >= 0 ) { v15 = **(_DWORD **)(this + 16); if ( __PAIR__(v8, v9) <= *(_DWORD *)(this + 60) - v15 ) { v16 = v9 + v15 - *v5; **(_DWORD **)(this + 52) -= v16; **(_DWORD **)(this + 36) += v16; goto LABEL_33; } } } else { v8 = HIDWORD(a3); v9 = a3; if ( !a3 ) goto LABEL_33; } LABEL_32: v9 = -1; v8 = -1; goto LABEL_33; } if ( a4 != 2 ) { if ( a4 == 1 ) { if ( !(a5 & 2) ) { v8 = (unsigned __int64)(v7 - **(_DWORD **)(this + 16) + a3) >> 32; v9 = v7 - **(_DWORD **)(this + 16) + a3; goto LABEL_14; } } else if ( !a4 ) { v8 = HIDWORD(a3); v9 = a3; goto LABEL_14; } v9 = -1; v8 = -1; goto LABEL_14; } v8 = (unsigned __int64)(*(_DWORD *)(this + 60) - **(_DWORD **)(this + 16) + a3) >> 32; v9 = *(_DWORD *)(this + 60) - **(_DWORD **)(this + 16) + a3; LABEL_14: if ( v8 < 0 ) goto LABEL_32; v10 = **(_DWORD **)(this + 16); if ( __PAIR__(v8, v9) > *(_DWORD *)(this + 60) - v10 ) goto LABEL_32; v11 = v9 + v10 - v7; **(_DWORD **)(this + 48) -= v11; **(_DWORD **)(this + 32) += v11; if ( a5 & 2 ) { v12 = *(_DWORD **)(this + 36); if ( *v12 ) { v13 = **(_DWORD **)(this + 32); v14 = *v12 + **(_DWORD **)(this + 52); **(_DWORD **)(this + 36) = v13; **(_DWORD **)(this + 52) = v14 - v13; } } LABEL_33: result = a2; *a2 = v9; a2[1] = v8; a2[2] = 0; a2[3] = 0; a2[4] = 0; return result; } //----- (00528810) -------------------------------------------------------- signed int *__thiscall sub_528810(int this, signed int *a2, __int64 a3, int a4, int a5, int a6, int a7, char a8) { signed int v8; // ebx signed int v9; // esi unsigned int *v10; // edi unsigned int v11; // eax int v12; // edi int v13; // edi _DWORD *v14; // eax int v15; // edx int v16; // eax int v17; // edi int v18; // edi signed int *result; // eax int v20; // [esp+Ch] [ebp-4h] unsigned int v21; // [esp+34h] [ebp+24h] v10 = *(unsigned int **)(this + 36); v11 = *v10; v8 = (unsigned __int64)(a3 + a4) >> 32; v9 = a3 + a4; if ( *v10 && *(_DWORD *)(this + 60) < v11 ) *(_DWORD *)(this + 60) = v11; if ( v9 != -1 || v8 != -1 ) { if ( a8 & 1 && (v20 = **(_DWORD **)(this + 32)) != 0 ) { if ( v8 >= 0 ) { v12 = **(_DWORD **)(this + 16); if ( __PAIR__(v8, v9) <= *(_DWORD *)(this + 60) - v12 ) { v13 = v9 + v12 - v20; **(_DWORD **)(this + 48) -= v13; **(_DWORD **)(this + 32) += v13; if ( a8 & 2 ) { v14 = *(_DWORD **)(this + 36); if ( *v14 ) { v15 = **(_DWORD **)(this + 32); v16 = *v14 + **(_DWORD **)(this + 52); **(_DWORD **)(this + 36) = v15; **(_DWORD **)(this + 52) = v16 - v15; } } goto LABEL_19; } } } else if ( a8 & 2 ) { v21 = *v10; if ( *v10 ) { if ( v8 >= 0 ) { v17 = **(_DWORD **)(this + 16); if ( __PAIR__(v8, v9) <= *(_DWORD *)(this + 60) - v17 ) { v18 = v9 + v17 - v21; **(_DWORD **)(this + 52) -= v18; **(_DWORD **)(this + 36) += v18; goto LABEL_19; } } } } v8 = -1; v9 = -1; } LABEL_19: result = a2; *a2 = v9; a2[1] = v8; a2[2] = 0; a2[3] = 0; a2[4] = 0; return result; } //----- (00528930) -------------------------------------------------------- signed int __thiscall sub_528930(int this, signed int a2) { int v2; // esi unsigned int *v3; // edi unsigned int v4; // edx unsigned int v5; // ecx int v6; // eax signed int result; // eax unsigned int v8; // edi _DWORD *v9; // ecx size_t v10; // ebx unsigned int v11; // eax char *v12; // edi void **v13; // eax void *v14; // edx _DWORD *v15; // ecx _DWORD *v16; // eax int v17; // eax int v18; // eax int v19; // ecx int v20; // eax _DWORD *v21; // eax _DWORD *v22; // esi _BYTE *v23; // ecx _BYTE *v24; // [esp+8h] [ebp-8h] int v25; // [esp+Ch] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 64) & 8 ) { v3 = *(unsigned int **)(this + 36); v4 = *v3; if ( *v3 ) { v5 = *(_DWORD *)(this + 60); if ( v4 < v5 ) { v6 = v4 + **(_DWORD **)(v2 + 52); *v3 = v5; **(_DWORD **)(v2 + 52) = v6 - v5; } } } result = a2; if ( a2 == -1 ) return 0; v8 = **(_DWORD **)(v2 + 36); if ( !v8 || (v9 = *(_DWORD **)(v2 + 52), v8 >= v8 + *v9) ) { if ( !(*(_BYTE *)(v2 + 64) & 2) ) { if ( v8 ) v10 = v8 + **(_DWORD **)(v2 + 52) - **(_DWORD **)(v2 + 16); else v10 = 0; v11 = v10 >> 1; if ( v10 >> 1 < 0x20 ) { v11 = 32; do { LABEL_17: if ( 0x7FFFFFFF - v11 >= v10 ) break; v11 >>= 1; } while ( v11 ); if ( !v11 ) return -1; v25 = v10 + v11; v12 = (char *)sub_401580(v10 + v11); v13 = *(void ***)(v2 + 16); v14 = *v13; v24 = *v13; if ( v10 && (memcpy(v12, v14, v10), v14 = v24, v10) ) { v16 = *(_DWORD **)(v2 + 36); *(_DWORD *)(v2 + 60) += v12 - v24; v17 = *v16 - (_DWORD)v24; **(_DWORD **)(v2 + 20) += v12 - v24; v18 = (int)&v12[v17]; **(_DWORD **)(v2 + 36) = v18; **(_DWORD **)(v2 + 52) = &v12[v25 - v18]; if ( !(*(_BYTE *)(v2 + 64) & 4) ) { v19 = **(_DWORD **)(v2 + 36); v20 = (int)&v12[**(_DWORD **)(v2 + 32) - (_DWORD)v24]; **(_DWORD **)(v2 + 16) = v12; **(_DWORD **)(v2 + 32) = v20; **(_DWORD **)(v2 + 48) = v19 - v20 + 1; goto LABEL_28; } } else { v15 = *(_DWORD **)(v2 + 20); *(_DWORD *)(v2 + 60) = v12; *v15 = v12; **(_DWORD **)(v2 + 36) = v12; **(_DWORD **)(v2 + 52) = v25; if ( !(*(_BYTE *)(v2 + 64) & 4) ) { **(_DWORD **)(v2 + 16) = v12; **(_DWORD **)(v2 + 32) = v12; **(_DWORD **)(v2 + 48) = 1; LABEL_28: if ( *(_BYTE *)(v2 + 64) & 1 ) operator delete(v14); v21 = *(_DWORD **)(v2 + 52); *(_DWORD *)(v2 + 64) |= 1u; --*v21; result = a2; goto LABEL_31; } } **(_DWORD **)(v2 + 16) = v12; **(_DWORD **)(v2 + 32) = 0; **(_DWORD **)(v2 + 48) = v12; goto LABEL_28; } if ( v11 ) goto LABEL_17; } return -1; } --*v9; LABEL_31: v22 = *(_DWORD **)(v2 + 36); v23 = (_BYTE *)(*v22)++; *v23 = result; return result; } //----- (00528AE0) -------------------------------------------------------- _DWORD *__thiscall sub_528AE0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)this); sub_423AE0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; //----- (00528B10) -------------------------------------------------------- _BYTE *__cdecl sub_528B10(int a1, _BYTE *a2, _BYTE *a3, __int16 a4) { _BYTE *result; // eax _BYTE *v5; // ecx _BYTE *v6; // ecx int v7; // esi char v8; // dl result = a2; *a2 = 37; v5 = a2 + 1; if ( a4 & 0x20 ) { *v5 = 43; v5 = a2 + 2; } if ( a4 & 8 ) *v5++ = 35; if ( *a3 == 76 ) { *(_WORD *)v5 = 13897; v5[2] = 52; v6 = v5 + 3; } else { *v5 = *a3; v6 = v5 + 1; } v7 = a4 & 0xE00; if ( v7 == 1024 ) { *v6 = 111; v6[1] = 0; } else { if ( v7 == 2048 ) v8 = ~(8 * a4) & 0x20 | 0x58; else v8 = a3[1]; *v6 = v8; v6[1] = 0; } return result; } //----- (00528BA0) -------------------------------------------------------- void __thiscall sub_528BA0(void **this) { void **v1; // esi v1 = this; operator delete[](this[2]); operator delete[](v1[4]); operator delete[](v1[5]); } //----- (00528BD0) -------------------------------------------------------- void *__thiscall sub_528BD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::locale::facet::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9AB460: using guessed type void *std::locale::facet::`vftable'; //----- (00528C00) -------------------------------------------------------- char __thiscall sub_528C00(_DWORD *this, int a2, char a3) { _DWORD *v3; // ebx struct lconv *v4; // eax const char *v5; // edi unsigned int v6; // kr00_4 char *v7; // eax void *v8; // eax void *v9; // eax struct lconv *v10; // esi _Cvtvec v11; // rax int v13; // [esp+0h] [ebp-28h] void *v14; // [esp+10h] [ebp-18h] struct lconv *v15; // [esp+14h] [ebp-14h] int *v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v16 = &v13; v3 = this; v14 = this; v4 = localeconv(); v15 = v4; v3[2] = 0; v3[4] = 0; v3[5] = 0; v17 = 0; v5 = &byte_9A8050; if ( !a3 ) v5 = v4->grouping; _Getcvt(); v6 = strlen(v5); v7 = (char *)operator new[](v6 + 1); qmemcpy(v7, v5, v6 + 1); v3[2] = v7; _Getcvt(); v8 = operator new[](6u); strcpy(v8, "false"); v3[4] = v8; _Getcvt(); v9 = operator new[](5u); strcpy(v9, "true"); v3[5] = v9; _Getcvt(); v10 = v15; *((_BYTE *)v3 + 12) = *v15->decimal_point; _Getcvt(); v11._Page = (unsigned int)v10->thousands_sep; LOBYTE(v11._Hand) = *(_BYTE *)v11._Page; *((_BYTE *)v3 + 13) = *(_BYTE *)v11._Page; if ( a3 ) { _Getcvt(); *((_BYTE *)v3 + 12) = 46; v11 = _Getcvt(); *((_BYTE *)v3 + 13) = 44; } return v11._Hand; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00528D40) -------------------------------------------------------- char __thiscall sub_528D40(_BYTE *this) { return this[12]; } //----- (00528D50) -------------------------------------------------------- char __thiscall sub_528D50(_BYTE *this) { return this[13]; } //----- (00528D60) -------------------------------------------------------- void **__thiscall sub_528D60(void *this, char a2) { void **v2; // esi void *v3; // ST08_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &std::numpunct::`vftable'; operator delete[](v3); operator delete[](v2[4]); operator delete[](v2[5]); *v2 = &std::locale::facet::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB460: using guessed type void *std::locale::facet::`vftable'; // 9C6D64: using guessed type void *std::numpunct::`vftable'; //----- (00528DB0) -------------------------------------------------------- void ***sub_528DB0() { return &bool (__cdecl *)(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &) `RTTI Type Descriptor'; } // AAFFF0: using guessed type void **bool (__cdecl *)(GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &) `RTTI Type Descriptor'; //----- (00528DC0) -------------------------------------------------------- char *__thiscall sub_528DC0(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(8u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; *((_DWORD *)result + 1) = v3[1]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9C6D80: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00528E20) -------------------------------------------------------- bool __cdecl sub_528E20(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)(a2 + 28); if ( *(_DWORD *)(a2 + 48) >= 0x10u ) v2 = *(unsigned __int8 **)v2; return sub_40C2F0((unsigned __int8 *)(a1 + 28), 0, *(_DWORD *)(a1 + 44), v2, *(_DWORD *)(a2 + 44)) < 0; } //----- (00528E50) -------------------------------------------------------- _DWORD *__cdecl sub_528E50(int a1, _DWORD *a2, int a3, _DWORD *a4, unsigned __int8 *a5, int a6) { _DWORD *v6; // ecx int v7; // ebx unsigned __int8 *v8; // edi unsigned __int8 v9; // dl _DWORD *v10; // eax _DWORD *v11; // eax unsigned __int8 *v12; // ecx int v13; // eax _DWORD *result; // eax v6 = a4; v7 = a6; if ( a6 ) { v8 = a5; do { if ( !v6 ) goto LABEL_14; v9 = *v8; if ( *(_DWORD *)v6[9] && (v10 = (_DWORD *)v6[13], *v10 > 0) ) { --*v10; v11 = (_DWORD *)v6[9]; v12 = (unsigned __int8 *)(*v11)++; *v12 = v9; v13 = v9; } else { v13 = (*(int (__stdcall **)(_DWORD))(*v6 + 12))(v9); } v6 = a4; if ( v13 == -1 ) LABEL_14: LOBYTE(a3) = 1; ++v8; --v7; } while ( v7 ); } result = a2; *a2 = a3; a2[1] = v6; return result; } //----- (00528EC0) -------------------------------------------------------- _DWORD *__cdecl sub_528EC0(int a1, _DWORD *a2, int a3, _DWORD *a4, unsigned __int8 a5, int a6) { _DWORD *v6; // ecx int i; // esi _DWORD *v8; // eax _DWORD *v9; // eax unsigned __int8 *v10; // ecx int v11; // eax _DWORD *result; // eax v6 = a4; for ( i = a6; i; --i ) { if ( v6 ) { if ( *(_DWORD *)v6[9] && (v8 = (_DWORD *)v6[13], *v8 > 0) ) { --*v8; v9 = (_DWORD *)v6[9]; v10 = (unsigned __int8 *)(*v9)++; *v10 = a5; v11 = a5; } else { v11 = (*(int (__stdcall **)(_DWORD))(*v6 + 12))(a5); } v6 = a4; if ( v11 != -1 ) continue; } LOBYTE(a3) = 1; } result = a2; *a2 = a3; a2[1] = v6; return result; } //----- (00528F30) -------------------------------------------------------- int __thiscall sub_528F30(void *this, int a2) { (*(void (__stdcall **)(int))(*(_DWORD *)this + 16))(a2); return a2; } //----- (00528F50) -------------------------------------------------------- int __thiscall sub_528F50(void *this, int a2) { (*(void (__stdcall **)(int))(*(_DWORD *)this + 20))(a2); return a2; } //----- (00528F70) -------------------------------------------------------- int __cdecl sub_528F70(int a1, int a2, int a3, int a4, void *a5, size_t a6, int a7) { int v7; // ebx char *v8; // edi _BYTE *v9; // eax int v10; // esi int *v11; // eax int v12; // edi int v13; // ebx int *v14; // eax int v15; // edx char v17; // [esp+Ch] [ebp-10h] char v18; // [esp+14h] [ebp-8h] v7 = a6; v8 = (char *)a5; while ( 1 ) { v9 = memchr(v8, 0, v7); v10 = v9 ? v9 - v8 : v7; v11 = sub_528E50(a1, &v18, a3, (_DWORD *)a4, (unsigned __int8 *)v8, v10); a3 = *v11; v12 = (int)&v8[v10]; v13 = v7 - v10; a4 = v11[1]; if ( !v13 ) break; if ( (_BYTE)a7 ) { v14 = sub_528EC0(a1, &v17, *v11, (_DWORD *)v11[1], a7, 1); a3 = *v14; a4 = v14[1]; } v8 = (char *)(v12 + 1); v7 = v13 - 1; } v15 = *v11; *(_DWORD *)(a2 + 4) = v11[1]; *(_DWORD *)a2 = v15; return a2; } //----- (00529010) -------------------------------------------------------- int __thiscall sub_529010(void *this, int a2) { (*(void (__stdcall **)(int))(*(_DWORD *)this + 12))(a2); return a2; } //----- (00529030) -------------------------------------------------------- signed int __cdecl sub_529030(_DWORD *a1, int a2) { char v2; // bl _DWORD *v3; // esi char *v4; // eax _Cvtvec v5; // rax char v7; // [esp+Ch] [ebp-34h] _DWORD *v8; // [esp+30h] [ebp-10h] int v9; // [esp+3Ch] [ebp-4h] v2 = 0; v8 = 0; if ( a1 && !*a1 ) { v3 = operator new(0x10u); v8 = v3; v9 = 0; if ( v3 ) { if ( *(_DWORD *)(*(_DWORD *)a2 + 24) ) v4 = *(char **)(*(_DWORD *)a2 + 24); else v4 = (char *)(*(_DWORD *)a2 + 28); sub_4245D0((struct std::_Locinfo *)&v7, v4); v2 = 1; v3[1] = 0; *v3 = &std::num_put>>::`vftable'; v5 = _Getcvt(); v3[2] = v5._Hand; v3[3] = v5._Page; } else { v3 = 0; } v9 = -1; *a1 = v3; if ( v2 & 1 ) sub_424680((std::_Lockit *)&v7); } return 4; } // 9C6D2C: using guessed type void *std::num_put>>::`vftable'; //----- (005290F0) -------------------------------------------------------- signed int __cdecl sub_5290F0(_DWORD *a1, int a2) { char v2; // bl _DWORD *v3; // esi char *v4; // eax struct std::_Locinfo *v5; // eax char v7; // [esp+Ch] [ebp-38h] void *v8; // [esp+30h] [ebp-14h] int v9; // [esp+34h] [ebp-10h] int v10; // [esp+40h] [ebp-4h] v2 = 0; v9 = 0; if ( a1 && !*a1 ) { v3 = operator new(0x18u); v8 = v3; v10 = 0; if ( v3 ) { if ( *(_DWORD *)(*(_DWORD *)a2 + 24) ) v4 = *(char **)(*(_DWORD *)a2 + 24); else v4 = (char *)(*(_DWORD *)a2 + 28); v5 = sub_4245D0((struct std::_Locinfo *)&v7, v4); v2 = 1; v9 = 1; v3[1] = 0; v10 = 2; *v3 = &std::numpunct::`vftable'; sub_528C00(v3, (int)v5, 1); } else { v3 = 0; } *a1 = v3; v10 = -1; if ( v2 & 1 ) sub_424680((std::_Lockit *)&v7); } return 4; } // 9C6D64: using guessed type void *std::numpunct::`vftable'; //----- (005291C0) -------------------------------------------------------- void __thiscall sub_5291C0(char *this) { struct std::ios_base *v1; // ST10_4 v1 = (struct std::ios_base *)(this + 80); *(_DWORD *)((char *)v1 + *(_DWORD *)(*(_DWORD *)this + 4) - 80) = &std::basic_ostringstream,std::allocator>::`vftable'; *((_DWORD *)v1 - 19) = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)(this + 4)); sub_423AE0((_DWORD *)v1 - 19); *(_DWORD *)((char *)v1 + *(_DWORD *)(*((_DWORD *)v1 - 20) + 4) - 80) = &std::basic_ostream>::`vftable'; *(_DWORD *)v1 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(v1); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (00529250) -------------------------------------------------------- char *__thiscall sub_529250(char *this, char a2) { char *v2; // esi v2 = this - 80; sub_5291C0(this - 80); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00529280) -------------------------------------------------------- struct std::locale::facet *__cdecl sub_529280(int a1) { int v1; // ebx int v2; // edi unsigned int v3; // esi int v4; // eax struct std::locale::facet *v5; // ecx int v6; // eax struct std::locale::facet *v7; // esi unsigned int v8; // eax char v10; // [esp+10h] [ebp-24h] char v11; // [esp+1Ch] [ebp-18h] char v12; // [esp+20h] [ebp-14h] struct std::locale::facet *v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] std::_Lockit::_Lockit((std::_Lockit *)&v11, 0); v1 = dword_ACEC08; v14 = 0; v13 = (struct std::locale::facet *)dword_ACEC08; if ( !dword_AC9C78 ) { std::_Lockit::_Lockit((std::_Lockit *)&v12, 0); if ( !dword_AC9C78 ) dword_AC9C78 = ++dword_BA2A30; std::_Lockit::~_Lockit((std::_Lockit *)&v12); } v2 = a1; v3 = dword_AC9C78; v4 = *(_DWORD *)a1; if ( (unsigned int)dword_AC9C78 >= *(_DWORD *)(*(_DWORD *)a1 + 12) ) { v5 = 0; } else { v5 = *(struct std::locale::facet **)(*(_DWORD *)(v4 + 8) + 4 * dword_AC9C78); if ( v5 ) { LABEL_11: v7 = v5; LABEL_12: if ( v7 ) goto LABEL_21; goto LABEL_13; } } if ( !*(_BYTE *)(v4 + 20) ) goto LABEL_11; v6 = sub_7D3A0B(); if ( v3 < *(_DWORD *)(v6 + 12) ) { v7 = *(struct std::locale::facet **)(*(_DWORD *)(v6 + 8) + 4 * v3); goto LABEL_12; } LABEL_13: if ( v1 ) { v7 = (struct std::locale::facet *)v1; } else { if ( sub_529030(&v13, v2) == -1 ) { sub_7D43D9((std::exception *)&v10, "bad cast"); _CxxThrowException(&v10, &_TI2_AVbad_cast_std__); } v7 = v13; dword_ACEC08 = (int)v13; std::_Lockit::_Lockit((std::_Lockit *)&a1, 0); v8 = *((_DWORD *)v7 + 1); if ( v8 < 0xFFFFFFFF ) *((_DWORD *)v7 + 1) = v8 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a1); std::locale::facet::_Facet_Register(v7); } LABEL_21: v14 = -1; std::_Lockit::~_Lockit((std::_Lockit *)&v11); return v7; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A7CAB4: using guessed type int _TI2_AVbad_cast_std__; // AC9C78: using guessed type int dword_AC9C78; // ACEC08: using guessed type int dword_ACEC08; // BA2A30: using guessed type int dword_BA2A30; //----- (005293C0) -------------------------------------------------------- struct std::locale::facet *__cdecl sub_5293C0(int a1) { int v1; // ebx int v2; // edi unsigned int v3; // esi int v4; // eax struct std::locale::facet *v5; // ecx int v6; // eax struct std::locale::facet *v7; // esi unsigned int v8; // eax char v10; // [esp+10h] [ebp-24h] char v11; // [esp+1Ch] [ebp-18h] char v12; // [esp+20h] [ebp-14h] struct std::locale::facet *v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] std::_Lockit::_Lockit((std::_Lockit *)&v11, 0); v1 = dword_ACEC0C; v14 = 0; v13 = (struct std::locale::facet *)dword_ACEC0C; if ( !dword_AC9C74 ) { std::_Lockit::_Lockit((std::_Lockit *)&v12, 0); if ( !dword_AC9C74 ) dword_AC9C74 = ++dword_BA2A30; std::_Lockit::~_Lockit((std::_Lockit *)&v12); } v2 = a1; v3 = dword_AC9C74; v4 = *(_DWORD *)a1; if ( (unsigned int)dword_AC9C74 >= *(_DWORD *)(*(_DWORD *)a1 + 12) ) { v5 = 0; } else { v5 = *(struct std::locale::facet **)(*(_DWORD *)(v4 + 8) + 4 * dword_AC9C74); if ( v5 ) { LABEL_11: v7 = v5; LABEL_12: if ( v7 ) goto LABEL_21; goto LABEL_13; } } if ( !*(_BYTE *)(v4 + 20) ) goto LABEL_11; v6 = sub_7D3A0B(); if ( v3 < *(_DWORD *)(v6 + 12) ) { v7 = *(struct std::locale::facet **)(*(_DWORD *)(v6 + 8) + 4 * v3); goto LABEL_12; } LABEL_13: if ( v1 ) { v7 = (struct std::locale::facet *)v1; } else { if ( sub_5290F0(&v13, v2) == -1 ) { sub_7D43D9((std::exception *)&v10, "bad cast"); _CxxThrowException(&v10, &_TI2_AVbad_cast_std__); } v7 = v13; dword_ACEC0C = (int)v13; std::_Lockit::_Lockit((std::_Lockit *)&a1, 0); v8 = *((_DWORD *)v7 + 1); if ( v8 < 0xFFFFFFFF ) *((_DWORD *)v7 + 1) = v8 + 1; std::_Lockit::~_Lockit((std::_Lockit *)&a1); std::locale::facet::_Facet_Register(v7); } LABEL_21: v14 = -1; std::_Lockit::~_Lockit((std::_Lockit *)&v11); return v7; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A7CAB4: using guessed type int _TI2_AVbad_cast_std__; // AC9C74: using guessed type int dword_AC9C74; // ACEC0C: using guessed type int dword_ACEC0C; // BA2A30: using guessed type int dword_BA2A30; //----- (00529500) -------------------------------------------------------- _BYTE *__thiscall sub_529500(_BYTE *this, int a2) { _BYTE *v2; // esi int v3; // ecx int v4; // eax _BYTE *v5; // eax int v6; // eax _DWORD *v7; // eax struct std::locale::facet *v8; // eax int v9; // ebx unsigned int v10; // eax int v11; // edi void (__thiscall ***v12)(_DWORD, signed int); // edi int v13; // eax int v14; // ecx char v15; // dl int v16; // ecx int v17; // edi void (__thiscall *v18)(struct std::locale::facet *, int *, int, int, _BYTE *, int, int); // edx _DWORD *v19; // ecx int v20; // eax int v21; // ecx int v23; // [esp+0h] [ebp-44h] int v24; // [esp+10h] [ebp-34h] _BYTE *v25; // [esp+18h] [ebp-2Ch] bool v26; // [esp+1Ch] [ebp-28h] struct std::locale::facet *v27; // [esp+20h] [ebp-24h] int v28; // [esp+24h] [ebp-20h] int v29; // [esp+28h] [ebp-1Ch] int v30; // [esp+2Ch] [ebp-18h] _BYTE *v31; // [esp+30h] [ebp-14h] int *v32; // [esp+34h] [ebp-10h] int v33; // [esp+40h] [ebp-4h] v32 = &v23; v2 = this; v31 = this; v3 = *(_DWORD *)&this[*(_DWORD *)(*(_DWORD *)this + 4) + 56]; v30 = 0; v25 = v31; if ( v3 ) (*(void (**)(void))(*(_DWORD *)v3 + 4))(); v4 = *(_DWORD *)(*(_DWORD *)v2 + 4); v33 = 0; if ( !*(_DWORD *)&v2[v4 + 12] ) { v5 = *(_BYTE **)&v2[v4 + 60]; if ( v5 ) sub_406070(v5); } v6 = *(_DWORD *)v2; v26 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 12] == 0; v33 = 1; if ( v26 ) { v7 = sub_422FF0((_DWORD **)&v2[*(_DWORD *)(v6 + 4)], &v29); LOBYTE(v33) = 2; v8 = sub_529280((int)v7); v9 = v29; v27 = v8; LOBYTE(v33) = 1; if ( v29 ) { std::_Lockit::_Lockit((std::_Lockit *)&v28, 0); v10 = *(_DWORD *)(v9 + 4); if ( v10 > 0 && v10 < 0xFFFFFFFF ) *(_DWORD *)(v9 + 4) = v10 - 1; v11 = -(*(_DWORD *)(v9 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v28); v12 = (void (__thiscall ***)(_DWORD, signed int))(v9 & v11); if ( v12 ) (**v12)(v12, 1); } v13 = *(_DWORD *)(*(_DWORD *)v2 + 4); v14 = *(_DWORD *)(*(_DWORD *)v2 + 4); v15 = v2[v14 + 64]; v16 = *(_DWORD *)&v2[v14 + 56]; LOBYTE(v28) = v15; v17 = *(_DWORD *)v27; LOBYTE(v24) = 0; v18 = *(void (__thiscall **)(struct std::locale::facet *, int *, int, int, _BYTE *, int, int))(v17 + 24); LOBYTE(v33) = 3; v18(v27, &v24, v24, v16, &v2[v13], v28, a2); if ( (_BYTE)v24 ) v30 = 4; v33 = 1; } v19 = &v2[*(_DWORD *)(*(_DWORD *)v2 + 4)]; if ( v30 ) { v20 = v30 | v19[3]; if ( !v19[14] ) v20 |= 4u; sub_405C10(v19, v20, 0); } v33 = 5; if ( !__uncaught_exception() ) sub_4060C0(v2); v21 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 56]; v33 = -1; if ( v21 ) (*(void (**)(void))(*(_DWORD *)v21 + 8))(); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005296F0) -------------------------------------------------------- _DWORD *__thiscall sub_5296F0(_DWORD *this, int a2, char a3, int a4) { _DWORD *v4; // edi int v5; // esi char v6; // al bool v7; // zf v4 = this; if ( a4 ) { *this = &unk_9C6DA0; this[2] = &std::basic_ios>::`vftable'; } *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4)) = &std::basic_ostream>::`vftable'; v5 = (int)this + *(_DWORD *)(*this + 4); sub_423A10((_DWORD *)((char *)this + *(_DWORD *)(*this + 4))); *(_DWORD *)(v5 + 56) = a2; *(_DWORD *)(v5 + 60) = 0; v6 = sub_424CA0((_DWORD **)v5, 32); v7 = *(_DWORD *)(v5 + 56) == 0; *(_BYTE *)(v5 + 64) = v6; if ( v7 ) sub_405C10((_DWORD *)v5, *(_DWORD *)(v5 + 12) | 4, 0); if ( a3 ) std::ios_base::_Addstd((struct std::ios_base *)v5); return v4; } // 9AB478: using guessed type void *std::basic_ios>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; //----- (005297C0) -------------------------------------------------------- _DWORD *__cdecl sub_5297C0(int a1, int a2, int a3, int a4, int a5, int a6, void *a7, int a8) { char *v8; // ebx _DWORD *v9; // eax struct std::locale::facet *v10; // eax int v11; // esi unsigned int v12; // eax int v13; // edi void (__thiscall ***v14)(_DWORD, signed int); // edi char v15; // al char v16; // al _BYTE *v17; // edx _BYTE *v18; // eax _BYTE *v19; // eax size_t v20; // esi int v21; // eax unsigned int v22; // edi int v23; // edi int v24; // eax int *v25; // eax int *v26; // eax int *v27; // eax _DWORD *v28; // edx int v29; // ST14_4 _DWORD *v30; // edi _DWORD *v31; // eax int v33; // [esp+10h] [ebp-54h] struct std::locale::facet *v34; // [esp+14h] [ebp-50h] _DWORD *v35; // [esp+18h] [ebp-4Ch] char v36; // [esp+1Ch] [ebp-48h] _BYTE *i; // [esp+20h] [ebp-44h] int v38; // [esp+24h] [ebp-40h] _DWORD *v39; // [esp+28h] [ebp-3Ch] char v40; // [esp+2Ch] [ebp-38h] int v41; // [esp+30h] [ebp-34h] size_t v42; // [esp+34h] [ebp-30h] void *v43; // [esp+38h] [ebp-2Ch] unsigned int v44; // [esp+4Ch] [ebp-18h] int v45; // [esp+60h] [ebp-4h] int v46; // [esp+74h] [ebp+10h] int v47; // [esp+74h] [ebp+10h] int v48; // [esp+78h] [ebp+14h] v8 = (char *)a7; v35 = (_DWORD *)a2; v39 = (_DWORD *)a5; v42 = a8; v9 = sub_422FF0((_DWORD **)a5, &v38); v45 = 0; v10 = sub_5293C0((int)v9); v11 = v38; v34 = v10; v45 = -1; if ( v38 ) { std::_Lockit::_Lockit((std::_Lockit *)&v41, 0); v12 = *(_DWORD *)(v11 + 4); if ( v12 && v12 < 0xFFFFFFFF ) *(_DWORD *)(v11 + 4) = v12 - 1; v13 = -(*(_DWORD *)(v11 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v41); v14 = (void (__thiscall ***)(_DWORD, signed int))(v11 & v13); if ( v14 ) (**v14)(v14, 1); } sub_529010((void *)v34, (int)&v43); v15 = *(_BYTE *)a7; v45 = 1; if ( v15 == 43 || v15 == 45 ) { v41 = 1; } else if ( v15 != 48 || (v16 = *((_BYTE *)a7 + 1), v16 != 120) && v16 != 88 ) { v41 = 0; } else { v41 = 2; } v17 = v43; v18 = v43; if ( v44 < 0x10 ) v18 = &v43; if ( *v18 != 127 ) { v19 = v43; if ( v44 < 0x10 ) v19 = &v43; if ( *v19 > 0 ) { if ( v44 < 0x10 ) v17 = &v43; v20 = v42; LOBYTE(v21) = *v17; for ( i = v17; (_BYTE)v21 != 127; LOBYTE(v21) = *(_BYTE *)v21 ) { if ( (char)v21 <= 0 ) break; v21 = (char)v21; if ( (char)v21 >= v20 - v41 ) break; v20 -= v21; memmove_s((char *)a7 + v20 + 1, v42 - v20 + 1, (char *)a7 + v20, v42 - v20 + 1); v21 = (int)i; ++v42; *((_BYTE *)a7 + v20) = 0; if ( *(_BYTE *)(v21 + 1) > 0 ) i = (_BYTE *)++v21; } } } v22 = v39[8]; if ( v39[9] >= 0 && (v39[9] > 0 || v22) && v22 > v42 ) v23 = v22 - v42; else v23 = 0; v24 = v39[5] & 0x1C0; if ( v24 != 64 ) { if ( v24 == 256 ) { v26 = sub_528E50(a1, &v36, a3, (_DWORD *)a4, (unsigned __int8 *)a7, v41); v46 = *v26; v48 = v26[1]; v42 -= v41; v8 = (char *)a7 + v41; v25 = sub_528EC0(a1, &v40, *v26, (_DWORD *)v26[1], a6, v23); } else { v25 = sub_528EC0(a1, &v40, a3, (_DWORD *)a4, a6, v23); } a3 = *v25; a4 = v25[1]; v23 = 0; } LOBYTE(v38) = (*(int (**)(void))(*(_DWORD *)v34 + 8))(); v27 = (int *)sub_528F70(a1, (int)&v33, a3, a4, v8, v42, v38); v28 = v39; v29 = v23; v30 = v35; v47 = *v27; v31 = (_DWORD *)v27[1]; v39[8] = 0; v28[9] = 0; sub_528EC0(a1, v30, v47, v31, a6, v29); if ( v44 >= 0x10 ) operator delete(v43); return v30; } //----- (00529A50) -------------------------------------------------------- _DWORD *__thiscall sub_529A50(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; v3 = this[4]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( a2 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; v2[1] = a2; v2[4] = v2; } else { v2[4] = 0; } return v2; } // 9C6D80: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GuildListWin::GuildInfo const &,GuildListWin::GuildInfo const &>::`vftable'; //----- (00529AA0) -------------------------------------------------------- _BYTE *__cdecl sub_529AA0(_BYTE *a1, _DWORD *a2) { unsigned int v2; // edi int v3; // eax int v4; // edx _BYTE *v5; // ecx int v6; // eax int v7; // eax _BYTE *v8; // eax int v9; // eax int v10; // ebx int v11; // eax int v12; // ecx int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // edx _DWORD *v16; // ecx _BYTE *v17; // edx int v18; // ecx int v19; // eax _DWORD *v20; // ecx _DWORD *v21; // edx _DWORD *v22; // ecx _BYTE *v23; // edx _DWORD *v24; // eax int v25; // eax int v26; // edx int v27; // eax _DWORD *v28; // ecx int v29; // eax bool v30; // al _BYTE *v31; // edi int v32; // ecx int v34; // [esp+0h] [ebp-34h] _BYTE *v35; // [esp+10h] [ebp-24h] int v36; // [esp+14h] [ebp-20h] unsigned int v37; // [esp+18h] [ebp-1Ch] int v38; // [esp+1Ch] [ebp-18h] unsigned int v39; // [esp+20h] [ebp-14h] int *v40; // [esp+24h] [ebp-10h] int v41; // [esp+30h] [ebp-4h] v40 = &v34; v2 = a2[4]; v3 = *(_DWORD *)(*(_DWORD *)a1 + 4); v4 = *(_DWORD *)&a1[v3 + 36]; v5 = *(_BYTE **)&a1[v3 + 32]; v38 = 0; v37 = v2; if ( v4 >= 0 && (v4 > 0 || v5) && (v35 = v5, v36 = v4, (unsigned int)v5 > v2) ) { v36 = v4; v39 = (unsigned int)&v5[-v2]; } else { v39 = 0; } v6 = *(_DWORD *)&a1[v3 + 56]; v35 = a1; if ( v6 ) (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6); v7 = *(_DWORD *)(*(_DWORD *)a1 + 4); v41 = 0; if ( !*(_DWORD *)&a1[v7 + 12] ) { v8 = *(_BYTE **)&a1[v7 + 60]; if ( v8 ) sub_406070(v8); } v9 = *(_DWORD *)(*(_DWORD *)a1 + 4); LOBYTE(v36) = *(_DWORD *)&a1[v9 + 12] == 0; v41 = 1; if ( (_BYTE)v36 ) { v11 = *(_DWORD *)&a1[v9 + 20] & 0x1C0; LOBYTE(v41) = 2; if ( v11 == 64 ) { v10 = v38; } else { while ( v39 > 0 ) { v12 = (int)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4)]; LOBYTE(v13) = *(_BYTE *)(v12 + 64); v14 = *(_DWORD **)(v12 + 56); if ( *(_DWORD *)v14[9] && (v15 = (_DWORD *)v14[13], *v15 > 0) ) { --*v15; v16 = (_DWORD *)v14[9]; v17 = (_BYTE *)(*v16)++; *v17 = v13; v13 = (unsigned __int8)v13; } else { v13 = (*(int (__stdcall **)(_DWORD))(*v14 + 12))((unsigned __int8)v13); } if ( v13 == -1 ) { v10 = v38 | 4; v38 |= 4u; goto LABEL_24; } --v39; } v10 = v38; LABEL_24: if ( v10 ) goto LABEL_25; } v24 = a2; if ( a2[5] >= 0x10u ) v24 = (_DWORD *)*a2; v25 = (*(int (__stdcall **)(_DWORD *, unsigned int, _DWORD))(**(_DWORD **)&a1[*(_DWORD *)(*(_DWORD *)a1 + 4) + 56] + 36))( v24, v37, 0); if ( v25 != v37 || v26 ) { v10 = 4; } else { LABEL_25: while ( v39 ) { v18 = *(_DWORD *)(*(_DWORD *)a1 + 4); LOBYTE(v19) = a1[v18 + 64]; v20 = *(_DWORD **)&a1[v18 + 56]; if ( *(_DWORD *)v20[9] && (v21 = (_DWORD *)v20[13], *v21 > 0) ) { --*v21; v22 = (_DWORD *)v20[9]; v23 = (_BYTE *)(*v22)++; *v23 = v19; v19 = (unsigned __int8)v19; } else { v19 = (*(int (__stdcall **)(_DWORD))(*v20 + 12))((unsigned __int8)v19); } if ( v19 == -1 ) { v10 |= 4u; break; } --v39; } } v27 = *(_DWORD *)(*(_DWORD *)a1 + 4); *(_DWORD *)&a1[v27 + 32] = 0; *(_DWORD *)&a1[v27 + 36] = 0; v41 = 1; } else { v10 = 4; } v28 = &a1[*(_DWORD *)(*(_DWORD *)a1 + 4)]; if ( v10 ) { v29 = v10 | v28[3]; if ( !v28[14] ) v29 |= 4u; sub_405C10(v28, v29, 0); } v41 = 4; v30 = __uncaught_exception(); v31 = v35; if ( !v30 ) sub_4060C0(v35); v32 = *(_DWORD *)&v31[*(_DWORD *)(*(_DWORD *)v31 + 4) + 56]; v41 = -1; if ( v32 ) (*(void (**)(void))(*(_DWORD *)v32 + 8))(); return a1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00529D40) -------------------------------------------------------- _DWORD *__thiscall sub_529D40(_DWORD *this, unsigned __int8 a2, int a3) { _DWORD *v3; // edi int v4; // esi char v5; // bl signed int v6; // eax v3 = this; if ( a3 ) { *this = &unk_9C6DA8; this[20] = &std::basic_ios>::`vftable'; } *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4)) = &std::basic_ostream>::`vftable'; v4 = (int)this + *(_DWORD *)(*this + 4); sub_423A10((_DWORD *)((char *)this + *(_DWORD *)(*this + 4))); *(_DWORD *)(v4 + 56) = v3 + 1; *(_DWORD *)(v4 + 60) = 0; *(_BYTE *)(v4 + 64) = sub_424CA0((_DWORD **)v4, 32); if ( !*(_DWORD *)(v4 + 56) ) sub_405C10((_DWORD *)v4, *(_DWORD *)(v4 + 12) | 4, 0); *(_DWORD *)((char *)v3 + *(_DWORD *)(*v3 + 4)) = &std::basic_ostringstream,std::allocator>::`vftable'; v5 = a2 | 2; sub_423F50(v3 + 1); v6 = 0; v3[1] = &std::basic_stringbuf,std::allocator>::`vftable'; if ( !((a2 | 2) & 1) ) v6 = 4; if ( !(v5 & 2) ) v6 |= 2u; if ( v5 & 8 ) v6 |= 8u; if ( v5 & 4 ) v6 |= 0x10u; v3[17] = v6; v3[16] = 0; return v3; } // 9AB478: using guessed type void *std::basic_ios>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (00529E40) -------------------------------------------------------- int __thiscall sub_529E40(int this, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // esi const char *v8; // eax int v9; // eax char DstBuf; // [esp+Ch] [ebp-4Ch] char v12; // [esp+4Ch] [ebp-Ch] v7 = this; v8 = sub_528B10(this, &v12, &unk_9C6DB0, *(_DWORD *)(a5 + 20)); v9 = sprintf_s(&DstBuf, 0x40u, v8, a7); sub_5297C0(v7, a2, a3, a4, a5, a6, &DstBuf, v9); return a2; } //----- (00529EC0) -------------------------------------------------------- int __thiscall sub_529EC0(int this, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // esi const char *v8; // eax int v9; // eax char DstBuf; // [esp+Ch] [ebp-4Ch] char v12; // [esp+4Ch] [ebp-Ch] v7 = this; v8 = sub_528B10(this, &v12, &unk_9C6DB4, *(_DWORD *)(a5 + 20)); v9 = sprintf_s(&DstBuf, 0x40u, v8, a7); sub_5297C0(v7, a2, a3, a4, a5, a6, &DstBuf, v9); return a2; } //----- (00529F40) -------------------------------------------------------- int __thiscall sub_529F40(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi const char *v9; // eax int v10; // eax char DstBuf; // [esp+Ch] [ebp-4Ch] char v13; // [esp+4Ch] [ebp-Ch] v8 = this; v9 = sub_528B10(this, &v13, &unk_9C6DB8, *(_DWORD *)(a5 + 20)); v10 = sprintf_s(&DstBuf, 0x40u, v9, a7, a8); sub_5297C0(v8, a2, a3, a4, a5, a6, &DstBuf, v10); return a2; } //----- (00529FC0) -------------------------------------------------------- int __thiscall sub_529FC0(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi const char *v9; // eax int v10; // eax char DstBuf; // [esp+Ch] [ebp-4Ch] char v13; // [esp+4Ch] [ebp-Ch] v8 = this; v9 = sub_528B10(this, &v13, &unk_9C6DBC, *(_DWORD *)(a5 + 20)); v10 = sprintf_s(&DstBuf, 0x40u, v9, a7, a8); sub_5297C0(v8, a2, a3, a4, a5, a6, &DstBuf, v10); return a2; } //----- (0052A040) -------------------------------------------------------- int __thiscall sub_52A040(int this, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // edi int v8; // eax char DstBuf; // [esp+Ch] [ebp-44h] v7 = this; v8 = sprintf_s(&DstBuf, 0x40u, "%p", a7); sub_5297C0(v7, a2, a3, a4, a5, a6, &DstBuf, v8); return a2; } //----- (0052A0A0) -------------------------------------------------------- int __cdecl sub_52A0A0(int a1, int a2, int a3, int a4, int a5, int a6, void *a7, int a8, int a9, int a10, size_t a11) { int v11; // ebx unsigned __int8 *v12; // edi _DWORD *v13; // eax struct std::locale::facet *v14; // esi int v15; // esi unsigned int v16; // eax int v17; // esi void (__thiscall ***v18)(_DWORD, signed int); // esi int (__thiscall *v19)(struct std::locale::facet *); // eax char v20; // al _BYTE *v21; // esi _BYTE *v22; // eax _BYTE *v23; // eax _BYTE *v24; // ebx int v25; // ebx _BYTE *v26; // ebx const char *v27; // eax int v28; // edi int v29; // eax unsigned int v30; // ecx size_t v31; // eax int v32; // eax int *v33; // eax int *v34; // eax int *v35; // eax _BYTE *v36; // eax size_t v37; // eax int v38; // ebx int *v39; // eax int *v40; // eax unsigned __int8 v41; // al int *v42; // eax int *v43; // eax int v44; // ecx _BYTE *v45; // eax int v46; // ebx int *v47; // eax int *v48; // eax bool v49; // zf char *v50; // ecx int *v51; // eax int v52; // edx int *v53; // eax int *v54; // eax int v55; // ecx _DWORD *v56; // edx _DWORD *v57; // eax char v59; // [esp+14h] [ebp-80h] struct std::locale::facet *v60; // [esp+18h] [ebp-7Ch] _DWORD *v61; // [esp+1Ch] [ebp-78h] int v62; // [esp+20h] [ebp-74h] int v63; // [esp+24h] [ebp-70h] size_t v64; // [esp+28h] [ebp-6Ch] int v65; // [esp+2Ch] [ebp-68h] int v66; // [esp+30h] [ebp-64h] int v67; // [esp+34h] [ebp-60h] char v68; // [esp+38h] [ebp-5Ch] __int16 v69; // [esp+39h] [ebp-5Bh] size_t v70; // [esp+3Ch] [ebp-58h] size_t v71; // [esp+40h] [ebp-54h] _BYTE *v72; // [esp+44h] [ebp-50h] size_t v73; // [esp+48h] [ebp-4Ch] void *v74; // [esp+4Ch] [ebp-48h] unsigned int v75; // [esp+60h] [ebp-34h] char *v76; // [esp+68h] [ebp-2Ch] size_t v77; // [esp+78h] [ebp-1Ch] unsigned int v78; // [esp+7Ch] [ebp-18h] int v79; // [esp+90h] [ebp-4h] int v80; // [esp+A4h] [ebp+10h] int v81; // [esp+A4h] [ebp+10h] int v82; // [esp+A4h] [ebp+10h] int v83; // [esp+A4h] [ebp+10h] int v84; // [esp+A4h] [ebp+10h] int v85; // [esp+A4h] [ebp+10h] int v86; // [esp+A8h] [ebp+14h] _DWORD *v87; // [esp+A8h] [ebp+14h] int v88; // [esp+A8h] [ebp+14h] int v89; // [esp+A8h] [ebp+14h] int v90; // [esp+A8h] [ebp+14h] int v91; // [esp+A8h] [ebp+14h] v11 = a11; v12 = (unsigned __int8 *)a7; v64 = a9; v70 = a8; v61 = (_DWORD *)a5; v71 = a10; v73 = a11; v13 = sub_422FF0((_DWORD **)a5, &v63); v79 = 0; v14 = sub_5293C0((int)v13); v60 = v14; v79 = -1; if ( v63 ) { v15 = v63; v67 = v63; std::_Lockit::_Lockit((std::_Lockit *)&v66, 0); v16 = *(_DWORD *)(v15 + 4); if ( v16 && v16 < 0xFFFFFFFF ) *(_DWORD *)(v15 + 4) = v16 - 1; v17 = -(*(_DWORD *)(v15 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v66); v18 = (void (__thiscall ***)(_DWORD, signed int))(v67 & v17); if ( v18 ) (**v18)(v18, 1); v14 = v60; } sub_529010((void *)v14, (int)&v74); v19 = *(int (__thiscall **)(struct std::locale::facet *))(*(_DWORD *)v14 + 8); v79 = 1; LOBYTE(v67) = v19(v14); v78 = 15; v77 = 0; LOBYTE(v76) = 0; v20 = *(_BYTE *)a7; LOBYTE(v79) = 2; if ( v20 == 43 || (v66 = 0, v20 == 45) ) v66 = 1; v68 = *localeconv()->decimal_point; v69 = 101; v21 = memchr(a7, 101, a11); v72 = memchr(a7, v68, a11); if ( !v72 ) v71 = 0; v22 = v74; if ( v75 < 0x10 ) v22 = &v74; if ( *v22 != 127 ) { v23 = v74; if ( v75 < 0x10 ) v23 = &v74; if ( *v23 > 0 ) { sub_401D10((int)&v76, a7, a11); if ( v21 ) { v24 = v72; if ( !v72 ) { sub_40AB50(&v76, v70, 48); v70 = (size_t)v24; } sub_4F9BA0(&v76, v21 - (_BYTE *)a7, v71, 48); } else { sub_40AB50(&v76, v71, 48); v24 = v72; } if ( v24 ) { v25 = v24 - (_BYTE *)a7; sub_4F9BA0(&v76, v25 + 1, v64, 48); sub_4F9BA0(&v76, v25, v70, 48); v64 = 0; } else { sub_40AB50(&v76, v70, 48); } v26 = v74; v70 = 0; if ( v75 < 0x10 ) v26 = &v74; v27 = v76; if ( v78 < 0x10 ) v27 = (const char *)&v76; v28 = strcspn(v27, &v68); for ( LOBYTE(v29) = *v26; *v26 != 127; LOBYTE(v29) = *v26 ) { if ( (char)v29 <= 0 ) break; v29 = (char)v29; if ( (char)v29 >= (unsigned int)(v28 - v66) ) break; v28 -= v29; sub_4F9BA0(&v76, v28, 1u, 0); if ( v26[1] > 0 ) ++v26; } v12 = (unsigned __int8 *)v76; if ( v78 < 0x10 ) v12 = (unsigned __int8 *)&v76; v71 = 0; v73 = v77; v11 = v77; } } v30 = v61[8]; v31 = v70 + v64 + v11 + v71; if ( v61[9] >= 0 && (v61[9] > 0 || v30) && v30 > v31 ) v72 = (_BYTE *)(v30 - v31); else v72 = 0; v32 = v61[5] & 0x1C0; if ( v32 != 64 ) { if ( v32 == 256 ) { if ( v66 ) { v34 = sub_528E50(a1, &v65, a3, (_DWORD *)a4, v12, 1); a3 = *v34; ++v12; --v11; a4 = v34[1]; v73 = v11; } v35 = sub_528EC0(a1, &v65, a3, (_DWORD *)a4, a6, (int)v72); a3 = *v35; a4 = v35[1]; } else { v33 = sub_528EC0(a1, &v65, a3, (_DWORD *)a4, a6, (int)v72); a3 = *v33; a4 = v33[1]; } v72 = 0; } v36 = memchr(v12, v68, v11); if ( v36 ) { v37 = v36 - v12; v38 = v37 + 1; v39 = (int *)sub_528F70(a1, (int)&v65, a3, a4, v12, v37, v67); v80 = *v39; v86 = v39[1]; v40 = sub_528EC0(a1, &v65, *v39, (_DWORD *)v39[1], 0x30u, v70); v81 = *v40; v87 = (_DWORD *)v40[1]; v41 = (*(int (**)(void))(*(_DWORD *)v60 + 4))(); LOBYTE(v63) = v41; v42 = sub_528EC0(a1, &v59, v81, v87, v41, 1); v82 = *v42; v88 = v42[1]; v43 = sub_528EC0(a1, &v62, *v42, (_DWORD *)v42[1], 0x30u, v64); v44 = *v43; v12 += v38; v73 -= v38; v11 = v73; a3 = v44; a4 = v43[1]; } v45 = memchr(v12, 101, v11); if ( v45 ) { v46 = v45 - v12 + 1; v47 = (int *)sub_528F70(a1, (int)&v62, a3, a4, v12, v45 - v12, v67); v83 = *v47; v89 = v47[1]; v48 = sub_528EC0(a1, &v62, *v47, (_DWORD *)v47[1], 0x30u, v71); v84 = *v48; v49 = (v61[5] & 4) == 0; v90 = v48[1]; v71 = 0; v50 = "E"; if ( v49 ) v50 = "e"; v51 = sub_528E50(a1, &v62, *v48, (_DWORD *)v48[1], (unsigned __int8 *)v50, 1); v52 = *v51; v12 += v46; v73 -= v46; v11 = v73; a3 = v52; a4 = v51[1]; } v53 = (int *)sub_528F70(a1, (int)&v62, a3, a4, v12, v11, v67); v85 = *v53; v91 = v53[1]; v54 = sub_528EC0(a1, &v59, *v53, (_DWORD *)v53[1], 0x30u, v71); v56 = v61; v55 = *v54; v57 = (_DWORD *)v54[1]; v61[8] = 0; v56[9] = 0; sub_528EC0(a1, (_DWORD *)a2, v55, v57, a6, (int)v72); if ( v78 >= 0x10 ) operator delete(v76); v78 = 15; v77 = 0; LOBYTE(v76) = 0; if ( v75 >= 0x10 ) operator delete(v74); return a2; } //----- (0052A610) -------------------------------------------------------- _DWORD *__thiscall sub_52A610(_DWORD *this, _DWORD *a2) { void *v2; // ecx v2 = (void *)this[2]; a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, v2, strlen((const char *)v2)); return a2; } //----- (0052A660) -------------------------------------------------------- _DWORD *__thiscall sub_52A660(_DWORD *this, _DWORD *a2) { void *v2; // ecx v2 = (void *)this[4]; a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, v2, strlen((const char *)v2)); return a2; } //----- (0052A6B0) -------------------------------------------------------- _DWORD *__thiscall sub_52A6B0(_DWORD *this, _DWORD *a2) { void *v2; // ecx v2 = (void *)this[5]; a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, v2, strlen((const char *)v2)); return a2; } //----- (0052A700) -------------------------------------------------------- _DWORD *__thiscall sub_52A700(void *this, _DWORD *a2, int a3, _DWORD *a4, int a5, char a6, unsigned __int8 a7) { bool v7; // zf int v8; // ebx _DWORD *result; // eax _DWORD *v10; // eax struct std::locale::facet *v11; // eax int v12; // edi unsigned int v13; // eax int v14; // edi void (__thiscall ***v15)(_DWORD, signed int); // edi void *v16; // eax void *v17; // eax unsigned int v18; // edi int v19; // ecx int v20; // edi int *v21; // eax unsigned __int8 *v22; // eax int *v23; // eax int v24; // ecx _DWORD *v25; // eax _DWORD *v26; // esi char v27; // [esp+10h] [ebp-68h] char v28; // [esp+14h] [ebp-64h] char v29; // [esp+18h] [ebp-60h] struct std::locale::facet *v30; // [esp+1Ch] [ebp-5Ch] int v31; // [esp+20h] [ebp-58h] _DWORD *v32; // [esp+24h] [ebp-54h] int v33; // [esp+28h] [ebp-50h] int v34; // [esp+2Ch] [ebp-4Ch] void *v35; // [esp+30h] [ebp-48h] unsigned int v36; // [esp+44h] [ebp-34h] void *v37; // [esp+4Ch] [ebp-2Ch] unsigned int v38; // [esp+5Ch] [ebp-1Ch] unsigned int v39; // [esp+60h] [ebp-18h] int v40; // [esp+74h] [ebp-4h] v7 = (*(_DWORD *)(a5 + 20) & 0x4000) == 0; v8 = (int)this; v32 = a2; LOBYTE(v34) = a6; if ( v7 ) { (*(void (__stdcall **)(_DWORD *, int, _DWORD *, int, int, _DWORD))(*(_DWORD *)this + 28))(a2, a3, a4, a5, v34, a7); result = a2; } else { v10 = sub_422FF0((_DWORD **)a5, &v31); v40 = 0; v11 = sub_5293C0((int)v10); v12 = v31; v30 = v11; v40 = -1; if ( v31 ) { v33 = v31; std::_Lockit::_Lockit((std::_Lockit *)&v28, 0); v13 = *(_DWORD *)(v12 + 4); if ( v13 && v13 < 0xFFFFFFFF ) *(_DWORD *)(v12 + 4) = v13 - 1; v14 = -(*(_DWORD *)(v12 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v28); v15 = (void (__thiscall ***)(_DWORD, signed int))(v33 & v14); if ( v15 ) (**v15)(v15, 1); } v39 = 15; v38 = 0; LOBYTE(v37) = 0; v40 = 1; if ( a7 ) { v16 = (void *)sub_528F50((void *)v30, (int)&v35); LOBYTE(v40) = 2; sub_406450(&v37, v16); LOBYTE(v40) = 1; if ( v36 >= 0x10 ) operator delete(v35); } else { v17 = (void *)sub_528F30((void *)v30, (int)&v35); LOBYTE(v40) = 3; sub_406450(&v37, v17); LOBYTE(v40) = 1; if ( v36 >= 0x10 ) operator delete(v35); } v18 = *(_DWORD *)(a5 + 32); v19 = v38; if ( *(_DWORD *)(a5 + 36) >= 0 && (*(_DWORD *)(a5 + 36) > 0 || v18) && v18 > v38 ) v20 = v18 - v38; else v20 = 0; if ( (*(_DWORD *)(a5 + 20) & 0x1C0) != 64 ) { v21 = sub_528EC0(v8, &v27, a3, a4, v34, v20); a3 = *v21; v19 = v38; a4 = (_DWORD *)v21[1]; v20 = 0; } v22 = (unsigned __int8 *)v37; if ( v39 < 0x10 ) v22 = (unsigned __int8 *)&v37; v23 = sub_528E50(v8, &v29, a3, a4, v22, v19); v24 = *v23; v25 = (_DWORD *)v23[1]; *(_DWORD *)(a5 + 32) = 0; *(_DWORD *)(a5 + 36) = 0; v26 = v32; sub_528EC0(v8, v32, v24, v25, v34, v20); if ( v39 >= 0x10 ) operator delete(v37); result = v26; } return result; } //----- (0052A920) -------------------------------------------------------- int __thiscall sub_52A920(void *this, int a2, int a3, int a4, int a5, int a6, double a7) { unsigned int v7; // esi signed int v8; // eax unsigned int v9; // edi double v10; // st7 int v11; // ecx unsigned int v12; // esi int v13; // edx double v14; // st7 double v15; // st6 double v16; // st5 double v17; // st4 double v18; // st5 double v19; // rt2 double v20; // rtt double v21; // st4 double v22; // rt0 double v23; // st5 double v24; // st7 double v25; // st5 double v26; // rt1 unsigned __int8 v27; // cf double v28; // rt2 double v29; // st5 double v30; // st6 double v31; // st5 char *v32; // eax int v33; // edx int v34; // ecx int v35; // eax int v37; // [esp+14h] [ebp-8Ch] signed int v38; // [esp+1Ch] [ebp-84h] unsigned int v39; // [esp+20h] [ebp-80h] char v40; // [esp+27h] [ebp-79h] char DstBuf; // [esp+28h] [ebp-78h] char Format; // [esp+94h] [ebp-Ch] char v43; // [esp+95h] [ebp-Bh] char v44; // [esp+96h] [ebp-Ah] v7 = *(_DWORD *)(a5 + 24); v8 = *(_DWORD *)(a5 + 28); v9 = 0; v37 = (int)this; if ( v8 <= 0 && (v8 < 0 || v7 <= 0) && !(*(_DWORD *)(a5 + 20) & 0x2000) ) { v7 = 6; v8 = 0; } if ( v8 < 0 || v8 <= 0 && v7 <= 0x24 ) v38 = v7; else v38 = 36; v10 = a7; v11 = (__PAIR__((unsigned int)v8, v7) - v38) >> 32; v12 = v7 - v38; v13 = *(_DWORD *)(a5 + 20); v39 = 0; if ( (*(_DWORD *)(a5 + 20) & 0x3000) == 0x2000 && a7 != 0.5 * a7 ) { if ( a7 >= 0.0 ) { v40 = 0; v15 = a7; v14 = 0.0; } else { v14 = 0.0; v40 = 1; v15 = -a7; } v16 = 1.0e35; v17 = 1.0e10; if ( v15 >= 1.0e35 ) { while ( v39 < 0x1388 ) { v15 = v15 / v17; v39 += 10; v20 = v17; v21 = v16; v18 = v20; if ( v21 > v15 ) goto LABEL_21; v19 = v21; v17 = v18; v16 = v19; } } v18 = v17; LABEL_21: v22 = v18; v23 = v14; v24 = v22; if ( v23 < v15 && v11 >= 0 && (v11 > 0 || v12 >= 0xA) ) { v25 = 1.0e-35; while ( v25 >= v15 && v9 < 0x1388 ) { v27 = __CFADD__(v12, -10); v12 -= 10; v28 = v25; v29 = v15; v30 = v28; v11 = v27 + v11 - 1; v31 = v29 * v24; v9 += 10; if ( v11 <= 0 && (v11 < 0 || v12 < 0xA) ) { v15 = v31; break; } v26 = v31; v25 = v30; v15 = v26; } } v10 = v15; if ( v40 ) v10 = -v15; } Format = 37; v32 = &v43; if ( v13 & 0x20 ) { v43 = 43; v32 = &v44; } if ( v13 & 0x10 ) *v32++ = 35; v33 = v13 & 0x3000; *(_WORD *)v32 = 10798; if ( v33 == 0x2000 ) { LOBYTE(v34) = 102; } else if ( v33 == 12288 ) { LOBYTE(v34) = 97; } else { LOBYTE(v11) = v33 != 4096; v34 = 2 * v11 + 101; } v32[2] = v34; v32[3] = 0; v35 = sprintf_s(&DstBuf, 0x6Cu, &Format, v38, LODWORD(v10), (_DWORD)(*(unsigned __int64 *)&v10 >> 32)); sub_52A0A0(v37, a2, a3, a4, a5, a6, &DstBuf, v39, v9, v12, v35); return a2; } //----- (0052AB30) -------------------------------------------------------- int __thiscall sub_52AB30(void *this, int a2, int a3, int a4, int a5, int a6, double a7) { unsigned int v7; // esi signed int v8; // eax unsigned int v9; // edi int v10; // ecx unsigned int v11; // esi int v12; // edx double v13; // st6 double v14; // st5 double v15; // st4 double v16; // st5 double v17; // rt0 double v18; // rt1 double v19; // st4 double v20; // st7 double v21; // st5 double v22; // rtt unsigned __int8 v23; // cf double v24; // rt0 double v25; // st5 double v26; // st6 double v27; // st5 double v28; // st7 char *v29; // eax int v30; // edx int v31; // ecx int v32; // eax int v34; // [esp+14h] [ebp-8Ch] signed int v35; // [esp+1Ch] [ebp-84h] unsigned int v36; // [esp+20h] [ebp-80h] char v37; // [esp+27h] [ebp-79h] char DstBuf; // [esp+28h] [ebp-78h] char Format; // [esp+94h] [ebp-Ch] char v40; // [esp+95h] [ebp-Bh] char v41; // [esp+96h] [ebp-Ah] v7 = *(_DWORD *)(a5 + 24); v8 = *(_DWORD *)(a5 + 28); v9 = 0; v34 = (int)this; if ( v8 <= 0 && (v8 < 0 || v7 <= 0) && !(*(_DWORD *)(a5 + 20) & 0x2000) ) { v7 = 6; v8 = 0; } if ( v8 < 0 || v8 <= 0 && v7 <= 0x24 ) v35 = v7; else v35 = 36; v10 = (__PAIR__((unsigned int)v8, v7) - v35) >> 32; v11 = v7 - v35; v12 = *(_DWORD *)(a5 + 20); v36 = 0; if ( (*(_DWORD *)(a5 + 20) & 0x3000) == 0x2000 ) { v13 = a7; if ( a7 >= 0.0 ) { v37 = 0; } else { v37 = 1; v13 = -a7; } v14 = 1.0e35; v15 = 1.0e10; if ( v13 >= 1.0e35 ) { while ( v36 < 0x1388 ) { v13 = v13 / v15; v36 += 10; v18 = v15; v19 = v14; v16 = v18; if ( v19 > v13 ) goto LABEL_20; v17 = v19; v15 = v16; v14 = v17; } } v16 = v15; LABEL_20: v20 = v16; if ( v13 > 0.0 && v10 >= 0 && (v10 > 0 || v11 >= 0xA) ) { v21 = 1.0e-35; while ( v21 >= v13 && v9 < 0x1388 ) { v23 = __CFADD__(v11, -10); v11 -= 10; v24 = v21; v25 = v13; v26 = v24; v10 = v23 + v10 - 1; v27 = v25 * v20; v9 += 10; if ( v10 <= 0 && (v10 < 0 || v11 < 0xA) ) { v13 = v27; break; } v22 = v27; v21 = v26; v13 = v22; } } v28 = v13; if ( v37 ) v28 = -v13; } else { v28 = a7; } Format = 37; v29 = &v40; if ( v12 & 0x20 ) { v40 = 43; v29 = &v41; } if ( v12 & 0x10 ) *v29++ = 35; v30 = v12 & 0x3000; *(_WORD *)v29 = 10798; v29[2] = 76; if ( v30 == 0x2000 ) { LOBYTE(v31) = 102; } else if ( v30 == 12288 ) { LOBYTE(v31) = 97; } else { LOBYTE(v10) = v30 != 4096; v31 = 2 * v10 + 101; } v29[3] = v31; v29[4] = 0; v32 = sprintf_s(&DstBuf, 0x6Cu, &Format, v35, LODWORD(v28), (_DWORD)(*(unsigned __int64 *)&v28 >> 32)); sub_52A0A0(v34, a2, a3, a4, a5, a6, &DstBuf, v36, v9, v11, v32); return a2; } //----- (0052AD30) -------------------------------------------------------- int __cdecl sub_52AD30(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9) { int v9; // edi int i; // ebx int v11; // esi int v12; // edi int v13; // esi int v14; // ecx int result; // eax std::tr1 *v16; // [esp+0h] [ebp-1Ch] v9 = a2; for ( i = (a2 - 1) / 2; a3 < v9; i = (i - 1) / 2 ) { if ( !a9 ) std::tr1::_Xfunc(v16); v11 = a1 + 68 * i; if ( !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 68 * i, a4) ) break; v12 = a1 + 68 * v9; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v12 + 28), (const void **)(v11 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 56) = *(_DWORD *)(v11 + 56); *(_DWORD *)(v12 + 60) = *(_DWORD *)(v11 + 60); *(_DWORD *)(v12 + 64) = *(_DWORD *)(v11 + 64); v9 = i; } v13 = a1 + 68 * v9; sub_4017F0((const void **)v13, (const void **)a4, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v13 + 28), (const void **)(a4 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v13 + 56) = *(_DWORD *)(a4 + 56); v14 = a9; *(_DWORD *)(v13 + 60) = *(_DWORD *)(a4 + 60); result = *(_DWORD *)(a4 + 64); *(_DWORD *)(v13 + 64) = result; if ( v14 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)v14 + 12))(v14 != (_DWORD)&a5); return result; } //----- (0052AE60) -------------------------------------------------------- void *__thiscall sub_52AE60(int this, void *a2) { int v2; // edx unsigned int *v3; // eax unsigned int v4; // eax void *v5; // ecx _DWORD *v6; // edx int v7; // eax void *v8; // ecx void *v10; // [esp+14h] [ebp-48h] int v11; // [esp+24h] [ebp-38h] unsigned int v12; // [esp+28h] [ebp-34h] void *v13; // [esp+30h] [ebp-2Ch] int v14; // [esp+40h] [ebp-1Ch] unsigned int v15; // [esp+44h] [ebp-18h] int v16; // [esp+58h] [ebp-4h] v2 = *(_DWORD *)(this + 64); if ( !(v2 & 2) ) { v3 = *(unsigned int **)(this + 36); if ( *v3 ) { v4 = *v3; if ( *(_DWORD *)(this + 60) >= v4 ) v4 = *(_DWORD *)(this + 60); v5 = **(void ***)(this + 20); v15 = 15; v14 = 0; LOBYTE(v13) = 0; sub_4018E0(&v13, v5, v4 - (_DWORD)v5); v16 = 0; goto LABEL_6; } } if ( !(v2 & 4) ) { v6 = *(_DWORD **)(this + 32); if ( *v6 ) { v7 = *v6 + **(_DWORD **)(this + 48); v8 = **(void ***)(this + 16); v15 = 15; v14 = 0; LOBYTE(v13) = 0; sub_4018E0(&v13, v8, v7 - (_DWORD)v8); v16 = 1; LABEL_6: *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; *(_BYTE *)a2 = 0; sub_406450(a2, &v13); if ( v15 >= 0x10 ) operator delete(v13); return a2; } } v12 = 15; v11 = 0; LOBYTE(v10) = 0; *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; v16 = 2; *(_BYTE *)a2 = 0; sub_406450(a2, &v10); if ( v12 >= 0x10 ) operator delete(v10); return a2; } //----- (0052AF90) -------------------------------------------------------- int __cdecl sub_52AF90(const void **a1, const void **a2, int a3) { int v3; // esi const void **v4; // edi int v5; // ecx int v10; // [esp+0h] [ebp-24h] int v11; // [esp+10h] [ebp-14h] int *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v12 = &v10; v3 = a3; v4 = a1; v11 = a3; v13 = 0; while ( v4 != a2 ) { LOBYTE(v13) = 1; if ( v3 ) { *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, v4, 0, (void *)0xFFFFFFFF); v5 = v3 + 28; *(_DWORD *)(v5 + 20) = 15; *(_DWORD *)(v5 + 16) = 0; LOBYTE(v13) = 2; *(_BYTE *)v5 = 0; sub_4017F0((const void **)(v3 + 28), v4 + 7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 56) = v4[14]; *(_DWORD *)(v3 + 60) = v4[15]; *(_DWORD *)(v3 + 64) = v4[16]; } v3 += 68; LOBYTE(v13) = 0; v4 += 17; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0052B080) -------------------------------------------------------- int __cdecl sub_52B080(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { int v9; // ebx int v10; // edi int v11; // esi bool v12; // zf int v13; // edi int v14; // ebx int v15; // esi int v16; // ebx int (__stdcall *v17)(char *); // edx int v18; // eax int result; // eax char v20; // [esp-18h] [ebp-34h] int v21; // [esp-14h] [ebp-30h] int v22; // [esp-10h] [ebp-2Ch] int v23; // [esp-Ch] [ebp-28h] int v24; // [esp-8h] [ebp-24h] std::tr1 *v25; // [esp+0h] [ebp-1Ch] int v26; // [esp+18h] [ebp-4h] v9 = a2; v10 = a3; v11 = 2 * a2 + 2; v26 = 0; v12 = v11 == a3; if ( v11 < a3 ) { do { if ( !a9 ) std::tr1::_Xfunc(v25); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 68 * v11, a1 + 68 * v11 - 68) ) --v11; v13 = a1 + 68 * v11; v14 = a1 + 68 * v9; sub_4017F0((const void **)v14, (const void **)(a1 + 68 * v11), 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v14 + 28), (const void **)(v13 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v14 + 56) = *(_DWORD *)(v13 + 56); *(_DWORD *)(v14 + 60) = *(_DWORD *)(v13 + 60); *(_DWORD *)(v14 + 64) = *(_DWORD *)(v13 + 64); v9 = v11; v11 = 2 * v11 + 2; } while ( v11 < a3 ); v10 = a3; v12 = v11 == a3; } if ( v12 ) { v15 = a1 + 68 * v10 - 68; v16 = a1 + 68 * v9; sub_4017F0((const void **)v16, (const void **)v15, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v16 + 28), (const void **)(v15 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v16 + 56) = *(_DWORD *)(v15 + 56); *(_DWORD *)(v16 + 60) = *(_DWORD *)(v15 + 60); *(_DWORD *)(v16 + 64) = *(_DWORD *)(v15 + 64); v9 = v10 - 1; } if ( a9 ) { v17 = **(int (__stdcall ***)(char *))a9; if ( a9 == &a5 ) v18 = v17(&v20); else v18 = v17(0); v24 = v18; } else { v24 = 0; } result = sub_52AD30(a1, v9, a2, a4, v20, v21, v22, v23, v24); v26 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (0052B210) -------------------------------------------------------- int __cdecl sub_52B210(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { char *v9; // ecx int (__stdcall *v10)(char *); // edx int v11; // eax unsigned int v12; // edx int result; // eax char v14; // [esp-18h] [ebp-30h] int v15; // [esp-14h] [ebp-2Ch] int v16; // [esp-10h] [ebp-28h] int v17; // [esp-Ch] [ebp-24h] char *v18; // [esp-8h] [ebp-20h] int v19; // [esp+14h] [ebp-4h] v19 = 0; sub_4017F0((const void **)a3, (const void **)a1, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(a3 + 28), (const void **)(a1 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(a3 + 56) = *(_DWORD *)(a1 + 56); v9 = a9; *(_DWORD *)(a3 + 60) = *(_DWORD *)(a1 + 60); *(_DWORD *)(a3 + 64) = *(_DWORD *)(a1 + 64); if ( v9 ) { v10 = **(int (__stdcall ***)(char *))v9; if ( v9 == &a5 ) v11 = v10(&v14); else v11 = v10(0); v18 = (char *)v11; } else { v18 = 0; } v12 = (signed int)((unsigned __int64)(2021161081i64 * (a2 - a1)) >> 32) >> 5; result = sub_52B080(a1, 0, v12 + (v12 >> 31), a4, v14, v15, v16, v17, v18); v19 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (0052B2F0) -------------------------------------------------------- void *__thiscall sub_52B2F0(void *this, void *a2) { sub_52AE60((int)this + 4, a2); return a2; } //----- (0052B320) -------------------------------------------------------- void __cdecl sub_52B320(int a1, int a2, char a3, int a4, int a5, int a6, int a7) { int v7; // edi int i; // ebx int v9; // esi int v10; // edx int v11; // eax int v12; // edx int v13; // eax const void **j; // edi int v15; // ecx int v16; // edx std::tr1 *v17; // [esp+0h] [ebp-68h] void *v18; // [esp+14h] [ebp-54h] int v19; // [esp+24h] [ebp-44h] unsigned int v20; // [esp+28h] [ebp-40h] void *v21; // [esp+30h] [ebp-38h] int v22; // [esp+40h] [ebp-28h] unsigned int v23; // [esp+44h] [ebp-24h] int v24; // [esp+4Ch] [ebp-1Ch] int v25; // [esp+50h] [ebp-18h] int v26; // [esp+54h] [ebp-14h] int v27; // [esp+64h] [ebp-4h] v7 = a1; v27 = 0; if ( a1 != a2 ) { for ( i = a1 + 68; i != a2; LOBYTE(v18) = 0 ) { v9 = i; v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4017F0((const void **)&v18, (const void **)i, 0, (void *)0xFFFFFFFF); LOBYTE(v27) = 1; v23 = 15; v22 = 0; LOBYTE(v21) = 0; sub_4017F0((const void **)&v21, (const void **)(i + 28), 0, (void *)0xFFFFFFFF); v10 = *(_DWORD *)(i + 60); v11 = *(_DWORD *)(i + 64); v24 = *(_DWORD *)(i + 56); v25 = v10; v26 = v11; LOBYTE(v27) = 2; if ( !a7 ) LABEL_19: std::tr1::_Xfunc(v17); if ( (*(unsigned __int8 (__stdcall **)(void **, int))(*(_DWORD *)a7 + 4))(&v18, v7) ) { sub_70ABD0((const void **)v7, (const void **)i, i + 68); sub_4017F0((const void **)v7, (const void **)&v18, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v7 + 28), (const void **)&v21, 0, (void *)0xFFFFFFFF); v12 = v25; v13 = v26; *(_DWORD *)(v7 + 56) = v24; *(_DWORD *)(v7 + 60) = v12; *(_DWORD *)(v7 + 64) = v13; } else { for ( j = (const void **)(i + 56); ; v9 = (int)(j - 14) ) { j -= 17; if ( !a7 ) goto LABEL_19; if ( !(*(unsigned __int8 (__stdcall **)(void **, const void **))(*(_DWORD *)a7 + 4))(&v18, j - 14) ) break; sub_4017F0((const void **)v9, j - 14, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v9 + 28), j - 7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 56) = *j; *(_DWORD *)(v9 + 60) = j[1]; *(_DWORD *)(v9 + 64) = j[2]; } sub_4017F0((const void **)v9, (const void **)&v18, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v9 + 28), (const void **)&v21, 0, (void *)0xFFFFFFFF); v15 = v25; v16 = v26; v7 = a1; *(_DWORD *)(v9 + 56) = v24; *(_DWORD *)(v9 + 60) = v15; *(_DWORD *)(v9 + 64) = v16; } LOBYTE(v27) = 0; if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v20 >= 0x10 ) operator delete(v18); i += 68; v20 = 15; v19 = 0; } } v27 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != (_DWORD)&a3); } //----- (0052B550) -------------------------------------------------------- void __cdecl sub_52B550(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // edx int v8; // eax char v9; // [esp-1Ch] [ebp-88h] int v10; // [esp-18h] [ebp-84h] int v11; // [esp-14h] [ebp-80h] int v12; // [esp-10h] [ebp-7Ch] char *v13; // [esp-Ch] [ebp-78h] int v14; // [esp-4h] [ebp-70h] char *v15; // [esp+10h] [ebp-5Ch] int v16; // [esp+14h] [ebp-58h] void *v17; // [esp+18h] [ebp-54h] int v18; // [esp+28h] [ebp-44h] unsigned int v19; // [esp+2Ch] [ebp-40h] void *v20; // [esp+34h] [ebp-38h] int v21; // [esp+44h] [ebp-28h] unsigned int v22; // [esp+48h] [ebp-24h] int v23; // [esp+68h] [ebp-4h] v16 = a1; v23 = 0; sub_5F6310((int)&v17, a2 - 68); v14 = 0; LOBYTE(v23) = 1; v15 = &v9; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = (char *)v8; } else { v13 = 0; } sub_52B210(v16, a2 - 68, a2 - 68, (int)&v17, v9, v10, v11, v12, v13); if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v19 >= 0x10 ) operator delete(v17); v19 = 15; v18 = 0; LOBYTE(v17) = 0; v23 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (0052B650) -------------------------------------------------------- void __cdecl sub_52B650(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // eax int v8; // eax char v9; // [esp-1Ch] [ebp-34h] int v10; // [esp-18h] [ebp-30h] int v11; // [esp-14h] [ebp-2Ch] int v12; // [esp-10h] [ebp-28h] int v13; // [esp-Ch] [ebp-24h] int v14; // [esp-4h] [ebp-1Ch] char *v15; // [esp+8h] [ebp-10h] int v16; // [esp+14h] [ebp-4h] v14 = 0; v16 = 0; v15 = &v9; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = v8; } else { v13 = 0; } sub_52B320(a1, a2, v9, v10, v11, v12, v13); v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (0052B6F0) -------------------------------------------------------- unsigned int __thiscall sub_52B6F0(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax void *v4; // eax const void **v5; // ST04_4 const void **v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x3C3C3C3 ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 68; if ( result < (unsigned int)a2 ) { v4 = sub_442A60(a2); v5 = (const void **)v2[1]; v6 = (const void **)*v2; v10 = v4; v12 = 0; sub_52AF90(v6, v5, (int)v4); v7 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)(v2[1] - *v2)) >> 32) >> 5; v8 = v7 + (v7 >> 31); if ( *v2 ) { sub_5F6400((_DWORD *)*v2, (_DWORD *)v2[1]); operator delete((void *)*v2); } result = (unsigned int)v10; v2[2] = (unsigned int)v10 + 68 * (_DWORD)a2; v2[1] = result + 68 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0052B810) -------------------------------------------------------- int __cdecl sub_52B810(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edi int result; // eax char *v9; // eax int (__stdcall *v10)(char *); // eax bool v11; // zf char *v12; // ecx int (__thiscall *v13)(char *, char *); // eax int v14; // eax char v15; // [esp-1Ch] [ebp-54h] int v16; // [esp-18h] [ebp-50h] int v17; // [esp-14h] [ebp-4Ch] int v18; // [esp-10h] [ebp-48h] char *v19; // [esp-Ch] [ebp-44h] char *v20; // [esp-4h] [ebp-3Ch] char v21; // [esp+10h] [ebp-28h] char *v22; // [esp+20h] [ebp-18h] char *v23; // [esp+28h] [ebp-10h] int v24; // [esp+34h] [ebp-4h] int v25; // [esp+44h] [ebp+Ch] v7 = a2; result = (a2 - a1) / 68; v24 = 0; if ( result > 1 ) { v25 = a2 - a1; do { if ( a7 ) { if ( a7 == &a3 ) { v10 = **(int (__stdcall ***)(char *))a7; v20 = &v21; } else { v10 = **(int (__stdcall ***)(char *))a7; v20 = 0; } v9 = (char *)v10(v20); } else { v9 = 0; } v22 = v9; v20 = 0; LOBYTE(v24) = 1; v23 = &v15; if ( v9 ) { v11 = v9 == &v21; v12 = v9; v13 = **(int (__thiscall ***)(char *, char *))v9; if ( v11 ) v14 = v13(v12, &v15); else v14 = v13(v12, 0); v19 = (char *)v14; } else { v19 = 0; } sub_52B550(a1, v7, v15, v16, v17, v18, v19); LOBYTE(v24) = 0; if ( v22 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v22 + 12))(v22 != &v21); v22 = 0; } result = (v25 - 68) / 68; v7 -= 68; v25 -= 68; } while ( result > 1 ); } v24 = -1; if ( a7 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); return result; } //----- (0052B940) -------------------------------------------------------- unsigned int __thiscall sub_52B940(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 68; if ( 63161283 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 68; if ( v3 > result ) { if ( 63161283 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_52B6F0(this, v5); } return result; } //----- (0052B9C0) -------------------------------------------------------- #error "52BA53: positive sp value has been found (funcsize=55)" //----- (0052BA60) -------------------------------------------------------- void *__thiscall sub_52BA60(void *this, char a2) { void *v2; // esi v2 = this; sub_526A60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0052BA90) -------------------------------------------------------- void __thiscall sub_52BA90(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // ecx int v7; // ecx v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_52B940(v2, 1); v7 = v2[1]; if ( v7 ) sub_5F6310(v7, a2); } else { v4 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)(a2 - *v2)) >> 32) >> 5; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_52B940(v2, 1); v6 = v2[1]; if ( v6 ) sub_5F6310(v6, *v2 + 68 * v5); } v2[1] += 68; } //----- (0052BB90) -------------------------------------------------------- char __thiscall sub_52BB90(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // esi char result; // al int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); v2 = sub_6D3810(); v3 = (_DWORD *)v2; result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( !result ) { (*(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180))(v1, &v6, &v5); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 172))(v3, v6); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 176))(v3, v5); result = sub_8F82A0(&unk_BA6B10, v3); } return result; } //----- (0052BC10) -------------------------------------------------------- char __thiscall sub_52BC10(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // esi char result; // al int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); v2 = sub_7154A0(); v3 = (_DWORD *)v2; result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( !result ) { (*(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180))(v1, &v6, &v5); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 172))(v3, v6); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 176))(v3, v5); result = sub_8F82A0(&unk_BA6B10, v3); } return result; } //----- (0052BCC0) -------------------------------------------------------- char __thiscall sub_52BCC0(_DWORD *this, int a2, int a3) { char result; // al if ( !a2 ) return sub_52BC10(this); result = a2 - 1; if ( a2 == 1 ) result = sub_52BB90(this); return result; } //----- (0052BCE0) -------------------------------------------------------- char __thiscall sub_52BCE0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG *v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // eax volatile LONG *v12; // edi volatile LONG v13; // ebx const CHAR *v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // edi volatile LONG *v18; // edi volatile LONG **v19; // edi volatile LONG **v20; // edi int v21; // eax int v22; // edi int v23; // ebx int v24; // eax volatile LONG *v25; // edi volatile LONG v26; // ebx const CHAR *v27; // eax volatile LONG **v28; // edi volatile LONG *v29; // edx int v30; // edi int v31; // ebx int v32; // eax volatile LONG *v33; // edi volatile LONG v34; // ebx const CHAR *v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi int v37; // [esp+44h] [ebp-20h] int v38; // [esp+48h] [ebp-1Ch] int v39; // [esp+4Ch] [ebp-18h] int v40; // [esp+50h] [ebp-14h] int v41; // [esp+54h] [ebp-10h] int v42; // [esp+60h] [ebp-4h] v2 = this; v41 = 0; v3 = dword_BA6BA0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildSelect.nif"); sub_8F66B0(v4, (int)&v41, v3); if ( !v41 ) return 0; v5 = sub_8FB140(v41, (int)"Frame", (int)&v39, (int)&v40, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"GuildSelectWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v41, (int)"Theme", (int)&v39, (int)&v40, v8); else v9 = sub_8FB140(v41, (int)"Theme", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39, v40, (int)v9, (int)v2, 0, 0); if ( sub_8F71E0(v41, (int)"WinTitle", &v39, &v40, &v37, &v38) ) { v11 = sub_421050(7); v12 = sub_8F4A20(v39, v40, v37, v38, v11, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, int *))(*v12 + 468))(v12, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, signed int))(*v12 + 488))(v12, 1); v13 = *v12; v14 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v13 + 472))(v12, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v15 = sub_8FB140(v41, (int)"Panel01", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39, v40, (int)v15, (int)v2, 0, 0); v16 = sub_8FB140(v41, (int)"Panel02", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39, v40, (int)v16, (int)v2, 0, 0); v17 = sub_8FB140(v41, (int)"ClsNor", (int)&v39, (int)&v40, 0); sub_8FB650(v17, v41, (int)"ClsClick"); sub_8FB650(v17, v41, (int)"ClsOver"); sub_90C8D0(v39, v40, (int)v17, (int)v2); v18 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v41 + 72))("HelpLinkNor") ) { v19 = sub_8FB140(v41, (int)"HelpLinkNor", (int)&v39, (int)&v40, v18); sub_8FB650(v19, v41, (int)"HelpLinkClick"); sub_8FB650(v19, v41, (int)"HelpLinkOver"); sub_8FE0F0(v39, v40, (int)v19, (int)v2, 2, 0, 0); } v20 = sub_8FB140(v41, (int)"Btn01Nor", (int)&v39, (int)&v40, 0); sub_8FB650(v20, v41, (int)"Btn01Click"); sub_8FB650(v20, v41, (int)"Btn01Over"); sub_8FE0F0(v39, v40, (int)v20, (int)v2, 1, 0, 0); v21 = *sub_8FB140(v41, (int)"Text01", (int)&v39, (int)&v40, 0)[9]; v22 = *(_DWORD *)(v21 + 24); v23 = *(_DWORD *)(v21 + 20); v24 = sub_421050(3); v25 = sub_8F4A20(v39, v40, v23, v22, v24, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v26 = *v25; v27 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v26 + 472))(v25, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v28 = sub_8FB140(v41, (int)"Btn02Nor", (int)&v39, (int)&v40, 0); sub_8FB650(v28, v41, (int)"Btn02Click"); sub_8FB650(v28, v41, (int)"Btn02Over"); sub_8FE0F0(v39, v40, (int)v28, (int)v2, 0, 0, 0); v29 = sub_8FB140(v41, (int)"Text02", (int)&v39, (int)&v40, 0)[9]; v30 = *(_DWORD *)(*v29 + 24); v31 = *(_DWORD *)(*v29 + 20); v32 = sub_421050(3); v33 = sub_8F4A20(v39, v40, v31, v30, v32, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v33 + 488))(v33, 5); v34 = *v33; v35 = sub_40C190(624629836); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v34 + 472))(v33, v35); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v42 = -1; if ( v41 ) { v36 = (void (__thiscall ***)(_DWORD, signed int))v41; if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v36 ) (**v36)(v36, 1); } } result = 1; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0052C200) -------------------------------------------------------- int __cdecl sub_52C200(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildSelectWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildSelectWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C7144: using guessed type void *GuildSelectWin::`vftable'; // 9C7164: using guessed type void *GuildSelectWin::`vftable'; //----- (0052C340) -------------------------------------------------------- void *__thiscall sub_52C340(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildSelectWin::`vftable'; *((_DWORD *)this + 58) = &GuildSelectWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C7144: using guessed type void *GuildSelectWin::`vftable'; // 9C7164: using guessed type void *GuildSelectWin::`vftable'; //----- (0052C380) -------------------------------------------------------- BOOL __thiscall sub_52C380(int this) { HWND v1; // ST00_4 v1 = *(HWND *)(this + 5016); *(_BYTE *)(this + 5036) = 0; return DestroyWindow(v1); } //----- (0052C3A0) -------------------------------------------------------- int __thiscall sub_52C3A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int result; // eax int v4; // ecx v1 = this; v1[1255] = v1[1260] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1) + v1[1261] + 2; result = v1[1262] - 8; v4 = v1[1263] - 10; v1[1256] = v2; v1[1257] = result; v1[1258] = v4; return result; } //----- (0052C400) -------------------------------------------------------- BOOL __thiscall sub_52C400(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[1254]); if ( result ) { if ( *((_BYTE *)v1 + 5036) ) { sub_52C3A0(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow( v1[1254], (int)v1[1255] + Rect.left, (int)v1[1256] + Rect.top, (int)v1[1257], (int)v1[1258], 1); } } return result; } //----- (0052C490) -------------------------------------------------------- char __thiscall sub_52C490(int this) { int v1; // esi HWND v2; // ST00_4 _DWORD *v3; // ecx v1 = this; v2 = *(HWND *)(this + 5016); *(_BYTE *)(this + 5036) = 0; DestroyWindow(v2); v3 = *(_DWORD **)(v1 + 296); *(_DWORD *)(v1 + 5016) = 0; return sub_4A5110(v3); } //----- (0052C4C0) -------------------------------------------------------- BOOL __thiscall sub_52C4C0(HWND *this, int a2) { return sub_52C400(this); } //----- (0052C4D0) -------------------------------------------------------- char __thiscall sub_52C4D0(_DWORD *this) { signed int v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax int *v4; // esi _DWORD *v6; // edi signed int v7; // eax int v8; // esi _DWORD *v9; // eax int v10; // ecx char *v11; // eax int v12; // edx char v13; // cl void *v14; // [esp+10h] [ebp-124h] int v15; // [esp+14h] [ebp-120h] int v16; // [esp+18h] [ebp-11Ch] int *v17; // [esp+1Ch] [ebp-118h] FILE v18; // [esp+20h] [ebp-114h] int v19; // [esp+130h] [ebp-4h] v1 = 0; v2 = this; memset(&v18, 0, 0x104u); if ( !byte_ACAD5C ) sub_420410(); sprintf((char *)&v18, "%sHelpPage.hb", byte_ACAC58); v3 = operator new(0x2224u); v19 = 0; if ( v3 ) { v4 = sub_6CBF30(v3); v17 = v4; } else { v17 = 0; v4 = 0; } v19 = -1; if ( !v4 ) return 0; sub_6CBFB0(v4, &v18); if ( sub_6CBEC0(v4, 1u) == -1 ) return 0; v2[86] = sub_6CBE90(v4); v16 = (int)(v2 + 93); v6 = v2 + 90; do { v7 = sub_6CBEC0(v4, v1); v14 = (void *)v7; if ( v7 != -1 ) { v8 = 0; if ( v7 >= 0 ) { v15 = v16; do { v9 = (_DWORD *)sub_6CBE40(v17, v1, v8); *(v6 - 3) = *v9; v10 = v9[1]; v11 = (char *)(v9 + 2); *v6 = v10; v12 = v15 - (_DWORD)v11; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); v15 += 512; ++v8; } while ( v8 <= (signed int)v14 ); } v4 = v17; } v16 += 1536; ++v1; ++v6; } while ( v1 < 3 ); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0052C660) -------------------------------------------------------- char __thiscall sub_52C660(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // eax volatile LONG *v9; // edi volatile LONG v10; // ebx const CHAR *v11; // eax volatile LONG **v12; // edi int v13; // [esp+28h] [ebp-20h] int v14; // [esp+2Ch] [ebp-1Ch] int v15; // [esp+30h] [ebp-18h] int v16; // [esp+34h] [ebp-14h] int v17; // [esp+38h] [ebp-10h] int v18; // [esp+44h] [ebp-4h] v2 = (int)this; v17 = 0; v3 = dword_BA6BA0; v18 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\Account\\SpawnAppsNotice.nif"); sub_8F66B0(v4, (int)&v17, v3); if ( !v17 ) return 0; v5 = sub_8FB140(v17, (int)"Frame", (int)&v15, (int)&v16, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"HelpWin", 0) || !sub_8F71E0(v17, (int)"Title", &v15, &v16, &v13, &v14) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v17; v18 = -1; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_421050(0); v9 = sub_8F4A20(v15, v16, v13, v14, v8, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v9 + 488))(v9, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v9 + 468))(v9, &dword_AA8D98); v10 = *v9; v11 = sub_40C190(1219466649); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v10 + 472))(v9, v11); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); if ( sub_8F71E0( v17, (int)"WebPage", (_DWORD *)(v2 + 5040), (_DWORD *)(v2 + 5044), (_DWORD *)(v2 + 5048), (_DWORD *)(v2 + 5052)) ) { v12 = sub_8FB140(v17, (int)"ClsNor", (int)&v15, (int)&v16, 0); sub_8FB650(v12, v17, (int)"ClsClick"); sub_8FB650(v12, v17, (int)"ClsOver"); sub_8FE0F0(v15, v16, (int)v12, v2, 1, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_52C3A0((_DWORD *)v2); *(_BYTE *)(v2 + 4980) = sub_52C4D0((_DWORD *)v2); v18 = -1; sub_410C00(&v17); result = 1; } else { v18 = -1; sub_410C00(&v17); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0052C8F0) -------------------------------------------------------- char __thiscall sub_52C8F0(int this, int a2, int a3) { char result; // al int v4; // esi _DWORD *v5; // ecx result = a2 - 1; v4 = this; if ( a2 == 1 ) { *(_BYTE *)(this + 5036) = result; DestroyWindow(*(HWND *)(this + 5016)); v5 = *(_DWORD **)(v4 + 296); *(_DWORD *)(v4 + 5016) = 0; result = sub_4A5110(v5); } return result; } //----- (0052C9C0) -------------------------------------------------------- int __cdecl sub_52C9C0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x13DCu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &HelpWin::`vftable'; *(_DWORD *)(v2 + 232) = &HelpWin::`vftable'; *(_DWORD *)(v2 + 5076) = 15; *(_DWORD *)(v2 + 5072) = 0; *(_BYTE *)(v2 + 5056) = 0; *(_BYTE *)(v2 + 5036) = 0; *(_BYTE *)(v2 + 4980) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C73F4: using guessed type void *HelpWin::`vftable'; // 9C7414: using guessed type void *HelpWin::`vftable'; //----- (0052CB70) -------------------------------------------------------- HWND __thiscall sub_52CB70(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx char *v3; // eax char v4; // cl bool v5; // cf int v6; // ecx int v7; // edx int v8; // eax void *v9; // eax int v10; // eax void (__thiscall *v11)(_DWORD *, int *); // edx unsigned int v12; // ecx unsigned int v14; // [esp-8h] [ebp-13Ch] int *v15; // [esp-4h] [ebp-138h] int v16; // [esp+Ch] [ebp-128h] int v17; // [esp+10h] [ebp-124h] int v18; // [esp+14h] [ebp-120h] int v19; // [esp+18h] [ebp-11Ch] unsigned int v20; // [esp+1Ch] [ebp-118h] int v21; // [esp+20h] [ebp-114h] int v22; // [esp+24h] [ebp-110h] int v23; // [esp+28h] [ebp-10Ch] int v24; // [esp+2Ch] [ebp-108h] char v25; // [esp+30h] [ebp-104h] char v26; // [esp+31h] [ebp-103h] v1 = this; v2 = 0; if ( !this[1268] ) { v25 = 0; memset(&v26, 0, 0xFFu); if ( *((_BYTE *)v1 + 4980) ) { v3 = (char *)(v1 + 477); do { v4 = *v3; v3[&v25 - (char *)(v1 + 477)] = *v3; ++v3; } while ( v4 ); sub_4018E0(v1 + 1264, &v25, strlen(&v25)); } } sub_4A5240((_DWORD *)v1[74]); sub_4A5200((_DWORD *)v1[74]); v5 = v1[1269] < 0x10u; v6 = v1[1256]; v7 = v1[1257]; v21 = v1[1255]; v8 = v1[1258]; v22 = v6; v23 = v7; v24 = v8; if ( v5 ) v9 = v1 + 1264; else v9 = (void *)v1[1264]; v15 = v1; v10 = sub_427200((char)hWnd, dword_ACDC7C, v9, (int)&v21); v15 = (int *)-1; v14 = 0; v1[1254] = v10; sub_4014F0(v1 + 1264, v14, (unsigned int)v15); v11 = *(void (__thiscall **)(_DWORD *, int *))(*v1 + 208); v15 = &v16; *((_BYTE *)v1 + 5036) = 1; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v11(v1, v15); v12 = v19 - v18; v20 = 0; if ( xRight >= (unsigned int)(v17 - v16) && dword_AC2F78 >= v12 ) { v2 = (unsigned int)(xRight - (v17 - v16)) >> 1; v20 = (dword_AC2F78 - v12) >> 1; } (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 172))(v1, v2); (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 176))(v1, v20); return SetFocus(hWnd); } //----- (0052CD40) -------------------------------------------------------- _DWORD *__thiscall sub_52CD40(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &HelpWin::`vftable'; *((_DWORD *)this + 58) = &HelpWin::`vftable'; if ( *((_DWORD *)this + 1269) >= 0x10u ) operator delete(*((void **)this + 1264)); v2[1269] = 15; v2[1268] = 0; *((_BYTE *)v2 + 5056) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C73F4: using guessed type void *HelpWin::`vftable'; // 9C7414: using guessed type void *HelpWin::`vftable'; //----- (0052CE20) -------------------------------------------------------- int __thiscall sub_52CE20(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*this[86] + 464))(a2); return result; } //----- (0052CE40) -------------------------------------------------------- int __thiscall sub_52CE40(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (0052CE60) -------------------------------------------------------- int __thiscall sub_52CE60(_DWORD **this) { return (*(int (**)(void))(*this[86] + 480))(); } //----- (0052CE70) -------------------------------------------------------- int __thiscall sub_52CE70(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v1[248] = 0; sub_466AF0(v2, 0, 0, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (0052CEA0) -------------------------------------------------------- int __thiscall sub_52CEA0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; if ( this[88] ) { v2 = (_DWORD *)this[87]; v1[248] = 1; sub_466AF0(v2, 1, 0, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (0052CEE0) -------------------------------------------------------- int __thiscall sub_52CEE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; if ( this[88] ) { v2 = (_DWORD *)this[87]; v1[248] = 2; sub_466AF0(v2, 2, 0, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (0052CF20) -------------------------------------------------------- int __thiscall sub_52CF20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; if ( this[88] ) { v2 = (_DWORD *)this[87]; v1[248] = 3; sub_466AF0(v2, 3, 0, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (0052CF70) -------------------------------------------------------- char __thiscall sub_52CF70(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[87], v2[88]); return v3; } //----- (0052CFA0) -------------------------------------------------------- char sub_52CFA0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "HolyPromis"); return (char)v0; } //----- (0052D000) -------------------------------------------------------- int __thiscall sub_52D000(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (0052D060) -------------------------------------------------------- int __thiscall sub_52D060(_BYTE *this, int a2) { int result; // eax result = (int)this; this[988] = 0; if ( this == *(_BYTE **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0052D090) -------------------------------------------------------- int __thiscall sub_52D090(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(LONG, LONG))(*v2[93] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v2[93]); result = (*(int (__stdcall **)(signed int))(*v2[93] + 240))(1); *((_BYTE *)v2 + 988) = 0; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0052D100) -------------------------------------------------------- int __thiscall sub_52D100(_BYTE *this, int a2) { int result; // eax result = (int)this; this[988] = 1; if ( this == *(_BYTE **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0052D130) -------------------------------------------------------- int __thiscall sub_52D130(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(LONG, LONG))(*v2[93] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v2[93]); result = (*(int (__stdcall **)(signed int))(*v2[93] + 240))(1); *((_BYTE *)v2 + 988) = 1; return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0052D1B0) -------------------------------------------------------- char __thiscall sub_52D1B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // ecx _DWORD *v4; // esi _DWORD **v5; // ecx _DWORD *v7; // [esp+4h] [ebp-20h] char v8; // [esp+8h] [ebp-1Ch] char v9; // [esp+1Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = (_DWORD *)this[86]; if ( v3 ) { if ( *((_BYTE *)v1 + 988) ) { v2 = (_DWORD *)sub_464F50(v3); if ( (signed int)v2 < 0 ) return (char)v2; LOBYTE(v2) = sub_464B60((_DWORD *)v1[86], (unsigned int)v2, &v7); } else { v2 = (_DWORD *)sub_464F50(v2); if ( (signed int)v2 < 0 ) return (char)v2; LOBYTE(v2) = sub_464B60((_DWORD *)v1[87], (unsigned int)v2, &v7); } if ( (_BYTE)v2 ) { v4 = v7; if ( v7 ) { sub_4169E0(v7, (int)&v8); *(_DWORD *)dword_ACEB0C = *v4; dword_ACEB10 = v4[1]; dword_ACEB14 = v4[2]; dword_ACEB18 = v4[3]; dword_ACEB1C = v4[4]; v5 = (_DWORD **)v1[74]; v9 = 0; LOBYTE(v2) = sub_4A7840(v5, &v8); } } } } return (char)v2; } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; //----- (0052D2B0) -------------------------------------------------------- char __thiscall sub_52D2B0(_DWORD *this) { int v1; // eax int v2; // ecx v2 = this[74]; v1 = *(_DWORD *)(v2 + 892); if ( v1 ) LOBYTE(v1) = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 892)); return v1; } //----- (0052D2C0) -------------------------------------------------------- char __thiscall sub_52D2C0(_DWORD *this, int a2) { int v2; // esi int v3; // edi int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax int v12; // eax volatile LONG *v13; // edi volatile LONG v14; // ebx const CHAR *v15; // eax volatile LONG **v16; // edi volatile LONG *v17; // ecx int v18; // edi int v19; // ebx int v20; // eax volatile LONG *v21; // edi volatile LONG v22; // ebx const CHAR *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // ecx int v26; // edi int v27; // ebx int v28; // eax volatile LONG *v29; // edi volatile LONG v30; // ebx const CHAR *v31; // eax volatile LONG *v32; // eax void (__thiscall ***v33)(_DWORD, signed int); // esi int v34[5]; // [esp+4Ch] [ebp-30h] int v35; // [esp+60h] [ebp-1Ch] int v36; // [esp+64h] [ebp-18h] int v37; // [esp+68h] [ebp-14h] int v38; // [esp+6Ch] [ebp-10h] int v39; // [esp+78h] [ebp-4h] v2 = (int)this; v38 = 0; v3 = a2; this[74] = a2; v4 = dword_BA6BA0; v39 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\AddFriendList.nif"); sub_8F66B0(v5, (int)&v38, v4); if ( !v38 ) return 0; v6 = sub_8FB140(v38, (int)"Panel01", (int)&v37, (int)&a2, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v6, 0, v3, (int)"HolyPromiseAddWin", 0) ) goto LABEL_23; v9 = (volatile LONG *)sub_43D0D0(0x13u); if ( v9 ) v10 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&a2, v9); else v10 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&a2, 0); v11 = sub_8F3EB0(v37 + 2, a2 + 2, (int)v10, v2, 0, 0); if ( v11 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); if ( !sub_8F71E0(v38, (int)"TextBox", &v37, &a2, &v35, &v36) ) { LABEL_23: v7 = (void (__thiscall ***)(_DWORD, signed int))v38; v39 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } v12 = sub_421050(0); v13 = sub_8F4A20(v37, a2 - 2, v35, v36, v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v13 + 468))(v13, &dword_AA8D98); v14 = *v13; v15 = sub_40C190(-488064040); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v14 + 472))(v13, v15); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v16 = sub_8FB140(v38, (int)"BtnNor02", (int)&v37, (int)&a2, 0); sub_8FB650(v16, v38, (int)"BtnClick02"); sub_8FB650(v16, v38, (int)"BtnOver02"); sub_8FE0F0(v37, a2, (int)v16, v2, 0, 0, 0); v17 = v16[9]; v18 = *(_DWORD *)(*v17 + 24); v19 = *(_DWORD *)(*v17 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v37, a2 + 1, v19, v18, v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40C190(-1476601372); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v24 = sub_8FB140(v38, (int)"BtnNor03", (int)&v37, (int)&a2, 0); sub_8FB650(v24, v38, (int)"BtnClick03"); sub_8FB650(v24, v38, (int)"BtnOver03"); sub_8FE0F0(v37, a2, (int)v24, v2, 1, 0, 0); v25 = v24[9]; v26 = *(_DWORD *)(*v25 + 24); v27 = *(_DWORD *)(*v25 + 20); v28 = sub_421050(0); v29 = sub_8F4A20(v37, a2 + 1, v27, v26, v28, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); v30 = *v29; v31 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v30 + 472))(v29, v31); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); sub_456260(v34); LOBYTE(v39) = 1; sub_456000(v34, 0, 0); sub_455FF0(v34, v2); sub_456380(v34, v38); v32 = sub_4565F0(v34, (int)"InputBox", 16, 1342177280, 0, 1); *(_DWORD *)(v2 + 344) = v32; (*(void (__thiscall **)(volatile LONG *, void *))(*v32 + 460))(v32, &unk_9C764B); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v2 + 344) + 300) + 60))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v39) = 0; sub_4562E0(v34); v39 = -1; if ( v38 ) { v33 = (void (__thiscall ***)(_DWORD, signed int))v38; if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v33 ) (**v33)(v33, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0052D710) -------------------------------------------------------- char __thiscall sub_52D710(_DWORD **this) { _DWORD **v1; // edi const char *v2; // eax int *v3; // eax int v5; // [esp+8h] [ebp-54h] int v6; // [esp+Ch] [ebp-50h] int v7; // [esp+10h] [ebp-4Ch] int v8; // [esp+14h] [ebp-48h] int v9; // [esp+18h] [ebp-44h] int v10; // [esp+1Ch] [ebp-40h] int v11; // [esp+20h] [ebp-3Ch] int v12; // [esp+24h] [ebp-38h] int v13; // [esp+28h] [ebp-34h] int v14; // [esp+2Ch] [ebp-30h] char v15[4]; // [esp+30h] [ebp-2Ch] int v16; // [esp+34h] [ebp-28h] int v17; // [esp+38h] [ebp-24h] int v18; // [esp+3Ch] [ebp-20h] int v19; // [esp+40h] [ebp-1Ch] char v20[4]; // [esp+44h] [ebp-18h] int v21; // [esp+48h] [ebp-14h] int v22; // [esp+4Ch] [ebp-10h] int v23; // [esp+50h] [ebp-Ch] int v24; // [esp+54h] [ebp-8h] v1 = this; v2 = (const char *)(*(int (**)(void))(*this[86] + 452))(); v24 = 0; v23 = 0; v22 = 0; v21 = 0; *(_DWORD *)v20 = 0; strncpy(v20, v2, 0x14u); v19 = 0; v18 = 0; v17 = 0; v16 = 0; *(_DWORD *)v15 = 0; strncpy(v15, &byte_9C7666, 0x14u); if ( *(_DWORD *)v20 != *(_DWORD *)v15 || v21 != v16 || v22 != v17 || v23 != v18 || v24 != v19 ) { v9 = 0; v8 = 0; v7 = 0; v6 = 0; v5 = 0; v14 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = 0; v3 = (int *)sub_680810(byte_AD9238); v5 = *v3; v6 = v3[1]; v7 = v3[2]; v8 = v3[3]; v9 = v3[4]; v12 = v22; v10 = *(_DWORD *)v20; v11 = v21; v13 = v23; v14 = v24; sub_6F36A0(&off_AB7F2C, 37, 1, &v5, 0x28u); } (*(void (__stdcall **)(void *))(*v1[86] + 460))(&unk_9C7667); return sub_4A5410((_DWORD **)v1[74]); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0052D850) -------------------------------------------------------- char __thiscall sub_52D850(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char result; // al v3 = this; if ( !a2 ) return sub_52D710(this); result = a2 - 1; if ( a2 == 1 ) { (*(void (__stdcall **)(void *))(*this[86] + 460))(&unk_9C766E); sub_4A5410((_DWORD **)v3[74]); result = sub_8F86A0(&unk_BA6B10, v3); } return result; } //----- (0052D8A0) -------------------------------------------------------- char __thiscall sub_52D8A0(_DWORD **this, int a2, int a3) { return sub_52D710(this); } //----- (0052D8B0) -------------------------------------------------------- char __thiscall sub_52D8B0(_DWORD *this, int a2, char a3) { int v3; // eax _DWORD *v4; // esi int v5; // ecx int v6; // edx int v7; // eax int v8; // ebx CHAR *v9; // eax CHAR *v10; // eax void *v11; // eax unsigned int v12; // eax int v13; // ST14_4 int v14; // ST10_4 int v15; // ST0C_4 char *v16; // eax char *v17; // eax _DWORD *v18; // ecx CHAR *v19; // eax CHAR *v20; // eax CHAR *v21; // ST14_4 unsigned int v22; // eax int v23; // ST14_4 int v24; // ST10_4 int v25; // ST0C_4 char *v26; // eax char *v27; // eax int v29; // [esp+8h] [ebp-3Ch] int v30; // [esp+Ch] [ebp-38h] int v31; // [esp+10h] [ebp-34h] int v32; // [esp+14h] [ebp-30h] int v33; // [esp+18h] [ebp-2Ch] char v34; // [esp+1Ch] [ebp-28h] char v35; // [esp+20h] [ebp-24h] char v36[4]; // [esp+2Ch] [ebp-18h] int v37; // [esp+30h] [ebp-14h] int v38; // [esp+34h] [ebp-10h] int v39; // [esp+38h] [ebp-Ch] int v40; // [esp+3Ch] [ebp-8h] LOBYTE(v3) = 0; v4 = this; if ( a2 ) { if ( this[87] ) { v40 = 0; v39 = 0; v38 = 0; v37 = 0; *(_DWORD *)v36 = 0; strncpy(v36, &byte_9C7689, 0x14u); v3 = *(_DWORD *)a2; if ( *(_DWORD *)a2 != *(_DWORD *)v36 || *(_DWORD *)(a2 + 4) != v37 || *(_DWORD *)(a2 + 8) != v38 || *(_DWORD *)(a2 + 12) != v39 || *(_DWORD *)(a2 + 16) != v40 ) { v5 = *(_DWORD *)(a2 + 8); v6 = *(_DWORD *)(a2 + 12); v29 = *(_DWORD *)a2; v30 = *(_DWORD *)(a2 + 4); v7 = *(_DWORD *)(a2 + 16); v31 = v5; v32 = v6; v33 = v7; v34 = 0; if ( a3 ) { v8 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v4[86], &v29); if ( *(_BYTE *)(a2 + 20) & 1 ) { v9 = (CHAR *)sub_40C190(-1778781710); sub_4661A0((_DWORD *)v4[86], v8, 1, v9); sub_4661A0((_DWORD *)v4[86], v8, 3, &unk_9C768A); sub_464BE0((_DWORD *)v4[86], v8, 255, 255, 0); } else { v10 = (CHAR *)sub_40C190(-151046076); sub_4661A0((_DWORD *)v4[86], v8, 1, v10); sub_464BE0((_DWORD *)v4[86], v8, 200, 200, 200); if ( *(_DWORD *)(a2 + 20) & 0xFFE ) { v12 = *(_DWORD *)(a2 + 20); v13 = (v12 >> 16) & 0x1F; v14 = (unsigned __int16)*(_DWORD *)(a2 + 20) >> 12; v15 = (v12 >> 1) & 0x7FF; v16 = (char *)sub_40A910(1296251015); sub_517AD0(&v35, 0x20u, v16, v15, v14, v13); v11 = &v35; } else { v11 = (void *)sub_40C190(-637451970); } sub_4661A0((_DWORD *)v4[86], v8, 3, v11); } v17 = sub_7549E0("%d", *(unsigned __int8 *)(a2 + 24)); sub_4661A0((_DWORD *)v4[86], v8, 2, v17); sub_464B20((_DWORD *)v4[86], v8, a2); v18 = (_DWORD *)v4[86]; } else { v8 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v4[87], &v29); if ( *(_BYTE *)(a2 + 20) & 1 ) { v19 = (CHAR *)sub_40C190(-1778781710); sub_4661A0((_DWORD *)v4[87], v8, 1, v19); sub_4661A0((_DWORD *)v4[87], v8, 3, &unk_9C768B); sub_464BE0((_DWORD *)v4[87], v8, 255, 255, 0); } else { v20 = (CHAR *)sub_40C190(-151046076); sub_4661A0((_DWORD *)v4[87], v8, 1, v20); sub_464BE0((_DWORD *)v4[87], v8, 200, 200, 200); if ( *(_DWORD *)(a2 + 20) & 0xFFE ) { v22 = *(_DWORD *)(a2 + 20); v23 = (v22 >> 16) & 0x1F; v24 = (unsigned __int16)*(_DWORD *)(a2 + 20) >> 12; v25 = (v22 >> 1) & 0x7FF; v26 = (char *)sub_40A910(1296251015); sub_517AD0(&v35, 0x20u, v26, v25, v24, v23); sub_4661A0((_DWORD *)v4[87], v8, 3, &v35); } else { v21 = (CHAR *)sub_40C190(-637451970); sub_4661A0((_DWORD *)v4[87], v8, 3, v21); } } v27 = sub_7549E0("%d", *(unsigned __int8 *)(a2 + 24)); sub_4661A0((_DWORD *)v4[87], v8, 2, v27); sub_464B20((_DWORD *)v4[87], v8, a2); v18 = (_DWORD *)v4[87]; } LOBYTE(v3) = sub_464BA0(v18, v8, 1); } } } return v3; } //----- (0052DBE0) -------------------------------------------------------- char __thiscall sub_52DBE0(_BYTE *this, _DWORD *a2, char a3) { _BYTE *v3; // esi int v4; // edx int v5; // eax int v6; // ecx int v7; // edx char *v8; // eax char *v9; // eax volatile LONG *v10; // eax int v11; // edx int v12; // eax char *v13; // eax char *v14; // eax volatile LONG *v15; // eax int v16; // edx int v17; // edx int v18; // eax int v19; // edx int v20; // eax char v22[4]; // [esp+8h] [ebp-1Ch] int v23; // [esp+Ch] [ebp-18h] int v24; // [esp+10h] [ebp-14h] int v25; // [esp+14h] [ebp-10h] int v26; // [esp+18h] [ebp-Ch] char v27; // [esp+1Ch] [ebp-8h] v3 = this; if ( sub_74FBD0(a2 + 5) ) { v4 = a2[1]; v5 = a2[2]; *(_DWORD *)v22 = *a2; v6 = a2[3]; v23 = v4; v7 = a2[4]; v24 = v5; v25 = v6; v26 = v7; v27 = 0; if ( a3 ) { v8 = (char *)sub_40C190(-1644971551); v9 = sub_7549E0(v8, v22); v10 = sub_462CA0(2, v9); if ( v3 ) v11 = (int)(v3 + 232); else v11 = 0; LOBYTE(v12) = (**((int (__stdcall ***)(int))v10 + 58))(v11); v3[989] = 1; } else { v13 = (char *)sub_40C190(-1882997267); v14 = sub_7549E0(v13, v22); v15 = sub_462CA0(2, v14); if ( v3 ) v16 = (int)(v3 + 232); else v16 = 0; (**((void (__stdcall ***)(int))v15 + 58))(v16); *((_DWORD *)v3 + 242) = *a2; *((_DWORD *)v3 + 243) = a2[1]; *((_DWORD *)v3 + 244) = a2[2]; v12 = a2[3]; *((_DWORD *)v3 + 245) = v12; *((_DWORD *)v3 + 246) = a2[4]; v3[990] = 1; } } else if ( a3 ) { LOBYTE(v12) = sub_6F36A0(&off_AB7F2C, 37, 6, 0, 0); } else { v17 = *a2; v18 = a2[1]; v24 = a2[2]; *(_DWORD *)v22 = v17; v19 = a2[3]; v23 = v18; v20 = a2[4]; v25 = v19; v26 = v20; LOBYTE(v12) = sub_6F36A0(&off_AB7F2C, 37, 10, v22, 0x14u); } return v12; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0052DD60) -------------------------------------------------------- char __thiscall sub_52DD60(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (0052DDC0) -------------------------------------------------------- void __thiscall sub_52DDC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx signed int v3; // eax signed int v4; // eax _DWORD *v5; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[87]; if ( v2 && v1[86] ) { if ( *((_BYTE *)v1 + 988) ) { v4 = sub_464F50((_DWORD *)v1[86]); if ( v4 >= 0 && sub_464B60((_DWORD *)v1[86], v4, &v5) && v5 ) sub_52DBE0(v1, v5, 1); } else { v3 = sub_464F50(v2); if ( v3 >= 0 && sub_464B60((_DWORD *)v1[87], v3, &v5) ) { if ( v5 ) sub_52DBE0(v1, v5, 0); } } } } //----- (0052DE50) -------------------------------------------------------- void __thiscall sub_52DE50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // ebx int v4; // edx int v5; // ecx int v6; // edx int v7; // ecx int v8; // edi CHAR *v9; // eax CHAR *v10; // eax CHAR *v11; // ST14_4 unsigned int v12; // eax int v13; // ST14_4 int v14; // ST10_4 int v15; // ST0C_4 char *v16; // eax char *v17; // eax int v18; // [esp+8h] [ebp-40h] int v19; // [esp+Ch] [ebp-3Ch] int v20; // [esp+10h] [ebp-38h] int v21; // [esp+14h] [ebp-34h] int v22; // [esp+18h] [ebp-30h] int v23; // [esp+1Ch] [ebp-2Ch] char v24; // [esp+20h] [ebp-28h] char v25; // [esp+24h] [ebp-24h] char v26[4]; // [esp+30h] [ebp-18h] int v27; // [esp+34h] [ebp-14h] int v28; // [esp+38h] [ebp-10h] int v29; // [esp+3Ch] [ebp-Ch] int v30; // [esp+40h] [ebp-8h] v1 = this; if ( this[87] ) { v2 = (_DWORD *)this[86]; if ( v2 ) { sub_466A50(v2); sub_466A50((_DWORD *)v1[87]); sub_52D8B0(v1, (int)(v1 + 94), 1); sub_465130((_DWORD *)v1[86]); v18 = 0; if ( v1[101] > 0 ) { v3 = (int)(v1 + 104); do { if ( v3 != 8 ) { if ( v1[87] ) { v30 = 0; v29 = 0; v28 = 0; v27 = 0; *(_DWORD *)v26 = 0; strncpy(v26, &byte_9C7689, 0x14u); if ( *(_DWORD *)(v3 - 8) != *(_DWORD *)v26 || *(_DWORD *)(v3 - 4) != v27 || *(_DWORD *)v3 != v28 || *(_DWORD *)(v3 + 4) != v29 || *(_DWORD *)(v3 + 8) != v30 ) { v4 = *(_DWORD *)(v3 - 4); v5 = *(_DWORD *)(v3 + 4); v19 = *(_DWORD *)(v3 - 8); v21 = *(_DWORD *)v3; v20 = v4; v6 = *(_DWORD *)(v3 + 8); v22 = v5; v7 = v1[87]; v23 = v6; v24 = 0; v8 = ((int (__thiscall *)(int, int *))loc_466CA0)(v7, &v19); if ( *(_BYTE *)(v3 + 12) & 1 ) { v9 = (CHAR *)sub_40C190(-1778781710); sub_4661A0((_DWORD *)v1[87], v8, 1, v9); sub_4661A0((_DWORD *)v1[87], v8, 3, &unk_9C768B); sub_464BE0((_DWORD *)v1[87], v8, 255, 255, 0); } else { v10 = (CHAR *)sub_40C190(-151046076); sub_4661A0((_DWORD *)v1[87], v8, 1, v10); sub_464BE0((_DWORD *)v1[87], v8, 200, 200, 200); if ( *(_DWORD *)(v3 + 12) & 0xFFE ) { v12 = *(_DWORD *)(v3 + 12); v13 = (v12 >> 16) & 0x1F; v14 = (unsigned __int16)*(_DWORD *)(v3 + 12) >> 12; v15 = (v12 >> 1) & 0x7FF; v16 = (char *)sub_40A910(1296251015); sub_517AD0(&v25, 0x20u, v16, v15, v14, v13); sub_4661A0((_DWORD *)v1[87], v8, 3, &v25); } else { v11 = (CHAR *)sub_40C190(-637451970); sub_4661A0((_DWORD *)v1[87], v8, 3, v11); } } v17 = sub_7549E0("%d", *(unsigned __int8 *)(v3 + 16)); sub_4661A0((_DWORD *)v1[87], v8, 2, v17); sub_464B20((_DWORD *)v1[87], v8, v3 - 8); sub_464BA0((_DWORD *)v1[87], v8, 1); } } } v3 += 26; ++v18; } while ( v18 < v1[101] ); } sub_466AF0((_DWORD *)v1[87], v1[248], 0, 0); sub_465130((_DWORD *)v1[87]); sub_4638F0((_DWORD *)v1[88], *(_DWORD *)(v1[87] + 336)); } } } //----- (0052E0E0) -------------------------------------------------------- void __thiscall sub_52E0E0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // [esp+4h] [ebp-4h] v3 = this; v5 = 0; v4 = sub_74FE00(this + 94, a2, &v5); if ( v4 ) { *v4 = *a3; v4[1] = a3[1]; v4[2] = a3[2]; v4[3] = a3[3]; v4[4] = a3[4]; sub_52DE50(v3); } } //----- (0052E140) -------------------------------------------------------- void __thiscall sub_52E140(int this, int a2, int a3) { int v3; // esi v3 = this; switch ( a2 ) { case 0: sub_52D060((_BYTE *)this, a3); break; case 1: sub_52D090((_DWORD **)this, a3); break; case 2: sub_52D100((_BYTE *)this, a3); break; case 3: sub_52D130((_DWORD **)this, a3); break; case 4: if ( this == *(_DWORD *)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(*(_DWORD **)(v3 + 296)); break; case 5: sub_52CE70((_DWORD *)this); break; case 6: sub_52CEA0((_DWORD *)this); break; case 7: sub_52CEE0((_DWORD *)this); break; case 8: sub_52CF20((_DWORD *)this); break; case 10: sub_52D000((_DWORD **)this, 0); break; case 11: sub_52D000((_DWORD **)this, 1); break; case 12: sub_52D000((_DWORD **)this, 5); break; case 13: sub_52D000((_DWORD **)this, 3); break; case 14: sub_52D000((_DWORD **)this, 2); break; case 16: sub_4A72D0(*(_DWORD **)(this + 296)); break; case 17: sub_52D1B0((_DWORD *)this); break; case 18: sub_52DDC0((_DWORD *)this); break; case 19: sub_52CFA0(); break; default: return; } } // AD01E8: using guessed type int dword_AD01E8; //----- (0052E2A0) -------------------------------------------------------- void __thiscall sub_52E2A0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_74FF80(this + 94, a2); sub_52DE50(v2); } //----- (0052E2D0) -------------------------------------------------------- void __thiscall sub_52E2D0(char *this, char a2, int a3, int a4, int a5, int a6) { char *v6; // esi v6 = this; sub_74FEA0(this + 376, &a2); sub_52DE50(v6); } //----- (0052E300) -------------------------------------------------------- void __thiscall sub_52E300(char *this) { char *v1; // esi v1 = this; sub_74FC80(this + 376); sub_52DE50(v1); } //----- (0052E320) -------------------------------------------------------- void __thiscall sub_52E320(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_750040(this + 94, a2); sub_52DE50(v2); } //----- (0052E350) -------------------------------------------------------- void __thiscall sub_52E350(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_74FFC0((int)(this + 94), a2); sub_52DE50(v2); } //----- (0052E380) -------------------------------------------------------- void __thiscall sub_52E380(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_7500C0(this + 94, a2); sub_52DE50(v2); } //----- (0052E3B0) -------------------------------------------------------- void __thiscall sub_52E3B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_750160(this + 94, a2); sub_52DE50(v2); } //----- (0052E3E0) -------------------------------------------------------- void __thiscall sub_52E3E0(_DWORD *this, _DWORD *a2, char a3) { _DWORD *v3; // esi v3 = this; sub_750200(this + 94, a2, a3); sub_52DE50(v3); } //----- (0052E410) -------------------------------------------------------- int __cdecl sub_52E410(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &HolyPromiseAddWin::`vftable'; *(_DWORD *)(v2 + 232) = &HolyPromiseAddWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C7B3C: using guessed type void *HolyPromiseAddWin::`vftable'; // 9C7B5C: using guessed type void *HolyPromiseAddWin::`vftable'; //----- (0052E550) -------------------------------------------------------- void __thiscall sub_52E550(int this, int a2, _DWORD *a3, int a4) { int v4; // esi int v5; // edx int v6; // ecx int v7; // eax int v8; // ecx int v9; // eax int v10; // eax int v11; // edx int v12; // ecx int v13; // eax _DWORD *v14; // eax int v15; // edx int v16; // ecx int v17; // eax int v18; // edx _DWORD *v19; // edx _DWORD *v20; // [esp+4h] [ebp-4Ch] _DWORD *v21; // [esp+8h] [ebp-48h] int v22; // [esp+Ch] [ebp-44h] int v23; // [esp+10h] [ebp-40h] int v24; // [esp+14h] [ebp-3Ch] int v25; // [esp+18h] [ebp-38h] int v26; // [esp+1Ch] [ebp-34h] int v27; // [esp+20h] [ebp-30h] int v28; // [esp+24h] [ebp-2Ch] int v29; // [esp+28h] [ebp-28h] int v30; // [esp+2Ch] [ebp-24h] int v31; // [esp+30h] [ebp-20h] int v32; // [esp+34h] [ebp-1Ch] int v33; // [esp+38h] [ebp-18h] int v34; // [esp+3Ch] [ebp-14h] int v35; // [esp+40h] [ebp-10h] int v36; // [esp+44h] [ebp-Ch] char v37; // [esp+48h] [ebp-8h] v4 = this; switch ( a2 ) { case 27: if ( !a3 ) return; if ( *a3 ) { if ( *a3 != 1 ) return; if ( *(_BYTE *)(this + 757) ) { LABEL_10: *(_BYTE *)(v4 + 757) = 0; return; } if ( !*(_BYTE *)(this + 758) ) { sub_530820(&v27); v15 = *(_DWORD *)(v4 + 716); v16 = *(_DWORD *)(v4 + 724); v33 = *(_DWORD *)(v4 + 720); v17 = *(_DWORD *)(v4 + 732); v32 = v15; v18 = *(_DWORD *)(v4 + 728); v34 = v16; v36 = v17; v35 = v18; v19 = *(_DWORD **)(a4 + 8); v37 = 0; v21 = v19; sub_530910((_DWORD *)(v4 + 764), &v20, &v21); v27 = v20[4]; v28 = v20[5]; v29 = v20[6]; v30 = v20[7]; v31 = v20[8]; sub_6F36A0(&off_AB7F2C, 37, 5, &v27, 0x29u); return; } } else { if ( *(_BYTE *)(this + 757) ) { sub_6F36A0(&off_AB7F2C, 37, 6, 0, 0); goto LABEL_10; } if ( !*(_BYTE *)(this + 758) ) { sub_530820(&v27); v10 = *(_DWORD *)(v4 + 716); v11 = *(_DWORD *)(v4 + 724); v33 = *(_DWORD *)(v4 + 720); v12 = *(_DWORD *)(v4 + 732); v32 = v10; v13 = *(_DWORD *)(v4 + 728); v34 = v11; v36 = v12; v35 = v13; v14 = *(_DWORD **)(a4 + 8); v37 = 1; v20 = v14; sub_530910((_DWORD *)(v4 + 764), &v21, &v20); v27 = v21[4]; v28 = v21[5]; v29 = v21[6]; v30 = v21[7]; v31 = v21[8]; sub_6F36A0(&off_AB7F2C, 37, 5, &v27, 0x29u); return; } v5 = *(_DWORD *)(this + 744); v6 = *(_DWORD *)(this + 740); v7 = *(_DWORD *)(v4 + 736); v24 = v5; v23 = v6; v8 = *(_DWORD *)(v4 + 752); v22 = v7; v9 = *(_DWORD *)(v4 + 748); v26 = v8; v25 = v9; sub_6F36A0(&off_AB7F2C, 37, 10, &v22, 0x14u); } *(_BYTE *)(v4 + 758) = 0; return; case 69: sub_52D1B0((_DWORD *)(this - 232)); break; case 70: sub_52DDC0((_DWORD *)(this - 232)); break; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0052E7A0) -------------------------------------------------------- int __thiscall sub_52E7A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // esi int v12; // ebx _DWORD *v13; // eax int result; // eax char v15[4]; // [esp+Ch] [ebp-20h] int v16; // [esp+10h] [ebp-1Ch] int v17; // [esp+14h] [ebp-18h] int v18; // [esp+18h] [ebp-14h] int v19; // [esp+1Ch] [ebp-10h] int v20; // [esp+20h] [ebp-Ch] int v21; // [esp+24h] [ebp-8h] v11 = this; this[236] = a6; this[233] = a3; this[232] = a2; this[234] = a4; this[235] = a5; this[237] = a7; this[238] = a8; this[239] = a9; this[240] = a10; v17 = a3; this[241] = a11; v12 = this[253]; v16 = a2; *(_DWORD *)v15 = v12; v18 = a4; v19 = a5; v20 = a6; v13 = sub_530BB0(this + 249, v15); result = sub_530ED0(v11 + 249, (int)&v21, v13, 0); ++v11[253]; return result; } //----- (0052E850) -------------------------------------------------------- int __thiscall sub_52E850(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax int result; // eax char v5; // [esp+4h] [ebp-4h] v1 = this; v2 = (int *)this[250]; v3 = *v2; if ( (int *)*v2 != v2 ) { do v3 = *sub_530C40(v1 + 249, (int *)&v5, v3); while ( v3 != v1[250] ); } result = sub_530FB0(v1 + 249); v1[253] = 0; return result; } //----- (0052E8A0) -------------------------------------------------------- LONG __thiscall sub_52E8A0(_DWORD *this) { char *v1; // esi int v2; // edi _DWORD *v3; // eax _DWORD *v4; // ST04_4 char v6; // [esp+Ch] [ebp-18h] _DWORD *v7; // [esp+10h] [ebp-14h] _DWORD *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = (char *)this; v8 = this; *this = &HolyPromiseWin::`vftable'; this[58] = &HolyPromiseWin::`vftable'; v9 = 0; v2 = (int)(this + 249); v7 = this + 249; v3 = (_DWORD *)this[250]; v4 = (_DWORD *)*v3; LOBYTE(v9) = 2; sub_531000(this + 249, (int *)&v6, v4, v3); operator delete(*(void **)(v2 + 4)); LOBYTE(v9) = 0; sub_7502F0(v1 + 376); v9 = -1; return sub_8F10F0(v1); } // 9C7D80: using guessed type void *HolyPromiseWin::`vftable'; // 9C7D9C: using guessed type void *HolyPromiseWin::`vftable'; //----- (0052E940) -------------------------------------------------------- char *__thiscall sub_52E940(char *this) { char *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST0C_4 _DWORD *v4; // ST00_4 void **v6; // [esp+10h] [ebp-20h] char *v7; // [esp+1Ch] [ebp-14h] char *v8; // [esp+20h] [ebp-10h] int v9; // [esp+2Ch] [ebp-4h] v1 = this; v7 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v9 = 0; *(_DWORD *)v1 = &HolyPromiseWin::`vftable'; *((_DWORD *)v1 + 58) = &HolyPromiseWin::`vftable'; sub_7502B0(v1 + 376); *((_DWORD *)v1 + 236) = 0; *((_DWORD *)v1 + 235) = 0; *((_DWORD *)v1 + 234) = 0; *((_DWORD *)v1 + 233) = 0; *((_DWORD *)v1 + 232) = 0; *((_DWORD *)v1 + 241) = 0; *((_DWORD *)v1 + 240) = 0; *((_DWORD *)v1 + 239) = 0; *((_DWORD *)v1 + 238) = 0; *((_DWORD *)v1 + 237) = 0; *((_DWORD *)v1 + 246) = 0; *((_DWORD *)v1 + 245) = 0; *((_DWORD *)v1 + 244) = 0; *((_DWORD *)v1 + 243) = 0; *((_DWORD *)v1 + 242) = 0; LOBYTE(v9) = 1; *((_DWORD *)v1 + 251) = 0; v2 = operator new(0x28u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v8); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 250) = v2; *v2 = v2; *(_DWORD *)(*((_DWORD *)v1 + 250) + 4) = *((_DWORD *)v1 + 250); *(_DWORD *)(*((_DWORD *)v1 + 250) + 8) = *((_DWORD *)v1 + 250); *(_BYTE *)(*((_DWORD *)v1 + 250) + 36) = 1; *(_BYTE *)(*((_DWORD *)v1 + 250) + 37) = 1; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 90) = 0; *((_DWORD *)v1 + 91) = 0; *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 248) = 0; v1[988] = 0; memset(v1 + 376, 0, 0x228u); *((_DWORD *)v1 + 236) = 0; *((_DWORD *)v1 + 235) = 0; *((_DWORD *)v1 + 234) = 0; *((_DWORD *)v1 + 233) = 0; *((_DWORD *)v1 + 232) = 0; strncpy(v1 + 928, &byte_9C766F, 0x14u); v3 = v1 + 948; v3[4] = 0; v3[3] = 0; v3[2] = 0; v3[1] = 0; *v3 = 0; strncpy(v1 + 948, &byte_9C7676, 0x14u); v4 = v1 + 968; v4[4] = 0; v4[3] = 0; v4[2] = 0; v4[1] = 0; *v4 = 0; strncpy(v1 + 968, &byte_9C7677, 0x14u); *(_WORD *)(v1 + 989) = 0; *((_DWORD *)v1 + 253) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9C7D80: using guessed type void *HolyPromiseWin::`vftable'; // 9C7D9C: using guessed type void *HolyPromiseWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0052EB30) -------------------------------------------------------- volatile LONG *__cdecl sub_52EB30(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x3F8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_52E940((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0052EC60) -------------------------------------------------------- char __thiscall sub_52EC60(_DWORD *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax int v24; // eax volatile LONG *v25; // eax volatile LONG v26; // edx const CHAR *v27; // eax int v28; // eax volatile LONG *v29; // eax volatile LONG v30; // edx const CHAR *v31; // eax volatile LONG *v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // eax int v37; // eax volatile LONG *v38; // eax volatile LONG v39; // edx const CHAR *v40; // eax volatile LONG *v41; // eax volatile LONG *v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax volatile LONG **v45; // eax int v46; // eax int v47; // eax volatile LONG **v48; // edx int v49; // eax volatile LONG *v50; // eax volatile LONG v51; // edx const CHAR *v52; // eax volatile LONG *v53; // ecx volatile LONG **v54; // eax int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx const CHAR *v58; // eax volatile LONG *v59; // ecx volatile LONG **v60; // eax int v61; // eax volatile LONG *v62; // eax volatile LONG v63; // edx const CHAR *v64; // eax volatile LONG *v65; // ecx volatile LONG **v66; // eax int v67; // eax volatile LONG *v68; // eax volatile LONG v69; // edx const CHAR *v70; // eax const char *v71; // eax int v72; // eax volatile LONG **v73; // edx int v74; // eax volatile LONG *v75; // eax volatile LONG v76; // edx const CHAR *v77; // eax volatile LONG *v78; // ecx volatile LONG **v79; // eax int v80; // eax volatile LONG *v81; // eax volatile LONG v82; // edx const CHAR *v83; // eax const char *v84; // eax int v85; // eax volatile LONG **v86; // edx int v87; // eax volatile LONG *v88; // eax volatile LONG v89; // edx const CHAR *v90; // eax volatile LONG **v91; // eax const char *v92; // eax const char *v93; // eax const char *v94; // eax const char *v95; // eax const char *v96; // eax volatile LONG *v97; // edi const char *v98; // eax volatile LONG *v99; // ecx int v100; // edi int v101; // ebx int v102; // eax volatile LONG *v103; // edi volatile LONG v104; // ebx const CHAR *v105; // eax int v106; // eax int v107; // edi int v108; // ebx int v109; // eax volatile LONG *v110; // edi volatile LONG v111; // ebx const CHAR *v112; // eax volatile LONG *v113; // ecx int v114; // edi int v115; // ebx int v116; // eax volatile LONG *v117; // edi volatile LONG v118; // ebx const CHAR *v119; // eax int v120; // eax int v121; // edi int v122; // ebx int v123; // eax volatile LONG *v124; // edi volatile LONG v125; // ebx const CHAR *v126; // eax volatile LONG *v127; // ecx int v128; // edi int v129; // ebx int v130; // eax volatile LONG *v131; // edi volatile LONG v132; // ebx const CHAR *v133; // eax int v134; // eax int v135; // edi int v136; // ebx int v137; // eax volatile LONG *v138; // edi volatile LONG v139; // ebx const CHAR *v140; // eax int v141; // eax volatile LONG *v142; // eax const CHAR *v143; // eax void **v144; // edi const CHAR *v145; // eax void **v146; // edi void (__thiscall ***v147)(_DWORD, signed int); // esi int v148; // [esp+130h] [ebp-90h] int v149; // [esp+134h] [ebp-8Ch] int v150; // [esp+138h] [ebp-88h] char v151; // [esp+140h] [ebp-80h] int v152; // [esp+144h] [ebp-7Ch] int v153; // [esp+148h] [ebp-78h] int v154; // [esp+14Ch] [ebp-74h] int v155; // [esp+150h] [ebp-70h] int v156; // [esp+154h] [ebp-6Ch] int v157; // [esp+158h] [ebp-68h] int v158; // [esp+15Ch] [ebp-64h] char v159; // [esp+164h] [ebp-5Ch] int v160; // [esp+168h] [ebp-58h] int v161; // [esp+16Ch] [ebp-54h] int v162; // [esp+170h] [ebp-50h] int v163; // [esp+174h] [ebp-4Ch] int v164; // [esp+178h] [ebp-48h] int v165; // [esp+17Ch] [ebp-44h] int v166; // [esp+180h] [ebp-40h] int v167; // [esp+184h] [ebp-3Ch] int v168; // [esp+188h] [ebp-38h] volatile LONG *v169; // [esp+18Ch] [ebp-34h] volatile LONG **v170; // [esp+190h] [ebp-30h] void *v171; // [esp+194h] [ebp-2Ch] int v172; // [esp+1A4h] [ebp-1Ch] unsigned int v173; // [esp+1A8h] [ebp-18h] int v174; // [esp+1BCh] [ebp-4h] v2 = (int)this; v168 = 0; this[74] = a2; v3 = dword_BA6BA0; v174 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\HolyPromis.nif"); sub_8F66B0(v4, (int)&v168, v3); if ( !v168 ) return 0; v5 = sub_8FB140(v168, (int)"Frame", (int)&v167, (int)&v166, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"HolyPromisWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v168; v174 = -1; if ( v168 ) { v7 = InterlockedDecrement((volatile LONG *)(v168 + 4)); goto LABEL_7; } return 0; } v9 = v167; v10 = v166; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v168, (int)"Theme", (int)&v167, (int)&v166, v11); else v12 = sub_8FB140(v168, (int)"Theme", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v12, v2, 0, 0); v13 = sub_8FB140(v168, (int)"IconSlot", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v13, v2, 0, 0); if ( !sub_8F71E0(v168, (int)"WinTitle", &v167, &v166, &v165, &v164) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v168; v174 = -1; if ( v168 ) { v7 = InterlockedDecrement((volatile LONG *)(v168 + 4)); LABEL_7: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v14 = sub_421050(7); v15 = sub_8F4A20(v167 - v9, v166 - v10, v165, v164, v14, v2, 0, 0); v16 = *v15; v170 = (volatile LONG **)v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 1); (*((void (__stdcall **)(int *))*v170 + 117))(&dword_AA8D98); v169 = *v170; v17 = sub_40C190(-481277631); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v17); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"ClsNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"ClsClick"); sub_8FB650(v170, v168, (int)"ClsOver"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 4, 0, 0); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v168 + 72))("HelpLinkNor") ) { v170 = sub_8FB140(v168, (int)"HelpLinkNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"HelpLinkClick"); sub_8FB650(v170, v168, (int)"HelpLinkOver"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 19, 0, 0); } v18 = sub_8FB140(v168, (int)"Plane", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v18, v2, 0, 0); v19 = sub_8FB140(v168, (int)"Promis01", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v19, v2, 0, 0); v20 = sub_421050(7); v21 = sub_8F4A20(v167 - v9 + 130, v166 - v10, v165, v164, v20, v2, 0, 0); v22 = *v21; v170 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); (*((void (__stdcall **)(int *))*v170 + 117))(&dword_AA8D98); v169 = *v170; v23 = sub_40C190(-2086373481); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v23); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); sub_8FB140(v168, (int)"Text01", (int)&v167, (int)&v166, 0); v24 = sub_421050(9); v25 = sub_8F4A20(v167 - v9, v166 - v10, v165, v164, v24, v2, 0, 0); v26 = *v25; v170 = (volatile LONG **)v25; (*(void (__thiscall **)(volatile LONG *, signed int))(v26 + 488))(v25, 5); v169 = *v170; v27 = sub_40C190(-196330948); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v27); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); sub_8FB140(v168, (int)"Category", (int)&v167, (int)&v166, 0); v28 = sub_421050(9); v29 = sub_8F4A20(v167 - v9, v166 - v10, v165, v164, v28, v2, 0, 0); v30 = *v29; v170 = (volatile LONG **)v29; (*(void (__thiscall **)(volatile LONG *, signed int))(v30 + 488))(v29, 5); v169 = *v170; v31 = sub_4090F0(776608523); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v31); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v148 = 0; v149 = 0; v150 = 0; v151 = 0; v152 = 0; v153 = 0; v154 = 0; v155 = 0; LOBYTE(v174) = 1; v32 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v148, 1); *v32 = 1; *((_DWORD *)v32 + 1) = v168; v169 = v32; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar01Nor", 0xEu); LOBYTE(v174) = 2; v169 += 18; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar01Click", 0x10u); LOBYTE(v174) = 3; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar01Over", 0xFu); LOBYTE(v174) = 4; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v148, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column01", 8u); LOBYTE(v174) = 5; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); v33 = v169; *((_DWORD *)v169 + 1) = v168; *((_BYTE *)v33 + 88) = 1; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v148, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column02", 8u); LOBYTE(v174) = 6; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v148, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column03", 8u); LOBYTE(v174) = 7; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v148, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column04", 8u); LOBYTE(v174) = 8; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 1; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; sub_466680(&v148, 0); v34 = sub_8FB140(v168, (int)"TextBox01", (int)&v167, (int)&v166, 0); v35 = sub_466330(v167 - v9, v166 - v10, (int)v34, *(float *)&v2, (int **)&v148, 0, 0); *(_DWORD *)(v2 + 344) = v35; *((_DWORD *)v35 + 89) = 3; *(_DWORD *)(*(_DWORD *)(v2 + 344) + 352) = 2; sub_465130(*(_DWORD **)(v2 + 344)); sub_40AE60(&v148); v36 = sub_8FB140(v168, (int)"Promis02", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v36, v2, 0, 0); v37 = sub_421050(7); v38 = sub_8F4A20(v167 - v9 + 130, v166 - v10, v165, v164, v37, v2, 0, 0); v39 = *v38; v170 = (volatile LONG **)v38; (*(void (__thiscall **)(volatile LONG *, signed int))(v39 + 488))(v38, 1); (*((void (__stdcall **)(int *))*v170 + 117))(&dword_AA8D98); v169 = *v170; v40 = sub_40C190(1403226504); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v40); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v156 = 0; v157 = 0; v158 = 0; v159 = 0; v160 = 0; v161 = 0; v162 = 0; v163 = 0; LOBYTE(v174) = 9; v41 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v156, 1); *v41 = 1; *((_DWORD *)v41 + 1) = v168; v169 = v41; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar02Nor", 0xEu); LOBYTE(v174) = 10; v169 += 18; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar02Click", 0x10u); LOBYTE(v174) = 11; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "ColumnBar02Over", 0xFu); LOBYTE(v174) = 12; sub_40B060((int *)v169, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v156, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column05", 8u); LOBYTE(v174) = 13; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); v42 = v169; *((_DWORD *)v169 + 1) = v168; *((_BYTE *)v42 + 88) = 1; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v156, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column06", 8u); LOBYTE(v174) = 14; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v156, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column07", 8u); LOBYTE(v174) = 15; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; v169 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v156, 2); *v169 = 2; v173 = 15; v172 = 0; LOBYTE(v171) = 0; sub_4018E0(&v171, "Column08", 8u); LOBYTE(v174) = 16; sub_40B060((int *)v169 + 18, (const void **)&v171); LOBYTE(v174) = 9; if ( v173 >= 0x10 ) operator delete(v171); *((_DWORD *)v169 + 1) = v168; v173 = 15; v172 = 0; LOBYTE(v171) = 0; v160 = 4; v161 = 0; sub_466680(&v156, 0); v43 = sub_8FB140(v168, (int)"TextBox02", (int)&v167, (int)&v166, 0); v44 = sub_466330(v167 - v9, v166 - v10, (int)v43, *(float *)&v2, (int **)&v156, 0, 0); *(_DWORD *)(v2 + 348) = v44; *((_DWORD *)v44 + 89) = 1; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 352) = 0; sub_465130(*(_DWORD **)(v2 + 348)); v45 = sub_8FB140(v168, (int)"SlideBar_SlideBtnMiddle", (int)&v167, (int)&v166, 0); v46 = sub_464310(v168, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v45, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 352) = v46; *(_DWORD *)(v46 + 312) = 9; *(_DWORD *)(*(_DWORD *)(v2 + 352) + 304) = 1; v170 = sub_8FB140(v168, (int)"Title01Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Title01Click"); sub_8FB650(v170, v168, (int)"Title01Over"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 5, 0, 0); v47 = *v170[9]; v48 = *(volatile LONG ***)(v47 + 20); v169 = *(volatile LONG **)(v47 + 24); v170 = v48; v49 = sub_421050(7); v50 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v49, v2, 0, 0); v51 = *v50; v170 = (volatile LONG **)v50; (*(void (__thiscall **)(volatile LONG *, signed int))(v51 + 488))(v50, 5); v169 = *v170; v52 = sub_40C190(-688464161); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v52); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Title02Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Title02Click"); sub_8FB650(v170, v168, (int)"Title02Over"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 6, 0, 0); v53 = v170[9]; v54 = *(volatile LONG ***)(*v53 + 20); v169 = *(volatile LONG **)(*v53 + 24); v170 = v54; v55 = sub_421050(7); v56 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v55, v2, 0, 0); v57 = *v56; v170 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); v169 = *v170; v58 = sub_40C190(-1778781710); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v58); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Title03Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Title03Click"); sub_8FB650(v170, v168, (int)"Title03Over"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 7, 0, 0); v59 = v170[9]; v60 = *(volatile LONG ***)(*v59 + 20); v169 = *(volatile LONG **)(*v59 + 24); v170 = v60; v61 = sub_421050(7); v62 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v61, v2, 0, 0); v63 = *v62; v170 = (volatile LONG **)v62; (*(void (__thiscall **)(volatile LONG *, signed int))(v63 + 488))(v62, 5); v169 = *v170; v64 = sub_40C190(-1946686207); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v64); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Title04Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Title04Click"); sub_8FB650(v170, v168, (int)"Title04Over"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 8, 0, 0); v65 = v170[9]; v66 = *(volatile LONG ***)(*v65 + 20); v169 = *(volatile LONG **)(*v65 + 24); v170 = v66; v67 = sub_421050(7); v68 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v67, v2, 0, 0); v69 = *v68; v170 = (volatile LONG **)v68; (*(void (__thiscall **)(volatile LONG *, signed int))(v69 + 488))(v68, 5); v169 = *v170; v70 = sub_40C190(-2034994799); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v70); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Btn01Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Btn01Click"); sub_8FB650(v170, v168, (int)"Btn01Over"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 16, 0, 0); *((_DWORD *)v169 + 68) = dword_AD01E8; v71 = sub_40A910(-286800917); sub_8F2EA0((void **)v169, v71); v72 = *v170[9]; v73 = *(volatile LONG ***)(v72 + 20); v169 = *(volatile LONG **)(v72 + 24); v170 = v73; v74 = sub_421050(7); v75 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v74, v2, 0, 0); v76 = *v75; v170 = (volatile LONG **)v75; (*(void (__thiscall **)(volatile LONG *, signed int))(v76 + 488))(v75, 5); v169 = *v170; v77 = sub_40C190(-650701761); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v77); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Btn02Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Btn01Click"); sub_8FB650(v170, v168, (int)"Btn01Over"); sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 17, 0, 0); v78 = v170[9]; v79 = *(volatile LONG ***)(*v78 + 20); v169 = *(volatile LONG **)(*v78 + 24); v170 = v79; v80 = sub_421050(7); v81 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v80, v2, 0, 0); v82 = *v81; v170 = (volatile LONG **)v81; (*(void (__thiscall **)(volatile LONG *, signed int))(v82 + 488))(v81, 5); v169 = *v170; v83 = sub_40C190(845449094); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v83); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v170 = sub_8FB140(v168, (int)"Btn03Nor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"Btn01Click"); sub_8FB650(v170, v168, (int)"Btn01Over"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 18, 0, 0); *((_DWORD *)v169 + 68) = dword_AD01E8; v84 = sub_40A910(-252444876); sub_8F2EA0((void **)v169, v84); v85 = *v170[9]; v86 = *(volatile LONG ***)(v85 + 20); v169 = *(volatile LONG **)(v85 + 24); v170 = v86; v87 = sub_421050(7); v88 = sub_8F4A20(v167 - v9, v166 - v10 + 1, (int)v170, (int)v169, v87, v2, 0, 0); v89 = *v88; v170 = (volatile LONG **)v88; (*(void (__thiscall **)(volatile LONG *, signed int))(v89 + 488))(v88, 5); v169 = *v170; v90 = sub_40C190(-2052017184); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v169 + 118))(v170, v90); (*((void (__stdcall **)(_DWORD))*v170 + 60))(0); v91 = sub_8FB140(v168, (int)"Base", (int)&v167, (int)&v166, 0); sub_8F3EB0(v167 - v9, v166 - v10, (int)v91, v2, 0, 0); v170 = sub_8FB140(v168, (int)"FriendNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"FriendClick"); sub_8FB650(v170, v168, (int)"FriendOver"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 10, 0, 0); v92 = sub_40C190(-587993612); sub_8F2EA0((void **)v169, v92); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_8FB140(v168, (int)"MasterNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"MasterClick"); sub_8FB650(v170, v168, (int)"MasterOver"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 15, 0, 0); v93 = sub_40C190(-196330948); sub_8F2EA0((void **)v169, v93); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_8FB140(v168, (int)"GuildNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"GuildClick"); sub_8FB650(v170, v168, (int)"GuildOver"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 11, 0, 0); v94 = sub_40C190(-1679100684); sub_8F2EA0((void **)v169, v94); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_8FB140(v168, (int)"WeddingNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"WeddingClick"); sub_8FB650(v170, v168, (int)"WeddingOver"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 13, 0, 0); v95 = sub_40C190(-923451580); sub_8F2EA0((void **)v169, v95); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_8FB140(v168, (int)"PartyMatchNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"PartyMatchClick"); sub_8FB650(v170, v168, (int)"PartyMatchOver"); v169 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 14, 0, 0); v96 = sub_40C190(474697790); sub_8F2EA0((void **)v169, v96); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_8FB140(v168, (int)"GuildAcademyNor", (int)&v167, (int)&v166, 0); sub_8FB650(v170, v168, (int)"GuildAcademyClick"); sub_8FB650(v170, v168, (int)"GuildAcademyOver"); v97 = sub_8FE0F0(v167 - v9, v166 - v10, (int)v170, v2, 12, 0, 0); v98 = sub_40C190(624629836); sub_8F2EA0((void **)v97, v98); *((_DWORD *)v97 + 68) = dword_AD01E8; v99 = sub_8FB140(v168, (int)"Friend", (int)&v167, (int)&v166, 0)[9]; v100 = *(_DWORD *)(*v99 + 24); v101 = *(_DWORD *)(*v99 + 20); v102 = sub_421050(9); v103 = sub_8F4A20(v167, v166, v101, v100, v102, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v103 + 488))(v103, 1); v104 = *v103; v105 = sub_40C190(-587993612); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v104 + 472))(v103, v105); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v103 + 240))(v103, 0); v106 = *sub_8FB140(v168, (int)"HolyPromise", (int)&v167, (int)&v166, 0)[9]; v107 = *(_DWORD *)(v106 + 24); v108 = *(_DWORD *)(v106 + 20); v109 = sub_421050(9); v110 = sub_8F4A20(v167, v166, v108, v107, v109, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v110 + 488))(v110, 1); v111 = *v110; v112 = sub_40C190(-196330948); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v110, v112); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v110 + 240))(v110, 0); v113 = sub_8FB140(v168, (int)"Guild", (int)&v167, (int)&v166, 0)[9]; v114 = *(_DWORD *)(*v113 + 24); v115 = *(_DWORD *)(*v113 + 20); v116 = sub_421050(9); v117 = sub_8F4A20(v167, v166, v115, v114, v116, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v117 + 488))(v117, 1); v118 = *v117; v119 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v118 + 472))(v117, v119); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v117 + 240))(v117, 0); v120 = *sub_8FB140(v168, (int)"GuildAcademy", (int)&v167, (int)&v166, 0)[9]; v121 = *(_DWORD *)(v120 + 24); v122 = *(_DWORD *)(v120 + 20); v123 = sub_421050(9); v124 = sub_8F4A20(v167, v166, v122, v121, v123, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v124 + 488))(v124, 1); v125 = *v124; v126 = sub_40C190(-2036079644); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v125 + 472))(v124, v126); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v124 + 240))(v124, 0); v127 = sub_8FB140(v168, (int)"Wedding", (int)&v167, (int)&v166, 0)[9]; v128 = *(_DWORD *)(*v127 + 24); v129 = *(_DWORD *)(*v127 + 20); v130 = sub_421050(9); v131 = sub_8F4A20(v167, v166, v129, v128, v130, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v131 + 488))(v131, 1); v132 = *v131; v133 = sub_40C190(-923451580); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v132 + 472))(v131, v133); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v131 + 240))(v131, 0); v134 = *sub_8FB140(v168, (int)"PartyMatch", (int)&v167, (int)&v166, 0)[9]; v135 = *(_DWORD *)(v134 + 24); v136 = *(_DWORD *)(v134 + 20); v137 = sub_421050(9); v138 = sub_8F4A20(v167, v166, v136, v135, v137, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v138 + 488))(v138, 1); v139 = *v138; v140 = sub_40C190(474697790); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v139 + 472))(v138, v140); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v138 + 240))(v138, 0); v141 = sub_43D0D0(1u); v142 = sub_58E5D0(v141, 4, 4, 0); *(_DWORD *)(v2 + 372) = v142; (**((void (__stdcall ***)(int))v142 + 58))(v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 372)); v143 = sub_40C190(-1091633134); v144 = (void **)sub_58E290(v143, 0, 0, 0, 0, 0, 0); sub_58D580(v144, (void *)0x45, 0); sub_58E080(*(_DWORD **)(v2 + 372), (int)v144, (int)v144); v145 = sub_40C190(-2052017184); v146 = (void **)sub_58E290(v145, 0, 0, 0, 0, 0, 0); sub_58D580(v146, (void *)0x46, 0); sub_58E080(*(_DWORD **)(v2 + 372), (int)v146, (int)v146); sub_58D930(*(_DWORD **)(v2 + 372), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 256))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v174) = 1; sub_40AE10((void **)&v156); LOBYTE(v174) = 0; sub_40AE10((void **)&v148); v174 = -1; if ( v168 ) { v147 = (void (__thiscall ***)(_DWORD, signed int))v168; if ( !InterlockedDecrement((volatile LONG *)(v168 + 4)) ) { if ( v147 ) (**v147)(v147, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005306F0) -------------------------------------------------------- int __cdecl sub_5306F0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00530710) -------------------------------------------------------- _DWORD *__cdecl sub_530710(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 37) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 37) ); } return result; } //----- (00530730) -------------------------------------------------------- _DWORD *__thiscall sub_530730(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 37) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 37) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 37); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (00530780) -------------------------------------------------------- _DWORD *__thiscall sub_530780(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 37) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 37) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 37) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 37) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 37) ) goto LABEL_11; return result; } //----- (005307E0) -------------------------------------------------------- void *__thiscall sub_5307E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &HolyPromiseAddWin::`vftable'; *((_DWORD *)this + 58) = &HolyPromiseAddWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C7B3C: using guessed type void *HolyPromiseAddWin::`vftable'; // 9C7B5C: using guessed type void *HolyPromiseAddWin::`vftable'; //----- (00530820) -------------------------------------------------------- _DWORD *__thiscall sub_530820(_DWORD *this) { _DWORD *result; // eax result = this; this[4] = 0; this[3] = 0; this[2] = 0; this[1] = 0; *this = 0; this[9] = 0; this[8] = 0; this[7] = 0; this[6] = 0; this[5] = 0; return result; } //----- (00530850) -------------------------------------------------------- int __thiscall sub_530850(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 37) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (005308B0) -------------------------------------------------------- _DWORD *__thiscall sub_5308B0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 37) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (00530910) -------------------------------------------------------- int **__thiscall sub_530910(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 37) ) { if ( (unsigned int)v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < (unsigned int)v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (00530980) -------------------------------------------------------- int __thiscall sub_530980(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0xAAAAAA9 ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 36) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 36) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 37) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 37) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 36) = 1; *(_BYTE *)(v13 + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 36) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 37) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 37) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 36) = 1; *(_BYTE *)(v22 + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 36) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 36) = 1; return result; } //----- (00530BB0) -------------------------------------------------------- _DWORD *__thiscall sub_530BB0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // ecx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x28u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 18) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; result[4] = *((_DWORD *)v4 + 1); result[5] = *((_DWORD *)v4 + 2); result[6] = *((_DWORD *)v4 + 3); result[7] = *((_DWORD *)v4 + 4); result[8] = *((_DWORD *)v4 + 5); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00530C40) -------------------------------------------------------- int *__thiscall sub_530C40(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 37) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_530730(&a3); if ( *(_BYTE *)(*v3 + 37) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 37) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 37) ) { v9 = (_DWORD *)v6; } else { v9 = sub_530710((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 37) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_5306F0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 37) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 37) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 36); *(_BYTE *)(v5 + 36) = *((_BYTE *)v3 + 36); *((_BYTE *)v3 + 36) = v13; LABEL_35: if ( v18[36] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 36) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[36] ) { v15[36] = 1; *(_BYTE *)(v6 + 36) = 0; sub_5308B0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[37] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 36) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 36) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 36) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 36) = 1; v15[36] = 0; sub_530850(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[36] = *(_BYTE *)(v6 + 36); *(_BYTE *)(v6 + 36) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 36) = 1; sub_5308B0(i, v6); break; } } else { if ( !v15[36] ) { v15[36] = 1; *(_BYTE *)(v6 + 36) = 0; sub_530850(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[37] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 36) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 36) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 36) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 36) = 1; v15[36] = 0; sub_5308B0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[36] = *(_BYTE *)(v6 + 36); *(_BYTE *)(v6 + 36) = 1; *(_BYTE *)(*(_DWORD *)v15 + 36) = 1; sub_530850(i, (_DWORD *)v6); break; } } v15[36] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 36) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (00530E90) -------------------------------------------------------- void __stdcall sub_530E90(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 37) ) { do { sub_530E90(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 37) ); } } //----- (00530ED0) -------------------------------------------------------- int __thiscall sub_530ED0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 37) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 37) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_530980(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_530780(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_530980(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (00530FB0) -------------------------------------------------------- int __thiscall sub_530FB0(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[37] ) { do { sub_530E90((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 37) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (00531000) -------------------------------------------------------- int *__thiscall sub_531000(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 37) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 37) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 37); j = (int *)*j ) v10 = j; a3 = v10; } } sub_530C40(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_530FB0(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (005310A0) -------------------------------------------------------- void *__thiscall sub_5310A0(void *this, char a2) { void *v2; // esi v2 = this; sub_52E8A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00531180) -------------------------------------------------------- int __thiscall sub_531180(float *this, float a2) { float *v2; // edi char *v3; // eax int result; // eax _DWORD *v5; // edi int (__thiscall *v6)(_DWORD *, int *); // eax _DWORD *v7; // ecx _DWORD *v8; // edi int v9; // [esp+10h] [ebp+8h] v2 = this; if ( sub_8D0630(this + 87, a2) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); --dword_ACEC18; } (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 86) + 468))(&dword_AA8C68); v9 = **((_DWORD **)v2 + 86); v3 = sub_7549E0( "%02d:%02d:%02d", dword_ACEC18 / 0x3Cu / 0x3C % 0x3C, dword_ACEC18 / 0x3Cu % 0x3C, dword_ACEC18 % 0x3Cu); (*(void (__thiscall **)(_DWORD *, char *))(v9 + 472))(*((_DWORD **)v2 + 86), v3); result = dword_ACEC18; if ( (unsigned int)dword_ACEC18 >= 0x3C ) { if ( (unsigned int)dword_ACEC18 >= 0x12C ) goto LABEL_9; v8 = (_DWORD *)*((_DWORD *)v2 + 86); v6 = *(int (__thiscall **)(_DWORD *, int *))(*v8 + 468); v7 = v8; } else { v5 = (_DWORD *)*((_DWORD *)v2 + 86); v6 = *(int (__thiscall **)(_DWORD *, int *))(*v5 + 468); v7 = v5; if ( !(dword_ACEC18 & 1) ) { result = v6(v5, &dword_AA8C68); goto LABEL_9; } } result = v6(v7, &dword_AA8C88); LABEL_9: if ( dword_ACEC18 == 60 ) result = sub_6BA650(&dword_AB6520, 25); return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACEC14: using guessed type char byte_ACEC14; // ACEC18: using guessed type int dword_ACEC18; //----- (005312A0) -------------------------------------------------------- char __thiscall sub_5312A0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; dword_ACEC18 = a2; result = sub_8D06A0(this + 87, flt_ACCFCC); v2[92] = 1.0; return result; } // ACCFCC: using guessed type float flt_ACCFCC; // ACEC18: using guessed type int dword_ACEC18; //----- (005312D0) -------------------------------------------------------- char __thiscall sub_5312D0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // edi volatile LONG *v16; // eax volatile LONG *v17; // ecx int v18; // edi int v19; // ebx int v20; // eax volatile LONG *v21; // eax int v22; // edi int v23; // eax volatile LONG *v24; // edi int v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi int v27; // [esp+34h] [ebp-18h] int v28; // [esp+38h] [ebp-14h] int v29; // [esp+3Ch] [ebp-10h] int v30; // [esp+48h] [ebp-4h] v2 = (int)this; v29 = 0; v30 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( !v29 || InterlockedDecrement((volatile LONG *)(v29 + 4)) ) return 0; v5 = v29 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\QuestTime.nif"); sub_8F66B0(v8, (int)&v29, v7); if ( !v29 ) return 0; v9 = sub_8FB140(v29, (int)"Frame", (int)&v27, (int)&v28, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"IDTimeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( !v29 || InterlockedDecrement((volatile LONG *)(v29 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = sub_8FB140(v29, (int)"Reward", (int)&v27, (int)&v28, 0); v11 = sub_8F3EB0(v27, v28, (int)v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 256))(v11, 1); v12 = sub_8FB140(v29, (int)"Panel01", (int)&v27, (int)&v28, 0); v13 = sub_8F3EB0(v27, v28, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v29, (int)"Time", (int)&v27, (int)&v28, v3); v15 = v14; v16 = sub_8F3EB0(v27, v28, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = v15[9]; v18 = *(_DWORD *)(*v17 + 24); v19 = *(_DWORD *)(*v17 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v27, v28 + 2, v19, v18, v20, v2, 0, 0); *(_DWORD *)(v2 + 344) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = **(_DWORD **)(v2 + 344); v23 = sub_421050(6); (*(void (__thiscall **)(_DWORD, int))(v22 + 452))(*(_DWORD *)(v2 + 344), v23); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("00:00:00"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.0); v24 = *(volatile LONG **)v2; v25 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 164))(v2, 210); (*((void (__thiscall **)(int, int))v24 + 77))(v2, v25); v30 = -1; if ( v29 ) { v26 = (void (__thiscall ***)(_DWORD, signed int))v29; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v26 ) (**v26)(v26, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005315C0) -------------------------------------------------------- int __cdecl sub_5315C0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x178u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &IDTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &IDTimeWin::`vftable'; sub_8D0610((_BYTE *)(v2 + 348)); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C801C: using guessed type void *IDTimeWin::`vftable'; // 9C803C: using guessed type void *IDTimeWin::`vftable'; //----- (00531710) -------------------------------------------------------- void *__thiscall sub_531710(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &IDTimeWin::`vftable'; *((_DWORD *)this + 58) = &IDTimeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C801C: using guessed type void *IDTimeWin::`vftable'; // 9C803C: using guessed type void *IDTimeWin::`vftable'; //----- (005318E0) -------------------------------------------------------- int __thiscall sub_5318E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int result; // eax int v4; // esi signed int v5; // edi v1 = this; v2 = this[86]; result = 0xFFFF; *((_WORD *)v1 + 192) = -1; if ( v2 ) result = (*(int (__stdcall **)(void *))(*(_DWORD *)v2 + 472))(&unk_9C825E); v4 = (int)(v1 + 87); v5 = 3; do { if ( *(_DWORD *)v4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 176))(*(_DWORD *)(v4 + 8)); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 520))(0); } if ( *(_DWORD *)(v4 + 4) ) result = (*(int (__stdcall **)(void *))(**(_DWORD **)(v4 + 4) + 472))(&unk_9C825C); v4 += 12; --v5; } while ( v5 ); return result; } //----- (00531A20) -------------------------------------------------------- _DWORD *__thiscall sub_531A20(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; *v1 = &IndunLevelSelectWin::`vftable'; v1[58] = &IndunLevelSelectWin::`vftable'; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; *((_WORD *)v1 + 192) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C831C: using guessed type void *IndunLevelSelectWin::`vftable'; // 9C833C: using guessed type void *IndunLevelSelectWin::`vftable'; //----- (00531A90) -------------------------------------------------------- char __thiscall sub_531A90(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char result; // al _DWORD *v5; // eax v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_8F86A0(&unk_BA6B10, this); } else { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) sub_4C0250(v5, *((_WORD *)v3 + 192), a3); result = sub_8F86A0(&unk_BA6B10, v3); } return result; } //----- (00531AF0) -------------------------------------------------------- char __thiscall sub_531AF0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // ecx int v4; // ecx v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4C0250(v2, *((_WORD *)v1 + 176), v1[89]); v3 = v1[86]; if ( v3 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 472))(&unk_9C8296); v4 = v1[87]; if ( v4 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v4 + 472))(&unk_9C8297); *((_WORD *)v1 + 176) = -1; v1[89] = 0; return sub_8F86A0(&unk_BA6B10, v1); } //----- (00531B80) -------------------------------------------------------- char __thiscall sub_531B80(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx v1 = this; v2 = this[86]; if ( v2 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v2 + 472))(&unk_9C8296); v3 = v1[87]; if ( v3 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 472))(&unk_9C8297); *((_WORD *)v1 + 176) = -1; v1[89] = 0; return sub_8F86A0(&unk_BA6B10, v1); } //----- (00531BE0) -------------------------------------------------------- char __thiscall sub_531BE0(void *this, int a2) { int v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG *v9; // eax unsigned int v10; // eax volatile LONG **v11; // edi char *v12; // eax volatile LONG *v13; // esi int v14; // ST20_4 int v15; // ST1C_4 int v16; // eax volatile LONG *v17; // ebx int v18; // eax volatile LONG *v19; // ST24_4 int v20; // ST20_4 int v21; // ST1C_4 int v22; // eax volatile LONG *v23; // esi volatile LONG v24; // edi const CHAR *v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi int v27[5]; // [esp+40h] [ebp-30h] char v28; // [esp+54h] [ebp-1Ch] char v29; // [esp+58h] [ebp-18h] void *v30; // [esp+5Ch] [ebp-14h] int v31; // [esp+60h] [ebp-10h] int v32; // [esp+6Ch] [ebp-4h] unsigned int v33; // [esp+78h] [ebp+8h] v2 = (int)this; v30 = this; v31 = 0; v3 = dword_BA6BA0; v32 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ModeIDWin.nif"); sub_8F66B0(v4, (int)&v31, v3); if ( !v31 ) return 0; v5 = sub_8FB140(v31, (int)"Panel01", (int)&v28, (int)&v29, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"IndunLevelSelectWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v31; v32 = -1; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v27); LOBYTE(v32) = 1; sub_455FF0(v27, v2); sub_456000(v27, 0, 0); sub_456380(v27, v31); v8 = (volatile LONG *)sub_43D0D0(0x13u); v9 = sub_456820(v27, (int)"Theme", v8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); *(_DWORD *)(v2 + 344) = sub_456760( v27, (int)"Textbox", (int)&unk_9C825D, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v10 = 0; v11 = (volatile LONG **)(v2 + 348); do { v33 = v10 + 1; v12 = sub_7549E0("Btn%02d", v10 + 1); v13 = sub_456B30(v27, 0, v12, 0, 3); v14 = sub_421050(0); v15 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 148))(v13); v16 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 144))(v13); v17 = sub_8F4A20(0, 0, v16, v15, v14, (int)v13, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v18 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 168))(v13); *v11 = v13; v11[1] = v17; v11[2] = (volatile LONG *)v18; if ( *v11 ) { (*(void (__stdcall **)(_DWORD))(**v11 + 256))(0); (*(void (__stdcall **)(volatile LONG *))(**v11 + 176))(v11[2]); (*(void (__stdcall **)(_DWORD))(**v11 + 520))(0); } if ( v11[1] ) (*(void (__stdcall **)(void *))(*v11[1] + 472))(&unk_9C825C); v10 = v33; v11 += 3; } while ( v33 < 3 ); v19 = sub_456B30(v27, 1, "QuitBtn", 0, 3); v20 = sub_421050(0); v21 = (*(int (__thiscall **)(volatile LONG *))(*v19 + 148))(v19); v22 = (*(int (__thiscall **)(volatile LONG *))(*v19 + 144))(v19); v23 = sub_8F4A20(0, 0, v22, v21, v20, (int)v19, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 5); v24 = *v23; v25 = sub_40C190(-572003345); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v24 + 472))(v23, v25); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v30 + 236))(xRight, dword_AC2F78, 0.5, 0.2); LOBYTE(v32) = 0; sub_4562E0(v27); v32 = -1; if ( v31 ) { v26 = (void (__thiscall ***)(_DWORD, signed int))v31; if ( !InterlockedDecrement((volatile LONG *)(v31 + 4)) ) { if ( v26 ) (**v26)(v26, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00531F40) -------------------------------------------------------- char __thiscall sub_531F40(void *this, int a2) { int v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // ST1C_4 int v12; // ST18_4 int v13; // ST14_4 int v14; // eax volatile LONG *v15; // esi volatile LONG v16; // ebx const CHAR *v17; // eax volatile LONG *v18; // ST1C_4 int v19; // ST18_4 int v20; // ST14_4 int v21; // eax volatile LONG *v22; // esi volatile LONG v23; // ebx const CHAR *v24; // eax void (__thiscall ***v25)(_DWORD, signed int); // esi int v26[5]; // [esp+38h] [ebp-2Ch] char v27; // [esp+4Ch] [ebp-18h] char v28; // [esp+50h] [ebp-14h] int v29; // [esp+54h] [ebp-10h] int v30; // [esp+60h] [ebp-4h] v2 = (int)this; v29 = 0; v3 = dword_BA6BA0; v30 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ModeIDMsg.nif"); sub_8F66B0(v4, (int)&v29, v3); if ( !v29 ) return 0; v5 = sub_8FB140(v29, (int)"Panel01", (int)&v27, (int)&v28, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"IndunLevelMsgWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v26); LOBYTE(v30) = 1; sub_455FF0(v26, v2); sub_456000(v26, 0, 0); sub_456380(v26, v29); v8 = (volatile LONG *)sub_43D0D0(0x13u); v9 = sub_456820(v26, (int)"Theme", v8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); *(_DWORD *)(v2 + 344) = sub_456760( v26, (int)"TextBox01", (int)&unk_9C825F, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v10 = sub_456760(v26, (int)"TextBox02", (int)&unk_9C8273, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); *(_DWORD *)(v2 + 348) = v10; (*(void (__thiscall **)(volatile LONG *, int *))(*v10 + 468))(v10, &dword_AA8CB8); v11 = sub_456B30(v26, 0, "Btn01", 0, 3); v12 = sub_421050(0); v13 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 148))(v11); v14 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 144))(v11); v15 = sub_8F4A20(0, 0, v14, v13, v12, (int)v11, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); v16 = *v15; v17 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v16 + 472))(v15, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v18 = sub_456B30(v26, 1, "Btn02", 0, 3); v19 = sub_421050(0); v20 = (*(int (__thiscall **)(volatile LONG *))(*v18 + 148))(v18); v21 = (*(int (__thiscall **)(volatile LONG *))(*v18 + 144))(v18); v22 = sub_8F4A20(0, 0, v21, v20, v19, (int)v18, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); v23 = *v22; v24 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v23 + 472))(v22, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); LOBYTE(v30) = 0; sub_4562E0(v26); v30 = -1; if ( v29 ) { v25 = (void (__thiscall ***)(_DWORD, signed int))v29; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v25 ) (**v25)(v25, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00532280) -------------------------------------------------------- char __thiscall sub_532280(_DWORD *this, int a2, int a3) { char result; // al if ( !a2 ) return sub_531AF0(this); result = a2 - 1; if ( a2 == 1 ) result = sub_531B80(this); return result; } //----- (005322A0) -------------------------------------------------------- volatile LONG *__cdecl sub_5322A0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x184u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_531A20(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005323D0) -------------------------------------------------------- int __cdecl sub_5323D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &IndunLevelMsgWin::`vftable'; *(_DWORD *)(v2 + 232) = &IndunLevelMsgWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_WORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C8560: using guessed type void *IndunLevelMsgWin::`vftable'; // 9C857C: using guessed type void *IndunLevelMsgWin::`vftable'; //----- (00532530) -------------------------------------------------------- void __thiscall sub_532530(_DWORD *this, __int16 a2, char a3, int a4, int a5, unsigned int a6, int a7) { _DWORD *v7; // ebx int v8; // eax int *v9; // ecx int v10; // esi int v11; // ST0C_4 char *v12; // eax char *v13; // eax CHAR *v14; // eax CHAR *v15; // eax CHAR *v16; // eax unsigned int v17; // ebx int **v18; // esi int *v19; // ecx int v20; // edi int v21; // edi unsigned int v22; // eax int *v23; // ecx int v24; // [esp+10h] [ebp-70h] _DWORD *v25; // [esp+14h] [ebp-6Ch] int v26; // [esp+18h] [ebp-68h] char *v27; // [esp+18h] [ebp-68h] char v28[16]; // [esp+1Ch] [ebp-64h] int v29; // [esp+2Ch] [ebp-54h] int v30[2]; // [esp+30h] [ebp-50h] char v31; // [esp+38h] [ebp-48h] int v32; // [esp+48h] [ebp-38h] int v33; // [esp+4Ch] [ebp-34h] char v34; // [esp+54h] [ebp-2Ch] int v35; // [esp+64h] [ebp-1Ch] int v36; // [esp+68h] [ebp-18h] int v37; // [esp+7Ch] [ebp-4h] v7 = this; v25 = this; v24 = a7; if ( a6 != 1 ) { sub_5318E0(this); v8 = sub_4316B0(&a3); if ( v8 ) { v9 = (int *)v7[86]; if ( v9 ) { v10 = *v9; v11 = v8 + 14; v12 = (char *)sub_40A910(793868395); v13 = sub_7549E0(v12, v11); (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(v7[86], v13); } v30[0] = 15; v29 = 0; v28[0] = 0; v14 = (CHAR *)sub_4090F0(-1477845953); sub_4018E0(v28, v14, strlen(v14)); v37 = 0; v15 = (CHAR *)sub_4090F0(-1488771533); v33 = 15; v32 = 0; v31 = 0; sub_4018E0(&v31, v15, strlen(v15)); LOBYTE(v37) = 1; v16 = (CHAR *)sub_4090F0(-1461067990); v36 = 15; v35 = 0; v34 = 0; sub_4018E0(&v34, v16, strlen(v16)); v17 = 0; v37 = 2; if ( a6 > 0 ) { v18 = (int **)(v25 + 87); do { v19 = *v18; v20 = *(_DWORD *)(v24 + 4 * v17); v26 = *(_DWORD *)(v24 + 4 * v17); if ( *v18 && a6 == 2 ) { v21 = *v19; v22 = (*(int (**)(void))(*v19 + 148))(); (*(void (__thiscall **)(int *, unsigned int))(v21 + 176))(*v18, (unsigned int)v18[2] + (v22 >> 1)); v20 = v26; } if ( (unsigned int)v30[7 * v20] < 0x10 ) v27 = &v28[28 * v20]; else v27 = *(char **)&v28[28 * v20]; if ( *v18 ) (*(void (__stdcall **)(signed int))(**v18 + 256))(1); v23 = v18[1]; if ( v23 ) (*(void (__stdcall **)(char *))(*v23 + 472))(v27); if ( *v18 ) (*(void (__stdcall **)(int))(**v18 + 520))(v20); ++v17; v18 += 3; } while ( v17 < a6 ); } *((_WORD *)v25 + 192) = a2; v37 = -1; `eh vector destructor iterator'(v28, 0x1Cu, 3, sub_636A10); } } } // 532530: using guessed type int var_50[2]; // 532530: using guessed type char var_64[16]; //----- (00532750) -------------------------------------------------------- void __thiscall sub_532750(_DWORD *this, __int16 a2, char a3, int a4, int a5, int a6) { _DWORD *v6; // edi int v7; // ecx int *v8; // eax int v9; // esi int v10; // ST08_4 char *v11; // eax char *v12; // eax char *v13; // eax int v14; // esi unsigned int v15; // ecx int *v16; // eax void *v17; // ecx int v18; // esi char *v19; // eax bool v20; // cf int v21; // ecx int v22; // [esp+Ch] [ebp-30h] void *v23; // [esp+10h] [ebp-2Ch] int v24; // [esp+20h] [ebp-1Ch] unsigned int v25; // [esp+24h] [ebp-18h] int v26; // [esp+38h] [ebp-4h] v6 = this; v7 = sub_4316B0(&a3); v22 = v7; if ( !v7 ) return; v8 = (int *)v6[86]; if ( v8 ) { v9 = *v8; v10 = v7 + 14; v11 = (char *)sub_40A910(793868395); v12 = sub_7549E0(v11, v10); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(v6[86], v12); } v25 = 15; v24 = 0; LOBYTE(v23) = 0; v26 = 0; switch ( a6 ) { case 0: v13 = (char *)sub_4090F0(-1477845953); v14 = (int)(v13 + 1); v15 = (unsigned int)&v13[strlen(v13) + 1]; goto LABEL_10; case 1: v13 = (char *)sub_4090F0(-1488771533); v14 = (int)(v13 + 1); v15 = (unsigned int)&v13[strlen(v13) + 1]; goto LABEL_10; case 2: v13 = (char *)sub_4090F0(-1461067990); v14 = (int)(v13 + 1); v15 = (unsigned int)&v13[strlen(v13) + 1]; LABEL_10: sub_4018E0(&v23, v13, v15 - v14); break; } v16 = (int *)v6[87]; if ( v16 ) { v17 = v23; if ( v25 < 0x10 ) v17 = &v23; v18 = *v16; v19 = sub_7549E0("(%s %s)", v22 + 14, v17); (*(void (__thiscall **)(_DWORD, char *))(v18 + 472))(v6[87], v19); } v20 = v25 < 0x10; v21 = a6; *((_WORD *)v6 + 176) = a2; v6[89] = v21; if ( !v20 ) operator delete(v23); } //----- (005328E0) -------------------------------------------------------- void *__thiscall sub_5328E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &IndunLevelSelectWin::`vftable'; *((_DWORD *)this + 58) = &IndunLevelSelectWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C831C: using guessed type void *IndunLevelSelectWin::`vftable'; // 9C833C: using guessed type void *IndunLevelSelectWin::`vftable'; //----- (00532920) -------------------------------------------------------- void *__thiscall sub_532920(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &IndunLevelMsgWin::`vftable'; *((_DWORD *)this + 58) = &IndunLevelMsgWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C8560: using guessed type void *IndunLevelMsgWin::`vftable'; // 9C857C: using guessed type void *IndunLevelMsgWin::`vftable'; //----- (005329A0) -------------------------------------------------------- int __thiscall sub_5329A0(_DWORD **this) { _BYTE *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[86] + 488))(1); return sub_8F28E0(v1); } //----- (005329C0) -------------------------------------------------------- int __thiscall sub_5329C0(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi v3 = this; sub_8F2BC0(this, 1, 0, 0); sub_8F2BC0(*((volatile LONG **)v3 + 151), 5, *((_DWORD *)v3 + 152), 0); return (*(int (**)(void))(**((_DWORD **)v3 + 86) + 480))(); } //----- (00532A00) -------------------------------------------------------- char __thiscall sub_532A00(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi char result; // al v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_8F2BC0(this, 1, 0, 0); } else { sub_8F2BC0(this, 1, 0, 0); result = sub_8F2BC0(*((volatile LONG **)v3 + 151), 5, *((_DWORD *)v3 + 152), 0); } return result; } //----- (00532A50) -------------------------------------------------------- int __thiscall sub_532A50(volatile LONG *this, _DWORD *a2, _DWORD *a3, int a4) { volatile LONG *v4; // esi volatile LONG v5; // edi unsigned int v6; // eax volatile LONG v7; // edi unsigned int v8; // eax v4 = this; (*(void (__stdcall **)(int))(**((_DWORD **)this + 154) + 472))(a4); (*(void (**)(void))(**((_DWORD **)v4 + 86) + 480))(); *((_DWORD *)v4 + 151) = a2; *((_DWORD *)v4 + 152) = a3; sub_8F9D50(&unk_BA6B10, v4, 0, 0, 0); v5 = *v4; v6 = (*(int (__thiscall **)(volatile LONG *))(*v4 + 144))(v4); (*(void (__thiscall **)(volatile LONG *, unsigned int))(v5 + 172))(v4, pt.x - (v6 >> 1)); v7 = *v4; v8 = (*(int (__thiscall **)(volatile LONG *))(*v4 + 148))(v4); return (*(int (__thiscall **)(volatile LONG *, unsigned int))(v7 + 176))(v4, pt.y - (v8 >> 1)); } //----- (00532B70) -------------------------------------------------------- char __thiscall sub_532B70(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // eax volatile LONG *v16; // edi int v17; // ST4C_4 int v18; // ST48_4 int v19; // ST44_4 int v20; // eax volatile LONG *v21; // edi volatile LONG v22; // ebx const CHAR *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // eax volatile LONG *v26; // edi int v27; // ST4C_4 int v28; // ST48_4 int v29; // ST44_4 int v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx const CHAR *v33; // eax int v34; // eax int v35; // edi int v36; // ebx int v37; // ST48_4 int v38; // ST44_4 int v39; // eax volatile LONG *v40; // eax volatile LONG *v41; // ebx int *v42; // ebx int v43; // edi const CHAR *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi int v46; // [esp+44h] [ebp-28h] int v47; // [esp+48h] [ebp-24h] int v48; // [esp+4Ch] [ebp-20h] volatile LONG *v49; // [esp+50h] [ebp-1Ch] int v50; // [esp+54h] [ebp-18h] int v51; // [esp+58h] [ebp-14h] int v52; // [esp+5Ch] [ebp-10h] int v53; // [esp+68h] [ebp-4h] int v54; // [esp+74h] [ebp+8h] v2 = (int)this; v52 = 0; v53 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v49 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v52 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v8, (int)&v52, v7); if ( !v52 ) return 0; v9 = sub_8FB140(v52, (int)"Panel01", (int)&v50, (int)&v51, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CalculatorWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, v10); else v11 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, 0); v12 = sub_8F3EB0(v50, v51, (int)v11, v2, 0, 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); if ( sub_8F71E0(v52, (int)"LotInput", &v50, &v51, &v47, &v48) ) { v13 = sub_8FB140(v52, (int)"LotInput", (int)&v50, (int)&v51, v3); sub_8F3EB0(v50, v51, (int)v13, v2, 0, 0); *(_DWORD *)(v2 + 344) = sub_45A900(v50 + 2, v51 + 4, v47, v48, v2, 1342177280, 16, 3, 0, 0, 1); } v14 = sub_8FB140(v52, (int)"BtnNor02", (int)&v50, (int)&v51, v3); sub_8FB650(v14, v52, (int)"BtnClick02"); sub_8FB650(v14, v52, (int)"BtnOver02"); v15 = sub_8FE0F0(v50, v51, (int)v14, v2, 0, 0, 0); v16 = v15; v17 = (int)v15; v18 = sub_421050(0); v19 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 148))(v16); v20 = (*(int (__thiscall **)(volatile LONG *))(*v16 + 144))(v16); v21 = sub_8F4A20(0, 1, v20, v19, v18, v17, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v24 = sub_8FB140(v52, (int)"BtnNor04", (int)&v50, (int)&v51, v49); sub_8FB650(v24, v52, (int)"BtnClick04"); sub_8FB650(v24, v52, (int)"BtnOver04"); v25 = sub_8FE0F0(v50, v51, (int)v24, v2, 1, 0, 0); v26 = v25; v27 = (int)v25; v28 = sub_421050(0); v29 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 148))(v26); v30 = (*(int (__thiscall **)(volatile LONG *))(*v26 + 144))(v26); v31 = sub_8F4A20(0, 1, v30, v29, v28, v27, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = *v31; v33 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v31, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v34 = sub_421050(0); v46 = v34; v54 = 0; v35 = v2 + 616; while ( 1 ) { v36 = *(_DWORD *)(v34 + 384); v37 = v34; v38 = *(_DWORD *)(v34 + 384); v39 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v40 = sub_8F4A20(8, v54 * (v36 + 1) + 8, v39 - 16, v38, v37, v2, 0, 0); v41 = *(volatile LONG **)v35; v49 = v40; if ( v41 != v40 ) { if ( v41 ) { if ( !InterlockedDecrement(v41 + 1) && v41 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v41)(v41, 1); v40 = v49; } *(_DWORD *)v35 = v40; if ( v40 ) InterlockedIncrement(v40 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v35 + 240))(0); v35 += 4; if ( ++v54 >= 2 ) break; v34 = v46; } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 616) + 488))(5); v42 = *(int **)(v2 + 616); v43 = *v42; v44 = sub_40C190(-352766661); (*(void (__thiscall **)(int *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v53 = -1; if ( v52 ) { v45 = (void (__thiscall ***)(_DWORD, signed int))v52; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v45 ) (**v45)(v45, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005330D0) -------------------------------------------------------- int __cdecl sub_5330D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x270u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &InputTextWin::`vftable'; *(_DWORD *)(v2 + 232) = &InputTextWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 616), 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C883C: using guessed type void *InputTextWin::`vftable'; // 9C885C: using guessed type void *InputTextWin::`vftable'; //----- (00533230) -------------------------------------------------------- _DWORD *__thiscall sub_533230(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &InputTextWin::`vftable'; *((_DWORD *)this + 58) = &InputTextWin::`vftable'; *((_DWORD *)this + 86) = 0; `eh vector destructor iterator'((char *)this + 616, 4u, 2, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C883C: using guessed type void *InputTextWin::`vftable'; // 9C885C: using guessed type void *InputTextWin::`vftable'; //----- (005332C0) -------------------------------------------------------- char __thiscall sub_5332C0(int this) { int v1; // esi char result; // al v1 = this; result = sub_6F3D10(&off_AB7F2C, 12, 34, (void *)(this + 68), 4u); *(_DWORD *)(v1 + 64) = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005332E0) -------------------------------------------------------- int __thiscall sub_5332E0(_DWORD *this, int a2) { int result; // eax result = a2; this[113] = a2; return result; } //----- (00533370) -------------------------------------------------------- bool __thiscall sub_533370(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) != 0; } //----- (005333F0) -------------------------------------------------------- bool __thiscall sub_5333F0(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D5860(this, a2, a3, a4) != 0; } //----- (00533410) -------------------------------------------------------- int __thiscall sub_533410(_DWORD *this, int a2) { this[112] = a2; return sub_5D60B0(this, a2); } //----- (00533430) -------------------------------------------------------- _DWORD *__thiscall sub_533430(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8F2740(this); *v1 = &ChargedItemInvenWin::`vftable'; v1[58] = &ChargedItemInvenWin::`vftable'; v1[72] = 0; v1[73] = 0; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[79] = 0; v1[80] = 0; v1[81] = 0; v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[85] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[97] = 0; return v1; } // 9C9670: using guessed type void *ChargedItemInvenWin::`vftable'; // 9C968C: using guessed type void *ChargedItemInvenWin::`vftable'; //----- (00533540) -------------------------------------------------------- int __thiscall sub_533540(int this) { int v1; // esi int v2; // edi char *v3; // eax int v4; // edi int v5; // esi signed int v6; // ebx int v7; // esi int result; // eax v1 = this; v2 = **(_DWORD **)(this + 384); v3 = sub_7549E0("%d", *(_DWORD *)(this + 388) + 1); (*(void (__thiscall **)(_DWORD, char *))(v2 + 472))(*(_DWORD *)(v1 + 384), v3); v4 = v1 + 288; v5 = v1 + 288; v6 = 24; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v5 + 608))(-1); v5 += 4; --v6; } while ( v6 ); v7 = 0; do { result = sub_74E250(&unk_ADB2A8, v7); if ( !result ) break; result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 608))(*(_DWORD *)(result + 4)); ++v7; v4 += 4; } while ( v7 < 24 ); return result; } //----- (005335D0) -------------------------------------------------------- char __thiscall sub_5335D0(char *this, int a2, int a3, int a4) { char *v4; // esi char result; // al v4 = this; if ( a2 == 48 ) { sub_533540((int)(this - 232)); LOWORD(a2) = *((_WORD *)v4 + 78); result = sub_6F3D10(&off_AB7F2C, 12, 32, &a2, 2u); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00533640) -------------------------------------------------------- bool __thiscall sub_533640(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D5860(this, a2, a3, a4) != 0; } //----- (00533660) -------------------------------------------------------- int __thiscall sub_533660(_DWORD *this, int a2) { this[112] = a2; return sub_5D60B0(this, a2); } //----- (00533680) -------------------------------------------------------- _DWORD *__thiscall sub_533680(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8F2740(this); *v1 = &CompensationInvWin::`vftable'; v1[58] = &CompensationInvWin::`vftable'; v1[72] = 0; v1[73] = 0; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[79] = 0; v1[80] = 0; v1[81] = 0; v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[85] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[97] = 0; return v1; } // 9C9858: using guessed type void *CompensationInvWin::`vftable'; // 9C9874: using guessed type void *CompensationInvWin::`vftable'; //----- (00533760) -------------------------------------------------------- char __stdcall sub_533760(int a1, int a2, int a3) { return 0; } //----- (005337F0) -------------------------------------------------------- char __thiscall sub_5337F0(_DWORD *this, int a2, int a3, unsigned int a4) { _WORD *v4; // ecx int v6; // ecx if ( a2 == 9 ) { if ( a4 < 0xC0 ) { v4 = (_WORD *)this[a4 + 87]; goto LABEL_4; } return 0; } if ( a2 == 8 ) { v4 = (_WORD *)this[a4 + 279]; LABEL_4: if ( v4 ) sub_5D5B70(v4, a3, 1); return 1; } if ( a2 != 2 || a4 >= 0xC0 ) return 0; v6 = this[362]; if ( !v6 ) return 1; sub_5D5B70(*(_WORD **)(v6 + 4 * a4 + 288), a3, 1); return 1; } //----- (00533870) -------------------------------------------------------- char __thiscall sub_533870(int this, __int16 a2) { return sub_4B8A60(*(_DWORD **)(this + 296), word_ACF574, *(_BYTE *)(this + 344), a2); } // ACF574: using guessed type __int16 word_ACF574; //----- (005338A0) -------------------------------------------------------- int __thiscall sub_5338A0(int this) { int result; // eax if ( !*(_BYTE *)(this + 1674) ) result = sub_533540(*(_DWORD *)(this + 1436)); return result; } //----- (005338D0) -------------------------------------------------------- char sub_5338D0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ChrInv"); return (char)v0; } //----- (00533900) -------------------------------------------------------- char __thiscall sub_533900(_BYTE *this, char a2) { char result; // al result = a2; this[1616] = a2; return result; } //----- (00533910) -------------------------------------------------------- char __thiscall sub_533910(_DWORD *this, int a2) { char result; // al if ( a2 == -1 ) { this[375] = -1; result = 0; } else { this[375] = a2; result = 1; } return result; } //----- (00533940) -------------------------------------------------------- char __thiscall sub_533940(_DWORD *this, int a2) { char result; // al if ( a2 == -1 ) { this[376] = -1; result = 0; } else { this[376] = a2; result = 1; } return result; } //----- (00533970) -------------------------------------------------------- char __usercall sub_533970@(double a1@) { _DWORD *v1; // eax char result; // al v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v1 || (result = sub_4E3850(v1, a1)) != 0 ) result = sub_6F3D10(&off_AB7F2C, 12, 74, 0, 0); return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00533A10) -------------------------------------------------------- char __thiscall sub_533A10(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[414] + 240))(1); (*(void (__stdcall **)(signed int))(*v1[414] + 256))(1); return sub_6F3D10(&off_AB7F2C, 12, 76, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00533A50) -------------------------------------------------------- int __thiscall sub_533A50(int this, char a2) { char v2; // al v2 = *(_BYTE *)(this + 1673); *(_BYTE *)(this + 1675) = v2 && a2; return (*(int (__stdcall **)(char))(**(_DWORD **)(this + 1472) + 256))(v2); } //----- (00533A90) -------------------------------------------------------- int __thiscall sub_533A90(int this, char a2) { *(_BYTE *)(this + 1676) = *(_BYTE *)(this + 1674) && a2; return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 1476) + 256))(*(unsigned __int8 *)(this + 1676)); } //----- (00533AD0) -------------------------------------------------------- void __thiscall sub_533AD0(int this) { *(_WORD *)(this + 1673) = 257; } //----- (00533AE0) -------------------------------------------------------- BOOL __thiscall sub_533AE0(_BYTE *this) { return this[1675] || this[1676]; } //----- (00533B30) -------------------------------------------------------- void __thiscall sub_533B30(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi v4 = this; if ( a2 == 27 && a3 ) { if ( *a3 ) { if ( *a3 == 1 ) this[3] = 2; } else { sub_6F3D10(&off_AB7F2C, 12, 34, this + 15, 4u); v4[14] = 0; } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00533B80) -------------------------------------------------------- void **__thiscall sub_533B80(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &InvWin::`vftable'; v1[58] = &InvWin::`vftable'; v1[115] = 0; v1[116] = 0; v1[95] = 0; v1[112] = (void *)-1; v1[113] = (void *)9; sub_5D5B70(v1, 0, 1); *((_WORD *)v1 + 228) = 0; return v1; } // 9C9A40: using guessed type void *InvWin::`vftable'; // 9C9A5C: using guessed type void *InvWin::`vftable'; //----- (00533C20) -------------------------------------------------------- LONG __thiscall sub_533C20(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &InvWin::`vftable'; this[58] = &InvWin::`vftable'; v2 = this[116]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[115]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_5D5650(v1); } // 9C9A40: using guessed type void *InvWin::`vftable'; // 9C9A5C: using guessed type void *InvWin::`vftable'; //----- (00533CD0) -------------------------------------------------------- char __thiscall sub_533CD0(void *this, int a2, int a3, int a4) { byte_BA6BD0 = 1; (*(void (**)(void))(*(_DWORD *)this + 528))(); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (00533CF0) -------------------------------------------------------- void **__thiscall sub_533CF0(void **this) { void **v1; // esi int v2; // eax v1 = this; sub_5D6D00(this); *v1 = &CompensationItemIcon::`vftable'; v1[58] = &CompensationItemIcon::`vftable'; v1[114] = &PgWinDrop::`vftable'; v2 = (int)(v1 + 118); v1[116] = 0; *(_DWORD *)(v2 + 64) = 0; *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; v1[115] = v1 + 118; v1[112] = (void *)-1; v1[113] = (void *)-1; return v1; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9C9CD0: using guessed type void *CompensationItemIcon::`vftable'; // 9C9CEC: using guessed type void *CompensationItemIcon::`vftable'; //----- (00533DE0) -------------------------------------------------------- _DWORD *__thiscall sub_533DE0(_DWORD **this, int a2) { _DWORD **v2; // esi unsigned __int16 *v3; // edi _DWORD *result; // eax _DWORD *v5; // esi v2 = this; v3 = (unsigned __int16 *)sub_5D5470(this[a2 + 72]); result = 0; if ( v3 ) { v5 = v2[a2 + 72]; v5[120] = 3; v5[122] = 0; v5[123] = v3; v5[124] = 0; v5[121] = a2; v5[134] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v3 + 12))(v3); v5[116] = v5; dword_BA6BCC = (int)(v5 + 114); result = sub_6BA9B0(v3[4]); } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00533E60) -------------------------------------------------------- char *__thiscall sub_533E60(char *this) { char *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &InventoryWin::`vftable'; *((_DWORD *)v1 + 58) = &InventoryWin::`vftable'; *((_DWORD *)v1 + 309) = &PgWinDrop::`vftable'; *((_DWORD *)v1 + 310) = 0; *((_DWORD *)v1 + 311) = 0; v2 = (int)(v1 + 1248); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; *((_DWORD *)v1 + 366) = 0; sub_8D0610(v1 + 1508); sub_8D06C0((float *)v1 + 384); sub_8D4790((_DWORD *)v1 + 390); *((_DWORD *)v1 + 399) = 0; *((_DWORD *)v1 + 410) = 0; *((_DWORD *)v1 + 411) = 0; *((_DWORD *)v1 + 310) = v1 + 1248; memset(v1 + 348, 0, 0x300u); *((_DWORD *)v1 + 279) = 0; *((_DWORD *)v1 + 280) = 0; *((_DWORD *)v1 + 281) = 0; *((_DWORD *)v1 + 282) = 0; *((_DWORD *)v1 + 283) = 0; *((_DWORD *)v1 + 284) = 0; *((_DWORD *)v1 + 285) = 0; *((_DWORD *)v1 + 286) = 0; *((_DWORD *)v1 + 287) = 0; *((_DWORD *)v1 + 288) = 0; *((_DWORD *)v1 + 289) = 0; *((_DWORD *)v1 + 290) = 0; *((_DWORD *)v1 + 291) = 0; *((_DWORD *)v1 + 292) = 0; *((_DWORD *)v1 + 293) = 0; *((_DWORD *)v1 + 294) = 0; *((_DWORD *)v1 + 295) = 0; *((_DWORD *)v1 + 296) = 0; *((_DWORD *)v1 + 297) = 0; *((_DWORD *)v1 + 298) = 0; *((_DWORD *)v1 + 299) = 0; *((_DWORD *)v1 + 300) = 0; *((_DWORD *)v1 + 301) = 0; *((_DWORD *)v1 + 302) = 0; *((_DWORD *)v1 + 303) = 0; *((_DWORD *)v1 + 304) = 0; *((_DWORD *)v1 + 305) = 0; *((_DWORD *)v1 + 306) = 0; *((_DWORD *)v1 + 307) = 0; *((_DWORD *)v1 + 308) = 0; *((_DWORD *)v1 + 342) = 0; *((_DWORD *)v1 + 343) = 0; *((_DWORD *)v1 + 344) = 0; *((_DWORD *)v1 + 345) = 0; *((_DWORD *)v1 + 346) = 0; *((_DWORD *)v1 + 347) = 0; *((_DWORD *)v1 + 348) = 0; *((_DWORD *)v1 + 349) = 0; *((_DWORD *)v1 + 358) = 0; *((_DWORD *)v1 + 373) = 0; v1[1488] = 0; *((_DWORD *)v1 + 359) = 0; *((_DWORD *)v1 + 362) = 0; *((_DWORD *)v1 + 365) = 0; v3 = *((_DWORD *)v1 + 366); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 366) = 0; } *((_DWORD *)v1 + 367) = -1; *((_DWORD *)v1 + 400) = 0; *((_DWORD *)v1 + 401) = 0; *((_DWORD *)v1 + 402) = 0; *((_DWORD *)v1 + 403) = 0; *((_WORD *)v1 + 808) = 0; *((_DWORD *)v1 + 376) = -1; *((_DWORD *)v1 + 375) = -1; *((_DWORD *)v1 + 414) = 0; *((_DWORD *)v1 + 415) = 0; *((_DWORD *)v1 + 416) = 0; *((_DWORD *)v1 + 417) = 0; *((_DWORD *)v1 + 408) = 0; *((_DWORD *)v1 + 409) = 0; *((_DWORD *)v1 + 407) = 0; v4 = *((_DWORD *)v1 + 410); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 410) = 0; } v5 = *((_DWORD *)v1 + 411); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 411) = 0; } *((_DWORD *)v1 + 412) = 0; *((_DWORD *)v1 + 368) = 0; *((_DWORD *)v1 + 369) = 0; *(_DWORD *)(v1 + 1673) = 0; v1[1677] = 1; v1[2548] = 0; *((_DWORD *)v1 + 420) = 0; *((_DWORD *)v1 + 636) = 0; *((_DWORD *)v1 + 431) = 0; *((_DWORD *)v1 + 432) = 0; *((_DWORD *)v1 + 433) = 0; *((_DWORD *)v1 + 434) = 0; *((_DWORD *)v1 + 435) = 0; *((_DWORD *)v1 + 436) = 0; *((_DWORD *)v1 + 437) = 0; *((_DWORD *)v1 + 438) = 0; *((_DWORD *)v1 + 439) = 0; *((_DWORD *)v1 + 440) = 0; *((_DWORD *)v1 + 441) = 0; *((_DWORD *)v1 + 442) = 0; *((_DWORD *)v1 + 635) = 0; *((_DWORD *)v1 + 421) = 0; *((_DWORD *)v1 + 422) = 0; memset(v1 + 1772, 0, 0x300u); *((_DWORD *)v1 + 423) = 0; *((_DWORD *)v1 + 424) = 0; *((_DWORD *)v1 + 425) = 0; *((_DWORD *)v1 + 426) = 0; *((_DWORD *)v1 + 427) = 0; *((_DWORD *)v1 + 428) = 0; *((_DWORD *)v1 + 429) = 0; *((_DWORD *)v1 + 430) = 0; *((_DWORD *)v1 + 642) = -1; *((_DWORD *)v1 + 641) = -1; *((_DWORD *)v1 + 370) = 0; v1[2557] = 0; *((_DWORD *)v1 + 640) = 9999; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9C9F58: using guessed type void *InventoryWin::`vftable'; // 9C9F74: using guessed type void *InventoryWin::`vftable'; //----- (00534220) -------------------------------------------------------- LONG __thiscall sub_534220(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; *this = &InventoryWin::`vftable'; this[58] = &InventoryWin::`vftable'; v2 = (volatile LONG *)this[370]; this[373] = 0; if ( v2 ) { sub_8F2BC0(v2, 2, 0, 0); v1[370] = 0; } v3 = v1[411]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[410]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[399]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); sub_8D47C0(v1 + 390); nullsub_6(v1 + 384); v6 = v1[366]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[312] = &DropContents::`vftable'; v1[309] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9C9F58: using guessed type void *InventoryWin::`vftable'; // 9C9F74: using guessed type void *InventoryWin::`vftable'; //----- (00534380) -------------------------------------------------------- int __thiscall sub_534380(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = sub_5D5470((_DWORD *)this[a2 + 87]); v2[314] = 0; v2[316] = 0; if ( result ) { v2[317] = result; v2[318] = 0; v2[315] = a2; result = (*(int (__thiscall **)(int))(*(_DWORD *)result + 12))(result); v2[328] = result; } v2[311] = v2; dword_BA6BCC = (int)(v2 + 309); return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00534420) -------------------------------------------------------- _DWORD *__thiscall sub_534420(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned __int16 *v3; // edi v2 = this; v3 = (unsigned __int16 *)sub_5D5470((_DWORD *)this[a2 + 87]); v2[314] = 0; v2[316] = 0; if ( v3 ) { v2[317] = v3; v2[318] = 0; v2[315] = a2; v2[328] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v3 + 12))(v3); } v2[311] = v2; dword_BA6BCC = (int)(v2 + 309); return sub_6BA9B0(v3[4]); } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005344A0) -------------------------------------------------------- _DWORD *__thiscall sub_5344A0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned __int16 *v3; // edi v2 = this; v3 = (unsigned __int16 *)sub_5D5470((_DWORD *)this[a2 + 87]); v2[314] = 0; v2[316] = 0; if ( v3 ) { v2[317] = v3; v2[318] = 0; v2[315] = a2; v2[328] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v3 + 12))(v3); } v2[311] = v2; dword_BA6BCC = (int)(v2 + 309); return sub_6BA9B0(v3[4]); } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00534520) -------------------------------------------------------- _DWORD *__thiscall sub_534520(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned __int16 *v3; // edi v2 = this; v3 = (unsigned __int16 *)sub_5D5470((_DWORD *)this[a2 + 87]); v2[314] = 0; v2[316] = 0; if ( v3 ) { v2[317] = v3; v2[318] = 0; v2[315] = a2; v2[328] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v3 + 12))(v3); } v2[311] = v2; dword_BA6BCC = (int)(v2 + 309); return sub_6BA9B0(v3[4]); } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005345A0) -------------------------------------------------------- int __thiscall sub_5345A0(_DWORD *this, unsigned __int16 a2) { _DWORD *v2; // edi int v3; // esi int result; // eax int v5; // ecx int v6; // ecx v2 = this; v3 = *(_DWORD *)(this[74] + 1216); result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v3 + 260))(*(_DWORD *)(this[74] + 1216)); if ( !(_BYTE)result ) { sub_68C180(v3, a2); v5 = v2[59]; if ( v5 ) (*(void (__stdcall **)(signed int, unsigned __int16 *, _DWORD *))(*(_DWORD *)v5 + 4))(72, &a2, v2 + 58); v6 = v2[59]; if ( v6 ) (*(void (__stdcall **)(signed int, unsigned __int16 *, _DWORD *))(*(_DWORD *)v6 + 20))(72, &a2, v2 + 58); result = (*(int (__thiscall **)(_DWORD *, signed int, unsigned __int16 *, _DWORD *))(v2[58] + 20))( v2 + 58, 72, &a2, v2 + 58); } return result; } //----- (00534620) -------------------------------------------------------- char __thiscall sub_534620(_DWORD *this) { char result; // al _DWORD *v2; // ecx result = 0; if ( dword_B6740C ) { if ( dword_ACEC24 == 9 ) dword_ACEC24 = 0; dword_B6740C = 0; this[371] = -1; v2 = (_DWORD *)this[370]; if ( v2 ) result = sub_8F86A0(&unk_BA6B10, v2); } return result; } // ACEC24: using guessed type int dword_ACEC24; // B6740C: using guessed type int dword_B6740C; //----- (00534660) -------------------------------------------------------- signed int __thiscall sub_534660(_DWORD **this, __int16 a2) { signed int v2; // esi _DWORD **v3; // edi int v4; // eax _WORD *v5; // eax v2 = 0; v3 = this + 87; while ( 1 ) { v4 = sub_5D5470(*v3); if ( v4 ) { v5 = *(_WORD **)(v4 + 112); if ( v5 ) { if ( *v5 == a2 ) break; } } ++v2; ++v3; if ( v2 >= 192 ) return 193; } return v2; } //----- (005346B0) -------------------------------------------------------- int __thiscall sub_5346B0(char *this, int a2, int a3) { int v3; // ebx char *v4; // esi unsigned int v5; // eax _DWORD **v6; // esi unsigned int v7; // edi _DWORD *v8; // eax int v9; // ecx v3 = 0; v4 = this; v5 = 192; if ( (_BYTE)a3 ) { a3 = 0; sub_6F3170(2, &a3); v5 = 8 * (3 * a3 + 6); } if ( v5 > 0 ) { v6 = (_DWORD **)(v4 + 348); v7 = v5; do { v8 = (_DWORD *)sub_5D5470(*v6); if ( v8 ) { v9 = v8[28]; if ( v9 ) { if ( *(_DWORD *)(v9 + 374) == a2 ) v3 += (*(int (__thiscall **)(_DWORD *))(*v8 + 12))(v8); } } ++v6; --v7; } while ( v7 ); } return v3; } //----- (00534730) -------------------------------------------------------- __int16 __thiscall sub_534730(_DWORD **this, __int16 a2, char a3) { _DWORD **v3; // ebx _DWORD *v4; // eax _DWORD *v5; // edi signed int v6; // esi int v7; // eax signed int v8; // eax _DWORD *v9; // ecx v3 = this; v4 = sub_6CD770(); if ( v4 ) { v5 = (_DWORD *)v4[1]; v6 = 0; LOWORD(v4) = sub_53DA30((_DWORD *)v4[1]); if ( (unsigned __int16)v4 > 0u ) { do { v7 = sub_74E2E0(v5, v6); if ( v7 ) { if ( *(_WORD *)(v7 + 4) == a2 ) { if ( *(_BYTE *)(v7 + 32) ) { if ( !*(_BYTE *)(v7 + 29) ) { v8 = sub_534660(v3, *(_WORD *)(v7 + 34)); if ( v8 < 193 ) { v9 = v3[v8 + 87]; if ( a3 ) sub_5D5B50(v9); else sub_5D5B30((int)v9); } } } } } ++v6; LOWORD(v4) = sub_53DA30(v5); } while ( v6 < (unsigned __int16)v4 ); } } return (signed __int16)v4; } //----- (005347C0) -------------------------------------------------------- LONG __thiscall sub_5347C0(float *this) { float *v1; // esi LONG result; // eax v1 = this; if ( *((_DWORD *)this + 376) != -1 ) { sub_8D4750((_DWORD *)this + 390, flt_ACCFCC); v1[387] = v1[393]; sub_8D06E0(v1 + 384, flt_ACCFCC, 1); (*(void (__stdcall **)(_DWORD, signed int))(*(_DWORD *)LODWORD(v1[*((_DWORD *)v1 + 376) + 87]) + 116))( *((_DWORD *)v1 + 399), 1); sub_85C4D0((_DWORD *)LODWORD(v1[*((_DWORD *)v1 + 376) + 87])); result = sub_85C6F0((_DWORD *)LODWORD(v1[*((_DWORD *)v1 + 376) + 87])); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00534850) -------------------------------------------------------- int __thiscall sub_534850(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // ecx int result; // eax void (__stdcall *v5)(signed int, int); // eax int v6; // [esp+0h] [ebp-4h] v2 = this; v3 = this[431]; *((_BYTE *)v2 + 1652) = a2; result = (*(int (**)(void))(*(_DWORD *)v3 + 260))(); if ( (_BYTE)result ) { v5 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v2[407] + 256); if ( *((_BYTE *)v2 + 1652) ) { v5(1, v6); result = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v2[412] + 256))(0); } else { v5(0, v6); result = (*(int (__cdecl **)(signed int))(*(_DWORD *)v2[412] + 256))(1); } } return result; } //----- (005348C0) -------------------------------------------------------- signed int __thiscall sub_5348C0(_DWORD **this, __int16 a2) { signed int v2; // esi _DWORD **v3; // edi int v4; // eax _WORD *v5; // eax v2 = 0; v3 = this + 279; while ( 1 ) { if ( *v3 ) { v4 = sub_5D5470(*v3); if ( v4 ) { v5 = *(_WORD **)(v4 + 112); if ( v5 ) { if ( *v5 == a2 ) break; } } } ++v2; ++v3; if ( v2 >= 30 ) return 31; } return v2; } //----- (00534910) -------------------------------------------------------- char __thiscall sub_534910(_DWORD *this) { _DWORD *v1; // esi __int16 v3; // [esp+4h] [ebp-4h] v1 = this; v3 = *(_WORD *)(this[362] + 388); sub_6F3D10(&off_AB7F2C, 12, 44, &v3, 2u); v3 = *(_WORD *)(v1[359] + 388); return sub_6F3D10(&off_AB7F2C, 12, 32, &v3, 2u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00534970) -------------------------------------------------------- char __thiscall sub_534970(_DWORD **this, int a2, int a3, int a4, int a5) { _DWORD **v5; // edi char result; // al __int16 v7; // ax _DWORD *v8; // eax char *v9; // eax int v10; // ST10_4 const CHAR *v11; // eax char *v12; // eax v5 = this; if ( a2 != 12 || a3 != 35 ) return 0; v7 = *(_WORD *)(a5 + 4); if ( v7 == 4161 ) { v8 = (_DWORD *)sub_74E210(&unk_ADB2A8, *(_DWORD *)a5); if ( v8 ) sub_74E1B0(&unk_ADB2A8, v8); if ( v5[3] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v5[3] + 4))(48, 0, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v5[3] + 20))(48, 0, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))v5[2][5])(v5 + 2, 48, 0, v5 + 2); v5[5] = (_DWORD *)2; result = 1; } else { if ( v7 == 4165 ) { v9 = (char *)sub_40C190(-1851208242); sub_462CA0(1, v9); } else { v10 = *(unsigned __int16 *)(a5 + 4); v11 = sub_40C190(-385076149); v12 = sub_7549E0("%s : %d", v11, v10); sub_462CA0(1, v12); } v5[5] = (_DWORD *)2; result = 1; } return result; } //----- (00534A60) -------------------------------------------------------- void __thiscall sub_534A60(_DWORD *this, float a2) { int v2; // esi int v3; // eax unsigned int v4; // eax int v5; // edi unsigned int v6; // eax void (__thiscall *v7)(int, signed int); // edx v2 = (int)this; v3 = this[113]; if ( v3 == 9 ) { v4 = this[112]; if ( v4 < 0xC0 ) v5 = dword_ADA234[v4]; else v5 = 0; } else { if ( v3 != 8 ) goto LABEL_11; v6 = this[112]; if ( v6 < 0x1E ) v5 = dword_ADA534[v6]; else v5 = 0; } if ( v5 != sub_5D5470(this) ) sub_5D5B70((_WORD *)v2, v5, 1); LABEL_11: v7 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 256); if ( *(_BYTE *)(v2 + 456) ) { v7(v2, 1); *(_BYTE *)(v2 + 254) = 1; if ( !sub_5D5470((_DWORD *)v2) ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); sub_5D31A0(v2, a2); } else { v7(v2, 0); *(_BYTE *)(v2 + 254) = 0; } } // ADA534: using guessed type int dword_ADA534[]; //----- (00534B20) -------------------------------------------------------- void __thiscall sub_534B20(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 457) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 296), *(_DWORD *)(v1 + 448)); } } //----- (00534B50) -------------------------------------------------------- void __thiscall sub_534B50(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 457) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 324), *(_DWORD *)(v1 + 448)); } } //----- (00534B80) -------------------------------------------------------- int __thiscall sub_534B80(void *this) { int v1; // esi int result; // eax int v3; // ebx int *v4; // edi const CHAR *v5; // eax v1 = (int)this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 324))(0.0); result = sub_5D5470((_DWORD *)v1); v3 = result; if ( result ) { if ( !*(_BYTE *)(v1 + 457) ) { result = sub_402BF0((_DWORD *)v1); if ( result ) { v4 = *(int **)(v1 + 272); if ( v4 ) { if ( dword_ACEC24 && dword_ACEC24 != 7 && dword_ACEC24 != 9 && dword_ACEC24 != 2 ) { sub_5488D0((_DWORD **)v4, v3, 1); result = sub_8F2F90(v1); } else if ( *(_BYTE *)(dword_ACDC84 + 40) & 1 ) { v5 = sub_4090F0(1110643255); sub_53F3D0((_DWORD **)v4, (int)v5); result = sub_8F2F90(v1); } else { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD))(*v4 + 260))(*(_DWORD *)(v1 + 272)) ) sub_547C20(v4, v3); result = sub_8F2F90(v1); } } } } } return result; } // ACDC84: using guessed type int dword_ACDC84; // ACEC24: using guessed type int dword_ACEC24; //----- (00534C50) -------------------------------------------------------- int __thiscall sub_534C50(void *this) { int v1; // esi int result; // eax int v3; // edi int *v4; // ecx v1 = (int)this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 324))(0.0); result = sub_5D5470((_DWORD *)v1); v3 = result; if ( result ) { if ( !*(_BYTE *)(v1 + 457) ) { result = sub_402BF0((_DWORD *)v1); if ( result ) { v4 = *(int **)(v1 + 272); if ( v4 ) { if ( dword_ACEC24 && dword_ACEC24 != 2 ) { sub_5488D0((_DWORD **)v4, v3, 1); result = sub_8F2F90(v1); } else { sub_547C20(v4, v3); result = sub_8F2F90(v1); } } } } } return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (00534CC0) -------------------------------------------------------- int __thiscall sub_534CC0(_DWORD *this) { int v1; // ebx int v2; // eax _DWORD *v3; // esi const CHAR *v4; // edi HDC v5; // ebx signed int v6; // esi int v7; // eax int v8; // ecx _DWORD *v10; // [esp+4h] [ebp-108h] int v11; // [esp+8h] [ebp-104h] v1 = (int)this; v2 = this[112]; v10 = this; if ( v2 == -1 ) { this[68] = 0; sub_5C1AD0((char *)dword_AD01E8); } else { v3 = sub_53DB70(v2); *(_DWORD *)(v1 + 272) = dword_AD01E8; sub_5C1AD0((char *)dword_AD01E8); (*(void (__stdcall **)(_DWORD, _DWORD *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 0, v3 + 1, 255, 255, 255, 0); (*(void (__stdcall **)(signed int, const char *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)dword_AD01E8 + 548))( 1, " ", 255, 255, 255, 0); v4 = (const CHAR *)(v3 + 95); if ( *((_BYTE *)v3 + 380) != 45 ) { v5 = *(HDC *)(sub_421050(0) + 192); v6 = 2; do { v7 = sub_8F5700((int)&v11, v4, v5, 200); if ( !v7 ) break; v8 = dword_AD01E8; *((_BYTE *)&v11 + v7) = 0; v4 += v7; (*(void (__stdcall **)(signed int, int *, signed int, signed int, signed int, _DWORD))(*(_DWORD *)v8 + 548))( v6++, &v11, 255, 255, 255, 0); } while ( v6 < 20 ); v1 = (int)v10; } (*(void (**)(void))(**(_DWORD **)(v1 + 272) + 436))(); } return sub_8F2F90(v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (00534E20) -------------------------------------------------------- int __thiscall sub_534E20(_DWORD *this) { int v1; // edi unsigned int v2; // eax int v3; // esi int result; // eax int *v5; // ecx v1 = (int)this; v2 = this[113]; if ( v2 >= 0xC0 ) return sub_8F2F90(v1); v3 = dword_ADAEF8[v2]; if ( !v3 ) return sub_8F2F90(v1); result = sub_402BF0(this); if ( result ) { v5 = *(int **)(v1 + 272); if ( v5 ) { if ( dword_ACEC24 && dword_ACEC24 != 2 ) { sub_5488D0((_DWORD **)v5, v3, 1); return sub_8F2F90(v1); } sub_547C20(v5, v3); return sub_8F2F90(v1); } } return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (00534E80) -------------------------------------------------------- char __thiscall sub_534E80(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[113]); return (char)v2; } //----- (00534EB0) -------------------------------------------------------- char __thiscall sub_534EB0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[113]); return (char)v2; } //----- (00534EE0) -------------------------------------------------------- int *__thiscall sub_534EE0(int this) { int v1; // esi int v2; // edi char *v3; // eax int v4; // esi signed int v5; // edi _WORD *v6; // ecx unsigned int v7; // eax int *result; // eax v1 = this; v2 = **(_DWORD **)(this + 384); v3 = sub_7549E0("%d", *(_DWORD *)(this + 388) + 1); (*(void (__thiscall **)(_DWORD, char *))(v2 + 472))(*(_DWORD *)(v1 + 384), v3); v4 = v1 + 288; v5 = 24; do { v6 = *(_WORD **)v4; v7 = *(_DWORD *)(*(_DWORD *)v4 + 452); if ( v7 < 0xC0 && dword_ADAEF8[v7] ) { if ( v7 < 0xC0 ) result = sub_5D5B70(v6, dword_ADAEF8[v7], 1); else result = sub_5D5B70(v6, 0, 1); } else { result = sub_5D5B70(v6, 0, 1); } v4 += 4; --v5; } while ( v5 ); return result; } //----- (00534F70) -------------------------------------------------------- void __fastcall sub_534F70(int a1, int a2, int a3) { __int16 v3; // bx int v4; // esi _DWORD *v5; // edi unsigned int v6; // eax const CHAR *v7; // eax int v8; // [esp+0h] [ebp-4h] v8 = a1; if ( !dword_BA6BCC ) { v3 = a3; v4 = sub_5D5470(*(_DWORD **)(a1 + 4 * a3 + 288)); if ( v4 ) { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = sub_6859E0(&byte_ADA230, v4); if ( v6 == -1 ) { v7 = sub_40C190(-1851208242); sub_492060(v5, (int)v7); } else { LOWORD(v8) = v3 & 0x3FF | 0x800; LOWORD(a3) = v6 & 0x3FF | 0x2400; sub_4B7B90(v5, (__int16 *)&v8, (__int16 *)&a3); sub_6BA9B0(*(unsigned __int16 *)(v4 + 8)); } } } } // ADA230: using guessed type char byte_ADA230; // BA6BCC: using guessed type int dword_BA6BCC; //----- (00535020) -------------------------------------------------------- int *__thiscall sub_535020(char *this, int a2, int a3, int a4) { int *result; // eax if ( a2 == 49 ) result = sub_534EE0((int)(this - 232)); return result; } //----- (00535040) -------------------------------------------------------- void __thiscall sub_535040(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 0); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (005350D0) -------------------------------------------------------- void __thiscall sub_5350D0(_DWORD **this, int a2) { _DWORD *v2; // esi int v3; // edi int **v4; // ebx const CHAR *v5; // ST0C_4 _DWORD *v6; // eax v2 = this; if ( dword_AB0C84 == 2 ) { v3 = sub_5D5470(this[a2 + 87]); v2[86] = a2; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 12))(v3) <= 1 || (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) { sub_4B8A60((_DWORD *)v2[74], word_ACF574, *((_BYTE *)v2 + 344), 1); } else { v4 = (int **)v2[74]; v5 = sub_40C190(927548051); v6 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 12))(v3); sub_4A4E90(v4, v2, (_DWORD *)0x13, v6, (int)v5, 1); } } } // AB0C84: using guessed type int dword_AB0C84; // ACF574: using guessed type __int16 word_ACF574; //----- (00535180) -------------------------------------------------------- _DWORD *__thiscall sub_535180(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // esi int v4; // ecx _DWORD *v5; // edi unsigned __int8 *v6; // eax result = a2; v3 = this; v4 = this[(_DWORD)a2 + 87]; if ( !*(_BYTE *)(v4 + 457) ) { result = (_DWORD *)sub_5D5470((_DWORD *)v4); v5 = result; if ( result ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*result + 4))(result) == 27 ) { v6 = (unsigned __int8 *)sub_4522A0((const char *)(v5[28] + 2)); if ( v6 ) v3[324] = *v6; } v3[314] = 0; v3[316] = 0; v3[315] = a2; v3[317] = v5; v3[318] = 0; v3[328] = (*(int (__thiscall **)(_DWORD *))(*v5 + 12))(v5); v3[311] = v3; dword_BA6BCC = (int)(v3 + 309); result = sub_6BA9B0(*((unsigned __int16 *)v5 + 4)); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (00535240) -------------------------------------------------------- void __thiscall sub_535240(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 1); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (005352E0) -------------------------------------------------------- void __thiscall sub_5352E0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 1); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (00535370) -------------------------------------------------------- char __thiscall sub_535370(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // eax _DWORD *v6; // ecx int v7; // eax int **v8; // ebx const CHAR *v9; // ST0C_4 _DWORD *v10; // eax int v11; // eax char *v12; // eax volatile LONG *v13; // eax v2 = this; v3 = (_DWORD *)sub_5D5470((_DWORD *)this[a2 + 87]); v4 = v3; if ( v3 && v3[28] ) { if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { v5 = *v3; v6 = v4; if ( !byte_B9200D ) { v7 = (*(int (__thiscall **)(_DWORD *))(v5 + 16))(v4); LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; if ( v7 != 1 ) { v8 = (int **)v2[74]; v9 = sub_40C190(1284537471); v10 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 12))(v4); LOBYTE(v3) = sub_4A4E90(v8, v2, (_DWORD *)0x11, v10, (int)v9, 1); return (char)v3; } goto LABEL_13; } } else { if ( !(*(_BYTE *)(dword_ACDC84 + 36) & 0x20) ) { if ( byte_B9200D || (*(int (__thiscall **)(_DWORD *))(*v3 + 16))(v3) != 1 ) { LOBYTE(v3) = sub_4B7AD0((_DWORD *)v2[74], a2, 1); return (char)v3; } LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; LABEL_13: v12 = (char *)sub_40C190(1245915713); v13 = sub_462C30(2, v12); if ( v2 ) LOBYTE(v3) = (**((int (__stdcall ***)(int))v13 + 58))((int)(v2 + 58)); else LOBYTE(v3) = (**((int (__stdcall ***)(_DWORD))v13 + 58))(0); return (char)v3; } v5 = *v3; v6 = v4; } v11 = (*(int (__thiscall **)(_DWORD *))(v5 + 12))(v6); LOBYTE(v3) = sub_4B7AD0((_DWORD *)v2[74], a2, v11); } return (char)v3; } // ACDC84: using guessed type int dword_ACDC84; // ACEC20: using guessed type int dword_ACEC20; // B9200D: using guessed type char byte_B9200D; //----- (005354B0) -------------------------------------------------------- void __thiscall sub_5354B0(_DWORD **this, int a2) { __int16 v2; // bx _DWORD **v3; // edi int v4; // eax int v5; // esi unsigned int v6; // eax const CHAR *v7; // eax _DWORD *v8; // ecx __int16 v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = sub_5D5470(this[a2 + 87]); v5 = v4; if ( v4 ) { v6 = sub_62E220(v4); if ( v6 == -1 ) { v7 = sub_40C190(-1851208242); sub_492060(v3[74], (int)v7); } else { LOWORD(a2) = v6 & 0x3FF | 0x1800; v8 = v3[74]; v9 = v2 & 0x3FF | 0x2400; sub_4B7B90(v8, &v9, (__int16 *)&a2); sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } } } //----- (00535550) -------------------------------------------------------- void __thiscall sub_535550(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 1); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (005355F0) -------------------------------------------------------- void __thiscall sub_5355F0(_DWORD **this, int a2) { __int16 v2; // bx _DWORD **v3; // edi int v4; // eax int v5; // esi signed int v6; // eax const CHAR *v7; // eax _DWORD *v8; // ecx __int16 v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = sub_5D5470(this[a2 + 87]); v5 = v4; if ( v4 ) { v6 = sub_718850(v4); if ( v6 == -1 ) { v7 = sub_40C190(-1851208242); sub_492060(v3[74], (int)v7); } else { LOWORD(a2) = v6 & 0x3FF; v8 = v3[74]; v9 = v2 & 0x3FF | 0x2400; sub_4B7B90(v8, &v9, (__int16 *)&a2); sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } } } //----- (00535690) -------------------------------------------------------- void __thiscall sub_535690(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 1); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (00535730) -------------------------------------------------------- void __thiscall sub_535730(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; if ( dword_AD8EBC[1924] != 5 && sub_5D5470(this[a2 + 279]) ) { v3 = 0; while ( dword_ADA234[v3] ) { if ( (unsigned int)++v3 >= 0xC0 ) return; } if ( v3 != -1 ) sub_4C1410(v2[74], a2, v3); } } //----- (00535790) -------------------------------------------------------- char __thiscall sub_535790(_DWORD **this, int a2) { int v2; // eax char v3; // bl int v4; // ecx LOBYTE(v2) = (_BYTE)dword_AD8EBC; if ( dword_AD8EBC[1924] != 5 ) { v3 = a2; v2 = sub_5D5470(this[a2 + 279]); if ( v2 ) { v4 = *(_DWORD *)(v2 + 112); v2 = 0; while ( dword_ADA234[v2] ) { if ( (unsigned int)++v2 >= 0xC0 ) goto LABEL_8; } if ( v2 != -1 ) goto LABEL_9; LABEL_8: if ( *(_DWORD *)(v4 + 102) != 5 ) return v2; LABEL_9: LOBYTE(a2) = v3; BYTE1(a2) = 8; LOBYTE(v2) = sub_6F3D10(&off_AB7F2C, 12, 21, &a2, 2u); } } return v2; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00535800) -------------------------------------------------------- void __thiscall sub_535800(_DWORD **this, int a2) { if ( dword_ACEC24 != 6 ) sub_535730(this, a2); } // ACEC24: using guessed type int dword_ACEC24; //----- (00535820) -------------------------------------------------------- char __thiscall sub_535820(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx int v4; // edi _DWORD *v5; // esi _DWORD *v6; // eax int v7; // eax int v8; // ebx int v9; // ecx int v10; // edi int v11; // eax char result; // al _DWORD *v13; // ecx int v14; // ebx int v15; // edi unsigned int v16; // ST20_4 _DWORD *v17; // esi const CHAR *v18; // eax __int16 v19; // dx int **v20; // ebx const CHAR *v21; // eax __int16 v22; // bx _DWORD *v23; // ecx int v24; // eax int v25; // eax int v26; // ecx int v27; // eax _DWORD *v28; // ecx int v29; // eax int v30; // eax _DWORD *v31; // ecx __int16 v32; // [esp+14h] [ebp-4h] v3 = a2; v4 = a2[2]; v5 = this; if ( !v4 || v4 == 1 || v4 == 5 || v4 == 6 || v4 == 7 ) goto LABEL_9; if ( v4 != 19 ) { if ( v4 != 3 && v4 != 13 ) return 0; LABEL_9: if ( v4 != 19 ) goto LABEL_11; } v6 = (_DWORD *)sub_6D3800(); if ( !sub_6D31E0(v6) ) return 0; LABEL_11: if ( !v3[4] ) { v7 = v3[5]; if ( v7 ) sub_6BA9B0(*(unsigned __int16 *)(v7 + 8)); } v8 = v3[3]; if ( !v4 ) { if ( v8 != a3 ) { if ( !*((_BYTE *)v5 + 1488) ) { LABEL_20: v13 = (_DWORD *)v5[74]; v32 = v8 & 0x3FF | 0x2400; LOWORD(a2) = a3 & 0x3FF | 0x2400; sub_4B7B90(v13, &v32, (__int16 *)&a2); return 1; } v9 = v5[74]; *((_BYTE *)v5 + 1488) = 0; v10 = *(_DWORD *)(v9 + 744); if ( v10 ) { v11 = sub_5D5470((_DWORD *)v5[v8 + 87]); if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v11 + 12))(v11) > 1 ) { LOWORD(dword_ACEC20) = v8 & 0x3FF | 0x2400; word_ACEC1C = a3 & 0x3FF | 0x2400; sub_4B88F0((_DWORD *)v5[74], (__int16 *)&dword_ACEC20, &word_ACEC1C, *(_DWORD *)(v10 + 348)); return 1; } goto LABEL_20; } } return 0; } if ( v4 == 1 ) { sub_4C1410((_DWORD *)v5[74], v8, a3); return 1; } if ( v4 != 5 ) { switch ( v4 ) { case 6: v22 = v8 & 0x3FF | 0x1800; break; case 7: sub_4B82D0((_DWORD *)v5[74], v8); return 1; case 13: if ( *((_BYTE *)v5 + 1488) ) { v26 = v5[74]; *((_BYTE *)v5 + 1488) = 0; v27 = *(_DWORD *)(v26 + 744); if ( v27 ) { if ( *(_DWORD *)(v27 + 376) != 1 ) return 0; } } v28 = (_DWORD *)v5[74]; LOWORD(a2) = v8 & 0x3FF | 0x1000; LOWORD(a3) = a3 & 0x3FF | 0x2400; v29 = v28[186]; if ( v29 && (v30 = *(_DWORD *)(v29 + 348)) != 0 ) { sub_4B88F0(v28, (__int16 *)&a2, (__int16 *)&a3, v30); result = 1; } else { sub_4B7B90(v28, (__int16 *)&a2, (__int16 *)&a3); result = 1; } return result; case 3: v31 = (_DWORD *)v5[74]; LOWORD(a2) = v8 & 0x3FF | 0x800; LOWORD(a3) = a3 & 0x3FF | 0x2400; sub_4B7B90(v31, (__int16 *)&a2, (__int16 *)&a3); return 1; case 19: v22 = v8 & 0x3FF; break; default: return 1; } v23 = (_DWORD *)v5[74]; LOWORD(a2) = v22; LOWORD(a3) = a3 & 0x3FF | 0x2400; v24 = v23[186]; if ( v24 ) { v25 = *(_DWORD *)(v24 + 348); if ( v25 ) { sub_4B88F0(v23, (__int16 *)&a2, (__int16 *)&a3, v25); return 1; } } sub_4B7B90(v23, (__int16 *)&a2, (__int16 *)&a3); return 1; } v14 = a2[5]; if ( !v14 ) return 0; v15 = sub_49F760(*(unsigned __int16 *)(v14 + 1)); v16 = *(_DWORD *)(v15 + 211); if ( v16 > sub_680E60(byte_AD9238) ) { v17 = (_DWORD *)v5[74]; v18 = sub_40C190(1532174080); sub_492060(v17, (int)v18); return 0; } if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { v19 = *(_WORD *)(v14 + 1); v20 = (int **)v5[74]; *((_WORD *)v5 + 748) = v19; v21 = sub_40C190(744001168); sub_4A4E90(v20, v5, (_DWORD *)0x12, *(_DWORD **)(v15 + 106), (int)v21, 1); } else { sub_4B7A80((_DWORD *)v5[74], *(_WORD *)(v14 + 1), *(_DWORD *)(v15 + 106)); } return 1; } // ACDC84: using guessed type int dword_ACDC84; // ACEC1C: using guessed type __int16 word_ACEC1C; // ACEC20: using guessed type int dword_ACEC20; //----- (00535C00) -------------------------------------------------------- int *__userpurge sub_535C00@(int a1@, int a2@, unsigned int a3) { signed int v3; // ebx int v4; // esi int v5; // edi int v6; // edi signed int v7; // ebx int v8; // ebx int v9; // edi int *result; // eax int v11; // [esp+10h] [ebp-Ch] v3 = 8; v4 = a1; if ( a3 < 8 ) { v11 = a2; v5 = a1 + 1368; do { if ( *(_DWORD *)v5 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0); v5 += 4; --v3; } while ( v3 ); (*(void (__stdcall **)(signed int, int))(**(_DWORD **)(v4 + 4 * a3 + 1368) + 256))(1, v11); v6 = v4 + 348; v7 = 192; do { *(_BYTE *)(*(_DWORD *)v6 + 456) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 324))(0.0); v6 += 4; --v7; } while ( v7 ); v8 = 24 * a3; *(_DWORD *)(v4 + 1432) = 24 * a3; if ( (signed int)(24 * a3) < (signed int)(24 * a3 + 24) ) { v9 = v4 + 96 * a3 + 348; do { *(_BYTE *)(*(_DWORD *)v9 + 456) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 324))(0.0); ++v8; v9 += 4; } while ( v8 < *(_DWORD *)(v4 + 1432) + 24 ); } (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v4 + 1440) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1436) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1436) + 248))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1452) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1448) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1448) + 248))(0); sub_6848A0(&byte_ADA230); result = sub_534EE0(*(_DWORD *)(v4 + 1448)); *(_DWORD *)(v4 + 2544) = a3; } return result; } // 535C00: could not find valid save-restore pair for edi // ADA230: using guessed type char byte_ADA230; //----- (00535D60) -------------------------------------------------------- char __thiscall sub_535D60(char *this) { char *v1; // esi int v2; // edi signed int v3; // ebx int v4; // edi signed int v5; // ebx char result; // al __int16 v7; // [esp+14h] [ebp-4h] v1 = this; v2 = (int)(this + 1368); v3 = 8; do { if ( *(_DWORD *)v2 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0); v2 += 4; --v3; } while ( v3 ); v4 = (int)(v1 + 348); v5 = 192; do { *(_BYTE *)(*(_DWORD *)v4 + 456) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 324))(0.0); v4 += 4; --v5; } while ( v5 ); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 360) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 359) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 359) + 248))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 363) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 362) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 362) + 248))(0); sub_6848A0(&byte_ADA230); sub_534EE0(*((_DWORD *)v1 + 362)); sub_74E270(&unk_ADB2A8); sub_533540(*((_DWORD *)v1 + 359)); v7 = *(_WORD *)(*((_DWORD *)v1 + 359) + 388); result = sub_6F3D10(&off_AB7F2C, 12, 32, &v7, 2u); v1[1674] = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (00535E90) -------------------------------------------------------- char __thiscall sub_535E90(char *this) { char *v1; // esi int v2; // edi signed int v3; // ebx int v4; // edi signed int v5; // ebx char result; // al __int16 v7; // [esp+14h] [ebp-4h] v1 = this; v2 = (int)(this + 1368); v3 = 8; do { if ( *(_DWORD *)v2 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0); v2 += 4; --v3; } while ( v3 ); v4 = (int)(v1 + 348); v5 = 192; do { *(_BYTE *)(*(_DWORD *)v4 + 456) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 324))(0.0); v4 += 4; --v5; } while ( v5 ); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 360) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 359) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 359) + 248))(0); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 363) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 362) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 362) + 248))(1); sub_6848A0(&byte_ADA230); sub_534EE0(*((_DWORD *)v1 + 362)); sub_74E270(&unk_ADB2A8); sub_533540(*((_DWORD *)v1 + 359)); v7 = *(_WORD *)(*((_DWORD *)v1 + 362) + 388); result = sub_6F3D10(&off_AB7F2C, 12, 44, &v7, 2u); v1[1673] = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (00535FC0) -------------------------------------------------------- int *__thiscall sub_535FC0(int this) { int *result; // eax if ( !*(_BYTE *)(this + 1673) ) result = sub_534EE0(*(_DWORD *)(this + 1448)); return result; } //----- (00535FE0) -------------------------------------------------------- void __thiscall sub_535FE0(_BYTE *this) { int v1; // edi int v2; // esi signed int v3; // ebx unsigned int v4; // esi int v5; // eax int v6; // [esp+10h] [ebp-6Ch] int v7; // [esp+14h] [ebp-68h] int v8; // [esp+18h] [ebp-64h] int v9; // [esp+1Ch] [ebp-60h] int v10; // [esp+20h] [ebp-5Ch] int v11; // [esp+24h] [ebp-58h] int v12; // [esp+28h] [ebp-54h] int v13; // [esp+2Ch] [ebp-50h] int v14; // [esp+30h] [ebp-4Ch] int v15; // [esp+34h] [ebp-48h] int v16; // [esp+38h] [ebp-44h] int v17; // [esp+3Ch] [ebp-40h] int v18; // [esp+40h] [ebp-3Ch] int v19; // [esp+44h] [ebp-38h] int v20; // [esp+48h] [ebp-34h] int v21; // [esp+4Ch] [ebp-30h] int v22; // [esp+50h] [ebp-2Ch] int v23; // [esp+54h] [ebp-28h] int v24; // [esp+58h] [ebp-24h] int v25; // [esp+5Ch] [ebp-20h] int v26; // [esp+60h] [ebp-1Ch] int v27; // [esp+64h] [ebp-18h] int v28; // [esp+68h] [ebp-14h] int v29; // [esp+6Ch] [ebp-10h] int v30; // [esp+70h] [ebp-Ch] int v31; // [esp+74h] [ebp-8h] v1 = (int)this; if ( this[1677] ) { v2 = (int)(this + 348); v3 = 192; do { *(_BYTE *)(*(_DWORD *)v2 + 456) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 324))(0.0); v2 += 4; --v3; } while ( v3 ); } v6 = 6; v7 = 1; v8 = 23; v9 = 12; v10 = 7; v11 = 10; v12 = 16; v13 = 19; v14 = 15; v15 = 14; v16 = 21; v17 = 0; v18 = 22; v19 = 20; v20 = 8; v21 = 17; v22 = 24; v23 = 25; v24 = 26; v25 = 27; v26 = 11; v27 = 13; v28 = 9; v29 = 29; v30 = 18; v31 = 28; v4 = 0; do { if ( v4 < 0x1E ) { v5 = *(&v6 + v4); if ( v5 ) { *(_BYTE *)(*(_DWORD *)(v1 + 4 * v5 + 1116) + 456) = 1; (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 4 * v5 + 1116) + 324))( *(_DWORD *)(v1 + 4 * v5 + 1116), 0.0); } } ++v4; } while ( v4 < 0x1A ); if ( *(_BYTE *)(v1 + 1677) ) sub_535C00(v1, v1, 0); } //----- (005361A0) -------------------------------------------------------- void __thiscall sub_5361A0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { *((_BYTE *)v2 + 1488) = 0; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4) > 1 ) { *((_BYTE *)v2 + 1488) = 1; LOWORD(dword_ACEC20) = a2 & 0x3FF | 0x2400; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 1); } } } } // ACEC20: using guessed type int dword_ACEC20; //----- (00536230) -------------------------------------------------------- void __thiscall sub_536230(int this, char a2, char a3) { int v3; // esi char v4; // bl const CHAR *v5; // eax bool v6; // zf bool v7; // bl _DWORD *v8; // eax int v9; // [esp-Ch] [ebp-14h] int v10; // [esp+4h] [ebp-4h] int v11; // [esp+10h] [ebp+8h] v3 = this; if ( !*(_DWORD *)(this + 1600) || !*(_DWORD *)(this + 1608) || !*(_DWORD *)(this + 1612) ) return; v4 = a2; LOBYTE(v10) = a2; if ( !*(_BYTE *)(this + 1616) ) { v4 = 0; LOBYTE(v10) = 0; v5 = sub_40A910(-856106548); goto LABEL_9; } if ( !a2 ) { v5 = sub_40A910(-1007036142); LABEL_9: v9 = 1874639786; goto LABEL_10; } v5 = sub_40A910(-872818228); v9 = 1874621874; LABEL_10: v11 = (int)v5; sub_40A910(v9); v6 = *(_BYTE *)(v3 + 1677) == 0; *(_BYTE *)(v3 + 2548) = v4; if ( !v6 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(v3 + 1608) + 256))(v10); v7 = v4 == 0; (*(void (__stdcall **)(bool))(**(_DWORD **)(v3 + 1612) + 256))(v7); (*(void (__stdcall **)(bool))(**(_DWORD **)(v3 + 1608) + 240))(v7); (*(void (__thiscall **)(_DWORD, _BYTE))(**(_DWORD **)(v3 + 1612) + 240))(*(_DWORD *)(v3 + 1612), v10); } if ( a3 ) { v8 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) sub_492060(v8, v11); } } //----- (00536340) -------------------------------------------------------- void __thiscall sub_536340(_DWORD *this) { _DWORD *v1; // esi const char *v2; // eax char v3; // bl int v4; // edi int v5; // eax char v6; // [esp+7h] [ebp-1h] v1 = this; if ( this[400] ) { v2 = (const char *)dword_ADA598; v3 = 0; v4 = dword_ADA5A4; v6 = 0; if ( dword_ADA598 ) { v2 = *(const char **)(dword_ADA598 + 112); if ( v2 ) { v2 = sub_4B17D0(v2 + 2); if ( *((_DWORD *)v2 + 9) == 1 ) v3 = 1; } } if ( v4 ) { v2 = *(const char **)(v4 + 112); if ( v2 ) { v2 = sub_4B17D0(v2 + 2); if ( *((_DWORD *)v2 + 9) == 1 ) v6 = 1; } } if ( *((_BYTE *)v1 + 1677) ) { if ( v3 || v6 ) v2 = (const char *)1; else LOBYTE(v2) = 0; v2 = (const char *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v1[400] + 256))(v2); } if ( v3 || v6 ) v2 = (const char *)1; else LOBYTE(v2) = 0; v5 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v1[400] + 240))(v2); if ( *((_BYTE *)v1 + 1677) ) { LOBYTE(v5) = !v3 && !v6; v5 = (*(int (__stdcall **)(int))(*(_DWORD *)v1[401] + 256))(v5); } LOBYTE(v5) = !v3 && !v6; (*(void (__stdcall **)(int))(*(_DWORD *)v1[401] + 240))(v5); if ( *((_BYTE *)v1 + 1677) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[402] + 256))(*((unsigned __int8 *)v1 + 2548)); (*(void (__stdcall **)(bool))(*(_DWORD *)v1[403] + 256))(*((_BYTE *)v1 + 2548) == 0); (*(void (__stdcall **)(bool))(*(_DWORD *)v1[402] + 240))(*((_BYTE *)v1 + 2548) == 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[403] + 240))(*((unsigned __int8 *)v1 + 2548)); } } } // ADA598: using guessed type int dword_ADA598; // ADA5A4: using guessed type int dword_ADA5A4; //----- (005364C0) -------------------------------------------------------- void __thiscall sub_5364C0(int this) { int v1; // esi char v2; // al void (__stdcall *v3)(signed int, int); // edx _DWORD *v4; // edi char v5; // al const CHAR *v6; // eax int v7; // [esp+0h] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 1608) && *(_DWORD *)(this + 1612) ) { v2 = (*(int (**)(void))(**(_DWORD **)(this + 1608) + 244))(); v3 = *(void (__stdcall **)(signed int, int))(**(_DWORD **)(v1 + 1608) + 240); if ( v2 == 1 ) { v3(0, v7); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v1 + 1612) + 240))(1); } else { v3(1, v7); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v1 + 1612) + 240))(0); } v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { if ( *(_BYTE *)(v1 + 1616) ) { v5 = (*(int (**)(void))(**(_DWORD **)(v1 + 1608) + 244))(); sub_8EEE70(v4, 253, v5 == 0, 0); } else { v6 = sub_40A910(-856106548); sub_492060(v4, (int)v6); } } } } //----- (00536580) -------------------------------------------------------- void __thiscall sub_536580(_DWORD *this) { _DWORD *v1; // ebx const char *v2; // eax int v3; // esi int v4; // eax char v5; // [esp+6h] [ebp-2h] char v6; // [esp+7h] [ebp-1h] v1 = this; if ( this[416] ) { v2 = (const char *)dword_ADA598; v3 = dword_ADA5A4; v6 = 0; v5 = 0; if ( dword_ADA598 ) { v2 = *(const char **)(dword_ADA598 + 112); if ( v2 ) { v2 = sub_4B17D0(v2 + 2); if ( *((_DWORD *)v2 + 9) == 2 ) v6 = 1; } } if ( v3 ) { v2 = *(const char **)(v3 + 112); if ( v2 ) { v2 = sub_4B17D0(v2 + 2); if ( *((_DWORD *)v2 + 9) == 2 ) v5 = 1; } } if ( *((_BYTE *)v1 + 1677) ) { if ( v6 || v5 ) v2 = (const char *)1; else LOBYTE(v2) = 0; v2 = (const char *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v1[416] + 256))(v2); } if ( v6 || v5 ) v2 = (const char *)1; else LOBYTE(v2) = 0; v4 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v1[416] + 240))(v2); if ( *((_BYTE *)v1 + 1677) ) { LOBYTE(v4) = !v6 && !v5; v4 = (*(int (__stdcall **)(int))(*(_DWORD *)v1[417] + 256))(v4); } LOBYTE(v4) = !v6 && !v5; (*(void (__stdcall **)(int))(*(_DWORD *)v1[417] + 240))(v4); } } // ADA598: using guessed type int dword_ADA598; // ADA5A4: using guessed type int dword_ADA5A4; //----- (005366A0) -------------------------------------------------------- int __thiscall sub_5366A0(_BYTE *this) { int v1; // esi signed int v2; // ebx int v3; // edi int *v4; // edi signed int v5; // ebx char v6; // al void (__stdcall *v7)(bool); // edx int v8; // edx _DWORD **v9; // edi int *v10; // edi signed int v11; // ebx int v12; // edi signed int v13; // ebx int v14; // edi signed int v15; // ebx int v16; // ecx int result; // eax int v18; // [esp+54h] [ebp-4h] v1 = (int)this; v2 = 8; if ( this[1677] ) { v3 = (int)(this + 1336); do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(*(unsigned __int8 *)(v1 + 1677)); v3 += 4; --v2; } while ( v2 ); v4 = (int *)(v1 + 348); v5 = 192; do { sub_5D3170(*v4, *(_BYTE *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v4 + 324))(0.0); ++v4; --v5; } while ( v5 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1688) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1684) + 256))(*(unsigned __int8 *)(v1 + 1677)); if ( *(_DWORD *)(v1 + 2544) >= 0 ) sub_535C00(v1, (int)v4, *(_DWORD *)(v1 + 2544)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1472) + 256))(*(unsigned __int8 *)(v1 + 1675)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1476) + 256))(*(unsigned __int8 *)(v1 + 1676)); v6 = sub_6F3100(33); v7 = *(void (__stdcall **)(bool))(**(_DWORD **)(v1 + 1656) + 256); if ( v6 ) { v7(*(_BYTE *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1656) + 240))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(bool))(**(_DWORD **)(v1 + 1660) + 256))(*(_BYTE *)(v1 + 1677) == 0); v8 = *(_BYTE *)(v1 + 1677) == 0; } else { v7(*(_BYTE *)(v1 + 1677) == 0); (*(void (__stdcall **)(bool))(**(_DWORD **)(v1 + 1656) + 240))(*(_BYTE *)(v1 + 1677) == 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1660) + 256))(*(unsigned __int8 *)(v1 + 1677)); v8 = *(unsigned __int8 *)(v1 + 1677); } (*(void (__stdcall **)(int))(**(_DWORD **)(v1 + 1660) + 240))(v8); sub_536580((_DWORD *)v1); sub_536340((_DWORD *)v1); } else { v9 = (_DWORD **)(this + 1368); do { (*(void (__stdcall **)(_DWORD))(**(v9 - 8) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**v9 + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(*v9[8] + 256))(*(unsigned __int8 *)(v1 + 1677)); ++v9; --v2; } while ( v2 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1436) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1440) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1444) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1448) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1452) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1456) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1472) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1476) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1656) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1660) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1608) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1600) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1612) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1604) + 256))(*(unsigned __int8 *)(v1 + 1677)); v10 = (int *)(v1 + 348); v11 = 192; do { sub_5D3170(*v10, *(_BYTE *)(v1 + 1677)); *(_BYTE *)(*v10 + 456) = *(_BYTE *)(v1 + 1677); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v10 + 324))(0.0); ++v10; --v11; } while ( v11 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1664) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1668) + 256))(*(unsigned __int8 *)(v1 + 1677)); } v12 = v1 + 1692; v13 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(*(unsigned __int8 *)(v1 + 1677)); v12 += 4; --v13; } while ( v13 ); v14 = v1 + 1772; v15 = 24; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 256))(*(unsigned __int8 *)(v1 + 1677)); v14 += 4; --v15; } while ( v15 ); v16 = *(_DWORD *)(v1 + 1628); LOBYTE(v18) = *(_BYTE *)(v1 + 1677); if ( *(_BYTE *)(v1 + 1652) ) { (*(void (__stdcall **)(int))(*(_DWORD *)v16 + 256))(v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1648) + 256))(0); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v16 + 256))(0); (*(void (__stdcall **)(int))(**(_DWORD **)(v1 + 1648) + 256))(v18); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1320) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1324) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1328) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1332) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1684) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1688) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1724) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1728) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1732) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1736) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1740) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1744) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1748) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1752) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1756) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1760) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1764) + 256))(*(unsigned __int8 *)(v1 + 1677)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1768) + 256))(*(unsigned __int8 *)(v1 + 1677)); result = *(_DWORD *)(v1 + 1644); if ( *(_BYTE *)(v1 + 1677) ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; return result; } //----- (00536CE0) -------------------------------------------------------- void __thiscall sub_536CE0(_DWORD *this, int a2, unsigned int a3) { _DWORD **v3; // eax _DWORD *v4; // ebx const CHAR *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // eax int v8; // ebx int v9; // esi unsigned int v10; // eax char *v11; // edi char v12; // cl _DWORD **v13; // [esp+8h] [ebp-2B4h] _DWORD *v14; // [esp+Ch] [ebp-2B0h] char v15; // [esp+10h] [ebp-2ACh] char v16; // [esp+78h] [ebp-244h] char v17; // [esp+177h] [ebp-145h] char v18; // [esp+178h] [ebp-144h] char v19; // [esp+278h] [ebp-44h] v14 = this; if ( a2 == 3 || a2 == 5 ) { v3 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = v3; v13 = v3; if ( v3 && sub_4A6240(v3) ) { v5 = sub_4090F0(1603758548); sub_492060(v4, (int)v5); return; } if ( a2 == 3 ) { if ( a3 >= 0xC0 ) return; v6 = (_DWORD *)v14[a3 + 87]; } else { if ( a2 != 5 || a3 >= 0x1E ) return; v6 = (_DWORD *)v14[a3 + 279]; } v7 = (_DWORD *)sub_5D5470(v6); if ( v7 ) { v8 = v7[28]; qmemcpy(&v15, v7 + 2, 0x67u); v9 = (*(int (__thiscall **)(_DWORD *))(*v7 + 36))(v7); strncpy(&v18, (const char *)(v8 + 34), strlen((const char *)(v8 + 34)) + 1); if ( v9 ) { sprintf(&v19, " [+%d]", v9); v10 = strlen(&v19) + 1; v11 = &v17; do v12 = (v11++)[1]; while ( v12 ); qmemcpy(v11, &v19, v10); } sprintf(&v16, "<\t%s\t>", &v18); if ( v13 ) sub_4A6090(v13, &v16, (int)&v15); } } } //----- (00536E90) -------------------------------------------------------- char __thiscall sub_536E90(int this, char a2) { int v2; // ebx char result; // al int v4; // edi _DWORD *v5; // eax int v6; // esi int v7; // esi float *v8; // eax float *v9; // eax double v10; // st7 float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 v2 = this; result = a2; if ( *(_BYTE *)(this + 457) != a2 ) { v4 = sub_85C050((_DWORD *)this, 9); if ( !v4 ) { v5 = operator new(0x28u); v6 = (int)v5; if ( v5 ) { sub_85B2B0(v5); *(_DWORD *)v6 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v6 + 28) = 0; *(_DWORD *)(v6 + 32) = 0; *(_DWORD *)(v6 + 36) = 1; } else { v6 = 0; } v4 = v6; sub_403700((_DWORD *)v2, v6); } v7 = sub_85C050((_DWORD *)v2, 3); if ( !v7 ) { v8 = (float *)operator new(0x60u); if ( v8 ) v9 = sub_85EBC0(v8); else v9 = 0; v7 = (int)v9; sub_403700((_DWORD *)v2, (int)v9); } *(_BYTE *)(v2 + 457) = a2; *(_DWORD *)(v4 + 32) = 0; *(_DWORD *)(v4 + 36) = 0; ++*(_DWORD *)(v7 + 88); if ( a2 ) v10 = 0.40000001; else v10 = 1.0; v11 = v10; v12 = v10; *(float *)(v7 + 68) = v11; v13 = v10; *(float *)(v7 + 72) = v12; *(float *)(v7 + 76) = v13; result = sub_85C4D0((_DWORD *)v2); } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00536FC0) -------------------------------------------------------- void __thiscall sub_536FC0(int this, int a2, int a3) { int v3; // eax int v4; // eax _DWORD *v5; // eax switch ( a2 ) { case 1: v3 = *(_DWORD *)(this + 388); if ( v3 ) *(_DWORD *)(this + 388) = v3 - 1; LOWORD(a3) = *(_WORD *)(this + 388); sub_6F3D10(&off_AB7F2C, 12, 44, &a3, 2u); break; case 2: v4 = ++*(_DWORD *)(this + 388); if ( dword_ADB1F8 != 24 && v4 ) *(_DWORD *)(this + 388) = v4 - 1; LOWORD(a3) = *(_WORD *)(this + 388); sub_6F3D10(&off_AB7F2C, 12, 44, &a3, 2u); break; case 3: v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) sub_4A5170(v5, "ChrInv"); break; case 5: sub_534F70(this, a3, a3); break; case 6: sub_533DE0((_DWORD **)this, a3); break; default: return; } } // AB7F2C: using guessed type void **off_AB7F2C; // ADB1F8: using guessed type int dword_ADB1F8; //----- (005370B0) -------------------------------------------------------- void __thiscall sub_5370B0(_DWORD *this, unsigned int a2) { _DWORD *v2; // ebx _DWORD *v3; // ecx unsigned __int16 *v4; // esi int v5; // esi _DWORD **v6; // ebx const CHAR *v7; // esi _DWORD *v8; // edi int v9; // esi int v10; // esi char *v11; // eax volatile LONG *v12; // eax _DWORD **v13; // ebx const CHAR *v14; // esi signed int v15; // eax _DWORD **v16; // esi char *v17; // eax volatile LONG *v18; // eax int v19; // eax _DWORD **v20; // ebx const CHAR *v21; // esi _DWORD *v22; // ebx const CHAR *v23; // eax char v24; // [esp+Ch] [ebp-84h] char v25; // [esp+48h] [ebp-48h] unsigned int v26; // [esp+74h] [ebp-1Ch] char v27; // [esp+78h] [ebp-18h] int v28; // [esp+80h] [ebp-10h] int v29; // [esp+84h] [ebp-Ch] unsigned int v30; // [esp+88h] [ebp-8h] v2 = this; v3 = (_DWORD *)this[a2 + 279]; v26 = a2; v4 = (unsigned __int16 *)sub_5D5470(v3); if ( v4 ) { if ( *(_BYTE *)(dword_ACDC84 + 40) & 1 ) { sub_536CE0(v2, 5, a2); } else { switch ( dword_ACEC24 ) { case 6: if ( a2 < 0x1E ) v5 = dword_ADA534[a2]; else v5 = 0; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) == 26 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) == 37 ) { LOWORD(v26) = a2 & 0x3FF | 0x2000; sub_5345A0(v2, v26); } else { v6 = (_DWORD **)(v2 + 58); v7 = sub_40A910(-1304813505); if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); } break; case 7: if ( a2 < 0x1E ) v8 = (_DWORD *)dword_ADA534[a2]; else v8 = 0; v9 = v8[28]; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v8 + 4))(v8) != 5 || *(_DWORD *)(v9 + 98) ) { v20 = (_DWORD **)(v2 + 58); v21 = sub_40A910(1452765642); if ( v20[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v20[1] + 4))(25, v21, v20); if ( v20[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v20[1] + 20))(25, v21, v20); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v20)[5])(v20, 25, v21, v20); } else { qmemcpy(&v24, v8 + 2, 0x67u); if ( v25 ) { v10 = (int)(v2 + 366); if ( !v2[366] ) { v11 = (char *)sub_40A910(238953241); v12 = sub_462CA0(1, v11); sub_56FF80(v2 + 366, (int)v12); v13 = (_DWORD **)(v2 + 58); (**(void (__thiscall ***)(int, _DWORD **))(*(_DWORD *)v10 + 232))(*(_DWORD *)v10 + 232, v13); v14 = sub_40A910(238953241); if ( v13[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 4))(25, v14, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 20))(25, v14, v13); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v13)[5])(v13, 25, v14, v13); } } else { v15 = v2[367]; if ( v15 >= 0 && v15 < 192 ) { v16 = (_DWORD **)(v2 + 366); if ( !v2[366] ) { v17 = (char *)sub_40A910(305864732); v18 = sub_462CA0(2, v17); sub_56FF80(v2 + 366, (int)v18); v29 = v2[367]; v28 = 255; v30 = v26 | 0x2000; v19 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760(*v16, v19, &v27, 0); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v16)[58])(*v16 + 58, v2 + 58); } } } } break; case 9: v22 = (_DWORD *)v2[74]; v23 = sub_4090F0(-1715537981); sub_492060(v22, (int)v23); break; default: v2[316] = 0; v2[314] = 1; v2[318] = 0; v2[317] = v4; v2[315] = a2; v2[328] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v4 + 12))(v4); v2[311] = v2; dword_BA6BCC = (int)(v2 + 309); sub_6BA9B0(v4[4]); break; } } } } // ACDC84: using guessed type int dword_ACDC84; // ACEC24: using guessed type int dword_ACEC24; // ADA534: using guessed type int dword_ADA534[]; // BA6BCC: using guessed type int dword_BA6BCC; //----- (00537470) -------------------------------------------------------- void __thiscall sub_537470(char *this) { int v1; // ecx int v2; // edi int v3; // ebx volatile LONG *v4; // eax volatile LONG *v5; // esi float *v6; // esi void *v7; // eax bool v8; // zf void *v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] int v11; // [esp+24h] [ebp-10h] int v12; // [esp+30h] [ebp-4h] v1 = (int)(this + 348); v11 = v1; v10 = 192; do { v2 = *(_DWORD *)v1; if ( *(_BYTE *)(*(_DWORD *)v1 + 457) != 1 ) { v3 = sub_85C050((_DWORD *)v2, 9); if ( !v3 ) { v4 = (volatile LONG *)operator new(0x28u); v5 = v4; v9 = (void *)v4; v12 = 0; if ( v4 ) { sub_85B2B0(v4); *v5 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v5 + 14) = 0; *((_DWORD *)v5 + 8) = 0; *((_DWORD *)v5 + 9) = 1; } else { v5 = 0; } v3 = (int)v5; v9 = (void *)v5; if ( v5 ) InterlockedIncrement(v5 + 1); v12 = 1; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v5 && !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } v6 = (float *)sub_85C050((_DWORD *)v2, 3); if ( !v6 ) { v7 = operator new(0x60u); v9 = v7; v12 = 2; if ( v7 ) v6 = sub_85EBC0((float *)v7); else v6 = 0; v9 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v12 = 3; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); } } *(_BYTE *)(v2 + 457) = 1; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; ++*((_DWORD *)v6 + 22); v6[17] = 0.40000001; v6[18] = 0.40000001; v6[19] = 0.40000001; sub_85C4D0((_DWORD *)v2); } v1 = v11 + 4; v8 = v10-- == 1; v11 += 4; } while ( !v8 ); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00537640) -------------------------------------------------------- void __thiscall sub_537640(char *this) { int v1; // ecx int v2; // edi int v3; // ebx volatile LONG *v4; // eax volatile LONG *v5; // esi float *v6; // esi void *v7; // eax bool v8; // zf void *v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] int v11; // [esp+24h] [ebp-10h] int v12; // [esp+30h] [ebp-4h] v1 = (int)(this + 348); v11 = v1; v10 = 192; do { v2 = *(_DWORD *)v1; if ( *(_BYTE *)(*(_DWORD *)v1 + 457) ) { v3 = sub_85C050((_DWORD *)v2, 9); if ( !v3 ) { v4 = (volatile LONG *)operator new(0x28u); v5 = v4; v9 = (void *)v4; v12 = 0; if ( v4 ) { sub_85B2B0(v4); *v5 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v5 + 14) = 0; *((_DWORD *)v5 + 8) = 0; *((_DWORD *)v5 + 9) = 1; } else { v5 = 0; } v3 = (int)v5; v9 = (void *)v5; if ( v5 ) InterlockedIncrement(v5 + 1); v12 = 1; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v5 && !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } v6 = (float *)sub_85C050((_DWORD *)v2, 3); if ( !v6 ) { v7 = operator new(0x60u); v9 = v7; v12 = 2; if ( v7 ) v6 = sub_85EBC0((float *)v7); else v6 = 0; v9 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v12 = 3; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); } } *(_BYTE *)(v2 + 457) = 0; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; ++*((_DWORD *)v6 + 22); v6[17] = 1.0; v6[18] = 1.0; v6[19] = 1.0; sub_85C4D0((_DWORD *)v2); } v1 = v11 + 4; v8 = v10-- == 1; v11 += 4; } while ( !v8 ); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00537800) -------------------------------------------------------- void __thiscall sub_537800(_DWORD *this) { _DWORD *v1; // ecx int v2; // edi int v3; // ebx volatile LONG *v4; // eax volatile LONG *v5; // esi float *v6; // esi void *v7; // eax bool v8; // zf void *v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] _DWORD *v11; // [esp+24h] [ebp-10h] int v12; // [esp+30h] [ebp-4h] v1 = this + 279; v11 = v1; v10 = 30; do { v2 = *v1; if ( *v1 && *(_BYTE *)(v2 + 457) != 1 ) { v3 = sub_85C050((_DWORD *)v2, 9); if ( !v3 ) { v4 = (volatile LONG *)operator new(0x28u); v5 = v4; v9 = (void *)v4; v12 = 0; if ( v4 ) { sub_85B2B0(v4); *v5 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v5 + 14) = 0; *((_DWORD *)v5 + 8) = 0; *((_DWORD *)v5 + 9) = 1; } else { v5 = 0; } v3 = (int)v5; v9 = (void *)v5; if ( v5 ) InterlockedIncrement(v5 + 1); v12 = 1; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v5 && !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } v6 = (float *)sub_85C050((_DWORD *)v2, 3); if ( !v6 ) { v7 = operator new(0x60u); v9 = v7; v12 = 2; if ( v7 ) v6 = sub_85EBC0((float *)v7); else v6 = 0; v9 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v12 = 3; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); } } *(_BYTE *)(v2 + 457) = 1; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; ++*((_DWORD *)v6 + 22); v6[17] = 0.40000001; v6[18] = 0.40000001; v6[19] = 0.40000001; sub_85C4D0((_DWORD *)v2); } v1 = v11 + 1; v8 = v10-- == 1; ++v11; } while ( !v8 ); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (005379D0) -------------------------------------------------------- void __thiscall sub_5379D0(_DWORD *this) { _DWORD *v1; // ecx int v2; // edi int v3; // ebx volatile LONG *v4; // eax volatile LONG *v5; // esi float *v6; // esi void *v7; // eax bool v8; // zf void *v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] _DWORD *v11; // [esp+24h] [ebp-10h] int v12; // [esp+30h] [ebp-4h] v1 = this + 279; v11 = v1; v10 = 30; do { v2 = *v1; if ( *v1 && *(_BYTE *)(v2 + 457) ) { v3 = sub_85C050((_DWORD *)v2, 9); if ( !v3 ) { v4 = (volatile LONG *)operator new(0x28u); v5 = v4; v9 = (void *)v4; v12 = 0; if ( v4 ) { sub_85B2B0(v4); *v5 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v5 + 14) = 0; *((_DWORD *)v5 + 8) = 0; *((_DWORD *)v5 + 9) = 1; } else { v5 = 0; } v3 = (int)v5; v9 = (void *)v5; if ( v5 ) InterlockedIncrement(v5 + 1); v12 = 1; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v5 && !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } v6 = (float *)sub_85C050((_DWORD *)v2, 3); if ( !v6 ) { v7 = operator new(0x60u); v9 = v7; v12 = 2; if ( v7 ) v6 = sub_85EBC0((float *)v7); else v6 = 0; v9 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v12 = 3; sub_8A6330((_DWORD *)(v2 + 156), (int *)&v9); v12 = -1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); } } *(_BYTE *)(v2 + 457) = 0; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; ++*((_DWORD *)v6 + 22); v6[17] = 1.0; v6[18] = 1.0; v6[19] = 1.0; sub_85C4D0((_DWORD *)v2); } v1 = v11 + 1; v8 = v10-- == 1; ++v11; } while ( !v8 ); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00537BA0) -------------------------------------------------------- char __thiscall sub_537BA0(_DWORD *this, int a2) { _DWORD *v2; // esi signed int v3; // eax _DWORD *v4; // eax int v5; // edi char v7; // [esp+4h] [ebp-4h] v2 = this; if ( dword_B67408 ) { if ( sub_6857A0(&byte_ADA230, &v7) ) { v3 = v2[367]; if ( v3 >= 0 && v3 < 192 ) sub_536E90(v2[v3 + 87], 0); } if ( dword_ACEC24 == 7 ) dword_ACEC24 = 0; } dword_B67408 = 0; v4 = (_DWORD *)v2[366]; if ( v4 ) { LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v4); v5 = v2[366]; if ( v5 ) { v4 = (_DWORD *)InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !v4 && v5 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); v2[366] = 0; } } if ( v2[367] > 0 ) v2[367] = -1; return (char)v4; } // ACEC24: using guessed type int dword_ACEC24; // ADA230: using guessed type char byte_ADA230; // B67408: using guessed type int dword_B67408; //----- (00537C60) -------------------------------------------------------- volatile LONG *__cdecl sub_537C60(int a1, int a2, int a3, int a4) { void *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1D4u); v8 = v4; v9 = 0; if ( v4 ) v5 = (volatile LONG *)sub_533B80((void **)v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 620))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (00537DA0) -------------------------------------------------------- int __cdecl sub_537DA0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x144u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8FE000(v5); *(_DWORD *)v6 = &InvTabButWin::`vftable'; *(_DWORD *)(v6 + 232) = &InvTabButWin::`vftable'; *(_BYTE *)(v6 + 254) = 1; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 560))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9C918C: using guessed type void *InvTabButWin::`vftable'; // 9C91AC: using guessed type void *InvTabButWin::`vftable'; //----- (00537F00) -------------------------------------------------------- int __cdecl sub_537F00(int a1, int a2, int a3) { void *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1C4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D6D00((void **)v3); *(_DWORD *)v4 = &ChargedItemIcon::`vftable'; *(_DWORD *)(v4 + 232) = &ChargedItemIcon::`vftable'; *(_DWORD *)(v4 + 448) = -1; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9C93E4: using guessed type void *ChargedItemIcon::`vftable'; // 9C9404: using guessed type void *ChargedItemIcon::`vftable'; //----- (00538050) -------------------------------------------------------- volatile LONG *sub_538050() { _DWORD *v0; // eax volatile LONG *v1; // esi void (__thiscall ***v2)(void *, signed int); // edi volatile LONG *result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x188u); v4 = v0; v5 = 0; if ( v0 ) v1 = sub_533430(v0); else v1 = 0; if ( v1 ) InterlockedIncrement(v1 + 1); v5 = 1; sub_403790(&unk_BA6B10, (int)v1); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v1 + 452))(v1) ) { (*(void (__thiscall **)(volatile LONG *))(*v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement(v1 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement(v1 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v1)(v1, 1); result = 0; } return result; } //----- (00538180) -------------------------------------------------------- char __thiscall sub_538180(void *this) { int v1; // edi int v3; // esi char *v4; // eax signed int v5; // ebx int *v6; // esi _WORD *v7; // eax int v8; // eax bool v9; // zf volatile LONG **v10; // esi volatile LONG **v11; // esi volatile LONG *v12; // esi volatile LONG **v13; // esi volatile LONG **v14; // esi volatile LONG *v15; // ecx int v16; // esi int v17; // ebx int v18; // eax volatile LONG *v19; // eax void (__thiscall ***v20)(_DWORD, signed int); // esi char v21; // [esp+10h] [ebp-70h] char v22; // [esp+14h] [ebp-6Ch] int v23; // [esp+18h] [ebp-68h] int v24; // [esp+1Ch] [ebp-64h] int v25; // [esp+20h] [ebp-60h] int v26; // [esp+24h] [ebp-5Ch] int v27; // [esp+28h] [ebp-58h] int v28; // [esp+2Ch] [ebp-54h] char v29; // [esp+30h] [ebp-50h] int v30; // [esp+7Ch] [ebp-4h] v1 = (int)this; if ( !sub_8F2900(this, 0, 0, 1, 1, 0, (int)"ChargedItemInvenWin", 0) ) return 0; v28 = 0; v3 = dword_BA6BA0; v30 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ChrInv.nif"); sub_8F66B0(v4, (int)&v28, v3); if ( !v28 ) return 0; sub_8F71E0(v28, (int)"Frame", &v25, &v24, &v21, &v22); v5 = 4; v6 = (int *)(v1 + 288); v23 = 24; do { sprintf(&v29, "InvItemSlot%03d", v5 - 3); sub_8F71E0(v28, (int)&v29, &v26, &v27, &v21, &v22); v7 = (_WORD *)sub_537F00(v26 - v25 + 1, v27 - v24 + 1, v1); *v6 = (int)v7; sub_5D5B70(v7, 0, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v6 + 560))(v5); *(_DWORD *)(*v6 + 272) = dword_ACEC34; sub_5D3170(*v6, 1); v8 = *v6; ++v6; ++v5; v9 = v23-- == 1; *(_BYTE *)(v8 + 254) = 0; } while ( !v9 ); v10 = sub_8FB140(v28, (int)"PrePageNor", (int)&v26, (int)&v27, 0); sub_8FB650(v10, v28, (int)"PrePageClick"); sub_8FB650(v10, v28, (int)"PrePageOver"); sub_8FE0F0(v26 - v25, v27 - v24, (int)v10, v1, 1, 0, 0); v11 = sub_8FB140(v28, (int)"NextPageNor", (int)&v26, (int)&v27, 0); sub_8FB650(v11, v28, (int)"NextPageClick"); sub_8FB650(v11, v28, (int)"NextPageOver"); sub_8FE0F0(v26 - v25, v27 - v24, (int)v11, v1, 2, 0, 0); v12 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v28 + 72))("HelpLinkNor") ) { v13 = sub_8FB140(v28, (int)"HelpLinkNor", (int)&v26, (int)&v27, v12); sub_8FB650(v13, v28, (int)"HelpLinkClick"); sub_8FB650(v13, v28, (int)"HelpLinkOver"); sub_8FE0F0(v26 - v25, v27 - v24, (int)v13, v1, 3, 0, 0); } v14 = sub_8FB140(v28, (int)"PageNum", (int)&v26, (int)&v27, 0); sub_8F3EB0(v26 - v25, v27 - v24, (int)v14, v1, 0, 0); v15 = v14[9]; v16 = *(_DWORD *)(*v15 + 24); v17 = *(_DWORD *)(*v15 + 20); v18 = sub_421050(2); v19 = sub_8F4A20(v26 - v25 - 2, v27 - v24 + 2, v17, v16, v18, v1, 0, 0); *(_DWORD *)(v1 + 384) = v19; (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v1 + 384) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 384) + 240))(0); *(_BYTE *)(v1 + 254) = 0; *(_DWORD *)(v1 + 388) = 0; sub_533540(v1); v30 = -1; if ( v28 ) { v20 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v20 ) (**v20)(v20, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00538510) -------------------------------------------------------- volatile LONG *__cdecl sub_538510(int a1, int a2, int a3) { void *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x220u); v7 = v3; v8 = 0; if ( v3 ) v4 = (volatile LONG *)sub_533CF0((void **)v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (00538650) -------------------------------------------------------- volatile LONG *sub_538650() { _DWORD *v0; // eax volatile LONG *v1; // esi void (__thiscall ***v2)(void *, signed int); // edi volatile LONG *result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x188u); v4 = v0; v5 = 0; if ( v0 ) v1 = sub_533680(v0); else v1 = 0; if ( v1 ) InterlockedIncrement(v1 + 1); v5 = 1; sub_403790(&unk_BA6B10, (int)v1); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v1 + 452))(v1) ) { (*(void (__thiscall **)(volatile LONG *))(*v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement(v1 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement(v1 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v1)(v1, 1); result = 0; } return result; } //----- (00538780) -------------------------------------------------------- char __thiscall sub_538780(void *this) { int v1; // ebx int v2; // edi int v4; // esi char *v5; // eax int *v6; // esi volatile LONG *v7; // eax volatile LONG **v8; // esi volatile LONG **v9; // esi volatile LONG *v10; // esi volatile LONG **v11; // esi volatile LONG **v12; // esi volatile LONG *v13; // ecx int v14; // esi int v15; // ebx int v16; // eax volatile LONG *v17; // eax int v18; // eax void (__thiscall ***v19)(_DWORD, signed int); // esi char v20; // [esp+10h] [ebp-70h] int v21; // [esp+14h] [ebp-6Ch] char v22; // [esp+18h] [ebp-68h] int v23; // [esp+1Ch] [ebp-64h] int v24; // [esp+20h] [ebp-60h] int v25; // [esp+24h] [ebp-5Ch] int v26; // [esp+28h] [ebp-58h] int v27; // [esp+2Ch] [ebp-54h] char v28; // [esp+30h] [ebp-50h] int v29; // [esp+7Ch] [ebp-4h] v1 = 0; v2 = (int)this; if ( !sub_8F2900(this, 0, 0, 1, 1, 0, (int)"CompensationInvWin", 0) ) return 0; v27 = 0; v4 = dword_BA6BA0; v29 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\ChrInv.nif"); sub_8F66B0(v5, (int)&v27, v4); if ( !v27 ) return 0; sub_8F71E0(v27, (int)"Frame", &v24, &v23, &v22, &v20); v6 = (int *)(v2 + 288); do { v21 = v1 + 1; sprintf(&v28, "InvItemSlot%03d", v1 + 1); sub_8F71E0(v27, (int)&v28, &v25, &v26, &v22, &v20); v7 = sub_538510(v25 - v24 + 1, v26 - v23 + 1, v2); *v6 = (int)v7; sub_5D5B70(v7, 0, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v6 + 560))(5); *(_DWORD *)(*v6 + 272) = dword_ACEC34; sub_5D3170(*v6, 1); *(_BYTE *)(*v6 + 254) = 0; *(_DWORD *)(*v6 + 452) = v1; v1 = v21; ++v6; } while ( v21 < 24 ); v8 = sub_8FB140(v27, (int)"PrePageNor", (int)&v25, (int)&v26, 0); sub_8FB650(v8, v27, (int)"PrePageClick"); sub_8FB650(v8, v27, (int)"PrePageOver"); sub_8FE0F0(v25 - v24, v26 - v23, (int)v8, v2, 1, 0, 0); v9 = sub_8FB140(v27, (int)"NextPageNor", (int)&v25, (int)&v26, 0); sub_8FB650(v9, v27, (int)"NextPageClick"); sub_8FB650(v9, v27, (int)"NextPageOver"); sub_8FE0F0(v25 - v24, v26 - v23, (int)v9, v2, 2, 0, 0); v10 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v27 + 72))("HelpLinkNor") ) { v11 = sub_8FB140(v27, (int)"HelpLinkNor", (int)&v25, (int)&v26, v10); sub_8FB650(v11, v27, (int)"HelpLinkClick"); sub_8FB650(v11, v27, (int)"HelpLinkOver"); sub_8FE0F0(v25 - v24, v26 - v23, (int)v11, v2, 3, 0, 0); } v12 = sub_8FB140(v27, (int)"PageNum", (int)&v25, (int)&v26, 0); sub_8F3EB0(v25 - v24, v26 - v23, (int)v12, v2, 0, 0); v13 = v12[9]; v14 = *(_DWORD *)(*v13 + 24); v15 = *(_DWORD *)(*v13 + 20); v16 = sub_421050(2); v17 = sub_8F4A20(v25 - v24 - 2, v26 - v23 + 2, v15, v14, v16, v2, 0, 0); *(_DWORD *)(v2 + 384) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 384) + 472))("1"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 240))(0); v18 = v27; *(_BYTE *)(v2 + 254) = 0; *(_DWORD *)(v2 + 388) = 0; v29 = -1; if ( v18 ) { v19 = (void (__thiscall ***)(_DWORD, signed int))v18; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) { if ( v19 ) (**v19)(v19, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00538B00) -------------------------------------------------------- volatile LONG *__cdecl sub_538B00(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0xA10u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_533E60((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00538C30) -------------------------------------------------------- char __thiscall sub_538C30(void *this, int a2) { int v2; // ebx char *v3; // eax void **v4; // eax int v5; // esi void **v6; // edi int v7; // esi char *v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // esi int v13; // edi volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax int v17; // edx volatile LONG **v18; // eax volatile LONG *v19; // eax int v20; // ecx volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG **v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax bool v26; // zf volatile LONG **v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax int v30; // edx volatile LONG **v31; // eax int v32; // eax int v33; // edx int v34; // eax volatile LONG *v35; // eax volatile LONG v36; // edx const CHAR *v37; // eax volatile LONG **v38; // eax int v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // eax volatile LONG **v44; // eax int v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax volatile LONG **v50; // eax int v51; // eax volatile LONG **v52; // eax volatile LONG *v53; // eax volatile LONG **v54; // eax volatile LONG *v55; // eax volatile LONG **v56; // eax int v57; // eax volatile LONG **v58; // eax volatile LONG *v59; // eax volatile LONG **v60; // eax volatile LONG *v61; // eax volatile LONG **v62; // eax int v63; // eax volatile LONG **v64; // eax volatile LONG *v65; // eax volatile LONG **v66; // eax volatile LONG *v67; // eax volatile LONG **v68; // eax int v69; // eax volatile LONG **v70; // eax volatile LONG *v71; // eax volatile LONG **v72; // eax volatile LONG *v73; // eax volatile LONG **v74; // eax int v75; // eax const char *v76; // eax volatile LONG **v77; // eax volatile LONG *v78; // eax volatile LONG **v79; // eax volatile LONG *v80; // eax volatile LONG **v81; // eax volatile LONG *v82; // eax volatile LONG **v83; // eax const char *v84; // eax volatile LONG **v85; // eax volatile LONG *v86; // eax volatile LONG **v87; // eax volatile LONG *v88; // eax volatile LONG **v89; // eax volatile LONG *v90; // eax volatile LONG **v91; // eax volatile LONG **v92; // eax int v93; // eax volatile LONG *v94; // eax int v95; // eax volatile LONG **v96; // eax volatile LONG *v97; // eax volatile LONG *v98; // ecx volatile LONG *v99; // edx volatile LONG *v100; // eax int *v101; // eax volatile LONG **v102; // eax volatile LONG *v103; // eax const char *v104; // eax volatile LONG **v105; // eax volatile LONG *v106; // eax int v107; // edx int v108; // eax int v109; // edx int v110; // eax volatile LONG *v111; // eax volatile LONG **v112; // eax volatile LONG *v113; // eax const char *v114; // eax int v115; // ecx int v116; // eax int v117; // eax volatile LONG *v118; // eax volatile LONG **v119; // eax volatile LONG *v120; // eax const char *v121; // eax int v122; // ecx int v123; // eax int v124; // eax volatile LONG *v125; // eax volatile LONG **v126; // eax volatile LONG *v127; // eax const char *v128; // eax int v129; // ecx int v130; // eax int v131; // eax volatile LONG *v132; // eax volatile LONG *v133; // eax const char *v134; // eax volatile LONG **v135; // eax volatile LONG *v136; // eax const char *v137; // eax volatile LONG **v138; // eax volatile LONG *v139; // eax volatile LONG **v140; // eax volatile LONG *v141; // eax volatile LONG *v142; // eax int v143; // eax volatile LONG *v144; // eax int v145; // eax volatile LONG *v146; // eax const char *v147; // eax int v148; // ecx int v149; // eax volatile LONG **v150; // eax volatile LONG *v151; // eax const char *v152; // eax volatile LONG *v153; // eax volatile LONG **v154; // eax volatile LONG *v155; // eax volatile LONG *v156; // eax const char *v157; // eax volatile LONG **v158; // eax volatile LONG *v159; // eax const char *v160; // eax volatile LONG **v161; // eax int v162; // eax volatile LONG **v163; // eax volatile LONG *v164; // eax volatile LONG **v165; // eax volatile LONG *v166; // eax volatile LONG **v167; // eax int v168; // eax volatile LONG **v169; // eax volatile LONG *v170; // eax volatile LONG **v171; // eax volatile LONG *v172; // eax char *v173; // eax volatile LONG **v174; // eax volatile LONG *v175; // eax volatile LONG *v176; // eax void (__thiscall ***v177)(_DWORD, signed int); // esi int v178; // eax char v179; // cl char *v180; // edi void *v181; // ST174_4 int v182; // edi float v183; // esi int v184; // eax float *v185; // eax int *v186; // ecx int v187; // esi float v188; // edx int v189; // ecx int (*v190)(void); // eax int (*v191)(void); // eax double v192; // st7 double v193; // st7 int v194; // esi int v195; // eax char v196; // cl char *v197; // eax float v198; // esi int v199; // eax float *v200; // eax int *v201; // ecx int v202; // esi float v203; // edx int v204; // ecx int (*v205)(void); // eax int (*v206)(void); // eax double v207; // st7 double v208; // st7 void (__thiscall ***v209)(_DWORD, signed int); // esi void (__thiscall ***v210)(_DWORD, signed int); // esi int v211; // [esp+188h] [ebp-DCh] int v212; // [esp+18Ch] [ebp-D8h] float v213; // [esp+190h] [ebp-D4h] float v214; // [esp+194h] [ebp-D0h] float v215; // [esp+198h] [ebp-CCh] int v216; // [esp+19Ch] [ebp-C8h] volatile LONG *v217; // [esp+1A0h] [ebp-C4h] volatile LONG *v218; // [esp+1A4h] [ebp-C0h] float v219; // [esp+1A8h] [ebp-BCh] double v220; // [esp+1ACh] [ebp-B8h] void *v221; // [esp+1B4h] [ebp-B0h] int v222; // [esp+1B8h] [ebp-ACh] int v223; // [esp+1BCh] [ebp-A8h] int v224; // [esp+1C0h] [ebp-A4h] int v225; // [esp+1C4h] [ebp-A0h] int v226; // [esp+1C8h] [ebp-9Ch] int v227; // [esp+1CCh] [ebp-98h] int v228; // [esp+1D0h] [ebp-94h] int v229; // [esp+1D4h] [ebp-90h] int v230; // [esp+1D8h] [ebp-8Ch] int v231; // [esp+1DCh] [ebp-88h] int v232; // [esp+1E0h] [ebp-84h] int v233; // [esp+1E4h] [ebp-80h] int v234; // [esp+1E8h] [ebp-7Ch] int v235; // [esp+1ECh] [ebp-78h] int v236; // [esp+1F0h] [ebp-74h] int v237; // [esp+1F4h] [ebp-70h] int v238; // [esp+1F8h] [ebp-6Ch] int v239; // [esp+1FCh] [ebp-68h] int v240; // [esp+200h] [ebp-64h] int v241; // [esp+204h] [ebp-60h] int v242; // [esp+208h] [ebp-5Ch] int v243; // [esp+20Ch] [ebp-58h] int v244; // [esp+210h] [ebp-54h] int v245; // [esp+214h] [ebp-50h] int v246; // [esp+218h] [ebp-4Ch] int v247; // [esp+21Ch] [ebp-48h] int v248; // [esp+220h] [ebp-44h] int v249; // [esp+224h] [ebp-40h] int v250; // [esp+228h] [ebp-3Ch] int v251; // [esp+22Ch] [ebp-38h] char v252; // [esp+230h] [ebp-34h] int v253; // [esp+260h] [ebp-4h] HIDWORD(v220) = a2; v2 = (int)this; v223 = 0; v253 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACA838, "PutOnClear.nif"); v4 = sub_8D03E0(v3, 0); v5 = *(_DWORD *)(v2 + 1596); v6 = v4; if ( (void **)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v2 + 1596) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } sub_8D4A70((_DWORD *)(v2 + 1560), *(_DWORD **)(v2 + 1596)); v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\ChrInv.nif"); sub_8F66B0(v8, (int)&v223, v7); if ( !v223 ) return 0; v9 = sub_8FB140(v223, (int)"Frame", (int)&v225, (int)&v224, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, SHIDWORD(v220), (int)"InventoryWin", 0) ) goto LABEL_96; v12 = v225; v13 = v224; v217 = (volatile LONG *)sub_43D0D0(0x13u); if ( v217 ) v14 = sub_8FB140(v223, (int)"Theme", (int)&v225, (int)&v224, v217); else v14 = sub_8FB140(v223, (int)"Theme", (int)&v225, (int)&v224, 0); *(_DWORD *)(v2 + 1768) = sub_8F3EB0(v225 - v12, v224 - v13, (int)v14, v2, 0, 0); v15 = sub_8FB140(v223, (int)"Panel01", (int)&v225, (int)&v224, 0); v16 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v15, v2, 0, 0); v17 = v223; *(_DWORD *)(v2 + 1724) = v16; v18 = sub_8FB140(v17, (int)"Panel02", (int)&v225, (int)&v224, 0); v19 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v18, v2, 0, 0); v20 = *(_DWORD *)(v2 + 1644); v218 = v19; v222 = v20; if ( (volatile LONG *)v20 != v19 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v222 ) (**(void (__stdcall ***)(signed int))v222)(1); v21 = v218; *(_DWORD *)(v2 + 1644) = v218; if ( v21 ) InterlockedIncrement(v21 + 1); } v22 = sub_8FB140(v223, (int)"Plane01", (int)&v225, (int)&v224, 0); sub_8F3EB0(v225 - v12, v224 - v13, (int)v22, v2, 0, 0); v23 = sub_8FB140(v223, (int)"Object02", (int)&v225, (int)&v224, 0); sub_8F3EB0(v225 - v12, v224 - v13, (int)v23, v2, 0, 0); v24 = sub_8FB140(v223, (int)"Panel03", (int)&v225, (int)&v224, 0); v25 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v24, v2, 0, 0); v26 = v217 == 0; *(_DWORD *)(v2 + 1728) = v25; if ( v26 ) v27 = sub_8FB140(v223, (int)"Theme01", (int)&v225, (int)&v224, 0); else v27 = sub_8FB140(v223, (int)"Theme01", (int)&v225, (int)&v224, v217); *(_DWORD *)(v2 + 1680) = sub_8F3EB0(v225 - v12, v224 - v13, (int)v27, v2, 0, 0); v28 = sub_8FB140(v223, (int)"Panel04", (int)&v225, (int)&v224, 0); v29 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v28, v2, 0, 0); v30 = v223; *(_DWORD *)(v2 + 1732) = v29; v31 = sub_8FB140(v30, (int)"Panel05", (int)&v225, (int)&v224, 0); sub_8F3EB0(v225 - v12, v224 - v13, (int)v31, v2, 0, 0); v222 = (int)sub_8FB140(v223, (int)"ClsNor", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"ClsClick"); sub_8FB650((_DWORD *)v222, v223, (int)"ClsOver"); sub_90C8D0(v225 - v12, v224 - v13, v222, v2); v32 = sub_43D0D0(4u); v33 = *(_DWORD *)v223; HIDWORD(v220) = v32; if ( (*(int (__stdcall **)(const char *))(v33 + 72))("HelpLinkNor") ) { v222 = (int)sub_8FB140(v223, (int)"HelpLinkNor", (int)&v225, (int)&v224, (volatile LONG *)HIDWORD(v220)); sub_8FB650((_DWORD *)v222, v223, (int)"HelpLinkClick"); sub_8FB650((_DWORD *)v222, v223, (int)"HelpLinkOver"); sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 21, 0, 0); } if ( !sub_8F71E0(v223, (int)"WinTitle", &v225, &v224, &v212, &v211) ) { LABEL_96: v10 = (void (__thiscall ***)(_DWORD, signed int))v223; v253 = -1; if ( v223 && !InterlockedDecrement((volatile LONG *)(v223 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v34 = sub_421050(7); v35 = sub_8F4A20(v225 - v12, v224 - v13 + 2, v212, v211, v34, v2, 0, 0); v36 = *v35; v222 = (int)v35; (*(void (__thiscall **)(volatile LONG *, signed int))(v36 + 488))(v35, 1); (*(void (__stdcall **)(int *))(*(_DWORD *)v222 + 468))(&dword_AA8D98); HIDWORD(v220) = *(_DWORD *)v222 + 472; v37 = sub_40C190(-252252426); (*(void (__thiscall **)(int, const CHAR *))HIDWORD(v220))(v222, v37); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v222 + 240))(0); v38 = sub_8FB140(v223, (int)"Inv1thTabOff", (int)&v225, (int)&v224, 0); v39 = sub_537DA0(v225 - v12, v224 - v13, (int)v38, v2, 8); *(_DWORD *)(v2 + 1336) = v39; *(_DWORD *)(v39 + 272) = dword_AD01E8; v40 = sub_8FB140(v223, (int)"Inv1thTabDis", (int)&v225, (int)&v224, 0); v41 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v40, v2, 0, 0); *(_DWORD *)(v2 + 1400) = v41; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 240))(v41, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1400) + 256))(0); v42 = sub_8FB140(v223, (int)"Inv1thTabOn", (int)&v225, (int)&v224, 0); v43 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v42, v2, 0, 0); *(_DWORD *)(v2 + 1368) = v43; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1368) + 256))(1); v44 = sub_8FB140(v223, (int)"Inv2thTabOff", (int)&v225, (int)&v224, 0); v45 = sub_537DA0(v225 - v12, v224 - v13, (int)v44, v2, 9); *(_DWORD *)(v2 + 1340) = v45; *(_DWORD *)(v45 + 272) = dword_AD01E8; v46 = sub_8FB140(v223, (int)"Inv2thTabDis", (int)&v225, (int)&v224, 0); v47 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v46, v2, 0, 0); *(_DWORD *)(v2 + 1404) = v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1404) + 256))(0); v48 = sub_8FB140(v223, (int)"Inv2thTabOn", (int)&v225, (int)&v224, 0); v49 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v48, v2, 0, 0); *(_DWORD *)(v2 + 1372) = v49; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1372) + 256))(0); v50 = sub_8FB140(v223, (int)"Inv3thTabOff", (int)&v225, (int)&v224, 0); v51 = sub_537DA0(v225 - v12, v224 - v13, (int)v50, v2, 10); *(_DWORD *)(v2 + 1344) = v51; *(_DWORD *)(v51 + 272) = dword_AD01E8; v52 = sub_8FB140(v223, (int)"Inv3thTabDis", (int)&v225, (int)&v224, 0); v53 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v52, v2, 0, 0); *(_DWORD *)(v2 + 1408) = v53; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v53 + 240))(v53, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1408) + 256))(0); v54 = sub_8FB140(v223, (int)"Inv3thTabOn", (int)&v225, (int)&v224, 0); v55 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v54, v2, 0, 0); *(_DWORD *)(v2 + 1376) = v55; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 240))(v55, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1376) + 256))(0); v56 = sub_8FB140(v223, (int)"Inv4thTabOff", (int)&v225, (int)&v224, 0); v57 = sub_537DA0(v225 - v12, v224 - v13, (int)v56, v2, 11); *(_DWORD *)(v2 + 1348) = v57; *(_DWORD *)(v57 + 272) = dword_AD01E8; v58 = sub_8FB140(v223, (int)"Inv4thTabDis", (int)&v225, (int)&v224, 0); v59 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v58, v2, 0, 0); *(_DWORD *)(v2 + 1412) = v59; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1412) + 256))(0); v60 = sub_8FB140(v223, (int)"Inv4thTabOn", (int)&v225, (int)&v224, 0); v61 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v60, v2, 0, 0); *(_DWORD *)(v2 + 1380) = v61; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v61 + 240))(v61, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1380) + 256))(0); v62 = sub_8FB140(v223, (int)"Inv5thTabOff", (int)&v225, (int)&v224, 0); v63 = sub_537DA0(v225 - v12, v224 - v13, (int)v62, v2, 12); *(_DWORD *)(v2 + 1352) = v63; *(_DWORD *)(v63 + 272) = dword_AD01E8; v64 = sub_8FB140(v223, (int)"Inv5thTabDis", (int)&v225, (int)&v224, 0); v65 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v64, v2, 0, 0); *(_DWORD *)(v2 + 1416) = v65; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v65 + 240))(v65, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1416) + 256))(0); v66 = sub_8FB140(v223, (int)"Inv5thTabOn", (int)&v225, (int)&v224, 0); v67 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v66, v2, 0, 0); *(_DWORD *)(v2 + 1384) = v67; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v67 + 240))(v67, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1384) + 256))(0); v68 = sub_8FB140(v223, (int)"Inv6thTabOff", (int)&v225, (int)&v224, 0); v69 = sub_537DA0(v225 - v12, v224 - v13, (int)v68, v2, 13); *(_DWORD *)(v2 + 1356) = v69; *(_DWORD *)(v69 + 272) = dword_AD01E8; v70 = sub_8FB140(v223, (int)"Inv6thTabDis", (int)&v225, (int)&v224, 0); v71 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v70, v2, 0, 0); *(_DWORD *)(v2 + 1420) = v71; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v71 + 240))(v71, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1420) + 256))(0); v72 = sub_8FB140(v223, (int)"Inv6thTabOn", (int)&v225, (int)&v224, 0); v73 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v72, v2, 0, 0); *(_DWORD *)(v2 + 1388) = v73; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v73 + 240))(v73, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1388) + 256))(0); v74 = sub_8FB140(v223, (int)"PCBangOff", (int)&v225, (int)&v224, 0); v75 = sub_537DA0(v225 - v12, v224 - v13, (int)v74, v2, 14); *(_DWORD *)(v2 + 1688) = v75; *(_DWORD *)(v75 + 272) = dword_AD01E8; v76 = sub_40C190(-1970165038); sub_8F2EA0(*(void ***)(v2 + 1688), v76); v77 = sub_8FB140(v223, (int)"PCBangOn", (int)&v225, (int)&v224, 0); v78 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v77, v2, 0, 0); *(_DWORD *)(v2 + 1452) = v78; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v78 + 240))(v78, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1452) + 256))(0); v79 = sub_8FB140(v223, (int)"PCBangDis", (int)&v225, (int)&v224, 0); v80 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v79, v2, 0, 0); *(_DWORD *)(v2 + 1456) = v80; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v80 + 240))(v80, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1456) + 256))(0); v81 = sub_8FB140(v223, (int)"NewItem01", (int)&v225, (int)&v224, 0); v82 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v81, v2, 0, 0); *(_DWORD *)(v2 + 1472) = v82; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v82 + 256))(v82, 0); v83 = sub_8FB140(v223, (int)"InvCommercialOff", (int)&v225, (int)&v224, 0); v218 = sub_8FE0F0(v225 - v12, v224 - v13, (int)v83, v2, 15, 0, 0); *((_DWORD *)v218 + 68) = dword_AD01E8; v84 = sub_40C190(-1174874326); sub_8F2EA0((void **)v218, v84); *(_DWORD *)(v2 + 1684) = v218; v85 = sub_8FB140(v223, (int)"InvCommercialOn", (int)&v225, (int)&v224, 0); v86 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v85, v2, 0, 0); *(_DWORD *)(v2 + 1440) = v86; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v86 + 240))(v86, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1440) + 256))(0); v87 = sub_8FB140(v223, (int)"InvCommercialDis", (int)&v225, (int)&v224, 0); v88 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v87, v2, 0, 0); *(_DWORD *)(v2 + 1444) = v88; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v88 + 240))(v88, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1444) + 256))(0); v89 = sub_8FB140(v223, (int)"NewItem", (int)&v225, (int)&v224, 0); v90 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v89, v2, 0, 0); *(_DWORD *)(v2 + 1476) = v90; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v90 + 256))(v90, 0); v91 = sub_8FB140(v223, (int)"IconSlot", (int)&v225, (int)&v224, 0); sub_8F3EB0(v225 - v12, v224 - v13, (int)v91, v2, 0, 0); v226 = 6; v227 = 1; v228 = 23; v229 = 12; v230 = 7; v231 = 10; v232 = 16; v233 = 19; v234 = 15; v235 = 14; v236 = 21; v237 = 0; v238 = 22; v239 = 20; v240 = 8; v241 = 17; v242 = 24; v243 = 25; v244 = 26; v245 = 27; v246 = 11; v247 = 13; v248 = 9; v249 = 29; v250 = 18; v251 = 28; v222 = 0; do { HIDWORD(v220) = v222 + 1; sprintf(&v252, "EquipSlot%03d", v222 + 1); v92 = sub_8FB140(v223, (int)&v252, (int)&v225, (int)&v224, 0); sub_8F3EB0(v225 - v12, v224 - v13, (int)v92, v2, 0, 0); if ( v222 < 30 ) { v93 = *(&v226 + v222); v222 = v93; if ( v93 ) { v94 = sub_537C60(v225 - v12 + 1, v224 - v13 + 1, v93, v2); *(_DWORD *)(v2 + 4 * v222 + 1116) = v94; sub_5D5B70(v94, 0, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v222 + 1116) + 516))(5); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v222 + 1116) + 560))(6); v95 = v222; *(_DWORD *)(*(_DWORD *)(v2 + 4 * v222 + 1116) + 452) = 8; *(_DWORD *)(*(_DWORD *)(v2 + 4 * v95 + 1116) + 272) = dword_ACEC34; *(_DWORD *)(*(_DWORD *)(v2 + 4 * v95 + 1116) + 304) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 4 * v95 + 1116) + 456) = 1; sub_5D3170(*(_DWORD *)(v2 + 4 * v95 + 1116), 1); } } v222 = HIDWORD(v220); } while ( SHIDWORD(v220) < 26 ); v217 = 0; v218 = (volatile LONG *)(v2 + 348); do { v221 = (char *)v217 + 1; sprintf(&v252, "InvItemSlot%03d", (char *)v217 + 1); v96 = sub_8FB140(v223, (int)&v252, (int)&v225, (int)&v224, 0); v97 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v96, v2, 0, 0); v98 = v218; v99 = v217; *((_DWORD *)v218 + 356) = v97; v217 = v99; v222 = (int)v98; HIDWORD(v220) = 8; do { v100 = sub_537C60(v225 - v12 + 1, v224 - v13 + 1, (int)v217, v2); *(_DWORD *)v222 = v100; sub_5D5B70(v100, 0, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v222 + 516))(3); (*(void (__stdcall **)(signed int))(**(_DWORD **)v222 + 560))(4); v101 = (int *)v222; *(_DWORD *)(*(_DWORD *)v222 + 452) = 9; *(_DWORD *)(*v101 + 272) = dword_ACEC34; *(_DWORD *)(*v101 + 304) = 1; sub_5D3170(*v101, 1); v222 += 96; v217 += 6; --HIDWORD(v220); } while ( HIDWORD(v220) ); ++v218; v217 = (volatile LONG *)v221; } while ( (signed int)v221 < 24 ); v102 = sub_8FB140(v223, (int)"CopperBtn", (int)&v225, (int)&v224, 0); v103 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v102, v2, 0, 0); *(_DWORD *)(v2 + 1744) = v103; *((_DWORD *)v103 + 68) = dword_AD01E8; v104 = sub_40C190(-2001757707); sub_8F2EA0(*(void ***)(v2 + 1744), v104); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1744) + 240))(1); v105 = sub_8FB140(v223, (int)"CopperInput", (int)&v225, (int)&v224, 0); v222 = (int)v105; v106 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v105, v2, 0, 0); v107 = v222; *(_DWORD *)(v2 + 1760) = v106; v108 = **(_DWORD **)(v107 + 36); v109 = *(_DWORD *)(v108 + 20); v221 = *(void **)(v108 + 24); HIDWORD(v220) = v109; v110 = sub_421050(2); v111 = sub_8F4A20(v225 - v12 - 2, v224 - v13 + 2, SHIDWORD(v220), (int)v221, v110, v2, 0, 0); *(_DWORD *)(v2 + 1320) = v111; (*(void (__thiscall **)(volatile LONG *, signed int))(*v111 + 488))(v111, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 1320) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1320) + 240))(0); v112 = sub_8FB140(v223, (int)"SilverBtn", (int)&v225, (int)&v224, 0); v113 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v112, v2, 0, 0); *(_DWORD *)(v2 + 1740) = v113; *((_DWORD *)v113 + 68) = dword_AD01E8; v114 = sub_40C190(-1732930065); sub_8F2EA0(*(void ***)(v2 + 1740), v114); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1740) + 240))(1); v222 = (int)sub_8FB140(v223, (int)"SilverInput", (int)&v225, (int)&v224, 0); *(_DWORD *)(v2 + 1756) = sub_8F3EB0(v225 - v12, v224 - v13, v222, v2, 0, 0); v115 = *(_DWORD *)(v222 + 36); v116 = *(_DWORD *)(*(_DWORD *)v115 + 20); v221 = *(void **)(*(_DWORD *)v115 + 24); HIDWORD(v220) = v116; v117 = sub_421050(2); v118 = sub_8F4A20(v225 - v12 - 2, v224 - v13 + 2, SHIDWORD(v220), (int)v221, v117, v2, 0, 0); *(_DWORD *)(v2 + 1324) = v118; (*(void (__thiscall **)(volatile LONG *, signed int))(*v118 + 488))(v118, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 1324) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1324) + 240))(0); v119 = sub_8FB140(v223, (int)"GoldBtn", (int)&v225, (int)&v224, 0); v120 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v119, v2, 0, 0); *(_DWORD *)(v2 + 1736) = v120; *((_DWORD *)v120 + 68) = dword_AD01E8; v121 = sub_40C190(1201903011); sub_8F2EA0(*(void ***)(v2 + 1736), v121); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1736) + 240))(1); v222 = (int)sub_8FB140(v223, (int)"GoldInput", (int)&v225, (int)&v224, 0); *(_DWORD *)(v2 + 1752) = sub_8F3EB0(v225 - v12, v224 - v13, v222, v2, 0, 0); v122 = *(_DWORD *)(v222 + 36); v123 = *(_DWORD *)(*(_DWORD *)v122 + 20); v221 = *(void **)(*(_DWORD *)v122 + 24); HIDWORD(v220) = v123; v124 = sub_421050(2); v125 = sub_8F4A20(v225 - v12 - 2, v224 - v13 + 2, SHIDWORD(v220), (int)v221, v124, v2, 0, 0); *(_DWORD *)(v2 + 1328) = v125; (*(void (__thiscall **)(volatile LONG *, signed int))(*v125 + 488))(v125, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 1328) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1328) + 240))(0); v126 = sub_8FB140(v223, (int)"GemBtn", (int)&v225, (int)&v224, 0); v127 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v126, v2, 0, 0); *(_DWORD *)(v2 + 1748) = v127; *((_DWORD *)v127 + 68) = dword_AD01E8; v128 = sub_40C190(1197446809); sub_8F2EA0(*(void ***)(v2 + 1748), v128); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1748) + 240))(1); v222 = (int)sub_8FB140(v223, (int)"GemInput", (int)&v225, (int)&v224, 0); *(_DWORD *)(v2 + 1764) = sub_8F3EB0(v225 - v12, v224 - v13, v222, v2, 0, 0); v129 = *(_DWORD *)(v222 + 36); v130 = *(_DWORD *)(*(_DWORD *)v129 + 20); v221 = *(void **)(*(_DWORD *)v129 + 24); HIDWORD(v220) = v130; v131 = sub_421050(2); v132 = sub_8F4A20(v225 - v12 - 2, v224 - v13 + 2, SHIDWORD(v220), (int)v221, v131, v2, 0, 0); *(_DWORD *)(v2 + 1332) = v132; (*(void (__thiscall **)(volatile LONG *, signed int))(*v132 + 488))(v132, 2); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 1332) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1332) + 240))(0); v222 = (int)sub_8FB140(v223, (int)"MiniMonNor", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"MiniMonClick"); sub_8FB650((_DWORD *)v222, v223, (int)"MiniMonOver"); v133 = sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 22, 0, 0); *(_DWORD *)(v2 + 1600) = v133; *((_DWORD *)v133 + 68) = dword_AD01E8; v134 = sub_40A910(-1324300025); sub_8F2EA0(*(void ***)(v2 + 1600), v134); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1600) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1600) + 240))(0); v135 = sub_8FB140(v223, (int)"MiniMonDisable", (int)&v225, (int)&v224, 0); v136 = sub_8FE0F0(v225 - v12, v224 - v13, (int)v135, v2, 0, 0, 0); *(_DWORD *)(v2 + 1604) = v136; *((_DWORD *)v136 + 68) = dword_AD01E8; v137 = sub_40A910(123286299); sub_8F2EA0(*(void ***)(v2 + 1604), v137); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1604) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1604) + 240))(1); v138 = sub_8FB140(v223, (int)"MiniMonON", (int)&v225, (int)&v224, 0); v139 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v138, v2, 0, 0); *(_DWORD *)(v2 + 1608) = v139; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v139 + 256))(v139, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1608) + 240))(0); v140 = sub_8FB140(v223, (int)"MiniMonOFF", (int)&v225, (int)&v224, 0); v141 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v140, v2, 0, 0); *(_DWORD *)(v2 + 1612) = v141; (*(void (__thiscall **)(volatile LONG *, signed int))(*v141 + 256))(v141, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1612) + 240))(1); v142 = sub_538050(); HIDWORD(v220) = v142; *(_DWORD *)(v2 + 1436) = v142; if ( v142 ) { v143 = (*(int (**)(void))(*v142 + 4))(); if ( v143 ) { while ( (_UNKNOWN *)v143 != &unk_BA6A8C ) { v143 = *(_DWORD *)(v143 + 4); if ( !v143 ) goto LABEL_50; } (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v2 + 116))(v2, HIDWORD(v220), 0); sub_85C4D0((_DWORD *)v2); sub_85BED0((_DWORD **)v2, 0.0, 1); } } LABEL_50: v144 = sub_538650(); HIDWORD(v220) = v144; *(_DWORD *)(v2 + 1448) = v144; if ( v144 ) { v145 = (*(int (**)(void))(*v144 + 4))(); if ( v145 ) { while ( (_UNKNOWN *)v145 != &unk_BA6A8C ) { v145 = *(_DWORD *)(v145 + 4); if ( !v145 ) goto LABEL_56; } (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v2 + 116))(v2, HIDWORD(v220), 0); sub_85C4D0((_DWORD *)v2); sub_85BED0((_DWORD **)v2, 0.0, 1); } } LABEL_56: v222 = (int)sub_8FB140(v223, (int)"AutoArrayNor", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"AutoArrayClick"); sub_8FB650((_DWORD *)v222, v223, (int)"AutoArrayOver"); v146 = sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 23, 0, 0); *(_DWORD *)(v2 + 1628) = v146; *((_DWORD *)v146 + 68) = dword_AD01E8; v147 = sub_40A910(-605539515); sub_8F2EA0(*(void ***)(v2 + 1628), v147); v148 = *(_DWORD *)(v2 + 1640); HIDWORD(v220) = *(_DWORD *)(v2 + 1628); v222 = v148; if ( v148 != HIDWORD(v220) ) { if ( v148 && !InterlockedDecrement((volatile LONG *)(v148 + 4)) && v222 ) (**(void (__stdcall ***)(signed int))v222)(1); v149 = HIDWORD(v220); *(_DWORD *)(v2 + 1640) = HIDWORD(v220); if ( v149 ) InterlockedIncrement((volatile LONG *)(v149 + 4)); } v150 = sub_8FB140(v223, (int)"AutoArrayDisable", (int)&v225, (int)&v224, 0); v151 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v150, v2, 0, 0); *(_DWORD *)(v2 + 1648) = v151; *((_DWORD *)v151 + 68) = dword_AD01E8; v152 = sub_4090F0(2106687874); sub_8F2EA0(*(void ***)(v2 + 1648), v152); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1648) + 256))(0); v222 = (int)sub_8FB140(v223, (int)"InventoryOpenNor", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"InventoryOpenClick"); sub_8FB650((_DWORD *)v222, v223, (int)"InventoryOpenOver"); v153 = sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 24, 0, 0); *(_DWORD *)(v2 + 1656) = v153; *((_DWORD *)v153 + 68) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1656) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1656) + 256))(0); v154 = sub_8FB140(v223, (int)"InventoryOpenDisable", (int)&v225, (int)&v224, 0); v155 = sub_8FE0F0(v225 - v12, v224 - v13, (int)v154, v2, 0, 0, 0); *(_DWORD *)(v2 + 1660) = v155; *((_DWORD *)v155 + 68) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1660) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1660) + 256))(1); v222 = (int)sub_8FB140(v223, (int)"MiniMonAutoUseNor", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"MiniMonAutoUseClick"); sub_8FB650((_DWORD *)v222, v223, (int)"MiniMonAutoUseOver"); v156 = sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 25, 0, 0); *(_DWORD *)(v2 + 1664) = v156; *((_DWORD *)v156 + 68) = dword_AD01E8; v157 = sub_4090F0(1904132278); sub_8F2EA0(*(void ***)(v2 + 1664), v157); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1664) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1664) + 256))(0); v158 = sub_8FB140(v223, (int)"MiniMonAutoUseDisable", (int)&v225, (int)&v224, 0); v159 = sub_8FE0F0(v225 - v12, v224 - v13, (int)v158, v2, 0, 0, 0); *(_DWORD *)(v2 + 1668) = v159; *((_DWORD *)v159 + 68) = dword_AD01E8; v160 = sub_4090F0(-993805310); sub_8F2EA0(*(void ***)(v2 + 1668), v160); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1668) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 1668) + 256))(1); v161 = sub_8FB140(v223, (int)"Inv7thTabOff", (int)&v225, (int)&v224, 0); v162 = sub_537DA0(v225 - v12, v224 - v13, (int)v161, v2, 26); *(_DWORD *)(v2 + 1360) = v162; *(_DWORD *)(v162 + 272) = dword_AD01E8; v163 = sub_8FB140(v223, (int)"Inv7thTabDis", (int)&v225, (int)&v224, 0); v164 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v163, v2, 0, 0); *(_DWORD *)(v2 + 1424) = v164; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v164 + 240))(v164, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1424) + 256))(0); v165 = sub_8FB140(v223, (int)"Inv7thTabOn", (int)&v225, (int)&v224, 0); v166 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v165, v2, 0, 0); *(_DWORD *)(v2 + 1392) = v166; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v166 + 240))(v166, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1392) + 256))(0); v167 = sub_8FB140(v223, (int)"Inv8thTabOff", (int)&v225, (int)&v224, 0); v168 = sub_537DA0(v225 - v12, v224 - v13, (int)v167, v2, 27); *(_DWORD *)(v2 + 1364) = v168; *(_DWORD *)(v168 + 272) = dword_AD01E8; v169 = sub_8FB140(v223, (int)"Inv8thTabDis", (int)&v225, (int)&v224, 0); v170 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v169, v2, 0, 0); *(_DWORD *)(v2 + 1428) = v170; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v170 + 240))(v170, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1428) + 256))(0); v171 = sub_8FB140(v223, (int)"Inv8thTabOn", (int)&v225, (int)&v224, 0); v172 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v171, v2, 0, 0); *(_DWORD *)(v2 + 1396) = v172; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v172 + 240))(v172, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1396) + 256))(0); v173 = 0; v218 = (volatile LONG *)(v2 + 1692); do { v221 = v173 + 1; sprintf(&v252, "Num%02d", v173 + 1); v174 = sub_8FB140(v223, (int)&v252, (int)&v225, (int)&v224, 0); v175 = sub_8F3EB0(v225 - v12, v224 - v13, (int)v174, v2, 0, 0); *v218 = (volatile LONG)v175; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v175 + 240))(v175, 0); v173 = (char *)v221; ++v218; } while ( (signed int)v221 < 8 ); v222 = (int)sub_8FB140(v223, (int)"ChrEquipON", (int)&v225, (int)&v224, 0); sub_8FB650((_DWORD *)v222, v223, (int)"ChrEquipOff"); v176 = sub_8FE0F0(v225 - v12, v224 - v13, v222, v2, 28, 0, 0); *(_DWORD *)(v2 + 2540) = v176; if ( v176 ) { v216 = 0; LOBYTE(v253) = 1; v221 = (void *)dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v178 = 0; do { v179 = byte_ACA838[v178]; name[v178++] = v179; } while ( v179 ); v180 = &name[strlen(name)]; qmemcpy(v180, "ItemSort_Button_US.nif", 0x14u); v180 += 20; v181 = v221; *(_WORD *)v180 = *(_WORD *)"if"; v180 += 2; *v180 = aItemsortButton[22]; v182 = (int)(v180 + 1); sub_8F66B0(name, (int)&v216, (int)v181); v183 = COERCE_FLOAT(operator new(0x44u)); *(float *)&v221 = v183; LOBYTE(v253) = 2; if ( v183 == 0.0 ) { v185 = 0; } else { v184 = sub_85BD60((void *)v216); v185 = sub_6B0A90((float *)LODWORD(v183), v184); } v186 = *(int **)(v2 + 1628); *(_DWORD *)(v2 + 1632) = v185; v187 = *(_DWORD *)v185; v213 = *((float *)v186 + 22); v188 = *((float *)v186 + 23); v215 = *((float *)v186 + 24); v189 = *(_DWORD *)(v2 + 1680); v214 = v188; v190 = *(int (**)(void))(*(_DWORD *)v189 + 148); LOBYTE(v253) = 1; *(float *)&v221 = COERCE_FLOAT(v190()); v191 = *(int (**)(void))(**(_DWORD **)(v2 + 1728) + 148); v220 = (double)(unsigned int)v221 - v214; *(float *)&v221 = (double)(unsigned int)v191() + v220; v219 = -v213; v192 = *(float *)&v221; *(float *)(v187 + 88) = v219; *(float *)&v220 = v192; v193 = v215; *(_DWORD *)(v187 + 92) = LODWORD(v220); *((float *)&v220 + 1) = v193; *(_DWORD *)(v187 + 96) = HIDWORD(v220); *(_BYTE *)(*(_DWORD *)(v2 + 1632) + 65) = 1; v194 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v195 = 0; do { v196 = byte_ACA838[v195]; name[v195++] = v196; } while ( v196 ); v197 = &name[strlen(name)]; *(_DWORD *)v197 = 1835365449; *((_DWORD *)v197 + 1) = 1953656659; *((_DWORD *)v197 + 2) = 1918976607; *((_DWORD *)v197 + 3) = 777213279; *((_DWORD *)v197 + 4) = &loc_66696E; sub_8F66B0(name, (int)&v216, v194); v198 = COERCE_FLOAT(operator new(0x44u)); *(float *)&v221 = v198; LOBYTE(v253) = 3; if ( v198 == 0.0 ) { v200 = 0; } else { v199 = sub_85BD60((void *)v216); v200 = sub_6B0A90((float *)LODWORD(v198), v199); } v201 = *(int **)(v2 + 1644); *(_DWORD *)(v2 + 1636) = v200; v202 = *(_DWORD *)v200; v213 = *((float *)v201 + 22); v203 = *((float *)v201 + 23); v215 = *((float *)v201 + 24); v204 = *(_DWORD *)(v2 + 1680); v214 = v203; v205 = *(int (**)(void))(*(_DWORD *)v204 + 148); LOBYTE(v253) = 1; *(float *)&v221 = COERCE_FLOAT(v205()); v206 = *(int (**)(void))(**(_DWORD **)(v2 + 1728) + 148); v220 = (double)(unsigned int)v221 - v214; *(float *)&v221 = (double)(unsigned int)v206() + v220; v219 = -v213; v207 = *(float *)&v221; *(float *)(v202 + 88) = v219; *(float *)&v220 = v207; v208 = v215; *(_DWORD *)(v202 + 92) = LODWORD(v220); *((float *)&v220 + 1) = v208; *(_DWORD *)(v202 + 96) = HIDWORD(v220); *(_BYTE *)(*(_DWORD *)(v2 + 1636) + 65) = 1; (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.81999999, 0.57999998); sub_535C00(v2, v182, 0); LOBYTE(v253) = 0; if ( v216 ) { v209 = (void (__thiscall ***)(_DWORD, signed int))v216; if ( !InterlockedDecrement((volatile LONG *)(v216 + 4)) ) { if ( v209 ) (**v209)(v209, 1); } } v210 = (void (__thiscall ***)(_DWORD, signed int))v223; v253 = -1; if ( v223 && !InterlockedDecrement((volatile LONG *)(v223 + 4)) && v210 ) (**v210)(v210, 1); result = 1; } else { v177 = (void (__thiscall ***)(_DWORD, signed int))v223; v253 = -1; if ( v223 && !InterlockedDecrement((volatile LONG *)(v223 + 4)) && v177 ) (**v177)(v177, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0053B3C0) -------------------------------------------------------- char __thiscall sub_53B3C0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // edi char result; // al v4 = this; if ( a2 == 27 && a3 ) { if ( dword_B67408 ) result = sub_537BA0(this - 58, 0); if ( !*a3 ) result = sub_4B7AD0((_DWORD *)v4[16], dword_ACEC20, 1); } return result; } // ACEC20: using guessed type int dword_ACEC20; // B67408: using guessed type int dword_B67408; //----- (0053B410) -------------------------------------------------------- char __usercall sub_53B410@(int a1@, int a2@) { int v2; // esi char result; // al v2 = a1; if ( *(_BYTE *)(a1 + 1677) ) result = (unsigned int)sub_535C00(a1, a2, *(_DWORD *)(a1 + 1432)); if ( dword_ACEC24 == 8 ) result = (unsigned int)sub_8EEE70(*(_DWORD **)(v2 + 296), 266, 0, 0); if ( dword_B67404 ) return sub_68BFA0(*(int **)(*(_DWORD *)(v2 + 296) + 1216)); if ( dword_B67408 ) return sub_537BA0((_DWORD *)v2, 0); if ( dword_B6740C ) result = sub_534620((_DWORD *)v2); return result; } // ACEC24: using guessed type int dword_ACEC24; // B67404: using guessed type int dword_B67404; // B67408: using guessed type int dword_B67408; // B6740C: using guessed type int dword_B6740C; //----- (0053B490) -------------------------------------------------------- void __thiscall sub_53B490(int this) { _DWORD *v1; // esi unsigned int v2; // ebx int v3; // edx _DWORD *v4; // ecx int v5; // edi volatile LONG *v6; // ebx _DWORD *v7; // ecx int v8; // ecx int v9; // ST00_4 _DWORD *v10; // ecx int v11; // edi int v12; // eax void *v13; // ebx _DWORD *v14; // ecx int v15; // edx _DWORD *v16; // ecx _DWORD *v17; // ebx unsigned int v18; // eax int v19; // eax int v20; // edx int v21; // eax float *v22; // [esp-4h] [ebp-40h] float v23; // [esp+10h] [ebp-2Ch] float v24; // [esp+14h] [ebp-28h] float v25; // [esp+18h] [ebp-24h] float v26; // [esp+1Ch] [ebp-20h] float **v27; // [esp+20h] [ebp-1Ch] volatile LONG *v28; // [esp+24h] [ebp-18h] int v29; // [esp+28h] [ebp-14h] _DWORD *v30; // [esp+2Ch] [ebp-10h] int v31; // [esp+38h] [ebp-4h] v1 = (_DWORD *)this; if ( *(_BYTE *)(this + 2557) ) { v2 = sub_534660((_DWORD **)this, *(_WORD *)(this + 2568)); v27 = (float **)v2; if ( v2 <= 0xC0 ) { if ( v1[636] == v2 / 0x18 ) { if ( v2 != v1[640] ) { v30 = 0; v8 = v1[641]; v22 = (float *)&v30; v9 = v8; v10 = (_DWORD *)v1[638]; v31 = 2; sub_455570(v10, v9, (int *)&v30); v11 = (int)v30; if ( v30 ) { v12 = sub_402BF0(v30); v13 = (void *)v12; v29 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); LOBYTE(v31) = 3; if ( v13 ) { sub_455710(v13, (int *)&v28, v11); sub_410C00(&v28); } sub_403A70(&unk_BA6B10, &v28, (_DWORD *)v11); sub_410C00(&v28); if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v14 = (_DWORD *)v1[638]; v22 = (float *)v1[641]; v30 = 0; sub_916F40(v14, (int)v22); LOBYTE(v31) = 2; sub_410C00(&v29); v2 = (unsigned int)v27; } v31 = -1; sub_410C00(&v30); } v1[640] = v2; v30 = 0; v15 = v1[641]; v22 = (float *)&v30; v16 = (_DWORD *)v1[638]; v31 = 4; sub_455570(v16, v15, (int *)&v30); v17 = v30; if ( !v30 ) { v18 = v1[640]; if ( v18 >= 0xC0 || (v19 = v1[v18 + 87]) == 0 ) { v31 = -1; sub_410C00(&v30); return; } v20 = *(_DWORD *)(v1[638] + 12); v23 = 255.0; v24 = 250.0; v22 = &v23; v25 = 205.0; v1[641] = v20; v26 = 255.0; v21 = sub_455D00(v19, (int)v22); v27 = &v22; v22 = (float *)v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); sub_6688B0((_DWORD *)v1[638], v1[641], (int)v22); } v31 = -1; if ( v17 && !InterlockedDecrement(v17 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); } else { v30 = 0; v3 = v1[641]; v22 = (float *)&v30; v4 = (_DWORD *)v1[638]; v31 = 0; sub_455570(v4, v3, (int *)&v30); v5 = (int)v30; if ( v30 ) { v6 = (volatile LONG *)sub_402BF0(v30); v28 = v6; if ( v6 ) InterlockedIncrement(v6 + 1); LOBYTE(v31) = 1; if ( v6 ) { sub_455710((void *)v6, &v29, v5); sub_410C00(&v29); } sub_403A70(&unk_BA6B10, &v29, (_DWORD *)v5); sub_410C00(&v29); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v22 = (float *)v1[641]; v7 = (_DWORD *)v1[638]; v5 = 0; v30 = 0; sub_916F40(v7, (int)v22); LOBYTE(v31) = 0; sub_410C00(&v28); } v31 = -1; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } } } } //----- (0053B7C0) -------------------------------------------------------- void __thiscall sub_53B7C0(char *this, int a2) { char *v2; // esi int v3; // eax int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi __int64 v6; // rax signed __int64 v7; // rax __int64 v8; // rax signed __int64 v9; // rax __int64 v10; // rax signed __int64 v11; // rax __int64 v12; // rax signed __int64 v13; // rax signed int v14; // edi int v15; // ebx const char *v16; // eax bool v17; // zf void (__stdcall *v18)(signed int); // eax const char *v19; // eax const char *v20; // eax int v21; // [esp+10h] [ebp-8Ch] int v22; // [esp+14h] [ebp-88h] char v23; // [esp+18h] [ebp-84h] v2 = this; sub_53B490((int)this); sub_8D0730((int)(v2 + 1536), flt_ACCFCC); if ( v3 == 1 ) { sub_8D06E0((float *)v2 + 384, flt_ACCFCC, 1); v4 = *((_DWORD *)v2 + 376); if ( v4 != -1 ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)&v2[4 * v4 + 348] + 120))(&v22, *((_DWORD *)v2 + 399)); if ( v22 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v22; if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } *((_DWORD *)v2 + 376) = -1; } } v6 = sub_680E60(byte_AD9238); v7 = sub_680E90(v6); sprintf(&v23, "%I64d", v7); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 333) + 472))(&v23); v8 = sub_680E60(byte_AD9238); v9 = sub_680EB0(v8); sprintf(&v23, "%I64d", v9); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 332) + 472))(&v23); v10 = sub_680E60(byte_AD9238); v11 = sub_680F00(v10); sprintf(&v23, "%I64d", v11); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 331) + 472))(&v23); v12 = sub_680E60(byte_AD9238); v13 = sub_680F60(v12); sprintf(&v23, "%I64d", v13); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 330) + 472))(&v23); sub_6F3170(2, &v21); v22 = v21 + 2; v14 = 0; v15 = (int)(v2 + 1336); do { if ( v2[1677] ) (*(void (__stdcall **)(bool))(**(_DWORD **)(v15 + 64) + 256))(v14 >= v22); if ( v14 < v22 ) { if ( v14 == *((_DWORD *)v2 + 358) / 24 ) { if ( v14 < 2 ) v16 = sub_40C190(927110286); else v16 = sub_40C190(676560778); } else if ( v14 < 2 ) { v16 = sub_40C190(-621221563); } else { v16 = sub_40C190(-689309136); } } else { v16 = sub_40C190(-638238644); } sub_8F2EA0(*(void ***)v15, v16); ++v14; v15 += 4; } while ( v14 < 8 ); if ( v2[1677] ) { v17 = sub_6F3100(33) == 1; v18 = *(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 414) + 256); if ( v17 ) { v18(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 414) + 240))(1); v19 = sub_40A910(2040901040); sub_8F2EA0(*((void ***)v2 + 414), v19); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 415) + 256))(0); (*(void (__thiscall **)(_DWORD, _DWORD))(**((_DWORD **)v2 + 415) + 240))(*((_DWORD *)v2 + 415), 0); } else { v18(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 414) + 240))(0); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 415) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 415) + 240))(1); v20 = sub_40A910(-973423375); sub_8F2EA0(*((void ***)v2 + 415), v20); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0053BB10) -------------------------------------------------------- void __thiscall sub_53BB10(int this, unsigned int a2) { int v2; // ebx void **v3; // eax void **v4; // edi void *v5; // eax void **v6; // ecx _DWORD *v7; // eax int v8; // ebx int v9; // esi unsigned int v10; // eax char *v11; // edi char v12; // cl bool v13; // zf int v14; // edi _DWORD **v15; // ebx const CHAR *v16; // esi __int16 *v17; // esi int v18; // edi __int16 *v19; // esi int v20; // esi char *v21; // eax volatile LONG *v22; // eax _DWORD **v23; // ebx const CHAR *v24; // esi signed int v25; // eax _DWORD **v26; // esi char *v27; // eax volatile LONG *v28; // eax int v29; // eax _DWORD **v30; // ebx const CHAR *v31; // esi int v32; // eax int v33; // eax char *v34; // eax char *v35; // eax volatile LONG *v36; // edi int v37; // eax int v38; // edi _BYTE *v39; // eax unsigned __int16 v40; // ax void **v41; // ebx char *v42; // eax int **v43; // eax void **v44; // ebx void *v45; // [esp-1Ch] [ebp-300h] int v46; // [esp-18h] [ebp-2FCh] int v47; // [esp-14h] [ebp-2F8h] int v48; // [esp-10h] [ebp-2F4h] int v49; // [esp-Ch] [ebp-2F0h] int v50; // [esp-8h] [ebp-2ECh] int v51; // [esp-4h] [ebp-2E8h] unsigned int v52; // [esp+Ch] [ebp-2D8h] char v53; // [esp+10h] [ebp-2D4h] char v54; // [esp+4Ch] [ebp-298h] __int16 v55; // [esp+74h] [ebp-270h] char v56; // [esp+76h] [ebp-26Eh] char v57; // [esp+78h] [ebp-26Ch] int v58; // [esp+80h] [ebp-264h] char v59; // [esp+8Ch] [ebp-258h] int v60; // [esp+94h] [ebp-250h] int v61; // [esp+98h] [ebp-24Ch] unsigned int v62; // [esp+9Ch] [ebp-248h] char v63; // [esp+A0h] [ebp-244h] char v64; // [esp+19Fh] [ebp-145h] char v65; // [esp+1A0h] [ebp-144h] char v66; // [esp+2A0h] [ebp-44h] v2 = this; v52 = a2; switch ( dword_ACEC24 ) { case 0: *(_BYTE *)(this + 1488) = dword_ACEC24; if ( *(_BYTE *)(dword_ACDC84 + 40) & 1 ) { v3 = (void **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = v3; v52 = (unsigned int)v3; if ( v3 && sub_4A6240((_DWORD **)v3) ) { v5 = (void *)sub_4090F0(1603758548); v6 = v4; LABEL_90: sub_492060(v6, (int)v5); return; } if ( a2 < 0xC0 ) { v7 = (_DWORD *)sub_5D5470(*(_DWORD **)(v2 + 4 * a2 + 348)); if ( v7 ) { v8 = v7[28]; qmemcpy(&v53, v7 + 2, 0x67u); v9 = (*(int (__thiscall **)(_DWORD *))(*v7 + 36))(v7); strncpy(&v65, (const char *)(v8 + 34), strlen((const char *)(v8 + 34)) + 1); if ( v9 ) { v51 = v9; sprintf(&v66, " [+%d]", v9); v10 = strlen(&v66) + 1; v11 = &v64; do v12 = (v11++)[1]; while ( v12 ); qmemcpy(v11, &v66, v10); } sprintf(&v63, "<\t%s\t>", &v65); if ( v52 ) sub_4A6090((_DWORD **)v52, &v63, (int)&v53); } } return; } v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( !v13 ) { sub_535240((_DWORD *)this, v51); return; } LABEL_19: sub_535180((_DWORD *)this, (_DWORD *)v51); return; case 1: *(_BYTE *)(this + 1488) = 0; v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( !v13 ) { sub_5352E0((_DWORD *)this, v51); return; } goto LABEL_19; case 2: *(_BYTE *)(this + 1488) = 0; v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( v13 ) sub_534420((_DWORD *)this, v51); else sub_535550((_DWORD *)this, v51); break; case 3: *(_BYTE *)(this + 1488) = 0; v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( v13 ) sub_534380((_DWORD *)this, v51); else sub_535040((_DWORD *)this, v51); break; case 4: *(_BYTE *)(this + 1488) = 0; v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( v13 ) sub_534520((_DWORD *)this, v51); else sub_5361A0((_DWORD *)this, v51); break; case 5: *(_BYTE *)(this + 1488) = 0; v13 = (*(_BYTE *)(dword_ACDC84 + 38) & 4) == 0; v51 = a2; if ( v13 ) sub_5344A0((_DWORD *)this, v51); else sub_535690((_DWORD *)this, v51); break; case 6: if ( a2 < 0xC0 ) v14 = dword_ADA234[a2]; else v14 = 0; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v14 + 4))(v14) == 26 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v14 + 4))(v14) == 37 ) { sub_5345A0((_DWORD *)v2, a2 & 0x3FF | 0x2400); } else { v15 = (_DWORD **)(v2 + 232); v16 = sub_40A910(-1304813505); if ( v15[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v15[1] + 4))(25, v16, v15); if ( v15[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v15[1] + 20))(25, v16, v15); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v15)[5])(v15, 25, v16, v15); } break; case 7: if ( a2 < 0xC0 ) v17 = (__int16 *)dword_ADA234[a2]; else v17 = 0; v18 = *((_DWORD *)v17 + 28); if ( (*(unsigned __int8 (__thiscall **)(__int16 *))(*(_DWORD *)v17 + 4))(v17) != 5 || *(_DWORD *)(v18 + 98) ) { v30 = (_DWORD **)(v2 + 232); v31 = sub_40A910(1452765642); if ( v30[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v30[1] + 4))(25, v31, v30); if ( v30[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v30[1] + 20))(25, v31, v30); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v30)[5])(v30, 25, v31, v30); } else { v19 = v17 + 4; qmemcpy(&v53, v19, 0x64u); v19 += 50; v55 = *v19; v56 = *((_BYTE *)v19 + 2); if ( v54 ) { v20 = v2 + 1464; if ( !*(_DWORD *)(v2 + 1464) ) { v21 = (char *)sub_40A910(238953241); v22 = sub_462CA0(1, v21); sub_56FF80((_DWORD *)(v2 + 1464), (int)v22); v23 = (_DWORD **)(v2 + 232); (**(void (__thiscall ***)(int, _DWORD **))(*(_DWORD *)v20 + 232))(*(_DWORD *)v20 + 232, v23); v24 = sub_40A910(238953241); if ( v23[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v23[1] + 4))(25, v24, v23); if ( v23[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v23[1] + 20))(25, v24, v23); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v23)[5])(v23, 25, v24, v23); } } else { v25 = *(_DWORD *)(v2 + 1468); if ( v25 >= 0 && v25 < 192 ) { v26 = (_DWORD **)(v2 + 1464); if ( !*(_DWORD *)(v2 + 1464) ) { v27 = (char *)sub_40A910(305864732); v28 = sub_462CA0(2, v27); sub_56FF80((_DWORD *)(v2 + 1464), (int)v28); v61 = *(_DWORD *)(v2 + 1468); v60 = 255; v62 = v52 | 0x2400; v29 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760(*v26, v29, &v59, 0); (*(void (__thiscall **)(_DWORD *, int))(*v26)[58])(*v26 + 58, v2 + 232); } } } } break; case 8: if ( a2 < 0xC0 ) v32 = dword_ADA234[a2]; else v32 = 0; v33 = *(_DWORD *)(v32 + 112); if ( v33 ) v51 = v33 + 34; else v51 = (int)&unk_9C8A8B; v34 = (char *)sub_40A910(1872743914); v35 = sub_7549E0(v34, v51); v36 = sub_462C30(2, v35); sub_4A3820(); unknown_libname_5(0); v60 = 263; v58 = 266; v62 = a2; v37 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760(v36, v37, &v59, &v57); if ( v2 ) (**((void (__thiscall ***)(int, int))v36 + 58))((int)(v36 + 58), v2 + 232); else (**((void (__thiscall ***)(int, _DWORD))v36 + 58))((int)(v36 + 58), 0); break; case 9: if ( a2 < 0xC0 ) v38 = dword_ADA234[a2]; else v38 = 0; v39 = (_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)v38 + 48))(v38); if ( !v39 || *(_DWORD *)(v2 + 1484) < 0 || !(*v39 & 0xFE) ) { v44 = *(void ***)(v2 + 296); v5 = (void *)sub_4090F0(-1732315197); v6 = v44; goto LABEL_90; } if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v38 + 72))(v38) ) { v52 = (unsigned int)&v45; sub_4019E0(&v45, "LimitRandomOption"); v40 = sub_747F30(&unk_ACDC6C, v45, v46, v47, v48, v49, v50, v51); v41 = *(void ***)(v2 + 296); v51 = v40; v42 = (char *)sub_4090F0(-1765869629); v5 = sub_7549E0(v42); v6 = v41; goto LABEL_90; } if ( !*(_DWORD *)(v2 + 1480) ) *(_DWORD *)(v2 + 1480) = sub_445E60(*(_DWORD *)(v2 + 296)); v43 = (int **)sub_445180(*(volatile LONG **)(v2 + 1480)); v51 = v38; v50 = a2; *(_DWORD *)(v2 + 1480) = v43; sub_4453C0(v43, v50, v51); break; default: return; } } // 46EDD0: using guessed type _DWORD __stdcall unknown_libname_5(_DWORD); // ACDC84: using guessed type int dword_ACDC84; // ACEC24: using guessed type int dword_ACEC24; //----- (0053C300) -------------------------------------------------------- _DWORD *__thiscall sub_53C300(_DWORD **this, _DWORD *a2, signed int a3) { __int16 v3; // bx signed int v4; // esi _DWORD **v5; // edi _DWORD *result; // eax v3 = a3; v4 = 0; v5 = this + 87; do { result = (_DWORD *)sub_5D5470(*v5); if ( result ) { result = (_DWORD *)result[28]; if ( result ) { if ( *(_WORD *)result == v3 ) { a3 = v4; result = sub_5B3CF0(a2, &a3); } } } ++v4; ++v5; } while ( v4 < 192 ); return result; } //----- (0053C350) -------------------------------------------------------- int __thiscall sub_53C350(_DWORD **this, signed int a2) { _DWORD **v2; // edi int v4; // ebx void *v5; // eax int *v6; // esi int v7; // eax int v8; // eax void *v9; // [esp+10h] [ebp-1Ch] _DWORD *v10; // [esp+14h] [ebp-18h] int v11; // [esp+18h] [ebp-14h] int v12; // [esp+28h] [ebp-4h] v2 = this; if ( (_WORD)a2 == -1 ) return 0; v4 = 0; v9 = 0; v10 = 0; v11 = 0; v12 = 0; sub_53C300(this, &v9, a2); v5 = v9; if ( v9 != v10 ) { v6 = (int *)v9; do { v7 = *v6; if ( (unsigned int)*v6 < 0xC0 && v2[v7 + 87] && sub_5D5470(v2[v7 + 87]) ) { v8 = sub_5D5470(v2[*v6 + 87]); v4 += (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 12))(v8); } ++v6; } while ( v6 != v10 ); v5 = v9; } if ( v5 ) operator delete(v5); return v4; } //----- (0053C430) -------------------------------------------------------- char __thiscall sub_53C430(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; sub_5D5420(v5, 1); a5 = v5; sub_5B3CF0(&dword_AD02C4, &a5); result = 1; } return result; } //----- (0053C480) -------------------------------------------------------- void __thiscall sub_53C480(_DWORD *this, int a2) { _DWORD *v2; // edi void ***v3; // esi void ***v4; // eax void ***v5; // eax v2 = this; if ( !dword_BA6BCC ) { v3 = (void ***)dword_ACEC30; if ( !dword_ACEC30 ) { v4 = (void ***)operator new(0x48u); v3 = v4; if ( v4 ) { sub_6C2E00(v4, 0); *v3 = &ChargedItemUseTask::`vftable'; v3[2] = &ChargedItemUseTask::`vftable'; } else { v3 = 0; } dword_ACEC30 = (int)v3; } v5 = (void ***)sub_74E250(&unk_ADB2A8, a2 - 24 * v2[97]); if ( v5 ) v3[17] = *v5; else v3[5] = (void **)2; ((void (__thiscall *)(void ***, _DWORD *))*v3[2])(v3 + 2, v2 + 58); } } // 9CA1D0: using guessed type void *ChargedItemUseTask::`vftable'; // 9CA1EC: using guessed type void *ChargedItemUseTask::`vftable'; // ACEC30: using guessed type int dword_ACEC30; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0053C690) -------------------------------------------------------- void __thiscall sub_53C690(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi int v3; // eax char *v4; // ebx unsigned __int16 *v5; // esi int v6; // eax int v7; // eax int v8; // eax int v9; // ecx _DWORD *v10; // ebx _DWORD *v11; // ebx _DWORD **v12; // edi const CHAR *v13; // esi int v14; // eax _DWORD **v15; // edi const CHAR *v16; // esi char v17; // ST0C_1 __int64 v18; // rax int v19; // esi int v20; // ebx int v21; // ebx int v22; // esi int v23; // eax int v24; // esi _DWORD **v25; // eax _DWORD *v26; // esi int v27; // eax int v28; // ebx int v29; // eax int v30; // eax int v31; // esi unsigned int v32; // ebx unsigned __int16 *v33; // eax int v34; // eax int v35; // [esp+1Ch] [ebp-14h] _DWORD **v36; // [esp+20h] [ebp-10h] int v37; // [esp+24h] [ebp-Ch] unsigned int v38; // [esp+24h] [ebp-Ch] char v39; // [esp+28h] [ebp-8h] _DWORD *v40; // [esp+2Ch] [ebp-4h] signed int v41; // [esp+38h] [ebp+8h] v2 = this; if ( a2 >= 0xC0 ) return; if ( !this[a2 + 87] ) return; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[a2 + 87] + 324))(0.0); v3 = sub_5D5470((_DWORD *)v2[a2 + 87]); v4 = (char *)v3; v37 = v3; if ( !v3 ) return; v5 = *(unsigned __int16 **)(v3 + 112); if ( !v5 ) return; v6 = sub_53D9E0(*v5); if ( !v6 ) goto LABEL_77; v7 = sub_4507F0((const char *)(v6 + 2)); v40 = (_DWORD *)v7; if ( !v7 ) goto LABEL_77; v8 = *(_DWORD *)(v7 + 36); if ( v8 == 36 ) { v9 = v2[74]; v10 = *(_DWORD **)(v9 + 5120); if ( v10 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD))(*v10 + 260))(*(_DWORD *)(v9 + 5120)) ) { sub_53D9B0(v10, a2, *v5, *((unsigned __int16 *)v40 + 20), v35); sub_8F82A0(&unk_BA6B10, v10); sub_536E90(v2[a2 + 87], 1); } } return; } if ( v8 == 37 ) { v11 = *(_DWORD **)(v2[74] + 5128); if ( v11 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v11 + 260))(v11) ) { sub_44F2B0(v11, (const char *)v5 + 2, *((_WORD *)v40 + 17), a2); sub_8F82A0(&unk_BA6B10, v11); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 260))(v2) ) sub_8F82A0(&unk_BA6B10, v2); } } } else { LABEL_77: sub_6BA9B0(*v5); switch ( *(_DWORD *)(v5 + 49) ) { case 0: if ( !sub_684730((int)v5) ) goto LABEL_34; if ( *((_DWORD *)v5 + 58) == 16 || sub_6862A0((int)v5) ) { v14 = *(_DWORD *)(v5 + 51); if ( v14 != 26 && v14 != 37 || sub_685140(&byte_ADA230) || (v40 = 0, sub_65B8B0(dword_AD8EBC, 0, (unsigned int *)&v40, 0), v40 != (_DWORD *)300000) && v40 != (_DWORD *)600000 && v40 != (_DWORD *)700000 ) { LABEL_34: if ( *(_DWORD *)(v5 + 59) == 4 && (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 44))(v4) && !*(_BYTE *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 44))(v4) ) { goto LABEL_78; } if ( !sub_74DF70(&dword_AD9E70, *(_DWORD *)(v5 + 137)) ) { sub_4C1390((_DWORD *)v2[74], a2); return; } if ( sub_6869F0(v4) ) { sub_4C1390((_DWORD *)v2[74], a2); return; } if ( *(_DWORD *)(v5 + 49) || (v17 = sub_6807E0(byte_AD9238), v18 = sub_6622F0(*(_DWORD *)((char *)v5 + 207)), sub_419A10(v18, v17)) ) { LABEL_78: v19 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v19, a2); (**(void (__thiscall ***)(int, _DWORD))(v19 + 8))(v19 + 8, v2[74]); sub_6C2ED0((_DWORD *)v19, v2[74]); return; } } else { v15 = (_DWORD **)(v2 + 58); v16 = sub_40A910(1135981509); if ( v15[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v15[1] + 4))(25, v16, v15); if ( v15[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v15[1] + 20))(25, v16, v15); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v15)[5])(v15, 25, v16, v15); } } else { v12 = (_DWORD **)(v2 + 58); v13 = sub_40A910(-1493364926); if ( v12[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v12[1] + 4))(25, v13, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v12[1] + 20))(25, v13, v12); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v12)[5])(v12, 25, v13, v12); } break; case 1: if ( *(_DWORD *)(v5 + 51) == 30 ) { if ( sub_4E3A60((_DWORD *)v2[74], 0.0) ) { sub_536E90(v2[a2 + 87], 1); v2[405] = a2; v2[406] = v4; } } else { v20 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v20, a2); (**(void (__thiscall ***)(int, _DWORD))(v20 + 8))(v20 + 8, v2[74]); if ( *(_DWORD *)(v5 + 51) == 18 ) sub_4A5000((_DWORD *)v2[74]); } return; case 2: if ( *(_DWORD *)(v5 + 51) == 13 ) { v21 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v21, a2); (**(void (__thiscall ***)(int, _DWORD))(v21 + 8))(v21 + 8, v2[74]); } if ( !strcmp((const char *)v5 + 2, "ProposeRing") ) { v22 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v22, a2); (**(void (__thiscall ***)(int, _DWORD))(v22 + 8))(v22 + 8, v2[74]); } return; case 4: v25 = (_DWORD **)sub_6CD770(); v36 = v25; if ( v25 ) { v26 = v25[1]; v40 = v25[1]; v41 = 0; if ( (unsigned __int16)sub_53DA30(v40) > 0u ) { do { v27 = sub_74E2E0(v26, v41); v28 = v27; if ( v27 ) { if ( *(_BYTE *)(v27 + 32) ) { if ( !*(_BYTE *)(v27 + 29) && *(_WORD *)(v27 + 34) == *(_WORD *)(v37 + 8) ) { v29 = sub_74BA80(v36, *(_WORD *)(v27 + 4)); if ( v29 == 5 || v29 == 9 || v29 == 4 ) { v30 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v31 = v30; if ( v30 ) { sub_620040(*(_DWORD ***)(v30 + 1296)); sub_6205F0(*(_DWORD **)(v31 + 1296), *(_WORD *)(v28 + 4)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v31 + 1296)); sub_8F86A0(&unk_BA6B10, v2); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v31 + 1296)); } v26 = v40; } } } } ++v41; } while ( v41 < (unsigned __int16)sub_53DA30(v26) ); } } return; case 5: v23 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v23 + 816) + 260))() ) { v24 = *sub_4A3B80(&v39); sub_410C00(&v39); if ( v24 ) sub_727170(a2); } return; case 6: if ( *(_DWORD *)(v5 + 51) == 31 ) { v38 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 64))(v4); v32 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 56))(v4); v33 = (unsigned __int16 *)sub_4DCD20((char *)v5 + 2); if ( v33 ) v34 = *v33; else v34 = 0; sub_4E4710((_DWORD *)v2[74], 0.0, a2, v34, v38, v32); } return; default: return; } } } // AD9E70: using guessed type int dword_AD9E70; // ADA230: using guessed type char byte_ADA230; //----- (0053CD30) -------------------------------------------------------- char __thiscall sub_53CD30(void *this, _DWORD *a2, int a3) { int v3; // edi int v4; // ebx int v5; // eax unsigned int v6; // esi int v7; // eax char *v8; // edi int v9; // esi char v10; // ST08_1 __int64 v11; // rax int v12; // esi char result; // al int v14; // eax int v15; // edi const char *v16; // eax const CHAR *v17; // edi const CHAR *v18; // edi int v19; // [esp+14h] [ebp+8h] v3 = a2[2]; v4 = (int)this; if ( !a2[4] ) { v5 = a2[5]; if ( v5 ) sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } if ( v3 ) return 0; v6 = a2[3]; v19 = v6; if ( v6 >= 0xC0 ) return 0; v7 = sub_5D5470(*(_DWORD **)(v4 + 4 * v6 + 348)); v8 = (char *)v7; if ( !v7 ) return 0; v9 = *(_DWORD *)(v7 + 112); if ( *(_DWORD *)(v9 + 98) ) return 0; if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v9 + 274)) && !sub_6869F0(v8) ) { if ( *(_DWORD *)(v9 + 98) || (v10 = sub_6807E0(byte_AD9238), v11 = sub_6622F0(*(_DWORD *)(v9 + 207)), sub_419A10(v11, v10)) ) { v12 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v12, v19); (**(void (__thiscall ***)(int, _DWORD))(v12 + 8))(v12 + 8, *(_DWORD *)(v4 + 296)); sub_6C2ED0((_DWORD *)v12, *(_DWORD *)(v4 + 296)); return 1; } return 1; } v14 = *(_DWORD *)(v9 + 110); v15 = a3; if ( v14 == 15 && (a3 == 15 || a3 == 16) ) { sub_4B7CD0(*(_DWORD **)(v4 + 296), v19, a3); return 1; } if ( v14 == 25 ) { v16 = sub_4B17D0((const char *)(v9 + 2)); if ( v16 && *((_DWORD *)v16 + 8) == 2 && (v15 == 25 || v15 == 28) ) { sub_4B7D20(*(_DWORD **)(v4 + 296), v19, v15); result = 1; } else { sub_4C1390(*(_DWORD **)(v4 + 296), v19); result = 1; } return result; } if ( !sub_684730(v9) ) goto LABEL_46; if ( *(_DWORD *)(v9 + 232) != 16 && !sub_6862A0(v9) ) { v17 = sub_40A910(-1493364926); if ( *(_DWORD *)(v4 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v4 + 236) + 4))(25, v17, v4 + 232); if ( *(_DWORD *)(v4 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v4 + 236) + 20))(25, v17, v4 + 232); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v4 + 232) + 20))( v4 + 232, 25, v17, v4 + 232); return 0; } if ( *(_DWORD *)(v9 + 102) != 26 || sub_685140(&byte_ADA230) && *(_DWORD *)(v9 + 102) != 37 || (a3 = 0, sub_65B8B0(dword_AD8EBC, 0, (unsigned int *)&a3, 0), a3 != 300000) && a3 != 600000 && a3 != 700000 ) { LABEL_46: sub_4C1390(*(_DWORD **)(v4 + 296), v19); return 1; } v18 = sub_40A910(1135981509); if ( *(_DWORD *)(v4 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v4 + 236) + 4))(25, v18, v4 + 232); if ( *(_DWORD *)(v4 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v4 + 236) + 20))(25, v18, v4 + 232); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v4 + 232) + 20))(v4 + 232, 25, v18, v4 + 232); return 0; } // AD9E70: using guessed type int dword_AD9E70; // ADA230: using guessed type char byte_ADA230; //----- (0053CFF0) -------------------------------------------------------- char __thiscall sub_53CFF0(int this, int a2, int a3, int a4) { int v4; // edi char result; // al _DWORD *v6; // esi int v7; // eax _DWORD *v8; // ecx v4 = this; if ( *(_BYTE *)(this + 457) || !*(_DWORD *)a2 || !*(_BYTE *)(this + 456) ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 || dword_ACEC24 != 1 && v6[4] ) return 0; v7 = v6[2]; if ( v7 ) { if ( v7 != 1 && v7 != 2 && v7 != 6 && v7 != 5 && v7 != 7 && v7 != 3 && v7 != 19 && v7 != 13 ) return 0; } v8 = (_DWORD *)sub_402BF0((_DWORD *)this); if ( *(_DWORD *)(v4 + 452) == 9 ) result = sub_535820(v8, v6, *(_DWORD *)(v4 + 448)); else result = sub_53CD30(v8, v6, *(_DWORD *)(v4 + 448)); return result; } // ACEC24: using guessed type int dword_ACEC24; //----- (0053D0A0) -------------------------------------------------------- void __thiscall sub_53D0A0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int v4; // eax if ( (unsigned int)(a2 - 4) > 0x17 ) { switch ( a2 ) { case 1: v4 = this[97]; if ( v4 ) this[97] = v4 - 1; LOWORD(a2) = *((_WORD *)this + 194); sub_6F3D10(&off_AB7F2C, 12, 32, &a2, 2u); break; case 2: if ( (unsigned int)dword_ADB428 >= 0x18 ) { ++this[97]; LOWORD(a2) = *((_WORD *)this + 194); sub_6F3D10(&off_AB7F2C, 12, 32, &a2, 2u); } break; case 3: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "ChrInv"); break; } } else { sub_53C480(this, a2 + 24 * this[97] - 4); } } // AB7F2C: using guessed type void **off_AB7F2C; // ADB428: using guessed type int dword_ADB428; //----- (0053D160) -------------------------------------------------------- void __thiscall sub_53D160(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // ecx int v5; // eax int v6; // esi int v7; // eax _DWORD *v8; // eax int v9; // eax int v10; // eax char *v11; // edi int v12; // esi int v13; // ST10_4 int v14; // eax int v15; // eax int v16; // eax _DWORD *v17; // eax int v18; // eax int v19; // eax char *v20; // edi int v21; // esi int v22; // ST10_4 int v23; // eax int v24; // eax int v25; // eax _DWORD *v26; // eax int v27; // eax _DWORD *v28; // esi const CHAR *v29; // eax int v30; // [esp-Ch] [ebp-10h] v3 = this; if ( !sub_65B9D0(dword_AD8EBC, 500000) && !dword_AD8EBC[2496] ) { v4 = v3[a2 + 87]; if ( !*(_BYTE *)(v4 + 457) && !dword_BA6BCC ) { if ( dword_ACEC24 && a3 != 1 ) { switch ( dword_ACEC24 ) { case 1: v5 = sub_5D5470((_DWORD *)v4); v6 = v5; if ( !v5 ) goto LABEL_59; v7 = *(_DWORD *)(v5 + 112); if ( v7 && !sub_74DE20(&dword_AD9E70, *(_DWORD *)(v7 + 274)) ) { v30 = -1533312649; LABEL_54: v28 = (_DWORD *)v3[74]; v29 = sub_40C190(v30); sub_492060(v28, (int)v29); return; } v8 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 44))(v6); if ( !v8 || (v9 = *v8 & 0xFF) == 0 || v9 == 255 ) { LABEL_59: sub_535370(v3, a2); return; } LABEL_53: v30 = -1634432127; goto LABEL_54; case 2: if ( byte_BA6A64 ) { sub_5354B0((_DWORD **)v3, a2); return; } v10 = sub_5D5470((_DWORD *)v4); v11 = (char *)v10; if ( !v10 ) goto LABEL_31; v12 = *(_DWORD *)(v10 + 112); if ( !v12 ) { LABEL_28: v17 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v11 + 44))(v11); if ( v17 ) { v18 = *v17 & 0xFF; if ( v18 ) { if ( v18 != 255 ) goto LABEL_53; } } LABEL_31: sub_5354B0((_DWORD **)v3, a2); return; } v13 = *(_DWORD *)(v12 + 274); a3 = 0; if ( !sub_74DFD0(&dword_AD9E70, v13) && !sub_74DF90(&dword_AD9E70, *(_DWORD *)(v12 + 274)) ) { v14 = sub_6869F0(v11); if ( !sub_74E030((char *)&dword_AD9E70, *(_DWORD *)(v12 + 274), v14, 9u, 6u, &a3) ) { v30 = -2102363671; goto LABEL_54; } goto LABEL_28; } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v12 + 274)) == 1 ) { v15 = sub_6869F0(v11); if ( !sub_74DF20(&dword_AD9E70, *(_DWORD *)(v12 + 274), v15) ) { v16 = sub_6869F0(v11); if ( !sub_74DEC0(&dword_AD9E70, *(_DWORD *)(v12 + 274), v16) ) goto LABEL_28; } } LABEL_49: v30 = -857857511; goto LABEL_54; case 3: sub_5350D0((_DWORD **)v3, a2); return; case 4: v30 = 237968494; goto LABEL_54; case 5: if ( byte_BA6A64 ) { sub_5355F0((_DWORD **)v3, a2); } else { v19 = sub_5D5470((_DWORD *)v4); v20 = (char *)v19; if ( v19 ) { v21 = *(_DWORD *)(v19 + 112); if ( v21 ) { v22 = *(_DWORD *)(v21 + 274); a3 = 0; if ( sub_74DFD0(&dword_AD9E70, v22) || sub_74DF90(&dword_AD9E70, *(_DWORD *)(v21 + 274)) ) { if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v21 + 274)) != 1 ) goto LABEL_49; v24 = sub_6869F0(v20); if ( sub_74DF20(&dword_AD9E70, *(_DWORD *)(v21 + 274), v24) ) goto LABEL_49; v25 = sub_6869F0(v20); if ( sub_74DEC0(&dword_AD9E70, *(_DWORD *)(v21 + 274), v25) ) goto LABEL_49; } else { v23 = sub_6869F0(v20); if ( !sub_74E030((char *)&dword_AD9E70, *(_DWORD *)(v21 + 274), v23, 9u, 0, &a3) ) { v30 = -2102363671; goto LABEL_54; } } } v26 = (_DWORD *)(*(int (__thiscall **)(char *))(*(_DWORD *)v20 + 44))(v20); if ( v26 ) { v27 = *v26 & 0xFF; if ( v27 ) { if ( v27 != 255 ) goto LABEL_53; } } } sub_5355F0((_DWORD **)v3, a2); } break; } } else { sub_53C690(v3, a2); } } } } // ACEC24: using guessed type int dword_ACEC24; // AD9E70: using guessed type int dword_AD9E70; // BA6A64: using guessed type char byte_BA6A64; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0053D4D0) -------------------------------------------------------- int __thiscall sub_53D4D0(_DWORD **this, void *a2) { _DWORD **v2; // esi __int16 *v3; // eax int result; // eax v2 = this; v3 = (__int16 *)sub_40C8D0(a2); if ( v3 ) result = sub_534660(v2, *v3); else result = 193; return result; } //----- (0053D500) -------------------------------------------------------- int __thiscall sub_53D500(_DWORD **this, void *a2) { _DWORD **v2; // esi __int16 *v3; // eax int result; // eax v2 = this; v3 = (__int16 *)sub_40C8D0(a2); if ( v3 ) result = sub_5348C0(v2, *v3); else result = 31; return result; } //----- (0053D530) -------------------------------------------------------- int __stdcall sub_53D530(void *a1) { unsigned __int16 *v1; // eax int result; // eax v1 = (unsigned __int16 *)sub_40C8D0(a1); if ( v1 ) result = *v1; else result = 193; return result; } //----- (0053D560) -------------------------------------------------------- void __userpurge sub_53D560(int a1@, int a2@, double a3@, int a4, unsigned int a5) { int v5; // esi int v6; // ecx int v7; // eax int v8; // ecx int v9; // eax int v10; // ecx char *v11; // esi bool v12; // zf int v13; // edi int v14; // edi int v15; // edi float v16; // [esp+2Ch] [ebp+Ch] v5 = a1; v6 = (unsigned __int8)dword_AD8EBC[1924]; switch ( a4 ) { case 3: sub_53BB10(v5, a5); break; case 4: if ( v6 != 5 ) sub_53D160((_DWORD *)v5, a5, 0); break; case 5: if ( v6 != 5 ) sub_5370B0((_DWORD *)v5, a5); break; case 6: if ( v6 != 5 && !dword_BA6BCC && dword_ACEC24 != 6 ) sub_535730((_DWORD **)v5, a5); break; case 8: sub_535C00(v5, a2, 0); break; case 9: sub_535C00(v5, a2, 1u); break; case 10: sub_535C00(v5, a2, 2u); break; case 11: sub_535C00(v5, a2, 3u); break; case 12: sub_535C00(v5, a2, 4u); break; case 13: sub_535C00(v5, a2, 5u); break; case 14: sub_535E90((char *)v5); break; case 15: sub_535D60((char *)v5); break; case 16: if ( a5 ) { v7 = sub_5D5470(*(_DWORD **)(v5 + 4 * (dword_ACEC20 & 0x3FF) + 348)); if ( v7 ) { *(_DWORD *)(v5 + 1256) = 0; *(_DWORD *)(v5 + 1264) = 0; v8 = dword_ACEC20 & 0x3FF; *(_DWORD *)(v5 + 1268) = v7; *(_DWORD *)(v5 + 1260) = v8; *(_DWORD *)(v5 + 1272) = 0; (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 12))(v7); *(_DWORD *)(v5 + 1312) = a5; *(_DWORD *)(v5 + 1244) = v5; dword_BA6BCC = v5 + 1236; } } break; case 17: if ( a5 ) sub_4B7AD0(*(_DWORD **)(v5 + 296), dword_ACEC20, a5); break; case 18: if ( a5 ) sub_4B7A80(*(_DWORD **)(v5 + 296), *(_WORD *)(v5 + 1496), a5); break; case 19: if ( a5 ) sub_533870(v5, a5); break; case 20: sub_4A6AC0(*(_DWORD ***)(v5 + 296)); break; case 21: sub_5338D0(); break; case 22: sub_5364C0(v5); break; case 23: sub_533970(a3); break; case 24: v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v9 + 964) + 260))() == 1 ) sub_4A6E40(*(_DWORD **)(v5 + 296)); else sub_533A10((_DWORD **)v5); break; case 25: v10 = *(_DWORD *)(v5 + 296); v11 = *(char **)(v10 + 5132); if ( v11 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v11 + 260))(*(_DWORD *)(v10 + 5132)) ) { sub_8F86A0(&unk_BA6B10, v11); } else { sub_8F82A0(&unk_BA6B10, v11); sub_43D330(v11); } } break; case 26: sub_535C00(v5, a2, 6u); break; case 27: sub_535C00(v5, a2, 7u); break; case 28: v12 = *(_BYTE *)(v5 + 1677) == 0; if ( !*(_BYTE *)(v5 + 1677) ) { v13 = dword_AC2F78 - (*(int (**)(void))(**(_DWORD **)(v5 + 1768) + 148))(); v14 = v13 - (*(int (**)(void))(**(_DWORD **)(v5 + 1680) + 148))(); v15 = v14 - (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); v16 = (double)(unsigned int)(v15 - (*(int (**)(void))(**(_DWORD **)(v5 + 1728) + 148))()); if ( v16 < (double)*(float *)(v5 + 92) ) sub_417B60((float *)v5, *(float *)(v5 + 88), v16, *(float *)(v5 + 96)); v12 = *(_BYTE *)(v5 + 1677) == 0; } *(_BYTE *)(v5 + 1677) = v12; sub_5366A0((_BYTE *)v5); break; default: return; } } // ACEC20: using guessed type int dword_ACEC20; // ACEC24: using guessed type int dword_ACEC24; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0053D9B0) -------------------------------------------------------- int __thiscall sub_53D9B0(_DWORD *this, int a2, int a3, int a4, int a5) { int result; // eax this[92] = a2; result = a4; this[93] = a3; this[94] = a4; this[95] = a5; return result; } //----- (0053D9E0) -------------------------------------------------------- int __cdecl sub_53D9E0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA70; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA70: using guessed type int dword_ACDA70; //----- (0053DA30) -------------------------------------------------------- __int16 __thiscall sub_53DA30(_DWORD *this) { int v1; // eax __int16 result; // ax v1 = this[4]; if ( v1 ) result = *(_WORD *)(v1 + 2); else result = 0; return result; } //----- (0053DA40) -------------------------------------------------------- void *sub_53DA40() { return &unk_ACEC28; } //----- (0053DA50) -------------------------------------------------------- void *__thiscall sub_53DA50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &InvTabButWin::`vftable'; *((_DWORD *)this + 58) = &InvTabButWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C918C: using guessed type void *InvTabButWin::`vftable'; // 9C91AC: using guessed type void *InvTabButWin::`vftable'; //----- (0053DA90) -------------------------------------------------------- void *__thiscall sub_53DA90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ChargedItemIcon::`vftable'; *((_DWORD *)this + 58) = &ChargedItemIcon::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C93E4: using guessed type void *ChargedItemIcon::`vftable'; // 9C9404: using guessed type void *ChargedItemIcon::`vftable'; //----- (0053DAD0) -------------------------------------------------------- void *__thiscall sub_53DAD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ChargedItemInvenWin::`vftable'; *((_DWORD *)this + 58) = &ChargedItemInvenWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C9670: using guessed type void *ChargedItemInvenWin::`vftable'; // 9C968C: using guessed type void *ChargedItemInvenWin::`vftable'; //----- (0053DB10) -------------------------------------------------------- void *__thiscall sub_53DB10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CompensationInvWin::`vftable'; *((_DWORD *)this + 58) = &CompensationInvWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9C9858: using guessed type void *CompensationInvWin::`vftable'; // 9C9874: using guessed type void *CompensationInvWin::`vftable'; //----- (0053DB50) -------------------------------------------------------- int sub_53DB50() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD960 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD960: using guessed type int dword_ACD960; //----- (0053DB70) -------------------------------------------------------- _DWORD *__cdecl sub_53DB70(int a1) { unsigned int v1; // esi _DWORD *result; // eax v1 = 0; if ( !sub_53DB50() ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD960 + 4), v1); if ( result ) { if ( *result == a1 ) break; } if ( ++v1 >= sub_53DB50() ) return 0; } return result; } // ACD960: using guessed type int dword_ACD960; //----- (0053DBB0) -------------------------------------------------------- void *__thiscall sub_53DBB0(void *this, char a2) { void *v2; // esi v2 = this; sub_533C20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0053DBE0) -------------------------------------------------------- void *__thiscall sub_53DBE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CompensationItemIcon::`vftable'; *((_DWORD *)this + 58) = &CompensationItemIcon::`vftable'; *((_DWORD *)this + 118) = &DropContents::`vftable'; *((_DWORD *)this + 114) = &PgWinDrop::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9C9CD0: using guessed type void *CompensationItemIcon::`vftable'; // 9C9CEC: using guessed type void *CompensationItemIcon::`vftable'; //----- (0053DC30) -------------------------------------------------------- void *__thiscall sub_53DC30(void *this, char a2) { void *v2; // esi v2 = this; sub_534220(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0053DC60) -------------------------------------------------------- void *__thiscall sub_53DC60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_ACEC30 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CA198: using guessed type void *ISingletonTask::`vftable'; // 9CA1B4: using guessed type void *ISingletonTask::`vftable'; // ACEC30: using guessed type int dword_ACEC30; //----- (0053DCC0) -------------------------------------------------------- int __thiscall sub_53DCC0(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; (*(void (__stdcall **)(_DWORD))(*this[384] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[385] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[386] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[387] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[394] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[395] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[396] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[397] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[388] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[389] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[390] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[391] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[398] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[399] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[400] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[401] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[407] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[409] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[410] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[408] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[411] + 256))(0); v1[412] = 0; return result; } //----- (0053DF10) -------------------------------------------------------- int __thiscall sub_53DF10(_DWORD **this) { _DWORD **v1; // esi int v2; // edi int result; // eax v1 = this; v2 = 0; if ( (*(unsigned __int8 (**)(void))(*this[384] + 260))() ) v2 = (int)v1[392] + (*(int (**)(void))(*v1[394] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[385] + 260))() ) v2 += (int)v1[392] + (*(int (**)(void))(*v1[395] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[386] + 260))() ) v2 += (int)v1[392] + (*(int (**)(void))(*v1[396] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[387] + 260))() ) result = (int)v1[392] + (*(int (**)(void))(*v1[397] + 144))() + v2 + 2; else result = v2; return result; } //----- (0053DFE0) -------------------------------------------------------- int __thiscall sub_53DFE0(_DWORD **this) { _DWORD **v1; // esi int v2; // edi int result; // eax v1 = this; v2 = 0; if ( (*(unsigned __int8 (**)(void))(*this[388] + 260))() ) v2 = (int)v1[392] + (*(int (**)(void))(*v1[398] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[389] + 260))() ) v2 += (int)v1[392] + (*(int (**)(void))(*v1[399] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[390] + 260))() ) v2 += (int)v1[392] + (*(int (**)(void))(*v1[400] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[391] + 260))() ) result = (int)v1[392] + (*(int (**)(void))(*v1[401] + 144))() + v2 + 2; else result = v2; return result; } //----- (0053E110) -------------------------------------------------------- void __stdcall sub_53E110(int a1, int a2) { _DWORD *v2; // eax if ( a1 == 10 ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4A60B0(v2, 0); } } //----- (0053E140) -------------------------------------------------------- unsigned int __thiscall sub_53E140(_DWORD **this) { _DWORD **v1; // esi int v2; // edi unsigned int result; // eax float *v4; // esi float v5; // ST0C_4 float v6; // [esp+14h] [ebp-8h] float v7; // [esp+18h] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(*this[413] + 144))(); v7 = (double)(unsigned int)(((int (__thiscall *)(_DWORD **))(*v1)[36])(v1) - v2); result = (*(int (**)(void))(*v1[413] + 148))(); v4 = (float *)v1[413]; v6 = (double)result; if ( v4 ) { result = LODWORD(v7); v4[22] = v7; v5 = -v6; v4[23] = v5; v4[24] = 0.0; } return result; } //----- (0053E5A0) -------------------------------------------------------- int __thiscall sub_53E5A0(_DWORD **this, int a2, int a3, __int64 a4, char a5) { _DWORD **v5; // esi signed __int64 v6; // kr00_8 int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int result; // eax int v13; // edi signed __int64 v14; // [esp+Ch] [ebp-2Ch] signed __int64 v15; // [esp+Ch] [ebp-2Ch] signed __int64 v16; // [esp+Ch] [ebp-2Ch] char v17; // [esp+14h] [ebp-24h] v5 = this; sub_680E90(a4); (*(void (__stdcall **)(int *))(*v5[394] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[395] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[396] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[397] + 468))(&dword_AA8C68); v6 = sub_680E90(a4); (*(void (__stdcall **)(int *))(*v5[394] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[395] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[396] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[397] + 468))(&dword_AA8C68); if ( !a5 ) { (*(void (__stdcall **)(int *))(*v5[394] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[395] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[396] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[397] + 468))(&dword_AA8C88); } if ( v6 ) { (*(void (__stdcall **)(signed int))(*v5[394] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[394] + 308))(a2, a3 + 3); sprintf(&v17, "%I64d", v6); (*(void (__stdcall **)(char *))(*v5[394] + 500))(&v17); v7 = a2 + (*(int (**)(void))(*v5[394] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[384] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[384] + 308))(v7, a3); v8 = (int)v5[392] + v7 + 1; } else { v8 = a2; } v14 = sub_680EB0(a4); if ( v14 ) { (*(void (__stdcall **)(signed int))(*v5[395] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[395] + 308))(v8, a3 + 3); sprintf(&v17, "%I64d", v14); (*(void (__stdcall **)(char *))(*v5[395] + 500))(&v17); v9 = v8 + (*(int (**)(void))(*v5[395] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[385] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[385] + 308))(v9, a3); v8 = (int)v5[392] + v9 + 1; } v15 = sub_680F00(a4); if ( v15 ) { (*(void (__stdcall **)(signed int))(*v5[396] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[396] + 308))(v8, a3 + 3); sprintf(&v17, "%I64d", v15); (*(void (__stdcall **)(char *))(*v5[396] + 500))(&v17); v10 = v8 + (*(int (**)(void))(*v5[396] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[386] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[386] + 308))(v10, a3); v8 = (int)v5[392] + v10 + 1; } v16 = sub_680F60(a4); if ( v16 ) { (*(void (__stdcall **)(signed int))(*v5[397] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[397] + 308))(v8, a3 + 3); sprintf(&v17, "%I64d", v16); (*(void (__stdcall **)(char *))(*v5[397] + 500))(&v17); v11 = v8 + (*(int (**)(void))(*v5[397] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[387] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[387] + 308))(v11, a3); v8 = (int)v5[392] + v11 + 1; } result = HIDWORD(a4) | a4; if ( !a4 ) { (*(void (__stdcall **)(signed int))(*v5[397] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[397] + 308))(v8, a3 + 3); sprintf(&v17, "%d", 0); (*(void (__stdcall **)(char *))(*v5[397] + 500))(&v17); v13 = v8 + (*(int (**)(void))(*v5[397] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[387] + 256))(1); result = (*(int (__stdcall **)(int, int))(*v5[387] + 308))(v13, a3); } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; //----- (0053EA50) -------------------------------------------------------- int __thiscall sub_53EA50(_DWORD **this, int a2, int a3, __int64 a4, char a5) { _DWORD **v5; // esi signed __int64 v6; // rax int v7; // ebx int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi int result; // eax int v15; // edi signed __int64 v16; // [esp+Ch] [ebp-2Ch] signed __int64 v17; // [esp+Ch] [ebp-2Ch] signed __int64 v18; // [esp+Ch] [ebp-2Ch] signed __int64 v19; // [esp+Ch] [ebp-2Ch] char v20; // [esp+14h] [ebp-24h] v5 = this; v6 = sub_680E90(a4); v7 = HIDWORD(v6); v8 = v6; v16 = v6; (*(void (__stdcall **)(int *))(*v5[398] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[399] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[400] + 468))(&dword_AA8C68); (*(void (__stdcall **)(int *))(*v5[401] + 468))(&dword_AA8C68); if ( !a5 ) { (*(void (__stdcall **)(int *))(*v5[398] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[399] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[400] + 468))(&dword_AA8C88); (*(void (__stdcall **)(int *))(*v5[401] + 468))(&dword_AA8C88); } if ( v7 | v8 ) { (*(void (__stdcall **)(signed int))(*v5[398] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[398] + 308))(a2, a3 + 3); sprintf(&v20, "%I64d", v16); (*(void (__stdcall **)(char *))(*v5[398] + 500))(&v20); v9 = a2 + (*(int (**)(void))(*v5[398] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[388] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[388] + 308))(v9, a3); v10 = (int)v5[392] + v9 + 1; } else { v10 = a2; } v17 = sub_680EB0(a4); if ( v17 ) { (*(void (__stdcall **)(signed int))(*v5[399] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[399] + 308))(v10, a3 + 3); sprintf(&v20, "%I64d", v17); (*(void (__stdcall **)(char *))(*v5[399] + 500))(&v20); v11 = v10 + (*(int (**)(void))(*v5[399] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[389] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[389] + 308))(v11, a3); v10 = (int)v5[392] + v11 + 1; } v18 = sub_680F00(a4); if ( v18 ) { (*(void (__stdcall **)(signed int))(*v5[400] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[400] + 308))(v10, a3 + 3); sprintf(&v20, "%I64d", v18); (*(void (__stdcall **)(char *))(*v5[400] + 500))(&v20); v12 = v10 + (*(int (**)(void))(*v5[400] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[390] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[390] + 308))(v12, a3); v10 = (int)v5[392] + v12 + 1; } v19 = sub_680F60(a4); if ( v19 ) { (*(void (__stdcall **)(signed int))(*v5[401] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[401] + 308))(v10, a3 + 3); sprintf(&v20, "%I64d", v19); (*(void (__stdcall **)(char *))(*v5[401] + 500))(&v20); v13 = v10 + (*(int (**)(void))(*v5[401] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[391] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[391] + 308))(v13, a3); v10 = (int)v5[392] + v13 + 1; } result = HIDWORD(a4) | a4; if ( !a4 ) { (*(void (__stdcall **)(signed int))(*v5[401] + 256))(1); (*(void (__stdcall **)(int, int))(*v5[401] + 308))(v10, a3 + 3); sprintf(&v20, "%d", 0); (*(void (__stdcall **)(char *))(*v5[401] + 500))(&v20); v15 = v10 + (*(int (**)(void))(*v5[401] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v5[391] + 256))(1); result = (*(int (__stdcall **)(int, int))(*v5[391] + 308))(v15, a3); } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; //----- (0053EEA0) -------------------------------------------------------- _DWORD *__thiscall sub_53EEA0(_DWORD **this) { _DWORD **v1; // esi int v2; // ebx _DWORD *result; // eax unsigned int v4; // edi const CHAR *v5; // eax bool v6; // zf int v7; // ebx unsigned int v8; // eax unsigned int v9; // eax struct tagSIZE psizl; // [esp+8h] [ebp-18h] _DWORD *v11; // [esp+10h] [ebp-10h] int v12; // [esp+14h] [ebp-Ch] _DWORD **v13; // [esp+18h] [ebp-8h] int v14; // [esp+1Ch] [ebp-4h] v1 = this; v2 = (int)(this + 304); result = (_DWORD *)(*(int (**)(void))(*this[304] + 456))(); v11 = result; if ( result ) { SelectObject((HDC)result[48], (HGDIOBJ)result[46]); v4 = 0; v14 = 0; v13 = v1 + 304; v12 = 80; do { v5 = (const CHAR *)(*(int (**)(void))(**(_DWORD **)v2 + 484))(); if ( v5 ) { sub_4593C0(v11, v5, strlen(v5), &psizl); if ( psizl.cx > v4 ) v4 = psizl.cx; v14 += psizl.cy + 2; } v2 = (int)(v13 + 1); v6 = v12-- == 1; ++v13; } while ( !v6 ); if ( (*(unsigned __int8 (**)(void))(*v1[384] + 260))() || (*(unsigned __int8 (**)(void))(*v1[385] + 260))() || (*(unsigned __int8 (**)(void))(*v1[386] + 260))() || (*(unsigned __int8 (**)(void))(*v1[387] + 260))() ) { v7 = (int)v1[393] + v14 + 2; v8 = (unsigned int)v1[302] + sub_53DF10(v1); if ( v8 > v4 ) v4 = v8; } else { v7 = v14; } if ( (*(unsigned __int8 (**)(void))(*v1[388] + 260))() || (*(unsigned __int8 (**)(void))(*v1[389] + 260))() || (*(unsigned __int8 (**)(void))(*v1[390] + 260))() || (*(unsigned __int8 (**)(void))(*v1[391] + 260))() ) { v9 = (unsigned int)v1[303] + sub_53DFE0(v1); if ( v9 > v4 ) v4 = v9; } result = (_DWORD *)(*(int (**)(void))(*v1[407] + 260))(); if ( (_BYTE)result ) { result = v1[412]; if ( (unsigned int)result > v4 ) v4 = (unsigned int)v1[412]; } if ( v4 ) result = (_DWORD *)((int (__thiscall *)(_DWORD **, unsigned int, int))(*v1)[135])( v1, v4 + 2 * (_DWORD)v1[89] + 14, v7 + 2 * (_DWORD)v1[88]); } return result; } //----- (0053F070) -------------------------------------------------------- int __thiscall sub_53F070(_DWORD **this, const CHAR *a2, _DWORD *a3, int a4) { _DWORD *v4; // edi int v5; // esi int v6; // edx int (*v7)(void); // eax int result; // eax int v9; // ebx int v10; // eax int v11; // esi int v12; // esi int v13; // esi CHAR *v14; // edi char *v15; // ebx BYTE v16; // dl CHAR v17; // dl bool v18; // zf int v19; // ebx int v20; // edi int v21; // edi int v22; // ecx CHAR *v23; // eax struct tagSIZE psizl; // [esp+Ch] [ebp-134h] int v25; // [esp+14h] [ebp-12Ch] struct tagSIZE v26; // [esp+18h] [ebp-128h] int v27; // [esp+20h] [ebp-120h] LONG v28; // [esp+24h] [ebp-11Ch] HDC hdc; // [esp+28h] [ebp-118h] _DWORD *v30; // [esp+2Ch] [ebp-114h] int v31; // [esp+30h] [ebp-110h] int v32; // [esp+34h] [ebp-10Ch] LPCSTR lpString; // [esp+38h] [ebp-108h] CHAR String; // [esp+3Ch] [ebp-104h] char v35[255]; // [esp+3Dh] [ebp-103h] v4 = a3; v5 = (int)this; v6 = *this[*a3 + 304]; v25 = a4; v7 = *(int (**)(void))(v6 + 456); v27 = (int)this; v30 = a3; hdc = *(HDC *)(v7() + 192); lpString = a2; result = (int)memset(&String, 0, 0x100u); while ( *v4 < 80 ) { v28 = *(_DWORD *)(v5 + 1608); v9 = 0; v31 = 0; v10 = strlen(lpString); v11 = 0; v32 = v10; if ( v10 > 0 ) { do { if ( !isspace(lpString[v11]) ) break; ++v11; ++v9; } while ( v11 < v32 ); v10 = v32; v31 = v9; } v12 = v9; GetTextExtentPoint32A(hdc, lpString, v10, &psizl); if ( psizl.cx > v28 ) { v26.cx = 0; v26.cy = 0; if ( v9 < v32 ) { while ( 2 ) { v14 = &String + v12 - v9; v15 = &v35[v12 - v9]; while ( v26.cx < v28 ) { if ( v12 == v32 ) { v22 = v31; *(&String + v12 - v31) = 0; result = v22 + strlen(&String); LABEL_28: v4 = v30; goto LABEL_29; } v16 = lpString[v12]; *v14 = v16; if ( IsDBCSLeadByte(v16) ) { v17 = lpString[v12++ + 1]; ++v15; ++v14; *(&String + v12) = v17; } v18 = *v14 == 10; *v15 = 0; if ( v18 ) *v14 = 32; ++v12; ++v15; ++v14; GetTextExtentPoint32A(hdc, &String, strlen(&String), &v26); } v19 = v31; v20 = v12 - v31; if ( isspace(*(&String + v12 - v31)) ) { *(&String + v12 - v19) = 0; v23 = &String + strlen(&String) + 1; LABEL_27: result = v19 + v23 - v35; goto LABEL_28; } v21 = v20 - 1; if ( v21 > 0 ) { while ( !isspace(*(&String + v21)) ) { if ( --v21 <= 0 ) goto LABEL_23; } *(&String + v21) = 0; v23 = &String + strlen(&String) + 1; goto LABEL_27; } LABEL_23: if ( v12 < v32 ) { v9 = v31; continue; } break; } v4 = v30; result = -1; } else { result = -1; } } else { v13 = v32 - v9; memcpy(&String, &lpString[v9], v32 - v9); result = v32; *(&String + v13) = 0; LABEL_29: if ( !result ) return result; } lpString += result; v5 = v27; *(&String + result) = 0; (*(void (__stdcall **)(CHAR *))(**(_DWORD **)(v5 + 4 * *v4 + 1216) + 472))(&String); (*(void (__stdcall **)(int))(**(_DWORD **)(v5 + 4 * *v4 + 1216) + 468))(v25); ++*v4; result = (int)memset(&String, 0, 0x100u); } return result; } // 53F070: using guessed type char var_103[255]; //----- (0053F3D0) -------------------------------------------------------- int __thiscall sub_53F3D0(_DWORD **this, int a2) { _DWORD **v2; // ebx int v3; // esi signed int v4; // edi int result; // eax v2 = this; if ( a2 ) { sub_53DCC0(this); v3 = (int)(v2 + 304); v4 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9CA2D3); (*(void (__stdcall **)(int *))(**(_DWORD **)v3 + 468))(&dword_AA8C68); v3 += 4; --v4; } while ( v4 ); (*(void (__stdcall **)(int))(*v2[304] + 472))(a2); result = ((int (__thiscall *)(_DWORD **))(*v2)[109])(v2); } return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (0053F440) -------------------------------------------------------- char __thiscall sub_53F440(volatile LONG **this, void *a2, int a3, int a4) { volatile LONG **v4; // esi int v6; // eax int v7; // ecx signed int v8; // edi volatile LONG **v9; // ebx volatile LONG *v10; // eax int v11; // edi char *v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax int v15; // edx volatile LONG **v16; // eax volatile LONG *v17; // eax int v18; // edx volatile LONG **v19; // eax volatile LONG *v20; // eax int v21; // edx volatile LONG **v22; // eax volatile LONG *v23; // eax int v24; // edx volatile LONG **v25; // eax volatile LONG *v26; // eax int v27; // edx volatile LONG **v28; // eax volatile LONG *v29; // eax int v30; // edx volatile LONG **v31; // eax volatile LONG *v32; // eax int v33; // edx volatile LONG **v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // ecx int v37; // eax volatile LONG *v38; // ecx int v39; // eax int v40; // eax int v41; // eax int v42; // eax int v43; // eax int v44; // eax int v45; // eax int v46; // eax int v47; // eax int v48; // eax int v49; // eax void (__thiscall ***v50)(_DWORD, signed int); // esi int v51; // [esp+10h] [ebp-14h] char v52; // [esp+14h] [ebp-10h] int v53; // [esp+20h] [ebp-4h] v4 = this; if ( !sub_45C530(this, a2, a3, a4, 0, 0, 0, 0) ) return 0; v6 = sub_421050(0); v7 = v6; v51 = v6; if ( !v6 ) return 0; v4[403] = *(volatile LONG **)(v6 + 384); v8 = 0; v9 = v4 + 304; while ( 1 ) { v10 = sub_8F4A20( (int)v4[89], (int)v4[88] + v8 * ((_DWORD)v4[403] + 2) + 2, 256, (int)(v4[403] + 1), v7, (int)v4, 0, 0); *v9 = v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); ++v8; ++v9; if ( v8 >= 80 ) break; v7 = v51; } (*((void (__thiscall **)(volatile LONG **, int, int))*v4 + 135))( v4, 2 * (_DWORD)v4[89] + 142, (int)v4[403] + 2 * (_DWORD)v4[88]); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v4 + 64))(v4, 0); a4 = 0; v53 = 0; if ( !a2 ) return 0; v11 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v12 = (char *)sub_401410(byte_ACAB50, "Game\\Money.nif"); sub_8F66B0(v12, (int)&a4, v11); if ( !a4 ) return 0; v13 = sub_8FB140(a4, (int)"MyGemBtn", (int)&v52, (int)&a3, 0); v14 = sub_8F3EB0(0, 0, (int)v13, (int)v4, 0, 0); v15 = a4; v4[384] = v14; v16 = sub_8FB140(v15, (int)"MyGoldBtn", (int)&v52, (int)&a3, 0); v17 = sub_8F3EB0(0, 0, (int)v16, (int)v4, 0, 0); v18 = a4; v4[385] = v17; v19 = sub_8FB140(v18, (int)"MySilverBtn", (int)&v52, (int)&a3, 0); v20 = sub_8F3EB0(0, 0, (int)v19, (int)v4, 0, 0); v21 = a4; v4[386] = v20; v22 = sub_8FB140(v21, (int)"MyCopperBtn", (int)&v52, (int)&a3, 0); v23 = sub_8F3EB0(0, 0, (int)v22, (int)v4, 0, 0); v24 = a4; v4[387] = v23; v25 = sub_8FB140(v24, (int)"MyGemBtn", (int)&v52, (int)&a3, 0); v26 = sub_8F3EB0(0, 0, (int)v25, (int)v4, 0, 0); v27 = a4; v4[388] = v26; v28 = sub_8FB140(v27, (int)"MyGoldBtn", (int)&v52, (int)&a3, 0); v29 = sub_8F3EB0(0, 0, (int)v28, (int)v4, 0, 0); v30 = a4; v4[389] = v29; v31 = sub_8FB140(v30, (int)"MySilverBtn", (int)&v52, (int)&a3, 0); v32 = sub_8F3EB0(0, 0, (int)v31, (int)v4, 0, 0); v33 = a4; v4[390] = v32; v34 = sub_8FB140(v33, (int)"MyCopperBtn", (int)&v52, (int)&a3, 0); v35 = sub_8F3EB0(0, 0, (int)v34, (int)v4, 0, 0); v36 = v4[384]; v4[391] = v35; v37 = (*(int (**)(void))(*v36 + 144))(); v38 = v4[384]; v4[392] = (volatile LONG *)v37; v4[393] = (volatile LONG *)(*(int (**)(void))(*v38 + 148))(); v39 = sub_421050(2); v4[394] = (volatile LONG *)sub_459270(0, 0, v39, (int)v4); v40 = sub_421050(2); v4[395] = (volatile LONG *)sub_459270(0, 0, v40, (int)v4); v41 = sub_421050(2); v4[396] = (volatile LONG *)sub_459270(0, 0, v41, (int)v4); v42 = sub_421050(2); v4[397] = (volatile LONG *)sub_459270(0, 0, v42, (int)v4); v43 = sub_421050(2); v4[398] = (volatile LONG *)sub_459270(0, 0, v43, (int)v4); v44 = sub_421050(2); v4[399] = (volatile LONG *)sub_459270(0, 0, v44, (int)v4); v45 = sub_421050(2); v4[400] = (volatile LONG *)sub_459270(0, 0, v45, (int)v4); v46 = sub_421050(2); v4[401] = (volatile LONG *)sub_459270(0, 0, v46, (int)v4); v4[407] = sub_5D5260(0, 0, 32, 32, (int)v4); v47 = sub_421050(2); v4[409] = (volatile LONG *)sub_459270(0, 0, v47, (int)v4); v48 = sub_421050(2); v4[410] = (volatile LONG *)sub_459270(0, 0, v48, (int)v4); v4[408] = sub_5D5260(0, 0, 32, 32, (int)v4); v49 = sub_421050(2); v4[411] = (volatile LONG *)sub_459270(0, 0, v49, (int)v4); sub_53DCC0((_DWORD **)v4); v53 = -1; if ( a4 ) { v50 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v50 ) (**v50)(v50, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0053F8D0) -------------------------------------------------------- char __thiscall sub_53F8D0(void *this) { int v1; // edi int v2; // esi char *v3; // eax volatile LONG *v5; // eax volatile LONG **v6; // esi void (__thiscall ***v7)(_DWORD, signed int); // esi char v8; // [esp+Ch] [ebp-18h] char v9; // [esp+10h] [ebp-14h] int v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v1 = (int)this; v10 = 0; v2 = dword_BA6BA0; v11 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\CloseButton.nif"); sub_8F66B0(v3, (int)&v10, v2); if ( !v10 ) return 0; v5 = (volatile LONG *)sub_43D0D0(4u); v6 = sub_8FB140(v10, (int)"BtnNor", (int)&v8, (int)&v9, v5); sub_8FB650(v6, v10, (int)"BtnClick"); sub_8FB650(v6, v10, (int)"BtnOver"); *(_DWORD *)(v1 + 1652) = sub_8FE0F0(0, 0, (int)v6, v1, 10, 0, 0); v11 = -1; if ( v10 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0053F9F0) -------------------------------------------------------- int __thiscall sub_53F9F0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int **v4; // ebx int v5; // esi signed int v6; // edi int v7; // esi const CHAR *v8; // eax char *v9; // eax v3 = this; sub_53DCC0(this); v4 = v3 + 304; v5 = (int)(v3 + 304); v6 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v5 + 472))(&unk_9CA227); (*(void (__stdcall **)(int *))(**(_DWORD **)v5 + 468))(&dword_AA8C68); v5 += 4; --v6; } while ( v6 ); v7 = **v4; v8 = sub_40C190(1163893164); v9 = sub_7549E0("%s: %I64d", v8, a2, a3); return (*(int (__thiscall **)(int *, char *))(v7 + 472))(*v4, v9); } // AA8C68: using guessed type int dword_AA8C68; //----- (0053FA80) -------------------------------------------------------- int __thiscall sub_53FA80(_DWORD **this, __int64 a2) { _DWORD **v2; // ebx int v3; // esi signed int v4; // edi v2 = this; sub_53DCC0(this); v3 = (int)(v2 + 304); v4 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9CA231); (*(void (__stdcall **)(int *))(**(_DWORD **)v3 + 468))(&dword_AA8C68); v3 += 4; --v4; } while ( v4 ); return sub_53E5A0(v2, (int)v2[89], (int)v2[88], a2, 1); } // AA8C68: using guessed type int dword_AA8C68; //----- (0053FAF0) -------------------------------------------------------- int __thiscall sub_53FAF0(_DWORD **this, int a2) { _DWORD **v2; // esi int **v3; // ebx int v4; // esi signed int v5; // edi int v6; // esi const CHAR *v7; // eax char *v8; // eax v2 = this; sub_53DCC0(this); v3 = v2 + 304; v4 = (int)(v2 + 304); v5 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v4 + 472))(&unk_9CA232); (*(void (__stdcall **)(int *))(**(_DWORD **)v4 + 468))(&dword_AA8C68); v4 += 4; --v5; } while ( v5 ); v6 = **v3; v7 = sub_40C190(-1683056920); v8 = sub_7549E0("%s:%d", v7, a2); return (*(int (__thiscall **)(int *, char *))(v6 + 472))(*v3, v8); } // AA8C68: using guessed type int dword_AA8C68; //----- (0053FB70) -------------------------------------------------------- void __userpurge sub_53FB70(int a1@, int a2@, unsigned __int16 *a3, _DWORD *a4) { unsigned __int16 *v4; // eax char v5; // dl char *v6; // esi char *v7; // eax const char *v8; // eax int v9; // esi char *v10; // eax char *v11; // eax signed int v12; // [esp+Ch] [ebp-74h] int v13; // [esp+10h] [ebp-70h] char v14; // [esp+14h] [ebp-6Ch] char v15; // [esp+1Dh] [ebp-63h] char v16; // [esp+31h] [ebp-4Fh] v13 = a1; if ( *a4 < 80 && a3 && (*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a3 + 4))(a3) == 5 ) { v4 = a3 + 4; qmemcpy(&v14, a3 + 4, 0x67u); v5 = 0; v6 = &v15; v12 = 3; do { if ( *(_WORD *)v6 != -1 ) { v7 = sub_548B00(*(_WORD *)v6, *(_DWORD *)(v6 + 2) & 0xFFFFFFF, *v4); (*(void (__stdcall **)(char *))(**(_DWORD **)(v13 + 4 * *a4 + 1216) + 472))(v7); ++*a4; v4 = a3 + 4; v5 = 1; } v6 += 6; --v12; } while ( v12 ); if ( v5 ) { v8 = (const char *)(*(int (__stdcall **)(int))(**(_DWORD **)(v13 + 4 * *a4 + 1212) + 484))(a2); if ( v8 && *a4 > 0 && !strcmp(v8, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v13 + 4 * *a4 + 1216) + 472))(" "); ++*a4; } v9 = **(_DWORD **)(v13 + 4 * *a4 + 1216); v10 = (char *)sub_40C190(-1963004426); v11 = sub_7549E0(v10, &v16); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(*(_DWORD *)(v13 + 4 * *a4 + 1216), v11); ++*a4; } } } // 53FB70: could not find valid save-restore pair for edi //----- (0053FCE0) -------------------------------------------------------- char *__cdecl sub_53FCE0(signed int a1) { const char *v1; // eax unsigned int v2; // eax char *v3; // edi const char *v4; // eax const CHAR *v5; // ST0C_4 float v7; // [esp+0h] [ebp-28h] char v8; // [esp+4h] [ebp-24h] byte_ACEC38[0] = 0; v7 = (double)a1 / 1000.0 - (double)(60 * (a1 / 1000 / 60 - 60 * (a1 / 1000 / 3600))) - (double)(3600 * (a1 / 1000 / 3600)); if ( a1 / 1000 / 3600 ) { v1 = sub_40C190(-1665929736); sprintf(&v8, v1, a1 / 1000 / 3600); v2 = strlen(&v8) + 1; v3 = &byte_ACEC38[strlen(byte_ACEC38)]; LABEL_7: qmemcpy(v3, &v8, v2); return byte_ACEC38; } if ( a1 / 1000 / 60 != 60 * (a1 / 1000 / 3600) ) { v4 = sub_40C190(-1666406151); sprintf(&v8, v4, " ", a1 / 1000 / 60 - 60 * (a1 / 1000 / 3600)); v2 = strlen(&v8) + 1; v3 = &byte_ACEC38[strlen(byte_ACEC38)]; goto LABEL_7; } if ( 0.0 != v7 ) { v5 = sub_40C190(1398770841); sprintf(&v8, "%d%s", (signed int)v7, v5); v2 = strlen(&v8) + 1; v3 = &byte_ACEC38[strlen(byte_ACEC38)]; goto LABEL_7; } return byte_ACEC38; } //----- (0053FE70) -------------------------------------------------------- int __thiscall sub_53FE70(const char *this, int a2) { int v2; // edi const char *v3; // ebx const CHAR *v4; // eax char *v5; // edx CHAR v6; // cl unsigned int v7; // eax char *v8; // edi char v9; // cl unsigned int v10; // eax char *v11; // edi char v12; // cl unsigned int v13; // eax char *v14; // edi char v15; // cl char *v16; // eax int v17; // esi char *v18; // eax char *v19; // eax int result; // eax int v21; // [esp+8h] [ebp-408h] char v22; // [esp+Ch] [ebp-404h] char v23; // [esp+Dh] [ebp-403h] v2 = a2; v3 = this; v21 = a2; v22 = 0; memset(&v23, 0, 0x3FFu); v4 = sub_40C190(658784400); v5 = (char *)(&v22 - v4); do { v6 = *v4; v4[(_DWORD)v5] = *v4; ++v4; } while ( v6 ); if ( strcmp(v3 + 440, "0") == 1 ) { v7 = strlen(v3 + 440) + 1; v8 = (char *)&v21 + 3; do v9 = (v8++)[1]; while ( v9 ); qmemcpy(v8, v3 + 440, v7); v2 = v21; } if ( strcmp(v3 + 695, "0") == 1 ) { v10 = strlen(v3 + 695) + 1; v11 = (char *)&v21 + 3; do v12 = (v11++)[1]; while ( v12 ); qmemcpy(v11, v3 + 695, v10); v2 = v21; } if ( strcmp(v3 + 950, "0") == 1 ) { v13 = strlen(v3 + 950) + 1; v14 = (char *)&v21 + 3; do v15 = (v14++)[1]; while ( v15 ); qmemcpy(v14, v3 + 950, v13); v2 = v21; } (*(void (__stdcall **)(char *))(**(_DWORD **)&v3[4 * v2 + 1216] + 472))(&v22); v16 = sub_7549E0("static: %s\n", &v22); OutputDebugStringA(v16); v17 = **(_DWORD **)&v3[4 * v2 + 1220]; v18 = (char *)sub_40C190(2060112345); v19 = sub_7549E0(v18, v3 + 420); (*(void (__thiscall **)(_DWORD, char *))(v17 + 472))(*(_DWORD *)&v3[4 * v2 + 1220], v19); result = v2 + 2; if ( *((float *)v3 + 104) > 0.0 ) *((float *)v3 + 104) = *((float *)v3 + 104) - 0.01999999955296516; return result; } //----- (005400B0) -------------------------------------------------------- int __thiscall sub_5400B0(float *this, int a2, unsigned int a3) { float *v3; // esi char *v4; // eax char v5; // cl char *v6; // eax char v7; // cl char *v8; // eax int v9; // esi char v10; // cl __time32_t v11; // esi __time32_t v12; // eax double v13; // st7 signed int v14; // esi signed int v15; // eax int v16; // edi double v17; // st7 unsigned int v18; // edx int v19; // ebx const CHAR *v20; // eax char *v21; // ecx CHAR v22; // dl const char *v23; // eax char *v24; // eax char v25; // cl unsigned int v26; // eax char *v27; // edi char v28; // cl const char *v29; // eax char *v30; // eax char v31; // cl unsigned int v32; // eax char *v33; // edi char v34; // cl const char *v35; // eax char *v36; // eax char v37; // cl unsigned int v38; // eax char *v39; // edi char v40; // cl char *v41; // eax int v42; // esi char *v43; // eax char *v44; // eax char *v45; // eax char v46; // cl int v48; // [esp+Ch] [ebp-77Ch] float *v49; // [esp+10h] [ebp-778h] int v50; // [esp+14h] [ebp-774h] int v51; // [esp+18h] [ebp-770h] int v52; // [esp+1Ch] [ebp-76Ch] struct tm Tm; // [esp+28h] [ebp-760h] struct tm v54; // [esp+4Ch] [ebp-73Ch] char v55; // [esp+70h] [ebp-718h] char v56; // [esp+71h] [ebp-717h] char v57[2]; // [esp+470h] [ebp-318h] char v58; // [esp+472h] [ebp-316h] char v59[2]; // [esp+570h] [ebp-218h] char v60; // [esp+572h] [ebp-216h] char v61[2]; // [esp+670h] [ebp-118h] char v62; // [esp+672h] [ebp-116h] char v63; // [esp+770h] [ebp-18h] v3 = this; this[104] = 1.0; v49 = this; strcpy(v57, "0"); memset(&v58, 0, 0xFDu); strcpy(v59, "0"); memset(&v60, 0, 0xFDu); strcpy(v61, "0"); memset(&v62, 0, 0xFDu); v55 = 0; memset(&v56, 0, 0x3FFu); v4 = v57; v52 = (char *)v3 - v57 + 440; do { v5 = *v4; v4[(char *)v3 - v57 + 440] = *v4; ++v4; } while ( v5 ); v6 = v59; v48 = (char *)v3 - v59 + 695; do { v7 = *v6; v6[(char *)v3 - v59 + 695] = *v6; ++v6; } while ( v7 ); v8 = v61; v9 = (char *)v3 - v61; v51 = v9 + 950; do { v10 = *v8; v8[v9 + 950] = *v8; ++v8; } while ( v10 ); qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v11 = _mktime32(&Tm); v54.tm_year = (unsigned __int8)a3 + 100; v54.tm_mon = ((a3 >> 8) & 0x1F) - 1; v54.tm_min = a3 >> 25; v54.tm_mday = (a3 >> 13) & 0x3F; v54.tm_hour = (a3 >> 19) & 0x3F; v54.tm_sec = 0; v12 = _mktime32(&v54); v13 = _difftime32(v12, v11); v14 = (signed int)(v13 / 86400.0); v15 = (signed int)(v13 / 3600.0); v16 = v15 % 24; v50 = v15 % 24; v17 = v13 - (double)(86400 * v14) - (double)(3600 * (v15 % 24)); v18 = (signed int)((signed int)v17 + ((unsigned __int64)(-2004318071i64 * (signed int)v17) >> 32)) >> 5; v19 = v18 + (v18 >> 31); v20 = sub_40C190(658784400); v21 = (char *)(&v55 - v20); do { v22 = *v20; v20[(_DWORD)v21] = *v20; ++v20; } while ( v22 ); if ( v14 > 0 ) { v23 = sub_40C190(-1749093143); sprintf(v57, v23, v14); v24 = v57; do { v25 = *v24; v24[v52] = *v24; ++v24; } while ( v25 ); v26 = strlen(v57) + 1; v27 = (char *)&v54.tm_isdst + 3; do v28 = (v27++)[1]; while ( v28 ); qmemcpy(v27, v57, v26); v16 = v50; } if ( v16 > 0 ) { v29 = sub_40C190(-1492913418); sprintf(v59, v29, v16); v30 = v59; do { v31 = *v30; v30[v48] = *v30; ++v30; } while ( v31 ); v32 = strlen(v59) + 1; v33 = (char *)&v54.tm_isdst + 3; do v34 = (v33++)[1]; while ( v34 ); qmemcpy(v33, v59, v32); } if ( v19 > 0 ) { v35 = sub_40C190(-184027596); sprintf(v61, v35, v19); v36 = v61; do { v37 = *v36; v36[v51] = *v36; ++v36; } while ( v37 ); v38 = strlen(v61) + 1; v39 = (char *)&v54.tm_isdst + 3; do v40 = (v39++)[1]; while ( v40 ); qmemcpy(v39, v61, v38); } (*(void (__stdcall **)(char *))(*(_DWORD *)LODWORD(v49[a2 + 304]) + 472))(&v55); v41 = sub_7549E0("updated: %s\n", &v55); OutputDebugStringA(v41); sub_4F39F0(a3, &v63, 18); v42 = *(_DWORD *)LODWORD(v49[a2 + 305]); v43 = (char *)sub_40C190(2060112345); v44 = sub_7549E0(v43, &v63); (*(void (__thiscall **)(_DWORD, char *))(v42 + 472))(LODWORD(v49[a2 + 305]), v44); v45 = &v63; do { v46 = *v45; v45[(char *)v49 - &v63 + 420] = *v45; ++v45; } while ( v46 ); return a2 + 2; } //----- (005404F0) -------------------------------------------------------- int __thiscall sub_5404F0(void *this, _WORD *a2, int *a3) { unsigned int v3; // ebx void *v4; // edi _WORD *v5; // eax int v6; // ebx const CHAR *v7; // ST08_4 char *v8; // eax const CHAR *v9; // ST08_4 const CHAR *v10; // ebx int v11; // eax int result; // eax int v13; // ecx int v14; // [esp+Ch] [ebp-110h] HDC hdc; // [esp+10h] [ebp-10Ch] unsigned int v16; // [esp+14h] [ebp-108h] int v17; // [esp+18h] [ebp-104h] v3 = 0; v4 = this; v14 = *a3; v16 = 0; if ( sub_4B12A0() ) { do { v5 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD980 + 4), v3); if ( v5 ) { if ( *v5 == *a2 ) { v6 = sub_4B15B0((unsigned __int16)v5[1]); if ( v6 ) { LOBYTE(v17) = 0; memset((char *)&v17 + 1, 0, 0xFFu); hdc = *(HDC *)((*(int (**)(void))(**((_DWORD **)v4 + 304) + 456))() + 192); if ( *(_BYTE *)(v6 + 2) ) { v7 = sub_40A910(-1194138158); v8 = sub_7549E0("%s %s", v7, v6 + 3); } else { v9 = sub_40A910(-825220074); v8 = sub_7549E0("%s %s", v9, v6 + 3); } v10 = v8; memset(&v17, 0, 0x100u); while ( *a3 < 80 ) { v11 = sub_8F5700((int)&v17, v10, hdc, *((_DWORD *)v4 + 402)); if ( !v11 ) break; *((_BYTE *)&v17 + v11) = 0; v10 += v11; (*(void (__stdcall **)(int *))(**((_DWORD **)v4 + *a3 + 304) + 472))(&v17); (*(void (__stdcall **)(_DWORD, signed int, signed int, signed int))(**((_DWORD **)v4 + *a3 + 304) + 464))( 0, 200, 20, 255); ++*a3; memset(&v17, 0, 0x100u); } } } } v3 = ++v16; } while ( v16 < sub_4B12A0() ); } result = *a3; if ( v14 < *a3 ) { v13 = *((_DWORD *)v4 + result + 304); *a3 = result + 1; result = (*(int (__stdcall **)(const char *))(*(_DWORD *)v13 + 472))(" "); } return result; } // ACD980: using guessed type int dword_ACD980; //----- (005406F0) -------------------------------------------------------- int __thiscall sub_5406F0(_DWORD **this, _DWORD *a2, _DWORD *a3) { int result; // eax const char *v4; // eax const char *v5; // edx unsigned int v6; // eax char *v7; // edi char v8; // cl char v9; // cl char v10; // cl char v11; // cl char v12; // cl char v13; // cl char v14; // cl char v15; // cl char v16; // cl char v17; // cl char v18; // cl char v19; // cl int v20; // eax int v21; // eax signed __int64 v22; // kr00_8 _DWORD **v23; // [esp+8h] [ebp-58h] int v24; // [esp+Ch] [ebp-54h] int v25; // [esp+10h] [ebp-50h] int v26; // [esp+14h] [ebp-4Ch] int v27; // [esp+18h] [ebp-48h] char v28; // [esp+1Ch] [ebp-44h] char v29; // [esp+1Dh] [ebp-43h] result = (int)a3; v23 = this; if ( a2 && *(_DWORD *)((char *)a2 + 102) == 26 ) { v28 = 0; memset(&v29, 0, 0x3Fu); v4 = sub_40A910(763656613); sprintf(&v28, v4); switch ( a2[58] ) { case 1: v5 = sub_40A910(1586280615); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v8 = (v7++)[1]; while ( v8 ); goto LABEL_39; case 2: v5 = sub_40A910(-1024992989); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v10 = (v7++)[1]; while ( v10 ); goto LABEL_39; case 3: v5 = sub_40A910(-952230131); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v11 = (v7++)[1]; while ( v11 ); goto LABEL_39; case 4: v5 = sub_40A910(-874063599); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v12 = (v7++)[1]; while ( v12 ); goto LABEL_39; case 5: v5 = sub_40A910(-1259201009); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v13 = (v7++)[1]; while ( v13 ); goto LABEL_39; case 0xA: v5 = sub_40A910(-1243074533); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v14 = (v7++)[1]; while ( v14 ); goto LABEL_39; case 0xB: v5 = sub_40A910(-1258545894); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v15 = (v7++)[1]; while ( v15 ); goto LABEL_39; case 0xD: v5 = sub_40A910(103949849); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v16 = (v7++)[1]; while ( v16 ); goto LABEL_39; case 0x11: v5 = sub_40A910(171649059); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v17 = (v7++)[1]; while ( v17 ); goto LABEL_39; case 0x12: v5 = sub_40A910(-1075302387); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v18 = (v7++)[1]; while ( v18 ); goto LABEL_39; case 0x13: v5 = sub_40A910(-1087628019); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v19 = (v7++)[1]; while ( v19 ); goto LABEL_39; case 0x15: v5 = sub_40A910(1737603249); v6 = strlen(v5) + 1; v7 = (char *)&v27 + 3; do v9 = (v7++)[1]; while ( v9 ); LABEL_39: qmemcpy(v7, v5, v6); break; default: break; } v24 = dword_AA8C68; v27 = dword_AA8C74; v25 = dword_AA8C6C; v26 = dword_AA8C70; v20 = sub_685140(&byte_ADA230); if ( v20 ) { v21 = *(_DWORD *)(v20 + 112); if ( v21 ) { if ( *(_DWORD *)(v21 + 232) != a2[58] ) { v24 = dword_AA8C88; v25 = dword_AA8C8C; v26 = dword_AA8C90; v27 = dword_AA8C94; } } } else { v22 = sub_6622F0(*(_DWORD *)((char *)a2 + 207)); if ( !(v22 & (1i64 << sub_652070(dword_AD8EBC))) ) { v24 = dword_AA8C88; v25 = dword_AA8C8C; v26 = dword_AA8C90; v27 = dword_AA8C94; } } (*(void (__stdcall **)(int *))(*v23[*a3 + 304] + 468))(&v24); result = (*(int (__stdcall **)(char *))(*v23[*a3 + 304] + 472))(&v28); ++*a3; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8C88: using guessed type int dword_AA8C88; // AA8C8C: using guessed type int dword_AA8C8C; // AA8C90: using guessed type int dword_AA8C90; // AA8C94: using guessed type int dword_AA8C94; // ADA230: using guessed type char byte_ADA230; //----- (00540B10) -------------------------------------------------------- int __thiscall sub_540B10(_DWORD **this, int a2, _DWORD *a3) { int result; // eax _DWORD **v4; // edx int v5; // ecx int v6; // edi char *v7; // eax _DWORD *v8; // esi _DWORD *v9; // eax _DWORD *v10; // ST1C_4 int v11; // ST20_4 char *v12; // eax char *v13; // eax int v14; // edi int v15; // ST20_4 int v16; // ST0C_4 char *v17; // eax char *v18; // eax int v19; // esi _DWORD *v20; // [esp+4h] [ebp-74h] char v21; // [esp+Ch] [ebp-6Ch] char v22; // [esp+3Eh] [ebp-3Ah] unsigned __int8 v23; // [esp+47h] [ebp-31h] result = a2; v4 = this; v20 = this; if ( a2 ) { result = *(_DWORD *)(a2 + 112); qmemcpy(&v21, (const void *)(a2 + 8), 0x67u); if ( result ) { if ( *(_DWORD *)(result + 102) == 5 ) { v5 = v23; v6 = 0; if ( (signed int)v23 > 0 ) { v7 = &v22; do { if ( *(_WORD *)v7 == -1 ) ++v6; v7 += 3; --v5; } while ( v5 ); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*v4[*a3 + 304] + 464))( 220, 100, 20, 255); v8 = v20; v9 = (_DWORD *)v20[*a3 + 304]; v10 = v9; v11 = *v9; v12 = (char *)sub_4090F0(-2018742918); v13 = sub_7549E0(v12, v6); (*(void (__thiscall **)(_DWORD *, char *))(v11 + 472))(v10, v13); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*(_DWORD *)v8[++*a3 + 304] + 464))( 220, 100, 20, 255); v14 = *(_DWORD *)v8[*a3 + 304]; v15 = v8[*a3 + 304]; v16 = v23; v17 = (char *)sub_4090F0(710437241); v18 = sub_7549E0(v17, v16); (*(void (__thiscall **)(int, char *))(v14 + 472))(v15, v18); v19 = v8[++*a3 + 304]; ++*a3; result = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 472))(v19, " "); } } } } return result; } //----- (00540C70) -------------------------------------------------------- int __userpurge sub_540C70@(_DWORD *a1@, int a2@, int a3@, int a4, int a5, int a6, unsigned __int16 *a7, int a8, char a9) { int result; // eax _DWORD *v10; // esi int v11; // eax int v12; // edi _DWORD *v13; // ebx char *v14; // eax char *v15; // eax void (__stdcall *v16)(int, int); // edx int v17; // eax CHAR *v18; // ecx CHAR v19; // dl int v20; // ST28_4 int v21; // ebx int v22; // edi int v23; // eax int v24; // edi int v25; // ebx int v26; // ST28_4 int v27; // ST24_4 char *v28; // eax char *v29; // eax void (__stdcall *v30)(int *, int); // eax int v31; // [esp+34h] [ebp-120h] struct tagSIZE psizl; // [esp+38h] [ebp-11Ch] int v33; // [esp+40h] [ebp-114h] unsigned __int16 *v34; // [esp+44h] [ebp-110h] int v35; // [esp+48h] [ebp-10Ch] char v36[4]; // [esp+4Ch] [ebp-108h] CHAR String[256]; // [esp+50h] [ebp-104h] *(_DWORD *)v36 = a6; result = (int)a7; v10 = a1; v34 = a7; v35 = a8; if ( a7 ) { if ( a8 ) { if ( a1[407] ) { if ( a1[410] ) { if ( a1[409] ) { result = sub_49F760(*a7); v33 = result; if ( result ) { v11 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v10[304] + 456))(a3, a2); v12 = *(_DWORD *)v10[410]; v13 = (_DWORD *)v11; v14 = (char *)sub_4090F0(724194938); v15 = sub_7549E0(v14, *(_DWORD *)v36); (*(void (__thiscall **)(_DWORD, char *))(v12 + 500))(v10[410], v15); v16 = *(void (__stdcall **)(int, int))(*(_DWORD *)v10[410] + 308); *(_DWORD *)v36 = a5 + 3; v16(a4 + 3, a5 + 3); (*(void (__stdcall **)(signed int))(*(_DWORD *)v10[410] + 256))(1); v17 = (*(int (**)(void))(*(_DWORD *)v10[410] + 484))(); v18 = &String[-v17]; do { v19 = *(_BYTE *)v17; v18[v17] = *(_BYTE *)v17; ++v17; } while ( v19 ); sub_4593C0(v13, String, strlen(String), &psizl); v20 = *(_DWORD *)(v34 + 17); v21 = a4 + psizl.cx; v22 = *(_DWORD *)v10[407]; v23 = sub_42BF30((int)(v34 + 19)); (*(void (__thiscall **)(_DWORD, int, int))(v22 + 584))(v10[407], v23, v20); (*(void (__stdcall **)(int, int))(*(_DWORD *)v10[407] + 308))(v21, a5 - 5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v10[407] + 284))(0.69999999); (*(void (__stdcall **)(signed int))(*(_DWORD *)v10[407] + 256))(1); v24 = *(_DWORD *)v10[409]; v25 = v21 + v10[392] + 6; v26 = *(unsigned __int16 *)(v35 + 64); v27 = v33 + 34; v28 = (char *)sub_4090F0(271982433); v29 = sub_7549E0(v28, v27, v26); (*(void (__thiscall **)(_DWORD, char *))(v24 + 500))(v10[409], v29); (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v10[409] + 308))(v25, *(_DWORD *)v36); (*(void (__stdcall **)(signed int))(*(_DWORD *)v10[409] + 256))(1); v30 = *(void (__stdcall **)(int *, int))(*(_DWORD *)v10[410] + 468); if ( a9 ) { v30(&dword_AA8C68, v31); result = (*(int (__cdecl **)(int *))(*(_DWORD *)v10[409] + 468))(&dword_AA8C68); } else { v30(&dword_AA8C88, v31); result = (*(int (__cdecl **)(int *))(*(_DWORD *)v10[409] + 468))(&dword_AA8C88); } } } } } } } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // 540C70: using guessed type CHAR String[256]; //----- (00540F10) -------------------------------------------------------- int __thiscall sub_540F10(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5, int a6, char a7) { int result; // eax _DWORD *v8; // esi int v9; // edi int v10; // ST10_4 int v11; // eax int v12; // ebx _DWORD *v13; // eax int v14; // edi int v15; // ST18_4 char *v16; // eax char *v17; // eax int v18; // eax CHAR *v19; // ecx CHAR v20; // dl int (__stdcall *v21)(int *); // eax struct tagSIZE psizl; // [esp+28h] [ebp-118h] int v23; // [esp+30h] [ebp-110h] int v24; // [esp+34h] [ebp-10Ch] _DWORD *v25; // [esp+38h] [ebp-108h] CHAR String[256]; // [esp+3Ch] [ebp-104h] result = a6; v8 = this; v23 = a6; if ( a5 ) { if ( a6 ) { if ( this[408] ) { if ( this[411] ) { result = sub_49F760(*a5); v24 = result; if ( result ) { v9 = *(_DWORD *)v8[408]; v10 = *(_DWORD *)(a5 + 17); v11 = sub_42BF30((int)(a5 + 19)); (*(void (__thiscall **)(_DWORD, int, int, signed int, signed int))(v9 + 584))(v8[408], v11, v10, 32, 32); (*(void (__stdcall **)(int, int))(*(_DWORD *)v8[408] + 308))(a2, a3 - 5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8[408] + 284))(0.69999999); (*(void (__stdcall **)(signed int))(*(_DWORD *)v8[408] + 256))(1); v12 = a2 + v8[392] + 3; v13 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)v8[304] + 456))(); v14 = *(_DWORD *)v8[411]; v25 = v13; v15 = a4 * *(unsigned __int16 *)(v23 + 64); v16 = (char *)sub_4090F0(271982433); v17 = sub_7549E0(v16, v24 + 34, v15); (*(void (__thiscall **)(_DWORD, char *))(v14 + 500))(v8[411], v17); v18 = (*(int (**)(void))(*(_DWORD *)v8[411] + 484))(); v19 = &String[-v18]; do { v20 = *(_BYTE *)v18; v19[v18] = *(_BYTE *)v18; ++v18; } while ( v20 ); sub_4593C0(v25, String, strlen(String), &psizl); v8[412] += v12; (*(void (__stdcall **)(int, int))(*(_DWORD *)v8[411] + 308))(v12 + 3, a3 + 3); (*(void (__stdcall **)(signed int))(*(_DWORD *)v8[411] + 256))(1); v21 = *(int (__stdcall **)(int *))(*(_DWORD *)v8[411] + 468); if ( a7 ) result = v21(&dword_AA8C68); else result = v21(&dword_AA8C88); } } } } } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // 540F10: using guessed type CHAR String[256]; //----- (00541120) -------------------------------------------------------- void __thiscall sub_541120(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // edi _BYTE *v4; // eax int v5; // eax int v6; // ebx int v7; // ST0C_4 char *v8; // eax char *v9; // eax v3 = this; if ( a2 ) { if ( *a3 >= 0 ) { v4 = (_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 48))(a2); if ( v4 ) { if ( *v4 & 0xFE ) { v5 = v3[406] - (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 72))(a2); if ( v5 >= 0 ) { v6 = *(_DWORD *)v3[*a3 + 304]; v7 = v5; v8 = (char *)sub_4090F0(-487783907); v9 = sub_7549E0(v8, v7); (*(void (__thiscall **)(_DWORD, char *))(v6 + 472))(v3[*a3 + 304], v9); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*(_DWORD *)v3[*a3 + 304] + 464))( 220, 100, 20, 255); ++*a3; } } } } } } //----- (005411D0) -------------------------------------------------------- int __thiscall sub_5411D0(_DWORD **this, int a2, _DWORD *a3) { int result; // eax const char *v4; // eax const char *v5; // edx unsigned int v6; // eax char *v7; // edi char v8; // cl const char *v9; // esi int v10; // edx char *v11; // edi const char *v12; // esi char v13; // cl int v14; // eax int v15; // eax signed __int64 v16; // kr00_8 _DWORD **v17; // [esp+8h] [ebp-58h] int v18; // [esp+Ch] [ebp-54h] int v19; // [esp+10h] [ebp-50h] int v20; // [esp+14h] [ebp-4Ch] int v21; // [esp+18h] [ebp-48h] char v22; // [esp+1Ch] [ebp-44h] char v23; // [esp+1Dh] [ebp-43h] result = a2; v17 = this; if ( a2 && *(_DWORD *)(a2 + 102) == 37 ) { v22 = 0; memset(&v23, 0, 0x3Fu); v4 = sub_40A910(763656613); sprintf(&v22, v4); v5 = sub_4090F0(-12313067); v6 = strlen(v5) + 1; v7 = (char *)&v21 + 3; do v8 = (v7++)[1]; while ( v8 ); v9 = v5; v10 = dword_AA8C68; qmemcpy(v7, v9, 4 * (v6 >> 2)); v12 = &v9[4 * (v6 >> 2)]; v11 = &v7[4 * (v6 >> 2)]; v13 = v6; v14 = dword_AA8C6C; qmemcpy(v11, v12, v13 & 3); v18 = v10; v20 = dword_AA8C70; v19 = v14; v21 = dword_AA8C74; v15 = sub_684D30(&byte_ADA230); if ( v15 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v15 + 4))(v15) != 7 ) { v18 = dword_AA8C88; v19 = dword_AA8C8C; v20 = dword_AA8C90; v21 = dword_AA8C94; } v16 = sub_6622F0(*(_DWORD *)(a2 + 207)); if ( !(v16 & (1i64 << sub_652070(dword_AD8EBC))) ) { v18 = dword_AA8C88; v19 = dword_AA8C8C; v20 = dword_AA8C90; v21 = dword_AA8C94; } (*(void (__stdcall **)(int *))(*v17[*a3 + 304] + 468))(&v18); result = (*(int (__stdcall **)(char *))(*v17[*a3 + 304] + 472))(&v22); ++*a3; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8C88: using guessed type int dword_AA8C88; // AA8C8C: using guessed type int dword_AA8C8C; // AA8C90: using guessed type int dword_AA8C90; // AA8C94: using guessed type int dword_AA8C94; // ADA230: using guessed type char byte_ADA230; //----- (00541360) -------------------------------------------------------- int __thiscall sub_541360(_DWORD **this, int a2, unsigned __int8 a3, _DWORD *a4) { _DWORD **v4; // edi const char *v5; // eax _DWORD *v6; // esi const char *v7; // ebx __int16 v8; // ax int v9; // ebx int v10; // ST0C_4 char *v11; // eax char *v12; // eax __int16 v13; // ax int v14; // ebx char *v15; // eax char *v16; // eax int v17; // ebx char *v18; // eax char *v19; // eax __int16 v20; // ax int v21; // ebx int v22; // ST0C_4 char *v23; // eax char *v24; // eax __int16 v25; // ax int v26; // ebx int v27; // ST0C_4 char *v28; // eax char *v29; // eax int v30; // ebx const CHAR *v31; // eax const char *v32; // ebx int result; // eax int v34; // eax char *v35; // eax const char *v36; // [esp+18h] [ebp+Ch] int v37; // [esp+1Ch] [ebp+10h] v4 = this; v5 = (const char *)sub_7474E0((_DWORD *)(dword_ACDA30 + 4), a3); v6 = a4; v7 = v5; v8 = *(_WORD *)v5; v36 = v7; if ( v8 ) { v9 = *v4[*a4 + 304]; v10 = (signed __int16)(100 * v8) / 1000; v11 = (char *)sub_4090F0(1025516136); v12 = sub_7549E0(v11, v10); (*(void (__thiscall **)(_DWORD *, char *))(v9 + 472))(v4[*a4 + 304], v12); (*(void (__stdcall **)(int *))(*v4[*a4 + 304] + 468))(&dword_AA8C68); ++*a4; v7 = v36; } v13 = *((_WORD *)v7 + 2); if ( v13 ) { v14 = *v4[*a4 + 304]; v37 = (signed __int16)(100 * v13) / 1000; v15 = (char *)sub_4090F0(1031497568); v16 = sub_7549E0(v15, v37); (*(void (__thiscall **)(_DWORD *, char *))(v14 + 472))(v4[*v6 + 304], v16); (*(void (__stdcall **)(int *))(*v4[*v6 + 304] + 468))(&dword_AA8C68); v17 = *v4[++*v6 + 304]; v18 = (char *)sub_4090F0(1031497579); v19 = sub_7549E0(v18, v37); (*(void (__thiscall **)(_DWORD *, char *))(v17 + 472))(v4[*v6 + 304], v19); (*(void (__stdcall **)(int *))(*v4[*v6 + 304] + 468))(&dword_AA8C68); ++*v6; v7 = v36; } v20 = *((_WORD *)v7 + 4); if ( v20 ) { v21 = *v4[*v6 + 304]; v22 = (signed __int16)(100 * v20) / 1000; v23 = (char *)sub_4090F0(-1988662680); v24 = sub_7549E0(v23, v22); (*(void (__thiscall **)(_DWORD *, char *))(v21 + 472))(v4[*v6 + 304], v24); (*(void (__stdcall **)(int *))(*v4[*v6 + 304] + 468))(&dword_AA8C68); ++*v6; v7 = v36; } v25 = *((_WORD *)v7 + 3); if ( v25 ) { v26 = *v4[*v6 + 304]; v27 = (signed __int16)(100 * v25) / 1000; v28 = (char *)sub_4090F0(-1598378330); v29 = sub_7549E0(v28, v27); (*(void (__thiscall **)(_DWORD *, char *))(v26 + 472))(v4[*v6 + 304], v29); (*(void (__stdcall **)(int *))(*v4[*v6 + 304] + 468))(&dword_AA8C68); ++*v6; v7 = v36; } if ( strcmp(v7 + 10, "-") ) { v30 = *v4[*v6 + 304]; v31 = sub_4090F0(1025600601); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v30 + 472))(v4[*v6 + 304], v31); (*(void (__stdcall **)(int *))(*v4[*v6 + 304] + 468))(&dword_AA8C68); ++*v6; v7 = v36; } v32 = v7 + 42; result = strcmp(v32, "-"); if ( result ) { v34 = sub_5490F0(v32); v35 = sub_7549E0("+ %s", v34 + 70); result = sub_53F070(v4, v35, v6, (int)&dword_AA8C68); } return result; } // AA8C68: using guessed type int dword_AA8C68; // ACDA30: using guessed type int dword_ACDA30; //----- (00541690) -------------------------------------------------------- _BYTE *__thiscall sub_541690(_BYTE *this) { _BYTE *v1; // esi unsigned __int16 v2; // ax void *v4; // [esp-1Ch] [ebp-3Ch] int v5; // [esp-18h] [ebp-38h] int v6; // [esp-14h] [ebp-34h] int v7; // [esp-10h] [ebp-30h] int v8; // [esp-Ch] [ebp-2Ch] int v9; // [esp-8h] [ebp-28h] int v10; // [esp-4h] [ebp-24h] void **v11; // [esp+Ch] [ebp-14h] _BYTE *v12; // [esp+10h] [ebp-10h] int v13; // [esp+1Ch] [ebp-4h] v1 = this; v12 = this; sub_45B4A0(this); v11 = &v4; *(_DWORD *)v1 = &ItemInfoWin::`vftable'; *((_DWORD *)v1 + 58) = &ItemInfoWin::`vftable'; v9 = 15; v8 = 0; v13 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, "LimitRandomOption", 0x11u); v2 = sub_747F30(&unk_ACDC6C, v4, v5, v6, v7, v8, v9, v10); *((float *)v1 + 104) = -1.0; *((_DWORD *)v1 + 406) = v2; *((_DWORD *)v1 + 302) = 0; *((_DWORD *)v1 + 403) = 14; *((_DWORD *)v1 + 407) = 0; *((_DWORD *)v1 + 409) = 0; *((_DWORD *)v1 + 410) = 0; *((_DWORD *)v1 + 408) = 0; *((_DWORD *)v1 + 411) = 0; *((_DWORD *)v1 + 412) = 0; v1[420] = 0; v1[440] = 0; v1[695] = 0; v1[950] = 0; return v1; } // 9CA840: using guessed type void *ItemInfoWin::`vftable'; // 9CA85C: using guessed type void *ItemInfoWin::`vftable'; //----- (00541780) -------------------------------------------------------- volatile LONG *__cdecl sub_541780(int a1, int a2, int a3) { _BYTE *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x678u); v7 = v3; v8 = 0; if ( v3 ) v4 = (volatile LONG *)sub_541690(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 548))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (005418C0) -------------------------------------------------------- const char *__thiscall sub_5418C0(_DWORD **this, const char *a2, int *a3) { const char *result; // eax _DWORD **v4; // edi int v5; // eax int v6; // ebx char *v7; // eax _DWORD *v8; // ecx int *v9; // ebx int v10; // edi const CHAR *v11; // eax unsigned int v12; // ebx int v13; // eax int v14; // edi const char *v15; // eax signed int v16; // edi bool v17; // cf int v18; // eax unsigned int v19; // edi int v20; // edi int v21; // ebx unsigned int v22; // edi int v23; // ecx int v24; // edi char *v25; // eax char *v26; // eax int v27; // edi const void *v28; // eax int v29; // ecx unsigned int v30; // eax unsigned int v31; // edi char *v32; // edx void *v33; // ecx _BYTE *v34; // ecx int v35; // eax int v36; // eax const CHAR *v37; // edi int v38; // eax int v39; // ecx unsigned int v40; // [esp+14h] [ebp-248h] void *v41; // [esp+18h] [ebp-244h] HDC hdc; // [esp+1Ch] [ebp-240h] HDC hdca; // [esp+1Ch] [ebp-240h] _WORD *v44; // [esp+20h] [ebp-23Ch] signed int v45; // [esp+20h] [ebp-23Ch] signed int v46; // [esp+24h] [ebp-238h] unsigned int v47; // [esp+28h] [ebp-234h] signed int v48; // [esp+28h] [ebp-234h] char v49; // [esp+2Ch] [ebp-230h] void *Src; // [esp+30h] [ebp-22Ch] unsigned int v51; // [esp+40h] [ebp-21Ch] unsigned int v52; // [esp+44h] [ebp-218h] char Dst; // [esp+4Ch] [ebp-210h] char v54; // [esp+4Dh] [ebp-20Fh] int v55; // [esp+14Ch] [ebp-110h] int v56; // [esp+258h] [ebp-4h] result = a2; v4 = this; v41 = this; if ( *a3 < 80 ) { result = a2 + 342; if ( a2[342] != 45 ) { v5 = sub_548FB0(result); if ( v5 ) { v6 = *v4[*a3 + 304]; v7 = sub_7549E0("[%s]", v5 + 32); (*(void (__thiscall **)(_DWORD *, char *))(v6 + 472))(v4[*a3 + 304], v7); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*v4[*a3 + 304] + 464))( 120, 120, 255, 255); ++*a3; } v8 = v4[(*a3)++ + 304]; (*(void (__stdcall **)(const char *))(*v8 + 472))(" "); v9 = v4[(*a3)++ + 304]; v10 = *v9; v11 = sub_40A910(-614121674); (*(void (__thiscall **)(int *, const CHAR *))(v10 + 472))(v9, v11); v12 = 0; v46 = 0; v47 = 0; if ( sub_548A40() ) { do { v13 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v12); v14 = v13; v44 = (_WORD *)v13; if ( v13 ) { v15 = (const char *)(v13 + 342); if ( *(_BYTE *)(v14 + 342) != 45 && !strcmp(v15, a2 + 342) ) { (*(void (__stdcall **)(int))(**((_DWORD **)v41 + *a3 + 304) + 472))(v14 + 34); v16 = 0; v17 = 1; do { if ( v17 ) { v18 = dword_ADA534[v16]; if ( v18 ) { if ( *v44 == *(_WORD *)(v18 + 8) ) { (*(void (__stdcall **)(int *))(**((_DWORD **)v41 + *a3 + 304) + 468))(&dword_AA8CB8); ++v46; } } } v17 = (unsigned int)++v16 < 0x1E; } while ( v16 < 30 ); ++*a3; v12 = v47; } } v47 = ++v12; } while ( v12 < sub_548A40() ); } v48 = 2; v45 = 4; do { v19 = 0; v40 = 0; if ( sub_549040() ) { do { v20 = sub_7474E0((_DWORD *)(dword_ACD97C + 4), v19); if ( !strcmp((const char *)v20, a2 + 342) && *(unsigned __int8 *)(v20 + 32) == v48 ) { v21 = *(unsigned __int16 *)(v20 + 33); v22 = 0; if ( sub_4B1280() ) { while ( *(unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD978 + 4), v22) != v21 ) { if ( ++v22 >= sub_4B1280() ) goto LABEL_53; } hdc = (HDC)sub_7474E0((_DWORD *)(dword_ACD978 + 4), v22); if ( hdc ) { v23 = *((_DWORD *)v41 + (*a3)++ + 304); (*(void (__stdcall **)(const char *))(*(_DWORD *)v23 + 472))(" "); v24 = **((_DWORD **)v41 + *a3 + 304); v25 = (char *)sub_40A910(-620502221); v26 = sub_7549E0(v25, v48); (*(void (__thiscall **)(_DWORD, char *))(v24 + 472))(*((_DWORD *)v41 + *a3 + 304), v26); if ( v48 <= v46 ) (*(void (__stdcall **)(int *))(**((_DWORD **)v41 + *a3 + 304) + 468))(&dword_AA8CA8); ++*a3; v52 = 15; v51 = 0; LOBYTE(Src) = 0; sub_4018E0(&Src, (char *)hdc + 3, strlen((const char *)hdc + 3)); v56 = 0; v49 = 10; v27 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v49, 0x100000000ui64); if ( v27 != -1 ) { v49 = 10; do { Dst = 0; memset(&v54, 0, 0xFFu); v28 = Src; if ( v52 < 0x10 ) v28 = &Src; memcpy_s(&Dst, v27, v28, 0); v29 = *a3; Dst = 0; (*(void (__stdcall **)(char *))(**((_DWORD **)v41 + v29 + 304) + 472))(&Dst); if ( v48 <= v46 ) (*(void (__stdcall **)(int *))(**((_DWORD **)v41 + *a3 + 304) + 468))(&dword_AA8CB8); v30 = v51; ++*a3; v31 = v27 + 1; if ( v30 < v31 ) v31 = v30; if ( v31 ) { v32 = (char *)Src; if ( v52 >= 0x10 ) { v33 = Src; } else { v32 = (char *)&Src; v33 = &Src; } memcpy_0(v33, &v32[v31], v30 - v31); v34 = Src; v35 = v51 - v31; v51 -= v31; if ( v52 < 0x10 ) v34 = &Src; v34[v35] = 0; } v27 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v49, 0x100000000ui64); } while ( v27 != -1 ); } v36 = (*(int (**)(void))(**((_DWORD **)v41 + 304) + 456))(); v37 = (const CHAR *)Src; hdca = *(HDC *)(v36 + 192); if ( v52 < 0x10 ) v37 = (const CHAR *)&Src; memset(&v55, 0, 0x100u); while ( *a3 < 80 ) { v38 = sub_8F5700((int)&v55, v37, hdca, *((_DWORD *)v41 + 402)); if ( !v38 ) break; *((_BYTE *)&v55 + v38) = 0; v37 += v38; (*(void (__stdcall **)(int *))(**((_DWORD **)v41 + *a3 + 304) + 472))(&v55); if ( v48 <= v46 ) (*(void (__stdcall **)(int *))(**((_DWORD **)v41 + *a3 + 304) + 468))(&dword_AA8CB8); ++*a3; memset(&v55, 0, 0x100u); } v56 = -1; if ( v52 >= 0x10 ) operator delete(Src); v52 = 15; v51 = 0; LOBYTE(Src) = 0; } } } LABEL_53: v19 = ++v40; } while ( v40 < sub_549040() ); } ++v48; --v45; } while ( v45 ); v39 = *((_DWORD *)v41 + (*a3)++ + 304); result = (const char *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v39 + 472))(" "); } } return result; } // AA8CA8: using guessed type int dword_AA8CA8; // AA8CB8: using guessed type int dword_AA8CB8; // ACB230: using guessed type int dword_ACB230; // ACD978: using guessed type int dword_ACD978; // ACD97C: using guessed type int dword_ACD97C; // ADA534: using guessed type int dword_ADA534[]; //----- (00541F40) -------------------------------------------------------- char __thiscall sub_541F40(_DWORD **this, int a2, _DWORD *a3) { char result; // al _DWORD **v4; // edi int v5; // eax void *v6; // eax int v7; // ebx const CHAR *v8; // eax result = a2; v4 = this; if ( a2 && *a3 >= 0 ) { v5 = *(_DWORD *)(a2 + 112); if ( v5 ) v6 = (void *)(v5 + 2); else v6 = 0; result = sub_433B80(&dword_ACB248, v6); if ( result ) { v7 = *v4[*a3 + 304]; v8 = sub_4090F0(398553191); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v7 + 472))(v4[*a3 + 304], v8); result = (*(int (__stdcall **)(int *))(*v4[*a3 + 304] + 468))(&dword_AA8CB8); ++*a3; } } return result; } // AA8CB8: using guessed type int dword_AA8CB8; // ACB248: using guessed type int dword_ACB248; //----- (00541FC0) -------------------------------------------------------- float *__thiscall sub_541FC0(_DWORD **this, float *a2, _DWORD *a3) { float *result; // eax bool v4; // sf unsigned __int8 v5; // of float v6; // edx signed int v7; // esi _DWORD *v8; // edi int v9; // ecx int v10; // ecx int v11; // ecx char *v12; // esi int v13; // eax unsigned int v14; // ecx unsigned int v15; // eax int v16; // esi int *v17; // edx int v18; // edi char *v19; // eax unsigned __int8 *v20; // edi unsigned __int8 v21; // al signed int v22; // ecx unsigned __int8 *v23; // eax int v24; // edx int v25; // edi int v26; // edi char *v27; // eax char *v28; // eax void (__stdcall *v29)(int *); // eax _DWORD *v30; // edi char *v31; // edi int v32; // eax char *v33; // eax const char *v34; // eax void *v35; // eax int v36; // eax int v37; // edi int v38; // STCC_4 char *v39; // eax char *v40; // eax void *v41; // eax int v42; // eax const char *v43; // eax int *v44; // ecx bool v45; // cf void *v46; // eax void *v47; // STCC_4 int v48; // edi char *v49; // eax char *v50; // eax int v51; // ecx int v52; // edi unsigned int v53; // edi const char *v54; // eax int v55; // ecx int v56; // edi int v57; // edi int v58; // STCC_4 char *v59; // eax char *v60; // eax const char *v61; // eax int v62; // eax const char *v63; // STC8_4 int v64; // STCC_4 const char *v65; // eax int v66; // edi const CHAR *v67; // eax const char *v68; // eax unsigned __int16 *v69; // edi char *v70; // eax unsigned __int8 v71; // cl signed int v72; // edx unsigned __int8 *v73; // ecx int v74; // eax int v75; // edi int *v76; // eax int v77; // edi int v78; // STCC_4 const CHAR *v79; // eax char *v80; // eax int v81; // edi int v82; // STCC_4 int v83; // STC8_4 const CHAR *v84; // eax char *v85; // eax int v86; // ecx int v87; // edi int v88; // STCC_4 const CHAR *v89; // eax char *v90; // eax int *v91; // eax unsigned __int16 *v92; // edx int v93; // edi int v94; // STCC_4 const CHAR *v95; // eax char *v96; // eax int v97; // edi int v98; // STCC_4 int v99; // STC8_4 const CHAR *v100; // eax char *v101; // eax int v102; // ecx int v103; // edi int v104; // STCC_4 const CHAR *v105; // eax char *v106; // eax int *v107; // eax unsigned __int16 *v108; // edx int v109; // edi int v110; // STCC_4 const CHAR *v111; // eax char *v112; // eax int v113; // edi int v114; // STCC_4 int v115; // STC8_4 const CHAR *v116; // eax char *v117; // eax int v118; // ecx int v119; // edi int v120; // STCC_4 const CHAR *v121; // eax char *v122; // eax int *v123; // eax unsigned __int16 *v124; // edx int v125; // edi int v126; // STCC_4 const CHAR *v127; // eax char *v128; // eax int v129; // edi int v130; // STCC_4 int v131; // STC8_4 const CHAR *v132; // eax char *v133; // eax int v134; // ecx int v135; // edi int v136; // STCC_4 const CHAR *v137; // eax char *v138; // eax int *v139; // eax unsigned __int16 *v140; // edx int v141; // edi int v142; // STCC_4 const CHAR *v143; // eax char *v144; // eax int v145; // edi int v146; // STCC_4 int v147; // STC8_4 const CHAR *v148; // eax char *v149; // eax int v150; // ecx int v151; // edi int v152; // STCC_4 const CHAR *v153; // eax char *v154; // eax unsigned int v155; // eax bool v156; // zf int v157; // edi double v158; // STC8_8 double v159; // STC0_8 char *v160; // eax char *v161; // eax int v162; // edi double v163; // STC8_8 char *v164; // STC4_4 char *v165; // eax unsigned __int16 *v166; // edi int v167; // STCC_4 const char *v168; // eax unsigned int v169; // edx int v170; // STCC_4 const char *v171; // eax int v172; // STCC_4 const char *v173; // eax int v174; // eax int v175; // edi int v176; // ecx double v177; // STC8_8 char *v178; // STC4_4 int v179; // edi int v180; // STCC_4 const CHAR *v181; // eax char *v182; // eax int v183; // edi int v184; // STCC_4 const CHAR *v185; // eax char *v186; // eax int v187; // edi int v188; // STCC_4 const CHAR *v189; // eax char *v190; // eax int v191; // edi int v192; // STCC_4 const CHAR *v193; // eax char *v194; // eax int v195; // edi int v196; // STCC_4 const CHAR *v197; // eax char *v198; // eax int v199; // STCC_4 const CHAR *v200; // STC8_4 int v201; // eax int v202; // edi int v203; // STCC_4 int v204; // STC8_4 const CHAR *v205; // eax char *v206; // eax int v207; // STCC_4 const CHAR *v208; // eax int v209; // edi int v210; // STCC_4 const CHAR *v211; // eax char *v212; // STCC_4 int v213; // edi int v214; // STCC_4 int v215; // STC8_4 const CHAR *v216; // eax char *v217; // eax int v218; // STCC_4 const CHAR *v219; // eax int v220; // edi int v221; // STCC_4 const CHAR *v222; // eax char *v223; // STCC_4 int v224; // edi int v225; // STCC_4 int v226; // STC8_4 const CHAR *v227; // eax char *v228; // eax int v229; // STCC_4 const CHAR *v230; // eax int v231; // edi int v232; // STCC_4 const CHAR *v233; // eax char *v234; // STCC_4 int v235; // edi int v236; // STCC_4 int v237; // STC8_4 const CHAR *v238; // eax char *v239; // eax int v240; // STCC_4 const CHAR *v241; // eax int v242; // edi int v243; // STCC_4 const CHAR *v244; // eax char *v245; // STCC_4 int v246; // edi int v247; // STCC_4 int v248; // STC8_4 const CHAR *v249; // eax char *v250; // eax int v251; // STCC_4 const CHAR *v252; // eax int v253; // STCC_4 const CHAR *v254; // STC8_4 int v255; // edi int v256; // STCC_4 const CHAR *v257; // eax char *v258; // eax int v259; // edi int v260; // STCC_4 const CHAR *v261; // eax char *v262; // eax int v263; // edi int v264; // STCC_4 const CHAR *v265; // eax char *v266; // eax int v267; // edi int v268; // STCC_4 const CHAR *v269; // eax char *v270; // eax int v271; // edi int v272; // STCC_4 const CHAR *v273; // eax char *v274; // eax int v275; // ecx int v276; // eax int v277; // edi unsigned __int16 v278; // ax const char *v279; // eax int v280; // STCC_4 const char *v281; // STC8_4 const char *v282; // STC8_4 int v283; // eax int v284; // STC8_4 int v285; // STC4_4 const char *v286; // eax const char *v287; // STC8_4 int v288; // eax int v289; // edi int v290; // eax int v291; // STC8_4 const char *v292; // eax int v293; // STCC_4 const char *v294; // STC8_4 const char *v295; // STC8_4 int v296; // eax int v297; // edi unsigned __int16 v298; // ax const char *v299; // eax int v300; // STCC_4 const char *v301; // STC8_4 int v302; // STCC_4 int v303; // STC8_4 const char *v304; // eax const char *v305; // STC8_4 int v306; // eax int v307; // STC8_4 int v308; // STC4_4 const char *v309; // eax const char *v310; // STC8_4 float v311; // edi double v312; // STC8_8 const char *v313; // eax int v314; // ecx double v315; // STC8_8 const char *v316; // eax int v317; // eax int v318; // edi int v319; // eax int v320; // STC8_4 const char *v321; // eax int v322; // STCC_4 const char *v323; // STC8_4 const char *v324; // STC8_4 unsigned int v325; // eax unsigned int v326; // ecx unsigned int v327; // STCC_4 const char *v328; // eax unsigned int v329; // ecx unsigned int v330; // ecx unsigned int v331; // STCC_4 const char *v332; // eax unsigned int v333; // ecx unsigned int v334; // ecx unsigned int v335; // STCC_4 const char *v336; // eax unsigned int v337; // ecx unsigned int v338; // ecx unsigned int v339; // STCC_4 const char *v340; // eax int v341; // edi int v342; // eax int v343; // ecx int v344; // STCC_4 int v345; // STC8_4 const char *v346; // eax int v347; // STCC_4 const char *v348; // STC8_4 int v349; // STCC_4 const char *v350; // STC8_4 int v351; // eax int v352; // eax int v353; // STCC_4 const char *v354; // eax int v355; // edi int v356; // eax int v357; // ecx int v358; // STCC_4 int v359; // STC8_4 const char *v360; // eax int v361; // STCC_4 const char *v362; // STC8_4 int v363; // STCC_4 const char *v364; // STC8_4 int v365; // eax int v366; // eax int v367; // STCC_4 const char *v368; // eax unsigned int v369; // ecx int v370; // STCC_4 unsigned int v371; // STC8_4 const char *v372; // eax unsigned int v373; // STCC_4 const char *v374; // eax unsigned int v375; // eax double v376; // st6 unsigned __int64 v377; // st6 double v378; // st5 double v379; // st4 double v380; // st5 const char *v381; // eax double v382; // st7 const char *v383; // STC4_4 const char *v384; // STC4_4 unsigned int v385; // eax bool v386; // zf int v387; // edi double v388; // STC8_8 double v389; // STC0_8 char *v390; // eax char *v391; // eax int v392; // edi double v393; // STC8_8 char *v394; // eax char *v395; // eax double v396; // STC8_8 char *v397; // eax double v398; // STC8_8 const char *v399; // eax int v400; // edi int v401; // STCC_4 const char *v402; // eax int v403; // edi int v404; // STCC_4 const char *v405; // eax int v406; // eax unsigned int v407; // edi float *v408; // esi _DWORD *v409; // eax int v410; // edi int v411; // STCC_4 char *v412; // eax char *v413; // eax CHAR *v414; // edi CHAR *v415; // edi CHAR *v416; // edi CHAR *v417; // edi int (*v418)(void); // eax unsigned int v419; // eax unsigned int v420; // edi __int16 *v421; // eax _WORD *v422; // eax char *v423; // ecx char *v424; // STC8_4 int v425; // STC4_4 char *v426; // STC0_4 int v427; // STBC_4 char *v428; // eax char *v429; // eax int v430; // edi char *v431; // STCC_4 char *v432; // eax char *v433; // eax int v434; // edi int v435; // STCC_4 char *v436; // eax char *v437; // eax char *v438; // [esp+C4h] [ebp-3CCh] signed int v439; // [esp+C4h] [ebp-3CCh] int v440; // [esp+C8h] [ebp-3C8h] unsigned __int16 *v441; // [esp+C8h] [ebp-3C8h] signed int v442; // [esp+C8h] [ebp-3C8h] const char *v443; // [esp+C8h] [ebp-3C8h] int v444; // [esp+C8h] [ebp-3C8h] int v445; // [esp+C8h] [ebp-3C8h] unsigned __int16 *v446; // [esp+CCh] [ebp-3C4h] int v447; // [esp+CCh] [ebp-3C4h] int v448; // [esp+CCh] [ebp-3C4h] int v449; // [esp+E0h] [ebp-3B0h] __int64 v450; // [esp+E8h] [ebp-3A8h] int v451; // [esp+F0h] [ebp-3A0h] int v452; // [esp+F4h] [ebp-39Ch] unsigned int v453; // [esp+F8h] [ebp-398h] _DWORD **v454; // [esp+FCh] [ebp-394h] int v455; // [esp+100h] [ebp-390h] int v456; // [esp+104h] [ebp-38Ch] int v457; // [esp+108h] [ebp-388h] int v458; // [esp+10Ch] [ebp-384h] int v459; // [esp+110h] [ebp-380h] int v460; // [esp+114h] [ebp-37Ch] int v461; // [esp+118h] [ebp-378h] float v462; // [esp+11Ch] [ebp-374h] int v463; // [esp+120h] [ebp-370h] float *v464; // [esp+124h] [ebp-36Ch] float v465; // [esp+128h] [ebp-368h] char v466; // [esp+12Fh] [ebp-361h] _DWORD *v467; // [esp+130h] [ebp-360h] unsigned __int16 *v468; // [esp+134h] [ebp-35Ch] int v469; // [esp+138h] [ebp-358h] char v470[4]; // [esp+13Ch] [ebp-354h] void *v471; // [esp+140h] [ebp-350h] int v472; // [esp+150h] [ebp-340h] unsigned int v473; // [esp+154h] [ebp-33Ch] char v474; // [esp+15Ch] [ebp-334h] char v475; // [esp+1D0h] [ebp-2C0h] char v476[8]; // [esp+2D4h] [ebp-1BCh] char v477; // [esp+2DCh] [ebp-1B4h] int v478; // [esp+2E4h] [ebp-1ACh] int v479[2]; // [esp+2E8h] [ebp-1A8h] char v480; // [esp+2F0h] [ebp-1A0h] int v481; // [esp+300h] [ebp-190h] int v482; // [esp+304h] [ebp-18Ch] int v483; // [esp+308h] [ebp-188h] int v484; // [esp+30Ch] [ebp-184h] int v485; // [esp+310h] [ebp-180h] int v486; // [esp+314h] [ebp-17Ch] int v487; // [esp+318h] [ebp-178h] int v488; // [esp+31Ch] [ebp-174h] int v489; // [esp+320h] [ebp-170h] int v490; // [esp+324h] [ebp-16Ch] int v491; // [esp+328h] [ebp-168h] int v492; // [esp+32Ch] [ebp-164h] int v493; // [esp+330h] [ebp-160h] int v494; // [esp+334h] [ebp-15Ch] int v495; // [esp+338h] [ebp-158h] int v496; // [esp+33Ch] [ebp-154h] int v497; // [esp+340h] [ebp-150h] int v498; // [esp+344h] [ebp-14Ch] int v499; // [esp+348h] [ebp-148h] int v500; // [esp+34Ch] [ebp-144h] int v501; // [esp+350h] [ebp-140h] int v502; // [esp+354h] [ebp-13Ch] int v503; // [esp+358h] [ebp-138h] int v504; // [esp+35Ch] [ebp-134h] int v505; // [esp+360h] [ebp-130h] int v506; // [esp+364h] [ebp-12Ch] int v507; // [esp+368h] [ebp-128h] int v508; // [esp+36Ch] [ebp-124h] int v509; // [esp+370h] [ebp-120h] int v510; // [esp+374h] [ebp-11Ch] int v511; // [esp+378h] [ebp-118h] int v512; // [esp+37Ch] [ebp-114h] char v513; // [esp+380h] [ebp-110h] int v514; // [esp+48Ch] [ebp-4h] result = a2; v5 = __OFSUB__(*a3, 80); v4 = *a3 - 80 < 0; v6 = a2[1]; v7 = *((signed int *)a2 + 2); v8 = (_DWORD *)*((_DWORD *)a2 + 3); v454 = this; v9 = *(_DWORD *)a2; v464 = a2; v469 = v9; v465 = v6; v468 = (unsigned __int16 *)v7; v467 = v8; if ( !(v4 ^ v5) ) return result; v466 = sub_6807E0(byte_AD9238); v455 = 0; v456 = 0; v457 = 0; v458 = 0; v459 = 0; v460 = 0; v461 = 0; v462 = 0.0; v463 = 0; if ( *(float *)&v7 != 0.0 ) { if ( !v8 ) goto LABEL_44; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v8 + 4))(v8) != 23 ) goto LABEL_604; } if ( v8 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v8 + 4))(v8) == 38 ) { LABEL_604: v440 = *(unsigned __int16 *)(v469 + 241); if ( (*(unsigned __int8 (**)(void))(*v467 + 4))() == 38 ) { result = (float *)sub_548950(v440); if ( result ) { if ( v7 > *(unsigned __int8 *)(v467[28] + 240) ) return result; v10 = *(_DWORD *)((char *)result + 34); if ( v10 ) { switch ( v10 ) { case 1: v456 = *((unsigned __int16 *)result + v7 + 19); break; case 2: v457 = *((unsigned __int16 *)result + v7 + 19); break; case 3: v458 = *((unsigned __int16 *)result + v7 + 19); break; case 4: v459 = *((unsigned __int16 *)result + v7 + 19); break; case 6: v460 = *((unsigned __int16 *)result + v7 + 19); break; case 7: v461 = *((unsigned __int16 *)result + v7 + 19); break; case 8: LODWORD(v462) = *((unsigned __int16 *)result + v7 + 19); break; } } else { v455 = *((unsigned __int16 *)result + v7 + 19); } } } else { result = (float *)sub_548900(v440); if ( result ) { if ( v7 > 12 ) return result; v11 = *(_DWORD *)((char *)result + 34); if ( v11 ) { switch ( v11 ) { case 1: v456 = *((unsigned __int16 *)result + v7 + 18); break; case 2: v457 = *((unsigned __int16 *)result + v7 + 18); break; case 3: v458 = *((unsigned __int16 *)result + v7 + 18); break; case 4: v459 = *((unsigned __int16 *)result + v7 + 18); break; case 6: v460 = *((unsigned __int16 *)result + v7 + 18); break; case 7: v461 = *((unsigned __int16 *)result + v7 + 18); break; case 8: LODWORD(v462) = *((unsigned __int16 *)result + v7 + 18); break; } } else { v455 = *((unsigned __int16 *)result + v7 + 18); } } } } LABEL_44: v451 = 0; v452 = 0; v453 = 0; if ( v467 && (*(unsigned __int8 (**)(void))(*v467 + 4))() == 5 ) { qmemcpy(&v477, v467 + 2, 0x67u); v12 = (char *)&v478 + 1; *(_DWORD *)v470 = 3; do { if ( *(_WORD *)v12 != -1 ) { v13 = sub_74CC20(dword_B9DE68, *(_WORD *)v12, *(_DWORD *)(v12 + 2) & 0xFFFFFFF, (unsigned int *)&v450 + 1); if ( v13 ) { if ( v452 < *(unsigned __int16 *)(v13 + 41) ) v452 = *(unsigned __int16 *)(v13 + 41); if ( v451 < *(unsigned __int16 *)(v13 + 39) ) v451 = *(unsigned __int16 *)(v13 + 39); v14 = v453; if ( *(_WORD *)(v13 + 44) == 1 && v453 < *(_DWORD *)(v13 + 46) ) { v14 = *(_DWORD *)(v13 + 46); v453 = *(_DWORD *)(v13 + 46); } if ( *(_WORD *)(v13 + 51) == 1 && v14 < *(_DWORD *)(v13 + 53) ) { v14 = *(_DWORD *)(v13 + 53); v453 = *(_DWORD *)(v13 + 53); } if ( *(_WORD *)(v13 + 58) == 1 ) { v15 = *(_DWORD *)(v13 + 60); if ( v14 < v15 ) v453 = v15; } } } v12 += 6; --*(_DWORD *)v470; } while ( *(float *)v470 != 0.0 ); } v16 = (int)v454; (*(void (__stdcall **)(int *))(*v454[*a3 + 304] + 468))(&dword_AA8C68); if ( *(float *)&v468 == 0.0 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(v469 + 34); } else { if ( v467 && (*(unsigned __int8 (**)(void))(*v467 + 4))() == 23 ) { v17 = *(int **)(v16 + 4 * *a3 + 1216); v446 = (unsigned __int16 *)(v469 + 34); v441 = v468; v438 = "(+%d)%s"; } else { v17 = *(int **)(v16 + 4 * *a3 + 1216); v446 = v468; v441 = (unsigned __int16 *)(v469 + 34); v438 = "%s[+%d]"; } v18 = *v17; v19 = sub_7549E0(v438, v441, v446); (*(void (__thiscall **)(_DWORD, char *))(v18 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v19); } (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 492))(&v449); if ( v449 <= 200 ) *(_DWORD *)(v16 + 1608) = 200; else *(_DWORD *)(v16 + 1608) = v449; switch ( *(_DWORD *)(v469 + 118) ) { case 1: (*(void (__stdcall **)(_DWORD, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 0, 255, 0, 255); goto LABEL_82; case 2: case 5: (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 13, 194, 254, 255); goto LABEL_82; case 3: v442 = 0; v439 = 228; break; case 4: (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 253, 32, 239, 255); goto LABEL_82; case 6: v442 = 0; v439 = 128; break; case 7: v442 = 255; v439 = 0; break; default: v442 = 255; v439 = 255; break; } (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, v439, v442, 255); LABEL_82: (*(void (__stdcall **)(const char *))(**(_DWORD **)(v16 + 4 * ++*a3 + 1216) + 472))(" "); ++*a3; v20 = 0; if ( v467 ) v20 = (unsigned __int8 *)(*(int (**)(void))(*v467 + 48))(); memset(&v498, 0, 0x3Cu); if ( v20 ) { v21 = *v20; if ( *v20 & 0xFE ) { if ( v21 & 1 ) { v22 = (unsigned int)v21 >> 1; if ( v22 > 0 ) { v23 = v20 + 1; do { v24 = *(unsigned __int16 *)(v23 + 1); v25 = *v23; v23 += 3; --v22; *(&v498 + v25) = v24; } while ( v22 ); } } } } if ( *(_DWORD *)(v469 + 98) ) { v30 = (_DWORD *)v469; } else { v450 = sub_6622F0(*(_DWORD *)(v469 + 207)); sub_662570(v450, &v475, 0x100u); v26 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v27 = (char *)sub_40C190(-603925682); v28 = sub_7549E0(v27, &v475); (*(void (__thiscall **)(_DWORD, char *))(v26 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v28); v29 = *(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468); if ( v450 & (1i64 << v466) ) v29(&dword_AA8C68); else v29(&dword_AA8C88); ++*a3; v30 = (_DWORD *)v469; } sub_5406F0((_DWORD **)v16, v30, a3); sub_5411D0((_DWORD **)v16, (int)v30, a3); if ( *(_DWORD *)((char *)v30 + 102) == 23 ) { v473 = 15; v472 = 0; LOBYTE(v471) = 0; v31 = (char *)(v469 + 2); v514 = 0; v32 = sub_4DCB90((const char *)(v469 + 2)); if ( v32 ) { *(_DWORD *)v470 = v32 + 133; sub_4018E0(&v471, (void *)(v32 + 132), strlen((const char *)(v32 + 132))); } v33 = (char *)sub_549330(v31); if ( v33 ) { v34 = (const char *)sub_440720(v33); if ( v34 ) sub_4018E0(&v471, (void *)(v34 + 32), strlen(v34 + 32)); } v35 = v471; if ( v473 < 0x10 ) v35 = &v471; v36 = sub_40C8D0(v35); if ( v36 ) { v37 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v38 = v36 + 34; v39 = (char *)sub_40A910(-269342674); v40 = sub_7549E0(v39, v38); (*(void (__thiscall **)(_DWORD, char *))(v37 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v40); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v16 + 4 * ++*a3 + 1216) + 472))(" "); ++*a3; } v514 = -1; if ( v473 >= 0x10 ) operator delete(v471); } if ( *(_DWORD *)(v469 + 102) == 36 ) { v473 = 15; v472 = 0; LOBYTE(v471) = 0; v514 = 1; if ( !v467 || (v41 = (void *)(*(int (**)(void))(*v467 + 80))(), sub_4018E0(&v471, v41, strlen((const char *)v41)), !v472) ) { v42 = sub_549490((char *)(v469 + 2)); if ( v42 ) { v43 = (const char *)sub_443AD0((char *)(v42 + 4)); if ( v43 ) sub_4018E0(&v471, (void *)(v43 + 32), strlen(v43 + 32)); } } v44 = *(int **)(v16 + 4 * *a3 + 1216); v45 = v473 < 0x10; ++*a3; v46 = v471; *(float *)v470 = *(float *)&v44; if ( v45 ) v46 = &v471; v47 = v46; v48 = *v44; v49 = (char *)sub_4090F0(1185842562); v50 = sub_7549E0(v49, v47); (*(void (__thiscall **)(_DWORD, char *))(v48 + 472))(*(_DWORD *)v470, v50); v51 = *(_DWORD *)(v16 + 4 * (*a3)++ + 1216); (*(void (__stdcall **)(const char *))(*(_DWORD *)v51 + 472))(" "); v514 = -1; if ( v473 >= 0x10 ) operator delete(v471); } v52 = v469; if ( *(_DWORD *)(v469 + 127) ) { v53 = *(_DWORD *)(v469 + 127); if ( v511 ) v53 -= v511; v54 = sub_40C190(-684180941); sprintf(&v513, v54, v53); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); if ( v53 <= sub_680890((unsigned __int8 *)byte_AD9238) ) { v55 = *(_DWORD *)(v16 + 4 * *a3 + 1216); if ( v511 <= 0 ) (*(void (__stdcall **)(int *))(*(_DWORD *)v55 + 468))(&dword_AA8C68); else (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*(_DWORD *)v55 + 464))( 220, 100, 20, 255); } else { (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8C88); } ++*a3; v52 = v469; } if ( *((_BYTE *)v464 + 16) && *(_BYTE *)(v52 + 219) ) { v56 = *(unsigned __int8 *)(v469 + 219); *(_DWORD *)v470 = *(unsigned __int8 *)(v469 + 219); if ( v56 > sub_680890((unsigned __int8 *)byte_AD9238) ) { v57 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v58 = *(_DWORD *)v470; v59 = (char *)sub_4090F0(2006010957); v60 = sub_7549E0(v59, v58); (*(void (__thiscall **)(_DWORD, char *))(v57 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v60); (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8C88); ++*a3; } v52 = v469; } if ( *(_DWORD *)(v52 + 110) == 25 ) { v61 = sub_4B17D0((const char *)(LODWORD(v465) + 2)); if ( v61 ) { v62 = *((_DWORD *)v61 + 8); if ( v62 == 2 ) { v63 = sub_4090F0(-1869109819); sprintf(&v513, v63); } else { if ( v62 == 1 ) v443 = sub_4090F0(674171426); else v443 = sub_4090F0(-484965582); sprintf(&v513, v443); } } (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8C68); ++*a3; } if ( *(_DWORD *)(v52 + 131) ) { v64 = *(_DWORD *)(v52 + 131); v65 = sub_40C190(1177827387); sprintf(&v513, v65, v64); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } if ( *(_DWORD *)(v52 + 102) == 5 ) { if ( *(_BYTE *)(v52 + 122) ) { v66 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v67 = sub_40C190(1262713234); } else { v66 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v67 = sub_40C190(1178824585); } (*(void (__thiscall **)(_DWORD, const CHAR *))(v66 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v67); ++*a3; } v68 = (const char *)(*(int (**)(void))(**(_DWORD **)(v16 + 4 * *a3 + 1212) + 484))(); if ( v68 && *a3 > 0 && strcmp(v68, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(" "); ++*a3; } HIDWORD(v450) = v469 + 2; *(float *)&v69 = COERCE_FLOAT(sub_548D80((const char *)(v469 + 2))); v468 = v69; v483 = 0; memset(&v484, 0, 0x38u); if ( *(_DWORD *)(v469 + 102) == 4 ) { if ( v467 ) { *(float *)&v70 = COERCE_FLOAT((*(int (**)(void))(*v467 + 52))()); *(float *)v470 = *(float *)&v70; if ( *(float *)&v70 != 0.0 ) { v71 = *v70; if ( *v70 & 0xFE ) { if ( v71 & 1 ) { v72 = (unsigned int)v71 >> 1; if ( v72 > 0 ) { v73 = (unsigned __int8 *)(v70 + 1); do { v74 = *(unsigned __int16 *)(v73 + 1); v75 = *v73; v73 += 3; --v72; *(&v483 + v75) = v74; } while ( v72 ); v70 = *(char **)v470; } } } } } else { *(float *)&v70 = COERCE_FLOAT(&v474); } if ( *(float *)&v468 != 0.0 && *(float *)&v70 != 0.0 ) { if ( v468[16] ) { if ( v498 <= 0 && v483 <= 0 ) { v76 = *(int **)(v16 + 4 * (*a3)++ + 1216); v77 = *v76; v78 = v468[16]; *(float *)v470 = *(float *)&v76; v79 = sub_40C190(-218366908); v80 = sub_7549E0("%s +%d", v79, v78); (*(void (__thiscall **)(_DWORD, char *))(v77 + 472))(*(_DWORD *)v470, v80); goto LABEL_176; } v81 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v82 = v483 + v498; v83 = v468[16]; v84 = sub_40C190(-218366908); v85 = sub_7549E0("%s +%d (+%d)", v84, v83, v82); (*(void (__thiscall **)(_DWORD, char *))(v81 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v85); if ( v483 <= 0 ) goto LABEL_175; v86 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } else { if ( v498 <= 0 && v483 <= 0 ) { LABEL_176: if ( v468[18] ) { if ( v500 <= 0 && v485 <= 0 ) { v91 = *(int **)(v16 + 4 * *a3 + 1216); v92 = v468; ++*a3; v93 = *v91; *(float *)v470 = *(float *)&v91; v94 = v92[18]; v95 = sub_40C190(-471008182); v96 = sub_7549E0("%s +%d", v95, v94); (*(void (__thiscall **)(_DWORD, char *))(v93 + 472))(*(_DWORD *)v470, v96); goto LABEL_188; } v97 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v98 = v500 + v485; v99 = v468[18]; v100 = sub_40C190(-471008182); v101 = sub_7549E0("%s +%d (+%d)", v100, v99, v98); (*(void (__thiscall **)(_DWORD, char *))(v97 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v101); if ( v485 <= 0 ) goto LABEL_187; v102 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } else { if ( v500 <= 0 && v485 <= 0 ) { LABEL_188: if ( v468[17] ) { if ( v499 <= 0 && v484 <= 0 ) { v107 = *(int **)(v16 + 4 * *a3 + 1216); v108 = v468; ++*a3; v109 = *v107; *(float *)v470 = *(float *)&v107; v110 = v108[17]; v111 = sub_40C190(-303301568); v112 = sub_7549E0("%s +%d", v111, v110); (*(void (__thiscall **)(_DWORD, char *))(v109 + 472))(*(_DWORD *)v470, v112); goto LABEL_200; } v113 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v114 = v499 + v484; v115 = v468[17]; v116 = sub_40C190(-303301568); v117 = sub_7549E0("%s +%d (+%d)", v116, v115, v114); (*(void (__thiscall **)(_DWORD, char *))(v113 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v117); if ( v484 <= 0 ) goto LABEL_199; v118 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } else { if ( v499 <= 0 && v484 <= 0 ) { LABEL_200: if ( v468[19] ) { if ( v501 <= 0 && v486 <= 0 ) { v123 = *(int **)(v16 + 4 * *a3 + 1216); v124 = v468; ++*a3; v125 = *v123; *(float *)v470 = *(float *)&v123; v126 = v124[19]; v127 = sub_40C190(-319685562); v128 = sub_7549E0("%s +%d", v127, v126); (*(void (__thiscall **)(_DWORD, char *))(v125 + 472))(*(_DWORD *)v470, v128); goto LABEL_212; } v129 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v130 = v501 + v486; v131 = v468[19]; v132 = sub_40C190(-319685562); v133 = sub_7549E0("%s +%d (+%d)", v132, v131, v130); (*(void (__thiscall **)(_DWORD, char *))(v129 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v133); if ( v486 <= 0 ) goto LABEL_211; v134 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } else { if ( v501 <= 0 && v486 <= 0 ) { LABEL_212: if ( v468[20] ) { if ( v502 <= 0 && v487 <= 0 ) { v139 = *(int **)(v16 + 4 * *a3 + 1216); v140 = v468; ++*a3; v141 = *v139; *(float *)v470 = *(float *)&v139; v142 = v140[20]; v143 = sub_40C190(-470418368); v144 = sub_7549E0("%s +%d", v143, v142); (*(void (__thiscall **)(_DWORD, char *))(v141 + 472))(*(_DWORD *)v470, v144); goto LABEL_224; } v145 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v146 = v502 + v487; v147 = v468[20]; v148 = sub_40C190(-470418368); v149 = sub_7549E0("%s +%d (+%d)", v148, v147, v146); (*(void (__thiscall **)(_DWORD, char *))(v145 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v149); if ( v487 > 0 ) { v150 = *(_DWORD *)(v16 + 4 * *a3 + 1216); LABEL_222: (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(*(_DWORD *)v150 + 464))( 255, 255, 0, 255); goto LABEL_223; } } else { if ( v502 <= 0 && !v487 ) { LABEL_224: v155 = *(_DWORD *)(v469 + 203); if ( v155 || v510 > 0 ) { *(float *)v470 = 0.0; v465 = 0.0; if ( v155 ) *(float *)v470 = (double)v155 / 10.0; if ( v510 > 0 ) v465 = (double)v510 / 10.0; if ( v155 ) { v156 = v510 == 0; if ( v510 > 0 ) { v157 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v158 = v465; v159 = *(float *)v470; v160 = (char *)sub_4090F0(-1376668233); v161 = sub_7549E0(v160, v159, v158); LABEL_287: (*(void (__thiscall **)(_DWORD, char *))(v157 + 472))( *(_DWORD *)(v16 + 4 * *a3 + 1216), v161); goto LABEL_237; } } else { v156 = v510 == 0; } if ( v156 ) { v157 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v177 = *(float *)v470; v178 = (char *)sub_40C190(776284804); v161 = sub_7549E0(v178, v177); goto LABEL_287; } v162 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v163 = v465; v164 = (char *)sub_4090F0(-1359891017); v165 = sub_7549E0(v164, v163); LABEL_236: (*(void (__thiscall **)(_DWORD, char *))(v162 + 472))( *(_DWORD *)(v16 + 4 * *a3 + 1216), v165); LABEL_237: ++*a3; goto LABEL_238; } goto LABEL_238; } v151 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v152 = v502 + v487; v153 = sub_40C190(-470418368); v154 = sub_7549E0("%s (+%d)", v153, v152); (*(void (__thiscall **)(_DWORD, char *))(v151 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v154); if ( v487 > 0 ) { v150 = *(_DWORD *)(v16 + 4 * *a3 + 1216); goto LABEL_222; } } LABEL_223: ++*a3; goto LABEL_224; } v135 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v136 = v501 + v486; v137 = sub_40C190(-319685562); v138 = sub_7549E0("%s (+%d)", v137, v136); (*(void (__thiscall **)(_DWORD, char *))(v135 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v138); if ( v486 <= 0 ) { LABEL_211: ++*a3; goto LABEL_212; } v134 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(*(_DWORD *)v134 + 464))( 255, 255, 0, 255); goto LABEL_211; } v119 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v120 = v499 + v484; v121 = sub_40C190(-303301568); v122 = sub_7549E0("%s (+%d)", v121, v120); (*(void (__thiscall **)(_DWORD, char *))(v119 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v122); if ( v484 <= 0 ) { LABEL_199: ++*a3; goto LABEL_200; } v118 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(*(_DWORD *)v118 + 464))( 255, 255, 0, 255); goto LABEL_199; } v103 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v104 = v500 + v485; v105 = sub_40C190(-471008182); v106 = sub_7549E0("%s (+%d)", v105, v104); (*(void (__thiscall **)(_DWORD, char *))(v103 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v106); if ( v485 <= 0 ) { LABEL_187: ++*a3; goto LABEL_188; } v102 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(*(_DWORD *)v102 + 464))(255, 255, 0, 255); goto LABEL_187; } v87 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v88 = v483 + v498; v89 = sub_40C190(-218366908); v90 = sub_7549E0("%s (+%d)", v89, v88); (*(void (__thiscall **)(_DWORD, char *))(v87 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v90); if ( v483 <= 0 ) { LABEL_175: ++*a3; goto LABEL_176; } v86 = *(_DWORD *)(v16 + 4 * *a3 + 1216); } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(*(_DWORD *)v86 + 464))(255, 255, 0, 255); goto LABEL_175; } if ( v498 > 0 ) { if ( v483 <= 0 ) { LABEL_256: v179 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v180 = v483 + v498; v181 = sub_40C190(-218366908); v182 = sub_7549E0("%s (+%d)", v181, v180); (*(void (__thiscall **)(_DWORD, char *))(v179 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v182); ++*a3; LABEL_257: if ( v500 > 0 ) { if ( v485 <= 0 ) { LABEL_262: v183 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v184 = v500 + v485; v185 = sub_40C190(-471008182); v186 = sub_7549E0("%s (+%d)", v185, v184); (*(void (__thiscall **)(_DWORD, char *))(v183 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v186); ++*a3; LABEL_263: if ( v499 > 0 ) { if ( v484 <= 0 ) { LABEL_268: v187 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v188 = v499 + v484; v189 = sub_40C190(-303301568); v190 = sub_7549E0("%s (+%d)", v189, v188); (*(void (__thiscall **)(_DWORD, char *))(v187 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v190); ++*a3; LABEL_269: if ( v501 > 0 ) { if ( v486 <= 0 ) { LABEL_274: v191 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v192 = v501 + v486; v193 = sub_40C190(-319685562); v194 = sub_7549E0("%s (+%d)", v193, v192); (*(void (__thiscall **)(_DWORD, char *))(v191 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v194); ++*a3; LABEL_275: if ( v502 > 0 ) { if ( v487 <= 0 ) { LABEL_280: v195 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v196 = v502 + v487; v197 = sub_40C190(-470418368); v198 = sub_7549E0("%s (+%d)", v197, v196); (*(void (__thiscall **)(_DWORD, char *))(v195 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v198); ++*a3; LABEL_281: if ( v506 > 0 ) { if ( v491 <= 0 ) { LABEL_286: v157 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v199 = v506 + v491; v200 = sub_40C190(-470418368); v161 = sub_7549E0("%s (+%d)", v200, v199); goto LABEL_287; } } else if ( v491 <= 0 ) { goto LABEL_238; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_286; } } else if ( v487 <= 0 ) { goto LABEL_281; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_280; } } else if ( v486 <= 0 ) { goto LABEL_275; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_274; } } else if ( v484 <= 0 ) { goto LABEL_269; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_268; } } else if ( v485 <= 0 ) { goto LABEL_263; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_262; } } else if ( v483 <= 0 ) { goto LABEL_257; } (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 464))( 255, 255, 0, 255); goto LABEL_256; } if ( *(float *)&v69 == 0.0 ) { if ( v498 > 0 ) { v255 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v256 = v498; v257 = sub_40C190(-218366908); v258 = sub_7549E0("%s (+%d)", v257, v256); (*(void (__thiscall **)(_DWORD, char *))(v255 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v258); ++*a3; } if ( v500 > 0 ) { v259 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v260 = v500; v261 = sub_40C190(-471008182); v262 = sub_7549E0("%s (+%d)", v261, v260); (*(void (__thiscall **)(_DWORD, char *))(v259 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v262); ++*a3; } if ( v499 > 0 ) { v263 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v264 = v499; v265 = sub_40C190(-303301568); v266 = sub_7549E0("%s (+%d)", v265, v264); (*(void (__thiscall **)(_DWORD, char *))(v263 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v266); ++*a3; } if ( v501 > 0 ) { v267 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v268 = v501; v269 = sub_40C190(-319685562); v270 = sub_7549E0("%s (+%d)", v269, v268); (*(void (__thiscall **)(_DWORD, char *))(v267 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v270); ++*a3; } if ( v502 > 0 ) { v271 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v272 = v502; v273 = sub_40C190(-470418368); v274 = sub_7549E0("%s (+%d)", v273, v272); (*(void (__thiscall **)(_DWORD, char *))(v271 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v274); ++*a3; } goto LABEL_338; } v201 = v69[16]; if ( (_WORD)v201 ) { if ( v498 <= 0 ) { v202 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v207 = v201; v208 = sub_40C190(-218366908); v206 = sub_7549E0("%s +%d", v208, v207); } else { v202 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v203 = v498; v204 = v201; v205 = sub_40C190(-218366908); v206 = sub_7549E0("%s +%d (+%d)", v205, v204, v203); } (*(void (__thiscall **)(_DWORD, char *))(v202 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v206); } else { if ( v498 <= 0 ) goto LABEL_297; v209 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v210 = v498; v211 = sub_40C190(-218366908); v212 = sub_7549E0("%s (+%d)", v211, v210); (*(void (__thiscall **)(_DWORD, char *))(v209 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v212); } ++*a3; LABEL_297: if ( v468[18] ) { if ( v500 <= 0 ) { v213 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v218 = v468[18]; v219 = sub_40C190(-471008182); v217 = sub_7549E0("%s +%d", v219, v218); } else { v213 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v214 = v500; v215 = v468[18]; v216 = sub_40C190(-471008182); v217 = sub_7549E0("%s +%d (+%d)", v216, v215, v214); } (*(void (__thiscall **)(_DWORD, char *))(v213 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v217); } else { if ( v500 <= 0 ) goto LABEL_305; v220 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v221 = v500; v222 = sub_40C190(-471008182); v223 = sub_7549E0("%s (+%d)", v222, v221); (*(void (__thiscall **)(_DWORD, char *))(v220 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v223); } ++*a3; LABEL_305: if ( v468[17] ) { if ( v499 <= 0 ) { v224 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v229 = v468[17]; v230 = sub_40C190(-303301568); v228 = sub_7549E0("%s +%d", v230, v229); } else { v224 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v225 = v499; v226 = v468[17]; v227 = sub_40C190(-303301568); v228 = sub_7549E0("%s +%d (+%d)", v227, v226, v225); } (*(void (__thiscall **)(_DWORD, char *))(v224 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v228); } else { if ( v499 <= 0 ) goto LABEL_313; v231 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v232 = v499; v233 = sub_40C190(-303301568); v234 = sub_7549E0("%s (+%d)", v233, v232); (*(void (__thiscall **)(_DWORD, char *))(v231 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v234); } ++*a3; LABEL_313: if ( v468[19] ) { if ( v501 <= 0 ) { v235 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v240 = v468[19]; v241 = sub_40C190(-319685562); v239 = sub_7549E0("%s +%d", v241, v240); } else { v235 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v236 = v501; v237 = v468[19]; v238 = sub_40C190(-319685562); v239 = sub_7549E0("%s +%d (+%d)", v238, v237, v236); } (*(void (__thiscall **)(_DWORD, char *))(v235 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v239); } else { if ( v501 <= 0 ) goto LABEL_321; v242 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v243 = v501; v244 = sub_40C190(-319685562); v245 = sub_7549E0("%s (+%d)", v244, v243); (*(void (__thiscall **)(_DWORD, char *))(v242 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v245); } ++*a3; LABEL_321: if ( v468[20] ) { if ( v502 <= 0 ) { v246 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v251 = v468[20]; v252 = sub_40C190(-470418368); v250 = sub_7549E0("%s +%d", v252, v251); } else { v246 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v247 = v502; v248 = v468[20]; v249 = sub_40C190(-470418368); v250 = sub_7549E0("%s +%d (+%d)", v249, v248, v247); } (*(void (__thiscall **)(_DWORD, char *))(v246 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v250); goto LABEL_237; } if ( v502 > 0 ) { v162 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v253 = v502; v254 = sub_40C190(-470418368); v165 = sub_7549E0("%s (+%d)", v254, v253); goto LABEL_236; } LABEL_238: v166 = v468; if ( *(float *)&v468 != 0.0 ) { if ( v468[21] ) { v167 = v468[21] / 10; v168 = sub_40C190(1755571175); sprintf(&v513, v168, v167); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } if ( v166[22] ) { v169 = (signed int)(1717986919 * (unsigned __int64)v166[22] >> 32) >> 2; v170 = v169 + (v169 >> 31); v171 = sub_40C190(1927597265); sprintf(&v513, v171, v170); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } if ( v166[23] ) { v172 = v166[23] / 10; v173 = sub_40C190(1923259344); sprintf(&v513, v173, v172); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v174 = v468[27]; v175 = v497; v176 = v497 + v512; if ( !(_WORD)v174 ) { if ( !v176 ) { LABEL_356: if ( !v468[28] ) goto LABEL_341; sprintf(&v513, "MaxSP : +%i", v468[28]); v275 = *(_DWORD *)(v16 + 4 * *a3 + 1216); goto LABEL_340; } goto LABEL_351; } if ( v176 ) { sprintf(&v513, "MaxHP : +%i (+%d)", v174, v497 + v512); } else { if ( !(_WORD)v174 ) { LABEL_351: if ( v176 ) sprintf(&v513, "MaxHP : (+%d)", v497 + v512); goto LABEL_353; } sprintf(&v513, "MaxHP : +%i", v468[27]); } LABEL_353: if ( v175 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_356; } LABEL_338: if ( v512 > 0 ) { sprintf(&v513, "MaxHP : (+%d)", v512); v275 = *(_DWORD *)(v16 + 4 * *a3 + 1216); LABEL_340: (*(void (__stdcall **)(char *))(*(_DWORD *)v275 + 472))(&v513); ++*a3; } LABEL_341: if ( *(_DWORD *)(v469 + 139) || v505 || v490 || *(float *)&v468 != 0.0 && v468[29] != (_WORD)v490 ) { v276 = v456; goto LABEL_359; } v276 = v456; if ( v456 || v460 != v456 ) { LABEL_359: v277 = 0; if ( v276 || v460 ) v277 = v276 + v460; if ( v490 ) v277 += v490; if ( v277 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); if ( v505 ) v277 += v505; if ( *(_DWORD *)(v469 + 102) == 4 ) { v278 = v468[29]; if ( !v278 ) goto LABEL_605; if ( v277 > 0 ) { v447 = v277; v444 = v468[29]; v279 = sub_4090F0(-201194973); LABEL_381: sprintf(&v513, v279, v444, v447); goto LABEL_384; } if ( !v278 ) { LABEL_605: if ( v277 ) { v282 = sub_4090F0(-201142237); sprintf(&v513, v282, v277); } goto LABEL_384; } v280 = v468[29]; v281 = sub_4090F0(-201195229); sprintf(&v513, v281, v280); LABEL_384: (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_385; } v283 = *(_DWORD *)(v469 + 139); if ( v283 ) { if ( v277 > 0 ) { v284 = *(_DWORD *)(v469 + 139); v285 = *(_DWORD *)(v469 + 135); v286 = sub_40C190(490884182); sprintf(&v513, v286, v285, v284, v277); goto LABEL_384; } if ( v283 ) { v447 = *(_DWORD *)(v469 + 139); v444 = *(_DWORD *)(v469 + 135); v279 = sub_40C190(507661398); goto LABEL_381; } } if ( v277 ) { v287 = sub_4090F0(-201142237); sprintf(&v513, v287, v277); } goto LABEL_384; } LABEL_385: if ( *(_DWORD *)(v469 + 143) || v506 || v491 ) { v288 = v455; goto LABEL_392; } v288 = v455; if ( v455 || v461 != v455 ) { LABEL_392: v289 = 0; if ( v288 || v461 ) v289 = v288 + v461; if ( v491 ) v289 += v491; if ( v289 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); if ( v506 ) v289 += v506; v290 = *(_DWORD *)(v469 + 143); if ( v290 ) { if ( v289 > 0 ) { v291 = *(_DWORD *)(v469 + 143); v292 = sub_40C190(239422536); sprintf(&v513, v292, v291, v289); LABEL_407: (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_408; } if ( v290 ) { v293 = *(_DWORD *)(v469 + 143); v294 = sub_40C190(256199752); sprintf(&v513, v294, v293); goto LABEL_407; } } v295 = sub_4090F0(-185286362); sprintf(&v513, v295, v289); goto LABEL_407; } LABEL_408: if ( *(_DWORD *)(v469 + 151) || v507 || v492 || *(float *)&v468 != 0.0 && v468[30] != (_WORD)v492 ) { v296 = v458; goto LABEL_417; } v296 = v458; if ( v458 || v460 != v458 ) { LABEL_417: v297 = 0; if ( v296 || v460 ) v297 = v296 + v460; if ( v492 ) v297 += v492; if ( v297 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); if ( v507 ) v297 += v507; if ( *(_DWORD *)(v469 + 102) == 4 ) { v298 = v468[30]; if ( !v298 ) goto LABEL_606; if ( v297 > 0 ) { v448 = v297; v445 = v468[30]; v299 = sub_4090F0(440406567); LABEL_441: sprintf(&v513, v299, v445, v448); goto LABEL_444; } if ( !v298 ) { LABEL_606: if ( *(_DWORD *)(v469 + 151) ) { v302 = *(_DWORD *)(v469 + 151); v303 = *(_DWORD *)(v469 + 147); v304 = sub_40C190(776368788); sprintf(&v513, v304, v303, v302); } else if ( v297 ) { v305 = sub_4090F0(-398454233); sprintf(&v513, v305, v297); } goto LABEL_444; } v300 = v468[30]; v301 = sub_4090F0(423629351); sprintf(&v513, v301, v300); LABEL_444: (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_445; } v306 = *(_DWORD *)(v469 + 151); if ( v306 ) { if ( v297 > 0 ) { v307 = *(_DWORD *)(v469 + 151); v308 = *(_DWORD *)(v469 + 147); v309 = sub_40C190(776368532); sprintf(&v513, v309, v308, v307, v297); goto LABEL_444; } if ( v306 ) { v448 = *(_DWORD *)(v469 + 151); v445 = *(_DWORD *)(v469 + 147); v299 = sub_40C190(776368788); goto LABEL_441; } } if ( v297 ) { v310 = sub_4090F0(-398454233); sprintf(&v513, v310, v297); } goto LABEL_444; } LABEL_445: v311 = v462; if ( v462 != 0.0 ) { *(float *)v470 = v462; if ( v489 ) { LODWORD(v311) = v489 + LODWORD(v462); *(_DWORD *)v470 = v489 + LODWORD(v462); } if ( v311 != 0.0 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); if ( v504 ) { LODWORD(v311) += v504; *(float *)v470 = v311; } v156 = *(_DWORD *)(v469 + 102) == 4; *(float *)v470 = (double)*(signed int *)v470 / 1000.0; if ( v156 ) { if ( v311 != 0.0 ) { v312 = *(float *)v470; v313 = sub_40A910(-119418585); sprintf(&v513, v313, v312); v314 = *(_DWORD *)(v16 + 4 * *a3 + 1216); LABEL_457: (*(void (__stdcall **)(char *))(*(_DWORD *)v314 + 472))(&v513); ++*a3; goto LABEL_458; } } else if ( v311 != 0.0 ) { v315 = *(float *)v470; v316 = sub_40A910(-119418585); sprintf(&v513, v316, v315); v314 = *(_DWORD *)(v16 + 4 * *a3 + 1216); goto LABEL_457; } } LABEL_458: if ( *(_DWORD *)(v469 + 155) || v508 || v493 ) { v317 = v459; goto LABEL_465; } v317 = v459; if ( v459 || v461 != v459 ) { LABEL_465: v318 = 0; if ( v317 || v461 ) v318 = v317 + v461; if ( v493 ) v318 += v493; if ( v318 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); if ( v508 ) v318 += v508; v319 = *(_DWORD *)(v469 + 155); if ( v319 ) { if ( v318 > 0 ) { v320 = *(_DWORD *)(v469 + 155); v321 = sub_40C190(2127092452); sprintf(&v513, v321, v320, v318); LABEL_480: (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_481; } if ( v319 ) { v322 = *(_DWORD *)(v469 + 155); v323 = sub_40C190(2127157988); sprintf(&v513, v323, v322); goto LABEL_480; } } v324 = sub_4090F0(-2104466824); sprintf(&v513, v324, v318); goto LABEL_480; } LABEL_481: v325 = *(_DWORD *)(v469 + 167); if ( v325 && v325 > 0x3E8 ) { v326 = v325 - 1000; if ( v325 == 1000 ) v326 = 1; v327 = v326 / 0xA; v328 = sub_40C190(813935514); sprintf(&v513, v328, v327); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v329 = *(_DWORD *)(v469 + 175); if ( v329 && v329 > 0x3E8 ) { v330 = v329 - 1000; if ( !v330 ) v330 = 1; v331 = v330 / 0xA; v332 = sub_40C190(562473868); sprintf(&v513, v332, v331); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v333 = *(_DWORD *)(v469 + 171); if ( v333 && v333 > 0x3E8 ) { v334 = v333 - 1000; if ( !v334 ) v334 = 1; v335 = v334 / 0xA; v336 = sub_40C190(1921490904); sprintf(&v513, v336, v335); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v337 = *(_DWORD *)(v469 + 179); if ( v337 && v337 > 0x3E8 ) { v338 = v337 - 1000; if ( !v338 ) v338 = 1; v339 = v338 / 0xA; v340 = sub_40C190(-1026016984); sprintf(&v513, v340, v339); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v341 = v488; v342 = *(_DWORD *)(v469 + 159); v343 = v488 + v503; if ( !v342 ) { if ( !v343 ) goto LABEL_513; goto LABEL_508; } if ( v343 ) { v344 = v488 + v503; v345 = *(_DWORD *)(v469 + 159); v346 = sub_4090F0(-184568053); sprintf(&v513, v346, v345, v344); } else { if ( !v342 ) { LABEL_508: if ( v343 ) { v349 = v488 + v503; v350 = sub_4090F0(-184568052); sprintf(&v513, v350, v349); } goto LABEL_510; } v347 = *(_DWORD *)(v469 + 159); v348 = sub_40C190(-738636717); sprintf(&v513, v348, v347); } LABEL_510: if ( v341 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; LABEL_513: if ( *(float *)&v468 != 0.0 ) { v351 = v468[25]; if ( (_WORD)v351 ) { v352 = (v351 - 1000) / 10; if ( v352 > 0 ) { v353 = v352; v354 = sub_40C190(557287063); sprintf(&v513, v354, v353); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } } } v355 = v494; v356 = *(_DWORD *)(v469 + 163); v357 = v494 + v509; if ( !v356 ) { if ( !v357 ) goto LABEL_529; goto LABEL_524; } if ( v357 ) { v358 = v494 + v509; v359 = *(_DWORD *)(v469 + 163); v360 = sub_4090F0(-634837223); sprintf(&v513, v360, v359, v358); } else { if ( !v356 ) { LABEL_524: if ( v357 ) { v363 = v494 + v509; v364 = sub_4090F0(-634771687); sprintf(&v513, v364, v363); } goto LABEL_526; } v361 = *(_DWORD *)(v469 + 163); v362 = sub_40C190(1127756364); sprintf(&v513, v362, v361); } LABEL_526: if ( v355 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; LABEL_529: if ( *(float *)&v468 != 0.0 ) { v365 = v468[26]; if ( (_WORD)v365 ) { v366 = (v365 - 1000) / 10; if ( v366 > 0 ) { v367 = v366; v368 = sub_40C190(1719304602); sprintf(&v513, v368, v367); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } } } v369 = *(_DWORD *)(v469 + 250); if ( v369 ) { if ( v457 ) { v370 = v457 / 10; v371 = v369 / 0xA; v372 = sub_40C190(457388420); sprintf(&v513, v372, v371, v370); (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); } else { v373 = v369 / 0xA; v374 = sub_40C190(457388421); sprintf(&v513, v374, v373); } (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } v375 = *(_DWORD *)(v469 + 183); v465 = 0.0; *(float *)v470 = 0.0; *(float *)&v468 = 0.0; if ( v375 ) { v376 = 10.0; v465 = (double)v375 / 10.0; } else { v376 = 10.0; } if ( v453 ) *(float *)v470 = (double)v453 / v376; if ( v504 ) *(float *)&v468 = (double)v504 / v376; *(double *)&v377 = v465; v378 = *(float *)v470; v379 = *(float *)&v468; if ( v465 > 0.0 ) goto LABEL_549; if ( v379 + v378 > 0.0 ) { if ( v465 <= 0.0 ) { v382 = v379 + v378; goto LABEL_555; } *(double *)&v377 = v465; LABEL_549: v380 = v378 + *(float *)&v468; if ( v380 > 0.0 ) { v381 = sub_4090F0(-768732634); sprintf( &v513, v381, (_DWORD)v377, (_DWORD)(v377 >> 32), LODWORD(v380), (_DWORD)(*(unsigned __int64 *)&v380 >> 32)); if ( *(float *)v470 > 0.0 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); goto LABEL_556; } v382 = v380; if ( *(double *)&v377 > 0.0 ) { v383 = sub_40C190(776284803); sprintf(&v513, v383, (_DWORD)v377, (_DWORD)(v377 >> 32)); LABEL_556: (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; goto LABEL_557; } LABEL_555: v384 = sub_4090F0(-768667098); sprintf(&v513, v384, LODWORD(v382), (_DWORD)(*(unsigned __int64 *)&v382 >> 32)); goto LABEL_556; } LABEL_557: v385 = *(_DWORD *)(v469 + 203); if ( !v385 && v510 <= 0 ) goto LABEL_572; v465 = 0.0; *(float *)v470 = 0.0; if ( v385 ) v465 = (double)v385 / 10.0; if ( v510 > 0 ) *(float *)v470 = (double)v510 / 10.0; if ( v385 ) { v386 = v510 == 0; if ( v510 > 0 ) { v387 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v388 = *(float *)v470; v389 = v465; v390 = (char *)sub_4090F0(-1376668233); v391 = sub_7549E0(v390, v389, v388); LABEL_570: (*(void (__thiscall **)(_DWORD, char *))(v387 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v391); goto LABEL_571; } } else { v386 = v510 == 0; } if ( v386 ) { v387 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v396 = v465; v397 = (char *)sub_40C190(776284804); v391 = sub_7549E0(v397, v396); goto LABEL_570; } v392 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v393 = *(float *)v470; v394 = (char *)sub_4090F0(-1359891017); v395 = sub_7549E0(v394, v393); (*(void (__thiscall **)(_DWORD, char *))(v392 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v395); LABEL_571: ++*a3; LABEL_572: if ( *(_DWORD *)(v469 + 102) == 5 ) { *(float *)v470 = (double)*(unsigned int *)(v469 + 123) / 1000.0; v398 = *(float *)v470; v399 = sub_40C190(1061496633); sprintf(&v513, v399, v398); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); ++*a3; } if ( !*((_BYTE *)v464 + 16) && *(_DWORD *)(v469 + 102) == 26 ) { v400 = (*(int (**)(void))(*v467 + 76))(); v401 = (*(int (**)(void))(*v467 + 84))(); v402 = sub_40A910(-636231626); sprintf(&v513, v402, v400, v401); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); ++*a3; } if ( !*((_BYTE *)v464 + 16) && *(_DWORD *)(v469 + 102) == 37 ) { v403 = (*(int (**)(void))(*v467 + 76))(); v404 = (*(int (**)(void))(*v467 + 84))(); v405 = sub_40A910(-636231626); sprintf(&v513, v405, v403, v404); (*(void (__stdcall **)(char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))(&v513); (*(void (__stdcall **)(int *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 468))(&dword_AA8CB8); ++*a3; } if ( *(_DWORD *)(v469 + 102) == 30 ) { *(float *)v470 = COERCE_FLOAT((*(int (**)(void))(*v467 + 68))()); v406 = *(_DWORD *)(dword_ACD9F0 + 56); v464 = (float *)(v406 ? *(_DWORD *)(v406 + 40) : 0); v407 = 0; if ( v464 ) { v408 = v464; while ( 1 ) { v409 = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9F0 + 4), v407); if ( v409 ) { if ( *v409 == *(_DWORD *)v470 ) break; } if ( ++v407 >= (unsigned int)v408 ) { v16 = (int)v454; goto LABEL_591; } } v16 = (int)v454; v410 = *v454[*a3 + 304]; v411 = (int)(v409 + 1); v412 = (char *)sub_40A910(440694381); v413 = sub_7549E0(v412, v411); (*(void (__thiscall **)(_DWORD, char *))(v410 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v413); ++*a3; } } LABEL_591: if ( *(_DWORD *)(v469 + 102) == 31 ) { v414 = (CHAR *)sub_40A910(-12361620); v479[0] = 15; v478 = 0; v476[0] = 0; sub_4018E0(v476, v414, strlen(v414)); v514 = 2; v415 = (CHAR *)sub_40A910(-12366228); v482 = 15; v481 = 0; v480 = 0; sub_4018E0(&v480, v415, strlen(v415)); LOBYTE(v514) = 3; v416 = (CHAR *)sub_40A910(-12365972); v489 = 15; v488 = 0; LOBYTE(v484) = 0; sub_4018E0(&v484, v416, strlen(v416)); LOBYTE(v514) = 4; v417 = (CHAR *)sub_40A910(-12365716); v496 = 15; v495 = 0; LOBYTE(v491) = 0; sub_4018E0(&v491, v417, strlen(v417)); v418 = *(int (**)(void))(*v467 + 56); v514 = 5; v419 = v418(); v420 = v419 % 0x2710; v464 = (float *)(v419 / 0xF4240); *(_DWORD *)v470 = (v419 % 0xF4240 - v419 % 0x2710) / 0x2710; v466 = v419 / 0xF4240 + 64; v421 = (__int16 *)sub_4DCD20((char *)HIDWORD(v450)); v464 = (float *)v421; if ( v421 ) { v422 = sub_4DCDC0(*v421); if ( v422 ) { v423 = &v476[28 * *(_DWORD *)((char *)v464 + 34)]; if ( (unsigned int)v479[7 * *(_DWORD *)((char *)v464 + 34)] >= 0x10 ) v423 = *(char **)v423; v424 = *(char **)v470; v425 = v466; v426 = v423; v427 = *((unsigned __int8 *)v422 + 386); v428 = (char *)sub_40A910(1939918011); v429 = sub_7549E0(v428, v427, v426, v425, v424, v420); v430 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v431 = v429; v432 = (char *)sub_40A910(412709466); v433 = sub_7549E0(v432, v431); (*(void (__thiscall **)(_DWORD, char *))(v430 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v433); ++*a3; } } v434 = **(_DWORD **)(v16 + 4 * *a3 + 1216); v435 = (*(int (**)(void))(*v467 + 64))(); v436 = (char *)sub_40A910(205927018); v437 = sub_7549E0(v436, v435); (*(void (__thiscall **)(_DWORD, char *))(v434 + 472))(*(_DWORD *)(v16 + 4 * *a3 + 1216), v437); ++*a3; v514 = -1; `eh vector destructor iterator'(v476, 0x1Cu, 4, sub_636A10); } result = (float *)(*(int (**)(void))(**(_DWORD **)(v16 + 4 * *a3 + 1212) + 484))(); if ( result && *a3 > 0 ) { result = (float *)strcmp((const char *)result, " "); if ( result ) { result = (float *)(*(int (__thiscall **)(_DWORD, const char *))(**(_DWORD **)(v16 + 4 * *a3 + 1216) + 472))( *(_DWORD *)(v16 + 4 * *a3 + 1216), " "); ++*a3; } } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AA8CB8: using guessed type int dword_AA8CB8; // ACD9F0: using guessed type int dword_ACD9F0; // 541FC0: using guessed type int var_1A8[2]; // 541FC0: using guessed type char var_1BC[8]; //----- (005452F0) -------------------------------------------------------- void __thiscall sub_5452F0(_DWORD **this, unsigned __int16 *a2, int a3, __int64 a4, _DWORD *a5, int a6) { _DWORD **v6; // esi int v7; // ebx int v8; // edx unsigned __int8 (__thiscall *v9)(int, int); // eax int v10; // eax int *v11; // eax int v12; // eax char v13; // bl int v14; // ebx const CHAR *v15; // eax int v16; // ebx __int16 *v17; // eax int v18; // eax int v19; // ecx int v20; // eax CHAR *v21; // edx CHAR v22; // cl LONG v23; // eax int v24; // ebx const CHAR *v25; // eax int v26; // eax CHAR *v27; // ecx CHAR v28; // dl _DWORD *v29; // ebx int v30; // eax CHAR *v31; // edx CHAR v32; // cl char v33; // cl int v34; // edx LONG v35; // eax int v36; // eax char v37; // ST14_1 _DWORD *v38; // ecx const CHAR *v39; // eax int v40; // ebx char v41; // ST14_1 _DWORD *v42; // esi const char *v43; // [esp-8h] [ebp-134h] unsigned __int16 *v44; // [esp+Ch] [ebp-120h] struct tagSIZE psizl; // [esp+10h] [ebp-11Ch] int v46; // [esp+18h] [ebp-114h] _DWORD *v47; // [esp+1Ch] [ebp-110h] char v48; // [esp+23h] [ebp-109h] int v49; // [esp+24h] [ebp-108h] CHAR String[256]; // [esp+28h] [ebp-104h] v6 = this; if ( *a5 < 80 ) { v47 = (_DWORD *)(*(int (**)(void))(*this[304] + 456))(); v7 = dword_ACDA70; v8 = *(_DWORD *)dword_ACDA70; v46 = *a2; v9 = *(unsigned __int8 (__thiscall **)(int, int))(v8 + 16); LOBYTE(v49) = 1; v48 = 0; if ( v9(dword_ACDA70, v46) ) { if ( (unsigned __int16)v46 <= *(_WORD *)(v7 + 200) ) { v11 = (int *)(*(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v46); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } v12 = sub_549060((const char *)(v10 + 2)); v46 = v12; v44 = 0; if ( v12 ) { v13 = 1; v44 = (unsigned __int16 *)sub_4F4810((const char *)(v12 + 32)); } else { v13 = v48; } (*(void (__stdcall **)(_DWORD))(*v6[407] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v6[409] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v6[410] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v6[408] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v6[411] + 256))(0); if ( v13 ) { if ( a6 == 2 ) { sub_53DCC0(v6); v14 = *v6[*a5 + 304]; v15 = sub_4090F0(271982383); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v14 + 472))(v6[*a5 + 304], v15); v16 = v46; v17 = (__int16 *)sub_40C8D0((void *)(v46 + 32)); v18 = sub_685590(&byte_ADA230, *v17); v19 = *(unsigned __int16 *)(v46 + 64); LOBYTE(v49) = 1; if ( v19 > v18 ) { (*(void (__stdcall **)(int *))(*v6[*a5 + 304] + 468))(&dword_AA8C88); LOBYTE(v49) = 0; } v20 = (*(int (**)(void))(*v6[*a5 + 304] + 484))(); v21 = &String[-v20]; do { v22 = *(_BYTE *)v20; v21[v20] = *(_BYTE *)v20; ++v20; } while ( v22 ); sub_4593C0(v47, String, strlen(String), &psizl); v23 = psizl.cx; v6[412] = (_DWORD *)((char *)v6[412] + psizl.cx); if ( a3 > 0 ) { sub_540C70(v6, v16, (int)a5, v23 + 5, (int)v6[88] + *a5 * ((_DWORD)v6[403] + 2), a3, v44, v16, v49); *a5 += 2; (*(void (__stdcall **)(const char *))(*v6[*a5 + 304] + 472))(" "); v24 = *v6[*a5 + 304]; v25 = sub_4090F0(724182138); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v24 + 472))(v6[*a5 + 304], v25); v26 = (*(int (**)(void))(*v6[*a5 + 304] + 484))(); v27 = &String[-v26]; do { v28 = *(_BYTE *)v26; v27[v26] = *(_BYTE *)v26; ++v26; } while ( v28 ); v29 = v47; sub_4593C0(v47, String, strlen(String), &psizl); v6[412] = (_DWORD *)((char *)v6[412] + psizl.cx); if ( !(_BYTE)v49 ) (*(void (__stdcall **)(int *))(*v6[*a5 + 304] + 468))(&dword_AA8C88); v30 = (*(int (**)(void))(*v6[*a5 + 304] + 484))(); v31 = &String[-v30]; do { v32 = *(_BYTE *)v30; v31[v30] = *(_BYTE *)v30; ++v30; } while ( v32 ); sub_4593C0(v29, String, strlen(String), &psizl); v33 = v49; v34 = v46; v35 = psizl.cx; v6[412] = (_DWORD *)((char *)v6[412] + psizl.cx); sub_540F10(v6, v35 + 5, (int)v6[88] + *a5 * ((_DWORD)v6[403] + 2), a3, v44, v34, v33); } LABEL_42: v42 = v6[++*a5 + 304]; (*(void (__thiscall **)(_DWORD *, const char *))(*v42 + 472))(v42, " "); return; } } else if ( a6 == 2 ) { goto LABEL_29; } if ( a6 != 3 ) { (*(void (__stdcall **)(int *))(*v6[*a5 + 304] + 468))(&dword_AA8C68); LABEL_31: if ( a3 > 0 ) { if ( a6 ) v43 = sub_40C190(-1734148866); else v43 = sub_40C190(814326164); sprintf(String, v43, a3); if ( !(_BYTE)v49 ) (*(void (__stdcall **)(int *))(*v6[*a5 + 304] + 468))(&dword_AA8C88); (*(void (__stdcall **)(CHAR *))(*v6[*a5 + 304] + 472))(String); ++*a5; sub_4593C0(v47, String, strlen(String), &psizl); v36 = (int)v6[89] + psizl.cx; v37 = v49; v38 = v6[403]; v6[302] = (_DWORD *)v36; sub_53E5A0(v6, v36 + 7, (int)v6[88] + (*a5 - 1) * ((_DWORD)v38 + 2), a4, v37); } (*(void (__stdcall **)(const char *))(*v6[++*a5 + 304] + 472))(" "); if ( a3 > 0 ) { v39 = sub_40C190(-1632458504); sprintf(String, "%s", v39); if ( !(_BYTE)v49 ) (*(void (__stdcall **)(int *))(*v6[*a5 + 304] + 468))(&dword_AA8C88); (*(void (__stdcall **)(CHAR *))(*v6[*a5 + 304] + 472))(String); sub_4593C0(v47, String, strlen(String), &psizl); v40 = (int)v6[89] + psizl.cx; v41 = v49; v6[303] = (_DWORD *)v40; sub_53EA50(v6, v40 + 7, (int)v6[88] + *a5 * ((_DWORD)v6[403] + 2), a3 * a4, v41); } goto LABEL_42; } LABEL_29: if ( sub_680E60(byte_AD9238) < a4 ) LOBYTE(v49) = 0; goto LABEL_31; } } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACDA70: using guessed type int dword_ACDA70; // ADA230: using guessed type char byte_ADA230; // 5452F0: using guessed type CHAR String[256]; //----- (00545900) -------------------------------------------------------- void __thiscall sub_545900(_DWORD **this, int a2, _DWORD *a3) { int v3; // eax int v4; // esi _DWORD *v5; // edi void *v6; // eax int v7; // eax int v8; // edi int v9; // edx _DWORD *v10; // esi int v11; // eax int v12; // ecx char *v13; // eax void *v14; // eax char *v15; // eax char *v16; // eax void *v17; // [esp-1Ch] [ebp-98h] int v18; // [esp-18h] [ebp-94h] int v19; // [esp-14h] [ebp-90h] int v20; // [esp-10h] [ebp-8Ch] int v21; // [esp-Ch] [ebp-88h] _DWORD *v22; // [esp-8h] [ebp-84h] char *v23; // [esp-4h] [ebp-80h] int v24; // [esp+10h] [ebp-6Ch] void **v25; // [esp+14h] [ebp-68h] void *v26; // [esp+18h] [ebp-64h] int v27; // [esp+1Ch] [ebp-60h] int v28; // [esp+20h] [ebp-5Ch] _DWORD *v29; // [esp+28h] [ebp-54h] _DWORD **v30; // [esp+2Ch] [ebp-50h] int v31; // [esp+30h] [ebp-4Ch] void *v32; // [esp+34h] [ebp-48h] unsigned int v33; // [esp+44h] [ebp-38h] unsigned int v34; // [esp+48h] [ebp-34h] char v35; // [esp+50h] [ebp-2Ch] void *v36; // [esp+5Ch] [ebp-20h] unsigned int v37; // [esp+60h] [ebp-1Ch] int v38; // [esp+64h] [ebp-18h] int v39; // [esp+78h] [ebp-4h] v30 = this; v29 = a3; if ( a2 ) { v3 = *(_DWORD *)(a2 + 112); if ( v3 ) { v22 = (_DWORD *)15; v21 = 0; v25 = &v17; LOBYTE(v17) = 0; sub_4018E0(&v17, (void *)(v3 + 2), strlen((const char *)(v3 + 2))); v4 = sub_549220(v17, v18, v19, v20, v21, (int)v22); if ( v4 ) { v5 = v29; if ( *v29 > 0 ) { v6 = (void *)(*(int (**)(void))(*v30[*v29 + 303] + 484))(); sub_4019E0(&v35, v6); v39 = 0; if ( v37 > 0 && sub_438C50((int)&v35, " ") ) { (*(void (__stdcall **)(const char *))(*v30[*v5 + 304] + 472))(" "); ++*v5; } v39 = -1; sub_636A10(&v35); } v23 = *(char **)(v4 + 422); v7 = sub_548F70((int)v23); if ( v7 ) { v8 = *v30[*v5 + 304]; v23 = (char *)(v7 + 34); v23 = sub_7549E0("[%s]", v7 + 34); (*(void (__thiscall **)(_DWORD *, char *))(v8 + 472))(v30[*v29 + 304], v23); v5 = v29; (*(void (__stdcall **)(char *))(*v30[*v29 + 304] + 468))(aIii); ++*v5; } sub_53F070(v30, (const CHAR *)(v4 + 34), v5, (int)aIii); v36 = 0; v37 = 0; v38 = 0; v39 = 1; v31 = sub_40C8D0((void *)(v4 + 134)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 170)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 206)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 242)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 278)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 314)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 350)); sub_5B3CF0(&v36, &v31); v31 = sub_40C8D0((void *)(v4 + 386)); sub_5B3CF0(&v36, &v31); v26 = 0; v27 = 0; v28 = 0; v9 = *(_DWORD *)(v4 + 166); LOBYTE(v39) = 2; v31 = v9; sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 202); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 238); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 274); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 310); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 346); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 382); sub_5B3CF0(&v26, &v31); v31 = *(_DWORD *)(v4 + 418); sub_5B3CF0(&v26, &v31); v34 = 15; v33 = 0; LOBYTE(v32) = 0; v10 = v26; v11 = (_BYTE *)v36 - (_BYTE *)v26; LOBYTE(v39) = 3; v25 = (void **)((_BYTE *)v36 - (_BYTE *)v26); v31 = 8; do { v12 = *(_DWORD *)((char *)v10 + v11); v24 = v12; if ( v12 && *v10 ) { if ( v33 > 0 ) { sub_401D10((int)&v32, ", ", 2u); v12 = v24; } sub_401D10((int)&v32, (void *)(v12 + 34), strlen((const char *)(v12 + 34))); v13 = sub_7549E0("(%d)", *v10); sub_401D10((int)&v32, v13, strlen(v13)); v5 = v29; v11 = (int)v25; } ++v10; --v31; } while ( v31 ); v14 = v32; if ( v34 < 0x10 ) v14 = &v32; v23 = aIii; v22 = v5; v21 = (int)v14; v15 = (char *)sub_4090F0(-2104194843); v16 = sub_7549E0(v15); sub_53F070(v30, v16, v22, (int)v23); if ( v34 >= 0x10 ) operator delete(v32); v34 = 15; v33 = 0; LOBYTE(v32) = 0; if ( v26 ) operator delete(v26); if ( v36 ) operator delete(v36); } } } } //----- (00545D60) -------------------------------------------------------- void __thiscall sub_545D60(_DWORD **this, int a2, _DWORD *a3) { int v3; // eax _DWORD **v4; // ebx void *v5; // eax unsigned int v6; // eax int v7; // esi int v8; // esi const CHAR *v9; // eax const CHAR *v10; // eax void *v11; // [esp-1Ch] [ebp-7Ch] int v12; // [esp-18h] [ebp-78h] int v13; // [esp-14h] [ebp-74h] int v14; // [esp-10h] [ebp-70h] int v15; // [esp-Ch] [ebp-6Ch] int v16; // [esp-8h] [ebp-68h] void **v17; // [esp+10h] [ebp-50h] _DWORD **v18; // [esp+14h] [ebp-4Ch] char v19; // [esp+18h] [ebp-48h] unsigned int v20; // [esp+28h] [ebp-38h] void *v21; // [esp+34h] [ebp-2Ch] int v22; // [esp+44h] [ebp-1Ch] unsigned int v23; // [esp+48h] [ebp-18h] int v24; // [esp+5Ch] [ebp-4h] v18 = this; if ( a2 ) { v3 = *(_DWORD *)(a2 + 112); if ( v3 ) { v16 = 15; v15 = 0; v17 = &v11; LOBYTE(v11) = 0; sub_4018E0(&v11, (void *)(v3 + 2), strlen((const char *)(v3 + 2))); v17 = (void **)sub_6CCA10(v11, v12, v13, v14, v15, v16); if ( v17 ) { v4 = v18; if ( *a3 > 0 ) { v5 = (void *)(*(int (**)(void))(*v18[*a3 + 303] + 484))(); sub_4019E0(&v19, v5); v24 = 0; if ( v20 > 0 && sub_438C50((int)&v19, " ") ) { (*(void (__stdcall **)(const char *))(*v4[*a3 + 304] + 472))(" "); ++*a3; } sub_636A10(&v19); } v23 = 15; v22 = 0; LOBYTE(v21) = 0; v6 = 0; v24 = 1; v18 = 0; do { if ( *((_BYTE *)v17 + v6 + 28) ) { v7 = sub_548F70(v6); if ( v7 ) { if ( v22 ) sub_401D10((int)&v21, ", ", 2u); sub_401D10((int)&v21, (void *)(v7 + 34), strlen((const char *)(v7 + 34))); } v6 = (unsigned int)v18; } v18 = (_DWORD **)++v6; } while ( v6 < 7 ); v8 = *v4[*a3 + 304]; v9 = sub_4090F0(-690146262); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v8 + 472))(v4[*a3 + 304], v9); (*(void (__stdcall **)(char *))(*v4[*a3 + 304] + 468))(aIii); ++*a3; v10 = (const CHAR *)v21; if ( v23 < 0x10 ) v10 = (const CHAR *)&v21; sub_53F070(v4, v10, a3, (int)aIii); if ( v23 >= 0x10 ) operator delete(v21); } } } } //----- (00545F50) -------------------------------------------------------- const char *__userpurge sub_545F50@(int a1@, int a2@, LONG a3, unsigned __int8 a4, int *a5, int *a6, int a7) { const char *result; // eax unsigned __int8 v8; // of int v9; // edi char v10; // cl int v11; // eax char v12; // cl char v13; // cl unsigned int v14; // esi __int16 *v15; // eax __int16 *v16; // edi _WORD *v17; // eax int *v18; // esi int v19; // edi int v20; // ST3C_4 char *v21; // eax char *v22; // eax int v23; // eax const char *v24; // eax _DWORD *v25; // eax signed int v26; // edi int v27; // eax int v28; // esi HDC *v29; // edi int v30; // ST3C_4 int v31; // ST38_4 HDC v32; // ST50_4 char *v33; // eax char *v34; // eax const char *v35; // eax int v36; // edi const CHAR *v37; // esi int v38; // eax signed int v39; // eax char *v40; // eax const char *v41; // eax int *v42; // esi int v43; // edi int v44; // ST3C_4 char *v45; // eax char *v46; // eax int v47; // eax int v48; // edi unsigned __int16 v49; // di int *v50; // esi int v51; // edi const CHAR *v52; // eax char *v53; // eax char *v54; // ST3C_4 int v55; // esi int v56; // eax int v57; // edx int v58; // eax int v59; // esi int v60; // eax int v61; // edx HDC *v62; // esi int v63; // ST3C_4 HDC v64; // ST50_4 char *v65; // eax char *v66; // ST3C_4 int v67; // edi int v68; // eax int v69; // esi int v70; // eax __int64 v71; // rax int v72; // edi int v73; // esi const CHAR *v74; // eax char *v75; // edx CHAR v76; // cl const char *v77; // eax unsigned int v78; // eax char *v79; // edi char v80; // cl const char *v81; // eax unsigned int v82; // eax char *v83; // edi char v84; // cl unsigned int v85; // ebx __time32_t v86; // esi __time32_t v87; // eax double v88; // st7 signed int v89; // eax double v90; // st7 unsigned int v91; // edx int v92; // ebx const CHAR *v93; // eax char *v94; // ecx CHAR v95; // dl const char *v96; // eax unsigned int v97; // eax char *v98; // edi char v99; // cl const char *v100; // eax unsigned int v101; // eax char *v102; // edi char v103; // cl const char *v104; // eax unsigned int v105; // eax char *v106; // edi char v107; // cl const char *v108; // edx unsigned int v109; // eax char *v110; // edi char v111; // cl char *v112; // eax unsigned int v113; // edi char *v114; // eax char *v115; // eax char *v116; // eax LONG v117; // edi char *v118; // eax __time32_t v119; // esi __time32_t v120; // eax double v121; // st7 char *v122; // eax signed int v123; // esi char *v124; // edi signed int v125; // ecx char *v126; // eax char *v127; // eax char *v128; // eax const CHAR *v129; // eax char *v130; // edx CHAR v131; // cl const char *v132; // eax unsigned int v133; // eax char *v134; // edi char v135; // cl const char *v136; // eax unsigned int v137; // eax char *v138; // edi char v139; // cl const char *v140; // eax unsigned int v141; // eax char *v142; // edi char v143; // cl char *v144; // eax int *v145; // esi int v146; // edi char *v147; // eax char *v148; // eax int *v149; // eax int v150; // esi char v151; // cl int v152; // eax int v153; // esi _DWORD *v154; // edi int v155; // eax int v156; // edx __int64 v157; // ST34_8 int v158; // edi char *v159; // eax int v160; // eax int v161; // eax bool v162; // zf bool v163; // sf int v164; // esi int v165; // edi const CHAR *v166; // eax char *v167; // edx CHAR v168; // cl const char *v169; // eax unsigned int v170; // eax char *v171; // edi char v172; // cl const char *v173; // eax char v174; // cl int v175; // edi unsigned int *v176; // eax unsigned int v177; // ecx int v178; // eax int v179; // eax const char *v180; // eax int v181; // ebx const CHAR *v182; // ST40_4 const CHAR *v183; // ST3C_4 char *v184; // eax const CHAR *v185; // ST40_4 const CHAR *v186; // ST3C_4 int v187; // ebx const CHAR *v188; // eax const CHAR *v189; // ST40_4 const CHAR *v190; // ST3C_4 const CHAR *v191; // ST40_4 const CHAR *v192; // ST3C_4 int v193; // ebx const CHAR *v194; // eax int v195; // eax _BYTE *v196; // eax unsigned __int16 *v197; // eax double v198; // st7 int v199; // ebx char *v200; // ST3C_4 const CHAR *v201; // eax char *v202; // eax int *v203; // edi int v204; // ebx int v205; // ST3C_4 const CHAR *v206; // eax char *v207; // eax int v208; // [esp+30h] [ebp-910h] const CHAR *v209[5]; // [esp+34h] [ebp-90Ch] int v210; // [esp+38h] [ebp-908h] HDC hdc; // [esp+48h] [ebp-8F8h] HDC hdca; // [esp+48h] [ebp-8F8h] unsigned __int16 hdcb; // [esp+48h] [ebp-8F8h] HDC hdcc; // [esp+48h] [ebp-8F8h] int v215; // [esp+4Ch] [ebp-8F4h] int v216; // [esp+4Ch] [ebp-8F4h] signed int v217; // [esp+4Ch] [ebp-8F4h] unsigned int v218; // [esp+4Ch] [ebp-8F4h] struct tagSIZE psizl; // [esp+54h] [ebp-8ECh] char v220[4]; // [esp+5Ch] [ebp-8E4h] char v221[4]; // [esp+60h] [ebp-8E0h] int v222; // [esp+64h] [ebp-8DCh] char v223[5]; // [esp+68h] [ebp-8D8h] unsigned int v224; // [esp+6Dh] [ebp-8D3h] int v225; // [esp+72h] [ebp-8CEh] __int64 v226; // [esp+86h] [ebp-8BAh] struct tm v227; // [esp+D0h] [ebp-870h] struct tm Tm; // [esp+F4h] [ebp-84Ch] struct tm v229; // [esp+118h] [ebp-828h] char v230; // [esp+13Ch] [ebp-804h] char v231; // [esp+13Dh] [ebp-803h] char v232[2]; // [esp+53Ch] [ebp-404h] char v233; // [esp+53Eh] [ebp-402h] int v234; // [esp+63Ch] [ebp-304h] char v235[2]; // [esp+73Ch] [ebp-204h] char v236; // [esp+73Eh] [ebp-202h] CHAR String[2]; // [esp+83Ch] [ebp-104h] char v238; // [esp+83Eh] [ebp-102h] result = (const char *)a3; v8 = __OFSUB__(*a6, 80); v163 = *a6 - 80 < 0; v222 = a1; psizl.cy = a3; if ( !(v163 ^ v8) ) return result; v210 = a2; LOBYTE(v234) = 0; memset((char *)&v234 + 1, 0, 0xFFu); v9 = 0; v215 = 0; *(_DWORD *)v220 = 0; if ( a5 ) { v9 = a5[28]; v215 = v9; if ( v9 ) { if ( *(_DWORD *)(v9 + 102) == 11 && !strcmp((const char *)(v9 + 310), "UseSkill") ) { v10 = *(_BYTE *)(v9 + 3); v229.tm_min = 0; v229.tm_hour = 0; v229.tm_mday = 0; v229.tm_mon = 0; v229.tm_year = 0; v229.tm_wday = 0; v229.tm_yday = 0; v229.tm_isdst = 0; v229.tm_min = *(unsigned __int8 *)(v9 + 2); HIWORD(v229.tm_min) = *(unsigned __int8 *)(v9 + 4); v11 = *(unsigned __int8 *)(v9 + 6); BYTE1(v229.tm_min) = v10; v12 = *(_BYTE *)(v9 + 5); LOBYTE(v229.tm_hour) = v11; LOBYTE(v11) = *(_BYTE *)(v9 + 8); HIBYTE(v229.tm_min) = v12; v13 = *(_BYTE *)(v9 + 7); BYTE2(v229.tm_hour) = v11; BYTE1(v229.tm_hour) = v13; if ( !strcmp((const char *)&v229.tm_min, "Recipe_") ) { *(_DWORD *)v221 = sub_548EF0((const char *)(v9 + 2)); if ( *(_DWORD *)v221 ) { v14 = 0; hdc = (HDC)sub_6BE7C0(); if ( hdc ) { do { v15 = sub_6BE770(v14); v16 = v15; v17 = sub_548EA0(*v15); if ( v17 && *(_DWORD *)(*(_DWORD *)v221 + 422) == *(_DWORD *)(v17 + 211) ) *(_DWORD *)v220 += *((_DWORD *)v16 + 1); ++v14; } while ( v14 < (unsigned int)hdc ); } if ( *(_DWORD *)(*(_DWORD *)v221 + 434) > *(_DWORD *)v220 ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 468))(&dword_AA8C88); v18 = *(int **)(v222 + 4 * *a6 + 1216); v19 = *v18; v20 = *(_DWORD *)(*(_DWORD *)v221 + 434); v21 = (char *)sub_40C190(-1787006979); v22 = sub_7549E0(v21, v20); (*(void (__thiscall **)(int *, char *))(v19 + 472))(v18, v22); ++*a6; v9 = v215; } } } } } v23 = *a6; if ( *a6 <= 0 ) { (*(void (__thiscall **)(_DWORD, const char *))(**(_DWORD **)(v222 + 4 * v23 + 1216) + 472))( *(_DWORD *)(v222 + 4 * v23 + 1216), " "); goto LABEL_21; } v24 = (const char *)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v222 + 4 * v23 + 1212) + 484))(*(_DWORD *)(v222 + 4 * v23 + 1212)); if ( v24 && strcmp(v24, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(" "); LABEL_21: ++*a6; } if ( v9 && *(_DWORD *)(v9 + 98) == 4 ) { v25 = sub_6CD770(); if ( v25 ) { v26 = 0; *(_DWORD *)v221 = v25[1]; *(_DWORD *)v220 = 0; if ( (unsigned __int16)sub_53DA30(*(_DWORD **)v221) > 0u ) { do { v27 = sub_74E2E0(*(_DWORD **)v221, v26); v28 = v27; if ( v27 && *(_BYTE *)(v27 + 32) && !*(_BYTE *)(v27 + 29) && *(_WORD *)(v27 + 34) == *((_WORD *)a5 + 4) ) { if ( *(unsigned __int8 *)(v27 + 27) > (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) || sub_680890((unsigned __int8 *)byte_AD9238) > (unsigned int)*(unsigned __int8 *)(v28 + 28) ) { (*(void (__stdcall **)(int *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 468))(&dword_AA8C88); } if ( sub_680890((unsigned __int8 *)byte_AD9238) >= (unsigned int)*(unsigned __int8 *)(v28 + 27) && sub_680890((unsigned __int8 *)byte_AD9238) <= (unsigned int)*(unsigned __int8 *)(v28 + 28) ) { (*(void (__stdcall **)(int *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 468))(&dword_AA8C68); } v29 = *(HDC **)(v222 + 4 * *a6 + 1216); v30 = *(unsigned __int8 *)(v28 + 28); v31 = *(unsigned __int8 *)(v28 + 27); v32 = *v29; v33 = (char *)sub_40A910(2125106079); v34 = sub_7549E0(v33, v31, v30); (*((void (__thiscall **)(HDC *, char *))v32 + 118))(v29, v34); ++*a6; v26 = *(_DWORD *)v220; } *(_DWORD *)v220 = ++v26; } while ( v26 < (unsigned __int16)sub_53DA30(*(_DWORD **)v221) ); } } v35 = (const char *)(*(int (**)(void))(**(_DWORD **)(v222 + 4 * *a6 + 1212) + 484))(); if ( v35 && *a6 > 0 && !strcmp(v35, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(" "); ++*a6; } } v36 = v222; v37 = (const CHAR *)(psizl.cy + 380); if ( *(_BYTE *)(psizl.cy + 380) != 45 ) { hdca = *(HDC *)((*(int (**)(void))(**(_DWORD **)(v222 + 1216) + 456))() + 192); memset(&v234, 0, 0x100u); while ( *a6 < 80 ) { v38 = sub_8F5700((int)&v234, v37, hdca, *(_DWORD *)(v36 + 1608)); if ( !v38 ) break; *((_BYTE *)&v234 + v38) = 0; v37 += v38; v39 = 0; if ( (_BYTE)v234 == 32 ) { do { if ( !*((_BYTE *)&v234 + v39) ) break; if ( v39 >= 64 ) break; ++v39; } while ( *((_BYTE *)&v234 + v39) == 32 ); } v40 = (char *)&v234 + v39; if ( v40 ) { (*(void (__stdcall **)(char *))(**(_DWORD **)(v36 + 4 * *a6 + 1216) + 472))(v40); ++*a6; } memset(&v234, 0, 0x100u); } } v41 = (const char *)(*(int (**)(void))(**(_DWORD **)(v36 + 4 * *a6 + 1212) + 484))(); if ( v41 && *a6 > 0 && strcmp(v41, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v36 + 4 * *a6 + 1216) + 472))(" "); ++*a6; } if ( a5 ) { if ( (*(unsigned __int8 (**)(void))(*a5 + 4))() == 13 ) { qmemcpy(v223, a5 + 2, 0x67u); if ( v223[2] ) { v42 = *(int **)(v222 + 4 * *a6 + 1216); v43 = *v42; v44 = (unsigned __int8)v223[2]; v45 = (char *)sub_40C190(-1599828088); v46 = sub_7549E0(v45, v44); (*(void (__thiscall **)(int *, char *))(v43 + 472))(v42, v46); v47 = (unsigned __int8)v223[2]; ++*a6; v48 = 0; *(_DWORD *)v221 = 0; if ( v47 > 0 ) { do { if ( v48 ) { v58 = *(unsigned __int16 *)&v223[10 * v48 + 3]; if ( (_WORD)v58 != -1 ) { v59 = dword_ACB234; hdcb = *(_WORD *)&v223[10 * v48 + 3]; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB234 + 16))(dword_ACB234, v58) ) { if ( hdcb <= *(_WORD *)(v59 + 200) ) { v61 = *(_DWORD *)(v59 + 196); if ( *(_DWORD *)(v61 + 4 * hdcb) ) v60 = *(_DWORD *)(v61 + 4 * hdcb); else v60 = 0; } else { v60 = 0; } } else { v60 = 0; } v62 = *(HDC **)(v222 + 4 * *a6 + 1216); v63 = v60 + 14; v64 = *v62; v65 = (char *)sub_40C190(859575661); v66 = sub_7549E0(v65, v48 + 1, v63); (*((void (__thiscall **)(HDC *, char *))v64 + 118))(v62, v66); goto LABEL_83; } v50 = *(int **)(v222 + 4 * *a6 + 1216); v51 = *v50; v209[0] = sub_40C190(-1679039015); v208 = *(_DWORD *)v221 + 1; } else { v49 = *(_WORD *)&v223[3]; if ( *(_WORD *)&v223[3] == -1 ) { v50 = *(int **)(v222 + 4 * *a6 + 1216); v51 = *v50; v52 = sub_40C190(-1679039015); } else { v55 = dword_ACB234; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB234 + 16))( dword_ACB234, *(_DWORD *)&v223[3]) ) { if ( v49 <= *(_WORD *)(v55 + 200) ) { v57 = *(_DWORD *)(v55 + 196); if ( *(_DWORD *)(v57 + 4 * v49) ) v56 = *(_DWORD *)(v57 + 4 * v49); else v56 = 0; } else { v56 = 0; } } else { v56 = 0; } v50 = *(int **)(v222 + 4 * *a6 + 1216); v51 = *v50; v52 = (const CHAR *)(v56 + 14); } v209[0] = v52; v208 = 1; } v53 = (char *)sub_40C190(859575661); v54 = sub_7549E0(v53, v208, v209[0]); (*(void (__thiscall **)(int *, char *))(v51 + 472))(v50, v54); LABEL_83: v67 = *(_DWORD *)v221; v68 = (unsigned __int8)v223[2]; ++*a6; v48 = v67 + 1; *(_DWORD *)v221 = v48; } while ( v48 < v68 ); } } } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 18 ) { String[0] = 0; memset(&String[1], 0, 0xFEu); v235[0] = 0; memset(&v235[1], 0, 0xFEu); v230 = 0; memset(&v231, 0, 0x3FFu); v69 = a5[29]; if ( !v69 ) goto LABEL_186; v70 = sub_548E10((const char *)(v69 + 2)); if ( !v70 || !*(_WORD *)(v70 + 98) ) goto LABEL_186; v71 = *(unsigned __int16 *)(v70 + 98); v72 = v71 % 24; psizl.cy = v71 % 24; v73 = v71 / 24; v74 = sub_40C190(-1042754766); v75 = (char *)(&v230 - v74); do { v76 = *v74; v74[(_DWORD)v75] = *v74; ++v74; } while ( v76 ); if ( v73 > 0 ) { v77 = sub_40C190(-1749093143); sprintf(String, v77, v73); v78 = strlen(String) + 1; v79 = (char *)&v229.tm_isdst + 3; do v80 = (v79++)[1]; while ( v80 ); qmemcpy(v79, String, v78); v72 = psizl.cy; } if ( v72 <= 0 ) goto LABEL_184; v81 = sub_40C190(-1492913418); sprintf(v235, v81, v72); v82 = strlen(v235) + 1; v83 = (char *)&v229.tm_isdst + 3; do v84 = (v83++)[1]; while ( v84 ); LABEL_183: qmemcpy(v83, v235, v82); LABEL_184: (*(void (__stdcall **)(char *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(&v230); LABEL_185: ++*a6; goto LABEL_186; } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 28 ) { qmemcpy(v223, a5 + 2, 0x67u); v85 = v225; v216 = (unsigned __int8)v225; if ( ((_BYTE)v225 || v225 & 0xFFFFFF00) && (unsigned __int8)v225 != 255 ) { v235[0] = 0; memset(&v235[1], 0, 0xFEu); String[0] = 0; memset(&String[1], 0, 0xFEu); v230 = 0; memset(&v231, 0, 0x3FFu); qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v86 = _mktime32(&Tm); v229.tm_year = v216 + 100; v229.tm_mon = ((v85 >> 8) & 0x1F) - 1; v229.tm_mday = (v85 >> 13) & 0x3F; v229.tm_hour = (v85 >> 19) & 0x3F; v229.tm_min = v85 >> 25; v229.tm_sec = 0; v87 = _mktime32(&v229); v88 = _difftime32(v87, v86); v217 = (signed int)(v88 / 86400.0); v89 = (signed int)(v88 / 3600.0); *(_DWORD *)v220 = v89 % 24; psizl.cy = 3600 * (v89 % 24); v90 = v88 - (double)(86400 * v217) - (double)psizl.cy; v91 = (signed int)((signed int)v90 + ((unsigned __int64)(-2004318071i64 * (signed int)v90) >> 32)) >> 5; v92 = v91 + (v91 >> 31); v93 = sub_40C190(658784400); v94 = (char *)(&v230 - v93); do { v95 = *v93; v94[(_DWORD)v93] = *v93; ++v93; } while ( v95 ); if ( v217 > 0 ) { v96 = sub_40C190(-1749093143); sprintf(v235, v96, v217); v97 = strlen(v235) + 1; v98 = (char *)&v229.tm_isdst + 3; do v99 = (v98++)[1]; while ( v99 ); qmemcpy(v98, v235, v97); } if ( *(_DWORD *)v220 > 0 ) { v100 = sub_40C190(-1492913418); sprintf(String, v100, *(_DWORD *)v220); v101 = strlen(String) + 1; v102 = (char *)&v229.tm_isdst + 3; do v103 = (v102++)[1]; while ( v103 ); qmemcpy(v102, String, v101); } if ( v92 > 0 ) { v104 = sub_40C190(-184027596); sprintf(String, v104, v92); v105 = strlen(String) + 1; v106 = (char *)&v229.tm_isdst + 3; do v107 = (v106++)[1]; while ( v107 ); qmemcpy(v106, String, v105); } (*(void (__stdcall **)(int *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 468))(&dword_AA8C88); if ( v217 > 0 || *(_DWORD *)v220 > 0 || v92 > 0 ) { (*(void (__cdecl **)(char *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(&v230); ++*a6; } else { v108 = sub_40A910(-1515935505); v109 = strlen(v108) + 1; v110 = (char *)&v229.tm_isdst + 3; do v111 = (v110++)[1]; while ( v111 ); qmemcpy(v110, v108, v109); (*(void (__cdecl **)(char *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(&v230); ++*a6; } } goto LABEL_186; } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 39 ) { qmemcpy(v223, a5 + 2, 0x67u); *(_DWORD *)v220 = (unsigned __int8)v225; v112 = sub_7549E0("kUseableTime.year: %d\n", (unsigned __int8)v225); OutputDebugStringA(v112); v113 = v225; v218 = ((unsigned int)v225 >> 8) & 0x1F; v114 = sub_7549E0("kUseableTime.month: %d\n", v218); OutputDebugStringA(v114); *(_DWORD *)v221 = (v113 >> 13) & 0x3F; v115 = sub_7549E0("kUseableTime.date: %d\n", *(_DWORD *)v221); OutputDebugStringA(v115); hdcc = (HDC)((v113 >> 19) & 0x3F); v116 = sub_7549E0("kUseableTime.hour: %d\n", hdcc); OutputDebugStringA(v116); v117 = v113 >> 25; psizl.cy = v117; v118 = sub_7549E0("kUseableTime.minute: %d\n", v117); OutputDebugStringA(v118); if ( !*(_DWORD *)v220 && !v218 && !*(_DWORD *)v221 && !hdcc && !v117 || *(_DWORD *)v220 == 255 ) { OutputDebugStringA("test 1: nothing\n"); goto LABEL_186; } OutputDebugStringA("test 2: else\n"); if ( *(float *)(v222 + 416) > 0.0 ) { OutputDebugStringA("test 3: remaintime > 0\n"); *a6 = sub_53FE70((const char *)v222, *a6); goto LABEL_186; } OutputDebugStringA("test 4: remaintime <= 0\n"); *(float *)(v222 + 416) = 1.0; strcpy(v232, "0"); memset(&v233, 0, 0xFDu); strcpy(v235, "0"); memset(&v236, 0, 0xFDu); strcpy(String, "0"); memset(&v238, 0, 0xFDu); v230 = 0; memset(&v231, 0, 0x3FFu); qmemcpy(&v227, &unk_ACCFA8, sizeof(v227)); v119 = _mktime32(&v227); Tm.tm_mday = *(_DWORD *)v221; Tm.tm_year = *(_DWORD *)v220 + 100; Tm.tm_mon = v218 - 1; Tm.tm_hour = (int)hdcc; Tm.tm_min = psizl.cy; Tm.tm_sec = 0; v120 = _mktime32(&Tm); v121 = _difftime32(v120, v119); *(double *)&psizl = v121; v122 = sub_7549E0("result: %d\n", LODWORD(v121), (_DWORD)(*(unsigned __int64 *)&v121 >> 32)); OutputDebugStringA(v122); v123 = (signed int)(v121 / 86400.0); *(_DWORD *)v221 = (signed int)(v121 / 3600.0) % 24; psizl.cy = 3600 * *(_DWORD *)v221; v124 = (char *)v222; v125 = (signed int)(v121 + 60.0 - (double)(86400 * v123) - (double)(3600 * *(_DWORD *)v221)); *(_DWORD *)v220 = v125 / 60; if ( v123 > 0 && *(_DWORD *)v221 > 0 && v125 / 60 > 0 ) { strcpy((char *)(v222 + 440), v232); strcpy(v124 + 695, v235); strcpy(v124 + 950, String); } v126 = sub_7549E0("iDay: %d\n", v123); OutputDebugStringA(v126); v127 = sub_7549E0("iHour: %d\n", *(_DWORD *)v221); OutputDebugStringA(v127); v128 = sub_7549E0("iMinute: %d\n", *(_DWORD *)v220); OutputDebugStringA(v128); v129 = sub_40C190(658784400); v130 = (char *)(&v230 - v129); do { v131 = *v129; v129[(_DWORD)v130] = *v129; ++v129; } while ( v131 ); if ( v123 > 0 ) { v132 = sub_40C190(-1749093143); sprintf(v232, v132, v123); strcpy(v124 + 440, v232); v133 = strlen(v232) + 1; v134 = (char *)&v229.tm_isdst + 3; do v135 = (v134++)[1]; while ( v135 ); qmemcpy(v134, v232, v133); v124 = (char *)v222; } if ( *(_DWORD *)v221 > 0 ) { v136 = sub_40C190(-1492913418); sprintf(v235, v136, *(_DWORD *)v221); strcpy(v124 + 695, v235); v137 = strlen(v235) + 1; v138 = (char *)&v229.tm_isdst + 3; do v139 = (v138++)[1]; while ( v139 ); qmemcpy(v138, v235, v137); v124 = (char *)v222; } if ( *(_DWORD *)v220 > 0 ) { v140 = sub_40C190(-184027596); sprintf(String, v140, *(_DWORD *)v220); strcpy(v124 + 950, String); v141 = strlen(String) + 1; v142 = (char *)&v229.tm_isdst + 3; do v143 = (v142++)[1]; while ( v143 ); qmemcpy(v142, String, v141); v124 = (char *)v222; } (*(void (__cdecl **)(char *))(**(_DWORD **)&v124[4 * *a6 + 1216] + 472))(&v230); ++*a6; v144 = sub_7549E0("updated: %s\n", &v230); OutputDebugStringA(v144); sub_4F39F0(v225, (char *)&v229.tm_mon, 18); v145 = *(int **)&v124[4 * *a6 + 1216]; v146 = *v145; v147 = (char *)sub_40C190(2060112345); v148 = sub_7549E0(v147, &v229.tm_mon); (*(void (__thiscall **)(int *, char *))(v146 + 472))(v145, v148); v149 = &v229.tm_mon; v150 = v222 + 420 - ((_DWORD)&v229 + 16); do { v151 = *(_BYTE *)v149; *((_BYTE *)v149 + v150) = *(_BYTE *)v149; v149 = (int *)((char *)v149 + 1); } while ( v151 ); goto LABEL_185; } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 9 ) { qmemcpy(v223, a5 + 2, 0x67u); v152 = sub_4A3DB0((unsigned __int8 *)(psizl.cy + 2)); if ( *(_DWORD *)(v152 + 98) == 1 ) { if ( !strcmp((const char *)(v152 + 66), "MINIGAME") ) { String[0] = 0; memset(&String[1], 0, 0xFFu); v153 = v222; v154 = (_DWORD *)(*(int (**)(void))(**(_DWORD **)(v222 + 1216) + 456))(); (*(void (__stdcall **)(CHAR *))(**(_DWORD **)(v222 + 4 * *a6 + 1216) + 472))(String); ++*a6; sub_4593C0(v154, String, strlen(String), &psizl); v155 = psizl.cx + *(_DWORD *)(v153 + 356); v156 = *(_DWORD *)(v153 + 1612); v157 = v226; *(_DWORD *)(v153 + 1208) = v155; sub_53E5A0((_DWORD **)v153, v155 + 7, *(_DWORD *)(v153 + 352) + (*a6 - 1) * (v156 + 2), v157, 1); } else if ( ((_BYTE)v224 || v224 & 0xFFFFFF00) && (unsigned __int8)v224 != 255 ) { if ( *(float *)(v222 + 416) <= 0.0 ) *a6 = sub_5400B0((float *)v222, *a6, v224); else *a6 = sub_53FE70((const char *)v222, *a6); } } goto LABEL_186; } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) != 23 || !v215 ) goto LABEL_186; v158 = 0; v159 = (char *)sub_549330((char *)(v215 + 2)); if ( v159 ) { v160 = sub_4405C0(v159); if ( v160 ) v158 = *(unsigned __int16 *)(v160 + 48); } v161 = sub_4DCB90((const char *)(v215 + 2)); if ( v161 ) { v162 = v158 == 0; v163 = v158 < 0; if ( v158 ) { LABEL_173: if ( v163 || v162 ) goto LABEL_186; String[0] = 0; memset(&String[1], 0, 0xFEu); v235[0] = 0; memset(&v235[1], 0, 0xFEu); v230 = 0; memset(&v231, 0, 0x3FFu); v164 = v158 / 24; v165 = v158 % 24; psizl.cy = v165; v166 = sub_40C190(-1042754766); v167 = (char *)(&v230 - v166); do { v168 = *v166; v166[(_DWORD)v167] = *v166; ++v166; } while ( v168 ); if ( v164 > 0 ) { v169 = sub_40C190(-1749093143); sprintf(String, v169, v164); v170 = strlen(String) + 1; v171 = (char *)&v229.tm_isdst + 3; do v172 = (v171++)[1]; while ( v172 ); qmemcpy(v171, String, v170); v165 = psizl.cy; } if ( v165 <= 0 ) goto LABEL_184; v173 = sub_40C190(-1492913418); sprintf(v235, v173, v165); v82 = strlen(v235) + 1; v83 = (char *)&v229.tm_isdst + 3; do v174 = (v83++)[1]; while ( v174 ); goto LABEL_183; } v158 = *(unsigned __int16 *)(v161 + 130); } v162 = v158 == 0; v163 = v158 < 0; goto LABEL_173; } LABEL_186: v175 = v222; sub_545900((_DWORD **)v222, (int)a5, a6); sub_545D60((_DWORD **)v175, (int)a5, a6); if ( a5 ) { if ( (*(int (__thiscall **)(int *))(*a5 + 44))(a5) ) { v176 = (unsigned int *)(*(int (__thiscall **)(int *))(*a5 + 44))(a5); v177 = *v176; v178 = (unsigned __int8)*v176; if ( (v178 || v177 & 0xFFFFFF00) && v178 != 255 ) { if ( *(float *)(v175 + 416) <= 0.0 ) v179 = sub_5400B0((float *)v175, *a6, v177); else v179 = sub_53FE70((const char *)v175, *a6); *a6 = v179; } } } if ( a4 && a5 && (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 23 ) sub_541360((_DWORD **)v175, a5[28], a4, a6); v180 = (const char *)(*(int (**)(void))(**(_DWORD **)(v175 + 4 * *a6 + 1212) + 484))(); if ( v180 && *a6 > 0 && strcmp(v180, " ") ) { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v175 + 4 * *a6 + 1216) + 472))(" "); ++*a6; } if ( !a5 ) goto LABEL_227; v181 = a5[28]; if ( v181 ) { (*(void (__stdcall **)(int *, int))(**(_DWORD **)(v175 + 4 * *a6 + 1216) + 468))(&dword_AA8C88, v210); if ( sub_74DF90(&dword_AD9E70, *(_DWORD *)(v181 + 274)) ) { if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v181 + 274)) ) { if ( sub_6869F0((char *)a5) ) { v185 = sub_40A910(-536595394); v186 = sub_40A910(-162578625); v184 = sub_7549E0("%s (%s)", v186, v185); } else { v182 = sub_40A910(778274957); v183 = sub_40A910(-162578625); v184 = sub_7549E0("%s (%s)", v183, v182); } LABEL_216: sub_53F070((_DWORD **)v175, v184, a6, (int)&dword_AA8C88); goto LABEL_219; } v187 = **(_DWORD **)(v175 + 4 * *a6 + 1216); psizl.cy = *(_DWORD *)(v175 + 4 * *a6 + 1216); v188 = sub_40A910(-1969051398); (*(void (__thiscall **)(LONG, const CHAR *))(v187 + 472))(psizl.cy, v188); } else { if ( !sub_74DFD0(&dword_AD9E70, *(_DWORD *)(v181 + 274)) ) { LABEL_219: (*(void (__cdecl **)(int *))(**(_DWORD **)(v175 + 4 * *a6 + 1216) + 468))(&dword_AA8C68); goto LABEL_220; } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v181 + 274)) ) { if ( sub_6869F0((char *)a5) ) { v191 = sub_40A910(-536595394); v192 = sub_40A910(-163562947); v184 = sub_7549E0("%s (%s)", v192, v191); } else { v189 = sub_40A910(778274957); v190 = sub_40A910(-163562947); v184 = sub_7549E0("%s (%s)", v190, v189); } goto LABEL_216; } v193 = **(_DWORD **)(v175 + 4 * *a6 + 1216); psizl.cy = *(_DWORD *)(v175 + 4 * *a6 + 1216); v194 = sub_40A910(-2053068565); (*(void (__thiscall **)(LONG, const CHAR *))(v193 + 472))(psizl.cy, v194); } ++*a6; goto LABEL_219; } LABEL_220: v195 = a5[28]; if ( v195 ) { v196 = (_BYTE *)(v195 + 310); if ( *v196 != 45 ) { v197 = (unsigned __int16 *)sub_438F10(v196); if ( v197 ) { v198 = sub_6BEC80(*v197) * 1000.0; psizl = (struct tagSIZE)(signed __int64)v198; if ( (unsigned int)(signed __int64)v198 ) { v199 = **(_DWORD **)(v175 + 4 * *a6 + 1216); psizl.cy = *(_DWORD *)(v175 + 4 * *a6 + 1216); v200 = sub_53FCE0((signed __int64)v198); v201 = sub_40C190(1011823660); v202 = sub_7549E0("%s: %s", v201, v200); (*(void (__thiscall **)(LONG, char *))(v199 + 472))(psizl.cy, v202); ++*a6; } } } } if ( (*(unsigned __int8 (__thiscall **)(int *))(*a5 + 4))(a5) == 24 ) { v203 = *(int **)(v175 + 4 * *a6 + 1216); v204 = *v203; v205 = *(int *)((char *)a5 + 10); v206 = sub_40C190(1009732150); v207 = sub_7549E0("%s %d", v206, v205); (*(void (__thiscall **)(int *, char *))(v204 + 472))(v203, v207); ++*a6; v175 = v222; } LABEL_227: result = (const char *)(*(int (**)(void))(**(_DWORD **)(v175 + 4 * *a6 + 1212) + 484))(); if ( result && *a6 > 0 ) { result = (const char *)strcmp(result, " "); if ( result ) { result = (const char *)(*(int (__thiscall **)(_DWORD, const char *))(**(_DWORD **)(v175 + 4 * *a6 + 1216) + 472))( *(_DWORD *)(v175 + 4 * *a6 + 1216), " "); ++*a6; } } return result; } // 545F50: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACB234: using guessed type int dword_ACB234; // AD9E70: using guessed type int dword_AD9E70; //----- (00547A50) -------------------------------------------------------- const char *__userpurge sub_547A50@(int a1@, int a2@, int a3, int a4, int a5, int *a6, int a7) { const char *result; // eax int v8; // esi int v9; // ST14_4 int v10; // ebx unsigned __int16 v11; // di char *v12; // ebx int v13; // edx unsigned __int16 *v14; // edi int v15; // edi char *v16; // [esp+4h] [ebp-18h] const char *v17; // [esp+8h] [ebp-14h] int v18; // [esp+Ch] [ebp-10h] int v19; // [esp+10h] [ebp-Ch] char v20; // [esp+14h] [ebp-8h] int v21; // [esp+18h] [ebp-4h] int v22; // [esp+24h] [ebp+8h] const char *v23; // [esp+24h] [ebp+8h] result = (const char *)a6; v8 = a1; if ( *a6 < 80 ) { v9 = a2; v21 = 0; sub_6807E0(byte_AD9238); v10 = dword_ACB230; v11 = a3; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a3, v9) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v10 + 200) ) { v13 = *(_DWORD *)(v10 + 196); v12 = (char *)(*(_DWORD *)(v13 + 4 * (unsigned __int16)a3) ? *(_DWORD *)(v13 + 4 * (unsigned __int16)a3) : 0); } else { v12 = 0; } } else { v12 = 0; } v22 = dword_ACDA70; result = (const char *)(*(int (**)(void))(*(_DWORD *)dword_ACDA70 + 16))(); if ( (_BYTE)result ) { result = (const char *)v22; if ( v11 <= *(_WORD *)(v22 + 200) ) { result = (const char *)(*(_DWORD *)(v22 + 196) + 4 * v11); if ( *(_DWORD *)result ) { result = *(const char **)result; v23 = result; } else { v23 = 0; } } else { v23 = 0; } } else { v23 = 0; } *(_DWORD *)(v8 + 1616) = 0; *(_DWORD *)(v8 + 1620) = 0; if ( v12 ) { result = v23; if ( v23 ) { v14 = (unsigned __int16 *)a7; v20 = 0; v17 = v23; v18 = a4; v16 = v12; v19 = a7; sub_541FC0((_DWORD **)v8, (float *)&v16, &v21); sub_53FB70(v8, (int)v14, v14, &v21); sub_545F50(v8, (int)v14, (LONG)v23, a4, (int *)v14, &v21, a5); sub_5404F0((void *)v8, v12, &v21); sub_5418C0((_DWORD **)v8, v12, &v21); sub_540B10((_DWORD **)v8, a7, &v21); sub_541120((_DWORD *)v8, a7, &v21); sub_541F40((_DWORD **)v8, a7, &v21); v15 = v21; result = (const char *)(*(int (**)(void))(**(_DWORD **)(v8 + 4 * v21 + 1212) + 484))(); if ( result && v15 > 0 ) { result = (const char *)strcmp(result, " "); if ( !result ) result = (const char *)(*(int (__stdcall **)(void *))(**(_DWORD **)(v8 + 4 * v15-- + 1212) + 472))(&unk_9CA216); } *a6 = v15; } } } return result; } // 547A50: could not find valid save-restore pair for edi // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (00547C20) -------------------------------------------------------- int __thiscall sub_547C20(int *this, int a2) { int *v2; // ebx int v3; // esi signed int v4; // edi int v5; // esi unsigned __int8 (__thiscall *v6)(int); // edx int v7; // ecx bool v8; // zf int v9; // eax int (__thiscall *v10)(int); // edx int v11; // eax int v12; // edi int v13; // ebx int v14; // eax int v15; // eax int v17; // [esp+Ch] [ebp-4h] v2 = this; v17 = (int)this; sub_53DCC0((_DWORD **)this); v3 = (int)(v2 + 304); v4 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9CA217); (*(void (__stdcall **)(int *))(**(_DWORD **)v3 + 468))(&dword_AA8C68); v3 += 4; --v4; } while ( v4 ); v5 = a2; if ( a2 ) { v6 = *(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 4); v7 = a2; a2 = 0; v8 = v6(v7) == 23; v9 = *(_DWORD *)v5; if ( v8 ) v10 = *(int (__thiscall **)(int))(v9 + 40); else v10 = *(int (__thiscall **)(int))(v9 + 36); v11 = v10(v5); v12 = *(unsigned __int16 *)(v5 + 8); v13 = v11; v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 12))(v5); sub_547A50(v17, v12, v12, v13, v14, &a2, v5); v2 = (int *)v17; } v15 = *v2; v2[404] = v5; v2[405] = *(_DWORD *)(v5 + 112); return (*(int (__thiscall **)(int *))(v15 + 436))(v2); } // AA8C68: using guessed type int dword_AA8C68; //----- (00547CE0) -------------------------------------------------------- int __thiscall sub_547CE0(_DWORD **this, unsigned __int16 *a2) { _DWORD **v2; // edi int v3; // esi signed int v4; // ebx int result; // eax unsigned __int16 *v6; // esi int v7; // ebx int v8; // edx int v9; // ebx int *v10; // eax int (__stdcall *v11)(unsigned __int16 *); // eax int (__thiscall *v12)(unsigned __int16 *); // eax int v13; // eax unsigned int v14; // ST08_4 int v15; // eax int v16; // [esp+Ch] [ebp-18h] LONG v17; // [esp+10h] [ebp-14h] int v18; // [esp+14h] [ebp-10h] unsigned __int16 *v19; // [esp+18h] [ebp-Ch] char v20; // [esp+1Ch] [ebp-8h] LONG v21; // [esp+20h] [ebp-4h] v2 = this; sub_53DCC0(this); v3 = (int)(v2 + 304); v4 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9CA23F); result = (*(int (__stdcall **)(int *))(**(_DWORD **)v3 + 468))(&dword_AA8C68); v3 += 4; --v4; } while ( v4 ); v6 = a2; if ( a2 ) { v7 = dword_ACB230; v8 = *(_DWORD *)dword_ACB230; a2 = (unsigned __int16 *)a2[4]; if ( (*(unsigned __int8 (__thiscall **)(int, unsigned __int16 *))(v8 + 16))(dword_ACB230, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v7 + 200) ) { v10 = (int *)(*(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)a2); if ( *v10 ) v9 = *v10; else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } v11 = *(int (__stdcall **)(unsigned __int16 *))(*(_DWORD *)dword_ACDA70 + 16); v21 = dword_ACDA70; result = v11(a2); if ( (_BYTE)result ) { result = v21; if ( (unsigned __int16)a2 <= *(_WORD *)(v21 + 200) ) { result = *(_DWORD *)(v21 + 196) + 4 * (unsigned __int16)a2; if ( *(_DWORD *)result ) { result = *(_DWORD *)result; v21 = result; } else { v21 = 0; } } else { v21 = 0; } } else { v21 = 0; } if ( v9 && v21 ) { v2[404] = v6; v2[405] = (_DWORD *)v9; a2 = 0; sub_6807E0(byte_AD9238); v12 = *(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v6 + 36); v17 = v21; v20 = 0; v16 = v9; v18 = v12(v6); v19 = v6; sub_541FC0(v2, (float *)&v16, &a2); sub_53FB70((int)v2, (int)v2, v6, &a2); v13 = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v6 + 12))(v6); sub_545F50((int)v2, (int)v2, v21, 0, (int *)v6, (int *)&a2, v13); sub_5404F0(v2, (_WORD *)v9, (int *)&a2); sub_5418C0(v2, (const char *)v9, (int *)&a2); sub_541120(v2, (int)v6, &a2); sub_541F40(v2, (int)v6, &a2); v14 = *(_DWORD *)(v9 + 215); v15 = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v6 + 12))(v6); sub_5452F0(v2, (unsigned __int16 *)v9, v15, v14, &a2, 3); v2[404] = 0; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) result = sub_50AF40(*(char **)(result + 1008)); } } return result; } // AA8C68: using guessed type int dword_AA8C68; // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (00547EE0) -------------------------------------------------------- void __userpurge sub_547EE0(int a1@, int a2@, int a3@, int a4, int a5, int a6, int *a7, __int64 a8) { bool v8; // sf unsigned __int8 v9; // of int v10; // edi int v11; // ebx int v12; // ebx int v13; // edx unsigned __int8 (*v14)(void); // edx LONG v15; // esi int v16; // edx int v17; // eax int v18; // esi int v19; // esi char *v20; // eax char *v21; // eax char v22; // al int v23; // esi int v24; // eax bool v25; // cf void (__stdcall *v26)(int *); // eax int v27; // ST14_4 const CHAR *v28; // eax char *v29; // eax int v30; // eax unsigned int v31; // ecx void (__stdcall *v32)(int *); // eax int v33; // ST14_4 char *v34; // eax char *v35; // eax int v36; // ST1C_4 const char *v37; // eax const CHAR *v38; // eax char *v39; // eax const CHAR *v40; // ST18_4 int v41; // ST14_4 const CHAR *v42; // eax char *v43; // eax int v44; // [esp-8h] [ebp-140h] int v45; // [esp-4h] [ebp-13Ch] int v46; // [esp+4h] [ebp-134h] LONG v47; // [esp+8h] [ebp-130h] int v48; // [esp+Ch] [ebp-12Ch] int v49; // [esp+10h] [ebp-128h] char v50; // [esp+14h] [ebp-124h] int *v51; // [esp+18h] [ebp-120h] __int64 v52; // [esp+1Ch] [ebp-11Ch] int v53; // [esp+24h] [ebp-114h] int v54; // [esp+28h] [ebp-110h] int v55; // [esp+2Ch] [ebp-10Ch] char v56; // [esp+33h] [ebp-105h] char v57; // [esp+34h] [ebp-104h] char v58; // [esp+35h] [ebp-103h] v53 = a6; v9 = __OFSUB__(*a7, 80); v8 = *a7 - 80 < 0; v10 = a1; v51 = a7; if ( !(v8 ^ v9) ) return; v45 = a2; v55 = 0; sub_6807E0(byte_AD9238); v11 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a4, a3) ) { if ( (unsigned __int16)a4 <= *(_WORD *)(v11 + 200) ) { v13 = *(_DWORD *)(v11 + 196); v12 = *(_DWORD *)(v13 + 4 * (unsigned __int16)a4) ? *(_DWORD *)(v13 + 4 * (unsigned __int16)a4) : 0; } else { v12 = 0; } } else { v12 = 0; } v14 = *(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACDA70 + 16); v44 = a4; v54 = dword_ACDA70; if ( v14() ) { if ( (unsigned __int16)a4 <= *(_WORD *)(v54 + 200) ) { v16 = *(_DWORD *)(v54 + 196); v15 = *(_DWORD *)(v16 + 4 * (unsigned __int16)a4) ? *(_DWORD *)(v16 + 4 * (unsigned __int16)a4) : 0; } else { v15 = 0; } } else { v15 = 0; } *(_DWORD *)(v10 + 1616) = 0; *(_DWORD *)(v10 + 1620) = 0; if ( !v12 || !v15 ) return; v17 = sub_53D9E0(a4); v56 = 0; if ( sub_549060((const char *)(v17 + 2)) ) v56 = 1; v48 = a5; v49 = 0; v46 = v12; v47 = v15; v50 = 1; sub_541FC0((_DWORD **)v10, (float *)&v46, &v55); sub_545F50(v10, v10, v15, 0, 0, &v55, v53); sub_5404F0((void *)v10, (_WORD *)v12, &v55); sub_5418C0((_DWORD **)v10, (const char *)v12, &v55); v18 = sub_438F10((void *)(v12 + 2)); if ( v18 && sub_549180((const char *)(v12 + 2)) ) { v52 = sub_6622F0(*(_DWORD *)(v18 + 267)); sub_662570(v52, &v57, 0x100u); v19 = v55; v54 = **(_DWORD **)(v10 + 4 * v55 + 1216); v20 = (char *)sub_40C190(-1611269140); v21 = sub_7549E0(v20, &v57); (*(void (__thiscall **)(_DWORD, char *, int))(v54 + 472))(*(_DWORD *)(v10 + 4 * v19 + 1216), v21, a4); v22 = sub_6807E0(byte_AD9238); if ( !sub_419A10(v52, v22) ) (*(void (__stdcall **)(int *))(**(_DWORD **)(v10 + 4 * v19 + 1216) + 468))(&dword_AA8C88); (*(void (__cdecl **)(const char *))(**(_DWORD **)(v10 + 4 * v19 + 1220) + 472))(" "); v23 = v19 + 2; v55 = v23; } else { v23 = v55; } if ( *(_DWORD *)(v12 + 220) ) { if ( *(_DWORD *)(v12 + 224) ) { LABEL_34: if ( !v56 ) { v30 = sub_6D3800(); if ( v30 ) { v31 = *(_DWORD *)(v30 + 2736); v32 = *(void (__stdcall **)(int *))(**(_DWORD **)(v10 + 4 * v23 + 1216) + 468); if ( v31 <= *(_DWORD *)(v12 + 224) ) v32(&dword_AA8C88); else v32(&dword_AA8C68); v33 = *(_DWORD *)(v12 + 224); v54 = **(_DWORD **)(v10 + 4 * v23 + 1216); v34 = (char *)sub_40A910(1330064687); v35 = sub_7549E0(v34, v33); (*(void (__thiscall **)(_DWORD, char *))(v54 + 472))(*(_DWORD *)(v10 + 4 * v23 + 1216), v35); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v10 + 4 * v23 + 1220) + 472))(" "); v23 += 2; v55 = v23; } } goto LABEL_40; } if ( !v56 ) { v24 = sub_680740(byte_AD9238); v25 = (unsigned int)(v53 * *(_DWORD *)(v12 + 220)) < *(_DWORD *)(v24 + 55); v26 = *(void (__stdcall **)(int *))(**(_DWORD **)(v10 + 4 * v23 + 1216) + 468); if ( v25 ) v26(&dword_AA8C68); else v26(&dword_AA8C88); v27 = v53 * *(_DWORD *)(v12 + 220); v54 = **(_DWORD **)(v10 + 4 * v23 + 1216); v28 = sub_40C190(-722914774); v29 = sub_7549E0("%s: %d", v28, v27); (*(void (__thiscall **)(_DWORD, char *))(v54 + 472))(*(_DWORD *)(v10 + 4 * v23 + 1216), v29); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v10 + 4 * v23 + 1220) + 472))(" "); v23 += 2; v55 = v23; } } if ( *(_DWORD *)(v12 + 224) ) goto LABEL_34; LABEL_40: if ( *(_DWORD *)(v12 + 228) && !v56 ) { if ( *(unsigned int *)(v12 + 228) >= (unsigned __int64)sub_6815F0(byte_AD9238) ) (*(void (__stdcall **)(int *, int, int))(**(_DWORD **)(v10 + 4 * v23 + 1216) + 468))(&dword_AA8C88, v44, v45); else (*(void (__stdcall **)(int *, int, int))(**(_DWORD **)(v10 + 4 * v23 + 1216) + 468))(&dword_AA8C68, v44, v45); v57 = 0; memset(&v58, 0, 0xFFu); v36 = v53; v37 = sub_40A910(2056820958); sprintf(&v57, v37, v36); v54 = **(_DWORD **)(v10 + 4 * v23 + 1216); v38 = sub_40A910(-681690050); v39 = sub_7549E0("%s %d %s", &v57, *(_DWORD *)(v12 + 228), v38); (*(void (__thiscall **)(_DWORD, char *))(v54 + 472))(*(_DWORD *)(v10 + 4 * v23 + 1216), v39); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v10 + 4 * v23 + 1220) + 472))(" "); sub_6815F0(byte_AD9238); LODWORD(v52) = v53 * *(_DWORD *)(v12 + 228); (*(void (**)(void))(**(_DWORD **)(v10 + 4 * v23 + 1224) + 468))(); v54 = **(_DWORD **)(v10 + 4 * v23 + 1224); v40 = sub_40A910(-681690050); v41 = v53 * *(_DWORD *)(v12 + 228); v42 = sub_40C190(-1632458504); v43 = sub_7549E0("%s %d %s", v42, v41, v40); (*(void (__thiscall **)(_DWORD, char *))(v54 + 472))(*(_DWORD *)(v10 + 4 * v23 + 1224), v43); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v10 + 4 * v23 + 1228) + 472))(" "); v23 += 4; v55 = v23; } if ( !*(_DWORD *)(v12 + 224) ) { sub_5452F0((_DWORD **)v10, (unsigned __int16 *)v12, v53, a8, &v55, 2); v23 = v55; } *v51 = v23; } // 547EE0: could not find valid save-restore pair for ebx // 547EE0: could not find valid save-restore pair for esi // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (005484F0) -------------------------------------------------------- _DWORD *__userpurge sub_5484F0@(_DWORD **a1@, int a2@, int a3, int a4, int a5, _DWORD *a6, __int64 a7, int a8, char a9) { _DWORD *result; // eax _DWORD **v10; // esi int v11; // ST18_4 int v12; // ebx unsigned __int16 v13; // di char *v14; // ebx int v15; // edx unsigned __int16 *v16; // edi char *v17; // [esp+4h] [ebp-18h] _DWORD *v18; // [esp+8h] [ebp-14h] int v19; // [esp+Ch] [ebp-10h] int v20; // [esp+10h] [ebp-Ch] char v21; // [esp+14h] [ebp-8h] _DWORD *v22; // [esp+18h] [ebp-4h] int v23; // [esp+24h] [ebp+8h] _DWORD *v24; // [esp+24h] [ebp+8h] result = a6; v10 = a1; if ( *a6 < 80 ) { v11 = a2; v22 = 0; sub_6807E0(byte_AD9238); v12 = dword_ACB230; v13 = a3; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a3, v11) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v12 + 200) ) { v15 = *(_DWORD *)(v12 + 196); if ( *(_DWORD *)(v15 + 4 * (unsigned __int16)a3) ) v14 = *(char **)(v15 + 4 * (unsigned __int16)a3); else v14 = 0; } else { v14 = 0; } } else { v14 = 0; } v23 = dword_ACDA70; result = (_DWORD *)(*(int (**)(void))(*(_DWORD *)dword_ACDA70 + 16))(); if ( (_BYTE)result ) { result = (_DWORD *)v23; if ( v13 <= *(_WORD *)(v23 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v23 + 196) + 4 * v13); if ( *result ) { result = (_DWORD *)*result; v24 = result; } else { v24 = 0; } } else { v24 = 0; } } else { v24 = 0; } if ( v14 ) { result = v24; if ( v24 ) { v16 = (unsigned __int16 *)a8; v18 = v24; v19 = a4; v21 = 0; v17 = v14; v20 = a8; sub_541FC0(v10, (float *)&v17, &v22); sub_53FB70((int)v10, (int)v16, v16, &v22); sub_545F50((int)v10, (int)v16, (LONG)v24, a4, (int *)v16, (int *)&v22, a5); sub_5404F0(v10, v14, (int *)&v22); sub_5418C0(v10, v14, (int *)&v22); sub_541120(v10, a8, &v22); sub_541F40(v10, a8, &v22); sub_5452F0(v10, (unsigned __int16 *)v14, a5, a7, &v22, a9 != 0); result = v22; *a6 = v22; } } } return result; } // 5484F0: could not find valid save-restore pair for edi // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (00548670) -------------------------------------------------------- int __thiscall sub_548670(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // esi signed int v4; // edi int result; // eax int v6; // ebx int v7; // esi int v8; // edi int v9; // esi int v10; // ecx __int64 v11; // ST10_8 int v12; // ST08_4 int v13; // ST00_4 int v14; // [esp+Ch] [ebp-4h] v2 = this; v14 = (int)this; sub_53DCC0(this); v3 = (int)(v2 + 304); v4 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9CA233); result = (*(int (__stdcall **)(int *))(**(_DWORD **)v3 + 468))(&dword_AA8C68); v3 += 4; --v4; } while ( v4 ); v6 = a2; if ( a2 ) { v7 = dword_ACB230; v8 = *(unsigned __int16 *)(a2 + 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v8) ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { v10 = *(_DWORD *)(v7 + 196); if ( *(_DWORD *)(v10 + 4 * v8) ) v9 = *(_DWORD *)(v10 + 4 * v8); else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACDA70 + 16))(*(unsigned __int16 *)(v6 + 1)); if ( v9 ) { v11 = *(unsigned int *)(v9 + 211); v12 = *(_DWORD *)(v9 + 106); v13 = *(unsigned __int16 *)(v6 + 1); a2 = 0; sub_547EE0(v14, v6, v9, v13, 0, v12, &a2, v11); } *(_DWORD *)(v14 + 1616) = 0; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) result = sub_50AF40(*(char **)(result + 1008)); } return result; } // AA8C68: using guessed type int dword_AA8C68; // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (00548770) -------------------------------------------------------- _DWORD *__thiscall sub_548770(_DWORD **this, int a2, __int64 a3, int a4) { _DWORD **v4; // ebx int v5; // esi signed int v6; // edi _DWORD *result; // eax unsigned __int16 *v8; // esi int v9; // edi int (__thiscall *v10)(unsigned __int16 *); // edx int v11; // ebx int v12; // eax _DWORD **v13; // [esp+Ch] [ebp-4h] v4 = this; v13 = this; sub_53DCC0(this); v5 = (int)(v4 + 304); v6 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v5 + 472))(&unk_9CA23E); result = (_DWORD *)(*(int (__stdcall **)(int *))(**(_DWORD **)v5 + 468))(&dword_AA8C68); v5 += 4; --v6; } while ( v6 ); v8 = (unsigned __int16 *)a2; if ( a2 ) { v9 = *(_DWORD *)(a2 + 112); v4[404] = (_DWORD *)a2; v4[405] = (_DWORD *)v9; if ( v9 ) { v10 = *(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v8 + 12); a2 = 0; v11 = v10(v8); v12 = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v8 + 36))(v8); if ( *(_DWORD *)(v9 + 102) == 23 ) { v11 = 1; v12 = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v8 + 40))(v8); } result = sub_5484F0(v13, v9, v8[4], v12, v11, &a2, a3, (int)v8, 1); } } return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (00548830) -------------------------------------------------------- _DWORD *__thiscall sub_548830(_DWORD **this, int a2, __int64 a3, int a4, int a5) { _DWORD **v5; // ebx int v6; // esi signed int v7; // edi _DWORD *result; // eax unsigned __int16 *v9; // ecx int v10; // esi int v11; // ST18_4 __int64 v12; // ST10_8 int v13; // ST08_4 int (*v14)(void); // edx int v15; // eax v5 = this; sub_53DCC0(this); v6 = (int)(v5 + 304); v7 = 80; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v6 + 472))(&unk_9CA261); result = (_DWORD *)(*(int (__stdcall **)(int *))(**(_DWORD **)v6 + 468))(&dword_AA8C68); v6 += 4; --v7; } while ( v7 ); v9 = (unsigned __int16 *)a2; if ( a2 ) { result = *(_DWORD **)(a2 + 112); v5[404] = (_DWORD *)a2; v5[405] = result; if ( result ) { v10 = v9[4]; v11 = (int)v9; v12 = a3; v13 = a4; v14 = *(int (**)(void))(*(_DWORD *)v9 + 36); a2 = 0; v15 = v14(); result = sub_5484F0(v5, 0, v10, v15, v13, &a2, v12, v11, 0); } } return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (005488D0) -------------------------------------------------------- _DWORD *__thiscall sub_5488D0(_DWORD **this, int a2, int a3) { _DWORD *result; // eax result = (_DWORD *)a2; if ( a2 ) result = sub_548770(this, a2, *(unsigned int *)(*(_DWORD *)(a2 + 112) + 215), a3); return result; } //----- (00548900) -------------------------------------------------------- int __cdecl sub_548900(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA50; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA50 + 16))(dword_ACDA50, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA50: using guessed type int dword_ACDA50; //----- (00548950) -------------------------------------------------------- int __cdecl sub_548950(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA6C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA6C + 16))(dword_ACDA6C, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA6C: using guessed type int dword_ACDA6C; //----- (005489A0) -------------------------------------------------------- int sub_5489A0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD91C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD91C: using guessed type int dword_ACD91C; //----- (005489C0) -------------------------------------------------------- int sub_5489C0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA80 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA80: using guessed type int dword_ACDA80; //----- (005489E0) -------------------------------------------------------- int sub_5489E0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACEA9C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACEA9C: using guessed type int dword_ACEA9C; //----- (00548A00) -------------------------------------------------------- void *__thiscall sub_548A00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemInfoWin::`vftable'; *((_DWORD *)this + 58) = &ItemInfoWin::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CA840: using guessed type void *ItemInfoWin::`vftable'; // 9CA85C: using guessed type void *ItemInfoWin::`vftable'; //----- (00548A40) -------------------------------------------------------- int sub_548A40() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACB230 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACB230: using guessed type int dword_ACB230; //----- (00548A60) -------------------------------------------------------- int sub_548A60() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD958 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD958: using guessed type int dword_ACD958; //----- (00548A80) -------------------------------------------------------- int sub_548A80() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD95C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD95C: using guessed type int dword_ACD95C; //----- (00548AA0) -------------------------------------------------------- int sub_548AA0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD944 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD944: using guessed type int dword_ACD944; //----- (00548AC0) -------------------------------------------------------- int sub_548AC0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD950 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD950: using guessed type int dword_ACD950; //----- (00548AE0) -------------------------------------------------------- int sub_548AE0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD974 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD974: using guessed type int dword_ACD974; //----- (00548B00) -------------------------------------------------------- char *__cdecl sub_548B00(unsigned __int16 a1, unsigned int a2, unsigned __int16 a3) { int v3; // esi int v4; // edx int v5; // eax int v6; // esi int v7; // eax unsigned int v8; // ecx int v9; // edx int v10; // edi int *v11; // eax int v12; // edi unsigned int v13; // eax const CHAR *v14; // eax int v15; // edi int v16; // ecx _BYTE *v17; // ebx int v18; // esi int v19; // ST08_4 char *v20; // eax char *result; // eax int v22; // ST08_4 char *v23; // eax _BYTE *v24; // eax int v25; // esi int v26; // [esp-4h] [ebp-44h] unsigned int v27; // [esp+10h] [ebp-30h] unsigned int v28; // [esp+14h] [ebp-2Ch] char v29[4]; // [esp+18h] [ebp-28h] char v30; // [esp+1Ch] [ebp-24h] v3 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a1) ) return (char *)&byte_9A8050; if ( a1 > *(_WORD *)(v3 + 200) ) return (char *)&byte_9A8050; v4 = *(_DWORD *)(v3 + 196); if ( !*(_DWORD *)(v4 + 4 * a1) ) return (char *)&byte_9A8050; v5 = *(_DWORD *)(v4 + 4 * a1); if ( !v5 ) return (char *)&byte_9A8050; *(_DWORD *)v29 = v5 + 34; v6 = sub_74CC20(dword_B9DE68, a1, a2, &v27); if ( !v6 ) return (char *)&byte_9A8050; v7 = sub_74CC60(dword_B9DE68, a1, v27); v8 = *(_DWORD *)(v6 + 35); if ( v7 ) { v9 = *(_DWORD *)(v7 + 35); if ( v8 != v9 ) v8 -= v9; v28 = 100 * (a2 - v9) / v8; } else { v28 = v8 ? 100 * a2 / v8 : 100 * a2; } v10 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a3) ) return (char *)&byte_9A8050; if ( a3 > *(_WORD *)(v10 + 200) ) return (char *)&byte_9A8050; v11 = (int *)(*(_DWORD *)(v10 + 196) + 4 * a3); if ( !*v11 ) return (char *)&byte_9A8050; v12 = *v11; if ( !*v11 ) return (char *)&byte_9A8050; if ( v27 < 9 && (v13 = sub_74CB80(dword_B9DE68, a1), v13 > v27) ) { sprintf(&v30, "%d%%", v28); } else { v14 = sub_40C190(-1499206160); sprintf(&v30, "%s", v14); } v15 = v12 + 278; if ( *(_WORD *)(v6 + 39) ) { v16 = *(unsigned __int16 *)(v6 + 41) - 1000; v17 = (_BYTE *)(v6 + 3); v18 = v6 + 19; v26 = v16 / 10; if ( *v17 ) { v22 = *(_DWORD *)v29; v23 = (char *)sub_40C190(742542413); result = sub_7549E0(v23, v17, v22, v18, v15, &v30, v26); } else { v19 = *(_DWORD *)v29; v20 = (char *)sub_40C190(725765197); result = sub_7549E0(v20, v19, v18, v15, &v30, v26); } } else { v24 = (_BYTE *)(v6 + 3); v25 = v6 + 19; if ( *v24 ) result = sub_7549E0("%s %s %s %s: %s", v24, *(_DWORD *)v29, v25, v15, &v30); else result = sub_7549E0("%s %s %s: %s", *(_DWORD *)v29, v25, v15, &v30); } return result; } // ACB230: using guessed type int dword_ACB230; // ACDA48: using guessed type int dword_ACDA48; //----- (00548D80) -------------------------------------------------------- int __cdecl sub_548D80(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_548A60() ) return 0; while ( strcmp((const char *)sub_7474E0((_DWORD *)(dword_ACD958 + 4), v1), a1) ) { if ( ++v1 >= sub_548A60() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD958 + 4), v1); } // ACD958: using guessed type int dword_ACD958; //----- (00548E10) -------------------------------------------------------- int __cdecl sub_548E10(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_548A80() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACD95C + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_548A80() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD95C + 4), v1); } // ACD95C: using guessed type int dword_ACD95C; //----- (00548EA0) -------------------------------------------------------- _WORD *__cdecl sub_548EA0(__int16 a1) { _WORD *result; // eax unsigned int v2; // esi if ( a1 == -1 ) return 0; v2 = 0; if ( !sub_548AA0() ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD944 + 4), v2); if ( *result == a1 ) break; if ( ++v2 >= sub_548AA0() ) return 0; } return result; } // ACD944: using guessed type int dword_ACD944; //----- (00548EF0) -------------------------------------------------------- int __cdecl sub_548EF0(const char *a1) { int result; // eax unsigned int v2; // esi if ( !a1 ) return 0; v2 = 0; if ( !sub_548AA0() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v2); if ( result ) { if ( !strcmp((const char *)(result + 2), a1) ) break; } if ( ++v2 >= sub_548AA0() ) return 0; } return result; } // ACD944: using guessed type int dword_ACD944; //----- (00548F70) -------------------------------------------------------- int __cdecl sub_548F70(int a1) { unsigned int v1; // esi int result; // eax v1 = 0; if ( !sub_548AC0() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD950 + 4), v1); if ( *(_DWORD *)(result + 134) == a1 ) break; if ( ++v1 >= sub_548AC0() ) return 0; } return result; } // ACD950: using guessed type int dword_ACD950; //----- (00548FB0) -------------------------------------------------------- int __cdecl sub_548FB0(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_548AE0() ) return 0; while ( strcmp((const char *)sub_7474E0((_DWORD *)(dword_ACD974 + 4), v1), a1) ) { if ( ++v1 >= sub_548AE0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD974 + 4), v1); } // ACD974: using guessed type int dword_ACD974; //----- (00549040) -------------------------------------------------------- int sub_549040() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD97C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD97C: using guessed type int dword_ACD97C; //----- (00549060) -------------------------------------------------------- int __cdecl sub_549060(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_5489A0() ) return 0; while ( strcmp((const char *)sub_7474E0((_DWORD *)(dword_ACD91C + 4), v1), a1) ) { if ( ++v1 >= sub_5489A0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD91C + 4), v1); } // ACD91C: using guessed type int dword_ACD91C; //----- (005490F0) -------------------------------------------------------- int __cdecl sub_5490F0(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_5489C0() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACDA80 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_5489C0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA80 + 4), v1); } // ACDA80: using guessed type int dword_ACDA80; //----- (00549180) -------------------------------------------------------- int __cdecl sub_549180(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_5489E0() ) return 0; while ( 1 ) { sub_7474E0((_DWORD *)(dword_ACEA9C + 4), v1); if ( !strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACEA9C + 4), v1) + 2), a1) ) break; if ( ++v1 >= sub_5489E0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACEA9C + 4), v1); } // ACEA9C: using guessed type int dword_ACEA9C; //----- (00549220) -------------------------------------------------------- int __cdecl sub_549220(void *a1, int a2, int a3, int a4, int a5, int a6) { int v6; // eax unsigned int v7; // esi int v8; // eax unsigned __int8 *v9; // ebx unsigned int v10; // eax unsigned int v11; // edi unsigned int v12; // esi int v13; // ecx unsigned __int8 *v14; // eax int v15; // eax int v17; // [esp+10h] [ebp-18h] unsigned int v18; // [esp+14h] [ebp-14h] unsigned int v19; // [esp+18h] [ebp-10h] v6 = *(_DWORD *)(dword_ACD944 + 56); v7 = 0; if ( v6 ) v19 = *(_DWORD *)(v6 + 40); else v19 = 0; v18 = 0; if ( v19 <= 0 ) { LABEL_15: if ( (unsigned int)a6 >= 0x10 ) operator delete(a1); return 0; } while ( 1 ) { v8 = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v7); v17 = v8; if ( v8 ) break; LABEL_14: v18 = ++v7; if ( v7 >= v19 ) goto LABEL_15; } v9 = (unsigned __int8 *)(v8 + 98); v10 = strlen((const char *)(v8 + 98)); v11 = a5; v12 = v10; v13 = a5; if ( a5 >= v10 ) v13 = v10; v14 = (unsigned __int8 *)a1; if ( (unsigned int)a6 < 0x10 ) v14 = (unsigned __int8 *)&a1; v15 = sub_40C0B0(v14, v9, v13); if ( v15 || v11 < v12 || (LOBYTE(v15) = v11 != v12, v15) ) { v7 = v18; goto LABEL_14; } if ( (unsigned int)a6 >= 0x10 ) operator delete(a1); return v17; } // ACD944: using guessed type int dword_ACD944; //----- (00549330) -------------------------------------------------------- int __cdecl sub_549330(char *a1) { int v1; // eax unsigned int v2; // esi int v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl int v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACDA10 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACDA10 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, (void *)(v3 + 32), strlen((const char *)(v3 + 32))); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACDA10: using guessed type int dword_ACDA10; //----- (00549490) -------------------------------------------------------- int __cdecl sub_549490(char *a1) { int v1; // eax unsigned int v2; // esi int v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl int v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACB380 + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACB380 + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, (void *)(v3 + 36), strlen((const char *)(v3 + 36))); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACB380: using guessed type int dword_ACB380; //----- (005496A0) -------------------------------------------------------- char __thiscall sub_5496A0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ecx int v6; // ecx v3 = this; if ( a2 == 5 ) { v6 = this[74]; sub_4B66E0(); LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v3); } else { LOBYTE(v4) = a2 - 6; if ( a2 == 6 ) { v5 = (_DWORD *)this[74]; if ( v5 ) LOBYTE(v4) = (unsigned int)sub_8EEE70(v5, 185, 0, 0); } else { LOBYTE(v4) = a2 - 7; if ( a2 == 7 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "MallMenu"); } } } return (char)v4; } //----- (00549720) -------------------------------------------------------- char __thiscall sub_549720(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // edi volatile LONG **v16; // edi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // edi volatile LONG v20; // ST54_4 const CHAR *v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // edx int v24; // edi int v25; // ST54_4 int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ST54_4 const CHAR *v29; // eax volatile LONG **v30; // edi volatile LONG *v31; // edx int v32; // edi int v33; // ST54_4 int v34; // eax volatile LONG *v35; // edi volatile LONG v36; // ST54_4 const CHAR *v37; // eax volatile LONG **v38; // edi volatile LONG *v39; // edx int v40; // edi int v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax void (__thiscall ***v45)(_DWORD, signed int); // esi int v46; // [esp+54h] [ebp-20h] int v47; // [esp+58h] [ebp-1Ch] int v48; // [esp+5Ch] [ebp-18h] int v49; // [esp+60h] [ebp-14h] int v50; // [esp+64h] [ebp-10h] int v51; // [esp+70h] [ebp-4h] int v52; // [esp+7Ch] [ebp+8h] int v53; // [esp+7Ch] [ebp+8h] v2 = this; v50 = 0; v3 = dword_BA6BA0; v51 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MallMenu.nif"); sub_8F66B0(v4, (int)&v50, v3); if ( !v50 ) return 0; v5 = sub_8FB140(v50, (int)"Frame", (int)&v48, (int)&v49, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"ItemMallMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v50; v51 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v49; v9 = v48; v52 = v49; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v50, (int)"Theme", (int)&v48, (int)&v49, v10); else v11 = sub_8FB140(v50, (int)"Theme", (int)&v48, (int)&v49, 0); sub_8F3EB0(v48 - v9, v49 - v8, (int)v11, (int)v2, 0, 0); v12 = sub_8FB140(v50, (int)"Panel01", (int)&v48, (int)&v49, 0); sub_8F3EB0(v48 - v9, v49, (int)v12, (int)v2, 0, 0); v13 = sub_8FB140(v50, (int)"Panel02", (int)&v48, (int)&v49, 0); sub_8F3EB0(v48 - v9, v49, (int)v13, (int)v2, 0, 0); v14 = sub_8FB140(v50, (int)"ClsNor", (int)&v48, (int)&v49, 0); sub_8FB650(v14, v50, (int)"ClsClick"); sub_8FB650(v14, v50, (int)"ClsOver"); sub_90C8D0(v48 - v9, v49 - v52, (int)v14, (int)v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v50 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v50, (int)"HelpLinkNor", (int)&v48, (int)&v49, v15); sub_8FB650(v16, v50, (int)"HelpLinkClick"); sub_8FB650(v16, v50, (int)"HelpLinkOver"); sub_8FE0F0(v48 - v9, v49 - v52, (int)v16, (int)v2, 7, 0, 0); } if ( sub_8F71E0(v50, (int)"WinTitle", &v48, &v49, &v46, &v47) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v48 - v9, v49, v46, v47, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v20 = *v19; v21 = sub_40C190(-200614086); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v22 = sub_8FB140(v50, (int)"Btn01Nor", (int)&v48, (int)&v49, 0); sub_8FB650(v22, v50, (int)"Btn01Click"); sub_8FB650(v22, v50, (int)"Btn01Over"); sub_8FE0F0(v48 - v9, v49, (int)v22, (int)v2, 5, 0, 0); v23 = v22[9]; v24 = *(_DWORD *)(*v23 + 24); v25 = *(_DWORD *)(*v23 + 20); v26 = sub_421050(0); v27 = sub_8F4A20(v48 - v9, v49 + 1, v25, v24, v26, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v27; v29 = sub_40C190(2090654440); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = sub_8FB140(v50, (int)"Btn02Nor", (int)&v48, (int)&v49, 0); sub_8FB650(v30, v50, (int)"Btn02Click"); sub_8FB650(v30, v50, (int)"Btn02Over"); sub_8FE0F0(v48 - v9, v49, (int)v30, (int)v2, 6, 0, 0); v31 = v30[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v48 - v9, v49 + 1, v33, v32, v34, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); v36 = *v35; v37 = sub_40C190(153644192); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v38 = sub_8FB140(v50, (int)"Btn03Nor", (int)&v48, (int)&v49, 0); sub_8FB650(v38, v50, (int)"Btn03Click"); sub_8FB650(v38, v50, (int)"Btn03Over"); sub_90C8D0(v48 - v9, v49 - v52, (int)v38, (int)v2); v39 = v38[9]; v40 = *(_DWORD *)(*v39 + 24); v53 = *(_DWORD *)(*v39 + 20); v41 = sub_421050(0); v42 = sub_8F4A20(v48 - v9, v49 + 1, v53, v40, v41, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40C190(-1612186628); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v51 = -1; if ( v50 ) { v45 = (void (__thiscall ***)(_DWORD, signed int))v50; if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v45 ) (**v45)(v45, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v50; v51 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00549D20) -------------------------------------------------------- int __cdecl sub_549D20(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ItemMallMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &ItemMallMenuWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CABE4: using guessed type void *ItemMallMenuWin::`vftable'; // 9CAC04: using guessed type void *ItemMallMenuWin::`vftable'; //----- (00549E60) -------------------------------------------------------- void *__thiscall sub_549E60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemMallMenuWin::`vftable'; *((_DWORD *)this + 58) = &ItemMallMenuWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CABE4: using guessed type void *ItemMallMenuWin::`vftable'; // 9CAC04: using guessed type void *ItemMallMenuWin::`vftable'; //----- (00549F20) -------------------------------------------------------- char sub_549F20() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCItem"); return (char)v0; } //----- (00549F80) -------------------------------------------------------- unsigned int __thiscall sub_549F80(_DWORD *this) { int v1; // eax int v2; // eax unsigned int result; // eax v1 = this[86]; if ( v1 ) { if ( v1 == 1 ) { v2 = sub_631050(); } else if ( v1 == 3 ) { v2 = sub_6310D0(); } else { v2 = sub_631060(); } } else { v2 = sub_631040(); } if ( v2 ) result = (v2 - 1) / 0x2Au + 1; else result = 1; return result; } //----- (00549FD0) -------------------------------------------------------- int __thiscall sub_549FD0(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < 0x2A ) result = this[a2 + 89]; else result = 0; return result; } //----- (00549FF0) -------------------------------------------------------- char *__thiscall sub_549FF0(int **this, __int16 a2) { int **v2; // ebx int v3; // edi int v4; // eax unsigned int v5; // esi int v6; // eax unsigned int v8; // [esp+Ch] [ebp-4h] int **v9; // [esp+18h] [ebp+8h] v2 = this; v3 = sub_6313C0(a2); v4 = sub_6310D0(); v5 = 0; v8 = v4 - v3; if ( v4 != v3 ) { v9 = &v2[v3 + 90]; do { v6 = sub_575100(*v9); if ( v2[86] == (int *)3 ) { if ( v5 + v3 == 41 ) sub_575290((&v2[v5 + 89])[v3], 0); else sub_575290((&v2[v5 + 89])[v3], v6); } ++v9; ++v5; } while ( v5 < v8 ); } return sub_631320((char *)v3); } //----- (0054A080) -------------------------------------------------------- int *__thiscall sub_54A080(_DWORD **this, _WORD *a2) { _DWORD **v2; // esi int v3; // eax int v4; // edi int *result; // eax v2 = this; v3 = sub_6310D0(); v4 = v3; result = (int *)sub_575100(v2[v3 + 89]); if ( !result || !*result ) { result = sub_631370(a2); if ( v2[86] == (_DWORD *)3 ) result = (int *)sub_5753D0(v2[v4 + 89], (int)result); } return result; } //----- (0054A1A0) -------------------------------------------------------- LONG __thiscall sub_54A1A0(_DWORD *this) { _DWORD *v1; // esi int v2; // ST10_4 v1 = this; *this = &ItemShopWin::`vftable'; this[58] = &ItemShopWin::`vftable'; v2 = (int)(this + 155); *(_DWORD *)v2 = &NiTMap>::`vftable'; sub_940360(this + 155); *(_DWORD *)v2 = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); v1[134] = &DropContents::`vftable'; v1[131] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9CB274: using guessed type void *ItemShopWin::`vftable'; // 9CB294: using guessed type void *ItemShopWin::`vftable'; //----- (0054A250) -------------------------------------------------------- void __thiscall sub_54A250(_DWORD **this, int a2) { int v2; // esi _DWORD **v3; // edi int v4; // eax int v5; // ebx int v6; // eax int v7; // esi int v8; // esi int v9; // edi int v10; // esi int *v11; // eax unsigned int v12; // ebx _DWORD *v13; // esi const CHAR *v14; // eax unsigned int v15; // ebx _DWORD **v16; // [esp+Ch] [ebp-4h] int v17; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; v16 = this; v4 = sub_5750D0(this[a2 + 89]); v5 = v4; v17 = v4; v6 = sub_575100(v3[v2 + 89]); v7 = v6; if ( v5 ) { v8 = dword_ACB230; v9 = *(unsigned __int16 *)(v5 + 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) ) { v11 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v9); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } v12 = *(_DWORD *)(v10 + 211); if ( v12 > sub_680E60(byte_AD9238) ) { v13 = v16[74]; LABEL_11: v14 = sub_40C190(810500413); sub_492060(v13, (int)v14); return; } sub_4B7A80(v16[74], *(_WORD *)(v17 + 1), *(_DWORD *)(v10 + 106)); } else if ( v6 ) { v15 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v6 + 112) + 215); if ( v15 > sub_680E60(byte_AD9238) ) { v13 = v16[74]; goto LABEL_11; } sub_4C09C0(v16[74], *(_WORD *)(v7 + 4)); } } // ACB230: using guessed type int dword_ACB230; //----- (0054A380) -------------------------------------------------------- void __thiscall sub_54A380(int **this) { int **v1; // edi int *v2; // esi unsigned int v3; // ebx int *v4; // eax unsigned int v5; // esi char *v6; // eax int *v7; // ebx char *v8; // esi float *v9; // eax float *v10; // eax float *v11; // eax float *v12; // eax unsigned int v13; // ebx char *v14; // eax _DWORD *v15; // esi char *v16; // edi float *v17; // eax float *v18; // eax int *v19; // eax unsigned int v20; // ebx char *v21; // eax _DWORD *v22; // esi char *v23; // edi float *v24; // eax float *v25; // eax int *v26; // eax int v27; // eax unsigned int v28; // ecx int v29; // esi char *v30; // eax int **v31; // [esp+14h] [ebp-1Ch] unsigned int v32; // [esp+18h] [ebp-18h] int *v33; // [esp+18h] [ebp-18h] int *v34; // [esp+18h] [ebp-18h] unsigned int v35; // [esp+1Ch] [ebp-14h] unsigned int v36; // [esp+1Ch] [ebp-14h] unsigned int v37; // [esp+1Ch] [ebp-14h] unsigned int v38; // [esp+20h] [ebp-10h] unsigned int v39; // [esp+20h] [ebp-10h] unsigned int i; // [esp+20h] [ebp-10h] unsigned int v41; // [esp+20h] [ebp-10h] v31 = this; v1 = this + 89; if ( this[89] ) { v2 = (int *)(this + 89); v3 = 42; do { sub_5750E0(*v2, v3, 0); sub_5753D0((int *)*v2, 0); ++v2; --v3; } while ( v3 ); v4 = v31[86]; v5 = 42 * (_DWORD)v31[87]; if ( v4 ) { if ( v4 == (int *)1 ) { v39 = sub_631050(); v13 = v5; if ( v5 < v39 ) { v36 = 0; v33 = (int *)v1; do { if ( v36 >= 0x2A ) break; v14 = sub_631090(v13); v15 = (_DWORD *)*v33; v16 = v14; sub_5750E0(*v33, v13, (int)v14); if ( v16 && *(_WORD *)(v16 + 1) != -1 ) { v17 = sub_4388B0(); (*(void (__thiscall **)(_DWORD *, bool))(*v15 + 240))(v15, *((_BYTE *)v17 + 12) == 0); v18 = sub_4388B0(); sub_5D4A30(v15, *((_BYTE *)v18 + 12)); } ++v33; ++v36; ++v13; } while ( v13 < v39 ); } } else if ( v4 == (int *)3 ) { for ( i = sub_6310D0(); v5 < i; ++v3 ) { if ( v3 >= 0x2A ) break; v19 = sub_6310E0(v5); sub_5753D0(*v1, (int)v19); ++v5; ++v1; } } else { v41 = sub_631060(); v20 = v5; if ( v5 < v41 ) { v37 = 0; v34 = (int *)v1; do { if ( v37 >= 0x2A ) break; v21 = sub_6310B0(v20); v22 = (_DWORD *)*v34; v23 = v21; sub_5750E0(*v34, v20, (int)v21); if ( v23 && *(_WORD *)(v23 + 1) != -1 ) { v24 = sub_4388B0(); (*(void (__thiscall **)(_DWORD *, bool))(*v22 + 240))(v22, *((_BYTE *)v24 + 12) == 0); v25 = sub_4388B0(); sub_5D4A30(v22, *((_BYTE *)v25 + 12)); } ++v34; ++v37; ++v20; } while ( v20 < v41 ); } } } else { v38 = sub_631040(); v35 = v5; if ( v5 < v38 ) { v32 = 0; do { if ( v32 >= 0x2A ) break; v6 = sub_631070(v35); v7 = *v1; v8 = v6; sub_5750E0((int)v7, (int)v7, (int)v6); if ( v8 && *(_WORD *)(v8 + 1) != -1 ) { v9 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v10 = (float *)operator new(0xB4u); if ( v10 ) v9 = sub_4546A0(v10); else v9 = 0; dword_ACCFE0 = (int)v9; } (*(void (__thiscall **)(int *, bool))(*v7 + 240))(v7, *((_BYTE *)v9 + 12) == 0); v11 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v12 = (float *)operator new(0xB4u); if ( v12 ) v11 = sub_4546A0(v12); else v11 = 0; dword_ACCFE0 = (int)v11; } sub_5D4A30(v7, *((_BYTE *)v11 + 12)); } ++v32; ++v1; ++v35; } while ( v35 < v38 ); } } if ( ((unsigned __int8 (__thiscall *)(int **))(*v31)[65])(v31) ) { v26 = v31[86]; if ( v26 ) { if ( v26 == (int *)1 ) { v27 = sub_631050(); } else if ( v26 == (int *)3 ) { v27 = sub_6310D0(); } else { v27 = sub_631060(); } } else { v27 = sub_631040(); } if ( v27 ) v28 = (v27 - 1) / 0x2Au + 1; else v28 = 1; v29 = *v31[160]; v30 = sub_7549E0("%d / %d", (char *)v31[87] + 1, v28); (*(void (__thiscall **)(int *, char *))(v29 + 472))(v31[160], v30); } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054A6F0) -------------------------------------------------------- int __thiscall sub_54A6F0(_BYTE *this) { _DWORD **v1; // esi int result; // eax int v3; // edi unsigned int v4; // eax char *v5; // eax v1 = (_DWORD **)this; sub_8F28C0(this); result = ((int (__thiscall *)(_DWORD **))(*v1)[65])(v1); if ( (_BYTE)result ) { v3 = *v1[160]; v4 = sub_549F80(v1); v5 = sub_7549E0("%d / %d", (char *)v1[87] + 1, v4); result = (*(int (__thiscall **)(_DWORD *, char *))(v3 + 472))(v1[160], v5); } return result; } //----- (0054A740) -------------------------------------------------------- void __thiscall sub_54A740(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax bool v4; // zf int v5; // ebx int v6; // eax int v7; // edx int v8; // eax float *v9; // [esp-4h] [ebp-38h] float v10; // [esp+10h] [ebp-24h] float v11; // [esp+14h] [ebp-20h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float **v14; // [esp+20h] [ebp-14h] int v15; // [esp+24h] [ebp-10h] int v16; // [esp+30h] [ebp-4h] v2 = this; v3 = sub_6310D0(); if ( v2[87] == 3 ) { v2[154] = v3; return; } if ( v3 != v2[154] ) { v4 = v3 == 0; if ( v3 <= 0 ) goto LABEL_8; if ( v2[86] != 3 ) { *((_BYTE *)v2 + 612) = 1; v2[154] = v3; goto LABEL_10; } } v4 = v3 == 0; LABEL_8: if ( v4 ) v2[154] = 0; LABEL_10: if ( !*((_BYTE *)v2 + 612) ) return; v15 = 0; v16 = 0; sub_455570(v2 + 155, v2[159], &v15); v5 = v15; if ( !v15 ) { v6 = v2[152]; if ( !v6 ) { v16 = -1; sub_410C00(&v15); return; } v7 = v2[158]; v10 = 255.0; v9 = &v10; v11 = 250.0; v2[159] = v7; v12 = 205.0; v13 = 255.0; v8 = sub_455D00(v6, (int)v9); v14 = &v9; v9 = (float *)v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); sub_6688B0(v2 + 155, v2[159], (int)v9); } v16 = -1; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } //----- (0054A8E0) -------------------------------------------------------- _DWORD *__thiscall sub_54A8E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi void *v3; // eax size_t v4; // ST08_4 v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ItemShopWin::`vftable'; v1[58] = &ItemShopWin::`vftable'; v1[131] = &PgWinDrop::`vftable'; v1[132] = 0; v1[133] = 0; v2 = (int)(v1 + 134); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; v1[156] = 37; v1[155] = &NiTMapBase>,int,NiPointer>::`vftable'; v1[158] = 0; v3 = operator new[](0x94u); v4 = 4 * v1[156]; v1[157] = v3; memset(v3, 0, v4); v1[155] = &NiTMap>::`vftable'; v1[132] = v1 + 134; v1[87] = 0; v1[86] = 0; v1[88] = 0; memset(v1 + 89, 0, 0xA8u); v1[160] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9CB274: using guessed type void *ItemShopWin::`vftable'; // 9CB294: using guessed type void *ItemShopWin::`vftable'; //----- (0054AA10) -------------------------------------------------------- void __thiscall sub_54AA10(int **this) { int **v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) ) { if ( v1[86] ) { v1[86] = 0; v1[87] = 0; sub_54A380(v1); } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054AAB0) -------------------------------------------------------- void __thiscall sub_54AAB0(int **this) { int **v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) && v1[86] != (int *)1 ) { v1[86] = (int *)1; v1[87] = 0; sub_54A380(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054AB50) -------------------------------------------------------- void __thiscall sub_54AB50(int **this) { int **v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) && v1[86] != (int *)2 ) { v1[86] = (int *)2; v1[87] = 0; sub_54A380(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054ABF0) -------------------------------------------------------- void __thiscall sub_54ABF0(int **this) { int **v1; // esi float *v2; // eax float *v3; // eax int *v4; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) ) { v4 = v1[87]; if ( v4 ) v1[87] = (int *)((char *)v4 - 1); sub_54A380(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054AC80) -------------------------------------------------------- void __thiscall sub_54AC80(int **this) { int **v1; // esi float *v2; // eax float *v3; // eax int *v4; // eax unsigned int v5; // eax int *v6; // ecx v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) ) { v4 = v1[86]; if ( v4 ) { if ( v4 == (int *)1 ) { v5 = sub_631050(); } else if ( v4 == (int *)3 ) { v5 = sub_6310D0(); } else { v5 = sub_631060(); } } else { v5 = sub_631040(); } v6 = v1[87]; if ( 42 * ((signed int)v6 + 1) < v5 ) v1[87] = (int *)((char *)v6 + 1); sub_54A380(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054AD50) -------------------------------------------------------- int __usercall sub_54AD50@(int a1@, int a2@, int a3, int a4, int a5, int a6) { void *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x1CCu); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_575210((void **)v6, a1, a2); *(_DWORD *)v7 = &ShopInvWin::`vftable'; *(_DWORD *)(v7 + 232) = &ShopInvWin::`vftable'; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v7 + 616))(v7, a3, a4, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9CAFE8: using guessed type void *ShopInvWin::`vftable'; // 9CB004: using guessed type void *ShopInvWin::`vftable'; //----- (0054AEA0) -------------------------------------------------------- volatile LONG *__cdecl sub_54AEA0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x288u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_54A8E0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0054AFD0) -------------------------------------------------------- char __thiscall sub_54AFD0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi LONG v5; // eax char *v7; // eax volatile LONG **v8; // eax int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG **v15; // eax int v16; // eax volatile LONG *v17; // eax volatile LONG v18; // edx const CHAR *v19; // eax volatile LONG **v20; // eax volatile LONG **v21; // eax int v22; // eax _DWORD *v23; // ecx const char *v24; // eax volatile LONG *v25; // ST44_4 const char *v26; // eax volatile LONG *v27; // ST44_4 const char *v28; // eax volatile LONG *v29; // ST44_4 const char *v30; // eax const char *v31; // eax const char *v32; // eax volatile LONG **v33; // eax int v34; // eax volatile LONG *v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi int v37; // [esp+3Ch] [ebp-58h] volatile LONG *v38; // [esp+40h] [ebp-54h] int v39; // [esp+44h] [ebp-50h] int v40; // [esp+48h] [ebp-4Ch] volatile LONG *v41; // [esp+4Ch] [ebp-48h] int v42; // [esp+50h] [ebp-44h] int v43; // [esp+54h] [ebp-40h] int v44; // [esp+58h] [ebp-3Ch] _DWORD *v45; // [esp+5Ch] [ebp-38h] char v46; // [esp+60h] [ebp-34h] int v47; // [esp+90h] [ebp-4h] v2 = (int)this; v44 = 0; v47 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v41 = v3; if ( !v3 ) goto LABEL_31; v40 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\NPCItem.nif"); sub_8F66B0(v7, (int)&v44, v40); if ( !v44 ) return 0; v8 = sub_8FB140(v44, (int)"Frame", (int)&v43, (int)&v42, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"ItemShopWin", 0) ) { LABEL_31: v4 = (void (__thiscall ***)(_DWORD, signed int))v44; v47 = -1; if ( v44 ) { v5 = InterlockedDecrement((volatile LONG *)(v44 + 4)); goto LABEL_4; } return 0; } v9 = v43; v10 = v42; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v44, (int)"Theme", (int)&v43, (int)&v42, v11); else v12 = sub_8FB140(v44, (int)"Theme", (int)&v43, (int)&v42, 0); sub_8F3EB0(v43 - v9, v42 - v10, (int)v12, v2, 0, 0); v45 = sub_8FB140(v44, (int)"ClsNor", (int)&v43, (int)&v42, v41); sub_8FB650(v45, v44, (int)"ClsClick"); sub_8FB650(v45, v44, (int)"ClsOver"); sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 9, 0, 0); v40 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("HelpLinkNor") ) { v45 = sub_8FB140(v44, (int)"HelpLinkNor", (int)&v43, (int)&v42, (volatile LONG *)v40); sub_8FB650(v45, v44, (int)"HelpLinkClick"); sub_8FB650(v45, v44, (int)"HelpLinkOver"); sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 11, 0, 0); } v13 = sub_8FB140(v44, (int)"Panel01", (int)&v43, (int)&v42, v41); v14 = sub_8F3EB0(v43 - v9, v42 - v10, (int)v13, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v15 = sub_8FB140(v44, (int)"Panel02", (int)&v43, (int)&v42, v41); sub_8F3EB0(v43 - v9, v42 - v10, (int)v15, v2, 0, 0); if ( !sub_8F71E0(v44, (int)"WinTitle", &v43, &v42, &v39, &v37) ) { v47 = -1; sub_410C00(&v44); return 0; } v16 = sub_421050(0); v17 = sub_8F4A20(v43 - v9, v42 - v10 + 2, v39, v37, v16, v2, 0, 0); v18 = *v17; v45 = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(v18 + 488))(v17, 5); (*(void (__stdcall **)(int *))(*v45 + 468))(&dword_AA8D98); v40 = *v45 + 472; v19 = sub_40C190(-262716360); (*(void (__thiscall **)(_DWORD *, const CHAR *))v40)(v45, v19); (*(void (__stdcall **)(_DWORD))(*v45 + 240))(0); v20 = sub_8FB140(v44, (int)"IconSlot", (int)&v43, (int)&v42, v41); sub_8F3EB0(v43 - v9, v42 - v10, (int)v20, v2, 0, 0); v40 = 0; v45 = (_DWORD *)(v2 + 356); do { v38 = (volatile LONG *)(v40 + 1); sprintf(&v46, "IconSlot%03d", v40 + 1); v21 = sub_8FB140(v44, (int)&v46, (int)&v43, (int)&v42, v41); sub_8F3EB0(v43 - v9, v42 - v10, (int)v21, v2, 0, 0); v22 = sub_54AD50(v10, v9, v43 - v9 + 1, v42 - v10 + 1, v40, v2); *v45 = v22; sub_5750E0(v22, v10, 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v45 + 516))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v45 + 560))(1); v23 = v45; *(_DWORD *)(*v45 + 272) = dword_ACEC34; v40 = (int)v38; v45 = v23 + 1; } while ( (signed int)v38 < 42 ); v41 = (volatile LONG *)sub_43D0D0(0x1Du); v45 = sub_8FB140(v44, (int)"WeaNor", (int)&v43, (int)&v42, v41); sub_8FB650(v45, v44, (int)"WeaClick"); sub_8FB650(v45, v44, (int)"WeaOver"); v45 = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 2, 0, 0); v24 = sub_40C190(-603588372); sub_8F2EA0((void **)v45, v24); v25 = v41; v45[68] = dword_AD01E8; v45 = sub_8FB140(v44, (int)"ArmNor", (int)&v43, (int)&v42, v25); sub_8FB650(v45, v44, (int)"ArmClick"); sub_8FB650(v45, v44, (int)"ArmOver"); v45 = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 3, 0, 0); v26 = sub_40C190(-1678575624); sub_8F2EA0((void **)v45, v26); v27 = v41; v45[68] = dword_AD01E8; v45 = sub_8FB140(v44, (int)"AccNor", (int)&v43, (int)&v42, v27); sub_8FB650(v45, v44, (int)"AccClick"); sub_8FB650(v45, v44, (int)"AccOver"); v45 = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 4, 0, 0); v28 = sub_40C190(-1935628050); sub_8F2EA0((void **)v45, v28); v29 = v41; v45[68] = dword_AD01E8; v45 = sub_8FB140(v44, (int)"RepurchaseNor", (int)&v43, (int)&v42, v29); sub_8FB650(v45, v44, (int)"RepurchaseClick"); sub_8FB650(v45, v44, (int)"RepurchaseOver"); *(_DWORD *)(v2 + 608) = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 5, 0, 0); v30 = sub_4090F0(37301822); sub_8F2EA0(*(void ***)(v2 + 608), v30); *(_DWORD *)(*(_DWORD *)(v2 + 608) + 272) = dword_AD01E8; *(_BYTE *)(v2 + 612) = 0; *(_DWORD *)(v2 + 616) = 0; v41 = (volatile LONG *)sub_43D0D0(4u); v38 = (volatile LONG *)sub_43D0D0(0x1Cu); v45 = sub_8FB140(v44, (int)"PrePageNor", (int)&v43, (int)&v42, v38); sub_8FB650(v45, v44, (int)"PrePageClick"); sub_8FB650(v45, v44, (int)"PrePageOver"); v45 = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 6, 0, 0); v45[68] = dword_AD01E8; v31 = sub_4090F0(1787467888); sub_8F2EA0((void **)v45, v31); v45 = sub_8FB140(v44, (int)"NextPageNor", (int)&v43, (int)&v42, v38); sub_8FB650(v45, v44, (int)"NextPageClick"); sub_8FB650(v45, v44, (int)"NextPageOver"); v45 = sub_8FE0F0(v43 - v9, v42 - v10, (int)v45, v2, 7, 0, 0); v45[68] = dword_AD01E8; v32 = sub_4090F0(625253762); sub_8F2EA0((void **)v45, v32); v33 = sub_8FB140(v44, (int)"Number", (int)&v43, (int)&v42, v41); sub_8F3EB0(v43 - v9, v42 - v10, (int)v33, v2, 0, 0); if ( !sub_8F71E0(v44, (int)"Number01", &v43, &v42, &v39, &v37) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v44; v47 = -1; if ( v44 ) { v5 = InterlockedDecrement((volatile LONG *)(v44 + 4)); LABEL_4: if ( !v5 ) { if ( v4 ) (**v4)(v4, 1); } return 0; } return 0; } v34 = sub_421050(0); v35 = sub_8F4A20(v43 - v9, v42 - v10, v39, v37, v34, v2, 0, 0); *(_DWORD *)(v2 + 640) = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v47 = -1; if ( v44 ) { v36 = (void (__thiscall ***)(_DWORD, signed int))v44; if ( !InterlockedDecrement((volatile LONG *)(v44 + 4)) ) { if ( v36 ) (**v36)(v36, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0054B890) -------------------------------------------------------- void __thiscall sub_54B890(_DWORD *this) { _DWORD *v1; // edi float *v2; // eax float *v3; // eax int v4; // ST00_4 int v5; // esi volatile LONG *v6; // ebx int v7; // ST04_4 void (__stdcall ***v8)(signed int); // [esp+14h] [ebp-18h] int v9; // [esp+18h] [ebp-14h] _DWORD *v10; // [esp+1Ch] [ebp-10h] int v11; // [esp+28h] [ebp-4h] v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); v11 = 0; if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; v11 = -1; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 14) ) { if ( *((_BYTE *)v1 + 612) ) { v10 = 0; v4 = v1[159]; v11 = 1; sub_455570(v1 + 155, v4, (int *)&v10); v5 = (int)v10; if ( v10 ) { v6 = (volatile LONG *)sub_402BF0(v10); if ( v6 ) InterlockedIncrement(v6 + 1); LOBYTE(v11) = 2; if ( v6 ) { sub_455710((void *)v6, &v9, v5); sub_410C00(&v9); } sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v5); if ( v9 ) { v8 = (void (__stdcall ***)(signed int))v9; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v8 ) (**v8)(1); } } if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v7 = v1[159]; v5 = 0; v10 = 0; sub_916F40(v1 + 155, v7); LOBYTE(v11) = 1; if ( v6 && !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } *((_BYTE *)v1 + 612) = 0; v11 = -1; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } if ( v1[86] != 3 ) { v1[86] = 3; v1[87] = 0; sub_54A380((int **)v1); } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0054BA50) -------------------------------------------------------- void __thiscall sub_54BA50(int this, int a2, int a3) { switch ( a2 ) { case 1: sub_54A250((_DWORD **)this, a3); break; case 2: sub_54AA10((int **)this); break; case 3: sub_54AAB0((int **)this); break; case 4: sub_54AB50((int **)this); break; case 5: sub_54B890((_DWORD *)this); break; case 6: sub_54ABF0((int **)this); break; case 7: sub_54AC80((int **)this); break; case 9: sub_4A6C70(*(_DWORD **)(this + 296), 1); break; case 11: sub_549F20(); break; case 12: *(_DWORD *)(this + 348) = a3; sub_54A380((int **)this); break; default: return; } } //----- (0054BB10) -------------------------------------------------------- void *__thiscall sub_54BB10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ShopInvWin::`vftable'; *((_DWORD *)this + 58) = &ShopInvWin::`vftable'; sub_5750B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CAFE8: using guessed type void *ShopInvWin::`vftable'; // 9CB004: using guessed type void *ShopInvWin::`vftable'; //----- (0054BB50) -------------------------------------------------------- void *__thiscall sub_54BB50(void *this, char a2) { void *v2; // esi v2 = this; sub_54A1A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0054BD00) -------------------------------------------------------- int __userpurge sub_54BD00@(int a1@, int a2@, int a3@, int a4) { int v4; // esi int result; // eax const char *v6; // eax unsigned int v7; // edi int v8; // edi char *v9; // eax int v10; // ebx signed __int64 v11; // rax char *v12; // eax int v13; // ebx signed __int64 v14; // rax char *v15; // eax int v16; // ebx signed __int64 v17; // rax char *v18; // eax int v19; // ebx signed __int64 v20; // rax char *v21; // eax v4 = a1; result = (*(int (**)(void))(**(_DWORD **)(a1 + 344) + 492))(); if ( (_BYTE)result ) { v6 = (const char *)(*(int (__stdcall **)(int, int))(**(_DWORD **)(v4 + 344) + 452))(a3, a2); v7 = atoi(v6); if ( v7 > *(_DWORD *)(v4 + 360) ) { v8 = **(_DWORD **)(v4 + 344); v9 = sub_7549E0("%d", *(_DWORD *)(v4 + 360)); (*(void (__thiscall **)(_DWORD, char *))(v8 + 460))(*(_DWORD *)(v4 + 344), v9); v7 = *(_DWORD *)(v4 + 360); } v10 = **(_DWORD **)(v4 + 384); v11 = sub_680E90(v7 * *(_DWORD *)(v4 + 364)); v12 = sub_7549E0("%d", v11); (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(*(_DWORD *)(v4 + 384), v12); v13 = **(_DWORD **)(v4 + 388); v14 = sub_680EB0(v7 * *(_DWORD *)(v4 + 364)); v15 = sub_7549E0("%d", v14); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(*(_DWORD *)(v4 + 388), v15); v16 = **(_DWORD **)(v4 + 392); v17 = sub_680F00(v7 * *(_DWORD *)(v4 + 364)); v18 = sub_7549E0("%d", v17); (*(void (__thiscall **)(_DWORD, char *))(v16 + 472))(*(_DWORD *)(v4 + 392), v18); v19 = **(_DWORD **)(v4 + 396); v20 = sub_680F60(v7 * *(_DWORD *)(v4 + 364)); v21 = sub_7549E0("%d", v20); result = (*(int (__thiscall **)(_DWORD, char *))(v19 + 472))(*(_DWORD *)(v4 + 396), v21); } return result; } //----- (0054BF70) -------------------------------------------------------- int __thiscall sub_54BF70(_DWORD **this) { _BYTE *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[86] + 488))(1); return sub_8F28E0(v1); } //----- (0054C170) -------------------------------------------------------- char __thiscall sub_54C170(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // ST64_4 int v16; // ST60_4 int v17; // ST5C_4 int v18; // eax volatile LONG *v19; // edi const CHAR *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // ST64_4 int v23; // ST60_4 int v24; // ST5C_4 int v25; // eax volatile LONG *v26; // edi const CHAR *v27; // eax int v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax int v32; // ecx int v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax int v36; // eax volatile LONG *v37; // eax int v38; // eax volatile LONG *v39; // eax int v40; // eax volatile LONG *v41; // eax int v42; // eax volatile LONG *v43; // eax int v44; // [esp+80h] [ebp-20h] int v45; // [esp+84h] [ebp-1Ch] int v46; // [esp+88h] [ebp-18h] int v47; // [esp+8Ch] [ebp-14h] int v48; // [esp+90h] [ebp-10h] int v49; // [esp+9Ch] [ebp-4h] volatile LONG v50; // [esp+A8h] [ebp+8h] volatile LONG v51; // [esp+A8h] [ebp+8h] v2 = (int)this; v48 = 0; v49 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v48; v49 = -1; if ( !v48 || InterlockedDecrement((volatile LONG *)(v48 + 4)) ) return 0; v5 = v48 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\ItemTrade.nif"); sub_8F66B0(v8, (int)&v48, v7); if ( !v48 ) return 0; v9 = sub_8FB140(v48, (int)"Panel01", (int)&v46, (int)&v47, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ItemTradeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v48; v49 = -1; if ( !v48 || InterlockedDecrement((volatile LONG *)(v48 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v48, (int)"Theme", (int)&v46, (int)&v47, v10); else v11 = sub_8FB140(v48, (int)"Theme", (int)&v46, (int)&v47, 0); v12 = sub_8F3EB0(v46, v47, (int)v11, v2, 0, 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); if ( sub_8F71E0(v48, (int)"LotInput", &v46, &v47, &v44, &v45) ) { v13 = sub_8FB140(v48, (int)"LotInput", (int)&v46, (int)&v47, v3); sub_8F3EB0(v46, v47, (int)v13, v2, 0, 0); *(_DWORD *)(v2 + 344) = sub_45A900(v46 + 2, v47 + 4, v44, v45, v2, 1342185472, 10, 3, 0, 0, 1); } v14 = sub_8FB140(v48, (int)"BtnNor01", (int)&v46, (int)&v47, v3); sub_8FB650(v14, v48, (int)"BtnClick01"); sub_8FB650(v14, v48, (int)"BtnOver01"); v15 = sub_8FE0F0(v46, v47, (int)v14, v2, 0, 0, 0); v16 = sub_421050(0); v17 = (*(int (__thiscall **)(volatile LONG *))(*v15 + 148))(v15); v18 = (*(int (__thiscall **)(volatile LONG *))(*v15 + 144))(v15); v19 = sub_8F4A20(0, 1, v18, v17, v16, (int)v15, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); v50 = *v19; v20 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v48, (int)"BtnNor02", (int)&v46, (int)&v47, v3); sub_8FB650(v21, v48, (int)"BtnClick02"); sub_8FB650(v21, v48, (int)"BtnOver02"); v22 = sub_8FE0F0(v46, v47, (int)v21, v2, 1, 0, 0); v23 = sub_421050(0); v24 = (*(int (__thiscall **)(volatile LONG *))(*v22 + 148))(v22); v25 = (*(int (__thiscall **)(volatile LONG *))(*v22 + 144))(v22); v26 = sub_8F4A20(0, 1, v25, v24, v23, (int)v22, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v51 = *v26; v27 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v26, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); if ( !sub_8F71E0(v48, (int)"Text01", &v46, &v47, &v44, &v45) ) goto LABEL_32; v28 = sub_421050(0); v29 = sub_8F4A20(v46, v47, v44, v45, v28, v2, 0, 0); *(_DWORD *)(v2 + 376) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 376) + 472))(&unk_9CB4C7); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v30 = sub_8FB140(v48, (int)"ItemSlot", (int)&v46, (int)&v47, v3); v31 = sub_8F3EB0(v46, v47, (int)v30, v2, 0, 0); v32 = v46; *(_DWORD *)(v2 + 372) = v31; *(_DWORD *)(v2 + 368) = sub_5D6E20(v32, v47, v2); if ( !sub_8F71E0(v48, (int)"ItemName", &v46, &v47, &v44, &v45) ) goto LABEL_32; v33 = sub_421050(0); v34 = sub_8F4A20(v46, v47, v44, v45, v33, v2, 0, 0); *(_DWORD *)(v2 + 380) = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 380) + 472))(&unk_9CB4DD); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v35 = sub_8FB140(v48, (int)"Panel02", (int)&v46, (int)&v47, v3); sub_8F3EB0(v46, v47, (int)v35, v2, 0, 0); if ( !sub_8F71E0(v48, (int)"GemInput", &v46, &v47, &v44, &v45) ) goto LABEL_32; v36 = sub_421050(0); v37 = sub_8F4A20(v46, v47, v44, v45, v36, v2, 0, 0); *(_DWORD *)(v2 + 384) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 384) + 472))(&unk_9CB4DE); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 240))(0); if ( !sub_8F71E0(v48, (int)"GoldInput", &v46, &v47, &v44, &v45) ) goto LABEL_32; v38 = sub_421050(0); v39 = sub_8F4A20(v46, v47, v44, v45, v38, v2, 0, 0); *(_DWORD *)(v2 + 388) = v39; (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 388) + 472))(&unk_9CB4DF); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); if ( !sub_8F71E0(v48, (int)"SilverInput", &v46, &v47, &v44, &v45) || (v40 = sub_421050(0), v41 = sub_8F4A20(v46, v47, v44, v45, v40, v2, 0, 0), *(_DWORD *)(v2 + 392) = v41, (*(void (__thiscall **)(volatile LONG *, signed int))(*v41 + 488))(v41, 5), (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 392) + 472))(&unk_9CB4E6), (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0), !sub_8F71E0(v48, (int)"CopperInput", &v46, &v47, &v44, &v45)) ) { LABEL_32: v49 = -1; sub_410C00(&v48); return 0; } v42 = sub_421050(0); v43 = sub_8F4A20(v46, v47, v44, v45, v42, v2, 0, 0); *(_DWORD *)(v2 + 396) = v43; (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 396) + 472))(&unk_9CB4E7); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 240))(0); (**(void (__stdcall ***)(int))(v2 + 232))(v2 + 232); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v49 = -1; sub_410C00(&v48); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0054C930) -------------------------------------------------------- void __thiscall sub_54C930(volatile LONG *this) { volatile LONG *v1; // esi int v2; // ecx const char *v3; // eax unsigned int v4; // eax int v5; // ST0C_4 const char *v6; // eax char v7; // [esp+4h] [ebp-104h] v1 = this; v2 = *((_DWORD *)this + 86); *((_DWORD *)v1 + 87) = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); if ( v3 && *v3 ) *((_DWORD *)v1 + 87) = atoi(v3); if ( *((_DWORD *)v1 + 88) ) { v4 = *((_DWORD *)v1 + 87); if ( v4 && v4 <= *((_DWORD *)v1 + 90) ) { sub_8F2BC0(v1, 1, 0, 0); sub_8F2BC0(*((volatile LONG **)v1 + 88), 5, *((_DWORD *)v1 + 89), *((_DWORD *)v1 + 87)); } else { v5 = *((_DWORD *)v1 + 90); v6 = sub_40C190(-1750689899); sprintf(&v7, v6, v5); sub_492060(*((_DWORD **)v1 + 74), (int)&v7); } } } //----- (0054CA20) -------------------------------------------------------- int __thiscall sub_54CA20(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi v3 = this; sub_54C930(this); return (*(int (**)(void))(**((_DWORD **)v3 + 86) + 480))(); } //----- (0054CA40) -------------------------------------------------------- void __thiscall sub_54CA40(int this, int a2, int a3) { int v3; // esi volatile LONG *v4; // eax v3 = this; if ( a2 ) { if ( a2 == 1 ) { *(_DWORD *)(this + 348) = 0; sub_8F2BC0((volatile LONG *)this, 1, 0, 0); v4 = *(volatile LONG **)(v3 + 352); if ( v4 ) sub_8F2BC0(v4, 5, *(_DWORD *)(v3 + 356), 0); } } else { sub_54C930((volatile LONG *)this); } } //----- (0054CBE0) -------------------------------------------------------- void *__thiscall sub_54CBE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemTradeWin::`vftable'; *((_DWORD *)this + 58) = &ItemTradeWin::`vftable'; *((_DWORD *)this + 86) = 0; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CB5C8: using guessed type void *ItemTradeWin::`vftable'; // 9CB5E4: using guessed type void *ItemTradeWin::`vftable'; //----- (0054CC20) -------------------------------------------------------- BOOL __thiscall sub_54CC20(_DWORD **this) { return sub_5D5470(this[141]) != 0; } //----- (0054CC50) -------------------------------------------------------- void **__thiscall sub_54CC50(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &ForgeSlotInvWin::`vftable'; v1[58] = &ForgeSlotInvWin::`vftable'; v1[114] = (void *)-1; v1[115] = (void *)-1; v1[118] = 0; v1[116] = (void *)-1; v1[117] = (void *)1; sub_5D5B70(v1, 0, 1); v1[113] = 0; *((_BYTE *)v1 + 448) = 0; return v1; } // 9CBA64: using guessed type void *ForgeSlotInvWin::`vftable'; // 9CBA84: using guessed type void *ForgeSlotInvWin::`vftable'; //----- (0054CCF0) -------------------------------------------------------- LONG __thiscall sub_54CCF0(_DWORD *this) { *this = &ForgeSlotInvWin::`vftable'; this[58] = &ForgeSlotInvWin::`vftable'; return sub_5D5650(this); } // 9CBA64: using guessed type void *ForgeSlotInvWin::`vftable'; // 9CBA84: using guessed type void *ForgeSlotInvWin::`vftable'; //----- (0054CD10) -------------------------------------------------------- char __thiscall sub_54CD10(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; sub_5D5420(v6, 0); result = 1; } return result; } //----- (0054CD60) -------------------------------------------------------- int __thiscall sub_54CD60(_DWORD *this, int a2) { int result; // eax result = a2; this[117] = a2; return result; } //----- (0054CDB0) -------------------------------------------------------- _DWORD *__thiscall sub_54CDB0(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD *v4; // ebx _DWORD **v5; // esi signed int v6; // edi v2 = this; switch ( a2 ) { case 9: if ( sub_5D5470(this[142]) ) return (_DWORD *)v2[142]; return 0; case 10: if ( sub_5D5470(this[143]) ) return (_DWORD *)v2[143]; return 0; case 11: if ( sub_5D5470(this[144]) ) return (_DWORD *)v2[144]; return 0; case 8: if ( sub_5D5470(this[141]) ) return (_DWORD *)v2[141]; return 0; } v4 = 0; v5 = this + 133; v6 = 8; do { if ( sub_5D5470(*v5) ) v4 = *v5; ++v5; --v6; } while ( v6 ); return v4; } //----- (0054CE90) -------------------------------------------------------- char __thiscall sub_54CE90(_BYTE *this) { return this[704]; } //----- (0054CEA0) -------------------------------------------------------- signed int __thiscall sub_54CEA0(_DWORD **this) { int v1; // eax signed int result; // eax v1 = sub_5D5470(this[141]); if ( v1 ) result = (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 4))(v1); else result = -1; return result; } //----- (0054CEC0) -------------------------------------------------------- char sub_54CEC0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ItemUpgrade"); return (char)v0; } //----- (0054CEF0) -------------------------------------------------------- int __thiscall sub_54CEF0(_DWORD *this, unsigned int a2) { int result; // eax _DWORD *v3; // ecx int *v4; // esi int v5; // edi int v6; // eax result = (int)this; if ( a2 < 0xC ) { v3 = (_DWORD *)this[a2 + 133]; if ( v3 ) { v4 = *(int **)(result + 4 * a2 + 456); if ( v4 ) { v5 = *v4; v6 = sub_5D5470(v3); result = (*(int (__thiscall **)(int *, bool))(v5 + 240))(v4, v6 == 0); } } } return result; } //----- (0054CFB0) -------------------------------------------------------- char __thiscall sub_54CFB0(volatile LONG *this) { volatile LONG *v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)this + 89) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 88) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 87) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 90) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 86) + 256))(0); return sub_8F2BC0(v1, 1, 0, 0); } //----- (0054D030) -------------------------------------------------------- void __thiscall sub_54D030(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // eax int *v6; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 448) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[118]; if ( v2 ) { v3 = v1[115]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { if ( sub_5D5470(v4) ) { v5 = sub_5D5470(v1); if ( v5 ) { v6 = (int *)v1[68]; if ( v6 ) { sub_547C20(v6, v5); sub_8F2F90((int)v1); } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0054D0C0) -------------------------------------------------------- char __thiscall sub_54D0C0(_DWORD *this, char a2) { int v2; // eax unsigned int v4; // ecx int v5; // ecx v2 = this[118]; if ( !v2 ) return 0; v4 = this[115]; if ( v4 >= 0xC0 ) return 0; v5 = *(_DWORD *)(v2 + 4 * v4 + 348); if ( !v5 ) return 0; sub_536E90(v5, a2); return 1; } //----- (0054D100) -------------------------------------------------------- LONG __thiscall sub_54D100(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi v1 = this; *this = &ItemUpgradeWin::`vftable'; this[58] = &ItemUpgradeWin::`vftable'; v2 = this[167]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[167] = 0; } v3 = v1[168]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[168] = 0; } v4 = v1[169]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[169] = 0; } v5 = v1[170]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[170] = 0; } v6 = v1[171]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[171] = 0; } v7 = v1[171]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[170]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[169]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[168]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[167]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); sub_8D47C0(v1 + 158); nullsub_6(v1 + 152); v1[96] = &DropContents::`vftable'; v1[92] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CBF38: using guessed type void *ItemUpgradeWin::`vftable'; // 9CBF54: using guessed type void *ItemUpgradeWin::`vftable'; //----- (0054D350) -------------------------------------------------------- int __thiscall sub_54D350(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (0054D3E0) -------------------------------------------------------- int __thiscall sub_54D3E0(int this, int a2) { int result; // eax int v3; // esi int v4; // edx result = a2; v3 = this; *(float *)(this + 716) = 1.8; *(_WORD *)(this + 704) = 257; *(_DWORD *)(this + 720) = a2; if ( a2 != 2243 && a2 != 2244 && a2 != 14339 && a2 != 15367 && a2 != 15368 ) { v4 = rand() % 7; result = *(_DWORD *)(v3 + 696); *(_DWORD *)(v3 + 696) = (v4 + result + 1) % 8; } return result; } //----- (0054D460) -------------------------------------------------------- LONG __thiscall sub_54D460(float *this, _DWORD *a2) { float *v2; // esi v2 = this; *((_DWORD *)this + 172) = a2; sub_8D4A70((_DWORD *)this + 158, a2); sub_8D4750((_DWORD *)v2 + 158, flt_ACCFCC); v2[155] = v2[161]; sub_8D06E0(v2 + 152, flt_ACCFCC, 1); (*(void (__stdcall **)(_DWORD *, signed int))(**((_DWORD **)v2 + 122) + 116))(a2, 1); sub_85C4D0(*((_DWORD **)v2 + 122)); return sub_85C6F0(*((_DWORD **)v2 + 122)); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0054D4F0) -------------------------------------------------------- bool __thiscall sub_54D4F0(_DWORD **this, int a2) { bool result; // al int v3; // eax if ( a2 && (v3 = sub_5D5470(this[141])) != 0 ) result = *(_DWORD *)(*(_DWORD *)(a2 + 112) + 131) == *(_DWORD *)(*(_DWORD *)(v3 + 112) + 131); else result = 0; return result; } //----- (0054D530) -------------------------------------------------------- char __thiscall sub_54D530(_WORD *this, int a2) { signed int v2; // eax _WORD *v3; // ecx if ( !a2 ) return 0; v2 = 0; v3 = this + 376; while ( *(_WORD *)(a2 + 8) != *v3 ) { ++v2; ++v3; if ( v2 >= 4 ) return 0; } return 1; } //----- (0054D560) -------------------------------------------------------- int __thiscall sub_54D560(unsigned __int16 *this) { _DWORD *v1; // eax int result; // eax v1 = sub_6899D0(this[376]); if ( v1 ) result = v1[28] + 34; else result = 0; return result; } //----- (0054D580) -------------------------------------------------------- int __thiscall sub_54D580(_DWORD **this) { int v1; // eax int result; // eax v1 = sub_5D5470(this[141]); if ( v1 ) result = *(_DWORD *)(v1 + 112) + 34; else result = 0; return result; } //----- (0054D5A0) -------------------------------------------------------- char __thiscall sub_54D5A0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (0054D5D0) -------------------------------------------------------- char __thiscall sub_54D5D0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[116]); return (char)v2; } //----- (0054D600) -------------------------------------------------------- int *__thiscall sub_54D600(int this) { int v1; // esi int v2; // eax unsigned int v3; // ecx int v4; // ecx v1 = this; v2 = *(_DWORD *)(this + 472); *(_BYTE *)(this + 448) = 0; if ( v2 ) { v3 = *(_DWORD *)(this + 460); if ( v3 < 0xC0 ) { v4 = *(_DWORD *)(v2 + 4 * v3 + 348); if ( v4 ) sub_536E90(v4, 0); } } *(_DWORD *)(v1 + 456) = -1; *(_DWORD *)(v1 + 460) = -1; *(_DWORD *)(v1 + 472) = 0; return sub_5D5B70((_WORD *)v1, 0, 1); } //----- (0054D660) -------------------------------------------------------- char __thiscall sub_54D660(_DWORD **this, unsigned int a2, int a3) { _DWORD **v3; // edi _DWORD *v4; // esi _DWORD *v6; // eax signed int v7; // esi _DWORD **v8; // edi int v9; // ebx _DWORD *v10; // ecx int *v11; // ebx int v12; // esi int v13; // eax _DWORD *v14; // ecx int *v15; // edi int v16; // ebx int v17; // eax int v18; // eax unsigned int v19; // esi int v20; // ecx _DWORD *v21; // [esp+8h] [ebp-14h] int v22; // [esp+10h] [ebp-Ch] _DWORD **v23; // [esp+14h] [ebp-8h] _DWORD *v24; // [esp+18h] [ebp-4h] v3 = this; v4 = this[a2 + 133]; v23 = this; v24 = v4; if ( !v4 ) return 0; v21 = *(_DWORD **)(a3 + 4); if ( !v21 ) return 0; v6 = sub_54CDB0(this, a2); v22 = (int)v6; if ( v6 ) { v7 = 0; v8 = v3 + 133; while ( 1 ) { v9 = sub_5D5470(v6); if ( sub_5D5470(*v8) == v9 ) break; ++v7; ++v8; if ( v7 >= 8 ) { v7 = -1; break; } v6 = (_DWORD *)v22; } sub_54D600(v22); v3 = v23; if ( v7 != -1 && (unsigned int)v7 < 0xC ) { v10 = v23[v7 + 133]; if ( v10 ) { v11 = v23[v7 + 114]; if ( v11 ) { v12 = *v11; v13 = sub_5D5470(v10); (*(void (__thiscall **)(int *, bool))(v12 + 240))(v11, v13 == 0); } } } v4 = v24; } v4[114] = v21[2]; v4[115] = v21[3]; v4[118] = *(_DWORD *)(a3 + 8); sub_5D5B70(v4, v21[5], 1); if ( a2 < 0xC ) { v14 = v3[a2 + 133]; if ( v14 ) { v15 = v3[a2 + 114]; if ( v15 ) { v16 = *v15; v17 = sub_5D5470(v14); (*(void (__thiscall **)(int *, bool))(v16 + 240))(v15, v17 == 0); } } } v18 = v4[118]; if ( v18 ) { v19 = v4[115]; if ( v19 < 0xC0 ) { v20 = *(_DWORD *)(v18 + 4 * v19 + 348); if ( v20 ) sub_536E90(v20, 1); } } return 1; } //----- (0054D7C0) -------------------------------------------------------- int __thiscall sub_54D7C0(_DWORD *this) { _DWORD *v1; // edi int v2; // ebx int v3; // esi int v4; // eax unsigned int v5; // ecx int v6; // eax int *v7; // eax int v8; // esi const CHAR *v9; // eax signed int v11; // [esp+Ch] [ebp-4h] v1 = this; *(_WORD *)(this[126] + 28) |= 1u; *(_WORD *)(v1[130] + 28) |= 1u; *(_WORD *)(v1[131] + 28) |= 1u; *(_WORD *)(this[132] + 28) |= 1u; v2 = (int)(this + 133); v11 = 12; do { v3 = *(_DWORD *)v2; v4 = *(_DWORD *)(*(_DWORD *)v2 + 472); *(_BYTE *)(*(_DWORD *)v2 + 448) = 0; if ( v4 ) { v5 = *(_DWORD *)(v3 + 460); if ( v5 < 0xC0 ) { v6 = *(_DWORD *)(v4 + 4 * v5 + 348); if ( v6 ) sub_536E90(v6, 0); } } *(_DWORD *)(v3 + 456) = -1; *(_DWORD *)(v3 + 460) = -1; *(_DWORD *)(v3 + 472) = 0; sub_5D5B70((_WORD *)v3, 0, 1); v2 += 4; --v11; } while ( v11 ); v7 = (int *)v1[90]; *((_BYTE *)v1 + 704) = 0; v8 = *v7; v9 = sub_40C190(-821626148); return (*(int (__thiscall **)(_DWORD, const CHAR *))(v8 + 472))(v1[90], v9); } //----- (0054D8B0) -------------------------------------------------------- _DWORD *__thiscall sub_54D8B0(float *this) { float *v1; // esi int v2; // edi const CHAR *v3; // eax _DWORD *result; // eax v1 = this; v2 = **((_DWORD **)this + 90); v3 = sub_40C190(813272213); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v2 + 472))(*((_DWORD **)v1 + 90), v3); v1[180] = 0.0; v1[177] = flt_ACCFCC; sub_8D06A0(v1 + 145, v1[177]); v1[178] = 15.0; *((_WORD *)v1 + 352) = 1; *((_DWORD *)v1 + 86) = 1; result = (_DWORD *)*((_DWORD *)v1 + 174); v1[150] = 0.06666667; v1[87] = 0.0; v1[179] = 0.0; *((_DWORD *)v1 + 175) = result; *(_WORD *)(*((_DWORD *)v1 + 126) + 28) &= 0xFFFEu; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0054D960) -------------------------------------------------------- int __thiscall sub_54D960(int *this) { int *v1; // esi v1 = this; sub_54D600(this[142]); sub_54D600(v1[143]); sub_54D600(v1[144]); sub_5D3170(v1[142], *((_BYTE *)v1 + 740)); sub_5D3170(v1[143], *((_BYTE *)v1 + 740)); sub_5D3170(v1[144], *((_BYTE *)v1 + 740)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[123] + 256))(*((unsigned __int8 *)v1 + 740)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[124] + 256))(*((unsigned __int8 *)v1 + 740)); return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[125] + 256))(*((unsigned __int8 *)v1 + 740)); } //----- (0054DA10) -------------------------------------------------------- char __thiscall sub_54DA10(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG *v9; // eax const char *v10; // eax volatile LONG *v11; // eax const char *v12; // eax volatile LONG *v13; // eax const char *v14; // eax volatile LONG *v15; // edi int v16; // ST18_4 char v17; // ST1C_1 int v18; // ST20_4 int v19; // ST24_4 const CHAR *v20; // ST0C_4 int v21; // eax int v22; // eax volatile LONG *v23; // edi int v24; // ST1C_4 char v25; // ST20_1 int v26; // ST24_4 int v27; // ST28_4 const CHAR *v28; // ST10_4 int v29; // eax int v30; // eax char v31; // ST1C_1 int v32; // ST20_4 int v33; // ST24_4 int v34; // ST28_4 const CHAR *v35; // eax char v36; // ST1C_1 int v37; // ST20_4 int v38; // ST24_4 int v39; // ST28_4 const CHAR *v40; // eax volatile LONG *v41; // eax void (__thiscall ***v42)(_DWORD, signed int); // esi char v43; // [esp+1Ch] [ebp-38h] int v44[5]; // [esp+28h] [ebp-2Ch] char v45; // [esp+3Ch] [ebp-18h] char v46; // [esp+40h] [ebp-14h] int v47; // [esp+44h] [ebp-10h] int v48; // [esp+50h] [ebp-4h] v2 = (int)this; v47 = 0; v3 = dword_BA6BA0; v48 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ItemUpgradeMsg.nif"); sub_8F66B0(v4, (int)&v47, v3); if ( !v47 ) return 0; v5 = sub_8FB140(v47, (int)"Panel01", (int)&v45, (int)&v46, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"ItemUpgradeMsgWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v47; v48 = -1; if ( v47 && !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v44); LOBYTE(v48) = 1; sub_455FF0(v44, v2); sub_456000(v44, 0, 0); sub_456380(v44, v47); sub_456820(v44, (int)"Theme", 0); v8 = sub_456820(v44, (int)"Panel02", 0); *(_DWORD *)(v2 + 344) = v8; (*(void (__thiscall **)(volatile LONG *))(*v8 + 256))(v8); v9 = sub_456820(v44, (int)"GoldNine", 0); *(_DWORD *)(v2 + 348) = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 256))(v9, 0); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; v10 = sub_4090F0(654433286); sub_8F2EA0(*(void ***)(v2 + 348), v10); v11 = sub_456820(v44, (int)"BlueMile", 0); *(_DWORD *)(v2 + 352) = v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 256))(v11, 0); *(_DWORD *)(*(_DWORD *)(v2 + 352) + 272) = dword_AD01E8; v12 = sub_4090F0(570483970); sub_8F2EA0(*(void ***)(v2 + 352), v12); v13 = sub_456820(v44, (int)"RedEye", 0); *(_DWORD *)(v2 + 356) = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 256))(v13, 0); *(_DWORD *)(*(_DWORD *)(v2 + 356) + 272) = dword_AD01E8; v14 = sub_4090F0(-741421049); sub_8F2EA0(*(void ***)(v2 + 356), v14); v15 = sub_456B30(v44, 0, "Btn01", 0, 3); v16 = dword_AA8C68; v17 = dword_AA8C6C; v18 = dword_AA8C70; v19 = dword_AA8C74; v20 = sub_40C190(1331644831); v21 = (*(int (__thiscall **)(volatile LONG *))(*v15 + 148))(v15); v22 = (*(int (__thiscall **)(volatile LONG *, int))(*v15 + 144))(v15, v21); sub_4561C0(v44, 0, 0, v22, (int)v20, (int)v15, 0, v16, v17, v18, v19, 5, 0, 0, 0); v23 = sub_456B30(v44, 1, "Btn02", 0, 3); v24 = dword_AA8C68; v25 = dword_AA8C6C; v26 = dword_AA8C70; v27 = dword_AA8C74; v28 = sub_40C190(1169396396); v29 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v30 = (*(int (__thiscall **)(volatile LONG *, int))(*v23 + 144))(v23, v29); sub_4561C0(v44, 0, 0, v30, (int)v28, (int)v23, 0, v24, v25, v26, v27, 5, 0, 0, v43); v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = dword_AA8C74; v35 = sub_4090F0(-1585020977); sub_456A50(v44, (int)"Text01", (int)v35, 0, v31, v32, v33, v34, 5, 0, 0, 0); v36 = dword_AA8C68; v37 = dword_AA8C6C; v38 = dword_AA8C70; v39 = dword_AA8C74; v40 = sub_4090F0(594166086); v41 = sub_456A50(v44, (int)"Text02", (int)v40, 0, v36, v37, v38, v39, 5, 0, 0, 0); *(_DWORD *)(v2 + 360) = v41; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 256))(v41, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v48) = 0; sub_4562E0(v44); v48 = -1; if ( v47 ) { v42 = (void (__thiscall ***)(_DWORD, signed int))v47; if ( !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) { if ( v42 ) (**v42)(v42, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0054DE60) -------------------------------------------------------- unsigned int __thiscall sub_54DE60(_DWORD **this) { _DWORD **v1; // esi unsigned int result; // eax unsigned __int8 *v3; // edi char v4; // bl int v5; // ecx v1 = this; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { v3 = *(unsigned __int8 **)(result + 556); if ( v3 ) { v4 = 0; if ( v3[726] == -1 ) { result = (*(int (__stdcall **)(signed int))(*v1[89] + 256))(1); v4 = 1; } if ( v3[727] == -1 ) { result = v3[724]; if ( result < 0xC0 ) { v5 = dword_ADA234[result]; if ( v5 ) { result = (*(int (**)(void))(*(_DWORD *)v5 + 36))(); if ( result ) { result = (*(int (__stdcall **)(signed int))(*v1[88] + 256))(1); v4 = 1; } } } } if ( v3[728] == -1 ) { (*(void (__stdcall **)(signed int))(*v1[87] + 256))(1); } else if ( !v4 ) { return result; } (*(void (__stdcall **)(signed int))(*v1[90] + 256))(1); result = (*(int (__stdcall **)(signed int))(*v1[86] + 256))(1); } } return result; } //----- (0054DF90) -------------------------------------------------------- void __thiscall sub_54DF90(float *this, int a2, _DWORD *a3, int a4) { float *v4; // esi int *v5; // eax signed int v6; // ecx int v7; // edi v4 = this; if ( a2 == 27 && a3 && !*a3 ) { sub_54D8B0(this - 58); v5 = (int *)(v4 + 75); v6 = 12; do { v7 = *v5; ++v5; --v6; *(_BYTE *)(v7 + 448) = 1; } while ( v6 ); sub_4B7DC0( *((_DWORD **)v4 + 16), *((_BYTE *)v4 + 492), *((_BYTE *)v4 + 493), *((_BYTE *)v4 + 494), *((_BYTE *)v4 + 495), *((_BYTE *)v4 + 496), *((_DWORD *)v4 + 125)); v4[123] = -6.8056469e38/*NaN*/; *((_BYTE *)v4 + 496) = -1; v4[125] = 0.0; } } //----- (0054E040) -------------------------------------------------------- char __thiscall sub_54E040(float *this) { float *v1; // esi int *v2; // eax signed int v3; // ecx int v4; // edi int v5; // eax v1 = this; sub_54D8B0(this); v2 = (int *)(v1 + 133); v3 = 12; do { v4 = *v2; ++v2; --v3; *(_BYTE *)(v4 + 448) = 1; } while ( v3 ); v5 = *((_DWORD *)v1 + 191); if ( v5 ) { if ( v5 == 1 ) { LOBYTE(v5) = sub_4C0C50(*((_DWORD **)v1 + 74), *((_BYTE *)v1 + 724), *((_BYTE *)v1 + 725)); } else if ( v5 == 2 ) { LOBYTE(v5) = sub_4C0CA0(*((_DWORD **)v1 + 74), *((_BYTE *)v1 + 724), *((_BYTE *)v1 + 725)); } } else { LOBYTE(v5) = sub_4B7DC0( *((_DWORD **)v1 + 74), *((_BYTE *)v1 + 724), *((_BYTE *)v1 + 725), *((_BYTE *)v1 + 726), *((_BYTE *)v1 + 727), *((_BYTE *)v1 + 728), *((_DWORD *)v1 + 183)); } return v5; } //----- (0054E100) -------------------------------------------------------- char __thiscall sub_54E100(_DWORD *this) { _DWORD *v1; // edi signed int v2; // ebx int v3; // esi int v4; // eax unsigned int v5; // ecx int v6; // eax _DWORD *v7; // ecx int *v8; // ebx int v9; // esi int v10; // eax char result; // al int v12; // eax int v13; // esi int v14; // eax unsigned int v15; // ecx _DWORD *v16; // ecx int v17; // eax signed int v18; // [esp+Ch] [ebp-4h] v1 = this; *(_WORD *)(this[126] + 28) |= 1u; *(_WORD *)(v1[130] + 28) |= 1u; *(_WORD *)(v1[131] + 28) |= 1u; *(_WORD *)(v1[132] + 28) |= 1u; v2 = 0; v18 = 0; do { if ( v2 == 8 ) { v12 = v1[180]; if ( v12 != 2247 && v12 != 15371 ) { v13 = v1[141]; v14 = *(_DWORD *)(v13 + 472); if ( v14 ) { v15 = *(_DWORD *)(v13 + 460); if ( v15 < 0xC0 ) { v16 = *(_DWORD **)(v14 + 4 * v15 + 348); if ( v16 ) { v17 = sub_5D5470(v16); if ( v17 ) { *(_BYTE *)(v13 + 448) = 0; sub_5D5B70((_WORD *)v13, v17, 1); } else { sub_54D600(v13); } } } } } else { sub_54D600(v1[141]); } LABEL_8: v7 = (_DWORD *)v1[v2 + 133]; if ( v7 ) { v8 = (int *)v1[v2 + 114]; if ( v8 ) { v9 = *v8; v10 = sub_5D5470(v7); (*(void (__thiscall **)(int *, bool))(v9 + 240))(v8, v10 == 0); } v2 = v18; } goto LABEL_12; } v3 = v1[v2 + 133]; v4 = *(_DWORD *)(v3 + 472); *(_BYTE *)(v3 + 448) = 0; if ( v4 ) { v5 = *(_DWORD *)(v3 + 460); if ( v5 < 0xC0 ) { v6 = *(_DWORD *)(v4 + 4 * v5 + 348); if ( v6 ) sub_536E90(v6, 0); } } *(_DWORD *)(v3 + 456) = -1; *(_DWORD *)(v3 + 460) = -1; *(_DWORD *)(v3 + 472) = 0; sub_5D5B70((_WORD *)v3, 0, 1); if ( (unsigned int)v2 < 0xC ) goto LABEL_8; LABEL_12: v18 = ++v2; } while ( v2 < 12 ); result = -1; *((_BYTE *)v1 + 704) = 0; v1[181] = -1; *((_BYTE *)v1 + 728) = -1; v1[183] = 0; return result; } //----- (0054E2A0) -------------------------------------------------------- int __thiscall sub_54E2A0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ecx _DWORD *v3; // edi const CHAR *v4; // ST0C_4 _DWORD *v5; // edi const CHAR *v6; // ST0C_4 _DWORD *v7; // edi const CHAR *v8; // ST0C_4 _DWORD *v9; // edi const CHAR *v10; // ST0C_4 _DWORD *v11; // edi const CHAR *v12; // ST0C_4 _DWORD *v13; // edi const CHAR *v14; // ST0C_4 _DWORD *v15; // edi const CHAR *v16; // ST0C_4 _DWORD *v17; // edi const CHAR *v18; // ST0C_4 _DWORD *v19; // edi const CHAR *v20; // ST0C_4 _DWORD *v21; // edi const CHAR *v22; // ST0C_4 _DWORD *v23; // edi const CHAR *v24; // ST0C_4 _DWORD *v25; // edi const CHAR *v26; // ST0C_4 _DWORD *v27; // edi const CHAR *v28; // ST0C_4 _DWORD *v29; // edi const CHAR *v30; // ST0C_4 _DWORD *v31; // edi const CHAR *v32; // ST0C_4 _DWORD *v33; // edi const CHAR *v34; // ST0C_4 _DWORD *v35; // edi const CHAR *v36; // ST0C_4 _DWORD *v37; // edi const CHAR *v38; // ST0C_4 _DWORD *v39; // ebx _DWORD *v40; // eax _DWORD *v41; // ST1C_4 int v42; // edi int v43; // ebx int v44; // ST0C_4 char *v45; // eax char *v46; // eax _DWORD *v47; // edi const CHAR *v48; // ST0C_4 _DWORD *v49; // edi const CHAR *v50; // ST0C_4 int *v51; // eax int v52; // edi const CHAR *v53; // eax int result; // eax int v55; // [esp-4h] [ebp-98h] char v56; // [esp+10h] [ebp-84h] v1 = this; v2 = this[180]; if ( v2 <= 0x3801 ) { if ( v2 == 14337 ) { v35 = (_DWORD *)v1[74]; v36 = sub_4090F0(-314171359); sub_492060(v35, (int)v36); goto LABEL_44; } switch ( v2 ) { case 0x8C2u: goto LABEL_4; case 0x8C3u: sub_54D460((float *)v1, (_DWORD *)v1[167]); sub_6BA650(&dword_AB6520, 13); v5 = (_DWORD *)v1[74]; v6 = sub_40C190(593906556); sub_492060(v5, (int)v6); goto LABEL_44; case 0x8C4u: sub_54D460((float *)v1, (_DWORD *)v1[168]); sub_6BA650(&dword_AB6520, 12); v7 = (_DWORD *)v1[74]; v8 = sub_40C190(610683772); sub_492060(v7, (int)v8); goto LABEL_44; case 0x8C5u: sub_54D460((float *)v1, (_DWORD *)v1[169]); sub_6BA650(&dword_AB6520, 14); v9 = (_DWORD *)v1[74]; v10 = sub_40C190(1922737530); sub_492060(v9, (int)v10); goto LABEL_44; case 0x8C6u: sub_54D460((float *)v1, (_DWORD *)v1[170]); sub_6BA650(&dword_AB6520, 14); v11 = (_DWORD *)v1[74]; v12 = sub_40C190(313827963); sub_492060(v11, (int)v12); goto LABEL_44; case 0x8C7u: sub_54D460((float *)v1, (_DWORD *)v1[171]); v13 = (_DWORD *)v1[74]; v14 = sub_40C190(609371264); sub_492060(v13, (int)v14); goto LABEL_44; case 0x8C8u: v15 = (_DWORD *)v1[74]; v16 = sub_40C190(-1226578909); sub_492060(v15, (int)v16); goto LABEL_44; case 0x8C9u: v17 = (_DWORD *)v1[74]; v18 = sub_40A910(-7955084); sub_492060(v17, (int)v18); goto LABEL_44; case 0x8CAu: v19 = (_DWORD *)v1[74]; v20 = sub_40C190(2123540171); sub_492060(v19, (int)v20); goto LABEL_44; case 0x8CBu: v21 = (_DWORD *)v1[74]; v22 = sub_40C190(810500397); sub_492060(v21, (int)v22); goto LABEL_44; case 0x8CFu: v23 = (_DWORD *)v1[74]; v24 = sub_40C190(730904441); sub_492060(v23, (int)v24); goto LABEL_44; case 0x8D0u: v31 = (_DWORD *)v1[74]; v32 = sub_40C190(-921612531); sub_492060(v31, (int)v32); goto LABEL_44; case 0x8D1u: v33 = (_DWORD *)v1[74]; v34 = sub_40C190(-1068016879); sub_492060(v33, (int)v34); goto LABEL_44; case 0x8D2u: v25 = (_DWORD *)v1[74]; v26 = sub_40C190(1625273016); sub_492060(v25, (int)v26); goto LABEL_44; case 0x8D3u: v27 = (_DWORD *)v1[74]; v28 = sub_40C190(-1494501713); sub_492060(v27, (int)v28); goto LABEL_44; case 0x8D4u: v29 = (_DWORD *)v1[74]; v30 = sub_40C190(-1511867980); sub_492060(v29, (int)v30); goto LABEL_44; default: goto LABEL_43; } goto LABEL_43; } if ( v2 > 0x3C01 ) { switch ( v2 ) { case 0x3C02u: case 0x3C04u: v39 = sub_6899D0(*((_WORD *)v1 + 380)); v40 = sub_6899D0(*((_WORD *)v1 + 381)); if ( v39 && v40 ) { v41 = (_DWORD *)v1[74]; v42 = v40[28] + 34; v43 = v39[28] + 34; v44 = sub_54D560((unsigned __int16 *)v1); v45 = (char *)sub_4090F0(-197969333); v46 = sub_7549E0(v45, v43, v42, v44); sub_492060(v41, (int)v46); } goto LABEL_44; case 0x3C03u: v49 = (_DWORD *)v1[74]; v50 = sub_4090F0(1199158485); sub_492060(v49, (int)v50); goto LABEL_44; case 0x3C05u: v47 = (_DWORD *)v1[74]; v48 = sub_4090F0(1319683266); sub_492060(v47, (int)v48); goto LABEL_44; case 0x3C07u: LABEL_25: sub_54D460((float *)v1, (_DWORD *)v1[167]); sub_6BA650(&dword_AB6520, 13); v55 = 593906556; goto LABEL_5; case 0x3C08u: sub_54D460((float *)v1, (_DWORD *)v1[168]); sub_6BA650(&dword_AB6520, 12); v55 = 610683772; goto LABEL_5; case 0x3C09u: sub_54D460((float *)v1, (_DWORD *)v1[169]); LABEL_27: sub_6BA650(&dword_AB6520, 14); v55 = 1922737530; goto LABEL_5; case 0x3C0Au: sub_54D460((float *)v1, (_DWORD *)v1[170]); LABEL_29: sub_6BA650(&dword_AB6520, 14); v55 = 313827963; goto LABEL_5; case 0x3C0Bu: sub_54D460((float *)v1, (_DWORD *)v1[171]); v55 = 609371264; goto LABEL_5; default: goto LABEL_43; } goto LABEL_43; } if ( v2 != 15361 ) { switch ( v2 ) { case 0x3802u: goto LABEL_4; case 0x3803u: goto LABEL_25; case 0x3804u: sub_54D460((float *)v1, (_DWORD *)v1[169]); goto LABEL_27; case 0x3805u: sub_54D460((float *)v1, (_DWORD *)v1[170]); goto LABEL_29; case 0x3806u: v55 = -1226578909; goto LABEL_5; case 0x3807u: v37 = (_DWORD *)v1[74]; v38 = sub_40A910(-7955084); sub_492060(v37, (int)v38); goto LABEL_44; case 0x3808u: v55 = 2123540171; goto LABEL_5; default: break; } LABEL_43: sprintf(&v56, " Upgrade Error (Code:%d)", v2); sub_492060((_DWORD *)v1[74], (int)&v56); goto LABEL_44; } LABEL_4: v55 = -1787109935; LABEL_5: v3 = (_DWORD *)v1[74]; v4 = sub_40C190(v55); sub_492060(v3, (int)v4); LABEL_44: sub_54E100(v1); if ( !(dword_ACE4B0 & 1) ) { dword_ACE4B0 |= 1u; sub_496680((int)&dword_ACE484); atexit(nullsub_45); } nullsub_31(&dword_ACE484); v51 = (int *)v1[90]; v1[86] = 0; v52 = *v51; v53 = sub_40C190(-821626148); result = (*(int (__thiscall **)(_DWORD, const CHAR *))(v52 + 472))(v1[90], v53); v1[190] = -1; return result; } // 6D0D00: using guessed type int __thiscall nullsub_31(_DWORD); // ACE484: using guessed type int dword_ACE484; // ACE4B0: using guessed type int dword_ACE4B0; //----- (0054E840) -------------------------------------------------------- void __thiscall sub_54E840(int this, float a2) { int v2; // esi int v3; // eax float v4; // ST10_4 int v5; // edi int v6; // ecx int v7; // eax int v8; // edi int v9; // ebx int v10; // eax float v11; // edi int v12; // ebx int v13; // edi int v14; // eax float v15; // [esp+10h] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 704) ) { v3 = *(_DWORD *)(this + 344); if ( v3 == 1 ) { v4 = a2 - *(float *)(this + 708); v15 = *(float *)(this + 712) - v4 * *(float *)(this + 716); if ( v15 < 1.700000047683716 ) v15 = 1.6; *(float *)(this + 600) = 1.0 / v15; v5 = sub_8D0630((float *)(this + 580), a2); if ( v5 ) sub_6BA680(&dword_AB6520, (int)"SFX_SlotOne"); v6 = (v5 + *(_DWORD *)(v2 + 700)) % 8; *(_DWORD *)(v2 + 700) = v6; if ( v15 < 1.700000047683716 ) { v7 = *(_DWORD *)(v2 + 720); if ( v7 == 2243 || v7 == 14339 || v7 == 15367 || v7 == 15368 || v7 == 2244 ) { if ( *(_DWORD *)(v2 + 696) == v6 ) { *(_DWORD *)(v2 + 344) = 3; sub_8D06A0((float *)(v2 + 580), a2); *(float *)(v2 + 600) = 0.66666669; } } else if ( *(_DWORD *)(v2 + 696) == v6 ) { *(_DWORD *)(v2 + 344) = 2; } } v8 = (*(int (**)(void))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 700) + 456) + 192))(); v9 = (*(int (**)(void))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 700) + 456) + 200))(); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 504) + 172))(v8); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 504) + 176))(v9); } else if ( v3 == 3 ) { if ( sub_8D0630((float *)(this + 580), a2) ) { v10 = *(_DWORD *)(v2 + 348); if ( v10 ) { if ( v10 == 1 ) { LODWORD(v11) = 8; } else if ( v10 == 2 ) { v11 = *(float *)(v2 + 692); } else { v11 = a2; } } else { sub_6BA680(&dword_AB6520, (int)"SFX_SlotEnd"); v11 = *(float *)(v2 + 696); } if ( *(_DWORD *)(v2 + 348) < 3 ) { *(_WORD *)(*(_DWORD *)(v2 + 504) + 28) |= 1u; v12 = (*(int (**)(void))(**(_DWORD **)(v2 + 4 * LODWORD(v11) + 456) + 192))(); v13 = (*(int (**)(void))(**(_DWORD **)(v2 + 4 * LODWORD(v11) + 456) + 200))(); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 348) + 520) + 172))(v12); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 348) + 520) + 176))(v13); v14 = *(_DWORD *)(v2 + 4 * *(_DWORD *)(v2 + 348) + 520); *(_WORD *)(v14 + 28) &= 0xFFFEu; } ++*(_DWORD *)(v2 + 348); } if ( *(_DWORD *)(v2 + 348) >= 4 ) sub_54E2A0((_DWORD *)v2); } else if ( v3 == 2 && sub_8D0630((float *)(this + 580), a2) ) { sub_54E2A0((_DWORD *)v2); } } } //----- (0054EAF0) -------------------------------------------------------- _DWORD *__thiscall sub_54EAF0(int this, char a2, int a3) { int v3; // edi _DWORD *v4; // esi const CHAR *v5; // eax int v6; // esi const CHAR *v7; // eax int *v8; // esi int v9; // ebx int v10; // eax _DWORD *v11; // eax int v12; // ebx int v13; // eax _DWORD *v14; // ebx const CHAR *v15; // eax const char *v16; // eax _DWORD *result; // eax int v18; // esi const CHAR *v19; // eax int v20; // esi int v21; // ebx int *v22; // esi int v23; // ebx int v24; // eax _DWORD *v25; // ecx int *v26; // ebx int v27; // esi int v28; // eax _DWORD *v29; // ebx const CHAR *v30; // eax int v31; // eax _DWORD *v32; // eax int v33; // ST04_4 char *v34; // eax char *v35; // eax _DWORD *v36; // [esp+Ch] [ebp-8h] int v37; // [esp+10h] [ebp-4h] signed int v38; // [esp+1Ch] [ebp+8h] signed int v39; // [esp+1Ch] [ebp+8h] _DWORD *v40; // [esp+20h] [ebp+Ch] v3 = this; *(_DWORD *)(this + 764) = a3; *(_BYTE *)(this + 740) = a2; if ( !a2 && (sub_5D5470(*(_DWORD **)(this + 568)) || sub_5D5470(*(_DWORD **)(v3 + 572)) || sub_5D5470(*(_DWORD **)(v3 + 576))) ) { v4 = *(_DWORD **)(v3 + 296); v5 = sub_4090F0(-277771905); sub_492060(v4, (int)v5); } if ( *(_BYTE *)(v3 + 740) ) { v6 = **(_DWORD **)(v3 + 744); v7 = sub_40C190(859803518); (*(void (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(*(_DWORD *)(v3 + 744), v7); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 748) + 256))(1); v38 = 0; v8 = (int *)(v3 + 532); do { if ( sub_5D5470((_DWORD *)*v8) ) { v9 = sub_5D5470((_DWORD *)*v8); if ( !v9 || (v10 = sub_5D5470(*(_DWORD **)(v3 + 564))) == 0 || *(_DWORD *)(*(_DWORD *)(v9 + 112) + 131) != *(_DWORD *)(*(_DWORD *)(v10 + 112) + 131) ) { sub_54D600(*v8); if ( (unsigned int)v38 < 0xC ) { if ( *v8 ) { v11 = (_DWORD *)*(v8 - 19); v40 = v11; if ( v11 ) { v12 = *v11; v13 = sub_5D5470((_DWORD *)*v8); (*(void (__thiscall **)(_DWORD *, bool))(v12 + 240))(v40, v13 == 0); } } } if ( sub_5D5470(*(_DWORD **)(v3 + 564)) ) { v14 = *(_DWORD **)(v3 + 296); v15 = sub_4090F0(-314171359); sub_492060(v14, (int)v15); } } } v16 = sub_40C190(-719895771); sub_8F2EA0((void **)*(v8 - 19), v16); ++v8; ++v38; } while ( v38 < 8 ); result = (_DWORD *)sub_54D960((int *)v3); } else { v18 = **(_DWORD **)(v3 + 744); v19 = sub_4090F0(-1126125617); (*(void (__thiscall **)(_DWORD, const CHAR *, _DWORD))(v18 + 480))(*(_DWORD *)(v3 + 744), v19, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 748) + 256))(0); v20 = dword_ACB230; v21 = *(unsigned __int16 *)(v3 + 742); result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v21); if ( (_BYTE)result ) { if ( (unsigned __int16)v21 <= *(_WORD *)(v20 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v20 + 196) + 4 * v21); if ( *result ) { result = (_DWORD *)*result; v36 = result; if ( result ) { v22 = (int *)(v3 + 532); v39 = 0; v37 = v3 + 532; do { if ( sub_5D5470((_DWORD *)*v22) ) { v23 = sub_5D5470((_DWORD *)*v22); if ( !v23 || (v24 = sub_5D5470(*(_DWORD **)(v3 + 564))) == 0 || *(_DWORD *)(*(_DWORD *)(v23 + 112) + 131) != *(_DWORD *)(*(_DWORD *)(v24 + 112) + 131) ) { sub_54D600(*v22); if ( (unsigned int)v39 < 0xC ) { v25 = (_DWORD *)*v22; if ( *v22 ) { v26 = (int *)*(v22 - 19); if ( v26 ) { v27 = *v26; v28 = sub_5D5470(v25); (*(void (__thiscall **)(int *, bool))(v27 + 240))(v26, v28 == 0); v22 = (int *)v37; } } } if ( sub_5D5470(*(_DWORD **)(v3 + 564)) ) { v29 = *(_DWORD **)(v3 + 296); v30 = sub_4090F0(-314171359); sub_492060(v29, (int)v30); } } } if ( a3 == 1 ) { v31 = (int)v36 + 34; } else { v32 = sub_6899D0(*(_WORD *)(v3 + 752)); if ( v32 ) v31 = v32[28] + 34; else v31 = 0; } v33 = v31; v34 = (char *)sub_4090F0(1610400967); v35 = sub_7549E0(v34, v33); sub_8F2EA0((void **)*(v22 - 19), v35); ++v22; ++v39; v37 = (int)v22; } while ( v39 < 8 ); result = (_DWORD *)sub_54D960((int *)v3); } } } } } return result; } // ACB230: using guessed type int dword_ACB230; //----- (0054EE40) -------------------------------------------------------- char __thiscall sub_54EE40(volatile LONG *this) { volatile LONG *v1; // edi int v2; // eax int v3; // ebx int v4; // eax int v5; // eax _DWORD *v6; // esi int v7; // ST0C_4 char *v8; // eax char *v9; // eax int v10; // eax int v11; // eax _DWORD *v12; // esi int v13; // ST0C_4 char *v14; // eax char *v15; // eax int v16; // eax int v17; // eax _DWORD *v18; // esi int v19; // ST0C_4 char *v20; // eax char *v21; // eax int v22; // eax int v23; // eax _DWORD *v24; // esi int v25; // ST0C_4 char *v26; // eax char *v27; // eax v1 = this; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = *(_DWORD *)(v2 + 556); if ( v3 ) { sub_54E040((float *)v3); LOBYTE(v4) = *(_BYTE *)(v3 + 725); if ( (_BYTE)v4 != -1 ) { v4 = (unsigned __int8)v4; if ( (unsigned __int8)v4 < 0xC0u ) { v5 = dword_ADA234[v4]; if ( v5 ) { v6 = (_DWORD *)*((_DWORD *)v1 + 74); v7 = *(_DWORD *)(v5 + 112) + 34; v8 = (char *)sub_4090F0(-1185221389); v9 = sub_7549E0(v8, v7); sub_492060(v6, (int)v9); } } } LOBYTE(v10) = *(_BYTE *)(v3 + 726); if ( (_BYTE)v10 != -1 ) { v10 = (unsigned __int8)v10; if ( (unsigned __int8)v10 < 0xC0u ) { v11 = dword_ADA234[v10]; if ( v11 ) { v12 = (_DWORD *)*((_DWORD *)v1 + 74); v13 = *(_DWORD *)(v11 + 112) + 34; v14 = (char *)sub_4090F0(-1185221389); v15 = sub_7549E0(v14, v13); sub_492060(v12, (int)v15); } } } LOBYTE(v16) = *(_BYTE *)(v3 + 728); if ( (_BYTE)v16 != -1 ) { v16 = (unsigned __int8)v16; if ( (unsigned __int8)v16 < 0xC0u ) { v17 = dword_ADA234[v16]; if ( v17 ) { v18 = (_DWORD *)*((_DWORD *)v1 + 74); v19 = *(_DWORD *)(v17 + 112) + 34; v20 = (char *)sub_4090F0(-1185221389); v21 = sub_7549E0(v20, v19); sub_492060(v18, (int)v21); } } } LOBYTE(v22) = *(_BYTE *)(v3 + 727); if ( (_BYTE)v22 != -1 ) { v22 = (unsigned __int8)v22; if ( (unsigned __int8)v22 < 0xC0u ) { v23 = dword_ADA234[v22]; if ( v23 ) { v24 = (_DWORD *)*((_DWORD *)v1 + 74); v25 = *(_DWORD *)(v23 + 112) + 34; v26 = (char *)sub_4090F0(-1185221389); v27 = sub_7549E0(v26, v25); sub_492060(v24, (int)v27); } } } LOBYTE(v2) = sub_8F2BC0(v1, 1, 0, 0); } } return v2; } //----- (0054EFB0) -------------------------------------------------------- char __thiscall sub_54EFB0(int this, int *a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // ebx const CHAR *v7; // eax _DWORD *v9; // esi int v10; // edi int v11; // eax _DWORD *v12; // ebx void *v13; // eax char *v14; // eax signed int v15; // eax int v16; // eax int v17; // [esp-Ch] [ebp-10h] int v18; // [esp-Ch] [ebp-10h] v4 = (_DWORD *)this; if ( *(_BYTE *)(this + 448) ) goto LABEL_5; if ( !*a2 ) return 0; v5 = *(_DWORD **)(*a2 + 4); if ( v5[2] ) { v6 = *(_DWORD **)(this + 452); v7 = sub_4090F0(1199158485); sub_492060(v6, (int)v7); LABEL_5: byte_BA6BD0 = 1; return 0; } if ( v5[4] ) goto LABEL_5; v9 = (_DWORD *)v5[5]; if ( !v9 ) { byte_BA6BD0 = 1; return 0; } v10 = sub_402BF0((_DWORD *)this); if ( !v10 ) return 0; v11 = v4[117]; if ( !v11 ) { if ( !*(_BYTE *)(v9[28] + 240) || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) == 14 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) == 19 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) == 20 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) == 25 ) { v17 = -1226578909; LABEL_18: v12 = (_DWORD *)v4[113]; v13 = (void *)sub_40C190(v17); LABEL_19: sub_492060(v12, (int)v13); LABEL_20: byte_BA6BD0 = 1; return 0; } goto LABEL_48; } if ( v11 != 1 ) { switch ( v11 ) { case 2: if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 19 ) { v17 = 153303337; goto LABEL_18; } break; case 3: if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 20 ) { v17 = 354889839; goto LABEL_18; } break; case 4: if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 25 ) { v17 = 204092782; goto LABEL_18; } break; default: goto LABEL_20; } goto LABEL_48; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 14 ) { v17 = 119947882; goto LABEL_18; } if ( (unsigned __int8)sub_54CC20((_DWORD **)v10) ) { if ( sub_54D530((_WORD *)v10, (int)v9) == 1 ) { if ( sub_54CEA0((_DWORD **)v10) == 38 ) goto LABEL_48; v12 = (_DWORD *)v4[113]; v18 = sub_54D580((_DWORD **)v10); v14 = (char *)sub_4090F0(-197969332); LABEL_29: v13 = sub_7549E0(v14, v18); goto LABEL_19; } if ( *(_DWORD *)(v9[28] + 131) == 6 ) { if ( sub_54CEA0((_DWORD **)v10) == 38 ) { v12 = (_DWORD *)v4[113]; v18 = sub_54D560((unsigned __int16 *)v10); v14 = (char *)sub_4090F0(1610400967); goto LABEL_29; } if ( sub_54D4F0((_DWORD **)v10, (int)v9) ) goto LABEL_48; v12 = (_DWORD *)v4[113]; } else { if ( !*(_DWORD *)(v10 + 764) ) goto LABEL_48; v15 = sub_54CEA0((_DWORD **)v10); v12 = (_DWORD *)v4[113]; if ( v15 == 38 ) { v18 = sub_54D560((unsigned __int16 *)v10); v14 = (char *)sub_4090F0(1610400967); goto LABEL_29; } } v13 = (void *)sub_4090F0(-314171359); goto LABEL_19; } LABEL_48: if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) == 38 || sub_54D530((_WORD *)v10, (int)v9) == 1 ) v16 = 2; else v16 = *(_DWORD *)(v9[28] + 131) == 6; if ( v16 != *(_DWORD *)(v10 + 764) ) sub_54EAF0(v10, v16 == 0, v16); return sub_54D660((_DWORD **)v10, v4[116], *a2); } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0054F250) -------------------------------------------------------- void __thiscall sub_54F250(_DWORD **this, float a2) { _DWORD **v2; // esi int v3; // eax float v4; // edi v2 = this; sub_54E840((int)this, a2); sub_8D0730((int)(v2 + 152), flt_ACCFCC); if ( v3 == 1 ) { if ( v2[172] ) { (*(void (__stdcall **)(float *, _DWORD *))(*v2[122] + 120))(&a2, v2[172]); if ( a2 != 0.0 ) { v4 = a2; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(a2) + 4)) && v4 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v4))(COERCE_FLOAT(LODWORD(v4)), 1); } } v2[172] = 0; } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0054F2D0) -------------------------------------------------------- void __thiscall sub_54F2D0(int this) { int v1; // esi _DWORD *v2; // esi const CHAR *v3; // eax int v4; // ebx int v5; // edi _DWORD **v6; // ebx int v7; // ST30_4 _DWORD *v8; // esi const CHAR *v9; // eax int v10; // ST30_4 int v11; // ebx int v12; // eax int v13; // ebx _DWORD *v14; // ebx _DWORD *v15; // ST30_4 const CHAR *v16; // eax int v17; // ST30_4 int v18; // ST30_4 _DWORD *v19; // ST30_4 const CHAR *v20; // eax unsigned int v21; // ST30_4 _DWORD *v22; // ebx const CHAR *v23; // eax _DWORD *v24; // ebx _DWORD *v25; // ST2C_4 const CHAR *v26; // eax int v27; // ST2C_4 int v28; // ST2C_4 _DWORD *v29; // ST2C_4 const CHAR *v30; // eax unsigned int v31; // ST2C_4 _DWORD *v32; // ebx const CHAR *v33; // eax _DWORD *v34; // ebx const CHAR *v35; // eax int v36; // ebx int v37; // ST2C_4 _DWORD *v38; // edi const CHAR *v39; // eax unsigned int v40; // edi unsigned int v41; // ebx unsigned int v42; // edi bool v43; // zf volatile LONG *v44; // esi _DWORD *v45; // edi const CHAR *v46; // eax _DWORD *v47; // esi const CHAR *v48; // eax int v49; // [esp-Ch] [ebp-28h] int v50; // [esp+4h] [ebp-18h] int v51; // [esp+8h] [ebp-14h] int v52; // [esp+Ch] [ebp-10h] signed int v53; // [esp+10h] [ebp-Ch] _DWORD *v54; // [esp+10h] [ebp-Ch] char v55; // [esp+16h] [ebp-6h] char v56; // [esp+17h] [ebp-5h] char v57; // [esp+18h] [ebp-4h] char v58; // [esp+19h] [ebp-3h] char v59; // [esp+1Ah] [ebp-2h] char v60; // [esp+1Bh] [ebp-1h] v1 = this; if ( *(_BYTE *)(this + 704) ) { v2 = *(_DWORD **)(this + 296); v3 = sub_40C190(-941299944); sub_492060(v2, (int)v3); return; } v4 = *(_DWORD *)(this + 564); v59 = -1; v58 = -1; v57 = -1; v51 = 0; v5 = sub_5D5470((_DWORD *)v4); if ( !v5 ) { v49 = 1771407352; goto LABEL_58; } v56 = *(_BYTE *)(v4 + 460); *(_WORD *)(v1 + 760) = *(_WORD *)(v5 + 8); v52 = 0; v6 = (_DWORD **)(v1 + 532); v53 = 8; do { if ( sub_5D5470(*v6) ) { v52 = sub_5D5470(*v6); v51 = (int)*v6; } ++v6; --v53; } while ( v53 ); if ( !v52 ) { v49 = -883880437; goto LABEL_58; } v55 = *(_BYTE *)(v51 + 460); *(_WORD *)(v1 + 762) = *(_WORD *)(v52 + 8); *(_DWORD *)(v1 + 696) = ((unsigned __int8)*(_DWORD *)(v51 + 464) - 4) & 7; *(_DWORD *)(v1 + 692) = *(_DWORD *)(v51 + 464); v7 = *(unsigned __int8 *)(*(_DWORD *)(v5 + 112) + 240); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) >= v7 ) { v8 = *(_DWORD **)(v1 + 296); v9 = sub_4090F0(1319683266); sub_492060(v8, (int)v9); return; } if ( *(_DWORD *)(v1 + 764) != 2 ) { v10 = *(unsigned __int8 *)(*(_DWORD *)(v52 + 112) + 240); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) < v10 ) { v49 = -872603382; LABEL_58: v47 = *(_DWORD **)(v1 + 296); v48 = sub_40C190(v49); sub_492060(v47, (int)v48); return; } v11 = *(_DWORD *)(v52 + 112); v12 = *(_DWORD *)(v11 + 131); if ( *(_DWORD *)(*(_DWORD *)(v5 + 112) + 131) != v12 && v12 ) { v49 = -1176520779; goto LABEL_58; } v13 = *(unsigned __int8 *)(v11 + 247); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) > v13 ) { v49 = -939907822; goto LABEL_58; } } v14 = (_DWORD *)sub_5D5470(*(_DWORD **)(v1 + 568)); v50 = sub_5D5470(*(_DWORD **)(v1 + 572)); v54 = (_DWORD *)sub_5D5470(*(_DWORD **)(v1 + 576)); v60 = 1; if ( v14 ) { v59 = *(_BYTE *)(*(_DWORD *)(v1 + 568) + 460); if ( *(_DWORD *)(*(_DWORD *)(v5 + 112) + 131) != *(_DWORD *)(v14[28] + 131) ) { v15 = *(_DWORD **)(v1 + 296); v16 = sub_40C190(-1075902460); sub_492060(v15, (int)v16); v60 = 0; } v17 = *(unsigned __int8 *)(v14[28] + 240); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) < v17 || (v18 = *(unsigned __int8 *)(v14[28] + 247), (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) > v18) ) { v19 = *(_DWORD **)(v1 + 296); v20 = sub_40C190(-1764959033); sub_492060(v19, (int)v20); v60 = 0; } if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v14 + 12))(v14) < 1 || (v21 = (*(int (__thiscall **)(_DWORD *))(*v14 + 16))(v14), (*(int (__thiscall **)(_DWORD *))(*v14 + 12))(v14) > v21) ) { v22 = *(_DWORD **)(v1 + 296); v23 = sub_40C190(-708912913); sub_492060(v22, (int)v23); v60 = 0; } } v24 = (_DWORD *)v50; if ( v50 ) { v58 = *(_BYTE *)(*(_DWORD *)(v1 + 572) + 460); if ( *(_DWORD *)(*(_DWORD *)(v5 + 112) + 131) != *(_DWORD *)(*(_DWORD *)(v50 + 112) + 131) ) { v25 = *(_DWORD **)(v1 + 296); v26 = sub_40C190(-1505689074); sub_492060(v25, (int)v26); v60 = 0; } v27 = *(unsigned __int8 *)(v24[28] + 240); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) < v27 || (v28 = *(unsigned __int8 *)(v24[28] + 247), (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) > v28) ) { v29 = *(_DWORD **)(v1 + 296); v30 = sub_40C190(-1864973527); sub_492060(v29, (int)v30); v60 = 0; } if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v24 + 12))(v24) < 1 || (v31 = (*(int (__thiscall **)(_DWORD *))(*v24 + 16))(v24), (*(int (__thiscall **)(_DWORD *))(*v24 + 12))(v24) > v31) ) { v32 = *(_DWORD **)(v1 + 296); v33 = sub_40C190(-507326667); sub_492060(v32, (int)v33); v60 = 0; } } if ( v54 ) { v57 = *(_BYTE *)(*(_DWORD *)(v1 + 576) + 460); if ( *(_DWORD *)(*(_DWORD *)(v5 + 112) + 131) != *(_DWORD *)(v54[28] + 131) ) { v34 = *(_DWORD **)(v1 + 296); v35 = sub_40C190(-1523055341); sub_492060(v34, (int)v35); v60 = 0; } v36 = *(unsigned __int8 *)(v54[28] + 240); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) < v36 || (v37 = *(unsigned __int8 *)(v54[28] + 247), (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) > v37) ) { v38 = *(_DWORD **)(v1 + 296); v39 = sub_40C190(-1814314464); sub_492060(v38, (int)v39); v60 = 0; } if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v54 + 12))(v54) < 1 || (v40 = (*(int (__thiscall **)(_DWORD *))(*v54 + 16))(v54), (*(int (__thiscall **)(_DWORD *))(*v54 + 12))(v54) > v40) ) { v49 = -658123724; goto LABEL_58; } } if ( !v60 ) return; if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v52 + 12))(v52) < 1 || (v41 = (*(int (__thiscall **)(int))(*(_DWORD *)v52 + 16))(v52), (*(int (__thiscall **)(int))(*(_DWORD *)v52 + 12))(v52) > v41) ) { v45 = *(_DWORD **)(v1 + 296); v46 = sub_40C190(-1804890980); sub_492060(v45, (int)v46); v49 = 730969977; goto LABEL_58; } v42 = sub_680FA0(0i64, 0i64, 0i64, 0i64); if ( v42 > sub_680E60(byte_AD9238) ) { v49 = -1285540828; goto LABEL_58; } v43 = *(_BYTE *)(v1 + 740) == 0; *(_BYTE *)(v1 + 724) = v56; *(_BYTE *)(v1 + 725) = v55; *(_BYTE *)(v1 + 726) = v59; *(_BYTE *)(v1 + 727) = v58; *(_BYTE *)(v1 + 728) = v57; *(_DWORD *)(v1 + 732) = v42; if ( v43 ) { sub_54E040((float *)v1); } else { v44 = *(volatile LONG **)(v1 + 736); if ( v44 ) sub_8F9D50(&unk_BA6B10, v44, 0, 0, 0); } } //----- (0054F880) -------------------------------------------------------- void __thiscall sub_54F880(_BYTE *this, unsigned int a2) { int v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ecx _DWORD *v6; // ecx v2 = (int)this; if ( this[704] ) { byte_BA6BD0 = 1; } else { v3 = *(_DWORD **)&this[4 * a2 + 532]; if ( v3 ) { v4 = sub_5D5470(*(_DWORD **)&this[4 * a2 + 532]); if ( v4 ) { *(_DWORD *)(v2 + 392) = v3[114]; *(_DWORD *)(v2 + 400) = 0; v5 = v3[115]; *(_DWORD *)(v2 + 404) = v4; *(_DWORD *)(v2 + 396) = v5; *(_DWORD *)(v2 + 408) = 0; *(_DWORD *)(v2 + 448) = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); *(_DWORD *)(v2 + 376) = v3[118]; dword_BA6BCC = v2 + 368; sub_54D600((int)v3); sub_54CEF0((_DWORD *)v2, a2); if ( !*(_BYTE *)(v2 + 740) ) { v6 = *(_DWORD **)(v2 + 564); if ( v6 ) { if ( !sub_5D5470(v6) ) sub_54EAF0(v2, 1, 0); } } } } } } // BA6BCC: using guessed type int dword_BA6BCC; // BA6BD0: using guessed type char byte_BA6BD0; //----- (0054F950) -------------------------------------------------------- void __thiscall sub_54F950(int this, int a2, unsigned int a3) { switch ( a2 ) { case 11: sub_54F880((_BYTE *)this, a3); break; case 12: sub_54F2D0(this); break; case 13: sub_4AA080(*(_BYTE ***)(this + 296), 1); break; case 15: sub_54CEC0(); break; default: return; } } //----- (0054F9B0) -------------------------------------------------------- _DWORD *__thiscall sub_54F9B0(_DWORD *this) { int v1; // esi v1 = (int)this; sub_54D7C0(this); return sub_54EAF0(v1, 1, 0); } //----- (0054F9D0) -------------------------------------------------------- char __thiscall sub_54F9D0(volatile LONG *this, int a2, int a3) { char result; // al if ( !a2 ) return sub_54EE40(this); result = a2 - 1; if ( a2 == 1 ) result = (*(int (**)(void))(*this + 360))(); return result; } //----- (0054FA00) -------------------------------------------------------- volatile LONG *__cdecl sub_54FA00(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1DCu); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_54CC50((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (0054FB40) -------------------------------------------------------- int __cdecl sub_54FB40(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ItemUpgradeMsgWin::`vftable'; *(_DWORD *)(v2 + 232) = &ItemUpgradeMsgWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CBCF8: using guessed type void *ItemUpgradeMsgWin::`vftable'; // 9CBD14: using guessed type void *ItemUpgradeMsgWin::`vftable'; //----- (0054FCA0) -------------------------------------------------------- char *__thiscall sub_54FCA0(char *this) { char *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi void *v7; // ecx int v8; // eax int v9; // eax char *v10; // eax __int16 v11; // ax __int16 *v12; // ecx void *v14; // [esp-1Ch] [ebp-48h] int v15; // [esp-18h] [ebp-44h] int v16; // [esp-14h] [ebp-40h] int v17; // [esp-10h] [ebp-3Ch] void *v18; // [esp-Ch] [ebp-38h] int v19; // [esp-8h] [ebp-34h] size_t v20; // [esp-4h] [ebp-30h] char *v21; // [esp+10h] [ebp-1Ch] void **v22; // [esp+14h] [ebp-18h] char *v23; // [esp+18h] [ebp-14h] __int16 *v24; // [esp+1Ch] [ebp-10h] int v25; // [esp+28h] [ebp-4h] v1 = this; v21 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &ItemUpgradeWin::`vftable'; *((_DWORD *)v1 + 58) = &ItemUpgradeWin::`vftable'; v25 = 0; *((_DWORD *)v1 + 92) = &PgWinDrop::`vftable'; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 94) = 0; *((_DWORD *)v1 + 96) = &DropContents::`vftable'; *((_WORD *)v1 + 222) = -1; *((_DWORD *)v1 + 112) = 0; sub_8D0610(v1 + 580); sub_8D06C0((float *)v1 + 152); LOBYTE(v25) = 3; sub_8D4790((_DWORD *)v1 + 158); *((_DWORD *)v1 + 167) = 0; *((_DWORD *)v1 + 168) = 0; *((_DWORD *)v1 + 169) = 0; *((_DWORD *)v1 + 170) = 0; *((_DWORD *)v1 + 171) = 0; *((float *)v1 + 177) = 0.0; *((_WORD *)v1 + 352) = 0; *((_DWORD *)v1 + 180) = 0; *((float *)v1 + 178) = 10.0; *((_DWORD *)v1 + 174) = -1; *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 173) = 0; *((float *)v1 + 179) = 0.0; v2 = *((_DWORD *)v1 + 167); LOBYTE(v25) = 9; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *((_DWORD *)v1 + 167) = 0; } v3 = *((_DWORD *)v1 + 168); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 168) = 0; } v4 = *((_DWORD *)v1 + 169); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 169) = 0; } v5 = *((_DWORD *)v1 + 170); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 170) = 0; } v6 = *((_DWORD *)v1 + 171); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v1 + 171) = 0; } v20 = 48; v1[728] = -1; v19 = 0; v18 = v1 + 532; *((_DWORD *)v1 + 172) = 0; *((_DWORD *)v1 + 181) = -1; *((_DWORD *)v1 + 183) = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 93) = v1 + 384; memset(v18, v19, v20); memset(v1 + 456, 0, 0x30u); v14 = v7; v22 = &v14; *((_DWORD *)v1 + 184) = 0; v1[740] = 1; *((_DWORD *)v1 + 186) = 0; *((_DWORD *)v1 + 187) = 0; v19 = 15; v18 = 0; LOBYTE(v14) = 0; sub_4018E0(&v14, "Grade6", 6u); *((_WORD *)v1 + 371) = sub_747F30(&unk_ACDC6C, v14, v15, v16, v17, (int)v18, v19, v20); v8 = 0; v24 = (__int16 *)(v1 + 752); do { v9 = v8 + 1; v20 = v9; v22 = (void **)v9; v10 = sub_7549E0("BR_UPSORCE0%d"); v19 = 15; v18 = 0; LOBYTE(v14) = 0; v23 = v10 + 1; sub_4018E0(&v14, v10, strlen(v10)); v11 = sub_747F30(&unk_ACDC6C, v14, v15, v16, v17, (int)v18, v19, v20); v12 = v24; *v24 = v11; v8 = (int)v22; v24 = v12 + 1; } while ( (signed int)v22 < 4 ); *((_DWORD *)v1 + 191) = 0; *((_DWORD *)v1 + 190) = -1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CBF38: using guessed type void *ItemUpgradeWin::`vftable'; // 9CBF54: using guessed type void *ItemUpgradeWin::`vftable'; //----- (0054FFB0) -------------------------------------------------------- volatile LONG *__cdecl sub_54FFB0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x300u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_54FCA0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005500E0) -------------------------------------------------------- char __thiscall sub_5500E0(void *this, int a2) { int v2; // esi char *v3; // eax void **v4; // eax int v5; // edi void **v6; // ebx char *v7; // eax void **v8; // eax int v9; // edi void **v10; // ebx char *v11; // eax void **v12; // eax int v13; // edi void **v14; // ebx char *v15; // eax void **v16; // eax int v17; // edi void **v18; // ebx char *v19; // eax void **v20; // eax int v21; // edi void **v22; // ebx volatile LONG *v23; // edi void (__thiscall ***v24)(_DWORD, signed int); // esi LONG v25; // eax char result; // al int v27; // ebx char *v28; // eax volatile LONG **v29; // eax int v30; // edi int v31; // ebx volatile LONG *v32; // eax volatile LONG **v33; // eax int v34; // eax volatile LONG *v35; // eax volatile LONG v36; // edx const CHAR *v37; // eax volatile LONG **v38; // eax volatile LONG **v39; // eax _DWORD *v40; // eax int v41; // eax int v42; // eax volatile LONG *v43; // eax volatile LONG **v44; // eax volatile LONG *v45; // eax int v46; // edx volatile LONG **v47; // eax int v48; // eax volatile LONG *v49; // edx int v50; // eax volatile LONG *v51; // eax const CHAR *v52; // eax int v53; // eax volatile LONG *v54; // edx int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx const CHAR *v58; // eax volatile LONG **v59; // eax volatile LONG *v60; // edx volatile LONG *v61; // ecx volatile LONG *v62; // edx int v63; // eax volatile LONG *v64; // eax const CHAR *v65; // eax int v66; // eax volatile LONG *v67; // edx int v68; // eax volatile LONG *v69; // eax const CHAR *v70; // eax volatile LONG **v71; // eax volatile LONG **v72; // eax volatile LONG *v73; // eax int v74; // ST44_4 int v75; // edx volatile LONG *v76; // eax volatile LONG **v77; // ecx const char *v78; // eax const char *v79; // eax const char *v80; // eax const char *v81; // eax int *v82; // ecx volatile LONG **v83; // eax volatile LONG *v84; // eax volatile LONG *v85; // ST50_4 int v86; // ecx volatile LONG **v87; // eax volatile LONG *v88; // eax volatile LONG **v89; // ecx int v90; // edx volatile LONG *v91; // eax volatile LONG **v92; // ecx int v93; // edx volatile LONG *v94; // esi void (__thiscall ***v95)(_DWORD, signed int); // esi int v96; // [esp+90h] [ebp-60h] int v97; // [esp+94h] [ebp-5Ch] int v98; // [esp+98h] [ebp-58h] volatile LONG *v99; // [esp+9Ch] [ebp-54h] volatile LONG *v100; // [esp+A0h] [ebp-50h] volatile LONG *v101; // [esp+A4h] [ebp-4Ch] volatile LONG *v102; // [esp+A8h] [ebp-48h] int v103; // [esp+ACh] [ebp-44h] int v104; // [esp+B0h] [ebp-40h] int v105; // [esp+B4h] [ebp-3Ch] volatile LONG **v106; // [esp+B8h] [ebp-38h] char v107; // [esp+BCh] [ebp-34h] int v108; // [esp+ECh] [ebp-4h] v2 = (int)this; v98 = a2; v103 = 0; v108 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACA838, "SUCC_1.nif"); v4 = sub_8D03E0(v3, 0); v5 = *(_DWORD *)(v2 + 668); v6 = v4; if ( (void **)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v2 + 668) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACA838, "SUCC_2.nif"); v8 = sub_8D03E0(v7, 0); v9 = *(_DWORD *)(v2 + 672); v10 = v8; if ( (void **)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *(_DWORD *)(v2 + 672) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)v10 + 1); } if ( !byte_ACAD5C ) sub_420410(); v11 = (char *)sub_401410(byte_ACA838, "FAIL_0.nif"); v12 = sub_8D03E0(v11, 0); v13 = *(_DWORD *)(v2 + 676); v14 = v12; if ( (void **)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(v2 + 676) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)v14 + 1); } if ( !byte_ACAD5C ) sub_420410(); v15 = (char *)sub_401410(byte_ACA838, "FAIL_1.nif"); v16 = sub_8D03E0(v15, 0); v17 = *(_DWORD *)(v2 + 680); v18 = v16; if ( (void **)v17 != v16 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); *(_DWORD *)(v2 + 680) = v18; if ( v18 ) InterlockedIncrement((volatile LONG *)v18 + 1); } if ( !byte_ACAD5C ) sub_420410(); v19 = (char *)sub_401410(byte_ACA838, "DESTROY.nif"); v20 = sub_8D03E0(v19, 0); v21 = *(_DWORD *)(v2 + 684); v22 = v20; if ( (void **)v21 != v20 ) { if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); *(_DWORD *)(v2 + 684) = v22; if ( v22 ) InterlockedIncrement((volatile LONG *)v22 + 1); } v23 = (volatile LONG *)sub_43D0D0(4u); v100 = v23; if ( !v23 ) { v24 = (void (__thiscall ***)(_DWORD, signed int))v103; v108 = -1; if ( v103 ) { v25 = InterlockedDecrement((volatile LONG *)(v103 + 4)); goto LABEL_49; } return 0; } v27 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v28 = (char *)sub_401410(byte_ACAB50, "Game\\ItemUpgrade.nif"); sub_8F66B0(v28, (int)&v103, v27); if ( !v103 ) return 0; v29 = sub_8FB140(v103, (int)"Frame", (int)&v105, (int)&v104, v23); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v29, 0, v98, (int)"ItemUpgradeWin", 0) ) { v24 = (void (__thiscall ***)(_DWORD, signed int))v103; v108 = -1; if ( v103 ) { v25 = InterlockedDecrement((volatile LONG *)(v103 + 4)); LABEL_49: if ( !v25 ) { if ( v24 ) (**v24)(v24, 1); } } return 0; } v30 = v105; v31 = v104; v32 = (volatile LONG *)sub_43D0D0(0x13u); if ( v32 ) v33 = sub_8FB140(v103, (int)"Theme", (int)&v105, (int)&v104, v32); else v33 = sub_8FB140(v103, (int)"Theme", (int)&v105, (int)&v104, 0); sub_8F3EB0(v105 - v30, v104 - v31, (int)v33, v2, 0, 0); if ( sub_8F71E0(v103, (int)"WinTitle", &v105, &v104, &v97, &v96) ) { v34 = sub_421050(0); v35 = sub_8F4A20(v105 - v30, v104 - v31, v97, v96, v34, v2, 0, 0); v36 = *v35; v106 = (volatile LONG **)v35; (*(void (__thiscall **)(volatile LONG *, signed int))(v36 + 488))(v35, 1); (*((void (__stdcall **)(int *))*v106 + 117))(&dword_AA8D98); v99 = *v106 + 118; v37 = sub_40C190(861503860); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v99)(v106, v37); (*((void (__stdcall **)(_DWORD))*v106 + 60))(0); v38 = sub_8FB140(v103, (int)"Panel01", (int)&v105, (int)&v104, v100); sub_8F3EB0(v105 - v30, v104 - v31, (int)v38, v2, 0, 0); v39 = sub_8FB140(v103, (int)"Panel02", (int)&v105, (int)&v104, v100); sub_8F3EB0(v105 - v30, v104 - v31, (int)v39, v2, 0, 0); v40 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v103 + 72))("Panel03"); v41 = sub_85C050(v40, 8); v99 = (volatile LONG *)v41; if ( v41 ) { InterlockedIncrement((volatile LONG *)(v41 + 4)); v41 = (int)v99; } v42 = **(_DWORD **)(v41 + 40); LOBYTE(v108) = 1; if ( v42 ) v43 = *(volatile LONG **)(v42 + 4); else v43 = 0; v44 = sub_8FB140(v103, (int)"Panel03", (int)&v105, (int)&v104, v43); sub_8F3EB0(v105 - v30, v104 - v31, (int)v44, v2, 0, 0); v106 = sub_8FB140(v103, (int)"ClsNor", (int)&v105, (int)&v104, v100); sub_8FB650(v106, v103, (int)"ClsClick"); sub_8FB650(v106, v103, (int)"ClsOver"); sub_8FE0F0(v105 - v30, v104 - v31, (int)v106, v2, 13, 0, 0); v102 = (volatile LONG *)sub_43D0D0(0x18u); v45 = (volatile LONG *)sub_43D0D0(4u); v46 = *(_DWORD *)v103; v101 = v45; if ( (*(int (__stdcall **)(const char *))(v46 + 72))("HelpLinkNor") ) { v106 = sub_8FB140(v103, (int)"HelpLinkNor", (int)&v105, (int)&v104, v101); sub_8FB650(v106, v103, (int)"HelpLinkClick"); sub_8FB650(v106, v103, (int)"HelpLinkOver"); sub_8FE0F0(v105 - v30, v104 - v31, (int)v106, v2, 15, 0, 0); } v47 = sub_8FB140(v103, (int)"Object01", (int)&v105, (int)&v104, v102); sub_8F3EB0(v105 - v30, v104 - v31, (int)v47, v2, 0, 0); v106 = sub_8FB140(v103, (int)"OkNor", (int)&v105, (int)&v104, v100); sub_8FB650(v106, v103, (int)"OkClick"); sub_8FB650(v106, v103, (int)"OkOver"); sub_8FE0F0(v105 - v30, v104 - v31, (int)v106, v2, 12, 0, 0); v48 = *v106[9]; v49 = *(volatile LONG **)(v48 + 20); v102 = *(volatile LONG **)(v48 + 24); v101 = v49; v50 = sub_421050(0); v51 = sub_8F4A20(v105 - v30, v104 - v31 + 1, (int)v101, (int)v102, v50, v2, 0, 0); *(_DWORD *)(v2 + 360) = v51; (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); v102 = (volatile LONG *)(**(_DWORD **)(v2 + 360) + 472); v52 = sub_40C190(-1660486948); (*(void (__thiscall **)(_DWORD, const CHAR *))v102)(*(_DWORD *)(v2 + 360), v52); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); v106 = sub_8FB140(v103, (int)"CancelNor", (int)&v105, (int)&v104, v100); sub_8FB650(v106, v103, (int)"CancelClick"); sub_8FB650(v106, v103, (int)"CancelOver"); sub_8FE0F0(v105 - v30, v104 - v31, (int)v106, v2, 13, 0, 0); v53 = *v106[9]; v54 = *(volatile LONG **)(v53 + 20); v102 = *(volatile LONG **)(v53 + 24); v101 = v54; v55 = sub_421050(0); v56 = sub_8F4A20(v105 - v30, v104 - v31 + 1, (int)v101, (int)v102, v55, v2, 0, 0); v57 = *v56; v106 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); v102 = *v106 + 118; v58 = sub_40C190(-1750816545); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v102)(v106, v58); (*((void (__stdcall **)(_DWORD))*v106 + 60))(0); v59 = sub_8FB140(v103, (int)"ForgeText", (int)&v105, (int)&v104, v100); v60 = v59[9]; v106 = v59; v61 = *(volatile LONG **)(*v60 + 24); v62 = *(volatile LONG **)(*v60 + 20); v102 = v61; v101 = v62; v63 = sub_421050(3); v64 = sub_8F4A20(v105 - v30, v104 - v31 + 1, (int)v101, (int)v102, v63, v2, 0, 0); *(_DWORD *)(v2 + 744) = v64; (*(void (__thiscall **)(volatile LONG *, signed int))(*v64 + 488))(v64, 5); v102 = (volatile LONG *)(**(_DWORD **)(v2 + 744) + 472); v65 = sub_40C190(859803518); (*(void (__thiscall **)(_DWORD, const CHAR *))v102)(*(_DWORD *)(v2 + 744), v65); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 744) + 240))(0); v66 = *v106[9]; v67 = *(volatile LONG **)(v66 + 20); v102 = *(volatile LONG **)(v66 + 24); v101 = v67; v68 = sub_421050(3); v69 = sub_8F4A20(v105 - v30, v104 - v31 + 20, (int)v101, (int)v102, v68, v2, 0, 0); *(_DWORD *)(v2 + 748) = v69; (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 488))(v69, 5); v102 = (volatile LONG *)(**(_DWORD **)(v2 + 748) + 472); v70 = sub_40C190(-539368232); (*(void (__thiscall **)(_DWORD, const CHAR *))v102)(*(_DWORD *)(v2 + 748), v70); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 748) + 240))(0); v71 = sub_8FB140(v103, (int)"IconSlot", (int)&v105, (int)&v104, v100); sub_8F3EB0(v105 - v30, v104 - v31, (int)v71, v2, 0, 0); *(_DWORD *)(v2 + 736) = sub_54FB40(v98); v101 = (volatile LONG *)-8; v106 = (volatile LONG **)(v2 + 532); do { sprintf(&v107, "ForgeSlot%02d", (char *)v101 + 9); v72 = sub_8FB140(v103, (int)&v107, (int)&v105, (int)&v104, v100); v73 = sub_8F3EB0(v105 - v30, v104 - v31, (int)v72, v2, 0, 0); v74 = v98; v75 = v105; *(v106 - 19) = v73; v76 = sub_54FA00(v75 - v30 + 1, v104 - v31 + 1, (int)(v101 + 2), v2, v74); *v106 = v76; (*(void (__thiscall **)(volatile LONG *, signed int))(*v76 + 240))(v76, 1); (*(void (__stdcall **)(signed int))(**v106 + 256))(1); (*(void (__stdcall **)(signed int))(**(v106 - 19) + 240))(1); (*(void (__stdcall **)(signed int))(**(v106 - 19) + 256))(1); v77 = v106; *((_DWORD *)*(v106 - 19) + 68) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(v77 - 19) + 240))(1); switch ( (unsigned int)v101 ) { case 0u: *((_DWORD *)*v106 + 117) = 0; v78 = sub_40C190(-1833304876); sub_8F2EA0((void **)*(v106 - 19), v78); break; case 1u: *((_DWORD *)*v106 + 117) = 2; v79 = sub_40A910(217169682); goto LABEL_78; case 2u: *((_DWORD *)*v106 + 117) = 3; v80 = sub_40A910(-264891610); sub_8F2EA0((void **)*(v106 - 19), v80); break; case 3u: *((_DWORD *)*v106 + 117) = 4; v81 = sub_40A910(-164293344); sub_8F2EA0((void **)*(v106 - 19), v81); break; default: *((_DWORD *)*v106 + 117) = 1; v79 = sub_40C190(-719895771); LABEL_78: sub_8F2EA0((void **)*(v106 - 19), v79); break; } (*(void (__stdcall **)(signed int))(**v106 + 516))(11); (*(void (__stdcall **)(signed int))(**v106 + 560))(10); v82 = (int *)v106; *((_DWORD *)*v106 + 76) = 1; sub_5D3170(*v82, 1); ++v106; v101 = (volatile LONG *)((char *)v101 + 1); } while ( (signed int)(v101 + 2) < 12 ); v83 = sub_8FB140(v103, (int)"SlotOn", (int)&v105, (int)&v104, v100); v84 = sub_8F3EB0(v105 - v30, v104 - v31, (int)v83, v2, 0, 0); v85 = v100; v86 = v103; *(_DWORD *)(v2 + 504) = v84; v87 = sub_8FB140(v86, (int)"SlotBomb", (int)&v105, (int)&v104, v85); v106 = v87; v88 = sub_8F3EB0(v105 - v30 + 45, v104 - v31, (int)v87, v2, 0, 0); v89 = v106; v90 = v104; *(_DWORD *)(v2 + 520) = v88; v91 = sub_8F3EB0(v105 - v30 + 85, v90 - v31, (int)v89, v2, 0, 0); v92 = v106; v93 = v104; *(_DWORD *)(v2 + 524) = v91; *(_DWORD *)(v2 + 528) = sub_8F3EB0(v105 - v30 + 125, v93 - v31, (int)v92, v2, 0, 0); sub_402E40((void *)v2, xRight, dword_AC2F78, COERCE_INT(0.30000001), COERCE_INT(0.5)); v94 = v99; LOBYTE(v108) = 0; if ( !InterlockedDecrement(v99 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v94)(v94, 1); v95 = (void (__thiscall ***)(_DWORD, signed int))v103; v108 = -1; if ( v103 && !InterlockedDecrement((volatile LONG *)(v103 + 4)) && v95 ) (**v95)(v95, 1); result = 1; } else { v108 = -1; sub_410C00(&v103); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00550DC0) -------------------------------------------------------- void *__thiscall sub_550DC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ForgeSlotInvWin::`vftable'; *((_DWORD *)this + 58) = &ForgeSlotInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CBA64: using guessed type void *ForgeSlotInvWin::`vftable'; // 9CBA84: using guessed type void *ForgeSlotInvWin::`vftable'; //----- (00550E00) -------------------------------------------------------- void *__thiscall sub_550E00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemUpgradeMsgWin::`vftable'; *((_DWORD *)this + 58) = &ItemUpgradeMsgWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CBCF8: using guessed type void *ItemUpgradeMsgWin::`vftable'; // 9CBD14: using guessed type void *ItemUpgradeMsgWin::`vftable'; //----- (00550E40) -------------------------------------------------------- void *__thiscall sub_550E40(void *this, char a2) { void *v2; // esi v2 = this; sub_54D100(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00550F10) -------------------------------------------------------- signed int __stdcall sub_550F10(char a1) { signed int result; // eax CHAR pwszKLID; // [esp+0h] [ebp-10h] GetKeyboardLayoutNameA(&pwszKLID); switch ( a1 ) { case 8: return 14; case 0xD: return 28; case 0x10: return 42; case 0x11: return 29; case 0x12: return 56; case 0x13: return 119; case 0x14: return 58; case 0x1B: return 1; case 0x20: return 57; case 0x21: return 122; case 0x22: return 127; case 0x23: return 125; case 0x24: return 120; case 0x25: return 123; case 0x26: return 121; case 0x27: return 124; case 0x28: return 126; case 0x2D: return 128; case 0x2E: return 129; case 0x30: return 11; case 0x31: return 2; case 0x32: return 3; case 0x33: return 4; case 0x34: return 5; case 0x35: return 6; case 0x36: return 7; case 0x37: return 8; case 0x38: return 9; case 0x39: return 10; case 0x41: if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { goto LABEL_8; } goto LABEL_7; case 0x42: return 48; case 0x43: return 46; case 0x44: return 32; case 0x45: return 18; case 0x46: return 33; case 0x47: return 34; case 0x48: return 35; case 0x49: return 23; case 0x4A: return 36; case 0x4B: return 37; case 0x4C: return 38; case 0x4D: return 50; case 0x4E: return 49; case 0x4F: return 24; case 0x50: return 25; case 0x51: if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { LABEL_7: result = 30; } else { LABEL_8: result = 16; } return result; case 0x52: return 19; case 0x53: return 31; case 0x54: return 20; case 0x55: return 22; case 0x56: return 47; case 0x57: if ( strcmp(&pwszKLID, "0000040C") && strcmp(&pwszKLID, "00000484") && strcmp(&pwszKLID, "0000047E") && strcmp(&pwszKLID, "00000483") && strcmp(&pwszKLID, "00000482") ) { goto LABEL_40; } goto LABEL_41; case 0x58: result = 45; break; case 0x59: if ( !strcmp(&pwszKLID, "00000407") ) result = 44; else result = 21; break; case 0x5A: if ( !strcmp(&pwszKLID, "00000407") ) { result = 21; } else if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { LABEL_40: result = 17; } else { LABEL_41: result = 44; } break; case 0x5B: result = 130; break; case 0x60: result = 82; break; case 0x61: result = 79; break; case 0x62: result = 80; break; case 0x63: result = 81; break; case 0x64: result = 75; break; case 0x65: result = 76; break; case 0x66: result = 77; break; case 0x67: result = 71; break; case 0x68: result = 72; break; case 0x69: result = 73; break; case 0x6A: result = 55; break; case 0x6B: result = 78; break; case 0x6D: result = 74; break; case 0x6E: result = 83; break; case 0x6F: result = 53; break; case 0x70: result = 59; break; case 0x71: result = 60; break; case 0x72: result = 61; break; case 0x73: result = 62; break; case 0x74: result = 63; break; case 0x75: result = 64; break; case 0x76: result = 65; break; case 0x77: result = 66; break; case 0x78: result = 67; break; case 0x79: result = 68; break; case 0x7A: result = 85; break; case 0x7B: result = 86; break; case 0x90: result = 69; break; case 0x91: result = 70; break; case 0xBA: result = 39; break; case 0xBB: result = 13; break; case 0xBC: result = 51; break; case 0xBD: result = 12; break; case 0xBE: result = 52; break; case 0xBF: result = 116; break; case 0xC0: result = 41; break; case 0xDB: result = 26; break; case 0xDC: result = 43; break; case 0xDD: result = 27; break; case 0xDE: result = 40; break; case 0xF5: result = 15; break; default: result = 0; break; } return result; } //----- (00551ED0) -------------------------------------------------------- int __thiscall sub_551ED0(const char *this, char *a2) { signed int v3; // edi const char *v4; // esi if ( !a2 ) return -1; v3 = 0; v4 = this + 344; while ( strncmp(v4, a2, strlen(a2)) ) { ++v3; v4 += 258; if ( v3 >= 95 ) return -1; } return v3; } //----- (00551F30) -------------------------------------------------------- char sub_551F30() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "KeyRemappingWin"); return (char)v0; } //----- (00551F60) -------------------------------------------------------- char __stdcall sub_551F60(int a1) { FILE *v1; // eax FILE *v2; // esi char v4; // [esp+0h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v4, "%s%s", byte_ACA520, "KeyMapping.mco"); v1 = fopen(&v4, "wb"); v2 = v1; if ( !v1 ) return 0; fwrite(&dword_AB6818, 0xF4u, 1u, v1); fclose(v2); return 1; } // AB6818: using guessed type int dword_AB6818; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00552000) -------------------------------------------------------- char __thiscall sub_552000(_DWORD *this, int a2) { _BYTE *v2; // edi _DWORD *v3; // esi char result; // al char v5; // bl int v6; // eax int v7; // eax int v8; // ecx _BYTE *v9; // eax const char *v10; // [esp-8h] [ebp-20h] const char *v11; // [esp-8h] [ebp-20h] const char *v12; // [esp-8h] [ebp-20h] const char *v13; // [esp-8h] [ebp-20h] CHAR pwszKLID; // [esp+8h] [ebp-10h] v2 = (_BYTE *)dword_ACDC84; v3 = this; if ( !dword_ACDC84 ) return 0; v5 = 0; GetKeyboardLayoutNameA(&pwszKLID); v6 = v3[6293]; if ( v6 == 1 ) { *((_BYTE *)v3 + 859) = 27; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "ESC "); result = 1; } else { if ( *((_BYTE *)v3 + 25458) ) *((_BYTE *)v3 + 25458) = 0; if ( v2[38] & 4 ) { *((_BYTE *)v3 + 258 * v6 + 600) = 16; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "LSHIFT "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[39] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 600) = 16; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "RSHIFT "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[36] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 600) = 17; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "LCTRL "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[46] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 600) = 17; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "RCTRL "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[40] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 600) = 18; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "LMENU "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[47] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 600) = 18; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "RMENU "); *((_BYTE *)v3 + 25458) = 1; } if ( v2[36] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 13; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "ENTER "); } if ( v2[46] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 13; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "ENTER "); } if ( v2[33] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 49; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "1 "); } if ( v2[33] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 50; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "2 "); } if ( v2[33] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 51; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "3 "); } if ( v2[33] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 52; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "4 "); } if ( v2[33] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 53; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "5 "); } if ( v2[33] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 54; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "6 "); } if ( v2[34] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 55; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "7 "); } if ( v2[34] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 56; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "8 "); } if ( v2[34] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 57; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "9 "); } if ( v2[34] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 48; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "0 "); } if ( v2[34] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -67; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "- "); } if ( v2[34] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -69; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "= "); } if ( v2[35] & 1 ) { if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 65; v10 = "A "; } else { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 81; v10 = "Q "; } v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, v10); } if ( v2[35] & 2 ) { if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 90; v11 = "Z "; } else { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 87; v11 = "W "; } v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, v11); } if ( v2[35] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 69; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "E "); } if ( v2[35] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 82; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "R "); } if ( v2[35] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 84; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "T "); } if ( v2[35] & 0x20 ) { v7 = strcmp(&pwszKLID, "00000407"); v8 = 258 * v3[6293]; v5 = 1; if ( v7 ) { *((_BYTE *)v3 + v8 + 601) = 89; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Y "); } else { *((_BYTE *)v3 + v8 + 601) = 90; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Z "); } } if ( v2[35] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 85; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "U "); } if ( v2[35] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 73; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "I "); } if ( v2[36] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 79; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "O "); } if ( v2[36] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 80; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "P "); } if ( v2[36] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -37; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "[ "); } if ( v2[36] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -35; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "] "); } if ( v2[36] & 0x40 ) { if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 81; v12 = "Q "; } else { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 65; v12 = "A "; } v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, v12); } if ( v2[36] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 83; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "S "); } if ( v2[37] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 68; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "D "); } if ( v2[37] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 70; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F "); } if ( v2[37] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 71; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "G "); } if ( v2[37] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 72; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "H "); } if ( v2[37] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 74; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "J "); } if ( v2[37] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 75; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "K "); } if ( v2[37] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 76; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "L "); } if ( v2[37] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -70; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "; "); } if ( v2[38] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -34; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "' "); } if ( v2[38] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -36; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "\\ "); } if ( v2[38] & 0x10 ) { if ( !strcmp(&pwszKLID, "00000407") ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 89; v13 = "Y "; } else if ( !strcmp(&pwszKLID, "0000040C") || !strcmp(&pwszKLID, "00000484") || !strcmp(&pwszKLID, "0000047E") || !strcmp(&pwszKLID, "00000483") || !strcmp(&pwszKLID, "00000482") ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 87; v13 = "W "; } else { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 90; v13 = "Z "; } v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, v13); } if ( v2[38] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 88; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "X "); } if ( v2[38] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 67; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "C "); } if ( v2[38] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 86; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "V "); } if ( v2[39] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 66; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "B "); } if ( v2[39] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 78; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "N "); } if ( v2[39] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 77; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "M "); } if ( v2[39] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -68; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, ", "); } if ( v2[39] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -66; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, ". "); } if ( v2[39] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 111; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "/ "); } if ( v2[39] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 106; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "* "); } if ( v2[40] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 32; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, " "); } if ( v2[40] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 112; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F1 "); } if ( v2[40] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 113; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F2 "); } if ( v2[40] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 114; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F3 "); } if ( v2[40] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 115; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F4 "); } if ( v2[40] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 116; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F5 "); } if ( v2[41] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 117; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F6 "); } if ( v2[41] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 118; v5 = 0; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F7 "); } if ( v2[41] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 119; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F8 "); } if ( v2[41] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 120; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F9 "); } if ( v2[41] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 121; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F10 "); } if ( v2[42] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 109; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP- "); } if ( v2[42] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 107; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP+ "); } if ( v2[43] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 96; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP0 "); } if ( v2[42] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 97; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP1 "); } if ( v2[43] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 98; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP2 "); } if ( v2[43] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 99; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP3 "); } if ( v2[42] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 100; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP4 "); } if ( v2[42] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 101; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP5 "); } if ( v2[42] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 102; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP6 "); } if ( v2[41] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 103; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP7 "); } if ( v2[42] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 104; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP8 "); } if ( v2[42] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 105; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP9 "); } if ( v2[43] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 110; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP. "); } if ( v2[43] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 122; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F11 "); } if ( v2[43] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 123; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "F12 "); } if ( v2[47] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -65; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NP/ "); } if ( v2[38] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -64; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "` "); } if ( v2[40] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 20; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "CAP "); } if ( v2[41] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -112; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "NUML "); } if ( v2[41] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -111; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "SCROLL "); } if ( v2[48] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 36; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "HOME "); } if ( v2[48] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 38; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "UP "); } if ( v2[48] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 37; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "LEFT "); } if ( v2[48] & 0x10 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 39; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "RIGHT "); } if ( v2[48] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 35; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "END "); } if ( v2[48] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 40; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "DOWN "); } if ( v2[48] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 34; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "PGDN"); } if ( v2[48] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 33; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "PGUP "); } if ( v2[49] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 45; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "INS "); } if ( v2[49] & 2 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 46; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "DEL "); } if ( v2[49] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 91; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "LWIN "); } if ( v2[49] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 91; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "RWIN "); } if ( v2[49] & 0x10 ) (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "APPS "); if ( v2[34] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -11; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "TAB "); } if ( v2[34] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 8; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "\\ "); } if ( v2[47] < 0 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 19; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Pause Break "); } if ( !(v2[38] & 4) && v2[70] & 4 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 16; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Shift"); } if ( !(v2[39] & 0x40) && v2[71] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 16; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Shift "); } if ( !(v2[36] & 0x20) && v2[68] & 0x20 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 17; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Ctrl"); } if ( !(v2[46] & 8) && v2[78] & 8 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 17; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Ctrl "); } if ( !(v2[40] & 1) && v2[72] & 1 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 18; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Alt"); } if ( !(v2[47] & 0x40) && v2[79] & 0x40 ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = 18; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "Alt"); } v9 = (_BYTE *)dword_ACDC88; if ( *(_BYTE *)(dword_ACDC88 + 129) || *(_BYTE *)(dword_ACDC88 + 145) ) { result = 0; } else { if ( *(_BYTE *)(dword_ACDC88 + 161) ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -6; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMB"); v9 = (_BYTE *)dword_ACDC88; } if ( v9[177] ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -5; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMOD_X1"); v9 = (_BYTE *)dword_ACDC88; } if ( v9[193] ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -4; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMOD_X2"); v9 = (_BYTE *)dword_ACDC88; } if ( v9[209] ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -3; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMOD_X3"); v9 = (_BYTE *)dword_ACDC88; } if ( v9[225] ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -2; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMMOD_X4"); v9 = (_BYTE *)dword_ACDC88; } if ( v9[241] ) { *((_BYTE *)v3 + 258 * v3[6293] + 601) = -1; v5 = 1; (*(void (__thiscall **)(_DWORD *, const char *))(*v3 + 540))(v3, "MMOD_X5"); } result = v5; } } return result; } // ACDC84: using guessed type int dword_ACDC84; // ACDC88: using guessed type int dword_ACDC88; //----- (00553A40) -------------------------------------------------------- char __thiscall sub_553A40(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, volatile LONG *a9) { volatile LONG **v9; // esi char result; // al void (__thiscall *v11)(volatile LONG **, int); // edx v9 = this; result = sub_8F43D0(this, a2, a3, a4, a5, a7, a8); if ( result ) { (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 138))(v9, 0); v11 = (void (__thiscall *)(volatile LONG **, int))*((_DWORD *)*v9 + 129); v9[79] = *(volatile LONG **)(a4 + 20); v11(v9, a6); v9[81] = a9; result = 1; } return result; } //----- (00553AB0) -------------------------------------------------------- char __thiscall sub_553AB0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[81]); return (char)v2; } //----- (00553AE0) -------------------------------------------------------- char __thiscall sub_553AE0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // edi const char *v5; // eax _DWORD *v6; // eax void ***v7; // ecx int v8; // edi void ***v9; // edx int v10; // eax int v12; // eax int v13; // ecx char v14; // [esp+13h] [ebp-105h] char v15; // [esp+14h] [ebp-104h] char v16; // [esp+15h] [ebp-103h] v4 = this; v14 = 1; v15 = 0; memset(&v16, 0, 0xFFu); v5 = sub_40C190(-1614875934); sprintf(&v15, v5, (char *)v4 + 258 * a2 + 344, a4); v6 = (_DWORD *)v4[74]; v7 = (void ***)v6[144]; v8 = v6[138]; v9 = (void ***)v6[184]; v10 = v6[143]; if ( !v7 ) return 0; switch ( a2 ) { case 0: *a3 = 17; sub_559A40(v7, 9, &v15); dword_B91654 = 1; break; case 1: *a3 = 29; sub_559A40(v7, 0, &v15); dword_B9165C = 1; break; case 2: *a3 = 106; sub_559A40(v7, 10, &v15); dword_B91664 = 1; break; case 3: *a3 = 107; sub_559A40(v7, 6, &v15); dword_B9166C = 1; break; case 4: *a3 = 108; sub_559A40(v7, 5, &v15); dword_B91674 = 1; break; case 5: *a3 = 16; sub_559A40(v7, 4, &v15); dword_B9167C = 1; break; case 6: *a3 = 110; sub_559A40(v7, 3, &v15); dword_B91684 = 1; break; case 7: *a3 = 162; sub_559A40(v7, 1, &v15); dword_B9168C = 1; break; case 8: *a3 = 109; sub_559A40(v7, 2, &v15); dword_B91694 = 1; break; case 9: *a3 = 11; dword_B9169C = 1; break; case 10: *a3 = 187; dword_B916A4 = 1; break; case 11: *a3 = 188; dword_B916AC = 1; break; case 12: *a3 = 189; dword_B916B4 = 1; break; case 13: *a3 = 190; dword_B916BC = 1; break; case 14: *a3 = 191; dword_B916C4 = 1; break; case 15: *a3 = 20; sub_559A40(v7, 7, &v15); dword_B916CC = 1; break; case 16: *a3 = 245; dword_B916D4 = 1; break; case 17: *a3 = 246; dword_B916DC = 1; break; case 18: *a3 = 248; dword_B916E4 = 1; break; case 19: *a3 = 249; dword_B916EC = 1; break; case 20: *a3 = 247; dword_B916F4 = 1; break; case 21: *a3 = 254; if ( v10 ) sub_8F2EA0(*(void ***)(v10 + 376), &v15); dword_B916FC = 1; break; case 22: *a3 = 250; dword_B91704 = 1; break; case 23: *a3 = 98; dword_B9170C = 2; break; case 24: *a3 = 99; dword_B91714 = 2; break; case 26: *a3 = 100; dword_B91724 = 2; break; case 27: *a3 = 101; dword_B9172C = 2; break; case 28: *a3 = 103; dword_B91734 = 2; break; case 29: *a3 = 102; dword_B9173C = 2; break; case 34: *a3 = 173; if ( v9 ) sub_8F2EA0(v9[87], &v15); dword_B91764 = 2; break; case 35: *a3 = 112; dword_B9176C = 2; break; case 36: *a3 = 104; if ( v8 ) sub_8F2EA0(*(void ***)(v8 + 344), &v15); dword_B91774 = 2; if ( v8 ) sub_5B8380((_DWORD **)v8, a4); break; case 37: *a3 = 105; if ( v8 ) sub_8F2EA0(*(void ***)(v8 + 348), &v15); dword_B9177C = 2; break; case 38: *a3 = 44; dword_B91784 = 2; break; case 39: *a3 = 172; if ( v9 ) sub_8F2EA0(v9[86], &v15); dword_B9178C = 2; break; case 40: *a3 = 111; dword_B91794 = 2; break; case 41: *a3 = 181; if ( v10 ) sub_8F2EA0(*(void ***)(v10 + 364), &v15); dword_B9179C = 2; break; case 42: *a3 = 182; if ( v10 ) { v12 = *(_DWORD *)(v10 + 532); if ( v12 ) { v13 = *(_DWORD *)(v12 + 592); if ( v13 ) { if ( *(_DWORD *)(v13 + 272) ) sub_8F2EA0((void **)v13, &v15); } } } dword_B917A4 = 2; break; case 43: *a3 = 183; dword_B917AC = 2; break; case 44: dword_B917B4 = 1; break; case 45: *a3 = 252; dword_B917BC = 2; break; case 46: *a3 = 214; if ( v9 ) sub_8F2EA0(v9[88], &v15); dword_B917C4 = 0; break; case 47: *a3 = 45; dword_B917CC = 3; break; case 48: *a3 = 46; dword_B917D4 = 3; break; case 49: *a3 = 47; dword_B917DC = 3; break; case 50: *a3 = 48; dword_B917E4 = 3; break; case 51: *a3 = 49; dword_B917EC = 3; break; case 52: *a3 = 50; dword_B917F4 = 3; break; case 53: *a3 = 51; dword_B917FC = 3; break; case 54: *a3 = 52; dword_B91804 = 3; break; case 55: *a3 = 53; dword_B9180C = 3; break; case 56: *a3 = 54; dword_B91814 = 3; break; case 57: *a3 = 55; dword_B9181C = 3; break; case 58: *a3 = 56; dword_B91824 = 3; break; case 59: *a3 = 57; dword_B9182C = 3; break; case 60: *a3 = 58; dword_B91834 = 3; break; case 61: *a3 = 59; dword_B9183C = 3; break; case 62: *a3 = 60; dword_B91844 = 3; break; case 63: *a3 = 61; dword_B9184C = 3; break; case 64: *a3 = 62; dword_B91854 = 3; break; case 65: *a3 = 63; dword_B9185C = 3; break; case 66: *a3 = 64; dword_B91864 = 3; break; case 67: *a3 = 65; dword_B9186C = 3; break; case 68: *a3 = 66; dword_B91874 = 3; break; case 69: *a3 = 67; dword_B9187C = 3; break; case 70: *a3 = 68; dword_B91884 = 3; break; case 71: *a3 = 69; dword_B9188C = 3; break; case 72: *a3 = 70; dword_B91894 = 3; break; case 73: *a3 = 71; dword_B9189C = 3; break; case 74: *a3 = 72; dword_B918A4 = 3; break; case 75: *a3 = 73; dword_B918AC = 3; break; case 76: *a3 = 74; dword_B918B4 = 3; break; case 77: *a3 = 75; dword_B918BC = 3; break; case 78: *a3 = 76; dword_B918C4 = 3; break; case 79: *a3 = 77; dword_B918CC = 3; break; case 80: *a3 = 78; dword_B918D4 = 3; break; case 81: *a3 = 79; dword_B918DC = 3; break; case 82: *a3 = 80; dword_B918E4 = 3; break; case 83: *a3 = 81; dword_B918EC = 3; break; case 84: *a3 = 82; dword_B918F4 = 3; break; case 85: *a3 = 83; dword_B918FC = 3; break; case 86: *a3 = 84; dword_B91904 = 3; break; case 87: *a3 = 85; dword_B9190C = 3; break; case 88: *a3 = 86; dword_B91914 = 3; break; case 89: *a3 = 87; dword_B9191C = 3; break; case 90: *a3 = 88; dword_B91924 = 3; break; case 91: *a3 = 89; dword_B9192C = 3; break; case 92: *a3 = 90; dword_B91934 = 3; break; case 93: *a3 = 91; dword_B9193C = 3; break; case 94: *a3 = 92; dword_B91944 = 3; break; default: v14 = 0; break; } return v14; } // B91654: using guessed type int dword_B91654; // B9165C: using guessed type int dword_B9165C; // B91664: using guessed type int dword_B91664; // B9166C: using guessed type int dword_B9166C; // B91674: using guessed type int dword_B91674; // B9167C: using guessed type int dword_B9167C; // B91684: using guessed type int dword_B91684; // B9168C: using guessed type int dword_B9168C; // B91694: using guessed type int dword_B91694; // B9169C: using guessed type int dword_B9169C; // B916A4: using guessed type int dword_B916A4; // B916AC: using guessed type int dword_B916AC; // B916B4: using guessed type int dword_B916B4; // B916BC: using guessed type int dword_B916BC; // B916C4: using guessed type int dword_B916C4; // B916CC: using guessed type int dword_B916CC; // B916D4: using guessed type int dword_B916D4; // B916DC: using guessed type int dword_B916DC; // B916E4: using guessed type int dword_B916E4; // B916EC: using guessed type int dword_B916EC; // B916F4: using guessed type int dword_B916F4; // B916FC: using guessed type int dword_B916FC; // B91704: using guessed type int dword_B91704; // B9170C: using guessed type int dword_B9170C; // B91714: using guessed type int dword_B91714; // B91724: using guessed type int dword_B91724; // B9172C: using guessed type int dword_B9172C; // B91734: using guessed type int dword_B91734; // B9173C: using guessed type int dword_B9173C; // B91764: using guessed type int dword_B91764; // B9176C: using guessed type int dword_B9176C; // B91774: using guessed type int dword_B91774; // B9177C: using guessed type int dword_B9177C; // B91784: using guessed type int dword_B91784; // B9178C: using guessed type int dword_B9178C; // B91794: using guessed type int dword_B91794; // B9179C: using guessed type int dword_B9179C; // B917A4: using guessed type int dword_B917A4; // B917AC: using guessed type int dword_B917AC; // B917B4: using guessed type int dword_B917B4; // B917BC: using guessed type int dword_B917BC; // B917C4: using guessed type int dword_B917C4; // B917CC: using guessed type int dword_B917CC; // B917D4: using guessed type int dword_B917D4; // B917DC: using guessed type int dword_B917DC; // B917E4: using guessed type int dword_B917E4; // B917EC: using guessed type int dword_B917EC; // B917F4: using guessed type int dword_B917F4; // B917FC: using guessed type int dword_B917FC; // B91804: using guessed type int dword_B91804; // B9180C: using guessed type int dword_B9180C; // B91814: using guessed type int dword_B91814; // B9181C: using guessed type int dword_B9181C; // B91824: using guessed type int dword_B91824; // B9182C: using guessed type int dword_B9182C; // B91834: using guessed type int dword_B91834; // B9183C: using guessed type int dword_B9183C; // B91844: using guessed type int dword_B91844; // B9184C: using guessed type int dword_B9184C; // B91854: using guessed type int dword_B91854; // B9185C: using guessed type int dword_B9185C; // B91864: using guessed type int dword_B91864; // B9186C: using guessed type int dword_B9186C; // B91874: using guessed type int dword_B91874; // B9187C: using guessed type int dword_B9187C; // B91884: using guessed type int dword_B91884; // B9188C: using guessed type int dword_B9188C; // B91894: using guessed type int dword_B91894; // B9189C: using guessed type int dword_B9189C; // B918A4: using guessed type int dword_B918A4; // B918AC: using guessed type int dword_B918AC; // B918B4: using guessed type int dword_B918B4; // B918BC: using guessed type int dword_B918BC; // B918C4: using guessed type int dword_B918C4; // B918CC: using guessed type int dword_B918CC; // B918D4: using guessed type int dword_B918D4; // B918DC: using guessed type int dword_B918DC; // B918E4: using guessed type int dword_B918E4; // B918EC: using guessed type int dword_B918EC; // B918F4: using guessed type int dword_B918F4; // B918FC: using guessed type int dword_B918FC; // B91904: using guessed type int dword_B91904; // B9190C: using guessed type int dword_B9190C; // B91914: using guessed type int dword_B91914; // B9191C: using guessed type int dword_B9191C; // B91924: using guessed type int dword_B91924; // B9192C: using guessed type int dword_B9192C; // B91934: using guessed type int dword_B91934; // B9193C: using guessed type int dword_B9193C; // B91944: using guessed type int dword_B91944; //----- (00554600) -------------------------------------------------------- char *__stdcall sub_554600(char a1, char a2) { const CHAR *v2; // eax signed int v3; // eax int v4; // eax int v5; // eax const char *v7; // [esp-8h] [ebp-110h] const char *v8; // [esp-4h] [ebp-10Ch] char v9; // [esp+0h] [ebp-108h] char v10; // [esp+1h] [ebp-107h] char v11; // [esp+4h] [ebp-104h] char v12; // [esp+5h] [ebp-103h] v11 = 0; memset(&v12, 0, 0xFFu); switch ( a1 ) { case 0: v2 = sub_40C190(860065931); sprintf(&v11, "%s", v2); break; case 8: sprintf(&v11, "%s", "BackSpace"); break; case 0xD: sprintf(&v11, "%s", "Enter"); break; case 0x10: sprintf(&v11, "%s", "Shift"); break; case 0x11: v8 = "Ctrl"; v7 = "%s"; goto LABEL_83; case 0x12: sprintf(&v11, "%s", "Alt"); break; case 0x13: v8 = "Pause Break"; v7 = "%s"; goto LABEL_83; case 0x14: sprintf(&v11, "%s", "Caps Lock"); break; case 0x1B: sprintf(&v11, "%s", "Esc"); break; case 0x20: sprintf(&v11, "%s", "Space"); break; case 0x21: v8 = "PGUP"; v7 = "%s"; goto LABEL_83; case 0x22: sprintf(&v11, "%s", "PGDN"); break; case 0x23: sprintf(&v11, "%s", "End"); break; case 0x24: sprintf(&v11, "%s", "Home"); break; case 0x25: sprintf(&v11, "%s", "Left"); break; case 0x26: sprintf(&v11, "%s", "Up"); break; case 0x27: v8 = "Right"; v7 = "%s"; goto LABEL_83; case 0x28: v8 = "Down"; v7 = "%s"; goto LABEL_83; case 0x2D: sprintf(&v11, "%s", "Ins"); break; case 0x2E: v8 = "Del"; v7 = "%s"; goto LABEL_83; case 0x30: v8 = "0"; v7 = "%s"; goto LABEL_83; case 0x31: v8 = "1"; v7 = "%s"; goto LABEL_83; case 0x32: sprintf(&v11, "%s", "2"); break; case 0x33: sprintf(&v11, "%s", "3"); break; case 0x34: v8 = "4"; v7 = "%s"; goto LABEL_83; case 0x35: sprintf(&v11, "%s", "5"); break; case 0x36: sprintf(&v11, "%s", "6"); break; case 0x37: v8 = "7"; v7 = "%s"; goto LABEL_83; case 0x38: sprintf(&v11, "%s", "8"); break; case 0x39: sprintf(&v11, "%s", "9"); break; case 0x5B: sprintf(&v11, "%s", "Win"); break; case 0x60: sprintf(&v11, "%s", "Num0"); break; case 0x61: sprintf(&v11, "%s", "Num1"); break; case 0x62: v8 = "Num2"; v7 = "%s"; goto LABEL_83; case 0x63: sprintf(&v11, "%s", "Num3"); break; case 0x64: sprintf(&v11, "%s", "Num4"); break; case 0x65: v8 = "Num5"; v7 = "%s"; goto LABEL_83; case 0x66: sprintf(&v11, "%s", "Num6"); break; case 0x67: sprintf(&v11, "%s", "Num7"); break; case 0x68: v8 = "Num8"; v7 = "%s"; goto LABEL_83; case 0x69: sprintf(&v11, "%s", "Num9"); break; case 0x6A: sprintf(&v11, "%s", "*"); break; case 0x6B: sprintf(&v11, "%s", "+"); break; case 0x6D: sprintf(&v11, "%s", "-"); break; case 0x6E: sprintf(&v11, "%s", "Decimal"); break; case 0x6F: sprintf(&v11, "%s", "/"); break; case 0x70: v8 = "F1"; v7 = "%s"; goto LABEL_83; case 0x71: sprintf(&v11, "%s", "F2"); break; case 0x72: sprintf(&v11, "%s", "F3"); break; case 0x73: v8 = "F4"; v7 = "%s"; goto LABEL_83; case 0x74: sprintf(&v11, "%s", "F5"); break; case 0x75: sprintf(&v11, "%s", "F6"); break; case 0x76: v8 = "F7"; v7 = "%s"; goto LABEL_83; case 0x77: sprintf(&v11, "%s", "F8"); break; case 0x78: sprintf(&v11, "%s", "F9"); break; case 0x79: v8 = "F10"; v7 = "%s"; goto LABEL_83; case 0x7A: sprintf(&v11, "%s", "F11"); break; case 0x7B: sprintf(&v11, "%s", "F12"); break; case 0x90: v8 = "Num Lock"; v7 = "%s"; goto LABEL_83; case 0x91: sprintf(&v11, "%s", "Scroll Lock"); break; case 0xBA: sprintf(&v11, "%s", ";"); break; case 0xBB: sprintf(&v11, "%s", "="); break; case 0xBC: sprintf(&v11, "%s", ","); break; case 0xBD: sprintf(&v11, "%s", "-"); break; case 0xBE: v8 = "."; v7 = "%s"; goto LABEL_83; case 0xBF: v8 = "/"; v7 = "%s"; goto LABEL_83; case 0xC0: sprintf(&v11, "%s", "`"); break; case 0xDB: v8 = "["; v7 = "%s"; goto LABEL_83; case 0xDC: sprintf(&v11, "%s", "\\"); break; case 0xDD: sprintf(&v11, "%s", "]"); break; case 0xDE: v8 = "'"; v7 = "%s"; goto LABEL_83; case 0xF5: v8 = "Tab"; v7 = "%s"; goto LABEL_83; case 0xF8: v8 = "LMB"; v7 = "%s"; goto LABEL_83; case 0xF9: sprintf(&v11, "%s", "RMB"); break; case 0xFA: sprintf(&v11, "%s", "MMB"); break; case 0xFB: v8 = "MMOD_X1"; v7 = "%s"; goto LABEL_83; case 0xFC: sprintf(&v11, "%s", "MMOD_X2"); break; case 0xFD: sprintf(&v11, "%s", "MMOD_X3"); break; case 0xFE: v8 = "MMOD_X4"; v7 = "%s"; goto LABEL_83; case 0xFF: sprintf(&v11, "%s", "MMOD_X5"); break; default: v8 = &v9; v9 = a1; v10 = 0; v7 = "%s"; LABEL_83: sprintf(&v11, v7, v8); break; } switch ( a2 ) { case 16: v3 = 64; break; case 17: v3 = 1; break; case 18: v3 = 4; break; default: v3 = 0; break; } v4 = v3 - 1; if ( v4 ) { v5 = v4 - 3; if ( v5 ) { if ( v5 == 60 ) sprintf(byte_ACEC78, "Shift + %s", &v11, *(_DWORD *)&v9); else sprintf(byte_ACEC78, "%s", &v11, *(_DWORD *)&v9); } else { sprintf(byte_ACEC78, "Alt + %s", &v11, *(_DWORD *)&v9); } } else { sprintf(byte_ACEC78, "Ctrl + %s", &v11, *(_DWORD *)&v9); } return byte_ACEC78; } //----- (00554F70) -------------------------------------------------------- int *__thiscall sub_554F70(int this) { int v1; // edi int v2; // eax unsigned int v3; // esi int v4; // eax int *result; // eax _BYTE *v6; // ebx unsigned int v7; // eax char *v8; // eax unsigned int v9; // esi int v10; // [esp+0h] [ebp-128h] int *v11; // [esp+Ch] [ebp-11Ch] unsigned int v12; // [esp+10h] [ebp-118h] signed int v13; // [esp+14h] [ebp-114h] int v14; // [esp+18h] [ebp-110h] int v15; // [esp+1Ch] [ebp-10Ch] int v16; // [esp+20h] [ebp-108h] char v17; // [esp+24h] [ebp-104h] char v18; // [esp+25h] [ebp-103h] v1 = this; v2 = *(_DWORD *)(this + 24856); v3 = 0; v12 = 0; if ( v2 ) { v4 = v2 - 1; if ( v4 ) { if ( v4 == 1 ) { v13 = 3; (*(void (__stdcall **)(signed int, int))(**(_DWORD **)(this + 25192) + 256))(1, v10); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v1 + 25196) + 256))(1); } goto LABEL_8; } v13 = 2; } else { v13 = 1; } (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(this + 25192) + 256))(0, v10); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v1 + 25196) + 256))(0); LABEL_8: v15 = v1 + 25068; result = &dword_B91654; v11 = &dword_B91654; v6 = (_BYTE *)(v1 + 344); v16 = v1 + 24972; v14 = v1 + 24876; do { if ( *result != v13 ) goto LABEL_20; v7 = 24 * *(_DWORD *)(v1 + 24860); if ( v3 < v7 || v3 >= v7 + 24 ) goto LABEL_18; v17 = 0; memset(&v18, 0, 0xFFu); v8 = sub_554600(v6[257], v6[256]); sprintf(&v17, "%s", v8); if ( *v6 != 45 || v6[1] != 45 ) { if ( v3 >= 0x18 ) { v9 = v3 % 0x18; (*(void (__stdcall **)(_BYTE *))(**(_DWORD **)(v1 + 4 * v9 + 24876) + 472))(v6); (*(void (__stdcall **)(char *))(**(_DWORD **)(v1 + 4 * v9 + 24972) + 472))(&v17); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v1 + 4 * v9 + 25068) + 256))( *(_DWORD *)(v1 + 4 * v9 + 25068), 1); v3 = v12; } else { (*(void (__stdcall **)(_BYTE *))(**(_DWORD **)v14 + 472))(v6); (*(void (__stdcall **)(char *))(**(_DWORD **)v16 + 472))(&v17); (*(void (__stdcall **)(signed int))(**(_DWORD **)v15 + 256))(1); } LABEL_18: v14 += 4; v16 += 4; ++v3; v15 += 4; goto LABEL_19; } v14 -= 4; v16 -= 4; --v3; v15 -= 4; LABEL_19: v12 = v3; LABEL_20: result = v11 + 2; v6 += 258; v11 = result; } while ( (signed int)result < (signed int)&unk_B9194C ); return result; } // B91654: using guessed type int dword_B91654; //----- (005551C0) -------------------------------------------------------- int __thiscall sub_5551C0(char *this) { char *v1; // esi signed int v2; // edi const CHAR *v3; // eax int result; // eax const CHAR *v5; // eax const CHAR *v6; // eax const CHAR *v7; // eax const CHAR *v8; // eax const CHAR *v9; // eax const CHAR *v10; // eax const CHAR *v11; // eax const CHAR *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax const CHAR *v15; // eax const CHAR *v16; // eax const CHAR *v17; // eax const CHAR *v18; // eax const CHAR *v19; // eax const CHAR *v20; // eax const CHAR *v21; // eax const CHAR *v22; // eax const CHAR *v23; // eax const CHAR *v24; // eax const CHAR *v25; // eax const CHAR *v26; // eax const CHAR *v27; // eax const CHAR *v28; // eax const CHAR *v29; // eax const CHAR *v30; // eax const CHAR *v31; // eax const CHAR *v32; // eax const CHAR *v33; // eax const CHAR *v34; // eax const CHAR *v35; // eax const CHAR *v36; // eax const CHAR *v37; // eax const CHAR *v38; // eax const CHAR *v39; // eax const CHAR *v40; // eax const CHAR *v41; // eax const CHAR *v42; // eax const CHAR *v43; // eax const CHAR *v44; // eax const CHAR *v45; // eax const CHAR *v46; // eax const CHAR *v47; // eax const CHAR *v48; // eax const CHAR *v49; // eax const CHAR *v50; // eax const CHAR *v51; // eax const CHAR *v52; // eax const CHAR *v53; // eax const CHAR *v54; // eax const CHAR *v55; // eax const CHAR *v56; // eax const CHAR *v57; // eax const CHAR *v58; // eax const CHAR *v59; // eax const CHAR *v60; // eax const CHAR *v61; // eax const CHAR *v62; // eax const CHAR *v63; // eax const CHAR *v64; // eax const CHAR *v65; // eax const CHAR *v66; // eax const CHAR *v67; // eax const CHAR *v68; // eax const CHAR *v69; // eax const CHAR *v70; // eax const CHAR *v71; // eax const CHAR *v72; // eax const CHAR *v73; // eax const CHAR *v74; // eax const CHAR *v75; // eax const CHAR *v76; // eax const CHAR *v77; // eax const CHAR *v78; // eax const CHAR *v79; // eax const CHAR *v80; // eax const CHAR *v81; // eax const CHAR *v82; // eax const CHAR *v83; // eax const CHAR *v84; // eax const CHAR *v85; // eax const CHAR *v86; // eax const CHAR *v87; // eax const CHAR *v88; // eax const CHAR *v89; // eax const CHAR *v90; // eax const CHAR *v91; // eax const CHAR *v92; // eax v1 = this; v2 = 0; do { switch ( v2 ) { case 0: v3 = sub_40C190(-656648643); result = sprintf(v1 + 344, "%s", v3); break; case 1: v5 = sub_40C190(959208004); result = sprintf(v1 + 602, "%s", v5); break; case 2: v6 = sub_40C190(510303622); result = sprintf(v1 + 860, "%s", v6); break; case 3: v7 = sub_40C190(897883542); result = sprintf(v1 + 1118, "%s", v7); break; case 4: v8 = sub_40C190(-567061958); result = sprintf(v1 + 1376, "%s", v8); break; case 5: v9 = sub_40C190(-398894794); result = sprintf(v1 + 1634, "%s", v9); break; case 6: v10 = sub_40C190(814065543); result = sprintf(v1 + 1892, "%s", v10); break; case 7: v11 = sub_40C190(728670868); result = sprintf(v1 + 2150, "%s", v11); break; case 8: v12 = sub_40C190(606359365); result = sprintf(v1 + 2408, "%s", v12); break; case 9: v13 = sub_40C190(689986169); result = sprintf(v1 + 2666, "%s", v13); break; case 10: v14 = sub_40C190(1869321974); result = sprintf(v1 + 2924, "%s", v14); break; case 11: v15 = sub_40C190(-1688167811); result = sprintf(v1 + 3182, "%s", v15); break; case 12: v16 = sub_40C190(-2021743994); result = sprintf(v1 + 3440, "%s", v16); break; case 13: v17 = sub_40C190(1753091277); result = sprintf(v1 + 3698, "%s", v17); break; case 14: v18 = sub_40C190(-1041964749); result = sprintf(v1 + 3956, "%s", v18); break; case 15: v83 = sub_40C190(-487243460); result = sprintf(v1 + 4214, "%s", v83); break; case 16: v84 = sub_40A910(-2086770444); result = sprintf(v1 + 4472, "%s", v84); break; case 17: v85 = sub_40A910(-488976057); result = sprintf(v1 + 4730, "%s", v85); break; case 18: v86 = sub_40A910(-842526640); result = sprintf(v1 + 4988, "%s", v86); break; case 19: v87 = sub_40A910(2089123230); result = sprintf(v1 + 5246, "%s", v87); break; case 20: v88 = sub_40A910(-1058405834); result = sprintf(v1 + 5504, "%s", v88); break; case 21: v91 = sub_40A910(-34088146); result = sprintf(v1 + 5762, "%s", v91); break; case 22: v89 = sub_40A910(-1412515240); result = sprintf(v1 + 6020, "%s", v89); break; case 23: v19 = sub_40C190(-488962319); result = sprintf(v1 + 6278, "%s", v19); break; case 24: v20 = sub_40C190(-724152012); result = sprintf(v1 + 6536, "%s", v20); break; case 26: v21 = sub_40C190(-656385481); result = sprintf(v1 + 7052, "%s", v21); break; case 27: v22 = sub_40C190(-600158664); result = sprintf(v1 + 7310, "%s", v22); break; case 28: v23 = sub_40C190(691884427); result = sprintf(v1 + 7568, "%s", v23); break; case 29: v24 = sub_40C190(-388082114); result = sprintf(v1 + 7826, "%s", v24); break; case 34: v25 = sub_40C190(-667268284); result = sprintf(v1 + 9116, "%s", v25); break; case 35: v26 = sub_40C190(-404269504); result = sprintf(v1 + 9374, "%s", v26); break; case 36: v28 = sub_40C190(824924740); result = sprintf(v1 + 9632, "%s", v28); break; case 37: v27 = sub_40C190(825645636); result = sprintf(v1 + 9890, "%s", v27); break; case 38: v29 = sub_40C190(2104401047); result = sprintf(v1 + 10148, "%s", v29); break; case 39: v30 = sub_40C190(-416524224); result = sprintf(v1 + 10406, "%s", v30); break; case 40: v31 = sub_40C190(-734176701); result = sprintf(v1 + 10664, "%s", v31); break; case 41: v32 = sub_40C190(791650948); result = sprintf(v1 + 10922, "%s", v32); break; case 42: v33 = sub_40C190(-2083133991); result = sprintf(v1 + 11180, "%s", v33); break; case 43: v34 = sub_40C190(-1373756629); result = sprintf(v1 + 11438, "%s", v34); break; case 45: v90 = sub_40A910(-79349706); result = sprintf(v1 + 11954, "%s", v90); break; case 46: v92 = sub_40A910(-1678316048); result = sprintf(v1 + 12212, "%s", v92); break; case 47: v35 = sub_40C190(1335549428); result = sprintf(v1 + 12470, "%s", v35); break; case 48: v36 = sub_40C190(1335549684); result = sprintf(v1 + 12728, "%s", v36); break; case 49: v37 = sub_40C190(1335549940); result = sprintf(v1 + 12986, "%s", v37); break; case 50: v38 = sub_40C190(1335550196); result = sprintf(v1 + 13244, "%s", v38); break; case 51: v39 = sub_40C190(1335550452); result = sprintf(v1 + 13502, "%s", v39); break; case 52: v40 = sub_40C190(1335550708); result = sprintf(v1 + 13760, "%s", v40); break; case 53: v41 = sub_40C190(1335550964); result = sprintf(v1 + 14018, "%s", v41); break; case 54: v42 = sub_40C190(1335551220); result = sprintf(v1 + 14276, "%s", v42); break; case 55: v43 = sub_40C190(1335551476); result = sprintf(v1 + 14534, "%s", v43); break; case 56: v44 = sub_40C190(1338695156); result = sprintf(v1 + 14792, "%s", v44); break; case 57: v45 = sub_40C190(1338760692); result = sprintf(v1 + 15050, "%s", v45); break; case 58: v46 = sub_40C190(1338826228); result = sprintf(v1 + 15308, "%s", v46); break; case 59: v47 = sub_40C190(1352326644); result = sprintf(v1 + 15566, "%s", v47); break; case 60: v48 = sub_40C190(1352326900); result = sprintf(v1 + 15824, "%s", v48); break; case 61: v49 = sub_40C190(1352327156); result = sprintf(v1 + 16082, "%s", v49); break; case 62: v50 = sub_40C190(1352327412); result = sprintf(v1 + 16340, "%s", v50); break; case 63: v51 = sub_40C190(1352327668); result = sprintf(v1 + 16598, "%s", v51); break; case 64: v52 = sub_40C190(1352327924); result = sprintf(v1 + 16856, "%s", v52); break; case 65: v53 = sub_40C190(1352328180); result = sprintf(v1 + 17114, "%s", v53); break; case 66: v54 = sub_40C190(1352328436); result = sprintf(v1 + 17372, "%s", v54); break; case 67: v55 = sub_40C190(1352328692); result = sprintf(v1 + 17630, "%s", v55); break; case 68: v56 = sub_40C190(1355472372); result = sprintf(v1 + 17888, "%s", v56); break; case 69: v57 = sub_40C190(1355537908); result = sprintf(v1 + 18146, "%s", v57); break; case 70: v58 = sub_40C190(1355603444); result = sprintf(v1 + 18404, "%s", v58); break; case 71: v59 = sub_40C190(1369103860); result = sprintf(v1 + 18662, "%s", v59); break; case 72: v60 = sub_40C190(1369104116); result = sprintf(v1 + 18920, "%s", v60); break; case 73: v61 = sub_40C190(1369104372); result = sprintf(v1 + 19178, "%s", v61); break; case 74: v62 = sub_40C190(1369104628); result = sprintf(v1 + 19436, "%s", v62); break; case 75: v63 = sub_40C190(1369104884); result = sprintf(v1 + 19694, "%s", v63); break; case 76: v64 = sub_40C190(1369105140); result = sprintf(v1 + 19952, "%s", v64); break; case 77: v65 = sub_40C190(1369105396); result = sprintf(v1 + 20210, "%s", v65); break; case 78: v66 = sub_40C190(1369105652); result = sprintf(v1 + 20468, "%s", v66); break; case 79: v67 = sub_40C190(1369105908); result = sprintf(v1 + 20726, "%s", v67); break; case 80: v68 = sub_40C190(1372249588); result = sprintf(v1 + 20984, "%s", v68); break; case 81: v69 = sub_40C190(1372315124); result = sprintf(v1 + 21242, "%s", v69); break; case 82: v70 = sub_40C190(1372380660); result = sprintf(v1 + 21500, "%s", v70); break; case 83: v71 = sub_40C190(1385881076); result = sprintf(v1 + 21758, "%s", v71); break; case 84: v72 = sub_40C190(1385881332); result = sprintf(v1 + 22016, "%s", v72); break; case 85: v73 = sub_40C190(1385881588); result = sprintf(v1 + 22274, "%s", v73); break; case 86: v74 = sub_40C190(1385881844); result = sprintf(v1 + 22532, "%s", v74); break; case 87: v75 = sub_40C190(1385882100); result = sprintf(v1 + 22790, "%s", v75); break; case 88: v76 = sub_40C190(1385882356); result = sprintf(v1 + 23048, "%s", v76); break; case 89: v77 = sub_40C190(1385882612); result = sprintf(v1 + 23306, "%s", v77); break; case 90: v78 = sub_40C190(1385882868); result = sprintf(v1 + 23564, "%s", v78); break; case 91: v79 = sub_40C190(1385883124); result = sprintf(v1 + 23822, "%s", v79); break; case 92: v80 = sub_40C190(1389026804); result = sprintf(v1 + 24080, "%s", v80); break; case 93: v81 = sub_40C190(1389092340); result = sprintf(v1 + 24338, "%s", v81); break; case 94: v82 = sub_40C190(1389157876); result = sprintf(v1 + 24596, "%s", v82); break; default: result = sprintf(&v1[258 * v2 + 344], "%s", "--"); break; } ++v2; } while ( v2 < 95 ); return result; } //----- (00556000) -------------------------------------------------------- signed int __thiscall sub_556000(_DWORD **this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx _DWORD *v4; // eax unsigned int v5; // esi int v6; // eax int *v7; // ecx _BYTE *v8; // ebx signed int result; // eax unsigned int v10; // eax char *v11; // eax unsigned int v12; // esi int v13; // [esp+0h] [ebp-128h] int *v14; // [esp+Ch] [ebp-11Ch] unsigned int v15; // [esp+10h] [ebp-118h] signed int v16; // [esp+14h] [ebp-114h] int v17; // [esp+18h] [ebp-110h] int v18; // [esp+1Ch] [ebp-10Ch] int v19; // [esp+20h] [ebp-108h] char v20; // [esp+24h] [ebp-104h] char v21; // [esp+25h] [ebp-103h] v1 = this; v2 = this + 6243; v3 = 24; do { (*(void (__stdcall **)(void *))(**(v2 - 24) + 472))(&unk_9CC1A1); (*(void (__stdcall **)(void *))(**v2 + 472))(&unk_9CC1A2); (*(void (__stdcall **)(_DWORD))(*v2[24] + 256))(0); ++v2; --v3; } while ( v3 ); v4 = v1[6214]; v5 = 0; v15 = 0; if ( v4 ) { v6 = (int)v4 - 1; if ( v6 ) { if ( v6 == 1 ) { v16 = 3; (*(void (__stdcall **)(signed int, int))(*v1[6298] + 256))(1, v13); (*(void (__cdecl **)(signed int))(*v1[6299] + 256))(1); } goto LABEL_10; } v16 = 2; } else { v16 = 1; } (*(void (__stdcall **)(_DWORD, int))(*v1[6298] + 256))(0, v13); (*(void (__cdecl **)(_DWORD))(*v1[6299] + 256))(0); LABEL_10: v18 = (int)(v1 + 6267); v7 = &dword_B91654; v14 = &dword_B91654; v8 = v1 + 86; v19 = (int)(v1 + 6243); v17 = (int)(v1 + 6219); do { result = v16; if ( *v7 != v16 ) goto LABEL_22; v10 = 24 * (_DWORD)v1[6215]; if ( v5 < v10 || v5 >= v10 + 24 ) goto LABEL_20; v20 = 0; memset(&v21, 0, 0xFFu); v11 = sub_554600(v8[257], v8[256]); sprintf(&v20, "%s", v11); if ( *v8 != 45 || v8[1] != 45 ) { if ( v5 >= 0x18 ) { v12 = v5 % 0x18; (*(void (__stdcall **)(_BYTE *))(*v1[v12 + 6219] + 472))(v8); (*(void (__stdcall **)(char *))(*v1[v12 + 6243] + 472))(&v20); (*(void (__thiscall **)(_DWORD *, signed int))(*v1[v12 + 6267] + 256))(v1[v12 + 6267], 1); v5 = v15; } else { (*(void (__stdcall **)(_BYTE *))(**(_DWORD **)v17 + 472))(v8); (*(void (__stdcall **)(char *))(**(_DWORD **)v19 + 472))(&v20); (*(void (__stdcall **)(signed int))(**(_DWORD **)v18 + 256))(1); } LABEL_20: result = 4; v17 += 4; v19 += 4; ++v5; v18 += 4; goto LABEL_21; } result = 4; v17 -= 4; v19 -= 4; --v5; v18 -= 4; LABEL_21: v15 = v5; LABEL_22: v7 = v14 + 2; v8 += 258; v14 = v7; } while ( (signed int)v7 < (signed int)&unk_B9194C ); return result; } // B91654: using guessed type int dword_B91654; //----- (005562A0) -------------------------------------------------------- void __thiscall sub_5562A0(_BYTE *this, float a2) { _BYTE *v2; // esi int v3; // edi signed int v4; // ebx bool v5; // zf signed int v6; // edx int v7; // eax int v8; // ecx int v9; // ecx int v10; // ecx int v11; // ecx int v12; // ecx int *v13; // edi int v14; // ebx char *v15; // eax signed int v16; // [esp+1Ch] [ebp+8h] v2 = this; if ( !this[25164] ) { v3 = (int)(this + 25068); v4 = 24; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 240))(1); v3 += 4; --v4; } while ( v4 ); } if ( v2[25164] == 1 && sub_552000(v2, SLODWORD(a2)) ) { v5 = v2[25458] == 0; v2[25165] = 0; if ( v5 ) v2[258 * *((_DWORD *)v2 + 6293) + 600] = 0; v2[25458] = 1; v6 = 2; v7 = (int)(v2 + 600); v16 = 19; do { v8 = 258 * *((_DWORD *)v2 + 6293); if ( v2[v8 + 601] == *(_BYTE *)(v7 + 1) && v2[v8 + 600] == *(_BYTE *)v7 && *((_DWORD *)v2 + 6293) != v6 - 2 ) *(_WORD *)v7 = 0; v9 = 258 * *((_DWORD *)v2 + 6293); if ( v2[v9 + 601] == *(_BYTE *)(v7 + 259) && v2[v9 + 600] == *(_BYTE *)(v7 + 258) && *((_DWORD *)v2 + 6293) != v6 - 1 ) { *(_WORD *)(v7 + 258) = 0; } v10 = 258 * *((_DWORD *)v2 + 6293); if ( v2[v10 + 601] == *(_BYTE *)(v7 + 517) && v2[v10 + 600] == *(_BYTE *)(v7 + 516) && *((_DWORD *)v2 + 6293) != v6 ) { *(_WORD *)(v7 + 516) = 0; } v11 = 258 * *((_DWORD *)v2 + 6293); if ( v2[v11 + 601] == *(_BYTE *)(v7 + 775) && v2[v11 + 600] == *(_BYTE *)(v7 + 774) && *((_DWORD *)v2 + 6293) != v6 + 1 ) { *(_WORD *)(v7 + 774) = 0; } v12 = 258 * *((_DWORD *)v2 + 6293); if ( v2[v12 + 601] == *(_BYTE *)(v7 + 1033) && v2[v12 + 600] == *(_BYTE *)(v7 + 1032) && *((_DWORD *)v2 + 6293) != v6 + 2 ) { *(_WORD *)(v7 + 1032) = 0; } v6 += 5; v7 += 1290; --v16; } while ( v16 ); v13 = *(int **)&v2[4 * *((_DWORD *)v2 + 6292) + 24972]; v14 = *v13; v15 = sub_554600(v2[258 * *((_DWORD *)v2 + 6293) + 601], v2[258 * *((_DWORD *)v2 + 6293) + 600]); (*(void (__thiscall **)(int *, char *))(v14 + 472))(v13, v15); v2[25164] = 0; sub_556000((_DWORD **)v2); } } //----- (00556670) -------------------------------------------------------- int __thiscall sub_556670(int this, int a2) { int v2; // ebx int v3; // esi char *v4; // eax int result; // eax int v6; // edi const CHAR *v7; // eax _DWORD *v8; // eax v2 = this; if ( *(_BYTE *)(this + 25165) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 4 * *(_DWORD *)(this + 25168) + 25068) + 240))(1); qmemcpy((void *)(258 * *(_DWORD *)(v2 + 25172) + v2 + 344), (const void *)(v2 + 25200), 0x102u); *(_BYTE *)(v2 + 25165) = 0; } *(_BYTE *)(v2 + 25164) = 0; sub_556000((_DWORD **)v2); v3 = a2; *(_DWORD *)(v2 + 25168) = a2; v4 = (char *)(*(int (**)(void))(**(_DWORD **)(v2 + 4 * a2 + 24876) + 484))(); result = sub_551ED0((const char *)v2, v4); *(_DWORD *)(v2 + 25172) = result; if ( result != -1 ) { if ( result ) { qmemcpy((void *)(v2 + 25200), (const void *)(258 * result + v2 + 344), 0x102u); v3 = a2; } *(_BYTE *)(v2 + 25164) = 1; v6 = **(_DWORD **)(v2 + 4 * v3 + 24972); v7 = sub_40C190(-128630207); (*(void (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(*(_DWORD *)(v2 + 4 * v3 + 24972), v7); v8 = (_DWORD *)sub_4A04A0(*(_DWORD **)(v2 + 296)); sub_435A30(v8); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 25168) + 25068) + 240))(0); *(_BYTE *)(v2 + 25165) = 1; } return result; } //----- (00556790) -------------------------------------------------------- int __thiscall sub_556790(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax int v4; // edx _DWORD **v5; // esi signed int v6; // ebx v1 = this; v2 = 0; v1[6215] = 0; v1[6214] = 0; v3 = (v1[6295] - v1[6294]) >> 2; if ( v3 ) { do { v4 = *(_DWORD *)(v1[6294] + 4 * v2++); *(_BYTE *)(v4 + 380) = 0; } while ( v2 < v3 ); } *(_BYTE *)(*(_DWORD *)v1[6294] + 380) = 1; v5 = (_DWORD **)(v1 + 6243); v6 = 24; do { (*(void (__stdcall **)(void *))(**(v5 - 24) + 472))(&unk_9CC1A1); (*(void (__stdcall **)(void *))(**v5 + 472))(&unk_9CC1A2); (*(void (__stdcall **)(_DWORD))(*v5[24] + 256))(0); ++v5; --v6; } while ( v6 ); sub_554F70((int)v1); return (*(int (__stdcall **)(signed int))(*(_DWORD *)v1[v1[6292] + 6267] + 240))(1); } //----- (00556850) -------------------------------------------------------- int __thiscall sub_556850(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax int v4; // edx _DWORD **v5; // esi signed int v6; // ebx v1 = this; v2 = 0; v1[6215] = 0; v1[6214] = 1; v3 = (v1[6295] - v1[6294]) >> 2; if ( v3 ) { do { v4 = *(_DWORD *)(v1[6294] + 4 * v2++); *(_BYTE *)(v4 + 380) = 0; } while ( v2 < v3 ); } *(_BYTE *)(*(_DWORD *)(v1[6294] + 4) + 380) = 1; v5 = (_DWORD **)(v1 + 6243); v6 = 24; do { (*(void (__stdcall **)(void *))(**(v5 - 24) + 472))(&unk_9CC1A1); (*(void (__stdcall **)(void *))(**v5 + 472))(&unk_9CC1A2); (*(void (__stdcall **)(_DWORD))(*v5[24] + 256))(0); ++v5; --v6; } while ( v6 ); sub_554F70((int)v1); return (*(int (__stdcall **)(signed int))(*(_DWORD *)v1[v1[6292] + 6267] + 240))(1); } //----- (00556910) -------------------------------------------------------- int __thiscall sub_556910(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax int v4; // edx _DWORD **v5; // esi signed int v6; // ebx v1 = this; v2 = 0; v1[6215] = 0; v1[6214] = 2; v3 = (v1[6295] - v1[6294]) >> 2; if ( v3 ) { do { v4 = *(_DWORD *)(v1[6294] + 4 * v2++); *(_BYTE *)(v4 + 380) = 0; } while ( v2 < v3 ); } *(_BYTE *)(*(_DWORD *)(v1[6294] + 8) + 380) = 1; v5 = (_DWORD **)(v1 + 6243); v6 = 24; do { (*(void (__stdcall **)(void *))(**(v5 - 24) + 472))(&unk_9CC1A1); (*(void (__stdcall **)(void *))(**v5 + 472))(&unk_9CC1A2); (*(void (__stdcall **)(_DWORD))(*v5[24] + 256))(0); ++v5; --v6; } while ( v6 ); sub_554F70((int)v1); return (*(int (__stdcall **)(signed int))(*(_DWORD *)v1[v1[6292] + 6267] + 240))(1); } //----- (005569F0) -------------------------------------------------------- signed int __thiscall sub_5569F0(_DWORD **this) { signed int result; // eax _DWORD *v2; // edx result = (signed int)this[6214]; if ( result ) { if ( result == 1 ) { v2 = this[6217]; } else { if ( result != 2 ) return result; v2 = this[6218]; } } else { v2 = this[6216]; } result = (signed int)this[6215]; if ( 8 * (3 * result + 3) < (unsigned int)v2 ) { this[6215] = (_DWORD *)(result + 1); result = sub_556000(this); } return result; } //----- (00556B00) -------------------------------------------------------- _DWORD *__thiscall sub_556B00(char *this) { int v1; // esi char *v2; // edi char v3; // bl const CHAR *v4; // eax char v5; // ST10_1 int v6; // ebx char *v7; // eax char v8; // cl _DWORD *v9; // edi int v10; // ebx _DWORD *v11; // esi int v12; // esi _DWORD *v13; // edi _DWORD *v14; // ebx char *v15; // ebx int v16; // edi int v17; // esi const CHAR *v18; // eax _DWORD *v19; // esi char v21; // [esp+Ch] [ebp-11Ch] char *v22; // [esp+10h] [ebp-118h] int v23; // [esp+14h] [ebp-114h] _DWORD *v24; // [esp+18h] [ebp-110h] _DWORD *v25; // [esp+1Ch] [ebp-10Ch] char *v26; // [esp+20h] [ebp-108h] char v27; // [esp+24h] [ebp-104h] char v28; // [esp+25h] [ebp-103h] v1 = 0; v2 = this + 601; v26 = this; v23 = 0; v22 = this + 601; do { v3 = *(v2 - 1); if ( v3 || *v2 ) { v27 = 0; memset(&v28, 0, 0xFFu); v5 = v3; v6 = (int)v26; v7 = sub_554600(*v2, v5); sprintf(&v27, "%s", v7); if ( sub_553AE0((_DWORD *)v6, v1, &v24, (int)&v27) ) { v8 = *v2; if ( (unsigned __int8)*v2 >= 0xF8u ) { v12 = -1; switch ( v8 ) { case 0xF8: v12 = 0; break; case 0xF9: v12 = 1; break; case 0xFA: v12 = 2; break; case 0xFB: v12 = 3; break; case 0xFC: v12 = 4; break; case 0xFD: v12 = 5; break; case 0xFE: v12 = 6; break; case 0xFF: v12 = 7; break; default: break; } switch ( *(v2 - 1) ) { case 16: v25 = (_DWORD *)64; break; case 17: v25 = (_DWORD *)1; break; case 18: v25 = (_DWORD *)4; break; default: v25 = 0; break; } if ( v12 && v12 != 1 ) { v13 = (_DWORD *)sub_4A04A0(*(_DWORD **)(v6 + 296)); sub_435720(v13, v12, v25); v14 = v24; sub_558410(v13, v24); if ( (unsigned int)v14 - 98 > 3 ) sub_4355F0(v13, (int)v14, v12, 1, (int)v25, 0); else sub_4355F0(v13, (int)v14, v12, 2, (int)v25, 0); } } else { switch ( *(v2 - 1) ) { case 16: v9 = (_DWORD *)64; break; case 17: v9 = (_DWORD *)1; break; case 18: v9 = (_DWORD *)4; break; default: v9 = 0; break; } v10 = sub_550F10(v8); v11 = (_DWORD *)sub_4A04A0(*((_DWORD **)v26 + 74)); sub_4356B0(v11, v10, v9); sub_558410(v11, v24); if ( (unsigned int)v24 - 98 > 3 ) sub_435530(v11, (int)v24, v10, 1, v9, 0); else sub_435530(v11, (int)v24, v10, 2, v9, 0); } v15 = v26; v16 = 0; v17 = (int)(v26 + 600); do { if ( *(_BYTE *)(v17 + 1) == *v22 && *(_BYTE *)v17 == *(v22 - 1) && v16 != v23 ) { *(_WORD *)v17 = 0; v18 = sub_40C190(860065931); sub_553AE0(v15, v16, &v24, (int)v18); } ++v16; v17 += 258; } while ( v16 < 95 ); v1 = v23; v2 = v22; } } else { v4 = sub_40C190(860065931); sub_553AE0(v26, v1, &v21, (int)v4); } ++v1; v2 += 258; v23 = v1; v22 = v2; } while ( v1 < 95 ); v19 = (_DWORD *)sub_4A04A0(*((_DWORD **)v26 + 74)); sub_435530(v19, 30, 59, 1, 0, 0); sub_435530(v19, 31, 60, 1, 0, 0); sub_435530(v19, 32, 61, 1, 0, 0); sub_435530(v19, 33, 62, 1, 0, 0); sub_435530(v19, 34, 63, 1, 0, 0); return sub_435530(v19, 35, 64, 1, 0, 0); } //----- (00556E70) -------------------------------------------------------- _DWORD *__thiscall sub_556E70(char *this, char a2) { char *v2; // esi __int16 *v3; // eax char v4; // dl int v5; // ecx v2 = this; if ( a2 == 1 ) memset(this + 344, 0, 0x5FBEu); v3 = word_B91650; do { v2[258 * (unsigned __int16)*v3 + 601] = *((_BYTE *)v3 + 3); v2[258 * (unsigned __int16)*v3 + 600] = *((_BYTE *)v3 + 2); v2[258 * (unsigned __int16)v3[4] + 601] = *((_BYTE *)v3 + 11); v2[258 * (unsigned __int16)v3[4] + 600] = *((_BYTE *)v3 + 10); v2[258 * (unsigned __int16)v3[8] + 601] = *((_BYTE *)v3 + 19); v2[258 * (unsigned __int16)v3[8] + 600] = *((_BYTE *)v3 + 18); v2[258 * (unsigned __int16)v3[12] + 601] = *((_BYTE *)v3 + 27); v2[258 * (unsigned __int16)v3[12] + 600] = *((_BYTE *)v3 + 26); v2[258 * (unsigned __int16)v3[16] + 601] = *((_BYTE *)v3 + 35); v4 = *((_BYTE *)v3 + 34); v5 = 258 * (unsigned __int16)v3[16]; v3 += 20; v2[v5 + 600] = v4; } while ( (signed int)v3 < (signed int)&unk_B91948 ); sub_5551C0(v2); return sub_556B00(v2); } // B91650: using guessed type __int16 word_B91650[]; //----- (00556FA0) -------------------------------------------------------- _DWORD *__thiscall sub_556FA0(char *this) { char *v1; // esi __int16 *v2; // eax int v3; // ecx char v4; // dl int v5; // ecx char v6; // dl int v7; // ecx char v8; // dl int v9; // ecx char v10; // dl int v11; // ecx char v12; // dl v1 = this; v2 = word_B91650; do { v3 = 258 * (unsigned __int16)*v2; v4 = v1[v3 + 601]; if ( *((_BYTE *)v2 + 3) != v4 || *((_BYTE *)v2 + 2) != v1[v3 + 600] ) { *((_BYTE *)v2 + 3) = v4; *((_BYTE *)v2 + 2) = v1[v3 + 600]; } v5 = 258 * (unsigned __int16)v2[4]; v6 = v1[v5 + 601]; if ( *((_BYTE *)v2 + 11) != v6 || *((_BYTE *)v2 + 10) != v1[v5 + 600] ) { *((_BYTE *)v2 + 11) = v6; *((_BYTE *)v2 + 10) = v1[v5 + 600]; } v7 = 258 * (unsigned __int16)v2[8]; v8 = v1[v7 + 601]; if ( *((_BYTE *)v2 + 19) != v8 || *((_BYTE *)v2 + 18) != v1[v7 + 600] ) { *((_BYTE *)v2 + 19) = v8; *((_BYTE *)v2 + 18) = v1[v7 + 600]; } v9 = 258 * (unsigned __int16)v2[12]; v10 = v1[v9 + 601]; if ( *((_BYTE *)v2 + 27) != v10 || *((_BYTE *)v2 + 26) != v1[v9 + 600] ) { *((_BYTE *)v2 + 27) = v10; *((_BYTE *)v2 + 26) = v1[v9 + 600]; } v11 = 258 * (unsigned __int16)v2[16]; v12 = v1[v11 + 601]; if ( *((_BYTE *)v2 + 35) != v12 || *((_BYTE *)v2 + 34) != v1[v11 + 600] ) { *((_BYTE *)v2 + 35) = v12; *((_BYTE *)v2 + 34) = v1[v11 + 600]; } v2 += 20; } while ( (signed int)v2 < (signed int)&unk_B91948 ); sub_5551C0(v1); return sub_556B00(v1); } // B91650: using guessed type __int16 word_B91650[]; //----- (005570C0) -------------------------------------------------------- int __cdecl sub_5570C0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // eax int v9; // esi void (__thiscall ***v10)(void *, signed int); // edi int result; // eax void *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v8 = operator new(0x148u); v9 = (int)v8; v12 = v8; v13 = 0; if ( v8 ) { sub_8FE000(v8); *(_DWORD *)v9 = &KeyRemappingBut::`vftable'; *(_DWORD *)(v9 + 232) = &KeyRemappingBut::`vftable'; *(_DWORD *)(v9 + 324) = -1; } else { v9 = 0; } if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v13 = 1; sub_403790(&unk_BA6B10, v9); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int, int))(*(_DWORD *)v9 + 560))( v9, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9); v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v12, (_DWORD *)v9); if ( v12 ) { v10 = (void (__thiscall ***)(void *, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)v12 + 1) ) { if ( v10 ) (**v10)(v10, 1); } } v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = 0; } return result; } // 9CCF18: using guessed type void *KeyRemappingBut::`vftable'; // 9CCF34: using guessed type void *KeyRemappingBut::`vftable'; //----- (00557230) -------------------------------------------------------- _DWORD *__thiscall sub_557230(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &KeyRemappingWin::`vftable'; v1[58] = &KeyRemappingWin::`vftable'; v1[6294] = 0; v1[6295] = 0; v1[6296] = 0; v1[6214] = 0; v1[6215] = 0; *((_WORD *)v1 + 12582) = 0; v1[6292] = 0; v1[6298] = 0; v1[6299] = 0; *((_BYTE *)v1 + 25458) = 0; v1[6293] = 0; v1[6216] = 25; v1[6217] = 24; v1[6218] = 48; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CD16C: using guessed type void *KeyRemappingWin::`vftable'; // 9CD18C: using guessed type void *KeyRemappingWin::`vftable'; //----- (00557300) -------------------------------------------------------- volatile LONG *__cdecl sub_557300(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x6374u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_557230(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00557430) -------------------------------------------------------- char __thiscall sub_557430(char *this) { char *v1; // esi v1 = this; sub_556E70(this, 0); sub_556000((_DWORD **)v1); return sub_8F86A0(&unk_BA6B10, v1); } //----- (00557450) -------------------------------------------------------- char __thiscall sub_557450(char *this, char a2) { sub_556E70(this, a2); return 1; } //----- (00557480) -------------------------------------------------------- char __thiscall sub_557480(char *this, int a2) { char *v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // eax volatile LONG v17; // edx const CHAR *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax int v24; // eax volatile LONG *v25; // eax volatile LONG v26; // edx const CHAR *v27; // eax int v28; // eax volatile LONG *v29; // eax volatile LONG v30; // edx const CHAR *v31; // eax volatile LONG **v32; // eax volatile LONG **v33; // edi volatile LONG **v34; // eax int v35; // eax volatile LONG *v36; // eax int v37; // ST64_4 char *v38; // eax char *v39; // eax int v40; // eax volatile LONG *v41; // eax char *v42; // eax volatile LONG **v43; // edi volatile LONG *v44; // eax volatile LONG *v45; // ST48_4 int v46; // edx volatile LONG **v47; // edi int v48; // ST54_4 int v49; // edi volatile LONG *v50; // edi char v51; // ST54_1 int v52; // ST58_4 int v53; // ST5C_4 int v54; // ST60_4 const CHAR *v55; // eax volatile LONG *v56; // edi char v57; // ST54_1 int v58; // ST58_4 int v59; // ST5C_4 int v60; // ST60_4 const CHAR *v61; // eax volatile LONG *v62; // edi char v63; // ST54_1 int v64; // ST58_4 int v65; // ST5C_4 int v66; // ST60_4 const CHAR *v67; // eax char *v68; // ecx unsigned int v69; // eax void (__thiscall ***v70)(_DWORD, signed int); // esi int v71[5]; // [esp+78h] [ebp-78h] int v72; // [esp+8Ch] [ebp-64h] int v73; // [esp+90h] [ebp-60h] char v74[4]; // [esp+94h] [ebp-5Ch] int v75; // [esp+98h] [ebp-58h] int v76; // [esp+9Ch] [ebp-54h] int v77; // [esp+A0h] [ebp-50h] volatile LONG *v78; // [esp+A4h] [ebp-4Ch] volatile LONG *v79; // [esp+A8h] [ebp-48h] volatile LONG **v80; // [esp+ACh] [ebp-44h] int v81; // [esp+B0h] [ebp-40h] int v82; // [esp+B4h] [ebp-3Ch] int v83; // [esp+B8h] [ebp-38h] char v84; // [esp+BCh] [ebp-34h] int v85; // [esp+ECh] [ebp-4h] v2 = this; v83 = 0; v85 = 0; v78 = (volatile LONG *)sub_43D0D0(4u); if ( !v78 ) { v85 = -1; if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) ) { if ( v83 ) (**(void (__thiscall ***)(int, signed int))v83)(v83, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\KeyRemappingWin.nif"); sub_8F66B0(v5, (int)&v83, v4); if ( !v83 ) return 0; v6 = sub_8FB140(v83, (int)"Frame", (int)&v81, (int)&v82, 0); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v6, 0, a2, (int)"KeyRemappingWin", 0) ) { v8 = v82; v9 = v81; v75 = v82; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v83, (int)"Theme", (int)&v81, (int)&v82, v10); else v11 = sub_8FB140(v83, (int)"Theme", (int)&v81, (int)&v82, 0); sub_8F3EB0(v81 - v9, v82 - v8, (int)v11, (int)v2, 0, 0); v80 = sub_8FB140(v83, (int)"ClsNor", (int)&v81, (int)&v82, v78); sub_8FB650(v80, v83, (int)"ClsClick"); sub_8FB650(v80, v83, (int)"ClsOver"); sub_90C8D0(v81 - v9, v82 - v8, (int)v80, (int)v2); v79 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v83 + 72))("HelpLinkNor") ) { v80 = sub_8FB140(v83, (int)"HelpLinkNor", (int)&v81, (int)&v82, v79); sub_8FB650(v80, v83, (int)"HelpLinkClick"); sub_8FB650(v80, v83, (int)"HelpLinkOver"); sub_8FE0F0(v81 - v9, v82 - v8, (int)v80, (int)v2, 20, 0, 0); } v12 = sub_8FB140(v83, (int)"Panel01", (int)&v81, (int)&v82, v78); v13 = sub_8F3EB0(v81 - v9, v82 - v8, (int)v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v83, (int)"Panel02", (int)&v81, (int)&v82, v78); sub_8F3EB0(v81 - v9, v82 - v8, (int)v14, (int)v2, 0, 0); if ( sub_8F71E0(v83, (int)"WinTitle", &v81, &v82, &v77, &v76) ) { v15 = sub_421050(7); v16 = sub_8F4A20(v81 - v9, v82 - v8 + 2, v77, v76, v15, (int)v2, 0, 0); v17 = *v16; v80 = (volatile LONG **)v16; (*(void (__thiscall **)(volatile LONG *, signed int))(v17 + 488))(v16, 5); (*((void (__stdcall **)(int *))*v80 + 117))(&dword_AA8D98); v79 = *v80 + 118; v18 = sub_40C190(608528039); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v80, v18); (*((void (__stdcall **)(_DWORD))*v80 + 60))(0); v19 = sub_8FB140(v83, (int)"IconSlot", (int)&v81, (int)&v82, v78); sub_8F3EB0(v81 - v9, v82 - v8, (int)v19, (int)v2, 0, 0); if ( sub_8F71E0(v83, (int)"Tab01_On", &v81, &v82, &v77, &v76) ) { v80 = sub_8FB140(v83, (int)"Tab01_Off", (int)&v81, (int)&v82, v78); sub_8FB650(v80, v83, (int)"Tab01_On"); v79 = sub_465940(v81 - v9, v82 - v8, (int)v80, (int)v2, 11, 0); sub_5B3CF0((_DWORD *)v2 + 6294, &v79); *(_BYTE *)(**((_DWORD **)v2 + 6294) + 380) = 1; v20 = sub_421050(0); v21 = sub_8F4A20(v81 - v9, v82 - v8 + 2, v77, v76, v20, (int)v2, 0, 0); v22 = *v21; v80 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 5); (*((void (__stdcall **)(int *))*v80 + 117))(&dword_AA8D98); v79 = *v80 + 118; v23 = sub_40C190(-235406087); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v80, v23); (*((void (__stdcall **)(_DWORD))*v80 + 60))(0); if ( sub_8F71E0(v83, (int)"Tab02_On", &v81, &v82, &v77, &v76) ) { v80 = sub_8FB140(v83, (int)"Tab02_Off", (int)&v81, (int)&v82, v78); sub_8FB650(v80, v83, (int)"Tab02_On"); v79 = sub_465940(v81 - v9, v82 - v8, (int)v80, (int)v2, 12, 0); sub_5B3CF0((_DWORD *)v2 + 6294, &v79); *(_BYTE *)(*(_DWORD *)(*((_DWORD *)v2 + 6294) + 4) + 380) = 0; v24 = sub_421050(0); v25 = sub_8F4A20(v81 - v9, v82 - v8 + 2, v77, v76, v24, (int)v2, 0, 0); v26 = *v25; v80 = (volatile LONG **)v25; (*(void (__thiscall **)(volatile LONG *, signed int))(v26 + 488))(v25, 5); (*((void (__stdcall **)(int *))*v80 + 117))(&dword_AA8D98); v79 = *v80 + 118; v27 = sub_40C190(-1750138393); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v80, v27); (*((void (__stdcall **)(_DWORD))*v80 + 60))(0); if ( sub_8F71E0(v83, (int)"Tab03_On", &v81, &v82, &v77, &v76) ) { v80 = sub_8FB140(v83, (int)"Tab03_Off", (int)&v81, (int)&v82, v78); sub_8FB650(v80, v83, (int)"Tab03_On"); v79 = sub_465940(v81 - v9, v82 - v8, (int)v80, (int)v2, 13, 0); sub_5B3CF0((_DWORD *)v2 + 6294, &v79); *(_BYTE *)(*(_DWORD *)(*((_DWORD *)v2 + 6294) + 8) + 380) = 0; v28 = sub_421050(0); v29 = sub_8F4A20(v81 - v9, v82 - v8 + 2, v77, v76, v28, (int)v2, 0, 0); v30 = *v29; v80 = (volatile LONG **)v29; (*(void (__thiscall **)(volatile LONG *, signed int))(v30 + 488))(v29, 5); (*((void (__stdcall **)(int *))*v80 + 117))(&dword_AA8D98); v79 = *v80 + 118; v31 = sub_40C190(1397372738); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v80, v31); (*((void (__stdcall **)(_DWORD))*v80 + 60))(0); v32 = sub_8FB140(v83, (int)"Plane", (int)&v81, (int)&v82, v78); sub_8F3EB0(v81 - v9, v82 - v8, (int)v32, (int)v2, 0, 0); *(_DWORD *)v74 = 0; v33 = (volatile LONG **)(v2 + 24876); while ( 1 ) { v79 = (volatile LONG *)(*(_DWORD *)v74 + 1); sprintf(&v84, "SlotBox%02d", *(_DWORD *)v74 + 1); if ( !sub_8F71E0(v83, (int)&v84, &v81, &v82, &v73, &v72) ) break; v34 = sub_8FB140(v83, (int)&v84, (int)&v81, (int)&v82, v78); sub_8F3EB0(v81 - v9, v82 - v75, (int)v34, (int)v2, 0, 0); v35 = sub_421050(0); v36 = sub_8F4A20(v81 - v9, v82 - v75 + 2, v73, v72, v35, (int)v2, 0, 0); *v33 = v36; (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 488))(v36, 5); v37 = *(_DWORD *)v74; v80 = (volatile LONG **)(**v33 + 472); v38 = (char *)sub_40C190(-320474044); v39 = sub_7549E0(v38, v37); ((void (__thiscall *)(volatile LONG *, char *))*v80)(*v33, v39); (*(void (__stdcall **)(_DWORD))(**v33 + 240))(0); sprintf(&v84, "SlotMap%02d", v79); if ( !sub_8F71E0(v83, (int)&v84, &v81, &v82, &v73, &v72) ) break; v80 = sub_8FB140(v83, (int)&v84, (int)&v81, (int)&v82, v78); sprintf(&v84, "SlotMap%02dOver", v79); sub_8FB650(v80, v83, (int)&v84); sub_8FB650(v80, v83, (int)&v84); v33[48] = (volatile LONG *)sub_5570C0(v81 - v9, v82 - v75, (int)v80, (int)v2, 16, 0, 0, *(int *)v74); v40 = sub_421050(0); v41 = sub_8F4A20(v81 - v9, v82 - v75 + 2, v73, v72, v40, (int)v2, 0, 0); v33[24] = v41; (*(void (__thiscall **)(volatile LONG *, signed int))(*v41 + 488))(v41, 5); v80 = (volatile LONG **)(*v33[24] + 472); v42 = sub_7549E0("%d", *(_DWORD *)v74); ((void (__thiscall *)(volatile LONG *, char *))*v80)(v33[24], v42); (*(void (__stdcall **)(_DWORD))(*v33[24] + 240))(0); ++v33; *(_DWORD *)v74 = v79; if ( (unsigned int)v79 >= 0x18 ) { v43 = sub_8FB140(v83, (int)"PrePageNor", (int)&v81, (int)&v82, v78); sub_8FB650(v43, v83, (int)"PrePageClick"); sub_8FB650(v43, v83, (int)"PrePageOver"); v44 = sub_8FE0F0(v81 - v9, v82 - v75, (int)v43, (int)v2, 14, 0, 0); v45 = v78; v46 = v83; *((_DWORD *)v2 + 6298) = v44; v47 = sub_8FB140(v46, (int)"NextPageNor", (int)&v81, (int)&v82, v45); sub_8FB650(v47, v83, (int)"NextPageClick"); sub_8FB650(v47, v83, (int)"NextPageOver"); v48 = (int)v47; v49 = v75; *((_DWORD *)v2 + 6299) = sub_8FE0F0(v81 - v9, v82 - v75, v48, (int)v2, 15, 0, 0); sub_456260(v71); LOBYTE(v85) = 1; sub_455FF0(v71, (int)v2); sub_456000(v71, v9, v49); sub_456380(v71, v83); v50 = sub_4563D0(v71, 17, (int)"ApplyNor", (int)"ApplyOver", (int)"ApplyClick", 0, 0); v51 = dword_AA8C68; v52 = dword_AA8C6C; v53 = dword_AA8C70; v54 = dword_AA8C74; v55 = sub_40C190(-1678117642); sub_456040((int)v50, (int)v55, v51, v52, v53, v54, 5); v56 = sub_4563D0(v71, 18, (int)"DefaultNor", (int)"DefaultOver", (int)"DefaultClick", 0, 0); v57 = dword_AA8C68; v58 = dword_AA8C6C; v59 = dword_AA8C70; v60 = dword_AA8C74; v61 = sub_40C190(-1878659591); sub_456040((int)v56, (int)v61, v57, v58, v59, v60, 5); v62 = sub_4563D0(v71, 19, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v63 = dword_AA8C68; v64 = dword_AA8C6C; v65 = dword_AA8C70; v66 = dword_AA8C74; v67 = sub_40C190(-1746404363); sub_456040((int)v62, (int)v67, v63, v64, v65, v66, 5); (*(void (__thiscall **)(char *, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.5); if ( !byte_AC9CD0 ) { sub_556E70(v2, 1); v68 = v2 + 601; v69 = 0; do { byte_AB6822[v69] = *(v68 - 1); byte_AB6823[v69] = *v68; v69 += 2; v68 += 258; } while ( v69 < 0xBE ); sub_556000((_DWORD **)v2); } LOBYTE(v85) = 0; sub_4562E0(v71); v70 = (void (__thiscall ***)(_DWORD, signed int))v83; v85 = -1; if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) && v70 ) (**v70)(v70, 1); return 1; } } } } } } v85 = -1; sub_410C00(&v83); result = 0; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v83; v85 = -1; if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AC9CD0: using guessed type char byte_AC9CD0; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005580D0) -------------------------------------------------------- int __thiscall sub_5580D0(int this) { char *v1; // esi char *v2; // eax char *v3; // ecx v1 = (char *)this; if ( *(_BYTE *)(this + 25165) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 4 * *(_DWORD *)(this + 25168) + 25068) + 240))(1); v1[25165] = 0; } sub_556E70(v1, 0); v2 = byte_AB6823; v3 = v1 + 601; do { *(v2 - 1) = *(v3 - 1); *v2 = *v3; v2 += 2; v3 += 258; } while ( (signed int)v2 < (signed int)&unk_AB68E1 ); sub_556000((_DWORD **)v1); return sub_8F28E0(v1); } //----- (00558160) -------------------------------------------------------- void __thiscall sub_558160(_BYTE *this) { _BYTE *v1; // ebx char *v2; // eax signed int v3; // edi int v4; // eax char **v5; // eax char *v6; // eax char *v7; // esi char *v8; // eax char *v9; // ecx char *v10; // esi void **v11; // [esp+10h] [ebp-2Ch] char *v12; // [esp+1Ch] [ebp-20h] int v13; // [esp+20h] [ebp-1Ch] char *v14; // [esp+28h] [ebp-14h] int v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+38h] [ebp-4h] v1 = this; v13 = 0; v2 = (char *)operator new(0xCu); if ( !v2 ) { v14 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v14); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } v12 = v2; *(_DWORD *)v2 = v2; *((_DWORD *)v12 + 1) = v12; v3 = 0; v16 = 0; v15 = 0; do { v4 = 258 * (unsigned __int16)word_B91650[4 * v3]; if ( HIBYTE(word_B91652[4 * v3]) != v1[v4 + 601] || LOBYTE(word_B91652[4 * v3]) != v1[v4 + 600] ) { v5 = sub_67ADC0(v12, *((_DWORD *)v12 + 1), (int)&v15); if ( (unsigned int)(1073741822 - v13) < 1 ) std::_Xlength_error("list too long"); ++v13; *((_DWORD *)v12 + 1) = v5; *(_DWORD *)v5[1] = v5; } v15 = ++v3; } while ( v3 < 95 ); sub_4D26B0(*((_DWORD **)v1 + 74), (int ****)&v12); sub_556FA0(v1); v6 = *(char **)v12; *(_DWORD *)v12 = v12; *((_DWORD *)v12 + 1) = v12; v13 = 0; if ( v6 != v12 ) { do { v7 = *(char **)v6; operator delete(v6); v6 = v7; } while ( v7 != v12 ); } sub_8EEE70(*((_DWORD **)v1 + 74), 267, 0, 0); v8 = *(char **)v12; *(_DWORD *)v12 = v12; *((_DWORD *)v12 + 1) = v12; v9 = v12; v13 = 0; if ( v8 != v12 ) { do { v10 = *(char **)v8; operator delete(v8); v9 = v12; v8 = v10; } while ( v10 != v12 ); } operator delete(v9); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // B91650: using guessed type __int16 word_B91650[]; // B91652: using guessed type __int16 word_B91652[]; //----- (00558310) -------------------------------------------------------- void __thiscall sub_558310(int this, int a2, int a3) { int v3; // eax switch ( a2 ) { case 11: sub_556790((_DWORD *)this); break; case 12: sub_556850((_DWORD *)this); break; case 13: sub_556910((_DWORD *)this); break; case 14: v3 = *(_DWORD *)(this + 24860); if ( v3 ) { *(_DWORD *)(this + 24860) = v3 - 1; sub_556000((_DWORD **)this); } break; case 15: sub_5569F0((_DWORD **)this); break; case 16: sub_556670(this, a3); break; case 17: sub_558160((_BYTE *)this); break; case 18: sub_4CD3B0(*(void **)(this + 296)); break; case 19: sub_557430((char *)this); break; case 20: sub_551F30(); break; default: return; } } //----- (005583D0) -------------------------------------------------------- void *__thiscall sub_5583D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &KeyRemappingBut::`vftable'; *((_DWORD *)this + 58) = &KeyRemappingBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CCF18: using guessed type void *KeyRemappingBut::`vftable'; // 9CCF34: using guessed type void *KeyRemappingBut::`vftable'; //----- (00558410) -------------------------------------------------------- void __thiscall sub_558410(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // edi v2 = (_DWORD *)this[4]; if ( v2 ) { while ( 1 ) { v3 = (_DWORD *)v2[2]; if ( (_DWORD *)*v3 == a2 ) break; v2 = (_DWORD *)*v2; if ( !v2 ) return; } v4 = (_DWORD *)this[4]; v5 = this + 3; if ( v4 ) { while ( 1 ) { v6 = v4 + 2; v7 = v4; v4 = (_DWORD *)*v4; if ( v3 == (_DWORD *)*v6 ) break; if ( !v4 ) goto LABEL_8; } } else { LABEL_8: v7 = 0; } a2 = v7; if ( v7 ) sub_403620(v5, &a2); operator delete(v3); } } //----- (00558470) -------------------------------------------------------- _DWORD *__thiscall sub_558470(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &KeyRemappingWin::`vftable'; *((_DWORD *)this + 58) = &KeyRemappingWin::`vftable'; if ( *((_DWORD *)this + 6294) ) operator delete(*((void **)this + 6294)); v2[6294] = 0; v2[6295] = 0; v2[6296] = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CD16C: using guessed type void *KeyRemappingWin::`vftable'; // 9CD18C: using guessed type void *KeyRemappingWin::`vftable'; //----- (00558560) -------------------------------------------------------- char __thiscall sub_558560(void *this, int a2) { int v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // esi volatile LONG v12; // ebx int v13; // eax volatile LONG *v14; // esi volatile LONG v15; // ebx int v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // esi volatile LONG *v21; // ebx int *v22; // ebx int v23; // esi int v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // esi volatile LONG *v27; // ebx int *v28; // ebx int v29; // esi int v30; // eax void (__thiscall ***v31)(_DWORD, signed int); // esi int v32[5]; // [esp+60h] [ebp-2Ch] int v33; // [esp+74h] [ebp-18h] int v34; // [esp+78h] [ebp-14h] int v35; // [esp+7Ch] [ebp-10h] int v36; // [esp+88h] [ebp-4h] v2 = (int)this; v35 = 0; v3 = dword_BA6BA0; v36 = 0; v33 = 0; v34 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\KQScoreWin.nif"); sub_8F66B0(v4, (int)&v35, v3); if ( !v35 ) return 0; v5 = sub_8FB140(v35, (int)"Panel01", (int)&v33, (int)&v34, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"KQScoreWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v35; v36 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v32); LOBYTE(v36) = 1; sub_455FF0(v32, v2); sub_456000(v32, 0, 0); sub_456380(v32, v35); v8 = (volatile LONG *)sub_43D0D0(0x13u); v9 = sub_456820(v32, (int)"Theme", v8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v10 = sub_456820(v32, (int)"Panel02", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_456760(v32, (int)"Text01", (int)"Team", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v12 = *v11; v13 = sub_421050(1); (*(void (__thiscall **)(volatile LONG *, int))(v12 + 452))(v11, v13); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8CB8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v14 = sub_456760(v32, (int)"Text02", (int)"Score", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v15 = *v14; v16 = sub_421050(1); (*(void (__thiscall **)(volatile LONG *, int))(v15 + 452))(v14, v16); (*(void (__thiscall **)(volatile LONG *, int *))(*v14 + 468))(v14, &dword_AA8CB8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v17 = sub_456820(v32, (int)"GuildName01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v18 = sub_456820(v32, (int)"GuildName02", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v19 = sub_456760(v32, (int)"Score01", (int)&unk_9CD3D7, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v20 = *(volatile LONG **)(v2 + 344); v21 = v19; if ( v20 != v19 ) { if ( v20 && !InterlockedDecrement(v20 + 1) && v20 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v20)(v20, 1); *(_DWORD *)(v2 + 344) = v21; if ( v21 ) InterlockedIncrement(v21 + 1); } v22 = *(int **)(v2 + 344); v23 = *v22; v24 = sub_421050(1); (*(void (__thiscall **)(int *, int))(v23 + 452))(v22, v24); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 344) + 468))(&dword_AA8C88); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v25 = sub_456760(v32, (int)"Score02", (int)&unk_9CD3DE, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v26 = *(volatile LONG **)(v2 + 348); v27 = v25; if ( v26 != v25 ) { if ( v26 && !InterlockedDecrement(v26 + 1) && v26 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v26)(v26, 1); *(_DWORD *)(v2 + 348) = v27; if ( v27 ) InterlockedIncrement(v27 + 1); } v28 = *(int **)(v2 + 348); v29 = *v28; v30 = sub_421050(1); (*(void (__thiscall **)(int *, int))(v29 + 452))(v28, v30); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 348) + 468))(&dword_AA8CA8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.5); LOBYTE(v36) = 0; sub_4562E0(v32); v36 = -1; if ( v35 ) { v31 = (void (__thiscall ***)(_DWORD, signed int))v35; if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v31 ) (**v31)(v31, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8C88: using guessed type int dword_AA8C88; // AA8CA8: using guessed type int dword_AA8CA8; // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005589D0) -------------------------------------------------------- LONG __thiscall sub_5589D0(_DWORD *this, unsigned int a2, int a3) { LONG result; // eax int v4; // esi int (__thiscall **v5)(int, signed int); // edi char *v6; // eax result = a2; if ( a2 < 2 ) { v4 = this[a2 + 86]; if ( v4 ) result = InterlockedIncrement((volatile LONG *)(v4 + 4)); if ( v4 ) { v5 = *(int (__thiscall ***)(int, signed int))v4; v6 = sub_7549E0("%d", a3); result = v5[118](v4, (signed int)v6); } if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } return result; } //----- (00558A80) -------------------------------------------------------- void __thiscall sub_558A80(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 86; v2 = 2; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00558B60) -------------------------------------------------------- int __cdecl sub_558B60(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &KQScoreWin::`vftable'; *(_DWORD *)(v2 + 232) = &KQScoreWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 344), 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); LOBYTE(v6) = 2; sub_558A80((int *)v2); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 3; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CD438: using guessed type void *KQScoreWin::`vftable'; // 9CD454: using guessed type void *KQScoreWin::`vftable'; //----- (00558CD0) -------------------------------------------------------- _DWORD *__thiscall sub_558CD0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &KQScoreWin::`vftable'; *((_DWORD *)this + 58) = &KQScoreWin::`vftable'; `eh vector destructor iterator'((char *)this + 344, 4u, 2, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CD438: using guessed type void *KQScoreWin::`vftable'; // 9CD454: using guessed type void *KQScoreWin::`vftable'; //----- (00558DD0) -------------------------------------------------------- char __thiscall sub_558DD0(_DWORD *this) { _DWORD *v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // esi LONG v3; // eax int v5; // edi char *v6; // eax volatile LONG **v7; // eax volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // ST1C_4 int v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // ST20_4 int v15; // eax volatile LONG *v16; // eax volatile LONG **v17; // ST1C_4 int v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // ST20_4 int v21; // eax volatile LONG *v22; // eax int v23; // edi int v24; // eax int v25; // edi int v26; // eax void (__thiscall ***v27)(_DWORD, signed int); // esi char v28; // [esp+28h] [ebp-18h] char v29; // [esp+2Ch] [ebp-14h] int v30; // [esp+30h] [ebp-10h] int v31; // [esp+3Ch] [ebp-4h] v1 = this; v30 = 0; v31 = 0; if ( !sub_8F2900(this, 0, 0, 1, 1, 0, 0, 0) ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( v30 ) { v3 = InterlockedDecrement((volatile LONG *)(v30 + 4)); goto LABEL_4; } return 0; } if ( !sub_43D0D0(4u) ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( v30 ) { v3 = InterlockedDecrement((volatile LONG *)(v30 + 4)); LABEL_4: if ( !v3 ) { if ( v2 ) (**v2)(v2, 1); } } return 0; } v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\PtyWin.nif"); sub_8F66B0(v6, (int)&v30, v5); if ( !v30 ) return 0; v7 = sub_8FB140(v30, (int)"HPground01", (int)&v28, (int)&v29, 0); v8 = sub_8F3EB0(0, 0, (int)v7, (int)v1, 0, 0); v1[76] = v8; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v8 + 276))(v8, 0.5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[76] + 240))(0); v9 = sub_8FB140(v30, (int)"Fill_HP", (int)&v28, (int)&v29, 0); v10 = sub_90CB20(0, 0, (int)v9, (int)v1, 2); v1[75] = v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_8FB140(v30, (int)"SPground01", (int)&v28, (int)&v29, 0); v12 = (*(int (**)(void))(*(_DWORD *)v1[75] + 148))(); v13 = sub_8F3EB0(0, v12, (int)v11, (int)v1, 0, 0); v1[78] = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 276))(v13, 0.5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[78] + 240))(0); v14 = sub_8FB140(v30, (int)"Fill_SP", (int)&v28, (int)&v29, 0); v15 = (*(int (**)(void))(*(_DWORD *)v1[75] + 148))(); v16 = sub_90CB20(0, v15, (int)v14, (int)v1, 2); v1[77] = v16; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = sub_8FB140(v30, (int)"LPground01", (int)&v28, (int)&v29, 0); v18 = (*(int (**)(void))(*(_DWORD *)v1[75] + 148))(); v19 = sub_8F3EB0(0, v18, (int)v17, (int)v1, 0, 0); v1[80] = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 276))(v19, 0.5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[80] + 240))(0); v20 = sub_8FB140(v30, (int)"Fill_LP", (int)&v28, (int)&v29, 0); v21 = (*(int (**)(void))(*(_DWORD *)v1[75] + 148))(); v22 = sub_90CB20(0, v21, (int)v20, (int)v1, 2); v1[79] = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = *v1; v24 = (*(int (**)(void))(*(_DWORD *)v1[75] + 144))(); (*(void (__thiscall **)(_DWORD *, int))(v23 + 152))(v1, v24); v25 = *v1; v26 = (*(int (**)(void))(*(_DWORD *)v1[75] + 148))(); (*(void (__thiscall **)(_DWORD *, int))(v25 + 156))(v1, v26); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 240))(v1, 0); v31 = -1; if ( v30 ) { v27 = (void (__thiscall ***)(_DWORD, signed int))v30; if ( !InterlockedDecrement((volatile LONG *)(v30 + 4)) ) { if ( v27 ) (**v27)(v27, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00559140) -------------------------------------------------------- char *__thiscall sub_559140(_BYTE *this) { _BYTE *v1; // esi int *v2; // eax char *result; // eax char *v4; // ecx int v5; // ecx int v6; // edx float v7; // ST08_4 float v8; // ST04_4 int v9; // edi void (__thiscall *v10)(_BYTE *, BOOL); // eax _BYTE *v11; // ecx int (__thiscall *v12)(_BYTE *); // eax unsigned int v13; // eax double v14; // st7 int (__thiscall *v15)(_BYTE *); // eax bool v16; // zf BOOL v17; // [esp+14h] [ebp-28h] int v18; // [esp+20h] [ebp-1Ch] float v19; // [esp+24h] [ebp-18h] char v20; // [esp+2Ch] [ebp-10h] double v21; // [esp+30h] [ebp-Ch] unsigned int v22; // [esp+38h] [ebp-4h] v1 = this; if ( this[324] ) { v2 = (int *)sub_653B10(dword_AD8EBC, (float *)&v20); goto LABEL_6; } result = dword_AD8EBC; v4 = (char *)*((_DWORD *)dword_AD8EBC + 1026); if ( v4 && v4 != dword_AD8EBC ) { v2 = (int *)sub_653B10(v4, (float *)&v20); LABEL_6: v5 = *v2; v6 = v2[1]; HIDWORD(v21) = v2[2]; *((float *)&v21 + 1) = *((float *)&v21 + 1) + 3.0; v7 = (double)(unsigned int)dword_AC2F78; v8 = (double)(unsigned int)xRight; if ( !sub_8F74F0(dword_B66FB0, v8, v7, v5, v6, SHIDWORD(v21), (int)&v18) ) return (char *)(*(int (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v1 + 256))(v1, 0); if ( v1[324] ) { v17 = 1; } else { v9 = *((_DWORD *)dword_AD8EBC + 1026); if ( !v9 ) goto LABEL_18; if ( (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 92))(*((_DWORD *)dword_AD8EBC + 1026)) > 0 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v9 + 32))(v9) && !sub_651680(v9) ) { v10 = *(void (__thiscall **)(_BYTE *, BOOL))(*(_DWORD *)v1 + 256); v11 = v1; v17 = v1[296] != 0; LABEL_17: v10(v11, v17); LABEL_18: v12 = *(int (__thiscall **)(_BYTE *))(*(_DWORD *)v1 + 144); v21 = *(float *)&v18; v13 = v12(v1); v22 = v13 >> 1; v14 = (double)(v13 >> 1); v15 = *(int (__thiscall **)(_BYTE *))(*(_DWORD *)v1 + 148); *(float *)&v18 = v21 - v14; v21 = v19; result = (char *)v15(v1); v22 = (unsigned int)result; v16 = v1[325] == 0; v19 = v21 - (double)(unsigned int)result; if ( v16 ) result = (char *)(*(int (__thiscall **)(_BYTE *, signed int))(*(_DWORD *)v1 + 308))( v1, (signed int)(*(float *)&v18 + 0.5)); return result; } v17 = 0; } v10 = *(void (__thiscall **)(_BYTE *, BOOL))(*(_DWORD *)v1 + 256); v11 = v1; goto LABEL_17; } return result; } //----- (00559300) -------------------------------------------------------- int __thiscall sub_559300(_BYTE *this, int a2) { _DWORD **v2; // esi _DWORD *v3; // edi int result; // eax float v5; // ST08_4 float v6; // ST04_4 double v7; // st7 float v8; // ST08_4 float v9; // ST04_4 float v10; // ST08_4 float v11; // ST04_4 float *v12; // ecx char *v13; // edi float v14; // ST04_4 float v15; // ST00_4 float v16; // ST04_4 float v17; // ST04_4 void (__stdcall *v18)(signed int, int); // eax BOOL v19; // [esp+8h] [ebp-10h] int v20; // [esp+Ch] [ebp-Ch] v2 = (_DWORD **)this; if ( this[324] ) { v3 = (_DWORD *)*((_DWORD *)dword_AD8EBC + 731); if ( v3 && !sub_744760(v3, *((_DWORD *)dword_AD8EBC + 730), 0) ) { if ( v2[75] ) (*(void (__stdcall **)(_DWORD))(*v2[75] + 256))(0); if ( v2[76] ) (*(void (__stdcall **)(_DWORD))(*v2[76] + 256))(0); if ( v2[77] ) (*(void (__stdcall **)(_DWORD))(*v2[77] + 256))(0); if ( v2[78] ) (*(void (__stdcall **)(_DWORD))(*v2[78] + 256))(0); if ( v2[79] ) (*(void (__stdcall **)(_DWORD))(*v2[79] + 256))(0); if ( v2[80] ) (*(void (__stdcall **)(_DWORD))(*v2[80] + 256))(0); return ((int (__thiscall *)(_DWORD **, _DWORD))(*v2)[64])(v2, 0); } ((void (__thiscall *)(_DWORD **, signed int))(*v2)[64])(v2, 1); if ( !v3 || !sub_744000(v3) || *((_DWORD *)dword_AD8EBC + 730) ) { v8 = (double)sub_680BE0((int)byte_AD9238); v9 = (double)sub_680CC0((int)byte_AD9238); sub_4F39A0((float *)v2[75], v9, v8); v10 = (double)sub_680BF0((int)byte_AD9238); v11 = (double)sub_680CD0((int)byte_AD9238); sub_4F39A0((float *)v2[77], v11, v10); *(float *)&v19 = (double)sub_680C10((int)byte_AD9238); v7 = (double)sub_680CF0((int)byte_AD9238); v12 = (float *)v2[79]; goto LABEL_26; } v5 = (double)(*(int (__thiscall **)(_DWORD *))(*v3 + 92))(v3); v6 = (double)(*(int (__thiscall **)(_DWORD *))(*v3 + 100))(v3); sub_4F39A0((float *)v2[75], v6, v5); *(float *)&v19 = (double)(*(int (__thiscall **)(_DWORD *))(*v3 + 104))(v3); v7 = (double)(*(int (__thiscall **)(_DWORD *))(*v3 + 108))(v3); } else { v13 = (char *)*((_DWORD *)dword_AD8EBC + 1026); if ( !v13 || v13 == dword_AD8EBC ) return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)this + 256))(0); v19 = this[296] != 0; (*(void (**)(void))(*(_DWORD *)this + 256))(); v14 = (double)(*(int (__thiscall **)(char *))(*(_DWORD *)v13 + 92))(v13); v15 = (double)(*(int (__thiscall **)(char *))(*(_DWORD *)v13 + 100))(v13); sub_4F39A0((float *)v2[75], v15, v14); v16 = (double)(*(int (__thiscall **)(char *))(*(_DWORD *)v13 + 104))(v13); v7 = (double)(*(int (__thiscall **)(char *, _DWORD))(*(_DWORD *)v13 + 108))(v13, LODWORD(v16)); } v12 = (float *)v2[77]; LABEL_26: v17 = v7; sub_4F39A0(v12, v17, *(float *)&v19); v18 = *(void (__stdcall **)(signed int, int))(*v2[75] + 256); if ( byte_B92003 ) { v18(1, v20); (*(void (__cdecl **)(signed int))(*v2[76] + 256))(1); } else { v18(0, v20); (*(void (__cdecl **)(_DWORD))(*v2[76] + 256))(0); } if ( byte_B92004 ) { switch ( sub_652070(dword_AD8EBC) ) { case 0x1A: case 0x1B: (*(void (__stdcall **)(signed int))(*v2[79] + 256))(1); (*(void (__stdcall **)(signed int))(*v2[80] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v2[77] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*v2[78] + 256))(0); break; default: (*(void (__stdcall **)(_DWORD))(*v2[79] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[80] + 256))(0); (*(void (__stdcall **)(signed int))(*v2[77] + 256))(1); result = (*(int (__stdcall **)(signed int))(*v2[78] + 256))(1); break; } } else { (*(void (__stdcall **)(_DWORD))(*v2[77] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[78] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[79] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*v2[80] + 256))(0); } return result; } // B92003: using guessed type char byte_B92003; // B92004: using guessed type char byte_B92004; //----- (00559730) -------------------------------------------------------- int sub_559730() { _DWORD *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x148u); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { sub_8F3C20(v0); *(_DWORD *)v1 = &MainCharHPBarWin::`vftable'; *(_DWORD *)(v1 + 232) = &MainCharHPBarWin::`vftable'; *(_DWORD *)(v1 + 300) = 0; *(_BYTE *)(v1 + 296) = 0; *(_WORD *)(v1 + 324) = 1; *(_DWORD *)(v1 + 320) = 0; *(_DWORD *)(v1 + 316) = 0; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 516))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 9CD6C8: using guessed type void *MainCharHPBarWin::`vftable'; // 9CD6E4: using guessed type void *MainCharHPBarWin::`vftable'; //----- (00559890) -------------------------------------------------------- void *__thiscall sub_559890(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MainCharHPBarWin::`vftable'; *((_DWORD *)this + 58) = &MainCharHPBarWin::`vftable'; sub_8F3CC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CD6C8: using guessed type void *MainCharHPBarWin::`vftable'; // 9CD6E4: using guessed type void *MainCharHPBarWin::`vftable'; //----- (005598D0) -------------------------------------------------------- _DWORD *__thiscall sub_5598D0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 12, 0, 0); return result; } //----- (005598F0) -------------------------------------------------------- _DWORD *__thiscall sub_5598F0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 13, 0, 0); return result; } //----- (00559910) -------------------------------------------------------- _DWORD *__thiscall sub_559910(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 14, 0, 0); return result; } //----- (00559930) -------------------------------------------------------- _DWORD *__thiscall sub_559930(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 15, 0, 0); return result; } //----- (00559950) -------------------------------------------------------- _DWORD *__thiscall sub_559950(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 16, 0, 0); return result; } //----- (00559970) -------------------------------------------------------- _DWORD *__thiscall sub_559970(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 18, 0, 0); return result; } //----- (005599A0) -------------------------------------------------------- _DWORD *__thiscall sub_5599A0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 19, 0, 0); return result; } //----- (005599C0) -------------------------------------------------------- _DWORD *__thiscall sub_5599C0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 21, 0, 0); return result; } //----- (005599E0) -------------------------------------------------------- _DWORD *__thiscall sub_5599E0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 20, 0, 0); return result; } //----- (00559A00) -------------------------------------------------------- _DWORD *__thiscall sub_559A00(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 22, 0, 0); return result; } //----- (00559A20) -------------------------------------------------------- _DWORD *__thiscall sub_559A20(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 17, 0, 0); return result; } //----- (00559A40) -------------------------------------------------------- void __thiscall sub_559A40(void ***this, int a2, const char *a3) { sub_8F2EA0(this[a2 + 441], a3); } //----- (00559A60) -------------------------------------------------------- int __thiscall sub_559A60(int this, float a2, int a3) { int v3; // ebx int v4; // esi signed int v5; // edi double v6; // st7 int result; // eax float v8; // [esp+18h] [ebp+8h] v3 = this; *(_BYTE *)(this + 1820) = LOBYTE(a2); *(_DWORD *)(this + 1824) = a3; v4 = this + 1764; v5 = 13; do { if ( *(_BYTE *)(v3 + 1820) ) v6 = 0.30000001; else v6 = 1.0; v8 = v6; result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 276))(LODWORD(v8)); v4 += 4; --v5; } while ( v5 ); return result; } //----- (00559AC0) -------------------------------------------------------- int __thiscall sub_559AC0(_DWORD **this) { return (*(int (**)(void))(*this[454] + 256))(); } //----- (00559AE0) -------------------------------------------------------- LONG __thiscall sub_559AE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &MainMenuWin::`vftable'; this[58] = &MainMenuWin::`vftable'; `eh vector destructor iterator'(this + 427, 4u, 13, sub_410C00); `eh vector destructor iterator'(v1 + 89, 0x68u, 13, sub_55BD50); return sub_8F10F0(v1); } // 9CDD48: using guessed type void *MainMenuWin::`vftable'; // 9CDD64: using guessed type void *MainMenuWin::`vftable'; //----- (00559B90) -------------------------------------------------------- int __thiscall sub_559B90(int this) { int v1; // esi int v2; // eax int v3; // eax int v4; // eax int v5; // eax int result; // eax int v7; // edi int v8; // edi int v9; // ebx int v10; // edi int v11; // ebx int v12; // edi int v13; // eax int v14; // edi int v15; // ebx signed int v16; // edi int v17; // ebx int v18; // ST14_4 int v19; // eax int v20; // edi int v21; // ebx int v22; // ST14_4 int v23; // eax signed int v24; // [esp+Ch] [ebp-8h] int v25; // [esp+10h] [ebp-4h] signed int v26; // [esp+10h] [ebp-4h] v1 = this; v2 = *(_DWORD *)(this + 352); if ( v2 ) { v3 = v2 - 1; if ( v3 ) { if ( v3 == 1 ) *(_DWORD *)(this + 352) = 0; } else { *(_DWORD *)(this + 352) = 2; } } else { *(_DWORD *)(this + 352) = 1; } v4 = *(_DWORD *)(this + 352); if ( !v4 ) { v20 = this + 1764; v26 = 13; do { v21 = *(_DWORD *)(*(_DWORD *)v20 + 340); v22 = *(_DWORD *)(*(_DWORD *)v20 + 344); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v20 + 308))( *(_DWORD *)(*(_DWORD *)v20 + 340), *(_DWORD *)(*(_DWORD *)v20 + 344)); v23 = *(_DWORD *)v20; *(_DWORD *)(v23 + 348) = v21; *(_DWORD *)(v23 + 352) = v22; (*(void (__stdcall **)(signed int))(**(_DWORD **)v20 + 256))(1); v20 += 4; --v26; } while ( v26 ); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 1812) + 256))(*(_DWORD *)(v1 + 1812), 0); } v5 = v4 - 1; if ( !v5 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 1764) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1768) + 256))(0); v14 = *(_DWORD *)(v1 + 1772); v15 = (*(int (**)(void))(**(_DWORD **)(v1 + 1768) + 192))(); v25 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 192))(v14) - v15; v16 = 2; do { if ( v16 == 4 ) { v25 -= (*(int (**)(void))(**(_DWORD **)(v1 + 1780) + 144))(); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 1780) + 256))(0); } else { v17 = (*(int (**)(void))(**(_DWORD **)(v1 + 4 * v16 + 1764) + 192))() - v25; v18 = (*(int (**)(void))(**(_DWORD **)(v1 + 4 * v16 + 1764) + 200))(); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v1 + 4 * v16 + 1764) + 308))(v17, v18); v19 = *(_DWORD *)(v1 + 4 * v16 + 1764); *(_DWORD *)(v19 + 348) = v17; *(_DWORD *)(v19 + 352) = v18; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 4 * v16 + 1764) + 256))(1); } ++v16; } while ( v16 < 13 ); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 1812) + 256))(*(_DWORD *)(v1 + 1812), 0); } result = v5 - 1; if ( !result ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 1764) + 256))(1); v7 = v1 + 1768; v24 = 12; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); v7 += 4; --v24; } while ( v24 ); v8 = *(_DWORD *)(v1 + 1812); v9 = (*(int (**)(void))(**(_DWORD **)(v1 + 1768) + 192))(); v10 = *(_DWORD *)(v1 + 1828) + (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 192))(v8) - v9; v11 = (*(int (**)(void))(**(_DWORD **)(v1 + 1812) + 192))() - v10; v12 = (*(int (**)(void))(**(_DWORD **)(v1 + 1812) + 200))(); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v1 + 1812) + 308))(v11, v12); v13 = *(_DWORD *)(v1 + 1812); *(_DWORD *)(v13 + 348) = v11; *(_DWORD *)(v13 + 352) = v12; result = (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v1 + 1812) + 256))(*(_DWORD *)(v1 + 1812), 1); } return result; } //----- (00559E10) -------------------------------------------------------- int __thiscall sub_559E10(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; result = sub_8F1140(v2, a2); byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; //----- (00559E80) -------------------------------------------------------- _DWORD *__thiscall sub_559E80(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *result; // eax int v4; // esi int v5; // edx v2 = this; result = (_DWORD *)this[a2 + 427]; if ( result ) { v4 = (int)&this[26 * a2]; sub_8D4A70((_DWORD *)(v4 + 408), result); sub_8D4750((_DWORD *)(v4 + 408), flt_ACCFCC); *(float *)(v4 + 396) = *(float *)(v4 + 420); sub_8D06E0((float *)(v4 + 384), flt_ACCFCC, 1); v5 = *(_DWORD *)(v4 + 456); *(_BYTE *)(v4 + 444) = 1; sub_86C420(v5, flt_ACCFCC); (*(void (__stdcall **)(_DWORD, signed int))(*(_DWORD *)v2[a2 + 441] + 116))(v2[a2 + 427], 1); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v2[a2 + 441] + 116))(*(_DWORD *)(v4 + 456), 0); sub_85C4D0((_DWORD *)v2[a2 + 441]); result = (_DWORD *)sub_85C6F0((_DWORD *)v2[a2 + 441]); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00559F60) -------------------------------------------------------- void __usercall sub_559F60(int a1@, double a2@) { int v2; // esi signed int v3; // eax double v4; // st6 float v5; // ST08_4 double v6; // st7 float v7; // ST08_4 float v8; // ST00_4 float v9; // [esp+8h] [ebp-4h] v2 = a1; if ( *(_BYTE *)(a1 + 1820) ) { v3 = *(_DWORD *)(a1 + 1824); if ( v3 >= 0 && v3 < 13 ) { (*(void (**)(void))(**(_DWORD **)(a1 + 4 * v3 + 1764) + 280))(); v9 = a2; if ( *(_BYTE *)(v2 + 1821) ) { v4 = v9; if ( v9 >= 0.5 ) { v5 = v4 - flt_ACCFD0; v4 = v5; } if ( v4 <= 0.5 ) { *(_BYTE *)(v2 + 1821) = 0; v6 = (float)0.5; LABEL_14: v8 = v6; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 1824) + 1764) + 276))(LODWORD(v8)); return; } } else { v4 = v9; if ( v9 <= 1.0 ) { v7 = v4 + flt_ACCFD0; v4 = v7; } if ( v4 >= 1.0 ) { *(_BYTE *)(v2 + 1821) = 1; v6 = (float)1.0; goto LABEL_14; } } v6 = v4; goto LABEL_14; } *(_BYTE *)(a1 + 1820) = 0; } } // ACCFD0: using guessed type float flt_ACCFD0; //----- (0055A050) -------------------------------------------------------- char __thiscall sub_55A050(void *this, float a2) { int v2; // esi volatile LONG *v3; // edi int v5; // ebx char *v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // ebx char *v9; // eax int v10; // ebx volatile LONG **v11; // edi int v12; // eax const char *v13; // eax int v14; // eax int v15; // eax int v16; // eax int v17; // edx int v18; // edi int v19; // eax const char *v20; // eax int v21; // ecx int v22; // eax int v23; // ecx int v24; // eax int v25; // ecx int v26; // edx int v27; // edi int v28; // eax int v29; // ST34_4 int v30; // ST30_4 const char *v31; // eax int v32; // ecx int v33; // eax int v34; // ecx int v35; // eax int v36; // eax int v37; // edx int v38; // edi int v39; // eax const char *v40; // eax int v41; // ecx int v42; // ecx int v43; // eax int v44; // ecx int v45; // edx int v46; // edi int v47; // eax int v48; // ST34_4 int v49; // ST30_4 const char *v50; // eax int v51; // ecx int v52; // eax int v53; // ecx int v54; // eax int v55; // eax int v56; // edx int v57; // edi int v58; // eax const char *v59; // eax int v60; // ecx int v61; // eax int v62; // ecx int v63; // eax int v64; // ecx int v65; // edx int v66; // edi int v67; // eax int v68; // ST34_4 int v69; // ST30_4 const char *v70; // eax int v71; // ecx int v72; // eax int v73; // ecx int v74; // eax int v75; // ecx int v76; // edx int v77; // edi volatile LONG **v78; // eax volatile LONG *v79; // eax int v80; // eax const char *v81; // eax int v82; // ecx int v83; // eax int v84; // ecx int v85; // eax int v86; // eax int v87; // edx int v88; // edi int v89; // eax int v90; // ST34_4 int v91; // ST30_4 const char *v92; // eax int v93; // ecx int v94; // eax int v95; // ecx int v96; // eax int v97; // edx int v98; // edi int v99; // eax const char *v100; // eax int v101; // ecx int v102; // eax int v103; // ecx int v104; // eax int v105; // ecx int v106; // edx int v107; // edi int v108; // eax int v109; // ST34_4 int v110; // ST30_4 const char *v111; // eax int v112; // ecx int v113; // eax int v114; // ecx int v115; // eax int v116; // eax int v117; // edx int v118; // edi int v119; // edi volatile LONG *v120; // eax int v121; // ecx int v122; // eax int v123; // ecx int v124; // eax int v125; // eax int v126; // edx int v127; // ecx volatile LONG *v128; // eax int v129; // ecx int v130; // eax int v131; // ebx int v132; // eax int v133; // eax int v134; // edx const char *v135; // eax const char *v136; // eax int v137; // edx void (__thiscall *v138)(int, int, int); // eax char *v139; // eax char *v140; // eax void **v141; // eax void **v142; // edi int v143; // eax int v144; // eax int v145; // eax float v146; // ST5C_4 int v147; // ecx float v148; // ST48_4 int v149; // eax int v150; // eax int v151; // eax float v152; // ST5C_4 int v153; // ecx float v154; // ST48_4 int v155; // eax int v156; // eax int v157; // eax float v158; // ST5C_4 int v159; // ST64_4 float v160; // ST48_4 int v161; // eax int v162; // eax int v163; // eax float v164; // ST5C_4 int v165; // ecx float v166; // ST48_4 int v167; // eax int v168; // eax int v169; // eax float v170; // ST5C_4 int v171; // ecx float v172; // ST48_4 int v173; // eax int v174; // eax int v175; // eax float v176; // ST5C_4 int v177; // ecx float v178; // ST48_4 int v179; // eax int v180; // eax int v181; // eax float v182; // ST5C_4 int v183; // ecx float v184; // ST48_4 int v185; // eax void *v186; // eax int v187; // eax int v188; // eax float v189; // ST5C_4 int v190; // ecx float v191; // ST48_4 int v192; // eax int v193; // eax int v194; // eax float v195; // ST5C_4 int v196; // ecx float v197; // ST48_4 int v198; // eax int v199; // eax int v200; // eax float v201; // ST5C_4 int v202; // ecx float v203; // ST48_4 int v204; // eax void *v205; // eax int v206; // eax int v207; // eax int v208; // ST64_4 int (__thiscall *v209)(void **, const char *); // eax _DWORD *v210; // eax _DWORD *v211; // eax float v212; // ebx _DWORD *v213; // esi _DWORD *v214; // eax _DWORD *v215; // eax int v216; // eax volatile LONG *v217; // [esp+64h] [ebp-54h] int v218; // [esp+68h] [ebp-50h] int v219; // [esp+6Ch] [ebp-4Ch] volatile LONG *v220; // [esp+70h] [ebp-48h] int v221; // [esp+74h] [ebp-44h] volatile LONG *v222; // [esp+78h] [ebp-40h] int v223; // [esp+7Ch] [ebp-3Ch] char v224; // [esp+80h] [ebp-38h] char v225; // [esp+84h] [ebp-34h] char v226; // [esp+88h] [ebp-30h] char v227; // [esp+8Ch] [ebp-2Ch] int v228; // [esp+90h] [ebp-28h] int v229; // [esp+94h] [ebp-24h] int v230; // [esp+98h] [ebp-20h] int v231; // [esp+9Ch] [ebp-1Ch] int v232; // [esp+A0h] [ebp-18h] int v233; // [esp+A4h] [ebp-14h] int v234; // [esp+A8h] [ebp-10h] int v235; // [esp+B4h] [ebp-4h] v2 = (int)this; v234 = 0; v235 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v222 = v3; if ( !v3 ) { v235 = -1; if ( v234 && !InterlockedDecrement((volatile LONG *)(v234 + 4)) ) { if ( v234 ) (**(void (__thiscall ***)(int, signed int))v234)(v234, 1); } return 0; } v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\Menu.nif"); sub_8F66B0(v6, (int)&v234, v5); if ( !v234 ) return 0; v217 = (volatile LONG *)sub_43D0D0(0x12u); if ( v217 ) { v223 = 0; v8 = dword_BA6BA0; LOBYTE(v235) = 1; if ( !byte_ACAD5C ) sub_420410(); v9 = (char *)sub_401410(byte_ACAB50, "Game\\Menu01.nif"); sub_8F66B0(v9, (int)&v223, v8); if ( !v223 ) goto LABEL_28; v220 = (volatile LONG *)sub_43D0D0(0x1Fu); if ( !v220 || !sub_8F15E0((volatile LONG **)v2, 0, 0, 0, SLODWORD(a2), (int)"MainMenuWin", 0) ) goto LABEL_28; v10 = 0; v221 = 0; if ( sub_8F71E0(v234, (int)"SystemNor", &v228, &v231, &v227, &v233) ) { v10 = v233; v221 = v231; } sub_8F71E0(v234, (int)"SystemOver", &v229, &v230, &v225, &v226); v11 = sub_8FB140(v234, (int)"SystemNor", (int)&v232, (int)&v224, v3); sub_8FB650(v11, v234, (int)"SystemNor"); sub_8FB650(v11, v234, (int)"SystemOver"); v12 = sub_463490(v2); *(_DWORD *)(v2 + 452) = v12; *(_DWORD *)(v2 + 1764) = sub_910CB0(0, 0, (int)v11, v12, 0, 0, 0); v13 = sub_40C190(-201851650); sub_8F2EA0(*(void ***)(v2 + 1764), v13); *(_DWORD *)(*(_DWORD *)(v2 + 1764) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1764) + 364) = 1; v14 = *(_DWORD *)(v2 + 1764); *(_DWORD *)(v14 + 340) = 0; *(_DWORD *)(v14 + 344) = 0; v15 = *(_DWORD *)(v2 + 1764); *(_DWORD *)(v15 + 348) = 0; *(_DWORD *)(v15 + 352) = 0; v16 = v230 - v231; v17 = *(_DWORD *)(v2 + 1764); *(_DWORD *)(v17 + 356) = v229 - v228; *(_DWORD *)(v17 + 360) = v16; v18 = v232; sub_8F71E0(v234, (int)"MiniHouseNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"MiniHouseOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"MiniHouseNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"MiniHouseNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"MiniHouseOver"); v19 = sub_463490(v2); *(_DWORD *)(v2 + 556) = v19; *(_DWORD *)(v2 + 1768) = sub_910CB0(v18, v10 - v233, SLODWORD(a2), v19, 1, 0, 0); v20 = sub_40C190(-449231794); sub_8F2EA0(*(void ***)(v2 + 1768), v20); *(_DWORD *)(*(_DWORD *)(v2 + 1768) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1768) + 364) = 1; v21 = *(_DWORD *)(v2 + 1768); v22 = v10 - v233; *(_DWORD *)(v21 + 340) = v18; *(_DWORD *)(v21 + 344) = v22; v23 = *(_DWORD *)(v2 + 1768); v24 = v10 - v233; *(_DWORD *)(v23 + 348) = v18; *(_DWORD *)(v23 + 352) = v24; v25 = v229 - v228; v26 = *(_DWORD *)(v2 + 1768); *(_DWORD *)(v26 + 360) = v230 - v231; *(_DWORD *)(v26 + 356) = v25; v27 = v232 + v18; sub_8F71E0(v234, (int)"ActionNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"ActionOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"ActionNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ActionNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ActionOver"); v28 = sub_463490(v2); v29 = LODWORD(a2); v30 = v10 - v233; *(_DWORD *)(v2 + 660) = v28; *(_DWORD *)(v2 + 1772) = sub_910CB0(v27, v30, v29, v28, 2, 0, 0); v31 = sub_40C190(-554700289); sub_8F2EA0(*(void ***)(v2 + 1772), v31); *(_DWORD *)(*(_DWORD *)(v2 + 1772) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1772) + 364) = 1; v32 = *(_DWORD *)(v2 + 1772); v33 = v10 - v233; *(_DWORD *)(v32 + 340) = v27; *(_DWORD *)(v32 + 344) = v33; v34 = *(_DWORD *)(v2 + 1772); v35 = v10 - v233; *(_DWORD *)(v34 + 348) = v27; *(_DWORD *)(v34 + 352) = v35; v36 = v230 - v231; v37 = *(_DWORD *)(v2 + 1772); *(_DWORD *)(v37 + 356) = v229 - v228; *(_DWORD *)(v37 + 360) = v36; v38 = v232 + v27; sub_8F71E0(v234, (int)"ComuNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"ComuOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"ComuNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ComuNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ComuOver"); v39 = sub_463490(v2); *(_DWORD *)(v2 + 764) = v39; *(_DWORD *)(v2 + 1776) = sub_910CB0(v38, v10 - v233, SLODWORD(a2), v39, 3, 0, 0); v40 = sub_40C190(-363837119); sub_8F2EA0(*(void ***)(v2 + 1776), v40); *(_DWORD *)(*(_DWORD *)(v2 + 1776) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1776) + 364) = 1; v41 = *(_DWORD *)(v2 + 1776); *(_DWORD *)(v41 + 344) = v10 - v233; *(_DWORD *)(v41 + 340) = v38; v42 = *(_DWORD *)(v2 + 1776); v43 = v10 - v233; *(_DWORD *)(v42 + 348) = v38; *(_DWORD *)(v42 + 352) = v43; v44 = v229 - v228; v45 = *(_DWORD *)(v2 + 1776); *(_DWORD *)(v45 + 360) = v230 - v231; *(_DWORD *)(v45 + 356) = v44; v46 = v232 + v38; sub_8F71E0(v234, (int)"QuestNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"QuestOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"QuestNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"QuestNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"QuestOver"); v47 = sub_463490(v2); v48 = LODWORD(a2); v49 = v10 - v233; *(_DWORD *)(v2 + 868) = v47; *(_DWORD *)(v2 + 1780) = sub_910CB0(v46, v49, v48, v47, 4, 0, 0); v50 = sub_40C190(-1576731664); sub_8F2EA0(*(void ***)(v2 + 1780), v50); *(_DWORD *)(*(_DWORD *)(v2 + 1780) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1780) + 364) = 1; v51 = *(_DWORD *)(v2 + 1780); v52 = v10 - v233; *(_DWORD *)(v51 + 340) = v46; *(_DWORD *)(v51 + 344) = v52; v53 = *(_DWORD *)(v2 + 1780); v54 = v10 - v233; *(_DWORD *)(v53 + 348) = v46; *(_DWORD *)(v53 + 352) = v54; v55 = v230 - v231; v56 = *(_DWORD *)(v2 + 1780); *(_DWORD *)(v56 + 356) = v229 - v228; *(_DWORD *)(v56 + 360) = v55; v57 = v232 + v46; sub_8F71E0(v234, (int)"SkillNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"SkillOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"SkillNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"SkillNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"SkillOver"); v58 = sub_463490(v2); *(_DWORD *)(v2 + 972) = v58; *(_DWORD *)(v2 + 1784) = sub_910CB0(v57, v10 - v233, SLODWORD(a2), v58, 5, 0, 0); v59 = sub_40C190(-1728121612); sub_8F2EA0(*(void ***)(v2 + 1784), v59); *(_DWORD *)(*(_DWORD *)(v2 + 1784) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1784) + 364) = 1; v60 = *(_DWORD *)(v2 + 1784); v61 = v10 - v233; *(_DWORD *)(v60 + 340) = v57; *(_DWORD *)(v60 + 344) = v61; v62 = *(_DWORD *)(v2 + 1784); v63 = v10 - v233; *(_DWORD *)(v62 + 348) = v57; *(_DWORD *)(v62 + 352) = v63; v64 = v229 - v228; v65 = *(_DWORD *)(v2 + 1784); *(_DWORD *)(v65 + 360) = v230 - v231; *(_DWORD *)(v65 + 356) = v64; v66 = v232 + v57; sub_8F71E0(v234, (int)"InventoryNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"InventoryOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"InventoryNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"InventoryNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"InventoryOver"); v67 = sub_463490(v2); v68 = LODWORD(a2); v69 = v10 - v233; *(_DWORD *)(v2 + 1076) = v67; *(_DWORD *)(v2 + 1788) = sub_910CB0(v66, v69, v68, v67, 6, 0, 0); v70 = sub_40C190(-280019120); sub_8F2EA0(*(void ***)(v2 + 1788), v70); *(_DWORD *)(*(_DWORD *)(v2 + 1788) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1788) + 364) = 1; v71 = *(_DWORD *)(v2 + 1788); v72 = v10 - v233; *(float *)(v71 + 340) = *(float *)&v66; *(_DWORD *)(v71 + 344) = v72; v73 = *(_DWORD *)(v2 + 1788); v74 = v10 - v233; *(float *)(v73 + 348) = *(float *)&v66; *(_DWORD *)(v73 + 352) = v74; v75 = v229 - v228; v76 = *(_DWORD *)(v2 + 1788); *(_DWORD *)(v76 + 360) = v230 - v231; *(_DWORD *)(v76 + 356) = v75; a2 = *(float *)&v66; v77 = v232 + v66; v78 = sub_8FB140(v234, (int)"NewItem", (int)&v232, (int)&v224, 0); v79 = sub_8F3EB0(LODWORD(a2) - v232, v10 - v233, (int)v78, v2, 0, 0); *(_DWORD *)(v2 + 1816) = v79; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v79 + 256))(v79, 0); sub_8F71E0(v234, (int)"ItemMallNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"ItemMallOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"ItemMallNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ItemMallNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ItemMallOver"); v80 = sub_463490(v2); *(_DWORD *)(v2 + 1180) = v80; *(_DWORD *)(v2 + 1792) = sub_910CB0(v77, v10 - v233, SLODWORD(a2), v80, 7, 0, 0); v81 = sub_40C190(-487243460); sub_8F2EA0(*(void ***)(v2 + 1792), v81); *(_DWORD *)(*(_DWORD *)(v2 + 1792) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1792) + 364) = 1; v82 = *(_DWORD *)(v2 + 1792); v83 = v10 - v233; *(_DWORD *)(v82 + 340) = v77; *(_DWORD *)(v82 + 344) = v83; v84 = *(_DWORD *)(v2 + 1792); v85 = v10 - v233; *(_DWORD *)(v84 + 348) = v77; *(_DWORD *)(v84 + 352) = v85; v86 = v230 - v231; v87 = *(_DWORD *)(v2 + 1792); *(_DWORD *)(v87 + 356) = v229 - v228; *(_DWORD *)(v87 + 360) = v86; v88 = v232 + v77; sub_8F71E0(v234, (int)"ForumNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"ForumOver", &v229, &v230, &v225, &v226); v218 = 0; v219 = 0; a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"ForumNor", (int)&v218, (int)&v219, v220)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ForumNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"ForumOver"); v89 = sub_463490(v2); v90 = LODWORD(a2); v91 = v10 - v233; *(_DWORD *)(v2 + 1284) = v89; *(_DWORD *)(v2 + 1796) = sub_910CB0(v88, v91, v90, v89, 8, 0, 0); v92 = sub_4090F0(2040632310); sub_8F2EA0(*(void ***)(v2 + 1796), v92); *(_DWORD *)(*(_DWORD *)(v2 + 1796) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1796) + 364) = 1; v93 = *(_DWORD *)(v2 + 1796); v94 = v10 - v233; *(_DWORD *)(v93 + 340) = v88; *(_DWORD *)(v93 + 344) = v94; v95 = *(_DWORD *)(v2 + 1796); *(_DWORD *)(v95 + 352) = v10 - v233; *(_DWORD *)(v95 + 348) = v88; v96 = v230 - v231; v97 = *(_DWORD *)(v2 + 1796); *(_DWORD *)(v97 + 356) = v229 - v228; *(_DWORD *)(v97 + 360) = v96; v98 = v232 + v88; sub_8F71E0(v234, (int)"StatusNor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"StatusOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"StatusNor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"StatusNor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"StatusOver"); v99 = sub_463490(v2); *(_DWORD *)(v2 + 1492) = v99; *(_DWORD *)(v2 + 1804) = sub_910CB0(v98, v10 - v233, SLODWORD(a2), v99, 10, 0, 0); v100 = sub_40C190(-667599040); sub_8F2EA0(*(void ***)(v2 + 1804), v100); *(_DWORD *)(*(_DWORD *)(v2 + 1804) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1804) + 364) = 1; v101 = *(_DWORD *)(v2 + 1804); v102 = v10 - v233; *(_DWORD *)(v101 + 340) = v98; *(_DWORD *)(v101 + 344) = v102; v103 = *(_DWORD *)(v2 + 1804); v104 = v10 - v233; *(_DWORD *)(v103 + 348) = v98; *(_DWORD *)(v103 + 352) = v104; v105 = v229 - v228; v106 = *(_DWORD *)(v2 + 1804); *(_DWORD *)(v106 + 360) = v230 - v231; *(_DWORD *)(v106 + 356) = v105; v107 = v232 + v98; sub_8F71E0(v223, (int)"QuestionNor", &v228, &v231, &v227, &v233); sub_8F71E0(v223, (int)"QuestionOver", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v223, (int)"QuestionNor", (int)&v232, (int)&v224, v217)); sub_8FB650((_DWORD *)LODWORD(a2), v223, (int)"QuestionNor"); sub_8FB650((_DWORD *)LODWORD(a2), v223, (int)"QuestionOver"); v108 = sub_463490(v2); v109 = LODWORD(a2); v110 = v10 - v233; *(_DWORD *)(v2 + 1388) = v108; *(_DWORD *)(v2 + 1800) = sub_910CB0(v107, v110, v109, v108, 9, 0, 0); v111 = sub_40C190(-656648643); sub_8F2EA0(*(void ***)(v2 + 1800), v111); *(_DWORD *)(*(_DWORD *)(v2 + 1800) + 272) = dword_AD01E8; *(_BYTE *)(*(_DWORD *)(v2 + 1800) + 364) = 1; v112 = *(_DWORD *)(v2 + 1800); v113 = v10 - v233; *(_DWORD *)(v112 + 340) = v107; *(_DWORD *)(v112 + 344) = v113; v114 = *(_DWORD *)(v2 + 1800); v115 = v10 - v233; *(_DWORD *)(v114 + 348) = v107; *(_DWORD *)(v114 + 352) = v115; v116 = v230 - v231; v117 = *(_DWORD *)(v2 + 1800); *(_DWORD *)(v117 + 356) = v229 - v228; *(_DWORD *)(v117 + 360) = v116; v118 = v232 + v107; sub_8F71E0(v234, (int)"PanelBtn01Nor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"PanelBtn01Over", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"PanelBtn01Nor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"PanelBtn01Nor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"PanelBtn01Over"); v119 = v118 - v232; v120 = sub_910CB0(v119, v10 - v233, SLODWORD(a2), v2, 11, 0, 0); *(_DWORD *)(v2 + 1808) = v120; *((_BYTE *)v120 + 364) = 1; v121 = *(_DWORD *)(v2 + 1808); v122 = v10 - v233; *(_DWORD *)(v121 + 340) = v119; *(_DWORD *)(v121 + 344) = v122; v123 = *(_DWORD *)(v2 + 1808); v124 = v10 - v233; *(_DWORD *)(v123 + 348) = v119; *(_DWORD *)(v123 + 352) = v124; v125 = v230 - v231; v126 = *(_DWORD *)(v2 + 1808); *(_DWORD *)(v126 + 356) = v229 - v228; *(_DWORD *)(v126 + 360) = v125; sub_8F71E0(v234, (int)"PanelBtn02Nor", &v228, &v231, &v227, &v233); sub_8F71E0(v234, (int)"PanelBtn02Over", &v229, &v230, &v225, &v226); a2 = COERCE_FLOAT(sub_8FB140(v234, (int)"PanelBtn02Nor", (int)&v232, (int)&v224, v222)); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"PanelBtn02Nor"); sub_8FB650((_DWORD *)LODWORD(a2), v234, (int)"PanelBtn02Over"); v127 = LODWORD(a2); *(_DWORD *)(v2 + 1828) = v232; v128 = sub_910CB0(v119, v10 - v233, v127, v2, 12, 0, 0); *(_DWORD *)(v2 + 1812) = v128; *((_BYTE *)v128 + 364) = 1; v129 = *(_DWORD *)(v2 + 1812); v130 = v10 - v233; *(_DWORD *)(v129 + 340) = v119; *(_DWORD *)(v129 + 344) = v130; v131 = v10 - v233; v132 = *(_DWORD *)(v2 + 1812); *(_DWORD *)(v132 + 348) = v119; *(_DWORD *)(v132 + 352) = v131; v133 = v230 - v231; v134 = *(_DWORD *)(v2 + 1812); *(_DWORD *)(v134 + 356) = v229 - v228; *(_DWORD *)(v134 + 360) = v133; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1812) + 256))(0); *(_DWORD *)(*(_DWORD *)(v2 + 1808) + 272) = dword_AD01E8; v135 = sub_40A910(-170150844); sub_8F2EA0(*(void ***)(v2 + 1808), v135); *(_DWORD *)(*(_DWORD *)(v2 + 1812) + 272) = dword_AD01E8; v136 = sub_40A910(-170150844); sub_8F2EA0(*(void ***)(v2 + 1812), v136); v137 = v221; v138 = *(void (__thiscall **)(int, int, int))(*(_DWORD *)v2 + 308); *(_DWORD *)(v2 + 352) = 0; v138(v2, xRight - 44, dword_AC2F78 + v137 - 3); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v139 = sub_4083B0(); v140 = (char *)sub_401410(v139, "Game\\Menu_Particle.nif"); v141 = sub_8D03E0(v140, 0); v142 = v141; v222 = (volatile LONG *)v141; if ( v141 ) InterlockedIncrement((volatile LONG *)v141 + 1); LOBYTE(v235) = 2; if ( v142 ) { v143 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_System"); v144 = sub_402BA0((int)dword_BA455C, v143); sub_56FF80((_DWORD *)(v2 + 1708), v144); v145 = *(_DWORD *)(v2 + 1708); v146 = *(float *)(v145 + 88); v147 = *(_DWORD *)(v145 + 96); a2 = *(float *)(v145 + 92) + 60.0; v148 = a2; a2 = v146 + 50.0; sub_45ABE0(v145, a2, v148); v149 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Comu"); v150 = sub_402BA0((int)dword_BA455C, v149); sub_56FF80((_DWORD *)(v2 + 1720), v150); v151 = *(_DWORD *)(v2 + 1720); v152 = *(float *)(v151 + 88); v153 = *(_DWORD *)(v151 + 96); a2 = *(float *)(v151 + 92) + 60.0; v154 = a2; a2 = v152 + 50.0; sub_45ABE0(v151, a2, v154); v155 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_MiniHouse"); v156 = sub_402BA0((int)dword_BA455C, v155); sub_56FF80((_DWORD *)(v2 + 1712), v156); v157 = *(_DWORD *)(v2 + 1712); v158 = *(float *)(v157 + 88); v159 = *(_DWORD *)(v157 + 96); a2 = *(float *)(v157 + 92) + 60.0; v160 = a2; a2 = v158 + 50.0; sub_45ABE0(v157, a2, v160); v161 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Quest"); v162 = sub_402BA0((int)dword_BA455C, v161); sub_56FF80((_DWORD *)(v2 + 1724), v162); v163 = *(_DWORD *)(v2 + 1724); v164 = *(float *)(v163 + 88); v165 = *(_DWORD *)(v163 + 96); a2 = *(float *)(v163 + 92) + 60.0; v166 = a2; a2 = v164 + 50.0; sub_45ABE0(v163, a2, v166); v167 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Action"); v168 = sub_402BA0((int)dword_BA455C, v167); sub_56FF80((_DWORD *)(v2 + 1716), v168); v169 = *(_DWORD *)(v2 + 1716); v170 = *(float *)(v169 + 88); v171 = *(_DWORD *)(v169 + 96); a2 = *(float *)(v169 + 92) + 60.0; v172 = a2; a2 = v170 + 50.0; sub_45ABE0(v169, a2, v172); v173 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Skill"); v174 = sub_402BA0((int)dword_BA455C, v173); sub_56FF80((_DWORD *)(v2 + 1728), v174); v175 = *(_DWORD *)(v2 + 1728); v176 = *(float *)(v175 + 88); v177 = *(_DWORD *)(v175 + 96); a2 = *(float *)(v175 + 92) + 60.0; v178 = a2; a2 = v176 + 50.0; sub_45ABE0(v175, a2, v178); v179 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Inventory"); v180 = sub_402BA0((int)dword_BA455C, v179); sub_56FF80((_DWORD *)(v2 + 1732), v180); v181 = *(_DWORD *)(v2 + 1732); v182 = *(float *)(v181 + 88); v183 = *(_DWORD *)(v181 + 96); a2 = *(float *)(v181 + 92) + 60.0; v184 = a2; a2 = v182 + 50.0; sub_45ABE0(v181, a2, v184); v185 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Status"); v186 = (void *)sub_402BA0((int)dword_BA455C, v185); v187 = sub_85BD60(v186); sub_56FF80((_DWORD *)(v2 + 1736), v187); v188 = *(_DWORD *)(v2 + 1736); v189 = *(float *)(v188 + 88); v190 = *(_DWORD *)(v188 + 96); a2 = *(float *)(v188 + 92) + 60.0; v191 = a2; a2 = v189 + 50.0; sub_45ABE0(v188, a2, v191); v192 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Forum"); v193 = sub_402BA0((int)dword_BA455C, v192); sub_56FF80((_DWORD *)(v2 + 1740), v193); v194 = *(_DWORD *)(v2 + 1740); v195 = *(float *)(v194 + 88); v196 = *(_DWORD *)(v194 + 96); a2 = *(float *)(v194 + 92) + 60.0; v197 = a2; a2 = v195 + 50.0; sub_45ABE0(v194, a2, v197); v198 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Status"); v199 = sub_402BA0((int)dword_BA455C, v198); sub_56FF80((_DWORD *)(v2 + 1748), v199); v200 = *(_DWORD *)(v2 + 1748); v201 = *(float *)(v200 + 88); v202 = *(_DWORD *)(v200 + 96); a2 = *(float *)(v200 + 92) + 60.0; v203 = a2; a2 = v201 + 50.0; sub_45ABE0(v200, a2, v203); v204 = (*((int (__thiscall **)(void **, const char *))*v142 + 18))(v142, "Dummy_Status"); v205 = (void *)sub_402BA0((int)dword_BA455C, v204); v206 = sub_85BD60(v205); sub_56FF80((_DWORD *)(v2 + 1744), v206); v207 = *(_DWORD *)(v2 + 1744); v208 = *(_DWORD *)(v207 + 96); sub_45ABE0(v207, *(float *)(v207 + 88), *(float *)(v207 + 92)); a2 = 0.0; v209 = (int (__thiscall *)(void **, const char *))*((_DWORD *)*v142 + 18); LOBYTE(v235) = 3; v210 = (_DWORD *)v209(v142, "dummy_noise"); v211 = sub_85B610(v210, (int)dword_BA3BB8); sub_56FF80(&a2, (int)v211); v212 = a2; if ( a2 == 0.0 ) { LOBYTE(v235) = 2; sub_410C00(&a2); LOBYTE(v235) = 1; sub_410C00(&v222); LABEL_28: LOBYTE(v235) = 0; sub_410C00(&v223); v235 = -1; sub_410C00(&v234); return 0; } v213 = (_DWORD *)(v2 + 456); v221 = 13; do { if ( *(v213 - 1) ) { *((_BYTE *)v213 - 12) = 0; v214 = operator new(0xE8u); LOBYTE(v235) = 4; if ( v214 ) v215 = sub_85A1C0(v214, 0); else v215 = 0; LOBYTE(v235) = 3; sub_56FF80(v213, (int)v215); v216 = sub_85BD60((void *)LODWORD(v212)); sub_56FF80(v213 - 2, v216); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*(v213 - 2) + 72))(*v213); *(_WORD *)(*(v213 - 2) + 8) = *(_WORD *)(*(v213 - 2) + 8) & 0xFFF7 | 1; } v213 += 26; --v221; } while ( v221 ); LOBYTE(v235) = 2; sub_410C00(&a2); } LOBYTE(v235) = 1; sub_410C00(&v222); LOBYTE(v235) = 0; sub_410C00(&v223); v235 = -1; sub_410C00(&v234); return 1; } v7 = (void (__thiscall ***)(_DWORD, signed int))v234; v235 = -1; if ( v234 && !InterlockedDecrement((volatile LONG *)(v234 + 4)) && v7 ) (**v7)(v7, 1); return 0; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0055B810) -------------------------------------------------------- _DWORD *__thiscall sub_55B810(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // esi _DWORD *result; // eax v3 = this; switch ( a2 ) { case 0u: sub_559A00(this); result = sub_559E80(v3, a2); break; case 1u: sub_5599A0(this); result = sub_559E80(v3, a2); break; case 2u: sub_559930(this); result = sub_559E80(v3, a2); break; case 3u: sub_559970(this); result = sub_559E80(v3, a2); break; case 4u: sub_559950(this); result = sub_559E80(v3, a2); break; case 5u: sub_559910(this); result = sub_559E80(v3, a2); break; case 6u: sub_5598F0(this); result = sub_559E80(v3, a2); break; case 7u: sub_5599E0(this); result = sub_559E80(v3, a2); break; case 8u: sub_5599C0(this); result = sub_559E80(v3, a2); break; case 9u: sub_559A20(this); result = sub_559E80(v3, a2); break; case 0xAu: sub_5598D0(this); result = sub_559E80(v3, a2); break; case 0xBu: case 0xCu: result = (_DWORD *)sub_559B90((int)this); break; default: if ( a2 <= 0xA ) result = sub_559E80(this, a2); break; } return result; } //----- (0055B950) -------------------------------------------------------- void __userpurge sub_55B950(int a1@, double a2@, int a3) { int v3; // edi int v4; // esi int v5; // edi int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // edi int v8; // eax int v9; // ST18_4 int v10; // ST1C_4 bool v11; // zf int v12; // [esp+1Ch] [ebp-Ch] int v13; // [esp+20h] [ebp-8h] int v14; // [esp+24h] [ebp-4h] v3 = a1; sub_559F60(a1, a2); v4 = v3 + 444; v5 = v3 + 1764; v14 = v5; v13 = 13; do { if ( *(_BYTE *)v4 ) { sub_8D0730(v4 - 60, flt_ACCFCC); if ( v6 == 1 && *(_DWORD *)(v5 - 56) && *(_DWORD *)v5 ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)v5 + 120))(&v12, *(_DWORD *)(v5 - 56)); if ( v12 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } *(_BYTE *)v4 = 0; } v8 = *(_DWORD *)(v4 + 12); v9 = *(_DWORD *)(v8 + 92); v10 = *(_DWORD *)(v8 + 96); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v4 + 8) + 308))( *(_DWORD *)(v4 + 8), (signed int)*(float *)(v8 + 88)); v5 = v14; } v5 += 4; v4 += 104; v11 = v13-- == 1; v14 = v5; } while ( !v11 ); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0055BA30) -------------------------------------------------------- _DWORD *__thiscall sub_55BA30(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ebx int v4; // ebx int v5; // ebx signed int v7; // [esp+14h] [ebp-14h] int *v8; // [esp+18h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MainMenuWin::`vftable'; v1[58] = &MainMenuWin::`vftable'; `eh vector constructor iterator'(v1 + 89, 0x68u, 13, sub_55BE70, sub_55BD50); `eh vector constructor iterator'( v1 + 427, 4u, 13, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v8 = v1 + 427; v1[86] = 20; v1[88] = 0; v1[457] = 0; v1[440] = -1; v2 = v1 + 114; v7 = 13; do { *(v2 - 1) = 0; *((_BYTE *)v2 - 12) = 0; v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } v4 = *(v2 - 2); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(v2 - 2) = 0; } v5 = *v8; if ( *v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v8 = 0; } ++v8; v2 += 26; --v7; } while ( v7 ); *((_WORD *)v1 + 910) = 0; v1[454] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CDD48: using guessed type void *MainMenuWin::`vftable'; // 9CDD64: using guessed type void *MainMenuWin::`vftable'; //----- (0055BC20) -------------------------------------------------------- volatile LONG *__cdecl sub_55BC20(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x728u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_55BA30(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0055BD50) -------------------------------------------------------- void __thiscall sub_55BD50(void *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = *((_DWORD *)this + 25); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[23]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8D47C0(v1 + 13); nullsub_6(v1 + 7); } //----- (0055BE00) -------------------------------------------------------- int __thiscall sub_55BE00(unsigned __int16 *this, int a2) { int v2; // eax int result; // eax v2 = this[4]; LOWORD(v2) = a2 | v2 & 0xFFFE; this[4] = v2; if ( a2 ) result = v2 & 0xFFF7; else result = v2 | 8; this[4] = result; return result; } //----- (0055BE40) -------------------------------------------------------- void *__thiscall sub_55BE40(void *this, char a2) { void *v2; // esi v2 = this; sub_559AE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0055BE70) -------------------------------------------------------- void __thiscall sub_55BE70(void *this) { float *v1; // esi v1 = (float *)this; sub_8D0610(this); sub_8D06C0(v1 + 7); sub_8D4790((_DWORD *)v1 + 13); v1[23] = 0.0; v1[25] = 0.0; } //----- (0055BEE0) -------------------------------------------------------- void **__thiscall sub_55BEE0(void **this) { void **v1; // esi v1 = this; sub_54CC50(this); *v1 = &KarisForgeSlotInvWin::`vftable'; v1[58] = &KarisForgeSlotInvWin::`vftable'; v1[114] = (void *)-1; v1[115] = (void *)-1; v1[118] = 0; v1[116] = (void *)-1; v1[117] = (void *)1; sub_5D5B70(v1, 0, 1); v1[113] = 0; *((_BYTE *)v1 + 448) = 0; return v1; } // 9CE0E8: using guessed type void *KarisForgeSlotInvWin::`vftable'; // 9CE104: using guessed type void *KarisForgeSlotInvWin::`vftable'; //----- (0055BFA0) -------------------------------------------------------- char __thiscall sub_55BFA0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // esi char result; // al v6 = this; this[113] = a6; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v6[116] = a4; result = 1; } return result; } //----- (0055BFF0) -------------------------------------------------------- int __thiscall sub_55BFF0(_BYTE *this) { *((_DWORD *)this + 110) = 0; return sub_8F28C0(this); } //----- (0055C000) -------------------------------------------------------- int __thiscall sub_55C000(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int result; // eax int v5; // edi v2 = this; v3 = (_DWORD *)this[133]; if ( a2 ) { v5 = 0; if ( sub_5D5470(v3) ) v5 = v2[133]; result = v5; } else if ( v3 && sub_5D5470(v3) ) { result = v2[133]; } else { result = 0; } return result; } //----- (0055C090) -------------------------------------------------------- int __thiscall sub_55C090(_DWORD *this, unsigned int a2) { int result; // eax _DWORD *v3; // ecx int *v4; // esi int v5; // edi int v6; // eax result = (int)this; if ( a2 < 1 ) { v3 = (_DWORD *)this[a2 + 133]; if ( v3 ) { v4 = *(int **)(result + 4 * a2 + 528); if ( v4 ) { v5 = *v4; v6 = sub_5D5470(v3); result = (*(int (__thiscall **)(int *, bool))(v5 + 240))(v4, v6 == 0); } } } return result; } //----- (0055C0F0) -------------------------------------------------------- void __thiscall sub_55C0F0(int this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ecx _DWORD *v4; // ecx int v5; // eax int *v6; // ecx v1 = (_DWORD *)this; if ( !*(_BYTE *)(this + 448) ) { if ( sub_5D5470((_DWORD *)this) ) v1[68] = dword_ACEC34; else v1[68] = dword_AD01E8; sub_8F2F90((int)v1); v2 = v1[118]; if ( v2 ) { v3 = v1[115]; if ( v3 < 0xC0 ) { v4 = *(_DWORD **)(v2 + 4 * v3 + 348); if ( v4 ) { if ( sub_5D5470(v4) ) { v5 = sub_5D5470(v1); if ( v5 ) { v6 = (int *)v1[68]; if ( v6 ) { sub_547C20(v6, v5); sub_8F2F90((int)v1); } } } } } } } } // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0055C180) -------------------------------------------------------- char *__thiscall sub_55C180(char *this) { char *v1; // esi int v2; // eax int v3; // ebx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MakeKarisWin::`vftable'; *((_DWORD *)v1 + 58) = &MakeKarisWin::`vftable'; sub_8D0610(v1 + 344); sub_8D06C0((float *)v1 + 93); sub_8D4790((_DWORD *)v1 + 99); *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 111) = &PgWinDrop::`vftable'; *((_DWORD *)v1 + 113) = 0; v2 = (int)(v1 + 456); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; *((_DWORD *)v1 + 112) = v1 + 456; *((_DWORD *)v1 + 132) = 0; *((_DWORD *)v1 + 133) = 0; v3 = *((_DWORD *)v1 + 108); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 108) = 0; } *((_DWORD *)v1 + 109) = 0; *((float *)v1 + 136) = 1.0; *((_DWORD *)v1 + 135) = 0; *((_DWORD *)v1 + 110) = 0; *((_DWORD *)v1 + 134) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CE374: using guessed type void *MakeKarisWin::`vftable'; // 9CE394: using guessed type void *MakeKarisWin::`vftable'; //----- (0055C290) -------------------------------------------------------- LONG __thiscall sub_55C290(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &MakeKarisWin::`vftable'; this[58] = &MakeKarisWin::`vftable'; this[132] = 0; this[133] = 0; v2 = this[108]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[108] = 0; } v1[109] = 0; v1[135] = 0; v1[134] = 0; v1[114] = &DropContents::`vftable'; v1[111] = &PgWinDrop::`vftable'; v3 = v1[108]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8D47C0(v1 + 99); nullsub_6(v1 + 93); return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CE374: using guessed type void *MakeKarisWin::`vftable'; // 9CE394: using guessed type void *MakeKarisWin::`vftable'; //----- (0055C3A0) -------------------------------------------------------- void __thiscall sub_55C3A0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ecx _DWORD *v6; // ecx int *v7; // esi int v8; // edi int v9; // eax v2 = this; v3 = (_DWORD *)this[a2 + 133]; if ( v3 ) { v4 = sub_5D5470((_DWORD *)this[a2 + 133]); if ( v4 ) { v2[116] = v3[114]; v2[118] = 0; v5 = v3[115]; v2[119] = v4; v2[117] = v5; v2[120] = 0; v2[130] = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); v2[113] = v3[118]; dword_BA6BCC = (int)(v2 + 111); sub_54D600((int)v3); if ( a2 < 1 ) { v6 = (_DWORD *)v2[a2 + 133]; if ( v6 ) { v7 = (int *)v2[a2 + 132]; if ( v7 ) { v8 = *v7; v9 = sub_5D5470(v6); (*(void (__thiscall **)(int *, bool))(v8 + 240))(v7, v9 == 0); } } } } } } // BA6BCC: using guessed type int dword_BA6BCC; //----- (0055C470) -------------------------------------------------------- void __thiscall sub_55C470(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // ecx _DWORD *v4; // ecx int *v5; // esi int v6; // edi int v7; // eax v1 = this; v2 = (_DWORD *)this[133]; if ( v2 ) { if ( sub_5D5470(v2) ) { v3 = v1[133]; if ( v3 ) sub_54D600(v3); } } v4 = (_DWORD *)v1[133]; if ( v4 ) { v5 = (int *)v1[132]; if ( v5 ) { v6 = *v5; v7 = sub_5D5470(v4); (*(void (__thiscall **)(int *, bool))(v6 + 240))(v5, v7 == 0); } } } //----- (0055C4D0) -------------------------------------------------------- int __thiscall sub_55C4D0(float *this, int a2) { float *v2; // esi int v3; // ecx double v4; // st7 int v5; // ecx v2 = this; *((_DWORD *)this + 109) = a2; sub_8D4A70((_DWORD *)this + 99, (_DWORD *)a2); sub_8D4750((_DWORD *)v2 + 99, flt_ACCFCC); v2[96] = v2[102]; sub_8D06E0(v2 + 93, flt_ACCFCC, 1); *(float *)(a2 + 88) = -130.0; *(float *)(a2 + 92) = -135.0; *(float *)(a2 + 96) = 50.0; (*(void (__stdcall **)(int, signed int))(**((_DWORD **)v2 + 133) + 116))(a2, 1); sub_85C4D0(*((_DWORD **)v2 + 133)); sub_85C6F0(*((_DWORD **)v2 + 133)); v3 = *((_DWORD *)v2 + 135); *((_DWORD *)v2 + 110) = 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 256))(1); if ( v2[102] < 1.0 ) v4 = 0.0099999998; else v4 = v2[102] / 100.0; v5 = *((_DWORD *)v2 + 135); v2[136] = v4; return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 276))(0.0); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0055C5E0) -------------------------------------------------------- void __thiscall sub_55C5E0(float *this, int a2) { double v2; // st7 float *v3; // esi int v4; // eax int *v5; // ecx int v6; // edi float v7; // ST18_4 int *v8; // ecx int v9; // edi float v10; // ST18_4 char v11; // [esp+18h] [ebp-4h] v2 = flt_ACCFCC; v3 = this; sub_8D0730((int)(this + 93), flt_ACCFCC); if ( v4 == -1 ) { v8 = (int *)*((_DWORD *)v3 + 135); v9 = *v8; (*(void (**)(void))(*v8 + 280))(); v10 = v2 + v3[136]; (*(void (__thiscall **)(_DWORD, _DWORD))(v9 + 276))(*((_DWORD *)v3 + 135), LODWORD(v10)); } else if ( v4 ) { if ( v4 == 1 && *((_DWORD *)v3 + 110) && *((_DWORD *)v3 + 109) ) { (*(void (__stdcall **)(char *, _DWORD))(**((_DWORD **)v3 + 133) + 120))(&v11, *((_DWORD *)v3 + 109)); sub_410C00(&v11); v3[109] = 0.0; sub_8F2C30((volatile LONG *)v3, 13, 0, 0); (*(void (**)(void))(**((_DWORD **)v3 + 135) + 280))(); if ( v2 < 0.800000011920929 ) (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 135) + 276))(0.80000001); } } else if ( (*(unsigned __int8 (**)(void))(**((_DWORD **)v3 + 135) + 260))() == 1 ) { v5 = (int *)*((_DWORD *)v3 + 135); v6 = *v5; (*(void (**)(void))(*v5 + 280))(); v7 = v2 - (v3[136] + v3[136]); (*(void (__thiscall **)(_DWORD, _DWORD))(v6 + 276))(*((_DWORD *)v3 + 135), LODWORD(v7)); (*(void (**)(void))(**((_DWORD **)v3 + 135) + 280))(); if ( v7 <= 0.0 ) (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 135) + 256))(0); } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0055C7A0) -------------------------------------------------------- void __thiscall sub_55C7A0(int this) { int v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi int v3; // [esp+4h] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 440) ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(this + 532) + 120))(&v3, *(_DWORD *)(this + 436)); if ( v3 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 540) + 256))(0); } sub_4B75F0(*(_DWORD **)(v1 + 296)); sub_55C470((_DWORD *)v1); *(_DWORD *)(v1 + 440) = 0; } //----- (0055C830) -------------------------------------------------------- void __thiscall sub_55C830(_DWORD *this, int a2, int a3, int a4) { int v4; // eax int v5; // ecx if ( a2 == 13 ) { v4 = this[133]; if ( v4 ) { v5 = this[74]; sub_4B4B80(*(unsigned __int8 *)(v4 + 460)); } } } //----- (0055C860) -------------------------------------------------------- char __thiscall sub_55C860(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[116]); return (char)v2; } //----- (0055C890) -------------------------------------------------------- char __thiscall sub_55C890(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[116]); return (char)v2; } //----- (0055C8C0) -------------------------------------------------------- int __thiscall sub_55C8C0(float *this, float a2) { float *v2; // esi int result; // eax v2 = this; sub_55C5E0(this, SLODWORD(a2)); result = sub_5D5470(*((_DWORD **)v2 + 133)); if ( !result ) result = (*(int (__stdcall **)(void *))(**((_DWORD **)v2 + 134) + 472))(&unk_9CDF84); return result; } //----- (0055C900) -------------------------------------------------------- char __stdcall sub_55C900(_DWORD *a1) { char result; // al _DWORD *v2; // esi char v3; // al int v4; // edi int v5; // edi if ( !a1 ) return 0; v2 = (_DWORD *)sub_5D5470(a1); if ( !v2 ) return 0; v3 = (*(int (__thiscall **)(_DWORD *))(*v2 + 36))(v2); v4 = sub_55D9A0(v3); if ( !v4 ) goto LABEL_14; switch ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 4))(v2) ) { case 4u: v5 = *(_DWORD *)(v4 + 4 * *(_DWORD *)(v2[28] + 131) + 78); break; case 5u: v5 = *(_DWORD *)(v4 + 4 * *(_DWORD *)(v2[28] + 131) + 58); break; case 6u: v5 = *(_DWORD *)(v4 + 4 * *(_DWORD *)(v2[28] + 131) - 2); break; case 7u: v5 = *(_DWORD *)(v4 + 4 * *(_DWORD *)(v2[28] + 131) + 38); break; case 8u: v5 = *(_DWORD *)(v4 + 4 * *(_DWORD *)(v2[28] + 131) + 18); break; default: goto LABEL_14; } if ( v5 > 0 ) result = 1; else LABEL_14: result = 0; return result; } //----- (0055C9D0) -------------------------------------------------------- char __userpurge sub_55C9D0@(int a1@, int a2@, unsigned int a3, int a4) { int v4; // edi _DWORD *v6; // ebx _DWORD *v7; // esi char v8; // al int v9; // eax int v10; // edi int v11; // esi char *v12; // eax char *v13; // eax int v14; // [esp-8h] [ebp-14h] int v15; // [esp+4h] [ebp-8h] int v16; // [esp+8h] [ebp-4h] v4 = *(_DWORD *)(a1 + 4 * a3 + 532); v15 = a1; if ( !v4 ) return 0; v6 = *(_DWORD **)(a4 + 4); if ( !v6 ) return 0; v14 = a2; v7 = (_DWORD *)v6[5]; if ( !v7 ) return 0; v8 = (*(int (__thiscall **)(_DWORD))(*v7 + 36))(v6[5]); v16 = sub_55D9A0(v8); if ( !v16 ) return 0; v9 = sub_55C000((_DWORD *)v15, a3); if ( v9 ) sub_54D600(v9); *(_DWORD *)(v4 + 456) = v6[2]; *(_DWORD *)(v4 + 460) = v6[3]; *(_DWORD *)(v4 + 472) = *(_DWORD *)(a4 + 8); sub_5D5B70((_WORD *)v4, (int)v7, 1); sub_55C090((_DWORD *)v15, a3); sub_54D0C0((_DWORD *)v4, 1); v10 = 0; switch ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v7 + 4))(v7, v14) ) { case 4u: v10 = *(_DWORD *)(v16 + 4 * *(_DWORD *)(v7[28] + 131) + 78); break; case 5u: v10 = *(_DWORD *)(v16 + 4 * *(_DWORD *)(v7[28] + 131) + 58); break; case 6u: v10 = *(_DWORD *)(v16 + 4 * *(_DWORD *)(v7[28] + 131) - 2); break; case 7u: v10 = *(_DWORD *)(v16 + 4 * *(_DWORD *)(v7[28] + 131) + 38); break; case 8u: v10 = *(_DWORD *)(v16 + 4 * *(_DWORD *)(v7[28] + 131) + 18); break; default: break; } v11 = **(_DWORD **)(v15 + 536); v12 = (char *)sub_40C190(1077706115); v13 = sub_7549E0(v12, v10); (*(void (__thiscall **)(_DWORD, char *))(v11 + 472))(*(_DWORD *)(v15 + 536), v13); return 1; } // 55C9D0: could not find valid save-restore pair for esi //----- (0055CB50) -------------------------------------------------------- void __thiscall sub_55CB50(int this) { int v1; // esi _DWORD *v2; // esi const CHAR *v3; // eax int v4; // [esp-4h] [ebp-8h] v1 = this; if ( *(_DWORD *)(this + 440) ) { v4 = 913670526; } else if ( sub_5D5470(*(_DWORD **)(this + 532)) ) { if ( sub_55C900(*(_DWORD **)(v1 + 532)) == 1 ) { sub_55C4D0((float *)v1, *(_DWORD *)(v1 + 432)); return; } v4 = -1479362343; } else { v4 = 940845358; } v2 = *(_DWORD **)(v1 + 296); v3 = sub_40C190(v4); sub_492060(v2, (int)v3); } //----- (0055CBC0) -------------------------------------------------------- int __thiscall sub_55CBC0(char *this) { char *v1; // esi char *v2; // eax volatile LONG *v3; // edi int v4; // eax int v5; // eax char v7; // [esp+8h] [ebp-2Ch] int v8; // [esp+10h] [ebp-24h] char v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+24h] [ebp-10h] int v11; // [esp+2Ch] [ebp-8h] v1 = this; v2 = (char *)sub_40C190(-1880105265); v3 = sub_462C30(2, v2); v8 = 272; v11 = 272; v10 = 271; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760(v3, v4, &v9, &v7); if ( v1 ) v5 = (int)(v1 + 232); else v5 = 0; return (**((int (__thiscall ***)(int, int))v3 + 58))((int)(v3 + 58), v5); } //----- (0055CC50) -------------------------------------------------------- char __thiscall sub_55CC50(int this, int *a2, int a3, int a4) { int v4; // esi char result; // al _DWORD *v6; // eax int v7; // eax int v8; // eax _DWORD *v9; // esi const CHAR *v10; // eax v4 = this; if ( *(_BYTE *)(this + 448) ) { byte_BA6BD0 = 1; return 0; } if ( !*a2 ) return 0; v6 = *(_DWORD **)(*a2 + 4); if ( v6[2] || v6[4] || (v7 = v6[5]) == 0 || *(_DWORD *)(this + 468) != 6 ) { byte_BA6BD0 = 1; return 0; } if ( *(_BYTE *)(*(_DWORD *)(v7 + 112) + 240) ) { v8 = sub_402BF0((_DWORD *)this); result = sub_55C9D0(v8, v4, *(_DWORD *)(v4 + 464), *a2); } else { v9 = *(_DWORD **)(this + 452); v10 = sub_40C190(-1479362343); sub_492060(v9, (int)v10); result = 0; } return result; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0055CD00) -------------------------------------------------------- void __thiscall sub_55CD00(int this, int a2, unsigned int a3) { _DWORD *v3; // eax switch ( a2 ) { case 12: sub_55CBC0((char *)this); break; case 15: sub_4A58C0(*(_DWORD ***)(this + 296), 0); break; case 16: sub_55C3A0((_DWORD *)this, a3); break; case 17: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "makekaris"); break; default: return; } } //----- (0055CD80) -------------------------------------------------------- volatile LONG *__cdecl sub_55CD80(int a1, int a2, int a3, int a4, int a5) { void *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1DCu); v9 = v5; v10 = 0; if ( v5 ) v6 = (volatile LONG *)sub_55BEE0((void **)v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int))(*v6 + 616))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (0055CEC0) -------------------------------------------------------- volatile LONG *__cdecl sub_55CEC0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x228u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_55C180((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0055CFF0) -------------------------------------------------------- char __thiscall sub_55CFF0(void *this, int a2) { int v2; // esi char *v3; // eax void **v4; // eax int v5; // edi void **v6; // ebx int v7; // edi char *v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi LONG v11; // eax char result; // al int v13; // eax volatile LONG *v14; // edi volatile LONG v15; // ebx const CHAR *v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax int v24; // edi int v25; // ebx volatile LONG **v26; // eax volatile LONG *v27; // eax const char *v28; // eax volatile LONG *v29; // eax const char *v30; // eax volatile LONG **v31; // eax int v32; // eax volatile LONG *v33; // edi volatile LONG v34; // ebx const CHAR *v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi volatile LONG **v37; // eax int v38; // eax volatile LONG *v39; // eax volatile LONG **v40; // edi volatile LONG *v41; // edi volatile LONG **v42; // edi volatile LONG **v43; // edi int v44; // eax int v45; // edi int v46; // ebx int v47; // eax volatile LONG *v48; // edi volatile LONG v49; // ebx const CHAR *v50; // eax volatile LONG **v51; // edi volatile LONG *v52; // edx int v53; // edi int v54; // ebx int v55; // eax volatile LONG *v56; // edi volatile LONG v57; // ebx const CHAR *v58; // eax void (__thiscall ***v59)(_DWORD, signed int); // esi int v60; // [esp+88h] [ebp-50h] int v61; // [esp+8Ch] [ebp-4Ch] int v62; // [esp+90h] [ebp-48h] int v63; // [esp+94h] [ebp-44h] int v64; // [esp+98h] [ebp-40h] int v65; // [esp+9Ch] [ebp-3Ch] int v66; // [esp+A0h] [ebp-38h] char v67[4]; // [esp+A4h] [ebp-34h] int v68; // [esp+A8h] [ebp-30h] int v69; // [esp+ACh] [ebp-2Ch] int v70; // [esp+B0h] [ebp-28h] int v71; // [esp+B4h] [ebp-24h] int v72; // [esp+B8h] [ebp-20h] int v73; // [esp+BCh] [ebp-1Ch] int v74; // [esp+C0h] [ebp-18h] char v75; // [esp+C4h] [ebp-14h] int v76; // [esp+D4h] [ebp-4h] v2 = (int)this; v64 = 0; v76 = 0; v61 = 0; v60 = 0; v65 = 0; v66 = 0; v63 = 0; v62 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACA838, "Karis_Effect01.nif"); v4 = sub_8D03E0(v3, 0); v5 = *(_DWORD *)(v2 + 432); v6 = v4; if ( (void **)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v2 + 432) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\makekaris.nif"); sub_8F66B0(v8, (int)&v64, v7); if ( !v64 ) return 0; v9 = sub_8FB140(v64, (int)"Frame", (int)&v63, (int)&v62, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"MakeKarisWin", 0) || !sub_8F71E0(v64, (int)"WinTitle", &v66, &v65, &v61, &v60) ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v64; v76 = -1; if ( v64 ) { v11 = InterlockedDecrement((volatile LONG *)(v64 + 4)); goto LABEL_16; } return 0; } v13 = sub_421050(7); v14 = sub_8F4A20(v66 - v63, v65 - v62, v61, v60, v13, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v14 + 488))(v14, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v14 + 468))(v14, &dword_AA8D98); v15 = *v14; v16 = sub_40C190(1060536193); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v15 + 472))(v14, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v17 = sub_8FB140(v64, (int)"Panel01", (int)&v66, (int)&v65, 0); sub_8F3EB0(v66 - v63, v65 - v62, (int)v17, v2, 0, 0); v18 = sub_8FB140(v64, (int)"ImageBack01", (int)&v66, (int)&v65, 0); sub_8F3EB0(v66 - v63, v65 - v62, (int)v18, v2, 0, 0); v19 = sub_8FB140(v64, (int)"Panel02", (int)&v66, (int)&v65, 0); v20 = sub_8F3EB0(v66 - v63, v65 - v62, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(v64, (int)"IconSlot", (int)&v66, (int)&v65, 0); sub_8F3EB0(v66 - v63, v65 - v62, (int)v21, v2, 0, 0); v22 = sub_8FB140(v64, (int)"ForgeSlot02", (int)&v66, (int)&v65, 0); v23 = sub_8F3EB0(v66 - v63, v65 - v62, (int)v22, v2, 0, 0); *(_DWORD *)(v2 + 540) = v23; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 256))(v23, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 540) + 240))(0); v24 = 0; do { v25 = v24 + 1; *(_DWORD *)v67 = 0; v68 = 0; v69 = 0; v70 = 0; v71 = 0; v72 = 0; v73 = 0; v74 = 0; v75 = 0; sprintf(v67, "ForgeSlot%02d", v24 + 1); v26 = sub_8FB140(v64, (int)v67, (int)&v66, (int)&v65, 0); v27 = sub_8F3EB0(v66 - v63, v65 - v62, (int)v26, v2, 0, 0); *(_DWORD *)(v2 + 4 * v24 + 528) = v27; *((_DWORD *)v27 + 68) = dword_AD01E8; v28 = sub_40A910(1531781781); sub_8F2EA0(*(void ***)(v2 + 4 * v24 + 528), v28); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v24 + 528) + 240))(1); v29 = sub_55CD80(v66 - v63, v65 - v62, v24, v2, a2); *(_DWORD *)(v2 + 4 * v24 + 532) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 240))(v29, 1); *(_DWORD *)(*(_DWORD *)(v2 + 4 * v24 + 532) + 304) = 1; sub_5D3170(*(_DWORD *)(v2 + 4 * v24 + 532), 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v24 + 532) + 256))(1); if ( !v24 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 532) + 516))(16); sub_54CD60(*(_DWORD **)(v2 + 532), 6); v30 = sub_40A910(-1913391614); sub_8F2EA0(*(void ***)(v2 + 532), v30); *(_DWORD *)(*(_DWORD *)(v2 + 532) + 272) = dword_AD01E8; } sub_5D5B70(*(_WORD **)(v2 + 4 * v24++ + 532), 0, 1); } while ( v25 < 1 ); if ( !sub_8F71E0(v64, (int)"ForgeText01", &v66, &v65, &v61, &v60) ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v64; v76 = -1; if ( v64 ) { v11 = InterlockedDecrement((volatile LONG *)(v64 + 4)); LABEL_16: if ( !v11 ) { if ( v10 ) (**v10)(v10, 1); } return 0; } return 0; } v31 = sub_8FB140(v64, (int)"ForgeText01", (int)&v66, (int)&v65, 0); sub_8F3EB0(v66 - v63, v65 - v62, (int)v31, v2, 0, 0); v32 = sub_421050(7); v33 = sub_8F4A20(v66 - v63, v65 - v62, v61, v60, v32, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v33 + 488))(v33, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v33 + 468))(v33, &dword_AA8D98); v34 = *v33; v35 = sub_40C190(-2072213885); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v34 + 472))(v33, v35); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); if ( sub_8F71E0(v64, (int)"ForgeText", &v66, &v65, &v61, &v60) ) { v37 = sub_8FB140(v64, (int)"ForgeText", (int)&v66, (int)&v65, 0); sub_8F3EB0(v66 - v63, v65 - v62, (int)v37, v2, 0, 0); v38 = sub_421050(7); v39 = sub_8F4A20(v66 - v63, v65 - v62, v61, v60, v38, v2, 0, 0); *(_DWORD *)(v2 + 536) = v39; (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 536) + 468))(&dword_AA8D98); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 536) + 472))(&unk_9CDF85); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 536) + 240))(0); v40 = sub_8FB140(v64, (int)"ClsNor", (int)&v66, (int)&v65, 0); sub_8FB650(v40, v64, (int)"ClsClick"); sub_8FB650(v40, v64, (int)"ClsOver"); sub_90C8D0(v66 - v63, v65 - v62, (int)v40, v2); v41 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("HelpLinkNor") ) { v42 = sub_8FB140(v64, (int)"HelpLinkNor", (int)&v66, (int)&v65, v41); sub_8FB650(v42, v64, (int)"HelpLinkClick"); sub_8FB650(v42, v64, (int)"HelpLinkOver"); sub_8FE0F0(v66 - v63, v65 - v62, (int)v42, v2, 17, 0, 0); } v43 = sub_8FB140(v64, (int)"OkNor", (int)&v66, (int)&v65, 0); sub_8FB650(v43, v64, (int)"OkClick"); sub_8FB650(v43, v64, (int)"OkOver"); sub_8FE0F0(v66 - v63, v65 - v62, (int)v43, v2, 12, 0, 0); v44 = *v43[9]; v45 = *(_DWORD *)(v44 + 24); v46 = *(_DWORD *)(v44 + 20); v47 = sub_421050(7); v48 = sub_8F4A20(v66 - v63, v65 - v62, v46, v45, v47, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); v49 = *v48; v50 = sub_40C190(1837584250); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v49 + 472))(v48, v50); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); v51 = sub_8FB140(v64, (int)"CancelNor", (int)&v66, (int)&v65, 0); sub_8FB650(v51, v64, (int)"CancelClick"); sub_8FB650(v51, v64, (int)"CancelOver"); sub_8FE0F0(v66 - v63, v65 - v62, (int)v51, v2, 15, 0, 0); v52 = v51[9]; v53 = *(_DWORD *)(*v52 + 24); v54 = *(_DWORD *)(*v52 + 20); v55 = sub_421050(7); v56 = sub_8F4A20(v66 - v63, v65 - v62, v54, v53, v55, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v56 + 488))(v56, 5); v57 = *v56; v58 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v57 + 472))(v56, v58); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v56 + 240))(v56, 0); sub_402E40((void *)v2, xRight, dword_AC2F78, COERCE_INT(0.30000001), COERCE_INT(0.5)); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); v76 = -1; if ( v64 ) { v59 = (void (__thiscall ***)(_DWORD, signed int))v64; if ( !InterlockedDecrement((volatile LONG *)(v64 + 4)) ) { if ( v59 ) (**v59)(v59, 1); } } result = 1; } else { v36 = (void (__thiscall ***)(_DWORD, signed int))v64; v76 = -1; if ( !v64 || InterlockedDecrement((volatile LONG *)(v64 + 4)) || !v36 ) return 0; (**v36)(v36, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0055D960) -------------------------------------------------------- void *__thiscall sub_55D960(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &KarisForgeSlotInvWin::`vftable'; *((_DWORD *)this + 58) = &KarisForgeSlotInvWin::`vftable'; sub_54CCF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CE0E8: using guessed type void *KarisForgeSlotInvWin::`vftable'; // 9CE104: using guessed type void *KarisForgeSlotInvWin::`vftable'; //----- (0055D9A0) -------------------------------------------------------- int __cdecl sub_55D9A0(char a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACD96C + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(_BYTE *)(sub_7474E0((_DWORD *)(dword_ACD96C + 4), v3) + 1) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD96C + 4), v3); } // ACD96C: using guessed type int dword_ACD96C; //----- (0055DA00) -------------------------------------------------------- void *__thiscall sub_55DA00(void *this, char a2) { void *v2; // esi v2 = this; sub_55C290(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0055DA50) -------------------------------------------------------- char __thiscall sub_55DA50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx char result; // al v1 = this; v2 = (_DWORD *)this[74]; *((_BYTE *)v1 + 388) = 0; result = sub_4B75F0(v2); v1[100] = 0; return result; } //----- (0055DA80) -------------------------------------------------------- _DWORD *__thiscall sub_55DA80(char *this, signed int a2) { _DWORD *result; // eax int v3; // esi int v4; // edi char *v5; // eax result = (_DWORD *)a2; if ( a2 < 3 ) { v3 = (int)&this[4 * a2 + 348]; v4 = 3 - a2; do { if ( !byte_ACAD5C ) sub_420410(); v5 = sub_7549E0("%s\\TownPortal\\NoneMap.dds", byte_ACAB50); result = sub_486130((int)v5); if ( result ) { (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)v3 + 452))(result); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0); result = (_DWORD *)(*(int (__stdcall **)(signed int))(**(_DWORD **)v3 + 256))(1); } v3 += 4; --v4; } while ( v4 ); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0055DB00) -------------------------------------------------------- float *__thiscall sub_55DB00(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MapLinkGateWin::`vftable'; *((_DWORD *)v1 + 58) = &MapLinkGateWin::`vftable'; v1[96] = 0.0; v1[87] = 0.0; v1[90] = 0.0; v1[93] = 0.0; v1[88] = 0.0; v1[91] = 0.0; v1[94] = 0.0; v1[89] = 0.0; v1[92] = 0.0; v1[95] = 0.0; v1[98] = 1.0; *((_BYTE *)v1 + 388) = 0; v1[86] = 0.0; v1[99] = 0.0; v1[100] = 0.0; v1[101] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CE7A8: using guessed type void *MapLinkGateWin::`vftable'; // 9CE7C4: using guessed type void *MapLinkGateWin::`vftable'; //----- (0055DC20) -------------------------------------------------------- void __thiscall sub_55DC20(int this, int a2) { int v2; // ebx double v3; // st7 float v4; // ST10_4 float v5; // ST10_4 float v6; // ST10_4 int v7; // eax float v8; // ST10_4 _DWORD **v9; // esi int v10; // eax unsigned int v11; // edi unsigned int v12; // eax void (__stdcall *v13)(signed int); // edx int v14; // ecx signed int v15; // [esp+4h] [ebp-4h] v2 = this; if ( !dword_BA6B64 ) { v3 = 1.0; if ( *(float *)(this + 396) >= 1.0 ) { if ( !*(_BYTE *)(this + 388) ) { v9 = (_DWORD **)(this + 348); v15 = 3; do { if ( *v9 ) { v10 = sub_85AA60(*v9, "MinLV"); if ( v10 ) { v11 = atoi(*(const char **)(v10 + 12)); v12 = sub_680890((unsigned __int8 *)byte_AD9238); v13 = *(void (__stdcall **)(signed int))(**v9 + 240); if ( v12 >= v11 ) v13(1); else v13(0); } } ++v9; --v15; } while ( v15 ); v14 = *(_DWORD *)(v2 + 344); *(_BYTE *)(v2 + 388) = 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v14 + 240))(1); } } else { v4 = *(float *)(this + 396) + flt_ACCFD0; *(float *)(this + 396) = v4; if ( v4 > 1.0 ) *(float *)(this + 396) = 1.0; if ( *(float *)(this + 396) < 1.0 ) { v5 = *(float *)(this + 396) * flt_BA45B8; v6 = sin(v5); v3 = v6; } v7 = *(_DWORD *)(this + 384); v8 = v3; ++*(_DWORD *)(v7 + 88); *(float *)(v7 + 84) = v8; } } } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; // BA6B64: using guessed type int dword_BA6B64; //----- (0055DD40) -------------------------------------------------------- int __thiscall sub_55DD40(_DWORD **this) { int v1; // ebx _DWORD **v2; // edi signed int v3; // esi _DWORD *v4; // eax int **v5; // edi _DWORD **v6; // esi int v7; // eax int v8; // eax int v9; // eax _DWORD *v10; // ecx int v11; // ebx char *v12; // eax _DWORD *v13; // ebx int v14; // ebx char *v15; // eax char *v16; // eax int v17; // ebx int v18; // ebx int v19; // ebx char *v20; // eax int v21; // ebx _DWORD *v22; // eax _DWORD *v23; // eax _DWORD *v24; // ebx _DWORD *v25; // eax int v26; // eax _DWORD *v27; // ecx unsigned int v28; // ebx char *v29; // eax _DWORD *v30; // eax _DWORD *v31; // ecx unsigned int v32; // eax int v33; // edx char *v34; // eax char *v35; // eax char v37; // [esp+10h] [ebp-44h] int v38; // [esp+1Ch] [ebp-38h] int v39; // [esp+20h] [ebp-34h] int v40; // [esp+24h] [ebp-30h] void *v41; // [esp+28h] [ebp-2Ch] int v42; // [esp+2Ch] [ebp-28h] int v43; // [esp+30h] [ebp-24h] unsigned int v44; // [esp+34h] [ebp-20h] char v45[4]; // [esp+38h] [ebp-1Ch] int v46; // [esp+3Ch] [ebp-18h] int v47; // [esp+40h] [ebp-14h] int v48; // [esp+50h] [ebp-4h] v1 = (int)this; v40 = (int)this; v2 = this + 87; v3 = 3; do { sub_85AFB0(*v2, "action"); sub_85AFB0(*v2, "MinLV"); (*(void (__stdcall **)(_DWORD))(**v2 + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[3] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[6] + 256))(0); ++v2; --v3; } while ( v3 ); v4 = sub_439D70(byte_ADB468, &v37); v38 = sub_4316B0(v4); v43 = 0; v44 = 0; if ( sub_55EDB0() ) { v5 = (int **)(v1 + 372); v42 = v1 + 360; v6 = (_DWORD **)(v1 + 348); while ( v43 < 3 ) { if ( *(_DWORD *)(v1 + 400) == *(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44) + 2) ) { v7 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44); v47 = 0; v46 = 0; *(_DWORD *)v45 = 0; strncpy(v45, (const char *)(v7 + 3), 0xCu); v8 = sub_4316B0(v45); v39 = v8 + 14; v9 = strcmp((const char *)(v38 + 14), (const char *)(v8 + 14)); v10 = (_DWORD *)(dword_ACD970 + 4); if ( v9 ) { v18 = sub_7474E0(v10, v44); if ( sub_680890((unsigned __int8 *)byte_AD9238) >= (unsigned int)*(unsigned __int8 *)(v18 + 1) ) { v21 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44); if ( !byte_ACAD5C ) sub_420410(); v20 = sub_7549E0("%s\\TownPortal\\%s.DDS", byte_ACAB50, v21 + 3); } else { v19 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44); if ( !byte_ACAD5C ) sub_420410(); v20 = sub_7549E0("%s\\TownPortal\\%s_disable.DDS", byte_ACAB50, v19 + 3); } v22 = sub_486130((int)v20); if ( v22 ) (*(void (__stdcall **)(_DWORD *))(**v6 + 452))(v22); sub_85AFB0(*v6, "action"); v23 = operator new(0x10u); v24 = v23; v41 = v23; v25 = 0; v48 = 0; if ( v41 ) { v26 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44); v25 = sub_86B500(v24, (char *)(v26 + 3)); } v27 = *v6; v48 = -1; sub_85AE20(v27, "action", (int)v25); sub_85AFB0(*v6, "MinLV"); v28 = *(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v44) + 1); v41 = operator new(0x10u); v48 = 1; if ( v41 ) { v29 = sub_7549E0("%d", v28); v30 = sub_86B500(v41, v29); } else { v30 = 0; } v31 = *v6; v48 = -1; sub_85AE20(v31, "MinLV", (int)v30); (*(void (__stdcall **)(signed int))(**v6 + 256))(1); (*(void (__stdcall **)(_DWORD))(**v6 + 240))(0); (*(void (__stdcall **)(int))(**(_DWORD **)v42 + 472))(v39); (*(void (__stdcall **)(signed int))(**(_DWORD **)v42 + 256))(1); v32 = sub_680890((unsigned __int8 *)byte_AD9238); v33 = **v5; if ( v32 >= v28 ) { (*(void (__stdcall **)(_DWORD))(v33 + 256))(0); } else { (*(void (__stdcall **)(int *))(v33 + 468))(&dword_AA8C88); v41 = (void *)(**v5 + 472); v34 = (char *)sub_40A910(-903133119); v35 = sub_7549E0(v34, v28); (*(void (__thiscall **)(int *, char *))v41)(*v5, v35); (*(void (__stdcall **)(signed int))(**v5 + 256))(1); } v42 += 4; } else { v11 = sub_7474E0(v10, v44); if ( !byte_ACAD5C ) sub_420410(); v12 = sub_7549E0("%s\\TownPortal\\%s_disable.DDS", byte_ACAB50, v11 + 3); v13 = sub_486130((int)v12); (*(void (__stdcall **)(signed int))(**(_DWORD **)v42 + 256))(1); (*(void (__stdcall **)(_DWORD *))(**v6 + 452))(v13); (*(void (__stdcall **)(_DWORD))(**v6 + 240))(0); (*(void (__stdcall **)(signed int))(**v6 + 256))(1); v14 = **v5; v15 = (char *)sub_4090F0(2090982372); v16 = sub_7549E0(v15); (*(void (__thiscall **)(int *, char *))(v14 + 472))(*v5, v16); (*(void (__stdcall **)(signed int))(**v5 + 256))(1); (*(void (__stdcall **)(int *))(**v5 + 468))(&dword_AA8CA8); v17 = v42; (*(void (__stdcall **)(int))(**(_DWORD **)v42 + 472))(v39); (*(void (__stdcall **)(signed int))(**(_DWORD **)v17 + 256))(1); v42 = v17 + 4; } ++v43; v1 = v40; ++v6; ++v5; } if ( ++v44 >= sub_55EDB0() ) { if ( v43 >= 3 ) break; goto LABEL_32; } } } else { LABEL_32: sub_55DA80((char *)v1, v43); } *(_BYTE *)(v1 + 388) = 0; return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 344) + 240))(*(_DWORD *)(v1 + 344), 0); } // AA8C88: using guessed type int dword_AA8C88; // AA8CA8: using guessed type int dword_AA8CA8; // ACAD5C: using guessed type char byte_ACAD5C; // ACD970: using guessed type int dword_ACD970; //----- (0055E200) -------------------------------------------------------- char __thiscall sub_55E200(void *this, int a2) { int v2; // edi float *v3; // ebx int v4; // esi char *v5; // eax void *v6; // eax int v7; // esi _DWORD *v8; // eax _DWORD *v9; // eax int v10; // edx _DWORD *v11; // eax int v12; // ecx int v13; // eax volatile LONG **v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi volatile LONG **v17; // esi volatile LONG *v18; // eax int v19; // ST3C_4 volatile LONG **v20; // esi int v21; // ebx char *v22; // eax volatile LONG **v23; // ebx char *v24; // eax char *v25; // eax volatile LONG *v26; // eax int v27; // ebx volatile LONG *v28; // eax volatile LONG v29; // ebx int v30; // eax volatile LONG v31; // ebx unsigned int v32; // eax volatile LONG *v33; // ecx int v34; // eax volatile LONG *v35; // eax volatile LONG v36; // ebx int v37; // eax volatile LONG *v38; // ecx volatile LONG v39; // ebx int v40; // eax char v41; // ST2C_1 int v42; // ST30_4 int v43; // ST34_4 int v44; // ST38_4 const CHAR *v45; // eax volatile LONG *v46; // esi volatile LONG v47; // ebx int v48; // eax char v49; // ST2C_1 int v50; // ST30_4 int v51; // ST34_4 int v52; // ST38_4 const CHAR *v53; // eax volatile LONG *v54; // esi volatile LONG v55; // ebx int v56; // eax volatile LONG **v57; // esi volatile LONG *v58; // eax volatile LONG **v59; // esi volatile LONG *v60; // eax signed int v61; // ebx unsigned int v62; // esi void (__thiscall ***v63)(_DWORD, signed int); // esi void (__thiscall ***v64)(_DWORD, signed int); // esi LONG v65; // eax int v66[5]; // [esp+50h] [ebp-38h] void *v67; // [esp+64h] [ebp-24h] int v68; // [esp+68h] [ebp-20h] int v69; // [esp+6Ch] [ebp-1Ch] int v70; // [esp+70h] [ebp-18h] int v71; // [esp+74h] [ebp-14h] int v72; // [esp+78h] [ebp-10h] int v73; // [esp+84h] [ebp-4h] signed int v74; // [esp+90h] [ebp+8h] v2 = (int)this; v3 = 0; v72 = 0; v4 = dword_BA6BA0; v73 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\MapLinkGate.nif"); sub_8F66B0(v5, (int)&v72, v4); if ( !v72 ) return 0; v6 = operator new(0x60u); v67 = v6; LOBYTE(v73) = 1; if ( v6 ) v3 = sub_85EBC0((float *)v6); v7 = *(_DWORD *)(v2 + 384); LOBYTE(v73) = 0; if ( (float *)v7 != v3 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v2 + 384) = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); } v8 = *(_DWORD **)(v2 + 384); v8[8] = dword_ABD4FC; v8[9] = dword_ABD500; v8[10] = dword_ABD504; ++v8[22]; v9 = *(_DWORD **)(v2 + 384); v9[11] = dword_ABD4FC; v9[12] = dword_ABD500; v10 = dword_ABD504; ++v9[22]; v9[13] = v10; v11 = *(_DWORD **)(v2 + 384); v11[17] = dword_ABD4FC; v11[18] = dword_ABD500; v12 = dword_ABD504; ++v11[22]; v11[19] = v12; v13 = *(_DWORD *)(v2 + 384); ++*(_DWORD *)(v13 + 88); *(float *)(v13 + 84) = 1.0; v14 = sub_8FB140(v72, (int)"Panel01", (int)&v70, (int)&v71, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v14, 0, a2, (int)"MapLinkGateWin", 0) ) { v15 = (void (__thiscall ***)(_DWORD, signed int))v72; v73 = -1; if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) ) { if ( v15 ) (**v15)(v15, 1); } return 0; } sub_403700((_DWORD *)v2, *(_DWORD *)(v2 + 384)); sub_456260(v66); LOBYTE(v73) = 2; sub_455FF0(v66, v2); sub_456000(v66, v70, v71); sub_456380(v66, v72); sub_456820(v66, (int)"Panel02", 0); v17 = sub_8FB140(v72, (int)"Cls_Nor", (int)&v70, (int)&v71, 0); sub_8FB650(v17, v72, (int)"Cls_Click"); sub_8FB650(v17, v72, (int)"Cls_Over"); v18 = sub_8FE0F0(v70, v71, (int)v17, v2, 1, 0, 0); v19 = *(_DWORD *)(v2 + 384); *(_DWORD *)(v2 + 344) = v18; sub_403700(v18, v19); v74 = 1; v20 = (volatile LONG **)(v2 + 360); v69 = 3; do { v21 = v72; v22 = sub_7549E0("MapSlot%.2d_Nor", v74); v23 = sub_8FB140(v21, (int)v22, (int)&v70, (int)&v71, 0); v68 = v72; v24 = sub_7549E0("MapSlot%.2d_Click", v74); sub_8FB650(v23, v68, (int)v24); v68 = v72; v25 = sub_7549E0("MapSlot%.2d_Over", v74); sub_8FB650(v23, v68, (int)v25); v26 = sub_8FE0F0(v70, v71, (int)v23, v2, 2, 0, 0); *(v20 - 3) = v26; (*(void (__thiscall **)(volatile LONG *, volatile LONG *))(*v26 + 520))(v26, v26); v27 = *(_DWORD *)(v2 + 384); v67 = (void *)*(v20 - 3); v68 = v27; if ( v27 ) InterlockedIncrement((volatile LONG *)(v27 + 4)); LOBYTE(v73) = 3; sub_8A6330((_DWORD *)v67 + 39, &v68); LOBYTE(v73) = 2; if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v28 = sub_456040((int)*(v20 - 3), (int)&unk_9CE5D1, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); *v20 = v28; v29 = *v28; v30 = sub_421050(8); (*(void (__thiscall **)(volatile LONG *, int))(v29 + 452))(*v20, v30); v31 = **v20; v32 = (*(int (**)(void))(**(v20 - 3) + 148))(); v33 = *v20; v67 = (void *)(v32 / 3); v34 = (*(int (**)(void))(*v33 + 168))(); (*(void (__thiscall **)(volatile LONG *, char *))(v31 + 176))(*v20, (char *)v67 + v34); (*(void (__stdcall **)(_DWORD))(**v20 + 240))(0); v35 = sub_456040((int)*(v20 - 3), (int)&unk_9CE5D2, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v20[3] = v35; v36 = *v35; v37 = sub_421050(8); (*(void (__thiscall **)(volatile LONG *, int))(v36 + 452))(v20[3], v37); (*(void (__stdcall **)(int *))(*v20[3] + 468))(&dword_AA8C88); v38 = v20[3]; v39 = *v38; v40 = (*(int (**)(void))(*v38 + 168))(); (*(void (__thiscall **)(volatile LONG *, int))(v39 + 176))(v20[3], v40 - 20); (*(void (__stdcall **)(_DWORD))(*v20[3] + 240))(0); ++v74; ++v20; --v69; } while ( v69 ); v41 = dword_AA8C68; v42 = dword_AA8C6C; v43 = dword_AA8C70; v44 = dword_AA8C74; v45 = sub_40A910(2141492449); v46 = sub_456760(v66, (int)"Text01", (int)v45, v41, v42, v43, v44, 5); v47 = *v46; v48 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v47 + 452))(v46, v48); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v46 + 240))(v46, 0); v49 = dword_AA8C68; v50 = dword_AA8C6C; v51 = dword_AA8C70; v52 = dword_AA8C74; v53 = sub_40A910(1861413856); v54 = sub_456760(v66, (int)"Text02", (int)v53, v49, v50, v51, v52, 5); v55 = *v54; v56 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v55 + 452))(v54, v56); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v57 = sub_8FB140(v72, (int)"Page_Nor00", (int)&v70, (int)&v71, 0); sub_8FB650(v57, v72, (int)"Page_Click00"); sub_8FB650(v57, v72, (int)"Page_Over00"); v58 = sub_8FE0F0(v70, v71, (int)v57, v2, 7, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v58 + 256))(v58, 1); v59 = sub_8FB140(v72, (int)"Page_Nor01", (int)&v70, (int)&v71, 0); sub_8FB650(v59, v72, (int)"Page_Click01"); sub_8FB650(v59, v72, (int)"Page_Over01"); v60 = sub_8FE0F0(v70, v71, (int)v59, v2, 6, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 256))(v60, 1); v61 = 0; v62 = 0; if ( !sub_55EDB0() ) { LABEL_32: LOBYTE(v73) = 0; sub_4562E0(v66); v63 = (void (__thiscall ***)(_DWORD, signed int))v72; v73 = -1; if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) && v63 ) (**v63)(v63, 1); return 1; } while ( 1 ) { if ( v61 > 3 ) { MessageBoxA(0, "Never Count Over 2! ", "MapLinkGateWin", 0); LOBYTE(v73) = 0; sub_4562E0(v66); v64 = (void (__thiscall ***)(_DWORD, signed int))v72; v73 = -1; if ( !v72 ) return 0; v65 = InterlockedDecrement((volatile LONG *)(v72 + 4)); goto LABEL_39; } ++v61; if ( *(_DWORD *)(v2 + 404) < (unsigned int)*(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v62) + 2) ) break; LABEL_31: if ( ++v62 >= sub_55EDB0() ) goto LABEL_32; } if ( *(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v62) + 2) - *(_DWORD *)(v2 + 404) <= 1 ) { *(_DWORD *)(v2 + 404) = *(unsigned __int8 *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v62) + 2); v61 = 0; goto LABEL_31; } MessageBoxA(0, "MapLinkGateWin", "error", 0); LOBYTE(v73) = 0; sub_4562E0(v66); v64 = (void (__thiscall ***)(_DWORD, signed int))v72; v73 = -1; if ( !v72 ) return 0; v65 = InterlockedDecrement((volatile LONG *)(v72 + 4)); LABEL_39: if ( !v65 && v64 ) (**v64)(v64, 1); return 0; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8C88: using guessed type int dword_AA8C88; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // ACD970: using guessed type int dword_ACD970; //----- (0055E9F0) -------------------------------------------------------- int __thiscall sub_55E9F0(float *this) { float *v1; // esi int result; // eax v1 = this; result = sub_55DD40((_DWORD **)this); v1[99] = 0.0; return result; } //----- (0055EAA0) -------------------------------------------------------- char __thiscall sub_55EAA0(int this, int a2, char *a3) { unsigned int v3; // eax int v4; // ebx _DWORD *v5; // ecx unsigned int v6; // edi _DWORD *v7; // ecx int v8; // eax int v9; // eax LOBYTE(v3) = a2 - 1; v4 = this; switch ( a2 ) { case 1: v5 = *(_DWORD **)(this + 296); *(_BYTE *)(v4 + 388) = 0; LOBYTE(v3) = sub_4A53F0(v5); break; case 2: if ( a3 ) { v3 = sub_85AA60(a3, "action"); if ( v3 ) { a3 = *(char **)(v3 + 12); v6 = 0; v3 = sub_55EDB0(); if ( v3 ) { while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACD970 + 4), v6) + 3), a3) ) { ++v6; v3 = sub_55EDB0(); if ( v6 >= v3 ) return v3; } HIBYTE(a2) = *(_BYTE *)sub_7474E0((_DWORD *)(dword_ACD970 + 4), v6); sub_6F3D10(&off_AB7F2C, 6, 26, (char *)&a2 + 3, 1u); if ( *(_DWORD *)(v4 + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v4 + 236) + 4))(36, 0, v4 + 232); if ( *(_DWORD *)(v4 + 236) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v4 + 236) + 20))(36, 0, v4 + 232); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v4 + 232) + 20))( v4 + 232, 36, 0, v4 + 232); v7 = *(_DWORD **)(v4 + 296); *(_BYTE *)(v4 + 388) = 0; LOBYTE(v3) = sub_4A53F0(v7); } } } break; case 6: v8 = *(_DWORD *)(this + 400); if ( v8 ) *(_DWORD *)(this + 400) = v8 - 1; else *(_DWORD *)(this + 400) = *(_DWORD *)(this + 404); LOBYTE(v3) = sub_55DD40((_DWORD **)this); break; case 7: v9 = *(_DWORD *)(this + 400); if ( v9 == *(_DWORD *)(this + 404) ) *(_DWORD *)(this + 400) = 0; else *(_DWORD *)(this + 400) = v9 + 1; LOBYTE(v3) = sub_55DD40((_DWORD **)this); break; default: return v3; } return v3; } // AB7F2C: using guessed type void **off_AB7F2C; // ACD970: using guessed type int dword_ACD970; //----- (0055EC60) -------------------------------------------------------- volatile LONG *__cdecl sub_55EC60(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x198u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_55DB00((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0055ED90) -------------------------------------------------------- int __cdecl sub_55ED90(unsigned int a1) { return sub_7474E0((_DWORD *)(dword_ACD970 + 4), a1); } // ACD970: using guessed type int dword_ACD970; //----- (0055EDB0) -------------------------------------------------------- int sub_55EDB0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD970 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD970: using guessed type int dword_ACD970; //----- (0055EDD0) -------------------------------------------------------- _DWORD *__thiscall sub_55EDD0(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &MapLinkGateWin::`vftable'; *((_DWORD *)this + 58) = &MapLinkGateWin::`vftable'; v3 = *((_DWORD *)this + 96); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CE7A8: using guessed type void *MapLinkGateWin::`vftable'; // 9CE7C4: using guessed type void *MapLinkGateWin::`vftable'; //----- (0055EF00) -------------------------------------------------------- __int16 __thiscall sub_55EF00(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[370] = a2; return result; } //----- (0055EF20) -------------------------------------------------------- bool __thiscall sub_55EF20(_WORD *this, __int16 a2) { __int16 v2; // ax bool result; // al v2 = this[370]; if ( v2 == -1 ) result = 0; else result = v2 == a2; return result; } //----- (0055EF50) -------------------------------------------------------- int __thiscall sub_55EF50(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // edi int v4; // eax int result; // eax int v6; // edi int v7; // eax int v8; // edi int v9; // eax int v10; // edi int v11; // eax int v12; // edi int v13; // eax int v14; // edi int v15; // eax int v16; // edi int v17; // eax int v18; // edi int v19; // eax v2 = this; switch ( a2 ) { case 2: v3 = *this[160]; v4 = (*(int (**)(void))(*this[163] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v3 + 472))(v2[160], v4); v2[183] = (_DWORD *)1; break; case 3: v6 = *this[160]; v7 = (*(int (**)(void))(*this[164] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v6 + 472))(v2[160], v7); v2[183] = (_DWORD *)2; break; case 4: v8 = *this[160]; v9 = (*(int (**)(void))(*this[165] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v8 + 472))(v2[160], v9); v2[183] = (_DWORD *)3; break; case 5: v10 = *this[160]; v11 = (*(int (**)(void))(*this[166] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v10 + 472))(v2[160], v11); v2[183] = (_DWORD *)4; break; case 6: v12 = *this[160]; v13 = (*(int (**)(void))(*this[167] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v12 + 472))(v2[160], v13); v2[183] = (_DWORD *)5; break; case 7: v14 = *this[160]; v15 = (*(int (**)(void))(*this[168] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v14 + 472))(v2[160], v15); v2[183] = (_DWORD *)6; break; case 8: v16 = *this[160]; v17 = (*(int (**)(void))(*this[169] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v16 + 472))(v2[160], v17); v2[183] = (_DWORD *)7; break; default: v18 = *this[160]; v19 = (*(int (**)(void))(*this[162] + 484))(); result = (*(int (__thiscall **)(_DWORD *, int))(v18 + 472))(v2[160], v19); v2[183] = 0; break; } return result; } //----- (0055F150) -------------------------------------------------------- int __thiscall sub_55F150(char *this, char a2) { char *v2; // ebx int v3; // esi signed int v4; // edi int result; // eax v2 = this; v3 = (int)(this + 608); v4 = 8; if ( a2 == 1 ) { do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 256))(1); v3 += 4; --v4; } while ( v4 ); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 86) + 256))(1); } else { do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); v3 += 4; --v4; } while ( v4 ); result = (*(int (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 86) + 256))(0); } return result; } //----- (0055F1C0) -------------------------------------------------------- int __thiscall sub_55F1C0(_DWORD *this, int a2) { int result; // eax result = a2; this[186] = a2; return result; } //----- (0055F1D0) -------------------------------------------------------- signed int __thiscall sub_55F1D0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi signed int result; // eax v4 = this; if ( a2 == 27 ) { result = (signed int)a3; if ( a3 ) { if ( !*a3 ) { sub_6AC9F0(&unk_B91250, 0); result = 0xFFFF; v4[128] = 0; *((_WORD *)v4 + 254) = -1; } } } return result; } //----- (0055F210) -------------------------------------------------------- signed int __thiscall sub_55F210(_DWORD *this) { _DWORD *v1; // esi signed int result; // eax v1 = this; if ( this[186] ) { sub_4628B0(); result = 0xFFFF; v1[186] = 0; } *((_WORD *)v1 + 370) = -1; return result; } // 4628B0: using guessed type int sub_4628B0(void); //----- (0055F250) -------------------------------------------------------- __int16 __thiscall sub_55F250(int this, __int16 a2) { int v2; // esi __int16 result; // ax v2 = this; result = *(_WORD *)(this + 740); if ( result == a2 ) { if ( *(_DWORD *)(this + 744) ) { result = sub_4628B0(); *(_DWORD *)(v2 + 744) = 0; } *(_WORD *)(v2 + 740) = -1; } return result; } // 4628B0: using guessed type int sub_4628B0(void); //----- (0055F290) -------------------------------------------------------- signed int __thiscall sub_55F290(_DWORD *this) { _DWORD *v1; // esi int v2; // edi signed int result; // eax v1 = this; v2 = this[2]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = 0; } result = -1; v1[4] = -1; v1[5] = -1; v1[6] = -1; *((_WORD *)v1 + 14) = -1; return result; } //----- (0055F460) -------------------------------------------------------- int __thiscall sub_55F460(_DWORD **this) { _DWORD *v1; // esi int v2; // edi int v3; // eax int v4; // ecx int result; // eax v1 = this; v2 = *this[160]; v3 = (*(int (**)(void))(*this[162] + 484))(); (*(void (__thiscall **)(_DWORD, int))(v2 + 472))(v1[160], v3); v4 = v1[173]; v1[183] = 0; (*(void (__stdcall **)(void *))(*(_DWORD *)v4 + 460))(&unk_9CE9FB); result = v1[170]; *(_BYTE *)(result + 380) = 1; return result; } //----- (0055F4C0) -------------------------------------------------------- BOOL __thiscall sub_55F4C0(float *this) { return flt_ACCFCC - this[181] > 3.0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0055F4F0) -------------------------------------------------------- signed int __stdcall sub_55F4F0(float *a1, int a2) { float *v2; // ecx float *v3; // edx float *v4; // esi double v5; // st7 signed int result; // eax switch ( a2 ) { case 1: v2 = a1; *a1 = 0.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 255.0; v5 = 255.0; a1[2] = 0.0; break; case 2: v2 = a1; *a1 = 13.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 194.0; a1[2] = 254.0; v5 = 255.0; break; case 3: v2 = a1; v5 = 255.0; *a1 = 255.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 228.0; a1[2] = 0.0; break; case 4: v2 = a1; *a1 = 253.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 32.0; a1[2] = 239.0; v5 = 255.0; break; case 5: v2 = a1; *a1 = 120.0; v3 = a1 + 1; a1[1] = 120.0; v5 = 255.0; goto LABEL_11; case 6: v2 = a1; v5 = 225.0; *a1 = 225.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 128.0; a1[2] = 0.0; break; case 7: v2 = a1; v5 = 225.0; *a1 = 225.0; v3 = a1 + 1; v4 = a1 + 2; a1[1] = 0.0; a1[2] = 255.0; break; case 8: v2 = a1; v5 = 255.0; *a1 = 255.0; v3 = a1 + 1; a1[1] = 255.0; v4 = a1 + 2; a1[2] = 0.0; break; default: v2 = a1; v5 = 255.0; v3 = a1 + 1; *a1 = 255.0; a1[1] = 255.0; LABEL_11: v4 = v2 + 2; v2[2] = v5; break; } v2[3] = v5; *v2 = (double)(unsigned __int8)(signed int)*v2 / 255.0; *v3 = (double)(unsigned __int8)(signed int)*v3 / 255.0; result = 3072; *v4 = (double)(unsigned __int8)(signed int)*v4 / 255.0; v2[3] = (double)(unsigned __int8)(signed int)v2[3] / 255.0; return result; } //----- (0055F760) -------------------------------------------------------- int __stdcall sub_55F760(int a1, int a2, int a3) { unsigned int v3; // esi unsigned int v4; // esi v3 = 0; if ( sub_562520() ) { do sub_7474E0((_DWORD *)(dword_ACDA2C + 4), v3++); while ( v3 < sub_562520() ); } v4 = 0; if ( sub_562520() ) { do sub_7474E0((_DWORD *)(dword_ACDA2C + 4), v4++); while ( v4 < sub_562520() ); } return 0; } // ACDA2C: using guessed type int dword_ACDA2C; //----- (0055F7C0) -------------------------------------------------------- bool __stdcall sub_55F7C0(int a1, int a2) { int v3; // esi int v4; // edi int v5; // eax unsigned int v6; // ecx unsigned int v7; // edx unsigned int v8; // edx unsigned int v9; // ecx if ( *(_DWORD *)(a1 + 24) == -1 ) { if ( *(_DWORD *)(a2 + 24) == -1 || *(_DWORD *)(a2 + 24) != -1 ) return 0; } else if ( *(_DWORD *)(a2 + 24) == -1 ) { return 1; } v3 = *(_DWORD *)(a1 + 8); v4 = *(_DWORD *)(a2 + 8); v5 = sub_55F760(*(_DWORD *)(a1 + 8), *(_DWORD *)(a2 + 8), 0); if ( !v5 ) { v6 = *(_DWORD *)(*(_DWORD *)(v3 + 112) + 114); v7 = *(_DWORD *)(*(_DWORD *)(v4 + 112) + 114); v5 = 0; if ( v6 != v7 ) { if ( v6 <= v7 ) { if ( v6 < v7 ) v5 = 1; } else { v5 = -1; } } if ( !v5 ) { v8 = *(_DWORD *)(a1 + 24); v9 = *(_DWORD *)(a2 + 24); v5 = 0; if ( v8 == v9 ) return 0; if ( v8 > v9 ) return 0; if ( v8 < v9 ) v5 = 1; } } return v5 > 0; } //----- (0055F880) -------------------------------------------------------- char __stdcall sub_55F880(_DWORD *a1, _DWORD *a2) { int v3; // esi int v4; // edi int v5; // ecx int v6; // eax int v7; // edx int v8; // esi unsigned int v9; // edx unsigned int v10; // ebx unsigned int v11; // esi unsigned int v12; // ecx bool v13; // cf bool v14; // zf unsigned int v15; // ecx unsigned int v16; // edx unsigned int v17; // ecx unsigned int v18; // edx int v19; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = *(_DWORD *)(a2[2] + 112); v4 = a1[2]; v5 = *(_DWORD *)(v4 + 112); v19 = a2[2]; if ( v5 == -34 || v3 == -34 ) return 0; v6 = -strcmp((const char *)(v5 + 34), (const char *)(v3 + 34)); if ( v6 ) return v6 > 0; v7 = *(_DWORD *)(v3 + 127); v8 = *(_DWORD *)(v5 + 127); if ( v8 != v7 ) { if ( v8 <= v7 ) { if ( v8 < v7 ) v6 = 1; } else { v6 = -1; } } if ( v6 ) return v6 > 0; v9 = a2[4]; v10 = a2[5]; v11 = a1[4]; v12 = a1[5]; v6 = 0; if ( v11 == v9 ) { v13 = v12 < v10; v14 = v12 == v10; if ( v12 == v10 ) goto LABEL_31; } else { v13 = v12 < v10; v14 = v12 == v10; } if ( v13 || (v13 || v14) && v11 <= v9 ) { if ( v12 <= v10 && (v12 < v10 || v11 < v9) ) v6 = 1; } else { v6 = -1; } LABEL_31: if ( !v6 ) { v6 = sub_55F760(v4, v19, 0); if ( !v6 ) { v15 = *(_DWORD *)(*(_DWORD *)(v4 + 112) + 114); v16 = *(_DWORD *)(*(_DWORD *)(v19 + 112) + 114); v6 = 0; if ( v15 != v16 ) { if ( v15 <= v16 ) { if ( v15 < v16 ) v6 = 1; } else { v6 = -1; } } if ( !v6 ) { v17 = a2[6]; v18 = a1[6]; v6 = 0; if ( v18 == v17 ) return 0; if ( v18 > v17 ) return 0; if ( v18 < v17 ) v6 = 1; } } } return v6 > 0; } //----- (0055FA10) -------------------------------------------------------- char __stdcall sub_55FA10(_DWORD *a1, _DWORD *a2) { int v3; // esi int v4; // edi int v5; // ecx _BYTE *v6; // eax _BYTE *v7; // edx bool v8; // cf unsigned __int8 v9; // bl int v10; // eax int v11; // edx int v12; // esi unsigned int v13; // edx unsigned int v14; // ebx unsigned int v15; // esi unsigned int v16; // ecx signed int v17; // eax bool v18; // cf bool v19; // zf unsigned int v20; // ecx unsigned int v21; // edx signed int v22; // eax unsigned int v23; // ecx unsigned int v24; // edx signed int v25; // eax int v26; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = *(_DWORD *)(a2[2] + 112); v4 = a1[2]; v5 = *(_DWORD *)(v4 + 112); v26 = a2[2]; v6 = (_BYTE *)(v5 + 34); v7 = (_BYTE *)(v3 + 34); if ( v5 == -34 || v3 == -34 ) return 0; while ( 1 ) { v8 = *v6 < *v7; if ( *v6 != *v7 ) break; if ( !*v6 ) goto LABEL_14; v9 = v6[1]; v8 = v9 < v7[1]; if ( v9 != v7[1] ) break; v6 += 2; v7 += 2; if ( !v9 ) { LABEL_14: v10 = 0; goto LABEL_15; } } v10 = -v8 - (v8 - 1); LABEL_15: if ( v10 ) return v10 > 0; v11 = *(_DWORD *)(v3 + 127); v12 = *(_DWORD *)(v5 + 127); if ( v12 != v11 ) { if ( v12 <= v11 ) { if ( v12 < v11 ) v10 = 1; } else { v10 = -1; } } v10 = -v10; if ( v10 ) return v10 > 0; v13 = a2[4]; v14 = a2[5]; v15 = a1[4]; v16 = a1[5]; v17 = 0; if ( v15 == v13 ) { v18 = v16 < v14; v19 = v16 == v14; if ( v16 == v14 ) goto LABEL_37; } else { v18 = v16 < v14; v19 = v16 == v14; } if ( v18 || (v18 || v19) && v15 <= v13 ) { if ( v16 <= v14 && (v16 < v14 || v15 < v13) ) v17 = 1; } else { v17 = -1; } LABEL_37: v10 = -v17; if ( !v10 ) { v10 = sub_55F760(v4, v26, 1); if ( !v10 ) { v20 = *(_DWORD *)(*(_DWORD *)(v4 + 112) + 114); v21 = *(_DWORD *)(*(_DWORD *)(v26 + 112) + 114); v22 = 0; if ( v20 != v21 ) { if ( v20 <= v21 ) { if ( v20 < v21 ) v22 = 1; } else { v22 = -1; } } v10 = -v22; if ( !v10 ) { v23 = a2[6]; v24 = a1[6]; v25 = 0; if ( v24 == v23 ) return 0; if ( v24 > v23 ) return 1; if ( v24 < v23 ) v25 = 1; v10 = -v25; } } } return v10 > 0; } //----- (0055FBB0) -------------------------------------------------------- char __stdcall sub_55FBB0(_DWORD *a1, _DWORD *a2) { int v3; // ebx int v4; // edi int v5; // ecx int v6; // edx int v7; // esi int v8; // eax unsigned int v9; // ecx unsigned int v10; // esi unsigned int v11; // edx unsigned int v12; // ebx bool v13; // cf bool v14; // zf unsigned int v15; // ecx unsigned int v16; // edx unsigned int v17; // ecx unsigned int v18; // edx int v19; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = *(_DWORD *)(a2[2] + 112); v4 = a1[2]; v5 = *(_DWORD *)(v4 + 112); v6 = *(_DWORD *)(v3 + 127); v7 = *(_DWORD *)(v5 + 127); v19 = a2[2]; v8 = 0; if ( v7 != v6 ) { if ( v7 <= v6 ) { if ( v7 < v6 ) v8 = 1; } else { v8 = -1; } } if ( !v8 ) { if ( v5 == -34 || v3 == -34 ) return 0; v8 = -strcmp((const char *)(v5 + 34), (const char *)(v3 + 34)); if ( !v8 ) { v9 = a2[4]; v10 = a2[5]; v11 = a1[4]; v12 = a1[5]; v8 = 0; if ( v11 == v9 ) { v13 = v12 < v10; v14 = v12 == v10; if ( v12 == v10 ) goto LABEL_29; } else { v13 = v12 < v10; v14 = v12 == v10; } if ( v13 || (v13 || v14) && v11 <= v9 ) { if ( v12 <= v10 && (v12 < v10 || v11 < v9) ) v8 = 1; } else { v8 = -1; } LABEL_29: if ( !v8 ) { v8 = sub_55F760(v4, v19, 0); if ( !v8 ) { v15 = *(_DWORD *)(*(_DWORD *)(v4 + 112) + 114); v16 = *(_DWORD *)(*(_DWORD *)(v19 + 112) + 114); v8 = 0; if ( v15 != v16 ) { if ( v15 <= v16 ) { if ( v15 < v16 ) v8 = 1; } else { v8 = -1; } } if ( !v8 ) { v17 = a2[6]; v18 = a1[6]; v8 = 0; if ( v18 == v17 ) return 0; if ( v18 > v17 ) return 0; if ( v18 < v17 ) v8 = 1; } } } return v8 > 0; } } return v8 > 0; } //----- (0055FD40) -------------------------------------------------------- char __stdcall sub_55FD40(_DWORD *a1, _DWORD *a2) { int v3; // ebx int v4; // edi int v5; // ecx int v6; // edx int v7; // esi signed int v8; // eax int v9; // eax _BYTE *v10; // eax _BYTE *v11; // edx bool v12; // cf unsigned __int8 v13; // bl unsigned int v14; // ecx unsigned int v15; // esi unsigned int v16; // edx unsigned int v17; // ebx signed int v18; // eax bool v19; // cf bool v20; // zf unsigned int v21; // ecx unsigned int v22; // edx signed int v23; // eax unsigned int v24; // ecx unsigned int v25; // edx signed int v26; // eax int v27; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = *(_DWORD *)(a2[2] + 112); v4 = a1[2]; v5 = *(_DWORD *)(v4 + 112); v6 = *(_DWORD *)(v3 + 127); v7 = *(_DWORD *)(v5 + 127); v27 = a2[2]; v8 = 0; if ( v7 != v6 ) { if ( v7 <= v6 ) { if ( v7 < v6 ) v8 = 1; } else { v8 = -1; } } v9 = -v8; if ( v9 ) return v9 > 0; v10 = (_BYTE *)(v5 + 34); v11 = (_BYTE *)(v3 + 34); if ( v5 == -34 || v3 == -34 ) return 0; while ( 1 ) { v12 = *v10 < *v11; if ( *v10 != *v11 ) break; if ( !*v10 ) goto LABEL_20; v13 = v10[1]; v12 = v13 < v11[1]; if ( v13 != v11[1] ) break; v10 += 2; v11 += 2; if ( !v13 ) { LABEL_20: v9 = 0; goto LABEL_21; } } v9 = -v12 - (v12 - 1); LABEL_21: if ( v9 ) return v9 > 0; v14 = a2[4]; v15 = a2[5]; v16 = a1[4]; v17 = a1[5]; v18 = 0; if ( v16 == v14 ) { v19 = v17 < v15; v20 = v17 == v15; if ( v17 == v15 ) goto LABEL_36; } else { v19 = v17 < v15; v20 = v17 == v15; } if ( v19 || (v19 || v20) && v16 <= v14 ) { if ( v17 <= v15 && (v17 < v15 || v16 < v14) ) v18 = 1; } else { v18 = -1; } LABEL_36: v9 = -v18; if ( !v9 ) { v9 = sub_55F760(v4, v27, 1); if ( !v9 ) { v21 = *(_DWORD *)(*(_DWORD *)(v4 + 112) + 114); v22 = *(_DWORD *)(*(_DWORD *)(v27 + 112) + 114); v23 = 0; if ( v21 != v22 ) { if ( v21 <= v22 ) { if ( v21 < v22 ) v23 = 1; } else { v23 = -1; } } v9 = -v23; if ( !v9 ) { v24 = a2[6]; v25 = a1[6]; v26 = 0; if ( v25 == v24 ) return 0; if ( v25 > v24 ) return 1; if ( v25 < v24 ) v26 = 1; v9 = -v26; } } } return v9 > 0; } //----- (0055FEE0) -------------------------------------------------------- bool __stdcall sub_55FEE0(_DWORD *a1, _DWORD *a2) { unsigned int v3; // edx unsigned int v4; // ebx unsigned int v5; // esi int v6; // edi unsigned int v7; // ecx int v8; // eax bool v9; // cf bool v10; // zf int v11; // ecx int v12; // edx unsigned int v13; // ecx unsigned int v14; // edx unsigned int v15; // ecx unsigned int v16; // edx int v17; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = a2[4]; v4 = a2[5]; v5 = a1[4]; v17 = a2[2]; v6 = a1[2]; v7 = a1[5]; v8 = 0; if ( v5 == v3 ) { v9 = v7 < v4; v10 = v7 == v4; if ( v7 == v4 ) goto LABEL_20; } else { v9 = v7 < v4; v10 = v7 == v4; } if ( v9 || (v9 || v10) && v5 <= v3 ) { if ( v7 <= v4 && (v7 < v4 || v5 < v3) ) v8 = 1; } else { v8 = -1; } LABEL_20: if ( !v8 ) { if ( *(_DWORD *)(v6 + 112) == -34 || *(_DWORD *)(v17 + 112) == -34 ) return 0; v8 = -strcmp((const char *)(*(_DWORD *)(v6 + 112) + 34), (const char *)(*(_DWORD *)(v17 + 112) + 34)); if ( !v8 ) { v11 = *(_DWORD *)(*(_DWORD *)(v17 + 112) + 127); v12 = *(_DWORD *)(*(_DWORD *)(v6 + 112) + 127); v8 = 0; if ( v12 != v11 ) { if ( v12 <= v11 ) { if ( v12 < v11 ) v8 = 1; } else { v8 = -1; } } if ( !v8 ) { v8 = sub_55F760(v6, v17, 0); if ( !v8 ) { v13 = *(_DWORD *)(*(_DWORD *)(v6 + 112) + 114); v14 = *(_DWORD *)(*(_DWORD *)(v17 + 112) + 114); v8 = 0; if ( v13 != v14 ) { if ( v13 <= v14 ) { if ( v13 < v14 ) v8 = 1; } else { v8 = -1; } } if ( !v8 ) { v15 = a2[6]; v16 = a1[6]; v8 = 0; if ( v16 == v15 ) return 0; if ( v16 > v15 ) return 0; if ( v16 < v15 ) v8 = 1; } } } } } return v8 > 0; } //----- (00560070) -------------------------------------------------------- bool __stdcall sub_560070(_DWORD *a1, _DWORD *a2) { unsigned int v3; // edx unsigned int v4; // ebx unsigned int v5; // esi int v6; // edi unsigned int v7; // ecx signed int v8; // eax bool v9; // cf bool v10; // zf int v11; // eax _BYTE *v12; // edx _BYTE *v13; // eax bool v14; // cf unsigned __int8 v15; // bl int v16; // ecx int v17; // edx signed int v18; // eax unsigned int v19; // ecx unsigned int v20; // edx signed int v21; // eax unsigned int v22; // ecx unsigned int v23; // edx signed int v24; // eax int v25; // [esp+8h] [ebp-4h] if ( a1[6] == -1 ) { if ( a2[6] == -1 || a2[6] != -1 ) return 0; } else if ( a2[6] == -1 ) { return 1; } v3 = a2[4]; v4 = a2[5]; v5 = a1[4]; v25 = a2[2]; v6 = a1[2]; v7 = a1[5]; v8 = 0; if ( v5 != v3 ) { v9 = v7 < v4; v10 = v7 == v4; goto LABEL_12; } v9 = v7 < v4; v10 = v7 == v4; if ( v7 != v4 ) { LABEL_12: if ( v9 || (v9 || v10) && v5 <= v3 ) { if ( v7 <= v4 && (v7 < v4 || v5 < v3) ) v8 = 1; } else { v8 = -1; } } v11 = -v8; if ( !v11 ) { v12 = (_BYTE *)(*(_DWORD *)(v25 + 112) + 34); v13 = (_BYTE *)(*(_DWORD *)(v6 + 112) + 34); if ( *(_DWORD *)(v6 + 112) == -34 || *(_DWORD *)(v25 + 112) == -34 ) return 0; while ( 1 ) { v14 = *v13 < *v12; if ( *v13 != *v12 ) break; if ( !*v13 ) goto LABEL_27; v15 = v13[1]; v14 = v15 < v12[1]; if ( v15 != v12[1] ) break; v13 += 2; v12 += 2; if ( !v15 ) { LABEL_27: v11 = 0; goto LABEL_28; } } v11 = -v14 - (v14 - 1); LABEL_28: if ( !v11 ) { v16 = *(_DWORD *)(*(_DWORD *)(v25 + 112) + 127); v17 = *(_DWORD *)(*(_DWORD *)(v6 + 112) + 127); v18 = 0; if ( v17 != v16 ) { if ( v17 <= v16 ) { if ( v17 < v16 ) v18 = 1; } else { v18 = -1; } } v11 = -v18; if ( !v11 ) { v11 = sub_55F760(v6, v25, 1); if ( !v11 ) { v19 = *(_DWORD *)(*(_DWORD *)(v6 + 112) + 114); v20 = *(_DWORD *)(*(_DWORD *)(v25 + 112) + 114); v21 = 0; if ( v19 != v20 ) { if ( v19 <= v20 ) { if ( v19 < v20 ) v21 = 1; } else { v21 = -1; } } v11 = -v21; if ( !v11 ) { v22 = a2[6]; v23 = a1[6]; v24 = 0; if ( v23 == v22 ) return 0; if ( v23 > v22 ) return 1; if ( v23 < v22 ) v24 = 1; v11 = -v24; } } } } } return v11 > 0; } //----- (00560210) -------------------------------------------------------- volatile LONG *__thiscall sub_560210(void *this, int *a2) { void *v2; // esi char v3; // ST0C_1 int v4; // ST10_4 int v5; // ST14_4 int v6; // ST18_4 const CHAR *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // eax char v10; // ST0C_1 int v11; // ST10_4 int v12; // ST14_4 int v13; // ST18_4 const CHAR *v14; // eax volatile LONG *v15; // eax char v16; // ST14_1 int v17; // ST18_4 int v18; // ST1C_4 int v19; // ST20_4 const CHAR *v20; // eax const char *v21; // eax char v22; // ST14_1 int v23; // ST18_4 int v24; // ST1C_4 int v25; // ST20_4 const CHAR *v26; // eax v2 = this; v3 = dword_AA8C68; v4 = dword_AA8C6C; v5 = dword_AA8C70; v6 = dword_AA8C74; v7 = sub_4090F0(104358766); sub_456980(a2, (int)"Text_ItemName", (int)v7, 0, v3, v4, v5, v6, 4, 0, 0); v8 = sub_456540(a2, (int)"Text_ItemNameInput", 33, 1342177280, 0, 0); *((_DWORD *)v2 + 173) = v8; sub_459980(v8, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(*((_DWORD *)v2 + 173) + 300) + 52))(1); v9 = sub_456E70(a2, 14, "MyNmCh", 0, 2); *((_DWORD *)v2 + 170) = v9; *((_BYTE *)v9 + 380) = 1; v10 = dword_AA8C68; v11 = dword_AA8C6C; v12 = dword_AA8C70; v13 = dword_AA8C74; v14 = sub_4090F0(253487136); v15 = sub_456980(a2, (int)"Text01", (int)v14, 0, v10, v11, v12, v13, 5, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 4); *((_DWORD *)v2 + 171) = sub_456B30(a2, 9, "SearchBtn", 0, 3); v16 = dword_AA8C68; v17 = dword_AA8C6C; v18 = dword_AA8C70; v19 = dword_AA8C74; v20 = sub_4090F0(238490988); sub_456040(*((_DWORD *)v2 + 171), (int)v20, v16, v17, v18, v19, 5); *((_DWORD *)v2 + 172) = sub_456B30(a2, 10, "Btn01", 0, 3); v21 = sub_4090F0(1938464911); sub_8F2EA0(*((void ***)v2 + 172), v21); *(_DWORD *)(*((_DWORD *)v2 + 172) + 272) = dword_AD01E8; v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_4090F0(1623501796); return sub_456040(*((_DWORD *)v2 + 172), (int)v26, v22, v23, v24, v25, 5); } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AD01E8: using guessed type int dword_AD01E8; //----- (00560410) -------------------------------------------------------- int __thiscall sub_560410(_DWORD *this, int *a2) { _DWORD *v2; // esi char v3; // ST0C_1 int v4; // ST10_4 int v5; // ST14_4 int v6; // ST18_4 const CHAR *v7; // eax volatile LONG *v8; // eax char v9; // ST14_1 int v10; // ST18_4 int v11; // ST1C_4 int v12; // ST20_4 const CHAR *v13; // eax char v14; // ST14_1 int v15; // ST18_4 int v16; // ST1C_4 int v17; // ST20_4 const CHAR *v18; // eax char v19; // ST14_1 int v20; // ST18_4 int v21; // ST1C_4 int v22; // ST20_4 const CHAR *v23; // eax char v24; // ST14_1 int v25; // ST18_4 int v26; // ST1C_4 int v27; // ST20_4 const CHAR *v28; // eax char v29; // ST14_1 int v30; // ST18_4 int v31; // ST1C_4 int v32; // ST20_4 const CHAR *v33; // eax char v34; // ST14_1 int v35; // ST18_4 int v36; // ST1C_4 int v37; // ST20_4 const CHAR *v38; // eax char v39; // ST14_1 int v40; // ST18_4 int v41; // ST1C_4 int v42; // ST20_4 const CHAR *v43; // eax char v44; // ST14_1 int v45; // ST18_4 int v46; // ST1C_4 int v47; // ST20_4 const CHAR *v48; // eax volatile LONG *v49; // eax int *v50; // ecx int v51; // edi int v52; // eax int result; // eax v2 = this; v3 = dword_AA8C68; v4 = dword_AA8C6C; v5 = dword_AA8C70; v6 = dword_AA8C74; v7 = sub_4090F0(507405169); sub_456980(a2, (int)"Text_ItemGrade", (int)v7, 0, v3, v4, v5, v6, 4, 0, 0); v2[86] = sub_456820(a2, (int)"ItemGradePulldown", 0); v8 = sub_456B30(a2, 0, "ItemGrade", 0, 3); v2[150] = v8; v2[160] = sub_456040((int)v8, (int)"-", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v2[151] = sub_456B30(a2, 0, "ItemGrade01", 0, 3); v2[152] = sub_456B30(a2, 1, "Text_ItemGradeList01", 0, 3); v9 = dword_AA8C68; v10 = dword_AA8C6C; v11 = dword_AA8C70; v12 = dword_AA8C74; v13 = sub_4090F0(-1458432499); v2[162] = sub_456040(v2[152], (int)v13, v9, v10, v11, v12, 5); v2[153] = sub_456B30(a2, 2, "Text_ItemGradeList02", 0, 3); v14 = dword_AA8C68; v15 = dword_AA8C6C; v16 = dword_AA8C70; v17 = dword_AA8C74; v18 = sub_4090F0(-1458366963); v2[163] = sub_456040(v2[153], (int)v18, v14, v15, v16, v17, 5); v2[154] = sub_456B30(a2, 3, "Text_ItemGradeList03", 0, 3); v19 = dword_AA8C68; v20 = dword_AA8C6C; v21 = dword_AA8C70; v22 = dword_AA8C74; v23 = sub_4090F0(-1458301427); v2[164] = sub_456040(v2[154], (int)v23, v19, v20, v21, v22, 5); v2[155] = sub_456B30(a2, 4, "Text_ItemGradeList04", 0, 3); v24 = dword_AA8C68; v25 = dword_AA8C6C; v26 = dword_AA8C70; v27 = dword_AA8C74; v28 = sub_4090F0(-1458235891); v2[165] = sub_456040(v2[155], (int)v28, v24, v25, v26, v27, 5); v2[156] = sub_456B30(a2, 5, "Text_ItemGradeList05", 0, 3); v29 = dword_AA8C68; v30 = dword_AA8C6C; v31 = dword_AA8C70; v32 = dword_AA8C74; v33 = sub_4090F0(-1458170355); v2[166] = sub_456040(v2[156], (int)v33, v29, v30, v31, v32, 5); v2[157] = sub_456B30(a2, 6, "Text_ItemGradeList06", 0, 3); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_4090F0(-1458104819); v2[167] = sub_456040(v2[157], (int)v38, v34, v35, v36, v37, 5); v2[158] = sub_456B30(a2, 7, "Text_ItemGradeList07", 0, 3); v39 = dword_AA8C68; v40 = dword_AA8C6C; v41 = dword_AA8C70; v42 = dword_AA8C74; v43 = sub_4090F0(-1458039283); v2[168] = sub_456040(v2[158], (int)v43, v39, v40, v41, v42, 5); v2[159] = sub_456B30(a2, 8, "Text_ItemGradeList08", 0, 3); v44 = dword_AA8C68; v45 = dword_AA8C6C; v46 = dword_AA8C70; v47 = dword_AA8C74; v48 = sub_4090F0(-1457973747); v49 = sub_456040(v2[159], (int)v48, v44, v45, v46, v47, 5); v50 = (int *)v2[160]; v2[169] = v49; v51 = *v50; v52 = (*(int (**)(void))(*(_DWORD *)v2[162] + 484))(); result = (*(int (__thiscall **)(_DWORD, int))(v51 + 472))(v2[160], v52); v2[183] = 0; return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; //----- (00560840) -------------------------------------------------------- int __thiscall sub_560840(char *this) { char *v1; // esi _DWORD *v2; // ecx int v3; // ecx int result; // eax _DWORD **v5; // esi const CHAR *v6; // edi v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( flt_ACCFCC - *((float *)v1 + 181) <= 3.0 ) { v5 = (_DWORD **)(v1 + 232); v6 = sub_4090F0(-371205102); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } else { v1[728] = 1; if ( v2 ) { sub_4B8CC0(v2, *((_DWORD *)v1 + 183), *(unsigned __int8 *)(*((_DWORD *)v1 + 170) + 380), 0); sub_466A50(*((_DWORD **)v1 + 174)); sub_465130(*((_DWORD **)v1 + 174)); } v3 = *((_DWORD *)v1 + 171); *((float *)v1 + 181) = flt_ACCFCC; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 240))(0); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00560920) -------------------------------------------------------- char __thiscall sub_560920(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *v3; // ebx signed int v4; // eax _DWORD **v5; // esi const CHAR *v6; // edi int v7; // eax __int16 v8; // di v1 = this; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (_DWORD *)v2; if ( v2 ) { v4 = sub_464F50(v1[174]); if ( v4 >= 0 ) { v7 = v1[176][v4]; v8 = *(_WORD *)(v7 + 28); LOBYTE(v2) = sub_4B8D10(v3, *(_DWORD *)(v7 + 24), *(_WORD *)(v7 + 28)); *((_WORD *)v1 + 370) = v8; } else { v5 = v1 + 58; v6 = sub_4090F0(261182839); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } LOBYTE(v2) = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } } return v2; } //----- (005609C0) -------------------------------------------------------- char __thiscall sub_5609C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; if ( this[186] ) { sub_4628B0(); v1[186] = 0; } *((_WORD *)v1 + 370) = -1; sub_55F460((_DWORD **)v1); sub_466A50((_DWORD *)v1[174]); v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) LOBYTE(v2) = sub_4B8CC0(v2, 0, 1, 1); return (char)v2; } // 4628B0: using guessed type int sub_4628B0(void); //----- (00560A20) -------------------------------------------------------- char __thiscall sub_560A20(_DWORD *this, int a2) { _DWORD *v2; // esi int v4; // eax int v5; // eax int v6; // ecx int v7; // ebx char *v8; // eax signed __int64 v9; // rax char *v10; // eax signed __int64 v11; // rax char *v12; // eax signed __int64 v13; // rax char *v14; // eax signed __int64 v15; // rax char *v16; // eax float v17; // [esp+8h] [ebp-18h] float v18; // [esp+Ch] [ebp-14h] float v19; // [esp+10h] [ebp-10h] int v20; // [esp+18h] [ebp-8h] int v21; // [esp+1Ch] [ebp-4h] v2 = this; if ( !a2 ) return 0; v4 = *(_DWORD *)(a2 + 8); if ( !v4 ) return 0; v5 = *(_DWORD *)(v4 + 112); v21 = v5; if ( !v5 ) return 0; sub_55F4F0(&v17, *(_DWORD *)(v5 + 118)); v17 = (double)(unsigned __int8)(signed int)(v17 * 255.0); v18 = (double)(unsigned __int8)(signed int)(v18 * 255.0); v20 = (signed int)(255.0 * v19); v6 = v2[174]; v19 = (double)(unsigned __int8)v20; v7 = ((int (__thiscall *)(int))loc_466CA0)(v6); sub_4661A0((_DWORD *)v2[174], v7, 1, (void *)(v21 + 34)); sub_464C80((_DWORD *)v2[174], v7, 1u, (signed int)v17, (signed int)v19, (int)&unk_9CE9FA); v8 = sub_7549E0("%d", *(_DWORD *)(v21 + 127)); sub_4661A0((_DWORD *)v2[174], v7, 2, v8); v9 = sub_680E90(*(_QWORD *)(a2 + 16)); v10 = sub_7549E0("%d", v9); sub_4661A0((_DWORD *)v2[174], v7, 3, v10); v11 = sub_680EB0(*(_QWORD *)(a2 + 16)); v12 = sub_7549E0("%d", v11); sub_4661A0((_DWORD *)v2[174], v7, 4, v12); v13 = sub_680F00(*(_QWORD *)(a2 + 16)); v14 = sub_7549E0("%d", v13); sub_4661A0((_DWORD *)v2[174], v7, 5, v14); v15 = sub_680F60(*(_QWORD *)(a2 + 16)); v16 = sub_7549E0("%d", v15); sub_4661A0((_DWORD *)v2[174], v7, 6, v16); return 1; } //----- (00560C10) -------------------------------------------------------- char __thiscall sub_560C10(_DWORD *this, int a2, int a3) { int v4; // eax _DWORD *v5; // esi int v6; // ecx int v7; // eax int v8; // edi const char *v9; // eax _WORD *v10; // edi int v11; // esi int v12; // eax if ( !a3 ) return 0; v4 = this[174]; if ( a2 >= (*(_DWORD *)(v4 + 300) - *(_DWORD *)(v4 + 296)) >> 2 ) return 0; v5 = *(_DWORD **)(*(_DWORD *)(v4 + 296) + 4 * a2); if ( !v5 ) return 0; v6 = v5[91]; v7 = v5[92]; if ( v6 == v7 ) return 0; v8 = 0; if ( !((v7 - v6) >> 2) ) return 0; while ( 1 ) { v9 = *(const char **)(*(_DWORD *)(v5[91] + 4 * v8) + 8); if ( v9 ) { if ( !_stricmp(v9, "InvItemSlot001_icon") ) break; } if ( ++v8 >= (unsigned int)((v5[92] - v5[91]) >> 2) ) return 0; } v10 = *(_WORD **)(v5[91] + 4 * v8); (*(void (__thiscall **)(_DWORD *))(*v5 + 164))(v5); v11 = (*(int (__thiscall **)(_DWORD *))(*v5 + 148))(v5); v12 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v10 + 148))(v10); (*(void (__thiscall **)(_WORD *, unsigned int))(*(_DWORD *)v10 + 176))(v10, (unsigned int)(v11 - v12) >> 1); sub_5D5B70(v10, a3, 1); sub_547C20((int *)dword_ACEC34, a3); return 1; } // ACEC34: using guessed type int dword_ACEC34; //----- (00560D10) -------------------------------------------------------- void __thiscall sub_560D10(float *this, int a2) { float *v2; // esi v2 = this; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4E3710(*((_DWORD **)v2 + 174), *((_DWORD **)v2 + 175)); if ( !(*(unsigned __int8 (**)(void))(**((_DWORD **)v2 + 171) + 244))() && flt_ACCFCC - v2[181] > 3.0 ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 171) + 240))(1); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00560D80) -------------------------------------------------------- int __thiscall sub_560D80(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx unsigned int v3; // eax unsigned int v4; // esi unsigned int v5; // ebx int v6; // eax int v7; // eax int v8; // eax int v10; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[174]; v3 = v2[86]; if ( (v3 & 0x80000000) == 0 ) { v10 = 0; v4 = v3 + ((v2[75] - v2[74]) >> 2); v5 = v2[86]; if ( v3 < v4 ) { do { v6 = (v1[177] - v1[176]) >> 2; if ( !v6 || v6 - 1 < v5 ) break; v7 = *(_DWORD *)(v1[176] + 4 * v5); if ( *(_DWORD *)(v7 + 24) == -1 ) { ++v4; } else { v8 = *(_DWORD *)(v7 + 8); if ( v8 ) sub_560C10(v1, v10++, v8); else ++v4; } ++v5; } while ( v5 < v4 ); } } return sub_465130((_DWORD *)v1[174]); } //----- (00560E20) -------------------------------------------------------- void __thiscall sub_560E20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[175]; if ( v2 ) { v3 = v1[174]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[174] + 344) = *(_DWORD *)(v1[175] + 300); sub_560D80(v1); } } } //----- (00560E70) -------------------------------------------------------- float *__thiscall sub_560E70(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MarketSearchWin::`vftable'; *((_DWORD *)v1 + 58) = &MarketSearchWin::`vftable'; v1[86] = 0.0; `eh vector constructor iterator'(v1 + 87, 0x1Cu, 9, sub_401C00, sub_636A10); v1[170] = 0.0; v1[171] = 0.0; v1[172] = 0.0; v1[173] = 0.0; v1[174] = 0.0; v1[175] = 0.0; v1[176] = 0.0; v1[177] = 0.0; v1[178] = 0.0; v1[181] = 0.0; v1[180] = 0.0; *((_BYTE *)v1 + 728) = 0; v1[186] = 0.0; v1[187] = 0.0; *((_WORD *)v1 + 370) = -1; v1[150] = 0.0; v1[160] = 0.0; v1[151] = 0.0; v1[161] = 0.0; v1[152] = 0.0; v1[162] = 0.0; v1[153] = 0.0; v1[163] = 0.0; v1[154] = 0.0; v1[164] = 0.0; v1[155] = 0.0; v1[165] = 0.0; v1[156] = 0.0; v1[166] = 0.0; v1[157] = 0.0; v1[167] = 0.0; v1[158] = 0.0; v1[168] = 0.0; v1[159] = 0.0; v1[169] = 0.0; v1[183] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CEDA0: using guessed type void *MarketSearchWin::`vftable'; // 9CEDBC: using guessed type void *MarketSearchWin::`vftable'; //----- (00560FD0) -------------------------------------------------------- LONG __thiscall sub_560FD0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax v1 = this; *this = &MarketSearchWin::`vftable'; this[58] = &MarketSearchWin::`vftable'; v2 = (void *)this[176]; if ( v2 ) operator delete(v2); v1[176] = 0; v1[177] = 0; v1[178] = 0; `eh vector destructor iterator'(v1 + 87, 0x1Cu, 9, sub_636A10); return sub_8F10F0(v1); } // 9CEDA0: using guessed type void *MarketSearchWin::`vftable'; // 9CEDBC: using guessed type void *MarketSearchWin::`vftable'; //----- (00561070) -------------------------------------------------------- char __thiscall sub_561070(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ebx int v3; // edi v1 = this; sub_466A50(this[174]); v2 = v1[176]; if ( v2 != v1[177] ) { v3 = 0; do { if ( *(_DWORD *)(v1[176][v3] + 24) != -1 ) sub_560A20(v1, v1[176][v3]); ++v2; ++v3; } while ( v2 != v1[177] ); } sub_464DA0(v1[174], 1u, 4); sub_464DA0(v1[174], 2u, 5); sub_464DA0(v1[174], 3u, 6); sub_464DA0(v1[174], 4u, 6); sub_464DA0(v1[174], 5u, 6); sub_464DA0(v1[174], 6u, 6); sub_560D80(v1); return 1; } //----- (00561120) -------------------------------------------------------- int __thiscall sub_561120(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int result; // eax v1 = this; v2 = this[176]; if ( v2 != this[177] ) { do { result = (*(int (**)(void))(**(_DWORD **)v2 + 4))(); v2 += 4; } while ( v2 != v1[177] ); } v1[180] = 0; return result; } //----- (00561160) -------------------------------------------------------- volatile LONG *__cdecl sub_561160(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2F0u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_560E70((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00561290) -------------------------------------------------------- int __thiscall sub_561290(float *this) { float *v1; // edi int v2; // esi int result; // eax v1 = this; v2 = *((_DWORD *)this + 176); if ( v2 != *((_DWORD *)this + 177) ) { do { (*(void (**)(void))(**(_DWORD **)v2 + 4))(); v2 += 4; } while ( v2 != *((_DWORD *)v1 + 177) ); } result = 0; v1[180] = 0.0; v1[181] = flt_ACCFCC; byte_ACF576 = 0; return result; } // ACCFCC: using guessed type float flt_ACCFCC; // ACF576: using guessed type char byte_ACF576; //----- (005612E0) -------------------------------------------------------- char __thiscall sub_5612E0(char *this, int a2) { int v2; // ebx int v4; // edx char *v5; // eax int v6; // esi int v7; // edi int v8; // edx int *v9; // eax int v10; // eax int v11; // eax char *v12; // edx char v13; // cl int i; // esi const CHAR *v15; // ebx int v16; // edx int v17; // eax const void **v18; // esi unsigned int v19; // ecx _DWORD *v20; // eax char *v21; // edi unsigned int v22; // eax _BYTE *v23; // edx int v24; // ecx int v25; // edi unsigned int v26; // eax unsigned int v27; // eax unsigned int v28; // ecx char *v29; // ecx _DWORD *v30; // eax int v31; // ecx unsigned int v32; // eax unsigned int v33; // eax unsigned int v34; // ecx char *v35; // ecx char **v36; // eax int v37; // edx unsigned int v38; // ebx _DWORD *v39; // eax char *v40; // edi unsigned int v41; // eax _BYTE *v42; // edx int v43; // ecx int v44; // edi unsigned int v45; // eax unsigned int v46; // eax unsigned int v47; // ecx char *v48; // ecx _DWORD *v49; // eax int v50; // ecx unsigned int v51; // eax unsigned int v52; // eax unsigned int v53; // ecx char *v54; // ecx char **v55; // eax int v56; // edi int v57; // ecx char *v58; // eax int v59; // esi int v60; // ebx int v61; // edx int *v62; // eax int v63; // eax int v64; // eax char *v65; // edx char v66; // cl char *v67; // esi int v68; // esi char *v69; // eax int v70; // ebx char *v71; // eax char *v72; // [esp+8h] [ebp-58h] int v73; // [esp+Ch] [ebp-54h] unsigned int v74; // [esp+Ch] [ebp-54h] unsigned int v75; // [esp+Ch] [ebp-54h] int v76; // [esp+10h] [ebp-50h] unsigned int v77; // [esp+10h] [ebp-50h] int v78; // [esp+10h] [ebp-50h] int v79; // [esp+10h] [ebp-50h] char *v80; // [esp+14h] [ebp-4Ch] unsigned __int8 v81; // [esp+1Bh] [ebp-45h] char v82[64]; // [esp+1Ch] [ebp-44h] v72 = this; v2 = a2 + 3; if ( a2 == -3 ) return 0; v73 = 0; v76 = 0; if ( *(_BYTE *)(a2 + 2) <= 0u ) { LABEL_14: if ( v72[728] == 1 ) { if ( v73 ) { if ( v73 ) { sub_561120(v72); v72[728] = 0; } } else { for ( i = *((_DWORD *)v72 + 176); i != *((_DWORD *)v72 + 177); i += 4 ) (*(void (**)(void))(**(_DWORD **)i + 4))(); *((_DWORD *)v72 + 180) = 0; v72[728] = 0; v15 = sub_4090F0(-1329220161); if ( *((_DWORD *)v72 + 59) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v72 + 59) + 4))(25, v15, v72 + 232); if ( *((_DWORD *)v72 + 59) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v72 + 59) + 20))(25, v15, v72 + 232); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v72 + 58) + 20))( v72 + 232, 25, v15, v72 + 232); } } v16 = *(unsigned __int8 *)(a2 + 2); v17 = *((_DWORD *)v72 + 180); v18 = (const void **)(v72 + 704); v19 = (*((_DWORD *)v72 + 178) - *((_DWORD *)v72 + 176)) >> 2; if ( v17 + v16 >= v19 ) { v77 = v16 + v17 - v19; v74 = 0; if ( v77 ) { do { v20 = operator new(0x20u); if ( v20 ) { *v20 = &MarketSearchItem::`vftable'; v20[2] = 0; v20[4] = -1; v20[5] = -1; v20[6] = -1; *((_WORD *)v20 + 14) = -1; v21 = (char *)v20; } else { v21 = 0; } v22 = *((_DWORD *)v72 + 177); v80 = v21; if ( (unsigned int)&v80 >= v22 || (v23 = *v18, *v18 > &v80) ) { v31 = *((_DWORD *)v72 + 178); if ( v22 == v31 ) { v32 = (signed int)(v22 - (_DWORD)*v18) >> 2; if ( v32 > 0x3FFFFFFE ) LABEL_57: std::_Xlength_error("vector too long"); v33 = v32 + 1; v34 = (v31 - (signed int)*v18) >> 2; if ( v33 > v34 ) { if ( 0x3FFFFFFF - (v34 >> 1) >= v34 ) v35 = (char *)((v34 >> 1) + v34); else v35 = 0; if ( (unsigned int)v35 < v33 ) v35 = (char *)v33; sub_74E360(v18, v35); } } v36 = (char **)*((_DWORD *)v72 + 177); if ( v36 ) *v36 = v21; } else { v24 = *((_DWORD *)v72 + 178); v25 = ((char *)&v80 - v23) >> 2; if ( v22 == v24 ) { v26 = (signed int)(v22 - (_DWORD)v23) >> 2; if ( v26 > 0x3FFFFFFE ) goto LABEL_57; v27 = v26 + 1; v28 = (v24 - (signed int)v23) >> 2; if ( v27 > v28 ) { if ( 0x3FFFFFFF - (v28 >> 1) >= v28 ) v29 = (char *)((v28 >> 1) + v28); else v29 = 0; if ( (unsigned int)v29 < v27 ) v29 = (char *)v27; sub_74E360(v18, v29); } } v30 = (_DWORD *)*((_DWORD *)v72 + 177); if ( v30 ) *v30 = *((_DWORD *)*v18 + v25); } *((_DWORD *)v72 + 177) += 4; ++v74; } while ( v74 < v77 ); } v37 = (*((_DWORD *)v72 + 177) - *((_DWORD *)v72 + 176)) >> 2; v38 = ((*((_DWORD *)v72 + 178) - *((_DWORD *)v72 + 176)) >> 2) - v37; v78 = ((*((_DWORD *)v72 + 178) - *((_DWORD *)v72 + 176)) >> 2) - v37; v75 = 0; if ( (*((_DWORD *)v72 + 178) - *((_DWORD *)v72 + 176)) >> 2 != v37 ) { do { v39 = operator new(0x20u); if ( v39 ) { *v39 = &MarketSearchItem::`vftable'; v39[2] = 0; v39[4] = -1; v39[5] = -1; v39[6] = -1; *((_WORD *)v39 + 14) = -1; v40 = (char *)v39; } else { v40 = 0; } v41 = *((_DWORD *)v72 + 177); v80 = v40; if ( (unsigned int)&v80 >= v41 || (v42 = *v18, *v18 > &v80) ) { v50 = *((_DWORD *)v72 + 178); if ( v41 == v50 ) { v51 = (signed int)(v41 - (_DWORD)*v18) >> 2; if ( v51 > 0x3FFFFFFE ) goto LABEL_57; v52 = v51 + 1; v53 = (v50 - (signed int)*v18) >> 2; if ( v52 > v53 ) { if ( 0x3FFFFFFF - (v53 >> 1) >= v53 ) v54 = (char *)((v53 >> 1) + v53); else v54 = 0; if ( (unsigned int)v54 < v52 ) v54 = (char *)v52; sub_74E360(v18, v54); v38 = v78; } } v55 = (char **)*((_DWORD *)v72 + 177); if ( v55 ) *v55 = v40; } else { v43 = *((_DWORD *)v72 + 178); v44 = ((char *)&v80 - v42) >> 2; if ( v41 == v43 ) { v45 = (signed int)(v41 - (_DWORD)v42) >> 2; if ( v45 > 0x3FFFFFFE ) goto LABEL_57; v46 = v45 + 1; v47 = (v43 - (signed int)v42) >> 2; if ( v46 > v47 ) { if ( 0x3FFFFFFF - (v47 >> 1) >= v47 ) v48 = (char *)((v47 >> 1) + v47); else v48 = 0; if ( (unsigned int)v48 < v46 ) v48 = (char *)v46; sub_74E360(v18, v48); v38 = v78; } } v49 = (_DWORD *)*((_DWORD *)v72 + 177); if ( v49 ) *v49 = *((_DWORD *)*v18 + v44); } *((_DWORD *)v72 + 177) += 4; ++v75; } while ( v75 < v38 ); } } v56 = a2 + 3; if ( a2 != -3 ) { v79 = 0; if ( !*(_BYTE *)(a2 + 2) ) { LABEL_104: sub_5655E0( *((void **)v72 + 176), *((_DWORD *)v72 + 177), (*((_DWORD *)v72 + 177) - *((_DWORD *)v72 + 176)) >> 2, (char)v80); sub_561070((_DWORD **)v72); return 1; } while ( 1 ) { v57 = *((_DWORD *)v72 + 173); v81 = *(_BYTE *)v56; v58 = (char *)(*(int (**)(void))(*(_DWORD *)v57 + 452))(); v59 = dword_ACB230; v60 = *(unsigned __int16 *)(v56 + 15); v61 = *(_DWORD *)dword_ACB230; v80 = v58; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(v61 + 16))(dword_ACB230, v60) ) break; if ( (unsigned __int16)v60 > *(_WORD *)(v59 + 200) ) break; v62 = (int *)(*(_DWORD *)(v59 + 196) + 4 * v60); if ( !*v62 ) break; v63 = *v62; if ( !v63 || !v80 ) break; v64 = v63 + 34; v65 = &v82[-v64]; do { v66 = *(_BYTE *)v64; v65[v64] = *(_BYTE *)v64; ++v64; } while ( v66 ); v67 = v80; _strlwr(v80); _strlwr(v82); if ( strstr(v82, v67) ) { v68 = *(_DWORD *)(*((_DWORD *)v72 + 176) + 4 * *((_DWORD *)v72 + 180)); v69 = (char *)sub_6876E0((unsigned __int16 *)(v56 + 15)); v70 = *(_DWORD *)(v68 + 8); v80 = v69; if ( (char *)v70 != v69 ) { if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) && v70 ) (**(void (__thiscall ***)(int, signed int))v70)(v70, 1); v71 = v80; *(_DWORD *)(v68 + 8) = v80; if ( v71 ) InterlockedIncrement((volatile LONG *)v71 + 1); } *(_DWORD *)(v68 + 16) = *(_DWORD *)(v56 + 7); *(_DWORD *)(v68 + 20) = *(_DWORD *)(v56 + 11); *(_DWORD *)(v68 + 24) = *(_DWORD *)(v56 + 1); *(_WORD *)(v68 + 28) = *(_WORD *)(v56 + 5); ++*((_DWORD *)v72 + 180); v56 += v81 + 1; } else { v56 += v81 + 1; } if ( ++v79 >= (unsigned int)*(unsigned __int8 *)(a2 + 2) ) goto LABEL_104; } } } else { while ( 1 ) { v4 = **((_DWORD **)v72 + 173); v81 = *(_BYTE *)v2; v5 = (char *)(*(int (**)(void))(v4 + 452))(); v6 = dword_ACB230; v7 = *(unsigned __int16 *)(v2 + 15); v8 = *(_DWORD *)dword_ACB230; v80 = v5; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(v8 + 16))(dword_ACB230, v7) ) break; if ( (unsigned __int16)v7 > *(_WORD *)(v6 + 200) ) break; v9 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v7); if ( !*v9 ) break; v10 = *v9; if ( !v10 || !v80 ) break; v11 = v10 + 34; v12 = &v82[-v11]; do { v13 = *(_BYTE *)v11; v12[v11] = *(_BYTE *)v11; ++v11; } while ( v13 ); _strlwr(v80); _strlwr(v82); if ( strstr(v82, v80) ) ++v73; v2 += v81 + 1; if ( ++v76 >= (unsigned int)*(unsigned __int8 *)(a2 + 2) ) goto LABEL_14; } } return 0; } // 9CED94: using guessed type void *MarketSearchItem::`vftable'; // ACB230: using guessed type int dword_ACB230; // 5612E0: using guessed type char var_44[64]; //----- (00561910) -------------------------------------------------------- char __thiscall sub_561910(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // ecx int v4; // ST08_4 int v5; // ST04_4 void *v7; // ecx int v8; // ST08_4 int v9; // ST04_4 int v10; // eax void *v11; // ecx int v12; // [esp-8h] [ebp-Ch] v2 = this; if ( a2 == 11 ) { v10 = this[177]; v11 = (void *)this[176]; v12 = (v10 - (signed int)v11) >> 2; if ( v2[187] == 1 ) { v2[187] = 2; sub_5656D0(v11, v10, v12, 11); sub_561070((_DWORD **)v2); return 1; } v2[187] = 1; sub_5657C0(v11, v10, v12, 11); goto LABEL_15; } if ( a2 != 12 ) { if ( a2 == 13 ) { v3 = (void *)this[176]; if ( v2[187] == 5 ) { v4 = (v2[177] - (signed int)v3) >> 2; v5 = v2[177]; v2[187] = 6; sub_565A90(v3, v5, v4, a2); } else { v2[187] = 5; sub_565B80(v3, v2[177], (v2[177] - (signed int)v3) >> 2, a2); } sub_561070((_DWORD **)v2); return 1; } LABEL_15: sub_561070((_DWORD **)v2); return 1; } v7 = (void *)this[176]; if ( v2[187] == 3 ) { v8 = (v2[177] - (signed int)v7) >> 2; v9 = v2[177]; v2[187] = 4; sub_5658B0(v7, v9, v8, 12); } else { v2[187] = 3; sub_5659A0(v7, v2[177], (v2[177] - (signed int)v7) >> 2, 12); } sub_561070((_DWORD **)v2); return 1; } //----- (00561A80) -------------------------------------------------------- void __thiscall sub_561A80(int this, int a2, int a3) { int v3; // esi char v4; // al char v5; // al v3 = this; switch ( a2 ) { case 0: v4 = (*(int (**)(void))(**(_DWORD **)(this + 344) + 260))(); sub_55F150((char *)v3, v4 == 0); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: sub_55EF50((_DWORD **)this, a2); v5 = (*(int (**)(void))(**(_DWORD **)(v3 + 344) + 260))(); sub_55F150((char *)v3, v5 == 0); break; case 9: sub_560840((char *)this); break; case 10: sub_560920((_DWORD **)this); break; case 11: case 12: case 13: sub_561910((_DWORD *)this, a2); break; case 14: *(_BYTE *)(*(_DWORD *)(this + 680) + 380) = *(_BYTE *)(*(_DWORD *)(this + 680) + 380) == 0; break; case 15: sub_560E20((_DWORD *)this); break; default: return; } } //----- (00561B70) -------------------------------------------------------- char __thiscall sub_561B70(void *this, int a2) { int v2; // esi char *v3; // eax int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi LONG v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // edi int v13; // eax volatile LONG *v14; // edi const CHAR *v15; // eax _DWORD *v16; // edi int *v17; // edi _DWORD *v18; // edi int v19; // edi _DWORD *v20; // edi _DWORD *v21; // edi _DWORD *v22; // edi _DWORD *v23; // edi _DWORD *v24; // edi volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax int v28; // eax _DWORD *v29; // eax volatile LONG *v30; // edi char v31; // ST40_1 int v32; // ST44_4 int v33; // ST48_4 int v34; // ST4C_4 const CHAR *v35; // eax volatile LONG *v36; // edi char v37; // ST40_1 int v38; // ST44_4 int v39; // ST48_4 int v40; // ST4C_4 const CHAR *v41; // eax volatile LONG *v42; // eax volatile LONG *v43; // eax volatile LONG *v44; // eax volatile LONG *v45; // eax int v46; // edi void (__thiscall ***v47)(_DWORD, signed int); // esi void *v48; // [esp+64h] [ebp-80h] int v49; // [esp+68h] [ebp-7Ch] int v50; // [esp+6Ch] [ebp-78h] char v51; // [esp+70h] [ebp-74h] char v52; // [esp+74h] [ebp-70h] int v53; // [esp+78h] [ebp-6Ch] int v54; // [esp+7Ch] [ebp-68h] int v55; // [esp+80h] [ebp-64h] int v56; // [esp+84h] [ebp-60h] int v57; // [esp+88h] [ebp-5Ch] _DWORD *v58; // [esp+8Ch] [ebp-58h] int v59; // [esp+90h] [ebp-54h] int v60[5]; // [esp+94h] [ebp-50h] int v61; // [esp+A8h] [ebp-3Ch] int v62; // [esp+ACh] [ebp-38h] int v63; // [esp+B0h] [ebp-34h] int v64; // [esp+B4h] [ebp-30h] void *v65; // [esp+B8h] [ebp-2Ch] int v66; // [esp+C8h] [ebp-1Ch] unsigned int v67; // [esp+CCh] [ebp-18h] int v68; // [esp+E0h] [ebp-4h] v2 = (int)this; v64 = 0; v68 = 0; v61 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\MarketSearch.nif"); sub_8F66B0(v3, (int)&v64, v61); v4 = v64; if ( !v64 ) { if ( off_AC0554 ) { off_AC0554("Game\\MarketSearch.nif load fila", "LoadFail", 0); v4 = v64; } v68 = -1; if ( v4 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } return 0; } v63 = 0; v62 = 0; v7 = sub_8FB140(v64, (int)"Frame", (int)&v63, (int)&v62, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"MarketSearchWin", 0) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v64; v68 = -1; if ( v64 ) { v9 = InterlockedDecrement((volatile LONG *)(v64 + 4)); LABEL_14: if ( !v9 && v8 ) (**v8)(v8, 1); return 0; } return 0; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v64, (int)"Theme", (int)&v63, (int)&v62, v10); else v11 = sub_8FB140(v64, (int)"Theme", (int)&v63, (int)&v62, 0); sub_8F3EB0(v63, v62, (int)v11, v2, 0, 0); sub_456260(v60); LOBYTE(v68) = 1; sub_455FF0(v60, v2); sub_456000(v60, 0, 0); sub_456380(v60, v64); sub_456820(v60, (int)"Plane01", 0); sub_456820(v60, (int)"Line01", 0); sub_4564D0(v60, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("HelpLinkNor") ) { v12 = sub_8FB140(v64, (int)"HelpLinkNor", (int)&v63, (int)&v62, 0); sub_8FB650(v12, v64, (int)"HelpLinkClick"); sub_8FB650(v12, v64, (int)"HelpLinkOver"); sub_8FE0F0(v63, v62, (int)v12, v2, 16, 0, 0); } v59 = 0; v57 = 0; if ( !sub_8F71E0(v64, (int)"WinTitle", &v63, &v62, &v59, &v57) ) { LOBYTE(v68) = 0; sub_4562E0(v60); v8 = (void (__thiscall ***)(_DWORD, signed int))v64; v68 = -1; if ( v64 ) { v9 = InterlockedDecrement((volatile LONG *)(v64 + 4)); goto LABEL_14; } return 0; } v13 = sub_421050(7); v14 = sub_8F4A20(v63, v62, v59, v57, v13, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, int *))(*v14 + 468))(v14, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, signed int))(*v14 + 488))(v14, 1); v61 = *v14 + 472; v15 = sub_4090F0(1751492540); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v61)(v14, v15); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v48 = 0; v49 = 0; v50 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; LOBYTE(v68) = 2; v16 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 1); *v16 = 1; v16[1] = v64; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "ColumnBarNor", 0xCu); v17 = v16 + 18; LOBYTE(v68) = 3; sub_40B060(v17, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "ColumnBarClick", 0xEu); LOBYTE(v68) = 4; sub_40B060(v17, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "ColumnBarOver", 0xDu); LOBYTE(v68) = 5; sub_40B060(v17, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v18 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v18 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "Column01", 8u); LOBYTE(v68) = 6; sub_40B060(v18 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); sub_565E50(v18, "InvItemSlot001_icon", 3); v18[1] = v64; v19 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *(_DWORD *)v19 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "Column02", 8u); LOBYTE(v68) = 7; sub_40B060((int *)(v19 + 72), (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); *(_DWORD *)(v19 + 4) = v64; *(_BYTE *)(v19 + 88) = 1; v20 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v20 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "Column03", 8u); LOBYTE(v68) = 8; sub_40B060(v20 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v20[1] = v64; v21 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v21 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "GemInput", 8u); LOBYTE(v68) = 9; sub_40B060(v21 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v21[1] = v64; v22 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v22 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "GoldInput", 9u); LOBYTE(v68) = 10; sub_40B060(v22 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v22[1] = v64; v23 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v23 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "SilverInput", 0xBu); LOBYTE(v68) = 11; sub_40B060(v23 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v23[1] = v64; v24 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v48, 2); *v24 = 2; v67 = 15; v66 = 0; LOBYTE(v65) = 0; sub_4018E0(&v65, "CopperInput", 0xBu); LOBYTE(v68) = 12; sub_40B060(v24 + 18, (const void **)&v65); LOBYTE(v68) = 2; if ( v67 >= 0x10 ) operator delete(v65); v24[1] = v64; sub_466680(&v48, 0); v25 = sub_8FB140(v64, (int)"ColumnBox", (int)&v63, (int)&v62, 0); v26 = sub_466330(v63, v62, (int)v25, *(float *)&v2, (int **)&v48, 1, 0); *(_DWORD *)(v2 + 696) = v26; sub_465130(v26); v27 = sub_8FB140(v64, (int)"SlideBar_SlideBtnMiddle", (int)&v63, (int)&v62, 0); v28 = sub_464310(v64, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v27, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 700) = v28; *(_DWORD *)(v28 + 312) = 15; *(_DWORD *)(*(_DWORD *)(v2 + 700) + 304) = 1; sub_85AB50(*(void ***)(v2 + 700), "MarketSearchWinSlide"); sub_74E360((const void **)(v2 + 704), (char *)0x64); v61 = 100; do { v29 = operator new(0x20u); if ( v29 ) { *v29 = &MarketSearchItem::`vftable'; v29[2] = 0; v29[4] = -1; v29[5] = -1; v29[6] = -1; *((_WORD *)v29 + 14) = -1; } else { v29 = 0; } v58 = v29; sub_5B3CF0((_DWORD *)(v2 + 704), &v58); --v61; } while ( v61 ); v30 = sub_456B30(v60, 11, "Title01", 0, 3); v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = dword_AA8C74; v35 = sub_4090F0(1920508610); sub_456040((int)v30, (int)v35, v31, v32, v33, v34, 5); v36 = sub_456B30(v60, 12, "Title02", 0, 3); v37 = dword_AA8C68; v38 = dword_AA8C6C; v39 = dword_AA8C70; v40 = dword_AA8C74; v41 = sub_4090F0(-1161064263); sub_456040((int)v36, (int)v41, v37, v38, v39, v40, 5); sub_456B30(v60, 13, "Title03", 0, 3); v42 = sub_456820(v60, (int)"GemBtn", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v43 = sub_456820(v60, (int)"GoldBtn", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v44 = sub_456820(v60, (int)"SilverBtn", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v45 = sub_456820(v60, (int)"CopperBtn", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); sub_560210((void *)v2, v60); sub_560410((_DWORD *)v2, v60); v46 = v2 + 608; v61 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v46 + 256))(0); v46 += 4; --v61; } while ( v61 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 256))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v68) = 1; if ( v48 ) { ((void (__cdecl *)(void *, int, char *, _DWORD *))loc_40ACF0)(v48, v49, &v51, v58); operator delete(v48); } v48 = 0; v49 = 0; v50 = 0; LOBYTE(v68) = 0; sub_4562E0(v60); v47 = (void (__thiscall ***)(_DWORD, signed int))v64; v68 = -1; if ( v64 && !InterlockedDecrement((volatile LONG *)(v64 + 4)) && v47 ) (**v47)(v47, 1); return 1; } // 9CED94: using guessed type void *MarketSearchItem::`vftable'; // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00562520) -------------------------------------------------------- int sub_562520() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA2C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA2C: using guessed type int dword_ACDA2C; //----- (00562540) -------------------------------------------------------- void *__cdecl sub_562540(void *a1, int a2) { void *result; // eax _DWORD *v3; // esi int *v4; // ebx int v5; // edi int *v6; // esi int v7; // edx int *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = a1; if ( a1 != (void *)a2 ) { v4 = (int *)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55F7C0(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55F7C0(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = *(v6 - 1); v8 = v6; --v6; } while ( sub_55F7C0(v5, v7) ); } result = v8; v3 = a1; *v8 = v5; } ++v4; } while ( v4 != (int *)a2 ); } } return result; } //----- (005625F0) -------------------------------------------------------- void *__cdecl sub_5625F0(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55F880(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55F880(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_55F880(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (005626A0) -------------------------------------------------------- void *__cdecl sub_5626A0(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55FA10(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55FA10(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_55FA10(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (00562750) -------------------------------------------------------- void *__cdecl sub_562750(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55FBB0(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55FBB0(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_55FBB0(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (00562800) -------------------------------------------------------- void *__cdecl sub_562800(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55FD40(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55FD40(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_55FD40(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (005628B0) -------------------------------------------------------- void *__cdecl sub_5628B0(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_55FEE0(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_55FEE0(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_55FEE0(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (00562960) -------------------------------------------------------- void *__cdecl sub_562960(void *a1, int a2) { void *result; // eax _DWORD **v3; // esi _DWORD **v4; // ebx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // edx _DWORD *v8; // [esp+4h] [ebp-4h] result = (void *)a2; v3 = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v4 = (_DWORD **)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { do { v5 = *v4; v8 = v4; if ( sub_560070(*v4, *v3) ) { result = memcpy_0(&v4[-(v4 - v3) + 1], v3, 4 * (v4 - v3)); *v3 = v5; } else { v6 = v4 - 1; if ( sub_560070(v5, *(v4 - 1)) ) { do { *v8 = *v6; v7 = (_DWORD *)*(v6 - 1); v8 = v6; --v6; } while ( sub_560070(v5, v7) ); } result = v8; v3 = (_DWORD **)a1; *v8 = v5; } ++v4; } while ( v4 != (_DWORD **)a2 ); } } return result; } //----- (00562A10) -------------------------------------------------------- char __cdecl sub_562A10(int *a1, int *a2, int *a3) { int v3; // eax int v4; // eax int v5; // eax if ( sub_55F7C0(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55F7C0(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55F7C0(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return v5; } //----- (00562A80) -------------------------------------------------------- char __cdecl sub_562A80(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_55F880(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55F880(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55F880(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562AF0) -------------------------------------------------------- char __cdecl sub_562AF0(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_55FA10(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55FA10(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55FA10(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562B60) -------------------------------------------------------- char __cdecl sub_562B60(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_55FBB0(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55FBB0(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55FBB0(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562BD0) -------------------------------------------------------- char __cdecl sub_562BD0(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_55FD40(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55FD40(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55FD40(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562C40) -------------------------------------------------------- char __cdecl sub_562C40(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_55FEE0(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_55FEE0(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_55FEE0(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562CB0) -------------------------------------------------------- char __cdecl sub_562CB0(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax if ( sub_560070(*a2, *a1) ) { v3 = *a2; *a2 = *a1; *a1 = v3; } if ( sub_560070(*a3, *a2) ) { v4 = *a3; *a3 = *a2; *a2 = v4; } LOBYTE(v5) = sub_560070(*a2, *a1); if ( (_BYTE)v5 ) { v5 = *a2; *a2 = *a1; *a1 = v5; } return (char)v5; } //----- (00562D20) -------------------------------------------------------- int __cdecl sub_562D20(int a1, int a2, int a3, int *a4) { int v4; // ecx int v5; // esi int v6; // edx int v7; // edi int v8; // ebx unsigned int v9; // esi unsigned int v10; // esi unsigned int v11; // ecx unsigned int v12; // edx signed int v13; // eax signed int v14; // edx unsigned int v15; // eax unsigned int v16; // ecx int result; // eax int v18; // [esp+4h] [ebp-Ch] int v19; // [esp+8h] [ebp-8h] int v20; // [esp+Ch] [ebp-4h] v4 = (a2 - 1) / 2; v20 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = a1; v6 = *(_DWORD *)(a1 + 4 * v4); v7 = *a4; v18 = *(_DWORD *)(a1 + 4 * v4); if ( *(_DWORD *)(v6 + 24) == -1 ) { if ( *(_DWORD *)(v7 + 24) == -1 || *(_DWORD *)(v7 + 24) != -1 ) goto LABEL_27; } else if ( *(_DWORD *)(v7 + 24) == -1 ) { goto LABEL_26; } v8 = *(_DWORD *)(v6 + 8); v19 = *(_DWORD *)(v7 + 8); v9 = 0; if ( sub_562520() ) { do sub_7474E0((_DWORD *)(dword_ACDA2C + 4), v9++); while ( v9 < sub_562520() ); } v10 = 0; if ( sub_562520() ) { do sub_7474E0((_DWORD *)(dword_ACDA2C + 4), v10++); while ( v10 < sub_562520() ); } v11 = *(_DWORD *)(*(_DWORD *)(v8 + 112) + 114); v12 = *(_DWORD *)(*(_DWORD *)(v19 + 112) + 114); v13 = 0; if ( v11 != v12 ) { if ( v11 <= v12 ) { if ( v11 < v12 ) v13 = 1; } else { v13 = -1; } } v14 = v13; if ( !v13 ) { v15 = *(_DWORD *)(v7 + 24); v16 = *(_DWORD *)(v18 + 24); if ( v16 != v15 ) { if ( v16 <= v15 ) { if ( v16 < v15 ) v14 = 1; } else { v14 = -1; } } } v5 = a1; if ( v14 <= 0 ) { LABEL_27: result = a2; *(_DWORD *)(v5 + 4 * a2) = *a4; return result; } v4 = v20; LABEL_26: *(_DWORD *)(v5 + 4 * a2) = *(_DWORD *)(v5 + 4 * v4); a2 = v4; v20 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_27; v4 = (v4 - 1) / 2; } } result = a2; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } // ACDA2C: using guessed type int dword_ACDA2C; //----- (00562E80) -------------------------------------------------------- _DWORD *__cdecl sub_562E80(int a1, int a2, int a3, _DWORD *a4) { int v4; // edx int v5; // ecx _DWORD *v6; // ebx int v7; // esi int v8; // edi int v9; // eax int v10; // ecx int v11; // edx unsigned int v12; // edx unsigned int v13; // ecx unsigned int v14; // edi unsigned int v15; // esi bool v16; // cf bool v17; // zf unsigned int v18; // ecx unsigned int v19; // edx unsigned int v20; // ecx unsigned int v21; // edx _DWORD *result; // eax int v23; // [esp+0h] [ebp-10h] int v24; // [esp+4h] [ebp-Ch] _DWORD *v25; // [esp+8h] [ebp-8h] int v26; // [esp+Ch] [ebp-4h] v4 = (a2 - 1) / 2; v26 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = *(_DWORD *)(a1 + 4 * v4); v6 = (_DWORD *)*a4; v25 = *(_DWORD **)(a1 + 4 * v4); if ( *(_DWORD *)(v5 + 24) == -1 ) { if ( v6[6] == -1 || v6[6] != -1 ) goto LABEL_48; } else if ( v6[6] == -1 ) { goto LABEL_47; } v7 = *(_DWORD *)(*(_DWORD *)(v5 + 8) + 112); v8 = *(_DWORD *)(v6[2] + 112); v23 = *(_DWORD *)(v5 + 8); v24 = v6[2]; if ( v7 == -34 || v8 == -34 ) { v9 = -1; goto LABEL_46; } v9 = -strcmp((const char *)(v7 + 34), (const char *)(v8 + 34)); if ( !v9 ) { v10 = *(_DWORD *)(v8 + 127); v11 = *(_DWORD *)(v7 + 127); if ( v11 != v10 ) { if ( v11 <= v10 ) { if ( v11 < v10 ) v9 = 1; } else { v9 = -1; } } if ( !v9 ) break; } LABEL_45: v4 = v26; LABEL_46: if ( v9 <= 0 ) goto LABEL_48; LABEL_47: *(_DWORD *)(a1 + 4 * a2) = *(_DWORD *)(a1 + 4 * v4); a2 = v4; v26 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_48; v4 = (v4 - 1) / 2; } v12 = v25[4]; v13 = v6[4]; v14 = v25[5]; v15 = v6[5]; v9 = 0; if ( v12 == v13 ) { v16 = v14 < v15; v17 = v14 == v15; if ( v14 == v15 ) { LABEL_32: if ( !v9 ) { v9 = sub_55F760(v23, v24, 0); if ( !v9 ) { v18 = *(_DWORD *)(*(_DWORD *)(v23 + 112) + 114); v19 = *(_DWORD *)(*(_DWORD *)(v24 + 112) + 114); v9 = 0; if ( v18 != v19 ) { if ( v18 <= v19 ) { if ( v18 < v19 ) v9 = 1; } else { v9 = -1; } } if ( !v9 ) { v20 = v6[6]; v21 = v25[6]; if ( v21 != v20 ) { if ( v21 <= v20 ) { if ( v21 < v20 ) v9 = 1; } else { v9 = -1; } } } } } goto LABEL_45; } } else { v16 = v14 < v15; v17 = v14 == v15; } if ( v16 || (v16 || v17) && v12 <= v13 ) { if ( v14 <= v15 && (v14 < v15 || v12 < v13) ) v9 = 1; } else { v9 = -1; } goto LABEL_32; } LABEL_48: result = (_DWORD *)*a4; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (00563040) -------------------------------------------------------- _DWORD *__cdecl sub_563040(int a1, int a2, int a3, _DWORD *a4) { int v4; // edx int v5; // ecx _DWORD *v6; // ebx int v7; // esi int v8; // edi _BYTE *v9; // eax _BYTE *v10; // ecx bool v11; // cf unsigned __int8 v12; // dl int v13; // eax int v14; // ecx int v15; // edx unsigned int v16; // edx unsigned int v17; // ecx unsigned int v18; // edi unsigned int v19; // esi signed int v20; // eax bool v21; // cf bool v22; // zf unsigned int v23; // ecx unsigned int v24; // edx signed int v25; // eax unsigned int v26; // ecx unsigned int v27; // edx signed int v28; // eax _DWORD *result; // eax int v30; // [esp+0h] [ebp-10h] int v31; // [esp+4h] [ebp-Ch] _DWORD *v32; // [esp+8h] [ebp-8h] int v33; // [esp+Ch] [ebp-4h] v4 = (a2 - 1) / 2; v33 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = *(_DWORD *)(a1 + 4 * v4); v6 = (_DWORD *)*a4; v32 = *(_DWORD **)(a1 + 4 * v4); if ( *(_DWORD *)(v5 + 24) == -1 ) { if ( v6[6] == -1 || v6[6] != -1 ) goto LABEL_55; } else if ( v6[6] == -1 ) { goto LABEL_54; } v7 = *(_DWORD *)(*(_DWORD *)(v5 + 8) + 112); v8 = *(_DWORD *)(v6[2] + 112); v30 = *(_DWORD *)(v5 + 8); v9 = (_BYTE *)(v7 + 34); v31 = v6[2]; v10 = (_BYTE *)(v8 + 34); if ( v7 == -34 || v8 == -34 ) { v13 = -1; goto LABEL_53; } while ( 1 ) { v11 = *v9 < *v10; if ( *v9 != *v10 ) break; if ( !*v9 ) goto LABEL_15; v12 = v9[1]; v11 = v12 < v10[1]; if ( v12 != v10[1] ) break; v9 += 2; v10 += 2; if ( !v12 ) { LABEL_15: v13 = 0; goto LABEL_16; } } v13 = -v11 - (v11 - 1); LABEL_16: if ( !v13 ) { v14 = *(_DWORD *)(v8 + 127); v15 = *(_DWORD *)(v7 + 127); if ( v15 != v14 ) { if ( v15 <= v14 ) { if ( v15 < v14 ) v13 = 1; } else { v13 = -1; } } v13 = -v13; if ( !v13 ) break; } LABEL_52: v4 = v33; LABEL_53: if ( v13 <= 0 ) goto LABEL_55; LABEL_54: *(_DWORD *)(a1 + 4 * a2) = *(_DWORD *)(a1 + 4 * v4); a2 = v4; v33 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_55; v4 = (v4 - 1) / 2; } v16 = v32[4]; v17 = v6[4]; v18 = v32[5]; v19 = v6[5]; v20 = 0; if ( v16 == v17 ) { v21 = v18 < v19; v22 = v18 == v19; if ( v18 == v19 ) { LABEL_38: v13 = -v20; if ( !v13 ) { v13 = sub_55F760(v30, v31, 1); if ( !v13 ) { v23 = *(_DWORD *)(*(_DWORD *)(v30 + 112) + 114); v24 = *(_DWORD *)(*(_DWORD *)(v31 + 112) + 114); v25 = 0; if ( v23 != v24 ) { if ( v23 <= v24 ) { if ( v23 < v24 ) v25 = 1; } else { v25 = -1; } } v13 = -v25; if ( !v13 ) { v26 = v6[6]; v27 = v32[6]; v28 = 0; if ( v27 != v26 ) { if ( v27 <= v26 ) { if ( v27 < v26 ) v28 = 1; } else { v28 = -1; } } v13 = -v28; } } } goto LABEL_52; } } else { v21 = v18 < v19; v22 = v18 == v19; } if ( v21 || (v21 || v22) && v16 <= v17 ) { if ( v18 <= v19 && (v18 < v19 || v16 < v17) ) v20 = 1; } else { v20 = -1; } goto LABEL_38; } LABEL_55: result = (_DWORD *)*a4; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (00563200) -------------------------------------------------------- int __cdecl sub_563200(int a1, int a2, int a3, _DWORD *a4) { int v4; // ecx int v5; // esi int v6; // edx _DWORD *v7; // ebx int v8; // eax int v9; // edi int v10; // esi int v11; // edx int v12; // ecx signed int v13; // eax bool v14; // zf bool v15; // sf int v16; // eax unsigned int v17; // edx unsigned int v18; // ecx unsigned int v19; // edi unsigned int v20; // esi signed int v21; // eax bool v22; // cf bool v23; // zf int v24; // eax unsigned int v25; // ecx unsigned int v26; // edx unsigned int v27; // edx unsigned int v28; // ecx signed int v29; // eax int result; // eax int v31; // [esp+4h] [ebp-10h] int v32; // [esp+8h] [ebp-Ch] _DWORD *v33; // [esp+Ch] [ebp-8h] int v34; // [esp+10h] [ebp-4h] v4 = (a2 - 1) / 2; v34 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = a1; v6 = *(_DWORD *)(a1 + 4 * v4); v7 = (_DWORD *)*a4; v33 = *(_DWORD **)(a1 + 4 * v4); if ( *(_DWORD *)(v6 + 24) == -1 ) { if ( v7[6] == -1 || v7[6] != -1 ) { LABEL_47: result = a2; *(_DWORD *)(v5 + 4 * a2) = *a4; return result; } } else if ( v7[6] == -1 ) { goto LABEL_46; } v8 = *(_DWORD *)(v6 + 8); v9 = *(_DWORD *)(v8 + 112); v10 = *(_DWORD *)(v7[2] + 112); v11 = *(_DWORD *)(v9 + 127); v32 = v7[2]; v12 = *(_DWORD *)(v10 + 127); v31 = v8; v13 = 0; if ( v11 != v12 ) { if ( v11 <= v12 ) { if ( v11 < v12 ) v13 = 1; } else { v13 = -1; } } v14 = v13 == 0; v15 = v13 < 0; if ( !v13 ) { if ( v9 == -34 || v10 == -34 ) goto LABEL_40; v16 = -strcmp((const char *)(v9 + 34), (const char *)(v10 + 34)); v14 = v16 == 0; v15 = v16 < 0; if ( !v16 ) break; } LABEL_44: v5 = a1; if ( v15 || v14 ) goto LABEL_47; v4 = v34; LABEL_46: *(_DWORD *)(v5 + 4 * a2) = *(_DWORD *)(v5 + 4 * v4); a2 = v4; v34 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_47; v4 = (v4 - 1) / 2; } v17 = v33[4]; v18 = v7[4]; v19 = v33[5]; v20 = v7[5]; v21 = 0; if ( v17 == v18 ) { v22 = v19 < v20; v23 = v19 == v20; if ( v19 == v20 ) goto LABEL_30; } else { v22 = v19 < v20; v23 = v19 == v20; } if ( v22 || (v22 || v23) && v17 <= v18 ) { if ( v19 <= v20 && (v19 < v20 || v17 < v18) ) v21 = 1; } else { v21 = -1; } LABEL_30: v14 = v21 == 0; v15 = v21 < 0; if ( v21 ) goto LABEL_44; v24 = sub_55F760(v31, v32, 0); v14 = v24 == 0; v15 = v24 < 0; if ( v24 ) goto LABEL_44; v25 = *(_DWORD *)(*(_DWORD *)(v31 + 112) + 114); v26 = *(_DWORD *)(*(_DWORD *)(v32 + 112) + 114); if ( v25 != v26 ) { if ( v25 <= v26 ) { if ( v25 < v26 ) v24 = 1; } else { v24 = -1; } } v14 = v24 == 0; v15 = v24 < 0; if ( v24 ) goto LABEL_44; v27 = v33[6]; v28 = v7[6]; v29 = 0; if ( v27 != v28 ) { if ( v27 <= v28 ) { if ( v27 < v28 ) v29 = 1; } else { LABEL_40: v29 = -1; } } v14 = v29 == 0; v15 = v29 < 0; goto LABEL_44; } result = a2; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (005633D0) -------------------------------------------------------- int __cdecl sub_5633D0(int a1, int a2, int a3, _DWORD *a4) { int v4; // ecx int v5; // esi int v6; // edx _DWORD *v7; // ebx int v8; // eax int v9; // edi int v10; // esi int v11; // edx int v12; // ecx signed int v13; // eax int v14; // eax _BYTE *v15; // eax _BYTE *v16; // ecx bool v17; // cf unsigned __int8 v18; // dl int v19; // eax bool v20; // zf bool v21; // sf unsigned int v22; // edx unsigned int v23; // ecx unsigned int v24; // edi unsigned int v25; // esi signed int v26; // eax bool v27; // cf bool v28; // zf int v29; // eax unsigned int v30; // ecx unsigned int v31; // edx unsigned int v32; // edx unsigned int v33; // ecx signed int v34; // eax int result; // eax int v36; // [esp+4h] [ebp-10h] int v37; // [esp+8h] [ebp-Ch] _DWORD *v38; // [esp+Ch] [ebp-8h] int v39; // [esp+10h] [ebp-4h] v4 = (a2 - 1) / 2; v39 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = a1; v6 = *(_DWORD *)(a1 + 4 * v4); v7 = (_DWORD *)*a4; v38 = *(_DWORD **)(a1 + 4 * v4); if ( *(_DWORD *)(v6 + 24) == -1 ) { if ( v7[6] == -1 || v7[6] != -1 ) { LABEL_55: result = a2; *(_DWORD *)(v5 + 4 * a2) = *a4; return result; } } else if ( v7[6] == -1 ) { goto LABEL_54; } v8 = *(_DWORD *)(v6 + 8); v9 = *(_DWORD *)(v8 + 112); v10 = *(_DWORD *)(v7[2] + 112); v11 = *(_DWORD *)(v9 + 127); v37 = v7[2]; v12 = *(_DWORD *)(v10 + 127); v36 = v8; v13 = 0; if ( v11 != v12 ) { if ( v11 <= v12 ) { if ( v11 < v12 ) v13 = 1; } else { v13 = -1; } } v14 = -v13; if ( v14 ) goto LABEL_51; v15 = (_BYTE *)(v9 + 34); v16 = (_BYTE *)(v10 + 34); if ( v9 == -34 || v10 == -34 ) { v14 = -1; LABEL_51: v20 = v14 == 0; v21 = v14 < 0; goto LABEL_52; } while ( 1 ) { v17 = *v15 < *v16; if ( *v15 != *v16 ) break; if ( !*v15 ) goto LABEL_21; v18 = v15[1]; v17 = v18 < v16[1]; if ( v18 != v16[1] ) break; v15 += 2; v16 += 2; if ( !v18 ) { LABEL_21: v19 = 0; goto LABEL_22; } } v19 = -v17 - (v17 - 1); LABEL_22: v20 = v19 == 0; v21 = v19 < 0; if ( v19 ) goto LABEL_52; v22 = v38[4]; v23 = v7[4]; v24 = v38[5]; v25 = v7[5]; v26 = 0; if ( v22 == v23 ) { v27 = v24 < v25; v28 = v24 == v25; if ( v24 == v25 ) goto LABEL_37; } else { v27 = v24 < v25; v28 = v24 == v25; } if ( v27 || (v27 || v28) && v22 <= v23 ) { if ( v24 <= v25 && (v24 < v25 || v22 < v23) ) v26 = 1; } else { v26 = -1; } LABEL_37: v14 = -v26; if ( v14 ) goto LABEL_51; v29 = sub_55F760(v36, v37, 1); v20 = v29 == 0; v21 = v29 < 0; if ( !v29 ) { v30 = *(_DWORD *)(*(_DWORD *)(v36 + 112) + 114); v31 = *(_DWORD *)(*(_DWORD *)(v37 + 112) + 114); if ( v30 != v31 ) { if ( v30 <= v31 ) { if ( v30 < v31 ) v29 = 1; } else { v29 = -1; } } v14 = -v29; if ( !v14 ) { v32 = v38[6]; v33 = v7[6]; v34 = 0; if ( v32 != v33 ) { if ( v32 <= v33 ) { if ( v32 < v33 ) v34 = 1; } else { v34 = -1; } } v14 = -v34; } goto LABEL_51; } LABEL_52: v5 = a1; if ( v21 || v20 ) goto LABEL_55; v4 = v39; LABEL_54: *(_DWORD *)(v5 + 4 * a2) = *(_DWORD *)(v5 + 4 * v4); a2 = v4; v39 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_55; v4 = (v4 - 1) / 2; } } result = a2; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (005635A0) -------------------------------------------------------- int __cdecl sub_5635A0(int a1, int a2, int a3, _DWORD *a4) { int v4; // ecx int v5; // esi _DWORD *v6; // edi _DWORD *v7; // ebx unsigned int v8; // esi unsigned int v9; // ecx unsigned int v10; // edx unsigned int v11; // edi signed int v12; // eax bool v13; // cf bool v14; // zf bool v15; // zf bool v16; // sf int v17; // eax int v18; // ecx int v19; // edx signed int v20; // eax int v21; // eax unsigned int v22; // ecx unsigned int v23; // edx signed int v24; // eax unsigned int v25; // edx unsigned int v26; // ecx signed int v27; // eax int result; // eax int v29; // [esp+4h] [ebp-10h] int v30; // [esp+8h] [ebp-Ch] int v31; // [esp+Ch] [ebp-8h] int v32; // [esp+10h] [ebp-4h] v4 = (a2 - 1) / 2; v30 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = a1; v6 = *(_DWORD **)(a1 + 4 * v4); v7 = (_DWORD *)*a4; v29 = *(_DWORD *)(a1 + 4 * v4); if ( v6[6] == -1 ) { if ( v7[6] == -1 || v7[6] != -1 ) { LABEL_47: result = a2; *(_DWORD *)(v5 + 4 * a2) = *a4; return result; } } else if ( v7[6] == -1 ) { goto LABEL_46; } v8 = v7[5]; v31 = v6[2]; v9 = v7[4]; v32 = v7[2]; v10 = v6[4]; v11 = v6[5]; v12 = 0; if ( v10 == v9 ) { v13 = v11 < v8; v14 = v11 == v8; if ( v11 == v8 ) goto LABEL_21; } else { v13 = v11 < v8; v14 = v11 == v8; } if ( v13 || (v13 || v14) && v10 <= v9 ) { if ( v11 <= v8 && (v11 < v8 || v10 < v9) ) v12 = 1; } else { v12 = -1; } LABEL_21: v15 = v12 == 0; v16 = v12 < 0; if ( !v12 ) { if ( *(_DWORD *)(v31 + 112) == -34 || *(_DWORD *)(v32 + 112) == -34 ) { LABEL_40: v27 = -1; } else { v17 = -strcmp((const char *)(*(_DWORD *)(v31 + 112) + 34), (const char *)(*(_DWORD *)(v32 + 112) + 34)); v15 = v17 == 0; v16 = v17 < 0; if ( v17 ) goto LABEL_44; v18 = *(_DWORD *)(*(_DWORD *)(v32 + 112) + 127); v19 = *(_DWORD *)(*(_DWORD *)(v31 + 112) + 127); v20 = 0; if ( v19 != v18 ) { if ( v19 <= v18 ) { if ( v19 < v18 ) v20 = 1; } else { v20 = -1; } } v15 = v20 == 0; v16 = v20 < 0; if ( v20 ) goto LABEL_44; v21 = sub_55F760(v31, v32, 0); v15 = v21 == 0; v16 = v21 < 0; if ( v21 ) goto LABEL_44; v22 = *(_DWORD *)(*(_DWORD *)(v31 + 112) + 114); v23 = *(_DWORD *)(*(_DWORD *)(v32 + 112) + 114); v24 = 0; if ( v22 != v23 ) { if ( v22 <= v23 ) { if ( v22 < v23 ) v24 = 1; } else { v24 = -1; } } v15 = v24 == 0; v16 = v24 < 0; if ( v24 ) goto LABEL_44; v25 = *(_DWORD *)(v29 + 24); v26 = v7[6]; v27 = 0; if ( v25 != v26 ) { if ( v25 > v26 ) goto LABEL_40; if ( v25 < v26 ) v27 = 1; } } v15 = v27 == 0; v16 = v27 < 0; } LABEL_44: v5 = a1; if ( v16 || v15 ) goto LABEL_47; v4 = v30; LABEL_46: *(_DWORD *)(v5 + 4 * a2) = *(_DWORD *)(v5 + 4 * v4); a2 = v4; v30 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_47; v4 = (v4 - 1) / 2; } } result = a2; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (00563780) -------------------------------------------------------- int __cdecl sub_563780(int a1, int a2, int a3, _DWORD *a4) { int v4; // ecx int v5; // esi _DWORD *v6; // edi _DWORD *v7; // ebx unsigned int v8; // esi unsigned int v9; // ecx unsigned int v10; // edx unsigned int v11; // edi signed int v12; // eax bool v13; // cf bool v14; // zf int v15; // eax _BYTE *v16; // ecx _BYTE *v17; // eax bool v18; // cf unsigned __int8 v19; // dl int v20; // eax bool v21; // zf bool v22; // sf int v23; // ecx int v24; // edx signed int v25; // eax int v26; // eax unsigned int v27; // ecx unsigned int v28; // edx signed int v29; // eax unsigned int v30; // edx unsigned int v31; // ecx signed int v32; // eax int result; // eax int v34; // [esp+4h] [ebp-10h] int v35; // [esp+8h] [ebp-Ch] int v36; // [esp+Ch] [ebp-8h] int v37; // [esp+10h] [ebp-4h] v4 = (a2 - 1) / 2; v35 = (a2 - 1) / 2; if ( a3 < a2 ) { while ( 1 ) { v5 = a1; v6 = *(_DWORD **)(a1 + 4 * v4); v7 = (_DWORD *)*a4; v34 = *(_DWORD *)(a1 + 4 * v4); if ( v6[6] == -1 ) { if ( v7[6] == -1 || v7[6] != -1 ) { LABEL_56: result = a2; *(_DWORD *)(v5 + 4 * a2) = *a4; return result; } } else if ( v7[6] == -1 ) { goto LABEL_55; } v8 = v7[5]; v36 = v6[2]; v9 = v7[4]; v37 = v7[2]; v10 = v6[4]; v11 = v6[5]; v12 = 0; if ( v10 == v9 ) { v13 = v11 < v8; v14 = v11 == v8; if ( v11 == v8 ) goto LABEL_21; } else { v13 = v11 < v8; v14 = v11 == v8; } if ( v13 || (v13 || v14) && v10 <= v9 ) { if ( v11 <= v8 && (v11 < v8 || v10 < v9) ) v12 = 1; } else { v12 = -1; } LABEL_21: v15 = -v12; if ( v15 ) goto LABEL_52; v16 = (_BYTE *)(*(_DWORD *)(v37 + 112) + 34); v17 = (_BYTE *)(*(_DWORD *)(v36 + 112) + 34); if ( *(_DWORD *)(v36 + 112) == -34 || *(_DWORD *)(v37 + 112) == -34 ) { v15 = -1; LABEL_52: v21 = v15 == 0; v22 = v15 < 0; goto LABEL_53; } while ( 1 ) { v18 = *v17 < *v16; if ( *v17 != *v16 ) break; if ( !*v17 ) goto LABEL_28; v19 = v17[1]; v18 = v19 < v16[1]; if ( v19 != v16[1] ) break; v17 += 2; v16 += 2; if ( !v19 ) { LABEL_28: v20 = 0; goto LABEL_29; } } v20 = -v18 - (v18 - 1); LABEL_29: v21 = v20 == 0; v22 = v20 < 0; if ( v20 ) goto LABEL_53; v23 = *(_DWORD *)(*(_DWORD *)(v37 + 112) + 127); v24 = *(_DWORD *)(*(_DWORD *)(v36 + 112) + 127); v25 = 0; if ( v24 != v23 ) { if ( v24 <= v23 ) { if ( v24 < v23 ) v25 = 1; } else { v25 = -1; } } v15 = -v25; if ( v15 ) goto LABEL_52; v26 = sub_55F760(v36, v37, 1); v21 = v26 == 0; v22 = v26 < 0; if ( !v26 ) { v27 = *(_DWORD *)(*(_DWORD *)(v36 + 112) + 114); v28 = *(_DWORD *)(*(_DWORD *)(v37 + 112) + 114); v29 = 0; if ( v27 != v28 ) { if ( v27 <= v28 ) { if ( v27 < v28 ) v29 = 1; } else { v29 = -1; } } v15 = -v29; if ( !v15 ) { v30 = *(_DWORD *)(v34 + 24); v31 = v7[6]; v32 = 0; if ( v30 != v31 ) { if ( v30 <= v31 ) { if ( v30 < v31 ) v32 = 1; } else { v32 = -1; } } v15 = -v32; } goto LABEL_52; } LABEL_53: v5 = a1; if ( v22 || v21 ) goto LABEL_56; v4 = v35; LABEL_55: *(_DWORD *)(v5 + 4 * a2) = *(_DWORD *)(v5 + 4 * v4); a2 = v4; v35 = (v4 - 1) / 2; if ( a3 >= v4 ) goto LABEL_56; v4 = (v4 - 1) / 2; } } result = a2; *(_DWORD *)(a1 + 4 * a2) = *a4; return result; } //----- (00563960) -------------------------------------------------------- void *__thiscall sub_563960(void *this, char a2) { void *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &MarketSearchItem::`vftable'; v3 = *((_DWORD *)this + 2); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CED94: using guessed type void *MarketSearchItem::`vftable'; //----- (005639B0) -------------------------------------------------------- char __cdecl sub_5639B0(int *a1, int *a2, int *a3) { int *v3; // esi int v4; // eax int v5; // eax int v6; // edi int *v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562A10(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562A10(a1, v7, &a1[2 * v5]); sub_562A10(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562A10(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562A10(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563A60) -------------------------------------------------------- char __cdecl sub_563A60(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562A80(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562A80(a1, v7, &a1[2 * v5]); sub_562A80(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562A80(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562A80(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563B10) -------------------------------------------------------- char __cdecl sub_563B10(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562AF0(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562AF0(a1, v7, &a1[2 * v5]); sub_562AF0(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562AF0(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562AF0(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563BC0) -------------------------------------------------------- char __cdecl sub_563BC0(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562B60(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562B60(a1, v7, &a1[2 * v5]); sub_562B60(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562B60(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562B60(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563C70) -------------------------------------------------------- char __cdecl sub_563C70(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562BD0(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562BD0(a1, v7, &a1[2 * v5]); sub_562BD0(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562BD0(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562BD0(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563D20) -------------------------------------------------------- char __cdecl sub_563D20(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562C40(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562C40(a1, v7, &a1[2 * v5]); sub_562C40(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562C40(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562C40(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563DD0) -------------------------------------------------------- char __cdecl sub_563DD0(_DWORD **a1, _DWORD **a2, _DWORD **a3) { _DWORD **v3; // esi int v4; // eax int v5; // eax int v6; // edi _DWORD **v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_562CB0(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_562CB0(a1, v7, &a1[2 * v5]); sub_562CB0(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_562CB0(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_562CB0(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00563E80) -------------------------------------------------------- int __cdecl sub_563E80(int a1, int a2, int a3, int *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55F7C0(*(_DWORD *)(a1 + 4 * v6), *(_DWORD *)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_562D20(a1, v5, a2, a4); } //----- (00563F00) -------------------------------------------------------- _DWORD *__cdecl sub_563F00(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55F880(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_562E80(a1, v5, a2, a4); } //----- (00563F80) -------------------------------------------------------- _DWORD *__cdecl sub_563F80(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55FA10(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_563040(a1, v5, a2, a4); } //----- (00564000) -------------------------------------------------------- int __cdecl sub_564000(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55FBB0(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_563200(a1, v5, a2, a4); } //----- (00564080) -------------------------------------------------------- int __cdecl sub_564080(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55FD40(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_5633D0(a1, v5, a2, a4); } //----- (00564100) -------------------------------------------------------- int __cdecl sub_564100(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_55FEE0(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_5635A0(a1, v5, a2, a4); } //----- (00564180) -------------------------------------------------------- int __cdecl sub_564180(int a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // edi int v6; // esi bool v7; // zf v4 = a3; v5 = a2; v6 = 2 * a2 + 2; v7 = v6 == a3; if ( v6 < a3 ) { do { if ( sub_560070(*(_DWORD **)(a1 + 4 * v6), *(_DWORD **)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; v7 = v6 == a3; } if ( v7 ) { *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v4 - 4); v5 = v4 - 1; } return sub_563780(a1, v5, a2, a4); } //----- (00564200) -------------------------------------------------------- int **__cdecl sub_564200(int **a1, int *a2, int *a3) { int v3; // kr00_4 int *v4; // esi int *v5; // edi int *v6; // ebx int *v7; // eax int v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx int *v12; // eax int v13; // ST1C_4 int v14; // eax int v15; // ecx int v16; // eax int **result; // eax int *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_5639B0(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55F7C0(*(v4 - 1), *v4) ) break; if ( sub_55F7C0(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55F7C0(*v5, *v4) ) break; if ( sub_55F7C0(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55F7C0(*v4, *v5) ) { if ( sub_55F7C0(*v5, *v4) ) break; v7 = i; ++i; v8 = *v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55F7C0(*(v6 - 1), *v4) ) { if ( sub_55F7C0(*v4, *(v6 - 1)) ) break; v10 = *(v4 - 1); --v4; *v4 = *(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = *v6; *v6 = *v4; *v4 = v14; } v15 = *v4; *v4 = *(i - 1); --i; *i = v15; } else { v16 = *v5; *v5 = *v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = *v4; *v4 = *i; *i = v11; } ++i; v12 = v5; v13 = *v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (005643C0) -------------------------------------------------------- _DWORD *__cdecl sub_5643C0(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563A60(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55F880(*(v4 - 1), *v4) ) break; if ( sub_55F880(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55F880(*v5, *v4) ) break; if ( sub_55F880(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55F880(*v4, *v5) ) { if ( sub_55F880(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55F880((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_55F880(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564580) -------------------------------------------------------- _DWORD *__cdecl sub_564580(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563B10(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55FA10(*(v4 - 1), *v4) ) break; if ( sub_55FA10(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55FA10(*v5, *v4) ) break; if ( sub_55FA10(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55FA10(*v4, *v5) ) { if ( sub_55FA10(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55FA10((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_55FA10(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564740) -------------------------------------------------------- _DWORD *__cdecl sub_564740(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563BC0(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55FBB0(*(v4 - 1), *v4) ) break; if ( sub_55FBB0(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55FBB0(*v5, *v4) ) break; if ( sub_55FBB0(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55FBB0(*v4, *v5) ) { if ( sub_55FBB0(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55FBB0((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_55FBB0(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564900) -------------------------------------------------------- _DWORD *__cdecl sub_564900(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563C70(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55FD40(*(v4 - 1), *v4) ) break; if ( sub_55FD40(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55FD40(*v5, *v4) ) break; if ( sub_55FD40(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55FD40(*v4, *v5) ) { if ( sub_55FD40(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55FD40((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_55FD40(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564AC0) -------------------------------------------------------- _DWORD *__cdecl sub_564AC0(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563D20(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_55FEE0(*(v4 - 1), *v4) ) break; if ( sub_55FEE0(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_55FEE0(*v5, *v4) ) break; if ( sub_55FEE0(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_55FEE0(*v4, *v5) ) { if ( sub_55FEE0(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_55FEE0((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_55FEE0(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564C80) -------------------------------------------------------- _DWORD *__cdecl sub_564C80(_DWORD *a1, _DWORD **a2, _DWORD **a3) { int v3; // kr00_4 _DWORD **v4; // esi _DWORD **v5; // edi _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx bool v9; // zf int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // ST1C_4 _DWORD *v14; // eax int v15; // ecx int v16; // eax _DWORD *result; // eax _DWORD *i; // [esp+10h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_563DD0(a2, &a2[v3 / 2], a3 - 1); v5 = v4 + 1; for ( i = v4 + 1; a2 < v4; --v4 ) { if ( sub_560070(*(v4 - 1), *v4) ) break; if ( sub_560070(*v4, *(v4 - 1)) ) break; } if ( v5 < a3 ) { do { if ( sub_560070(*v5, *v4) ) break; if ( sub_560070(*v4, *v5) ) break; ++v5; } while ( v5 < a3 ); i = v5; } v6 = v4; while ( 1 ) { while ( 1 ) { for ( ; v5 < a3; ++v5 ) { if ( !sub_560070(*v4, *v5) ) { if ( sub_560070(*v5, *v4) ) break; v7 = i; ++i; v8 = (_DWORD *)*v7; *v7 = *v5; *v5 = v8; } } v9 = v6 == a2; if ( v6 > a2 ) { do { if ( !sub_560070((_DWORD *)*(v6 - 1), *v4) ) { if ( sub_560070(*v4, (_DWORD *)*(v6 - 1)) ) break; v10 = (int)*(v4 - 1); --v4; *v4 = (_DWORD *)*(v6 - 1); *(v6 - 1) = v10; } --v6; } while ( a2 < v6 ); v9 = v6 == a2; } if ( v9 ) break; --v6; if ( v5 == a3 ) { --v4; if ( v6 != v4 ) { v14 = (_DWORD *)*v6; *v6 = *v4; *v4 = v14; } v15 = (int)*v4; *v4 = (_DWORD *)*(i - 1); --i; *i = v15; } else { v16 = (int)*v5; *v5 = (_DWORD *)*v6; *v6 = v16; ++v5; } } if ( v5 == a3 ) break; if ( i != v5 ) { v11 = (int)*v4; *v4 = (_DWORD *)*i; *i = v11; } ++i; v12 = v5; v13 = (int)*v4; *v4 = *v5; ++v4; ++v5; *v12 = v13; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00564E40) -------------------------------------------------------- int __cdecl sub_564E40(int a1, int a2, char a3) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55F7C0(*(_DWORD *)(v3 + 4 * v9), *(_DWORD *)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_562D20(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00564F00) -------------------------------------------------------- _DWORD *__cdecl sub_564F00(int a1, int a2, char a3) { int v3; // edi int v4; // ecx _DWORD *result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = (_DWORD *)(v4 - (v4 >> 31)); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55F880(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_562E80(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00564FC0) -------------------------------------------------------- _DWORD *__cdecl sub_564FC0(int a1, int a2, char a3) { int v3; // edi int v4; // ecx _DWORD *result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = (_DWORD *)(v4 - (v4 >> 31)); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55FA10(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_563040(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00565080) -------------------------------------------------------- int __cdecl sub_565080(int a1, int a2, char a3) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55FBB0(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_563200(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00565140) -------------------------------------------------------- int __cdecl sub_565140(int a1, int a2, char a3) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55FD40(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_5633D0(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00565200) -------------------------------------------------------- int __cdecl sub_565200(int a1, int a2, char a3) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_55FEE0(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_5635A0(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (005652C0) -------------------------------------------------------- int __cdecl sub_5652C0(int a1, int a2, char a3) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] int v16; // [esp+1Ch] [ebp+8h] int v17; // [esp+20h] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v16 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; LOBYTE(v15) = a3; v17 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( sub_560070(*(_DWORD **)(v3 + 4 * v9), *(_DWORD **)(v3 + 4 * v9 - 4)) ) --v9; v11 = v17; v12 = *(_DWORD *)(v3 + 4 * v9); v17 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v16 ); v4 = v16; v10 = v9 == v16; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v17) = *(_DWORD *)(v3 + 4 * v4 - 4); v17 = v4 - 1; } result = sub_563780(v3, v17, v6, &v13); if ( v6 <= 0 ) break; v4 = v16; } } return result; } //----- (00565380) -------------------------------------------------------- void *__thiscall sub_565380(void *this, char a2) { void *v2; // esi v2 = this; sub_560FD0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005653B0) -------------------------------------------------------- int __cdecl sub_5653B0(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_563E80((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (00565400) -------------------------------------------------------- int __cdecl sub_565400(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_563F00((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (00565450) -------------------------------------------------------- int __cdecl sub_565450(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_563F80((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (005654A0) -------------------------------------------------------- int __cdecl sub_5654A0(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_564000((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (005654F0) -------------------------------------------------------- int __cdecl sub_5654F0(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_564080((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (00565540) -------------------------------------------------------- int __cdecl sub_565540(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_564100((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (00565590) -------------------------------------------------------- int __cdecl sub_565590(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_564180((int)a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (005655E0) -------------------------------------------------------- int __cdecl sub_5655E0(void *a1, int a2, int a3, char a4) { int *v4; // ebx int *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (int *)a1; v5 = (int *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564200((int **)&v8, v4, v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_5655E0(v9, (int)v5, v7, a4); v5 = (int *)v8; } else { sub_5655E0(v4, v8, v7, a4); v4 = (int *)v9; } result = v5 - v4; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_562540(v4, (int)v5); } else { if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_564E40((int)v4, (int)v5, a4); result = sub_5653B0(v4, (int)v5); } return result; } //----- (005656D0) -------------------------------------------------------- int __cdecl sub_5656D0(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_5643C0(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_5656D0(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_5656D0(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_5625F0(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_564F00((int)v4, (int)v5, a4); result = sub_565400((int *)v4, (int)v5); } return result; } //----- (005657C0) -------------------------------------------------------- int __cdecl sub_5657C0(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564580(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_5657C0(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_5657C0(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_5626A0(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_564FC0((int)v4, (int)v5, a4); result = sub_565450((int *)v4, (int)v5); } return result; } //----- (005658B0) -------------------------------------------------------- int __cdecl sub_5658B0(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564740(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_5658B0(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_5658B0(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_562750(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_565080((int)v4, (int)v5, a4); result = sub_5654A0((int *)v4, (int)v5); } return result; } //----- (005659A0) -------------------------------------------------------- int __cdecl sub_5659A0(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564900(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_5659A0(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_5659A0(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_562800(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_565140((int)v4, (int)v5, a4); result = sub_5654F0((int *)v4, (int)v5); } return result; } //----- (00565A90) -------------------------------------------------------- int __cdecl sub_565A90(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564AC0(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_565A90(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_565A90(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_5628B0(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_565200((int)v4, (int)v5, a4); result = sub_565540((int *)v4, (int)v5); } return result; } //----- (00565B80) -------------------------------------------------------- int __cdecl sub_565B80(void *a1, int a2, int a3, char a4) { _DWORD **v4; // ebx char *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (_DWORD **)a1; v5 = (char *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_564C80(&v8, v4, (_DWORD **)v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)((v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_565B80(v9, (int)v5, v7, a4); v5 = (char *)v8; } else { sub_565B80(v4, v8, v7, a4); v4 = (_DWORD **)v9; } result = (v5 - (char *)v4) >> 2; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_562960(v4, (int)v5); } else { if ( (signed int)((v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_5652C0((int)v4, (int)v5, a4); result = sub_565590((int *)v4, (int)v5); } return result; } //----- (00565C70) -------------------------------------------------------- int __thiscall sub_565C70(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx int v5; // ecx int v6; // eax int v7; // esi void *v8; // edi bool v9; // cl unsigned int v10; // ebx int v11; // ebx int v12; // edx int result; // eax int v14; // ecx _DWORD *v15; // [esp+Ch] [ebp-4h] char v16; // [esp+1Ch] [ebp+Ch] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = a3; v9 = 1; v15 = v4; v16 = 1; if ( !*(_BYTE *)(v6 + 45) ) { v10 = *((_DWORD *)v8 + 3); do { v7 = v6; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v6 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v6 + 12); v16 = v9; if ( v9 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 45) ); } v11 = v7; a4 = v7; if ( v9 ) { if ( v7 == *(_DWORD *)v4[1] ) { v12 = *(_DWORD *)sub_5AC690(v4, (int)&a4, 1, v7, v8); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_49F3C0(&a4); v11 = a4; v4 = v15; } if ( *(_DWORD *)(v11 + 12) >= *((_DWORD *)v8 + 3) ) { if ( *((_DWORD *)v8 + 9) >= 0x10u ) operator delete(*((void **)v8 + 4)); *((_DWORD *)v8 + 9) = 15; *((_DWORD *)v8 + 8) = 0; *((_BYTE *)v8 + 16) = 0; operator delete(v8); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_5AC690(v4, (int)&a4, v16, v7, v8); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (00565D70) -------------------------------------------------------- _DWORD *__thiscall sub_565D70(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax char *v6; // edx int v7; // ecx int v9; // [esp+0h] [ebp-38h] void **v10; // [esp+10h] [ebp-28h] void *v11; // [esp+1Ch] [ebp-1Ch] _DWORD *v12; // [esp+20h] [ebp-18h] void *v13; // [esp+24h] [ebp-14h] int *v14; // [esp+28h] [ebp-10h] int v15; // [esp+34h] [ebp-4h] v14 = &v9; v2 = this; v3 = operator new(0x30u); v4 = v3; v13 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&a2); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v5 = v3 + 3; v4[2] = v2[1]; *((_WORD *)v4 + 22) = 0; v15 = 0; v12 = v4 + 3; v11 = v4 + 3; LOBYTE(v15) = 1; if ( v5 ) { v6 = a2; *v5 = *(_DWORD *)a2; v7 = (int)(v4 + 4); *(_DWORD *)(v7 + 20) = 15; *(_DWORD *)(v7 + 16) = 0; *(_BYTE *)v7 = 0; sub_4017F0((const void **)v4 + 4, (const void **)v6 + 1, 0, (void *)0xFFFFFFFF); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00565E50) -------------------------------------------------------- char __thiscall sub_565E50(_DWORD *this, void *a2, int a3) { _DWORD *v3; // edi char *v4; // eax char result; // al int v6; // esi _DWORD *v7; // eax int v8; // [esp+10h] [ebp-78h] char v9; // [esp+14h] [ebp-74h] _DWORD *v10; // [esp+18h] [ebp-70h] void *v11; // [esp+1Ch] [ebp-6Ch] int v12; // [esp+2Ch] [ebp-5Ch] unsigned int v13; // [esp+30h] [ebp-58h] int v14; // [esp+38h] [ebp-50h] char v15[4]; // [esp+3Ch] [ebp-4Ch] void *v16; // [esp+40h] [ebp-48h] int v17; // [esp+50h] [ebp-38h] unsigned int v18; // [esp+54h] [ebp-34h] void *v19; // [esp+5Ch] [ebp-2Ch] int v20; // [esp+6Ch] [ebp-1Ch] unsigned int v21; // [esp+70h] [ebp-18h] int v22; // [esp+84h] [ebp-4h] v3 = this; v10 = this; if ( !a2 ) return 0; v13 = 15; v12 = 0; LOBYTE(v11) = 0; v14 = 0; v21 = 15; v22 = 0; v20 = 0; LOBYTE(v19) = 0; sub_4018E0(&v19, a2, strlen((const char *)a2)); LOBYTE(v22) = 1; sub_406450(&v11, &v19); LOBYTE(v22) = 0; if ( v21 >= 0x10 ) operator delete(v19); v14 = a3; v4 = sub_4A00B0(v3 + 6, (char *)&v11); sub_7478C0(v3 + 6, (int)&v8, v4, 0); if ( !v9 ) { if ( v13 >= 0x10 ) operator delete(v11); return 0; } v18 = 15; v17 = 0; LOBYTE(v16) = 0; *(_DWORD *)v15 = v10[8] - 1; LOBYTE(v22) = 2; v21 = 15; v20 = 0; LOBYTE(v19) = 0; sub_4018E0(&v19, a2, strlen((const char *)a2)); LOBYTE(v22) = 3; sub_406450(&v16, &v19); LOBYTE(v22) = 2; if ( v21 >= 0x10 ) operator delete(v19); v6 = (int)v10; v7 = sub_565D70(v10 + 10, v15); sub_565C70((_DWORD *)(v6 + 40), (int)&v8, v7, 0); if ( v9 ) { if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; if ( v13 >= 0x10 ) operator delete(v11); result = 1; } else { if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; if ( v13 < 0x10 ) return 0; operator delete(v11); result = 0; } return result; } //----- (005660D0) -------------------------------------------------------- bool __thiscall sub_5660D0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) != 0; } //----- (005661F0) -------------------------------------------------------- void __thiscall sub_5661F0(char *this, unsigned int a2) { char *v2; // ebx int v3; // esi signed int v4; // edi int v5; // esi signed int v6; // edi v2 = this; if ( a2 < 1 ) { v3 = (int)(this + 348); v4 = 24; do { *(_BYTE *)(*(_DWORD *)v3 + 456) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 324))(0.0); v3 += 4; --v4; } while ( v4 ); *((_DWORD *)v2 + 145) = a2; if ( 24 * a2 < 24 * a2 + 24 ) { v5 = (int)&v2[96 * a2 + 348]; v6 = 24; do { *(_BYTE *)(*(_DWORD *)v5 + 456) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 324))(0.0); v5 += 4; --v6; } while ( v6 ); } } } //----- (005662E0) -------------------------------------------------------- LONG __thiscall sub_5662E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &MiniHouseInvWin::`vftable'; this[58] = &MiniHouseInvWin::`vftable'; v2 = this[116]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[115]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_5D5650(v1); } // 9CF40C: using guessed type void *MiniHouseInvWin::`vftable'; // 9CF42C: using guessed type void *MiniHouseInvWin::`vftable'; //----- (00566390) -------------------------------------------------------- char __thiscall sub_566390(void *this, int a2, int a3, int a4) { byte_BA6BD0 = 1; (*(void (**)(void))(*(_DWORD *)this + 528))(); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (005663B0) -------------------------------------------------------- _DWORD *__thiscall sub_5663B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MiniHouseInventoryWin::`vftable'; v1[58] = &MiniHouseInventoryWin::`vftable'; v1[122] = &PgWinDrop::`vftable'; v1[124] = 0; v1[142] = 0; v1[126] = &DropContents::`vftable'; *((_WORD *)v1 + 282) = -1; v1[123] = v1 + 126; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[145] = 0; *((_WORD *)v1 + 294) = -1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CF69C: using guessed type void *MiniHouseInventoryWin::`vftable'; // 9CF6BC: using guessed type void *MiniHouseInventoryWin::`vftable'; //----- (00566520) -------------------------------------------------------- void __thiscall sub_566520(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax v2 = this; v3 = this[a2 + 87]; if ( !*(_BYTE *)(v3 + 457) ) { v4 = sub_5D5470((_DWORD *)v3); if ( v4 ) { v2[128] = 10; v2[130] = 0; v2[131] = v4; v2[132] = 0; v2[129] = a2; v2[142] = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); v2[124] = v2; dword_BA6BCC = (int)(v2 + 122); } } } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005665B0) -------------------------------------------------------- char __thiscall sub_5665B0(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi _DWORD *v4; // ebx unsigned int v6; // edi int v7; // eax _DWORD *v8; // ecx v3 = a2[2]; v4 = this; if ( v3 && v3 != 10 ) return 0; v6 = a2[3]; v7 = a2[5]; if ( v7 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7) == 18 ) { v8 = *(_DWORD **)(v4[74] + 716); if ( v8 ) { if ( !v3 ) sub_53D160(v8, v6, 1); } } } return 1; } //----- (00566610) -------------------------------------------------------- char __thiscall sub_566610(_DWORD **this) { _DWORD **v1; // edi signed int v2; // ebx _DWORD **v3; // esi int v4; // eax v1 = this; v2 = 0; v3 = this + 87; do { v4 = sub_5D5470(*v3); if ( v4 ) { v4 = *(_DWORD *)(sub_5D5470(*v3) + 112); if ( v4 ) { v4 = _stricmp("House_MushRoom", (const char *)(v4 + 2)); if ( !v4 ) LOBYTE(v4) = sub_4BD0C0(v1[74], v2 + 11); } } ++v2; ++v3; } while ( v2 < 24 ); return v4; } //----- (00566670) -------------------------------------------------------- void **__thiscall sub_566670(void **this) { void **v1; // esi v1 = this; sub_5D6D00(this); *v1 = &MiniHouseInvWin::`vftable'; v1[58] = &MiniHouseInvWin::`vftable'; v1[115] = 0; v1[116] = 0; v1[95] = 0; v1[112] = (void *)-1; v1[113] = (void *)9; sub_5D5B70(v1, 0, 1); *((_WORD *)v1 + 228) = 0; return v1; } // 9CF40C: using guessed type void *MiniHouseInvWin::`vftable'; // 9CF42C: using guessed type void *MiniHouseInvWin::`vftable'; //----- (00566710) -------------------------------------------------------- void __thiscall sub_566710(_DWORD *this, float a2) { int v2; // esi int v3; // eax int v4; // edi void (__thiscall *v5)(int, signed int); // eax v2 = (int)this; v3 = this[113]; if ( v3 == 9 ) { v4 = dword_ADA5AC[this[112]]; } else { if ( v3 != 8 ) goto LABEL_7; v4 = dword_ADA8AC[this[112]]; } if ( v4 != sub_5D5470(this) ) sub_5D5B70((_WORD *)v2, v4, 1); LABEL_7: v5 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 256); if ( *(_BYTE *)(v2 + 456) ) { v5(v2, 1); *(_BYTE *)(v2 + 254) = 1; if ( !sub_5D5470((_DWORD *)v2) ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); sub_5D31A0(v2, a2); } else { v5(v2, 0); *(_BYTE *)(v2 + 254) = 0; } } //----- (005667C0) -------------------------------------------------------- void __thiscall sub_5667C0(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 457) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 296), *(_DWORD *)(v1 + 448)); } } //----- (005667F0) -------------------------------------------------------- void __thiscall sub_5667F0(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 457) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 324), *(_DWORD *)(v1 + 448)); } } //----- (00566820) -------------------------------------------------------- int __thiscall sub_566820(void *this) { int v1; // esi int result; // eax int v3; // edi int *v4; // ecx v1 = (int)this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 324))(0.0); result = sub_5D5470((_DWORD *)v1); v3 = result; if ( result ) { if ( !*(_BYTE *)(v1 + 457) ) { result = sub_402BF0((_DWORD *)v1); if ( result ) { v4 = *(int **)(v1 + 272); if ( v4 ) { sub_547C20(v4, v3); result = sub_8F2F90(v1); } } } } return result; } //----- (00566880) -------------------------------------------------------- _DWORD *__thiscall sub_566880(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD *result; // eax __int16 v4; // cx int v5; // ST10_4 char *v6; // eax char v7; // [esp+4h] [ebp-108h] v2 = this; result = (_DWORD *)sub_5D5470(this[111]); if ( result ) { v4 = *((_WORD *)result + 4); if ( *((_WORD *)v2 + 294) != v4 ) { *((_WORD *)v2 + 294) = v4; result = (_DWORD *)result[29]; if ( result ) { result = (_DWORD *)sub_548E10((const char *)result + 2); if ( result ) { v5 = (int)result + 66; v6 = sub_4083B0(); sprintf(&v7, "%sgame\\MiniHouse\\%s.dds", v6, v5); result = sub_486130((int)&v7); if ( result ) result = (_DWORD *)sub_8FCC40((void *)v2[146][72], (int)result); } } } } return result; } //----- (00566930) -------------------------------------------------------- char __thiscall sub_566930(_DWORD **this, int a2, int a3, unsigned int a4) { _DWORD **v4; // esi _WORD *v5; // ecx _WORD *v7; // ecx v4 = this; if ( a4 <= 0xA ) { v7 = this[a4 + 111]; if ( v7 ) sub_5D5B70(v7, a3, 1); if ( !sub_5D5470(v4[a4 + 111]) ) sub_566610(v4); } else { v5 = this[a4 + 76]; if ( v5 ) { sub_5D5B70(v5, a3, 1); return 0; } } return 0; } //----- (005669B0) -------------------------------------------------------- char __thiscall sub_5669B0(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD **v3; // esi const CHAR *v4; // edi int v5; // eax v2 = this; if ( byte_ACF576 ) { v3 = this + 58; v4 = sub_40C190(304935962); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } LOBYTE(v5) = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } else { v5 = sub_5D5470(this[a2 + 87]); if ( v5 ) LOBYTE(v5) = sub_4BD0C0(v2[74], a2 + 11); } return v5; } // ACF576: using guessed type char byte_ACF576; //----- (00566BB0) -------------------------------------------------------- char __thiscall sub_566BB0(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi _DWORD *v4; // ebx unsigned int v6; // edi int v7; // ecx _DWORD *v8; // ecx const CHAR *v9; // edi int v10; // eax v3 = a2[2]; v4 = this; if ( v3 && v3 != 10 ) return 0; v6 = a2[3]; if ( v6 >= 0xC0 ) return 0; v7 = a2[5]; if ( v7 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v7 + 4))() == 18 ) { v8 = *(_DWORD **)(v4[74] + 716); if ( v8 ) { if ( !a3 ) { if ( !v3 ) { sub_53D160(v8, v6, 1); return 1; } if ( v3 == 10 ) { if ( byte_ACF576 ) { v9 = sub_40C190(304935962); if ( v4[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v4[59] + 4))(25, v9, v4 + 58); if ( v4[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v4[59] + 20))(25, v9, v4 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v4[58] + 20))( v4 + 58, 25, v9, v4 + 58); return 0; } v10 = (unsigned __int8)dword_AD8EBC[1924]; if ( v10 != 5 && v10 != 4 ) sub_5669B0((_DWORD **)v4, v6); } } } } } return 1; } // ACF576: using guessed type char byte_ACF576; //----- (00567050) -------------------------------------------------------- char __thiscall sub_567050(int this, int a2, int a3, int a4) { int v4; // edi char result; // al _DWORD *v6; // esi int v7; // eax _DWORD *v8; // ecx v4 = this; if ( *(_BYTE *)(this + 457) || !*(_DWORD *)a2 || !*(_BYTE *)(this + 456) ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); v7 = v6[2]; if ( v7 && v7 != 10 ) return 0; v8 = (_DWORD *)sub_402BF0((_DWORD *)this); if ( *(_DWORD *)(v4 + 452) == 9 ) result = sub_5665B0(v8, v6, *(_DWORD *)(v4 + 448)); else result = sub_566BB0(v8, v6, *(_DWORD *)(v4 + 448)); return result; } //----- (005670D0) -------------------------------------------------------- void __thiscall sub_5670D0(_DWORD *this, int a2, int a3) { int v3; // edx int v4; // eax int v5; // eax signed int v6; // eax _DWORD *v7; // eax v3 = (unsigned __int8)dword_AD8EBC[1924]; switch ( a2 ) { case 3: sub_566520(this, a3); break; case 4: if ( v3 != 5 && v3 != 4 && !dword_BA6BCC ) sub_5669B0((_DWORD **)this, a3); break; case 8: v4 = this[145]; if ( v4 > 0 ) sub_5661F0((char *)this, v4 - 1); break; case 9: v5 = this[145]; if ( v5 >= 0 ) { v6 = v5 + 1; if ( v6 < 1 ) sub_5661F0((char *)this, v6); } break; case 14: v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_4A5170(v7, "MinihouseInv"); break; default: return; } } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005671B0) -------------------------------------------------------- volatile LONG *__cdecl sub_5671B0(int a1, int a2, int a3, int a4) { void *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1D4u); v8 = v4; v9 = 0; if ( v4 ) v5 = (volatile LONG *)sub_566670((void **)v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (005672F0) -------------------------------------------------------- int __cdecl sub_5672F0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x144u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8FE000(v5); *(_DWORD *)v6 = &MiniHouseInvTabButWin::`vftable'; *(_DWORD *)(v6 + 232) = &MiniHouseInvTabButWin::`vftable'; *(_BYTE *)(v6 + 254) = 1; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 560))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9CF1B4: using guessed type void *MiniHouseInvTabButWin::`vftable'; // 9CF1D4: using guessed type void *MiniHouseInvTabButWin::`vftable'; //----- (00567450) -------------------------------------------------------- volatile LONG *__cdecl sub_567450(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x250u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5663B0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00567580) -------------------------------------------------------- char __thiscall sub_567580(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // edi const CHAR *v17; // eax volatile LONG **v18; // edi int v19; // eax volatile LONG **v20; // edi int v21; // ST38_4 int v22; // edi int v23; // eax volatile LONG **v24; // eax _WORD *v25; // eax int v26; // ST40_4 char *v27; // ST3C_4 char *v28; // ST3C_4 volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax int v32; // edi volatile LONG **v33; // eax volatile LONG *v34; // eax int v35; // edi int v36; // ebx int v37; // ecx volatile LONG **v38; // eax void (__thiscall ***v39)(_DWORD, signed int); // esi int v40; // ebx int *v41; // edi volatile LONG **v42; // eax volatile LONG *v43; // eax volatile LONG *v44; // eax bool v45; // sf unsigned __int8 v46; // of void (__thiscall ***v47)(_DWORD, signed int); // esi int v48; // [esp+50h] [ebp-220h] int v49; // [esp+54h] [ebp-21Ch] int v50; // [esp+58h] [ebp-218h] int v51; // [esp+5Ch] [ebp-214h] volatile LONG *v52; // [esp+60h] [ebp-210h] volatile LONG *v53; // [esp+64h] [ebp-20Ch] volatile LONG **i; // [esp+68h] [ebp-208h] int v55; // [esp+6Ch] [ebp-204h] int v56; // [esp+70h] [ebp-200h] int v57; // [esp+74h] [ebp-1FCh] int v58[24]; // [esp+78h] [ebp-1F8h] int v59[24]; // [esp+D8h] [ebp-198h] char v60; // [esp+138h] [ebp-138h] char v61; // [esp+23Ch] [ebp-34h] int v62; // [esp+26Ch] [ebp-4h] v2 = (int)this; v57 = 0; v62 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v53 = v3; if ( !v3 ) goto LABEL_49; v50 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\MinihouseInv.nif"); sub_8F66B0(v6, (int)&v57, v50); if ( !v57 ) return 0; v7 = sub_8FB140(v57, (int)"Frame", (int)&v55, (int)&v56, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"MiniHouseInventoryWin", 0) ) { LABEL_49: v4 = (void (__thiscall ***)(_DWORD, signed int))v57; v62 = -1; if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v55; v9 = v56; v50 = v55; v51 = v56; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v57, (int)"Theme", (int)&v55, (int)&v56, v10); else v11 = sub_8FB140(v57, (int)"Theme", (int)&v55, (int)&v56, 0); sub_8F3EB0(v55 - v8, v56 - v9, (int)v11, v2, 0, 0); i = sub_8FB140(v57, (int)"ClsNor", (int)&v55, (int)&v56, v53); sub_8FB650(i, v57, (int)"ClsClick"); sub_8FB650(i, v57, (int)"ClsOver"); sub_90C8D0(v55 - v8, v56 - v9, (int)i, v2); v52 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v57 + 72))("HelpLinkNor") ) { i = sub_8FB140(v57, (int)"HelpLinkNor", (int)&v55, (int)&v56, v52); sub_8FB650(i, v57, (int)"HelpLinkClick"); sub_8FB650(i, v57, (int)"HelpLinkOver"); sub_8FE0F0(v55 - v8, v56 - v9, (int)i, v2, 14, 0, 0); } v12 = sub_8FB140(v57, (int)"Panel01", (int)&v55, (int)&v56, v53); v13 = sub_8F3EB0(v55 - v8, v56 - v9, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v57, (int)"Panel02", (int)&v55, (int)&v56, v53); sub_8F3EB0(v55 - v8, v56 - v9, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v57, (int)"WinTitle", &v55, &v56, &v48, &v49) ) goto LABEL_50; v15 = sub_421050(7); v16 = sub_8F4A20(v55 - v8, v56 - v9 + 2, v48, v49, v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v16 + 468))(v16, &dword_AA8D98); v52 = (volatile LONG *)(*v16 + 472); v17 = sub_40C190(-1762069264); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v52)(v16, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v18 = sub_8FB140(v57, (int)"PrePageNor", (int)&v55, (int)&v56, v53); sub_8FB650(v18, v57, (int)"PrePageClick"); sub_8FB650(v18, v57, (int)"PrePageOver"); v19 = sub_5672F0(v55 - v8, v56 - v51, (int)v18, v2, 8); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v19 + 240))(v19, 0); v20 = sub_8FB140(v57, (int)"NextPageNor", (int)&v55, (int)&v56, v53); sub_8FB650(v20, v57, (int)"NextPageClick"); sub_8FB650(v20, v57, (int)"NextPageOver"); v21 = (int)v20; v22 = v51; v23 = sub_5672F0(v55 - v8, v56 - v51, v21, v2, 9); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v23 + 240))(v23, 0); v24 = sub_8FB140(v57, (int)"IconSlot", (int)&v55, (int)&v56, v53); sub_8F3EB0(v55 - v8, v56 - v22, (int)v24, v2, 0, 0); v25 = sub_567FD0(0); if ( v25 ) { v26 = (int)(v25 + 33); v27 = sub_4083B0(); sprintf(&v60, "%sgame\\MiniHouse\\%s.dds", v27, v26); } else { v28 = sub_4083B0(); sprintf(&v60, "%sgame\\MiniHouse\\%s.dds", v28, "mushroom"); } v29 = sub_486130((int)&v60); if ( v29 ) { v30 = sub_8FB140(v57, (int)"Plane01", (int)&v55, (int)&v56, v29); v31 = sub_8F3EB0(v55 - v8, v56 - v22, (int)v30, v2, 0, 0); *(_DWORD *)(v2 + 584) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v32 = 0; do { sprintf(&v61, "EquipSlot%02d", v32); if ( v32 ) v33 = sub_8FB140(v57, (int)&v61, (int)&v55, (int)&v56, v53); else v33 = sub_8FB140(v57, (int)"MinihouseSlot", (int)&v55, (int)&v56, v53); sub_8F3EB0(v55 - v8, v56 - v51, (int)v33, v2, 0, 0); v34 = sub_5671B0(v55 - v8 + 1, v56 - v51 + 1, v32, v2); *(_DWORD *)(v2 + 4 * v32 + 444) = v34; sub_5D5B70(v34, 0, 1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v32 + 444) + 516))(5); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v32 + 444) + 560))(6); *(_DWORD *)(*(_DWORD *)(v2 + 4 * v32 + 444) + 452) = 8; *(_DWORD *)(*(_DWORD *)(v2 + 4 * v32 + 444) + 272) = dword_ACEC34; *(_DWORD *)(*(_DWORD *)(v2 + 4 * v32 + 444) + 304) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 4 * v32 + 444) + 456) = 1; sub_5D3170(*(_DWORD *)(v2 + 4 * v32++ + 444), 1); } while ( v32 < 11 ); v35 = 0; while ( 1 ) { v36 = v35 + 1; sprintf(&v61, "InvItemSlot%03d", v35 + 1); if ( !sub_8F71E0(v57, (int)&v61, &v55, &v56, &v48, &v49) ) break; v37 = v56; v58[v35] = v55; v59[v35++] = v37; if ( v36 >= 24 ) { v38 = 0; for ( i = 0; ; v38 = i ) { v40 = 24 * (_DWORD)v38; v52 = 0; v41 = (int *)(96 * (_DWORD)v38 + v2 + 348); do { if ( !v38 ) { sprintf(&v61, "InvItemSlot%03d", (char *)v52 + 1); v42 = sub_8FB140(v57, (int)&v61, (int)&v55, (int)&v56, v53); sub_8F3EB0(v55 - v50, v56 - v51, (int)v42, v2, 0, 0); } v43 = sub_5671B0(v58[v40] - v50 + 1, v59[v40] - v51 + 1, v40, v2); *v41 = (int)v43; sub_5D5B70(v43, 0, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v41 + 516))(3); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v41 + 560))(4); *(_DWORD *)(*v41 + 452) = 9; *(_DWORD *)(*v41 + 272) = dword_ACEC34; *(_DWORD *)(*v41 + 304) = 1; sub_5D3170(*v41, 1); v44 = (volatile LONG *)((char *)v52 + 1); ++v40; ++v41; v52 = v44; v46 = __OFSUB__(v44, 24); v45 = (signed int)(v44 - 6) < 0; v38 = i; } while ( v45 ^ v46 ); i = (volatile LONG **)((char *)i + 1); if ( (signed int)i >= 1 ) break; } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.41999999, 0.57999998); sub_5661F0((char *)v2, 0); v47 = (void (__thiscall ***)(_DWORD, signed int))v57; v62 = -1; if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) && v47 ) (**v47)(v47, 1); return 1; } } v39 = (void (__thiscall ***)(_DWORD, signed int))v57; v62 = -1; if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) && v39 ) (**v39)(v39, 1); result = 0; } else { LABEL_50: v62 = -1; sub_410C00(&v57); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // 567580: using guessed type int var_1F8[24]; // 567580: using guessed type int var_198[24]; //----- (00567F40) -------------------------------------------------------- char __thiscall sub_567F40(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; sub_5D5420(v5, 1); a5 = v5; sub_5B3CF0(&dword_AD02C4, &a5); result = 1; } return result; } //----- (00567F90) -------------------------------------------------------- void *__thiscall sub_567F90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MiniHouseInvTabButWin::`vftable'; *((_DWORD *)this + 58) = &MiniHouseInvTabButWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CF1B4: using guessed type void *MiniHouseInvTabButWin::`vftable'; // 9CF1D4: using guessed type void *MiniHouseInvTabButWin::`vftable'; //----- (00567FD0) -------------------------------------------------------- _WORD *__cdecl sub_567FD0(__int16 a1) { unsigned int v1; // esi _WORD *result; // eax v1 = 0; if ( !sub_548A80() ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD95C + 4), v1); if ( *result == a1 ) break; if ( ++v1 >= sub_548A80() ) return 0; } return result; } // ACD95C: using guessed type int dword_ACD95C; //----- (00568010) -------------------------------------------------------- void *__thiscall sub_568010(void *this, char a2) { void *v2; // esi v2 = this; sub_5662E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00568040) -------------------------------------------------------- void *__thiscall sub_568040(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MiniHouseInventoryWin::`vftable'; *((_DWORD *)this + 58) = &MiniHouseInventoryWin::`vftable'; *((_DWORD *)this + 126) = &DropContents::`vftable'; *((_DWORD *)this + 122) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9CF69C: using guessed type void *MiniHouseInventoryWin::`vftable'; // 9CF6BC: using guessed type void *MiniHouseInventoryWin::`vftable'; //----- (00568160) -------------------------------------------------------- int __thiscall sub_568160(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) { if ( this[91] ) result = (*(int (__stdcall **)(int))(*this[91] + 472))(a2); } return result; } //----- (00568190) -------------------------------------------------------- char sub_568190() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHouseMenu"); return (char)v0; } //----- (005681C0) -------------------------------------------------------- signed int __thiscall sub_5681C0(_WORD *this, char a2) { signed int result; // eax if ( a2 ) { result = 65534; this[14] &= 0xFFFEu; } else { this[14] |= 1u; } return result; } //----- (005681E0) -------------------------------------------------------- char __thiscall sub_5681E0(void *this, int a2) { int v2; // esi volatile LONG *v3; // eax int v4; // edi volatile LONG *v5; // ebx char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi int v17; // eax volatile LONG v18; // ST68_4 const CHAR *v19; // eax volatile LONG *v20; // eax int v21; // eax int v22; // ST68_4 int v23; // eax volatile LONG *v24; // eax const CHAR *v25; // eax float *v26; // eax volatile LONG *v27; // eax int v28; // eax int v29; // ST68_4 int v30; // eax volatile LONG *v31; // eax const CHAR *v32; // eax volatile LONG *v33; // eax int v34; // eax int v35; // ST68_4 int v36; // eax volatile LONG *v37; // eax const CHAR *v38; // eax volatile LONG *v39; // ecx int v40; // ST68_4 int v41; // eax volatile LONG v42; // ST68_4 const CHAR *v43; // eax volatile LONG *v44; // ecx int v45; // ST68_4 int v46; // eax volatile LONG *v47; // edi volatile LONG v48; // ebx const CHAR *v49; // eax void (__thiscall ***v50)(_DWORD, signed int); // esi int v51; // [esp+6Ch] [ebp-24h] int v52; // [esp+70h] [ebp-20h] volatile LONG *v53; // [esp+74h] [ebp-1Ch] int v54; // [esp+78h] [ebp-18h] int v55; // [esp+7Ch] [ebp-14h] int v56; // [esp+80h] [ebp-10h] int v57; // [esp+8Ch] [ebp-4h] volatile LONG **v58; // [esp+98h] [ebp+8h] volatile LONG *v59; // [esp+98h] [ebp+8h] volatile LONG **v60; // [esp+98h] [ebp+8h] volatile LONG *v61; // [esp+98h] [ebp+8h] volatile LONG **v62; // [esp+98h] [ebp+8h] int v63; // [esp+98h] [ebp+8h] int v64; // [esp+98h] [ebp+8h] int v65; // [esp+98h] [ebp+8h] volatile LONG **v66; // [esp+98h] [ebp+8h] int v67; // [esp+98h] [ebp+8h] int v68; // [esp+98h] [ebp+8h] volatile LONG **v69; // [esp+98h] [ebp+8h] int v70; // [esp+98h] [ebp+8h] int v71; // [esp+98h] [ebp+8h] volatile LONG **v72; // [esp+98h] [ebp+8h] int v73; // [esp+98h] [ebp+8h] volatile LONG *v74; // [esp+98h] [ebp+8h] volatile LONG **v75; // [esp+98h] [ebp+8h] int v76; // [esp+98h] [ebp+8h] v2 = (int)this; v56 = 0; v57 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v4 = dword_BA6BA0; v5 = v3; v53 = v3; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHouseMenu.nif"); sub_8F66B0(v6, (int)&v56, v4); if ( !v56 ) return 0; v7 = sub_8FB140(v56, (int)"Frame", (int)&v54, (int)&v55, v5); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"MiniHouseMenuWin", 0) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v56; v57 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v10 = v54; v11 = v55; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v56, (int)"Theme", (int)&v54, (int)&v55, v12); else v13 = sub_8FB140(v56, (int)"Theme", (int)&v54, (int)&v55, 0); sub_8F3EB0(v54, v55, (int)v13, v2, 0, 0); v14 = sub_8FB140(v56, (int)"Panel01", (int)&v54, (int)&v55, v53); sub_8F3EB0(v54 - v10, v55 - v11, (int)v14, v2, 0, 0); v15 = sub_8FB140(v56, (int)"Panel02", (int)&v54, (int)&v55, v53); sub_8F3EB0(v54 - v10, v55 - v11, (int)v15, v2, 0, 0); v58 = sub_8FB140(v56, (int)"ClsNor", (int)&v54, (int)&v55, 0); sub_8FB650(v58, v56, (int)"ClsClick"); sub_8FB650(v58, v56, (int)"ClsOver"); sub_90C8D0(v54 - v10, v55 - v11, (int)v58, v2); v59 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v56 + 72))("HelpLinkNor") ) { v60 = sub_8FB140(v56, (int)"HelpLinkNor", (int)&v54, (int)&v55, v59); sub_8FB650(v60, v56, (int)"HelpLinkClick"); sub_8FB650(v60, v56, (int)"HelpLinkOver"); sub_8FE0F0(v54 - v10, v55 - v11, (int)v60, v2, 8, 0, 0); } if ( sub_8F71E0(v56, (int)"WinTitle", &v54, &v55, &v51, &v52) ) { v17 = sub_421050(7); v61 = sub_8F4A20(v54 - v10, v55 - v11, v51, v52, v17, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v61 + 488))(v61, 1); (*(void (__stdcall **)(int *))(*v61 + 468))(&dword_AA8D98); v18 = *v61; v19 = sub_40C190(-449231809); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v18 + 472))(v61, v19); (*(void (__stdcall **)(_DWORD))(*v61 + 240))(0); v62 = sub_8FB140(v56, (int)"RestNor", (int)&v54, (int)&v55, v53); sub_8FB650(v62, v56, (int)"RestClick"); sub_8FB650(v62, v56, (int)"RestOver"); v20 = sub_8FE0F0(v54 - v10, v55 - v11, (int)v62, v2, 1, 0, 0); *(_DWORD *)(v2 + 348) = v20; *((_DWORD *)v20 + 68) = dword_AD01E8; v21 = *v62[9]; v63 = *(_DWORD *)(v21 + 24); v22 = *(_DWORD *)(v21 + 20); v23 = sub_421050(7); v24 = sub_8F4A20(v54 - v10, v55 - v11 + 1, v22, v63, v23, v2, 0, 0); *(_DWORD *)(v2 + 356) = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 5); v64 = **(_DWORD **)(v2 + 356); v25 = sub_40C190(-1833829137); (*(void (__thiscall **)(_DWORD, const CHAR *))(v64 + 472))(*(_DWORD *)(v2 + 356), v25); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); v65 = *(_DWORD *)(v2 + 348); v26 = sub_4388B0(); sub_815C70((_DWORD *)v26 + 41, 0, v65); v66 = sub_8FB140(v56, (int)"PrivatStoreNor", (int)&v54, (int)&v55, v53); sub_8FB650(v66, v56, (int)"PrivatStoreClick"); sub_8FB650(v66, v56, (int)"PrivatStoreOver"); v27 = sub_8FE0F0(v54 - v10, v55 - v11, (int)v66, v2, 2, 0, 0); *(_DWORD *)(v2 + 344) = v27; *((_DWORD *)v27 + 68) = dword_AD01E8; v28 = *v66[9]; v67 = *(_DWORD *)(v28 + 24); v29 = *(_DWORD *)(v28 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v54 - v10, v55 - v11 + 1, v29, v67, v30, v2, 0, 0); *(_DWORD *)(v2 + 360) = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v68 = **(_DWORD **)(v2 + 360); v32 = sub_40C190(-1662386965); (*(void (__thiscall **)(_DWORD, const CHAR *))(v68 + 472))(*(_DWORD *)(v2 + 360), v32); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); v69 = sub_8FB140(v56, (int)"EntanceNor", (int)&v54, (int)&v55, v53); sub_8FB650(v69, v56, (int)"EntanceClick"); sub_8FB650(v69, v56, (int)"EntanceOver"); v33 = sub_8FE0F0(v54 - v10, v55 - v11, (int)v69, v2, 3, 0, 0); *(_DWORD *)(v2 + 352) = v33; *((_DWORD *)v33 + 68) = dword_AD01E8; v34 = *v69[9]; v70 = *(_DWORD *)(v34 + 24); v35 = *(_DWORD *)(v34 + 20); v36 = sub_421050(7); v37 = sub_8F4A20(v54 - v10, v55 - v11 + 1, v35, v70, v36, v2, 0, 0); *(_DWORD *)(v2 + 364) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v71 = **(_DWORD **)(v2 + 364); v38 = sub_40C190(-84526279); (*(void (__thiscall **)(_DWORD, const CHAR *))(v71 + 472))(*(_DWORD *)(v2 + 364), v38); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); v72 = sub_8FB140(v56, (int)"ChangeNor", (int)&v54, (int)&v55, v53); sub_8FB650(v72, v56, (int)"ChangeClick"); sub_8FB650(v72, v56, (int)"ChangeOver"); sub_8FE0F0(v54 - v10, v55 - v11, (int)v72, v2, 6, 0, 0); v39 = v72[9]; v73 = *(_DWORD *)(*v39 + 24); v40 = *(_DWORD *)(*v39 + 20); v41 = sub_421050(7); v74 = sub_8F4A20(v54 - v10, v55 - v11 + 1, v40, v73, v41, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v74 + 488))(v74, 5); v42 = *v74; v43 = sub_40C190(2039321736); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v42 + 472))(v74, v43); (*(void (__stdcall **)(_DWORD))(*v74 + 240))(0); v75 = sub_8FB140(v56, (int)"QuitNor", (int)&v54, (int)&v55, v53); sub_8FB650(v75, v56, (int)"QuitClick"); sub_8FB650(v75, v56, (int)"QuitOver"); sub_8FE0F0(v54 - v10, v55 - v11, (int)v75, v2, 7, 0, 0); v44 = v75[9]; v76 = *(_DWORD *)(*v44 + 24); v45 = *(_DWORD *)(*v44 + 20); v46 = sub_421050(7); v47 = sub_8F4A20(v54 - v10, v55 - v11 + 1, v45, v76, v46, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); v48 = *v47; v49 = sub_40C190(1010146193); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v48 + 472))(v47, v49); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v57 = -1; if ( v56 ) { v50 = (void (__thiscall ***)(_DWORD, signed int))v56; if ( !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) { if ( v50 ) (**v50)(v50, 1); } } result = 1; } else { v16 = (void (__thiscall ***)(_DWORD, signed int))v56; v57 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) && v16 ) (**v16)(v16, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00568AA0) -------------------------------------------------------- char __thiscall sub_568AA0(_DWORD *this, int a2, int a3) { char result; // al _DWORD *v4; // esi _DWORD *v5; // edi const CHAR *v6; // eax _DWORD *v7; // ecx int v8; // [esp-Ch] [ebp-10h] result = a2 - 1; v4 = this; switch ( a2 ) { case 1: v8 = 173; goto LABEL_3; case 2: if ( dword_ADB4F8 ) { v5 = (_DWORD *)this[74]; v6 = sub_40C190(-2014592036); sub_492060(v5, (int)v6); } else { sub_8EEE70((_DWORD *)this[74], 163, 0, 0); } return sub_8F86A0(&unk_BA6B10, v4); case 3: v7 = (_DWORD *)this[74]; if ( dword_ADB4F8 ) sub_8EEE70(v7, 206, 0, 0); else sub_8EEE70(v7, 192, 0, 0); goto LABEL_4; case 4: v8 = 219; goto LABEL_3; case 6: v8 = 184; LABEL_3: sub_8EEE70((_DWORD *)this[74], v8, 0, 0); goto LABEL_4; case 7: LABEL_4: result = sub_8F86A0(&unk_BA6B10, v4); break; case 8: result = sub_568190(); break; default: return result; } return result; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (00568BB0) -------------------------------------------------------- void __userpurge sub_568BB0(int a1@, int a2@, int a3) { int v3; // esi void (__cdecl *v4)(int *); // edx int v5; // ST04_4 int v6; // edi const CHAR *v7; // eax v3 = a1; if ( *(_DWORD *)(a1 + 344) && *(_DWORD *)(a1 + 360) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(a1 + 344) + 240))(a3); v4 = *(void (__cdecl **)(int *))(**(_DWORD **)(v3 + 360) + 468); if ( (_BYTE)a3 ) v4(&dword_AA8C68); else v4((int *)&unk_AA8CE8); v5 = a2; v6 = **(_DWORD **)(v3 + 360); v7 = sub_40C190(-1662386965); (*(void (__thiscall **)(_DWORD, const CHAR *, int))(v6 + 472))(*(_DWORD *)(v3 + 360), v7, v5); } } // 568BB0: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; //----- (00568C30) -------------------------------------------------------- void __userpurge sub_568C30(int a1@, int a2@, int a3) { int v3; // esi void (__cdecl *v4)(int *); // edx int v5; // ST04_4 int v6; // edi const CHAR *v7; // eax v3 = a1; if ( *(_DWORD *)(a1 + 348) && *(_DWORD *)(a1 + 356) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(a1 + 348) + 240))(a3); v4 = *(void (__cdecl **)(int *))(**(_DWORD **)(v3 + 356) + 468); if ( (_BYTE)a3 ) v4(&dword_AA8C68); else v4((int *)&unk_AA8CE8); v5 = a2; v6 = **(_DWORD **)(v3 + 356); v7 = sub_40C190(-1833829137); (*(void (__thiscall **)(_DWORD, const CHAR *, int))(v6 + 472))(*(_DWORD *)(v3 + 356), v7, v5); } } // 568C30: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; //----- (00568CB0) -------------------------------------------------------- void __userpurge sub_568CB0(int a1@, int a2@, int a3) { _DWORD **v3; // esi char v4; // al int v5; // edi const CHAR *v6; // eax int v7; // edi const CHAR *v8; // eax v3 = (_DWORD **)a1; if ( dword_AD8EBC ) { v4 = dword_AD8EBC[1924]; if ( v4 == 4 ) { if ( *(_DWORD *)(a1 + 344) && *(_DWORD *)(a1 + 360) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(a1 + 344) + 240))(0); (*(void (__stdcall **)(void *))(*v3[90] + 468))(&unk_AA8CE8); v5 = *v3[90]; v6 = sub_40C190(-1662386965); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v5 + 472))(v3[90], v6); } if ( v3[87] ) (*(void (__stdcall **)(signed int))(*v3[87] + 240))(1); if ( v3[89] ) { (*(void (__stdcall **)(int *))(*v3[89] + 468))(&dword_AA8C68); v7 = *v3[89]; v8 = sub_40C190(-520725709); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v7 + 472))(v3[89], v8); } } else if ( v4 == 5 ) { sub_568BB0(a1, a2, 0); sub_568C30((int)v3, a2, 0); } else { sub_568BB0(a1, a2, 1); sub_568C30((int)v3, a2, 1); } } } // AA8C68: using guessed type int dword_AA8C68; //----- (00568DC0) -------------------------------------------------------- int __cdecl sub_568DC0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MiniHouseMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &MiniHouseMenuWin::`vftable'; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 364) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9CFA68: using guessed type void *MiniHouseMenuWin::`vftable'; // 9CFA84: using guessed type void *MiniHouseMenuWin::`vftable'; //----- (00568F20) -------------------------------------------------------- void *__thiscall sub_568F20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MiniHouseMenuWin::`vftable'; *((_DWORD *)this + 58) = &MiniHouseMenuWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CFA68: using guessed type void *MiniHouseMenuWin::`vftable'; // 9CFA84: using guessed type void *MiniHouseMenuWin::`vftable'; //----- (00569070) -------------------------------------------------------- int __thiscall sub_569070(_DWORD *this, int a2) { int result; // eax result = a2; this[73] = a2; return result; } //----- (00569080) -------------------------------------------------------- int __thiscall sub_569080(_DWORD *this) { return this[73]; } //----- (00569090) -------------------------------------------------------- int __thiscall sub_569090(_DWORD *this, int a2) { int result; // eax result = a2; this[73] = a2; return result; } //----- (005690A0) -------------------------------------------------------- int __thiscall sub_5690A0(_DWORD *this) { return this[73]; } //----- (005690B0) -------------------------------------------------------- int __thiscall sub_5690B0(_DWORD *this, _BYTE *a2) { _DWORD **v2; // esi int result; // eax int v4; // edi int v5; // eax int v6; // ebx int v7; // eax int v8; // edi int v9; // eax int v10; // [esp+Ch] [ebp+8h] v2 = (_DWORD **)this; result = sub_8F1EF0(this, a2); if ( v2[73] ) { if ( ((unsigned __int8 (__thiscall *)(_DWORD **, LONG, LONG))(*v2)[87])(v2, pt.x, pt.y) ) { v4 = ((int (__thiscall *)(_DWORD **))(*v2)[36])(v2) / 2 + 5; v5 = ((int (__thiscall *)(_DWORD **))(*v2)[37])(v2); v10 = *v2[73]; v6 = v5 / 2 + 5; v7 = ((int (__thiscall *)(_DWORD **))(*v2)[41])(v2); (*(void (__thiscall **)(_DWORD *, int))(v10 + 172))(v2[73], v7 - v4); v8 = *v2[73]; v9 = ((int (__thiscall *)(_DWORD **))(*v2)[42])(v2); (*(void (__thiscall **)(_DWORD *, int))(v8 + 176))(v2[73], v9 - v6); result = (*(int (__stdcall **)(signed int))(*v2[73] + 256))(1); } else { result = (*(int (__stdcall **)(_DWORD))(*v2[73] + 256))(0); } } return result; } //----- (005691A0) -------------------------------------------------------- __int16 __thiscall sub_5691A0(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[150] = a2; return result; } //----- (005691C0) -------------------------------------------------------- __int16 __thiscall sub_5691C0(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[151] = a2; return result; } //----- (005691E0) -------------------------------------------------------- int __thiscall sub_5691E0(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[77] = a2; this[78] = a3; return result; } //----- (00569220) -------------------------------------------------------- __int16 __thiscall sub_569220(_WORD *this) { return this[150]; } //----- (00569230) -------------------------------------------------------- __int16 __thiscall sub_569230(_WORD *this) { return this[151]; } //----- (00569250) -------------------------------------------------------- _DWORD *__thiscall sub_569250(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[77]; a2[1] = this[78]; return result; } //----- (00569270) -------------------------------------------------------- __int16 __thiscall sub_569270(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[148] = a2; return result; } //----- (00569290) -------------------------------------------------------- __int16 __thiscall sub_569290(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[149] = a2; return result; } //----- (005692B0) -------------------------------------------------------- int __thiscall sub_5692B0(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[75] = a2; this[76] = a3; return result; } //----- (005692D0) -------------------------------------------------------- __int16 __thiscall sub_5692D0(_WORD *this) { return this[148]; } //----- (005692E0) -------------------------------------------------------- __int16 __thiscall sub_5692E0(_WORD *this) { return this[149]; } //----- (005692F0) -------------------------------------------------------- _DWORD *__thiscall sub_5692F0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[75]; a2[1] = this[76]; return result; } //----- (00569310) -------------------------------------------------------- int __thiscall sub_569310(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[73] = a2; this[74] = a3; return result; } //----- (00569330) -------------------------------------------------------- int __thiscall sub_569330(char *this) { return (int)(this + 292); } //----- (00569340) -------------------------------------------------------- void __thiscall sub_569340(float *this, float a2) { this[76] = a2; } //----- (00569350) -------------------------------------------------------- BOOL __thiscall sub_569350(float *this, float a2) { return a2 > (double)this[76]; } //----- (00569380) -------------------------------------------------------- int __thiscall sub_569380(_DWORD *this, _DWORD *a2) { int result; // eax this[73] = *a2; result = a2[1]; this[74] = result; return result; } //----- (005693E0) -------------------------------------------------------- char __thiscall sub_5693E0(float *this, int a2) { float *v2; // esi double v3; // st7 _DWORD *v4; // ecx v2 = this; sub_460590(*((_DWORD ***)this + 88), a2); if ( a2 ) { v2[101] = (double)(unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 60))(a2) * v2[109]; v2[102] = (double)(unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 64))(a2) * v2[109]; v3 = v2[105] / v2[101]; } else { v2[101] = 512.0; v2[102] = 512.0; v3 = 0.3125; } v4 = (_DWORD *)*((_DWORD *)v2 + 133); v2[100] = v3; return sub_51CC00(v4, 0); } //----- (005694B0) -------------------------------------------------------- void __thiscall sub_5694B0(int this, float a2) { *(float *)(this + 436) = a2; sub_518170(*(float **)(this + 532), a2); } //----- (00569530) -------------------------------------------------------- int __thiscall sub_569530(int this) { _DWORD **v1; // esi double v2; // st7 float v3; // ST28_4 signed int v4; // eax float v5; // ST24_4 float v6; // ST28_4 float v7; // ST18_4 float v8; // ST14_4 float v9; // ST24_4 float v10; // ST28_4 float v11; // ST20_4 float v12; // ST20_4 float v13; // ST1C_4 float v14; // ST1C_4 double v15; // st5 double v16; // st4 float v17; // ST20_4 float v18; // ST18_4 double v19; // st7 float v20; // ST14_4 float v21; // ST14_4 float v22; // ST14_4 float v23; // ST0C_4 float v24; // ST14_4 float v25; // ST14_4 float v26; // ST14_4 v1 = (_DWORD **)this; if ( *(_DWORD *)(this + 396) ) v2 = 0.40000001; else v2 = 0.69999999; v3 = v2; v4 = *(_DWORD *)(this + 540); v5 = (double)(*(_DWORD *)(this + 544) - *(_DWORD *)(this + 536) + 1); v6 = 0.001953125 * v5 * v3; v7 = v5 * *(float *)(this + 436); v8 = (double)(*(_DWORD *)(this + 548) - v4 + 1) * *(float *)(this + 436); v9 = *(float *)(this + 420) * v6; v10 = v6 * *(float *)(this + 424); v11 = (double)*(signed int *)(this + 536) * *(float *)(this + 436); v12 = *(float *)(this + 452) - v9 * 0.5 - v11; v13 = (double)v4 * *(float *)(this + 436); v14 = *(float *)(this + 408) - (v13 + *(float *)(this + 456)) - 0.5 * v10; v15 = v12; v16 = v7; v17 = v12 / v7; v18 = v14 / v8; v19 = v8; v20 = v10 + v14; v21 = v20 / v19; v22 = v21 - v18; v23 = v22; v24 = v9 + v15; v25 = v24 / v16; v26 = v25 - v17; sub_460440(*(_DWORD ***)(this + 352), v17, v18, v26, v23); return sub_85BED0(v1, 0.0, 0); } //----- (005696C0) -------------------------------------------------------- void __thiscall sub_5696C0(_DWORD **this, __int16 *a2) { sub_51A960(this[133], a2); } //----- (005696D0) -------------------------------------------------------- char *__thiscall sub_5696D0(int *this, char a2) { return sub_5187F0(this[133], a2); } //----- (005696E0) -------------------------------------------------------- bool __thiscall sub_5696E0(int this, float a2, float a3, int a4, int a5) { int v5; // esi float v6; // ST10_4 double v7; // st7 float *v8; // edi double v9; // st7 float v10; // ST08_4 float v12; // ST08_4 double v13; // st7 float *v14; // ebx double v15; // st6 int v16; // esi int v17; // edi int v18; // [esp-8h] [ebp-14h] int v19; // [esp-4h] [ebp-10h] float v20; // [esp+0h] [ebp-Ch] float *v21; // [esp+4h] [ebp-8h] float v22; // [esp+8h] [ebp-4h] float v23; // [esp+14h] [ebp+8h] float v24; // [esp+14h] [ebp+8h] float v25; // [esp+14h] [ebp+8h] float v26; // [esp+18h] [ebp+Ch] float v27; // [esp+18h] [ebp+Ch] float v28; // [esp+18h] [ebp+Ch] float *v29; // [esp+18h] [ebp+Ch] v5 = this; v20 = 0.01999999955296516 * a3; if ( *(_DWORD *)(this + 396) ) v7 = 0.40000001; else v7 = 0.69999999; v26 = v7; v8 = (float *)(this + 420); v27 = (double)(*(_DWORD *)(this + 544) - *(_DWORD *)(this + 536) + 1) * 0.001953125 * v26; v9 = v27; v6 = a2 * 0.01999999955296516; v28 = (v6 - *(float *)(this + 452)) / v27; v22 = (v20 - *(float *)(this + 456)) / v9; v10 = fabs(v28); if ( v10 > *(float *)(this + 420) * 0.5 ) return 0; v21 = (float *)(this + 424); v12 = fabs(v22); if ( v12 > 0.5 * *(float *)(this + 424) ) return 0; v23 = a2 - *(float *)(*(int (__stdcall **)(int, int))(*(_DWORD *)dword_AD8EBC + 196))(v18, v19); v24 = v23 * 0.01999999955296516; if ( *(_DWORD *)(v5 + 396) ) { v13 = 0.5; } else { v13 = 0.5; v24 = v24 * 0.5; } v14 = (float *)(v5 + 412); v15 = *v8 * v13 + *(float *)(v5 + 412) + v28; v29 = (float *)(v5 + 416); *(float *)a4 = v15 + v24; v25 = v13 + *v21 * v13 + *(float *)(v5 + 416) - v22; *(float *)a5 = v25; v16 = (signed int)*v8 / 2; v17 = (signed int)*(float *)a4 - (signed int)*v14 - v16; return v17 * v17 + ((signed int)v25 - (signed int)*v21 / 2 - (signed int)*v29) * ((signed int)v25 - (signed int)*v21 / 2 - (signed int)*v29) < v16 * v16 - 900; } // 5696E0: could not find valid save-restore pair for ebx //----- (005698A0) -------------------------------------------------------- int __thiscall sub_5698A0(int this, int a2, int a3, int a4, int a5) { *(_DWORD *)(this + 536) = a2; *(_DWORD *)(this + 540) = a3; *(_DWORD *)(this + 544) = a4; *(_DWORD *)(this + 548) = a5; return sub_518180(*(_DWORD **)(this + 532), a2, a3, a4, a5); } //----- (005698E0) -------------------------------------------------------- _DWORD *__thiscall sub_5698E0(_DWORD **this) { _DWORD **v1; // esi _DWORD *result; // eax v1 = this; result = sub_8F9E00(&unk_BA6B10, this[133]); v1[133] = 0; return result; } //----- (00569900) -------------------------------------------------------- int __thiscall sub_569900(_DWORD **this) { return sub_517F90(this[133]); } //----- (00569910) -------------------------------------------------------- char __thiscall sub_569910(_DWORD **this) { _DWORD *v1; // esi _DWORD **v2; // esi int v3; // eax char v4; // al _DWORD **v5; // ecx v2 = this; v3 = sub_517F90(this[133]); if ( v3 ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3); v5 = (_DWORD **)v2[133]; if ( v4 ) { v1 = v2[133]; LOBYTE(v3) = (*(int (**)(void))(*v5[147] + 260))(); if ( (_BYTE)v3 ) LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1[147]); } else { LOBYTE(v3) = sub_519AA0(v5); } } return v3; } //----- (00569950) -------------------------------------------------------- int __thiscall sub_569950(_DWORD **this, char a2) { _DWORD **v2; // esi void (__stdcall *v3)(signed int, int); // edx int result; // eax int v5; // [esp+0h] [ebp-4h] v2 = this; v3 = *(void (__stdcall **)(signed int, int))(*this[139] + 256); if ( a2 ) { v3(1, v5); (*(void (__stdcall **)(signed int))(*v2[138] + 256))(1); result = (*(int (__cdecl **)(signed int))(*v2[140] + 256))(1); } else { v3(0, v5); (*(void (__stdcall **)(_DWORD))(*v2[138] + 256))(0); result = (*(int (__cdecl **)(_DWORD))(*v2[140] + 256))(0); } return result; } //----- (005699C0) -------------------------------------------------------- void __stdcall sub_5699C0(int a1, _DWORD *a2, int a3) { int v3; // eax if ( a1 == 27 && a2 && !*a2 ) { v3 = sub_6D3800(); if ( v3 ) { HIBYTE(a1) = *(_BYTE *)(v3 + 2744); sub_6F3D10(&off_AB7F2C, 29, 219, (char *)&a1 + 3, 1u); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00569A60) -------------------------------------------------------- LONG __thiscall sub_569A60(void **this) { void **v1; // esi volatile LONG *v2; // edi v1 = this; *this = &MiniMapMarkWin::`vftable'; this[58] = &MiniMapMarkWin::`vftable'; v2 = (volatile LONG *)this[72]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); return sub_8F29C0(v1); } // 9CFFAC: using guessed type void *MiniMapMarkWin::`vftable'; // 9CFFCC: using guessed type void *MiniMapMarkWin::`vftable'; //----- (00569AF0) -------------------------------------------------------- bool __thiscall sub_569AF0(void *this, int a2, int a3) { void *v3; // esi int v4; // eax int v5; // eax bool result; // al int v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] v3 = this; v7 = a3 + ((unsigned int)(*(int (**)(void))(*(_DWORD *)this + 148))() >> 1); v8 = a2 + ((unsigned int)(*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3) >> 1); (*(void (__thiscall **)(void *, int *, int *))(*(_DWORD *)v3 + 224))(v3, &v8, &v7); result = 0; if ( v8 >= 0 ) { v4 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3); if ( v8 < v4 && v7 >= 0 ) { v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); if ( v7 < v5 ) result = 1; } } return result; } //----- (00569C40) -------------------------------------------------------- _DWORD *__thiscall sub_569C40(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; sub_8F2740(this); v1[72] = 0; *v1 = &NpcMarkWin::`vftable'; v1[58] = &NpcMarkWin::`vftable'; v1[73] = 0; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; *((_WORD *)v1 + 156) = -1; v2 = v1[74]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[74] = 0; } v3 = v1[75]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[75] = 0; } v4 = v1[76]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[76] = 0; } v5 = v1[77]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[77] = 0; } *((_BYTE *)v1 + 332) = 0; v6 = v1[73]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[73] = 0; } return v1; } // 9D0380: using guessed type void *NpcMarkWin::`vftable'; // 9D039C: using guessed type void *NpcMarkWin::`vftable'; //----- (00569DB0) -------------------------------------------------------- LONG __thiscall sub_569DB0(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi volatile LONG *v4; // edi volatile LONG *v5; // edi volatile LONG *v6; // edi volatile LONG *v7; // edi v1 = this; *this = &NpcMarkWin::`vftable'; this[58] = &NpcMarkWin::`vftable'; v2 = (volatile LONG *)this[77]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v3 = (volatile LONG *)v1[76]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v4 = (volatile LONG *)v1[75]; if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); v5 = (volatile LONG *)v1[74]; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); v6 = (volatile LONG *)v1[73]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); *v1 = &MiniMapMarkWin::`vftable'; v1[58] = &MiniMapMarkWin::`vftable'; v7 = (volatile LONG *)v1[72]; if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(void *, signed int))v7)((void *)v7, 1); return sub_8F29C0(v1); } // 9CFFAC: using guessed type void *MiniMapMarkWin::`vftable'; // 9CFFCC: using guessed type void *MiniMapMarkWin::`vftable'; // 9D0380: using guessed type void *NpcMarkWin::`vftable'; // 9D039C: using guessed type void *NpcMarkWin::`vftable'; //----- (00569F10) -------------------------------------------------------- void __thiscall sub_569F10(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx char *v4; // edi _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // eax __int16 v8; // [esp+4h] [ebp-10h] int v9; // [esp+Ch] [ebp-8h] v2 = this; v3 = this[74]; if ( v3 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[75] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[76] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[77] + 256))(0); v4 = sub_664AB0(dword_AD8C90, *((_WORD *)v2 + 156)); if ( v4 ) { v5 = sub_6CD770(); v8 = *((_WORD *)v4 + 471); v6 = v5; v7 = sub_680890((unsigned __int8 *)byte_AD9238); sub_74C6E0(v6, &v8, 6, v7, 0); if ( v8 != -1 ) { switch ( v9 ) { case 4: case 5: case 20: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[75] + 256))(1); break; case 6: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[74] + 256))(1); break; case 8: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[76] + 256))(1); break; case 9: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[77] + 256))(1); break; default: return; } } } } } //----- (0056A070) -------------------------------------------------------- bool __thiscall sub_56A070(void *this, int a2, int a3) { void *v3; // esi int v4; // eax int v5; // eax bool result; // al int v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] v3 = this; v7 = a3 + (*(int (**)(void))(*(_DWORD *)this + 148))(); v8 = a2 + (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3); (*(void (__thiscall **)(void *, int *, int *))(*(_DWORD *)v3 + 224))(v3, &v8, &v7); result = 0; if ( v8 >= 0 ) { v4 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 144))(v3); if ( v8 < v4 && v7 >= 0 ) { v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); if ( v7 < v5 ) result = 1; } } return result; } //----- (0056A0F0) -------------------------------------------------------- int __userpurge sub_56A0F0@(_DWORD *a1@, int a2@, _BYTE *a3) { _DWORD **v3; // esi int result; // eax unsigned int v5; // edi unsigned int v6; // ebx int v7; // [esp+4h] [ebp-4h] v3 = (_DWORD **)a1; result = sub_8F1EF0(a1, a3); if ( v3[73] ) { v5 = (unsigned int)((int (__thiscall *)(_DWORD **, int))(*v3)[36])(v3, a2) >> 1; v6 = (unsigned int)((int (__thiscall *)(_DWORD **))(*v3)[37])(v3) >> 1; ((void (__thiscall *)(_DWORD **, _BYTE **, int *))(*v3)[53])(v3, &a3, &v7); a3 -= pt.x; v7 -= pt.y; result = (*(int (**)(void))(*v3[73] + 256))(); } return result; } //----- (0056A650) -------------------------------------------------------- int __thiscall sub_56A650(int this) { int v1; // esi int result; // eax v1 = this; if ( *(_DWORD *)(this + 396) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 356) + 240))(0); *(_WORD *)(*(_DWORD *)(v1 + 356) + 28) |= 1u; result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v1 + 360) + 240))(1); *(_WORD *)(*(_DWORD *)(v1 + 360) + 28) &= 0xFFFEu; } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 360) + 240))(0); *(_WORD *)(*(_DWORD *)(v1 + 360) + 28) |= 1u; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 356) + 240))(1); result = 65534; *(_WORD *)(*(_DWORD *)(v1 + 356) + 28) &= 0xFFFEu; } return result; } //----- (0056A6F0) -------------------------------------------------------- int __thiscall sub_56A6F0(void *this) { int v1; // esi int v2; // eax float v3; // ecx float v4; // edx int v5; // eax int v6; // edi double v7; // st6 int v9; // [esp+0h] [ebp-18h] v1 = (int)this; v2 = (*(int (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 196))(v9); v3 = *(float *)v2; v4 = *(float *)(v2 + 4); v5 = *(_DWORD *)(v2 + 8); v6 = *(_DWORD *)(v1 + 480); *(float *)(v1 + 444) = v3; *(float *)(v1 + 448) = v4; *(float *)(v1 + 452) = v3 * 0.01999999955296516; *(float *)(v1 + 456) = 0.01999999955296516 * v4; v7 = *(float *)(v1 + 424) * 0.5 + *(float *)(v1 + 416); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 308))( v6, (signed int)(0.5 * *(float *)(v1 + 420) + *(float *)(v1 + 412))); return sub_569530(v1); } //----- (0056A7C0) -------------------------------------------------------- int __thiscall sub_56A7C0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax float v4; // [esp+4h] [ebp-34h] float v5; // [esp+8h] [ebp-30h] float v6; // [esp+Ch] [ebp-2Ch] float v7[9]; // [esp+10h] [ebp-28h] v1 = this; (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 216))(v7); v2 = *((_DWORD *)dword_AD8EBC + 731); if ( v2 ) (*(void (__thiscall **)(int, float *))(*(_DWORD *)v2 + 220))(v2, &v4); else (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 220))(&v4); v5 = -v5; v6 = -v6; sub_8CF390(&v4, v7); return (*(int (__stdcall **)(float *))(*v1[120] + 296))(v7); } //----- (0056A860) -------------------------------------------------------- _DWORD *__thiscall sub_56A860(_DWORD *this) { _DWORD *result; // eax float *v2; // esi int v3; // edi int v4; // eax int v5; // ebx double v6; // st7 int v7; // ecx int v8; // edx int v9; // edx float v10; // [esp+1Ch] [ebp-30h] float v11; // [esp+20h] [ebp-2Ch] int v12; // [esp+28h] [ebp-24h] int v13; // [esp+2Ch] [ebp-20h] int v14; // [esp+34h] [ebp-18h] int v15; // [esp+38h] [ebp-14h] _DWORD *v16; // [esp+3Ch] [ebp-10h] _DWORD *v17; // [esp+40h] [ebp-Ch] float v18; // [esp+44h] [ebp-8h] float v19; // [esp+48h] [ebp-4h] result = (_DWORD *)this[130]; v16 = this; if ( result ) { while ( 1 ) { v2 = (float *)result[2]; result = (_DWORD *)*result; v17 = result; if ( v2 ) { v3 = *((_DWORD *)v2 + 73); if ( !v3 ) return result; if ( *(_BYTE *)(v3 + 64) ) { v4 = sub_664630( dword_AD8C90, *(_DWORD *)v3, *(_DWORD *)(v3 + 4), *(_DWORD *)(v3 + 8), *(_DWORD *)(v3 + 12), *(_DWORD *)(v3 + 16)); v5 = v4; if ( v4 && sub_6510B0(v4) ) { (*(void (__thiscall **)(int, float *))(*(_DWORD *)v5 + 200))(v5, &v10); v18 = v10; v6 = v11; } else { v18 = *(float *)(v3 + 56); v6 = *(float *)(v3 + 60); } v19 = v6; if ( sub_5696E0((int)v16, v18, v19, (int)&v15, (int)&v14) == 1 ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); v7 = *((_DWORD *)v2 + 22); v8 = *((_DWORD *)v2 + 23); result = (_DWORD *)*((_DWORD *)v2 + 24); v12 = v15; v13 = v14; v9 = v14; v2[22] = *(float *)&v15; *((_DWORD *)v2 + 23) = v9; *((_DWORD *)v2 + 24) = result; } else { result = (_DWORD *)(*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } else { result = (_DWORD *)(*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } if ( !v17 ) break; result = v17; } } return result; } //----- (0056A9A0) -------------------------------------------------------- char __thiscall sub_56A9A0(_DWORD *this, __int16 a2) { _DWORD *v2; // eax int v3; // ecx v2 = (_DWORD *)this[126]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( *(_WORD *)(v3 + 312) == a2 ) break; } if ( !v2 ) return 0; } return 1; } //----- (0056AA50) -------------------------------------------------------- char *__thiscall sub_56AA50(float *this) { float *v1; // esi char *result; // eax __int16 *v3; // edi int v4; // eax float v5; // ST1C_4 int v6; // ST24_4 float v7; // ST38_4 float v8; // ST28_4 double v9; // st7 float v10; // ST44_4 float v11; // ST44_4 float v12; // ST28_4 float v13; // ST28_4 float v14; // ST28_4 double v15; // st7 double v16; // st7 int v17; // esi int v18; // edi int v19; // ecx int v20; // edx char *v21; // [esp+20h] [ebp-1Ch] __int16 *v22; // [esp+24h] [ebp-18h] float *v23; // [esp+28h] [ebp-14h] float v24; // [esp+2Ch] [ebp-10h] float v25; // [esp+2Ch] [ebp-10h] float v26; // [esp+30h] [ebp-Ch] float v27; // [esp+30h] [ebp-Ch] float *v28; // [esp+34h] [ebp-8h] float v29; // [esp+38h] [ebp-4h] v1 = this; result = (char *)*((_DWORD *)this + 126); v28 = this; if ( result ) { while ( 1 ) { v3 = (__int16 *)*((_DWORD *)result + 2); result = *(char **)result; v21 = result; v22 = v3; if ( v3 ) { result = sub_664AB0(dword_AD8C90, v3[156]); if ( result ) { v4 = (*(int (__thiscall **)(char *))(*(_DWORD *)result + 196))(result); v6 = *(_DWORD *)(v4 + 8); if ( *((_DWORD *)v1 + 99) ) v9 = 0.40000001; else v9 = 0.69999999; v10 = v9; v11 = (double)(*((_DWORD *)v1 + 136) - *((_DWORD *)v1 + 134) + 1) * 0.001953125 * v10; v7 = *(float *)v4 * 0.01999999955296516; v26 = (v7 - v1[113]) / v11; v8 = 0.01999999955296516 * *(float *)(v4 + 4); v24 = (v8 - v1[114]) / v11; v12 = fabs(v26); if ( v12 > v1[105] * 0.5 ) goto LABEL_19; v23 = v1 + 106; v13 = fabs(v24); if ( v13 > 0.5 * v1[106] ) goto LABEL_19; v5 = *(float *)v4; v14 = v5 - *(float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v29 = v14 * 0.01999999955296516; if ( *((_DWORD *)v1 + 99) ) { v15 = 0.5; } else { v15 = 0.5; v29 = v29 * 0.5; } v27 = v1[105] * v15 + v1[103] + v26 + v29; v25 = v15 + *v23 * v15 + v1[104] - v24; v16 = v1[103]; v17 = (signed int)v1[105] / 2; v18 = (signed int)v27 - (signed int)v16 - v17; if ( v18 * v18 + ((signed int)v25 - (signed int)*v23 / 2 - (signed int)v28[104]) * ((signed int)v25 - (signed int)*v23 / 2 - (signed int)v28[104]) < v17 * v17 - 900 != 1 ) { v3 = v22; v1 = v28; LABEL_19: result = (char *)(*(int (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); goto LABEL_20; } if ( !(*(unsigned __int8 (__thiscall **)(__int16 *))(*(_DWORD *)v22 + 260))(v22) ) (*(void (__thiscall **)(__int16 *, signed int))(*(_DWORD *)v22 + 256))(v22, 1); v19 = *((_DWORD *)v22 + 22); v20 = *((_DWORD *)v22 + 23); result = (char *)*((_DWORD *)v22 + 24); *((float *)v22 + 22) = v27; *((float *)v22 + 23) = v25; *((_DWORD *)v22 + 24) = result; v1 = v28; } } LABEL_20: if ( !v21 ) return result; result = v21; } } return result; } //----- (0056ACE0) -------------------------------------------------------- char __thiscall sub_56ACE0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int v3; // eax _DWORD *v4; // eax v2 = (_DWORD *)this[122]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = *(_DWORD **)(v3 + 292); if ( v4 ) { if ( *v4 == *a2 && v4[1] == a2[1] && v4[2] == a2[2] && v4[3] == a2[3] && v4[4] == a2[4] ) break; } } if ( !v2 ) return 0; } return 1; } //----- (0056AD70) -------------------------------------------------------- _DWORD *__thiscall sub_56AD70(_DWORD *this) { _DWORD *result; // eax float *v2; // esi int v3; // edi int v4; // eax int v5; // ebx double v6; // st7 int v7; // ecx int v8; // edx int v9; // edx float v10; // [esp+1Ch] [ebp-30h] float v11; // [esp+20h] [ebp-2Ch] int v12; // [esp+28h] [ebp-24h] int v13; // [esp+2Ch] [ebp-20h] int v14; // [esp+34h] [ebp-18h] int v15; // [esp+38h] [ebp-14h] _DWORD *v16; // [esp+3Ch] [ebp-10h] _DWORD *v17; // [esp+40h] [ebp-Ch] float v18; // [esp+44h] [ebp-8h] float v19; // [esp+48h] [ebp-4h] result = (_DWORD *)this[122]; v16 = this; if ( result ) { while ( 1 ) { v2 = (float *)result[2]; result = (_DWORD *)*result; v17 = result; if ( v2 ) { v3 = *((_DWORD *)v2 + 73); if ( !v3 ) return result; if ( *(_BYTE *)(v3 + 64) ) { v4 = sub_664630( dword_AD8C90, *(_DWORD *)v3, *(_DWORD *)(v3 + 4), *(_DWORD *)(v3 + 8), *(_DWORD *)(v3 + 12), *(_DWORD *)(v3 + 16)); v5 = v4; if ( v4 && sub_6510B0(v4) ) { (*(void (__thiscall **)(int, float *))(*(_DWORD *)v5 + 200))(v5, &v10); v18 = v10; v6 = v11; } else { v18 = *(float *)(v3 + 56); v6 = *(float *)(v3 + 60); } v19 = v6; if ( sub_5696E0((int)v16, v18, v19, (int)&v15, (int)&v14) == 1 ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); v7 = *((_DWORD *)v2 + 22); v8 = *((_DWORD *)v2 + 23); result = (_DWORD *)*((_DWORD *)v2 + 24); v12 = v15; v13 = v14; v9 = v14; v2[22] = *(float *)&v15; *((_DWORD *)v2 + 23) = v9; *((_DWORD *)v2 + 24) = result; } else { result = (_DWORD *)(*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } else { result = (_DWORD *)(*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); } } if ( !v17 ) break; result = v17; } } return result; } //----- (0056AEB0) -------------------------------------------------------- void __usercall sub_56AEB0(int a1@, signed int a2@) { int v2; // esi _DWORD *v3; // edi unsigned int *v4; // ecx float v5; // ST2C_4 float v6; // ST1C_4 double v7; // st6 float v8; // ST3C_4 float v9; // ST3C_4 float v10; // ST1C_4 float v11; // ST1C_4 float v12; // ST1C_4 double v13; // st7 double v14; // st7 int v15; // esi int v16; // edi int v17; // eax int v18; // ecx int v19; // eax signed int v20; // [esp-4h] [ebp-3Ch] float *v21; // [esp+18h] [ebp-20h] _DWORD *v22; // [esp+1Ch] [ebp-1Ch] float *v23; // [esp+20h] [ebp-18h] float v24; // [esp+24h] [ebp-14h] float v25; // [esp+24h] [ebp-14h] float v26; // [esp+28h] [ebp-10h] float v27; // [esp+28h] [ebp-10h] float v28; // [esp+2Ch] [ebp-Ch] int v29; // [esp+30h] [ebp-8h] float v30; // [esp+34h] [ebp-4h] v2 = a1; v3 = *(_DWORD **)(a1 + 576); v29 = a1; if ( v3 ) { v20 = a2; do { v4 = (unsigned int *)v3[2]; v3 = (_DWORD *)*v3; v22 = v3; v21 = (float *)v4; if ( v4 ) { if ( v4 == (unsigned int *)-292 ) return; v28 = (double)v4[73]; if ( *(_DWORD *)(v2 + 396) ) v7 = 0.40000001; else v7 = 0.69999999; v8 = v7; v9 = (double)(*(_DWORD *)(v2 + 544) - *(_DWORD *)(v2 + 536) + 1) * 0.001953125 * v8; v5 = v28 * 0.01999999955296516; v26 = (v5 - *(float *)(v2 + 452)) / v9; v6 = 0.01999999955296516 * (double)v4[74]; v24 = (v6 - *(float *)(v2 + 456)) / v9; v10 = fabs(v26); if ( *(float *)(v2 + 420) * 0.5 < v10 || (v23 = (float *)(v2 + 424), v11 = fabs(v24), v11 > 0.5 * *(float *)(v2 + 424)) ) { (*(void (__stdcall **)(_DWORD))(*v4 + 256))(0); } else { v12 = v28 - *(float *)(*(int (__stdcall **)(signed int))(*(_DWORD *)dword_AD8EBC + 196))(v20); v30 = v12 * 0.01999999955296516; if ( *(_DWORD *)(v2 + 396) ) { v13 = 0.5; } else { v13 = 0.5; v30 = v30 * 0.5; } v27 = *(float *)(v2 + 420) * v13 + *(float *)(v2 + 412) + v26 + v30; v25 = v13 + *v23 * v13 + *(float *)(v2 + 416) - v24; v14 = *(float *)(v2 + 412); v15 = (signed int)*(float *)(v2 + 420) / 2; v16 = (signed int)v27 - (signed int)v14 - v15; if ( v16 * v16 + ((signed int)v25 - (signed int)*v23 / 2 - (signed int)*(float *)(v29 + 416)) * ((signed int)v25 - (signed int)*v23 / 2 - (signed int)*(float *)(v29 + 416)) < v15 * v15 - 900 == 1 ) { v20 = 1; (*(void (__thiscall **)(float *))(*(_DWORD *)v21 + 256))(v21); v17 = *((_DWORD *)v21 + 22); v18 = *((_DWORD *)v21 + 23); v3 = v22; v19 = *((_DWORD *)v21 + 24); v21[22] = v27; v21[23] = v25; *((_DWORD *)v21 + 24) = v19; v2 = v29; } else { v3 = v22; v2 = v29; v20 = 0; (*(void (**)(void))(*(_DWORD *)v21 + 256))(); } } } } while ( v3 ); } } // 56AEB0: could not find valid save-restore pair for ebx //----- (0056B150) -------------------------------------------------------- int __thiscall sub_56B150(_DWORD *this) { int result; // eax result = this[147]; if ( result ) { if ( *(_BYTE *)(result + 64) ) *(_BYTE *)(result + 65) = 0; } return result; } //----- (0056B170) -------------------------------------------------------- int __thiscall sub_56B170(_DWORD *this) { _DWORD *v1; // esi _DWORD *i; // edi _DWORD *v3; // ST00_4 int result; // eax v1 = (_DWORD *)this[150]; for ( i = this + 149; v1; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 8))(i, v3) ) { v3 = v1; v1 = (_DWORD *)*v1; } i[3] = 0; i[1] = 0; i[2] = 0; return result; } //----- (0056B1B0) -------------------------------------------------------- void __thiscall sub_56B1B0(int this) { int v1; // esi _DWORD *v2; // eax int v3; // ecx int v4; // [esp+4h] [ebp-4h] v1 = this; if ( *(_BYTE *)(this + 618) ) { if ( *(_BYTE *)(this + 616) || *(_BYTE *)(this + 617) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 612) + 256))(0); *(_BYTE *)(v1 + 618) = 0; } else { v2 = *(_DWORD **)(this + 600); LOBYTE(v4) = 0; if ( v2 ) { while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( *(_BYTE *)(v3 + 6) ) break; } if ( !v2 ) goto LABEL_10; } LOBYTE(v4) = 1; } LABEL_10: (*(void (__stdcall **)(int))(**(_DWORD **)(v1 + 612) + 256))(v4); *(_BYTE *)(v1 + 618) = 0; } } } //----- (0056B240) -------------------------------------------------------- char __thiscall sub_56B240(_DWORD *this, int a2) { _DWORD *v2; // eax _DWORD *v3; // ecx v2 = (_DWORD *)this[150]; if ( !v2 ) return 1; while ( 1 ) { v3 = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( *v3 == a2 ) break; } if ( !v2 ) return 1; } return 0; } //----- (0056B270) -------------------------------------------------------- int __thiscall sub_56B270(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // esi int v8; // edi int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx void (__thiscall ***v13)(_DWORD, signed int); // edi _DWORD *v15; // [esp+8h] [ebp-Ch] int v16; // [esp+Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[133]; if ( v2 ) sub_518710(v2); v3 = v1[156]; v4 = 0; if ( v3 ) { v5 = (_DWORD *)v1[157]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_7; } v6 = *(_DWORD **)(v1[157] + 4 * v4); } else { LABEL_7: v6 = 0; } v7 = v6; while ( v7 ) { v8 = v7[2]; v15 = (_DWORD *)v7[2]; if ( *v7 ) { v7 = (_DWORD *)*v7; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[155] + 4))(v1 + 155, v7[1]); v10 = v1[156]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_16: v7 = 0; } else { v12 = (_DWORD *)(v1[157] + 4 * v11); while ( 1 ) { v7 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_16; } } } (*(void (__stdcall **)(int *, int))(*(_DWORD *)v1[98] + 120))(&v16, v8); if ( v16 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } sub_8F9E00(&unk_BA6B10, v15); } return sub_940360(v1 + 155); } //----- (0056B3C0) -------------------------------------------------------- unsigned int __usercall sub_56B3C0@(int a1@, signed int a2@) { _DWORD *v2; // ebx unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx unsigned int result; // eax unsigned int v7; // esi _DWORD *v8; // edi int v9; // eax unsigned int v10; // edx unsigned int *v11; // ecx int v12; // eax int v13; // ST28_4 int v14; // eax int v15; // ecx int v16; // ecx signed int v17; // [esp+14h] [ebp-34h] int v18; // [esp+38h] [ebp-10h] int v19; // [esp+3Ch] [ebp-Ch] int v20; // [esp+40h] [ebp-8h] unsigned int v21; // [esp+44h] [ebp-4h] v2 = (_DWORD *)(a1 + 636); v20 = a1; v3 = *(_DWORD *)(a1 + 640); v4 = 0; if ( v3 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } result = *(_DWORD *)(v2[2] + 4 * v4); } else { LABEL_5: result = 0; } v7 = result; if ( result ) { v17 = a2; do { result = *(unsigned __int16 *)(v7 + 4); v8 = *(_DWORD **)(v7 + 8); v7 = *(_DWORD *)v7; v21 = result; if ( !v7 ) { v9 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v2 + 4))(v2, result); v10 = v2[1]; result = v9 + 1; if ( result >= v10 ) { LABEL_13: v7 = 0; } else { v11 = (unsigned int *)(v2[2] + 4 * result); while ( 1 ) { v7 = *v11; if ( *v11 ) break; ++result; ++v11; if ( result >= v10 ) goto LABEL_13; } } } if ( v8 ) { result = (unsigned int)sub_664AB0(dword_AD8C90, v21); if ( result ) { v12 = (*(int (__thiscall **)(unsigned int, signed int))(*(_DWORD *)result + 196))(result, v17); v13 = *(_DWORD *)(v12 + 8); if ( sub_5696E0(v20, *(float *)v12, *(float *)(v12 + 4), (int)&v19, (int)&v18) == 1 ) { v17 = 1; (*(void (__thiscall **)(_DWORD *))(*v8 + 256))(v8); v14 = v8[22]; v15 = v8[23]; result = v8[24]; v16 = v18; v8[22] = v19; v8[23] = v16; v8[24] = result; } else { v17 = 0; result = (*(int (__thiscall **)(_DWORD *))(*v8 + 256))(v8); } } } } while ( v7 ); } return result; } // 56B3C0: could not find valid save-restore pair for edi //----- (0056B500) -------------------------------------------------------- char __thiscall sub_56B500(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v4; // ebx char result; // al _DWORD *v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // [esp+Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)this[133]; if ( v3 ) sub_519940(v3, a2); v4 = v2 + 159; v8 = 0; result = sub_521BB0(v2 + 159, a2, &v8); v6 = (_DWORD *)v8; if ( v8 ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)v2[98] + 120))(&v8, v8); if ( v8 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } sub_8F9E00(&unk_BA6B10, v6); result = sub_521AF0(v4, a2); } return result; } //----- (0056B5A0) -------------------------------------------------------- int __thiscall sub_56B5A0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx unsigned int v3; // ecx _DWORD *v4; // edi unsigned int v5; // eax _DWORD *v6; // edx int **v7; // eax int **v8; // esi int *v9; // ebx int v10; // eax unsigned int v11; // edx unsigned int v12; // eax int ***v13; // ecx _DWORD *v15; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[133]; v15 = v1; if ( v2 ) sub_5199C0(v2); v3 = v1[160]; v4 = v1 + 159; v5 = 0; if ( v3 ) { v6 = (_DWORD *)v4[2]; while ( !*v6 ) { ++v5; ++v6; if ( v5 >= v3 ) goto LABEL_7; } v7 = *(int ***)(v4[2] + 4 * v5); } else { LABEL_7: v7 = 0; } v8 = v7; if ( !v7 ) return sub_940360(v4); do { v9 = v8[2]; if ( *v8 ) { v8 = (int **)*v8; } else { v10 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 4))(v4, *((unsigned __int16 *)v8 + 2)); v11 = v4[1]; v12 = v10 + 1; if ( v12 >= v11 ) { LABEL_16: v8 = 0; } else { v13 = (int ***)(v4[2] + 4 * v12); while ( 1 ) { v8 = *v13; if ( *v13 ) break; ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_16; } } } if ( *((_WORD *)v9 + 146) ) { sub_56B500(v15, *((unsigned __int16 *)v9 + 146)); sub_8F9E00(&unk_BA6B10, v9); } } while ( v8 ); return sub_940360(v4); } //----- (0056B670) -------------------------------------------------------- int __thiscall sub_56B670(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[163]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 256))(a2); return result; } //----- (0056B690) -------------------------------------------------------- char __thiscall sub_56B690(void *this, int a2, int a3, int a4, _DWORD *a5) { int v5; // edi volatile LONG *v6; // eax volatile LONG *v7; // esi volatile LONG *v8; // ebx v5 = (int)this; if ( !a4 ) return 0; sub_8F2900(this, a2, a3, *(_DWORD *)(**(_DWORD **)(a4 + 36) + 20), *(_DWORD *)(**(_DWORD **)(a4 + 36) + 24), a5, 0, 0); v6 = sub_8F3EB0( -1 - *(_DWORD *)(**(_DWORD **)(a4 + 36) + 20) / 2, -1 - *(_DWORD *)(**(_DWORD **)(a4 + 36) + 24) / 2, a4, v5, 0, 0); v7 = *(volatile LONG **)(v5 + 288); v8 = v6; if ( v7 != v6 ) { if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); *(_DWORD *)(v5 + 288) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } return 1; } //----- (0056B750) -------------------------------------------------------- volatile LONG *__cdecl sub_56B750(int a1, int a2, int a3, int a4) { return sub_8F3EB0( a2 - *(_DWORD *)(**(_DWORD **)(a1 + 36) + 20) / 2 - 1, a3 - *(_DWORD *)(**(_DWORD **)(a1 + 36) + 24) / 2 - 1, a1, a4, 0, 0); } //----- (0056B790) -------------------------------------------------------- char __thiscall sub_56B790(_DWORD *this, int a2, int a3, int a4, int *a5, volatile LONG *a6, int a7) { _DWORD *v7; // esi int v8; // edi volatile LONG *v9; // eax volatile LONG *v10; // ebx int v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // ebx int v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // ebx volatile LONG *v17; // eax volatile LONG *v18; // edi volatile LONG *v19; // ebx int v20; // ebx int *v21; // edi volatile LONG *v22; // eax v7 = this; if ( !sub_56B690(this, a2, a3, a4, a6) ) return 0; if ( a5 ) { v8 = -2 * *(_DWORD *)(**(_DWORD **)(a4 + 36) + 24) / 3; v9 = sub_8F3EB0( -1 - *(_DWORD *)(**(_DWORD **)(*a5 + 36) + 20) / 2, v8 - *(_DWORD *)(**(_DWORD **)(*a5 + 36) + 24) / 2 - 1, *a5, (int)v7, 0, 0); v10 = (volatile LONG *)v7[74]; a6 = v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); v9 = a6; } v7[74] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v11 = **(_DWORD **)(a5[1] + 36); v12 = sub_8F3EB0(-1 - *(_DWORD *)(v11 + 20) / 2, v8 - *(_DWORD *)(v11 + 24) / 2 - 1, a5[1], (int)v7, 0, 0); v13 = (volatile LONG *)v7[75]; a6 = v12; if ( v13 != v12 ) { if ( v13 ) { if ( !InterlockedDecrement(v13 + 1) && v13 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); v12 = a6; } v7[75] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } v14 = **(_DWORD **)(a5[2] + 36); v15 = sub_8F3EB0(-1 - *(_DWORD *)(v14 + 20) / 2, v8 - *(_DWORD *)(v14 + 24) / 2 - 1, a5[2], (int)v7, 0, 0); v16 = (volatile LONG *)v7[76]; a6 = v15; if ( v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement(v16 + 1) && v16 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); v15 = a6; } v7[76] = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } v17 = sub_8F3EB0( -1 - *(_DWORD *)(**(_DWORD **)(a5[3] + 36) + 20) / 2, v8 - *(_DWORD *)(**(_DWORD **)(a5[3] + 36) + 24) / 2 - 1, a5[3], (int)v7, 0, 0); v18 = (volatile LONG *)v7[77]; v19 = v17; if ( v18 != v17 ) { if ( v18 && !InterlockedDecrement(v18 + 1) && v18 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); v7[77] = v19; if ( v19 ) InterlockedIncrement(v19 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[77] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[74] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[75] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[76] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[74] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[75] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[76] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[77] + 240))(0); } v20 = *sub_49F490(&a5); if ( a5 ) { v21 = a5; if ( !InterlockedDecrement(a5 + 1) ) { if ( v21 ) (*(void (__thiscall **)(int *, signed int))*v21)(v21, 1); } } if ( a7 && v20 ) { if ( *(_BYTE *)(v20 + 90) ) { v22 = sub_56B750(a7, 0, 0, (int)v7); sub_56FF80(v7 + 73, (int)v22); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[73] + 240))(0); } } return 1; } //----- (0056BAD0) -------------------------------------------------------- _DWORD *__thiscall sub_56BAD0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax int v3; // eax void *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // [esp+4h] [ebp-4h] v1 = this; result = (_DWORD *)this[73]; if ( result ) { v3 = result[8]; if ( v3 ) { v4 = (void *)__RTDynamicCast( v3, 0, (struct _s_RTTICompleteObjectLocator *)&NiNode `RTTI Type Descriptor', (int)&PgWin `RTTI Type Descriptor', 0); if ( v4 ) { sub_455710(v4, &v6, v1[73]); if ( v6 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } result = sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[73]); if ( v1[73] ) v1[73] = 0; } return result; } //----- (0056BB70) -------------------------------------------------------- char __thiscall sub_56BB70(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *v6; // edi int v7; // ebx void (__thiscall ***v8)(_DWORD, signed int); // esi volatile LONG *v9; // eax v6 = this; if ( !sub_56B690(this, a2, a3, a4, a5) ) return 0; v7 = *sub_49F490(&a4); if ( a4 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( a6 && v7 ) { if ( *(_BYTE *)(v7 + 90) ) { v9 = sub_56B750(a6, 0, 0, (int)a5); v6[73] = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 256))(v9, 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6[73] + 240))(0); } } return 1; } //----- (0056BC30) -------------------------------------------------------- void __thiscall sub_56BC30(__int16 *this, int a2, int a3, int a4) { __int16 *v4; // ebx unsigned int v5; // eax int v6; // eax int v7; // esi void (__thiscall ***v8)(_DWORD, signed int); // edi int *v9; // eax int v10; // edx int v11; // ecx int v12; // edx int v13; // eax float **v14; // edi int v15; // eax char v16; // ST08_1 int v17; // ST0C_4 int v18; // ST10_4 int v19; // ST04_4 int v20; // ST14_4 char *v21; // eax char *v22; // eax char v23; // [esp+18h] [ebp-54h] float v24; // [esp+24h] [ebp-48h] float v25; // [esp+28h] [ebp-44h] float v26; // [esp+2Ch] [ebp-40h] int v27; // [esp+30h] [ebp-3Ch] float v28; // [esp+38h] [ebp-34h] float v29; // [esp+3Ch] [ebp-30h] float v30; // [esp+40h] [ebp-2Ch] char *v31; // [esp+44h] [ebp-28h] int v32; // [esp+48h] [ebp-24h] int v33; // [esp+4Ch] [ebp-20h] int v34; // [esp+50h] [ebp-1Ch] char v35; // [esp+54h] [ebp-18h] int v36; // [esp+58h] [ebp-14h] int v37; // [esp+5Ch] [ebp-10h] int v38; // [esp+60h] [ebp-Ch] char v39; // [esp+64h] [ebp-8h] v4 = this; if ( a2 == 3 ) { v5 = sub_5701E0(this[35]); v6 = sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v5); v7 = v6; if ( v6 ) { if ( *(_WORD *)(v6 + 2) == v4[35] ) { v31 = (char *)*sub_49F490(&v27); if ( v27 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v27; if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v31 ) { v28 = (double)*(unsigned int *)(v7 + 16); v29 = (double)*(unsigned int *)(v7 + 20); v30 = 0.0; v25 = v29; v24 = v28; v26 = 0.0; (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v28); v9 = sub_439D70(byte_ADB468, &v23); v32 = *v9; v33 = v9[1]; v10 = v9[2]; v11 = *(_DWORD *)(v7 + 8); v36 = *(_DWORD *)(v7 + 4); v34 = v10; v12 = *(_DWORD *)(v7 + 12); v37 = v11; v35 = 0; v38 = v12; v39 = 0; v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v14 = *(float ***)(v13 + 1220); if ( v14 ) { sub_5E9180(*(float ***)(v13 + 1220)); v15 = sub_49F370((unsigned __int16)v4[35]); if ( v15 ) { v16 = dword_AA8CB8; v17 = dword_AA8CBC; v18 = dword_AA8CC0; v19 = v15 + 34; v20 = dword_AA8CC4; v21 = (char *)sub_40A910(-1617112356); v22 = sub_7549E0(v21, v19); sub_5E9030(v14, (int)v22, v16, v17, v18, v20, 0, 1000000.0); } } sub_630280(v31, (int)&v28, &v24, (char *)&v32, (char *)&v36, *(_WORD *)(v7 + 2)); } } } } } // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // ACDA58: using guessed type int dword_ACDA58; //----- (0056BE10) -------------------------------------------------------- int __thiscall sub_56BE10(_DWORD *this) { int v1; // esi int result; // eax v1 = (int)this; result = 1; if ( this[99] != 1 ) { this[99] = 1; sub_569530((int)this); result = sub_56A650(v1); } return result; } //----- (0056BE40) -------------------------------------------------------- int __thiscall sub_56BE40(_DWORD *this) { int v1; // esi int result; // eax v1 = (int)this; if ( this[99] ) { this[99] = 0; sub_569530((int)this); result = sub_56A650(v1); } return result; } //----- (0056BE70) -------------------------------------------------------- unsigned __int8 *__thiscall sub_56BE70(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax int v3; // eax char v5; // [esp+4h] [ebp-Ch] v1 = this; v2 = sub_439D70(byte_ADB468, &v5); v3 = sub_49F8D0(v2); if ( v1[133] && v3 && *(_BYTE *)(v3 + 130) ) sub_8F82A0(&unk_BA6B10, v1[133]); sub_51CC00(v1[133], 0); return sub_51DF10(v1[133]); } //----- (0056BED0) -------------------------------------------------------- int __thiscall sub_56BED0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // edi _DWORD *v5; // esi _DWORD *v6; // ST04_4 int v8; // [esp+Ch] [ebp-4h] v1 = this; v2 = (_DWORD *)this[126]; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { sub_455710((void *)v1[98], &v8, v3); if ( v8 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } } v5 = (_DWORD *)v1[126]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[125] + 8))(v1 + 125, v6); } v1[128] = 0; v1[126] = 0; v1[127] = 0; return sub_519390((_DWORD *)v1[133]); } //----- (0056BF70) -------------------------------------------------------- char *__thiscall sub_56BF70(void **this, int a2) { __int16 v2; // si void **v3; // edi char *result; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // esi char *v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_51A8C0(this[133], a2); result = sub_664AB0(dword_AD8C90, v2); if ( result ) { result = (char *)v3[126]; if ( result ) { while ( 1 ) { v5 = *((_DWORD *)result + 2); v7 = result; result = *(char **)result; if ( v5 ) { if ( *(_WORD *)(v5 + 312) == v2 ) break; } if ( !result ) return result; } sub_455710(v3[98], &a2, v5); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = (char *)sub_403620(v3 + 125, (_DWORD **)&v7); } } return result; } //----- (0056C010) -------------------------------------------------------- _DWORD *__thiscall sub_56C010(_DWORD **this, int a2) { int v2; // edi _DWORD **v3; // esi _DWORD *result; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // edi _DWORD *v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_519250(this[133], a2); result = v3[130]; if ( result ) { while ( 1 ) { v5 = result[2]; v7 = result; result = (_DWORD *)*result; if ( v5 ) { if ( *(_DWORD *)(v5 + 292) == v2 ) break; } if ( !result ) return result; } sub_455710(v3[98], &a2, v5); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = (_DWORD *)sub_403620(v3 + 129, &v7); } return result; } //----- (0056C0A0) -------------------------------------------------------- void __thiscall sub_56C0A0(_DWORD **this) { _DWORD **v1; // ebx _DWORD *v2; // eax _DWORD *v3; // ecx int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // [esp+4h] [ebp-4h] v1 = this; sub_5192E0(this[133]); while ( v1[132] ) { v2 = v1[130]; v3 = (_DWORD *)*v2; v1[130] = (_DWORD *)*v2; if ( v3 ) v3[1] = 0; else v1[131] = 0; v4 = v2[2]; ((void (__thiscall *)(_DWORD **, _DWORD *))v1[129][2])(v1 + 129, v2); v1[132] = (_DWORD *)((char *)v1[132] - 1); if ( v4 ) { sub_455710(v1[98], &v6, v4); if ( v6 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } } //----- (0056C150) -------------------------------------------------------- void __thiscall sub_56C150(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[133] ) { if ( (*(unsigned __int8 (**)(void))(*this[133] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[133]); else sub_56BE70(v1); } } //----- (0056C190) -------------------------------------------------------- void __thiscall sub_56C190(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD **v3; // edi _DWORD *v4; // ecx int v5; // edx _DWORD *v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v8; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; if ( a2 ) { sub_51A180(this[133], a2); v4 = v3[122]; if ( v4 ) { while ( 1 ) { v5 = v4[2]; v8 = v4; v4 = (_DWORD *)*v4; if ( v5 ) { v6 = *(_DWORD **)(v5 + 292); if ( v6 ) { if ( *v6 == *v2 && v6[1] == v2[1] && v6[2] == v2[2] && v6[3] == v2[3] && v6[4] == v2[4] ) break; } } if ( !v4 ) return; } sub_455710(v3[98], &a2, v5); if ( a2 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } sub_403620(v3 + 121, &v8); } } } //----- (0056C260) -------------------------------------------------------- void __thiscall sub_56C260(_DWORD **this) { _DWORD **v1; // ebx _DWORD *v2; // eax _DWORD *v3; // ecx int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // [esp+4h] [ebp-4h] v1 = this; sub_51A240(this[133]); while ( v1[124] ) { v2 = v1[122]; v3 = (_DWORD *)*v2; v1[122] = (_DWORD *)*v2; if ( v3 ) v3[1] = 0; else v1[123] = 0; v4 = v2[2]; ((void (__thiscall *)(_DWORD **, _DWORD *))v1[121][2])(v1 + 121, v2); v1[124] = (_DWORD *)((char *)v1[124] - 1); if ( v4 ) { sub_455710(v1[98], &v6, v4); if ( v6 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } } } //----- (0056C310) -------------------------------------------------------- void __thiscall sub_56C310(_DWORD **this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // ST04_4 void *v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v1 = this; sub_51A2F0(this[133]); v2 = (_DWORD *)v1[144]; while ( v2 ) { v3 = v2[2]; v4 = (void *)v1[98]; v6 = v2; v2 = (_DWORD *)*v2; sub_455710(v4, &v7, v3); if ( v7 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } sub_403620(v1 + 143, &v6); } } //----- (0056C390) -------------------------------------------------------- void __thiscall sub_56C390(int this) { int v1; // esi float *v2; // edi float v3; // ST0C_4 int v4; // eax float v5; // ST10_4 v1 = this; if ( *(_DWORD *)(this + 588) ) { *(_BYTE *)(*(_DWORD *)(this + 588) + 65) = 1; v2 = **(float ***)(this + 588); v3 = (double)((*(int (**)(void))(**(_DWORD **)(this + 388) + 164))() - 86); v4 = (*(int (**)(void))(**(_DWORD **)(v1 + 388) + 168))(); v2[22] = v3; v5 = (double)(v4 - 18); v2[23] = v5; v2[24] = 0.0; sub_6B0B40(*(float **)(v1 + 588), *(_DWORD **)(v1 + 388)); } } //----- (0056C420) -------------------------------------------------------- signed int __thiscall sub_56C420(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // ecx signed int result; // eax v2 = this; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[149] + 4))(this + 149); v3[2] = a2; *v3 = 0; v3[1] = v2[151]; v4 = (_DWORD *)v2[151]; if ( v4 ) *v4 = v3; else v2[150] = v3; v2[151] = v3; result = 1; ++v2[152]; *((_BYTE *)v2 + 618) = 1; return result; } //----- (0056C480) -------------------------------------------------------- void __thiscall sub_56C480(int this, int a2) { int v2; // esi int *v3; // edi _DWORD *v4; // ecx int *v5; // eax int *v6; // ecx _DWORD *v7; // esi int v8; // eax void (__thiscall *v9)(_DWORD *, int *); // edx int *v10; // ecx _DWORD *v11; // eax void (__thiscall *v12)(_DWORD *, int *); // edx _DWORD *v13; // ecx int v14; // edx int v15; // [esp+Ch] [ebp-4h] v2 = this; v3 = *(int **)(this + 600); v15 = this; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v5 = v3; v3 = (int *)*v3; if ( v4 && *v4 == a2 ) { v6 = *(int **)(v2 + 600); v7 = (_DWORD *)(v2 + 596); if ( v5 == v6 ) { v8 = *v6; v7[1] = *v6; if ( v8 ) { *(_DWORD *)(v8 + 4) = 0; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v6); } else { v9 = *(void (__thiscall **)(_DWORD *, int *))(*v7 + 8); v7[2] = 0; v9(v7, v6); } } else { v10 = (int *)v7[2]; if ( v5 == v10 ) { v11 = (_DWORD *)v10[1]; v7[2] = v11; if ( v11 ) { *v11 = 0; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v10); } else { v12 = *(void (__thiscall **)(_DWORD *, int *))(*v7 + 8); v7[1] = 0; v12(v7, v10); } } else { v13 = (_DWORD *)v5[1]; v14 = *v5; if ( v13 ) *v13 = v14; if ( v14 ) *(_DWORD *)(v14 + 4) = v13; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v5); } } --v7[3]; } if ( !v3 ) break; v2 = v15; } *(_BYTE *)(v15 + 618) = 1; } else { *(_BYTE *)(this + 618) = 1; } } //----- (0056C570) -------------------------------------------------------- char __thiscall sub_56C570(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char result; // al _DWORD *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = this + 155; v7 = 0; result = sub_8C4C90(this + 155, a2, &v7); v5 = (_DWORD *)v7; if ( v7 ) { sub_455710((void *)v2[98], &v7, v7); if ( v7 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } sub_8F9E00(&unk_BA6B10, v5); result = sub_916F40(v3, a2); } return result; } //----- (0056C5F0) -------------------------------------------------------- char __thiscall sub_56C5F0(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx unsigned int v5; // eax _DWORD *v6; // edi int v7; // esi int v8; // eax unsigned int v9; // edx _DWORD *v10; // ecx int v11; // ecx int v12; // edx int v13; // edx int v15; // [esp+34h] [ebp-10h] int v16; // [esp+38h] [ebp-Ch] int v17; // [esp+3Ch] [ebp-8h] _DWORD *v18; // [esp+40h] [ebp-4h] v1 = this + 155; v18 = this; v2 = this[156]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD *)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = (_DWORD *)v5; if ( v5 ) { do { v5 = v6[1]; v7 = v6[2]; v6 = (_DWORD *)*v6; v17 = v5; if ( !v6 ) { v8 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v1 + 4))(v1, v5); v9 = v1[1]; v5 = v8 + 1; if ( v5 >= v9 ) { LABEL_12: v6 = 0; } else { v10 = (_DWORD *)(v1[2] + 4 * v5); while ( 1 ) { v6 = (_DWORD *)*v10; if ( *v10 ) break; ++v5; ++v10; if ( v5 >= v9 ) goto LABEL_12; } } } if ( v7 ) { if ( flt_ACCFCC <= (double)*(float *)(v7 + 304) ) { if ( sub_5696E0((int)v18, *(float *)(v7 + 292), *(float *)(v7 + 296), (int)&v16, (int)&v15) == 1 ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v7 + 256))(v7, 1); v11 = *(_DWORD *)(v7 + 88); v12 = *(_DWORD *)(v7 + 92); v5 = *(_DWORD *)(v7 + 96); v13 = v15; *(_DWORD *)(v7 + 88) = v16; *(_DWORD *)(v7 + 92) = v13; *(_DWORD *)(v7 + 96) = v5; } else { LOBYTE(v5) = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 256))(v7, 0); } } else { LOBYTE(v5) = sub_56C570(v18, v17); } } } while ( v6 ); } return v5; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0056C730) -------------------------------------------------------- void __thiscall sub_56C730(int **this) { int **v1; // ebx int *v2; // esi int v3; // edi signed int v4; // [esp+14h] [ebp-10h] v1 = this + 166; v4 = 3; do { v2 = *v1; if ( *v1 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v2); *v1 = 0; } ++v1; --v4; } while ( v4 ); } //----- (0056C7E0) -------------------------------------------------------- void __thiscall sub_56C7E0(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi float *v3; // ecx const char *v4; // ecx unsigned int v5; // eax const char *v6; // esi char *v7; // edi char v8; // cl v2 = this; if ( a2 <= 2 && this[165] ) { v3 = (float *)this[a2 + 166]; if ( v3 ) sub_6B0B40(v3, (_DWORD *)v2[169]); v2[164] = a2; if ( a2 == 2 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[165] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[165] + 240))(1); v4 = sub_4090F0(1076295557); v5 = strlen(v4) + 1; v6 = v4; v7 = (char *)v2 + 679; do v8 = (v7++)[1]; while ( v8 ); qmemcpy(v7, v6, v5); } } } //----- (0056C880) -------------------------------------------------------- int __thiscall sub_56C880(int this) { int v1; // esi int result; // eax _DWORD *v3; // eax int v4; // ebx char v5; // [esp+4h] [ebp-Ch] v1 = this; result = *(_DWORD *)(this + 656); if ( result < 3 && result >= 0 && *(_DWORD *)(this + 660) ) { if ( *(_DWORD *)(this + 4 * result + 664) ) sub_6B0BB0(*(_DWORD **)(this + 4 * result + 664), *(volatile LONG **)(this + 676)); v3 = sub_439D70(byte_ADB468, &v5); v4 = sub_4316B0(v3); if ( v4 ) { memset((void *)(v1 + 680), 0, 0x80u); strncpy((char *)(v1 + 680), (const char *)(v4 + 14), 0x20u); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 660) + 256))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 660) + 240))(0); } return result; } //----- (0056C940) -------------------------------------------------------- LONG __thiscall sub_56C940(void **this) { void **v1; // esi volatile LONG *v2; // edi v1 = this; *this = &QuestHelperMarkWin::`vftable'; this[58] = &QuestHelperMarkWin::`vftable'; sub_56BAD0(this); *v1 = &MiniMapMarkWin::`vftable'; v1[58] = &MiniMapMarkWin::`vftable'; v2 = (volatile LONG *)v1[72]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); return sub_8F29C0(v1); } // 9CFFAC: using guessed type void *MiniMapMarkWin::`vftable'; // 9CFFCC: using guessed type void *MiniMapMarkWin::`vftable'; // 9D0940: using guessed type void *QuestHelperMarkWin::`vftable'; // 9D095C: using guessed type void *QuestHelperMarkWin::`vftable'; //----- (0056C9F0) -------------------------------------------------------- LONG __thiscall sub_56C9F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ST0C_4 int *v4; // edi int v5; // ebx int v6; // edi int v7; // edi _DWORD *v8; // edi _DWORD *v9; // edi int v10; // edi int v11; // edi _DWORD *v12; // ebx _DWORD *v13; // ST0C_4 int v14; // edi _DWORD *v15; // ebx _DWORD *v16; // ST0C_4 int v17; // edi int v18; // edi int v19; // edi _DWORD *v20; // ebx _DWORD *v21; // ST0C_4 int v22; // edi _DWORD *v23; // ebx _DWORD *v24; // ST0C_4 int v25; // edi _DWORD *v26; // ebx _DWORD *v27; // ST0C_4 int v28; // edi int v29; // edi int v30; // edi int v31; // edi int v32; // edi int v33; // edi int v34; // edi int v35; // edi v1 = this; *this = &MiniMapWin::`vftable'; this[58] = &MiniMapWin::`vftable'; v2 = (_DWORD *)this[126]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[125] + 8))(v1 + 125, v3); } v1[128] = 0; v1[126] = 0; v1[127] = 0; v4 = (int *)v1[147]; if ( v4 ) { sub_8D47C0(v4 + 7); nullsub_6(v4 + 1); v5 = *v4; if ( *v4 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); operator delete(v4); } sub_56B270(v1); sub_56B5A0(v1); sub_56C730((int **)v1); v6 = v1[169]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[163]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1 + 159; *v8 = &NiTMap::`vftable'; sub_940360(v1 + 159); *v8 = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; sub_940360(v1 + 159); operator delete[]((void *)v1[161]); v9 = v1 + 155; *v9 = &NiTMap::`vftable'; sub_940360(v1 + 155); *v9 = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; sub_940360(v1 + 155); operator delete[]((void *)v1[157]); v10 = v1[153]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = (int)(v1 + 149); v1[149] = &PgTList::`vftable'; v12 = (_DWORD *)v1[150]; while ( v12 ) { v13 = v12; v12 = (_DWORD *)*v12; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v11 + 8))(v1 + 149, v13); } v1[152] = 0; v1[150] = 0; v1[151] = 0; *(_DWORD *)v11 = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; v14 = (int)(v1 + 143); v1[143] = &PgTList::`vftable'; v15 = (_DWORD *)v1[144]; while ( v15 ) { v16 = v15; v15 = (_DWORD *)*v15; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v14 + 8))(v1 + 143, v16); } v1[146] = 0; v1[144] = 0; v1[145] = 0; *(_DWORD *)v14 = &NiTListBase,GTIScanMarkWin *>::`vftable'; v17 = v1[142]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v1[141]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = (int)(v1 + 129); v1[129] = &PgTList::`vftable'; v20 = (_DWORD *)v1[130]; while ( v20 ) { v21 = v20; v20 = (_DWORD *)*v20; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v19 + 8))(v1 + 129, v21); } v1[132] = 0; v1[130] = 0; v1[131] = 0; *(_DWORD *)v19 = &NiTListBase,PartyMarkWin *>::`vftable'; v22 = (int)(v1 + 125); v1[125] = &PgTList::`vftable'; v23 = (_DWORD *)v1[126]; while ( v23 ) { v24 = v23; v23 = (_DWORD *)*v23; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v22 + 8))(v1 + 125, v24); } v1[128] = 0; v1[126] = 0; v1[127] = 0; *(_DWORD *)v22 = &NiTListBase,NpcMarkWin *>::`vftable'; v25 = (int)(v1 + 121); v1[121] = &PgTList::`vftable'; v26 = (_DWORD *)v1[122]; while ( v26 ) { v27 = v26; v26 = (_DWORD *)*v26; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v25 + 8))(v1 + 121, v27); } v1[124] = 0; v1[122] = 0; v1[123] = 0; *(_DWORD *)v25 = &NiTListBase,RaidMarkWin *>::`vftable'; v28 = v1[119]; if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v29 = v1[118]; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); v30 = v1[117]; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v30 ) (**(void (__thiscall ***)(int, signed int))v30)(v30, 1); v31 = v1[116]; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); v32 = v1[115]; if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); `eh vector destructor iterator'(v1 + 92, 4u, 5, sub_410C00); v33 = v1[91]; if ( v33 && !InterlockedDecrement((volatile LONG *)(v33 + 4)) && v33 ) (**(void (__thiscall ***)(int, signed int))v33)(v33, 1); v34 = v1[90]; if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); v35 = v1[89]; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); return sub_8F10F0(v1); } // 9C5F0C: using guessed type void *NiTListBase,RaidMarkWin *>::`vftable'; // 9C5F1C: using guessed type void *NiTListBase,NpcMarkWin *>::`vftable'; // 9C5F3C: using guessed type void *NiTListBase,PartyMarkWin *>::`vftable'; // 9C5F4C: using guessed type void *NiTListBase,GTIScanMarkWin *>::`vftable'; // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; // 9D12D0: using guessed type void *PgTList::`vftable'; // 9D12E0: using guessed type void *MiniMapWin::`vftable'; // 9D12FC: using guessed type void *MiniMapWin::`vftable'; //----- (0056CEB0) -------------------------------------------------------- int __thiscall sub_56CEB0(int this, char a2) { int v2; // esi v2 = this; *(_BYTE *)(this + 440) = a2; if ( a2 ) return sub_56A650(this); if ( *(_DWORD *)(this + 396) != 1 ) { *(_DWORD *)(this + 396) = 1; sub_569530(this); sub_56A650(v2); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 360) + 256))(1); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 256))(0); } //----- (0056CF40) -------------------------------------------------------- void __thiscall sub_56CF40(int this, int a2, int a3) { int v3; // edi char *v4; // eax volatile LONG *v5; // eax int v6; // esi int v7; // eax char *v8; // esi v3 = this; switch ( a2 ) { case 0: sub_56BE10((_DWORD *)this); break; case 1: sub_56BE40((_DWORD *)this); break; case 4: sub_56BE70((_DWORD **)this); break; case 5: sub_4A5060(*(_DWORD **)(this + 296), 1); break; case 6: sub_4AB5F0(*(_DWORD **)(this + 296)); break; case 7: sub_4A5450(*(_DWORD **)(this + 296)); break; case 8: v4 = (char *)sub_40A910(728669075); v5 = sub_462CA0(2, v4); if ( v3 ) (**((void (__stdcall ***)(int))v5 + 58))(v3 + 232); else (**((void (__stdcall ***)(_DWORD))v5 + 58))(0); break; case 9: sub_4A5490(*(_DWORD **)(this + 296)); break; case 10: v6 = 29100; do { if ( sub_6BE900(v6) ) break; ++v6; } while ( v6 < 29105 ); v7 = *(_DWORD *)(v3 + 296); v8 = *(char **)(v7 + 728); if ( v8 ) { sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v7 + 728)); sub_5B3840(v8, 3); } break; default: return; } } //----- (0056D070) -------------------------------------------------------- char __userpurge sub_56D070@(int a1@, signed int a2@, signed int a3@, float a4) { int v4; // esi int v5; // eax _BYTE *v6; // eax _BYTE *v7; // ecx int v8; // eax _DWORD *v9; // esi int v10; // ecx v4 = a1; v5 = *(_DWORD *)(a1 + 656); if ( v5 != 3 ) { if ( *(_DWORD *)(a1 + 4 * v5 + 664) ) { v6 = *(_BYTE **)(a1 + 4 * v5 + 664); if ( v6[64] ) sub_6B0C00(v6, a4); } } (*(void (__stdcall **)(int))(**(_DWORD **)(v4 + 388) + 472))(v4 + 680); if ( sub_718A50(&dword_B9E560) ) sub_56AD70((_DWORD *)v4); else sub_56A860((_DWORD *)v4); sub_56AA50((float *)v4); sub_56A6F0((void *)v4); sub_56A7C0((_DWORD **)v4); sub_56AEB0(v4, a2); v7 = *(_BYTE **)(v4 + 588); if ( v7 ) sub_6B0C00(v7, a4); sub_56B1B0(v4); sub_56C5F0((_DWORD *)v4); LOBYTE(v8) = sub_56B3C0(v4, a3); v9 = *(_DWORD **)(v4 + 504); while ( v9 ) { v10 = v9[2]; LOBYTE(v8) = (_BYTE)v9 + 8; v9 = (_DWORD *)*v9; if ( v10 ) { LOBYTE(v8) = (*(int (__stdcall **)(LONG, LONG))(*(_DWORD *)v10 + 332))(pt.x, pt.y); if ( (_BYTE)v8 ) { v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) LOBYTE(v8) = sub_4A8140(v8, 35); } } } return v8; } // B9E560: using guessed type int dword_B9E560; //----- (0056D180) -------------------------------------------------------- float *__thiscall sub_56D180(float *this) { float *v1; // esi void *v2; // eax size_t v3; // ecx void *v4; // eax size_t v5; // ST08_4 int v6; // edi int v7; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MiniMapWin::`vftable'; *((_DWORD *)v1 + 58) = &MiniMapWin::`vftable'; v1[89] = 0.0; v1[90] = 0.0; v1[91] = 0.0; `eh vector constructor iterator'( v1 + 92, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[115] = 0.0; v1[116] = 0.0; v1[117] = 0.0; v1[118] = 0.0; v1[119] = 0.0; v1[124] = 0.0; v1[122] = 0.0; v1[123] = 0.0; *((_DWORD *)v1 + 121) = &PgTList::`vftable'; v1[128] = 0.0; v1[126] = 0.0; v1[127] = 0.0; *((_DWORD *)v1 + 125) = &PgTList::`vftable'; v1[132] = 0.0; v1[130] = 0.0; v1[131] = 0.0; *((_DWORD *)v1 + 129) = &PgTList::`vftable'; v1[141] = 0.0; v1[142] = 0.0; v1[146] = 0.0; v1[144] = 0.0; v1[145] = 0.0; *((_DWORD *)v1 + 143) = &PgTList::`vftable'; v1[152] = 0.0; v1[150] = 0.0; v1[151] = 0.0; *((_DWORD *)v1 + 149) = &PgTList::`vftable'; v1[153] = 0.0; *((_DWORD *)v1 + 155) = &NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; *((_DWORD *)v1 + 156) = 37; v1[158] = 0.0; v2 = operator new[](0x94u); v3 = 4 * *((_DWORD *)v1 + 156); *((_DWORD *)v1 + 157) = v2; memset(v2, 0, v3); *((_DWORD *)v1 + 155) = &NiTMap::`vftable'; *((_DWORD *)v1 + 159) = &NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; *((_DWORD *)v1 + 160) = 37; v1[162] = 0.0; v4 = operator new[](0x94u); v5 = 4 * *((_DWORD *)v1 + 160); *((_DWORD *)v1 + 161) = v4; memset(v4, 0, v5); *((_DWORD *)v1 + 159) = &NiTMap::`vftable'; v1[163] = 0.0; v1[169] = 0.0; v1[100] = 0.34179688; *((_DWORD *)v1 + 99) = 1; v1[133] = 0.0; v1[101] = 512.0; v1[147] = 0.0; v1[102] = 512.0; v1[111] = -1.0; v1[112] = -1.0; v1[113] = -0.02; v1[114] = -0.02; v1[107] = 0.0; v1[108] = 0.0; v1[148] = 1.0; v6 = *((_DWORD *)v1 + 153); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[153] = 0.0; } *((_WORD *)v1 + 308) = 0; *((_BYTE *)v1 + 618) = 0; *((_DWORD *)v1 + 164) = 1; v1[165] = 0.0; v7 = *((_DWORD *)v1 + 169); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[169] = 0.0; } v1[166] = 0.0; v1[167] = 0.0; v1[168] = 0.0; memset(v1 + 170, 0, 0x80u); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C5F5C: using guessed type void *NiTMapBase,unsigned int,MapMarkWin *>::`vftable'; // 9C5F7C: using guessed type void *NiTMapBase,unsigned short,KQTeamMarkWin *>::`vftable'; // 9C6064: using guessed type void *PgTList::`vftable'; // 9C6074: using guessed type void *NiTMap::`vftable'; // 9C6094: using guessed type void *NiTMap::`vftable'; // 9C60E4: using guessed type void *PgTList::`vftable'; // 9C60F4: using guessed type void *PgTList::`vftable'; // 9C6104: using guessed type void *PgTList::`vftable'; // 9D12D0: using guessed type void *PgTList::`vftable'; // 9D12E0: using guessed type void *MiniMapWin::`vftable'; // 9D12FC: using guessed type void *MiniMapWin::`vftable'; //----- (0056D490) -------------------------------------------------------- int __cdecl sub_56D490(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x124u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &MainCharMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &MainCharMarkWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D0198: using guessed type void *MainCharMarkWin::`vftable'; // 9D01B4: using guessed type void *MainCharMarkWin::`vftable'; //----- (0056D5E0) -------------------------------------------------------- volatile LONG *__cdecl sub_56D5E0(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x150u); v10 = v6; v11 = 0; if ( v6 ) v7 = sub_569C40(v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 456))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (0056D720) -------------------------------------------------------- int __cdecl sub_56D720(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x128u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &PartyMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &PartyMarkWin::`vftable'; *(_DWORD *)(v5 + 292) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D056C: using guessed type void *PartyMarkWin::`vftable'; // 9D058C: using guessed type void *PartyMarkWin::`vftable'; //----- (0056D880) -------------------------------------------------------- int __cdecl sub_56D880(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x128u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &RaidMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &RaidMarkWin::`vftable'; *(_DWORD *)(v5 + 292) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D0758: using guessed type void *RaidMarkWin::`vftable'; // 9D0774: using guessed type void *RaidMarkWin::`vftable'; //----- (0056D9E0) -------------------------------------------------------- int __cdecl sub_56D9E0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x13Cu); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8F2740(v5); *(_DWORD *)(v6 + 288) = 0; *(_DWORD *)v6 = &QuestHelperMarkWin::`vftable'; *(_DWORD *)(v6 + 232) = &QuestHelperMarkWin::`vftable'; *(_DWORD *)(v6 + 296) = 0; *(_WORD *)(v6 + 300) = -1; *(_DWORD *)(v6 + 292) = 0; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 456))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9D0940: using guessed type void *QuestHelperMarkWin::`vftable'; // 9D095C: using guessed type void *QuestHelperMarkWin::`vftable'; //----- (0056DB50) -------------------------------------------------------- int __cdecl sub_56DB50(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x134u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &MobAreaMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &MobAreaMarkWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D0B2C: using guessed type void *MobAreaMarkWin::`vftable'; // 9D0B4C: using guessed type void *MobAreaMarkWin::`vftable'; //----- (0056DCA0) -------------------------------------------------------- int __cdecl sub_56DCA0(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x12Cu); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = >IScanMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = >IScanMarkWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D0D18: using guessed type void *GTIScanMarkWin::`vftable'; // 9D0D34: using guessed type void *GTIScanMarkWin::`vftable'; //----- (0056DDF0) -------------------------------------------------------- int __cdecl sub_56DDF0(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x134u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &MapMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &MapMarkWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D0F00: using guessed type void *MapMarkWin::`vftable'; // 9D0F1C: using guessed type void *MapMarkWin::`vftable'; //----- (0056DF40) -------------------------------------------------------- int __cdecl sub_56DF40(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x128u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_8F2740(v4); *(_DWORD *)(v5 + 288) = 0; *(_DWORD *)v5 = &KQTeamMarkWin::`vftable'; *(_DWORD *)(v5 + 232) = &KQTeamMarkWin::`vftable'; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 1; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 452))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9D10E8: using guessed type void *KQTeamMarkWin::`vftable'; // 9D1104: using guessed type void *KQTeamMarkWin::`vftable'; //----- (0056E090) -------------------------------------------------------- volatile LONG *__cdecl sub_56E090(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x328u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_56D180((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0056E1C0) -------------------------------------------------------- char __thiscall sub_56E1C0(void *this, float a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf char result; // al int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // edi volatile LONG **v11; // ebx volatile LONG **v12; // eax int v13; // edi volatile LONG **v14; // ebx volatile LONG **v15; // eax int v16; // edi volatile LONG **v17; // ebx volatile LONG **v18; // eax int v19; // edi volatile LONG **v20; // ebx volatile LONG **v21; // eax int v22; // edi volatile LONG **v23; // ebx volatile LONG **v24; // eax void (__thiscall ***v25)(_DWORD, signed int); // esi int v26; // edi int v27; // ebx _DWORD *v28; // eax int v29; // eax int v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax int v34; // eax volatile LONG **v35; // eax int v36; // eax int v37; // eax _DWORD *v38; // eax _DWORD **v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax volatile LONG *v42; // ST84_4 int v43; // ecx volatile LONG **v44; // eax double v45; // st7 int v46; // ecx double v47; // st6 int v48; // eax int v49; // eax int v50; // ST98_4 char *v51; // eax volatile LONG **v52; // eax volatile LONG *v53; // eax const char *v54; // eax volatile LONG *v55; // ST84_4 volatile LONG *v56; // eax const char *v57; // eax volatile LONG *v58; // ST84_4 volatile LONG *v59; // eax const char *v60; // eax volatile LONG *v61; // eax const char *v62; // eax volatile LONG **v63; // eax volatile LONG *v64; // eax volatile LONG *v65; // eax const char *v66; // eax volatile LONG *v67; // eax const char *v68; // eax volatile LONG *v69; // eax const char *v70; // eax volatile LONG *v71; // eax const char *v72; // eax volatile LONG *v73; // ST80_4 volatile LONG *v74; // eax volatile LONG *v75; // eax volatile LONG **v76; // eax volatile LONG *v77; // eax int v78; // eax int v79; // edx int v80; // ST98_4 int v81; // eax volatile LONG *v82; // eax const CHAR *v83; // eax volatile LONG *v84; // eax volatile LONG **v85; // eax volatile LONG **v86; // eax char *v87; // eax float *v88; // edi int v89; // eax float *v90; // eax _DWORD *v91; // ecx int v92; // ST84_4 volatile LONG **v93; // eax void (__thiscall ***v94)(_DWORD, signed int); // esi void (__thiscall ***v95)(_DWORD, signed int); // esi volatile LONG *v96; // eax const char *v97; // eax volatile LONG *v98; // eax char *v99; // eax char *v100; // eax float *v101; // edi int v102; // eax float *v103; // eax int v104; // ecx int (*v105)(void); // eax int v106; // eax float **v107; // ecx float *v108; // ecx float v109; // ST80_4 int v110; // [esp+9Ch] [ebp-2Ch] int v111; // [esp+A0h] [ebp-28h] int v112; // [esp+A4h] [ebp-24h] int v113; // [esp+A8h] [ebp-20h] volatile LONG *v114; // [esp+ACh] [ebp-1Ch] int v115; // [esp+B0h] [ebp-18h] int v116; // [esp+B4h] [ebp-14h] int v117; // [esp+B8h] [ebp-10h] int v118; // [esp+C4h] [ebp-4h] v2 = (int)this; v117 = 0; v118 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v114 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v117; v118 = -1; if ( !v117 || InterlockedDecrement((volatile LONG *)(v117 + 4)) ) return 0; v5 = v117 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\Minimap.nif"); sub_8F66B0(v8, (int)&v117, v7); if ( !v117 ) return 0; v9 = sub_8FB140(v117, (int)"ChrImg01", (int)&v115, (int)&v116, v3); v10 = *(_DWORD *)(v2 + 460); v11 = v9; if ( (volatile LONG **)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *(_DWORD *)(v2 + 460) = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); } v12 = sub_8FB140(v117, (int)"LinkImg", (int)&v115, (int)&v116, v114); v13 = *(_DWORD *)(v2 + 464); v14 = v12; if ( (volatile LONG **)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(v2 + 464) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)v14 + 1); } v15 = sub_8FB140(v117, (int)"LinkDirImg", (int)&v115, (int)&v116, v114); v16 = *(_DWORD *)(v2 + 468); v17 = v15; if ( (volatile LONG **)v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v2 + 468) = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)v17 + 1); } v18 = sub_8FB140(v117, (int)"ParImg", (int)&v115, (int)&v116, v114); v19 = *(_DWORD *)(v2 + 472); v20 = v18; if ( (volatile LONG **)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *(_DWORD *)(v2 + 472) = v20; if ( v20 ) InterlockedIncrement((volatile LONG *)v20 + 1); } v21 = sub_8FB140(v117, (int)"NPCImg", (int)&v115, (int)&v116, v114); v22 = *(_DWORD *)(v2 + 476); v23 = v21; if ( (volatile LONG **)v22 != v21 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); *(_DWORD *)(v2 + 476) = v23; if ( v23 ) InterlockedIncrement((volatile LONG *)v23 + 1); } v24 = sub_8FB140(v117, (int)"Frame", (int)&v115, (int)&v116, v114); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v24, 0, SLODWORD(a2), (int)"MiniMapWin", 0) ) { v26 = v115; v27 = v116; v28 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v117 + 72))("EventPanel"); v29 = sub_85C050(v28, 8); v112 = v29; if ( v29 ) { InterlockedIncrement((volatile LONG *)(v29 + 4)); v29 = v112; } v30 = **(_DWORD **)(v29 + 40); LOBYTE(v118) = 1; if ( !v30 ) goto LABEL_91; v31 = *(volatile LONG **)(v30 + 4); if ( !v31 ) goto LABEL_91; v32 = sub_8FB140(v117, (int)"EventPanel", (int)&v115, (int)&v116, v31); v33 = sub_8F3EB0(v115 - v26, v116 - v27, (int)v32, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); v34 = sub_459770(0, 0, v2); *(_DWORD *)(v2 + 392) = v34; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v34 + 240))(v34, 0); v35 = sub_8FB140(v117, (int)"Map_Mask01", (int)&v115, (int)&v116, v114); sub_8F3EB0(v115 - v26, v116 - v27, (int)v35, *(_DWORD *)(v2 + 392), 0, 0); v36 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v117 + 72))("Map_Mask"); a2 = COERCE_FLOAT(sub_402BA0((int)dword_BA478C, v36)); sub_8FB140(v117, (int)"Map_Mask", (int)&v115, (int)&v116, v114); v37 = sub_4607A0(v115 - v26, v116 - v27, SLODWORD(a2), *(_DWORD **)(v2 + 392)); *(_DWORD *)(v2 + 352) = v37; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v37 + 240))(v37, 0); v38 = (_DWORD *)sub_45FFA0(*(_DWORD **)(v2 + 352)); if ( v38 ) { v39 = (_DWORD **)sub_85C050(v38, 8); a2 = *(float *)&v39; if ( v39 ) { sub_45C760(v39, 1); sub_470EE0((_DWORD **)LODWORD(a2), 3); } } sub_8F71E0(v117, (int)"Map_Mask", &v115, &v116, &v110, &v111); v40 = sub_8FB140(v117, (int)"Plane01", (int)&v115, (int)&v116, v114); v41 = sub_8F3EB0(v115 - v26, v116 - v27, (int)v40, *(_DWORD *)(v2 + 392), 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 240))(v41, 0); v42 = v114; v43 = v117; *(float *)(v2 + 412) = (double)v115; *(float *)(v2 + 416) = (double)v116; v44 = sub_8FB140(v43, (int)"Map_Coordinate", (int)&v115, (int)&v116, v42); if ( v44 ) { a2 = (double)*(unsigned int *)(*v44[9] + 20); v45 = a2; *(float *)(v2 + 420) = a2; a2 = *(float *)(*v44[9] + 24); v46 = *(_DWORD *)(v2 + 392); a2 = (double)LODWORD(a2); v47 = a2; v48 = *(_DWORD *)(v2 + 460); *(float *)(v2 + 424) = a2; *(_DWORD *)(v2 + 480) = sub_56D490( (signed int)(v45 * 0.5 + *(float *)(v2 + 412)), (signed int)(v47 * 0.5 + *(float *)(v2 + 416)), v48, v46); v49 = sub_459770(0, 0, v2); sub_56FF80((_DWORD *)(v2 + 652), v49); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 652) + 240))(0); a2 = 0.0; do { v50 = v117; v51 = sub_7549E0("Plane%02d", LODWORD(a2) + 2); v52 = sub_8FB140(v50, (int)v51, (int)&v115, (int)&v116, 0); sub_8F3EB0(v115 - v26, v116 - v27, (int)v52, *(_DWORD *)(v2 + 652), 0, 0); ++LODWORD(a2); } while ( SLODWORD(a2) < 5 ); a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"MaxBtnNor", (int)&v115, (int)&v116, v114)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MaxBtnClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MaxBtnOver"); v53 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 0, 0, 0); sub_56FF80((_DWORD *)(v2 + 356), (int)v53); a2 = *(float *)(v2 + 356); v54 = sub_40C190(-100784316); sub_8F2EA0((void **)LODWORD(a2), v54); v55 = v114; *(_DWORD *)(*(_DWORD *)(v2 + 356) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"MinBtnNor", (int)&v115, (int)&v116, v55)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MinBtnClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MinBtnOver"); v56 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 1, 0, 0); sub_56FF80((_DWORD *)(v2 + 360), (int)v56); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); *(_WORD *)(*(_DWORD *)(v2 + 360) + 28) |= 1u; a2 = *(float *)(v2 + 360); v57 = sub_40C190(-112054710); sub_8F2EA0((void **)LODWORD(a2), v57); v58 = v114; *(_DWORD *)(*(_DWORD *)(v2 + 360) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"AllMapBtnNor", (int)&v115, (int)&v116, v58)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"AllMapBtnClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"AllMapBtnOver"); v59 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 4, 0, 0); sub_56FF80((_DWORD *)(v2 + 364), (int)v59); a2 = *(float *)(v2 + 364); v60 = sub_40C190(-100981213); sub_8F2EA0((void **)LODWORD(a2), v60); *(_DWORD *)(*(_DWORD *)(v2 + 364) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"ScheduleBtnNor", (int)&v115, (int)&v116, 0)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ScheduleBtnClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ScheduleBtnOver"); v61 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 5, 0, 0); sub_56FF80((_DWORD *)(v2 + 368), (int)v61); a2 = *(float *)(v2 + 368); v62 = sub_40C190(-168087745); sub_8F2EA0((void **)LODWORD(a2), v62); *(_DWORD *)(*(_DWORD *)(v2 + 368) + 272) = dword_AD01E8; v63 = sub_8FB140(v117, (int)"NewKQuest", (int)&v115, (int)&v116, v114); v64 = sub_8F3EB0(v115 - v26, v116 - v27, (int)v63, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 612), (int)v64); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 612) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 612) + 240))(0); a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"ExpeditionNor", (int)&v115, (int)&v116, 0)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ExpeditionClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ExpeditionOver"); v65 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 9, 0, 0); sub_56FF80((_DWORD *)(v2 + 376), (int)v65); a2 = *(float *)(v2 + 376); v66 = sub_40A910(-34088146); sub_8F2EA0((void **)LODWORD(a2), v66); *(_DWORD *)(*(_DWORD *)(v2 + 376) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"MessageBoardNor", (int)&v115, (int)&v116, 0)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MessageBoardClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"MessageBoardOver"); v67 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 7, 0, 0); sub_56FF80((_DWORD *)(v2 + 384), (int)v67); a2 = *(float *)(v2 + 384); v68 = sub_40C190(561228932); sub_8F2EA0((void **)LODWORD(a2), v68); *(_DWORD *)(*(_DWORD *)(v2 + 384) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"PartyMatchingNor", (int)&v115, (int)&v116, 0)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"PartyMatchingClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"PartyMatchingOver"); v69 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 6, 0, 0); sub_56FF80((_DWORD *)(v2 + 372), (int)v69); a2 = *(float *)(v2 + 372); v70 = sub_40C190(1570760945); sub_8F2EA0((void **)LODWORD(a2), v70); *(_DWORD *)(*(_DWORD *)(v2 + 372) + 272) = dword_AD01E8; a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"ProductNor", (int)&v115, (int)&v116, 0)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ProductClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ProductOver"); v71 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 10, 0, 0); sub_56FF80((_DWORD *)(v2 + 380), (int)v71); a2 = *(float *)(v2 + 380); v72 = sub_40C190(-370806713); sub_8F2EA0((void **)LODWORD(a2), v72); *(_DWORD *)(*(_DWORD *)(v2 + 380) + 272) = dword_AD01E8; sub_8F71E0(v117, (int)"WinTitle", &v115, &v116, &v110, &v111); v73 = (volatile LONG *)dword_AD01E8; v74 = (volatile LONG *)sub_421050(0); v75 = sub_90AEF0( v115 - v26, v116 - v27, v110, v111, v74, (_DWORD *)v2, 0, 0, 0, 1, v73, (volatile LONG *)0xFFFFFFE2); *(_DWORD *)(v2 + 388) = v75; (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 1); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 388) + 472))(&unk_9CFCB9); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 388) + 468))(&dword_AA8D98); v76 = sub_8FB140(v117, (int)"GuildQuitPanel", (int)&v115, (int)&v116, v114); a2 = *(float *)&v76; v77 = sub_8F3EB0(v115 - v26, v116 - v27, (int)v76, v2, 0, 0); *(_DWORD *)(v2 + 560) = v77; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v77 + 256))(v77, 0); v78 = **(_DWORD **)(LODWORD(a2) + 36); v79 = *(_DWORD *)(v78 + 20); a2 = *(float *)(v78 + 24); v80 = v79; v81 = sub_421050(7); v82 = sub_8F4A20(v115 - v26, v116 - v27 + 1, v80, SLODWORD(a2), v81, v2, 0, 0); *(_DWORD *)(v2 + 552) = v82; (*(void (__thiscall **)(volatile LONG *, signed int))(*v82 + 488))(v82, 5); LODWORD(a2) = **(_DWORD **)(v2 + 552) + 472; v83 = sub_40A910(-1666122511); (*(void (__thiscall **)(_DWORD, const CHAR *))LODWORD(a2))(*(_DWORD *)(v2 + 552), v83); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 552) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 552) + 256))(0); a2 = COERCE_FLOAT(sub_8FB140(v117, (int)"ClsNor", (int)&v115, (int)&v116, v114)); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ClsClick"); sub_8FB650((_DWORD *)LODWORD(a2), v117, (int)"ClsOver"); v84 = sub_8FE0F0(v115 - v26, v116 - v27, SLODWORD(a2), v2, 8, 0, 0); *(_DWORD *)(v2 + 556) = v84; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v84 + 256))(v84, 0); *(_DWORD *)(v2 + 396) = 1; sub_56A650(v2); v85 = sub_8FB140(v117, (int)"ForceRed", (int)&v115, (int)&v116, 0); sub_56FF80((_DWORD *)(v2 + 564), (int)v85); v86 = sub_8FB140(v117, (int)"ForceBlue", (int)&v115, (int)&v116, 0); sub_56FF80((_DWORD *)(v2 + 568), (int)v86); v113 = 0; LOBYTE(v118) = 2; if ( !byte_ACAD5C ) sub_420410(); v87 = (char *)sub_401410(byte_ACA838, "Sta_GTI_Scan_UI.nif"); sub_8F66B0(v87, (int)&v113, 0); v88 = (float *)operator new(0x44u); a2 = *(float *)&v88; LOBYTE(v118) = 3; if ( v88 ) { v89 = sub_85BD60((void *)v113); v90 = sub_6B0A90(v88, v89); } else { v90 = 0; } v91 = *(_DWORD **)(v2 + 652); *(_DWORD *)(v2 + 588) = v90; v92 = *(_DWORD *)(v2 + 368); LOBYTE(v118) = 2; sub_442AC0(v91, v92); sub_442AC0(*(_DWORD **)(v2 + 652), *(_DWORD *)(v2 + 372)); sub_442AC0(*(_DWORD **)(v2 + 652), *(_DWORD *)(v2 + 376)); sub_442AC0(*(_DWORD **)(v2 + 652), *(_DWORD *)(v2 + 384)); sub_442AC0(*(_DWORD **)(v2 + 652), *(_DWORD *)(v2 + 380)); sub_442AC0(*(_DWORD **)(v2 + 652), *(_DWORD *)(v2 + 612)); v93 = sub_8FB140(v117, (int)"HardModeFlag", (int)&v115, (int)&v116, 0); if ( !v93 ) { v94 = (void (__thiscall ***)(_DWORD, signed int))v113; LOBYTE(v118) = 1; if ( v113 && !InterlockedDecrement((volatile LONG *)(v113 + 4)) && v94 ) (**v94)(v94, 1); v95 = (void (__thiscall ***)(_DWORD, signed int))v112; LOBYTE(v118) = 0; if ( !InterlockedDecrement((volatile LONG *)(v112 + 4)) ) (**v95)(v95, 1); v4 = (void (__thiscall ***)(_DWORD, signed int))v117; v118 = -1; if ( !v117 || InterlockedDecrement((volatile LONG *)(v117 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v96 = sub_8F3EB0(v115, v116, (int)v93, v2, 0, 0); *(_DWORD *)(v2 + 660) = v96; if ( !v96 ) goto LABEL_92; *((_DWORD *)v96 + 68) = dword_AD01E8; v97 = sub_4090F0(-419092722); sub_8F2EA0(*(void ***)(v2 + 660), v97); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 660) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 660) + 240))(1); v98 = sub_8F4180(0, 0, 1, 1, v2, 0, 0); a2 = *(float *)&v98; if ( v98 ) InterlockedIncrement(v98 + 1); LOBYTE(v118) = 4; sub_65AD50((int *)(v2 + 676), (int *)&a2); LOBYTE(v118) = 2; sub_410C00(&a2); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); v99 = sub_4083B0(); v100 = (char *)sub_401410(v99, "Game\\HeroMode.nif"); sub_8F66B0(v100, (int)&v113, 0); if ( !v113 ) { LABEL_92: LOBYTE(v118) = 1; sub_410C00(&v113); LOBYTE(v118) = 0; sub_410C00(&v112); v118 = -1; sub_410C00(&v117); return 0; } v101 = (float *)operator new(0x44u); a2 = *(float *)&v101; LOBYTE(v118) = 5; if ( v101 ) { v102 = sub_85BD60((void *)v113); v103 = sub_6B0A90(v101, v102); } else { v103 = 0; } v104 = *(_DWORD *)(v2 + 660); *(_DWORD *)(v2 + 672) = v103; v105 = *(int (**)(void))(*(_DWORD *)v104 + 144); LOBYTE(v118) = 2; v106 = v105(); v107 = *(float ***)(v2 + 672); if ( v107 ) { v108 = *v107; v109 = (double)v116; a2 = (double)(v106 / 2) + (double)v115; sub_417B60(v108, a2, v109, 1000.0); *(_BYTE *)(*(_DWORD *)(v2 + 672) + 66) = 1; } LOBYTE(v118) = 1; sub_410C00(&v113); LOBYTE(v118) = 0; sub_410C00(&v112); v118 = -1; sub_410C00(&v117); result = 1; } else { LABEL_91: LOBYTE(v118) = 0; sub_410C00(&v112); v118 = -1; sub_410C00(&v117); result = 0; } } else { v25 = (void (__thiscall ***)(_DWORD, signed int))v117; v118 = -1; if ( v117 && !InterlockedDecrement((volatile LONG *)(v117 + 4)) && v25 ) (**v25)(v25, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0056F350) -------------------------------------------------------- void __thiscall sub_56F350(_DWORD **this, __int16 *a2) { _DWORD **v2; // esi char *v3; // eax int v4; // ebx int v5; // eax _DWORD *v6; // ecx volatile LONG *v7; // edi const char *v8; // eax void **v9; // ecx int v10; // eax float v11; // [esp+Ch] [ebp-50h] float v12; // [esp+10h] [ebp-4Ch] float v13; // [esp+14h] [ebp-48h] __int16 *v14; // [esp+18h] [ebp-44h] volatile LONG *v15; // [esp+1Ch] [ebp-40h] int v16; // [esp+20h] [ebp-3Ch] float v17[9]; // [esp+24h] [ebp-38h] int v18; // [esp+48h] [ebp-14h] int v19; // [esp+4Ch] [ebp-10h] int v20; // [esp+50h] [ebp-Ch] int v21; // [esp+54h] [ebp-8h] v2 = this; v14 = a2; if ( a2 ) { sub_51B270(this[133], a2); v3 = sub_664AB0(dword_AD8C90, *a2); v4 = (int)v3; if ( v3 ) { if ( !sub_56A9A0(v2, *((_WORD *)v3 + 274)) && sub_651680(v4) && *(_DWORD *)(sub_4B0D70(*(unsigned __int16 *)(v4 + 942)) + 170) != 22 ) { if ( sub_6516C0((_BYTE *)v4) ) { v5 = (int)v2[116]; } else { v6 = v2[98]; v5 = (int)v2[119]; } v7 = sub_56D5E0(0, 0, v5, 0, (int)v2[98], 0); v15 = v7; if ( v7 ) { v16 = sub_49F370(*(unsigned __int16 *)(v4 + 942)); if ( v16 && *((_DWORD *)v7 + 72) ) { if ( sub_6516C0((_BYTE *)v4) ) { v16 = *((_DWORD *)v7 + 72); v8 = (const char *)sub_651920((_BYTE *)v4); v9 = (void **)v16; } else { v9 = (void **)*((_DWORD *)v7 + 72); v8 = (const char *)(v16 + 34); } sub_8F2EA0(v9, v8); *(_DWORD *)(*((_DWORD *)v7 + 72) + 272) = dword_AD01E8; } (*(void (__thiscall **)(int, float *))(*(_DWORD *)v4 + 216))(v4, v17); (*(void (__thiscall **)(int, float *))(*(_DWORD *)v4 + 220))(v4, &v11); v12 = -v12; v13 = -v13; sub_8CF390(&v11, v17); (*(void (__thiscall **)(volatile LONG *, float *))(*v7 + 296))(v7, v17); *((_WORD *)v7 + 156) = *v14; sub_6B9900(v2 + 125, &v15); (*(void (__stdcall **)(int *))(*v2[88] + 188))(&v18); v18 += (*(int (**)(void))(*v2[88] + 164))(); v19 += (*(int (**)(void))(*v2[88] + 168))(); v20 += (*(int (**)(void))(*v2[88] + 164))(); v10 = (*(int (**)(void))(*v2[88] + 168))(); sub_517E90(v7, v18, v19, v20, v10 + v21); *((_BYTE *)v7 + 332) = 1; } } } } } // AD01E8: using guessed type int dword_AD01E8; //----- (0056F590) -------------------------------------------------------- _DWORD *__thiscall sub_56F590(int *this, int *a2) { int *v2; // esi _DWORD *result; // eax _DWORD *v4; // edi _DWORD *v5; // ecx v2 = this; sub_5190D0(this[133], a2); result = (_DWORD *)sub_56D720(0, 0, v2[118], v2[98]); v4 = result; if ( result ) { result[73] = a2; result = (_DWORD *)(*(int (__thiscall **)(int *))(v2[129] + 4))(v2 + 129); result[2] = v4; *result = 0; result[1] = v2[131]; v5 = (_DWORD *)v2[131]; if ( v5 ) { *v5 = result; ++v2[132]; } else { ++v2[132]; v2[130] = (int)result; } v2[131] = (int)result; } return result; } //----- (0056F630) -------------------------------------------------------- char __thiscall sub_56F630(_DWORD *this, int *a2) { _DWORD *v2; // edi int *v3; // eax int *v4; // esi v2 = this; v3 = (int *)sub_680810(byte_AD9238); v4 = a2; if ( *a2 != *v3 || a2[1] != v3[1] || a2[2] != v3[2] || a2[3] != v3[3] || a2[4] != v3[4] ) { sub_519FF0((_DWORD *)v2[133], a2); LOBYTE(v3) = sub_56ACE0(v2, v4); if ( !(_BYTE)v3 ) { v3 = (int *)sub_56D880(0, 0, v2[118], v2[98]); a2 = v3; if ( v3 ) { v3[73] = (int)v4; LOBYTE(v3) = (unsigned int)sub_6B9900(v2 + 121, &a2); } } } return (char)v3; } //----- (0056F6C0) -------------------------------------------------------- _DWORD *__thiscall sub_56F6C0(int *this, int a2, int a3) { int *v3; // esi int v4; // ecx int v5; // edi int v6; // eax int v7; // edi _DWORD *result; // eax _DWORD *v9; // edi int v10; // ecx _DWORD *v11; // ecx int v12; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] v3 = this; v13 = a3; v4 = this[133]; v12 = a2; sub_51A360(v4, &v12); v5 = *((_DWORD *)dword_AD8EBC + 169); if ( *(_DWORD *)(sub_6D38F0() + 80) == v5 ) { v6 = v3[141]; } else { v7 = *((_DWORD *)dword_AD8EBC + 169); result = (_DWORD *)sub_6D38F0(); if ( result[19] != v7 ) return result; v6 = v3[142]; } result = (_DWORD *)sub_56DCA0(0, 0, v6, v3[98]); v9 = result; if ( result ) { v10 = v13; result[73] = v12; result[74] = v10; result = (_DWORD *)(*(int (__thiscall **)(int *))(v3[143] + 4))(v3 + 143); result[2] = v9; *result = 0; result[1] = v3[145]; v11 = (_DWORD *)v3[145]; if ( v11 ) { *v11 = result; ++v3[146]; } else { ++v3[146]; v3[144] = (int)result; } v3[145] = (int)result; } return result; } //----- (0056F7B0) -------------------------------------------------------- int __thiscall sub_56F7B0(int *this, unsigned __int16 *a2) { int *v2; // esi int v3; // ecx unsigned __int16 *v4; // edi int result; // eax int v6; // ebx int v7; // eax float *v8; // eax float v9; // ST1C_4 float v10; // ST20_4 _DWORD *v11; // esi _DWORD *v12; // edi int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] int v15; // [esp+18h] [ebp-8h] int *v16; // [esp+1Ch] [ebp-4h] v2 = this; v3 = this[133]; v4 = a2; v16 = v2; if ( v3 ) sub_51AB40(v3, a2); result = 0; v15 = 0; if ( *a2 > 0u ) { v6 = (int)(a2 + 2); do { switch ( *(_BYTE *)(v6 + 8) ) { case 5: v7 = v2[116]; break; case 0x10: v7 = v2[141]; break; case 0x11: v7 = v2[142]; break; default: v7 = v2[119]; break; } v8 = (float *)sub_56DDF0(0, 0, v7, v2[98]); v13 = (int)v8; if ( v8 ) { v9 = (double)*(unsigned int *)v6; v10 = (double)*(unsigned int *)(v6 + 4); v8[73] = v9; v8[74] = v10; v11 = v2 + 155; v8[76] = (double)*(unsigned int *)(v6 + 9) / 1000.0 + flt_ACCFCC; v14 = *(unsigned __int16 *)(v6 - 2); v12 = *(_DWORD **)(v11[2] + 4 * (*(int (__thiscall **)(_DWORD *, int))(*v11 + 4))(v11, v14)); if ( v12 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v11 + 8))(v11, v14, v12[1]) ) { v12 = (_DWORD *)*v12; if ( !v12 ) goto LABEL_19; } if ( v12[2] ) sub_56C570(v16, *(unsigned __int16 *)(v6 - 2)); } LABEL_19: sub_815C70(v11, *(unsigned __int16 *)(v6 - 2), v13); v4 = a2; v2 = v16; } result = v15 + 1; v6 += 15; v15 = result; } while ( result < *v4 ); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0056F920) -------------------------------------------------------- char __thiscall sub_56F920(_DWORD *this, int a2) { char *v2; // eax _DWORD *v3; // esi _DWORD *v4; // ecx int v5; // ebx int v7; // [esp+8h] [ebp-4h] LOBYTE(v2) = -1; v3 = this; if ( (_WORD)a2 != -1 ) { v4 = (_DWORD *)this[133]; if ( v4 ) sub_51ADF0(v4, a2); v2 = sub_664AB0(dword_AD8C90, a2); if ( v2 ) { LOBYTE(v2) = v2[2952]; if ( (_BYTE)v2 ) { if ( (_BYTE)v2 != 1 ) return (char)v2; v2 = (char *)v3[142]; } else { v2 = (char *)v3[141]; } if ( v2 ) { v2 = (char *)sub_56DF40(0, 0, (int)v2, v3[98]); v5 = (int)v2; if ( v2 ) { v7 = 0; sub_521BB0(v3 + 159, a2, &v7); if ( v7 ) sub_56B500(v3, a2); LOBYTE(v2) = sub_521A60(v3 + 159, a2, v5); } } } } return (char)v2; } //----- (0056F9E0) -------------------------------------------------------- void __thiscall sub_56F9E0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi signed int v5; // edi signed int v6; // ebx int v7; // eax int v8; // ecx bool v9; // bl char *v10; // eax char *v11; // esi char **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi char *v14; // ebx float **v15; // edi void *v16; // eax char *v17; // ecx char v18; // ST08_1 int v19; // ST0C_4 int v20; // ST10_4 char *v21; // ST04_4 int v22; // ST14_4 char *v23; // eax char *v24; // eax int *v25; // eax __int16 v26; // ST1C_2 char v27; // [esp+20h] [ebp-70h] char v28; // [esp+2Ch] [ebp-64h] float v29[3]; // [esp+38h] [ebp-58h] int v30; // [esp+44h] [ebp-4Ch] _DWORD *v31; // [esp+48h] [ebp-48h] int v32; // [esp+4Ch] [ebp-44h] int v33; // [esp+50h] [ebp-40h] char v34[4]; // [esp+54h] [ebp-3Ch] int v35; // [esp+64h] [ebp-2Ch] unsigned int v36; // [esp+68h] [ebp-28h] int v37; // [esp+70h] [ebp-20h] int v38; // [esp+74h] [ebp-1Ch] int v39; // [esp+78h] [ebp-18h] char v40; // [esp+7Ch] [ebp-14h] int v41; // [esp+8Ch] [ebp-4h] v31 = this; if ( a2 == 3 ) { v4 = (int)(this - 58); v5 = (unsigned int)(*(int (__thiscall **)(char *))(*(this - 58) + 144))((char *)this - 232) >> 1; v6 = (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4) >> 1; (*(void (__thiscall **)(int, int *, int *))(*(_DWORD *)v4 + 212))(v4, &v32, &v33); v7 = v32 - pt.x; v8 = v33 - pt.y; v32 = v7; v33 -= pt.y; v9 = v7 >= -v5 && v7 < v5 && v8 >= -v6 && v8 < v6; v10 = sub_664AB0(dword_AD8C90, *((_WORD *)v31 + 40)); v11 = v10; if ( v9 ) { if ( v10 ) { v12 = (char **)sub_49F490(&v30); v13 = (void (__thiscall ***)(_DWORD, signed int))v30; v14 = *v12; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v13 ) (**v13)(v13, 1); if ( v14 ) { v15 = *(float ***)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 1220); if ( v15 ) { v36 = 15; v35 = 0; v34[0] = 0; v41 = 0; if ( sub_6516C0(v11) ) v16 = sub_651920(v11); else v16 = (void *)(*(int (__thiscall **)(char *))(*(_DWORD *)v11 + 84))(v11); sub_40AC00(v34, v16); sub_5E9180(v15); v17 = *(char **)v34; if ( v36 < 0x10 ) v17 = v34; v18 = dword_AA8CB8; v19 = dword_AA8CBC; v20 = dword_AA8CC0; v21 = v17; v22 = dword_AA8CC4; v23 = (char *)sub_40A910(-1617112356); v24 = sub_7549E0(v23, v21); sub_5E9030(v15, (int)v24, v18, v19, v20, v22, 0, 1000000.0); v41 = -1; sub_636A10(v34); } (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v11 + 200))(v11, v29); (*(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v28); v25 = sub_439D70(byte_ADB468, &v27); v37 = *v25; v38 = v25[1]; v26 = *((_WORD *)v11 + 471); v39 = v25[2]; v40 = 0; sub_630280(v14, (int)&v28, v29, (char *)&v37, (char *)&v37, v26); } } } } } // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; //----- (0056FC40) -------------------------------------------------------- char __thiscall sub_56FC40(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_56E1C0(this, *(float *)&a2); (*(void (__thiscall **)(_DWORD *, int, int, _DWORD, _DWORD))(*v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.0); v2[133] = sub_51C7D0((int)v2, a2); return 1; } //----- (0056FC90) -------------------------------------------------------- int __thiscall sub_56FC90(int *this, _BYTE *a2) { int *v2; // edi int result; // eax bool v4; // zf __int16 *v5; // esi char *v6; // ebx _DWORD *v7; // eax int v8; // ecx int v9; // esi int v10; // edx int v11; // eax _DWORD *v12; // eax int v13; // eax int v14; // edx volatile LONG *v15; // esi const char *v16; // eax int v17; // eax int v18; // edx int v19; // ebx int v20; // ecx int v21; // edx float v22; // [esp+Ch] [ebp-54h] float v23; // [esp+10h] [ebp-50h] float v24; // [esp+14h] [ebp-4Ch] int v25; // [esp+18h] [ebp-48h] _WORD *v26; // [esp+1Ch] [ebp-44h] int v27; // [esp+20h] [ebp-40h] volatile LONG *v28; // [esp+24h] [ebp-3Ch] float v29[9]; // [esp+28h] [ebp-38h] int v30; // [esp+4Ch] [ebp-14h] int v31; // [esp+50h] [ebp-10h] int v32; // [esp+54h] [ebp-Ch] int v33; // [esp+58h] [ebp-8h] v2 = this; result = sub_51C900(this[133], a2); v4 = *a2 == 0; v25 = 0; if ( !v4 ) { v5 = (__int16 *)(a2 + 1); v26 = a2 + 1; do { if ( v5 ) { sub_51B270((_DWORD *)v2[133], v5); v6 = sub_664AB0(dword_AD8C90, *v5); if ( v6 ) { v7 = (_DWORD *)v2[126]; if ( v7 ) { while ( 1 ) { v8 = v7[2]; v7 = (_DWORD *)*v7; if ( v8 ) { if ( *(_WORD *)(v8 + 312) == *((_WORD *)v6 + 274) ) break; } if ( !v7 ) goto LABEL_9; } } else { LABEL_9: if ( sub_651680((int)v6) ) { v9 = dword_ACDA74; v10 = *(_DWORD *)dword_ACDA74; v28 = (volatile LONG *)*((unsigned __int16 *)v6 + 471); if ( (*(unsigned __int8 (__thiscall **)(int, volatile LONG *))(v10 + 16))(dword_ACDA74, v28) ) { if ( (unsigned __int16)v28 <= *(_WORD *)(v9 + 200) ) { v12 = (_DWORD *)(*(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)v28); v11 = *v12 ? *v12 : 0; } else { v11 = 0; } } else { v11 = 0; } if ( *(_DWORD *)(v11 + 170) != 22 ) { if ( sub_6516C0(v6) ) { v13 = v2[116]; } else { v14 = v2[98]; v13 = v2[119]; } v15 = sub_56D5E0(0, 0, v13, 0, v2[98], 0); v28 = v15; if ( v15 ) { v27 = sub_49F370(*((unsigned __int16 *)v6 + 471)); if ( v27 && *((_DWORD *)v15 + 72) ) { if ( sub_6516C0(v6) ) { v27 = *((_DWORD *)v15 + 72); v16 = (const char *)sub_651920(v6); sub_8F2EA0((void **)v27, v16); } else { sub_8F2EA0(*((void ***)v15 + 72), (const char *)(v27 + 34)); } *(_DWORD *)(*((_DWORD *)v15 + 72) + 272) = dword_AD01E8; } (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v6 + 216))(v6, v29); (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v6 + 220))(v6, &v22); v23 = -v23; v24 = -v24; sub_8CF390(&v22, v29); (*(void (__thiscall **)(volatile LONG *, float *))(*v15 + 296))(v15, v29); *((_WORD *)v15 + 156) = *v26; sub_6B9900(v2 + 125, &v28); (*(void (__stdcall **)(int *))(*(_DWORD *)v2[88] + 188))(&v30); v30 += (*(int (**)(void))(*(_DWORD *)v2[88] + 164))(); v31 += (*(int (**)(void))(*(_DWORD *)v2[88] + 168))(); v32 += (*(int (**)(void))(*(_DWORD *)v2[88] + 164))(); v17 = (*(int (**)(void))(*(_DWORD *)v2[88] + 168))(); v18 = v31; v19 = v32; v33 += v17; v20 = v33; *((_DWORD *)v15 + 79) = v30; *((_DWORD *)v15 + 80) = v18; *((_DWORD *)v15 + 81) = v19; *((_DWORD *)v15 + 82) = v20; *((_BYTE *)v15 + 332) = 1; } } } } } } v21 = (unsigned __int8)*a2; result = v25 + 1; v5 = (_WORD *)((char *)v26 + 159); v25 = result; v26 = (_WORD *)((char *)v26 + 159); } while ( result < v21 ); } return result; } // ACDA74: using guessed type int dword_ACDA74; // AD01E8: using guessed type int dword_AD01E8; //----- (0056FF80) -------------------------------------------------------- _DWORD *__thiscall sub_56FF80(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *this; if ( *this != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } return v2; } //----- (0056FFD0) -------------------------------------------------------- void *__thiscall sub_56FFD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; //----- (00570000) -------------------------------------------------------- int __thiscall sub_570000(_DWORD *this) { return this[72]; } //----- (00570010) -------------------------------------------------------- int __thiscall sub_570010(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; return result; } // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; // 9CFF9C: using guessed type void *NiTPointerListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; //----- (00570090) -------------------------------------------------------- _DWORD *__thiscall sub_570090(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; // 9CFF9C: using guessed type void *NiTPointerListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; //----- (00570120) -------------------------------------------------------- int __thiscall sub_570120(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; return result; } // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; // 9D12D0: using guessed type void *PgTList::`vftable'; //----- (005701A0) -------------------------------------------------------- int __cdecl sub_5701A0(unsigned int a1) { return sub_7474E0((_DWORD *)(dword_ACDA58 + 4), a1); } // ACDA58: using guessed type int dword_ACDA58; //----- (005701C0) -------------------------------------------------------- int sub_5701C0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA58 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA58: using guessed type int dword_ACDA58; //----- (005701E0) -------------------------------------------------------- unsigned int __cdecl sub_5701E0(__int16 a1) { unsigned int v1; // esi v1 = 0; if ( sub_5701C0() ) { do { if ( *(_WORD *)(sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v1) + 2) == a1 ) break; ++v1; } while ( v1 < sub_5701C0() ); } return v1; } // ACDA58: using guessed type int dword_ACDA58; //----- (00570220) -------------------------------------------------------- void *__thiscall sub_570220(void *this, char a2) { void *v2; // esi v2 = this; sub_569DB0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00570250) -------------------------------------------------------- void **__thiscall sub_570250(void *this, char a2) { void **v2; // esi int v3; // edi v2 = (void **)this; *(_DWORD *)this = &MiniMapMarkWin::`vftable'; *((_DWORD *)this + 58) = &MiniMapMarkWin::`vftable'; v3 = *((_DWORD *)this + 72); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F29C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9CFFAC: using guessed type void *MiniMapMarkWin::`vftable'; // 9CFFCC: using guessed type void *MiniMapMarkWin::`vftable'; //----- (005702F0) -------------------------------------------------------- _DWORD *__thiscall sub_5702F0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9CFF8C: using guessed type void *NiTListBase,MiniMapWin::sKQAlarmInfo *>::`vftable'; // 9D12D0: using guessed type void *PgTList::`vftable'; //----- (00570380) -------------------------------------------------------- void *__thiscall sub_570380(void *this, char a2) { void *v2; // esi v2 = this; sub_56C940((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005703B0) -------------------------------------------------------- void *__thiscall sub_5703B0(void *this, char a2) { void *v2; // esi v2 = this; sub_56C9F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005703E0) -------------------------------------------------------- int __thiscall sub_5703E0(void *this, _BYTE *a2) { return sub_8F1140(this, a2); } //----- (00570420) -------------------------------------------------------- int __thiscall sub_570420(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( !this[90] ) return 0; (*(void (**)(void))(*(_DWORD *)this[90] + 484))(); return (*(int (**)(void))(*(_DWORD *)v1[90] + 484))(); } //----- (00570460) -------------------------------------------------------- void __thiscall sub_570460(_DWORD *this, int a2, LONG a3, int a4) { _DWORD *v4; // esi signed int v5; // eax int v6; // ecx void (__stdcall *v7)(signed int, int); // eax void (__thiscall *v8)(_DWORD *, LONG *, LONG *); // eax int v9; // ebx int v10; // eax int v11; // eax const char *v12; // eax int v13; // edi const char *v14; // eax int v15; // eax int v16; // [esp+0h] [ebp-Ch] int v17; // [esp+0h] [ebp-Ch] LONG v18; // [esp+8h] [ebp-4h] v4 = this; if ( a2 == 15 ) { v5 = 0; switch ( *(_DWORD *)a3 ) { case 0x3F7: v5 = 1; break; case 0x3F8: v5 = 2; break; case 0x3F9: v5 = 4; break; case 0x3FA: v5 = 8; break; case 0x3FB: v5 = 16; break; default: break; } if ( *(_BYTE *)(a3 + 4) ) this[28] |= v5; else this[28] &= ~v5; v6 = this[107]; if ( v4[28] & 0x10 ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v6 + 240))(0, v16); *(_WORD *)(v4[107] + 28) |= 1u; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v4[107] + 256))(0); } else { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v6 + 240))(1, v16); *(_WORD *)(v4[107] + 28) &= 0xFFFEu; (*(void (__cdecl **)(signed int))(*(_DWORD *)v4[107] + 256))(1); } v7 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v4[106] + 240); if ( v4[28] & 0xF ) { v7(0, v17); *(_WORD *)(v4[106] + 28) |= 1u; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v4[106] + 256))(0); } else { v7(1, v17); *(_WORD *)(v4[106] + 28) &= 0xFFFEu; (*(void (__cdecl **)(signed int))(*(_DWORD *)v4[106] + 256))(1); } } if ( a4 ) { v8 = *(void (__thiscall **)(_DWORD *, LONG *, LONG *))(*(v4 - 58) + 224); a3 = pt.x; v9 = (int)(v4 - 58); v18 = pt.y; v8(v4 - 58, &a3, &v18); if ( a3 >= 0 ) { v10 = (*(int (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 144))(v4 - 58); if ( a3 < v10 && v18 >= 0 ) { v11 = (*(int (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 148))(v4 - 58); if ( v18 < v11 ) { if ( a2 == 3 ) { if ( v4[32] ) { v14 = (const char *)(*(int (**)(void))(*(_DWORD *)v4[32] + 484))(); if ( v14 ) { if ( strcmp(v14, (const char *)&unk_9D153B) ) { v15 = sub_6645B0(dword_AD8C90, v14); if ( v15 ) sub_4A7770((_DWORD *)v4[16], v15); } } } } else if ( a2 == 6 ) { if ( v4[32] ) { v12 = (const char *)(*(int (**)(void))(*(_DWORD *)v4[32] + 484))(); v13 = (int)v12; if ( v12 ) { if ( strcmp(v12, (const char *)&unk_9D153A) ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 260))(v4 - 58) ) sub_8EEE70((_DWORD *)v4[16], 128, v13, 0); } } } } } } } } } //----- (005706F0) -------------------------------------------------------- int __thiscall sub_5706F0(char *this, char *a2, int a3, int *a4) { char *v4; // esi _DWORD *v5; // ecx int result; // eax void ***v7; // edi void ***v8; // esi int v9; // ebx int v10; // eax bool v11; // zf int *v12; // eax int v13; // eax int v14; // eax int v15; // [esp+4h] [ebp-14h] int v16; // [esp+4h] [ebp-14h] int v17; // [esp+4h] [ebp-14h] _DWORD *v18; // [esp+8h] [ebp-10h] unsigned __int16 v19; // [esp+Ch] [ebp-Ch] int v20; // [esp+Ch] [ebp-Ch] int v21; // [esp+Ch] [ebp-Ch] int v22; // [esp+Ch] [ebp-Ch] int v23; // [esp+10h] [ebp-8h] int v24; // [esp+14h] [ebp-4h] int v25; // [esp+20h] [ebp+8h] v4 = this; v5 = *(_DWORD **)(sub_64F860(a2) + 4); result = *a4; v25 = *a4; if ( v5 ) { v23 = (int)&v4[4 * result + 536]; v7 = (void ***)&v4[4 * result + 416]; v24 = (int)&v4[4 * result + 596]; v8 = (void ***)&v4[4 * result + 476]; while ( result < 15 ) { v9 = v5[2]; v18 = (_DWORD *)*v5; v19 = *(_WORD *)(v9 + 20); v15 = dword_ACDA80; if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACDA80 + 16))(*(unsigned __int16 *)(v9 + 20)) ) { if ( v19 <= *(_WORD *)(v15 + 200) ) { v10 = *(_DWORD *)(v15 + 196); v11 = *(_DWORD *)(v10 + 4 * v19) == 0; v12 = (int *)(v10 + 4 * v19); if ( v11 ) v20 = 0; else v20 = *v12; } else { v20 = 0; } } else { v20 = 0; } result = v20; if ( *(_BYTE *)(v20 + 526) ) { if ( a3 != 4 || *(_DWORD *)(v20 + 522) != 4 ) { result = *(_DWORD *)(v20 + 522); if ( result == a3 && result != 4 ) { sub_5D0FB0(*v7, *(unsigned __int16 *)(v9 + 20)); sub_8F2EA0(*v7, (const char *)(v20 + 70)); (*v7)[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**v7 + 64))(1); (*((void (__stdcall **)(signed int))**v7 + 60))(1); (*((void (__stdcall **)(signed int))**v7 + 62))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v23 + 256))(1); ++v25; result = 4; v24 += 4; v23 += 4; ++v8; ++v7; if ( *(_DWORD *)(v9 + 112) ) { v17 = *(unsigned __int16 *)(v9 + 20); v22 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v17); if ( (_BYTE)result ) { result = v17; if ( (unsigned __int16)v17 <= *(_WORD *)(v22 + 200) ) { v14 = *(_DWORD *)(v22 + 196); v11 = *(_DWORD *)(v14 + 4 * (unsigned __int16)v17) == 0; result = v14 + 4 * (unsigned __int16)v17; if ( !v11 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v7, *(_DWORD *)(v9 + 112)); (*((void (__stdcall **)(signed int))**v7 + 64))(1); (*((void (__stdcall **)(signed int))**v7 + 60))(1); (*((void (__stdcall **)(signed int))**v7 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v23 + 256))(1); ++v25; v24 += 4; ++v8; ++v7; v23 += 4; } } } } } } } } else { sub_5D0FB0(*v8, *(unsigned __int16 *)(v9 + 20)); sub_8F2EA0(*v8, (const char *)(v20 + 70)); (*v8)[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**v8 + 64))(1); (*((void (__stdcall **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v24 + 256))(1); ++v25; result = 4; v24 += 4; v23 += 4; ++v8; ++v7; if ( *(_DWORD *)(v9 + 112) ) { v16 = *(unsigned __int16 *)(v9 + 20); v21 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v16); if ( (_BYTE)result ) { result = v16; if ( (unsigned __int16)v16 <= *(_WORD *)(v21 + 200) ) { v13 = *(_DWORD *)(v21 + 196); v11 = *(_DWORD *)(v13 + 4 * (unsigned __int16)v16) == 0; result = v13 + 4 * (unsigned __int16)v16; if ( !v11 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v8, *(_DWORD *)(v9 + 112)); (*((void (__stdcall **)(signed int))**v8 + 64))(1); (*((void (__stdcall **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v24 + 256))(1); ++v25; ++v8; ++v7; v23 += 4; v24 += 4; } } } } } } } } if ( !v18 ) { *a4 = v25; return result; } v5 = v18; result = v25; } *a4 = result; } else { *a4 = result; } return result; } // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; // AD01E8: using guessed type int dword_AD01E8; //----- (00570A90) -------------------------------------------------------- int __thiscall sub_570A90(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD **v3; // edi _DWORD **v4; // edi _DWORD **v5; // edi _DWORD **v6; // edi _DWORD **v7; // edi int v8; // ecx void (__stdcall *v9)(signed int, int); // eax int result; // eax int v11; // [esp+0h] [ebp-14h] int v12; // [esp+0h] [ebp-14h] int v13; // [esp+Ch] [ebp-8h] char v14; // [esp+10h] [ebp-4h] v2 = this; v3 = (_DWORD **)(this[103] + 232); v13 = 1015; v14 = a2 & 1; if ( v3[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 4))(16, &v13, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 16))(16, &v13, v3); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[4])(v3, 16, &v13, v3); v4 = (_DWORD **)(v2[103] + 232); v13 = 1016; v14 = (a2 >> 1) & 1; if ( v4[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 4))(16, &v13, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 16))(16, &v13, v4); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v4)[4])(v4, 16, &v13, v4); v5 = (_DWORD **)(v2[103] + 232); v13 = 1017; v14 = (a2 >> 2) & 1; if ( v5[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 4))(16, &v13, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 16))(16, &v13, v5); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v5)[4])(v5, 16, &v13, v5); v6 = (_DWORD **)(v2[103] + 232); v13 = 1018; v14 = (a2 >> 3) & 1; if ( v6[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 4))(16, &v13, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 16))(16, &v13, v6); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v6)[4])(v6, 16, &v13, v6); v7 = (_DWORD **)(v2[103] + 232); v13 = 1019; v14 = (a2 >> 4) & 1; if ( v7[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 4))(16, &v13, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 16))(16, &v13, v7); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v7)[4])(v7, 16, &v13, v7); v8 = v2[165]; v2[86] = a2; if ( a2 & 0x10 ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v8 + 240))(0, v11); *(_WORD *)(v2[165] + 28) |= 1u; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v2[165] + 256))(0); } else { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v8 + 240))(1, v11); *(_WORD *)(v2[165] + 28) &= 0xFFFEu; (*(void (__cdecl **)(signed int))(*(_DWORD *)v2[165] + 256))(1); } v9 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v2[164] + 240); if ( v2[86] & 0xF ) { v9(0, v12); *(_WORD *)(v2[164] + 28) |= 1u; result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2[164] + 256))(v2[164], 0); } else { v9(1, v12); *(_WORD *)(v2[164] + 28) &= 0xFFFEu; result = (*(int (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v2[164] + 256))(v2[164], 1); } return result; } //----- (00570D20) -------------------------------------------------------- int __thiscall sub_570D20(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { this[86] |= 0x10u; sub_570A90(this, this[86]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[165] + 240))(0); *(_WORD *)(v3[165] + 28) |= 1u; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3[165] + 256))(0); } } else { sub_570A90(this, this[86] | 0xF); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[164] + 240))(0); *(_WORD *)(v3[164] + 28) |= 1u; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3[164] + 256))(0); } return result; } //----- (00570DC0) -------------------------------------------------------- LONG __thiscall sub_570DC0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; *this = &MiniPartyWin::`vftable'; this[58] = &MiniPartyWin::`vftable'; sub_8F9E00(&unk_BA6B10, (_DWORD *)this[103]); v2 = v1[165]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[164]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); `eh vector destructor iterator'(v1 + 149, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 134, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 119, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 104, 4u, 15, sub_410C00); v4 = v1[103]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9D16E4: using guessed type void *MiniPartyWin::`vftable'; // 9D1704: using guessed type void *MiniPartyWin::`vftable'; //----- (00570F10) -------------------------------------------------------- char __thiscall sub_570F10(void *this, int a2, int a3, _DWORD *a4, int a5, int a6) { int v6; // esi volatile LONG *v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi char *v10; // eax volatile LONG **v11; // eax int v12; // edi int v13; // ebx _DWORD *v14; // eax int v15; // eax int v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // ST40_4 int v22; // edx volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax volatile LONG *v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // eax volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG **v41; // eax volatile LONG *v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax volatile LONG *v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG *v48; // eax volatile LONG *v49; // eax volatile LONG *v50; // ST40_4 volatile LONG *v51; // eax volatile LONG *v52; // ST3C_4 volatile LONG *v53; // eax volatile LONG *v54; // eax volatile LONG *v55; // ST10_4 int v56; // edx volatile LONG **v57; // eax volatile LONG *v58; // eax volatile LONG **v59; // eax volatile LONG *v60; // eax volatile LONG **v61; // eax volatile LONG *v62; // eax int v63; // eax volatile LONG *v64; // eax const CHAR *v65; // eax int v66; // eax const CHAR *v67; // eax int v68; // eax const CHAR *v69; // eax int v70; // eax const CHAR *v71; // eax int v72; // eax const CHAR *v73; // eax int v74; // eax int v75[5]; // [esp+10h] [ebp-88h] int v76; // [esp+24h] [ebp-74h] int v77; // [esp+28h] [ebp-70h] int v78; // [esp+2Ch] [ebp-6Ch] int v79; // [esp+30h] [ebp-68h] volatile LONG *v80; // [esp+34h] [ebp-64h] volatile LONG **v81; // [esp+38h] [ebp-60h] int v82; // [esp+3Ch] [ebp-5Ch] int v83; // [esp+40h] [ebp-58h] int v84; // [esp+44h] [ebp-54h] char v85; // [esp+48h] [ebp-50h] int v86; // [esp+94h] [ebp-4h] v79 = a6; v6 = (int)this; v82 = 0; v86 = 0; v7 = (volatile LONG *)sub_43D0D0(4u); v80 = v7; if ( !v7 ) goto LABEL_26; v76 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACAB50, "Game\\PtyWin_Mini.nif"); sub_8F66B0(v10, (int)&v82, v76); if ( !v82 ) return 0; v11 = sub_8FB140(v82, (int)"Panel01", (int)&v84, (int)&v83, v7); if ( !sub_8F1440((volatile LONG **)v6, a2, a3, (int)v11, a4, v79, (int)"PartyMemberWin", 0) ) { LABEL_26: v8 = (void (__thiscall ***)(_DWORD, signed int))v82; v86 = -1; if ( v82 && !InterlockedDecrement((volatile LONG *)(v82 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v12 = v84; v13 = v83; v14 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v82 + 72))("EventPanel"); v15 = sub_85C050(v14, 8); v79 = v15; if ( v15 ) { InterlockedIncrement((volatile LONG *)(v15 + 4)); v15 = v79; } v16 = **(_DWORD **)(v15 + 40); LOBYTE(v86) = 1; if ( v16 ) { v17 = *(volatile LONG **)(v16 + 4); if ( v17 ) { v18 = sub_8FB140(v82, (int)"EventPanel", (int)&v84, (int)&v83, v17); v19 = sub_8F3EB0(v84, v83, (int)v18, v6, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); sub_456260(v75); LOBYTE(v86) = 2; sub_456000(v75, v12, v13); sub_455FF0(v75, v6); sub_456380(v75, v82); *(_DWORD *)(v6 + 404) = sub_456820(v75, (int)"SPground", 0); v20 = sub_456820(v75, (int)"LPground", 0); v21 = v80; v22 = v82; *(_DWORD *)(v6 + 400) = v20; v23 = sub_8FB140(v22, (int)"Panel02", (int)&v84, (int)&v83, v21); v24 = sub_8F3EB0(v84 - v12, v83 - v13, (int)v23, v6, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v25 = sub_8FB140(v82, (int)"Fill_HP_Start", (int)&v84, (int)&v83, v80); v26 = sub_90CB20(v84 - v12, v83 - v13, (int)v25, v6, 2); *(_DWORD *)(v6 + 372) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 256))(v26, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 372) + 240))(0); v27 = sub_8FB140(v82, (int)"Fill_SP_Start", (int)&v84, (int)&v83, v80); v28 = sub_90CB20(v84 - v12, v83 - v13, (int)v27, v6, 2); *(_DWORD *)(v6 + 380) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 256))(v28, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 380) + 240))(0); v29 = sub_8FB140(v82, (int)"Fill_HP_End", (int)&v84, (int)&v83, v80); v30 = sub_90CB20(v84 - v12, v83 - v13, (int)v29, v6, 2); *(_DWORD *)(v6 + 376) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 256))(v30, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 376) + 240))(0); v31 = sub_8FB140(v82, (int)"Fill_SP_End", (int)&v84, (int)&v83, v80); v32 = sub_90CB20(v84 - v12, v83 - v13, (int)v31, v6, 2); *(_DWORD *)(v6 + 384) = v32; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 256))(v32, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 384) + 240))(0); if ( sub_8F71E0(v82, (int)"Fill_HP", &v84, &v83, &v77, &v78) ) { v33 = sub_8FB140(v82, (int)"Fill_HP", (int)&v84, (int)&v83, v80); v34 = sub_90CB20(v84 - v12, v83 - v13, (int)v33, v6, 2); *(_DWORD *)(v6 + 364) = v34; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); if ( sub_8F71E0(v82, (int)"Fill_SP", &v84, &v83, &v77, &v78) ) { v35 = sub_8FB140(v82, (int)"Fill_SP", (int)&v84, (int)&v83, v80); v36 = sub_90CB20(v84 - v12, v83 - v13, (int)v35, v6, 2); *(_DWORD *)(v6 + 368) = v36; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); v37 = sub_8FB140(v82, (int)"Fill_LP_Start", (int)&v84, (int)&v83, v80); v38 = sub_90CB20(v84 - v12, v83 - v13, (int)v37, v6, 2); *(_DWORD *)(v6 + 392) = v38; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 256))(v38, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 392) + 240))(0); v39 = sub_8FB140(v82, (int)"Fill_LP_End", (int)&v84, (int)&v83, v80); v40 = sub_90CB20(v84 - v12, v83 - v13, (int)v39, v6, 2); *(_DWORD *)(v6 + 396) = v40; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 256))(v40, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 396) + 240))(0); if ( sub_8F71E0(v82, (int)"Fill_LP", &v84, &v83, &v77, &v78) ) { v41 = sub_8FB140(v82, (int)"Fill_LP", (int)&v84, (int)&v83, v80); v42 = sub_90CB20(v84 - v12, v83 - v13, (int)v41, v6, 2); *(_DWORD *)(v6 + 388) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v76 = 0; v81 = (volatile LONG **)(v6 + 416); while ( 1 ) { sprintf(&v85, "CharBuffBox%02d", v76); if ( !sub_8F71E0(v82, (int)&v85, &v84, &v83, &v77, &v78) ) break; v43 = sub_8FB140(v82, (int)&v85, (int)&v84, (int)&v83, v80); v44 = sub_8F3EB0(v84 - v12, v83 - v13, (int)v43, v6, 0, 0); sub_56FF80(v81 + 30, (int)v44); (*(void (__stdcall **)(_DWORD))(*v81[30] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v81[30] + 256))(0); v45 = sub_5D1B00(v84 + 2, v83 + 2, v77 - 4, v78 - 4, v6, 0); sub_56FF80(v81, (int)v45); (*(void (__stdcall **)(_DWORD))(**v81 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v81 + 256))(0); sprintf(&v85, "CharDBuffBox%02d", v76); v46 = sub_8FB140(v82, (int)&v85, (int)&v84, (int)&v83, v80); v47 = sub_8F3EB0(v84 - v12, v83 - v13, (int)v46, v6, 0, 0); sub_56FF80(v81 + 45, (int)v47); (*(void (__stdcall **)(_DWORD))(*v81[45] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v81[45] + 256))(0); v48 = sub_5D1B00(v84 + 2, v83 + 2, v77 - 4, v78 - 4, v6, 0); sub_56FF80(v81 + 15, (int)v48); (*(void (__stdcall **)(_DWORD))(*v81[15] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v81[15] + 256))(0); ++v81; if ( ++v76 >= 15 ) { v81 = sub_8FB140(v82, (int)"BuffExtendNor", (int)&v84, (int)&v83, v80); sub_8FB650(v81, v82, (int)"BuffExtendClick"); sub_8FB650(v81, v82, (int)"BuffExtendOver"); v49 = sub_8FE0F0(v84, v83, (int)v81, v6, 0, 0, 0); sub_56FF80((_DWORD *)(v6 + 656), (int)v49); sub_8F2EA0(*(void ***)(v6 + 656), "Open"); v50 = v80; *(_DWORD *)(*(_DWORD *)(v6 + 656) + 272) = dword_AD01E8; v81 = sub_8FB140(v82, (int)"DeBuffExtendNor", (int)&v84, (int)&v83, v50); sub_8FB650(v81, v82, (int)"DeBuffExtendClick"); sub_8FB650(v81, v82, (int)"DeBuffExtendOver"); v51 = sub_8FE0F0(v84, v83, (int)v81, v6, 1, 0, 0); sub_56FF80((_DWORD *)(v6 + 660), (int)v51); sub_8F2EA0(*(void ***)(v6 + 660), "Open"); *(_DWORD *)(*(_DWORD *)(v6 + 660) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 656) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 660) + 240))(0); *(_WORD *)(*(_DWORD *)(v6 + 656) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v6 + 660) + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 656) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 660) + 256))(0); sub_8F71E0(v82, (int)"CharName", &v84, &v83, &v77, &v78); v52 = (volatile LONG *)dword_AD01E8; v53 = (volatile LONG *)sub_421050(0); v54 = sub_90AEF0( v84 - v12, v83 - v13, v77, v78, v53, (_DWORD *)v6, (int)"2", 0, 0, 1, v52, (volatile LONG *)0x1E); v55 = v80; v56 = v82; *(_DWORD *)(v6 + 360) = v54; v57 = sub_8FB140(v56, (int)"Chief_Party", (int)&v84, (int)&v83, v55); v58 = sub_8F3EB0(v84 - v12, v83 - v13, (int)v57, v6, 0, 0); *(_DWORD *)(v6 + 356) = v58; (*(void (__thiscall **)(volatile LONG *, signed int))(*v58 + 256))(v58, 1); v59 = sub_8FB140(v82, (int)"Panel_job", (int)&v84, (int)&v83, v80); sub_8F3EB0(v84 - v12, v83 - v13, (int)v59, v6, 0, 0); v60 = (volatile LONG *)sub_43D0D0(0x12u); v61 = sub_8FB140(v82, (int)"Char_Job", (int)&v84, (int)&v83, v60); v62 = sub_8F3EB0(v84 - v12, v83 - v13, (int)v61, v6, 0, 0); *(_DWORD *)(v6 + 664) = v62; *((_DWORD *)v62 + 68) = dword_AD01E8; v63 = sub_43D0D0(1u); v64 = sub_58E5D0(v63, 4, 4, 0); sub_56FF80((_DWORD *)(v6 + 412), (int)v64); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v6 + 412) + 232))( *(_DWORD *)(v6 + 412) + 232, v6 + 232); sub_58DFD0(*(_DWORD **)(v6 + 412)); v65 = sub_40A910(896084029); v66 = sub_58E450((int)v65, 0, 0, 0, 0, 0); *(_DWORD *)(v66 + 332) = 1015; sub_58E080(*(_DWORD **)(v6 + 412), v12, v66); v67 = sub_40A910(896283009); v68 = sub_58E450((int)v67, 0, 0, 0, 0, 0); *(_DWORD *)(v68 + 332) = 1016; sub_58E080(*(_DWORD **)(v6 + 412), v12, v68); v69 = sub_40A910(895890319); v70 = sub_58E450((int)v69, 0, 0, 0, 0, 0); *(_DWORD *)(v70 + 332) = 1017; sub_58E080(*(_DWORD **)(v6 + 412), v12, v70); v71 = sub_40A910(-618847674); v72 = sub_58E450((int)v71, 0, 0, 0, 0, 0); *(_DWORD *)(v72 + 332) = 1018; sub_58E080(*(_DWORD **)(v6 + 412), v12, v72); v73 = sub_40A910(-569123870); v74 = sub_58E450((int)v73, 0, 0, 0, 0, 0); *(_DWORD *)(v74 + 332) = 1019; sub_58E080(*(_DWORD **)(v6 + 412), v12, v74); sub_58D930(*(_DWORD **)(v6 + 412), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 412) + 256))(0); sub_570A90((_DWORD *)v6, 0xFFFFFFFF); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 240))(v6, 1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 520))(v6, 0); LOBYTE(v86) = 1; sub_4562E0(v75); LOBYTE(v86) = 0; sub_410C00(&v79); v86 = -1; sub_410C00(&v82); return 1; } } } } } LOBYTE(v86) = 1; sub_4562E0(v75); } } LOBYTE(v86) = 0; sub_410C00(&v79); v86 = -1; sub_410C00(&v82); return 0; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00571B40) -------------------------------------------------------- int *__thiscall sub_571B40(char *this, int a2) { char *v2; // edi int *result; // eax _DWORD ***v4; // esi signed int v5; // ebx char *v6; // esi bool v7; // zf int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v2 = this; result = (int *)(*(int (**)(void))(*(_DWORD *)this + 260))(); if ( (_BYTE)result ) { if ( v2[348] ) { (*(void (__thiscall **)(char *, int *, int *))(*(_DWORD *)v2 + 180))(v2, &v8, &v9); (*(void (__stdcall **)(int, int))(**((_DWORD **)v2 + 103) + 308))(v8, v9); sub_8FA050(&unk_BA6B10, (int)v2, *((_DWORD **)v2 + 103)); v2[348] = 0; } v4 = (_DWORD ***)(v2 + 416); v5 = 15; do { ((void (__stdcall *)(_DWORD))(**v4)[64])(0); ((void (__stdcall *)(_DWORD))(**v4)[60])(0); ((void (__stdcall *)(_DWORD))(**v4)[62])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[64])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[60])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[62])(0); ((void (__stdcall *)(_DWORD))(*v4[30])[64])(0); ((void (__stdcall *)(_DWORD))(*v4[45])[64])(0); sub_5D0F80(*v4); sub_5D0F80(v4[15]); ++v4; --v5; } while ( v5 ); result = (int *)*((_DWORD *)v2 + 102); if ( result ) { result = (int *)sub_6648F0(dword_AD8C90, *result, result[1], result[2], result[3], result[4]); v6 = (char *)result; if ( result ) { result = (int *)sub_64F860((char *)result); v7 = (v2[344] & 1) == 0; v8 = 0; v9 = 0; if ( !v7 ) result = (int *)sub_5706F0(v2, v6, 1, &v9); if ( v2[344] & 2 ) result = (int *)sub_5706F0(v2, v6, 2, &v9); if ( v2[344] & 4 ) result = (int *)sub_5706F0(v2, v6, 3, &v9); if ( v2[344] & 8 ) result = (int *)sub_5706F0(v2, v6, 0, &v9); if ( v2[344] & 0x10 ) result = (int *)sub_5706F0(v2, v6, 4, &v8); } } } return result; } //----- (00571D10) -------------------------------------------------------- _DWORD *__thiscall sub_571D10(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int *v3; // edi int v4; // ebx int v5; // ebx int v6; // ebx int v7; // ebx signed int v9; // [esp+14h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MiniPartyWin::`vftable'; v1[58] = &MiniPartyWin::`vftable'; v1[103] = 0; `eh vector constructor iterator'( v1 + 104, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 119, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 134, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 149, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[164] = 0; v1[165] = 0; v2 = v1[103]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[103] = 0; } *((_BYTE *)v1 + 348) = 0; v3 = v1 + 119; v9 = 15; do { v4 = *(v3 - 15); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(v3 - 15) = 0; } v5 = *v3; if ( *v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v3 = 0; } v6 = v3[15]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[15] = 0; } v7 = v3[30]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3[30] = 0; } ++v3; --v9; } while ( v9 ); v1[102] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D16E4: using guessed type void *MiniPartyWin::`vftable'; // 9D1704: using guessed type void *MiniPartyWin::`vftable'; //----- (00571F20) -------------------------------------------------------- int __thiscall sub_571F20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int result; // eax int v5; // eax int v6; // edx int v7; // ecx int v8; // eax int v9; // ecx void (__stdcall *v10)(int *); // edx float *v11; // ecx float *v12; // ecx double v13; // st7 void (__stdcall *v14)(signed int); // eax int v15; // eax void (__stdcall *v16)(signed int); // eax int v17; // eax int v18; // ecx void (__stdcall *v19)(signed int); // eax int v20; // eax unsigned __int8 v21; // al unsigned int v22; // ebx int v23; // eax int v24; // edi float v25; // eax double v26; // st7 int (__thiscall *v27)(int); // eax unsigned int v28; // eax double v29; // st7 int v30; // eax int v31; // eax int v32; // edi int v33; // eax const char *v34; // eax float v35; // [esp+Ch] [ebp-48h] int v36; // [esp+10h] [ebp-44h] float v37; // [esp+14h] [ebp-40h] float v38; // [esp+18h] [ebp-3Ch] int v39; // [esp+1Ch] [ebp-38h] float v40; // [esp+20h] [ebp-34h] int v41; // [esp+24h] [ebp-30h] int v42; // [esp+28h] [ebp-2Ch] int v43; // [esp+2Ch] [ebp-28h] int v44; // [esp+30h] [ebp-24h] int v45; // [esp+34h] [ebp-20h] int v46; // [esp+38h] [ebp-1Ch] int v47; // [esp+3Ch] [ebp-18h] int v48; // [esp+40h] [ebp-14h] int v49; // [esp+44h] [ebp-10h] int v50; // [esp+48h] [ebp-Ch] char v51; // [esp+4Ch] [ebp-8h] v2 = this; if ( a2 ) { this[102] = a2; v5 = *(_DWORD *)a2; v6 = *(_DWORD *)(a2 + 8); v47 = *(_DWORD *)(a2 + 4); v7 = *(_DWORD *)(a2 + 16); v46 = v5; v8 = *(_DWORD *)(a2 + 12); v50 = v7; v9 = v2[90]; v48 = v6; v49 = v8; v51 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v9 + 472))(&v46); v10 = *(void (__stdcall **)(int *))(*(_DWORD *)v2[90] + 468); if ( *(_BYTE *)(a2 + 20) ) v10(&dword_AA8C68); else v10((int *)&unk_AA8CE8); v11 = (float *)v2[91]; v40 = (double)*(signed int *)(a2 + 36); v11[75] = (double)*(signed int *)(a2 + 28); v11[76] = v40; sub_49F670(v11); switch ( *(unsigned __int8 *)(a2 + 52) ) { case 0x1Au: case 0x1Bu: v12 = (float *)v2[97]; v40 = (double)*(signed int *)(a2 + 48); v13 = (double)*(signed int *)(a2 + 44); break; default: v12 = (float *)v2[92]; v40 = (double)*(signed int *)(a2 + 40); v13 = (double)*(signed int *)(a2 + 32); break; } v12[75] = v13; v12[76] = v40; sub_49F670(v12); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[91] + 256))(1); v14 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[93] + 256); if ( *(_DWORD *)(a2 + 28) <= 0 ) v14(0); else v14(1); v15 = *(_DWORD *)(a2 + 36); if ( *(_DWORD *)(a2 + 28) == v15 && v15 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[94] + 256))(1); else (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[94] + 256))(0); switch ( *(unsigned __int8 *)(a2 + 52) ) { case 0x1Au: case 0x1Bu: (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[100] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[101] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[92] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[95] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[97] + 256))(1); v16 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[98] + 256); if ( *(_DWORD *)(a2 + 44) <= 0 ) v16(0); else v16(1); v17 = *(_DWORD *)(a2 + 48); if ( *(_DWORD *)(a2 + 44) != v17 || !v17 ) { v18 = v2[99]; goto LABEL_31; } (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[99] + 256))(1); break; default: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[100] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[101] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[99] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[92] + 256))(1); v19 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 256); if ( *(_DWORD *)(a2 + 32) <= 0 ) v19(0); else v19(1); v20 = *(_DWORD *)(a2 + 40); if ( *(_DWORD *)(a2 + 32) == v20 && v20 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[96] + 256))(1); } else { v18 = v2[96]; LABEL_31: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 256))(0); } break; } if ( sub_718A50(&dword_B9E560) ) { if ( dword_B9E56C != *(_DWORD *)a2 || dword_B9E570 != *(_DWORD *)(a2 + 4) || dword_B9E574 != *(_DWORD *)(a2 + 8) || dword_B9E578 != *(_DWORD *)(a2 + 12) || dword_B9E57C != *(_DWORD *)(a2 + 16) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[89] + 256))(0); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[89] + 256))(1); } } else { sub_6C1530(&dword_B9DC70, &v41); if ( v41 != *(_DWORD *)a2 || v42 != *(_DWORD *)(a2 + 4) || v43 != *(_DWORD *)(a2 + 8) || v44 != *(_DWORD *)(a2 + 12) || v45 != *(_DWORD *)(a2 + 16) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[89] + 256))(0); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[89] + 256))(1); } } switch ( *(unsigned __int8 *)(a2 + 52) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v21 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v21 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v21 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v21 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v21 = 21; break; case 0x1Au: case 0x1Bu: v21 = 26; break; default: v21 = 0; break; } *(float *)&v39 = 0.0; v22 = v21; switch ( v21 ) { case 1u: *(float *)&v39 = 0.0; break; case 6u: v39 = 1; break; case 0xBu: v39 = 3; break; case 0x10u: v39 = 2; break; case 0x15u: v39 = 4; break; case 0x1Au: v39 = 5; break; default: break; } v23 = (*(int (**)(void))(*(_DWORD *)v2[166] + 456))(); v24 = v23; v25 = COERCE_FLOAT((*(int (__thiscall **)(int))(*(_DWORD *)v23 + 60))(v23)); v40 = v25; v26 = 16.0 / (double)LODWORD(v25); v27 = *(int (__thiscall **)(int))(*(_DWORD *)v24 + 64); v40 = v26; *(float *)&v28 = COERCE_FLOAT(v27(v24)); v38 = *(float *)&v28; v29 = (double)v28; v30 = *(_DWORD *)(v2[166] + 288); v38 = 16.0 / v29; *(float *)&v39 = (double)v39 * v40; v35 = v38 + v38; if ( v30 ) v31 = *(_DWORD *)(v30 + 8); else v31 = 0; v32 = **(_DWORD **)(v31 + 12); v36 = v39; v37 = v38 + v38; sub_868090(v32, 0, 0, 0, &v36); v36 = v39; v38 = v35 + v38; v37 = v38; sub_868090(v32, 0, 1, 0, &v36); v40 = *(float *)&v39 + v40; *(float *)&v36 = v40; v37 = v38; sub_868090(v32, 0, 2, 0, &v36); *(float *)&v36 = v40; v37 = v35; sub_868090(v32, 0, 3, 0, &v36); v33 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v22); if ( v33 ) v34 = (const char *)(v33 + 21); else v34 = &byte_9A8050; sub_8F2EA0((void **)v2[166], v34); result = (*(int (__thiscall **)(_DWORD *, signed int))(*v2 + 256))(v2, 1); } else { v3 = this[90]; v2[102] = 0; (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 472))(&unk_9D1539); v2[102] = 0; result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 256))(v2, 0); } return result; } // AA8C68: using guessed type int dword_AA8C68; // AC9C84: using guessed type int dword_AC9C84; // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E56C: using guessed type int dword_B9E56C; // B9E570: using guessed type int dword_B9E570; // B9E574: using guessed type int dword_B9E574; // B9E578: using guessed type int dword_B9E578; // B9E57C: using guessed type int dword_B9E57C; //----- (00572560) -------------------------------------------------------- volatile LONG *__cdecl sub_572560(int a1, int a2, _DWORD *a3, int a4, int a5) { _DWORD *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x29Cu); v9 = v5; v10 = 0; if ( v5 ) v6 = sub_571D10(v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( sub_570F10((void *)v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } result = 0; } return result; } //----- (005726A0) -------------------------------------------------------- void *__thiscall sub_5726A0(void *this, char a2) { void *v2; // esi v2 = this; sub_570DC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00572750) -------------------------------------------------------- char __thiscall sub_572750(volatile LONG *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5) { volatile LONG *v5; // esi _DWORD *v6; // ecx v5 = this; (*(void (__stdcall **)(int))(**((_DWORD **)this + 97) + 472))(a5); *((_DWORD *)v5 + 86) = a2; v6 = (_DWORD *)*((_DWORD *)v5 + 93); *((_DWORD *)v5 + 88) = a4; *((_DWORD *)v5 + 87) = a3; (*(void (__stdcall **)(void *))(*v6 + 464))(&unk_9D1941); (*(void (__stdcall **)(void *))(**((_DWORD **)v5 + 94) + 464))(&unk_9D1942); (*(void (__stdcall **)(void *))(**((_DWORD **)v5 + 95) + 464))(&unk_9D1943); (*(void (__stdcall **)(void *))(**((_DWORD **)v5 + 96) + 464))(&unk_9D194A); qword_ACED80 = 0i64; return sub_8F9D50(&unk_BA6B10, v5, 0, 0, 0); } // ACED80: using guessed type __int64 qword_ACED80; //----- (005728D0) -------------------------------------------------------- int __thiscall sub_5728D0(int this, int a2, int a3) { int result; // eax int v4; // ecx result = this; switch ( *(_DWORD *)(this + 408) ) { case 1: if ( *(_DWORD *)(this + 372) ) { *(_DWORD *)(this + 408) = 4; result = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 384) + 480))(*(_DWORD *)(this + 384)); } break; case 2: v4 = *(_DWORD *)(this + 372); if ( v4 ) { *(_DWORD *)(result + 408) = 1; result = (*(int (**)(void))(*(_DWORD *)v4 + 480))(); } break; case 3: if ( *(_DWORD *)(this + 372) ) { *(_DWORD *)(this + 408) = 2; result = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 376) + 480))(*(_DWORD *)(this + 376)); } break; case 4: if ( *(_DWORD *)(this + 372) ) { *(_DWORD *)(this + 408) = 3; result = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 380) + 480))(*(_DWORD *)(this + 380)); } break; default: return result; } return result; } //----- (005729A0) -------------------------------------------------------- int __thiscall sub_5729A0(_DWORD **this, int a2) { int result; // eax if ( this[97] ) result = (*(int (__stdcall **)(int))(*this[97] + 472))(a2); return result; } //----- (005729D0) -------------------------------------------------------- int __thiscall sub_5729D0(_DWORD **this, int a2) { int result; // eax if ( this[98] ) result = (*(int (__stdcall **)(int))(*this[98] + 472))(a2); return result; } //----- (00572A80) -------------------------------------------------------- int __thiscall sub_572A80(_BYTE *this) { _BYTE *v1; // esi int result; // eax int v3; // ecx v1 = this; result = sub_8F28C0(this); v3 = *((_DWORD *)v1 + 93); if ( v3 ) { *((_DWORD *)v1 + 102) = 1; result = (*(int (**)(void))(*(_DWORD *)v3 + 480))(); } return result; } //----- (00572AB0) -------------------------------------------------------- int __thiscall sub_572AB0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int result; // eax v1 = this; v2 = this[93]; if ( v2 ) { v1[102] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 488))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[94] + 488))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[95] + 488))(1); result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v1[96] + 488))(1); } return result; } //----- (00572B30) -------------------------------------------------------- char __thiscall sub_572B30(volatile LONG *this, int a2, int a3, int a4, int a5) { volatile LONG *v5; // esi int v6; // ecx int v7; // ecx v5 = this; if ( a4 ) { v6 = *((_DWORD *)this + 92); if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 472))(a4); } if ( a5 ) { v7 = *((_DWORD *)v5 + 93); if ( v7 ) (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 472))(a5); } *((_DWORD *)v5 + 86) = a2; *((_DWORD *)v5 + 87) = a3; return sub_8F9D50(&unk_BA6B10, v5, 0, 0, 0); } //----- (00572BA0) -------------------------------------------------------- char __thiscall sub_572BA0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // ebx volatile LONG *v13; // ST38_4 int v14; // ST34_4 int v15; // ST30_4 int v16; // eax volatile LONG *v17; // ebx const CHAR *v18; // eax volatile LONG **v19; // ebx volatile LONG *v20; // ST38_4 int v21; // ST34_4 int v22; // ST30_4 int v23; // eax volatile LONG *v24; // ebx const CHAR *v25; // eax volatile LONG **v26; // eax char v27; // bl volatile LONG **v28; // eax char v29; // bl volatile LONG **v30; // eax char v31; // bl volatile LONG **v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // ebx int v35; // ST34_4 int v36; // ST30_4 int v37; // eax volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // ST38_4 int v41; // ST34_4 int v42; // ST30_4 int v43; // eax volatile LONG *v44; // edi volatile LONG v45; // ebx const CHAR *v46; // eax void (__thiscall *v47)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v48)(_DWORD, signed int); // esi int v49[5]; // [esp+4Ch] [ebp-34h] int v50; // [esp+60h] [ebp-20h] int v51; // [esp+64h] [ebp-1Ch] int v52; // [esp+68h] [ebp-18h] int v53; // [esp+6Ch] [ebp-14h] int v54; // [esp+70h] [ebp-10h] int v55; // [esp+7Ch] [ebp-4h] volatile LONG v56; // [esp+88h] [ebp+8h] volatile LONG v57; // [esp+88h] [ebp+8h] v2 = (int)this; v52 = 0; v55 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v55 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v52 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\Money.nif"); sub_8F66B0(v8, (int)&v52, v7); if ( !v52 ) return 0; v9 = sub_8FB140(v52, (int)"Plane01", (int)&v53, (int)&v54, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"MoneyWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v55 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v52, (int)"Theme", (int)&v53, (int)&v54, v10); else v11 = sub_8FB140(v52, (int)"Theme", (int)&v53, (int)&v54, 0); sub_8F3EB0(v53, v54, (int)v11, v2, 0, 0); v12 = sub_8FB140(v52, (int)"OKNor", (int)&v53, (int)&v54, v3); sub_8FB650(v12, v52, (int)"OKClick"); sub_8FB650(v12, v52, (int)"OKOver"); v13 = sub_8FE0F0(v53, v54, (int)v12, v2, 0, 0, 0); v14 = sub_421050(0); v15 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 148))(v13); v16 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 144))(v13); v17 = sub_8F4A20(0, 1, v16, v15, v14, (int)v13, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); v56 = *v17; v18 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v56 + 472))(v17, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v19 = sub_8FB140(v52, (int)"CancelNor", (int)&v53, (int)&v54, v3); sub_8FB650(v19, v52, (int)"CancelClick"); sub_8FB650(v19, v52, (int)"CancelOver"); v20 = sub_8FE0F0(v53, v54, (int)v19, v2, 1, 0, 0); v21 = sub_421050(0); v22 = (*(int (__thiscall **)(volatile LONG *))(*v20 + 148))(v20); v23 = (*(int (__thiscall **)(volatile LONG *))(*v20 + 144))(v20); v24 = sub_8F4A20(0, 1, v23, v22, v21, (int)v20, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 5); v57 = *v24; v25 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v57 + 472))(v24, v25); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); sub_456260(v49); LOBYTE(v55) = 1; sub_456000(v49, 0, 0); sub_455FF0(v49, v2); sub_456380(v49, v52); *(_DWORD *)(v2 + 356) = sub_4563D0( v49, 0, (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", v3); *(_DWORD *)(v2 + 360) = sub_4563D0( v49, 0, (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", v3); *(_DWORD *)(v2 + 364) = sub_4563D0(v49, 0, (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", v3); *(_DWORD *)(v2 + 368) = sub_4563D0(v49, 0, (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", v3); LOBYTE(v24) = sub_8F71E0(v52, (int)"MyCopperInput", &v53, &v54, &v50, &v51); v26 = sub_8FB140(v52, (int)"MyCopperInput", (int)&v53, (int)&v54, v3); sub_8F3EB0(v53, v54, (int)v26, v2, 0, 0); if ( (_BYTE)v24 ) *(_DWORD *)(v2 + 372) = sub_45A900(v53 + 2, v54 + 4, v50, v51, v2, 1342185472, 3, 3, 0, 0, 1); v27 = sub_8F71E0(v52, (int)"MySilverInput", &v53, &v54, &v50, &v51); v28 = sub_8FB140(v52, (int)"MySilverInput", (int)&v53, (int)&v54, v3); sub_8F3EB0(v53, v54, (int)v28, v2, 0, 0); if ( v27 ) *(_DWORD *)(v2 + 376) = sub_45A900(v53 + 2, v54 + 4, v50, v51, v2, 1342185472, 3, 3, 0, 0, 1); v29 = sub_8F71E0(v52, (int)"MyGoldInput", &v53, &v54, &v50, &v51); v30 = sub_8FB140(v52, (int)"MyGoldInput", (int)&v53, (int)&v54, v3); sub_8F3EB0(v53, v54, (int)v30, v2, 0, 0); if ( v29 ) *(_DWORD *)(v2 + 380) = sub_45A900(v53 + 2, v54 + 4, v50, v51, v2, 1342185472, 2, 3, 0, 0, 1); v31 = sub_8F71E0(v52, (int)"MyGemInput", &v53, &v54, &v50, &v51); v32 = sub_8FB140(v52, (int)"MyGemInput", (int)&v53, (int)&v54, v3); sub_8F3EB0(v53, v54, (int)v32, v2, 0, 0); if ( v31 ) *(_DWORD *)(v2 + 384) = sub_45A900(v53 + 2, v54 + 4, v50, v51, v2, 1342185472, 3, 3, 0, 0, 1); v33 = sub_8FB140(v52, (int)"TextBox", (int)&v53, (int)&v54, v3); v34 = sub_8F3EB0(v53, v54, (int)v33, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); v35 = sub_421050(0); v36 = (*(int (__thiscall **)(volatile LONG *))(*v34 + 148))(v34); v37 = (*(int (__thiscall **)(volatile LONG *))(*v34 + 144))(v34); v38 = sub_8F4A20(0, 1, v37, v36, v35, (int)v34, 0, 0); *(_DWORD *)(v2 + 388) = v38; (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 388) + 472))(&unk_9D192F); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); v39 = sub_8FB140(v52, (int)"TextBox01", (int)&v53, (int)&v54, v3); v40 = sub_8F3EB0(v53, v54, (int)v39, v2, 0, 0); v41 = sub_421050(0); v42 = (*(int (__thiscall **)(volatile LONG *))(*v40 + 148))(v40); v43 = (*(int (__thiscall **)(volatile LONG *))(*v40 + 144))(v40); v44 = sub_8F4A20(0, 1, v43, v42, v41, (int)v40, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); v45 = *v44; v46 = sub_40C190(996184969); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v45 + 472))(v44, v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v47 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 392) = v44; v47(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v55) = 0; sub_4562E0(v49); v55 = -1; if ( v52 ) { v48 = (void (__thiscall ***)(_DWORD, signed int))v52; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v48 ) (**v48)(v48, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00573340) -------------------------------------------------------- char __thiscall sub_573340(int this) { int v1; // esi const char *v2; // eax int v3; // edi const char *v4; // eax int v5; // ebx const char *v6; // eax int v7; // ST30_4 const char *v8; // eax int v9; // eax signed __int64 v10; // rax _DWORD *v11; // ecx char *v13; // eax v1 = this; if ( !*(_DWORD *)(this + 344) ) return sub_8F2BC0((volatile LONG *)v1, 1, 0, 0); v2 = (const char *)(*(int (**)(void))(**(_DWORD **)(this + 372) + 452))(); v3 = atoi(v2); v4 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 376) + 452))(); v5 = atoi(v4); v6 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 380) + 452))(); v7 = atoi(v6); v8 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 384) + 452))(); v9 = atoi(v8); v10 = sub_680FA0(v3, v5, v7, v9); qword_ACED80 = v10; if ( v10 >= 0 && (SHIDWORD(v10) > 0 || (_DWORD)v10) ) { HIDWORD(v10) = *(_DWORD *)(v1 + 344); v11 = (_DWORD *)(v1 + 400); *v11 = v10; v11[1] = HIDWORD(qword_ACED80); sub_8F2BC0((volatile LONG *)HIDWORD(v10), 5, *(_DWORD *)(v1 + 348), v1 + 400); return sub_8F2BC0((volatile LONG *)v1, 1, 0, 0); } v13 = (char *)sub_40C190(1001365645); return (unsigned int)sub_462C30(1, v13); } // ACED80: using guessed type __int64 qword_ACED80; //----- (00573450) -------------------------------------------------------- _DWORD *__thiscall sub_573450(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &HolyRewardMoneyWin::`vftable'; v1[58] = &HolyRewardMoneyWin::`vftable'; v1[94] = 0; v1[92] = 0; v1[93] = 0; v2 = v1[94]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[94] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D1EE0: using guessed type void *HolyRewardMoneyWin::`vftable'; // 9D1EFC: using guessed type void *HolyRewardMoneyWin::`vftable'; //----- (00573580) -------------------------------------------------------- char __thiscall sub_573580(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // ebx volatile LONG *v13; // eax int v14; // ebx int v15; // ST70_4 int v16; // ST6C_4 int v17; // ST68_4 int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // ST70_4 int v23; // ST6C_4 int v24; // ST68_4 int v25; // eax volatile LONG *v26; // ebx const CHAR *v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // eax volatile LONG *v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax int v33; // eax volatile LONG *v34; // eax char v35; // bl volatile LONG **v36; // eax int v37; // eax volatile LONG *v38; // eax char v39; // bl volatile LONG **v40; // eax int v41; // eax volatile LONG *v42; // eax char v43; // bl volatile LONG **v44; // eax int v45; // eax volatile LONG *v46; // eax volatile LONG **v47; // eax volatile LONG *v48; // ebx int v49; // ST6C_4 int v50; // ST68_4 int v51; // eax volatile LONG *v52; // eax volatile LONG **v53; // eax volatile LONG *v54; // ST70_4 int v55; // ST6C_4 int v56; // ST68_4 int v57; // eax volatile LONG *v58; // eax int v59; // edi const CHAR *v60; // eax void (__thiscall ***v61)(_DWORD, signed int); // esi int v62[5]; // [esp+8Ch] [ebp-34h] int v63; // [esp+A0h] [ebp-20h] int v64; // [esp+A4h] [ebp-1Ch] int v65; // [esp+A8h] [ebp-18h] int v66; // [esp+ACh] [ebp-14h] int v67; // [esp+B0h] [ebp-10h] int v68; // [esp+BCh] [ebp-4h] volatile LONG v69; // [esp+C8h] [ebp+8h] volatile LONG v70; // [esp+C8h] [ebp+8h] v2 = (int)this; v65 = 0; v68 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v65; v68 = -1; if ( !v65 || InterlockedDecrement((volatile LONG *)(v65 + 4)) ) return 0; v5 = v65 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\HolyPReward.nif"); sub_8F66B0(v8, (int)&v65, v7); if ( !v65 ) return 0; v9 = sub_8FB140(v65, (int)"Plane01", (int)&v66, (int)&v67, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"HolyRewardMoneyWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v65; v68 = -1; if ( !v65 || InterlockedDecrement((volatile LONG *)(v65 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v65, (int)"Theme", (int)&v66, (int)&v67, v10); else v11 = sub_8FB140(v65, (int)"Theme", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66, v67, (int)v11, v2, 0, 0); v12 = sub_8FB140(v65, (int)"OKNor", (int)&v66, (int)&v67, v3); sub_8FB650(v12, v65, (int)"OKClick"); sub_8FB650(v12, v65, (int)"OKOver"); v13 = sub_8FE0F0(v66, v67, (int)v12, v2, 0, 0, 0); sub_56FF80((_DWORD *)(v2 + 376), (int)v13); v14 = *(_DWORD *)(v2 + 376); v15 = *(_DWORD *)(v2 + 376); v16 = sub_421050(0); v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 148))(v14); v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 144))(v14); v19 = sub_8F4A20(0, 1, v18, v17, v16, v15, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); v69 = *v19; v20 = sub_40A910(-1683697169); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v69 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v65, (int)"CancelNor", (int)&v66, (int)&v67, v3); sub_8FB650(v21, v65, (int)"CancelClick"); sub_8FB650(v21, v65, (int)"CancelOver"); v22 = sub_8FE0F0(v66, v67, (int)v21, v2, 1, 0, 0); v23 = sub_421050(0); v24 = (*(int (__thiscall **)(volatile LONG *))(*v22 + 148))(v22); v25 = (*(int (__thiscall **)(volatile LONG *))(*v22 + 144))(v22); v26 = sub_8F4A20(0, 1, v25, v24, v23, (int)v22, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v70 = *v26; v27 = sub_40A910(-230998988); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v70 + 472))(v26, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); sub_456260(v62); LOBYTE(v68) = 1; sub_456000(v62, 0, 0); sub_455FF0(v62, v2); sub_456380(v62, v65); v28 = sub_4563D0(v62, 0, (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", v3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v29 = sub_4563D0(v62, 0, (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", v3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); v30 = sub_4563D0(v62, 0, (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", v3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); v31 = sub_4563D0(v62, 0, (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", v3); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); LOBYTE(v26) = sub_8F71E0(v65, (int)"MyCopperInput", &v66, &v67, &v63, &v64); v32 = sub_8FB140(v65, (int)"MyCopperInput", (int)&v66, (int)&v67, v3); sub_8F3EB0(v66, v67, (int)v32, v2, 0, 0); if ( (_BYTE)v26 ) { v33 = sub_421050(0); v34 = sub_8F4A20(v66 + 2, v67 + 4, v63, v64, v33, v2, 0, 0); *(_DWORD *)(v2 + 352) = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 472))(&unk_9D194B); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); } v35 = sub_8F71E0(v65, (int)"MySilverInput", &v66, &v67, &v63, &v64); v36 = sub_8FB140(v65, (int)"MySilverInput", (int)&v66, (int)&v67, v3); sub_8F3EB0(v66, v67, (int)v36, v2, 0, 0); if ( v35 ) { v37 = sub_421050(0); v38 = sub_8F4A20(v66 + 2, v67 + 4, v63, v64, v37, v2, 0, 0); *(_DWORD *)(v2 + 356) = v38; (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 356) + 472))(&unk_9D1952); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); } v39 = sub_8F71E0(v65, (int)"MyGoldInput", &v66, &v67, &v63, &v64); v40 = sub_8FB140(v65, (int)"MyGoldInput", (int)&v66, (int)&v67, v3); sub_8F3EB0(v66, v67, (int)v40, v2, 0, 0); if ( v39 ) { v41 = sub_421050(0); v42 = sub_8F4A20(v66 + 2, v67 + 4, v63, v64, v41, v2, 0, 0); *(_DWORD *)(v2 + 360) = v42; (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 360) + 472))(&unk_9D1953); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); } v43 = sub_8F71E0(v65, (int)"MyGemInput", &v66, &v67, &v63, &v64); v44 = sub_8FB140(v65, (int)"MyGemInput", (int)&v66, (int)&v67, v3); sub_8F3EB0(v66, v67, (int)v44, v2, 0, 0); if ( v43 ) { v45 = sub_421050(0); v46 = sub_8F4A20(v66 + 2, v67 + 4, v63, v64, v45, v2, 0, 0); *(_DWORD *)(v2 + 364) = v46; (*(void (__thiscall **)(volatile LONG *, signed int))(*v46 + 488))(v46, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 364) + 472))(&unk_9D195A); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); } v47 = sub_8FB140(v65, (int)"TextBox01", (int)&v66, (int)&v67, v3); v48 = sub_8F3EB0(v66, v67, (int)v47, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); v49 = sub_421050(0); v50 = (*(int (__thiscall **)(volatile LONG *))(*v48 + 148))(v48); v51 = (*(int (__thiscall **)(volatile LONG *))(*v48 + 144))(v48); v52 = sub_8F4A20(0, 1, v51, v50, v49, (int)v48, 0, 0); *(_DWORD *)(v2 + 368) = v52; (*(void (__thiscall **)(volatile LONG *, signed int))(*v52 + 488))(v52, 4); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 368) + 472))(&unk_9D195B); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); v53 = sub_8FB140(v65, (int)"TextBox02", (int)&v66, (int)&v67, v3); v54 = sub_8F3EB0(v66, v67, (int)v53, v2, 0, 0); v55 = sub_421050(0); v56 = (*(int (__thiscall **)(volatile LONG *))(*v54 + 148))(v54); v57 = (*(int (__thiscall **)(volatile LONG *))(*v54 + 144))(v54); v58 = sub_8F4A20(0, 1, v57, v56, v55, (int)v54, 0, 0); *(_DWORD *)(v2 + 372) = v58; (*(void (__thiscall **)(volatile LONG *, signed int))(*v58 + 488))(v58, 4); v59 = **(_DWORD **)(v2 + 372); v60 = sub_40C190(996184969); (*(void (__thiscall **)(_DWORD, const CHAR *))(v59 + 472))(*(_DWORD *)(v2 + 372), v60); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v68) = 0; sub_4562E0(v62); v68 = -1; if ( v65 ) { v61 = (void (__thiscall ***)(_DWORD, signed int))v65; if ( !InterlockedDecrement((volatile LONG *)(v65 + 4)) ) { if ( v61 ) (**v61)(v61, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00573E60) -------------------------------------------------------- char __thiscall sub_573E60(int this, int a2, int a3) { volatile LONG *v3; // esi char result; // al v3 = (volatile LONG *)this; if ( !a2 ) return sub_573340(this); result = a2 - 1; if ( a2 == 1 ) { sub_8F2BC0(*(volatile LONG **)(this + 344), 5, *(_DWORD *)(this + 352), 0); result = sub_8F2BC0(v3, 1, 0, 0); } return result; } //----- (00573EB0) -------------------------------------------------------- char __thiscall sub_573EB0(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00573F10) -------------------------------------------------------- char __thiscall sub_573F10(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi char result; // al _DWORD *v5; // edi const CHAR *v6; // eax v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { v5 = (_DWORD *)*((_DWORD *)this + 74); v6 = sub_40A910(1084773722); sub_492060(v5, (int)v6); result = sub_8F2BC0(v3, 1, 0, 0); } } else { sub_4BD990(*((_DWORD **)this + 74)); result = sub_8F2BC0(v3, 1, 0, 0); } return result; } //----- (00573F70) -------------------------------------------------------- char __thiscall sub_573F70(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00573FD0) -------------------------------------------------------- int __cdecl sub_573FD0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MoneyWin::`vftable'; *(_DWORD *)(v2 + 232) = &MoneyWin::`vftable'; *(_DWORD *)(v2 + 408) = 0; *(_DWORD *)(v2 + 388) = 0; *(_DWORD *)(v2 + 392) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D1CA0: using guessed type void *MoneyWin::`vftable'; // 9D1CBC: using guessed type void *MoneyWin::`vftable'; //----- (00574120) -------------------------------------------------------- volatile LONG *__cdecl sub_574120(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_573450(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00574250) -------------------------------------------------------- void *__thiscall sub_574250(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MoneyWin::`vftable'; *((_DWORD *)this + 58) = &MoneyWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D1CA0: using guessed type void *MoneyWin::`vftable'; // 9D1CBC: using guessed type void *MoneyWin::`vftable'; //----- (00574290) -------------------------------------------------------- _DWORD *__thiscall sub_574290(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &HolyRewardMoneyWin::`vftable'; *((_DWORD *)this + 58) = &HolyRewardMoneyWin::`vftable'; v3 = *((_DWORD *)this + 94); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D1EE0: using guessed type void *HolyRewardMoneyWin::`vftable'; // 9D1EFC: using guessed type void *HolyRewardMoneyWin::`vftable'; //----- (00574370) -------------------------------------------------------- void __stdcall sub_574370(int a1, int a2) { int v2; // eax if ( !a1 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) (*(void (__thiscall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)v2 + 56))(v2, 103, 0, 0); } } //----- (005743A0) -------------------------------------------------------- char __thiscall sub_5743A0(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax int v9; // ST08_4 volatile LONG **v10; // eax int v11; // ebx volatile LONG **v12; // edi void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // [esp+18h] [ebp-18h] int v15; // [esp+1Ch] [ebp-14h] int v16; // [esp+20h] [ebp-10h] int v17; // [esp+2Ch] [ebp-4h] int v18; // [esp+38h] [ebp+8h] v2 = (int)this; v16 = 0; v3 = dword_BA6BA0; v17 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\RunButton.nif"); sub_8F66B0(v4, (int)&v16, v3); v5 = v16; if ( !v16 ) { if ( off_AC0554 ) { off_AC0554("Game\\RunButton.nif load fail", "LoadFail", 0); v5 = v16; } v17 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v9 = v16; *(_DWORD *)(v2 + 296) = a2; v10 = sub_8FB140(v9, (int)"Panel01", (int)&v14, (int)&v15, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, a2, (int)"MoveModeWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v16; v17 = -1; if ( !v16 ) return 0; v7 = (volatile LONG *)(v16 + 4); LABEL_8: if ( !InterlockedDecrement(v7) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v11 = v14; v18 = v15; v12 = sub_8FB140(v16, (int)"BtnNormal", (int)&v14, (int)&v15, 0); sub_8FB650(v12, v16, (int)"BtnClick"); sub_8FB650(v12, v16, (int)"BtnOver"); sub_8FE0F0(v14 - v11, v15 - v18, (int)v12, v2, 0, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.63999999, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v17 = -1; if ( v16 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } return 1; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (005745A0) -------------------------------------------------------- int __cdecl sub_5745A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MoveModeWin::`vftable'; *(_DWORD *)(v2 + 232) = &MoveModeWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D2194: using guessed type void *MoveModeWin::`vftable'; // 9D21B4: using guessed type void *MoveModeWin::`vftable'; //----- (005746E0) -------------------------------------------------------- void *__thiscall sub_5746E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MoveModeWin::`vftable'; *((_DWORD *)this + 58) = &MoveModeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D2194: using guessed type void *MoveModeWin::`vftable'; // 9D21B4: using guessed type void *MoveModeWin::`vftable'; //----- (005747C0) -------------------------------------------------------- char __thiscall sub_5747C0(_DWORD *this, int a2, int a3) { unsigned int v3; // eax _DWORD *v4; // edi _DWORD **v5; // esi LOBYTE(v3) = a2 - 1; v4 = this; if ( a2 == 1 ) { v5 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = sub_680890((unsigned __int8 *)byte_AD9238); if ( v3 >= v4[93] ) { if ( !v5 ) return v3; LOBYTE(v3) = (unsigned int)sub_4A6BA0(v5); } if ( v5 ) { sub_4A53B0(v5); LOBYTE(v3) = sub_4BF2F0(v5, 0); } } return v3; } //----- (00574820) -------------------------------------------------------- void __thiscall sub_574820(int this, float a2) { int v2; // esi _BYTE *v3; // ecx v2 = this; if ( *(_BYTE *)(this + 348) && *(_DWORD *)(this + 372) == sub_680890((unsigned __int8 *)byte_AD9238) ) { sub_6BA650(&dword_AB6520, 46); sub_6B0B40(*(float **)(v2 + 344), (_DWORD *)v2); *(_BYTE *)(v2 + 348) = 0; } v3 = *(_BYTE **)(v2 + 344); if ( v3[64] ) sub_6B0C00(v3, a2); } //----- (00574880) -------------------------------------------------------- char __thiscall sub_574880(volatile LONG **this, void *a2) { volatile LONG **v2; // edi volatile LONG *v3; // esi char result; // al char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG **v8; // esi volatile LONG **v9; // esi volatile LONG *v10; // eax volatile LONG **v11; // esi volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax int v15; // esi char *v16; // eax float *v17; // esi int v18; // eax float *v19; // eax void (__thiscall *v20)(volatile LONG **, int, int, _DWORD, _DWORD); // edx int v21; // [esp+24h] [ebp-20h] int v22; // [esp+28h] [ebp-1Ch] int v23; // [esp+2Ch] [ebp-18h] int v24; // [esp+30h] [ebp-14h] int v25; // [esp+34h] [ebp-10h] int v26; // [esp+40h] [ebp-4h] v2 = this; v25 = 0; v26 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v26 = -1; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); } return 0; } v21 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\MysteryVault.nif"); sub_8F66B0(v5, (int)&v25, v21); if ( !v25 ) return 0; v6 = sub_8FB140(v25, (int)"Plane01", (int)&v23, (int)&v24, v3); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, (int)a2, (int)"MysteryVaultWin", 0) ) { v8 = sub_8FB140(v25, (int)"Btn01_Nor", (int)&v23, (int)&v24, 0); sub_8FB650(v8, v25, (int)"Btn01_Click"); sub_8FB650(v8, v25, (int)"Btn01_Over"); v2[89] = sub_8FE0F0(v23, v24, (int)v8, (int)v2, 1, 0, 0); v9 = sub_8FB140(v25, (int)"Num00", (int)&v23, (int)&v24, 0); sub_8FB650(v9, v25, (int)"Num01"); sub_8FB650(v9, v25, (int)"Num02"); sub_8FB650(v9, v25, (int)"Num03"); sub_8FB650(v9, v25, (int)"Num04"); sub_8FB650(v9, v25, (int)"Num05"); sub_8FB650(v9, v25, (int)"Num06"); sub_8FB650(v9, v25, (int)"Num07"); sub_8FB650(v9, v25, (int)"Num08"); sub_8FB650(v9, v25, (int)"Num09"); v10 = sub_8F3EB0(v23, v24, (int)v9, (int)v2, 0, 0); v2[91] = v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_8FB140(v25, (int)"Num10", (int)&v23, (int)&v24, 0); sub_8FB650(v11, v25, (int)"Num20"); sub_8FB650(v11, v25, (int)"Num30"); sub_8FB650(v11, v25, (int)"Num40"); sub_8FB650(v11, v25, (int)"Num50"); sub_8FB650(v11, v25, (int)"Num60"); sub_8FB650(v11, v25, (int)"Num70"); sub_8FB650(v11, v25, (int)"Num80"); sub_8FB650(v11, v25, (int)"Num90"); v12 = sub_8F3EB0(v23, v24, (int)v11, (int)v2, 0, 0); v2[90] = v12; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = sub_8FB140(v25, (int)"Plane02", (int)&v23, (int)&v24, 0); v14 = sub_8F3EB0(v23, v24, (int)v13, (int)v2, 0, 0); v2[92] = v14; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v22 = 0; v15 = dword_BA6BA0; LOBYTE(v26) = 1; if ( !byte_ACAD5C ) sub_420410(); v16 = (char *)sub_401410(byte_ACAB50, "Game\\MysteryVaultEffect.nif"); sub_8F66B0(v16, (int)&v22, v15); if ( v22 ) { v17 = (float *)operator new(0x44u); LOBYTE(v26) = 2; if ( v17 ) { v18 = sub_85BD60((void *)v22); v19 = sub_6B0A90(v17, v18); } else { v19 = 0; } v20 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD, _DWORD))*((_DWORD *)*v2 + 59); v2[86] = (volatile LONG *)v19; LOBYTE(v26) = 1; v20(v2, xRight, dword_AC2F78, 0.95300001, 0.66000003); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 130))(v2, 0); LOBYTE(v26) = 0; sub_410C00(&v22); v26 = -1; sub_410C00(&v25); result = 1; } else { LOBYTE(v26) = 0; sub_410C00(&v22); v26 = -1; sub_410C00(&v25); result = 0; } } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v25; v26 = -1; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00574CF0) -------------------------------------------------------- LONG __thiscall sub_574CF0(_DWORD *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi v1 = this; *this = &MysteryVaultWin::`vftable'; this[58] = &MysteryVaultWin::`vftable'; v2 = (int *)this[86]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); } return sub_8F10F0(v1); } // 9D24E8: using guessed type void *MysteryVaultWin::`vftable'; // 9D2504: using guessed type void *MysteryVaultWin::`vftable'; //----- (00574DB0) -------------------------------------------------------- void __thiscall sub_574DB0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *v3; // edi int *v4; // ecx unsigned int v5; // edx int v6; // eax int v7; // eax _DWORD **v8; // esi const CHAR *v9; // eax char v10; // [esp+4h] [ebp-10h] v3 = this; if ( this[91] ) { if ( this[92] ) { v4 = (int *)this[90]; if ( v4 ) { if ( v3[89] ) { if ( a2 >= a3 ) { if ( a2 == a3 ) { v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) { v8 = *(_DWORD ***)(v7 + 1148); if ( v8 ) { sub_4B1B10((float *)&v10, 1u); sub_5DE450(v8); v9 = sub_40A910(827013177); sub_5DE410(v8, (int)v9); } } *((_BYTE *)v3 + 348) = 1; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[90] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[91] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[92] + 256))(0); v3[93] = a3; } else { v5 = (signed int)(a3 - a2) / 10 - 1; v6 = *v4; if ( v5 > 8 ) { (*(void (__stdcall **)(_DWORD))(v6 + 256))(0); } else { (*(void (__stdcall **)(unsigned int))(v6 + 492))(v5); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[90] + 256))(1); } (*(void (__stdcall **)(int))(*(_DWORD *)v3[91] + 492))((signed int)(a3 - a2) % 10); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[91] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[92] + 256))(1); v3[93] = a3; } } } } } } //----- (00574F20) -------------------------------------------------------- int __cdecl sub_574F20(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x178u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MysteryVaultWin::`vftable'; *(_DWORD *)(v2 + 232) = &MysteryVaultWin::`vftable'; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; *(_DWORD *)(v2 + 368) = 0; *(_BYTE *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D24E8: using guessed type void *MysteryVaultWin::`vftable'; // 9D2504: using guessed type void *MysteryVaultWin::`vftable'; //----- (00575080) -------------------------------------------------------- void *__thiscall sub_575080(void *this, char a2) { void *v2; // esi v2 = this; sub_574CF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005750B0) -------------------------------------------------------- LONG __thiscall sub_5750B0(_DWORD *this) { *this = &ItemShopInvWin::`vftable'; this[58] = &ItemShopInvWin::`vftable'; return sub_5D5650(this); } // 9D2914: using guessed type void *ItemShopInvWin::`vftable'; // 9D2934: using guessed type void *ItemShopInvWin::`vftable'; //----- (005750D0) -------------------------------------------------------- int __thiscall sub_5750D0(_DWORD *this) { return this[112]; } //----- (005750E0) -------------------------------------------------------- int *__userpurge sub_5750E0@(int a1@, int a2@, int a3) { int v3; // esi int *result; // eax v3 = a1; result = sub_5D6220(a1, a2, a3, a3); *(_DWORD *)(v3 + 448) = a3; return result; } //----- (00575100) -------------------------------------------------------- int __thiscall sub_575100(_DWORD *this) { return this[113]; } //----- (00575110) -------------------------------------------------------- char __thiscall sub_575110(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[114] = a4; result = 1; } return result; } //----- (00575150) -------------------------------------------------------- int __thiscall sub_575150(_DWORD *this) { int v1; // esi _DWORD **v2; // ecx int result; // eax unsigned __int16 **v4; // edx v1 = (int)this; v2 = (_DWORD **)this[68]; result = *(_DWORD *)(v1 + 448); v4 = *(unsigned __int16 ***)(v1 + 452); if ( v2 ) { if ( result ) { sub_548670(v2, result); result = sub_8F2F90(v1); } else if ( v4 ) { sub_547CE0(v2, *v4); result = sub_8F2F90(v1); } } return result; } //----- (005751E0) -------------------------------------------------------- char sub_5751E0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCWTitle"); return (char)v0; } //----- (00575210) -------------------------------------------------------- void **__usercall sub_575210@(void **a1@, int a2@, int a3@) { void **v3; // esi v3 = a1; sub_5D6D00(a1); *v3 = &ItemShopInvWin::`vftable'; v3[58] = &ItemShopInvWin::`vftable'; v3[114] = (void *)-1; sub_5D6220((int)v3, a2, a3, 0); v3[112] = 0; v3[113] = 0; return v3; } // 9D2914: using guessed type void *ItemShopInvWin::`vftable'; // 9D2934: using guessed type void *ItemShopInvWin::`vftable'; //----- (00575290) -------------------------------------------------------- int __thiscall sub_575290(int *this, int a2) { int *v2; // esi int v3; // eax int result; // eax int v5; // edi int v6; // ebx int v7; // ST04_4 int v8; // eax unsigned int v9; // eax char *v10; // eax v2 = this; if ( a2 && *(_DWORD *)a2 && (v3 = *(unsigned __int16 *)(*(_DWORD *)a2 + 8), (_WORD)v3 != -1) ) { result = sub_53D9E0(v3); v5 = result; if ( result ) { v6 = *v2; v7 = *(_DWORD *)(result + 34); v8 = sub_42BF30(result + 38); (*(void (__thiscall **)(int *, int, int, signed int, signed int))(v6 + 584))(v2, v8, v7, 32, 32); sub_5D58F0((int)v2, (_BYTE *)(v5 + 74), *(_DWORD *)(v5 + 70), 0x20u, 32); (*(void (__thiscall **)(int *, signed int))(*v2 + 256))(v2, 1); (*(void (__thiscall **)(int *, signed int))(*v2 + 240))(v2, 1); v9 = (*(int (**)(void))(**(_DWORD **)a2 + 12))(); if ( v9 <= 1 ) { result = sub_43E710((_DWORD **)v2, (int)&unk_9D2727); } else { v10 = sub_7549E0("%d", v9); result = sub_43E710((_DWORD **)v2, (int)v10); } } } else { (*(void (__thiscall **)(int *, _DWORD, signed int, signed int, signed int))(*this + 584))(this, 0, -1, 32, 32); sub_5D58F0((int)v2, 0, 0xFFFFFFFF, 0x20u, 32); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 256))(v2, 0); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 240))(v2, 0); (*(void (__stdcall **)(void *))(*(_DWORD *)v2[95] + 472))(&unk_9D2728); result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 256))(1); } return result; } //----- (005753D0) -------------------------------------------------------- int __thiscall sub_5753D0(int *this, int a2) { int *v2; // esi int result; // eax v2 = this; result = sub_575290(this, a2); v2[113] = a2; return result; } //----- (005753F0) -------------------------------------------------------- void __thiscall sub_5753F0(_DWORD *this, int a2) { int v2; // eax if ( !byte_BA6A64 ) { v2 = *(_DWORD *)(this[a2 + 96] + 448); if ( v2 ) { this[144] = 5; this[146] = 2; this[147] = v2; this[140] = this; dword_BA6BCC = (int)(this + 138); } } } // BA6A64: using guessed type char byte_BA6A64; // BA6BCC: using guessed type int dword_BA6BCC; //----- (00575440) -------------------------------------------------------- int __thiscall sub_575440(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // esi unsigned int v5; // edi unsigned int v6; // ebx unsigned int v7; // edi unsigned int v8; // ebx result = a2; v4 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { v5 = 0; v6 = (this[166] - this[165]) >> 2; if ( v6 ) { do result = (*(int (__stdcall **)(int))(**(_DWORD **)(v4[165] + 4 * v5++) + 256))(a3); while ( v5 < v6 ); } } } else { v7 = 0; v8 = (this[162] - this[161]) >> 2; if ( v8 ) { do result = (*(int (__stdcall **)(int))(**(_DWORD **)(v4[161] + 4 * v7++) + 256))(a3); while ( v7 < v8 ); } } return result; } //----- (005754E0) -------------------------------------------------------- int __thiscall sub_5754E0(int *this) { int *v1; // edi int v2; // ebx int v3; // esi int v4; // esi int result; // eax v1 = this + 96; if ( this[96] ) { v2 = 42; do { v3 = *v1; sub_5D6220(*v1, v2, (int)v1, 0); *(_DWORD *)(v3 + 448) = 0; v4 = *v1; (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int))(*(_DWORD *)*v1 + 584))( *v1, 0, -1, 32, 32); sub_5D58F0(v4, 0, 0xFFFFFFFF, 0x20u, 32); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v4 + 380) + 472))(&unk_9D2728); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v4 + 380) + 256))(1); ++v1; --v2; *(_DWORD *)(v4 + 452) = 0; } while ( v2 ); } return result; } //----- (005755F0) -------------------------------------------------------- unsigned int __thiscall sub_5755F0(_DWORD *this) { int v1; // eax int v2; // ecx int (__thiscall **v3)(void *, char); // eax int v4; // ecx v1 = this[169]; if ( v1 == 3 ) { v4 = this[170] - 2; if ( v4 ) { if ( v4 != 1 ) return 1; v3 = (int (__thiscall **)(void *, char))sub_6310D0(); goto LABEL_11; } LABEL_10: v3 = sub_631550()[3]; goto LABEL_11; } if ( v1 != 14 ) goto LABEL_10; v2 = this[170]; if ( v2 ) { if ( v2 == 1 ) { v3 = (int (__thiscall **)(void *, char))sub_631000(); goto LABEL_11; } return 1; } v3 = (int (__thiscall **)(void *, char))sub_631030(); LABEL_11: if ( !v3 ) return 1; return ((unsigned int)v3 - 1) / 0x2A + 1; } //----- (00575660) -------------------------------------------------------- char *__thiscall sub_575660(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ebx int v4; // eax unsigned int v5; // edi _DWORD **v6; // esi unsigned int v8; // [esp+Ch] [ebp-8h] _DWORD *v9; // [esp+10h] [ebp-4h] int v10; // [esp+1Ch] [ebp+8h] v2 = this; v9 = this; v3 = sub_6313C0(a2); v4 = sub_6310D0(); v5 = 0; v8 = v4 - v3; if ( v4 != v3 ) { v10 = (int)&v2[v3 + 97]; do { if ( v2[170] == 3 ) { if ( v5 + v3 == 41 ) { v6 = (_DWORD **)v2[v5 + 96 + v3]; ((void (__thiscall *)(_DWORD **, _DWORD, signed int, signed int, signed int))(*v6)[146])(v6, 0, -1, 32, 32); sub_5D58F0((int)v6, 0, 0xFFFFFFFF, 0x20u, 32); ((void (__thiscall *)(_DWORD **, _DWORD))(*v6)[64])(v6, 0); ((void (__thiscall *)(_DWORD **, _DWORD))(*v6)[60])(v6, 0); (*(void (__stdcall **)(void *))(*v6[95] + 472))(&unk_9D2728); (*(void (__stdcall **)(signed int))(*v6[95] + 256))(1); v2 = v9; } else { sub_575290((int *)v2[v5 + 96 + v3], *(_DWORD *)(*(_DWORD *)v10 + 452)); } } v10 += 4; ++v5; } while ( v5 < v8 ); } return sub_631320((char *)v3); } //----- (00575770) -------------------------------------------------------- int *__thiscall sub_575770(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // ebx int *result; // eax int *v6; // edi int *v7; // esi v2 = this; v3 = sub_6310D0(); v4 = v3; result = *(int **)(v2[v3 + 96] + 452); if ( !result || !*result ) { result = sub_631370(a2); v6 = result; if ( v2[170] == 3 ) { v7 = (int *)v2[v4 + 96]; result = (int *)sub_575290(v7, (int)result); v7[113] = (int)v6; } } return result; } //----- (005757D0) -------------------------------------------------------- void __thiscall sub_5757D0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax bool v4; // zf int v5; // ebx int v6; // eax int v7; // edx int v8; // eax float *v9; // [esp-4h] [ebp-38h] float v10; // [esp+10h] [ebp-24h] float v11; // [esp+14h] [ebp-20h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float **v14; // [esp+20h] [ebp-14h] int v15; // [esp+24h] [ebp-10h] int v16; // [esp+30h] [ebp-4h] v2 = this; v3 = sub_6310D0(); if ( v2[86] == 3 ) { v2[89] = v3; return; } if ( v3 == v2[89] ) { v4 = v3 == 0; } else { v4 = v3 == 0; if ( v3 > 0 ) { *((_BYTE *)v2 + 352) = 1; v2[89] = v3; goto LABEL_9; } } if ( v4 ) v2[89] = 0; LABEL_9: if ( !*((_BYTE *)v2 + 352) ) return; v15 = 0; v16 = 0; sub_455570(v2 + 90, v2[94], &v15); v5 = v15; if ( !v15 ) { v6 = v2[87]; if ( !v6 ) { v16 = -1; sub_410C00(&v15); return; } v7 = v2[93]; v10 = 255.0; v9 = &v10; v11 = 250.0; v2[94] = v7; v12 = 205.0; v13 = 255.0; v8 = sub_455D00(v6, (int)v9); v14 = &v9; v9 = (float *)v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); sub_6688B0(v2 + 90, v2[94], (int)v9); } v16 = -1; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } //----- (00575940) -------------------------------------------------------- char __thiscall sub_575940(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[114]); return (char)v2; } //----- (00575970) -------------------------------------------------------- char __thiscall sub_575970(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[114]); return (char)v2; } //----- (005759A0) -------------------------------------------------------- int __thiscall sub_5759A0(_DWORD **this) { _DWORD *v1; // esi int result; // eax unsigned int v3; // ebx unsigned int v4; // edi unsigned int v5; // edi unsigned int v6; // ebx v1 = this; result = sub_4A6FD0(this[74]); v3 = 0; v4 = (v1[162] - v1[161]) >> 2; if ( v4 ) { do result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v1[161] + 4 * v3++) + 256))(0); while ( v3 < v4 ); } v5 = 0; v6 = (v1[166] - v1[165]) >> 2; if ( v6 ) { do result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v1[165] + 4 * v5++) + 256))(0); while ( v5 < v6 ); } return result; } //----- (00575A70) -------------------------------------------------------- int (__thiscall ***__thiscall sub_575A70(int *this))(void *, char) { int *v1; // ebx int v2; // edi int (__thiscall ***result)(void *, char); // eax int (__thiscall **v4)(void *, char); // esi int v5; // edi int v6; // ebx int *v7; // esi int v8; // edi unsigned int v9; // eax char *v10; // eax int *v11; // [esp+Ch] [ebp-Ch] int *v12; // [esp+10h] [ebp-8h] signed int v13; // [esp+14h] [ebp-4h] v1 = this; v11 = this; sub_5754E0(this); v2 = 42 * v1[86]; result = sub_631550(); v4 = result[1]; if ( v2 ) { while ( 1 ) { --v2; if ( !v4 ) break; v4 = (int (__thiscall **)(void *, char))*v4; if ( !v2 ) goto LABEL_4; } } else { LABEL_4: if ( v4 ) { v13 = 0; v12 = v1 + 96; do { if ( v13 >= 42 ) break; v5 = (int)v4[2]; v6 = *v12; v4 = (int (__thiscall **)(void *, char))*v4; sub_5D6220(v6, v6, v5, v5); ++v13; ++v12; *(_DWORD *)(v6 + 448) = v5; v1 = v11; } while ( v4 ); result = (int (__thiscall ***)(void *, char))(*(int (__thiscall **)(int *))(*v1 + 260))(v1); if ( (_BYTE)result ) { v7 = (int *)v1[171]; v8 = *v7; v9 = sub_5755F0(v1); v10 = sub_7549E0("%d / %d", v1[86] + 1, v9); result = (int (__thiscall ***)(void *, char))(*(int (__thiscall **)(int *, char *))(v8 + 472))(v7, v10); } } } return result; } //----- (00575B40) -------------------------------------------------------- int __thiscall sub_575B40(_BYTE *this) { _DWORD **v1; // esi int result; // eax int v3; // edi unsigned int v4; // eax char *v5; // eax v1 = (_DWORD **)this; sub_8F28C0(this); result = ((int (__thiscall *)(_DWORD **))(*v1)[65])(v1); if ( (_BYTE)result ) { v3 = *v1[171]; v4 = sub_5755F0(v1); v5 = sub_7549E0("%d / %d", (char *)v1[86] + 1, v4); result = (*(int (__thiscall **)(_DWORD *, char *))(v3 + 472))(v1[171], v5); } return result; } //----- (00575B90) -------------------------------------------------------- int __usercall sub_575B90@(int a1@, int a2, int a3, int a4, int a5) { void *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x1CCu); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_5D6D00((void **)v5); LOBYTE(v10) = 1; *(_DWORD *)v6 = &ItemShopInvWin::`vftable'; *(_DWORD *)(v6 + 232) = &ItemShopInvWin::`vftable'; *(_DWORD *)(v6 + 456) = -1; sub_5D6220(v6, a1, 0, 0); *(_DWORD *)(v6 + 448) = 0; *(_DWORD *)(v6 + 452) = 0; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 2; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v6 + 616))(v6, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9D2914: using guessed type void *ItemShopInvWin::`vftable'; // 9D2934: using guessed type void *ItemShopInvWin::`vftable'; //----- (00575D00) -------------------------------------------------------- _DWORD *__thiscall sub_575D00(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &NPCItemWin::`vftable'; v1[58] = &NPCItemWin::`vftable'; v1[91] = 37; v1[90] = &NiTMapBase>,int,NiPointer>::`vftable'; v1[93] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[91]; v1[92] = v2; memset(v2, 0, v3); v1[90] = &NiTMap>::`vftable'; v1[138] = &PgWinDrop::`vftable'; v1[140] = 0; v1[142] = &DropContents::`vftable'; v1[158] = 0; *((_WORD *)v1 + 314) = -1; v1[161] = 0; v1[162] = 0; v1[163] = 0; v1[165] = 0; v1[166] = 0; v1[167] = 0; v1[139] = v1 + 142; v1[86] = 0; v1[95] = 0; memset(v1 + 96, 0, 0xA8u); v1[170] = 0; v1[169] = 0; v1[171] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9D2BA4: using guessed type void *NPCItemWin::`vftable'; // 9D2BC4: using guessed type void *NPCItemWin::`vftable'; //----- (00575E40) -------------------------------------------------------- LONG __thiscall sub_575E40(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax _DWORD *v3; // ST14_4 v1 = this; *this = &NPCItemWin::`vftable'; this[58] = &NPCItemWin::`vftable'; v2 = (void *)this[165]; if ( v2 ) operator delete(v2); v1[165] = 0; v1[166] = 0; v1[167] = 0; if ( v1[161] ) operator delete((void *)v1[161]); v1[161] = 0; v1[162] = 0; v1[163] = 0; v1[142] = &DropContents::`vftable'; v1[138] = &PgWinDrop::`vftable'; v3 = v1 + 90; *v3 = &NiTMap>::`vftable'; sub_940360(v1 + 90); *v3 = &NiTMapBase>,int,NiPointer>::`vftable'; sub_940360(v1 + 90); operator delete[]((void *)v1[92]); return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9B1D9C: using guessed type void *NiTMapBase>,int,NiPointer>::`vftable'; // 9B1DDC: using guessed type void *NiTMap>::`vftable'; // 9D2BA4: using guessed type void *NPCItemWin::`vftable'; // 9D2BC4: using guessed type void *NPCItemWin::`vftable'; //----- (00575F40) -------------------------------------------------------- volatile LONG *__cdecl sub_575F40(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2B0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_575D00(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00576070) -------------------------------------------------------- int *__thiscall sub_576070(int *this) { int *v1; // esi unsigned int v2; // ebx unsigned int v3; // edi unsigned int v4; // edi unsigned int v5; // ebx int v6; // eax int *v7; // ecx int v8; // eax int *result; // eax unsigned int v10; // edi char *v11; // eax int v12; // ebx char *v13; // esi unsigned int v14; // edi char *v15; // eax int v16; // ebx char *v17; // esi unsigned int v18; // edi unsigned int v19; // ebx int v20; // edi int v21; // eax void *v22; // ebx int v23; // ST04_4 unsigned int v24; // edi int *v25; // esi int *v26; // ebx char v27; // [esp+10h] [ebp-20h] char v28; // [esp+14h] [ebp-1Ch] unsigned int v29; // [esp+18h] [ebp-18h] int *v30; // [esp+1Ch] [ebp-14h] unsigned int v31; // [esp+20h] [ebp-10h] int v32; // [esp+2Ch] [ebp-4h] v1 = this; sub_5754E0(this); v2 = 0; v3 = (v1[166] - v1[165]) >> 2; v29 = 42 * v1[86]; if ( v3 ) { do (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1[165] + 4 * v2++) + 256))(0); while ( v2 < v3 ); } v4 = 0; v5 = (v1[162] - v1[161]) >> 2; if ( v5 ) { do (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1[161] + 4 * v4++) + 256))(0); while ( v4 < v5 ); } v6 = v1[169]; if ( v6 != 3 ) { v7 = v1; if ( v6 == 14 ) { sub_575440(v1, 0, 1); v8 = v1[170]; if ( v8 ) { result = (int *)(v8 - 1); if ( !result ) { result = (int *)sub_631000(); v10 = v29; v31 = (unsigned int)result; if ( v29 < (unsigned int)result ) { v30 = v1 + 96; do { v11 = sub_630FE0(v10); v12 = *v30; v13 = v11; result = sub_5D6220(v12, v12, v10, (int)v11); ++v30; ++v10; *(_DWORD *)(v12 + 448) = v13; } while ( v10 < v31 ); } } } else { result = (int *)sub_631030(); v14 = v29; v31 = (unsigned int)result; if ( v29 < (unsigned int)result ) { v30 = v1 + 96; do { v15 = sub_631010(v14); v16 = *v30; v17 = v15; result = sub_5D6220(v16, v16, v14, (int)v15); ++v30; ++v14; *(_DWORD *)(v16 + 448) = v17; } while ( v14 < v31 ); } } return result; } return (int *)sub_575A70(v7); } v18 = 0; v19 = (v1[166] - v1[165]) >> 2; if ( v19 ) { do (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1[165] + 4 * v18++) + 256))(1); while ( v18 < v19 ); } if ( v1[170] == 2 ) { v7 = v1; return (int *)sub_575A70(v7); } result = (int *)(v1[170] - 3); if ( v1[170] == 3 ) { if ( *((_BYTE *)v1 + 352) ) { v30 = 0; v32 = 0; sub_455570(v1 + 90, v1[94], (int *)&v30); v20 = (int)v30; if ( v30 ) { v21 = sub_402BF0(v30); v22 = (void *)v21; v31 = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); LOBYTE(v32) = 1; if ( v22 ) { sub_455710(v22, (int *)&v28, v20); sub_410C00(&v28); } sub_403A70(&unk_BA6B10, &v27, (_DWORD *)v20); sub_410C00(&v27); if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v23 = v1[94]; v20 = 0; v30 = 0; sub_916F40(v1 + 90, v23); LOBYTE(v32) = 0; sub_410C00(&v31); } *((_BYTE *)v1 + 352) = 0; v32 = -1; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); } result = (int *)sub_6310D0(); v24 = v29; v31 = (unsigned int)result; if ( v29 < (unsigned int)result ) { v29 = (unsigned int)(v1 + 96); do { v25 = sub_6310E0(v24); v26 = *(int **)v29; result = (int *)sub_575290(*(int **)v29, (int)v25); v29 += 4; ++v24; v26[113] = (int)v25; } while ( v24 < v31 ); } } return result; } //----- (00576380) -------------------------------------------------------- int *__thiscall sub_576380(int *this, int *a2) { int *result; // eax result = a2; if ( (int *)this[170] != a2 ) { this[170] = (int)a2; this[86] = 0; result = sub_576070(this); } return result; } //----- (005763B0) -------------------------------------------------------- int *__thiscall sub_5763B0(int *this, int a2) { this[86] = 0; this[89] = 0; this[169] = a2; this[170] = a2 != 3 ? 0 : 2; return sub_576070(this); } //----- (005763F0) -------------------------------------------------------- char __thiscall sub_5763F0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax int v12; // eax int v13; // edx volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // eax volatile LONG v19; // edx const CHAR *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // eax int v23; // eax _DWORD *v24; // eax _DWORD *v25; // ecx const char *v26; // eax const char *v27; // eax volatile LONG *v28; // eax volatile LONG v29; // edx const char *v30; // eax volatile LONG *v31; // eax volatile LONG v32; // edx const char *v33; // eax volatile LONG *v34; // eax volatile LONG v35; // edx const char *v36; // eax volatile LONG *v37; // eax const char *v38; // eax void (__thiscall *v39)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v40)(_DWORD, signed int); // esi int v41; // [esp+48h] [ebp-6Ch] int v42; // [esp+4Ch] [ebp-68h] int v43[5]; // [esp+50h] [ebp-64h] volatile LONG *v44; // [esp+64h] [ebp-50h] volatile LONG *v45; // [esp+68h] [ebp-4Ch] int v46; // [esp+6Ch] [ebp-48h] int v47; // [esp+70h] [ebp-44h] int v48; // [esp+74h] [ebp-40h] int v49; // [esp+78h] [ebp-3Ch] _DWORD *v50; // [esp+7Ch] [ebp-38h] char v51; // [esp+80h] [ebp-34h] int v52; // [esp+B0h] [ebp-4h] v2 = (int)this; v49 = 0; v52 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v45 = v3; if ( !v3 ) goto LABEL_27; v46 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\NPCWTitle.nif"); sub_8F66B0(v6, (int)&v49, v46); if ( !v49 ) return 0; v7 = sub_8FB140(v49, (int)"Frame", (int)&v48, (int)&v47, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"NPCItemWin", 0) ) { LABEL_27: v4 = (void (__thiscall ***)(_DWORD, signed int))v49; v52 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v48; v9 = v47; sub_456260(v43); LOBYTE(v52) = 1; sub_455FF0(v43, v2); sub_456000(v43, v8, v9); sub_456380(v43, v49); v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v49, (int)"Theme", (int)&v48, (int)&v47, v10); else v11 = sub_8FB140(v49, (int)"Theme", (int)&v48, (int)&v47, 0); sub_8F3EB0(v48 - v8, v47 - v9, (int)v11, v2, 0, 0); v50 = sub_8FB140(v49, (int)"ClsNor", (int)&v48, (int)&v47, v45); sub_8FB650(v50, v49, (int)"ClsClick"); sub_8FB650(v50, v49, (int)"ClsOver"); sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 7, 0, 0); v12 = sub_43D0D0(4u); v13 = *(_DWORD *)v49; v46 = v12; if ( (*(int (__stdcall **)(const char *))(v13 + 72))("HelpLinkNor") ) { v50 = sub_8FB140(v49, (int)"HelpLinkNor", (int)&v48, (int)&v47, (volatile LONG *)v46); sub_8FB650(v50, v49, (int)"HelpLinkClick"); sub_8FB650(v50, v49, (int)"HelpLinkOver"); sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 10, 0, 0); } v14 = sub_8FB140(v49, (int)"Panel01", (int)&v48, (int)&v47, v45); v15 = sub_8F3EB0(v48 - v8, v47 - v9, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v49, (int)"Panel02", (int)&v48, (int)&v47, v45); sub_8F3EB0(v48 - v8, v47 - v9, (int)v16, v2, 0, 0); if ( sub_8F71E0(v49, (int)"WinTitle", &v48, &v47, &v41, &v42) ) { v17 = sub_421050(0); v18 = sub_8F4A20(v48 - v8, v47 - v9 + 2, v41, v42, v17, v2, 0, 0); v19 = *v18; v50 = v18; (*(void (__thiscall **)(volatile LONG *, signed int))(v19 + 488))(v18, 5); (*(void (__stdcall **)(int *))(*v50 + 468))(&dword_AA8D98); v46 = *v50 + 472; v20 = sub_40C190(-178830294); (*(void (__thiscall **)(_DWORD *, const CHAR *))v46)(v50, v20); (*(void (__stdcall **)(_DWORD))(*v50 + 240))(0); v21 = sub_8FB140(v49, (int)"IconSlot", (int)&v48, (int)&v47, v45); sub_8F3EB0(v48 - v8, v47 - v9, (int)v21, v2, 0, 0); v46 = 0; v50 = (_DWORD *)(v2 + 384); do { v44 = (volatile LONG *)(v46 + 1); sprintf(&v51, "IconSlot%03d", v46 + 1); v22 = sub_8FB140(v49, (int)&v51, (int)&v48, (int)&v47, v45); sub_8F3EB0(v48 - v8, v47 - v9, (int)v22, v2, 0, 0); v23 = sub_575B90(v9, v48 - v8 + 1, v47 - v9 + 1, v46, v2); *v50 = v23; v46 = v23; sub_5D6220(v23, v9, v8, 0); v24 = v50; *(_DWORD *)(v46 + 448) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v24 + 516))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v50 + 560))(1); v25 = v50; *(_DWORD *)(*v50 + 272) = dword_ACEC34; v46 = (int)v44; v50 = v25 + 1; } while ( (signed int)v44 < 42 ); v44 = (volatile LONG *)sub_43D0D0(0x1Cu); v50 = sub_4563D0(v43, 4, (int)"PrePageNor", (int)"PrePageClick", (int)"PrePageOver", 0, v44); v50[68] = dword_AD01E8; v26 = sub_4090F0(1787467888); sub_8F2EA0((void **)v50, v26); v50 = sub_4563D0(v43, 5, (int)"NextPageNor", (int)"NextPageClick", (int)"NextPageOver", 0, v44); v50[68] = dword_AD01E8; v27 = sub_4090F0(625253762); sub_8F2EA0((void **)v50, v27); sub_456820(v43, (int)"Number", 0); *(_DWORD *)(v2 + 684) = sub_456760( v43, (int)"Number01", (int)&unk_9D2729, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v45 = (volatile LONG *)sub_43D0D0(0x1Du); v50 = sub_8FB140(v49, (int)"WTitleNor", (int)&v48, (int)&v47, v45); sub_8FB650(v50, v49, (int)"WTitleClick"); sub_8FB650(v50, v49, (int)"WTitleOver"); v28 = sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 2, 0, 0); v29 = *v28; v50 = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(v29 + 520))(v28, 0); v30 = sub_40A910(-167640052); sub_8F2EA0((void **)v50, v30); v50[68] = dword_AD01E8; sub_5B3CF0((_DWORD *)(v2 + 644), &v50); v50 = sub_8FB140(v49, (int)"EnchantNor", (int)&v48, (int)&v47, v45); sub_8FB650(v50, v49, (int)"EnchantClick"); sub_8FB650(v50, v49, (int)"EnchantOver"); v31 = sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 2, 0, 0); v32 = *v31; v50 = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(v32 + 520))(v31, 1); v33 = sub_40A910(-2102279735); sub_8F2EA0((void **)v50, v33); v50[68] = dword_AD01E8; sub_5B3CF0((_DWORD *)(v2 + 644), &v50); v50 = sub_8FB140(v49, (int)"GeneralNor", (int)&v48, (int)&v47, v45); sub_8FB650(v50, v49, (int)"GeneralClick"); sub_8FB650(v50, v49, (int)"GeneralOver"); v34 = sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 3, 0, 0); v35 = *v34; v50 = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(v35 + 520))(v34, 2); v36 = sub_4090F0(-1342777801); sub_8F2EA0((void **)v50, v36); v50[68] = dword_AD01E8; sub_5B3CF0((_DWORD *)(v2 + 660), &v50); v50 = sub_8FB140(v49, (int)"RepurchaseNor", (int)&v48, (int)&v47, v45); sub_8FB650(v50, v49, (int)"RepurchaseClick"); sub_8FB650(v50, v49, (int)"RepurchaseOver"); v37 = sub_8FE0F0(v48 - v8, v47 - v9, (int)v50, v2, 3, 0, 0); *(_DWORD *)(v2 + 348) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 520))(v37, 3); v38 = sub_4090F0(37301822); sub_8F2EA0(*(void ***)(v2 + 348), v38); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; sub_5B3CF0((_DWORD *)(v2 + 660), (_DWORD *)(v2 + 348)); v39 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_BYTE *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; v39(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v52) = 0; sub_4562E0(v43); v52 = -1; if ( v49 ) { v40 = (void (__thiscall ***)(_DWORD, signed int))v49; if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v40 ) (**v40)(v40, 1); } } result = 1; } else { LOBYTE(v52) = 0; sub_4562E0(v43); v52 = -1; sub_410C00(&v49); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (00576CC0) -------------------------------------------------------- int *__thiscall sub_576CC0(int *this) { int v1; // eax v1 = this[86]; if ( v1 ) this[86] = v1 - 1; return sub_576070(this); } //----- (00576CE0) -------------------------------------------------------- int *__thiscall sub_576CE0(int *this) { int *v1; // esi int v2; // ecx unsigned int v3; // eax int v4; // ecx int v5; // ecx v1 = this; v2 = this[169]; v3 = 0; if ( v2 != 3 ) { if ( v2 == 14 ) { v4 = v1[170]; if ( v4 ) { if ( v4 == 1 ) v3 = sub_631000(); } else { v3 = sub_631030(); } goto LABEL_11; } LABEL_10: v3 = (unsigned int)sub_631550()[3]; goto LABEL_11; } if ( v1[170] == 2 ) goto LABEL_10; if ( v1[170] == 3 ) v3 = sub_6310D0(); LABEL_11: v5 = v1[86]; if ( 42 * (v5 + 1) < v3 ) v1[86] = v5 + 1; return sub_576070(v1); } //----- (00576D50) -------------------------------------------------------- void __thiscall sub_576D50(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // ecx __int16 *v5; // esi int v6; // edi int v7; // esi _DWORD *v8; // edi int v9; // edx int v10; // esi int v11; // ebx int *v12; // eax int v13; // eax int v14; // esi __int16 *v15; // eax _DWORD *v16; // esi const CHAR *v17; // eax _DWORD *v18; // esi const CHAR *v19; // eax _DWORD *v20; // esi signed __int64 v21; // rax int v22; // eax _DWORD *v23; // esi const CHAR *v24; // eax _DWORD *v25; // edi int **v26; // ebx const CHAR *v27; // eax unsigned int v28; // ST20_4 _DWORD *v29; // ebx const CHAR *v30; // eax unsigned int v31; // [esp+Ch] [ebp-Ch] int v32; // [esp+10h] [ebp-8h] _DWORD *v33; // [esp+14h] [ebp-4h] int v34; // [esp+20h] [ebp+8h] v2 = this; v3 = this[a2 + 96]; v4 = *(_DWORD *)(v3 + 448); v5 = *(__int16 **)(v3 + 452); v33 = v2; v34 = v4; if ( v4 ) { v6 = *(unsigned __int16 *)(v4 + 1); v7 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) ) { v9 = *(_DWORD *)(v7 + 196); if ( *(_DWORD *)(v9 + 4 * v6) ) v8 = *(_DWORD **)(v9 + 4 * v6); else v8 = 0; } else { v8 = 0; } } else { v8 = 0; } v10 = dword_ACDA70; v11 = *(unsigned __int16 *)v8; v31 = *(_DWORD *)((char *)v8 + 211); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, v11) ) { if ( (unsigned __int16)v11 <= *(_WORD *)(v10 + 200) ) { v12 = (int *)(*(_DWORD *)(v10 + 196) + 4 * v11); if ( *v12 ) { v13 = *v12; if ( v13 ) { v14 = sub_549060((const char *)(v13 + 2)); v15 = (__int16 *)sub_5771C0((const char *)v14); if ( v14 && v15 ) { if ( *(unsigned __int16 *)(v14 + 64) > sub_685590(&byte_ADA230, *v15) ) { v16 = (_DWORD *)v33[74]; v17 = sub_4090F0(1350813924); sub_492060(v16, (int)v17); return; } } else if ( v31 > sub_680E60(byte_AD9238) ) { v18 = (_DWORD *)v33[74]; v19 = sub_40C190(-1040586969); goto LABEL_19; } if ( v14 && *(_WORD *)(v14 + 64) ) { v20 = *(_DWORD **)((char *)v8 + 106); HIDWORD(v21) = 0; goto LABEL_35; } } } } } if ( v8[56] ) { v22 = sub_6D3800(); if ( v22 ) { v21 = *(_QWORD *)(v22 + 2736) / (unsigned __int64)(unsigned int)v8[56]; v20 = (_DWORD *)v21; if ( !v21 ) { v23 = (_DWORD *)v33[74]; v24 = sub_40A910(-503559604); sub_492060(v23, (int)v24); return; } } else { HIDWORD(v21) = v32; v20 = (_DWORD *)v31; } goto LABEL_35; } if ( !v31 ) { if ( v8[55] <= 0u ) { if ( v8[57] <= 0u ) return; v21 = sub_6815F0(byte_AD9238) / (unsigned __int64)(unsigned int)v8[57]; v20 = (_DWORD *)v21; } else { v20 = *(_DWORD **)((char *)v8 + 106); HIDWORD(v21) = 0; } goto LABEL_35; } v21 = sub_680E60(byte_AD9238) / v31; v20 = (_DWORD *)v21; if ( v21 ) { LABEL_35: v25 = *(_DWORD **)((char *)v8 + 106); if ( v21 >= 0 && (SHIDWORD(v21) > 0 || v20 >= v25) ) v20 = v25; if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { v26 = (int **)v33[74]; *((_WORD *)v33 + 320) = *(_WORD *)(v34 + 1); v27 = sub_40C190(1244940611); sub_4A4E90(v26, v33, (_DWORD *)9, v20, (int)v27, 0); sub_50A460(*(_DWORD **)(v33[74] + 744), 1); } else { sub_4B7A80((_DWORD *)v33[74], *(_WORD *)(v34 + 1), (int)v20); } return; } v18 = (_DWORD *)v33[74]; v19 = sub_40C190(894386479); LABEL_19: sub_492060(v18, (int)v19); return; } if ( v5 ) { v28 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v5 + 112) + 215); if ( v28 <= sub_680E60(byte_AD9238) ) { sub_4C09C0((_DWORD *)v2[74], v5[2]); } else { v29 = (_DWORD *)v2[74]; v30 = sub_40C190(810500413); sub_492060(v29, (int)v30); } } } // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; // ACDC84: using guessed type int dword_ACDC84; // ADA230: using guessed type char byte_ADA230; //----- (00577090) -------------------------------------------------------- void __thiscall sub_577090(int this, int a2, int *a3) { switch ( a2 ) { case 0: sub_5753F0((_DWORD *)this, (int)a3); break; case 1: sub_576D50((_DWORD *)this, (int)a3); break; case 2: sub_576380((int *)this, a3); break; case 3: sub_576380((int *)this, a3); break; case 4: sub_576CC0((int *)this); break; case 5: sub_576CE0((int *)this); break; case 7: sub_5759A0((_DWORD **)this); break; case 9: if ( a3 ) sub_4B7A80(*(_DWORD **)(this + 296), *(_WORD *)(this + 640), (int)a3); break; case 10: sub_5751E0(); break; default: return; } } //----- (00577150) -------------------------------------------------------- void *__thiscall sub_577150(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemShopInvWin::`vftable'; *((_DWORD *)this + 58) = &ItemShopInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D2914: using guessed type void *ItemShopInvWin::`vftable'; // 9D2934: using guessed type void *ItemShopInvWin::`vftable'; //----- (00577190) -------------------------------------------------------- void *__thiscall sub_577190(void *this, char a2) { void *v2; // esi v2 = this; sub_575E40(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005771C0) -------------------------------------------------------- int __cdecl sub_5771C0(const char *a1) { unsigned int v1; // edi int v2; // eax if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_5489A0() ) return 0; while ( 1 ) { if ( !strcmp((const char *)sub_7474E0((_DWORD *)(dword_ACD91C + 4), v1), a1) ) { v2 = sub_7474E0((_DWORD *)(dword_ACD91C + 4), v1); if ( v2 ) break; } if ( ++v1 >= sub_5489A0() ) return 0; } return sub_40C8D0((void *)(v2 + 32)); } // ACD91C: using guessed type int dword_ACD91C; //----- (00577290) -------------------------------------------------------- char __thiscall sub_577290(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_907E00(this, a2, a3, 32, 32, a5, 0, 0); if ( result ) { v5[104] = a4; result = 1; } return result; } //----- (005772D0) -------------------------------------------------------- int __thiscall sub_5772D0(int this) { int v1; // esi int v2; // edx int result; // eax unsigned int *v4; // ecx int v5; // eax v1 = this; v2 = *(unsigned __int16 *)(this + 424); result = 0xFFFF; if ( (_WORD)v2 != -1 ) { v4 = *(unsigned int **)(this + 272); if ( v4 ) { v5 = *(_DWORD *)(v1 + 412); if ( v5 ) { if ( v5 == 1 ) sub_5A8360((_DWORD **)v4, v2, *(_DWORD *)(v1 + 428)); result = sub_8F2F90(v1); } else { sub_5AB810(v4, v2, *(_DWORD *)(v1 + 428)); result = sub_8F2F90(v1); } } } return result; } //----- (00577350) -------------------------------------------------------- char sub_577350() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCSkill"); return (char)v0; } //----- (00577380) -------------------------------------------------------- int __thiscall sub_577380(_DWORD *this) { int v1; // edx int result; // eax int v3; // ecx int v4; // ecx v1 = this[86]; result = 0; if ( v1 ) { if ( v1 == 1 ) { v4 = this[87]; if ( v4 ) { switch ( v4 ) { case 1: result = sub_631470(); break; case 2: result = sub_631480(); break; case 3: result = sub_631490(); break; case 4: result = sub_6314E0(); break; case 5: result = sub_631500(); break; } } else { result = sub_631460(); } } else if ( v1 == 2 ) { result = sub_631520(); } } else { v3 = this[87]; if ( v3 ) { switch ( v3 ) { case 1: result = sub_6314B0(); break; case 2: result = sub_6314C0(); break; case 3: result = sub_6314D0(); break; case 4: result = sub_6314F0(); break; case 5: result = sub_631510(); break; } } else { result = sub_6314A0(); } } return result; } //----- (00577440) -------------------------------------------------------- int __thiscall sub_577440(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < 0x24 ) result = this[a2 + 89]; else result = 0; return result; } //----- (00577460) -------------------------------------------------------- LONG __thiscall sub_577460(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx bool v3; // zf int v4; // edi v1 = this; *this = &NPCSkillWin::`vftable'; this[58] = &NPCSkillWin::`vftable'; v2 = this[139]; if ( v2 ) { v3 = (*(_DWORD *)(v2 + 104))-- == 1; if ( v3 ) sub_91D6F0((_BYTE *)v2); } v4 = v1[138]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9D3240: using guessed type void *NPCSkillWin::`vftable'; // 9D325C: using guessed type void *NPCSkillWin::`vftable'; //----- (00577580) -------------------------------------------------------- char __thiscall sub_577580(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[104]); return (char)v2; } //----- (005775B0) -------------------------------------------------------- char __thiscall sub_5775B0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[104]); return (char)v2; } //----- (005775E0) -------------------------------------------------------- _DWORD *__thiscall sub_5775E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx int v3; // ecx bool v4; // zf _DWORD *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &NPCSkillWin::`vftable'; v1[58] = &NPCSkillWin::`vftable'; v1[138] = 0; v1[139] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[87] = 0; v1[88] = 0; v1[86] = 0; v2 = v1[138]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[138] = 0; } v3 = v1[139]; if ( v3 ) { v4 = (*(_DWORD *)(v3 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v3); v1[139] = 0; } result = v1; v1[140] = 0; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D3240: using guessed type void *NPCSkillWin::`vftable'; // 9D325C: using guessed type void *NPCSkillWin::`vftable'; //----- (00577790) -------------------------------------------------------- void __thiscall sub_577790(_DWORD *this, int a2) { int v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax unsigned int v7; // edi _DWORD *v8; // esi const CHAR *v9; // eax _DWORD *v10; // [esp+4h] [ebp-4h] v10 = this; v2 = *(_DWORD *)(this[a2 + 89] + 420); if ( v2 ) { v3 = dword_ACB230; v4 = *(unsigned __int16 *)(v2 + 1); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *v5 ) { v6 = *v5; if ( v6 ) { v7 = *(_DWORD *)(v6 + 211); if ( v7 <= sub_680E60(byte_AD9238) ) { sub_4B7A80((_DWORD *)v10[74], *(_WORD *)(v2 + 1), 1); } else { v8 = (_DWORD *)v10[74]; v9 = sub_40C190(1532174080); sub_492060(v8, (int)v9); } } } } } } } // ACB230: using guessed type int dword_ACB230; //----- (00577850) -------------------------------------------------------- int __thiscall sub_577850(_BYTE *this) { int result; // eax int v2; // eax unsigned int v3; // edx int v4; // edi char *v5; // eax _BYTE *v6; // esi v6 = this; sub_8F28C0(this); result = (*(int (**)(void))(*(_DWORD *)v6 + 260))(); if ( (_BYTE)result ) { v2 = sub_577380(v6); if ( v2 ) v3 = (v2 - 1) / 0x24u + 1; else v3 = 1; v4 = **((_DWORD **)v6 + 140); v5 = sub_7549E0("%d / %d", *((_DWORD *)v6 + 88) + 1, v3); result = (*(int (__thiscall **)(_DWORD, char *))(v4 + 472))(*((_DWORD *)v6 + 140), v5); } return result; } // 577850: could not find valid save-restore pair for edi //----- (00577CE0) -------------------------------------------------------- int __thiscall sub_577CE0(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi int v6; // eax int v7; // edi int v8; // ebx int result; // eax unsigned __int16 *v10; // edi float v11; // ST1C_4 float v12; // ST18_4 float v13; // ST14_4 int v14; // ebx int v15; // ST18_4 int v16; // eax int v17; // eax double v18; // st7 double v19; // st7 unsigned __int16 *v20; // edi float v21; // ST1C_4 float v22; // ST18_4 float v23; // ST14_4 int v24; // ebx int v25; // ST18_4 int v26; // eax int v27; // eax float v28; // ST20_4 float v29; // ST20_4 void (__thiscall *v30)(_DWORD *, signed int); // eax float *v31; // eax float *v32; // eax int (__thiscall *v33)(_DWORD *, _DWORD); // eax int v34; // [esp+3Ch] [ebp+8h] v5 = this; this[105] = a2; if ( !a2 || (v6 = *(unsigned __int16 *)(a2 + 1), (_WORD)v6 == -1) ) { (*(void (__thiscall **)(_DWORD *, _DWORD, signed int, signed int, signed int))(*this + 584))(this, 0, -1, 32, 32); v33 = *(int (__thiscall **)(_DWORD *, _DWORD))(*v5 + 240); *((_WORD *)v5 + 14) |= 1u; result = v33(v5, 0); *((_WORD *)v5 + 212) = -1; return result; } v7 = dword_ACB230; v8 = *(unsigned __int16 *)(a2 + 1); result = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6); if ( (_BYTE)result ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { result = *(_DWORD *)(v7 + 196) + 4 * v8; if ( *(_DWORD *)result ) { result = *(_DWORD *)result; v34 = result; if ( result ) { if ( a3 ) { if ( a3 != 1 ) { LABEL_29: v30 = *(void (__thiscall **)(_DWORD *, signed int))(*v5 + 240); *((_WORD *)v5 + 14) &= 0xFFFEu; v30(v5, 1); v5[107] = *(_DWORD *)(v34 + 211); v5[103] = a3; v31 = sub_4388B0(); (*(void (__thiscall **)(_DWORD *, bool))(*v5 + 240))(v5, *((_BYTE *)v31 + 13) == 0); v32 = sub_4388B0(); return sub_5D4A30(v5, *((_BYTE *)v32 + 13)); } result = sub_579BC0((const char *)(result + 2)); v20 = (unsigned __int16 *)result; if ( !result ) return result; v21 = (double)*(unsigned int *)(result + 78); v22 = (double)*(unsigned int *)(result + 74); v23 = (double)*(unsigned int *)(result + 70); sub_5D7110(v5, v23, v22, v21, 255.0); sub_5D71B0(v5, 255.0, 0.0, 0.0, 0.0); v24 = *v5; v25 = *(_DWORD *)(v20 + 17); v26 = sub_42BF30((int)(v20 + 19)); (*(void (__thiscall **)(_DWORD *, int, int, signed int, signed int))(v24 + 584))(v5, v26, v25, 32, 32); v27 = *v20; *((_WORD *)v5 + 212) = v27; if ( (unsigned __int16)v27 >= 0x4E20u ) { if ( !sub_6BE900(v27) && !sub_6BE370(*((_WORD *)v5 + 212)) ) goto LABEL_23; sub_5D7110(v5, 175.0, 175.0, 175.0, 155.0); v18 = 155.0; goto LABEL_22; } if ( sub_6BE900(v27) || sub_6BE370(*((_WORD *)v5 + 212)) ) { sub_5D7110(v5, 175.0, 175.0, 175.0, 155.0); v19 = 155.0; goto LABEL_27; } } else { result = sub_549180((const char *)(result + 2)); v10 = (unsigned __int16 *)result; if ( !result ) return result; v11 = (double)*(unsigned int *)(result + 83); v12 = (double)*(unsigned int *)(result + 79); v13 = (double)*(unsigned int *)(result + 75); sub_5D7110(v5, v13, v12, v11, 255.0); sub_5D71B0(v5, 255.0, 0.0, 0.0, 0.0); v14 = *v5; v15 = *(_DWORD *)((char *)v10 + 39); v16 = sub_42BF30((int)v10 + 43); (*(void (__thiscall **)(_DWORD *, int, int, signed int, signed int))(v14 + 584))(v5, v16, v15, 32, 32); v17 = *v10; *((_WORD *)v5 + 212) = v17; if ( (unsigned __int16)v17 >= 0x4E20u ) { if ( !sub_6BE900(v17) && !sub_6BE330(*((_WORD *)v5 + 212)) ) goto LABEL_23; sub_5D7110(v5, 175.0, 175.0, 175.0, 160.0); v18 = 160.0; LABEL_22: v28 = v18; sub_5D71B0(v5, 175.0, 175.0, 175.0, v28); LABEL_23: sub_5D8230((_DWORD **)v5); goto LABEL_29; } if ( sub_6BE900(v17) || sub_6BE330(*((_WORD *)v5 + 212)) ) { sub_5D7110(v5, 175.0, 175.0, 175.0, 160.0); v19 = 160.0; LABEL_27: v29 = v19; sub_5D71B0(v5, 175.0, 175.0, 175.0, v29); goto LABEL_28; } } LABEL_28: sub_5D80B0((_DWORD **)v5); goto LABEL_29; } } } } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00578110) -------------------------------------------------------- void __thiscall sub_578110(_DWORD *this) { _DWORD *v1; // esi _DWORD **v2; // ebx _WORD *v3; // edi void (__thiscall *v4)(_WORD *, _DWORD, signed int, signed int, signed int); // eax void (__thiscall *v5)(_WORD *, _DWORD); // eax int v6; // eax unsigned int v7; // edi int v8; // eax char *v9; // eax char *v10; // eax char *v11; // eax char *v12; // eax char *v13; // eax char *v14; // eax int v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax char *v19; // eax char *v20; // eax char *v21; // eax char *v22; // eax int v23; // eax unsigned int v24; // edx int v25; // edi char *v26; // eax signed int v27; // [esp+8h] [ebp-8h] unsigned int v28; // [esp+8h] [ebp-8h] unsigned int v29; // [esp+8h] [ebp-8h] unsigned int v30; // [esp+8h] [ebp-8h] unsigned int v31; // [esp+8h] [ebp-8h] unsigned int v32; // [esp+8h] [ebp-8h] unsigned int v33; // [esp+8h] [ebp-8h] unsigned int v34; // [esp+8h] [ebp-8h] unsigned int v35; // [esp+8h] [ebp-8h] unsigned int v36; // [esp+8h] [ebp-8h] unsigned int v37; // [esp+8h] [ebp-8h] unsigned int v38; // [esp+8h] [ebp-8h] unsigned int v39; // [esp+8h] [ebp-8h] unsigned int v40; // [esp+8h] [ebp-8h] _WORD **v41; // [esp+Ch] [ebp-4h] unsigned int v42; // [esp+Ch] [ebp-4h] unsigned int v43; // [esp+Ch] [ebp-4h] unsigned int v44; // [esp+Ch] [ebp-4h] unsigned int v45; // [esp+Ch] [ebp-4h] unsigned int v46; // [esp+Ch] [ebp-4h] unsigned int v47; // [esp+Ch] [ebp-4h] unsigned int v48; // [esp+Ch] [ebp-4h] unsigned int v49; // [esp+Ch] [ebp-4h] unsigned int v50; // [esp+Ch] [ebp-4h] unsigned int v51; // [esp+Ch] [ebp-4h] unsigned int v52; // [esp+Ch] [ebp-4h] unsigned int v53; // [esp+Ch] [ebp-4h] unsigned int v54; // [esp+Ch] [ebp-4h] v1 = this; v2 = (_DWORD **)(this + 89); if ( this[89] ) { v41 = (_WORD **)(this + 89); v27 = 36; do { v3 = *v41; if ( *v41 ) { v4 = *(void (__thiscall **)(_WORD *, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v3 + 584); *((_DWORD *)v3 + 105) = 0; v4(v3, 0, -1, 32, 32); v5 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 240); v3[14] |= 1u; v5(v3, 0); v3[212] = -1; } ++v41; --v27; } while ( v27 ); v6 = v1[86]; v7 = 36 * v1[88]; if ( v6 ) { if ( v6 == 1 ) { v15 = v1[87]; if ( v15 ) { switch ( v15 ) { case 1: v49 = sub_631470(); if ( v7 < v49 ) { v35 = 0; do { if ( v35 >= 0x24 ) break; v17 = sub_6311A0(v7); sub_577CE0(*v2, (int)v17, 1, v1[138], v1[139]); ++v35; ++v7; ++v2; } while ( v7 < v49 ); } break; case 2: v50 = sub_631480(); if ( v7 < v50 ) { v36 = 0; do { if ( v36 >= 0x24 ) break; v18 = sub_6311C0(v7); sub_577CE0(*v2, (int)v18, 1, v1[138], v1[139]); ++v36; ++v7; ++v2; } while ( v7 < v50 ); } break; case 3: v51 = sub_631490(); if ( v7 < v51 ) { v37 = 0; do { if ( v37 >= 0x24 ) break; v19 = sub_6311E0(v7); sub_577CE0(*v2, (int)v19, 1, v1[138], v1[139]); ++v37; ++v7; ++v2; } while ( v7 < v51 ); } break; case 4: v52 = sub_6314E0(); if ( v7 < v52 ) { v38 = 0; do { if ( v38 >= 0x24 ) break; v20 = sub_631220(v7); sub_577CE0(*v2, (int)v20, 1, v1[138], v1[139]); ++v38; ++v7; ++v2; } while ( v7 < v52 ); } break; case 5: v53 = sub_631500(); if ( v7 < v53 ) { v39 = 0; do { if ( v39 >= 0x24 ) break; v21 = sub_631260(v7); sub_577CE0(*v2, (int)v21, 1, v1[138], v1[139]); ++v39; ++v7; ++v2; } while ( v7 < v53 ); } break; } } else { v48 = sub_631460(); if ( v7 < v48 ) { v34 = 0; do { if ( v34 >= 0x24 ) break; v16 = sub_631180(v7); sub_577CE0(*v2, (int)v16, 1, v1[138], v1[139]); ++v34; ++v7; ++v2; } while ( v7 < v48 ); } } } else if ( v6 == 2 ) { v54 = sub_631520(); if ( v7 < v54 ) { v40 = 0; do { if ( v40 >= 0x24 ) break; v22 = sub_631530(v7); sub_577CE0(*v2, (int)v22, 0, v1[138], v1[139]); ++v40; ++v7; ++v2; } while ( v7 < v54 ); } } } else { v8 = v1[87]; if ( v8 ) { switch ( v8 ) { case 1: v43 = sub_6314B0(); if ( v7 < v43 ) { v29 = 0; do { if ( v29 >= 0x24 ) break; v10 = sub_631120(v7); sub_577CE0(*v2, (int)v10, 0, v1[138], v1[139]); ++v29; ++v7; ++v2; } while ( v7 < v43 ); } break; case 2: v44 = sub_6314C0(); if ( v7 < v44 ) { v30 = 0; do { if ( v30 >= 0x24 ) break; v11 = sub_631140(v7); sub_577CE0(*v2, (int)v11, 0, v1[138], v1[139]); ++v30; ++v7; ++v2; } while ( v7 < v44 ); } break; case 3: v45 = sub_6314D0(); if ( v7 < v45 ) { v31 = 0; do { if ( v31 >= 0x24 ) break; v12 = sub_631160(v7); sub_577CE0(*v2, (int)v12, 0, v1[138], v1[139]); ++v31; ++v7; ++v2; } while ( v7 < v45 ); } break; case 4: v46 = sub_6314F0(); if ( v7 < v46 ) { v32 = 0; do { if ( v32 >= 0x24 ) break; v13 = sub_631200(v7); sub_577CE0(*v2, (int)v13, 0, v1[138], v1[139]); ++v32; ++v7; ++v2; } while ( v7 < v46 ); } break; case 5: v47 = sub_631510(); if ( v7 < v47 ) { v33 = 0; do { if ( v33 >= 0x24 ) break; v14 = sub_631240(v7); sub_577CE0(*v2, (int)v14, 0, v1[138], v1[139]); ++v33; ++v7; ++v2; } while ( v7 < v47 ); } break; } } else { v42 = sub_6314A0(); if ( v7 < v42 ) { v28 = 0; do { if ( v28 >= 0x24 ) break; v9 = sub_631100(v7); sub_577CE0(*v2, (int)v9, 0, v1[138], v1[139]); ++v28; ++v7; ++v2; } while ( v7 < v42 ); } } } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 260))(v1) ) { v23 = sub_577380(v1); if ( v23 ) v24 = (v23 - 1) / 0x24u + 1; else v24 = 1; v25 = *(_DWORD *)v1[140]; v26 = sub_7549E0("%d / %d", v1[88] + 1, v24); (*(void (__thiscall **)(_DWORD, char *))(v25 + 472))(v1[140], v26); } } } //----- (005786F0) -------------------------------------------------------- _DWORD *__thiscall sub_5786F0(_DWORD *this) { _DWORD *v1; // esi void (__thiscall *v2)(_DWORD *, _DWORD); // edx v1 = this; sub_5D7A30(this); *v1 = &NPCSkillInvWin::`vftable'; v1[58] = &NPCSkillInvWin::`vftable'; v1[104] = -1; v1[105] = 0; sub_5D2F70(v1, 0, -1, 32, 32); v2 = *(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 240); *((_WORD *)v1 + 14) |= 1u; v2(v1, 0); *((_WORD *)v1 + 212) = -1; v1[103] = 0; return v1; } // 9D2FB4: using guessed type void *NPCSkillInvWin::`vftable'; // 9D2FD4: using guessed type void *NPCSkillInvWin::`vftable'; //----- (005787C0) -------------------------------------------------------- void __thiscall sub_5787C0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 15) ) { v1[86] = 0; v1[88] = 0; sub_578110(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00578860) -------------------------------------------------------- void __thiscall sub_578860(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 15) ) { v1[86] = 1; v1[88] = 0; sub_578110(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00578900) -------------------------------------------------------- void __thiscall sub_578900(_DWORD **this) { _DWORD **v1; // edi float *v2; // eax float *v3; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 15) ) { if ( !sub_6BEE40() ) { if ( v1[59] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v1[59] + 4))(55, 0, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v1[59] + 20))(55, 0, v1 + 58); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))v1[58][5])(v1 + 58, 55, 0, v1 + 58); } v1[86] = (_DWORD *)2; v1[88] = 0; sub_578110(v1); } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (005789E0) -------------------------------------------------------- void __thiscall sub_5789E0(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax int v4; // eax v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 15) ) { v4 = v1[88]; if ( v4 ) { v1[88] = v4 - 1; sub_578110(v1); } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00578A70) -------------------------------------------------------- void __thiscall sub_578A70(_DWORD *this) { _DWORD *v1; // esi float *v2; // eax float *v3; // eax unsigned int v4; // eax int v5; // ecx v1 = this; v2 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v3 = (float *)operator new(0xB4u); if ( v3 ) v2 = sub_4546A0(v3); else v2 = 0; dword_ACCFE0 = (int)v2; } if ( !*((_BYTE *)v2 + 15) ) { v4 = sub_577380(v1); v5 = v1[88]; if ( 4 * (9 * v5 + 9) < v4 ) { v1[88] = v5 + 1; sub_578110(v1); } } } // ACCFE0: using guessed type int dword_ACCFE0; //----- (00578B10) -------------------------------------------------------- void __thiscall sub_578B10(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // eax signed int v5; // ebx int v6; // esi v2 = this; v3 = (float *)dword_ACCFE0; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); if ( v4 ) v3 = sub_4546A0(v4); else v3 = 0; dword_ACCFE0 = (int)v3; } if ( !*((_BYTE *)v3 + 15) ) { v5 = 6; if ( a2 < 6 ) { v6 = (int)(v2 + 132); do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 - 24) + 256))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)v6 + 468))(&unk_AA8DA8); v6 += 4; --v5; } while ( v5 ); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[a2 + 126] + 256))(1); (*(void (__stdcall **)(int *))(*(_DWORD *)v2[a2 + 132] + 468))(&dword_AA8D98); v2[87] = a2; v2[88] = 0; sub_578110(v2); } } } // AA8D98: using guessed type int dword_AA8D98; // ACCFE0: using guessed type int dword_ACCFE0; //----- (00578C10) -------------------------------------------------------- void __thiscall sub_578C10(_DWORD *this, char a2) { char v2; // al switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v2 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v2 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v2 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v2 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v2 = 21; break; case 0x1A: case 0x1B: v2 = 26; break; default: v2 = 0; break; } switch ( v2 ) { case 1: sub_578B10(this, 0); break; case 6: sub_578B10(this, 1u); break; case 0xB: sub_578B10(this, 2u); break; case 0x10: sub_578B10(this, 3u); break; case 0x15: sub_578B10(this, 4u); break; case 0x1A: sub_578B10(this, 5u); break; default: return; } } //----- (00578D40) -------------------------------------------------------- volatile LONG *__cdecl sub_578D40(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1B0u); v8 = v4; v9 = 0; if ( v4 ) v5 = sub_5786F0(v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 612))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (00578E80) -------------------------------------------------------- volatile LONG *__cdecl sub_578E80(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x234u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5775E0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00578FB0) -------------------------------------------------------- char __thiscall sub_578FB0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi LONG v5; // eax char *v7; // eax volatile LONG **v8; // eax int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax volatile LONG **v17; // eax int v18; // eax volatile LONG *v19; // eax volatile LONG v20; // edx const CHAR *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG v24; // edx void (__stdcall *v25)(_DWORD); // eax void *v26; // eax char *v27; // ecx const char *v28; // eax volatile LONG *v29; // ST74_4 const char *v30; // eax volatile LONG *v31; // ST74_4 const char *v32; // eax const char *v33; // eax const char *v34; // eax volatile LONG **v35; // eax int v36; // eax volatile LONG *v37; // eax char *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax char *v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // eax int v44; // eax _DWORD *v45; // edx int v46; // eax volatile LONG *v47; // eax int v48; // eax const CHAR *v49; // eax int v50; // eax const CHAR *v51; // eax int v52; // eax const CHAR *v53; // eax int v54; // eax const CHAR *v55; // eax int v56; // eax const CHAR *v57; // eax int v58; // eax const CHAR *v59; // eax void (__thiscall ***v60)(_DWORD, signed int); // esi int v61; // [esp+88h] [ebp-58h] int v62; // [esp+8Ch] [ebp-54h] char v63[4]; // [esp+90h] [ebp-50h] volatile LONG *v64; // [esp+94h] [ebp-4Ch] volatile LONG *v65; // [esp+98h] [ebp-48h] int v66; // [esp+9Ch] [ebp-44h] int v67; // [esp+A0h] [ebp-40h] int v68; // [esp+A4h] [ebp-3Ch] _DWORD *v69; // [esp+A8h] [ebp-38h] char v70; // [esp+ACh] [ebp-34h] int v71; // [esp+DCh] [ebp-4h] v2 = (int)this; v68 = 0; v71 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v65 = v3; if ( !v3 ) goto LABEL_51; *(_DWORD *)v63 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\NPCSkill.nif"); sub_8F66B0(v7, (int)&v68, *(int *)v63); if ( !v68 ) return 0; v8 = sub_8FB140(v68, (int)"Frame", (int)&v67, (int)&v66, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"NPCSkillWin", 0) ) { LABEL_51: v4 = (void (__thiscall ***)(_DWORD, signed int))v68; v71 = -1; if ( v68 ) { v5 = InterlockedDecrement((volatile LONG *)(v68 + 4)); goto LABEL_4; } return 0; } v9 = v67; v10 = v66; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v68, (int)"Theme", (int)&v67, (int)&v66, v11); else v12 = sub_8FB140(v68, (int)"Theme", (int)&v67, (int)&v66, 0); sub_8F3EB0(v67 - v9, v66 - v10, (int)v12, v2, 0, 0); v13 = sub_8FB140(v68, (int)"IconSlot", (int)&v67, (int)&v66, v65); v14 = sub_8F3EB0(v67 - v9, v66 - v10, (int)v13, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v69 = sub_8FB140(v68, (int)"ClsNor", (int)&v67, (int)&v66, v65); sub_8FB650(v69, v68, (int)"ClsClick"); sub_8FB650(v69, v68, (int)"ClsOver"); sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 10, 0, 0); *(_DWORD *)v63 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v68 + 72))("HelpLinkNor") ) { v69 = sub_8FB140(v68, (int)"HelpLinkNor", (int)&v67, (int)&v66, *(volatile LONG **)v63); sub_8FB650(v69, v68, (int)"HelpLinkClick"); sub_8FB650(v69, v68, (int)"HelpLinkOver"); sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 11, 0, 0); } v15 = sub_8FB140(v68, (int)"Panel01", (int)&v67, (int)&v66, v65); v16 = sub_8F3EB0(v67 - v9, v66 - v10, (int)v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = sub_8FB140(v68, (int)"Panel02", (int)&v67, (int)&v66, v65); sub_8F3EB0(v67 - v9, v66 - v10, (int)v17, v2, 0, 0); if ( !sub_8F71E0(v68, (int)"WinTitle", &v67, &v66, &v62, &v61) ) { v71 = -1; sub_410C00(&v68); return 0; } v18 = sub_421050(0); v19 = sub_8F4A20(v67 - v9, v66 - v10 + 1, v62, v61, v18, v2, 0, 0); v20 = *v19; v69 = v19; (*(void (__thiscall **)(volatile LONG *, signed int))(v20 + 488))(v19, 1); (*(void (__stdcall **)(int *))(*v69 + 468))(&dword_AA8D98); *(_DWORD *)v63 = *v69 + 472; v21 = sub_40C190(1213021251); (**(void (__thiscall ***)(void *, const CHAR *))v63)(v69, v21); (*(void (__stdcall **)(_DWORD))(*v69 + 240))(0); v64 = 0; v69 = (_DWORD *)(v2 + 356); do { *(_DWORD *)v63 = (char *)v64 + 1; sprintf(&v70, "IconSlot%03d", (char *)v64 + 1); v22 = sub_8FB140(v68, (int)&v70, (int)&v67, (int)&v66, v65); sub_8F3EB0(v67 - v9, v66 - v10, (int)v22, v2, 0, 0); v23 = sub_578D40(v67 - v9 + 1, v66 - v10 + 1, (int)v64, v2); *v69 = v23; v24 = *v23; v64 = v23; *((_DWORD *)v23 + 105) = 0; (*(void (__thiscall **)(volatile LONG *, _DWORD, signed int, signed int, signed int))(v24 + 584))( v23, 0, -1, 32, 32); v25 = *(void (__stdcall **)(_DWORD))(*v64 + 240); *((_WORD *)v64 + 14) |= 1u; v25(0); v26 = v69; *((_WORD *)v64 + 212) = -1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v26 + 516))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v69 + 560))(1); v27 = (char *)v69; *(_DWORD *)(*v69 + 272) = dword_AD019C; v64 = *(volatile LONG **)v63; v69 = v27 + 4; } while ( *(_DWORD *)v63 < 36 ); v69 = sub_8FB140(v68, (int)"ActSkNor", (int)&v67, (int)&v66, v65); sub_8FB650(v69, v68, (int)"ActSkClick"); sub_8FB650(v69, v68, (int)"ActSkOver"); v69 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 2, 0, 0); v28 = sub_40C190(-688459269); sub_8F2EA0((void **)v69, v28); v29 = v65; v69[68] = dword_AD01E8; v69 = sub_8FB140(v68, (int)"PasSkNor", (int)&v67, (int)&v66, v29); sub_8FB650(v69, v68, (int)"PasSkClick"); sub_8FB650(v69, v68, (int)"PasSkOver"); v69 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 3, 0, 0); v30 = sub_40C190(-436667585); sub_8F2EA0((void **)v69, v30); v31 = v65; v69[68] = dword_AD01E8; v69 = sub_8FB140(v68, (int)"ProSkNor", (int)&v67, (int)&v66, v31); sub_8FB650(v69, v68, (int)"ProSkClick"); sub_8FB650(v69, v68, (int)"ProSkOver"); v69 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 5, 0, 0); v32 = sub_40C190(-404361149); sub_8F2EA0((void **)v69, v32); v69[68] = dword_AD01E8; *(_DWORD *)v63 = sub_43D0D0(0x1Cu); v69 = sub_8FB140(v68, (int)"PrePageNor", (int)&v67, (int)&v66, *(volatile LONG **)v63); sub_8FB650(v69, v68, (int)"PrePageClick"); sub_8FB650(v69, v68, (int)"PrePageOver"); v69 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 6, 0, 0); v69[68] = dword_AD01E8; v33 = sub_4090F0(1787467888); sub_8F2EA0((void **)v69, v33); v69 = sub_8FB140(v68, (int)"NextPageNor", (int)&v67, (int)&v66, *(volatile LONG **)v63); sub_8FB650(v69, v68, (int)"NextPageClick"); sub_8FB650(v69, v68, (int)"NextPageOver"); v69 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v69, v2, 7, 0, 0); v69[68] = dword_AD01E8; v34 = sub_4090F0(625253762); sub_8F2EA0((void **)v69, v34); v35 = sub_8FB140(v68, (int)"Number", (int)&v67, (int)&v66, v65); sub_8F3EB0(v67 - v9, v66 - v10, (int)v35, v2, 0, 0); if ( !sub_8F71E0(v68, (int)"Number01", &v67, &v66, &v62, &v61) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v68; v71 = -1; if ( v68 ) { v5 = InterlockedDecrement((volatile LONG *)(v68 + 4)); LABEL_4: if ( !v5 ) { if ( v4 ) (**v4)(v4, 1); } return 0; } return 0; } v36 = sub_421050(0); v37 = sub_8F4A20(v67 - v9, v66 - v10, v62, v61, v36, v2, 0, 0); *(_DWORD *)(v2 + 560) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v64 = 0; v65 = (volatile LONG *)(v2 + 528); do { v69 = (_DWORD *)v68; *(_DWORD *)v63 = (char *)v64 + 1; v38 = sub_7549E0("JobTabOff%02d", (char *)v64 + 1); v39 = sub_8FB140((int)v69, (int)v38, (int)&v67, (int)&v66, 0); v40 = sub_8FE0F0(v67 - v9, v66 - v10, (int)v39, v2, 8, 0, 0); (*(void (__thiscall **)(volatile LONG *, volatile LONG *))(*v40 + 520))(v40, v64); v64 = (volatile LONG *)v68; v41 = sub_7549E0("JobTabOn%02d", *(_DWORD *)v63); v42 = sub_8FB140((int)v64, (int)v41, (int)&v67, (int)&v66, 0); v69 = v42; v43 = sub_8F3EB0(v67 - v9, v66 - v10, (int)v42, v2, 0, 0); *((_DWORD *)v65 - 6) = v43; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v65 - 6) + 256))(0); v44 = *(_DWORD *)v69[9]; v45 = *(_DWORD **)(v44 + 20); v64 = *(volatile LONG **)(v44 + 24); v69 = v45; v46 = sub_421050(0); v47 = sub_8F4A20(v67 - v9 + 3, v66 - v10 + 4, (int)v69, (int)v64, v46, v2, 0, 0); *v65 = (volatile LONG)v47; (*(void (__thiscall **)(volatile LONG *, void *))(*v47 + 472))(v47, &unk_9D2DF6); (*(void (__stdcall **)(void *))(**(_DWORD **)v65 + 468))(&unk_AA8DA8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v65 + 240))(0); ++v65; v64 = *(volatile LONG **)v63; } while ( *(_DWORD *)v63 < 6 ); v48 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 1u); if ( v48 ) v49 = (const CHAR *)(v48 + 21); else v49 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 528) + 472))(v49); v50 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 6u); if ( v50 ) v51 = (const CHAR *)(v50 + 21); else v51 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 532) + 472))(v51); v52 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 0xBu); if ( v52 ) v53 = (const CHAR *)(v52 + 21); else v53 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 536) + 472))(v53); v54 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 0x10u); if ( v54 ) v55 = (const CHAR *)(v54 + 21); else v55 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 540) + 472))(v55); v56 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 0x15u); if ( v56 ) v57 = (const CHAR *)(v56 + 21); else v57 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 544) + 472))(v57); v58 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), 0x1Au); if ( v58 ) v59 = (const CHAR *)(v58 + 21); else v59 = &byte_9A8050; (*(void (__stdcall **)(const CHAR *))(**(_DWORD **)(v2 + 548) + 472))(v59); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 504) + 256))(1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v71 = -1; if ( v68 ) { v60 = (void (__thiscall ***)(_DWORD, signed int))v68; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) { if ( v60 ) (**v60)(v60, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // AC9C84: using guessed type int dword_AC9C84; // ACAD5C: using guessed type char byte_ACAD5C; // AD019C: using guessed type int dword_AD019C; // AD01E8: using guessed type int dword_AD01E8; //----- (00579AA0) -------------------------------------------------------- void __thiscall sub_579AA0(int this, int a2, unsigned int a3) { switch ( a2 ) { case 1: sub_577790((_DWORD *)this, a3); break; case 2: sub_5787C0((_DWORD *)this); break; case 3: sub_578860((_DWORD *)this); break; case 5: sub_578900((_DWORD **)this); break; case 6: sub_5789E0((_DWORD *)this); break; case 7: sub_578A70((_DWORD *)this); break; case 8: sub_578B10((_DWORD *)this, a3); break; case 9: case 10: sub_4A6D20(*(_DWORD **)(this + 296)); break; case 11: sub_577350(); break; case 12: *(_DWORD *)(this + 352) = a3; sub_578110((_DWORD *)this); break; default: return; } } //----- (00579B60) -------------------------------------------------------- void *__thiscall sub_579B60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NPCSkillInvWin::`vftable'; *((_DWORD *)this + 58) = &NPCSkillInvWin::`vftable'; sub_5D74F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D2FB4: using guessed type void *NPCSkillInvWin::`vftable'; // 9D2FD4: using guessed type void *NPCSkillInvWin::`vftable'; //----- (00579BA0) -------------------------------------------------------- int sub_579BA0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACED88 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACED88: using guessed type int dword_ACED88; //----- (00579BC0) -------------------------------------------------------- int __cdecl sub_579BC0(const char *a1) { unsigned int v1; // edi if ( !a1 || !*a1 ) return 0; v1 = 0; if ( !sub_579BA0() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACED88 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_579BA0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACED88 + 4), v1); } // ACED88: using guessed type int dword_ACED88; //----- (00579C50) -------------------------------------------------------- void *__thiscall sub_579C50(void *this, char a2) { void *v2; // esi v2 = this; sub_577460(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00579CD0) -------------------------------------------------------- char __thiscall sub_579CD0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, volatile LONG *a6) { volatile LONG **v6; // esi char result; // al v6 = this; result = sub_907C90(this, a2, a3, a4, a5, 0, 0); if ( result ) { v6[83] = a6; result = 1; } return result; } //----- (00579D10) -------------------------------------------------------- void __thiscall sub_579D10(_DWORD *this) { int v1; // edi _DWORD **v2; // esi int v3; // eax int *v4; // eax unsigned int v5; // ST08_4 int v6; // ST04_4 int v7; // eax int *v8; // eax unsigned int v9; // ST08_4 int v10; // ST04_4 int v11; // eax v1 = (int)this; v2 = (_DWORD **)this[68]; if ( v2 ) { v3 = this[83]; if ( v3 ) { if ( v3 == 1 ) { v8 = sub_631450(); if ( v8 ) { v9 = v8[2]; v10 = v8[1]; v11 = sub_680D30((int)byte_AD9238); sub_5B4AE0(v2, v11, v10, v9); } } } else { v4 = sub_631440(); if ( v4 ) { v5 = v4[2]; v6 = v4[1]; v7 = sub_680D20((int)byte_AD9238); sub_5B4A90(v2, v7, v6, v5); sub_8F2F90(v1); return; } } sub_8F2F90(v1); } } //----- (00579E60) -------------------------------------------------------- char sub_579E60() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCSoul"); return (char)v0; } //----- (00579ED0) -------------------------------------------------------- char __thiscall sub_579ED0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[83]); return (char)v2; } //----- (00579F00) -------------------------------------------------------- char __thiscall sub_579F00(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[83]); return (char)v2; } //----- (00579F30) -------------------------------------------------------- void __thiscall sub_579F30(_DWORD **this, int a2) { _DWORD **v2; // edi int *v3; // eax int *v4; // esi _DWORD *v5; // edi const CHAR *v6; // eax int *v7; // eax int *v8; // esi int v9; // [esp-4h] [ebp-Ch] v2 = this; if ( a2 ) { if ( a2 == 1 ) { v7 = sub_631450(); v8 = v7; if ( v7 ) { if ( v7[2] ) { if ( !((unsigned int)sub_680E60(byte_AD9238) / v7[2]) ) goto LABEL_5; if ( sub_680D30((int)byte_AD9238) >= v8[1] ) goto LABEL_8; sub_4B8450(v2[74], 1); } } } } else { v3 = sub_631440(); v4 = v3; if ( v3 && v3[2] ) { if ( !((unsigned int)sub_680E60(byte_AD9238) / v3[2]) ) { LABEL_5: v9 = 978272565; LABEL_6: v5 = v2[74]; v6 = sub_40C190(v9); sub_492060(v5, (int)v6); return; } if ( sub_680D20((int)byte_AD9238) >= v4[1] ) { LABEL_8: v9 = 1677983971; goto LABEL_6; } sub_4B8400(v2[74], 1); } } } //----- (0057A000) -------------------------------------------------------- void __thiscall sub_57A000(_DWORD *this, int a2) { _DWORD *v2; // edi int *v3; // eax int *v4; // esi unsigned int v5; // ebx _DWORD *v6; // edi const CHAR *v7; // eax _DWORD *v8; // esi int **v9; // ebx const CHAR *v10; // eax _DWORD *v11; // ecx int *v12; // eax int *v13; // esi unsigned int v14; // ebx _DWORD *v15; // esi int **v16; // ebx const CHAR *v17; // eax _DWORD *v18; // ecx int v19; // [esp-4h] [ebp-10h] v2 = this; if ( a2 ) { if ( a2 == 1 ) { v12 = sub_631450(); v13 = v12; if ( v12 ) { if ( v12[2] ) { v14 = (unsigned int)sub_680E60(byte_AD9238) / v12[2]; if ( !v14 ) goto LABEL_5; if ( sub_680D30((int)byte_AD9238) >= v13[1] ) goto LABEL_8; v15 = (_DWORD *)(v13[1] - sub_680D30((int)byte_AD9238)); if ( v14 < (unsigned int)v15 ) v15 = (_DWORD *)v14; if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { v16 = (int **)v2[74]; v17 = sub_40C190(-304677663); sub_4A4E90(v16, v2, (_DWORD *)0xA, v15, (int)v17, 0); } else { v18 = (_DWORD *)v2[74]; if ( *(_BYTE *)(dword_ACDC84 + 36) & 0x20 ) sub_4B8450(v18, (__int16)v15); else sub_4B8450(v18, 1); } } } } } else { v3 = sub_631440(); v4 = v3; if ( v3 && v3[2] ) { v5 = (unsigned int)sub_680E60(byte_AD9238) / v3[2]; if ( !v5 ) { LABEL_5: v19 = 978272565; LABEL_6: v6 = (_DWORD *)v2[74]; v7 = sub_40C190(v19); sub_492060(v6, (int)v7); return; } if ( sub_680D20((int)byte_AD9238) >= v4[1] ) { LABEL_8: v19 = 1677983971; goto LABEL_6; } v8 = (_DWORD *)(v4[1] - sub_680D20((int)byte_AD9238)); if ( v5 < (unsigned int)v8 ) v8 = (_DWORD *)v5; if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { v9 = (int **)v2[74]; v10 = sub_40C190(-305398559); sub_4A4E90(v9, v2, (_DWORD *)9, v8, (int)v10, 0); } else { v11 = (_DWORD *)v2[74]; if ( *(_BYTE *)(dword_ACDC84 + 36) & 0x20 ) sub_4B8400(v11, (__int16)v8); else sub_4B8400(v11, 1); } } } } // ACDC84: using guessed type int dword_ACDC84; //----- (0057A1B0) -------------------------------------------------------- void __thiscall sub_57A1B0(_DWORD **this, int a2, int a3) { switch ( a2 ) { case 0: sub_579F30(this, a3); break; case 1: sub_57A000(this, a3); break; case 8: sub_4A6DA0(this[74]); break; case 9: sub_4B8400(this[74], a3); break; case 10: sub_4B8450(this[74], a3); break; case 11: sub_579E60(); break; default: return; } } //----- (0057A250) -------------------------------------------------------- int __cdecl sub_57A250(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x150u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_907A90(v5); *(_DWORD *)v6 = &NPCSoulInvWin::`vftable'; *(_DWORD *)(v6 + 232) = &NPCSoulInvWin::`vftable'; *(_DWORD *)(v6 + 332) = -1; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 584))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9D35E8: using guessed type void *NPCSoulInvWin::`vftable'; // 9D3604: using guessed type void *NPCSoulInvWin::`vftable'; //----- (0057A3B0) -------------------------------------------------------- int __cdecl sub_57A3B0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &NPCSoulWin::`vftable'; *(_DWORD *)(v2 + 232) = &NPCSoulWin::`vftable'; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D3854: using guessed type void *NPCSoulWin::`vftable'; // 9D3874: using guessed type void *NPCSoulWin::`vftable'; //----- (0057A510) -------------------------------------------------------- char __thiscall sub_57A510(void *this, _DWORD *a2) { int v2; // ebx int v3; // esi int v4; // edi char *v5; // eax volatile LONG **v6; // eax volatile LONG **v7; // eax volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax _DWORD *v16; // eax int v17; // edx volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax volatile LONG **v21; // esi volatile LONG **v22; // esi void (__thiscall ***v23)(_DWORD, signed int); // esi int v24; // eax volatile LONG *v25; // eax volatile LONG v26; // edx const CHAR *v27; // eax volatile LONG **v28; // eax int v29; // eax int v30; // eax int v31; // eax const char *v32; // eax volatile LONG **v33; // esi volatile LONG **v34; // esi void (__thiscall ***v35)(_DWORD, signed int); // esi int v36; // [esp+38h] [ebp-58h] int v37; // [esp+3Ch] [ebp-54h] _DWORD *v38; // [esp+40h] [ebp-50h] volatile LONG **v39; // [esp+44h] [ebp-4Ch] volatile LONG **v40; // [esp+48h] [ebp-48h] int v41; // [esp+4Ch] [ebp-44h] int v42; // [esp+50h] [ebp-40h] _DWORD *v43; // [esp+54h] [ebp-3Ch] int v44; // [esp+58h] [ebp-38h] char v45; // [esp+5Ch] [ebp-34h] int v46; // [esp+8Ch] [ebp-4h] v2 = 0; v3 = (int)this; v43 = a2; v44 = 0; v46 = 0; v39 = 0; v40 = 0; v4 = dword_BA6BA0; LOBYTE(v46) = 2; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\NPCSoul.nif"); sub_8F66B0(v5, (int)&v44, v4); if ( !v44 ) return 0; v6 = sub_8FB140(v44, (int)"HPSoulNor", (int)&v42, (int)&v41, 0); if ( v6 ) { v39 = v6; InterlockedIncrement((volatile LONG *)v6 + 1); } v7 = sub_8FB140(v44, (int)"SPSoulNor", (int)&v42, (int)&v41, 0); if ( v7 ) { v40 = v7; InterlockedIncrement((volatile LONG *)v7 + 1); v2 = (int)v40; } v8 = sub_8FB140(v44, (int)"Frame", (int)&v42, (int)&v41, 0); if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v8, 0, (int)v43, (int)"NPCSoulWin", 0) ) { LOBYTE(v46) = 1; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); LOBYTE(v46) = 0; if ( v39 && !InterlockedDecrement((volatile LONG *)v39 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v39)(v39, 1); v9 = (void (__thiscall ***)(_DWORD, signed int))v44; v46 = -1; if ( v44 && !InterlockedDecrement((volatile LONG *)(v44 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } v11 = v42; v12 = v41; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v44, (int)"Theme", (int)&v42, (int)&v41, v13); else v14 = sub_8FB140(v44, (int)"Theme", (int)&v42, (int)&v41, 0); sub_8F3EB0(v42 - v11, v41 - v12, (int)v14, v3, 0, 0); v15 = sub_8FB140(v44, (int)"IconSlot", (int)&v42, (int)&v41, 0); sub_8F3EB0(v42 - v11, v41 - v12, (int)v15, v3, 0, 0); v43 = sub_8FB140(v44, (int)"ClsNor", (int)&v42, (int)&v41, 0); sub_8FB650(v43, v44, (int)"ClsClick"); sub_8FB650(v43, v44, (int)"ClsOver"); sub_8FE0F0(v42 - v11, v41 - v12, (int)v43, v3, 8, 0, 0); v16 = (_DWORD *)sub_43D0D0(4u); v17 = *(_DWORD *)v44; v43 = v16; if ( (*(int (__stdcall **)(const char *))(v17 + 72))("HelpLinkNor") ) { v43 = sub_8FB140(v44, (int)"HelpLinkNor", (int)&v42, (int)&v41, v43); sub_8FB650(v43, v44, (int)"HelpLinkClick"); sub_8FB650(v43, v44, (int)"HelpLinkOver"); sub_8FE0F0(v42 - v11, v41 - v12, (int)v43, v3, 11, 0, 0); } v18 = sub_8FB140(v44, (int)"Panel01", (int)&v42, (int)&v41, 0); v19 = sub_8F3EB0(v42 - v11, v41 - v12, (int)v18, v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = sub_8FB140(v44, (int)"Panel02", (int)&v42, (int)&v41, 0); sub_8F3EB0(v42 - v11, v41 - v12, (int)v20, v3, 0, 0); if ( !sub_8F71E0(v44, (int)"WinTitle", &v42, &v41, &v37, &v36) ) { v21 = v40; LOBYTE(v46) = 1; if ( v40 && !InterlockedDecrement((volatile LONG *)v40 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v21)(v21, 1); v22 = v39; LOBYTE(v46) = 0; if ( v39 && !InterlockedDecrement((volatile LONG *)v39 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v22)(v22, 1); v23 = (void (__thiscall ***)(_DWORD, signed int))v44; v46 = -1; if ( v44 && !InterlockedDecrement((volatile LONG *)(v44 + 4)) && v23 ) { (**v23)(v23, 1); return 0; } return 0; } v24 = sub_421050(0); v25 = sub_8F4A20(v42 - v11, v41 - v12, v37, v36, v24, v3, 0, 0); v26 = *v25; v43 = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(v26 + 488))(v25, 1); (*(void (__stdcall **)(int *))(*v43 + 468))(&dword_AA8D98); v38 = (_DWORD *)(*v43 + 472); v27 = sub_40C190(-1516664166); ((void (__thiscall *)(_DWORD *, const CHAR *))*v38)(v43, v27); (*(void (__stdcall **)(_DWORD))(*v43 + 240))(0); v43 = 0; do { v38 = (_DWORD *)((char *)v43 + 1); sprintf(&v45, "IconSlot%03d", (char *)v43 + 1); v28 = sub_8FB140(v44, (int)&v45, (int)&v42, (int)&v41, 0); sub_8F3EB0(v42 - v11, v41 - v12, (int)v28, v3, 0, 0); if ( v43 ) { if ( v43 != (_DWORD *)1 ) goto LABEL_42; v31 = sub_57A250(v42 - v11 + 1, v41 - v12 + 1, (int)v40, v3, 1); *(_DWORD *)(v3 + 360) = v31; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v31 + 516))(v31, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 360) + 560))(1); v30 = *(_DWORD *)(v3 + 360); } else { v29 = sub_57A250(v42 - v11 + 1, v41 - v12 + 1, (int)v39, v3, 0); *(_DWORD *)(v3 + 356) = v29; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v29 + 516))(v29, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 356) + 560))(1); v30 = *(_DWORD *)(v3 + 356); } *(_DWORD *)(v30 + 272) = dword_AD01E0; LABEL_42: v43 = v38; } while ( (signed int)v38 < 42 ); v43 = sub_8FB140(v44, (int)"PwrSoulNor", (int)&v42, (int)&v41, 0); sub_8FB650(v43, v44, (int)"PwrSoulClick"); sub_8FB650(v43, v44, (int)"PwrSoulOver"); v43 = sub_8FE0F0(v42 - v11, v41 - v12, (int)v43, v3, 2, 0, 0); v32 = sub_40C190(-1476921614); sub_8F2EA0((void **)v43, v32); v43[68] = dword_AD01E8; v43 = sub_8FB140(v44, (int)"PrePageNor", (int)&v42, (int)&v41, 0); sub_8FB650(v43, v44, (int)"PrePageClick"); sub_8FB650(v43, v44, (int)"PrePageOver"); sub_8FE0F0(v42 - v11, v41 - v12, (int)v43, v3, 5, 0, 0); v43 = sub_8FB140(v44, (int)"NextPageNor", (int)&v42, (int)&v41, 0); sub_8FB650(v43, v44, (int)"NextPageClick"); sub_8FB650(v43, v44, (int)"NextPageOver"); sub_8FE0F0(v42 - v11, v41 - v12, (int)v43, v3, 6, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 0.5); v33 = v40; LOBYTE(v46) = 1; if ( v40 && !InterlockedDecrement((volatile LONG *)v40 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v33)(v33, 1); v34 = v39; LOBYTE(v46) = 0; if ( v39 && !InterlockedDecrement((volatile LONG *)v39 + 1) ) (*(void (__thiscall **)(volatile LONG **, signed int))*v34)(v34, 1); v35 = (void (__thiscall ***)(_DWORD, signed int))v44; v46 = -1; if ( v44 && !InterlockedDecrement((volatile LONG *)(v44 + 4)) && v35 ) (**v35)(v35, 1); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E0: using guessed type int dword_AD01E0; // AD01E8: using guessed type int dword_AD01E8; //----- (0057AC80) -------------------------------------------------------- void *__thiscall sub_57AC80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NPCSoulInvWin::`vftable'; *((_DWORD *)this + 58) = &NPCSoulInvWin::`vftable'; sub_907B00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D35E8: using guessed type void *NPCSoulInvWin::`vftable'; // 9D3604: using guessed type void *NPCSoulInvWin::`vftable'; //----- (0057ACC0) -------------------------------------------------------- void *__thiscall sub_57ACC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NPCSoulWin::`vftable'; *((_DWORD *)this + 58) = &NPCSoulWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D3854: using guessed type void *NPCSoulWin::`vftable'; // 9D3874: using guessed type void *NPCSoulWin::`vftable'; //----- (0057AD00) -------------------------------------------------------- char __thiscall sub_57AD00(volatile LONG *this) { volatile LONG *v1; // esi int *v2; // eax int v3; // eax char v5; // [esp+4h] [ebp-14h] v1 = this; v2 = sub_4B0FA0((int)&dword_B9DC70, &v5); sub_4C1540(*((_DWORD **)v1 + 74), *v2, v2[1], v2[2], v2[3], v2[4]); sub_6C1190(&dword_B9DC70); sub_8F2BC0(v1, 2, 0, 0); v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A8140(v3, 162); return v3; } // B9DC70: using guessed type int dword_B9DC70; //----- (0057AD90) -------------------------------------------------------- char __thiscall sub_57AD90(volatile LONG *this) { volatile LONG *v1; // esi int *v2; // eax int v3; // eax char v5; // [esp+4h] [ebp-14h] v1 = this; v2 = sub_4B0FA0((int)&dword_B9DC70, &v5); sub_4B7E90(*((_DWORD **)v1 + 74), *v2, v2[1], v2[2], v2[3], v2[4]); sub_6C1190(&dword_B9DC70); sub_8F2BC0(v1, 2, 0, 0); v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A8140(v3, 162); return v3; } // B9DC70: using guessed type int dword_B9DC70; //----- (0057AE20) -------------------------------------------------------- LPCSTR __thiscall sub_57AE20(_DWORD *this, const CHAR *a2) { _DWORD *v2; // edi int v3; // esi signed int v4; // ebx LPCSTR result; // eax _DWORD *v6; // esi int v7; // eax unsigned int v8; // eax int v9; // ecx unsigned int v10; // edi _DWORD *v11; // esi signed int v12; // edi int v13; // [esp+Ch] [ebp-110h] _DWORD *v14; // [esp+10h] [ebp-10Ch] LPCSTR lpString; // [esp+14h] [ebp-108h] CHAR v16[256]; // [esp+18h] [ebp-104h] v2 = this + 98; lpString = a2; v14 = this + 98; v3 = (int)(this + 98); v4 = 2; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9D3ACA); v3 += 4; --v4; } while ( v4 ); result = lpString; if ( lpString && *lpString ) { v13 = *(_DWORD *)((*(int (**)(void))(*(_DWORD *)*v2 + 456))() + 192); v6 = v2; do { if ( !*lpString ) break; v7 = (*(int (**)(void))(*(_DWORD *)*v6 + 144))(); v8 = sub_41E590(v16, lpString, (int)&v13, v7, 0); v9 = *v6; v10 = v8; v16[v8] = 0; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)v9 + 472))(v16); lpString += v10; v2 = v14; ++v4; ++v6; } while ( v4 < 2 ); if ( v4 == 1 ) { result = (LPCSTR)(*(int (__thiscall **)(_DWORD, signed int))(*(_DWORD *)*v2 + 488))(*v2, 1); } else { v11 = v2; v12 = 2; do { result = (LPCSTR)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)*v11 + 488))(0); ++v11; --v12; } while ( v12 ); } } return result; } // 57AE20: using guessed type CHAR var_104[256]; //----- (0057AF70) -------------------------------------------------------- char __thiscall sub_57AF70(volatile LONG *this) { return sub_57AD90(this - 86); } //----- (0057AF80) -------------------------------------------------------- char __thiscall sub_57AF80(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // esi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_57AD90(v3); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (0057AFC0) -------------------------------------------------------- LONG __thiscall sub_57AFC0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &PartyJoinProposeWin::`vftable'; this[58] = &PartyJoinProposeWin::`vftable'; this[86] = &PartyJoinProposeWin::`vftable'; `eh vector destructor iterator'(this + 98, 4u, 2, sub_410C00); sub_645400(v1 + 86); return sub_8F10F0(v1); } // 9D3B20: using guessed type void *PartyJoinProposeWin::`vftable'; // 9D3B2C: using guessed type void *PartyJoinProposeWin::`vftable'; // 9D3B4C: using guessed type void *PartyJoinProposeWin::`vftable'; //----- (0057B050) -------------------------------------------------------- char __thiscall sub_57B050(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax int v11; // eax int v12; // edi int v13; // ST1C_4 int v14; // ST18_4 int v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // edi volatile LONG *v18; // ebx volatile LONG **v19; // edi volatile LONG *v20; // ST20_4 volatile LONG *v21; // edi int v22; // ST1C_4 int v23; // ST18_4 int v24; // eax volatile LONG *v25; // eax int v26; // edi const CHAR *v27; // eax volatile LONG **v28; // edi volatile LONG *v29; // ST20_4 volatile LONG *v30; // edi int v31; // ST1C_4 int v32; // ST18_4 int v33; // eax volatile LONG *v34; // eax int v35; // edi const CHAR *v36; // eax int *v37; // eax const char *v38; // eax void (__thiscall ***v39)(_DWORD, signed int); // esi char v40; // [esp+3Ch] [ebp-17Ch] int v41; // [esp+50h] [ebp-168h] int v42; // [esp+54h] [ebp-164h] volatile LONG **v43; // [esp+58h] [ebp-160h] int v44; // [esp+5Ch] [ebp-15Ch] int v45; // [esp+60h] [ebp-158h] int v46; // [esp+64h] [ebp-154h] char v47; // [esp+68h] [ebp-150h] char v48; // [esp+69h] [ebp-14Fh] int v49; // [esp+168h] [ebp-50h] int v50; // [esp+16Ch] [ebp-4Ch] int v51; // [esp+170h] [ebp-48h] int v52; // [esp+174h] [ebp-44h] int v53; // [esp+178h] [ebp-40h] char v54; // [esp+17Ch] [ebp-3Ch] int v55; // [esp+1B4h] [ebp-4h] v2 = (int)this; v46 = 0; v3 = dword_BA6BA0; v55 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v4, (int)&v46, v3); if ( !v46 ) return 0; v5 = sub_8FB140(v46, (int)"Panel01", (int)&v45, (int)&v44, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"PartyJoinProposeWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v46; v55 = -1; if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v46, (int)"Theme", (int)&v45, (int)&v44, v8); else v9 = sub_8FB140(v46, (int)"Theme", (int)&v45, (int)&v44, 0); v10 = sub_8F3EB0(v45, v44, (int)v9, v2, 0, 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_421050(0); v41 = v11; v42 = 0; v43 = (volatile LONG **)(v2 + 392); while ( 1 ) { v12 = *(_DWORD *)(v11 + 384); v13 = v11; v14 = *(_DWORD *)(v11 + 384); v15 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v16 = sub_8F4A20(8, v42 * (v12 + 1) + 8, v15 - 16, v14, v13, v2, 0, 0); v17 = *v43; v18 = v16; if ( *v43 != v16 ) { if ( v17 && !InterlockedDecrement(v17 + 1) && v17 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v17)(v17, 1); *v43 = v18; if ( v18 ) InterlockedIncrement(v18 + 1); } (*(void (__stdcall **)(_DWORD))(**v43 + 240))(0); ++v43; if ( ++v42 >= 2 ) break; v11 = v41; } v19 = sub_8FB140(v46, (int)"BtnNor02", (int)&v45, (int)&v44, 0); sub_8FB650(v19, v46, (int)"BtnClick02"); sub_8FB650(v19, v46, (int)"BtnOver02"); v20 = sub_8FE0F0(v45, v44, (int)v19, v2, 0, 0, 0); *(_DWORD *)(v2 + 356) = v20; v21 = v20; v22 = sub_421050(0); v23 = (*(int (__thiscall **)(volatile LONG *))(*v21 + 148))(v21); v24 = (*(int (__thiscall **)(volatile LONG *))(*v21 + 144))(v21); v25 = sub_8F4A20(0, 0, v24, v23, v22, (int)v20, 0, 0); *(_DWORD *)(v2 + 364) = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v26 = **(_DWORD **)(v2 + 364); v27 = sub_40C190(-403640857); (*(void (__thiscall **)(_DWORD, const CHAR *))(v26 + 472))(*(_DWORD *)(v2 + 364), v27); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); v28 = sub_8FB140(v46, (int)"BtnNor03", (int)&v45, (int)&v44, 0); sub_8FB650(v28, v46, (int)"BtnClick03"); sub_8FB650(v28, v46, (int)"BtnOver03"); v29 = sub_8FE0F0(v45, v44, (int)v28, v2, 1, 0, 0); *(_DWORD *)(v2 + 360) = v29; v30 = v29; v31 = sub_421050(0); v32 = (*(int (__thiscall **)(volatile LONG *))(*v30 + 148))(v30); v33 = (*(int (__thiscall **)(volatile LONG *))(*v30 + 144))(v30); v34 = sub_8F4A20(0, 0, v33, v32, v31, (int)v29, 0, 0); *(_DWORD *)(v2 + 368) = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); v35 = **(_DWORD **)(v2 + 368); v36 = sub_40C190(-369824274); (*(void (__thiscall **)(_DWORD, const CHAR *))(v35 + 472))(*(_DWORD *)(v2 + 368), v36); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); v47 = 0; memset(&v48, 0, 0xFFu); LOBYTE(v49) = 0; memset((char *)&v49 + 1, 0, 0x3Fu); v37 = sub_4B0FA0((int)&dword_B9DC70, &v40); v49 = *v37; v50 = v37[1]; v51 = v37[2]; v52 = v37[3]; v53 = v37[4]; v54 = 0; v38 = sub_40C190(-705827093); sprintf(&v47, v38, &v49); sub_57AE20((_DWORD *)v2, &v47); v55 = -1; if ( v46 ) { v39 = (void (__thiscall ***)(_DWORD, signed int))v46; if ( !InterlockedDecrement((volatile LONG *)(v46 + 4)) ) { if ( v39 ) (**v39)(v39, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // B9DC70: using guessed type int dword_B9DC70; //----- (0057B570) -------------------------------------------------------- char __thiscall sub_57B570(volatile LONG *this, int a2, int a3) { char result; // al if ( !a2 ) return sub_57AD00(this); result = a2 - 1; if ( a2 == 1 ) result = sub_57AD90(this); return result; } //----- (0057B590) -------------------------------------------------------- float *__thiscall sub_57B590(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); sub_645370(v1 + 86); *(_DWORD *)v1 = &PartyJoinProposeWin::`vftable'; *((_DWORD *)v1 + 58) = &PartyJoinProposeWin::`vftable'; *((_DWORD *)v1 + 86) = &PartyJoinProposeWin::`vftable'; `eh vector constructor iterator'( v1 + 98, 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D3B20: using guessed type void *PartyJoinProposeWin::`vftable'; // 9D3B2C: using guessed type void *PartyJoinProposeWin::`vftable'; // 9D3B4C: using guessed type void *PartyJoinProposeWin::`vftable'; //----- (0057B620) -------------------------------------------------------- volatile LONG *__cdecl sub_57B620(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x190u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_57B590((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0057B750) -------------------------------------------------------- char *__thiscall sub_57B750(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 86); sub_57AFC0(this - 86); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0057B850) -------------------------------------------------------- int __thiscall sub_57B850(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*this[94] + 472))(a2); return result; } //----- (0057B870) -------------------------------------------------------- char __thiscall sub_57B870(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD *v3; // eax unsigned int v4; // eax int *v5; // eax int v6; // ecx int v7; // esi int v8; // edi int v9; // ebx int v10; // eax _DWORD *v11; // eax unsigned int v12; // eax int v13; // eax unsigned int v15; // [esp+4h] [ebp-78h] _DWORD **v16; // [esp+8h] [ebp-74h] char v17; // [esp+Ch] [ebp-70h] char v18; // [esp+20h] [ebp-5Ch] int v19; // [esp+2Ch] [ebp-50h] int v20; // [esp+30h] [ebp-4Ch] int v21; // [esp+34h] [ebp-48h] int v22; // [esp+38h] [ebp-44h] int v23; // [esp+3Ch] [ebp-40h] int v24; // [esp+40h] [ebp-3Ch] int v25; // [esp+44h] [ebp-38h] int v26; // [esp+48h] [ebp-34h] int v27; // [esp+4Ch] [ebp-30h] int v28; // [esp+50h] [ebp-2Ch] int v29; // [esp+54h] [ebp-28h] int v30; // [esp+58h] [ebp-24h] char v31; // [esp+5Ch] [ebp-20h] int v32; // [esp+60h] [ebp-1Ch] int v33; // [esp+64h] [ebp-18h] int v34; // [esp+68h] [ebp-14h] int v35; // [esp+6Ch] [ebp-10h] int v36; // [esp+70h] [ebp-Ch] char v37; // [esp+74h] [ebp-8h] v2 = this; v16 = this; sub_466A50(this[87]); sub_6C1530(&dword_B9DC70, &v21); v32 = v21; v34 = v23; v33 = v22; v35 = v24; v36 = v25; v37 = 0; v3 = sub_6C15B0(&dword_B9DC70, &v18); if ( v21 != *v3 || v22 != v3[1] || v23 != v3[2] || v24 != v3[3] || v25 != v3[4] ) { ((void (__thiscall *)(_DWORD *, int *))loc_466CA0)(v2[87], &v32); } else { v4 = ((int (__thiscall *)(_DWORD *, int *))loc_466CA0)(v2[87], &v32); sub_464C80(v2[87], v4, 0, 255, 255, 0); } v15 = 0; if ( dword_B9DCC4 ) { do { v5 = (int *)sub_6C10B0(&dword_B9DC70, v15); v6 = v5[3]; v7 = *v5; v8 = v5[1]; v9 = v5[2]; v10 = v5[4]; v19 = v6; v29 = v6; v20 = v10; v26 = v7; v27 = v8; v28 = v9; v30 = v10; v31 = 0; v11 = sub_6C15B0(&dword_B9DC70, &v17); if ( v7 != *v11 || v8 != v11[1] || v9 != v11[2] || v19 != v11[3] || v20 != v11[4] ) { ((void (__thiscall *)(_DWORD *, int *))loc_466CA0)(v16[87], &v26); } else { v12 = ((int (__thiscall *)(_DWORD *, int *))loc_466CA0)(v16[87], &v26); sub_464C80(v16[87], v12, 0, 255, 255, 0); } ++v15; } while ( v15 < dword_B9DCC4 ); v2 = v16; } sub_465130(v2[87]); v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v13 ) LOBYTE(v13) = sub_4E3710(v2[87], v2[86]); return v13; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (0057BA50) -------------------------------------------------------- int __thiscall sub_57BA50(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[87]; if ( result ) { v3 = (_DWORD *)this[86]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[86] + 300); result = sub_465130((_DWORD *)v1[87]); } } return result; } //----- (0057BAA0) -------------------------------------------------------- LONG __thiscall sub_57BAA0(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi signed int v12; // [esp+14h] [ebp-10h] v1 = this; *this = &PartyLootSetupWin::`vftable'; this[58] = &PartyLootSetupWin::`vftable'; sub_8F9E00(&unk_BA6B10, (_DWORD *)this[87]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[97]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[98]); v2 = v1 + 92; v12 = 3; do { v3 = *(v2 - 3); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(v2 - 3) = 0; } v4 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = 0; } ++v2; --v12; } while ( v12 ); v5 = v1[99]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[99] = 0; } v6 = v1[99]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[98]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[97]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); `eh vector destructor iterator'(v1 + 92, 4u, 3, sub_410C00); `eh vector destructor iterator'(v1 + 89, 4u, 3, sub_410C00); v9 = v1[87]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[86]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); return sub_8F10F0(v1); } // 9D42B8: using guessed type void *PartyLootSetupWin::`vftable'; // 9D42D4: using guessed type void *PartyLootSetupWin::`vftable'; //----- (0057BCC0) -------------------------------------------------------- char __thiscall sub_57BCC0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax char v18; // ST30_1 int v19; // ST34_4 int v20; // ST38_4 int v21; // ST3C_4 const CHAR *v22; // eax volatile LONG *v23; // eax char v24; // ST30_1 int v25; // ST34_4 int v26; // ST38_4 int v27; // ST3C_4 const CHAR *v28; // eax volatile LONG *v29; // eax char v30; // ST30_1 int v31; // ST34_4 int v32; // ST38_4 int v33; // ST3C_4 const CHAR *v34; // eax volatile LONG *v35; // eax char v36; // ST30_1 int v37; // ST34_4 int v38; // ST38_4 int v39; // ST3C_4 const CHAR *v40; // eax volatile LONG *v41; // eax volatile LONG *v42; // eax volatile LONG *v43; // eax volatile LONG *v44; // eax char v45; // ST30_1 int v46; // ST34_4 int v47; // ST38_4 int v48; // edi int v49; // ST3C_4 const CHAR *v50; // eax volatile LONG *v51; // eax char v52; // ST30_1 int v53; // ST34_4 int v54; // ST38_4 int v55; // ST3C_4 const CHAR *v56; // eax volatile LONG *v57; // eax volatile LONG *v58; // eax signed int v59; // ebx volatile LONG *v60; // edi int v61; // eax volatile LONG *v62; // eax volatile LONG *v63; // edi volatile LONG *v64; // ebx int v65; // edi const CHAR *v66; // eax volatile LONG *v67; // eax const CHAR *v68; // eax volatile LONG *v69; // eax const CHAR *v70; // eax volatile LONG *v71; // eax const CHAR *v72; // eax volatile LONG *v73; // eax int v74; // eax volatile LONG *v75; // eax volatile LONG *v76; // ebx const CHAR *v77; // eax volatile LONG *v78; // eax const CHAR *v79; // eax volatile LONG *v80; // eax const CHAR *v81; // eax volatile LONG *v82; // eax const CHAR *v83; // eax volatile LONG *v84; // eax int v85; // eax volatile LONG *v86; // eax volatile LONG *v87; // ebx void (__thiscall ***v88)(_DWORD, signed int); // esi void (__thiscall ***v89)(_DWORD, signed int); // esi int v90[5]; // [esp+54h] [ebp-30h] int v91; // [esp+68h] [ebp-1Ch] int v92; // [esp+6Ch] [ebp-18h] int v93; // [esp+70h] [ebp-14h] int v94; // [esp+74h] [ebp-10h] int v95; // [esp+80h] [ebp-4h] volatile LONG *v96; // [esp+8Ch] [ebp+8h] volatile LONG *v97; // [esp+8Ch] [ebp+8h] v2 = this; v94 = 0; v3 = dword_BA6BA0; v95 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\PartyRootOption.nif"); sub_8F66B0(v4, (int)&v94, v3); if ( !v94 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v94 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v91 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v95) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4)) == 0 ) { LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v94; v95 = -1; if ( v94 && !InterlockedDecrement((volatile LONG *)(v94 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v94, (int)"Frame", (int)&v92, (int)&v93, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, a2, (int)"PartyLootSetupWin", 0) ) { v14 = v92; v15 = v93; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v94, (int)"Theme", (int)&v92, (int)&v93, v16); else v17 = sub_8FB140(v94, (int)"Theme", (int)&v92, (int)&v93, 0); sub_8F3EB0(v92 - v14, v93 - v15, (int)v17, (int)v2, 0, 0); sub_456260(v90); LOBYTE(v95) = 2; sub_455FF0(v90, (int)v2); sub_456000(v90, v14, v15); sub_456380(v90, v94); sub_456820(v90, (int)"Panel01", 0); sub_456820(v90, (int)"Panel02", 0); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = sub_40A910(-1131384712); v23 = sub_456760(v90, (int)"WinTitle", (int)v22, v18, v19, v20, v21, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 1); sub_4563D0(v90, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v24 = dword_AA8C68; v25 = dword_AA8C6C; v26 = dword_AA8C70; v27 = dword_AA8C74; v28 = sub_4090F0(-1802407183); v29 = sub_456760(v90, (int)"GainMethod", (int)v28, v24, v25, v26, v27, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 4); v30 = dword_AA8C68; v31 = dword_AA8C6C; v32 = dword_AA8C70; v33 = dword_AA8C74; v34 = sub_4090F0(-817367251); v35 = sub_456760(v90, (int)"ItemGrade", (int)v34, v30, v31, v32, v33, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 4); v36 = dword_AA8C68; v37 = dword_AA8C6C; v38 = dword_AA8C70; v39 = dword_AA8C74; v40 = sub_40A910(1682318900); v41 = sub_456760(v90, (int)"RootSelect", (int)v40, v36, v37, v38, v39, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v41 + 488))(v41, 4); v42 = sub_4563D0(v90, 1, (int)"GainMethodNor", (int)"GainMethodClick", (int)"GainMethodOver", 0, 0); sub_56FF80(v2 + 89, (int)v42); v43 = sub_4563D0(v90, 2, (int)"ItemGradeNor", (int)"ItemGradeClick", (int)"ItemGradeOver", 0, 0); sub_56FF80(v2 + 90, (int)v43); v44 = sub_4563D0(v90, 3, (int)"RootSelectNor", (int)"RootSelectClick", (int)"RootSelectOver", 0, 0); sub_56FF80(v2 + 91, (int)v44); v45 = dword_AA8C68; v46 = dword_AA8C6C; v47 = dword_AA8C70; v48 = (int)(v2 + 92); v49 = dword_AA8C74; v50 = sub_40C190(-447790782); v51 = sub_456760(v90, (int)"GainMethod_Text", (int)v50, v45, v46, v47, v49, 5); sub_56FF80(v2 + 92, (int)v51); v52 = dword_AA8C68; v53 = dword_AA8C6C; v54 = dword_AA8C70; v55 = dword_AA8C74; v56 = sub_4090F0(225928826); v57 = sub_456760(v90, (int)"ItemGrade_Text", (int)v56, v52, v53, v54, v55, 5); sub_56FF80(v2 + 93, (int)v57); v58 = sub_456760( v90, (int)"RootSelect_Text", (int)&unk_9D3D85, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); sub_56FF80(v2 + 94, (int)v58); v59 = 3; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v48 + 488))(4); v48 += 4; --v59; } while ( v59 ); v2[95] = 0; v2[96] = 0; v60 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v94 + 72))("HelpLinkNor") ) sub_4563D0(v90, 5, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, v60); v61 = sub_43D0D0(1u); v62 = sub_58E5D0(v61, 4, 4, 0); v63 = v2[87]; v64 = v62; if ( v63 != v62 ) { if ( v63 && !InterlockedDecrement(v63 + 1) && v63 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v63)(v63, 1); v2[87] = v64; if ( v64 ) InterlockedIncrement(v64 + 1); } v65 = (int)(v2 + 58); (**((void (__thiscall ***)(int, int))v2[87] + 58))((int)(v2[87] + 58), (int)(v2 + 58)); sub_58DFD0(v2[87]); v66 = sub_40C190(-447790782); v67 = sub_58E290(v66, 0, 0, 0, 0, 0, 0); *((_DWORD *)v67 + 83) = 1028; sub_58E080(v2[87], (int)(v2 + 58), (int)v67); v68 = sub_40C190(2024317391); v69 = sub_58E290(v68, 0, 0, 0, 0, 0, 0); *((_DWORD *)v69 + 83) = 1029; sub_58E080(v2[87], (int)(v2 + 58), (int)v69); v70 = sub_40A910(2040035508); v71 = sub_58E290(v70, 0, 0, 0, 0, 0, 0); *((_DWORD *)v71 + 83) = 1030; sub_58E080(v2[87], (int)(v2 + 58), (int)v71); v72 = sub_40A910(743542120); v73 = sub_58E290(v72, 0, 0, 0, 0, 0, 0); *((_DWORD *)v73 + 83) = 1032; sub_58E080(v2[87], (int)(v2 + 58), (int)v73); sub_58D930(v2[87], 0); (*(void (__stdcall **)(_DWORD))(*v2[87] + 256))(0); v74 = sub_43D0D0(1u); v75 = sub_58E5D0(v74, 4, 4, 0); v76 = v2[97]; v96 = v75; if ( v76 != v75 ) { if ( v76 ) { if ( !InterlockedDecrement(v76 + 1) && v76 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v76)(v76, 1); v75 = v96; } v2[97] = v75; if ( v75 ) InterlockedIncrement(v75 + 1); } (**((void (__thiscall ***)(int, int))v2[97] + 58))((int)(v2[97] + 58), (int)(v2 + 58)); sub_58DFD0(v2[97]); v77 = sub_4090F0(225928826); v78 = sub_58E290(v77, 0, 0, 0, 0, 0, 0); *((_DWORD *)v78 + 83) = 1038; sub_58E080(v2[97], v65, (int)v78); v79 = sub_4090F0(225994362); v80 = sub_58E290(v79, 0, 0, 0, 0, 0, 0); *((_DWORD *)v80 + 83) = 1039; sub_58E080(v2[97], v65, (int)v80); v81 = sub_4090F0(226059898); v82 = sub_58E290(v81, 0, 0, 0, 0, 0, 0); *((_DWORD *)v82 + 83) = 1040; sub_58E080(v2[97], v65, (int)v82); v83 = sub_4090F0(226125434); v84 = sub_58E290(v83, 0, 0, 0, 0, 0, 0); *((_DWORD *)v84 + 83) = 1041; sub_58E080(v2[97], v65, (int)v84); sub_58D930(v2[97], 0); (*(void (__stdcall **)(_DWORD))(*v2[97] + 256))(0); v85 = sub_43D0D0(1u); v86 = sub_58E5D0(v85, 4, 4, 0); v87 = v2[98]; v97 = v86; if ( v87 != v86 ) { if ( v87 ) { if ( !InterlockedDecrement(v87 + 1) && v87 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v87)(v87, 1); v86 = v97; } v2[98] = v86; if ( v86 ) InterlockedIncrement(v86 + 1); } (**((void (__thiscall ***)(int, int))v2[98] + 58))((int)(v2[98] + 58), (int)(v2 + 58)); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v95) = 1; sub_4562E0(v90); v88 = (void (__thiscall ***)(_DWORD, signed int))v91; LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v91 + 4)) ) (**v88)(v88, 1); v89 = (void (__thiscall ***)(_DWORD, signed int))v94; v95 = -1; if ( v94 && !InterlockedDecrement((volatile LONG *)(v94 + 4)) && v89 ) (**v89)(v89, 1); result = 1; } else { LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v94; v95 = -1; if ( !v94 || InterlockedDecrement((volatile LONG *)(v94 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0057C630) -------------------------------------------------------- int __thiscall sub_57C630(_DWORD **this) { int v1; // edi int v2; // ecx volatile LONG *v3; // eax unsigned int i; // esi int *v5; // eax int v6; // edx int v7; // ecx int v8; // ST30_4 int v9; // ebx int v10; // eax volatile LONG *v11; // eax int v13; // [esp+20h] [ebp-74h] int v14; // [esp+24h] [ebp-70h] int v15; // [esp+28h] [ebp-6Ch] int v16; // [esp+2Ch] [ebp-68h] int v17; // [esp+30h] [ebp-64h] int v18; // [esp+34h] [ebp-60h] int v19; // [esp+38h] [ebp-5Ch] int v20; // [esp+3Ch] [ebp-58h] int v21; // [esp+40h] [ebp-54h] int v22; // [esp+44h] [ebp-50h] int v23; // [esp+48h] [ebp-4Ch] int v24; // [esp+4Ch] [ebp-48h] int v25; // [esp+50h] [ebp-44h] int v26; // [esp+54h] [ebp-40h] int v27; // [esp+58h] [ebp-3Ch] char v28; // [esp+5Ch] [ebp-38h] CHAR String[4]; // [esp+60h] [ebp-34h] int v30; // [esp+64h] [ebp-30h] int v31; // [esp+68h] [ebp-2Ch] int v32; // [esp+6Ch] [ebp-28h] int v33; // [esp+70h] [ebp-24h] char v34; // [esp+74h] [ebp-20h] CHAR v35[4]; // [esp+78h] [ebp-1Ch] int v36; // [esp+7Ch] [ebp-18h] int v37; // [esp+80h] [ebp-14h] int v38; // [esp+84h] [ebp-10h] int v39; // [esp+88h] [ebp-Ch] char v40; // [esp+8Ch] [ebp-8h] v1 = (int)this; sub_58DFD0(this[98]); sub_6C15B0(&dword_B9DC70, &v18); v23 = v18; v24 = v19; v26 = v21; v2 = *(_DWORD *)(v1 + 376); v25 = v20; v27 = v22; v28 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v2 + 472))(&v23); sub_6C1530(&dword_B9DC70, &v13); v31 = v15; *(_DWORD *)String = v13; v30 = v14; v32 = v16; v33 = v17; v34 = 0; v3 = sub_58E290(String, 0, 0, 0, 0, 0, 0); *((_DWORD *)v3 + 83) = 1042; sub_58E080(*(_DWORD **)(v1 + 392), v1, (int)v3); for ( i = 0; i < dword_B9DCC4; ++i ) { v5 = (int *)sub_6C10B0(&dword_B9DC70, i); v6 = v5[1]; v7 = *v5; v8 = v5[2]; v9 = v5[3]; v10 = v5[4]; v38 = v9; v39 = v10; v36 = v6; *(_DWORD *)v35 = v7; v37 = v8; v40 = 0; v11 = sub_58E290(v35, 0, 0, 0, 0, 0, 0); *((_DWORD *)v11 + 83) = i + 1043; sub_58E080(*(_DWORD **)(v1 + 392), v1, (int)v11); } sub_58D930(*(_DWORD **)(v1 + 392), 0); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 392) + 256))(*(_DWORD *)(v1 + 392), 0); } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (0057C7A0) -------------------------------------------------------- void __thiscall sub_57C7A0(_DWORD **this, int a2) { int *v2; // eax _DWORD **v3; // [esp+Ch] [ebp-1Ch] char v4; // [esp+10h] [ebp-18h] v3 = this; if ( a2 ) v2 = (int *)sub_6C10B0(&dword_B9DC70, a2 - 1); else v2 = sub_6C1530(&dword_B9DC70, &v4); sub_4CC780(v3[74], *v2, v2[1], v2[2], v2[3], v2[4]); } // B9DC70: using guessed type int dword_B9DC70; //----- (0057C820) -------------------------------------------------------- void __thiscall sub_57C820(int *this, int a2, int a3) { int *v3; // esi int v4; // edi void (__thiscall **v5)(int, int); // ST14_4 int v6; // ebx int v7; // ebx int v8; // eax int v9; // edi int v10; // eax int v11; // edi int v12; // eax int v13; // edi void (__thiscall **v14)(_DWORD *, int); // ST14_4 int v15; // ebx int v16; // ebx int v17; // eax int v18; // edi int v19; // eax int v20; // edi int v21; // eax int v22; // edi void (__thiscall **v23)(_DWORD *, int); // ST14_4 int v24; // ebx int v25; // ebx int v26; // eax int v27; // edi int v28; // eax int v29; // edi int v30; // eax _DWORD *v31; // eax int v32; // [esp+10h] [ebp+8h] _DWORD *v33; // [esp+10h] [ebp+8h] _DWORD *v34; // [esp+10h] [ebp+8h] v3 = this; switch ( a2 ) { case 0: sub_8F86A0(&unk_BA6B10, this); break; case 1: if ( (unsigned __int8)sub_6C1560(&dword_B9DC70) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[87] + 260))() ) { sub_8FA190(&unk_BA6B10, v3[87]); } else { v4 = v3[89]; v32 = v3[87]; v5 = (void (__thiscall **)(int, int))(*(_DWORD *)v3[87] + 308); v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 168))(v3[89]); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4) + v6; v8 = (*(int (__thiscall **)(int *))(*v3 + 168))(v3); v9 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 164))(v4, v7 + v8); v10 = (*(int (__thiscall **)(int *))(*v3 + 164))(v3); (*v5)(v32, v10 + v9); v11 = (*(int (**)(void))(*(_DWORD *)v3[89] + 144))(); v12 = (*(int (**)(void))(*(_DWORD *)v3[87] + 148))(); (*(void (__stdcall **)(int, int))(*(_DWORD *)v3[87] + 540))(v11 - 22, v12); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v3[87]); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3[87] + 520))(v3[87], 0); } } break; case 2: if ( (unsigned __int8)sub_6C1560(&dword_B9DC70) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[97] + 260))() ) { sub_8FA190(&unk_BA6B10, v3[97]); } else { v13 = v3[90]; v33 = (_DWORD *)v3[97]; v14 = (void (__thiscall **)(_DWORD *, int))(*v33 + 308); v15 = (*(int (__thiscall **)(int))(*(_DWORD *)v13 + 168))(v3[90]); v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v13 + 148))(v13) + v15; v17 = (*(int (__thiscall **)(int *))(*v3 + 168))(v3); v18 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v13 + 164))(v13, v16 + v17); v19 = (*(int (__thiscall **)(int *))(*v3 + 164))(v3); (*v14)(v33, v19 + v18); v20 = (*(int (**)(void))(*(_DWORD *)v3[90] + 144))(); v21 = (*(int (**)(void))(*(_DWORD *)v3[97] + 148))(); (*(void (__stdcall **)(int, int))(*(_DWORD *)v3[97] + 540))(v20 - 22, v21); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[97] + 520))(0); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v3[97]); } } break; case 3: if ( (unsigned __int8)sub_6C1560(&dword_B9DC70) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v3[98] + 260))() ) { sub_8FA190(&unk_BA6B10, v3[98]); } else { sub_57C630((_DWORD **)v3); v22 = v3[91]; v34 = (_DWORD *)v3[98]; v23 = (void (__thiscall **)(_DWORD *, int))(*v34 + 308); v24 = (*(int (__thiscall **)(int))(*(_DWORD *)v22 + 148))(v3[91]); v25 = (*(int (__thiscall **)(int))(*(_DWORD *)v22 + 168))(v22) + v24; v26 = (*(int (__thiscall **)(int *))(*v3 + 168))(v3); v27 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v22 + 164))(v22, v25 + v26); v28 = (*(int (__thiscall **)(int *))(*v3 + 164))(v3); (*v23)(v34, v28 + v27); v29 = (*(int (**)(void))(*(_DWORD *)v3[91] + 144))(); v30 = (*(int (**)(void))(*(_DWORD *)v3[98] + 148))(); (*(void (__stdcall **)(int, int))(*(_DWORD *)v3[98] + 540))(v29 - 22, v30); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[98] + 520))(0); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v3[98]); } } break; case 5: v31 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v31 ) sub_4A5170(v31, "PartyRootOption"); break; default: return; } } // B9DC70: using guessed type int dword_B9DC70; //----- (0057CBD0) -------------------------------------------------------- void __thiscall sub_57CBD0(int this, int a2, _DWORD *a3, int a4) { if ( a2 == 15 ) { switch ( *a3 ) { case 0x404: sub_4B7FA0(*(_DWORD **)(this + 64), 0, *(_BYTE *)(this + 152)); break; case 0x405: sub_4B7FA0(*(_DWORD **)(this + 64), 1, *(_BYTE *)(this + 152)); break; case 0x406: sub_4B7FA0(*(_DWORD **)(this + 64), 2, *(_BYTE *)(this + 152)); break; case 0x408: sub_4B7FA0(*(_DWORD **)(this + 64), 3, *(_BYTE *)(this + 152)); break; case 0x40E: sub_4B7FA0(*(_DWORD **)(this + 64), *(_DWORD *)(this + 148), 0); break; case 0x40F: sub_4B7FA0(*(_DWORD **)(this + 64), *(_DWORD *)(this + 148), 1); break; case 0x410: sub_4B7FA0(*(_DWORD **)(this + 64), *(_DWORD *)(this + 148), 2); break; case 0x411: sub_4B7FA0(*(_DWORD **)(this + 64), *(_DWORD *)(this + 148), 3); break; case 0x412: sub_57C7A0((_DWORD **)(this - 232), 0); break; case 0x413: sub_57C7A0((_DWORD **)(this - 232), 1); break; case 0x414: sub_57C7A0((_DWORD **)(this - 232), 2); break; case 0x415: sub_57C7A0((_DWORD **)(this - 232), 3); break; case 0x416: sub_57C7A0((_DWORD **)(this - 232), 4); break; default: return; } } } //----- (0057CD50) -------------------------------------------------------- int __thiscall sub_57CD50(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int *v3; // ebx int v4; // edi const CHAR *v5; // eax int result; // eax int *v7; // ebx int v8; // edi const CHAR *v9; // eax int *v10; // ebx int v11; // edi const CHAR *v12; // eax v2 = this; switch ( a2 ) { case 0u: v3 = (int *)this[92]; v4 = *v3; v5 = sub_40C190(-447790782); (*(void (__thiscall **)(int *, const CHAR *))(v4 + 472))(v3, v5); result = a2; v2[95] = a2; return result; case 1u: v7 = (int *)this[92]; v8 = *v7; v9 = sub_40C190(2024317391); goto LABEL_6; case 2u: v10 = (int *)this[92]; v11 = *v10; v12 = sub_40A910(2040035508); (*(void (__thiscall **)(int *, const CHAR *))(v11 + 472))(v10, v12); result = a2; v2[95] = a2; return result; case 3u: v7 = (int *)this[92]; v8 = *v7; v9 = sub_40A910(743542120); LABEL_6: (*(void (__thiscall **)(int *, const CHAR *))(v8 + 472))(v7, v9); break; default: break; } result = a2; v2[95] = a2; return result; } //----- (0057CE30) -------------------------------------------------------- int __thiscall sub_57CE30(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int *v3; // ebx int v4; // edi const CHAR *v5; // eax int result; // eax int *v7; // ebx int v8; // edi const CHAR *v9; // eax int v10; // [esp-Ch] [ebp-10h] int v11; // [esp-Ch] [ebp-10h] v2 = this; switch ( a2 ) { case 0u: v10 = 225928826; goto LABEL_5; case 1u: v11 = 225994362; goto LABEL_7; case 2u: v10 = 226059898; LABEL_5: v3 = (int *)this[93]; v4 = *v3; v5 = sub_4090F0(v10); (*(void (__thiscall **)(int *, const CHAR *))(v4 + 472))(v3, v5); result = a2; v2[96] = a2; return result; case 3u: v11 = 226125434; LABEL_7: v7 = (int *)this[93]; v8 = *v7; v9 = sub_4090F0(v11); (*(void (__thiscall **)(int *, const CHAR *))(v8 + 472))(v7, v9); break; default: break; } result = a2; v2[96] = a2; return result; } //----- (0057CED0) -------------------------------------------------------- _DWORD *__thiscall sub_57CED0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &PartyLootSetupWin::`vftable'; v1[58] = &PartyLootSetupWin::`vftable'; v1[86] = 0; v1[87] = 0; `eh vector constructor iterator'( v1 + 89, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 92, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[97] = 0; v1[98] = 0; v1[99] = 0; v2 = v1[87]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0; } v3 = v1[86]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[86] = 0; } v4 = v1[97]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[97] = 0; } v5 = v1[98]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[98] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D42B8: using guessed type void *PartyLootSetupWin::`vftable'; // 9D42D4: using guessed type void *PartyLootSetupWin::`vftable'; //----- (0057D040) -------------------------------------------------------- volatile LONG *__cdecl sub_57D040(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x190u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_57CED0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0057D2B0) -------------------------------------------------------- void __thiscall sub_57D2B0(int this, int a2, int a3) { int v3; // esi signed int v4; // eax _DWORD *v5; // eax char *v6; // eax _DWORD *v7; // eax char *v8; // [esp+8h] [ebp-54h] unsigned int v9; // [esp+1Ch] [ebp-40h] char v10[4]; // [esp+24h] [ebp-38h] int v11; // [esp+28h] [ebp-34h] int v12; // [esp+2Ch] [ebp-30h] int v13; // [esp+30h] [ebp-2Ch] int v14; // [esp+34h] [ebp-28h] int v15; // [esp+38h] [ebp-24h] int v16; // [esp+3Ch] [ebp-20h] int v17; // [esp+40h] [ebp-1Ch] int v18; // [esp+44h] [ebp-18h] int v19; // [esp+48h] [ebp-14h] int v20; // [esp+58h] [ebp-4h] v3 = this; switch ( a2 ) { case 0: sub_8F86A0(&unk_BA6B10, (_DWORD *)this); sub_8F28E0((_BYTE *)v3); break; case 3: sub_57BA50((_DWORD *)this); break; case 4: v4 = sub_464F50(*(_DWORD **)(this + 348)); if ( v4 >= 0 ) { v5 = sub_4650C0(*(_DWORD **)(v3 + 348), v4, 0); sub_4019E0(&v8, v5); v6 = v8; v20 = 0; if ( v9 < 0x10 ) v6 = (char *)&v8; sub_416970(v10, v6); v17 = v12; v16 = v11; v15 = *(_DWORD *)v10; v19 = v14; v18 = v13; sub_6F36A0(&off_AB7F2C, 14, 90, &v15, 0x14u); sub_8F86A0(&unk_BA6B10, (_DWORD *)v3); sub_8F28E0((_BYTE *)v3); sub_636A10(&v8); } break; case 5: v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_4A5170(v7, "RaidRootSelect"); break; default: return; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0057D400) -------------------------------------------------------- char __thiscall sub_57D400(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // edi volatile LONG *v15; // eax volatile LONG **v16; // eax char v17; // ST1C_1 int v18; // ST20_4 int v19; // ST24_4 int v20; // ST28_4 const CHAR *v21; // eax volatile LONG *v22; // eax _DWORD *v23; // edi int *v24; // edi _DWORD *v25; // edi volatile LONG *v26; // edi volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax int v30; // eax volatile LONG *v31; // edi int v32; // eax int v33; // eax volatile LONG *v34; // esi void (__thiscall ***v35)(_DWORD, signed int); // esi void (__thiscall ***v36)(_DWORD, signed int); // esi int v37; // [esp+30h] [ebp-80h] int v38; // [esp+34h] [ebp-7Ch] int v39; // [esp+38h] [ebp-78h] char v40; // [esp+40h] [ebp-70h] int v41; // [esp+44h] [ebp-6Ch] int v42; // [esp+48h] [ebp-68h] int v43; // [esp+4Ch] [ebp-64h] int v44; // [esp+50h] [ebp-60h] int v45[5]; // [esp+54h] [ebp-5Ch] int v46; // [esp+68h] [ebp-48h] volatile LONG *v47; // [esp+6Ch] [ebp-44h] int v48; // [esp+70h] [ebp-40h] int v49; // [esp+74h] [ebp-3Ch] int v50; // [esp+78h] [ebp-38h] int v51; // [esp+7Ch] [ebp-34h] int v52; // [esp+80h] [ebp-30h] void *v53; // [esp+84h] [ebp-2Ch] int v54; // [esp+94h] [ebp-1Ch] unsigned int v55; // [esp+98h] [ebp-18h] int v56; // [esp+ACh] [ebp-4h] v2 = this; v49 = a2; v52 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v56 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\RaidRootSelect.nif"); sub_8F66B0(v4, (int)&v52, v3); if ( !v52 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v52 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v46 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v56) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v47 = v9) == 0) ) { LOBYTE(v56) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v52; v56 = -1; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v52, (int)"Frame", (int)&v51, (int)&v50, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, v49, (int)"ExpeditionLootSelectWin", 0) ) { v14 = v51; v48 = v51; v49 = v50; v15 = (volatile LONG *)sub_43D0D0(0x13u); if ( v15 ) v16 = sub_8FB140(v52, (int)"Theme", (int)&v51, (int)&v50, v15); else v16 = sub_8FB140(v52, (int)"Theme", (int)&v51, (int)&v50, 0); sub_8F3EB0(v51 - v14, v50 - v49, (int)v16, (int)v2, 0, 0); sub_456260(v45); LOBYTE(v56) = 2; sub_455FF0(v45, (int)v2); sub_456000(v45, v14, v49); sub_456380(v45, v52); sub_456820(v45, (int)"Panel01", 0); sub_456820(v45, (int)"Panel02", 0); v17 = dword_AA8C68; v18 = dword_AA8C6C; v19 = dword_AA8C70; v20 = dword_AA8C74; v21 = sub_40A910(1682318900); v22 = sub_456760(v45, (int)"WinTitle", (int)v21, v17, v18, v19, v20, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 1); v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; v43 = 0; v44 = 0; LOBYTE(v56) = 3; v23 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v37, 1); *v23 = 1; v23[1] = v52; v55 = 15; v54 = 0; LOBYTE(v53) = 0; sub_4018E0(&v53, "ColumnBarNor", 0xCu); v24 = v23 + 18; LOBYTE(v56) = 4; sub_40B060(v24, (const void **)&v53); LOBYTE(v56) = 3; if ( v55 >= 0x10 ) operator delete(v53); v55 = 15; v54 = 0; LOBYTE(v53) = 0; sub_4018E0(&v53, "ColumnBarOver", 0xDu); LOBYTE(v56) = 5; sub_40B060(v24, (const void **)&v53); LOBYTE(v56) = 3; if ( v55 >= 0x10 ) operator delete(v53); v55 = 15; v54 = 0; LOBYTE(v53) = 0; sub_4018E0(&v53, "ColumnBarClick", 0xEu); LOBYTE(v56) = 6; sub_40B060(v24, (const void **)&v53); LOBYTE(v56) = 3; if ( v55 >= 0x10 ) operator delete(v53); v25 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v37, 2); *v25 = 2; v55 = 15; v54 = 0; LOBYTE(v53) = 0; sub_4018E0(&v53, "Column", 6u); LOBYTE(v56) = 7; sub_40B060(v25 + 18, (const void **)&v53); LOBYTE(v56) = 3; if ( v55 >= 0x10 ) operator delete(v53); v25[1] = v52; v55 = 15; v54 = 0; LOBYTE(v53) = 0; v41 = 3; v42 = 0; sub_466680(&v37, 0); v26 = v47; v27 = sub_8FB140(v52, (int)"Textbox", (int)&v51, (int)&v50, v47); v28 = sub_466330(v51 - v48, v50 - v49, (int)v27, *(float *)&v2, (int **)&v37, 0, 0); v2[87] = v28; *((_DWORD *)v28 + 88) = 4; sub_464D00(v2[87], 0); sub_465130(v2[87]); v29 = sub_8FB140(v52, (int)"SlideBar_SlideBtnMiddle", (int)&v51, (int)&v50, v26); v30 = sub_464310(v52, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v29, 0, v2); v2[86] = (volatile LONG *)v30; *(_DWORD *)(v30 + 312) = 3; *((_DWORD *)v2[86] + 76) = 1; v31 = v2[86]; v48 = *v2[86]; v32 = (*(int (__thiscall **)(volatile LONG *))(v48 + 168))(v31); v33 = (*(int (__thiscall **)(volatile LONG *, int))(*v31 + 164))(v31, v32); (*(void (__thiscall **)(volatile LONG *, int))(v48 + 308))(v2[86], v33); sub_4638F0(v2[86], *((_DWORD *)v2[87] + 84)); sub_4563D0(v45, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.69999999, 0.1); v34 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v52 + 72))("HelpLinkNor") ) sub_4563D0(v45, 5, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, v34); LOBYTE(v56) = 2; sub_40AE10((void **)&v37); LOBYTE(v56) = 1; sub_4562E0(v45); v35 = (void (__thiscall ***)(_DWORD, signed int))v46; LOBYTE(v56) = 0; if ( !InterlockedDecrement((volatile LONG *)(v46 + 4)) ) (**v35)(v35, 1); v36 = (void (__thiscall ***)(_DWORD, signed int))v52; v56 = -1; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v36 ) (**v36)(v36, 1); result = 1; } else { LOBYTE(v56) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v52; v56 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0057DA00) -------------------------------------------------------- void *__thiscall sub_57DA00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PartyLootSelectWin::`vftable'; *((_DWORD *)this + 58) = &PartyLootSelectWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D4078: using guessed type void *PartyLootSelectWin::`vftable'; // 9D4094: using guessed type void *PartyLootSelectWin::`vftable'; //----- (0057DA40) -------------------------------------------------------- void *__thiscall sub_57DA40(void *this, char a2) { void *v2; // esi v2 = this; sub_57BAA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0057DA70) -------------------------------------------------------- signed int __thiscall sub_57DA70(_DWORD *this, int a2) { _DWORD *v2; // ecx signed int result; // eax v2 = (_DWORD *)this[91]; if ( v2 ) result = sub_750430(v2, a2); return result; } //----- (0057DA90) -------------------------------------------------------- _DWORD *__thiscall sub_57DA90(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx _DWORD *result; // eax v2 = (_DWORD *)this[91]; if ( v2 ) result = sub_7504D0(v2, a2); return result; } //----- (0057DB70) -------------------------------------------------------- int __thiscall sub_57DB70(_DWORD *this, int a2) { _DWORD *v2; // eax int result; // eax int i; // ecx v2 = (_DWORD *)this[91]; if ( !v2 || a2 >= *v2 ) return 0; result = v2[1]; for ( i = 0; result; ++i ) { if ( i >= a2 ) break; result = *(_DWORD *)(result + 160); } return result; } //----- (0057DBB0) -------------------------------------------------------- void __thiscall sub_57DBB0(_DWORD *this) { _DWORD *v1; // ecx v1 = (_DWORD *)this[91]; if ( v1 ) sub_750500(v1); } //----- (0057DBC0) -------------------------------------------------------- char sub_57DBC0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "PartyMatching"); return (char)v0; } //----- (0057DBF0) -------------------------------------------------------- char __thiscall sub_57DBF0(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (0057DC20) -------------------------------------------------------- int __thiscall sub_57DC20(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (0057DC80) -------------------------------------------------------- void __thiscall sub_57DC80(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx int v3; // edi _DWORD *v4; // ecx int v5; // esi signed int v6; // eax int v7; // ecx int v8; // edi _DWORD *v9; // ecx int *v10; // eax _DWORD *v11; // eax int v12; // ecx int v13; // edx int v14; // ecx int v15; // edx int v16; // eax int *v17; // eax int v18; // ecx int v19; // edx int v20; // esi int v21; // edi int v22; // eax signed int v23; // [esp+1Ch] [ebp-C4h] signed int v24; // [esp+20h] [ebp-C0h] char v25; // [esp+27h] [ebp-B9h] char v26; // [esp+28h] [ebp-B8h] char v27; // [esp+A8h] [ebp-38h] int v28; // [esp+ACh] [ebp-34h] int v29; // [esp+B0h] [ebp-30h] int v30; // [esp+B4h] [ebp-2Ch] int v31; // [esp+B8h] [ebp-28h] int v32; // [esp+BCh] [ebp-24h] char v33; // [esp+C0h] [ebp-20h] int v34; // [esp+C4h] [ebp-1Ch] int v35; // [esp+C8h] [ebp-18h] int v36; // [esp+CCh] [ebp-14h] int v37; // [esp+D0h] [ebp-10h] int v38; // [esp+D4h] [ebp-Ch] char v39; // [esp+D8h] [ebp-8h] v1 = this; v2 = (_DWORD *)this[86]; if ( v2 && v1[91] ) { sub_466A50(v2); v25 = 0; if ( (char *)v1 + strlen((const char *)v1 + 372) + 373 != (char *)v1 + 373 ) v25 = 1; v3 = 50; v24 = 50; v23 = 0; do { v4 = (_DWORD *)v1[91]; if ( !v4 ) break; if ( (signed int)(unsigned __int16)v23 >= *v4 ) break; v5 = v4[1]; v6 = 0; if ( !v5 ) break; while ( v6 < (unsigned __int16)v23 ) { v5 = *(_DWORD *)(v5 + 160); ++v6; if ( !v5 ) goto LABEL_17; } if ( !v5 ) break; v34 = *(_DWORD *)(v5 + 6); v35 = *(_DWORD *)(v5 + 10); v36 = *(_DWORD *)(v5 + 14); v37 = *(_DWORD *)(v5 + 18); v38 = *(_DWORD *)(v5 + 22); v7 = v1[86]; v39 = 0; v8 = ((int (__thiscall *)(int, int *))loc_466CA0)(v7, &v34); if ( v25 == 1 && !strcmp((const char *)&v34, (const char *)v1 + 372) ) v24 = v23; strncpy(&v26, (const char *)(v5 + 26), 0x80u); v9 = (_DWORD *)v1[86]; v27 = 0; sub_4661A0(v9, v8, 1, &v26); v3 = v24; ++v23; } while ( v23 < 50 ); LABEL_17: if ( v3 == 50 ) { if ( v25 == 1 ) memset(v1 + 93, 0, 0x100u); } else { sub_464F90((_DWORD *)v1[86], v3); v10 = (int *)v1[91]; if ( !v10 ) goto LABEL_31; if ( v3 >= *v10 ) goto LABEL_31; v11 = (_DWORD *)v10[1]; v12 = 0; if ( !v11 ) goto LABEL_31; while ( v12 < v3 ) { v11 = (_DWORD *)v11[40]; ++v12; if ( !v11 ) goto LABEL_31; } if ( !v11 ) goto LABEL_31; v13 = *(_DWORD *)((char *)v11 + 10); v34 = *(_DWORD *)((char *)v11 + 6); v14 = *(_DWORD *)((char *)v11 + 14); v35 = v13; v15 = *(_DWORD *)((char *)v11 + 18); v16 = *(_DWORD *)((char *)v11 + 22); v36 = v14; v37 = v15; v38 = v16; v39 = 0; v17 = (int *)sub_680810(byte_AD9238); v18 = *v17; v19 = v17[1]; v20 = v17[2]; v21 = v17[3]; v22 = v17[4]; v28 = v18; v32 = v22; v29 = v19; v30 = v20; v31 = v21; v33 = 0; if ( !strcmp((const char *)&v28, (const char *)&v34) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[161] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[162] + 240))(0); LABEL_31: sub_465130((_DWORD *)v1[86]); sub_464DA0((_DWORD *)v1[86], 0, 5); sub_464DA0((_DWORD *)v1[86], 1u, 5); sub_8D06A0((float *)v1 + 163, flt_ACCFCC); *((float *)v1 + 168) = 10.0; return; } } (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[162] + 240))(1); if ( !v1[172] ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[161] + 240))(1); goto LABEL_31; } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0057DFA0) -------------------------------------------------------- int __thiscall sub_57DFA0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[86]; if ( result ) { v3 = (_DWORD *)this[87]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[86] + 344) = *(_DWORD *)(v1[87] + 300); result = sub_465130((_DWORD *)v1[86]); } } return result; } //----- (0057DFF0) -------------------------------------------------------- char __thiscall sub_57DFF0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax v1 = this; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) LOBYTE(v2) = sub_4E3710(v1[86], v1[87]); return v2; } //----- (0057E070) -------------------------------------------------------- _DWORD *__thiscall sub_57E070(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx _DWORD *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CPartyMatchWin::`vftable'; v1[58] = &CPartyMatchWin::`vftable'; v1[87] = 0; v1[92] = 0; sub_8D0610((_BYTE *)v1 + 652); v1[86] = 0; v1[91] = 0; v1[159] = 0; v1[160] = 0; v1[161] = 0; v1[162] = 0; v2 = v1[87]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0; } result = v1; v1[88] = 0; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D4794: using guessed type void *CPartyMatchWin::`vftable'; // 9D47B4: using guessed type void *CPartyMatchWin::`vftable'; //----- (0057E140) -------------------------------------------------------- LONG __thiscall sub_57E140(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &CPartyMatchWin::`vftable'; this[58] = &CPartyMatchWin::`vftable'; v2 = (void *)this[91]; if ( v2 ) { sub_750540(v2); operator delete(v2); v1[91] = 0; } v3 = v1[92]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[92] = 0; } v1[159] = 0; v1[160] = 0; v1[161] = 0; v1[162] = 0; v4 = v1[92]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[87]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_8F10F0(v1); } // 750540: using guessed type int __thiscall sub_750540(_DWORD); // 9D4794: using guessed type void *CPartyMatchWin::`vftable'; // 9D47B4: using guessed type void *CPartyMatchWin::`vftable'; //----- (0057E260) -------------------------------------------------------- char __thiscall sub_57E260(int this, float a2) { int v2; // esi int v3; // ST08_4 const char *v4; // eax DWORD v5; // edi int v6; // eax int v7; // ecx int v8; // eax bool v9; // zf int v10; // ecx int v11; // eax int v12; // ecx int v13; // eax char v15; // [esp+Ch] [ebp-104h] v2 = this; if ( !(*(_BYTE *)(this + 28) & 1) ) { v3 = *(_DWORD *)(this + 352) + 1; v4 = sub_40C190(441465497); sprintf(&v15, v4, v3); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 632) + 472))(&v15); if ( sub_8D0630((float *)(v2 + 652), a2) ) sub_4B7FF0(*(_DWORD **)(v2 + 296), *(_WORD *)(v2 + 352), 50); v5 = timeGetTime(); v6 = *(_DWORD *)(v2 + 680); if ( v6 ) { if ( v5 - v6 > 0xBB8 ) { v7 = *(_DWORD *)(v2 + 636); *(_DWORD *)(v2 + 680) = 0; if ( v7 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v7 + 240))(1); } } v8 = *(_DWORD *)(v2 + 684); if ( v8 ) { if ( v5 - v8 > 0xBB8 ) { v9 = *(_BYTE *)(v2 + 360) == 0; *(_DWORD *)(v2 + 684) = 0; if ( !v9 ) { v10 = *(_DWORD *)(v2 + 640); if ( v10 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v10 + 240))(1); } } } v11 = *(_DWORD *)(v2 + 688); if ( v11 ) { if ( v5 - v11 > 0xBB8 ) { v12 = *(_DWORD *)(v2 + 644); *(_DWORD *)(v2 + 688) = 0; if ( v12 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v12 + 240))(1); } } } v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v13 ) LOBYTE(v13) = sub_4E3710(*(_DWORD **)(v2 + 344), *(_DWORD **)(v2 + 348)); return v13; } //----- (0057E3E0) -------------------------------------------------------- char __thiscall sub_57E3E0(int this, int a2, int a3) { int v3; // eax int v4; // esi int *v5; // eax int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // eax _DWORD *v11; // ecx _DWORD *v12; // ecx _DWORD *v13; // ecx int v14; // eax _DWORD *v15; // ecx int v16; // ecx char *v17; // eax const char *v18; // eax void *v19; // eax DWORD v20; // eax int v21; // ecx DWORD v22; // eax int v23; // ecx signed int v24; // eax _DWORD *v25; // ecx DWORD v26; // eax int v27; // ecx signed int v28; // eax _DWORD *v29; // edi _DWORD **v30; // ecx int v32; // [esp+8h] [ebp-48h] int v33; // [esp+Ch] [ebp-44h] int v34; // [esp+10h] [ebp-40h] int v35; // [esp+14h] [ebp-3Ch] int v36; // [esp+18h] [ebp-38h] char v37; // [esp+1Ch] [ebp-34h] char v38; // [esp+30h] [ebp-20h] char v39; // [esp+34h] [ebp-1Ch] char v40; // [esp+48h] [ebp-8h] LOBYTE(v3) = a2 - 11; v4 = this; switch ( a2 ) { case 11: LOBYTE(v3) = sub_57DBF0((_DWORD *)this); break; case 12: v3 = *(_DWORD *)(this + 352); if ( v3 ) { v10 = v3 - 1; v11 = *(_DWORD **)(this + 296); *(_DWORD *)(v4 + 352) = v10; sub_4B7FF0(v11, v10, 50); v12 = *(_DWORD **)(v4 + 344); if ( v12 ) sub_466A50(v12); LOBYTE(v3) = sub_57DFF0((_DWORD **)v4); } break; case 13: v3 = *(_DWORD *)(this + 352); if ( *(_DWORD *)(this + 356) - 1 > v3 ) { v13 = *(_DWORD **)(this + 296); v14 = v3 + 1; *(_DWORD *)(v4 + 352) = v14; sub_4B7FF0(v13, v14, 50); v15 = *(_DWORD **)(v4 + 344); if ( v15 ) sub_466A50(v15); LOBYTE(v3) = sub_57DFF0((_DWORD **)v4); } break; case 14: case 15: v3 = sub_464F50(*(_DWORD **)(this + 344)); if ( v3 >= 0 ) { v3 = sub_57DB70((_DWORD *)v4, v3); if ( v3 ) { sub_4169E0((_DWORD *)(v3 + 6), (int)&v37); v38 = 0; strcpy((char *)(v4 + 372), &v37); v5 = (int *)sub_680810(byte_AD9238); v6 = v5[1]; v32 = *v5; v7 = v5[2]; v33 = v6; v8 = v5[3]; v34 = v7; v9 = v5[4]; v35 = v8; v36 = v9; sub_4169E0(&v32, (int)&v39); v40 = 0; if ( !strcmp(&v39, &v37) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 644) + 240))(0); LOBYTE(v3) = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 648) + 240))(0); } else { LOBYTE(v3) = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v4 + 648) + 240))(1); if ( !*(_DWORD *)(v4 + 688) ) LOBYTE(v3) = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v4 + 644) + 240))(1); } } } break; case 16: v16 = *(_DWORD *)(this + 368); if ( v16 && !*(_DWORD *)(v4 + 680) ) { if ( !strlen((const char *)(*(int (**)(void))(*(_DWORD *)v16 + 452))()) ) { v17 = (char *)sub_40C190(-2003857495); goto LABEL_35; } v18 = (const char *)(*(int (**)(void))(**(_DWORD **)(v4 + 368) + 452))(); v19 = (void *)sub_451700(v18); sub_4B8040(*(_DWORD **)(v4 + 296), v19); (*(void (**)(void))(**(_DWORD **)(v4 + 368) + 468))(); v20 = timeGetTime(); v21 = *(_DWORD *)(v4 + 636); *(_DWORD *)(v4 + 680) = v20; LOBYTE(v3) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v21 + 240))(0); } break; case 17: if ( !*(_DWORD *)(this + 684) ) { sub_4B8080(*(_DWORD **)(this + 296)); v22 = timeGetTime(); v23 = *(_DWORD *)(v4 + 640); *(_DWORD *)(v4 + 684) = v22; LOBYTE(v3) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v23 + 240))(0); } break; case 18: v28 = sub_464F50(*(_DWORD **)(this + 344)); if ( v28 < 0 ) goto LABEL_34; v3 = sub_57DB70((_DWORD *)v4, (unsigned __int16)v28); if ( v3 ) { v29 = (_DWORD *)(v3 + 6); sub_4169E0((_DWORD *)(v3 + 6), (int)&v39); *(_DWORD *)dword_ACEB0C = *v29; dword_ACEB10 = v29[1]; dword_ACEB14 = v29[2]; dword_ACEB18 = v29[3]; dword_ACEB1C = v29[4]; v30 = *(_DWORD ***)(v4 + 296); v40 = 0; LOBYTE(v3) = sub_4A7840(v30, &v39); } break; case 19: v24 = sub_464F50(*(_DWORD **)(this + 344)); if ( v24 < 0 ) { LABEL_34: v17 = (char *)sub_40C190(-857216207); LABEL_35: LOBYTE(v3) = (unsigned int)sub_462C30(1, v17); } else { v3 = sub_57DB70((_DWORD *)v4, (unsigned __int16)v24); if ( v3 && !*(_DWORD *)(v4 + 688) ) { sub_4169E0((_DWORD *)(v3 + 6), (int)&v39); v25 = *(_DWORD **)(v4 + 296); v40 = 0; sub_4C1490(v25, &v39); v26 = timeGetTime(); v27 = *(_DWORD *)(v4 + 644); *(_DWORD *)(v4 + 688) = v26; LOBYTE(v3) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v27 + 240))(0); } } break; case 20: LOBYTE(v3) = sub_57DC20((_DWORD **)this, 0); break; case 21: LOBYTE(v3) = sub_57DC20((_DWORD **)this, 1); break; case 22: LOBYTE(v3) = sub_57DC20((_DWORD **)this, 3); break; case 23: LOBYTE(v3) = sub_57DC20((_DWORD **)this, 4); break; case 24: LOBYTE(v3) = sub_57DC20((_DWORD **)this, 5); break; case 25: LOBYTE(v3) = sub_57DBC0(); break; case 27: LOBYTE(v3) = sub_57DFA0((_DWORD *)this); break; default: return v3; } return v3; } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; //----- (0057E8F0) -------------------------------------------------------- bool __userpurge sub_57E8F0@(int a1@, int a2@, unsigned __int16 a3, unsigned __int16 a4, char a5) { int v5; // esi bool v6; // zf int v7; // edi const CHAR *v8; // eax int v10; // [esp-4h] [ebp-Ch] v5 = a1; v6 = *(_DWORD *)(a1 + 636) == 0; *(_DWORD *)(a1 + 356) = a4; *(_DWORD *)(a1 + 352) = a3; *(_BYTE *)(a1 + 360) = a5; if ( !v6 ) { v10 = a2; if ( a5 ) { v7 = **(_DWORD **)(a1 + 628); v8 = sub_40C190(-1886422629); } else { v7 = **(_DWORD **)(a1 + 628); v8 = sub_40C190(-2121433175); } (*(void (__thiscall **)(_DWORD, const CHAR *, int))(v7 + 472))(*(_DWORD *)(v5 + 628), v8, v10); (*(void (**)(void))(**(_DWORD **)(v5 + 640) + 240))(); } return a3 == *(_DWORD *)(v5 + 352); } // 57E8F0: could not find valid save-restore pair for edi //----- (0057E9D0) -------------------------------------------------------- int __thiscall sub_57E9D0(int this) { int v1; // esi int v2; // edi const CHAR *v3; // eax _DWORD *v4; // ecx int v5; // ecx v1 = this; *(_DWORD *)(this + 680) = 0; *(_DWORD *)(this + 684) = 0; *(_DWORD *)(this + 688) = 0; *(_DWORD *)(this + 352) = 0; *(_DWORD *)(this + 356) = 0; *(_BYTE *)(this + 360) = 0; if ( *(_DWORD *)(this + 636) ) { v2 = **(_DWORD **)(this + 628); v3 = sub_40C190(-2121433175); (*(void (__thiscall **)(_DWORD, const CHAR *))(v2 + 472))(*(_DWORD *)(v1 + 628), v3); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 640) + 240))(0); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 636) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 644) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 648) + 240))(1); v4 = *(_DWORD **)(v1 + 344); if ( v4 ) { sub_466A50(v4); sub_4B7FF0(*(_DWORD **)(v1 + 296), *(_WORD *)(v1 + 352), 50); } v5 = *(_DWORD *)(v1 + 368); if ( v5 ) (*(void (**)(void))(*(_DWORD *)v5 + 468))(); memset((void *)(v1 + 372), 0, 0x100u); return sub_8F28C0((_BYTE *)v1); } //----- (0057EAD0) -------------------------------------------------------- volatile LONG *__cdecl sub_57EAD0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2B4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_57E070(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0057EC00) -------------------------------------------------------- char __thiscall sub_57EC00(_DWORD *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax volatile LONG **v24; // eax volatile LONG **v25; // eax volatile LONG **v26; // eax volatile LONG **v27; // eax volatile LONG **v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax void *v31; // eax int v32; // eax volatile LONG *v33; // ST8C_4 int v34; // ecx int v35; // eax volatile LONG **v36; // edx int v37; // eax volatile LONG *v38; // eax volatile LONG v39; // edx const CHAR *v40; // eax volatile LONG *v41; // ecx volatile LONG **v42; // eax int v43; // eax volatile LONG *v44; // eax volatile LONG v45; // edx const CHAR *v46; // eax volatile LONG *v47; // ecx volatile LONG **v48; // eax int v49; // eax volatile LONG *v50; // eax int v51; // ST8C_4 const char *v52; // eax volatile LONG **v53; // eax int v54; // eax volatile LONG **v55; // ecx volatile LONG *v56; // eax int (*v57)(void); // eax int v58; // eax int v59; // eax volatile LONG **v60; // eax volatile LONG *v61; // eax int v62; // eax volatile LONG **v63; // edx int v64; // eax volatile LONG *v65; // eax volatile LONG v66; // edx const CHAR *v67; // eax volatile LONG **v68; // eax int v69; // eax volatile LONG *v70; // eax volatile LONG *v71; // eax volatile LONG **v72; // edx int v73; // eax volatile LONG **v74; // edx int v75; // eax volatile LONG *v76; // eax const CHAR *v77; // eax volatile LONG *v78; // eax volatile LONG **v79; // ecx int v80; // eax volatile LONG **v81; // edx int v82; // eax volatile LONG *v83; // eax volatile LONG v84; // edx const CHAR *v85; // eax volatile LONG *v86; // eax volatile LONG **v87; // ecx int v88; // eax volatile LONG **v89; // edx int v90; // eax volatile LONG *v91; // eax volatile LONG v92; // edx const CHAR *v93; // eax volatile LONG *v94; // eax const char *v95; // eax int v96; // eax volatile LONG *v97; // edx int v98; // eax volatile LONG *v99; // edi volatile LONG v100; // ebx const CHAR *v101; // eax int v102; // [esp+A0h] [ebp-174h] int v103; // [esp+A4h] [ebp-170h] int v104; // [esp+A8h] [ebp-16Ch] char v105; // [esp+B0h] [ebp-164h] int v106; // [esp+B4h] [ebp-160h] int v107; // [esp+B8h] [ebp-15Ch] int v108; // [esp+BCh] [ebp-158h] int v109; // [esp+C0h] [ebp-154h] int v110; // [esp+C4h] [ebp-150h] int v111; // [esp+C8h] [ebp-14Ch] int v112; // [esp+CCh] [ebp-148h] volatile LONG *v113; // [esp+D0h] [ebp-144h] void *v114; // [esp+D4h] [ebp-140h] int v115; // [esp+D8h] [ebp-13Ch] int v116; // [esp+DCh] [ebp-138h] int v117; // [esp+E0h] [ebp-134h] volatile LONG **v118; // [esp+E4h] [ebp-130h] const void *v119[7]; // [esp+E8h] [ebp-12Ch] char v120; // [esp+104h] [ebp-110h] int v121; // [esp+210h] [ebp-4h] v2 = (int)this; v117 = 0; this[74] = a2; v3 = dword_BA6BA0; v121 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageBoard.nif"); sub_8F66B0(v4, (int)&v117, v3); if ( !v117 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v117 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v110 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v121) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v113 = v9) == 0) ) { LOBYTE(v121) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v117; v121 = -1; if ( v117 && !InterlockedDecrement((volatile LONG *)(v117 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v117, (int)"Frame", (int)&v115, (int)&v116, v9); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, a2, (int)"FriendWin", 0) ) { v14 = v115; v15 = v116; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v117, (int)"Theme", (int)&v115, (int)&v116, v16); else v17 = sub_8FB140(v117, (int)"Theme", (int)&v115, (int)&v116, 0); sub_8F3EB0(v115 - v14, v116 - v15, (int)v17, v2, 0, 0); v18 = sub_8FB140(v117, (int)"Panel01", (int)&v115, (int)&v116, v113); sub_8F3EB0(v115 - v14, v116 - v15, (int)v18, v2, 0, 0); v19 = sub_8FB140(v117, (int)"IconSlot", (int)&v115, (int)&v116, v113); sub_8F3EB0(v115 - v14, v116 - v15, (int)v19, v2, 0, 0); if ( sub_8F71E0(v117, (int)"WinTitle", &v115, &v116, &v111, &v112) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v115 - v14, v116 - v15, v111, v112, v20, v2, 0, 0); v22 = *v21; v118 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); (*((void (__stdcall **)(int *))*v118 + 117))(&dword_AA8D98); v114 = (void *)*v118; v23 = sub_40C190(561228932); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v23); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v118 = sub_8FB140(v117, (int)"ClsNor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"ClsClick"); sub_8FB650(v118, v117, (int)"ClsOver"); sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 11, 0, 0); sub_43D0D0(4u); v102 = 0; v103 = 0; v104 = 0; v105 = 0; v106 = 0; v107 = 0; v108 = 0; v109 = 0; LOBYTE(v121) = 2; v24 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v102, 1); *v24 = (volatile LONG *)1; v24[1] = (volatile LONG *)v117; v118 = v24; sub_4019E0(v119, "ColumnBarNor"); LOBYTE(v121) = 3; v118 += 18; sub_40B060((int *)v118, v119); LOBYTE(v121) = 2; sub_636A10(v119); sub_4019E0(v119, "ColumnBarClick"); LOBYTE(v121) = 4; sub_40B060((int *)v118, v119); LOBYTE(v121) = 2; sub_636A10(v119); sub_4019E0(v119, "ColumnBarOver"); LOBYTE(v121) = 5; sub_40B060((int *)v118, v119); LOBYTE(v121) = 2; sub_636A10(v119); v25 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v102, 2); v118 = v25; *v25 = (volatile LONG *)2; sub_4019E0(v119, "CharName01"); LOBYTE(v121) = 6; sub_40B060((int *)v118 + 18, v119); LOBYTE(v121) = 2; sub_636A10(v119); v26 = v118; v118[1] = (volatile LONG *)v117; *((_BYTE *)v26 + 88) = 1; v27 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v102, 2); v118 = v27; *v27 = (volatile LONG *)2; sub_4019E0(v119, "Title01"); LOBYTE(v121) = 7; sub_40B060((int *)v118 + 18, v119); LOBYTE(v121) = 2; sub_636A10(v119); v28 = v118; v118[1] = (volatile LONG *)v117; *((_BYTE *)v28 + 88) = 1; v106 = 3; v107 = 0; sub_466680(&v102, 0); v29 = sub_8FB140(v117, (int)"Text01", (int)&v115, (int)&v116, v113); v30 = sub_466330(v115 - v14, v116 - v15, (int)v29, *(float *)&v2, (int **)&v102, 0, 0); *(_DWORD *)(v2 + 344) = v30; *((_DWORD *)v30 + 88) = 14; *(_DWORD *)(*(_DWORD *)(v2 + 344) + 356) = 15; sub_465130(*(_DWORD **)(v2 + 344)); v31 = operator new(0xCu); v114 = v31; LOBYTE(v121) = 8; if ( v31 ) unknown_libname_17(v31); else v32 = 0; v33 = v113; v34 = v117; *(_DWORD *)(v2 + 364) = v32; LOBYTE(v121) = 2; v35 = *sub_8FB140(v34, (int)"CharName", (int)&v115, (int)&v116, v33)[9]; v36 = *(volatile LONG ***)(v35 + 20); v114 = *(void **)(v35 + 24); v118 = v36; v37 = sub_421050(7); v38 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v37, v2, 0, 0); v39 = *v38; v118 = (volatile LONG **)v38; (*(void (__thiscall **)(volatile LONG *, signed int))(v39 + 488))(v38, 5); v114 = (void *)*v118; v40 = sub_40C190(1319409301); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v40); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v41 = sub_8FB140(v117, (int)"Title", (int)&v115, (int)&v116, v113)[9]; v42 = *(volatile LONG ***)(*v41 + 20); v114 = *(void **)(*v41 + 24); v118 = v42; v43 = sub_421050(7); v44 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v43, v2, 0, 0); v45 = *v44; v118 = (volatile LONG **)v44; (*(void (__thiscall **)(volatile LONG *, signed int))(v45 + 488))(v44, 5); v114 = (void *)*v118; v46 = sub_40C190(-438189863); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v46); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v47 = sub_8FB140(v117, (int)"PageLabel", (int)&v115, (int)&v116, v113)[9]; v48 = *(volatile LONG ***)(*v47 + 20); v114 = *(void **)(*v47 + 24); v118 = v48; v49 = sub_421050(7); v50 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v49, v2, 0, 0); *(_DWORD *)(v2 + 632) = v50; (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); v51 = *(_DWORD *)(v2 + 352) + 1; v52 = sub_40C190(441465497); sprintf(&v120, v52, v51); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 632) + 472))(&v120); v53 = sub_8FB140(v117, (int)"SlideBar_SlideBtnMiddle", (int)&v115, (int)&v116, v113); v54 = sub_464310(v117, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v53, 0, (_DWORD *)v2); sub_56FF80((_DWORD *)(v2 + 348), v54); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 312) = 27; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; v55 = *(volatile LONG ***)(v2 + 348); v56 = *v55; v114 = (void *)v56; v57 = (int (*)(void))*((_DWORD *)v56 + 42); v118 = v55; v58 = v57(); v59 = (*((int (__stdcall **)(int))*v118 + 41))(v58); (*((void (__thiscall **)(volatile LONG **, int))v114 + 77))(v118, v59); sub_4638F0(*(_DWORD **)(v2 + 348), *(_DWORD *)(*(_DWORD *)(v2 + 344) + 336)); v118 = sub_8FB140(v117, (int)"PrePageNor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"PrePageClick"); sub_8FB650(v118, v117, (int)"PrePageOver"); sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 12, 0, 0); v118 = sub_8FB140(v117, (int)"NextPageNor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"NextPageClick"); sub_8FB650(v118, v117, (int)"NextPageOver"); sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 13, 0, 0); v60 = sub_8FB140(v117, (int)"InputBackground", (int)&v115, (int)&v116, v113); v61 = sub_8F3EB0(v115 - v14, v116 - v15, (int)v60, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v61 + 240))(v61, 0); v62 = *sub_8FB140(v117, (int)"TextInput", (int)&v115, (int)&v116, v113)[9]; v63 = *(volatile LONG ***)(v62 + 20); v114 = *(void **)(v62 + 24); v118 = v63; v64 = sub_421050(7); v65 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v64, v2, 0, 0); v66 = *v65; v118 = (volatile LONG **)v65; (*(void (__thiscall **)(volatile LONG *, signed int))(v66 + 488))(v65, 5); v114 = (void *)*v118; v67 = sub_40C190(-471337652); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v67); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v68 = sub_8FB140(v117, (int)"TextInput01", (int)&v115, (int)&v116, v113); v114 = (void *)sub_8F3EB0(v115 - v14, v116 - v15, (int)v68, v2, 0, 0); if ( sub_8F71E0(v117, (int)"TextInput01", &v115, &v116, &v111, &v112) ) { v69 = sub_421050(0); v70 = sub_45A900(v115, v116 + (*(_DWORD *)(v69 + 384) >> 1), v111, v112, (int)v114, 1342177280, 55, 4, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 368), (int)v70); sub_459B60(*(_DWORD **)(v2 + 368), 1); v118 = sub_8FB140(v117, (int)"Btn01Nor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"Btn01Click"); sub_8FB650(v118, v117, (int)"Btn01Over"); sub_8FB650(v118, v117, (int)"Btn01Disable"); v71 = sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 16, 0, 0); v72 = v118; *(_DWORD *)(v2 + 636) = v71; v73 = *v72[9]; v74 = *(volatile LONG ***)(v73 + 20); v114 = *(void **)(v73 + 24); v118 = v74; v75 = sub_421050(7); v76 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v75, v2, 0, 0); *(_DWORD *)(v2 + 628) = v76; (*(void (__thiscall **)(volatile LONG *, signed int))(*v76 + 488))(v76, 5); v114 = **(void ***)(v2 + 628); v77 = sub_40C190(-2121433175); (*((void (__thiscall **)(_DWORD, const CHAR *))v114 + 118))(*(_DWORD *)(v2 + 628), v77); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 628) + 240))(0); v118 = sub_8FB140(v117, (int)"Btn02Nor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"Btn02Click"); sub_8FB650(v118, v117, (int)"Btn02Over"); sub_8FB650(v118, v117, (int)"Btn02Disable"); v78 = sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 17, 0, 0); v79 = v118; *(_DWORD *)(v2 + 640) = v78; v80 = *v79[9]; v81 = *(volatile LONG ***)(v80 + 20); v114 = *(void **)(v80 + 24); v118 = v81; v82 = sub_421050(7); v83 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v82, v2, 0, 0); v84 = *v83; v118 = (volatile LONG **)v83; (*(void (__thiscall **)(volatile LONG *, signed int))(v84 + 488))(v83, 5); v114 = (void *)*v118; v85 = sub_40C190(1954837413); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v85); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v118 = sub_8FB140(v117, (int)"Btn03Nor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"Btn03Click"); sub_8FB650(v118, v117, (int)"Btn03Over"); sub_8FB650(v118, v117, (int)"Btn03Disable"); v86 = sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 18, 0, 0); v87 = v118; *(_DWORD *)(v2 + 648) = v86; v88 = *v87[9]; v89 = *(volatile LONG ***)(v88 + 20); v114 = *(void **)(v88 + 24); v118 = v89; v90 = sub_421050(7); v91 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v118, (int)v114, v90, v2, 0, 0); v92 = *v91; v118 = (volatile LONG **)v91; (*(void (__thiscall **)(volatile LONG *, signed int))(v92 + 488))(v91, 5); v114 = (void *)*v118; v93 = sub_40C190(845449094); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v114 + 118))(v118, v93); (*((void (__stdcall **)(_DWORD))*v118 + 60))(0); v118 = sub_8FB140(v117, (int)"Btn04Nor", (int)&v115, (int)&v116, v113); sub_8FB650(v118, v117, (int)"Btn04Click"); sub_8FB650(v118, v117, (int)"Btn04Over"); sub_8FB650(v118, v117, (int)"Btn04Disable"); v94 = sub_8FE0F0(v115 - v14, v116 - v15, (int)v118, v2, 19, 0, 0); *(_DWORD *)(v2 + 644) = v94; v114 = (void *)v94; *((_DWORD *)v94 + 68) = dword_AD01E8; v95 = sub_40A910(67421909); sub_8F2EA0((void **)v114, v95); v96 = *v118[9]; v97 = *(volatile LONG **)(v96 + 20); v114 = *(void **)(v96 + 24); v113 = v97; v98 = sub_421050(7); v99 = sub_8F4A20(v115 - v14, v116 - v15 + 1, (int)v113, (int)v114, v98, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 5); v100 = *v99; v101 = sub_40C190(893229738); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v100 + 472))(v99, v101); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v99 + 240))(v99, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v121) = 1; sub_40AE10((void **)&v102); LOBYTE(v121) = 0; sub_410C00(&v110); v121 = -1; sub_410C00(&v117); return 1; } LOBYTE(v121) = 1; sub_40AE10((void **)&v102); } LOBYTE(v121) = 0; sub_410C00(&v110); v121 = -1; sub_410C00(&v117); return 0; } LOBYTE(v121) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v117; v121 = -1; if ( !v117 || InterlockedDecrement((volatile LONG *)(v117 + 4)) || !v13 ) return 0; (**v13)(v13, 1); return 0; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0057FEA0) -------------------------------------------------------- void *__thiscall sub_57FEA0(void *this, char a2) { void *v2; // esi v2 = this; sub_57E140(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0057FED0) -------------------------------------------------------- int __thiscall sub_57FED0(void *this, _BYTE *a2) { return sub_8F1140(this, a2); } //----- (0057FF20) -------------------------------------------------------- int __thiscall sub_57FF20(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( !this[91] ) return 0; (*(void (**)(void))(*(_DWORD *)this[91] + 484))(); return (*(int (**)(void))(*(_DWORD *)v1[91] + 484))(); } //----- (0057FF60) -------------------------------------------------------- void __thiscall sub_57FF60(_DWORD *this, int a2, LONG a3, int a4) { _DWORD *v4; // esi signed int v5; // eax int v6; // ecx void (__stdcall *v7)(signed int, int); // eax void (__thiscall *v8)(_DWORD *, LONG *, LONG *); // eax int v9; // ebx int v10; // eax int v11; // eax const char *v12; // eax int v13; // edi const char *v14; // eax int v15; // eax int v16; // [esp+0h] [ebp-Ch] signed int v17; // [esp+0h] [ebp-Ch] int v18; // [esp+0h] [ebp-Ch] LONG v19; // [esp+8h] [ebp-4h] v4 = this; if ( a2 == 15 ) { v5 = 0; switch ( *(_DWORD *)a3 ) { case 0x3F7: v5 = 1; break; case 0x3F8: v5 = 2; break; case 0x3F9: v5 = 4; break; case 0x3FA: v5 = 8; break; case 0x3FB: v5 = 16; break; default: break; } if ( *(_BYTE *)(a3 + 4) ) this[28] |= v5; else this[28] &= ~v5; v6 = this[113]; if ( v4[28] & 0x10 ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v6 + 240))(0, v16); *(_WORD *)(v4[113] + 28) |= 1u; v17 = 0; } else { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v6 + 240))(1, v16); *(_WORD *)(v4[113] + 28) &= 0xFFFEu; v17 = 1; } (*(void (__cdecl **)(signed int))(*(_DWORD *)v4[113] + 256))(v17); v7 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v4[112] + 240); if ( v4[28] & 0xF ) { v7(0, v18); *(_WORD *)(v4[112] + 28) |= 1u; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v4[112] + 256))(0); } else { v7(1, v18); *(_WORD *)(v4[112] + 28) &= 0xFFFEu; (*(void (__cdecl **)(signed int))(*(_DWORD *)v4[112] + 256))(1); } } if ( a4 ) { v8 = *(void (__thiscall **)(_DWORD *, LONG *, LONG *))(*(v4 - 58) + 224); a3 = pt.x; v9 = (int)(v4 - 58); v19 = pt.y; v8(v4 - 58, &a3, &v19); if ( a3 >= 0 ) { v10 = (*(int (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 144))(v4 - 58); if ( a3 < v10 && v19 >= 0 ) { v11 = (*(int (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 148))(v4 - 58); if ( v19 < v11 ) { if ( a2 == 3 ) { if ( v4[33] ) { v14 = (const char *)(*(int (**)(void))(*(_DWORD *)v4[33] + 484))(); if ( v14 ) { if ( strcmp(v14, (const char *)&unk_9D4A1D) ) { v15 = sub_6645B0(dword_AD8C90, v14); if ( v15 ) sub_4A7770((_DWORD *)v4[16], v15); } } } } else if ( a2 == 6 ) { if ( v4[33] ) { v12 = (const char *)(*(int (**)(void))(*(_DWORD *)v4[33] + 484))(); v13 = (int)v12; if ( v12 ) { if ( strcmp(v12, (const char *)&unk_9D4A13) ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*(_DWORD *)v9 + 260))(v4 - 58) ) sub_8EEE70((_DWORD *)v4[16], 128, v13, 0); } } } } } } } } } //----- (005801F0) -------------------------------------------------------- int __thiscall sub_5801F0(char *this, char *a2, int a3, int *a4) { char *v4; // esi _DWORD *v5; // ecx int result; // eax void ***v7; // edi void ***v8; // esi int v9; // ebx int v10; // eax bool v11; // zf int *v12; // eax int v13; // eax int v14; // eax int v15; // [esp+4h] [ebp-14h] int v16; // [esp+4h] [ebp-14h] int v17; // [esp+4h] [ebp-14h] _DWORD *v18; // [esp+8h] [ebp-10h] unsigned __int16 v19; // [esp+Ch] [ebp-Ch] int v20; // [esp+Ch] [ebp-Ch] int v21; // [esp+Ch] [ebp-Ch] int v22; // [esp+Ch] [ebp-Ch] int v23; // [esp+10h] [ebp-8h] int v24; // [esp+14h] [ebp-4h] int v25; // [esp+20h] [ebp+8h] v4 = this; v5 = *(_DWORD **)(sub_64F860(a2) + 4); result = *a4; v25 = *a4; if ( v5 ) { v23 = (int)&v4[4 * result + 560]; v7 = (void ***)&v4[4 * result + 440]; v24 = (int)&v4[4 * result + 620]; v8 = (void ***)&v4[4 * result + 500]; while ( result < 15 ) { v9 = v5[2]; v18 = (_DWORD *)*v5; v19 = *(_WORD *)(v9 + 20); v15 = dword_ACDA80; if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACDA80 + 16))(*(unsigned __int16 *)(v9 + 20)) ) { if ( v19 <= *(_WORD *)(v15 + 200) ) { v10 = *(_DWORD *)(v15 + 196); v11 = *(_DWORD *)(v10 + 4 * v19) == 0; v12 = (int *)(v10 + 4 * v19); if ( v11 ) v20 = 0; else v20 = *v12; } else { v20 = 0; } } else { v20 = 0; } result = v20; if ( *(_BYTE *)(v20 + 526) ) { if ( a3 != 4 || *(_DWORD *)(v20 + 522) != 4 ) { result = *(_DWORD *)(v20 + 522); if ( result == a3 && result != 4 ) { sub_5D0FB0(*v7, *(unsigned __int16 *)(v9 + 20)); sub_8F2EA0(*v7, (const char *)(v20 + 70)); (*v7)[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**v7 + 64))(1); (*((void (__stdcall **)(signed int))**v7 + 60))(1); (*((void (__stdcall **)(signed int))**v7 + 62))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v23 + 256))(1); ++v25; result = 4; v24 += 4; v23 += 4; ++v8; ++v7; if ( *(_DWORD *)(v9 + 112) ) { v17 = *(unsigned __int16 *)(v9 + 20); v22 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v17); if ( (_BYTE)result ) { result = v17; if ( (unsigned __int16)v17 <= *(_WORD *)(v22 + 200) ) { v14 = *(_DWORD *)(v22 + 196); v11 = *(_DWORD *)(v14 + 4 * (unsigned __int16)v17) == 0; result = v14 + 4 * (unsigned __int16)v17; if ( !v11 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v7, *(_DWORD *)(v9 + 112)); (*((void (__stdcall **)(signed int))**v7 + 64))(1); (*((void (__stdcall **)(signed int))**v7 + 60))(1); (*((void (__stdcall **)(signed int))**v7 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v23 + 256))(1); ++v25; v24 += 4; ++v8; ++v7; v23 += 4; } } } } } } } } else { sub_5D0FB0(*v8, *(unsigned __int16 *)(v9 + 20)); sub_8F2EA0(*v8, (const char *)(v20 + 70)); (*v8)[68] = (void *)dword_AD01E8; (*((void (__stdcall **)(signed int))**v8 + 64))(1); (*((void (__stdcall **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v24 + 256))(1); ++v25; result = 4; v24 += 4; v23 += 4; ++v8; ++v7; if ( *(_DWORD *)(v9 + 112) ) { v16 = *(unsigned __int16 *)(v9 + 20); v21 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v16); if ( (_BYTE)result ) { result = v16; if ( (unsigned __int16)v16 <= *(_WORD *)(v21 + 200) ) { v13 = *(_DWORD *)(v21 + 196); v11 = *(_DWORD *)(v13 + 4 * (unsigned __int16)v16) == 0; result = v13 + 4 * (unsigned __int16)v16; if ( !v11 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v8, *(_DWORD *)(v9 + 112)); (*((void (__stdcall **)(signed int))**v8 + 64))(1); (*((void (__stdcall **)(signed int))**v8 + 60))(1); (*((void (__stdcall **)(signed int))**v8 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v24 + 256))(1); ++v25; ++v8; ++v7; v23 += 4; v24 += 4; } } } } } } } } if ( !v18 ) { *a4 = v25; return result; } v5 = v18; result = v25; } *a4 = result; } else { *a4 = result; } return result; } // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; // AD01E8: using guessed type int dword_AD01E8; //----- (00580590) -------------------------------------------------------- int __thiscall sub_580590(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD **v3; // edi _DWORD **v4; // edi _DWORD **v5; // edi _DWORD **v6; // edi _DWORD **v7; // edi int v8; // ecx void (__stdcall *v9)(signed int, int); // eax int result; // eax int v11; // [esp+0h] [ebp-14h] int v12; // [esp+0h] [ebp-14h] int v13; // [esp+Ch] [ebp-8h] char v14; // [esp+10h] [ebp-4h] v2 = this; v3 = (_DWORD **)(this[109] + 232); v13 = 1015; v14 = a2 & 1; if ( v3[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 4))(16, &v13, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 16))(16, &v13, v3); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[4])(v3, 16, &v13, v3); v4 = (_DWORD **)(v2[109] + 232); v13 = 1016; v14 = (a2 >> 1) & 1; if ( v4[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 4))(16, &v13, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 16))(16, &v13, v4); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v4)[4])(v4, 16, &v13, v4); v5 = (_DWORD **)(v2[109] + 232); v13 = 1017; v14 = (a2 >> 2) & 1; if ( v5[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 4))(16, &v13, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 16))(16, &v13, v5); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v5)[4])(v5, 16, &v13, v5); v6 = (_DWORD **)(v2[109] + 232); v13 = 1018; v14 = (a2 >> 3) & 1; if ( v6[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 4))(16, &v13, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 16))(16, &v13, v6); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v6)[4])(v6, 16, &v13, v6); v7 = (_DWORD **)(v2[109] + 232); v13 = 1019; v14 = (a2 >> 4) & 1; if ( v7[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 4))(16, &v13, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 16))(16, &v13, v7); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v7)[4])(v7, 16, &v13, v7); v8 = v2[171]; v2[86] = a2; if ( a2 & 0x10 ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v8 + 240))(0, v11); *(_WORD *)(v2[171] + 28) |= 1u; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v2[171] + 256))(0); } else { (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v8 + 240))(1, v11); *(_WORD *)(v2[171] + 28) &= 0xFFFEu; (*(void (__cdecl **)(signed int))(*(_DWORD *)v2[171] + 256))(1); } v9 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v2[170] + 240); if ( v2[86] & 0xF ) { v9(0, v12); *(_WORD *)(v2[170] + 28) |= 1u; result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2[170] + 256))(v2[170], 0); } else { v9(1, v12); *(_WORD *)(v2[170] + 28) &= 0xFFFEu; result = (*(int (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v2[170] + 256))(v2[170], 1); } return result; } //----- (00580820) -------------------------------------------------------- int __thiscall sub_580820(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { this[86] |= 0x10u; sub_580590(this, this[86]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[171] + 240))(0); *(_WORD *)(v3[171] + 28) |= 1u; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3[171] + 256))(0); } } else { sub_580590(this, this[86] | 0xF); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[170] + 240))(0); *(_WORD *)(v3[170] + 28) |= 1u; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3[170] + 256))(0); } return result; } //----- (005808C0) -------------------------------------------------------- LONG __thiscall sub_5808C0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; *this = &PartyWin::`vftable'; this[58] = &PartyWin::`vftable'; sub_8F9E00(&unk_BA6B10, (_DWORD *)this[109]); v2 = v1[171]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[170]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); `eh vector destructor iterator'(v1 + 155, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 140, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 125, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 110, 4u, 15, sub_410C00); v4 = v1[109]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9D4BF8: using guessed type void *PartyWin::`vftable'; // 9D4C14: using guessed type void *PartyWin::`vftable'; //----- (00580A10) -------------------------------------------------------- char __thiscall sub_580A10(void *this, int a2, int a3, _DWORD *a4, int a5, int a6) { int v6; // esi volatile LONG *v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi char *v10; // eax volatile LONG **v11; // eax int v12; // edi int v13; // ebx _DWORD *v14; // eax int v15; // eax int v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // eax volatile LONG *v22; // eax int v23; // eax int v24; // eax int v25; // eax volatile LONG **v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // eax volatile LONG *v37; // eax volatile LONG **v38; // eax volatile LONG *v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // eax volatile LONG **v44; // eax volatile LONG *v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax volatile LONG **v50; // eax volatile LONG *v51; // eax volatile LONG **v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // ST3C_4 volatile LONG *v55; // eax volatile LONG *v56; // eax volatile LONG *v57; // ST10_4 volatile LONG **v58; // eax volatile LONG *v59; // eax volatile LONG *v60; // ecx volatile LONG **v61; // eax int v62; // eax volatile LONG *v63; // eax volatile LONG **v64; // eax volatile LONG *v65; // eax volatile LONG *v66; // eax volatile LONG **v67; // eax volatile LONG *v68; // eax volatile LONG *v69; // eax volatile LONG *v70; // eax volatile LONG *v71; // ST40_4 volatile LONG *v72; // eax volatile LONG **v73; // eax volatile LONG *v74; // eax volatile LONG **v75; // eax volatile LONG *v76; // eax int v77; // eax volatile LONG *v78; // eax const CHAR *v79; // eax int v80; // eax const CHAR *v81; // eax int v82; // eax const CHAR *v83; // eax int v84; // eax const CHAR *v85; // eax int v86; // eax const CHAR *v87; // eax int v88; // eax void (__thiscall ***v89)(_DWORD, signed int); // esi void (__thiscall ***v90)(_DWORD, signed int); // esi int v91[5]; // [esp+10h] [ebp-88h] int v92; // [esp+24h] [ebp-74h] int v93; // [esp+28h] [ebp-70h] int v94; // [esp+2Ch] [ebp-6Ch] int v95; // [esp+30h] [ebp-68h] volatile LONG *v96; // [esp+34h] [ebp-64h] volatile LONG **v97; // [esp+38h] [ebp-60h] int v98; // [esp+3Ch] [ebp-5Ch] int v99; // [esp+40h] [ebp-58h] int v100; // [esp+44h] [ebp-54h] char v101; // [esp+48h] [ebp-50h] int v102; // [esp+94h] [ebp-4h] v95 = a6; v6 = (int)this; v98 = 0; v102 = 0; v7 = (volatile LONG *)sub_43D0D0(4u); v96 = v7; if ( !v7 ) goto LABEL_31; v94 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACAB50, "Game\\PtyWin.nif"); sub_8F66B0(v10, (int)&v98, v94); if ( !v98 ) return 0; v11 = sub_8FB140(v98, (int)"Panel03", (int)&v100, (int)&v99, v7); if ( !sub_8F1440((volatile LONG **)v6, a2, a3, (int)v11, a4, v95, (int)"PartyMemberWin", 0) ) { LABEL_31: v8 = (void (__thiscall ***)(_DWORD, signed int))v98; v102 = -1; if ( v98 && !InterlockedDecrement((volatile LONG *)(v98 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v12 = v100; v13 = v99; v14 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v98 + 72))("EventPanel"); v15 = sub_85C050(v14, 8); v95 = v15; if ( v15 ) { InterlockedIncrement((volatile LONG *)(v15 + 4)); v15 = v95; } v16 = **(_DWORD **)(v15 + 40); LOBYTE(v102) = 1; if ( v16 ) { v17 = *(volatile LONG **)(v16 + 4); if ( v17 ) { v18 = sub_8FB140(v98, (int)"EventPanel", (int)&v100, (int)&v99, v17); v19 = sub_8F3EB0(v100, v99, (int)v18, v6, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); sub_456260(v91); LOBYTE(v102) = 2; sub_455FF0(v91, v6); sub_456000(v91, v12, v13); sub_456380(v91, v98); v20 = sub_456820(v91, (int)"SPground", 0); *(_DWORD *)(v6 + 408) = v20; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_456820(v91, (int)"LPground", 0); *(_DWORD *)(v6 + 404) = v21; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v22 = sub_456820(v91, (int)"HPground", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v98 + 72))("FaceCut_Mask"); v24 = sub_402BA0((int)dword_BA478C, v23); *(_DWORD *)(v6 + 412) = sub_460640(0, 0, v24, (_DWORD *)v6); v25 = sub_67E850(); sub_460590(*(_DWORD ***)(v6 + 412), v25); v26 = sub_8FB140(v98, (int)"FaceCut_Mon", (int)&v100, (int)&v99, 0); v27 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v26, v6, 0, 0); *(_DWORD *)(v6 + 416) = v27; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 256))(v27, 0); v28 = sub_8FB140(v98, (int)"FaceCut_OtherMap", (int)&v100, (int)&v99, 0); v29 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v28, v6, 0, 0); *(_DWORD *)(v6 + 424) = v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 424) + 256))(0); v30 = sub_8FB140(v98, (int)"FaceCut_LogOff", (int)&v100, (int)&v99, 0); v31 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v30, v6, 0, 0); *(_DWORD *)(v6 + 420) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 420) + 256))(0); v32 = sub_8FB140(v98, (int)"FaceCut_MiniHouse", (int)&v100, (int)&v99, 0); v33 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v32, v6, 0, 0); *(_DWORD *)(v6 + 428) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 428) + 256))(0); v34 = sub_8FB140(v98, (int)"Panel04", (int)&v100, (int)&v99, v96); v35 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v34, v6, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v36 = sub_8FB140(v98, (int)"Fill_HP_Start", (int)&v100, (int)&v99, v96); v37 = sub_90CB20(v100 - v12, v99 - v13, (int)v36, v6, 2); *(_DWORD *)(v6 + 376) = v37; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 256))(v37, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 376) + 240))(0); v38 = sub_8FB140(v98, (int)"Fill_SP_Start", (int)&v100, (int)&v99, v96); v39 = sub_90CB20(v100 - v12, v99 - v13, (int)v38, v6, 2); *(_DWORD *)(v6 + 384) = v39; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 256))(v39, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 384) + 240))(0); v40 = sub_8FB140(v98, (int)"Fill_HP_End", (int)&v100, (int)&v99, v96); v41 = sub_90CB20(v100 - v12, v99 - v13, (int)v40, v6, 2); *(_DWORD *)(v6 + 380) = v41; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 256))(v41, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 380) + 240))(0); v42 = sub_8FB140(v98, (int)"Fill_SP_End", (int)&v100, (int)&v99, v96); v43 = sub_90CB20(v100 - v12, v99 - v13, (int)v42, v6, 2); *(_DWORD *)(v6 + 388) = v43; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 256))(v43, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 388) + 240))(0); if ( sub_8F71E0(v98, (int)"Fill_HP", &v100, &v99, &v92, &v93) ) { v44 = sub_8FB140(v98, (int)"Fill_HP", (int)&v100, (int)&v99, v96); v45 = sub_90CB20(v100 - v12, v99 - v13, (int)v44, v6, 2); *(_DWORD *)(v6 + 368) = v45; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); if ( sub_8F71E0(v98, (int)"Fill_SP", &v100, &v99, &v92, &v93) ) { v46 = sub_8FB140(v98, (int)"Fill_SP", (int)&v100, (int)&v99, v96); v47 = sub_90CB20(v100 - v12, v99 - v13, (int)v46, v6, 2); *(_DWORD *)(v6 + 372) = v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); v48 = sub_8FB140(v98, (int)"Fill_LP_Start", (int)&v100, (int)&v99, v96); v49 = sub_90CB20(v100 - v12, v99 - v13, (int)v48, v6, 2); *(_DWORD *)(v6 + 396) = v49; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 256))(v49, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 396) + 240))(0); v50 = sub_8FB140(v98, (int)"Fill_LP_End", (int)&v100, (int)&v99, v96); v51 = sub_90CB20(v100 - v12, v99 - v13, (int)v50, v6, 2); *(_DWORD *)(v6 + 400) = v51; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v51 + 256))(v51, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 400) + 240))(0); v52 = sub_8FB140(v98, (int)"Fill_LP", (int)&v100, (int)&v99, v96); v53 = sub_90CB20(v100 - v12, v99 - v13, (int)v52, v6, 2); *(_DWORD *)(v6 + 392) = v53; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v53 + 240))(v53, 0); sub_8F71E0(v98, (int)"CharName", &v100, &v99, &v92, &v93); v54 = (volatile LONG *)dword_AD01E8; v55 = (volatile LONG *)sub_421050(0); v56 = sub_90AEF0( v100 - v12, v99 - v13, v92, v93, v55, (_DWORD *)v6, (int)"2", 0, 0, 1, v54, (volatile LONG *)0x1E); v57 = v96; *(_DWORD *)(v6 + 364) = v56; v58 = sub_8FB140(v98, (int)"Chief_Party", (int)&v100, (int)&v99, v57); v97 = v58; v59 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v58, v6, 0, 0); *(_DWORD *)(v6 + 356) = v59; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); sub_8F71E0(v98, (int)"Num_Level", &v100, &v99, &v92, &v93); v60 = v97[9]; v61 = *(volatile LONG ***)(*v60 + 20); v94 = *(_DWORD *)(*v60 + 24); v97 = v61; v62 = sub_421050(0); v63 = sub_8F4A20(v100 - v12, v99 - v13, (int)v97, v94, v62, v6, 0, 0); *(_DWORD *)(v6 + 360) = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v6 + 360) + 472))("?"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 360) + 240))(0); v94 = 0; v97 = (volatile LONG **)(v6 + 440); while ( 1 ) { sprintf(&v101, "CharBuffBox%02d", v94); if ( !sub_8F71E0(v98, (int)&v101, &v100, &v99, &v92, &v93) ) break; v64 = sub_8FB140(v98, (int)&v101, (int)&v100, (int)&v99, v96); v65 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v64, v6, 0, 0); sub_56FF80(v97 + 30, (int)v65); (*(void (__stdcall **)(_DWORD))(*v97[30] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v97[30] + 256))(0); v66 = sub_5D1B00(v100 + 2, v99 + 2, v92 - 4, v93 - 4, v6, 0); sub_56FF80(v97, (int)v66); (*(void (__stdcall **)(_DWORD))(**v97 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v97 + 256))(0); sprintf(&v101, "CharDBuffBox%02d", v94); v67 = sub_8FB140(v98, (int)&v101, (int)&v100, (int)&v99, v96); v68 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v67, v6, 0, 0); sub_56FF80(v97 + 45, (int)v68); (*(void (__stdcall **)(_DWORD))(*v97[45] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v97[45] + 256))(0); v69 = sub_5D1B00(v100 + 2, v99 + 2, v92 - 4, v93 - 4, v6, 0); sub_56FF80(v97 + 15, (int)v69); (*(void (__stdcall **)(_DWORD))(*v97[15] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v97[15] + 256))(0); ++v97; if ( ++v94 >= 15 ) { v97 = sub_8FB140(v98, (int)"BuffExtendNor", (int)&v100, (int)&v99, v96); sub_8FB650(v97, v98, (int)"BuffExtendClick"); sub_8FB650(v97, v98, (int)"BuffExtendOver"); v70 = sub_8FE0F0(v100, v99, (int)v97, v6, 0, 0, 0); sub_56FF80((_DWORD *)(v6 + 680), (int)v70); sub_8F2EA0(*(void ***)(v6 + 680), "Open"); v71 = v96; *(_DWORD *)(*(_DWORD *)(v6 + 680) + 272) = dword_AD01E8; v97 = sub_8FB140(v98, (int)"DeBuffExtendNor", (int)&v100, (int)&v99, v71); sub_8FB650(v97, v98, (int)"DeBuffExtendClick"); sub_8FB650(v97, v98, (int)"DeBuffExtendOver"); v72 = sub_8FE0F0(v100, v99, (int)v97, v6, 1, 0, 0); sub_56FF80((_DWORD *)(v6 + 684), (int)v72); sub_8F2EA0(*(void ***)(v6 + 684), "Open"); *(_DWORD *)(*(_DWORD *)(v6 + 684) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 680) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 684) + 240))(0); *(_WORD *)(*(_DWORD *)(v6 + 680) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v6 + 684) + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 680) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 684) + 256))(0); v73 = sub_8FB140(v98, (int)"Panel_job", (int)&v100, (int)&v99, v96); sub_8F3EB0(v100 - v12, v99 - v13, (int)v73, v6, 0, 0); v74 = (volatile LONG *)sub_43D0D0(0x12u); v75 = sub_8FB140(v98, (int)"Char_Job", (int)&v100, (int)&v99, v74); v76 = sub_8F3EB0(v100 - v12, v99 - v13, (int)v75, v6, 0, 0); *(_DWORD *)(v6 + 688) = v76; *((_DWORD *)v76 + 68) = dword_AD01E8; v77 = sub_43D0D0(1u); v78 = sub_58E5D0(v77, 4, 4, 0); sub_56FF80((_DWORD *)(v6 + 436), (int)v78); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v6 + 436) + 232))(*(_DWORD *)(v6 + 436) + 232, v6 + 232); sub_58DFD0(*(_DWORD **)(v6 + 436)); v79 = sub_40A910(896084029); v80 = sub_58E450((int)v79, 0, 0, 0, 0, 0); *(_DWORD *)(v80 + 332) = 1015; sub_58E080(*(_DWORD **)(v6 + 436), v12, v80); v81 = sub_40A910(896283009); v82 = sub_58E450((int)v81, 0, 0, 0, 0, 0); *(_DWORD *)(v82 + 332) = 1016; sub_58E080(*(_DWORD **)(v6 + 436), v12, v82); v83 = sub_40A910(895890319); v84 = sub_58E450((int)v83, 0, 0, 0, 0, 0); *(_DWORD *)(v84 + 332) = 1017; sub_58E080(*(_DWORD **)(v6 + 436), v12, v84); v85 = sub_40A910(-618847674); v86 = sub_58E450((int)v85, 0, 0, 0, 0, 0); *(_DWORD *)(v86 + 332) = 1018; sub_58E080(*(_DWORD **)(v6 + 436), v12, v86); v87 = sub_40A910(-569123870); v88 = sub_58E450((int)v87, 0, 0, 0, 0, 0); *(_DWORD *)(v88 + 332) = 1019; sub_58E080(*(_DWORD **)(v6 + 436), v12, v88); sub_58D930(*(_DWORD **)(v6 + 436), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 436) + 256))(0); sub_580590((_DWORD *)v6, 0xFFFFFFFF); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 240))(v6, 1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 520))(v6, 0); LOBYTE(v102) = 1; sub_4562E0(v91); v89 = (void (__thiscall ***)(_DWORD, signed int))v95; LOBYTE(v102) = 0; if ( !InterlockedDecrement((volatile LONG *)(v95 + 4)) ) (**v89)(v89, 1); v90 = (void (__thiscall ***)(_DWORD, signed int))v98; v102 = -1; if ( v98 && !InterlockedDecrement((volatile LONG *)(v98 + 4)) && v90 ) (**v90)(v90, 1); return 1; } } } } LOBYTE(v102) = 1; sub_4562E0(v91); } } LOBYTE(v102) = 0; sub_410C00(&v95); v102 = -1; sub_410C00(&v98); return 0; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005818B0) -------------------------------------------------------- int __thiscall sub_5818B0(void *this, int a2) { int v2; // esi int result; // eax _DWORD ***v4; // edi signed int v5; // ebx int *v6; // eax char *v7; // eax char *v8; // edi bool v9; // zf int v10; // eax _BYTE *v11; // eax int v12; // edi void *v13; // ebx _DWORD *v14; // eax _DWORD *v15; // eax int v16; // [esp+0h] [ebp-14h] int v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v2 = (int)this; result = (*(int (**)(void))(*(_DWORD *)this + 260))(); if ( (_BYTE)result ) { if ( *(_BYTE *)(v2 + 348) ) { (*(void (__thiscall **)(int, int *, int *))(*(_DWORD *)v2 + 180))(v2, &v17, &v18); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v2 + 436) + 308))(v17, v18); sub_8FA050(&unk_BA6B10, v2, *(_DWORD **)(v2 + 436)); *(_BYTE *)(v2 + 348) = 0; } v4 = (_DWORD ***)(v2 + 440); v5 = 15; do { ((void (__stdcall *)(_DWORD))(**v4)[64])(0); ((void (__stdcall *)(_DWORD))(**v4)[60])(0); ((void (__stdcall *)(_DWORD))(**v4)[62])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[64])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[60])(0); ((void (__stdcall *)(_DWORD))(*v4[15])[62])(0); ((void (__stdcall *)(_DWORD))(*v4[30])[64])(0); ((void (__stdcall *)(_DWORD))(*v4[45])[64])(0); sub_5D0F80(*v4); sub_5D0F80(v4[15]); ++v4; --v5; } while ( v5 ); v6 = *(int **)(v2 + 432); if ( v6 ) { v7 = sub_6648F0(dword_AD8C90, *v6, v6[1], v6[2], v6[3], v6[4]); v8 = v7; if ( v7 ) { sub_64F860(v7); v9 = (*(_BYTE *)(v2 + 344) & 1) == 0; v17 = 0; v18 = 0; if ( !v9 ) sub_5801F0((char *)v2, v8, 1, &v18); if ( *(_BYTE *)(v2 + 344) & 2 ) sub_5801F0((char *)v2, v8, 2, &v18); if ( *(_BYTE *)(v2 + 344) & 4 ) sub_5801F0((char *)v2, v8, 3, &v18); if ( *(_BYTE *)(v2 + 344) & 8 ) sub_5801F0((char *)v2, v8, 0, &v18); if ( *(_BYTE *)(v2 + 344) & 0x10 ) sub_5801F0((char *)v2, v8, 4, &v17); } v10 = *(_DWORD *)(v2 + 432); if ( !*(_BYTE *)(v10 + 20) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 420) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 428) + 256))(*(_DWORD *)(v2 + 428), 0); } if ( !*(_BYTE *)(v10 + 64) || (v11 = sub_6648F0( dword_AD8C90, *(_DWORD *)v10, *(_DWORD *)(v10 + 4), *(_DWORD *)(v10 + 8), *(_DWORD *)(v10 + 12), *(_DWORD *)(v10 + 16)), (v12 = (int)v11) == 0) ) { (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v2 + 412) + 256))(0, v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 424) + 256))(1); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 428) + 256))(*(_DWORD *)(v2 + 428), 0); } if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v11 + 48))(v11) ) { (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v2 + 412) + 256))(0, v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); return (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v2 + 428) + 256))(*(_DWORD *)(v2 + 428), 1); } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v12 + 648))(v12) ) { v13 = *(void **)(*(_DWORD *)(v2 + 416) + 288); v14 = sub_67F2B0(v12); sub_8FCC40(v13, (int)v14); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v2 + 412) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 416) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 428) + 256))(0); } v15 = sub_67F2B0(v12); sub_460590(*(_DWORD ***)(v2 + 412), (int)v15); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 412) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 256))(0); } else { (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v2 + 412) + 256))(0, v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 420) + 256))(1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 428) + 256))(*(_DWORD *)(v2 + 428), 0); } return result; } //----- (00581CE0) -------------------------------------------------------- _DWORD *__thiscall sub_581CE0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int *v3; // edi int v4; // ebx int v5; // ebx int v6; // ebx int v7; // ebx signed int v9; // [esp+14h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &PartyWin::`vftable'; v1[58] = &PartyWin::`vftable'; v1[109] = 0; `eh vector constructor iterator'( v1 + 110, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 125, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 140, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 155, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[170] = 0; v1[171] = 0; v2 = v1[109]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[109] = 0; } *((_BYTE *)v1 + 348) = 0; v3 = v1 + 125; v9 = 15; do { v4 = *(v3 - 15); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(v3 - 15) = 0; } v5 = *v3; if ( *v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v3 = 0; } v6 = v3[15]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[15] = 0; } v7 = v3[30]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3[30] = 0; } ++v3; --v9; } while ( v9 ); v1[108] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D4BF8: using guessed type void *PartyWin::`vftable'; // 9D4C14: using guessed type void *PartyWin::`vftable'; //----- (00581EF0) -------------------------------------------------------- int __thiscall sub_581EF0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v4; // ecx int v6; // eax int v7; // edx int v8; // ecx int v9; // eax int v10; // ecx void (__stdcall *v11)(int *); // edx float *v12; // ecx void (__stdcall *v13)(signed int); // edx int v14; // eax int v15; // eax float *v16; // ecx int v17; // eax int v18; // ecx float *v19; // ecx int v20; // eax unsigned __int8 v21; // al unsigned int v22; // ebx int v23; // eax int v24; // edi float v25; // eax double v26; // st7 int (__thiscall *v27)(int); // eax unsigned int v28; // eax double v29; // st7 int v30; // eax int v31; // eax int v32; // edi int v33; // eax const char *v34; // eax float v35; // [esp+Ch] [ebp-4Ch] float v36; // [esp+10h] [ebp-48h] float v37; // [esp+14h] [ebp-44h] float v38; // [esp+18h] [ebp-40h] int v39; // [esp+1Ch] [ebp-3Ch] int v40; // [esp+20h] [ebp-38h] int v41; // [esp+24h] [ebp-34h] int v42; // [esp+28h] [ebp-30h] int v43; // [esp+2Ch] [ebp-2Ch] int v44; // [esp+30h] [ebp-28h] int v45; // [esp+34h] [ebp-24h] int v46; // [esp+38h] [ebp-20h] int v47; // [esp+3Ch] [ebp-1Ch] int v48; // [esp+40h] [ebp-18h] int v49; // [esp+44h] [ebp-14h] char v50; // [esp+48h] [ebp-10h] float v51[2]; // [esp+4Ch] [ebp-Ch] v2 = 0; v3 = this; if ( !a2 ) { v4 = this[90]; v3[108] = 0; (*(void (__stdcall **)(void *))(*(_DWORD *)v4 + 472))(&unk_9D49FB); (*(void (__stdcall **)(void *))(*(_DWORD *)v3[91] + 472))(&unk_9D4A07); v3[108] = 0; return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v3 + 256))(v3, 0); } this[108] = a2; v6 = *(_DWORD *)a2; v7 = *(_DWORD *)(a2 + 8); v46 = *(_DWORD *)(a2 + 4); v8 = *(_DWORD *)(a2 + 16); v45 = v6; v9 = *(_DWORD *)(a2 + 12); v49 = v8; v10 = v3[91]; v47 = v7; v48 = v9; v50 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v10 + 472))(&v45); v11 = *(void (__stdcall **)(int *))(*(_DWORD *)v3[91] + 468); if ( *(_BYTE *)(a2 + 20) ) v11(&dword_AA8C68); else v11((int *)&unk_AA8CE8); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[92] + 256))(1); v12 = (float *)v3[92]; v51[0] = (double)*(signed int *)(a2 + 36); v12[75] = (double)*(signed int *)(a2 + 28); v12[76] = v51[0]; sub_49F670(v12); v13 = *(void (__stdcall **)(signed int))(*(_DWORD *)v3[94] + 256); if ( *(_DWORD *)(a2 + 28) <= 0 ) v13(0); else v13(1); v14 = *(_DWORD *)(a2 + 36); if ( *(_DWORD *)(a2 + 28) == v14 && v14 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[95] + 256))(1); else (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[95] + 256))(0); v15 = *(unsigned __int8 *)(a2 + 52); LOBYTE(v39) = 0; switch ( v15 ) { case 26: case 27: LOBYTE(v39) = 1; break; default: break; } (*(void (__stdcall **)(int))(*(_DWORD *)v3[101] + 256))(v39); LOBYTE(v2) = (_BYTE)v39 == 0; (*(void (__stdcall **)(int))(*(_DWORD *)v3[102] + 256))(v2); if ( (_BYTE)v39 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3[93] + 256))(v2); (*(void (__stdcall **)(int))(*(_DWORD *)v3[96] + 256))(v2); (*(void (__stdcall **)(int))(*(_DWORD *)v3[97] + 256))(v2); (*(void (__stdcall **)(int))(*(_DWORD *)v3[98] + 256))(v39); v16 = (float *)v3[98]; v51[0] = (double)*(signed int *)(a2 + 48); v16[75] = (double)*(signed int *)(a2 + 44); v16[76] = v51[0]; sub_49F670(v16); (*(void (__stdcall **)(bool))(*(_DWORD *)v3[99] + 256))(*(_DWORD *)(a2 + 44) > 0); v17 = *(_DWORD *)(a2 + 48); if ( *(_DWORD *)(a2 + 44) == v17 && v17 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[100] + 256))(1); goto LABEL_25; } v18 = v3[100]; } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[98] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[99] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[100] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[93] + 256))(1); v19 = (float *)v3[93]; v51[0] = (double)*(signed int *)(a2 + 40); v19[75] = (double)*(signed int *)(a2 + 32); v19[76] = v51[0]; sub_49F670(v19); (*(void (__stdcall **)(bool))(*(_DWORD *)v3[96] + 256))(*(_DWORD *)(a2 + 32) > 0); v20 = *(_DWORD *)(a2 + 40); if ( *(_DWORD *)(a2 + 32) == v20 && v20 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[97] + 256))(1); goto LABEL_25; } v18 = v3[97]; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 256))(0); LABEL_25: if ( *(_BYTE *)(a2 + 64) ) { _itoa(*(_DWORD *)(a2 + 24), (char *)v51, 10); (*(void (__stdcall **)(float *))(*(_DWORD *)v3[90] + 472))(v51); } else { (*(void (__stdcall **)(const char *))(*(_DWORD *)v3[90] + 472))("?"); } if ( sub_718A50(&dword_B9E560) ) { if ( dword_B9E56C != *(_DWORD *)a2 || dword_B9E570 != *(_DWORD *)(a2 + 4) || dword_B9E574 != *(_DWORD *)(a2 + 8) || dword_B9E578 != *(_DWORD *)(a2 + 12) || dword_B9E57C != *(_DWORD *)(a2 + 16) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[89] + 256))(0); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[89] + 256))(1); } } else { sub_6C1530(&dword_B9DC70, &v40); if ( v40 != *(_DWORD *)a2 || v41 != *(_DWORD *)(a2 + 4) || v42 != *(_DWORD *)(a2 + 8) || v43 != *(_DWORD *)(a2 + 12) || v44 != *(_DWORD *)(a2 + 16) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[89] + 256))(0); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[89] + 256))(1); } } switch ( *(unsigned __int8 *)(a2 + 52) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v21 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v21 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v21 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v21 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v21 = 21; break; case 0x1Au: case 0x1Bu: v21 = 26; break; default: v21 = 0; break; } v22 = v21; *(float *)&v39 = 0.0; switch ( v21 ) { case 1u: *(float *)&v39 = 0.0; break; case 6u: v39 = 1; break; case 0xBu: v39 = 3; break; case 0x10u: v39 = 2; break; case 0x15u: v39 = 4; break; case 0x1Au: v39 = 5; break; default: break; } v23 = (*(int (**)(void))(*(_DWORD *)v3[172] + 456))(); v24 = v23; v25 = COERCE_FLOAT((*(int (__thiscall **)(int))(*(_DWORD *)v23 + 60))(v23)); v51[0] = v25; v26 = 16.0 / (double)LODWORD(v25); v27 = *(int (__thiscall **)(int))(*(_DWORD *)v24 + 64); v51[0] = v26; *(float *)&v28 = COERCE_FLOAT(v27(v24)); v38 = *(float *)&v28; v29 = (double)v28; v30 = *(_DWORD *)(v3[172] + 288); v38 = 16.0 / v29; *(float *)&v39 = (double)v39 * v51[0]; v35 = v38 + v38; if ( v30 ) v31 = *(_DWORD *)(v30 + 8); else v31 = 0; v32 = **(_DWORD **)(v31 + 12); v36 = *(float *)&v39; v37 = v38 + v38; sub_868090(v32, 0, 0, 0, &v36); v36 = *(float *)&v39; v38 = v35 + v38; v37 = v38; sub_868090(v32, 0, 1, 0, &v36); v51[0] = *(float *)&v39 + v51[0]; v36 = v51[0]; v37 = v38; sub_868090(v32, 0, 2, 0, &v36); v36 = v51[0]; v37 = v35; sub_868090(v32, 0, 3, 0, &v36); v33 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v22); if ( v33 ) v34 = (const char *)(v33 + 21); else v34 = &byte_9A8050; sub_8F2EA0((void **)v3[172], v34); return (*(int (__thiscall **)(_DWORD *, signed int))(*v3 + 256))(v3, 1); } // AA8C68: using guessed type int dword_AA8C68; // AC9C84: using guessed type int dword_AC9C84; // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E56C: using guessed type int dword_B9E56C; // B9E570: using guessed type int dword_B9E570; // B9E574: using guessed type int dword_B9E574; // B9E578: using guessed type int dword_B9E578; // B9E57C: using guessed type int dword_B9E57C; //----- (00582560) -------------------------------------------------------- volatile LONG *__cdecl sub_582560(int a1, int a2, _DWORD *a3, int a4, int a5) { _DWORD *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x2B4u); v9 = v5; v10 = 0; if ( v5 ) v6 = sub_581CE0(v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( sub_580A10((void *)v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } result = 0; } return result; } //----- (005826A0) -------------------------------------------------------- void *__thiscall sub_5826A0(void *this, char a2) { void *v2; // esi v2 = this; sub_5808C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005826D0) -------------------------------------------------------- _DWORD *__thiscall sub_5826D0(_DWORD *this) { _DWORD *result; // eax result = this; *(_BYTE *)this = 0; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; return result; } //----- (00582700) -------------------------------------------------------- int __thiscall sub_582700(_DWORD *this, int a2) { signed int v2; // esi _DWORD *v3; // edi int v4; // ebx int v5; // eax int result; // eax int v7; // [esp+18h] [ebp-10Ch] int v8; // [esp+1Ch] [ebp-108h] char Src; // [esp+20h] [ebp-104h] v2 = 0; v3 = this; v8 = 0; v7 = 0; v4 = 0; do { v3[v2 + 1] = sub_582560(v7, v4, 0, 0, a2); if ( !v2 ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v3[1] + 236))(xRight, dword_AC2F78, 0.0, 0.33000001); v7 = (*(int (**)(void))(*(_DWORD *)v3[1] + 164))(); v4 = (*(int (**)(void))(*(_DWORD *)v3[1] + 168))(); v8 = (*(int (**)(void))(*(_DWORD *)v3[1] + 148))(); } v4 += v8; sub_8F82A0(&unk_BA6B10, (_DWORD *)v3[v2 + 1]); sprintf(&Src, "PartyWinName%i", v2); sub_85AB50((void **)v3[v2 + 1], &Src); v5 = sub_6C10B0(&dword_B9DC70, v2); result = sub_581EF0((_DWORD *)v3[v2++ + 1], v5); } while ( v2 < 4 ); return result; } // B9DC70: using guessed type int dword_B9DC70; //----- (00582830) -------------------------------------------------------- _DWORD *__thiscall sub_582830(int *this) { int *v1; // esi signed int v2; // edi _DWORD *result; // eax v1 = this + 1; v2 = 4; do { result = (_DWORD *)*v1; if ( *v1 ) { sub_6BD4D0(*v1); result = sub_8F9E00(&unk_BA6B10, (_DWORD *)*v1); *v1 = 0; } ++v1; --v2; } while ( v2 ); return result; } //----- (00582870) -------------------------------------------------------- int __thiscall sub_582870(_DWORD *this, int a2) { signed int v2; // esi _DWORD *v3; // edi int v4; // ebx int v5; // eax int result; // eax int v7; // [esp+18h] [ebp-10Ch] int v8; // [esp+1Ch] [ebp-108h] char Src; // [esp+20h] [ebp-104h] v2 = 0; v3 = this; v8 = 0; v7 = 0; v4 = 0; do { v3[v2 + 5] = sub_572560(v7, v4, 0, 0, a2); if ( !v2 ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v3[5] + 236))(xRight, dword_AC2F78, 0.0, 0.33000001); v7 = (*(int (**)(void))(*(_DWORD *)v3[5] + 164))(); v4 = (*(int (**)(void))(*(_DWORD *)v3[5] + 168))(); v8 = (*(int (**)(void))(*(_DWORD *)v3[5] + 148))(); } v4 += v8; sprintf(&Src, "MiniPartyWinName%i", v2); sub_85AB50((void **)v3[v2 + 5], &Src); v5 = sub_6C10B0(&dword_B9DC70, v2); result = sub_571F20((_DWORD *)v3[v2++ + 5], v5); } while ( v2 < 4 ); return result; } // B9DC70: using guessed type int dword_B9DC70; //----- (00582A30) -------------------------------------------------------- int __thiscall sub_582A30(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_582700(this, a2); return sub_582870(v2, a2); } //----- (00582A50) -------------------------------------------------------- _DWORD *__thiscall sub_582A50(int *this) { int *v1; // esi signed int v2; // edi _DWORD *result; // eax int *v4; // esi v4 = this; sub_582830(this); v1 = v4 + 5; v2 = 4; do { result = (_DWORD *)*v1; if ( *v1 ) { sub_6BD4D0(*v1); result = sub_8F9E00(&unk_BA6B10, (_DWORD *)*v1); *v1 = 0; } ++v1; --v2; } while ( v2 ); return result; } //----- (00582A60) -------------------------------------------------------- void __thiscall sub_582A60(_DWORD *this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx unsigned int v4; // ebx unsigned int v5; // esi int v6; // eax v1 = (_DWORD **)(this + 1); if ( this[1] ) { v2 = (_DWORD **)(this + 1); v3 = 4; do { sub_581EF0(*v2, 0); ++v2; --v3; } while ( v3 ); v4 = dword_B9DCC4; v5 = 0; if ( dword_B9DCC4 ) { do { v6 = sub_6C10B0(&dword_B9DC70, v5); sub_581EF0(*v1, v6); ++v5; ++v1; } while ( v5 < v4 ); } } } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00582AB0) -------------------------------------------------------- int __thiscall sub_582AB0(_DWORD **this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx int result; // eax unsigned int v5; // ebx unsigned int v6; // esi int v7; // eax v1 = this + 5; v2 = this + 5; v3 = 4; do { result = sub_571F20(*v2, 0); ++v2; --v3; } while ( v3 ); v5 = dword_B9DCC4; v6 = 0; if ( dword_B9DCC4 ) { do { v7 = sub_6C10B0(&dword_B9DC70, v6); result = sub_571F20(*v1, v7); ++v6; ++v1; } while ( v6 < v5 ); } return result; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00582B00) -------------------------------------------------------- int __thiscall sub_582B00(int *this, char a2) { int result; // eax int *v3; // ecx int v4; // esi int *v5; // ecx int v6; // esi result = dword_B9DCC4; if ( dword_B9DCC4 ) { if ( *(_BYTE *)this ) { v3 = this + 5; if ( *v3 && dword_B9DCC4 ) { v4 = dword_B9DCC4; do { result = *v3; if ( *v3 ) { if ( a2 ) *(_WORD *)(result + 28) |= 1u; else *(_WORD *)(result + 28) &= 0xFFFEu; } ++v3; --v4; } while ( v4 ); } } else { v5 = this + 1; if ( *v5 && dword_B9DCC4 ) { v6 = dword_B9DCC4; do { result = *v5; if ( *v5 ) { if ( a2 ) *(_WORD *)(result + 28) |= 1u; else *(_WORD *)(result + 28) &= 0xFFFEu; } ++v5; --v6; } while ( v6 ); } } } return result; } // B9DCC4: using guessed type int dword_B9DCC4; //----- (00582B90) -------------------------------------------------------- int __thiscall sub_582B90(_DWORD *this) { _DWORD **v1; // esi v1 = (_DWORD **)this; sub_582A60(this); return sub_582AB0(v1); } //----- (00582BA0) -------------------------------------------------------- void __thiscall sub_582BA0(_DWORD *this) { _DWORD *v1; // ebx signed int v2; // edi _DWORD **v3; // esi _DWORD **v4; // esi _DWORD **v5; // esi bool v6; // zf signed int v7; // edi unsigned int v8; // ebx unsigned int v9; // esi _DWORD **v10; // edi int v11; // eax signed int v12; // [esp+4h] [ebp-8h] _DWORD *v13; // [esp+8h] [ebp-4h] v1 = this; v13 = this; if ( this[1] ) { v12 = 4; do { v2 = 4; if ( *(_BYTE *)v1 ) { v3 = (_DWORD **)(v1 + 1); do { sub_8F86A0(&unk_BA6B10, v3[4]); sub_8F82A0(&unk_BA6B10, *v3); sub_580590(*v3, v3[4][86]); ++v3; --v2; } while ( v2 ); } else { v4 = (_DWORD **)(v1 + 5); do { sub_8F86A0(&unk_BA6B10, *(v4 - 4)); sub_8F82A0(&unk_BA6B10, *v4); sub_570A90(*v4, (*(v4 - 4))[86]); ++v4; --v2; } while ( v2 ); } --v12; } while ( v12 ); v5 = (_DWORD **)(v1 + 1); v6 = v1[1] == 0; *(_BYTE *)v1 = *(_BYTE *)v1 == 0; if ( !v6 ) { v7 = 4; do { sub_581EF0(*v5, 0); ++v5; --v7; } while ( v7 ); v8 = dword_B9DCC4; v9 = 0; if ( dword_B9DCC4 ) { v10 = (_DWORD **)(v13 + 1); do { v11 = sub_6C10B0(&dword_B9DC70, v9); sub_581EF0(*v10, v11); ++v9; ++v10; } while ( v9 < v8 ); } v1 = v13; } sub_582AB0((_DWORD **)v1); } } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00582CF0) -------------------------------------------------------- int __thiscall sub_582CF0(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; result = sub_466A50(this[87]); v1[90] = 0; return result; } //----- (00582D30) -------------------------------------------------------- int __thiscall sub_582D30(_DWORD *this, int a2) { int result; // eax result = a2; this[89] = a2; return result; } //----- (00582DB0) -------------------------------------------------------- int __thiscall sub_582DB0(_DWORD *this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD **v9; // esi void *v10; // ebx int v11; // edi void *v12; // ST0C_4 char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax void (__thiscall **v20)(_DWORD, char *); // [esp+14h] [ebp+8h] v9 = (_DWORD **)this; v10 = a2; v11 = ((int (__thiscall *)(_DWORD, _DWORD))loc_466CA0)(this[87], 0); if ( !v11 ) { v12 = a2; v20 = (void (__thiscall **)(_DWORD, char *))*v9[86]; v13 = sub_7549E0("\" %s \"", v12); ((void (__thiscall **)(_DWORD *, char *))v20)[118](v9[86], v13); } v14 = sub_7549E0("%d", v11 + 1); sub_4661A0(v9[87], v11, 0, v14); sub_4661A0(v9[87], v11, 1, v10); v15 = sub_7549E0("%d", a3); sub_4661A0(v9[87], v11, 2, v15); v16 = sub_7549E0("%d", -a4); sub_4661A0(v9[87], v11, 3, v16); v17 = sub_7549E0("%d", a5); sub_4661A0(v9[87], v11, 4, v17); v18 = sub_7549E0("%d", a9); sub_4661A0(v9[87], v11, 5, v18); if ( !strcmp((const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(), (const char *)v10) ) sub_464BE0(v9[87], v11, 128, 245, 122); sub_464D00(v9[87], 5); sub_465130(v9[87]); return sub_4638F0(v9[88], v9[87][84]); } //----- (00582F30) -------------------------------------------------------- int __thiscall sub_582F30(_DWORD *this) { *(_DWORD *)(this[87] + 344) = *(_DWORD *)(this[88] + 300); return sub_465130((_DWORD *)this[87]); } //----- (00582F60) -------------------------------------------------------- char __thiscall sub_582F60(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2 - 1; switch ( a2 ) { case 1: LOBYTE(v3) = sub_8F2BC0(this, 1, 0, 0); break; case 4: LOBYTE(v3) = sub_582F30(this); break; case 11: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "RankingWin"); break; default: return (char)v3; } return (char)v3; } //----- (00582FE0) -------------------------------------------------------- char __thiscall sub_582FE0(void *this, int a2) { int v2; // esi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi char result; // al volatile LONG *v7; // eax volatile LONG **v8; // eax char v9; // ST1C_1 int v10; // ST20_4 int v11; // ST24_4 int v12; // ST28_4 const CHAR *v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi int v15; // eax volatile LONG *v16; // ebx const CHAR *v17; // eax int v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // ebx char v21; // ST1C_1 int v22; // ST20_4 int v23; // ST24_4 int v24; // ST28_4 const CHAR *v25; // eax volatile LONG *v26; // ebx int *v27; // eax int *v28; // edi _DWORD *v29; // eax _DWORD *v30; // edi _DWORD *v31; // eax _DWORD *v32; // edi _DWORD *v33; // eax _DWORD *v34; // edi _DWORD *v35; // eax _DWORD *v36; // edi _DWORD *v37; // eax _DWORD *v38; // edi _DWORD *v39; // eax _DWORD *v40; // edi volatile LONG **v41; // eax volatile LONG *v42; // eax volatile LONG **v43; // eax int v44; // eax int *v45; // eax int v46; // ebx int v47; // edi int v48; // eax int v49; // eax volatile LONG *v50; // esi char v51; // ST1C_1 int v52; // ST20_4 int v53; // ST24_4 int v54; // ST28_4 const CHAR *v55; // eax volatile LONG *v56; // esi char v57; // ST1C_1 int v58; // ST20_4 int v59; // ST24_4 int v60; // ST28_4 const CHAR *v61; // eax volatile LONG *v62; // esi char v63; // ST1C_1 int v64; // ST20_4 int v65; // ST24_4 int v66; // ST28_4 const CHAR *v67; // eax volatile LONG *v68; // esi char v69; // ST1C_1 int v70; // ST20_4 int v71; // ST24_4 int v72; // ST28_4 const CHAR *v73; // eax volatile LONG *v74; // esi char v75; // ST1C_1 int v76; // ST20_4 int v77; // ST24_4 int v78; // ST28_4 const CHAR *v79; // eax volatile LONG *v80; // esi char v81; // ST1C_1 int v82; // ST20_4 int v83; // ST24_4 int v84; // ST28_4 const CHAR *v85; // eax int v86; // [esp+10h] [ebp-8Ch] int v87; // [esp+14h] [ebp-88h] int v88; // [esp+18h] [ebp-84h] char v89; // [esp+20h] [ebp-7Ch] int v90; // [esp+24h] [ebp-78h] int v91; // [esp+28h] [ebp-74h] int v92; // [esp+2Ch] [ebp-70h] int v93; // [esp+30h] [ebp-6Ch] int v94; // [esp+34h] [ebp-68h] int v95; // [esp+38h] [ebp-64h] int v96; // [esp+3Ch] [ebp-60h] int v97; // [esp+40h] [ebp-5Ch] int v98; // [esp+44h] [ebp-58h] int v99; // [esp+48h] [ebp-54h] int v100; // [esp+4Ch] [ebp-50h] int v101[5]; // [esp+50h] [ebp-4Ch] int v102; // [esp+64h] [ebp-38h] int v103; // [esp+68h] [ebp-34h] int v104; // [esp+6Ch] [ebp-30h] const void *v105[7]; // [esp+70h] [ebp-2Ch] int v106; // [esp+98h] [ebp-4h] v2 = (int)this; v104 = 0; v106 = 0; v94 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\RankingWin.nif"); sub_8F66B0(v3, (int)&v104, v94); if ( !v104 ) return 0; v4 = sub_8FB140(v104, (int)"Frame", (int)&v99, (int)&v100, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"PkKqRankingWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v104; v106 = -1; if ( v104 && !InterlockedDecrement((volatile LONG *)(v104 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(v101); LOBYTE(v106) = 1; sub_455FF0(v101, v2); sub_456000(v101, v99, v100); sub_456380(v101, v104); sub_456820(v101, (int)"Panel01", 0); v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v104, (int)"Theme", (int)&v103, (int)&v102, v7); else v8 = sub_8FB140(v104, (int)"Theme", (int)&v103, (int)&v102, 0); sub_8F3EB0(v103, v102, (int)v8, v2, 0, 0); sub_456820(v101, (int)"IconSlot", 0); v9 = dword_AA8C68; v10 = dword_AA8C6C; v11 = dword_AA8C70; v12 = dword_AA8C74; v13 = sub_40C190(-1711737613); sub_456760(v101, (int)"WinTitle", (int)v13, v9, v10, v11, v12, 5); if ( sub_8F71E0(v104, (int)"Txt02", &v96, &v95, &v98, &v97) ) { v15 = sub_421050(1); v16 = sub_8F4A20(v96 - v99 + 20, v95 - v100 - 13, v98, v97, v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); sub_9074F0(*((_DWORD *)v16 + 72), 1); v94 = *v16; v17 = sub_40C190(-520866751); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v94 + 472))(v16, v17); sub_9076A0(*((_DWORD **)v16 + 72), 3); if ( sub_8F71E0(v104, (int)"Txt01", &v96, &v95, &v98, &v97) ) { v18 = sub_421050(5); v19 = sub_8F4A20(v96 - v99 + 20, v95 - v100 - 10, v98, v97, v18, v2, 0, 0); *(_DWORD *)(v2 + 344) = v19; (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v2 + 344) + 464))( 255, 255, 128, 255); v20 = sub_4563D0(v101, 1, (int)"Btn01Nor", (int)"Btn01Over", (int)"Btn01Click", 0, 0); v21 = dword_AA8C68; v22 = dword_AA8C6C; v23 = dword_AA8C70; v24 = dword_AA8C74; v25 = sub_40C190(-688132097); sub_456040((int)v20, (int)v25, v21, v22, v23, v24, 5); sub_4564D0(v101, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); v26 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v104 + 72))("HelpLinkNor") ) sub_4563D0(v101, 11, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v26); v86 = 0; v87 = 0; v88 = 0; v89 = 0; v90 = 0; v91 = 0; v92 = 0; v93 = 0; LOBYTE(v106) = 2; v27 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 1); v28 = v27; *v27 = 1; v27[1] = v104; sub_4019E0(v105, "ColumnBarNor"); v28 += 18; LOBYTE(v106) = 3; sub_40B060(v28, v105); LOBYTE(v106) = 2; sub_636A10(v105); sub_4019E0(v105, "ColumnBarClick"); LOBYTE(v106) = 4; sub_40B060(v28, v105); LOBYTE(v106) = 2; sub_636A10(v105); sub_4019E0(v105, "ColumnBarOver"); LOBYTE(v106) = 5; sub_40B060(v28, v105); LOBYTE(v106) = 2; sub_636A10(v105); v29 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v30 = v29; *v29 = 2; sub_4019E0(v105, "Column01"); LOBYTE(v106) = 6; sub_40B060(v30 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v30[1] = v104; v31 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v32 = v31; *v31 = 2; sub_4019E0(v105, "Column02"); LOBYTE(v106) = 7; sub_40B060(v32 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v32[1] = v104; *((_BYTE *)v32 + 88) = 1; v33 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v34 = v33; *v33 = 2; sub_4019E0(v105, "Column03"); LOBYTE(v106) = 8; sub_40B060(v34 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v34[1] = v104; v35 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v36 = v35; *v35 = 2; sub_4019E0(v105, "Column04"); LOBYTE(v106) = 9; sub_40B060(v36 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v36[1] = v104; v37 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v38 = v37; *v37 = 2; sub_4019E0(v105, "Column05"); LOBYTE(v106) = 10; sub_40B060(v38 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v38[1] = v104; v39 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v86, 2); v40 = v39; *v39 = 2; sub_4019E0(v105, "Column06"); LOBYTE(v106) = 11; sub_40B060(v40 + 18, v105); LOBYTE(v106) = 2; sub_636A10(v105); v40[1] = v104; sub_466680(&v86, 0); v41 = sub_8FB140(v104, (int)"Text01", (int)&v103, (int)&v102, 0); v42 = sub_466330(v103 - v99, v102 - v100, (int)v41, *(float *)&v2, (int **)&v86, 3, 0); *(_DWORD *)(v2 + 348) = v42; *((_DWORD *)v42 + 89) = 2; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 352) = 3; sub_465130(*(_DWORD **)(v2 + 348)); v43 = sub_8FB140(v104, (int)"SlideBar_SlideBtnMiddle", (int)&v103, (int)&v102, 0); v44 = sub_464310(v104, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v43, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 352) = v44; *(_DWORD *)(v44 + 312) = 4; *(_DWORD *)(*(_DWORD *)(v2 + 352) + 304) = 1; v45 = *(int **)(v2 + 352); v46 = *v45; v47 = *(_DWORD *)(v2 + 352); v48 = (*(int (__thiscall **)(_DWORD))(*v45 + 168))(*(_DWORD *)(v2 + 352)); v49 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v47 + 164))(v47, v48); (*(void (__thiscall **)(_DWORD, int))(v46 + 308))(*(_DWORD *)(v2 + 352), v49 - 20); v50 = sub_4563D0(v101, 5, (int)"Title01Nor", (int)"Title01Over", (int)"Title01Over", 0, 0); v51 = dword_AA8C68; v52 = dword_AA8C6C; v53 = dword_AA8C70; v54 = dword_AA8C74; v55 = sub_40C190(-1850608659); sub_456040((int)v50, (int)v55, v51, v52, v53, v54, 5); v56 = sub_4563D0(v101, 6, (int)"Title02Nor", (int)"Title02Over", (int)"Title02Over", 0, 0); v57 = dword_AA8C68; v58 = dword_AA8C6C; v59 = dword_AA8C70; v60 = dword_AA8C74; v61 = sub_40C190(-469614799); sub_456040((int)v56, (int)v61, v57, v58, v59, v60, 5); v62 = sub_4563D0(v101, 7, (int)"Title03Nor", (int)"Title03Over", (int)"Title03Over", 0, 0); v63 = dword_AA8C68; v64 = dword_AA8C6C; v65 = dword_AA8C70; v66 = dword_AA8C74; v67 = sub_40C190(-397524428); sub_456040((int)v62, (int)v67, v63, v64, v65, v66, 5); v68 = sub_4563D0(v101, 8, (int)"Title04Nor", (int)"Title04Over", (int)"Title04Over", 0, 0); v69 = dword_AA8C68; v70 = dword_AA8C6C; v71 = dword_AA8C70; v72 = dword_AA8C74; v73 = sub_40C190(-297319361); sub_456040((int)v68, (int)v73, v69, v70, v71, v72, 5); v74 = sub_4563D0(v101, 9, (int)"Title05Nor", (int)"Title05Over", (int)"Title05Over", 0, 0); v75 = dword_AA8C68; v76 = dword_AA8C6C; v77 = dword_AA8C70; v78 = dword_AA8C74; v79 = sub_40C190(759714095); sub_456040((int)v74, (int)v79, v75, v76, v77, v78, 5); v80 = sub_4563D0(v101, 10, (int)"Title06Nor", (int)"Title06Over", (int)"Title06Over", 0, 0); v81 = dword_AA8C68; v82 = dword_AA8C6C; v83 = dword_AA8C70; v84 = dword_AA8C74; v85 = sub_40C190(-1610618381); sub_456040((int)v80, (int)v85, v81, v82, v83, v84, 5); LOBYTE(v106) = 1; sub_40AE10((void **)&v86); LOBYTE(v106) = 0; sub_4562E0(v101); v106 = -1; sub_410C00(&v104); result = 1; } else { LOBYTE(v106) = 0; sub_4562E0(v101); v106 = -1; sub_410C00(&v104); result = 0; } } else { LOBYTE(v106) = 0; sub_4562E0(v101); v14 = (void (__thiscall ***)(_DWORD, signed int))v104; v106 = -1; if ( v104 && !InterlockedDecrement((volatile LONG *)(v104 + 4)) && v14 ) (**v14)(v14, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005839B0) -------------------------------------------------------- int __cdecl sub_5839B0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &PkKqRankingWin::`vftable'; *(_DWORD *)(v2 + 232) = &PkKqRankingWin::`vftable'; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( sub_582FE0((void *)v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D5104: using guessed type void *PkKqRankingWin::`vftable'; // 9D5124: using guessed type void *PkKqRankingWin::`vftable'; //----- (00583B00) -------------------------------------------------------- void *__thiscall sub_583B00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PkKqRankingWin::`vftable'; *((_DWORD *)this + 58) = &PkKqRankingWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D5104: using guessed type void *PkKqRankingWin::`vftable'; // 9D5124: using guessed type void *PkKqRankingWin::`vftable'; //----- (00583B40) -------------------------------------------------------- BOOL __cdecl sub_583B40(int a1, int a2) { return *(_DWORD *)(a2 + 36) < *(_DWORD *)(a1 + 36); } //----- (00583B60) -------------------------------------------------------- BOOL __cdecl sub_583B60(int a1, int a2) { return *(_DWORD *)(a2 + 32) < *(_DWORD *)(a1 + 32); } //----- (00583B80) -------------------------------------------------------- char sub_583B80() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "KDScoreRealTime"); return (char)v0; } //----- (00583BB0) -------------------------------------------------------- char __thiscall sub_583BB0(_DWORD *this) { if ( !((this[104] - this[103]) / 44) ) return 0; (*(void (__stdcall **)(signed int))(*this + 256))(1); return 1; } //----- (00583BF0) -------------------------------------------------------- _DWORD *__thiscall sub_583BF0(int this, int a2) { _DWORD *v2; // ebx _DWORD *result; // eax unsigned int v4; // edi _DWORD *v5; // esi unsigned int v6; // [esp+4h] [ebp-4h] v2 = (_DWORD *)this; *(_BYTE *)(this + 380) = a2; v6 = 0; result = (_DWORD *)sub_402C40((_DWORD *)this, &v6); if ( result ) { v4 = v6; while ( 1 ) { if ( (_DWORD *)v2[92] != result && (_DWORD *)v2[93] != result ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, int))(*result + 256))(result, a2); if ( v4 >= v2[47] ) break; while ( 1 ) { result = (_DWORD *)v2[45]; v5 = (_DWORD *)result[v4]; if ( v5 ) { result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v5 + 4))(v5); if ( result ) break; } LABEL_11: if ( ++v4 >= v2[47] ) return result; } while ( result != (_DWORD *)&unk_BA6A8C ) { result = (_DWORD *)result[1]; if ( !result ) goto LABEL_11; } ++v4; result = v5; } } return result; } //----- (00583CA0) -------------------------------------------------------- char __thiscall sub_583CA0(_DWORD *this, unsigned __int8 *a2) { void *v2; // eax int v3; // ST0C_4 _DWORD *v4; // eax int v5; // eax int v6; // ST0C_4 _DWORD *v7; // eax int v8; // edx _BYTE *v9; // eax _DWORD *v10; // eax int v11; // ecx int v12; // ST0C_4 _DWORD *v13; // eax int v14; // eax int v15; // ST0C_4 _DWORD *v16; // eax int v17; // edx unsigned int v18; // ebx unsigned __int8 *v19; // edx unsigned int v20; // esi unsigned int v21; // eax unsigned __int8 *v22; // ecx int v23; // eax int v24; // eax int v25; // ecx int v27; // [esp+10h] [ebp-ECh] void **v28; // [esp+14h] [ebp-E8h] void **v29; // [esp+60h] [ebp-9Ch] void ***v30; // [esp+A8h] [ebp-54h] int v31; // [esp+ACh] [ebp-50h] _DWORD *v32; // [esp+B0h] [ebp-4Ch] void *v33; // [esp+B4h] [ebp-48h] unsigned int v34; // [esp+C4h] [ebp-38h] unsigned int v35; // [esp+C8h] [ebp-34h] void *v36; // [esp+D0h] [ebp-2Ch] unsigned int v37; // [esp+E4h] [ebp-18h] int v38; // [esp+F8h] [ebp-4h] v32 = this; v2 = (void *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v35 = 15; v34 = 0; LOBYTE(v33) = 0; sub_4018E0(&v33, v2, strlen((const char *)v2)); v38 = 0; sub_529D40(&v27, 2u, 1); v3 = *((_DWORD *)a2 + 10); LOBYTE(v38) = 1; sub_529500(&v27, v3); v4 = sub_52B2F0(&v27, &v36); LOBYTE(v38) = 2; if ( v4[5] >= 0x10u ) v4 = (_DWORD *)*v4; v31 = ((int (__thiscall *)(_DWORD, _DWORD *))loc_466CA0)(v32[86], v4); if ( v37 >= 0x10 ) operator delete(v36); v5 = *(_DWORD *)(v27 + 4); v30 = &v29; *(int *)((char *)&v27 + v5) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v38) = 3; v28 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v28); sub_423AE0(&v28); *(int *)((char *)&v27 + *(_DWORD *)(v27 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v38) = 0; v29 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v29); sub_529D40(&v27, 2u, 1); v6 = *((_DWORD *)a2 + 7); LOBYTE(v38) = 4; sub_529500(&v27, v6); v7 = sub_52B2F0(&v27, &v36); LOBYTE(v38) = 5; if ( v7[5] >= 0x10u ) v7 = (_DWORD *)*v7; sub_4661A0((_DWORD *)v32[86], v31, 1, v7); if ( v37 >= 0x10 ) operator delete(v36); v8 = *(_DWORD *)(v27 + 4); v30 = &v29; *(int *)((char *)&v27 + v8) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v38) = 6; v28 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v28); sub_423AE0(&v28); *(int *)((char *)&v27 + *(_DWORD *)(v27 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v38) = 0; v29 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v29); sub_529D40(&v27, 2u, 1); LOBYTE(v38) = 7; v9 = sub_406190(&v27, " "); sub_529AA0(v9, a2); v10 = sub_52B2F0(&v27, &v36); LOBYTE(v38) = 8; if ( v10[5] >= 0x10u ) v10 = (_DWORD *)*v10; sub_4661A0((_DWORD *)v32[86], v31, 2, v10); if ( v37 >= 0x10 ) operator delete(v36); v11 = *(_DWORD *)(v27 + 4); v30 = &v29; *(int *)((char *)&v27 + v11) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v38) = 9; v28 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v28); sub_423AE0(&v28); *(int *)((char *)&v27 + *(_DWORD *)(v27 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v38) = 0; v29 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v29); sub_529D40(&v27, 2u, 1); v12 = *((_DWORD *)a2 + 8); LOBYTE(v38) = 10; sub_529500(&v27, v12); v13 = sub_52B2F0(&v27, &v36); LOBYTE(v38) = 11; if ( v13[5] >= 0x10u ) v13 = (_DWORD *)*v13; sub_4661A0((_DWORD *)v32[86], v31, 3, v13); if ( v37 >= 0x10 ) operator delete(v36); v14 = *(_DWORD *)(v27 + 4); v30 = &v29; *(int *)((char *)&v27 + v14) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v38) = 12; v28 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v28); sub_423AE0(&v28); *(int *)((char *)&v27 + *(_DWORD *)(v27 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v38) = 0; v29 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v29); sub_529D40(&v27, 2u, 1); v15 = *((_DWORD *)a2 + 9); LOBYTE(v38) = 13; sub_529500(&v27, v15); v16 = sub_52B2F0(&v27, &v36); LOBYTE(v38) = 14; if ( v16[5] >= 0x10u ) v16 = (_DWORD *)*v16; sub_4661A0((_DWORD *)v32[86], v31, 4, v16); if ( v37 >= 0x10 ) operator delete(v36); v17 = *(_DWORD *)(v27 + 4); v30 = &v29; *(int *)((char *)&v27 + v17) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v38) = 15; v28 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v28); sub_423AE0(&v28); *(int *)((char *)&v27 + *(_DWORD *)(v27 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v38) = 0; v29 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v29); v18 = *((_DWORD *)a2 + 4); if ( *((_DWORD *)a2 + 5) < 0x10u ) v19 = a2; else v19 = *(unsigned __int8 **)a2; v20 = v34; v21 = v34; if ( v34 >= v18 ) v21 = *((_DWORD *)a2 + 4); v22 = (unsigned __int8 *)v33; if ( v35 < 0x10 ) v22 = (unsigned __int8 *)&v33; v23 = sub_40C0B0(v22, v19, v21); if ( v23 || v20 < v18 || (LOBYTE(v23) = v20 != v18, v23) ) { v24 = 255; v25 = 0; } else { v24 = 102; v25 = 51; } sub_464BE0((_DWORD *)v32[86], v31, v24, 255, v25); if ( v35 >= 0x10 ) operator delete(v33); return 1; } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (005841D0) -------------------------------------------------------- char __thiscall sub_5841D0(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx void *v3; // eax int v4; // ecx int v5; // esi unsigned int v6; // ebx unsigned __int8 *v7; // edx unsigned int v8; // ecx unsigned __int8 *v9; // eax int v10; // ebx unsigned __int8 *v11; // ecx unsigned int v12; // edx unsigned __int8 *v13; // esi int v14; // eax int v15; // eax unsigned int v16; // eax int v18; // [esp+10h] [ebp-38h] unsigned int v19; // [esp+14h] [ebp-34h] int v20; // [esp+14h] [ebp-34h] int v21; // [esp+18h] [ebp-30h] void *v22; // [esp+1Ch] [ebp-2Ch] unsigned int v23; // [esp+2Ch] [ebp-1Ch] unsigned int v24; // [esp+30h] [ebp-18h] int v25; // [esp+44h] [ebp-4h] v1 = this; v2 = this[104] - this[103]; v18 = 9; if ( (unsigned int)(v2 / 44) <= 9 ) v18 = v2 / 44; sub_466A50((_DWORD *)v1[86]); v3 = (void *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v24 = 15; v23 = 0; LOBYTE(v22) = 0; sub_4018E0(&v22, v3, strlen((const char *)v3)); v4 = v1[104] - v1[103]; v25 = 0; v19 = 0; if ( v4 / 44 ) { v21 = 0; do { v5 = v21 + v1[103]; v6 = *(_DWORD *)(v5 + 16); if ( *(_DWORD *)(v5 + 20) < 0x10u ) v7 = (unsigned __int8 *)(v21 + v1[103]); else v7 = *(unsigned __int8 **)v5; v8 = v23; if ( v23 >= v6 ) v8 = *(_DWORD *)(v5 + 16); v9 = (unsigned __int8 *)v22; if ( v24 < 0x10 ) v9 = (unsigned __int8 *)&v22; if ( !sub_40C0B0(v9, v7, v8) && v23 >= v6 && v23 == v6 ) sub_583CA0(v1, (unsigned __int8 *)v5); v21 += 44; ++v19; } while ( v19 < (v1[104] - v1[103]) / 44 ); } if ( v18 > 0 ) { v20 = 0; do { v10 = v20 + v1[103]; if ( *(_DWORD *)(v10 + 20) < 0x10u ) v11 = (unsigned __int8 *)(v20 + v1[103]); else v11 = *(unsigned __int8 **)v10; v12 = v23; if ( v23 >= *(_DWORD *)(v10 + 16) ) v12 = *(_DWORD *)(v10 + 16); v13 = (unsigned __int8 *)v22; if ( v24 < 0x10 ) v13 = (unsigned __int8 *)&v22; if ( v12 < 4 ) { LABEL_29: if ( !v12 ) goto LABEL_39; } else { while ( *(_DWORD *)v13 == *(_DWORD *)v11 ) { v12 -= 4; v11 += 4; v13 += 4; if ( v12 < 4 ) goto LABEL_29; } } v14 = *v13 - *v11; if ( *v13 != *v11 ) goto LABEL_37; if ( v12 > 1 ) { v14 = v13[1] - v11[1]; if ( v13[1] != v11[1] ) goto LABEL_37; if ( v12 > 2 ) { v14 = v13[2] - v11[2]; if ( v13[2] != v11[2] ) goto LABEL_37; if ( v12 > 3 ) { v14 = v13[3] - v11[3]; LABEL_37: v10 = v20 + v1[103]; v15 = (v14 >> 31) | 1; goto LABEL_40; } } } v10 = v20 + v1[103]; LABEL_39: v15 = 0; LABEL_40: if ( v15 || (v16 = *(_DWORD *)(v10 + 16), v23 < v16) || v23 != v16 ) sub_583CA0(v1, (unsigned __int8 *)v10); v20 += 44; --v18; } while ( v18 ); } sub_464DA0((_DWORD *)v1[86], 2u, 4); sub_465130((_DWORD *)v1[86]); if ( v24 >= 0x10 ) operator delete(v22); return 1; } //----- (00584450) -------------------------------------------------------- int __thiscall sub_584450(void *this) { int v1; // esi _DWORD *v2; // edi int v3; // ecx v1 = (int)this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &PkRealTiemRankWin::`vftable'; *(_DWORD *)(v1 + 232) = &PkRealTiemRankWin::`vftable'; *(_DWORD *)(v1 + 404) = 15; *(_DWORD *)(v1 + 400) = 0; *(_BYTE *)(v1 + 384) = 0; *(_DWORD *)(v1 + 412) = 0; *(_DWORD *)(v1 + 416) = 0; *(_DWORD *)(v1 + 420) = 0; v2 = (_DWORD *)(v1 + 432); *(_DWORD *)(v1 + 448) = 0; *(_DWORD *)(v1 + 376) = 14; v3 = *(_DWORD *)(v1 + 448); if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); *(_DWORD *)(v1 + 448) = 0; } if ( sub_5E9760 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; *(_DWORD *)(v1 + 436) = sub_5E9760; *(_DWORD *)(v1 + 448) = v1 + 432; } else { *(_DWORD *)(v1 + 448) = 0; } sub_583BF0(v1, 1); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D5444: using guessed type void *std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; // 9D5460: using guessed type void *PkRealTiemRankWin::`vftable'; // 9D547C: using guessed type void *PkRealTiemRankWin::`vftable'; //----- (00584530) -------------------------------------------------------- LONG __thiscall sub_584530(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; *this = &PkRealTiemRankWin::`vftable'; this[58] = &PkRealTiemRankWin::`vftable'; v2 = this[112]; if ( v2 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v2 + 12))(v2 != (_DWORD)(v1 + 108)); v1[112] = 0; } v3 = v1[103]; if ( v3 ) { sub_585540(v3, v1[104]); operator delete((void *)v1[103]); } v1[103] = 0; v1[104] = 0; v1[105] = 0; if ( v1[101] >= 0x10u ) operator delete((void *)v1[96]); v1[101] = 15; v1[100] = 0; *((_BYTE *)v1 + 384) = 0; return sub_8F10F0(v1); } // 9D5460: using guessed type void *PkRealTiemRankWin::`vftable'; // 9D547C: using guessed type void *PkRealTiemRankWin::`vftable'; //----- (00584630) -------------------------------------------------------- volatile LONG *__cdecl sub_584630(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_584450(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00584760) -------------------------------------------------------- char __thiscall sub_584760(_DWORD *this) { _DWORD *v1; // esi const void **v2; // eax int v3; // ecx int v4; // edi v1 = this; v2 = (const void **)this[104]; v3 = this[103]; if ( (const void **)v3 != v2 ) { v4 = sub_5854E0(v2, v2, v3); sub_585540(v4, v1[104]); v1[104] = v4; } sub_466A50((_DWORD *)v1[86]); sub_465130((_DWORD *)v1[86]); return 1; } //----- (005847D0) -------------------------------------------------------- char __thiscall sub_5847D0(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this; if ( a2 ) sub_584760(this); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 256))(v2, 0); return 1; } //----- (00584800) -------------------------------------------------------- char __thiscall sub_584800(_DWORD *this, void *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int *v6; // esi int v7; // edi int v8; // ecx unsigned int v9; // eax int v10; // edi unsigned __int8 *v11; // edx unsigned int v12; // ebx unsigned int v13; // ecx unsigned __int8 *v14; // eax int v15; // eax bool v16; // zf signed int v17; // eax int v18; // ecx int v19; // ecx unsigned int v20; // edi int v21; // ebx _DWORD *v22; // edi int (__stdcall ***v23)(char *); // ecx char *v24; // eax int (__stdcall **v25)(char *); // edx int v26; // ebx int v27; // esi char *v28; // ecx int (__thiscall *v29)(char *, char *); // eax int v30; // eax _DWORD *v31; // esi char v33; // [esp-18h] [ebp-8Ch] int v34; // [esp-14h] [ebp-88h] int v35; // [esp-10h] [ebp-84h] int v36; // [esp-Ch] [ebp-80h] char *v37; // [esp-8h] [ebp-7Ch] char v38; // [esp+10h] [ebp-64h] char *v39; // [esp+20h] [ebp-54h] _DWORD *v40; // [esp+28h] [ebp-4Ch] unsigned int v41; // [esp+2Ch] [ebp-48h] char *v42; // [esp+30h] [ebp-44h] char v43; // [esp+37h] [ebp-3Dh] void *v44; // [esp+38h] [ebp-3Ch] unsigned int v45; // [esp+48h] [ebp-2Ch] unsigned int v46; // [esp+4Ch] [ebp-28h] int v47; // [esp+54h] [ebp-20h] int v48; // [esp+58h] [ebp-1Ch] int v49; // [esp+5Ch] [ebp-18h] int v50; // [esp+60h] [ebp-14h] int v51; // [esp+70h] [ebp-4h] v5 = this; v40 = this; v46 = 15; v45 = 0; LOBYTE(v44) = 0; v51 = 0; sub_4018E0(&v44, a2, strlen((const char *)a2)); v6 = v5 + 103; v7 = v5[103]; v47 = a3; v49 = a4; v8 = v6[1] - v7; v48 = a5; v9 = v8 / 44; v50 = 0; v43 = 0; v41 = 0; if ( !(v8 / 44) ) goto LABEL_43; v42 = 0; do { if ( v9 <= v41 ) std::_Xout_of_range("invalid vector subscript"); v10 = (int)&v42[v7]; v11 = (unsigned __int8 *)v44; if ( v46 < 0x10 ) v11 = (unsigned __int8 *)&v44; v12 = *(_DWORD *)(v10 + 16); v13 = v45; if ( v12 < v45 ) v13 = *(_DWORD *)(v10 + 16); if ( *(_DWORD *)(v10 + 20) < 0x10u ) v14 = (unsigned __int8 *)v10; else v14 = *(unsigned __int8 **)v10; v15 = sub_40C0B0(v14, v11, v13); v16 = v15 == 0; if ( !v15 ) { if ( v12 >= v45 ) v17 = v12 != v45; else v17 = -1; v16 = v17 == 0; } if ( v16 ) { v43 = 1; sub_4017F0((const void **)v10, (const void **)&v44, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v10 + 28) = v47; *(_DWORD *)(v10 + 32) = v48; *(_DWORD *)(v10 + 36) = v49; *(_DWORD *)(v10 + 40) = v50; } v7 = *v6; v18 = v6[1]; v42 += 44; v9 = (v18 - v7) / 44; ++v41; } while ( v41 < v9 ); if ( !v43 ) LABEL_43: sub_5872E0(v6, (unsigned int)&v44); sub_5873F0(*v6, v40[104], (v40[104] - *v6) / 44, (unsigned __int8 (__cdecl *)(int, int))sub_5E9760); v19 = *v6; v20 = 0; if ( (v6[1] - *v6) / 44 ) { v21 = 0; do { *(_DWORD *)(v19 + v21 + 40) = ++v20; v19 = *v6; v21 += 44; } while ( v20 < (v6[1] - *v6) / 44 ); } v22 = v40; v23 = (int (__stdcall ***)(char *))v40[112]; if ( v23 ) { v25 = *v23; if ( v23 == v40 + 108 ) v24 = (char *)(*v25)(&v38); else v24 = (char *)(*v25)(0); } else { v24 = 0; } v26 = v22[104]; v27 = *v6; v39 = v24; LOBYTE(v51) = 1; v42 = &v33; if ( v24 ) { v16 = v24 == &v38; v28 = v24; v29 = **(int (__thiscall ***)(char *, char *))v24; if ( v16 ) v30 = v29(v28, &v33); else v30 = v29(v28, 0); v37 = (char *)v30; } else { v37 = 0; } sub_587530(v27, v26, (v26 - v27) / 44, v33, v34, v35, v36, v37); LOBYTE(v51) = 0; if ( v39 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v39 + 12))(v39 != &v38); v31 = v40; sub_5841D0(v40); (*(void (__thiscall **)(_DWORD *, signed int))(*v31 + 256))(v31, 1); if ( v46 >= 0x10 ) operator delete(v44); return 1; } //----- (00584AE0) -------------------------------------------------------- char __thiscall sub_584AE0(int this, int a2, int a3) { char result; // al _DWORD *v4; // esi int v5; // ecx _DWORD *v6; // edi int v7; // ecx int v8; // ecx int v9; // ecx char v10; // [esp-18h] [ebp-24h] int v11; // [esp-14h] [ebp-20h] int v12; // [esp-10h] [ebp-1Ch] int v13; // [esp-Ch] [ebp-18h] int v14; // [esp-8h] [ebp-14h] result = a2; v4 = (_DWORD *)this; switch ( a2 ) { case 0: return (unsigned int)sub_583BF0(this, *(_BYTE *)(this + 380) == 0); case 1: v5 = *(_DWORD *)(this + 448); v6 = v4 + 108; if ( v5 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v5 + 12))(v5 != (_DWORD)v6); v4[112] = 0; } if ( !sub_5E9800 ) goto LABEL_6; *v6 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; v4[109] = sub_5E9800; goto LABEL_8; case 2: v7 = *(_DWORD *)(this + 448); v6 = v4 + 108; if ( v7 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v7 + 12))(v7 != (_DWORD)v6); v4[112] = 0; } if ( !sub_5E9760 ) goto LABEL_6; *v6 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; v4[109] = sub_5E9760; goto LABEL_8; case 3: v6 = (_DWORD *)(this + 432); sub_585490((_DWORD *)(this + 432), (int)sub_585460); goto LABEL_9; case 4: v8 = *(_DWORD *)(this + 448); v6 = v4 + 108; if ( v8 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v8 + 12))(v8 != (_DWORD)v6); v4[112] = 0; } if ( !sub_583B60 ) goto LABEL_6; *v6 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; v4[109] = sub_583B60; goto LABEL_8; case 5: v9 = *(_DWORD *)(this + 448); v6 = v4 + 108; if ( v9 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v9 + 12))(v9 != (_DWORD)v6); v4[112] = 0; } if ( sub_583B40 ) { *v6 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; v4[109] = sub_583B40; LABEL_8: v6[4] = v6; } else { LABEL_6: v6[4] = 0; } LABEL_9: sub_5ED0B0(&v10, (int)v6); sub_587790(v4[103], v4[104], v10, v11, v12, v13, v14); result = sub_5841D0(v4); break; case 6: result = sub_583B80(); break; default: return result; } return result; } // 587790: using guessed type _DWORD __cdecl sub_587790(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // 9D5444: using guessed type void *std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; //----- (00584C90) -------------------------------------------------------- char __thiscall sub_584C90(_DWORD *this, int a2) { int v2; // edi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax char v8; // ST1C_1 int v9; // ST20_4 int v10; // ST24_4 int v11; // ST28_4 const CHAR *v12; // eax volatile LONG *v13; // esi int v14; // esi volatile LONG *v15; // eax _DWORD *v16; // edi char v17; // cl int v18; // edi bool v19; // zf _DWORD *v20; // esi int v21; // edi int v22; // esi volatile LONG **v23; // eax float v24; // edi const void **v25; // eax int v26; // ecx float v27; // eax int v28; // ecx float i; // esi void (__thiscall ***v30)(_DWORD, signed int); // esi int v31; // [esp+10h] [ebp-18Ch] void *v32; // [esp+14h] [ebp-188h] int v33; // [esp+18h] [ebp-184h] int v34; // [esp+1Ch] [ebp-180h] char v35; // [esp+20h] [ebp-17Ch] char v36; // [esp+24h] [ebp-178h] int v37; // [esp+28h] [ebp-174h] int v38; // [esp+2Ch] [ebp-170h] int v39; // [esp+30h] [ebp-16Ch] int v40; // [esp+34h] [ebp-168h] int v41[5]; // [esp+38h] [ebp-164h] int v42; // [esp+4Ch] [ebp-150h] int *v43; // [esp+50h] [ebp-14Ch] int v44; // [esp+54h] [ebp-148h] volatile LONG **v45; // [esp+58h] [ebp-144h] int v46; // [esp+5Ch] [ebp-140h] float v47; // [esp+60h] [ebp-13Ch] int v48; // [esp+64h] [ebp-138h] int v49; // [esp+68h] [ebp-134h] void *v50; // [esp+6Ch] [ebp-130h] const CHAR *v51; // [esp+74h] [ebp-128h] const CHAR *v52; // [esp+78h] [ebp-124h] const CHAR *v53; // [esp+7Ch] [ebp-120h] void *v54; // [esp+80h] [ebp-11Ch] void *v55; // [esp+84h] [ebp-118h] char v56; // [esp+88h] [ebp-114h] char v57; // [esp+89h] [ebp-113h] int v58; // [esp+198h] [ebp-4h] v2 = (int)this; v47 = *(float *)&this; v49 = 0; this[74] = a2; v58 = 0; v48 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\KDScoreRealTime.nif"); sub_8F66B0(v3, (int)&v49, v48); if ( !v49 ) return 0; v4 = sub_8FB140(v49, (int)"Frame", (int)&v44, (int)&v42, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v4, 0, a2, (int)"PkRealTiemRankWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v49; v58 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(v41); LOBYTE(v58) = 1; sub_455FF0(v41, v2); sub_456000(v41, v44, v42); sub_456380(v41, v49); v7 = (volatile LONG *)sub_43D0D0(0x13u); sub_456820(v41, (int)"Theme", v7); sub_456820(v41, (int)"Plane", 0); v8 = dword_AA8D98; v9 = dword_AA8D9C; v10 = dword_AA8DA0; v11 = dword_AA8DA4; v12 = sub_40A910(-1635291245); *(_DWORD *)(v2 + 372) = sub_456760(v41, (int)"WinTitle", (int)v12, v8, v9, v10, v11, 5); *(_DWORD *)(v2 + 368) = sub_456B30(v41, 0, "Cls", 0, 3); v13 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v49 + 72))("HelpLinkNor") ) sub_4563D0(v41, 6, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v13); v51 = sub_40C190(-1850608659); v52 = sub_40A910(-1733191529); v53 = sub_40A910(-1632530709); v54 = &unk_9D5359; v55 = &unk_9D535A; v14 = 1; v43 = (int *)&v51; v45 = (volatile LONG **)(v2 + 348); v48 = 5; do { v56 = 0; memset(&v57, 0, 0x103u); sprintf(&v56, "Title%02d", v14); v15 = sub_456B30(v41, v14, &v56, 0, 3); *v45 = v15; v16 = (void **)((char *)&v55 + 3); do { v17 = *((_BYTE *)v16 + 1); v16 = (_DWORD *)((char *)v16 + 1); } while ( v17 ); *v16 = nullsub_46; v18 = (int)v43; sub_456040((int)v15, *v43, aIii[0], *(int *)&aIii[4], dword_AA8CA0, dword_AA8CA4, 5); ++v45; ++v14; v19 = v48-- == 1; v43 = (int *)(v18 + 4); } while ( !v19 ); sub_456820(v41, (int)&unk_9D53E0, 0); sub_456820(v41, (int)"Lose", 0); v32 = 0; v33 = 0; v34 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; LOBYTE(v58) = 2; v20 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v32, 1); *v20 = 1; v54 = (void *)15; v53 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "ColumnBarNor", 0xCu); LOBYTE(v58) = 3; sub_40B060(v20 + 18, (const void **)&v50); LOBYTE(v58) = 2; if ( (unsigned int)v54 >= 0x10 ) operator delete(v50); v20[1] = v49; v21 = 0; do { v56 = 0; memset(&v57, 0, 0x103u); v48 = v21 + 1; sprintf(&v56, "Column%02d", v21 + 1); v22 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v32, 2); *(_DWORD *)v22 = 2; v54 = (void *)15; v53 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, &v56, strlen(&v56)); LOBYTE(v58) = 4; sub_40B060((int *)(v22 + 72), (const void **)&v50); LOBYTE(v58) = 2; if ( (unsigned int)v54 >= 0x10 ) operator delete(v50); v54 = (void *)15; v53 = 0; LOBYTE(v50) = 0; *(_DWORD *)(v22 + 4) = v49; if ( v21 == 2 ) *(_BYTE *)(v22 + 88) = 1; v21 = v48; } while ( (unsigned int)v48 < 5 ); sub_466680(&v32, 0); v23 = sub_8FB140(v49, (int)"Plane01", (int)&v46, (int)&v31, 0); v24 = v47; *(_DWORD *)(LODWORD(v24) + 344) = sub_466330(v46 - v44, v31 - v42 - 2, (int)v23, v47, (int **)&v32, 1, 0); v25 = *(const void ***)(LODWORD(v24) + 416); v26 = *(_DWORD *)(LODWORD(v24) + 412); if ( (const void **)v26 != v25 ) { v27 = COERCE_FLOAT(sub_5854E0(v25, v25, v26)); v28 = *(_DWORD *)(LODWORD(v24) + 416); v47 = v27; v48 = v28; for ( i = v27; LODWORD(i) != v28; LODWORD(i) += 44 ) { if ( *(_DWORD *)(LODWORD(i) + 20) >= 0x10u ) { operator delete(*(void **)LODWORD(i)); v27 = v47; v28 = v48; } *(_DWORD *)(LODWORD(i) + 20) = 15; *(_DWORD *)(LODWORD(i) + 16) = 0; *(_BYTE *)LODWORD(i) = 0; } *(float *)(LODWORD(v24) + 416) = v27; } sub_466A50(*(_DWORD **)(LODWORD(v24) + 344)); sub_465130(*(_DWORD **)(LODWORD(v24) + 344)); LOBYTE(v58) = 1; if ( v32 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v32, v33, &v35, v46); operator delete(v32); } v32 = 0; v33 = 0; v34 = 0; LOBYTE(v58) = 0; sub_4562E0(v41); v30 = (void (__thiscall ***)(_DWORD, signed int))v49; v58 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v30 ) (**v30)(v30, 1); return 1; } // 726F4E: using guessed type int __stdcall nullsub_46(int); // AA8CA0: using guessed type int dword_AA8CA0; // AA8CA4: using guessed type int dword_AA8CA4; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00585330) -------------------------------------------------------- void *__stdcall sub_585330(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x5D1745D || (result = operator new(44 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00585390) -------------------------------------------------------- int __thiscall sub_585390(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int result; // eax v1 = this; v2 = this[4]; if ( v2 ) { result = (*(int (__stdcall **)(bool))(*(_DWORD *)v2 + 12))(v2 != (_DWORD)v1); v1[4] = 0; } return result; } //----- (005853C0) -------------------------------------------------------- void ***sub_5853C0() { return &bool (__cdecl *)(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &) `RTTI Type Descriptor'; } // AB0B00: using guessed type void **bool (__cdecl *)(PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &) `RTTI Type Descriptor'; //----- (005853D0) -------------------------------------------------------- void *__thiscall sub_5853D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base2::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9D5428: using guessed type void *std::tr1::_Impl_base2::`vftable'; //----- (00585400) -------------------------------------------------------- char *__thiscall sub_585400(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(8u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; *((_DWORD *)result + 1) = v3[1]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9D5444: using guessed type void *std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00585460) -------------------------------------------------------- bool __cdecl sub_585460(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a2; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a2; return sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), v2, *(_DWORD *)(a2 + 16)) < 0; } //----- (00585490) -------------------------------------------------------- _DWORD *__thiscall sub_585490(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; v3 = this[4]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( a2 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; v2[1] = a2; v2[4] = v2; } else { v2[4] = 0; } return v2; } // 9D5444: using guessed type void *std::tr1::_Impl_no_alloc2,bool,PkRealTiemRankWin::RankInfo const &,PkRealTiemRankWin::RankInfo const &>::`vftable'; //----- (005854E0) -------------------------------------------------------- int __cdecl sub_5854E0(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi const void *v5; // ecx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 8; do { sub_4017F0((const void **)v3, v4 - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = *(v4 - 1); *(_DWORD *)(v3 + 32) = *v4; *(_DWORD *)(v3 + 36) = v4[1]; v5 = v4[2]; v4 += 11; *(_DWORD *)(v3 + 40) = v5; v3 += 44; } while ( v4 - 8 != a2 ); return v3; } //----- (00585540) -------------------------------------------------------- void __cdecl sub_585540(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 44 ) { if ( *(_DWORD *)(i + 20) >= 0x10u ) operator delete(*(void **)i); *(_DWORD *)(i + 20) = 15; *(_DWORD *)(i + 16) = 0; *(_BYTE *)i = 0; } } //----- (00585580) -------------------------------------------------------- void __cdecl sub_585580(int a1, int a2) { int v2; // ecx int v3; // edx int v4; // eax bool v5; // cf int v6; // ecx int v7; // edx int v8; // eax void *v9; // [esp+Ch] [ebp-3Ch] int v10; // [esp+1Ch] [ebp-2Ch] unsigned int v11; // [esp+20h] [ebp-28h] int v12; // [esp+28h] [ebp-20h] int v13; // [esp+2Ch] [ebp-1Ch] int v14; // [esp+30h] [ebp-18h] int v15; // [esp+34h] [ebp-14h] int v16; // [esp+44h] [ebp-4h] v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4017F0((const void **)&v9, (const void **)a1, 0, (void *)0xFFFFFFFF); v2 = *(_DWORD *)(a1 + 32); v3 = *(_DWORD *)(a1 + 36); v12 = *(_DWORD *)(a1 + 28); v4 = *(_DWORD *)(a1 + 40); v13 = v2; v14 = v3; v15 = v4; v16 = 0; sub_4017F0((const void **)a1, (const void **)a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); sub_4017F0((const void **)a2, (const void **)&v9, 0, (void *)0xFFFFFFFF); v5 = v11 < 0x10; v6 = v13; v7 = v14; *(_DWORD *)(a2 + 28) = v12; v8 = v15; *(_DWORD *)(a2 + 32) = v6; *(_DWORD *)(a2 + 36) = v7; *(_DWORD *)(a2 + 40) = v8; if ( !v5 ) operator delete(v9); } //----- (00585670) -------------------------------------------------------- int __cdecl sub_585670(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // edi int i; // ebx int v7; // esi int v8; // edi int v9; // edi int result; // eax v5 = a2; for ( i = (a2 - 1) / 2; a3 < v5; i = (i - 1) / 2 ) { v7 = a1 + 44 * i; if ( !a5(a1 + 44 * i, a4) ) break; v8 = a1 + 44 * v5; sub_4017F0((const void **)v8, (const void **)v7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v8 + 28) = *(_DWORD *)(v7 + 28); *(_DWORD *)(v8 + 32) = *(_DWORD *)(v7 + 32); *(_DWORD *)(v8 + 36) = *(_DWORD *)(v7 + 36); *(_DWORD *)(v8 + 40) = *(_DWORD *)(v7 + 40); v5 = i; } v9 = a1 + 44 * v5; sub_4017F0((const void **)v9, (const void **)a4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(_DWORD *)(a4 + 28); *(_DWORD *)(v9 + 32) = *(_DWORD *)(a4 + 32); *(_DWORD *)(v9 + 36) = *(_DWORD *)(a4 + 36); result = *(_DWORD *)(a4 + 40); *(_DWORD *)(v9 + 40) = result; return result; } //----- (00585710) -------------------------------------------------------- int __cdecl sub_585710(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi if ( a1 == a2 ) return a3; v3 = a3; v4 = a2 + 8; do { v4 -= 11; v3 -= 44; sub_4017F0((const void **)v3, v4 - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = *(v4 - 1); *(_DWORD *)(v3 + 32) = *v4; *(_DWORD *)(v3 + 36) = v4[1]; *(_DWORD *)(v3 + 40) = v4[2]; } while ( v4 - 8 != a1 ); return v3; } //----- (00585770) -------------------------------------------------------- int __cdecl sub_585770(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9) { int v9; // edi int i; // ebx int v11; // esi int v12; // edi int v13; // edi int result; // eax std::tr1 *v15; // [esp+0h] [ebp-1Ch] v9 = a2; for ( i = (a2 - 1) / 2; a3 < v9; i = (i - 1) / 2 ) { if ( !a9 ) std::tr1::_Xfunc(v15); v11 = a1 + 44 * i; if ( !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 44 * i, a4) ) break; v12 = a1 + 44 * v9; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v12 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v12 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v12 + 40) = *(_DWORD *)(v11 + 40); v9 = i; } v13 = a1 + 44 * v9; sub_4017F0((const void **)v13, (const void **)a4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v13 + 28) = *(_DWORD *)(a4 + 28); *(_DWORD *)(v13 + 32) = *(_DWORD *)(a4 + 32); result = *(_DWORD *)(a4 + 36); *(_DWORD *)(v13 + 36) = result; *(_DWORD *)(v13 + 40) = *(_DWORD *)(a4 + 40); if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != (_DWORD)&a5); return result; } //----- (00585880) -------------------------------------------------------- int __cdecl sub_585880(const void **a1, const void **a2, int a3) { int v3; // esi const void **v4; // edi int v9; // [esp+0h] [ebp-24h] int v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v3 = a3; v4 = a1; v10 = a3; v12 = 0; while ( v4 != a2 ) { LOBYTE(v12) = 1; if ( v3 ) { *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, v4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = v4[7]; *(_DWORD *)(v3 + 32) = v4[8]; *(_DWORD *)(v3 + 36) = v4[9]; *(_DWORD *)(v3 + 40) = v4[10]; } v3 += 44; LOBYTE(v12) = 0; v4 += 11; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00585950) -------------------------------------------------------- int __cdecl sub_585950(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // ebx int v6; // edi int v7; // esi bool v8; // zf int v9; // ebx int v10; // edi int v11; // esi int v12; // ebx v5 = a2; v6 = a3; v7 = 2 * a2 + 2; v8 = v7 == a3; if ( v7 < a3 ) { do { if ( a5(a1 + 44 * v7, a1 + 44 * v7 - 44) ) --v7; v9 = a1 + 44 * v5; v10 = 44 * v7 + a1; sub_4017F0((const void **)v9, (const void **)v10, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(_DWORD *)(v10 + 28); *(_DWORD *)(v9 + 32) = *(_DWORD *)(v10 + 32); *(_DWORD *)(v9 + 36) = *(_DWORD *)(v10 + 36); *(_DWORD *)(v9 + 40) = *(_DWORD *)(v10 + 40); v5 = v7; v7 = 2 * v7 + 2; } while ( v7 < a3 ); v6 = a3; v8 = v7 == a3; } if ( v8 ) { v11 = 44 * v6 + a1 - 44; v12 = a1 + 44 * v5; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v12 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v12 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v12 + 40) = *(_DWORD *)(v11 + 40); v5 = v6 - 1; } return sub_585670(a1, v5, a2, a4, a5); } //----- (00585A20) -------------------------------------------------------- void __cdecl sub_585A20(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { std::tr1 *v8; // [esp+0h] [ebp-1Ch] if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_585580(a2, a1); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a3, a2) ) sub_585580(a3, a2); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_585580(a2, a1); if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != (_DWORD)&a4); } //----- (00585B00) -------------------------------------------------------- int __cdecl sub_585B00(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { int v9; // ebx int v10; // edi int v11; // esi bool v12; // zf int v13; // ebx _DWORD *v14; // edi int v15; // esi int v16; // ebx int (__stdcall *v17)(char *); // edx int v18; // eax int result; // eax char v20; // [esp-18h] [ebp-34h] int v21; // [esp-14h] [ebp-30h] int v22; // [esp-10h] [ebp-2Ch] int v23; // [esp-Ch] [ebp-28h] int v24; // [esp-8h] [ebp-24h] std::tr1 *v25; // [esp+0h] [ebp-1Ch] int v26; // [esp+18h] [ebp-4h] v9 = a2; v10 = a3; v11 = 2 * a2 + 2; v26 = 0; v12 = v11 == a3; if ( v11 < a3 ) { do { if ( !a9 ) std::tr1::_Xfunc(v25); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 44 * v11, a1 + 44 * v11 - 44) ) --v11; v13 = a1 + 44 * v9; v14 = (_DWORD *)(a1 + 44 * v11); sub_4017F0((const void **)v13, (const void **)(a1 + 44 * v11), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v13 + 28) = v14[7]; *(_DWORD *)(v13 + 32) = v14[8]; *(_DWORD *)(v13 + 36) = v14[9]; *(_DWORD *)(v13 + 40) = v14[10]; v9 = v11; v11 = 2 * v11 + 2; } while ( v11 < a3 ); v10 = a3; v12 = v11 == a3; } if ( v12 ) { v15 = 44 * v10 + a1 - 44; v16 = a1 + 44 * v9; sub_4017F0((const void **)v16, (const void **)v15, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v16 + 28) = *(_DWORD *)(v15 + 28); *(_DWORD *)(v16 + 32) = *(_DWORD *)(v15 + 32); *(_DWORD *)(v16 + 36) = *(_DWORD *)(v15 + 36); *(_DWORD *)(v16 + 40) = *(_DWORD *)(v15 + 40); v9 = v10 - 1; } if ( a9 ) { v17 = **(int (__stdcall ***)(char *))a9; if ( a9 == &a5 ) v18 = v17(&v20); else v18 = v17(0); v24 = v18; } else { v24 = 0; } result = sub_585770(a1, v9, a2, a4, v20, v21, v22, v23, v24); v26 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (00585C60) -------------------------------------------------------- int __cdecl sub_585C60(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { char *v9; // ecx int (__stdcall *v10)(char *); // edx int v11; // eax unsigned int v12; // edx int result; // eax char v14; // [esp-18h] [ebp-30h] int v15; // [esp-14h] [ebp-2Ch] int v16; // [esp-10h] [ebp-28h] int v17; // [esp-Ch] [ebp-24h] char *v18; // [esp-8h] [ebp-20h] int v19; // [esp+14h] [ebp-4h] v19 = 0; sub_4017F0((const void **)a3, (const void **)a1, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a3 + 28) = *(_DWORD *)(a1 + 28); *(_DWORD *)(a3 + 32) = *(_DWORD *)(a1 + 32); v9 = a9; *(_DWORD *)(a3 + 36) = *(_DWORD *)(a1 + 36); *(_DWORD *)(a3 + 40) = *(_DWORD *)(a1 + 40); if ( v9 ) { v10 = **(int (__stdcall ***)(char *))v9; if ( v9 == &a5 ) v11 = v10(&v14); else v11 = v10(0); v18 = (char *)v11; } else { v18 = 0; } v12 = (signed int)((unsigned __int64)(780903145i64 * (a2 - a1)) >> 32) >> 3; result = sub_585B00(a1, 0, v12 + (v12 >> 31), a4, v14, v15, v16, v17, v18); v19 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (00585D40) -------------------------------------------------------- void __cdecl sub_585D40(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // eax int v5; // eax int v6; // edi int v7; // eax int v8; // edi int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] int v11; // [esp+1Ch] [ebp+8h] int v12; // [esp+1Ch] [ebp+8h] v4 = (a3 - a1) / 44; if ( v4 <= 40 ) { if ( a4(a2, a1) ) sub_585580(a2, a1); if ( a4(a3, a2) ) sub_585580(a3, a2); if ( a4(a2, a1) ) sub_585580(a2, a1); } else { v5 = (v4 + 1) / 8; v6 = 44 * v5; v9 = 88 * v5; v10 = 44 * v5 + a1; if ( a4(v10, a1) ) sub_585580(v10, a1); if ( a4(a1 + v9, v10) ) sub_585580(a1 + v9, v10); if ( a4(v10, a1) ) sub_585580(v10, a1); v11 = a2 - v6; if ( a4(a2, a2 - v6) ) sub_585580(a2, v11); if ( a4(v6 + a2, a2) ) sub_585580(v6 + a2, a2); if ( a4(a2, v11) ) sub_585580(a2, v11); v7 = a3 - v6; v8 = a3 - v9; v12 = v7; if ( a4(v7, a3 - v9) ) sub_585580(v12, v8); if ( a4(a3, v12) ) sub_585580(a3, v12); if ( a4(v12, v8) ) sub_585580(v12, v8); if ( a4(a2, v10) ) sub_585580(a2, v10); if ( a4(v12, a2) ) sub_585580(v12, a2); if ( a4(a2, v10) ) sub_585580(a2, v10); } } //----- (00585F40) -------------------------------------------------------- void __cdecl sub_585F40(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // edi const void **v4; // esi int v5; // eax int v6; // ecx int v7; // edx void *v8; // [esp+18h] [ebp-3Ch] int v9; // [esp+28h] [ebp-2Ch] unsigned int v10; // [esp+2Ch] [ebp-28h] int v11; // [esp+34h] [ebp-20h] int v12; // [esp+38h] [ebp-1Ch] int v13; // [esp+3Ch] [ebp-18h] int v14; // [esp+40h] [ebp-14h] int v15; // [esp+50h] [ebp-4h] v3 = (a2 - a1) / 44 / 2; if ( v3 > 0 ) { v4 = (const void **)(44 * v3 + a1 + 32); do { v4 -= 11; --v3; v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4017F0((const void **)&v8, v4 - 8, 0, (void *)0xFFFFFFFF); v5 = (int)*v4; v6 = (int)v4[1]; v11 = (int)*(v4 - 1); v7 = (int)v4[2]; v12 = v5; v13 = v6; v14 = v7; v15 = 0; sub_585950(a1, v3, (a2 - a1) / 44, (int)&v8, a3); v15 = -1; if ( v10 >= 0x10 ) operator delete(v8); } while ( v3 > 0 ); } } //----- (00586040) -------------------------------------------------------- void __cdecl sub_586040(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)) { int v3; // esi int i; // ebx int v5; // edi int v6; // edx int v7; // eax int v8; // ecx int v9; // ecx int v10; // edx int v11; // eax int j; // esi int v13; // eax int v14; // ecx int v15; // edx void *v16; // [esp+18h] [ebp-3Ch] int v17; // [esp+28h] [ebp-2Ch] unsigned int v18; // [esp+2Ch] [ebp-28h] int v19; // [esp+34h] [ebp-20h] int v20; // [esp+38h] [ebp-1Ch] int v21; // [esp+3Ch] [ebp-18h] int v22; // [esp+40h] [ebp-14h] int v23; // [esp+50h] [ebp-4h] v3 = a1; if ( a1 != a2 ) { for ( i = a1 + 44; i != a2; i += 44 ) { v5 = i; v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4017F0((const void **)&v16, (const void **)i, 0, (void *)0xFFFFFFFF); v6 = *(_DWORD *)(i + 32); v7 = *(_DWORD *)(i + 36); v19 = *(_DWORD *)(i + 28); v8 = *(_DWORD *)(i + 40); v20 = v6; v21 = v7; v22 = v8; v23 = 0; if ( a3(&v16, v3) ) { sub_585710((const void **)v3, (const void **)i, i + 44); sub_4017F0((const void **)v3, (const void **)&v16, 0, (void *)0xFFFFFFFF); v9 = v20; v10 = v21; *(_DWORD *)(v3 + 28) = v19; v11 = v22; *(_DWORD *)(v3 + 32) = v9; *(_DWORD *)(v3 + 36) = v10; *(_DWORD *)(v3 + 40) = v11; } else { for ( j = i - 44; a3(&v16, j); j -= 44 ) { sub_4017F0((const void **)v5, (const void **)j, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v5 + 28) = *(_DWORD *)(j + 28); *(_DWORD *)(v5 + 32) = *(_DWORD *)(j + 32); *(_DWORD *)(v5 + 36) = *(_DWORD *)(j + 36); *(_DWORD *)(v5 + 40) = *(_DWORD *)(j + 40); v5 = j; } sub_4017F0((const void **)v5, (const void **)&v16, 0, (void *)0xFFFFFFFF); v13 = v20; v14 = v21; v3 = a1; *(_DWORD *)(v5 + 28) = v19; v15 = v22; *(_DWORD *)(v5 + 32) = v13; *(_DWORD *)(v5 + 36) = v14; *(_DWORD *)(v5 + 40) = v15; } v23 = -1; if ( v18 >= 0x10 ) operator delete(v16); } } } //----- (005861E0) -------------------------------------------------------- #error "58639E: positive sp value has been found (funcsize=189)" //----- (005863A0) -------------------------------------------------------- void __cdecl sub_5863A0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edi const void **v8; // esi int v9; // eax int v10; // ecx int v11; // edx int (__stdcall *v12)(char *); // eax int v13; // eax char v14; // [esp-18h] [ebp-70h] int v15; // [esp-14h] [ebp-6Ch] int v16; // [esp-10h] [ebp-68h] int v17; // [esp-Ch] [ebp-64h] char *v18; // [esp-8h] [ebp-60h] char *v19; // [esp+10h] [ebp-48h] int v20; // [esp+14h] [ebp-44h] int v21; // [esp+18h] [ebp-40h] void *v22; // [esp+1Ch] [ebp-3Ch] int v23; // [esp+2Ch] [ebp-2Ch] unsigned int v24; // [esp+30h] [ebp-28h] int v25; // [esp+38h] [ebp-20h] int v26; // [esp+3Ch] [ebp-1Ch] int v27; // [esp+40h] [ebp-18h] int v28; // [esp+44h] [ebp-14h] int v29; // [esp+54h] [ebp-4h] v21 = a1; v20 = (a2 - a1) / 44; v7 = v20 / 2; v29 = 0; if ( v20 / 2 > 0 ) { v8 = (const void **)(44 * v7 + a1 + 32); do { v8 -= 11; --v7; v24 = 15; v23 = 0; LOBYTE(v22) = 0; sub_4017F0((const void **)&v22, v8 - 8, 0, (void *)0xFFFFFFFF); v9 = (int)*v8; v10 = (int)v8[1]; v25 = (int)*(v8 - 1); v11 = (int)v8[2]; v26 = v9; v27 = v10; v28 = v11; LOBYTE(v29) = 1; v19 = &v14; if ( a7 ) { v12 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v13 = v12(&v14); else v13 = v12(0); v18 = (char *)v13; } else { v18 = 0; } sub_585B00(v21, v7, v20, (int)&v22, v14, v15, v16, v17, v18); LOBYTE(v29) = 0; if ( v24 >= 0x10 ) operator delete(v22); v24 = 15; v23 = 0; LOBYTE(v22) = 0; } while ( v7 > 0 ); } v29 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (00586500) -------------------------------------------------------- void __cdecl sub_586500(int a1, int a2, char a3, int a4, int a5, int a6, int a7) { int v7; // edi int i; // ebx int v9; // esi int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx int v14; // edx int v15; // eax const void **j; // edi int v17; // eax int v18; // ecx int v19; // edx std::tr1 *v20; // [esp+0h] [ebp-50h] void *v21; // [esp+14h] [ebp-3Ch] int v22; // [esp+24h] [ebp-2Ch] unsigned int v23; // [esp+28h] [ebp-28h] int v24; // [esp+30h] [ebp-20h] int v25; // [esp+34h] [ebp-1Ch] int v26; // [esp+38h] [ebp-18h] int v27; // [esp+3Ch] [ebp-14h] int v28; // [esp+4Ch] [ebp-4h] v7 = a1; v28 = 0; if ( a1 != a2 ) { for ( i = a1 + 44; i != a2; LOBYTE(v21) = 0 ) { v9 = i; v23 = 15; v22 = 0; LOBYTE(v21) = 0; sub_4017F0((const void **)&v21, (const void **)i, 0, (void *)0xFFFFFFFF); v10 = *(_DWORD *)(i + 32); v11 = *(_DWORD *)(i + 36); v24 = *(_DWORD *)(i + 28); v12 = *(_DWORD *)(i + 40); v25 = v10; v26 = v11; v27 = v12; LOBYTE(v28) = 1; if ( !a7 ) LABEL_17: std::tr1::_Xfunc(v20); if ( (*(unsigned __int8 (__stdcall **)(void **, int))(*(_DWORD *)a7 + 4))(&v21, v7) ) { sub_585710((const void **)v7, (const void **)i, i + 44); sub_4017F0((const void **)v7, (const void **)&v21, 0, (void *)0xFFFFFFFF); v13 = v25; v14 = v26; *(_DWORD *)(v7 + 28) = v24; v15 = v27; *(_DWORD *)(v7 + 32) = v13; *(_DWORD *)(v7 + 36) = v14; *(_DWORD *)(v7 + 40) = v15; } else { for ( j = (const void **)(i + 32); ; v9 = (int)(j - 8) ) { j -= 11; if ( !a7 ) goto LABEL_17; if ( !(*(unsigned __int8 (__stdcall **)(void **, const void **))(*(_DWORD *)a7 + 4))(&v21, j - 8) ) break; sub_4017F0((const void **)v9, j - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(j - 1); *(_DWORD *)(v9 + 32) = *j; *(_DWORD *)(v9 + 36) = j[1]; *(_DWORD *)(v9 + 40) = j[2]; } sub_4017F0((const void **)v9, (const void **)&v21, 0, (void *)0xFFFFFFFF); v17 = v25; v18 = v26; v7 = a1; *(_DWORD *)(v9 + 28) = v24; v19 = v27; *(_DWORD *)(v9 + 32) = v17; *(_DWORD *)(v9 + 36) = v18; *(_DWORD *)(v9 + 40) = v19; } LOBYTE(v28) = 0; if ( v23 >= 0x10 ) operator delete(v21); i += 44; v23 = 15; v22 = 0; } } v28 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != (_DWORD)&a3); } //----- (005866D0) -------------------------------------------------------- void __cdecl sub_5866D0(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { _DWORD *v3; // esi int v4; // edx int v5; // eax int v6; // ecx void *v7; // [esp+14h] [ebp-3Ch] int v8; // [esp+24h] [ebp-2Ch] unsigned int v9; // [esp+28h] [ebp-28h] int v10; // [esp+30h] [ebp-20h] int v11; // [esp+34h] [ebp-1Ch] int v12; // [esp+38h] [ebp-18h] int v13; // [esp+3Ch] [ebp-14h] int v14; // [esp+4Ch] [ebp-4h] v3 = (_DWORD *)(a2 - 44); v9 = 15; v8 = 0; LOBYTE(v7) = 0; sub_4017F0((const void **)&v7, (const void **)(a2 - 44), 0, (void *)0xFFFFFFFF); v4 = *(_DWORD *)(a2 - 44 + 32); v5 = *(_DWORD *)(a2 - 44 + 36); v10 = *(_DWORD *)(a2 - 44 + 28); v6 = *(_DWORD *)(a2 - 44 + 40); v11 = v4; v12 = v5; v13 = v6; v14 = 0; sub_4017F0((const void **)(a2 - 44), (const void **)a1, 0, (void *)0xFFFFFFFF); v3[7] = *(_DWORD *)(a1 + 28); v3[8] = *(_DWORD *)(a1 + 32); v3[9] = *(_DWORD *)(a1 + 36); v3[10] = *(_DWORD *)(a1 + 40); sub_585950(a1, 0, (a2 - a1 - 44) / 44, (int)&v7, a3); if ( v9 >= 0x10 ) operator delete(v7); } //----- (005867D0) -------------------------------------------------------- void __cdecl sub_5867D0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edx int v8; // eax int v9; // ecx int (__stdcall *v10)(char *); // edx int v11; // eax char v12; // [esp-1Ch] [ebp-70h] int v13; // [esp-18h] [ebp-6Ch] int v14; // [esp-14h] [ebp-68h] int v15; // [esp-10h] [ebp-64h] char *v16; // [esp-Ch] [ebp-60h] int v17; // [esp-4h] [ebp-58h] char *v18; // [esp+10h] [ebp-44h] int v19; // [esp+14h] [ebp-40h] void *v20; // [esp+18h] [ebp-3Ch] int v21; // [esp+28h] [ebp-2Ch] unsigned int v22; // [esp+2Ch] [ebp-28h] int v23; // [esp+34h] [ebp-20h] int v24; // [esp+38h] [ebp-1Ch] int v25; // [esp+3Ch] [ebp-18h] int v26; // [esp+40h] [ebp-14h] int v27; // [esp+50h] [ebp-4h] v19 = a1; v27 = 0; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4017F0((const void **)&v20, (const void **)(a2 - 44), 0, (void *)0xFFFFFFFF); v7 = *(_DWORD *)(a2 - 44 + 32); v8 = *(_DWORD *)(a2 - 44 + 36); v23 = *(_DWORD *)(a2 - 44 + 28); v9 = *(_DWORD *)(a2 - 44 + 40); v24 = v7; v25 = v8; v26 = v9; v17 = 0; LOBYTE(v27) = 1; v18 = &v12; if ( a7 ) { v10 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v11 = v10(&v12); else v11 = v10(0); v16 = (char *)v11; } else { v16 = 0; } sub_585C60(v19, a2 - 44, a2 - 44, (int)&v20, v12, v13, v14, v15, v16); if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; v27 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005868E0) -------------------------------------------------------- unsigned int *__cdecl sub_5868E0(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)) { unsigned int v4; // esi unsigned int v5; // ebx unsigned int v6; // eax unsigned int v7; // edi int v8; // ST08_4 bool v9; // zf int v10; // ebx int v11; // ST0C_4 int v12; // ST08_4 int v13; // eax unsigned int *result; // eax int v15; // [esp+Ch] [ebp-8h] unsigned int v16; // [esp+10h] [ebp-4h] unsigned int i; // [esp+10h] [ebp-4h] v4 = a2 + 44 * ((signed int)(a3 - a2) / 44 / 2); sub_585D40(a2, a2 + 44 * ((signed int)(a3 - a2) / 44 / 2), a3 - 44, a4); v5 = v4 + 44; v15 = v4 + 44; if ( a2 < v4 ) { do { v16 = v4 - 44; if ( a4(v4 - 44, v4) ) break; if ( a4(v4, v16) ) break; v4 -= 44; } while ( a2 < v16 ); } if ( v5 < a3 ) { do { if ( a4(v5, v4) ) break; if ( a4(v4, v5) ) break; v5 += 44; } while ( v5 < a3 ); v15 = v5; } v6 = v4; v7 = v5; for ( i = v4; ; v6 = i ) { while ( 1 ) { if ( v7 < a3 ) { do { if ( !a4(v4, v7) ) { if ( a4(v7, v4) ) break; v8 = v5; v5 += 44; sub_585580(v8, v7); } v7 += 44; } while ( v7 < a3 ); v6 = i; v15 = v5; } v9 = v6 == a2; if ( v6 > a2 ) { v10 = v6 - 44; do { if ( !a4(v10, v4) ) { if ( a4(v4, v10) ) break; v4 -= 44; sub_585580(v4, v10); } v10 -= 44; i -= 44; } while ( a2 < i ); v6 = i; v5 = v15; v9 = i == a2; } if ( v9 ) break; v13 = v6 - 44; i = v13; if ( v7 == a3 ) { v4 -= 44; if ( v13 != v4 ) sub_585580(v13, v4); v5 -= 44; v15 = v5; sub_585580(v4, v5); v6 = i; } else { sub_585580(v7, v13); v6 = i; v7 += 44; } } if ( v7 == a3 ) break; if ( v5 != v7 ) sub_585580(v4, v5); v11 = v7; v5 += 44; v12 = v4; v15 = v5; v4 += 44; v7 += 44; sub_585580(v12, v11); } result = a1; *a1 = v4; a1[1] = v5; return result; } //----- (00586AA0) -------------------------------------------------------- unsigned int *__cdecl sub_586AA0(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8) { unsigned int v8; // esi unsigned int v9; // ebx unsigned int v10; // edi unsigned int v11; // eax unsigned int v12; // edi int v13; // eax bool v14; // zf int v15; // ebx int v16; // ST04_4 int v17; // ST00_4 int v18; // eax char *v19; // ecx int *v21; // [esp-4h] [ebp-40h] int v22; // [esp+0h] [ebp-3Ch] int v23; // [esp+4h] [ebp-38h] int v24; // [esp+8h] [ebp-34h] int v25; // [esp+Ch] [ebp-30h] int v26; // [esp+10h] [ebp-2Ch] std::tr1 *v27; // [esp+14h] [ebp-28h] int *v28; // [esp+28h] [ebp-14h] unsigned int v29; // [esp+2Ch] [ebp-10h] int v30; // [esp+38h] [ebp-4h] v8 = a2 + 44 * ((signed int)(a3 - a2) / 44 / 2); v30 = 0; v28 = &v22; if ( a8 ) { if ( a8 == &a4 ) v21 = &v22; else LOBYTE(v21) = 0; v26 = (**(int (***)(void))a8)(); } else { v26 = 0; } sub_5861E0(a2, v8, a3 - 44, (char)v21, v22, v23, v24, v25); v9 = v8 + 44; v29 = v8 + 44; if ( a2 < v8 ) { do { if ( a8 ) { v10 = v8 - 44; if ( (*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8 - 44, v8) ) break; if ( a8 ) continue; } LABEL_43: std::tr1::_Xfunc(v27); if ( (*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v8 - 44) ) break; v8 -= 44; } while ( a2 < v10 ); } if ( v9 < a3 ) { do { if ( a8 ) { if ( (*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v9, v8) ) break; if ( a8 ) continue; } goto LABEL_43; if ( (*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v9) ) break; v9 += 44; } while ( v9 < a3 ); v29 = v9; } v11 = v8; v12 = v9; v28 = (int *)v8; while ( 2 ) { while ( 2 ) { if ( v12 < a3 ) { while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v12) ) { if ( !a8 ) goto LABEL_43; if ( (*(unsigned __int8 (__cdecl **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v12, v8) ) { LABEL_28: v11 = (unsigned int)v28; break; } v13 = v9; v9 += 44; v29 = v9; sub_585580(v13, v12); } v12 += 44; if ( v12 >= a3 ) goto LABEL_28; } } v14 = v11 == a2; if ( v11 <= a2 ) goto LABEL_38; v15 = v11 - 44; while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__cdecl **)(int, unsigned int))(*(_DWORD *)a8 + 4))(v15, v8) ) break; LABEL_36: v15 -= 44; v28 -= 11; if ( a2 >= (unsigned int)v28 ) goto LABEL_37; } if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__cdecl **)(unsigned int, int))(*(_DWORD *)a8 + 4))(v8, v15) ) { v8 -= 44; sub_585580(v8, v15); goto LABEL_36; } LABEL_37: v11 = (unsigned int)v28; v9 = v29; v14 = v28 == (int *)a2; LABEL_38: if ( !v14 ) { v18 = v11 - 44; v28 = (int *)v18; if ( v12 == a3 ) { v8 -= 44; if ( v18 != v8 ) sub_585580(v18, v8); v9 -= 44; v29 = v9; sub_585580(v8, v9); v11 = (unsigned int)v28; } else { sub_585580(v12, v18); v11 = (unsigned int)v28; v12 += 44; } continue; } break; } if ( v12 != a3 ) { if ( v9 != v12 ) sub_585580(v8, v9); v16 = v12; v9 += 44; v17 = v8; v29 = v9; v8 += 44; v12 += 44; sub_585580(v17, v16); v11 = (unsigned int)v28; continue; } break; } v19 = a8; *a1 = v8; a1[1] = v9; v30 = -1; if ( v19 ) (*(void (__cdecl **)(bool))(*(_DWORD *)v19 + 12))(v19 != &a4); return a1; } // 5861E0: using guessed type _DWORD __cdecl sub_5861E0(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00586D40) -------------------------------------------------------- void __cdecl sub_586D40(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // edx int v8; // eax char v9; // [esp-20h] [ebp-3Ch] int v10; // [esp-1Ch] [ebp-38h] int v11; // [esp-18h] [ebp-34h] int v12; // [esp-14h] [ebp-30h] char *v13; // [esp-10h] [ebp-2Ch] int v14; // [esp-8h] [ebp-24h] int v15; // [esp-4h] [ebp-20h] int v16; // [esp+18h] [ebp-4h] v16 = 0; if ( (a2 - a1) / 44 > 1 ) { v15 = 0; v14 = 0; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = (char *)v8; } else { v13 = 0; } sub_5863A0(a1, a2, v9, v10, v11, v12, v13); } v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (00586E00) -------------------------------------------------------- void __cdecl sub_586E00(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // eax int v8; // eax char v9; // [esp-1Ch] [ebp-34h] int v10; // [esp-18h] [ebp-30h] int v11; // [esp-14h] [ebp-2Ch] int v12; // [esp-10h] [ebp-28h] int v13; // [esp-Ch] [ebp-24h] int v14; // [esp-4h] [ebp-1Ch] char *v15; // [esp+8h] [ebp-10h] int v16; // [esp+14h] [ebp-4h] v14 = 0; v16 = 0; v15 = &v9; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = v8; } else { v13 = 0; } sub_586500(a1, a2, v9, v10, v11, v12, v13); v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (00586EA0) -------------------------------------------------------- void __thiscall sub_586EA0(int *this) { int *v1; // esi v1 = this; if ( *this ) { sub_585540(*this, this[1]); operator delete((void *)*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (00586EF0) -------------------------------------------------------- unsigned int __thiscall sub_586EF0(int *this, char *a2) { int *v2; // esi unsigned int result; // eax void *v4; // eax const void **v5; // ST04_4 const void **v6; // ST00_4 unsigned int v7; // edx int v8; // edi void *v9; // ecx char *v10; // edi int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; if ( (unsigned int)a2 > 0x5D1745D ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 44; if ( result < (unsigned int)a2 ) { v4 = sub_585330(a2); v5 = (const void **)v2[1]; v6 = (const void **)*v2; v12 = v4; v14 = 0; sub_585880(v6, v5, (int)v4); v7 = (signed int)((unsigned __int64)(780903145i64 * (v2[1] - *v2)) >> 32) >> 3; v8 = v7 + (v7 >> 31); if ( *v2 ) { sub_585540(*v2, v2[1]); operator delete((void *)*v2); } v9 = v12; result = (unsigned int)v12 + 44 * (_DWORD)a2; v10 = (char *)v12 + 44 * v8; v2[2] = result; v2[1] = (int)v10; *v2 = (int)v9; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00587000) -------------------------------------------------------- int __cdecl sub_587000(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // esi int v4; // edi int result; // eax v3 = a2; v4 = a2 - a1; result = (a2 - a1) / 44; if ( result > 1 ) { do { sub_5866D0(a1, v3, a3); v4 -= 44; result = v4 / 44; v3 -= 44; } while ( v4 / 44 > 1 ); } return result; } //----- (00587060) -------------------------------------------------------- int __cdecl sub_587060(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edi int result; // eax char *v9; // eax int (__stdcall *v10)(char *); // eax bool v11; // zf char *v12; // ecx int (__thiscall *v13)(char *, char *); // eax int v14; // eax char v15; // [esp-1Ch] [ebp-54h] int v16; // [esp-18h] [ebp-50h] int v17; // [esp-14h] [ebp-4Ch] int v18; // [esp-10h] [ebp-48h] char *v19; // [esp-Ch] [ebp-44h] char *v20; // [esp-4h] [ebp-3Ch] char v21; // [esp+10h] [ebp-28h] char *v22; // [esp+20h] [ebp-18h] char *v23; // [esp+28h] [ebp-10h] int v24; // [esp+34h] [ebp-4h] int v25; // [esp+44h] [ebp+Ch] v7 = a2; result = (a2 - a1) / 44; v24 = 0; if ( result > 1 ) { v25 = a2 - a1; do { if ( a7 ) { if ( a7 == &a3 ) { v10 = **(int (__stdcall ***)(char *))a7; v20 = &v21; } else { v10 = **(int (__stdcall ***)(char *))a7; v20 = 0; } v9 = (char *)v10(v20); } else { v9 = 0; } v22 = v9; v20 = 0; LOBYTE(v24) = 1; v23 = &v15; if ( v9 ) { v11 = v9 == &v21; v12 = v9; v13 = **(int (__thiscall ***)(char *, char *))v9; if ( v11 ) v14 = v13(v12, &v15); else v14 = v13(v12, 0); v19 = (char *)v14; } else { v19 = 0; } sub_5867D0(a1, v7, v15, v16, v17, v18, v19); LOBYTE(v24) = 0; if ( v22 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v22 + 12))(v22 != &v21); v22 = 0; } result = (v25 - 44) / 44; v7 -= 44; v25 -= 44; } while ( result > 1 ); } v24 = -1; if ( a7 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); return result; } //----- (00587190) -------------------------------------------------------- unsigned int __thiscall sub_587190(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (this[1] - *this) / 44; if ( 97612893 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 44; if ( v3 > result ) { if ( 97612893 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_586EF0(this, v5); } return result; } //----- (00587210) -------------------------------------------------------- #error "5872A3: positive sp value has been found (funcsize=55)" //----- (005872B0) -------------------------------------------------------- void *__thiscall sub_5872B0(void *this, char a2) { void *v2; // esi v2 = this; sub_584530(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005872E0) -------------------------------------------------------- int __thiscall sub_5872E0(int *this, unsigned int a2) { int *v2; // ebx unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // edi int v7; // esi int result; // eax int v9; // edi v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_587190(v2, 1); v9 = v2[1]; result = 0; if ( v9 ) { *(_DWORD *)(v9 + 20) = 15; *(_DWORD *)(v9 + 16) = 0; *(_BYTE *)v9 = 0; sub_4017F0((const void **)v9, (const void **)a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(v9 + 32) = *(_DWORD *)(a2 + 32); result = *(_DWORD *)(a2 + 36); *(_DWORD *)(v9 + 36) = result; *(_DWORD *)(v9 + 40) = *(_DWORD *)(a2 + 40); } } else { v4 = (signed int)((unsigned __int64)(780903145i64 * (signed int)(a2 - *v2)) >> 32) >> 3; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_587190(v2, 1); v6 = v2[1]; v7 = *v2 + 44 * v5; result = 0; if ( v6 ) { *(_DWORD *)(v6 + 20) = 15; *(_DWORD *)(v6 + 16) = 0; *(_BYTE *)v6 = 0; sub_4017F0((const void **)v6, (const void **)v7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v6 + 28) = *(_DWORD *)(v7 + 28); *(_DWORD *)(v6 + 32) = *(_DWORD *)(v7 + 32); *(_DWORD *)(v6 + 36) = *(_DWORD *)(v7 + 36); result = *(_DWORD *)(v7 + 40); *(_DWORD *)(v6 + 40) = result; } } v2[1] += 44; return result; } //----- (005873F0) -------------------------------------------------------- void __cdecl sub_5873F0(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // ebx int v5; // edi int v6; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; v6 = (a2 - a1) / 44; if ( v6 <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_5868E0((unsigned int *)&v8, v4, v5, a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (v8 - v4) / 44 >= (v5 - v9) / 44 ) { sub_5873F0(v9, v5, v7, a4); v5 = v8; } else { sub_5873F0(v4, v8, v7, a4); v4 = v9; } v6 = (v5 - v4) / 44; if ( v6 <= 32 ) goto LABEL_8; } if ( v6 <= 32 ) { LABEL_8: if ( v6 > 1 ) sub_586040(v4, v5, (unsigned __int8 (__cdecl *)(void **, int))a4); } else { if ( (v5 - v4) / 44 > 1 ) sub_585F40(v4, v5, a4); sub_587000(v4, v5, a4); } } //----- (00587530) -------------------------------------------------------- void __cdecl sub_587530(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8) { int v8; // ebx int v9; // eax int v10; // esi int (__stdcall *v11)(char *); // eax int v12; // eax int (__thiscall *v13)(char *, char *); // edx int v14; // eax int (__thiscall *v15)(char *, char *); // eax int v16; // eax int (__stdcall *v17)(char *); // edx int v18; // eax int (__stdcall *v19)(char *); // eax int v20; // eax int (__stdcall *v21)(char *); // edx int v22; // eax char v23; // [esp-18h] [ebp-3Ch] int v24; // [esp-14h] [ebp-38h] int v25; // [esp-10h] [ebp-34h] int v26; // [esp-Ch] [ebp-30h] char *v27; // [esp-8h] [ebp-2Ch] int v28; // [esp+10h] [ebp-14h] int v29; // [esp+14h] [ebp-10h] int v30; // [esp+20h] [ebp-4h] v8 = a2; v9 = (a2 - a1) / 44; v30 = 0; if ( v9 <= 32 ) goto LABEL_26; v10 = a3; while ( v10 > 0 ) { if ( a8 ) { v11 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v12 = v11(&v23); else v12 = v11(0); v27 = (char *)v12; } else { v27 = 0; } sub_586AA0((unsigned int *)&v28, a1, v8, v23, v24, v25, v26, v27); v10 = v10 / 2 / 2 + v10 / 2; if ( (v28 - a1) / 44 >= (v8 - v29) / 44 ) { if ( a8 ) { v15 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v16 = v15(a8, &v23); else v16 = v15(a8, 0); v27 = (char *)v16; } else { v27 = 0; } sub_587530(v29, v8, v10, v23, v24, v25, v26, v27); v8 = v28; } else { if ( a8 ) { v13 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v14 = v13(a8, &v23); else v14 = v13(a8, 0); v27 = (char *)v14; } else { v27 = 0; } sub_587530(a1, v28, v10, v23, v24, v25, v26, v27); a1 = v29; } v9 = (v8 - a1) / 44; if ( v9 <= 32 ) goto LABEL_26; } if ( v9 <= 32 ) { LABEL_26: if ( v9 > 1 ) { if ( a8 ) { v21 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v22 = v21(&v23); else v22 = v21(0); v27 = (char *)v22; } else { v27 = 0; } sub_586E00(a1, v8, v23, v24, v25, v26, v27); } } else { if ( a8 ) { v17 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v18 = v17(&v23); else v18 = v17(0); v27 = (char *)v18; } else { v27 = 0; } sub_586D40(a1, v8, v23, v24, v25, v26, v27); if ( a8 ) { v19 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v20 = v19(&v23); else v20 = v19(0); sub_587210(a1, v8, v23, v24, v25, v26, v20); } else { sub_587210(a1, v8, v23, v24, v25, v26, 0); } } v30 = -1; if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != &a4); } // 587210: using guessed type _DWORD __cdecl sub_587210(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00587790) -------------------------------------------------------- #error "58783B: positive sp value has been found (funcsize=66)" //----- (00587880) -------------------------------------------------------- int __thiscall sub_587880(void *this, int a2, int a3) { int result; // eax if ( !a2 ) result = (*(int (**)(void))(*(_DWORD *)this + 544))(); return result; } //----- (00587A30) -------------------------------------------------------- int __thiscall sub_587A30(void *this) { return (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)this + 236))(xRight, dword_AC2F78, 1.0, 0.5); } //----- (00587A80) -------------------------------------------------------- void __thiscall sub_587A80(_DWORD *this) { int v1; // esi int v2; // ecx v1 = this[74]; if ( v1 ) { v2 = *(_DWORD *)(v1 + 4880); if ( v2 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 260))() ) { sub_4A5C20((_DWORD **)v1); } else if ( *(_DWORD *)(v1 + 4880) ) { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 4880) + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 4880)); } } } } //----- (00587AD0) -------------------------------------------------------- char __thiscall sub_587AD0(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax unsigned int v3; // esi unsigned int v4; // edi v1 = this; v2 = sub_8F8280(&unk_BA6B10); if ( v1 == (_DWORD *)v2 ) { if ( v1[137] ) { v3 = (v1[100] - v1[99]) >> 2; v4 = 0; if ( v3 ) { do { LOBYTE(v2) = (*(int (__stdcall **)(LONG, LONG))(***(_DWORD ***)(v1[99] + 4 * v4) + 332))(pt.x, pt.y); if ( (_BYTE)v2 ) { LOBYTE(v2) = dword_BA6A68; if ( dword_BA6A68 <= 0 ) { if ( dword_BA6A68 < 0 ) LOBYTE(v2) = sub_463C50((_DWORD *)v1[104]); } else { LOBYTE(v2) = sub_463C10((_DWORD *)v1[104]); } } ++v4; } while ( v4 < v3 ); } } } return v2; } // BA6A68: using guessed type int dword_BA6A68; //----- (00587B60) -------------------------------------------------------- char __userpurge sub_587B60@(_DWORD *a1@, double a2@, signed int a3, signed int a4) { _DWORD *v4; // edi _DWORD *v6; // eax _DWORD *v7; // esi void (__thiscall *v8)(_DWORD *); // eax v4 = a1; if ( !sub_4030A0(a1, a2, a3, a4) ) return 0; if ( !v4[78] ) return 1; v6 = v4 + 74; v7 = (_DWORD *)v4[68]; if ( v4[79] >= 0x10u ) v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 428))(v7, v6); (*(void (__thiscall **)(_DWORD *, signed int))(*v7 + 256))(v7, 1); v8 = *(void (__thiscall **)(_DWORD *))(*v7 + 436); v7[69] = v4[69]; v8(v7); (*(void (__thiscall **)(_DWORD *))(*v7 + 432))(v7); sub_8F81A0(&unk_BA6B10, v7); dword_BA6B98 = (int)v7; return 1; } // BA6B98: using guessed type int dword_BA6B98; //----- (00587C10) -------------------------------------------------------- char __thiscall sub_587C10(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG **v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // esi int v12; // [esp+14h] [ebp-18h] int v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\PlayGuideMin.nif"); sub_8F66B0(v4, (int)&v14, v3); if ( !v14 ) return 0; v5 = (volatile LONG *)sub_43D0D0(0x18u); if ( !v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v14; v15 = -1; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = sub_8FB140(v14, (int)"MinimumNor", (int)&v12, (int)&v13, v5); if ( sub_8F1440(v2, 0, 0, (int)v8, 0, a2, (int)"PlayGuideMinWin", 0) ) { v10 = sub_8FB140(v14, (int)"MinimumNor", (int)&v12, (int)&v13, v5); sub_8FB650(v10, v14, (int)"MinimumClick"); sub_8FB650(v10, v14, (int)"MinimumOver"); sub_8FE0F0(v12, v13, (int)v10, (int)v2, 0, 0, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.89999998, 0.66000003); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 130))(v2, 0); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } result = 1; } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v14; v15 = -1; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00587E20) -------------------------------------------------------- int __thiscall sub_587E20(void *this, int a2, int a3, float a4, float a5) { return sub_402E40(this, a2, a3, SLODWORD(a4), SLODWORD(a5)); } //----- (00587E50) -------------------------------------------------------- int __thiscall sub_587E50(int this, unsigned int a2) { int v2; // esi bool v3; // zf _DWORD *v4; // eax int v5; // eax _DWORD *v6; // eax int v7; // eax int v8; // ecx int result; // eax _DWORD *v10; // ecx v2 = this; v3 = *(_BYTE *)(this + 536) == 0; *(_DWORD *)(this + 376) = a2; *(_DWORD *)(this + 380) = a2 - 1; *(_DWORD *)(this + 384) = a2 + 1; if ( v3 ) { *(_DWORD *)(this + 552) = a2; v4 = sub_58A470(a2); if ( v4 ) *(_DWORD *)(v2 + 556) = v4[1]; } else if ( (*(_DWORD *)(this + 460) - *(_DWORD *)(this + 456)) >> 2 > a2 ) { v5 = **(_DWORD **)(*(_DWORD *)(this + 456) + 4 * a2); *(_DWORD *)(this + 556) = v5; v6 = (_DWORD *)sub_58A420(v5); if ( v6 ) *(_DWORD *)(v2 + 552) = *v6; } if ( a2 ) v7 = *(_DWORD *)(v2 + 380); else v7 = 0; v8 = *(_DWORD *)(v2 + 540); *(_DWORD *)(v2 + 388) = v7; if ( v7 > v8 ) v7 = v8 - 1; result = v7 < 0 ? 0 : v7; v10 = *(_DWORD **)(v2 + 416); *(_DWORD *)(v2 + 388) = result; if ( v10 ) result = sub_4637A0(v10, result); *(_WORD *)(v2 + 392) = 1; return result; } //----- (00587F30) -------------------------------------------------------- char __thiscall sub_587F30(int this) { int v1; // esi int v2; // eax unsigned int v3; // ebx int v4; // eax unsigned int v5; // edi int v6; // ebx int v7; // eax int v8; // ecx unsigned int v9; // eax unsigned int v10; // ebx void (*v11)(void); // edx int v12; // eax int v13; // ecx int v14; // edi unsigned int v15; // edi unsigned int v16; // ebx int v17; // eax int v18; // edi int v19; // ecx signed int v20; // ecx int v21; // edx int v22; // edi unsigned int v23; // edi unsigned int v24; // ebx int v25; // eax unsigned int v26; // ecx int v27; // eax void *v29; // [esp+0h] [ebp-10h] unsigned int v30; // [esp+Ch] [ebp-4h] v1 = this; v2 = *(_DWORD *)(this + 548); v3 = (*(_DWORD *)(this + 400) - *(_DWORD *)(this + 396)) >> 2; v30 = (*(_DWORD *)(this + 400) - *(_DWORD *)(this + 396)) >> 2; if ( v2 ) { v4 = v2 - 1; if ( v4 ) return v4; v5 = 0; if ( !*(_BYTE *)(this + 536) ) { if ( v3 ) { do { v6 = v5 + *(_DWORD *)(v1 + 388); v7 = sub_7474E0((_DWORD *)(dword_ACD9CC + 4), v5 + *(_DWORD *)(v1 + 388)); if ( v7 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v5) + 4) + 472))(v7 + 4); (*(void (__stdcall **)(int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 520))(v6); (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 240))(1); (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 256))(1); } ++v5; } while ( v5 < v30 ); LOBYTE(v4) = (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v1 + 416) + 240))( *(_DWORD *)(v1 + 416), 1); return v4; } LABEL_19: LOBYTE(v4) = (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v1 + 416) + 240))(*(_DWORD *)(v1 + 416), 1); return v4; } if ( !v3 ) goto LABEL_19; while ( 1 ) { v8 = *(_DWORD *)(v1 + 456); v9 = (*(_DWORD *)(v1 + 460) - v8) >> 2; if ( v5 < v9 ) break; (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 256))(1); (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v5) + 4) + 472))(&unk_9D56DB); LABEL_18: if ( ++v5 >= v3 ) goto LABEL_19; } v10 = v5 + *(_DWORD *)(v1 + 388); if ( v9 > v10 ) { v12 = sub_58A420(**(_DWORD **)(v8 + 4 * v10)); if ( !v12 ) { LABEL_17: v3 = v30; goto LABEL_18; } (*(void (__stdcall **)(int, void *))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v5) + 4) + 472))( v12 + 77, v29); (*(void (__stdcall **)(unsigned int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 520))(v10); (*(void (__stdcall **)(signed int))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 240))(1); v11 = *(void (**)(void))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 256); v29 = (void *)1; } else { (*(void (__stdcall **)(signed int, void *))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 256))(1, v29); (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v5) + 240))(0); v11 = *(void (**)(void))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v5) + 4) + 472); v29 = &unk_9D56E9; } v11(); goto LABEL_17; } if ( !*(_BYTE *)(this + 536) ) { v4 = sub_7474E0((_DWORD *)(dword_ACD9CC + 4), *(_DWORD *)(this + 380)); v13 = *(_DWORD *)(v1 + 396); v14 = v4; LOBYTE(v4) = *(_DWORD *)(v1 + 380) >= 0; LOBYTE(v30) = *(_DWORD *)(v1 + 380) >= 0; if ( !((*(_DWORD *)(v1 + 400) - v13) >> 2) ) return v4; if ( *(_DWORD *)(v1 + 380) >= 0 && v14 ) (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)v13 + 4) + 472))(v14 + 4); else (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)v13 + 4) + 472))(0); (*(void (__stdcall **)(_DWORD))(****(_DWORD ****)(v1 + 396) + 520))(*(_DWORD *)(v1 + 380)); (*(void (__stdcall **)(unsigned int))(****(_DWORD ****)(v1 + 396) + 240))(v30); v15 = 1; v16 = v3 - 1; if ( v16 > 1 ) { do { (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v15) + 240))(0); (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v15++) + 256))(0); } while ( v15 < v16 ); } v17 = sub_7474E0((_DWORD *)(dword_ACD9CC + 4), *(_DWORD *)(v1 + 384)); LOBYTE(v30) = *(_DWORD *)(v1 + 384) < 36; if ( v17 && *(_DWORD *)(v1 + 384) < 36 ) { v18 = 4 * v15; (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v18 + *(_DWORD *)(v1 + 396)) + 4) + 472))(v17 + 4); } else { v18 = 4 * v15; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v18 + *(_DWORD *)(v1 + 396)) + 4) + 472))(0); } (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(v18 + *(_DWORD *)(v1 + 396)) + 520))(*(_DWORD *)(v1 + 384)); v19 = *(_DWORD *)(v18 + *(_DWORD *)(v1 + 396)); LABEL_49: (*(void (__stdcall **)(unsigned int))(**(_DWORD **)v19 + 240))(v30); LOBYTE(v4) = (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 416) + 240))(*(_DWORD *)(v1 + 416), 0); return v4; } v20 = *(_DWORD *)(this + 380); v21 = *(_DWORD *)(v1 + 456); LOBYTE(v30) = v20 >= 0; v22 = 0; if ( (*(_DWORD *)(v1 + 460) - v21) >> 2 > (unsigned int)v20 && v20 >= 0 && *(_DWORD *)(v21 + 4 * v20) ) v22 = sub_58A420(**(_DWORD **)(v21 + 4 * v20)); v4 = *(_DWORD *)(v1 + 396); if ( (*(_DWORD *)(v1 + 400) - v4) >> 2 ) { if ( (_BYTE)v30 && v22 ) (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)v4 + 4) + 472))(v22 + 77); else (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)v4 + 4) + 472))(0); (*(void (__stdcall **)(_DWORD))(****(_DWORD ****)(v1 + 396) + 520))(*(_DWORD *)(v1 + 380)); (*(void (__stdcall **)(unsigned int))(****(_DWORD ****)(v1 + 396) + 240))(v30); v23 = 1; v24 = v3 - 1; if ( v24 > 1 ) { do { (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v23) + 240))(0); (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v23++) + 256))(0); } while ( v23 < v24 ); } v25 = *(_DWORD *)(v1 + 456); v26 = *(_DWORD *)(v1 + 384); LOBYTE(v30) = v26 < (*(_DWORD *)(v1 + 460) - v25) >> 2; if ( (_BYTE)v30 ) { v27 = sub_58A420(**(_DWORD **)(v25 + 4 * v26)); if ( v27 ) (*(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v23) + 4) + 472))(v27 + 77); } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v23) + 4) + 472))(0); } (*(void (__stdcall **)(_DWORD))(***(_DWORD ***)(*(_DWORD *)(v1 + 396) + 4 * v23) + 520))(*(_DWORD *)(v1 + 384)); v19 = *(_DWORD *)(*(_DWORD *)(v1 + 396) + 4 * v23); goto LABEL_49; } return v4; } // ACD9CC: using guessed type int dword_ACD9CC; //----- (00588490) -------------------------------------------------------- char __thiscall sub_588490(_DWORD *this) { int v1; // ebx unsigned int v2; // edi _DWORD *v3; // esi _DWORD *v4; // ecx char result; // al unsigned int v6; // [esp+8h] [ebp-4h] v1 = (int)this; v2 = 0; v6 = (this[100] - this[99]) >> 2; if ( v6 ) { do { v3 = *(_DWORD **)(*(_DWORD *)(v1 + 396) + 4 * v2); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v3 + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v3 + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v3 + 176))(v3[2]); ++v2; } while ( v2 < v6 ); } v4 = *(_DWORD **)(v1 + 416); if ( v4 ) { sub_4637A0(v4, 0); *(_DWORD *)(v1 + 388) = *(_DWORD *)(*(_DWORD *)(v1 + 416) + 300); } *(_DWORD *)(v1 + 548) = 1; result = sub_587F30(v1); *(_WORD *)(v1 + 392) = 256; return result; } //----- (00588530) -------------------------------------------------------- char __thiscall sub_588530(int *this, int a2) { int v2; // esi signed int v3; // ebx int *v4; // edi _DWORD *v6; // eax int v7; // eax unsigned int v8; // ebx unsigned int v9; // esi _DWORD *v10; // eax char *v11; // eax _DWORD *v12; // eax char *v13; // eax char *v14; // eax _DWORD *v15; // [esp+Ch] [ebp-58h] signed int v16; // [esp+14h] [ebp-50h] signed int v17; // [esp+18h] [ebp-4Ch] signed int v18; // [esp+1Ch] [ebp-48h] char v19; // [esp+20h] [ebp-44h] v2 = a2; v3 = 0; v4 = this; if ( !a2 ) return 0; v17 = 0; v16 = 0; v6 = sub_58A470(this[138]); v15 = v6; if ( v6 ) { v18 = v6[1]; if ( v18 < 197 ) { while ( 1 ) { v7 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v7 ) v8 = *(_DWORD *)(v7 + 40); else v8 = 0; v9 = 0; if ( v8 ) { while ( 1 ) { v10 = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v9); if ( v10 ) { if ( v10[1] == v18 ) break; } if ( ++v9 >= v8 ) goto LABEL_12; } if ( *v10 != *v15 ) { LABEL_17: v3 = v16; v2 = a2; break; } ++v18; ++v17; if ( v10[1] == *(_DWORD *)(a2 + 4) ) v16 = v17; } else { LABEL_12: ++v18; } if ( v18 >= 197 ) goto LABEL_17; } } } if ( v4[106] ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[106] + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v4[106] + 472))(v2 + 77); } if ( v4[107] ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[107] + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v4[107] + 472))(v2 + 397); } if ( v4[108] ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[108] + 256))(1); if ( !byte_ACAD5C ) sub_420410(); v11 = sub_7549E0("%s\\playguide\\%s.png", byte_ACAB50, v2 + 333); v12 = sub_486130((int)v11); (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v4[108] + 452))(v12); } if ( v4[109] ) { v13 = (char *)sub_4090F0(507052884); v14 = sub_7549E0(v13, v3, v17); sprintf(&v19, v14); (*(void (__stdcall **)(char *))(*(_DWORD *)v4[109] + 472))(&v19); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[109] + 256))(1); } if ( v4[110] ) (*(void (__stdcall **)(bool))(*(_DWORD *)v4[110] + 256))(v3 > 1); if ( v4[111] ) (*(void (__thiscall **)(int, bool))(*(_DWORD *)v4[111] + 256))(v4[111], v17 > v3); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACD9D0: using guessed type int dword_ACD9D0; //----- (00588780) -------------------------------------------------------- void __thiscall sub_588780(_DWORD *this, const char *a2) { int v2; // edi const char *v3; // esi const char *v4; // eax int v5; // edx char v6; // cl int v7; // esi const CHAR *v8; // eax _DWORD *v9; // [esp+4h] [ebp-4h] v9 = this; if ( a2 && this[112] ) { v2 = 0; if ( *a2 ) { v3 = a2; do { if ( *v3 == 32 || *v3 == 10 ) { v4 = &a2[v2 + 1]; v5 = v3 - v4; do { v6 = *v4; v4[v5] = *v4; ++v4; } while ( v6 ); } else { ++v2; ++v3; } } while ( *v3 ); } if ( strlen(a2) ) { (*(void (__stdcall **)(const char *))(*(_DWORD *)v9[112] + 460))(a2); } else { v7 = *(_DWORD *)v9[112]; v8 = sub_4090F0(-2137670460); (*(void (__thiscall **)(_DWORD, const CHAR *))(v7 + 460))(v9[112], v8); } } } //----- (00588860) -------------------------------------------------------- char __thiscall sub_588860(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // ecx int v8; // ecx int v9; // ecx int v10; // ecx int v11; // eax int v12; // ecx unsigned int v13; // ebx unsigned int v14; // edi int v15; // edi int v16; // ecx unsigned int v17; // edx int v18; // ecx _DWORD *v19; // ecx v1 = this; LOBYTE(v2) = sub_8F3540(this); if ( (_BYTE)v2 ) { v3 = v1[137]; if ( v3 ) { v2 = v3 - 1; if ( !v2 ) { v4 = v1[105]; if ( v4 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 256))(0); v5 = v1[106]; if ( v5 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 256))(0); v6 = v1[107]; if ( v6 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 256))(0); v7 = v1[108]; if ( v7 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 256))(0); v8 = v1[109]; if ( v8 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 256))(0); v9 = v1[110]; if ( v9 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 256))(0); v10 = v1[111]; if ( v10 ) LOBYTE(v2) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v10 + 256))(0); } } else { v11 = 0; if ( *((_BYTE *)v1 + 536) ) { v15 = v1[114]; v16 = v1[115]; if ( v15 != v16 ) { v17 = v1[94]; if ( (v16 - v15) >> 2 > v17 ) v11 = sub_58A420(**(_DWORD **)(v15 + 4 * v17)); } } else { v12 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v12 ) v13 = *(_DWORD *)(v12 + 40); else v13 = 0; v14 = 0; if ( v13 ) { do { v11 = sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v14); if ( v11 && *(_DWORD *)(v11 + 4) == v1[139] ) break; ++v14; } while ( v14 < v13 ); } } LOBYTE(v2) = sub_588530(v1, v11); v18 = v1[105]; if ( v18 ) LOBYTE(v2) = (*(int (__stdcall **)(signed int))(*(_DWORD *)v18 + 256))(1); v19 = (_DWORD *)v1[104]; if ( v19 ) { v1[136] = v1[97]; v1[97] = 0; LOBYTE(v2) = sub_4638F0(v19, 0); } } } return v2; } // ACD9D0: using guessed type int dword_ACD9D0; //----- (005889F0) -------------------------------------------------------- void __thiscall sub_5889F0(int *this, char a2) { signed int v2; // ebx int v3; // eax unsigned int v4; // edi unsigned int v5; // esi int v6; // eax int *v7; // [esp+Ch] [ebp-4h] v2 = this[139]; v7 = this; LABEL_2: while ( 1 ) { if ( a2 == 1 ) --v2; else ++v2; if ( v2 < 0 || v2 >= 197 ) break; this[139] = v2; v3 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { while ( 1 ) { v6 = sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v5); if ( v6 ) { if ( *(_DWORD *)(v6 + 4) == v2 ) break; } if ( ++v5 >= v4 ) { this = v7; goto LABEL_2; } } sub_588530(v7, v6); return; } } } // ACD9D0: using guessed type int dword_ACD9D0; //----- (00588A70) -------------------------------------------------------- char __thiscall sub_588A70(int this, int a2) { int v2; // edi int v3; // ebx int v4; // eax int v5; // esi _DWORD *v6; // esi int v7; // eax int v8; // eax int v9; // ecx _DWORD *v10; // esi int v11; // eax int v12; // eax int v13; // ecx _DWORD *v14; // esi int v15; // ebx int v16; // eax int v17; // edx int v18; // ecx int v19; // eax int v21; // [esp+Ch] [ebp-1Ch] int v22; // [esp+Ch] [ebp-1Ch] unsigned int v23; // [esp+Ch] [ebp-1Ch] int v24; // [esp+10h] [ebp-18h] int v25; // [esp+14h] [ebp-14h] int v26; // [esp+18h] [ebp-10h] int v27; // [esp+1Ch] [ebp-Ch] int v28; // [esp+20h] [ebp-8h] int i; // [esp+20h] [ebp-8h] unsigned int v30; // [esp+20h] [ebp-8h] char v31; // [esp+26h] [ebp-2h] char v32; // [esp+26h] [ebp-2h] char v33; // [esp+27h] [ebp-1h] v2 = this; if ( *(_BYTE *)(this + 392) ) { v3 = ((*(_DWORD *)(this + 400) - *(_DWORD *)(this + 396)) >> 2) - 1; v27 = (*(int (**)(void))(****(_DWORD ****)(this + 396) + 168))(); v26 = (*(int (**)(void))(***(_DWORD ***)(*(_DWORD *)(v2 + 396) + 4 * v3) + 168))(); v4 = *(_DWORD *)(v2 + 376) - *(_DWORD *)(v2 + 388); v33 = 1; v5 = v4 + 1; v24 = *(_DWORD *)(v2 + 376) - *(_DWORD *)(v2 + 388); v21 = v4 + 1; v31 = 1; v28 = 0; if ( v4 > 0 ) { do { v6 = *(_DWORD **)(*(_DWORD *)(v2 + 396) + 4 * v28); v25 = 2 * (*(int (**)(void))(*(_DWORD *)*v6 + 148))(); v7 = (*(int (**)(void))(*(_DWORD *)*v6 + 168))(); if ( v7 > v27 ) { v8 = v7 - v25; v9 = *v6; if ( v8 >= v27 ) (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 176))(v8); else (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 176))(v27); } v33 &= (*(int (__thiscall **)(_DWORD))(*(_DWORD *)*v6 + 168))(*v6) == v27; ++v28; } while ( v28 < v24 ); v5 = v21; } for ( i = v5; i < v3; ++i ) { v10 = *(_DWORD **)(*(_DWORD *)(v2 + 396) + 4 * i); v22 = 2 * (*(int (**)(void))(*(_DWORD *)*v10 + 148))(); v11 = (*(int (**)(void))(*(_DWORD *)*v10 + 168))(); if ( v11 < v26 ) { v12 = v22 + v11; v13 = *v10; if ( v12 <= v26 ) (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 176))(v12); else (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 176))(v26); } v31 &= (*(int (__thiscall **)(_DWORD))(*(_DWORD *)*v10 + 168))(*v10) == v26; } if ( v33 && v31 ) { *(_BYTE *)(v2 + 392) = 0; *(_DWORD *)(v2 + 548) = 0; sub_587F30(v2); sub_588860((_DWORD *)v2); } } if ( !*(_BYTE *)(v2 + 393) ) return sub_587AD0((_DWORD *)v2); v32 = 1; v23 = (*(_DWORD *)(v2 + 400) - *(_DWORD *)(v2 + 396)) >> 2; v30 = 0; if ( !v23 ) goto LABEL_29; do { v14 = *(_DWORD **)(*(_DWORD *)(v2 + 396) + 4 * v30); v15 = 2 * (*(int (**)(void))(*(_DWORD *)*v14 + 148))(); v16 = (*(int (**)(void))(*(_DWORD *)*v14 + 168))(); v17 = v14[2]; if ( v16 <= v17 ) { if ( v16 >= v17 ) goto LABEL_27; v18 = *v14; v19 = v15 + v16; if ( v19 > v17 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 176))(v14[2]); goto LABEL_27; } } else { v18 = *v14; v19 = v16 - v15; if ( v19 < v17 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 176))(v14[2]); goto LABEL_27; } } (*(void (__stdcall **)(int))(*(_DWORD *)v18 + 176))(v19); LABEL_27: v32 &= (*(int (**)(void))(*(_DWORD *)*v14 + 168))() == v14[2]; ++v30; } while ( v30 < v23 ); if ( v32 ) { LABEL_29: *(_BYTE *)(v2 + 393) = 0; sub_588860((_DWORD *)v2); } return sub_587AD0((_DWORD *)v2); } //----- (00588E60) -------------------------------------------------------- int __cdecl sub_588E60(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &PlayGuideMinWin::`vftable'; *(_DWORD *)(v2 + 232) = &PlayGuideMinWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D5900: using guessed type void *PlayGuideMinWin::`vftable'; // 9D591C: using guessed type void *PlayGuideMinWin::`vftable'; //----- (00588FA0) -------------------------------------------------------- _DWORD *__thiscall sub_588FA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; *((_WORD *)v1 + 196) = 0; *v1 = &PlayGuideWin::`vftable'; v1[58] = &PlayGuideWin::`vftable'; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; *((_BYTE *)v1 + 536) = 0; v1[135] = 0; v1[136] = 0; v1[138] = 0; v1[139] = 0; *((_BYTE *)v1 + 472) = 0; v1[137] = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D5D70: using guessed type void *PlayGuideWin::`vftable'; // 9D5D8C: using guessed type void *PlayGuideWin::`vftable'; //----- (00589060) -------------------------------------------------------- LONG __thiscall sub_589060(void **this) { void **v1; // esi v1 = this; *this = &PlayGuideWin::`vftable'; this[58] = &PlayGuideWin::`vftable'; if ( this[114] ) operator delete(this[114]); v1[114] = 0; v1[115] = 0; v1[116] = 0; if ( v1[99] ) operator delete(v1[99]); v1[99] = 0; v1[100] = 0; v1[101] = 0; return sub_8F10F0(v1); } // 9D5D70: using guessed type void *PlayGuideWin::`vftable'; // 9D5D8C: using guessed type void *PlayGuideWin::`vftable'; //----- (005890D0) -------------------------------------------------------- volatile LONG *__cdecl sub_5890D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x230u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_588FA0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00589200) -------------------------------------------------------- int __thiscall sub_589200(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax unsigned int v4; // ebx unsigned int v5; // edi int *v6; // eax int v7; // eax const void *v8; // ecx void *v9; // edi _DWORD *v10; // ecx int v11; // eax const CHAR *v12; // eax int v13; // edx CHAR v14; // cl int v15; // eax int result; // eax v2 = this; this[139] = a2; v3 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { while ( 1 ) { v6 = (int *)sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v5); if ( v6 ) { if ( v6[1] == a2 ) break; } if ( ++v5 >= v4 ) goto LABEL_10; } v7 = *v6; v2[138] = v7; v2[94] = v7; v2[95] = v7 - 1; v2[96] = v2[94] + 1; } LABEL_10: v8 = (const void *)v2[115]; v9 = (void *)v2[114]; if ( v9 != v8 ) { memcpy_0(v9, v8, 0); v2[115] = v9; } v10 = (_DWORD *)v2[104]; v11 = 37 - ((v2[100] - v2[99]) >> 2) <= 0 ? 0 : 37 - ((v2[100] - v2[99]) >> 2); v2[135] = v11; if ( v10 ) sub_4638F0(v10, v11); *((_BYTE *)v2 + 536) = 0; v12 = sub_4090F0(-2137670460); v13 = (char *)(v2 + 118) - v12; do { v14 = *v12; v12[v13] = *v12; ++v12; } while ( v14 ); if ( v2[94] ) v15 = v2[95]; else v15 = 0; sub_4637A0((_DWORD *)v2[104], v15); result = v2[104]; v2[97] = *(_DWORD *)(result + 300); *((_WORD *)v2 + 196) = 1; return result; } // ACD9D0: using guessed type int dword_ACD9D0; //----- (00589350) -------------------------------------------------------- const void **__thiscall sub_589350(_DWORD *this, void *a2) { return sub_4018E0(this + 74, a2, strlen((const char *)a2)); } //----- (00589380) -------------------------------------------------------- char __thiscall sub_589380(void *this, volatile LONG **a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // edi int v13; // ebx void (__thiscall ***v14)(_DWORD, signed int); // esi void (__thiscall **v15)(_DWORD, const CHAR *); // eax volatile LONG *v16; // eax void (__thiscall *v17)(volatile LONG *, int *); // edx const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // ST4C_4 int v25; // ecx volatile LONG *v26; // eax float *v27; // eax volatile LONG *v28; // eax int v29; // ecx volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // eax int v33; // eax volatile LONG *v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax CHAR *v37; // eax const void **v38; // eax const void **v39; // ecx const CHAR *v40; // eax const CHAR *v41; // eax int v42; // ecx CHAR v43; // dl volatile LONG *v44; // eax int v45; // ecx int v46; // edx int v47; // edi int v48; // ebx int v49; // ST5C_4 int v50; // eax volatile LONG *v51; // edi volatile LONG v52; // ebx const CHAR *v53; // eax int v54; // edi int v55; // ebx char *v56; // eax volatile LONG **v57; // eax volatile LONG **v58; // edi int v59; // ebx char *v60; // eax volatile LONG **v61; // ebx char *v62; // eax char *v63; // eax volatile LONG *v64; // eax _DWORD *v65; // ecx int v66; // eax int v67; // ebx int v68; // ST5C_4 int v69; // eax volatile LONG *v70; // eax int v71; // edi int v72; // ebx char *v73; // eax volatile LONG **v74; // eax int v75; // eax int v76; // edx int v77; // [esp+78h] [ebp-84h] int v78; // [esp+7Ch] [ebp-80h] int v79; // [esp+80h] [ebp-7Ch] int v80; // [esp+84h] [ebp-78h] char v81; // [esp+88h] [ebp-74h] int v82; // [esp+9Ch] [ebp-60h] int v83; // [esp+A0h] [ebp-5Ch] _DWORD *v84; // [esp+A4h] [ebp-58h] volatile LONG *v85; // [esp+A8h] [ebp-54h] int v86; // [esp+ACh] [ebp-50h] volatile LONG **v87; // [esp+B0h] [ebp-4Ch] int v88; // [esp+B4h] [ebp-48h] void (__thiscall **v89)(_DWORD, const CHAR *); // [esp+B8h] [ebp-44h] int v90; // [esp+BCh] [ebp-40h] char v91[4]; // [esp+C0h] [ebp-3Ch] int v92; // [esp+C4h] [ebp-38h] int v93; // [esp+C8h] [ebp-34h] int v94; // [esp+CCh] [ebp-30h] char v95; // [esp+D0h] [ebp-2Ch] char v96; // [esp+DCh] [ebp-20h] int v97; // [esp+F8h] [ebp-4h] v2 = (int)this; v87 = a2; v94 = 0; v3 = dword_BA6BA0; v97 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\PlayGuideWin.nif"); sub_8F66B0(v4, (int)&v94, v3); if ( !v94 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v94 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v86 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v97) = 1; if ( v8 ) v85 = *(volatile LONG **)(v8 + 4); else v85 = 0; v9 = sub_8FB140(v94, (int)"Frame", (int)&v93, (int)&v92, v85); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, (int)v87, (int)"PlayGuideContent", 0) ) { LOBYTE(v97) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v94; v97 = -1; if ( v94 && !InterlockedDecrement((volatile LONG *)(v94 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v93; v13 = v92; v83 = v93; v82 = v92; if ( sub_8F71E0(v94, (int)"WinTitle", &v93, &v92, &v88, &v90) ) { v15 = (void (__thiscall **)(_DWORD, const CHAR *))sub_421050(0); v78 = dword_AA8D9C; v89 = v15; v77 = dword_AA8D98; v80 = dword_AA8DA4; v79 = dword_AA8DA0; v16 = sub_8F4A20(v93 - v12, v92 - v13, v88, v90, (int)v15, v2, 0, 0); v17 = *(void (__thiscall **)(volatile LONG *, int *))(*v16 + 468); *(_DWORD *)v91 = v16; v17(v16, &v77); (*(void (__stdcall **)(signed int))(**(_DWORD **)v91 + 488))(1); v87 = (volatile LONG **)(**(_DWORD **)v91 + 472); v18 = sub_40A910(-521393324); ((void (__thiscall *)(_DWORD, const CHAR *))*v87)(*(_DWORD *)v91, v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v91 + 240))(0); v19 = sub_8FB140(v94, (int)"Theme", (int)&v93, (int)&v92, 0); v20 = sub_8F3EB0(v93 - v12, v92 - v13, (int)v19, v2, 0, 0); *(_DWORD *)(v2 + 420) = v20; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 256))(v20, 0); v21 = sub_8FB140(v94, (int)"Panel01", (int)&v93, (int)&v92, v85); sub_8F3EB0(v93 - v12, v92 - v13, (int)v21, v2, 0, 0); v22 = sub_8FB140(v94, (int)"Panel02", (int)&v93, (int)&v92, v85); v23 = sub_8F3EB0(v93 - v12, v92 - v13, (int)v22, v2, 0, 0); v24 = v85; v25 = v94; *(_DWORD *)(v2 + 412) = v23; *(_DWORD *)v91 = sub_8FB140(v25, (int)"ClsNor", (int)&v93, (int)&v92, v24); sub_8FB650(*(_DWORD **)v91, v94, (int)"ClsClick"); sub_8FB650(*(_DWORD **)v91, v94, (int)"ClsOver"); sub_8FE0F0(v93 - v12, v92 - v13, *(int *)v91, v2, 2, 0, 0); sub_43D0D0(0x18u); sub_456260(&v81); LOBYTE(v97) = 2; sub_455FF0(&v81, v2); sub_456000(&v81, 0, 0); sub_456380(&v81, v94); v84 = sub_4560E0((void *)8, 1); if ( !sub_8F71E0(v94, (int)"GuideTitle", &v93, &v92, &v88, &v90) ) goto LABEL_43; v26 = sub_8F4A20(v93 - v12, v92 - v13, v88, v90, (int)v84, v2, 0, 0); *(_DWORD *)(v2 + 424) = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 1); v87 = (volatile LONG **)(**(_DWORD **)(v2 + 424) + 468); v27 = sub_419EE0((float *)&v96, 0xFCu, 0x8Eu, 0, 0xFFu); ((void (__thiscall *)(_DWORD, float *))*v87)(*(_DWORD *)(v2 + 424), v27); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); if ( !sub_8F71E0(v94, (int)"GuideExplanation", &v93, &v92, &v88, &v90) ) goto LABEL_43; v28 = sub_8F4A20(v93 - v12, v92 - v13, v88, v90, (int)v89, v2, 0, 0); *(_DWORD *)(v2 + 428) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 256))(v28, 0); v29 = *(_DWORD *)(*(_DWORD *)(v2 + 428) + 288); if ( v29 ) { *(_WORD *)(v29 + 284) = 257; sub_9076A0((_DWORD *)v29, 4); } v30 = sub_8FB140(v94, (int)"GuideImage", (int)&v93, (int)&v92, 0); v31 = sub_8F3EB0(v93 - v12, v92 - v13, (int)v30, v2, 0, 0); *(_DWORD *)(v2 + 432) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 256))(v31, 0); if ( !sub_8F71E0(v94, (int)"GuidePageNumText", &v93, &v92, &v88, &v90) ) goto LABEL_43; v32 = sub_8F4A20(v93 - v12, v92 - v13, v88, v90, (int)v84, v2, 0, 0); *(_DWORD *)(v2 + 436) = v32; (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 436) + 256))(0); v33 = *(_DWORD *)(*(_DWORD *)(v2 + 436) + 288); if ( v33 ) *(_BYTE *)(v33 + 285) = 1; *(_DWORD *)v91 = sub_8FB140(v94, (int)"GuidePage_Nor00", (int)&v93, (int)&v92, 0); sub_8FB650(*(_DWORD **)v91, v94, (int)"GuidePage_Click00"); sub_8FB650(*(_DWORD **)v91, v94, (int)"GuidePage_Over00"); v34 = sub_8FE0F0(v93 - v12, v92 - v13, *(int *)v91, v2, 3, 0, 0); *(_DWORD *)(v2 + 440) = v34; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 256))(v34, 0); *(_DWORD *)v91 = sub_8FB140(v94, (int)"GuidePage_Nor01", (int)&v93, (int)&v92, 0); sub_8FB650(*(_DWORD **)v91, v94, (int)"GuidePage_Click01"); sub_8FB650(*(_DWORD **)v91, v94, (int)"GuidePage_Over01"); v35 = sub_8FE0F0(v93 - v12, v92 - v13, *(int *)v91, v2, 4, 0, 0); *(_DWORD *)(v2 + 444) = v35; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 256))(v35, 0); if ( sub_8F71E0(v94, (int)"GuideSerchText", &v93, &v92, &v88, &v90) ) { v36 = sub_45AA60(v93 - v12, v92 - v13, v88, v90, v2, 1342177280, 16, 1, 0, 0, 1); *(_DWORD *)(v2 + 448) = v36; sub_459980(v36, 1); v37 = (CHAR *)sub_4090F0(-2137670460); v38 = (const void **)sub_4019E0(&v95, v37); v39 = *(const void ***)(v2 + 448); LOBYTE(v97) = 3; sub_45ABC0(v39, v38); LOBYTE(v97) = 2; sub_636A10(&v95); v89 = (void (__thiscall **)(_DWORD, const CHAR *))(**(_DWORD **)(v2 + 448) + 460); v40 = sub_4090F0(-2137670460); (*v89)(*(_DWORD *)(v2 + 448), v40); v41 = sub_4090F0(-2137670460); v42 = v2 + 472 - (_DWORD)v41; do { v43 = *v41; v41[v42] = *v41; ++v41; } while ( v43 ); *(_DWORD *)v91 = sub_8FB140(v94, (int)"ListBtnNor", (int)&v93, (int)&v92, 0); sub_8FB650(*(_DWORD **)v91, v94, (int)"ListBtnClick"); sub_8FB650(*(_DWORD **)v91, v94, (int)"ListBtnOver"); v44 = sub_8FE0F0(v93 - v12, v92 - v13, *(int *)v91, v2, 5, 0, 0); v45 = *(_DWORD *)v91; *(_DWORD *)(v2 + 452) = v44; v46 = *(_DWORD *)(v45 + 36); v47 = *(_DWORD *)(*(_DWORD *)v46 + 24); v48 = *(_DWORD *)(*(_DWORD *)v46 + 20); v49 = (int)v44; v50 = sub_421050(1); v51 = sub_8F4A20(0, 0, v48, v47, v50, v49, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); v52 = *v51; v53 = sub_4090F0(-1093282594); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v52 + 472))(v51, v53); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v51 + 240))(v51, 0); v54 = *(_DWORD *)v94; v84 = 0; *(_DWORD *)v91 = 0; v55 = v94; v56 = sub_7549E0("TextList%02dNor", 0); if ( (*(int (__thiscall **)(int, char *))(v54 + 72))(v55, v56) ) { do { v57 = (volatile LONG **)operator new(0xCu); if ( v57 ) { *v57 = 0; v57[1] = 0; v57[2] = 0; v58 = v57; } else { v58 = 0; } v59 = v94; v87 = v58; v60 = sub_7549E0("TextList%02dNor", *(_DWORD *)v91); v61 = sub_8FB140(v59, (int)v60, (int)&v93, (int)&v92, 0); v89 = (void (__thiscall **)(_DWORD, const CHAR *))v94; v62 = sub_7549E0("TextList%02dClick", *(_DWORD *)v91); sub_8FB650(v61, (int)v89, (int)v62); v89 = (void (__thiscall **)(_DWORD, const CHAR *))v94; v63 = sub_7549E0("TextList%02dOver", *(_DWORD *)v91); sub_8FB650(v61, (int)v89, (int)v63); v64 = sub_8FE0F0(v93 - v83, v92 - v82, (int)v61, v2, 0, 0, 0); v65 = v84; *v58 = v64; (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v64 + 520))(v64, v65); v66 = *v61[9]; v67 = *(_DWORD *)(v66 + 24); v68 = (int)*v58; v89 = *(void (__thiscall ***)(_DWORD, const CHAR *))(v66 + 20); v69 = sub_421050(1); v70 = sub_8F4A20(0, 0, (int)v89, v67, v69, v68, 0, 0); v58[1] = v70; (*(void (__thiscall **)(volatile LONG *, signed int))(*v70 + 488))(v70, 5); (*(void (__stdcall **)(_DWORD))(*v58[1] + 240))(0); v58[2] = (volatile LONG *)(*(int (**)(void))(**v58 + 168))(); sub_5B3CF0((_DWORD *)(v2 + 396), &v87); v71 = *(_DWORD *)v94; v84 = (_DWORD *)((char *)v84 + 1); *(_DWORD *)v91 = v84; v72 = v94; v73 = sub_7549E0("TextList%02dNor", v84); } while ( (*(int (__thiscall **)(int, char *))(v71 + 72))(v72, v73) ); } v74 = sub_8FB140(v94, (int)"SlideBar_SlideBtnMiddle", (int)&v93, (int)&v92, v85); v75 = sub_464310(v94, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v74, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 416) = v75; *(_DWORD *)(v75 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v2 + 416) + 304) = 1; v76 = (*(_DWORD *)(v2 + 400) - *(_DWORD *)(v2 + 396)) >> 2; sub_4638F0(*(_DWORD **)(v2 + 416), (37 - v76) & ((37 - v76 <= 0) - 1)); *(_DWORD *)(v2 + 540) = *(_DWORD *)(*(_DWORD *)(v2 + 416) + 296); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.5); LOBYTE(v97) = 1; sub_4562E0(&v81); LOBYTE(v97) = 0; sub_410C00(&v86); v97 = -1; sub_410C00(&v94); result = 1; } else { LABEL_43: LOBYTE(v97) = 1; sub_4562E0(&v81); LOBYTE(v97) = 0; sub_410C00(&v86); v97 = -1; sub_410C00(&v94); result = 0; } } else { LOBYTE(v97) = 0; if ( !InterlockedDecrement((volatile LONG *)(v86 + 4)) ) (**(void (__thiscall ***)(int, signed int))v86)(v86, 1); v14 = (void (__thiscall ***)(_DWORD, signed int))v94; v97 = -1; if ( !v94 || InterlockedDecrement((volatile LONG *)(v94 + 4)) || !v14 ) return 0; (**v14)(v14, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00589E90) -------------------------------------------------------- void __thiscall sub_589E90(_DWORD *this) { int v1; // esi int v2; // ecx unsigned __int8 *v3; // ebx const unsigned __int8 *v4; // eax const unsigned __int8 *v5; // eax _DWORD *v6; // edi const CHAR *v7; // eax _DWORD ***v8; // edi int v9; // ecx unsigned int v10; // eax unsigned int v11; // ebx _DWORD **v12; // ebx _DWORD **v13; // eax _DWORD **v14; // edi _DWORD *v15; // edi const CHAR *v16; // eax unsigned __int8 *v17; // eax int v18; // edx unsigned __int8 v19; // cl int v20; // ecx unsigned __int8 v21; // al const unsigned __int8 *v22; // eax _DWORD *v23; // edi const CHAR *v24; // eax int v25; // eax _DWORD *v26; // ecx int v27; // ST10_4 int v28; // [esp+10h] [ebp-F0h] int v29; // [esp+14h] [ebp-ECh] int v30; // [esp+18h] [ebp-E8h] unsigned __int8 *v31; // [esp+20h] [ebp-E0h] void *v32; // [esp+24h] [ebp-DCh] char v33; // [esp+28h] [ebp-D8h] char v34; // [esp+29h] [ebp-D7h] int v35; // [esp+FCh] [ebp-4h] v1 = (int)this; v2 = this[112]; if ( !v2 || !*(_DWORD *)(v1 + 416) ) return; v3 = (unsigned __int8 *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); v31 = v3; if ( !_mbscmp((const unsigned __int8 *)(v1 + 472), v3) ) { v22 = (const unsigned __int8 *)sub_4090F0(-2137670460); if ( _mbsnbcmp(v3, v22, 0x10u) ) { if ( _mbsnbcmp(v3, &byte_9D56BF, 0x10u) ) { if ( *(_DWORD *)(v1 + 456) == *(_DWORD *)(v1 + 460) ) { v23 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v23 ) { v24 = sub_4090F0(1216183756); sub_492060(v23, (int)v24); } } } } if ( *(_DWORD *)(v1 + 548) ) v25 = 0; else v25 = *(_DWORD *)(v1 + 544); *(_DWORD *)(v1 + 388) = v25; goto LABEL_42; } v4 = (const unsigned __int8 *)sub_4090F0(-2137670460); if ( _mbsnbcmp(v3, v4, 0x10u) && _mbsnbcmp(v3, &byte_9D56B2, 0x10u) ) sub_588780((_DWORD *)v1, (const char *)v3); v5 = (const unsigned __int8 *)sub_4090F0(-2137670460); if ( !_mbsnbcmp(v3, v5, 0x10u) || !_mbsnbcmp(v3, &byte_9D56B3, 0x10u) ) { sub_58A570((void **)(v1 + 456)); *(_DWORD *)(v1 + 540) = 37 - ((*(_DWORD *)(v1 + 400) - *(_DWORD *)(v1 + 396)) >> 2); *(_BYTE *)(v1 + 536) = 0; v20 = v1 + 472 - (_DWORD)v3; do { v21 = *v3; v3[v20] = *v3; ++v3; } while ( v21 ); *(_DWORD *)(v1 + 388) = 0; LABEL_42: v26 = *(_DWORD **)(v1 + 416); v27 = *(_DWORD *)(v1 + 540) <= 0 ? 0 : *(_DWORD *)(v1 + 540); *(_DWORD *)(v1 + 540) = v27; sub_4638F0(v26, v27); sub_4637A0(*(_DWORD **)(v1 + 416), *(_DWORD *)(v1 + 388)); *(_DWORD *)(v1 + 548) = 1; sub_587F30(v1); *(_WORD *)(v1 + 392) = 256; (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v1 + 448) + 488))(*(_DWORD *)(v1 + 448), 1); return; } if ( strlen((const char *)v3) > 2 ) { v8 = (_DWORD ***)(v1 + 456); sub_58A570((void **)(v1 + 456)); v28 = 0; v29 = 0; v30 = 0; v35 = 0; sub_58A660((char *)v3, (int)&v28); v33 = 0; memset(&v34, 0, 0xC4u); v9 = v28; v10 = 0; v11 = (v29 - v28) >> 2; v32 = 0; if ( v11 ) { do { if ( *(_DWORD *)(v9 + 4 * v10) ) { sub_58A5A0(**(_DWORD **)(v9 + 4 * v10), (_DWORD *)(v1 + 456), (int)&v33); v10 = (unsigned int)v32; v9 = v28; } v32 = (void *)++v10; } while ( v10 < v11 ); } v12 = *v8; if ( *v8 != *(_DWORD ***)(v1 + 460) ) { v32 = v12 + 1; do { if ( sub_58A420(**v12) ) { ++v12; v32 = (char *)v32 + 4; } else { memcpy_0(v12, v32, 4 * ((*(_DWORD *)(v1 + 460) - (signed int)v32) >> 2)); *(_DWORD *)(v1 + 460) -= 4; } } while ( v12 != *(_DWORD ***)(v1 + 460) ); } v13 = *v8; v14 = *(_DWORD ***)(v1 + 460); if ( v13 == v14 ) { *(_DWORD *)(v1 + 540) = 37 - ((*(_DWORD *)(v1 + 400) - *(_DWORD *)(v1 + 396)) >> 2); *(_BYTE *)(v1 + 536) = 0; v15 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v15 ) { v16 = sub_4090F0(1216183756); sub_492060(v15, (int)v16); } } else { *(_DWORD *)(v1 + 540) = v14 - v13 - ((*(_DWORD *)(v1 + 400) - *(_DWORD *)(v1 + 396)) >> 2) + 1; *(_BYTE *)(v1 + 536) = 1; } v17 = v31; v18 = v1 + 472 - (_DWORD)v31; do { v19 = *v17; v17[v18] = *v17; ++v17; } while ( v19 ); v35 = -1; sub_467570(&v28); *(_DWORD *)(v1 + 388) = 0; goto LABEL_42; } v6 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v6 ) { v7 = sub_4090F0(1265686226); sub_492060(v6, (int)v7); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 448) + 488))(1); } //----- (0058A2C0) -------------------------------------------------------- char __thiscall sub_58A2C0(_DWORD **this, const char *a2) { _DWORD **v2; // esi const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax v2 = this; if ( a2 && (v3 = sub_4E6810(a2)) != 0 && (v4 = sub_58A4C0(*((_DWORD *)v3 + 16))) != 0 && v2[112] ) { (*(void (__stdcall **)(_DWORD *))(*v2[112] + 460))(v4 + 1); sub_589E90(v2); LOBYTE(v5) = sub_8F82A0(&unk_BA6B10, v2); } else { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) LOBYTE(v5) = sub_4A50F0(v5); } return (char)v5; } //----- (0058A340) -------------------------------------------------------- void __thiscall sub_58A340(_DWORD *this, int a2, int a3) { sub_589E90(this); } //----- (0058A350) -------------------------------------------------------- void __thiscall sub_58A350(int this, int a2, unsigned int a3) { int v3; // eax switch ( a2 ) { case 0: sub_587E50(this, a3); break; case 1: v3 = *(_DWORD *)(this + 416); if ( v3 ) { *(_DWORD *)(this + 388) = *(_DWORD *)(v3 + 300); sub_587F30(this); } break; case 2: sub_4A5C20(*(_DWORD ***)(this + 296)); break; case 3: sub_5889F0((int *)this, 1); break; case 4: sub_5889F0((int *)this, 0); break; case 5: sub_589E90((_DWORD *)this); break; default: return; } } //----- (0058A3E0) -------------------------------------------------------- void *__thiscall sub_58A3E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PlayGuideMinWin::`vftable'; *((_DWORD *)this + 58) = &PlayGuideMinWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D5900: using guessed type void *PlayGuideMinWin::`vftable'; // 9D591C: using guessed type void *PlayGuideMinWin::`vftable'; //----- (0058A420) -------------------------------------------------------- int __cdecl sub_58A420(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi int result; // eax v1 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v3); if ( result ) { if ( *(_DWORD *)(result + 4) == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9D0: using guessed type int dword_ACD9D0; //----- (0058A470) -------------------------------------------------------- _DWORD *__cdecl sub_58A470(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACD9D0 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9D0 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9D0: using guessed type int dword_ACD9D0; //----- (0058A4C0) -------------------------------------------------------- _DWORD *__cdecl sub_58A4C0(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi _DWORD *result; // eax v1 = *(_DWORD *)(dword_ACD9E4 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9E4 + 4), v3); if ( result ) { if ( *result == a1 ) break; } if ( ++v3 >= v2 ) return 0; } return result; } // ACD9E4: using guessed type int dword_ACD9E4; //----- (0058A510) -------------------------------------------------------- _DWORD *__thiscall sub_58A510(void *this, char a2) { _DWORD *v2; // esi v2 = this; if ( *((_DWORD *)this + 79) >= 0x10u ) operator delete(*((void **)this + 74)); v2[79] = 15; v2[78] = 0; *((_BYTE *)v2 + 296) = 0; sub_8F3CC0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0058A570) -------------------------------------------------------- void *__thiscall sub_58A570(void **this) { void **v1; // ebx void *v2; // ecx void *v3; // esi void *result; // eax v1 = this; v2 = this[1]; v3 = *v1; if ( *v1 != v2 ) { result = memcpy_0(v3, v2, 0); v1[1] = v3; } return result; } //----- (0058A5A0) -------------------------------------------------------- _DWORD *__cdecl sub_58A5A0(int a1, _DWORD *a2, int a3) { _DWORD *result; // eax unsigned int v4; // edi unsigned int v5; // esi _DWORD *v6; // [esp+8h] [ebp-D0h] char v7[200]; // [esp+Ch] [ebp-CCh] result = a2; if ( a2 && a3 ) { result = *(_DWORD **)(dword_ACD9DC + 56); v4 = result ? result[10] : 0; v5 = 0; if ( v4 ) { do { result = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9DC + 4), v5); v6 = result; if ( result && *result < 197 && result[1] == a1 && !*(_BYTE *)(a3 + *result) ) { *(_BYTE *)(a3 + *result) = 1; v7[*result] = 1; result = sub_5B3CF0(a2, &v6); } ++v5; } while ( v5 < v4 ); } } return result; } // ACD9DC: using guessed type int dword_ACD9DC; // 58A5A0: using guessed type char var_CC[200]; //----- (0058A660) -------------------------------------------------------- char *__cdecl sub_58A660(char *a1, int a2) { char *result; // eax int v3; // eax unsigned int v4; // ebx unsigned int v5; // edi char *v6; // esi char *v7; // eax char v8; // cl _DWORD *v9; // ecx char *v10; // [esp+0h] [ebp-16Ch] _DWORD *v11; // [esp+4h] [ebp-168h] char *v12; // [esp+8h] [ebp-164h] char v13[256]; // [esp+Ch] [ebp-160h] char v14; // [esp+10Ch] [ebp-60h] char v15; // [esp+10Dh] [ebp-5Fh] result = (char *)a2; v12 = a1; v11 = (_DWORD *)a2; if ( a2 && a1 ) { v3 = *(_DWORD *)(dword_ACD9E4 + 56); v4 = v3 ? *(_DWORD *)(v3 + 40) : 0; v14 = 0; result = (char *)memset(&v15, 0, 0x59u); v5 = 0; if ( v4 ) { do { result = (char *)sub_7474E0((_DWORD *)(dword_ACD9E4 + 4), v5); v6 = result; v10 = result; if ( result ) { v7 = result + 4; do { v8 = *v7; v7[v13 - (v6 + 4)] = *v7; ++v7; } while ( v8 ); _strlwr(v12); result = _strlwr(v13); if ( *(_DWORD *)v6 < 90 ) { result = (char *)_mbsstr((const unsigned __int8 *)v13, (const unsigned __int8 *)v12); if ( result ) { result = &v14 + *(_DWORD *)v6; if ( !*(&v14 + *(_DWORD *)v6) ) { v9 = v11; *result = 1; result = (char *)sub_5B3CF0(v9, &v10); } } } } ++v5; } while ( v5 < v4 ); } } return result; } // ACD9E4: using guessed type int dword_ACD9E4; // 58A660: using guessed type char var_160[256]; //----- (0058A780) -------------------------------------------------------- void *__thiscall sub_58A780(void *this, char a2) { void *v2; // esi v2 = this; sub_589060((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0058A7B0) -------------------------------------------------------- void __thiscall sub_58A7B0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[86]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[86] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0058A800) -------------------------------------------------------- int __cdecl sub_58A800(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 const CHAR *v7; // eax volatile LONG *v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi v1 = dword_ACF454; if ( !dword_ACF454 ) { v2 = dword_ACF454; v3 = dword_ACF454; v4 = dword_ACF454; v5 = dword_ACF454; v6 = dword_ACF454; v7 = sub_40C190(-196326597); v8 = sub_58E290(v7, 121, v6, v5, v4, v3, v2); v9 = dword_ACF454; if ( (volatile LONG *)dword_ACF454 != v8 ) { if ( dword_ACF454 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF454; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF454 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v9 = (int)v8; dword_ACF454 = (int)v8; if ( v8 ) { InterlockedIncrement(v8 + 1); v9 = dword_ACF454; } } *(_DWORD *)(v9 + 332) = 1; v1 = dword_ACF454; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF454 + 336) = a1; return dword_ACF454; } //----- (0058A8B0) -------------------------------------------------------- int sub_58A8B0() { int result; // eax int v1; // ST18_4 int v2; // ST14_4 int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST08_4 const CHAR *v6; // eax volatile LONG *v7; // esi int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // edi result = dword_ACF48C; if ( !dword_ACF48C ) { v1 = dword_ACF48C; v2 = dword_ACF48C; v3 = dword_ACF48C; v4 = dword_ACF48C; v5 = dword_ACF48C; v6 = sub_40C190(1312980604); v7 = sub_58E290(v6, 121, v5, v4, v3, v2, v1); v8 = dword_ACF48C; if ( (volatile LONG *)dword_ACF48C != v7 ) { if ( dword_ACF48C ) { v9 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF48C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF48C + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v8 = (int)v7; dword_ACF48C = (int)v7; if ( v7 ) { InterlockedIncrement(v7 + 1); v8 = dword_ACF48C; } } *(_DWORD *)(v8 + 332) = 8; result = dword_ACF48C; } return result; } //----- (0058A940) -------------------------------------------------------- int __cdecl sub_58A940(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 const CHAR *v7; // eax volatile LONG *v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi v1 = dword_ACF458; if ( !dword_ACF458 ) { v2 = dword_ACF458; v3 = dword_ACF458; v4 = dword_ACF458; v5 = dword_ACF458; v6 = dword_ACF458; v7 = sub_40C190(893229738); v8 = sub_58E290(v7, 122, v6, v5, v4, v3, v2); v9 = dword_ACF458; if ( (volatile LONG *)dword_ACF458 != v8 ) { if ( dword_ACF458 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF458; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF458 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v9 = (int)v8; dword_ACF458 = (int)v8; if ( v8 ) { InterlockedIncrement(v8 + 1); v9 = dword_ACF458; } } *(_DWORD *)(v9 + 332) = 2; v1 = dword_ACF458; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF458 + 336) = a1; return dword_ACF458; } //----- (0058A9F0) -------------------------------------------------------- int sub_58A9F0() { int result; // eax int v1; // ST18_4 int v2; // ST14_4 int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST08_4 const CHAR *v6; // eax volatile LONG *v7; // esi int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // edi result = dword_ACF45C; if ( !dword_ACF45C ) { v1 = dword_ACF45C; v2 = dword_ACF45C; v3 = dword_ACF45C; v4 = dword_ACF45C; v5 = dword_ACF45C; v6 = sub_40C190(-572003345); v7 = sub_58E290(v6, 127, v5, v4, v3, v2, v1); v8 = dword_ACF45C; if ( (volatile LONG *)dword_ACF45C != v7 ) { if ( dword_ACF45C ) { v9 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF45C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF45C + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v8 = (int)v7; dword_ACF45C = (int)v7; if ( v7 ) { InterlockedIncrement(v7 + 1); v8 = dword_ACF45C; } } *(_DWORD *)(v8 + 332) = 9; result = dword_ACF45C; } return result; } //----- (0058AA80) -------------------------------------------------------- int __cdecl sub_58AA80(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF468; if ( !dword_ACF468 ) { v2 = dword_ACF468; v3 = dword_ACF468; v4 = dword_ACF468; v5 = dword_ACF468; v6 = dword_ACF468; v7 = dword_ACF468; v8 = sub_40C190(-220934169); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF468; if ( (volatile LONG *)dword_ACF468 != v9 ) { if ( dword_ACF468 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF468; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF468 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF468 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF468; } } *(_DWORD *)(v10 + 332) = 3; v1 = dword_ACF468; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF468 + 336) = a1; return dword_ACF468; } //----- (0058AB30) -------------------------------------------------------- int __cdecl sub_58AB30(int a1) { int v1; // ST18_4 int v2; // ST14_4 int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST08_4 int v6; // ST04_4 const CHAR *v7; // eax volatile LONG *v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi int result; // eax if ( dword_ACF46C ) { *(_DWORD *)(dword_ACF46C + 336) = a1; result = dword_ACF46C; } else { v1 = dword_ACF46C; v2 = dword_ACF46C; v3 = dword_ACF46C; v4 = dword_ACF46C; v5 = dword_ACF46C; v6 = dword_ACF46C; v7 = sub_40C190(743537826); v8 = sub_58E290(v7, v6, v5, v4, v3, v2, v1); v9 = dword_ACF46C; if ( (volatile LONG *)dword_ACF46C != v8 ) { if ( dword_ACF46C ) { v10 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF46C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF46C + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v9 = (int)v8; dword_ACF46C = (int)v8; if ( v8 ) { InterlockedIncrement(v8 + 1); v9 = dword_ACF46C; } } *(_DWORD *)(v9 + 332) = 10; *(_DWORD *)(dword_ACF46C + 336) = a1; result = dword_ACF46C; } return result; } //----- (0058ABE0) -------------------------------------------------------- int __cdecl sub_58ABE0(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 const CHAR *v7; // eax volatile LONG *v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi v1 = dword_ACF460; if ( !dword_ACF460 ) { v2 = dword_ACF460; v3 = dword_ACF460; v4 = dword_ACF460; v5 = dword_ACF460; v6 = dword_ACF460; v7 = sub_40C190(-1042419160); v8 = sub_58E290(v7, 124, v6, v5, v4, v3, v2); v9 = dword_ACF460; if ( (volatile LONG *)dword_ACF460 != v8 ) { if ( dword_ACF460 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF460; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF460 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v9 = (int)v8; dword_ACF460 = (int)v8; if ( v8 ) { InterlockedIncrement(v8 + 1); v9 = dword_ACF460; } } *(_DWORD *)(v9 + 332) = 4; v1 = dword_ACF460; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF460 + 336) = a1; return dword_ACF460; } //----- (0058AC90) -------------------------------------------------------- int sub_58AC90() { int result; // eax int v1; // ST18_4 int v2; // ST14_4 int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST08_4 const CHAR *v6; // eax volatile LONG *v7; // esi int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // edi result = dword_ACF464; if ( !dword_ACF464 ) { v1 = dword_ACF464; v2 = dword_ACF464; v3 = dword_ACF464; v4 = dword_ACF464; v5 = dword_ACF464; v6 = sub_40C190(1212301195); v7 = sub_58E290(v6, 125, v5, v4, v3, v2, v1); v8 = dword_ACF464; if ( (volatile LONG *)dword_ACF464 != v7 ) { if ( dword_ACF464 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF464; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF464 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v8 = (int)v7; dword_ACF464 = (int)v7; if ( v7 ) { InterlockedIncrement(v7 + 1); v8 = dword_ACF464; } } *(_DWORD *)(v8 + 332) = 5; result = dword_ACF464; } return result; } //----- (0058AF20) -------------------------------------------------------- LONG sub_58AF20() { LONG result; // eax int (__thiscall ***v1)(_DWORD, signed int); // esi int (__thiscall ***v2)(_DWORD, signed int); // esi int (__thiscall ***v3)(_DWORD, signed int); // esi int (__thiscall ***v4)(_DWORD, signed int); // esi int (__thiscall ***v5)(_DWORD, signed int); // esi int (__thiscall ***v6)(_DWORD, signed int); // esi int (__thiscall ***v7)(_DWORD, signed int); // esi int (__thiscall ***v8)(_DWORD, signed int); // esi int (__thiscall ***v9)(_DWORD, signed int); // esi int (__thiscall ***v10)(_DWORD, signed int); // esi int (__thiscall ***v11)(_DWORD, signed int); // esi int (__thiscall ***v12)(_DWORD, signed int); // esi int (__thiscall ***v13)(_DWORD, signed int); // esi int (__thiscall ***v14)(_DWORD, signed int); // esi int (__thiscall ***v15)(_DWORD, signed int); // esi int (__thiscall ***v16)(_DWORD, signed int); // esi int (__thiscall ***v17)(_DWORD, signed int); // esi int (__thiscall ***v18)(_DWORD, signed int); // esi int (__thiscall ***v19)(_DWORD, signed int); // esi int (__thiscall ***v20)(_DWORD, signed int); // esi int (__thiscall ***v21)(_DWORD, signed int); // esi int (__thiscall ***v22)(_DWORD, signed int); // esi int (__thiscall ***v23)(_DWORD, signed int); // esi int (__thiscall ***v24)(_DWORD, signed int); // esi int (__thiscall ***v25)(_DWORD, signed int); // esi int (__thiscall ***v26)(_DWORD, signed int); // esi int (__thiscall ***v27)(_DWORD, signed int); // esi int (__thiscall ***v28)(_DWORD, signed int); // esi int (__thiscall ***v29)(_DWORD, signed int); // esi int (__thiscall ***v30)(_DWORD, signed int); // esi int (__thiscall ***v31)(_DWORD, signed int); // esi int (__thiscall ***v32)(_DWORD, signed int); // esi int (__thiscall ***v33)(_DWORD, signed int); // esi int (__thiscall ***v34)(_DWORD, signed int); // esi int (__thiscall ***v35)(_DWORD, signed int); // esi int (__thiscall ***v36)(_DWORD, signed int); // esi int (__thiscall ***v37)(_DWORD, signed int); // esi int (__thiscall ***v38)(_DWORD, signed int); // esi int (__thiscall ***v39)(_DWORD, signed int); // esi int (__thiscall ***v40)(_DWORD, signed int); // esi int (__thiscall ***v41)(_DWORD, signed int); // esi int (__thiscall ***v42)(_DWORD, signed int); // esi int (__thiscall ***v43)(_DWORD, signed int); // esi result = dword_ACF454; if ( dword_ACF454 ) { v1 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF454; result = InterlockedDecrement((volatile LONG *)(dword_ACF454 + 4)); if ( !result && v1 ) result = (**v1)(v1, 1); dword_ACF454 = 0; } v2 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF458; if ( dword_ACF458 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF458 + 4)); if ( !result && v2 ) result = (**v2)(v2, 1); dword_ACF458 = 0; } v3 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF46C; if ( dword_ACF46C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF46C + 4)); if ( !result && v3 ) result = (**v3)(v3, 1); dword_ACF46C = 0; } v4 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF45C; if ( dword_ACF45C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF45C + 4)); if ( !result && v4 ) result = (**v4)(v4, 1); dword_ACF45C = 0; } v5 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF460; if ( dword_ACF460 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF460 + 4)); if ( !result && v5 ) result = (**v5)(v5, 1); dword_ACF460 = 0; } v6 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF464; if ( dword_ACF464 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF464 + 4)); if ( !result && v6 ) result = (**v6)(v6, 1); dword_ACF464 = 0; } v7 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF468; if ( dword_ACF468 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF468 + 4)); if ( !result && v7 ) result = (**v7)(v7, 1); dword_ACF468 = 0; } v8 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF488; if ( dword_ACF488 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF488 + 4)); if ( !result && v8 ) result = (**v8)(v8, 1); dword_ACF488 = 0; } v9 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF470; if ( dword_ACF470 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF470 + 4)); if ( !result && v9 ) result = (**v9)(v9, 1); dword_ACF470 = 0; } v10 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF474; if ( dword_ACF474 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF474 + 4)); if ( !result && v10 ) result = (**v10)(v10, 1); dword_ACF474 = 0; } v11 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF478; if ( dword_ACF478 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF478 + 4)); if ( !result && v11 ) result = (**v11)(v11, 1); dword_ACF478 = 0; } v12 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF47C; if ( dword_ACF47C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF47C + 4)); if ( !result && v12 ) result = (**v12)(v12, 1); dword_ACF47C = 0; } v13 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF480; if ( dword_ACF480 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF480 + 4)); if ( !result && v13 ) result = (**v13)(v13, 1); dword_ACF480 = 0; } v14 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF4E0; if ( dword_ACF4E0 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF4E0 + 4)); if ( !result && v14 ) result = (**v14)(v14, 1); dword_ACF4E0 = 0; } v15 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF484; if ( dword_ACF484 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF484 + 4)); if ( !result && v15 ) result = (**v15)(v15, 1); dword_ACF484 = 0; } v16 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF500; if ( dword_ACF500 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF500 + 4)); if ( !result && v16 ) result = (**v16)(v16, 1); dword_ACF500 = 0; } v17 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF504; if ( dword_ACF504 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF504 + 4)); if ( !result && v17 ) result = (**v17)(v17, 1); dword_ACF504 = 0; } v18 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF508; if ( dword_ACF508 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF508 + 4)); if ( !result && v18 ) result = (**v18)(v18, 1); dword_ACF508 = 0; } v19 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF50C; if ( dword_ACF50C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF50C + 4)); if ( !result && v19 ) result = (**v19)(v19, 1); dword_ACF50C = 0; } v20 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF510; if ( dword_ACF510 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF510 + 4)); if ( !result && v20 ) result = (**v20)(v20, 1); dword_ACF510 = 0; } v21 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF514; if ( dword_ACF514 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF514 + 4)); if ( !result && v21 ) result = (**v21)(v21, 1); dword_ACF514 = 0; } v22 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF518; if ( dword_ACF518 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF518 + 4)); if ( !result && v22 ) result = (**v22)(v22, 1); dword_ACF518 = 0; } v23 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF51C; if ( dword_ACF51C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF51C + 4)); if ( !result && v23 ) result = (**v23)(v23, 1); dword_ACF51C = 0; } v24 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF520; if ( dword_ACF520 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF520 + 4)); if ( !result && v24 ) result = (**v24)(v24, 1); dword_ACF520 = 0; } v25 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF528; if ( dword_ACF528 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF528 + 4)); if ( !result && v25 ) result = (**v25)(v25, 1); dword_ACF528 = 0; } v26 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF524; if ( dword_ACF524 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF524 + 4)); if ( !result && v26 ) result = (**v26)(v26, 1); dword_ACF524 = 0; } v27 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF52C; if ( dword_ACF52C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF52C + 4)); if ( !result && v27 ) result = (**v27)(v27, 1); dword_ACF52C = 0; } v28 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF530; if ( dword_ACF530 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF530 + 4)); if ( !result && v28 ) result = (**v28)(v28, 1); dword_ACF530 = 0; } v29 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF534; if ( dword_ACF534 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF534 + 4)); if ( !result && v29 ) result = (**v29)(v29, 1); dword_ACF534 = 0; } v30 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF4E8; if ( dword_ACF4E8 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF4E8 + 4)); if ( !result && v30 ) result = (**v30)(v30, 1); dword_ACF4E8 = 0; } v31 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF4E4; if ( dword_ACF4E4 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF4E4 + 4)); if ( !result && v31 ) result = (**v31)(v31, 1); dword_ACF4E4 = 0; } v32 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF53C; if ( dword_ACF53C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF53C + 4)); if ( !result && v32 ) result = (**v32)(v32, 1); dword_ACF53C = 0; } v33 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF540; if ( dword_ACF540 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF540 + 4)); if ( !result && v33 ) result = (**v33)(v33, 1); dword_ACF540 = 0; } v34 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF544; if ( dword_ACF544 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF544 + 4)); if ( !result && v34 ) result = (**v34)(v34, 1); dword_ACF544 = 0; } v35 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF548; if ( dword_ACF548 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF548 + 4)); if ( !result && v35 ) result = (**v35)(v35, 1); dword_ACF548 = 0; } v36 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF54C; if ( dword_ACF54C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF54C + 4)); if ( !result && v36 ) result = (**v36)(v36, 1); dword_ACF54C = 0; } v37 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF550; if ( dword_ACF550 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF550 + 4)); if ( !result && v37 ) result = (**v37)(v37, 1); dword_ACF550 = 0; } v38 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF554; if ( dword_ACF554 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF554 + 4)); if ( !result && v38 ) result = (**v38)(v38, 1); dword_ACF554 = 0; } v39 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF558; if ( dword_ACF558 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF558 + 4)); if ( !result && v39 ) result = (**v39)(v39, 1); dword_ACF558 = 0; } v40 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF55C; if ( dword_ACF55C ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF55C + 4)); if ( !result && v40 ) result = (**v40)(v40, 1); dword_ACF55C = 0; } v41 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF560; if ( dword_ACF560 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF560 + 4)); if ( !result && v41 ) result = (**v41)(v41, 1); dword_ACF560 = 0; } v42 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF564; if ( dword_ACF564 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF564 + 4)); if ( !result && v42 ) result = (**v42)(v42, 1); dword_ACF564 = 0; } v43 = (int (__thiscall ***)(_DWORD, signed int))dword_ACF568; if ( dword_ACF568 ) { result = InterlockedDecrement((volatile LONG *)(dword_ACF568 + 4)); if ( !result ) { if ( v43 ) result = (**v43)(v43, 1); } dword_ACF568 = 0; } return result; } // ACF470: using guessed type int dword_ACF470; // ACF474: using guessed type int dword_ACF474; // ACF478: using guessed type int dword_ACF478; // ACF47C: using guessed type int dword_ACF47C; // ACF484: using guessed type int dword_ACF484; // ACF488: using guessed type int dword_ACF488; // ACF4E4: using guessed type int dword_ACF4E4; // ACF500: using guessed type int dword_ACF500; // ACF504: using guessed type int dword_ACF504; // ACF508: using guessed type int dword_ACF508; // ACF50C: using guessed type int dword_ACF50C; // ACF510: using guessed type int dword_ACF510; // ACF514: using guessed type int dword_ACF514; // ACF518: using guessed type int dword_ACF518; // ACF51C: using guessed type int dword_ACF51C; // ACF520: using guessed type int dword_ACF520; // ACF524: using guessed type int dword_ACF524; // ACF528: using guessed type int dword_ACF528; // ACF52C: using guessed type int dword_ACF52C; // ACF530: using guessed type int dword_ACF530; // ACF534: using guessed type int dword_ACF534; //----- (0058B5F0) -------------------------------------------------------- int __cdecl sub_58B5F0(int a1) { volatile LONG *v1; // eax int result; // eax volatile LONG *v3; // eax volatile LONG *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // eax switch ( a1 ) { case 0: v1 = sub_58E290("800x600", 142, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF490, (int)v1); result = dword_ACF490; break; case 1: v3 = sub_58E290("1024x768", 143, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF494, (int)v3); result = dword_ACF494; break; case 2: v4 = sub_58E290("1280x768(wide)", 144, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF498, (int)v4); result = dword_ACF498; break; case 3: v5 = sub_58E290("1280x960", 145, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF49C, (int)v5); result = dword_ACF49C; break; case 4: v6 = sub_58E290("1280x1024", 146, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A0, (int)v6); result = dword_ACF4A0; break; case 5: v7 = sub_58E290("1400x1050", 147, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A4, (int)v7); result = dword_ACF4A4; break; case 6: v8 = sub_58E290("1600x1200", 148, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A8, (int)v8); result = dword_ACF4A8; break; case 7: v9 = sub_58E290("1600x900(wide)", 149, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4AC, (int)v9); result = dword_ACF4AC; break; case 8: v10 = sub_58E290("1920x1440", 150, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B0, (int)v10); result = dword_ACF4B0; break; case 9: v11 = sub_58E290("1920x1200(wide)", 151, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B4, (int)v11); result = dword_ACF4B4; break; case 10: v12 = sub_58E290("1680x1050(wide)", 152, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B8, (int)v12); result = dword_ACF4B8; break; case 11: v13 = sub_58E290("1280x800(wide)", 153, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4BC, (int)v13); result = dword_ACF4BC; break; case 12: v14 = sub_58E290("1600x900(wide)", 154, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C0, (int)v14); result = dword_ACF4C0; break; case 13: v15 = sub_58E290("1440x900(wide)", 155, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C4, (int)v15); result = dword_ACF4C4; break; case 14: v16 = sub_58E290("1920x1080(wide)", 156, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C8, (int)v16); result = dword_ACF4C8; break; case 15: v17 = sub_58E290("2560x1440", 157, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4CC, (int)v17); result = dword_ACF4CC; break; case 16: v18 = sub_58E290("2560x1600(wide)", 158, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D0, (int)v18); result = dword_ACF4D0; break; case 17: v19 = sub_58E290("3840x2160(wide)", 159, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D4, (int)v19); result = dword_ACF4D4; break; case 18: v20 = sub_58E290("1366x768", 160, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D8, (int)v20); result = dword_ACF4D8; break; case 19: v21 = sub_58E290("3440x1440(wide)", 161, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4DC, (int)v21); result = dword_ACF4DC; break; default: result = 0; break; } return result; } // ACF490: using guessed type int dword_ACF490; // ACF494: using guessed type int dword_ACF494; // ACF498: using guessed type int dword_ACF498; // ACF49C: using guessed type int dword_ACF49C; // ACF4A0: using guessed type int dword_ACF4A0; // ACF4A4: using guessed type int dword_ACF4A4; // ACF4A8: using guessed type int dword_ACF4A8; // ACF4AC: using guessed type int dword_ACF4AC; // ACF4B0: using guessed type int dword_ACF4B0; // ACF4B4: using guessed type int dword_ACF4B4; // ACF4B8: using guessed type int dword_ACF4B8; // ACF4BC: using guessed type int dword_ACF4BC; // ACF4C0: using guessed type int dword_ACF4C0; // ACF4C4: using guessed type int dword_ACF4C4; // ACF4C8: using guessed type int dword_ACF4C8; // ACF4CC: using guessed type int dword_ACF4CC; // ACF4D0: using guessed type int dword_ACF4D0; // ACF4D4: using guessed type int dword_ACF4D4; // ACF4D8: using guessed type int dword_ACF4D8; // ACF4DC: using guessed type int dword_ACF4DC; //----- (0058BA00) -------------------------------------------------------- int __cdecl sub_58BA00(int a1) { volatile LONG *v1; // eax int result; // eax volatile LONG *v3; // eax volatile LONG *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // eax switch ( a1 ) { case 0: v1 = sub_58E290("800x600", 22, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF490, (int)v1); result = dword_ACF490; break; case 1: v3 = sub_58E290("1024x768", 23, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF494, (int)v3); result = dword_ACF494; break; case 2: v4 = sub_58E290("1280x768(wide)", 24, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF498, (int)v4); result = dword_ACF498; break; case 3: v5 = sub_58E290("1280x960", 25, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF49C, (int)v5); result = dword_ACF49C; break; case 4: v6 = sub_58E290("1280x1024", 26, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A0, (int)v6); result = dword_ACF4A0; break; case 5: v7 = sub_58E290("1400x1050", 27, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A4, (int)v7); result = dword_ACF4A4; break; case 6: v8 = sub_58E290("1600x1200", 28, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4A8, (int)v8); result = dword_ACF4A8; break; case 7: v9 = sub_58E290("1600x900(wide)", 29, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4AC, (int)v9); result = dword_ACF4AC; break; case 8: v10 = sub_58E290("1920x1440", 30, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B0, (int)v10); result = dword_ACF4B0; break; case 9: v11 = sub_58E290("1920x1200(wide)", 31, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B4, (int)v11); result = dword_ACF4B4; break; case 10: v12 = sub_58E290("1680x1050(wide)", 32, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4B8, (int)v12); result = dword_ACF4B8; break; case 11: v13 = sub_58E290("1280x800(wide)", 33, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4BC, (int)v13); result = dword_ACF4BC; break; case 12: v14 = sub_58E290("1600x900(wide)", 34, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C0, (int)v14); result = dword_ACF4C0; break; case 13: v15 = sub_58E290("1440x900(wide)", 35, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C4, (int)v15); result = dword_ACF4C4; break; case 14: v16 = sub_58E290("1920x1080(wide)", 36, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4C8, (int)v16); result = dword_ACF4C8; break; case 15: v17 = sub_58E290("2560x1440", 37, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4CC, (int)v17); result = dword_ACF4CC; break; case 16: v18 = sub_58E290("2560x1600(wide)", 38, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D0, (int)v18); result = dword_ACF4D0; break; case 17: v19 = sub_58E290("3840x2160(wide)", 39, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D4, (int)v19); result = dword_ACF4D4; break; case 18: v20 = sub_58E290("1366x768", 40, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4D8, (int)v20); result = dword_ACF4D8; break; case 19: v21 = sub_58E290("3440x1440(wide)", 41, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4DC, (int)v21); result = dword_ACF4DC; break; default: result = 0; break; } return result; } // ACF490: using guessed type int dword_ACF490; // ACF494: using guessed type int dword_ACF494; // ACF498: using guessed type int dword_ACF498; // ACF49C: using guessed type int dword_ACF49C; // ACF4A0: using guessed type int dword_ACF4A0; // ACF4A4: using guessed type int dword_ACF4A4; // ACF4A8: using guessed type int dword_ACF4A8; // ACF4AC: using guessed type int dword_ACF4AC; // ACF4B0: using guessed type int dword_ACF4B0; // ACF4B4: using guessed type int dword_ACF4B4; // ACF4B8: using guessed type int dword_ACF4B8; // ACF4BC: using guessed type int dword_ACF4BC; // ACF4C0: using guessed type int dword_ACF4C0; // ACF4C4: using guessed type int dword_ACF4C4; // ACF4C8: using guessed type int dword_ACF4C8; // ACF4CC: using guessed type int dword_ACF4CC; // ACF4D0: using guessed type int dword_ACF4D0; // ACF4D4: using guessed type int dword_ACF4D4; // ACF4D8: using guessed type int dword_ACF4D8; // ACF4DC: using guessed type int dword_ACF4DC; //----- (0058BDD0) -------------------------------------------------------- int __cdecl sub_58BDD0(int a1, LPCSTR lpString, __int16 a3) { volatile LONG *v3; // eax int result; // eax volatile LONG *v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // eax switch ( a1 ) { case 0: v3 = sub_58E290(lpString, 237, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4EC, (int)v3); strcpy(byte_ACF290, lpString); word_AB0BC0 = a3; result = dword_ACF4EC; dword_AB0BAC = 0; break; case 1: v5 = sub_58E290(lpString, 238, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4F0, (int)v5); strcpy(byte_ACF190, lpString); result = dword_ACF4F0; dword_AB0BB0 = 1; word_AB0BC4 = a3; break; case 2: v6 = sub_58E290(lpString, 239, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4F4, (int)v6); strcpy(byte_ACF090, lpString); result = dword_ACF4F4; dword_AB0BB4 = 2; word_AB0BC8 = a3; break; case 3: v7 = sub_58E290(lpString, 240, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4F8, (int)v7); strcpy(byte_ACEF90, lpString); word_AB0BCC = a3; result = dword_ACF4F8; dword_AB0BB8 = 3; break; case 4: v8 = sub_58E290(lpString, 241, 0, 0, 0, 0, 0); sub_56FF80(&dword_ACF4FC, (int)v8); strcpy(byte_ACEE90, lpString); result = dword_ACF4FC; dword_AB0BBC = 4; word_AB0BD0 = a3; break; default: result = 0; break; } return result; } // AB0BAC: using guessed type int dword_AB0BAC; // AB0BB0: using guessed type int dword_AB0BB0; // AB0BB4: using guessed type int dword_AB0BB4; // AB0BB8: using guessed type int dword_AB0BB8; // AB0BBC: using guessed type int dword_AB0BBC; // AB0BC0: using guessed type __int16 word_AB0BC0; // AB0BC4: using guessed type __int16 word_AB0BC4; // AB0BC8: using guessed type __int16 word_AB0BC8; // AB0BCC: using guessed type __int16 word_AB0BCC; // AB0BD0: using guessed type __int16 word_AB0BD0; // ACF4EC: using guessed type int dword_ACF4EC; // ACF4F0: using guessed type int dword_ACF4F0; // ACF4F4: using guessed type int dword_ACF4F4; // ACF4F8: using guessed type int dword_ACF4F8; // ACF4FC: using guessed type int dword_ACF4FC; //----- (0058BFC0) -------------------------------------------------------- int __cdecl sub_58BFC0(const char *a1) { int result; // eax int v2; // eax volatile LONG *v3; // eax int v4; // esi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // edi strcpy(byte_ACED90, a1); result = dword_ACF484; if ( !dword_ACF484 ) { v2 = sub_4522A0("stick"); if ( v2 ) v3 = sub_58E290((LPCSTR)(v2 + 33), 0, 0, 0, 0, 0, 0); else v3 = sub_58E290("Stick", 0, 0, 0, 0, 0, 0); v4 = (int)v3; v5 = dword_ACF484; if ( dword_ACF484 != v4 ) { if ( dword_ACF484 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF484; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF484 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } v5 = v4; dword_ACF484 = v4; if ( v4 ) { InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = dword_ACF484; } } *(_DWORD *)(v5 + 332) = 6; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)dword_ACF484 + 520))(byte_ACED90); *(_DWORD *)(dword_ACF484 + 336) = byte_ACED90; result = dword_ACF484; } return result; } // ACF484: using guessed type int dword_ACF484; //----- (0058C0A0) -------------------------------------------------------- int __cdecl sub_58C0A0(const char *a1) { int result; // eax int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi strcpy(byte_ACED90, a1); result = dword_ACF4E0; if ( !dword_ACF4E0 ) { v2 = dword_ACF4E0; v3 = dword_ACF4E0; v4 = dword_ACF4E0; v5 = dword_ACF4E0; v6 = dword_ACF4E0; v7 = dword_ACF4E0; v8 = sub_40C190(-1091633134); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF4E0; if ( (volatile LONG *)dword_ACF4E0 != v9 ) { if ( dword_ACF4E0 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E0; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF4E0 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF4E0 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF4E0; } } *(_DWORD *)(v10 + 332) = 7; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)dword_ACF4E0 + 520))(byte_ACED90); *(_DWORD *)(dword_ACF4E0 + 336) = byte_ACED90; result = dword_ACF4E0; } return result; } //----- (0058C170) -------------------------------------------------------- int __cdecl sub_58C170(int a1) { char *v1; // eax const CHAR *v2; // eax volatile LONG *v3; // esi int result; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi if ( a1 == 100000 ) { v2 = sub_40A910(-1513429725); } else if ( a1 == 200000 ) { v2 = sub_40A910(-551780518); } else { v1 = (char *)sub_40A910(1367448517); v2 = sub_7549E0(v1, a1); } v3 = sub_58E290(v2, 127, 0, 0, 0, 0, 0); result = dword_ACF52C; if ( (volatile LONG *)dword_ACF52C != v3 ) { if ( dword_ACF52C ) { v5 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF52C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF52C + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } result = (int)v3; dword_ACF52C = (int)v3; if ( v3 ) { InterlockedIncrement(v3 + 1); result = dword_ACF52C; } } return result; } // ACF52C: using guessed type int dword_ACF52C; //----- (0058C220) -------------------------------------------------------- int __cdecl sub_58C220(int a1) { char *v1; // eax char *v2; // eax volatile LONG *v3; // esi int result; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi v1 = (char *)sub_40A910(1617863869); v2 = sub_7549E0(v1, a1); v3 = sub_58E290(v2, 127, 0, 0, 0, 0, 0); result = dword_ACF530; if ( (volatile LONG *)dword_ACF530 != v3 ) { if ( dword_ACF530 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF530; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF530 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } result = (int)v3; dword_ACF530 = (int)v3; if ( v3 ) { InterlockedIncrement(v3 + 1); result = dword_ACF530; } } return result; } // ACF530: using guessed type int dword_ACF530; //----- (0058C420) -------------------------------------------------------- int sub_58C420() { const CHAR *v0; // eax volatile LONG *v1; // esi int result; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi v0 = sub_40A910(1178748471); v1 = sub_58E290(v0, 195, 0, 0, 0, 0, 0); result = dword_ACF50C; if ( (volatile LONG *)dword_ACF50C != v1 ) { if ( dword_ACF50C ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF50C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF50C + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = (int)v1; dword_ACF50C = (int)v1; if ( v1 ) { InterlockedIncrement(v1 + 1); result = dword_ACF50C; } } return result; } // ACF50C: using guessed type int dword_ACF50C; //----- (0058C5A0) -------------------------------------------------------- int __cdecl sub_58C5A0(char a1) { const CHAR *v1; // eax volatile LONG *v2; // esi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // edi int v6; // [esp-18h] [ebp-20h] if ( a1 == 1 ) v6 = 197; else v6 = 228; v1 = sub_40A910(1436153803); v2 = sub_58E290(v1, v6, 0, 0, 0, 0, 0); v3 = dword_ACF518; if ( (volatile LONG *)dword_ACF518 != v2 ) { if ( dword_ACF518 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF518; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF518 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v3 = (int)v2; dword_ACF518 = (int)v2; if ( v2 ) { InterlockedIncrement(v2 + 1); v3 = dword_ACF518; } } *(_DWORD *)(v3 + 332) = 1000; return dword_ACF518; } // ACF518: using guessed type int dword_ACF518; //----- (0058C640) -------------------------------------------------------- int sub_58C640() { const CHAR *v0; // eax volatile LONG *v1; // esi int result; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi v0 = sub_40A910(1718545073); v1 = sub_58E290(v0, 198, 0, 0, 0, 0, 0); result = dword_ACF51C; if ( (volatile LONG *)dword_ACF51C != v1 ) { if ( dword_ACF51C ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF51C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF51C + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = (int)v1; dword_ACF51C = (int)v1; if ( v1 ) { InterlockedIncrement(v1 + 1); result = dword_ACF51C; } } return result; } // ACF51C: using guessed type int dword_ACF51C; //----- (0058C6C0) -------------------------------------------------------- int sub_58C6C0() { const CHAR *v0; // eax volatile LONG *v1; // esi int result; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi v0 = sub_40A910(1216515021); v1 = sub_58E290(v0, 199, 0, 0, 0, 0, 0); result = dword_ACF520; if ( (volatile LONG *)dword_ACF520 != v1 ) { if ( dword_ACF520 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF520; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF520 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = (int)v1; dword_ACF520 = (int)v1; if ( v1 ) { InterlockedIncrement(v1 + 1); result = dword_ACF520; } } return result; } // ACF520: using guessed type int dword_ACF520; //----- (0058C8B0) -------------------------------------------------------- int __cdecl sub_58C8B0(const char *a1) { int result; // eax int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi strcpy(byte_ACED90, a1); result = dword_ACF4E8; if ( !dword_ACF4E8 ) { v2 = dword_ACF4E8; v3 = dword_ACF4E8; v4 = dword_ACF4E8; v5 = dword_ACF4E8; v6 = dword_ACF4E8; v7 = dword_ACF4E8; v8 = sub_40C190(-650701761); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF4E8; if ( (volatile LONG *)dword_ACF4E8 != v9 ) { if ( dword_ACF4E8 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E8; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF4E8 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF4E8 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF4E8; } } *(_DWORD *)(v10 + 332) = 1005; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)dword_ACF4E8 + 520))(byte_ACED90); *(_DWORD *)(dword_ACF4E8 + 336) = byte_ACED90; result = dword_ACF4E8; } return result; } //----- (0058C980) -------------------------------------------------------- int __cdecl sub_58C980(const char *a1) { volatile LONG *v1; // eax int v2; // ecx int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi strcpy(byte_ACED90, a1); v1 = sub_58E290(byte_ACED90, 0, 0, 0, 0, 0, 1); v2 = dword_ACF4E4; v3 = (int)v1; if ( (volatile LONG *)dword_ACF4E4 != v1 ) { if ( dword_ACF4E4 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E4; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF4E4 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v2 = v3; dword_ACF4E4 = v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); v2 = dword_ACF4E4; } } (*(void (__stdcall **)(CHAR *))(*(_DWORD *)v2 + 520))(byte_ACED90); *(_DWORD *)(dword_ACF4E4 + 336) = byte_ACED90; return dword_ACF4E4; } // ACF4E4: using guessed type int dword_ACF4E4; //----- (0058CA30) -------------------------------------------------------- int __cdecl sub_58CA30(const char *a1) { int result; // eax int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi strcpy(byte_ACED90, a1); result = dword_ACF53C; if ( !dword_ACF53C ) { v2 = dword_ACF53C; v3 = dword_ACF53C; v4 = dword_ACF53C; v5 = dword_ACF53C; v6 = dword_ACF53C; v7 = dword_ACF53C; v8 = sub_40A910(1335783554); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF53C; if ( (volatile LONG *)dword_ACF53C != v9 ) { if ( dword_ACF53C ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF53C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF53C + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF53C = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF53C; } } *(_DWORD *)(v10 + 332) = 1014; (*(void (__stdcall **)(CHAR *))(*(_DWORD *)dword_ACF53C + 520))(byte_ACED90); *(_DWORD *)(dword_ACF53C + 336) = byte_ACED90; result = dword_ACF53C; } return result; } //----- (0058CB00) -------------------------------------------------------- int __cdecl sub_58CB00(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF540; if ( !dword_ACF540 ) { v2 = dword_ACF540; v3 = dword_ACF540; v4 = dword_ACF540; v5 = dword_ACF540; v6 = dword_ACF540; v7 = dword_ACF540; v8 = sub_40A910(-1936495438); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF540; if ( (volatile LONG *)dword_ACF540 != v9 ) { if ( dword_ACF540 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF540; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF540 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF540 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF540; } } *(_DWORD *)(v10 + 332) = 1020; v1 = dword_ACF540; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF540 + 336) = a1; return dword_ACF540; } //----- (0058CBB0) -------------------------------------------------------- int __cdecl sub_58CBB0(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF544; if ( !dword_ACF544 ) { v2 = dword_ACF544; v3 = dword_ACF544; v4 = dword_ACF544; v5 = dword_ACF544; v6 = dword_ACF544; v7 = dword_ACF544; v8 = sub_40A910(-84335310); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF544; if ( (volatile LONG *)dword_ACF544 != v9 ) { if ( dword_ACF544 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF544; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF544 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF544 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF544; } } *(_DWORD *)(v10 + 332) = 1021; v1 = dword_ACF544; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF544 + 336) = a1; return dword_ACF544; } //----- (0058CC60) -------------------------------------------------------- int __cdecl sub_58CC60(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF548; if ( !dword_ACF548 ) { v2 = dword_ACF548; v3 = dword_ACF548; v4 = dword_ACF548; v5 = dword_ACF548; v6 = dword_ACF548; v7 = dword_ACF548; v8 = sub_40A910(-84862166); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF548; if ( (volatile LONG *)dword_ACF548 != v9 ) { if ( dword_ACF548 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF548; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF548 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF548 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF548; } } *(_DWORD *)(v10 + 332) = 1022; v1 = dword_ACF548; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF548 + 336) = a1; return dword_ACF548; } //----- (0058CD10) -------------------------------------------------------- int __cdecl sub_58CD10(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF54C; if ( !dword_ACF54C ) { v2 = dword_ACF54C; v3 = dword_ACF54C; v4 = dword_ACF54C; v5 = dword_ACF54C; v6 = dword_ACF54C; v7 = dword_ACF54C; v8 = sub_40A910(132437798); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF54C; if ( (volatile LONG *)dword_ACF54C != v9 ) { if ( dword_ACF54C ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF54C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF54C + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF54C = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF54C; } } *(_DWORD *)(v10 + 332) = 1023; v1 = dword_ACF54C; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF54C + 336) = a1; return dword_ACF54C; } //----- (0058CDC0) -------------------------------------------------------- int __cdecl sub_58CDC0(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF550; if ( !dword_ACF550 ) { v2 = dword_ACF550; v3 = dword_ACF550; v4 = dword_ACF550; v5 = dword_ACF550; v6 = dword_ACF550; v7 = dword_ACF550; v8 = sub_40A910(1412984441); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF550; if ( (volatile LONG *)dword_ACF550 != v9 ) { if ( dword_ACF550 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF550; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF550 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF550 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF550; } } *(_DWORD *)(v10 + 332) = 1024; v1 = dword_ACF550; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF550 + 336) = a1; return dword_ACF550; } //----- (0058CE70) -------------------------------------------------------- int __cdecl sub_58CE70(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF554; if ( !dword_ACF554 ) { v2 = dword_ACF554; v3 = dword_ACF554; v4 = dword_ACF554; v5 = dword_ACF554; v6 = dword_ACF554; v7 = dword_ACF554; v8 = sub_40A910(1682318900); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF554; if ( (volatile LONG *)dword_ACF554 != v9 ) { if ( dword_ACF554 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF554; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF554 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF554 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF554; } } *(_DWORD *)(v10 + 332) = 1025; v1 = dword_ACF554; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF554 + 336) = a1; return dword_ACF554; } //----- (0058CF20) -------------------------------------------------------- int __cdecl sub_58CF20(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF558; if ( !dword_ACF558 ) { v2 = dword_ACF558; v3 = dword_ACF558; v4 = dword_ACF558; v5 = dword_ACF558; v6 = dword_ACF558; v7 = dword_ACF558; v8 = sub_40A910(-1585615406); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF558; if ( (volatile LONG *)dword_ACF558 != v9 ) { if ( dword_ACF558 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF558; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF558 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF558 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF558; } } *(_DWORD *)(v10 + 332) = 1026; v1 = dword_ACF558; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF558 + 336) = a1; return dword_ACF558; } //----- (0058CFD0) -------------------------------------------------------- int __cdecl sub_58CFD0(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF55C; if ( !dword_ACF55C ) { v2 = dword_ACF55C; v3 = dword_ACF55C; v4 = dword_ACF55C; v5 = dword_ACF55C; v6 = dword_ACF55C; v7 = dword_ACF55C; v8 = sub_40A910(53418778); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF55C; if ( (volatile LONG *)dword_ACF55C != v9 ) { if ( dword_ACF55C ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF55C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF55C + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF55C = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF55C; } } *(_DWORD *)(v10 + 332) = 1027; v1 = dword_ACF55C; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF55C + 336) = a1; return dword_ACF55C; } //----- (0058D080) -------------------------------------------------------- int sub_58D080() { int result; // eax int v1; // ST18_4 int v2; // ST14_4 int v3; // ST10_4 int v4; // ST0C_4 int v5; // ST08_4 const CHAR *v6; // eax volatile LONG *v7; // esi int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // edi result = dword_ACF480; if ( !dword_ACF480 ) { v1 = dword_ACF480; v2 = dword_ACF480; v3 = dword_ACF480; v4 = dword_ACF480; v5 = dword_ACF480; v6 = sub_40A910(273357871); v7 = sub_58E290(v6, 126, v5, v4, v3, v2, v1); v8 = dword_ACF480; if ( (volatile LONG *)dword_ACF480 != v7 ) { if ( dword_ACF480 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF480; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF480 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v8 = (int)v7; dword_ACF480 = (int)v7; if ( v7 ) { InterlockedIncrement(v7 + 1); v8 = dword_ACF480; } } *(_DWORD *)(v8 + 332) = 1031; result = dword_ACF480; } return result; } //----- (0058D110) -------------------------------------------------------- int __cdecl sub_58D110(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF560; if ( !dword_ACF560 ) { v2 = dword_ACF560; v3 = dword_ACF560; v4 = dword_ACF560; v5 = dword_ACF560; v6 = dword_ACF560; v7 = dword_ACF560; v8 = sub_40A910(-314213020); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF560; if ( (volatile LONG *)dword_ACF560 != v9 ) { if ( dword_ACF560 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF560; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF560 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF560 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF560; } } *(_DWORD *)(v10 + 332) = 1034; v1 = dword_ACF560; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF560 + 336) = a1; return dword_ACF560; } //----- (0058D1C0) -------------------------------------------------------- int __cdecl sub_58D1C0(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF564; if ( !dword_ACF564 ) { v2 = dword_ACF564; v3 = dword_ACF564; v4 = dword_ACF564; v5 = dword_ACF564; v6 = dword_ACF564; v7 = dword_ACF564; v8 = sub_40C190(458241676); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF564; if ( (volatile LONG *)dword_ACF564 != v9 ) { if ( dword_ACF564 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF564; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF564 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF564 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF564; } } *(_DWORD *)(v10 + 332) = 1035; v1 = dword_ACF564; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF564 + 336) = a1; return dword_ACF564; } //----- (0058D270) -------------------------------------------------------- int __cdecl sub_58D270(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF568; if ( !dword_ACF568 ) { v2 = dword_ACF568; v3 = dword_ACF568; v4 = dword_ACF568; v5 = dword_ACF568; v6 = dword_ACF568; v7 = dword_ACF568; v8 = sub_40A910(574654059); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF568; if ( (volatile LONG *)dword_ACF568 != v9 ) { if ( dword_ACF568 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF568; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF568 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF568 = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF568; } } *(_DWORD *)(v10 + 332) = 1036; v1 = dword_ACF568; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF568 + 336) = a1; return dword_ACF568; } //----- (0058D320) -------------------------------------------------------- int __cdecl sub_58D320(int a1) { int v1; // ecx int v2; // ST18_4 int v3; // ST14_4 int v4; // ST10_4 int v5; // ST0C_4 int v6; // ST08_4 int v7; // ST04_4 const CHAR *v8; // eax volatile LONG *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi v1 = dword_ACF56C; if ( !dword_ACF56C ) { v2 = dword_ACF56C; v3 = dword_ACF56C; v4 = dword_ACF56C; v5 = dword_ACF56C; v6 = dword_ACF56C; v7 = dword_ACF56C; v8 = sub_40A910(-1818915935); v9 = sub_58E290(v8, v7, v6, v5, v4, v3, v2); v10 = dword_ACF56C; if ( (volatile LONG *)dword_ACF56C != v9 ) { if ( dword_ACF56C ) { v11 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF56C; if ( !InterlockedDecrement((volatile LONG *)(dword_ACF56C + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v10 = (int)v9; dword_ACF56C = (int)v9; if ( v9 ) { InterlockedIncrement(v9 + 1); v10 = dword_ACF56C; } } *(_DWORD *)(v10 + 332) = 1037; v1 = dword_ACF56C; } (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 520))(a1); *(_DWORD *)(dword_ACF56C + 336) = a1; return dword_ACF56C; } //----- (0058D580) -------------------------------------------------------- int __thiscall sub_58D580(void **this, void *a2, void *a3) { void **v3; // esi int result; // eax v3 = this; operator delete(this[82]); v3[81] = a2; v3[82] = a3; return result; } //----- (0058D5B0) -------------------------------------------------------- int __thiscall sub_58D5B0(void *this, int a2, int a3) { void *v3; // esi v3 = this; (*(void (__thiscall **)(void *, int))(*(_DWORD *)this + 468))(this, a2); (*(void (__thiscall **)(void *, int))(*(_DWORD *)v3 + 472))(v3, a3); (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 476))(v3); return (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 480))(v3); } //----- (0058D600) -------------------------------------------------------- int __thiscall sub_58D600(void *this, _DWORD *a2, int *a3) { void *v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*(_DWORD *)this + 144))(); result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); *a3 = result; return result; } //----- (0058D630) -------------------------------------------------------- int __thiscall sub_58D630(_DWORD **this, int a2) { int result; // eax if ( !a2 ) return (*(int (__stdcall **)(signed int, signed int, signed int, signed int))(*this[85] + 464))(255, 255, 255, 255); if ( a2 == 1 ) return (*(int (__stdcall **)(_DWORD, signed int, signed int, signed int))(*this[85] + 464))(0, 255, 204, 255); result = a2 - 2; if ( a2 == 2 ) result = (*(int (__stdcall **)(signed int, signed int, _DWORD, signed int))(*this[85] + 464))(54, 255, 0, 255); return result; } //----- (0058D6B0) -------------------------------------------------------- int __thiscall sub_58D6B0(void *this, int a2, int a3) { void *v3; // esi v3 = this; (*(void (__thiscall **)(void *, int))(*(_DWORD *)this + 468))(this, a2); (*(void (__thiscall **)(void *, int))(*(_DWORD *)v3 + 472))(v3, a3); (*(void (__thiscall **)(void *))(*(_DWORD *)v3 + 476))(v3); return (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 480))(v3); } //----- (0058D700) -------------------------------------------------------- int __thiscall sub_58D700(void *this, _DWORD *a2, int *a3) { void *v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*(_DWORD *)this + 144))(); result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 148))(v3); *a3 = result; return result; } //----- (0058D730) -------------------------------------------------------- int __thiscall sub_58D730(void *this, int a2, int a3) { int result; // eax if ( a2 == 100 ) result = (*(int (**)(void))(*(_DWORD *)this + 528))(); return result; } //----- (0058D750) -------------------------------------------------------- char __thiscall sub_58D750(volatile LONG **this, void *a2, int a3, int a4, int a5) { volatile LONG **v5; // esi char result; // al v5 = this; result = sub_45C530(this, a2, a3, a4, 0, 0, 0, a5); if ( result ) { (*((void (__thiscall **)(volatile LONG **, int, int))*v5 + 135))( v5, 2 * (_DWORD)v5[89] + 128, 2 * (_DWORD)v5[88] + 12); result = 1; } return result; } //----- (0058D7B0) -------------------------------------------------------- int __thiscall sub_58D7B0(_DWORD **this, int a2, int a3) { int result; // eax if ( this[74] ) result = (*(int (__stdcall **)(int, int, _DWORD))(*this[74] + 56))(a2, a3, 0); return result; } //----- (0058D7F0) -------------------------------------------------------- char __thiscall sub_58D7F0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, char a9) { int v9; // edi int v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // esi char result; // al char v14; // [esp+2Fh] [ebp+23h] v9 = (int)this; v14 = sub_8FE550(this, 5, 5, a2, a3, a5, a6, a7, a8); v10 = sub_421050(a9 != 0); v11 = sub_8F4A20(5, 5, a2, a3, v10, v9, 0, 0); v12 = v11; if ( !v11 ) return 0; (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v12 + 468))(v12, &dword_AA8C68); (*(void (__thiscall **)(volatile LONG *, int))(*v12 + 472))(v12, a4); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); result = v14; *(_DWORD *)(v9 + 340) = v12; return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (0058D8B0) -------------------------------------------------------- int __thiscall sub_58D8B0(_DWORD *this, int a2, int a3, int a4) { int result; // eax if ( a2 == 16 ) { result = a3; if ( this[25] == *(_DWORD *)a3 ) *(_BYTE *)(this[27] + 380) = *(_BYTE *)(a3 + 4); } return result; } //----- (0058D8E0) -------------------------------------------------------- char __thiscall sub_58D8E0(char *this, int a2) { char *v2; // ebx signed int v3; // edi int v4; // esi v2 = this; v3 = 0; v4 = (int)(this + 420); while ( 1 ) { if ( !*(_DWORD *)v4 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 260))(v2) == 1 && *(_DWORD *)(*(_DWORD *)v4 + 332) == a2 ) { break; } ++v3; v4 += 4; if ( v3 >= 20 ) return 0; } return 1; } //----- (0058D930) -------------------------------------------------------- int __thiscall sub_58D930(_DWORD *this, unsigned int a2) { unsigned int v2; // edi _DWORD *v3; // esi int v4; // ebx unsigned int v5; // edi int v6; // ebx int result; // eax unsigned int v8; // [esp+Ch] [ebp-14h] unsigned int v9; // [esp+10h] [ebp-10h] int v10; // [esp+14h] [ebp-Ch] unsigned int v11; // [esp+18h] [ebp-8h] unsigned int v12; // [esp+1Ch] [ebp-4h] v2 = 0; v3 = this; v12 = 0; v11 = 0; v10 = 0; if ( this[104] ) { v4 = (int)(this + 105); do { if ( *(_DWORD *)v4 ) { (*(void (__stdcall **)(unsigned int *, unsigned int *))(**(_DWORD **)v4 + 560))(&v9, &v8); if ( v9 > v12 ) v12 = v9; if ( v8 > v11 ) v11 = v8; v10 += v8 + 4; } ++v2; v4 += 4; } while ( v2 < v3[104] ); } v5 = 0; if ( v3[104] ) { v6 = (int)(v3 + 105); do { if ( *(_DWORD *)v6 ) (*(void (__stdcall **)(unsigned int, unsigned int))(**(_DWORD **)v6 + 564))(v12, v11); ++v5; v6 += 4; } while ( v5 < v3[104] ); } if ( v12 < a2 ) v12 = a2; result = v12; if ( v12 ) result = (*(int (__thiscall **)(_DWORD *, unsigned int, int))(*v3 + 540))( v3, v12 + 2 * v3[89] + 10, v10 + 2 * v3[88] + 10); return result; } //----- (0058DA10) -------------------------------------------------------- char __thiscall sub_58DA10(_DWORD *this) { _DWORD *v1; // edi volatile LONG *v2; // eax int v3; // eax int v4; // ebx bool v5; // zf int v6; // ecx int v7; // edx int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] char v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) sub_8F2C80(v2, v1[74], v1[75]); v3 = v1[81]; v9 = v3; if ( v3 ) { v4 = v1[82]; if ( v1[59] ) { (*(void (__stdcall **)(int, int, _DWORD *))(*(_DWORD *)v1[59] + 4))(v3, v4, v1 + 58); v3 = v9; if ( v1[59] ) { (*(void (__stdcall **)(int, int, _DWORD *))(*(_DWORD *)v1[59] + 20))(v9, v4, v1 + 58); v3 = v9; } } (*(void (__thiscall **)(_DWORD *, int, int, _DWORD *))(v1[58] + 20))(v1 + 58, v3, v4, v1 + 58); } v5 = v1[59] == 0; v6 = v1[83]; v7 = v1[84]; v11 = 0; v10 = v6; v12 = v7; if ( !v5 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 4))(15, &v10, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 20))(15, &v10, v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(v1[58] + 20))(v1 + 58, 15, &v10, v1 + 58); return sub_8FA190(&unk_BA6B10, 0); } //----- (0058DB20) -------------------------------------------------------- char __thiscall sub_58DB20(_DWORD *this, int a2, int a3, LPCSTR lpString, int a5, int a6, int a7, int a8) { _DWORD *v8; // ebx _DWORD *v9; // eax int v11; // esi char *v12; // eax volatile LONG **v13; // edi volatile LONG *v14; // ecx int v15; // esi int v16; // eax int v17; // eax volatile LONG *v18; // esi volatile LONG *v19; // eax LONG v20; // [esp+14h] [ebp-28h] struct tagSIZE psizl; // [esp+18h] [ebp-24h] char v22; // [esp+20h] [ebp-1Ch] char v23; // [esp+24h] [ebp-18h] void (__stdcall ***v24)(signed int); // [esp+28h] [ebp-14h] int v25; // [esp+2Ch] [ebp-10h] int v26; // [esp+38h] [ebp-4h] char v27; // [esp+5Fh] [ebp+23h] v8 = this; v9 = (_DWORD *)sub_421050(0); if ( !v9 ) return 0; sub_4593C0(v9, lpString, strlen(lpString), &psizl); v25 = 0; v11 = dword_BA6BA0; v26 = 0; if ( !byte_ACAD5C ) sub_420410(); v12 = (char *)sub_401410(byte_ACAB50, "Game\\Option_Graphic.nif"); sub_8F66B0(v12, (int)&v25, v11); if ( !v25 ) return 0; v13 = sub_8FB140(v25, (int)"ChrOlineChNor", (int)&v22, (int)&v23, 0); sub_8FB650(v13, v25, (int)"ChrOlineChClick"); v14 = v13[9]; v15 = *(_DWORD *)(*v14 + 20); v20 = *(_DWORD *)(*v14 + 24); v26 = -1; if ( v25 ) { v24 = (void (__stdcall ***)(signed int))v25; if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v24 ) (**v24)(1); } } v16 = psizl.cy; if ( psizl.cy <= v20 ) v16 = v20; v27 = sub_8FE550(v8, 5, 5, v15 + psizl.cx, v16, (_DWORD *)a5, a6, a7, a8); v17 = sub_421050(0); v18 = sub_8F4A20(v15 + 5, 5, psizl.cx, psizl.cy, v17, (int)v8, 0, 0); if ( !v18 ) return 0; (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 4); (*(void (__thiscall **)(volatile LONG *, int *))(*v18 + 468))(v18, &dword_AA8C68); (*(void (__thiscall **)(volatile LONG *, LPCSTR))(*v18 + 472))(v18, lpString); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v19 = sub_465940(5, 5, (int)v13, (int)v8, 100, 0); v8[85] = v19; return v19 != 0 ? v27 : 0; } // AA8C68: using guessed type int dword_AA8C68; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0058DD10) -------------------------------------------------------- int __thiscall sub_58DD10(int *this) { int *v1; // esi volatile LONG *v2; // eax char v3; // al int v4; // ecx int v5; // edx _DWORD *v6; // esi bool v7; // zf int v9; // [esp+4h] [ebp-10h] char v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) sub_8F2C80(v2, v1[74], v1[75]); *(_BYTE *)(v1[85] + 380) = *(_BYTE *)(v1[85] + 380) == 0; v3 = *(_BYTE *)(v1[85] + 380); v4 = v1[83]; v5 = v1[84]; v6 = v1 + 58; v7 = v6[1] == 0; v10 = v3; v9 = v4; v11 = v5; if ( !v7 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v6[1] + 4))(15, &v9, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v6[1] + 20))(15, &v9, v6); } return (*(int (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*v6 + 20))(v6, 15, &v9, v6); } //----- (0058DDD0) -------------------------------------------------------- void __thiscall sub_58DDD0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax bool v3; // zf int v4; // eax _DWORD *v5; // edi int v6; // ebx int v7; // ebx void (__thiscall *v8)(_DWORD *, int *, int *); // eax _DWORD *v9; // ST04_4 int v10; // eax int v11; // [esp+8h] [ebp-18h] int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] char v14; // [esp+14h] [ebp-Ch] v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) sub_8F2C80(v2, v1[74], v1[75]); v3 = v1[59] == 0; v4 = v1[83]; v14 = 0; v13 = v4; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 4))(15, &v13, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v1[59] + 20))(15, &v13, v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(v1[58] + 20))(v1 + 58, 15, &v13, v1 + 58); if ( v1[86] ) { v5 = (_DWORD *)sub_402BF0(v1); if ( v5 ) { v6 = (*(int (__thiscall **)(_DWORD *))(*v5 + 144))(v5); v7 = v6 - (*(int (__thiscall **)(_DWORD *))(*v1 + 164))(v1); v8 = *(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 220); v12 = v7; v11 = 0; v8(v1, &v12, &v11); (*(void (__stdcall **)(int, int))(*(_DWORD *)v1[86] + 308))(v12, v11); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[86] + 516))(v5[74]); v9 = (_DWORD *)v1[86]; v10 = sub_402BF0(v1); sub_8FA050(&unk_BA6B10, v10, v9); } } } //----- (0058DF10) -------------------------------------------------------- LONG __thiscall sub_58DF10(_DWORD *this) { _DWORD *v1; // ebx int *v2; // edi int v3; // esi signed int v5; // [esp+14h] [ebp-10h] v1 = this; *this = &PopupMenuWin::`vftable'; this[58] = &PopupMenuWin::`vftable'; v2 = this + 105; v5 = 20; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; --v5; } while ( v5 ); `eh vector destructor iterator'(v1 + 105, 4u, 20, sub_410C00); return sub_45B500(v1); } // 9D694C: using guessed type void *PopupMenuWin::`vftable'; // 9D696C: using guessed type void *PopupMenuWin::`vftable'; //----- (0058DFD0) -------------------------------------------------------- unsigned int __thiscall sub_58DFD0(_DWORD *this) { unsigned int result; // eax _DWORD *v2; // ebx int *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi int v5; // esi int v6; // [esp+4h] [ebp-8h] unsigned int v7; // [esp+8h] [ebp-4h] result = 0; v2 = this; v7 = 0; if ( this[104] ) { v3 = this + 105; do { sub_455710(v2, &v6, *v3); if ( v6 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v5 = *v3; if ( *v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } *v3 = 0; } result = v7 + 1; ++v3; v7 = result; } while ( result < v2[104] ); v2[104] = 0; } else { this[104] = 0; } return result; } //----- (0058E080) -------------------------------------------------------- char __userpurge sub_58E080@(_DWORD *a1@, int a2@, int a3) { _DWORD *v3; // esi int v4; // edi int v5; // eax int v6; // ebx int v7; // ST04_4 int v8; // ecx int v9; // ebx int v11; // [esp-8h] [ebp-Ch] int *v12; // [esp+Ch] [ebp+8h] v3 = a1; if ( a1[104] >= 0x14u ) return 0; v11 = a2; v4 = a3; sub_442AC0(a1, a3); v5 = v3[104]; if ( v5 ) { v6 = (*(int (__stdcall **)(int))(*(_DWORD *)v3[v5 + 104] + 168))(v11); v7 = v6 + (*(int (**)(void))(*(_DWORD *)v3[v3[104] + 104] + 148))() + 4; } else { (*(void (__thiscall **)(int, signed int, int))(*(_DWORD *)a3 + 172))(a3, 5, v11); } (*(void (__thiscall **)(int))(*(_DWORD *)a3 + 176))(a3); v8 = v3[104]; v9 = v3[v8 + 105]; v12 = &v3[v8 + 105]; if ( v9 != v4 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } *v12 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); } ++v3[104]; return 1; } // 58E080: could not find valid save-restore pair for edi //----- (0058E160) -------------------------------------------------------- _DWORD *__thiscall sub_58E160(_BYTE *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi signed int v5; // [esp+14h] [ebp-10h] v1 = this; sub_45B4A0(this); *v1 = &PopupMenuWin::`vftable'; v1[58] = &PopupMenuWin::`vftable'; `eh vector constructor iterator'( v1 + 105, 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v2 = v1 + 105; v5 = 20; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; --v5; } while ( v5 ); v1[104] = 0; v1[125] = 0; return v1; } // 9D694C: using guessed type void *PopupMenuWin::`vftable'; // 9D696C: using guessed type void *PopupMenuWin::`vftable'; //----- (0058E230) -------------------------------------------------------- char __thiscall sub_58E230(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (0058E290) -------------------------------------------------------- volatile LONG *__cdecl sub_58E290(LPCSTR lpString, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // esi void (__thiscall ***v10)(_DWORD, signed int); // edi struct tagSIZE psizl; // [esp+10h] [ebp-18h] void *v13; // [esp+18h] [ebp-10h] int v14; // [esp+24h] [ebp-4h] if ( (_BYTE)a7 ) v7 = (_DWORD *)sub_421050(1); else v7 = (_DWORD *)sub_421050(0); if ( !v7 ) return 0; sub_4593C0(v7, lpString, strlen(lpString), &psizl); v8 = (volatile LONG *)operator new(0x158u); v9 = v8; v13 = (void *)v8; v14 = 0; if ( v8 ) { sub_8FE000(v8); *((_DWORD *)v9 + 81) = 0; *((_DWORD *)v9 + 82) = 0; *((_DWORD *)v9 + 83) = 0; *((_DWORD *)v9 + 84) = 0; *v9 = (volatile LONG)&PopupMenuText::`vftable'; *((_DWORD *)v9 + 58) = &PopupMenuText::`vftable'; } else { v9 = 0; } v13 = (void *)v9; if ( v9 ) InterlockedIncrement(v9 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v9); if ( !(*(unsigned __int8 (__thiscall **)(volatile LONG *, LONG, LONG, LPCSTR, int, int, int, int, int))(*v9 + 568))( v9, psizl.cx, psizl.cy, lpString, a4, a2, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *, int))(*v9 + 520))(v9, a3); sub_403A70(&unk_BA6B10, &a7, v9); if ( a7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))a7; if ( !InterlockedDecrement((volatile LONG *)(a7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v14 = -1; if ( !InterlockedDecrement(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); return 0; } (*(void (__thiscall **)(volatile LONG *))(*v9 + 356))(v9); v14 = -1; if ( !InterlockedDecrement(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); return v9; } // 9D6490: using guessed type void *PopupMenuText::`vftable'; // 9D64AC: using guessed type void *PopupMenuText::`vftable'; //----- (0058E450) -------------------------------------------------------- int __cdecl sub_58E450(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x158u); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_8FE000(v6); *(_DWORD *)(v7 + 324) = 0; *(_DWORD *)(v7 + 328) = 0; *(_DWORD *)(v7 + 332) = 0; *(_DWORD *)(v7 + 336) = 0; *(_DWORD *)v7 = &PopupMenuTextCheck::`vftable'; *(_DWORD *)(v7 + 232) = &PopupMenuTextCheck::`vftable'; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD, _DWORD, int, int, int, int, int))(*(_DWORD *)v7 + 568))( v7, 0, 0, a1, a4, a2, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 520))(v7, a3); sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9D66EC: using guessed type void *PopupMenuTextCheck::`vftable'; // 9D670C: using guessed type void *PopupMenuTextCheck::`vftable'; //----- (0058E5D0) -------------------------------------------------------- volatile LONG *__cdecl sub_58E5D0(int a1, int a2, int a3, int a4) { _BYTE *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1F8u); v8 = v4; v9 = 0; if ( v4 ) v5 = sub_58E160(v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 548))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (0058E710) -------------------------------------------------------- int __cdecl sub_58E710(LPCSTR lpString, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // ecx _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi struct tagSIZE psizl; // [esp+10h] [ebp-1Ch] int v12; // [esp+18h] [ebp-14h] void *v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+28h] [ebp-4h] v6 = (_DWORD *)sub_421050(0); if ( !v6 ) return 0; sub_4593C0(v6, lpString, strlen(lpString), &psizl); v7 = operator new(0x15Cu); v8 = (int)v7; v13 = v7; v14 = 0; if ( v7 ) { sub_8FE000(v7); *(_DWORD *)(v8 + 324) = 0; *(_DWORD *)(v8 + 328) = 0; *(_DWORD *)(v8 + 332) = 0; *(_DWORD *)(v8 + 336) = 0; *(_DWORD *)v8 = &PopupMenuSubMenu::`vftable'; *(_DWORD *)(v8 + 232) = &PopupMenuSubMenu::`vftable'; *(_DWORD *)(v8 + 344) = 0; } else { v8 = 0; } v12 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v14 = 1; sub_403790(&unk_BA6B10, v8); if ( !(*(unsigned __int8 (__thiscall **)(int, LONG, LONG, LPCSTR, int, int, int, int, _DWORD))(*(_DWORD *)v8 + 568))( v8, psizl.cx, psizl.cy, lpString, a4, a2, a5, a6, 0) ) { (*(void (__thiscall **)(int, int))(*(_DWORD *)v8 + 520))(v8, a3); sub_403A70(&unk_BA6B10, &v13, (_DWORD *)v8); if ( v13 ) { v9 = (void (__thiscall ***)(void *, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)v13 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v14 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return 0; } (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v14 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return v8; } // 9D6B98: using guessed type void *PopupMenuSubMenu::`vftable'; // 9D6BB4: using guessed type void *PopupMenuSubMenu::`vftable'; //----- (0058E8F0) -------------------------------------------------------- _DWORD *__thiscall sub_58E8F0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 82); *(_DWORD *)this = &PopupMenu::`vftable'; *((_DWORD *)this + 58) = &PopupMenu::`vftable'; operator delete(v3); sub_8FE0C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D6238: using guessed type void *PopupMenu::`vftable'; // 9D6254: using guessed type void *PopupMenu::`vftable'; //----- (0058E940) -------------------------------------------------------- LONG __thiscall sub_58E940(_DWORD *this) { _DWORD *v1; // edi int v2; // esi void *v3; // ST04_4 v1 = this; v2 = this[86]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = (void *)v1[82]; *v1 = &PopupMenu::`vftable'; v1[58] = &PopupMenu::`vftable'; operator delete(v3); return sub_8FE0C0(v1); } // 9D6238: using guessed type void *PopupMenu::`vftable'; // 9D6254: using guessed type void *PopupMenu::`vftable'; //----- (0058E9E0) -------------------------------------------------------- void *__thiscall sub_58E9E0(void *this, char a2) { void *v2; // esi v2 = this; sub_58DF10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0058EA10) -------------------------------------------------------- void *__thiscall sub_58EA10(void *this, char a2) { void *v2; // esi v2 = this; sub_58E940(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0058EAF0) -------------------------------------------------------- int __thiscall sub_58EAF0(float *this, float a2) { float *v2; // edi unsigned int v3; // esi char *v4; // eax int v5; // ebx char *v6; // eax int result; // eax _DWORD *v8; // edi int (__thiscall *v9)(_DWORD *, int *); // edx _DWORD *v10; // ecx _DWORD *v11; // edi int v12; // [esp+10h] [ebp+8h] v2 = this; if ( sub_8D0630(this + 88, a2) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); --dword_ACF570; } (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 86) + 468))(&dword_AA8C68); v3 = dword_ACF570 / 0x3Cu / 0x3C; v12 = **((_DWORD **)v2 + 86); v4 = sub_7549E0("%02d:%02d:%02d", v3 % 0x3C, dword_ACF570 / 0x3Cu % 0x3C, dword_ACF570 % 0x3Cu); (*(void (__thiscall **)(_DWORD *, char *))(v12 + 472))(*((_DWORD **)v2 + 86), v4); v5 = **((_DWORD **)v2 + 87); v6 = sub_7549E0("%02d", v3 % 0x5A0); (*(void (__thiscall **)(_DWORD *, char *))(v5 + 472))(*((_DWORD **)v2 + 87), v6); result = dword_ACF570; if ( (unsigned int)dword_ACF570 >= 0x3C ) { if ( (unsigned int)dword_ACF570 >= 0x12C ) goto LABEL_9; v11 = (_DWORD *)*((_DWORD *)v2 + 86); v9 = *(int (__thiscall **)(_DWORD *, int *))(*v11 + 468); v10 = v11; } else { v8 = (_DWORD *)*((_DWORD *)v2 + 86); v9 = *(int (__thiscall **)(_DWORD *, int *))(*v8 + 468); v10 = v8; if ( !(dword_ACF570 & 1) ) { result = v9(v8, &dword_AA8C68); goto LABEL_9; } } result = v9(v10, &dword_AA8C88); LABEL_9: if ( dword_ACF570 == 60 ) result = sub_6BA650(&dword_AB6520, 25); return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACF570: using guessed type int dword_ACF570; //----- (0058EC50) -------------------------------------------------------- char __thiscall sub_58EC50(float *this, int a2) { float *v2; // esi char result; // al v2 = this; dword_ACF570 = a2; result = sub_8D06A0(this + 88, flt_ACCFCC); v2[93] = 1.0; return result; } // ACCFCC: using guessed type float flt_ACCFCC; // ACF570: using guessed type int dword_ACF570; //----- (0058EC80) -------------------------------------------------------- char __thiscall sub_58EC80(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // eax volatile LONG **v11; // edi volatile LONG *v12; // eax volatile LONG *v13; // ecx int v14; // edi int v15; // ebx int v16; // eax volatile LONG *v17; // eax int v18; // edi int v19; // eax int v20; // eax volatile LONG *v21; // eax int v22; // edi int v23; // eax volatile LONG *v24; // edi int v25; // eax int v26; // [esp+3Ch] [ebp-20h] int v27; // [esp+40h] [ebp-1Ch] int v28; // [esp+44h] [ebp-18h] int v29; // [esp+48h] [ebp-14h] int v30; // [esp+4Ch] [ebp-10h] int v31; // [esp+58h] [ebp-4h] v2 = (int)this; v30 = 0; v31 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( !v30 || InterlockedDecrement((volatile LONG *)(v30 + 4)) ) return 0; v5 = v30 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\PrisonTime.nif"); sub_8F66B0(v8, (int)&v30, v7); if ( !v30 ) return 0; v9 = sub_8FB140(v30, (int)"Frame", (int)&v28, (int)&v29, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"PrisonTimeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( !v30 || InterlockedDecrement((volatile LONG *)(v30 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = sub_8FB140(v30, (int)"Time", (int)&v28, (int)&v29, v3); v11 = v10; v12 = sub_8F3EB0(v28, v29, (int)v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = v11[9]; v14 = *(_DWORD *)(*v13 + 24); v15 = *(_DWORD *)(*v13 + 20); v16 = sub_421050(0); v17 = sub_8F4A20(v28, v29 + 2, v15, v14, v16, v2, 0, 0); *(_DWORD *)(v2 + 344) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); v18 = **(_DWORD **)(v2 + 344); v19 = sub_421050(6); (*(void (__thiscall **)(_DWORD, int))(v18 + 452))(*(_DWORD *)(v2 + 344), v19); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("00:00:00"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); if ( !sub_8F71E0(v30, (int)"Day", &v28, &v29, &v26, &v27) ) { v31 = -1; sub_410C00(&v30); return 0; } v20 = sub_421050(0); v21 = sub_8F4A20(v28, v29 + 2, v26, v27, v20, v2, 0, 0); *(_DWORD *)(v2 + 348) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = **(_DWORD **)(v2 + 348); v23 = sub_421050(2); (*(void (__thiscall **)(_DWORD, int))(v22 + 452))(*(_DWORD *)(v2 + 348), v23); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 348) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.0); v24 = *(volatile LONG **)v2; v25 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 164))(v2, 160); (*((void (__thiscall **)(int, int))v24 + 77))(v2, v25); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 520))(v2, 1); v31 = -1; sub_410C00(&v30); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0058EFA0) -------------------------------------------------------- int __cdecl sub_58EFA0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x17Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &PrisonTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &PrisonTimeWin::`vftable'; sub_8D0610((_BYTE *)(v2 + 352)); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D6E58: using guessed type void *PrisonTimeWin::`vftable'; // 9D6E74: using guessed type void *PrisonTimeWin::`vftable'; //----- (0058F0F0) -------------------------------------------------------- void *__thiscall sub_58F0F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PrisonTimeWin::`vftable'; *((_DWORD *)this + 58) = &PrisonTimeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D6E58: using guessed type void *PrisonTimeWin::`vftable'; // 9D6E74: using guessed type void *PrisonTimeWin::`vftable'; //----- (0058F130) -------------------------------------------------------- int __thiscall sub_58F130(void **this) { int v1; // esi v1 = (int)this; sub_5D6D00(this); *(_DWORD *)v1 = &PrivateStoreInvWin::`vftable'; *(_DWORD *)(v1 + 232) = &PrivateStoreInvWin::`vftable'; *(_DWORD *)(v1 + 448) = -1; *(_DWORD *)(v1 + 452) = 0; *(_DWORD *)(v1 + 464) = 0; *(_DWORD *)(v1 + 468) = 0; sub_5D3170(v1, 1); *(_WORD *)(v1 + 472) = 0; return v1; } // 9D7348: using guessed type void *PrivateStoreInvWin::`vftable'; // 9D7364: using guessed type void *PrivateStoreInvWin::`vftable'; //----- (0058F1C0) -------------------------------------------------------- char __thiscall sub_58F1C0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (0058F210) -------------------------------------------------------- int __thiscall sub_58F210(_DWORD *this) { int v1; // esi int result; // eax _DWORD **v3; // ecx v1 = (int)this; result = sub_5D5470(this); if ( result ) { v3 = *(_DWORD ***)(v1 + 272); if ( v3 ) { if ( dword_AB0C84 == 2 || dword_AB0C84 == 3 ) { sub_548830(v3, result, *(_QWORD *)(v1 + 464), *(unsigned __int16 *)(v1 + 472), 0); result = sub_8F2F90(v1); } else { sub_548770(v3, result, *(_QWORD *)(v1 + 464), 0); result = sub_8F2F90(v1); } } } return result; } // AB0C84: using guessed type int dword_AB0C84; //----- (0058F280) -------------------------------------------------------- int __thiscall sub_58F280(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // edi char *v4; // eax v2 = this; v3 = *this[95]; v4 = sub_7549E0("%d", a2); return (*(int (__thiscall **)(_DWORD *, char *))(v3 + 472))(v2[95], v4); } //----- (0058F2C0) -------------------------------------------------------- char __thiscall sub_58F2C0(_BYTE *this) { return this[374]; } //----- (0058F2E0) -------------------------------------------------------- char __thiscall sub_58F2E0(_BYTE *this) { _BYTE *v1; // esi int v2; // eax v1 = this; sub_8F28C0(this); sub_459960(*((_BYTE **)v1 + 124), 1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 127) + 256))(0); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) LOBYTE(v2) = sub_4A8140(v2, 58); return v2; } //----- (0058F340) -------------------------------------------------------- int __thiscall sub_58F340(_DWORD *this) { _DWORD *v1; // ebx signed __int64 v2; // rax __int64 v3; // kr00_8 int v4; // ST4C_4 int v5; // ST50_4 int v6; // ST54_4 int v7; // eax v1 = this; LODWORD(v2) = sub_5D5470((_DWORD *)this[this[94] + 128]); if ( (_DWORD)v2 ) { v3 = qword_ACED80; v4 = sub_680F60(qword_ACED80); v5 = sub_680F00(v3); v6 = sub_680EB0(v3); v7 = sub_680E90(v3); v2 = sub_680FA0(v4, v5, v6, v7); *(_QWORD *)(v1[v1[94] + 128] + 464) = v2; } return v2; } // ACED80: using guessed type __int64 qword_ACED80; //----- (0058F3D0) -------------------------------------------------------- int *__thiscall sub_58F3D0(_WORD **this) { _WORD **v1; // esi signed int v2; // edi int *result; // eax v1 = this + 128; v2 = 20; do { result = sub_5D5B70(*v1, 0, 1); ++v1; --v2; } while ( v2 ); return result; } //----- (0058F400) -------------------------------------------------------- char __stdcall sub_58F400(char a1) { char result; // al result = a1; byte_AB0C88 = a1; return result; } // AB0C88: using guessed type char byte_AB0C88; //----- (0058F410) -------------------------------------------------------- char sub_58F410() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "PrivateStore"); return (char)v0; } //----- (0058F440) -------------------------------------------------------- LONG __thiscall sub_58F440(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; *this = &PrivateStoreInvWin::`vftable'; this[58] = &PrivateStoreInvWin::`vftable'; v2 = this[96]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[96] = 0; } return sub_5D5650(v1); } // 9D7348: using guessed type void *PrivateStoreInvWin::`vftable'; // 9D7364: using guessed type void *PrivateStoreInvWin::`vftable'; //----- (0058F4D0) -------------------------------------------------------- unsigned int __thiscall sub_58F4D0(_DWORD *this, int a2) { unsigned int result; // eax _DWORD *v3; // esi int v4; // ecx int v5; // edi int v6; // eax char *v7; // eax result = dword_AB0C84; v3 = this; if ( dword_AB0C84 != 2 && dword_AB0C84 != 3 ) { v4 = this[96]; if ( v4 ) { result = (*(int (**)(void))(*(_DWORD *)v4 + 16))(); if ( result <= 1 ) { if ( v3[95] ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v3[95] + 472))(&unk_9D7097); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v3[95] + 256))(0); } } else if ( v3[95] ) { v5 = *(_DWORD *)v3[95]; v6 = (*(int (**)(void))(*(_DWORD *)v3[96] + 12))(); v7 = sub_7549E0("%d", v6); (*(void (__thiscall **)(_DWORD, char *))(v5 + 472))(v3[95], v7); result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v3[95] + 256))(1); } } } return result; } // AB0C84: using guessed type int dword_AB0C84; //----- (0058F590) -------------------------------------------------------- _DWORD *__thiscall sub_58F590(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &PrivateStoreWin::`vftable'; v1[58] = &PrivateStoreWin::`vftable'; sub_8D0610((_BYTE *)v1 + 380); sub_8D0610((_BYTE *)v1 + 408); v1[110] = 0; *((_BYTE *)v1 + 374) = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; *((_WORD *)v1 + 186) = 0; v1[94] = 0; v1[169] = 0; v1[170] = 0; v1[171] = 0; v1[109] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D75D4: using guessed type void *PrivateStoreWin::`vftable'; // 9D75F4: using guessed type void *PrivateStoreWin::`vftable'; //----- (0058F6F0) -------------------------------------------------------- void __thiscall sub_58F6F0(_DWORD **this) { _DWORD **v1; // esi _DWORD **v2; // edi int v3; // ebx int v4; // ecx unsigned int v5; // eax int v6; // ecx _DWORD **v7; // edi signed int v8; // ebx int v9; // ecx unsigned int v10; // eax int v11; // ecx v1 = this; if ( dword_AD8EBC ) { if ( dword_AB0C84 != 1 && dword_AB0C84 != 3 || dword_AD8EBC[1924] != 5 ) sub_4B72A0(this[74], 26, 24, 0, 0); else sub_4B8960(this[74]); dword_ACEC24 = 0; if ( dword_AB0C84 == 1 ) { v2 = v1 + 128; v3 = dword_AB0C84 + 19; do { if ( sub_5D5470(*v2) ) { v4 = v1[74][179]; if ( v4 ) { v5 = (*v2)[114]; if ( v5 < 0xC0 ) v6 = *(_DWORD *)(v4 + 4 * v5 + 348); else v6 = 0; sub_536E90(v6, 0); } sub_5D5B70(*v2, 0, 1); } ++v2; --v3; } while ( v3 ); } else if ( dword_AB0C84 == 3 ) { v7 = v1 + 128; v8 = 20; do { if ( sub_5D5470(*v7) ) { v9 = v1[74][179]; if ( v9 ) { v10 = (*v7)[114]; if ( v10 < 0xC0 ) v11 = *(_DWORD *)(v9 + 4 * v10 + 348); else v11 = 0; sub_536E90(v11, 0); } sub_5D5B70(*v7, 0, 1); } ++v7; --v8; } while ( v8 ); } (*(void (__stdcall **)(void *))(*v1[124] + 460))(&unk_9D70BB); (*(void (__stdcall **)(void *))(*v1[119] + 472))(&unk_9D70D2); (*(void (__stdcall **)(void *))(*v1[120] + 472))(&unk_9D70D3); (*(void (__stdcall **)(void *))(*v1[121] + 472))(&unk_9D70DA); (*(void (__stdcall **)(void *))(*v1[122] + 472))(&unk_9D70DB); (*(void (__stdcall **)(signed int))(*v1[112] + 240))(1); sub_459960(v1[124], 0); sub_8F86A0(&unk_BA6B10, v1[169]); (*(void (__stdcall **)(_DWORD))(*v1[127] + 256))(0); byte_ACF576 = 0; } } // AB0C84: using guessed type int dword_AB0C84; // ACEC24: using guessed type int dword_ACEC24; // ACF576: using guessed type char byte_ACF576; //----- (0058F8C0) -------------------------------------------------------- char __thiscall sub_58F8C0(int this, float a2) { int v2; // eax int v3; // esi __int64 v4; // rax unsigned int v5; // edi unsigned int v6; // ebx signed __int64 v7; // rax signed __int64 v8; // rax signed __int64 v9; // rax signed __int64 v10; // rax _DWORD **v11; // edi signed int v12; // ebx unsigned int v13; // eax _DWORD *v14; // eax int v15; // eax _WORD *v16; // ecx __int64 v17; // rax signed __int64 v18; // rax __int64 v19; // rax signed __int64 v20; // rax __int64 v21; // rax signed __int64 v22; // rax __int64 v23; // rax signed __int64 v24; // rax _DWORD **v25; // edi signed int v26; // ebx _DWORD **v27; // edi signed int v28; // ebx int v29; // eax unsigned int v31; // [esp+14h] [ebp-88h] unsigned int v32; // [esp+14h] [ebp-88h] char v33; // [esp+18h] [ebp-84h] v2 = dword_AB0C84; v3 = this; if ( *(_BYTE *)(this + 374) && dword_AB0C84 == 1 ) { v4 = sub_680E60(byte_AD9238); v5 = v4 - *(_DWORD *)(v3 + 680); v6 = (unsigned __int64)(v4 - *(_QWORD *)(v3 + 680)) >> 32; v7 = sub_680E90(v4 - *(_QWORD *)(v3 + 680)); sprintf(&v33, "%I64d", v7); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 488) + 472))(&v33); v8 = sub_680EB0(__PAIR__(v6, v5)); sprintf(&v33, "%I64d", v8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 484) + 472))(&v33); v9 = sub_680F00(__PAIR__(v6, v5)); sprintf(&v33, "%I64d", v9); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 480) + 472))(&v33); v10 = sub_680F60(__PAIR__(v6, v5)); sprintf(&v33, "%I64d", v10); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 476) + 472))(&v33); v11 = (_DWORD **)(v3 + 512); v12 = 20; do { if ( sub_5D5470(*v11) ) { v13 = (*v11)[114]; if ( v13 < 0xC0 ) v14 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v3 + 296) + 716) + 4 * v13 + 348); else v14 = 0; v15 = sub_5D5470(v14); v16 = *v11; if ( v15 ) sub_5D5B70(v16, v15, 1); else sub_5D5B70(v16, 0, 1); } ++v11; --v12; } while ( v12 ); goto LABEL_32; } if ( !dword_AB0C84 ) { if ( sub_8D0630((float *)(this + 380), a2) ) { v17 = sub_680E60(byte_AD9238); v18 = sub_680E90(v17); sprintf(&v33, "%I64d", v18); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 488) + 472))(&v33); v19 = sub_680E60(byte_AD9238); v20 = sub_680EB0(v19); sprintf(&v33, "%I64d", v20); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 484) + 472))(&v33); v21 = sub_680E60(byte_AD9238); v22 = sub_680F00(v21); sprintf(&v33, "%I64d", v22); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 480) + 472))(&v33); v23 = sub_680E60(byte_AD9238); v24 = sub_680F60(v23); sprintf(&v33, "%I64d", v24); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 476) + 472))(&v33); v31 = 0; v25 = (_DWORD **)(v3 + 512); v26 = 20; do { if ( sub_5D5470(*v25) ) ++v31; ++v25; --v26; } while ( v26 ); if ( v31 > 0 ) sub_4B8C50(*(_DWORD **)(v3 + 296), word_ACF574); goto LABEL_32; } v2 = dword_AB0C84; } if ( (!*(_BYTE *)(v3 + 374) || v2 != 3) && v2 == 2 && sub_8D0630((float *)(v3 + 380), a2) ) { v32 = 0; v27 = (_DWORD **)(v3 + 512); v28 = 20; do { if ( sub_5D5470(*v27) ) ++v32; ++v27; --v28; } while ( v28 ); if ( v32 > 0 ) sub_4B8C50(*(_DWORD **)(v3 + 296), word_ACF574); } LABEL_32: LOBYTE(v29) = (*(int (**)(void))(**(_DWORD **)(v3 + 448) + 244))(); if ( !(_BYTE)v29 ) { if ( !dword_AB0C84 && (v29 = sub_8D0630((float *)(v3 + 408), a2)) != 0 || dword_AB0C84 == 2 && (v29 = sub_8D0630((float *)(v3 + 408), a2)) != 0 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 448) + 240))(1); LOBYTE(v29) = sub_8D06A0((float *)(v3 + 408), flt_ACCFCC); *(float *)(v3 + 428) = 1.0; } } return v29; } // AB0C84: using guessed type int dword_AB0C84; // ACCFCC: using guessed type float flt_ACCFCC; // ACF574: using guessed type __int16 word_ACF574; //----- (0058FCA0) -------------------------------------------------------- int *__thiscall sub_58FCA0(_DWORD *this) { _DWORD *v1; // esi int *result; // eax unsigned int v3; // eax int v4; // ecx int v5; // esi v1 = this; result = (int *)sub_5D5470((_DWORD *)this[this[94] + 128]); if ( result ) { v3 = *(_DWORD *)(v1[v1[94] + 128] + 456); if ( v3 < 0xC0 ) v4 = *(_DWORD *)(*(_DWORD *)(v1[74] + 716) + 4 * v3 + 348); else v4 = 0; sub_536E90(v4, 0); result = sub_5D5B70((_WORD *)v1[v1[94] + 128], 0, 1); v5 = v1[v1[94] + 128]; *(_DWORD *)(v5 + 464) = 0; *(_DWORD *)(v5 + 468) = 0; } return result; } //----- (0058FD30) -------------------------------------------------------- int *__thiscall sub_58FD30(_DWORD *this) { _DWORD *v1; // esi int *result; // eax unsigned int v3; // eax int v4; // ecx int v5; // esi v1 = this; result = (int *)sub_5D5470((_DWORD *)this[this[94] + 128]); if ( result ) { v3 = *(_DWORD *)(v1[v1[94] + 128] + 456); if ( v3 < 0xC0 ) v4 = *(_DWORD *)(*(_DWORD *)(v1[74] + 716) + 4 * v3 + 348); else v4 = 0; sub_536E90(v4, 0); result = sub_5D5B70((_WORD *)v1[v1[94] + 128], 0, 1); v5 = v1[v1[94] + 128]; *(_DWORD *)(v5 + 464) = 0; *(_DWORD *)(v5 + 468) = 0; } return result; } //----- (0058FDC0) -------------------------------------------------------- void __thiscall sub_58FDC0(int this, int a2, _DWORD *a3, int a4) { int v4; // esi int v5; // eax v4 = this; if ( a2 == 27 && a3 ) { if ( a4 ) v5 = a4 - 232; else v5 = 0; if ( v5 == *(_DWORD *)(this + 208) ) { if ( !*a3 ) (*(void (__thiscall **)(int))(*(_DWORD *)(this - 232) + 360))(this - 232); } else if ( !*a3 ) { sub_4B8A60(*(_DWORD **)(this + 64), word_ACF574, *(_BYTE *)(this + 144), *(_WORD *)(this + 204)); *(_DWORD *)(v4 + 204) = 0; } } } // ACF574: using guessed type __int16 word_ACF574; //----- (0058FE40) -------------------------------------------------------- char __thiscall sub_58FE40(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (0058FE70) -------------------------------------------------------- char __thiscall sub_58FE70(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (0058FEA0) -------------------------------------------------------- int __thiscall sub_58FEA0(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // eax volatile LONG *v4; // eax v2 = this; v3 = (char *)sub_40C190(-2084639236); v4 = sub_462C30(2, v3); v2[109] = a2; return (**((int (__stdcall ***)(int))v4 + 58))((int)(v2 + 58)); } //----- (0058FEE0) -------------------------------------------------------- int *__thiscall sub_58FEE0(int this, int a2) { _DWORD *v2; // esi int *result; // eax unsigned int v4; // eax int v5; // ecx int *v6; // edi int **v7; // ebx const CHAR *v8; // ST0C_4 _DWORD *v9; // eax int v10; // ecx int v11; // esi v2 = (_DWORD *)this; *(_DWORD *)(this + 376) = a2; result = (int *)dword_AB0C84; if ( dword_AB0C84 == 1 ) { if ( !*(_BYTE *)(this + 374) ) { result = (int *)sub_5D5470(*(_DWORD **)(this + 4 * a2 + 512)); if ( result ) { v4 = *(_DWORD *)(v2[a2 + 128] + 456); if ( v4 < 0xC0 ) v5 = *(_DWORD *)(*(_DWORD *)(v2[74] + 716) + 4 * v4 + 348); else v5 = 0; sub_536E90(v5, 0); goto LABEL_18; } } } else if ( dword_AB0C84 ) { if ( dword_AB0C84 == 3 && !*(_BYTE *)(this + 374) ) { result = (int *)sub_5D5470(*(_DWORD **)(this + 4 * a2 + 512)); if ( result ) { v10 = sub_433AF0(*(_DWORD **)(v2[74] + 716), *(_DWORD *)(v2[a2 + 128] + 456)); sub_536E90(v10, 0); LABEL_18: result = sub_5D5B70((_WORD *)v2[a2 + 128], 0, 1); v11 = v2[a2 + 128]; *(_DWORD *)(v11 + 468) = 0; *(_DWORD *)(v11 + 464) = 0; return result; } } } else if ( byte_AB0180 ) { result = (int *)sub_5D5470(*(_DWORD **)(this + 4 * a2 + 512)); v6 = result; if ( result ) { if ( (unsigned int)(*(int (__thiscall **)(int *))(*result + 12))(result) <= 1 ) { result = (int *)sub_58FEA0(v2, 1); } else { v7 = (int **)v2[74]; v8 = sub_40C190(927548051); v9 = (_DWORD *)(*(int (__thiscall **)(int *))(*v6 + 12))(v6); result = (int *)sub_4A4E90(v7, v2, (_DWORD *)4, v9, (int)v8, 0); } } } return result; } // AB0180: using guessed type char byte_AB0180; // AB0C84: using guessed type int dword_AB0C84; //----- (00590040) -------------------------------------------------------- int __thiscall sub_590040(int this, int a2) { int result; // eax _DWORD *v3; // esi volatile LONG **v4; // edi const CHAR *v5; // ST10_4 const CHAR *v6; // eax result = dword_AB0C84; v3 = (_DWORD *)this; if ( (dword_AB0C84 == 1 || dword_AB0C84 == 3) && !*(_BYTE *)(this + 374) ) { v4 = *(volatile LONG ***)(this + 296); *(_DWORD *)(this + 376) = a2; v5 = sub_40C190(996184969); v6 = sub_40C190(-1684369197); result = sub_4A4EE0(v4, v3, (_DWORD *)0xF, (_DWORD *)0x10, (int)v6, (int)v5); } return result; } // AB0C84: using guessed type int dword_AB0C84; //----- (005900A0) -------------------------------------------------------- void __thiscall sub_5900A0(_DWORD **this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx unsigned __int8 *v4; // eax char *v5; // eax int v6; // esi const void *v7; // eax _DWORD *v8; // ecx _DWORD **v9; // ebx _DWORD *v10; // esi unsigned __int8 *v11; // eax int v12; // esi const void *v13; // eax __int64 v14; // [esp+14h] [ebp-10h] signed int v15; // [esp+1Ch] [ebp-8h] char v16; // [esp+23h] [ebp-1h] char v17; // [esp+23h] [ebp-1h] v1 = this; if ( dword_AB0C84 == 1 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) return; if ( *((_BYTE *)v1 + 374) ) goto LABEL_4; v16 = 0; v2 = v1 + 128; v3 = 20; do { if ( sub_5D5470(*v2) ) v16 = 1; ++v2; --v3; } while ( v3 ); if ( v16 ) { v4 = (unsigned __int8 *)(*(int (**)(void))(*v1[124] + 452))(); if ( sub_451A00(v4) ) { LABEL_11: v5 = (char *)sub_40C190(849182339); LABEL_12: sub_462CA0(1, v5); return; } v6 = (int)(v1 + 86); *(_DWORD *)v6 = 0; *(_DWORD *)(v6 + 4) = 0; *(_DWORD *)(v6 + 8) = 0; *(_DWORD *)(v6 + 12) = 0; *(_DWORD *)(v6 + 16) = 0; *(_DWORD *)(v6 + 20) = 0; *(_DWORD *)(v6 + 24) = 0; *(_WORD *)(v6 + 28) = 0; v7 = (const void *)(*(int (**)(void))(*v1[124] + 452))(); memcpy(v1 + 86, v7, strlen((const char *)v7)); sub_4C1DD0((int)v1[74], 1); } } else if ( dword_AB0C84 ) { if ( dword_AB0C84 == 3 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() ) { if ( *((_BYTE *)v1 + 374) ) { LABEL_4: sub_4B89A0(v1[74]); return; } v17 = 0; v14 = 0i64; v9 = v1 + 128; v15 = 20; do { v10 = *v9; if ( sub_5D5470(*v9) ) { v17 = 1; v14 += *((unsigned __int16 *)v10 + 236) * *((_QWORD *)v10 + 58); } ++v9; --v15; } while ( v15 ); if ( v14 > sub_680E60(byte_AD9238) ) { v5 = (char *)sub_40C190(810500413); goto LABEL_12; } if ( v17 ) { v11 = (unsigned __int8 *)(*(int (**)(void))(*v1[124] + 452))(); if ( sub_451A00(v11) ) goto LABEL_11; v1[86] = 0; v12 = (int)(v1 + 86); *(_DWORD *)(v12 + 4) = 0; *(_DWORD *)(v12 + 8) = 0; *(_DWORD *)(v12 + 12) = 0; *(_DWORD *)(v12 + 16) = 0; *(_DWORD *)(v12 + 20) = 0; *(_DWORD *)(v12 + 24) = 0; *(_WORD *)(v12 + 28) = 0; v13 = (const void *)(*(int (**)(void))(*v1[124] + 452))(); if ( v13 ) memcpy(v1 + 86, v13, strlen((const char *)v13)); sub_4C1DD0((int)v1[74], 0); } } } else if ( dword_AB0C84 == 2 ) { (*(void (__stdcall **)(_DWORD))(*this[112] + 240))(0); sub_8D06A0((float *)v1 + 102, flt_ACCFCC); *((float *)v1 + 107) = 1.0; sub_4B8C50(v1[74], word_ACF574); } } else { (*(void (__stdcall **)(_DWORD))(*this[112] + 240))(0); sub_8D06A0((float *)v1 + 102, flt_ACCFCC); v8 = v1[74]; *((float *)v1 + 107) = 1.0; sub_4B8C50(v8, word_ACF574); } } // AB0C84: using guessed type int dword_AB0C84; // ACCFCC: using guessed type float flt_ACCFCC; // ACF574: using guessed type __int16 word_ACF574; //----- (00590390) -------------------------------------------------------- int __thiscall sub_590390(int this, char a2) { int result; // eax int v3; // esi char v4; // bl int v5; // edi const CHAR *v6; // eax _DWORD **v7; // edi signed int v8; // ebx unsigned int v9; // eax int v10; // eax int v11; // edi const CHAR *v12; // eax _DWORD **v13; // edi signed int v14; // ebx unsigned int v15; // eax int v16; // eax int v17; // edi const CHAR *v18; // eax int v19; // [esp+Ch] [ebp-4h] int v20; // [esp+Ch] [ebp-4h] result = dword_AB0C84; v3 = this; if ( dword_AB0C84 == 1 ) { v4 = a2; if ( a2 ) { *(_QWORD *)(this + 680) = sub_680E60(byte_AD9238); dword_ACEC24 = 0; sub_459960(*(_BYTE **)(v3 + 496), 0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 476) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 480) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 484) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 488) + 472))("0"); sub_537470(*(char **)(*(_DWORD *)(v3 + 296) + 716)); } else { sub_537640(*(char **)(*(_DWORD *)(this + 296) + 716)); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 448) + 240))(1); if ( !*(_BYTE *)(v3 + 374) && a2 ) { v5 = **(_DWORD **)(v3 + 452); v6 = sub_40A910(-289095088); (*(void (__thiscall **)(_DWORD, const CHAR *))(v5 + 472))(*(_DWORD *)(v3 + 452), v6); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 508) + 256))(0); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v3 + 492) + 256))(1); if ( !*(_BYTE *)(v3 + 374) || a2 ) goto LABEL_34; v19 = *(_DWORD *)(*(_DWORD *)(v3 + 296) + 716); v7 = (_DWORD **)(v3 + 512); v8 = 20; do { if ( sub_5D5470(*v7) ) { v9 = (*v7)[114]; if ( v9 < 0xC0 ) v10 = *(_DWORD *)(v19 + 4 * v9 + 348); else v10 = 0; sub_536E90(v10, 1); } ++v7; --v8; } while ( v8 ); goto LABEL_33; } if ( dword_AB0C84 != 3 ) return result; v4 = a2; if ( a2 ) { *(_QWORD *)(this + 680) = sub_680E60(byte_AD9238); dword_ACEC24 = 0; sub_459960(*(_BYTE **)(v3 + 496), 0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 476) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 480) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 484) + 472))("0"); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 488) + 472))("0"); } sub_537640(*(char **)(*(_DWORD *)(v3 + 296) + 716)); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 448) + 240))(1); if ( !*(_BYTE *)(v3 + 374) && a2 ) { v11 = **(_DWORD **)(v3 + 452); v12 = sub_40A910(-289095088); (*(void (__thiscall **)(_DWORD, const CHAR *))(v11 + 472))(*(_DWORD *)(v3 + 452), v12); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 508) + 256))(0); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v3 + 492) + 256))(1); if ( *(_BYTE *)(v3 + 374) && !a2 ) { v20 = *(_DWORD *)(*(_DWORD *)(v3 + 296) + 716); v13 = (_DWORD **)(v3 + 512); v14 = 20; do { if ( sub_5D5470(*v13) ) { v15 = (*v13)[114]; if ( v15 < 0xC0 ) v16 = *(_DWORD *)(v20 + 4 * v15 + 348); else v16 = 0; sub_536E90(v16, 1); } ++v13; --v14; } while ( v14 ); LABEL_33: sub_459960(*(_BYTE **)(v3 + 496), 1); v17 = **(_DWORD **)(v3 + 452); v18 = sub_40A910(824443448); (*(void (__thiscall **)(_DWORD, const CHAR *))(v17 + 472))(*(_DWORD *)(v3 + 452), v18); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 508) + 256))(1); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 492) + 256))(0); v4 = a2; } LABEL_34: *(_BYTE *)(v3 + 374) = v4; return result; } // AB0C84: using guessed type int dword_AB0C84; // ACEC24: using guessed type int dword_ACEC24; //----- (00590710) -------------------------------------------------------- char __thiscall sub_590710(_BYTE *this, _DWORD *a2, int a3) { _BYTE *v3; // esi _DWORD *v4; // ebx unsigned int v6; // edi int v7; // edi int v8; // eax int v9; // ebx int v10; // edi int v11; // eax int v12; // eax int v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // eax unsigned int v17; // eax int v18; // eax volatile LONG **v19; // edi const CHAR *v20; // ST10_4 const CHAR *v21; // eax int v22; // ebx int v23; // edi int v24; // eax int v25; // eax int v26; // eax _DWORD *v27; // eax int v28; // eax _DWORD *v29; // esi const CHAR *v30; // eax int v31; // eax _DWORD *v32; // eax _DWORD *v33; // edi int **v34; // ebx const CHAR *v35; // ST0C_4 _DWORD *v36; // eax int v37; // [esp-8h] [ebp-18h] int v38; // [esp+8h] [ebp-8h] unsigned int v39; // [esp+Ch] [ebp-4h] v3 = this; if ( dword_AB0C84 == 3 ) { v4 = a2; if ( !*(_DWORD *)(*(_DWORD *)(a2[5] + 112) + 98) ) return 0; } else { if ( !dword_AB0C84 || dword_AB0C84 == 2 ) return 0; v4 = a2; } if ( this[374] || v4[2] ) return 0; v6 = v4[3]; v39 = v6; if ( v6 >= 0x30 ) { sub_6F3170(2, &v38); if ( v38 + 2 <= v6 / 0x18 ) { v37 = 1704690796; LABEL_48: v29 = (_DWORD *)*((_DWORD *)v3 + 74); v30 = sub_40C190(v37); sub_492060(v29, (int)v30); return 0; } } (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 124) + 488))(1); v7 = a3; if ( sub_5D5470(*(_DWORD **)&v3[4 * a3 + 512]) ) { v8 = sub_433AF0(*(_DWORD **)(*((_DWORD *)v3 + 74) + 716), *(_DWORD *)(*(_DWORD *)&v3[4 * a3 + 512] + 456)); sub_536E90(v8, 0); } if ( dword_AB0C84 == 1 ) { v9 = v4[5]; if ( !v9 ) goto LABEL_30; v10 = *(_DWORD *)(v9 + 112); if ( v10 ) { if ( sub_74DFD0(&dword_AD9E70, *(_DWORD *)(v10 + 274)) || sub_74DF90(&dword_AD9E70, *(_DWORD *)(v10 + 274)) ) { if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v10 + 274)) != 1 ) goto LABEL_20; v12 = sub_6869F0((char *)v9); if ( sub_74DF20(&dword_AD9E70, *(_DWORD *)(v10 + 274), v12) ) goto LABEL_20; v13 = sub_6869F0((char *)v9); if ( sub_74DEC0(&dword_AD9E70, *(_DWORD *)(v10 + 274), v13) ) goto LABEL_20; } else { v11 = sub_6869F0((char *)v9); if ( !sub_74DDD0(&dword_AD9E70, *(_DWORD *)(v10 + 274), v11) ) goto LABEL_20; } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v10 + 274)) && sub_6869F0((char *)v9) == 1 ) goto LABEL_20; } v14 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 44))(v9); if ( !v14 || (v15 = *v14 & 0xFF) == 0 || v15 == 255 ) { v7 = a3; LABEL_30: v16 = sub_6876E0((unsigned __int16 *)(a2[5] + 8)); if ( v16 ) { sub_5D5B70(*(_WORD **)&v3[4 * v7 + 512], (int)v16, 1); v17 = v39; *(_DWORD *)(*(_DWORD *)&v3[4 * v7 + 512] + 456) = v39; v18 = sub_433AF0(*(_DWORD **)(*((_DWORD *)v3 + 74) + 716), v17); sub_536E90(v18, 1); *((_DWORD *)v3 + 94) = v7; v19 = (volatile LONG **)*((_DWORD *)v3 + 74); v20 = sub_40C190(996184969); v21 = sub_40C190(-1684369197); sub_4A4EE0(v19, v3, (_DWORD *)0xF, (_DWORD *)0x10, (int)v21, (int)v20); return 1; } return 1; } LABEL_47: v37 = -1634432127; goto LABEL_48; } if ( dword_AB0C84 == 3 ) { v22 = v4[5]; if ( v22 ) { v23 = *(_DWORD *)(v22 + 112); if ( v23 ) { if ( sub_74DFD0(&dword_AD9E70, *(_DWORD *)(v23 + 274)) || sub_74DF90(&dword_AD9E70, *(_DWORD *)(v23 + 274)) ) { if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v23 + 274)) != 1 ) goto LABEL_20; v25 = sub_6869F0((char *)v22); if ( sub_74DF20(&dword_AD9E70, *(_DWORD *)(v23 + 274), v25) ) goto LABEL_20; v26 = sub_6869F0((char *)v22); if ( sub_74DEC0(&dword_AD9E70, *(_DWORD *)(v23 + 274), v26) ) goto LABEL_20; } else { v24 = sub_6869F0((char *)v22); if ( !sub_74DDD0(&dword_AD9E70, *(_DWORD *)(v23 + 274), v24) ) { v37 = -2086507545; goto LABEL_48; } } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v23 + 274)) && sub_6869F0((char *)v22) == 1 ) { LABEL_20: v37 = -857857511; goto LABEL_48; } } v27 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v22 + 44))(v22); if ( v27 ) { v28 = *v27 & 0xFF; if ( v28 ) { if ( v28 != 255 ) goto LABEL_47; } } } v31 = sub_433AF0(*(_DWORD **)(*((_DWORD *)v3 + 74) + 716), v39); sub_536E90(v31, 1); v32 = sub_6876E0((unsigned __int16 *)(a2[5] + 8)); v33 = v32; if ( v32 ) { sub_5D5B70(*(_WORD **)&v3[4 * a3 + 512], (int)v32, 1); *(_DWORD *)(*(_DWORD *)&v3[4 * a3 + 512] + 456) = v39; *((_DWORD *)v3 + 94) = a3; v34 = (int **)*((_DWORD *)v3 + 74); v35 = sub_40C190(927548051); v36 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v33 + 16))(v33); sub_4A4E90(v34, v3, (_DWORD *)5, v36, (int)v35, 0); } } return 1; } // AB0C84: using guessed type int dword_AB0C84; // AD9E70: using guessed type int dword_AD9E70; //----- (00590B50) -------------------------------------------------------- int __thiscall sub_590B50(_DWORD *this) { _DWORD *v1; // esi signed __int64 v2; // rax unsigned int v3; // ebx unsigned int v4; // edi unsigned __int16 v5; // ST58_2 char *v6; // eax unsigned int v7; // eax int v8; // eax int v9; // esi int v10; // ST50_4 int v11; // ST54_4 int v12; // ST58_4 int v13; // eax v1 = this; LODWORD(v2) = sub_5D5470((_DWORD *)this[this[94] + 128]); if ( (_DWORD)v2 ) { v3 = HIDWORD(qword_ACED80); v4 = qword_ACED80; v5 = *(_WORD *)(v1[v1[94] + 128] + 472); if ( (signed __int64)(v5 * __PAIR__(v3, v4)) <= sub_680E60(byte_AD9238) ) { v10 = sub_680F60(__PAIR__(v3, v4)); v11 = sub_680F00(__PAIR__(v3, v4)); v12 = sub_680EB0(__PAIR__(v3, v4)); v13 = sub_680E90(__PAIR__(v3, v4)); v2 = sub_680FA0(v10, v11, v12, v13); *(_QWORD *)(v1[v1[94] + 128] + 464) = v2; } else { v6 = (char *)sub_40C190(810500413); sub_462CA0(1, v6); v7 = *(_DWORD *)(v1[v1[94] + 128] + 456); if ( v7 < 0xC0 ) v8 = *(_DWORD *)(*(_DWORD *)(v1[74] + 716) + 4 * v7 + 348); else v8 = 0; sub_536E90(v8, 0); LODWORD(v2) = sub_5D5B70((_WORD *)v1[v1[94] + 128], 0, 1); v9 = v1[v1[94] + 128]; *(_DWORD *)(v9 + 464) = 0; *(_DWORD *)(v9 + 468) = 0; } } return v2; } // ACED80: using guessed type __int64 qword_ACED80; //----- (00590CC0) -------------------------------------------------------- char __thiscall sub_590CC0(_DWORD **this, int a2) { char result; // al _DWORD **v3; // esi int v4; // edi const CHAR *v5; // eax int v6; // edi const CHAR *v7; // eax int v8; // edi const CHAR *v9; // eax int v10; // edi const CHAR *v11; // eax signed int v12; // edi int *v13; // esi void (__stdcall *v14)(signed int); // eax int v15; // edi const CHAR *v16; // eax int v17; // edi const CHAR *v18; // eax int v19; // edi const CHAR *v20; // eax int v21; // edi const CHAR *v22; // eax int *v23; // esi signed int v24; // edi int v25; // edi const CHAR *v26; // eax int v27; // edi const CHAR *v28; // eax int v29; // edi const CHAR *v30; // eax signed int v31; // edi int *v32; // esi void (__stdcall *v33)(signed int); // eax int v34; // edi const CHAR *v35; // eax int v36; // edi const CHAR *v37; // eax int v38; // edi const CHAR *v39; // eax int *v40; // esi signed int v41; // edi result = a2; v3 = this; dword_AB0C84 = a2; if ( a2 == 1 ) { (*(void (__stdcall **)(char *))(*this[123] + 468))(aIii); v4 = *v3[123]; v5 = sub_40C190(-170593065); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v4 + 472))(v3[123], v5); sub_459960(v3[124], 1); v6 = *v3[124]; v7 = sub_40A910(1705411969); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v6 + 464))(v3[124], v7); (*(void (__stdcall **)(_DWORD))(*v3[126] + 256))(0); v8 = *v3[125]; v9 = sub_40C190(1296202897); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v8 + 472))(v3[125], v9); (*(void (__stdcall **)(signed int))(*v3[125] + 256))(1); v10 = *v3[113]; v11 = sub_40C190(945767744); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v10 + 472))(v3[113], v11); v12 = 0; v13 = (int *)(v3 + 128); do { v14 = *(void (__stdcall **)(signed int))(*(_DWORD *)v13[20] + 256); if ( v12 >= (unsigned __int8)byte_AB0C88 ) { v14(0); *(_BYTE *)(*v13 + 254) = 0; result = sub_5D3170(*v13, 0); } else { v14(1); *(_BYTE *)(*v13 + 254) = 1; result = sub_5D3170(*v13, 1); } ++v12; ++v13; } while ( v12 < 20 ); } else if ( a2 ) { if ( a2 == 3 ) { (*(void (__stdcall **)(int *))(*this[123] + 468))(&dword_AA8C68); v25 = *v3[123]; v26 = sub_40C190(-1444870970); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v25 + 472))(v3[123], v26); sub_459960(v3[124], 1); v27 = *v3[124]; v28 = sub_40A910(-1427972398); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v27 + 464))(v3[124], v28); (*(void (__stdcall **)(_DWORD))(*v3[126] + 256))(0); (*(void (__stdcall **)(void *))(*v3[125] + 472))(&unk_9D70E5); (*(void (__stdcall **)(_DWORD))(*v3[125] + 256))(0); v29 = *v3[113]; v30 = sub_40C190(945767744); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v29 + 472))(v3[113], v30); v31 = 0; v32 = (int *)(v3 + 128); do { v33 = *(void (__stdcall **)(signed int))(*(_DWORD *)v32[20] + 256); if ( v31 >= (unsigned __int8)byte_AB0C88 ) { v33(0); *(_BYTE *)(*v32 + 254) = 0; result = sub_5D3170(*v32, 0); } else { v33(1); *(_BYTE *)(*v32 + 254) = 1; result = sub_5D3170(*v32, 1); } ++v31; ++v32; } while ( v31 < 20 ); } else if ( a2 == 2 ) { (*(void (__stdcall **)(int *))(*this[123] + 468))(&dword_AA8C68); v34 = *v3[123]; v35 = sub_40C190(-1444870970); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v34 + 472))(v3[123], v35); sub_459960(v3[124], 0); (*(void (__stdcall **)(signed int))(*v3[126] + 256))(1); v36 = *v3[126]; v37 = sub_40C190(-285931696); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v36 + 472))(v3[126], v37); (*(void (__stdcall **)(void *))(*v3[125] + 472))(&unk_9D70E6); (*(void (__stdcall **)(_DWORD))(*v3[125] + 256))(0); v38 = *v3[113]; v39 = sub_40C190(-599699411); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v38 + 472))(v3[113], v39); v40 = (int *)(v3 + 128); v41 = 20; do { (*(void (__stdcall **)(signed int))(*(_DWORD *)v40[20] + 256))(1); *(_BYTE *)(*v40 + 254) = 1; result = sub_5D3170(*v40, 1); ++v40; --v41; } while ( v41 ); } } else { (*(void (__stdcall **)(char *))(*this[123] + 468))(aIii); v15 = *v3[123]; v16 = sub_40C190(-170593065); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v15 + 472))(v3[123], v16); sub_459960(v3[124], 0); v17 = *v3[126]; v18 = sub_40C190(-470295077); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v17 + 472))(v3[126], v18); (*(void (__stdcall **)(signed int))(*v3[126] + 256))(1); v19 = *v3[125]; v20 = sub_40C190(1016500360); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v19 + 472))(v3[125], v20); (*(void (__stdcall **)(signed int))(*v3[125] + 256))(1); v21 = *v3[113]; v22 = sub_40C190(-599699411); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v21 + 472))(v3[113], v22); v23 = (int *)(v3 + 128); v24 = 20; do { (*(void (__stdcall **)(signed int))(*(_DWORD *)v23[20] + 256))(1); *(_BYTE *)(*v23 + 254) = 1; result = sub_5D3170(*v23, 1); ++v23; --v24; } while ( v24 ); } return result; } // AA8C68: using guessed type int dword_AA8C68; // AB0C84: using guessed type int dword_AB0C84; // AB0C88: using guessed type char byte_AB0C88; //----- (00591160) -------------------------------------------------------- int *__thiscall sub_591160(_DWORD *this, int a2) { _DWORD *v2; // esi int *result; // eax int v4; // ecx unsigned int v5; // eax int v6; // ecx int v7; // edi int *v8; // edx int v9; // ebx char *v10; // eax volatile LONG **v11; // edi const CHAR *v12; // ST10_4 const CHAR *v13; // eax v2 = this; result = (int *)sub_5D5470((_DWORD *)this[this[94] + 128]); if ( result ) { v4 = v2[94]; if ( a2 ) { v7 = v2[v4 + 128]; v8 = *(int **)(v7 + 380); *(_WORD *)(v7 + 472) = a2; v9 = *v8; v10 = sub_7549E0("%d", a2); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(*(_DWORD *)(v7 + 380), v10); v11 = (volatile LONG **)v2[74]; v12 = sub_40C190(-1868369182); v13 = sub_40C190(-1934910320); result = (int *)sub_4A4EE0(v11, v2, (_DWORD *)0x11, (_DWORD *)0x12, (int)v13, (int)v12); } else { v5 = *(_DWORD *)(v2[v4 + 128] + 456); if ( v5 < 0xC0 ) v6 = *(_DWORD *)(*(_DWORD *)(v2[74] + 716) + 4 * v5 + 348); else v6 = 0; sub_536E90(v6, 0); result = sub_5D5B70((_WORD *)v2[v2[94] + 128], 0, 1); } } return result; } //----- (00591250) -------------------------------------------------------- char __thiscall sub_591250(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // edi int v7; // ecx const CHAR *v8; // eax _DWORD **v9; // esi const CHAR *v10; // edi int v11; // eax _BYTE *v12; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( dword_AB0C84 == 3 ) { v7 = v6[5]; if ( !v7 || (*(unsigned __int8 (**)(void))(*(_DWORD *)v7 + 4))() == 24 ) goto LABEL_21; } if ( v6[4] ) goto LABEL_21; v11 = v6[2]; if ( v11 == 21 ) { v8 = sub_40A910(-1779373099); goto LABEL_7; } if ( v11 ) goto LABEL_21; v12 = (_BYTE *)sub_402BF0(v4); if ( v4[113] ) return 0; if ( !sub_590710(v12, v6, v4[112]) ) { LABEL_21: v8 = sub_40C190(-2086507545); LABEL_7: v9 = (_DWORD **)(v4 + 58); v10 = v8; if ( v9[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 4))(25, v8, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); return 0; } return 1; } // AB0C84: using guessed type int dword_AB0C84; //----- (00591330) -------------------------------------------------------- void __thiscall sub_591330(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char *v4; // eax volatile LONG *v5; // eax int v6; // edx v3 = this; switch ( a2 ) { case 4: if ( a3 ) sub_58FEA0(this, a3); break; case 5: sub_591160(this, a3); break; case 10: sub_590040((int)this, a3); break; case 11: sub_58FEE0((int)this, a3); break; case 12: sub_5900A0((_DWORD **)this); break; case 13: case 14: if ( dword_AB0C84 != 3 && dword_AB0C84 != 1 || dword_AD8EBC[1924] != 5 ) { sub_8F2BC0(this, 1, 0, 0); } else { v4 = (char *)sub_4090F0(-953087420); v5 = sub_462CA0(2, v4); sub_56FF80(v3 + 110, (int)v5); if ( v3 ) v6 = (int)(v3 + 58); else v6 = 0; (**(void (__thiscall ***)(int, int))(v3[110] + 232))(v3[110] + 232, v6); } break; case 15: sub_58F340(this); break; case 16: sub_58FCA0(this); break; case 17: sub_590B50(this); break; case 18: sub_58FD30(this); break; case 19: sub_58F410(); break; default: return; } } // AB0C84: using guessed type int dword_AB0C84; //----- (00591490) -------------------------------------------------------- volatile LONG *__cdecl sub_591490(int a1, int a2, int a3, int a4) { void *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1E0u); v8 = v4; v9 = 0; if ( v4 ) v5 = (volatile LONG *)sub_58F130((void **)v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (005915D0) -------------------------------------------------------- volatile LONG *__cdecl sub_5915D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2B0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_58F590(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00591700) -------------------------------------------------------- char __thiscall sub_591700(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char *v6; // eax volatile LONG **v7; // eax int v8; // ebx volatile LONG *v9; // eax volatile LONG **v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // eax volatile LONG *v15; // eax const CHAR *v16; // eax int v17; // eax const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax const char *v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // ecx bool v26; // zf bool v27; // sf unsigned __int8 v28; // of volatile LONG **v29; // ecx int *v30; // eax int v31; // eax volatile LONG *v32; // eax const CHAR *v33; // eax int v34; // eax volatile LONG *v35; // eax const CHAR *v36; // eax int v37; // eax volatile LONG *v38; // eax const CHAR *v39; // eax volatile LONG *v40; // ecx int v41; // eax int v42; // eax volatile LONG *v43; // eax const CHAR *v44; // eax volatile LONG *v45; // ecx int v46; // eax int v47; // eax volatile LONG *v48; // ebx const CHAR *v49; // eax int v50[5]; // [esp+84h] [ebp-6Ch] int v51; // [esp+98h] [ebp-58h] int v52; // [esp+9Ch] [ebp-54h] void (__thiscall **v53)(volatile LONG *, const CHAR *); // [esp+A0h] [ebp-50h] int v54; // [esp+A4h] [ebp-4Ch] int v55; // [esp+A8h] [ebp-48h] volatile LONG **v56; // [esp+ACh] [ebp-44h] int v57; // [esp+B0h] [ebp-40h] int v58; // [esp+B4h] [ebp-3Ch] int v59; // [esp+B8h] [ebp-38h] char v60; // [esp+BCh] [ebp-34h] int v61; // [esp+ECh] [ebp-4h] v2 = (int)this; v59 = 0; v61 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) goto LABEL_31; v54 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\PrivateStore.nif"); sub_8F66B0(v6, (int)&v59, v54); if ( !v59 ) return 0; v7 = sub_8FB140(v59, (int)"Frame", (int)&v58, (int)&v57, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"PrivateStoreWin", 0) ) { LABEL_31: v4 = (void (__thiscall ***)(_DWORD, signed int))v59; v61 = -1; if ( v59 && !InterlockedDecrement((volatile LONG *)(v59 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v58; v55 = v57; v9 = (volatile LONG *)sub_43D0D0(0x13u); if ( v9 ) v10 = sub_8FB140(v59, (int)"Theme", (int)&v58, (int)&v57, v9); else v10 = sub_8FB140(v59, (int)"Theme", (int)&v58, (int)&v57, 0); sub_8F3EB0(v58 - v8, v57 - v55, (int)v10, v2, 0, 0); v11 = sub_8FB140(v59, (int)"IconSlot", (int)&v58, (int)&v57, v3); sub_8F3EB0(v58 - v8, v57 - v55, (int)v11, v2, 0, 0); v56 = sub_8FB140(v59, (int)"ClsNor", (int)&v58, (int)&v57, v3); sub_8FB650(v56, v59, (int)"ClsClick"); sub_8FB650(v56, v59, (int)"ClsOver"); *(_DWORD *)(v2 + 672) = sub_8FE0F0(v58 - v8, v57 - v55, (int)v56, v2, 14, 0, 0); v54 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v59 + 72))("HelpLinkNor") ) { v56 = sub_8FB140(v59, (int)"HelpLinkNor", (int)&v58, (int)&v57, (volatile LONG *)v54); sub_8FB650(v56, v59, (int)"HelpLinkClick"); sub_8FB650(v56, v59, (int)"HelpLinkOver"); sub_8FE0F0(v58 - v8, v57 - v55, (int)v56, v2, 19, 0, 0); } v12 = sub_8FB140(v59, (int)"Panel01", (int)&v58, (int)&v57, v3); v13 = sub_8F3EB0(v58 - v8, v57 - v55, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( !sub_8F71E0(v59, (int)"WinTitle", &v58, &v57, &v51, &v52) ) goto LABEL_20; v14 = sub_421050(0); v15 = sub_8F4A20(v58 - v8, v57 - v55 + 1, v51, v52, v14, v2, 0, 0); *(_DWORD *)(v2 + 492) = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 492) + 468))(&dword_AA8D98); v54 = **(_DWORD **)(v2 + 492) + 472; v16 = sub_40C190(-170593065); (*(void (__thiscall **)(_DWORD, const CHAR *))v54)(*(_DWORD *)(v2 + 492), v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 492) + 240))(0); if ( !sub_8F71E0(v59, (int)"StoreName", &v58, &v57, &v51, &v52) ) goto LABEL_20; v17 = sub_421050(0); v54 = (int)sub_8F4A20(v58 - v8, v57 - v55, v51, v52, v17, v2, 0, 0); v56 = (volatile LONG **)(*(_DWORD *)v54 + 472); v18 = sub_40C190(1212431172); ((void (__thiscall *)(int, const CHAR *))*v56)(v54, v18); sub_456260(v50); LOBYTE(v61) = 1; sub_456000(v50, v8, v55 + 2); sub_455FF0(v50, v2); sub_456380(v50, v59); if ( !sub_8F71E0(v59, (int)"StoreNameInput", &v58, &v57, &v51, &v52) ) goto LABEL_32; v19 = sub_8FB140(v59, (int)"StoreNameInput", (int)&v58, (int)&v57, v3); sub_8F3EB0(v58 - v8, v57 - v55, (int)v19, v2, 0, 0); v20 = sub_45A900(v58 - v8 + 2, v57 - v55 + 2, v51, v52, v2, 1342177280, 29, 1, 0, 0, 1); *(_DWORD *)(v2 + 496) = v20; sub_459B60(v20, 2); v54 = 0; v56 = (volatile LONG **)(v2 + 512); do { v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(v54 + 1); sprintf(&v60, "Slot%03d", v54 + 1); v21 = sub_8FB140(v59, (int)&v60, (int)&v58, (int)&v57, v3); v22 = sub_8F3EB0(v58 - v8, v57 - v55, (int)v21, v2, 0, 0); v56[20] = v22; *((_DWORD *)v22 + 68) = dword_AD01E8; v23 = sub_40A910(1632467848); sub_8F2EA0((void **)v56[20], v23); v24 = sub_591490(v58 - v8 + 1, v57 - v55 + 1, v54, v2); *v56 = v24; sub_5D5B70(v24, 0, 1); v25 = v56; *((_DWORD *)*v56 + 113) = 0; (*(void (__stdcall **)(signed int))(**v25 + 516))(10); (*(void (__stdcall **)(signed int))(**v56 + 560))(11); v28 = __OFSUB__(v54, 4); v26 = v54 == 4; v27 = v54 - 4 < 0; v29 = v56; *((_DWORD *)*v56 + 68) = dword_ACEC34; if ( !((unsigned __int8)(v27 ^ v28) | v26) ) { (*(void (__stdcall **)(_DWORD))(*v29[20] + 256))(0); v30 = (int *)v56; *((_BYTE *)*v56 + 254) = 0; sub_5D3170(*v30, 0); } ++v56; v54 = (int)v53; } while ( (signed int)v53 < 20 ); if ( !sub_8F71E0(v59, (int)"text01", &v58, &v57, &v51, &v52) ) goto LABEL_32; v31 = sub_421050(0); v32 = sub_8F4A20(v58 - v8, v57 - v55, v51, v52, v31, v2, 0, 0); *(_DWORD *)(v2 + 504) = v32; v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v32 + 472); v33 = sub_40C190(-470295077); (*v53)(*(volatile LONG **)(v2 + 504), v33); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 504) + 256))(0); if ( !sub_8F71E0(v59, (int)"text02", &v58, &v57, &v51, &v52) ) goto LABEL_32; v34 = sub_421050(0); v35 = sub_8F4A20(v58 - v8, v57 - v55, v51, v52, v34, v2, 0, 0); *(_DWORD *)(v2 + 508) = v35; v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v35 + 472); v36 = sub_40A910(1032023721); (*v53)(*(volatile LONG **)(v2 + 508), v36); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 508) + 468))(aIii); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 508) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 508) + 488))(5); if ( !sub_8F71E0(v59, (int)"PriceMy", &v58, &v57, &v51, &v52) ) { LABEL_32: LOBYTE(v61) = 0; sub_4562E0(v50); LABEL_20: v61 = -1; sub_410C00(&v59); return 0; } v37 = sub_421050(0); v38 = sub_8F4A20(v58 - v8, v57 - v55, v51, v52, v37, v2, 0, 0); *(_DWORD *)(v2 + 500) = v38; v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v38 + 472); v39 = sub_40C190(1296202897); (*v53)(*(volatile LONG **)(v2 + 500), v39); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 500) + 256))(0); v56 = sub_8FB140(v59, (int)"OkNor", (int)&v58, (int)&v57, v3); sub_8FB650(v56, v59, (int)"OkClick"); sub_8FB650(v56, v59, (int)"OkOver"); *(_DWORD *)(v2 + 448) = sub_8FE0F0(v58 - v8, v57 - v55, (int)v56, v2, 12, 0, 0); v40 = v56[9]; v41 = *(_DWORD *)(*v40 + 20); v53 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*v40 + 24); v54 = v41; v42 = sub_421050(0); v43 = sub_8F4A20(v58 - v8, v57 - v55, v54, (int)v53, v42, v2, 0, 0); *(_DWORD *)(v2 + 452) = v43; (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(**(_DWORD **)(v2 + 452) + 472); v44 = sub_40C190(945767744); (*v53)(*(volatile LONG **)(v2 + 452), v44); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 452) + 240))(0); v56 = sub_8FB140(v59, (int)"CancelNor", (int)&v58, (int)&v57, v3); sub_8FB650(v56, v59, (int)"CancelClick"); sub_8FB650(v56, v59, (int)"CancelOver"); *(_DWORD *)(v2 + 456) = sub_8FE0F0(v58 - v8, v57 - v55, (int)v56, v2, 13, 0, 0); v45 = v56[9]; v46 = *(_DWORD *)(*v45 + 20); v53 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*v45 + 24); v54 = v46; v47 = sub_421050(0); v48 = sub_8F4A20(v58 - v8, v57 - v55, v54, (int)v53, v47, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); v53 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v48 + 472); v49 = sub_40C190(1295404942); (*v53)(v48, v49); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); *(_DWORD *)(v2 + 460) = sub_4563D0( v50, 0, (int)"CopperBtn01", (int)"CopperBtn01", (int)"CopperBtn01", (int)"CopperBtn01", v3); *(_DWORD *)(v2 + 464) = sub_4563D0( v50, 0, (int)"SilverBtn01", (int)"SilverBtn01", (int)"SilverBtn01", (int)"SilverBtn01", v3); *(_DWORD *)(v2 + 468) = sub_4563D0(v50, 0, (int)"GoldBtn01", (int)"GoldBtn01", (int)"GoldBtn01", (int)"GoldBtn01", v3); *(_DWORD *)(v2 + 472) = sub_4563D0(v50, 0, (int)"GemBtn01", (int)"GemBtn01", (int)"GemBtn01", (int)"GemBtn01", v3); *(_DWORD *)(v2 + 476) = sub_456980( v50, (int)"CopperInput01", (int)&unk_9D709B, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 6, v3, 0); *(_DWORD *)(v2 + 480) = sub_456980( v50, (int)"SilverInput01", (int)&unk_9D70B2, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 6, v3, 0); *(_DWORD *)(v2 + 484) = sub_456980( v50, (int)"GoldInput01", (int)&unk_9D70B3, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 6, v3, 0); *(_DWORD *)(v2 + 488) = sub_456980( v50, (int)"GemInput01", (int)&unk_9D70BA, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 6, v3, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_8D06A0((float *)(v2 + 380), flt_ACCFCC); *(float *)(v2 + 400) = 1.0; LOBYTE(v61) = 0; sub_4562E0(v50); v61 = -1; sub_410C00(&v59); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (005922D0) -------------------------------------------------------- void *__thiscall sub_5922D0(void *this, char a2) { void *v2; // esi v2 = this; sub_58F440(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00592300) -------------------------------------------------------- _DWORD *__thiscall sub_592300(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &PrivateStoreWin::`vftable'; *((_DWORD *)this + 58) = &PrivateStoreWin::`vftable'; v3 = *((_DWORD *)this + 110); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D75D4: using guessed type void *PrivateStoreWin::`vftable'; // 9D75F4: using guessed type void *PrivateStoreWin::`vftable'; //----- (005923A0) -------------------------------------------------------- int __userpurge sub_5923A0@(int a1@, int a2@, unsigned int a3, int a4, unsigned int a5) { int v5; // esi int result; // eax void (__stdcall *v7)(signed int, signed int, signed int, signed int); // eax int v8; // edi char *v9; // eax v5 = a1; result = sub_5D5EA0(a1, a2, a4); if ( *(_DWORD *)(v5 + 380) ) { v7 = *(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v5 + 380) + 464); if ( a5 >= a3 ) v7(255, 255, 255, 255); else v7(255, 0, 0, 255); v8 = **(_DWORD **)(v5 + 380); v9 = sub_7549E0("%d", a5); (*(void (__thiscall **)(_DWORD, char *))(v8 + 472))(*(_DWORD *)(v5 + 380), v9); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v5 + 380) + 256))(1); } return result; } //----- (00592430) -------------------------------------------------------- bool __thiscall sub_592430(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D5860(this, a2, a3, a4) != 0; } //----- (00592570) -------------------------------------------------------- char sub_592570() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ProductWin"); return (char)v0; } //----- (005925A0) -------------------------------------------------------- int __thiscall sub_5925A0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // edi char *v4; // eax v2 = this; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4E3710(v2[126], v2[127]); v3 = *v2[110]; v4 = sub_7549E0("%d", v2[132]); return (*(int (__thiscall **)(_DWORD *, char *))(v3 + 472))(v2[110], v4); } //----- (00592600) -------------------------------------------------------- int __thiscall sub_592600(int this) { _DWORD **v1; // esi int result; // eax if ( *(_BYTE *)(this + 532) ) { v1 = (_DWORD **)(this + 232); if ( *(_DWORD *)(this + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(**(_DWORD **)(this + 236) + 4))(35, 0, v1); if ( v1[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v1[1] + 20))(35, 0, v1); } result = ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v1)[5])(v1, 35, 0, v1); } return result; } //----- (00592650) -------------------------------------------------------- int __cdecl sub_592650(int a1) { unsigned int v1; // ebx __int16 *v2; // eax __int16 v3; // di unsigned int v4; // esi int v5; // eax unsigned int v7; // [esp+4h] [ebp-Ch] __int16 *v8; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v1 = 0; v7 = sub_6BE7C0(); v9 = 0; if ( !v7 ) return 0; do { v2 = sub_6BE770(v1); v3 = *v2; v8 = v2; if ( *v2 != -1 ) { v4 = 0; if ( sub_548AA0() ) { while ( 1 ) { v5 = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v4); if ( *(_WORD *)v5 == v3 ) break; if ( ++v4 >= sub_548AA0() ) goto LABEL_9; } if ( *(_DWORD *)(v5 + 422) == a1 ) v9 += *((_DWORD *)v8 + 1); } } LABEL_9: ++v1; } while ( v1 < v7 ); return v9; } // ACD944: using guessed type int dword_ACD944; //----- (00592740) -------------------------------------------------------- int __thiscall sub_592740(_DWORD **this) { _DWORD **v1; // esi int result; // eax signed int v3; // edi bool v4; // zf int *v5; // eax int v6; // edi const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi int v10; // [esp+8h] [ebp-8h] __int16 v11; // [esp+Ch] [ebp-4h] v1 = this; result = sub_464F50(this[126]); v3 = result; if ( result >= 0 ) { result = sub_464700(v1[126]); if ( v3 < result ) { sub_464B60(v1[126], v3, &v10); result = v10; if ( v10 != -1 ) { if ( sub_6BE790(v10) ) { v4 = v1[59] == 0; v11 = v10; if ( !v4 ) { (*(void (__stdcall **)(signed int, __int16 *, _DWORD **))(*v1[59] + 4))(34, &v11, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, __int16 *, _DWORD **))(*v1[59] + 20))(34, &v11, v1 + 58); } ((void (__thiscall *)(_DWORD **, signed int, __int16 *, _DWORD **))v1[58][5])(v1 + 58, 34, &v11, v1 + 58); v5 = v1[111]; *((_BYTE *)v1 + 532) = 1; v6 = *v5; v7 = sub_40C190(-1531774726); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v6 + 472))(v1[111], v7); (*(void (__stdcall **)(_DWORD))(*v1[126] + 252))(0); (*(void (__stdcall **)(_DWORD))(*v1[127] + 252))(0); (*(void (__stdcall **)(_DWORD))(*v1[127] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[113] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[112] + 240))(0); } else { v8 = v1 + 58; v9 = sub_40C190(624198028); if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v9, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); } } } } return result; } //----- (005928D0) -------------------------------------------------------- int __thiscall sub_5928D0(int this) { int v1; // esi int *v2; // eax int v3; // edi const CHAR *v4; // eax v1 = this; v2 = *(int **)(this + 444); *(_BYTE *)(this + 532) = 0; v3 = *v2; v4 = sub_40C190(-654642698); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 444), v4); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 504) + 252))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 508) + 252))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 508) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 452) + 240))(1); return (*(int (__stdcall **)(signed int))(**(_DWORD **)(v1 + 448) + 240))(1); } //----- (00592960) -------------------------------------------------------- char __thiscall sub_592960(int this) { int v1; // eax int v2; // eax char result; // al v1 = *(_DWORD *)(this + 528); if ( v1 && (v2 = v1 - 1, (*(_DWORD *)(this + 528) = v2) != 0) ) { sub_592740((_DWORD **)this); result = 1; } else { sub_5928D0(this); result = 0; } return result; } //----- (00592990) -------------------------------------------------------- int __cdecl sub_592990(int a1, int a2, int a3) { void *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1C0u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D6D00((void **)v3); *(_DWORD *)v4 = &MaterialItemIcon::`vftable'; *(_DWORD *)(v4 + 232) = &MaterialItemIcon::`vftable'; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9D7B18: using guessed type void *MaterialItemIcon::`vftable'; // 9D7B34: using guessed type void *MaterialItemIcon::`vftable'; //----- (00592AE0) -------------------------------------------------------- int __cdecl sub_592AE0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x21Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ProductionWin::`vftable'; *(_DWORD *)(v2 + 232) = &ProductionWin::`vftable'; *(_DWORD *)(v2 + 524) = 0; *(_DWORD *)(v2 + 528) = 0; *(_DWORD *)(v2 + 344) = 0; *(_BYTE *)(v2 + 532) = 0; *(_BYTE *)(v2 + 536) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D7DA4: using guessed type void *ProductionWin::`vftable'; // 9D7DC4: using guessed type void *ProductionWin::`vftable'; //----- (00592C40) -------------------------------------------------------- signed int __cdecl sub_592C40(_BYTE *a1, int a2) { signed int v2; // ebx __int16 *v3; // eax __int16 v4; // cx __int16 *v5; // eax __int16 v6; // cx __int16 *v7; // eax __int16 v8; // cx __int16 *v9; // eax __int16 v10; // cx __int16 *v11; // eax __int16 v12; // cx __int16 *v13; // eax __int16 v14; // cx __int16 *v15; // eax __int16 v16; // cx _WORD *v17; // eax v2 = 0; if ( a1[134] != 45 ) { v3 = (__int16 *)sub_40C8D0(a1 + 134); if ( v3 ) { v4 = *v3; *(_DWORD *)(a2 + 4) = v3 + 17; *(_WORD *)a2 = v4; *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 166); v2 = 1; if ( a1[170] != 45 ) { v5 = (__int16 *)sub_40C8D0(a1 + 170); if ( v5 ) { v6 = *v5; *(_DWORD *)(a2 + 20) = v5 + 17; *(_WORD *)(a2 + 16) = v6; *(_DWORD *)(a2 + 24) = *(_DWORD *)(a1 + 202); v2 = 2; if ( a1[206] != 45 ) { v7 = (__int16 *)sub_40C8D0(a1 + 206); if ( v7 ) { v8 = *v7; *(_DWORD *)(a2 + 36) = v7 + 17; *(_WORD *)(a2 + 32) = v8; *(_DWORD *)(a2 + 40) = *(_DWORD *)(a1 + 238); v2 = 3; if ( a1[242] != 45 ) { v9 = (__int16 *)sub_40C8D0(a1 + 242); if ( v9 ) { v10 = *v9; *(_DWORD *)(a2 + 52) = v9 + 17; *(_WORD *)(a2 + 48) = v10; *(_DWORD *)(a2 + 56) = *(_DWORD *)(a1 + 274); v2 = 4; if ( a1[278] != 45 ) { v11 = (__int16 *)sub_40C8D0(a1 + 278); if ( v11 ) { v12 = *v11; *(_DWORD *)(a2 + 68) = v11 + 17; *(_WORD *)(a2 + 64) = v12; *(_DWORD *)(a2 + 72) = *(_DWORD *)(a1 + 310); v2 = 5; if ( a1[314] != 45 ) { v13 = (__int16 *)sub_40C8D0(a1 + 314); if ( v13 ) { v14 = *v13; *(_DWORD *)(a2 + 84) = v13 + 17; *(_WORD *)(a2 + 80) = v14; *(_DWORD *)(a2 + 88) = *(_DWORD *)(a1 + 346); v2 = 6; if ( a1[350] != 45 ) { v15 = (__int16 *)sub_40C8D0(a1 + 350); if ( v15 ) { v16 = *v15; *(_DWORD *)(a2 + 100) = v15 + 17; *(_WORD *)(a2 + 96) = v16; *(_DWORD *)(a2 + 104) = *(_DWORD *)(a1 + 382); v2 = 7; if ( a1[386] != 45 ) { v17 = (_WORD *)sub_40C8D0(a1 + 386); if ( v17 ) { *(_WORD *)(a2 + 112) = *v17; *(_DWORD *)(a2 + 116) = v17 + 17; *(_DWORD *)(a2 + 120) = *(_DWORD *)(a1 + 418); v2 = 8; } } } } } } } } } } } } } } } } return v2; } //----- (00592E40) -------------------------------------------------------- char __cdecl sub_592E40(__int16 *a1, _DWORD *a2, char a3, int a4) { __int16 *v4; // ebx int v5; // eax int v6; // esi char *v8; // eax int v9; // edi char *v10; // eax int v11; // [esp-Ch] [ebp-14h] __int16 *v12; // [esp+10h] [ebp+8h] v4 = a1; v5 = sub_40C8D0(a1 + 49); if ( !v5 ) return 0; v6 = v5 + 34; if ( v5 == -34 ) return 0; v12 = sub_6BE790(*a1); v8 = sub_7549E0(" %s", v6); v9 = ((int (__thiscall *)(_DWORD *, char *))loc_466CA0)(a2, v8); v10 = sub_7549E0(" %6d", *(_DWORD *)(v4 + 217)); sub_4661A0(a2, v9, 1, v10); if ( a3 ) goto LABEL_9; if ( !v12 ) { if ( (unsigned int)sub_592650(a4) >= *(_DWORD *)(v4 + 217) ) { v11 = 255; LABEL_10: sub_464BE0(a2, v9, 255, v11, 128); goto LABEL_11; } LABEL_9: v11 = 128; goto LABEL_10; } sub_464BE0(a2, v9, 128, 128, 255); LABEL_11: sub_464B20(a2, v9, (unsigned __int16)*v4); return 1; } //----- (00592F20) -------------------------------------------------------- int __cdecl sub_592F20(int a1, int a2, _DWORD *a3, char a4) { unsigned int v4; // esi _DWORD *v5; // eax int v6; // eax unsigned int v7; // edi int v8; // eax unsigned int v9; // edx int v10; // ecx _DWORD *v11; // eax _DWORD *i; // esi int **v13; // eax int *k; // eax int j; // eax _BYTE *v16; // edi int *v17; // esi _DWORD *v18; // ST08_4 char v20; // [esp+10h] [ebp-40h] void *v21; // [esp+14h] [ebp-3Ch] int v22; // [esp+18h] [ebp-38h] void **v23; // [esp+20h] [ebp-30h] int v24; // [esp+2Ch] [ebp-24h] char v25[4]; // [esp+34h] [ebp-1Ch] int v26; // [esp+38h] [ebp-18h] char *v27; // [esp+3Ch] [ebp-14h] int v28; // [esp+40h] [ebp-10h] int v29; // [esp+4Ch] [ebp-4h] v4 = 0; v28 = 0; v22 = 0; v5 = operator new(0x18u); if ( !v5 ) { v27 = 0; std::exception::exception((std::exception *)&v23, (const char *const *)&v27); v23 = &std::bad_alloc::`vftable'; _CxxThrowException(&v23, &_TI2_AVbad_alloc_std__); } v21 = v5; *v5 = v5; *((_DWORD *)v21 + 1) = v21; *((_DWORD *)v21 + 2) = v21; *((_BYTE *)v21 + 20) = 1; *((_BYTE *)v21 + 21) = 1; v6 = *(_DWORD *)(dword_ACD944 + 56); v29 = 0; if ( v6 ) v7 = *(_DWORD *)(v6 + 40); else v7 = 0; if ( v7 > 0 ) { do { v8 = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v4); if ( v8 && *(_DWORD *)(v8 + 422) == a1 ) { v9 = *(_DWORD *)(v8 + 434); if ( v9 >= 0x3E8 ) { if ( v9 >= 0x2EE0 ) v10 = v9 >= 0x88B8 ? 4 - (v9 < 0x186A0) : 2; else v10 = 1; } else { v10 = 0; } if ( v10 == a2 ) { *(_DWORD *)v25 = *(_DWORD *)(v8 + 434); v26 = v8; sub_4DDBF0(&v20, (int)&v24, v25); } } ++v4; } while ( v4 < v7 ); } if ( v22 ) { v11 = v21; for ( i = *(_DWORD **)v21; i != v21; v11 = v21 ) { if ( sub_592E40((__int16 *)i[4], a3, a4, a1) ) ++v28; if ( !*((_BYTE *)i + 21) ) { v13 = (int **)i[2]; if ( *((_BYTE *)v13 + 21) ) { for ( j = i[1]; !*(_BYTE *)(j + 21); j = *(_DWORD *)(j + 4) ) { if ( i != *(_DWORD **)(j + 8) ) break; i = (_DWORD *)j; } i = (_DWORD *)j; } else { i = (_DWORD *)i[2]; for ( k = *v13; !*((_BYTE *)k + 21); k = (int *)*k ) i = k; } } } v16 = (_BYTE *)v11[1]; v17 = (int *)v11[1]; if ( !v16[21] ) { do { sub_6DA320((void *)v17[2]); v17 = (int *)*v17; operator delete(v16); v16 = v17; } while ( !*((_BYTE *)v17 + 21) ); v11 = v21; } v11[1] = v11; *(_DWORD *)v21 = v21; *((_DWORD *)v21 + 2) = v21; v22 = 0; } v18 = *(_DWORD **)v21; v29 = 1; sub_6CDE90(&v20, (int *)&v27, v18, v21); operator delete(v21); return v28; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACD944: using guessed type int dword_ACD944; //----- (00593140) -------------------------------------------------------- unsigned __int16 *__userpurge sub_593140@(unsigned __int16 *a1@, int *a2@, _BYTE *a3, char a4) { unsigned __int16 *result; // eax unsigned __int16 *v5; // esi int v6; // edi int v7; // edi _DWORD *v8; // eax unsigned __int16 *v9; // esi signed int v10; // eax unsigned int v11; // edi signed int v12; // ebx signed int v13; // esi bool v14; // cf _WORD *v15; // ecx char *v16; // edi int **v17; // esi int v18; // ebx int *v19; // ST14_4 char *v20; // eax void (__stdcall *v21)(int *); // edx int v22; // esi int v23; // edi int v24; // ebx _WORD **v25; // edi signed int v26; // esi signed int v27; // eax _WORD **v28; // esi unsigned __int16 *v29; // edi signed int v30; // ebx _DWORD *v31; // eax signed int v32; // esi int *v33; // ecx int v34; // edi int *v35; // [esp-4h] [ebp-C0h] signed int v36; // [esp+Ch] [ebp-B0h] unsigned __int16 *v37; // [esp+10h] [ebp-ACh] signed int v38; // [esp+10h] [ebp-ACh] unsigned __int16 *v39; // [esp+14h] [ebp-A8h] __int16 v40[4]; // [esp+18h] [ebp-A4h] char v41; // [esp+20h] [ebp-9Ch] int v42[37]; // [esp+24h] [ebp-98h] v39 = a1; result = (unsigned __int16 *)sub_40C8D0(a3 + 98); v5 = result; if ( result ) { v35 = a2; v6 = dword_ACDA70; v37 = (unsigned __int16 *)*result; result = (unsigned __int16 *)(*(int (__thiscall **)(int, unsigned __int16 *))(*(_DWORD *)dword_ACDA70 + 16))( dword_ACDA70, v37); if ( (_BYTE)result ) { result = v37; if ( (unsigned __int16)v37 <= *(_WORD *)(v6 + 200) ) { result = (unsigned __int16 *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v37); if ( *(_DWORD *)result ) { v7 = *(_DWORD *)result; if ( *(_DWORD *)result ) { (*(void (__stdcall **)(unsigned __int16 *))(**((_DWORD **)v39 + 88) + 472))(v5 + 17); (*(void (__stdcall **)(int))(**((_DWORD **)v39 + 89) + 472))(v7 + 380); v8 = sub_6899D0(*v5); v9 = v39; sub_5D5B70(*((_WORD **)v39 + 115), (int)v8, 1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v39 + 115) + 256))(1); v10 = sub_592C40(a3, (int)v40); v36 = v10; if ( v10 > 0 ) { v11 = 0; v12 = v10; do { v13 = 0; v42[v11 / 2] = 0; v14 = 1; do { if ( v14 ) { v15 = (_WORD *)dword_ADA234[v13]; if ( v15 ) { if ( v15[4] == v40[v11] ) { v42[v11 / 2] += (*(int (**)(void))(*(_DWORD *)v15 + 12))(); v10 = v36; } } } v14 = (unsigned int)++v13 < 0xC0; } while ( v13 < 192 ); v11 += 8; --v12; } while ( v12 ); v9 = v39; if ( v10 > 0 ) { v16 = &v41; v17 = (int **)(v39 + 200); v38 = v10; do { (*(void (__stdcall **)(_DWORD, int *))(**(v17 - 10) + 472))(*((_DWORD *)v16 - 1), v35); v18 = **v17; v19 = *v17; v20 = sub_7549E0("%d/%d", *((_DWORD *)v16 + 1), *(_DWORD *)v16); (*(void (__thiscall **)(int *, char *))(v18 + 472))(v19, v20); v21 = *(void (__stdcall **)(int *))(**(v17 - 10) + 468); if ( *((_DWORD *)v16 + 1) >= *(_DWORD *)v16 ) { v21(&dword_AA8C68); v35 = &dword_AA8C68; } else { v21(&dword_AA8C88); v35 = &dword_AA8C88; } (*(void (**)(void))(**v17 + 468))(); ++v17; v16 += 16; --v38; } while ( v38 ); v9 = v39; v10 = v36; } } if ( v10 < 10 ) { v22 = (int)&v9[2 * v10 + 200]; v23 = 10 - v10; do { (*(void (__stdcall **)(void *))(**(_DWORD **)(v22 - 40) + 472))(&unk_9D783F); (*(void (__stdcall **)(void *))(**(_DWORD **)v22 + 472))(&unk_9D784E); v22 += 4; --v23; } while ( v23 ); v9 = v39; } v24 = (int)(v9 + 232); v25 = (_WORD **)(v9 + 232); v26 = 10; do { sub_5D5B70(*v25, 0, 1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v25 + 256))(0); ++v25; --v26; } while ( v26 ); v27 = v36; if ( v36 > 0 ) { v28 = (_WORD **)v24; v29 = (unsigned __int16 *)v40; v30 = v36; do { v31 = sub_6899D0(*v29); sub_5D5B70(*v28, (int)v31, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v28 + 256))(1); ++v28; v29 += 8; --v30; } while ( v30 ); v27 = v36; } v32 = 999999999; if ( v27 > 0 ) { v33 = v42; v34 = v27; do { if ( (signed int)(*v33 / (unsigned int)*(v33 - 1)) < v32 ) v32 = *v33 / (unsigned int)*(v33 - 1); v33 += 4; --v34; } while ( v34 ); } result = v39; *((_DWORD *)v39 + 131) = v32; if ( a4 ) *((_DWORD *)v39 + 132) = v32; } } } } } return result; } // 593140: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACDA70: using guessed type int dword_ACDA70; // 593140: using guessed type int var_98[37]; // 593140: using guessed type __int16 var_A4[4]; //----- (00593480) -------------------------------------------------------- _WORD *__thiscall sub_593480(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // edi _WORD *result; // eax int v5; // edi unsigned int v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // eax int v10; // edi char *v11; // eax void (__stdcall *v12)(_DWORD); // edx unsigned int v13; // edi const CHAR *v14; // eax char *v15; // eax unsigned int v16; // ebx _DWORD *v17; // ecx int v18; // [esp+Ch] [ebp-20h] bool v19; // [esp+14h] [ebp-18h] int v20; // [esp+18h] [ebp-14h] _WORD *v21; // [esp+1Ch] [ebp-10h] unsigned int v22; // [esp+20h] [ebp-Ch] int v23; // [esp+24h] [ebp-8h] unsigned int v24; // [esp+28h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[126]; v21 = 0; v3 = sub_464F50(v2); v18 = v3; if ( v3 >= 0 && v3 < sub_464700((_DWORD *)v1[126]) ) { sub_464B60((_DWORD *)v1[126], v3, &v20); if ( v20 != -1 ) v21 = sub_548EA0(v20); } sub_466A50((_DWORD *)v1[126]); result = sub_5945B0(*((_WORD *)v1 + 267)); if ( result ) { switch ( *(_DWORD *)(result + 67) ) { case 0: v23 = 0; goto LABEL_13; case 1: v23 = 1; goto LABEL_13; case 2: v23 = 2; goto LABEL_13; case 3: v23 = 3; goto LABEL_13; case 4: v23 = 4; goto LABEL_13; case 5: v23 = 5; LABEL_13: v5 = (int)(result + 17); (*(void (__stdcall **)(_WORD *))(*(_DWORD *)v1[87] + 472))(result + 17); v6 = sub_592650(v23); v7 = v6; if ( v6 >= 0x3E8 ) { if ( v6 >= 0x2EE0 ) { if ( v6 >= 0x88B8 ) v22 = 4 - (v6 < 0x186A0); else v22 = 2; } else { v22 = 1; } } else { v22 = 0; } switch ( v22 + 1 ) { case 1u: v24 = 1000; break; case 2u: v24 = 12000; break; case 3u: v24 = 35000; break; case 4u: v24 = 100000; break; default: *(float *)&v24 = 0.0; break; } v8 = sub_7549E0("%s", v5); v9 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[126], v8); sub_464B20((_DWORD *)v1[126], v9, -1); v10 = *(_DWORD *)v1[128]; v11 = sub_7549E0("( %d/%d )", v7, v24); (*(void (__thiscall **)(_DWORD, char *))(v10 + 472))(v1[128], v11); *(float *)&v24 = (double)v7 / (double)v24; if ( *(float *)&v24 > 1.0 ) *(float *)&v24 = 1.0; v12 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[129] + 468); *(float *)&v24 = (double)(unsigned int)v1[130] * *(float *)&v24; v12((signed __int64)*(float *)&v24); v13 = 0; break; default: return result; } while ( 1 ) { v24 = v13 + 1; v14 = sub_40C190(-1561596692); v15 = sub_7549E0(" %d%s", v13 + 1, v14); v16 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[126], v15); sub_464B20((_DWORD *)v1[126], v16, -1); v17 = (_DWORD *)v1[126]; v19 = v13 > v22; if ( v13 > v22 == 1 ) goto LABEL_32; sub_464BE0(v17, v16, 128, 128, 255); if ( !sub_592F20(v23, v13, (_DWORD *)v1[126], v19) ) break; LABEL_33: v13 = v24; if ( v24 >= 5 ) { if ( v21 ) sub_593140((unsigned __int16 *)v1, (int *)v24, v21, 0); if ( v18 >= 0 ) sub_464F90((_DWORD *)v1[126], v18); sub_464DA0((_DWORD *)v1[126], 0, 4); sub_464DA0((_DWORD *)v1[126], 1u, 6); sub_465130((_DWORD *)v1[126]); return (_WORD *)sub_4638F0((_DWORD *)v1[127], *(_DWORD *)(v1[126] + 336)); } } v17 = (_DWORD *)v1[126]; LABEL_32: sub_4665D0(v17, v16); goto LABEL_33; } return result; } //----- (005937F0) -------------------------------------------------------- int __thiscall sub_5937F0(unsigned __int16 *this) { unsigned __int16 *v1; // esi int result; // eax int *v3; // edi _WORD *v4; // eax int v5; // [esp+8h] [ebp-4h] v1 = this; result = sub_464F50(*((_DWORD **)this + 126)); v3 = (int *)result; if ( result >= 0 ) { result = sub_464700(*((_DWORD **)v1 + 126)); if ( (signed int)v3 < result ) { sub_464B60(*((_DWORD **)v1 + 126), (unsigned int)v3, &v5); LOWORD(result) = v5; if ( v5 != -1 || (v3 = (int *)((char *)v3 + 1), sub_464F90(*((_DWORD **)v1 + 126), (int)v3), sub_465130(*((_DWORD **)v1 + 126)), sub_464B60(*((_DWORD **)v1 + 126), (unsigned int)v3, &v5), result = v5, v5 != -1) ) { v4 = sub_548EA0(result); result = (int)sub_593140(v1, v3, v4, 1); } } } return result; } //----- (00593880) -------------------------------------------------------- char __thiscall sub_593880(int this, int a2, int a3) { unsigned int v3; // eax _DWORD **v4; // esi _DWORD **v5; // esi const CHAR *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi LOBYTE(v3) = a2 - 1; v4 = (_DWORD **)this; switch ( a2 ) { case 1: if ( *(_BYTE *)(this + 532) ) { v5 = (_DWORD **)(this + 232); if ( *(_DWORD *)(this + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(this + 236) + 4))(35, 0, this + 232); if ( v5[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v5[1] + 20))(35, 0, v5); } LOBYTE(v3) = ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v5)[5])(v5, 35, 0, v5); } else { if ( *(_DWORD *)(this + 528) ) { LOBYTE(v3) = sub_65C360(dword_AD8EBC); if ( (_BYTE)v3 ) return v3; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 48))() ) { LOBYTE(v3) = sub_592740(v4); return v3; } v6 = sub_40C190(187771224); } else { v6 = sub_40C190(691091320); } v7 = v4 + 58; v8 = v6; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v6, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } LOBYTE(v3) = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); } return v3; case 2: v3 = *(_DWORD *)(this + 528); if ( v3 ) *(_DWORD *)(this + 528) = --v3; return v3; case 3: v3 = *(_DWORD *)(this + 528); if ( v3 < *(_DWORD *)(this + 524) ) *(_DWORD *)(this + 528) = ++v3; return v3; case 4: *(_DWORD *)(*(_DWORD *)(this + 504) + 344) = *(_DWORD *)(*(_DWORD *)(this + 508) + 300); LOBYTE(v3) = sub_465130(*(_DWORD **)(this + 504)); return v3; case 5: LOBYTE(v3) = sub_5937F0((unsigned __int16 *)this); return v3; case 6: LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); return v3; case 7: LOBYTE(v3) = sub_592570(); return v3; default: return v3; } } //----- (00593A20) -------------------------------------------------------- int __thiscall sub_593A20(unsigned __int16 *this) { int result; // eax if ( !*((_BYTE *)this + 532) ) result = sub_5937F0(this); return result; } //----- (00593A30) -------------------------------------------------------- char __thiscall sub_593A30(int this, __int16 a2) { int v2; // esi v2 = this; *(_WORD *)(this + 534) = a2; word_ACF578 = a2; sub_593480((_DWORD *)this); *(_DWORD *)(*(_DWORD *)(v2 + 504) + 344) = 0; sub_464F90(*(_DWORD **)(v2 + 504), 1); sub_465130(*(_DWORD **)(v2 + 504)); if ( !*(_BYTE *)(v2 + 532) ) sub_5937F0((unsigned __int16 *)v2); return sub_8F82A0(&unk_BA6B10, (_DWORD *)v2); } // ACF578: using guessed type __int16 word_ACF578; //----- (00593AA0) -------------------------------------------------------- int __thiscall sub_593AA0(unsigned __int16 *this) { unsigned __int16 *v1; // esi v1 = this; *(_DWORD *)(*((_DWORD *)this + 126) + 344) = 0; sub_593480(this); sub_464F90(*((_DWORD **)v1 + 126), 1); sub_465130(*((_DWORD **)v1 + 126)); if ( !*((_BYTE *)v1 + 532) ) sub_5937F0(v1); return sub_85BED0((_DWORD **)v1, 0.0, 1); } //----- (00593B00) -------------------------------------------------------- char __thiscall sub_593B00(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // eax const CHAR *v12; // eax const CHAR *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax int v16; // eax volatile LONG *v17; // edi const CHAR *v18; // eax volatile LONG *v19; // edi volatile LONG *v20; // edi const CHAR *v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // eax const CHAR *v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // eax int v27; // ecx int v28; // eax int v29; // ecx volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // eax const char *v33; // ebx int *v34; // edi char *v35; // eax volatile LONG **v36; // eax volatile LONG *v37; // eax int v38; // eax int v39; // eax char *v40; // eax volatile LONG *v41; // eax char *v42; // eax _DWORD *v43; // ebx int *v44; // ebx _DWORD *v45; // eax _DWORD *v46; // ebx _DWORD *v47; // eax _DWORD *v48; // ebx volatile LONG **v49; // eax volatile LONG *v50; // eax volatile LONG **v51; // eax int v52; // eax int v53; // eax void (__thiscall ***v54)(_DWORD, signed int); // esi int v55; // [esp+8h] [ebp-ACh] int v56; // [esp+Ch] [ebp-A8h] const char *v57; // [esp+10h] [ebp-A4h] const char *v58; // [esp+14h] [ebp-A0h] const char *v59; // [esp+18h] [ebp-9Ch] float v60; // [esp+1Ch] [ebp-98h] int v61; // [esp+20h] [ebp-94h] void *v62; // [esp+34h] [ebp-80h] int v63; // [esp+38h] [ebp-7Ch] int v64; // [esp+3Ch] [ebp-78h] char v65; // [esp+40h] [ebp-74h] char v66; // [esp+44h] [ebp-70h] int v67; // [esp+48h] [ebp-6Ch] int v68; // [esp+4Ch] [ebp-68h] int v69; // [esp+50h] [ebp-64h] int v70; // [esp+54h] [ebp-60h] int v71; // [esp+58h] [ebp-5Ch] int v72; // [esp+5Ch] [ebp-58h] int v73[5]; // [esp+60h] [ebp-54h] int v74; // [esp+74h] [ebp-40h] int v75; // [esp+78h] [ebp-3Ch] int v76; // [esp+7Ch] [ebp-38h] int v77; // [esp+80h] [ebp-34h] int v78; // [esp+84h] [ebp-30h] void *v79; // [esp+88h] [ebp-2Ch] int v80; // [esp+98h] [ebp-1Ch] unsigned int v81; // [esp+9Ch] [ebp-18h] int v82; // [esp+B0h] [ebp-4h] v2 = (int)this; v78 = 0; v3 = dword_BA6BA0; v82 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ProductWin.nif"); sub_8F66B0(v4, (int)&v78, v3); if ( !v78 ) return 0; v5 = sub_8FB140(v78, (int)"Frame", (int)&v75, (int)&v74, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"ProductionWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v78; v82 = -1; if ( v78 && !InterlockedDecrement((volatile LONG *)(v78 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v73); LOBYTE(v82) = 1; sub_455FF0(v73, v2); sub_456000(v73, v75, v74); sub_456380(v73, v78); v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) { v61 = (int)v8; v60 = COERCE_FLOAT(&v77); v59 = (const char *)&v76; v58 = "Theme"; } else { *(float *)&v61 = 0.0; v60 = COERCE_FLOAT(&v77); v59 = (const char *)&v76; v58 = "Theme"; } v9 = sub_8FB140(v78, (int)v58, (int)v59, SLODWORD(v60), (volatile LONG *)v61); sub_8F3EB0(v76 - v75, v77 - v74, (int)v9, v2, 0, 0); sub_456820(v73, (int)"Panel01", 0); sub_456820(v73, (int)"IconSlot", 0); v10 = sub_456820(v73, (int)"ProductSkill", 0); v11 = sub_456040((int)v10, (int)"ProductSkill", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); *(float *)&v61 = 0.0; v60 = 0.0; *(_DWORD *)(v2 + 348) = v11; v55 = dword_AA8C68; v56 = dword_AA8C6C; v57 = (const char *)dword_AA8C70; v58 = (const char *)dword_AA8C74; v12 = sub_40C190(-654642698); sub_456980(v73, (int)"Product", (int)v12, 0, v55, v56, (int)v57, (int)v58, 5, (volatile LONG *)LODWORD(v60), v61); v55 = dword_AA8C68; v56 = dword_AA8C6C; v57 = (const char *)dword_AA8C70; v58 = (const char *)dword_AA8C74; v13 = sub_40C190(-419021759); sub_456980(v73, (int)"Material", (int)v13, 0, v55, v56, (int)v57, (int)v58, 5, 0, 0); v14 = sub_456980( v73, (int)"ProductName", (int)&unk_9D7817, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(float *)&v61 = 0.0; v60 = 0.0; v59 = 0; *(_DWORD *)(v2 + 352) = v14; v15 = sub_456980( v73, (int)"ProductItemIntro", (int)&unk_9D7821, 1, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, (int)v59, (volatile LONG *)LODWORD(v60), v61); *(float *)&v61 = 0.0; v60 = 0.0; v59 = "ClsClick"; v58 = "ClsOver"; *(_DWORD *)(v2 + 356) = v15; v16 = *((_DWORD *)v15 + 72); v57 = "ClsNor"; v56 = 6; *(_BYTE *)(v16 + 284) = 1; sub_4563D0(v73, v56, (int)v57, (int)v58, (int)v59, SLODWORD(v60), (volatile LONG *)v61); v17 = sub_4563D0(v73, 6, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v57 = (const char *)dword_AA8C68; v58 = (const char *)dword_AA8C6C; v59 = (const char *)dword_AA8C70; v60 = *(float *)&dword_AA8C74; v18 = sub_40C190(-1633376017); sub_456040((int)v17, (int)v18, (char)v57, (int)v58, (int)v59, SLODWORD(v60), 5); v19 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v78 + 72))("HelpLinkNor") ) sub_4563D0(v73, 7, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v19); v20 = sub_4563D0(v73, 1, (int)"ProductNor", (int)"ProductOver", (int)"ProductClick", 0, 0); v57 = (const char *)dword_AA8C68; v58 = (const char *)dword_AA8C6C; v59 = (const char *)dword_AA8C70; v60 = *(float *)&dword_AA8C74; v21 = sub_40C190(-654642698); v22 = sub_456040((int)v20, (int)v21, (char)v57, (int)v58, (int)v59, SLODWORD(v60), 5); *(float *)&v61 = 0.0; v60 = 0.0; v59 = "NextNumClick"; v58 = "NextNumOver"; v57 = "NextNumNor"; v56 = 3; *(_DWORD *)(v2 + 444) = v22; v23 = sub_4563D0(v73, v56, (int)v57, (int)v58, (int)v59, SLODWORD(v60), (volatile LONG *)v61); *(float *)&v61 = 0.0; v60 = 0.0; v59 = "PreNumClick"; v58 = "PreNumOver"; v57 = "PreNumNor"; v56 = 2; *(_DWORD *)(v2 + 448) = v23; *(_DWORD *)(v2 + 452) = sub_4563D0(v73, v56, (int)v57, (int)v58, (int)v59, SLODWORD(v60), (volatile LONG *)v61); v57 = (const char *)dword_AA8D98; v58 = (const char *)dword_AA8D9C; v59 = (const char *)dword_AA8DA0; v60 = *(float *)&dword_AA8DA4; v24 = sub_40C190(-370806713); sub_456760(v73, (int)"WinTitle", (int)v24, (char)v57, (int)v58, (int)v59, SLODWORD(v60), 5); sub_456820(v73, (int)"Fill_Skill_Panel", 0); sub_456820(v73, (int)"Fill_Skill_Back", 0); v25 = sub_456820(v73, (int)"Fill_Skill", 0); v61 = 5; *(_DWORD *)(v2 + 516) = v25; v26 = sub_456040((int)v25, (int)"Fill_Skill", dword_AA8CB8, dword_AA8CBC, dword_AA8CC0, dword_AA8CC4, v61); v27 = *(_DWORD *)(v2 + 516); *(_DWORD *)(v2 + 512) = v26; v28 = (*(int (**)(void))(*(_DWORD *)v27 + 144))(); v29 = *(_DWORD *)(v2 + 516); *(_DWORD *)(v2 + 520) = v28; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v29 + 468))(0); v30 = sub_8FB140(v78, (int)"TargetSlot", (int)&v76, (int)&v77, 0); v31 = sub_8F3EB0(v76 - v75, v77 - v74, (int)v30, v2, 0, 0); v32 = sub_5D6E20(3, 3, (int)v31); *(_DWORD *)(v2 + 460) = v32; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 256))(v32, 0); sub_5D5420(*(_DWORD **)(v2 + 460), 0); *(_DWORD *)(*(_DWORD *)(v2 + 460) + 272) = dword_ACEC34; v33 = (const char *)1; v34 = (int *)(v2 + 464); v71 = 10; do { *(float *)&v61 = 0.0; v60 = COERCE_FLOAT(&v77); v59 = (const char *)&v76; v58 = v33; v72 = v78; v35 = sub_7549E0("MaterialSlot%02d", v33); v36 = sub_8FB140(v72, (int)v35, (int)v59, SLODWORD(v60), (volatile LONG *)v61); v37 = sub_8F3EB0(v76 - v75, v77 - v74, (int)v36, v2, 0, 0); v38 = sub_592990(1, 1, (int)v37); *v34 = v38; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v38 + 256))(v38, 0); sub_5D5420((_DWORD *)*v34, 0); v39 = *v34; v61 = 1; v60 = 0.0; v59 = 0; *(_DWORD *)(v39 + 272) = dword_ACEC34; v55 = dword_AA8C68; v56 = dword_AA8C6C; v57 = (const char *)dword_AA8C70; v58 = (const char *)dword_AA8C74; v40 = sub_7549E0("MaterialIntro%02d", v33); v41 = sub_456980( v73, (int)v40, (int)&unk_9D7822, 1, v55, v56, (int)v57, (int)v58, (int)v59, (volatile LONG *)LODWORD(v60), v61); *(float *)&v61 = 0.0; v60 = 0.0; v59 = 0; *(v34 - 26) = (int)v41; v55 = dword_AA8C68; v56 = dword_AA8C6C; v57 = (const char *)dword_AA8C70; v58 = (const char *)dword_AA8C74; v42 = sub_7549E0("MaterialIntroNum%02d", v33); *(v34 - 16) = (int)sub_456980( v73, (int)v42, (int)&unk_9D7823, 1, v55, v56, (int)v57, (int)v58, (int)v59, (volatile LONG *)LODWORD(v60), v61); ++v34; ++v33; --v71; } while ( v71 ); *(_DWORD *)(v2 + 440) = sub_456980( v73, (int)"Num", (int)&unk_9D783E, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v62 = 0; v63 = 0; v64 = 0; v66 = 0; v67 = 0; v68 = 0; v69 = 0; v70 = 0; LOBYTE(v82) = 2; v43 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v62, 1); *v43 = 1; v61 = 12; v60 = COERCE_FLOAT("ColumnBarNor"); v43[1] = v78; v81 = 15; v80 = 0; LOBYTE(v79) = 0; sub_4018E0(&v79, (void *)LODWORD(v60), v61); v44 = v43 + 18; LOBYTE(v82) = 3; sub_40B060(v44, (const void **)&v79); LOBYTE(v82) = 2; if ( v81 >= 0x10 ) operator delete(v79); v81 = 15; v80 = 0; LOBYTE(v79) = 0; sub_4018E0(&v79, "ColumnBarClick", 0xEu); LOBYTE(v82) = 4; sub_40B060(v44, (const void **)&v79); LOBYTE(v82) = 2; if ( v81 >= 0x10 ) operator delete(v79); v81 = 15; v80 = 0; LOBYTE(v79) = 0; sub_4018E0(&v79, "ColumnBarOver", 0xDu); LOBYTE(v82) = 5; sub_40B060(v44, (const void **)&v79); LOBYTE(v82) = 2; if ( v81 >= 0x10 ) operator delete(v79); v45 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v62, 2); v61 = 6; v46 = v45; v60 = COERCE_FLOAT("Column"); *v45 = 2; v81 = 15; v80 = 0; LOBYTE(v79) = 0; sub_4018E0(&v79, (void *)LODWORD(v60), v61); LOBYTE(v82) = 6; sub_40B060(v46 + 18, (const void **)&v79); LOBYTE(v82) = 2; if ( v81 >= 0x10 ) operator delete(v79); v61 = 2; v46[1] = v78; v47 = (_DWORD *)((int (__thiscall *)(void **, int))loc_466F40)(&v62, v61); v61 = 15; v48 = v47; v60 = COERCE_FLOAT("ProductSkillTab"); *v47 = 2; v81 = 15; v80 = 0; LOBYTE(v79) = 0; sub_4018E0(&v79, (void *)LODWORD(v60), v61); LOBYTE(v82) = 7; sub_40B060(v48 + 18, (const void **)&v79); LOBYTE(v82) = 2; if ( v81 >= 0x10 ) operator delete(v79); *(float *)&v61 = 0.0; v81 = 15; v80 = 0; LOBYTE(v79) = 0; v48[1] = v78; sub_466680(&v62, (volatile LONG *)v61); v49 = sub_8FB140(v78, (int)"ColumnBox", (int)&v76, (int)&v77, 0); v50 = sub_466330(v76 - v75, v77 - v74, (int)v49, *(float *)&v2, (int **)&v62, 1, 0); *(_DWORD *)(v2 + 504) = v50; *((_DWORD *)v50 + 88) = 5; v51 = sub_8FB140(v78, (int)"SlideBar_SlideBtnMiddle", (int)&v76, (int)&v77, 0); v52 = sub_464310(v78, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v51, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 508) = v52; *(float *)&v61 = 0.5; *(_DWORD *)(v52 + 312) = 4; v53 = *(_DWORD *)(v2 + 508); v60 = 0.0; *(_DWORD *)(v53 + 304) = 1; (*(void (__thiscall **)(int, int, int, _DWORD, int))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, LODWORD(v60), v61); LOBYTE(v82) = 1; if ( v62 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v62, v63, &v65, v72); operator delete(v62); } v62 = 0; v63 = 0; v64 = 0; LOBYTE(v82) = 0; sub_4562E0(v73); v54 = (void (__thiscall ***)(_DWORD, signed int))v78; v82 = -1; if ( v78 && !InterlockedDecrement((volatile LONG *)(v78 + 4)) && v54 ) (**v54)(v54, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00594540) -------------------------------------------------------- void *__thiscall sub_594540(void *this, char a2) { void *v2; // esi v2 = this; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00594570) -------------------------------------------------------- void *__thiscall sub_594570(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ProductionWin::`vftable'; *((_DWORD *)this + 58) = &ProductionWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D7DA4: using guessed type void *ProductionWin::`vftable'; // 9D7DC4: using guessed type void *ProductionWin::`vftable'; //----- (005945B0) -------------------------------------------------------- _WORD *__cdecl sub_5945B0(__int16 a1) { _WORD *result; // eax unsigned int v2; // esi if ( a1 == -1 ) return 0; v2 = 0; if ( !sub_548AC0() ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD950 + 4), v2); if ( *result == a1 ) break; if ( ++v2 >= sub_548AC0() ) return 0; } return result; } // ACD950: using guessed type int dword_ACD950; //----- (00594630) -------------------------------------------------------- _DWORD *__thiscall sub_594630(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ProductSkillSelectWin::`vftable'; v1[58] = &ProductSkillSelectWin::`vftable'; v2 = (int)(v1 + 94); v1[91] = &PgWinDrop::`vftable'; v1[93] = 0; *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; v1[92] = v1 + 94; v1[90] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9D8264: using guessed type void *ProductSkillSelectWin::`vftable'; // 9D8284: using guessed type void *ProductSkillSelectWin::`vftable'; //----- (005946C0) -------------------------------------------------------- char __thiscall sub_5946C0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG *v8; // eax volatile LONG **v9; // eax char v10; // ST48_1 int v11; // ST4C_4 int v12; // ST50_4 int v13; // ST54_4 const CHAR *v14; // eax volatile LONG *v15; // edi char v16; // ST48_1 int v17; // ST4C_4 int v18; // ST50_4 int v19; // ST54_4 const CHAR *v20; // eax volatile LONG *v21; // edi char v22; // ST48_1 int v23; // ST4C_4 int v24; // ST50_4 int v25; // ST54_4 const CHAR *v26; // eax volatile LONG *v27; // edi void (__thiscall ***v28)(_DWORD, signed int); // esi volatile LONG *v29; // edi _WORD *v30; // eax char v31; // ST40_1 int v32; // ST44_4 int v33; // ST48_4 int v34; // ST4C_4 const CHAR *v35; // eax volatile LONG *v36; // edi _WORD *v37; // eax char v38; // ST40_1 int v39; // ST44_4 int v40; // ST48_4 int v41; // ST4C_4 const CHAR *v42; // eax volatile LONG *v43; // edi _WORD *v44; // eax char v45; // ST40_1 int v46; // ST44_4 int v47; // ST48_4 int v48; // ST4C_4 const CHAR *v49; // eax volatile LONG *v50; // edi _WORD *v51; // eax char v52; // ST40_1 int v53; // ST44_4 int v54; // ST48_4 int v55; // ST4C_4 const CHAR *v56; // eax volatile LONG *v57; // edi _WORD *v58; // eax char v59; // ST40_1 int v60; // ST44_4 int v61; // ST48_4 int v62; // ST4C_4 const CHAR *v63; // eax int v64[5]; // [esp+6Ch] [ebp-3Ch] char v65; // [esp+80h] [ebp-28h] char v66; // [esp+84h] [ebp-24h] int v67; // [esp+88h] [ebp-20h] int v68; // [esp+8Ch] [ebp-1Ch] int v69; // [esp+90h] [ebp-18h] int v70; // [esp+94h] [ebp-14h] int v71; // [esp+98h] [ebp-10h] int v72; // [esp+A4h] [ebp-4h] v2 = (int)this; v71 = 0; v3 = dword_BA6BA0; v72 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ProductSkillSelect.nif"); sub_8F66B0(v4, (int)&v71, v3); if ( !v71 ) return 0; v5 = sub_8FB140(v71, (int)"Frame", (int)&v67, (int)&v68, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"ProductSelectWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v71; v72 = -1; if ( v71 && !InterlockedDecrement((volatile LONG *)(v71 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v64); LOBYTE(v72) = 1; sub_455FF0(v64, v2); sub_456000(v64, v67, v68); sub_456380(v64, v71); sub_456820(v64, (int)"Panel01", 0); v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v71, (int)"Theme", (int)&v69, (int)&v70, v8); else v9 = sub_8FB140(v71, (int)"Theme", (int)&v69, (int)&v70, 0); sub_8F3EB0(v69 - v67, v70 - v68, (int)v9, v2, 0, 0); sub_456820(v64, (int)"IconSlot", 0); sub_456820(v64, (int)"Plane", 0); v10 = dword_AA8D98; v11 = dword_AA8D9C; v12 = dword_AA8DA0; v13 = dword_AA8DA4; v14 = sub_40C190(-385158928); sub_456760(v64, (int)"WinTitle", (int)v14, v10, v11, v12, v13, 5); sub_456820(v64, (int)"IconSlotBox01", 0); sub_456820(v64, (int)"IconSlotBox02", 0); sub_456820(v64, (int)"IconSlotBox03", 0); sub_456820(v64, (int)"IconSlotBox04", 0); sub_456820(v64, (int)"IconSlotBox05", 0); sub_456820(v64, (int)"IconSlotBox06", 0); sub_456820(v64, (int)"IconSlotBox07", 0); sub_4564D0(v64, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); v15 = sub_4563D0(v64, 1, (int)"Btn01Nor", (int)"Btn01Over", (int)"Btn01Click", 0, 0); v16 = dword_AA8C68; v17 = dword_AA8C6C; v18 = dword_AA8C70; v19 = dword_AA8C74; v20 = sub_40C190(1331644831); sub_456040((int)v15, (int)v20, v16, v17, v18, v19, 5); v21 = sub_4563D0(v64, 2, (int)"Btn02Nor", (int)"Btn02Over", (int)"Btn02Click", 0, 0); v22 = dword_AA8C68; v23 = dword_AA8C6C; v24 = dword_AA8C70; v25 = dword_AA8C74; v26 = sub_40C190(-2002610207); sub_456040((int)v21, (int)v26, v22, v23, v24, v25, 5); v27 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v71 + 72))("HelpLinkNor") ) sub_4563D0(v64, 5, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v27); if ( sub_8F71E0(v71, (int)"IconSlot00", &v69, &v70, &v65, &v66) ) { *(_DWORD *)(v2 + 348) = sub_5D2DD0(v69 - v67, v70 - v68, v2); *(_DWORD *)(v2 + 344) = sub_456980( v64, (int)"IconTxt01", (int)&unk_9D8006, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); if ( !sub_8F71E0(v71, (int)"IconSlot01", &v69, &v70, &v65, &v66) ) goto LABEL_41; *(_DWORD *)(v2 + 356) = sub_5D2DD0(v69 - v67, v70 - v68, v2); *(_DWORD *)(v2 + 352) = sub_456980( v64, (int)"IconTxt02", (int)&unk_9D8007, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); if ( !sub_8F71E0(v71, (int)"IconSlot02", &v69, &v70, &v65, &v66) ) goto LABEL_41; v29 = sub_5D84B0(v69 - v67, v70 - v68, v2); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 516))(v29, 3); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 560))(v29, 4); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 520))(v29, 29100); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 564))(v29, 29100); sub_5D8320(v29, 29100); v30 = sub_5945B0(29100); if ( v30 ) sub_456980( v64, (int)"IconTxt03", (int)(v30 + 17), 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v31 = dword_AA8C68; v32 = dword_AA8C6C; v33 = dword_AA8C70; v34 = dword_AA8C74; v35 = sub_40C190(-2030384674); sub_456980(v64, (int)"IconTxt03_", (int)v35, 0, v31, v32, v33, v34, 1, 0, 0); if ( !sub_8F71E0(v71, (int)"IconSlot03", &v69, &v70, &v65, &v66) ) goto LABEL_41; v36 = sub_5D84B0(v69 - v67, v70 - v68, v2); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 516))(v36, 3); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 560))(v36, 4); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 520))(v36, 29101); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 564))(v36, 29101); sub_5D8320(v36, 29101); v37 = sub_5945B0(29101); if ( v37 ) sub_456980( v64, (int)"IconTxt04", (int)(v37 + 17), 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v38 = dword_AA8C68; v39 = dword_AA8C6C; v40 = dword_AA8C70; v41 = dword_AA8C74; v42 = sub_40C190(-2119056669); sub_456980(v64, (int)"IconTxt04_", (int)v42, 0, v38, v39, v40, v41, 1, 0, 0); if ( !sub_8F71E0(v71, (int)"IconSlot04", &v69, &v70, &v65, &v66) ) goto LABEL_41; v43 = sub_5D84B0(v69 - v67, v70 - v68, v2); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 516))(v43, 3); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 560))(v43, 4); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 520))(v43, 29102); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 564))(v43, 29102); sub_5D8320(v43, 29102); v44 = sub_5945B0(29102); if ( v44 ) sub_456980( v64, (int)"IconTxt05", (int)(v44 + 17), 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v45 = dword_AA8C68; v46 = dword_AA8C6C; v47 = dword_AA8C70; v48 = dword_AA8C74; v49 = sub_40C190(-2064856604); sub_456980(v64, (int)"IconTxt05_", (int)v49, 0, v45, v46, v47, v48, 1, 0, 0); if ( !sub_8F71E0(v71, (int)"IconSlot05", &v69, &v70, &v65, &v66) ) goto LABEL_41; v50 = sub_5D84B0(v69 - v67, v70 - v68, v2); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 516))(v50, 3); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 560))(v50, 4); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 520))(v50, 29104); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 564))(v50, 29104); sub_5D8320(v50, 29104); v51 = sub_5945B0(29104); if ( v51 ) sub_456980( v64, (int)"IconTxt06", (int)(v51 + 17), 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v52 = dword_AA8C68; v53 = dword_AA8C6C; v54 = dword_AA8C70; v55 = dword_AA8C74; v56 = sub_40C190(-855524311); sub_456980(v64, (int)"IconTxt06_", (int)v56, 0, v52, v53, v54, v55, 1, 0, 0); if ( sub_8F71E0(v71, (int)"IconSlot06", &v69, &v70, &v65, &v66) ) { v57 = sub_5D84B0(v69 - v67, v70 - v68, v2); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 516))(v57, 3); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 560))(v57, 4); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 520))(v57, 29105); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 564))(v57, 29105); sub_5D8320(v57, 29105); v58 = sub_5945B0(29105); if ( v58 ) sub_456980( v64, (int)"IconTxt07", (int)(v58 + 17), 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v59 = dword_AA8C68; v60 = dword_AA8C6C; v61 = dword_AA8C70; v62 = dword_AA8C74; v63 = sub_40C190(-889665308); sub_456980(v64, (int)"IconTxt07_", (int)v63, 0, v59, v60, v61, v62, 1, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.5); LOBYTE(v72) = 0; sub_4562E0(v64); v72 = -1; sub_410C00(&v71); result = 1; } else { LABEL_41: LOBYTE(v72) = 0; sub_4562E0(v64); v72 = -1; sub_410C00(&v71); result = 0; } } else { LOBYTE(v72) = 0; sub_4562E0(v64); v28 = (void (__thiscall ***)(_DWORD, signed int))v71; v72 = -1; if ( v71 && !InterlockedDecrement((volatile LONG *)(v71 + 4)) && v28 ) (**v28)(v28, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00595190) -------------------------------------------------------- __int16 __thiscall sub_595190(int **this, unsigned __int16 a2, int a3) { _WORD *v3; // eax int **v4; // edi LOWORD(v3) = a2; v4 = this; if ( a2 < 2u ) { sub_5D29F0(this[2 * a2 + 87], a3); v3 = sub_5945B0(a3); if ( v3 ) LOWORD(v3) = (*(int (__stdcall **)(_WORD *))(*v4[2 * a2 + 86] + 472))(v3 + 17); } return (signed __int16)v3; } //----- (005951E0) -------------------------------------------------------- char __thiscall sub_5951E0(_DWORD *this, int a2, _BYTE *a3, int a4) { _WORD *v4; // eax _DWORD *v5; // esi int v6; // ecx __int16 v7; // di __int16 v8; // bx int v9; // ecx signed int v10; // edi int v11; // ecx signed int v12; // edi int v13; // ecx LOBYTE(v4) = a2; v5 = this; switch ( a2 ) { case 3: v12 = -1; if ( a4 ) v13 = a4 - 232; else v13 = 0; if ( v5[29] == v13 ) v12 = 0; if ( a4 ) v4 = (_WORD *)(a4 - 232); else v4 = 0; if ( (_WORD *)v5[31] == v4 ) { v12 = 1; } else if ( v12 < 0 || v12 >= 2 ) { return (char)v4; } LOWORD(v4) = sub_5D2680(v5[2 * v12 + 29]); if ( (_WORD)v4 != -1 && *(_BYTE *)(v5[2 * v12 + 29] + 254) ) { v5[38] = 12; v5[40] = 1; v5[41] = (unsigned __int16)sub_5D2680(v5[2 * v12 + 29]); v5[39] = 0; v5[35] = v5 - 58; dword_BA6BCC = (int)(v5 + 33); LOBYTE(v4) = sub_595960((_DWORD **)v5 - 58, v12); } break; case 22: v10 = -1; if ( a4 ) v11 = a4 - 232; else v11 = 0; if ( v5[29] == v11 ) v10 = 0; if ( a4 ) v4 = (_WORD *)(a4 - 232); else v4 = 0; if ( (_WORD *)v5[31] == v4 ) { v10 = 1; } else if ( v10 < 0 || v10 >= 2 ) { return (char)v4; } v4 = *(_WORD **)a3; if ( *(_DWORD *)(*(_DWORD *)a3 + 8) == 12 && *((_DWORD *)v4 + 4) == 1 ) { a3[12] = 1; v4 = sub_5945B0(*((_DWORD *)v4 + 5)); if ( v4 ) LOBYTE(v4) = (*(int (__stdcall **)(_WORD *))(*(_DWORD *)v5[2 * v10 + 28] + 472))(v4 + 17); } break; case 27: v4 = (_WORD *)(a4 ? a4 - 232 : 0); if ( v4 == (_WORD *)this[32] ) { if ( !*(_DWORD *)a3 ) { v6 = this[29]; v7 = -1; v8 = -1; if ( *(_BYTE *)(v6 + 254) ) v7 = sub_5D2680(v6); v9 = v5[31]; if ( *(_BYTE *)(v9 + 254) ) v8 = sub_5D2680(v9); if ( v7 != -1 ) { LOWORD(a4) = v7; sub_6F3D10(&off_AB7F2C, 18, 34, &a4, 2u); } if ( v8 != -1 ) { LOWORD(a4) = v8; sub_6F3D10(&off_AB7F2C, 18, 34, &a4, 2u); } } LOBYTE(v4) = sub_8F2BC0(v5 - 58, 1, 0, 0); } break; } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; // BA6BCC: using guessed type int dword_BA6BCC; //----- (00595400) -------------------------------------------------------- char __thiscall sub_595400(int this, int a2, int a3) { _DWORD *v3; // eax int v4; // ebx signed int v5; // esi int *v6; // edi int v7; // ecx signed __int16 v8; // di signed __int16 v9; // si int v10; // ecx _WORD *v11; // ST0C_4 _WORD *v12; // eax char *v13; // eax char *v14; // edx char v15; // cl char *v16; // eax char *v17; // edx char v18; // cl int v19; // ST0C_4 char *v20; // eax volatile LONG *v21; // eax char v23[128]; // [esp+4h] [ebp-84h] LOBYTE(v3) = a2 - 1; v4 = this; switch ( a2 ) { case 1: v7 = *(_DWORD *)(this + 348); v23[0] = 0; v8 = -1; v9 = -1; if ( *(_BYTE *)(v7 + 254) ) v8 = sub_5D2680(v7); v10 = *(_DWORD *)(v4 + 356); if ( *(_BYTE *)(v10 + 254) ) v9 = sub_5D2680(v10); if ( v8 != -1 ) { if ( v9 == -1 ) { v16 = (char *)(sub_5945B0(v8) + 17); v17 = (char *)(v23 - v16); do { v18 = *v16; v16[(_DWORD)v17] = *v16; ++v16; } while ( v18 ); } else { v11 = sub_5945B0(v9) + 17; v12 = sub_5945B0(v8); sprintf(v23, "%s & %s", v12 + 17, v11); } LABEL_22: v19 = (*(int (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 84))(v23); v20 = (char *)sub_40C190(1941495008); v21 = sub_462CA0(2, v20, v19); *(_DWORD *)(v4 + 360) = v21; LOBYTE(v3) = (**((int (__cdecl ***)(int))v21 + 58))(v4 + 232); return (char)v3; } if ( v9 != -1 ) { v13 = (char *)(sub_5945B0(v9) + 17); v14 = (char *)(v23 - v13); do { v15 = *v13; v13[(_DWORD)v14] = *v13; ++v13; } while ( v15 ); goto LABEL_22; } LOBYTE(v3) = sub_8F2BC0((volatile LONG *)v4, 1, 0, 0); return (char)v3; case 2: LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); return (char)v3; case 3: LOBYTE(v3) = a3; *(_DWORD *)(this + 384) = 12; *(_DWORD *)(this + 392) = 1; *(_DWORD *)(this + 396) = (unsigned __int16)a3; *(_DWORD *)(this + 388) = 0; *(_DWORD *)(this + 372) = this; dword_BA6BCC = this + 364; return (char)v3; case 4: v5 = 0; v6 = (int *)(this + 348); while ( 1 ) { if ( *(_BYTE *)(*v6 + 254) ) { LOWORD(v3) = sub_5D2680(*v6); if ( (_WORD)v3 == -1 ) break; } ++v5; v6 += 2; if ( v5 >= 2 ) return (char)v3; } LOBYTE(v3) = sub_595190((int **)v4, v5, a3); return (char)v3; case 5: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "ProductSkillSelect"); return (char)v3; default: return (char)v3; } } // BA6BCC: using guessed type int dword_BA6BCC; // 595400: using guessed type char var_84[128]; //----- (00595680) -------------------------------------------------------- char __thiscall sub_595680(char *this) { char *v1; // ebx signed int v2; // ecx int v3; // esi int v4; // edi const CHAR *v5; // eax signed int v6; // esi unsigned int v7; // esi _WORD *v8; // eax int v9; // ecx int v10; // eax int v12; // [esp+Ch] [ebp-8h] signed int v13; // [esp+Ch] [ebp-8h] signed int v14; // [esp+10h] [ebp-4h] signed int v15; // [esp+10h] [ebp-4h] v1 = this; v2 = 0; v14 = 0; v12 = (int)(v1 + 348); do { *(_BYTE *)(*(_DWORD *)v12 + 254) = 1; if ( (unsigned __int16)v2 < 2u ) { v3 = (unsigned __int16)v2; sub_5D2940(*(_DWORD **)&v1[8 * (unsigned __int16)v2 + 348]); v4 = **(_DWORD **)&v1[8 * v3 + 344]; v5 = sub_40C190(2112800989); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)&v1[8 * v3 + 344], v5); v2 = v14; } v12 += 8; v14 = ++v2; } while ( v2 < 2 ); v6 = 0; v13 = 0; v15 = 29100; do { if ( sub_6BE900((unsigned __int16)v15) ) { if ( v6 >= 2 ) break; if ( (unsigned __int16)v6 < 2u ) { sub_5D29F0(*(int **)&v1[8 * (unsigned __int16)v6 + 348], (unsigned __int16)v15); if ( (_WORD)v15 != -1 ) { v7 = 0; if ( sub_548AC0() ) { while ( 1 ) { v8 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD950 + 4), v7); if ( *v8 == (_WORD)v15 ) break; if ( ++v7 >= sub_548AC0() ) goto LABEL_15; } (*(void (__stdcall **)(_WORD *))(**(_DWORD **)&v1[8 * (unsigned __int16)v13 + 344] + 472))(v8 + 17); } LABEL_15: v6 = v13; } } v9 = *(_DWORD *)&v1[8 * v6++ + 348]; *(_BYTE *)(v9 + 254) = 0; v13 = v6; } ++v15; } while ( v15 < 29200 ); v10 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v10 ) LOBYTE(v10) = sub_4A8140(v10, 172); return v10; } // ACD950: using guessed type int dword_ACD950; //----- (005957E0) -------------------------------------------------------- volatile LONG *__cdecl sub_5957E0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_594630(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00595910) -------------------------------------------------------- void *__thiscall sub_595910(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ProductSkillSelectWin::`vftable'; *((_DWORD *)this + 58) = &ProductSkillSelectWin::`vftable'; *((_DWORD *)this + 94) = &DropContents::`vftable'; *((_DWORD *)this + 91) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9D8264: using guessed type void *ProductSkillSelectWin::`vftable'; // 9D8284: using guessed type void *ProductSkillSelectWin::`vftable'; //----- (00595960) -------------------------------------------------------- unsigned __int16 __thiscall sub_595960(_DWORD **this, unsigned __int16 a2) { unsigned __int16 result; // ax _DWORD **v3; // edi int v4; // ebx const CHAR *v5; // eax result = a2; v3 = this; if ( a2 < 2u ) { sub_5D2940(this[2 * a2 + 87]); v4 = *v3[2 * a2 + 86]; v5 = sub_40C190(2112800989); result = (*(int (__thiscall **)(_DWORD *, const CHAR *))(v4 + 472))(v3[2 * a2 + 86], v5); } return result; } //----- (005959B0) -------------------------------------------------------- int __thiscall sub_5959B0(float *this, unsigned __int8 a2) { int result; // eax result = a2; this[95] = (double)a2 * 60.0; return result; } //----- (005959D0) -------------------------------------------------------- void __thiscall sub_5959D0(float *this, float a2) { this[96] = a2; } //----- (005959E0) -------------------------------------------------------- char __thiscall sub_5959E0(_DWORD *this) { return sub_8F86A0(&unk_BA6B10, this - 86); } //----- (00595A80) -------------------------------------------------------- LONG __thiscall sub_595A80(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &RebirthMenuWin::`vftable'; this[58] = &RebirthMenuWin::`vftable'; this[86] = &RebirthMenuWin::`vftable'; `eh vector destructor iterator'(this + 88, 4u, 3, sub_410C00); sub_645400(v1 + 86); return sub_8F10F0(v1); } // 9D852C: using guessed type void *RebirthMenuWin::`vftable'; // 9D8538: using guessed type void *RebirthMenuWin::`vftable'; // 9D8554: using guessed type void *RebirthMenuWin::`vftable'; //----- (00595B10) -------------------------------------------------------- char __thiscall sub_595B10(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax int v11; // eax int v12; // edi int v13; // ebx int v14; // ST24_4 int v15; // ST20_4 int v16; // eax volatile LONG *v17; // eax int v18; // ebx int *v19; // ebx int v20; // edi const CHAR *v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // ST28_4 volatile LONG *v24; // edi int v25; // ST24_4 int v26; // ST20_4 int v27; // eax volatile LONG *v28; // eax int v29; // edi const CHAR *v30; // eax volatile LONG **v31; // edi volatile LONG *v32; // ST28_4 volatile LONG *v33; // edi int v34; // ST24_4 int v35; // ST20_4 int v36; // eax volatile LONG *v37; // eax int v38; // edi const CHAR *v39; // eax void (__thiscall ***v40)(_DWORD, signed int); // esi int v41; // [esp+44h] [ebp-20h] volatile LONG *v42; // [esp+48h] [ebp-1Ch] int v43; // [esp+4Ch] [ebp-18h] int v44; // [esp+50h] [ebp-14h] int v45; // [esp+54h] [ebp-10h] int v46; // [esp+60h] [ebp-4h] int v47; // [esp+6Ch] [ebp+8h] v2 = (int)this; v45 = 0; v3 = dword_BA6BA0; v46 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v4, (int)&v45, v3); if ( !v45 ) return 0; v5 = sub_8FB140(v45, (int)"Panel01", (int)&v43, (int)&v44, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"RebirthMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v45; v46 = -1; if ( v45 && !InterlockedDecrement((volatile LONG *)(v45 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v45, (int)"Theme", (int)&v43, (int)&v44, v8); else v9 = sub_8FB140(v45, (int)"Theme", (int)&v43, (int)&v44, 0); v10 = sub_8F3EB0(v43, v44, (int)v9, v2, 0, 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_421050(0); v41 = v11; v47 = 0; v12 = v2 + 352; while ( 1 ) { v13 = *(_DWORD *)(v11 + 384); v14 = v11; v15 = *(_DWORD *)(v11 + 384); v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v17 = sub_8F4A20(8, v47 * (v13 + 1) + 8, v16 - 16, v15, v14, v2, 0, 0); v18 = *(_DWORD *)v12; v42 = v17; if ( *(volatile LONG **)v12 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v17 = v42; } *(_DWORD *)v12 = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)v12 + 488))(1); v12 += 4; if ( ++v47 >= 3 ) break; v11 = v41; } v19 = *(int **)(v2 + 352); v20 = *v19; v21 = sub_40A910(1280341363); (*(void (__thiscall **)(int *, const CHAR *))(v20 + 472))(v19, v21); v22 = sub_8FB140(v45, (int)"BtnNor02", (int)&v43, (int)&v44, 0); sub_8FB650(v22, v45, (int)"BtnClick02"); sub_8FB650(v22, v45, (int)"BtnOver02"); v23 = sub_8FE0F0(v43, v44, (int)v22, v2, 0, 0, 0); *(_DWORD *)(v2 + 364) = v23; v24 = v23; v25 = sub_421050(0); v26 = (*(int (__thiscall **)(volatile LONG *))(*v24 + 148))(v24); v27 = (*(int (__thiscall **)(volatile LONG *))(*v24 + 144))(v24); v28 = sub_8F4A20(0, 0, v27, v26, v25, (int)v23, 0, 0); *(_DWORD *)(v2 + 372) = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); v29 = **(_DWORD **)(v2 + 372); v30 = sub_40C190(1331644831); (*(void (__thiscall **)(_DWORD, const CHAR *))(v29 + 472))(*(_DWORD *)(v2 + 372), v30); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v31 = sub_8FB140(v45, (int)"BtnNor03", (int)&v43, (int)&v44, 0); sub_8FB650(v31, v45, (int)"BtnClick03"); sub_8FB650(v31, v45, (int)"BtnOver03"); v32 = sub_8FE0F0(v43, v44, (int)v31, v2, 1, 0, 0); *(_DWORD *)(v2 + 368) = v32; v33 = v32; v34 = sub_421050(0); v35 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 148))(v33); v36 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 144))(v33); v37 = sub_8F4A20(0, 0, v36, v35, v34, (int)v32, 0, 0); *(_DWORD *)(v2 + 376) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v38 = **(_DWORD **)(v2 + 376); v39 = sub_40C190(-2002610207); (*(void (__thiscall **)(_DWORD, const CHAR *))(v38 + 472))(*(_DWORD *)(v2 + 376), v39); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); v46 = -1; if ( v45 ) { v40 = (void (__thiscall ***)(_DWORD, signed int))v45; if ( !InterlockedDecrement((volatile LONG *)(v45 + 4)) ) { if ( v40 ) (**v40)(v40, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00595F50) -------------------------------------------------------- char __thiscall sub_595F50(int this, float a2) { int v2; // esi float v3; // ST20_4 double v4; // st7 _DWORD *v5; // eax double v6; // st7 char *v7; // eax char *v8; // eax const char *v9; // eax _DWORD *v10; // esi int v12; // [esp-4h] [ebp-114h] float v13; // [esp+8h] [ebp-108h] char v14; // [esp+Ch] [ebp-104h] v2 = this; v3 = a2 - *(float *)(this + 384); v4 = v3; v13 = *(float *)(this + 380) - v3; if ( *(float *)(this + 380) > v4 ) { v6 = v13; if ( v13 < 60.0 ) { v9 = sub_40C190(2006291612); sprintf(&v14, v9, (unsigned int)(signed __int64)v6); } else { v7 = (char *)sub_40C190(-2103865700); v8 = sub_7549E0(v7, (unsigned int)(signed __int64)v6 / 0x3C % 0x3C, (unsigned int)(signed __int64)v6 % 0x3C); sprintf(&v14, v8); } (*(void (__stdcall **)(char *, int))(**(_DWORD **)(v2 + 360) + 472))(&v14, v12); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 360) + 488))(1); LOBYTE(v5) = dword_ACDC84; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; sub_8F2BC0((volatile LONG *)v2, 1, 0, 0); v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v10 = v5; if ( v5 ) { sub_4A5DC0(v5, 1); LOBYTE(v5) = sub_4BF6E0(v10); } } } else { LOBYTE(v5) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); } return (char)v5; } // ACDC84: using guessed type int dword_ACDC84; //----- (00596110) -------------------------------------------------------- void __thiscall sub_596110(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // esi if ( a2 ) { if ( a2 == 1 ) { sub_8F2BC0(this, 1, 0, 0); v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = v3; if ( v3 ) { sub_4A5DC0(v3, 1); sub_4BF6E0(v4); } } } else { v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = v5; if ( v5 ) { sub_4BF6B0(v5); sub_537640((char *)v6[179]); sub_5379D0((_DWORD *)v6[179]); } } } //----- (00596190) -------------------------------------------------------- float *__thiscall sub_596190(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); sub_645370(v1 + 86); *(_DWORD *)v1 = &RebirthMenuWin::`vftable'; *((_DWORD *)v1 + 58) = &RebirthMenuWin::`vftable'; *((_DWORD *)v1 + 86) = &RebirthMenuWin::`vftable'; `eh vector constructor iterator'( v1 + 88, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D852C: using guessed type void *RebirthMenuWin::`vftable'; // 9D8538: using guessed type void *RebirthMenuWin::`vftable'; // 9D8554: using guessed type void *RebirthMenuWin::`vftable'; //----- (00596220) -------------------------------------------------------- volatile LONG *__cdecl sub_596220(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_596190((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00596350) -------------------------------------------------------- char *__thiscall sub_596350(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 86); sub_595A80(this - 86); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00596440) -------------------------------------------------------- int __thiscall sub_596440(_DWORD **this) { return (*(int (**)(void))(*this[97] + 472))(); } //----- (00596460) -------------------------------------------------------- int __thiscall sub_596460(_DWORD *this, int a2) { _DWORD *v2; // esi char v4; // [esp+4h] [ebp-404h] v2 = this; this[99] = a2; sprintf(&v4, "%i", a2); return (*(int (__stdcall **)(char *))(*(_DWORD *)v2[91] + 464))(&v4); } //----- (005964C0) -------------------------------------------------------- int __thiscall sub_5964C0(_DWORD **this) { return (*(int (**)(void))(*this[95] + 464))(); } //----- (005964E0) -------------------------------------------------------- int __thiscall sub_5964E0(_DWORD **this) { return (*(int (**)(void))(*this[98] + 472))(); } //----- (00596500) -------------------------------------------------------- int __thiscall sub_596500(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[98] + 256))(a2); return (*(int (__stdcall **)(int))(*v2[87] + 256))(a2); } //----- (00596580) -------------------------------------------------------- char __thiscall sub_596580(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax int v16; // eax volatile LONG *v17; // eax const CHAR *v18; // eax int v19; // eax volatile LONG *v20; // eax const CHAR *v21; // eax int v22; // eax const CHAR *v23; // eax volatile LONG *v24; // eax int v25; // edx volatile LONG **v26; // eax int v27; // eax const CHAR *v28; // eax volatile LONG **v29; // eax int v30; // eax const CHAR *v31; // eax int v32; // eax volatile LONG *v33; // eax int v34; // eax volatile LONG *v35; // ecx int v36; // eax int v37; // eax volatile LONG *v38; // eax const CHAR *v39; // eax volatile LONG *v40; // ecx int v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax int v45[5]; // [esp+60h] [ebp-3Ch] int v46; // [esp+74h] [ebp-28h] volatile LONG *v47; // [esp+78h] [ebp-24h] int v48; // [esp+7Ch] [ebp-20h] int v49; // [esp+80h] [ebp-1Ch] int v50; // [esp+84h] [ebp-18h] int v51; // [esp+88h] [ebp-14h] int v52; // [esp+8Ch] [ebp-10h] int v53; // [esp+98h] [ebp-4h] volatile LONG **v54; // [esp+A4h] [ebp+8h] volatile LONG *v55; // [esp+A4h] [ebp+8h] volatile LONG **v56; // [esp+A4h] [ebp+8h] int v57; // [esp+A4h] [ebp+8h] void (__thiscall **v58)(_DWORD, const CHAR *); // [esp+A4h] [ebp+8h] volatile LONG *v59; // [esp+A4h] [ebp+8h] volatile LONG *v60; // [esp+A4h] [ebp+8h] volatile LONG *v61; // [esp+A4h] [ebp+8h] void (__thiscall **v62)(_DWORD, int); // [esp+A4h] [ebp+8h] volatile LONG **v63; // [esp+A4h] [ebp+8h] int v64; // [esp+A4h] [ebp+8h] int v65; // [esp+A4h] [ebp+8h] volatile LONG **v66; // [esp+A4h] [ebp+8h] int v67; // [esp+A4h] [ebp+8h] v2 = (int)this; v52 = 0; v53 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v47 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v52 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\ReportWin.nif"); sub_8F66B0(v8, (int)&v52, v7); if ( !v52 ) return 0; v9 = sub_8FB140(v52, (int)"Frame", (int)&v50, (int)&v51, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"PrivateStoreWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v52; v53 = -1; if ( !v52 || InterlockedDecrement((volatile LONG *)(v52 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v50; v11 = v51; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, v12); else v13 = sub_8FB140(v52, (int)"Theme", (int)&v50, (int)&v51, 0); sub_8F3EB0(v50 - v10, v51 - v11, (int)v13, v2, 0, 0); v54 = sub_8FB140(v52, (int)"ClsNor", (int)&v50, (int)&v51, v47); sub_8FB650(v54, v52, (int)"ClsClick"); sub_8FB650(v54, v52, (int)"ClsOver"); sub_8FE0F0(v50 - v10, v51 - v11, (int)v54, v2, 12, 0, 0); v55 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v52 + 72))("HelpLinkNor") ) { v56 = sub_8FB140(v52, (int)"HelpLinkNor", (int)&v50, (int)&v51, v55); sub_8FB650(v56, v52, (int)"HelpLinkClick"); sub_8FB650(v56, v52, (int)"HelpLinkOver"); sub_8FE0F0(v50 - v10, v51 - v11, (int)v56, v2, 13, 0, 0); } v14 = sub_8FB140(v52, (int)"Panel01", (int)&v50, (int)&v51, v47); v15 = sub_8F3EB0(v50 - v10, v51 - v11, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( !sub_8F71E0(v52, (int)"WinTitle", &v50, &v51, &v48, &v49) ) goto LABEL_27; v16 = sub_421050(0); v17 = sub_8F4A20(v50 - v10, v51 - v11 + 1, v48, v49, v16, v2, 0, 0); *(_DWORD *)(v2 + 360) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 360) + 468))(&dword_AA8D98); v57 = **(_DWORD **)(v2 + 360); v18 = sub_40C190(-318375877); (*(void (__thiscall **)(_DWORD, const CHAR *))(v57 + 472))(*(_DWORD *)(v2 + 360), v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); if ( !sub_8F71E0(v52, (int)"CharName", &v50, &v51, &v48, &v49) || (v19 = sub_421050(0), v20 = sub_8F4A20(v50 - v10, v51 - v11, v48, v49, v19, v2, 0, 0), *(_DWORD *)(v2 + 356) = v20, v58 = (void (__thiscall **)(_DWORD, const CHAR *))(*v20 + 472), v21 = sub_40C190(-319731154), (*v58)(*(_DWORD *)(v2 + 356), v21), !sub_8F71E0(v52, (int)"ReportText", &v50, &v51, &v48, &v49)) ) { LABEL_27: v53 = -1; sub_410C00(&v52); return 0; } v22 = sub_421050(0); v59 = sub_8F4A20(v50 - v10, v51 - v11, v48, v49, v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v59 + 488))(v59, 1); sub_9076A0(*((_DWORD **)v59 + 72), 5); v46 = *v59; v23 = sub_40C190(943669569); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v46 + 472))(v59, v23); sub_456260(v45); LOBYTE(v53) = 1; sub_456000(v45, v10, v11 + 2); sub_455FF0(v45, v2); sub_456380(v45, v52); v24 = sub_4565F0(v45, (int)"CharNameInput", 14, 1342177280, v47, 0); v25 = v52; *(_DWORD *)(v2 + 364) = v24; HIBYTE(v59) = sub_8F71E0(v25, (int)"ReportInfoInput", &v50, &v51, &v48, &v49); v26 = sub_8FB140(v52, (int)"ReportInfoInput", (int)&v50, (int)&v51, 0); sub_8F3EB0(v50 - v10, v51 - v11, (int)v26, v2, 0, 0); if ( HIBYTE(v59) ) *(_DWORD *)(v2 + 380) = sub_45A900(v50 - v10, v51 - v11, v48, v49, v2, 1342181380, 256, 4, 0, 0, 1); if ( !sub_8F71E0(v52, (int)"ReportType", &v50, &v51, &v48, &v49) ) goto LABEL_35; v27 = sub_421050(0); v60 = sub_8F4A20(v50 - v10, v51 - v11, v48, v49, v27, v2, 0, 0); v46 = *v60; v28 = sub_40C190(-1701849130); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v46 + 472))(v60, v28); HIBYTE(v60) = sub_8F71E0(v52, (int)"ReportTypeInput", &v50, &v51, &v48, &v49); v29 = sub_8FB140(v52, (int)"ReportTypeInput", (int)&v50, (int)&v51, 0); sub_8F3EB0(v50 - v10, v51 - v11, (int)v29, v2, 0, 0); if ( HIBYTE(v60) ) *(_DWORD *)(v2 + 384) = sub_45A900(v50 - v10, v51 - v11, v48, v49, v2, 1342181380, 256, 4, 0, 0, 1); if ( !sub_8F71E0(v52, (int)"ReportInfo", &v50, &v51, &v48, &v49) || (v30 = sub_421050(0), v61 = sub_8F4A20(v50 - v10, v51 - v11, v48, v49, v30, v2, 0, 0), v46 = *v61, v31 = sub_40C190(-218675405), (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v46 + 472))(v61, v31), !sub_8F71E0(v52, (int)"ReportProcess", &v50, &v51, &v48, &v49)) ) { LABEL_35: LOBYTE(v53) = 0; sub_4562E0(v45); goto LABEL_27; } v32 = sub_421050(0); v33 = sub_8F4A20(v50 - v10, v51 - v11, v48, v49, v32, v2, 0, 0); *(_DWORD *)(v2 + 388) = v33; v62 = (void (__thiscall **)(_DWORD, int))(*v33 + 452); v34 = sub_421050(6); (*v62)(*(_DWORD *)(v2 + 388), v34); v35 = v47; *(_WORD *)(*(_DWORD *)(v2 + 388) + 28) |= 1u; v63 = sub_8FB140(v52, (int)"OkNor", (int)&v50, (int)&v51, v35); sub_8FB650(v63, v52, (int)"OkClick"); sub_8FB650(v63, v52, (int)"OkOver"); *(_DWORD *)(v2 + 348) = sub_8FE0F0(v50 - v10, v51 - v11, (int)v63, v2, 10, 0, 0); v36 = *v63[9]; v64 = *(_DWORD *)(v36 + 24); v46 = *(_DWORD *)(v36 + 20); v37 = sub_421050(0); v38 = sub_8F4A20(v50 - v10, v51 - v11, v46, v64, v37, v2, 0, 0); *(_DWORD *)(v2 + 392) = v38; (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); v65 = **(_DWORD **)(v2 + 392); v39 = sub_40C190(-385795013); (*(void (__thiscall **)(_DWORD, const CHAR *))(v65 + 472))(*(_DWORD *)(v2 + 392), v39); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0); v66 = sub_8FB140(v52, (int)"CancelNor", (int)&v50, (int)&v51, v47); sub_8FB650(v66, v52, (int)"CancelClick"); sub_8FB650(v66, v52, (int)"CancelOver"); *(_DWORD *)(v2 + 352) = sub_8FE0F0(v50 - v10, v51 - v11, (int)v66, v2, 11, 0, 0); v40 = v66[9]; v67 = *(_DWORD *)(*v40 + 24); v46 = *(_DWORD *)(*v40 + 20); v41 = sub_421050(0); v42 = sub_8F4A20(v50 - v10, v51 - v11, v46, v67, v41, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40C190(-264877252); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v53) = 0; sub_4562E0(v45); v53 = -1; sub_410C00(&v52); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00596F10) -------------------------------------------------------- char __thiscall sub_596F10(int this) { int v1; // esi const char *v2; // eax const char *v3; // edi const char *v4; // ebx char *v5; // eax int v6; // eax int v7; // ecx int v8; // eax int v9; // ecx char *v10; // eax char v12; // [esp-1Ch] [ebp-2Ch] int v13; // [esp-18h] [ebp-28h] int v14; // [esp-14h] [ebp-24h] int v15; // [esp-10h] [ebp-20h] int v16; // [esp-Ch] [ebp-1Ch] void *v17; // [esp-8h] [ebp-18h] void *v18; // [esp-4h] [ebp-14h] char *v19; // [esp+Ch] [ebp-4h] v1 = this; v2 = *(const char **)(this + 400); if ( v2 ) { if ( v2 == (const char *)1 ) LOBYTE(v2) = sub_4BCFE0(*(_DWORD **)(this + 296), *(_DWORD *)(this + 396)); } else { v3 = (const char *)(*(int (**)(void))(**(_DWORD **)(this + 364) + 452))(); v4 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 380) + 452))(); v2 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 384) + 452))(); if ( v3 ) { if ( strlen(v3) ) { if ( strlen(v2) ) { if ( strlen(v4) ) { v6 = (*(int (**)(void))(**(_DWORD **)(v1 + 380) + 452))(); v7 = *(_DWORD *)(v1 + 384); v18 = (void *)v6; v8 = (*(int (**)(void))(*(_DWORD *)v7 + 452))(); v9 = *(_DWORD *)(v1 + 364); v17 = (void *)v8; v10 = (char *)(*(int (**)(void))(*(_DWORD *)v9 + 452))(); v19 = &v12; sub_416970(&v12, v10); LOBYTE(v2) = sub_4C82D0(*(const char **)(v1 + 296), v12, v13, v14, v15, v16, v17, v18); return (char)v2; } v18 = (void *)-1601070202; } else { v18 = (void *)-1294866470; } } else { v18 = (void *)-2037871133; } v5 = (char *)sub_40C190((int)v18); LOBYTE(v2) = (unsigned int)sub_462CA0(1, v5); } } return (char)v2; } //----- (00597040) -------------------------------------------------------- int __thiscall sub_597040(int this, int a2) { _DWORD **v2; // esi int result; // eax int v4; // edi const CHAR *v5; // eax v2 = (_DWORD **)this; *(_DWORD *)(this + 400) = a2; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { (*(void (__stdcall **)(void *))(**(_DWORD **)(this + 364) + 464))(&unk_9D87A6); (*(void (__stdcall **)(void *))(*v2[95] + 460))(&unk_9D87A7); (*(void (__stdcall **)(void *))(*v2[96] + 460))(&unk_9D87AE); (*(void (__stdcall **)(_DWORD))(*v2[95] + 256))(0); v4 = *v2[97]; v5 = sub_40C190(1229142927); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v4 + 472))(v2[97], v5); result = 65534; *((_WORD *)v2[97] + 14) &= 0xFFFEu; } } else { (*(void (__stdcall **)(void *))(**(_DWORD **)(this + 364) + 464))(&unk_9D8787); (*(void (__stdcall **)(void *))(*v2[95] + 460))(&unk_9D878E); (*(void (__stdcall **)(void *))(*v2[96] + 460))(&unk_9D878F); result = (*(int (__stdcall **)(signed int))(*v2[95] + 256))(1); *((_WORD *)v2[97] + 14) |= 1u; } return result; } //----- (00597150) -------------------------------------------------------- int __thiscall sub_597150(_DWORD *this, int a2) { _DWORD **v2; // esi const CHAR *v3; // eax const CHAR *v4; // eax const CHAR *v5; // eax char v7; // [esp+4h] [ebp-404h] v2 = (_DWORD **)this; this[99] = a2; sprintf(&v7, "%i", a2); (*(void (__stdcall **)(char *))(*v2[91] + 464))(&v7); v3 = sub_40C190(-381402828); (*(void (__stdcall **)(const CHAR *))(*v2[89] + 472))(v3); v4 = sub_40C190(876449166); (*(void (__stdcall **)(const CHAR *))(*v2[97] + 472))(v4); v5 = sub_40C190(825637691); (*(void (__stdcall **)(const CHAR *))(*v2[98] + 472))(v5); return (*(int (__stdcall **)(_DWORD))(*v2[95] + 240))(0); } //----- (00597220) -------------------------------------------------------- int __thiscall sub_597220(_DWORD **this) { _DWORD **v1; // esi const CHAR *v2; // eax const CHAR *v3; // eax v1 = this; sub_597040((int)this, 1); v2 = sub_40C190(-2019981670); (*(void (__stdcall **)(const CHAR *))(*v1[97] + 472))(v2); v3 = sub_40C190(-319731154); return (*(int (__stdcall **)(const CHAR *))(*v1[89] + 472))(v3); } //----- (00597270) -------------------------------------------------------- char __thiscall sub_597270(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 10: LOBYTE(v3) = sub_596F10((int)this); break; case 11: case 12: LOBYTE(v3) = sub_8F2BC0(this, 1, 0, 0); break; case 13: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "ReportWin"); break; default: return (char)v3; } return (char)v3; } //----- (005972E0) -------------------------------------------------------- int __cdecl sub_5972E0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x194u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ReportWin::`vftable'; *(_DWORD *)(v2 + 232) = &ReportWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 364) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D88F8: using guessed type void *ReportWin::`vftable'; // 9D8914: using guessed type void *ReportWin::`vftable'; //----- (00597430) -------------------------------------------------------- void *__thiscall sub_597430(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ReportWin::`vftable'; *((_DWORD *)this + 58) = &ReportWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D88F8: using guessed type void *ReportWin::`vftable'; // 9D8914: using guessed type void *ReportWin::`vftable'; //----- (005974D0) -------------------------------------------------------- void __thiscall sub_5974D0(float *this, float a2) { this[90] = a2; } //----- (00597500) -------------------------------------------------------- int __thiscall sub_597500(float *this, unsigned __int8 a2) { int result; // eax result = a2; this[89] = (double)a2; return result; } //----- (00597520) -------------------------------------------------------- bool __thiscall sub_597520(_BYTE *this, char a2) { bool result; // al result = a2 != 0; this[344] = a2 != 0; return result; } //----- (00597580) -------------------------------------------------------- char __thiscall sub_597580(_BYTE *this, char a2) { char result; // al result = a2; this[396] = a2; return result; } //----- (00597590) -------------------------------------------------------- char __thiscall sub_597590(_BYTE *this) { return this[396]; } //----- (005975F0) -------------------------------------------------------- int __thiscall sub_5975F0(char *this, int a2, int a3) { char *v3; // esi int result; // eax int v5; // esi signed int v6; // edi int (__stdcall *v7)(int *); // edx v3 = this; if ( a2 == 4 ) { v5 = (int)(this + 380); v6 = 4; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v5 - 16) + 240))(a3); v7 = *(int (__stdcall **)(int *))(**(_DWORD **)v5 + 468); if ( (_BYTE)a3 == 1 ) result = v7(&dword_AA8C68); else result = v7((int *)&unk_AA8CE8); v5 += 4; --v6; } while ( v6 ); } else { (*(void (__stdcall **)(int))(**(_DWORD **)&this[4 * a2 + 364] + 240))(a3); if ( (_BYTE)a3 == 1 ) (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)&v3[4 * a2 + 380] + 468))( *(_DWORD *)&v3[4 * a2 + 380], &dword_AA8C68); else (*(void (__thiscall **)(_DWORD, void *))(**(_DWORD **)&v3[4 * a2 + 380] + 468))( *(_DWORD *)&v3[4 * a2 + 380], &unk_AA8CE8); (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 92) + 240))(1); result = (*(int (__stdcall **)(int *))(**((_DWORD **)v3 + 96) + 468))(&dword_AA8C68); } return result; } // AA8C68: using guessed type int dword_AA8C68; //----- (005976C0) -------------------------------------------------------- char __thiscall sub_5976C0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // eax volatile LONG *v11; // edi volatile LONG v12; // ebx const CHAR *v13; // eax volatile LONG *v14; // edi volatile LONG **v15; // eax volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax int v21; // ebx int v22; // edi int v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // edi volatile LONG *v26; // ST58_4 volatile LONG *v27; // edi int v28; // ST54_4 int v29; // ST50_4 int v30; // eax volatile LONG *v31; // eax int v32; // edi int v33; // ebx char *v34; // eax char *v35; // eax volatile LONG **v36; // ebx volatile LONG *v37; // ST58_4 volatile LONG *v38; // ebx int v39; // ST54_4 int v40; // ST50_4 int v41; // eax volatile LONG *v42; // eax int v43; // ebx const CHAR *v44; // eax volatile LONG **v45; // ebx volatile LONG *v46; // ST58_4 volatile LONG *v47; // ebx int v48; // ST54_4 int v49; // ST50_4 int v50; // eax volatile LONG *v51; // eax int v52; // ebx char *v53; // eax char *v54; // eax volatile LONG **v55; // ebx volatile LONG *v56; // ST58_4 volatile LONG *v57; // ebx int v58; // ST54_4 int v59; // ST50_4 int v60; // eax volatile LONG *v61; // eax int v62; // ebx const CHAR *v63; // eax signed int v64; // ebx volatile LONG *v65; // edi volatile LONG **v66; // edi void (__thiscall ***v67)(_DWORD, signed int); // esi signed int v68; // [esp+74h] [ebp-28h] int v69; // [esp+78h] [ebp-24h] int v70; // [esp+7Ch] [ebp-20h] volatile LONG *v71; // [esp+80h] [ebp-1Ch] int v72; // [esp+84h] [ebp-18h] int v73; // [esp+88h] [ebp-14h] int v74; // [esp+8Ch] [ebp-10h] int v75; // [esp+98h] [ebp-4h] signed int v76; // [esp+A4h] [ebp+8h] v2 = (int)this; v74 = 0; v75 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v71 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v74; v75 = -1; if ( !v74 || InterlockedDecrement((volatile LONG *)(v74 + 4)) ) return 0; v5 = v74 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Common\\RevivalMenu.nif"); sub_8F66B0(v8, (int)&v74, v7); if ( !v74 ) return 0; v9 = sub_8FB140(v74, (int)"Frame", (int)&v72, (int)&v73, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ReviveMenuWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v74; v75 = -1; if ( !v74 || InterlockedDecrement((volatile LONG *)(v74 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } sub_8F71E0(v74, (int)"WinTitle", &v72, &v73, &v69, &v70); v10 = sub_421050(0); v11 = sub_8F4A20(v72, v73, v69, v70, v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8D98); v12 = *v11; v13 = sub_40A910(993084741); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v12 + 472))(v11, v13); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v14 = v71; v15 = sub_8FB140(v74, (int)"Panel01", (int)&v72, (int)&v73, v71); sub_8F3EB0(v72, v73, (int)v15, v2, 0, 0); v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) { v17 = sub_8FB140(v74, (int)"Theme", (int)&v72, (int)&v73, v16); } else { v18 = (volatile LONG *)sub_43D0D0(0x14u); v17 = sub_8FB140(v74, (int)"Theme", (int)&v72, (int)&v73, v18); } v19 = sub_8F3EB0(v72, v73, (int)v17, v2, 0, 0); if ( v19 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = sub_8FB140(v74, (int)"Panel02", (int)&v72, (int)&v73, v14); sub_8F3EB0(v72, v73, (int)v20, v2, 0, 0); if ( !sub_8F71E0(v74, (int)"TextBox", &v72, &v73, &v69, &v70) ) { v75 = -1; sub_410C00(&v74); return 0; } v68 = (signed int)((double)(unsigned int)v70 * 0.5); v21 = 0; v22 = v2 + 348; v76 = 2; do { v23 = sub_421050(0); v24 = sub_8F4A20(v72, v21 + v73, v69, v70, v23, v2, 0, 0); *(_DWORD *)v22 = v24; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 488))(v24, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)v22 + 472))(&unk_9D8B4B); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0); v21 += v68; v22 += 4; --v76; } while ( v76 ); v25 = sub_8FB140(v74, (int)"Btn01Nor", (int)&v72, (int)&v73, v71); sub_8FB650(v25, v74, (int)"Btn01Click"); sub_8FB650(v25, v74, (int)"Btn01Over"); v26 = sub_8FE0F0(v72, v73, (int)v25, v2, 0, 0, 0); *(_DWORD *)(v2 + 364) = v26; v27 = v26; v28 = sub_421050(0); v29 = (*(int (__thiscall **)(volatile LONG *))(*v27 + 148))(v27); v30 = (*(int (__thiscall **)(volatile LONG *))(*v27 + 144))(v27); v31 = sub_8F4A20(0, 0, v30, v29, v28, (int)v26, 0, 0); v32 = v2 + 380; *(_DWORD *)(v2 + 380) = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v33 = **(_DWORD **)(v2 + 380); v34 = (char *)sub_40A910(-386216485); v35 = sub_7549E0(v34); (*(void (__thiscall **)(_DWORD, char *))(v33 + 472))(*(_DWORD *)(v2 + 380), v35); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v36 = sub_8FB140(v74, (int)"Btn02Nor", (int)&v72, (int)&v73, v71); sub_8FB650(v36, v74, (int)"Btn02Click"); sub_8FB650(v36, v74, (int)"Btn02Over"); v37 = sub_8FE0F0(v72, v73, (int)v36, v2, 1, 0, 0); *(_DWORD *)(v2 + 368) = v37; v38 = v37; v39 = sub_421050(0); v40 = (*(int (__thiscall **)(volatile LONG *))(*v38 + 148))(v38); v41 = (*(int (__thiscall **)(volatile LONG *))(*v38 + 144))(v38); v42 = sub_8F4A20(0, 0, v41, v40, v39, (int)v37, 0, 0); *(_DWORD *)(v2 + 384) = v42; (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = **(_DWORD **)(v2 + 384); v44 = sub_40C190(2090654440); (*(void (__thiscall **)(_DWORD, const CHAR *))(v43 + 472))(*(_DWORD *)(v2 + 384), v44); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 240))(0); v45 = sub_8FB140(v74, (int)"Btn03Nor", (int)&v72, (int)&v73, v71); sub_8FB650(v45, v74, (int)"Btn03Click"); sub_8FB650(v45, v74, (int)"Btn03Over"); v46 = sub_8FE0F0(v72, v73, (int)v45, v2, 2, 0, 0); *(_DWORD *)(v2 + 372) = v46; v47 = v46; v48 = sub_421050(0); v49 = (*(int (__thiscall **)(volatile LONG *))(*v47 + 148))(v47); v50 = (*(int (__thiscall **)(volatile LONG *))(*v47 + 144))(v47); v51 = sub_8F4A20(0, 0, v50, v49, v48, (int)v46, 0, 0); *(_DWORD *)(v2 + 388) = v51; (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); v52 = **(_DWORD **)(v2 + 388); v53 = (char *)sub_40A910(1197179778); v54 = sub_7549E0(v53, 0); (*(void (__thiscall **)(_DWORD, char *))(v52 + 472))(*(_DWORD *)(v2 + 388), v54); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); v55 = sub_8FB140(v74, (int)"Btn04Nor", (int)&v72, (int)&v73, v71); sub_8FB650(v55, v74, (int)"Btn04Click"); sub_8FB650(v55, v74, (int)"Btn04Over"); v56 = sub_8FE0F0(v72, v73, (int)v55, v2, 3, 0, 0); *(_DWORD *)(v2 + 376) = v56; v57 = v56; v58 = sub_421050(0); v59 = (*(int (__thiscall **)(volatile LONG *))(*v57 + 148))(v57); v60 = (*(int (__thiscall **)(volatile LONG *))(*v57 + 144))(v57); v61 = sub_8F4A20(0, 0, v60, v59, v58, (int)v56, 0, 0); *(_DWORD *)(v2 + 392) = v61; (*(void (__thiscall **)(volatile LONG *, signed int))(*v61 + 488))(v61, 5); v62 = **(_DWORD **)(v2 + 392); v63 = sub_40A910(-49860563); (*(void (__thiscall **)(_DWORD, const CHAR *))(v62 + 472))(*(_DWORD *)(v2 + 392), v63); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0); v64 = 4; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v32 - 16) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)v32 + 468))(&unk_AA8CE8); v32 += 4; --v64; } while ( v64 ); v65 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v74 + 72))("HelpLinkNor") ) { v66 = sub_8FB140(v74, (int)"HelpLinkNor", (int)&v72, (int)&v73, v65); sub_8FB650(v66, v74, (int)"HelpLinkClick"); sub_8FB650(v66, v74, (int)"HelpLinkOver"); sub_8FE0F0(v72, v73, (int)v66, v2, 4, 0, 0); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v67 = (void (__thiscall ***)(_DWORD, signed int))v74; v75 = -1; if ( v74 && !InterlockedDecrement((volatile LONG *)(v74 + 4)) && v67 ) (**v67)(v67, 1); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00597E90) -------------------------------------------------------- char __thiscall sub_597E90(int this, float a2) { volatile LONG *v2; // esi float v3; // ST20_4 double v4; // st7 char result; // al double v6; // st7 char *v7; // eax char *v8; // eax const char *v9; // eax int v10; // ebx int v11; // esi signed int v12; // edi int v13; // esi unsigned int v14; // edi signed int v15; // ebx int (__stdcall *v16)(signed int); // eax float v17; // [esp+8h] [ebp-108h] CHAR String; // [esp+Ch] [ebp-104h] v2 = (volatile LONG *)this; v3 = a2 - *(float *)(this + 360); v4 = v3; v17 = *(float *)(this + 356) - v3; if ( *(float *)(this + 356) > v4 ) { v6 = v17; if ( v17 < 60.0 ) { v9 = sub_40C190(2006291612); sprintf(&String, v9, (unsigned int)(signed __int64)v6); } else { v7 = (char *)sub_40C190(-2103865700); v8 = sub_7549E0(v7, (unsigned int)(signed __int64)v6 / 0x3C % 0x3C, (unsigned int)(signed __int64)v6 % 0x3C); sprintf(&String, v8); } v10 = (int)(v2 + 87); v11 = (int)(v2 + 87); v12 = 2; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v11 + 472))(&unk_9D8B52); v11 += 4; --v12; } while ( v12 ); v13 = v10; v14 = sub_8F4CF0(v10, 2, &String); v15 = 2; do { v16 = *(int (__stdcall **)(signed int))(**(_DWORD **)v13 + 488); if ( v14 < 2 ) result = v16(4); else result = v16(0); v13 += 4; --v15; } while ( v15 ); } else { sub_4B7350(*(_DWORD **)(this + 296)); result = sub_8F2BC0(v2, 1, 0, 0); } return result; } //----- (00598050) -------------------------------------------------------- int __thiscall sub_598050(_DWORD *this) { _DWORD *v1; // esi int v2; // esi signed int v3; // edi int result; // eax v1 = this; sub_537640(*(char **)(this[74] + 716)); sub_5379D0(*(_DWORD **)(v1[74] + 716)); v2 = (int)(v1 + 95); v3 = 4; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 16) + 240))(0); result = (*(int (__stdcall **)(void *))(**(_DWORD **)v2 + 468))(&unk_AA8CE8); v2 += 4; --v3; } while ( v3 ); return result; } //----- (005980B0) -------------------------------------------------------- int __thiscall sub_5980B0(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_4BED50(this[74]); (*(void (__stdcall **)(_DWORD))(*v1[93] + 240))(0); (*(void (__stdcall **)(void *))(*v1[97] + 468))(&unk_AA8CE8); (*(void (__stdcall **)(signed int))(*v1[92] + 240))(1); return (*(int (__stdcall **)(int *))(*v1[96] + 468))(&dword_AA8C68); } // AA8C68: using guessed type int dword_AA8C68; //----- (00598110) -------------------------------------------------------- int __thiscall sub_598110(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_4BED80(this[74]); (*(void (__stdcall **)(_DWORD))(*v1[94] + 240))(0); (*(void (__stdcall **)(void *))(*v1[98] + 468))(&unk_AA8CE8); (*(void (__stdcall **)(signed int))(*v1[92] + 240))(1); return (*(int (__stdcall **)(int *))(*v1[96] + 468))(&dword_AA8C68); } // AA8C68: using guessed type int dword_AA8C68; //----- (00598170) -------------------------------------------------------- int __thiscall sub_598170(char *this, int a2) { char *v2; // esi char *v3; // eax char *v4; // eax v2 = this; if ( this[344] ) sub_5975F0(this, 2, a2 != 0); v3 = (char *)sub_40A910(1197179778); v4 = sub_7549E0(v3, a2); return (*(int (__stdcall **)(char *))(**((_DWORD **)v2 + 97) + 472))(v4); } //----- (005981D0) -------------------------------------------------------- char __thiscall sub_5981D0(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi int v5; // esi signed int v6; // edi LOBYTE(v3) = a2; v4 = this; switch ( a2 ) { case 0: sub_4B7350(*((_DWORD **)this + 74)); sub_8F2BC0(v4, 1, 0, 0); goto LABEL_10; case 1: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4B66E0(); break; case 2: LOBYTE(v3) = sub_5980B0((_DWORD **)this); break; case 3: LOBYTE(v3) = sub_598110((_DWORD **)this); break; case 4: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "RevivalMenu"); break; default: if ( !a2 ) { LABEL_10: v5 = (int)(v4 + 95); v6 = 4; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 - 16) + 240))(0); LOBYTE(v3) = (*(int (__stdcall **)(void *))(**(_DWORD **)v5 + 468))(&unk_AA8CE8); v5 += 4; --v6; } while ( v6 ); } break; } return (char)v3; } //----- (005982C0) -------------------------------------------------------- int __cdecl sub_5982C0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x190u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(float *)(v2 + 356) = 300.0; *(_DWORD *)v2 = &ReviveMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &ReviveMenuWin::`vftable'; *(_BYTE *)(v2 + 396) = 0; *(_BYTE *)(v2 + 344) = 1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D8C70: using guessed type void *ReviveMenuWin::`vftable'; // 9D8C8C: using guessed type void *ReviveMenuWin::`vftable'; //----- (00598420) -------------------------------------------------------- void *__thiscall sub_598420(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ReviveMenuWin::`vftable'; *((_DWORD *)this + 58) = &ReviveMenuWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D8C70: using guessed type void *ReviveMenuWin::`vftable'; // 9D8C8C: using guessed type void *ReviveMenuWin::`vftable'; //----- (00598460) -------------------------------------------------------- char __thiscall sub_598460(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_907E00(this, a2, a3, 32, 32, a5, 0, 0); if ( result ) { v5[96] = a4; result = 1; } return result; } //----- (005984A0) -------------------------------------------------------- _DWORD *__thiscall sub_5984A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; *v1 = &RewardWin::`vftable'; v1[58] = &RewardWin::`vftable'; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; *((_WORD *)v1 + 215) = 0; *((_WORD *)v1 + 214) = -1; v1[108] = -1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D8F6C: using guessed type void *RewardWin::`vftable'; // 9D8F8C: using guessed type void *RewardWin::`vftable'; //----- (005985E0) -------------------------------------------------------- char __stdcall sub_5985E0(__int16 a1) { _DWORD *v1; // eax _DWORD *v3; // edi int v4; // eax signed int v5; // ecx _BYTE *v6; // eax v1 = sub_6CD770(); if ( !v1 ) return 0; v3 = (_DWORD *)v1[1]; if ( !v3 ) return 0; sub_74A800(v1, a1); v4 = sub_74E7D0(v3, a1); v5 = 0; v6 = (_BYTE *)(v4 + 516); while ( !*v6 || *v6 != 2 ) { ++v5; v6 += 12; if ( v5 >= 12 ) return 0; } return 1; } //----- (00598640) -------------------------------------------------------- signed int __thiscall sub_598640(_WORD *this) { _WORD *v1; // esi _DWORD *v2; // eax signed int result; // eax _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // ecx _BYTE *v8; // edx v1 = this; v2 = sub_6CD770(); if ( !v2 ) return -1; v4 = (_DWORD *)v2[1]; if ( v4 ) { sub_74A800(v2, v1[214]); v5 = sub_74E7D0(v4, v1[214]); v6 = *((_DWORD *)v1 + 108); v7 = v5; if ( v6 >= 0 ) { result = 0; v8 = (_BYTE *)(v7 + 516); do { if ( *v8 && *v8 == 2 ) { if ( !v6 ) return result; --v6; } ++result; v8 += 12; } while ( result < 12 ); } } return -1; } //----- (005986B0) -------------------------------------------------------- char __thiscall sub_5986B0(int *this, char a2) { int *v2; // ebx int *v3; // esi signed int v4; // edi char result; // al v2 = this; *((_BYTE *)this + 431) = a2; v3 = this + 97; v4 = 10; do { result = sub_5D3170(*v3, *((_BYTE *)v2 + 431) != 0); ++v3; --v4; } while ( v4 ); return result; } //----- (00598700) -------------------------------------------------------- int __thiscall sub_598700(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD **v3; // esi signed int v4; // ebx int result; // eax v2 = this; (*(void (__stdcall **)(int))(*this[109] + 256))(a2); v3 = v2 + 97; v4 = 10; do { (*(void (__stdcall **)(int))(*v3[13] + 256))(a2); result = (*(int (__stdcall **)(int))(**v3 + 256))(a2); ++v3; --v4; } while ( v4 ); return result; } //----- (00598760) -------------------------------------------------------- int __stdcall sub_598760(char a1) { _DWORD *v1; // eax _DWORD *v3; // ecx int v4; // eax _BYTE *v5; // ecx int v6; // esi char v7; // bl signed int v8; // edi v1 = sub_6CD770(); if ( !v1 ) return 0; v3 = (_DWORD *)v1[1]; if ( !v3 ) return 0; v4 = sub_74E7D0(v3, a1); if ( !v4 ) return 0; v5 = (_BYTE *)(v4 + 529); v6 = 0; v7 = 0; v8 = 2; do { if ( v5 != (_BYTE *)13 && *(v5 - 12) == 2 ) { if ( *(v5 - 13) != 2 ) goto LABEL_11; if ( !v7 ) { v7 = 1; LABEL_11: ++v6; goto LABEL_12; } } LABEL_12: if ( v5 == (_BYTE *)1 || *v5 != 2 ) goto LABEL_18; if ( *(v5 - 1) == 2 ) { if ( v7 ) goto LABEL_18; v7 = 1; } ++v6; LABEL_18: if ( v5 != (_BYTE *)-11 && v5[12] == 2 ) { if ( v5[11] != 2 ) goto LABEL_23; if ( !v7 ) { v7 = 1; LABEL_23: ++v6; goto LABEL_24; } } LABEL_24: if ( v5 == (_BYTE *)-23 || v5[24] != 2 ) goto LABEL_30; if ( v5[23] == 2 ) { if ( v7 ) goto LABEL_30; v7 = 1; } ++v6; LABEL_30: if ( v5 != (_BYTE *)-35 && v5[36] == 2 ) { if ( v5[35] != 2 ) goto LABEL_35; if ( !v7 ) { v7 = 1; LABEL_35: ++v6; goto LABEL_36; } } LABEL_36: if ( v5 != (_BYTE *)-47 && v5[48] == 2 ) { if ( v5[47] == 2 ) { if ( v7 ) goto LABEL_42; v7 = 1; } ++v6; } LABEL_42: v5 += 72; --v8; } while ( v8 ); return v6; } //----- (00598840) -------------------------------------------------------- int __thiscall sub_598840(_DWORD *this) { int v1; // esi int result; // eax int *v3; // ecx int v4; // eax v1 = (int)this; result = this[95]; if ( result ) { v3 = (int *)this[68]; if ( v3 ) { switch ( *(_DWORD *)(result + 8) ) { case 0: sub_53F9F0((_DWORD **)v3, *(_DWORD *)(result + 24), *(_DWORD *)(result + 28)); result = sub_8F2F90(v1); break; case 1: sub_53FA80((_DWORD **)v3, *(_QWORD *)(result + 16)); result = sub_8F2F90(v1); break; case 2: v4 = *(_DWORD *)(result + 12); if ( !v4 ) goto LABEL_9; sub_547C20(v3, v4); result = sub_8F2F90(v1); break; case 4: sub_53FAF0((_DWORD **)v3, *(_DWORD *)(result + 32)); goto LABEL_9; default: LABEL_9: result = sub_8F2F90(v1); break; } } } return result; } //----- (00598900) -------------------------------------------------------- int __thiscall sub_598900(int this, int a2, int a3) { int result; // eax result = a2 - 10; if ( a2 == 10 ) { result = a3; if ( *(_DWORD *)(this + 432) != a3 ) { if ( *(_BYTE *)(this + 431) ) *(_DWORD *)(this + 432) = a3; } } return result; } //----- (00598930) -------------------------------------------------------- int __thiscall sub_598930(_DWORD *this) { unsigned int v1; // eax int v2; // edx v1 = 0; v2 = (int)(this + 87); while ( *(_DWORD *)(*(_DWORD *)v2 + 380) ) { ++v1; v2 += 4; if ( v1 >= 0xA ) return 0; } return this[v1 + 87]; } //----- (00598970) -------------------------------------------------------- int __thiscall sub_598970(_DWORD *this) { unsigned int v1; // eax int v2; // edx v1 = 0; v2 = (int)(this + 97); while ( *(_DWORD *)(*(_DWORD *)v2 + 380) ) { ++v1; v2 += 4; if ( v1 >= 0xA ) return 0; } return this[v1 + 97]; } //----- (005989B0) -------------------------------------------------------- void __thiscall sub_5989B0(int this, int a2) { signed int v2; // edi int *v3; // edx int v4; // eax bool v5; // zf int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // eax if ( *(_BYTE *)(this + 430) ) { v2 = 2; v3 = (int *)(this + 392); do { v4 = *(v3 - 1); if ( v2 - 2 == *(_DWORD *)(this + 432) ) { v5 = *(_DWORD *)(v4 + 380) == 0; v6 = *(_DWORD *)(v4 + 356); if ( !v5 ) { *(_WORD *)(v6 + 28) &= 0xFFFEu; goto LABEL_8; } } else { v5 = *(_DWORD *)(v4 + 380) == 0; v6 = *(_DWORD *)(v4 + 356); } *(_WORD *)(v6 + 28) |= 1u; LABEL_8: v7 = *v3; if ( v2 - 1 == *(_DWORD *)(this + 432) ) { v5 = *(_DWORD *)(v7 + 380) == 0; v8 = *(_DWORD *)(v7 + 356); if ( !v5 ) { *(_WORD *)(v8 + 28) &= 0xFFFEu; goto LABEL_13; } } else { v5 = *(_DWORD *)(v7 + 380) == 0; v8 = *(_DWORD *)(v7 + 356); } *(_WORD *)(v8 + 28) |= 1u; LABEL_13: v9 = v3[1]; if ( v2 == *(_DWORD *)(this + 432) ) { v5 = *(_DWORD *)(v9 + 380) == 0; v10 = *(_DWORD *)(v9 + 356); if ( !v5 ) { *(_WORD *)(v10 + 28) &= 0xFFFEu; goto LABEL_18; } } else { v5 = *(_DWORD *)(v9 + 380) == 0; v10 = *(_DWORD *)(v9 + 356); } *(_WORD *)(v10 + 28) |= 1u; LABEL_18: v11 = v3[2]; if ( v2 + 1 == *(_DWORD *)(this + 432) ) { v5 = *(_DWORD *)(v11 + 380) == 0; v12 = *(_DWORD *)(v11 + 356); if ( !v5 ) { *(_WORD *)(v12 + 28) &= 0xFFFEu; goto LABEL_23; } } else { v5 = *(_DWORD *)(v11 + 380) == 0; v12 = *(_DWORD *)(v11 + 356); } *(_WORD *)(v12 + 28) |= 1u; LABEL_23: v13 = v3[3]; if ( v2 + 2 != *(_DWORD *)(this + 432) ) { v5 = *(_DWORD *)(v13 + 380) == 0; v14 = *(_DWORD *)(v13 + 356); LABEL_27: *(_WORD *)(v14 + 28) |= 1u; goto LABEL_28; } v5 = *(_DWORD *)(v13 + 380) == 0; v14 = *(_DWORD *)(v13 + 356); if ( v5 ) goto LABEL_27; *(_WORD *)(v14 + 28) &= 0xFFFEu; LABEL_28: v2 += 5; v3 += 5; } while ( v2 - 2 < 10 ); } } //----- (00598B10) -------------------------------------------------------- _DWORD *__thiscall sub_598B10(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &RewardInvItem::`vftable'; v2[3] = 0; v2[2] = a2; v3 = v2[3]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[3] = 0; } v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9D91B0: using guessed type void *RewardInvItem::`vftable'; //----- (00598BB0) -------------------------------------------------------- LONG __thiscall sub_598BB0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &RewardInvItem::`vftable'; v2 = this[3]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[3] = 0; } v3 = v1[3]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9D91B0: using guessed type void *RewardInvItem::`vftable'; //----- (00598C60) -------------------------------------------------------- LONG __thiscall sub_598C60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &RewardInvWin::`vftable'; this[58] = &RewardInvWin::`vftable'; v2 = this[95]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[95] = 0; } v3 = v1[95]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_5D3FC0(v1); } // 9D91B8: using guessed type void *RewardInvWin::`vftable'; // 9D91D4: using guessed type void *RewardInvWin::`vftable'; //----- (00598D20) -------------------------------------------------------- char __thiscall sub_598D20(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[96]); return (char)v2; } //----- (00598D50) -------------------------------------------------------- char __thiscall sub_598D50(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[96]); return (char)v2; } //----- (00598D80) -------------------------------------------------------- int __thiscall sub_598D80(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int result; // eax int v5; // edi int v6; // eax int v7; // edx int v8; // eax int v9; // eax int (__thiscall *v10)(_DWORD *, _DWORD); // eax const char *v11; // [esp-10h] [ebp-1Ch] signed int v12; // [esp-Ch] [ebp-18h] v2 = this; v3 = this[95]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[95] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v2[95] ) { result = *(_DWORD *)(a2 + 8); switch ( result ) { case 0: v12 = 9; v11 = "VarItem000"; goto LABEL_11; case 1: v12 = 10; v11 = "VarItem000"; goto LABEL_11; case 2: v8 = *(_DWORD *)(a2 + 12); if ( !v8 ) goto LABEL_20; v9 = sub_53D9E0(*(unsigned __int16 *)(v8 + 8)); v12 = *(_DWORD *)(v9 + 34); v11 = (const char *)(v9 + 38); goto LABEL_11; case 3: v12 = 24; v11 = "VarItem000"; goto LABEL_11; case 4: v12 = 22; v11 = "VarItem000"; goto LABEL_11; case 5: v12 = 23; v11 = "VarItem000"; goto LABEL_11; case 6: v12 = 26; v11 = "VarItem000"; goto LABEL_11; case 7: v12 = 25; v11 = "VarItem000"; LABEL_11: v5 = *v2; v6 = sub_42BF30((int)v11); (*(void (__thiscall **)(_DWORD *, int, signed int, signed int, signed int))(v5 + 584))(v2, v6, v12, 32, 32); v7 = *v2; *((_WORD *)v2 + 14) &= 0xFFFEu; result = (*(int (__thiscall **)(_DWORD *, signed int))(v7 + 240))(v2, 1); break; default: return result; } } else { LABEL_20: (*(void (__thiscall **)(_DWORD *, _DWORD, signed int, signed int, signed int))(*v2 + 584))(v2, 0, -1, 32, 32); v10 = *(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 240); *((_WORD *)v2 + 14) |= 1u; result = v10(v2, 0); } return result; } //----- (00598EF0) -------------------------------------------------------- int __thiscall sub_598EF0(char *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // eax int v5; // eax _DWORD **v6; // esi signed int v7; // edi int result; // eax const char *v9; // [esp-10h] [ebp-28h] signed int v10; // [esp-Ch] [ebp-24h] signed int v11; // [esp+0h] [ebp-18h] char *v12; // [esp+Ch] [ebp-Ch] signed int v13; // [esp+10h] [ebp-8h] int v14; // [esp+14h] [ebp-4h] v12 = this; v14 = (int)(this + 348); v13 = 10; do { v1 = *(_DWORD **)v14; v2 = *(_DWORD *)(*(_DWORD *)v14 + 380); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[95] = 0; } if ( v1[95] ) { switch ( MEMORY[8] ) { case 0u: v10 = 9; v9 = "VarItem000"; goto LABEL_10; case 1u: v10 = 10; v9 = "VarItem000"; goto LABEL_10; case 2u: if ( !MEMORY[0xC] ) goto LABEL_19; v5 = sub_53D9E0(*(unsigned __int16 *)(MEMORY[0xC] + 8)); v10 = *(_DWORD *)(v5 + 34); v9 = (const char *)(v5 + 38); goto LABEL_10; case 3u: v10 = 24; v9 = "VarItem000"; goto LABEL_10; case 4u: v10 = 22; v9 = "VarItem000"; goto LABEL_10; case 5u: v10 = 23; v9 = "VarItem000"; goto LABEL_10; case 6u: v10 = 26; v9 = "VarItem000"; goto LABEL_10; case 7u: v10 = 25; v9 = "VarItem000"; LABEL_10: v3 = *v1; v4 = sub_42BF30((int)v9); (*(void (__thiscall **)(_DWORD *, int, signed int, signed int, signed int, signed int))(v3 + 584))( v1, v4, v10, 32, 32, v11); *((_WORD *)v1 + 14) &= 0xFFFEu; v11 = 1; goto LABEL_20; default: break; } } else { LABEL_19: (*(void (__thiscall **)(_DWORD *, _DWORD, signed int, signed int, signed int, signed int))(*v1 + 584))( v1, 0, -1, 32, 32, v11); *((_WORD *)v1 + 14) |= 1u; v11 = 0; LABEL_20: (*(void (__thiscall **)(_DWORD *))(*v1 + 240))(v1); } v14 += 4; --v13; } while ( v13 ); v6 = (_DWORD **)(v12 + 388); v7 = 10; do { result = sub_598D80(*v6, 0); ++v6; --v7; } while ( v7 ); return result; } //----- (00599090) -------------------------------------------------------- _DWORD *__thiscall sub_599090(char *this, void *a2) { char *v2; // ebx _DWORD *result; // eax _DWORD *v4; // edi int v5; // eax unsigned __int16 *v6; // edi unsigned __int8 v7; // al int v8; // eax _DWORD *v9; // esi _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // esi _DWORD *v17; // eax _DWORD *v18; // eax _DWORD *v19; // esi _DWORD *v20; // eax _DWORD *v21; // eax int v22; // ebx int v23; // ecx _DWORD *v24; // edi _DWORD *v25; // eax _DWORD *v26; // esi int v27; // eax _DWORD *v28; // esi _DWORD *v29; // eax _DWORD *v30; // eax _DWORD *v31; // esi _DWORD *v32; // eax _DWORD *v33; // eax _DWORD *v34; // [esp+14h] [ebp-14h] char *v35; // [esp+18h] [ebp-10h] unsigned __int16 *v36; // [esp+30h] [ebp+8h] v2 = this; v35 = this; sub_598EF0(this); v2[430] = 0; *((_DWORD *)v2 + 108) = -1; result = sub_6CD770(); if ( result ) { v4 = (_DWORD *)result[1]; if ( v4 ) { sub_74A800(result, (__int16)a2); *((_WORD *)v2 + 214) = (_WORD)a2; v5 = sub_74E7D0(v4, (char)a2); v6 = (unsigned __int16 *)(v5 + 520); v34 = 0; v36 = (unsigned __int16 *)(v5 + 520); do { v7 = *((_BYTE *)v6 - 4); if ( v7 ) { switch ( *((unsigned __int8 *)v6 - 3) ) { case 0u: v8 = v7 - 1; if ( v8 ) { if ( v8 == 1 ) { v9 = (_DWORD *)sub_598970(v2); if ( v9 ) { v2[430] = 1; v10 = operator new(0x28u); if ( v10 ) v11 = sub_598B10(v10, 0); else v11 = 0; v11[6] = *(_DWORD *)v6; v11[7] = 0; sub_598D80(v9, (int)v11); } } } else { v12 = (_DWORD *)sub_598930(v2); if ( v12 ) { v13 = operator new(0x28u); if ( v13 ) v14 = sub_598B10(v13, 0); else v14 = 0; v14[6] = *(_DWORD *)v6; v14[7] = 0; sub_598D80(v12, (int)v14); } } break; case 1u: v15 = v7 - 1; if ( v15 ) { if ( v15 == 1 ) { v16 = (_DWORD *)sub_598970(v2); if ( v16 ) { v2[430] = 1; v17 = operator new(0x28u); if ( v17 ) v18 = sub_598B10(v17, 1); else v18 = 0; v18[4] = *(_DWORD *)v6; v18[5] = 0; sub_598D80(v16, (int)v18); } } } else { v19 = (_DWORD *)sub_598930(v2); if ( v19 ) { v20 = operator new(0x28u); if ( v20 ) v21 = sub_598B10(v20, 1); else v21 = 0; v21[4] = *(_DWORD *)v6; v21[5] = 0; sub_598D80(v19, (int)v21); } } break; case 2u: result = sub_6899D0(*v6); v22 = (int)result; if ( !result ) return result; if ( *((_BYTE *)v6 - 4) == 1 ) { v24 = (_DWORD *)sub_598930(v35); if ( !v24 ) goto LABEL_39; v25 = operator new(0x28u); goto LABEL_35; } if ( *((_BYTE *)v6 - 4) != 2 ) goto LABEL_40; v24 = (_DWORD *)sub_598970(v35); if ( v24 ) { *(_BYTE *)(v23 + 430) = 1; v25 = operator new(0x28u); LABEL_35: if ( v25 ) v26 = sub_598B10(v25, 2); else v26 = 0; sub_599BC0(v26, v22); sub_598D80(v24, (int)v26); } LABEL_39: v6 = v36; LABEL_40: v2 = v35; break; case 4u: v27 = v7 - 1; if ( v27 ) { if ( v27 == 1 ) { v28 = (_DWORD *)sub_598970(v2); if ( v28 ) { v2[430] = 1; v29 = operator new(0x28u); if ( v29 ) v30 = sub_598B10(v29, 4); else v30 = 0; v30[8] = *(_DWORD *)v6; sub_598D80(v28, (int)v30); } } } else { v31 = (_DWORD *)sub_598930(v2); if ( v31 ) { v32 = operator new(0x28u); if ( v32 ) v33 = sub_598B10(v32, 4); else v33 = 0; v33[8] = *(_DWORD *)v6; sub_598D80(v31, (int)v33); } } break; default: break; } } result = (_DWORD *)((char *)v34 + 1); v6 += 6; v34 = result; v36 = v6; } while ( (signed int)result < 12 ); } } return result; } //----- (00599440) -------------------------------------------------------- _DWORD *__thiscall sub_599440(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; sub_5D35C0(this); *v1 = &RewardInvWin::`vftable'; v1[58] = &RewardInvWin::`vftable'; v1[95] = 0; v1[96] = -1; sub_5D4380(v1, 0x20u, (volatile LONG *)0x20); sub_598D80(v1, 0); v2 = v1[95]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[95] = 0; } return v1; } // 9D91B8: using guessed type void *RewardInvWin::`vftable'; // 9D91D4: using guessed type void *RewardInvWin::`vftable'; //----- (00599510) -------------------------------------------------------- volatile LONG *__cdecl sub_599510(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x184u); v8 = v4; v9 = 0; if ( v4 ) v5 = sub_599440(v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 608))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (00599650) -------------------------------------------------------- volatile LONG *__cdecl sub_599650(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1E0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5984A0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00599780) -------------------------------------------------------- char __thiscall sub_599780(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi int v6; // ST44_4 char *v7; // eax volatile LONG **v8; // eax int v9; // ebx char *v10; // edi volatile LONG **v11; // eax volatile LONG *v12; // eax int *v13; // edi int v14; // eax volatile LONG **v15; // edi volatile LONG **v16; // eax volatile LONG *v17; // eax int v18; // edx int v19; // ecx volatile LONG *v20; // eax int v21; // eax volatile LONG *v22; // edi int v23; // eax const CHAR *v24; // eax int v25; // eax volatile LONG *v26; // eax int v27; // edi int v28; // eax int v29; // edi const CHAR *v30; // eax void (__thiscall ***v31)(_DWORD, signed int); // esi volatile LONG *v32; // [esp+40h] [ebp-58h] int v33; // [esp+44h] [ebp-54h] int v34; // [esp+48h] [ebp-50h] int v35; // [esp+4Ch] [ebp-4Ch] char *v36; // [esp+50h] [ebp-48h] int v37; // [esp+54h] [ebp-44h] int v38; // [esp+58h] [ebp-40h] int v39; // [esp+5Ch] [ebp-3Ch] int v40; // [esp+60h] [ebp-38h] char v41; // [esp+64h] [ebp-34h] int v42; // [esp+94h] [ebp-4h] v2 = (int)this; v37 = 0; v42 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v32 = v3; if ( !v3 ) goto LABEL_26; v38 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = v38; v7 = (char *)sub_401410(byte_ACAB50, "Game\\RewardWin.nif"); sub_8F66B0(v7, (int)&v37, v6); if ( !v37 ) return 0; v8 = sub_8FB140(v37, (int)"Panel01", (int)&v40, (int)&v39, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"RewardWin", 0) ) { LABEL_26: v4 = (void (__thiscall ***)(_DWORD, signed int))v37; v42 = -1; if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v9 = v40; v35 = v39; v10 = 0; v38 = v2 + 348; do { v36 = v10 + 1; sprintf(&v41, "IconSlot%03d", v10 + 1); v11 = sub_8FB140(v37, (int)&v41, (int)&v40, (int)&v39, v32); sub_8F3EB0(v40 - v9, v39 - v35, (int)v11, v2, 0, 0); v12 = sub_599510(v40 - v9 + 1, v39 - v35 + 1, (int)v10, v2); v13 = (int *)v38; *(_DWORD *)v38 = v12; sub_598D80(v12, 0); v14 = *v13; v10 = v36; v38 += 4; *(_DWORD *)(v14 + 272) = dword_ACEC34; } while ( (signed int)v10 < 10 ); v38 = 0; v15 = (volatile LONG **)(v2 + 388); do { v36 = (char *)(v38 + 1); sprintf(&v41, "SelectIconSlot%03d", v38 + 1); v16 = sub_8FB140(v37, (int)&v41, (int)&v40, (int)&v39, v32); v17 = sub_8F3EB0(v40 - v9, v39 - v35, (int)v16, v2, 0, 0); v18 = v39 - v35; v19 = v38; v15[13] = v17; v20 = sub_599510(v40 - v9 + 1, v18 + 1, v19, v2); *v15 = v20; sub_598D80(v20, 0); (*(void (__stdcall **)(signed int))(**v15 + 516))(10); (*(void (__stdcall **)(signed int))(**v15 + 560))(11); *((_DWORD *)*v15 + 68) = dword_ACEC34; ++v15; v38 = (int)v36; } while ( (signed int)v36 < 10 ); if ( sub_8F71E0(v37, (int)"RewardTxt", &v40, &v39, &v34, &v33) ) { v21 = sub_421050(0); v22 = sub_8F4A20(v40 - v9, v39 - v35, v34, v33, v21, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 488))(v22, 0); v36 = (char *)(*v22 + 452); v23 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v36)(v22, v23); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v36 = (char *)(*v22 + 472); v24 = sub_40C190(1027619438); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v36)(v22, v24); } if ( sub_8F71E0(v37, (int)"RewardSelectTxt", &v40, &v39, &v34, &v33) ) { v25 = sub_421050(0); v26 = sub_8F4A20(v40 - v9, v39 - v35, v34, v33, v25, v2, 0, 0); *(_DWORD *)(v2 + 436) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 488))(v26, 0); v27 = **(_DWORD **)(v2 + 436); v28 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v27 + 452))(*(_DWORD *)(v2 + 436), v28); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 436) + 240))(0); v29 = **(_DWORD **)(v2 + 436); v30 = sub_40C190(524825924); (*(void (__thiscall **)(_DWORD, const CHAR *))(v29 + 472))(*(_DWORD *)(v2 + 436), v30); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v31 = (void (__thiscall ***)(_DWORD, signed int))v37; v42 = -1; if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v31 ) (**v31)(v31, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00599BC0) -------------------------------------------------------- void __thiscall sub_599BC0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[3]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[3] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (00599C10) -------------------------------------------------------- void *__thiscall sub_599C10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &RewardWin::`vftable'; *((_DWORD *)this + 58) = &RewardWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D8F6C: using guessed type void *RewardWin::`vftable'; // 9D8F8C: using guessed type void *RewardWin::`vftable'; //----- (00599C50) -------------------------------------------------------- void *__thiscall sub_599C50(void *this, char a2) { void *v2; // esi v2 = this; sub_598BB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00599C80) -------------------------------------------------------- void *__thiscall sub_599C80(void *this, char a2) { void *v2; // esi v2 = this; sub_598C60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00599CB0) -------------------------------------------------------- void __fastcall sub_599CB0(LONG a1, int a2, int a3, int a4, LONG a5) { int v5; // esi void (__thiscall *v6)(int, LONG *, LONG *); // eax int v7; // eax LONG v8; // [esp+0h] [ebp-4h] v8 = a1; if ( a5 ) { v5 = a1 - 232; a5 = pt.x; v6 = *(void (__thiscall **)(int, LONG *, LONG *))(*(_DWORD *)(a1 - 232) + 224); v8 = pt.y; v6(a1 - 232, &a5, &v8); if ( a5 >= 0 ) { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); if ( a5 < v7 && v8 >= 0 ) (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); } } } //----- (00599D20) -------------------------------------------------------- void *__thiscall sub_599D20(void *this) { void *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &RidePetWin::`vftable'; *((_DWORD *)v1 + 58) = &RidePetWin::`vftable'; sub_8D06C0((float *)v1 + 86); *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 110) = 0; *((_DWORD *)v1 + 99) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 94) = 0; v2 = *((_DWORD *)v1 + 108); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *((_DWORD *)v1 + 108) = 0; } v3 = *((_DWORD *)v1 + 109); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 109) = 0; } v4 = *((_DWORD *)v1 + 110); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 110) = 0; } *((_DWORD *)v1 + 95) = 0; *((_BYTE *)v1 + 384) = 1; *((_DWORD *)v1 + 111) = 0; *((_BYTE *)v1 + 448) = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D9604: using guessed type void *RidePetWin::`vftable'; // 9D9624: using guessed type void *RidePetWin::`vftable'; //----- (00599E50) -------------------------------------------------------- LONG __thiscall sub_599E50(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; *this = &RidePetWin::`vftable'; this[58] = &RidePetWin::`vftable'; v2 = this[110]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[109]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[108]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); nullsub_6(v1 + 86); return sub_8F10F0(v1); } // 9D9604: using guessed type void *RidePetWin::`vftable'; // 9D9624: using guessed type void *RidePetWin::`vftable'; //----- (00599F40) -------------------------------------------------------- int __thiscall sub_599F40(float *this) { float *v1; // esi int v2; // ecx int result; // eax v1 = this; v2 = *((_DWORD *)this + 107); if ( v2 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 452))(*((_DWORD *)v1 + 110)); v1[89] = 2.0; result = sub_8D06E0(v1 + 86, flt_ACCFCC, 1); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00599F90) -------------------------------------------------------- int __thiscall sub_599F90(int this) { int result; // eax int (__stdcall *v2)(_DWORD); // edx result = this; if ( *(_DWORD *)(this + 428) ) { v2 = *(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 428) + 452); if ( *(_DWORD *)(this + 376) ) result = v2(*(_DWORD *)(this + 432)); else result = v2(*(_DWORD *)(this + 436)); } return result; } //----- (00599FD0) -------------------------------------------------------- int __thiscall sub_599FD0(_DWORD *this, int a2) { int v2; // esi int result; // eax bool v4; // zf char v5; // [esp+4h] [ebp-104h] v2 = (int)this; if ( this[104] && this[105] && this[106] && this[102] ) { result = sprintf(&v5, "%d/%d", a2, this[93]); v4 = *(_DWORD *)(v2 + 360) == -1; *(_DWORD *)(v2 + 376) = a2; if ( !v4 ) result = sub_599F90(v2); } return result; } //----- (0059A060) -------------------------------------------------------- signed int __thiscall sub_59A060(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx signed int result; // eax v2 = this; v3 = this[101]; *((_BYTE *)v2 + 384) = a2; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 256))(a2); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[102] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[103] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[104] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[105] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[106] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 256))(*((unsigned __int8 *)v2 + 384)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 256))(*((unsigned __int8 *)v2 + 384)); if ( *((_BYTE *)v2 + 384) == 1 ) sub_599FD0(v2, v2[94]); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[111] + 240))(*((unsigned __int8 *)v2 + 384)); if ( *((_BYTE *)v2 + 448) == 1 ) { result = *((_BYTE *)v2 + 384) != 0 ? 0 : dword_AD01E8; v2[68] = result; } return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0059A180) -------------------------------------------------------- char __thiscall sub_59A180(_DWORD *this, int a2) { int v2; // esi int v3; // ebx volatile LONG *v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // esi char *v7; // eax volatile LONG **v8; // eax void (__thiscall *v9)(int, signed int); // eax int v10; // edi int v11; // ebx volatile LONG **v12; // eax volatile LONG *v13; // eax char *v14; // eax volatile LONG *v15; // eax char *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG *v29; // ST44_4 volatile LONG *v30; // eax volatile LONG *v31; // eax int v32; // eax volatile LONG *v33; // eax int v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // esi int v38; // [esp+5Ch] [ebp-24h] int v39; // [esp+5Ch] [ebp-24h] volatile LONG *v40; // [esp+60h] [ebp-20h] int v41; // [esp+64h] [ebp-1Ch] int v42; // [esp+68h] [ebp-18h] int v43; // [esp+6Ch] [ebp-14h] int v44; // [esp+70h] [ebp-10h] int v45; // [esp+7Ch] [ebp-4h] v2 = (int)this; v3 = a2; this[99] = a2; v43 = 0; v45 = 0; v4 = (volatile LONG *)sub_43D0D0(4u); v40 = v4; if ( !v4 ) goto LABEL_26; v38 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\PetFace.nif"); sub_8F66B0(v7, (int)&v43, v38); if ( !v43 ) return 0; v8 = sub_8FB140(v43, (int)"Frame", (int)&v44, (int)&a2, v4); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, v3, (int)"RidePetWin", 0) ) { LABEL_26: v5 = (void (__thiscall ***)(_DWORD, signed int))v43; v45 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v9 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 240); *(_BYTE *)(v2 + 254) = 1; v9(v2, 1); v10 = v44; v11 = a2; v12 = sub_8FB140(v43, (int)"Panel03", (int)&v44, (int)&a2, v40); v13 = sub_8F3EB0(v44, a2, (int)v12, v2, 0, 0); *(_DWORD *)(v2 + 392) = v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( !byte_ACAD5C ) sub_420410(); v14 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, "coll01"); v15 = sub_486130((int)v14); v39 = (int)v15; if ( !v15 ) { if ( !byte_ACAD5C ) sub_420410(); v16 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, "coll01"); v15 = sub_486130((int)v16); v39 = (int)v15; } v17 = sub_8FB140(v43, (int)"FaceCut_Mon", (int)&v44, (int)&a2, v15); v18 = sub_8F3EB0(v44 - v10, a2 - v11, (int)v17, v2, 0, 0); *(_DWORD *)(v2 + 428) = v18; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 428) + 452))(v39); v19 = sub_8FB140(v43, (int)"Panel04", (int)&v44, (int)&a2, v40); v20 = sub_8F3EB0(v44, a2, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(v43, (int)"Panel02", (int)&v44, (int)&a2, v40); v22 = sub_8F3EB0(v44, a2, (int)v21, v2, 0, 0); *(_DWORD *)(v2 + 388) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = sub_8FB140(v43, (int)"Fill_HP_Start", (int)&v44, (int)&a2, v40); v24 = sub_90CB20(v44 - v10, a2 - v11, (int)v23, v2, 2); *(_DWORD *)(v2 + 420) = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 256))(v24, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 240))(0); v25 = sub_8FB140(v43, (int)"Fill_HP_End", (int)&v44, (int)&a2, v40); v26 = sub_90CB20(v44 - v10, a2 - v11, (int)v25, v2, 2); *(_DWORD *)(v2 + 424) = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 256))(v26, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 240))(0); v27 = sub_8FB140(v43, (int)"Fill_HP", (int)&v44, (int)&a2, v40); v28 = sub_90CB20(v44 - v10, a2 - v11, (int)v27, v2, 2); *(_DWORD *)(v2 + 416) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); sub_8F71E0(v43, (int)"CharName", &v44, &a2, &v41, &v42); v29 = (volatile LONG *)dword_AD01E8; v30 = (volatile LONG *)sub_421050(0); v31 = sub_90AEF0(v44 - v10, a2 - v11, v41, v42, v30, (_DWORD *)v2, (int)"2", 0, 0, 1, v29, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 404) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 488))(v31, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 240))(0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 404) + 472))("TestName"); sub_8F71E0(v43, (int)"Num_Hungry", &v44, &a2, &v41, &v42); v32 = sub_421050(0); v33 = sub_8F4A20(v44 - v10, a2 - v11, v41, v42, v32, v2, (int)"2", 0); *(_DWORD *)(v2 + 408) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); sub_8F71E0(v43, (int)"Num_Velocity", &v44, &a2, &v41, &v42); v34 = sub_421050(0); v35 = sub_8F4A20(v44 - v10, a2 - v11, v41, v42, v34, v2, (int)"2", 0); *(_DWORD *)(v2 + 412) = v35; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 412) + 472))("-"); sub_402E40((void *)v2, xRight, dword_AC2F78, COERCE_INT(0.0), COERCE_INT(0.23)); if ( sub_8F71E0(v43, (int)"Picking01", &v44, &a2, &v41, &v42) ) { v36 = sub_8F4180(v44, a2, v41, v42, v2, 0, 0); *(_DWORD *)(v2 + 444) = v36; (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 240))(v36, 1); *(_DWORD *)(*(_DWORD *)(v2 + 444) + 272) = dword_AD01E8; } *(_DWORD *)(v2 + 272) = 0; v37 = (void (__thiscall ***)(_DWORD, signed int))v43; v45 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v37 ) (**v37)(v37, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0059A760) -------------------------------------------------------- int __thiscall sub_59A760(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi bool v3; // bl v2 = this; v3 = dword_BA6AD8 >= 1; if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*this[107] + 332))(pt.x, pt.y) && v3 ) sub_59A060(v2, *((_BYTE *)v2 + 384) == 0); return sub_8F1140(v2, a2); } // BA6AD8: using guessed type int dword_BA6AD8; //----- (0059A7C0) -------------------------------------------------------- unsigned int __thiscall sub_59A7C0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // edi unsigned __int16 *v4; // eax int v5; // ecx unsigned int v6; // edi unsigned int result; // eax const char *v8; // ebx char *v9; // eax _DWORD *v10; // eax int v11; // edi _DWORD *v12; // ebx char *v13; // eax _DWORD *v14; // eax int v15; // edi _DWORD *v16; // ebx char *v17; // eax _DWORD *v18; // eax int v19; // edi _DWORD *v20; // ebx char *v21; // eax _DWORD *v22; // eax int v23; // edi _DWORD *v24; // ebx char *v25; // eax _DWORD *v26; // eax int v27; // edi _DWORD *v28; // ebx char *v29; // eax _DWORD *v30; // eax int v31; // edi _DWORD *v32; // ebx int v33; // ecx int v34; // ecx int v35; // [esp+Ch] [ebp-4h] const char *v36; // [esp+18h] [ebp+8h] v2 = this; this[92] = a2; v3 = 0; if ( sub_4DC690() ) { while ( 1 ) { v4 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v3); if ( *v4 == a2 ) break; if ( ++v3 >= sub_4DC690() ) goto LABEL_6; } v5 = v2[101]; v2[93] = v4[99]; (*(void (__stdcall **)(unsigned __int16 *))(*(_DWORD *)v5 + 472))(v4 + 17); } LABEL_6: v35 = v2[92]; v6 = 0; result = sub_4DC690(); if ( result ) { while ( 1 ) { v8 = (const char *)sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v6); v36 = v8; if ( *(unsigned __int16 *)v8 == v35 ) break; ++v6; result = sub_4DC690(); if ( v6 >= result ) return result; } if ( !byte_ACAD5C ) sub_420410(); v9 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v8 + 234); v10 = sub_486130((int)v9); v11 = v2[108]; v12 = v10; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v2[108] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } if ( !byte_ACAD5C ) sub_420410(); v13 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v36 + 250); v14 = sub_486130((int)v13); v15 = v2[109]; v16 = v14; if ( (_DWORD *)v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v2[109] = v16; if ( v16 ) InterlockedIncrement(v16 + 1); } if ( !byte_ACAD5C ) sub_420410(); v17 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v36 + 266); v18 = sub_486130((int)v17); v19 = v2[110]; v20 = v18; if ( (_DWORD *)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v2[110] = v20; if ( v20 ) InterlockedIncrement(v20 + 1); } if ( !v2[108] ) { if ( !byte_ACAD5C ) sub_420410(); v21 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v36 + 234); v22 = sub_486130((int)v21); v23 = v2[108]; v24 = v22; if ( (_DWORD *)v23 != v22 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v2[108] = v24; if ( v24 ) InterlockedIncrement(v24 + 1); } } if ( !v2[109] ) { if ( !byte_ACAD5C ) sub_420410(); v25 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v36 + 250); v26 = sub_486130((int)v25); v27 = v2[109]; v28 = v26; if ( (_DWORD *)v27 != v26 ) { if ( v27 && !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v2[109] = v28; if ( v28 ) InterlockedIncrement(v28 + 1); } } if ( !v2[110] ) { if ( !byte_ACAD5C ) sub_420410(); v29 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v36 + 266); v30 = sub_486130((int)v29); v31 = v2[110]; v32 = v30; if ( (_DWORD *)v31 != v30 ) { if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); v2[110] = v32; if ( v32 ) InterlockedIncrement(v32 + 1); } } v2[94] = 0; result = strcmp(v36 + 132, "-"); v33 = v2[111]; if ( result ) { *((_BYTE *)v2 + 448) = 1; result = dword_AD01E8; *(_DWORD *)(v33 + 272) = dword_AD01E8; } else { *((_BYTE *)v2 + 448) = 0; *(_DWORD *)(v33 + 272) = 0; } v34 = v2[107]; v2[68] = 0; if ( v34 ) { if ( v2[94] ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v34 + 452))(v2[108]); else result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v34 + 452))(v2[109]); } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA54: using guessed type int dword_ACDA54; // AD01E8: using guessed type int dword_AD01E8; //----- (0059ABE0) -------------------------------------------------------- volatile LONG *__cdecl sub_59ABE0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C4u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_599D20(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( sub_59A180(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } result = 0; } return result; } //----- (0059AD10) -------------------------------------------------------- char __thiscall sub_59AD10(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v6; // ebx _DWORD *v7; // edi unsigned __int16 *v8; // eax const char *v9; // esi _DWORD *v10; // esi const CHAR *v11; // eax int v12; // esi _DWORD *v13; // [esp+4h] [ebp-4h] v4 = this; v13 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( v6[2] || v6[4] ) { byte_BA6BD0 = 1; return 0; } v7 = (_DWORD *)v6[5]; if ( !v7 ) { byte_BA6BD0 = 1; return 0; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v7 + 4))(v6[5]) != 22 ) return 0; v8 = sub_59AF70(v4[92]); if ( !v8 ) goto LABEL_18; if ( v8[65] ) { LABEL_15: v10 = (_DWORD *)v4[99]; v11 = sub_40C190(1906944922); goto LABEL_16; } v9 = (const char *)(v8 + 66); if ( !strcmp((const char *)v8 + 132, "-") ) { v4 = v13; goto LABEL_15; } if ( strcmp((const char *)(v7[28] + 2), v9) ) { v10 = (_DWORD *)v13[99]; v11 = sub_40C190(-1141985811); LABEL_16: sub_492060(v10, (int)v11); return 0; } LABEL_18: v12 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v12, v6[3]); (**(void (__thiscall ***)(int, _DWORD))(v12 + 8))(v12 + 8, v13[99]); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0059AE70) -------------------------------------------------------- void __thiscall sub_59AE70(void *this, int a2) { void *v2; // esi int v3; // eax int v4; // ecx unsigned __int16 *v5; // eax __int16 *v6; // edi int v7; // ST08_4 char *v8; // eax char *v9; // ST08_4 char *v10; // eax char *v11; // eax char *v12; // edi v2 = this; sub_8D0730((int)this + 344, flt_ACCFCC); if ( v3 == 1 && *((_DWORD *)v2 + 107) ) { v4 = *((_DWORD *)v2 + 107); if ( *((_DWORD *)v2 + 94) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 452))(*((_DWORD *)v2 + 108)); else (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 452))(*((_DWORD *)v2 + 109)); } if ( *((_BYTE *)v2 + 448) == 1 ) { v5 = sub_59AF70(*((_DWORD *)v2 + 92)); if ( v5 ) { v6 = (__int16 *)sub_40C8D0(v5 + 66); v7 = sub_6854B0(&byte_ADA230, *v6); v8 = (char *)sub_40A910(691610667); v9 = sub_7549E0(v8, v7); v10 = (char *)sub_40A910(-269342674); v11 = sub_7549E0(v10, v6 + 17); v12 = sub_7549E0("%s\n%s", v11, v9); sub_8F2EA0(*((void ***)v2 + 111), v12); sub_8F2EA0((void **)v2, v12); } } } // ACCFCC: using guessed type float flt_ACCFCC; // ADA230: using guessed type char byte_ADA230; //----- (0059AF70) -------------------------------------------------------- unsigned __int16 *__cdecl sub_59AF70(int a1) { unsigned int v1; // esi unsigned __int16 *result; // eax v1 = 0; if ( !sub_4DC690() ) return 0; while ( 1 ) { result = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v1); if ( *result == a1 ) break; if ( ++v1 >= sub_4DC690() ) return 0; } return result; } // ACDA54: using guessed type int dword_ACDA54; //----- (0059AFB0) -------------------------------------------------------- void *__thiscall sub_59AFB0(void *this, char a2) { void *v2; // esi v2 = this; sub_599E50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0059B050) -------------------------------------------------------- char __thiscall sub_59B050(_DWORD *this, int a2) { this[165] = a2; return sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * a2 + 348), 1); } //----- (0059B080) -------------------------------------------------------- int *__thiscall sub_59B080(int this, int a2) { int v2; // esi int v3; // ebx int v4; // eax BYTE *v5; // edi signed int v6; // eax const char *v7; // edx const char *v8; // ecx BYTE *v9; // edx char v10; // al int v11; // edi char *v12; // eax BYTE *v14; // edi BYTE v15; // al int i; // ebx const char *v17; // ecx _BYTE *v18; // edx char v19; // al BYTE *v20; // edi BYTE v21; // al int j; // ebx const char *v23; // ecx _BYTE *v24; // edx char v25; // al int v26; // edi char *v27; // eax BYTE *v28; // edi BYTE v29; // al int v30; // ebx _BYTE *v31; // edx _BYTE *v32; // ecx int v33; // eax _WORD *v34; // ecx char *v35; // eax int v36; // esi char *v37; // [esp-8h] [ebp-20h] char *v38; // [esp-8h] [ebp-20h] int v39; // [esp-4h] [ebp-1Ch] int v40; // [esp-4h] [ebp-1Ch] int v41; // [esp+0h] [ebp-18h] int v42; // [esp+0h] [ebp-18h] int TestChar; // [esp+14h] [ebp-4h] const char *v44; // [esp+20h] [ebp+8h] v2 = this; if ( !(*(_BYTE *)(this + 28) & 1) && sub_8D0630((float *)(this + 348), *(float *)&a2) ) *(_BYTE *)(v2 + 376) = 0; v3 = 0; TestChar = 0; v4 = (*(int (**)(void))(**(_DWORD **)(v2 + 344) + 452))(); v44 = (const char *)v4; v5 = (BYTE *)v4; v6 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v2 + 344) + 452))()); if ( v6 <= 0 ) { if ( !v6 ) { v28 = *(BYTE **)(v2 + 392); v29 = *v28; v30 = 0; if ( !*v28 ) goto LABEL_50; do { if ( IsDBCSLeadByte(v29) ) v28 += 2; else ++v28; v29 = *v28; ++v30; } while ( *v28 ); if ( v30 != 1 ) { LABEL_50: v32 = *(_BYTE **)(v2 + 392); *(_DWORD *)(v2 + 384) = 0; *v32 = 0; v41 = *(_DWORD *)(v2 + 664); v39 = *(_DWORD *)(v2 + 384); v37 = "%d/%d"; LABEL_15: v11 = **(_DWORD **)(v2 + 380); v12 = sub_7549E0(v37, v39, v41); return (int *)(*(int (__thiscall **)(_DWORD, char *))(v11 + 472))(*(_DWORD *)(v2 + 380), v12); } v31 = *(_BYTE **)(v2 + 392); --*(_DWORD *)(v2 + 384); *v31 = 0; v42 = *(_DWORD *)(v2 + 664); v40 = *(_DWORD *)(v2 + 384); v38 = "%d/%d"; goto LABEL_35; } } else { v7 = v44; if ( *v44 ) { do { if ( IsDBCSLeadByte(*v5) ) v5 += 2; else ++v5; ++v3; } while ( *v5 ); v7 = v44; TestChar = v3; } v5 = *(BYTE **)(v2 + 392); if ( !strlen(*(const char **)(v2 + 392)) ) { *(_DWORD *)(v2 + 384) += v3; v8 = v7; v9 = v5; do { v10 = *v8; *v9++ = *v8++; } while ( v10 ); v41 = *(_DWORD *)(v2 + 664); v39 = *(_DWORD *)(v2 + 384); v37 = "%d/%d"; goto LABEL_15; } if ( _stricmp((const char *)v5, v7) < 0 ) { v14 = *(BYTE **)(v2 + 392); v15 = *v14; for ( i = 0; *v14; ++i ) { if ( IsDBCSLeadByte(v15) ) v14 += 2; else ++v14; v15 = *v14; } v17 = v44; v18 = *(_BYTE **)(v2 + 392); *(_DWORD *)(v2 + 384) += TestChar - i; do { v19 = *v17; *v18++ = *v17++; } while ( v19 ); v11 = **(_DWORD **)(v2 + 380); v12 = sub_7549E0("%d/%d", *(_DWORD *)(v2 + 384), *(_DWORD *)(v2 + 664)); return (int *)(*(int (__thiscall **)(_DWORD, char *))(v11 + 472))(*(_DWORD *)(v2 + 380), v12); } if ( _stricmp(*(const char **)(v2 + 392), v44) > 0 ) { v20 = *(BYTE **)(v2 + 392); v21 = *v20; for ( j = 0; *v20; ++j ) { if ( IsDBCSLeadByte(v21) ) v20 += 2; else ++v20; v21 = *v20; } v23 = v44; v24 = *(_BYTE **)(v2 + 392); *(_DWORD *)(v2 + 384) += TestChar - j; do { v25 = *v23; *v24++ = *v23++; } while ( v25 ); v42 = *(_DWORD *)(v2 + 664); v40 = *(_DWORD *)(v2 + 384); v38 = "%d/%d"; LABEL_35: v26 = **(_DWORD **)(v2 + 380); v27 = sub_7549E0(v38, v40, v42); return (int *)(*(int (__thiscall **)(_DWORD, char *))(v26 + 472))(*(_DWORD *)(v2 + 380), v27); } } v33 = sub_685510(&byte_ADA230, **(_WORD **)(v2 + 656)); v34 = *(_WORD **)(v2 + 652); if ( v33 ) return sub_5D5B70(v34, v33, 1); sub_5D5EA0((int)v34, (int)v5, 30069); v35 = sub_7549E0("%d\n", 0); v36 = *(_DWORD *)(v2 + 652); (*(void (__stdcall **)(char *))(**(_DWORD **)(v36 + 380) + 472))(v35); return (int *)(*(int (__stdcall **)(signed int))(**(_DWORD **)(v36 + 380) + 256))(1); } // ADA230: using guessed type char byte_ADA230; //----- (0059B3B0) -------------------------------------------------------- int __thiscall sub_59B3B0(_DWORD **this, int a2, int a3) { return (*(int (**)(void))(*this[86] + 480))(); } //----- (0059B3D0) -------------------------------------------------------- _DWORD *__thiscall sub_59B3D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &RoarWin::`vftable'; v1[58] = &RoarWin::`vftable'; v1[86] = 0; sub_8D0610((_BYTE *)v1 + 348); v1[166] = 65; v1[165] = 0; v1[96] = 0; v1[95] = 0; v1[98] = 0; *((_BYTE *)v1 + 376) = 0; v1[163] = 0; v1[164] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D9A14: using guessed type void *RoarWin::`vftable'; // 9D9A34: using guessed type void *RoarWin::`vftable'; //----- (0059B470) -------------------------------------------------------- LONG __thiscall sub_59B470(_DWORD *this) { _DWORD *v1; // esi int v2; // edi void *v3; // eax int v4; // edi v1 = this; *this = &RoarWin::`vftable'; this[58] = &RoarWin::`vftable'; v2 = this[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = (void *)v1[98]; v1[95] = 0; if ( v3 ) { operator delete[](v3); v1[98] = 0; } v4 = v1[86]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // 9D9A14: using guessed type void *RoarWin::`vftable'; // 9D9A34: using guessed type void *RoarWin::`vftable'; //----- (0059B550) -------------------------------------------------------- char __thiscall sub_59B550(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // edi volatile LONG v17; // ebx const CHAR *v18; // eax volatile LONG **v19; // eax __int16 *v20; // eax int v21; // edi char *v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // edi int v26; // ST44_4 int v27; // ST40_4 int v28; // eax volatile LONG *v29; // edi volatile LONG v30; // ebx const CHAR *v31; // eax volatile LONG **v32; // edi volatile LONG *v33; // edi int v34; // ST44_4 int v35; // ST40_4 int v36; // eax volatile LONG *v37; // edi volatile LONG v38; // ebx const CHAR *v39; // eax volatile LONG *v40; // edi volatile LONG **v41; // edi volatile LONG **v42; // eax volatile LONG **v43; // edi volatile LONG *v44; // eax volatile LONG *v45; // ecx int v46; // edi int v47; // ebx int v48; // eax volatile LONG *v49; // edi volatile LONG v50; // ebx const CHAR *v51; // eax volatile LONG **v52; // eax volatile LONG **v53; // edi volatile LONG *v54; // eax volatile LONG *v55; // ecx int v56; // edi int v57; // ebx int v58; // eax volatile LONG *v59; // eax int v60; // edi char *v61; // eax int v62; // ecx int *v63; // ebx int v64; // edi const CHAR *v65; // eax const CHAR *v66; // eax int v67; // edi CHAR v68; // dl _BYTE *v69; // eax volatile LONG *v70; // [esp+64h] [ebp-24h] int v71; // [esp+68h] [ebp-20h] int v72; // [esp+6Ch] [ebp-1Ch] int v73; // [esp+70h] [ebp-18h] int v74; // [esp+74h] [ebp-14h] int v75; // [esp+78h] [ebp-10h] int v76; // [esp+84h] [ebp-4h] int v77; // [esp+90h] [ebp+8h] v2 = (int)this; v73 = 0; v76 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v70 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v73; v76 = -1; if ( !v73 || InterlockedDecrement((volatile LONG *)(v73 + 4)) ) return 0; v5 = v73 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\Roar.nif"); sub_8F66B0(v8, (int)&v73, v7); if ( !v73 ) return 0; v9 = sub_8FB140(v73, (int)"Frame", (int)&v74, (int)&v75, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"RoarWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v73; v76 = -1; if ( !v73 || InterlockedDecrement((volatile LONG *)(v73 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v74; v77 = v75; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v73, (int)"Theme", (int)&v74, (int)&v75, v11); else v12 = sub_8FB140(v73, (int)"Theme", (int)&v74, (int)&v75, 0); sub_8F3EB0(v74 - v10, v75 - v77, (int)v12, v2, 0, 0); v13 = sub_8FB140(v73, (int)"Panel01", (int)&v74, (int)&v75, v3); sub_8F3EB0(v74 - v10, v75, (int)v13, v2, 0, 0); v14 = sub_8FB140(v73, (int)"Panel02", (int)&v74, (int)&v75, v3); sub_8F3EB0(v74 - v10, v75, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v73, (int)"WinTitle", &v74, &v75, &v71, &v72) ) goto LABEL_35; v15 = sub_421050(7); v16 = sub_8F4A20(v74, v75, v71, v72, v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v16 + 468))(v16, &dword_AA8D98); v17 = *v16; v18 = sub_40C190(-297068768); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v17 + 472))(v16, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); sub_8F71E0(v73, (int)"Slot00", &v74, &v75, &v71, &v72); v19 = sub_8FB140(v73, (int)"Slot00", (int)&v74, (int)&v75, 0); sub_8F3EB0(v74, v75, (int)v19, v2, 0, 0); *(_DWORD *)(v2 + 652) = sub_5D6E20(v74, v75, v2); v20 = (__int16 *)sub_49F760(30069); *(_DWORD *)(v2 + 656) = v20; v21 = sub_685510(&byte_ADA230, *v20); sub_5D5EA0(*(_DWORD *)(v2 + 652), v21, 30069); v22 = sub_7549E0("%d\n", 0); sub_43E710(*(_DWORD ***)(v2 + 652), (int)v22); if ( v21 ) sub_5D5B70(*(_WORD **)(v2 + 652), v21, 1); if ( !sub_8F71E0(v73, (int)"TestBox", &v74, &v75, &v71, &v72) ) { LABEL_35: v76 = -1; sub_410C00(&v73); return 0; } v23 = sub_45A900(v74, v75 - 2, v71, v72, v2, 1342177280, 65, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 344), (int)v23); sub_459B60(*(_DWORD **)(v2 + 344), 1); v24 = sub_8FB140(v73, (int)"BtnNor", (int)&v74, (int)&v75, v70); sub_8FB650(v24, v73, (int)"BtnClick"); sub_8FB650(v24, v73, (int)"BtnOver"); v25 = sub_8FE0F0(v74, v75, (int)v24, v2, 0, 0, 0); v26 = sub_421050(0); v27 = (*(int (__thiscall **)(volatile LONG *))(*v25 + 148))(v25); v28 = (*(int (__thiscall **)(volatile LONG *))(*v25 + 144))(v25); v29 = sub_8F4A20(0, 1, v28, v27, v26, (int)v25, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); v30 = *v29; v31 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v30 + 472))(v29, v31); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); v32 = sub_8FB140(v73, (int)"BtnNor01", (int)&v74, (int)&v75, v70); sub_8FB650(v32, v73, (int)"BtnClick01"); sub_8FB650(v32, v73, (int)"BtnOver01"); v33 = sub_8FE0F0(v74, v75, (int)v32, v2, 1, 0, 0); v34 = sub_421050(0); v35 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 148))(v33); v36 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 144))(v33); v37 = sub_8F4A20(0, 1, v36, v35, v34, (int)v33, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v38 = *v37; v39 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v37, v39); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v40 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v73 + 72))("HelpLinkNor") ) { v41 = sub_8FB140(v73, (int)"HelpLinkNor", (int)&v74, (int)&v75, v40); sub_8FB650(v41, v73, (int)"HelpLinkClick"); sub_8FB650(v41, v73, (int)"HelpLinkOver"); sub_8FE0F0(v74, v75, (int)v41, v2, 2, 0, 0); } v42 = sub_8FB140(v73, (int)"TestBox01", (int)&v74, (int)&v75, 0); v43 = v42; v44 = sub_8F3EB0(v74, v75, (int)v42, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 276))(v44, 0.0); v45 = v43[9]; v46 = *(_DWORD *)(*v45 + 24); v47 = *(_DWORD *)(*v45 + 20); v48 = sub_421050(0); v49 = sub_8F4A20(v74, v75, v47, v46, v48, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 5); if ( *sub_40C190(1497921689) ) { v50 = *v49; v51 = sub_40C190(1497921689); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v49, v51); } else { (*(void (__thiscall **)(volatile LONG *, const char *))(*v49 + 472))(v49, "Unknown Use String"); } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v52 = sub_8FB140(v73, (int)"TestBox_count", (int)&v74, (int)&v75, 0); v53 = v52; v54 = sub_8F3EB0(v74, v75, (int)v52, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 276))(v54, 0.0); v55 = v53[9]; v56 = *(_DWORD *)(*v55 + 24); v57 = *(_DWORD *)(*v55 + 20); v58 = sub_421050(0); v59 = sub_8F4A20(v74, v75, v57, v56, v58, v2, 0, 0); *(_DWORD *)(v2 + 380) = v59; (*(void (__thiscall **)(volatile LONG *, signed int))(*v59 + 488))(v59, 5); v60 = **(_DWORD **)(v2 + 380); v61 = sub_7549E0("%d/%d", *(_DWORD *)(v2 + 384), 50); (*(void (__thiscall **)(_DWORD, char *))(v60 + 472))(*(_DWORD *)(v2 + 380), v61); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); if ( *sub_40C190(-100327884) ) { v63 = *(int **)(v2 + 344); v64 = *v63; v65 = sub_40C190(-100327884); (*(void (__thiscall **)(int *, const CHAR *))(v64 + 464))(v63, v65); v66 = sub_40C190(-100327884); v62 = v2 + 396; v67 = v2 + 396 - (_DWORD)v66; do { v68 = *v66; v66[v67] = *v66; ++v66; } while ( v68 ); } else { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 464))("Unknown Notice"); *(_DWORD *)(v2 + 396) = 1852534357; v62 = v2 + 396; *(_DWORD *)(v62 + 4) = 544110447; *(_DWORD *)(v62 + 8) = 1769238350; *(_WORD *)(v62 + 12) = 25955; *(_BYTE *)(v62 + 14) = 0; } *(_DWORD *)(v2 + 388) = strlen((const char *)v62); v69 = operator new[](0x78u); *(_DWORD *)(v2 + 392) = v69; *v69 = 0; v76 = -1; sub_410C00(&v73); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ADA230: using guessed type char byte_ADA230; //----- (0059BDA0) -------------------------------------------------------- int __stdcall sub_59BDA0(const char *a1) { _DWORD *v1; // eax _DWORD *v2; // eax __int16 v4; // [esp+Ch] [ebp-10h] char v5; // [esp+Eh] [ebp-Eh] int v6; // [esp+18h] [ebp-4h] if ( !(dword_AD0190 & 1) ) { dword_AD0190 |= 1u; dword_ACF58C = 0; dword_ACF584 = 0; dword_ACF588 = 0; dword_ACF580 = (int)&NiTList::`vftable'; sub_450CD0(&unk_ACF590); atexit(sub_9A2810); v6 = -1; } if ( !byte_ACF57A ) { byte_ACF57A = 1; v4 = 2573; v5 = 0; v1 = operator new(0xCu); v6 = 2; if ( v1 ) v2 = sub_4511D0(v1, (const char *)&v4, " "); else v2 = 0; v6 = -1; sub_451320(&dword_ACF580, (int)v2); } return sub_4512E0((char *)&dword_ACF580, a1, 1); } // 9B1AF8: using guessed type void *NiTList::`vftable'; // ACF57A: using guessed type char byte_ACF57A; // ACF580: using guessed type int dword_ACF580; // ACF584: using guessed type int dword_ACF584; // ACF588: using guessed type int dword_ACF588; // ACF58C: using guessed type int dword_ACF58C; // AD0190: using guessed type int dword_AD0190; //----- (0059BEA0) -------------------------------------------------------- volatile LONG *__cdecl sub_59BEA0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x29Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_59B3D0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0059BFD0) -------------------------------------------------------- char __thiscall sub_59BFD0(int this) { int v1; // ebx const char *v2; // eax const CHAR *v3; // edi const CHAR *v4; // edi const char *v5; // esi signed int v6; // edi char v7; // al char v8; // al char *v9; // ecx signed int v10; // edx BYTE *v11; // esi unsigned int v12; // edi const CHAR *v13; // eax const CHAR *v14; // eax const char *v15; // esi const CHAR *v16; // eax const char *v17; // eax int v18; // eax const CHAR *v19; // edi const char *v21; // [esp+14h] [ebp-8Ch] char v22; // [esp+1Ch] [ebp-84h] char v23; // [esp+1Dh] [ebp-83h] v1 = this; if ( byte_ACEB20 ) { if ( *sub_40C190(-654835669) ) { v3 = sub_40C190(-654835669); if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 4))(25, v3, v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 20))(25, v3, v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, v3, v1 + 232); } else { if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 4))( 25, "Error - Global Notice", v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 20))( 25, "Error - Global Notice", v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const char *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, "Error - Global Notice", v1 + 232); } return (char)v2; } if ( *(_BYTE *)(this + 376) == 1 ) { if ( *sub_40C190(-598788290) ) { v4 = sub_40C190(-598788290); if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 4))(25, v4, v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 20))(25, v4, v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, v4, v1 + 232); } else { if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 4))( 25, "Error - CollTime", v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 20))( 25, "Error - CollTime", v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const char *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, "Error - CollTime", v1 + 232); } return (char)v2; } v2 = (const char *)(*(int (**)(void))(**(_DWORD **)(this + 344) + 452))(); v5 = v2; v21 = v2; if ( !v2 ) return (char)v2; v6 = strlen(v2); if ( !*v5 ) { LABEL_34: v11 = (BYTE *)v21; v12 = 0; if ( &v21[strlen(v21) + 1] != v21 + 1 && *v21 ) { do { if ( IsDBCSLeadByte(*v11) ) v11 += 2; else ++v11; ++v12; } while ( *v11 ); } if ( v12 <= *(_DWORD *)(v1 + 664) ) { if ( v12 && strcmp(v21, sub_40C190(-100327884)) ) { v15 = (const char *)sub_451700(v21); if ( !strcmp(v21, v15) ) { v2 = (const char *)strlen((const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 344) + 452))()); if ( v2 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 52))() ) sub_536E90(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 296) + 716) + 4 * *(_DWORD *)(v1 + 660) + 348), 0); v17 = (const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 344) + 452))(); v18 = sub_59BDA0(v17); (*(void (__stdcall **)(int))(**(_DWORD **)(v1 + 344) + 464))(v18); sub_4BD150(*(_DWORD **)(v1 + 296)); sub_8F2BC0((volatile LONG *)v1, 1, 0, 0); LOBYTE(v2) = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 52))(); if ( !(_BYTE)v2 ) { LOBYTE(v2) = sub_8D06A0((float *)(v1 + 348), flt_ACCFCC); *(float *)(v1 + 368) = 5.0; *(_BYTE *)(v1 + 376) = 1; } } } else { v16 = sub_40C190(610680710); sub_492060(*(_DWORD **)(v1 + 296), (int)v16); LOBYTE(v2) = (*(int (__stdcall **)(const char *))(**(_DWORD **)(v1 + 344) + 464))(v15); } return (char)v2; } if ( !*sub_40C190(-2113019669) ) { if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 4))( 25, "Error - Not Input", v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 20))( 25, "Error - Not Input", v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const char *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, "Error - Not Input", v1 + 232); return (char)v2; } v14 = sub_40C190(-2113019669); } else { if ( !*sub_40C190(-1984563513) ) { if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 4))( 25, "Error - String Over", v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 20))( 25, "Error - String Over", v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const char *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, "Error - String Over", v1 + 232); return (char)v2; } v14 = sub_40C190(-1984563513); } v19 = v14; if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 4))(25, v14, v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 20))(25, v19, v1 + 232); } LOBYTE(v2) = (*(int (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, v19, v1 + 232); return (char)v2; } while ( 1 ) { v7 = *v5++; if ( v7 == 123 ) { v22 = 0; memset(&v23, 0, 0x7Fu); for ( ; *v5 == 32; ++v5 ) ; v8 = *v5; v9 = &v22; if ( *v5 ) { v10 = 0; do { if ( v10 >= v6 ) break; if ( v8 != 32 ) { *v9++ = v8; ++v10; } v8 = (v5++)[1]; } while ( v8 ); } *v9 = 0; if ( !_strnicmp(&v22, "color,", 6u) ) break; } if ( !*v5 ) goto LABEL_34; } sub_536E90(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 296) + 716) + 4 * *(_DWORD *)(v1 + 660) + 348), 0); v13 = sub_4090F0(-535642907); sub_492060(*(_DWORD **)(v1 + 296), (int)v13); LOBYTE(v2) = sub_8F2BC0((volatile LONG *)v1, 1, 0, 0); return (char)v2; } // ACCFCC: using guessed type float flt_ACCFCC; // ACEB20: using guessed type char byte_ACEB20; //----- (0059C5A0) -------------------------------------------------------- char __thiscall sub_59C5A0(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi _DWORD *v4; // eax v3 = this; if ( a2 ) { if ( a2 == 1 ) { sub_536E90(*(_DWORD *)(*(_DWORD *)(*((_DWORD *)this + 74) + 716) + 4 * *((_DWORD *)this + 165) + 348), 0); LOBYTE(v4) = sub_8F2BC0(v3, 1, 0, 0); } else { LOBYTE(v4) = a2 - 2; if ( a2 == 2 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "Roar"); } } } else { LOBYTE(v4) = sub_59BFD0((int)this); } return (char)v4; } //----- (0059C620) -------------------------------------------------------- void *__thiscall sub_59C620(void *this, char a2) { void *v2; // esi v2 = this; sub_59B470(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0059C650) -------------------------------------------------------- float *__thiscall sub_59C650(float *this) { float *v1; // esi float *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &RollingDiceWin::`vftable'; *((_DWORD *)v1 + 58) = &RollingDiceWin::`vftable'; v1[89] = 3.4028235e38; v1[91] = 0.0; *((_BYTE *)v1 + 376) = 1; v1[90] = 0.0; v1[87] = -6.8056469e38/*NaN*/; result = v1; v1[95] = 0.94999999; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9D9E10: using guessed type void *RollingDiceWin::`vftable'; // 9D9E2C: using guessed type void *RollingDiceWin::`vftable'; //----- (0059C6D0) -------------------------------------------------------- char __userpurge sub_59C6D0@(int a1@, int a2@, int a3, int a4) { _DWORD *v4; // esi char result; // al v4 = (_DWORD *)a1; if ( a3 == 1 ) { a3 = *(unsigned __int16 *)(a1 + 348); BYTE2(a3) = 0; sub_6F3D10(&off_AB7F2C, 12, 60, &a3, 3u); } else { result = a3 - 2; if ( a3 != 2 ) return result; a3 = *(unsigned __int16 *)(a1 + 348); BYTE2(a3) = 1; sub_6F3D10(&off_AB7F2C, 12, 60, &a3, 3u); } sub_5D5EA0(v4[86], a2, 0xFFFF); return sub_8F86A0(&unk_BA6B10, v4); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0059C7B0) -------------------------------------------------------- char __thiscall sub_59C7B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; if ( a2 == 1 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { sub_4B7C70(v4, *((_WORD *)v3 + 175)); *((_WORD *)v3 + 175) = -1; LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v3); } } else { LOBYTE(v4) = a2 - 2; if ( a2 == 2 ) LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, this); } return (char)v4; } //----- (0059C810) -------------------------------------------------------- int __userpurge sub_59C810@(int a1@, int a2@, int a3, __int16 a4) { *(_WORD *)(a1 + 348) = a3; *(_WORD *)(a1 + 350) = a4; return sub_5D5EA0(*(_DWORD *)(a1 + 344), a2, a3); } //----- (0059C850) -------------------------------------------------------- _DWORD *__thiscall sub_59C850(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD *result; // eax int *v4; // ecx v2 = this; result = (_DWORD *)(*(int (__stdcall **)(LONG, LONG))(*this[86] + 332))(pt.x, pt.y); if ( (_BYTE)result ) { result = sub_6899D0(*((_WORD *)v2 + 174)); v4 = (int *)v2[86][68]; if ( v4 ) { if ( result ) result = (_DWORD *)sub_547C20(v4, (int)result); } } return result; } //----- (0059C8B0) -------------------------------------------------------- char __thiscall sub_59C8B0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // edi int v11; // ebx volatile LONG *v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax int v16; // eax int v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // ecx int v20; // eax const CHAR *v21; // eax volatile LONG **v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax int v29; // eax int v30; // eax const CHAR *v31; // eax volatile LONG *v32; // ecx int v33; // eax volatile LONG *v34; // edi volatile LONG v35; // ebx const CHAR *v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // esi char v38; // [esp+54h] [ebp-28h] char v39; // [esp+58h] [ebp-24h] int v40; // [esp+5Ch] [ebp-20h] volatile LONG *v41; // [esp+60h] [ebp-1Ch] int v42; // [esp+64h] [ebp-18h] int v43; // [esp+68h] [ebp-14h] int v44; // [esp+6Ch] [ebp-10h] int v45; // [esp+78h] [ebp-4h] volatile LONG **v46; // [esp+84h] [ebp+8h] int v47; // [esp+84h] [ebp+8h] volatile LONG **v48; // [esp+84h] [ebp+8h] int v49; // [esp+84h] [ebp+8h] volatile LONG *v50; // [esp+84h] [ebp+8h] volatile LONG **v51; // [esp+84h] [ebp+8h] int v52; // [esp+84h] [ebp+8h] volatile LONG *v53; // [esp+84h] [ebp+8h] volatile LONG **v54; // [esp+84h] [ebp+8h] int v55; // [esp+84h] [ebp+8h] v2 = (int)this; v42 = 0; v45 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v41 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v42; v45 = -1; if ( !v42 || InterlockedDecrement((volatile LONG *)(v42 + 4)) ) return 0; v5 = v42 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\BelongDiceMain.nif"); sub_8F66B0(v8, (int)&v42, v7); if ( !v42 ) return 0; v9 = sub_8FB140(v42, (int)"Panel01", (int)&v43, (int)&v44, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"RollingDiceWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v42; v45 = -1; if ( !v42 || InterlockedDecrement((volatile LONG *)(v42 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = v43; v11 = v44; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v42, (int)"Theme", (int)&v43, (int)&v44, v12); else v13 = sub_8FB140(v42, (int)"Theme", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v10, v44 - v11, (int)v13, v2, 0, 0); sub_8F71E0(v42, (int)"InvItemSlot001", &v43, &v44, &v38, &v39); v14 = sub_8FB140(v42, (int)"InvItemSlot001", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43, v44, (int)v14, v2, 0, 0); v15 = sub_5D6E20(v43, v44, v2); *(_DWORD *)(v2 + 344) = v15; *((_DWORD *)v15 + 68) = dword_ACEC34; v46 = sub_8FB140(v42, (int)"TextBox01", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43, v44, (int)v46, v2, 0, 0); v16 = *v46[9]; v47 = *(_DWORD *)(v16 + 24); v40 = *(_DWORD *)(v16 + 20); v17 = sub_421050(0); v18 = sub_8F4A20(v43 - v10, v44 - v11, v40, v47, v17, v2, 0, 0); *(_DWORD *)(v2 + 352) = v18; (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 472))(&unk_9D9C83); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); v48 = sub_8FB140(v42, (int)"TextBox02", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43, v44, (int)v48, v2, 0, 0); v19 = v48[9]; v49 = *(_DWORD *)(*v19 + 24); v40 = *(_DWORD *)(*v19 + 20); v20 = sub_421050(0); v50 = sub_8F4A20(v43 - v10, v44 - v11, v40, v49, v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); *(_BYTE *)(*((_DWORD *)v50 + 72) + 285) = 1; v40 = *v50; v21 = sub_40A910(480611428); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v50, v21); (*(void (__stdcall **)(_DWORD))(*v50 + 240))(0); v22 = sub_8FB140(v42, (int)"Fill_Skill_Panel", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v10, v44 - v11, (int)v22, v2, 0, 0); v23 = sub_8FB140(v42, (int)"Fill_Skill", (int)&v43, (int)&v44, 0); v24 = sub_90CB20(v43 - v10, v44 - v11, (int)v23, v2, 2); *(_DWORD *)(v2 + 364) = v24; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v25 = sub_8FB140(v42, (int)"Fill_Skill_Start", (int)&v43, (int)&v44, 0); v26 = sub_90CB20(v43 - v10, v44 - v11, (int)v25, v2, 2); *(_DWORD *)(v2 + 368) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v27 = sub_8FB140(v42, (int)"Fill_Skill_End", (int)&v43, (int)&v44, 0); v28 = sub_90CB20(v43 - v10, v44 - v11, (int)v27, v2, 2); *(_DWORD *)(v2 + 372) = v28; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v51 = sub_8FB140(v42, (int)"BtnNor02", (int)&v43, (int)&v44, v41); sub_8FB650(v51, v42, (int)"BtnClick02"); sub_8FB650(v51, v42, (int)"BtnOver02"); sub_8FE0F0(v43 - v10, v44 - v11, (int)v51, v2, 2, 0, 0); v29 = *v51[9]; v52 = *(_DWORD *)(v29 + 24); v40 = *(_DWORD *)(v29 + 20); v30 = sub_421050(7); v53 = sub_8F4A20(v43 - v10, v44 - v11 + 1, v40, v52, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 5); v40 = *v53; v31 = sub_40A910(844205160); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v53, v31); (*(void (__stdcall **)(_DWORD))(*v53 + 240))(0); v54 = sub_8FB140(v42, (int)"BtnNor03", (int)&v43, (int)&v44, v41); sub_8FB650(v54, v42, (int)"BtnClick03"); sub_8FB650(v54, v42, (int)"BtnOver03"); sub_8FE0F0(v43 - v10, v44 - v11, (int)v54, v2, 1, 0, 0); v32 = v54[9]; v55 = *(_DWORD *)(*v32 + 24); v40 = *(_DWORD *)(*v32 + 20); v33 = sub_421050(7); v34 = sub_8F4A20(v43 - v10, v44 - v11 + 1, v40, v55, v33, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); v35 = *v34; v36 = sub_40A910(659634546); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v35 + 472))(v34, v36); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.80000001); v45 = -1; if ( v42 ) { v37 = (void (__thiscall ***)(_DWORD, signed int))v42; if ( !InterlockedDecrement((volatile LONG *)(v42 + 4)) ) { if ( v37 ) (**v37)(v37, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (0059CF30) -------------------------------------------------------- char __thiscall sub_59CF30(volatile LONG **this, int a2) { volatile LONG **v2; // esi volatile LONG *v3; // ebx char result; // al int v5; // edi char *v6; // eax volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // ecx int v16; // edi int v17; // eax volatile LONG *v18; // eax int v19; // edi const CHAR *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // edx int v23; // edi int v24; // eax volatile LONG *v25; // edi const CHAR *v26; // eax volatile LONG **v27; // edi int v28; // eax int v29; // edi int v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx const CHAR *v33; // eax void (__thiscall ***v34)(_DWORD, signed int); // esi char v35; // [esp+40h] [ebp-28h] char v36; // [esp+44h] [ebp-24h] int v37; // [esp+48h] [ebp-20h] volatile LONG *v38; // [esp+4Ch] [ebp-1Ch] int v39; // [esp+50h] [ebp-18h] int v40; // [esp+54h] [ebp-14h] int v41; // [esp+58h] [ebp-10h] int v42; // [esp+64h] [ebp-4h] int v43; // [esp+70h] [ebp+8h] v2 = this; v39 = 0; v42 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v38 = v3; if ( !v3 ) { v42 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v39 ) (**(void (__thiscall ***)(int, signed int))v39)(v39, 1); } return 0; } v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\BelongDiceMsg.nif"); sub_8F66B0(v6, (int)&v39, v5); if ( !v39 ) return 0; v7 = sub_8FB140(v39, (int)"Panel01", (int)&v40, (int)&v41, v3); if ( sub_8F1440(v2, v40, v41, (int)v7, 0, a2, (int)"RollingDiceMsgWin", 0) ) { v9 = v40; v43 = v41; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v39, (int)"Theme", (int)&v40, (int)&v41, v10); else v11 = sub_8FB140(v39, (int)"Theme", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40, v41, (int)v11, (int)v2, 0, 0); sub_8F71E0(v39, (int)"InvItemSlot001", &v40, &v41, &v35, &v36); v12 = sub_8FB140(v39, (int)"InvItemSlot001", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40, v41, (int)v12, (int)v2, 0, 0); v13 = sub_5D6E20(v40, v41, (int)v2); v2[86] = v13; *((_DWORD *)v13 + 68) = dword_ACEC34; v14 = sub_8FB140(v39, (int)"TextBox", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40, v41, (int)v14, (int)v2, 0, 0); v15 = v14[9]; v16 = *(_DWORD *)(*v15 + 24); v37 = *(_DWORD *)(*v15 + 20); v17 = sub_421050(0); v18 = sub_8F4A20(v40 - v9, v41 - v43, v37, v16, v17, (int)v2, 0, 0); v2[88] = v18; (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); *(_BYTE *)(*((_DWORD *)v2[88] + 72) + 285) = 1; (*(void (__stdcall **)(void *))(*v2[88] + 472))(&unk_9D9C8A); v19 = *v2[88]; v20 = sub_40A910(439620353); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v19 + 472))(v2[88], v20); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); v21 = sub_8FB140(v39, (int)"BtnNor02", (int)&v40, (int)&v41, v38); sub_8FB650(v21, v39, (int)"BtnClick02"); sub_8FB650(v21, v39, (int)"BtnOver02"); sub_8FE0F0(v40 - v9, v41 - v43, (int)v21, (int)v2, 1, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v37 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(7); v25 = sub_8F4A20(v40 - v9, v41 - v43 + 1, v37, v23, v24, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v37 = *v25; v26 = sub_40A910(844205160); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v37 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v39, (int)"BtnNor03", (int)&v40, (int)&v41, v38); sub_8FB650(v27, v39, (int)"BtnClick03"); sub_8FB650(v27, v39, (int)"BtnOver03"); sub_8FE0F0(v40 - v9, v41 - v43, (int)v27, (int)v2, 2, 0, 0); v28 = *v27[9]; v29 = *(_DWORD *)(v28 + 24); v37 = *(_DWORD *)(v28 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v40 - v9, v41 - v43 + 1, v37, v29, v30, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = *v31; v33 = sub_40A910(659634546); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v31, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.60000002); v42 = -1; if ( v39 ) { v34 = (void (__thiscall ***)(_DWORD, signed int))v39; if ( !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v34 ) (**v34)(v34, 1); } } result = 1; } else { v8 = (void (__thiscall ***)(_DWORD, signed int))v39; v42 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v8 ) (**v8)(v8, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (0059D410) -------------------------------------------------------- int __thiscall sub_59D410(_DWORD *this, __int16 a2, signed int a3) { _DWORD *v3; // esi float *v4; // ecx int result; // eax unsigned __int16 *v6; // edi int v7; // ecx int v8; // ebx int v9; // eax v3 = this; v4 = (float *)this[91]; *((float *)v3 + 90) = (double)a3; *((_WORD *)v3 + 174) = a2; *((float *)v3 + 89) = flt_ACCFCC; if ( 0.0 != v4[76] || 0.0 != v4[75] ) { v4[76] = 0.0; v4[75] = 0.0; sub_49F670(v4); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[92] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[93] + 256))(0); result = sub_682C20(&unk_ADA1E0, *((_WORD *)v3 + 174)); v6 = (unsigned __int16 *)result; if ( result ) { v7 = v3[86]; *((_WORD *)v3 + 175) = *(_WORD *)(result + 4); sub_5D5EA0(v7, result, *(unsigned __int16 *)(result + 4)); v8 = *(_DWORD *)v3[88]; v9 = sub_682990(v6); result = (*(int (__thiscall **)(_DWORD, int))(v8 + 472))(v3[88], v9); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0059D500) -------------------------------------------------------- char __thiscall sub_59D500(int this, float a2) { int v2; // esi double v3; // st5 double v4; // st7 _DWORD *v5; // eax float *v6; // ecx int *v7; // ecx float v9; // [esp+14h] [ebp+8h] float v10; // [esp+14h] [ebp+8h] float v11; // [esp+14h] [ebp+8h] v2 = this; if ( *(float *)(this + 360) <= 0.0 ) { v6 = *(float **)(this + 364); if ( 0.0 == v6[76] && 0.0 == v6[75] ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); } else { v6[76] = 0.0; v6[75] = 0.0; sub_49F670(v6); sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); } } else { v9 = (a2 - *(float *)(this + 356)) / *(float *)(this + 360); v3 = v9; if ( v9 > 1.0 ) { if ( *(_BYTE *)(this + 376) ) { sub_4F39A0(*(float **)(this + 364), 0.0, 0.0); *(float *)(v2 + 360) = 0.0; LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); return (char)v5; } } else if ( 1.0 == v3 ) { sub_4F39A0(*(float **)(this + 364), 0.0, 0.0); } else { v10 = *(float *)(this + 380) - v3; if ( v10 < 0.0 ) v10 = 0.0; v4 = 0.0; if ( v3 < 1.0 ) v4 = v10; v11 = v4; sub_4F39A0(*(float **)(this + 364), 0.94999999, v11); } } LOBYTE(v5) = (*(int (__stdcall **)(LONG, LONG))(**(_DWORD **)(v2 + 344) + 332))(pt.x, pt.y); if ( (_BYTE)v5 ) { v5 = sub_6899D0(*(_WORD *)(v2 + 350)); v7 = *(int **)(*(_DWORD *)(v2 + 344) + 272); if ( v7 ) { if ( v5 ) LOBYTE(v5) = sub_547C20(v7, (int)v5); } } return (char)v5; } //----- (0059D6A0) -------------------------------------------------------- volatile LONG *__cdecl sub_59D6A0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x180u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_59C650((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0059D7D0) -------------------------------------------------------- int __cdecl sub_59D7D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &RollingDiceMsgWin::`vftable'; *(_DWORD *)(v2 + 232) = &RollingDiceMsgWin::`vftable'; *(_DWORD *)(v2 + 348) = -1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DA050: using guessed type void *RollingDiceMsgWin::`vftable'; // 9DA06C: using guessed type void *RollingDiceMsgWin::`vftable'; //----- (0059D920) -------------------------------------------------------- void *__thiscall sub_59D920(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &RollingDiceWin::`vftable'; *((_DWORD *)this + 58) = &RollingDiceWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9D9E10: using guessed type void *RollingDiceWin::`vftable'; // 9D9E2C: using guessed type void *RollingDiceWin::`vftable'; //----- (0059D960) -------------------------------------------------------- void *__thiscall sub_59D960(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &RollingDiceMsgWin::`vftable'; *((_DWORD *)this + 58) = &RollingDiceMsgWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DA050: using guessed type void *RollingDiceMsgWin::`vftable'; // 9DA06C: using guessed type void *RollingDiceMsgWin::`vftable'; //----- (0059D9E0) -------------------------------------------------------- char __thiscall sub_59D9E0(volatile LONG **this, int a2) { volatile LONG **v2; // esi char result; // al v2 = this; result = sub_8F15E0(this, 0, 0, 0, a2, (int)"ScreenWin", 0); if ( result ) { (*((void (__thiscall **)(volatile LONG **, int))*v2 + 38))(v2, xRight); (*((void (__thiscall **)(volatile LONG **, int))*v2 + 39))(v2, dword_AC2F78); result = 1; } return result; } //----- (0059DA40) -------------------------------------------------------- int __thiscall sub_59DA40(void *this, int a2) { void *v2; // esi v2 = this; (*(void (__thiscall **)(void *, int))(*(_DWORD *)this + 152))(this, xRight); return (*(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 156))(v2, dword_AC2F78); } //----- (0059DA70) -------------------------------------------------------- int __thiscall sub_59DA70(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; result = sub_8F1140(v2, a2); byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; //----- (0059DAC0) -------------------------------------------------------- bool __stdcall sub_59DAC0(_DWORD *a1, int a2, int a3) { return *a1 != 0; } //----- (0059DC10) -------------------------------------------------------- void *__thiscall sub_59DC10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ScreenWin::`vftable'; *((_DWORD *)this + 58) = &ScreenWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DA29C: using guessed type void *ScreenWin::`vftable'; // 9DA2BC: using guessed type void *ScreenWin::`vftable'; //----- (0059DC50) -------------------------------------------------------- char __thiscall sub_59DC50(_BYTE *this, char a2) { char result; // al result = a2; this[432] = a2; return result; } //----- (0059DC60) -------------------------------------------------------- char __thiscall sub_59DC60(_BYTE *this) { return this[432]; } //----- (0059DCD0) -------------------------------------------------------- char __thiscall sub_59DCD0(int this) { _DWORD *v1; // esi v1 = (_DWORD *)this; sub_4B81A0(*(_DWORD **)(this + 296), *(_BYTE *)(this + 386)); return sub_8F86A0(&unk_BA6B10, v1); } //----- (0059DD60) -------------------------------------------------------- int __thiscall sub_59DD60(char *this, LPCSTR lpString) { LPCSTR v2; // ebx int v3; // esi signed int v4; // edi int result; // eax int v6; // edi int v7; // eax unsigned int v8; // eax unsigned int v9; // esi signed int v10; // eax CHAR *v11; // eax int v12; // esi signed int v13; // edi int v14; // [esp+Ch] [ebp-110h] int v15; // [esp+10h] [ebp-10Ch] char *v16; // [esp+14h] [ebp-108h] CHAR v17[256]; // [esp+18h] [ebp-104h] v2 = lpString; v16 = this + 412; v3 = (int)(this + 412); v4 = 5; do { result = (*(int (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9DA506); v3 += 4; --v4; } while ( v4 ); if ( lpString && *lpString ) { v6 = (int)v16; v14 = *(_DWORD *)((*(int (**)(void))(**(_DWORD **)v16 + 456))() + 192); v15 = 0; do { if ( !*v2 ) break; v7 = (*(int (**)(void))(**(_DWORD **)v6 + 144))(); v8 = sub_41E590(v17, v2, (int)&v14, v7, 0); v9 = v8; v17[v8] = 0; v10 = 0; if ( v17[0] == 32 ) { do { if ( !v17[v10] ) break; if ( v10 >= 255 ) break; ++v10; } while ( v17[v10] == 32 ); } v11 = &v17[v10]; if ( v11 ) (*(void (__stdcall **)(CHAR *))(**(_DWORD **)v6 + 472))(v11); v2 += v9; v6 += 4; ++v15; } while ( v15 < 5 ); if ( v15 == 1 ) { result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v16 + 488))(1); } else { v12 = (int)v16; v13 = 5; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 488))(0); v12 += 4; --v13; } while ( v13 ); } } return result; } // 59DD60: using guessed type CHAR var_104[256]; //----- (0059DF60) -------------------------------------------------------- char __thiscall sub_59DF60(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax int v13; // eax int v14; // edi int v15; // ST40_4 int v16; // ST3C_4 int v17; // eax volatile LONG *v18; // eax int v19; // edi volatile LONG **v20; // edi volatile LONG *v21; // eax int v22; // ST44_4 volatile LONG *v23; // edi int v24; // ST40_4 int v25; // ST3C_4 int v26; // eax volatile LONG *v27; // eax int v28; // edi const CHAR *v29; // eax volatile LONG **v30; // edi volatile LONG *v31; // eax int v32; // ST44_4 volatile LONG *v33; // edi int v34; // ST40_4 int v35; // ST3C_4 int v36; // eax volatile LONG *v37; // eax int v38; // edi const CHAR *v39; // eax volatile LONG **v40; // edi volatile LONG *v41; // eax int v42; // ST44_4 volatile LONG *v43; // edi int v44; // ST40_4 int v45; // ST3C_4 int v46; // eax volatile LONG *v47; // eax int v48; // edi const CHAR *v49; // eax volatile LONG **v50; // edi volatile LONG *v51; // eax int v52; // ST44_4 volatile LONG *v53; // edi int v54; // ST40_4 int v55; // ST3C_4 int v56; // eax volatile LONG *v57; // eax int v58; // edi const CHAR *v59; // eax volatile LONG **v60; // edi volatile LONG *v61; // eax int v62; // ST44_4 volatile LONG *v63; // edi int v64; // ST40_4 int v65; // ST3C_4 int v66; // eax volatile LONG *v67; // eax int v68; // edi const CHAR *v69; // eax int v70; // eax void (__thiscall ***v71)(_DWORD, signed int); // esi int v72; // [esp+60h] [ebp-24h] volatile LONG *v73; // [esp+64h] [ebp-20h] int v74; // [esp+68h] [ebp-1Ch] int v75; // [esp+6Ch] [ebp-18h] int v76; // [esp+70h] [ebp-14h] int v77; // [esp+74h] [ebp-10h] int v78; // [esp+80h] [ebp-4h] int v79; // [esp+8Ch] [ebp+8h] v2 = (int)this; v77 = 0; v78 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v77; v78 = -1; if ( !v77 || InterlockedDecrement((volatile LONG *)(v77 + 4)) ) return 0; v5 = v77 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v8, (int)&v77, v7); if ( !v77 ) return 0; v9 = sub_8FB140(v77, (int)"Panel01", (int)&v75, (int)&v76, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ServerMenuWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v77; v78 = -1; if ( !v77 || InterlockedDecrement((volatile LONG *)(v77 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v77, (int)"Theme", (int)&v75, (int)&v76, v10); else v11 = sub_8FB140(v77, (int)"Theme", (int)&v75, (int)&v76, 0); v12 = sub_8F3EB0(v75, v76, (int)v11, v2, 0, 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = sub_421050(0); v72 = v13; v74 = 0; v79 = v2 + 412; while ( 1 ) { v14 = *(_DWORD *)(v13 + 384); v15 = v13; v16 = *(_DWORD *)(v13 + 384); v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v18 = sub_8F4A20(8, v74 * (v14 + 1) + 8, v17 - 16, v16, v15, v2, 0, 0); v19 = *(_DWORD *)v79; v73 = v18; if ( *(volatile LONG **)v79 != v18 ) { if ( v19 ) { if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v18 = v73; } *(_DWORD *)v79 = v18; if ( v18 ) InterlockedIncrement(v18 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v79 + 240))(0); v79 += 4; if ( ++v74 >= 5 ) break; v13 = v72; } v20 = sub_8FB140(v77, (int)"BtnNor01", (int)&v75, (int)&v76, v3); sub_8FB650(v20, v77, (int)"BtnClick01"); sub_8FB650(v20, v77, (int)"BtnOver01"); v21 = sub_8FE0F0(v75, v76, (int)v20, v2, 0, 0, 0); v22 = (int)v21; *(_DWORD *)(v2 + 344) = v21; v23 = v21; v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 0, v26, v25, v24, v22, 0, 0); *(_DWORD *)(v2 + 364) = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = **(_DWORD **)(v2 + 364); v29 = sub_40C190(1331644831); (*(void (__thiscall **)(_DWORD, const CHAR *))(v28 + 472))(*(_DWORD *)(v2 + 364), v29); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); v30 = sub_8FB140(v77, (int)"BtnNor02", (int)&v75, (int)&v76, v3); sub_8FB650(v30, v77, (int)"BtnClick02"); sub_8FB650(v30, v77, (int)"BtnOver02"); v31 = sub_8FE0F0(v75, v76, (int)v30, v2, 1, 0, 0); v32 = (int)v31; *(_DWORD *)(v2 + 348) = v31; v33 = v31; v34 = sub_421050(0); v35 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 148))(v33); v36 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 144))(v33); v37 = sub_8F4A20(0, 0, v36, v35, v34, v32, 0, 0); *(_DWORD *)(v2 + 368) = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v38 = **(_DWORD **)(v2 + 368); v39 = sub_40C190(1331644831); (*(void (__thiscall **)(_DWORD, const CHAR *))(v38 + 472))(*(_DWORD *)(v2 + 368), v39); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); v40 = sub_8FB140(v77, (int)"BtnNor03", (int)&v75, (int)&v76, v3); sub_8FB650(v40, v77, (int)"BtnClick03"); sub_8FB650(v40, v77, (int)"BtnOver03"); v41 = sub_8FE0F0(v75, v76, (int)v40, v2, 2, 0, 0); v42 = (int)v41; *(_DWORD *)(v2 + 352) = v41; v43 = v41; v44 = sub_421050(0); v45 = (*(int (__thiscall **)(volatile LONG *))(*v43 + 148))(v43); v46 = (*(int (__thiscall **)(volatile LONG *))(*v43 + 144))(v43); v47 = sub_8F4A20(0, 0, v46, v45, v44, v42, 0, 0); *(_DWORD *)(v2 + 372) = v47; (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); v48 = **(_DWORD **)(v2 + 372); v49 = sub_40C190(-2002610207); (*(void (__thiscall **)(_DWORD, const CHAR *))(v48 + 472))(*(_DWORD *)(v2 + 372), v49); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v50 = sub_8FB140(v77, (int)"BtnNor04", (int)&v75, (int)&v76, v3); sub_8FB650(v50, v77, (int)"BtnClick04"); sub_8FB650(v50, v77, (int)"BtnOver04"); v51 = sub_8FE0F0(v75, v76, (int)v50, v2, 3, 0, 0); v52 = (int)v51; *(_DWORD *)(v2 + 356) = v51; v53 = v51; v54 = sub_421050(0); v55 = (*(int (__thiscall **)(volatile LONG *))(*v53 + 148))(v53); v56 = (*(int (__thiscall **)(volatile LONG *))(*v53 + 144))(v53); v57 = sub_8F4A20(0, 0, v56, v55, v54, v52, 0, 0); *(_DWORD *)(v2 + 376) = v57; (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 5); v58 = **(_DWORD **)(v2 + 376); v59 = sub_40C190(-2002610207); (*(void (__thiscall **)(_DWORD, const CHAR *))(v58 + 472))(*(_DWORD *)(v2 + 376), v59); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v60 = sub_8FB140(v77, (int)"BtnNor05", (int)&v75, (int)&v76, v3); sub_8FB650(v60, v77, (int)"BtnClick05"); sub_8FB650(v60, v77, (int)"BtnOver05"); v61 = sub_8FE0F0(v75, v76, (int)v60, v2, 4, 0, 0); v62 = (int)v61; *(_DWORD *)(v2 + 360) = v61; v63 = v61; v64 = sub_421050(0); v65 = (*(int (__thiscall **)(volatile LONG *))(*v63 + 148))(v63); v66 = (*(int (__thiscall **)(volatile LONG *))(*v63 + 144))(v63); v67 = sub_8F4A20(0, 0, v66, v65, v64, v62, 0, 0); *(_DWORD *)(v2 + 380) = v67; (*(void (__thiscall **)(volatile LONG *, signed int))(*v67 + 488))(v67, 5); v68 = **(_DWORD **)(v2 + 380); v69 = sub_40C190(-2002610207); (*(void (__thiscall **)(_DWORD, const CHAR *))(v68 + 472))(*(_DWORD *)(v2 + 380), v69); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); v70 = v77; *(_WORD *)(v2 + 448) = -1; v78 = -1; if ( v70 ) { v71 = (void (__thiscall ***)(_DWORD, signed int))v70; if ( !InterlockedDecrement((volatile LONG *)(v70 + 4)) ) { if ( v71 ) (**v71)(v71, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0059E670) -------------------------------------------------------- char __thiscall sub_59E670(char *this, LPCSTR lpString) { LPCSTR v2; // edi char *v3; // esi int v5; // ebx CHAR v6; // al int v7; // ecx int v8; // ecx int v9; // ecx float v10; // ST10_4 float v11; // ST14_4 LPCSTR lpStringa; // [esp+1Ch] [ebp+8h] v2 = lpString; v3 = this; if ( !lpString ) return 0; if ( lpString[141] > 3u ) *((_BYTE *)lpString + 141) = 3; v5 = (int)(this + 344); lpStringa = (LPCSTR)5; do { *(_WORD *)(*(_DWORD *)v5 + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 240))(0); v5 += 4; --lpStringa; } while ( lpStringa ); v6 = v2[141]; if ( v6 == 3 ) { *(_WORD *)(*((_DWORD *)v3 + 86) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 86) + 240))(1); *(_WORD *)(*((_DWORD *)v3 + 89) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 89) + 240))(1); *(_WORD *)(*((_DWORD *)v3 + 90) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 90) + 240))(1); (*(void (__stdcall **)(LPCSTR))(**((_DWORD **)v3 + 95) + 472))(v2 + 143); v7 = *((_DWORD *)v3 + 91); v3[388] = v2[142]; (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)v7 + 472))(v2 + 176); v8 = *((_DWORD *)v3 + 94); v3[384] = v2[175]; (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)v8 + 472))(v2 + 209); v3[387] = v2[208]; } else if ( v6 == 2 ) { *(_WORD *)(*((_DWORD *)v3 + 87) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 87) + 240))(1); *(_WORD *)(*((_DWORD *)v3 + 88) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 88) + 240))(1); (*(void (__stdcall **)(LPCSTR))(**((_DWORD **)v3 + 92) + 472))(v2 + 143); v9 = *((_DWORD *)v3 + 93); v3[385] = v2[142]; (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)v9 + 472))(v2 + 176); v3[386] = v2[175]; } else { *(_WORD *)(*((_DWORD *)v3 + 86) + 28) &= 0xFFFEu; (*(void (__stdcall **)(signed int))(**((_DWORD **)v3 + 86) + 240))(1); (*(void (__stdcall **)(LPCSTR))(**((_DWORD **)v3 + 91) + 472))(v2 + 143); v3[384] = v2[142]; } *((_WORD *)v3 + 224) = *(_WORD *)(v2 + 129); v10 = (double)*(unsigned int *)(v2 + 131); v11 = (double)*(unsigned int *)(v2 + 135); *((float *)v3 + 109) = v10; *((float *)v3 + 110) = v11; *((float *)v3 + 111) = 0.0; *((_WORD *)v3 + 225) = *(_WORD *)(v2 + 139); sub_59DD60(v3, v2); return 1; } //----- (0059E900) -------------------------------------------------------- char __thiscall sub_59E900(int this, int a2, int a3) { char result; // al int v4; // esi char v5; // cl result = a2; v4 = this; switch ( a2 ) { case 0: sub_4B81A0(*(_DWORD **)(this + 296), *(_BYTE *)(this + 384)); goto LABEL_8; case 1: v5 = *(_BYTE *)(this + 385); goto LABEL_7; case 2: sub_4B81A0(*(_DWORD **)(this + 296), *(_BYTE *)(this + 386)); goto LABEL_8; case 3: sub_4B81A0(*(_DWORD **)(this + 296), *(_BYTE *)(this + 387)); goto LABEL_8; case 4: v5 = *(_BYTE *)(this + 388); LABEL_7: sub_4B81A0(*(_DWORD **)(v4 + 296), v5); LABEL_8: result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v4); break; default: return result; } return result; } //----- (0059E980) -------------------------------------------------------- void __thiscall sub_59E980(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi double v3; // st7 double v4; // st7 double v5; // st7 double v6; // st5 char v7; // dl char *v8; // eax int v9; // edi float v10; // [esp+4h] [ebp-1Ch] float v11; // [esp+8h] [ebp-18h] int v12; // [esp+Ch] [ebp-14h] float v13; // [esp+10h] [ebp-10h] double v14; // [esp+14h] [ebp-Ch] float v15; // [esp+1Ch] [ebp-4h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 260))() && v2[224] != -1 ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v10); v13 = v10 - *((float *)v2 + 109); v10 = v13; v3 = v11 - *((float *)v2 + 110); LODWORD(v15) = v2[225]; *(float *)&v14 = v3; v4 = *((float *)v2 + 111); v11 = *(float *)&v14; *((float *)&v14 + 1) = 0.0 - v4; v5 = *(float *)&v14; v12 = HIDWORD(v14); v6 = *((float *)&v14 + 1); v14 = (double)SLODWORD(v15); v15 = v5 * v5 + v13 * v13 + v6 * v6; v15 = sqrt(v15); if ( v15 > v14 ) { v7 = *((_BYTE *)v2 + 386); v2[224] = -1; sub_4B81A0(*((_DWORD **)v2 + 74), v7); sub_8F86A0(&unk_BA6B10, v2); } v8 = sub_664AB0(dword_AD8C90, v2[224]); if ( v8 ) { if ( sub_6516C0(v8) ) { v9 = *sub_49F490(&v15); sub_410C00(&v15); if ( v9 ) { if ( *(_DWORD *)(v9 + 60) == 2 ) { v2[224] = -1; sub_4A4030(v2); } } } } } } // 4A4030: using guessed type int __thiscall sub_4A4030(_DWORD); //----- (0059EB50) -------------------------------------------------------- int __cdecl sub_59EB50(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C4u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &ServerMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &ServerMenuWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 412), 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *(_BYTE *)(v2 + 432) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DA5D0: using guessed type void *ServerMenuWin::`vftable'; // 9DA5EC: using guessed type void *ServerMenuWin::`vftable'; //----- (0059ECB0) -------------------------------------------------------- _DWORD *__thiscall sub_59ECB0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ServerMenuWin::`vftable'; *((_DWORD *)this + 58) = &ServerMenuWin::`vftable'; `eh vector destructor iterator'((char *)this + 412, 4u, 5, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DA5D0: using guessed type void *ServerMenuWin::`vftable'; // 9DA5EC: using guessed type void *ServerMenuWin::`vftable'; //----- (0059ED90) -------------------------------------------------------- char __thiscall sub_59ED90(_BYTE *this, char a2) { char result; // al result = a2; this[360] = a2; return result; } //----- (0059EDA0) -------------------------------------------------------- void __thiscall sub_59EDA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi void (__stdcall *v4)(signed int); // eax v3 = this; if ( !a2 ) { v4 = *(void (__stdcall **)(signed int))(*this + 520); if ( *(_BYTE *)(this[86] + 380) ) { v4(1); *(_BYTE *)(v3[86] + 380) = 0; } else { v4(0); *(_BYTE *)(v3[86] + 380) = 1; } } } //----- (0059EDF0) -------------------------------------------------------- char __thiscall sub_59EDF0(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // edi char *v6; // eax volatile LONG **v7; // edi volatile LONG *v8; // ecx int v9; // ebx int v10; // eax int v11; // eax int v12; // edi int v13; // ebx int v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // edi void (__thiscall ***v17)(_DWORD, signed int); // esi volatile LONG *v18; // [esp+30h] [ebp-1Ch] int v19; // [esp+34h] [ebp-18h] int v20; // [esp+38h] [ebp-14h] int v21; // [esp+3Ch] [ebp-10h] int v22; // [esp+48h] [ebp-4h] int v23; // [esp+54h] [ebp+8h] v2 = (int)this; v21 = 0; v22 = 0; v18 = (volatile LONG *)sub_43D0D0(4u); if ( !v18 ) goto LABEL_18; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\Timeserver.nif"); sub_8F66B0(v6, (int)&v21, v5); if ( !v21 ) return 0; v7 = sub_8FB140(v21, (int)"Panel01", (int)&v19, (int)&v20, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"ServerTimeWin", 0) ) { LABEL_18: v3 = (void (__thiscall ***)(_DWORD, signed int))v21; v22 = -1; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v7[9]; v9 = *(_DWORD *)(*v8 + 24); v23 = *(_DWORD *)(*v8 + 20); v10 = sub_421050(1); *(_DWORD *)(v2 + 348) = sub_8F4A20(v19, v20 - 9, v23, v9, v10, v2, 0, 0); v11 = *v7[9]; v12 = *(_DWORD *)(v11 + 24); v13 = *(_DWORD *)(v11 + 20); v14 = sub_421050(1); v15 = sub_8F4A20(v19, v20 + 11, v13, v12, v14, v2, 0, 0); *(_DWORD *)(v2 + 352) = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 472))(&unk_9DA836); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); *(_BYTE *)(*(_DWORD *)(*(_DWORD *)(v2 + 352) + 288) + 285) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 348) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 348) + 472))(&unk_9DA837); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); *(_BYTE *)(*(_DWORD *)(*(_DWORD *)(v2 + 348) + 288) + 285) = 1; v16 = sub_8FB140(v21, (int)"TimeLockNor", (int)&v19, (int)&v20, v18); sub_8FB650(v16, v21, (int)"TimeLockLock"); *(_DWORD *)(v2 + 344) = sub_465940(v19, v20, (int)v16, v2, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.0, 0.64999998); v22 = -1; if ( v21 ) { v17 = (void (__thiscall ***)(_DWORD, signed int))v21; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v17 ) (**v17)(v17, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0059F0A0) -------------------------------------------------------- void __thiscall sub_59F0A0(int this, int a2) { int v2; // ebx unsigned int v3; // eax char *v4; // edi char v5; // cl char v6; // cl const char *v7; // eax LARGE_INTEGER Frequency; // [esp+4h] [ebp-200h] LONGLONG v9; // [esp+Ch] [ebp-1F8h] LARGE_INTEGER PerformanceCount; // [esp+14h] [ebp-1F0h] struct tm v11; // [esp+1Ch] [ebp-1E8h] char v12; // [esp+40h] [ebp-1C4h] char v13; // [esp+BFh] [ebp-145h] char v14; // [esp+C0h] [ebp-144h] char v15; // [esp+1C0h] [ebp-44h] v2 = this; if ( *(_BYTE *)(this + 360) && *(_DWORD *)(this + 348) ) { QueryPerformanceCounter(&PerformanceCount); QueryPerformanceFrequency(&Frequency); v9 = PerformanceCount.QuadPart - ::PerformanceCount.QuadPart; qmemcpy(&v11, &unk_ACCFA8, sizeof(v11)); v11.tm_sec += (signed int)((double)(PerformanceCount.QuadPart - ::PerformanceCount.QuadPart) / (double)Frequency.QuadPart); strftime(&v14, 0x100u, "%H:%M", &v11); if ( byte_ACCFDC >= 0 ) { sprintf(&v15, " {color,yellow,GMT(+%d)}", byte_ACCFDC); v3 = strlen(&v15) + 1; v4 = &v13; do v6 = (v4++)[1]; while ( v6 ); } else { sprintf(&v15, " {color,yellow,GMT(-%d)}", byte_ACCFDC); v3 = strlen(&v15) + 1; v4 = &v13; do v5 = (v4++)[1]; while ( v5 ); } qmemcpy(v4, &v15, v3); (*(void (__cdecl **)(char *))(**(_DWORD **)(v2 + 348) + 472))(&v14); if ( *(_DWORD *)(v2 + 352) ) { if ( v11.tm_mday ) { v7 = sub_40A910(-1668835362); strftime(&v12, 0x80u, v7, &v11); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 352) + 472))(&v12); } } } } // ACCFDC: using guessed type char byte_ACCFDC; //----- (0059F260) -------------------------------------------------------- int __cdecl sub_59F260(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ServerTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &ServerTimeWin::`vftable'; *(_BYTE *)(v2 + 360) = 0; *(_DWORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DA898: using guessed type void *ServerTimeWin::`vftable'; // 9DA8B4: using guessed type void *ServerTimeWin::`vftable'; //----- (0059F3B0) -------------------------------------------------------- void *__thiscall sub_59F3B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ServerTimeWin::`vftable'; *((_DWORD *)this + 58) = &ServerTimeWin::`vftable'; *((_BYTE *)this + 360) = 0; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DA898: using guessed type void *ServerTimeWin::`vftable'; // 9DA8B4: using guessed type void *ServerTimeWin::`vftable'; //----- (0059F3F0) -------------------------------------------------------- HWND __thiscall sub_59F3F0(HWND *this) { HWND *v1; // esi HWND result; // eax v1 = this; result = this[86]; if ( result ) { result = (HWND)DestroyWindow(this[86]); if ( !result ) result = (HWND)MessageBoxA(0, "Error", aCuueA_0, 0); } v1[86] = 0; return result; } //----- (0059F430) -------------------------------------------------------- int __thiscall sub_59F430(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int result; // eax v1 = this; v1[88] = v1[93] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1); v3 = v1[96]; v1[89] = v1[94] + v2; result = v1[95]; v1[90] = result; v1[91] = v3; return result; } //----- (0059F490) -------------------------------------------------------- HWND __thiscall sub_59F490(char *this) { char *v1; // esi CHAR *v2; // eax CHAR v3; // cl int v5; // [esp+0h] [ebp-61Ch] LPBC ppbc; // [esp+4h] [ebp-618h] int v7; // [esp+8h] [ebp-614h] int v8; // [esp+Ch] [ebp-610h] int v9; // [esp+10h] [ebp-60Ch] int v10; // [esp+14h] [ebp-608h] CHAR MultiByteStr[1024]; // [esp+18h] [ebp-604h] WCHAR WideCharStr; // [esp+418h] [ebp-204h] v1 = this; CreateBindCtx(0, &ppbc); v7 = 16; v8 = 1; v9 = 0x8000000; v10 = 0; ((void (__stdcall *)(LPBC))ppbc->lpVtbl->SetBindOptions)(ppbc); v2 = v1 + 5944; do { v3 = *v2; v2[MultiByteStr - (v1 + 5944)] = *v2; ++v2; } while ( v3 ); MultiByteToWideChar(0, 0, MultiByteStr, strlen(MultiByteStr) + 1, &WideCharStr, 256); HlinkSimpleNavigateToString(&WideCharStr, 0, 0, 0, ppbc, 0, 2u, 0); ((void (__stdcall *)(LPBC, int))ppbc->lpVtbl->Release)(ppbc, v5); return SetFocus(hWnd); } // 59F490: using guessed type CHAR MultiByteStr[1024]; //----- (0059F590) -------------------------------------------------------- BOOL __thiscall sub_59F590(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { if ( *((_BYTE *)v1 + 368) ) { sub_59F430(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[88] + Rect.left, (int)v1[89] + Rect.top, (int)v1[90], (int)v1[91], 1); } } return result; } //----- (0059F620) -------------------------------------------------------- int __thiscall sub_59F620(int this) { int result; // eax result = 0; *(_DWORD *)(this + 256828) = 0; *(_DWORD *)(this + 256832) = 0; *(_DWORD *)(this + 256836) = 0; *(_DWORD *)(this + 256840) = 0; *(_DWORD *)(this + 256844) = 0; *(_DWORD *)(this + 256848) = 0; *(_DWORD *)(this + 256852) = 0; *(_DWORD *)(this + 256856) = 0; *(_BYTE *)(this + 256860) = 0; return result; } //----- (0059F660) -------------------------------------------------------- _BYTE *__thiscall sub_59F660(_BYTE *this, const void *a2, int a3) { _BYTE *result; // eax result = this; qmemcpy(this + 256828, a2, 0x20u); this[256860] = 0; return result; } //----- (0059F6C0) -------------------------------------------------------- char __thiscall sub_59F6C0(int this) { int v1; // esi HWND v2; // eax v1 = this; v2 = *(HWND *)(this + 344); *(_BYTE *)(this + 368) = 0; if ( v2 && !DestroyWindow(v2) ) MessageBoxA(0, "Error", aCuueA, 0); DestroyWindow(*(HWND *)(v1 + 348)); *(_DWORD *)(v1 + 344) = 0; *(_DWORD *)(v1 + 256828) = 0; *(_DWORD *)(v1 + 256832) = 0; *(_DWORD *)(v1 + 256836) = 0; *(_DWORD *)(v1 + 256840) = 0; *(_DWORD *)(v1 + 256844) = 0; *(_DWORD *)(v1 + 256848) = 0; *(_DWORD *)(v1 + 256852) = 0; *(_DWORD *)(v1 + 256856) = 0; *(_BYTE *)(v1 + 256860) = 0; return sub_4A5240(*(_DWORD **)(v1 + 296)); } //----- (0059F750) -------------------------------------------------------- BOOL __thiscall sub_59F750(HWND *this, int a2) { return sub_59F590(this); } //----- (0059F7A0) -------------------------------------------------------- char __thiscall sub_59F7A0(_DWORD *this) { signed int v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax int *v4; // esi int v6; // eax _DWORD *v7; // edi signed int v8; // eax int v9; // esi _DWORD *v10; // eax char *v11; // eax int v12; // edx char v13; // cl _DWORD *v14; // [esp+10h] [ebp-128h] void *v15; // [esp+14h] [ebp-124h] int v16; // [esp+18h] [ebp-120h] int v17; // [esp+1Ch] [ebp-11Ch] int *v18; // [esp+20h] [ebp-118h] FILE v19; // [esp+24h] [ebp-114h] int v20; // [esp+134h] [ebp-4h] v1 = 0; v2 = this; v14 = this; memset(&v19, 0, 0x104u); if ( !byte_ACAD5C ) sub_420410(); sprintf((char *)&v19, "%sItemMall.hb", byte_ACAC58); v3 = operator new(0x2224u); v20 = 0; if ( v3 ) { v4 = sub_6CBF30(v3); v18 = v4; } else { v18 = 0; v4 = 0; } v20 = -1; if ( !v4 ) return 0; sub_6CBFB0(v4, &v19); if ( sub_6CBEC0(v4, dword_AAAEA8) == -1 ) { OutputDebugStringA("localeItemshop doesn't exist."); } else { v6 = sub_6CBE90(v4); v2[105] = v6; if ( v6 > 0 ) { v17 = (int)(v2 + 206); v7 = v2 + 156; do { v8 = sub_6CBEC0(v4, v1); v15 = (void *)v8; if ( v8 != -1 ) { v9 = 0; if ( v8 >= 0 ) { v16 = v17; do { v10 = (_DWORD *)sub_6CBE40(v18, v1, v9); *(v7 - 50) = *v10; *v7 = v10[1]; v11 = (char *)(v10 + 2); v12 = v16 - (_DWORD)v11; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); v16 += 512; ++v9; } while ( v9 <= (signed int)v15 ); } v4 = v18; } v17 += 5120; ++v1; ++v7; } while ( v1 < v14[105] ); } } return 1; } // AAAEA8: using guessed type int dword_AAAEA8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0059F970) -------------------------------------------------------- char __thiscall sub_59F970(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // ebx void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // eax volatile LONG *v15; // edi const CHAR *v16; // eax volatile LONG *v17; // edi volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // edi int v21[5]; // [esp+30h] [ebp-40h] volatile LONG v22; // [esp+44h] [ebp-2Ch] int v23; // [esp+48h] [ebp-28h] int v24; // [esp+4Ch] [ebp-24h] int v25; // [esp+50h] [ebp-20h] volatile LONG *v26; // [esp+54h] [ebp-1Ch] int v27; // [esp+58h] [ebp-18h] int v28; // [esp+5Ch] [ebp-14h] int v29; // [esp+60h] [ebp-10h] int v30; // [esp+6Ch] [ebp-4h] int v31; // [esp+78h] [ebp+8h] v2 = (int)this; v29 = 0; v3 = dword_BA6BA0; v30 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, off_AB0E98); sub_8F66B0(v4, (int)&v29, v3); if ( !v29 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v29 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v25 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v30) = 1; if ( v8 ) v26 = *(volatile LONG **)(v8 + 4); else v26 = 0; v9 = sub_8FB140(v29, (int)"Frame", (int)&v27, (int)&v28, v26); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"ShopWin", 0) ) { LOBYTE(v30) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v27; v31 = v28; if ( sub_8F71E0(v29, (int)"WinTitle", &v27, &v28, &v23, &v24) ) { v14 = sub_421050(0); v15 = sub_8F4A20(v27 - v12, v28 - v31, v23, v24, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v22 = *v15; v16 = sub_40C190(-200614086); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v15, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( !sub_8F71E0( v29, (int)"Panel01", (_DWORD *)(v2 + 372), (_DWORD *)(v2 + 376), (_DWORD *)(v2 + 380), (_DWORD *)(v2 + 384)) ) goto LABEL_30; v17 = v26; v18 = sub_8FB140(v29, (int)"Panel01", (int)&v27, (int)&v28, v26); v19 = sub_8F3EB0(v27 - v12, v28 - v31, (int)v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 240))(v19, 1); v20 = sub_8FB140(v29, (int)"ClsNor", (int)&v27, (int)&v28, v17); sub_8FB650(v20, v29, (int)"ClsClick"); sub_8FB650(v20, v29, (int)"ClsOver"); sub_8FE0F0(v27 - v12, v28 - v31, (int)v20, v2, 1, 0, 0); if ( sub_59F7A0((_DWORD *)v2) ) { sub_456260(v21); LOBYTE(v30) = 2; sub_456380(v21, v29); sub_456000(v21, v12, v31); sub_455FF0(v21, v2); sub_4563D0(v21, 1026, (int)"ReturnNorm", (int)"ReturnOver", (int)"ReturnClick", 0, v26); LOBYTE(v30) = 1; sub_4562E0(v21); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_59F430((_DWORD *)v2); LOBYTE(v30) = 0; sub_410C00(&v25); v30 = -1; sub_410C00(&v29); result = 1; } else { LABEL_30: LOBYTE(v30) = 0; sub_410C00(&v25); v30 = -1; sub_410C00(&v29); result = 0; } } else { LOBYTE(v30) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( !v29 || InterlockedDecrement((volatile LONG *)(v29 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AB0E98: using guessed type char *off_AB0E98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0059FD90) -------------------------------------------------------- char __thiscall sub_59FD90(char *this, unsigned int a2, int a3) { int v3; // eax LOBYTE(v3) = a2; if ( a2 > 0x401 ) { if ( a2 == 1026 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v3 = sub_404D70((char *)(v3 + 5188)); if ( *(_DWORD *)v3 ) { v3 = sub_406520(*(char **)v3); if ( *(_DWORD *)v3 ) LOBYTE(v3) = (*(int (**)(void))(**(_DWORD **)v3 + 8))(); } } } } else if ( a2 == 1025 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170((_DWORD *)v3, "ItemMall"); } else if ( a2 == 1 ) { LOBYTE(v3) = sub_59F6C0((int)this); } else { LOBYTE(v3) = a2 - 2; if ( a2 == 2 ) { sub_59F490(this); v3 = sub_46F100(); if ( v3 ) LOBYTE(v3) = sub_472230((_DWORD *)v3); } } return v3; } //----- (0059FE40) -------------------------------------------------------- _DWORD *__thiscall sub_59FE40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ShopWin::`vftable'; v1[58] = &ShopWin::`vftable'; v1[102] = 0; v1[103] = 15; *((_BYTE *)v1 + 392) = 0; *((_WORD *)v1 + 184) = 0; v1[64206] = 0; v1[64207] = 0; v1[64208] = 0; v1[64209] = 0; v1[64210] = 0; v1[64211] = 0; v1[64212] = 0; v1[64213] = 0; v1[64214] = 0; *((_BYTE *)v1 + 256860) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DABDC: using guessed type void *ShopWin::`vftable'; // 9DABFC: using guessed type void *ShopWin::`vftable'; //----- (0059FF10) -------------------------------------------------------- volatile LONG *__cdecl sub_59FF10(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x3EB60u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_59FE40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005A0040) -------------------------------------------------------- void __thiscall sub_5A0040(_DWORD *this, int a2, unsigned __int16 a3) { bool v3; // cf _DWORD *v4; // edi _BYTE *v5; // eax signed int v6; // esi if ( a2 ) { v3 = this[103] < 0x10u; v4 = this + 98; this[102] = 0; if ( v3 ) v5 = this + 98; else v5 = (_BYTE *)*v4; v6 = 0; for ( *v5 = 0; v6 < a3; ++v6 ) sub_40AB50(v4, 1u, *(_BYTE *)(v6 + a2)); } } //----- (005A00A0) -------------------------------------------------------- char __thiscall sub_5A00A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax LONG v3; // ecx LONG v4; // edx LONG v5; // edi unsigned int v6; // ebx _DWORD *v7; // eax void (__thiscall *v9)(_DWORD *, int *); // edx unsigned int v10; // edx int v11; // [esp+Ch] [ebp-38h] int v12; // [esp+10h] [ebp-34h] int v13; // [esp+14h] [ebp-30h] int v14; // [esp+18h] [ebp-2Ch] unsigned int v15; // [esp+1Ch] [ebp-28h] int v16; // [esp+20h] [ebp-24h] LONG v17; // [esp+24h] [ebp-20h] LONG v18; // [esp+28h] [ebp-1Ch] LONG v19; // [esp+2Ch] [ebp-18h] struct tagRECT Rect; // [esp+30h] [ebp-14h] v1 = this; v2 = this[88]; v3 = this[89]; v4 = v1[90]; v5 = v1[91]; v6 = 0; v16 = v2; Rect.left = v2; v17 = v3; v18 = v4; v19 = v5; Rect.top = v3; Rect.right = v4; Rect.bottom = v5; AdjustWindowRectEx(&Rect, 0x40000000u, 0, 0); v1[86] = 0; if ( v1[102] ) { sub_4A5200((_DWORD *)v1[74]); sub_4A5110((_DWORD *)v1[74]); v7 = v1 + 98; if ( v1[103] >= 0x10u ) v7 = (_DWORD *)*v7; v1[86] = sub_427200((char)hWnd, dword_ACDC7C, v7, (int)&v16); } else if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { return sub_4B66E0(); } if ( IsWindow((HWND)v1[86]) ) { ShowWindow((HWND)v1[86], 5); } else if ( off_AC0554 ) { off_AC0554("CreateWindow Fail", byte_9DAAF2, 0); } v9 = *(void (__thiscall **)(_DWORD *, int *))(*v1 + 208); *((_BYTE *)v1 + 368) = 1; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v9(v1, &v11); v10 = v14 - v13; v15 = 0; if ( xRight >= (unsigned int)(v12 - v11) && dword_AC2F78 >= v10 ) { v6 = (unsigned int)(xRight - (v12 - v11)) >> 1; v15 = (dword_AC2F78 - v10) >> 1; } (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 172))(v1, v6); (*(void (__thiscall **)(_DWORD *, unsigned int))(*v1 + 176))(v1, v15); return (unsigned int)SetFocus(hWnd); } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (005A0250) -------------------------------------------------------- _DWORD *__thiscall sub_5A0250(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &ShopWin::`vftable'; *((_DWORD *)this + 58) = &ShopWin::`vftable'; if ( *((_DWORD *)this + 103) >= 0x10u ) operator delete(*((void **)this + 98)); v2[103] = 15; v2[102] = 0; *((_BYTE *)v2 + 392) = 0; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DABDC: using guessed type void *ShopWin::`vftable'; // 9DABFC: using guessed type void *ShopWin::`vftable'; //----- (005A02C0) -------------------------------------------------------- int __thiscall sub_5A02C0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = sub_5D7230(this, a2); if ( v2[106] ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)v2[106] + 256))(a2); if ( !*((_BYTE *)v2 + 428) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[106] + 256))(0); } return result; } //----- (005A0350) -------------------------------------------------------- int __thiscall sub_5A0350(_DWORD *this) { _DWORD *v1; // esi char v3; // [esp+4h] [ebp-24h] v1 = this; sprintf(&v3, "%u", this[87] + 1); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[147] + 472))(&v3); } //----- (005A03A0) -------------------------------------------------------- _DWORD *__thiscall sub_5A03A0(int this, int a2) { return sub_8EEE70(*(_DWORD **)(this + 296), 93, a2 + 18 * *(_DWORD *)(this + 348), 1); } //----- (005A03D0) -------------------------------------------------------- _DWORD *__thiscall sub_5A03D0(_DWORD *this) { _DWORD *v1; // ecx _DWORD *result; // eax v1 = (_DWORD *)this[74]; if ( v1 ) result = sub_8EEE70(v1, 139, 0, 0); return result; } //----- (005A03F0) -------------------------------------------------------- _DWORD *__thiscall sub_5A03F0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // ecx result = this; v2 = (_DWORD *)this[74]; if ( v2 ) { if ( *((_BYTE *)result + 344) ) { if ( *((_BYTE *)result + 345) ) result = sub_8EEE70(v2, 136, 0, 0); else result = sub_8EEE70(v2, 138, result[274], 0); } else if ( *((_BYTE *)result + 345) ) { result = sub_8EEE70(v2, 135, 0, 0); } else { result = sub_8EEE70(v2, 137, result[274], 0); } } return result; } //----- (005A0460) -------------------------------------------------------- _DWORD *__thiscall sub_5A0460(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // ecx result = this; v2 = (_DWORD *)this[74]; if ( v2 ) result = sub_8EEE70(v2, 134, result[274], 0); return result; } //----- (005A0490) -------------------------------------------------------- int __thiscall sub_5A0490(int this) { int v1; // esi int v2; // edi int v3; // edx int v4; // eax int result; // eax int v6; // eax v1 = this; v2 = **(_DWORD **)(this + 680); v3 = **(_DWORD **)(this + 4 * *((unsigned __int8 *)&dword_B92038 + 3 * *(_DWORD *)(this + 692)) + 352); if ( *(_BYTE *)(this + 344) ) { v4 = (*(int (**)(void))(v3 + 168))(); result = (*(int (__thiscall **)(_DWORD, int))(v2 + 176))(*(_DWORD *)(v1 + 680), v4 - 3); } else { v6 = (*(int (**)(void))(v3 + 164))(); result = (*(int (__thiscall **)(_DWORD, int))(v2 + 172))(*(_DWORD *)(v1 + 680), v6 - 2); } return result; } // B92038: using guessed type int dword_B92038; //----- (005A0500) -------------------------------------------------------- void __thiscall sub_5A0500(int this, int a2, _DWORD *a3, int a4) { if ( a2 == 27 && a3 ) { if ( *a3 ) { if ( *a3 == 1 ) { *(_DWORD *)(this + 872) = 0; *(_DWORD *)(this + 868) = 0; *(_BYTE *)(this + 863) = 0; } } else { *(_BYTE *)(this + 863) = 1; } } } //----- (005A0540) -------------------------------------------------------- void __thiscall sub_5A0540(int **this, __int16 a2) { int **v2; // esi signed int v3; // edi __int16 v4; // ax v2 = this + 88; v3 = 18; do { v4 = sub_5D6F80(*v2); if ( v4 != -1 && v4 == a2 && sub_5D3310(*v2) ) sub_5D3330(*v2, a2); ++v2; --v3; } while ( v3 ); } //----- (005A0590) -------------------------------------------------------- _DWORD *__thiscall sub_5A0590(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_5D7A30(this); *v1 = &ShortCutIconWin::`vftable'; v1[58] = &ShortCutIconWin::`vftable'; v1[103] = 0; *((_BYTE *)v1 + 420) = 0; v1[106] = 0; *((_WORD *)v1 + 214) = 0; v1[108] = 0; *((_BYTE *)v1 + 438) = 0; *((_WORD *)v1 + 200) = -1; return v1; } // 9DB2F0: using guessed type void *ShortCutIconWin::`vftable'; // 9DB30C: using guessed type void *ShortCutIconWin::`vftable'; //----- (005A05E0) -------------------------------------------------------- int __thiscall sub_5A05E0(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi int result; // eax v2 = this; if ( sub_8F3540(this) ) return sub_5D3050(v2, a2); *a2 = 0; *(_WORD *)(v2[89] + 28) |= 1u; result = v2[88]; *(_WORD *)(result + 28) |= 1u; return result; } //----- (005A0640) -------------------------------------------------------- int __thiscall sub_5A0640(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx int v5; // eax __int16 v6; // di v1 = this; sub_5D3290(this, 0xFFFF); sub_5D32D0(v1, 0xFFFF); v2 = v1[106]; *((_BYTE *)v1 + 428) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 256))(0); v3 = v1[103]; if ( !v3 ) return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 600))(v1, 0); if ( (*(int (**)(void))(*(_DWORD *)v3 + 4))() == 1 ) { v5 = v1[103]; if ( v5 ) { v6 = *(_WORD *)(v5 + 8); sub_5D8320(v1, *(unsigned __int16 *)(v5 + 8)); sub_5D3290(v1, v6); } } return sub_5D7080(v1, 1); } //----- (005A06D0) -------------------------------------------------------- int __thiscall sub_5A06D0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax int v5; // ebx int v6; // edi int *v7; // eax int v8; // edi int v9; // ebx int v10; // ST0C_4 int v11; // eax void (__thiscall *v12)(_DWORD *, signed int); // eax v1 = this; sub_5D3290(this, 0xFFFF); sub_5D32D0(v1, 0xFFFF); v2 = v1[106]; *((_BYTE *)v1 + 428) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 256))(0); v3 = v1[103]; if ( !v3 ) return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 600))(v1, 0); v5 = *(_DWORD *)(v3 + 8); v6 = dword_ACB6C4; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB6C4 + 16))( dword_ACB6C4, *(_DWORD *)(v3 + 8)) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v5); if ( *v7 ) { v8 = *v7; if ( *v7 ) { sub_5D7110(v1, 0.0, 0.0, 0.0, 0.0); sub_5D71B0(v1, 0.0, 0.0, 0.0, 0.0); v9 = *v1; v10 = *(unsigned __int16 *)(v8 + 99); v11 = sub_42BF30(v8 + 67); (*(void (__thiscall **)(_DWORD *, int, int, signed int, signed int))(v9 + 584))(v1, v11, v10, 32, 32); v12 = *(void (__thiscall **)(_DWORD *, signed int))(*v1 + 240); *((_WORD *)v1 + 14) &= 0xFFFEu; v12(v1, 1); } } } } return sub_5D7080(v1, 0); } // ACB6C4: using guessed type int dword_ACB6C4; //----- (005A0820) -------------------------------------------------------- void __thiscall sub_5A0820(_BYTE *this, float a2) { int v2; // esi signed int v3; // edi _BYTE *v4; // ecx if ( this[1094] ) { v2 = (int)(this + 352); v3 = 18; do { v4 = *(_BYTE **)(*(_DWORD *)v2 + 432); if ( v4 ) sub_6B0C00(v4, a2); v2 += 4; --v3; } while ( v3 ); } } //----- (005A0870) -------------------------------------------------------- char __thiscall sub_5A0870(int this, char a2) { char result; // al result = a2; *(_BYTE *)(this + 1094) = a2; if ( a2 ) *(_WORD *)(this + 28) &= 0xFFFEu; else *(_WORD *)(this + 28) |= 1u; return result; } //----- (005A08A0) -------------------------------------------------------- void __thiscall sub_5A08A0(char *this) { int v1; // ecx _DWORD *v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax bool v7; // zf signed int v8; // [esp+1Ch] [ebp-8h] _DWORD **v9; // [esp+20h] [ebp-4h] v1 = (int)(this + 352); v9 = (_DWORD **)v1; v8 = 18; do { v2 = *(_DWORD **)(*(_DWORD *)v1 + 412); if ( v2 ) { if ( (*(int (__thiscall **)(_DWORD))(*v2 + 4))(*(_DWORD *)(*(_DWORD *)v1 + 412)) == 2 ) { v3 = dword_ACB6C4; v4 = v2[2]; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v2[2]) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)v4); if ( *v5 ) { v6 = *v5; if ( v6 ) { if ( !*(_DWORD *)(v6 + 101) && v2[4] == 8 ) sub_5D37A0(*v9, flt_ACCFCC, 7.0, 0.0); } } } } } } v1 = (int)(v9 + 1); v7 = v8-- == 1; ++v9; } while ( !v7 ); } // ACB6C4: using guessed type int dword_ACB6C4; // ACCFCC: using guessed type float flt_ACCFCC; //----- (005A0960) -------------------------------------------------------- void __thiscall sub_5A0960(char *this) { int v1; // ecx _DWORD *v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax bool v7; // zf signed int v8; // [esp+1Ch] [ebp-8h] _DWORD **v9; // [esp+20h] [ebp-4h] v1 = (int)(this + 352); v9 = (_DWORD **)v1; v8 = 18; do { v2 = *(_DWORD **)(*(_DWORD *)v1 + 412); if ( v2 ) { if ( (*(int (__thiscall **)(_DWORD))(*v2 + 4))(*(_DWORD *)(*(_DWORD *)v1 + 412)) == 2 ) { v3 = dword_ACB6C4; v4 = v2[2]; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v2[2]) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)v4); if ( *v5 ) { v6 = *v5; if ( v6 ) { if ( !*(_DWORD *)(v6 + 101) && v2[4] == 9 ) sub_5D37A0(*v9, flt_ACCFCC, 7.0, 0.0); } } } } } } v1 = (int)(v9 + 1); v7 = v8-- == 1; ++v9; } while ( !v7 ); } // ACB6C4: using guessed type int dword_ACB6C4; // ACCFCC: using guessed type float flt_ACCFCC; //----- (005A0A20) -------------------------------------------------------- int __thiscall sub_5A0A20(char *this, int a2) { int v2; // esi signed int v3; // edi int result; // eax int v5; // ecx v2 = (int)(this + 352); v3 = 18; do { result = *(_DWORD *)v2; v5 = *(_DWORD *)(*(_DWORD *)v2 + 412); if ( v5 ) { result = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( result == 5 ) *(_BYTE *)(*(_DWORD *)v2 + 429) = 1; } v2 += 4; --v3; } while ( v3 ); return result; } //----- (005A0A60) -------------------------------------------------------- int __thiscall sub_5A0A60(char *this) { int v1; // esi signed int v2; // edi int result; // eax int v4; // ecx v1 = (int)(this + 352); v2 = 18; do { result = *(_DWORD *)v1; v4 = *(_DWORD *)(*(_DWORD *)v1 + 412); if ( v4 ) { result = (*(int (**)(void))(*(_DWORD *)v4 + 4))(); if ( result == 5 ) *(_BYTE *)(*(_DWORD *)v1 + 429) = 0; } v1 += 4; --v2; } while ( v2 ); return result; } //----- (005A0AA0) -------------------------------------------------------- int __thiscall sub_5A0AA0(_DWORD *this) { _DWORD *v1; // edx signed int v2; // esi int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int result; // eax v1 = this + 89; v2 = 3; do { v3 = *(v1 - 1); if ( *(_BYTE *)(v3 + 438) ) { if ( *(_DWORD *)(v3 + 432) ) { v4 = *(_DWORD *)(v3 + 432); if ( v4 ) { if ( *(_BYTE *)(v4 + 64) ) *(_BYTE *)(v4 + 65) = 0; } } } v5 = *v1; if ( *(_BYTE *)(*v1 + 438) ) { if ( *(_DWORD *)(v5 + 432) ) { v6 = *(_DWORD *)(v5 + 432); if ( v6 ) { if ( *(_BYTE *)(v6 + 64) ) *(_BYTE *)(v6 + 65) = 0; } } } v7 = v1[1]; if ( *(_BYTE *)(v7 + 438) ) { if ( *(_DWORD *)(v7 + 432) ) { v8 = *(_DWORD *)(v7 + 432); if ( v8 ) { if ( *(_BYTE *)(v8 + 64) ) *(_BYTE *)(v8 + 65) = 0; } } } v9 = v1[2]; if ( *(_BYTE *)(v9 + 438) ) { if ( *(_DWORD *)(v9 + 432) ) { v10 = *(_DWORD *)(v9 + 432); if ( v10 ) { if ( *(_BYTE *)(v10 + 64) ) *(_BYTE *)(v10 + 65) = 0; } } } v11 = v1[3]; if ( *(_BYTE *)(v11 + 438) ) { if ( *(_DWORD *)(v11 + 432) ) { v12 = *(_DWORD *)(v11 + 432); if ( v12 ) { if ( *(_BYTE *)(v12 + 64) ) *(_BYTE *)(v12 + 65) = 0; } } } result = v1[4]; if ( *(_BYTE *)(result + 438) ) { if ( *(_DWORD *)(result + 432) ) { result = *(_DWORD *)(result + 432); if ( result ) { if ( *(_BYTE *)(result + 64) ) *(_BYTE *)(result + 65) = 0; } } } v1 += 6; --v2; } while ( v2 ); return result; } //----- (005A0BA0) -------------------------------------------------------- char __thiscall sub_5A0BA0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[104]); return (char)v2; } //----- (005A0BD0) -------------------------------------------------------- char __thiscall sub_5A0BD0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[104]); return (char)v2; } //----- (005A0C00) -------------------------------------------------------- int __thiscall sub_5A0C00(_DWORD *this) { int v1; // esi int v2; // ecx int result; // eax int v4; // eax int v5; // eax __int16 v6; // ax int *v7; // ecx int v8; // eax unsigned int v9; // eax int v10; // eax int *v11; // ecx int v12; // eax unsigned __int16 v13; // ax unsigned int *v14; // ecx int v15; // edi int v16; // eax unsigned int v17; // edi int v18; // edi int *v19; // ecx v1 = (int)this; v2 = this[103]; if ( !v2 ) return sub_8F2F90(v1); v4 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); switch ( v4 ) { case 4: v5 = *(_DWORD *)(v1 + 412); if ( v5 ) { v6 = *(_WORD *)(v5 + 12); if ( v6 != -1 ) { result = sub_685510(&byte_ADA230, v6); if ( !result ) { *(_DWORD *)(v1 + 272) = 0; return result; } v7 = (int *)dword_ACEC34; *(_DWORD *)(v1 + 272) = dword_ACEC34; if ( v7 ) { sub_547C20(v7, result); return sub_8F2F90(v1); } } } break; case 5: v8 = *(_DWORD *)(v1 + 412); if ( v8 ) { v9 = *(_DWORD *)(v8 + 8); if ( v9 < 0xC0 ) { v10 = dword_ADA234[v9]; if ( v10 ) { v11 = (int *)dword_ACEC34; *(_DWORD *)(v1 + 272) = dword_ACEC34; if ( v11 ) { sub_547C20(v11, v10); return sub_8F2F90(v1); } } } } break; case 1: v12 = *(_DWORD *)(v1 + 412); if ( v12 ) { v13 = *(_WORD *)(v12 + 8); v14 = (unsigned int *)dword_AD019C; *(_DWORD *)(v1 + 272) = dword_AD019C; if ( v14 ) { if ( v13 != -1 ) { sub_5A9570(v14, v13, 1, 0, 0); return sub_8F2F90(v1); } } } break; case 2: v15 = *(_DWORD *)(v1 + 412); if ( v15 ) { v16 = sub_4B0DC0(*(_DWORD *)(v15 + 8)); if ( v16 ) { if ( *(_DWORD *)(v16 + 101) == 2 ) { v17 = *(_DWORD *)(v15 + 16); if ( v17 < 0x2A ) { v18 = dword_ADB1FC[v17]; if ( v18 ) { v19 = (int *)dword_ACEC34; *(_DWORD *)(v1 + 272) = dword_ACEC34; if ( v19 ) { sub_547C20(v19, v18); return sub_8F2F90(v1); } } } } else { *(_DWORD *)(v1 + 272) = dword_AD01E8; sub_8F2EA0((void **)v1, (const char *)(v16 + 33)); } } } break; } return sub_8F2F90(v1); } // ACEC34: using guessed type int dword_ACEC34; // AD019C: using guessed type int dword_AD019C; // AD01E8: using guessed type int dword_AD01E8; // ADA230: using guessed type char byte_ADA230; //----- (005A0DD0) -------------------------------------------------------- void __thiscall sub_5A0DD0(float **this) { float **v1; // esi float *v2; // edi float v3; // ST0C_4 float v4; // ST10_4 v1 = this; if ( this[108] ) { *((_BYTE *)this[108] + 65) = 1; v2 = *(float **)this[108]; v3 = (double)((unsigned int)(*((int (__thiscall **)(float **))*this + 36))(this) >> 1); v4 = (double)((unsigned int)(*((int (__thiscall **)(float **))*v1 + 36))(v1) >> 1); v2[22] = v3; v2[23] = v4; v2[24] = 0.0; sub_6B0B40(v1[108], v1); } } //----- (005A0E60) -------------------------------------------------------- int __thiscall sub_5A0E60(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // ecx char v5; // [esp+4h] [ebp-24h] v1 = this; v2 = this[87]; if ( v2 ) this[87] = v2 - 1; else this[87] = 4; sub_5A0AA0(this); v3 = (_DWORD *)v1[74]; if ( v3 ) sub_8EEE70(v3, 139, 0, 0); sprintf(&v5, "%u", v1[87] + 1); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[147] + 472))(&v5); } //----- (005A0EF0) -------------------------------------------------------- int __thiscall sub_5A0EF0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx char v4; // [esp+4h] [ebp-24h] v1 = this; ++v1[87]; if ( this[87] >= 5u ) this[87] = 0; sub_5A0AA0(this); v2 = (_DWORD *)v1[74]; if ( v2 ) sub_8EEE70(v2, 139, 0, 0); sprintf(&v4, "%u", v1[87] + 1); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[147] + 472))(&v4); } //----- (005A0F80) -------------------------------------------------------- char __thiscall sub_5A0F80(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ecx char result; // al unsigned int v6; // eax _WORD *v7; // edi int v8; // ebx int v9; // ecx int v10; // eax v3 = this; if ( !a2 ) return 0; switch ( (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2) ) { case 0: v3[156] = 0; v4 = *(_DWORD *)(a2 + 8); if ( v4 ) { v3[155] = a3; v3[157] = v4; v3[158] = 0; v3[168] = (*(int (**)(void))(*(_DWORD *)v4 + 12))(); } *((_WORD *)v3 + 334) = *(_WORD *)(a2 + 12); sub_6BA650(&dword_AB6520, 4); result = 1; break; case 1: v3[156] = 1; v3[157] = *(unsigned __int16 *)(a2 + 8); v3[155] = a3; sub_6BA650(&dword_AB6520, 4); result = 1; break; case 2: v3[156] = 3; v10 = *(_DWORD *)(a2 + 16); v3[155] = a3; v3[157] = v10; sub_6BA650(&dword_AB6520, 4); result = 1; break; case 4: v3[156] = 6; v9 = *(_DWORD *)(a2 + 8); if ( v9 ) { v3[155] = a3; v3[157] = v9; v3[158] = 0; v3[168] = (*(int (**)(void))(*(_DWORD *)v9 + 12))(); } *((_WORD *)v3 + 334) = *(_WORD *)(a2 + 12); sub_6BA650(&dword_AB6520, 4); result = 1; break; case 5: v3[156] = 6; v6 = *(_DWORD *)(a2 + 8); if ( v6 >= 0xC0 ) return 0; v7 = (_WORD *)dword_ADA234[v6]; if ( !v7 ) return 0; v3[155] = a3; v3[157] = v7; v3[158] = 0; v3[168] = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v7 + 12))(v7); *((_WORD *)v3 + 334) = v7[4]; v8 = *(_DWORD *)(a2 + 8); v3[165] = 4; v3[166] = v8; sub_6BA650(&dword_AB6520, 4); result = 1; break; default: return 0; } return result; } //----- (005A1160) -------------------------------------------------------- void __thiscall sub_5A1160(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // edi int v5; // ecx int v6; // eax int v7; // ecx volatile LONG **v8; // ebx int v9; // eax volatile LONG *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char v12; // [esp+10h] [ebp-28h] char v13; // [esp+14h] [ebp-24h] char v14; // [esp+18h] [ebp-20h] char v15; // [esp+1Ch] [ebp-1Ch] int v16; // [esp+20h] [ebp-18h] int v17; // [esp+24h] [ebp-14h] int v18; // [esp+28h] [ebp-10h] int v19; // [esp+34h] [ebp-4h] v3 = (int)this; if ( this[248] ) { v4 = a2; v5 = this[a2 + 230]; if ( v5 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v5 + 260))() ) { v6 = (*(int (**)(void))(**(_DWORD **)(v3 + 4 * v4 + 704) + 164))(); v7 = *(_DWORD *)(v3 + 4 * v4 + 704); v16 = v6; v18 = (*(int (**)(void))(*(_DWORD *)v7 + 168))(); sub_455710((void *)v3, &a2, *(_DWORD *)(v3 + 4 * v4 + 920)); v19 = 0; sub_8F9E00(&unk_BA6B10, (_DWORD *)a2); *(_DWORD *)(v3 + 4 * v4 + 920) = 0; v8 = sub_8FB140(*(_DWORD *)(v3 + 992), a3, (int)&v14, (int)&v15, *(volatile LONG **)(v3 + 1000)); if ( v8 ) { v9 = *(_DWORD *)(v3 + 996); if ( v9 ) { sub_8F71E0(v9, a3, &v17, &a3, &v12, &v13); v10 = sub_8F3EB0(v17 + v16 + 25, a3 + v18 + 4, (int)v8, v3, 0, 0); *(_DWORD *)(v3 + 4 * v4 + 920) = v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); } } v11 = (void (__thiscall ***)(_DWORD, signed int))a2; v19 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } } } } //----- (005A12E0) -------------------------------------------------------- void __thiscall sub_5A12E0(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // edi int v5; // ecx volatile LONG **v6; // ebx int v7; // eax int v8; // ecx volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char v11; // [esp+10h] [ebp-18h] char v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] int v14; // [esp+24h] [ebp-4h] v3 = (int)this; if ( this[248] ) { v4 = a2; v5 = this[a2 + 251]; if ( v5 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v5 + 260))() ) { v6 = sub_8FB140(*(_DWORD *)(v3 + 992), a3, (int)&v11, (int)&v12, *(volatile LONG **)(v3 + 1000)); v7 = (*(int (**)(void))(**(_DWORD **)(v3 + 4 * v4 + 1004) + 164))(); v8 = *(_DWORD *)(v3 + 4 * v4 + 1004); v13 = v7; a3 = (*(int (**)(void))(*(_DWORD *)v8 + 168))(); sub_455710((void *)v3, &a2, *(_DWORD *)(v3 + 4 * v4 + 1004)); v14 = 0; sub_8F9E00(&unk_BA6B10, (_DWORD *)a2); *(_DWORD *)(v3 + 4 * v4 + 1004) = 0; if ( v6 ) { v9 = sub_8F3EB0(v13, a3, (int)v6, v3, 0, 0); *(_DWORD *)(v3 + 4 * v4 + 1004) = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); } v10 = (void (__thiscall ***)(_DWORD, signed int))a2; v14 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } } } } //----- (005A1430) -------------------------------------------------------- int __thiscall sub_5A1430(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // esi unsigned __int8 *v6; // eax unsigned int v7; // ebx int v8; // edi _DWORD *v9; // ecx int result; // eax _DWORD *v11; // [esp+14h] [ebp-10h] v3 = this; v11 = this; v4 = operator new(0x14u); if ( v4 ) v5 = sub_6322D0(v4); else v5 = 0; v5[4] = a2; v5[3] = 0; v6 = (unsigned __int8 *)sub_4522A0((const char *)(*(_DWORD *)(a3 + 112) + 2)); if ( v6 ) v5[2] = *v6; v7 = v3[276]; if ( v7 < 0x64 ) { v8 = dword_AD46F4[v7]; if ( (_DWORD *)v8 != v5 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); dword_AD46F4[v7] = (int)v5; InterlockedIncrement(v5 + 1); } byte_AD488A = 1; sub_632F20(&dword_AD46F0, v7); v3 = v11; } v9 = (_DWORD *)v3[74]; if ( v9 ) sub_8EEE70(v9, 139, 0, 0); result = sub_6BA650(&dword_AB6520, 4); *((_BYTE *)v3 + 1095) = 0; return result; } // AD46F0: using guessed type int dword_AD46F0; // AD488A: using guessed type char byte_AD488A; //----- (005A1550) -------------------------------------------------------- char __thiscall sub_5A1550(_DWORD *this, __int16 a2) { _WORD *v2; // edx unsigned int v3; // eax unsigned int v4; // ecx v2 = (_WORD *)this[278]; v3 = (this[279] - (signed int)v2) >> 1; if ( !v3 ) return 0; v4 = 0; if ( !v3 ) return 0; if ( v3 <= 0 ) std::_Xout_of_range("invalid vector subscript"); while ( *v2 != a2 ) { ++v4; ++v2; if ( v3 <= v4 ) return 0; } return 1; } //----- (005A15F0) -------------------------------------------------------- LONG __thiscall sub_5A15F0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int *v3; // edi int v4; // ebx int v5; // edi v1 = this; *this = &ShortCutIconWin::`vftable'; this[58] = &ShortCutIconWin::`vftable'; v2 = this[103]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[103] = 0; } v3 = (int *)v1[108]; if ( v3 ) { sub_8D47C0(v3 + 7); nullsub_6(v3 + 1); v4 = *v3; if ( *v3 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); operator delete(v3); v1[108] = 0; } v5 = v1[103]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_5D74F0(v1); } // 9DB2F0: using guessed type void *ShortCutIconWin::`vftable'; // 9DB30C: using guessed type void *ShortCutIconWin::`vftable'; //----- (005A1710) -------------------------------------------------------- void __thiscall sub_5A1710(int this) { int v1; // esi char *v2; // eax float *v3; // edi int v4; // eax float *v5; // eax int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 432) ) { sub_5A0DD0((float **)this); } else { v8 = 0; v9 = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA838, "Toggle_SkillOn.nif"); sub_8F66B0(v2, (int)&v8, 0); v3 = (float *)operator new(0x44u); LOBYTE(v9) = 1; if ( v3 ) { v4 = sub_85BD60((void *)v8); v5 = sub_6B0A90(v3, v4); } else { v5 = 0; } LOBYTE(v9) = 0; *(_DWORD *)(v1 + 432) = v5; sub_5A0DD0((float **)v1); v6 = v8; *(_BYTE *)(v1 + 438) = 1; v9 = -1; if ( v6 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } } } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005A1820) -------------------------------------------------------- void __thiscall sub_5A1820(_DWORD *this) { _DWORD *v1; // edi int v2; // esi signed int v3; // eax int v4; // ebx const char *v5; // [esp-4h] [ebp-114h] char v6; // [esp+Ch] [ebp-104h] char v7; // [esp+Dh] [ebp-103h] v1 = this; v2 = 0; do { if ( v2 > 11 ) { sub_5A1160(v1, v2, (int)"SmallNumTrans02"); v5 = "SmallNumTrans01"; LABEL_19: sub_5A12E0(v1, v2, (int)v5); goto LABEL_20; } v6 = 0; memset(&v7, 0, 0xFFu); switch ( v1[87] ) { case 0: v3 = 47; break; case 1: v3 = 59; break; case 2: v3 = 71; break; case 3: v3 = 83; break; default: sub_5A1160(v1, v2, (int)"SmallNumTrans02"); v5 = "SmallNumTrans01"; goto LABEL_19; } v4 = v3 + v2; if ( !byte_AB6823[2 * (v3 + v2)] ) { sub_5A1160(v1, v2, (int)"SmallNumTrans02"); v5 = "SmallNumTrans01"; goto LABEL_19; } sprintf(&v6, "%i", HIBYTE(word_B91652[4 * v4])); sub_5A1160(v1, v2, (int)&v6); switch ( LOBYTE(word_B91652[4 * v4]) ) { case 0x10: v5 = "ShiftPlus"; goto LABEL_19; case 0x11: v5 = "CtrlPlus"; goto LABEL_19; case 0x12: sub_5A12E0(v1, v2, (int)"AltPlus"); break; default: sub_5A12E0(v1, v2, (int)"SmallNumTrans01"); break; } LABEL_20: ++v2; } while ( v2 < 18 ); } // B91652: using guessed type __int16 word_B91652[]; //----- (005A1970) -------------------------------------------------------- unsigned int __thiscall sub_5A1970(_DWORD **this, char a2) { _DWORD **v2; // edi int v3; // esi unsigned int *v4; // ebx unsigned int result; // eax int v6; // ecx int v7; // esi int v8; // edi double v9; // st7 float v10; // ST0C_4 float v11; // ST08_4 float v12; // ST04_4 __int16 *v13; // [esp+24h] [ebp-10h] _DWORD **v14; // [esp+28h] [ebp-Ch] int v15; // [esp+2Ch] [ebp-8h] int v16; // [esp+30h] [ebp-4h] unsigned int v17; // [esp+3Ch] [ebp+8h] v2 = this; v14 = this; LOBYTE(v16) = 0; if ( !a2 ) LOBYTE(v16) = 1; v3 = 0; v13 = (__int16 *)dword_ADB620; v17 = 0; v15 = 0; v4 = (unsigned int *)(this + 88); while ( 1 ) { result = *v4; v6 = *(_DWORD *)(*v4 + 412); if ( v6 ) { result = (*(int (**)(void))(*(_DWORD *)v6 + 4))(); if ( result == 2 ) { result = v3 + 18 * (_DWORD)v2[87]; if ( result < 0x64 ) { result = dword_AD46F4[result]; if ( result ) { v7 = dword_ACB6C4; v8 = *(_DWORD *)(result + 8); result = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v8); if ( (_BYTE)result ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { result = *(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v8; if ( *(_DWORD *)result ) { result = *(_DWORD *)result; if ( result ) { if ( v13 ) { result = sub_4EA9F0(*v13, *(_BYTE *)result); v17 = result; } if ( !v17 ) { if ( (_BYTE)v16 ) v9 = 1.0; else v9 = 0.44999999; v10 = v9; v11 = v9; v12 = v9; sub_5D4B50((_DWORD *)*v4, v12, v11, v10); (*(void (__stdcall **)(int))(*(_DWORD *)*v4 + 240))(v16); result = *v4; *(_BYTE *)(*v4 + 420) = v16; } } } } } } } } } v3 = v15 + 1; ++v4; v15 = v3; if ( v3 >= 18 ) break; v2 = v14; } return result; } // ACB6C4: using guessed type int dword_ACB6C4; // ADB618: using guessed type int dword_ADB618; // ADB620: using guessed type int dword_ADB620; //----- (005A1AC0) -------------------------------------------------------- unsigned int __thiscall sub_5A1AC0(int this, __int16 a2) { int v2; // edi int v3; // ecx unsigned int result; // eax unsigned int v5; // edx _WORD **v6; // esi signed int v7; // ebx __int16 v8; // ax int v9; // eax unsigned int v10; // [esp+4h] [ebp-4h] v2 = this; *(_BYTE *)(this + 1108) = 0; v3 = *(_DWORD *)(this + 1112); result = (*(_DWORD *)(v2 + 1116) - v3) >> 1; if ( result ) { v5 = 0; v10 = 0; if ( result ) { if ( result <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { if ( *(_WORD *)(v3 + 2 * v5) == a2 ) { v6 = (_WORD **)(v2 + 352); v7 = 18; do { v8 = sub_5D6F80(*v6); if ( v8 != -1 && v8 == a2 ) { v9 = *((_DWORD *)*v6 + 108); if ( v9 ) { if ( *(_BYTE *)(v9 + 64) ) *(_BYTE *)(v9 + 65) = 0; } } ++v6; --v7; } while ( v7 ); memcpy_0( (void *)(*(_DWORD *)(v2 + 1112) + 2 * v10), (const void *)(*(_DWORD *)(v2 + 1112) + 2 * v10 + 2), 2 * ((signed int)(*(_DWORD *)(v2 + 1116) - (*(_DWORD *)(v2 + 1112) + 2 * v10 + 2)) >> 1)); v5 = v10; *(_DWORD *)(v2 + 1116) -= 2; } v3 = *(_DWORD *)(v2 + 1112); ++v5; result = (*(_DWORD *)(v2 + 1116) - v3) >> 1; v10 = v5; } while ( result > v5 ); } } return result; } //----- (005A1BB0) -------------------------------------------------------- volatile LONG *__cdecl sub_5A1BB0(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1B8u); v8 = v4; v9 = 0; if ( v4 ) v5 = sub_5A0590(v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 612))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (005A1CF0) -------------------------------------------------------- _DWORD *__thiscall sub_5A1CF0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax signed int v3; // ecx _DWORD *v4; // eax int v5; // edi const void *v6; // ecx void *v7; // edi _DWORD *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ShortCutWin::`vftable'; v1[58] = &ShortCutWin::`vftable'; v1[148] = &PgWinDrop::`vftable'; v1[150] = 0; v2 = (int)(v1 + 152); *(_DWORD *)v2 = &DropContents::`vftable'; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)(v2 + 64) = 0; v1[248] = 0; v1[249] = 0; v1[278] = 0; v1[279] = 0; v1[280] = 0; v1[149] = v1 + 152; v1[87] = 0; *((_WORD *)v1 + 172) = 256; v1[170] = 0; v1[171] = 0; v1[172] = 0; v1[274] = -1; v3 = 0; v4 = v1 + 194; do { *(v4 - 18) = 0; *v4 = 0; v4[18] = 0; v4[36] = 0; v4[57] = 0; *((_BYTE *)v1 + v3++ + 1076) = 1; ++v4; } while ( v3 < 18 ); *((_BYTE *)v1 + 1094) = 0; v1[173] = 0; v5 = v1[249]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[249] = 0; } v1[275] = 0; v1[276] = 0; *((_BYTE *)v1 + 1095) = 0; v6 = (const void *)v1[279]; v7 = (void *)v1[278]; if ( v7 != v6 ) { memcpy_0(v7, v6, 0); v1[279] = v7; } result = v1; *((_BYTE *)v1 + 1108) = 0; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DB578: using guessed type void *ShortCutWin::`vftable'; // 9DB594: using guessed type void *ShortCutWin::`vftable'; //----- (005A1E80) -------------------------------------------------------- LONG __thiscall sub_5A1E80(_DWORD *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi void (__stdcall ***v4)(signed int); // ecx const void *v5; // ecx void *v6; // esi int v7; // esi int v8; // esi signed int v10; // [esp+18h] [ebp-14h] int **v11; // [esp+1Ch] [ebp-10h] v1 = this; *this = &ShortCutWin::`vftable'; this[58] = &ShortCutWin::`vftable'; v11 = (int **)(this + 129); v10 = 18; do { v2 = *v11; if ( *v11 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); } ++v11; --v10; } while ( v10 ); v4 = (void (__stdcall ***)(signed int))v1[275]; if ( v4 ) (**v4)(1); *((_BYTE *)v1 + 1095) = 0; if ( (v1[279] - v1[278]) & 0xFFFFFFFE ) { v5 = (const void *)v1[279]; v6 = (void *)v1[278]; if ( v6 != v5 ) { memcpy_0(v6, v5, 0); v1[279] = v6; } } if ( v1[278] ) operator delete((void *)v1[278]); v1[278] = 0; v1[279] = 0; v1[280] = 0; v7 = v1[249]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[248]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[152] = &DropContents::`vftable'; v1[148] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DB578: using guessed type void *ShortCutWin::`vftable'; // 9DB594: using guessed type void *ShortCutWin::`vftable'; //----- (005A2040) -------------------------------------------------------- volatile LONG *__cdecl sub_5A2040(int a1, int a2) { _DWORD *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x468u); v6 = v2; v7 = 0; if ( v2 ) v3 = sub_5A1CF0(v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, signed int, signed int))(*v3 + 540))( v3, a1, a2, 1, -1) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (005A2180) -------------------------------------------------------- volatile LONG *__cdecl sub_5A2180(int a1, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x468u); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_5A1CF0(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, _DWORD, int))(*v4 + 540))(v4, a1, a2, 0, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (005A22C0) -------------------------------------------------------- void __thiscall sub_5A22C0(_DWORD *this, float a2) { _DWORD *v2; // edi int v3; // ecx int v4; // ebx int v5; // esi signed int v6; // eax int v7; // eax _DWORD *v8; // ecx double v9; // st7 int v10; // eax int v11; // eax __int16 v12; // ax int v13; // eax int v14; // eax int v15; // esi int v16; // eax int v17; // eax unsigned int v18; // esi int v19; // esi int v20; // eax char v21; // al float v22; // ST00_4 float v23; // [esp+4h] [ebp-40h] float v24; // [esp+8h] [ebp-3Ch] float v25; // [esp+Ch] [ebp-38h] char *v26[3]; // [esp+20h] [ebp-24h] int v27; // [esp+2Ch] [ebp-18h] int v28; // [esp+30h] [ebp-14h] _DWORD *v29; // [esp+34h] [ebp-10h] int v30; // [esp+40h] [ebp-4h] v2 = this; sub_5D31A0((int)this, a2); v3 = v2[103]; if ( !v3 ) return; if ( (*(int (**)(void))(*(_DWORD *)v3 + 4))() != 1 ) { if ( (*(int (**)(void))(*(_DWORD *)v2[103] + 4))() == 4 ) { v11 = v2[103]; if ( !v11 ) return; v12 = *(_WORD *)(v11 + 12); if ( v12 != -1 ) { if ( sub_685510(&byte_ADA230, v12) ) return; goto LABEL_26; } } else if ( (*(int (**)(void))(*(_DWORD *)v2[103] + 4))() == 5 ) { v13 = v2[103]; if ( !v13 ) return; v14 = *(_DWORD *)(v13 + 8); } else { if ( (*(int (**)(void))(*(_DWORD *)v2[103] + 4))() != 2 ) return; v15 = v2[103]; if ( !v15 ) return; v16 = sub_4B0DC0(*(_DWORD *)(v15 + 8)); if ( !v16 ) return; v17 = *(_DWORD *)(v16 + 101); if ( v17 ) { if ( v17 != 2 ) return; v18 = *(_DWORD *)(v15 + 16); if ( v18 >= 0x2A || !dword_ADB1FC[v18] ) { v25 = 128.0; v9 = 0.0; goto LABEL_47; } } else { v19 = *(_DWORD *)(v15 + 16); if ( v19 == 8 ) { v20 = sub_680D20((int)byte_AD9238); v8 = v2; if ( v20 ) { v9 = 0.0; v25 = 0.0; } else { v25 = 128.0; v9 = 0.0; } v24 = 0.0; v23 = 0.0; goto LABEL_49; } if ( v19 != 9 ) return; v21 = sub_6807E0(byte_AD9238); if ( sub_40A760(v21) != 26 && !sub_680D30((int)byte_AD9238) ) goto LABEL_26; } } v9 = 0.0; v25 = 0.0; goto LABEL_47; } v4 = *(unsigned __int16 *)(v2[103] + 8); if ( (_WORD)v4 == -1 ) return; if ( (unsigned __int8)sub_6BE7D0(*(_WORD *)(v2[103] + 8)) == 1 && !sub_6BE900(v4) ) { LABEL_26: v25 = 128.0; v9 = 0.0; LABEL_47: v24 = v9; v23 = v9; goto LABEL_48; } v27 = sub_680BF0((int)byte_AD9238); v5 = sub_49FBB0(v4); if ( !v5 ) return; v29 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v29 ) { if ( !sub_64F900(dword_AD8EBC, 394) ) { HIBYTE(a2) = *(_BYTE *)(v5 + 668); v6 = sub_4A8070(v29); if ( v6 < HIBYTE(a2) ) { if ( HIBYTE(a2) ) { LABEL_21: v25 = 128.0; v24 = 0.0; v23 = 0.0; v9 = 255.0; LABEL_48: v8 = v2; goto LABEL_49; } } } sub_5A5FE0(v26); v30 = 0; LODWORD(a2) = 349; sub_67AFA0(v26, (int)&a2); LODWORD(a2) = 346; sub_67AFA0(v26, (int)&a2); v30 = -1; sub_4E6E90(v26); } a2 = *(float *)(v5 + 160); sub_6BFA60((int)&v28, v4); if ( BYTE1(v28) ) v7 = LODWORD(a2) - *(_DWORD *)(v5 + 4 * SBYTE1(v28) + 463); else v7 = LODWORD(a2); v8 = v2; if ( v27 < v7 || (sub_5D71B0(v2, 255.0, 0.0, 0.0, 0.0), v10 = sub_680C10((int)byte_AD9238), v8 = v2, v10 < *(_DWORD *)(v5 + 176)) ) { v25 = 128.0; v24 = 0.0; v23 = 0.0; v9 = 255.0; LABEL_49: v22 = v9; sub_5D71B0(v8, v22, v23, v24, v25); return; } sub_5D71B0(v2, 255.0, 0.0, 0.0, 0.0); sub_650810(dword_AD8EBC); if ( !sub_685240(&byte_ADA230, *(_DWORD *)(v5 + 110)) || sub_64F900(dword_AD8EBC, 34) || sub_64F900(dword_AD8EBC, 379) ) goto LABEL_21; } // ADA230: using guessed type char byte_ADA230; //----- (005A26B0) -------------------------------------------------------- void __thiscall sub_5A26B0(_DWORD *this, __int16 a2) { _DWORD *v2; // ebx int v3; // esi _WORD *v4; // edi unsigned int v5; // eax unsigned int v6; // ecx unsigned int v7; // eax _BYTE *v8; // edx int v9; // ecx int v10; // edi unsigned int v11; // eax unsigned int v12; // eax unsigned int v13; // ecx char *v14; // ecx _WORD *v15; // eax int v16; // ecx unsigned int v17; // eax unsigned int v18; // eax unsigned int v19; // ecx char *v20; // ecx _WORD *v21; // eax int *v22; // esi signed int v23; // edi __int16 v24; // ax _DWORD *v25; // [esp+Ch] [ebp-4h] v2 = this; v3 = (int)(this + 278); v4 = (_WORD *)this[278]; v5 = (this[279] - (signed int)v4) >> 1; v25 = this; if ( !v5 ) { sub_4F9CE0(this + 278, &a2); LABEL_38: *((_BYTE *)v2 + 1108) = 1; v22 = v2 + 88; v23 = 18; do { v24 = sub_5D6F80((_WORD *)*v22); if ( v24 != -1 && v24 == a2 ) sub_5A1710(*v22); ++v22; --v23; } while ( v23 ); return; } v6 = 0; if ( !v5 ) { LABEL_8: v7 = *(_DWORD *)(v3 + 4); if ( (unsigned int)&a2 >= v7 || (v8 = *(_BYTE **)v3, *(_DWORD *)v3 > (unsigned int)&a2) ) { v16 = *(_DWORD *)(v3 + 8); if ( v7 == v16 ) { v17 = (signed int)(v7 - *(_DWORD *)v3) >> 1; if ( v17 > 0x7FFFFFFE ) std::_Xlength_error("vector too long"); v18 = v17 + 1; v19 = (v16 - *(_DWORD *)v3) >> 1; if ( v18 > v19 ) { if ( 0x7FFFFFFF - (v19 >> 1) >= v19 ) v20 = (char *)((v19 >> 1) + v19); else v20 = 0; if ( (unsigned int)v20 < v18 ) v20 = (char *)v18; sub_4F9A90((const void **)v3, v20); } } v21 = *(_WORD **)(v3 + 4); if ( v21 ) *v21 = a2; *(_DWORD *)(v3 + 4) += 2; } else { v9 = *(_DWORD *)(v3 + 8); v10 = ((char *)&a2 - v8) >> 1; if ( v7 == v9 ) { v11 = (signed int)(v7 - (_DWORD)v8) >> 1; if ( v11 > 0x7FFFFFFE ) std::_Xlength_error("vector too long"); v12 = v11 + 1; v13 = (v9 - (signed int)v8) >> 1; if ( v12 > v13 ) { if ( 0x7FFFFFFF - (v13 >> 1) >= v13 ) v14 = (char *)((v13 >> 1) + v13); else v14 = 0; if ( (unsigned int)v14 < v12 ) v14 = (char *)v12; sub_4F9A90((const void **)v3, v14); v2 = v25; } } v15 = *(_WORD **)(v3 + 4); if ( v15 ) *v15 = *(_WORD *)(*(_DWORD *)v3 + 2 * v10); *(_DWORD *)(v3 + 4) += 2; } goto LABEL_38; } if ( v5 <= 0 ) std::_Xout_of_range("invalid vector subscript"); while ( *v4 == -1 || a2 != *v4 ) { ++v6; ++v4; if ( v5 <= v6 ) { v2 = v25; goto LABEL_8; } } } //----- (005A2830) -------------------------------------------------------- char __thiscall sub_5A2830(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { int v5; // esi char result; // al int v7; // eax volatile LONG *v8; // eax v5 = (int)this; result = sub_5D75E0(this, a2, a3, a5); if ( result ) { *(_DWORD *)(v5 + 416) = a4; v7 = sub_421050(0); v8 = sub_8F4A20(18, 20, 14, 12, v7, v5, 0, 0); *(_DWORD *)(v5 + 424) = v8; (*(void (__thiscall **)(volatile LONG *, signed int))(*v8 + 488))(v8, 2); a5 = (_DWORD *)v5; sub_5B3CF0(&dword_AD02C4, &a5); result = 1; } return result; } //----- (005A28B0) -------------------------------------------------------- char __thiscall sub_5A28B0(int *this) { int *v1; // esi int v2; // ecx int v3; // eax int v4; // eax int v5; // ebx int v6; // edi int v7; // ST04_4 int v8; // eax _DWORD *v9; // edi int *v10; // eax int v11; // ST24_4 char *v12; // eax int v13; // ecx __int16 *v14; // eax int v15; // eax __int16 *v16; // eax int v17; // ecx int v18; // eax unsigned int v19; // eax int v20; // edi int v21; // ecx int v22; // ebx int v23; // ecx int v24; // ebx int v25; // ST04_4 int v26; // eax int *v27; // eax int v28; // ebx char *v29; // eax int v30; // ecx __int16 *v31; // eax int v32; // ecx float v34; // [esp+0h] [ebp-54h] float v35; // [esp+4h] [ebp-50h] float v36; // [esp+8h] [ebp-4Ch] float v37; // [esp+Ch] [ebp-48h] int v38; // [esp+10h] [ebp-44h] int v39; // [esp+20h] [ebp-34h] int v40; // [esp+24h] [ebp-30h] char v41; // [esp+28h] [ebp-2Ch] int v42; // [esp+50h] [ebp-4h] v1 = this; *((_BYTE *)this + 428) = 1; sub_5D3290(this, 0xFFFF); sub_5D32D0(v1, 0xFFFF); v2 = v1[103]; if ( !v2 ) { LOBYTE(v3) = (*(int (__thiscall **)(int *, _DWORD, signed int, signed int, signed int))(*v1 + 584))( v1, 0, -1, 32, 32); return v3; } v4 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); if ( v4 != 4 ) { if ( v4 == 5 && !*((_BYTE *)v1 + 429) ) { v18 = v1[103]; if ( !v18 ) { sub_5A3690(v1, 0); v32 = v1[106]; if ( v32 ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v32 + 472))(&unk_9DAE27); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[106] + 256))(0); } goto LABEL_41; } v19 = *(_DWORD *)(v18 + 8); if ( v19 >= 0xC0 || (v20 = dword_ADA234[v19]) == 0 ) { sub_5D7110(v1, 0.0, 0.0, 0.0, 0.0); sub_5D71B0(v1, 0.0, 0.0, 0.0, 0.0); sub_633040((char *)&dword_AD46F0); LOBYTE(v3) = sub_5A3690(v1, 0); v21 = v1[106]; if ( v21 ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v21 + 472))(&unk_9DAE23); LOBYTE(v3) = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v1[106] + 256))(v1[106], 0); } return v3; } v22 = *(unsigned __int16 *)(v20 + 8); LOBYTE(v3) = -1; if ( (_WORD)v22 == -1 ) return v3; v37 = 0.0; v36 = 0.0; v35 = 0.0; v34 = 0.0; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v20 + 4))(v20) != 24 ) { sub_5D7110(v1, v34, v35, v36, v37); sub_5D71B0(v1, 0.0, 0.0, 0.0, 0.0); sub_633040((char *)&dword_AD46F0); LOBYTE(v3) = sub_5A3690(v1, 0); v23 = v1[106]; if ( v23 ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v23 + 472))(&unk_9DAE24); LOBYTE(v3) = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v1[106] + 256))(v1[106], 0); } return v3; } sub_5D7110(v1, v34, v35, v36, v37); sub_5D71B0(v1, 0.0, 0.0, 0.0, 0.0); v3 = sub_53D9E0(v22); if ( !v3 ) return v3; v24 = *v1; v25 = *(_DWORD *)(v3 + 34); v26 = sub_42BF30(v3 + 38); (*(void (__thiscall **)(int *, int, int, signed int, signed int))(v24 + 584))(v1, v26, v25, 32, 32); v40 = (*(int (__thiscall **)(int))(*(_DWORD *)v20 + 12))(v20); if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v20 + 16))(v20) <= 1 ) { v30 = v1[106]; if ( v30 ) { (*(void (__stdcall **)(void *, int))(*(_DWORD *)v30 + 472))(&unk_9DAE25, v38); (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v1[106] + 256))(0); } } else { v27 = (int *)v1[106]; if ( v27 ) { v28 = *v27; v29 = sub_7549E0("%d", v40); (*(void (__thiscall **)(int, char *))(v28 + 472))(v1[106], v29); (*(void (__cdecl **)(signed int))(*(_DWORD *)v1[106] + 256))(1); } } v31 = (__int16 *)sub_438F10((void *)(*(_DWORD *)(v20 + 112) + 310)); if ( v31 ) sub_5D3290(v1, *v31); } LABEL_41: LOBYTE(v3) = sub_5D7080(v1, 0); return v3; } v3 = v1[103]; if ( !v3 ) goto LABEL_41; v5 = *(unsigned __int16 *)(v3 + 12); LOBYTE(v3) = -1; if ( (_WORD)v5 != -1 ) { sub_5D7110(v1, 0.0, 0.0, 0.0, 0.0); sub_5D71B0(v1, 0.0, 0.0, 0.0, 0.0); v3 = sub_53D9E0(v5); if ( v3 ) { v6 = *v1; v7 = *(_DWORD *)(v3 + 34); v8 = sub_42BF30(v3 + 38); (*(void (__thiscall **)(int *, int, int, signed int, signed int))(v6 + 584))(v1, v8, v7, 32, 32); v9 = (_DWORD *)sub_685510(&byte_ADA230, v5); v39 = sub_685590(&byte_ADA230, v5); if ( v9 ) { if ( (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v9 + 16))(v9) <= 1 ) { v13 = v1[106]; if ( v13 ) { (*(void (__stdcall **)(void *, int))(*(_DWORD *)v13 + 472))(&unk_9DAE1F, v38); (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v1[106] + 256))(0); } } else { v10 = (int *)v1[106]; if ( v10 ) { v11 = *v10; v12 = sub_7549E0("%d", v39); (*(void (__thiscall **)(int, char *))(v11 + 472))(v1[106], v12); (*(void (__cdecl **)(signed int))(*(_DWORD *)v1[106] + 256))(1); } } v14 = (__int16 *)sub_438F10((void *)(v9[28] + 310)); if ( v14 ) { sub_5D3290(v1, *v14); } else { sub_4019E0(&v41, (void *)(v9[28] + 310)); v42 = 0; sub_4A3E90((int)&v41, (unsigned __int8 *)&unk_9DAE20); v15 = sub_4B1600(v5); if ( v15 ) { v16 = (__int16 *)sub_5A5F90(*(unsigned __int16 *)(v15 + 2)); sub_5D32D0(v1, *v16); } v42 = -1; sub_636A10(&v41); } } else { v17 = v1[106]; if ( v17 ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v17 + 472))(&unk_9DAE22); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[106] + 256))(0); } } goto LABEL_41; } } return v3; } // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; //----- (005A2DA0) -------------------------------------------------------- char __thiscall sub_5A2DA0(_DWORD *this, _DWORD *a2, unsigned int a3) { int v3; // eax rsize_t v4; // ebx _DWORD *v5; // edi int v6; // eax int v7; // edi _DWORD *v8; // ebx int v9; // eax _WORD *v10; // eax unsigned int v11; // edx _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // edi _DWORD *v17; // eax _DWORD *v18; // edi int v19; // ST38_4 int v20; // eax int v21; // ecx _DWORD *v22; // eax _DWORD *v23; // eax int v24; // eax int v25; // edi void (__thiscall *v26)(int); // eax int v27; // ecx unsigned __int8 (__thiscall *v28)(int); // eax rsize_t v29; // esi int v30; // ecx _DWORD *v31; // eax unsigned int v32; // ecx _DWORD *v33; // eax _DWORD *v34; // esi const CHAR *v35; // eax int v36; // eax _DWORD *v37; // eax _DWORD *v38; // eax __int16 v39; // dx unsigned int v40; // ST34_4 int *v41; // eax _DWORD *v42; // eax int v43; // ebx int v44; // ecx int v45; // edi unsigned int v46; // eax int v47; // eax int v48; // eax int v49; // esi int v50; // eax _DWORD *v51; // eax _DWORD *v52; // ecx unsigned int v53; // [esp-8h] [ebp-43Ch] int v54; // [esp+0h] [ebp-434h] _DWORD *v55; // [esp+14h] [ebp-420h] void *v56; // [esp+18h] [ebp-41Ch] unsigned int v57; // [esp+1Ch] [ebp-418h] char v58; // [esp+20h] [ebp-414h] char v59; // [esp+21h] [ebp-413h] char v60; // [esp+120h] [ebp-314h] char v61; // [esp+121h] [ebp-313h] char v62; // [esp+220h] [ebp-214h] char v63; // [esp+221h] [ebp-213h] char v64; // [esp+320h] [ebp-114h] char v65; // [esp+321h] [ebp-113h] int *v66; // [esp+424h] [ebp-10h] int v67; // [esp+430h] [ebp-4h] v66 = &v54; v55 = this; v57 = a3; if ( !a2 ) return 0; v3 = a2[2]; if ( v3 ) { if ( v3 != 1 && v3 != 2 && v3 != 4 && v3 != 9 && v3 != 21 ) return 0; } v4 = a2[3]; switch ( a2[4] ) { case 0: if ( a2[6] == 1 ) return 0; if ( !v3 ) { v5 = (_DWORD *)a2[5]; if ( !v5 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v5 + 4))(a2[5]) == 27 ) { v6 = v5[28]; if ( !v6 ) return 0; if ( *(_DWORD *)(v6 + 98) == 1 ) { v7 = sub_4DDB30(); sub_6C2EC0((_DWORD *)v7, v4); v8 = v55; if ( v55 ) v9 = (int)(v55 + 58); else v9 = 0; (**(void (__thiscall ***)(int, int))(v7 + 8))(v7 + 8, v9); if ( !v8[275] ) { v10 = operator new(0x48u); if ( v10 ) { *(_DWORD *)v10 = &DropContents::`vftable'; v10[30] = -1; *((_DWORD *)v10 + 16) = 0; } else { v10 = 0; } v8[275] = v10; } v11 = v57; v8[275] = a2; v8[276] = v11; return 0; } } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v5 + 4))(v5) == 24 ) { v13 = operator new(0xCu); v56 = v13; v67 = 0; if ( v13 ) { v14 = sub_632230(v13); v14[2] = v4; } else { v14 = 0; MEMORY[8] = v4; } goto LABEL_104; } v15 = operator new(0x10u); v56 = v15; v67 = 1; LABEL_30: if ( v15 ) v16 = sub_6323E0(v15); else v16 = 0; v67 = -1; goto LABEL_34; } if ( v3 == 1 ) { v17 = operator new(0x10u); v56 = v17; v67 = 2; if ( v17 ) v18 = sub_6323E0(v17); else v18 = 0; v19 = a2[5]; v67 = -1; sub_6321C0(v18, v19); sub_5A5E70(&dword_AD46F0, (int)v18, v57, 1); } else { switch ( v3 ) { case 2: return 0; case 4: if ( v57 < 0x64 ) { v20 = dword_AD46F4[v57]; if ( v20 ) sub_5A5E70(&dword_AD46F0, v20, v4, 1); } v21 = a2[5]; if ( !v21 ) return 0; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v21 + 4))() != 24 ) { v15 = operator new(0x10u); v56 = v15; v67 = 4; goto LABEL_30; } v22 = operator new(0xCu); v56 = v22; v67 = 3; if ( v22 ) { v14 = sub_632230(v22); v14[2] = a2[14]; } else { v14 = 0; MEMORY[8] = a2[14]; } v53 = v4; break; case 21: v23 = operator new(0x14u); v56 = v23; v67 = 5; if ( v23 ) { v14 = sub_6322D0(v23); v14[4] = a2[7]; v14[3] = 0; } else { v14 = 0; MEMORY[0x10] = a2[7]; MEMORY[0xC] = 0; } LABEL_103: v14[2] = a2[12]; LABEL_104: v53 = v57; break; default: goto LABEL_107; } v67 = -1; LABEL_106: sub_5A5E70(&dword_AD46F0, (int)v14, v53, 1); } LABEL_107: v52 = (_DWORD *)v55[74]; if ( v52 ) sub_8EEE70(v52, 139, 0, 0); sub_6BA650(&dword_AB6520, 4); return 1; case 1: if ( v3 == 4 && v57 < 0x64 ) { v36 = dword_AD46F4[v57]; if ( v36 ) sub_5A5E70(&dword_AD46F0, v36, v4, 1); } v37 = operator new(0xCu); v56 = v37; v67 = 10; if ( v37 ) v38 = sub_632280(v37); else v38 = 0; v39 = *((_WORD *)a2 + 10); v40 = v57; v67 = -1; *((_WORD *)v38 + 4) = v39; sub_5A5E70(&dword_AD46F0, (int)v38, v40, 1); v41 = sub_4966F0(); sub_6D0E30((_DWORD **)v41); *((_BYTE *)sub_4388B0() + 10) = 1; v42 = sub_6CD770(); sub_74AFF0(v42, 9); v43 = sub_49FBB0(a2[5]); v44 = v55[278]; v45 = 0; v46 = (v55[279] - v44) >> 1; if ( !v46 ) goto LABEL_107; if ( v46 <= 0 ) std::_Xout_of_range("invalid vector subscript"); while ( 1 ) { v47 = *(unsigned __int16 *)(v44 + 2 * v45); if ( (_WORD)v47 != -1 ) { v48 = sub_49FBB0(v47); v49 = v48; if ( v43 ) { if ( v48 ) { v64 = 0; memset(&v65, 0, 0xFFu); v60 = 0; memset(&v61, 0, 0xFFu); v62 = 0; memset(&v63, 0, 0xFFu); v58 = 0; memset(&v59, 0, 0xFFu); sprintf(&v64, "%s", v43 + 2); strncpy(&v60, &v64, strlen(&v64) - 2); sprintf(&v62, "%s", v49 + 2); strncpy(&v58, &v62, strlen(&v62) - 2); if ( !strcmp(&v60, &v58) ) break; } } } v44 = v55[278]; if ( (v55[279] - v44) >> 1 <= (unsigned int)++v45 ) goto LABEL_107; } if ( v57 <= 0x12 ) sub_5A1710(v55[v57 + 88]); else sub_5A1710(v55[v57 + 70]); goto LABEL_107; case 3: if ( v3 == 4 && v57 < 0x64 ) { v50 = dword_AD46F4[v57]; if ( v50 ) sub_5A5E70(&dword_AD46F0, v50, v4, 1); } v51 = operator new(0x14u); v56 = v51; v67 = 11; if ( v51 ) v14 = sub_6322D0(v51); else v14 = 0; v14[4] = a2[5]; v14[3] = a2[3]; goto LABEL_103; case 6: if ( a2[6] == 1 || v3 != 4 ) return 0; if ( v57 < 0x64 ) { v24 = dword_AD46F4[v57]; if ( v24 ) sub_5A5E70(&dword_AD46F0, v24, v4, 1); } v25 = a2[5]; if ( !v25 ) { v34 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v34 ) { v35 = sub_40C190(-1261178346); sub_492060(v34, (int)v35); } return 0; } v26 = *(void (__thiscall **)(int))(*(_DWORD *)v25 + 4); v27 = a2[5]; v67 = 6; v26(v27); v28 = *(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v25 + 4); v67 = -1; if ( v28(v25) != 24 ) { v33 = operator new(0x10u); v56 = v33; v67 = 9; if ( v33 ) v16 = sub_6323E0(v33); else v16 = 0; v67 = -1; LABEL_34: sub_6321C0(v16, a2[5]); sub_5A5E70(&dword_AD46F0, (int)v16, v57, 1); goto LABEL_107; } v29 = a2[14]; if ( v29 < 0xC0 ) { v30 = dword_ADA234[v29]; if ( v30 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v30 + 4))() == 24 ) { v31 = operator new(0xCu); v56 = v31; v67 = 8; if ( v31 ) { v14 = sub_632230(v31); v32 = v57; v67 = -1; v14[2] = v29; v53 = v32; } else { v14 = 0; v67 = -1; MEMORY[8] = v29; v53 = v57; } goto LABEL_106; } } } return 0; default: goto LABEL_107; } } // 9ACB60: using guessed type void *DropContents::`vftable'; // AD46F0: using guessed type int dword_AD46F0; //----- (005A3560) -------------------------------------------------------- int __thiscall sub_5A3560(int *this) { int *v1; // esi int v2; // ecx int result; // eax v1 = this; v2 = this[103]; if ( v2 ) { switch ( (*(int (**)(void))(*(_DWORD *)v2 + 4))() ) { case 0: case 4: case 5: sub_5A28B0(v1); sub_5D8230((_DWORD **)v1); break; case 1: sub_5A0640(v1); sub_5D80B0((_DWORD **)v1); break; case 2: sub_5A06D0(v1); sub_5D8230((_DWORD **)v1); break; case 3: sub_5A0640(v1); break; default: break; } (*(void (__thiscall **)(int *, signed int))(*v1 + 256))(v1, 1); result = (*(int (__thiscall **)(int *, signed int))(*v1 + 240))(v1, 1); } else { (*(void (__thiscall **)(int *, _DWORD))(*v1 + 600))(v1, 0); (*(void (__thiscall **)(int *, _DWORD))(*v1 + 256))(v1, 0); result = (*(int (__thiscall **)(int *, _DWORD))(*v1 + 240))(v1, 0); } return result; } //----- (005A3620) -------------------------------------------------------- char __thiscall sub_5A3620(int this, int a2, int a3, int a4) { int v4; // esi char result; // al _DWORD *v6; // edi _DWORD *v7; // eax v4 = this; if ( *(_BYTE *)(this + 420) || !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); v7 = (_DWORD *)sub_402BF0((_DWORD *)this); if ( v7 && v6 && (unsigned int)(*(_DWORD *)(v4 + 416) + 18 * v7[87] + 1) <= 0x65 ) result = sub_5A2DA0(v7, v6, *(_DWORD *)(v4 + 416) + 18 * v7[87]); else result = 0; return result; } //----- (005A3690) -------------------------------------------------------- char __thiscall sub_5A3690(int *this, int a2) { int *v2; // edi int v3; // esi int v4; // eax int v5; // ecx int v6; // edi int v7; // ebx int v8; // esi bool v9; // cf v2 = this; v3 = this[103]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[103] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } LOBYTE(v4) = sub_5A3560(v2); v5 = v2[103]; if ( v5 ) { v4 = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( v4 == 2 ) { v6 = v2[103]; if ( v6 ) { v4 = sub_4B0DC0(*(_DWORD *)(v6 + 8)); v7 = v4; if ( v4 ) { if ( *(_DWORD *)(v4 + 101) == 2 ) { v8 = 0; v9 = 1; do { if ( v9 ) { v4 = dword_ADB1FC[v8]; if ( v4 ) { v4 = *(_DWORD *)(v4 + 112); if ( !v4 ) return v4; v4 = strcmp((const char *)(v4 + 2), (const char *)(v7 + 1)); if ( !v4 ) LOBYTE(v4) = sub_6329D0((char *)&dword_AD46F0, *(_DWORD *)(v6 + 8), v8); } } v9 = (unsigned int)++v8 < 0x2A; } while ( v8 < 42 ); } } } } } return v4; } // AD46F0: using guessed type int dword_AD46F0; //----- (005A3790) -------------------------------------------------------- unsigned int __thiscall sub_5A3790(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int *v3; // ebx unsigned int v4; // eax int v5; // eax unsigned int v6; // eax int *v7; // esi unsigned int result; // eax unsigned __int16 v9; // ax int v10; // eax int v11; // ecx unsigned int v12; // ebx int v13; // eax int v14; // eax int v15; // esi int v16; // eax int v17; // eax int v18; // esi int v19; // ebx int v20; // ecx int v21; // ST54_4 int v22; // eax int v23; // ecx int v24; // ebx int v25; // eax int v26; // ebx int v27; // eax void (__stdcall *v28)(signed int); // edx int v29; // ebx int v30; // eax int v31; // ebx int v32; // ebx int v33; // eax void (__stdcall *v34)(signed int); // edx int v35; // ST54_4 int v36; // eax int v37; // ecx int v38; // ebx int v39; // eax int v40; // ebx int v41; // eax void (__stdcall *v42)(signed int); // edx int v43; // ebx int v44; // eax int v45; // ebx int v46; // ebx int v47; // eax void (__stdcall *v48)(signed int); // edx int *v49; // eax int v50; // esi int v51; // ST54_4 int v52; // ebx int v53; // eax int v54; // eax int *v55; // eax int v56; // esi int v57; // ST54_4 int v58; // ebx int v59; // eax int v60; // eax _DWORD *v61; // ecx int v62; // esi int v63; // ebx int v64; // ST54_4 int v65; // eax int v66; // eax _DWORD *v67; // ecx int v68; // ebx int v69; // ST54_4 int v70; // eax float v71; // ST54_4 int *v72; // [esp+44h] [ebp-414h] unsigned int v73; // [esp+48h] [ebp-410h] unsigned int v74; // [esp+48h] [ebp-410h] char v75; // [esp+4Fh] [ebp-409h] int v76; // [esp+50h] [ebp-408h] char v77; // [esp+54h] [ebp-404h] char v78; // [esp+55h] [ebp-403h] char v79; // [esp+154h] [ebp-304h] char v80; // [esp+155h] [ebp-303h] char v81; // [esp+254h] [ebp-204h] char v82; // [esp+255h] [ebp-203h] char v83; // [esp+354h] [ebp-104h] char v84; // [esp+355h] [ebp-103h] v1 = this; v2 = 0; v3 = this + 88; v73 = 0; v72 = this + 88; do { if ( *v3 ) sub_5D77C0(*v3, 0); v4 = v2 + 18 * v1[87]; if ( v4 < 0x64 ) v5 = dword_AD46F4[v4]; else v5 = 0; sub_5A3690((int *)*v3, v5); v6 = v2 + 18 * v1[87]; if ( v6 < 0x64 && (v7 = (int *)dword_AD46F4[v6]) != 0 ) { result = (*(int (__thiscall **)(int *))(*v7 + 4))(v7); switch ( result ) { case 0u: case 4u: result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(9); break; case 1u: result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(4); if ( *((_BYTE *)v1 + 1108) ) { if ( *((_BYTE *)v1 + 1094) ) { v9 = sub_5D6F80((_WORD *)*v72); v10 = sub_49FBB0(v9); v11 = v1[278]; v76 = v10; v12 = 0; result = (v1[279] - v11) >> 1; if ( result ) { if ( result <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { v13 = *(unsigned __int16 *)(v11 + 2 * v12); if ( (_WORD)v13 != -1 ) { v14 = sub_49FBB0(v13); v15 = v14; if ( v76 ) { if ( v14 ) { v83 = 0; memset(&v84, 0, 0xFFu); v79 = 0; memset(&v80, 0, 0xFFu); v81 = 0; memset(&v82, 0, 0xFFu); v77 = 0; memset(&v78, 0, 0xFFu); sprintf(&v83, "%s", v76 + 2); strncpy(&v79, &v83, strlen(&v83) - 2); sprintf(&v81, "%s", v15 + 2); strncpy(&v77, &v81, strlen(&v81) - 2); if ( !strcmp(&v79, &v77) ) sub_5A1710(*v72); } } } v11 = v1[278]; ++v12; result = (v1[279] - v11) >> 1; } while ( result > v12 ); } } } break; case 2u: result = sub_4B0DC0(v7[2]); if ( result ) { v16 = *(_DWORD *)(result + 101); if ( v16 ) { v17 = v16 - 1; if ( v17 ) { result = v17 - 1; if ( !result ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(11); } else { result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(8); } } else { result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(7); } } break; case 5u: result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(10); break; default: break; } } else { result = (*(int (__stdcall **)(signed int))(*(_DWORD *)*v3 + 560))(4); } v2 = v73 + 1; v3 = v72 + 1; v73 = v2; ++v72; } while ( v2 < 0x12 ); if ( v1[170] ) { if ( *((_BYTE *)v1 + 1094) ) *((_BYTE *)&dword_B92038 + 3 * v1[173] + 1) = *((_BYTE *)v1 + 348); v75 = 0; v74 = 0; v18 = (int)(v1 + 88); do { v19 = *(_DWORD *)(v18 + 352); v20 = v1[170]; if ( *((_BYTE *)v1 + 344) ) { v21 = (*(int (**)(void))(*(_DWORD *)v20 + 168))() - 3; v22 = (*(int (__thiscall **)(int))(*(_DWORD *)v19 + 168))(v19); v23 = *(_DWORD *)(v18 + 352); if ( v22 <= v21 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v23 + 256))(1); if ( *(_DWORD *)(v18 + 652) && *((_BYTE *)v1 + v74 + 1076) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 652) + 256))(1); if ( *(_DWORD *)(v18 + 568) && *((_BYTE *)v1 + v74 + 1076) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 568) + 256))(1); *(_BYTE *)(*(_DWORD *)v18 + 420) = 0; if ( *(_DWORD *)(*(_DWORD *)v18 + 412) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)v18 + 256))(1); *(_WORD *)(*(_DWORD *)v18 + 28) &= 0xFFFEu; sub_5D3170(*(_DWORD *)v18, 1); *(_BYTE *)(*(_DWORD *)(v18 + 72) + 304) = 1; } (*(void (__stdcall **)(signed int))(**(_DWORD **)v18 + 240))(1); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v23 + 256))(0); if ( *(_DWORD *)(v18 + 652) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 + 652) + 256))(0); if ( *(_DWORD *)(v18 + 568) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 + 568) + 256))(0); *(_BYTE *)(*(_DWORD *)v18 + 420) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 256))(0); sub_5D3170(*(_DWORD *)v18, 0); *(_BYTE *)(*(_DWORD *)(v18 + 72) + 304) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 240))(0); if ( !v75 ) { v75 = 1; if ( *((_BYTE *)v1 + 1094) ) *((_BYTE *)&dword_B92038 + 3 * v1[173]) = v74; } } v24 = *(_DWORD *)(v18 + 496); v25 = (*(int (**)(void))(**(_DWORD **)(v18 + 352) + 168))(); v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v24 + 148))(v24) + v25; v27 = (*(int (**)(void))(*(_DWORD *)v1[170] + 168))(); v28 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 424) + 256); if ( v26 <= v27 ) v28(1); else v28(0); v29 = *(_DWORD *)(v18 + 496); v30 = (*(int (**)(void))(**(_DWORD **)(v18 + 424) + 148))(); v31 = (*(int (__thiscall **)(int))(*(_DWORD *)v29 + 148))(v29) + v30; v32 = (*(int (**)(void))(**(_DWORD **)(v18 + 352) + 168))() + v31; v33 = (*(int (**)(void))(*(_DWORD *)v1[170] + 168))(); v34 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 496) + 256); if ( v32 <= v33 ) v34(1); else v34(0); } else { v35 = (*(int (**)(void))(*(_DWORD *)v20 + 164))() - 3; v36 = (*(int (__thiscall **)(int))(*(_DWORD *)v19 + 164))(v19); v37 = *(_DWORD *)(v18 + 352); if ( v36 <= v35 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v37 + 256))(1); *(_BYTE *)(*(_DWORD *)v18 + 420) = 0; *(_WORD *)(*(_DWORD *)v18 + 28) &= 0xFFFEu; if ( *(_DWORD *)(*(_DWORD *)v18 + 412) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)v18 + 256))(1); sub_5D3170(*(_DWORD *)v18, 1); *(_BYTE *)(*(_DWORD *)(v18 + 72) + 304) = 1; } (*(void (__stdcall **)(signed int))(**(_DWORD **)v18 + 240))(1); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v37 + 256))(0); *(_BYTE *)(*(_DWORD *)v18 + 420) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 256))(0); sub_5D3170(*(_DWORD *)v18, 0); *(_BYTE *)(*(_DWORD *)(v18 + 72) + 304) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 240))(0); if ( !v75 ) { v75 = 1; if ( *((_BYTE *)v1 + 1094) ) *((_BYTE *)&dword_B92038 + 3 * v1[173]) = v74; } } v38 = *(_DWORD *)(v18 + 352); v39 = (*(int (**)(void))(**(_DWORD **)(v18 + 496) + 144))(); v40 = (*(int (__thiscall **)(int))(*(_DWORD *)v38 + 164))(v38) + v39; v41 = (*(int (**)(void))(*(_DWORD *)v1[170] + 164))(); v42 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 424) + 256); if ( v40 <= v41 - 3 ) { v42(1); if ( *(_DWORD *)(v18 + 652) && *((_BYTE *)v1 + v74 + 1076) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 652) + 256))(1); } else { v42(0); if ( *(_DWORD *)(v18 + 652) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 + 652) + 256))(0); } v43 = *(_DWORD *)(v18 + 424); v44 = (*(int (**)(void))(**(_DWORD **)(v18 + 496) + 144))(); v45 = (*(int (__thiscall **)(int))(*(_DWORD *)v43 + 144))(v43) + v44; v46 = (*(int (**)(void))(**(_DWORD **)(v18 + 352) + 164))() + v45; v47 = (*(int (**)(void))(*(_DWORD *)v1[170] + 164))(); v48 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 496) + 256); if ( v46 <= v47 - 3 ) { v48(1); if ( *(_DWORD *)(v18 + 568) && *((_BYTE *)v1 + v74 + 1076) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v18 + 568) + 256))(1); } else { v48(0); if ( *(_DWORD *)(v18 + 568) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 + 568) + 256))(0); } } v18 += 4; ++v74; } while ( v74 < 0x12 ); if ( *((_BYTE *)v1 + 344) ) { v49 = (int *)v1[171]; if ( v49 ) { v50 = *v49; v51 = v49[83]; v52 = v1[171]; v53 = (*(int (**)(void))(*(_DWORD *)v1[170] + 168))(); v54 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v52 + 164))(v52, v51 + v53); (*(void (__thiscall **)(_DWORD, int))(v50 + 308))(v1[171], v54); } v55 = (int *)v1[172]; if ( !v55 ) goto LABEL_91; v56 = *v55; v57 = v55[83]; v58 = v1[172]; v59 = (*(int (**)(void))(*(_DWORD *)v1[170] + 168))(); v60 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v58 + 164))(v58, v57 + v59); } else { if ( v1[171] ) { v61 = (_DWORD *)v1[171]; v62 = *v61; v63 = v1[170]; v64 = v61[82]; v65 = (*(int (**)(void))(*v61 + 168))(); v66 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v63 + 164))(v63, v65); (*(void (__thiscall **)(_DWORD, int))(v62 + 308))(v1[171], v64 + v66); } if ( !v1[172] ) goto LABEL_91; v67 = (_DWORD *)v1[172]; v56 = *v67; v68 = v1[170]; v69 = v67[82]; v70 = (*(int (**)(void))(*v67 + 168))(); v60 = v69 + (*(int (__thiscall **)(int, int))(*(_DWORD *)v68 + 164))(v68, v70); } (*(void (__thiscall **)(_DWORD, int))(v56 + 308))(v1[172], v60); LABEL_91: v71 = flt_ACCFCC; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 324))(v1, LODWORD(flt_ACCFCC)); result = sub_5A5EF0(v1, v71); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; // B92038: using guessed type int dword_B92038; //----- (005A4140) -------------------------------------------------------- void __thiscall sub_5A4140(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx unsigned int v4; // eax int v5; // ecx unsigned int v6; // ebx int v7; // eax int v8; // esi int v9; // esi unsigned int v10; // [esp+8h] [ebp-108h] void (__stdcall ***v11)(signed int); // [esp+8h] [ebp-108h] CHAR OutputString; // [esp+Ch] [ebp-104h] char v13; // [esp+Dh] [ebp-103h] v2 = this; if ( !*(_BYTE *)(this[170] + 336) ) { v3 = *(_DWORD **)(this[a2 + 88] + 412); if ( v3 ) { this[154] = 4; this[150] = this; if ( (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3) == 2 ) { v2[164] = v3[2]; } else if ( (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3) != 4 && (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3) == 5 ) { v4 = v3[2]; v10 = v4; if ( v4 >= 0xC0 ) return; v5 = dword_ADA234[v4]; if ( !v5 ) return; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v5 + 4))() == 24 ) { v2[154] = 4; v2[165] = 4; v2[166] = v10; } } if ( sub_5A0F80(v2, (int)v3, a2 + 18 * v2[87]) == 1 ) dword_BA6BCC = (int)(v2 + 148); sub_5A3690((int *)v2[a2 + 88], 0); v6 = a2 + 18 * v2[87]; if ( v6 < 0x64 ) { v7 = dword_AD46F4[v6]; v11 = (void (__stdcall ***)(signed int))v7; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v11 ) (**v11)(1); dword_AD46F4[v6] = 0; } byte_AD488A = 1; sub_632F20(&dword_AD46F0, v6); } sub_5A3790(v2); OutputString = 0; memset(&v13, 0, 0xFFu); sprintf(&OutputString, "OnCmdShortCutLClick : POS = %d\n", a2); OutputDebugStringA(&OutputString); if ( a2 <= 0x12 ) { sub_5D8320((_WORD *)v2[a2 + 88], 0xFFFF); v8 = v2[a2 + 88]; } else { sub_5D8320((_WORD *)v2[a2 + 70], 0xFFFF); v8 = v2[a2 + 70]; } if ( *(_BYTE *)(v8 + 438) ) { if ( *(_DWORD *)(v8 + 432) ) { v9 = *(_DWORD *)(v8 + 432); if ( v9 ) { if ( *(_BYTE *)(v9 + 64) ) *(_BYTE *)(v9 + 65) = 0; } } } } } } // AD46F0: using guessed type int dword_AD46F0; // AD488A: using guessed type char byte_AD488A; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005A4360) -------------------------------------------------------- char __thiscall sub_5A4360(void *this, int a2, int *a3, volatile LONG *a4, int a5) { int v5; // esi int v6; // ST34_4 volatile LONG **v7; // eax char v8; // al volatile LONG **v10; // eax int v11; // ebx int v12; // eax int v13; // eax int v14; // ST44_4 char *v15; // eax int v16; // ST44_4 char *v17; // eax int *v18; // edi volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG *v25; // eax int v26; // eax void (__thiscall ***v27)(_DWORD, signed int); // ebx int v28; // eax float *v29; // eax volatile LONG **v30; // eax int v31; // edx int v32; // ebx int v33; // eax int (__thiscall *v34)(int); // edx int v35; // eax int v36; // ebx volatile LONG *v37; // eax volatile LONG **v38; // eax volatile LONG *v39; // eax int v40; // eax int *v41; // edi int v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax int v45; // ecx int v46; // eax volatile LONG **v47; // eax int v48; // ecx volatile LONG *v49; // eax int v50; // edx int v51; // ecx int v52; // edx int v53; // eax const char *v54; // eax volatile LONG **v55; // eax volatile LONG *v56; // eax int v57; // ecx int v58; // ecx int v59; // eax volatile LONG **v60; // eax int v61; // edx volatile LONG *v62; // eax int v63; // edx int v64; // ecx int v65; // eax int v66; // ebx const char *v67; // eax volatile LONG *v68; // ebx volatile LONG **v69; // eax volatile LONG **v70; // eax volatile LONG **v71; // eax int v72; // eax volatile LONG *v73; // eax int v74; // eax volatile LONG *v75; // ebx int v76; // edi int v77; // eax int v78; // eax bool v79; // zf int v80; // edi int v81; // eax int v82; // [esp+48h] [ebp-74h] int v83; // [esp+4Ch] [ebp-70h] int v84; // [esp+50h] [ebp-6Ch] int v85; // [esp+54h] [ebp-68h] char v86; // [esp+58h] [ebp-64h] int v87; // [esp+5Ch] [ebp-60h] char v88; // [esp+60h] [ebp-5Ch] int v89; // [esp+64h] [ebp-58h] int *v90; // [esp+68h] [ebp-54h] int v91; // [esp+6Ch] [ebp-50h] int v92; // [esp+70h] [ebp-4Ch] int v93; // [esp+74h] [ebp-48h] volatile LONG *v94; // [esp+78h] [ebp-44h] void *v95; // [esp+7Ch] [ebp-40h] int v96; // [esp+80h] [ebp-3Ch] int v97; // [esp+84h] [ebp-38h] int v98; // [esp+88h] [ebp-34h] char v99; // [esp+8Ch] [ebp-30h] int v100; // [esp+B8h] [ebp-4h] v5 = (int)this; v96 = a2; v6 = *a3; v90 = a3; v94 = a4; v7 = sub_8FB140(v6, (int)"Frame01", (int)&v97, (int)&v98, a4); if ( *(_BYTE *)(v5 + 345) ) v8 = sub_8F1440((volatile LONG **)v5, 0, 0, (int)v7, 0, v96, (int)"ShortCutHorizontalWin", 0); else v8 = sub_8F1440((volatile LONG **)v5, 0, 0, (int)v7, 0, v96, (int)"ShortCutHorizontalSubWin", 0); if ( !v8 ) return 0; v10 = sub_8FB140(*a3, (int)"Panel01", (int)&v97, (int)&v98, a4); sub_8F3EB0(v97, v98, (int)v10, v5, 0, 0); sub_8F71E0(*a3, (int)"Panel01", &v86, &v88, &v92, &v93); v11 = v97 + v92; v12 = *a3; v89 = v97 + v92; sub_8F71E0(v12, (int)"QSlot01_1", &v86, &v88, &v87, &v93); *(_DWORD *)(v5 + 696) = v87; sub_8F71E0(*a3, (int)"QSlot01_2", &v86, &v88, &v85, &v93); *(_DWORD *)(v5 + 696) += v85; sub_8F71E0(*a3, (int)"QSlot01_3", &v86, &v88, &v82, &v93); *(_DWORD *)(v5 + 696) += v82; v13 = sub_43D0D0(0xEu); *(_DWORD *)(v5 + 1000) = v13; if ( !v13 ) return 0; v96 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v14 = v96; v15 = (char *)sub_401410(byte_ACAB50, "Game\\MainNumber.nif"); sub_8F66B0(v15, v5 + 992, v14); if ( !*(_DWORD *)(v5 + 992) ) return 0; v96 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v16 = v96; v17 = (char *)sub_401410(byte_ACAB50, "Game\\MainNumber.nif"); sub_8F66B0(v17, v5 + 996, v16); if ( !*(_DWORD *)(v5 + 996) ) return 0; v96 = 0; v18 = (int *)(v5 + 352); do { v19 = sub_8FB140(*v90, (int)"QSlot01_1", (int)&v97, (int)&v98, v94); v20 = sub_8F3EB0(v11, v98, (int)v19, v5, 0, 0); v18[88] = (int)v20; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(*v90, (int)"QSlot01_2", (int)&v97, (int)&v98, v94); v22 = sub_8F3EB0(v87, 0, (int)v21, v18[88], 0, 0); v18[106] = (int)v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v23 = sub_8FB140(*v90, (int)"QSlot01_3", (int)&v97, (int)&v98, v94); v24 = sub_8F3EB0(v87 + v85, 0, (int)v23, v18[88], 0, 0); v18[124] = (int)v24; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v25 = sub_5A1BB0(v11 + 3, v98 + 4, v96, v5); *v18 = (int)v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 516))(v25, 3); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v18 + 560))(4); *(_DWORD *)(*v18 + 304) = 1; sub_5A3690((int *)*v18, 0); sub_5D3170(*v18, 1); v26 = sub_4FD5C0(v11 + 2, v98 + 4, v5); v18[18] = v26; *(_WORD *)(v26 + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18[18] + 240))(0); v27 = sub_6AAFB0(&unk_B91250, "WeaponTitle"); if ( v27 ) { v95 = operator new(0x44u); v100 = 0; if ( v95 ) { v28 = sub_85BD60(v27); v29 = sub_6B0A90((float *)v95, v28); v100 = -1; v18[41] = (int)v29; } else { v100 = -1; v18[41] = 0; } } else { v18[41] = 0; } v30 = sub_8FB140(*(_DWORD *)(v5 + 992), (int)"ShiftPlus", (int)&v97, (int)&v98, *(volatile LONG **)(v5 + 1000)); v31 = *(_DWORD *)v18[88]; v32 = v18[106]; v95 = v30; v33 = (*(int (**)(void))(v31 + 144))(); v34 = *(int (__thiscall **)(int))(*(_DWORD *)v32 + 144); v91 = v33; v35 = v34(v32); v36 = v89; v91 += v35 + 3; v37 = sub_8F3EB0(v89 + 5, v98 + 4, (int)v95, v5, 0, 0); v18[163] = (int)v37; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v38 = sub_8FB140(*(_DWORD *)(v5 + 992), (int)"48", (int)&v97, (int)&v98, *(volatile LONG **)(v5 + 1000)); v39 = sub_8F3EB0(v91 + v36 - 7, v98 + 4, (int)v38, v5, 0, 0); v18[142] = (int)v39; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v11 = *(_DWORD *)(v5 + 696) + v36; v40 = v96; v89 = v11; if ( v96 > 11 ) { sub_5A1160((_DWORD *)v5, v96, (int)"SmallNumTrans02"); sub_5A12E0((_DWORD *)v5, v96, (int)"SmallNumTrans01"); v40 = v96; } ++v18; v96 = v40 + 1; } while ( v40 + 1 < 18 ); v41 = v90; v42 = *v90; if ( *(_BYTE *)(v5 + 345) ) { v43 = sub_8FB140(v42, (int)"MovePanelBtn01", (int)&v97, (int)&v98, v94); v44 = sub_910CB0(v11, v98, (int)v43, v5, 0, 0, 0); v45 = v98; *(_DWORD *)(v5 + 680) = v44; *((_DWORD *)v44 + 86) = v45; *((_DWORD *)v44 + 85) = v11; v46 = *(_DWORD *)(v5 + 680); *(_DWORD *)(v46 + 352) = v98; *(_DWORD *)(v46 + 348) = v11; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 324) = 1; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 325) = 0; sub_8F71E0(*v41, (int)"SubPanelBtnNor01", &v91, &v89, &v92, &v93); v47 = sub_8FB140(*v41, (int)"SubPanelBtnNor01", (int)&v97, (int)&v98, v94); v48 = *v41; v95 = v47; sub_8FB650(v47, v48, (int)"SubPanelBtnNor01"); sub_8FB650(v95, *v41, (int)"SubPanelBtnOver01"); v49 = sub_910CB0(v11 + v97, v98, (int)v95, v5, 6, 0, 0); v50 = v97; v51 = v98; *(_DWORD *)(v5 + 688) = v49; *((_DWORD *)v49 + 85) = v11 + v50; *((_DWORD *)v49 + 86) = v51; v52 = v97; v53 = *(_DWORD *)(v5 + 688); *(_DWORD *)(v53 + 352) = v98; *(_DWORD *)(v53 + 348) = v11 + v52; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 328) = v91; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 332) = v89; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 272) = dword_AD01E8; v54 = sub_40A910(1721402025); sub_8F2EA0(*(void ***)(v5 + 688), v54); } else { v55 = sub_8FB140(v42, (int)"MovePanel01", (int)&v97, (int)&v98, v94); v56 = sub_910CB0(v11, v98, (int)v55, v5, 0, 0, 0); v57 = v98; *(_DWORD *)(v5 + 680) = v56; *((_DWORD *)v56 + 85) = v11; *((_DWORD *)v56 + 86) = v57; v58 = v98; v59 = *(_DWORD *)(v5 + 680); *(_DWORD *)(v59 + 348) = v11; *(_DWORD *)(v59 + 352) = v58; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 324) = 1; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 325) = 0; } sub_8F71E0(*v41, (int)"PanelTurnBtnNor01", &v84, &v83, &v92, &v93); v60 = sub_8FB140(*v41, (int)"PanelTurnBtnNor01", (int)&v97, (int)&v98, v94); v61 = *v41; v95 = v60; sub_8FB650(v60, v61, (int)"PanelTurnBtnNor01"); sub_8FB650(v95, *v41, (int)"PanelTurnBtnOver01"); v62 = sub_910CB0(v11 + v97, v98, (int)v95, v5, 5, 0, 0); v63 = v97; v64 = v98; *(_DWORD *)(v5 + 684) = v62; *((_DWORD *)v62 + 86) = v64; *((_DWORD *)v62 + 85) = v11 + v63; v65 = *(_DWORD *)(v5 + 684); v66 = v97 + v11; *(_DWORD *)(v65 + 352) = v98; *(_DWORD *)(v65 + 348) = v66; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 328) = v84; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 332) = v83; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 272) = dword_AD01E8; v67 = sub_40A910(-1348828937); sub_8F2EA0(*(void ***)(v5 + 684), v67); v68 = v94; v69 = sub_8FB140(*v41, (int)"PrePanelNor01", (int)&v97, (int)&v98, v94); sub_8FE0F0(v97, v98, (int)v69, v5, 1, 0, 0); v70 = sub_8FB140(*v41, (int)"NextPanelNor01", (int)&v97, (int)&v98, v68); sub_8FE0F0(v97, v98, (int)v70, v5, 2, 0, 0); if ( !sub_8F71E0(*v41, (int)"PageNum01", &v97, &v98, &v92, &v93) ) return 0; v71 = sub_8FB140(*v41, (int)"PageNum01", (int)&v97, (int)&v98, v68); sub_8F3EB0(v97, v98, (int)v71, v5, 0, 0); v72 = sub_421050(2); v73 = sub_8F4A20(v97, v98 + 2, v92, v93, v72, v5, 0, 0); *(_DWORD *)(v5 + 588) = v73; (*(void (__thiscall **)(volatile LONG *, signed int))(*v73 + 488))(v73, 1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v5 + 588) + 468))(&dword_AA8D98); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 588) + 240))(0); sprintf(&v99, "%u", *(_DWORD *)(v5 + 348) + 1); (*(void (__stdcall **)(char *))(**(_DWORD **)(v5 + 588) + 472))(&v99); if ( *(_BYTE *)(v5 + 345) ) { (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 236))(v5, xRight, dword_AC2F78); } else { (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 236))(v5, xRight, dword_AC2F78); v74 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5); v75 = *(volatile LONG **)v5; v76 = *(_DWORD *)(v5 + 1096) * v74; v77 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 168))(v5); v78 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 164))(v5, v77 - v76); (*((void (__thiscall **)(int, int))v75 + 77))(v5, v78); *(_DWORD *)(v5 + 348) = *(_DWORD *)(v5 + 1096) + 1; sub_5A0350((_DWORD *)v5); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 520))(v5, 1); v79 = *(_BYTE *)(v5 + 345) == 0; *(_DWORD *)(v5 + 692) = 0; if ( v79 ) *(_DWORD *)(v5 + 692) = *(_DWORD *)(v5 + 1096) + 1; v80 = **(_DWORD **)(v5 + 680); v81 = (*(int (**)(void))(**(_DWORD **)(v5 + 4 * *((unsigned __int8 *)&dword_B92038 + 3 * *(_DWORD *)(v5 + 692)) + 352) + 164))(); (*(void (__thiscall **)(_DWORD, int))(v80 + 172))(*(_DWORD *)(v5 + 680), v81 - 2); sub_5A3790((_DWORD *)v5); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // B92038: using guessed type int dword_B92038; //----- (005A4DA0) -------------------------------------------------------- char __thiscall sub_5A4DA0(void *this, int a2, int *a3, volatile LONG *a4, char a5) { int v5; // esi int v6; // ST34_4 volatile LONG **v7; // eax char v8; // al int v10; // eax volatile LONG **v11; // eax int v12; // eax int v13; // ST44_4 char *v14; // eax int v15; // ST44_4 char *v16; // eax int *v17; // edi volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // eax int v25; // eax int v26; // eax float *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax int v32; // eax int v33; // eax volatile LONG **v34; // eax int v35; // edi volatile LONG *v36; // eax int v37; // ecx int v38; // eax volatile LONG **v39; // eax int v40; // edx volatile LONG *v41; // eax int v42; // ecx int v43; // edx int v44; // ecx int v45; // eax const char *v46; // eax volatile LONG **v47; // eax volatile LONG *v48; // eax int v49; // ecx int v50; // eax volatile LONG **v51; // eax int v52; // edx volatile LONG *v53; // eax int v54; // edx int v55; // edi int v56; // eax const char *v57; // eax volatile LONG *v58; // edi volatile LONG **v59; // eax volatile LONG **v60; // eax volatile LONG **v61; // eax int v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // edi int v65; // eax volatile LONG *v66; // edi int v67; // eax int v68; // eax volatile LONG *v69; // ebx int v70; // edi int v71; // eax int v72; // edi int v73; // eax int v74; // [esp+48h] [ebp-70h] int v75; // [esp+4Ch] [ebp-6Ch] int v76; // [esp+50h] [ebp-68h] int v77; // [esp+54h] [ebp-64h] void (__thiscall ***v78)(_DWORD, signed int); // [esp+58h] [ebp-60h] int v79; // [esp+5Ch] [ebp-5Ch] void *v80; // [esp+60h] [ebp-58h] char v81; // [esp+64h] [ebp-54h] int v82; // [esp+68h] [ebp-50h] int v83; // [esp+6Ch] [ebp-4Ch] int v84; // [esp+70h] [ebp-48h] volatile LONG *v85; // [esp+74h] [ebp-44h] int v86; // [esp+78h] [ebp-40h] int v87; // [esp+7Ch] [ebp-3Ch] int v88; // [esp+80h] [ebp-38h] int v89; // [esp+84h] [ebp-34h] char v90; // [esp+88h] [ebp-30h] int v91; // [esp+B4h] [ebp-4h] v5 = (int)this; v87 = a2; v6 = *a3; v85 = a4; v7 = sub_8FB140(v6, (int)"Frame02", (int)&v89, (int)&v88, a4); if ( a5 ) v8 = sub_8F1440((volatile LONG **)v5, 0, 0, (int)v7, 0, v87, (int)"ShortCutVerticalWin", 0); else v8 = sub_8F1440((volatile LONG **)v5, 0, 0, (int)v7, 0, v87, (int)"ShortCutVerticalSubWin", 0); if ( !v8 ) return 0; sub_8F71E0(*a3, (int)"Panel02", &v81, &v82, &v84, &v83); v10 = *a3; v86 = v83 + v82; v11 = sub_8FB140(v10, (int)"Panel02", (int)&v89, (int)&v88, a4); sub_8F3EB0(v89, v88, (int)v11, v5, 0, 0); sub_8F71E0(*a3, (int)"QSlot02_1", &v81, &v82, &v84, &v79); *(_DWORD *)(v5 + 700) = v79; sub_8F71E0(*a3, (int)"QSlot02_2", &v81, &v82, &v84, &v77); *(_DWORD *)(v5 + 700) += v77; sub_8F71E0(*a3, (int)"QSlot02_3", &v81, &v82, &v84, &v74); *(_DWORD *)(v5 + 700) += v74; v12 = sub_43D0D0(0xEu); *(_DWORD *)(v5 + 1000) = v12; if ( !v12 ) return 0; v87 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v13 = v87; v14 = (char *)sub_401410(byte_ACAB50, "Game\\MainNumber.nif"); sub_8F66B0(v14, v5 + 996, v13); if ( !*(_DWORD *)(v5 + 996) ) return 0; v87 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v15 = v87; v16 = (char *)sub_401410(byte_ACAB50, "Game\\MainNumber.nif"); sub_8F66B0(v16, v5 + 992, v15); if ( !*(_DWORD *)(v5 + 992) ) return 0; v87 = 0; v17 = (int *)(v5 + 352); do { v18 = sub_8FB140(*a3, (int)"QSlot02_1", (int)&v89, (int)&v88, v85); v19 = sub_8F3EB0(v89, v86, (int)v18, v5, 0, 0); v17[88] = (int)v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = sub_8FB140(*a3, (int)"QSlot02_2", (int)&v89, (int)&v88, v85); v21 = sub_8F3EB0(0, v79, (int)v20, v17[88], 0, 0); v17[106] = (int)v21; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); v22 = sub_8FB140(*a3, (int)"QSlot02_3", (int)&v89, (int)&v88, v85); v23 = sub_8F3EB0(0, v79 + v77, (int)v22, v17[88], 0, 0); v17[124] = (int)v23; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v24 = sub_5A1BB0(v89 + 4, v86 + 3, v87, v5); *v17 = (int)v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 516))(v24, 3); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v17 + 560))(4); *(_DWORD *)(*v17 + 304) = 1; sub_5A3690((int *)*v17, 0); sub_5D3170(*v17, 1); v25 = sub_4FD5C0(v89 + 4, v86 + 3, v5); v17[18] = v25; *(_WORD *)(v25 + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v17[18] + 240))(0); v78 = sub_6AAFB0(&unk_B91250, "WeaponTitle"); if ( v78 ) { v80 = operator new(0x44u); v91 = 0; if ( v80 ) { v26 = sub_85BD60(v78); v27 = sub_6B0A90((float *)v80, v26); v91 = -1; v17[41] = (int)v27; } else { v91 = -1; v17[41] = 0; } } else { v17[41] = 0; } v28 = sub_8FB140(*(_DWORD *)(v5 + 992), (int)"ShiftPlus", (int)&v89, (int)&v88, *(volatile LONG **)(v5 + 1000)); v29 = sub_8F3EB0(6, v86 + 4, (int)v28, v5, 0, 0); v17[163] = (int)v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); v30 = sub_8FB140(*(_DWORD *)(v5 + 992), (int)"48", (int)&v89, (int)&v88, *(volatile LONG **)(v5 + 1000)); v31 = sub_8F3EB0(25, v86 + 2, (int)v30, v5, 0, 0); v17[142] = (int)v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v32 = v87; v86 += *(_DWORD *)(v5 + 700); if ( v87 > 11 ) { sub_5A1160((_DWORD *)v5, v87, (int)"SmallNumTrans02"); sub_5A12E0((_DWORD *)v5, v87, (int)"SmallNumTrans01"); v32 = v87; } ++v17; v87 = v32 + 1; } while ( v32 + 1 < 18 ); v33 = *a3; if ( a5 ) { v34 = sub_8FB140(v33, (int)"MovePanelBtn02", (int)&v89, (int)&v88, v85); v35 = v86; v36 = sub_910CB0(v89, v86, (int)v34, v5, 0, 0, 0); v37 = v89; *(_DWORD *)(v5 + 680) = v36; *((_DWORD *)v36 + 85) = v37; *((_DWORD *)v36 + 86) = v35; v38 = *(_DWORD *)(v5 + 680); *(_DWORD *)(v38 + 348) = v89; *(_DWORD *)(v38 + 352) = v35; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 324) = 1; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 325) = 1; sub_8F71E0(*a3, (int)"SubPanelBtnNor02", &v80, &v78, &v84, &v83); v39 = sub_8FB140(*a3, (int)"SubPanelBtnNor02", (int)&v89, (int)&v88, v85); v40 = *a3; v87 = (int)v39; sub_8FB650(v39, v40, (int)"SubPanelBtnNor02"); sub_8FB650((_DWORD *)v87, *a3, (int)"SubPanelBtnOver02"); v41 = sub_910CB0(v89, v35 + v88, v87, v5, 6, 0, 0); v42 = v35 + v88; v43 = v89; *(_DWORD *)(v5 + 688) = v41; *((_DWORD *)v41 + 86) = v42; *((_DWORD *)v41 + 85) = v43; v44 = v35 + v88; v45 = *(_DWORD *)(v5 + 688); *(_DWORD *)(v45 + 348) = v89; *(_DWORD *)(v45 + 352) = v44; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 328) = v80; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 332) = v78; *(_DWORD *)(*(_DWORD *)(v5 + 688) + 272) = dword_AD01E8; v46 = sub_40A910(1721402025); sub_8F2EA0(*(void ***)(v5 + 688), v46); } else { v47 = sub_8FB140(v33, (int)"MovePanel02", (int)&v89, (int)&v88, v85); v35 = v86; v48 = sub_910CB0(v89, v86, (int)v47, v5, 0, 0, 0); v49 = v89; *(_DWORD *)(v5 + 680) = v48; *((_DWORD *)v48 + 85) = v49; *((_DWORD *)v48 + 86) = v35; v50 = *(_DWORD *)(v5 + 680); *(_DWORD *)(v50 + 348) = v89; *(_DWORD *)(v50 + 352) = v35; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 324) = 1; *(_BYTE *)(*(_DWORD *)(v5 + 680) + 325) = 1; } sub_8F71E0(*a3, (int)"PanelTurnBtnNor02", &v75, &v76, &v84, &v83); v51 = sub_8FB140(*a3, (int)"PanelTurnBtnNor02", (int)&v89, (int)&v88, v85); v52 = *a3; v87 = (int)v51; sub_8FB650(v51, v52, (int)"PanelTurnBtnNor02"); sub_8FB650((_DWORD *)v87, *a3, (int)"PanelTurnBtnOver02"); v53 = sub_910CB0(v89, v35 + v88, v87, v5, 5, 0, 0); v54 = v88; *(_DWORD *)(v5 + 684) = v53; *((_DWORD *)v53 + 85) = v89; *((_DWORD *)v53 + 86) = v35 + v54; v55 = v88 + v35; v56 = *(_DWORD *)(v5 + 684); *(_DWORD *)(v56 + 348) = v89; *(_DWORD *)(v56 + 352) = v55; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 328) = v75; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 332) = v76; *(_DWORD *)(*(_DWORD *)(v5 + 684) + 272) = dword_AD01E8; v57 = sub_40A910(-1348828937); sub_8F2EA0(*(void ***)(v5 + 684), v57); v58 = v85; v59 = sub_8FB140(*a3, (int)"PrePanelNor02", (int)&v89, (int)&v88, v85); sub_8FE0F0(v89, v88, (int)v59, v5, 1, 0, 0); v60 = sub_8FB140(*a3, (int)"NextPanelNor02", (int)&v89, (int)&v88, v58); sub_8FE0F0(v89, v88, (int)v60, v5, 2, 0, 0); if ( !sub_8F71E0(*a3, (int)"PageNum02", &v89, &v88, &v84, &v83) ) return 0; v61 = sub_8FB140(*a3, (int)"PageNum02", (int)&v89, (int)&v88, v58); sub_8F3EB0(v89, v88, (int)v61, v5, 0, 0); v62 = sub_421050(2); v63 = sub_8F4A20(v89, v88 + 2, v84, v83, v62, v5, 0, 0); *(_DWORD *)(v5 + 588) = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v5 + 588) + 468))(&dword_AA8D98); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 588) + 240))(0); sprintf(&v90, "%u", *(_DWORD *)(v5 + 348) + 1); (*(void (__stdcall **)(char *))(**(_DWORD **)(v5 + 588) + 472))(&v90); if ( a5 ) { (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 236))(v5, xRight, dword_AC2F78); v64 = *(volatile LONG **)v5; v65 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 164))(v5, 160); (*((void (__thiscall **)(int, int))v64 + 77))(v5, v65); } else { (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v5 + 236))(v5, xRight, dword_AC2F78); v66 = *(volatile LONG **)v5; v67 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 164))(v5, 160); (*((void (__thiscall **)(int, int))v66 + 77))(v5, v67); v68 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5); v69 = *(volatile LONG **)v5; v70 = *(_DWORD *)(v5 + 1096) * v68; v71 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 164))(v5, 160); (*((void (__thiscall **)(int, int))v69 + 77))(v5, v71 - v70); *(_DWORD *)(v5 + 348) = *(_DWORD *)(v5 + 1096) + 1; sub_5A0350((_DWORD *)v5); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 520))(v5, 1); *(_DWORD *)(v5 + 692) = 0; if ( !a5 ) *(_DWORD *)(v5 + 692) = *(_DWORD *)(v5 + 1096) + 1; v72 = **(_DWORD **)(v5 + 680); v73 = (*(int (**)(void))(**(_DWORD **)(v5 + 4 * *((unsigned __int8 *)&dword_B92038 + 3 * *(_DWORD *)(v5 + 692)) + 352) + 168))(); (*(void (__thiscall **)(_DWORD, int))(v72 + 176))(*(_DWORD *)(v5 + 680), v73 - 3); sub_5A3790((_DWORD *)v5); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // B92038: using guessed type int dword_B92038; //----- (005A57B0) -------------------------------------------------------- int __userpurge sub_5A57B0@(_DWORD *a1@, int a2@, _BYTE *a3) { _DWORD *v3; // esi int result; // eax int v5; // eax int v6; // edi int v7; // eax int v8; // edi int v9; // eax _BYTE *v10; // edx int v11; // ebx unsigned int v12; // edi int v13; // eax void (__thiscall *v14)(_DWORD, unsigned int); // edx int v15; // ebx int v16; // edi int v17; // ebx int v18; // ecx int v19; // edi int v20; // eax void (__thiscall *v21)(_DWORD, int); // edx int v22; // eax int v23; // edi int v24; // ebx int v25; // edi int v26; // ebx int v27; // ecx int v28; // edi int v29; // ebx int v30; // edi int v31; // eax int v32; // [esp-8h] [ebp-Ch] v3 = a1; result = sub_8F1140(a1, a3); if ( v3[170] ) { v5 = *((unsigned __int8 *)&dword_B92038 + 3 * v3[173]); if ( !byte_AD0194 && !*(_BYTE *)(dword_ACDC88 + 129) ) { byte_AD0194 = 1; if ( *((_BYTE *)v3 + 344) ) { v6 = *(_DWORD *)v3[170]; v7 = (*(int (**)(void))(*(_DWORD *)v3[v5 + 88] + 168))(); (*(void (__thiscall **)(_DWORD, int))(v6 + 176))(v3[170], v7 - 3); } else { v8 = *(_DWORD *)v3[170]; v9 = (*(int (**)(void))(*(_DWORD *)v3[v5 + 88] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v8 + 172))(v3[170], v9 - 2); } sub_5A3790(v3); } result = v3[170]; if ( *(_BYTE *)(result + 336) ) { if ( !*(_BYTE *)(dword_ACDC88 + 129) ) return result; byte_AD0194 = 0; } v10 = (_BYTE *)v3[170]; if ( v10[336] ) { v32 = a2; if ( *((_BYTE *)v3 + 344) ) { if ( dword_BA6A6C < 0 || dword_BA6A6C > 0 ) { v11 = *(_DWORD *)v10; v12 = pt.y - ((unsigned int)(*(int (__stdcall **)(int))(*(_DWORD *)v10 + 148))(v32) >> 1); v13 = (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); v14 = *(void (__thiscall **)(_DWORD, unsigned int))(v11 + 176); LABEL_19: v14(v3[170], v12 - v13); goto LABEL_20; } } else if ( dword_BA6A70 < 0 || dword_BA6A70 > 0 ) { v15 = *(_DWORD *)v10; v12 = pt.x - ((unsigned int)(*(int (__stdcall **)(int))(*(_DWORD *)v10 + 144))(v32) >> 1); v13 = (*(int (__thiscall **)(_DWORD *))(*v3 + 164))(v3); v14 = *(void (__thiscall **)(_DWORD, unsigned int))(v15 + 172); goto LABEL_19; } LABEL_20: if ( *((_BYTE *)v3 + 344) ) { v16 = v3[170]; v17 = (*(int (**)(void))(*(_DWORD *)v3[89] + 168))(); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v16 + 168))(v16) < v17 ) { v18 = v3[89]; LABEL_23: v19 = *(_DWORD *)v3[170]; v20 = (*(int (__stdcall **)(int))(*(_DWORD *)v18 + 168))(v32); v21 = *(void (__thiscall **)(_DWORD, int))(v19 + 176); v22 = v20 - 3; LABEL_31: v21(v3[170], v22); return sub_5A3790(v3); } v23 = v3[170]; v24 = (*(int (**)(void))(*(_DWORD *)v3[105] + 168))(); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 168))(v23) > v24 ) { v18 = v3[105]; goto LABEL_23; } return sub_5A3790(v3); } v25 = v3[89]; v26 = (*(int (**)(void))(*(_DWORD *)v3[170] + 164))(); if ( v26 >= (*(int (__thiscall **)(int))(*(_DWORD *)v25 + 164))(v25) ) { v28 = v3[105]; v29 = (*(int (**)(void))(*(_DWORD *)v3[170] + 164))(); if ( v29 <= (*(int (__thiscall **)(int))(*(_DWORD *)v28 + 164))(v28) ) return sub_5A3790(v3); v27 = v3[105]; } else { v27 = v3[89]; } v30 = *(_DWORD *)v3[170]; v31 = (*(int (__stdcall **)(int))(*(_DWORD *)v27 + 164))(v32); v21 = *(void (__thiscall **)(_DWORD, int))(v30 + 172); v22 = v31 - 2; goto LABEL_31; } } return result; } // 5A57B0: could not find valid save-restore pair for ebx // ACDC88: using guessed type int dword_ACDC88; // AD0194: using guessed type char byte_AD0194; // B92038: using guessed type int dword_B92038; // BA6A6C: using guessed type int dword_BA6A6C; // BA6A70: using guessed type int dword_BA6A70; //----- (005A5A50) -------------------------------------------------------- void __thiscall sub_5A5A50(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi unsigned int v4; // eax int v5; // eax _DWORD *v6; // ecx unsigned int v7; // eax int v8; // eax _DWORD *v9; // ecx unsigned int v10; // eax int v11; // ebx __int16 v12; // ax int v13; // edi signed int v14; // eax bool v15; // cf int v16; // ecx int v17; // eax int v18; // eax unsigned int v19; // eax int v20; // eax unsigned int v21; // ecx int v22; // ecx unsigned int v23; // eax int v24; // eax void *v25; // ecx v3 = this; switch ( a2 ) { case 1: sub_5A0E60(this); sub_5A1820(v3); break; case 2: sub_5A0EF0(this); sub_5A1820(v3); break; case 3: sub_5A4140(this, a3); break; case 4: sub_5A03A0((int)this, a3); break; case 5: sub_5A03F0(this); sub_632950(&dword_AD46F0, 1); break; case 6: sub_632950(&dword_AD46F0, 1); sub_5A0460(v3); break; case 7: v4 = a3 + 18 * this[87]; if ( v4 < 0x64 ) v5 = dword_AD46F4[v4]; else v5 = 0; v6 = *(_DWORD **)(this[74] + 772); if ( v6 ) { if ( v5 ) sub_4EA450(v6, *(_DWORD *)(v5 + 16)); } break; case 8: v7 = a3 + 18 * this[87]; if ( v7 < 0x64 ) v8 = dword_AD46F4[v7]; else v8 = 0; v9 = *(_DWORD **)(this[74] + 772); if ( v9 && v8 ) sub_4E7FB0(v9, *(_DWORD *)(v8 + 16)); break; case 9: v10 = a3 + 18 * this[87]; if ( v10 < 0x64 ) { v11 = dword_AD46F4[v10]; if ( v11 ) { v12 = *(_WORD *)(v11 + 12); if ( v12 != -1 ) { v13 = sub_685510(&byte_ADA230, v12); if ( v13 ) { v14 = 0; v15 = 1; while ( 1 ) { if ( v15 ) { v16 = dword_ADA534[v14]; if ( v16 ) { if ( *(_WORD *)(v13 + 8) == *(_WORD *)(v16 + 8) ) break; } } v15 = (unsigned int)++v14 < 0x1E; if ( v14 >= 30 ) { sub_4A9420((_DWORD ***)v3[74], v13, v11, 1); return; } } v17 = sub_4B1600(*(unsigned __int16 *)(v13 + 8)); if ( v17 ) { v18 = sub_4B15B0(*(unsigned __int16 *)(v17 + 2)); if ( v18 ) { if ( *(_BYTE *)(v18 + 2) ) sub_4A9380((_DWORD *)v3[74], v13, v11, 1); } } } } } } break; case 10: v19 = a3 + 18 * this[87]; if ( v19 < 0x64 ) { v20 = dword_AD46F4[v19]; if ( v20 ) { v21 = *(_DWORD *)(v20 + 8); if ( v21 < 0xC0 ) { v22 = dword_ADA234[v21]; if ( v22 ) { if ( *(_WORD *)(v22 + 8) != -1 ) sub_4A94B0((_DWORD *)v3[74], v22, v20, 1); } } } } break; case 11: v23 = a3 + 18 * this[87]; if ( v23 < 0x64 ) { v24 = dword_AD46F4[v23]; if ( v24 ) { v25 = *(void **)(*(_DWORD *)(this[74] + 772) + 584); if ( v25 ) sub_4E78D0(v25, *(_DWORD *)(v24 + 16)); } } break; default: return; } } // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (005A5D00) -------------------------------------------------------- char __thiscall sub_5A5D00(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi char v6; // bl char v7; // cl volatile LONG *v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // esi int v11; // ST0C_4 char *v12; // eax char v13; // al char v14; // bl void (__thiscall ***v15)(_DWORD, signed int); // esi int v16; // [esp-4h] [ebp-20h] v5 = this; v6 = a3; v7 = a4; v5[274] = a5; *((_BYTE *)v5 + 344) = v6; *((_BYTE *)v5 + 345) = v7; a3 = 0; v8 = (volatile LONG *)sub_43D0D0(4u); if ( !v8 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } a4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v11 = a4; v12 = (char *)sub_401410(byte_ACAB50, "Game\\QuickSlot.nif"); sub_8F66B0(v12, (int)&a3, v11); if ( !a3 ) return 0; v5[124] = 0; v5[125] = 0; v5[126] = 0; v5[127] = 0; *((_WORD *)v5 + 256) = 0; v16 = *((unsigned __int8 *)v5 + 345); if ( v6 ) v13 = sub_5A4DA0(v5, a2, &a3, v8, v16); else v13 = sub_5A4360(v5, a2, &a3, v8, v16); v14 = v13; if ( a3 ) { v15 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v15 ) (**v15)(v15, 1); } } return v14; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005A5E70) -------------------------------------------------------- char __thiscall sub_5A5E70(_DWORD *this, int a2, unsigned int a3, char a4) { _DWORD *v4; // edi int v6; // esi v4 = this; if ( a3 >= 0x64 ) return 0; v6 = this[a3 + 1]; if ( v6 != a2 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4[a3 + 1] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } *((_BYTE *)v4 + 410) = 1; if ( a4 == 1 ) sub_632F20(v4, a3); return 1; } //----- (005A5EF0) -------------------------------------------------------- int __thiscall sub_5A5EF0(_DWORD *this, float a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi unsigned int i; // edi int v6; // ecx unsigned int v7; // [esp+14h] [ebp-4h] v2 = this; v7 = 0; result = sub_402C40(this, &v7); v4 = result; if ( result ) { for ( i = v7; ; ++i ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 324))(v4, LODWORD(a2)); result = sub_5A5EF0(a2); if ( i >= v2[47] ) break; while ( 1 ) { v6 = v2[45]; v4 = *(_DWORD *)(v6 + 4 * i); if ( v4 ) { result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v4 + 4))(*(_DWORD *)(v6 + 4 * i)); if ( result ) break; } LABEL_8: if ( ++i >= v2[47] ) return result; } while ( (_UNKNOWN *)result != &unk_BA6A8C ) { result = *(_DWORD *)(result + 4); if ( !result ) goto LABEL_8; } } } return result; } //----- (005A5F90) -------------------------------------------------------- int __cdecl sub_5A5F90(int a1) { unsigned int v1; // esi unsigned __int16 *v2; // eax v1 = 0; if ( !sub_6C0800() ) return 0; while ( 1 ) { v2 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD984 + 4), v1); if ( v2 ) { if ( *v2 == a1 ) break; } if ( ++v1 >= sub_6C0800() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD984 + 4), v1); } // ACD984: using guessed type int dword_ACD984; //----- (005A5FE0) -------------------------------------------------------- _DWORD *__thiscall sub_5A5FE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+4h] [ebp-10h] char *v5; // [esp+10h] [ebp-4h] v1 = this; this[1] = 0; v2 = operator new(0xCu); if ( !v2 ) { v5 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v5); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *v1 = v2; *v2 = v2; *(_DWORD *)(*v1 + 4) = *v1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005A6040) -------------------------------------------------------- void *__thiscall sub_5A6040(void *this, char a2) { void *v2; // esi v2 = this; sub_5A15F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005A6070) -------------------------------------------------------- void *__thiscall sub_5A6070(void *this, char a2) { void *v2; // esi v2 = this; sub_5A1E80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005A60A0) -------------------------------------------------------- int __thiscall sub_5A60A0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[172] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[173] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[174] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[175] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[178] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[179] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[180] + 256))(0); return (*(int (__stdcall **)(_DWORD))(*v1[181] + 256))(0); } //----- (005A61A0) -------------------------------------------------------- int __thiscall sub_5A61A0(_DWORD **this) { _DWORD **v1; // esi int v2; // edi int result; // eax v1 = this; v2 = 0; if ( (*(unsigned __int8 (**)(void))(*this[172] + 260))() ) v2 = (int)v1[176] + (*(int (**)(void))(*v1[178] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[173] + 260))() ) v2 += (int)v1[176] + (*(int (**)(void))(*v1[179] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[174] + 260))() ) v2 += (int)v1[176] + (*(int (**)(void))(*v1[180] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[175] + 260))() ) result = (int)v1[176] + (*(int (**)(void))(*v1[181] + 144))() + v2 + 2; else result = v2; return result; } //----- (005A6270) -------------------------------------------------------- int __thiscall sub_5A6270(_DWORD **this, int a2, int a3, __int64 a4) { _DWORD **v4; // esi signed __int64 v5; // kr00_8 int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int result; // eax int v12; // edi signed __int64 v13; // [esp+Ch] [ebp-2Ch] signed __int64 v14; // [esp+Ch] [ebp-2Ch] signed __int64 v15; // [esp+Ch] [ebp-2Ch] char v16; // [esp+14h] [ebp-24h] v4 = this; v5 = sub_680E90(a4); if ( v5 ) { (*(void (__stdcall **)(signed int))(*v4[178] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[178] + 308))(a2, a3 + 3); sprintf(&v16, "%I64d", v5); (*(void (__stdcall **)(char *))(*v4[178] + 500))(&v16); v6 = a2 + (*(int (**)(void))(*v4[178] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[172] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[172] + 308))(v6, a3); v7 = (int)v4[176] + v6 + 1; } else { v7 = a2; } v13 = sub_680EB0(a4); if ( v13 ) { (*(void (__stdcall **)(signed int))(*v4[179] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[179] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v13); (*(void (__stdcall **)(char *))(*v4[179] + 500))(&v16); v8 = v7 + (*(int (**)(void))(*v4[179] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[173] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[173] + 308))(v8, a3); v7 = (int)v4[176] + v8 + 1; } v14 = sub_680F00(a4); if ( v14 ) { (*(void (__stdcall **)(signed int))(*v4[180] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[180] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v14); (*(void (__stdcall **)(char *))(*v4[180] + 500))(&v16); v9 = v7 + (*(int (**)(void))(*v4[180] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[174] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[174] + 308))(v9, a3); v7 = (int)v4[176] + v9 + 1; } v15 = sub_680F60(a4); if ( v15 ) { (*(void (__stdcall **)(signed int))(*v4[181] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[181] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v15); (*(void (__stdcall **)(char *))(*v4[181] + 500))(&v16); v10 = v7 + (*(int (**)(void))(*v4[181] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[175] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[175] + 308))(v10, a3); v7 = (int)v4[176] + v10 + 1; } result = HIDWORD(a4) | a4; if ( !a4 ) { (*(void (__stdcall **)(signed int))(*v4[181] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[181] + 308))(v7, a3 + 3); sprintf(&v16, "%d", 0); (*(void (__stdcall **)(char *))(*v4[181] + 500))(&v16); v12 = v7 + (*(int (**)(void))(*v4[181] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[175] + 256))(1); result = (*(int (__stdcall **)(int, int))(*v4[175] + 308))(v12, a3); } return result; } //----- (005A6620) -------------------------------------------------------- unsigned int __thiscall sub_5A6620(_DWORD **this) { int v1; // esi int (*v2)(void); // edx unsigned int result; // eax _DWORD *v4; // edi unsigned int v5; // ebx const CHAR *v6; // eax struct tagSIZE psizl; // [esp+8h] [ebp-18h] _DWORD **v8; // [esp+10h] [ebp-10h] int v9; // [esp+14h] [ebp-Ch] int v10; // [esp+18h] [ebp-8h] int v11; // [esp+1Ch] [ebp-4h] v1 = (int)this; v2 = *(int (**)(void))(*this[105] + 456); v8 = this; result = v2(); v4 = (_DWORD *)result; if ( result ) { SelectObject(*(HDC *)(result + 192), *(HGDIOBJ *)(result + 184)); v5 = 0; v11 = 0; v10 = v1 + 416; v9 = 60; do { v6 = (const CHAR *)(*(int (**)(void))(**(_DWORD **)v10 + 484))(); if ( v6 ) { sub_4593C0(v4, v6, strlen(v6), &psizl); if ( psizl.cx > v5 ) v5 = psizl.cx; v1 = (int)v8; v11 += psizl.cy + 2; } v10 += 4; --v9; } while ( v9 ); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 688) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 692) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 696) + 260))() || (result = (*(int (**)(void))(**(_DWORD **)(v1 + 700) + 260))(), (_BYTE)result) ) { v11 += *(_DWORD *)(v1 + 708) + 2; result = sub_5A61A0((_DWORD **)v1); if ( result > v5 ) v5 = result; } if ( v5 ) result = (*(int (__thiscall **)(int, unsigned int, int))(*(_DWORD *)v1 + 540))( v1, v5 + 2 * *(_DWORD *)(v1 + 356), v11 + 2 * *(_DWORD *)(v1 + 352)); } return result; } //----- (005A6770) -------------------------------------------------------- char __thiscall sub_5A6770(volatile LONG **this, void *a2, int a3, int a4) { volatile LONG **v4; // esi int v6; // eax int v7; // ebx signed int v8; // edi int v9; // eax int v10; // edi char *v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // edx volatile LONG **v15; // eax volatile LONG *v16; // eax int v17; // edx volatile LONG **v18; // eax volatile LONG *v19; // eax int v20; // edx volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // ecx int v24; // eax volatile LONG *v25; // ecx int v26; // eax int v27; // eax int v28; // eax int v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi char v31; // [esp+10h] [ebp-10h] int v32; // [esp+1Ch] [ebp-4h] v4 = this; if ( !sub_45C530(this, a2, a3, a4, 0, 0, 0, 0) ) return 0; v6 = sub_421050(0); v7 = v6; if ( !v6 ) return 0; v4[182] = *(volatile LONG **)(v6 + 384); v8 = 0; do { if ( v8 ) { v4[v8 + 104] = sub_8F4A20( (int)v4[89], (int)v4[88] + v8 * ((_DWORD)v4[182] + 2) + 2, 256, (int)(v4[182] + 1), v7, (int)v4, 0, 0); } else { v9 = sub_421050(1); v4[104] = sub_8F4A20((int)v4[89], (int)v4[88] + 2, 256, (int)(v4[182] + 1), v9, (int)v4, 0, 0); } (*(void (__stdcall **)(_DWORD))(*v4[v8++ + 104] + 240))(0); } while ( v8 < 60 ); (*((void (__thiscall **)(volatile LONG **, int, int))*v4 + 135))( v4, 2 * (_DWORD)v4[89] + 173, (int)v4[182] + 2 * (_DWORD)v4[88]); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v4 + 64))(v4, 0); a4 = 0; v32 = 0; if ( !a2 ) return 0; v10 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v11 = (char *)sub_401410(byte_ACAB50, "Game\\Money.nif"); sub_8F66B0(v11, (int)&a4, v10); if ( !a4 ) return 0; v12 = sub_8FB140(a4, (int)"MyGemBtn", (int)&v31, (int)&a3, 0); v13 = sub_8F3EB0(0, 0, (int)v12, (int)v4, 0, 0); v14 = a4; v4[172] = v13; v15 = sub_8FB140(v14, (int)"MyGoldBtn", (int)&v31, (int)&a3, 0); v16 = sub_8F3EB0(0, 0, (int)v15, (int)v4, 0, 0); v17 = a4; v4[173] = v16; v18 = sub_8FB140(v17, (int)"MySilverBtn", (int)&v31, (int)&a3, 0); v19 = sub_8F3EB0(0, 0, (int)v18, (int)v4, 0, 0); v20 = a4; v4[174] = v19; v21 = sub_8FB140(v20, (int)"MyCopperBtn", (int)&v31, (int)&a3, 0); v22 = sub_8F3EB0(0, 0, (int)v21, (int)v4, 0, 0); v23 = v4[172]; v4[175] = v22; v24 = (*(int (**)(void))(*v23 + 144))(); v25 = v4[172]; v4[176] = (volatile LONG *)v24; v4[177] = (volatile LONG *)(*(int (**)(void))(*v25 + 148))(); v26 = sub_421050(2); v4[178] = (volatile LONG *)sub_459270(0, 0, v26, (int)v4); v27 = sub_421050(2); v4[179] = (volatile LONG *)sub_459270(0, 0, v27, (int)v4); v28 = sub_421050(2); v4[180] = (volatile LONG *)sub_459270(0, 0, v28, (int)v4); v29 = sub_421050(2); v4[181] = (volatile LONG *)sub_459270(0, 0, v29, (int)v4); sub_5A60A0((_DWORD **)v4); v32 = -1; if ( a4 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005A6AA0) -------------------------------------------------------- char *__cdecl sub_5A6AA0(signed int a1) { const char *v1; // eax const char *v2; // eax const char *v3; // eax float v5; // [esp+14h] [ebp-28h] char v6; // [esp+18h] [ebp-24h] byte_AD01A0 = 0; v5 = (double)a1 / 1000.0 - (double)(60 * (a1 / 1000 / 60 - 60 * (a1 / 1000 / 3600))) - (double)(3600 * (a1 / 1000 / 3600)); if ( a1 / 1000 / 3600 ) { v1 = sub_40C190(-1665929736); sprintf(&v6, v1, a1 / 1000 / 3600); strcat(&byte_AD01A0, &v6); } if ( a1 / 1000 / 60 != 60 * (a1 / 1000 / 3600) ) { v2 = sub_40C190(-1666406151); sprintf(&v6, v2, " ", a1 / 1000 / 60 - 60 * (a1 / 1000 / 3600)); strcat(&byte_AD01A0, &v6); } if ( 0.0 != v5 ) { v3 = sub_40C190(-1733121810); sprintf(&v6, v3, " ", v5); strcat(&byte_AD01A0, &v6); } return &byte_AD01A0; } // AD01A0: using guessed type char byte_AD01A0; //----- (005A6C50) -------------------------------------------------------- char __stdcall sub_5A6C50(unsigned __int16 a1, char *a2) { int v2; // esi int *v3; // eax unsigned int v4; // edi const char *v5; // eax const char *v6; // esi __int16 *v7; // eax __int16 *v8; // esi int v10; // [esp+Ch] [ebp-20Ch] char v11; // [esp+14h] [ebp-204h] char v12; // [esp+15h] [ebp-203h] char v13; // [esp+114h] [ebp-104h] char v14; // [esp+115h] [ebp-103h] v2 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) return 0; if ( a1 > *(_WORD *)(v2 + 200) ) return 0; v3 = (int *)(*(_DWORD *)(v2 + 196) + 4 * a1); if ( !*v3 ) return 0; v10 = *v3; if ( !*v3 ) return 0; v4 = 0; if ( !sub_5ABC80() ) return 0; while ( 1 ) { v5 = (const char *)sub_7474E0((_DWORD *)(dword_ACD9B8 + 4), v4); v6 = v5; if ( v5 ) { if ( !strcmp((const char *)(v10 + 2), v5) ) { v7 = (__int16 *)sub_5ABB60(*((_DWORD *)v6 + 8)); v8 = v7; if ( v7 ) { if ( sub_6BE370(*v7) ) { v13 = 0; memset(&v14, 0, 0xFFu); v11 = 0; memset(&v12, 0, 0xFFu); sprintf(&v13, "%s", v8 + 1); strncpy(&v11, &v13, strlen(&v13) - 2); if ( !strcmp(&v11, "HealReinforce") ) { sprintf(a2, "%d%%", (unsigned __int16)v8[121] / 10); return 1; } if ( !strcmp(&v11, "BiffTimeIncrease") ) break; } } } } if ( ++v4 >= sub_5ABC80() ) return 0; } sprintf(a2, "%d%%", (unsigned __int16)v8[122] / 10); return 1; } // ACD9B8: using guessed type int dword_ACD9B8; // ACE8D0: using guessed type int dword_ACE8D0; //----- (005A6EE0) -------------------------------------------------------- signed int __stdcall sub_5A6EE0(unsigned __int16 a1, char *a2) { int v2; // esi int *v3; // eax int v4; // edi unsigned int v5; // esi const char *v6; // eax const char *v7; // esi __int16 *v8; // eax __int16 *v9; // esi signed __int16 v10; // bx signed int i; // esi const char *v12; // eax __int16 *v13; // edi int v14; // esi __int16 *v16; // [esp+Ch] [ebp-414h] int v17; // [esp+10h] [ebp-410h] unsigned int v18; // [esp+18h] [ebp-408h] char v19; // [esp+1Ch] [ebp-404h] char v20; // [esp+1Dh] [ebp-403h] char v21; // [esp+11Ch] [ebp-304h] char v22; // [esp+11Dh] [ebp-303h] char v23; // [esp+21Ch] [ebp-204h] char v24; // [esp+21Dh] [ebp-203h] char v25; // [esp+31Ch] [ebp-104h] char v26; // [esp+31Dh] [ebp-103h] v2 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) return 0; if ( a1 > *(_WORD *)(v2 + 200) ) return 0; v3 = (int *)(*(_DWORD *)(v2 + 196) + 4 * a1); if ( !*v3 ) return 0; v4 = *v3; v17 = *v3; if ( !*v3 ) return 0; v5 = 0; v18 = 0; if ( !sub_5ABC80() ) return 0; while ( 1 ) { v6 = (const char *)sub_7474E0((_DWORD *)(dword_ACD9B8 + 4), v5); v7 = v6; if ( !v6 ) goto LABEL_24; if ( strcmp((const char *)(v4 + 2), v6) ) goto LABEL_24; v8 = (__int16 *)sub_5ABB60(*((_DWORD *)v7 + 8)); v9 = v8; v16 = v8; if ( !v8 ) goto LABEL_24; v10 = -1; if ( !sub_6BE370(*v8) ) goto LABEL_24; v23 = 0; memset(&v24, 0, 0xFFu); v19 = 0; memset(&v20, 0, 0xFFu); sprintf(&v23, "%s", v9 + 1); strncpy(&v19, &v23, strlen(&v23) - 2); for ( i = 2; ; ++i ) { v12 = i >= 10 ? sub_7549E0("%s%d", &v19, i) : sub_7549E0("%s0%d", &v19, i); v13 = (__int16 *)sub_5ABBB0(v12); if ( !v13 || !sub_6BE370(*v13) ) break; v10 = *v13; } if ( v10 == -1 ) { v14 = (int)v16; } else { v14 = sub_4DCAF0(v10); if ( !v14 ) return 0; } v21 = 0; memset(&v22, 0, 0xFFu); v25 = 0; memset(&v26, 0, 0xFFu); sprintf(&v21, "%s", v14 + 2); strncpy(&v25, &v21, strlen(&v21) - 2); if ( !strcmp(&v25, "HealReinforce") ) { sprintf(a2, "%d%%", *(unsigned __int16 *)(v14 + 242) / 10); return 1; } if ( !strcmp(&v25, "BiffTimeIncrease") ) break; v4 = v17; LABEL_24: v5 = ++v18; if ( v18 >= sub_5ABC80() ) return 0; } sprintf(a2, "%d%%", *(unsigned __int16 *)(v14 + 244) / 10); return 2; } // ACD9B8: using guessed type int dword_ACD9B8; // ACE8D0: using guessed type int dword_ACE8D0; //----- (005A7270) -------------------------------------------------------- int __thiscall sub_5A7270(_DWORD **this, unsigned __int16 a2, int a3) { int v3; // edi int *v4; // eax int v5; // ebx const char *v6; // eax const char *v7; // edi __int16 *v8; // eax __int16 *v9; // edi int v11; // edi char *v12; // eax char *v13; // eax int v14; // edi char *v15; // eax char *v16; // eax int v17; // edi char *v18; // eax char *v19; // eax int v20; // edi char *v21; // eax char *v22; // eax int v23; // [esp+Ch] [ebp-510h] _DWORD **v24; // [esp+10h] [ebp-50Ch] unsigned int v25; // [esp+14h] [ebp-508h] char v26; // [esp+18h] [ebp-504h] char v27; // [esp+19h] [ebp-503h] char v28; // [esp+118h] [ebp-404h] char v29; // [esp+119h] [ebp-403h] char v30; // [esp+218h] [ebp-304h] char v31; // [esp+219h] [ebp-303h] char v32; // [esp+318h] [ebp-204h] char v33; // [esp+319h] [ebp-203h] char v34; // [esp+418h] [ebp-104h] char v35; // [esp+419h] [ebp-103h] v3 = dword_ACE8D0; v24 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) return a3; if ( a2 > *(_WORD *)(v3 + 200) ) return a3; v4 = (int *)(*(_DWORD *)(v3 + 196) + 4 * a2); if ( !*v4 ) return a3; v5 = *v4; v23 = *v4; if ( !*v4 ) return a3; v25 = 0; if ( !sub_5ABC80() ) return a3; while ( 1 ) { v6 = (const char *)sub_7474E0((_DWORD *)(dword_ACD9B8 + 4), v25); v7 = v6; if ( v6 ) { if ( !strcmp((const char *)(v5 + 2), v6) ) { v8 = (__int16 *)sub_5ABB60(*((_DWORD *)v7 + 8)); v9 = v8; if ( v8 ) { if ( sub_6BE370(*v8) ) { v28 = 0; memset(&v29, 0, 0xFFu); v26 = 0; memset(&v27, 0, 0xFFu); sprintf(&v28, "%s", v9 + 1); strncpy(&v26, &v28, strlen(&v28) - 2); v34 = 0; memset(&v35, 0, 0xFFu); v30 = 0; memset(&v31, 0, 0xFFu); if ( !strcmp(&v26, "HealReinforce") ) { v32 = 0; memset(&v33, 0, 0xFFu); strncpy(&v32, (const char *)v9 + 34, strlen((const char *)v9 + 34) - 4); (*(void (__stdcall **)(int *))(*v24[a3 + 104] + 468))(&dword_AA8CB8); v11 = *v24[a3 + 104]; v12 = (char *)sub_40A910(967076492); v13 = sub_7549E0(v12, &v32); (*(void (__thiscall **)(_DWORD *, char *))(v11 + 472))(v24[a3 + 104], v13); sprintf(&v34, "%s", v23 + 34); strncpy(&v30, &v34, strlen(&v34) - 4); (*(void (__stdcall **)(int *))(*v24[a3 + 105] + 468))(&dword_AA8C68); v14 = *v24[a3 + 105]; v15 = (char *)sub_40A910(-84953873); v16 = sub_7549E0(v15, &v30); (*(void (__thiscall **)(_DWORD *, char *))(v14 + 472))(v24[a3 + 105], v16); (*(void (__stdcall **)(const char *))(*v24[a3 + 106] + 472))(" "); return a3 + 3; } if ( !strcmp(&v26, "BiffTimeIncrease") ) break; } } } } if ( ++v25 >= sub_5ABC80() ) return a3; } v32 = 0; memset(&v33, 0, 0xFFu); strncpy(&v32, (const char *)v9 + 34, strlen((const char *)v9 + 34) - 4); (*(void (__stdcall **)(int *))(*v24[a3 + 104] + 468))(&dword_AA8CB8); v17 = *v24[a3 + 104]; v18 = (char *)sub_40A910(967076492); v19 = sub_7549E0(v18, &v32); (*(void (__thiscall **)(_DWORD *, char *))(v17 + 472))(v24[a3 + 104], v19); sprintf(&v34, "%s", v23 + 34); strncpy(&v30, &v34, strlen(&v34) - 4); (*(void (__stdcall **)(int *))(*v24[a3 + 105] + 468))(&dword_AA8C68); v20 = *v24[a3 + 105]; v21 = (char *)sub_40A910(1079195276); v22 = sub_7549E0(v21, &v30); (*(void (__thiscall **)(_DWORD *, char *))(v20 + 472))(v24[a3 + 105], v22); (*(void (__stdcall **)(const char *))(*v24[a3 + 106] + 472))(" "); return a3 + 3; } // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; // ACD9B8: using guessed type int dword_ACD9B8; // ACE8D0: using guessed type int dword_ACE8D0; //----- (005A7780) -------------------------------------------------------- int __thiscall sub_5A7780(_DWORD **this, int a2, int a3) { unsigned int v3; // ecx char v4; // al char *v5; // ebx const char *v6; // esi unsigned int v7; // edx unsigned int v8; // ST08_4 unsigned int v9; // ST04_4 char *v10; // eax char *v11; // eax unsigned int v12; // ST08_4 char *v13; // eax int v14; // ecx int v15; // edx char *v16; // eax char *v17; // eax char *v18; // ST04_4 int result; // eax int v20; // [esp-8h] [ebp-18h] int v21; // [esp-4h] [ebp-14h] int v22; // [esp-4h] [ebp-14h] _DWORD **v23; // [esp+Ch] [ebp-4h] v23 = this; v3 = *(_DWORD *)(a2 + 223); v4 = 0; v5 = 0; v6 = 0; if ( v3 ) { v7 = *(_DWORD *)(a2 + 231); if ( v3 != v7 && v7 ) { v8 = v7 / 0xA; v9 = v3 / 0xA; v10 = (char *)sub_40A910(137040426); v11 = sub_7549E0(v10, v9, v8); } else { v12 = v3 / 0xA; v13 = (char *)sub_40A910(153817642); v11 = sub_7549E0(v13, v12); } v5 = v11; v4 = 1; } v14 = *(_DWORD *)(a2 + 219); if ( v14 ) { v15 = *(_DWORD *)(a2 + 227); if ( v14 == v15 ) { v22 = *(_DWORD *)(a2 + 219); if ( v4 ) { v16 = sub_7549E0(" + %d", v22); goto LABEL_18; } } else { if ( v15 ) { v21 = *(_DWORD *)(a2 + 227); v20 = *(_DWORD *)(a2 + 219); if ( v4 ) { v16 = sub_7549E0(" + %d~%d", v14, v21); } else { v17 = (char *)sub_40A910(170594858); v16 = sub_7549E0(v17, v20, v21); } goto LABEL_18; } v22 = *(_DWORD *)(a2 + 219); if ( v4 ) { v16 = sub_7549E0(" + %d", v22); LABEL_18: v6 = v16; goto LABEL_19; } } v18 = (char *)sub_40A910(187372074); v16 = sub_7549E0(v18, v22); goto LABEL_18; } LABEL_19: if ( v5 ) { if ( v6 ) strcat(v5, v6); (*(void (__stdcall **)(char *))(*v23[a3 + 104] + 472))(v5); result = a3 + 1; } else if ( v6 ) { (*(void (__stdcall **)(const char *))(*v23[a3 + 104] + 472))(v6); result = a3 + 1; } else { result = a3; } return result; } //----- (005A7920) -------------------------------------------------------- int __thiscall sub_5A7920(_DWORD **this, int a2, int a3) { unsigned int v3; // ecx char v4; // al char *v5; // ebx const char *v6; // esi unsigned int v7; // edx unsigned int v8; // ST08_4 unsigned int v9; // ST04_4 char *v10; // eax char *v11; // eax unsigned int v12; // ST08_4 char *v13; // eax int v14; // ecx int v15; // edx char *v16; // eax char *v17; // eax char *v18; // ST04_4 int result; // eax int v20; // [esp-8h] [ebp-18h] int v21; // [esp-4h] [ebp-14h] int v22; // [esp-4h] [ebp-14h] _DWORD **v23; // [esp+Ch] [ebp-4h] v23 = this; v3 = *(_DWORD *)(a2 + 239); v4 = 0; v5 = 0; v6 = 0; if ( v3 ) { v7 = *(_DWORD *)(a2 + 247); if ( v3 != v7 && v7 ) { v8 = v7 / 0xA; v9 = v3 / 0xA; v10 = (char *)sub_40A910(135466794); v11 = sub_7549E0(v10, v9, v8); } else { v12 = v3 / 0xA; v13 = (char *)sub_40A910(152244010); v11 = sub_7549E0(v13, v12); } v5 = v11; v4 = 1; } v14 = *(_DWORD *)(a2 + 235); if ( v14 ) { v15 = *(_DWORD *)(a2 + 243); if ( v14 == v15 ) { v22 = *(_DWORD *)(a2 + 235); if ( v4 ) { v16 = sub_7549E0(" + %d", v22); goto LABEL_18; } } else { if ( v15 ) { v21 = *(_DWORD *)(a2 + 243); v20 = *(_DWORD *)(a2 + 235); if ( v4 ) { v16 = sub_7549E0(" + %d~%d", v14, v21); } else { v17 = (char *)sub_40A910(169021226); v16 = sub_7549E0(v17, v20, v21); } goto LABEL_18; } v22 = *(_DWORD *)(a2 + 235); if ( v4 ) { v16 = sub_7549E0(" + %d", v22); LABEL_18: v6 = v16; goto LABEL_19; } } v18 = (char *)sub_40A910(185798442); v16 = sub_7549E0(v18, v22); goto LABEL_18; } LABEL_19: if ( v5 ) { if ( v6 ) strcat(v5, v6); (*(void (__stdcall **)(char *))(*v23[a3 + 104] + 472))(v5); result = a3 + 1; } else if ( v6 ) { (*(void (__stdcall **)(const char *))(*v23[a3 + 104] + 472))(v6); result = a3 + 1; } else { result = a3; } return result; } //----- (005A7C80) -------------------------------------------------------- void *__thiscall sub_5A7C80(_DWORD **this, const CHAR *a2, _DWORD *a3, int a4) { _DWORD **v4; // edi void (__stdcall *v5)(int *); // edx void *result; // eax int v7; // ebx int v8; // eax void (__stdcall *v9)(char *); // eax int v10; // [esp+10h] [ebp-144h] HDC hdc; // [esp+18h] [ebp-13Ch] int v12; // [esp+1Ch] [ebp-138h] int v13; // [esp+20h] [ebp-134h] LPCSTR lpString; // [esp+24h] [ebp-130h] void *v15; // [esp+28h] [ebp-12Ch] int v16; // [esp+38h] [ebp-11Ch] unsigned int v17; // [esp+3Ch] [ebp-118h] char v18[256]; // [esp+44h] [ebp-110h] int v19; // [esp+150h] [ebp-4h] v4 = this; v5 = *(void (__stdcall **)(int *))(*this[104] + 492); v12 = a4; v5(&v10); v13 = v10; if ( v10 <= 300 ) v13 = 300; hdc = *(HDC *)((*(int (**)(void))(*v4[*a3 + 104] + 456))() + 192); lpString = a2; for ( result = memset(v18, 0, 0x100u); *a3 < 60; result = memset(v18, 0, 0x100u) ) { result = (void *)sub_8F5700((int)v18, lpString, hdc, v13); v7 = (int)result; if ( !result ) break; v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4018E0(&v15, v18, strlen(v18)); v19 = 0; v8 = sub_417B90((unsigned __int8 *)&v15, "\n", 0x100000000ui64); if ( v8 == -1 ) { v18[v7] = 0; } else { v18[v8] = 0; v7 = v8 + 1; } v9 = *(void (__stdcall **)(char *))(*v4[*a3 + 104] + 472); lpString += v7; v9(v18); (*(void (__stdcall **)(int))(*v4[*a3 + 104] + 468))(v12); if ( !(*(int (**)(void))(*v4[*a3 + 104] + 484))() ) (*(void (__stdcall **)(const char *))(*v4[*a3 + 104] + 472))(" "); ++*a3; v19 = -1; if ( v17 >= 0x10 ) operator delete(v15); } return result; } //----- (005A7EB0) -------------------------------------------------------- int __thiscall sub_5A7EB0(_DWORD **this, unsigned __int16 a2, char a3) { _DWORD **v3; // edi int v4; // esi signed int v5; // ebx unsigned int v6; // esi int v7; // esi _DWORD *v8; // eax int v9; // esi const CHAR *v10; // eax signed int v11; // esi int v12; // ebx const CHAR *v13; // eax void (__stdcall *v14)(const char *); // edx int v15; // ebx char *v16; // eax char *v17; // eax int v18; // ST0C_4 const char *v19; // eax void (__stdcall *v20)(int *); // eax int v21; // esi void (__stdcall *v22)(const char *); // eax signed __int64 v24; // [esp+Ch] [ebp-120h] int v25; // [esp+18h] [ebp-114h] bool v26; // [esp+1Fh] [ebp-10Dh] int v27; // [esp+20h] [ebp-10Ch] char v28; // [esp+27h] [ebp-105h] char v29; // [esp+28h] [ebp-104h] v3 = this; sub_5A60A0(this); v4 = (int)(v3 + 104); v5 = 60; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v4 + 472))(&unk_9DB7CD); (*(void (__stdcall **)(int *))(**(_DWORD **)v4 + 468))(&dword_AA8C68); v4 += 4; --v5; } while ( v5 ); if ( a2 == -1 ) return 0; v6 = 0; if ( sub_4DC670() ) { while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v6) != a2 ) { if ( ++v6 >= sub_4DC670() ) goto LABEL_7; } v27 = sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v6); } else { LABEL_7: v27 = 0; } v7 = dword_ACED88; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACED88 + 16))(dword_ACED88, a2) ) { if ( a2 <= *(_WORD *)(v7 + 200) ) { v8 = (_DWORD *)(*(_DWORD *)(v7 + 196) + 4 * a2); v25 = *v8 ? *v8 : 0; } else { v25 = 0; } } else { v25 = 0; } if ( !v27 || !v25 ) return 0; v26 = *(_DWORD *)(v25 + 338) <= sub_680890((unsigned __int8 *)byte_AD9238); v24 = sub_6622F0(*(_DWORD *)(v25 + 342)); v28 = 1; if ( !(v24 & (1i64 << sub_6807E0(byte_AD9238))) ) v28 = 0; sprintf(&v29, "%s", v27 + 34); (*(void (__stdcall **)(char *))(*v3[104] + 472))(&v29); (*(void (__stdcall **)(int *))(*v3[104] + 468))(&dword_AA8C68); v9 = *v3[105]; v10 = sub_40C190(899131020); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v9 + 472))(v3[105], v10); v11 = 2; if ( strcmp((const char *)(*(int (**)(void))(*v3[105] + 484))(), " ") ) { v11 = 3; (*(void (__stdcall **)(const char *))(*v3[106] + 472))(" "); } if ( sub_6BE370(a2) && a3 ) { v12 = *v3[v11 + 104]; v13 = sub_40C190(-1555951628); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v12 + 472))(v3[v11 + 104], v13); (*(void (__stdcall **)(int *))(*v3[v11++ + 104] + 468))(&dword_AA8C88); } if ( v11 > 0 && strcmp((const char *)(*(int (**)(void))(*v3[v11 + 103] + 484))(), " ") ) { v14 = *(void (__stdcall **)(const char *))(*v3[v11++ + 104] + 472); v14(" "); } sub_662570(v24, &v29, 0x100u); v15 = *v3[v11 + 104]; v16 = (char *)sub_40C190(-1611269140); v17 = sub_7549E0(v16, &v29); (*(void (__thiscall **)(_DWORD *, char *))(v15 + 472))(v3[v11 + 104], v17); if ( !v28 ) (*(void (__stdcall **)(int *))(*v3[v11 + 104] + 468))(&dword_AA8C88); v18 = *(_DWORD *)(v25 + 338); v19 = sub_40C190(-1728582399); sprintf(&v29, v19, v18); (*(void (__stdcall **)(char *))(*v3[v11 + 105] + 472))(&v29); v20 = *(void (__stdcall **)(int *))(*v3[v11 + 105] + 468); if ( v26 ) v20(&dword_AA8C68); else v20(&dword_AA8C88); v21 = v11 + 2; v27 = v21; if ( v21 > 0 && strcmp((const char *)(*(int (**)(void))(*v3[v21 + 103] + 484))(), " ") ) { v22 = *(void (__stdcall **)(const char *))(*v3[v21++ + 104] + 472); v27 = v21; v22(" "); } if ( *(_BYTE *)(v25 + 82) != 45 ) { sub_5A7C80(v3, (const CHAR *)(v25 + 82), &v27, (int)&dword_AA8C68); v21 = v27; } return v21; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACEAA8: using guessed type int dword_ACEAA8; // ACED88: using guessed type int dword_ACED88; //----- (005A8360) -------------------------------------------------------- int __thiscall sub_5A8360(_DWORD **this, unsigned __int16 a2, unsigned int a3) { _DWORD **v3; // esi int v4; // edi v3 = this; v4 = sub_5A7EB0(this, a2, 1); (*(void (__stdcall **)(const char *))(*v3[v4 + 104] + 472))(" "); return sub_5A6270(v3, (int)v3[89], (int)v3[88] + (v4 + 1) * ((_DWORD)v3[182] + 2) + 2, a3); } //----- (005A83C0) -------------------------------------------------------- void __thiscall sub_5A83C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ecx int *v4; // eax int v5; // ecx int v6; // edx int v7; // eax int **v8; // eax int *v9; // ebx int v10; // ecx void *v11; // eax int v12; // ebx void *v13; // ST08_4 char *v14; // eax char *v15; // eax int v16; // eax int v17; // ecx char v18; // [esp+10h] [ebp-48h] int v19; // [esp+14h] [ebp-44h] int v20; // [esp+18h] [ebp-40h] int v21; // [esp+1Ch] [ebp-3Ch] int v22; // [esp+20h] [ebp-38h] unsigned int v23; // [esp+24h] [ebp-34h] int v24; // [esp+28h] [ebp-30h] void *v25; // [esp+2Ch] [ebp-2Ch] int v26; // [esp+3Ch] [ebp-1Ch] unsigned int v27; // [esp+40h] [ebp-18h] int v28; // [esp+54h] [ebp-4h] v2 = this; if ( *a2 < 60 ) { v3 = this[165] - this[164]; v23 = 0; if ( v3 / 12 ) { v24 = 0; do { v4 = (int *)(v24 + v2[164]); v5 = *v4; v6 = v4[1]; v7 = v4[2]; v19 = v5; v20 = v6; v21 = v7; if ( (_WORD)v5 ) { v22 = sub_4B15B0((unsigned __int16)v5); if ( v22 ) { v8 = sub_5AC2A0(v2 + 168, (int **)&v18, &v19); v9 = *v8; if ( *v8 != (int *)v2[169] ) { v10 = v2[(*a2)++ + 104]; (*(void (__stdcall **)(const char *))(*(_DWORD *)v10 + 472))(" "); v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4017F0((const void **)&v25, (const void **)v9 + 4, 0, (void *)0xFFFFFFFF); v11 = v25; v28 = 0; if ( v27 < 0x10 ) v11 = &v25; v12 = *(_DWORD *)v2[*a2 + 104]; v13 = v11; v14 = (char *)sub_40A910(-822874386); v15 = sub_7549E0(v14, v13); (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(v2[*a2 + 104], v15); (*(void (__stdcall **)(int *))(*(_DWORD *)v2[*a2 + 104] + 468))(&dword_AA8CB8); ++*a2; v28 = -1; if ( v27 >= 0x10 ) operator delete(v25); v27 = 15; v26 = 0; LOBYTE(v25) = 0; } v16 = sub_5ABB10((unsigned __int16)v20); if ( *(_BYTE *)(v22 + 3) != 45 ) { if ( v16 ) sub_5A7C80((_DWORD **)v2, (const CHAR *)(v22 + 3), a2, (int)&dword_AA8CB8); } } } v17 = v2[165] - v2[164]; v24 += 12; ++v23; } while ( v23 < v17 / 12 ); } } } // AA8CB8: using guessed type int dword_AA8CB8; //----- (005A85C0) -------------------------------------------------------- unsigned int __thiscall sub_5A85C0(_DWORD **this, signed int a2) { _DWORD **v2; // esi unsigned int v3; // edi unsigned int result; // eax signed int v5; // ebx const CHAR *v6; // edi v2 = this; v3 = 10; do { (*(void (__stdcall **)(const char *))(*v2[104] + 472))(" "); (*(void (__stdcall **)(int *))(*v2[104] + 468))(&dword_AA8C68); --v3; } while ( v3 ); result = sub_5ABA70(); if ( result ) { v5 = a2; while ( *(unsigned __int16 *)(sub_7474E0((_DWORD *)(dword_ACD990 + 4), v3) + 2) != v5 ) { ++v3; result = sub_5ABA70(); if ( v3 >= result ) return result; } result = sub_7474E0((_DWORD *)(dword_ACD990 + 4), v3); if ( result ) { v6 = (const CHAR *)(result + 72); if ( *(_BYTE *)(result + 72) != 45 ) { (*(void (__stdcall **)(unsigned int))(*v2[104] + 472))(result + 40); (*(void (__stdcall **)(const char *))(*v2[105] + 472))(" "); a2 = 2; sub_5A7C80(v2, v6, &a2, (int)&dword_AA8C68); result = ((int (__thiscall *)(_DWORD **, int, int))(*v2)[135])( v2, 2 * (_DWORD)v2[89] + 10, 2 * (_DWORD)v2[88] + 16); } } } return result; } // AA8C68: using guessed type int dword_AA8C68; // ACD990: using guessed type int dword_ACD990; //----- (005A86C0) -------------------------------------------------------- int __thiscall sub_5A86C0(_DWORD **this, int a2, int a3) { int v3; // esi _DWORD **v4; // edi _DWORD *v5; // eax void *v7; // esi int v8; // ebx int v9; // eax int v10; // esi bool v11; // cf void (__stdcall *v12)(int *); // eax int v13; // ST08_4 const CHAR *v14; // eax char *v15; // eax int v16; // [esp+18h] [ebp+Ch] v3 = dword_ACE8D0; v4 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) return a3; if ( (unsigned __int16)a2 > *(_WORD *)(v3 + 200) ) return a3; v5 = (_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( !*v5 ) return a3; if ( !*v5 ) return a3; v7 = (void *)(*v5 + 2); v8 = sub_40C8D0(v7); v9 = sub_4F4810((const char *)v7); if ( !v8 || !v9 ) return a3; v10 = a3; if ( *(_DWORD *)(v8 + 220) ) { (*(void (__stdcall **)(void *))(*v4[a3 + 104] + 472))(&unk_9DB7CE); v10 = a3 + 1; if ( !*(_DWORD *)(v8 + 224) ) { v11 = *(_DWORD *)(v8 + 220) < *(_DWORD *)(sub_680740(byte_AD9238) + 55); v12 = *(void (__stdcall **)(int *))(*v4[v10 + 104] + 468); if ( v11 ) v12(&dword_AA8C68); else v12(&dword_AA8C88); v13 = *(_DWORD *)(v8 + 220); v16 = *v4[v10 + 104]; v14 = sub_40C190(-1683056920); v15 = sub_7549E0("%s: %d", v14, v13); (*(void (__thiscall **)(_DWORD *, char *))(v16 + 472))(v4[v10 + 104], v15); (*(void (__thiscall **)(_DWORD *, const char *))(*v4[v10 + 105] + 472))(v4[v10 + 105], " "); v10 += 2; } } return v10; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // ACE8D0: using guessed type int dword_ACE8D0; //----- (005A8800) -------------------------------------------------------- LONG __thiscall sub_5A8800(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int *v3; // eax int v4; // ST04_4 char v6; // [esp+10h] [ebp-18h] _DWORD *v7; // [esp+14h] [ebp-14h] _DWORD *v8; // [esp+18h] [ebp-10h] int v9; // [esp+24h] [ebp-4h] v1 = this; v8 = this; *this = &SkillInfoWin::`vftable'; this[58] = &SkillInfoWin::`vftable'; v9 = 0; v2 = (int)(this + 168); v7 = this + 168; v3 = (int *)this[169]; v4 = *v3; LOBYTE(v9) = 2; sub_468FC0(this + 168, (int *)&v6, v4, (int)v3); operator delete(*(void **)(v2 + 4)); if ( v1[164] ) operator delete((void *)v1[164]); v1[164] = 0; v1[165] = 0; v1[166] = 0; v9 = -1; return sub_45B500(v1); } // 9DBB3C: using guessed type void *SkillInfoWin::`vftable'; // 9DBB5C: using guessed type void *SkillInfoWin::`vftable'; //----- (005A88C0) -------------------------------------------------------- _DWORD *__thiscall sub_5A88C0(_BYTE *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _BYTE *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; sub_45B4A0(this); *v1 = &SkillInfoWin::`vftable'; v1[58] = &SkillInfoWin::`vftable'; v7 = 0; v1[164] = 0; v1[165] = 0; v1[166] = 0; LOBYTE(v7) = 1; v1[170] = 0; v2 = operator new(0x30u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[169] = v2; *v2 = v2; *(_DWORD *)(v1[169] + 4) = v1[169]; *(_DWORD *)(v1[169] + 8) = v1[169]; *(_BYTE *)(v1[169] + 44) = 1; *(_BYTE *)(v1[169] + 45) = 1; v1[182] = 14; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9DBB3C: using guessed type void *SkillInfoWin::`vftable'; // 9DBB5C: using guessed type void *SkillInfoWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005A89A0) -------------------------------------------------------- volatile LONG *__cdecl sub_5A89A0(int a1, int a2, int a3) { _BYTE *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x2DCu); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_5A88C0(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 548))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (005A8AE0) -------------------------------------------------------- void __thiscall sub_5A8AE0(unsigned int *this, unsigned __int16 a2) { unsigned int *v2; // esi int v3; // ebx int *v4; // eax unsigned int v5; // edx unsigned int v6; // ecx void *v9; // edx char *v10; // esi _DWORD *v11; // eax _DWORD *v12; // eax void *v13; // ST0C_4 int v14; // eax int v15; // esi int v16; // ebx int v17; // edx int v18; // eax int *v19; // eax char *v20; // eax int v21; // eax _WORD *v22; // eax _DWORD *v23; // esi int **v24; // eax int v25; // ecx int v26; // edi unsigned int v27; // ebx char *v28; // eax char *v29; // ebx unsigned int v30; // edx unsigned __int8 *v31; // eax unsigned __int8 *v32; // esi unsigned __int8 *v33; // ecx int v34; // eax int v35; // eax bool v36; // zf unsigned int v37; // eax signed int v38; // eax int v39; // ST0C_4 _DWORD *v40; // esi char *v41; // edi int *v42; // eax int v43; // edx int v44; // ecx int v45; // edx _WORD *v46; // eax void *v47; // esi _DWORD *v48; // ecx unsigned __int16 v49; // di void *v50; // eax __int16 v51; // ax char *v52; // esi _DWORD *v53; // eax _DWORD *v54; // ST0C_4 int v55; // ecx int j; // eax int i; // eax unsigned int v58; // esi const char *v59; // eax _DWORD *v60; // ebx unsigned int v61; // eax unsigned int v62; // ecx unsigned int v63; // esi _WORD *v64; // eax int v65; // eax int *v66; // ecx int *v67; // eax int k; // eax _DWORD *v69; // ST08_4 int v70; // ST08_4 void **v71; // [esp+10h] [ebp-110h] char v72[2]; // [esp+1Ch] [ebp-104h] int v73; // [esp+1Eh] [ebp-102h] int v74; // [esp+22h] [ebp-FEh] int v75; // [esp+26h] [ebp-FAh] char *v76; // [esp+2Ch] [ebp-F4h] unsigned int *v77; // [esp+30h] [ebp-F0h] int v78; // [esp+34h] [ebp-ECh] int v79; // [esp+38h] [ebp-E8h] void **v80; // [esp+3Ch] [ebp-E4h] _DWORD *v81; // [esp+40h] [ebp-E0h] int v82; // [esp+44h] [ebp-DCh] int v83; // [esp+48h] [ebp-D8h] char v84[12]; // [esp+4Ch] [ebp-D4h] char *v85; // [esp+5Ch] [ebp-C4h] char v86; // [esp+60h] [ebp-C0h] void *v87; // [esp+64h] [ebp-BCh] int v88; // [esp+68h] [ebp-B8h] int v89; // [esp+70h] [ebp-B0h] int v90; // [esp+74h] [ebp-ACh] char *v91; // [esp+78h] [ebp-A8h] char v92; // [esp+7Ch] [ebp-A4h] void *v93; // [esp+80h] [ebp-A0h] int v94; // [esp+84h] [ebp-9Ch] int v95; // [esp+8Ch] [ebp-94h] char v96[4]; // [esp+90h] [ebp-90h] unsigned int v97; // [esp+94h] [ebp-8Ch] void *v98; // [esp+98h] [ebp-88h] int v99; // [esp+A8h] [ebp-78h] unsigned int v100; // [esp+ACh] [ebp-74h] char v101[2]; // [esp+B4h] [ebp-6Ch] void *v102; // [esp+B8h] [ebp-68h] int v103; // [esp+C8h] [ebp-58h] unsigned int v104; // [esp+CCh] [ebp-54h] void *v105; // [esp+D4h] [ebp-4Ch] void *v106; // [esp+D8h] [ebp-48h] int v107; // [esp+E4h] [ebp-3Ch] unsigned int v108; // [esp+E8h] [ebp-38h] unsigned int v109; // [esp+ECh] [ebp-34h] int v110; // [esp+F0h] [ebp-30h] void *v111; // [esp+F4h] [ebp-2Ch] unsigned int v112; // [esp+104h] [ebp-1Ch] unsigned int v113; // [esp+108h] [ebp-18h] int v114; // [esp+11Ch] [ebp-4h] v2 = this; if ( a2 != -1 ) { v3 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( a2 <= *(_WORD *)(v3 + 200) ) { v4 = (int *)(*(_DWORD *)(v3 + 196) + 4 * a2); if ( *v4 ) v89 = *v4; else v89 = 0; } else { v89 = 0; } } else { v89 = 0; } v5 = v2[165]; v6 = v2[164]; v77 = v2 + 164; if ( v6 != v5 ) v2[165] = v6; sub_5AC5C0(v2 + 164, 0); v9 = *(void **)(v2[169] + 4); v10 = (char *)(v2 + 168); v85 = v10; sub_468BC0(v9); *(_DWORD *)(*((_DWORD *)v10 + 1) + 4) = *((_DWORD *)v10 + 1); **((_DWORD **)v10 + 1) = *((_DWORD *)v10 + 1); *(_DWORD *)(*((_DWORD *)v10 + 1) + 8) = *((_DWORD *)v10 + 1); *((_DWORD *)v10 + 2) = 0; v94 = 0; v11 = operator new(0x30u); if ( !v11 ) { v91 = 0; std::exception::exception((std::exception *)v84, (const char *const *)&v91); *(_DWORD *)v84 = &std::bad_alloc::`vftable'; _CxxThrowException(v84, &_TI2_AVbad_alloc_std__); } v93 = v11; *v11 = v11; *((_DWORD *)v93 + 1) = v93; *((_DWORD *)v93 + 2) = v93; *((_BYTE *)v93 + 44) = 1; *((_BYTE *)v93 + 45) = 1; v114 = 0; v88 = 0; v12 = operator new(0x1Cu); if ( !v12 ) { v76 = 0; std::exception::exception((std::exception *)&v71, (const char *const *)&v76); v71 = &std::bad_alloc::`vftable'; _CxxThrowException(&v71, &_TI2_AVbad_alloc_std__); } v87 = v12; *v12 = v12; *((_DWORD *)v87 + 1) = v87; *((_DWORD *)v87 + 2) = v87; *((_BYTE *)v87 + 26) = 1; *((_BYTE *)v87 + 27) = 1; v13 = (void *)*((_DWORD *)v93 + 1); LOBYTE(v114) = 1; sub_484780(v13); *((_DWORD *)v93 + 1) = v93; *(_DWORD *)v93 = v93; *((_DWORD *)v93 + 2) = v93; v94 = 0; v97 = 0; do { if ( v97 < 0x1E ) { v14 = dword_ADA534[v97]; v95 = v14; if ( v14 ) { v15 = dword_ACB230; v16 = *(unsigned __int16 *)(v14 + 8); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v16) ) { if ( (unsigned __int16)v16 <= *(_WORD *)(v15 + 200) ) { v17 = *(_DWORD *)(v15 + 196); if ( *(_DWORD *)(v17 + 4 * v16) ) { v18 = *(_DWORD *)(v17 + 4 * v16); if ( v18 ) { if ( *(_BYTE *)(v18 + 342) != 45 ) { v113 = 15; v112 = 0; LOBYTE(v111) = 0; sub_4018E0(&v111, (void *)(v18 + 342), strlen((const char *)(v18 + 342))); LOBYTE(v114) = 2; v19 = *sub_96AAE0(&v92, (int **)&v91, (int)&v111); if ( v19 == v93 ) { v108 = 15; v107 = 0; LOBYTE(v105) = 0; sub_4017F0((const void **)&v105, (const void **)&v111, 0, (void *)0xFFFFFFFF); v110 = 1; LOBYTE(v114) = 3; v20 = sub_8E6310(&v92, (char *)&v105); sub_5AC9E0(&v92, (int)&v78, v20, 0); if ( v108 >= 0x10 ) operator delete(v105); } else { ++v19[10]; } LOBYTE(v114) = 1; if ( v113 >= 0x10 ) operator delete(v111); } v21 = sub_4B1600(*(unsigned __int16 *)(v95 + 8)); if ( v21 ) { v22 = (_WORD *)sub_5A5F90(*(unsigned __int16 *)(v21 + 2)); v23 = v22; if ( v22 ) { v24 = sub_5AC310(&v86, (int **)v96, v22); if ( *v24 == v87 ) { v25 = v23[1]; *(_DWORD *)&v84[2] = *v23; *(_DWORD *)&v84[6] = v25; *(_WORD *)v84 = *(_WORD *)&v84[2]; *(_DWORD *)&v84[10] = v23[2]; sub_5AC4F0(&v86, (int)&v90, v84); } } } } } } } } } ++v97; } while ( (signed int)v97 < 30 ); v26 = *(_DWORD *)v93; v97 = v26; if ( (void *)v26 != v93 ) { while ( 1 ) { v109 = 15; v108 = 0; LOBYTE(v106) = 0; sub_4017F0((const void **)&v106, (const void **)(v26 + 12), 0, (void *)0xFFFFFFFF); LOBYTE(v114) = 4; v95 = 1; if ( *(_DWORD *)(v26 + 40) >= 1 ) break; LABEL_89: if ( !*(_BYTE *)(v26 + 45) ) { v55 = *(_DWORD *)(v26 + 8); if ( *(_BYTE *)(v55 + 45) ) { for ( i = *(_DWORD *)(v26 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( v26 != *(_DWORD *)(i + 8) ) break; v26 = i; } v26 = i; } else { for ( j = *(_DWORD *)v55; !*(_BYTE *)(j + 45); j = *(_DWORD *)j ) v55 = j; v26 = v55; } v97 = v26; } LOBYTE(v114) = 1; if ( v109 >= 0x10 ) operator delete(v106); if ( (void *)v26 == v93 ) goto LABEL_102; } while ( 1 ) { v90 = 0; if ( sub_549040() ) break; LABEL_88: if ( ++v95 > *(_DWORD *)(v26 + 40) ) goto LABEL_89; } v27 = v90; while ( 1 ) { v28 = (char *)sub_7474E0((_DWORD *)(dword_ACD97C + 4), v27); v29 = v28; if ( v28 ) break; LABEL_87: v27 = ++v90; if ( v27 >= sub_549040() ) goto LABEL_88; } v113 = 15; v112 = 0; LOBYTE(v111) = 0; sub_4018E0(&v111, v28, strlen(v28)); v30 = *(_DWORD *)(v26 + 28); v31 = (unsigned __int8 *)(v26 + 12); if ( *(_DWORD *)(v26 + 32) >= 0x10u ) v31 = *(unsigned __int8 **)v31; if ( v112 < v30 ) v30 = v112; v32 = (unsigned __int8 *)v111; if ( v113 < 0x10 ) v32 = (unsigned __int8 *)&v111; v33 = v31; if ( v30 < 4 ) { LABEL_48: if ( !v30 ) { LABEL_58: v35 = 0; goto LABEL_59; } } else { while ( *(_DWORD *)v32 == *(_DWORD *)v33 ) { v30 -= 4; v33 += 4; v32 += 4; if ( v30 < 4 ) goto LABEL_48; } } v34 = *v32 - *v33; if ( *v32 == *v33 ) { if ( v30 <= 1 ) goto LABEL_57; v34 = v32[1] - v33[1]; if ( v32[1] != v33[1] ) goto LABEL_56; if ( v30 <= 2 ) { LABEL_57: v26 = v97; goto LABEL_58; } v34 = v32[2] - v33[2]; if ( v32[2] == v33[2] ) { if ( v30 > 3 ) { v34 = v32[3] - v33[3]; goto LABEL_56; } goto LABEL_57; } } LABEL_56: v26 = v97; v35 = (v34 >> 31) | 1; LABEL_59: v36 = v35 == 0; if ( !v35 ) { v37 = *(_DWORD *)(v26 + 28); if ( v112 >= v37 ) v38 = v112 != v37; else v38 = -1; v36 = v38 == 0; } if ( v36 && (unsigned __int8)v29[32] == v95 ) { v83 = 0; v81 = 0; v82 = 0; v80 = &NiTList::`vftable'; v39 = *(unsigned __int16 *)(v29 + 33); LOBYTE(v114) = 6; sub_5ABA90(&v80, v39); v40 = v81; v41 = (char *)v81; if ( v81 ) { do { v42 = (int *)*((_DWORD *)v41 + 2); v41 = *(char **)v41; v91 = v41; if ( v42 ) { v43 = *v42; *(_WORD *)v72 = *(_WORD *)(v29 + 33); v44 = v42[1]; v73 = v43; v45 = v42[2]; v74 = v44; v75 = v45; v46 = sub_5AC470(&v86, v72); v47 = v87; v48 = (_DWORD *)*((_DWORD *)v87 + 1); v36 = *((_BYTE *)v48 + 27) == 0; v96[0] = 1; if ( v36 ) { v49 = v46[6]; do { v47 = v48; v96[0] = v49 < *((_WORD *)v48 + 6); if ( v96[0] ) v48 = (_DWORD *)*v48; else v48 = (_DWORD *)v48[2]; } while ( !*((_BYTE *)v48 + 27) ); v41 = v91; } sub_5ABDB0(&v86, (int)&v79, v96[0], (int)v47, v46); if ( sub_548FB0(v29) ) { v50 = (void *)(sub_548FB0(v29) + 32); v100 = 15; v99 = 0; LOBYTE(v98) = 0; sub_4018E0(&v98, v50, strlen((const char *)v50)); v51 = *(_WORD *)(v29 + 33); LOBYTE(v114) = 7; *(_WORD *)v101 = v51; v104 = 15; v103 = 0; LOBYTE(v102) = 0; sub_4017F0((const void **)&v102, (const void **)&v98, 0, (void *)0xFFFFFFFF); v52 = v85; LOBYTE(v114) = 8; v53 = sub_5ACB10(v85, v101); sub_5AC8E0(v52, (int)&v84[4], v53, 0); if ( v104 >= 0x10 ) operator delete(v102); LOBYTE(v114) = 6; if ( v100 >= 0x10 ) operator delete(v98); } } } while ( v41 ); v40 = v81; } v80 = &NiTPointerListBase,ItemAction *>::`vftable'; LOBYTE(v114) = 9; while ( v40 ) { v54 = v40; v40 = (_DWORD *)*v40; ((void (__thiscall *)(void ***, _DWORD *))v80[2])(&v80, v54); } v26 = v97; v83 = 0; v81 = 0; v82 = 0; v80 = &NiTListBase,ItemAction *>::`vftable'; } LOBYTE(v114) = 4; if ( v113 >= 0x10 ) operator delete(v111); goto LABEL_87; } LABEL_102: if ( v88 ) { v58 = 0; *(_DWORD *)v96 = 0; if ( sub_5ABC80() ) { do { v59 = (const char *)sub_7474E0((_DWORD *)(dword_ACD9B8 + 4), v58); v85 = (char *)v59; if ( v59 ) { if ( !strcmp(v59, (const char *)(v89 + 2)) ) { v60 = *(_DWORD **)v87; if ( *(void **)v87 != v87 ) { do { v61 = *(_DWORD *)((char *)v60 + 18); v62 = *(_DWORD *)((char *)v60 + 22); *(_DWORD *)v84 = *(_DWORD *)((char *)v60 + 14); *(_QWORD *)&v84[4] = __PAIR__(v62, v61); v63 = 0; if ( sub_5ABA50() ) { while ( 1 ) { v64 = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD98C + 4), v63); if ( v64 ) { if ( *v64 == *(_WORD *)&v84[2] ) break; } if ( ++v63 >= sub_5ABA50() ) goto LABEL_111; } v65 = sub_7474E0((_DWORD *)(dword_ACD98C + 4), v63); } else { LABEL_111: v65 = 0; } if ( *(_DWORD *)(v65 + 18) == 7 && *((_DWORD *)v85 + 8) == *(_DWORD *)(v65 + 22) ) sub_8D6FD0(v77, (_DWORD *)((char *)v60 + 14)); if ( !*((_BYTE *)v60 + 27) ) { v66 = (int *)v60[2]; if ( *((_BYTE *)v66 + 27) ) { for ( k = v60[1]; !*(_BYTE *)(k + 27); k = *(_DWORD *)(k + 4) ) { if ( v60 != *(_DWORD **)(k + 8) ) break; v60 = (_DWORD *)k; } v60 = (_DWORD *)k; } else { v67 = (int *)*v66; if ( !*(_BYTE *)(*v66 + 27) ) { do { v66 = v67; v67 = (int *)*v67; } while ( !*((_BYTE *)v67 + 27) ); } v60 = v66; } } } while ( v60 != v87 ); v58 = *(_DWORD *)v96; } } } *(_DWORD *)v96 = ++v58; } while ( v58 < sub_5ABC80() ); } } v69 = *(_DWORD **)v87; LOBYTE(v114) = 10; sub_5AC3D0(&v86, &v79, v69, v87); operator delete(v87); v70 = *(_DWORD *)v93; v114 = 11; sub_4847E0(&v92, &v79, v70, (int)v93); operator delete(v93); } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9DBB0C: using guessed type void *NiTListBase,ItemAction *>::`vftable'; // 9DBB1C: using guessed type void *NiTPointerListBase,ItemAction *>::`vftable'; // 9DBB2C: using guessed type void *NiTList::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACB230: using guessed type int dword_ACB230; // ACD97C: using guessed type int dword_ACD97C; // ACD98C: using guessed type int dword_ACD98C; // ACD9B8: using guessed type int dword_ACD9B8; // ACE8D0: using guessed type int dword_ACE8D0; // ADA534: using guessed type int dword_ADA534[]; //----- (005A9570) -------------------------------------------------------- int __thiscall sub_5A9570(unsigned int *this, unsigned __int16 a2, char a3, int *a4, char a5) { unsigned int *v5; // esi int v6; // ebx int v7; // ebx int v8; // ebx int v9; // edx unsigned __int8 (__stdcall *v10)(_DWORD); // edx _DWORD *v11; // eax int v12; // edi int v13; // ebx const CHAR *v14; // eax int v15; // edi const CHAR *v16; // eax int v17; // ecx bool v18; // zf int *v19; // eax const CHAR *v20; // eax void (__stdcall *v21)(const char *); // eax int v22; // edi const CHAR *v23; // eax void (__stdcall *v24)(const char *); // edx int v25; // edi const char *v26; // eax void (__stdcall *v27)(int *); // edx void (__stdcall *v28)(const char *); // edx unsigned int v29; // eax const char *v30; // eax _BYTE *v31; // eax _BYTE *v32; // ecx char v33; // dl char v34; // al char v35; // dl char v36; // al char v37; // dl char v38; // cl __int16 *v39; // eax __int16 v40; // bx unsigned int v41; // edi int v42; // eax int *v43; // edi int v44; // ST6C_4 char *v45; // eax char *v46; // eax int *v48; // eax signed __int64 v49; // rax int v50; // edi signed __int64 v51; // rax bool v52; // al int v53; // edx int *v54; // ebx int v55; // edi const CHAR *v56; // eax signed int v57; // ebx int v58; // edi const CHAR *v59; // eax void (__stdcall *v60)(const char *); // edx int v61; // edi char *v62; // eax char *v63; // eax int v64; // ST6C_4 const char *v65; // eax void (__stdcall *v66)(int *); // eax int v67; // eax int v68; // ebx int v69; // edi const CHAR *v70; // eax int v71; // ecx int v72; // edi const CHAR *v73; // eax int v74; // ecx char *v75; // edi char *v76; // ecx int v77; // eax unsigned int v78; // edx char *v79; // ecx char *v80; // edi int v81; // ST6C_4 int v82; // ST68_4 char *v83; // eax char *v84; // eax int v85; // ST6C_4 char *v86; // eax int v87; // edi int v88; // ST6C_4 int v89; // ST68_4 char *v90; // eax char *v91; // eax int v92; // edi int v93; // ST6C_4 char *v94; // eax char *v95; // eax unsigned int v96; // ecx int v97; // edi unsigned int v98; // ST6C_4 char *v99; // eax char *v100; // eax unsigned int v101; // ecx int v102; // edi unsigned int v103; // ST6C_4 char *v104; // eax char *v105; // eax int v106; // edi int v107; // ST6C_4 char *v108; // eax char *v109; // eax unsigned __int8 v110; // cl int v111; // edi int v112; // ST6C_4 char *v113; // eax char *v114; // eax void (__stdcall *v115)(const char *); // edx int v116; // eax int v117; // ebx char *v118; // edi int v119; // ecx unsigned int v120; // ebx int v121; // eax int v122; // ecx char *v123; // ecx unsigned int v124; // edx CHAR *v125; // eax char *v126; // eax char *v127; // edi void *v128; // eax char *v129; // eax void *v130; // eax char *v131; // edx unsigned int v132; // eax char *v133; // edi char v134; // cl void *v135; // eax char *v136; // ecx char *v137; // esi char v138; // cl char *v139; // ecx char v140; // cl void *v141; // eax char v142; // cl char *v143; // edi int v144; // ecx unsigned int v145; // ebx unsigned int v146; // edi unsigned __int16 *v147; // eax int v148; // eax unsigned int v149; // edx char *v150; // ecx char *v151; // eax char v152; // cl char *v153; // eax char *v154; // edi const CHAR *v155; // ST64_4 double v156; // ST5C_8 const CHAR *v157; // eax char *v158; // eax const CHAR *v159; // ST68_4 double v160; // ST60_8 const CHAR *v161; // eax char *v162; // edx unsigned int v163; // eax char *v164; // edi char v165; // cl const CHAR *v166; // eax char v167; // cl const CHAR *v168; // eax char v169; // cl char *v170; // eax char v171; // cl const CHAR *v172; // ST68_4 double v173; // ST60_8 const CHAR *v174; // eax char *v175; // ecx unsigned int v176; // eax char *v177; // esi char *v178; // edi char v179; // cl const CHAR *v180; // ST6C_4 double v181; // ST64_8 const CHAR *v182; // eax char *v183; // ecx unsigned int v184; // eax char *v185; // esi char *v186; // edi char v187; // cl const CHAR *v188; // eax char v189; // cl char *v190; // edi char v191; // al int v192; // ebx void (__stdcall *v193)(void *); // eax unsigned int v194; // eax int v195; // edi void *v196; // eax int v197; // ecx void (__thiscall *v198)(int, void *); // edx double v199; // ST68_8 const char *v200; // eax unsigned int v201; // eax int v202; // ebx const CHAR *v203; // ST64_4 double v204; // ST68_8 const CHAR *v205; // ST64_4 char *v206; // edi char *v207; // ecx unsigned int v208; // edi unsigned __int16 *v209; // eax int v210; // eax unsigned int v211; // edx char *v212; // ecx char *v213; // eax const char *v214; // esi char *v215; // eax char *v216; // ST6C_4 char *v217; // ST68_4 char *v218; // eax char *v219; // eax char *v220; // ST6C_4 char *v221; // eax int *v222; // eax int v223; // edi char *v224; // eax char *v225; // ST6C_4 char *v226; // ST68_4 char *v227; // eax char *v228; // ST6C_4 signed int v229; // ST6C_4 char *v230; // ST6C_4 char *v231; // eax char *v232; // eax int v233; // eax int v234; // ebx int *v235; // eax int v236; // edi const CHAR *v237; // ST6C_4 const CHAR *v238; // eax char *v239; // eax int *v240; // eax int v241; // edi const CHAR *v242; // ST6C_4 const CHAR *v243; // eax char *v244; // eax int v245; // ecx int *v246; // eax int v247; // edi const CHAR *v248; // ST6C_4 const CHAR *v249; // eax char *v250; // eax int *v251; // eax const CHAR *v252; // ST6C_4 const CHAR *v253; // eax const CHAR *v254; // ST6C_4 const CHAR *v255; // eax char *v256; // eax int *v257; // eax const CHAR *v258; // ST6C_4 const CHAR *v259; // eax int *v260; // eax int v261; // edi const CHAR *v262; // ST6C_4 const CHAR *v263; // eax char *v264; // eax int *v265; // eax const CHAR *v266; // ST6C_4 const CHAR *v267; // eax void (__stdcall *v268)(const char *); // eax double v269; // [esp+68h] [ebp-2B8h] bool v270; // [esp+83h] [ebp-29Dh] int v271; // [esp+84h] [ebp-29Ch] signed __int64 v272; // [esp+88h] [ebp-298h] __int16 *v273; // [esp+8Ch] [ebp-294h] int v274; // [esp+8Ch] [ebp-294h] int v275; // [esp+8Ch] [ebp-294h] float v276; // [esp+8Ch] [ebp-294h] unsigned int v277; // [esp+8Ch] [ebp-294h] unsigned int *v278; // [esp+90h] [ebp-290h] unsigned int v279; // [esp+90h] [ebp-290h] unsigned int v280; // [esp+98h] [ebp-288h] unsigned int v281; // [esp+98h] [ebp-288h] int v282; // [esp+98h] [ebp-288h] int v283; // [esp+98h] [ebp-288h] unsigned int v284; // [esp+9Ch] [ebp-284h] int v285; // [esp+9Ch] [ebp-284h] int v286; // [esp+9Ch] [ebp-284h] int v287; // [esp+A0h] [ebp-280h] int v288; // [esp+A4h] [ebp-27Ch] bool v289; // [esp+AAh] [ebp-276h] bool v290; // [esp+ABh] [ebp-275h] int v291; // [esp+ACh] [ebp-274h] char v292; // [esp+B0h] [ebp-270h] char v293; // [esp+1B0h] [ebp-170h] char v294; // [esp+1B1h] [ebp-16Fh] char v295; // [esp+2AFh] [ebp-71h] int v296; // [esp+2B0h] [ebp-70h] int v297; // [esp+2B4h] [ebp-6Ch] char v298; // [esp+2B8h] [ebp-68h] int v299; // [esp+2F0h] [ebp-30h] void *v300; // [esp+2F4h] [ebp-2Ch] int v301; // [esp+2F8h] [ebp-28h] int v302; // [esp+2FCh] [ebp-24h] int v303; // [esp+300h] [ebp-20h] int v304; // [esp+304h] [ebp-1Ch] unsigned int v305; // [esp+308h] [ebp-18h] int v306; // [esp+30Ch] [ebp-14h] int v307; // [esp+31Ch] [ebp-4h] v5 = this; v278 = this; sub_5A60A0((_DWORD **)this); v6 = (int)(v5 + 104); v291 = 60; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v6 + 472))(&unk_9DB7C3); (*(void (__stdcall **)(int *))(**(_DWORD **)v6 + 468))(&dword_AA8C68); v6 += 4; --v291; } while ( *(float *)&v291 != 0.0 ); if ( a2 == -1 ) return 0; sub_5A8AE0(v5, a2); v7 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( a2 <= *(_WORD *)(v7 + 200) ) { v9 = *(_DWORD *)(v7 + 196); v8 = *(_DWORD *)(v9 + 4 * a2) ? *(_DWORD *)(v9 + 4 * a2) : 0; } else { v8 = 0; } } else { v8 = 0; } v10 = *(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACEA9C + 16); v287 = v8; v291 = dword_ACEA9C; if ( v10(a2) ) { if ( a2 <= *(_WORD *)(v291 + 200) ) { v11 = (_DWORD *)(*(_DWORD *)(v291 + 196) + 4 * a2); v271 = *v11 ? *v11 : 0; } else { v271 = 0; } } else { v271 = 0; } if ( !v8 || !v271 ) return 0; if ( a2 < 0x4E20u ) { v285 = 0; if ( a3 ) { v48 = a4; if ( !a4 ) v48 = (int *)sub_6BFA60((int)&v291, a2); v285 = *v48; } v270 = *(_DWORD *)(v271 + 839) <= sub_680890((unsigned __int8 *)byte_AD9238); v49 = sub_6622F0(*(_DWORD *)(v8 + 267)); v50 = v49; v272 = v49; v51 = 1i64 << sub_6807E0(byte_AD9238); v289 = 1; if ( !__PAIR__(HIDWORD(v272) & HIDWORD(v51), v50 & (unsigned int)v51) ) v289 = 0; v52 = sub_685240(&byte_ADA230, *(_DWORD *)(v8 + 110)); v53 = *(_DWORD *)v5[104]; v290 = v52; (*(void (__stdcall **)(int))(v53 + 472))(v8 + 34); (*(void (__stdcall **)(int *))(*(_DWORD *)v5[104] + 468))(&dword_AA8C68); v54 = (int *)v5[105]; v55 = *v54; v56 = sub_40C190(608276650); (*(void (__thiscall **)(int *, const CHAR *))(v55 + 472))(v54, v56); v57 = 2; if ( strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[105] + 484))(), " ") ) { v57 = 3; (*(void (__stdcall **)(const char *))(*(_DWORD *)v5[106] + 472))(" "); } if ( sub_6BE330(a2) && a5 ) { v58 = *(_DWORD *)v5[v57 + 104]; v291 = v5[v57 + 104]; v59 = sub_40C190(-1555951628); (*(void (__thiscall **)(int, const CHAR *))(v58 + 472))(v291, v59); (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v57++ + 104] + 468))(&dword_AA8C88); } if ( v57 > 0 && strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[v57 + 103] + 484))(), " ") ) { v60 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[v57++ + 104] + 472); v60(" "); } sub_662570(v272, &v292, 0x100u); v61 = *(_DWORD *)v5[v57 + 104]; v291 = v5[v57 + 104]; v62 = (char *)sub_40C190(-1611269140); v63 = sub_7549E0(v62, &v292); (*(void (__thiscall **)(int, char *))(v61 + 472))(v291, v63); if ( !v289 ) (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v57 + 104] + 468))(&dword_AA8C88); v64 = *(_DWORD *)(v271 + 839); v65 = sub_40C190(-1728582399); sprintf(&v292, v65, v64); (*(void (__stdcall **)(char *))(*(_DWORD *)v5[v57 + 105] + 472))(&v292); v66 = *(void (__stdcall **)(int *))(*(_DWORD *)v5[v57 + 105] + 468); if ( v270 ) v66(&dword_AA8C68); else v66(&dword_AA8C88); v67 = *(_DWORD *)(v287 + 110); v68 = v57 + 2; switch ( v67 ) { case 2: LABEL_114: *(float *)&v291 = 0.0; if ( BYTE1(v285) ) v291 = *(int *)(v287 + 4 * SBYTE1(v285) + 463); v75 = (char *)v5[164]; v76 = (char *)v5[165]; v274 = 0; v289 = 0; v281 = 0; if ( !((v76 - v75) / 12) ) goto LABEL_317; v288 = 0; do { v77 = sub_5ABB10(*(unsigned __int16 *)&v75[v288 + 4]); if ( v77 && *(_DWORD *)(v77 + 10) == 5 && *(_DWORD *)(v77 + 14) == 3 ) { v78 = (signed int)((unsigned __int64)(1717986919i64 * (1000 - *(unsigned __int16 *)(v77 + 18))) >> 32) >> 2; v274 += v78 + (v78 >> 31); v289 = 1; } v75 = (char *)v5[164]; v79 = (char *)v5[165]; ++v281; v288 += 12; } while ( v281 < (v79 - v75) / 12 ); if ( !v289 ) { LABEL_317: if ( *(float *)&v291 == 0.0 ) { if ( *(_DWORD *)(v287 + 160) ) { v92 = *(_DWORD *)v5[v68 + 104]; v93 = *(_DWORD *)(v287 + 160); v291 = v5[v68++ + 104]; v94 = (char *)sub_40C190(-167311582); v95 = sub_7549E0(v94, v93); (*(void (__thiscall **)(int, char *))(v92 + 472))(v291, v95); } LABEL_139: v96 = *(_DWORD *)(v287 + 164); if ( v96 ) { v97 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v98 = v96 / 0xA; v99 = (char *)sub_40A910(945653658); v100 = sub_7549E0(v99, v98); (*(void (__thiscall **)(int, char *))(v97 + 472))(v291, v100); ++v68; } v101 = *(_DWORD *)(v287 + 172); if ( v101 ) { v102 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v103 = v101 / 0xA; v104 = (char *)sub_40A910(945653647); v105 = sub_7549E0(v104, v103); (*(void (__thiscall **)(int, char *))(v102 + 472))(v291, v105); ++v68; } if ( *(_DWORD *)(v287 + 176) ) { v106 = *(_DWORD *)v5[v68 + 104]; v107 = *(_DWORD *)(v287 + 176); v291 = v5[v68++ + 104]; v108 = (char *)sub_4090F0(-1935026462); v109 = sub_7549E0(v108, v107); (*(void (__thiscall **)(int, char *))(v106 + 472))(v291, v109); } v110 = *(_BYTE *)(v287 + 668); if ( v110 ) { v111 = *(_DWORD *)v5[v68 + 104]; v112 = v110; v291 = v5[v68++ + 104]; v113 = (char *)sub_40A910(-151985167); v114 = sub_7549E0(v113, v112); (*(void (__thiscall **)(int, char *))(v111 + 472))(v291, v114); } if ( v68 > 0 && strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[v68 + 103] + 484))(), " ") ) { v115 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[v68++ + 104] + 472); v115(" "); } v116 = sub_5A7780((_DWORD **)v5, v287, v68); v117 = sub_5A7920((_DWORD **)v5, v287, v116); v18 = *(_BYTE *)(v271 + 843) == 45; v288 = v117; if ( v18 ) goto LABEL_261; sub_5A7C80((_DWORD **)v5, (const CHAR *)(v271 + 843), &v288, (int)&dword_AA8C68); v118 = (char *)v5[164]; v297 = 673194016; v298 = 0; v119 = v5[165] - (_DWORD)v118; v296 = 538976288; v120 = 0; v290 = 0; v275 = 0; v289 = 0; if ( v119 / 12 ) { *(float *)&v291 = 0.0; do { v121 = sub_5ABB10(*(unsigned __int16 *)&v118[v291 + 4]); if ( v121 ) { if ( *(_DWORD *)(v121 + 10) == 5 ) { v122 = *(_DWORD *)(v121 + 14); if ( !v122 || v122 == 11 ) { v275 += (*(unsigned __int16 *)(v121 + 18) - 1000) / 10; v289 = 1; } } } v118 = (char *)v5[164]; v123 = (char *)v5[165]; v291 += 12; v124 = (signed int)((unsigned __int64)(715827883i64 * (v123 - v118)) >> 32) >> 1; ++v120; } while ( v120 < v124 + (v124 >> 31) ); } v305 = 15; v304 = 0; LOBYTE(v300) = 0; v18 = *(_DWORD *)(v287 + 527) == 5; v307 = 0; if ( v18 ) v125 = (CHAR *)sub_40A910(660292493); else v125 = (CHAR *)sub_40C190(1228049315); sub_4018E0(&v300, v125, strlen(v125)); if ( v289 ) { if ( v275 <= 0 ) v126 = sub_7549E0("%d%%", v275); else v126 = sub_7549E0("+%d%%", v275); v127 = v126; v293 = 0; if ( (_BYTE)v285 ) { memset(&v294, 0, 0xFFu); v18 = sub_5A6C50(a2, &v293) == 0; v128 = v300; if ( v18 ) { if ( v305 < 0x10 ) v128 = &v300; v129 = sub_7549E0("%s +%d %s", v128, *(_DWORD *)(v287 + 4 * (char)v285 + 443), v127); } else { if ( v305 < 0x10 ) v128 = &v300; v129 = sub_7549E0("%s +%d %s +%s", v128, *(_DWORD *)(v287 + 4 * (char)v285 + 443), v127, &v293); } } else { memset(&v294, 0, 0xFFu); v18 = sub_5A6C50(a2, &v293) == 0; v130 = v300; if ( v18 ) { if ( v305 < 0x10 ) v130 = &v300; v129 = sub_7549E0("%s %s", v130, v127); } else { if ( v305 < 0x10 ) v130 = &v300; v129 = sub_7549E0("%s %s +%s", v130, v127, &v293); } } v131 = v129; v132 = strlen(v129) + 1; v133 = &v295; do v134 = (v133++)[1]; while ( v134 ); } else { v293 = 0; if ( (_BYTE)v285 ) { memset(&v294, 0, 0xFFu); v18 = sub_5A6C50(a2, &v293) == 0; v135 = v300; if ( v18 ) { if ( v305 < 0x10 ) v135 = &v300; v139 = sub_7549E0("%s +%d", v135, *(_DWORD *)(v287 + 4 * (char)v285 + 443)); v132 = strlen(v139) + 1; v137 = v139; v133 = &v295; do v140 = (v133++)[1]; while ( v140 ); } else { if ( v305 < 0x10 ) v135 = &v300; v136 = sub_7549E0("%s +%d +%s", v135, *(_DWORD *)(v287 + 4 * (char)v285 + 443), &v293); v132 = strlen(v136) + 1; v137 = v136; v133 = &v295; do v138 = (v133++)[1]; while ( v138 ); } goto LABEL_202; } memset(&v294, 0, 0xFFu); if ( sub_5A6EE0(a2, &v293) != 1 ) { LABEL_203: v143 = (char *)v5[164]; v276 = 0.0; v144 = v5[165] - (_DWORD)v143; v145 = 0; v289 = 0; if ( !(v144 / 12) ) goto LABEL_318; *(float *)&v291 = 0.0; do { v282 = *(unsigned __int16 *)&v143[v291 + 4]; v146 = 0; if ( sub_5ABA30() ) { while ( 1 ) { v147 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD988 + 4), v146); if ( v147 ) { if ( *v147 == v282 ) break; } if ( ++v146 >= sub_5ABA30() ) goto LABEL_214; } v148 = sub_7474E0((_DWORD *)(dword_ACD988 + 4), v146); if ( v148 && *(_DWORD *)(v148 + 10) == 5 && *(_DWORD *)(v148 + 14) == 2 ) { v149 = (signed int)((unsigned __int64)(1717986919i64 * (*(unsigned __int16 *)(v148 + 18) - 1000)) >> 32) >> 2; v289 = 1; v276 = (double)(signed int)(v149 + (v149 >> 31)) + v276; } } LABEL_214: v143 = (char *)v5[164]; v150 = (char *)v5[165]; v291 += 12; ++v145; } while ( v145 < (v150 - v143) / 12 ); if ( v289 ) { if ( v290 ) { v151 = &v295; do v152 = (v151++)[1]; while ( v152 ); *(_WORD *)v151 = 11296; v151[2] = 0; } v269 = v276; if ( v276 <= 0.0 ) v153 = sub_7549E0(" %.1f%%", v269); else v153 = sub_7549E0(" +%.1f%%", v269); v154 = v153; v293 = 0; if ( BYTE2(v285) ) { memset(&v294, 0, 0xFFu); if ( sub_5A6C50(a2, &v293) ) { v155 = sub_40C190(1398770841); v156 = (double)*(unsigned int *)(v287 + 4 * SBYTE2(v285) + 483) / 1000.0; v157 = sub_40C190(-330414791); v158 = sub_7549E0("%s +%.1f%s %s +%s", v157, v156, v155, v154, &v293); } else { v159 = sub_40C190(1398770841); v160 = (double)*(unsigned int *)(v287 + 4 * SBYTE2(v285) + 483) / 1000.0; v161 = sub_40C190(-330414791); v158 = sub_7549E0("%s +%.1f%s %s", v161, v160, v159, v154); } v162 = v158; v163 = strlen(v158) + 1; v164 = &v295; do v165 = (v164++)[1]; while ( v165 ); } else { memset(&v294, 0, 0xFFu); if ( sub_5A6C50(a2, &v293) ) { v166 = sub_40C190(-330414791); v162 = sub_7549E0("%s %s +%s", v166, v154, &v293); v163 = strlen(v162) + 1; v164 = &v295; do v167 = (v164++)[1]; while ( v167 ); } else { v168 = sub_40C190(-330414791); v162 = sub_7549E0("%s %s", v168, v154); v163 = strlen(v162) + 1; v164 = &v295; do v169 = (v164++)[1]; while ( v169 ); } } } else { LABEL_318: if ( BYTE2(v285) ) { if ( v290 ) { v170 = &v295; do v171 = (v170++)[1]; while ( v171 ); *(_WORD *)v170 = 11296; v170[2] = 0; } v293 = 0; memset(&v294, 0, 0xFFu); if ( sub_5A6C50(a2, &v293) ) { v172 = sub_40C190(1398770841); v173 = (double)*(unsigned int *)(v287 + 4 * SBYTE2(v285) + 483) / 1000.0; v174 = sub_40C190(-330414791); v175 = sub_7549E0("%s +%.1f%s +%s", v174, v173, v172, &v293); v176 = strlen(v175) + 1; v177 = v175; v178 = &v295; do v179 = (v178++)[1]; while ( v179 ); qmemcpy(v178, v177, v176); } else { v180 = sub_40C190(1398770841); v181 = (double)*(unsigned int *)(v287 + 4 * SBYTE2(v285) + 483) / 1000.0; v182 = sub_40C190(-330414791); v183 = sub_7549E0("%s +%.1f%s", v182, v181, v180); v184 = strlen(v183) + 1; v185 = v183; v186 = &v295; do v187 = (v186++)[1]; while ( v187 ); qmemcpy(v186, v185, v184); } goto LABEL_254; } v293 = 0; memset(&v294, 0, 0xFFu); if ( sub_5A6EE0(a2, &v293) != 2 ) { if ( !v290 ) { v117 = v288; LABEL_258: v307 = -1; if ( v305 >= 0x10 ) operator delete(v300); v5 = v278; v305 = 15; v304 = 0; LOBYTE(v300) = 0; LABEL_261: if ( v117 > 0 && strcmp( (const char *)(*(int (**)(void))(*(_DWORD *)v5[v117 + 103] + 484))(), (const char *)&unk_9DB920) ) { v193 = *(void (__stdcall **)(void *))(*(_DWORD *)v5[v117++ + 104] + 472); v193(&unk_9DB924); } v194 = *(_DWORD *)(v287 + 203); if ( v194 ) { *(float *)&v291 = (double)v194 / 1000.0; v199 = *(float *)&v291; v200 = sub_40C190(725590162); sprintf(&v292, v200, v199); v197 = v5[v117 + 104]; v198 = *(void (__thiscall **)(int, void *))(*(_DWORD *)v197 + 472); v196 = &v292; } else { v195 = *(_DWORD *)v5[v117 + 104]; v291 = v5[v117 + 104]; v196 = (void *)sub_40C190(1987376357); v197 = v291; v198 = *(void (__thiscall **)(int, void *))(v195 + 472); } v198(v197, v196); v201 = *(_DWORD *)(v287 + 180); v202 = v117 + 1; if ( v201 ) { v291 = *(int *)(v287 + 180); v204 = (double)v201 / 50.0 * 1.5; v205 = sub_40C190(595763859); sprintf(&v292, "%s%.1fm", v205, v204); } else { v203 = sub_40C190(595763859); sprintf(&v292, "%s%.1fm", v203, 1.5); } (*(void (__stdcall **)(char *))(*(_DWORD *)v5[v202 + 104] + 472))(&v292); v288 = 0; if ( HIBYTE(v285) ) v288 = *(_DWORD *)(v287 + 4 * SHIBYTE(v285) + 503); v206 = (char *)v5[164]; v207 = (char *)v5[165]; v283 = 0; v289 = 0; v277 = 0; if ( !((v207 - v206) / 12) ) goto LABEL_319; *(float *)&v291 = 0.0; do { v286 = *(unsigned __int16 *)&v206[v291 + 4]; v208 = 0; if ( sub_5ABA30() ) { while ( 1 ) { v209 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD988 + 4), v208); if ( v209 ) { if ( *v209 == v286 ) break; } if ( ++v208 >= sub_5ABA30() ) goto LABEL_283; } v210 = sub_7474E0((_DWORD *)(dword_ACD988 + 4), v208); if ( v210 && *(_DWORD *)(v210 + 10) == 5 && *(_DWORD *)(v210 + 14) == 1 ) { v211 = (signed int)((unsigned __int64)(1717986919i64 * (*(unsigned __int16 *)(v210 + 18) - 1000)) >> 32) >> 2; v283 += v211 + (v211 >> 31); v289 = 1; } } LABEL_283: v206 = (char *)v5[164]; v212 = (char *)v5[165]; ++v277; v291 += 12; } while ( v277 < (v212 - v206) / 12 ); if ( v289 ) { if ( v283 <= 0 ) v213 = sub_7549E0(" %d%%", v283); else v213 = sub_7549E0(" +%d%%", v283); v214 = v213; if ( v288 ) { v215 = sub_5A6AA0(v288); v216 = sub_7549E0("%s", v215); v217 = sub_5A6AA0(*(_DWORD *)(v287 + 207)); v218 = (char *)sub_40C190(-1869053764); v219 = sub_7549E0(v218, v217, v216); } else { v220 = sub_5A6AA0(*(_DWORD *)(v287 + 207)); v221 = (char *)sub_40C190(-1869053763); v219 = sub_7549E0(v221, v220); } strcat(v219, v214); v5 = v278; (*(void (__stdcall **)(char *))(*(_DWORD *)v278[v202 + 105] + 472))(v219); } else { LABEL_319: v222 = (int *)v5[v202 + 105]; v223 = *v222; if ( !v288 ) { v229 = *(_DWORD *)(v287 + 207); v291 = v5[v202 + 105]; v230 = sub_5A6AA0(v229); v231 = (char *)sub_40C190(-1869053763); v232 = sub_7549E0(v231, v230); (*(void (__thiscall **)(int, char *))(v223 + 472))(v291, v232); goto LABEL_296; } v291 = v5[v202 + 105]; v224 = sub_5A6AA0(v288); v225 = sub_7549E0("%s", v224); v226 = sub_5A6AA0(*(_DWORD *)(v287 + 207)); v227 = (char *)sub_40C190(-1869053764); v228 = sub_7549E0(v227, v226, v225); (*(void (__stdcall **)(char *))(v223 + 472))(v228); } (*(void (__thiscall **)(unsigned int, int *))(*(_DWORD *)v5[v202 + 105] + 468))( v5[v202 + 105], &dword_AA8CB8); LABEL_296: v233 = *(_DWORD *)(v287 + 184); v234 = v202 + 2; v288 = v234; switch ( v233 ) { case 0: v235 = (int *)v5[v234 + 104]; v236 = *v235; ++v234; v291 = (int)v235; v288 = v234; v237 = sub_40C190(-414955730); v238 = sub_40C190(-247452859); v239 = sub_7549E0("%s: %s", v238, v237); (*(void (__thiscall **)(int, char *))(v236 + 472))(v291, v239); break; case 1: v240 = (int *)v5[v234 + 104]; v241 = *v240; ++v234; v291 = (int)v240; v288 = v234; v242 = sub_40C190(-554435863); v243 = sub_40C190(-247452859); v244 = sub_7549E0("%s: %s", v243, v242); v245 = v291; goto LABEL_306; case 2: v246 = (int *)v5[v234 + 104]; v247 = *v246; ++v234; v291 = (int)v246; v288 = v234; v248 = sub_40C190(-632336837); v249 = sub_40C190(-247452859); v250 = sub_7549E0("%s: %s", v249, v248); (*(void (__thiscall **)(int, char *))(v247 + 472))(v291, v250); break; case 3: v18 = strcmp((const char *)(v287 + 2), "Revival01") == 0; v251 = (int *)v5[v234 + 104]; v241 = *v251; if ( v18 ) { ++v234; v291 = (int)v251; v288 = v234; v252 = sub_40C190(-775886886); v253 = sub_40C190(-247452859); v244 = sub_7549E0("%s: %s", v253, v252); v245 = v291; LABEL_306: (*(void (__thiscall **)(int, char *))(v241 + 472))(v245, v244); } else { ++v234; v291 = (int)v251; v288 = v234; v254 = sub_40C190(792346418); v255 = sub_40C190(-247452859); v256 = sub_7549E0("%s: %s", v255, v254); (*(void (__thiscall **)(int, char *))(v241 + 472))(v291, v256); } break; case 4: v257 = (int *)v5[v234 + 104]; v241 = *v257; ++v234; v291 = (int)v257; v288 = v234; v258 = sub_40C190(-369537480); v259 = sub_40C190(-247452859); v244 = sub_7549E0("%s: %s", v259, v258); v245 = v291; goto LABEL_306; case 5: v260 = (int *)v5[v234 + 104]; v261 = *v260; ++v234; v291 = (int)v260; v288 = v234; v262 = sub_40C190(-437781963); v263 = sub_40C190(-247452859); v264 = sub_7549E0("%s: %s", v263, v262); (*(void (__thiscall **)(int, char *))(v261 + 472))(v291, v264); break; case 7: v265 = (int *)v5[v234 + 104]; v241 = *v265; ++v234; v291 = (int)v265; v288 = v234; v266 = sub_40C190(1016499327); v267 = sub_40C190(-247452859); v244 = sub_7549E0("%s: %s", v267, v266); v245 = v291; goto LABEL_306; default: break; } if ( v234 > 0 && strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[v234 + 103] + 484))(), " ") ) { v268 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[v234 + 104] + 472); v288 = v234 + 1; v268(" "); } if ( *(_BYTE *)(v271 + 583) != 45 ) sub_5A7C80((_DWORD **)v5, (const CHAR *)(v271 + 583), &v288, (int)&dword_AA8C68); sub_5A83C0(v5, &v288); return sub_5A7270((_DWORD **)v5, a2, v288); } LABEL_254: v190 = &v295; do v191 = (v190++)[1]; while ( v191 ); v192 = v288; *(_WORD *)v190 = 41; (*(void (__stdcall **)(int *))(*(_DWORD *)v278[v192 + 104] + 472))(&v296); (*(void (__stdcall **)(int *))(*(_DWORD *)v278[v192 + 104] + 468))(&dword_AA8CB8); v117 = v192 + 1; goto LABEL_258; } v188 = sub_40C190(-330414791); v162 = sub_7549E0("%s +%s", v188, &v293); v163 = strlen(v162) + 1; v164 = &v295; do v189 = (v164++)[1]; while ( v189 ); } qmemcpy(v164, v162, v163); goto LABEL_254; } v141 = v300; if ( v305 < 0x10 ) v141 = &v300; v131 = sub_7549E0("%s +%s", v141, &v293); v132 = strlen(v131) + 1; v133 = &v295; do v142 = (v133++)[1]; while ( v142 ); } v137 = v131; LABEL_202: qmemcpy(v133, v137, v132); v5 = v278; v290 = 1; goto LABEL_203; } if ( *(_DWORD *)(v287 + 160) ) { v87 = *(_DWORD *)v5[v68 + 104]; v88 = v291; v89 = *(_DWORD *)(v287 + 160); v291 = v5[v68 + 104]; v90 = (char *)sub_40C190(-167311583); v91 = sub_7549E0(v90, v89, v88); (*(void (__thiscall **)(int, char *))(v87 + 472))(v291, v91); } LABEL_136: (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v68++ + 104] + 468))(&dword_AA8CB8); goto LABEL_139; } v80 = sub_7549E0(" -%d%%", v274); if ( *(float *)&v291 == 0.0 ) { if ( !*(_DWORD *)(v287 + 160) ) goto LABEL_131; v85 = *(_DWORD *)(v287 + 160); v86 = (char *)sub_40C190(-167311582); v84 = sub_7549E0(v86, v85); } else { if ( !*(_DWORD *)(v287 + 160) ) goto LABEL_131; v81 = v291; v82 = *(_DWORD *)(v287 + 160); v83 = (char *)sub_40C190(-167311583); v84 = sub_7549E0(v83, v82, v81); } if ( v84 ) { strcat(v84, v80); v5 = v278; LABEL_132: (*(void (__thiscall **)(unsigned int, char *))(*(_DWORD *)v5[v68 + 104] + 472))(v5[v68 + 104], v84); goto LABEL_136; } LABEL_131: v84 = v80; goto LABEL_132; case 0: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40C190(-2002416431); v71 = v291; goto LABEL_111; case 1: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40C190(-1851093797); v74 = v291; break; case 3: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40C190(-435816212); v71 = v291; goto LABEL_111; case 4: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40C190(-420678152); v74 = v291; break; case 5: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40C190(-1800606226); v71 = v291; goto LABEL_111; case 7: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40C190(-536941068); v74 = v291; break; case 8: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40C190(-1566463998); v71 = v291; goto LABEL_111; case 9: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40C190(-403353015); v74 = v291; break; case 10: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40C190(-1476858132); v71 = v291; goto LABEL_111; case 11: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40C190(-1799951111); v74 = v291; break; case 12: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_40A910(-1616707604); v71 = v291; LABEL_111: (*(void (__thiscall **)(int, const CHAR *))(v69 + 472))(v71, v70); if ( !v290 ) (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v68 + 104] + 468))(&dword_AA8C88); LABEL_113: ++v68; goto LABEL_114; case 13: v72 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v73 = sub_40A910(-352979198); v74 = v291; break; case 14: v69 = *(_DWORD *)v5[v68 + 104]; v291 = v5[v68 + 104]; v70 = sub_4090F0(2124399840); v71 = v291; goto LABEL_111; default: goto LABEL_114; } (*(void (__thiscall **)(int, const CHAR *))(v72 + 472))(v74, v73); if ( !v290 ) (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v68 + 104] + 468))(&dword_AA8C88); goto LABEL_113; } (*(void (__stdcall **)(int))(*(_DWORD *)v5[104] + 472))(v8 + 34); if ( !sub_6BE830(a2) ) { if ( (unsigned __int8)sub_6BE810(a2) ) { v15 = *(_DWORD *)v5[105]; v13 = 2; v291 = *((int *)v5 + 105); v288 = 2; v16 = sub_40C190(792104874); v17 = v291; } else { v18 = sub_6BF540(a2) == 0; v19 = (int *)v5[105]; v15 = *v19; v13 = 2; v288 = 2; if ( !v18 ) { v291 = (int)v19; v20 = sub_40C190(-1968601197); (*(void (__thiscall **)(int, const CHAR *))(v15 + 472))(v291, v20); goto LABEL_29; } v291 = (int)v19; v16 = sub_40C190(866359191); v17 = v291; } (*(void (__thiscall **)(int, const CHAR *))(v15 + 472))(v17, v16); goto LABEL_29; } v12 = *(_DWORD *)v5[105]; v13 = 2; v291 = *((int *)v5 + 105); v288 = 2; v14 = sub_40C190(995898938); (*(void (__thiscall **)(int, const CHAR *))(v12 + 472))(v291, v14); LABEL_29: if ( strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[105] + 484))(), " ") ) { v21 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[106] + 472); v13 = 3; v288 = 3; v21(" "); } if ( sub_6BE900(a2) && a5 ) { v22 = *(_DWORD *)v5[v13 + 104]; v291 = v5[v13 + 104]; v23 = sub_40C190(-1555951628); (*(void (__thiscall **)(int, const CHAR *))(v22 + 472))(v291, v23); (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v13++ + 104] + 468))(&dword_AA8C88); v288 = v13; } if ( v13 > 0 && strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[v13 + 103] + 484))(), " ") ) { v24 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[v13++ + 104] + 472); v288 = v13; v24(" "); } v25 = *(_DWORD *)(v271 + 839); v289 = v25 <= sub_680890((unsigned __int8 *)byte_AD9238); if ( v25 ) { v26 = sub_40C190(-1728582399); sprintf(&v292, v26, v25); (*(void (__stdcall **)(char *))(*(_DWORD *)v5[v13 + 104] + 472))(&v292); v27 = *(void (__stdcall **)(int *))(*(_DWORD *)v5[v13 + 104] + 468); if ( v289 ) v27(&dword_AA8C68); else v27(&dword_AA8C88); v288 = ++v13; if ( v13 > 0 ) { if ( strcmp((const char *)(*(int (**)(void))(*(_DWORD *)v5[v13 + 103] + 484))(), " ") ) { v28 = *(void (__stdcall **)(const char *))(*(_DWORD *)v5[v13++ + 104] + 472); v288 = v13; v28(" "); } } } v29 = *(_DWORD *)(v287 + 203); if ( v29 ) { *(float *)&v291 = (double)v29 / 1000.0; v30 = sub_40C190(725590162); sprintf(&v292, v30, (_QWORD)v291); (*(void (__stdcall **)(char *))(*(_DWORD *)v5[v13++ + 104] + 472))(&v292); v288 = v13; } v284 = 0; v31 = sub_548EA0(a2); v32 = v31; v291 = (int)v31; if ( v31 ) { v33 = v31[2]; v299 = 0; v300 = 0; v301 = 0; v302 = 0; v303 = 0; v304 = 0; v305 = 0; v306 = 0; *(_WORD *)((char *)&v299 + 1) = (unsigned __int8)v31[3]; v34 = v31[5]; LOBYTE(v299) = v33; v35 = v32[4]; HIBYTE(v299) = v34; v36 = v32[7]; BYTE2(v299) = v35; v37 = v32[6]; v38 = v32[8]; BYTE1(v300) = v36; LOBYTE(v300) = v37; BYTE2(v300) = v38; if ( !strcmp((const char *)&v299, "Recipe_") ) { v280 = sub_6BE7C0(); v279 = 0; if ( v280 ) { do { v39 = sub_6BE770(v279); v40 = *v39; v273 = v39; if ( *v39 != -1 ) { v41 = 0; if ( sub_548AA0() ) { while ( 1 ) { v42 = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v41); if ( *(_WORD *)v42 == v40 ) break; if ( ++v41 >= sub_548AA0() ) goto LABEL_56; } if ( *(_DWORD *)(v291 + 422) == *(_DWORD *)(v42 + 422) ) v284 += *((_DWORD *)v273 + 1); } } LABEL_56: ++v279; } while ( v279 < v280 ); } if ( *(_DWORD *)(v291 + 434) > v284 ) (*(void (__stdcall **)(int *))(*(_DWORD *)v5[v288 + 104] + 468))(&dword_AA8C88); v43 = (int *)v5[v288 + 104]; v44 = *(_DWORD *)(v291 + 434); v291 = *v43; v45 = (char *)sub_40C190(-1787006979); v46 = sub_7549E0(v45, v44); (*(void (__thiscall **)(int *, char *))(v291 + 472))(v43, v46); v13 = ++v288; } } if ( *(_BYTE *)(v271 + 583) != 45 ) { sub_5A7C80((_DWORD **)v5, (const CHAR *)(v271 + 583), &v288, (int)&dword_AA8C68); v13 = v288; } return v13; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AA8CB8: using guessed type int dword_AA8CB8; // ACD944: using guessed type int dword_ACD944; // ACD988: using guessed type int dword_ACD988; // ACE8D0: using guessed type int dword_ACE8D0; // ACEA9C: using guessed type int dword_ACEA9C; // ADA230: using guessed type char byte_ADA230; //----- (005AB810) -------------------------------------------------------- int __thiscall sub_5AB810(unsigned int *this, int a2, unsigned int a3) { unsigned int *v3; // esi int v4; // edi v3 = this; v4 = sub_5A9570(this, a2, 0, 0, 1); (*(void (__stdcall **)(const char *))(*(_DWORD *)v3[v4++ + 104] + 472))(" "); sub_5A6270((_DWORD **)v3, v3[89], v4 * (v3[182] + 2) + v3[88] + 2, a3); return sub_5A86C0((_DWORD **)v3, a2, v4); } //----- (005AB880) -------------------------------------------------------- _DWORD *__cdecl sub_5AB880(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 45) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 45) ); } return result; } //----- (005AB8A0) -------------------------------------------------------- int __cdecl sub_5AB8A0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 27); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (005AB8C0) -------------------------------------------------------- _DWORD *__cdecl sub_5AB8C0(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 27) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 27) ); } return result; } //----- (005AB8F0) -------------------------------------------------------- void *__thiscall sub_5AB8F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,ItemAction *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9DBB0C: using guessed type void *NiTListBase,ItemAction *>::`vftable'; //----- (005AB920) -------------------------------------------------------- _DWORD *__thiscall sub_5AB920(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 27) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 27) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 27); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 27); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (005AB970) -------------------------------------------------------- _DWORD *__thiscall sub_5AB970(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 27) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (005AB9D0) -------------------------------------------------------- int __thiscall sub_5AB9D0(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 27) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (005ABA30) -------------------------------------------------------- int sub_5ABA30() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD988 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD988: using guessed type int dword_ACD988; //----- (005ABA50) -------------------------------------------------------- int sub_5ABA50() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD98C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD98C: using guessed type int dword_ACD98C; //----- (005ABA70) -------------------------------------------------------- int sub_5ABA70() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD990 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD990: using guessed type int dword_ACD990; //----- (005ABA90) -------------------------------------------------------- unsigned int __cdecl sub_5ABA90(_DWORD *a1, int a2) { unsigned int v2; // ebx unsigned int result; // eax unsigned __int16 *v4; // eax int v5; // edi _DWORD *v6; // eax _DWORD *v7; // ecx v2 = 0; result = sub_6C0800(); if ( result ) { do { v4 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD984 + 4), v2); if ( v4 && *v4 == a2 ) { v5 = sub_7474E0((_DWORD *)(dword_ACD984 + 4), v2); v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); v6[2] = v5; *v6 = 0; v6[1] = a1[2]; v7 = (_DWORD *)a1[2]; if ( v7 ) *v7 = v6; else a1[1] = v6; ++a1[3]; a1[2] = v6; } ++v2; result = sub_6C0800(); } while ( v2 < result ); } return result; } // ACD984: using guessed type int dword_ACD984; //----- (005ABB10) -------------------------------------------------------- int __cdecl sub_5ABB10(int a1) { unsigned int v1; // esi unsigned __int16 *v2; // eax v1 = 0; if ( !sub_5ABA30() ) return 0; while ( 1 ) { v2 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD988 + 4), v1); if ( v2 ) { if ( *v2 == a1 ) break; } if ( ++v1 >= sub_5ABA30() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD988 + 4), v1); } // ACD988: using guessed type int dword_ACD988; //----- (005ABB60) -------------------------------------------------------- int __cdecl sub_5ABB60(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_4DC670() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1) + 248) != a1 ) { if ( ++v1 >= sub_4DC670() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1); } // ACEAA8: using guessed type int dword_ACEAA8; //----- (005ABBB0) -------------------------------------------------------- int __cdecl sub_5ABBB0(const char *a1) { unsigned int v1; // edi v1 = 0; if ( !sub_4DC670() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1) + 2), a1) ) { if ( ++v1 >= sub_4DC670() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v1); } // ACEAA8: using guessed type int dword_ACEAA8; //----- (005ABC30) -------------------------------------------------------- int __cdecl sub_5ABC30(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_5ABA70() ) return 0; while ( *(unsigned __int16 *)(sub_7474E0((_DWORD *)(dword_ACD990 + 4), v1) + 2) != a1 ) { if ( ++v1 >= sub_5ABA70() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD990 + 4), v1); } // ACD990: using guessed type int dword_ACD990; //----- (005ABC80) -------------------------------------------------------- int sub_5ABC80() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9B8 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9B8: using guessed type int dword_ACD9B8; //----- (005ABCA0) -------------------------------------------------------- int __thiscall sub_5ABCA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // STFC_4 int result; // eax v1 = this; *this = &NiTPointerListBase,ItemAction *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,ItemAction *>::`vftable'; return result; } // 9DBB0C: using guessed type void *NiTListBase,ItemAction *>::`vftable'; // 9DBB1C: using guessed type void *NiTPointerListBase,ItemAction *>::`vftable'; //----- (005ABD20) -------------------------------------------------------- _DWORD *__thiscall sub_5ABD20(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,ItemAction *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,ItemAction *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9DBB0C: using guessed type void *NiTListBase,ItemAction *>::`vftable'; // 9DBB1C: using guessed type void *NiTPointerListBase,ItemAction *>::`vftable'; //----- (005ABDB0) -------------------------------------------------------- int __thiscall sub_5ABDB0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x12492491 ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 26) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 26) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 27) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 26) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 26) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 27) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 26) = 1; *(_BYTE *)(v13 + 26) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 26) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 26) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 27) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 26) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 26) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 27) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 26) = 1; *(_BYTE *)(v22 + 26) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 26) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 26) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 26) = 1; return result; } //----- (005ABFE0) -------------------------------------------------------- int *__thiscall sub_5ABFE0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 27) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_5AB920(&a3); if ( *(_BYTE *)(*v3 + 27) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 27) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 27) ) { v9 = (_DWORD *)v6; } else { v9 = sub_5AB8C0((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 27) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_5AB8A0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 27) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 27) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 26); *(_BYTE *)(v5 + 26) = *((_BYTE *)v3 + 26); *((_BYTE *)v3 + 26) = v13; LABEL_35: if ( v18[26] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 26) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[26] ) { v15[26] = 1; *(_BYTE *)(v6 + 26) = 0; sub_5AB970(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[27] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 26) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 26) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 26) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 26) = 1; v15[26] = 0; sub_5AB9D0(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[26] = *(_BYTE *)(v6 + 26); *(_BYTE *)(v6 + 26) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 26) = 1; sub_5AB970(i, v6); break; } } else { if ( !v15[26] ) { v15[26] = 1; *(_BYTE *)(v6 + 26) = 0; sub_5AB9D0(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[27] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 26) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 26) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 26) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 26) = 1; v15[26] = 0; sub_5AB970(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[26] = *(_BYTE *)(v6 + 26); *(_BYTE *)(v6 + 26) = 1; *(_BYTE *)(*(_DWORD *)v15 + 26) = 1; sub_5AB9D0(i, (_DWORD *)v6); break; } } v15[26] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 26) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (005AC230) -------------------------------------------------------- void __stdcall sub_5AC230(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 27) ) { do { sub_5AC230(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 27) ); } } //----- (005AC270) -------------------------------------------------------- _DWORD *__usercall sub_5AC270@(_DWORD *result@, _DWORD *a2, int a3) { int v3; // edx v3 = a3; if ( a3 ) { result = a2; do { if ( result ) { *result = 0; result[1] = 0; result[2] = 0; } result += 3; --v3; } while ( v3 ); } return result; } //----- (005AC2A0) -------------------------------------------------------- int **__thiscall sub_5AC2A0(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 45) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (005AC310) -------------------------------------------------------- int **__thiscall sub_5AC310(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 27) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (005AC380) -------------------------------------------------------- int __thiscall sub_5AC380(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[27] ) { do { sub_5AC230((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 27) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (005AC3D0) -------------------------------------------------------- int *__thiscall sub_5AC3D0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 27) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 27) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 27); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 27); j = (int *)*j ) v10 = j; a3 = v10; } } sub_5ABFE0(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_5AC380(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (005AC470) -------------------------------------------------------- _DWORD *__thiscall sub_5AC470(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // ecx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x1Cu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 13) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_WORD *)result + 6) = *(_WORD *)a2; *(_DWORD *)((char *)result + 14) = *(_DWORD *)(v4 + 2); *(_DWORD *)((char *)result + 18) = *(_DWORD *)(v4 + 6); *(_DWORD *)((char *)result + 22) = *(_DWORD *)(v4 + 10); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005AC4F0) -------------------------------------------------------- int __thiscall sub_5AC4F0(_DWORD *this, int a2, char *a3) { _DWORD *v3; // edi _WORD *v4; // eax int v5; // ecx bool v6; // zf int v7; // esi unsigned __int16 v8; // bx int v9; // ecx int result; // eax v3 = this; v4 = sub_5AC470(this, a3); v5 = *(_DWORD *)(v3[1] + 4); v6 = *(_BYTE *)(v5 + 27) == 0; v7 = v3[1]; LOBYTE(a3) = 1; if ( v6 ) { v8 = v4[6]; do { v7 = v5; LOBYTE(a3) = v8 < *(_WORD *)(v5 + 12); if ( (_BYTE)a3 ) v5 = *(_DWORD *)v5; else v5 = *(_DWORD *)(v5 + 8); } while ( !*(_BYTE *)(v5 + 27) ); } v9 = *(_DWORD *)sub_5ABDB0(v3, (int)&a3, (char)a3, v7, v4); result = a2; *(_DWORD *)a2 = v9; return result; } //----- (005AC560) -------------------------------------------------------- void __thiscall sub_5AC560(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_5AC3D0(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (005AC5C0) -------------------------------------------------------- unsigned int __thiscall sub_5AC5C0(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi unsigned int v3; // ecx unsigned int result; // eax int v5; // edx v2 = this; v3 = this[1]; result = (signed int)(v3 - *v2) / 12; if ( result <= a2 ) { if ( result >= a2 ) return result; sub_8D6BE0(v2, a2 - result); sub_5AC270((_DWORD *)(715827883 * (v2[1] - *v2)), (_DWORD *)v2[1], a2 - (signed int)(v2[1] - *v2) / 12); result = (signed int)(v2[1] - *v2) / 12; v5 = v2[1] + 12 * (a2 - result); } else { result = 3 * a2; v5 = *v2 + 12 * a2; if ( v5 == v3 ) return result; result = v3; } v2[1] = v5; return result; } //----- (005AC690) -------------------------------------------------------- int __thiscall sub_5AC690(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x7FFFFFE ) { if ( *((_DWORD *)a5 + 9) >= 0x10u ) operator delete(*((void **)a5 + 4)); *((_DWORD *)a5 + 9) = 15; *((_DWORD *)a5 + 8) = 0; *((_BYTE *)a5 + 16) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 44) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 44) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 45) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 45) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_53: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v13 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 44) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 45) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 45) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_53; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v22 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 44) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 44) = 1; return result; } //----- (005AC8E0) -------------------------------------------------------- int __thiscall sub_5AC8E0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx int v5; // ecx int v6; // eax int v7; // esi void *v8; // edi bool v9; // cl unsigned __int16 v10; // bx int v11; // ebx int v12; // edx int result; // eax int v14; // ecx _DWORD *v15; // [esp+Ch] [ebp-4h] char v16; // [esp+1Ch] [ebp+Ch] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = a3; v9 = 1; v15 = v4; v16 = 1; if ( !*(_BYTE *)(v6 + 45) ) { v10 = *((_WORD *)v8 + 6); do { v7 = v6; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v6 + 12) >= v10; else v9 = v10 < *(_WORD *)(v6 + 12); v16 = v9; if ( v9 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 45) ); } v11 = v7; a4 = v7; if ( v9 ) { if ( v7 == *(_DWORD *)v4[1] ) { v12 = *(_DWORD *)sub_5AC690(v4, (int)&a4, 1, v7, v8); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_49F3C0(&a4); v11 = a4; v4 = v15; } if ( *(_WORD *)(v11 + 12) >= *((_WORD *)v8 + 6) ) { if ( *((_DWORD *)v8 + 9) >= 0x10u ) operator delete(*((void **)v8 + 4)); *((_DWORD *)v8 + 9) = 15; *((_DWORD *)v8 + 8) = 0; *((_BYTE *)v8 + 16) = 0; operator delete(v8); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_5AC690(v4, (int)&a4, v16, v7, v8); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (005AC9E0) -------------------------------------------------------- int __thiscall sub_5AC9E0(_DWORD *this, int a2, void *a3, int a4) { int v4; // eax unsigned __int8 *v5; // edx int v6; // ebx unsigned int v7; // ecx unsigned __int8 *v8; // eax unsigned __int8 *v9; // edx unsigned int v10; // esi unsigned int v11; // ecx int v12; // eax bool v13; // sf bool v14; // al unsigned int v15; // edi unsigned int v16; // esi unsigned int v17; // edx unsigned __int8 *v18; // ecx int v19; // eax bool v20; // sf signed int v21; // eax int v22; // ecx int result; // eax int v24; // [esp+4h] [ebp-14h] _DWORD *v25; // [esp+8h] [ebp-10h] unsigned int v26; // [esp+Ch] [ebp-Ch] unsigned int v27; // [esp+10h] [ebp-8h] char v28; // [esp+14h] [ebp-4h] v4 = this[1]; v5 = (unsigned __int8 *)a3; v6 = *(_DWORD *)(v4 + 4); v25 = this; v28 = 1; if ( !*(_BYTE *)(v6 + 45) ) { v7 = *((_DWORD *)a3 + 7); v27 = *((_DWORD *)a3 + 7); v26 = *((_DWORD *)a3 + 8); while ( 1 ) { v24 = v6; v8 = (unsigned __int8 *)(v6 + 12); if ( (_BYTE)a4 ) { if ( v26 < 0x10 ) v9 = v5 + 12; else v9 = (unsigned __int8 *)*((_DWORD *)v5 + 3); v10 = *(_DWORD *)(v6 + 28); v11 = *(_DWORD *)(v6 + 28); if ( v10 >= v27 ) v11 = v27; if ( *(_DWORD *)(v6 + 32) >= 0x10u ) v8 = *(unsigned __int8 **)v8; v12 = sub_40C0B0(v8, v9, v11); v13 = v12 < 0; if ( !v12 ) { if ( v10 < v27 ) { v14 = 0; goto LABEL_32; } v13 = (v10 != v27) < 0; } v14 = !v13; } else { v15 = *(_DWORD *)(v6 + 28); if ( *(_DWORD *)(v6 + 32) >= 0x10u ) v8 = *(unsigned __int8 **)v8; v16 = *((_DWORD *)v5 + 7); if ( v7 < v16 ) v16 = v7; v17 = v16; if ( v16 >= v15 ) v17 = *(_DWORD *)(v6 + 28); if ( v26 < 0x10 ) v18 = (unsigned __int8 *)a3 + 12; else v18 = (unsigned __int8 *)*((_DWORD *)a3 + 3); v19 = sub_40C0B0(v18, v8, v17); v20 = v19 < 0; if ( !v19 ) { if ( v16 >= v15 ) v21 = v16 != v15; else v21 = -1; v20 = v21 < 0; } v14 = v20; } LABEL_32: v28 = v14; if ( v14 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); v5 = (unsigned __int8 *)a3; if ( *(_BYTE *)(v6 + 45) ) { this = v25; v4 = v24; break; } v7 = v27; } } v22 = *(_DWORD *)sub_4F1DB0(this, (int)&a4, v28, v4, v5); result = a2; *(_DWORD *)a2 = v22; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (005ACB10) -------------------------------------------------------- _DWORD *__thiscall sub_5ACB10(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _WORD *v5; // eax char *v6; // edx int v7; // ecx int v9; // [esp+0h] [ebp-38h] void **v10; // [esp+10h] [ebp-28h] void *v11; // [esp+1Ch] [ebp-1Ch] _DWORD *v12; // [esp+20h] [ebp-18h] void *v13; // [esp+24h] [ebp-14h] int *v14; // [esp+28h] [ebp-10h] int v15; // [esp+34h] [ebp-4h] v14 = &v9; v2 = this; v3 = operator new(0x30u); v4 = v3; v13 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&a2); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v5 = v3 + 3; v4[2] = v2[1]; *((_WORD *)v4 + 22) = 0; v15 = 0; v12 = v4 + 3; v11 = v4 + 3; LOBYTE(v15) = 1; if ( v5 ) { v6 = a2; *v5 = *(_WORD *)a2; v7 = (int)(v4 + 4); *(_DWORD *)(v7 + 20) = 15; *(_DWORD *)(v7 + 16) = 0; *(_BYTE *)v7 = 0; sub_406450(v4 + 4, v6 + 4); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005ACBF0) -------------------------------------------------------- void *__thiscall sub_5ACBF0(void *this, char a2) { void *v2; // esi v2 = this; sub_5A8800(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005ACCD0) -------------------------------------------------------- char __thiscall sub_5ACCD0(void *this, int a2) { int v2; // edi int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG *v8; // eax volatile LONG **v9; // eax char v10; // ST18_1 int v11; // ST1C_4 int v12; // ST20_4 int v13; // ST24_4 const CHAR *v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi volatile LONG *v16; // esi volatile LONG v17; // ebx const CHAR *v18; // eax volatile LONG *v19; // esi char v20; // ST18_1 int v21; // ST1C_4 int v22; // ST20_4 int v23; // ST24_4 const CHAR *v24; // eax volatile LONG *v25; // esi char v26; // ST18_1 int v27; // ST1C_4 int v28; // ST20_4 int v29; // ST24_4 const CHAR *v30; // eax volatile LONG *v31; // esi int v32[5]; // [esp+20h] [ebp-3Ch] int v33; // [esp+34h] [ebp-28h] int v34; // [esp+38h] [ebp-24h] int v35; // [esp+3Ch] [ebp-20h] int v36; // [esp+40h] [ebp-1Ch] int v37; // [esp+44h] [ebp-18h] int v38; // [esp+48h] [ebp-14h] int v39; // [esp+4Ch] [ebp-10h] int v40; // [esp+58h] [ebp-4h] v2 = (int)this; v39 = 0; v3 = dword_BA6BA0; v40 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\ProductSkillReload.nif"); sub_8F66B0(v4, (int)&v39, v3); if ( !v39 ) return 0; v5 = sub_8FB140(v39, (int)"Frame", (int)&v35, (int)&v36, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"ProductInitWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v39; v40 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v32); LOBYTE(v40) = 1; sub_455FF0(v32, v2); sub_456000(v32, v35, v36); sub_456380(v32, v39); sub_456820(v32, (int)"Panel01", 0); v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, v8); else v9 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, 0); sub_8F3EB0(v37 - v35, v38 - v36, (int)v9, v2, 0, 0); sub_456820(v32, (int)"IconSlot", 0); sub_456820(v32, (int)"Plane", 0); v10 = dword_AA8D98; v11 = dword_AA8D9C; v12 = dword_AA8DA0; v13 = dword_AA8DA4; v14 = sub_40C190(-385161488); sub_456760(v32, (int)"WinTitle", (int)v14, v10, v11, v12, v13, 5); sub_456820(v32, (int)"IconSlotBox01", 0); sub_4564D0(v32, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); if ( sub_8F71E0(v39, (int)"IconTxt01_", &v37, &v38, &v33, &v34) ) { v16 = sub_45A900(v37, v38 + 4, v33, v34, v2, 1342181380, 100, 1, 1, 0, 1); sub_459B60(v16, 1); v17 = *v16; v18 = sub_40C190(-703975352); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v17 + 460))(v16, v18); sub_459960(v16, 0); v19 = sub_4563D0(v32, 1, (int)"Btn01Nor", (int)"Btn01Over", (int)"Btn01Click", 0, 0); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_40C190(-1726817291); sub_456040((int)v19, (int)v24, v20, v21, v22, v23, 5); v25 = sub_4563D0(v32, 2, (int)"Btn02Nor", (int)"Btn02Over", (int)"Btn02Click", 0, 0); v26 = dword_AA8C68; v27 = dword_AA8C6C; v28 = dword_AA8C70; v29 = dword_AA8C74; v30 = sub_40C190(-2002610207); sub_456040((int)v25, (int)v30, v26, v27, v28, v29, 5); v31 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v39 + 72))("HelpLinkNor") ) sub_4563D0(v32, 3, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v31); if ( sub_8F71E0(v39, (int)"IconSlot01", &v37, &v38, &v33, &v34) ) { *(_DWORD *)(v2 + 348) = sub_5D2DD0(v37 - v35, v38 - v36, v2); *(_DWORD *)(v2 + 344) = sub_456980( v32, (int)"IconTxt01", (int)&unk_9DBDA6, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.5); LOBYTE(v40) = 0; sub_4562E0(v32); v40 = -1; sub_410C00(&v39); result = 1; } else { LOBYTE(v40) = 0; sub_4562E0(v32); v40 = -1; sub_410C00(&v39); result = 0; } } else { LOBYTE(v40) = 0; sub_4562E0(v32); v15 = (void (__thiscall ***)(_DWORD, signed int))v39; v40 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v15 ) (**v15)(v15, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005AD1A0) -------------------------------------------------------- char __thiscall sub_5AD1A0(int this, int a2, _BYTE *a3, int a4) { _WORD *v4; // eax int v5; // esi __int16 v6; // ax LOBYTE(v4) = a2; v5 = this; if ( a2 == 22 ) { v4 = *(_WORD **)a3; if ( *(_DWORD *)(*(_DWORD *)a3 + 16) == 1 ) { LOWORD(v4) = v4[10]; if ( (unsigned __int16)((_WORD)v4 - 29100) <= 0x64u ) { a3[12] = 1; v4 = sub_5945B0((__int16)v4); if ( v4 ) LOBYTE(v4) = (*(int (__stdcall **)(_WORD *))(**(_DWORD **)(v5 + 112) + 472))(v4 + 17); } } } else if ( a2 == 27 ) { LOBYTE(v4) = (_BYTE)a3; if ( a3 ) { v4 = *(_WORD **)a3; if ( *(_DWORD *)a3 ) { if ( v4 == (_WORD *)1 ) { if ( *(_BYTE *)(this + 212) ) { sub_5D2680(*(_DWORD *)(this + 116)); v6 = sub_5D2680(*(_DWORD *)(v5 + 116)); v4 = sub_5945B0(v6); if ( v4 ) *(_BYTE *)(v5 + 212) = 0; } } } else if ( *(_BYTE *)(this + 212) ) { *(_WORD *)((char *)&a3 + 1) = sub_5D2680(*(_DWORD *)(this + 116)); LOBYTE(a3) = *(_BYTE *)(v5 + 208); sub_6F3D10(&off_AB7F2C, 18, 36, &a3, 3u); *(_BYTE *)(v5 + 212) = 0; LOBYTE(v4) = sub_8F2BC0((volatile LONG *)(v5 - 232), 1, 0, 0); } } } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005AD2A0) -------------------------------------------------------- char __thiscall sub_5AD2A0(int this, int a2, int a3) { int v3; // esi _WORD *v4; // eax int v5; // ecx __int16 v6; // ax int v7; // ST0C_4 char *v8; // eax char *v9; // eax volatile LONG *v10; // eax v3 = this; if ( a2 == 1 ) { LOWORD(v4) = sub_5D2680(*(_DWORD *)(this + 348)); if ( (_WORD)v4 != -1 && *(_DWORD *)(v3 + 440) != 0xFFFF ) { v5 = *(_DWORD *)(v3 + 348); *(_BYTE *)(v3 + 444) = 1; v6 = sub_5D2680(v5); v4 = sub_5945B0(v6); if ( v4 ) { v7 = (int)(v4 + 17); v8 = (char *)sub_40C190(1302887303); v9 = sub_7549E0(v8, v7); v10 = sub_462CA0(2, v9); LOBYTE(v4) = (**((int (__stdcall ***)(int))v10 + 58))(v3 + 232); } } } else if ( a2 == 2 ) { LOBYTE(v4) = sub_8F2BC0((volatile LONG *)this, 1, 0, 0); } else { LOBYTE(v4) = a2 - 3; if ( a2 == 3 ) { v4 = (_WORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "ProductSkillReload"); } } return (char)v4; } //----- (005AD370) -------------------------------------------------------- int __thiscall sub_5AD370(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi const CHAR *v4; // eax v1 = this; v2 = this[87]; this[110] = 255; *(_BYTE *)(v2 + 254) = 1; sub_5D2940((_DWORD *)this[87]); v3 = *(_DWORD *)v1[86]; v4 = sub_40C190(2112800989); return (*(int (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(v1[86], v4); } //----- (005AD3C0) -------------------------------------------------------- int __cdecl sub_5AD3C0(int a1) { void *v1; // eax int v2; // esi int v3; // eax void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v1 = operator new(0x1C0u); v2 = (int)v1; v6 = v1; v7 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CSkillInitWin::`vftable'; *(_DWORD *)(v2 + 232) = &CSkillInitWin::`vftable'; v3 = v2 + 368; *(_DWORD *)(v2 + 352) = &PgWinDrop::`vftable'; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)v3 = &DropContents::`vftable'; *(_WORD *)(v3 + 60) = -1; *(_DWORD *)(v3 + 64) = 0; *(_DWORD *)(v2 + 356) = v2 + 368; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v2); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DBED8: using guessed type void *CSkillInitWin::`vftable'; // 9DBEF4: using guessed type void *CSkillInitWin::`vftable'; //----- (005AD530) -------------------------------------------------------- void *__thiscall sub_5AD530(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CSkillInitWin::`vftable'; *((_DWORD *)this + 58) = &CSkillInitWin::`vftable'; *((_DWORD *)this + 92) = &DropContents::`vftable'; *((_DWORD *)this + 88) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DBED8: using guessed type void *CSkillInitWin::`vftable'; // 9DBEF4: using guessed type void *CSkillInitWin::`vftable'; //----- (005AD700) -------------------------------------------------------- void __thiscall sub_5AD700(void *this, float a2) { sub_5D31A0((int)this, a2); } //----- (005AD720) -------------------------------------------------------- bool __thiscall sub_5AD720(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_5D75E0(this, a2, a3, a4) != 0; } //----- (005AD750) -------------------------------------------------------- int __thiscall sub_5AD750(int *this) { int v1; // esi int *v2; // ST08_4 unsigned __int16 v3; // ST00_2 unsigned int *v4; // ecx v1 = (int)this; v2 = this + 95; v3 = *((_WORD *)this + 206); v4 = (unsigned int *)dword_AD019C; *(_DWORD *)(v1 + 272) = dword_AD019C; sub_5A9570(v4, v3, 1, v2, 0); return sub_8F2F90(v1); } // AD019C: using guessed type int dword_AD019C; //----- (005AD7F0) -------------------------------------------------------- _DWORD *__thiscall sub_5AD7F0(_DWORD *this, int a2, int a3) { _DWORD *result; // eax bool v4; // zf bool v5; // sf unsigned __int8 v6; // of _DWORD *v7; // edx result = (_DWORD *)(a2 - 9); if ( a2 == 9 ) { if ( this[74] < 5 ) { v7 = (_DWORD *)this[75]; if ( *v7 > 0 ) { result = (_DWORD *)this[74]; if ( (signed int)result < this[77] ) { if ( (signed int)result < this[76] ) ++v7[1]; result = (_DWORD *)this[75]; --*result; ++this[74]; ++this[78]; } } } } else { result = (_DWORD *)(a2 - 10); if ( a2 == 10 && this[74] > 0 ) { result = (_DWORD *)this[74]; if ( (signed int)result > 0 ) { v6 = __OFSUB__(result, this[76]); v4 = result == (_DWORD *)this[76]; v5 = (signed int)result - this[76] < 0; result = (_DWORD *)this[75]; if ( (unsigned __int8)(v5 ^ v6) | v4 ) { if ( result[1] > 0 ) { ++*result; result = (_DWORD *)this[75]; --result[1]; --this[74]; --this[78]; } } else { ++*result; --this[74]; --this[78]; } } } } return result; } //----- (005AD9A0) -------------------------------------------------------- LONG __thiscall sub_5AD9A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int v4; // esi signed int v5; // edi LONG result; // eax v1 = this; this[97] = sub_6BE600(); v2 = sub_6856E0(&byte_ADA230); v3 = v1[97]; v1[93] = v2; v1[92] = v3; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[90] + 256))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[91] + 472))(&unk_9DC12B); v4 = (int)(v1 + 86); v5 = 4; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 248))(0); result = sub_5D4A30(*(_DWORD **)(*(_DWORD *)v4 + 316), 0); v4 += 4; --v5; } while ( v5 ); return result; } // ADA230: using guessed type char byte_ADA230; //----- (005ADA30) -------------------------------------------------------- LONG __thiscall sub_5ADA30(volatile LONG *this) { volatile LONG *v1; // esi int v2; // esi signed int v3; // edi LONG result; // eax v1 = this; sub_8F2BC0(this, 1, 0, 0); v2 = (int)(v1 + 86); v3 = 4; do { result = sub_5D4A30(*(_DWORD **)(*(_DWORD *)v2 + 316), 0); v2 += 4; --v3; } while ( v3 ); return result; } //----- (005ADA80) -------------------------------------------------------- int __thiscall sub_5ADA80(_BYTE *this) { _BYTE *v1; // esi int v2; // eax int v3; // ecx int v4; // esi signed int v5; // edi int result; // eax v1 = this; sub_8F28C0(this); *((_DWORD *)v1 + 97) = sub_6BE600(); v2 = sub_6856E0(&byte_ADA230); v3 = *((_DWORD *)v1 + 97); *((_DWORD *)v1 + 93) = v2; *((_DWORD *)v1 + 92) = v3; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 90) + 256))(0); (*(void (__stdcall **)(void *))(**((_DWORD **)v1 + 91) + 472))(&unk_9DC142); v4 = (int)(v1 + 344); v5 = 4; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 248))(0); v4 += 4; --v5; } while ( v5 ); return result; } // ADA230: using guessed type char byte_ADA230; //----- (005ADB00) -------------------------------------------------------- int __thiscall sub_5ADB00(int this, char a2) { int result; // eax *(_BYTE *)(this + 376) = a2; result = 0; *(_DWORD *)(*(_DWORD *)(this + 344) + 312) = 0; *(_DWORD *)(*(_DWORD *)(this + 348) + 312) = 0; *(_DWORD *)(*(_DWORD *)(this + 352) + 312) = 0; *(_DWORD *)(*(_DWORD *)(this + 356) + 312) = 0; return result; } //----- (005ADB50) -------------------------------------------------------- char sub_5ADB50() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ChrSkillPwr"); return (char)v0; } //----- (005ADB80) -------------------------------------------------------- int __thiscall sub_5ADB80(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // ebx int v4; // edi char v5; // cl char v6; // dl char v7; // bl char v8; // al unsigned __int16 *v9; // ecx char v10; // dl char v11; // al char v12; // bl int v13; // eax int v14; // edx int v15; // ecx _DWORD *v16; // eax int v17; // ecx _DWORD *v18; // eax int v19; // ecx _DWORD *v20; // eax int v21; // edx _DWORD *v22; // esi char v23; // [esp+4h] [ebp-8h] char v24; // [esp+5h] [ebp-7h] char v25; // [esp+6h] [ebp-6h] char v26; // [esp+7h] [ebp-5h] char v27; // [esp+8h] [ebp-4h] char v28; // [esp+9h] [ebp-3h] char v29; // [esp+Bh] [ebp-1h] v1 = this; result = (*(int (**)(void))(*this[90] + 260))(); if ( (_BYTE)result ) { v3 = *((unsigned __int16 *)v1[90] + 206); v4 = dword_ACE8D0; result = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v3); if ( (_BYTE)result ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { result = *(_DWORD *)(v4 + 196) + 4 * v3; if ( *(_DWORD *)result ) { result = *(_DWORD *)result; if ( result ) { v5 = *(_BYTE *)(result + 431); v6 = *(_BYTE *)(result + 435); v7 = *(_BYTE *)(result + 439); v8 = *(_BYTE *)(result + 443); v27 = v5; v9 = (unsigned __int16 *)v1[90]; v28 = v6; v29 = v8; sub_5D7060(v9, (int)&v23); v10 = *((_BYTE *)v1 + 393) + v28 - v24; v11 = *((_BYTE *)v1 + 395) + v29 - v26; v12 = *((_BYTE *)v1 + 394) + v7 - v25; v27 = *((_BYTE *)v1 + 392) + v27 - v23; v28 = v10; v29 = v11; v13 = sub_6856E0(&byte_ADA230); v1[92] = v1[97]; v14 = v28; v1[93] = (_DWORD *)v13; v15 = *((char *)v1 + 392); v16 = v1[86]; v16[76] = v15; v16[74] = v15; v16[77] = v27; v17 = *((char *)v1 + 393); v18 = v1[87]; v18[76] = v17; v18[74] = v17; v18[77] = v14; v19 = *((char *)v1 + 394); v20 = v1[88]; v21 = v29; v20[76] = v19; v20[74] = v19; v20[77] = v12; result = *((char *)v1 + 395); v22 = v1[89]; v22[76] = result; v22[74] = result; v22[77] = v21; } } } } } return result; } // ACE8D0: using guessed type int dword_ACE8D0; // ADA230: using guessed type char byte_ADA230; //----- (005ADD10) -------------------------------------------------------- void __thiscall sub_5ADD10(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // [esp+4h] [ebp-4h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*this[86] + 244))() ) LOBYTE(v3) = *((_BYTE *)v2[86] + 296); if ( (*(unsigned __int8 (**)(void))(*v2[87] + 244))() ) BYTE1(v3) = *((_BYTE *)v2[87] + 296); if ( (*(unsigned __int8 (**)(void))(*v2[88] + 244))() ) BYTE2(v3) = *((_BYTE *)v2[88] + 296); if ( (*(unsigned __int8 (**)(void))(*v2[89] + 244))() ) HIBYTE(v3) = *((_BYTE *)v2[89] + 296); sub_6BE620((int)v2[92]); sub_6BE660((int)v2[93]); if ( *((_BYTE *)v2 + 376) ) { (*(void (__stdcall **)(_DWORD))(*v2[90] + 256))(0); (*(void (__stdcall **)(void *))(*v2[91] + 472))(&unk_9DC143); } sub_5D77C0((int)v2[90], v3); } //----- (005ADE10) -------------------------------------------------------- signed int __thiscall sub_5ADE10(_DWORD *this) { _DWORD *v1; // esi v1 = this; *(_DWORD *)(this[95] + 344) = *(_DWORD *)(this[96] + 300); sub_465130((_DWORD *)this[95]); return sub_4638F0((_DWORD *)v1[96], *(_DWORD *)(v1[95] + 336)); } //----- (005ADE50) -------------------------------------------------------- char __thiscall sub_5ADE50(_WORD *this, int a2) { _WORD *v2; // edi int v3; // esi int v4; // eax volatile LONG *v5; // eax v2 = this; this[206] = a2; v3 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) return 0; if ( (unsigned __int16)a2 > *(_WORD *)(v3 + 200) ) return 0; if ( !*(_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2) ) return 0; v4 = (unsigned __int16)v2[206]; if ( (unsigned __int16)v4 >= 0x4E20u ) return 0; sub_5D8320(v2, v4); v5 = (volatile LONG *)sub_402BF0(v2); sub_8F2C80(v5, 12, 0); return 1; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (005ADED0) -------------------------------------------------------- char __thiscall sub_5ADED0(_WORD *this, int a2, int a3, int a4) { _WORD *v4; // esi int v5; // eax int v6; // eax volatile LONG *v7; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v5 = *(_DWORD *)(*(_DWORD *)a2 + 4); if ( !v5 ) return 0; if ( *(_DWORD *)(v5 + 8) != 2 ) return 0; v6 = *(_DWORD *)(v5 + 20); this[206] = v6; if ( !sub_49FBB0(v6) || v4[206] >= 0x4E20u ) return 0; sub_5ADE50(v4, (unsigned __int16)v4[206]); v7 = (volatile LONG *)sub_402BF0(v4); sub_8F2C80(v7, 12, 0); return 1; } //----- (005ADF40) -------------------------------------------------------- char __thiscall sub_5ADF40(_DWORD *this, int a2, int a3, int a4, int a5, int *a6, _DWORD *a7) { _DWORD *v7; // edi char result; // al int v9; // ecx _DWORD *v10; // ecx volatile LONG **v11; // eax volatile LONG *v12; // ebx volatile LONG *v13; // eax int v14[5]; // [esp+10h] [ebp-24h] int v15; // [esp+24h] [ebp-10h] int v16; // [esp+30h] [ebp-4h] int v17; // [esp+3Ch] [ebp+8h] v7 = this; result = sub_8F2900(this, 0, 0, 32, 32, a7, 0, 0); if ( result ) { sub_456260(v14); v16 = 0; sub_455FF0(v14, (int)v7); sub_456000(v14, a3, a4); sub_456380(v14, a2); sub_4563D0(v14, 9, a6[1], a6[2], a6[3], 0, 0); sub_4563D0(v14, 10, a6[4], a6[5], a6[6], 0, 0); if ( (unsigned int)a6[15] < 0x10 ) v9 = (int)(a6 + 10); else v9 = a6[10]; sub_456760(v14, a6[7], v9, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0); v10 = a6 + 17; if ( (unsigned int)a6[22] >= 0x10 ) v10 = (_DWORD *)*v10; sub_456760(v14, a6[8], (int)v10, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0); v11 = sub_8FB140(a2, *a6, (int)&v15, (int)&a7, 0); v12 = sub_8F3EB0(v15 - a3, (int)a7 - a4, (int)v11, (int)v7, 0, 0); v17 = sub_43D0D0(6u); v13 = sub_5D5260(3, 3, 32, 32, (int)v12); v7[79] = v13; (*(void (__thiscall **)(volatile LONG *, int, int, signed int, signed int))(*v13 + 584))(v13, v17, a6[9], 32, 32); v7[75] = a6[24]; v7[72] = a5; v16 = -1; sub_4562E0(v14); result = 1; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; //----- (005AE130) -------------------------------------------------------- LONG __thiscall sub_5AE130(_DWORD **this) { _DWORD **v1; // esi int v2; // edi signed int v3; // ebx int v4; // ebx int v5; // edi int v6; // edx int v7; // eax char *v8; // eax char v9; // cl char v10; // dl char v11; // bl int v12; // esi signed int v13; // edi LONG result; // eax char v15; // [esp+Ch] [ebp-8h] _DWORD **v16; // [esp+10h] [ebp-4h] v1 = this; (*(void (__stdcall **)(signed int))(*this[90] + 256))(1); v2 = (int)(v1 + 86); v16 = v1 + 86; v3 = 4; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 248))(1); v2 += 4; --v3; } while ( v3 ); v4 = *((unsigned __int16 *)v1[90] + 206); v5 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v4) && (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) && (v6 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v6 + 4 * v4)) && (v7 = *(_DWORD *)(v6 + 4 * v4)) != 0 ) { (*(void (__stdcall **)(int))(*v1[91] + 472))(v7 + 34); *((_BYTE *)v1 + 376) = 0; } else { (*(void (__stdcall **)(void *))(*v1[91] + 472))(&unk_9DC12A); } v8 = (char *)sub_6BFA60((int)&v15, *((_WORD *)v1[90] + 206)); v9 = *v8; v10 = v8[2]; v11 = v8[3]; LOBYTE(v8) = v8[1]; *((_BYTE *)v1 + 392) = v9; *((_BYTE *)v1 + 394) = v10; *((_BYTE *)v1 + 395) = v11; *((_BYTE *)v1 + 393) = (_BYTE)v8; v1[97] = (_DWORD *)sub_6BE600(); sub_5ADB80(v1); v12 = (int)v16; v13 = 4; do { result = sub_5D4A30(*(_DWORD **)(*(_DWORD *)v12 + 316), *(_DWORD *)(*(_DWORD *)v12 + 308) == 0); v12 += 4; --v13; } while ( v13 ); return result; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (005AE270) -------------------------------------------------------- char __thiscall sub_5AE270(_DWORD **this) { _DWORD **v1; // esi _BYTE *v2; // eax __int16 v3; // cx char v4; // dl signed int v5; // edx int v6; // edi char v7; // dl _DWORD **v8; // esi const CHAR *v9; // edi char v10; // dl char v11; // al char v12; // dl __int16 v13; // dx __int16 v14; // dx _DWORD *v15; // ecx int v17; // [esp+4h] [ebp-18h] __int16 v18; // [esp+8h] [ebp-14h] char v19; // [esp+Eh] [ebp-Eh] char v20; // [esp+Fh] [ebp-Dh] int v21; // [esp+10h] [ebp-Ch] int v22; // [esp+14h] [ebp-8h] char v23; // [esp+1Bh] [ebp-1h] v1 = this; LOBYTE(v2) = (*(int (**)(void))(*this[90] + 260))(); if ( (_BYTE)v2 ) { v2 = sub_5D6F60(v1[90], (int *)((char *)&v17 + 2)); LOBYTE(v3) = *v2; v19 = v2[2]; v4 = v2[3]; LOBYTE(v2) = v2[1]; v20 = v4; v5 = 0; v22 = 0; v21 = 0; v17 = 0; v6 = (int)(v1 + 86); while ( 1 ) { if ( !*(_DWORD *)(*(_DWORD *)v6 + 312) ) ++v17; if ( v17 == 4 ) break; ++v5; v6 += 4; if ( v5 >= 4 ) { v7 = *((_BYTE *)v1 + 392); if ( (char)v3 <= v7 ) LOBYTE(v21) = v7 - v3; else LOBYTE(v22) = v3 - v7; v10 = *((_BYTE *)v1 + 393); if ( (char)v2 <= v10 ) BYTE1(v21) = v10 - (_BYTE)v2; else BYTE1(v22) = (_BYTE)v2 - v10; v11 = *((_BYTE *)v1 + 394); if ( v19 <= v11 ) { LOBYTE(v2) = v11 - v19; LOBYTE(v3) = BYTE2(v22); BYTE2(v21) = (_BYTE)v2; } else { LOBYTE(v3) = v19 - v11; LOBYTE(v2) = BYTE2(v21); BYTE2(v22) = v3; } v12 = *((_BYTE *)v1 + 395); v23 = v12; if ( v20 <= v12 ) HIBYTE(v21) = v12 - v20; else HIBYTE(v22) = v20 - v12; if ( v22 || v21 ) { LOWORD(v17) = *((_WORD *)v1[90] + 206); v13 = v3 & 0xF; LOBYTE(v3) = BYTE1(v22) & 0xF; HIWORD(v17) = v22 & 0xF | 16 * ((SHIBYTE(v22) << 8) | (v3 | 16 * v13) & 0xFF); v14 = (unsigned __int8)v2 & 0xF; LOBYTE(v2) = BYTE1(v21) & 0xF; v15 = v1[74]; v18 = v21 & 0xF | 16 * ((SHIBYTE(v21) << 8) | ((unsigned __int16)v2 | 16 * v14) & 0xFF); LOBYTE(v2) = sub_4B87C0((int)&v17); } return (char)v2; } } v8 = v1 + 58; v9 = sub_40C190(-1950822418); if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v9, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } LOBYTE(v2) = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); } return (char)v2; } //----- (005AE460) -------------------------------------------------------- char __thiscall sub_5AE460(_DWORD *this, int a2) { _WORD *v2; // ecx char result; // al v2 = (_WORD *)this[90]; if ( v2 ) result = sub_5ADE50(v2, a2); return result; } //----- (005AE480) -------------------------------------------------------- char __thiscall sub_5AE480(_DWORD **this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 9: result = sub_5AE270(this); break; case 10: result = ((int (*)(void))(*this)[90])(); break; case 11: result = sub_5ADB80(this); break; case 12: result = sub_5AE130(this); break; case 13: result = sub_5AD9A0(this); break; case 14: result = sub_5ADE10(this); break; case 15: result = sub_5ADB50(); break; default: return result; } return result; } //----- (005AE500) -------------------------------------------------------- int __cdecl sub_5AE500(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1A0u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D7A30(v3); *(_DWORD *)v4 = &SkillPowerIconWin::`vftable'; *(_DWORD *)(v4 + 232) = &SkillPowerIconWin::`vftable'; *(_WORD *)(v4 + 412) = -1; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 608))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9DC3FC: using guessed type void *SkillPowerIconWin::`vftable'; // 9DC41C: using guessed type void *SkillPowerIconWin::`vftable'; //----- (005AE650) -------------------------------------------------------- int __cdecl sub_5AE650(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x140u); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_8F2740(v6); *(_DWORD *)v7 = &SkillPowerListItemWin::`vftable'; *(_DWORD *)(v7 + 232) = &SkillPowerListItemWin::`vftable'; *(_DWORD *)(v7 + 300) = 0; *(_DWORD *)(v7 + 296) = 0; *(_DWORD *)(v7 + 304) = 0; *(_DWORD *)(v7 + 308) = 20000; *(_DWORD *)(v7 + 312) = 0; *(_DWORD *)(v7 + 316) = 0; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int))(*(_DWORD *)v7 + 452))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9DC684: using guessed type void *SkillPowerListItemWin::`vftable'; // 9DC6A4: using guessed type void *SkillPowerListItemWin::`vftable'; //----- (005AE7D0) -------------------------------------------------------- int __cdecl sub_5AE7D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x18Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &SkillPowerWin::`vftable'; *(_DWORD *)(v2 + 232) = &SkillPowerWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; *(_BYTE *)(v2 + 376) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DC870: using guessed type void *SkillPowerWin::`vftable'; // 9DC88C: using guessed type void *SkillPowerWin::`vftable'; //----- (005AE940) -------------------------------------------------------- char __thiscall sub_5AE940(volatile LONG **this, int a2) { volatile LONG **v2; // esi volatile LONG *v3; // edi char result; // al char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG v11; // edi int v12; // eax volatile LONG *v13; // edi char v14; // ST28_1 int v15; // ST2C_4 int v16; // ST30_4 int v17; // ST34_4 const CHAR *v18; // eax volatile LONG *v19; // edi char v20; // ST28_1 int v21; // ST2C_4 int v22; // ST30_4 int v23; // ST34_4 const CHAR *v24; // eax volatile LONG *v25; // edi char v26; // ST28_1 int v27; // ST2C_4 int v28; // ST30_4 int v29; // ST34_4 const CHAR *v30; // eax volatile LONG **v31; // eax CHAR *v32; // eax CHAR *v33; // eax CHAR *v34; // eax CHAR *v35; // eax CHAR *v36; // eax CHAR *v37; // eax CHAR *v38; // eax CHAR *v39; // eax int v40; // eax void (__thiscall *v41)(volatile LONG **, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v42)(_DWORD, signed int); // esi int v43; // [esp+20h] [ebp-A4h] int v44[5]; // [esp+24h] [ebp-A0h] int v45; // [esp+38h] [ebp-8Ch] int v46; // [esp+3Ch] [ebp-88h] CHAR *v47; // [esp+40h] [ebp-84h] int v48; // [esp+44h] [ebp-80h] int v49; // [esp+48h] [ebp-7Ch] int v50; // [esp+4Ch] [ebp-78h] const char *v51; // [esp+50h] [ebp-74h] const char *v52; // [esp+54h] [ebp-70h] const char *v53; // [esp+58h] [ebp-6Ch] const char *v54; // [esp+5Ch] [ebp-68h] const char *v55; // [esp+60h] [ebp-64h] const char *v56; // [esp+64h] [ebp-60h] const char *v57; // [esp+68h] [ebp-5Ch] const char *v58; // [esp+6Ch] [ebp-58h] const char *v59; // [esp+70h] [ebp-54h] int v60; // [esp+74h] [ebp-50h] char v61; // [esp+78h] [ebp-4Ch] int v62; // [esp+88h] [ebp-3Ch] int v63; // [esp+8Ch] [ebp-38h] char v64; // [esp+94h] [ebp-30h] int v65; // [esp+A4h] [ebp-20h] int v66; // [esp+A8h] [ebp-1Ch] volatile LONG **v67; // [esp+B0h] [ebp-14h] int v68; // [esp+C0h] [ebp-4h] v2 = this; v47 = (CHAR *)a2; v50 = 0; v68 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v68 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v50 ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); } return 0; } v43 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\ChrSkillPwr.nif"); sub_8F66B0(v5, (int)&v50, v43); if ( !v50 ) return 0; v6 = sub_8FB140(v50, (int)"Plane01", (int)&v49, (int)&v48, v3); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, (int)v47, (int)"SkillPowerWin", 0) ) { v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v50, (int)"Theme", (int)&v46, (int)&v45, v8); else v9 = sub_8FB140(v50, (int)"Theme", (int)&v46, (int)&v45, 0); sub_8F3EB0(v46 - v49, v45 - v48, (int)v9, (int)v2, 0, 0); sub_456260(v44); LOBYTE(v68) = 1; sub_455FF0(v44, (int)v2); sub_456000(v44, v49, v48); sub_456380(v44, v50); sub_456820(v44, (int)"Plane02", 0); sub_456820(v44, (int)"Plane03", 0); v10 = sub_456980( v44, (int)"SelectionName", (int)&unk_9DC129, 0, dword_AA8D98, dword_AA8D9C, dword_AA8DA0, dword_AA8DA4, 4, 0, 0); v2[91] = v10; v11 = *v10; v12 = (*(int (__thiscall **)(volatile LONG *))(*v10 + 164))(v10); (*(void (__thiscall **)(volatile LONG *, int))(v11 + 172))(v2[91], v12 + 3); v13 = sub_4563D0(v44, 9, (int)"OkNor", (int)"OkOver", (int)"OkClick", 0, 0); v14 = dword_AA8C68; v15 = dword_AA8C6C; v16 = dword_AA8C70; v17 = dword_AA8C74; v18 = sub_40C190(-1566315022); sub_456040((int)v13, (int)v18, v14, v15, v16, v17, 5); v19 = sub_4563D0(v44, 13, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_40C190(-2002610207); sub_456040((int)v19, (int)v24, v20, v21, v22, v23, 5); sub_4563D0(v44, 10, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v25 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v50 + 72))("HelpLinkNor") ) sub_4563D0(v44, 15, (int)"HelpLinkNor", (int)"HelpLinkClick", (int)"HelpLinkOver", 0, v25); v26 = dword_AA8D98; v27 = dword_AA8D9C; v28 = dword_AA8DA0; v29 = dword_AA8DA4; v30 = sub_40C190(1112884111); sub_456760(v44, (int)"WinTitle", (int)v30, v26, v27, v28, v29, 5); v31 = sub_8FB140(v50, (int)"PwrTgetSlot", (int)&v46, (int)&v45, 0); sub_8F3EB0(v46 - v49, v45 - v48, (int)v31, (int)v2, 0, 0); v2[90] = (volatile LONG *)sub_5AE500(v46 - v49 + 3, v45 - v48 + 3, (int)v2); v63 = 15; v62 = 0; v61 = 0; v66 = 15; v65 = 0; v64 = 0; LOBYTE(v68) = 2; v51 = "PwrSlot1"; v52 = "PwrUpNor01"; v53 = "PwrUpOver01"; v54 = "PwrUpClick01"; v55 = "PwrDnNor01"; v56 = "PwrDnOver01"; v57 = "PwrDnClick01"; v58 = "Title1Name"; v59 = "Title1Desc"; v60 = 0; v32 = (CHAR *)sub_40C190(2072871877); sub_4018E0(&v61, v32, strlen(v32)); v33 = (CHAR *)sub_40C190(2072871878); sub_4018E0(&v64, v33, strlen(v33)); v67 = v2 + 92; v2[86] = (volatile LONG *)sub_5AE650(v50, v49, v48, 0, (int)&v51, (int)v2); v51 = "PwrSlot2"; v52 = "PwrUpNor02"; v53 = "PwrUpOver02"; v54 = "PwrUpClick02"; v55 = "PwrDnNor02"; v56 = "PwrDnOver02"; v57 = "PwrDnClick02"; v58 = "Title2Name"; v59 = "Title2Desc"; v60 = 3; v34 = (CHAR *)sub_40C190(1956681597); v47 = v34 + 1; sub_4018E0(&v61, v34, strlen(v34)); v35 = (CHAR *)sub_40C190(1973458813); v47 = v35 + 1; sub_4018E0(&v64, v35, strlen(v35)); v67 = v2 + 92; v2[87] = (volatile LONG *)sub_5AE650(v50, v49, v48, 1, (int)&v51, (int)v2); v51 = "PwrSlot3"; v52 = "PwrUpNor03"; v53 = "PwrUpOver03"; v54 = "PwrUpClick03"; v55 = "PwrDnNor03"; v56 = "PwrDnOver03"; v57 = "PwrDnClick03"; v58 = "Title3Name"; v59 = "Title3Desc"; v60 = 2; v36 = (CHAR *)sub_40C190(-470628619); v47 = v36 + 1; sub_4018E0(&v61, v36, strlen(v36)); v37 = (CHAR *)sub_40C190(-470628618); sub_4018E0(&v64, v37, strlen(v37)); v67 = v2 + 92; v2[88] = (volatile LONG *)sub_5AE650(v50, v49, v48, 2, (int)&v51, (int)v2); v51 = "PwrSlot4"; v52 = "PwrUpNor04"; v53 = "PwrUpOver04"; v54 = "PwrUpClick04"; v55 = "PwrDnNor04"; v56 = "PwrDnOver04"; v57 = "PwrDnClick04"; v58 = "Title4Name"; v59 = "Title4Desc"; v60 = 1; v38 = (CHAR *)sub_40C190(-555284692); sub_4018E0(&v61, v38, strlen(v38)); v39 = (CHAR *)sub_40C190(-555284436); sub_4018E0(&v64, v39, strlen(v39)); v67 = v2 + 92; v40 = sub_5AE650(v50, v49, v48, 3, (int)&v51, (int)v2); v41 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD, _DWORD))*((_DWORD *)*v2 + 59); v2[89] = (volatile LONG *)v40; v41(v2, xRight, dword_AC2F78, 0.79000002, 0.5); sub_5AF1C0((int)&v51); LOBYTE(v68) = 0; sub_4562E0(v44); v68 = -1; if ( v50 ) { v42 = (void (__thiscall ***)(_DWORD, signed int))v50; if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v42 ) (**v42)(v42, 1); } } result = 1; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v50; v68 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005AF100) -------------------------------------------------------- void *__thiscall sub_5AF100(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SkillPowerIconWin::`vftable'; *((_DWORD *)this + 58) = &SkillPowerIconWin::`vftable'; sub_5D74F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DC3FC: using guessed type void *SkillPowerIconWin::`vftable'; // 9DC41C: using guessed type void *SkillPowerIconWin::`vftable'; //----- (005AF140) -------------------------------------------------------- void *__thiscall sub_5AF140(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SkillPowerListItemWin::`vftable'; *((_DWORD *)this + 58) = &SkillPowerListItemWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DC684: using guessed type void *SkillPowerListItemWin::`vftable'; // 9DC6A4: using guessed type void *SkillPowerListItemWin::`vftable'; //----- (005AF180) -------------------------------------------------------- void *__thiscall sub_5AF180(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SkillPowerWin::`vftable'; *((_DWORD *)this + 58) = &SkillPowerWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DC870: using guessed type void *SkillPowerWin::`vftable'; // 9DC88C: using guessed type void *SkillPowerWin::`vftable'; //----- (005AF1C0) -------------------------------------------------------- void __thiscall sub_5AF1C0(int this) { int v1; // esi v1 = this; if ( *(_DWORD *)(this + 88) >= 0x10u ) operator delete(*(void **)(this + 68)); *(_DWORD *)(v1 + 88) = 15; *(_DWORD *)(v1 + 84) = 0; *(_BYTE *)(v1 + 68) = 0; if ( *(_DWORD *)(v1 + 60) >= 0x10u ) operator delete(*(void **)(v1 + 40)); *(_DWORD *)(v1 + 56) = 0; *(_DWORD *)(v1 + 60) = 15; *(_BYTE *)(v1 + 40) = 0; } //----- (005AF2E0) -------------------------------------------------------- char __thiscall sub_5AF2E0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D75E0(this, a2, a3, a5); if ( result ) { v5[103] = a4; result = 1; } return result; } //----- (005AF320) -------------------------------------------------------- void __thiscall sub_5AF320(int this) { int v1; // esi unsigned __int16 v2; // dx unsigned int *v3; // ecx int v4; // eax v1 = this; if ( *(_BYTE *)(this + 428) ) { sub_5A85C0(*(_DWORD ***)(this + 272), *(_DWORD *)(this + 420)); sub_8F2F90(v1); } v2 = *(_WORD *)(v1 + 400); if ( v2 != -1 ) { v3 = *(unsigned int **)(v1 + 272); if ( v3 ) { v4 = *(_DWORD *)(v1 + 416); if ( v4 ) { if ( v4 == 1 ) sub_5A7EB0((_DWORD **)v3, v2, 0); sub_8F2F90(v1); } else { sub_5A9570(v3, v2, 1, 0, 0); sub_8F2F90(v1); } } } } //----- (005AF3A0) -------------------------------------------------------- int __thiscall sub_5AF3A0(char *this, int a2) { int v2; // esi signed int v3; // edi char *v5; // [esp+Ch] [ebp-4h] v5 = this; v2 = (int)(this + 620); v3 = 8; do { (*(void (__stdcall **)(int))(**(_DWORD **)v2 + 256))(a2); v2 += 4; --v3; } while ( v3 ); if ( (_BYTE)a2 ) return (*(int (__stdcall **)(signed int))(**((_DWORD **)v5 + 163) + 256))(1); sub_8F86A0(&unk_BA6B10, *((_DWORD **)v5 + 150)); return (*(int (__stdcall **)(_DWORD))(**((_DWORD **)v5 + 163) + 256))(0); } //----- (005AF430) -------------------------------------------------------- int __thiscall sub_5AF430(char *this) { char *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(**((_DWORD **)this + 151) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 152) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 154) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 153) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 167) + 256))(1); return sub_5AF3A0(v1, 0); } //----- (005AF4B0) -------------------------------------------------------- __int16 __thiscall sub_5AF4B0(_WORD **this, int a2) { _WORD **v2; // esi __int16 result; // ax __int16 v4; // di v2 = this; result = sub_5D6F80(this[a2 + 88]); v4 = result; if ( v2[86] == (_WORD *)3 ) { result = sub_6BE7D0(result); if ( (_BYTE)result ) { LOWORD(a2) = v4; result = sub_6C29C0(33, (int)&a2); } } return result; } //----- (005AF500) -------------------------------------------------------- int __thiscall sub_5AF500(_DWORD **this) { _BYTE *v1; // esi v1 = this; sub_8F86A0(&unk_BA6B10, this[150]); return sub_8F28E0(v1); } //----- (005AF520) -------------------------------------------------------- char __thiscall sub_5AF520(_DWORD **this) { return sub_8F82A0(&unk_BA6B10, this[165]); } //----- (005AF540) -------------------------------------------------------- int __thiscall sub_5AF540(int *this, char a2) { return sub_5ADB00(this[150], a2); } //----- (005AF550) -------------------------------------------------------- char __thiscall sub_5AF550(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[165]); } //----- (005AF570) -------------------------------------------------------- int __thiscall sub_5AF570(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = this[166]; if ( result ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)this[166]); result = a2; *(_DWORD *)(v2[166] + 440) = a2; } return result; } //----- (005AF5A0) -------------------------------------------------------- int __thiscall sub_5AF5A0(_DWORD *this) { return this[165]; } //----- (005AF5B0) -------------------------------------------------------- char sub_5AF5B0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "ChrSkill"); return (char)v0; } //----- (005AF5E0) -------------------------------------------------------- void __thiscall sub_5AF5E0(_WORD *this, int a2, int a3) { unsigned __int16 v3; // bx _WORD *v4; // esi void (__thiscall *v5)(_WORD *, _DWORD); // eax int v6; // edi int *v7; // eax int v8; // edi float v9; // ST0C_4 float v10; // ST08_4 float v11; // ST04_4 int v12; // ST08_4 int v13; // eax void (__thiscall *v14)(_WORD *, signed int); // eax int v15; // eax int v16; // edi int *v17; // eax int v18; // edi float v19; // ST0C_4 float v20; // ST08_4 float v21; // ST04_4 int v22; // ST08_4 int v23; // eax void (__thiscall *v24)(_WORD *, signed int); // eax int v25; // ecx v3 = a2; v4 = this; if ( (_WORD)a2 == -1 ) { (*(void (__stdcall **)(_DWORD, signed int, signed int, signed int))(*(_DWORD *)this + 584))(0, -1, 32, 32); v5 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 240); v4[14] |= 1u; v5(v4, 0); } else if ( a3 ) { v16 = dword_ACED88; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACED88 + 16))(dword_ACED88, a2) ) { if ( v3 <= *(_WORD *)(v16 + 200) ) { v17 = (int *)(*(_DWORD *)(v16 + 196) + 4 * v3); if ( *v17 ) { v18 = *v17; if ( *v17 ) { sub_5D77C0((int)v4, 0); v19 = (double)*(unsigned int *)(v18 + 78); v20 = (double)*(unsigned int *)(v18 + 74); v21 = (double)*(unsigned int *)(v18 + 70); sub_5D7110(v4, v21, v20, v19, 255.0); v22 = *(_DWORD *)(v18 + 34); a2 = *(_DWORD *)v4; v23 = sub_42BF30(v18 + 38); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(a2 + 584))(v4, v23, v22, 32, 32); v24 = *(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v4 + 240); v4[14] &= 0xFFFEu; v24(v4, 1); } } } } } else { v6 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, a2) ) { if ( v3 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v3); if ( *v7 ) { v8 = *v7; if ( *v7 ) { v9 = (double)*(unsigned int *)(v8 + 83); v10 = (double)*(unsigned int *)(v8 + 79); v11 = (double)*(unsigned int *)(v8 + 75); sub_5D7110(v4, v11, v10, v9, 255.0); v12 = *(_DWORD *)(v8 + 39); a2 = *(_DWORD *)v4; v13 = sub_42BF30(v8 + 43); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(a2 + 584))(v4, v13, v12, 32, 32); v14 = *(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v4 + 240); v4[14] &= 0xFFFEu; v14(v4, 1); v15 = *((_DWORD *)v4 + 101); if ( v3 < 0x4E20u ) { *(_WORD *)(v15 + 28) &= 0xFFFEu; sub_5D80B0((_DWORD **)v4); sub_6BFA60((int)&a2, v3); sub_5D77C0((int)v4, a2); } else { *(_WORD *)(v15 + 28) |= 1u; sub_5D77C0((int)v4, 0); sub_5D8230((_DWORD **)v4); } } } } } } v25 = a3; v4[200] = v3; *((_DWORD *)v4 + 104) = v25; } // ACEA9C: using guessed type int dword_ACEA9C; // ACED88: using guessed type int dword_ACED88; //----- (005AF850) -------------------------------------------------------- char __thiscall sub_5AF850(int this) { int v1; // esi v1 = this; if ( *(_DWORD *)(this + 344) == 3 ) return sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 660)); if ( !*(_DWORD *)(this + 600) ) *(_DWORD *)(this + 600) = sub_5AE7D0(*(_DWORD *)(this + 296)); return sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v1 + 600)); } //----- (005AF8A0) -------------------------------------------------------- signed int __thiscall sub_5AF8A0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi signed int result; // eax v2 = this; v3 = (unsigned __int16)sub_5D6F80((_WORD *)this[a2 + 88]); result = 0xFFFF; if ( (_WORD)v3 != -1 ) { if ( (unsigned __int16)v3 < 0x4E20u || (result = sub_6BE7D0(v3), (_BYTE)result) ) { v2[134] = 2; v2[136] = 1; v2[137] = v3; v2[135] = a2; v2[131] = v2; dword_BA6BCC = (int)(v2 + 129); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005AF920) -------------------------------------------------------- int __thiscall sub_5AF920(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax char *v5; // eax int v6; // edi int v7; // ST08_4 char *v8; // eax int v9; // edi int v10; // eax char *v11; // eax int v12; // ST08_4 v2 = this; if ( this[150] && (*(unsigned __int8 (**)(void))(*(_DWORD *)this[150] + 260))() ) { v3 = *(_DWORD *)v2[151]; v4 = sub_6BE630(); v5 = sub_7549E0("%2d", v4); (*(void (__thiscall **)(_DWORD, char *))(v3 + 472))(v2[151], v5); v6 = *(_DWORD *)v2[152]; v7 = sub_6BE670(); v8 = sub_7549E0("%2d", v7); } else { v9 = *(_DWORD *)v2[151]; v10 = sub_6BE600(); v11 = sub_7549E0("%2d", v10); (*(void (__thiscall **)(_DWORD, char *))(v9 + 472))(v2[151], v11); v6 = *(_DWORD *)v2[152]; v12 = sub_6856E0(&byte_ADA230); v8 = sub_7549E0("%2d", v12); } return (*(int (__thiscall **)(_DWORD, char *))(v6 + 472))(v2[152], v8); } // ADA230: using guessed type char byte_ADA230; //----- (005AF9E0) -------------------------------------------------------- char __thiscall sub_5AF9E0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, volatile LONG *a7, int a8, int a9) { volatile LONG **v9; // esi char result; // al void (__thiscall *v11)(volatile LONG **, int); // edx v9 = this; result = sub_8F43D0(this, a2, a3, a4, a5, a8, a9); if ( result ) { (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 138))(v9, 0); v11 = (void (__thiscall *)(volatile LONG **, int))*((_DWORD *)*v9 + 129); v9[79] = *(volatile LONG **)(a4 + 20); v11(v9, a6); v9[81] = a7; result = 1; } return result; } //----- (005AFA50) -------------------------------------------------------- char __thiscall sub_5AFA50(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[81]); return (char)v2; } //----- (005AFA80) -------------------------------------------------------- char __thiscall sub_5AFA80(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, volatile LONG *a9) { volatile LONG **v9; // esi char result; // al void (__thiscall *v11)(volatile LONG **, int); // edx v9 = this; result = sub_8F43D0(this, a2, a3, a4, a5, a7, a8); if ( result ) { (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 138))(v9, 0); v11 = (void (__thiscall *)(volatile LONG **, int))*((_DWORD *)*v9 + 129); v9[79] = *(volatile LONG **)(a4 + 20); v11(v9, a6); v9[81] = a9; result = 1; } return result; } //----- (005AFAF0) -------------------------------------------------------- char __thiscall sub_5AFAF0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[81]); return (char)v2; } //----- (005AFB20) -------------------------------------------------------- _DWORD *__thiscall sub_5AFB20(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_5D7A30(this); *v1 = &SkillInvWin::`vftable'; v1[58] = &SkillInvWin::`vftable'; v1[103] = -1; sub_5AF5E0(v1, 0xFFFF, 0); v1[105] = -1; *((_BYTE *)v1 + 428) = 0; v1[106] = -1; return v1; } // 9DD28C: using guessed type void *SkillInvWin::`vftable'; // 9DD2AC: using guessed type void *SkillInvWin::`vftable'; //----- (005AFBB0) -------------------------------------------------------- void __thiscall sub_5AFBB0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; if ( !this[104] ) { v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) sub_8F2C80(v2, v1[74], v1[103]); } } //----- (005AFBE0) -------------------------------------------------------- void __thiscall sub_5AFBE0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; if ( !this[104] ) { v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) sub_8F2C80(v2, v1[81], v1[103]); } } //----- (005AFC10) -------------------------------------------------------- signed int __thiscall sub_5AFC10(_WORD *this, signed int a2, int a3) { unsigned int v3; // edi _WORD *v4; // esi void (__thiscall *v5)(_WORD *, _DWORD); // edx signed int result; // eax unsigned __int16 *v7; // ebx unsigned int v8; // edi int v9; // eax int v10; // edi int v11; // ST04_4 int v12; // eax int v13; // edx unsigned int v14; // [esp+Ch] [ebp-4h] v3 = 0; v4 = this; v14 = 0; if ( sub_5B3A80() ) { while ( 1 ) { if ( v3 >= sub_5B3A80() ) { LABEL_7: v7 = 0; } else { while ( !sub_7474E0((_DWORD *)(dword_ACD994 + 4), v3) ) { if ( ++v3 >= sub_5B3A80() ) goto LABEL_7; } v7 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD994 + 4), v3); } v8 = v14; if ( v14 >= sub_5ABA70() ) { LABEL_11: v9 = 0; } else { while ( !sub_7474E0((_DWORD *)(dword_ACD990 + 4), v8) ) { if ( ++v8 >= sub_5ABA70() ) goto LABEL_11; } v9 = sub_7474E0((_DWORD *)(dword_ACD990 + 4), v8); } if ( a3 == *(_DWORD *)(v7 + 19) && a2 < (signed int)v14 && *v7 == *(_WORD *)v9 && v7[1] == *(_WORD *)(v9 + 2) ) break; if ( ++v14 >= sub_5B3A80() ) goto LABEL_2; v3 = v14; } v10 = *(_DWORD *)v4; v11 = *(_DWORD *)(v9 + 4); v12 = sub_42BF30(v9 + 8); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(v10 + 584))(v4, v12, v11, 32, 32); v13 = *(_DWORD *)v4; v4[14] &= 0xFFFEu; (*(void (__thiscall **)(_WORD *, signed int))(v13 + 240))(v4, 1); result = v14; *((_DWORD *)v4 + 105) = v7[1]; *((_DWORD *)v4 + 106) = *v7; *((_BYTE *)v4 + 428) = 1; } else { LABEL_2: (*(void (__thiscall **)(_WORD *, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v4 + 584))( v4, 0, -1, 32, 32); v5 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 240); v4[14] |= 1u; v5(v4, 0); result = -1; } return result; } // ACD990: using guessed type int dword_ACD990; // ACD994: using guessed type int dword_ACD994; //----- (005AFD80) -------------------------------------------------------- void __thiscall sub_5AFD80(_DWORD *this, int a2) { int v2; // esi _WORD *v3; // ecx unsigned __int16 v4; // ax int v5; // eax v2 = (int)this; v3 = (_WORD *)this[a2 + 88]; if ( v3 && sub_5D6F80(v3) != -1 ) { sub_5AF850(v2); v4 = sub_5D6F80(*(_WORD **)(v2 + 4 * a2 + 352)); sub_5AE460(*(_DWORD **)(v2 + 600), v4); v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) sub_4A8140(v5, 22); } } //----- (005AFDF0) -------------------------------------------------------- LONG __thiscall sub_5AFDF0(_DWORD *this) { _DWORD *v1; // ebx bool v2; // zf int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi void (__thiscall ***v5)(_DWORD, signed int); // esi int v6; // edi _DWORD *v7; // esi _DWORD *v8; // ST00_4 int v10; // [esp+18h] [ebp-10h] int v11; // [esp+24h] [ebp-4h] v1 = this; *this = &SkillWin::`vftable'; this[58] = &SkillWin::`vftable'; v2 = this[171] == 0; v11 = 3; if ( !v2 ) { do { sub_6B7B30(v1 + 168, &v10); v3 = v10; LOBYTE(v11) = 4; if ( v10 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v4 ) (**v4)(v4, 1); v3 = 0; v10 = 0; } LOBYTE(v11) = 3; if ( v3 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } while ( v1[171] ); } v6 = (int)(v1 + 168); v1[168] = &PgTList>::`vftable'; v7 = (_DWORD *)v1[169]; LOBYTE(v11) = 5; while ( v7 ) { v8 = v7; v7 = (_DWORD *)*v7; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v6 + 8))(v1 + 168, v8); } v1[171] = 0; v1[169] = 0; v1[170] = 0; *(_DWORD *)v6 = &NiTListBase,NiPointer>::`vftable'; v1[132] = &DropContents::`vftable'; v1[129] = &PgWinDrop::`vftable'; v11 = -1; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9DD538: using guessed type void *PgTList>::`vftable'; // 9DD548: using guessed type void *SkillWin::`vftable'; // 9DD564: using guessed type void *SkillWin::`vftable'; //----- (005AFF20) -------------------------------------------------------- _DWORD *__thiscall sub_5AFF20(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &SkillWin::`vftable'; v1[58] = &SkillWin::`vftable'; v1[131] = 0; v1[129] = &PgWinDrop::`vftable'; v1[148] = 0; v1[132] = &DropContents::`vftable'; *((_WORD *)v1 + 294) = -1; v1[171] = 0; v1[169] = 0; v1[170] = 0; v1[168] = &PgTList>::`vftable'; v1[130] = v1 + 132; v1[88] = 0; v1[155] = 0; v1[89] = 0; v1[156] = 0; v1[90] = 0; v1[157] = 0; v1[91] = 0; v1[158] = 0; v1[92] = 0; v1[159] = 0; v1[93] = 0; v1[160] = 0; v1[94] = 0; v1[161] = 0; v1[95] = 0; v1[162] = 0; v1[163] = 0; v1[128] = 0; v1[86] = 0; v1[87] = 0; v1[150] = 0; v1[164] = 0; v1[167] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DD538: using guessed type void *PgTList>::`vftable'; // 9DD548: using guessed type void *SkillWin::`vftable'; // 9DD564: using guessed type void *SkillWin::`vftable'; //----- (005B0020) -------------------------------------------------------- int __cdecl sub_5B0020(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // eax int v9; // esi void (__thiscall ***v10)(void *, signed int); // edi int result; // eax void *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v8 = operator new(0x148u); v9 = (int)v8; v12 = v8; v13 = 0; if ( v8 ) { sub_8FE000(v8); *(_DWORD *)v9 = &PosInfoWinBut::`vftable'; *(_DWORD *)(v9 + 232) = &PosInfoWinBut::`vftable'; *(_DWORD *)(v9 + 324) = 0; } else { v9 = 0; } if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v13 = 1; sub_403790(&unk_BA6B10, v9); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int, int))(*(_DWORD *)v9 + 560))( v9, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9); v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v12, (_DWORD *)v9); if ( v12 ) { v10 = (void (__thiscall ***)(void *, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)v12 + 1) ) { if ( v10 ) (**v10)(v10, 1); } } v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = 0; } return result; } // 9DCDDC: using guessed type void *PosInfoWinBut::`vftable'; // 9DCDFC: using guessed type void *PosInfoWinBut::`vftable'; //----- (005B0180) -------------------------------------------------------- int __cdecl sub_5B0180(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // eax int v9; // esi void (__thiscall ***v10)(void *, signed int); // edi int result; // eax void *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v8 = operator new(0x14Cu); v9 = (int)v8; v12 = v8; v13 = 0; if ( v8 ) { sub_8FE000(v8); *(_DWORD *)v9 = &LevelSelectWinBut::`vftable'; *(_DWORD *)(v9 + 232) = &LevelSelectWinBut::`vftable'; *(_DWORD *)(v9 + 324) = -1; *(_BYTE *)(v9 + 328) = 0; } else { v9 = 0; } if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v13 = 1; sub_403790(&unk_BA6B10, v9); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int, int))(*(_DWORD *)v9 + 560))( v9, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9); v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v12, (_DWORD *)v9); if ( v12 ) { v10 = (void (__thiscall ***)(void *, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)v12 + 1) ) { if ( v10 ) (**v10)(v10, 1); } } v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = 0; } return result; } // 9DD034: using guessed type void *LevelSelectWinBut::`vftable'; // 9DD054: using guessed type void *LevelSelectWinBut::`vftable'; //----- (005B02F0) -------------------------------------------------------- volatile LONG *__cdecl sub_5B02F0(int a1, int a2, int a3, int a4) { _DWORD *v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(void *, signed int); // edi volatile LONG *result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1B0u); v8 = v4; v9 = 0; if ( v4 ) v5 = sub_5AFB20(v4); else v5 = 0; if ( v5 ) InterlockedIncrement(v5 + 1); v9 = 1; sub_403790(&unk_BA6B10, (int)v5); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int))(*v5 + 612))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(volatile LONG *))(*v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); result = 0; } return result; } //----- (005B0430) -------------------------------------------------------- volatile LONG *__cdecl sub_5B0430(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2B8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5AFF20(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005B0560) -------------------------------------------------------- char __thiscall sub_5B0560(volatile LONG **this, int a2) { volatile LONG **v2; // edi int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // esi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax int v16; // eax volatile LONG *v17; // esi const CHAR *v18; // eax volatile LONG *v19; // esi volatile LONG **v20; // eax volatile LONG *v21; // ecx int v22; // esi int v23; // eax volatile LONG *v24; // eax int v25; // esi const CHAR *v26; // eax _DWORD *v27; // eax int v28; // esi volatile LONG **v29; // eax volatile LONG *v30; // eax int v31; // edx volatile LONG *v32; // eax int v33; // eax const char *v34; // eax int v35; // eax volatile LONG *v36; // eax int v37; // eax const char *v38; // eax int v39; // eax const char *v40; // eax volatile LONG **v41; // esi int v42; // ST54_4 int v43; // esi const char *v44; // eax volatile LONG *v45; // ST64_4 const char *v46; // eax volatile LONG *v47; // ST64_4 const char *v48; // eax const char *v49; // eax const char *v50; // eax volatile LONG **v51; // eax int v52; // eax volatile LONG *v53; // eax char v54; // ST54_1 int v55; // ST58_4 int v56; // ST5C_4 int v57; // ST60_4 const CHAR *v58; // eax _DWORD *v59; // eax char v60; // ST54_1 int v61; // ST58_4 int v62; // ST5C_4 int v63; // ST60_4 const CHAR *v64; // eax _DWORD *v65; // eax volatile LONG **v66; // eax volatile LONG *v67; // eax int v68; // eax void (__thiscall *v69)(volatile LONG **, int, int, _DWORD, _DWORD); // edx char v70; // [esp+78h] [ebp-D4h] char v71; // [esp+7Ch] [ebp-D0h] char v72; // [esp+80h] [ebp-CCh] char v73; // [esp+84h] [ebp-C8h] char v74; // [esp+88h] [ebp-C4h] char v75; // [esp+8Ch] [ebp-C0h] char v76; // [esp+90h] [ebp-BCh] char v77; // [esp+94h] [ebp-B8h] int v78; // [esp+98h] [ebp-B4h] int v79; // [esp+9Ch] [ebp-B0h] int v80; // [esp+A0h] [ebp-ACh] int v81; // [esp+A4h] [ebp-A8h] int v82; // [esp+A8h] [ebp-A4h] int v83; // [esp+ACh] [ebp-A0h] int v84; // [esp+B0h] [ebp-9Ch] int v85; // [esp+B4h] [ebp-98h] int v86; // [esp+B8h] [ebp-94h] int v87; // [esp+BCh] [ebp-90h] int v88; // [esp+C0h] [ebp-8Ch] int v89; // [esp+C4h] [ebp-88h] int v90[5]; // [esp+C8h] [ebp-84h] int v91; // [esp+DCh] [ebp-70h] int v92; // [esp+E0h] [ebp-6Ch] int v93; // [esp+E4h] [ebp-68h] volatile LONG *v94; // [esp+E8h] [ebp-64h] int v95; // [esp+ECh] [ebp-60h] char v96; // [esp+F0h] [ebp-5Ch] volatile LONG *v97; // [esp+F4h] [ebp-58h] volatile LONG *v98; // [esp+F8h] [ebp-54h] int v99; // [esp+FCh] [ebp-50h] volatile LONG *v100; // [esp+100h] [ebp-4Ch] int v101; // [esp+104h] [ebp-48h] void **v102; // [esp+108h] [ebp-44h] int v103; // [esp+10Ch] [ebp-40h] int v104; // [esp+110h] [ebp-3Ch] int v105; // [esp+114h] [ebp-38h] char v106; // [esp+118h] [ebp-34h] int v107; // [esp+148h] [ebp-4h] v2 = this; v105 = 0; v107 = 0; v101 = 0; LOBYTE(v107) = 1; v100 = (volatile LONG *)sub_43D0D0(4u); if ( !v100 ) { v107 = -1; if ( v105 && !InterlockedDecrement((volatile LONG *)(v105 + 4)) ) { if ( v105 ) (**(void (__thiscall ***)(int, signed int))v105)(v105, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\ChrSkill.nif"); sub_8F66B0(v5, (int)&v105, v4); if ( !v105 ) return 0; v6 = sub_8FB140(v105, (int)"Frame", (int)&v104, (int)&v103, 0); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, a2, (int)"SkillWin", 0) ) { v8 = v103; v9 = v104; v99 = v103; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v105, (int)"Theme", (int)&v104, (int)&v103, v10); else v11 = sub_8FB140(v105, (int)"Theme", (int)&v104, (int)&v103, 0); sub_8F3EB0(v104 - v9, v103 - v8, (int)v11, (int)v2, 0, 0); v102 = (void **)sub_8FB140(v105, (int)"ClsNor", (int)&v104, (int)&v103, v100); sub_8FB650(v102, v105, (int)"ClsClick"); sub_8FB650(v102, v105, (int)"ClsOver"); sub_90C8D0(v104 - v9, v103 - v8, (int)v102, (int)v2); v98 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v105 + 72))("HelpLinkNor") ) { v102 = (void **)sub_8FB140(v105, (int)"HelpLinkNor", (int)&v104, (int)&v103, v98); sub_8FB650(v102, v105, (int)"HelpLinkClick"); sub_8FB650(v102, v105, (int)"HelpLinkOver"); sub_8FE0F0(v104 - v9, v103 - v8, (int)v102, (int)v2, 22, 0, 0); } v12 = sub_8FB140(v105, (int)"Panel01", (int)&v104, (int)&v103, v100); v13 = sub_8F3EB0(v104 - v9, v103 - v8, (int)v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v105, (int)"Panel02", (int)&v104, (int)&v103, v100); sub_8F3EB0(v104 - v9, v103 - v8, (int)v14, (int)v2, 0, 0); v15 = sub_8FB140(v105, (int)"BtnBack", (int)&v104, (int)&v103, v100); sub_8F3EB0(v104 - v9, v103 - v8, (int)v15, (int)v2, 0, 0); if ( sub_8F71E0(v105, (int)"WinTitle", &v104, &v103, &v95, &v93) ) { v16 = sub_421050(7); v17 = sub_8F4A20(v104 - v9, v103 - v8 + 2, v95, v93, v16, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v17 + 468))(v17, &dword_AA8D98); v98 = (volatile LONG *)(*v17 + 472); v18 = sub_40C190(-1627458328); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v98)(v17, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v19 = v100; v20 = sub_8FB140(v105, (int)"IconSlot", (int)&v104, (int)&v103, v100); sub_8F3EB0(v104 - v9, v103 - v99, (int)v20, (int)v2, 0, 0); sub_8FB140(v105, (int)"IconSlot00", (int)&v82, (int)&v80, v19); if ( sub_8F71E0(v105, (int)"IconTxtPro", &v92, &v91, &v87, &v78) ) { if ( sub_8F71E0(v105, (int)"IconLevelPro", &v81, &v85, &v79, &v89) && sub_8F71E0(v105, (int)"ImPowerNor", &v75, &v70, &v72, &v77) && sub_8F71E0(v105, (int)"NextLevelNor", &v88, &v83, &v73, &v71) && sub_8F71E0(v105, (int)"PreLevelNor", &v84, &v86, &v74, &v76) ) { v21 = sub_8FB140(v105, (int)"Text01", (int)&v104, (int)&v103, v19)[9]; v22 = *(_DWORD *)(*v21 + 24); v98 = *(volatile LONG **)(*v21 + 20); v23 = sub_421050(7); v24 = sub_8F4A20(v104, v103, (int)v98, v22, v23, (int)v2, 0, 0); v2[163] = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 2); v25 = *v2[163]; v26 = sub_40A910(-522070568); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v25 + 472))(v2[163], v26); (*(void (__stdcall **)(_DWORD))(*v2[163] + 240))(0); sub_456260(v90); LOBYTE(v107) = 2; sub_455FF0(v90, (int)v2); sub_456000(v90, v9, v99); sub_456380(v90, v105); v27 = sub_4560E0((void *)7, 0); sub_56FF80(&v101, (int)v27); sub_8B8EC0(v2 + 168, &v101); v97 = 0; v28 = (int)(v2 + 96); do { v94 = (volatile LONG *)((char *)v97 + 1); sprintf(&v106, "IconSlotBox%02d", (char *)v97 + 1); v29 = sub_8FB140(v105, (int)&v106, (int)&v104, (int)&v103, v100); sub_8F3EB0(v104 - v9, v103 - v99, (int)v29, (int)v2, 0, 0); sub_8FB140(v105, (int)"IconSlot00", (int)&v98, (int)&v96, v100); v30 = sub_5B02F0(v104 + v82 - v9, v103 + v80 - v99, (int)v97, (int)v2); *(_DWORD *)(v28 - 32) = v30; sub_5AF5E0(v30, 0xFFFF, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 - 32) + 516))(9); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v28 - 32) + 560))(10); v31 = v101; *(_DWORD *)(*(_DWORD *)(v28 - 32) + 272) = dword_AD019C; v32 = sub_8F4A20(v104 + v92 - v9, v103 + v91 - v99, v87, v78, v31, (int)v2, 0, 0); *(_DWORD *)v28 = v32; (*(void (__thiscall **)(volatile LONG *, char *))(*v32 + 468))(v32, aIii); (*(void (__stdcall **)(signed int))(**(_DWORD **)v28 + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)v28 + 472))(&unk_9DCAC2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v28 + 240))(0); v102 = (void **)sub_8FB140(v105, (int)"ImPowerNor", (int)&v98, (int)&v96, 0); sub_8FB650(v102, v105, (int)"ImPowerClick"); sub_8FB650(v102, v105, (int)"ImPowerOver"); v33 = sub_5B0020(v104 + v92 - v9, v91 - v99 + v103 + 3, (int)v102, (int)v2, 21, (int)v97, 0, 0); *(_DWORD *)(v28 + 236) = v33; *(_DWORD *)(v33 + 272) = dword_AD01E8; v34 = sub_40A910(-1377382163); sub_8F2EA0(*(void ***)(v28 + 236), v34); v35 = sub_421050(7); v36 = sub_8F4A20(v104 + v81 - v9, v103 + v85 - v99, v79, v89, v35, (int)v2, 0, 0); *(_DWORD *)(v28 + 32) = v36; (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 488))(v36, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v28 + 32) + 472))(&unk_9DCAC3); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v28 + 32) + 240))(0); v102 = (void **)sub_8FB140(v105, (int)"NextLevelNor", (int)&v98, (int)&v96, v100); sub_8FB650(v102, v105, (int)"NextLevelClick"); sub_8FB650(v102, v105, (int)"NextLevelOver"); v37 = sub_5B0180(v104 + v88 - v9, v103 + v83 - v99, (int)v102, (int)v2, 19, 0, 0, (int)v97); *(_DWORD *)(v28 + 64) = v37; *(_DWORD *)(v37 + 272) = dword_AD01E8; v38 = sub_40A910(265297708); sub_8F2EA0(*(void ***)(v28 + 64), v38); v102 = (void **)sub_8FB140(v105, (int)"PreLevelNor", (int)&v98, (int)&v96, v100); sub_8FB650(v102, v105, (int)"PreLevelClick"); sub_8FB650(v102, v105, (int)"PreLevelOver"); v39 = sub_5B0180(v104 + v84 - v9, v103 + v86 - v99, (int)v102, (int)v2, 20, 0, 0, (int)v97); *(_DWORD *)(v28 + 96) = v39; *(_DWORD *)(v39 + 272) = dword_AD01E8; v40 = sub_40A910(1562844699); sub_8F2EA0(*(void ***)(v28 + 96), v40); v28 += 4; v97 = v94; } while ( (unsigned int)v94 < 8 ); v41 = sub_8FB140(v105, (int)"ActSkNor", (int)&v104, (int)&v103, v100); sub_8FB650(v41, v105, (int)"ActSkClick"); sub_8FB650(v41, v105, (int)"ActSkOver"); v42 = (int)v41; v43 = v99; v102 = (void **)sub_8FE0F0(v104 - v9, v103 - v99, v42, (int)v2, 11, 0, 0); v44 = sub_40C190(-604573197); sub_8F2EA0(v102, v44); v45 = v100; v102[68] = (void *)dword_AD01E8; v102 = (void **)sub_8FB140(v105, (int)"PasSkNor", (int)&v104, (int)&v103, v45); sub_8FB650(v102, v105, (int)"PasSkClick"); sub_8FB650(v102, v105, (int)"PasSkOver"); v102 = (void **)sub_8FE0F0(v104 - v9, v103 - v43, (int)v102, (int)v2, 12, 0, 0); v46 = sub_40C190(-352781513); sub_8F2EA0(v102, v46); v47 = v100; v102[68] = (void *)dword_AD01E8; v102 = (void **)sub_8FB140(v105, (int)"ProSkNor", (int)&v104, (int)&v103, v47); sub_8FB650(v102, v105, (int)"ProSkClick"); sub_8FB650(v102, v105, (int)"ProSkOver"); v102 = (void **)sub_8FE0F0(v104 - v9, v103 - v43, (int)v102, (int)v2, 14, 0, 0); v48 = sub_40C190(-219811781); sub_8F2EA0(v102, v48); v102[68] = (void *)dword_AD01E8; v94 = (volatile LONG *)sub_43D0D0(0x1Cu); v102 = (void **)sub_8FB140(v105, (int)"PrePageNor", (int)&v104, (int)&v103, v94); sub_8FB650(v102, v105, (int)"PrePageClick"); sub_8FB650(v102, v105, (int)"PrePageOver"); v102 = (void **)sub_8FE0F0(v104 - v9, v103 - v43, (int)v102, (int)v2, 15, 0, 0); v102[68] = (void *)dword_AD01E8; v49 = sub_4090F0(1787467888); sub_8F2EA0(v102, v49); v102 = (void **)sub_8FB140(v105, (int)"NextPageNor", (int)&v104, (int)&v103, v94); sub_8FB650(v102, v105, (int)"NextPageClick"); sub_8FB650(v102, v105, (int)"NextPageOver"); v102 = (void **)sub_8FE0F0(v104 - v9, v103 - v43, (int)v102, (int)v2, 16, 0, 0); v102[68] = (void *)dword_AD01E8; v50 = sub_4090F0(625253762); sub_8F2EA0(v102, v50); v51 = sub_8FB140(v105, (int)"Number", (int)&v104, (int)&v103, v100); sub_8F3EB0(v104 - v9, v103 - v43, (int)v51, (int)v2, 0, 0); if ( sub_8F71E0(v105, (int)"Number01", &v104, &v103, &v95, &v93) ) { v52 = sub_421050(0); v53 = sub_8F4A20(v104 - v9, v103 - v43, v95, v93, v52, (int)v2, 0, 0); v2[172] = v53; (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 5); v54 = dword_AA8D98; v55 = dword_AA8D9C; v56 = dword_AA8DA0; v57 = dword_AA8DA4; v58 = sub_40C190(1262961548); v2[153] = sub_456760(v90, (int)"SPwrPt", (int)v58, v54, v55, v56, v57, 6); v2[151] = sub_456760( v90, (int)"SPwrPtBox", (int)"0", dword_AA8D98, dword_AA8D9C, dword_AA8DA0, dword_AA8DA4, 4); v59 = sub_4560E0((void *)2, 0); sub_56FF80(&v101, (int)v59); (*(void (__stdcall **)(int))(*v2[151] + 452))(v101); (*(void (__stdcall **)(char *))(*v2[151] + 468))(aIii); sub_8B8EC0(v2 + 168, &v101); v60 = dword_AA8D98; v61 = dword_AA8D9C; v62 = dword_AA8DA0; v63 = dword_AA8DA4; v64 = sub_40C190(912271154); v2[154] = sub_456760(v90, (int)"SPwrPt01", (int)v64, v60, v61, v62, v63, 6); v2[152] = sub_456760( v90, (int)"SPwrPtBox01", (int)"0", dword_AA8D98, dword_AA8D9C, dword_AA8DA0, dword_AA8DA4, 4); v65 = sub_4560E0((void *)2, 0); sub_56FF80(&v101, (int)v65); (*(void (__stdcall **)(int))(*v2[152] + 452))(v101); (*(void (__stdcall **)(char *))(*v2[152] + 468))(aIii); sub_8B8EC0(v2 + 168, &v101); v66 = sub_8FB140(v105, (int)"PBtn", (int)&v104, (int)&v103, v100); v67 = sub_8F3EB0(v104, v103, (int)v66, (int)v2, 0, 0); v2[167] = v67; (*(void (__thiscall **)(volatile LONG *, signed int))(*v67 + 256))(v67, 1); v2[165] = sub_5957E0(0); v68 = sub_5AD3C0(0); v69 = (void (__thiscall *)(volatile LONG **, int, int, _DWORD, _DWORD))*((_DWORD *)*v2 + 59); v2[166] = (volatile LONG *)v68; v69(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v107) = 1; sub_4562E0(v90); LOBYTE(v107) = 0; sub_410C00(&v101); v107 = -1; sub_410C00(&v105); return 1; } LOBYTE(v107) = 1; sub_4562E0(v90); } } } LOBYTE(v107) = 0; sub_410C00(&v101); v107 = -1; sub_410C00(&v105); return 0; } v7 = (void (__thiscall ***)(_DWORD, signed int))v105; v107 = -1; if ( v105 && !InterlockedDecrement((volatile LONG *)(v105 + 4)) && v7 ) (**v7)(v7, 1); return 0; } // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD019C: using guessed type int dword_AD019C; // AD01E8: using guessed type int dword_AD01E8; //----- (005B14D0) -------------------------------------------------------- void __thiscall sub_5B14D0(_DWORD *this, int a2, unsigned __int8 a3) { int v3; // ebx bool v4; // zf int v5; // eax unsigned int v6; // ecx int v7; // edi int v8; // esi unsigned __int8 (__thiscall *v9)(int, int); // eax int *v10; // eax int v11; // eax void *v12; // ecx unsigned int v13; // edi int v14; // eax bool v15; // cf bool v16; // bl int v17; // eax bool v18; // bl int v19; // edi int v20; // ebx unsigned int v21; // [esp+10h] [ebp-68h] int v22; // [esp+14h] [ebp-64h] int v23; // [esp+18h] [ebp-60h] _DWORD *v24; // [esp+1Ch] [ebp-5Ch] int v25; // [esp+20h] [ebp-58h] unsigned int v26; // [esp+24h] [ebp-54h] void *v27; // [esp+28h] [ebp-50h] unsigned int v28; // [esp+3Ch] [ebp-3Ch] void *v29; // [esp+44h] [ebp-34h] int v30; // [esp+54h] [ebp-24h] unsigned int v31; // [esp+58h] [ebp-20h] char v32; // [esp+60h] [ebp-18h] int v33; // [esp+74h] [ebp-4h] v3 = (int)this; v4 = this[86] == 0; v24 = this; v23 = a2; if ( v4 ) { v5 = sub_6BE300(); v6 = 0; v21 = v5; v26 = 0; if ( v5 ) { while ( 1 ) { v7 = (unsigned __int16)*sub_6BE310(v6); v8 = dword_ACE8D0; v9 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16); v25 = v7; if ( v9(dword_ACE8D0, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) ) { v10 = (int *)(*(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)v7); if ( *v10 ) { v11 = *v10; if ( v11 ) { v12 = (void *)(v11 + 34); v13 = strlen((const char *)(v11 + 34)); v31 = 15; v30 = 0; LOBYTE(v29) = 0; sub_4018E0(&v29, v12, strlen((const char *)v12)); v33 = 0; v14 = sub_426900((const void **)&v29, (int)&v27, 0, (void *)(v13 - 4)); v15 = *(_DWORD *)(v14 + 20) < 0x10u; LOBYTE(v33) = 1; if ( !v15 ) v14 = *(_DWORD *)v14; v16 = strcmp( (const char *)(*(int (**)(void))(**(_DWORD **)(v3 + 4 * v23 + 384) + 484))(), (const char *)v14) == 0; LOBYTE(v33) = 0; if ( v28 >= 0x10 ) operator delete(v27); if ( v16 ) { v17 = sub_426900((const void **)&v29, (int)&v27, v13 - 3, (void *)2); if ( *(_DWORD *)(v17 + 20) >= 0x10u ) v17 = *(_DWORD *)v17; v18 = a3 == atoi((const char *)v17); if ( v28 >= 0x10 ) operator delete(v27); if ( v18 ) { v19 = (int)v24; v20 = v23; sub_5AF5E0((_WORD *)v24[v23 + 88], v25, 0); sprintf(&v32, "%02d/%02d", a3, *(unsigned __int8 *)(*(_DWORD *)(v19 + 4 * v20 + 448) + 328)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v19 + 4 * v20 + 416) + 472))(&v32); sub_6BFA60((int)&v22, v25); sub_5D77C0(*(_DWORD *)(v19 + 4 * v20 + 352), v22); } } v33 = -1; if ( v31 >= 0x10 ) operator delete(v29); } } } } v6 = v26 + 1; v26 = v6; if ( v6 >= v21 ) break; v3 = (int)v24; } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (005B1750) -------------------------------------------------------- int __thiscall sub_5B1750(_DWORD *this) { int v1; // eax const char **v2; // ebx unsigned int v3; // eax unsigned int v4; // ecx __int16 *v5; // eax int v6; // edi int v7; // esi int *v8; // eax int v9; // eax void *v10; // ecx const char *v11; // eax const char *v12; // esi int v13; // edi int v14; // eax bool v15; // bl const char **v16; // eax const char **v17; // ebx unsigned int v18; // esi int v19; // eax bool v20; // bl int v21; // eax char v22; // al int v23; // eax void *v24; // edx int v25; // eax char *v26; // edi void **v27; // edx int v28; // esi unsigned int v29; // eax unsigned int v30; // eax unsigned int v31; // ecx char *v32; // ecx unsigned int v33; // eax unsigned int v34; // eax unsigned int v35; // ecx char *v36; // ecx void *v37; // esi char *v39; // ecx void **v40; // edi const char *v41; // eax const char *v42; // esi int v43; // edi int v44; // eax bool v45; // bl const char **v46; // eax const char **v47; // ebx unsigned int v48; // esi int v49; // eax bool v50; // bl int v51; // eax char v52; // al int v53; // eax bool v54; // cf void *v55; // edx int v56; // eax char *v57; // edx int v58; // esi unsigned int v59; // eax unsigned int v60; // eax unsigned int v61; // ecx char *v62; // ecx unsigned int v63; // eax unsigned int v64; // eax unsigned int v65; // ecx char *v66; // ecx void *v67; // esi unsigned int v68; // [esp+10h] [ebp-70h] unsigned int v69; // [esp+10h] [ebp-70h] __int16 v70; // [esp+14h] [ebp-6Ch] __int16 v71; // [esp+14h] [ebp-6Ch] int v72; // [esp+18h] [ebp-68h] unsigned int v73; // [esp+1Ch] [ebp-64h] unsigned int v74; // [esp+1Ch] [ebp-64h] void *v75; // [esp+20h] [ebp-60h] void *v76; // [esp+24h] [ebp-5Ch] char *v77; // [esp+28h] [ebp-58h] const char **v78; // [esp+30h] [ebp-50h] const char **v79; // [esp+34h] [ebp-4Ch] void *v80; // [esp+38h] [ebp-48h] int v81; // [esp+48h] [ebp-38h] unsigned int v82; // [esp+4Ch] [ebp-34h] void *v83; // [esp+54h] [ebp-2Ch] unsigned int v84; // [esp+68h] [ebp-18h] int v85; // [esp+7Ch] [ebp-4h] v1 = this[86]; v72 = 0; switch ( v1 ) { case 0: v2 = 0; v75 = 0; v76 = 0; v77 = 0; v85 = 0; v3 = sub_6BE300(); v4 = 0; v68 = v3; v73 = 0; if ( v3 > 0 ) { while ( 1 ) { v5 = sub_6BE310(v4); v6 = (unsigned __int16)*v5; v7 = dword_ACE8D0; v70 = *v5; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) ) { v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v6); if ( *v8 ) { v9 = *v8; if ( v9 ) { v10 = (void *)(v9 + 34); v79 = (const char **)strlen((const char *)(v9 + 34)); v82 = 15; v81 = 0; LOBYTE(v80) = 0; sub_4018E0(&v80, v10, strlen((const char *)v10)); LOBYTE(v85) = 1; v78 = v2; if ( v2 == v76 ) { LABEL_19: v16 = (const char **)operator new(0x20u); if ( v16 ) { v16[5] = (const char *)15; v16[4] = 0; *(_BYTE *)v16 = 0; v17 = v16; } else { v17 = 0; } v78 = v17; v23 = sub_426900((const void **)&v80, (int)&v83, 0, v79 - 1); LOBYTE(v85) = 2; if ( *(_DWORD *)(v23 + 20) < 0x10u ) v24 = (void *)v23; else v24 = *(void **)v23; sub_4018E0(v17, v24, strlen((const char *)v24)); LOBYTE(v85) = 1; if ( v84 >= 0x10 ) operator delete(v83); v25 = sub_426900((const void **)&v80, (int)&v83, (unsigned int)v79 - 3, (void *)2); if ( *(_DWORD *)(v25 + 20) >= 0x10u ) v25 = *(_DWORD *)v25; *((_BYTE *)v17 + 28) = atoi((const char *)v25); if ( v84 >= 0x10 ) operator delete(v83); v26 = (char *)v76; v27 = (void **)v75; *((_WORD *)v17 + 15) = v70; if ( &v78 >= (const char ***)v26 || v27 > (void **)&v78 ) { if ( v26 == v77 ) { v33 = (v26 - (char *)v27) >> 2; if ( v33 > 0x3FFFFFFE ) goto LABEL_72; v34 = v33 + 1; v35 = (v77 - (char *)v27) >> 2; if ( v34 > v35 ) { if ( 0x3FFFFFFF - (v35 >> 1) >= v35 ) v36 = (char *)((v35 >> 1) + v35); else v36 = 0; if ( (unsigned int)v36 < v34 ) v36 = (char *)v34; sub_74E360((const void **)&v75, v36); v26 = (char *)v76; } } if ( v26 ) *(_DWORD *)v26 = v17; } else { v28 = ((char *)&v78 - (char *)v27) >> 2; if ( v26 == v77 ) { v29 = (v26 - (char *)v27) >> 2; if ( v29 > 0x3FFFFFFE ) goto LABEL_72; v30 = v29 + 1; v31 = (v77 - (char *)v27) >> 2; if ( v30 > v31 ) { if ( 0x3FFFFFFF - (v31 >> 1) >= v31 ) v32 = (char *)((v31 >> 1) + v31); else v32 = 0; if ( (unsigned int)v32 < v30 ) v32 = (char *)v30; sub_74E360((const void **)&v75, v32); v26 = (char *)v76; v27 = (void **)v75; } } if ( v26 ) *(_DWORD *)v26 = v27[v28]; } ++v72; v76 = v26 + 4; } else { while ( 1 ) { v11 = *v78; if ( *((_DWORD *)*v78 + 5) < 0x10u ) v12 = *v78; else v12 = *(const char **)v11; v13 = *((unsigned __int8 *)v11 + 28); v14 = sub_426900((const void **)&v80, (int)&v83, 0, v79 - 1); if ( *(_DWORD *)(v14 + 20) >= 0x10u ) v14 = *(_DWORD *)v14; v15 = strcmp(v12, (const char *)v14) == 0; if ( v84 >= 0x10 ) operator delete(v83); if ( v15 ) break; ++v78; if ( v78 == v76 ) goto LABEL_19; } v18 = (unsigned int)v79 - 3; v19 = sub_426900((const void **)&v80, (int)&v83, (unsigned int)v79 - 3, (void *)2); if ( *(_DWORD *)(v19 + 20) >= 0x10u ) v19 = *(_DWORD *)v19; v20 = v13 < atoi((const char *)v19); if ( v84 >= 0x10 ) operator delete(v83); if ( v20 ) { v21 = sub_426900((const void **)&v80, (int)&v83, v18, (void *)2); if ( *(_DWORD *)(v21 + 20) >= 0x10u ) v21 = *(_DWORD *)v21; v22 = atoi((const char *)v21); *((_BYTE *)*v78 + 28) = v22; if ( v84 >= 0x10 ) operator delete(v83); } } LOBYTE(v85) = 0; if ( v82 >= 0x10 ) operator delete(v80); } } } } v4 = v73 + 1; v73 = v4; if ( v4 >= v68 ) break; v2 = (const char **)v75; } v37 = v75; if ( v75 != v76 ) memcpy_0(v75, v76, 0); if ( v37 ) { operator delete(v37); return v72; } } return v72; case 1: v75 = 0; v76 = 0; v77 = 0; v85 = 3; v69 = sub_6BE760(); v74 = 0; if ( v69 > 0 ) { do { v71 = sub_6BE740(v74); v39 = (char *)(sub_4DCAF0(v71) + 34); v78 = (const char **)strlen(v39); v82 = 15; v81 = 0; LOBYTE(v80) = 0; sub_4018E0(&v80, v39, strlen(v39)); v40 = (void **)v75; LOBYTE(v85) = 4; v79 = (const char **)v75; if ( v75 == v76 ) goto LABEL_86; do { v41 = *v79; if ( *((_DWORD *)*v79 + 5) < 0x10u ) v42 = *v79; else v42 = *(const char **)v41; v43 = *((unsigned __int8 *)v41 + 28); v44 = sub_426900((const void **)&v80, (int)&v83, 0, v78 - 1); if ( *(_DWORD *)(v44 + 20) >= 0x10u ) v44 = *(_DWORD *)v44; v45 = strcmp(v42, (const char *)v44) == 0; if ( v84 >= 0x10 ) operator delete(v83); if ( v45 ) { v48 = (unsigned int)v78 - 3; v49 = sub_426900((const void **)&v80, (int)&v83, (unsigned int)v78 - 3, (void *)2); if ( *(_DWORD *)(v49 + 20) >= 0x10u ) v49 = *(_DWORD *)v49; v50 = v43 < atoi((const char *)v49); if ( v84 >= 0x10 ) operator delete(v83); if ( v50 ) { v51 = sub_426900((const void **)&v80, (int)&v83, v48, (void *)2); if ( *(_DWORD *)(v51 + 20) >= 0x10u ) v51 = *(_DWORD *)v51; v52 = atoi((const char *)v51); *((_BYTE *)*v79 + 28) = v52; if ( v84 >= 0x10 ) operator delete(v83); } goto LABEL_132; } ++v79; } while ( v79 != v76 ); v40 = (void **)v75; LABEL_86: v46 = (const char **)operator new(0x20u); if ( v46 ) { v46[5] = (const char *)15; v46[4] = 0; *(_BYTE *)v46 = 0; v47 = v46; } else { v47 = 0; } v79 = v47; v53 = sub_426900((const void **)&v80, (int)&v83, 0, v78 - 1); v54 = *(_DWORD *)(v53 + 20) < 0x10u; LOBYTE(v85) = 5; if ( v54 ) v55 = (void *)v53; else v55 = *(void **)v53; sub_4018E0(v47, v55, strlen((const char *)v55)); LOBYTE(v85) = 4; if ( v84 >= 0x10 ) operator delete(v83); v56 = sub_426900((const void **)&v80, (int)&v83, (unsigned int)v78 - 3, (void *)2); if ( *(_DWORD *)(v56 + 20) >= 0x10u ) v56 = *(_DWORD *)v56; *((_BYTE *)v47 + 28) = atoi((const char *)v56); if ( v84 >= 0x10 ) operator delete(v83); v57 = (char *)v76; *((_WORD *)v47 + 15) = v71; if ( &v79 >= (const char ***)v57 || v40 > (void **)&v79 ) { if ( v57 == v77 ) { v63 = (v57 - (char *)v40) >> 2; if ( v63 > 0x3FFFFFFE ) LABEL_72: std::_Xlength_error("vector too long"); v64 = v63 + 1; v65 = (v77 - (char *)v40) >> 2; if ( v64 > v65 ) { if ( 0x3FFFFFFF - (v65 >> 1) >= v65 ) v66 = (char *)((v65 >> 1) + v65); else v66 = 0; if ( (unsigned int)v66 < v64 ) v66 = (char *)v64; sub_74E360((const void **)&v75, v66); v57 = (char *)v76; } } if ( v57 ) *(_DWORD *)v57 = v47; goto LABEL_131; } v58 = ((char *)&v79 - (char *)v40) >> 2; if ( v57 != v77 ) goto LABEL_118; v59 = (v57 - (char *)v40) >> 2; if ( v59 > 0x3FFFFFFE ) goto LABEL_72; v60 = v59 + 1; v61 = (v77 - (char *)v40) >> 2; if ( v60 > v61 ) { if ( 0x3FFFFFFF - (v61 >> 1) >= v61 ) v62 = (char *)((v61 >> 1) + v61); else v62 = 0; if ( (unsigned int)v62 < v60 ) v62 = (char *)v60; sub_74E360((const void **)&v75, v62); v57 = (char *)v76; v40 = (void **)v75; } LABEL_118: if ( v57 ) *(_DWORD *)v57 = v40[v58]; LABEL_131: ++v72; v76 = v57 + 4; LABEL_132: LOBYTE(v85) = 3; if ( v82 >= 0x10 ) operator delete(v80); ++v74; } while ( v74 < v69 ); v67 = v75; if ( v75 != v76 ) memcpy_0(v75, v76, 0); if ( v67 ) { operator delete(v67); return v72; } } return v72; case 3: return sub_6BE7C0(); } return -1; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (005B1F60) -------------------------------------------------------- void __thiscall sub_5B1F60(_DWORD *this, int a2) { _DWORD *v2; // edi void *v3; // eax int v4; // eax char v5; // bl char v6; // [esp+1Bh] [ebp-49h] void *v7; // [esp+1Ch] [ebp-48h] unsigned int v8; // [esp+30h] [ebp-34h] void *v9; // [esp+38h] [ebp-2Ch] int v10; // [esp+48h] [ebp-1Ch] unsigned int v11; // [esp+4Ch] [ebp-18h] int v12; // [esp+60h] [ebp-4h] v2 = this; v6 = *(_BYTE *)(this[a2 + 112] + 328); if ( v6 ) { v3 = (void *)(*(int (**)(void))(*(_DWORD *)this[a2 + 104] + 484))(); v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, v3, strlen((const char *)v3)); v12 = 0; v4 = sub_426900((const void **)&v9, (int)&v7, 0, (void *)2); if ( *(_DWORD *)(v4 + 20) >= 0x10u ) v4 = *(_DWORD *)v4; v5 = atoi((const char *)v4); if ( v8 >= 0x10 ) operator delete(v7); if ( v5 == v6 ) sub_5B14D0(v2, a2, 1u); else sub_5B14D0(v2, a2, v5 + 1); if ( v11 >= 0x10 ) operator delete(v9); } } //----- (005B2070) -------------------------------------------------------- void __thiscall sub_5B2070(_DWORD *this, int a2) { _DWORD *v2; // edi void *v3; // eax int v4; // eax char v5; // bl unsigned __int8 v6; // [esp+1Bh] [ebp-49h] void *v7; // [esp+1Ch] [ebp-48h] unsigned int v8; // [esp+30h] [ebp-34h] void *v9; // [esp+38h] [ebp-2Ch] int v10; // [esp+48h] [ebp-1Ch] unsigned int v11; // [esp+4Ch] [ebp-18h] int v12; // [esp+60h] [ebp-4h] v2 = this; v6 = *(_BYTE *)(this[a2 + 112] + 328); if ( v6 ) { v3 = (void *)(*(int (**)(void))(*(_DWORD *)this[a2 + 104] + 484))(); v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, v3, strlen((const char *)v3)); v12 = 0; v4 = sub_426900((const void **)&v9, (int)&v7, 0, (void *)2); if ( *(_DWORD *)(v4 + 20) >= 0x10u ) v4 = *(_DWORD *)v4; v5 = atoi((const char *)v4); if ( v8 >= 0x10 ) operator delete(v7); if ( v5 == 1 ) sub_5B14D0(v2, a2, v6); else sub_5B14D0(v2, a2, v5 - 1); if ( v11 >= 0x10 ) operator delete(v9); } } //----- (005B2180) -------------------------------------------------------- int __thiscall sub_5B2180(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // eax unsigned int v4; // eax int v5; // edi char *v6; // eax v1 = this; result = ((int (*)(void))(*this)[65])(); if ( (_BYTE)result ) { v3 = sub_5B1750(v1); if ( v3 ) v4 = ((unsigned int)(v3 - 1) >> 3) + 1; else v4 = 1; v5 = *v1[172]; v6 = sub_7549E0("%d / %d", (char *)v1[87] + 1, v4); result = (*(int (__thiscall **)(_DWORD *, char *))(v5 + 472))(v1[172], v6); } return result; } //----- (005B21E0) -------------------------------------------------------- void __thiscall sub_5B21E0(_DWORD *this) { _DWORD *v1; // edi _DWORD **v2; // esi const char **v3; // ebx _DWORD *v4; // eax int v5; // eax int v6; // ebx int v7; // esi unsigned __int8 (__thiscall *v8)(int, int); // eax int v9; // edx int v10; // eax void *v11; // esi const char *v12; // eax const char *v13; // esi int v14; // eax bool v15; // bl _DWORD *v16; // eax unsigned int v17; // ebx unsigned int v18; // esi int v19; // eax bool v20; // bl int v21; // eax char v22; // al unsigned int v23; // esi void *v24; // ecx int v25; // eax bool v26; // cf void *v27; // edx int v28; // eax unsigned int *v29; // esi _DWORD *v30; // edx _DWORD *v31; // edx _DWORD *v32; // ebx int v33; // esi unsigned int v34; // eax unsigned int v35; // eax unsigned int v36; // ecx char *v37; // ecx unsigned int v38; // eax unsigned int v39; // eax unsigned int v40; // ecx char *v41; // ecx unsigned int v42; // esi unsigned int v43; // ebx _DWORD *v44; // eax unsigned __int16 v45; // di unsigned int v46; // esi int v47; // eax int v48; // edi void *v49; // esi const char *v50; // eax const char *v51; // esi int v52; // edi int v53; // eax bool v54; // bl void **v55; // eax void **v56; // ebx int v57; // eax bool v58; // bl int v59; // eax char v60; // al const char **v61; // esi void *v62; // edx int v63; // eax void *v64; // edx int v65; // eax char *v66; // edi void **v67; // edx int v68; // esi unsigned int v69; // eax unsigned int v70; // eax unsigned int v71; // ecx char *v72; // ecx unsigned int v73; // eax unsigned int v74; // eax unsigned int v75; // ecx char *v76; // ecx unsigned int v77; // esi unsigned int v78; // ebx _DWORD *v79; // eax char v80; // al int v81; // ecx unsigned int v82; // esi void **v83; // edi unsigned int v84; // ebx int v85; // ebx int v86; // esi int *v87; // eax int v88; // ebx const char **v89; // eax const char **v90; // esi _WORD *v91; // edx unsigned int v92; // eax __int16 v93; // cx char *v94; // edx int v95; // esi unsigned int v96; // eax unsigned int v97; // eax unsigned int v98; // ecx char *v99; // ecx unsigned int v100; // eax unsigned int v101; // eax unsigned int v102; // ecx char *v103; // ecx void *v104; // esi unsigned int v105; // edi int v106; // ebx int v107; // esi int *v108; // eax int v109; // ebx _DWORD *v110; // eax void *v111; // esi _WORD *v112; // edx __int16 v113; // ax void *v114; // esi _DWORD *v115; // ebx unsigned int v116; // esi bool v117; // zf _WORD *v118; // eax _WORD *v119; // eax _WORD *v120; // eax signed int v121; // edi unsigned int v122; // ebx int v123; // eax _DWORD *v124; // eax int v125; // [esp+10h] [ebp-A4h] int v126; // [esp+14h] [ebp-A0h] unsigned int v127; // [esp+14h] [ebp-A0h] _DWORD *v128; // [esp+18h] [ebp-9Ch] int v129; // [esp+1Ch] [ebp-98h] unsigned int v130; // [esp+20h] [ebp-94h] unsigned int v131; // [esp+24h] [ebp-90h] unsigned int v132; // [esp+28h] [ebp-8Ch] void *v133; // [esp+2Ch] [ebp-88h] void *v134; // [esp+30h] [ebp-84h] char *v135; // [esp+34h] [ebp-80h] const char **v136; // [esp+3Ch] [ebp-78h] void *v137; // [esp+40h] [ebp-74h] void *v138; // [esp+4Ch] [ebp-68h] void *v139; // [esp+50h] [ebp-64h] unsigned int v140; // [esp+54h] [ebp-60h] void *v141; // [esp+5Ch] [ebp-58h] void *v142; // [esp+68h] [ebp-4Ch] void *v143; // [esp+6Ch] [ebp-48h] unsigned int v144; // [esp+70h] [ebp-44h] void *v145; // [esp+78h] [ebp-3Ch] int v146; // [esp+88h] [ebp-2Ch] unsigned int v147; // [esp+8Ch] [ebp-28h] void *v148; // [esp+94h] [ebp-20h] int v149[2]; // [esp+9Ch] [ebp-18h] int v150; // [esp+B0h] [ebp-4h] v1 = this; v128 = this; if ( this[88] ) { v2 = (_DWORD **)(this + 96); v3 = (const char **)8; do { sub_5AF5E0(*(v2 - 8), 0xFFFF, 0); (*(void (__stdcall **)(void *))(**v2 + 472))(&unk_9DCACA); (*(void (__stdcall **)(void *))(*v2[8] + 472))(&unk_9DCACB); (*(void (__stdcall **)(_DWORD))(*v2[16] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[24] + 256))(0); *((_BYTE *)v2[16] + 328) = 0; v4 = v2[24]; ++v2; v3 = (const char **)((char *)v3 - 1); *((_BYTE *)v4 + 328) = 0; } while ( v3 ); v5 = v1[86]; v130 = 0; if ( !v5 ) { v133 = 0; v134 = 0; v135 = 0; v150 = 0; v149[0] = sub_6BE300(); v131 = 0; if ( v149[0] > 0u ) { while ( 1 ) { v6 = (unsigned __int16)*sub_6BE310(v131); v7 = dword_ACE8D0; v8 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16); v129 = v6; if ( v8(dword_ACE8D0, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v7 + 200) ) { v9 = *(_DWORD *)(v7 + 196); if ( *(_DWORD *)(v9 + 4 * (unsigned __int16)v6) ) { v10 = *(_DWORD *)(v9 + 4 * (unsigned __int16)v6); v126 = v10; if ( v10 ) break; } } } LABEL_82: if ( ++v131 >= v149[0] ) goto LABEL_83; } v11 = (void *)(v10 + 34); v148 = (void *)(v10 + 34); v136 = (const char **)strlen((const char *)(v10 + 34)); LOBYTE(v137) = 0; v140 = 15; v139 = 0; sub_4018E0(&v137, v11, strlen((const char *)v11)); LOBYTE(v150) = 1; v132 = (unsigned int)v133; if ( v133 != v134 ) { while ( 1 ) { v12 = *(const char **)v132; if ( *(_DWORD *)(*(_DWORD *)v132 + 20) < 0x10u ) v13 = *(const char **)v132; else v13 = *(const char **)v12; v125 = *((unsigned __int8 *)v12 + 28); v14 = sub_426900((const void **)&v137, (int)&v145, 0, v136 - 1); if ( *(_DWORD *)(v14 + 20) >= 0x10u ) v14 = *(_DWORD *)v14; v15 = strcmp(v13, (const char *)v14) == 0; if ( v147 >= 0x10 ) operator delete(v145); if ( v15 ) break; v132 += 4; if ( (void *)v132 == v134 ) goto LABEL_20; } v18 = (unsigned int)v136 - 3; v19 = sub_426900((const void **)&v137, (int)&v145, (unsigned int)v136 - 3, (void *)2); if ( *(_DWORD *)(v19 + 20) >= 0x10u ) v19 = *(_DWORD *)v19; v20 = v125 < atoi((const char *)v19); if ( v147 >= 0x10 ) operator delete(v145); if ( v20 ) { v21 = sub_426900((const void **)&v137, (int)&v145, v18, (void *)2); if ( *(_DWORD *)(v21 + 20) >= 0x10u ) v21 = *(_DWORD *)v21; v22 = atoi((const char *)v21); v23 = v132; *(_BYTE *)(*(_DWORD *)v132 + 28) = v22; if ( v147 >= 0x10 ) operator delete(v145); *(_WORD *)(*(_DWORD *)v23 + 30) = v129; } LABEL_80: LOBYTE(v150) = 0; if ( v140 >= 0x10 ) operator delete(v137); goto LABEL_82; } LABEL_20: v16 = operator new(0x20u); if ( v16 ) { v16[5] = 15; v16[4] = 0; *(_BYTE *)v16 = 0; v17 = (unsigned int)v16; } else { v17 = 0; } v132 = v17; if ( !strcmp((const char *)(v126 + 2), "SummonMate01") ) { v143 = 0; LOBYTE(v141) = 0; v144 = 15; sub_4018E0(&v141, v148, strlen((const char *)v148)); if ( (void **)v17 != &v141 ) { if ( *(_DWORD *)(v17 + 20) >= 0x10u ) operator delete(*(void **)v17); *(_DWORD *)(v17 + 20) = 15; *(_DWORD *)(v17 + 16) = 0; *(_BYTE *)v17 = 0; if ( v144 >= 0x10 ) { *(_DWORD *)v17 = v141; v141 = 0; } else { memcpy_0((void *)v17, &v141, (size_t)v143 + 1); } *(_DWORD *)(v17 + 16) = v143; *(_DWORD *)(v17 + 20) = v144; v143 = 0; v144 = 0; } LOBYTE(v150) = 1; if ( v144 < 0x10 ) goto LABEL_49; v24 = v141; } else { v25 = sub_426900((const void **)&v137, (int)&v145, 0, v136 - 1); v26 = *(_DWORD *)(v25 + 20) < 0x10u; LOBYTE(v150) = 3; if ( v26 ) v27 = (void *)v25; else v27 = *(void **)v25; sub_4018E0((_DWORD *)v17, v27, strlen((const char *)v27)); LOBYTE(v150) = 1; if ( v147 < 0x10 ) goto LABEL_49; v24 = v145; } operator delete(v24); LABEL_49: v28 = sub_426900((const void **)&v137, (int)&v145, (unsigned int)v136 - 3, (void *)2); if ( *(_DWORD *)(v28 + 20) >= 0x10u ) v28 = *(_DWORD *)v28; *(_BYTE *)(v17 + 28) = atoi((const char *)v28); if ( v147 >= 0x10 ) operator delete(v145); v29 = (unsigned int *)v133; *(_WORD *)(v17 + 30) = v129; v30 = v134; if ( &v132 >= v134 || v29 > &v132 ) { if ( v134 == v135 ) { v38 = ((_BYTE *)v134 - (_BYTE *)v29) >> 2; if ( v38 > 0x3FFFFFFE ) goto LABEL_93; v39 = v38 + 1; v40 = (v135 - (char *)v29) >> 2; if ( v39 > v40 ) { if ( 0x3FFFFFFF - (v40 >> 1) >= v40 ) v41 = (char *)((v40 >> 1) + v40); else v41 = 0; if ( (unsigned int)v41 < v39 ) v41 = (char *)v39; sub_74E360((const void **)&v133, v41); v30 = v134; } } if ( v30 ) *v30 = v17; v134 = v30 + 1; } else { v31 = v133; v32 = v134; v33 = ((char *)&v132 - (_BYTE *)v133) >> 2; if ( v134 == v135 ) { v34 = ((_BYTE *)v134 - (_BYTE *)v133) >> 2; if ( v34 > 0x3FFFFFFE ) goto LABEL_93; v35 = v34 + 1; v36 = (v135 - (_BYTE *)v133) >> 2; if ( v35 > v36 ) { if ( 0x3FFFFFFF - (v36 >> 1) >= v36 ) v37 = (char *)((v36 >> 1) + v36); else v37 = 0; if ( (unsigned int)v37 < v35 ) v37 = (char *)v35; sub_74E360((const void **)&v133, v37); v32 = v134; v31 = v133; } } if ( v32 ) *v32 = v31[v33]; v134 = v32 + 1; } ++v130; goto LABEL_80; } LABEL_83: v42 = 8 * v1[87]; if ( v42 < v130 ) { v43 = 0; do { if ( v43 >= 8 ) break; sub_5AF5E0((_WORD *)v1[v42 + 8 * (11 - v1[87])], *(unsigned __int16 *)(*((_DWORD *)v133 + v42) + 30), 0); v44 = (_DWORD *)*((_DWORD *)v133 + v42); if ( v44[5] >= 0x10u ) v44 = (_DWORD *)*v44; (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v1[v42 + 8 * (12 - v1[87])] + 472))(v44); sub_6BFA60((int)v149, *(_WORD *)(*((_DWORD *)v133 + v42) + 30)); sub_5D77C0(v1[v42 + 8 * (11 - v1[87])], v149[0]); sprintf( (char *)&v148, "%02d/%02d", *(unsigned __int8 *)(*((_DWORD *)v133 + v42) + 28), *(unsigned __int8 *)(*((_DWORD *)v133 + v42) + 28)); (*(void (__stdcall **)(void **))(*(_DWORD *)v1[v42 + 8 * (13 - v1[87])] + 472))(&v148); *(_BYTE *)(v1[v42 + 8 * (14 - v1[87])] + 328) = *(_BYTE *)(*((_DWORD *)v133 + v42) + 28); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[v42 + 8 * (14 - v1[87])] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[v42++ + 8 * (15 - v1[87])] + 256))(1); ++v43; } while ( v42 < v130 ); } if ( v133 != v134 ) memcpy_0(v133, v134, 0); goto LABEL_91; } if ( v5 != 1 ) { if ( v5 != 2 && v5 == 3 ) { v82 = 0; v83 = 0; v133 = 0; v134 = 0; v135 = 0; v150 = 8; v84 = sub_6BE7C0(); v138 = 0; v139 = 0; v140 = 0; v142 = 0; v143 = 0; v144 = 0; LOBYTE(v150) = 10; if ( v84 ) { do { v129 = (unsigned __int16)*sub_6BE770(v82); if ( (unsigned __int8)sub_6BE7D0(v129) ) sub_4F9CE0(&v138, &v129); else sub_4F9CE0(&v142, &v129); ++v82; } while ( v82 < v84 ); } v131 = 0; v132 = ((_BYTE *)v139 - (_BYTE *)v138) >> 1; if ( v132 ) { do { v85 = *((unsigned __int16 *)v138 + v131); v86 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v85) ) { if ( (unsigned __int16)v85 <= *(_WORD *)(v86 + 200) ) { v87 = (int *)(*(_DWORD *)(v86 + 196) + 4 * v85); if ( *v87 ) { v88 = *v87; if ( *v87 ) { v89 = (const char **)operator new(0x20u); if ( v89 ) { v89[5] = (const char *)15; v89[4] = 0; *(_BYTE *)v89 = 0; v90 = v89; } else { v90 = 0; } v136 = v90; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, (void *)(v88 + 34), strlen((const char *)(v88 + 34))); LOBYTE(v150) = 11; sub_406450(v90, &v145); LOBYTE(v150) = 10; if ( v147 >= 0x10 ) operator delete(v145); v91 = v138; v92 = v131; *((_BYTE *)v90 + 28) = 0; v93 = v91[v92]; v94 = (char *)v134; *((_WORD *)v90 + 15) = v93; if ( &v136 >= (const char ***)v94 || v83 > (void **)&v136 ) { if ( v94 == v135 ) { v100 = (v94 - (char *)v83) >> 2; if ( v100 > 0x3FFFFFFE ) goto LABEL_93; v101 = v100 + 1; v102 = (v135 - (char *)v83) >> 2; if ( v101 > v102 ) { if ( 0x3FFFFFFF - (v102 >> 1) >= v102 ) v103 = (char *)((v102 >> 1) + v102); else v103 = 0; if ( (unsigned int)v103 < v101 ) v103 = (char *)v101; sub_74E360((const void **)&v133, v103); v94 = (char *)v134; v83 = (void **)v133; } } if ( v94 ) *(_DWORD *)v94 = v90; } else { v95 = ((char *)&v136 - (char *)v83) >> 2; if ( v94 == v135 ) { v96 = (v94 - (char *)v83) >> 2; if ( v96 > 0x3FFFFFFE ) goto LABEL_93; v97 = v96 + 1; v98 = (v135 - (char *)v83) >> 2; if ( v97 > v98 ) { if ( 0x3FFFFFFF - (v98 >> 1) >= v98 ) v99 = (char *)((v98 >> 1) + v98); else v99 = 0; if ( (unsigned int)v99 < v97 ) v99 = (char *)v97; sub_74E360((const void **)&v133, v99); v94 = (char *)v134; v83 = (void **)v133; } } if ( v94 ) *(_DWORD *)v94 = v83[v95]; } ++v130; v134 = v94 + 4; } } } } ++v131; } while ( v131 < v132 ); } if ( v138 != v139 ) { v104 = v138; memcpy_0(v138, v139, 0); v139 = v104; } v131 = 0; v132 = ((_BYTE *)v143 - (_BYTE *)v142) >> 1; if ( v132 ) { v105 = v131; do { v106 = *((unsigned __int16 *)v142 + v105); v107 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v106) ) { if ( (unsigned __int16)v106 <= *(_WORD *)(v107 + 200) ) { v108 = (int *)(*(_DWORD *)(v107 + 196) + 4 * v106); if ( *v108 ) { v109 = *v108; if ( *v108 ) { v110 = operator new(0x20u); if ( v110 ) { v110[5] = 15; v110[4] = 0; *(_BYTE *)v110 = 0; v111 = v110; } else { v111 = 0; } v149[0] = (int)v111; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, (void *)(v109 + 34), strlen((const char *)(v109 + 34))); LOBYTE(v150) = 12; sub_406450(v111, &v145); LOBYTE(v150) = 10; if ( v147 >= 0x10 ) operator delete(v145); v112 = v142; *((_BYTE *)v111 + 28) = 0; v113 = v112[v105]; v147 = 15; v146 = 0; LOBYTE(v145) = 0; *((_WORD *)v111 + 15) = v113; sub_5B3CF0(&v133, v149); ++v130; } } } } ++v105; } while ( v105 < v132 ); v83 = (void **)v133; } v114 = v142; if ( v142 != v143 ) memcpy_0(v142, v143, 0); if ( v114 ) operator delete(v114); LOBYTE(v150) = 8; if ( v138 ) operator delete(v138); v115 = v128; v116 = 8 * v128[87]; if ( v116 < v130 ) { v136 = 0; do { if ( (unsigned int)v136 >= 8 ) break; sub_5AF5E0((_WORD *)v115[v116 + 8 * (11 - v115[87])], *((unsigned __int16 *)v83[v116] + 15), 0); v117 = (unsigned __int8)sub_6BE7D0(*((_WORD *)v83[v116] + 15)) == 0; v118 = v83[v116]; if ( v117 ) { v117 = (unsigned __int8)sub_6BE810(v118[15]) == 0; v119 = v83[v116]; if ( v117 ) { v120 = sub_548EA0(v119[15]); if ( v120 ) { switch ( *(_DWORD *)(v120 + 211) ) { case 0: v121 = 0; break; case 2: v121 = 2; break; case 3: v121 = 3; break; case 4: v121 = 4; break; case 5: v121 = 5; break; default: v121 = 1; break; } v122 = 0; if ( sub_548AC0() ) { while ( 1 ) { v123 = sub_7474E0((_DWORD *)(dword_ACD950 + 4), v122); if ( *(_DWORD *)(v123 + 134) == v121 ) break; if ( ++v122 >= sub_548AC0() ) goto LABEL_272; } (*(void (__stdcall **)(int))(*(_DWORD *)v128[v116 + 8 * (12 - v128[87])] + 472))(v123 + 34); } LABEL_272: v83 = (void **)v133; } v124 = v83[v116]; if ( v124[5] >= 0x10u ) v124 = (_DWORD *)*v124; (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v128[v116 + 8 * (12 - v128[87])] + 472))(v124); v115 = v128; } else { if ( *((_DWORD *)v119 + 5) >= 0x10u ) v119 = *(_WORD **)v119; (*(void (__stdcall **)(_WORD *))(*(_DWORD *)v115[v116 + 8 * (12 - v115[87])] + 472))(v119); (*(void (__stdcall **)(void *))(*(_DWORD *)v115[v116 + 8 * (13 - v115[87])] + 472))(&unk_9DCAD6); } } else { if ( *((_DWORD *)v118 + 5) >= 0x10u ) v118 = *(_WORD **)v118; (*(void (__stdcall **)(_WORD *))(*(_DWORD *)v115[v116 + 8 * (12 - v115[87])] + 472))(v118); (*(void (__stdcall **)(void *))(*(_DWORD *)v115[v116 + 8 * (13 - v115[87])] + 472))(&unk_9DCAD5); } v136 = (const char **)((char *)v136 + 1); ++v116; } while ( v116 < v130 ); } if ( v83 != v134 ) memcpy_0(v83, v134, 0); v150 = -1; if ( v83 ) operator delete(v83); } goto LABEL_281; } v133 = 0; v134 = 0; v135 = 0; v150 = 4; v127 = sub_6BE760(); v131 = 0; if ( v127 <= 0 ) { LABEL_175: v77 = 8 * v128[87]; if ( v77 < v130 ) { v78 = 0; do { if ( v78 >= 8 ) break; sub_6BE740(v77); sub_5AF5E0((_WORD *)v128[v77 + 8 * (11 - v128[87])], *(unsigned __int16 *)(*((_DWORD *)v133 + v77) + 30), 1); v79 = (_DWORD *)*((_DWORD *)v133 + v77); if ( v79[5] >= 0x10u ) v79 = (_DWORD *)*v79; (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v128[v77 + 8 * (12 - v128[87])] + 472))(v79); sprintf((char *)v149, "%02d", *(unsigned __int8 *)(*((_DWORD *)v133 + v77) + 28)); (*(void (__stdcall **)(int *))(*(_DWORD *)v128[v77 + 8 * (13 - v128[87])] + 472))(v149); v80 = *(_BYTE *)(*((_DWORD *)v133 + v77) + 28); ++v78; v81 = v128[v77++ + 8 * (14 - v128[87])]; *(_BYTE *)(v81 + 328) = v80; } while ( v77 < v130 ); } if ( v133 != v134 ) memcpy_0(v133, v134, 0); LABEL_91: v150 = -1; if ( v133 ) operator delete(v133); LABEL_281: sub_5B2180((_DWORD **)v128); return; } while ( 1 ) { v45 = sub_6BE740(v131); v129 = v45; v46 = 0; if ( !sub_4DC670() ) break; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v46) != v45 ) { if ( ++v46 >= sub_4DC670() ) goto LABEL_99; } v47 = sub_7474E0((_DWORD *)(dword_ACEAA8 + 4), v46); v48 = v47; v149[0] = v47; if ( !v47 ) break; v49 = (void *)(v47 + 34); v148 = (void *)(v47 + 34); v132 = strlen((const char *)(v47 + 34)); LOBYTE(v137) = 0; v140 = 15; v139 = 0; sub_4018E0(&v137, (void *)(v48 + 34), strlen((const char *)(v48 + 34))); LOBYTE(v150) = 5; v136 = v3; if ( v3 == v134 ) goto LABEL_113; do { v50 = *v136; if ( *((_DWORD *)*v136 + 5) < 0x10u ) v51 = *v136; else v51 = *(const char **)v50; v52 = *((unsigned __int8 *)v50 + 28); v53 = sub_426900((const void **)&v137, (int)&v145, 0, (void *)(v132 - 4)); if ( *(_DWORD *)(v53 + 20) >= 0x10u ) v53 = *(_DWORD *)v53; v54 = strcmp(v51, (const char *)v53) == 0; if ( v147 >= 0x10 ) operator delete(v145); if ( v54 ) { v57 = sub_426900((const void **)&v137, (int)&v145, v132 - 3, (void *)2); if ( *(_DWORD *)(v57 + 20) >= 0x10u ) v57 = *(_DWORD *)v57; v58 = v52 < atoi((const char *)v57); if ( v147 >= 0x10 ) operator delete(v145); if ( v58 ) { v59 = sub_426900((const void **)&v137, (int)&v145, v132 - 3, (void *)2); if ( *(_DWORD *)(v59 + 20) >= 0x10u ) v59 = *(_DWORD *)v59; v60 = atoi((const char *)v59); v61 = v136; *((_BYTE *)*v136 + 28) = v60; if ( v147 >= 0x10 ) operator delete(v145); *((_WORD *)*v61 + 15) = v129; } goto LABEL_171; } ++v136; } while ( v136 != v134 ); v48 = v149[0]; v49 = v148; LABEL_113: v55 = (void **)operator new(0x20u); if ( v55 ) { v55[5] = (void *)15; v55[4] = 0; *(_BYTE *)v55 = 0; v56 = v55; } else { v56 = 0; } v136 = (const char **)v56; if ( !strcmp((const char *)(v48 + 2), "PowerofLove01") ) { v144 = 15; v143 = 0; LOBYTE(v141) = 0; sub_4018E0(&v141, v49, strlen((const char *)v49)); if ( v56 != &v141 ) { if ( (unsigned int)v56[5] >= 0x10 ) operator delete(*v56); v56[5] = (void *)15; v56[4] = 0; *(_BYTE *)v56 = 0; if ( v144 >= 0x10 ) { *v56 = v141; v141 = 0; } else { memcpy_0(v56, &v141, (size_t)v143 + 1); } v56[4] = v143; v56[5] = (void *)v144; v143 = 0; v144 = 0; } LOBYTE(v150) = 5; if ( v144 >= 0x10 ) { v62 = v141; goto LABEL_141; } } else { v63 = sub_426900((const void **)&v137, (int)&v145, 0, (void *)(v132 - 4)); v26 = *(_DWORD *)(v63 + 20) < 0x10u; LOBYTE(v150) = 7; if ( v26 ) v64 = (void *)v63; else v64 = *(void **)v63; sub_4018E0(v56, v64, strlen((const char *)v64)); LOBYTE(v150) = 5; if ( v147 >= 0x10 ) { v62 = v145; LABEL_141: operator delete(v62); } } v65 = sub_426900((const void **)&v137, (int)&v145, v132 - 3, (void *)2); if ( *(_DWORD *)(v65 + 20) >= 0x10u ) v65 = *(_DWORD *)v65; *((_BYTE *)v56 + 28) = atoi((const char *)v65); if ( v147 >= 0x10 ) operator delete(v145); v66 = (char *)v134; v67 = (void **)v133; *((_WORD *)v56 + 15) = v129; if ( &v136 >= (const char ***)v66 || v67 > (void **)&v136 ) { if ( v66 != v135 ) { LABEL_168: if ( v66 ) *(_DWORD *)v66 = v56; goto LABEL_170; } v73 = (v66 - (char *)v67) >> 2; if ( v73 <= 0x3FFFFFFE ) { v74 = v73 + 1; v75 = (v135 - (char *)v67) >> 2; if ( v74 > v75 ) { if ( 0x3FFFFFFF - (v75 >> 1) >= v75 ) v76 = (char *)((v75 >> 1) + v75); else v76 = 0; if ( (unsigned int)v76 < v74 ) v76 = (char *)v74; sub_74E360((const void **)&v133, v76); v66 = (char *)v134; } goto LABEL_168; } LABEL_93: std::_Xlength_error("vector too long"); } v68 = ((char *)&v136 - (char *)v67) >> 2; if ( v66 != v135 ) goto LABEL_157; v69 = (v66 - (char *)v67) >> 2; if ( v69 > 0x3FFFFFFE ) goto LABEL_93; v70 = v69 + 1; v71 = (v135 - (char *)v67) >> 2; if ( v70 > v71 ) { if ( 0x3FFFFFFF - (v71 >> 1) >= v71 ) v72 = (char *)((v71 >> 1) + v71); else v72 = 0; if ( (unsigned int)v72 < v70 ) v72 = (char *)v70; sub_74E360((const void **)&v133, v72); v66 = (char *)v134; v67 = (void **)v133; } LABEL_157: if ( v66 ) *(_DWORD *)v66 = v67[v68]; LABEL_170: ++v130; v134 = v66 + 4; LABEL_171: LOBYTE(v150) = 4; if ( v140 >= 0x10 ) operator delete(v137); if ( ++v131 >= v127 ) goto LABEL_175; v3 = (const char **)v133; } LABEL_99: if ( v3 ) operator delete(v3); } } // ACD950: using guessed type int dword_ACD950; // ACE8D0: using guessed type int dword_ACE8D0; // ACEAA8: using guessed type int dword_ACEAA8; //----- (005B35E0) -------------------------------------------------------- int __thiscall sub_5B35E0(_BYTE *this) { _DWORD **v1; // esi v1 = (_DWORD **)this; sub_8F28C0(this); return sub_5B2180(v1); } //----- (005B3610) -------------------------------------------------------- int __thiscall sub_5B3610(_DWORD **this) { _DWORD **v1; // esi int v2; // edi signed int v3; // ebx v1 = this; (*(void (__stdcall **)(signed int))(*this[151] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[152] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[154] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[153] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[167] + 256))(1); v1[87] = 0; v1[86] = 0; sub_5B21E0(v1); v2 = (int)(v1 + 155); v3 = 8; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 256))(1); v2 += 4; --v3; } while ( v3 ); return (*(int (__stdcall **)(signed int))(*v1[163] + 256))(1); } //----- (005B36C0) -------------------------------------------------------- int __thiscall sub_5B36C0(char *this) { char *v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(**((_DWORD **)this + 151) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 152) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 154) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 153) + 256))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 167) + 256))(0); *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 86) = 1; sub_5B21E0(v1); return sub_5AF3A0(v1, 0); } //----- (005B3750) -------------------------------------------------------- int __thiscall sub_5B3750(char *this) { char *v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)this + 151) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 152) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 154) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 153) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 167) + 256))(0); if ( sub_6BEF30() < 2 ) sub_8F82A0(&unk_BA6B10, *((_DWORD **)v1 + 165)); *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 86) = 3; sub_5B21E0(v1); return sub_5AF3A0(v1, 0); } //----- (005B37F0) -------------------------------------------------------- void __thiscall sub_5B37F0(_DWORD *this) { int v1; // eax v1 = this[87]; if ( v1 ) { this[87] = v1 - 1; sub_5B21E0(this); } } //----- (005B3810) -------------------------------------------------------- void __thiscall sub_5B3810(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // eax int v3; // ecx v1 = this; v2 = sub_5B1750(this); v3 = v1[87]; if ( 8 * v3 + 8 < v2 ) { v1[87] = v3 + 1; sub_5B21E0(v1); } } //----- (005B3840) -------------------------------------------------------- int __thiscall sub_5B3840(char *this, int a2) { int result; // eax switch ( a2 ) { case 1: result = sub_5B36C0(this); break; case 2: result = sub_5AF430(this); break; case 3: result = sub_5B3750(this); break; default: result = sub_5B3610((_DWORD **)this); break; } return result; } //----- (005B3890) -------------------------------------------------------- void __thiscall sub_5B3890(int this, int a2, int a3) { switch ( a2 ) { case 9: sub_5AF8A0((_DWORD *)this, a3); break; case 10: sub_5AF4B0((_WORD **)this, a3); break; case 11: sub_5B3610((_DWORD **)this); break; case 12: sub_5B36C0((char *)this); break; case 13: sub_5AF430((char *)this); break; case 14: sub_5B3750((char *)this); break; case 15: sub_5B37F0((_DWORD *)this); break; case 16: sub_5B3810((_DWORD *)this); break; case 17: sub_5AF850(this); break; case 18: sub_4B8840(*(_DWORD **)(this + 296)); break; case 19: sub_5B1F60((_DWORD *)this, a3); break; case 20: sub_5B2070((_DWORD *)this, a3); break; case 21: sub_5AFD80((_DWORD *)this, a3); break; case 22: sub_5AF5B0(); break; default: return; } } //----- (005B3990) -------------------------------------------------------- void *__thiscall sub_5B3990(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (005B39C0) -------------------------------------------------------- void *__thiscall sub_5B39C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &PosInfoWinBut::`vftable'; *((_DWORD *)this + 58) = &PosInfoWinBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DCDDC: using guessed type void *PosInfoWinBut::`vftable'; // 9DCDFC: using guessed type void *PosInfoWinBut::`vftable'; //----- (005B3A00) -------------------------------------------------------- void *__thiscall sub_5B3A00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &LevelSelectWinBut::`vftable'; *((_DWORD *)this + 58) = &LevelSelectWinBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DD034: using guessed type void *LevelSelectWinBut::`vftable'; // 9DD054: using guessed type void *LevelSelectWinBut::`vftable'; //----- (005B3A40) -------------------------------------------------------- void *__thiscall sub_5B3A40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SkillInvWin::`vftable'; *((_DWORD *)this + 58) = &SkillInvWin::`vftable'; sub_5D74F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DD28C: using guessed type void *SkillInvWin::`vftable'; // 9DD2AC: using guessed type void *SkillInvWin::`vftable'; //----- (005B3A80) -------------------------------------------------------- int sub_5B3A80() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD994 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD994: using guessed type int dword_ACD994; //----- (005B3AA0) -------------------------------------------------------- int __thiscall sub_5B3AA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST04_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9DD528: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (005B3B20) -------------------------------------------------------- _DWORD *__thiscall sub_5B3B20(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9DD528: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (005B3BB0) -------------------------------------------------------- int __thiscall sub_5B3BB0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST04_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9DD538: using guessed type void *PgTList>::`vftable'; //----- (005B3C30) -------------------------------------------------------- _DWORD *__thiscall sub_5B3C30(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9DD518: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9DD538: using guessed type void *PgTList>::`vftable'; //----- (005B3CC0) -------------------------------------------------------- void *__thiscall sub_5B3CC0(void *this, char a2) { void *v2; // esi v2 = this; sub_5AFDF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005B3CF0) -------------------------------------------------------- _DWORD *__thiscall sub_5B3CF0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // edi _DWORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *this > (unsigned int)a2 ) { if ( v3 == this[2] ) sub_5E2180((int)this, 1); result = (_DWORD *)v2[1]; if ( result ) *result = *a2; } else { v4 = ((signed int)a2 - *this) >> 2; if ( v3 == this[2] ) sub_5E2180((int)this, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *(_DWORD *)(*v2 + 4 * v4); v2[1] += 4; return result; } } v2[1] += 4; return result; } //----- (005B3DA0) -------------------------------------------------------- int __thiscall sub_5B3DA0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[124] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[125] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[126] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[127] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[130] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[131] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[132] + 256))(0); return (*(int (__stdcall **)(_DWORD))(*v1[133] + 256))(0); } //----- (005B3EA0) -------------------------------------------------------- int __thiscall sub_5B3EA0(_DWORD **this) { _DWORD **v1; // esi int v2; // edi int result; // eax v1 = this; v2 = 0; if ( (*(unsigned __int8 (**)(void))(*this[124] + 260))() ) v2 = (int)v1[128] + (*(int (**)(void))(*v1[130] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[125] + 260))() ) v2 += (int)v1[128] + (*(int (**)(void))(*v1[131] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[126] + 260))() ) v2 += (int)v1[128] + (*(int (**)(void))(*v1[132] + 144))() + 2; if ( (*(unsigned __int8 (**)(void))(*v1[127] + 260))() ) result = (int)v1[128] + (*(int (**)(void))(*v1[133] + 144))() + v2 + 2; else result = v2; return result; } //----- (005B3F70) -------------------------------------------------------- int __thiscall sub_5B3F70(_DWORD **this, int a2, int a3, __int64 a4) { _DWORD **v4; // esi signed __int64 v5; // kr00_8 int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int result; // eax int v12; // edi signed __int64 v13; // [esp+Ch] [ebp-2Ch] signed __int64 v14; // [esp+Ch] [ebp-2Ch] signed __int64 v15; // [esp+Ch] [ebp-2Ch] char v16; // [esp+14h] [ebp-24h] v4 = this; v5 = sub_680E90(a4); if ( v5 ) { (*(void (__stdcall **)(signed int))(*v4[130] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[130] + 308))(a2, a3 + 3); sprintf(&v16, "%I64d", v5); (*(void (__stdcall **)(char *))(*v4[130] + 500))(&v16); v6 = a2 + (*(int (**)(void))(*v4[130] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[124] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[124] + 308))(v6, a3); v7 = (int)v4[128] + v6 + 1; } else { v7 = a2; } v13 = sub_680EB0(a4); if ( v13 ) { (*(void (__stdcall **)(signed int))(*v4[131] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[131] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v13); (*(void (__stdcall **)(char *))(*v4[131] + 500))(&v16); v8 = v7 + (*(int (**)(void))(*v4[131] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[125] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[125] + 308))(v8, a3); v7 = (int)v4[128] + v8 + 1; } v14 = sub_680F00(a4); if ( v14 ) { (*(void (__stdcall **)(signed int))(*v4[132] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[132] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v14); (*(void (__stdcall **)(char *))(*v4[132] + 500))(&v16); v9 = v7 + (*(int (**)(void))(*v4[132] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[126] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[126] + 308))(v9, a3); v7 = (int)v4[128] + v9 + 1; } v15 = sub_680F60(a4); if ( v15 ) { (*(void (__stdcall **)(signed int))(*v4[133] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[133] + 308))(v7, a3 + 3); sprintf(&v16, "%I64d", v15); (*(void (__stdcall **)(char *))(*v4[133] + 500))(&v16); v10 = v7 + (*(int (**)(void))(*v4[133] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[127] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[127] + 308))(v10, a3); v7 = (int)v4[128] + v10 + 1; } result = HIDWORD(a4) | a4; if ( !a4 ) { (*(void (__stdcall **)(signed int))(*v4[133] + 256))(1); (*(void (__stdcall **)(int, int))(*v4[133] + 308))(v7, a3 + 3); sprintf(&v16, "%d", 0); (*(void (__stdcall **)(char *))(*v4[133] + 500))(&v16); v12 = v7 + (*(int (**)(void))(*v4[133] + 144))() + 1; (*(void (__stdcall **)(signed int))(*v4[127] + 256))(1); result = (*(int (__stdcall **)(int, int))(*v4[127] + 308))(v12, a3); } return result; } //----- (005B4310) -------------------------------------------------------- unsigned int __thiscall sub_5B4310(_DWORD **this) { int v1; // esi unsigned int result; // eax _DWORD *v3; // edi unsigned int v4; // ebx const CHAR *v5; // eax bool v6; // zf int v7; // esi int v8; // edi struct tagSIZE psizl; // [esp+8h] [ebp-18h] _DWORD **v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] int v12; // [esp+18h] [ebp-8h] int v13; // [esp+1Ch] [ebp-4h] v1 = (int)(this + 104); v10 = this; result = (*(int (**)(void))(*this[104] + 456))(); v3 = (_DWORD *)result; if ( result ) { SelectObject(*(HDC *)(result + 192), *(HGDIOBJ *)(result + 184)); v4 = 0; v13 = 0; v12 = v1; v11 = 20; do { v5 = (const CHAR *)(*(int (**)(void))(**(_DWORD **)v1 + 484))(); if ( v5 ) { sub_4593C0(v3, v5, strlen(v5), &psizl); if ( psizl.cx > v4 ) v4 = psizl.cx; v13 += psizl.cy + 2; } v1 = v12 + 4; v6 = v11-- == 1; v12 += 4; } while ( !v6 ); v7 = (int)v10; if ( (*(unsigned __int8 (**)(void))(*v10[124] + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v7 + 500) + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v7 + 504) + 260))() || (result = (*(int (**)(void))(**(_DWORD **)(v7 + 508) + 260))(), (_BYTE)result) ) { v8 = v13 + *(_DWORD *)(v7 + 516) + 2; result = sub_5B3EA0((_DWORD **)v7); if ( result > v4 ) v4 = result; } else { v8 = v13; } if ( v4 ) result = (*(int (__thiscall **)(int, unsigned int, int))(*(_DWORD *)v7 + 540))( v7, v4 + 2 * *(_DWORD *)(v7 + 356), v8 + 2 * *(_DWORD *)(v7 + 352)); } return result; } //----- (005B4450) -------------------------------------------------------- char __thiscall sub_5B4450(volatile LONG **this, void *a2, int a3, int a4) { volatile LONG **v4; // esi signed int v5; // edi volatile LONG **v6; // ebx int v7; // eax volatile LONG *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi int v11; // edi char *v12; // eax volatile LONG **v13; // eax volatile LONG *v14; // eax int v15; // ecx volatile LONG **v16; // eax volatile LONG *v17; // eax int v18; // ecx volatile LONG **v19; // eax volatile LONG *v20; // eax int v21; // ecx volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // ecx int v25; // eax volatile LONG *v26; // ecx int v27; // eax int v28; // eax int v29; // eax int v30; // eax void (__thiscall ***v31)(_DWORD, signed int); // esi char v32; // [esp+10h] [ebp-10h] int v33; // [esp+1Ch] [ebp-4h] v4 = this; if ( !sub_45C530(this, a2, a3, a4, 0, 0, 0, 0) ) return 0; v5 = 0; v6 = v4 + 104; do { v7 = sub_421050(0); v8 = sub_8F4A20((int)v4[89], (int)v4[88] + v5 + 2, 256, 16, v7, (int)v4, 0, 0); *v6 = v8; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v8 + 240))(v8, 0); v5 += 14; ++v6; } while ( v5 < 280 ); (*((void (__thiscall **)(volatile LONG **, int, int))*v4 + 135))( v4, 2 * (_DWORD)v4[89] + 128, 2 * (_DWORD)v4[88] + 12); (*((void (__thiscall **)(volatile LONG **, _DWORD))*v4 + 64))(v4, 0); a4 = 0; v33 = 0; sub_43D0D0(4u); if ( !a2 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))a4; v33 = -1; if ( a4 && !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } v11 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v12 = (char *)sub_401410(byte_ACAB50, "Game\\Money.nif"); sub_8F66B0(v12, (int)&a4, v11); if ( !a4 ) return 0; v13 = sub_8FB140(a4, (int)"MyGemBtn", (int)&v32, (int)&a3, 0); v14 = sub_8F3EB0(0, 0, (int)v13, (int)v4, 0, 0); v15 = a4; v4[124] = v14; v16 = sub_8FB140(v15, (int)"MyGoldBtn", (int)&v32, (int)&a3, 0); v17 = sub_8F3EB0(0, 0, (int)v16, (int)v4, 0, 0); v18 = a4; v4[125] = v17; v19 = sub_8FB140(v18, (int)"MySilverBtn", (int)&v32, (int)&a3, 0); v20 = sub_8F3EB0(0, 0, (int)v19, (int)v4, 0, 0); v21 = a4; v4[126] = v20; v22 = sub_8FB140(v21, (int)"MyCopperBtn", (int)&v32, (int)&a3, 0); v23 = sub_8F3EB0(0, 0, (int)v22, (int)v4, 0, 0); v24 = v4[124]; v4[127] = v23; v25 = (*(int (**)(void))(*v24 + 144))(); v26 = v4[124]; v4[128] = (volatile LONG *)v25; v4[129] = (volatile LONG *)(*(int (**)(void))(*v26 + 148))(); v27 = sub_421050(2); v4[130] = (volatile LONG *)sub_459270(0, 0, v27, (int)v4); v28 = sub_421050(2); v4[131] = (volatile LONG *)sub_459270(0, 0, v28, (int)v4); v29 = sub_421050(2); v4[132] = (volatile LONG *)sub_459270(0, 0, v29, (int)v4); v30 = sub_421050(2); v4[133] = (volatile LONG *)sub_459270(0, 0, v30, (int)v4); sub_5B3DA0((_DWORD **)v4); v33 = -1; if ( a4 ) { v31 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v31 ) (**v31)(v31, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005B4750) -------------------------------------------------------- signed int __thiscall sub_5B4750(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // edi int v5; // edi const CHAR *v6; // eax const char *v7; // eax const char *v8; // eax signed int v9; // edi const CHAR *v10; // ebx int *v11; // esi int v12; // eax int v13; // ecx HDC hdc; // [esp+Ch] [ebp-108h] HDC hdca; // [esp+Ch] [ebp-108h] char v17[256]; // [esp+10h] [ebp-104h] v3 = this; sub_5B3DA0(this); v4 = (int)(v3 + 104); hdc = (HDC)20; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v4 + 472))(&unk_9DD793); (*(void (__stdcall **)(int *))(**(_DWORD **)v4 + 468))(&dword_AA8C68); v4 += 4; hdc = (HDC)((char *)hdc - 1); } while ( hdc ); v5 = *v3[104]; v6 = sub_40C190(1196069792); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v5 + 472))(v3[104], v6); v7 = sub_40C190(-369621179); sprintf(v17, v7, a2); (*(void (__stdcall **)(char *))(*v3[105] + 472))(v17); v8 = sub_40C190(-721287349); sprintf(v17, v8, a3); (*(void (__stdcall **)(char *))(*v3[106] + 472))(v17); (*(void (__stdcall **)(const char *))(*v3[107] + 472))(" "); v9 = 4; hdca = *(HDC *)((*(int (**)(void))(*v3[104] + 456))() + 192); v10 = sub_40C190(760174140); v11 = (int *)(v3 + 108); do { v12 = sub_8F5700((int)v17, v10, hdca, 200); if ( !v12 ) break; v13 = *v11; v17[v12] = 0; v10 += v12; (*(void (__stdcall **)(char *))(*(_DWORD *)v13 + 472))(v17); ++v9; ++v11; } while ( v9 < 20 ); return v9; } // AA8C68: using guessed type int dword_AA8C68; // 5B4750: using guessed type char var_104[256]; //----- (005B48F0) -------------------------------------------------------- signed int __thiscall sub_5B48F0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // edi int v5; // edi const CHAR *v6; // eax const char *v7; // eax const char *v8; // eax signed int v9; // edi const CHAR *v10; // ebx int *v11; // esi int v12; // eax int v13; // ecx HDC hdc; // [esp+Ch] [ebp-108h] HDC hdca; // [esp+Ch] [ebp-108h] char v17[256]; // [esp+10h] [ebp-104h] v3 = this; sub_5B3DA0(this); v4 = (int)(v3 + 104); hdc = (HDC)20; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v4 + 472))(&unk_9DD79D); (*(void (__stdcall **)(int *))(**(_DWORD **)v4 + 468))(&dword_AA8C68); v4 += 4; hdc = (HDC)((char *)hdc - 1); } while ( hdc ); v5 = *v3[104]; v6 = sub_40C190(1196790688); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v5 + 472))(v3[104], v6); v7 = sub_40C190(-369621179); sprintf(v17, v7, a2); (*(void (__stdcall **)(char *))(*v3[105] + 472))(v17); v8 = sub_40C190(-721287349); sprintf(v17, v8, a3); (*(void (__stdcall **)(char *))(*v3[106] + 472))(v17); (*(void (__stdcall **)(const char *))(*v3[107] + 472))(" "); v9 = 4; hdca = *(HDC *)((*(int (**)(void))(*v3[104] + 456))() + 192); v10 = sub_40C190(760895036); v11 = (int *)(v3 + 108); do { v12 = sub_8F5700((int)v17, v10, hdca, 200); if ( !v12 ) break; v13 = *v11; v17[v12] = 0; v10 += v12; (*(void (__stdcall **)(char *))(*(_DWORD *)v13 + 472))(v17); ++v9; ++v11; } while ( v9 < 20 ); return v9; } // AA8C68: using guessed type int dword_AA8C68; // 5B48F0: using guessed type char var_104[256]; //----- (005B4A90) -------------------------------------------------------- int __thiscall sub_5B4A90(_DWORD **this, int a2, int a3, unsigned int a4) { _DWORD **v4; // esi signed int v5; // eax v4 = this; v5 = sub_5B4750(this, a2, a3); return sub_5B3F70(v4, (int)v4[89], (int)v4[88] + 14 * v5 + 2, a4); } //----- (005B4AE0) -------------------------------------------------------- int __thiscall sub_5B4AE0(_DWORD **this, int a2, int a3, unsigned int a4) { _DWORD **v4; // esi signed int v5; // eax v4 = this; v5 = sub_5B48F0(this, a2, a3); return sub_5B3F70(v4, (int)v4[89], (int)v4[88] + 14 * v5 + 2, a4); } //----- (005B4B30) -------------------------------------------------------- int __cdecl sub_5B4B30(int a1, int a2, int a3) { _BYTE *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x218u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_45B4A0(v3); *(_DWORD *)v4 = &SoulStoneInfoWin::`vftable'; *(_DWORD *)(v4 + 232) = &SoulStoneInfoWin::`vftable'; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 548))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9DD7F4: using guessed type void *SoulStoneInfoWin::`vftable'; // 9DD814: using guessed type void *SoulStoneInfoWin::`vftable'; //----- (005B4C80) -------------------------------------------------------- void *__thiscall sub_5B4C80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SoulStoneInfoWin::`vftable'; *((_DWORD *)this + 58) = &SoulStoneInfoWin::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DD7F4: using guessed type void *SoulStoneInfoWin::`vftable'; // 9DD814: using guessed type void *SoulStoneInfoWin::`vftable'; //----- (005B4D30) -------------------------------------------------------- int __thiscall sub_5B4D30(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax int v4; // eax char v6; // [esp+4h] [ebp-104h] v2 = this; v3 = sub_680D20((int)byte_AD9238); sprintf(&v6, "%d", v3); (*(void (__stdcall **)(char *))(*v2[92] + 472))(&v6); (*(void (__stdcall **)(char *))(*v2[90] + 472))(&v6); v4 = sub_680D30((int)byte_AD9238); sprintf(&v6, "%d", v4); (*(void (__stdcall **)(char *))(*v2[93] + 472))(&v6); return (*(int (__stdcall **)(char *))(*v2[91] + 472))(&v6); } //----- (005B4E80) -------------------------------------------------------- char __thiscall sub_5B4E80(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax const char *v15; // eax int v16; // eax int v17; // ecx volatile LONG **v18; // eax const char *v19; // eax volatile LONG **v20; // eax const char *v21; // eax volatile LONG **v22; // eax const char *v23; // eax int v24; // eax volatile LONG *v25; // eax int v26; // eax volatile LONG *v27; // eax int v28; // eax volatile LONG *v29; // eax int v30; // eax volatile LONG *v31; // eax int v32; // [esp+50h] [ebp-20h] int v33; // [esp+54h] [ebp-1Ch] int v34; // [esp+58h] [ebp-18h] int v35; // [esp+5Ch] [ebp-14h] int v36; // [esp+60h] [ebp-10h] int v37; // [esp+6Ch] [ebp-4h] v2 = (int)this; v34 = 0; v37 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v34; v37 = -1; if ( !v34 || InterlockedDecrement((volatile LONG *)(v34 + 4)) ) return 0; v5 = v34 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\SoulPanel.nif"); sub_8F66B0(v8, (int)&v34, v7); if ( !v34 ) return 0; v9 = sub_8FB140(v34, (int)"Frame", (int)&v35, (int)&v36, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"SoulStoneWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v34; v37 = -1; if ( !v34 || InterlockedDecrement((volatile LONG *)(v34 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = sub_8FB140(v34, (int)"Panel01", (int)&v35, (int)&v36, v3); sub_8F3EB0(v35, v36, (int)v10, v2, 0, 0); v11 = sub_8FB140(v34, (int)"Object01", (int)&v35, (int)&v36, v3); sub_8F3EB0(v35, v36, (int)v11, v2, 0, 0); v12 = sub_8FB140(v34, (int)"PreSoul", (int)&v35, (int)&v36, v3); sub_8F3EB0(v35, v36, (int)v12, v2, 0, 0); v13 = sub_8FB140(v34, (int)"NextSoul", (int)&v35, (int)&v36, v3); sub_8F3EB0(v35, v36, (int)v13, v2, 0, 0); v14 = sub_8FB140(v34, (int)"HPSoul", (int)&v35, (int)&v36, v3); *(_DWORD *)(v2 + 344) = sub_8FE0F0(v35, v36, (int)v14, v2, 0, 0, 0); v15 = sub_40C190(-436319444); sub_8F2EA0(*(void ***)(v2 + 344), v15); *(_DWORD *)(*(_DWORD *)(v2 + 344) + 272) = dword_AD01E8; v16 = sub_4FD5C0(v35, v36, v2); v17 = v34; *(_DWORD *)(v2 + 392) = v16; v18 = sub_8FB140(v17, (int)"SPSoul", (int)&v35, (int)&v36, v3); *(_DWORD *)(v2 + 348) = sub_8FE0F0(v35, v36, (int)v18, v2, 1, 0, 0); v19 = sub_40C190(-452375764); sub_8F2EA0(*(void ***)(v2 + 348), v19); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; *(_DWORD *)(v2 + 396) = sub_4FD5C0(v35, v36, v2); v20 = sub_8FB140(v34, (int)"PwrSoul", (int)&v35, (int)&v36, v3); *(_DWORD *)(v2 + 352) = sub_8FE0F0(v35, v36, (int)v20, v2, 2, 0, 0); v21 = sub_40C190(-470286528); sub_8F2EA0(*(void ***)(v2 + 352), v21); *(_DWORD *)(*(_DWORD *)(v2 + 352) + 272) = dword_AD01E8; v22 = sub_8FB140(v34, (int)"GrdSoul", (int)&v35, (int)&v36, v3); *(_DWORD *)(v2 + 356) = sub_8FE0F0(v35, v36, (int)v22, v2, 3, 0, 0); v23 = sub_40C190(-371192790); sub_8F2EA0(*(void ***)(v2 + 356), v23); *(_DWORD *)(*(_DWORD *)(v2 + 356) + 272) = dword_AD01E8; if ( !sub_8F71E0(v34, (int)"SoulLot01", &v35, &v36, &v32, &v33) ) goto LABEL_21; v24 = sub_421050(3); v25 = sub_8F4A20(v35 - 1, v36 - 4, v32, v33 + 4, v24, v2, 0, 0); *(_DWORD *)(v2 + 368) = v25; (*(void (__thiscall **)(volatile LONG *, const char *))(*v25 + 472))(v25, "0"); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 488))(2); (*(void (__stdcall **)(float *))(**(_DWORD **)(v2 + 368) + 468))(&flt_AA8C78); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); v26 = sub_421050(3); v27 = sub_8F4A20(v35, v36 - 3, v32, v33 + 4, v26, v2, 0, 0); *(_DWORD *)(v2 + 360) = v27; (*(void (__thiscall **)(volatile LONG *, const char *))(*v27 + 472))(v27, "0"); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 360) + 488))(2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); if ( !sub_8F71E0(v34, (int)"SoulLot02", &v35, &v36, &v32, &v33) ) { LABEL_21: v37 = -1; sub_410C00(&v34); return 0; } v28 = sub_421050(3); v29 = sub_8F4A20(v35 - 1, v36 - 4, v32, v33 + 4, v28, v2, 0, 0); *(_DWORD *)(v2 + 372) = v29; (*(void (__thiscall **)(volatile LONG *, const char *))(*v29 + 472))(v29, "0"); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 488))(2); (*(void (__stdcall **)(float *))(**(_DWORD **)(v2 + 372) + 468))(&flt_AA8C78); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v30 = sub_421050(3); v31 = sub_8F4A20(v35, v36 - 3, v32, v33 + 4, v30, v2, 0, 0); *(_DWORD *)(v2 + 364) = v31; (*(void (__thiscall **)(volatile LONG *, const char *))(*v31 + 472))(v31, "0"); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 364) + 488))(2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.32600001, 0.0); v37 = -1; sub_410C00(&v34); return 1; } // AA8C78: using guessed type float flt_AA8C78; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005B5470) -------------------------------------------------------- char __thiscall sub_5B5470(float *this) { float *v1; // esi const CHAR *v2; // eax char result; // al const CHAR *v4; // eax v1 = this; if ( this[96] + 1.0 <= flt_ACCFCC ) { if ( sub_680D20((int)byte_AD9238) ) { result = 1; } else { v4 = sub_40C190(978009948); sub_492060(*((_DWORD **)v1 + 74), (int)v4); result = 0; } } else { v2 = sub_40C190(-653054675); sub_492060(*((_DWORD **)v1 + 74), (int)v2); result = 0; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B54E0) -------------------------------------------------------- char __thiscall sub_5B54E0(float *this) { float *v1; // esi const CHAR *v2; // eax char result; // al const CHAR *v4; // eax v1 = this; if ( this[97] + 1.0 <= flt_ACCFCC ) { if ( sub_680D30((int)byte_AD9238) ) { result = 1; } else { v4 = sub_40C190(978012764); sub_492060(*((_DWORD **)v1 + 74), (int)v4); result = 0; } } else { v2 = sub_40C190(-468505299); sub_492060(*((_DWORD **)v1 + 74), (int)v2); result = 0; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B5550) -------------------------------------------------------- char __thiscall sub_5B5550(float *this) { float *v1; // esi char result; // al _DWORD *v3; // ecx v1 = this; result = sub_5B5470(this); if ( result ) { v3 = (_DWORD *)*((_DWORD *)v1 + 74); v1[96] = flt_ACCFCC; sub_4B84A0(v3); result = (unsigned int)sub_4FCDB0(*((_DWORD *)v1 + 98), flt_ACCFCC, 1.0, 0.0); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B55A0) -------------------------------------------------------- char __thiscall sub_5B55A0(float *this) { float *v1; // esi char result; // al _DWORD *v3; // ecx v1 = this; result = sub_5B54E0(this); if ( result ) { v3 = (_DWORD *)*((_DWORD *)v1 + 74); v1[97] = flt_ACCFCC; sub_4B84E0(v3); result = (unsigned int)sub_4FCDB0(*((_DWORD *)v1 + 99), flt_ACCFCC, 1.0, 0.0); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B55F0) -------------------------------------------------------- char __thiscall sub_5B55F0(float *this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 0: result = sub_5B5550(this); break; case 1: result = sub_5B55A0(this); break; default: return result; } return result; } //----- (005B5780) -------------------------------------------------------- void *__thiscall sub_5B5780(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SoulStoneWin::`vftable'; *((_DWORD *)this + 58) = &SoulStoneWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DDAE4: using guessed type void *SoulStoneWin::`vftable'; // 9DDB04: using guessed type void *SoulStoneWin::`vftable'; //----- (005B58F0) -------------------------------------------------------- char __thiscall sub_5B58F0(void *this, int a2, int a3, int a4, int a5, int *a6, _DWORD *a7) { int v7; // esi char result; // al volatile LONG *v9; // eax int v10[5]; // [esp+10h] [ebp-20h] int v11; // [esp+2Ch] [ebp-4h] v7 = (int)this; result = sub_8F2900(this, a3, a4, 32, 32, a7, 0, 0); if ( result ) { sub_456260(v10); v11 = 0; sub_455FF0(v10, v7); sub_456000(v10, a3, a4); sub_456380(v10, a2); sub_456760(v10, a6[1], (int)&unk_9DDD28, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); sub_456760(v10, a6[2], (int)&unk_9DDD29, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); sub_456760(v10, a6[3], (int)&unk_9DDD2A, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); sub_456760(v10, a6[4], (int)&unk_9DDD2B, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); sub_456760(v10, a6[5], (int)&unk_9DDD2C, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4); v9 = sub_456820(v10, *a6, 0); sub_5D5260(3, 3, 32, 32, (int)v9); v11 = -1; sub_4562E0(v10); result = 1; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; //----- (005B5AF0) -------------------------------------------------------- char __thiscall sub_5B5AF0(volatile LONG *this, int a2, int a3) { char result; // al if ( a2 == 9 || (result = a2 - 10, a2 == 10) ) result = sub_8F2BC0(this, 1, 0, 0); return result; } //----- (005B5B20) -------------------------------------------------------- int __cdecl sub_5B5B20(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x120u); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_8F2740(v6); *(_DWORD *)v7 = &StatTitleListItemWin::`vftable'; *(_DWORD *)(v7 + 232) = &StatTitleListItemWin::`vftable'; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int))(*(_DWORD *)v7 + 452))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9DDF68: using guessed type void *StatTitleListItemWin::`vftable'; // 9DDF84: using guessed type void *StatTitleListItemWin::`vftable'; //----- (005B5C70) -------------------------------------------------------- int __cdecl sub_5B5C70(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x174u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &StatTitleWin::`vftable'; *(_DWORD *)(v2 + 232) = &StatTitleWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DE150: using guessed type void *StatTitleWin::`vftable'; // 9DE16C: using guessed type void *StatTitleWin::`vftable'; //----- (005B5DD0) -------------------------------------------------------- char __thiscall sub_5B5DD0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // edi char v9; // ST34_1 int v10; // ST38_4 int v11; // ST3C_4 int v12; // ST40_4 const CHAR *v13; // eax volatile LONG *v14; // edi char v15; // ST34_1 int v16; // ST38_4 int v17; // ST3C_4 int v18; // ST40_4 const CHAR *v19; // eax char v20; // ST34_1 int v21; // ST38_4 int v22; // ST3C_4 int v23; // ST40_4 const CHAR *v24; // eax volatile LONG **v25; // eax int v26; // eax int v27; // ecx int v28; // edx int v29; // eax int v30; // ecx int v31; // edx int v32; // eax int v33; // edx int v34; // ecx int v35; // eax void (__thiscall *v36)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v37)(_DWORD, signed int); // esi const char *v38; // [esp+14h] [ebp-4Ch] const char *v39; // [esp+18h] [ebp-48h] const char *v40; // [esp+1Ch] [ebp-44h] const char *v41; // [esp+20h] [ebp-40h] const char *v42; // [esp+24h] [ebp-3Ch] const char *v43; // [esp+28h] [ebp-38h] int v44[5]; // [esp+2Ch] [ebp-34h] int v45; // [esp+40h] [ebp-20h] int v46; // [esp+44h] [ebp-1Ch] int v47; // [esp+48h] [ebp-18h] int v48; // [esp+4Ch] [ebp-14h] int v49; // [esp+50h] [ebp-10h] int v50; // [esp+5Ch] [ebp-4h] v2 = (int)this; v49 = 0; v3 = dword_BA6BA0; v50 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\StatTitle.nif"); sub_8F66B0(v4, (int)&v49, v3); if ( !v49 ) return 0; v5 = sub_8FB140(v49, (int)"Plane01", (int)&v47, (int)&v48, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"StatTitleWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v49; v50 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v44); LOBYTE(v50) = 1; sub_455FF0(v44, v2); sub_456000(v44, v47, v48); sub_456380(v44, v49); sub_456820(v44, (int)"Plane02", 0); sub_456460(v44, 11, (int)"SelectionName"); *(_DWORD *)(v2 + 368) = sub_456980( v44, (int)"SelectionName", (int)&unk_9DDD2D, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v8 = sub_4563D0(v44, 9, (int)"OkNor", (int)"OkOver", (int)"OkClick", 0, 0); v9 = dword_AA8C68; v10 = dword_AA8C6C; v11 = dword_AA8C70; v12 = dword_AA8C74; v13 = sub_40C190(-1498109734); sub_456040((int)v8, (int)v13, v9, v10, v11, v12, 5); v14 = sub_4563D0(v44, 10, (int)"CancelNor", (int)"CancelOver", (int)"CancelClick", 0, 0); v15 = dword_AA8C68; v16 = dword_AA8C6C; v17 = dword_AA8C70; v18 = dword_AA8C74; v19 = sub_40C190(-521671709); sub_456040((int)v14, (int)v19, v15, v16, v17, v18, 5); sub_4563D0(v44, 10, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v20 = dword_AA8D98; v21 = dword_AA8D9C; v22 = dword_AA8DA0; v23 = dword_AA8DA4; v24 = sub_40C190(827673635); sub_456760(v44, (int)"WinTitle", (int)v24, v20, v21, v22, v23, 5); v25 = sub_8FB140(v49, (int)"SelectIcon", (int)&v45, (int)&v46, 0); sub_8F3EB0(v45, v46, (int)v25, v2, 0, 0); *(_DWORD *)(v2 + 364) = sub_5D5260(v45 + 3, v46 + 3, 32, 32, v2); v38 = "Title1Icon"; v39 = "Title1Name"; v40 = "Title1Rank"; v41 = "Title1Desc"; v42 = "Title1NextTxt"; v43 = "Title1NextDesc"; v26 = sub_5B5B20(v49, v47, v48, 0, (int)&v38, v2); v27 = v47; v28 = v49; *(_DWORD *)(v2 + 348) = v26; v38 = "Title2Icon"; v39 = "Title2Name01"; v40 = "Title2Rank01"; v41 = "Title2Desc01"; v42 = "Title2NextTxt01"; v43 = "Title2NextDesc01"; v29 = sub_5B5B20(v28, v27, v48, 1, (int)&v38, v2); v30 = v48; v31 = v47; *(_DWORD *)(v2 + 352) = v29; v38 = "Title3Icon"; v39 = "Title3Name02"; v40 = "Title3Rank02"; v41 = "Title3Desc02"; v42 = "Title3NextTxt02"; v43 = "Title3NextDesc02"; v32 = sub_5B5B20(v49, v31, v30, 2, (int)&v38, v2); v33 = v48; v34 = v49; *(_DWORD *)(v2 + 356) = v32; v38 = "Title4Icon"; v39 = "Title4Name03"; v40 = "Title4Rank03"; v41 = "Title4Desc03"; v42 = "Title4NextTxt03"; v43 = "Title4NextDesc03"; v35 = sub_5B5B20(v34, v47, v33, 3, (int)&v38, v2); v36 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 360) = v35; v36(v2, xRight, dword_AC2F78, 0.79000002, 0.5); LOBYTE(v50) = 0; sub_4562E0(v44); v50 = -1; if ( v49 ) { v37 = (void (__thiscall ***)(_DWORD, signed int))v49; if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v37 ) (**v37)(v37, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005B6260) -------------------------------------------------------- void *__thiscall sub_5B6260(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &StatTitleListItemWin::`vftable'; *((_DWORD *)this + 58) = &StatTitleListItemWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DDF68: using guessed type void *StatTitleListItemWin::`vftable'; // 9DDF84: using guessed type void *StatTitleListItemWin::`vftable'; //----- (005B62A0) -------------------------------------------------------- void *__thiscall sub_5B62A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &StatTitleWin::`vftable'; *((_DWORD *)this + 58) = &StatTitleWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DE150: using guessed type void *StatTitleWin::`vftable'; // 9DE16C: using guessed type void *StatTitleWin::`vftable'; //----- (005B62E0) -------------------------------------------------------- _DWORD *__thiscall sub_5B62E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &StatusWin::`vftable'; v1[58] = &StatusWin::`vftable'; sub_8D0610((_BYTE *)v1 + 524); sub_8D0610((_BYTE *)v1 + 552); sub_8D0610((_BYTE *)v1 + 608); *((float *)v1 + 161) = 0.30000001; *((_WORD *)v1 + 318) = 256; v1[160] = 5; *((float *)v1 + 129) = -1.0; v1[112] = 0; *((float *)v1 + 130) = -1.0; v1[145] = 0; v1[107] = 0; v1[94] = 0; v1[95] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[90] = 0; v1[96] = 0; v1[111] = 0; *((_BYTE *)v1 + 424) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DE5BC: using guessed type void *StatusWin::`vftable'; // 9DE5DC: using guessed type void *StatusWin::`vftable'; //----- (005B6420) -------------------------------------------------------- char __thiscall sub_5B6420(_DWORD **this, int a2, int a3) { char result; // al _DWORD **v4; // esi int v5; // eax result = a2; v4 = this; if ( a2 == 4 ) { if ( dword_AD8EBC ) { v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); result = (unsigned int)sub_8EEE70(v4[74], 128, v5, 0); } } else if ( a2 == 2 ) { if ( dword_AD8EBC ) { result = (*(int (__stdcall **)(LONG, LONG))(*this[107] + 332))(pt.x, pt.y); if ( result ) result = sub_4A7770(v4[74], (int)dword_AD8EBC); } } return result; } //----- (005B64C0) -------------------------------------------------------- char __thiscall sub_5B64C0(_BYTE *this, char a2) { char result; // al result = a2; this[637] = a2; return result; } //----- (005B64D0) -------------------------------------------------------- int __thiscall sub_5B64D0(_DWORD ***this) { _DWORD ***v1; // esi _DWORD *v2; // eax int *v3; // eax _DWORD **v4; // ecx int v6; // [esp+4h] [ebp-1Ch] int v7; // [esp+8h] [ebp-18h] int v8; // [esp+Ch] [ebp-14h] int v9; // [esp+10h] [ebp-10h] int v10; // [esp+14h] [ebp-Ch] char v11; // [esp+18h] [ebp-8h] v1 = this; v2 = sub_67E9D0((int)dword_AD8EBC); sub_460590(v1[107], (int)v2); v3 = (int *)sub_680810(byte_AD9238); v6 = *v3; v7 = v3[1]; v8 = v3[2]; v4 = v1[112]; v9 = v3[3]; v10 = v3[4]; v11 = 0; return ((int (__stdcall *)(int *))(*v4)[118])(&v6); } //----- (005B6550) -------------------------------------------------------- void __thiscall sub_5B6550(float *this) { float *v1; // esi int v2; // ecx v1 = this; v2 = *((_DWORD *)this + 98); v1[129] = flt_ACCFCC; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1); sub_5B8980(*((float **)v1 + 98), 1.0, 0.0); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B6590) -------------------------------------------------------- void __thiscall sub_5B6590(int this) { int v1; // esi bool v2; // zf v1 = this; v2 = *(_BYTE *)(this + 424) == 0; *(float *)(this + 520) = flt_ACCFCC; if ( v2 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 396) + 256))(1); sub_5B8980(*(float **)(v1 + 396), 1.0, 0.0); } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B65E0) -------------------------------------------------------- void __thiscall sub_5B65E0(_DWORD *this, float a2) { _DWORD *v2; // ebx double v3; // ST10_8 int v4; // esi signed int v5; // edi int **v6; // esi int v7; // edi char v8; // al signed int v9; // [esp+24h] [ebp+8h] v2 = this; if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= this[160] ) { v3 = (double)sub_680BE0((int)byte_AD9238); if ( *((float *)v2 + 161) > v3 / (double)sub_680CC0((int)byte_AD9238) ) { if ( !*((_BYTE *)v2 + 636) ) { sub_8D06A0((float *)v2 + 152, a2); *((float *)v2 + 157) = 1.0; *((_BYTE *)v2 + 636) = 1; } if ( sub_8D0630((float *)v2 + 152, a2) ) { v6 = (int **)(v2 + 150); v9 = 2; do { v7 = **v6; v8 = (*(int (**)(void))(**v6 + 260))(); (*(void (__thiscall **)(int *, bool))(v7 + 256))(*v6, v8 == 0); if ( *((_BYTE *)v2 + 637) ) (*(void (**)(void))(**v6 + 268))(); ++v6; --v9; } while ( v9 ); } } else if ( *((_BYTE *)v2 + 636) == 1 ) { *((_BYTE *)v2 + 636) = 0; v4 = (int)(v2 + 150); v5 = 2; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); v4 += 4; --v5; } while ( v5 ); } } } //----- (005B6710) -------------------------------------------------------- char __thiscall sub_5B6710(int this, int a2) { int v2; // esi volatile LONG *v3; // edi char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edx int v9; // ebx _DWORD *v10; // eax int v11; // eax int v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax int v18; // eax int v19; // eax int v20; // ecx volatile LONG **v21; // eax volatile LONG *v22; // eax char v23; // al volatile LONG **v24; // eax volatile LONG *v25; // eax int v26; // eax volatile LONG *v27; // eax int v28; // eax volatile LONG *v29; // eax int v30; // eax char *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax int v34; // ecx int v35; // eax int v36; // eax volatile LONG *v37; // eax int v38; // ecx volatile LONG **v39; // eax volatile LONG **v40; // eax volatile LONG **v41; // eax const char *v42; // eax volatile LONG *v43; // eax int v44; // ecx int v45; // eax int v46; // eax volatile LONG *v47; // eax int v48; // ST50_4 int v49; // ST4C_4 int v50; // ST48_4 int v51; // eax volatile LONG *v52; // eax volatile LONG **v53; // eax volatile LONG **v54; // eax const char *v55; // eax volatile LONG **v56; // eax volatile LONG *v57; // eax int v58; // eax int v59; // eax volatile LONG *v60; // eax int v61; // ST50_4 int v62; // ST4C_4 int v63; // ST48_4 int v64; // eax volatile LONG *v65; // eax volatile LONG **v66; // eax volatile LONG **v67; // eax volatile LONG *v68; // eax volatile LONG **v69; // eax volatile LONG *v70; // eax volatile LONG **v71; // eax volatile LONG *v72; // eax volatile LONG **v73; // eax volatile LONG *v74; // eax int v75; // eax volatile LONG **v76; // eax volatile LONG *v77; // eax int v78; // ecx int v79; // eax volatile LONG **v80; // eax volatile LONG *v81; // eax int v82; // ecx volatile LONG **v83; // eax volatile LONG *v84; // eax volatile LONG **v85; // eax volatile LONG *v86; // eax int v87; // eax volatile LONG **v88; // eax int v89; // eax int v90; // eax volatile LONG *v91; // eax int v92; // ecx int v93; // eax volatile LONG *v94; // eax int v95; // eax int v96; // ecx int v97; // eax bool v98; // zf int v99; // eax int v100; // ecx int v101; // eax bool v102; // sf void (__stdcall *v103)(signed int); // eax int v104; // eax void (__stdcall *v105)(signed int); // eax int v106; // edi void (__stdcall *v107)(signed int); // eax int v108; // edi void (__stdcall *v109)(signed int); // eax int v110; // edi int v111; // ST50_4 int v112; // ST4C_4 int v113; // ST48_4 int v114; // ST44_4 int v115; // ST40_4 int v116; // eax volatile LONG *v117; // eax int v118; // edi int v119; // ST50_4 int v120; // ST4C_4 int v121; // ST48_4 int v122; // ST44_4 int v123; // ST40_4 int v124; // eax volatile LONG *v125; // eax volatile LONG v126; // edi const CHAR *v127; // eax int v128; // eax int v129; // edi int v130; // ST58_4 int v131; // eax char *v132; // eax int v133; // eax int v134; // edi int v135; // ST58_4 int v136; // eax char *v137; // eax int v138; // edi int v139; // ST58_4 int v140; // eax char *v141; // eax int v142; // [esp+6Ch] [ebp-7Ch] int v143; // [esp+74h] [ebp-74h] int v144; // [esp+78h] [ebp-70h] int v145[5]; // [esp+7Ch] [ebp-6Ch] int v146; // [esp+90h] [ebp-58h] int v147; // [esp+94h] [ebp-54h] int v148; // [esp+98h] [ebp-50h] int v149; // [esp+9Ch] [ebp-4Ch] int v150; // [esp+A0h] [ebp-48h] int v151; // [esp+A4h] [ebp-44h] int v152; // [esp+A8h] [ebp-40h] int v153; // [esp+ACh] [ebp-3Ch] int v154; // [esp+B0h] [ebp-38h] int v155; // [esp+B4h] [ebp-34h] char v156; // [esp+B8h] [ebp-30h] int v157; // [esp+E4h] [ebp-4h] v2 = this; v153 = 0; v157 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v157 = -1; if ( v153 && !InterlockedDecrement((volatile LONG *)(v153 + 4)) ) { if ( v153 ) (**(void (__thiscall ***)(int, signed int))v153)(v153, 1); } return 0; } v150 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\MainGauge.nif"); sub_8F66B0(v5, (int)&v153, v150); if ( !v153 ) return 0; v6 = sub_8FB140(v153, (int)"Frame", (int)&v151, (int)&v152, v3); if ( !sub_8F1440((volatile LONG **)v2, v151, v152, (int)v6, 0, a2, (int)"StatusWin", 0) ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v153; v157 = -1; if ( v153 && !InterlockedDecrement((volatile LONG *)(v153 + 4)) && v7 ) (**v7)(v7, 1); return 0; } v8 = *(_DWORD *)v153; v9 = v151; v149 = v152; v10 = (_DWORD *)(*(int (__stdcall **)(const char *))(v8 + 72))("EventPanel"); v11 = sub_85C050(v10, 8); v146 = v11; if ( v11 ) { InterlockedIncrement((volatile LONG *)(v11 + 4)); v11 = v146; } v12 = **(_DWORD **)(v11 + 40); LOBYTE(v157) = 1; if ( !v12 || (v13 = *(volatile LONG **)(v12 + 4)) == 0 ) { LABEL_24: LOBYTE(v157) = 0; sub_410C00(&v146); v157 = -1; sub_410C00(&v153); return 0; } v14 = sub_8FB140(v153, (int)"EventPanel", (int)&v155, (int)&v154, v13); v15 = sub_8F3EB0(v155 - v9, v154 - v149, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v153, (int)"Face_panel", (int)&v155, (int)&v154, v3); sub_8F3EB0(-v151, -v152, (int)v16, v2, 0, 0); v17 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v153 + 72))("FaceCut_Mask"); v18 = sub_402BA0((int)dword_BA478C, v17); v19 = sub_460640(-v151, -v152, v18, (_DWORD *)v2); v20 = v153; *(_DWORD *)(v2 + 428) = v19; v21 = sub_8FB140(v20, (int)"FaceCut_Mon", (int)&v155, (int)&v154, v3); v22 = sub_8F3EB0(v155 - v9, v154 - v149, (int)v21, v2, 0, 0); *(_DWORD *)(v2 + 432) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 256))(v22, 0); v150 = (int)sub_8FB140(v153, (int)"Panel01", (int)&v155, (int)&v154, v3); sub_456260(v145); LOBYTE(v157) = 2; sub_455FF0(v145, v2); sub_456000(v145, v151, v152); sub_456380(v145, v153); v23 = sub_6807E0(byte_AD9238); if ( sub_40A760(v23) == 26 ) *(_BYTE *)(v2 + 424) = 1; sub_8FE0F0(v155 - v9, v154 - v149, v150, v2, 11, 0, 0); sub_8FB140(v153, (int)"LPground", (int)&v155, (int)&v154, 0); v24 = sub_8FB140(v153, (int)"Chief_Party", (int)&v155, (int)&v154, v3); v25 = sub_8F3EB0(v155 - v151, v154 - v152, (int)v24, v2, 0, 0); *(_DWORD *)(v2 + 452) = v25; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 256))(v25, 0); if ( !sub_8F71E0(v153, (int)"Num_Level", &v155, &v154, &v148, &v147) ) goto LABEL_53; v26 = sub_421050(2); v27 = sub_8F4A20(v155 - v151, v154 - v152 - 2, v148, v147, v26, v2, 0, 0); *(_DWORD *)(v2 + 464) = v27; (*(void (__thiscall **)(volatile LONG *, void *))(*v27 + 472))(v27, &unk_9DE39F); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 464) + 488))(5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 464) + 240))(0); if ( !sub_8F71E0(v153, (int)"CharName", &v155, &v154, &v148, &v147) ) goto LABEL_53; v28 = sub_421050(2); v29 = sub_8F4A20(v155 - v151, v154 - v152, v148, v147, v28, v2, 0, 0); *(_DWORD *)(v2 + 448) = v29; (*(void (__thiscall **)(volatile LONG *, void *))(*v29 + 472))(v29, &unk_9DE3A6); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 448) + 488))(4); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 240))(0); v30 = 0; v150 = v2 + 468; do { v143 = v153; v144 = v30 + 1; v31 = sub_7549E0("Exp%02d", v30 + 1); v32 = sub_8FB140(v143, (int)v31, (int)&v155, (int)&v154, v3); v33 = sub_8F3EB0(v155 - v151, v154 - v152, (int)v32, v2, 0, 0); *(_DWORD *)v150 = v33; (*(void (__thiscall **)(volatile LONG *, signed int))(*v33 + 256))(v33, 1); sub_8F2EA0(*(void ***)v150, (const char *)&unk_9DE3A7); v34 = v150; *(_DWORD *)(*(_DWORD *)v150 + 272) = dword_AD01E8; v30 = v144; v150 = v34 + 4; } while ( v144 < 9 ); v35 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v153 + 72))("Fill_Exp"); v36 = sub_402BA0((int)dword_BA478C, v35); v37 = sub_909ED0(-v151, -v152, v36, 0, 0.0, 360.0, v2); v38 = v153; *(_DWORD *)(v2 + 388) = v37; v39 = sub_8FB140(v38, (int)"Panel05", (int)&v155, (int)&v154, v3); sub_8F3EB0(v155 - v151, v154 - v152, (int)v39, v2, 0, 0); v40 = sub_8FB140(v153, (int)"Panel03", (int)&v155, (int)&v154, v3); sub_8F3EB0(v155 - v151, v154 - v152, (int)v40, v2, 0, 0); if ( *(_BYTE *)(v2 + 424) ) sub_456820(v145, (int)"LPground", 0); else sub_456820(v145, (int)"SPground", 0); v41 = sub_8FB140(v153, (int)"SP_Panel", (int)&v155, (int)&v154, v3); *(_DWORD *)(v2 + 348) = sub_8FE0F0(v155 - v151, v154 - v152, (int)v41, v2, 10, 0, 0); v42 = sub_40C190(-234471345); sub_8F2EA0(*(void ***)(v2 + 348), v42); *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; if ( *(_BYTE *)(v2 + 424) ) { *(_DWORD *)(v2 + 512) = sub_456820(v145, (int)"LPLight", 0); } else { v43 = sub_456820(v145, (int)"SPLight", 0); v44 = v153; *(_DWORD *)(v2 + 508) = v43; v45 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("SPCoolTime"); v46 = sub_402BA0((int)dword_BA478C, v45); v47 = sub_909ED0(-v155, -v154, v46, 0, 0.0, 360.0, *(_DWORD *)(v2 + 348)); *(_DWORD *)(v2 + 396) = v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 256))(v47, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 240))(0); v150 = *(_DWORD *)(v2 + 348); v48 = v150; v49 = sub_421050(3); v50 = (*(int (**)(void))(*(_DWORD *)v150 + 148))(); v51 = (*(int (**)(void))(*(_DWORD *)v150 + 144))(); v52 = sub_8F4A20(0, 0, v51, v50, v49, v48, 0, 0); *(_DWORD *)(v2 + 460) = v52; (*(void (__thiscall **)(volatile LONG *, signed int))(*v52 + 488))(v52, 5); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v2 + 460) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 460) + 240))(0); } v53 = sub_8FB140(v153, (int)"Panel04", (int)&v155, (int)&v154, v3); sub_8F3EB0(v155 - v151, v154 - v152, (int)v53, v2, 0, 0); v54 = sub_8FB140(v153, (int)"HP_Panel", (int)&v155, (int)&v154, v3); *(_DWORD *)(v2 + 344) = sub_8FE0F0(v155 - v151, v154 - v152, (int)v54, v2, 9, 0, 0); v55 = sub_40C190(-218415025); sub_8F2EA0(*(void ***)(v2 + 344), v55); *(_DWORD *)(*(_DWORD *)(v2 + 344) + 272) = dword_AD01E8; v56 = sub_8FB140(v153, (int)"HPLight", (int)&v155, (int)&v154, v3); v57 = sub_8F3EB0(0, 0, (int)v56, *(_DWORD *)(v2 + 344), 0, 0); *(_DWORD *)(v2 + 504) = v57; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v57 + 256))(v57, 0); v58 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v153 + 72))("HPCoolTime"); v59 = sub_402BA0((int)dword_BA478C, v58); v60 = sub_909ED0(-v155, -v154, v59, 0, 0.0, 360.0, *(_DWORD *)(v2 + 344)); *(_DWORD *)(v2 + 392) = v60; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v60 + 256))(v60, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0); v150 = *(_DWORD *)(v2 + 344); v61 = v150; v62 = sub_421050(3); v63 = (*(int (**)(void))(*(_DWORD *)v150 + 148))(); v64 = (*(int (**)(void))(*(_DWORD *)v150 + 144))(); v65 = sub_8F4A20(0, 0, v64, v63, v62, v61, 0, 0); *(_DWORD *)(v2 + 456) = v65; (*(void (__thiscall **)(volatile LONG *, signed int))(*v65 + 488))(v65, 5); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v2 + 456) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 456) + 240))(0); v66 = sub_8FB140(v153, (int)"Panel02", (int)&v155, (int)&v154, v3); sub_8F3EB0(v155 - v151, v154 - v152, (int)v66, v2, 0, 0); v67 = sub_8FB140(v153, (int)"Fill_SP_03", (int)&v155, (int)&v154, v3); v68 = sub_90CB20(v155 - v9, v154 - v149, (int)v67, v2, 2); *(_DWORD *)(v2 + 412) = v68; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v68 + 256))(v68, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 240))(0); v69 = sub_8FB140(v153, (int)"Fill_SP_01", (int)&v155, (int)&v154, v3); v70 = sub_90CB20(v155 - v9, v154 - v149, (int)v69, v2, 2); *(_DWORD *)(v2 + 408) = v70; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v70 + 256))(v70, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 240))(0); v71 = sub_8FB140(v153, (int)"Fill_HP_01", (int)&v155, (int)&v154, v3); v72 = sub_90CB20(v155 - v9, v154 - v149, (int)v71, v2, 2); *(_DWORD *)(v2 + 400) = v72; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v72 + 256))(v72, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 240))(0); v73 = sub_8FB140(v153, (int)"Fill_HP_03", (int)&v155, (int)&v154, v3); v74 = sub_90CB20(v155 - v9, v154 - v149, (int)v73, v2, 2); *(_DWORD *)(v2 + 404) = v74; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v74 + 256))(v74, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 404) + 240))(0); v75 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v153 + 72))("Fill_SP"); sub_402BA0((int)dword_BA478C, v75); v76 = sub_8FB140(v153, (int)"Fill_SP_02", (int)&v155, (int)&v154, 0); v77 = sub_90CB20(v155 - v151, v154 - v152, (int)v76, v2, 2); v78 = v153; *(_DWORD *)(v2 + 380) = v77; v79 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v78 + 72))("Fill_HP"); sub_402BA0((int)dword_BA478C, v79); v80 = sub_8FB140(v153, (int)"Fill_HP_02", (int)&v155, (int)&v154, 0); v81 = sub_90CB20(v155 - v151, v154 - v152, (int)v80, v2, 2); v82 = v153; *(_DWORD *)(v2 + 376) = v81; v83 = sub_8FB140(v82, (int)"Fill_LP_03", (int)&v155, (int)&v154, v3); v84 = sub_90CB20(v155 - v9, v154 - v149, (int)v83, v2, 2); *(_DWORD *)(v2 + 420) = v84; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v84 + 256))(v84, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 240))(0); v85 = sub_8FB140(v153, (int)"Fill_LP_01", (int)&v155, (int)&v154, v3); v86 = sub_90CB20(v155 - v9, v154 - v149, (int)v85, v2, 2); *(_DWORD *)(v2 + 416) = v86; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v86 + 256))(v86, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 240))(0); v87 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v153 + 72))("Fill_LP"); sub_402BA0((int)dword_BA478C, v87); v88 = sub_8FB140(v153, (int)"Fill_LP_02", (int)&v155, (int)&v154, 0); *(_DWORD *)(v2 + 384) = sub_90CB20(v155 - v151, v154 - v152, (int)v88, v2, 2); if ( !sub_8F71E0(v153, (int)"Num_SP", &v155, &v154, &v148, &v147) ) goto LABEL_53; v89 = sub_421050(2); *(_DWORD *)(v2 + 440) = sub_8F4A20(v155 - v151, v154 - v152, v148, v147, v89, v2, 0, 0); v90 = sub_421050(2); v91 = sub_8F4A20(v155 - v151, v154 - v152, v148, v147, v90, v2, 0, 0); v92 = *(_DWORD *)(v2 + 440); *(_DWORD *)(v2 + 444) = v91; (*(void (__stdcall **)(signed int))(*(_DWORD *)v92 + 488))(5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 440) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 444) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 444) + 468))(&unk_AA8D38); if ( !sub_8F71E0(v153, (int)"Num_HP", &v155, &v154, &v148, &v147) ) { LABEL_53: LOBYTE(v157) = 1; sub_4562E0(v145); goto LABEL_24; } v93 = sub_421050(2); v94 = sub_8F4A20(v155 - v151, v154 - v152 - 2, v148, v147, v93, v2, 0, 0); *(_DWORD *)(v2 + 436) = v94; (*(void (__thiscall **)(volatile LONG *, signed int))(*v94 + 488))(v94, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 436) + 468))(&dword_AA8CB8); v95 = (*(int (**)(void))(**(_DWORD **)(v2 + 456) + 164))(); v96 = *(_DWORD *)(v2 + 456); *(_DWORD *)(v2 + 584) = v95; v97 = (*(int (**)(void))(*(_DWORD *)v96 + 168))(); v98 = *(_BYTE *)(v2 + 424) == 0; *(_DWORD *)(v2 + 588) = v97; if ( v98 ) { v99 = (*(int (**)(void))(**(_DWORD **)(v2 + 460) + 164))(); v100 = *(_DWORD *)(v2 + 460); *(_DWORD *)(v2 + 592) = v99; *(_DWORD *)(v2 + 596) = (*(int (**)(void))(*(_DWORD *)v100 + 168))(); } v101 = sub_680BE0((int)byte_AD9238); v98 = v101 == 0; v102 = v101 < 0; v103 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 400) + 256); if ( v102 || v98 ) v103(0); else v103(1); v104 = sub_680BF0((int)byte_AD9238); v98 = v104 == 0; v102 = v104 < 0; v105 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 408) + 256); if ( v102 || v98 ) v105(0); else v105(1); v106 = sub_680BE0((int)byte_AD9238); v98 = v106 == sub_680CC0((int)byte_AD9238); v107 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 404) + 256); if ( v98 ) v107(1); else v107(0); v108 = sub_680BF0((int)byte_AD9238); v98 = v108 == sub_680CD0((int)byte_AD9238); v109 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 412) + 256); if ( v98 ) v109(1); else v109(0); v110 = *(_DWORD *)(v2 + 344); v111 = *(_DWORD *)(v2 + 344); v112 = sub_421050(6); v113 = (*(int (__thiscall **)(int))(*(_DWORD *)v110 + 148))(v110); v114 = (*(int (__thiscall **)(int))(*(_DWORD *)v110 + 144))(v110); v115 = (*(int (__thiscall **)(int))(*(_DWORD *)v110 + 148))(v110); v116 = (*(int (__thiscall **)(int))(*(_DWORD *)v110 + 144))(v110); v117 = sub_8F4A20(v116, v115, v114, v113, v112, v111, 0, 0); *(_DWORD *)(v2 + 600) = v117; (*(void (__thiscall **)(volatile LONG *, void *))(*v117 + 472))(v117, &unk_9DE3B2); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 600) + 468))(aIii); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 600) + 488))(8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 600) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 600) + 256))(0); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 600) + 492))(&v142); v118 = *(_DWORD *)(v2 + 344); v119 = *(_DWORD *)(v2 + 344); v120 = sub_421050(8); v121 = (*(int (__thiscall **)(int))(*(_DWORD *)v118 + 148))(v118); v122 = (*(int (__thiscall **)(int))(*(_DWORD *)v118 + 144))(v118); v123 = (*(int (__thiscall **)(int))(*(_DWORD *)v118 + 148))(v118); v124 = (*(int (__thiscall **)(int))(*(_DWORD *)v118 + 144))(v118); v125 = sub_8F4A20(v142 + v124, v123, v122, v121, v120, v119, 0, 0); *(_DWORD *)(v2 + 604) = v125; v126 = *v125; v127 = sub_40A910(810892718); (*(void (__thiscall **)(_DWORD, const CHAR *))(v126 + 472))(*(_DWORD *)(v2 + 604), v127); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 604) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 604) + 488))(8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 604) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 604) + 256))(0); v128 = sub_680BE0((int)byte_AD9238); sprintf(&v156, "%u", v128); v129 = **(_DWORD **)(v2 + 436); v130 = sub_680CC0((int)byte_AD9238); v131 = sub_680BE0((int)byte_AD9238); v132 = sub_7549E0("%d/%d", v131, v130); (*(void (__thiscall **)(_DWORD, char *))(v129 + 472))(*(_DWORD *)(v2 + 436), v132); v133 = sub_680BF0((int)byte_AD9238); sprintf(&v156, "%u", v133); v134 = **(_DWORD **)(v2 + 440); v135 = sub_680CD0((int)byte_AD9238); v136 = sub_680BF0((int)byte_AD9238); v137 = sub_7549E0("%d/%d", v136, v135); (*(void (__thiscall **)(_DWORD, char *))(v134 + 472))(*(_DWORD *)(v2 + 440), v137); v138 = **(_DWORD **)(v2 + 444); v139 = sub_680CF0((int)byte_AD9238); v140 = sub_680C10((int)byte_AD9238); v141 = sub_7549E0("%d/%d", v140, v139); (*(void (__thiscall **)(_DWORD, char *))(v138 + 472))(*(_DWORD *)(v2 + 444), v141); LOBYTE(v157) = 1; sub_4562E0(v145); LOBYTE(v157) = 0; sub_410C00(&v146); v157 = -1; sub_410C00(&v153); return 1; } // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005B78B0) -------------------------------------------------------- void __thiscall sub_5B78B0(void ***this, _BYTE *a2) { void ***v2; // esi void ***v3; // esi __int64 v4; // rax __int64 v5; // rdi __int64 v6; // rax int v7; // eax int v8; // ST04_4 char *v9; // eax char *v10; // eax bool v11; // zf __int64 v12; // [esp+4h] [ebp-20h] signed int v13; // [esp+1Ch] [ebp-8h] void ***v14; // [esp+20h] [ebp-4h] v2 = this; if ( ((unsigned __int8 (*)(void))(*this)[78])() ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; sub_8F1140(v2, a2); v3 = v2 + 117; v14 = v3; v13 = 9; do { if ( (*((unsigned __int8 (__stdcall **)(LONG, LONG))**v3 + 83))(pt.x, pt.y) ) { v4 = sub_6808D0((int)byte_AD9238); v5 = v4 - sub_6808B0((int)byte_AD9238); v6 = sub_6808C0((int)byte_AD9238); v12 = v6 - sub_6808B0((int)byte_AD9238); if ( v5 >= 0 && (SHIDWORD(v5) > 0 || (_DWORD)v5) ) v7 = (signed __int64)((double)v12 / (double)v5 * 100.0); else v7 = 0; v8 = v7; v9 = (char *)sub_40A910(306919740); v10 = sub_7549E0(v9, v8); v3 = v14; sub_8F2EA0(*v14, v10); } else { sub_8F2EA0(*v3, (const char *)&unk_9DE3B3); } ++v3; v11 = v13-- == 1; v14 = v3; } while ( !v11 ); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (005B7A30) -------------------------------------------------------- void __thiscall sub_5B7A30(char *this, float a2) { char *v2; // esi int v3; // eax __int64 v4; // rax __int64 v5; // rax float v6; // ST5C_4 float v7; // ST58_4 long double v8; // st7 unsigned int v9; // ebx float v10; // ST58_4 unsigned int v11; // eax int v12; // edi int v13; // edi int v14; // ebx void *v15; // edi _DWORD *v16; // eax _DWORD *v17; // eax int *v18; // eax int v19; // ecx int v20; // eax int v21; // ecx int v22; // ecx bool v23; // al void (__stdcall *v24)(signed int, int); // edx int v25; // eax int v26; // eax int v27; // eax int v28; // ecx int v29; // ecx bool v30; // al void (__stdcall *v31)(signed int, int); // edx int v32; // eax int v33; // eax _DWORD *v34; // eax float *v35; // ecx float v36; // ST58_4 float v37; // ST58_4 int v38; // [esp+40h] [ebp-70h] int v39; // [esp+40h] [ebp-70h] __int64 v40; // [esp+4Ch] [ebp-64h] __int64 v41; // [esp+54h] [ebp-5Ch] float v42; // [esp+58h] [ebp-58h] float v43; // [esp+58h] [ebp-58h] float v44; // [esp+58h] [ebp-58h] float v45; // [esp+5Ch] [ebp-54h] unsigned int v46; // [esp+5Ch] [ebp-54h] int v47; // [esp+60h] [ebp-50h] int v48; // [esp+64h] [ebp-4Ch] int v49; // [esp+68h] [ebp-48h] int v50; // [esp+6Ch] [ebp-44h] int v51; // [esp+70h] [ebp-40h] int v52; // [esp+74h] [ebp-3Ch] int v53; // [esp+78h] [ebp-38h] int v54; // [esp+7Ch] [ebp-34h] int v55; // [esp+80h] [ebp-30h] int v56; // [esp+84h] [ebp-2Ch] char v57; // [esp+88h] [ebp-28h] char v58; // [esp+8Ch] [ebp-24h] v2 = this; v3 = sub_680890((unsigned __int8 *)byte_AD9238); sprintf(&v58, "%u", v3); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 116) + 472))(&v58); v4 = sub_6808D0((int)byte_AD9238); v41 = v4 - sub_6808B0((int)byte_AD9238); v5 = sub_6808C0((int)byte_AD9238); v40 = v5 - sub_6808B0((int)byte_AD9238); if ( v41 ) { v6 = (double)v40 * 100.0; v45 = v6 / (double)v41; } else { v45 = 0.0; } if ( v45 > 0.0 ) { v8 = 10.0; v9 = (signed __int64)(v45 / 10.0); if ( v9 > 9 ) v9 = 9; } else { v8 = 10.0; v9 = 0; } v7 = v45 + 0.0; v10 = fmod(v7, v8); sub_5B8980(*((float **)v2 + 97), 10.0, v10); v11 = 0; if ( v9 ) { v12 = (int)(v2 + 468); v46 = v9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 276))(1.0); v12 += 4; --v46; } while ( v46 ); if ( v9 >= 9 ) goto LABEL_15; v11 = v9; } v13 = (int)&v2[4 * v11 + 468]; v14 = 9 - v11; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 276))(0.0); v13 += 4; --v14; } while ( v14 ); LABEL_15: if ( (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 648))(v38) ) { v15 = *(void **)(*((_DWORD *)v2 + 108) + 288); v16 = sub_67E9D0((int)dword_AD8EBC); sub_8FCC40(v15, (int)v16); (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 108) + 256))(1); (*(void (__cdecl **)(_DWORD))(**((_DWORD **)v2 + 107) + 256))(0); } else { v17 = sub_67E9D0((int)dword_AD8EBC); sub_460590(*((_DWORD ***)v2 + 107), (int)v17); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 108) + 256))(0); (*(void (__cdecl **)(signed int))(**((_DWORD **)v2 + 107) + 256))(1); } v18 = (int *)sub_680810(byte_AD9238); v52 = *v18; v53 = v18[1]; v54 = v18[2]; v19 = *((_DWORD *)v2 + 112); v55 = v18[3]; v56 = v18[4]; v57 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v19 + 472))(&v52); if ( sub_680D20((int)byte_AD9238) <= 1 ) { if ( !v2[582] ) { sub_8D06A0((float *)v2 + 131, flt_ACCFCC); *((float *)v2 + 136) = 0.5; v2[582] = 1; } if ( sub_8D0630((float *)v2 + 131, a2) ) { v22 = *((_DWORD *)v2 + 126); v23 = v2[580] == 0; v2[580] = v23; v24 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v22 + 256); if ( v23 ) { v24(1, v39); v25 = sub_680D20((int)byte_AD9238); sprintf(&v58, "%d", v25); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 114) + 468))(&dword_AA8C88); } else { v24(0, v39); v26 = sub_680D20((int)byte_AD9238); sprintf(&v58, "%d", v26); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 114) + 468))(&dword_AA8CB8); } sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 114) + 288), 1); (*(void (__cdecl **)(char *))(**((_DWORD **)v2 + 114) + 472))(&v58); } } else { v20 = sub_680D20((int)byte_AD9238); sprintf(&v58, "%d", v20); (*(void (__stdcall **)(int *, int))(**((_DWORD **)v2 + 114) + 468))(&dword_AA8C68, v39); sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 114) + 288), 1); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 114) + 472))(&v58); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 114) + 172))(*((_DWORD *)v2 + 146)); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 114) + 176))(*((_DWORD *)v2 + 147)); v21 = *((_DWORD *)v2 + 126); v2[582] = 0; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v21 + 256))(0); } if ( !v2[424] ) { if ( sub_680D30((int)byte_AD9238) <= 1 ) { if ( !v2[583] ) { sub_8D06A0((float *)v2 + 138, flt_ACCFCC); *((float *)v2 + 143) = 0.5; v2[583] = 1; } if ( sub_8D0630((float *)v2 + 138, a2) ) { v29 = *((_DWORD *)v2 + 127); v30 = v2[581] == 0; v2[581] = v30; v31 = *(void (__stdcall **)(signed int, int))(*(_DWORD *)v29 + 256); if ( v30 ) { v31(1, v39); v32 = sub_680D30((int)byte_AD9238); sprintf(&v58, "%d", v32); sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 115) + 288), 1); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 115) + 468))(&dword_AA8C88); } else { v31(0, v39); v33 = sub_680D30((int)byte_AD9238); sprintf(&v58, "%d", v33); sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 115) + 288), 1); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 115) + 468))(&dword_AA8CB8); } (*(void (__cdecl **)(char *))(**((_DWORD **)v2 + 115) + 472))(&v58); } } else { v27 = sub_680D30((int)byte_AD9238); sprintf(&v58, "%d", v27); (*(void (__stdcall **)(int *, int))(**((_DWORD **)v2 + 115) + 468))(&dword_AA8C68, v39); sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 115) + 288), 1); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 115) + 472))(&v58); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 115) + 172))(*((_DWORD *)v2 + 146)); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 115) + 176))(*((_DWORD *)v2 + 147)); v28 = *((_DWORD *)v2 + 127); v2[583] = 0; (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v28 + 256))(0); } } sub_5B65E0(v2, a2); sub_6C1530(&dword_B9DC70, &v47); if ( byte_B9E5CC ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 113) + 256))(1); } else if ( !dword_B9DCC4 || sub_718A50(&dword_B9E560) || (v34 = (_DWORD *)sub_680810(byte_AD9238), v47 != *v34) || v48 != v34[1] || v49 != v34[2] || v50 != v34[3] || v51 != v34[4] ) { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 113) + 256))(0); } else { (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 113) + 256))(1); } if ( !v2[424] ) { v42 = flt_ACCFCC; if ( (*(unsigned __int8 (**)(void))(**((_DWORD **)v2 + 99) + 260))() ) { v35 = (float *)*((_DWORD *)v2 + 99); v43 = (v42 - *((float *)v2 + 130)) / 7.0; if ( v43 > 1.0 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v35 + 256))(0); } else { v36 = 1.0 - v43; sub_5B8980(v35, 1.0, v36); } } } if ( (*(unsigned __int8 (**)(void))(**((_DWORD **)v2 + 98) + 260))() ) { v44 = (a2 - *((float *)v2 + 129)) / 7.0; if ( v44 > 1.0 ) { (*(void (__thiscall **)(_DWORD, _DWORD))(**((_DWORD **)v2 + 98) + 256))(*((_DWORD *)v2 + 98), 0); } else { v37 = 1.0 - v44; sub_5B8980(*((float **)v2 + 98), 1.0, v37); } } } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AA8CB8: using guessed type int dword_AA8CB8; // ACCFCC: using guessed type float flt_ACCFCC; // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; // B9E5CC: using guessed type char byte_B9E5CC; //----- (005B8180) -------------------------------------------------------- char __thiscall sub_5B8180(float *this) { float *v1; // esi int v2; // edi const CHAR *v3; // eax const CHAR *v5; // eax v1 = this; if ( sub_65B9D0(dword_AD8EBC, 500000) ) return 0; if ( dword_AD8EBC[2496] ) return 0; v2 = sub_680BE0((int)byte_AD9238); if ( v2 >= sub_680CC0((int)byte_AD9238) ) return 0; if ( v1[129] + 7.0 - 2.0 > flt_ACCFCC ) { v3 = sub_40C190(-653054682); sub_492060(*((_DWORD **)v1 + 74), (int)v3); return 0; } if ( sub_680D20((int)byte_AD9238) ) return 1; v5 = sub_40C190(978009941); sub_492060(*((_DWORD **)v1 + 74), (int)v5); return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B8230) -------------------------------------------------------- char __thiscall sub_5B8230(float *this) { float *v1; // esi int v2; // edi const CHAR *v3; // eax const CHAR *v5; // eax v1 = this; if ( sub_65B9D0(dword_AD8EBC, 500000) ) return 0; if ( dword_AD8EBC[2496] ) return 0; v2 = sub_680BF0((int)byte_AD9238); if ( v2 >= sub_680CD0((int)byte_AD9238) ) return 0; if ( v1[130] + 7.0 - 2.0 > flt_ACCFCC ) { v3 = sub_40C190(-468505306); sub_492060(*((_DWORD **)v1 + 74), (int)v3); return 0; } if ( sub_680D30((int)byte_AD9238) ) return 1; v5 = sub_40C190(1330401177); sub_492060(*((_DWORD **)v1 + 74), (int)v5); return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005B8320) -------------------------------------------------------- char __thiscall sub_5B8320(int this, int a2, int a3) { int v3; // esi char result; // al v3 = this; if ( a2 == 9 ) { result = sub_5B8180((float *)this); if ( result ) result = sub_4B84A0(*(_DWORD **)(v3 + 296)); } else if ( a2 == 10 ) { result = sub_5B8230((float *)this); if ( result ) result = sub_4B84E0(*(_DWORD **)(v3 + 296)); } else { result = a2 - 11; if ( a2 == 11 ) result = sub_4A7770(*(_DWORD **)(this + 296), (int)dword_AD8EBC); } return result; } //----- (005B8380) -------------------------------------------------------- int __thiscall sub_5B8380(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // edi char *v4; // eax char *v5; // eax int v6; // edi int v7; // eax int v9; // [esp+8h] [ebp-8h] v2 = this; v3 = *this[150]; v4 = (char *)sub_40A910(831815343); v5 = sub_7549E0(v4, a2); (*(void (__thiscall **)(_DWORD *, char *))(v3 + 472))(v2[150], v5); (*(void (__stdcall **)(int *))(*v2[150] + 492))(&v9); v6 = *v2[151]; v7 = (*(int (**)(void))(*v2[86] + 144))(); return (*(int (__thiscall **)(_DWORD *, int))(v6 + 172))(v2[151], v9 + v7); } //----- (005B8410) -------------------------------------------------------- char __thiscall sub_5B8410(void *this, int a2) { sub_5B6710((int)this, a2); return 1; } //----- (005B8430) -------------------------------------------------------- void __thiscall sub_5B8430(char *this, float a2) { sub_5B7A30(this, a2); } //----- (005B8450) -------------------------------------------------------- int __thiscall sub_5B8450(_DWORD **this) { _DWORD **v1; // esi int v2; // ST08_4 int v3; // eax int v4; // ST08_4 int v5; // eax int v6; // ST08_4 int v7; // eax int v8; // edi int v9; // ST08_4 int v10; // eax char *v11; // eax int v12; // eax bool v13; // zf bool v14; // sf void (__stdcall *v15)(signed int); // eax int v16; // edi void (__stdcall *v17)(signed int); // eax bool v18; // bl int v19; // eax void (__stdcall *v20)(signed int); // eax int v21; // edi void (__stdcall *v22)(signed int); // eax int v23; // edi int v24; // ST08_4 int v25; // eax char *v26; // eax int result; // eax int v28; // eax void (__stdcall *v29)(signed int); // edx int v30; // edi int v31; // eax void (__stdcall *v32)(signed int); // edx int v33; // edi int v34; // ST08_4 int v35; // eax char *v36; // eax int v37; // [esp+Ch] [ebp-4h] v1 = this; v2 = sub_680BE0((int)byte_AD9238); v3 = sub_680CC0((int)byte_AD9238); sub_5B8A50(v1, v3, v2); v4 = sub_680BF0((int)byte_AD9238); v5 = sub_680CD0((int)byte_AD9238); sub_5B8AD0(v1, v5, v4); v6 = sub_680C10((int)byte_AD9238); v7 = sub_680CF0((int)byte_AD9238); sub_5B8B50(v1, v7, v6); v8 = *v1[109]; v9 = sub_680CC0((int)byte_AD9238); v10 = sub_680BE0((int)byte_AD9238); v11 = sub_7549E0("%d/%d", v10, v9); (*(void (__thiscall **)(_DWORD *, char *))(v8 + 472))(v1[109], v11); LOBYTE(v37) = 0; switch ( sub_652070(dword_AD8EBC) ) { case 0x1A: case 0x1B: LOBYTE(v37) = 1; break; default: break; } v12 = sub_680BE0((int)byte_AD9238); v13 = v12 == 0; v14 = v12 < 0; v15 = *(void (__stdcall **)(signed int))(*v1[100] + 256); if ( v14 || v13 ) v15(0); else v15(1); v16 = sub_680BE0((int)byte_AD9238); v13 = v16 == sub_680CC0((int)byte_AD9238); v17 = *(void (__stdcall **)(signed int))(*v1[101] + 256); if ( v13 ) v17(1); else v17(0); (*(void (__stdcall **)(int))(*v1[96] + 240))(v37); (*(void (__stdcall **)(int))(*v1[96] + 256))(v37); (*(void (__stdcall **)(int))(*v1[104] + 240))(v37); (*(void (__stdcall **)(int))(*v1[104] + 256))(v37); (*(void (__stdcall **)(int))(*v1[105] + 240))(v37); (*(void (__stdcall **)(int))(*v1[105] + 256))(v37); v18 = (_BYTE)v37 == 0; (*(void (__stdcall **)(bool))(*v1[95] + 240))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[95] + 256))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[102] + 240))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[102] + 256))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[103] + 240))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[103] + 256))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[87] + 240))((_BYTE)v37 == 0); (*(void (__stdcall **)(bool))(*v1[87] + 256))((_BYTE)v37 == 0); if ( !*((_BYTE *)v1 + 424) ) { (*(void (__stdcall **)(bool))(*v1[99] + 240))(v18); (*(void (__stdcall **)(bool))(*v1[99] + 256))(v18); } (*(void (__stdcall **)(bool))(*v1[110] + 240))(v18); (*(void (__stdcall **)(bool))(*v1[110] + 256))(v18); (*(void (__stdcall **)(int))(*v1[111] + 240))(v37); (*(void (__stdcall **)(int))(*v1[111] + 256))(v37); if ( (_BYTE)v37 ) { v19 = sub_680C10((int)byte_AD9238); v13 = v19 == 0; v14 = v19 < 0; v20 = *(void (__stdcall **)(signed int))(*v1[104] + 256); if ( v14 || v13 ) v20(0); else v20(1); v21 = sub_680C10((int)byte_AD9238); v13 = v21 == sub_680CF0((int)byte_AD9238); v22 = *(void (__stdcall **)(signed int))(*v1[105] + 256); if ( v13 ) v22(1); else v22(0); if ( !*((_BYTE *)v1 + 424) ) { (*(void (__stdcall **)(bool))(*v1[115] + 240))(v18); (*(void (__stdcall **)(bool))(*v1[115] + 256))(v18); } v23 = *v1[111]; v24 = sub_680CF0((int)byte_AD9238); v25 = sub_680C10((int)byte_AD9238); v26 = sub_7549E0("%d/%d", v25, v24); result = (*(int (__thiscall **)(_DWORD *, char *))(v23 + 472))(v1[111], v26); } else { v28 = sub_680BF0((int)byte_AD9238); v29 = *(void (__stdcall **)(signed int))(*v1[102] + 256); if ( v28 <= 0 ) v29(0); else v29(1); v30 = sub_680BF0((int)byte_AD9238); v31 = sub_680CD0((int)byte_AD9238); v32 = *(void (__stdcall **)(signed int))(*v1[103] + 256); if ( v30 == v31 ) v32(1); else v32(0); v33 = *v1[110]; v34 = sub_680CD0((int)byte_AD9238); v35 = sub_680BF0((int)byte_AD9238); v36 = sub_7549E0("%d/%d", v35, v34); result = (*(int (__thiscall **)(_DWORD *, char *))(v33 + 472))(v1[110], v36); } return result; } //----- (005B8850) -------------------------------------------------------- volatile LONG *__cdecl sub_5B8850(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x288u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5B62E0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005B8980) -------------------------------------------------------- void __thiscall sub_5B8980(float *this, float a2, float a3) { double v3; // st6 double v4; // st7 float v5; // [esp+Ch] [ebp+Ch] v3 = a2; if ( a2 < 0.0 ) v3 = (float)0.0; if ( a3 >= 0.0 ) v4 = a3; else v4 = (float)0.0; if ( v3 != this[78] || v4 != this[77] ) { if ( v3 < v4 ) { v5 = v3; v4 = v5; } this[78] = v3; this[77] = v4; sub_90A550((int)this); } } //----- (005B8A10) -------------------------------------------------------- void *__thiscall sub_5B8A10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &StatusWin::`vftable'; *((_DWORD *)this + 58) = &StatusWin::`vftable'; *((_DWORD *)this + 107) = 0; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DE5BC: using guessed type void *StatusWin::`vftable'; // 9DE5DC: using guessed type void *StatusWin::`vftable'; //----- (005B8A50) -------------------------------------------------------- void __thiscall sub_5B8A50(_DWORD *this, unsigned int a2, unsigned int a3) { float *v3; // ecx double v4; // st7 float v5; // [esp+8h] [ebp+8h] float v6; // [esp+Ch] [ebp+Ch] v3 = (float *)this[94]; v5 = (double)a2; v6 = (double)a3; if ( v5 != v3[76] || v6 != v3[75] ) { v4 = v6; v3[76] = v5; v3[75] = *(float *)&v4; sub_49F670(v3); } } //----- (005B8AD0) -------------------------------------------------------- void __thiscall sub_5B8AD0(_DWORD *this, unsigned int a2, unsigned int a3) { float *v3; // ecx double v4; // st7 float v5; // [esp+8h] [ebp+8h] float v6; // [esp+Ch] [ebp+Ch] v3 = (float *)this[95]; v5 = (double)a2; v6 = (double)a3; if ( v5 != v3[76] || v6 != v3[75] ) { v4 = v6; v3[76] = v5; v3[75] = *(float *)&v4; sub_49F670(v3); } } //----- (005B8B50) -------------------------------------------------------- void __thiscall sub_5B8B50(_DWORD *this, unsigned int a2, unsigned int a3) { float *v3; // ecx double v4; // st7 float v5; // [esp+8h] [ebp+8h] float v6; // [esp+Ch] [ebp+Ch] v3 = (float *)this[96]; v5 = (double)a2; v6 = (double)a3; if ( v5 != v3[76] || v6 != v3[75] ) { v4 = v6; v3[76] = v5; v3[75] = *(float *)&v4; sub_49F670(v3); } } //----- (005B8C20) -------------------------------------------------------- bool __thiscall sub_5B8C20(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) != 0; } //----- (005B8D30) -------------------------------------------------------- char __thiscall sub_5B8D30(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (005B8D70) -------------------------------------------------------- int __thiscall sub_5B8D70(_DWORD *this) { _DWORD *v1; // esi int result; // eax int *v3; // edi int v4; // eax v1 = this; result = sub_5D5470(this); if ( result ) { v3 = (int *)v1[68]; if ( v3 ) { v4 = sub_5D5470(v1); sub_547C20(v3, v4); result = sub_8F2F90((int)v1); } } return result; } //----- (005B8DF0) -------------------------------------------------------- char __stdcall sub_5B8DF0(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 12, 30, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005B8E20) -------------------------------------------------------- char __stdcall sub_5B8E20(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 12, 28, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005B8E50) -------------------------------------------------------- void __thiscall sub_5B8E50(_DWORD *this) { _DWORD *v1; // ebx _WORD **v2; // esi signed int v3; // edi unsigned int v4; // esi _WORD **v5; // edi int v6; // eax v1 = this; v2 = (_WORD **)(this + 90); if ( this[90] ) { v3 = 36; do { sub_5D5B70(*v2, 0, 1); ++v2; --v3; } while ( v3 ); v4 = 0; v5 = (_WORD **)(v1 + 90); do { v6 = sub_62E440(v4 + 36 * v1[86]); sub_5D5B70(*v5, v6, 1); ++v4; ++v5; } while ( v4 < 0x24 ); } } //----- (005B8EC0) -------------------------------------------------------- char sub_5B8EC0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCBank"); return (char)v0; } //----- (005B8EF0) -------------------------------------------------------- char __thiscall sub_5B8EF0(void *this, int a2, int a3, int a4) { byte_BA6BD0 = 1; (*(void (**)(void))(*(_DWORD *)this + 528))(); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (005B8F10) -------------------------------------------------------- _DWORD *__thiscall sub_5B8F10(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &StorageWin::`vftable'; v1[58] = &StorageWin::`vftable'; v1[145] = 0; v1[143] = &PgWinDrop::`vftable'; v1[162] = 0; v1[146] = &DropContents::`vftable'; *((_WORD *)v1 + 322) = -1; v1[86] = 0; v1[89] = 0; v1[142] = 0; v1[144] = v1 + 146; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[164] = 0; v1[165] = 0; v1[166] = 0; v1[167] = 0; v1[87] = 0; v1[88] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DEF64: using guessed type void *StorageWin::`vftable'; // 9DEF84: using guessed type void *StorageWin::`vftable'; //----- (005B9150) -------------------------------------------------------- void __thiscall sub_5B9150(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[130] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[131] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[132] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[133] + 256))(0); v1[86] = 0; sub_5B8E50(v1); } //----- (005B91B0) -------------------------------------------------------- void __thiscall sub_5B91B0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[130] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[131] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[132] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[133] + 256))(0); v1[86] = (_DWORD *)1; sub_5B8E50(v1); } //----- (005B9210) -------------------------------------------------------- void __thiscall sub_5B9210(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[130] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[131] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[132] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[133] + 256))(0); v1[86] = (_DWORD *)2; sub_5B8E50(v1); } //----- (005B9270) -------------------------------------------------------- void __thiscall sub_5B9270(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[130] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[131] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[132] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[133] + 256))(1); v1[86] = (_DWORD *)3; sub_5B8E50(v1); } //----- (005B92D0) -------------------------------------------------------- void __thiscall sub_5B92D0(_BYTE *this) { _DWORD **v1; // esi v1 = (_DWORD **)this; sub_8F28C0(this); sub_5B9150(v1); } //----- (005B92E0) -------------------------------------------------------- char __thiscall sub_5B92E0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (005B9310) -------------------------------------------------------- char __thiscall sub_5B9310(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (005B9340) -------------------------------------------------------- void __thiscall sub_5B9340(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( !(*(unsigned __int8 (**)(void))(*this + 260))() ) { v2[86] = 0; v2[87] = 0; LABEL_3: sub_5B8E50(v2); return; } if ( a2 < 4u ) goto LABEL_3; v3 = a2 & 3; if ( v3 < 0 ) v3 = (((_BYTE)v3 - 1) | 0xFFFFFFFC) + 1; switch ( v3 ) { case 0: sub_5B9150((_DWORD **)v2); break; case 1: sub_5B91B0((_DWORD **)v2); break; case 2: sub_5B9210((_DWORD **)v2); break; case 3: sub_5B9270((_DWORD **)v2); break; default: return; } } //----- (005B93D0) -------------------------------------------------------- unsigned int __thiscall sub_5B93D0(_DWORD **this, int a2) { _DWORD *v2; // esi unsigned int result; // eax unsigned int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; result = sub_5D5470(this[a2 + 90]); v4 = result; if ( result ) { result = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)result + 12))(result); if ( result > 1 ) { LOWORD(dword_AD01E4) = dword_AD01E4 & 0x3FF | 0x1800; LOWORD(dword_AD01E4) = (dword_AD01E4 ^ (a2 + 36 * (*((_WORD *)v2 + 172) + 4 * *((_WORD *)v2 + 174)))) & 0x3FF ^ dword_AD01E4; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 12))(v4); result = sub_4A4E90(v5, v2, (_DWORD *)0x19, (_DWORD *)(v7 - 1), (int)v6, 2); } } return result; } // AD01E4: using guessed type int dword_AD01E4; //----- (005B9490) -------------------------------------------------------- void __thiscall sub_5B9490(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // eax int v4; // ebx int v5; // esi unsigned int v6; // eax const CHAR *v7; // eax __int16 v8; // cx int v9; // [esp+4h] [ebp-Ch] int v10; // [esp+8h] [ebp-8h] __int16 v11; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_5D5470(this[a2 + 90]); v9 = v3; if ( v3 ) { if ( !dword_BA6BCC ) { v4 = *(unsigned __int16 *)(v3 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) && *(_DWORD *)(*(_DWORD *)(v5 + 196) + 4 * v4) ) { v6 = sub_6859E0(&byte_ADA230, v9); if ( v6 == -1 ) { v7 = sub_40C190(-1851208242); sub_492060(v2[74], (int)v7); } else { v8 = (a2 + 36 * (*((_WORD *)v2 + 172) + 4 * *((_WORD *)v2 + 174))) & 0x3FF; LOWORD(v10) = v6 & 0x3FF | 0x2400; v11 = v8 | 0x1800; if ( (v10 & 0x3FF) != -1 ) { sub_4B7B90(v2[74], &v11, (__int16 *)&v10); sub_6BA9B0(*(unsigned __int16 *)(v9 + 8)); } } } } } } } // ACB230: using guessed type int dword_ACB230; // ADA230: using guessed type char byte_ADA230; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005B95C0) -------------------------------------------------------- void __thiscall sub_5B95C0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // ecx const CHAR *v3; // eax const CHAR *v4; // eax v1 = this; v2 = (volatile LONG *)this[142]; if ( v2 ) { sub_572750(v2, v1, (_DWORD *)0x16, 0, (int)&unk_9DE817); v3 = sub_40C190(750293376); sub_5729A0((_DWORD **)v1[142], (int)v3); v4 = sub_40C190(942424637); sub_5729D0((_DWORD **)v1[142], (int)v4); } } //----- (005B9610) -------------------------------------------------------- void __thiscall sub_5B9610(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // ecx const CHAR *v3; // eax const CHAR *v4; // eax v1 = this; v2 = (volatile LONG *)this[142]; if ( v2 ) { sub_572750(v2, v1, (_DWORD *)0x17, 0, (int)&unk_9DE823); v3 = sub_40C190(-1984524408); sub_5729A0((_DWORD **)v1[142], (int)v3); v4 = sub_40C190(-705630395); sub_5729D0((_DWORD **)v1[142], (int)v4); } } //----- (005B9660) -------------------------------------------------------- char __thiscall sub_5B9660(_DWORD *this, _DWORD *a2, int a3) { int v3; // edx _DWORD *v4; // edi int v5; // esi const CHAR *v6; // ebx unsigned int v8; // esi __int16 v9; // bx __int16 v10; // bx int v11; // eax int v12; // ecx _DWORD *v13; // eax int v14; // eax _DWORD *v15; // ecx int v16; // eax __int16 v17; // dx __int16 v18; // ax int v19; // ebx int v20; // eax int v21; // ST10_4 _DWORD *v22; // edi const CHAR *v23; // eax int v24; // eax _DWORD *v25; // eax int v26; // eax int v27; // esi int v28; // eax int v29; // [esp-4h] [ebp-24h] int v30; // [esp+Ch] [ebp-14h] int v31; // [esp+10h] [ebp-10h] int v32; // [esp+14h] [ebp-Ch] int v33; // [esp+18h] [ebp-8h] int v34; // [esp+1Ch] [ebp-4h] int v35; // [esp+28h] [ebp+8h] v3 = a2[2]; v4 = this; v31 = v3; if ( v3 == 21 ) { v5 = (int)(this + 58); v6 = sub_40A910(-1846091560); if ( v4[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v4[59] + 4))(25, v6, v4 + 58); if ( v4[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v4[59] + 20))(25, v6, v4 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(*(_DWORD *)v5 + 20))( v4 + 58, 25, v6, v4 + 58); return 0; } if ( v3 && v3 != 6 ) return 0; v8 = a2[3]; v9 = v34 & 0x3FF; if ( v3 ) v10 = v9 | 0x1800; else v10 = v9 | 0x2400; v11 = this[74]; LOWORD(v34) = v10; v12 = *(_DWORD *)(v11 + 744); v30 = v12; if ( !v12 || !*(_DWORD *)(v12 + 348) ) goto LABEL_24; if ( (v34 & 0xFC00) != 9216 ) { v15 = (_DWORD *)v4[v8 % 0x24 + 90]; LABEL_19: v16 = sub_5D5470(v15); v32 = v16; v17 = (v34 ^ v8) & 0x3FF; v10 = v17 ^ v34; LOWORD(v34) = v17 ^ v34; if ( v16 ) { if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v16 + 12))(v16) > 1 ) { LOWORD(a3) = (a3 + 36 * (*((_WORD *)v4 + 172) + 4 * *((_WORD *)v4 + 174))) & 0x3FF | 0x1800; sub_4B88F0((_DWORD *)v4[74], (__int16 *)&v34, (__int16 *)&a3, *(_DWORD *)(v30 + 348)); sub_6BA9B0(*(unsigned __int16 *)(v32 + 8)); return 1; } v10 = v34; } goto LABEL_23; } v13 = *(_DWORD **)(v11 + 716); if ( !v13 ) goto LABEL_24; v14 = sub_433AF0(v13, v8); if ( v14 ) { v15 = (_DWORD *)v14; goto LABEL_19; } LABEL_23: v3 = v31; LABEL_24: v18 = *((_WORD *)v4 + 172) + 4 * *((_WORD *)v4 + 174); LOWORD(v34) = (v34 ^ v8) & 0x3FF ^ v10; LOWORD(v33) = (a3 + 36 * v18) & 0x3FF | 0x1800; if ( v3 ) { if ( v3 == 6 ) { v28 = sub_5D5470((_DWORD *)v4[v8 % 0x24 + 90]); if ( v28 ) sub_6BA9B0(*(unsigned __int16 *)(v28 + 8)); } } else { v19 = a2[5]; if ( v19 ) { v20 = *(_DWORD *)(v19 + 112); v35 = v20; if ( v20 ) { v21 = *(_DWORD *)(v20 + 274); a3 = 0; if ( sub_74DF90(&dword_AD9E70, v21) ) { if ( sub_6869F0((char *)v19) == 1 ) { LABEL_29: v29 = -857857511; LABEL_30: v22 = (_DWORD *)v4[74]; v23 = sub_40C190(v29); sub_492060(v22, (int)v23); return 0; } } else { v24 = sub_6869F0((char *)v19); if ( !sub_74E030( (char *)&dword_AD9E70, *(_DWORD *)(v35 + 274), v24, (unsigned __int16)v34 >> 10, (unsigned __int16)v33 >> 10, &a3) ) { if ( sub_6869F0((char *)v19) == 1 ) goto LABEL_29; if ( !a3 ) { v29 = -2102363671; goto LABEL_30; } } } } v25 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v19 + 44))(v19); if ( v25 ) { v26 = *v25 & 0xFF; if ( v26 ) { if ( v26 != 255 ) { v29 = -1634432127; goto LABEL_30; } } } } if ( v8 < 0xC0 ) { v27 = dword_ADA234[v8]; if ( v27 ) sub_6BA9B0(*(unsigned __int16 *)(v27 + 8)); } } if ( !((v34 ^ v33) & 0xFC00) && !((v34 ^ v33) & 0x3FF) ) return 0; sub_4B7B90((_DWORD *)v4[74], (__int16 *)&v34, (__int16 *)&v33); return 1; } // AD9E70: using guessed type int dword_AD9E70; //----- (005B9A00) -------------------------------------------------------- void __thiscall sub_5B9A00(char *this, int a2) { char *v2; // ebx __int64 v3; // rax signed __int64 v4; // rax __int64 v5; // rax signed __int64 v6; // rax __int64 v7; // rax signed __int64 v8; // rax __int64 v9; // rax signed __int64 v10; // rax signed int v11; // edi int *v12; // eax void ***v13; // esi void (__stdcall *v14)(signed int); // edx const char *v15; // eax int v16; // [esp+Ch] [ebp-94h] int v17; // [esp+10h] [ebp-90h] int v18; // [esp+14h] [ebp-8Ch] int v19; // [esp+18h] [ebp-88h] char v20; // [esp+1Ch] [ebp-84h] v2 = this; v3 = sub_62E1E0(); v4 = sub_680E90(v3); sprintf(&v20, "%I64d", v4); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 167) + 472))(&v20); v5 = sub_62E1E0(); v6 = sub_680EB0(v5); sprintf(&v20, "%I64d", v6); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 166) + 472))(&v20); v7 = sub_62E1E0(); v8 = sub_680F00(v7); sprintf(&v20, "%I64d", v8); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 165) + 472))(&v20); v9 = sub_62E1E0(); v10 = sub_680F60(v9); sprintf(&v20, "%I64d", v10); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 164) + 472))(&v20); sub_6F3170(3, &v17); v18 = v17 - 4 * *((_DWORD *)v2 + 87) + 2; v11 = 0; v19 = (unsigned __int8)sub_62E210() - 4 * *((_DWORD *)v2 + 87); v16 = 0; v12 = &v16; if ( v19 >= 0 ) v12 = &v19; v19 = *v12; v13 = (void ***)(v2 + 504); do { (*((void (__stdcall **)(bool))*v13[8] + 64))(v11 >= v18); v14 = (void (__stdcall *)(signed int))*((_DWORD *)**v13 + 64); if ( v19 > v11 ) { v14(1); } else { v14(0); (*((void (__stdcall **)(_DWORD))*v13[8] + 64))(0); } if ( v11 < v18 ) { if ( v11 == *((_DWORD *)v2 + 86) ) { if ( v11 < 2 ) v15 = sub_40C190(1094882428); else v15 = sub_40C190(844332920); } else if ( v11 < 2 ) { v15 = sub_40C190(-453449421); } else { v15 = sub_40C190(-521536994); } } else { v15 = sub_40C190(-470466502); } sub_8F2EA0(*v13, v15); ++v11; ++v13; } while ( v11 < 4 ); } //----- (005B9C20) -------------------------------------------------------- char __thiscall sub_5B9C20(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi _DWORD *v6; // esi _DWORD *v7; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 ) return 0; v7 = (_DWORD *)sub_402BF0(this); return sub_5B9660(v7, v6, v4[112]); } //----- (005B9C60) -------------------------------------------------------- _DWORD *__thiscall sub_5B9C60(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // edi int v5; // edx v2 = this; if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) return (_DWORD *)sub_5B93D0(this, a2); result = (_DWORD *)sub_5D5470(this[a2 + 90]); v4 = result; if ( result ) { v5 = 9 * (v2[86] + 4 * v2[87]); v2[150] = 0; v2[148] = 6; v2[152] = 0; v2[151] = result; v2[149] = a2 + 4 * v5; v2[162] = (*(int (__thiscall **)(_DWORD *))(*result + 12))(result); v2[145] = v2; dword_BA6BCC = (int)(v2 + 143); result = sub_6BA9B0(*((unsigned __int16 *)v4 + 4)); } return result; } // ACDC84: using guessed type int dword_ACDC84; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005B9D10) -------------------------------------------------------- void __thiscall sub_5B9D10(int this, int a2, int *a3) { int v3; // esi char v4; // di int v5; // eax int v6; // ecx v3 = this; switch ( a2 ) { case 10: sub_5B9C60((_DWORD **)this, (int)a3); return; case 11: sub_5B9490((_DWORD **)this, (int)a3); return; case 12: case 13: case 24: return; case 14: case 15: sub_4A6E40(*(_DWORD **)(this + 296)); return; case 16: if ( *(_DWORD *)(this + 348) ) { v4 = 4 * *(_BYTE *)(this + 348); if ( !sub_62E580(v4) ) goto LABEL_21; this = v3; } sub_5B9150((_DWORD **)this); return; case 17: if ( *(_DWORD *)(this + 348) ) { v4 = 4 * *(_BYTE *)(this + 348) + 1; if ( !sub_62E580(v4) ) goto LABEL_21; this = v3; } sub_5B91B0((_DWORD **)this); return; case 18: if ( *(_DWORD *)(this + 348) ) { v4 = 4 * *(_BYTE *)(this + 348) + 2; if ( !sub_62E580(v4) ) goto LABEL_21; this = v3; } sub_5B9210((_DWORD **)this); return; case 19: if ( !*(_DWORD *)(this + 348) ) goto LABEL_20; v4 = 4 * *(_BYTE *)(this + 348) + 3; if ( sub_62E580(v4) ) { this = v3; LABEL_20: sub_5B9270((_DWORD **)this); } else { LABEL_21: sub_4B7E40(*(_DWORD **)(v3 + 296), v4); } break; case 20: sub_5B95C0((_DWORD *)this); break; case 21: sub_5B9610((_DWORD *)this); break; case 22: sub_5B8E20(*a3, a3[1]); break; case 23: sub_5B8DF0(*a3, a3[1]); break; case 25: if ( a3 ) { v5 = sub_5D5470(*(_DWORD **)(this + 4 * ((dword_AD01E4 & 0x3FF) % 36) + 360)); if ( v5 ) { *(_DWORD *)(v3 + 592) = 6; *(_DWORD *)(v3 + 600) = 0; v6 = dword_AD01E4 & 0x3FF; *(_DWORD *)(v3 + 604) = v5; *(_DWORD *)(v3 + 596) = v6; *(_DWORD *)(v3 + 608) = 0; (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 12))(v5); *(_DWORD *)(v3 + 648) = a3; *(_DWORD *)(v3 + 580) = v3; dword_BA6BCC = v3 + 572; } } break; case 26: sub_5B8EC0(); break; } } // AD01E4: using guessed type int dword_AD01E4; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005B9F60) -------------------------------------------------------- int __cdecl sub_5B9F60(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x144u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8FE000(v5); *(_DWORD *)v6 = &StorageTabButWin::`vftable'; *(_DWORD *)(v6 + 232) = &StorageTabButWin::`vftable'; *(_BYTE *)(v6 + 254) = 1; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 560))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9DEA80: using guessed type void *StorageTabButWin::`vftable'; // 9DEA9C: using guessed type void *StorageTabButWin::`vftable'; //----- (005BA0C0) -------------------------------------------------------- int __cdecl sub_5BA0C0(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1C4u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_5D6D00((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = &StorageInvWin::`vftable'; *(_DWORD *)(v5 + 232) = &StorageInvWin::`vftable'; *(_DWORD *)(v5 + 448) = -1; sub_5D5B70((_WORD *)v5, 0, 1); } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9DECD4: using guessed type void *StorageInvWin::`vftable'; // 9DECF4: using guessed type void *StorageInvWin::`vftable'; //----- (005BA220) -------------------------------------------------------- volatile LONG *__cdecl sub_5BA220(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x2A0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5B8F10(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005BA350) -------------------------------------------------------- char __thiscall sub_5BA350(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // eax volatile LONG v17; // edx const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax int *v22; // ecx volatile LONG **v23; // eax int v24; // eax volatile LONG *v25; // edx volatile LONG **v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax int v33; // eax volatile LONG *v34; // edx volatile LONG **v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // eax volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG **v41; // eax int v42; // eax volatile LONG *v43; // edx volatile LONG **v44; // eax volatile LONG *v45; // eax volatile LONG **v46; // eax volatile LONG *v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax volatile LONG **v50; // eax int v51; // eax volatile LONG *v52; // edx volatile LONG **v53; // eax volatile LONG *v54; // eax volatile LONG **v55; // eax volatile LONG *v56; // eax volatile LONG **v57; // eax volatile LONG *v58; // eax volatile LONG *v59; // STB8_4 int v60; // STB4_4 int v61; // STB0_4 int v62; // eax volatile LONG *v63; // eax volatile LONG v64; // edx const CHAR *v65; // eax volatile LONG *v66; // STB8_4 int v67; // STB4_4 int v68; // STB0_4 int v69; // eax volatile LONG *v70; // eax volatile LONG v71; // edx const CHAR *v72; // eax volatile LONG **v73; // eax volatile LONG *v74; // STB8_4 int v75; // STB4_4 int v76; // STB0_4 int v77; // eax volatile LONG *v78; // eax volatile LONG v79; // edx volatile LONG *v80; // STC0_4 int v81; // edx volatile LONG **v82; // eax volatile LONG *v83; // STB8_4 int v84; // STB4_4 int v85; // STB0_4 int v86; // eax volatile LONG *v87; // eax volatile LONG v88; // edx volatile LONG *v89; // STC0_4 int v90; // edx volatile LONG **v91; // eax volatile LONG *v92; // STB8_4 int v93; // STB4_4 int v94; // STB0_4 int v95; // eax volatile LONG *v96; // eax volatile LONG v97; // edx volatile LONG *v98; // STC0_4 int v99; // edx volatile LONG **v100; // eax volatile LONG *v101; // STB8_4 int v102; // STB4_4 int v103; // STB0_4 int v104; // eax volatile LONG *v105; // eax volatile LONG v106; // edx volatile LONG *v107; // STC0_4 int v108; // edx void (__thiscall ***v109)(_DWORD, signed int); // esi int v110; // [esp+D4h] [ebp-5Ch] int v111; // [esp+D8h] [ebp-58h] int v112; // [esp+DCh] [ebp-54h] void (__thiscall **v113)(volatile LONG **, const CHAR *); // [esp+E0h] [ebp-50h] int v114; // [esp+E4h] [ebp-4Ch] volatile LONG *v115; // [esp+E8h] [ebp-48h] int v116; // [esp+ECh] [ebp-44h] int v117; // [esp+F0h] [ebp-40h] int v118; // [esp+F4h] [ebp-3Ch] volatile LONG **v119; // [esp+F8h] [ebp-38h] char v120; // [esp+FCh] [ebp-34h] int v121; // [esp+12Ch] [ebp-4h] v2 = (int)this; v112 = a2; v116 = 0; v121 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v115 = v3; if ( !v3 ) goto LABEL_27; v114 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\NPCBank.nif"); sub_8F66B0(v6, (int)&v116, v114); if ( !v116 ) return 0; v7 = sub_8FB140(v116, (int)"Frame", (int)&v118, (int)&v117, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"NPCBankWin", 0) ) { LABEL_27: v4 = (void (__thiscall ***)(_DWORD, signed int))v116; v121 = -1; if ( v116 && !InterlockedDecrement((volatile LONG *)(v116 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v118; v9 = v117; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v116, (int)"Theme", (int)&v118, (int)&v117, v10); else v11 = sub_8FB140(v116, (int)"Theme", (int)&v118, (int)&v117, 0); sub_8F3EB0(v118 - v8, v117 - v9, (int)v11, v2, 0, 0); v119 = sub_8FB140(v116, (int)"ClsNor", (int)&v118, (int)&v117, v115); sub_8FB650(v119, v116, (int)"ClsClick"); sub_8FB650(v119, v116, (int)"ClsOver"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 15, 0, 0); v114 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v116 + 72))("HelpLinkNor") ) { v119 = sub_8FB140(v116, (int)"HelpLinkNor", (int)&v118, (int)&v117, (volatile LONG *)v114); sub_8FB650(v119, v116, (int)"HelpLinkClick"); sub_8FB650(v119, v116, (int)"HelpLinkOver"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 26, 0, 0); } v12 = sub_8FB140(v116, (int)"Panel01", (int)&v118, (int)&v117, v115); v13 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v116, (int)"Panel02", (int)&v118, (int)&v117, v115); sub_8F3EB0(v118 - v8, v117 - v9, (int)v14, v2, 0, 0); if ( sub_8F71E0(v116, (int)"WinTitle", &v118, &v117, &v111, &v110) ) { v15 = sub_421050(0); v16 = sub_8F4A20(v118 - v8, v117 - v9 + 2, v111, v110, v15, v2, 0, 0); v17 = *v16; v119 = (volatile LONG **)v16; (*(void (__thiscall **)(volatile LONG *, signed int))(v17 + 488))(v16, 5); (*((void (__stdcall **)(int *))*v119 + 117))(&dword_AA8D98); v114 = (int)(*v119 + 118); v18 = sub_40C190(931964289); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v114)(v119, v18); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v19 = sub_8FB140(v116, (int)"IconSlot", (int)&v118, (int)&v117, v115); sub_8F3EB0(v118 - v8, v117 - v9, (int)v19, v2, 0, 0); v114 = 0; v119 = (volatile LONG **)(v2 + 360); do { v113 = (void (__thiscall **)(volatile LONG **, const CHAR *))(v114 + 1); sprintf(&v120, "IconSlot%03d", v114 + 1); v20 = sub_8FB140(v116, (int)&v120, (int)&v118, (int)&v117, v115); sub_8F3EB0(v118 - v8, v117 - v9, (int)v20, v2, 0, 0); v21 = (volatile LONG *)sub_5BA0C0(v118 - v8 + 1, v117 - v9 + 1, v114, v2); *v119 = v21; sub_5D5B70(v21, 0, 1); (*(void (__stdcall **)(signed int))(**v119 + 516))(10); (*(void (__stdcall **)(signed int))(**v119 + 560))(11); v22 = (int *)v119; *((_DWORD *)*v119 + 68) = dword_ACEC34; sub_5D3170(*v22, 1); ++v119; v114 = (int)v113; } while ( (signed int)v113 < 36 ); v23 = sub_8FB140(v116, (int)"Tab01_Off", (int)&v118, (int)&v117, v115); v24 = sub_5B9F60(v118 - v8, v117 - v9, (int)v23, v2, 16); v25 = v115; *(_DWORD *)(v2 + 504) = v24; *(_DWORD *)(v24 + 272) = dword_AD01E8; v26 = sub_8FB140(v116, (int)"Tab01_Dis", (int)&v118, (int)&v117, v25); v27 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v26, v2, 0, 0); *(_DWORD *)(v2 + 536) = v27; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 536) + 256))(0); v28 = sub_8FB140(v116, (int)"Tab01_On", (int)&v118, (int)&v117, v115); v29 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v28, v2, 0, 0); *(_DWORD *)(v2 + 520) = v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 520) + 256))(0); v30 = sub_8FB140(v116, (int)"Num01", (int)&v118, (int)&v117, 0); v31 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v32 = sub_8FB140(v116, (int)"Tab02_Off", (int)&v118, (int)&v117, v115); v33 = sub_5B9F60(v118 - v8, v117 - v9, (int)v32, v2, 17); v34 = v115; *(_DWORD *)(v2 + 508) = v33; *(_DWORD *)(v33 + 272) = dword_AD01E8; v35 = sub_8FB140(v116, (int)"Tab02_Dis", (int)&v118, (int)&v117, v34); v36 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v35, v2, 0, 0); *(_DWORD *)(v2 + 540) = v36; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 540) + 256))(0); v37 = sub_8FB140(v116, (int)"Tab02_On", (int)&v118, (int)&v117, v115); v38 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v37, v2, 0, 0); *(_DWORD *)(v2 + 524) = v38; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 524) + 256))(0); v39 = sub_8FB140(v116, (int)"Num02", (int)&v118, (int)&v117, 0); v40 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v39, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); v41 = sub_8FB140(v116, (int)"Tab03_Off", (int)&v118, (int)&v117, v115); v42 = sub_5B9F60(v118 - v8, v117 - v9, (int)v41, v2, 18); v43 = v115; *(_DWORD *)(v2 + 512) = v42; *(_DWORD *)(v42 + 272) = dword_AD01E8; v44 = sub_8FB140(v116, (int)"Tab03_Dis", (int)&v118, (int)&v117, v43); v45 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v44, v2, 0, 0); *(_DWORD *)(v2 + 544) = v45; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 544) + 256))(0); v46 = sub_8FB140(v116, (int)"Tab03_On", (int)&v118, (int)&v117, v115); v47 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v46, v2, 0, 0); *(_DWORD *)(v2 + 528) = v47; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 528) + 256))(0); v48 = sub_8FB140(v116, (int)"Num03", (int)&v118, (int)&v117, 0); v49 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v48, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v50 = sub_8FB140(v116, (int)"Tab04_Off", (int)&v118, (int)&v117, v115); v51 = sub_5B9F60(v118 - v8, v117 - v9, (int)v50, v2, 19); v52 = v115; *(_DWORD *)(v2 + 516) = v51; *(_DWORD *)(v51 + 272) = dword_AD01E8; v53 = sub_8FB140(v116, (int)"Tab04_Dis", (int)&v118, (int)&v117, v52); v54 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v53, v2, 0, 0); *(_DWORD *)(v2 + 548) = v54; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 548) + 256))(0); v55 = sub_8FB140(v116, (int)"Tab04_On", (int)&v118, (int)&v117, v115); v56 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v55, v2, 0, 0); *(_DWORD *)(v2 + 532) = v56; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v56 + 240))(v56, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 532) + 256))(0); v57 = sub_8FB140(v116, (int)"Num04", (int)&v118, (int)&v117, 0); v58 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v57, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v58 + 240))(v58, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 520) + 256))(1); v119 = sub_8FB140(v116, (int)"DrawNor", (int)&v118, (int)&v117, v115); sub_8FB650(v119, v116, (int)"DrawClick"); sub_8FB650(v119, v116, (int)"DrawOver"); v59 = sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 21, 0, 0); v119 = (volatile LONG **)v59; v60 = sub_421050(0); v61 = (*((int (**)(void))*v119 + 37))(); v62 = (*((int (**)(void))*v119 + 36))(); v63 = sub_8F4A20(0, 1, v62, v61, v60, (int)v59, 0, 0); v64 = *v63; v119 = (volatile LONG **)v63; (*(void (__thiscall **)(volatile LONG *, signed int))(v64 + 488))(v63, 5); v113 = (void (__thiscall **)(volatile LONG **, const CHAR *))(*v119 + 118); v65 = sub_40C190(-1984524408); (*v113)(v119, v65); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v119 = sub_8FB140(v116, (int)"PayNor", (int)&v118, (int)&v117, v115); sub_8FB650(v119, v116, (int)"PayClick"); sub_8FB650(v119, v116, (int)"PayOver"); v66 = sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 20, 0, 0); v119 = (volatile LONG **)v66; v67 = sub_421050(0); v68 = (*((int (**)(void))*v119 + 37))(); v69 = (*((int (**)(void))*v119 + 36))(); v70 = sub_8F4A20(0, 1, v69, v68, v67, (int)v66, 0, 0); v71 = *v70; v119 = (volatile LONG **)v70; (*(void (__thiscall **)(volatile LONG *, signed int))(v71 + 488))(v70, 5); v113 = (void (__thiscall **)(volatile LONG **, const CHAR *))(*v119 + 118); v72 = sub_40C190(750293376); (*v113)(v119, v72); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v73 = sub_8FB140(v116, (int)"GemInput", (int)&v118, (int)&v117, v115); v74 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v73, v2, 0, 0); v119 = (volatile LONG **)v74; v75 = sub_421050(0); v76 = (*((int (**)(void))*v119 + 37))(); v77 = (*((int (**)(void))*v119 + 36))(); v78 = sub_8F4A20(0, 1, v77, v76, v75, (int)v74, 0, 0); v79 = *v78; v119 = (volatile LONG **)v78; (*(void (__thiscall **)(volatile LONG *, signed int))(v79 + 488))(v78, 6); (*((void (__stdcall **)(void *))*v119 + 118))(&unk_9DE80D); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v80 = v115; v81 = v116; *(_DWORD *)(v2 + 668) = v119; v119 = sub_8FB140(v81, (int)"GemBtn", (int)&v118, (int)&v117, v80); sub_8FB650(v119, v116, (int)"GemBtn"); sub_8FB650(v119, v116, (int)"GemBtn"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 0, 0, 0); v82 = sub_8FB140(v116, (int)"GoldInput", (int)&v118, (int)&v117, v115); v83 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v82, v2, 0, 0); v119 = (volatile LONG **)v83; v84 = sub_421050(0); v85 = (*((int (**)(void))*v119 + 37))(); v86 = (*((int (**)(void))*v119 + 36))(); v87 = sub_8F4A20(0, 1, v86, v85, v84, (int)v83, 0, 0); v88 = *v87; v119 = (volatile LONG **)v87; (*(void (__thiscall **)(volatile LONG *, signed int))(v88 + 488))(v87, 6); (*((void (__stdcall **)(void *))*v119 + 118))(&unk_9DE80E); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v89 = v115; v90 = v116; *(_DWORD *)(v2 + 664) = v119; v119 = sub_8FB140(v90, (int)"GoldBtn", (int)&v118, (int)&v117, v89); sub_8FB650(v119, v116, (int)"GoldBtn"); sub_8FB650(v119, v116, (int)"GoldBtn"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 0, 0, 0); v91 = sub_8FB140(v116, (int)"SilverInput", (int)&v118, (int)&v117, v115); v92 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v91, v2, 0, 0); v119 = (volatile LONG **)v92; v93 = sub_421050(0); v94 = (*((int (**)(void))*v119 + 37))(); v95 = (*((int (**)(void))*v119 + 36))(); v96 = sub_8F4A20(0, 1, v95, v94, v93, (int)v92, 0, 0); v97 = *v96; v119 = (volatile LONG **)v96; (*(void (__thiscall **)(volatile LONG *, signed int))(v97 + 488))(v96, 6); (*((void (__stdcall **)(void *))*v119 + 118))(&unk_9DE80F); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v98 = v115; v99 = v116; *(_DWORD *)(v2 + 660) = v119; v119 = sub_8FB140(v99, (int)"SilverBtn", (int)&v118, (int)&v117, v98); sub_8FB650(v119, v116, (int)"SilverBtn"); sub_8FB650(v119, v116, (int)"SilverBtn"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 0, 0, 0); v100 = sub_8FB140(v116, (int)"CopperInput", (int)&v118, (int)&v117, v115); v101 = sub_8F3EB0(v118 - v8, v117 - v9, (int)v100, v2, 0, 0); v119 = (volatile LONG **)v101; v102 = sub_421050(0); v103 = (*((int (**)(void))*v119 + 37))(); v104 = (*((int (**)(void))*v119 + 36))(); v105 = sub_8F4A20(0, 1, v104, v103, v102, (int)v101, 0, 0); v106 = *v105; v119 = (volatile LONG **)v105; (*(void (__thiscall **)(volatile LONG *, signed int))(v106 + 488))(v105, 6); (*((void (__stdcall **)(void *))*v119 + 118))(&unk_9DE816); (*((void (__stdcall **)(_DWORD))*v119 + 60))(0); v107 = v115; v108 = v116; *(_DWORD *)(v2 + 656) = v119; v119 = sub_8FB140(v108, (int)"CopperBtn", (int)&v118, (int)&v117, v107); sub_8FB650(v119, v116, (int)"CopperBtn"); sub_8FB650(v119, v116, (int)"CopperBtn"); sub_8FE0F0(v118 - v8, v117 - v9, (int)v119, v2, 0, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); *(_DWORD *)(v2 + 568) = sub_573FD0(v112); v121 = -1; if ( v116 ) { v109 = (void (__thiscall ***)(_DWORD, signed int))v116; if ( !InterlockedDecrement((volatile LONG *)(v116 + 4)) ) { if ( v109 ) (**v109)(v109, 1); } } result = 1; } else { v121 = -1; sub_410C00(&v116); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (005BB300) -------------------------------------------------------- void *__thiscall sub_5BB300(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &StorageTabButWin::`vftable'; *((_DWORD *)this + 58) = &StorageTabButWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DEA80: using guessed type void *StorageTabButWin::`vftable'; // 9DEA9C: using guessed type void *StorageTabButWin::`vftable'; //----- (005BB340) -------------------------------------------------------- _DWORD *__thiscall sub_5BB340(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &StorageInvWin::`vftable'; *((_DWORD *)this + 58) = &StorageInvWin::`vftable'; sub_62E2B0(); sub_5D5650(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DECD4: using guessed type void *StorageInvWin::`vftable'; // 9DECF4: using guessed type void *StorageInvWin::`vftable'; //----- (005BB3C0) -------------------------------------------------------- _DWORD *__thiscall sub_5BB3C0(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; *(_DWORD *)this = &StorageWin::`vftable'; *((_DWORD *)this + 58) = &StorageWin::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 142); if ( v3 ) sub_8F9E00(&unk_BA6B10, v3); v2[146] = &DropContents::`vftable'; v2[143] = &PgWinDrop::`vftable'; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9DEF64: using guessed type void *StorageWin::`vftable'; // 9DEF84: using guessed type void *StorageWin::`vftable'; //----- (005BB460) -------------------------------------------------------- void __userpurge sub_5BB460(int a1@, int a2@, int a3@, int a4, int a5, int a6) { int v6; // esi signed int v7; // ecx _DWORD *v8; // ecx int v9; // [esp-4h] [ebp-8h] v6 = a1; if ( a4 == 15 ) { v7 = 0; if ( *(_DWORD *)a5 == 25 ) { v7 = 4; } else if ( *(_DWORD *)a5 == 26 ) { v7 = 256; } v9 = v7; v8 = (_DWORD *)(v6 - 232); if ( *(_BYTE *)(a5 + 4) ) sub_600F50(v8, v9); else sub_600F70(v8, v9); sub_6BC110(*(_DWORD *)(*(_DWORD *)(v6 + 140) + 512)); } else { sub_603BA0(a1, a2, a3, a4, (_DWORD *)a5, a6); } } //----- (005BB4D0) -------------------------------------------------------- char sub_5BB4D0() { return 0; } //----- (005BB4E0) -------------------------------------------------------- char __thiscall sub_5BB4E0(void *this, int a2) { int v2; // esi float *v3; // ebx int v4; // edi char *v5; // eax int v6; // edi float *v7; // eax int v8; // edi _DWORD *v9; // eax _DWORD *v10; // eax int v11; // edx _DWORD *v12; // eax int v13; // ecx int v14; // eax float *v15; // eax float *v16; // eax int v17; // edi _DWORD *v18; // eax int v19; // ecx _DWORD *v20; // eax int v21; // edx _DWORD *v22; // eax int v23; // ecx int v24; // eax volatile LONG **v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi char result; // al int v28; // ebx void (__thiscall ***v29)(_DWORD, signed int); // esi int v30; // edx int v31; // eax volatile LONG *v32; // eax int v33; // ST30_4 int v34; // ecx int v35; // eax int v36; // eax int v37; // ecx _DWORD *v38; // edi int v39; // ebx int v40; // eax _DWORD *v41; // edi int v42; // ebx int v43; // eax int v44; // ecx int v45; // edi int v46; // eax int v47; // ST48_4 void *v48; // ST44_4 int v49; // ST28_4 int v50; // ST1C_4 int v51; // eax volatile LONG *v52; // eax int v53; // edi int v54; // eax int v55; // eax int v56; // edi int v57; // ebx volatile LONG *v58; // eax int v59; // ST30_4 const char *v60; // eax int v61; // ST24_4 int v62; // eax int v63; // eax int v64; // edi int v65; // ebx volatile LONG *v66; // eax int v67; // ST30_4 volatile LONG *v68; // eax int v69; // ST30_4 volatile LONG *v70; // eax int v71; // ST30_4 const char *v72; // eax int v73; // eax volatile LONG *v74; // eax const CHAR *v75; // eax int v76; // eax const CHAR *v77; // eax int v78; // eax int v79; // [esp+4Ch] [ebp-28h] int v80; // [esp+50h] [ebp-24h] int v81; // [esp+54h] [ebp-20h] float *v82; // [esp+58h] [ebp-1Ch] int v83; // [esp+5Ch] [ebp-18h] float *v84; // [esp+60h] [ebp-14h] int v85; // [esp+64h] [ebp-10h] int v86; // [esp+70h] [ebp-4h] int v87; // [esp+7Ch] [ebp+8h] volatile LONG **v88; // [esp+7Ch] [ebp+8h] volatile LONG **v89; // [esp+7Ch] [ebp+8h] volatile LONG **v90; // [esp+7Ch] [ebp+8h] volatile LONG **v91; // [esp+7Ch] [ebp+8h] volatile LONG **v92; // [esp+7Ch] [ebp+8h] v2 = (int)this; v3 = 0; v85 = 0; v4 = dword_BA6BA0; v86 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\SystemMessage.nif"); sub_8F66B0(v5, (int)&v85, v4); if ( !v85 ) return 0; *(_DWORD *)(v2 + 380) = 0; *(_DWORD *)(v2 + 428) = 0; v6 = *(_DWORD *)(v2 + 448); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v2 + 448) = 0; } *(_DWORD *)(v2 + 432) = 0; *(_DWORD *)(v2 + 436) = 0; *(_DWORD *)(v2 + 464) = 0; *(_DWORD *)(v2 + 416) = 0; v7 = (float *)operator new(0x60u); LOBYTE(v86) = 1; if ( v7 ) v3 = sub_85EBC0(v7); v8 = *(_DWORD *)(v2 + 440); LOBYTE(v86) = 0; if ( (float *)v8 != v3 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v2 + 440) = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); } v9 = *(_DWORD **)(v2 + 440); v9[8] = dword_ABD4FC; v9[9] = dword_ABD500; v9[10] = dword_ABD504; ++v9[22]; v10 = *(_DWORD **)(v2 + 440); v10[11] = dword_ABD4FC; v10[12] = dword_ABD500; v11 = dword_ABD504; ++v10[22]; v10[13] = v11; v12 = *(_DWORD **)(v2 + 440); v12[17] = dword_ABD4FC; v12[18] = dword_ABD500; v13 = dword_ABD504; ++v12[22]; v12[19] = v13; v14 = *(_DWORD *)(v2 + 440); ++*(_DWORD *)(v14 + 88); *(float *)(v14 + 84) = 1.0; v15 = (float *)operator new(0x60u); LOBYTE(v86) = 2; if ( v15 ) { v16 = sub_85EBC0(v15); v82 = v16; } else { v82 = 0; v16 = 0; } v17 = *(_DWORD *)(v2 + 444); LOBYTE(v86) = 0; if ( (float *)v17 != v16 ) { if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v16 = v82; } *(_DWORD *)(v2 + 444) = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)v16 + 1); } v18 = *(_DWORD **)(v2 + 444); v18[8] = dword_ABD4FC; v18[9] = dword_ABD500; v19 = dword_ABD504; ++v18[22]; v18[10] = v19; v20 = *(_DWORD **)(v2 + 444); v20[11] = dword_ABD4FC; v20[12] = dword_ABD500; v21 = dword_ABD504; ++v20[22]; v20[13] = v21; v22 = *(_DWORD **)(v2 + 444); v22[17] = dword_ABD4FC; v22[18] = dword_ABD500; v23 = dword_ABD504; ++v22[22]; v22[19] = v23; v24 = *(_DWORD *)(v2 + 444); ++*(_DWORD *)(v24 + 88); *(float *)(v24 + 84) = 1.0; v25 = sub_8FB140(v85, (int)"Frame", (int)&v83, (int)&v84, 0); if ( !sub_8F1440((volatile LONG **)v2, v83, (int)v84, (int)v25, 0, a2, (int)"SysMsgDisplayWin", 0) ) { v26 = (void (__thiscall ***)(_DWORD, signed int))v85; v86 = -1; if ( v85 && !InterlockedDecrement((volatile LONG *)(v85 + 4)) ) { if ( v26 ) (**v26)(v26, 1); } return 0; } sub_403700((_DWORD *)v2, *(_DWORD *)(v2 + 440)); v28 = v83; v82 = v84; v79 = v83; if ( sub_8F71E0(v85, (int)"ChaBox", &v83, &v84, &v80, &v81) ) { v30 = v81; *(_DWORD *)(v2 + 488) = v80; *(_DWORD *)(v2 + 492) = v30; v31 = sub_43D0D0(0xBu); v32 = sub_45C5B0(v31, 7, 7, v83 - v28, (char *)v84 - (char *)v82, v2, a2); v33 = v81; v34 = v80; *(_DWORD *)(v2 + 376) = v32; (*(void (__thiscall **)(volatile LONG *, int, int))(*v32 + 540))(v32, v34, v33); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 376) + 364) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 376) + 256))(1); v35 = sub_421050(1); if ( v35 ) { v36 = *(_DWORD *)(v35 + 224); v37 = *(_DWORD *)(v2 + 376); *(_DWORD *)(v37 + 400) = 4 * v36 + 8; *(_DWORD *)(v37 + 404) = 40 * v36 + 88; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v38 = *(_DWORD **)(v2 + 376); v39 = (*(int (__thiscall **)(_DWORD))(*v38 + 148))(*(_DWORD *)(v2 + 376)); v40 = v38[88]; v41 = *(_DWORD **)(v2 + 376); v42 = v39 - 2 * v40; v43 = (*(int (__thiscall **)(_DWORD))(*v41 + 144))(*(_DWORD *)(v2 + 376)); v44 = v41[89]; v45 = *(_DWORD *)(v2 + 376); v87 = v43 - 2 * v44; v46 = *(_DWORD *)(v2 + 376); v47 = *(_DWORD *)(v46 + 352); v48 = *(void **)(v46 + 356); v49 = sub_421050(1); v50 = v47 + (*(int (__thiscall **)(int))(*(_DWORD *)v45 + 168))(v45); v51 = (*(int (__thiscall **)(int))(*(_DWORD *)v45 + 164))(v45); v52 = sub_5FFAD0((int)v48 + v51, v50, v87, v42, v49, 0, v2); *(_DWORD *)(v2 + 372) = v52; sub_5FBFD0(v52, 100); *(_DWORD *)(*(_DWORD *)(v2 + 372) + 320) = 100; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); sub_601A00((_BYTE **)v2, 0); v53 = (*(int (**)(void))(**(_DWORD **)(v2 + 376) + 144))(); v54 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v55 = sub_4635E0(v54 - v53, 0, 0, 0, v2); *(_DWORD *)(v2 + 480) = v55; v56 = v79 + (*(int (__thiscall **)(int))(*(_DWORD *)v55 + 164))(v55); v57 = (int)v82 + (*(int (**)(void))(**(_DWORD **)(v2 + 480) + 168))(); v88 = sub_8FB140(v85, (int)"UnlockNor", (int)&v83, (int)&v84, 0); sub_8FB650(v88, v85, (int)"lockNor"); v58 = sub_465940(v83 - v56, (int)v84 - v57, (int)v88, *(_DWORD *)(v2 + 480), 19, 0); v59 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 600) = v58; sub_403700(v58, v59); *(_DWORD *)(*(_DWORD *)(v2 + 600) + 272) = dword_AD01E8; v60 = sub_40A910(282576840); sub_8F2EA0(*(void ***)(v2 + 600), v60); v61 = (*(int (**)(void))(**(_DWORD **)(v2 + 376) + 148))(); v62 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v63 = sub_4635E0(v62, v61, 0, 0, v2); *(_DWORD *)(v2 + 472) = v63; v64 = v79 + (*(int (__thiscall **)(int))(*(_DWORD *)v63 + 164))(v63); v65 = (int)v82 + (*(int (**)(void))(**(_DWORD **)(v2 + 472) + 168))(); v89 = sub_8FB140(v85, (int)"PreUpNor", (int)&v83, (int)&v84, 0); sub_8FB650(v89, v85, (int)"PreUpOver"); sub_8FB650(v89, v85, (int)"PreUpClick"); v66 = sub_8FE0F0(v83 - v64, (int)v84 - v65, (int)v89, *(_DWORD *)(v2 + 472), 0, 0, 0); v67 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 396) = v66; sub_403700(v66, v67); v90 = sub_8FB140(v85, (int)"NextDownNor", (int)&v83, (int)&v84, 0); sub_8FB650(v90, v85, (int)"NextDownOver"); sub_8FB650(v90, v85, (int)"NextDownClick"); v68 = sub_8FE0F0(v83 - v64, (int)v84 - v65, (int)v90, *(_DWORD *)(v2 + 472), 1, 0, 0); v69 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 384) = v68; sub_403700(v68, v69); v91 = sub_8FB140(v85, (int)"DownNor", (int)&v83, (int)&v84, 0); sub_8FB650(v91, v85, (int)"DownOver"); sub_8FB650(v91, v85, (int)"DownClick"); v70 = sub_8FE0F0(v83 - v64, (int)v84 - v65, (int)v91, *(_DWORD *)(v2 + 472), 2, 0, 0); v71 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 408) = v70; sub_403700(v70, v71); v92 = sub_8FB140(v85, (int)"FillterNor", (int)&v83, (int)&v84, 0); sub_8FB650(v92, v85, (int)"FillterOver"); sub_8FB650(v92, v85, (int)"FillterClick"); *(_DWORD *)(v2 + 428) = sub_8FE0F0(v83 - v64, (int)v84 - v65, (int)v92, *(_DWORD *)(v2 + 472), 8, 0, 0); v72 = sub_40C190(-669852606); sub_8F2EA0(*(void ***)(v2 + 428), v72); *(_DWORD *)(*(_DWORD *)(v2 + 428) + 272) = dword_AD01E8; v73 = sub_43D0D0(1u); v74 = sub_58E5D0(v73, 4, 4, 0); sub_56FF80((_DWORD *)(v2 + 452), (int)v74); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 452) + 232))(*(_DWORD *)(v2 + 452) + 232, v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 452)); v75 = sub_40C190(-167366604); v76 = sub_58E450((int)v75, 0, 0, 0, 0, 0); *(_DWORD *)(v76 + 332) = 25; sub_58E080(*(_DWORD **)(v2 + 452), v64, v76); v77 = sub_40C190(-167309270); v78 = sub_58E450((int)v77, 0, 0, 0, 0, 0); *(_DWORD *)(v78 + 332) = 26; sub_58E080(*(_DWORD **)(v2 + 452), v64, v78); sub_58D930(*(_DWORD **)(v2 + 452), 0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 452) + 256))(*(_DWORD *)(v2 + 452), 0); sub_49F5F0((void *)v2, xRight, dword_AC2F78, 1.0, 0.80000001); v86 = -1; sub_410C00(&v85); result = 1; } else { v86 = -1; sub_410C00(&v85); result = 0; } } else { v29 = (void (__thiscall ***)(_DWORD, signed int))v85; v86 = -1; if ( v85 && !InterlockedDecrement((volatile LONG *)(v85 + 4)) && v29 ) (**v29)(v29, 1); result = 0; } return result; } // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005BBE90) -------------------------------------------------------- int __cdecl sub_5BBE90(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x25Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_601670((float *)v1); *(_DWORD *)v2 = &SysMsgDisplayWin::`vftable'; *(_DWORD *)(v2 + 232) = &SysMsgDisplayWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9DF290: using guessed type void *SysMsgDisplayWin::`vftable'; // 9DF2AC: using guessed type void *SysMsgDisplayWin::`vftable'; //----- (005BBFD0) -------------------------------------------------------- int __thiscall sub_5BBFD0(_DWORD *this) { return (*(int (**)(void))(*this + 144))() - 2 * this[89]; } //----- (005BBFF0) -------------------------------------------------------- int __thiscall sub_5BBFF0(_DWORD *this) { return (*(int (**)(void))(*this + 148))() - 2 * this[88]; } //----- (005BC0E0) -------------------------------------------------------- char sub_5BC0E0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "SystemWin"); return (char)v0; } //----- (005BC110) -------------------------------------------------------- void __userpurge sub_5BC110(_DWORD *a1@, int a2@, int a3@, int a4, int a5) { _DWORD *v5; // ecx _DWORD *v6; // ecx _DWORD *v7; // ecx switch ( a4 ) { case 1: sub_4A50F0((_DWORD *)a1[74]); break; case 2: sub_4A55E0(a1[74], a2, a3); break; case 3: sub_4A5650(a1[74], a2, a3); break; case 4: sub_4A56C0(a1[74], a3); break; case 5: sub_4A5730((_DWORD **)a1[74]); break; case 6: v5 = (_DWORD *)a1[74]; if ( v5 ) sub_8EEE70(v5, 25, 0, 0); break; case 7: v6 = (_DWORD *)a1[74]; if ( v6 ) sub_8EEE70(v6, 24, 0, 0); break; case 8: v7 = (_DWORD *)a1[74]; if ( v7 ) sub_8EEE70(v7, 26, 0, 0); break; case 9: sub_8F86A0(&unk_BA6B10, a1); break; case 10: sub_5BC0E0(); break; default: return; } } //----- (005BC210) -------------------------------------------------------- char __thiscall sub_5BC210(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // ebx volatile LONG *v15; // ebx volatile LONG **v16; // ebx void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // edx int v23; // ebx int v24; // eax volatile LONG *v25; // ebx const CHAR *v26; // eax volatile LONG **v27; // ebx volatile LONG *v28; // edx int v29; // ebx int v30; // eax volatile LONG *v31; // ebx const CHAR *v32; // eax volatile LONG **v33; // ebx volatile LONG *v34; // eax volatile LONG *v35; // ecx int v36; // ebx int v37; // eax volatile LONG *v38; // ebx const CHAR *v39; // eax volatile LONG **v40; // ebx volatile LONG *v41; // edx int v42; // ebx int v43; // eax volatile LONG *v44; // ebx const CHAR *v45; // eax volatile LONG **v46; // ebx volatile LONG *v47; // edx int v48; // ebx int v49; // eax volatile LONG *v50; // ebx const CHAR *v51; // eax volatile LONG **v52; // ebx volatile LONG *v53; // eax volatile LONG *v54; // ecx int v55; // ebx int v56; // eax volatile LONG *v57; // ebx const CHAR *v58; // eax volatile LONG **v59; // ebx volatile LONG *v60; // edx int v61; // ebx int v62; // eax volatile LONG *v63; // ebx const CHAR *v64; // eax volatile LONG **v65; // ebx volatile LONG *v66; // edx int v67; // ebx int v68; // eax volatile LONG *v69; // ebx const CHAR *v70; // eax volatile LONG **v71; // ebx volatile LONG *v72; // edx int v73; // ebx int v74; // eax volatile LONG *v75; // edi volatile LONG v76; // ebx const CHAR *v77; // eax void (__thiscall ***v78)(_DWORD, signed int); // esi int v79; // [esp+A0h] [ebp-20h] int v80; // [esp+A4h] [ebp-1Ch] int v81; // [esp+A8h] [ebp-18h] int v82; // [esp+ACh] [ebp-14h] int v83; // [esp+B0h] [ebp-10h] int v84; // [esp+BCh] [ebp-4h] int v85; // [esp+C8h] [ebp+8h] volatile LONG v86; // [esp+C8h] [ebp+8h] int v87; // [esp+C8h] [ebp+8h] volatile LONG v88; // [esp+C8h] [ebp+8h] int v89; // [esp+C8h] [ebp+8h] volatile LONG v90; // [esp+C8h] [ebp+8h] int v91; // [esp+C8h] [ebp+8h] volatile LONG v92; // [esp+C8h] [ebp+8h] int v93; // [esp+C8h] [ebp+8h] volatile LONG v94; // [esp+C8h] [ebp+8h] int v95; // [esp+C8h] [ebp+8h] volatile LONG v96; // [esp+C8h] [ebp+8h] int v97; // [esp+C8h] [ebp+8h] volatile LONG v98; // [esp+C8h] [ebp+8h] int v99; // [esp+C8h] [ebp+8h] volatile LONG v100; // [esp+C8h] [ebp+8h] int v101; // [esp+C8h] [ebp+8h] volatile LONG v102; // [esp+C8h] [ebp+8h] int v103; // [esp+C8h] [ebp+8h] v2 = this; v83 = 0; v3 = dword_BA6BA0; v84 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\SystemWin.nif"); sub_8F66B0(v4, (int)&v83, v3); if ( !v83 ) return 0; v5 = sub_8FB140(v83, (int)"Frame", (int)&v81, (int)&v82, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"SystemWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v83; v84 = -1; if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v82; v9 = v81; v85 = v82; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v83, (int)"Theme", (int)&v81, (int)&v82, v10); else v11 = sub_8FB140(v83, (int)"Theme", (int)&v81, (int)&v82, 0); sub_8F3EB0(v81 - v9, v82 - v8, (int)v11, (int)v2, 0, 0); v12 = sub_8FB140(v83, (int)"Panel01", (int)&v81, (int)&v82, 0); sub_8F3EB0(v81 - v9, v82, (int)v12, (int)v2, 0, 0); v13 = sub_8FB140(v83, (int)"Panel02", (int)&v81, (int)&v82, 0); sub_8F3EB0(v81 - v9, v82, (int)v13, (int)v2, 0, 0); v14 = sub_8FB140(v83, (int)"ClsNor", (int)&v81, (int)&v82, 0); sub_8FB650(v14, v83, (int)"ClsClick"); sub_8FB650(v14, v83, (int)"ClsOver"); sub_90C8D0(v81 - v9, v82 - v85, (int)v14, (int)v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v83 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v83, (int)"HelpLinkNor", (int)&v81, (int)&v82, v15); sub_8FB650(v16, v83, (int)"HelpLinkClick"); sub_8FB650(v16, v83, (int)"HelpLinkOver"); sub_8FE0F0(v81 - v9, v82 - v85, (int)v16, (int)v2, 10, 0, 0); } if ( sub_8F71E0(v83, (int)"WinTitle", &v81, &v82, &v79, &v80) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v81 - v9, v82, v79, v80, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v86 = *v19; v20 = sub_40C190(-235015935); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v86 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v83, (int)"HelpNor", (int)&v81, (int)&v82, 0); sub_8FB650(v21, v83, (int)"HelpClick"); sub_8FB650(v21, v83, (int)"HelpOver"); sub_8FE0F0(v81 - v9, v82, (int)v21, (int)v2, 1, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v87 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(7); v25 = sub_8F4A20(v81 - v9, v82 + 1, v87, v23, v24, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v88 = *v25; v26 = sub_40C190(-1733822215); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v88 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v83, (int)"GameNor", (int)&v81, (int)&v82, 0); sub_8FB650(v27, v83, (int)"GameClick"); sub_8FB650(v27, v83, (int)"GameOver"); sub_8FE0F0(v81 - v9, v82, (int)v27, (int)v2, 2, 0, 0); v28 = v27[9]; v29 = *(_DWORD *)(*v28 + 24); v89 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v81 - v9, v82 + 1, v89, v29, v30, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v90 = *v31; v32 = sub_40C190(-637973426); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v90 + 472))(v31, v32); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v33 = sub_8FB140(v83, (int)"GraphicNor", (int)&v81, (int)&v82, 0); sub_8FB650(v33, v83, (int)"GraphicClick"); sub_8FB650(v33, v83, (int)"GraphicOver"); v34 = sub_8FE0F0(v81 - v9, v82, (int)v33, (int)v2, 3, 0, 0); if ( byte_ACEB01 == 1 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); v35 = v33[9]; v36 = *(_DWORD *)(*v35 + 24); v91 = *(_DWORD *)(*v35 + 20); v37 = sub_421050(7); v38 = sub_8F4A20(v81 - v9, v82 + 1, v91, v36, v37, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); v92 = *v38; v39 = sub_40C190(859917957); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v92 + 472))(v38, v39); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); v40 = sub_8FB140(v83, (int)"SoundNor", (int)&v81, (int)&v82, 0); sub_8FB650(v40, v83, (int)"SoundClick"); sub_8FB650(v40, v83, (int)"SoundOver"); sub_8FE0F0(v81 - v9, v82, (int)v40, (int)v2, 4, 0, 0); v41 = v40[9]; v42 = *(_DWORD *)(*v41 + 24); v93 = *(_DWORD *)(*v41 + 20); v43 = sub_421050(7); v44 = sub_8F4A20(v81 - v9, v82 + 1, v93, v42, v43, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); v94 = *v44; v45 = sub_40C190(-414624426); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v94 + 472))(v44, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v46 = sub_8FB140(v83, (int)"KeyRemappingNor", (int)&v81, (int)&v82, 0); sub_8FB650(v46, v83, (int)"KeyRemappingClick"); sub_8FB650(v46, v83, (int)"KeyRemappingOver"); sub_8FE0F0(v81 - v9, v82, (int)v46, (int)v2, 5, 0, 0); v47 = v46[9]; v48 = *(_DWORD *)(*v47 + 24); v95 = *(_DWORD *)(*v47 + 20); v49 = sub_421050(7); v50 = sub_8F4A20(v81 - v9, v82 + 1, v95, v48, v49, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); v96 = *v50; v51 = sub_40C190(742745774); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v96 + 472))(v50, v51); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v50 + 240))(v50, 0); v52 = sub_8FB140(v83, (int)"SelectCharNor", (int)&v81, (int)&v82, 0); sub_8FB650(v52, v83, (int)"SelectCharClick"); sub_8FB650(v52, v83, (int)"SelectCharOver"); v53 = sub_8FE0F0(v81 - v9, v82, (int)v52, (int)v2, 6, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 240))(v53, 1); v54 = v52[9]; v55 = *(_DWORD *)(*v54 + 24); v97 = *(_DWORD *)(*v54 + 20); v56 = sub_421050(7); v57 = sub_8F4A20(v81 - v9, v82 + 1, v97, v55, v56, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 5); v98 = *v57; v58 = sub_40C190(-1618966892); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v98 + 472))(v57, v58); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v57 + 240))(v57, 0); v59 = sub_8FB140(v83, (int)"LogoutNor", (int)&v81, (int)&v82, 0); sub_8FB650(v59, v83, (int)"LogoutClick"); sub_8FB650(v59, v83, (int)"LogoutOver"); sub_8FE0F0(v81 - v9, v82, (int)v59, (int)v2, 7, 0, 0); v60 = v59[9]; v61 = *(_DWORD *)(*v60 + 24); v99 = *(_DWORD *)(*v60 + 20); v62 = sub_421050(7); v63 = sub_8F4A20(v81 - v9, v82 + 1, v99, v61, v62, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); v100 = *v63; v64 = sub_40C190(-369802667); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v100 + 472))(v63, v64); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v63 + 240))(v63, 0); v65 = sub_8FB140(v83, (int)"QuitNor", (int)&v81, (int)&v82, 0); sub_8FB650(v65, v83, (int)"QuitClick"); sub_8FB650(v65, v83, (int)"QuitOver"); sub_8FE0F0(v81 - v9, v82, (int)v65, (int)v2, 8, 0, 0); v66 = v65[9]; v67 = *(_DWORD *)(*v66 + 24); v101 = *(_DWORD *)(*v66 + 20); v68 = sub_421050(7); v69 = sub_8F4A20(v81 - v9, v82 + 1, v101, v67, v68, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 488))(v69, 5); v102 = *v69; v70 = sub_40C190(-487896002); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v102 + 472))(v69, v70); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v69 + 240))(v69, 0); v71 = sub_8FB140(v83, (int)"CancelNor", (int)&v81, (int)&v82, 0); sub_8FB650(v71, v83, (int)"CancelClick"); sub_8FB650(v71, v83, (int)"CancelOver"); sub_8FE0F0(v81 - v9, v82, (int)v71, (int)v2, 9, 0, 0); v72 = v71[9]; v73 = *(_DWORD *)(*v72 + 24); v103 = *(_DWORD *)(*v72 + 20); v74 = sub_421050(7); v75 = sub_8F4A20(v81 - v9, v82 + 1, v103, v73, v74, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 5); v76 = *v75; v77 = sub_40C190(-1612186628); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v75, v77); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v75 + 240))(v75, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v84 = -1; if ( v83 ) { v78 = (void (__thiscall ***)(_DWORD, signed int))v83; if ( !InterlockedDecrement((volatile LONG *)(v83 + 4)) ) { if ( v78 ) (**v78)(v78, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v83; v84 = -1; if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEB01: using guessed type char byte_ACEB01; //----- (005BCD00) -------------------------------------------------------- int __cdecl sub_5BCD00(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &SystemWin::`vftable'; *(_DWORD *)(v2 + 232) = &SystemWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9DF6E8: using guessed type void *SystemWin::`vftable'; // 9DF704: using guessed type void *SystemWin::`vftable'; //----- (005BCE40) -------------------------------------------------------- void *__thiscall sub_5BCE40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SystemWin::`vftable'; *((_DWORD *)this + 58) = &SystemWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DF6E8: using guessed type void *SystemWin::`vftable'; // 9DF704: using guessed type void *SystemWin::`vftable'; //----- (005BCF10) -------------------------------------------------------- bool __thiscall sub_5BCF10(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_907E00(this, a2, a3, 16, 16, a4, 0, 0) != 0; } //----- (005BCFD0) -------------------------------------------------------- bool __thiscall sub_5BCFD0(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_907E00(this, a2, a3, 20, 20, a4, 0, 0) != 0; } //----- (005BD040) -------------------------------------------------------- int __thiscall sub_5BD040(_DWORD *this, char a2) { int v2; // edi signed int v3; // esi int i; // ebx int result; // eax _DWORD *v6; // [esp+0h] [ebp-4h] v6 = this; if ( this[170] ) { v2 = 0; v3 = 0; for ( i = (int)(this + 170); ; i = (int)(v6 + 170) ) { while ( 1 ) { result = v2 || a2 != 1 ? (*(int (__stdcall **)(_DWORD))(*(_DWORD *)this[7 * v2 + 170 + v3++] + 256))(0) : (*(int (__stdcall **)(signed int))(**(_DWORD **)i + 256))(1); i += 4; if ( v3 >= 7 ) break; this = v6; } if ( ++v2 >= 2 ) break; this = v6; v3 = 0; } } return result; } //----- (005BD160) -------------------------------------------------------- int __thiscall sub_5BD160(_DWORD *this, int a2) { int result; // eax result = a2; this[94] = a2; return result; } //----- (005BD220) -------------------------------------------------------- int __thiscall sub_5BD220(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; (*(void (__stdcall **)(int))(*this[86] + 256))(a2); (*(void (__stdcall **)(int))(*v2[99] + 256))(a2); (*(void (__stdcall **)(int))(*v2[98] + 256))(a2); if ( (_BYTE)a2 ) { switch ( *((unsigned __int8 *)v2 + 376) ) { case 0x1Au: case 0x1Bu: (*(void (__stdcall **)(int))(*v2[90] + 256))(a2); (*(void (__stdcall **)(int))(*v2[95] + 256))(a2); (*(void (__stdcall **)(_DWORD))(*v2[96] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[204] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[87] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[104] + 256))(0); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2[105] + 256))(v2[105], 0); break; default: (*(void (__stdcall **)(_DWORD))(*v2[205] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[90] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[92] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[93] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[95] + 256))(0); (*(void (__stdcall **)(int))(*v2[96] + 256))(a2); result = (*(int (__thiscall **)(_DWORD *, int))(*v2[87] + 256))(v2[87], a2); break; } } else { (*(void (__stdcall **)(_DWORD))(*v2[95] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[96] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[87] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[104] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[105] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[90] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[92] + 256))(0); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2[93] + 256))(v2[93], 0); } return result; } //----- (005BD450) -------------------------------------------------------- void __thiscall sub_5BD450(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi _BYTE *v4; // ecx int v5; // eax v3 = this; if ( a2 == 4 ) { v4 = (_BYTE *)*((_DWORD *)dword_AD8EBC + 1026); if ( v4 ) { if ( v4[2680] ) { v5 = (*(int (**)(void))(*(_DWORD *)v4 + 84))(); sub_8EEE70(v3[74], 128, v5, 0); } } } } //----- (005BD4A0) -------------------------------------------------------- signed int __thiscall sub_5BD4A0(_WORD *this, char a2) { signed int result; // eax if ( a2 ) { result = 65534; this[14] &= 0xFFFEu; } else { this[14] |= 1u; } return result; } //----- (005BD4E0) -------------------------------------------------------- int __thiscall sub_5BD4E0(_DWORD *this, signed int a2, int a3, char a4) { _DWORD *v4; // esi int v5; // ebx signed int v6; // edi int result; // eax signed int v8; // ebx int v9; // esi float **v10; // esi int v11; // ebx float **v12; // esi int v13; // edi _DWORD *v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v4 = this; v5 = (int)(this + 177); v14 = this; v6 = 0; v15 = (int)(this + 177); do { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)v5 + 260))() ) break; ++v6; v5 += 4; } while ( v6 < 7 ); result = sub_5BD040(v4, a3); v8 = a2; if ( a2 > 0 ) { v9 = v15; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 - 28) + 256))(0); result = (*(int (__stdcall **)(int))(**(_DWORD **)v9 + 256))(a3); v9 += 4; --a2; } while ( a2 ); v4 = v14; } if ( (_BYTE)a3 == 1 && a4 == 1 ) { if ( v6 >= v8 ) { if ( v6 > v8 && v8 < v6 ) { v12 = (float **)&v4[v8 + 184]; v13 = v6 - v8; do { result = sub_6B0B40(*v12, *(v12 - 14)); ++v12; --v13; } while ( v13 ); } } else { v10 = (float **)&v4[v6 + 191]; v11 = v8 - v6; do { result = sub_6B0B40(*v10, *(v10 - 14)); ++v10; --v11; } while ( v11 ); } } return result; } //----- (005BD5C0) -------------------------------------------------------- char __thiscall sub_5BD5C0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax char result; // al v1 = this; (*(void (__stdcall **)(_DWORD))(*this[207] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[208] + 256))(1); v2 = v1[74]; *((_BYTE *)v1 + 844) = 0; result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v2[160]); byte_B920B5 = *((_BYTE *)v1 + 844); return result; } // B920B5: using guessed type char byte_B920B5; //----- (005BD620) -------------------------------------------------------- char __thiscall sub_5BD620(_DWORD **this) { _DWORD **v1; // esi char *v2; // eax v1 = this; (*(void (__stdcall **)(signed int))(*this[207] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[208] + 256))(0); *((_BYTE *)v1 + 844) = 1; v2 = sub_664AB0(dword_AD8C90, *((_WORD *)dword_AD8EBC + 2057)); if ( v2 ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[74][160]); LOBYTE(v2) = *((_BYTE *)v1 + 844); } byte_B920B5 = *((_BYTE *)v1 + 844); return (char)v2; } // B920B5: using guessed type char byte_B920B5; //----- (005BD6A0) -------------------------------------------------------- char __thiscall sub_5BD6A0(_DWORD **this, char a2) { char result; // al if ( a2 == 1 ) result = sub_5BD620(this); else result = sub_5BD5C0(this); return result; } //----- (005BD6C0) -------------------------------------------------------- int __thiscall sub_5BD6C0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int result; // eax v2 = this; v3 = sub_67F2B0(a2); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 648))(a2) ) { sub_8FCC40(*(void **)(v2[101] + 288), (int)v3); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[101] + 256))(1); result = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v2[100] + 256))(0); } else { sub_460590((_DWORD **)v2[100], (int)v3); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[101] + 256))(0); result = (*(int (__cdecl **)(signed int))(*(_DWORD *)v2[100] + 256))(1); } return result; } //----- (005BD750) -------------------------------------------------------- char __thiscall sub_5BD750(_DWORD **this, int a2, int a3) { char result; // al if ( a2 == 10001 ) return sub_5BD5C0(this); result = a2 - 18; if ( a2 == 10002 ) result = sub_5BD620(this); return result; } //----- (005BD780) -------------------------------------------------------- int __userpurge sub_5BD780@(_DWORD *a1@, signed int a2@, signed int a3@, char *a4, int a5, int *a6) { _DWORD *v6; // esi _DWORD *v7; // ecx int result; // eax void ***v9; // edi void ***v10; // esi int v11; // ebx int v12; // eax bool v13; // zf int v14; // eax int *v15; // edx int v16; // eax int v17; // eax int *v18; // edx int v19; // eax signed int v20; // [esp-8h] [ebp-24h] signed int v21; // [esp-4h] [ebp-20h] int v22; // [esp+4h] [ebp-18h] int v23; // [esp+4h] [ebp-18h] int v24; // [esp+4h] [ebp-18h] _DWORD *v25; // [esp+8h] [ebp-14h] _DWORD *v26; // [esp+Ch] [ebp-10h] int v27; // [esp+10h] [ebp-Ch] int v28; // [esp+10h] [ebp-Ch] int v29; // [esp+10h] [ebp-Ch] int v30; // [esp+10h] [ebp-Ch] int v31; // [esp+14h] [ebp-8h] int v32; // [esp+18h] [ebp-4h] int v33; // [esp+24h] [ebp+8h] v6 = a1; v26 = a1; v7 = *(_DWORD **)(sub_64F860(a4) + 4); result = *a6; v33 = *a6; if ( v7 ) { v21 = a2; v31 = (int)&v6[result + 140]; v20 = a3; v9 = (void ***)&v6[result + 110]; v32 = (int)&v6[result + 155]; v10 = (void ***)&v6[result + 125]; while ( result < 15 ) { v11 = v7[2]; v25 = (_DWORD *)*v7; v27 = *(unsigned __int16 *)(v11 + 20); v22 = dword_ACDA80; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA80 + 16))(v27); if ( (_BYTE)result ) { result = v27; if ( (unsigned __int16)v27 <= *(_WORD *)(v22 + 200) ) { v12 = *(_DWORD *)(v22 + 196); v13 = *(_DWORD *)(v12 + 4 * (unsigned __int16)v27) == 0; result = v12 + 4 * (unsigned __int16)v27; if ( v13 ) v28 = 0; else v28 = *(_DWORD *)result; } else { v28 = 0; } } else { v28 = 0; } if ( *(_BYTE *)(v28 + 526) ) { result = a5; if ( a5 != 4 || *(_DWORD *)(v28 + 522) != a5 ) { if ( *(_DWORD *)(v28 + 522) == a5 ) { v17 = (*(int (__thiscall **)(_DWORD *, signed int, signed int))(v26[106] + 4))(v26 + 106, v20, v21); *(_WORD *)(v17 + 8) = *(_WORD *)(v11 + 20); *(_DWORD *)v17 = 0; *(_DWORD *)(v17 + 4) = v26[108]; v18 = (int *)v26[108]; if ( v18 ) *v18 = v17; else v26[107] = v17; ++v26[109]; v26[108] = v17; sub_5D0FB0(*v9, *(unsigned __int16 *)(v11 + 20)); sub_8F2EA0(*v9, (const char *)(v28 + 70)); (*v9)[68] = (void *)dword_AD01E8; v21 = 1; (*((void (**)(void))**v9 + 64))(); v20 = 1; (*((void (**)(void))**v9 + 60))(); (*(void (__stdcall **)(signed int))(**(_DWORD **)v31 + 256))(1); ++v33; result = 4; v32 += 4; v31 += 4; ++v10; ++v9; if ( *(_DWORD *)(v11 + 112) ) { v24 = *(unsigned __int16 *)(v11 + 20); v30 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v24); if ( (_BYTE)result ) { result = v24; if ( (unsigned __int16)v24 <= *(_WORD *)(v30 + 200) ) { v19 = *(_DWORD *)(v30 + 196); v13 = *(_DWORD *)(v19 + 4 * (unsigned __int16)v24) == 0; result = v19 + 4 * (unsigned __int16)v24; if ( !v13 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v9, *(_DWORD *)(v11 + 112)); (*((void (__stdcall **)(signed int))**v9 + 64))(1); (*((void (__stdcall **)(signed int))**v9 + 60))(1); (*((void (__stdcall **)(signed int))**v9 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v31 + 256))(1); ++v33; v32 += 4; ++v10; ++v9; v31 += 4; } } } } } } } } else { v14 = (*(int (__thiscall **)(_DWORD *, signed int, signed int))(v26[106] + 4))(v26 + 106, v20, v21); *(_WORD *)(v14 + 8) = *(_WORD *)(v11 + 20); *(_DWORD *)v14 = 0; *(_DWORD *)(v14 + 4) = v26[108]; v15 = (int *)v26[108]; if ( v15 ) *v15 = v14; else v26[107] = v14; ++v26[109]; v26[108] = v14; sub_5D0FB0(*v10, *(unsigned __int16 *)(v11 + 20)); sub_8F2EA0(*v10, (const char *)(v28 + 70)); (*v10)[68] = (void *)dword_AD01E8; v21 = 1; (*((void (**)(void))**v10 + 64))(); v20 = 1; (*((void (**)(void))**v10 + 60))(); (*(void (__stdcall **)(signed int))(**(_DWORD **)v32 + 256))(1); ++v33; result = 4; v32 += 4; v31 += 4; ++v10; ++v9; if ( *(_DWORD *)(v11 + 112) ) { v23 = *(unsigned __int16 *)(v11 + 20); v29 = dword_ACDA7C; result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_ACDA7C + 16))(v23); if ( (_BYTE)result ) { result = v23; if ( (unsigned __int16)v23 <= *(_WORD *)(v29 + 200) ) { v16 = *(_DWORD *)(v29 + 196); v13 = *(_DWORD *)(v16 + 4 * (unsigned __int16)v23) == 0; result = v16 + 4 * (unsigned __int16)v23; if ( !v13 ) { result = *(_DWORD *)result; if ( result ) { if ( *(_BYTE *)(result + 288) ) { sub_5D0F00(*v10, *(_DWORD *)(v11 + 112)); (*((void (__stdcall **)(signed int))**v10 + 64))(1); (*((void (__stdcall **)(signed int))**v10 + 60))(1); (*((void (__stdcall **)(signed int))**v10 + 62))(1); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v32 + 256))(1); ++v33; ++v10; ++v9; v31 += 4; v32 += 4; } } } } } } } } if ( !v25 ) { *a6 = v33; return result; } result = v33; v7 = v25; } *a6 = result; } else { *a6 = result; } return result; } // 5BD780: could not find valid save-restore pair for ebx // 5BD780: could not find valid save-restore pair for edi // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; // AD01E8: using guessed type int dword_AD01E8; //----- (005BDB90) -------------------------------------------------------- char __thiscall sub_5BDB90(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi LONG v5; // eax int v7; // ebx char *v8; // eax volatile LONG **v9; // eax _DWORD *v10; // eax int v11; // ebx int v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax int v18; // ebx int v19; // eax int v20; // ecx volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax volatile LONG *v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax int v35; // eax volatile LONG *v36; // eax volatile LONG *v37; // ST38_4 volatile LONG *v38; // eax volatile LONG *v39; // eax volatile LONG **v40; // eax volatile LONG *v41; // [esp+10h] [ebp-24h] int v42; // [esp+14h] [ebp-20h] int v43; // [esp+18h] [ebp-1Ch] int v44; // [esp+1Ch] [ebp-18h] int v45; // [esp+20h] [ebp-14h] int v46; // [esp+24h] [ebp-10h] int v47; // [esp+30h] [ebp-4h] v2 = (int)this; v44 = 0; v47 = 0; v3 = (volatile LONG *)sub_43D0D0(0x12u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v44; v47 = -1; if ( v44 ) { v5 = InterlockedDecrement((volatile LONG *)(v44 + 4)); goto LABEL_4; } return 0; } v41 = (volatile LONG *)sub_43D0D0(4u); if ( !v41 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v44; v47 = -1; if ( v44 ) { v5 = InterlockedDecrement((volatile LONG *)(v44 + 4)); LABEL_4: if ( !v5 ) { if ( v4 ) (**v4)(v4, 1); } } return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\TargetOppositeWin.nif"); sub_8F66B0(v8, (int)&v44, v7); if ( !v44 ) return 0; v9 = sub_8FB140(v44, (int)"Frame", (int)&v45, (int)&v46, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"TargetOfTheTargetWin", 0) ) { LABEL_20: v47 = -1; sub_410C00(&v44); return 0; } v10 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("EventPanel"); v11 = sub_85C050(v10, 8); a2 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); v12 = **(_DWORD **)(v11 + 40); LOBYTE(v47) = 1; if ( !v12 ) goto LABEL_31; v13 = *(volatile LONG **)(v12 + 4); if ( !v13 ) goto LABEL_31; v14 = sub_8FB140(v44, (int)"EventPanel", (int)&v45, (int)&v46, v13); v15 = sub_8F3EB0(v45, v46, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v44, (int)"Face_Mask", (int)&v45, (int)&v46, 0); sub_8F3EB0(v45, v46, (int)v16, v2, 0, 0); v17 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("FaceCut_Mask"); v18 = sub_402BA0((int)dword_BA478C, v17); sub_8FB140(v44, (int)"FaceCut_Mask", (int)&v45, (int)&v46, 0); v19 = sub_460640(v45, v46, v18, (_DWORD *)v2); v20 = v44; *(_DWORD *)(v2 + 348) = v19; v21 = sub_8FB140(v20, (int)"FaceCut_Mon", (int)&v45, (int)&v46, 0); v22 = sub_8F3EB0(v45, v46, (int)v21, v2, 0, 0); *(_DWORD *)(v2 + 352) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 256))(v22, 0); v23 = sub_8FB140(v44, (int)"Panel01", (int)&v45, (int)&v46, v3); v24 = sub_8F3EB0(v45, v46, (int)v23, v2, 0, 0); if ( v24 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v24 + 240))(v24, 0); v25 = sub_8FB140(v44, (int)"Panel02", (int)&v45, (int)&v46, v3); v26 = sub_8F3EB0(v45, v46, (int)v25, v2, 0, 0); if ( v26 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v27 = sub_8FB140(v44, (int)"Panel03", (int)&v45, (int)&v46, v3); v28 = sub_8F3EB0(v45, v46, (int)v27, v2, 0, 0); if ( v28 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); if ( !sub_8F71E0(v44, (int)"Fill_HP_02", &v45, &v46, &v42, &v43) ) { LABEL_31: LOBYTE(v47) = 0; sub_410C00(&a2); goto LABEL_20; } v29 = sub_8FB140(v44, (int)"Fill_HP_02", (int)&v45, (int)&v46, v3); v30 = sub_90CB20(v45, v46, (int)v29, v2, 2); *(_DWORD *)(v2 + 364) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); v31 = sub_8FB140(v44, (int)"Fill_HP_01", (int)&v45, (int)&v46, v3); v32 = sub_90CB20(v45, v46, (int)v31, v2, 2); *(_DWORD *)(v2 + 372) = v32; (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 256))(v32, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v33 = sub_8FB140(v44, (int)"Fill_HP_03", (int)&v45, (int)&v46, v3); v34 = sub_90CB20(v45, v46, (int)v33, v2, 2); *(_DWORD *)(v2 + 368) = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 256))(v34, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); sub_8FB140(v44, (int)"Level", (int)&v45, (int)&v46, 0); v35 = sub_421050(2); v36 = sub_8F4A20(v45 - 5, v46, v42, v43, v35, v2, 0, 0); *(_DWORD *)(v2 + 356) = v36; (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 488))(v36, 4); sub_8FB140(v44, (int)"CharName", (int)&v45, (int)&v46, 0); v37 = (volatile LONG *)dword_AD01E8; v38 = (volatile LONG *)sub_421050(2); v39 = sub_90AEF0(v45, v46 + 2, v42, v43, v38, (_DWORD *)v2, 0, 0, 0, 1, v37, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 360) = v39; (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 4); v40 = sub_8FB140(v44, (int)"Level_over", (int)&v45, (int)&v46, v41); *(_DWORD *)(v2 + 344) = sub_8F3EB0(v45, v46, (int)v40, v2, 0, 0); LOBYTE(v47) = 0; sub_410C00(&a2); v47 = -1; sub_410C00(&v44); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005BE0F0) -------------------------------------------------------- int __thiscall sub_5BE0F0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int result; // eax v2 = this; v3 = sub_67F2B0(a2); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 648))(a2) ) { sub_8FCC40(*(void **)(v2[88] + 288), (int)v3); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[88] + 256))(1); result = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v2[87] + 256))(0); } else { sub_460590((_DWORD **)v2[87], (int)v3); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[88] + 256))(0); result = (*(int (__cdecl **)(signed int))(*(_DWORD *)v2[87] + 256))(1); } return result; } //----- (005BE180) -------------------------------------------------------- _DWORD *__thiscall sub_5BE180(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ****v2)(signed int); // edi int v3; // eax void (__stdcall ***v4)(signed int); // eax void (__stdcall ***v5)(signed int); // eax _DWORD *v6; // eax signed int v7; // edx signed int v8; // ecx void (__stdcall ***v10)(signed int); // [esp+14h] [ebp-14h] void (__stdcall ***v11)(signed int); // [esp+14h] [ebp-14h] void (__stdcall ***v12)(signed int); // [esp+14h] [ebp-14h] void (__stdcall ***v13)(signed int); // [esp+14h] [ebp-14h] signed int v14; // [esp+18h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &TargetWin::`vftable'; v1[58] = &TargetWin::`vftable'; v1[109] = 0; v1[107] = 0; v1[108] = 0; v1[106] = &NiTList::`vftable'; `eh vector constructor iterator'( v1 + 110, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v2 = (void (__stdcall ****)(signed int))(v1 + 125); `eh vector constructor iterator'( v1 + 125, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 140, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 155, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[86] = 0; v1[88] = 0; v1[206] = 0; v1[207] = 0; v1[208] = 0; *((_BYTE *)v1 + 844) = 1; *((_BYTE *)v1 + 846) = 0; v14 = 15; do { v3 = (int)*(v2 - 15); v10 = (void (__stdcall ***)(signed int))v3; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v10 ) (**v10)(1); *(v2 - 15) = 0; } v11 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)*v2 + 1) && v11 ) (**v11)(1); *v2 = 0; } v4 = v2[15]; v12 = v4; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)v4 + 1) && v12 ) (**v12)(1); v2[15] = 0; } v5 = v2[30]; v13 = v5; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)v5 + 1) && v13 ) (**v13)(1); v2[30] = 0; } ++v2; --v14; } while ( v14 ); v6 = v1 + 184; v7 = 2; do { v8 = 7; do { *(v6 - 14) = 0; *v6 = 0; ++v6; --v8; } while ( v8 ); --v7; } while ( v7 ); v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; *((_BYTE *)v1 + 376) = 0; v1[95] = 0; v1[96] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E0450: using guessed type void *NiTList::`vftable'; // 9E0460: using guessed type void *TargetWin::`vftable'; // 9E047C: using guessed type void *TargetWin::`vftable'; //----- (005BE3B0) -------------------------------------------------------- LONG __thiscall sub_5BE3B0(_DWORD *this) { _DWORD *v1; // edi int **v2; // ebx int *v3; // esi int v4; // edi _DWORD *v5; // esi _DWORD *v6; // edi _DWORD *v7; // ST0C_4 _DWORD *v9; // [esp+14h] [ebp-18h] signed int v10; // [esp+18h] [ebp-14h] signed int v11; // [esp+1Ch] [ebp-10h] v1 = this; v9 = this; *this = &TargetWin::`vftable'; this[58] = &TargetWin::`vftable'; v2 = (int **)(this + 184); v10 = 2; do { v11 = 7; do { v3 = *v2; if ( *v2 ) { sub_8D47C0(v3 + 7); nullsub_6(v3 + 1); v4 = *v3; if ( *v3 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); operator delete(v3); v1 = v9; *v2 = 0; } ++v2; --v11; } while ( v11 ); --v10; } while ( v10 ); `eh vector destructor iterator'(v1 + 155, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 140, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 125, 4u, 15, sub_410C00); `eh vector destructor iterator'(v1 + 110, 4u, 15, sub_410C00); v5 = v1 + 106; v1[106] = &NiTPointerListBase,unsigned short>::`vftable'; v6 = (_DWORD *)v1[107]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,unsigned short>::`vftable'; return sub_8F10F0(v9); } // 9E0430: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9E0440: using guessed type void *NiTPointerListBase,unsigned short>::`vftable'; // 9E0460: using guessed type void *TargetWin::`vftable'; // 9E047C: using guessed type void *TargetWin::`vftable'; //----- (005BE530) -------------------------------------------------------- void __userpurge sub_5BE530(int a1@, int a2@, unsigned __int16 *a3) { unsigned __int16 *v3; // edi int v4; // esi int v5; // ST10_4 signed int v6; // ebx int v7; // edi int *v8; // eax int v9; // edi const char *v10; // eax const char *v11; // eax const char *v12; // eax const char *v13; // eax const char *v14; // eax const char *v15; // eax const char *v16; // eax bool v17; // zf void (__cdecl *v18)(_DWORD); // eax int v19; // eax char v20; // al char v21; // al int v22; // edi int v23; // [esp+8h] [ebp-8h] int v24; // [esp+Ch] [ebp-4h] int v25; // [esp+18h] [ebp+8h] v3 = a3; v4 = a1; if ( a3 ) { v5 = a2; v6 = 54; v24 = 54; (*(void (__stdcall **)(signed int, int))(**(_DWORD **)(a1 + 392) + 240))(1, v5); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 396) + 240))(1); if ( (*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a3 + 32))(a3) ) { v7 = dword_ACDA48; v23 = a3[471]; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v23) ) goto LABEL_47; if ( (unsigned __int16)v23 > *(_WORD *)(v7 + 200) ) goto LABEL_47; v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v23); if ( !*v8 ) goto LABEL_47; v9 = *v8; if ( !*v8 ) goto LABEL_47; switch ( *(_DWORD *)(v9 + 95) ) { case 0: v24 = 16; v10 = sub_40C190(37435462); sub_8F2EA0(*(void ***)(v4 + 392), v10); break; case 1: v24 = 19; v13 = sub_40C190(-81118143); sub_8F2EA0(*(void ***)(v4 + 392), v13); break; case 2: v24 = 20; v14 = sub_40C190(-268419763); sub_8F2EA0(*(void ***)(v4 + 392), v14); break; case 3: v24 = 18; v12 = sub_40C190(-435799732); sub_8F2EA0(*(void ***)(v4 + 392), v12); break; case 4: v24 = 17; v11 = sub_40C190(-13939903); sub_8F2EA0(*(void ***)(v4 + 392), v11); break; default: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 392) + 240))(0); break; } switch ( *(_DWORD *)(v9 + 99) ) { case 0: v6 = 1; v15 = sub_40C190(-1443501576); goto LABEL_46; case 1: v6 = 4; v15 = sub_40C190(-516671685); goto LABEL_46; case 2: v6 = 5; v15 = sub_40C190(-117703948); goto LABEL_46; case 3: v6 = 2; v15 = sub_40C190(-1711932436); goto LABEL_46; case 4: v6 = 3; v15 = sub_40C190(-298502588); goto LABEL_46; case 5: v6 = 0; v15 = sub_40C190(-420090385); goto LABEL_46; case 6: if ( sub_651680((int)a3) == 1 ) { v6 = 7; v16 = sub_40A910(-201717968); sub_8F2EA0(*(void ***)(v4 + 396), v16); *(_BYTE *)(v4 + 376) = 0; } goto LABEL_47; case 8: case 9: case 0xA: case 0x15: case 0x16: v6 = 6; v15 = sub_40A910(-435803060); goto LABEL_46; case 0x10: v6 = 8; v15 = sub_40A910(-1712328447); goto LABEL_46; default: break; } } else { if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a3 + 660))(a3) ) { v17 = (*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a3 + 664))(a3) == 0; v18 = *(void (__cdecl **)(_DWORD))(**(_DWORD **)(v4 + 392) + 240); if ( v17 ) { v18(0); if ( *(_BYTE *)(v4 + 845) ) { v19 = sub_680890((unsigned __int8 *)byte_AD9238); v25 = v19 - *(unsigned __int8 *)(v4 + 845); if ( v19 != *(unsigned __int8 *)(v4 + 845) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 392) + 256))(1); if ( v25 >= -20 ) { if ( v25 >= -2 ) v24 = ((unsigned int)(v25 - 3) > 0x11) + 51; else v24 = 48; } else { v24 = 49; } } } v20 = sub_652070(v3); v21 = sub_40A760(v20); *(_BYTE *)(v4 + 376) = v21; switch ( v21 ) { case 1: v6 = 32; break; case 6: v6 = 33; break; case 0xB: v6 = 35; break; case 0x10: v6 = 34; break; case 0x15: v6 = 36; break; case 0x1A: v6 = 37; break; default: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 396) + 240))(0); break; } v15 = sub_40AAB0(*(_BYTE *)(v4 + 376)); } else { v18(0); v6 = 10; v15 = sub_4090F0(-1448105733); } LABEL_46: sub_8F2EA0(*(void ***)(v4 + 396), v15); goto LABEL_47; } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 392) + 240))(0); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 396) + 240))(0); LABEL_47: *(_DWORD *)(*(_DWORD *)(v4 + 392) + 272) = dword_AD01E8; *(_DWORD *)(*(_DWORD *)(v4 + 396) + 272) = dword_AD01E8; v22 = sub_43D0D0(0x12u); (*(void (__stdcall **)(int, int, signed int))(**(_DWORD **)(v4 + 392) + 584))(v22, v24, 16); (*(void (__stdcall **)(int, signed int, signed int, signed int))(**(_DWORD **)(v4 + 396) + 584))(v22, v6, 16, 16); } } // 5BE530: could not find valid save-restore pair for ebx // ACDA48: using guessed type int dword_ACDA48; // AD01E8: using guessed type int dword_AD01E8; //----- (005BE9F0) -------------------------------------------------------- char __thiscall sub_5BE9F0(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // eax char *v5; // ebx int v6; // eax int v7; // eax int v8; // ebx int v9; // eax unsigned int v10; // ebx char *v11; // eax float v12; // ST1C_4 int v13; // eax float v14; // ST18_4 int v15; // eax bool v16; // zf bool v17; // sf void (__stdcall *v18)(signed int); // eax int v19; // ebx int v20; // eax void (__stdcall *v21)(signed int); // eax signed int v22; // eax int v23; // edx float v24; // ST1C_4 signed int v25; // eax float v26; // ST18_4 int v27; // eax void (__stdcall *v28)(signed int); // eax int v29; // ebx int v30; // eax int v31; // eax int v32; // ebx _DWORD *v33; // eax _DWORD *v34; // eax _DWORD *v35; // eax int v36; // ebx int v37; // eax int v39; // [esp+2Ch] [ebp-4h] v2 = this; v3 = sub_664AB0(dword_AD8C90, *((_WORD *)dword_AD8EBC + 2057)); if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v2[87] + 332))(pt.x, pt.y) ) { if ( !*(_BYTE *)(dword_ACDC88 + 129) ) { if ( *(_BYTE *)(dword_ACDC88 + 131) ) { v4 = sub_664AB0(dword_AD8C90, *((_WORD *)dword_AD8EBC + 2057)); v5 = v4; if ( v4 ) { v6 = sub_650CF0(v4); if ( !v6 || (v7 = *(_DWORD *)(v6 + 99), v7 != 12) && v7 != 27 && v7 != 29 && v7 != 13 ) { sub_67D370(dword_AD8EBC, v5); LOWORD(v39) = *((_WORD *)dword_AD8EBC + 2057); LOBYTE(v7) = sub_6F3D10(&off_AB7F2C, 9, 1, &v39, 2u); } return v7; } } } } if ( !v3 || sub_6516C0(v3) ) { LOBYTE(v7) = sub_8F86A0(&unk_BA6B10, v2); return v7; } v8 = *(_DWORD *)v2[90]; v9 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 84))(v3); (*(void (__thiscall **)(_DWORD, int))(v8 + 472))(v2[90], v9); v10 = v2[94]; if ( sub_680890((unsigned __int8 *)byte_AD9238) + 10 >= v10 ) { if ( v10 ) { v39 = *(_DWORD *)v2[89]; v11 = sub_7549E0("%d", v10); (*(void (__thiscall **)(_DWORD, char *))(v39 + 472))(v2[89], v11); } else { (*(void (__stdcall **)(const char *))(*(_DWORD *)v2[89] + 472))("-"); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[89] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[86] + 256))(0); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[89] + 256))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)v2[89] + 472))(&unk_9DF94A); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[86] + 256))(1); } if ( v2[91] ) { if ( *((_WORD *)dword_AD8EBC + 274) == *((_WORD *)dword_AD8EBC + 2057) ) { v12 = (double)sub_680BE0((int)byte_AD9238); v13 = sub_680CC0((int)byte_AD9238); v39 = v13; v14 = (double)v13; sub_4F39A0((float *)v2[91], v14, v12); v15 = sub_680BE0((int)byte_AD9238); v16 = v15 == 0; v17 = v15 < 0; v18 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[93] + 256); if ( v17 || v16 ) v18(0); else v18(1); v19 = sub_680CC0((int)byte_AD9238); if ( v19 == sub_680BE0((int)byte_AD9238) ) { v20 = sub_680CC0((int)byte_AD9238); goto LABEL_26; } } else { v22 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 168))(v3); v23 = *(_DWORD *)v3; v39 = v22; v24 = (double)v22; v25 = (*(int (__thiscall **)(char *))(v23 + 172))(v3); v39 = v25; v26 = (double)v25; sub_4F39A0((float *)v2[91], v26, v24); v27 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 168))(v3); v16 = v27 == 0; v17 = v27 < 0; v28 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[93] + 256); if ( v17 || v16 ) v28(0); else v28(1); v29 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 172))(v3); if ( (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 168))(v3) == v29 ) { v20 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 172))(v3); LABEL_26: v16 = v20 == 0; v21 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[92] + 256); if ( !v16 ) { v21(1); goto LABEL_35; } LABEL_34: v21(0); goto LABEL_35; } } v21 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[92] + 256); goto LABEL_34; } LABEL_35: if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 32))(v3) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[87] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[88] + 256))(0); v30 = sub_4B0D70(*((unsigned __int16 *)v3 + 471)); if ( v30 && (v31 = *(unsigned __int16 *)(v30 + 174), (_WORD)v31) ) { v32 = sub_5C17B0(v31); if ( *(_DWORD *)(v32 + 2) == 5 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[88] + 256))(1); v33 = sub_67EEC0(*(unsigned __int16 *)(v32 + 6)); sub_8FCC40(*(void **)(v2[88] + 288), (int)v33); } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[87] + 256))(1); sub_5BE0F0(v2, (int)v3); } } else { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[88] + 256))(1); v34 = sub_67EEC0(*((unsigned __int16 *)v3 + 471)); sub_8FCC40(*(void **)(v2[88] + 288), (int)v34); } } else { if ( v3 == dword_AD8EBC ) v35 = sub_67F2B0((int)dword_AD8EBC); else v35 = sub_67F2B0((int)v3); v36 = (int)v35; if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 648))(v3) ) { sub_8FCC40(*(void **)(v2[88] + 288), v36); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[88] + 256))(1); (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v2[87] + 256))(0); } else { sub_460590((_DWORD **)v2[87], v36); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[88] + 256))(0); (*(void (__cdecl **)(signed int))(*(_DWORD *)v2[87] + 256))(1); } } LOBYTE(v7) = sub_8F3540(v2); if ( (_BYTE)v7 ) { LOBYTE(v7) = sub_6516C0(v3); if ( (_BYTE)v7 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[88] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[87] + 256))(1); v37 = sub_67E8C0(); LOBYTE(v7) = sub_460590((_DWORD **)v2[87], v37); } } return v7; } // AB7F2C: using guessed type void **off_AB7F2C; // ACDC88: using guessed type int dword_ACDC88; //----- (005BEF10) -------------------------------------------------------- int __cdecl sub_5BEF10(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x17Cu); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D35C0(v3); LOBYTE(v8) = 1; *(_DWORD *)v4 = &MobIconWin::`vftable'; *(_DWORD *)(v4 + 232) = &MobIconWin::`vftable'; sub_5D4380((_DWORD *)v4, 0x10u, (volatile LONG *)0x10); } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 2; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 608))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9DFCDC: using guessed type void *MobIconWin::`vftable'; // 9DFCFC: using guessed type void *MobIconWin::`vftable'; //----- (005BF1D0) -------------------------------------------------------- volatile LONG *__cdecl sub_5BF1D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x350u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5BE180(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005BF300) -------------------------------------------------------- char __thiscall sub_5BF300(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi char result; // al char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx _DWORD *v10; // eax int v11; // eax int v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax int v18; // eax volatile LONG *v19; // edx volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG **v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG *v34; // edx volatile LONG **v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // eax volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG **v41; // eax volatile LONG *v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax volatile LONG **v45; // eax volatile LONG *v46; // eax volatile LONG **v47; // eax volatile LONG *v48; // eax int v49; // eax volatile LONG *v50; // eax volatile LONG **v51; // eax volatile LONG *v52; // eax volatile LONG **v53; // eax volatile LONG *v54; // eax int v55; // eax int v56; // eax volatile LONG *v57; // eax int v58; // ecx volatile LONG **v59; // eax volatile LONG *v60; // eax volatile LONG *v61; // eax volatile LONG **v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // eax int v65; // eax volatile LONG *v66; // eax int v67; // eax int v68; // eax volatile LONG *v69; // ecx void **v70; // eax int v71; // eax volatile LONG *v72; // eax volatile LONG *v73; // eax const char *v74; // eax volatile LONG *v75; // eax const char *v76; // eax volatile LONG **v77; // eax volatile LONG *v78; // eax char *v79; // eax char *v80; // eax char *v81; // eax char *v82; // eax void **v83; // eax volatile LONG **v84; // ecx int v85; // ebx void ***v86; // edi volatile LONG **v87; // eax volatile LONG *v88; // eax const char *v89; // eax void *v90; // eax float *v91; // ebx int v92; // eax float *v93; // eax int v94; // eax float *v95; // eax void (__thiscall ***v96)(_DWORD, signed int); // esi void (__thiscall ***v97)(_DWORD, signed int); // esi int v98; // [esp+E8h] [ebp-D0h] int v99; // [esp+FCh] [ebp-BCh] int v100[5]; // [esp+100h] [ebp-B8h] void **v101; // [esp+114h] [ebp-A4h] void *v102; // [esp+118h] [ebp-A0h] void **v103; // [esp+11Ch] [ebp-9Ch] int v104; // [esp+120h] [ebp-98h] int v105; // [esp+124h] [ebp-94h] float **v106; // [esp+128h] [ebp-90h] int v107; // [esp+12Ch] [ebp-8Ch] int v108; // [esp+130h] [ebp-88h] volatile LONG *v109; // [esp+134h] [ebp-84h] volatile LONG **i; // [esp+138h] [ebp-80h] int v111; // [esp+13Ch] [ebp-7Ch] int v112; // [esp+140h] [ebp-78h] int v113; // [esp+144h] [ebp-74h] char v114; // [esp+148h] [ebp-70h] char v115; // [esp+188h] [ebp-30h] int v116; // [esp+189h] [ebp-2Fh] int v117; // [esp+18Dh] [ebp-2Bh] int v118; // [esp+191h] [ebp-27h] int v119; // [esp+195h] [ebp-23h] int v120; // [esp+199h] [ebp-1Fh] int v121; // [esp+19Dh] [ebp-1Bh] int v122; // [esp+1A1h] [ebp-17h] __int16 v123; // [esp+1A5h] [ebp-13h] char v124; // [esp+1A7h] [ebp-11h] int v125; // [esp+1B4h] [ebp-4h] v2 = (int)this; v111 = 0; v125 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v109 = v3; if ( !v3 ) { v125 = -1; if ( v111 && !InterlockedDecrement((volatile LONG *)(v111 + 4)) ) { if ( v111 ) (**(void (__thiscall ***)(int, signed int))v111)(v111, 1); } return 0; } v105 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\TargetWin.nif"); sub_8F66B0(v5, (int)&v111, v105); if ( !v111 ) return 0; v6 = sub_8FB140(v111, (int)"Frame", (int)&v113, (int)&v112, v3); if ( sub_8F1440((volatile LONG **)v2, v113, v112, (int)v6, 0, a2, (int)"TargetWin", 0) ) { v8 = v113; v9 = v112; v10 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v111 + 72))("EventPanel"); v11 = sub_85C050(v10, 8); v104 = v11; if ( v11 ) { InterlockedIncrement((volatile LONG *)(v11 + 4)); v11 = v104; } v12 = **(_DWORD **)(v11 + 40); LOBYTE(v125) = 1; if ( v12 ) { v13 = *(volatile LONG **)(v12 + 4); if ( v13 ) { v14 = sub_8FB140(v111, (int)"EventPanel", (int)&v113, (int)&v112, v13); v15 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_8FB140(v111, (int)"Face_Mask", (int)&v113, (int)&v112, v109); sub_8F3EB0(v113 - v8, v112 - v9, (int)v16, v2, 0, 0); v17 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v111 + 72))("FaceCut_Mask"); v105 = sub_402BA0((int)dword_BA478C, v17); sub_8FB140(v111, (int)"FaceCut_Mask", (int)&v113, (int)&v112, v109); v18 = sub_460640(v113 - v8, v112 - v9 - 2, v105, (_DWORD *)v2); v19 = v109; *(_DWORD *)(v2 + 400) = v18; v20 = sub_8FB140(v111, (int)"MonLevelYellow", (int)&v113, (int)&v112, v19); v21 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v20, v2, 0, 0); *(_DWORD *)(v2 + 796) = v21; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 796) + 256))(0); v22 = sub_8FB140(v111, (int)"MonLevelOrange", (int)&v113, (int)&v112, v109); v23 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v22, v2, 0, 0); *(_DWORD *)(v2 + 792) = v23; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 792) + 256))(0); v24 = sub_8FB140(v111, (int)"MonLevelRed", (int)&v113, (int)&v112, v109); v25 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v24, v2, 0, 0); *(_DWORD *)(v2 + 800) = v25; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 800) + 256))(0); v26 = sub_8FB140(v111, (int)"MonLevelGreen", (int)&v113, (int)&v112, v109); v27 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v26, v2, 0, 0); *(_DWORD *)(v2 + 804) = v27; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 804) + 256))(0); v28 = sub_8FB140(v111, (int)"MonLevelGray", (int)&v113, (int)&v112, v109); v29 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v28, v2, 0, 0); *(_DWORD *)(v2 + 808) = v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 808) + 256))(0); v30 = sub_8FB140(v111, (int)"FaceCut_Mon", (int)&v113, (int)&v112, 0); v31 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v30, v2, 0, 0); *(_DWORD *)(v2 + 404) = v31; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 256))(v31, 0); v32 = sub_8FB140(v111, (int)"Panel01", (int)&v113, (int)&v112, v109); sub_8F3EB0(v113 - v8, v112 - v9, (int)v32, v2, 0, 0); sub_456260(v100); LOBYTE(v125) = 2; sub_455FF0(v100, v2); sub_456380(v100, v111); sub_456000(v100, v8, v9); sub_456820(v100, (int)"Panel02", 0); *(_DWORD *)(v2 + 384) = sub_456820(v100, (int)"SPground", 0); v33 = sub_456820(v100, (int)"LPground", 0); v34 = v109; *(_DWORD *)(v2 + 380) = v33; v35 = sub_8FB140(v111, (int)"Fill_SP_03", (int)&v113, (int)&v112, v34); v36 = sub_90CB20(v113 - v8, v112 - v9, (int)v35, v2, 2); *(_DWORD *)(v2 + 416) = v36; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 256))(v36, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 416) + 240))(0); v37 = sub_8FB140(v111, (int)"Fill_LP_03", (int)&v113, (int)&v112, 0); v38 = sub_90CB20(v113 - v8, v112 - v9, (int)v37, v2, 2); *(_DWORD *)(v2 + 368) = v38; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 256))(v38, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); v39 = sub_8FB140(v111, (int)"Fill_SP_01", (int)&v113, (int)&v112, v109); v40 = sub_90CB20(v113 - v8, v112 - v9, (int)v39, v2, 2); *(_DWORD *)(v2 + 420) = v40; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 256))(v40, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 420) + 240))(0); v41 = sub_8FB140(v111, (int)"Fill_LP_01", (int)&v113, (int)&v112, 0); v42 = sub_90CB20(v113 - v8, v112 - v9, (int)v41, v2, 2); *(_DWORD *)(v2 + 372) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 256))(v42, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v43 = sub_8FB140(v111, (int)"Fill_HP_01", (int)&v113, (int)&v112, v109); v44 = sub_90CB20(v113 - v8, v112 - v9, (int)v43, v2, 2); *(_DWORD *)(v2 + 408) = v44; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 256))(v44, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 240))(0); v45 = sub_8FB140(v111, (int)"Fill_HP_03", (int)&v113, (int)&v112, v109); v46 = sub_90CB20(v113 - v8, v112 - v9, (int)v45, v2, 2); *(_DWORD *)(v2 + 412) = v46; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v46 + 256))(v46, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 412) + 240))(0); if ( sub_8F71E0(v111, (int)"Fill_HP_02", &v113, &v112, &v108, &v107) ) { v47 = sub_8FB140(v111, (int)"Fill_HP_02", (int)&v113, (int)&v112, v109); v48 = sub_90CB20(v113 - v8, v112 - v9, (int)v47, v2, 0); *(_DWORD *)(v2 + 344) = v48; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); v49 = sub_421050(2); v50 = sub_8F4A20(v113 - v8, v112 - v9, v108, v107, v49, v2, 0, 0); *(_DWORD *)(v2 + 812) = v50; (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 812) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 812) + 472))("0/0"); if ( sub_8F71E0(v111, (int)"Fill_SP_02", &v113, &v112, &v108, &v107) ) { v51 = sub_8FB140(v111, (int)"Fill_SP_02", (int)&v113, (int)&v112, v109); v52 = sub_90CB20(v113 - v8, v112 - v9, (int)v51, v2, 2); *(_DWORD *)(v2 + 348) = v52; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 240))(v52, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 256))(0); v53 = sub_8FB140(v111, (int)"Fill_LP_02", (int)&v113, (int)&v112, 0); v54 = sub_90CB20(v113 - v8, v112 - v9, (int)v53, v2, 2); *(_DWORD *)(v2 + 360) = v54; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 256))(0); v55 = sub_421050(2); *(_DWORD *)(v2 + 816) = sub_8F4A20(v113 - v8, v112 - v9, v108, v107, v55, v2, 0, 0); v56 = sub_421050(2); v57 = sub_8F4A20(v113 - v8, v112 - v9, v108, v107, v56, v2, 0, 0); v58 = *(_DWORD *)(v2 + 816); *(_DWORD *)(v2 + 820) = v57; (*(void (__stdcall **)(signed int))(*(_DWORD *)v58 + 488))(5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 816) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 816) + 472))("0/0"); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 820) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 820) + 468))(&unk_AA8D38); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 820) + 472))("0/0"); v106 = 0; i = (volatile LONG **)(v2 + 440); while ( 1 ) { sprintf(&v114, "CharBuffBox%02d", v106); if ( !sub_8F71E0(v111, (int)&v114, &v113, &v112, &v108, &v107) ) break; v59 = sub_8FB140(v111, (int)&v114, (int)&v113, (int)&v112, v109); v60 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v59, v2, 0, 0); sub_56FF80(i + 30, (int)v60); (*(void (__stdcall **)(_DWORD))(*i[30] + 240))(0); (*(void (__stdcall **)(_DWORD))(*i[30] + 256))(0); v61 = sub_5D1B00(v113 + 2, v112 + 2, v108 - 4, v107 - 4, v2, 0); sub_56FF80(i, (int)v61); (*(void (__stdcall **)(_DWORD))(**i + 240))(0); (*(void (__stdcall **)(_DWORD))(**i + 256))(0); sprintf(&v114, "CharDBuffBox%02d", v106); v62 = sub_8FB140(v111, (int)&v114, (int)&v113, (int)&v112, v109); v63 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v62, v2, 0, 0); sub_56FF80(i + 45, (int)v63); (*(void (__stdcall **)(_DWORD))(*i[45] + 240))(0); (*(void (__stdcall **)(_DWORD))(*i[45] + 256))(0); v64 = sub_5D1B00(v113 + 2, v112 + 2, v108 - 4, v107 - 4, v2, 0); sub_56FF80(i + 15, (int)v64); (*(void (__stdcall **)(_DWORD))(*i[15] + 240))(0); (*(void (__stdcall **)(_DWORD))(*i[15] + 256))(0); ++i; v106 = (float **)((char *)v106 + 1); if ( (signed int)v106 >= 15 ) { if ( sub_8F71E0(v111, (int)"CharName", &v113, &v112, &v108, &v107) ) { v65 = sub_421050(0); v66 = sub_8F4A20(v113 - v8, v112 - v9, v108, v107, v65, v2, 0, 0); *(_DWORD *)(v2 + 388) = v66; (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 488))(v66, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); } if ( sub_8F71E0(v111, (int)"MonLev_Mask", &v113, &v112, &v108, &v107) ) { v67 = sub_5BEF10(v113 - v8, v112 - v9, v2); *(_DWORD *)(v2 + 392) = v67; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v67 + 240))(v67, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0); if ( sub_8F71E0(v111, (int)"MonClass_Mask", &v113, &v112, &v108, &v107) ) { v68 = sub_5BEF10(v113 - v8, v112 - v9, v2); *(_DWORD *)(v2 + 396) = v68; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v68 + 240))(v68, 0); v69 = sub_8FB140(v111, (int)"Level", (int)&v113, (int)&v112, 0)[9]; v70 = *(void ***)(*v69 + 20); v105 = *(_DWORD *)(*v69 + 24); v103 = v70; v71 = sub_421050(1); v72 = sub_8F4A20(v113, v112, (int)v103, v105, v71, v2, 0, 0); *(_DWORD *)(v2 + 824) = v72; (*(void (__thiscall **)(volatile LONG *, signed int))(*v72 + 488))(v72, 5); i = sub_8FB140(v111, (int)"MinBtnNor", (int)&v113, (int)&v112, v109); sub_8FB650(i, v111, (int)"MinBtnClick"); sub_8FB650(i, v111, (int)"MinBtnOver"); v73 = sub_8FE0F0(v113, v112, (int)i, v2, 10001, 0, 0); *(_DWORD *)(v2 + 828) = v73; *((_DWORD *)v73 + 68) = dword_AD01E8; v74 = sub_40A910(-1197292055); sub_8F2EA0(*(void ***)(v2 + 828), v74); i = sub_8FB140(v111, (int)"MaxBtnNor", (int)&v113, (int)&v112, v109); sub_8FB650(i, v111, (int)"MaxBtnClick"); sub_8FB650(i, v111, (int)"MaxBtnOver"); v75 = sub_8FE0F0(v113, v112, (int)i, v2, 10002, 0, 0); *(_DWORD *)(v2 + 832) = v75; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v75 + 256))(v75, 0); *(_DWORD *)(*(_DWORD *)(v2 + 832) + 272) = dword_AD01E8; v76 = sub_40A910(-1197292055); sub_8F2EA0(*(void ***)(v2 + 832), v76); v77 = sub_8FB140(v111, (int)"Level_over", (int)&v113, (int)&v112, v109); v78 = sub_8F3EB0(v113 - v8, v112 - v9, (int)v77, v2, 0, 0); *(_DWORD *)(v2 + 836) = v78; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v78 + 256))(v78, 0); v79 = sub_4199F0(); v80 = (char *)sub_401410(v79, "Soul_Add.nif"); v103 = sub_8D03E0(v80, 0); v81 = sub_4199F0(); v82 = (char *)sub_401410(v81, "Soul_Use.nif"); v83 = sub_8D03E0(v82, 0); v84 = 0; v101 = v83; for ( i = 0; ; v84 = i ) { v116 = 0; v117 = 0; v118 = 0; v119 = 0; v120 = 0; v121 = 0; v122 = 0; v123 = 0; v124 = 0; v85 = 0; v115 = 0; v99 = 7 * (_DWORD)v84; v106 = (float **)(v2 + 736); v86 = (void ***)(v2 + 28 * (_DWORD)v84 + 680); while ( 1 ) { v105 = v85 + 1; v98 = v85 + 1; if ( v84 ) sprintf(&v115, "SoulOn%02d", v98); else sprintf(&v115, "SoulOff%02d", v98); v87 = sub_8FB140(v111, (int)&v115, (int)&v113, (int)&v112, v109); v88 = sub_8F3EB0(v113, v112, (int)v87, v2, 0, 0); *v86 = (void **)v88; (*(void (__thiscall **)(volatile LONG *, signed int))(*v88 + 240))(v88, 1); (*v86)[68] = (void *)dword_AD01E8; v89 = sub_40A910(1582313546); sub_8F2EA0(*v86, v89); if ( v101 && v103 && *v86 ) { v90 = operator new(0x44u); if ( i ) { v102 = v90; LOBYTE(v125) = 4; if ( v90 ) { v94 = sub_85BD60(v103); v95 = sub_6B0A90((float *)v102, v94); } else { v95 = 0; } *(_DWORD *)(v2 + 4 * (v99 + v85) + 736) = v95; } else { v91 = (float *)v90; v102 = v90; LOBYTE(v125) = 3; if ( v90 ) { v92 = sub_85BD60(v101); v93 = sub_6B0A90(v91, v92); *v106 = v93; } else { *v106 = 0; } } LOBYTE(v125) = 2; } v85 = v105; ++v106; ++v86; if ( v105 >= 7 ) break; v84 = i; } i = (volatile LONG **)((char *)i + 1); if ( (signed int)i >= 2 ) break; } sub_5BD040((_DWORD *)v2, 1); sub_5BD220((_DWORD **)v2, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.52999997, 0.0); LOBYTE(v125) = 1; sub_4562E0(v100); v96 = (void (__thiscall ***)(_DWORD, signed int))v104; LOBYTE(v125) = 0; if ( !InterlockedDecrement((volatile LONG *)(v104 + 4)) ) (**v96)(v96, 1); v97 = (void (__thiscall ***)(_DWORD, signed int))v111; v125 = -1; if ( v111 && !InterlockedDecrement((volatile LONG *)(v111 + 4)) && v97 ) (**v97)(v97, 1); return 1; } } break; } } } } LOBYTE(v125) = 1; sub_4562E0(v100); } } LOBYTE(v125) = 0; sub_410C00(&v104); v125 = -1; sub_410C00(&v111); result = 0; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v111; v125 = -1; if ( v111 && !InterlockedDecrement((volatile LONG *)(v111 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005C0510) -------------------------------------------------------- char __thiscall sub_5C0510(_BYTE **this, float a2) { int v2; // ebx int v3; // esi _BYTE **v4; // edi int v5; // ecx char result; // al int v7; // edi float v8; // ST1C_4 int v9; // eax float v10; // ST18_4 int v11; // eax bool v12; // zf bool v13; // sf void (__stdcall *v14)(signed int); // eax int v15; // edi void (__stdcall *v16)(signed int); // eax float v17; // ST1C_4 int v18; // eax float v19; // ST18_4 int v20; // eax void (__stdcall *v21)(signed int); // eax int v22; // edi void (__stdcall *v23)(signed int); // eax float v24; // ST1C_4 int v25; // eax float v26; // ST18_4 int v27; // eax void (__stdcall *v28)(signed int); // eax int v29; // edi void (__stdcall *v30)(signed int); // eax int v31; // eax int v32; // edi int v33; // eax char *v34; // eax int v35; // eax int v36; // edi int v37; // eax char *v38; // eax int v39; // eax int v40; // edi int v41; // eax char *v42; // eax int v43; // edi int v44; // eax char *v45; // eax float v46; // ST1C_4 float v47; // ST18_4 int v48; // eax void (__stdcall *v49)(signed int); // edx int v50; // edi float v51; // ST1C_4 float v52; // ST18_4 int v53; // eax void (__stdcall *v54)(signed int); // edx int v55; // edi int v56; // eax void (__stdcall *v57)(signed int); // edx float v58; // ST1C_4 float v59; // ST18_4 int v60; // eax void (__stdcall *v61)(signed int); // edx int v62; // edi int v63; // eax void (__stdcall *v64)(signed int); // edx char v65; // al int v66; // ecx int v67; // eax int v68; // edi int v69; // eax char *v70; // eax int v71; // eax int v72; // edi int v73; // eax char *v74; // eax int v75; // eax int v76; // edi int v77; // eax char *v78; // eax bool v79; // cf void (__stdcall *v80)(signed int); // eax unsigned __int8 v81; // al int *v82; // ecx int v83; // edi char *v84; // eax void (__stdcall *v85)(_DWORD); // eax int v86; // edi int v87; // edx int *v88; // eax int v89; // edi int v90; // eax int v91; // eax _DWORD *v92; // eax void (__stdcall *v93)(signed int); // eax _DWORD *v94; // eax _DWORD *v95; // edi int v96; // edi int v97; // edi float *v98; // eax int v99; // edi float *v100; // eax int v101; // eax int v102; // edi int *v103; // eax int v104; // ecx void *v105; // edi _DWORD *v106; // eax void *v107; // edi _DWORD *v108; // eax int v109; // edi float *v110; // eax int v111; // eax int v112; // edi float *v113; // eax char v114; // al void (__stdcall *v115)(_DWORD); // edx int v116; // eax _DWORD *v117; // eax int *v118; // ecx __int16 v119; // dx int v120; // edi _DWORD ***v121; // edi int v122; // edi int v123; // eax double v124; // st7 float *v125; // ecx float *v126; // ecx float *v127; // ecx int v128; // eax unsigned __int8 v129; // [esp+10h] [ebp-9Ch] unsigned __int8 v130; // [esp+10h] [ebp-9Ch] unsigned __int8 v131; // [esp+14h] [ebp-98h] unsigned __int8 v132; // [esp+14h] [ebp-98h] unsigned __int8 v133; // [esp+18h] [ebp-94h] unsigned __int8 v134; // [esp+18h] [ebp-94h] signed int v135; // [esp+1Ch] [ebp-90h] char v136; // [esp+2Ch] [ebp-80h] char v137; // [esp+3Ch] [ebp-70h] char v138; // [esp+4Ch] [ebp-60h] char v139; // [esp+5Ch] [ebp-50h] int v140; // [esp+6Ch] [ebp-40h] int v141; // [esp+70h] [ebp-3Ch] int v142; // [esp+74h] [ebp-38h] int v143; // [esp+78h] [ebp-34h] int v144; // [esp+7Ch] [ebp-30h] char v145; // [esp+83h] [ebp-29h] int v146; // [esp+84h] [ebp-28h] char v147; // [esp+88h] [ebp-24h] char v148; // [esp+98h] [ebp-14h] v2 = *((_DWORD *)dword_AD8EBC + 1026); v3 = (int)this; v4 = this + 184; v146 = 2; do { v144 = 7; do { if ( (*v4)[64] ) sub_6B0C00(*v4, a2); ++v4; --v144; } while ( v144 ); --v146; } while ( v146 ); if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3) ) { v5 = *(_DWORD *)(*(_DWORD *)(v3 + 296) + 640); if ( v5 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v5 + 260))() ) { sub_67B6A0(dword_AD8EBC, 0xFFFF); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v3 + 296) + 640) + 256))(0); } } } (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 824) + 472))(&unk_9DF937); result = sub_8F3540((_DWORD *)v3); if ( result ) { if ( v2 ) { v7 = sub_650CF0((_DWORD *)v2); if ( !sub_6516C0((_BYTE *)v2) && (!v7 || *(_DWORD *)(v7 + 99) != 29) ) { if ( *((char **)dword_AD8EBC + 1026) == dword_AD8EBC ) { if ( *(_DWORD *)(v3 + 344) ) { v8 = (double)sub_680BE0((int)byte_AD9238); v9 = sub_680CC0((int)byte_AD9238); v146 = v9; v10 = (double)v9; sub_4F39A0(*(float **)(v3 + 344), v10, v8); v11 = sub_680BE0((int)byte_AD9238); v12 = v11 == 0; v13 = v11 < 0; v14 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 412) + 256); if ( v13 || v12 ) v14(0); else v14(1); v15 = sub_680BE0((int)byte_AD9238); v12 = v15 == sub_680CC0((int)byte_AD9238); v16 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 408) + 256); if ( v12 ) v16(1); else v16(0); } if ( !*(_DWORD *)(v3 + 360) ) goto LABEL_33; v17 = (double)sub_680C10((int)byte_AD9238); v18 = sub_680CF0((int)byte_AD9238); v146 = v18; v19 = (double)v18; sub_4F39A0(*(float **)(v3 + 360), v19, v17); v20 = sub_680C10((int)byte_AD9238); v12 = v20 == 0; v13 = v20 < 0; v21 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 372) + 256); if ( v13 || v12 ) v21(0); else v21(1); v22 = sub_680C10((int)byte_AD9238); if ( v22 == sub_680CF0((int)byte_AD9238) ) { v12 = sub_680CF0((int)byte_AD9238) == 0; v23 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 368) + 256); if ( !v12 ) { v23(1); LABEL_33: if ( *(_DWORD *)(v3 + 348) ) { v24 = (double)sub_680BF0((int)byte_AD9238); v25 = sub_680CD0((int)byte_AD9238); v146 = v25; v26 = (double)v25; sub_4F39A0(*(float **)(v3 + 348), v26, v24); v27 = sub_680BF0((int)byte_AD9238); v12 = v27 == 0; v13 = v27 < 0; v28 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 420) + 256); if ( v13 || v12 ) v28(0); else v28(1); v29 = sub_680BF0((int)byte_AD9238); v12 = v29 == sub_680CD0((int)byte_AD9238); v30 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 416) + 256); if ( v12 ) v30(1); else v30(0); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 812) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 816) + 256))(1); v31 = sub_680BE0((int)byte_AD9238); sprintf(&v147, "%u", v31); v32 = **(_DWORD **)(v3 + 812); v33 = sub_680CC0((int)byte_AD9238); v34 = sub_7549E0("%s/%d", &v147, v33); (*(void (__thiscall **)(_DWORD, char *))(v32 + 472))(*(_DWORD *)(v3 + 812), v34); v35 = sub_680BF0((int)byte_AD9238); sprintf(&v147, "%u", v35); v36 = **(_DWORD **)(v3 + 816); v37 = sub_680CD0((int)byte_AD9238); v38 = sub_7549E0("%s/%d", &v147, v37); (*(void (__thiscall **)(_DWORD, char *))(v36 + 472))(*(_DWORD *)(v3 + 816), v38); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 820) + 256))(1); v39 = sub_680C10((int)byte_AD9238); sprintf(&v147, "%u", v39); v40 = **(_DWORD **)(v3 + 820); v41 = sub_680CF0((int)byte_AD9238); v42 = sub_7549E0("%s/%d", &v147, v41); (*(void (__thiscall **)(_DWORD, char *))(v40 + 472))(*(_DWORD *)(v3 + 820), v42); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 836) + 256))(0); if ( *(_DWORD *)(v3 + 824) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 824) + 256))(1); if ( sub_680890((unsigned __int8 *)byte_AD9238) ) { v43 = **(_DWORD **)(v3 + 824); v44 = sub_680890((unsigned __int8 *)byte_AD9238); v45 = sub_7549E0("%d", v44); (*(void (__thiscall **)(_DWORD, char *))(v43 + 472))(*(_DWORD *)(v3 + 824), v45); } else { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v3 + 824) + 472))("-"); } } goto LABEL_80; } } else { v23 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 368) + 256); } v23(0); goto LABEL_33; } if ( *(_DWORD *)(v3 + 344) ) { v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 92))(v2); v46 = (double)v146; v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2); v47 = (double)v146; sub_4F39A0(*(float **)(v3 + 344), v47, v46); v48 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 92))(v2); v49 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 412) + 256); if ( v48 <= 0 ) v49(0); else v49(1); v50 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 92))(v2) != v50 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 32))(v2) && !(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 408) + 256))(0); } else { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 408) + 256))(1); } } if ( *(_DWORD *)(v3 + 360) ) { v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 120))(v2); v51 = (double)v146; v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 124))(v2); v52 = (double)v146; sub_4F39A0(*(float **)(v3 + 360), v52, v51); v53 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 120))(v2); v54 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 372) + 256); if ( v53 <= 0 ) v54(0); else v54(1); v55 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 124))(v2); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 120))(v2) == v55 ) { v56 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 124))(v2); v57 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 368) + 256); if ( v56 ) { v57(1); goto LABEL_62; } } else { v57 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 368) + 256); } v57(0); } LABEL_62: if ( !*(_DWORD *)(v3 + 348) ) goto LABEL_71; v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 104))(v2); v58 = (double)v146; v146 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 108))(v2); v59 = (double)v146; sub_4F39A0(*(float **)(v3 + 348), v59, v58); v60 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 104))(v2); v61 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 420) + 256); if ( v60 <= 0 ) v61(0); else v61(1); v62 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 108))(v2); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 104))(v2) == v62 ) { v63 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 108))(v2); v64 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 416) + 256); if ( v63 ) { v64(1); goto LABEL_71; } } else { v64 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 416) + 256); } v64(0); LABEL_71: v65 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 32))(v2); v66 = *(_DWORD *)(v3 + 812); if ( v65 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v66 + 256))(*(unsigned __int8 *)(v3 + 846)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 816) + 256))(*(unsigned __int8 *)(v3 + 846)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 820) + 256))(*(unsigned __int8 *)(v3 + 846)); } else { (*(void (__stdcall **)(bool))(*(_DWORD *)v66 + 256))(*(_BYTE *)(v3 + 846) == 0); (*(void (__stdcall **)(bool))(**(_DWORD **)(v3 + 816) + 256))(*(_BYTE *)(v3 + 846) == 0); (*(void (__stdcall **)(bool))(**(_DWORD **)(v3 + 820) + 256))(*(_BYTE *)(v3 + 846) == 0); } v67 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 92))(v2); sprintf(&v147, "%u", v67); v68 = **(_DWORD **)(v3 + 812); v69 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2); v70 = sub_7549E0("%s/%d", &v147, v69); (*(void (__thiscall **)(_DWORD, char *))(v68 + 472))(*(_DWORD *)(v3 + 812), v70); v71 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 104))(v2); sprintf(&v147, "%u", v71); v72 = **(_DWORD **)(v3 + 816); v73 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 108))(v2); v74 = sub_7549E0("%s/%d", &v147, v73); (*(void (__thiscall **)(_DWORD, char *))(v72 + 472))(*(_DWORD *)(v3 + 816), v74); v75 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 120))(v2); sprintf(&v147, "%u", v75); v76 = **(_DWORD **)(v3 + 820); v77 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 124))(v2); v78 = sub_7549E0("%s/%d", &v147, v77); (*(void (__thiscall **)(_DWORD, char *))(v76 + 472))(*(_DWORD *)(v3 + 820), v78); v79 = sub_680890((unsigned __int8 *)byte_AD9238) + 10 < (unsigned int)*(unsigned __int8 *)(v3 + 845); v80 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 836) + 256); if ( v79 ) { v80(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 824) + 256))(0); (*(void (__thiscall **)(_DWORD, void *))(**(_DWORD **)(v3 + 824) + 472))(*(_DWORD *)(v3 + 824), &unk_9DF93F); } else { v80(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 824) + 256))(1); if ( *(_DWORD *)(v3 + 824) ) { v81 = *(_BYTE *)(v3 + 845); v82 = *(int **)(v3 + 824); if ( v81 ) { v83 = *v82; v84 = sub_7549E0("%d", v81); (*(void (__thiscall **)(_DWORD, char *))(v83 + 472))(*(_DWORD *)(v3 + 824), v84); } else { (*(void (__thiscall **)(int *, const char *))(*v82 + 472))(v82, "-"); } } } LABEL_80: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 796) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 792) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 800) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 804) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 808) + 256))(0); sub_5BE530(v3, v2, (unsigned __int16 *)v2); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 32))(v2) ) { sub_5BD220((_DWORD **)v3, 1); v85 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 400) + 256); v145 = 0; v85(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 404) + 256))(0); v86 = dword_ACDA74; v87 = *(_DWORD *)dword_ACDA74; v146 = *(unsigned __int16 *)(v2 + 942); if ( !(*(unsigned __int8 (__thiscall **)(int, int))(v87 + 16))(dword_ACDA74, v146) || (unsigned __int16)v146 > *(_WORD *)(v86 + 200) || (v88 = (int *)(*(_DWORD *)(v86 + 196) + 4 * (unsigned __int16)v146), !*v88) || (v89 = *v88) == 0 || (v90 = *(unsigned __int16 *)(v89 + 174), !(_WORD)v90) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 404) + 256))(1); v94 = sub_67EEC0(*(unsigned __int16 *)(v2 + 942)); sub_8FCC40(*(void **)(*(_DWORD *)(v3 + 404) + 288), (int)v94); goto LABEL_94; } v91 = sub_5C17B0(v90); v12 = *(_DWORD *)(v91 + 2) == 5; v146 = v91; if ( v12 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 404) + 256))(1); v92 = sub_67EEC0(*(unsigned __int16 *)(v146 + 6)); } else { if ( *(_BYTE *)(v89 + 180) != 1 || *(_WORD *)(v89 + 174) ) { v93 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 400) + 256); v145 = 1; v93(1); sub_5BD6C0((_DWORD *)v3, v2); goto LABEL_94; } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 404) + 256))(1); v92 = sub_67EEC0(*(unsigned __int16 *)(v2 + 942)); } sub_8FCC40(*(void **)(*(_DWORD *)(v3 + 404) + 288), (int)v92); LABEL_94: v146 = *(unsigned __int16 *)(v2 + 548); v95 = sub_6D14F0(); sub_4A3E20(v95, (int **)&v144, &v146); if ( v144 == v95[1] ) v96 = 0; else v96 = *(_DWORD *)(v144 + 16); v146 = sub_6D3800(); if ( sub_651680(v2) ) { v97 = **(_DWORD **)(v3 + 388); v98 = sub_419EE0((float *)&v140, 0xFFu, 0xF3u, 0x32u, 0xFFu); LABEL_102: (*(void (__thiscall **)(_DWORD, float *))(v97 + 468))(*(_DWORD *)(v3 + 388), v98); goto LABEL_133; } if ( v96 && v96 == *((_DWORD *)dword_AD8EBC + 169) ) { v97 = **(_DWORD **)(v3 + 388); v98 = sub_419EE0((float *)&v140, 0xFFu, 0xFFu, 0xFFu, 0xFFu); goto LABEL_102; } if ( v146 && *(_DWORD *)(v146 + 2700) == 2 ) { if ( *((_DWORD *)dword_AD8EBC + 169) == *(_DWORD *)(v2 + 676) ) goto LABEL_133; v133 = 0; v131 = 0; v129 = -1; goto LABEL_109; } if ( sub_650B20((_DWORD *)v2) ) { v133 = -18; v131 = -126; v129 = -18; LABEL_109: v99 = **(_DWORD **)(v3 + 388); v100 = sub_419EE0((float *)&v140, v129, v131, v133, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v99 + 468))(*(_DWORD *)(v3 + 388), v100); goto LABEL_133; } v101 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 164))(v2); switch ( sub_652AC0(dword_AD8EBC, v101) ) { case 0: v102 = *(_DWORD *)(v3 + 800); v103 = (int *)sub_419EE0((float *)&v139, 0xBEu, 0x25u, 0x1Du, 0xFFu); break; case 1: v102 = *(_DWORD *)(v3 + 792); v103 = (int *)sub_419EE0((float *)&v136, 0xFFu, 0xA0u, 0x25u, 0xFFu); break; case 2: v102 = *(_DWORD *)(v3 + 796); v103 = (int *)sub_419EE0((float *)&v137, 0xFFu, 0xF3u, 0x32u, 0xFFu); break; case 3: v102 = *(_DWORD *)(v3 + 804); v103 = (int *)sub_419EE0((float *)&v138, 0x5Au, 0xE7u, 0x56u, 0xFFu); break; default: v102 = *(_DWORD *)(v3 + 808); v103 = (int *)sub_419EE0((float *)&v148, 0xC0u, 0xC0u, 0xC0u, 0xFFu); break; } v140 = *v103; v141 = v103[1]; v104 = *(_DWORD *)(v3 + 388); v142 = v103[2]; v143 = v103[3]; (*(void (__stdcall **)(int *))(*(_DWORD *)v104 + 468))(&v140); if ( !v145 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v102 + 256))(v102, 1); LABEL_133: v116 = sub_64F860((char *)v2); if ( *(_DWORD *)(v3 + 436) == *(_DWORD *)(v116 + 12) ) { v117 = *(_DWORD **)(v116 + 4); v118 = *(int **)(v3 + 428); if ( !v117 ) { LABEL_141: v122 = **(_DWORD **)(v3 + 388); v123 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 84))(v2); return (*(int (__thiscall **)(_DWORD, int))(v122 + 472))(*(_DWORD *)(v3 + 388), v123); } while ( 1 ) { v119 = *((_WORD *)v118 + 4); v118 = (int *)*v118; v120 = v117[2]; v117 = (_DWORD *)*v117; if ( *(_WORD *)(v120 + 20) != v119 ) break; if ( !v117 ) goto LABEL_141; } } sub_521E30((_DWORD *)(v3 + 424)); v121 = (_DWORD ***)(v3 + 440); v146 = 15; do { ((void (__stdcall *)(_DWORD))(**v121)[64])(0); ((void (__stdcall *)(_DWORD))(*v121[15])[64])(0); ((void (__stdcall *)(_DWORD))(*v121[30])[64])(0); ((void (__stdcall *)(_DWORD))(*v121[45])[64])(0); sub_5D0F80(*v121); sub_5D0F80(v121[15]); ++v121; --v146; } while ( v146 ); v146 = 0; v144 = 0; sub_5BD780((_DWORD *)v3, v2, 0, (char *)v2, 1, &v144); sub_5BD780((_DWORD *)v3, v2, 0, (char *)v2, 2, &v144); sub_5BD780((_DWORD *)v3, v2, 0, (char *)v2, 3, &v144); sub_5BD780((_DWORD *)v3, v2, 0, (char *)v2, 0, &v144); sub_5BD780((_DWORD *)v3, v2, 0, (char *)v2, 4, &v146); goto LABEL_141; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 660))(v2) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 400) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 404) + 256))(1); v105 = *(void **)(*(_DWORD *)(v3 + 404) + 288); v106 = sub_67F010(*(_DWORD *)(v2 + 2972)); sub_8FCC40(v105, (int)v106); sub_5BD220((_DWORD **)v3, 1); goto LABEL_133; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 664))(v2) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 400) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 404) + 256))(1); v107 = *(void **)(*(_DWORD *)(v3 + 404) + 288); v108 = sub_67F160(*(_DWORD *)(v2 + 2956)); sub_8FCC40(v107, (int)v108); sub_5BD220((_DWORD **)v3, 1); goto LABEL_133; } if ( (char *)v2 == dword_AD8EBC ) { v134 = 31; v132 = -58; v130 = -31; } else { v109 = **(_DWORD **)(v3 + 388); v110 = sub_419EE0((float *)&v148, 0xFFu, 0xFFu, 0xFFu, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v109 + 468))(*(_DWORD *)(v3 + 388), v110); v111 = sub_6D3800(); if ( !v111 || *(_DWORD *)(v111 + 2700) != 2 || *((_DWORD *)dword_AD8EBC + 169) == *(_DWORD *)(v2 + 676) ) { LABEL_129: sub_5BD220((_DWORD **)v3, 1); v114 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 48))(v2); v115 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 404) + 256); if ( v114 ) { v115(0); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v3 + 400) + 256))(0); } else { v115(0); (*(void (__cdecl **)(signed int))(**(_DWORD **)(v3 + 400) + 256))(1); } sub_5BD6C0((_DWORD *)v3, v2); goto LABEL_133; } v134 = 0; v132 = 0; v130 = -1; } v112 = **(_DWORD **)(v3 + 388); v113 = sub_419EE0((float *)&v148, v130, v132, v134, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v112 + 468))(*(_DWORD *)(v3 + 388), v113); goto LABEL_129; } } (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 388) + 472))(&unk_9DF93E); v124 = 0.0; v125 = *(float **)(v3 + 344); if ( v125 && 0.0 != v125[75] ) { v125[75] = 0.0; sub_49F670(v125); v124 = 0.0; } v126 = *(float **)(v3 + 348); if ( v124 != v126[75] ) { v126[75] = v124; sub_49F670(v126); v124 = 0.0; } v127 = *(float **)(v3 + 360); if ( v124 != v127[75] ) { v127[75] = v124; sub_49F670(v127); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 404) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 400) + 256))(1); v128 = sub_67E8C0(); sub_460590(*(_DWORD ***)(v3 + 400), v128); v135 = 0; return (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, v135); } if ( v2 ) { result = sub_6516C0((_BYTE *)v2); if ( !result ) { v135 = 1; return (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, v135); } } return result; } // ACDA74: using guessed type int dword_ACDA74; //----- (005C15D0) -------------------------------------------------------- int __cdecl sub_5C15D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x180u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &TargetOfTheTargetWin::`vftable'; *(_DWORD *)(v2 + 232) = &TargetOfTheTargetWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 376) = -1; *(_BYTE *)(v2 + 380) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E01EC: using guessed type void *TargetOfTheTargetWin::`vftable'; // 9E020C: using guessed type void *TargetOfTheTargetWin::`vftable'; //----- (005C1730) -------------------------------------------------------- char __thiscall sub_5C1730(_BYTE *this, int a2) { _BYTE *v2; // esi v2 = this; sub_5BF300(this, a2); v2[845] = 0; return 1; } //----- (005C1750) -------------------------------------------------------- char __thiscall sub_5C1750(_BYTE **this, float a2) { _DWORD *v2; // esi char result; // al v2 = (_DWORD *)*((_DWORD *)dword_AD8EBC + 1026); result = sub_5C0510(this, a2); if ( v2 ) { if ( !(*(int (__thiscall **)(_DWORD *))(*v2 + 12))(v2) || (result = (*(int (__thiscall **)(_DWORD *))(*v2 + 32))(v2)) != 0 && (result = sub_65B9D0(v2, 500000)) != 0 ) { result = sub_67D370(dword_AD8EBC, 0); } } return result; } //----- (005C17B0) -------------------------------------------------------- int __cdecl sub_5C17B0(int a1) { int v1; // esi int result; // eax int v3; // ecx v1 = dword_ACDA78; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA78 + 16))(dword_ACDA78, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v3 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v3 + 4 * (unsigned __int16)a1)) ) { result = *(_DWORD *)(v3 + 4 * (unsigned __int16)a1); } else { result = 0; } return result; } // ACDA78: using guessed type int dword_ACDA78; //----- (005C1810) -------------------------------------------------------- void *__thiscall sub_5C1810(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,unsigned short>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9E0430: using guessed type void *NiTListBase,unsigned short>::`vftable'; //----- (005C1840) -------------------------------------------------------- void *__thiscall sub_5C1840(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MobIconWin::`vftable'; *((_DWORD *)this + 58) = &MobIconWin::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DFCDC: using guessed type void *MobIconWin::`vftable'; // 9DFCFC: using guessed type void *MobIconWin::`vftable'; //----- (005C1880) -------------------------------------------------------- void *__thiscall sub_5C1880(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AbStateIconWin::`vftable'; *((_DWORD *)this + 58) = &AbStateIconWin::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9DFF64: using guessed type void *AbStateIconWin::`vftable'; // 9DFF84: using guessed type void *AbStateIconWin::`vftable'; //----- (005C18C0) -------------------------------------------------------- int __thiscall sub_5C18C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST08_4 int result; // eax v1 = this; *this = &NiTPointerListBase,unsigned short>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,unsigned short>::`vftable'; return result; } // 9E0430: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9E0440: using guessed type void *NiTPointerListBase,unsigned short>::`vftable'; //----- (005C1940) -------------------------------------------------------- void *__thiscall sub_5C1940(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &TargetOfTheTargetWin::`vftable'; *((_DWORD *)this + 58) = &TargetOfTheTargetWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E01EC: using guessed type void *TargetOfTheTargetWin::`vftable'; // 9E020C: using guessed type void *TargetOfTheTargetWin::`vftable'; //----- (005C1980) -------------------------------------------------------- _WORD *sub_5C1980() { _WORD *result; // eax result = operator new(0xCu); result[4] = 0; return result; } //----- (005C19A0) -------------------------------------------------------- void __stdcall sub_5C19A0(void *a1) { *((_WORD *)a1 + 4) = 0; operator delete(a1); } //----- (005C19C0) -------------------------------------------------------- _DWORD *__thiscall sub_5C19C0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,unsigned short>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,unsigned short>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9E0430: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9E0440: using guessed type void *NiTPointerListBase,unsigned short>::`vftable'; //----- (005C1A50) -------------------------------------------------------- void *__thiscall sub_5C1A50(void *this, char a2) { void *v2; // esi v2 = this; sub_5BE3B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005C1AD0) -------------------------------------------------------- int __thiscall sub_5C1AD0(char *this) { int v1; // esi signed int v2; // edi int result; // eax v1 = (int)(this + 416); v2 = 20; do { result = (*(int (__stdcall **)(void *))(**(_DWORD **)v1 + 472))(&unk_9E069C); v1 += 4; --v2; } while ( v2 ); return result; } //----- (005C1B00) -------------------------------------------------------- int __thiscall sub_5C1B00(char *this, int a2) { int v2; // ebx int v3; // esi signed int v4; // edi int result; // eax v2 = (int)(this + 416); v3 = (int)(this + 416); v4 = 20; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v3 + 472))(&unk_9E069D); v3 += 4; --v4; } while ( v4 ); result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)v2 + 472))(a2); return result; } //----- (005C1B50) -------------------------------------------------------- char __thiscall sub_5C1B50(_DWORD **this, signed int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD **v7; // esi int v9; // ebx int v10; // eax v7 = this; if ( a2 >= 20 ) return 0; v9 = *this[a2 + 104]; v10 = sub_421050(a7); (*(void (__thiscall **)(_DWORD *, int))(v9 + 452))(v7[a2 + 104], v10); (*(void (__stdcall **)(int, int, int, signed int))(*v7[a2 + 104] + 464))(a4, a5, a6, 255); (*(void (__stdcall **)(int))(*v7[a2 + 104] + 472))(a3); return 1; } //----- (005C1BD0) -------------------------------------------------------- int __thiscall sub_5C1BD0(_DWORD **this) { int v1; // edi int result; // eax _DWORD *v3; // esi unsigned int v4; // ebx bool v5; // zf unsigned int v6; // [esp+8h] [ebp-18h] int v7; // [esp+Ch] [ebp-14h] _DWORD *v8; // [esp+10h] [ebp-10h] int v9; // [esp+14h] [ebp-Ch] int v10; // [esp+18h] [ebp-8h] int v11; // [esp+1Ch] [ebp-4h] v1 = (int)(this + 104); v8 = this; result = (*(int (**)(void))(*this[104] + 456))(); v3 = (_DWORD *)result; if ( result ) { SelectObject(*(HDC *)(result + 192), *(HGDIOBJ *)(result + 184)); v4 = 0; v11 = 0; v10 = v1; v9 = 20; do { result = (*(int (**)(void))(**(_DWORD **)v1 + 484))(); if ( result ) { sub_902790(v3, (char *)result, strlen((const char *)result), &v6, 0, 0, 1, 0); if ( v6 > v4 ) v4 = v6; result = v7; v11 += v7 + 2; } v1 = v10 + 4; v5 = v9-- == 1; v10 += 4; } while ( !v5 ); if ( v4 ) result = (*(int (__stdcall **)(unsigned int, int))(*v8 + 540))(v4 + 2 * v8[89], v11 + 2 * v8[88]); } return result; } //----- (005C1CB0) -------------------------------------------------------- char __thiscall sub_5C1CB0(_DWORD *this, int a2) { _DWORD *v2; // esi void (__thiscall *v3)(_DWORD *); // edx char result; // al v2 = this; if ( a2 ) { (*(void (__stdcall **)(signed int))(*this + 256))(1); v3 = *(void (__thiscall **)(_DWORD *))(*v2 + 436); v2[69] = a2; v3(v2); result = sub_8F81A0(&unk_BA6B10, v2); dword_BA6B98 = (int)v2; } return result; } // BA6B98: using guessed type int dword_BA6B98; //----- (005C1D00) -------------------------------------------------------- char __thiscall sub_5C1D00(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; (*(void (__stdcall **)(signed int))(*this + 256))(1); (*(void (__thiscall **)(_DWORD *))(*v1 + 436))(v1); result = sub_8F81A0(&unk_BA6B10, v1); dword_BA6B98 = (int)v1; return result; } // BA6B98: using guessed type int dword_BA6B98; //----- (005C1D30) -------------------------------------------------------- char __thiscall sub_5C1D30(volatile LONG **this, void *a2, int a3, int a4) { volatile LONG **v4; // esi char result; // al signed int v6; // ebx int v7; // edi int v8; // eax volatile LONG *v9; // eax int v10; // eax v4 = this; result = sub_45C530(this, a2, a3, a4, 0, 0, 0, 0); if ( result ) { v6 = 0; v7 = (int)(v4 + 104); do { v8 = sub_421050(0); v9 = sub_8F4A20((int)v4[89], (int)v4[88] + v6 + 2, 256, 16, v8, (int)v4, 0, 0); *(_DWORD *)v7 = v9; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v10 = *(_DWORD *)(*(_DWORD *)v7 + 288); if ( v10 ) *(_BYTE *)(v10 + 285) = 1; v6 += 14; v7 += 4; } while ( v6 < 280 ); (*((void (__thiscall **)(volatile LONG **, int, int))*v4 + 135))( v4, 2 * (_DWORD)v4[89] + 128, 2 * (_DWORD)v4[88] + 12); result = 1; } return result; } //----- (005C1E00) -------------------------------------------------------- int __cdecl sub_5C1E00(int a1, int a2, int a3) { _BYTE *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1F4u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_45B4A0(v3); *(_DWORD *)v4 = &ToolTipWin::`vftable'; *(_DWORD *)(v4 + 232) = &ToolTipWin::`vftable'; *(_BYTE *)(v4 + 496) = 0; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 560))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9E06A4: using guessed type void *ToolTipWin::`vftable'; // 9E06C4: using guessed type void *ToolTipWin::`vftable'; //----- (005C1F50) -------------------------------------------------------- void *__thiscall sub_5C1F50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ToolTipWin::`vftable'; *((_DWORD *)this + 58) = &ToolTipWin::`vftable'; sub_45B500(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E06A4: using guessed type void *ToolTipWin::`vftable'; // 9E06C4: using guessed type void *ToolTipWin::`vftable'; //----- (005C2030) -------------------------------------------------------- void __thiscall sub_5C2030(unsigned int *this, float a2) { unsigned int *v2; // esi unsigned int v3; // eax int v4; // edi int v5; // eax v2 = this; v3 = this[113]; v4 = 0; if ( v3 ) { if ( v3 != 1 ) goto LABEL_6; v5 = sub_633520(this[112]); } else { v5 = sub_633500(this[112]); } v4 = v5; LABEL_6: if ( v4 != sub_5D5470(v2) ) sub_5D5B70(v2, v4, 1); sub_5D31A0((int)v2, a2); } //----- (005C2090) -------------------------------------------------------- char __thiscall sub_5C2090(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (005C20E0) -------------------------------------------------------- int __thiscall sub_5C20E0(_DWORD *this) { int v1; // esi int result; // eax int *v3; // ecx v1 = (int)this; result = sub_5D5470(this); if ( result ) { v3 = *(int **)(v1 + 272); if ( v3 ) { sub_547C20(v3, result); result = sub_8F2F90(v1); } } return result; } //----- (005C2150) -------------------------------------------------------- int __thiscall sub_5C2150(_DWORD **this) { return (*(int (**)(void))(*this[92] + 472))(); } //----- (005C2170) -------------------------------------------------------- int __thiscall sub_5C2170(_DWORD **this) { return (*(int (**)(void))(*this[93] + 472))(); } //----- (005C21D0) -------------------------------------------------------- char __thiscall sub_5C21D0(volatile LONG *this) { volatile LONG *v1; // esi v1 = this; sub_4B83D0(*((_DWORD **)this + 74)); return sub_8F2BC0(v1, 1, 0, 0); } //----- (005C21F0) -------------------------------------------------------- int __thiscall sub_5C21F0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(void *))(*this[98] + 460))(&unk_9E090B); (*(void (__stdcall **)(void *))(*v1[99] + 460))(&unk_9E0912); (*(void (__stdcall **)(void *))(*v1[100] + 460))(&unk_9E0913); (*(void (__stdcall **)(void *))(*v1[101] + 460))(&unk_9E0921); (*(void (__stdcall **)(signed int))(*v1[98] + 488))(1); (*(void (__stdcall **)(signed int))(*v1[99] + 488))(1); (*(void (__stdcall **)(signed int))(*v1[100] + 488))(1); (*(void (__stdcall **)(signed int))(*v1[101] + 488))(1); (*(void (__stdcall **)(const char *))(*v1[106] + 472))("0"); (*(void (__stdcall **)(const char *))(*v1[107] + 472))("0"); (*(void (__stdcall **)(const char *))(*v1[108] + 472))("0"); (*(void (__stdcall **)(const char *))(*v1[109] + 472))("0"); sub_459960(v1[98], 1); sub_459960(v1[101], 1); sub_459960(v1[100], 1); sub_459960(v1[99], 1); return (*(int (__stdcall **)(signed int))(*v1[89] + 240))(1); } //----- (005C2330) -------------------------------------------------------- int __thiscall sub_5C2330(_DWORD **this, __int64 a2) { _DWORD **v2; // esi int v3; // ST38_4 int v4; // ST40_4 int v5; // ST3C_4 int v6; // edi char v8; // [esp+18h] [ebp-44h] v2 = this; v3 = sub_680F60(a2); v4 = sub_680F00(a2); v5 = sub_680EB0(a2); v6 = sub_680E90(a2); _itoa(v3, &v8, 10); (*(void (__stdcall **)(char *))(*v2[106] + 472))(&v8); _itoa(v4, &v8, 10); (*(void (__stdcall **)(char *))(*v2[107] + 472))(&v8); _itoa(v5, &v8, 10); (*(void (__stdcall **)(char *))(*v2[108] + 472))(&v8); _itoa(v6, &v8, 10); return (*(int (__stdcall **)(char *))(*v2[109] + 472))(&v8); } //----- (005C2420) -------------------------------------------------------- char __thiscall sub_5C2420(_DWORD **this) { _DWORD **v1; // esi _BYTE *v2; // ecx v1 = this; (*(void (__stdcall **)(signed int))(*this[89] + 240))(1); v2 = v1[98]; *((_BYTE *)v1 + 640) = 0; sub_459960(v2, 1); sub_459960(v1[101], 1); sub_459960(v1[100], 1); return sub_459960(v1[99], 1); } //----- (005C2490) -------------------------------------------------------- char __thiscall sub_5C2490(_BYTE *this) { _BYTE *v1; // esi int v2; // eax v1 = this; sub_8F28C0(this); v1[640] = 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) LOBYTE(v2) = sub_4A8140(v2, 146); return v2; } //----- (005C24D0) -------------------------------------------------------- signed __int64 __thiscall sub_5C24D0(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi const char *v3; // eax const char *v4; // eax const char *v5; // eax const char *v6; // eax int v7; // ebx __int64 v8; // rax __int64 v9; // rax __int64 v10; // rax __int64 v11; // rax int v12; // eax int v14; // [esp+Ch] [ebp-3Ch] int v15; // [esp+10h] [ebp-38h] int v16; // [esp+14h] [ebp-34h] int v17; // [esp+18h] [ebp-30h] int v18; // [esp+1Ch] [ebp-2Ch] int v19; // [esp+20h] [ebp-28h] char v20; // [esp+24h] [ebp-24h] v2 = this; v3 = (const char *)(*(int (**)(void))(*this[98] + 452))(); v18 = atoi(v3); v4 = (const char *)(*(int (**)(void))(*v2[99] + 452))(); v19 = atoi(v4); v5 = (const char *)(*(int (**)(void))(*v2[100] + 452))(); v17 = atoi(v5); v6 = (const char *)(*(int (**)(void))(*v2[101] + 452))(); v7 = atoi(v6); v8 = sub_680E60(byte_AD9238); v15 = sub_680F60(v8); v9 = sub_680E60(byte_AD9238); v14 = sub_680F00(v9); v10 = sub_680E60(byte_AD9238); v16 = sub_680EB0(v10); v11 = sub_680E60(byte_AD9238); v12 = sub_680E90(v11); if ( v7 >= v12 ) { if ( v7 != v12 ) { v7 = v12; _itoa(v12, &v20, 10); (*(void (__stdcall **)(char *))(*v2[101] + 460))(&v20); *a2 = 1; } if ( v17 >= v16 ) { if ( v17 != v16 ) { v17 = v16; _itoa(v16, &v20, 10); (*(void (__stdcall **)(char *))(*v2[100] + 460))(&v20); *a2 = 1; } if ( v19 >= v14 ) { if ( v19 != v14 ) { v19 = v14; _itoa(v14, &v20, 10); (*(void (__stdcall **)(char *))(*v2[99] + 460))(&v20); *a2 = 1; } if ( v18 >= v15 && v18 != v15 ) { v18 = v15; _itoa(v15, &v20, 10); (*(void (__thiscall **)(_DWORD *, char *))(*v2[98] + 464))(v2[98], &v20); *a2 = 1; } } } } return sub_680FA0(v18, v19, v17, v7); } //----- (005C26C0) -------------------------------------------------------- char sub_5C26C0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "UserTrade"); return (char)v0; } //----- (005C26F0) -------------------------------------------------------- _DWORD *__thiscall sub_5C26F0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &UserTradeWin::`vftable'; v1[58] = &UserTradeWin::`vftable'; v1[135] = &PgWinDrop::`vftable'; v1[137] = 0; v2 = (int)(v1 + 138); *(_DWORD *)v2 = &DropContents::`vftable'; *(_DWORD *)(v2 + 64) = 0; *(_WORD *)(v2 + 60) = -1; v1[136] = v1 + 138; *((_BYTE *)v1 + 636) = 0; v1[156] = 0; v1[157] = 0; *((_BYTE *)v1 + 640) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9E0FA4: using guessed type void *UserTradeWin::`vftable'; // 9E0FC4: using guessed type void *UserTradeWin::`vftable'; //----- (005C2790) -------------------------------------------------------- char __thiscall sub_5C2790(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; LOBYTE(v3) = sub_6333F0(); if ( !(_BYTE)v3 ) { v3 = sub_5D5470((_DWORD *)v2[a2 + 123]); if ( v3 ) { v2[142] = 0; v2[140] = 7; v2[143] = v3; v2[144] = 0; v2[141] = a2; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 12))(v3); v2[154] = v3; v2[137] = v2; dword_BA6BCC = (int)(v2 + 135); } } return v3; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (005C2800) -------------------------------------------------------- char __thiscall sub_5C2800(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (005C2830) -------------------------------------------------------- char __thiscall sub_5C2830(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (005C2860) -------------------------------------------------------- char __thiscall sub_5C2860(int this) { int v1; // esi signed __int64 v2; // kr00_8 const CHAR *v3; // eax char v5; // [esp+7h] [ebp-1h] v1 = this; if ( *(_BYTE *)(this + 636) ) { v5 = 0; v2 = sub_5C24D0((_DWORD **)this, &v5); if ( v5 ) { v3 = sub_40C190(-723849162); sub_492060(*(_DWORD **)(v1 + 296), (int)v3); } sub_4B8320(*(_DWORD **)(v1 + 296), v2, SHIDWORD(v2)); *(_BYTE *)(v1 + 636) = 0; } sub_4B8370(*(_DWORD **)(v1 + 296)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 356) + 240))(0); sub_459960(*(_BYTE **)(v1 + 392), 0); sub_459960(*(_BYTE **)(v1 + 404), 0); sub_459960(*(_BYTE **)(v1 + 400), 0); return sub_459960(*(_BYTE **)(v1 + 396), 0); } //----- (005C2910) -------------------------------------------------------- char __thiscall sub_5C2910(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx int v5; // ecx int v6; // eax const CHAR *v7; // edi int v8; // esi int v9; // edi int v10; // eax int v11; // eax int v12; // eax _DWORD *v13; // eax int v14; // eax _DWORD *v15; // esi const CHAR *v16; // eax int v17; // [esp-Ch] [ebp-10h] v3 = this; if ( sub_6333F0() ) return 0; v5 = a2; v6 = *(_DWORD *)(a2 + 8); if ( v6 != 21 ) { if ( v6 ) return 0; v8 = *(_DWORD *)(a2 + 20); if ( v8 ) { v9 = *(_DWORD *)(v8 + 112); if ( v9 ) { if ( sub_74DFD0(&dword_AD9E70, *(_DWORD *)(v9 + 274)) || sub_74DF90(&dword_AD9E70, *(_DWORD *)(v9 + 274)) ) { if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v9 + 274)) != 1 ) goto LABEL_19; v11 = sub_6869F0((char *)v8); if ( sub_74DF20(&dword_AD9E70, *(_DWORD *)(v9 + 274), v11) ) goto LABEL_19; v12 = sub_6869F0((char *)v8); if ( sub_74DEC0(&dword_AD9E70, *(_DWORD *)(v9 + 274), v12) ) goto LABEL_19; } else { v10 = sub_6869F0((char *)v8); if ( !sub_74DDD0(&dword_AD9E70, *(_DWORD *)(v9 + 274), v10) ) { v17 = -2086507545; LABEL_24: v15 = (_DWORD *)v3[74]; v16 = sub_40C190(v17); sub_492060(v15, (int)v16); return 0; } } if ( sub_6869F0((char *)v8) == 1 ) { LABEL_19: v17 = -857857511; goto LABEL_24; } } v13 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v8 + 44))(v8); if ( v13 ) { v14 = *v13 & 0xFF; if ( v14 ) { if ( v14 != 255 ) { v17 = -1634432127; goto LABEL_24; } } } v5 = a2; } sub_4B8280((_DWORD *)v3[74], *(_BYTE *)(v5 + 12)); return 1; } v7 = sub_40A910(-655631893); if ( v3[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 4))(25, v7, v3 + 58); if ( v3[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 20))(25, v7, v3 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v3[58] + 20))(v3 + 58, 25, v7, v3 + 58); return 0; } // AD9E70: using guessed type int dword_AD9E70; //----- (005C2AC0) -------------------------------------------------------- void __thiscall sub_5C2AC0(_DWORD **this, float a2) { _DWORD **v2; // esi char v3; // al void (__stdcall *v4)(signed int); // edx char v5; // al void (__stdcall *v6)(signed int); // edx _DWORD *v7; // ecx signed __int64 v8; // kr00_8 const CHAR *v9; // eax double v10; // st7 char v11; // [esp+Fh] [ebp-1h] v2 = this; v3 = sub_6333E0(); v4 = *(void (__stdcall **)(signed int))(*v2[86] + 492); if ( v3 ) v4(1); else v4(0); v5 = sub_633410(); v6 = *(void (__stdcall **)(signed int))(*v2[87] + 492); if ( v5 ) v6(0); else v6(1); if ( !*((_BYTE *)v2 + 640) && sub_6333F0() && sub_6333E0() ) { v7 = v2[90]; *((_BYTE *)v2 + 640) = 1; (*(void (__stdcall **)(signed int))(*v7 + 240))(1); } v11 = 0; v8 = sub_5C24D0(v2, &v11); if ( v11 ) { v9 = sub_40C190(-723849162); sub_492060(v2[74], (int)v9); } v10 = a2; if ( *((_QWORD *)v2 + 78) != v8 ) { *((_QWORD *)v2 + 78) = v8; *((_BYTE *)v2 + 636) = 1; *((float *)v2 + 158) = v10 + 0.699999988079071; } if ( *((_BYTE *)v2 + 636) ) { if ( *((float *)v2 + 158) <= v10 ) { sub_4B8320(v2[74], v8, SHIDWORD(v8)); *((_BYTE *)v2 + 636) = 0; } } } //----- (005C2BF0) -------------------------------------------------------- char __thiscall sub_5C2BF0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // edi _DWORD *v6; // eax char result; // al v4 = this; if ( !*(_DWORD *)a2 || sub_5D5470(this) || !v4[113] || (v5 = *(_DWORD *)(*(_DWORD *)a2 + 4), *(_DWORD *)(v5 + 16)) || *(_DWORD *)(v5 + 8) || (v6 = (_DWORD *)sub_402BF0(v4), v4[113] != 1) ) { result = 0; } else { result = sub_5C2910(v6, v5, v4[112]); } return result; } //----- (005C2C50) -------------------------------------------------------- char __thiscall sub_5C2C50(int this, int a2, int a3) { char result; // al int v4; // esi result = a2 - 10; v4 = this; switch ( a2 ) { case 10: result = sub_5C2790((_DWORD *)this, a3); break; case 15: result = sub_5C2860(this); break; case 16: sub_4B83A0(*(_DWORD **)(this + 296)); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 360) + 240))(0); break; case 17: case 18: sub_4B83D0(*(_DWORD **)(this + 296)); result = sub_8F2BC0((volatile LONG *)v4, 1, 0, 0); break; case 19: result = sub_5C26C0(); break; default: return result; } return result; } //----- (005C2D00) -------------------------------------------------------- int __cdecl sub_5C2D00(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1C8u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_5D6D00((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = &UserTradeInvWin::`vftable'; *(_DWORD *)(v5 + 232) = &UserTradeInvWin::`vftable'; *(_DWORD *)(v5 + 448) = -1; *(_DWORD *)(v5 + 452) = 1; sub_5D5B70((_WORD *)v5, 0, 1); } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9E0D14: using guessed type void *UserTradeInvWin::`vftable'; // 9E0D34: using guessed type void *UserTradeInvWin::`vftable'; //----- (005C2E70) -------------------------------------------------------- volatile LONG *__cdecl sub_5C2E70(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x288u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5C26F0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005C2FA0) -------------------------------------------------------- char __thiscall sub_5C2FA0(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi int v16; // eax volatile LONG *v17; // eax volatile LONG v18; // edx const CHAR *v19; // eax volatile LONG **v20; // eax _WORD *v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // ecx volatile LONG **v26; // eax int v27; // eax volatile LONG *v28; // eax int v29; // edx int v30; // eax volatile LONG *v31; // eax int v32; // ecx volatile LONG **v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // edx int v38; // eax volatile LONG **v39; // edx int v40; // eax volatile LONG *v41; // eax volatile LONG v42; // edx volatile LONG *v43; // eax volatile LONG **v44; // edx int v45; // eax volatile LONG **v46; // edx int v47; // eax volatile LONG *v48; // eax volatile LONG v49; // edx const CHAR *v50; // eax volatile LONG *v51; // eax volatile LONG **v52; // ecx int v53; // eax volatile LONG **v54; // edx int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx volatile LONG *v58; // eax int v59; // eax volatile LONG **v60; // edx int v61; // eax volatile LONG *v62; // eax volatile LONG v63; // edx const CHAR *v64; // eax volatile LONG *v65; // eax volatile LONG **v66; // ecx int v67; // eax volatile LONG **v68; // edx int v69; // eax volatile LONG *v70; // eax volatile LONG v71; // edx const CHAR *v72; // eax volatile LONG *v73; // eax void (__thiscall *v74)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v75)(_DWORD, signed int); // esi int v76[5]; // [esp+74h] [ebp-64h] int v77; // [esp+88h] [ebp-50h] int v78; // [esp+8Ch] [ebp-4Ch] volatile LONG *v79; // [esp+90h] [ebp-48h] int v80; // [esp+94h] [ebp-44h] int v81; // [esp+98h] [ebp-40h] int v82; // [esp+9Ch] [ebp-3Ch] volatile LONG **v83; // [esp+A0h] [ebp-38h] char v84; // [esp+A4h] [ebp-34h] int v85; // [esp+D4h] [ebp-4h] v2 = (int)this; v80 = 0; v3 = dword_BA6BA0; v85 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\UserTrade.nif"); sub_8F66B0(v4, (int)&v80, v3); if ( !v80 ) return 0; v5 = sub_8FB140(v80, (int)"Frame", (int)&v82, (int)&v81, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"UserTradeWin", 0) ) { LABEL_5: v6 = (void (__thiscall ***)(_DWORD, signed int))v80; v85 = -1; if ( v80 && !InterlockedDecrement((volatile LONG *)(v80 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v82; v9 = v81; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v80, (int)"Theme", (int)&v82, (int)&v81, v10); else v11 = sub_8FB140(v80, (int)"Theme", (int)&v82, (int)&v81, 0); sub_8F3EB0(v82 - v8, v81 - v9, (int)v11, v2, 0, 0); v83 = sub_8FB140(v80, (int)"ClsNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"ClsClick"); sub_8FB650(v83, v80, (int)"ClsOver"); *(_DWORD *)(v2 + 440) = sub_8FE0F0(v82 - v8, v81 - v9, (int)v83, v2, 18, 0, 0); v79 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v80 + 72))("HelpLinkNor") ) { v83 = sub_8FB140(v80, (int)"HelpLinkNor", (int)&v82, (int)&v81, v79); sub_8FB650(v83, v80, (int)"HelpLinkClick"); sub_8FB650(v83, v80, (int)"HelpLinkOver"); sub_8FE0F0(v82 - v8, v81 - v9, (int)v83, v2, 19, 0, 0); } v12 = sub_8FB140(v80, (int)"Panel01", (int)&v82, (int)&v81, 0); v13 = sub_8F3EB0(v82 - v8, v81 - v9, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v80, (int)"Panel02", (int)&v82, (int)&v81, 0); sub_8F3EB0(v82 - v8, v81 - v9, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v80, (int)"WinTitle", &v82, &v81, &v77, &v78) ) goto LABEL_34; v16 = sub_421050(0); v17 = sub_8F4A20(v82 - v8, v81 - v9 + 1, v77, v78, v16, v2, 0, 0); v18 = *v17; v83 = (volatile LONG **)v17; (*(void (__thiscall **)(volatile LONG *, signed int))(v18 + 488))(v17, 1); (*((void (__stdcall **)(int *))*v83 + 117))(&dword_AA8D98); v79 = *v83 + 118; v19 = sub_40C190(-1476858647); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v83, v19); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); v83 = 0; v79 = (volatile LONG *)(v2 + 444); do { sprintf(&v84, "OtherSlot%03d", v83); v20 = sub_8FB140(v80, (int)&v84, (int)&v82, (int)&v81, 0); sub_8F3EB0(v82 - v8, v81 - v9, (int)v20, v2, 0, 0); v21 = (_WORD *)sub_5C2D00(v82 - v8 + 1, v81 - v9 + 1, (int)v83, v2); *v79 = (volatile LONG)v21; sub_5D5B70(v21, 0, 1); v22 = v79; *(_DWORD *)(*v79 + 452) = 0; *(_DWORD *)(*v22 + 272) = dword_ACEC34; v83 = (volatile LONG **)((char *)v83 + 1); v79 = v22 + 1; } while ( (signed int)v83 < 12 ); v79 = 0; v83 = (volatile LONG **)(v2 + 492); do { sprintf(&v84, "MySlot%03d", v79); v23 = sub_8FB140(v80, (int)&v84, (int)&v82, (int)&v81, 0); sub_8F3EB0(v82 - v8, v81 - v9, (int)v23, v2, 0, 0); v24 = (volatile LONG *)sub_5C2D00(v82 - v8 + 1, v81 - v9 + 1, (int)v79, v2); *v83 = v24; sub_5D5B70(v24, 0, 1); v25 = v83; *((_DWORD *)*v83 + 113) = 1; (*(void (__stdcall **)(signed int))(**v25 + 516))(10); (*(void (__stdcall **)(signed int))(**v83 + 560))(11); v26 = v83; *((_DWORD *)*v83 + 68) = dword_ACEC34; *((_BYTE *)*v26 + 254) = 1; v79 = (volatile LONG *)((char *)v79 + 1); v83 = v26 + 1; } while ( (signed int)v79 < 12 ); if ( sub_8F71E0(v80, (int)"OtherName", &v82, &v81, &v77, &v78) ) { v27 = sub_421050(0); v28 = sub_8F4A20(v82 - v8, v81 - v9, v77, v78, v27, v2, 0, 0); v29 = v80; *(_DWORD *)(v2 + 368) = v28; if ( !sub_8F71E0(v29, (int)"MyName", &v82, &v81, &v77, &v78) ) goto LABEL_5; v30 = sub_421050(0); v31 = sub_8F4A20(v82 - v8, v81 - v9, v77, v78, v30, v2, 0, 0); v32 = v80; *(_DWORD *)(v2 + 372) = v31; v33 = sub_8FB140(v32, (int)"IconSlot", (int)&v82, (int)&v81, 0); sub_8F3EB0(v82 - v8, v81 - v9, (int)v33, v2, 0, 0); v34 = sub_8FB140(v80, (int)"Object01", (int)&v82, (int)&v81, 0); v35 = sub_8F3EB0(v82 - v8, v81 - v9, (int)v34, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v83 = sub_8FB140(v80, (int)"OtherLockNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"OtherLockLock"); v36 = sub_8F3EB0(v82 - v8, v81 - v9, (int)v83, v2, 0, 0); v37 = v83; *(_DWORD *)(v2 + 344) = v36; v38 = *v37[9]; v39 = *(volatile LONG ***)(v38 + 20); v79 = *(volatile LONG **)(v38 + 24); v83 = v39; v40 = sub_421050(0); v41 = sub_8F4A20(v82 - v8, v81 - v9, (int)v83, (int)v79, v40, v2, 0, 0); v42 = *v41; v83 = (volatile LONG **)v41; (*(void (__thiscall **)(volatile LONG *, signed int))(v42 + 488))(v41, 5); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); v83 = sub_8FB140(v80, (int)"OtherOKNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"OtherOKOff"); v43 = sub_8F3EB0(v82 - v8, v81 - v9, (int)v83, v2, 0, 0); v44 = v83; *(_DWORD *)(v2 + 348) = v43; v45 = *v44[9]; v46 = *(volatile LONG ***)(v45 + 20); v79 = *(volatile LONG **)(v45 + 24); v83 = v46; v47 = sub_421050(0); v48 = sub_8F4A20(v82 - v8, v81 - v9, (int)v83, (int)v79, v47, v2, 0, 0); v49 = *v48; v83 = (volatile LONG **)v48; (*(void (__thiscall **)(volatile LONG *, signed int))(v49 + 488))(v48, 5); v79 = *v83 + 118; v50 = sub_40C190(758616462); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v83, v50); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); v83 = sub_8FB140(v80, (int)"MyLockNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"MyLockOver"); sub_8FB650(v83, v80, (int)"MyLockClick"); sub_8FB650(v83, v80, (int)"MyLockLock"); v51 = sub_8FE0F0(v82 - v8, v81 - v9, (int)v83, v2, 15, 0, 0); v52 = v83; *(_DWORD *)(v2 + 356) = v51; v53 = *v52[9]; v54 = *(volatile LONG ***)(v53 + 20); v79 = *(volatile LONG **)(v53 + 24); v83 = v54; v55 = sub_421050(0); v56 = sub_8F4A20(v82 - v8, v81 - v9, (int)v83, (int)v79, v55, v2, 0, 0); v57 = *v56; v83 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); v83 = sub_8FB140(v80, (int)"MyOKNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"MyOKClick"); sub_8FB650(v83, v80, (int)"MyOKClick"); sub_8FB650(v83, v80, (int)"MyOKOff"); v58 = sub_8FE0F0(v82 - v8, v81 - v9, (int)v83, v2, 16, 0, 0); *(_DWORD *)(v2 + 360) = v58; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v58 + 240))(v58, 0); v59 = *v83[9]; v60 = *(volatile LONG ***)(v59 + 20); v79 = *(volatile LONG **)(v59 + 24); v83 = v60; v61 = sub_421050(0); v62 = sub_8F4A20(v82 - v8, v81 - v9, (int)v83, (int)v79, v61, v2, 0, 0); v63 = *v62; v83 = (volatile LONG **)v62; (*(void (__thiscall **)(volatile LONG *, signed int))(v63 + 488))(v62, 5); v79 = *v83 + 118; v64 = sub_40C190(758616462); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v83, v64); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); v83 = sub_8FB140(v80, (int)"MyCancelNor", (int)&v82, (int)&v81, 0); sub_8FB650(v83, v80, (int)"MyCancelClick"); sub_8FB650(v83, v80, (int)"MyCancelClick"); sub_8FB650(v83, v80, (int)"MyCancelOff"); v65 = sub_8FE0F0(v82 - v8, v81 - v9, (int)v83, v2, 17, 0, 0); v66 = v83; *(_DWORD *)(v2 + 364) = v65; v67 = *v66[9]; v68 = *(volatile LONG ***)(v67 + 20); v79 = *(volatile LONG **)(v67 + 24); v83 = v68; v69 = sub_421050(0); v70 = sub_8F4A20(v82 - v8, v81 - v9, (int)v83, (int)v79, v69, v2, 0, 0); v71 = *v70; v83 = (volatile LONG **)v70; (*(void (__thiscall **)(volatile LONG *, signed int))(v71 + 488))(v70, 5); v79 = *v83 + 118; v72 = sub_40C190(-488117258); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v79)(v83, v72); (*((void (__stdcall **)(_DWORD))*v83 + 60))(0); sub_456260(v76); LOBYTE(v85) = 1; sub_456000(v76, v8, v9); sub_455FF0(v76, v2); sub_456380(v76, v80); *(_DWORD *)(v2 + 376) = sub_4563D0( v76, 0, (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", 0); *(_DWORD *)(v2 + 380) = sub_4563D0( v76, 0, (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", 0); *(_DWORD *)(v2 + 384) = sub_4563D0( v76, 0, (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", 0); *(_DWORD *)(v2 + 388) = sub_4563D0(v76, 0, (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", 0); *(_DWORD *)(v2 + 392) = sub_4565F0(v76, (int)"MyCopperInput", 3, 1342185472, 0, 1); *(_DWORD *)(v2 + 396) = sub_4565F0(v76, (int)"MySilverInput", 3, 1342185472, 0, 1); *(_DWORD *)(v2 + 400) = sub_4565F0(v76, (int)"MyGoldInput", 3, 1342185472, 0, 1); *(_DWORD *)(v2 + 404) = sub_4565F0(v76, (int)"MyGemInput", 3, 1342185472, 0, 1); *(_DWORD *)(v2 + 408) = sub_4563D0( v76, 0, (int)"OtherCopperBtn", (int)"OtherCopperBtn", (int)"OtherCopperBtn", (int)"OtherCopperBtn", 0); *(_DWORD *)(v2 + 412) = sub_4563D0( v76, 0, (int)"OtherSilverBtn", (int)"OtherSilverBtn", (int)"OtherSilverBtn", (int)"OtherSilverBtn", 0); *(_DWORD *)(v2 + 416) = sub_4563D0( v76, 0, (int)"OtherGoldBtn", (int)"OtherGoldBtn", (int)"OtherGoldBtn", (int)"OtherGoldBtn", 0); *(_DWORD *)(v2 + 420) = sub_4563D0( v76, 0, (int)"OtherGemBtn", (int)"OtherGemBtn", (int)"OtherGemBtn", (int)"OtherGemBtn", 0); *(_DWORD *)(v2 + 424) = sub_456980( v76, (int)"OtherCopperInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 428) = sub_456980( v76, (int)"OtherSilverInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 432) = sub_456980( v76, (int)"OtherGoldInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v73 = sub_456980( v76, (int)"OtherGemInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v74 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 436) = v73; v74(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v85) = 0; sub_4562E0(v76); v85 = -1; if ( v80 ) { v75 = (void (__thiscall ***)(_DWORD, signed int))v80; if ( !InterlockedDecrement((volatile LONG *)(v80 + 4)) ) { if ( v75 ) (**v75)(v75, 1); } } result = 1; } else { LABEL_34: v15 = (void (__thiscall ***)(_DWORD, signed int))v80; v85 = -1; if ( v80 && !InterlockedDecrement((volatile LONG *)(v80 + 4)) && v15 ) (**v15)(v15, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (005C3D70) -------------------------------------------------------- void *__thiscall sub_5C3D70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &UserTradeInvWin::`vftable'; *((_DWORD *)this + 58) = &UserTradeInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E0D14: using guessed type void *UserTradeInvWin::`vftable'; // 9E0D34: using guessed type void *UserTradeInvWin::`vftable'; //----- (005C3DB0) -------------------------------------------------------- void *__thiscall sub_5C3DB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &UserTradeWin::`vftable'; *((_DWORD *)this + 58) = &UserTradeWin::`vftable'; *((_DWORD *)this + 138) = &DropContents::`vftable'; *((_DWORD *)this + 135) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9E0FA4: using guessed type void *UserTradeWin::`vftable'; // 9E0FC4: using guessed type void *UserTradeWin::`vftable'; //----- (005C3E00) -------------------------------------------------------- int __thiscall sub_5C3E00(void *this) { return (*(int (__stdcall **)(signed int))(*(_DWORD *)this + 256))(1); } //----- (005C3E10) -------------------------------------------------------- void __thiscall sub_5C3E10(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // edi char v4; // al v1 = this; if ( this[96] ) { v2 = (int *)this[96]; v3 = *v2; v4 = (*(int (**)(void))(*v2 + 260))(); (*(void (__thiscall **)(_DWORD, bool))(v3 + 256))(v1[96], v4 == 0); } } //----- (005C3E80) -------------------------------------------------------- int __thiscall sub_5C3E80(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; result = ((int (*)(void))(*this)[65])(); if ( (_BYTE)result != 1 ) { if ( v2[86] ) result = (*(int (__stdcall **)(int))(*v2[86] + 472))(a2); } return result; } //----- (005C3EE0) -------------------------------------------------------- int __thiscall sub_5C3EE0(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; result = ((int (*)(void))(*this)[65])(); if ( (_BYTE)result != 1 ) { if ( v2[87] ) result = (*(int (__stdcall **)(int))(*v2[87] + 472))(a2); } return result; } //----- (005C3FA0) -------------------------------------------------------- char __thiscall sub_5C3FA0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[97]; *((_BYTE *)v1 + 428) = 0; *((_BYTE *)v1 + 430) = 0; if ( v2 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 488))(1); return sub_8F86A0(&unk_BA6B10, v1); } //----- (005C3FE0) -------------------------------------------------------- int __thiscall sub_5C3FE0(_BYTE *this) { _BYTE *v1; // esi _DWORD *v2; // eax v1 = this; if ( !this[429] ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { *((_DWORD *)v1 + 108) = 2; sub_4BFE90(v2, 2); } } (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v1 + 256))(v1, 0); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 97) + 488))(1); return (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v1 + 544))(v1); } //----- (005C4040) -------------------------------------------------------- int __thiscall sub_5C4040(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[97]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 460))(a2); return result; } //----- (005C4080) -------------------------------------------------------- int __thiscall sub_5C4080(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[97]; *((_BYTE *)v1 + 430) = 0; (*(void (__stdcall **)(void *))(*(_DWORD *)v2 + 460))(&unk_9E120B); return (*(int (**)(void))(*(_DWORD *)v1[97] + 480))(); } //----- (005C40B0) -------------------------------------------------------- int __thiscall sub_5C40B0(int this, int a2) { *(_DWORD *)(this + 436) = a2; *(_BYTE *)(this + 430) = 1; return (*(int (__stdcall **)(signed int))(**(_DWORD **)(this + 388) + 488))(1); } //----- (005C40E0) -------------------------------------------------------- char *__thiscall sub_5C40E0(char *this) { char *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 95) = 0; *((_DWORD *)v1 + 96) = 0; *(_DWORD *)v1 = &VoteWin::`vftable'; *((_DWORD *)v1 + 58) = &VoteWin::`vftable'; *((_DWORD *)v1 + 97) = 0; v1[428] = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 90) = 0; *((_DWORD *)v1 + 91) = 0; *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 94) = 0; *(_WORD *)(v1 + 429) = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E12D0: using guessed type void *VoteWin::`vftable'; // 9E12EC: using guessed type void *VoteWin::`vftable'; //----- (005C4200) -------------------------------------------------------- void __thiscall sub_5C4200(int this, int a2) { _DWORD **v2; // ebx __time32_t v3; // esi __time32_t v4; // eax float v5; // ST14_4 int v6; // esi char *v7; // eax char *v8; // eax float v9; // [esp+4h] [ebp-2Ch] struct tm Tm; // [esp+8h] [ebp-28h] v2 = (_DWORD **)this; if ( *(_BYTE *)(this + 428) ) { qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v3 = _mktime32((struct tm *)(this + 392)); v4 = _mktime32(&Tm); v5 = flt_ACCFCC - flt_ACCFD8; v9 = (double)(v3 - v4) - v5; if ( v9 <= 0.0 ) { ((void (__thiscall *)(_DWORD **))(*v2)[136])(v2); } else if ( v2[88] ) { v6 = *v2[88]; v7 = (char *)sub_40A910(-1984443940); v8 = sub_7549E0(v7, (signed int)v9); (*(void (__thiscall **)(_DWORD *, char *))(v6 + 472))(v2[88], v8); } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACCFD8: using guessed type float flt_ACCFD8; //----- (005C4300) -------------------------------------------------------- int __thiscall sub_5C4300(int this, char a2) { int v2; // esi int v3; // edi int v4; // ecx int v5; // edi const CHAR *v6; // eax int v7; // edi const CHAR *v8; // eax int result; // eax int v10; // ST00_4 int v11; // eax int v12; // edi const CHAR *v13; // eax int v14; // edi const CHAR *v15; // eax v2 = this; *(_BYTE *)(this + 429) = a2; if ( a2 ) { *(_BYTE *)(this + 430) = 1; v3 = sub_5C55E0(1); if ( v3 ) { v4 = *(_DWORD *)(v2 + 356); *(_DWORD *)(v2 + 436) = 1; (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 472))(v3 + 1); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 388) + 460))(v3 + 65); } v5 = **(_DWORD **)(v2 + 360); v6 = sub_40A910(-1159011804); (*(void (__thiscall **)(_DWORD, const CHAR *))(v5 + 472))(*(_DWORD *)(v2 + 360), v6); v7 = **(_DWORD **)(v2 + 364); v8 = sub_40A910(-1494818857); (*(void (__thiscall **)(_DWORD, const CHAR *))(v7 + 472))(*(_DWORD *)(v2 + 364), v8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 376) + 240))(1); result = (*(int (__cdecl **)(signed int))(**(_DWORD **)(v2 + 376) + 256))(1); } else { v10 = *(_DWORD *)(this + 436) + 1; *(_BYTE *)(this + 430) = 0; *(_BYTE *)(this + 428) = 1; v11 = sub_5C55E0(v10); if ( v11 ) (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 356) + 472))(v11 + 1); v12 = **(_DWORD **)(v2 + 360); v13 = sub_40A910(2040123889); (*(void (__thiscall **)(_DWORD, const CHAR *))(v12 + 472))(*(_DWORD *)(v2 + 360), v13); v14 = **(_DWORD **)(v2 + 364); v15 = sub_40A910(-1074932174); (*(void (__thiscall **)(_DWORD, const CHAR *))(v14 + 472))(*(_DWORD *)(v2 + 364), v15); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 352) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); result = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v2 + 376) + 256))(0); } return result; } //----- (005C4540) -------------------------------------------------------- int __thiscall sub_5C4540(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // eax _DWORD *v5; // eax int v6; // ecx int v7; // eax int v8; // ecx v2 = this; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { v4 = v2[8]; *(_BYTE *)(v4 + 430) = 1; *(_DWORD *)(v4 + 436) = a2; (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v4 + 388) + 488))(*(_DWORD *)(v4 + 388), 1); v5 = &v2[7 * a2 + 74]; if ( v2[7 * a2 + 79] >= 0x10u ) v5 = (_DWORD *)*v5; v6 = v2[8]; if ( *(_DWORD *)(v6 + 356) ) (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)(v6 + 356) + 472))(v5); v7 = sub_5C55E0(a2 + 1); if ( v7 ) { v8 = *(_DWORD *)(v2[8] + 388); if ( v8 ) (*(void (__stdcall **)(int))(*(_DWORD *)v8 + 460))(v7 + 65); } result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 256))(v2, 0); } return result; } //----- (005C4600) -------------------------------------------------------- void __thiscall sub_5C4600(void *this, float a2) { int v2; // esi int v3; // eax v2 = (int)this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) *(_BYTE *)(v3 + 2659) = 0; (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 544))(v2); } sub_5C4200(v2, SLODWORD(a2)); } // ACDC84: using guessed type int dword_ACDC84; //----- (005C4750) -------------------------------------------------------- int __thiscall sub_5C4750(_DWORD *this, int a2, int a3) { int result; // eax if ( !a2 ) result = sub_5C4540(this, a3); return result; } //----- (005C4770) -------------------------------------------------------- volatile LONG *__cdecl sub_5C4770(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1B8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_5C40E0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005C48A0) -------------------------------------------------------- volatile LONG *__cdecl sub_5C48A0(int a1, void (__thiscall **a2)(void *)) { volatile LONG *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi volatile LONG *result; // eax void (__thiscall *v6)(void *); // [esp-8h] [ebp-28h] void (__thiscall *v7)(void *); // [esp-4h] [ebp-24h] void *v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v9 = 0; v2 = (volatile LONG *)operator new(0x1B4u); v3 = v2; v8 = (void *)v2; LOBYTE(v9) = 1; if ( v2 ) { sub_8F3C20(v2); v7 = sub_636A10; v6 = sub_401C00; LOBYTE(v9) = 2; *v3 = (volatile LONG)&VoteReasonWin::`vftable'; *((_DWORD *)v3 + 58) = &VoteReasonWin::`vftable'; `eh vector constructor iterator'((void *)(v3 + 74), 0x1Cu, 5, v6, v7); } else { v3 = 0; } v8 = (void *)v3; if ( v3 ) InterlockedIncrement(v3 + 1); LOBYTE(v9) = 3; sub_403790(&unk_BA6B10, (int)v3); v7 = (void (__thiscall *)(void *))a2; v6 = (void (__thiscall *)(void *))a1; a2 = &v6; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, void (__thiscall *)(void *), void (__thiscall *)(void *)))(*v3 + 516))( v3, v6, v7) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) && a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &a2, v3); if ( a2 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)a2 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) ) { if ( a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); } result = 0; } return result; } // 9E1514: using guessed type void *VoteReasonWin::`vftable'; // 9E1534: using guessed type void *VoteReasonWin::`vftable'; //----- (005C4A60) -------------------------------------------------------- char __thiscall sub_5C4A60(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG *v8; // eax volatile LONG *v9; // eax char v10; // ST38_1 int v11; // ST3C_4 int v12; // ST40_4 int v13; // ST44_4 const CHAR *v14; // eax volatile LONG *v15; // ebx volatile LONG v16; // edi int v17; // eax int v18; // eax char v19; // ST30_1 int v20; // ST34_4 int v21; // ST38_4 int v22; // ST3C_4 const CHAR *v23; // eax volatile LONG *v24; // ebx volatile LONG v25; // edi int v26; // eax volatile LONG *v27; // eax volatile LONG v28; // edi int v29; // eax char v30; // ST30_1 int v31; // ST34_4 int v32; // ST38_4 int v33; // ST3C_4 const CHAR *v34; // eax volatile LONG *v35; // ebx volatile LONG v36; // edi int v37; // eax volatile LONG *v38; // eax volatile LONG v39; // edi int v40; // eax int v41; // edi void (__thiscall ***v42)(_DWORD, signed int); // esi int v43; // ST40_4 int v44; // ebx int v45; // ST3C_4 int v46; // ST38_4 int v47; // eax volatile LONG *v48; // eax volatile LONG *v49; // eax volatile LONG *v50; // eax const char *v51; // eax volatile LONG *v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // eax volatile LONG *v55; // edi int v56; // ST44_4 int v57; // ST40_4 int v58; // ST3C_4 int v59; // eax volatile LONG *v60; // eax int v61; // edi const CHAR *v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // edi int v65; // ST40_4 int v66; // ST3C_4 int v67; // ST38_4 int v68; // eax volatile LONG *v69; // eax int v70; // edi const CHAR *v71; // eax int v72; // [esp+4Ch] [ebp-44h] void (__thiscall **v73)(void *); // [esp+50h] [ebp-40h] int v74[5]; // [esp+5Ch] [ebp-34h] int v75; // [esp+70h] [ebp-20h] int v76; // [esp+74h] [ebp-1Ch] int v77; // [esp+78h] [ebp-18h] int v78; // [esp+7Ch] [ebp-14h] int v79; // [esp+80h] [ebp-10h] int v80; // [esp+8Ch] [ebp-4h] v2 = (int)this; v79 = 0; v3 = dword_BA6BA0; v80 = 0; v75 = 0; v76 = 0; v77 = 0; v78 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\KQVote.nif"); sub_8F66B0(v4, (int)&v79, v3); if ( !v79 ) return 0; v5 = sub_8FB140(v79, (int)"Frame", (int)&v77, (int)&v78, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"VoteWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v79; v80 = -1; if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v74); LOBYTE(v80) = 1; sub_455FF0(v74, v2); sub_456000(v74, 0, 0); sub_456380(v74, v79); v8 = (volatile LONG *)sub_43D0D0(0x13u); v9 = sub_456820(v74, (int)"Theme", v8); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); sub_456820(v74, (int)"Panel01", 0); v10 = dword_AA8C68; v11 = dword_AA8C6C; v12 = dword_AA8C70; v13 = dword_AA8C74; v14 = sub_40A910(-1818915935); v15 = sub_456760(v74, (int)"WinTitle", (int)v14, v10, v11, v12, v13, 5); v16 = *v15; v17 = sub_421050(0); (*(void (__thiscall **)(volatile LONG *, int))(v16 + 452))(v15, v17); sub_4564D0(v74, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); v18 = sub_43D0D0(4u); sub_456B30(v74, 4, "HelpLink", v18, 3); v19 = dword_AA8C68; v20 = dword_AA8C6C; v21 = dword_AA8C70; v22 = dword_AA8C74; v23 = sub_40A910(-436877088); v24 = sub_456980(v74, (int)"User", (int)v23, 0, v19, v20, v21, v22, 5, 0, 0); v25 = *v24; v26 = sub_421050(0); (*(void (__thiscall **)(volatile LONG *, int))(v25 + 452))(v24, v26); v27 = sub_456760(v74, (int)"Text01", (int)&unk_9E11FA, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); *(_DWORD *)(v2 + 344) = v27; v28 = *v27; v29 = sub_421050(0); (*(void (__thiscall **)(_DWORD, int))(v28 + 452))(*(_DWORD *)(v2 + 344), v29); v30 = dword_AA8C68; v31 = dword_AA8C6C; v32 = dword_AA8C70; v33 = dword_AA8C74; v34 = sub_40A910(-1800372275); v35 = sub_456980(v74, (int)"TargetName", (int)v34, 0, v30, v31, v32, v33, 5, 0, 0); v36 = *v35; v37 = sub_421050(0); (*(void (__thiscall **)(volatile LONG *, int))(v36 + 452))(v35, v37); v38 = sub_456760(v74, (int)"Text02", (int)&unk_9E11FB, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); *(_DWORD *)(v2 + 348) = v38; v39 = *v38; v40 = sub_421050(0); (*(void (__thiscall **)(_DWORD, int))(v39 + 452))(*(_DWORD *)(v2 + 348), v40); *(_DWORD *)(v2 + 368) = sub_456B30(v74, 2, "Reason01", 0, 3); *(_DWORD *)(v2 + 372) = sub_456B30(v74, 2, "Reason", 0, 3); v41 = sub_5C55E0(1); if ( v41 ) { v43 = *(_DWORD *)(v2 + 372); v44 = *(_DWORD *)(v2 + 372); v45 = sub_421050(0); v46 = (*(int (__thiscall **)(int))(*(_DWORD *)v44 + 148))(v44); v47 = (*(int (__thiscall **)(int))(*(_DWORD *)v44 + 144))(v44); v48 = sub_8F4A20(0, 0, v47, v46, v45, v43, 0, 0); *(_DWORD *)(v2 + 356) = v48; (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 356) + 472))(v41 + 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); if ( sub_8F71E0(v79, (int)"Text04", &v77, &v78, &v75, &v76) ) { v49 = sub_45A900(v77, v78 + 2, v75, v76, v2, 1342181380, 50, 0, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 388), (int)v49); sub_459B60(*(_DWORD **)(v2 + 388), 1); (*(void (__thiscall **)(_DWORD, int, int, void (__thiscall **)(void *)))(**(_DWORD **)(v2 + 388) + 460))( *(_DWORD *)(v2 + 388), v41 + 65, v72, v73); v50 = sub_8FE250(v77, v78 + 2, v75, v76, v2, 3, 0, 0); *(_DWORD *)(v2 + 376) = v50; *((_DWORD *)v50 + 68) = dword_AD01E8; v51 = sub_40A910(-621088573); sub_8F2EA0(*(void ***)(v2 + 376), v51); v73 = (void (__thiscall **)(void *))v2; v72 = v79; if ( v79 ) InterlockedIncrement((volatile LONG *)(v79 + 4)); v52 = sub_5C48A0(v72, v73); *(_DWORD *)(v2 + 384) = v52; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 256))(v52, 0); v53 = sub_456760(v74, (int)"Text07", (int)&unk_9E120A, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v72 = 3; *(_DWORD *)(v2 + 352) = v53; v54 = sub_456B30(v74, 0, "Btn01", 0, v72); v72 = 0; v55 = v54; v56 = (int)v54; v57 = sub_421050(0); v58 = (*(int (__thiscall **)(volatile LONG *))(*v55 + 148))(v55); v59 = (*(int (__thiscall **)(volatile LONG *))(*v55 + 144))(v55); v60 = sub_8F4A20(0, 0, v59, v58, v57, v56, 0, v72); *(_DWORD *)(v2 + 360) = v60; (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 488))(v60, 5); v61 = **(_DWORD **)(v2 + 360); v62 = sub_40A910(-1159011804); (*(void (__thiscall **)(_DWORD, const CHAR *))(v61 + 472))(*(_DWORD *)(v2 + 360), v62); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 360) + 240))(0); v63 = sub_456B30(v74, 1, "Btn02", 0, 3); v64 = v63; v65 = (int)v63; v66 = sub_421050(0); v67 = (*(int (__thiscall **)(volatile LONG *))(*v64 + 148))(v64); v68 = (*(int (__thiscall **)(volatile LONG *))(*v64 + 144))(v64); v69 = sub_8F4A20(0, 0, v68, v67, v66, v65, 0, 0); *(_DWORD *)(v2 + 364) = v69; (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 488))(v69, 5); v70 = **(_DWORD **)(v2 + 364); v71 = sub_40A910(-1494818857); (*(void (__thiscall **)(_DWORD, const CHAR *))(v70 + 472))(*(_DWORD *)(v2 + 364), v71); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 364) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.5); LOBYTE(v80) = 0; sub_4562E0(v74); v80 = -1; sub_410C00(&v79); result = 1; } else { LOBYTE(v80) = 0; sub_4562E0(v74); v80 = -1; sub_410C00(&v79); result = 0; } } else { LOBYTE(v80) = 0; sub_4562E0(v74); v42 = (void (__thiscall ***)(_DWORD, signed int))v79; v80 = -1; if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) && v42 ) (**v42)(v42, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005C51C0) -------------------------------------------------------- _DWORD *__thiscall sub_5C51C0(_DWORD **this) { _DWORD **v1; // esi _DWORD *result; // eax const char *v3; // eax char *v4; // edi int (*v5)(void); // eax const char *v6; // eax int v7; // [esp-34h] [ebp-5Ch] int v8; // [esp-30h] [ebp-58h] int v9; // [esp-2Ch] [ebp-54h] int v10; // [esp-28h] [ebp-50h] int v11; // [esp-24h] [ebp-4Ch] _DWORD *v12; // [esp-20h] [ebp-48h] void *v13; // [esp-1Ch] [ebp-44h] int v14; // [esp-18h] [ebp-40h] int v15; // [esp-14h] [ebp-3Ch] int v16; // [esp-10h] [ebp-38h] int v17; // [esp-Ch] [ebp-34h] int v18; // [esp-8h] [ebp-30h] int v19; // [esp-4h] [ebp-2Ch] void **v20; // [esp+10h] [ebp-18h] _DWORD *v21; // [esp+14h] [ebp-14h] char *v22; // [esp+18h] [ebp-10h] int v23; // [esp+24h] [ebp-4h] v1 = this; result = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v21 = result; if ( result ) { if ( *((_BYTE *)v1 + 429) ) { v3 = (const char *)(*(int (**)(void))(*v1[97] + 452))(); v4 = (char *)sub_451700(v3); v18 = 15; v17 = 0; v20 = &v13; LOBYTE(v13) = 0; v22 = v4 + 1; sub_4018E0(&v13, v4, strlen(v4)); v12 = v1[109]; v5 = *(int (**)(void))(*v1[87] + 484); v23 = 0; v6 = (const char *)v5(); v20 = (void **)&v7; v11 = 0; v10 = 0; v9 = 0; v8 = 0; v7 = 0; strncpy((char *)&v7, v6, 0x14u); v23 = -1; sub_4D1220(v21, v7, v8, v9, v10, v11, (char)v12, v13, v14, v15, v16, v17, v18, v19); } else { v19 = 1; v1[108] = (_DWORD *)1; sub_4BFE90(result, v19); } ((void (__thiscall *)(_DWORD **, _DWORD))(*v1)[64])(v1, 0); result = (_DWORD *)((int (*)(void))(*v1)[136])(); } return result; } //----- (005C52F0) -------------------------------------------------------- char __thiscall sub_5C52F0(volatile LONG **this, int a2, _DWORD *a3) { volatile LONG **v3; // esi volatile LONG **v4; // eax char result; // al signed int v6; // edi int v7; // eax unsigned int v8; // ebx unsigned int v9; // esi int v10; // eax int v11; // edi unsigned int v12; // ebx char *v13; // eax volatile LONG *v14; // esi int v15; // ST10_4 int v16; // ST0C_4 int v17; // eax volatile LONG *v18; // esi _DWORD *v19; // eax char v20; // [esp+10h] [ebp-2Ch] volatile LONG **v21; // [esp+24h] [ebp-18h] int v22; // [esp+28h] [ebp-14h] int v23; // [esp+2Ch] [ebp-10h] int v24; // [esp+38h] [ebp-4h] _DWORD *v25; // [esp+48h] [ebp+Ch] volatile LONG **v26; // [esp+48h] [ebp+Ch] v3 = this; v24 = 0; v22 = 0; v23 = 0; v4 = sub_8FB140(a2, (int)"ReasonPulldown", (int)&v22, (int)&v23, 0); if ( sub_8F43D0(v3, v22, v23, (int)v4, a3, 0, 0) ) { sub_456260(&v20); LOBYTE(v24) = 1; sub_455FF0(&v20, (int)v3); sub_456000(&v20, v22, v23); sub_456380(&v20, a2); v6 = 1; v21 = v3 + 74; v25 = v3 + 74; do { v7 = *(_DWORD *)(dword_ACDA14 + 56); if ( v7 ) v8 = *(_DWORD *)(v7 + 40); else v8 = 0; v9 = 0; if ( v8 ) { while ( *(unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACDA14 + 4), v9) != v6 ) { if ( ++v9 >= v8 ) goto LABEL_14; } v10 = sub_7474E0((_DWORD *)(dword_ACDA14 + 4), v9); } else { LABEL_14: v10 = 0; } sub_4018E0(v25, (void *)(v10 + 1), strlen((const char *)(v10 + 1))); ++v6; v25 += 7; } while ( v6 < 5 ); v11 = 0; v26 = v21; do { v12 = v11 + 1; v13 = sub_7549E0("Text_ReasonList%02d", v11 + 1); v14 = sub_456B30(&v20, 0, v13, 0, 3); (*(void (__thiscall **)(volatile LONG *, int))(*v14 + 520))(v14, v11); v15 = sub_421050(0); v16 = (*(int (__thiscall **)(volatile LONG *))(*v14 + 148))(v14); v17 = (*(int (__thiscall **)(volatile LONG *))(*v14 + 144))(v14); v18 = sub_8F4A20(0, 0, v17, v16, v15, (int)v14, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); v19 = v26; if ( (unsigned int)v26[5] >= 0x10 ) v19 = *v26; (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v18 + 472))(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v26 += 7; ++v11; } while ( v12 < 4 ); LOBYTE(v24) = 0; sub_4562E0(&v20); v24 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); result = 1; } else { v24 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); } result = 0; } return result; } // ACDA14: using guessed type int dword_ACDA14; //----- (005C5560) -------------------------------------------------------- void __thiscall sub_5C5560(int this, int a2, int a3) { _DWORD *v3; // eax switch ( a2 ) { case 0: sub_5C51C0((_DWORD **)this); break; case 1: sub_5C3FE0((_BYTE *)this); break; case 2: sub_5C3E10((_DWORD *)this); break; case 3: if ( *(_BYTE *)(this + 430) == 1 ) sub_5C4080((_DWORD *)this); break; case 4: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "KQVote"); break; default: return; } } //----- (005C55E0) -------------------------------------------------------- int __cdecl sub_5C55E0(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACDA14 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACDA14 + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA14 + 4), v3); } // ACDA14: using guessed type int dword_ACDA14; //----- (005C5640) -------------------------------------------------------- _DWORD *__thiscall sub_5C5640(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &VoteWin::`vftable'; *((_DWORD *)this + 58) = &VoteWin::`vftable'; v3 = *((_DWORD *)this + 97); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E12D0: using guessed type void *VoteWin::`vftable'; // 9E12EC: using guessed type void *VoteWin::`vftable'; //----- (005C56E0) -------------------------------------------------------- void *__thiscall sub_5C56E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &VoteReasonWin::`vftable'; *((_DWORD *)this + 58) = &VoteReasonWin::`vftable'; `eh vector destructor iterator'((char *)this + 296, 0x1Cu, 5, sub_636A10); sub_8F3CC0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E1514: using guessed type void *VoteReasonWin::`vftable'; // 9E1534: using guessed type void *VoteReasonWin::`vftable'; //----- (005C5780) -------------------------------------------------------- int __thiscall sub_5C5780(_DWORD *this, _BYTE *a2) { return sub_8F1EF0(this, a2); } //----- (005C57E0) -------------------------------------------------------- void __thiscall sub_5C57E0(_BYTE *this) { this[300] = 0; } //----- (005C57F0) -------------------------------------------------------- int __thiscall sub_5C57F0(_DWORD *this, int a2) { int result; // eax result = a2; this[74] = a2; return result; } //----- (005C5800) -------------------------------------------------------- int __thiscall sub_5C5800(_DWORD *this, int a2) { int result; // eax result = a2; this[76] = a2; return result; } //----- (005C5820) -------------------------------------------------------- int __thiscall sub_5C5820(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; result = (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*this[73] + 236))(xRight, dword_AC2F78, 0.5, 0.2); *((float *)v1[73] + 90) = flt_ACCFCC; *((_BYTE *)v1 + 300) = 1; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005C58D0) -------------------------------------------------------- void __thiscall sub_5C58D0(int this) { int v1; // edi int v2; // eax _DWORD *v3; // eax int v4; // eax int v5; // esi int v6; // ecx _DWORD *v7; // esi v1 = this; byte_AD0C38 = 0; byte_ACEB00 = 0; v2 = *(_DWORD *)(this + 296); if ( v2 ) { if ( v2 == 2 ) { sub_6BEDA0(); sub_6BE700(); sub_64F980(dword_AD8EBC, 0); sub_6F3C20(&off_AB7F2C); sub_8F00A0((int)&unk_BA6A18, 0); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD50); sub_457EC0(*(_BYTE **)(v4 + 40)); } else if ( v2 == 1 ) { v5 = this + 232; if ( *(_DWORD *)(this + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(this + 236) + 4))(54, 0, this + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v1 + 236) + 20))(54, 0, v1 + 232); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v5 + 20))(v1 + 232, 54, 0, v1 + 232); dword_AD8EBC[5448] = 0; sub_6A9790((int)&unk_B683E8); v6 = *(_DWORD *)(v1 + 288); v7 = *(_DWORD **)(v6 + 572); if ( v7 ) { sub_56B270(*(_DWORD **)(v6 + 572)); sub_56B5A0(v7); } } } else { sub_6BEDA0(); sub_6BE700(); dword_AD8EBC[5448] = 0; sub_64F980(dword_AD8EBC, 0); v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( v3 ) { v3[27] = 0; v3[28] = 0; v3[29] = 0; v3[30] = 0; v3[31] = 0; v3[32] = 0; v3[33] = 0; v3[34] = 0; } sub_6F36A0(&off_AB7F2C, 3, 51, 0, 0); } } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; // ACEB00: using guessed type char byte_ACEB00; // AD0C38: using guessed type char byte_AD0C38; //----- (005C5A20) -------------------------------------------------------- void __thiscall sub_5C5A20(volatile LONG *this) { volatile LONG *v1; // esi int v2; // eax v1 = this; byte_AD0C38 = 1; if ( *((_BYTE *)this + 300) ) { sub_6F3D10(&off_AB7F2C, 4, 114, 0, 0); sub_8F2BC0(v1, 1, 0, 0); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_5B64C0(*(_BYTE **)(v2 + 552), 1); } } // AB7F2C: using guessed type void **off_AB7F2C; // AD0C38: using guessed type char byte_AD0C38; //----- (005C5B40) -------------------------------------------------------- char __thiscall sub_5C5B40(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // edi volatile LONG *v12; // ST14_4 volatile LONG *v13; // edi int v14; // ST10_4 int v15; // ST0C_4 int v16; // eax volatile LONG *v17; // edi volatile LONG v18; // ebx const CHAR *v19; // eax int v20; // edi int v21; // ST10_4 int v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // edi volatile LONG *v25; // ebx int v26; // eax void (__thiscall ***v27)(_DWORD, signed int); // esi int v28; // [esp+10h] [ebp-18h] int v29; // [esp+14h] [ebp-14h] int v30; // [esp+18h] [ebp-10h] int v31; // [esp+24h] [ebp-4h] v2 = (int)this; v30 = 0; v3 = dword_BA6BA0; v31 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v4, (int)&v30, v3); if ( !v30 ) return 0; v5 = sub_8FB140(v30, (int)"Panel01", (int)&v28, (int)&v29, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"LogoutAfterMinutesWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) v9 = sub_8FB140(v30, (int)"Theme", (int)&v28, (int)&v29, v8); else v9 = sub_8FB140(v30, (int)"Theme", (int)&v28, (int)&v29, 0); v10 = sub_8F3EB0(v28, v29, (int)v9, v2, 0, 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_8FB140(v30, (int)"BtnNor01", (int)&v28, (int)&v29, 0); sub_8FB650(v11, v30, (int)"BtnClick01"); sub_8FB650(v11, v30, (int)"BtnOver01"); v12 = sub_8FE0F0(v28, v29, (int)v11, v2, 0, 0, 0); *(_DWORD *)(v2 + 344) = v12; v13 = v12; v14 = sub_421050(0); v15 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 148))(v13); v16 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 144))(v13); v17 = sub_8F4A20(0, 2, v16, v15, v14, (int)v12, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); v18 = *v17; v19 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v18 + 472))(v17, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v20 = *(_DWORD *)(sub_421050(0) + 384); v21 = sub_421050(0); v22 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v23 = sub_8F4A20(0, 20, v22, v20, v21, v2, 0, 0); v24 = *(volatile LONG **)(v2 + 356); v25 = v23; if ( v24 != v23 ) { if ( v24 && !InterlockedDecrement(v24 + 1) && v24 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v24)(v24, 1); *(_DWORD *)(v2 + 356) = v25; if ( v25 ) InterlockedIncrement(v25 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 356) + 488))(5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); v26 = v30; *(_BYTE *)(v2 + 364) = 0; v31 = -1; if ( v26 ) { v27 = (void (__thiscall ***)(_DWORD, signed int))v26; if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v27 ) (**v27)(v27, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005C5E70) -------------------------------------------------------- int __thiscall sub_5C5E70(int this, float a2) { int v2; // edi int v3; // esi int *v4; // ebx int v5; // edi char *v6; // eax char *v7; // eax v2 = this; v3 = (signed int)(*(float *)(this + 360) - a2) + 10; if ( v3 <= 0 ) { v3 = 0; if ( !*(_BYTE *)(this + 364) ) { sub_5C58D0(*(_DWORD *)(this + 32)); *(_BYTE *)(v2 + 364) = 1; } } v4 = *(int **)(v2 + 356); v5 = *v4; v6 = (char *)sub_40C190(1062485364); v7 = sub_7549E0(v6, v3); return (*(int (__thiscall **)(int *, char *))(v5 + 472))(v4, v7); } //----- (005C5EE0) -------------------------------------------------------- void __thiscall sub_5C5EE0(_DWORD *this, int a2, int a3) { volatile LONG *v3; // esi int v4; // eax if ( !a2 ) { v3 = (volatile LONG *)this[8]; sub_6F3D10(&off_AB7F2C, 4, 114, 0, 0); sub_8F2BC0(v3, 1, 0, 0); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) sub_5B64C0(*(_BYTE **)(v4 + 552), 1); } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005C5F40) -------------------------------------------------------- int __cdecl sub_5C5F40(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &LogoutAfterMinutesWin::`vftable'; *(_DWORD *)(v2 + 232) = &LogoutAfterMinutesWin::`vftable'; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E1990: using guessed type void *LogoutAfterMinutesWin::`vftable'; // 9E19AC: using guessed type void *LogoutAfterMinutesWin::`vftable'; //----- (005C6080) -------------------------------------------------------- int __cdecl sub_5C6080(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x134u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_8F2740(v3); *(_DWORD *)v4 = &WaitingForLogoutWin::`vftable'; *(_DWORD *)(v4 + 232) = &WaitingForLogoutWin::`vftable'; *(_DWORD *)(v4 + 296) = 0; *(_BYTE *)(v4 + 300) = 0; *(_DWORD *)(v4 + 304) = 0; } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 452))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9E17A8: using guessed type void *WaitingForLogoutWin::`vftable'; // 9E17C4: using guessed type void *WaitingForLogoutWin::`vftable'; //----- (005C61E0) -------------------------------------------------------- char __thiscall sub_5C61E0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edi _DWORD *v5; // esi char result; // al _DWORD *v7; // ebx _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax float v11; // ST20_4 float v12; // ST1C_4 _DWORD *v13; // eax int v14; // ebx _DWORD *v15; // eax _DWORD *v16; // ebx void (__thiscall *v17)(_DWORD *, _DWORD *, _DWORD); // eax _DWORD *v18; // eax _DWORD *v19; // ebx int v20; // eax int v21; // eax void (__thiscall *v22)(_DWORD *, int); // eax float v23; // [esp+20h] [ebp-28h] float v24; // [esp+24h] [ebp-24h] float v25; // [esp+28h] [ebp-20h] float v26; // [esp+2Ch] [ebp-1Ch] void *v27; // [esp+30h] [ebp-18h] void *v28; // [esp+34h] [ebp-14h] _DWORD *v29; // [esp+38h] [ebp-10h] int v30; // [esp+44h] [ebp-4h] v4 = this; v5 = 0; result = sub_8F2900(this, 0, 0, a2, (int)a3, 0, 0, 0); if ( result ) { v29 = 0; v30 = 0; v7 = operator new(0xC4u); v28 = v7; LOBYTE(v30) = 1; if ( v7 ) { v8 = operator new(0x70u); v27 = v8; LOBYTE(v30) = 2; if ( v8 ) { v9 = sub_868440(v8, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v30) = 1; v10 = sub_868C00(v7, (int)v9); } else { LOBYTE(v30) = 1; v10 = sub_868C00(v7, 0); } } else { v10 = 0; } LOBYTE(v30) = 0; if ( v10 ) { v5 = v10; v29 = v10; InterlockedIncrement(v10 + 1); } sub_867880((_WORD *)v5[46], 4, 0, 0); v11 = (double)(unsigned int)a3; v12 = (double)(unsigned int)a2; sub_867E60(v5[46], 0, 0.0, 0.0, v12, v11); v23 = 0.0; v24 = 0.0; v25 = 0.0; v26 = 0.5; sub_867FF0(v5[46], 0, &v23); v13 = operator new(0x28u); v14 = (int)v13; LOBYTE(v30) = 3; if ( v13 ) { sub_85B2B0(v13); *(_DWORD *)v14 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v14 + 28) = 0; *(_DWORD *)(v14 + 32) = 0; *(_DWORD *)(v14 + 36) = 1; } else { v14 = 0; } LOBYTE(v30) = 0; *(_DWORD *)(v14 + 32) = 1; *(_DWORD *)(v14 + 36) = 0; sub_403700(v5, v14); sub_867680(v5[46]); sub_85C4D0(v5); sub_85BED0((_DWORD **)v5, 0.0, 1); v15 = operator new(0x28u); v16 = v15; LOBYTE(v30) = 4; if ( v15 ) { sub_85B2B0(v15); *v16 = &NiVertexColorProperty::`vftable'; *((_WORD *)v16 + 14) = 0; v16[8] = 0; v16[9] = 1; } else { v16 = 0; } v16[8] = 1; v16[9] = 0; v17 = *(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v4 + 116); LOBYTE(v30) = 0; v17(v4, v5, 0); v18 = operator new(0x20u); v19 = v18; LOBYTE(v30) = 5; if ( v18 ) { sub_85B2B0(v18); *v19 = &NiAlphaProperty::`vftable'; *((_WORD *)v19 + 14) = 236; *((_BYTE *)v19 + 30) = 0; v20 = (int)v19; } else { v20 = 0; } *(_WORD *)(v20 + 28) |= 1u; LOBYTE(v30) = 0; sub_403700(v5, v20); sub_85C4D0(v4); v21 = sub_5C5F40(a4); v4[73] = v21; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v21 + 520))(v21, 0); sub_442AC0(v4, v4[73]); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[73] + 256))(1); v22 = *(void (__thiscall **)(_DWORD *, int))v4[58]; v4[72] = a4; v22(v4 + 58, a4); (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 240))(v4, 1); v30 = -1; if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); result = 1; } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005C64F0) -------------------------------------------------------- void *__thiscall sub_5C64F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WaitingForLogoutWin::`vftable'; *((_DWORD *)this + 58) = &WaitingForLogoutWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E17A8: using guessed type void *WaitingForLogoutWin::`vftable'; // 9E17C4: using guessed type void *WaitingForLogoutWin::`vftable'; //----- (005C6530) -------------------------------------------------------- _DWORD *__thiscall sub_5C6530(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &LogoutAfterMinutesWin::`vftable'; *((_DWORD *)this + 58) = &LogoutAfterMinutesWin::`vftable'; v3 = *((_DWORD *)this + 89); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E1990: using guessed type void *LogoutAfterMinutesWin::`vftable'; // 9E19AC: using guessed type void *LogoutAfterMinutesWin::`vftable'; //----- (005C6620) -------------------------------------------------------- _DWORD *__thiscall sub_5C6620(_DWORD **this) { _DWORD **v1; // esi int v2; // esi signed int v3; // edi _DWORD *result; // eax v1 = this; sub_5D2940(this[96]); v2 = (int)(v1 + 88); v3 = 3; do { (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 - 4) + 472))(&unk_9E1C06); (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 240))(1); result = sub_5D2940(*(_DWORD **)(v2 - 8)); v2 += 12; --v3; } while ( v3 ); return result; } //----- (005C6680) -------------------------------------------------------- __int16 __thiscall sub_5C6680(_DWORD **this, _WORD *a2) { signed int v2; // edi _DWORD **v3; // esi _DWORD *v4; // ecx signed int v5; // eax v2 = 0; v3 = this + 86; do { v4 = *v3; LOWORD(v5) = *a2 >> 10; if ( (_WORD)v5 == 9 ) { v5 = 0; } else { if ( (_WORD)v5 != 8 ) return v5; v5 = 1; } if ( v4[77] == v5 && v4[76] == (*a2 & 0x3FF) ) LOWORD(v5) = (unsigned int)sub_5D2940(v4); ++v2; v3 += 3; } while ( v2 < 3 ); return v5; } //----- (005C66E0) -------------------------------------------------------- _WORD *__thiscall sub_5C66E0(_WORD *this, _WORD *a2) { _WORD *result; // eax result = a2; this[194] = *a2; return result; } //----- (005C6700) -------------------------------------------------------- char __thiscall sub_5C6700(volatile LONG *this, unsigned int a2, int a3) { char result; // al result = a2; if ( a2 ) { if ( a2 <= 3 ) { result = (*(int (__stdcall **)(unsigned int))(*this + 544))(a2 - 1); } else if ( a2 == 5 ) { result = sub_8F2BC0(this, 1, 0, 0); } } return result; } //----- (005C6750) -------------------------------------------------------- int __thiscall sub_5C6750(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // esi bool v3; // zf int v5; // [esp+4h] [ebp-Ch] int v6; // [esp+8h] [ebp-8h] v1 = this; sub_5C6620(this); v2 = v1 + 58; v3 = v2[1] == 0; v5 = 720904; v6 = 0; if ( !v3 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v2[1] + 4))(23, &v5, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v2[1] + 20))(23, &v5, v2); } return (*(int (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*v2 + 20))(v2, 23, &v5, v2); } //----- (005C67C0) -------------------------------------------------------- int __thiscall sub_5C67C0(_DWORD *this, int a2, int a3) { int result; // eax result = this[96]; if ( !*(_DWORD *)(result + 300) ) { (*(void (__stdcall **)(int, _DWORD))(*this + 548))(a3 + 10, *(unsigned __int16 *)(a3 + 8)); result = sub_6BA650(&dword_AB6520, 3); } return result; } //----- (005C6800) -------------------------------------------------------- char __thiscall sub_5C6800(void *this, int a2) { int v2; // ebx int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax const CHAR *v10; // eax const CHAR *v11; // eax volatile LONG *v12; // esi const CHAR *v13; // eax const CHAR *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax const char *v17; // eax int v18; // esi int v19; // edi char *v20; // eax volatile LONG *v21; // eax char *v22; // eax volatile LONG *v23; // eax char *v24; // eax volatile LONG *v25; // eax _DWORD *v26; // eax const char *v27; // eax volatile LONG *v28; // eax char v29; // ST14_1 int v30; // ST18_4 const CHAR *v31; // eax volatile LONG *v32; // eax volatile LONG *v33; // eax int v34; // [esp-Ch] [ebp-64h] int v35; // [esp-8h] [ebp-60h] int v36; // [esp-4h] [ebp-5Ch] float v37; // [esp+0h] [ebp-58h] float v38; // [esp+4h] [ebp-54h] volatile LONG *v39; // [esp+8h] [ebp-50h] volatile LONG *v40; // [esp+Ch] [ebp-4Ch] volatile LONG *v41; // [esp+10h] [ebp-48h] int v42[5]; // [esp+24h] [ebp-34h] int v43; // [esp+38h] [ebp-20h] int v44; // [esp+3Ch] [ebp-1Ch] int v45; // [esp+40h] [ebp-18h] int v46; // [esp+44h] [ebp-14h] int v47; // [esp+48h] [ebp-10h] int v48; // [esp+54h] [ebp-4h] signed int v49; // [esp+60h] [ebp+8h] v2 = (int)this; v47 = 0; v3 = dword_BA6BA0; v48 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\WTitleWin.nif"); sub_8F66B0(v4, (int)&v47, v3); if ( !v47 ) return 0; v5 = sub_8FB140(v47, (int)"Panel01", (int)&v43, (int)&v44, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"WeaponTitleWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v47; v48 = -1; if ( v47 && !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v42); LOBYTE(v48) = 1; sub_455FF0(v42, v2); sub_456000(v42, v43, v44); sub_456380(v42, v47); v8 = (volatile LONG *)sub_43D0D0(0x13u); if ( v8 ) { v41 = v8; v40 = &v46; v39 = &v45; v38 = COERCE_FLOAT("Theme"); } else { v41 = 0; v40 = &v46; v39 = &v45; v38 = COERCE_FLOAT("Theme"); } v9 = sub_8FB140(v47, SLODWORD(v38), (int)v39, (int)v40, v41); sub_8F3EB0(v45 - v43, v46 - v44, (int)v9, v2, 0, 0); sub_456820(v42, (int)"Panel02", 0); sub_456820(v42, (int)"Panel03", 0); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = *(float *)&dword_AA8C74; v10 = sub_40A910(-2136636458); sub_456A50(v42, (int)"NPCText", (int)v10, 0, v34, v35, v36, SLODWORD(v37), 5, 0, -16, -10); v35 = dword_AA8D98; v36 = dword_AA8D9C; v37 = *(float *)&dword_AA8DA0; v38 = *(float *)&dword_AA8DA4; v11 = sub_40A910(-588521414); sub_456980(v42, (int)"ItemName", (int)v11, 0, v35, v36, SLODWORD(v37), SLODWORD(v38), 4, 0, 0); sub_4563D0(v42, 5, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v12 = sub_4563D0(v42, 5, (int)"QuitBtnNor", (int)"QuitBtnOver", (int)"QuitBtnClick", 0, 0); v37 = *(float *)&dword_AA8C68; v38 = *(float *)&dword_AA8C6C; v39 = (volatile LONG *)dword_AA8C70; v40 = (volatile LONG *)dword_AA8C74; v13 = sub_40A910(-1515935505); sub_456040((int)v12, (int)v13, SLOBYTE(v37), SLODWORD(v38), (int)v39, (int)v40, 5); v35 = dword_AA8D98; v36 = dword_AA8D9C; v37 = *(float *)&dword_AA8DA0; v38 = *(float *)&dword_AA8DA4; v14 = sub_40A910(1045336471); sub_4566A0(v42, (int)"WinTitle", (int)v14, v35, v36, SLODWORD(v37), SLODWORD(v38), 5, 0, 2); v15 = sub_8FB140(v47, (int)"TgetSlot", (int)&v45, (int)&v46, 0); v16 = sub_8F3EB0(v45 - v43, v46 - v44, (int)v15, v2, 0, 0); *(_DWORD *)(v2 + 384) = sub_5D2DD0(3, 3, (int)v16); v17 = sub_40A910(-335554751); sub_8F2EA0(*(void ***)(v2 + 384), v17); *(_DWORD *)(*(_DWORD *)(v2 + 384) + 272) = dword_AD01E8; (*(void (__cdecl **)(signed int))(**(_DWORD **)(v2 + 384) + 240))(1); v18 = 1; v19 = v2 + 344; v49 = 3; do { v40 = 0; v39 = 0; LODWORD(v38) = 5; v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = *(float *)&dword_AA8C74; v20 = sub_7549E0("TitleName%02d", v18); v21 = sub_456980(v42, (int)v20, (int)&unk_9E1BDF, 0, v34, v35, v36, SLODWORD(v37), SLODWORD(v38), v39, (char)v40); v40 = 0; v39 = (volatile LONG *)v18; v38 = COERCE_FLOAT("RegBtnLock%02d"); *(_DWORD *)(v19 + 4) = v21; v39 = (volatile LONG *)sub_7549E0((char *)LODWORD(v38), v39); v38 = *(float *)&v18; v38 = COERCE_FLOAT(sub_7549E0("RegBtnClick%02d", v18)); v37 = *(float *)&v18; v37 = COERCE_FLOAT(sub_7549E0("RegBtnOver%02d", v18)); v36 = v18; v22 = sub_7549E0("RegBtnNor%02d", v18); v23 = sub_4563D0(v42, v18, (int)v22, SLODWORD(v37), SLODWORD(v38), (int)v39, v40); v40 = 0; v39 = (volatile LONG *)v18; v38 = COERCE_FLOAT("Slot%02d"); *(_DWORD *)(v19 + 8) = v23; v24 = sub_7549E0((char *)LODWORD(v38), v39); v25 = sub_456820(v42, (int)v24, v40); v26 = sub_5D2DD0(3, 3, (int)v25); v37 = 4.5283086e-11; *(_DWORD *)v19 = v26; v27 = sub_40A910(SLODWORD(v37)); sub_8F2EA0(*(void ***)v19, v27); *(_DWORD *)(*(_DWORD *)v19 + 272) = dword_AD01E8; (*(void (__cdecl **)(signed int))(**(_DWORD **)v19 + 240))(1); ++v18; v19 += 12; --v49; } while ( v49 ); v28 = sub_4563D0(v42, 4, (int)"RegBtnNor04", (int)"RegBtnOver04", (int)"RegBtnClick04", (int)"RegBtnLock04", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v38 = 0.0; v37 = 0.0; v36 = 5; v29 = dword_AA8C68; v30 = dword_AA8C6C; v34 = dword_AA8C70; v35 = dword_AA8C74; v31 = sub_40A910(-1728123402); sub_456980( v42, (int)"MakerNameText", (int)v31, 0, v29, v30, v34, v35, v36, (volatile LONG *)LODWORD(v37), SLOBYTE(v38)); v32 = sub_456980( v42, (int)"MakerName", (int)&unk_9E1BF7, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 4, 0, 0); v38 = 0.5; *(_DWORD *)(v2 + 380) = v32; v33 = *(volatile LONG **)v2; v37 = 0.0; (*((void (__thiscall **)(int, int, int, _DWORD, _DWORD))v33 + 59))(v2, xRight, dword_AC2F78, 0.0, LODWORD(v38)); LOBYTE(v48) = 0; sub_4562E0(v42); v48 = -1; JUMPOUT(v47, 0, &loc_5C6D81); return sub_5C6D65(0); } // 5C6D65: using guessed type int __stdcall sub_5C6D65(int); // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005C6D65) -------------------------------------------------------- #error "5C6D8F: positive sp value has been found (funcsize=17)" //----- (005C6DA0) -------------------------------------------------------- void __thiscall sub_5C6DA0(_DWORD *this, int a2, _BYTE *a3, int a4) { _DWORD **v4; // ebx int v5; // eax int v6; // eax bool v7; // zf int v8; // eax int v9; // ecx void (__thiscall *v10)(_DWORD **, char *, int); // edx __int16 *v11; // esi const CHAR *v12; // eax int v13; // ebx int v14; // eax int v15; // eax const CHAR *v16; // esi signed int v17; // [esp+Ch] [ebp-70h] int v18; // [esp+10h] [ebp-6Ch] __int16 v19; // [esp+74h] [ebp-8h] char v20; // [esp+76h] [ebp-6h] v4 = (_DWORD **)this; if ( a2 != 22 ) return; v5 = this[38]; if ( v5 ) v6 = v5 + 232; else v6 = 0; v7 = a4 == v6; v8 = *(_DWORD *)a3; if ( v7 ) { if ( *(_DWORD *)(v8 + 16) ) return; v9 = *(_DWORD *)(v8 + 8); if ( v9 ) { if ( v9 != 1 ) return; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(**(_DWORD **)(v8 + 20) + 4))(*(_DWORD *)(v8 + 20)) == 5 ) { v10 = (void (__thiscall *)(_DWORD **, char *, int))(*(v4 - 58))[137]; v11 = (__int16 *)(*(_DWORD *)(*(_DWORD *)a3 + 20) + 8); qmemcpy(&v18, v11, 0x64u); v11 += 50; v19 = *v11; v20 = *((_BYTE *)v11 + 2); v10(v4 - 58, (char *)&v18 + 2, v18); a3[12] = 1; return; } v12 = sub_40A910(-1913391614); goto LABEL_26; } if ( *(_DWORD *)(v8 + 16) || *(_DWORD *)(v8 + 8) ) return; if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(**(_DWORD **)(v8 + 20) + 4))(*(_DWORD *)(v8 + 20)) != 16 ) { v12 = sub_40A910(-721622281); LABEL_26: v16 = v12; if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v12, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v16, v4); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v16, v4); return; } v13 = (int)(v4 + 30); v17 = 3; do { v14 = *(_DWORD *)(v13 - 8); if ( v14 ) v15 = v14 + 232; else v15 = 0; if ( a4 == v15 && (*(unsigned __int8 (**)(void))(**(_DWORD **)v13 + 244))() && a4 ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)(a4 - 232) + 256))(a4 - 232, 1); a3[12] = 1; } v13 += 12; --v17; } while ( v17 ); } //----- (005C6F50) -------------------------------------------------------- int __thiscall sub_5C6F50(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx int v5; // eax __int16 v6; // ax _DWORD *v7; // esi bool v8; // zf int v10; // [esp+8h] [ebp-14h] __int16 *v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] __int16 v13; // [esp+14h] [ebp-8h] int v14; // [esp+16h] [ebp-6h] char v15; // [esp+1Ah] [ebp-2h] v2 = this; v3 = this[96]; JUMPOUT(*(_DWORD *)(v3 + 300), 0, sub_5C7061); v4 = v2[3 * a2 + 86]; JUMPOUT(*(_DWORD *)(v4 + 300), 0, sub_5C7061); v5 = *(_DWORD *)(v3 + 308); if ( v5 == 1 ) { v6 = v14 & 0x3FF | 0x2000; LOWORD(v14) = v14 & 0x3FF | 0x2000; } else if ( v5 ) { v6 = v14; } else { v6 = v14 & 0x3FF | 0x2400; LOWORD(v14) = v14 & 0x3FF | 0x2400; } LOWORD(v14) = (v6 ^ *(_WORD *)(v3 + 304)) & 0x3FF ^ v6; v13 = v13 & 0x3FF | 0x2400; v7 = v2 + 58; v8 = v7[1] == 0; v13 ^= (v13 ^ *(_WORD *)(v4 + 304)) & 0x3FF; v15 = 1; v10 = 65559; v11 = &v13; v12 = 7; if ( !v8 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v7[1] + 4))(23, &v10, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)v7[1] + 20))(23, &v10, v7); } return (*(int (__thiscall **)(_DWORD *, signed int, int *, _DWORD *))(*v7 + 20))(v7, 23, &v10, v7); } //----- (005C7061) -------------------------------------------------------- int __userpurge sub_5C7061@(int a1@, int a2) { _DWORD **v2; // esi const CHAR *v3; // edi v2 = (_DWORD **)(a1 + 232); v3 = sub_40A910(-1466499870); if ( v2[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v2[1] + 4))(25, v3, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v2[1] + 20))(25, v3, v2); } return ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v2)[5])(v2, 25, v3, v2); } // 5C7061: could not find valid save-restore pair for ebp // 5C7061: could not find valid save-restore pair for edi //----- (005C70C0) -------------------------------------------------------- char __thiscall sub_5C70C0(void *this, int a2) { int v2; // ebx int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax volatile LONG **v9; // eax const CHAR *v10; // eax const CHAR *v11; // eax volatile LONG *v12; // esi const CHAR *v13; // eax const CHAR *v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax const char *v17; // eax char *v18; // esi int v19; // edi char *v20; // eax volatile LONG *v21; // eax char *v22; // eax volatile LONG *v23; // eax char *v24; // eax volatile LONG *v25; // eax _DWORD *v26; // eax const char *v27; // eax volatile LONG *v28; // eax const CHAR *v29; // eax volatile LONG *v30; // eax volatile LONG *v31; // eax void (__thiscall ***v32)(_DWORD, signed int); // esi int v33; // [esp-8h] [ebp-60h] int v34; // [esp-4h] [ebp-5Ch] char *v35; // [esp+0h] [ebp-58h] char *v36; // [esp+4h] [ebp-54h] char *v37; // [esp+8h] [ebp-50h] float v38; // [esp+Ch] [ebp-4Ch] float v39; // [esp+10h] [ebp-48h] int v40[5]; // [esp+24h] [ebp-34h] int v41; // [esp+38h] [ebp-20h] int v42; // [esp+3Ch] [ebp-1Ch] int v43; // [esp+40h] [ebp-18h] int v44; // [esp+44h] [ebp-14h] int v45; // [esp+48h] [ebp-10h] int v46; // [esp+54h] [ebp-4h] signed int v47; // [esp+60h] [ebp+8h] v2 = (int)this; v45 = 0; v3 = dword_BA6BA0; v46 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\WTitleWin.nif"); sub_8F66B0(v4, (int)&v45, v3); if ( !v45 ) return 0; v5 = sub_8FB140(v45, (int)"Panel01", (int)&v41, (int)&v42, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"WeaponTitleDeleteWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v45; v46 = -1; if ( v45 && !InterlockedDecrement((volatile LONG *)(v45 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v40); LOBYTE(v46) = 1; sub_455FF0(v40, v2); sub_456000(v40, v41, v42); sub_456380(v40, v45); *(float *)&v8 = COERCE_FLOAT(sub_43D0D0(0x13u)); if ( *(float *)&v8 == 0.0 ) { v39 = 0.0; v38 = COERCE_FLOAT(&v44); v37 = (char *)&v43; v36 = "Theme"; } else { v39 = *(float *)&v8; v38 = COERCE_FLOAT(&v44); v37 = (char *)&v43; v36 = "Theme"; } v9 = sub_8FB140(v45, (int)v36, (int)v37, SLODWORD(v38), (volatile LONG *)LODWORD(v39)); sub_8F3EB0(v43 - v41, v44 - v42, (int)v9, v2, 0, 0); sub_456820(v40, (int)"Panel02", 0); sub_456820(v40, (int)"Panel03", 0); v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = (char *)dword_AA8C70; v36 = (char *)dword_AA8C74; v10 = sub_40A910(-2136636458); sub_456980(v40, (int)"NPCText", (int)v10, 0, v33, v34, (int)v35, (int)v36, 5, 0, 0); v33 = dword_AA8D98; v34 = dword_AA8D9C; v35 = (char *)dword_AA8DA0; v36 = (char *)dword_AA8DA4; v11 = sub_40A910(-588521414); sub_456980(v40, (int)"ItemName", (int)v11, 0, v33, v34, (int)v35, (int)v36, 4, 0, 0); sub_4563D0(v40, 5, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick", 0, 0); v12 = sub_4563D0(v40, 5, (int)"QuitBtnNor", (int)"QuitBtnOver", (int)"QuitBtnClick", 0, 0); v35 = (char *)dword_AA8C68; v36 = (char *)dword_AA8C6C; v37 = (char *)dword_AA8C70; v38 = *(float *)&dword_AA8C74; v13 = sub_40A910(-1515935505); sub_456040((int)v12, (int)v13, (char)v35, (int)v36, (int)v37, SLODWORD(v38), 5); v35 = (char *)dword_AA8D98; v36 = (char *)dword_AA8D9C; v37 = (char *)dword_AA8DA0; v38 = *(float *)&dword_AA8DA4; v14 = sub_40A910(-688726751); sub_456760(v40, (int)"WinTitle", (int)v14, (char)v35, (int)v36, (int)v37, SLODWORD(v38), 5); v15 = sub_8FB140(v45, (int)"TgetSlot", (int)&v43, (int)&v44, 0); v16 = sub_8F3EB0(v43 - v41, v44 - v42, (int)v15, v2, 0, 0); *(_DWORD *)(v2 + 384) = sub_5D2DD0(3, 3, (int)v16); v17 = sub_40A910(-335554751); sub_8F2EA0(*(void ***)(v2 + 384), v17); *(_DWORD *)(*(_DWORD *)(v2 + 384) + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 384) + 240))(1); v18 = (char *)1; v19 = v2 + 344; v47 = 3; do { v39 = 0.0; v38 = 0.0; v37 = (char *)5; v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = (char *)dword_AA8C70; v36 = (char *)dword_AA8C74; v20 = sub_7549E0("TitleName%02d", v18); v21 = sub_456980( v40, (int)v20, (int)&unk_9E1C07, 0, v33, v34, (int)v35, (int)v36, (int)v37, (volatile LONG *)LODWORD(v38), SLOBYTE(v39)); v39 = 0.0; v38 = *(float *)&v18; v37 = "RegCancelBtnLock%02d"; *(_DWORD *)(v19 + 4) = v21; v38 = COERCE_FLOAT(sub_7549E0(v37, v38)); v37 = v18; v37 = sub_7549E0("RegCancelBtnClick%02d", v18); v36 = v18; v36 = sub_7549E0("RegCancelBtnOver%02d", v18); v35 = v18; v22 = sub_7549E0("RegCancelBtnNor%02d", v18); v23 = sub_4563D0(v40, (int)v18, (int)v22, (int)v36, (int)v37, SLODWORD(v38), (volatile LONG *)LODWORD(v39)); v39 = 0.0; v38 = *(float *)&v18; v37 = "Slot%02d"; *(_DWORD *)(v19 + 8) = v23; v24 = sub_7549E0(v37, v38); v25 = sub_456820(v40, (int)v24, (volatile LONG *)LODWORD(v39)); v26 = sub_5D2DD0(3, 3, (int)v25); v36 = (char *)776415289; *(_DWORD *)v19 = v26; v27 = sub_40A910((int)v36); sub_8F2EA0(*(void ***)v19, v27); *(_DWORD *)(*(_DWORD *)v19 + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)v19 + 240))(1); ++v18; v19 += 12; --v47; } while ( v47 ); v28 = sub_4563D0( v40, 4, (int)"RegCancelBtnNor04", (int)"RegCancelBtnOver04", (int)"RegCancelBtnClick04", (int)"RegCancelBtnLock04", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v39 = 0.0; v38 = 0.0; v37 = (char *)5; v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = (char *)dword_AA8C70; v36 = (char *)dword_AA8C74; v29 = sub_40A910(-1728123402); sub_456980( v40, (int)"MakerNameText", (int)v29, 0, v33, v34, (int)v35, (int)v36, (int)v37, (volatile LONG *)LODWORD(v38), SLOBYTE(v39)); v30 = sub_456980( v40, (int)"MakerName", (int)&unk_9E1C29, 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); v39 = 0.5; *(_DWORD *)(v2 + 380) = v30; v31 = *(volatile LONG **)v2; v38 = 0.0; (*((void (__thiscall **)(int, int, int, _DWORD, float))v31 + 59))( v2, xRight, dword_AC2F78, 0.0, COERCE_FLOAT(LODWORD(v39))); LOBYTE(v46) = 0; sub_4562E0(v40); v46 = -1; if ( v45 ) { v32 = (void (__thiscall ***)(_DWORD, signed int))v45; if ( !InterlockedDecrement((volatile LONG *)(v45 + 4)) ) { if ( v32 ) (**v32)(v32, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AA8D9C: using guessed type int dword_AA8D9C; // AA8DA0: using guessed type int dword_AA8DA0; // AA8DA4: using guessed type int dword_AA8DA4; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005C7660) -------------------------------------------------------- char __thiscall sub_5C7660(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD **v4; // esi const CHAR *v5; // edi char result; // al int v7; // eax __int16 v8; // ax int v9; // eax unsigned int v10; // ecx unsigned int v11; // ecx _DWORD **v12; // esi const CHAR *v13; // edi char v14; // [esp+8h] [ebp-8h] int v15; // [esp+Ah] [ebp-6h] char v16; // [esp+Eh] [ebp-2h] v2 = this; v3 = (_DWORD *)this[96]; if ( v3[75] ) { v4 = (_DWORD **)(v2 + 58); v5 = sub_40A910(-1466499870); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); } else if ( *(_DWORD *)(v2[3 * a2 + 86] + 300) ) { v12 = (_DWORD **)(v2 + 58); v13 = sub_40A910(-1466499870); if ( v12[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v12[1] + 4))(25, v13, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v12[1] + 20))(25, v13, v12); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v12)[5])(v12, 25, v13, v12); } else { v7 = v3[77]; if ( v7 == 1 ) { v8 = v15 & 0x3FF | 0x2000; LOWORD(v15) = v15 & 0x3FF | 0x2000; } else if ( v7 ) { v8 = v15; } else { v8 = v15 & 0x3FF | 0x2400; LOWORD(v15) = v15 & 0x3FF | 0x2400; } LOWORD(v15) = (v8 ^ *((_WORD *)v3 + 152)) & 0x3FF ^ v8; v9 = v3[77]; if ( v9 == 1 ) { v10 = v3[76]; if ( v10 < 0x1E ) v9 = dword_ADA534[v10]; else v9 = 0; } else if ( v9 ) { v9 = a2; } else { v11 = v3[76]; if ( v11 < 0xC0 ) v9 = dword_ADA234[v11]; } HIWORD(v15) = *(_WORD *)(v9 + 6 * a2 + 17); result = sub_685920(&byte_ADA230, &v14); if ( result ) { v16 = 0; result = sub_6F3D10(&off_AB7F2C, 23, 1, &v14, 7u); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; //----- (005C7810) -------------------------------------------------------- char __thiscall sub_5C7810(void ***this) { void ***v1; // esi const char *v2; // eax void ***v3; // ebx int v4; // eax size_t v5; // eax void *v6; // eax _DWORD *v7; // edi const char *v8; // eax void **v9; // edx bool v10; // zf int v11; // eax int v13; // [esp+Ch] [ebp-14h] const CHAR *v14; // [esp+10h] [ebp-10h] const CHAR *v15; // [esp+14h] [ebp-Ch] const CHAR *v16; // [esp+18h] [ebp-8h] int v17; // [esp+1Ch] [ebp-4h] v1 = this; v2 = sub_40A910(-335554751); sub_8F2EA0(v1[96], v2); v1[96][68] = (void *)dword_AD01E8; v3 = v1 + 86; v17 = 3; do { v14 = &byte_9A8050; v15 = &byte_9A8050; v16 = &byte_9A8050; v13 = 776415289; v4 = *(_DWORD *)(dword_AC9C80 + 56); if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; v6 = bsearch(&v13, dword_ACB3A4, v5, 0x10u, sub_4508B0); v7 = v6; if ( v6 ) { if ( strcmp(*((const char **)v6 + 2), "None") ) sub_6BA890(&dword_AB6520, v7[2]); if ( strcmp((const char *)v7[3], "None") ) sub_6BA680(&dword_AB6520, v7[3]); v8 = (const char *)v7[1]; } else { v8 = &byte_9A8050; } sub_8F2EA0(*v3, v8); v9 = *v3; v3 += 3; v10 = v17-- == 1; v9[68] = (void *)dword_AD01E8; } while ( !v10 ); v11 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v11 ) LOBYTE(v11) = sub_4A8140(v11, 159); return v11; } // AC9C80: using guessed type int dword_AC9C80; // AD01E8: using guessed type int dword_AD01E8; //----- (005C7980) -------------------------------------------------------- int __cdecl sub_5C7980(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x184u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WeaponTitleWin::`vftable'; *(_DWORD *)(v2 + 232) = &WeaponTitleWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E1EF8: using guessed type void *WeaponTitleWin::`vftable'; // 9E1F14: using guessed type void *WeaponTitleWin::`vftable'; //----- (005C7AC0) -------------------------------------------------------- int __cdecl sub_5C7AC0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WeaponTitleDeleteWin::`vftable'; *(_DWORD *)(v2 + 232) = &WeaponTitleDeleteWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E2140: using guessed type void *WeaponTitleDeleteWin::`vftable'; // 9E215C: using guessed type void *WeaponTitleDeleteWin::`vftable'; //----- (005C7C00) -------------------------------------------------------- int __userpurge sub_5C7C00@(int a1@, signed int a2@, int a3, unsigned __int16 a4) { int result; // eax int v5; // ebx _DWORD **v6; // esi unsigned __int16 *v7; // edi const char *v8; // eax int v9; // eax int v10; // ebx int *v11; // eax int v12; // eax char *v13; // eax __int16 *v14; // eax _DWORD *v15; // eax char *v16; // eax int (*v17)(void); // eax signed int v18; // [esp-4h] [ebp-90h] int v19; // [esp+Ch] [ebp-80h] unsigned __int16 v20; // [esp+14h] [ebp-78h] signed int v21; // [esp+18h] [ebp-74h] char v22; // [esp+1Eh] [ebp-6Eh] char v23; // [esp+1Fh] [ebp-6Dh] __int16 v24; // [esp+20h] [ebp-6Ch] result = a4; v5 = a1; v19 = a1; if ( a3 ) { v18 = a2; v23 = 0; v22 = 0; (*(void (__stdcall **)(void *))(**(_DWORD **)(a1 + 380) + 472))(&unk_9E1BFE); v6 = (_DWORD **)(v5 + 348); v7 = (unsigned __int16 *)(a3 + 7); v21 = 3; do { (*(void (__stdcall **)(void *, signed int))(**v6 + 472))(&unk_9E1BFF, v18); sub_5D2940(*(v6 - 1)); v8 = sub_40A910(776415289); sub_8F2EA0((void **)*(v6 - 1), v8); (*(v6 - 1))[68] = dword_AD01E8; v9 = *v7; if ( (_WORD)v9 == -1 ) { v17 = *(int (**)(void))(*v6[1] + 240); if ( v22 ) { v18 = 0; result = v17(); } else { v18 = 1; result = v17(); v22 = 1; } } else { v10 = dword_ACDA48; v20 = *v7; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v9) ) { if ( v20 <= *(_WORD *)(v10 + 200) ) { v11 = (int *)(*(_DWORD *)(v10 + 196) + 4 * v20); if ( *v11 ) { v12 = *v11; if ( v12 ) { v13 = sub_7549E0("WTL_%s", v12 + 2); v14 = (__int16 *)sub_40C8D0(v13); if ( v14 ) { v24 = *v14; v15 = sub_6876E0((unsigned __int16 *)&v24); sub_5D2810(*(v6 - 1), (int)v15, 1, 1); v16 = sub_548B00(*v7, *(_DWORD *)(v7 + 1) & 0xFFFFFFF, a4); (*(void (__stdcall **)(char *))(**v6 + 472))(v16); } } } } } v18 = 0; v23 = 1; result = (*(int (**)(void))(*v6[1] + 240))(); v5 = v19; } v7 += 3; v6 += 3; --v21; } while ( v21 ); if ( v23 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)(v5 + 380) + 472))(a3 + 27); } return result; } // 5C7C00: could not find valid save-restore pair for esi // ACDA48: using guessed type int dword_ACDA48; // AD01E8: using guessed type int dword_AD01E8; //----- (005C7DD0) -------------------------------------------------------- int __userpurge sub_5C7DD0@(int a1@, signed int a2@, int a3, unsigned __int16 a4) { int result; // eax int v5; // esi char v6; // bl int v7; // esi unsigned __int16 *v8; // edi int v9; // eax int v10; // ebx int v11; // edx int *v12; // eax int v13; // eax char *v14; // eax __int16 *v15; // eax _DWORD *v16; // eax char *v17; // eax int (*v18)(void); // eax signed int v19; // [esp-4h] [ebp-94h] char v20; // [esp+8h] [ebp-88h] int v21; // [esp+Ch] [ebp-84h] int v22; // [esp+10h] [ebp-80h] int v23; // [esp+14h] [ebp-7Ch] int v24; // [esp+18h] [ebp-78h] int v25; // [esp+1Ch] [ebp-74h] char v26; // [esp+23h] [ebp-6Dh] __int16 v27; // [esp+24h] [ebp-6Ch] result = a4; v5 = a1; v23 = a1; v22 = a3; v21 = a4; if ( a3 ) { v19 = a2; v6 = 0; (*(void (__stdcall **)(void *))(**(_DWORD **)(a1 + 380) + 472))(&unk_9E1C2A); v7 = v5 + 352; v26 = sub_685920(&byte_ADA230, &v20); v8 = (unsigned __int16 *)(a3 + 7); v25 = 3; while ( 1 ) { (*(void (__stdcall **)(void *, signed int))(**(_DWORD **)(v7 - 4) + 472))(&unk_9E1C2B, v19); sub_5D2940(*(_DWORD **)(v7 - 8)); v9 = *v8; if ( (_WORD)v9 == -1 ) break; v10 = dword_ACDA48; v11 = *(_DWORD *)dword_ACDA48; v24 = *v8; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v11 + 16))(dword_ACDA48, v9) ) { if ( (unsigned __int16)v24 <= *(_WORD *)(v10 + 200) ) { v12 = (int *)(*(_DWORD *)(v10 + 196) + 4 * (unsigned __int16)v24); if ( *v12 ) { v13 = *v12; if ( v13 ) { v14 = sub_7549E0("WTL_%s", v13 + 2); v15 = (__int16 *)sub_40C8D0(v14); if ( v15 ) { v27 = *v15; v16 = sub_6876E0((unsigned __int16 *)&v27); sub_5D2810(*(int **)(v7 - 8), (int)v16, 1, 1); v17 = sub_548B00(*v8, *(_DWORD *)(v8 + 1) & 0xFFFFFFF, v21); (*(void (__stdcall **)(char *))(**(_DWORD **)(v7 - 4) + 472))(v17); } } } } } v18 = *(int (**)(void))(**(_DWORD **)v7 + 240); v6 = 1; if ( !v26 ) goto LABEL_13; v19 = 1; LABEL_14: result = v18(); v8 += 3; v7 += 12; if ( !--v25 ) { if ( v6 ) result = (*(int (__stdcall **)(int))(**(_DWORD **)(v23 + 380) + 472))(v22 + 27); return result; } } v18 = *(int (**)(void))(**(_DWORD **)v7 + 240); LABEL_13: v19 = 0; goto LABEL_14; } return result; } // 5C7DD0: could not find valid save-restore pair for ebx // ACDA48: using guessed type int dword_ACDA48; // ADA230: using guessed type char byte_ADA230; //----- (005C7F80) -------------------------------------------------------- void *__thiscall sub_5C7F80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WeaponTitleWin::`vftable'; *((_DWORD *)this + 58) = &WeaponTitleWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E1EF8: using guessed type void *WeaponTitleWin::`vftable'; // 9E1F14: using guessed type void *WeaponTitleWin::`vftable'; //----- (005C7FF0) -------------------------------------------------------- char __thiscall sub_5C7FF0(volatile LONG *this) { return sub_8F2BC0(this, 1, 0, 0); } //----- (005C8080) -------------------------------------------------------- float *__thiscall sub_5C8080(int this, float a2, float a3) { float *result; // eax int v4; // ST00_4 int v5; // ST04_4 int v6; // edx float v7; // ST00_4 double v8; // st7 float v9; // ST04_4 result = *(float **)(this + 408); v4 = *((_DWORD *)result + 22); v5 = *((_DWORD *)result + 23); v6 = *((_DWORD *)result + 24); v7 = (a2 * 0.01999999955296516 / *(float *)(this + 384) - *(float *)(this + 368)) * *(float *)(this + 376); v8 = (512.0 - 0.01999999955296516 * a3 / *(float *)(this + 384) - *(float *)(this + 372)) * *(float *)(this + 380); result[22] = v7; v9 = v8; result[23] = v9; *((_DWORD *)result + 24) = v6; return result; } //----- (005C8100) -------------------------------------------------------- float *__thiscall sub_5C8100(float *this) { float *v1; // esi int v2; // ebx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &WingStoneMapWin::`vftable'; *((_DWORD *)v1 + 58) = &WingStoneMapWin::`vftable'; v1[87] = 0.0; v1[99] = 0.0; v1[100] = 0.0; v1[101] = 0.0; v2 = *((_DWORD *)v1 + 87); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0.0; } v1[86] = 0.0; v1[96] = 0.0; v1[97] = 0.0; v1[102] = 0.0; v1[103] = 0.0; v1[98] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E2458: using guessed type void *WingStoneMapWin::`vftable'; // 9E2474: using guessed type void *WingStoneMapWin::`vftable'; //----- (005C81D0) -------------------------------------------------------- LONG __thiscall sub_5C81D0(float *this) { float *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; *(_DWORD *)this = &WingStoneMapWin::`vftable'; *((_DWORD *)this + 58) = &WingStoneMapWin::`vftable'; v2 = *((_DWORD *)this + 87); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0.0; } v1[86] = 0.0; v1[96] = 0.0; v1[97] = 0.0; v1[102] = 0.0; v1[103] = 0.0; v1[98] = 0.0; v3 = *((_DWORD *)v1 + 101); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *((_DWORD *)v1 + 100); if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *((_DWORD *)v1 + 99); if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = *((_DWORD *)v1 + 87); if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); return sub_8F10F0(v1); } // 9E2458: using guessed type void *WingStoneMapWin::`vftable'; // 9E2474: using guessed type void *WingStoneMapWin::`vftable'; //----- (005C8330) -------------------------------------------------------- LONG __thiscall sub_5C8330(float *this) { float *v1; // esi int v2; // ecx int v3; // edi int v4; // ebx _DWORD *v5; // ecx int v6; // ST14_4 LONG result; // eax v1 = this; v2 = *((_DWORD *)this + 101); if ( v2 ) { (*(void (**)(void))(*(_DWORD *)v2 + 60))(); (*(void (**)(void))(**((_DWORD **)v1 + 101) + 64))(); v3 = *((_DWORD *)v1 + 90) - *((_DWORD *)v1 + 88) + 1; v4 = *((_DWORD *)v1 + 91) - *((_DWORD *)v1 + 89) + 1; sub_8681A0(*(_DWORD *)(*((_DWORD *)v1 + 99) + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); sub_867E60(*(_DWORD *)(*((_DWORD *)v1 + 99) + 184), 0, 0.0, 0.0, 512.0, 512.0); v1[92] = (double)*((signed int *)v1 + 88); v1[93] = (double)*((signed int *)v1 + 89); v1[94] = 512.0 / (double)(unsigned int)v3; v5 = (_DWORD *)*((_DWORD *)v1 + 100); v6 = *((_DWORD *)v1 + 101); v1[95] = 512.0 / (double)(unsigned int)v4; sub_42AB40(v5, v6); *(_WORD *)(*(_DWORD *)(*((_DWORD *)v1 + 99) + 184) + 50) |= 9u; result = sub_85C4D0(v1); } return result; } //----- (005C8450) -------------------------------------------------------- char __thiscall sub_5C8450(volatile LONG *this, int a2, int a3) { volatile LONG *v3; // esi _DWORD *v4; // eax v3 = this; if ( a2 ) { if ( a2 == 1 ) { LOBYTE(v4) = (*(int (**)(void))(*this + 360))(); } else { LOBYTE(v4) = a2 - 2; if ( a2 == 2 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "MinimapFull"); } } } else { sub_5C8E80(*(_DWORD *)(*((_DWORD *)this + 74) + 612)); LOBYTE(v4) = sub_8F2BC0(v3, 1, 0, 0); } return (char)v4; } //----- (005C84C0) -------------------------------------------------------- char __thiscall sub_5C84C0(void *this, void *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax int v6; // edi volatile LONG **v7; // ebx volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi volatile LONG **v11; // eax volatile LONG **v12; // edi volatile LONG *v13; // edi volatile LONG **v14; // edi int v15; // eax volatile LONG *v16; // eax _WORD *v17; // edi _DWORD *v18; // eax _DWORD *v19; // ebx int v20; // edi _DWORD *v21; // eax _DWORD *v22; // ebx int v23; // edi void (__thiscall ***v24)(_DWORD, signed int); // esi int v25; // [esp+40h] [ebp-20h] int v26; // [esp+44h] [ebp-1Ch] int v27; // [esp+48h] [ebp-18h] int v28; // [esp+4Ch] [ebp-14h] int v29; // [esp+50h] [ebp-10h] int v30; // [esp+5Ch] [ebp-4h] v2 = (int)this; v29 = 0; v3 = dword_BA6BA0; v30 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MinimapFull.nif"); sub_8F66B0(v4, (int)&v29, v3); if ( !v29 ) return 0; v5 = sub_8FB140(v29, (int)"NPCGuild", (int)&v27, (int)&v28, 0); v6 = *(_DWORD *)(v2 + 348); v7 = v5; if ( (volatile LONG **)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v2 + 348) = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)v7 + 1); } v8 = sub_8FB140(v29, (int)"Frame", (int)&v27, (int)&v28, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, (int)a2, (int)"WingStoneMapWin", 0) ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v29; v30 = -1; if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } return 0; } v11 = sub_8FB140(v29, (int)"Panel01", (int)&v27, (int)&v28, 0); sub_8F3EB0(v27, v28, (int)v11, v2, 0, 0); v12 = sub_8FB140(v29, (int)"ClsNor", (int)&v27, (int)&v28, 0); sub_8FB650(v12, v29, (int)"ClsClick"); sub_8FB650(v12, v29, (int)"ClsOver"); sub_8FE0F0(v27, v28, (int)v12, v2, 1, 0, 0); v13 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v29 + 72))("HelpLinkNor") ) { v14 = sub_8FB140(v29, (int)"HelpLinkNor", (int)&v27, (int)&v28, v13); sub_8FB650(v14, v29, (int)"HelpLinkClick"); sub_8FB650(v14, v29, (int)"HelpLinkOver"); sub_8FE0F0(v27, v28, (int)v14, v2, 2, 0, 0); } sub_8F71E0(v29, (int)"WinTitle", &v27, &v28, &v25, &v26); v15 = sub_421050(0); v16 = sub_8F4A20(v27, v28, v25, v26, v15, v2, 0, 0); *(_DWORD *)(v2 + 344) = v16; (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 1); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 344) + 472))(&unk_9E2399); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 344) + 468))(&dword_AA8D98); sub_8F71E0(v29, (int)"fullmap", &v27, &v28, &v25, &v26); *(_DWORD *)(v2 + 388) = sub_8F1D90(v27, v28, v25, v26, v2, 0, 0); v17 = sub_8F5E10(1u, 1u, 0, 0, 1u, 1u); v18 = operator new(0xC4u); LOBYTE(v30) = 1; if ( v18 ) v19 = sub_868C00(v18, (int)v17); else v19 = 0; v20 = *(_DWORD *)(v2 + 396); LOBYTE(v30) = 0; if ( (_DWORD *)v20 != v19 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *(_DWORD *)(v2 + 396) = v19; if ( v19 ) InterlockedIncrement(v19 + 1); } v21 = operator new(0x44u); LOBYTE(v30) = 2; if ( v21 ) v22 = sub_863BB0(v21); else v22 = 0; v23 = *(_DWORD *)(v2 + 400); LOBYTE(v30) = 0; if ( (_DWORD *)v23 != v22 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); *(_DWORD *)(v2 + 400) = v22; if ( v22 ) InterlockedIncrement(v22 + 1); } sub_42AB40(*(_DWORD **)(v2 + 400), 0); sub_45C760(*(_DWORD ***)(v2 + 400), 1); *(_DWORD *)(*(_DWORD *)(v2 + 400) + 28) = 0; sub_470EE0(*(_DWORD ***)(v2 + 400), 0); sub_403700(*(_DWORD **)(v2 + 396), *(_DWORD *)(v2 + 400)); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 388) + 116))(*(_DWORD *)(v2 + 396), 0); *(_DWORD *)(v2 + 408) = sub_56D490(0, 0, *(_DWORD *)(v2 + 348), *(_DWORD *)(v2 + 388)); sub_85C4D0((_DWORD *)v2); sub_85BED0((_DWORD **)v2, 0.0, 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v30 = -1; if ( v29 ) { v24 = (void (__thiscall ***)(_DWORD, signed int))v29; if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) ) { if ( v24 ) (**v24)(v24, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005C89B0) -------------------------------------------------------- char __thiscall sub_5C89B0(void *this, __int16 a2, float a3, float a4) { int v4; // esi int v5; // eax _DWORD *v6; // edi _DWORD *v7; // eax int v8; // ebx _DWORD *v9; // eax int v10; // edi _DWORD *v11; // ebx char result; // al int v13; // eax int v14; // ecx int v15; // ST20_4 int v16; // ebx int v17; // eax _DWORD *v18; // [esp+1Ch] [ebp-11Ch] char v19; // [esp+20h] [ebp-118h] int v20; // [esp+124h] [ebp-14h] int v21; // [esp+128h] [ebp-10h] int v22; // [esp+12Ch] [ebp-Ch] char v23; // [esp+130h] [ebp-8h] v4 = (int)this; v5 = sub_44D6D0(a2); v6 = (_DWORD *)(v5 + 2); v20 = *(_DWORD *)(v5 + 2); v21 = *(_DWORD *)(v5 + 6); v22 = *(_DWORD *)(v5 + 10); v23 = 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v19, "%sminimap\\%s.dds", byte_ACAB50, &v20); v7 = sub_486130((int)&v19); v8 = *(_DWORD *)(v4 + 404); v18 = v7; if ( (_DWORD *)v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = v18; } *(_DWORD *)(v4 + 404) = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } if ( *(_DWORD *)(v4 + 404) ) { v13 = sub_49F8D0(v6); v14 = *(unsigned __int16 *)(v13 + 175); v15 = *(unsigned __int16 *)(v13 + 171); v16 = *(unsigned __int16 *)(v13 + 169); *(_DWORD *)(v4 + 360) = *(unsigned __int16 *)(v13 + 173); *(_DWORD *)(v4 + 352) = v16; *(_DWORD *)(v4 + 356) = v15; *(_DWORD *)(v4 + 364) = v14; *(float *)(v4 + 384) = *(float *)(v13 + 112); v17 = sub_4316B0(v6); (*(void (__stdcall **)(int))(**(_DWORD **)(v4 + 344) + 472))(v17 + 14); sub_5C8330((float *)v4); sub_5C8080(v4, a3, a4); result = 1; } else { v9 = sub_8F62B0(0, 0, 0, 255); v10 = *(_DWORD *)(v4 + 404); v11 = v9; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *(_DWORD *)(v4 + 404) = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005C8B80) -------------------------------------------------------- volatile LONG *__cdecl sub_5C8B80(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_5C8100((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005C8CB0) -------------------------------------------------------- void *__thiscall sub_5C8CB0(void *this, char a2) { void *v2; // esi v2 = this; sub_5C81D0((float *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005C8D00) -------------------------------------------------------- char __thiscall sub_5C8D00(_BYTE *this, char a2) { char result; // al result = a2; this[393] = a2; return result; } //----- (005C8D10) -------------------------------------------------------- char __thiscall sub_5C8D10(_DWORD *this) { _DWORD *v1; // esi char result; // al v1 = this; sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * this[101] + 348), 0); sub_8F86A0(&unk_BA6B10, v1); result = (*(int (**)(void))(**(_DWORD **)(v1[74] + 616) + 260))(); if ( result ) result = sub_4A4C60((_DWORD **)v1[74]); return result; } //----- (005C8D70) -------------------------------------------------------- char __thiscall sub_5C8D70(_DWORD *this, int a2) { this[101] = a2; return sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * a2 + 348), 1); } //----- (005C8DA0) -------------------------------------------------------- char __thiscall sub_5C8DA0(_DWORD *this) { return sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * this[101] + 348), 0); } //----- (005C8DD0) -------------------------------------------------------- LONG __thiscall sub_5C8DD0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &WingStoneWin::`vftable'; this[58] = &WingStoneWin::`vftable'; this[89] = 0; this[93] = 0; this[95] = 0; this[94] = 0; this[87] = 0; this[96] = 0; this[88] = 0; this[103] = 0; `eh vector destructor iterator'(this + 90, 4u, 3, sub_410C00); return sub_8F10F0(v1); } // 9E2894: using guessed type void *WingStoneWin::`vftable'; // 9E28B4: using guessed type void *WingStoneWin::`vftable'; //----- (005C8E80) -------------------------------------------------------- char __thiscall sub_5C8E80(int this) { int v1; // ebx char result; // al const CHAR *v3; // edi v1 = this; if ( *(_BYTE *)(this + 392) == 1 ) { if ( *sub_40C190(1045376585) ) { v3 = sub_40C190(1045376585); if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 4))(25, v3, v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v1 + 236) + 20))(25, v3, v1 + 232); } result = (*(int (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, v3, v1 + 232); *(_BYTE *)(v1 + 392) = 0; } else { if ( *(_DWORD *)(v1 + 236) ) { (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 4))( 25, "Unknown Text", v1 + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, const char *, int))(**(_DWORD **)(v1 + 236) + 20))( 25, "Unknown Text", v1 + 232); } result = (*(int (__thiscall **)(int, signed int, const char *, int))(*(_DWORD *)(v1 + 232) + 20))( v1 + 232, 25, "Unknown Text", v1 + 232); *(_BYTE *)(v1 + 392) = 0; } } else { sub_4BD240(*(_DWORD **)(this + 296)); sub_536E90(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 296) + 716) + 4 * *(_DWORD *)(v1 + 404) + 348), 0); if ( *(_BYTE *)(v1 + 391) ) sub_4A4C60(*(_DWORD ***)(v1 + 296)); result = sub_8F86A0(&unk_BA6B10, (_DWORD *)v1); } return result; } //----- (005C8FA0) -------------------------------------------------------- char __thiscall sub_5C8FA0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax _DWORD **v3; // esi char result; // al _DWORD **v5; // esi const CHAR *v6; // edi v1 = this; v2 = (_DWORD *)sub_6807B0(byte_AD9238); if ( *(_BYTE *)(sub_4316B0(v2) + 58) == 1 ) { if ( *sub_40C190(1755809411) ) { v5 = v1 + 58; v6 = sub_40C190(1755809411); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } else { v3 = v1 + 58; if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, "Unknown Text", v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, "Unknown Text", v3); } result = ((int (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])( v3, 25, "Unknown Text", v3); } } else { sub_4BD1E0(v1[74]); result = sub_536E90(*(_DWORD *)(v1[74][179] + 4 * (_DWORD)v1[101] + 348), 0); } return result; } //----- (005C90A0) -------------------------------------------------------- int __thiscall sub_5C90A0(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // esi int v4; // eax char v5; // cl const CHAR *v6; // eax char *v7; // ecx bool v8; // cf unsigned __int8 v9; // dl int v10; // eax char v11; // cl const CHAR *v12; // eax char *v13; // ecx unsigned __int8 v14; // dl int v15; // eax char v16; // cl const CHAR *v17; // eax char *v18; // ecx unsigned __int8 v19; // dl int v20; // eax char v21; // cl const CHAR *v22; // eax char *v23; // ecx unsigned __int8 v24; // dl int v25; // eax char v26; // cl const CHAR *v27; // eax char *v28; // ecx unsigned __int8 v29; // dl char v30[256]; // [esp+8h] [ebp-104h] result = a2; v3 = this; if ( a2 ) { switch ( a2 ) { case 1: this[102] = dword_AB0BB0; v10 = 0; do { v11 = byte_ACF190[v10]; v30[v10++] = v11; } while ( v11 ); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v30); *((_BYTE *)v3 + 393) = 1; *((_WORD *)v3 + 194) = word_AB0BC4; v12 = sub_40C190(-1679039015); v13 = v30; while ( 1 ) { v8 = (unsigned __int8)*v13 < *v12; if ( *v13 != *v12 ) break; if ( *v13 ) { v14 = v13[1]; v8 = v14 < v12[1]; if ( v14 != v12[1] ) goto LABEL_46; v13 += 2; v12 += 2; if ( v14 ) continue; } result = 0; goto LABEL_47; } break; case 2: this[102] = dword_AB0BB4; v15 = 0; do { v16 = byte_ACF090[v15]; v30[v15++] = v16; } while ( v16 ); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v30); *((_BYTE *)v3 + 393) = 1; *((_WORD *)v3 + 194) = word_AB0BC8; v17 = sub_40C190(-1679039015); v18 = v30; while ( 1 ) { v8 = (unsigned __int8)*v18 < *v17; if ( *v18 != *v17 ) break; if ( *v18 ) { v19 = v18[1]; v8 = v19 < v17[1]; if ( v19 != v17[1] ) goto LABEL_46; v18 += 2; v17 += 2; if ( v19 ) continue; } result = 0; goto LABEL_47; } break; case 3: this[102] = dword_AB0BB8; v20 = 0; do { v21 = byte_ACEF90[v20]; v30[v20++] = v21; } while ( v21 ); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v30); *((_BYTE *)v3 + 393) = 1; *((_WORD *)v3 + 194) = word_AB0BCC; v22 = sub_40C190(-1679039015); v23 = v30; while ( 1 ) { v8 = (unsigned __int8)*v23 < *v22; if ( *v23 != *v22 ) break; if ( *v23 ) { v24 = v23[1]; v8 = v24 < v22[1]; if ( v24 != v22[1] ) goto LABEL_46; v23 += 2; v22 += 2; if ( v24 ) continue; } result = 0; goto LABEL_47; } break; case 4: this[102] = dword_AB0BBC; v25 = 0; do { v26 = byte_ACEE90[v25]; v30[v25++] = v26; } while ( v26 ); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v30); *((_BYTE *)v3 + 393) = 1; *((_WORD *)v3 + 194) = word_AB0BD0; v27 = sub_40C190(-1679039015); v28 = v30; while ( 1 ) { v8 = (unsigned __int8)*v28 < *v27; if ( *v28 != *v27 ) break; if ( *v28 ) { v29 = v28[1]; v8 = v29 < v27[1]; if ( v29 != v27[1] ) goto LABEL_46; v28 += 2; v27 += 2; if ( v29 ) continue; } result = 0; goto LABEL_47; } break; default: return result; } } else { this[102] = dword_AB0BAC; v4 = 0; do { v5 = byte_ACF290[v4]; v30[v4++] = v5; } while ( v5 ); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v30); *((_BYTE *)v3 + 393) = 1; *((_WORD *)v3 + 194) = word_AB0BC0; v6 = sub_40C190(-1679039015); v7 = v30; while ( 1 ) { v8 = (unsigned __int8)*v7 < *v6; if ( *v7 != *v6 ) break; if ( *v7 ) { v9 = v7[1]; v8 = v9 < v6[1]; if ( v9 != v6[1] ) break; v7 += 2; v6 += 2; if ( v9 ) continue; } result = 0; goto LABEL_47; } } LABEL_46: result = -v8 - (v8 - 1); LABEL_47: if ( !result ) *((_BYTE *)v3 + 392) = 1; return result; } // AB0BAC: using guessed type int dword_AB0BAC; // AB0BB0: using guessed type int dword_AB0BB0; // AB0BB4: using guessed type int dword_AB0BB4; // AB0BB8: using guessed type int dword_AB0BB8; // AB0BBC: using guessed type int dword_AB0BBC; // AB0BC0: using guessed type __int16 word_AB0BC0; // AB0BC4: using guessed type __int16 word_AB0BC4; // AB0BC8: using guessed type __int16 word_AB0BC8; // AB0BCC: using guessed type __int16 word_AB0BCC; // AB0BD0: using guessed type __int16 word_AB0BD0; // 5C90A0: using guessed type char var_104[256]; //----- (005C93F0) -------------------------------------------------------- _DWORD *__thiscall sub_5C93F0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &WingStoneWin::`vftable'; v1[58] = &WingStoneWin::`vftable'; `eh vector constructor iterator'( v1 + 90, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((float *)v1 + 99) = 0.0; *((float *)v1 + 100) = 0.0; v1[89] = 0; v1[87] = 0; v1[93] = 0; v1[95] = 0; v1[94] = 0; v1[96] = 0; v1[88] = 0; v1[101] = 0; *(_DWORD *)((char *)v1 + 390) = 0; v1[102] = 0; *((_WORD *)v1 + 172) = 30068; *((_WORD *)v1 + 194) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E2894: using guessed type void *WingStoneWin::`vftable'; // 9E28B4: using guessed type void *WingStoneWin::`vftable'; //----- (005C94C0) -------------------------------------------------------- volatile LONG *__cdecl sub_5C94C0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5C93F0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005C95F0) -------------------------------------------------------- char __thiscall sub_5C95F0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi volatile LONG **v9; // eax int v10; // eax volatile LONG *v11; // ebx const CHAR *v12; // eax volatile LONG **v13; // ebx int v14; // ST40_4 volatile LONG **v15; // ebx volatile LONG **v16; // eax __int16 *v17; // eax char *v18; // eax int v19; // eax int v20; // ebx int v21; // eax volatile LONG *v22; // eax const CHAR *v23; // eax int *v24; // ecx int v25; // ebx const CHAR *v26; // eax int v27; // ebx float *v28; // eax volatile LONG **v29; // ebx volatile LONG *v30; // ecx int v31; // ebx int v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // ebx volatile LONG *v35; // edx int v36; // ebx int v37; // eax volatile LONG *v38; // ebx const CHAR *v39; // eax volatile LONG **v40; // ebx volatile LONG *v41; // edx int v42; // ebx int v43; // eax volatile LONG *v44; // ebx const CHAR *v45; // eax volatile LONG **v46; // ebx volatile LONG *v47; // edx int v48; // ebx int v49; // eax volatile LONG *v50; // edi volatile LONG v51; // ebx const CHAR *v52; // eax char v53; // [esp+64h] [ebp-34h] volatile LONG **v54; // [esp+74h] [ebp-24h] int v55; // [esp+78h] [ebp-20h] int v56; // [esp+7Ch] [ebp-1Ch] int v57; // [esp+80h] [ebp-18h] int v58; // [esp+84h] [ebp-14h] volatile LONG **v59; // [esp+88h] [ebp-10h] int v60; // [esp+94h] [ebp-4h] volatile LONG v61; // [esp+A0h] [ebp+8h] int v62; // [esp+A0h] [ebp+8h] int v63; // [esp+A0h] [ebp+8h] int v64; // [esp+A0h] [ebp+8h] volatile LONG v65; // [esp+A0h] [ebp+8h] int v66; // [esp+A0h] [ebp+8h] volatile LONG v67; // [esp+A0h] [ebp+8h] int v68; // [esp+A0h] [ebp+8h] v2 = (int)this; v57 = 0; v3 = dword_BA6BA0; v60 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GoddessWing.nif"); sub_8F66B0(v4, (int)&v57, v3); if ( !v57 ) return 0; v5 = sub_8FB140(v57, (int)"Frame", (int)&v58, (int)&v59, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"WingStoneWin", 0) || (v8 = v58, v54 = v59, v9 = sub_8FB140(v57, (int)"Panel01", (int)&v58, (int)&v59, 0), sub_8F3EB0(v58 - v8, (int)v59, (int)v9, v2, 0, 0), !sub_8F71E0(v57, (int)"WinTitle", &v58, &v59, &v55, &v56)) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v57; v60 = -1; if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v10 = sub_421050(0); v11 = sub_8F4A20(v58 - v8, (int)v59, v55, v56, v10, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v11 + 488))(v11, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v11 + 468))(v11, &dword_AA8D98); if ( sub_40C190(-267717392) ) { v61 = *v11; v12 = sub_40C190(-267717392); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v61 + 472))(v11, v12); } else { (*(void (__thiscall **)(volatile LONG *, const char *))(*v11 + 472))(v11, "GoddessWingWin"); } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v13 = sub_8FB140(v57, (int)"ClsNor", (int)&v58, (int)&v59, 0); sub_8FB650(v13, v57, (int)"ClsClick"); sub_8FB650(v13, v57, (int)"ClsOver"); v14 = (int)v13; v15 = v54; sub_8FE0F0(v58 - v8, (char *)v59 - (char *)v54, v14, v2, 5, 0, 0); sub_8F71E0(v57, (int)"Slot00", &v58, &v59, &v55, &v56); v16 = sub_8FB140(v57, (int)"Slot00", (int)&v58, (int)&v59, 0); sub_8F3EB0(v58 - v8, (char *)v59 - (char *)v54, (int)v16, v2, 0, 0); *(_DWORD *)(v2 + 348) = sub_5D6E20(v58 - v8, (char *)v59 - (char *)v54, v2); v17 = (__int16 *)sub_40C8D0("WingStone01_1"); *(_DWORD *)(v2 + 352) = v17; v62 = sub_685510(&byte_ADA230, *v17); sub_5D5EA0(*(_DWORD *)(v2 + 348), v8, *(unsigned __int16 *)(v2 + 344)); v18 = sub_7549E0("%d\n", 0); v54 = *(volatile LONG ***)(v2 + 348); (*(void (__stdcall **)(char *))(*v54[95] + 472))(v18); (*(void (__stdcall **)(signed int))(*v54[95] + 256))(1); if ( v62 ) sub_5D5B70(*(_WORD **)(v2 + 348), v62, 1); if ( !sub_8F71E0(v57, (int)"Textbox_Exp", &v58, &v59, &v55, &v56) ) { v60 = -1; sub_410C00(&v57); return 0; } v54 = sub_8FB140(v57, (int)"Textbox_Exp", (int)&v58, (int)&v59, 0); sub_8F3EB0(v58 - v8, (char *)v59 - (char *)v15, (int)v54, v2, 0, 0); v19 = *v54[9]; v20 = *(_DWORD *)(v19 + 24); v54 = *(volatile LONG ***)(v19 + 20); v21 = sub_421050(0); v22 = sub_8F4A20(v58 - v8, (int)v59 + 1, (int)v54, v20, v21, v2, 0, 0); *(_DWORD *)(v2 + 356) = v22; (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); if ( !v62 ) { if ( !*sub_40C190(926452856) ) { (*(void (__thiscall **)(_DWORD, const char *))(**(_DWORD **)(v2 + 356) + 472))( *(_DWORD *)(v2 + 356), "Unknown Text"); goto LABEL_26; } v25 = **(_DWORD **)(v2 + 356); v26 = sub_40C190(926452856); LABEL_25: (*(void (__thiscall **)(_DWORD, const CHAR *))(v25 + 472))(*(_DWORD *)(v2 + 356), v26); goto LABEL_26; } v23 = sub_40C190(-1851290413); v24 = *(int **)(v2 + 356); if ( *v23 ) { v25 = *v24; v26 = sub_40C190(-1851290413); goto LABEL_25; } (*(void (__stdcall **)(const char *))(*v24 + 472))("Unknown Text"); LABEL_26: v27 = **(_DWORD **)(v2 + 356); v28 = sub_419EE0((float *)&v53, 0xFFu, 0xFFu, 0xFFu, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v27 + 468))(*(_DWORD *)(v2 + 356), v28); v29 = sub_8FB140(v57, (int)"ListNor", (int)&v58, (int)&v59, 0); sub_8FB650(v29, v57, (int)"ListClick"); sub_8FB650(v29, v57, (int)"ListOver"); sub_8FE0F0(v58, (int)v59, (int)v29, v2, 1, 0, 0); v30 = v29[9]; v31 = *(_DWORD *)(*v30 + 24); v63 = *(_DWORD *)(*v30 + 20); v32 = sub_421050(0); v33 = sub_8F4A20(v58, (int)v59 + 3, v63, v31, v32, v2, 0, 0); *(_DWORD *)(v2 + 372) = v33; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); v34 = sub_8FB140(v57, (int)"BtnNor02", (int)&v58, (int)&v59, 0); sub_8FB650(v34, v57, (int)"BtnClick02"); sub_8FB650(v34, v57, (int)"BtnOver02"); sub_8FE0F0(v58 - v8, (int)v59, (int)v34, v2, 2, 0, 0); v35 = v34[9]; v36 = *(_DWORD *)(*v35 + 24); v64 = *(_DWORD *)(*v35 + 20); v37 = sub_421050(0); v38 = sub_8F4A20(v58 - v8, (int)v59 + 1, v64, v36, v37, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); if ( *sub_40C190(-1648428557) ) { v65 = *v38; v39 = sub_40C190(-1648428557); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v65 + 472))(v38, v39); } else { (*(void (__thiscall **)(volatile LONG *, const char *))(*v38 + 472))(v38, "Fly"); } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); v40 = sub_8FB140(v57, (int)"BtnNor01", (int)&v58, (int)&v59, 0); sub_8FB650(v40, v57, (int)"BtnClick01"); sub_8FB650(v40, v57, (int)"BtnOver01"); sub_8FE0F0(v58 - v8, (int)v59, (int)v40, v2, 3, 0, 0); v41 = v40[9]; v42 = *(_DWORD *)(*v41 + 24); v66 = *(_DWORD *)(*v41 + 20); v43 = sub_421050(0); v44 = sub_8F4A20(v58 - v8, (int)v59 + 1, v66, v42, v43, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); if ( *sub_40C190(-1448943394) ) { v67 = *v44; v45 = sub_40C190(-1448943394); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v67 + 472))(v44, v45); } else { (*(void (__thiscall **)(volatile LONG *, const char *))(*v44 + 472))(v44, "Save Position"); } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v46 = sub_8FB140(v57, (int)"BtnNor03", (int)&v58, (int)&v59, 0); sub_8FB650(v46, v57, (int)"BtnClick03"); sub_8FB650(v46, v57, (int)"BtnOver03"); sub_8FE0F0(v58 - v8, (int)v59, (int)v46, v2, 4, 0, 0); v47 = v46[9]; v48 = *(_DWORD *)(*v47 + 24); v68 = *(_DWORD *)(*v47 + 20); v49 = sub_421050(0); v50 = sub_8F4A20(v58 - v8, (int)v59 + 1, v68, v48, v49, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); if ( *sub_40C190(-234406098) ) { v51 = *v50; v52 = sub_40C190(-234406098); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v50, v52); } else { (*(void (__thiscall **)(volatile LONG *, const char *))(*v50 + 472))(v50, "cancel"); } (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v50 + 240))(v50, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v60 = -1; sub_410C00(&v57); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ADA230: using guessed type char byte_ADA230; //----- (005C9E30) -------------------------------------------------------- void __thiscall sub_5C9E30(_BYTE *this) { _BYTE *v1; // ebx __int16 *v2; // eax int v3; // eax __int16 v4; // si int *v5; // esi int v6; // edi char *v7; // eax char *v8; // eax int v9; // eax char *v10; // edx char v11; // cl char *v12; // eax char *v13; // edx char v14; // cl unsigned int v15; // eax char *v16; // edi char v17; // cl char v18[5]; // [esp+4h] [ebp-ACh] char v19[32]; // [esp+6Ch] [ebp-44h] char v20[32]; // [esp+8Bh] [ebp-25h] char v21[32]; // [esp+8Ch] [ebp-24h] v1 = this; if ( !this[393] ) { v2 = (__int16 *)sub_40C8D0("GoddessWing"); v3 = sub_685510(&byte_ADA230, *v2); if ( v3 ) { qmemcpy(v18, (const void *)(v3 + 8), 0x67u); if ( v18[2] ) { v4 = *(_WORD *)&v18[3]; if ( *(_WORD *)&v18[3] == -1 ) { v5 = (int *)*((_DWORD *)v1 + 93); v6 = *v5; v7 = (char *)sub_40C190(1312697893); v8 = sub_7549E0(v7, 1); (*(void (__thiscall **)(int *, char *))(v6 + 472))(v5, v8); *((_WORD *)v1 + 194) = -1; } else { v9 = sub_44D6D0(*(__int16 *)&v18[3]) + 14; v10 = &v19[-v9]; do { v11 = *(_BYTE *)v9; v10[v9] = *(_BYTE *)v9; ++v9; } while ( v11 ); *((_WORD *)v1 + 194) = v4; v12 = sub_7549E0(" %d. ", 1); v13 = (char *)(v21 - v12); do { v14 = *v12; v12[(_DWORD)v13] = *v12; ++v12; } while ( v14 ); v15 = strlen(v19) + 1; v16 = v20; do v17 = (v16++)[1]; while ( v17 ); qmemcpy(v16, v19, v15); (*(void (__stdcall **)(char *))(**((_DWORD **)v1 + 93) + 472))(v21); } *((_DWORD *)v1 + 102) = 0; } } } } // ADA230: using guessed type char byte_ADA230; // 5C9E30: using guessed type char var_44[32]; // 5C9E30: using guessed type char var_24[32]; //----- (005C9F90) -------------------------------------------------------- int __thiscall sub_5C9F90(float *this, __int16 a2) { float *v2; // ebx __int16 *v3; // eax int result; // eax unsigned __int8 *v5; // ecx int v6; // eax double v7; // st7 unsigned __int8 v8[5]; // [esp+8h] [ebp-6Ch] int v9; // [esp+Dh] [ebp-67h] int v10; // [esp+11h] [ebp-63h] v2 = this; v3 = (__int16 *)sub_40C8D0("GoddessWing"); result = sub_685510(&byte_ADA230, *v3); if ( result ) { qmemcpy(v8, (const void *)(result + 8), 0x67u); result = 0; if ( v8[2] ) { v5 = &v8[3]; while ( result != *((_DWORD *)v2 + 102) || a2 != *(_WORD *)v5 ) { ++result; v5 += 10; if ( result >= v8[2] ) return result; } v6 = 10 * result; v7 = (double)*(unsigned int *)((char *)&v9 + v6); result = *(int *)((char *)&v10 + v6); v2[99] = v7; v2[100] = (double)(unsigned int)result; } } return result; } // ADA230: using guessed type char byte_ADA230; //----- (005CA070) -------------------------------------------------------- int __thiscall sub_5CA070(_WORD *this, int a2) { _WORD *v2; // ebx __int16 *v3; // eax int result; // eax __int16 v5; // cx __int16 v6; // dx __int16 v7; // si unsigned __int8 v8[13]; // [esp+4h] [ebp-6Ch] __int16 v9; // [esp+11h] [ebp-5Fh] __int16 v10; // [esp+1Bh] [ebp-55h] __int16 v11; // [esp+25h] [ebp-4Bh] __int16 v12; // [esp+2Fh] [ebp-41h] v2 = this; v3 = (__int16 *)sub_40C8D0("GoddessWing"); result = sub_685510(&byte_ADA230, *v3); if ( result ) { qmemcpy(v8, (const void *)(result + 8), 0x67u); result = 0; if ( v8[2] ) { v5 = v12; v6 = v11; v7 = v10; do { if ( result == a2 ) { switch ( result ) { case 0: word_AB0BC0 = *(_WORD *)&v8[3]; v2[194] = *(_WORD *)&v8[3]; break; case 1: word_AB0BC4 = v9; v2[194] = v9; break; case 2: word_AB0BC8 = v7; v2[194] = v7; break; case 3: word_AB0BCC = v6; v2[194] = v6; break; case 4: word_AB0BD0 = v5; v2[194] = v5; break; default: break; } } ++result; } while ( result < v8[2] ); } } return result; } // AB0BC0: using guessed type __int16 word_AB0BC0; // AB0BC4: using guessed type __int16 word_AB0BC4; // AB0BC8: using guessed type __int16 word_AB0BC8; // AB0BCC: using guessed type __int16 word_AB0BCC; // AB0BD0: using guessed type __int16 word_AB0BD0; // ADA230: using guessed type char byte_ADA230; //----- (005CA170) -------------------------------------------------------- char __thiscall sub_5CA170(int this) { int v1; // esi __int16 v2; // ax _DWORD **v3; // esi const CHAR *v4; // edi char result; // al v1 = this; v2 = *(_WORD *)(this + 388); if ( v2 == -1 ) { v3 = (_DWORD **)(this + 232); v4 = sub_40C190(1045376585); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } else { sub_5C9F90((float *)this, v2); sub_5C89B0( *(void **)(*(_DWORD *)(v1 + 296) + 616), *(_WORD *)(v1 + 388), *(float *)(v1 + 396), *(float *)(v1 + 400)); result = sub_4A4C40(*(_DWORD ***)(v1 + 296)); if ( result ) *(_BYTE *)(v1 + 391) = 1; } return result; } //----- (005CA230) -------------------------------------------------------- const CHAR *__userpurge sub_5CA230@(_DWORD *a1@, int a2@, int a3) { _DWORD *v3; // ebx __int16 *v4; // edx int v5; // eax const CHAR *result; // eax char *v7; // eax int v8; // esi _DWORD *v9; // eax int v10; // eax char *v11; // edx char v12; // cl char *v13; // eax char *v14; // edx char v15; // cl unsigned int v16; // eax char *v17; // edi char v18; // cl int v19; // edx char v20[32]; // [esp+8h] [ebp-44h] char v21[32]; // [esp+27h] [ebp-25h] char v22[32]; // [esp+28h] [ebp-24h] v3 = a1; v4 = (__int16 *)a1[88]; a1[95] = *(_DWORD *)(a1[74] + 972); v5 = sub_685510(&byte_ADA230, *v4); if ( v5 ) { sub_5D5B70((_WORD *)v3[87], v5, 1); result = sub_40C190(-1851290413); if ( !*result ) result = (const CHAR *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v3[89] + 472))("Unknown Text"); } else { if ( !*sub_40C190(926452856) ) (*(void (__stdcall **)(const char *))(*(_DWORD *)v3[89] + 472))("Unknown Text"); sub_5D5EA0(v3[87], a2, *((unsigned __int16 *)v3 + 172)); v7 = sub_7549E0("%d\n", 0); v8 = v3[87]; (*(void (__stdcall **)(char *))(**(_DWORD **)(v8 + 380) + 472))(v7); result = (const CHAR *)(*(int (__stdcall **)(signed int))(**(_DWORD **)(v8 + 380) + 256))(1); } if ( *((_BYTE *)v3 + 390) == 1 && *(_BYTE *)(v3[74] + 144) ) { v9 = (_DWORD *)sub_6807B0(byte_AD9238); v10 = sub_4316B0(v9) + 14; v11 = &v20[-v10]; do { v12 = *(_BYTE *)v10; v11[v10] = *(_BYTE *)v10; ++v10; } while ( v12 ); v13 = sub_7549E0(" %d. ", v3[102] + 1); v14 = (char *)(v22 - v13); do { v15 = *v13; v13[(_DWORD)v14] = *v13; ++v13; } while ( v15 ); v16 = strlen(v20) + 1; v17 = v21; do v18 = (v17++)[1]; while ( v18 ); qmemcpy(v17, v20, v16); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[93] + 472))(v22); result = (const CHAR *)sub_5CA070(v3, v3[102]); v19 = v3[74]; *((_BYTE *)v3 + 390) = 0; *(_BYTE *)(v19 + 144) = 0; } return result; } // ADA230: using guessed type char byte_ADA230; // 5CA230: using guessed type char var_44[32]; // 5CA230: using guessed type char var_24[32]; //----- (005CA400) -------------------------------------------------------- char __thiscall sub_5CA400(_DWORD **this, int a2, int a3) { char result; // al result = a2 - 1; switch ( a2 ) { case 1: result = (unsigned int)sub_8EEE70(this[74], 236, 0, 0); break; case 2: result = sub_5C8E80((int)this); break; case 3: result = sub_5C8FA0(this); break; case 4: result = sub_5CA170((int)this); break; case 5: result = sub_5C8D10(this); break; default: return result; } return result; } //----- (005CA470) -------------------------------------------------------- void *__thiscall sub_5CA470(void *this, char a2) { void *v2; // esi v2 = this; sub_5C8DD0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005CA4B0) -------------------------------------------------------- char __thiscall sub_5CA4B0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ecx char result; // al v4 = this; v5 = (_DWORD *)this[16]; if ( v5 ) { if ( v4[31] <= 36 && a2 == 27 ) { result = (char)a3; if ( a3 ) { if ( !*a3 ) result = sub_4C0AF0(v5, v4[31]); v4[68] = 0; } } } return result; } //----- (005CA4F0) -------------------------------------------------------- char __thiscall sub_5CA4F0(volatile LONG **this, volatile LONG *a2) { volatile LONG **v2; // edi int v3; // ebx int v4; // esi char *v5; // eax int v6; // eax volatile LONG **v7; // eax int v8; // esi volatile LONG **v9; // edi signed int v10; // ebx char *v11; // ST10_4 char *v12; // ST0C_4 char *v13; // eax volatile LONG *v14; // eax int v15; // ebx void (__thiscall ***v16)(_DWORD, signed int); // esi signed int v18; // esi int *v19; // edi volatile LONG *v20; // eax char *v21; // ST10_4 char *v22; // eax char *v23; // eax void *v24; // ebx int v25; // eax float *v26; // eax float *v27; // eax int v28[5]; // [esp+18h] [ebp-40h] float v29; // [esp+2Ch] [ebp-2Ch] float v30; // [esp+30h] [ebp-28h] float v31; // [esp+34h] [ebp-24h] int v32; // [esp+38h] [ebp-20h] int v33; // [esp+3Ch] [ebp-1Ch] void *v34; // [esp+40h] [ebp-18h] volatile LONG **v35; // [esp+44h] [ebp-14h] int v36; // [esp+48h] [ebp-10h] int v37; // [esp+54h] [ebp-4h] v2 = this; v35 = this; v36 = 0; v3 = (int)a2; this[74] = a2; v4 = dword_BA6BA0; v37 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\WorldMap.nif"); sub_8F66B0(v5, (int)&v36, v4); v6 = v36; if ( !v36 ) goto LABEL_10; v7 = sub_8FB140(v36, (int)"Panel02", (int)&v32, (int)&v33, 0); if ( !sub_8F1440(v2, 0, 0, (int)v7, 0, v3, (int)"WorldMapWin", 0) ) { LABEL_9: v6 = v36; LABEL_10: v37 = -1; if ( v6 ) { v16 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v16 ) (**v16)(v16, 1); } } return 0; } sub_456260(v28); LOBYTE(v37) = 1; sub_455FF0(v28, (int)v2); sub_456000(v28, v32, v33); sub_456380(v28, v36); sub_456820(v28, (int)"Plane01", 0); sub_456820(v28, (int)"Panel02", 0); v8 = 1; v9 = v2 + 90; v10 = 36; do { v11 = sub_7549E0("WM%.2dClick", v8); v12 = sub_7549E0("WM%.2dOver", v8); v13 = sub_7549E0("WM%.2dNor", v8); *v9 = sub_4563D0(v28, v8, (int)v13, (int)v12, (int)v11, 0, 0); ++v9; ++v8; --v10; } while ( v10 ); sub_4564D0(v28, (int)"ClsNor", (int)"ClsOver", (int)"ClsClick"); v14 = sub_456760(v28, (int)"MapName", (int)&unk_9E2AE6, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v15 = (int)v35; v35[86] = v14; if ( !v14 ) { LOBYTE(v37) = 0; sub_4562E0(v28); goto LABEL_9; } *(_DWORD *)(v15 + 348) = sub_456820(v28, (int)"Avatar01", 0); *(_DWORD *)(v15 + 352) = sub_456820(v28, (int)"Avatar02", 0); v18 = 0; v19 = (int *)(v15 + 508); while ( 1 ) { v20 = sub_8F4180(0, 0, 1, 1, v15, 0, 0); v34 = (void *)v20; if ( v20 ) InterlockedIncrement(v20 + 1); LOBYTE(v37) = 2; sub_65AD50(v19 + 36, (int *)&v34); LOBYTE(v37) = 1; sub_410C00(&v34); a2 = 0; ++v18; LOBYTE(v37) = 3; v21 = sub_7549E0("WM%.2d.nif", v18); v22 = sub_4199F0(); v23 = (char *)sub_401410(v22, v21); sub_8F66B0(v23, (int)&a2, 0); if ( !a2 ) break; v24 = operator new(0x44u); v34 = v24; LOBYTE(v37) = 4; if ( v24 ) { v25 = sub_85BD60((void *)a2); v26 = sub_6B0A90((float *)v24, v25); } else { v26 = 0; } *v19 = (int)v26; if ( v26 ) { v27 = *(float **)v26; v29 = 0.0; v30 = 0.0; v27[22] = 0.0; v31 = 1000.0; v27[23] = 0.0; v27[24] = 1000.0; *(_BYTE *)(*v19 + 66) = 1; } LOBYTE(v37) = 1; sub_410C00(&a2); ++v19; if ( v18 >= 36 ) { (*((void (__stdcall **)(int, int, _DWORD, _DWORD))*v35 + 59))(xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v37) = 0; sub_4562E0(v28); v37 = -1; sub_410C00(&v36); return 1; } v15 = (int)v35; } LOBYTE(v37) = 1; sub_410C00(&a2); LOBYTE(v37) = 0; sub_4562E0(v28); v37 = -1; sub_410C00(&v36); return 0; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005CA8C0) -------------------------------------------------------- void __thiscall sub_5CA8C0(int *this, __int16 a2, unsigned __int8 a3) { int *v3; // esi int v4; // edi _DWORD *v5; // esi const CHAR *v6; // eax _DWORD *v7; // esi const CHAR *v8; // eax _DWORD *v9; // esi char *v10; // eax char *v11; // eax _DWORD *v12; // esi char *v13; // eax char *v14; // eax _DWORD *v15; // esi const CHAR *v16; // eax _DWORD *v17; // esi const CHAR *v18; // eax int v19; // [esp-8h] [ebp-10h] int v20; // [esp-4h] [ebp-Ch] int v21; // [esp-4h] [ebp-Ch] v3 = this; v4 = sub_5CB080(this[89]); if ( v3[89] ) sub_6B0B40((float *)v3[v3[89] + 126], (_DWORD *)v3[v3[89] + 162]); switch ( a2 ) { case 0x3749: v20 = -237123612; goto LABEL_15; case 0x374A: v5 = (_DWORD *)v3[74]; v6 = sub_40C190(2147407582); sub_492060(v5, (int)v6); return; case 0x374B: v7 = (_DWORD *)v3[74]; v8 = sub_40C190(-2047355183); sub_492060(v7, (int)v8); return; case 0x374C: v20 = -572080927; goto LABEL_15; case 0x374D: v9 = (_DWORD *)v3[74]; v10 = (char *)sub_4090F0(-220395201); v11 = sub_7549E0(v10, v4 + 14, a3); sub_492060(v9, (int)v11); return; case 0x374E: v21 = v4 + 14; v19 = -1900295449; goto LABEL_10; case 0x374F: v21 = v4 + 14; v19 = -1900229913; LABEL_10: v12 = (_DWORD *)v3[74]; v13 = (char *)sub_4090F0(v19); v14 = sub_7549E0(v13, v21); sub_492060(v12, (int)v14); return; case 0x3750: v20 = -421590220; goto LABEL_15; case 0x3751: v15 = (_DWORD *)v3[74]; v16 = sub_40C190(577119654); sub_492060(v15, (int)v16); break; case 0x3752: v20 = -554973122; LABEL_15: v17 = (_DWORD *)v3[74]; v18 = sub_4090F0(v20); sub_492060(v17, (int)v18); break; default: return; } } //----- (005CAA50) -------------------------------------------------------- char __thiscall sub_5CAA50(void *this) { void *v1; // esi _DWORD *v2; // eax int v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax float *v6; // eax _DWORD *v7; // eax float *v8; // eax char v10; // [esp+10h] [ebp-Ch] v1 = this; v2 = sub_439D70(byte_ADB468, &v10); v3 = sub_49F8D0(v2); if ( v3 ) { if ( *(_BYTE *)(v3 + 131) ) { v4 = sub_439D70(byte_ADB468, &v10); if ( sub_5CB0D0(v4) ) { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 87) + 256))(0); v5 = sub_439D70(byte_ADB468, &v10); v6 = sub_5CB140(v5); if ( v6 ) sub_45ABE0(*((_DWORD *)v1 + 88), *v6, v6[1]); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 88) + 256))(1); } else { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 88) + 256))(0); v7 = sub_439D70(byte_ADB468, &v10); v8 = sub_5CB140(v7); if ( v8 ) sub_45ABE0(*((_DWORD *)v1 + 87), *v8, v8[1]); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 87) + 256))(1); } } v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A8140(v3, 37); } return v3; } //----- (005CAB80) -------------------------------------------------------- LONG __thiscall sub_5CAB80(_DWORD *this) { _DWORD *v1; // ebx int *v2; // esi int v3; // edi _DWORD *v4; // ST0C_4 _DWORD *v5; // ST08_4 int v7; // [esp+18h] [ebp-14h] int **v8; // [esp+1Ch] [ebp-10h] int v9; // [esp+28h] [ebp-4h] v1 = this; *this = &WorldMapWin::`vftable'; this[58] = &WorldMapWin::`vftable'; v9 = 0; v8 = (int **)(this + 127); v7 = 36; do { v2 = *v8; if ( *v8 ) { sub_8D47C0(v2 + 7); LOBYTE(v9) = 3; nullsub_6(v2 + 1); v3 = *v2; LOBYTE(v9) = 2; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); *v8 = 0; } ++v8; --v7; } while ( v7 ); v4 = (_DWORD *)v1[201]; v5 = *(_DWORD **)v1[201]; LOBYTE(v9) = 5; sub_6CDE90(v1 + 200, &v7, v5, v4); operator delete((void *)v1[201]); LOBYTE(v9) = 0; `eh vector destructor iterator'(v1 + 163, 4u, 36, sub_410C00); v9 = -1; return sub_8F10F0(v1); } // 9E2BA8: using guessed type void *WorldMapWin::`vftable'; // 9E2BC4: using guessed type void *WorldMapWin::`vftable'; //----- (005CACA0) -------------------------------------------------------- int __thiscall sub_5CACA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int result; // eax unsigned __int16 *v5; // edi volatile LONG *v6; // eax int v7; // eax int v8; // ST04_4 char *v9; // eax v3 = this; this[89] = a2; result = sub_40C8D0("WorldLink"); v5 = (unsigned __int16 *)result; if ( result ) { v6 = sub_462C30(8, &byte_9E2AE7); v3[126] = v6; (**((void (__stdcall ***)(int))v6 + 58))((int)(v3 + 58)); v7 = sub_5CB080(v3[89]); if ( v7 ) { v8 = v7 + 14; v9 = (char *)sub_4090F0(-1987221861); sub_7549E0(v9, v8); sub_461950((_DWORD **)v3[126]); result = sub_461930(v3[126], (int)v5, *v5); } else { result = sub_461950((_DWORD **)v3[126]); } } return result; } //----- (005CAD60) -------------------------------------------------------- _DWORD *__thiscall sub_5CAD60(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v7 = 0; *v1 = &WorldMapWin::`vftable'; v1[58] = &WorldMapWin::`vftable'; `eh vector constructor iterator'( v1 + 163, 4u, 36, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); LOBYTE(v7) = 1; v1[202] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[201] = v2; *v2 = v2; *(_DWORD *)(v1[201] + 4) = v1[201]; *(_DWORD *)(v1[201] + 8) = v1[201]; *(_BYTE *)(v1[201] + 20) = 1; *(_BYTE *)(v1[201] + 21) = 1; v1[199] = 0; v1[204] = 0; v1[126] = 0; v1[127] = 0; v1[128] = 0; v1[129] = 0; v1[130] = 0; v1[131] = 0; v1[132] = 0; v1[133] = 0; v1[134] = 0; v1[135] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[139] = 0; v1[140] = 0; v1[141] = 0; v1[142] = 0; v1[143] = 0; v1[144] = 0; v1[145] = 0; v1[146] = 0; v1[147] = 0; v1[148] = 0; v1[149] = 0; v1[150] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; v1[154] = 0; v1[155] = 0; v1[156] = 0; v1[157] = 0; v1[158] = 0; v1[159] = 0; v1[160] = 0; v1[161] = 0; v1[162] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9E2BA8: using guessed type void *WorldMapWin::`vftable'; // 9E2BC4: using guessed type void *WorldMapWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005CAF30) -------------------------------------------------------- volatile LONG *__cdecl sub_5CAF30(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x334u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5CAD60(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005CB060) -------------------------------------------------------- int sub_5CB060() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD968 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD968: using guessed type int dword_ACD968; //----- (005CB080) -------------------------------------------------------- int __cdecl sub_5CB080(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_431660() ) return 0; while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1) + 46) != a1 ) { if ( ++v1 >= sub_431660() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACB234 + 4), v1); } // ACB234: using guessed type int dword_ACB234; //----- (005CB0D0) -------------------------------------------------------- bool __cdecl sub_5CB0D0(_DWORD *a1) { unsigned int v1; // esi _DWORD *v2; // eax v1 = 0; if ( !sub_5CB060() ) return 0; while ( 1 ) { v2 = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD968 + 4), v1); if ( *v2 == *a1 && v2[1] == a1[1] && v2[2] == a1[2] ) break; if ( ++v1 >= sub_5CB060() ) return 0; } return *(_BYTE *)(sub_7474E0((_DWORD *)(dword_ACD968 + 4), v1) + 20) == 1; } // ACD968: using guessed type int dword_ACD968; //----- (005CB140) -------------------------------------------------------- float *__cdecl sub_5CB140(_DWORD *a1) { unsigned int v1; // esi _DWORD *v2; // eax if ( !(dword_AD02B8 & 1) ) dword_AD02B8 |= 1u; v1 = 0; if ( !sub_5CB060() ) return 0; while ( 1 ) { v2 = (_DWORD *)sub_7474E0((_DWORD *)(dword_ACD968 + 4), v1); if ( *v2 == *a1 && v2[1] == a1[1] && v2[2] == a1[2] ) break; if ( ++v1 >= sub_5CB060() ) return 0; } flt_AD02B0 = (double)*(unsigned int *)(sub_7474E0((_DWORD *)(dword_ACD968 + 4), v1) + 12); flt_AD02B4 = (double)*(unsigned int *)(sub_7474E0((_DWORD *)(dword_ACD968 + 4), v1) + 16); return &flt_AD02B0; } // ACD968: using guessed type int dword_ACD968; // AD02B0: using guessed type float flt_AD02B0; // AD02B4: using guessed type float flt_AD02B4; // AD02B8: using guessed type int dword_AD02B8; //----- (005CB1F0) -------------------------------------------------------- void *__thiscall sub_5CB1F0(void *this, char a2) { void *v2; // esi v2 = this; sub_5CAB80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005CB2E0) -------------------------------------------------------- char sub_5CB2E0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "Option_common"); return (char)v0; } //----- (005CB310) -------------------------------------------------------- int __thiscall sub_5CB310(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (005CB390) -------------------------------------------------------- int __thiscall sub_5CB390(float *this, float a2) { float *v2; // esi int result; // eax _DWORD *v4; // ecx v2 = this; if ( !(*(unsigned __int8 (**)(void))(**((_DWORD **)this + 96) + 244))() || (result = (*(int (**)(void))(**((_DWORD **)v2 + 97) + 244))(), !(_BYTE)result) ) { result = sub_8D0630(v2 + 89, a2); if ( result ) { sub_8D06A0(v2 + 89, a2); v4 = (_DWORD *)*((_DWORD *)v2 + 96); v2[94] = 2.0; (*(void (__stdcall **)(signed int))(*v4 + 240))(1); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 97) + 240))(1); } } return result; } //----- (005CB430) -------------------------------------------------------- char __thiscall sub_5CB430(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; (*(void (__stdcall **)(_DWORD))(*this[96] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[97] + 240))(0); if ( *((_BYTE *)v1 + 344) ) return sub_4A5550((int)v1[74], 0); if ( *((_BYTE *)v1 + 345) ) return sub_4A5550((int)v1[74], 1); if ( *((_BYTE *)v1 + 346) ) result = sub_4A5550((int)v1[74], 2); return result; } //----- (005CB4A0) -------------------------------------------------------- char __thiscall sub_5CB4A0(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; (*(void (__stdcall **)(_DWORD))(*this[96] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[97] + 240))(0); if ( *((_BYTE *)v1 + 344) ) return sub_4A55A0((int)v1[74], 0); if ( *((_BYTE *)v1 + 345) ) return sub_4A55A0((int)v1[74], 1); if ( *((_BYTE *)v1 + 346) ) result = sub_4A55A0((int)v1[74], 2); return result; } //----- (005CB570) -------------------------------------------------------- char __thiscall sub_5CB570(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax int v18; // eax volatile LONG v19; // ST80_4 const CHAR *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // eax volatile LONG **v23; // eax volatile LONG *v24; // eax int v25; // eax int v26; // ST80_4 int v27; // eax volatile LONG v28; // ST80_4 const CHAR *v29; // eax volatile LONG *v30; // eax int v31; // eax int v32; // ST80_4 int v33; // eax volatile LONG v34; // ST80_4 const CHAR *v35; // eax volatile LONG *v36; // ecx int v37; // ST80_4 int v38; // eax volatile LONG v39; // ST80_4 const CHAR *v40; // eax volatile LONG *v41; // ecx int v42; // ST80_4 int v43; // eax volatile LONG *v44; // eax const CHAR *v45; // eax volatile LONG *v46; // ecx int v47; // ST80_4 int v48; // eax volatile LONG *v49; // eax int v50; // edi const CHAR *v51; // eax int v52; // [esp+84h] [ebp-28h] int v53; // [esp+88h] [ebp-24h] int v54; // [esp+8Ch] [ebp-20h] volatile LONG *v55; // [esp+90h] [ebp-1Ch] int v56; // [esp+94h] [ebp-18h] int v57; // [esp+98h] [ebp-14h] int v58; // [esp+9Ch] [ebp-10h] int v59; // [esp+A8h] [ebp-4h] volatile LONG *v60; // [esp+B4h] [ebp+8h] volatile LONG **v61; // [esp+B4h] [ebp+8h] volatile LONG *v62; // [esp+B4h] [ebp+8h] volatile LONG **v63; // [esp+B4h] [ebp+8h] volatile LONG **v64; // [esp+B4h] [ebp+8h] int v65; // [esp+B4h] [ebp+8h] volatile LONG *v66; // [esp+B4h] [ebp+8h] volatile LONG **v67; // [esp+B4h] [ebp+8h] int v68; // [esp+B4h] [ebp+8h] volatile LONG *v69; // [esp+B4h] [ebp+8h] volatile LONG **v70; // [esp+B4h] [ebp+8h] int v71; // [esp+B4h] [ebp+8h] volatile LONG *v72; // [esp+B4h] [ebp+8h] int v73; // [esp+B4h] [ebp+8h] int v74; // [esp+B4h] [ebp+8h] int v75; // [esp+B4h] [ebp+8h] v2 = this; v58 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v59 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\Option_common.nif"); sub_8F66B0(v4, (int)&v58, v3); if ( !v58 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v58 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v54 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v59) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v55 = v9) == 0) ) { LOBYTE(v59) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v58; v59 = -1; if ( v58 && !InterlockedDecrement((volatile LONG *)(v58 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v58, (int)"Frame", (int)&v56, (int)&v57, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, a2, (int)"OptionBaseWin", 0) ) { v14 = v56; v15 = v57; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v58, (int)"Theme", (int)&v56, (int)&v57, v16); else v17 = sub_8FB140(v58, (int)"Theme", (int)&v56, (int)&v57, 0); sub_8F3EB0(v56 - v14, v57 - v15, (int)v17, (int)v2, 0, 0); if ( sub_8F71E0(v58, (int)"WinTitle", &v56, &v57, &v52, &v53) ) { v18 = sub_421050(7); v60 = sub_8F4A20(v56 - v14, v57 - v15, v52, v53, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 488))(v60, 1); (*(void (__stdcall **)(int *))(*v60 + 468))(&dword_AA8D98); v19 = *v60; v20 = sub_40C190(-487127232); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v19 + 472))(v60, v20); (*(void (__stdcall **)(_DWORD))(*v60 + 240))(0); v21 = sub_8FB140(v58, (int)"Panel01", (int)&v56, (int)&v57, v55); sub_8F3EB0(v56 - v14, v57 - v15, (int)v21, (int)v2, 0, 0); v22 = sub_8FB140(v58, (int)"Panel02", (int)&v56, (int)&v57, v55); sub_8F3EB0(v56 - v14, v57 - v15, (int)v22, (int)v2, 0, 0); v23 = sub_8FB140(v58, (int)"IconSlot", (int)&v56, (int)&v57, v55); sub_8F3EB0(v56 - v14, v57 - v15, (int)v23, (int)v2, 0, 0); v61 = sub_8FB140(v58, (int)"ClsNor", (int)&v56, (int)&v57, v55); sub_8FB650(v61, v58, (int)"ClsClick"); sub_8FB650(v61, v58, (int)"ClsOver"); sub_8FE0F0(v56 - v14, v57 - v15, (int)v61, (int)v2, 16, 0, 0); v62 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v58 + 72))("HelpLinkNor") ) { v63 = sub_8FB140(v58, (int)"HelpLinkNor", (int)&v56, (int)&v57, v62); sub_8FB650(v63, v58, (int)"HelpLinkClick"); sub_8FB650(v63, v58, (int)"HelpLinkOver"); sub_8FE0F0(v56 - v14, v57 - v15, (int)v63, (int)v2, 17, 0, 0); } v64 = sub_8FB140(v58, (int)"OkNor", (int)&v56, (int)&v57, v55); sub_8FB650(v64, v58, (int)"OkClick"); sub_8FB650(v64, v58, (int)"OkOver"); v24 = sub_8FE0F0(v56 - v14, v57 - v15, (int)v64, (int)v2, 14, 0, 0); v2[97] = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 240))(v24, 1); v25 = *v64[9]; v65 = *(_DWORD *)(v25 + 24); v26 = *(_DWORD *)(v25 + 20); v27 = sub_421050(0); v66 = sub_8F4A20(v56 - v14, v57 - v15 + 1, v26, v65, v27, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 488))(v66, 5); v28 = *v66; v29 = sub_40C190(1201700997); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v66, v29); (*(void (__stdcall **)(_DWORD))(*v66 + 240))(0); v67 = sub_8FB140(v58, (int)"CreatNor", (int)&v56, (int)&v57, v55); sub_8FB650(v67, v58, (int)"CreatClick"); sub_8FB650(v67, v58, (int)"CreatOver"); v30 = sub_8FE0F0(v56 - v14, v57 - v15, (int)v67, (int)v2, 15, 0, 0); v2[96] = v30; (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 240))(v30, 1); v31 = *v67[9]; v68 = *(_DWORD *)(v31 + 24); v32 = *(_DWORD *)(v31 + 20); v33 = sub_421050(0); v69 = sub_8F4A20(v56 - v14, v57 - v15 + 1, v32, v68, v33, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 488))(v69, 5); v34 = *v69; v35 = sub_40C190(-1611008794); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v34 + 472))(v69, v35); (*(void (__stdcall **)(_DWORD))(*v69 + 240))(0); v70 = sub_8FB140(v58, (int)"QuitNor", (int)&v56, (int)&v57, v55); sub_8FB650(v70, v58, (int)"QuitClick"); sub_8FB650(v70, v58, (int)"QuitOver"); sub_8FE0F0(v56 - v14, v57 - v15, (int)v70, (int)v2, 16, 0, 0); v36 = v70[9]; v71 = *(_DWORD *)(*v36 + 24); v37 = *(_DWORD *)(*v36 + 20); v38 = sub_421050(0); v72 = sub_8F4A20(v56 - v14, v57 - v15 + 1, v37, v71, v38, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v72 + 488))(v72, 5); v39 = *v72; v40 = sub_40C190(-1679295515); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v39 + 472))(v72, v40); (*(void (__stdcall **)(_DWORD))(*v72 + 240))(0); v41 = sub_8FB140(v58, (int)"SubTitle01", (int)&v56, (int)&v57, v55)[9]; v73 = *(_DWORD *)(*v41 + 24); v42 = *(_DWORD *)(*v41 + 20); v43 = sub_421050(0); v44 = sub_8F4A20(v56 - v14, v57 - v15 + 1, v42, v73, v43, (int)v2, 0, 0); v2[87] = v44; (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); v74 = *v2[87]; v45 = sub_40C190(-581349583); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v74 + 472))(v2[87], v45); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); v46 = sub_8FB140(v58, (int)"SubTitle02", (int)&v56, (int)&v57, v55)[9]; v75 = *(_DWORD *)(*v46 + 24); v47 = *(_DWORD *)(*v46 + 20); v48 = sub_421050(0); v49 = sub_8F4A20(v56 - v14, v57 - v15 + 1, v47, v75, v48, (int)v2, 0, 0); v2[88] = v49; (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 5); v50 = *v2[88]; v51 = sub_40C190(775572528); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v2[88], v51); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.0, 0.5); sub_8D06A0((float *)v2 + 89, flt_ACCFCC); *((float *)v2 + 94) = 2.0; LOBYTE(v59) = 0; sub_410C00(&v54); v59 = -1; sub_410C00(&v58); result = 1; } else { LOBYTE(v59) = 0; sub_410C00(&v54); v59 = -1; sub_410C00(&v58); result = 0; } } else { LOBYTE(v59) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v58; v59 = -1; if ( !v58 || InterlockedDecrement((volatile LONG *)(v58 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (005CBE60) -------------------------------------------------------- void __userpurge sub_5CBE60(int a1@, int a2@, int a3@, int a4, int a5) { switch ( a4 ) { case 11: *(_WORD *)(a1 + 344) = 1; *(_BYTE *)(a1 + 346) = 0; sub_4A55E0(*(_DWORD *)(a1 + 296), a2, a3); break; case 12: *(_WORD *)(a1 + 344) = 256; *(_BYTE *)(a1 + 346) = 0; sub_4A5650(*(_DWORD *)(a1 + 296), a2, a3); break; case 13: *(_WORD *)(a1 + 344) = 0; *(_BYTE *)(a1 + 346) = 1; sub_4A56C0(*(_DWORD *)(a1 + 296), a3); break; case 14: sub_5CB4A0((_DWORD **)a1); break; case 15: sub_5CB430((_DWORD **)a1); break; case 16: sub_4A5750(*(_BYTE ***)(a1 + 296)); break; case 17: sub_5CB2E0(); break; default: return; } } //----- (005CBF20) -------------------------------------------------------- int __thiscall sub_5CBF20(int this, int a2) { int v2; // esi int result; // eax int *v4; // eax int v5; // edi const CHAR *v6; // eax int *v7; // eax int v8; // edi const CHAR *v9; // eax int *v10; // eax int v11; // edi const CHAR *v12; // eax int v13; // edi const CHAR *v14; // eax int v15; // [esp+0h] [ebp-8h] v2 = this; *(_WORD *)(this + 344) = 0; *(_BYTE *)(this + 346) = 0; if ( !a2 ) { v10 = *(int **)(this + 348); *(_BYTE *)(this + 344) = 1; v11 = *v10; v12 = sub_40C190(-638584766); (*(void (__thiscall **)(_DWORD, const CHAR *))(v11 + 472))(*(_DWORD *)(v2 + 348), v12); v15 = -168297239; goto LABEL_7; } if ( a2 == 1 ) { v7 = *(int **)(this + 348); *(_BYTE *)(this + 345) = 1; v8 = *v7; v9 = sub_40C190(-581349583); (*(void (__thiscall **)(_DWORD, const CHAR *))(v8 + 472))(*(_DWORD *)(v2 + 348), v9); v15 = 775572528; LABEL_7: v13 = **(_DWORD **)(v2 + 352); v14 = sub_40C190(v15); return (*(int (__thiscall **)(_DWORD, const CHAR *))(v13 + 472))(*(_DWORD *)(v2 + 352), v14); } result = a2 - 2; if ( a2 == 2 ) { v4 = *(int **)(this + 348); *(_BYTE *)(this + 346) = 1; v5 = *v4; v6 = sub_40C190(-1627982101); (*(void (__thiscall **)(_DWORD, const CHAR *))(v5 + 472))(*(_DWORD *)(v2 + 348), v6); result = (*(int (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 472))(&unk_9E2DFB); } return result; } //----- (005CC020) -------------------------------------------------------- int __cdecl sub_5CC020(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &OptionBaseWin::`vftable'; *(_DWORD *)(v2 + 232) = &OptionBaseWin::`vftable'; sub_8D0610((_BYTE *)(v2 + 356)); *(_WORD *)(v2 + 344) = 0; *(_BYTE *)(v2 + 346) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E2F30: using guessed type void *OptionBaseWin::`vftable'; // 9E2F4C: using guessed type void *OptionBaseWin::`vftable'; //----- (005CC180) -------------------------------------------------------- void *__thiscall sub_5CC180(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &OptionBaseWin::`vftable'; *((_DWORD *)this + 58) = &OptionBaseWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E2F30: using guessed type void *OptionBaseWin::`vftable'; // 9E2F4C: using guessed type void *OptionBaseWin::`vftable'; //----- (005CC290) -------------------------------------------------------- char __thiscall sub_5CC290(int this) { _DWORD *v1; // eax v1 = *(_DWORD **)(this + 412); *(_BYTE *)(this + 348) = 0; return sub_8F86A0(&unk_BA6B10, v1); } //----- (005CC2B0) -------------------------------------------------------- int __thiscall sub_5CC2B0(_DWORD **this, float a2) { int result; // eax float v3; // [esp+8h] [ebp+8h] v3 = a2 * -100.0; result = (signed int)v3; switch ( -60 - result ) { case 0: result = sub_4637A0(this[72], 0); break; case 10: result = sub_4637A0(this[72], 1); break; case 20: result = sub_4637A0(this[72], 2); break; case 30: result = sub_4637A0(this[72], 3); break; case 40: result = sub_4637A0(this[72], 4); break; default: return result; } return result; } //----- (005CC390) -------------------------------------------------------- signed int __thiscall sub_5CC390(_DWORD **this, int a2) { signed int result; // eax switch ( a2 ) { case 1: result = sub_4637A0(this[74], 1); break; case 10: result = sub_4637A0(this[74], 2); break; case 50: result = sub_4637A0(this[74], 3); break; default: result = sub_4637A0(this[74], 0); break; } return result; } //----- (005CC4C0) -------------------------------------------------------- int __stdcall sub_5CC4C0(int a1) { int result; // eax result = a1; switch ( a1 ) { case 0: flt_AB66F1 = 0.60000002; if ( !byte_ADB629 ) flt_B6706C = flt_AB66C2 * 0.6000000238418579; break; case 1: flt_AB66F1 = 0.69999999; if ( !byte_ADB629 ) flt_B6706C = flt_AB66C2 * 0.699999988079071; break; case 2: flt_AB66F1 = 0.80000001; if ( !byte_ADB629 ) flt_B6706C = flt_AB66C2 * 0.800000011920929; break; case 3: flt_AB66F1 = 0.89999998; if ( !byte_ADB629 ) flt_B6706C = flt_AB66C2 * 0.8999999761581421; break; case 4: flt_AB66F1 = 1.0; if ( !byte_ADB629 ) flt_B6706C = flt_AB66C2; break; default: return result; } return result; } // AB66C2: using guessed type float flt_AB66C2; // AB66F1: using guessed type float flt_AB66F1; // ADB629: using guessed type char byte_ADB629; // B6706C: using guessed type float flt_B6706C; //----- (005CC5C0) -------------------------------------------------------- signed int __stdcall sub_5CC5C0(signed int a1) { signed int result; // eax result = a1; switch ( a1 ) { case 0: result = 0; dword_B67100 = 0; dword_AB66D6 = 0; break; case 1: result = 1; dword_B67100 = 1; dword_AB66D6 = 1; break; case 2: result = 10; dword_B67100 = 10; dword_AB66D6 = 10; break; case 3: result = 50; dword_B67100 = 50; dword_AB66D6 = 50; break; default: return result; } return result; } // AB66D6: using guessed type int dword_AB66D6; // B67100: using guessed type int dword_B67100; //----- (005CC630) -------------------------------------------------------- char __thiscall sub_5CC630(_DWORD *this) { *(_BYTE *)(this[77] + 380) = *(_BYTE *)(this[77] + 380) == 0; return sub_6BD810(*(_BYTE *)(this[77] + 380)); } //----- (005CC660) -------------------------------------------------------- void __thiscall sub_5CC660(_DWORD **this) { _DWORD **v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi int v3; // [esp+4h] [ebp-4h] v1 = this; if ( this[103] ) { byte_ACEAFB = 0; (*(void (__stdcall **)(int *, _DWORD **))(*this[103] + 120))(&v3, this); if ( v3 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } ((void (__thiscall *)(_DWORD **, _DWORD))(*v1)[64])(v1, 0); } } // ACEAFB: using guessed type char byte_ACEAFB; //----- (005CC6F0) -------------------------------------------------------- int __thiscall sub_5CC6F0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char v5; // [esp+4h] [ebp-104h] v3 = this; dword_AB66DF = a2; dword_AB66E3 = a3; sprintf(&v5, "%i x %i", a2, a3); return (*(int (__stdcall **)(char *))(*v3[105] + 472))(&v5); } // AB66E3: using guessed type int dword_AB66E3; //----- (005CC780) -------------------------------------------------------- int __thiscall sub_5CC780(_DWORD *this) { char v1; // al *(_BYTE *)(this[80] + 380) = *(_BYTE *)(this[80] + 380) == 0; v1 = sub_6BC120(); return sub_6BD320(v1 == 0); } //----- (005CC7D0) -------------------------------------------------------- int __thiscall sub_5CC7D0(_DWORD *this) { int result; // eax result = this[82]; *(_BYTE *)(result + 380) = *(_BYTE *)(result + 380) == 0; byte_AB66EE = byte_AB66EE == 0; return result; } // AB66EE: using guessed type char byte_AB66EE; //----- (005CC820) -------------------------------------------------------- char *__thiscall sub_5CC820(_DWORD *this) { *(_BYTE *)(this[83] + 380) = *(_BYTE *)(this[83] + 380) == 0; return sub_5CDEC0(byte_AB66EF == 0); } // AB66EF: using guessed type char byte_AB66EF; //----- (005CC870) -------------------------------------------------------- int __thiscall sub_5CC870(_DWORD *this) { int result; // eax result = this[84]; *(_BYTE *)(result + 380) = *(_BYTE *)(result + 380) == 0; byte_AB66F0 = byte_AB66F0 == 0; return result; } // AB66F0: using guessed type char byte_AB66F0; //----- (005CC8F0) -------------------------------------------------------- int __thiscall sub_5CC8F0(_DWORD *this) { int result; // eax result = this[86]; *(_BYTE *)(result + 380) = *(_BYTE *)(result + 380) == 0; byte_AB66F5 = byte_AB66F5 == 0; return result; } // AB66F5: using guessed type char byte_AB66F5; //----- (005CC940) -------------------------------------------------------- char __thiscall sub_5CC940(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx int v4; // edi char *v5; // eax _DWORD *v6; // eax int v7; // eax int v8; // ebx int v9; // eax volatile LONG *v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // esi volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // ecx int v16; // ebx int v17; // ST44_4 int v18; // eax volatile LONG *v19; // ebx volatile LONG v20; // ST44_4 const CHAR *v21; // eax volatile LONG *v22; // ecx int v23; // ebx int v24; // ST44_4 int v25; // eax volatile LONG *v26; // ebx volatile LONG v27; // ST44_4 const CHAR *v28; // eax volatile LONG *v29; // ecx int v30; // ebx int v31; // ST44_4 int v32; // eax volatile LONG *v33; // ebx volatile LONG v34; // ST44_4 const CHAR *v35; // eax volatile LONG *v36; // ecx int v37; // ebx int v38; // ST44_4 int v39; // eax volatile LONG *v40; // ebx volatile LONG v41; // ST44_4 const CHAR *v42; // eax volatile LONG **v43; // eax int v44; // ebx int v45; // eax int v46; // eax int v47; // eax volatile LONG **v48; // ebx volatile LONG **v49; // ebx volatile LONG *v50; // edx int v51; // ebx int v52; // ST44_4 int v53; // eax volatile LONG *v54; // eax volatile LONG *v55; // ecx int v56; // ebx int v57; // ST44_4 int v58; // eax volatile LONG *v59; // ebx volatile LONG v60; // ST44_4 const CHAR *v61; // eax volatile LONG *v62; // ecx int v63; // ebx int v64; // ST44_4 int v65; // eax volatile LONG *v66; // eax volatile LONG v67; // ebx const CHAR *v68; // eax volatile LONG **v69; // ebx volatile LONG *v70; // ecx int v71; // ebx int v72; // ST44_4 int v73; // eax volatile LONG *v74; // eax volatile LONG v75; // ebx const CHAR *v76; // eax volatile LONG **v77; // ebx volatile LONG *v78; // ecx int v79; // ebx int v80; // ST44_4 int v81; // eax volatile LONG *v82; // eax volatile LONG v83; // ebx const CHAR *v84; // eax volatile LONG **v85; // ebx volatile LONG *v86; // ecx int v87; // ebx int v88; // ST44_4 int v89; // eax volatile LONG *v90; // eax volatile LONG v91; // ebx const CHAR *v92; // eax volatile LONG **v93; // ebx volatile LONG *v94; // ecx int v95; // ebx int v96; // ST44_4 int v97; // eax volatile LONG *v98; // eax volatile LONG v99; // ebx const CHAR *v100; // eax volatile LONG **v101; // ebx volatile LONG *v102; // ecx int v103; // ebx int v104; // ST44_4 int v105; // eax volatile LONG *v106; // ebx volatile LONG v107; // ST44_4 const CHAR *v108; // eax volatile LONG *v109; // ecx int v110; // ebx int v111; // ST44_4 int v112; // eax volatile LONG *v113; // ebx volatile LONG v114; // ST44_4 const CHAR *v115; // eax volatile LONG **v116; // ebx volatile LONG *v117; // eax volatile LONG *v118; // ecx int v119; // ebx int v120; // ST44_4 int v121; // eax volatile LONG *v122; // ebx volatile LONG v123; // ST44_4 const CHAR *v124; // eax volatile LONG *v125; // ecx int v126; // ebx int v127; // ST44_4 int v128; // eax volatile LONG *v129; // ebx volatile LONG v130; // ST44_4 const CHAR *v131; // eax volatile LONG **v132; // ebx volatile LONG *v133; // eax volatile LONG *v134; // ecx int v135; // ebx int v136; // ST44_4 int v137; // eax volatile LONG *v138; // ebx volatile LONG v139; // ST44_4 const CHAR *v140; // eax volatile LONG **v141; // edi volatile LONG *v142; // eax void (__thiscall ***v143)(_DWORD, signed int); // edi int v144; // [esp+10h] [ebp-1Ch] int v145; // [esp+18h] [ebp-14h] int v146; // [esp+1Ch] [ebp-10h] int v147; // [esp+28h] [ebp-4h] v2 = this; v3 = *this; this[104] = a2; (*(void (__stdcall **)(signed int))(v3 + 172))(-15); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 176))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 152))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 156))(v2, 0); (*(void (__thiscall **)(_DWORD *, void *))(*v2 + 140))(v2, &unk_9E316C); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 300))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 240))(v2, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v2 + 256))(v2, 1); v145 = 0; v4 = dword_BA6BA0; v147 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\Option_Graphic.nif"); sub_8F66B0(v5, (int)&v145, v4); if ( !v145 ) return 0; v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v145 + 72))("Panel_Graphic"); v7 = sub_85C050(v6, 8); v8 = v7; v144 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v147) = 1; if ( !v9 || (v10 = *(volatile LONG **)(v9 + 4)) == 0 ) { LOBYTE(v147) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v145; v147 = -1; if ( v145 && !InterlockedDecrement((volatile LONG *)(v145 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v13 = sub_8FB140(v145, (int)"Panel_Graphic", (int)&v146, (int)&a2, v10); v14 = sub_8F3EB0(v146, a2, (int)v13, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v15 = sub_8FB140(v145, (int)"LongGround", (int)&v146, (int)&a2, v10)[9]; v16 = *(_DWORD *)(*v15 + 24); v17 = *(_DWORD *)(*v15 + 20); v18 = sub_421050(0); v19 = sub_8F4A20(v146, a2 + 1, v17, v16, v18, (int)v2, 0, 0); v20 = *v19; v21 = sub_40C190(691121550); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v22 = sub_8FB140(v145, (int)"LongObject", (int)&v146, (int)&a2, v10)[9]; v23 = *(_DWORD *)(*v22 + 24); v24 = *(_DWORD *)(*v22 + 20); v25 = sub_421050(0); v26 = sub_8F4A20(v146, a2 + 1, v24, v23, v25, (int)v2, 0, 0); v27 = *v26; v28 = sub_40C190(892379253); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v27 + 472))(v26, v28); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v29 = sub_8FB140(v145, (int)"ChrShadow", (int)&v146, (int)&a2, v10)[9]; v30 = *(_DWORD *)(*v29 + 24); v31 = *(_DWORD *)(*v29 + 20); v32 = sub_421050(0); v33 = sub_8F4A20(v146, a2 + 1, v31, v30, v32, (int)v2, 0, 0); v34 = *v33; v35 = sub_40C190(960838523); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v34 + 472))(v33, v35); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); v36 = sub_8FB140(v145, (int)"ChrOline", (int)&v146, (int)&a2, v10)[9]; v37 = *(_DWORD *)(*v36 + 24); v38 = *(_DWORD *)(*v36 + 20); v39 = sub_421050(0); v40 = sub_8F4A20(v146, a2 + 1, v38, v37, v39, (int)v2, 0, 0); v41 = *v40; v42 = sub_40C190(-302363587); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v41 + 472))(v40, v42); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); v43 = sub_8FB140(v145, (int)"MovingPoint", (int)&v146, (int)&a2, v10); v44 = (int)v43; v45 = sub_464310(v145, (int)"LongGroundBar", "LongGroundBarLow", "LongGroundBarHigh", (int)v43, 0, v2); v2[72] = v45; *(_DWORD *)(v45 + 312) = 11; sub_4638F0((_DWORD *)v2[72], 5); sub_4637A0((_DWORD *)v2[72], 4); v46 = sub_464310(v145, (int)"LongObjectBar", "LongObjectBarLow", "LongObjectBarHigh", v44, 1, v2); v2[73] = v46; *(_DWORD *)(v46 + 312) = 11; sub_4638F0((_DWORD *)v2[73], 10); sub_4637A0((_DWORD *)v2[73], 5); v47 = sub_464310(v145, (int)"ChrShadowBar", "ChrShadowBarLow", "ChrShadowBarHigh", v44, 2, v2); v2[74] = v47; *(_DWORD *)(v47 + 312) = 11; sub_4638F0((_DWORD *)v2[74], 4); sub_4637A0((_DWORD *)v2[74], 2); v48 = sub_8FB140(v145, (int)"ChrOlineChNor", (int)&v146, (int)&a2, v10); sub_8FB650(v48, v145, (int)"ChrOlineChClick"); v2[77] = sub_465940(v146, a2, (int)v48, (int)v2, 12, 0); v49 = sub_8FB140(v145, (int)"ResolutionNor", (int)&v146, (int)&a2, v10); sub_8FB650(v49, v145, (int)"ResolutionClick"); sub_8FB650(v49, v145, (int)"ResolutionOver"); sub_8FE0F0(v146, a2, (int)v49, (int)v2, 13, 0, 0); v50 = v49[9]; v51 = *(_DWORD *)(*v50 + 24); v52 = *(_DWORD *)(*v50 + 20); v53 = sub_421050(0); v54 = sub_8F4A20(v146, a2, v52, v51, v53, (int)v2, 0, 0); v2[105] = v54; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); v55 = sub_8FB140(v145, (int)"Resolution", (int)&v146, (int)&a2, v10)[9]; v56 = *(_DWORD *)(*v55 + 24); v57 = *(_DWORD *)(*v55 + 20); v58 = sub_421050(0); v59 = sub_8F4A20(v146, a2 + 1, v57, v56, v58, (int)v2, 0, 0); v60 = *v59; v61 = sub_40C190(-843590184); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v59, v61); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); v62 = sub_8FB140(v145, (int)"WindowMod", (int)&v146, (int)&a2, v10)[9]; v63 = *(_DWORD *)(*v62 + 24); v64 = *(_DWORD *)(*v62 + 20); v65 = sub_421050(0); v66 = sub_8F4A20(v146, a2 + 1, v64, v63, v65, (int)v2, 0, 0); v2[106] = v66; v67 = *v66; v68 = sub_40C190(861157773); (*(void (__thiscall **)(_DWORD, const CHAR *))(v67 + 472))(v2[106], v68); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[106] + 240))(0); v69 = sub_8FB140(v145, (int)"WindowModNor", (int)&v146, (int)&a2, v10); sub_8FB650(v69, v145, (int)"WindowModClick"); v2[78] = sub_465940(v146, a2, (int)v69, (int)v2, 14, 0); v70 = sub_8FB140(v145, (int)"MultiSample", (int)&v146, (int)&a2, v10)[9]; v71 = *(_DWORD *)(*v70 + 24); v72 = *(_DWORD *)(*v70 + 20); v73 = sub_421050(0); v74 = sub_8F4A20(v146, a2 + 1, v72, v71, v73, (int)v2, 0, 0); v2[107] = v74; v75 = *v74; v76 = sub_40C190(842299782); (*(void (__thiscall **)(_DWORD, const CHAR *))(v75 + 472))(v2[107], v76); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[107] + 240))(0); v77 = sub_8FB140(v145, (int)"MultiSampleNor", (int)&v146, (int)&a2, v10); sub_8FB650(v77, v145, (int)"MultiSampleClick"); v2[79] = sub_465940(v146, a2, (int)v77, (int)v2, 15, 0); v78 = sub_8FB140(v145, (int)"GlowEffect", (int)&v146, (int)&a2, v10)[9]; v79 = *(_DWORD *)(*v78 + 24); v80 = *(_DWORD *)(*v78 + 20); v81 = sub_421050(0); v82 = sub_8F4A20(v146, a2 + 1, v80, v79, v81, (int)v2, 0, 0); v2[108] = v82; v83 = *v82; v84 = sub_40C190(892224560); (*(void (__thiscall **)(_DWORD, const CHAR *))(v83 + 472))(v2[108], v84); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[108] + 240))(0); v85 = sub_8FB140(v145, (int)"GlowEffectNor", (int)&v146, (int)&a2, v10); sub_8FB650(v85, v145, (int)"GlowEffectClick"); v2[80] = sub_465940(v146, a2, (int)v85, (int)v2, 16, 0); v86 = sub_8FB140(v145, (int)"CameraShake", (int)&v146, (int)&a2, v10)[9]; v87 = *(_DWORD *)(*v86 + 24); v88 = *(_DWORD *)(*v86 + 20); v89 = sub_421050(0); v90 = sub_8F4A20(v146, a2 + 1, v88, v87, v89, (int)v2, 0, 0); v2[110] = v90; v91 = *v90; v92 = sub_40A910(-254687030); (*(void (__thiscall **)(_DWORD, const CHAR *))(v91 + 472))(v2[110], v92); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[110] + 240))(0); v93 = sub_8FB140(v145, (int)"CameraShakeNor", (int)&v146, (int)&a2, v10); sub_8FB650(v93, v145, (int)"CameraShaketClick"); v2[82] = sub_465940(v146, a2, (int)v93, (int)v2, 18, 0); v94 = sub_8FB140(v145, (int)"ChrAura", (int)&v146, (int)&a2, v10)[9]; v95 = *(_DWORD *)(*v94 + 24); v96 = *(_DWORD *)(*v94 + 20); v97 = sub_421050(0); v98 = sub_8F4A20(v146, a2 + 1, v96, v95, v97, (int)v2, 0, 0); v2[111] = v98; v99 = *v98; v100 = sub_40A910(-1532958227); (*(void (__thiscall **)(_DWORD, const CHAR *))(v99 + 472))(v2[111], v100); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[111] + 240))(0); v101 = sub_8FB140(v145, (int)"ChrAuraNor", (int)&v146, (int)&a2, v10); sub_8FB650(v101, v145, (int)"ChrAuraClick"); v2[83] = sub_465940(v146, a2, (int)v101, (int)v2, 19, 0); v102 = sub_8FB140(v145, (int)"HideUITitle", (int)&v146, (int)&a2, v10)[9]; v103 = *(_DWORD *)(*v102 + 24); v104 = *(_DWORD *)(*v102 + 20); v105 = sub_421050(0); v106 = sub_8F4A20(v146, a2, v104, v103, v105, (int)v2, 0, 0); v107 = *v106; v108 = sub_4090F0(2140367722); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v107 + 472))(v106, v108); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v106 + 240))(v106, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v106 + 256))(v106, 1); v109 = sub_8FB140(v145, (int)"HideUI", (int)&v146, (int)&a2, v10)[9]; v110 = *(_DWORD *)(*v109 + 24); v111 = *(_DWORD *)(*v109 + 20); v112 = sub_421050(0); v113 = sub_8F4A20(v146, a2, v111, v110, v112, (int)v2, 0, 0); v114 = *v113; v115 = sub_4090F0(-1734430786); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v114 + 472))(v113, v115); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v113 + 240))(v113, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v113 + 256))(v113, 1); v116 = sub_8FB140(v145, (int)"HideUINor", (int)&v146, (int)&a2, v10); sub_8FB650(v116, v145, (int)"HideUIClick"); v117 = sub_465940(v146, a2, (int)v116, (int)v2, 20, 0); v2[84] = v117; (*(void (__thiscall **)(volatile LONG *, signed int))(*v117 + 240))(v117, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[84] + 256))(1); v118 = sub_8FB140(v145, (int)"EquipmentTitle", (int)&v146, (int)&a2, v10)[9]; v119 = *(_DWORD *)(*v118 + 24); v120 = *(_DWORD *)(*v118 + 20); v121 = sub_421050(0); v122 = sub_8F4A20(v146, a2, v120, v119, v121, (int)v2, 0, 0); v123 = *v122; v124 = sub_4090F0(-823014696); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v123 + 472))(v122, v124); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v122 + 240))(v122, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v122 + 256))(v122, 1); v125 = sub_8FB140(v145, (int)"HelmetUI", (int)&v146, (int)&a2, v10)[9]; v126 = *(_DWORD *)(*v125 + 24); v127 = *(_DWORD *)(*v125 + 20); v128 = sub_421050(0); v129 = sub_8F4A20(v146, a2, v127, v126, v128, (int)v2, 0, 0); v130 = *v129; v131 = sub_4090F0(-318439911); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v130 + 472))(v129, v131); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v129 + 240))(v129, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v129 + 256))(v129, 1); v132 = sub_8FB140(v145, (int)"HelmetUINor", (int)&v146, (int)&a2, v10); sub_8FB650(v132, v145, (int)"HelmetUIClick"); v133 = sub_465940(v146, a2, (int)v132, (int)v2, 21, 0); v2[85] = v133; *((_BYTE *)v133 + 380) = 1; v134 = sub_8FB140(v145, (int)"WeaponEffectUI", (int)&v146, (int)&a2, v10)[9]; v135 = *(_DWORD *)(*v134 + 24); v136 = *(_DWORD *)(*v134 + 20); v137 = sub_421050(0); v138 = sub_8F4A20(v146, a2, v136, v135, v137, (int)v2, 0, 0); v139 = *v138; v140 = sub_4090F0(2023592396); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v139 + 472))(v138, v140); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v138 + 240))(v138, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v138 + 256))(v138, 1); v141 = sub_8FB140(v145, (int)"WeaponEffectUINor", (int)&v146, (int)&a2, v10); sub_8FB650(v141, v145, (int)"WeaponEffectUIClick"); v142 = sub_465940(v146, a2, (int)v141, (int)v2, 22, 0); v2[86] = v142; *((_BYTE *)v142 + 380) = 1; LOBYTE(v147) = 0; if ( !InterlockedDecrement((volatile LONG *)(v144 + 4)) ) (**(void (__thiscall ***)(int, signed int))v144)(v144, 1); v143 = (void (__thiscall ***)(_DWORD, signed int))v145; v147 = -1; if ( v145 && !InterlockedDecrement((volatile LONG *)(v145 + 4)) && v143 ) (**v143)(v143, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005CD760) -------------------------------------------------------- int __thiscall sub_5CD760(_DWORD *this) { int result; // eax bool v2; // zf *(_BYTE *)(this[78] + 380) = *(_BYTE *)(this[78] + 380) == 0; result = this[78]; v2 = *(_BYTE *)(result + 380) == 0; byte_ACEAFA = 1; byte_AB66E7 = v2; return result; } // AB66E7: using guessed type char byte_AB66E7; // ACEAFA: using guessed type char byte_ACEAFA; //----- (005CD820) -------------------------------------------------------- char __thiscall sub_5CD820(int this) { int v1; // eax char v2; // dl __int16 v4; // [esp+0h] [ebp-4h] *(_BYTE *)(*(_DWORD *)(this + 340) + 380) = *(_BYTE *)(*(_DWORD *)(this + 340) + 380) == 0; v1 = *(_DWORD *)(this + 340); v2 = *(_BYTE *)(v1 + 380); *(_BYTE *)(v1 + 380) = v2; LOBYTE(v4) = v2; byte_AB66F6 = v2; return sub_4BD070(*(_DWORD **)(this + 416), v4); } // AB66F6: using guessed type char byte_AB66F6; //----- (005CD870) -------------------------------------------------------- int __thiscall sub_5CD870(_DWORD *this, int a2) { int v2; // edx int result; // eax v2 = *(_DWORD *)(this[a2 + 72] + 300); if ( !a2 ) return sub_5CC4C0(v2); if ( a2 == 1 ) { result = dword_B66FB0; flt_AB66D2 = 1.0 - (double)(v2 - 5) / 10.0; *(float *)(dword_B66FB0 + 292) = flt_AB66D2; } else { result = a2 - 2; if ( a2 == 2 ) result = sub_5CC5C0(*(_DWORD *)(this[74] + 300)); } return result; } // AB66D2: using guessed type float flt_AB66D2; //----- (005CD8D0) -------------------------------------------------------- char __thiscall sub_5CD8D0(int this, int a2) { int v2; // edi char v3; // al int v4; // ebx const CHAR *v5; // eax int v6; // ST08_4 char v7; // al char v8; // al char v9; // al char v10; // al int v12; // [esp+10h] [ebp-108h] char v13; // [esp+14h] [ebp-104h] v2 = this; *(_BYTE *)(*(_DWORD *)(this + 308) + 380) = *(_BYTE *)(a2 + 34); sub_5CC2B0((_DWORD **)this, *(float *)(a2 + 57)); sub_5CC390((_DWORD **)v2, *(_DWORD *)(a2 + 30)); sub_4637A0(*(_DWORD **)(v2 + 292), (signed int)((1.0 - *(float *)(a2 + 26)) * 10.0 + 5.0)); *(_BYTE *)(*(_DWORD *)(v2 + 312) + 380) = *(_BYTE *)(a2 + 47); v3 = 0; if ( *(_DWORD *)(a2 + 48) ) v3 = 1; *(_BYTE *)(*(_DWORD *)(v2 + 316) + 380) = v3; if ( *(_BYTE *)(*(_DWORD *)(v2 + 316) + 380) ) { v4 = **(_DWORD **)(v2 + 428); v5 = sub_40C190(-2121041452); } else { v4 = **(_DWORD **)(v2 + 428); v5 = sub_40C190(-2121023540); } (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v2 + 428), v5); v6 = *(_DWORD *)(a2 + 39); dword_AB66E3 = *(_DWORD *)(a2 + 43); dword_AB66DF = v6; sprintf(&v13, "%i x %i", v6, dword_AB66E3); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 420) + 472))(&v13); dword_AAEBA8 = *(_DWORD *)(a2 + 39); dword_AAEBAC = *(_DWORD *)(a2 + 43); LOBYTE(v12) = *(_BYTE *)(a2 + 52); *(_BYTE *)(*(_DWORD *)(v2 + 320) + 380) = v12; sub_6BD320(v12); v7 = *(_BYTE *)(a2 + 54); *(_BYTE *)(*(_DWORD *)(v2 + 328) + 380) = v7; byte_AB66EE = v7; LOBYTE(v12) = *(_BYTE *)(a2 + 55); *(_BYTE *)(*(_DWORD *)(v2 + 332) + 380) = v12; sub_5CDEC0(v12); v8 = *(_BYTE *)(a2 + 56); *(_BYTE *)(*(_DWORD *)(v2 + 336) + 380) = v8; byte_AB66F0 = v8; v9 = *(_BYTE *)(a2 + 61); *(_BYTE *)(*(_DWORD *)(v2 + 344) + 380) = v9; byte_AB66F5 = v9; v10 = *(_BYTE *)(a2 + 62); LOBYTE(v12) = v10; *(_BYTE *)(*(_DWORD *)(v2 + 340) + 380) = v10; byte_AB66F6 = v10; return sub_4BD070(*(_DWORD **)(v2 + 416), v12); } // AB66E3: using guessed type int dword_AB66E3; // AB66EE: using guessed type char byte_AB66EE; // AB66F0: using guessed type char byte_AB66F0; // AB66F5: using guessed type char byte_AB66F5; // AB66F6: using guessed type char byte_AB66F6; //----- (005CDAB0) -------------------------------------------------------- int __thiscall sub_5CDAB0(int this) { int v1; // esi int v2; // eax signed int v3; // edi int v4; // ebx const CHAR *v5; // eax int result; // eax v1 = this; v2 = *(_DWORD *)(this + 316); v3 = 0; if ( !*(_BYTE *)(v2 + 380) ) v3 = 1; *(_BYTE *)(v2 + 380) = *(_BYTE *)(v2 + 380) == 0; v4 = **(_DWORD **)(this + 428); if ( *(_BYTE *)(*(_DWORD *)(this + 316) + 380) ) v5 = sub_40C190(-2121041452); else v5 = sub_40C190(-2121023540); result = (*(int (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v1 + 428), v5); dword_AB66E8 = v3; byte_ACEAFA = 1; return result; } // AB66E8: using guessed type int dword_AB66E8; // ACEAFA: using guessed type char byte_ACEAFA; //----- (005CDB50) -------------------------------------------------------- char __thiscall sub_5CDB50(int this, int a2, int a3) { char v3; // dl char result; // al v3 = *(_BYTE *)(this + 348); result = a2 - 11; *(_BYTE *)(this + 348) = 1; switch ( a2 ) { case 11: result = sub_5CD870((_DWORD *)this, a3); break; case 12: result = sub_5CC630((_DWORD *)this); break; case 13: result = (unsigned int)sub_8EEE70(*(_DWORD **)(this + 416), 141, 0, 0); break; case 14: result = sub_5CD760((_DWORD *)this); break; case 15: result = sub_5CDAB0(this); break; case 16: result = sub_5CC780((_DWORD *)this); break; case 17: return result; case 18: result = sub_5CC7D0((_DWORD *)this); break; case 19: result = (unsigned int)sub_5CC820((_DWORD *)this); break; case 20: result = sub_5CC870((_DWORD *)this); break; case 21: result = sub_5CD820(this); break; case 22: result = sub_5CC8F0((_DWORD *)this); break; default: *(_BYTE *)(this + 348) = v3; break; } return result; } //----- (005CDC30) -------------------------------------------------------- char __thiscall sub_5CDC30(_BYTE *this) { int v1; // esi char result; // al v1 = (int)this; if ( this[348] ) { sub_49F7B0(this + 349); result = sub_5CD8D0(v1, v1 + 349); byte_ACEAFA = 1; } *(_BYTE *)(v1 + 348) = 0; return result; } // ACEAFA: using guessed type char byte_ACEAFA; //----- (005CDD00) -------------------------------------------------------- char __thiscall sub_5CDD00(void *this) { char v1; // bl int v2; // esi char result; // al v1 = byte_AB66E7; v2 = (int)this; sub_6BC9D0((char *)&dword_AB66B8); sub_49F7B0(&dword_AB66B8); sub_5CD8D0(v2, (int)&dword_AB66B8); result = 1; *(_BYTE *)(v2 + 348) = 1; if ( byte_AB66E7 != v1 ) byte_ACEAFA = 1; return result; } // AB66B8: using guessed type int dword_AB66B8; // AB66E7: using guessed type char byte_AB66E7; // ACEAFA: using guessed type char byte_ACEAFA; //----- (005CDD50) -------------------------------------------------------- int __cdecl sub_5CDD50(int a1) { _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C0u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_8F2740(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &OptionGraphicWin::`vftable'; *(_DWORD *)(v2 + 232) = &OptionGraphicWin::`vftable'; sub_6BD450(v2 + 349); *(_DWORD *)(v2 + 412) = 0; *(_BYTE *)(v2 + 348) = 0; *(_DWORD *)(v2 + 420) = 0; *(_DWORD *)(v2 + 336) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 452))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9E3468: using guessed type void *OptionGraphicWin::`vftable'; // 9E3484: using guessed type void *OptionGraphicWin::`vftable'; //----- (005CDEC0) -------------------------------------------------------- char *__cdecl sub_5CDEC0(char a1) { char *result; // eax byte_AB66EF = a1; sub_6AAEB0(&unk_B91250, a1); sub_664760(dword_AD8C90, a1); result = dword_AD8EBC; if ( *(_WORD *)(dword_AD8EBC + 977) != -1 ) { result = (char *)sub_6AB1D0(&unk_B91250, *((_WORD *)dword_AD8EBC + 274)); if ( result ) result = (char *)(*(int (__thiscall **)(char *, _DWORD))(*(_DWORD *)result + 84))(result, 0); } return result; } // AB66EF: using guessed type char byte_AB66EF; //----- (005CDF20) -------------------------------------------------------- void *__thiscall sub_5CDF20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &OptionGraphicWin::`vftable'; *((_DWORD *)this + 58) = &OptionGraphicWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E3468: using guessed type void *OptionGraphicWin::`vftable'; // 9E3484: using guessed type void *OptionGraphicWin::`vftable'; //----- (005CDFB0) -------------------------------------------------------- int __thiscall sub_5CDFB0(_BYTE *this) { _BYTE *v1; // ebx int result; // eax char v3; // [esp+10h] [ebp-20h] unsigned int v4; // [esp+18h] [ebp-18h] unsigned int v5; // [esp+1Ch] [ebp-14h] unsigned int v6; // [esp+20h] [ebp-10h] unsigned int v7; // [esp+24h] [ebp-Ch] float v8; // [esp+2Ch] [ebp-4h] v1 = this; qmemcpy(&v3, sub_6BC0C0(), 0x1Cu); v8 = (double)v4 / 50.0; sub_6BA380(v8); v8 = (double)v5 / 50.0; sub_6BA690(&dword_AB6520, v8); v8 = (double)v6 / 50.0; sub_6BA6B0(&dword_AB6520, v8); v8 = (double)v7 / 50.0; result = sub_6BA720(&dword_AB6520, v8); v1[304] = 0; return result; } //----- (005CE0E0) -------------------------------------------------------- int __thiscall sub_5CE0E0(_DWORD *this, unsigned int a2) { _DWORD *v2; // ebx int result; // eax int v4; // edi signed int v5; // esi _DWORD *v6; // ecx float v7; // [esp+18h] [ebp+8h] v2 = this; v7 = (double)a2 / 50.0; result = sub_6BA380(v7); v4 = *(_DWORD *)(v2[72] + 300); v5 = 1; do { v6 = (_DWORD *)v2[v5 + 72]; if ( v4 < v6[75] ) { sub_4637A0(v6, v4); if ( v5 == 1 ) { result = sub_6BA690(&dword_AB6520, v7); } else if ( v5 == 2 ) { result = sub_6BA6B0(&dword_AB6520, v7); } else { result = v5 - 3; if ( v5 == 3 ) result = sub_6BA720(&dword_AB6520, v7); } } ++v5; } while ( v5 < 4 ); return result; } //----- (005CE1A0) -------------------------------------------------------- int __thiscall sub_5CE1A0(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi double v4; // [esp+8h] [ebp-8h] float v5; // [esp+18h] [ebp+8h] v2 = this; v4 = (double)a2 / 50.0; if ( sub_6B5560() < v4 ) sub_4637A0(v2[73], v2[72][75]); v5 = v4; return sub_6BA690(&dword_AB6520, v5); } //----- (005CE210) -------------------------------------------------------- int __thiscall sub_5CE210(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi double v4; // [esp+8h] [ebp-8h] float v5; // [esp+18h] [ebp+8h] v2 = this; v4 = (double)a2 / 50.0; if ( sub_6B5560() < v4 ) sub_4637A0(v2[74], v2[72][75]); v5 = v4; return sub_6BA6B0(&dword_AB6520, v5); } //----- (005CE280) -------------------------------------------------------- int __thiscall sub_5CE280(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi double v4; // [esp+8h] [ebp-8h] float v5; // [esp+18h] [ebp+8h] v2 = this; v4 = (double)a2 / 50.0; if ( sub_6B5560() < v4 ) sub_4637A0(v2[75], v2[72][75]); v5 = v4; return sub_6BA720(&dword_AB6520, v5); } //----- (005CE2F0) -------------------------------------------------------- char __thiscall sub_5CE2F0(_BYTE *this) { _BYTE *v1; // esi int v2; // edx int v3; // ecx int v4; // eax char v6; // [esp+4h] [ebp-1Ch] int v7; // [esp+Ch] [ebp-14h] int v8; // [esp+10h] [ebp-10h] int v9; // [esp+14h] [ebp-Ch] int v10; // [esp+18h] [ebp-8h] v1 = this; this[304] = 0; sub_6BD2E0(&v6); v2 = *((_DWORD *)v1 + 73); v7 = *(_DWORD *)(*((_DWORD *)v1 + 72) + 300); v3 = *((_DWORD *)v1 + 74); v8 = *(_DWORD *)(v2 + 300); v4 = *((_DWORD *)v1 + 75); v9 = *(_DWORD *)(v3 + 300); v10 = *(_DWORD *)(v4 + 300); sub_6BC0D0(&v6); return sub_8F86A0(&unk_BA6B10, *((_DWORD **)v1 + 77)); } //----- (005CE370) -------------------------------------------------------- void __thiscall sub_5CE370(_DWORD **this) { _DWORD **v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi int v3; // [esp+4h] [ebp-4h] v1 = this; if ( this[77] ) { (*(void (__stdcall **)(int *, _DWORD **))(*this[77] + 120))(&v3, this); if ( v3 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } ((void (__thiscall *)(_DWORD **, _DWORD))(*v1)[64])(v1, 0); } } //----- (005CE470) -------------------------------------------------------- int __thiscall sub_5CE470(_DWORD **this) { _DWORD **v1; // ebx int *v2; // esi int result; // eax char v4; // [esp+10h] [ebp-20h] unsigned int v5; // [esp+18h] [ebp-18h] unsigned int v6; // [esp+1Ch] [ebp-14h] unsigned int v7; // [esp+20h] [ebp-10h] unsigned int v8; // [esp+24h] [ebp-Ch] float v9; // [esp+2Ch] [ebp-4h] v1 = this; sub_6BC080(); v2 = sub_6BC0C0(); sub_4637A0(v1[72], v2[2]); sub_4637A0(v1[73], v2[3]); sub_4637A0(v1[74], v2[4]); sub_4637A0(v1[75], v2[5]); qmemcpy(&v4, sub_6BC0C0(), 0x1Cu); v9 = (double)v5 / 50.0; sub_6BA380(v9); v9 = (double)v6 / 50.0; sub_6BA690(&dword_AB6520, v9); v9 = (double)v7 / 50.0; sub_6BA6B0(&dword_AB6520, v9); v9 = (double)v8 / 50.0; result = sub_6BA720(&dword_AB6520, v9); *((_BYTE *)v1 + 304) = 1; return result; } //----- (005CE590) -------------------------------------------------------- char __thiscall sub_5CE590(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx int v4; // edi char *v5; // eax volatile LONG **v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // ecx int v10; // edi int v11; // ebx int v12; // eax volatile LONG *v13; // edi volatile LONG v14; // ebx const CHAR *v15; // eax int v16; // eax int v17; // edi int v18; // ebx int v19; // eax volatile LONG *v20; // edi volatile LONG v21; // ebx const CHAR *v22; // eax volatile LONG *v23; // ecx int v24; // edi int v25; // ebx int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx const CHAR *v29; // eax int v30; // eax int v31; // edi int v32; // ebx int v33; // eax volatile LONG *v34; // edi volatile LONG v35; // ebx const CHAR *v36; // eax volatile LONG **v37; // eax int v38; // edi int v39; // eax int v40; // eax int v41; // eax int v42; // eax void (__thiscall ***v43)(_DWORD, signed int); // esi int v44; // [esp+10h] [ebp-14h] int v45; // [esp+14h] [ebp-10h] int v46; // [esp+20h] [ebp-4h] v2 = this; v3 = *this; this[78] = a2; (*(void (__stdcall **)(signed int))(v3 + 172))(-15); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 176))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 152))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 156))(v2, 0); (*(void (__thiscall **)(_DWORD *, void *))(*v2 + 140))(v2, &unk_9E3660); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 300))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 240))(v2, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v2 + 256))(v2, 1); a2 = 0; v4 = dword_BA6BA0; v46 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\Option_Sound.nif"); sub_8F66B0(v5, (int)&a2, v4); if ( !a2 ) return 0; v7 = sub_8FB140(a2, (int)"Panel_Sound", (int)&v44, (int)&v45, 0); v8 = sub_8F3EB0(v44, v45, (int)v7, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v8 + 240))(v8, 0); v9 = sub_8FB140(a2, (int)"ToSdOpt", (int)&v44, (int)&v45, 0)[9]; v10 = *(_DWORD *)(*v9 + 24); v11 = *(_DWORD *)(*v9 + 20); v12 = sub_421050(0); v13 = sub_8F4A20(v44, v45 + 1, v11, v10, v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 4); v14 = *v13; v15 = sub_40C190(712739228); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v14 + 472))(v13, v15); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v16 = *sub_8FB140(a2, (int)"BaGdOpt", (int)&v44, (int)&v45, 0)[9]; v17 = *(_DWORD *)(v16 + 24); v18 = *(_DWORD *)(v16 + 20); v19 = sub_421050(0); v20 = sub_8F4A20(v44, v45 + 1, v18, v17, v19, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 4); v21 = *v20; v22 = sub_40C190(-567593655); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v20, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v23 = sub_8FB140(a2, (int)"EfSdOpt", (int)&v44, (int)&v45, 0)[9]; v24 = *(_DWORD *)(*v23 + 24); v25 = *(_DWORD *)(*v23 + 20); v26 = sub_421050(0); v27 = sub_8F4A20(v44, v45 + 1, v25, v24, v26, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 4); v28 = *v27; v29 = sub_40C190(829520527); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = *sub_8FB140(a2, (int)"EnEfOpt", (int)&v44, (int)&v45, 0)[9]; v31 = *(_DWORD *)(v30 + 24); v32 = *(_DWORD *)(v30 + 20); v33 = sub_421050(0); v34 = sub_8F4A20(v44, v45 + 1, v32, v31, v33, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 4); v35 = *v34; v36 = sub_40C190(-1820283181); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v35 + 472))(v34, v36); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); v37 = sub_8FB140(a2, (int)"MovingPoint", (int)&v44, (int)&v45, 0); v38 = (int)v37; v39 = sub_464310(a2, (int)"ToSdOptBar", "ToSdOptBarLow", "ToSdOptBarHigh", (int)v37, 0, v2); v2[72] = v39; *(_DWORD *)(v39 + 312) = 11; sub_4638F0((_DWORD *)v2[72], 51); sub_4637A0((_DWORD *)v2[72], 4); v40 = sub_464310(a2, (int)"BaGdOptBar", "BaGdOptBarLow", "BaGdOptBarHigh", v38, 1, v2); v2[73] = v40; *(_DWORD *)(v40 + 312) = 11; sub_4638F0((_DWORD *)v2[73], 51); sub_4637A0((_DWORD *)v2[73], 4); v41 = sub_464310(a2, (int)"EfSdOptBar", "EfSdOptBarLow", "EfSdOptBarHigh", v38, 2, v2); v2[74] = v41; *(_DWORD *)(v41 + 312) = 11; sub_4638F0((_DWORD *)v2[74], 51); sub_4637A0((_DWORD *)v2[74], 4); v42 = sub_464310(a2, (int)"EnEfOptBar", "EnEfOptBarLow", "EnEfOptBarHigh", v38, 3, v2); v2[75] = v42; *(_DWORD *)(v42 + 312) = 11; sub_4638F0((_DWORD *)v2[75], 51); sub_4637A0((_DWORD *)v2[75], 4); v46 = -1; if ( a2 ) { v43 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v43 ) (**v43)(v43, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005CEAA0) -------------------------------------------------------- char __thiscall sub_5CEAA0(int this, int a2, int a3) { int v3; // eax LOBYTE(v3) = *(_BYTE *)(this + 304); *(_BYTE *)(this + 304) = 1; if ( a2 == 11 ) { v3 = *(_DWORD *)(*(_DWORD *)(this + 4 * a3 + 288) + 300); switch ( a3 ) { case 0: LOBYTE(v3) = sub_5CE0E0((_DWORD *)this, *(_DWORD *)(*(_DWORD *)(this + 4 * a3 + 288) + 300)); break; case 1: LOBYTE(v3) = sub_5CE1A0((_DWORD **)this, *(_DWORD *)(*(_DWORD *)(this + 4 * a3 + 288) + 300)); break; case 2: LOBYTE(v3) = sub_5CE210((_DWORD **)this, *(_DWORD *)(*(_DWORD *)(this + 4 * a3 + 288) + 300)); break; case 3: LOBYTE(v3) = sub_5CE280((_DWORD **)this, *(_DWORD *)(*(_DWORD *)(this + 4 * a3 + 288) + 300)); break; default: return v3; } } else { *(_BYTE *)(this + 304) = v3; } return v3; } //----- (005CEB20) -------------------------------------------------------- int __cdecl sub_5CEB20(int a1) { _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x13Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_8F2740(v1); *(_DWORD *)v2 = &OptionSoundWin::`vftable'; *(_DWORD *)(v2 + 232) = &OptionSoundWin::`vftable'; *(_DWORD *)(v2 + 308) = 0; *(_BYTE *)(v2 + 304) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 452))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9E3768: using guessed type void *OptionSoundWin::`vftable'; // 9E3784: using guessed type void *OptionSoundWin::`vftable'; //----- (005CEC70) -------------------------------------------------------- void *__thiscall sub_5CEC70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &OptionSoundWin::`vftable'; *((_DWORD *)this + 58) = &OptionSoundWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E3768: using guessed type void *OptionSoundWin::`vftable'; // 9E3784: using guessed type void *OptionSoundWin::`vftable'; //----- (005CED50) -------------------------------------------------------- char __thiscall sub_5CED50(int this) { int v1; // esi _DWORD *v2; // ST00_4 int v3; // ecx v1 = this; v2 = *(_DWORD **)(this + 344); *(_BYTE *)(this + 288) = 0; sub_8F86A0(&unk_BA6B10, v2); v3 = *(_DWORD *)(v1 + 348); return sub_498220(); } //----- (005CED80) -------------------------------------------------------- char __thiscall sub_5CED80(void **this) { void **v1; // esi char result; // al v1 = this; result = sub_4CD380(this[87]); *((_BYTE *)v1 + 288) = 1; return result; } //----- (005CEDA0) -------------------------------------------------------- int __thiscall sub_5CEDA0(_DWORD *this) { int result; // eax *(_BYTE *)(this[88] + 380) = *(_BYTE *)(this[88] + 380) == 0; result = this[88]; BYTE2(dword_B91FFC) = *(_BYTE *)(result + 380); return result; } // B91FFC: using guessed type int dword_B91FFC; //----- (005CEDD0) -------------------------------------------------------- int __thiscall sub_5CEDD0(_DWORD *this) { int result; // eax *(_BYTE *)(this[89] + 380) = *(_BYTE *)(this[89] + 380) == 0; result = this[89]; HIBYTE(dword_B91FFC) = *(_BYTE *)(result + 380); return result; } // B91FFC: using guessed type int dword_B91FFC; //----- (005CEE00) -------------------------------------------------------- int __thiscall sub_5CEE00(_DWORD *this) { int result; // eax *(_BYTE *)(this[90] + 380) = *(_BYTE *)(this[90] + 380) == 0; result = this[90]; byte_B92000 = *(_BYTE *)(result + 380); return result; } // B92000: using guessed type char byte_B92000; //----- (005CEE30) -------------------------------------------------------- int __thiscall sub_5CEE30(_DWORD *this) { int result; // eax *(_BYTE *)(this[91] + 380) = *(_BYTE *)(this[91] + 380) == 0; result = this[91]; byte_B92001 = *(_BYTE *)(result + 380); return result; } // B92001: using guessed type char byte_B92001; //----- (005CEE60) -------------------------------------------------------- int __thiscall sub_5CEE60(_DWORD *this) { int result; // eax *(_BYTE *)(this[92] + 380) = *(_BYTE *)(this[92] + 380) == 0; result = this[92]; byte_B92002 = *(_BYTE *)(result + 380); return result; } // B92002: using guessed type char byte_B92002; //----- (005CEE90) -------------------------------------------------------- int __thiscall sub_5CEE90(_DWORD *this) { int result; // eax *(_BYTE *)(this[93] + 380) = *(_BYTE *)(this[93] + 380) == 0; result = this[93]; byte_B92003 = *(_BYTE *)(result + 380); return result; } // B92003: using guessed type char byte_B92003; //----- (005CEEC0) -------------------------------------------------------- int __thiscall sub_5CEEC0(_DWORD *this) { int result; // eax *(_BYTE *)(this[94] + 380) = *(_BYTE *)(this[94] + 380) == 0; result = this[94]; byte_B92004 = *(_BYTE *)(result + 380); return result; } // B92004: using guessed type char byte_B92004; //----- (005CEEF0) -------------------------------------------------------- int __thiscall sub_5CEEF0(_DWORD *this) { int result; // eax *(_BYTE *)(this[95] + 380) = *(_BYTE *)(this[95] + 380) == 0; result = this[95]; byte_B92005 = *(_BYTE *)(result + 380); return result; } // B92005: using guessed type char byte_B92005; //----- (005CEF20) -------------------------------------------------------- int __thiscall sub_5CEF20(_DWORD *this) { int result; // eax *(_BYTE *)(this[96] + 380) = *(_BYTE *)(this[96] + 380) == 0; result = this[96]; byte_B92006 = *(_BYTE *)(result + 380); return result; } // B92006: using guessed type char byte_B92006; //----- (005CEF50) -------------------------------------------------------- int __usercall sub_5CEF50@(int a1@, int a2@) { int result; // eax *(_BYTE *)(*(_DWORD *)(a1 + 388) + 380) = *(_BYTE *)(*(_DWORD *)(a1 + 388) + 380) == 0; byte_B92007 = *(_BYTE *)(*(_DWORD *)(a1 + 388) + 380); result = *(_DWORD *)(a1 + 388); if ( *(_BYTE *)(result + 380) ) result = sub_4985A0(*(_DWORD *)(a1 + 348), a2); return result; } // B92007: using guessed type char byte_B92007; //----- (005CEFA0) -------------------------------------------------------- int __thiscall sub_5CEFA0(_DWORD *this) { int result; // eax *(_BYTE *)(this[98] + 380) = *(_BYTE *)(this[98] + 380) == 0; result = this[98]; byte_B92026 = *(_BYTE *)(result + 380); return result; } // B92026: using guessed type char byte_B92026; //----- (005CEFD0) -------------------------------------------------------- int __thiscall sub_5CEFD0(_DWORD *this) { int result; // eax *(_BYTE *)(this[99] + 380) = *(_BYTE *)(this[99] + 380) == 0; result = this[99]; byte_B92008 = *(_BYTE *)(result + 380); return result; } // B92008: using guessed type char byte_B92008; //----- (005CF000) -------------------------------------------------------- int __thiscall sub_5CF000(_DWORD *this) { int result; // eax *(_BYTE *)(this[100] + 380) = *(_BYTE *)(this[100] + 380) == 0; result = this[100]; byte_B92009 = *(_BYTE *)(result + 380); return result; } // B92009: using guessed type char byte_B92009; //----- (005CF030) -------------------------------------------------------- int __thiscall sub_5CF030(_DWORD *this) { int result; // eax *(_BYTE *)(this[101] + 380) = *(_BYTE *)(this[101] + 380) == 0; result = this[101]; byte_B9200A = *(_BYTE *)(result + 380); return result; } // B9200A: using guessed type char byte_B9200A; //----- (005CF060) -------------------------------------------------------- int __thiscall sub_5CF060(_DWORD *this) { int result; // eax *(_BYTE *)(this[102] + 380) = *(_BYTE *)(this[102] + 380) == 0; result = this[102]; byte_B9200B = *(_BYTE *)(result + 380); return result; } // B9200B: using guessed type char byte_B9200B; //----- (005CF090) -------------------------------------------------------- int __thiscall sub_5CF090(_DWORD *this) { int result; // eax *(_BYTE *)(this[103] + 380) = *(_BYTE *)(this[103] + 380) == 0; result = this[103]; byte_B9200C = *(_BYTE *)(result + 380); return result; } // B9200C: using guessed type char byte_B9200C; //----- (005CF0C0) -------------------------------------------------------- int __thiscall sub_5CF0C0(_DWORD *this) { int result; // eax *(_BYTE *)(this[104] + 380) = *(_BYTE *)(this[104] + 380) == 0; result = this[104]; byte_B9200D = *(_BYTE *)(result + 380); return result; } // B9200D: using guessed type char byte_B9200D; //----- (005CF0F0) -------------------------------------------------------- int __thiscall sub_5CF0F0(_DWORD *this) { int result; // eax *(_BYTE *)(this[105] + 380) = *(_BYTE *)(this[105] + 380) == 0; result = this[105]; byte_B92028 = *(_BYTE *)(result + 380); return result; } // B92028: using guessed type char byte_B92028; //----- (005CF120) -------------------------------------------------------- char __thiscall sub_5CF120(_DWORD *this) { *(_BYTE *)(this[106] + 380) = *(_BYTE *)(this[106] + 380) == 0; byte_B9202B = *(_BYTE *)(this[106] + 380); return sub_63ADC0(byte_AD8A08, byte_B9202B); } // B9202B: using guessed type char byte_B9202B; //----- (005CF160) -------------------------------------------------------- int __thiscall sub_5CF160(_DWORD *this) { int result; // eax *(_BYTE *)(this[107] + 380) = *(_BYTE *)(this[107] + 380) == 0; result = this[107]; byte_B9202C = *(_BYTE *)(result + 380); return result; } // B9202C: using guessed type char byte_B9202C; //----- (005CF190) -------------------------------------------------------- void __thiscall sub_5CF190(_DWORD *this) { char v1; // al _DWORD *v2; // ecx *(_BYTE *)(this[108] + 380) = *(_BYTE *)(this[108] + 380) == 0; v1 = *(_BYTE *)(this[108] + 380); byte_B9202D = *(_BYTE *)(this[108] + 380); v2 = (_DWORD *)this[87]; if ( v2 ) { if ( v1 ) sub_4A5B80(v2); else sub_4A5BA0((_DWORD **)v2); } } // B9202D: using guessed type char byte_B9202D; //----- (005CF1D0) -------------------------------------------------------- int __thiscall sub_5CF1D0(_DWORD *this) { int result; // eax int v2; // ecx _DWORD *v3; // ecx result = (int)this; *(_BYTE *)(this[109] + 380) = *(_BYTE *)(this[109] + 380) == 0; byte_B9202E = *(_BYTE *)(this[109] + 380); v2 = this[87]; if ( v2 ) { v3 = *(_DWORD **)(v2 + 716); if ( v3 ) result = sub_534850(v3, *(_BYTE *)(*(_DWORD *)(result + 436) + 380)); } return result; } // B9202E: using guessed type char byte_B9202E; //----- (005CF230) -------------------------------------------------------- void __thiscall sub_5CF230(_DWORD **this) { _DWORD **v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi int v3; // [esp+4h] [ebp-4h] v1 = this; if ( this[86] ) { (*(void (__stdcall **)(int *, _DWORD **))(*this[86] + 120))(&v3, this); if ( v3 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } ((void (__thiscall *)(_DWORD **, _DWORD))(*v1)[64])(v1, 0); } } //----- (005CF550) -------------------------------------------------------- int __thiscall sub_5CF550(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi int result; // eax v2 = this; *(_BYTE *)(this[88] + 380) = a2[6]; *(_BYTE *)(this[89] + 380) = a2[7]; *(_BYTE *)(this[90] + 380) = a2[8]; *(_BYTE *)(this[91] + 380) = a2[9]; *(_BYTE *)(this[92] + 380) = a2[10]; *(_BYTE *)(this[93] + 380) = a2[11]; *(_BYTE *)(this[94] + 380) = a2[12]; *(_BYTE *)(this[95] + 380) = a2[13]; *(_BYTE *)(this[96] + 380) = a2[14]; *(_BYTE *)(this[97] + 380) = a2[15]; *(_BYTE *)(this[98] + 380) = a2[46]; *(_BYTE *)(this[99] + 380) = a2[16]; *(_BYTE *)(this[100] + 380) = a2[17]; *(_BYTE *)(this[101] + 380) = a2[18]; *(_BYTE *)(this[102] + 380) = a2[19]; *(_BYTE *)(this[103] + 380) = a2[20]; *(_BYTE *)(this[104] + 380) = a2[21]; *(_BYTE *)(this[105] + 380) = a2[48]; *(_BYTE *)(this[106] + 380) = a2[51]; *(_BYTE *)(this[107] + 380) = a2[52]; *(_BYTE *)(this[108] + 380) = a2[53]; LOBYTE(result) = sub_63ADC0(byte_AD8A08, byte_B9202B); *(_BYTE *)(v2[109] + 380) = a2[54]; return result; } // B9202B: using guessed type char byte_B9202B; //----- (005CF6E0) -------------------------------------------------------- char __thiscall sub_5CF6E0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx int v4; // edi char *v5; // eax _DWORD *v6; // eax int v7; // eax int v8; // ebx int v9; // eax volatile LONG *v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // esi volatile LONG **v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // ecx int v16; // ebx int v17; // ST40_4 int v18; // eax volatile LONG *v19; // ebx volatile LONG v20; // ST40_4 const CHAR *v21; // eax volatile LONG **v22; // ebx volatile LONG *v23; // ecx int v24; // ebx int v25; // ST40_4 int v26; // eax volatile LONG *v27; // ebx volatile LONG v28; // ST40_4 const CHAR *v29; // eax volatile LONG **v30; // ebx volatile LONG *v31; // ecx int v32; // ebx int v33; // ST40_4 int v34; // eax volatile LONG *v35; // ebx volatile LONG v36; // ST40_4 const CHAR *v37; // eax volatile LONG **v38; // ebx volatile LONG *v39; // ecx int v40; // ebx int v41; // ST40_4 int v42; // eax volatile LONG *v43; // ebx volatile LONG v44; // ST40_4 const CHAR *v45; // eax volatile LONG **v46; // ebx volatile LONG *v47; // ecx int v48; // ebx int v49; // ST40_4 int v50; // eax volatile LONG *v51; // ebx volatile LONG v52; // ST40_4 const CHAR *v53; // eax volatile LONG **v54; // ebx volatile LONG *v55; // ecx int v56; // ebx int v57; // ST40_4 int v58; // eax volatile LONG *v59; // ebx volatile LONG v60; // ST40_4 const CHAR *v61; // eax volatile LONG **v62; // ebx volatile LONG *v63; // ecx int v64; // ebx int v65; // ST40_4 int v66; // eax volatile LONG *v67; // ebx volatile LONG v68; // ST40_4 const CHAR *v69; // eax volatile LONG **v70; // ebx volatile LONG *v71; // ecx int v72; // ebx int v73; // ST40_4 int v74; // eax volatile LONG *v75; // ebx volatile LONG v76; // ST40_4 const CHAR *v77; // eax volatile LONG **v78; // ebx volatile LONG *v79; // ecx int v80; // ebx int v81; // ST40_4 int v82; // eax volatile LONG *v83; // ebx volatile LONG v84; // ST40_4 const CHAR *v85; // eax volatile LONG **v86; // ebx volatile LONG *v87; // ecx int v88; // ebx int v89; // ST40_4 int v90; // eax volatile LONG *v91; // ebx volatile LONG v92; // ST40_4 const CHAR *v93; // eax volatile LONG **v94; // ebx volatile LONG *v95; // ecx int v96; // ebx int v97; // ST40_4 int v98; // eax volatile LONG *v99; // ebx volatile LONG v100; // ST40_4 const CHAR *v101; // eax volatile LONG **v102; // ebx volatile LONG *v103; // ecx int v104; // ebx int v105; // ST40_4 int v106; // eax volatile LONG *v107; // ebx volatile LONG v108; // ST40_4 const CHAR *v109; // eax volatile LONG **v110; // ebx volatile LONG *v111; // ecx int v112; // ebx int v113; // ST40_4 int v114; // eax volatile LONG *v115; // ebx volatile LONG v116; // ST40_4 const CHAR *v117; // eax volatile LONG **v118; // ebx volatile LONG *v119; // ecx int v120; // ebx int v121; // ST40_4 int v122; // eax volatile LONG *v123; // ebx volatile LONG v124; // ST40_4 const CHAR *v125; // eax volatile LONG **v126; // ebx volatile LONG *v127; // ecx int v128; // ebx int v129; // ST40_4 int v130; // eax volatile LONG *v131; // ebx volatile LONG v132; // ST40_4 const CHAR *v133; // eax volatile LONG **v134; // ebx volatile LONG *v135; // ecx int v136; // ebx int v137; // ST40_4 int v138; // eax volatile LONG *v139; // ebx volatile LONG v140; // ST40_4 const CHAR *v141; // eax volatile LONG **v142; // ebx volatile LONG *v143; // ecx int v144; // ebx int v145; // ST40_4 int v146; // eax volatile LONG *v147; // ebx volatile LONG v148; // ST40_4 const CHAR *v149; // eax volatile LONG **v150; // ebx volatile LONG *v151; // ecx int v152; // ebx int v153; // ST40_4 int v154; // eax volatile LONG *v155; // ebx volatile LONG v156; // ST40_4 const CHAR *v157; // eax volatile LONG **v158; // ebx volatile LONG *v159; // ecx int v160; // ebx int v161; // ST40_4 int v162; // eax volatile LONG *v163; // ebx volatile LONG v164; // ST40_4 const CHAR *v165; // eax volatile LONG **v166; // ebx volatile LONG *v167; // ecx int v168; // ebx int v169; // ST40_4 int v170; // eax volatile LONG *v171; // ebx volatile LONG v172; // ST40_4 const CHAR *v173; // eax volatile LONG **v174; // ebx volatile LONG *v175; // ecx int v176; // ebx int v177; // ST40_4 int v178; // eax volatile LONG *v179; // ebx volatile LONG v180; // ST40_4 const CHAR *v181; // eax volatile LONG **v182; // ebx volatile LONG *v183; // ecx int v184; // ebx int v185; // ST40_4 int v186; // eax volatile LONG *v187; // ebx volatile LONG v188; // ST40_4 const CHAR *v189; // eax volatile LONG **v190; // edi void (__thiscall ***v191)(_DWORD, signed int); // edi int v192; // [esp+10h] [ebp-1Ch] int v193; // [esp+18h] [ebp-14h] int v194; // [esp+1Ch] [ebp-10h] int v195; // [esp+28h] [ebp-4h] v2 = this; v3 = *this; this[87] = a2; (*(void (__stdcall **)(signed int))(v3 + 172))(-15); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 176))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 152))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 156))(v2, 0); (*(void (__thiscall **)(_DWORD *, void *))(*v2 + 140))(v2, &unk_9E394C); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 300))(v2, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 240))(v2, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v2 + 256))(v2, 1); v193 = 0; v4 = dword_BA6BA0; v195 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\Option_System.nif"); sub_8F66B0(v5, (int)&v193, v4); if ( !v193 ) return 0; v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v193 + 72))("Panel_System"); v7 = sub_85C050(v6, 8); v8 = v7; v192 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v195) = 1; if ( !v9 || (v10 = *(volatile LONG **)(v9 + 4)) == 0 ) { LOBYTE(v195) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v193; v195 = -1; if ( v193 && !InterlockedDecrement((volatile LONG *)(v193 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v13 = sub_8FB140(v193, (int)"Panel_System", (int)&v194, (int)&a2, v10); v14 = sub_8F3EB0(v194, a2, (int)v13, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v15 = sub_8FB140(v193, (int)"MyChrName", (int)&v194, (int)&a2, v10)[9]; v16 = *(_DWORD *)(*v15 + 24); v17 = *(_DWORD *)(*v15 + 20); v18 = sub_421050(0); v19 = sub_8F4A20(v194, a2 + 1, v17, v16, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 4); v20 = *v19; v21 = sub_40C190(709005221); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v22 = sub_8FB140(v193, (int)"MyNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v22, v193, (int)"MyNmChClick"); v2[88] = sub_465940(v194, a2, (int)v22, (int)v2, 11, 0); v23 = sub_8FB140(v193, (int)"OtChrName", (int)&v194, (int)&a2, v10)[9]; v24 = *(_DWORD *)(*v23 + 24); v25 = *(_DWORD *)(*v23 + 20); v26 = sub_421050(0); v27 = sub_8F4A20(v194, a2 + 1, v25, v24, v26, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 4); v28 = *v27; v29 = sub_40C190(-1585282090); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = sub_8FB140(v193, (int)"OtNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v30, v193, (int)"OtNmChClick"); v2[89] = sub_465940(v194, a2, (int)v30, (int)v2, 12, 0); v31 = sub_8FB140(v193, (int)"NpcName", (int)&v194, (int)&a2, v10)[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v194, a2 + 1, v33, v32, v34, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 4); v36 = *v35; v37 = sub_40C190(-520401865); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v38 = sub_8FB140(v193, (int)"NPCNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v38, v193, (int)"NPCNmChClick"); v2[90] = sub_465940(v194, a2, (int)v38, (int)v2, 13, 0); v39 = sub_8FB140(v193, (int)"MonName", (int)&v194, (int)&a2, v10)[9]; v40 = *(_DWORD *)(*v39 + 24); v41 = *(_DWORD *)(*v39 + 20); v42 = sub_421050(0); v43 = sub_8F4A20(v194, a2 + 1, v41, v40, v42, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 4); v44 = *v43; v45 = sub_40C190(-537244618); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v43, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v46 = sub_8FB140(v193, (int)"MonNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v46, v193, (int)"MonNmChClick"); v2[91] = sub_465940(v194, a2, (int)v46, (int)v2, 14, 0); v47 = sub_8FB140(v193, (int)"ItName", (int)&v194, (int)&a2, v10)[9]; v48 = *(_DWORD *)(*v47 + 24); v49 = *(_DWORD *)(*v47 + 20); v50 = sub_421050(0); v51 = sub_8F4A20(v194, a2 + 1, v49, v48, v50, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 4); v52 = *v51; v53 = sub_40C190(1804264943); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v52 + 472))(v51, v53); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v51 + 240))(v51, 0); v54 = sub_8FB140(v193, (int)"ItNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v54, v193, (int)"ItNmChClick"); v2[92] = sub_465940(v194, a2, (int)v54, (int)v2, 15, 0); v55 = sub_8FB140(v193, (int)"HpName", (int)&v194, (int)&a2, v10)[9]; v56 = *(_DWORD *)(*v55 + 24); v57 = *(_DWORD *)(*v55 + 20); v58 = sub_421050(0); v59 = sub_8F4A20(v194, a2 + 1, v57, v56, v58, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v59 + 488))(v59, 4); v60 = *v59; v61 = sub_40C190(960252504); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v59, v61); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); v62 = sub_8FB140(v193, (int)"HPNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v62, v193, (int)"HPNmChClick"); v2[93] = sub_465940(v194, a2, (int)v62, (int)v2, 16, 0); v63 = sub_8FB140(v193, (int)"SpName", (int)&v194, (int)&a2, v10)[9]; v64 = *(_DWORD *)(*v63 + 24); v65 = *(_DWORD *)(*v63 + 20); v66 = sub_421050(0); v67 = sub_8F4A20(v194, a2 + 1, v65, v64, v66, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v67 + 488))(v67, 4); v68 = *v67; v69 = sub_40C190(960993956); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v68 + 472))(v67, v69); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v67 + 240))(v67, 0); v70 = sub_8FB140(v193, (int)"SPNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v70, v193, (int)"SPNmChClick"); v2[94] = sub_465940(v194, a2, (int)v70, (int)v2, 17, 0); v71 = sub_8FB140(v193, (int)"InterfaceName", (int)&v194, (int)&a2, v10)[9]; v72 = *(_DWORD *)(*v71 + 24); v73 = *(_DWORD *)(*v71 + 20); v74 = sub_421050(0); v75 = sub_8F4A20(v194, a2 + 1, v73, v72, v74, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 4); v76 = *v75; v77 = sub_40C190(-482398148); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v75, v77); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v75 + 240))(v75, 0); v78 = sub_8FB140(v193, (int)"InterfaceNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v78, v193, (int)"InterfaceNmChClick"); v2[95] = sub_465940(v194, a2, (int)v78, (int)v2, 18, 0); v79 = sub_8FB140(v193, (int)"SpeechName", (int)&v194, (int)&a2, v10)[9]; v80 = *(_DWORD *)(*v79 + 24); v81 = *(_DWORD *)(*v79 + 20); v82 = sub_421050(0); v83 = sub_8F4A20(v194, a2 + 1, v81, v80, v82, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v83 + 488))(v83, 4); v84 = *v83; v85 = sub_40C190(675574685); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v84 + 472))(v83, v85); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v83 + 240))(v83, 0); v86 = sub_8FB140(v193, (int)"SpeechNmChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v86, v193, (int)"SpeechNmChClick"); v2[96] = sub_465940(v194, a2, (int)v86, (int)v2, 19, 0); v87 = sub_8FB140(v193, (int)"InterfacePosName", (int)&v194, (int)&a2, v10)[9]; v88 = *(_DWORD *)(*v87 + 24); v89 = *(_DWORD *)(*v87 + 20); v90 = sub_421050(0); v91 = sub_8F4A20(v194, a2 + 1, v89, v88, v90, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v91 + 488))(v91, 4); v92 = *v91; v93 = sub_40C190(859800459); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v92 + 472))(v91, v93); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v91 + 240))(v91, 0); v94 = sub_8FB140(v193, (int)"InterfacePosChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v94, v193, (int)"InterfacePosChClick"); v2[97] = sub_465940(v194, a2, (int)v94, (int)v2, 20, 0); v95 = sub_8FB140(v193, (int)"ChattingHideName", (int)&v194, (int)&a2, v10)[9]; v96 = *(_DWORD *)(*v95 + 24); v97 = *(_DWORD *)(*v95 + 20); v98 = sub_421050(0); v99 = sub_8F4A20(v194, a2 + 1, v97, v96, v98, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 4); v100 = *v99; v101 = sub_40C190(-2083918115); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v100 + 472))(v99, v101); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v99 + 240))(v99, 0); v102 = sub_8FB140(v193, (int)"ChattingHideChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v102, v193, (int)"ChattingHideChClick"); v2[98] = sub_465940(v194, a2, (int)v102, (int)v2, 21, 0); v103 = sub_8FB140(v193, (int)"WisRej", (int)&v194, (int)&a2, v10)[9]; v104 = *(_DWORD *)(*v103 + 24); v105 = *(_DWORD *)(*v103 + 20); v106 = sub_421050(0); v107 = sub_8F4A20(v194, a2 + 1, v105, v104, v106, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v107 + 488))(v107, 4); v108 = *v107; v109 = sub_40C190(-2088659805); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v108 + 472))(v107, v109); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v107 + 240))(v107, 0); v110 = sub_8FB140(v193, (int)"WisRejChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v110, v193, (int)"WisRejChClick"); v2[99] = sub_465940(v194, a2, (int)v110, (int)v2, 22, 0); v111 = sub_8FB140(v193, (int)"TrdRej", (int)&v194, (int)&a2, v10)[9]; v112 = *(_DWORD *)(*v111 + 24); v113 = *(_DWORD *)(*v111 + 20); v114 = sub_421050(0); v115 = sub_8F4A20(v194, a2 + 1, v113, v112, v114, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v115 + 488))(v115, 4); v116 = *v115; v117 = sub_40C190(692487828); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v116 + 472))(v115, v117); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v115 + 240))(v115, 0); v118 = sub_8FB140(v193, (int)"TrdRejChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v118, v193, (int)"TrdRejChClick"); v2[100] = sub_465940(v194, a2, (int)v118, (int)v2, 23, 0); v119 = sub_8FB140(v193, (int)"ParRej", (int)&v194, (int)&a2, v10)[9]; v120 = *(_DWORD *)(*v119 + 24); v121 = *(_DWORD *)(*v119 + 20); v122 = sub_421050(0); v123 = sub_8F4A20(v194, a2 + 1, v121, v120, v122, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v123 + 488))(v123, 4); v124 = *v123; v125 = sub_40C190(-237384894); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v124 + 472))(v123, v125); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v123 + 240))(v123, 0); v126 = sub_8FB140(v193, (int)"ParRejChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v126, v193, (int)"ParRejChClick"); v2[101] = sub_465940(v194, a2, (int)v126, (int)v2, 24, 0); v127 = sub_8FB140(v193, (int)"AgRej", (int)&v194, (int)&a2, v10)[9]; v128 = *(_DWORD *)(*v127 + 24); v129 = *(_DWORD *)(*v127 + 20); v130 = sub_421050(0); v131 = sub_8F4A20(v194, a2 + 1, v129, v128, v130, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v131 + 488))(v131, 4); v132 = *v131; v133 = sub_40C190(-372187356); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v132 + 472))(v131, v133); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v131 + 240))(v131, 0); v134 = sub_8FB140(v193, (int)"AgRejChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v134, v193, (int)"AgRejChClick"); v2[102] = sub_465940(v194, a2, (int)v134, (int)v2, 25, 0); v135 = sub_8FB140(v193, (int)"SystemMsgRej", (int)&v194, (int)&a2, v10)[9]; v136 = *(_DWORD *)(*v135 + 24); v137 = *(_DWORD *)(*v135 + 20); v138 = sub_421050(0); v139 = sub_8F4A20(v194, a2 + 1, v137, v136, v138, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v139 + 488))(v139, 4); v140 = *v139; v141 = sub_40C190(-1666848293); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v140 + 472))(v139, v141); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v139 + 240))(v139, 0); v142 = sub_8FB140(v193, (int)"SystemMsgChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v142, v193, (int)"SystemMsgChClick"); v2[103] = sub_465940(v194, a2, (int)v142, (int)v2, 26, 0); v143 = sub_8FB140(v193, (int)"OKMsgBoxRej", (int)&v194, (int)&a2, v10)[9]; v144 = *(_DWORD *)(*v143 + 24); v145 = *(_DWORD *)(*v143 + 20); v146 = sub_421050(0); v147 = sub_8F4A20(v194, a2 + 1, v145, v144, v146, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v147 + 488))(v147, 4); v148 = *v147; v149 = sub_40C190(-1851203622); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v148 + 472))(v147, v149); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v147 + 240))(v147, 0); v150 = sub_8FB140(v193, (int)"OKMsgBoxChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v150, v193, (int)"OKMsgBoxChClick"); v2[104] = sub_465940(v194, a2, (int)v150, (int)v2, 27, 0); v151 = sub_8FB140(v193, (int)"ChatInputRej", (int)&v194, (int)&a2, v10)[9]; v152 = *(_DWORD *)(*v151 + 24); v153 = *(_DWORD *)(*v151 + 20); v154 = sub_421050(0); v155 = sub_8F4A20(v194, a2 + 1, v153, v152, v154, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v155 + 488))(v155, 4); v156 = *v155; v157 = sub_40C190(-1534815536); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v156 + 472))(v155, v157); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v155 + 240))(v155, 0); v158 = sub_8FB140(v193, (int)"ChatInputChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v158, v193, (int)"ChatInputChClick"); v2[105] = sub_465940(v194, a2, (int)v158, (int)v2, 28, 0); v159 = sub_8FB140(v193, (int)"NamePanel3D", (int)&v194, (int)&a2, v10)[9]; v160 = *(_DWORD *)(*v159 + 24); v161 = *(_DWORD *)(*v159 + 20); v162 = sub_421050(0); v163 = sub_8F4A20(v194, a2 + 1, v161, v160, v162, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v163 + 488))(v163, 4); v164 = *v163; v165 = sub_40A910(2021228405); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v164 + 472))(v163, v165); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v163 + 240))(v163, 0); v166 = sub_8FB140(v193, (int)"NamePanel3DNor", (int)&v194, (int)&a2, v10); sub_8FB650(v166, v193, (int)"NamePanel3DClick"); v2[106] = sub_465940(v194, a2, (int)v166, (int)v2, 29, 0); v167 = sub_8FB140(v193, (int)"GameTipOn", (int)&v194, (int)&a2, v10)[9]; v168 = *(_DWORD *)(*v167 + 24); v169 = *(_DWORD *)(*v167 + 20); v170 = sub_421050(0); v171 = sub_8F4A20(v194, a2, v169, v168, v170, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v171 + 488))(v171, 4); v172 = *v171; v173 = sub_40A910(-319891941); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v172 + 472))(v171, v173); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v171 + 240))(v171, 0); v174 = sub_8FB140(v193, (int)"GameTipOnChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v174, v193, (int)"GameTipOnChClick"); v2[107] = sub_465940(v194, a2, (int)v174, (int)v2, 30, 0); v175 = sub_8FB140(v193, (int)"PlayGuideOn", (int)&v194, (int)&a2, v10)[9]; v176 = *(_DWORD *)(*v175 + 24); v177 = *(_DWORD *)(*v175 + 20); v178 = sub_421050(0); v179 = sub_8F4A20(v194, a2, v177, v176, v178, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v179 + 488))(v179, 4); v180 = *v179; v181 = sub_40A910(-521393324); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v180 + 472))(v179, v181); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v179 + 240))(v179, 0); v182 = sub_8FB140(v193, (int)"PlayGuideOnChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v182, v193, (int)"PlayGuideOnChClick"); v2[108] = sub_465940(v194, a2, (int)v182, (int)v2, 31, 0); v183 = sub_8FB140(v193, (int)"InvAutoStack", (int)&v194, (int)&a2, v10)[9]; v184 = *(_DWORD *)(*v183 + 24); v185 = *(_DWORD *)(*v183 + 20); v186 = sub_421050(0); v187 = sub_8F4A20(v194, a2, v185, v184, v186, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v187 + 488))(v187, 4); v188 = *v187; v189 = sub_4090F0(710508407); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v188 + 472))(v187, v189); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v187 + 240))(v187, 0); v190 = sub_8FB140(v193, (int)"InvAutoStackChNor", (int)&v194, (int)&a2, v10); sub_8FB650(v190, v193, (int)"InvAutoStackChClick"); v2[109] = sub_465940(v194, a2, (int)v190, (int)v2, 32, 0); LOBYTE(v195) = 0; if ( !InterlockedDecrement((volatile LONG *)(v192 + 4)) ) (**(void (__thiscall ***)(int, signed int))v192)(v192, 1); v191 = (void (__thiscall ***)(_DWORD, signed int))v193; v195 = -1; if ( v193 && !InterlockedDecrement((volatile LONG *)(v193 + 4)) && v191 ) (**v191)(v191, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005D0AF0) -------------------------------------------------------- void __userpurge sub_5D0AF0(int a1@, int a2@, int a3, int a4) { char v4; // dl v4 = *(_BYTE *)(a1 + 288); *(_BYTE *)(a1 + 288) = 1; switch ( a3 ) { case 11: sub_5CEDA0((_DWORD *)a1); break; case 12: sub_5CEDD0((_DWORD *)a1); break; case 13: sub_5CEE00((_DWORD *)a1); break; case 14: sub_5CEE30((_DWORD *)a1); break; case 15: sub_5CEE60((_DWORD *)a1); break; case 16: sub_5CEE90((_DWORD *)a1); break; case 17: sub_5CEEC0((_DWORD *)a1); break; case 18: sub_5CEEF0((_DWORD *)a1); break; case 19: sub_5CEF20((_DWORD *)a1); break; case 20: sub_5CEF50(a1, a2); break; case 21: sub_5CEFA0((_DWORD *)a1); break; case 22: sub_5CEFD0((_DWORD *)a1); break; case 23: sub_5CF000((_DWORD *)a1); break; case 24: sub_5CF030((_DWORD *)a1); break; case 25: sub_5CF060((_DWORD *)a1); break; case 26: sub_5CF090((_DWORD *)a1); break; case 27: sub_5CF0C0((_DWORD *)a1); break; case 28: sub_5CF0F0((_DWORD *)a1); break; case 29: sub_5CF120((_DWORD *)a1); break; case 30: sub_5CF160((_DWORD *)a1); break; case 31: sub_5CF190((_DWORD *)a1); break; case 32: sub_5CF1D0((_DWORD *)a1); break; default: *(_BYTE *)(a1 + 288) = v4; break; } } //----- (005D0C40) -------------------------------------------------------- char __thiscall sub_5D0C40(int this) { int v1; // ebx char result; // al v1 = this; if ( *(_BYTE *)(this + 288) ) { qmemcpy(&word_B91FF8, (const void *)(this + 289), 0x37u); sub_5CF550((_DWORD *)this, (_BYTE *)(this + 289)); result = sub_63ADC0(byte_AD8A08, byte_B9202B); } *(_BYTE *)(v1 + 288) = 0; return result; } // B91FF8: using guessed type __int16 word_B91FF8; // B91FFC: using guessed type int dword_B91FFC; // B9202B: using guessed type char byte_B9202B; //----- (005D0D10) -------------------------------------------------------- int __cdecl sub_5D0D10(int a1) { _DWORD *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1B8u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_8F2740(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &OptionSystemWin::`vftable'; *(_DWORD *)(v2 + 232) = &OptionSystemWin::`vftable'; sub_6BD480(v2 + 289); *(_DWORD *)(v2 + 344) = 0; *(_BYTE *)(v2 + 288) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 452))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9E3D48: using guessed type void *OptionSystemWin::`vftable'; // 9E3D64: using guessed type void *OptionSystemWin::`vftable'; //----- (005D0E70) -------------------------------------------------------- void *__thiscall sub_5D0E70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &OptionSystemWin::`vftable'; *((_DWORD *)this + 58) = &OptionSystemWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E3D48: using guessed type void *OptionSystemWin::`vftable'; // 9E3D64: using guessed type void *OptionSystemWin::`vftable'; //----- (005D0EB0) -------------------------------------------------------- int __thiscall sub_5D0EB0(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // esi int v5; // edi int v6; // eax result = a2; v4 = this; if ( a2 ) { v5 = *this; v6 = sub_42BF30(a2); (*(void (__thiscall **)(_DWORD *, int, int, signed int, signed int))(v5 + 584))(v4, v6, a3, 16, 16); result = (*(int (__thiscall **)(_DWORD *, signed int))(*v4 + 256))(v4, 1); } return result; } //----- (005D0F00) -------------------------------------------------------- int __thiscall sub_5D0F00(_DWORD *this, int a2) { _DWORD **v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // edi char *v6; // eax v2 = (_DWORD **)this; v3 = (_DWORD *)*this; v4 = sub_42BF30((int)"AbState01"); ((void (__thiscall *)(_DWORD **, int, signed int, signed int, signed int))v3[146])(v2, v4, 49, 16, 16); v5 = *v2[102]; v6 = sub_7549E0("x%d", a2); (*(void (__thiscall **)(_DWORD *, char *))(v5 + 472))(v2[102], v6); (*(void (__stdcall **)(signed int))(*v2[102] + 256))(1); return ((int (__thiscall *)(_DWORD **, signed int))(*v2)[64])(v2, 1); } //----- (005D0F80) -------------------------------------------------------- int __thiscall sub_5D0F80(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(void *))(*this[102] + 472))(&unk_9E3F36); return (*(int (__stdcall **)(_DWORD))(*v1[102] + 256))(0); } //----- (005D0FB0) -------------------------------------------------------- int __thiscall sub_5D0FB0(_WORD *this, int a2) { int v2; // edi _WORD *v3; // esi int v4; // ecx int v5; // eax int v6; // edi int v7; // ST04_4 int v8; // eax int (__thiscall *v9)(_WORD *, signed int); // eax v2 = dword_ACDA80; v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, a2) ) return (*(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); if ( (unsigned __int16)a2 > *(_WORD *)(v2 + 200) ) return (*(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); v4 = *(_DWORD *)(v2 + 196); if ( !*(_DWORD *)(v4 + 4 * (unsigned __int16)a2) ) return (*(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)a2); if ( !v5 || *(_BYTE *)(v5 + 38) == 45 ) return (*(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); v6 = *(_DWORD *)v3; v7 = *(_DWORD *)(v5 + 34); v8 = sub_42BF30(v5 + 38); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(v6 + 584))(v3, v8, v7, 16, 16); v9 = *(int (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v3 + 256); v3[190] = a2; return v9(v3, 1); } // ACDA80: using guessed type int dword_ACDA80; //----- (005D1050) -------------------------------------------------------- int __thiscall sub_5D1050(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // esi v2 = this; result = sub_5D3110(this, a2); if ( *((_BYTE *)v2 + 392) ) { result = v2[100]; if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; } v4 = v2[97]; if ( v4 ) { if ( a2 ) { result = 65534; *(_WORD *)(v4 + 28) &= 0xFFFEu; } else { *(_WORD *)(v4 + 28) |= 1u; } } return result; } //----- (005D10B0) -------------------------------------------------------- _DWORD *__thiscall sub_5D10B0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; sub_5D35C0(this); *v1 = &AbstateIcon::`vftable'; v1[58] = &AbstateIcon::`vftable'; v1[96] = 0; v1[97] = 0; v1[100] = 0; v1[101] = 0; *((_BYTE *)v1 + 382) = 0; v2 = v1[96]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[96] = 0; } *((_BYTE *)v1 + 383) = 0; v1[99] = -1; *((_BYTE *)v1 + 392) = 0; v1[102] = 0; *((_BYTE *)v1 + 412) = 0; v1[104] = 0; return v1; } // 9E3F40: using guessed type void *AbstateIcon::`vftable'; // 9E3F5C: using guessed type void *AbstateIcon::`vftable'; //----- (005D1180) -------------------------------------------------------- LONG __thiscall sub_5D1180(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &AbstateIcon::`vftable'; this[58] = &AbstateIcon::`vftable'; v2 = this[101]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[100]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[97]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[96]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_5D3FC0(v1); } // 9E3F40: using guessed type void *AbstateIcon::`vftable'; // 9E3F5C: using guessed type void *AbstateIcon::`vftable'; //----- (005D1280) -------------------------------------------------------- char __userpurge sub_5D1280@(_DWORD *a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, _DWORD *a8, char a9) { int v9; // esi char result; // al int v11; // eax volatile LONG *v12; // eax int v13; // eax volatile LONG *v14; // eax int v15; // edi volatile LONG *v16; // ebx const CHAR *v17; // eax volatile LONG *v18; // eax v9 = (int)a1; result = sub_907E00(a1, a4, a5, a6, a7, a8, 0, 0); if ( result ) { v11 = sub_421050(0); v12 = sub_8F4A20(1, 2, 14, 12, v11, v9, 0, 0); *(_DWORD *)(v9 + 408) = v12; (*(void (__thiscall **)(volatile LONG *, signed int, int, int))(*v12 + 488))(v12, 5, a3, a2); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v9 + 408) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 408) + 240))(0); (*(void (__stdcall **)(int *))(**(_DWORD **)(v9 + 408) + 468))(&dword_AA8CB8); sub_442AC0((_DWORD *)v9, *(_DWORD *)(v9 + 408)); *(_BYTE *)(v9 + 382) = a9; v13 = sub_43D0D0(1u); v14 = sub_58E5D0(v13, 4, 4, 0); v15 = *(_DWORD *)(v9 + 384); v16 = v14; if ( (volatile LONG *)v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *(_DWORD *)(v9 + 384) = v16; if ( v16 ) InterlockedIncrement(v16 + 1); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v9 + 384) + 232))(*(_DWORD *)(v9 + 384) + 232, v9 + 232); sub_58DFD0(*(_DWORD **)(v9 + 384)); v17 = sub_40A910(-637281485); v18 = sub_58E290(v17, 0, 0, 0, 0, 0, 0); *((_DWORD *)v18 + 83) = 1014; sub_58E080(*(_DWORD **)(v9 + 384), v15, (int)v18); sub_58D930(*(_DWORD **)(v9 + 384), 0); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v9 + 384) + 256))(0); result = 1; } return result; } // 5D1280: could not find valid save-restore pair for ebx // 5D1280: could not find valid save-restore pair for edi // AA8CB8: using guessed type int dword_AA8CB8; //----- (005D15E0) -------------------------------------------------------- void __thiscall sub_5D15E0(int this) { int v1; // ebx int v2; // edi int v3; // esi int v4; // esi int v5; // edi int v6; // edi int v7; // ecx int v8; // esi int v9; // ebx int v10; // esi int *v11; // eax _DWORD *v12; // ebx int v13; // eax const CHAR *v14; // eax v1 = this; if ( *(_BYTE *)(this + 412) ) { v2 = *(_DWORD *)(this + 416); v3 = this + 232; if ( *(_DWORD *)(this + 236) ) { (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(this + 236) + 4))(82, v2, this + 232); if ( *(_DWORD *)(v1 + 236) ) (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 236) + 20))(82, v2, v1 + 232); } (*(void (__thiscall **)(int, signed int, int, int))(*(_DWORD *)v3 + 20))(v1 + 232, 82, v2, v1 + 232); } else { v4 = dword_ACDA80; v5 = *(unsigned __int16 *)(this + 380); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v7 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v7 + 4 * v5) ) v6 = *(_DWORD *)(v7 + 4 * v5); else v6 = 0; } else { v6 = 0; } } else { v6 = 0; } v8 = dword_ACDA7C; v9 = *(unsigned __int16 *)(v1 + 380); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) ) { v11 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v9); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } if ( v6 && v10 ) { v12 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v13 = *(_DWORD *)(v6 + 522); if ( v13 && v13 != 4 ) { sub_4BD9D0(v12, *(_WORD *)(v10 + 34)); } else { v14 = sub_40A910(-1611809086); sub_492060(v12, (int)v14); } } } } // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; //----- (005D1710) -------------------------------------------------------- void __thiscall sub_5D1710(_BYTE *this, int a2, _DWORD *a3, int a4) { _BYTE *v4; // esi v4 = this; if ( this[150] ) { if ( a2 == 5 ) { if ( (*(unsigned __int8 (__thiscall **)(_BYTE *, LONG, LONG))(*((_DWORD *)this - 58) + 348))( this - 232, pt.x, pt.y) && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*((_DWORD *)v4 - 58) + 260))(v4 - 232) ) { v4[151] = 1; } } else if ( a2 == 6 ) { if ( (*(unsigned __int8 (__thiscall **)(_BYTE *, LONG, LONG))(*((_DWORD *)this - 58) + 348))( this - 232, pt.x, pt.y) && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*((_DWORD *)v4 - 58) + 260))(v4 - 232) ) { if ( v4[151] ) { (*(void (__stdcall **)(LONG, LONG))(**((_DWORD **)v4 + 38) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *((_DWORD **)v4 + 38)); } v4[151] = 0; } } else if ( a2 == 15 && *a3 == 1014 ) { sub_5D15E0((int)(this - 232)); } } } //----- (005D1B00) -------------------------------------------------------- volatile LONG *__cdecl sub_5D1B00(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x1A4u); v10 = v6; v11 = 0; if ( v6 ) v7 = sub_5D10B0(v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 608))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *, int, int))(*v7 + 596))(v7, a3, a4); (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (005D1C50) -------------------------------------------------------- int __cdecl sub_5D1C50(int a1, int a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6, int a7, int a8) { double v8; // st7 float v9; // ST14_4 float v10; // ST10_4 float v11; // ST0C_4 int result; // eax float v13; // [esp+24h] [ebp+10h] float v14; // [esp+28h] [ebp+14h] float v15; // [esp+28h] [ebp+14h] float v16; // [esp+28h] [ebp+14h] float v17; // [esp+28h] [ebp+14h] float v18; // [esp+28h] [ebp+14h] v14 = (double)a4; v13 = (double)a3; v8 = v14; v15 = (double)(a6 + a8) / v14; v9 = v15; v16 = (double)(a5 + a7) / v13; v10 = v16; v17 = (double)a6 / v8; v11 = v17; v18 = (double)a5 / v13; sub_8681A0(*(_DWORD *)(a1 + 184), a2, 0, v18, v11, v10, v9); result = *(_DWORD *)(a1 + 184); *(_WORD *)(result + 50) |= 8u; return result; } //----- (005D1D30) -------------------------------------------------------- void *__thiscall sub_5D1D30(void *this, char a2) { void *v2; // esi v2 = this; sub_5D1180(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005D1DF0) -------------------------------------------------------- bool __thiscall sub_5D1DF0(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_907E00(this, a2, a3, 32, 32, a4, 0, 0) != 0; } //----- (005D1E20) -------------------------------------------------------- int __thiscall sub_5D1E20(_WORD *this, int a2) { int v2; // edi _WORD *v3; // esi int v4; // ecx int v5; // eax int v6; // edi int v7; // ST04_4 int v8; // eax int (__thiscall *v9)(_WORD *, signed int); // eax int result; // eax int (__thiscall *v11)(_WORD *, _DWORD); // eax v2 = dword_ACB6C4; v3 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, a2) && (unsigned __int16)a2 <= *(_WORD *)(v2 + 200) && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * (unsigned __int16)a2)) && (v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)a2)) != 0 ) { v6 = *(_DWORD *)v3; v7 = *(unsigned __int16 *)(v5 + 99); v8 = sub_42BF30(v5 + 67); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(v6 + 584))(v3, v8, v7, 32, 32); v9 = *(int (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v3 + 240); v3[14] &= 0xFFFEu; result = v9(v3, 1); } else { (*(void (__thiscall **)(_WORD *, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v3 + 584))( v3, 0, -1, 32, 32); v11 = *(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 240); v3[14] |= 1u; result = v11(v3, 0); } return result; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (005D1ED0) -------------------------------------------------------- int __cdecl sub_5D1ED0(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x180u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D35C0(v3); LOBYTE(v8) = 1; *(_DWORD *)v4 = &ActionIcon::`vftable'; *(_DWORD *)(v4 + 232) = &ActionIcon::`vftable'; sub_5D4380((_DWORD *)v4, 0x20u, (volatile LONG *)0x20); } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 2; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 608))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9E41C4: using guessed type void *ActionIcon::`vftable'; // 9E41E4: using guessed type void *ActionIcon::`vftable'; //----- (005D2030) -------------------------------------------------------- void *__thiscall sub_5D2030(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ActionIcon::`vftable'; *((_DWORD *)this + 58) = &ActionIcon::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E41C4: using guessed type void *ActionIcon::`vftable'; // 9E41E4: using guessed type void *ActionIcon::`vftable'; //----- (005D20B0) -------------------------------------------------------- char __thiscall sub_5D20B0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6) { _DWORD *v6; // esi char result; // al v6 = this; result = sub_907E00(this, a2, a3, a4, a5, a6, 0, 0); if ( result ) { (*(void (__thiscall **)(_DWORD *, int, int))(*v6 + 596))(v6, a4, a5); result = 1; } return result; } //----- (005D2120) -------------------------------------------------------- int __thiscall sub_5D2120(_DWORD *this) { return this[83]; } //----- (005D2130) -------------------------------------------------------- char __thiscall sub_5D2130(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi v2 = this; if ( a2 ) { sub_42C210(&a2, a2); v5 = sub_85C050(v2[83], 8); if ( v5 ) sub_4EAA40(v2[83], v5); sub_403700(v2[83], a2); sub_85C6F0(v2[83]); sub_85C4D0(v2[83]); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } } else { v3 = sub_85C050(this[83], 8); if ( v3 ) { sub_4EAA40(v2[83], v3); return 1; } } return 1; } //----- (005D2380) -------------------------------------------------------- int __cdecl sub_5D2380(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x17Cu); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_5D35C0(v5); *(_DWORD *)v6 = &AniIconWin::`vftable'; *(_DWORD *)(v6 + 232) = &AniIconWin::`vftable'; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 608))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9E444C: using guessed type void *AniIconWin::`vftable'; // 9E446C: using guessed type void *AniIconWin::`vftable'; //----- (005D25D0) -------------------------------------------------------- void *__thiscall sub_5D25D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AniIconWin::`vftable'; *((_DWORD *)this + 58) = &AniIconWin::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E444C: using guessed type void *AniIconWin::`vftable'; // 9E446C: using guessed type void *AniIconWin::`vftable'; //----- (005D2610) -------------------------------------------------------- int __thiscall sub_5D2610(_DWORD *this) { _DWORD *v1; // ecx int result; // eax if ( this[75] || (v1 = (_DWORD *)this[78]) == 0 ) result = 0; else result = sub_5D5470(v1); return result; } //----- (005D2630) -------------------------------------------------------- void __thiscall sub_5D2630(_DWORD *this) { int v1; // esi int *v2; // edi _DWORD *v3; // ecx int v4; // eax v1 = (int)this; if ( !this[75] ) { v2 = (int *)this[68]; if ( !v2 ) return; v3 = (_DWORD *)this[78]; if ( v3 ) { v4 = sub_5D5470(v3); sub_547C20(v2, v4); sub_8F2F90(v1); return; } sub_547C20(v2, 0); } sub_8F2F90(v1); } //----- (005D2680) -------------------------------------------------------- __int16 __thiscall sub_5D2680(int this) { __int16 result; // ax if ( *(_DWORD *)(this + 300) == 1 ) result = sub_5D6F80(*(_WORD **)(this + 312)); else result = -1; return result; } //----- (005D26A0) -------------------------------------------------------- _DWORD *__thiscall sub_5D26A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *result; // eax v1 = this; sub_8F2740(this); *v1 = &IconSlotWin::`vftable'; v1[58] = &IconSlotWin::`vftable'; v1[78] = 0; v1[73] = 0; v1[74] = 0; *((_BYTE *)v1 + 288) = 0; v2 = v1[78]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[78] = 0; } result = v1; v1[75] = -1; return result; } // 9E46D4: using guessed type void *IconSlotWin::`vftable'; // 9E46F4: using guessed type void *IconSlotWin::`vftable'; //----- (005D2750) -------------------------------------------------------- LONG __thiscall sub_5D2750(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi v1 = this; *this = &IconSlotWin::`vftable'; this[58] = &IconSlotWin::`vftable'; v2 = (volatile LONG *)this[78]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[78] = 0; } v3 = (volatile LONG *)v1[78]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); return sub_8F29C0(v1); } // 9E46D4: using guessed type void *IconSlotWin::`vftable'; // 9E46F4: using guessed type void *IconSlotWin::`vftable'; //----- (005D2810) -------------------------------------------------------- void __thiscall sub_5D2810(int *this, int a2, int a3, char a4) { int v4; // ebx int *v5; // esi volatile LONG *v6; // edi void (__thiscall *v7)(volatile LONG *, _DWORD); // eax void (__thiscall ***v8)(_DWORD, signed int); // ebx int v9; // ebx volatile LONG *v10; // ebx v4 = a2; v5 = this; if ( a2 ) { v6 = sub_5D6E20(this[73], this[74], (int)this); sub_5D5B70(v6, v4, a4); sub_5D5420(v6, a3); v7 = *(void (__thiscall **)(volatile LONG *, _DWORD))(*v6 + 240); *((_BYTE *)v6 + 254) = 0; v7(v6, 0); if ( v5[78] ) { sub_455710(v5, &a2, v5[78]); if ( a2 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } sub_8F9E00(&unk_BA6B10, (_DWORD *)v5[78]); v9 = v5[78]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v5[78] = 0; } } v10 = (volatile LONG *)v5[78]; if ( v10 != v6 ) { if ( v10 && !InterlockedDecrement(v10 + 1) ) { if ( v10 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); } v5[78] = (int)v6; InterlockedIncrement(v6 + 1); } v5[68] = dword_ACEC34; v5[75] = 0; } } // ACEC34: using guessed type int dword_ACEC34; //----- (005D2940) -------------------------------------------------------- _DWORD *__thiscall sub_5D2940(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi int v4; // edi int v5; // [esp+4h] [ebp-4h] v1 = this; result = (_DWORD *)this[78]; if ( result ) { sub_455710(this, &v5, (int)result); if ( v5 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } result = sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[78]); v4 = v1[78]; if ( v4 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } v1[78] = 0; } v1[75] = -1; } else { this[75] = -1; } return result; } //----- (005D29F0) -------------------------------------------------------- LONG __thiscall sub_5D29F0(int *this, int a2) { int *v2; // edi volatile LONG *v3; // esi int (__thiscall *v4)(volatile LONG *, _DWORD); // edx LONG result; // eax volatile LONG *v6; // ebx v2 = this; v3 = sub_5D84B0(this[73], this[74], (int)this); sub_5D8320(v3, a2); v4 = *(int (__thiscall **)(volatile LONG *, _DWORD))(*v3 + 240); *((_BYTE *)v3 + 254) = 0; result = v4(v3, 0); v6 = (volatile LONG *)v2[78]; if ( v6 != v3 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v2[78] = (int)v3; result = InterlockedIncrement(v3 + 1); } v2[75] = 1; return result; } //----- (005D2A80) -------------------------------------------------------- LONG __thiscall sub_5D2A80(int *this, int a2) { int *v2; // edi int v3; // esi int (__thiscall *v4)(int, _DWORD); // edx LONG result; // eax int v6; // ebx v2 = this; v3 = sub_5D1ED0(this[73], this[74], (int)this); sub_5D1E20((_WORD *)v3, a2); v4 = *(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 240); *(_BYTE *)(v3 + 254) = 0; result = v4(v3, 0); v6 = v2[78]; if ( v6 != v3 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v2[78] = v3; result = InterlockedIncrement((volatile LONG *)(v3 + 4)); } v2[75] = 3; return result; } //----- (005D2B10) -------------------------------------------------------- LONG __userpurge sub_5D2B10@(int a1@, int a2@, int a3) { int v3; // edi volatile LONG *v4; // eax volatile LONG *v5; // esi LONG result; // eax volatile LONG *v7; // ebx v3 = a1; v4 = sub_5D6E20(*(_DWORD *)(a1 + 292), *(_DWORD *)(a1 + 296), a1); v5 = v4; *((_BYTE *)v4 + 254) = 0; sub_5D6220((int)v4, a2, v3, a3); result = (*(int (__thiscall **)(volatile LONG *, _DWORD))(*v5 + 240))(v5, 0); v7 = *(volatile LONG **)(v3 + 312); if ( v7 != v5 ) { if ( v7 && !InterlockedDecrement(v7 + 1) ) { if ( v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); } *(_DWORD *)(v3 + 312) = v5; result = InterlockedIncrement(v5 + 1); } return result; } //----- (005D2BA0) -------------------------------------------------------- LONG __thiscall sub_5D2BA0(int *this, int a2) { int *v2; // esi volatile LONG *v3; // edi int (__thiscall *v4)(volatile LONG *, _DWORD); // edx LONG result; // eax volatile LONG *v6; // ebx v2 = this; v3 = sub_5D6E20(this[73], this[74], (int)this); sub_5D5EA0((int)v3, (int)v3, a2); v4 = *(int (__thiscall **)(volatile LONG *, _DWORD))(*v3 + 240); *((_BYTE *)v3 + 254) = 0; result = v4(v3, 0); v6 = (volatile LONG *)v2[78]; if ( v6 == v3 ) { v2[68] = dword_ACEC34; v2[75] = 6; } else { if ( v6 && !InterlockedDecrement(v6 + 1) ) { if ( v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } v2[78] = (int)v3; result = InterlockedIncrement(v3 + 1); v2[68] = dword_ACEC34; v2[75] = 6; } return result; } // ACEC34: using guessed type int dword_ACEC34; //----- (005D2C60) -------------------------------------------------------- void __userpurge sub_5D2C60(int *a1@, int a2@, int a3) { int *v3; // edi v3 = a1; if ( a3 ) { switch ( *(_DWORD *)(a3 + 16) ) { case 0: sub_5D2810(a1, *(_DWORD *)(a3 + 20), 0, 1); v3[77] = *(_DWORD *)(a3 + 8); v3[76] = *(_DWORD *)(a3 + 12); break; case 1: sub_5D29F0(a1, *(unsigned __int16 *)(a3 + 20)); break; case 2: sub_5D2B10((int)a1, a2, *(_DWORD *)(a3 + 20)); break; case 3: sub_5D2A80(a1, *(_DWORD *)(a3 + 48)); break; case 6: if ( *(_WORD *)(a3 + 60) != -1 ) sub_5D2BA0(a1, *(unsigned __int16 *)(a3 + 60)); break; default: return; } } } //----- (005D2D10) -------------------------------------------------------- char __thiscall sub_5D2D10(_DWORD *this, int a2, int a3, int a4) { int v4; // ebx int v6; // edi bool v7; // zf int v8; // [esp+4h] [ebp-10h] int v9; // [esp+8h] [ebp-Ch] int v10; // [esp+Ch] [ebp-8h] char v11; // [esp+10h] [ebp-4h] v4 = (int)this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD *)(*(_DWORD *)a2 + 4); if ( v6 ) { v7 = this[59] == 0; v8 = *(_DWORD *)(*(_DWORD *)a2 + 4); v9 = a3; v10 = a4; v11 = 0; if ( !v7 ) { (*(void (__stdcall **)(signed int, int *, _DWORD *))(*(_DWORD *)this[59] + 4))(22, &v8, this + 58); if ( *(_DWORD *)(v4 + 236) ) (*(void (__stdcall **)(signed int, int *, int))(**(_DWORD **)(v4 + 236) + 20))(22, &v8, v4 + 232); } (*(void (__thiscall **)(int, signed int, int *, int))(*(_DWORD *)(v4 + 232) + 20))(v4 + 232, 22, &v8, v4 + 232); if ( v11 ) { sub_5D2940((_DWORD *)v4); sub_5D2C60((int *)v4, v4, v6); return 1; } if ( *(_BYTE *)(v4 + 288) ) byte_BA6BD0 = 1; } return 0; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (005D2DD0) -------------------------------------------------------- _DWORD *__cdecl sub_5D2DD0(int a1, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi _DWORD *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x13Cu); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_5D26A0(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, int, signed int, signed int, int, _DWORD, _DWORD))(*v4 + 336))( v4, a1, a2, 32, 32, a3, 0, 0) ) { *((_BYTE *)v4 + 254) = 1; (*(void (__thiscall **)(_DWORD *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); result = 0; } return result; } //----- (005D2F20) -------------------------------------------------------- void *__thiscall sub_5D2F20(void *this, char a2) { void *v2; // esi v2 = this; sub_5D2750((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005D2F70) -------------------------------------------------------- int __thiscall sub_5D2F70(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi int result; // eax v5 = this; result = (*(int (__stdcall **)(int))(*this + 600))(a2); if ( a3 != v5[85] ) { if ( a3 != -1 ) result = (*(int (__thiscall **)(_DWORD *, int, int, int, int))(*v5 + 604))(v5, a2, a3, a4, a5); v5[85] = a3; } return result; } //----- (005D2FC0) -------------------------------------------------------- void **sub_5D2FC0() { return &dword_AD02C4; } //----- (005D2FD0) -------------------------------------------------------- void __thiscall sub_5D2FD0(_BYTE *this, char a2) { int v2; // eax if ( this[12] ) { v2 = *(_DWORD *)this; if ( a2 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; else *(_WORD *)(v2 + 28) |= 1u; } } //----- (005D3000) -------------------------------------------------------- void __thiscall sub_5D3000(_BYTE *this, char a2) { int v2; // eax int v3; // ecx if ( this[8] ) { v2 = *(_DWORD *)this; if ( a2 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; else *(_WORD *)(v2 + 28) |= 1u; } if ( this[9] ) { v3 = *((_DWORD *)this + 1); if ( a2 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; else *(_WORD *)(v3 + 28) |= 1u; } } //----- (005D3050) -------------------------------------------------------- int __thiscall sub_5D3050(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi bool v3; // bl char v4; // al int v5; // eax v2 = this; v3 = dword_BA6A9C >= 1; v4 = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*this + 348))(this, pt.x, pt.y); *a2 = v4; if ( v4 && *((_BYTE *)v2 + 360) ) { v5 = v2[89]; if ( !v3 ) { *(_WORD *)(v5 + 28) |= 1u; *(_WORD *)(v2[88] + 28) &= 0xFFFEu; return sub_907E60(v2, a2); } *(_WORD *)(v5 + 28) &= 0xFFFEu; } else { *(_WORD *)(v2[89] + 28) |= 1u; } *(_WORD *)(v2[88] + 28) |= 1u; return sub_907E60(v2, a2); } // BA6A9C: using guessed type int dword_BA6A9C; //----- (005D30F0) -------------------------------------------------------- int __thiscall sub_5D30F0(_DWORD *this) { int result; // eax result = this[89]; *(_WORD *)(result + 28) |= 1u; *(_WORD *)(this[88] + 28) |= 1u; return result; } //----- (005D3110) -------------------------------------------------------- int __thiscall sub_5D3110(_DWORD *this, char a2) { int result; // eax int v3; // ecx result = this[83]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; } v3 = this[92]; if ( v3 ) *(_BYTE *)(v3 + 304) = a2; return result; } //----- (005D3150) -------------------------------------------------------- char __thiscall sub_5D3150(_DWORD *this) { int v1; // eax char result; // al v1 = this[83]; if ( v1 ) result = ~*(_BYTE *)(v1 + 28) & 1; else result = 0; return result; } //----- (005D3170) -------------------------------------------------------- char __thiscall sub_5D3170(int this, char a2) { int v2; // eax LOBYTE(v2) = a2; *(_BYTE *)(this + 360) = a2; if ( !a2 ) { *(_WORD *)(*(_DWORD *)(this + 356) + 28) |= 1u; v2 = *(_DWORD *)(this + 352); *(_WORD *)(v2 + 28) |= 1u; } return v2; } //----- (005D31A0) -------------------------------------------------------- void __thiscall sub_5D31A0(int this, float a2) { int v2; // esi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // ebx float *v5; // eax float *v6; // edi float *v7; // ST14_4 float *v8; // eax int v9; // eax float *v10; // ecx int v11; // eax _BYTE *v12; // ecx v2 = this; v3 = *(_DWORD *)(this + 368); if ( v3 && *(_BYTE *)(this + 376) && !*(_BYTE *)(v3 + 292) ) { if ( !*(_DWORD *)(this + 372) ) { v4 = sub_6AAFB0(&unk_B91250, "WeaponTitle"); if ( v4 ) { v5 = (float *)operator new(0x44u); v6 = v5; v7 = v5; v8 = 0; if ( v7 ) { v9 = sub_85BD60(v4); v8 = sub_6B0A90(v6, v9); } *(_DWORD *)(v2 + 372) = v8; } } v10 = *(float **)(v2 + 372); if ( v10 ) sub_6B0B40(v10, (_DWORD *)v2); } v11 = *(_DWORD *)(v2 + 368); if ( v11 ) *(_BYTE *)(v2 + 376) = *(_BYTE *)(v11 + 292); else *(_BYTE *)(v2 + 376) = 0; v12 = *(_BYTE **)(v2 + 372); if ( v12 ) sub_6B0C00(v12, a2); } //----- (005D3290) -------------------------------------------------------- __int16 __thiscall sub_5D3290(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx __int16 result; // ax v2 = this; v3 = this[92]; if ( v3 ) { sub_4FCB30(v3); *((_BYTE *)v2 + 376) = 0; } result = a2; *((_WORD *)v2 + 181) = a2; if ( a2 != -1 ) *((_BYTE *)v2 + 377) = 1; return result; } //----- (005D32D0) -------------------------------------------------------- __int16 __thiscall sub_5D32D0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx __int16 result; // ax v2 = this; v3 = this[92]; if ( v3 ) { sub_4FCB30(v3); *((_BYTE *)v2 + 376) = 0; } result = a2; *((_WORD *)v2 + 182) = a2; if ( a2 != -1 ) *((_BYTE *)v2 + 377) = 1; return result; } //----- (005D3310) -------------------------------------------------------- bool __thiscall sub_5D3310(_DWORD *this) { int v1; // eax v1 = this[92]; return v1 && *(_BYTE *)(v1 + 292); } //----- (005D3330) -------------------------------------------------------- void __thiscall sub_5D3330(int *this, __int16 a2) { sub_4FCAE0(this[92], a2); } //----- (005D3340) -------------------------------------------------------- int __thiscall sub_5D3340(_DWORD *this) { int result; // eax result = this[89]; *(_WORD *)(result + 28) &= 0xFFFEu; *(_WORD *)(this[88] + 28) |= 1u; return result; } //----- (005D3360) -------------------------------------------------------- _DWORD *__thiscall sub_5D3360(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = -1; *((_BYTE *)this + 12) = 0; return result; } //----- (005D3380) -------------------------------------------------------- _DWORD **__thiscall sub_5D3380(_BYTE *this, _BYTE *a2, unsigned int a3) { _DWORD **result; // eax _DWORD ***v4; // esi _DWORD **v5; // edi unsigned int v6; // eax unsigned int v7; // ST14_4 unsigned int v8; // ST10_4 unsigned int v9; // ST0C_4 unsigned int v10; // eax int v11; // [esp+1Ch] [ebp+8h] result = (_DWORD **)a2; v4 = (_DWORD ***)this; if ( a2 && *a2 != 45 ) { if ( a3 == -1 ) { this[12] = 0; *(_WORD *)(*(_DWORD *)this + 28) |= 1u; } else { result = (_DWORD **)sub_42BF30((int)a2); v5 = result; if ( result ) { sub_42AB40(v4[1], (int)result); result = *v4; *((_WORD *)result + 14) &= 0xFFFEu; *((_BYTE *)v4 + 12) = 1; if ( (_DWORD **)a3 != v4[2] ) { if ( v4[1] ) { v6 = ((int (__thiscall *)(_DWORD **))(*v5)[15])(v5); v11 = (int)*v4; v7 = 32 * (a3 / (v6 >> 5)); v8 = 32 * (a3 % (v6 >> 5)); v9 = ((int (__thiscall *)(_DWORD **))(*v5)[16])(v5); v10 = ((int (__thiscall *)(_DWORD **))(*v5)[15])(v5); sub_5D1C50(v11, 0, v10, v9, v8, v7, 32, 32); result = (_DWORD **)sub_85BED0(*v4, 0.0, 1); v4[2] = (_DWORD **)a3; } } } else { *((_BYTE *)v4 + 12) = 0; *((_WORD *)*v4 + 14) |= 1u; } } } else { this[12] = 0; *(_WORD *)(*(_DWORD *)this + 28) |= 1u; } return result; } //----- (005D3470) -------------------------------------------------------- char __thiscall sub_5D3470(_WORD *this, unsigned __int8 a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6, unsigned __int8 a7) { double v7; // st7 _WORD *v8; // esi int v9; // eax int v10; // eax int v11; // edx int v12; // ecx int v13; // eax int v14; // ecx float v16; // [esp+8h] [ebp-10h] float v17; // [esp+Ch] [ebp-Ch] float v18; // [esp+10h] [ebp-8h] float v19; // [esp+14h] [ebp-4h] v7 = 255.0; v8 = this; if ( a2 || a3 || a4 ) { v11 = *(_DWORD *)this; this[4] = 257; v16 = (double)a2 / 255.0; v17 = (double)a3 / 255.0; v18 = (double)a4 / 255.0; v19 = 1.0; sub_867FF0(*(_DWORD *)(v11 + 184), 0, &v16); v12 = *((_DWORD *)v8 + 1); v16 = 0.0; v17 = 0.0; v18 = 0.0; v19 = 1.0; sub_867FF0(*(_DWORD *)(v12 + 184), 0, &v16); v7 = 255.0; *(_WORD *)(*(_DWORD *)v8 + 28) &= 0xFFFEu; v10 = *((_DWORD *)v8 + 1); *(_WORD *)(v10 + 28) &= 0xFFFEu; } else { v9 = *(_DWORD *)this; this[4] = 0; *(_WORD *)(v9 + 28) |= 1u; v10 = *((_DWORD *)this + 1); *(_WORD *)(v10 + 28) |= 1u; } if ( a5 || a6 || a7 ) { v13 = *((_DWORD *)v8 + 1); *((_BYTE *)v8 + 9) = 1; *(_WORD *)(v13 + 28) &= 0xFFFEu; v14 = *((_DWORD *)v8 + 1); v16 = (double)a5 / v7; v17 = (double)a6 / v7; v18 = (double)a7 / v7; v19 = 1.0; LOBYTE(v10) = sub_867FF0(*(_DWORD *)(v14 + 184), 0, &v16); } return v10; } //----- (005D35C0) -------------------------------------------------------- _DWORD *__thiscall sub_5D35C0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; sub_907A90(this); *v1 = &IconWin::`vftable'; v1[58] = &IconWin::`vftable'; v1[83] = 0; v1[84] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[92] = 0; v1[85] = -1; v2 = v1[88]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[88] = 0; } v3 = v1[89]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[89] = 0; } *((_BYTE *)v1 + 360) = 0; *((_BYTE *)v1 + 254) = 1; *((_BYTE *)v1 + 320) = 0; *((_BYTE *)v1 + 376) = 0; v4 = v1[92]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[92] = 0; } v1[93] = 0; *((_BYTE *)v1 + 377) = 0; *(_DWORD *)((char *)v1 + 362) = -1; return v1; } // 9E4914: using guessed type void *IconWin::`vftable'; // 9E4934: using guessed type void *IconWin::`vftable'; //----- (005D3710) -------------------------------------------------------- void __thiscall sub_5D3710(_DWORD *this, int a2, unsigned int a3, unsigned int a4, int a5) { int v5; // esi _DWORD *v6; // edi unsigned int v7; // eax unsigned int v8; // ST14_4 unsigned int v9; // ST10_4 unsigned int v10; // ST0C_4 unsigned int v11; // eax int v12; // [esp+1Ch] [ebp+8h] v5 = a2; v6 = this; if ( a2 ) { if ( this[83] ) { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 60))(a2); v12 = v6[83]; v8 = a5 * (a3 / (v7 / a4)); v9 = a4 * (a3 % (v7 / a4)); v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 64))(v5); v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 60))(v5); sub_5D1C50(v12, 0, v11, v10, v9, v8, a4, a5); sub_85BED0((_DWORD **)v6[83], 0.0, 1); } } } //----- (005D37A0) -------------------------------------------------------- void __thiscall sub_5D37A0(_DWORD *this, float a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax int v6; // edi int v7; // ebx int v8; // esi v4 = this; if ( !this[92] ) { v5 = sub_4FD5C0(0, 0, (int)this); v6 = v4[92]; v7 = v5; if ( v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4[92] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4[92] + 240))(0); sub_85C4D0(v4); } v8 = v4[92]; if ( v8 ) sub_4FCDB0(v8, a2, a3, a4); } //----- (005D3850) -------------------------------------------------------- _WORD *__cdecl sub_5D3850(__int16 a1, float a2, float a3, float a4) { _WORD *result; // eax _WORD *v5; // ebx unsigned int v6; // edi int v7; // esi _WORD *v8; // eax __int16 v9; // cx result = (_WORD *)sub_5A5F90((unsigned __int16)a1); v5 = result; if ( result ) { result = dword_AD02C4; v6 = 0; if ( ((_BYTE *)dword_AD02C8 - (_BYTE *)dword_AD02C4) >> 2 ) { do { v7 = *(_DWORD *)&result[2 * v6]; if ( v7 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 260))(v7) ) { v8 = (_WORD *)sub_5A5F90(*(unsigned __int16 *)(v7 + 364)); if ( v8 ) { v9 = v8[5]; if ( v9 == v5[5] && (v9 || *v8 == *v5) ) sub_5D37A0((_DWORD *)v7, a2, a3, a4); } } } result = dword_AD02C4; ++v6; } while ( v6 < ((_BYTE *)dword_AD02C8 - (_BYTE *)dword_AD02C4) >> 2 ); } } return result; } //----- (005D3900) -------------------------------------------------------- _DWORD *__cdecl sub_5D3900(__int16 a1, float a2, float a3, float a4) { _DWORD *result; // eax unsigned int v5; // edi int v6; // esi result = dword_AD02C4; v5 = 0; if ( ((_BYTE *)dword_AD02C8 - (_BYTE *)dword_AD02C4) >> 2 ) { do { v6 = result[v5]; if ( v6 && *(_WORD *)(v6 + 362) == a1 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 260))(v6) ) sub_5D37A0((_DWORD *)v6, a2, a3, a4); } result = dword_AD02C4; ++v5; } while ( v5 < ((_BYTE *)dword_AD02C8 - (_BYTE *)dword_AD02C4) >> 2 ); } return result; } //----- (005D3980) -------------------------------------------------------- LONG __thiscall sub_5D3980(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ebx _WORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax _DWORD *v8; // ebx int v9; // esi int v10; // ebx _DWORD *v11; // esi _DWORD *v12; // eax _DWORD *v13; // eax int v14; // ebx int v15; // esi _DWORD *v16; // ebx _DWORD *v17; // eax int v18; // esi _DWORD *v19; // ST2C_4 _DWORD *v21; // [esp+14h] [ebp-10h] int v22; // [esp+20h] [ebp-4h] v2 = this; v3 = 0; v4 = sub_8F5E10(0x20u, 0x20u, 0, 0, 0x20u, 0x20u); v5 = operator new(0xC4u); v22 = 0; if ( v5 ) v3 = sub_868C00(v5, (int)v4); v6 = (_DWORD *)*v2; v22 = -1; if ( v6 != v3 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); *v2 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v7 = operator new(0x44u); v22 = 1; if ( v7 ) v8 = sub_863BB0(v7); else v8 = 0; v9 = v2[1]; v22 = -1; if ( (_DWORD *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v2[1] = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } v10 = v2[1]; v11 = **(_DWORD ***)(v10 + 40); if ( !v11 ) { v12 = operator new(0x18u); v22 = 2; if ( v12 ) v13 = sub_863940(v12); else v13 = 0; v11 = v13; v22 = -1; v21 = v13; sub_823870((_DWORD *)(v10 + 36), 0, &v21); } v14 = v11[1]; if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v11[1] = 0; } sub_45C760((_DWORD **)v2[1], 0); *(_DWORD *)(v2[1] + 28) = 2; sub_470EE0((_DWORD **)v2[1], 0); v15 = v2[1]; v16 = (_DWORD *)*v2; v21 = (_DWORD *)v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); v22 = 3; sub_8A6330(v16 + 39, (int *)&v21); v22 = -1; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v17 = operator new(0x20u); v18 = (int)v17; v22 = 4; if ( v17 ) { sub_85B2B0(v17); *(_DWORD *)v18 = &NiAlphaProperty::`vftable'; *(_WORD *)(v18 + 28) = 236; *(_BYTE *)(v18 + 30) = 0; } else { v18 = 0; } *(_WORD *)(v18 + 28) |= 1u; v19 = (_DWORD *)*v2; v21 = (_DWORD *)v18; InterlockedIncrement((volatile LONG *)(v18 + 4)); v22 = 5; sub_8A6330(v19 + 39, (int *)&v21); v22 = -1; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*a2 + 116))(a2, (_DWORD *)*v2, 0); return sub_85C4D0(a2); } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005D3C10) -------------------------------------------------------- LONG __thiscall sub_5D3C10(void **this, _DWORD *a2) { void **v2; // esi _DWORD *v3; // edi volatile LONG *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // eax volatile LONG *v7; // edi _DWORD *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // edi _DWORD *v11; // edi _DWORD *v12; // eax _DWORD *v13; // eax volatile LONG *v14; // ebx volatile LONG *v15; // edi volatile LONG *v16; // eax volatile LONG *v17; // edi float v19; // [esp+2Ch] [ebp-24h] float v20; // [esp+30h] [ebp-20h] float v21; // [esp+34h] [ebp-1Ch] float v22; // [esp+38h] [ebp-18h] void *v23; // [esp+3Ch] [ebp-14h] void *v24; // [esp+40h] [ebp-10h] int v25; // [esp+4Ch] [ebp-4h] v2 = this; v3 = operator new(0xC4u); v23 = v3; v4 = 0; v25 = 0; if ( v3 ) { v5 = operator new(0x70u); v24 = v5; LOBYTE(v25) = 1; if ( v5 ) v6 = sub_868440(v5, 0, 1, 0, 1, 1, 4, 1, 2, 1); else v6 = 0; LOBYTE(v25) = 0; v4 = sub_868C00(v3, (int)v6); } v7 = (volatile LONG *)*v2; v25 = -1; if ( v7 != v4 ) { if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(void *, signed int))v7)((void *)v7, 1); *v2 = (void *)v4; if ( v4 ) InterlockedIncrement(v4 + 1); } sub_867880(*((_WORD **)*v2 + 46), 4, 0, 0); sub_867E60(*((_DWORD *)*v2 + 46), 0, -1.0, -1.0, 34.0, 34.0); v8 = *v2; v19 = 0.0; v20 = 0.0; v21 = 0.0; v22 = 1.0; sub_867FF0(v8[46], 0, &v19); v9 = (volatile LONG *)operator new(0x28u); v10 = v9; v23 = (void *)v9; v25 = 2; if ( v9 ) { sub_85B2B0(v9); *v10 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v10 + 14) = 0; *((_DWORD *)v10 + 8) = 0; *((_DWORD *)v10 + 9) = 1; } else { v10 = 0; } *((_DWORD *)v10 + 9) = 0; *((_DWORD *)v10 + 8) = 1; v23 = *v2; v24 = (void *)v10; InterlockedIncrement(v10 + 1); v25 = 3; sub_8A6330((_DWORD *)v23 + 39, (int *)&v24); v25 = -1; if ( !InterlockedDecrement(v10 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); sub_867680(*((_DWORD *)*v2 + 46)); sub_85C4D0(*v2); sub_85BED0((_DWORD **)*v2, 0.0, 1); v11 = operator new(0xC4u); v23 = v11; v25 = 4; if ( v11 ) { v12 = operator new(0x70u); v24 = v12; LOBYTE(v25) = 5; if ( v12 ) { v13 = sub_868440(v12, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v25) = 4; v14 = sub_868C00(v11, (int)v13); } else { LOBYTE(v25) = 4; v14 = sub_868C00(v11, 0); } } else { v14 = 0; } v15 = (volatile LONG *)v2[1]; v25 = -1; if ( v15 != v14 ) { if ( v15 && !InterlockedDecrement(v15 + 1) && v15 ) (**(void (__thiscall ***)(void *, signed int))v15)((void *)v15, 1); v2[1] = (void *)v14; if ( v14 ) InterlockedIncrement(v14 + 1); } sub_867880(*((_WORD **)v2[1] + 46), 4, 0, 0); sub_867E60(*((_DWORD *)v2[1] + 46), 0, 0.0, 0.0, 32.0, 32.0); v16 = (volatile LONG *)operator new(0x28u); v17 = v16; v23 = (void *)v16; v25 = 6; if ( v16 ) { sub_85B2B0(v16); *v17 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v17 + 14) = 0; *((_DWORD *)v17 + 8) = 0; *((_DWORD *)v17 + 9) = 1; } else { v17 = 0; } *((_DWORD *)v17 + 9) = 0; *((_DWORD *)v17 + 8) = 1; v24 = v2[1]; v23 = (void *)v17; InterlockedIncrement(v17 + 1); v25 = 7; sub_8A6330((_DWORD *)v24 + 39, (int *)&v23); v25 = -1; if ( !InterlockedDecrement(v17 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v17)(v17, 1); sub_867680(*((_DWORD *)v2[1] + 46)); sub_85C4D0(v2[1]); sub_85BED0((_DWORD **)v2[1], 0.0, 1); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*a2 + 116))(a2, *v2, 0); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*a2 + 116))(a2, v2[1], 0); return sub_85C4D0(a2); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (005D3FC0) -------------------------------------------------------- LONG __thiscall sub_5D3FC0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax LONG (__stdcall *v3)(volatile LONG *); // edi void (__thiscall ***v4)(_DWORD, signed int); // ebx int v5; // ebx void (__thiscall ***v6)(_DWORD, signed int); // ebx int v7; // ebx int v8; // ebx int v9; // ebx int v10; // ebx int v11; // ebx void (__thiscall ***v12)(_DWORD, signed int); // ebx void (__thiscall ***v13)(_DWORD, signed int); // ebx int *v14; // ebx int v15; // edi int v16; // ebx int v17; // ebx int v18; // ebx int v19; // ebx int v20; // ebx int v21; // edi int v22; // edi int v24; // [esp+18h] [ebp-10h] int v25; // [esp+24h] [ebp-4h] v1 = this; *this = &IconWin::`vftable'; this[58] = &IconWin::`vftable'; v2 = this[88]; v25 = 7; if ( v2 ) { sub_859440(this, &v24, v2); v3 = InterlockedDecrement; if ( v24 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v24; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v5 = v1[88]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[88] = 0; } } else { v3 = InterlockedDecrement; } if ( v1[89] ) { sub_859440(v1, &v24, v1[89]); if ( v24 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v24; if ( !v3((volatile LONG *)(v24 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } v7 = v1[89]; if ( v7 ) { if ( !v3((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[89] = 0; } } v8 = v1[83]; if ( v8 ) { if ( !v3((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[83] = 0; } v9 = v1[84]; if ( v9 ) { if ( !v3((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v1[84] = 0; } v10 = v1[86]; if ( v10 ) { if ( !v3((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[86] = 0; } v11 = v1[87]; if ( v11 ) { if ( !v3((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[87] = 0; } v12 = (void (__thiscall ***)(_DWORD, signed int))dword_AD02BC; if ( dword_AD02BC && *(_DWORD *)(dword_AD02BC + 4) == 1 ) { if ( !v3((volatile LONG *)(dword_AD02BC + 4)) && v12 ) (**v12)(v12, 1); dword_AD02BC = 0; } v13 = (void (__thiscall ***)(_DWORD, signed int))dword_AD02C0; if ( dword_AD02C0 && *(_DWORD *)(dword_AD02C0 + 4) == 1 ) { if ( !v3((volatile LONG *)(dword_AD02C0 + 4)) && v13 ) (**v13)(v13, 1); dword_AD02C0 = 0; } v14 = (int *)v1[93]; if ( v14 ) { LOBYTE(v25) = 9; sub_8D47C0(v14 + 7); LOBYTE(v25) = 8; nullsub_6(v14 + 1); v15 = *v14; LOBYTE(v25) = 7; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); operator delete(v14); v3 = InterlockedDecrement; } v16 = v1[92]; LOBYTE(v25) = 6; if ( v16 && !v3((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = v1[89]; LOBYTE(v25) = 5; if ( v17 && !v3((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v1[88]; LOBYTE(v25) = 4; if ( v18 && !v3((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = v1[87]; LOBYTE(v25) = 3; if ( v19 && !v3((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = v1[86]; LOBYTE(v25) = 2; if ( v20 && !v3((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = v1[84]; LOBYTE(v25) = 1; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = v1[83]; LOBYTE(v25) = 0; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v25 = -1; return sub_907B00(v1); } // 9E4914: using guessed type void *IconWin::`vftable'; // 9E4934: using guessed type void *IconWin::`vftable'; // AD02BC: using guessed type int dword_AD02BC; // AD02C0: using guessed type int dword_AD02C0; //----- (005D4380) -------------------------------------------------------- char __thiscall sub_5D4380(_DWORD *this, unsigned int a2, volatile LONG *a3) { _DWORD *v3; // esi _DWORD *v4; // ebx _WORD *v5; // edi volatile LONG *v6; // eax int v7; // edi volatile LONG *v8; // eax _DWORD *v9; // ebx int v10; // edi int v11; // ebx volatile LONG *v12; // edi volatile LONG *v13; // eax volatile LONG *v14; // eax int v15; // ebx volatile LONG *v16; // edi int v17; // ebx volatile LONG *v18; // eax volatile LONG *v19; // edi int v20; // edi char *v21; // eax char result; // al int v23; // eax int v24; // eax volatile LONG *v25; // edi int v26; // edi int v27; // eax int v28; // edi int v29; // eax int v30; // eax int v31; // eax int v32; // [esp+6Ch] [ebp+8h] v3 = this; v4 = 0; v5 = sub_8F5E10(a2, (unsigned int)a3, 0, 0, a2, (unsigned int)a3); v6 = (volatile LONG *)operator new(0xC4u); a3 = v6; if ( v6 ) v4 = sub_868C00(v6, (int)v5); v7 = v3[83]; if ( (_DWORD *)v7 != v4 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3[83] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v8 = (volatile LONG *)operator new(0x44u); a3 = v8; if ( v8 ) v9 = sub_863BB0(v8); else v9 = 0; v10 = v3[84]; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v3[84] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v11 = v3[84]; v12 = **(volatile LONG ***)(v11 + 40); if ( !v12 ) { v13 = (volatile LONG *)operator new(0x18u); a3 = v13; if ( v13 ) v14 = sub_863940(v13); else v14 = 0; v12 = v14; a3 = v14; sub_823870((_DWORD *)(v11 + 36), 0, &a3); } v15 = *((_DWORD *)v12 + 1); if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *((_DWORD *)v12 + 1) = 0; } sub_45C760((_DWORD **)v3[84], 0); *(_DWORD *)(v3[84] + 28) = 2; sub_470EE0((_DWORD **)v3[84], 0); v16 = (volatile LONG *)v3[84]; v17 = v3[83]; a3 = v16; if ( v16 ) InterlockedIncrement(v16 + 1); sub_8A6330((_DWORD *)(v17 + 156), (int *)&a3); if ( v16 && !InterlockedDecrement(v16 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); v18 = (volatile LONG *)operator new(0x20u); v19 = v18; a3 = v18; if ( v18 ) { sub_85B2B0(v18); *v19 = (volatile LONG)&NiAlphaProperty::`vftable'; *((_WORD *)v19 + 14) = 236; *((_BYTE *)v19 + 30) = 0; } else { v19 = 0; } *((_WORD *)v19 + 14) |= 1u; v32 = v3[83]; a3 = v19; InterlockedIncrement(v19 + 1); sub_8A6330((_DWORD *)(v32 + 156), (int *)&a3); if ( !InterlockedDecrement(v19 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v3 + 116))(v3, v3[83], 0); if ( dword_AD02C0 || dword_AD02BC ) goto LABEL_49; a3 = 0; v20 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v21 = (char *)sub_401410(byte_ACAB50, "Game\\ItemPick.nif"); result = sub_8F66B0(v21, (int)&a3, v20); if ( a3 ) { v23 = (*(int (__stdcall **)(const char *))(*a3 + 72))("ItemClick"); sub_56FF80(&dword_AD02C0, v23); v24 = (*(int (__stdcall **)(const char *))(*a3 + 72))("ItemOver"); sub_56FF80(&dword_AD02BC, v24); v25 = a3; if ( a3 && !InterlockedDecrement(a3 + 1) && v25 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v25)(v25, 1); LABEL_49: v26 = v3[87]; if ( v26 != dword_AD02C0 ) { if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v27 = dword_AD02C0; v3[87] = dword_AD02C0; if ( v27 ) InterlockedIncrement((volatile LONG *)(v27 + 4)); } v28 = v3[86]; if ( v28 != dword_AD02BC ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v29 = dword_AD02BC; v3[86] = dword_AD02BC; if ( v29 ) InterlockedIncrement((volatile LONG *)(v29 + 4)); } if ( !v3[89] && dword_AD02C0 ) { v30 = sub_85BD60((void *)dword_AD02C0); sub_56FF80(v3 + 89, v30); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v3 + 116))(v3, v3[89], 0); *(_WORD *)(v3[89] + 28) |= 1u; } if ( !v3[88] ) { if ( dword_AD02BC ) { v31 = sub_85BD60((void *)dword_AD02BC); sub_56FF80(v3 + 88, v31); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v3 + 116))(v3, v3[88], 0); *(_WORD *)(v3[88] + 28) |= 1u; } } sub_85C4D0(v3); result = sub_85BED0((_DWORD **)v3, 0.0, 1); } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // AD02BC: using guessed type int dword_AD02BC; // AD02C0: using guessed type int dword_AD02C0; //----- (005D4810) -------------------------------------------------------- void __thiscall sub_5D4810(_DWORD *this, void *a2, unsigned int a3, unsigned int a4, unsigned int a5) { _DWORD *v5; // esi unsigned int v6; // eax unsigned int v7; // ST10_4 unsigned int v8; // ST0C_4 unsigned int v9; // ST08_4 unsigned int v10; // eax _WORD *v11; // edi _DWORD *v12; // eax _DWORD *v13; // ebx int v14; // edi _DWORD *v15; // eax _DWORD *v16; // ebx int v17; // edi _DWORD *v18; // eax int v19; // edi v5 = this; if ( a2 ) { v6 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); v7 = a5 * (a3 / (v6 / a4)); v8 = a3 % (v6 / a4); v9 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 64))(a2); v10 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); v11 = sub_8F5E10(v10, v9, v8, v7, a4, a5); v12 = operator new(0xC4u); v13 = 0; if ( v12 ) v13 = sub_868C00(v12, (int)v11); v14 = v5[83]; if ( (_DWORD *)v14 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v5[83] = v13; if ( v13 ) InterlockedIncrement(v13 + 1); } v15 = operator new(0x44u); if ( v15 ) v16 = sub_863BB0(v15); else v16 = 0; v17 = v5[84]; if ( (_DWORD *)v17 != v16 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v5[84] = v16; if ( v16 ) InterlockedIncrement(v16 + 1); } sub_42AB40((_DWORD *)v5[84], 0); sub_45C760((_DWORD **)v5[84], 0); *(_DWORD *)(v5[84] + 28) = 2; sub_470EE0((_DWORD **)v5[84], 0); sub_403700((_DWORD *)v5[83], v5[84]); v18 = operator new(0x20u); v19 = (int)v18; if ( v18 ) { sub_85B2B0(v18); *(_DWORD *)v19 = &NiAlphaProperty::`vftable'; *(_WORD *)(v19 + 28) = 236; *(_BYTE *)(v19 + 30) = 0; } else { v19 = 0; } *(_WORD *)(v19 + 28) |= 1u; sub_403700((_DWORD *)v5[83], v19); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v5 + 116))(v5, v5[83], 0); sub_85C4D0(v5); sub_85BED0((_DWORD **)v5, 0.0, 1); } } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005D4A30) -------------------------------------------------------- LONG __thiscall sub_5D4A30(_DWORD *this, char a2) { _DWORD *v2; // ebx int v3; // edi _DWORD *v4; // eax int v5; // esi int v6; // esi float *v7; // eax float *v8; // eax double v9; // st7 float v10; // ST14_4 float v11; // ST18_4 float v12; // ST1C_4 v2 = this; v3 = sub_85C050(this, 9); if ( !v3 ) { v4 = operator new(0x28u); v5 = (int)v4; if ( v4 ) { sub_85B2B0(v4); *(_DWORD *)v5 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v5 + 28) = 0; *(_DWORD *)(v5 + 32) = 0; *(_DWORD *)(v5 + 36) = 1; } else { v5 = 0; } v3 = v5; sub_403700(v2, v5); } v6 = sub_85C050(v2, 3); if ( !v6 ) { v7 = (float *)operator new(0x60u); if ( v7 ) v8 = sub_85EBC0(v7); else v8 = 0; v6 = (int)v8; sub_403700(v2, (int)v8); } *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; ++*(_DWORD *)(v6 + 88); if ( a2 ) v9 = 0.40000001; else v9 = 1.0; v10 = v9; v11 = v9; *(float *)(v6 + 68) = v10; v12 = v9; *(float *)(v6 + 72) = v11; *(float *)(v6 + 76) = v12; return sub_85C4D0(v2); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (005D4B50) -------------------------------------------------------- LONG __thiscall sub_5D4B50(_DWORD *this, float a2, float a3, float a4) { _DWORD *v4; // edi int v5; // ebx _DWORD *v6; // eax int v7; // esi int v8; // esi float *v9; // eax float *v10; // eax v4 = this; v5 = sub_85C050(this, 9); if ( !v5 ) { v6 = operator new(0x28u); v7 = (int)v6; if ( v6 ) { sub_85B2B0(v6); *(_DWORD *)v7 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v7 + 28) = 0; *(_DWORD *)(v7 + 32) = 0; *(_DWORD *)(v7 + 36) = 1; } else { v7 = 0; } v5 = v7; sub_403700(v4, v7); } v8 = sub_85C050(v4, 3); if ( !v8 ) { v9 = (float *)operator new(0x60u); if ( v9 ) v10 = sub_85EBC0(v9); else v10 = 0; v8 = (int)v10; sub_403700(v4, (int)v10); } *(_DWORD *)(v5 + 32) = 0; *(_DWORD *)(v5 + 36) = 0; ++*(_DWORD *)(v8 + 88); *(float *)(v8 + 68) = a2; *(float *)(v8 + 72) = a3; *(float *)(v8 + 76) = a4; return sub_85C4D0(v4); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (005D4C60) -------------------------------------------------------- char __thiscall sub_5D4C60(_DWORD *this, unsigned int a2, unsigned int a3, int a4) { _DWORD *v4; // esi _WORD *v5; // edi _DWORD *v6; // eax _DWORD *v7; // edi int v8; // ebx _DWORD *v9; // eax _DWORD *v10; // edi int v11; // ebx int v12; // edi _DWORD *v13; // ebx _DWORD *v14; // eax _DWORD *v15; // eax int v16; // edi int v17; // ebx int v18; // edi _DWORD *v19; // eax int v20; // ebx int v21; // ST74_4 int v22; // ebx int v23; // eax int v24; // ebx int v25; // eax char result; // al int v27; // eax int v28; // eax int v29; // ST70_4 float v30; // ST74_4 float v31; // ST78_4 int v32; // eax int v33; // eax float v34; // ST68_4 float v35; // ST6C_4 int v36; // ST70_4 float v37; // ST78_4 float v38; // ST74_4 void (__thiscall ***v39)(_DWORD, signed int); // edi int v40; // [esp+7Ch] [ebp-114h] char Src; // [esp+80h] [ebp-110h] int v42; // [esp+18Ch] [ebp-4h] v4 = this; v5 = sub_8F5E10(a2, a3, 0, 0, a2, a3); v6 = operator new(0xC4u); v42 = 0; if ( v6 ) v7 = sub_868C00(v6, (int)v5); else v7 = 0; v8 = v4[83]; v42 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v4[83] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = operator new(0x44u); v42 = 1; if ( v9 ) v10 = sub_863BB0(v9); else v10 = 0; v11 = v4[84]; v42 = -1; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v4[84] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v12 = v4[84]; v13 = **(_DWORD ***)(v12 + 40); if ( !v13 ) { v14 = operator new(0x18u); v42 = 2; if ( v14 ) v15 = sub_863940(v14); else v15 = 0; v13 = v15; v42 = -1; v40 = (int)v15; sub_823870((_DWORD *)(v12 + 36), 0, &v40); } v16 = v13[1]; if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v13[1] = 0; } sub_45C760((_DWORD **)v4[84], 0); *(_DWORD *)(v4[84] + 28) = 2; sub_470EE0((_DWORD **)v4[84], 0); v17 = v4[84]; v18 = v4[83]; v40 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); v42 = 3; sub_8A6330((_DWORD *)(v18 + 156), &v40); v42 = -1; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v19 = operator new(0x20u); v20 = (int)v19; v42 = 4; if ( v19 ) { sub_85B2B0(v19); *(_DWORD *)v20 = &NiAlphaProperty::`vftable'; *(_WORD *)(v20 + 28) = 236; *(_BYTE *)(v20 + 30) = 0; } else { v20 = 0; } *(_WORD *)(v20 + 28) |= 1u; v21 = v4[83]; v40 = v20; InterlockedIncrement((volatile LONG *)(v20 + 4)); v42 = 5; sub_8A6330((_DWORD *)(v21 + 156), &v40); v42 = -1; if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 116))(v4, v4[83], 0); v22 = v4[87]; if ( v22 != dword_AD02C0 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v23 = dword_AD02C0; v4[87] = dword_AD02C0; if ( v23 ) InterlockedIncrement((volatile LONG *)(v23 + 4)); } v24 = v4[86]; if ( v24 != dword_AD02BC ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = dword_AD02BC; v4[86] = dword_AD02BC; if ( v25 ) InterlockedIncrement((volatile LONG *)(v25 + 4)); } if ( v4[89] || v4[88] ) goto LABEL_64; v40 = 0; v42 = 6; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sGame\\%s.nif", byte_ACAB50, a4); result = sub_8F66B0(&Src, (int)&v40, dword_BA6BA0); if ( v40 ) { sprintf(&Src, "%sClick", a4); v27 = (*(int (__stdcall **)(char *))(*(_DWORD *)v40 + 72))(&Src); sub_56FF80(v4 + 89, v27); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 116))(v4, v4[89], 0); *(_WORD *)(v4[89] + 28) |= 1u; v28 = v4[89]; v29 = *(_DWORD *)(v28 + 96); v30 = *(float *)(v28 + 88) - 2.0; v31 = *(float *)(v28 + 92) - 2.0; *(float *)(v28 + 88) = v30; *(float *)(v28 + 92) = v31; *(_DWORD *)(v28 + 96) = v29; sprintf(&Src, "%sOver", a4); v32 = (*(int (__stdcall **)(char *))(*(_DWORD *)v40 + 72))(&Src); sub_56FF80(v4 + 88, v32); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 116))(v4, v4[88], 0); *(_WORD *)(v4[88] + 28) |= 1u; v33 = v4[88]; v34 = *(float *)(v33 + 88); v35 = *(float *)(v33 + 92); v36 = *(_DWORD *)(v33 + 96); v42 = -1; v37 = v34 - 2.0; v38 = v35 - 2.0; *(float *)(v33 + 88) = v37; *(float *)(v33 + 92) = v38; *(_DWORD *)(v33 + 96) = v36; if ( v40 ) { v39 = (void (__thiscall ***)(_DWORD, signed int))v40; if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) ) { if ( v39 ) (**v39)(v39, 1); } } LABEL_64: sub_85C4D0(v4); result = sub_85BED0((_DWORD **)v4, 0.0, 1); } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // AD02BC: using guessed type int dword_AD02BC; // AD02C0: using guessed type int dword_AD02C0; //----- (005D5260) -------------------------------------------------------- volatile LONG *__cdecl sub_5D5260(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax volatile LONG *v6; // esi void (__thiscall ***v7)(void *, signed int); // edi volatile LONG *result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x17Cu); v9 = v5; v10 = 0; if ( v5 ) v6 = sub_5D35C0(v5); else v6 = 0; if ( v6 ) InterlockedIncrement(v6 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v6); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, _DWORD, _DWORD))(*v6 + 572))( v6, a1, a2, a3, a4, a5, 0, 0) ) { (*(void (__thiscall **)(volatile LONG *, int, int))(*v6 + 596))(v6, a3, a4); (*(void (__thiscall **)(volatile LONG *))(*v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); result = 0; } return result; } //----- (005D53B0) -------------------------------------------------------- void *sub_5D53B0() { void *v0; // edi void *result; // eax if ( dword_AD02C4 != dword_AD02C8 ) { v0 = dword_AD02C4; result = memcpy_0(dword_AD02C4, dword_AD02C8, 0); dword_AD02C8 = v0; } return result; } //----- (005D53F0) -------------------------------------------------------- void *__thiscall sub_5D53F0(void *this, char a2) { void *v2; // esi v2 = this; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005D5420) -------------------------------------------------------- int __thiscall sub_5D5420(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int result; // eax v2 = this; v3 = this[95]; if ( v3 ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 256))(a2); *((_BYTE *)v2 + 388) = a2; } return result; } //----- (005D5450) -------------------------------------------------------- int __thiscall sub_5D5450(_DWORD *this, _BYTE *a2) { int result; // eax if ( *((_BYTE *)this + 444) ) result = sub_5D3050(this, a2); return result; } //----- (005D5470) -------------------------------------------------------- int __thiscall sub_5D5470(_DWORD *this) { return this[96]; } //----- (005D5480) -------------------------------------------------------- char *__cdecl sub_5D5480(int a1) { int v2; // edx float v3; // ST0C_4 float v4; // [esp+10h] [ebp+8h] if ( !a1 ) return (char *)&unk_9E4B98; v2 = *(_DWORD *)(a1 + 112); v4 = (double)*(unsigned int *)(a1 + 10); v3 = (double)*(unsigned int *)(v2 + 106); return sub_7549E0("%d%%", (unsigned int)(signed __int64)(v4 * 100.0 / v3)); } //----- (005D5500) -------------------------------------------------------- void __thiscall sub_5D5500(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; sub_5D3110(this, a2); if ( v2[95] && *((_BYTE *)v2 + 388) ) (*(void (__stdcall **)(int))(*(_DWORD *)v2[95] + 256))(a2); if ( *((_BYTE *)v2 + 389) ) { v3 = v2[99]; if ( (_BYTE)a2 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; else *(_WORD *)(v3 + 28) |= 1u; } sub_5D2FD0((_BYTE *)v2 + 416, a2); sub_5D3000((_BYTE *)v2 + 404, a2); } //----- (005D5580) -------------------------------------------------------- char __stdcall sub_5D5580(__int16 a1) { _DWORD **v1; // eax _DWORD **v2; // ebx _DWORD *v3; // edi unsigned int v4; // esi int v5; // eax int v6; // eax v1 = (_DWORD **)sub_6CD770(); v2 = v1; if ( !v1 ) return 0; v3 = v1[1]; v4 = 0; if ( (unsigned __int16)sub_53DA30(v1[1]) <= 0u ) return 0; while ( 1 ) { v5 = sub_74E2E0(v3, v4); if ( v5 ) { if ( *(_BYTE *)(v5 + 32) ) { if ( !*(_BYTE *)(v5 + 29) && *(_WORD *)(v5 + 34) == a1 ) { v6 = sub_74BA80(v2, *(_WORD *)(v5 + 4)); if ( v6 == 6 || v6 == 8 ) break; } } } if ( (signed int)++v4 >= (unsigned __int16)sub_53DA30(v3) ) return 0; } return 1; } //----- (005D5600) -------------------------------------------------------- signed __int16 __thiscall sub_5D5600(_DWORD *this) { int v1; // eax signed __int16 result; // ax v1 = this[96]; if ( v1 ) result = *(_WORD *)(v1 + 8); else result = -1; return result; } //----- (005D5620) -------------------------------------------------------- int __thiscall sub_5D5620(_DWORD *this) { int v1; // esi int *v2; // ecx int result; // eax v1 = (int)this; v2 = (int *)this[68]; if ( v2 ) { result = *(_DWORD *)(v1 + 384); if ( result ) { sub_547C20(v2, *(_DWORD *)(v1 + 384)); result = sub_8F2F90(v1); } } return result; } //----- (005D5650) -------------------------------------------------------- LONG __thiscall sub_5D5650(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi int *v5; // ebx int v6; // esi int v7; // esi int v8; // esi int v9; // esi int v10; // esi int v11; // esi int v12; // esi v1 = this; *this = &ItemIcon::`vftable'; this[58] = &ItemIcon::`vftable'; v2 = this[96]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[96] = 0; } *((_BYTE *)v1 + 432) = 0; v3 = v1[110]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[109]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1 + 104; v6 = v1[105]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = *v5; if ( *v5 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[102]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[101]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[100]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[99]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[96]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); return sub_5D3FC0(v1); } // 9E4BE0: using guessed type void *ItemIcon::`vftable'; // 9E4BFC: using guessed type void *ItemIcon::`vftable'; //----- (005D5860) -------------------------------------------------------- char __thiscall sub_5D5860(_DWORD *this, int a2, int a3, _DWORD *a4) { int v4; // esi char result; // al int v6; // eax volatile LONG *v7; // eax v4 = (int)this; result = sub_907E00(this, a2, a3, 32, 32, a4, 0, 0); if ( result ) { v6 = sub_421050(0); v7 = sub_8F4A20(18, 20, 14, 12, v6, v4, 0, 0); *(_DWORD *)(v4 + 380) = v7; (*(void (__thiscall **)(volatile LONG *, signed int))(*v7 + 488))(v7, 2); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v4 + 380) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 380) + 240))(0); result = 1; } return result; } //----- (005D58F0) -------------------------------------------------------- int __thiscall sub_5D58F0(int this, _BYTE *a2, unsigned int a3, unsigned int a4, int a5) { int result; // eax int v6; // esi int v7; // edi unsigned int v8; // eax unsigned int v9; // ST14_4 unsigned int v10; // ST10_4 unsigned int v11; // ST0C_4 unsigned int v12; // eax int v13; // [esp+1Ch] [ebp+8h] result = (int)a2; v6 = this; if ( a2 && *a2 != 45 ) { if ( a3 == -1 ) { *(_BYTE *)(this + 389) = 0; *(_WORD *)(*(_DWORD *)(this + 396) + 28) |= 1u; } else { result = sub_42BF30((int)a2); v7 = result; if ( result ) { sub_42AB40(*(_DWORD **)(v6 + 400), result); result = *(_DWORD *)(v6 + 396); *(_WORD *)(result + 28) &= 0xFFFEu; *(_BYTE *)(v6 + 389) = 1; if ( a3 != *(_DWORD *)(v6 + 392) ) { if ( *(_DWORD *)(v6 + 400) ) { v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 60))(v7); v13 = *(_DWORD *)(v6 + 396); v9 = a5 * (a3 / (v8 / a4)); v10 = a4 * (a3 % (v8 / a4)); v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 64))(v7); v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 60))(v7); sub_5D1C50(v13, 0, v12, v11, v10, v9, a4, a5); result = sub_85BED0(*(_DWORD ***)(v6 + 396), 0.0, 1); *(_DWORD *)(v6 + 392) = a3; } } } else { *(_BYTE *)(v6 + 389) = 0; *(_WORD *)(*(_DWORD *)(v6 + 396) + 28) |= 1u; } } } else { *(_BYTE *)(this + 389) = 0; *(_WORD *)(*(_DWORD *)(this + 396) + 28) |= 1u; } return result; } //----- (005D5A10) -------------------------------------------------------- int __thiscall sub_5D5A10(_DWORD *this, float a2, float a3, float a4, float a5) { _DWORD *v5; // esi int result; // eax float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v5 = this; result = this[109]; if ( result ) { v7 = a2 / 255.0; v8 = a3 / 255.0; v9 = a4 / 255.0; v10 = a5 / 255.0; sub_867FF0(*(_DWORD *)(result + 184), 0, &v7); sub_867680(*(_DWORD *)(v5[109] + 184)); sub_85C4D0((_DWORD *)v5[109]); sub_85BED0((_DWORD **)v5[109], 0.0, 1); sub_85C4D0(v5); result = sub_85BED0((_DWORD **)v5, 0.0, 1); } return result; } //----- (005D5AB0) -------------------------------------------------------- int __thiscall sub_5D5AB0(_DWORD *this, float a2, float a3, float a4, float a5) { _DWORD *v5; // esi int result; // eax float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v5 = this; result = this[110]; if ( result ) { v7 = a2 / 255.0; v8 = a3 / 255.0; v9 = a4 / 255.0; v10 = a5 / 255.0; sub_867FF0(*(_DWORD *)(result + 184), 0, &v7); sub_867680(*(_DWORD *)(v5[110] + 184)); sub_85C4D0((_DWORD *)v5[110]); result = sub_85BED0((_DWORD **)v5[110], 0.0, 1); } return result; } //----- (005D5B30) -------------------------------------------------------- void __thiscall sub_5D5B30(int this) { *(_BYTE *)(this + 389) = 0; *(_WORD *)(*(_DWORD *)(this + 396) + 28) |= 1u; } //----- (005D5B50) -------------------------------------------------------- int __thiscall sub_5D5B50(void *this) { return sub_5D58F0((int)this, "VarItem000", 0x39u, 0x20u, 32); } //----- (005D5B70) -------------------------------------------------------- int *__thiscall sub_5D5B70(_WORD *this, int a2, char a3) { int *result; // eax int v4; // esi int v5; // edi int v6; // ebx int v7; // ST0C_4 int v8; // eax int v9; // ebx int *v10; // eax int v11; // eax int v12; // eax void (__thiscall *v13)(int, signed int); // eax int *v14; // ecx int v15; // ebx char *v16; // eax int v17; // edi int v18; // eax char *v19; // eax int v20; // ecx int v21; // eax int v22; // ecx int v23; // edi int v24; // [esp+0h] [ebp-10h] unsigned __int16 v25; // [esp+Ch] [ebp-4h] result = (int *)a2; v4 = (int)this; if ( !a2 ) { sub_5D3470(this + 202, 0, 0, 0, 0, 0, 0); (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v4 + 584))(v4, 0, -1, 32, 32); v21 = *(_DWORD *)(v4 + 396); *(_BYTE *)(v4 + 389) = 0; *(_WORD *)(v21 + 28) |= 1u; sub_5D3380((_BYTE *)(v4 + 416), 0, 0xFFFFFFFF); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); result = (int *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); v22 = *(_DWORD *)(v4 + 380); if ( !v22 || !*(_BYTE *)(v4 + 388) ) goto LABEL_28; (*(void (__stdcall **)(void *, int))(*(_DWORD *)v22 + 472))(&unk_9E4BA1, v24); LABEL_27: result = (int *)(*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v4 + 380) + 256))(0); goto LABEL_28; } v5 = *(_DWORD *)(a2 + 116); if ( !v5 ) return result; sub_5D3470( this + 202, *(_BYTE *)(v5 + 142), *(_BYTE *)(v5 + 146), *(_BYTE *)(v5 + 150), *(_BYTE *)(v5 + 154), *(_BYTE *)(v5 + 158), *(_BYTE *)(v5 + 162)); v6 = *(_DWORD *)v4; v7 = *(_DWORD *)(v5 + 34); v8 = sub_42BF30(v5 + 38); (*(void (__thiscall **)(int, int, int, signed int, signed int))(v6 + 584))(v4, v8, v7, 32, 32); v9 = dword_ACB230; v25 = *(_WORD *)(a2 + 8); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(unsigned __int16 *)(a2 + 8)) ) { if ( v25 <= *(_WORD *)(v9 + 200) ) { v10 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v25); if ( *v10 ) { v11 = *v10; if ( v11 ) { if ( *(_DWORD *)(v11 + 98) == 4 ) { if ( sub_5D5580(*(_WORD *)v11) ) { v12 = *(_DWORD *)(v4 + 396); *(_BYTE *)(v4 + 389) = 0; *(_WORD *)(v12 + 28) |= 1u; } else { sub_5D58F0(v4, "VarItem000", 0x39u, 0x20u, 32); } } else { sub_5D58F0(v4, (_BYTE *)(v5 + 74), *(_DWORD *)(v5 + 70), 0x20u, 32); } } } } } sub_5D3380((_BYTE *)(v4 + 416), (_BYTE *)(v5 + 110), *(_DWORD *)(v5 + 106)); v13 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 256); *(_WORD *)(v4 + 28) &= 0xFFFEu; v13(v4, 1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 240))(v4, 1); *(_BYTE *)(v4 + 444) = a3; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2) == 24 ) { v14 = *(int **)(v4 + 380); if ( v14 && *(_BYTE *)(v4 + 388) ) { v15 = *v14; v16 = sub_5D5480(a2); (*(void (__thiscall **)(_DWORD, char *))(v15 + 472))(*(_DWORD *)(v4 + 380), v16); result = (int *)(*(int (__stdcall **)(signed int))(**(_DWORD **)(v4 + 380) + 256))(1); } else { (*(void (__stdcall **)(void *))(*v14 + 472))(&unk_9E4B9A); result = (int *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 380) + 256))(0); } goto LABEL_28; } result = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 16))(a2); if ( (unsigned int)result > 1 ) { result = *(int **)(v4 + 380); if ( result && *(_BYTE *)(v4 + 388) ) { v17 = *result; v18 = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 12))(v24); v19 = sub_7549E0("%d", v18); (*(void (__thiscall **)(_DWORD, char *))(v17 + 472))(*(_DWORD *)(v4 + 380), v19); result = (int *)(*(int (__cdecl **)(signed int))(**(_DWORD **)(v4 + 380) + 256))(1); } goto LABEL_28; } v20 = *(_DWORD *)(v4 + 380); if ( v20 && *(_BYTE *)(v4 + 388) ) { (*(void (__stdcall **)(void *, int))(*(_DWORD *)v20 + 472))(&unk_9E4B9B, v24); goto LABEL_27; } LABEL_28: v23 = *(_DWORD *)(v4 + 384); if ( v23 != a2 ) { if ( v23 ) { result = (int *)InterlockedDecrement((volatile LONG *)(v23 + 4)); if ( !result ) { if ( v23 ) result = (int *)(**(int (__thiscall ***)(int, signed int))v23)(v23, 1); } } *(_DWORD *)(v4 + 384) = a2; if ( a2 ) result = (int *)InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } // ACB230: using guessed type int dword_ACB230; //----- (005D5EA0) -------------------------------------------------------- int __userpurge sub_5D5EA0@(int a1@, int a2@, int a3) { int v3; // esi int v4; // ST14_4 int v5; // edi int v6; // edi int v7; // edx int v8; // ebx int v9; // ST0C_4 int v10; // eax int v11; // ebx int *v12; // eax int v13; // eax int v14; // eax int result; // eax int v16; // eax int v17; // ecx v3 = a1; if ( (_WORD)a3 == -1 ) { sub_5D3470((_WORD *)(a1 + 404), 0, 0, 0, 0, 0, 0); (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v3 + 584))(v3, 0, -1, 32, 32); v16 = *(_DWORD *)(v3 + 396); *(_BYTE *)(v3 + 389) = 0; *(_WORD *)(v16 + 28) |= 1u; sub_5D3380((_BYTE *)(v3 + 416), 0, 0xFFFFFFFF); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 256))(v3, 0); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 240))(v3, 0); } else { v4 = a2; v5 = dword_ACDA70; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a3, v4) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v5 + 200) ) { v7 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v7 + 4 * (unsigned __int16)a3) ) v6 = *(_DWORD *)(v7 + 4 * (unsigned __int16)a3); else v6 = 0; } else { v6 = 0; } } else { v6 = 0; } sub_5D3470( (_WORD *)(v3 + 404), *(_BYTE *)(v6 + 142), *(_BYTE *)(v6 + 146), *(_BYTE *)(v6 + 150), *(_BYTE *)(v6 + 154), *(_BYTE *)(v6 + 158), *(_BYTE *)(v6 + 162)); v8 = *(_DWORD *)v3; v9 = *(_DWORD *)(v6 + 34); v10 = sub_42BF30(v6 + 38); (*(void (__thiscall **)(int, int, int, signed int, signed int))(v8 + 584))(v3, v10, v9, 32, 32); v11 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a3) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v11 + 200) ) { v12 = (int *)(*(_DWORD *)(v11 + 196) + 4 * (unsigned __int16)a3); if ( *v12 ) { v13 = *v12; if ( v13 ) { if ( *(_DWORD *)(v13 + 98) == 4 ) { if ( sub_5D5580(*(_WORD *)v13) ) { v14 = *(_DWORD *)(v3 + 396); *(_BYTE *)(v3 + 389) = 0; *(_WORD *)(v14 + 28) |= 1u; } else { sub_5D58F0(v3, "VarItem000", 0x39u, 0x20u, 32); } } else { sub_5D58F0(v3, (_BYTE *)(v6 + 74), *(_DWORD *)(v6 + 70), 0x20u, 32); } } } } } sub_5D3380((_BYTE *)(v3 + 416), (_BYTE *)(v6 + 110), *(_DWORD *)(v6 + 106)); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 256))(v3, 1); result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 240))(v3, 1); } v17 = *(_DWORD *)(v3 + 380); if ( v17 ) { if ( *(_BYTE *)(v3 + 388) ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v17 + 472))(&unk_9E4BA2); result = (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 380) + 256))(*(_DWORD *)(v3 + 380), 0); } } return result; } // 5D5EA0: could not find valid save-restore pair for edi // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (005D60B0) -------------------------------------------------------- int __thiscall sub_5D60B0(_DWORD *this, int a2) { int v2; // esi int v3; // ecx unsigned __int8 *v4; // eax unsigned __int8 *v5; // edi int v6; // ebx int v7; // ST0C_4 int v8; // eax int result; // eax int v10; // eax v2 = (int)this; v3 = this[95]; if ( v3 && *(_BYTE *)(v2 + 388) ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 472))(&unk_9E4BA3); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 256))(0); } if ( a2 != -1 && (v4 = (unsigned __int8 *)sub_53DB70(a2), (v5 = v4) != 0) ) { sub_5D3470((_WORD *)(v2 + 404), v4[368], v4[372], v4[376], 0, 0, 0); v6 = *(_DWORD *)v2; v7 = *((_DWORD *)v5 + 65); v8 = sub_42BF30((int)(v5 + 264)); (*(void (__thiscall **)(int, int, int, signed int, signed int))(v6 + 584))(v2, v8, v7, 32, 32); sub_5D58F0(v2, v5 + 300, *((_DWORD *)v5 + 74), 0x20u, 32); sub_5D3380((_BYTE *)(v2 + 416), v5 + 336, *((_DWORD *)v5 + 83)); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 256))(v2, 1); result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 240))(v2, 1); } else { sub_5D3470((_WORD *)(v2 + 404), 0, 0, 0, 0, 0, 0); (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v2 + 584))(v2, 0, -1, 32, 32); v10 = *(_DWORD *)(v2 + 396); *(_BYTE *)(v2 + 389) = 0; *(_WORD *)(v10 + 28) |= 1u; sub_5D3380((_BYTE *)(v2 + 416), 0, 0xFFFFFFFF); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 240))(v2, 0); } return result; } //----- (005D6220) -------------------------------------------------------- int *__userpurge sub_5D6220@(int a1@, int a2@, int a3@, int a4) { int v4; // esi int v5; // eax int v6; // edi int v7; // ebx int *result; // eax int v9; // edi int v10; // ebx int v11; // ST0C_4 int v12; // eax int v13; // eax int v14; // eax int *v15; // ecx int v16; // edi char *v17; // eax int v18; // eax int v19; // ecx int v20; // [esp-8h] [ebp-Ch] int v21; // [esp-4h] [ebp-8h] v4 = a1; if ( a4 && (v5 = *(unsigned __int16 *)(a4 + 1), (_WORD)v5 != -1) ) { v21 = a2; v20 = a3; v6 = dword_ACDA70; v7 = *(unsigned __int16 *)(a4 + 1); result = (int *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, v5); if ( (_BYTE)result ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) ) { result = (int *)(*(_DWORD *)(v6 + 196) + 4 * v7); if ( *result ) { v9 = *result; if ( *result ) { sub_5D3470( (_WORD *)(v4 + 404), *(_BYTE *)(v9 + 142), *(_BYTE *)(v9 + 146), *(_BYTE *)(v9 + 150), *(_BYTE *)(v9 + 154), *(_BYTE *)(v9 + 158), *(_BYTE *)(v9 + 162)); v10 = *(_DWORD *)v4; v11 = *(_DWORD *)(v9 + 34); v12 = sub_42BF30(v9 + 38); (*(void (__thiscall **)(int, int, int, signed int, signed int, int, int))(v10 + 584))( v4, v12, v11, 32, 32, v20, v21); v13 = sub_49F760(*(unsigned __int16 *)(a4 + 1)); if ( v13 ) { if ( *(_DWORD *)(v13 + 98) == 4 ) { if ( sub_5D5580(*(_WORD *)v13) ) { v14 = *(_DWORD *)(v4 + 396); *(_BYTE *)(v4 + 389) = 0; *(_WORD *)(v14 + 28) |= 1u; } else { sub_5D58F0(v4, "VarItem000", 0x39u, 0x20u, 32); } } else { sub_5D58F0(v4, (_BYTE *)(v9 + 74), *(_DWORD *)(v9 + 70), 0x20u, 32); } } sub_5D3380((_BYTE *)(v4 + 416), (_BYTE *)(v9 + 110), *(_DWORD *)(v9 + 106)); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 256))(v4, 1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 240))(v4, 1); result = *(int **)(sub_49F760(*(unsigned __int16 *)(a4 + 1)) + 106); v15 = *(int **)(v4 + 380); if ( (unsigned int)result <= 1 ) { if ( v15 && *(_BYTE *)(v4 + 388) ) { (*(void (__stdcall **)(void *))(*v15 + 472))(&unk_9E4BAF); result = (int *)(*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 380) + 256))( *(_DWORD *)(v4 + 380), 0); } } else if ( v15 ) { if ( *(_BYTE *)(v4 + 388) ) { v16 = *v15; v17 = sub_7549E0("%d", result); (*(void (__thiscall **)(_DWORD, char *))(v16 + 472))(*(_DWORD *)(v4 + 380), v17); result = (int *)(*(int (__stdcall **)(signed int))(**(_DWORD **)(v4 + 380) + 256))(1); } } } } } } } else { sub_5D3470((_WORD *)(a1 + 404), 0, 0, 0, 0, 0, 0); (*(void (__thiscall **)(int, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v4 + 584))(v4, 0, -1, 32, 32); v18 = *(_DWORD *)(v4 + 396); *(_BYTE *)(v4 + 389) = 0; *(_WORD *)(v18 + 28) |= 1u; sub_5D3380((_BYTE *)(v4 + 416), 0, 0xFFFFFFFF); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 256))(v4, 0); result = (int *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 240))(v4, 0); v19 = *(_DWORD *)(v4 + 380); if ( v19 && *(_BYTE *)(v4 + 388) ) { (*(void (__stdcall **)(void *))(*(_DWORD *)v19 + 472))(&unk_9E4BB3); result = (int *)(*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 380) + 256))(*(_DWORD *)(v4 + 380), 0); } } return result; } // 5D6220: could not find valid save-restore pair for ebx // 5D6220: could not find valid save-restore pair for edi // ACDA70: using guessed type int dword_ACDA70; //----- (005D64C0) -------------------------------------------------------- LONG __thiscall sub_5D64C0(_DWORD *this, unsigned int a2, volatile LONG *a3) { _DWORD *v3; // esi _DWORD *v4; // ebx _WORD *v5; // edi volatile LONG *v6; // eax int v7; // edi volatile LONG *v8; // eax _DWORD *v9; // ebx int v10; // edi int v11; // ebx _DWORD *v12; // edi volatile LONG *v13; // eax _DWORD *v14; // eax int v15; // ebx volatile LONG *v16; // edi int v17; // ebx volatile LONG *v18; // eax volatile LONG *v19; // edi int v21; // [esp+24h] [ebp+8h] v3 = this; v4 = 0; v5 = sub_8F5E10(a2, (unsigned int)a3, 0, 0, a2, (unsigned int)a3); v6 = (volatile LONG *)operator new(0xC4u); a3 = v6; if ( v6 ) v4 = sub_868C00(v6, (int)v5); v7 = v3[99]; if ( (_DWORD *)v7 != v4 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3[99] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v8 = (volatile LONG *)operator new(0x44u); a3 = v8; if ( v8 ) v9 = sub_863BB0(v8); else v9 = 0; v10 = v3[100]; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v3[100] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v11 = v3[100]; v12 = **(_DWORD ***)(v11 + 40); if ( !v12 ) { v13 = (volatile LONG *)operator new(0x18u); a3 = v13; if ( v13 ) v14 = sub_863940(v13); else v14 = 0; v12 = v14; a3 = v14; sub_823870((_DWORD *)(v11 + 36), 0, &a3); } v15 = v12[1]; if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v12[1] = 0; } sub_45C760((_DWORD **)v3[100], 0); *(_DWORD *)(v3[100] + 28) = 2; sub_470EE0((_DWORD **)v3[100], 0); v16 = (volatile LONG *)v3[100]; v17 = v3[99]; a3 = v16; if ( v16 ) InterlockedIncrement(v16 + 1); sub_8A6330((_DWORD *)(v17 + 156), (int *)&a3); if ( v16 && !InterlockedDecrement(v16 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); v18 = (volatile LONG *)operator new(0x20u); v19 = v18; a3 = v18; if ( v18 ) { sub_85B2B0(v18); *v19 = (volatile LONG)&NiAlphaProperty::`vftable'; *((_WORD *)v19 + 14) = 236; *((_BYTE *)v19 + 30) = 0; } else { v19 = 0; } *((_WORD *)v19 + 14) |= 1u; v21 = v3[99]; a3 = v19; InterlockedIncrement(v19 + 1); sub_8A6330((_DWORD *)(v21 + 156), (int *)&a3); if ( !InterlockedDecrement(v19 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v3 + 116))(v3, v3[99], 0); return sub_85C4D0(v3); } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005D6780) -------------------------------------------------------- int __thiscall sub_5D6780(void **this) { void **v1; // esi float v2; // edi volatile LONG *v3; // ebx float v4; // eax _DWORD *v5; // eax volatile LONG *v6; // edi _DWORD *v7; // eax float v8; // eax float v9; // edi float v10; // eax volatile LONG *v11; // edi _DWORD *v12; // edi _DWORD *v13; // eax _DWORD *v14; // eax volatile LONG *v15; // ebx volatile LONG *v16; // edi _DWORD *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // edi volatile LONG *v20; // eax volatile LONG *v21; // edi float v23; // [esp+40h] [ebp-34h] float v24; // [esp+44h] [ebp-30h] float v25; // [esp+48h] [ebp-2Ch] float v26; // [esp+4Ch] [ebp-28h] void *v27; // [esp+50h] [ebp-24h] void *v28; // [esp+54h] [ebp-20h] void *v29; // [esp+58h] [ebp-1Ch] void *v30; // [esp+5Ch] [ebp-18h] float v31; // [esp+60h] [ebp-14h] float v32; // [esp+64h] [ebp-10h] int v33; // [esp+70h] [ebp-4h] v1 = this; v31 = 0.0 / 255.0; v32 = v31; v2 = COERCE_FLOAT(operator new(0xC4u)); *(float *)&v29 = v2; v3 = 0; v33 = 0; if ( v2 != 0.0 ) { v4 = COERCE_FLOAT(operator new(0x70u)); *(float *)&v30 = v4; LOBYTE(v33) = 1; if ( v4 == 0.0 ) v5 = 0; else v5 = sub_868440((_DWORD *)LODWORD(v4), 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v33) = 0; v3 = sub_868C00((_DWORD *)LODWORD(v2), (int)v5); } v6 = (volatile LONG *)v1[109]; v33 = -1; if ( v6 != v3 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); v1[109] = (void *)v3; if ( v3 ) InterlockedIncrement(v3 + 1); } sub_867880(*((_WORD **)v1[109] + 46), 4, 0, 0); sub_867E60(*((_DWORD *)v1[109] + 46), 0, 0.0, 0.0, 32.0, 32.0); v7 = v1[109]; v23 = 1.0; v24 = 1.0; v25 = v32; v26 = 0.50196081; sub_867FF0(v7[46], 0, &v23); v8 = COERCE_FLOAT(operator new(0x20u)); v9 = v8; *(float *)&v29 = v8; v33 = 2; if ( v8 == 0.0 ) { v9 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v8)); *(_DWORD *)LODWORD(v9) = &NiAlphaProperty::`vftable'; *(_WORD *)(LODWORD(v9) + 28) = 236; *(_BYTE *)(LODWORD(v9) + 30) = 0; } *(_WORD *)(LODWORD(v9) + 28) |= 1u; v30 = v1[109]; v32 = v9; InterlockedIncrement((volatile LONG *)(LODWORD(v9) + 4)); v33 = 3; sub_8A6330((_DWORD *)v30 + 39, (int *)&v32); v33 = -1; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v9) + 4)) ) (**(void (__thiscall ***)(float, signed int))LODWORD(v9))(COERCE_FLOAT(LODWORD(v9)), 1); v10 = COERCE_FLOAT(operator new(0x28u)); *(float *)&v11 = v10; *(float *)&v29 = v10; v33 = 4; if ( v10 == 0.0 ) { *(float *)&v11 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v10)); *v11 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v11 + 14) = 0; *((_DWORD *)v11 + 8) = 0; *((_DWORD *)v11 + 9) = 1; } *((_DWORD *)v11 + 9) = 0; *((_DWORD *)v11 + 8) = 1; v32 = *((float *)v1 + 109); v30 = (void *)v11; InterlockedIncrement(v11 + 1); v33 = 5; sub_8A6330((_DWORD *)(LODWORD(v32) + 156), (int *)&v30); v33 = -1; if ( !InterlockedDecrement(v11 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v11)(v11, 1); sub_867680(*((_DWORD *)v1[109] + 46)); sub_85C4D0(v1[109]); sub_85BED0((_DWORD **)v1[109], 0.0, 1); (*((void (__thiscall **)(void **, void *, _DWORD))*v1 + 29))(v1, v1[109], 0); sub_85C4D0(v1); sub_85BED0((_DWORD **)v1, 0.0, 1); *(float *)&v30 = v31; v32 = v31; *(float *)&v29 = v31; v12 = operator new(0xC4u); v28 = v12; v33 = 6; if ( v12 ) { v13 = operator new(0x70u); v27 = v13; LOBYTE(v33) = 7; if ( v13 ) { v14 = sub_868440(v13, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v33) = 6; v15 = sub_868C00(v12, (int)v14); } else { LOBYTE(v33) = 6; v15 = sub_868C00(v12, 0); } } else { v15 = 0; } v16 = (volatile LONG *)v1[110]; v33 = -1; if ( v16 != v15 ) { if ( v16 && !InterlockedDecrement(v16 + 1) && v16 ) (**(void (__thiscall ***)(void *, signed int))v16)((void *)v16, 1); v1[110] = (void *)v15; if ( v15 ) InterlockedIncrement(v15 + 1); } sub_867880(*((_WORD **)v1[110] + 46), 4, 0, 0); sub_867E60(*((_DWORD *)v1[110] + 46), 0, 0.0, 0.0, 32.0, 32.0); v17 = v1[110]; v23 = *(float *)&v30; v24 = v31; v25 = v32; v26 = *(float *)&v29; sub_867FF0(v17[46], 0, &v23); v18 = (volatile LONG *)operator new(0x20u); v19 = v18; v27 = (void *)v18; v33 = 8; if ( v18 ) { sub_85B2B0(v18); *v19 = (volatile LONG)&NiAlphaProperty::`vftable'; *((_WORD *)v19 + 14) = 236; *((_BYTE *)v19 + 30) = 0; } else { *(float *)&v19 = 0.0; } *((_WORD *)v19 + 14) |= 1u; v30 = v1[110]; v29 = (void *)v19; InterlockedIncrement(v19 + 1); v33 = 9; sub_8A6330((_DWORD *)v30 + 39, (int *)&v29); v33 = -1; if ( !InterlockedDecrement(v19 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v19)(v19, 1); v20 = (volatile LONG *)operator new(0x28u); v21 = v20; v27 = (void *)v20; v33 = 10; if ( v20 ) { sub_85B2B0(v20); *v21 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v21 + 14) = 0; *((_DWORD *)v21 + 8) = 0; *((_DWORD *)v21 + 9) = 1; } else { *(float *)&v21 = 0.0; } *((_DWORD *)v21 + 9) = 0; *((_DWORD *)v21 + 8) = 1; v30 = v1[110]; v29 = (void *)v21; InterlockedIncrement(v21 + 1); v33 = 11; sub_8A6330((_DWORD *)v30 + 39, (int *)&v29); v33 = -1; if ( !InterlockedDecrement(v21 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v21)(v21, 1); sub_867680(*((_DWORD *)v1[110] + 46)); sub_85C4D0(v1[110]); sub_85BED0((_DWORD **)v1[110], 0.0, 1); (*((void (__thiscall **)(void **, void *, _DWORD))*v1 + 29))(v1, v1[110], 0); sub_85C4D0(v1); return sub_85BED0((_DWORD **)v1, 0.0, 1); } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005D6D00) -------------------------------------------------------- void **__thiscall sub_5D6D00(void **this) { void **v1; // esi volatile LONG *v2; // edi v1 = this; sub_5D35C0(this); *v1 = &ItemIcon::`vftable'; v1[58] = &ItemIcon::`vftable'; v1[96] = 0; v1[99] = 0; v1[100] = 0; Concurrency::details::_ReaderWriterLock::_ReaderWriterLock((Concurrency::details::_ReaderWriterLock *)(v1 + 101)); sub_5D3360(v1 + 104); v1[109] = 0; v1[110] = 0; sub_5D3C10(v1 + 101, v1); sub_5D4380(v1, 0x20u, (volatile LONG *)0x20); sub_5D64C0(v1, 0x20u, (volatile LONG *)0x20); sub_5D3980(v1 + 104, v1); *((_BYTE *)v1 + 432) = 0; v1[95] = 0; v2 = (volatile LONG *)v1[96]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); v1[96] = 0; } v1[98] = (void *)-1; *((_WORD *)v1 + 194) = 1; *((_BYTE *)v1 + 444) = 1; return v1; } // 9E4BE0: using guessed type void *ItemIcon::`vftable'; // 9E4BFC: using guessed type void *ItemIcon::`vftable'; //----- (005D6E20) -------------------------------------------------------- volatile LONG *__cdecl sub_5D6E20(int a1, int a2, int a3) { void *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x1C0u); v7 = v3; v8 = 0; if ( v3 ) v4 = (volatile LONG *)sub_5D6D00((void **)v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 612))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (005D6F60) -------------------------------------------------------- _DWORD *__thiscall sub_5D6F60(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[95]; return result; } //----- (005D6F80) -------------------------------------------------------- __int16 __thiscall sub_5D6F80(_WORD *this) { return this[200]; } //----- (005D7060) -------------------------------------------------------- int __thiscall sub_5D7060(unsigned __int16 *this, int a2) { sub_6BFA60(a2, this[200]); return a2; } //----- (005D7080) -------------------------------------------------------- int __thiscall sub_5D7080(_DWORD *this, char a2) { int v2; // eax int v3; // eax int v4; // eax int result; // eax v2 = this[96]; if ( v2 ) { if ( a2 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; else *(_WORD *)(v2 + 28) |= 1u; } v3 = this[97]; if ( v3 ) { if ( a2 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; else *(_WORD *)(v3 + 28) |= 1u; } v4 = this[98]; if ( v4 ) { if ( a2 ) *(_WORD *)(v4 + 28) &= 0xFFFEu; else *(_WORD *)(v4 + 28) |= 1u; } result = this[99]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; } return result; } //----- (005D7110) -------------------------------------------------------- int __thiscall sub_5D7110(_DWORD *this, float a2, float a3, float a4, float a5) { _DWORD *v5; // esi int result; // eax float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v5 = this; result = this[101]; if ( result ) { v7 = a2 / 255.0; v8 = a3 / 255.0; v9 = a4 / 255.0; v10 = a5 / 255.0; sub_867FF0(*(_DWORD *)(result + 184), 0, &v7); sub_867680(*(_DWORD *)(v5[101] + 184)); sub_85C4D0((_DWORD *)v5[101]); sub_85BED0((_DWORD **)v5[101], 0.0, 1); sub_85C4D0(v5); result = sub_85BED0((_DWORD **)v5, 0.0, 1); } return result; } //----- (005D71B0) -------------------------------------------------------- int __thiscall sub_5D71B0(_DWORD *this, float a2, float a3, float a4, float a5) { _DWORD *v5; // esi int result; // eax float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v5 = this; result = this[102]; if ( result ) { v7 = a2 / 255.0; v8 = a3 / 255.0; v9 = a4 / 255.0; v10 = a5 / 255.0; sub_867FF0(*(_DWORD *)(result + 184), 0, &v7); sub_867680(*(_DWORD *)(v5[102] + 184)); sub_85C4D0((_DWORD *)v5[102]); result = sub_85BED0((_DWORD **)v5[102], 0.0, 1); } return result; } //----- (005D7230) -------------------------------------------------------- int __thiscall sub_5D7230(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax v2 = this; sub_5D3110(this, a2); v3 = v2[101]; if ( v3 ) { if ( a2 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; else *(_WORD *)(v3 + 28) |= 1u; } v4 = v2[102]; if ( v4 ) { if ( !a2 ) { *(_WORD *)(v4 + 28) |= 1u; return sub_5D7080(v2, 0); } *(_WORD *)(v4 + 28) &= 0xFFFEu; } return sub_5D7080(v2, a2); } //----- (005D74F0) -------------------------------------------------------- LONG __thiscall sub_5D74F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // ecx int v4; // edx int v5; // esi int v6; // esi int v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = this; *this = &SkillIcon::`vftable'; this[58] = &SkillIcon::`vftable'; v2 = (_DWORD *)dword_AB1740; v9 = 2; if ( dword_AB1740 ) { while ( 1 ) { v3 = v2 + 2; v4 = (int)v2; v2 = (_DWORD *)*v2; if ( v1 == (_DWORD *)*v3 ) break; if ( !v2 ) goto LABEL_4; } } else { LABEL_4: v4 = 0; } v8 = v4; if ( v4 ) sub_403620(&off_AB173C, (_DWORD **)&v8); v5 = v1[102]; LOBYTE(v9) = 1; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[101]; LOBYTE(v9) = 0; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v9 = -1; return sub_5D3FC0(v1); } // 9E4EFC: using guessed type void *SkillIcon::`vftable'; // 9E4F1C: using guessed type void *SkillIcon::`vftable'; // AB173C: using guessed type int (__thiscall **off_AB173C)(void *, char); // AB1740: using guessed type int dword_AB1740; //----- (005D75E0) -------------------------------------------------------- char __thiscall sub_5D75E0(_DWORD *this, int a2, int a3, _DWORD *a4) { int v4; // esi char result; // al int v6; // eax int v7; // edi volatile LONG *v8; // eax float *v9; // ecx _DWORD *v10; // eax v4 = (int)this; result = sub_907E00(this, a2, a3, 32, 32, a4, 0, 0); if ( result ) { v6 = sub_43D0D0(7u); v7 = v6; if ( v6 ) { *(_DWORD *)(v4 + 384) = sub_90CC80(0, 0, v6, 0, 0, 0, 16, 4, v4, 2, 0, 0); *(_DWORD *)(v4 + 388) = sub_90CC80(28, 0, v7, 0, 16, 0, 4, 16, v4, 3, 0, 0); *(_DWORD *)(v4 + 392) = sub_90CC80(0, 16, v7, 0, 20, 0, 4, 16, v4, 1, 0, 0); v8 = sub_90CC80(16, 28, v7, 0, 0, 4, 16, 4, v4, 0, 0, 0); v9 = *(float **)(v4 + 384); *(_DWORD *)(v4 + 396) = v8; sub_4F39A0(v9, 1.0, 0.0); sub_4F39A0(*(float **)(v4 + 388), 1.0, 0.0); sub_4F39A0(*(float **)(v4 + 392), 1.0, 0.0); sub_4F39A0(*(float **)(v4 + 396), 1.0, 0.0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 384) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 388) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 392) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 396) + 240))(0); v10 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB173C[1])(&off_AB173C); v10[2] = v4; *v10 = 0; v10[1] = dword_AB1744; if ( dword_AB1744 ) { *(_DWORD *)dword_AB1744 = v10; ++dword_AB1748; } else { ++dword_AB1748; dword_AB1740 = (int)v10; } dword_AB1744 = (int)v10; result = 1; } else { result = 0; } } return result; } // AB173C: using guessed type int (__thiscall **off_AB173C)(void *, char); // AB1740: using guessed type int dword_AB1740; // AB1744: using guessed type int dword_AB1744; // AB1748: using guessed type int dword_AB1748; //----- (005D77C0) -------------------------------------------------------- void __thiscall sub_5D77C0(int this, int a2) { char v2; // dh _DWORD *v3; // esi float *v4; // ecx double v5; // st7 double v6; // st7 float *v7; // ecx double v8; // st6 double v9; // st7 float *v10; // ecx double v11; // st6 double v12; // st7 float *v13; // ecx double v14; // st6 double v15; // st7 float v16; // [esp+4h] [ebp-4h] float v17; // [esp+4h] [ebp-4h] float v18; // [esp+4h] [ebp-4h] float v19; // [esp+4h] [ebp-4h] v2 = BYTE1(a2); v3 = (_DWORD *)this; *(_BYTE *)(this + 382) = BYTE2(a2); *(_WORD *)(this + 380) = a2; *(_BYTE *)(this + 383) = HIBYTE(a2); v4 = *(float **)(this + 384); v16 = (double)((_BYTE)a2 != 0) + (double)(char)a2 * 3.0; v5 = 16.0; if ( 16.0 != v4[76] || v16 != v4[75] ) { v6 = v16; v4[76] = 16.0; v4[75] = *(float *)&v6; sub_49F670(v4); v2 = BYTE1(a2); v5 = 16.0; } v7 = (float *)v3[97]; v17 = (double)(v2 != 0) + (double)v2 * 3.0; if ( v5 != v7[76] || v17 != v7[75] ) { v8 = v5; v9 = v17; v7[76] = v8; v7[75] = *(float *)&v9; sub_49F670(v7); v5 = 16.0; } v10 = (float *)v3[98]; v18 = (double)(BYTE2(a2) != 0) + (double)SBYTE2(a2) * 3.0; if ( v5 != v10[76] || v18 != v10[75] ) { v11 = v5; v12 = v18; v10[76] = v11; v10[75] = *(float *)&v12; sub_49F670(v10); v5 = 16.0; } v13 = (float *)v3[99]; v19 = (double)(HIBYTE(a2) != 0) + (double)SHIBYTE(a2) * 3.0; if ( v5 != v13[76] || v19 != v13[75] ) { v14 = v5; v15 = v19; v13[76] = v14; v13[75] = *(float *)&v15; sub_49F670(v13); } } //----- (005D79E0) -------------------------------------------------------- void sub_5D79E0() { _DWORD *v0; // esi int v1; // edi int v2; // [esp+4h] [ebp-4h] v0 = (_DWORD *)dword_AB1740; if ( dword_AB1740 ) { do { v1 = v0[2]; v0 = (_DWORD *)*v0; sub_6BFA60((int)&v2, *(_WORD *)(v1 + 400)); sub_5D77C0(v1, v2); } while ( v0 ); } } // AB1740: using guessed type int dword_AB1740; //----- (005D7A30) -------------------------------------------------------- _DWORD *__thiscall sub_5D7A30(_DWORD *this) { _DWORD *v1; // esi float v2; // edi float v3; // eax _DWORD *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // edi int v7; // eax float v8; // eax float v9; // edi float v10; // eax float v11; // edi int v12; // eax int v13; // edi char *v14; // eax _DWORD *v15; // eax int v16; // eax float v17; // eax int v18; // edi _DWORD *v19; // ecx _DWORD *v20; // edi _DWORD *v21; // eax _DWORD *v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // edi int v25; // eax _DWORD *v26; // eax int v27; // edi _DWORD *v28; // ecx _DWORD *v29; // eax _WORD *v30; // edi int v31; // eax _DWORD *v32; // ecx void (__thiscall ***v33)(_DWORD, signed int); // edi float v35; // [esp+38h] [ebp-3Ch] float v36; // [esp+3Ch] [ebp-38h] float v37; // [esp+40h] [ebp-34h] float v38; // [esp+44h] [ebp-30h] void *v39; // [esp+48h] [ebp-2Ch] _DWORD *v40; // [esp+4Ch] [ebp-28h] void *v41; // [esp+50h] [ebp-24h] void *v42; // [esp+54h] [ebp-20h] float v43; // [esp+58h] [ebp-1Ch] int v44; // [esp+5Ch] [ebp-18h] float v45; // [esp+60h] [ebp-14h] void *v46; // [esp+64h] [ebp-10h] int v47; // [esp+70h] [ebp-4h] v1 = this; v40 = this; sub_5D35C0(this); *v1 = &SkillIcon::`vftable'; v1[58] = &SkillIcon::`vftable'; v47 = 0; v1[101] = 0; v1[102] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; *((_WORD *)v1 + 200) = -1; v1[95] = 0; v43 = 0.0 / 255.0; v45 = v43; v2 = COERCE_FLOAT(operator new(0xC4u)); *(float *)&v41 = v2; LOBYTE(v47) = 3; if ( v2 == 0.0 ) { v46 = 0; v5 = 0; } else { v3 = COERCE_FLOAT(operator new(0x70u)); *(float *)&v42 = v3; LOBYTE(v47) = 4; if ( v3 == 0.0 ) { LOBYTE(v47) = 3; v5 = sub_868C00((_DWORD *)LODWORD(v2), 0); } else { v4 = sub_868440((_DWORD *)LODWORD(v3), 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v47) = 3; v5 = sub_868C00((_DWORD *)LODWORD(v2), (int)v4); } v46 = (void *)v5; } v6 = (volatile LONG *)v1[101]; LOBYTE(v47) = 2; if ( v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v5 = (volatile LONG *)v46; } v1[101] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } sub_867880(*(_WORD **)(v1[101] + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v1[101] + 184), 0, 0.0, 0.0, 32.0, 32.0); v7 = v1[101]; v35 = 1.0; v36 = 1.0; v37 = v45; v38 = 0.50196081; sub_867FF0(*(_DWORD *)(v7 + 184), 0, &v35); v8 = COERCE_FLOAT(operator new(0x20u)); v9 = v8; *(float *)&v41 = v8; LOBYTE(v47) = 5; if ( v8 == 0.0 ) { v9 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v8)); *(_DWORD *)LODWORD(v9) = &NiAlphaProperty::`vftable'; *(_WORD *)(LODWORD(v9) + 28) = 236; *(_BYTE *)(LODWORD(v9) + 30) = 0; } *(_WORD *)(LODWORD(v9) + 28) |= 1u; v46 = (void *)v1[101]; v45 = v9; InterlockedIncrement((volatile LONG *)(LODWORD(v9) + 4)); LOBYTE(v47) = 6; sub_8A6330((_DWORD *)v46 + 39, (int *)&v45); LOBYTE(v47) = 2; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v9) + 4)) ) (**(void (__thiscall ***)(float, signed int))LODWORD(v9))(COERCE_FLOAT(LODWORD(v9)), 1); v10 = COERCE_FLOAT(operator new(0x28u)); v11 = v10; *(float *)&v41 = v10; LOBYTE(v47) = 7; if ( v10 == 0.0 ) { v11 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v10)); *(_DWORD *)LODWORD(v11) = &NiVertexColorProperty::`vftable'; *(_WORD *)(LODWORD(v11) + 28) = 0; *(_DWORD *)(LODWORD(v11) + 32) = 0; *(_DWORD *)(LODWORD(v11) + 36) = 1; } *(_DWORD *)(LODWORD(v11) + 32) = 1; *(_DWORD *)(LODWORD(v11) + 36) = 0; v46 = (void *)v1[101]; v45 = v11; InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4)); LOBYTE(v47) = 8; sub_8A6330((_DWORD *)v46 + 39, (int *)&v45); LOBYTE(v47) = 2; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v11) + 4)) ) (**(void (__thiscall ***)(float, signed int))LODWORD(v11))(COERCE_FLOAT(LODWORD(v11)), 1); sub_867680(*(_DWORD *)(v1[101] + 184)); sub_85C4D0((_DWORD *)v1[101]); sub_85BED0((_DWORD **)v1[101], 0.0, 1); sub_85A860(v1, v1[101], 0); sub_85C4D0(v1); sub_85BED0((_DWORD **)v1, 0.0, 1); sub_5D4380(v1, 0x20u, (volatile LONG *)0x20); v12 = sub_85C050((_DWORD *)v1[83], 0); sub_4EAA40((_DWORD *)v1[83], v12); v44 = 0; v13 = dword_BA6BA0; LOBYTE(v47) = 9; if ( !byte_ACAD5C ) sub_420410(); v14 = (char *)sub_401410(byte_ACAB50, "Game\\IconMaterial.nif"); sub_8F66B0(v14, (int)&v44, v13); if ( v44 ) { v15 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v44 + 72))("Plane01"); v16 = sub_85C050(v15, 0); if ( v16 ) { sub_403700((_DWORD *)v1[83], v16); } else { v17 = COERCE_FLOAT(operator new(0x20u)); *(float *)&v18 = v17; *(float *)&v41 = v17; LOBYTE(v47) = 10; if ( v17 == 0.0 ) { *(float *)&v18 = 0.0; } else { sub_85B2B0((_DWORD *)LODWORD(v17)); *(_DWORD *)v18 = &NiAlphaProperty::`vftable'; *(_WORD *)(v18 + 28) = 236; *(_BYTE *)(v18 + 30) = 0; } v41 = (void *)v18; if ( *(float *)&v18 != 0.0 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); *(_WORD *)(v18 + 28) |= 1u; v19 = (_DWORD *)v1[83]; LOBYTE(v47) = 11; sub_403700(v19, v18); LOBYTE(v47) = 9; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); } *(float *)&v42 = v43; v45 = v43; *(float *)&v41 = v43; v20 = operator new(0xC4u); v46 = v20; LOBYTE(v47) = 12; if ( v20 ) { v21 = operator new(0x70u); v39 = v21; LOBYTE(v47) = 13; if ( v21 ) { v22 = sub_868440(v21, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v47) = 12; v23 = sub_868C00(v20, (int)v22); } else { LOBYTE(v47) = 12; v23 = sub_868C00(v20, 0); } v46 = (void *)v23; } else { v46 = 0; v23 = 0; } v24 = (volatile LONG *)v1[102]; LOBYTE(v47) = 9; if ( v24 != v23 ) { if ( v24 ) { if ( !InterlockedDecrement(v24 + 1) && v24 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v24)(v24, 1); v23 = (volatile LONG *)v46; } v1[102] = v23; if ( v23 ) InterlockedIncrement(v23 + 1); } sub_867880(*(_WORD **)(v1[102] + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v1[102] + 184), 0, 0.0, 0.0, 32.0, 32.0); v25 = v1[102]; v35 = v43; v36 = *(float *)&v42; v37 = v45; v38 = *(float *)&v41; sub_867FF0(*(_DWORD *)(v25 + 184), 0, &v35); v26 = operator new(0x20u); v27 = (int)v26; v39 = v26; LOBYTE(v47) = 14; if ( v26 ) { sub_85B2B0(v26); *(_DWORD *)v27 = &NiAlphaProperty::`vftable'; *(_WORD *)(v27 + 28) = 236; *(_BYTE *)(v27 + 30) = 0; } else { v27 = 0; } *(_WORD *)(v27 + 28) |= 1u; v28 = (_DWORD *)v1[102]; LOBYTE(v47) = 9; sub_403700(v28, v27); v29 = operator new(0x28u); v30 = v29; v39 = v29; LOBYTE(v47) = 15; if ( v29 ) { sub_85B2B0(v29); v30[14] = 0; *(_DWORD *)v30 = &NiVertexColorProperty::`vftable'; *((_DWORD *)v30 + 8) = 0; *((_DWORD *)v30 + 9) = 1; v31 = (int)v30; } else { v31 = 0; } *(_DWORD *)(v31 + 32) = 1; *(_DWORD *)(v31 + 36) = 0; v32 = (_DWORD *)v1[102]; LOBYTE(v47) = 9; sub_403700(v32, v31); sub_867680(*(_DWORD *)(v1[102] + 184)); sub_85C4D0((_DWORD *)v1[102]); sub_85BED0((_DWORD **)v1[102], 0.0, 1); sub_85A860(v1, v1[102], 0); sub_85C4D0(v1); sub_85BED0((_DWORD **)v1, 0.0, 1); LOBYTE(v47) = 2; if ( v44 ) { v33 = (void (__thiscall ***)(_DWORD, signed int))v44; if ( !InterlockedDecrement((volatile LONG *)(v44 + 4)) ) { if ( v33 ) (**v33)(v33, 1); } } } return v1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9E4EFC: using guessed type void *SkillIcon::`vftable'; // 9E4F1C: using guessed type void *SkillIcon::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005D80B0) -------------------------------------------------------- char __thiscall sub_5D80B0(_DWORD **this) { _DWORD **v1; // edi int v2; // eax int v3; // esi char *v4; // eax LONG v5; // eax _DWORD *v6; // eax int v7; // eax _DWORD *v8; // eax int v9; // esi _DWORD *v10; // ecx int (__thiscall ***v11)(_DWORD, signed int); // esi int v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] v1 = this; v2 = sub_85C050(this[83], 0); sub_4EAA40(v1[83], v2); v13 = 0; v3 = dword_BA6BA0; v14 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\IconMaterial.nif"); LOBYTE(v5) = sub_8F66B0(v4, (int)&v13, v3); if ( v13 ) { v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v13 + 72))("Plane01"); v7 = sub_85C050(v6, 0); if ( v7 ) { sub_403700(v1[83], v7); } else { v8 = operator new(0x20u); v9 = (int)v8; LOBYTE(v14) = 1; if ( v8 ) { sub_85B2B0(v8); *(_DWORD *)v9 = &NiAlphaProperty::`vftable'; *(_WORD *)(v9 + 28) = 236; *(_BYTE *)(v9 + 30) = 0; } else { v9 = 0; } if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); *(_WORD *)(v9 + 28) |= 1u; v10 = v1[83]; LOBYTE(v14) = 2; sub_403700(v10, v9); LOBYTE(v14) = 0; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } sub_85C4D0(v1); sub_85BED0(v1, 0.0, 1); LOBYTE(v5) = v13; v14 = -1; if ( v13 ) { v11 = (int (__thiscall ***)(_DWORD, signed int))v13; v5 = InterlockedDecrement((volatile LONG *)(v13 + 4)); if ( !v5 ) { if ( v11 ) LOBYTE(v5) = (**v11)(v11, 1); } } } return v5; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005D8230) -------------------------------------------------------- int __thiscall sub_5D8230(_DWORD **this) { _DWORD **v1; // edi int v2; // eax _DWORD *v3; // eax int v4; // esi _DWORD *v5; // ST1C_4 int v7; // [esp+20h] [ebp-10h] int v8; // [esp+2Ch] [ebp-4h] v1 = this; v2 = sub_85C050(this[83], 0); sub_4EAA40(v1[83], v2); v3 = operator new(0x20u); v4 = (int)v3; v8 = 0; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiAlphaProperty::`vftable'; *(_WORD *)(v4 + 28) = 236; *(_BYTE *)(v4 + 30) = 0; } else { v4 = 0; } *(_WORD *)(v4 + 28) |= 1u; v5 = v1[83]; v7 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 1; sub_8A6330(v5 + 39, &v7); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_85C4D0(v1); return sub_85BED0(v1, 0.0, 1); } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (005D8320) -------------------------------------------------------- void __thiscall sub_5D8320(_WORD *this, int a2) { int v2; // ebx _WORD *v3; // esi void (__thiscall *v4)(_WORD *, _DWORD); // eax int v5; // edi int *v6; // eax int v7; // edi float v8; // ST0C_4 float v9; // ST08_4 float v10; // ST04_4 int v11; // ST08_4 int v12; // eax void (__thiscall *v13)(_WORD *, signed int); // eax v2 = a2; v3 = this; this[200] = a2; if ( (_WORD)v2 == -1 ) { (*(void (__stdcall **)(_DWORD, signed int, signed int, signed int))(*(_DWORD *)this + 584))(0, -1, 32, 32); v4 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 240); v3[14] |= 1u; v4(v3, 0); } else { v5 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)v2); if ( *v6 ) { v7 = *v6; if ( *v6 ) { v8 = (double)*(unsigned int *)(v7 + 83); v9 = (double)*(unsigned int *)(v7 + 79); v10 = (double)*(unsigned int *)(v7 + 75); sub_5D7110(v3, v10, v9, v8, 255.0); v11 = *(_DWORD *)(v7 + 39); a2 = *(_DWORD *)v3; v12 = sub_42BF30(v7 + 43); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(a2 + 584))(v3, v12, v11, 32, 32); v13 = *(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v3 + 240); v3[14] &= 0xFFFEu; v13(v3, 1); if ( (unsigned __int16)v2 < 0x4E20u ) { sub_5D80B0((_DWORD **)v3); *(_WORD *)(*((_DWORD *)v3 + 101) + 28) &= 0xFFFEu; *(_WORD *)(*((_DWORD *)v3 + 102) + 28) &= 0xFFFEu; sub_6BFA60((int)&a2, v2); sub_5D77C0((int)v3, a2); } else { *(_WORD *)(*((_DWORD *)v3 + 101) + 28) |= 1u; *(_WORD *)(*((_DWORD *)v3 + 102) + 28) |= 1u; sub_5D8230((_DWORD **)v3); } } } } } } } // ACEA9C: using guessed type int dword_ACEA9C; //----- (005D84B0) -------------------------------------------------------- volatile LONG *__cdecl sub_5D84B0(int a1, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x19Cu); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_5D7A30(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 608))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (005D8600) -------------------------------------------------------- void *__thiscall sub_5D8600(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SkillIcon *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9E4ECC: using guessed type void *NiTListBase,SkillIcon *>::`vftable'; //----- (005D8630) -------------------------------------------------------- _DWORD *__thiscall sub_5D8630(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SkillIcon *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SkillIcon *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9E4ECC: using guessed type void *NiTListBase,SkillIcon *>::`vftable'; // 9E4EDC: using guessed type void *NiTPointerListBase,SkillIcon *>::`vftable'; //----- (005D86C0) -------------------------------------------------------- void *__thiscall sub_5D86C0(void *this, char a2) { void *v2; // esi v2 = this; sub_5D74F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005D8720) -------------------------------------------------------- int __thiscall sub_5D8720(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi v4 = this; (*(void (__stdcall **)(int))(*this[91] + 472))(a2); (*(void (__stdcall **)(int))(*v4[92] + 472))(a3); return (*(int (__stdcall **)(int))(*v4[93] + 472))(a4); } //----- (005D87F0) -------------------------------------------------------- char __thiscall sub_5D87F0(void *this) { int v1; // esi int v2; // edi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // edi char v10; // ST14_1 int v11; // ST18_4 int v12; // ST1C_4 int v13; // ST20_4 const CHAR *v14; // eax volatile LONG *v15; // edi char v16; // ST14_1 int v17; // ST18_4 int v18; // ST1C_4 int v19; // ST20_4 const CHAR *v20; // eax volatile LONG *v21; // edi void (__thiscall ***v22)(_DWORD, signed int); // esi int v23[5]; // [esp+1Ch] [ebp-2Ch] int v24; // [esp+30h] [ebp-18h] int v25; // [esp+34h] [ebp-14h] int v26; // [esp+38h] [ebp-10h] int v27; // [esp+44h] [ebp-4h] v1 = (int)this; v26 = 0; v2 = dword_BA6BA0; v27 = 0; v25 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\GuildChangeAttribute.nif"); sub_8F66B0(v3, (int)&v26, v2); if ( !v26 ) return 0; v4 = sub_8FB140(v26, (int)"Frame", (int)&v25, (int)&v24, 0); if ( !sub_8F1440((volatile LONG **)v1, 0, 0, (int)v4, 0, 0, (int)"GuildCombatPropensityChangeWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v26; v27 = -1; if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(v23); LOBYTE(v27) = 1; sub_455FF0(v23, v1); sub_456000(v23, v25, v24); sub_456380(v23, v26); sub_456820(v23, (int)"Panel01", 0); sub_456820(v23, (int)"Panel02", 0); v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v26, (int)"Theme", (int)&v25, (int)&v24, v7); else v8 = sub_8FB140(v26, (int)"Theme", (int)&v25, (int)&v24, 0); sub_8F3EB0(v25, v24, (int)v8, v1, 0, 0); *(_DWORD *)(v1 + 360) = sub_456760( v23, (int)"WinTitle", (int)&unk_9E519E, dword_AA8CB8, dword_AA8CBC, dword_AA8CC0, dword_AA8CC4, 5); *(_DWORD *)(v1 + 376) = sub_456E70(v23, 2, "RadioBox01", 0, 2); *(_DWORD *)(v1 + 380) = sub_456E70(v23, 3, "RadioBox02", 0, 2); v9 = sub_456B30(v23, 0, "Btn01", 0, 3); v10 = dword_AA8C68; v11 = dword_AA8C6C; v12 = dword_AA8C70; v13 = dword_AA8C74; v14 = sub_40C190(1331644831); sub_456040((int)v9, (int)v14, v10, v11, v12, v13, 5); v15 = sub_456B30(v23, 1, "Btn02", 0, 3); v16 = dword_AA8C68; v17 = dword_AA8C6C; v18 = dword_AA8C70; v19 = dword_AA8C74; v20 = sub_40C190(-2002610207); sub_456040((int)v15, (int)v20, v16, v17, v18, v19, 5); v21 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v26 + 72))("HelpLinkNor") ) sub_4563D0(v23, 4, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v21); *(_DWORD *)(v1 + 364) = sub_456980( v23, (int)"Text01", (int)"test", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v1 + 368) = sub_456980( v23, (int)"Text02", (int)"test2", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v1 + 372) = sub_456980( v23, (int)"Text03", (int)"test3", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v1 + 236))(v1, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v27) = 0; sub_4562E0(v23); v27 = -1; if ( v26 ) { v22 = (void (__thiscall ***)(_DWORD, signed int))v26; if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v22 ) (**v22)(v22, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005D8C00) -------------------------------------------------------- char __thiscall sub_5D8C00(volatile LONG *this) { volatile LONG *v1; // esi std::tr1 *v3; // [esp+0h] [ebp-4h] v1 = this; if ( *((_DWORD *)this + 102) && *((_DWORD *)this + 96) ) { if ( !*((_DWORD *)this + 102) ) std::tr1::_Xfunc(v3); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)this + 102) + 4))(*((_DWORD *)this + 96)); } return sub_8F2BC0(v1, 2, 0, 0); } //----- (005D8C90) -------------------------------------------------------- LONG __thiscall sub_5D8C90(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // ecx int v6; // edi int v7; // edi int v8; // edi v1 = this; *this = &GuildCombatPropensityChangeWin::`vftable'; this[58] = &GuildCombatPropensityChangeWin::`vftable'; v2 = this[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = v1[87]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[87] = 0; } v4 = v1[88]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[88] = 0; } v5 = v1[102]; if ( v5 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v5 + 12))(v5 != (_DWORD)(v1 + 98)); v1[102] = 0; } v6 = v1[88]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[87]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[86]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return sub_8F10F0(v1); } // 9E52A0: using guessed type void *GuildCombatPropensityChangeWin::`vftable'; // 9E52BC: using guessed type void *GuildCombatPropensityChangeWin::`vftable'; //----- (005D8E20) -------------------------------------------------------- char *__thiscall sub_5D8E20(int this, char a2, int a3, int a4, int a5, char *a6, int a7) { int v7; // esi char *result; // eax int v9; // ecx char *v10; // ecx int (__stdcall *v11)(int); // eax v7 = this + 392; result = &a2; if ( (char *)(this + 392) != &a2 ) { v9 = *(_DWORD *)(this + 408); if ( v9 ) { result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v9 + 12))(v9 != v7); *(_DWORD *)(v7 + 16) = 0; } v10 = a6; if ( !a6 ) { *(_DWORD *)(v7 + 16) = a6; goto LABEL_11; } v11 = **(int (__stdcall ***)(int))a6; if ( a6 == &a2 ) result = (char *)v11(v7); else result = (char *)v11(0); *(_DWORD *)(v7 + 16) = result; } v10 = a6; LABEL_11: if ( v10 ) result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v10 + 12))(v10 != &a2); return result; } //----- (005D8ED0) -------------------------------------------------------- char __thiscall sub_5D8ED0(int this, int a2, int a3) { int v3; // eax int v4; // edx int v5; // edx LOBYTE(v3) = a2; switch ( a2 ) { case 0: LOBYTE(v3) = sub_5D8C00((volatile LONG *)this); break; case 1: LOBYTE(v3) = sub_8F2BC0((volatile LONG *)this, 2, 0, 0); break; case 2: v4 = *(_DWORD *)(this + 376); *(_DWORD *)(this + 384) = 1; *(_BYTE *)(v4 + 380) = 1; v3 = *(_DWORD *)(this + 380); *(_BYTE *)(v3 + 380) = 0; break; case 3: v5 = *(_DWORD *)(this + 376); *(_DWORD *)(this + 384) = 2; *(_BYTE *)(v5 + 380) = 0; v3 = *(_DWORD *)(this + 380); *(_BYTE *)(v3 + 380) = 1; break; case 4: v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170((_DWORD *)v3, "GuildChangeAttribute"); break; default: return v3; } return v3; } //----- (005D8F90) -------------------------------------------------------- int sub_5D8F90() { void *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x1A0u); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { Concurrency::overwrite_buffer::overwrite_buffer(v0); *(_DWORD *)v1 = &GuildCombatPropensityChangeWin::`vftable'; *(_DWORD *)(v1 + 232) = &GuildCombatPropensityChangeWin::`vftable'; *(_DWORD *)(v1 + 344) = 0; *(_DWORD *)(v1 + 348) = 0; *(_DWORD *)(v1 + 352) = 0; *(_DWORD *)(v1 + 408) = 0; *(_DWORD *)(v1 + 384) = 0; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 540))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E52A0: using guessed type void *GuildCombatPropensityChangeWin::`vftable'; // 9E52BC: using guessed type void *GuildCombatPropensityChangeWin::`vftable'; //----- (005D9130) -------------------------------------------------------- int __cdecl sub_5D9130(int a1) { int result; // eax _DWORD *v2; // esi result = sub_5D8F90(); v2 = (_DWORD *)result; if ( result ) { (*(void (__stdcall **)(int))(**(_DWORD **)(result + 360) + 472))(a1); sub_8F82A0(&unk_BA6B10, v2); result = (int)v2; } return result; } //----- (005D9170) -------------------------------------------------------- void *__thiscall sub_5D9170(void *this, char a2) { void *v2; // esi v2 = this; sub_5D8C90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005D9230) -------------------------------------------------------- int __thiscall sub_5D9230(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; v2 = this[89]; v1[86] = 0; (*(void (**)(void))(*(_DWORD *)v2 + 468))(); (*(void (**)(void))(*(_DWORD *)v1[90] + 468))(); return (*(int (**)(void))(*(_DWORD *)v1[89] + 480))(); } //----- (005D92A0) -------------------------------------------------------- LONG __thiscall sub_5D92A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &GuildFoundWin::`vftable'; this[58] = &GuildFoundWin::`vftable'; v2 = this[90]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[89]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9E5678: using guessed type void *GuildFoundWin::`vftable'; // 9E5694: using guessed type void *GuildFoundWin::`vftable'; //----- (005D9350) -------------------------------------------------------- char __thiscall sub_5D9350(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf int v9; // ebx int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // ebx volatile LONG v17; // ST54_4 const CHAR *v18; // eax volatile LONG **v19; // ebx volatile LONG *v20; // ebx volatile LONG **v21; // ebx volatile LONG **v22; // ebx int v23; // eax int v24; // ebx int v25; // ST54_4 int v26; // eax volatile LONG *v27; // ebx volatile LONG v28; // ST54_4 const CHAR *v29; // eax volatile LONG **v30; // ebx volatile LONG *v31; // edx int v32; // ebx int v33; // ST54_4 int v34; // eax volatile LONG *v35; // ebx volatile LONG v36; // ST54_4 const CHAR *v37; // eax volatile LONG **v38; // ebx volatile LONG **v39; // ebx volatile LONG *v40; // eax int v41; // edx int v42; // eax int v43; // ebx volatile LONG v44; // ST54_4 const CHAR *v45; // eax int v46; // eax volatile LONG v47; // ST54_4 const CHAR *v48; // eax int v49; // eax volatile LONG v50; // ST54_4 const CHAR *v51; // eax int v52; // eax volatile LONG v53; // ST54_4 const CHAR *v54; // eax int v55; // eax volatile LONG v56; // ST54_4 const CHAR *v57; // eax int v58; // eax volatile LONG *v59; // edi volatile LONG v60; // ebx const CHAR *v61; // eax volatile LONG **v62; // eax volatile LONG *v63; // eax char v64; // bl volatile LONG **v65; // eax volatile LONG *v66; // eax int v67; // [esp+14h] [ebp-20h] int v68; // [esp+18h] [ebp-1Ch] int v69; // [esp+1Ch] [ebp-18h] int v70; // [esp+20h] [ebp-14h] int v71; // [esp+24h] [ebp-10h] int v72; // [esp+30h] [ebp-4h] int v73; // [esp+3Ch] [ebp+8h] volatile LONG *v74; // [esp+3Ch] [ebp+8h] volatile LONG *v75; // [esp+3Ch] [ebp+8h] volatile LONG *v76; // [esp+3Ch] [ebp+8h] volatile LONG *v77; // [esp+3Ch] [ebp+8h] volatile LONG *v78; // [esp+3Ch] [ebp+8h] v2 = (int)this; v69 = 0; v3 = dword_BA6BA0; v72 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildCreate.nif"); sub_8F66B0(v4, (int)&v69, v3); if ( !v69 ) return 0; v5 = sub_8FB140(v69, (int)"Frame", (int)&v70, (int)&v71, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildCreateWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v69; v72 = -1; if ( !v69 || InterlockedDecrement((volatile LONG *)(v69 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_8; } v9 = v71; v10 = v70; v73 = v71; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v69, (int)"Theme", (int)&v70, (int)&v71, v11); else v12 = sub_8FB140(v69, (int)"Theme", (int)&v70, (int)&v71, 0); sub_8F3EB0(v70 - v10, v71 - v9, (int)v12, v2, 0, 0); v13 = sub_8FB140(v69, (int)"Panel01", (int)&v70, (int)&v71, 0); sub_8F3EB0(v70 - v10, v71, (int)v13, v2, 0, 0); v14 = sub_8FB140(v69, (int)"Panel02", (int)&v70, (int)&v71, 0); sub_8F3EB0(v70 - v10, v71, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v69, (int)"WinTitle", &v70, &v71, &v67, &v68) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v69; v72 = -1; if ( !v69 || InterlockedDecrement((volatile LONG *)(v69 + 4)) ) return 0; v7 = v6 == 0; LABEL_8: if ( !v7 ) (**v6)(v6, 1); return 0; } v15 = sub_421050(0); v16 = sub_8F4A20(v70 - v10, v71, v67, v68, v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v16 + 468))(v16, &dword_AA8D98); v17 = *v16; v18 = sub_40C190(-1915428389); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v17 + 472))(v16, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v19 = sub_8FB140(v69, (int)"ClsNor", (int)&v70, (int)&v71, 0); sub_8FB650(v19, v69, (int)"ClsClick"); sub_8FB650(v19, v69, (int)"ClsOver"); sub_90C8D0(v70 - v10, v71 - v73, (int)v19, v2); v20 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v69 + 72))("HelpLinkNor") ) { v21 = sub_8FB140(v69, (int)"HelpLinkNor", (int)&v70, (int)&v71, v20); sub_8FB650(v21, v69, (int)"HelpLinkClick"); sub_8FB650(v21, v69, (int)"HelpLinkOver"); sub_8FE0F0(v70 - v10, v71 - v73, (int)v21, v2, 14, 0, 0); } v22 = sub_8FB140(v69, (int)"AddFrndNor", (int)&v70, (int)&v71, 0); sub_8FB650(v22, v69, (int)"AddFrndClick"); sub_8FB650(v22, v69, (int)"AddFrndOver"); sub_8FE0F0(v70 - v10, v71, (int)v22, v2, 10, 0, 0); v23 = *v22[9]; v24 = *(_DWORD *)(v23 + 24); v25 = *(_DWORD *)(v23 + 20); v26 = sub_421050(0); v27 = sub_8F4A20(v70 - v10, v71 + 1, v25, v24, v26, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v27; v29 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = sub_8FB140(v69, (int)"AddFrndNor01", (int)&v70, (int)&v71, 0); sub_8FB650(v30, v69, (int)"AddFrndClick01"); sub_8FB650(v30, v69, (int)"AddFrndOver01"); sub_8FE0F0(v70 - v10, v71, (int)v30, v2, 11, 0, 0); v31 = v30[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v70 - v10, v71 + 1, v33, v32, v34, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); v36 = *v35; v37 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v38 = sub_8FB140(v69, (int)"MyNmChNor", (int)&v70, (int)&v71, 0); sub_8FB650(v38, v69, (int)"MyNmChClick"); *(_DWORD *)(v2 + 348) = sub_465940(v70, v71, (int)v38, v2, 12, 0); v39 = sub_8FB140(v69, (int)"MyNmChNor01", (int)&v70, (int)&v71, 0); sub_8FB650(v39, v69, (int)"MyNmChClick01"); v40 = sub_465940(v70, v71, (int)v39, v2, 13, 0); v41 = v69; *(_DWORD *)(v2 + 352) = v40; if ( !sub_8F71E0(v41, (int)"Text01", &v70, &v71, &v67, &v68) ) goto LABEL_34; v42 = sub_421050(2); v43 = v73; v74 = sub_8F4A20(v70 - v10, v71 - v73, v67, v68, v42, v2, 0, 0); v44 = *v74; v45 = sub_40C190(941367612); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v74, v45); (*(void (__stdcall **)(_DWORD))(*v74 + 240))(0); if ( !sub_8F71E0(v69, (int)"Text03", &v70, &v71, &v67, &v68) ) goto LABEL_34; v46 = sub_421050(2); v75 = sub_8F4A20(v70 - v10, v71 - v43, v67, v68, v46, v2, 0, 0); v47 = *v75; v48 = sub_40C190(708468327); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v47 + 472))(v75, v48); (*(void (__stdcall **)(_DWORD))(*v75 + 240))(0); if ( !sub_8F71E0(v69, (int)"Text05", &v70, &v71, &v67, &v68) ) goto LABEL_34; v49 = sub_421050(2); v76 = sub_8F4A20(v70 - v10, v71 - v43, v67, v68, v49, v2, 0, 0); v50 = *v76; v51 = sub_40C190(-2104264543); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v76, v51); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); if ( !sub_8F71E0(v69, (int)"Text09", &v70, &v71, &v67, &v68) ) goto LABEL_34; v52 = sub_421050(2); v77 = sub_8F4A20(v70 - v10, v71 - v43, v67, v68, v52, v2, 0, 0); v53 = *v77; v54 = sub_40C190(2072890608); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v53 + 472))(v77, v54); (*(void (__stdcall **)(_DWORD))(*v77 + 240))(0); if ( !sub_8F71E0(v69, (int)"Text06", &v70, &v71, &v67, &v68) || (v55 = sub_421050(2), v78 = sub_8F4A20(v70 - v10, v71 - v43, v67, v68, v55, v2, 0, 0), v56 = *v78, v57 = sub_40C190(-1972080491), (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v56 + 472))(v78, v57), (*(void (__stdcall **)(_DWORD))(*v78 + 240))(0), !sub_8F71E0(v69, (int)"Text08", &v70, &v71, &v67, &v68)) ) { LABEL_34: v72 = -1; sub_410C00(&v69); return 0; } v58 = sub_421050(2); v59 = sub_8F4A20(v70 - v10, v71 - v43, v67, v68, v58, v2, 0, 0); v60 = *v59; v61 = sub_40C190(744972946); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v59, v61); *(_BYTE *)(*((_DWORD *)v59 + 72) + 284) = 1; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); LOBYTE(v60) = sub_8F71E0(v69, (int)"Text02", &v70, &v71, &v67, &v68); v62 = sub_8FB140(v69, (int)"Text02", (int)&v70, (int)&v71, 0); sub_8F3EB0(v70, v71, (int)v62, v2, 0, 0); if ( (_BYTE)v60 ) { v63 = sub_45A900(v70 + 2, v71 + 2, v67, v68, v2, 1342177280, 16, 3, 0, 0, 1); sub_56FF80((_DWORD *)(v2 + 356), (int)v63); } v64 = sub_8F71E0(v69, (int)"Text07", &v70, &v71, &v67, &v68); v65 = sub_8FB140(v69, (int)"Text07", (int)&v70, (int)&v71, 0); sub_8F3EB0(v70, v71, (int)v65, v2, 0, 0); if ( v64 ) { v66 = sub_45A900(v70 + 2, v71 + 2, v67, v68, v2, 1342177312, 8, 3, 0, 0, 1); sub_56FF80((_DWORD *)(v2 + 360), (int)v66); } *(_BYTE *)(*(_DWORD *)(v2 + 348) + 380) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 352) + 380) = 0; v72 = -1; sub_410C00(&v69); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005D9D20) -------------------------------------------------------- volatile LONG *__thiscall sub_5D9D20(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax char *v4; // edx char v5; // cl int v6; // ecx int v7; // eax char *v8; // edx char v9; // cl volatile LONG *result; // eax _DWORD **v11; // esi char *v12; // eax int v13; // [esp+8h] [ebp-50h] char *v14; // [esp+Ch] [ebp-4Ch] int v15; // [esp+10h] [ebp-48h] char v16[4]; // [esp+14h] [ebp-44h] int v17; // [esp+18h] [ebp-40h] int v18; // [esp+1Ch] [ebp-3Ch] int v19; // [esp+20h] [ebp-38h] char v20[4]; // [esp+24h] [ebp-34h] int v21; // [esp+28h] [ebp-30h] int v22; // [esp+2Ch] [ebp-2Ch] char v23; // [esp+30h] [ebp-28h] char v24[4]; // [esp+34h] [ebp-24h] int v25; // [esp+38h] [ebp-20h] int v26; // [esp+3Ch] [ebp-1Ch] int v27; // [esp+40h] [ebp-18h] char v28; // [esp+44h] [ebp-14h] char v29[4]; // [esp+48h] [ebp-10h] int v30; // [esp+4Ch] [ebp-Ch] char v31; // [esp+50h] [ebp-8h] v1 = this; v2 = this[89]; v19 = 0; v18 = 0; v17 = 0; *(_DWORD *)v16 = 0; v22 = 0; v21 = 0; *(_DWORD *)v20 = 0; *(_DWORD *)v24 = 0; v25 = 0; v26 = 0; v27 = 0; v28 = 0; v3 = (*(int (**)(void))(*(_DWORD *)v2 + 452))(); v4 = &v24[-v3]; do { v5 = *(_BYTE *)v3; v4[v3] = *(_BYTE *)v3; ++v3; } while ( v5 ); if ( sub_451A00((unsigned __int8 *)v24) || sub_4515F0(v24) ) { v12 = (char *)sub_40C190(849182339); result = sub_462CA0(1, v12); } else { v19 = 0; v18 = 0; v17 = 0; *(_DWORD *)v16 = 0; strncpy(v16, v24, 0x10u); v6 = v1[90]; *(_DWORD *)v29 = 0; v30 = 0; v31 = 0; v7 = (*(int (**)(void))(*(_DWORD *)v6 + 452))(); v8 = &v29[-v7]; do { v9 = *(_BYTE *)v7; v8[v7] = *(_BYTE *)v7; ++v7; } while ( v9 ); v22 = 0; v21 = 0; *(_DWORD *)v20 = 0; strncpy(v20, v29, 0xCu); result = (volatile LONG *)(strlen(v29) - 1); if ( (unsigned int)result <= 7 ) { if ( *(_BYTE *)(v1[87] + 380) ) v23 = 1; if ( *(_BYTE *)(v1[88] + 380) ) v23 = 0; v11 = (_DWORD **)(v1 + 58); v13 = 327709; v14 = v16; v15 = 29; if ( v11[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v11[1] + 4))(44, &v13, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v11[1] + 20))(44, &v13, v11); } result = (volatile LONG *)((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v11)[5])( v11, 44, &v13, v11); } } return result; } //----- (005D9EE0) -------------------------------------------------------- void __thiscall sub_5D9EE0(int this, int a2, int a3) { int v3; // esi int v4; // eax v3 = this; if ( a2 != 4 ) { v4 = *(_DWORD *)(this + 344); if ( v4 ) { if ( v4 == 1 ) { if ( a2 == 2 ) { (*(void (**)(void))(**(_DWORD **)(this + 356) + 480))(); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 360) + 488))(1); } else if ( a2 == 1 ) { sub_5D9D20((_DWORD *)this); } } } else { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 356) + 488))(1); (*(void (**)(void))(**(_DWORD **)(v3 + 360) + 480))(); } } } //----- (005D9F60) -------------------------------------------------------- char __thiscall sub_5D9F60(_DWORD *this, int a2, int a3) { int v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 10: LOBYTE(v3) = (unsigned int)sub_5D9D20(this); break; case 11: LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, this); break; case 12: v3 = this[87]; *(_BYTE *)(v3 + 380) = 1; *(_BYTE *)(this[88] + 380) = 0; break; case 13: *(_BYTE *)(this[87] + 380) = 0; v3 = this[88]; *(_BYTE *)(v3 + 380) = 1; break; case 14: v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170((_DWORD *)v3, "GuildCreate"); break; default: return v3; } return v3; } //----- (005DA010) -------------------------------------------------------- char __thiscall sub_5DA010(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (005DA070) -------------------------------------------------------- int __cdecl sub_5DA070(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildFoundWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildFoundWin::`vftable'; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E5678: using guessed type void *GuildFoundWin::`vftable'; // 9E5694: using guessed type void *GuildFoundWin::`vftable'; //----- (005DA1C0) -------------------------------------------------------- void *__thiscall sub_5DA1C0(void *this, char a2) { void *v2; // esi v2 = this; sub_5D92A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005DA290) -------------------------------------------------------- char sub_5DA290() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildMenu"); return (char)v0; } //----- (005DA2C0) -------------------------------------------------------- char __thiscall sub_5DA2C0(_DWORD **this, int a2, int a3) { char result; // al _DWORD **v4; // esi result = a2; switch ( a2 ) { case 6: v4 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*this[59] + 4))(45, 0, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v4[1] + 20))(45, 0, v4); } result = ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v4)[5])(v4, 45, 0, v4); break; case 12: result = sub_5DA290(); break; default: return result; } return result; } //----- (005DA350) -------------------------------------------------------- char __thiscall sub_5DA350(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // ebx volatile LONG *v15; // ebx volatile LONG **v16; // ebx void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // edx int v23; // ebx int v24; // eax volatile LONG *v25; // ebx const CHAR *v26; // eax volatile LONG **v27; // ebx volatile LONG *v28; // eax volatile LONG *v29; // ecx int v30; // ebx int v31; // eax volatile LONG *v32; // ebx const CHAR *v33; // eax volatile LONG **v34; // ebx volatile LONG *v35; // eax volatile LONG *v36; // ecx int v37; // ebx int v38; // eax volatile LONG *v39; // ebx const CHAR *v40; // eax volatile LONG **v41; // ebx volatile LONG *v42; // eax volatile LONG *v43; // ecx int v44; // ebx int v45; // eax volatile LONG *v46; // ebx const CHAR *v47; // eax volatile LONG **v48; // ebx volatile LONG *v49; // eax volatile LONG *v50; // ecx int v51; // ebx int v52; // eax volatile LONG *v53; // ebx const CHAR *v54; // eax volatile LONG **v55; // ebx volatile LONG *v56; // eax volatile LONG *v57; // ecx int v58; // ebx int v59; // eax volatile LONG *v60; // edi volatile LONG v61; // ebx const CHAR *v62; // eax void (__thiscall ***v63)(_DWORD, signed int); // esi int v64; // [esp+88h] [ebp-20h] int v65; // [esp+8Ch] [ebp-1Ch] int v66; // [esp+90h] [ebp-18h] int v67; // [esp+94h] [ebp-14h] int v68; // [esp+98h] [ebp-10h] int v69; // [esp+A4h] [ebp-4h] int v70; // [esp+B0h] [ebp+8h] volatile LONG v71; // [esp+B0h] [ebp+8h] int v72; // [esp+B0h] [ebp+8h] volatile LONG v73; // [esp+B0h] [ebp+8h] int v74; // [esp+B0h] [ebp+8h] volatile LONG v75; // [esp+B0h] [ebp+8h] int v76; // [esp+B0h] [ebp+8h] volatile LONG v77; // [esp+B0h] [ebp+8h] int v78; // [esp+B0h] [ebp+8h] volatile LONG v79; // [esp+B0h] [ebp+8h] int v80; // [esp+B0h] [ebp+8h] volatile LONG v81; // [esp+B0h] [ebp+8h] int v82; // [esp+B0h] [ebp+8h] v2 = this; v68 = 0; v3 = dword_BA6BA0; v69 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildMenu.nif"); sub_8F66B0(v4, (int)&v68, v3); if ( !v68 ) return 0; v5 = sub_8FB140(v68, (int)"Frame", (int)&v66, (int)&v67, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"GuildMasterMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v68; v69 = -1; if ( v68 && !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v67; v9 = v66; v70 = v67; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v68, (int)"Theme", (int)&v66, (int)&v67, v10); else v11 = sub_8FB140(v68, (int)"Theme", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66 - v9, v67 - v8, (int)v11, (int)v2, 0, 0); v12 = sub_8FB140(v68, (int)"Panel01", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66 - v9, v67, (int)v12, (int)v2, 0, 0); v13 = sub_8FB140(v68, (int)"Panel02", (int)&v66, (int)&v67, 0); sub_8F3EB0(v66 - v9, v67, (int)v13, (int)v2, 0, 0); v14 = sub_8FB140(v68, (int)"ClsNor", (int)&v66, (int)&v67, 0); sub_8FB650(v14, v68, (int)"ClsClick"); sub_8FB650(v14, v68, (int)"ClsOver"); sub_90C8D0(v66 - v9, v67 - v70, (int)v14, (int)v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v68 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v68, (int)"HelpLinkNor", (int)&v66, (int)&v67, v15); sub_8FB650(v16, v68, (int)"HelpLinkClick"); sub_8FB650(v16, v68, (int)"HelpLinkOver"); sub_8FE0F0(v66 - v9, v67 - v70, (int)v16, (int)v2, 12, 0, 0); } if ( sub_8F71E0(v68, (int)"WinTitle", &v66, &v67, &v64, &v65) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v66 - v9, v67, v64, v65, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v71 = *v19; v20 = sub_40C190(909982867); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v71 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v68, (int)"Btn01Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v21, v68, (int)"Btn01Click"); sub_8FB650(v21, v68, (int)"Btn01Over"); sub_8FE0F0(v66 - v9, v67, (int)v21, (int)v2, 6, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v72 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(0); v25 = sub_8F4A20(v66 - v9, v67 + 1, v72, v23, v24, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v73 = *v25; v26 = sub_40C190(-920306874); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v73 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v68, (int)"Btn02Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v27, v68, (int)"Btn02Click"); sub_8FB650(v27, v68, (int)"Btn03Over"); v28 = sub_8FE0F0(v66 - v9, v67, (int)v27, (int)v2, 7, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v29 = v27[9]; v30 = *(_DWORD *)(*v29 + 24); v74 = *(_DWORD *)(*v29 + 20); v31 = sub_421050(0); v32 = sub_8F4A20(v66 - v9, v67 + 1, v74, v30, v31, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v75 = *v32; v33 = sub_40C190(2105470940); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v75 + 472))(v32, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); v34 = sub_8FB140(v68, (int)"Btn03Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v34, v68, (int)"Btn03Click"); sub_8FB650(v34, v68, (int)"Btn03Over"); v35 = sub_8FE0F0(v66 - v9, v67, (int)v34, (int)v2, 8, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v36 = v34[9]; v37 = *(_DWORD *)(*v36 + 24); v76 = *(_DWORD *)(*v36 + 20); v38 = sub_421050(0); v39 = sub_8F4A20(v66 - v9, v67 + 1, v76, v37, v38, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); v77 = *v39; v40 = sub_40C190(-1965692446); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v77 + 472))(v39, v40); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v41 = sub_8FB140(v68, (int)"Btn04Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v41, v68, (int)"Btn04Click"); sub_8FB650(v41, v68, (int)"Btn04Over"); v42 = sub_8FE0F0(v66 - v9, v67, (int)v41, (int)v2, 9, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v43 = v41[9]; v44 = *(_DWORD *)(*v43 + 24); v78 = *(_DWORD *)(*v43 + 20); v45 = sub_421050(0); v46 = sub_8F4A20(v66 - v9, v67 + 1, v78, v44, v45, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v46 + 488))(v46, 5); v79 = *v46; v47 = sub_40C190(-2100568862); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v79 + 472))(v46, v47); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v46 + 240))(v46, 0); v48 = sub_8FB140(v68, (int)"Btn05Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v48, v68, (int)"Btn05Click"); sub_8FB650(v48, v68, (int)"Btn05Over"); v49 = sub_8FE0F0(v66 - v9, v67, (int)v48, (int)v2, 10, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v50 = v48[9]; v51 = *(_DWORD *)(*v50 + 24); v80 = *(_DWORD *)(*v50 + 20); v52 = sub_421050(0); v53 = sub_8F4A20(v66 - v9, v67 + 1, v80, v51, v52, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 5); v81 = *v53; v54 = sub_40C190(-758520602); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v81 + 472))(v53, v54); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v53 + 240))(v53, 0); v55 = sub_8FB140(v68, (int)"Btn06Nor", (int)&v66, (int)&v67, 0); sub_8FB650(v55, v68, (int)"Btn06Click"); sub_8FB650(v55, v68, (int)"Btn06Over"); v56 = sub_8FE0F0(v66 - v9, v67, (int)v55, (int)v2, 11, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v56 + 240))(v56, 0); v57 = v55[9]; v58 = *(_DWORD *)(*v57 + 24); v82 = *(_DWORD *)(*v57 + 20); v59 = sub_421050(0); v60 = sub_8F4A20(v66 - v9, v67 + 1, v82, v58, v59, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 488))(v60, 5); v61 = *v60; v62 = sub_40C190(-722784489); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v61 + 472))(v60, v62); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v60 + 240))(v60, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v69 = -1; if ( v68 ) { v63 = (void (__thiscall ***)(_DWORD, signed int))v68; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) { if ( v63 ) (**v63)(v63, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v68; v69 = -1; if ( v68 && !InterlockedDecrement((volatile LONG *)(v68 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005DAC00) -------------------------------------------------------- int __cdecl sub_5DAC00(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildMasterMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildMasterMenuWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E5A4C: using guessed type void *GuildMasterMenuWin::`vftable'; // 9E5A6C: using guessed type void *GuildMasterMenuWin::`vftable'; //----- (005DAD40) -------------------------------------------------------- void *__thiscall sub_5DAD40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildMasterMenuWin::`vftable'; *((_DWORD *)this + 58) = &GuildMasterMenuWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E5A4C: using guessed type void *GuildMasterMenuWin::`vftable'; // 9E5A6C: using guessed type void *GuildMasterMenuWin::`vftable'; //----- (005DADF0) -------------------------------------------------------- _DWORD *__thiscall sub_5DADF0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildMenuWin::`vftable'; v1[58] = &GuildMenuWin::`vftable'; v1[86] = 0; v1[87] = 0; v2 = v1[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E5D80: using guessed type void *GuildMenuWin::`vftable'; // 9E5D9C: using guessed type void *GuildMenuWin::`vftable'; //----- (005DAE90) -------------------------------------------------------- LONG __thiscall sub_5DAE90(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &GuildMenuWin::`vftable'; this[58] = &GuildMenuWin::`vftable'; v2 = this[87]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[86]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9E5D80: using guessed type void *GuildMenuWin::`vftable'; // 9E5D9C: using guessed type void *GuildMenuWin::`vftable'; //----- (005DAF40) -------------------------------------------------------- int __thiscall sub_5DAF40(_DWORD **this) { _DWORD **v1; // edi const char *v2; // eax int v3; // esi const char *v4; // ST08_4 const CHAR *v5; // eax char *v6; // eax v1 = this; v2 = "(O)"; if ( !byte_B92027 ) v2 = "(X)"; v3 = *this[88]; v4 = v2; v5 = sub_40C190(443905921); v6 = sub_7549E0("%s%s", v5, v4); return (*(int (__thiscall **)(_DWORD *, char *))(v3 + 472))(v1[88], v6); } // B92027: using guessed type char byte_B92027; //----- (005DAF90) -------------------------------------------------------- char __thiscall sub_5DAF90(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax char *v3; // eax char result; // al v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v2) ) { (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*v1[87] + 236))(xRight, dword_AC2F78, 0.5, 0.5); result = sub_8F82A0(&unk_BA6B10, v1[87]); } else { v3 = (char *)sub_40C190(673398324); result = (unsigned int)sub_462C30(1, v3); } return result; } //----- (005DB010) -------------------------------------------------------- int __thiscall sub_5DB010(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax int result; // eax int v5; // edi const CHAR *v6; // eax int v7; // [esp+0h] [ebp-8h] int v8; // [esp+0h] [ebp-8h] v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v2) == 1 ) { (*(void (__stdcall **)(signed int, int))(*v1[90] + 516))(10, v7); v8 = 739451169; } else { v3 = (_DWORD *)sub_6D3800(); result = sub_6D3010(v3); if ( (_BYTE)result != 1 ) return result; (*(void (__stdcall **)(signed int, int))(*v1[90] + 516))(6, v7); v8 = -1782523934; } v5 = *v1[97]; v6 = sub_40C190(v8); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v5 + 472))(v1[97], v6); (*(void (__stdcall **)(signed int))(*v1[89] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[96] + 256))(1); (*(void (__stdcall **)(signed int))(*v1[90] + 256))(1); return (*(int (__stdcall **)(signed int))(*v1[97] + 256))(1); } //----- (005DB0D0) -------------------------------------------------------- char __thiscall sub_5DB0D0(void *this, int a2) { int v2; // ebx int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // esi int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // edi volatile LONG **v16; // edi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // esi volatile LONG v20; // edi const CHAR *v21; // eax int v22; // esi int v23; // edi char *v24; // eax volatile LONG **v25; // edi int v26; // ST58_4 char *v27; // eax int v28; // ST58_4 char *v29; // eax volatile LONG *v30; // eax volatile LONG *v31; // ecx int v32; // edi int v33; // ST58_4 int v34; // eax volatile LONG *v35; // eax int *v36; // eax const char *v37; // ecx int v38; // esi const char *v39; // ST44_4 const CHAR *v40; // eax char *v41; // eax int v42; // eax int v43; // esi int v44; // edi int v45; // eax int v46; // esi int v47; // edi void (__thiscall ***v48)(_DWORD, signed int); // esi int v49; // [esp+5Ch] [ebp-28h] int v50; // [esp+60h] [ebp-24h] int v51; // [esp+64h] [ebp-20h] int v52; // [esp+68h] [ebp-1Ch] int v53; // [esp+6Ch] [ebp-18h] int v54; // [esp+70h] [ebp-14h] int v55; // [esp+74h] [ebp-10h] int v56; // [esp+80h] [ebp-4h] int v57; // [esp+8Ch] [ebp+8h] signed int v58; // [esp+8Ch] [ebp+8h] v2 = (int)this; v55 = 0; v3 = dword_BA6BA0; v56 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildMenu.nif"); sub_8F66B0(v4, (int)&v55, v3); if ( !v55 ) return 0; v5 = sub_8FB140(v55, (int)"Frame", (int)&v53, (int)&v54, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v55; v56 = -1; if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v53; v9 = v54; v52 = v53; v57 = v54; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v55, (int)"Theme", (int)&v53, (int)&v54, v10); else v11 = sub_8FB140(v55, (int)"Theme", (int)&v53, (int)&v54, 0); sub_8F3EB0(v53 - v8, v54 - v9, (int)v11, v2, 0, 0); v12 = sub_8FB140(v55, (int)"Panel01", (int)&v53, (int)&v54, 0); sub_8F3EB0(v53 - v8, v54, (int)v12, v2, 0, 0); v13 = sub_8FB140(v55, (int)"Panel02", (int)&v53, (int)&v54, 0); sub_8F3EB0(v53 - v8, v54, (int)v13, v2, 0, 0); v14 = sub_8FB140(v55, (int)"ClsNor", (int)&v53, (int)&v54, 0); sub_8FB650(v14, v55, (int)"ClsClick"); sub_8FB650(v14, v55, (int)"ClsOver"); sub_90C8D0(v53 - v8, v54 - v57, (int)v14, v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v55 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v55, (int)"HelpLinkNor", (int)&v53, (int)&v54, v15); sub_8FB650(v16, v55, (int)"HelpLinkClick"); sub_8FB650(v16, v55, (int)"HelpLinkOver"); sub_8FE0F0(v53 - v8, v54 - v57, (int)v16, v2, 9, 0, 0); } if ( sub_8F71E0(v55, (int)"WinTitle", &v53, &v54, &v49, &v50) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v53 - v8, v54, v49, v50, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v20 = *v19; v21 = sub_40C190(909982867); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v58 = 1; v22 = v2 + 384; v51 = 7; do { v23 = v55; v24 = sub_7549E0("Btn%02dNor", v58); v25 = sub_8FB140(v23, (int)v24, (int)&v53, (int)&v54, 0); v26 = v55; v27 = sub_7549E0("Btn%02dClick", v58); sub_8FB650(v25, v26, (int)v27); v28 = v55; v29 = sub_7549E0("Btn%02dOVer", v58); sub_8FB650(v25, v28, (int)v29); v30 = sub_8FE0F0(v53 - v52, v54, (int)v25, v2, 0, 0, 0); *(_DWORD *)(v22 - 28) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 256))(v30, 0); v31 = v25[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v53 - v52, v54 + 1, v33, v32, v34, v2, 0, 0); *(_DWORD *)v22 = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)v22 + 472))(&unk_9E5C9F); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0); ++v58; v22 += 4; --v51; } while ( v51 ); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 356) + 516))(7); v36 = *(int **)(v2 + 384); *(_DWORD *)(v2 + 352) = v36; v37 = "(O)"; if ( !byte_B92027 ) v37 = "(X)"; v38 = *v36; v39 = v37; v40 = sub_40C190(443905921); v41 = sub_7549E0("%s%s", v40, v39); (*(void (__thiscall **)(_DWORD, char *))(v38 + 472))(*(_DWORD *)(v2 + 352), v41); v42 = sub_5DA070(0); v43 = *(_DWORD *)(v2 + 344); v44 = v42; if ( v43 != v42 ) { if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v43 ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); *(_DWORD *)(v2 + 344) = v44; if ( v44 ) InterlockedIncrement((volatile LONG *)(v44 + 4)); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 344) + 232))(*(_DWORD *)(v2 + 344) + 232, v2 + 232); v45 = sub_5DAC00(0); v46 = *(_DWORD *)(v2 + 348); v47 = v45; if ( v46 != v45 ) { if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) && v46 ) (**(void (__thiscall ***)(int, signed int))v46)(v46, 1); *(_DWORD *)(v2 + 348) = v47; if ( v47 ) InterlockedIncrement((volatile LONG *)(v47 + 4)); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 348) + 232))(*(_DWORD *)(v2 + 348) + 232, v2 + 232); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v56 = -1; if ( v55 ) { v48 = (void (__thiscall ***)(_DWORD, signed int))v55; if ( !InterlockedDecrement((volatile LONG *)(v55 + 4)) ) { if ( v48 ) (**v48)(v48, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v55; v56 = -1; if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // B92027: using guessed type char byte_B92027; //----- (005DB6E0) -------------------------------------------------------- volatile LONG *__cdecl sub_5DB6E0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x19Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5DADF0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005DB810) -------------------------------------------------------- volatile LONG *sub_5DB810() { _DWORD *v0; // eax char *v1; // eax volatile LONG *result; // eax _DWORD *v3; // eax char *v4; // eax v0 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v0) ) { v3 = (_DWORD *)sub_6D3800(); if ( sub_6D30E0(v3) ) { result = (volatile LONG *)sub_4B2590(); } else { v4 = (char *)sub_40C190(-2133472293); result = sub_462C30(1, v4); } } else { v1 = (char *)sub_40C190(1988193177); result = sub_462C30(1, v1); } return result; } //----- (005DB870) -------------------------------------------------------- volatile LONG *__thiscall sub_5DB870(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax char *v3; // eax volatile LONG *result; // eax _DWORD *v5; // eax char *v6; // eax int v7; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v2) ) { v5 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v5) ) { v6 = (char *)sub_40C190(909839724); result = sub_462C30(1, v6); } else { v7 = sub_5DBBE0(); result = (volatile LONG *)(**(int (__stdcall ***)(_DWORD))(v7 + 8))(v1[74]); } } else { v3 = (char *)sub_40C190(1988193177); result = sub_462C30(1, v3); } return result; } //----- (005DB8E0) -------------------------------------------------------- char __thiscall sub_5DB8E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 6: LOBYTE(v3) = (unsigned int)sub_5DB870(this); break; case 7: byte_B92027 = byte_B92027 == 0; LOBYTE(v3) = sub_5DAF40((_DWORD **)this); break; case 8: LOBYTE(v3) = sub_5DAF90((_DWORD **)this); break; case 9: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "GuildMenu"); break; case 10: LOBYTE(v3) = (unsigned int)sub_5DB810(); break; default: return (char)v3; } return (char)v3; } // B92027: using guessed type char byte_B92027; //----- (005DB970) -------------------------------------------------------- void *__thiscall sub_5DB970(void *this, char a2) { void *v2; // esi v2 = this; sub_5DAE90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005DB9A0) -------------------------------------------------------- char sub_5DB9A0() { return sub_6F36A0(&off_AB7F2C, 29, 28, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DB9C0) -------------------------------------------------------- char __thiscall sub_5DB9C0(void **this, int a2, int a3, int a4, _WORD *a5) { int v5; // esi int v6; // eax char *v7; // eax _DWORD *v8; // eax int v9; // edx char *v10; // eax _DWORD **v11; // esi char *v12; // edi _DWORD *v13; // eax _DWORD *v14; // eax int v15; // eax _DWORD *v16; // eax int v17; // eax int v18; // eax int v19; // eax char *v20; // eax char *v21; // eax void *v23; // [esp-1Ch] [ebp-40h] int v24; // [esp-18h] [ebp-3Ch] int v25; // [esp-14h] [ebp-38h] int v26; // [esp-10h] [ebp-34h] int v27; // [esp-Ch] [ebp-30h] int v28; // [esp-8h] [ebp-2Ch] int v29; // [esp-4h] [ebp-28h] void **v30; // [esp+8h] [ebp-1Ch] char v31[4]; // [esp+Ch] [ebp-18h] int v32; // [esp+10h] [ebp-14h] int v33; // [esp+14h] [ebp-10h] int v34; // [esp+18h] [ebp-Ch] char v35; // [esp+1Ch] [ebp-8h] v5 = (int)this; v30 = this; if ( a2 == 29 && a3 == 29 ) { v6 = (unsigned __int16)*a5; if ( v6 == 3302 ) { v7 = (char *)sub_40A910(1836233940); } else { if ( v6 == 12688 ) { v30 = &v23; sub_4019E0(&v23, "Guild_CannotLeaveTime"); v29 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v23, v24, v25, v26, v27, v28, v29); v20 = (char *)sub_40A910(-45148034); v21 = sub_7549E0(v20); sub_462C30(1, v21); LABEL_20: *(_DWORD *)(v5 + 20) = 2; return 0; } if ( *a5 == 3137 ) { v8 = (_DWORD *)sub_6D3800(); *(_DWORD *)v31 = v8[4]; v32 = v8[5]; v33 = v8[6]; v9 = v8[7]; v29 = (int)v31; v34 = v9; v35 = 0; v10 = (char *)sub_40C190(1590749673); v11 = (_DWORD **)(v5 + 8); v12 = sub_7549E0(v10, v31); if ( v11[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v11[1] + 4))(25, v12, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v11[1] + 20))(25, v12, v11); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v11)[5])(v11, 25, v12, v11); *(_DWORD *)(sub_6D3800() + 8) = 0; *(_WORD *)(sub_6D1A90() + 4) = 0; v13 = (_DWORD *)sub_6D3800(); sub_6D6D10(v13); sub_6D3E70(); *(_WORD *)(sub_713B50() + 4) = 0; *(_DWORD *)(sub_715490() + 1948) = 0; v14 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v14) ) { v15 = sub_715490(); sub_40C140((char *)(v15 + 1152), (char *)&byte_9A8050); } v16 = (_DWORD *)sub_715490(); sub_7173C0(v16); v17 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_70F470(*(_DWORD **)(v17 + 900)); v18 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v18 ) sub_5E23C0(*(_DWORD ***)(v18 + 868)); v19 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v19 ) sub_5E3AE0(*(_BYTE **)(v19 + 868)); v5 = (int)v30; goto LABEL_20; } v7 = (char *)sub_40C190(221919384); } sub_462C30(1, v7); goto LABEL_20; } return 0; } //----- (005DBBE0) -------------------------------------------------------- int sub_5DBBE0() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD02D4; if ( !dword_AD02D4 ) { v1 = (void ***)operator new(0x40u); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildLeaveTask::`vftable'; v2[2] = &GuildLeaveTask::`vftable'; } else { v2 = 0; } result = (int)v2; dword_AD02D4 = (int)v2; } return result; } // 9E5FF4: using guessed type void *GuildLeaveTask::`vftable'; // 9E6010: using guessed type void *GuildLeaveTask::`vftable'; // AD02D4: using guessed type int dword_AD02D4; //----- (005DBC60) -------------------------------------------------------- void *__thiscall sub_5DBC60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD02D4 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E5FC0: using guessed type void *ISingletonTask::`vftable'; // 9E5FDC: using guessed type void *ISingletonTask::`vftable'; // AD02D4: using guessed type int dword_AD02D4; //----- (005DBCC0) -------------------------------------------------------- int __thiscall sub_5DBCC0(_DWORD **this) { return (*(int (**)(void))(*this[91] + 472))(); } //----- (005DBD20) -------------------------------------------------------- char __thiscall sub_5DBD20(void *this) { int v1; // esi int v2; // edi char *v3; // eax volatile LONG **v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // edi volatile LONG *v11; // ebx volatile LONG *v12; // eax volatile LONG *v13; // edi volatile LONG *v14; // ebx int v15; // edi char v16; // ST08_1 int v17; // ST0C_4 int v18; // ST10_4 int v19; // ST14_4 const CHAR *v20; // eax volatile LONG *v21; // edi volatile LONG *v22; // eax volatile LONG *v23; // edi volatile LONG *v24; // ebx int v25; // edi char v26; // ST08_1 int v27; // ST0C_4 int v28; // ST10_4 int v29; // ST14_4 const CHAR *v30; // eax volatile LONG *v31; // eax void (__thiscall ***v32)(_DWORD, signed int); // esi int v33[5]; // [esp+28h] [ebp-2Ch] int v34; // [esp+3Ch] [ebp-18h] int v35; // [esp+40h] [ebp-14h] int v36; // [esp+44h] [ebp-10h] int v37; // [esp+50h] [ebp-4h] v1 = (int)this; v36 = 0; v2 = dword_BA6BA0; v37 = 0; v34 = 0; v35 = 0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\GuildChangeName.nif"); sub_8F66B0(v3, (int)&v36, v2); if ( !v36 ) return 0; v4 = sub_8FB140(v36, (int)"Frame", (int)&v34, (int)&v35, 0); if ( !sub_8F1440((volatile LONG **)v1, 0, 0, (int)v4, 0, 0, (int)"GuildNameChangeWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v36; v37 = -1; if ( v36 && !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return 0; } sub_456260(v33); LOBYTE(v37) = 1; sub_455FF0(v33, v1); sub_456000(v33, v34, v35); sub_456380(v33, v36); sub_456820(v33, (int)"Panel01", 0); sub_456820(v33, (int)"Panel02", 0); v7 = (volatile LONG *)sub_43D0D0(0x13u); if ( v7 ) v8 = sub_8FB140(v36, (int)"Theme", (int)&v34, (int)&v35, v7); else v8 = sub_8FB140(v36, (int)"Theme", (int)&v34, (int)&v35, 0); sub_8F3EB0(v34, v35, (int)v8, v1, 0, 0); *(_DWORD *)(v1 + 360) = sub_456760( v33, (int)"WinTitle", (int)&unk_9E6055, dword_AA8CB8, dword_AA8CBC, dword_AA8CC0, dword_AA8CC4, 5); *(_DWORD *)(v1 + 364) = sub_456760( v33, (int)"Text01", (int)&unk_9E6056, dword_AA8CB8, dword_AA8CBC, dword_AA8CC0, dword_AA8CC4, 5); v9 = sub_456B30(v33, 1, "Cls", 0, 3); v10 = *(volatile LONG **)(v1 + 344); v11 = v9; if ( v10 != v9 ) { if ( v10 && !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); *(_DWORD *)(v1 + 344) = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v12 = sub_456B30(v33, 0, "Btn01", 0, 3); v13 = *(volatile LONG **)(v1 + 348); v14 = v12; if ( v13 != v12 ) { if ( v13 && !InterlockedDecrement(v13 + 1) && v13 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); *(_DWORD *)(v1 + 348) = v14; if ( v14 ) InterlockedIncrement(v14 + 1); } v15 = *(_DWORD *)(v1 + 348); v16 = dword_AA8C68; v17 = dword_AA8C6C; v18 = dword_AA8C70; v19 = dword_AA8C74; v20 = sub_40C190(1331644831); sub_456040(v15, (int)v20, v16, v17, v18, v19, 5); v21 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v36 + 72))("HelpLinkNor") ) sub_4563D0(v33, 2, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v21); v22 = sub_456B30(v33, 1, "Btn02", 0, 3); v23 = *(volatile LONG **)(v1 + 352); v24 = v22; if ( v23 != v22 ) { if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v23)(v23, 1); *(_DWORD *)(v1 + 352) = v24; if ( v24 ) InterlockedIncrement(v24 + 1); } v25 = *(_DWORD *)(v1 + 352); v26 = dword_AA8C68; v27 = dword_AA8C6C; v28 = dword_AA8C70; v29 = dword_AA8C74; v30 = sub_40C190(-2002610207); sub_456040(v25, (int)v30, v26, v27, v28, v29, 5); v31 = sub_4565F0(v33, (int)"Panel03", 33, 1342177280, 0, 1); *(_DWORD *)(v1 + 356) = v31; (*(void (__thiscall **)(volatile LONG *))(*v31 + 480))(v31); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v1 + 236))(v1, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v37) = 0; sub_4562E0(v33); v37 = -1; if ( v36 ) { v32 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) { if ( v32 ) (**v32)(v32, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005DC180) -------------------------------------------------------- void __thiscall sub_5DC180(int this) { int v1; // edi const char *v2; // eax const char *v3; // esi _DWORD *v4; // esi const CHAR *v5; // eax int v6; // eax std::tr1 *v7; // [esp+0h] [ebp-8h] v1 = this; if ( !*(_DWORD *)(this + 384) ) { LABEL_8: sub_8F2BC0((volatile LONG *)v1, 2, 0, 0); return; } v2 = (const char *)(*(int (**)(void))(**(_DWORD **)(this + 356) + 452))(); v3 = (const char *)sub_451700(v2); if ( !strcmp((const char *)(*(int (**)(void))(**(_DWORD **)(v1 + 356) + 452))(), v3) ) { v6 = (*(int (**)(void))(**(_DWORD **)(v1 + 356) + 452))(); if ( !*(_DWORD *)(v1 + 384) ) std::tr1::_Xfunc(v7); (*(void (__stdcall **)(int))(**(_DWORD **)(v1 + 384) + 4))(v6); goto LABEL_8; } v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = sub_40C190(610680710); sub_492060(v4, (int)v5); } } //----- (005DC2A0) -------------------------------------------------------- LONG __thiscall sub_5DC2A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // ecx int v6; // edi int v7; // edi int v8; // edi v1 = this; *this = &GuildNameChangeWin::`vftable'; this[58] = &GuildNameChangeWin::`vftable'; v2 = this[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = v1[87]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[87] = 0; } v4 = v1[88]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[88] = 0; } v5 = v1[96]; if ( v5 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v5 + 12))(v5 != (_DWORD)(v1 + 92)); v1[96] = 0; } v6 = v1[88]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[87]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[86]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return sub_8F10F0(v1); } // 9E6110: using guessed type void *GuildNameChangeWin::`vftable'; // 9E612C: using guessed type void *GuildNameChangeWin::`vftable'; //----- (005DC430) -------------------------------------------------------- char *__thiscall sub_5DC430(int this, char a2, int a3, int a4, int a5, char *a6, int a7) { int v7; // esi char *result; // eax int v9; // ecx char *v10; // ecx int (__stdcall *v11)(int); // eax v7 = this + 368; result = &a2; if ( (char *)(this + 368) != &a2 ) { v9 = *(_DWORD *)(this + 384); if ( v9 ) { result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v9 + 12))(v9 != v7); *(_DWORD *)(v7 + 16) = 0; } v10 = a6; if ( !a6 ) { *(_DWORD *)(v7 + 16) = a6; goto LABEL_11; } v11 = **(int (__stdcall ***)(int))a6; if ( a6 == &a2 ) result = (char *)v11(v7); else result = (char *)v11(0); *(_DWORD *)(v7 + 16) = result; } v10 = a6; LABEL_11: if ( v10 ) result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v10 + 12))(v10 != &a2); return result; } //----- (005DC4E0) -------------------------------------------------------- void __thiscall sub_5DC4E0(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 ) { if ( a2 == 1 ) { sub_8F2BC0(this, 2, 0, 0); } else if ( a2 == 2 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "GuildChangeName"); } } else { sub_5DC180((int)this); } } //----- (005DC530) -------------------------------------------------------- int sub_5DC530() { void *v0; // eax int v1; // esi void (__thiscall ***v2)(void *, signed int); // edi int result; // eax void *v4; // [esp+14h] [ebp-10h] int v5; // [esp+20h] [ebp-4h] v0 = operator new(0x188u); v1 = (int)v0; v4 = v0; v5 = 0; if ( v0 ) { Concurrency::overwrite_buffer::overwrite_buffer(v0); *(_DWORD *)v1 = &GuildNameChangeWin::`vftable'; *(_DWORD *)(v1 + 232) = &GuildNameChangeWin::`vftable'; *(_DWORD *)(v1 + 344) = 0; *(_DWORD *)(v1 + 348) = 0; *(_DWORD *)(v1 + 352) = 0; *(_DWORD *)(v1 + 384) = 0; } else { v1 = 0; } if ( v1 ) InterlockedIncrement((volatile LONG *)(v1 + 4)); v5 = 1; sub_403790(&unk_BA6B10, v1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 540))(v1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 356))(v1); v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = v1; } else { sub_403A70(&unk_BA6B10, &v4, (_DWORD *)v1); if ( v4 ) { v2 = (void (__thiscall ***)(void *, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) { if ( v2 ) (**v2)(v2, 1); } } v5 = -1; if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E6110: using guessed type void *GuildNameChangeWin::`vftable'; // 9E612C: using guessed type void *GuildNameChangeWin::`vftable'; //----- (005DC6C0) -------------------------------------------------------- int __cdecl sub_5DC6C0(int a1) { int result; // eax _DWORD *v2; // esi result = sub_5DC530(); v2 = (_DWORD *)result; if ( result ) { (*(void (__stdcall **)(int))(**(_DWORD **)(result + 360) + 472))(a1); sub_8F82A0(&unk_BA6B10, v2); result = (int)v2; } return result; } //----- (005DC700) -------------------------------------------------------- void *__thiscall sub_5DC700(void *this, char a2) { void *v2; // esi v2 = this; sub_5DC2A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005DC780) -------------------------------------------------------- int __thiscall sub_5DC780(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (005DC7A0) -------------------------------------------------------- int __thiscall sub_5DC7A0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (**)(void))(*this[86] + 468))(); return (*(int (**)(void))(*v1[86] + 480))(); } //----- (005DC800) -------------------------------------------------------- void __thiscall sub_5DC800(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi _WORD *v3; // eax _BYTE *v4; // ebx _DWORD *v5; // eax int v6; // edx char v7; // cl v1 = this; v2 = this[20] + 3; v3 = operator new[](v2); v4 = v3; *v3 = *((_WORD *)v1 + 40) + 1; v5 = v1 + 16; if ( v1[21] >= 0x10u ) v5 = (_DWORD *)*v5; v6 = v4 + 2 - (_BYTE *)v5; do { v7 = *(_BYTE *)v5; *((_BYTE *)v5 + v6) = *(_BYTE *)v5; v5 = (_DWORD *)((char *)v5 + 1); } while ( v7 ); sub_6F36A0(&off_AB7F2C, 29, 16, v4, v2); operator delete[](v4); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DC860) -------------------------------------------------------- char __thiscall sub_5DC860(_DWORD *this, int a2, int a3, int a4, _WORD *a5) { _DWORD *v5; // esi char *v6; // eax v5 = this; if ( a2 == 29 && a3 == 17 ) { if ( *a5 != 3137 ) { v6 = (char *)sub_40C190(595019426); sub_462C30(1, v6); } v5[5] = 2; } return 0; } //----- (005DC8B0) -------------------------------------------------------- char __thiscall sub_5DC8B0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // edi volatile LONG **v16; // edi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // edi const CHAR *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // edx int v23; // edi int v24; // eax volatile LONG *v25; // edi const CHAR *v26; // eax volatile LONG **v27; // edi volatile LONG *v28; // edx int v29; // edi int v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx const CHAR *v33; // eax void (__thiscall ***v34)(_DWORD, signed int); // esi int v35; // [esp+44h] [ebp-20h] int v36; // [esp+48h] [ebp-1Ch] int v37; // [esp+4Ch] [ebp-18h] int v38; // [esp+50h] [ebp-14h] int v39; // [esp+54h] [ebp-10h] int v40; // [esp+60h] [ebp-4h] int v41; // [esp+6Ch] [ebp+8h] volatile LONG v42; // [esp+6Ch] [ebp+8h] int v43; // [esp+6Ch] [ebp+8h] volatile LONG v44; // [esp+6Ch] [ebp+8h] int v45; // [esp+6Ch] [ebp+8h] v2 = (int)this; v39 = 0; v3 = dword_BA6BA0; v40 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildEditor.nif"); sub_8F66B0(v4, (int)&v39, v3); if ( !v39 ) return 0; v5 = sub_8FB140(v39, (int)"Frame", (int)&v37, (int)&v38, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildNoticeEditorWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v39; v40 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v38; v9 = v37; v41 = v38; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, v10); else v11 = sub_8FB140(v39, (int)"Theme", (int)&v37, (int)&v38, 0); sub_8F3EB0(v37 - v9, v38 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v39, (int)"Panel01", (int)&v37, (int)&v38, 0); sub_8F3EB0(v37 - v9, v38, (int)v12, v2, 0, 0); v13 = sub_8FB140(v39, (int)"Panel02", (int)&v37, (int)&v38, 0); sub_8F3EB0(v37 - v9, v38, (int)v13, v2, 0, 0); v14 = sub_8FB140(v39, (int)"ClsNor", (int)&v37, (int)&v38, 0); sub_8FB650(v14, v39, (int)"ClsClick"); sub_8FB650(v14, v39, (int)"ClsOver"); sub_90C8D0(v37 - v9, v38 - v41, (int)v14, v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v39 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v39, (int)"HelpLinkNor", (int)&v37, (int)&v38, v15); sub_8FB650(v16, v39, (int)"HelpLinkClick"); sub_8FB650(v16, v39, (int)"HelpLinkOver"); sub_8FE0F0(v37 - v9, v38 - v41, (int)v16, v2, 2, 0, 0); } if ( sub_8F71E0(v39, (int)"WinTitle", &v37, &v38, &v35, &v36) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v37 - v9, v38, v35, v36, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v42 = *v19; v20 = sub_40C190(1025836430); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v42 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v39, (int)"AddFrndNor", (int)&v37, (int)&v38, 0); sub_8FB650(v21, v39, (int)"AddFrndClick"); sub_8FB650(v21, v39, (int)"AddFrndOver"); sub_8FE0F0(v37 - v9, v38, (int)v21, v2, 0, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v43 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(0); v25 = sub_8F4A20(v37 - v9, v38 + 1, v43, v23, v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v44 = *v25; v26 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v39, (int)"AddFrndNor01", (int)&v37, (int)&v38, 0); sub_8FB650(v27, v39, (int)"AddFrndClick01"); sub_8FB650(v27, v39, (int)"AddFrndOver01"); sub_8FE0F0(v37 - v9, v38, (int)v27, v2, 1, 0, 0); v28 = v27[9]; v29 = *(_DWORD *)(*v28 + 24); v45 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(0); v31 = sub_8F4A20(v37 - v9, v38 + 1, v45, v29, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = *v31; v33 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v31, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); sub_8F71E0(v39, (int)"Text01", &v37, &v38, &v35, &v36); *(_DWORD *)(v2 + 344) = sub_45A900(v37, v38, v35, v36, v2, 1342181380, 400, 4, 0, 0, 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v40 = -1; if ( v39 ) { v34 = (void (__thiscall ***)(_DWORD, signed int))v39; if ( !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v34 ) (**v34)(v34, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v39; v40 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005DCE40) -------------------------------------------------------- int __cdecl sub_5DCE40(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildNoticeEditorWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildNoticeEditorWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E6474: using guessed type void *GuildNoticeEditorWin::`vftable'; // 9E6494: using guessed type void *GuildNoticeEditorWin::`vftable'; //----- (005DCFB0) -------------------------------------------------------- char __thiscall sub_5DCFB0(int this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // eax _BYTE *v5; // eax void *v6; // esi int v7; // eax v3 = (_DWORD *)this; if ( a2 ) { if ( a2 == 1 ) { LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, (_DWORD *)this); } else { LOBYTE(v4) = a2 - 2; if ( a2 == 2 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "GuildEditor"); } } } else { v5 = (_BYTE *)(*(int (**)(void))(**(_DWORD **)(this + 344) + 452))(); v6 = v5; if ( v5 && *v5 ) { v7 = sub_5DD110(); sub_4018E0((_DWORD *)(v7 + 64), v6, strlen((const char *)v6)); } LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v3); } return (char)v4; } //----- (005DD090) -------------------------------------------------------- void *__thiscall sub_5DD090(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildNoticeEditorWin::`vftable'; *((_DWORD *)this + 58) = &GuildNoticeEditorWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E6474: using guessed type void *GuildNoticeEditorWin::`vftable'; // 9E6494: using guessed type void *GuildNoticeEditorWin::`vftable'; //----- (005DD0D0) -------------------------------------------------------- void *__thiscall sub_5DD0D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD02D8 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E66B8: using guessed type void *ISingletonTask::`vftable'; // 9E66D4: using guessed type void *ISingletonTask::`vftable'; // AD02D8: using guessed type int dword_AD02D8; //----- (005DD110) -------------------------------------------------------- int sub_5DD110() { int result; // eax void ***v1; // eax int v2; // esi result = dword_AD02D8; if ( !dword_AD02D8 ) { v1 = (void ***)operator new(0x5Cu); v2 = (int)v1; if ( v1 ) { sub_6C2E00(v1, 0); *(_DWORD *)v2 = &GuildNotifyTask::`vftable'; *(_DWORD *)(v2 + 8) = &GuildNotifyTask::`vftable'; *(_DWORD *)(v2 + 84) = 15; *(_DWORD *)(v2 + 80) = 0; *(_BYTE *)(v2 + 64) = 0; } else { v2 = 0; } result = v2; dword_AD02D8 = v2; } return result; } // 9E66EC: using guessed type void *GuildNotifyTask::`vftable'; // 9E6708: using guessed type void *GuildNotifyTask::`vftable'; // AD02D8: using guessed type int dword_AD02D8; //----- (005DD1A0) -------------------------------------------------------- _DWORD *__thiscall sub_5DD1A0(void *this, char a2) { _DWORD *v2; // esi v2 = this; if ( *((_DWORD *)this + 21) >= 0x10u ) operator delete(*((void **)this + 16)); v2[21] = 15; v2[20] = 0; *((_BYTE *)v2 + 64) = 0; *v2 = &ISingletonTask::`vftable'; v2[2] = &ISingletonTask::`vftable'; dword_AD02D8 = 0; sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E66B8: using guessed type void *ISingletonTask::`vftable'; // 9E66D4: using guessed type void *ISingletonTask::`vftable'; // AD02D8: using guessed type int dword_AD02D8; //----- (005DD200) -------------------------------------------------------- _DWORD *__thiscall sub_5DD200(_DWORD **this) { return sub_8F9E00(&unk_BA6B10, this[21]); } //----- (005DD210) -------------------------------------------------------- char __thiscall sub_5DD210(_BYTE *this) { _DWORD *v1; // esi v1 = this; this[345] = 1; sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); return sub_8F86A0(&unk_BA6B10, v1); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DD240) -------------------------------------------------------- char __thiscall sub_5DD240(_BYTE *this) { char result; // al if ( !this[345] ) result = sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DD260) -------------------------------------------------------- void __thiscall sub_5DD260(_BYTE *this) { this[345] = 0; } //----- (005DD270) -------------------------------------------------------- char __thiscall sub_5DD270(_DWORD *this) { _DWORD *v1; // edi int v2; // eax char result; // al int v4; // esi _DWORD *v5; // eax int v6; // [esp+4h] [ebp-8h] int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = sub_7154A0(); result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( !result ) { sub_8F86A0(&unk_BA6B10, v1); v4 = sub_7154A0(); (*(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180))(v1, &v7, &v6); (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 172))(v4, v7); (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 176))(v4, v6); v5 = (_DWORD *)sub_7154A0(); result = sub_8F82A0(&unk_BA6B10, v5); } return result; } //----- (005DD2F0) -------------------------------------------------------- char sub_5DD2F0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildMenu"); return (char)v0; } //----- (005DD320) -------------------------------------------------------- char __thiscall sub_5DD320(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // esi char result; // al int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); (*(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180))(v1, &v5, &v4); v2 = (_DWORD *)sub_6D3880(); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 172))(v2, v5); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 176))(v2, v4); result = (*(int (__thiscall **)(_DWORD *))(*v2 + 260))(v2); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v2); return result; } //----- (005DD390) -------------------------------------------------------- int __thiscall sub_5DD390(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi int result; // eax v4 = this; if ( this[a2 + 88] ) { (*(void (__stdcall **)(int))(*this[a2 + 88] + 516))(a3); result = (*(int (__stdcall **)(signed int))(*v4[a2 + 88] + 256))(1); } if ( v4[a2 + 93] ) { (*(void (__stdcall **)(int))(*v4[a2 + 93] + 472))(a4); result = (*(int (__stdcall **)(signed int))(*v4[a2 + 93] + 256))(1); } return result; } //----- (005DD440) -------------------------------------------------------- char __thiscall sub_5DD440(_DWORD **this) { return sub_8F86A0(&unk_BA6B10, this[87]); } //----- (005DD460) -------------------------------------------------------- char __thiscall sub_5DD460(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[16] = 0; this[21] = sub_45EB80(); sub_40C190(-2098211603); sub_45E560((_DWORD **)v1[21]); sub_45E580((_DWORD *)v1[21], 0); (**(void (__thiscall ***)(int, int))(v1[21] + 232))(v1[21] + 232, (int)(v1 + 2)); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[21] + 236))(xRight, dword_AC2F78, 0.5, 0.5); return sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[21]); } //----- (005DD4F0) -------------------------------------------------------- void __thiscall sub_5DD4F0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // edx int v7; // edx int v8; // ecx int v9; // edx int v10; // [esp+4h] [ebp-20h] int v11; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] char v14[4]; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] int v16; // [esp+1Ch] [ebp-8h] v4 = this; if ( a2 == 28 ) { v5 = this[19]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { sub_8F86A0(&unk_BA6B10, (_DWORD *)this[19]); v4[3] = 2; } else { v7 = this[16]; v8 = a3[1]; v10 = v4[15]; v12 = v4[17]; v11 = v7; v9 = v4[18]; v16 = 0; v15 = 0; *(_DWORD *)v14 = 0; v13 = v9; sub_5DE220(v8, v14); sub_6F36A0(&off_AB7F2C, 29, 7, &v10, 0x1Cu); v4[14] = 1; } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DD5C0) -------------------------------------------------------- char __thiscall sub_5DD5C0(_DWORD ***this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD ***v5; // esi char *v6; // eax v5 = this; if ( a2 == 29 && a3 == 8 ) { switch ( *a5 ) { case 0xC41u: goto LABEL_10; case 0xD00u: case 0xD01u: case 0xD02u: case 0xD04u: case 0xD06u: case 0xD07u: v6 = (char *)sub_40C190(578060437); break; case 0xD03u: sub_40C190(860035480); sub_45E560(v5[21]); sub_45E5E0(v5[21]); v5[16] = 0; return 0; case 0xD05u: v6 = (char *)sub_40C190(1953646049); break; case 0xD09u: v6 = (char *)sub_40A910(-1343513032); break; case 0xD0Au: v6 = (char *)sub_40A910(1257408000); break; default: return 0; } sub_462CA0(1, v6); LABEL_10: v5[5] = (_DWORD **)2; } return 0; } //----- (005DD750) -------------------------------------------------------- _DWORD *__thiscall sub_5DD750(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildNpcMenuWin::`vftable'; v1[58] = &GuildNpcMenuWin::`vftable'; v1[87] = 0; *((_WORD *)v1 + 172) = 0; *((_BYTE *)v1 + 392) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E6800: using guessed type void *GuildNpcMenuWin::`vftable'; // 9E681C: using guessed type void *GuildNpcMenuWin::`vftable'; //----- (005DD880) -------------------------------------------------------- char __thiscall sub_5DD880(void *this, int a2) { int v2; // ebx int v3; // esi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // esi int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi volatile LONG *v15; // edi volatile LONG **v16; // edi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // esi volatile LONG v20; // edi const CHAR *v21; // eax int v22; // esi int v23; // edi char *v24; // eax volatile LONG **v25; // edi int v26; // ST54_4 char *v27; // eax int v28; // ST54_4 char *v29; // eax volatile LONG *v30; // eax volatile LONG *v31; // ecx int v32; // edi int v33; // ST54_4 int v34; // eax volatile LONG *v35; // eax const CHAR *v36; // eax const CHAR *v37; // eax const CHAR *v38; // eax const CHAR *v39; // eax const CHAR *v40; // eax int v41; // eax int v42; // esi int v43; // edi void (__thiscall ***v44)(_DWORD, signed int); // esi int v45; // [esp+44h] [ebp-28h] int v46; // [esp+48h] [ebp-24h] int v47; // [esp+4Ch] [ebp-20h] int v48; // [esp+50h] [ebp-1Ch] int v49; // [esp+54h] [ebp-18h] int v50; // [esp+58h] [ebp-14h] int v51; // [esp+5Ch] [ebp-10h] int v52; // [esp+68h] [ebp-4h] int v53; // [esp+74h] [ebp+8h] signed int v54; // [esp+74h] [ebp+8h] v2 = (int)this; v51 = 0; v3 = dword_BA6BA0; v52 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildMenu.nif"); sub_8F66B0(v4, (int)&v51, v3); if ( !v51 ) return 0; v5 = sub_8FB140(v51, (int)"Frame", (int)&v49, (int)&v50, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildNpcMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v51; v52 = -1; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v49; v9 = v50; v48 = v49; v53 = v50; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v51, (int)"Theme", (int)&v49, (int)&v50, v10); else v11 = sub_8FB140(v51, (int)"Theme", (int)&v49, (int)&v50, 0); sub_8F3EB0(v49 - v8, v50 - v9, (int)v11, v2, 0, 0); v12 = sub_8FB140(v51, (int)"Panel01", (int)&v49, (int)&v50, 0); sub_8F3EB0(v49 - v8, v50, (int)v12, v2, 0, 0); v13 = sub_8FB140(v51, (int)"Panel02", (int)&v49, (int)&v50, 0); sub_8F3EB0(v49 - v8, v50, (int)v13, v2, 0, 0); v14 = sub_8FB140(v51, (int)"ClsNor", (int)&v49, (int)&v50, 0); sub_8FB650(v14, v51, (int)"ClsClick"); sub_8FB650(v14, v51, (int)"ClsOver"); sub_8FE0F0(v49 - v8, v50 - v53, (int)v14, v2, 11, 0, 0); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v51 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v51, (int)"HelpLinkNor", (int)&v49, (int)&v50, v15); sub_8FB650(v16, v51, (int)"HelpLinkClick"); sub_8FB650(v16, v51, (int)"HelpLinkOver"); sub_8FE0F0(v49 - v8, v50 - v53, (int)v16, v2, 16, 0, 0); } if ( sub_8F71E0(v51, (int)"WinTitle", &v49, &v50, &v45, &v46) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v49 - v8, v50, v45, v46, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v20 = *v19; v21 = sub_40C190(909982867); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v54 = 1; v22 = v2 + 372; v47 = 5; do { v23 = v51; v24 = sub_7549E0("Btn%02dNor", v54); v25 = sub_8FB140(v23, (int)v24, (int)&v49, (int)&v50, 0); v26 = v51; v27 = sub_7549E0("Btn%02dClick", v54); sub_8FB650(v25, v26, (int)v27); v28 = v51; v29 = sub_7549E0("Btn%02dOver", v54); sub_8FB650(v25, v28, (int)v29); v30 = sub_8FE0F0(v49 - v48, v50, (int)v25, v2, 0, 0, 0); *(_DWORD *)(v22 - 20) = v30; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 256))(v30, 0); v31 = v25[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v49 - v48, v50 + 1, v33, v32, v34, v2, 0, 0); *(_DWORD *)v22 = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)v22 + 472))(&unk_9E672F); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0); ++v54; v22 += 4; --v47; } while ( v47 ); v36 = sub_40C190(-1915428389); sub_5DD390((_DWORD **)v2, 0, 5, (int)v36); v37 = sub_40C190(-1987671833); sub_5DD390((_DWORD **)v2, 1, 9, (int)v37); v38 = sub_40C190(-488384480); sub_5DD390((_DWORD **)v2, 2, 8, (int)v38); v39 = sub_40C190(524691034); sub_5DD390((_DWORD **)v2, 3, 14, (int)v39); v40 = sub_40A910(1297492034); sub_5DD390((_DWORD **)v2, 4, 17, (int)v40); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v41 = sub_5DA070(0); v42 = *(_DWORD *)(v2 + 348); v43 = v41; if ( v42 != v41 ) { if ( v42 && !InterlockedDecrement((volatile LONG *)(v42 + 4)) && v42 ) (**(void (__thiscall ***)(int, signed int))v42)(v42, 1); *(_DWORD *)(v2 + 348) = v43; if ( v43 ) InterlockedIncrement((volatile LONG *)(v43 + 4)); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 348) + 232))(*(_DWORD *)(v2 + 348) + 232, v2 + 232); v52 = -1; if ( v51 ) { v44 = (void (__thiscall ***)(_DWORD, signed int))v51; if ( !InterlockedDecrement((volatile LONG *)(v51 + 4)) ) { if ( v44 ) (**v44)(v44, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v51; v52 = -1; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005DDE40) -------------------------------------------------------- char __thiscall sub_5DDE40(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax char *v3; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v2) ) return sub_8F82A0(&unk_BA6B10, v1[87]); v3 = (char *)sub_40C190(1853375888); return (unsigned int)sub_462C30(1, v3); } //----- (005DDE80) -------------------------------------------------------- char __thiscall sub_5DDE80(char *this) { char *v1; // esi int v2; // eax char result; // al _DWORD *v4; // eax int v5; // eax _DWORD **v6; // esi const CHAR *v7; // edi char v8; // [esp+7h] [ebp-1h] v1 = this; v2 = sub_7154F0(); result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( !result ) { v4 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v4) ) { v5 = sub_7154F0(); result = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 260))(v5); if ( !result ) { v8 = 0; result = sub_6F3D10(&off_AB7F2C, 38, 109, &v8, 1u); } } else { v6 = (_DWORD **)(v1 + 232); v7 = sub_40C190(1922102688); if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DDF40) -------------------------------------------------------- volatile LONG *__thiscall sub_5DDF40(_BYTE *this) { _BYTE *v1; // esi _DWORD *v2; // eax char *v3; // eax volatile LONG *result; // eax _DWORD *v5; // eax char *v6; // eax char *v7; // eax volatile LONG *v8; // eax int v9; // edx v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v2) ) { v5 = (_DWORD *)sub_6D3800(); if ( sub_6D3160(v5) ) { v7 = (char *)sub_40A910(848204409); v8 = sub_462C30(2, v7); if ( v1 ) v9 = (int)(v1 + 232); else v9 = 0; result = (volatile LONG *)(**((int (__stdcall ***)(int))v8 + 58))(v9); v1[392] = 1; } else { v6 = (char *)sub_40C190(-538440674); result = sub_462CA0(1, v6); } } else { v3 = (char *)sub_40C190(1988193177); result = sub_462CA0(1, v3); } return result; } //----- (005DDFD0) -------------------------------------------------------- char __thiscall sub_5DDFD0(char *this, int a2, int a3) { char result; // al _DWORD *v4; // eax result = a2; switch ( a2 ) { case 5: result = sub_5DDE40((_DWORD **)this); break; case 8: result = (unsigned int)sub_5DDF40(this); break; case 9: result = sub_6D1740(); break; case 11: result = sub_5DD210(this); break; case 12: v4 = (_DWORD *)sub_6D3840(); result = sub_8F82A0(&unk_BA6B10, v4); break; case 14: result = sub_5DDE80(this); break; case 15: result = sub_5DD270(this); break; case 16: result = sub_5DD2F0(); break; case 17: result = sub_5DD320(this); break; default: return result; } return result; } //----- (005DE080) -------------------------------------------------------- volatile LONG *__cdecl sub_5DE080(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x18Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5DD750(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005DE1B0) -------------------------------------------------------- void __thiscall sub_5DE1B0(_BYTE *this, int a2, _DWORD *a3, int a4) { _BYTE *v4; // edi _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax int v8; // edx v4 = this; if ( a2 == 27 ) { v5 = a3; if ( a3 ) { if ( !*a3 && this[160] ) { v6 = (_DWORD *)sub_5DE380(); v7 = (_DWORD *)sub_6D3800(); v6[17] = v7[4]; v6[18] = v7[5]; v6[19] = v7[6]; v8 = v7[7]; v5 = a3; v6[20] = v8; v4[160] = 0; } if ( *v5 == 1 ) v4[160] = 0; } } } //----- (005DE220) -------------------------------------------------------- char *__cdecl sub_5DE220(int a1, char *a2) { char *result; // eax char v3; // cl char v4[4]; // [esp+8h] [ebp-10h] int v5; // [esp+Ch] [ebp-Ch] int v6; // [esp+10h] [ebp-8h] result = (char *)a1; if ( strlen((const char *)a1) < 0xB ) { *(_DWORD *)v4 = 0; v5 = 0; v6 = 0; do { v3 = *result; v4[(_DWORD)result - a1] = *result; ++result; } while ( v3 ); *((_DWORD *)a2 + 2) = 0; *((_DWORD *)a2 + 1) = 0; *(_DWORD *)a2 = 0; result = strncpy(a2, v4, 0xCu); } return result; } //----- (005DE2A0) -------------------------------------------------------- _DWORD *__thiscall sub_5DE2A0(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &GuildNpcMenuWin::`vftable'; *((_DWORD *)this + 58) = &GuildNpcMenuWin::`vftable'; v3 = *((_DWORD *)this + 87); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E6800: using guessed type void *GuildNpcMenuWin::`vftable'; // 9E681C: using guessed type void *GuildNpcMenuWin::`vftable'; //----- (005DE340) -------------------------------------------------------- void *__thiscall sub_5DE340(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD02DC = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E6A40: using guessed type void *ISingletonTask::`vftable'; // 9E6A5C: using guessed type void *ISingletonTask::`vftable'; // AD02DC: using guessed type int dword_AD02DC; //----- (005DE380) -------------------------------------------------------- int sub_5DE380() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD02DC; if ( !dword_AD02DC ) { v1 = (void ***)operator new(0x58u); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildDismissTask::`vftable'; v2[2] = &GuildDismissTask::`vftable'; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_AD02DC = (int)v2; } return result; } // 9E6A74: using guessed type void *GuildDismissTask::`vftable'; // 9E6A90: using guessed type void *GuildDismissTask::`vftable'; // AD02DC: using guessed type int dword_AD02DC; //----- (005DE410) -------------------------------------------------------- void __thiscall sub_5DE410(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(int))(*this[86] + 148))(a2); sub_4EAAF0((float *)v2[86], 3.0); } //----- (005DE450) -------------------------------------------------------- int __thiscall sub_5DE450(_DWORD **this) { return (*(int (**)(void))(*this[86] + 176))(); } //----- (005DE530) -------------------------------------------------------- char __thiscall sub_5DE530(volatile LONG **this, int a2) { float *v2; // ebx int *v3; // esi int v5; // eax volatile LONG *v6; // edi void *v7; // eax int v8; // edi int v9; // eax int *v10; // ebx int v11; // edi float *v12; // eax float *v13; // eax int v14; // edx int v15; // ecx int v16; // edx char v17; // [esp+34h] [ebp-48h] void *v18; // [esp+44h] [ebp-38h] float v19; // [esp+4Ch] [ebp-30h] struct tagSIZE psizl; // [esp+54h] [ebp-28h] struct tagRECT rc; // [esp+5Ch] [ebp-20h] int v22; // [esp+78h] [ebp-4h] v2 = 0; v3 = (int *)this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"GuildWarInformWin", 0) ) return 0; v5 = sub_421050(6); v6 = (volatile LONG *)v5; if ( !v5 ) return 0; SelectObject(*(HDC *)(v5 + 192), *(HGDIOBJ *)(v5 + 184)); sub_4593C0(v6, "W", 1, &psizl); SetRect(&rc, 0, 0, 900, psizl.cy); v7 = operator new(0x158u); v18 = v7; v22 = 0; if ( v7 ) v2 = sub_4EAD10((float *)v7, v6); v8 = v3[86]; v22 = -1; if ( (float *)v8 != v2 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v3[86] = (int)v2; if ( v2 ) InterlockedIncrement((volatile LONG *)v2 + 1); } sub_9074F0(v3[86], 3); (*(void (__stdcall **)(struct tagRECT *))(*(_DWORD *)v3[86] + 136))(&rc); v9 = v3[86]; *(_DWORD *)(v9 + 308) = 1; if ( *(_DWORD *)(v9 + 280) != 18 ) { *(_DWORD *)(v9 + 280) = 18; *(_BYTE *)(v9 + 300) = 1; } v10 = (int *)v3[86]; v11 = *v10; v12 = sub_4B1B10((float *)&v17, 0); (*(void (__thiscall **)(int *, float *))(v11 + 176))(v10, v12); v13 = (float *)v3[86]; v14 = *((_DWORD *)v13 + 23); v15 = *((_DWORD *)v13 + 22); v19 = -2.0; v16 = *((_DWORD *)v13 + 24); *((_DWORD *)v13 + 22) = v15; v13[23] = v19; *((_DWORD *)v13 + 24) = v16; (*(void (__thiscall **)(int *, int, _DWORD))(*v3 + 116))(v3, v3[86], 0); sub_85C4D0(v3); (*(void (__thiscall **)(int *, signed int))(*v3 + 152))(v3, 900); (*(void (__thiscall **)(int *, LONG))(*v3 + 156))(v3, psizl.cy); (*(void (__thiscall **)(int *, int, int, _DWORD, _DWORD))(*v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 0.2); (*(void (__thiscall **)(int *, _DWORD))(*v3 + 240))(v3, 0); return 1; } //----- (005DE760) -------------------------------------------------------- int __cdecl sub_5DE760(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildWarInformWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildWarInformWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( sub_5DE530((volatile LONG **)v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E6AC0: using guessed type void *GuildWarInformWin::`vftable'; // 9E6ADC: using guessed type void *GuildWarInformWin::`vftable'; //----- (005DE8A0) -------------------------------------------------------- _DWORD *__thiscall sub_5DE8A0(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &GuildWarInformWin::`vftable'; *((_DWORD *)this + 58) = &GuildWarInformWin::`vftable'; v3 = *((_DWORD *)this + 86); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E6AC0: using guessed type void *GuildWarInformWin::`vftable'; // 9E6ADC: using guessed type void *GuildWarInformWin::`vftable'; //----- (005DE940) -------------------------------------------------------- void __thiscall sub_5DE940(_DWORD **this, float a2, int a3, int a4) { _DWORD **v4; // esi v4 = this; if ( 0.0 == a2 ) { (*(void (__stdcall **)(int))(*this[86] + 148))(a3); (*(void (__stdcall **)(int))(*v4[87] + 148))(a4); } if ( a2 > 0.0 ) { (*(void (__stdcall **)(int))(*v4[86] + 148))(a3); (*(void (__stdcall **)(int))(*v4[87] + 148))(a4); sub_4EAAF0((float *)v4[86], a2); sub_4EAAF0((float *)v4[87], a2); } } //----- (005DEAE0) -------------------------------------------------------- char __thiscall sub_5DEAE0(volatile LONG **this, int a2) { void **v2; // esi int v4; // eax volatile LONG *v5; // ebx int v6; // edi void *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // ebx _DWORD *v10; // eax int v11; // ebx float *v12; // eax float *v13; // eax int v14; // edx int v15; // ecx int v16; // edx void *v17; // eax void (__thiscall *v18)(void **, void *, _DWORD); // edx char v19; // [esp+30h] [ebp-60h] char v20; // [esp+40h] [ebp-50h] float v21; // [esp+54h] [ebp-3Ch] struct tagSIZE psizl; // [esp+5Ch] [ebp-34h] volatile LONG *v23; // [esp+64h] [ebp-2Ch] int v24; // [esp+68h] [ebp-28h] void *v25; // [esp+6Ch] [ebp-24h] struct tagRECT rc; // [esp+70h] [ebp-20h] int v27; // [esp+8Ch] [ebp-4h] v2 = (void **)this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"GuildWarKillCountWin", 0) ) return 0; v4 = sub_421050(3); v5 = (volatile LONG *)v4; v23 = (volatile LONG *)v4; if ( !v4 ) return 0; SelectObject(*(HDC *)(v4 + 192), *(HGDIOBJ *)(v4 + 184)); sub_4593C0(v5, "W", 1, &psizl); v24 = -2; SetRect(&rc, 0, 0, 500, psizl.cy); v6 = 0; while ( 1 ) { v7 = operator new(0x158u); v25 = v7; v27 = 0; if ( v7 ) { v8 = (volatile LONG *)sub_4EAD10((float *)v7, v5); v25 = (void *)v8; } else { v25 = 0; v8 = 0; } v9 = (volatile LONG *)v2[v6 + 86]; v27 = -1; if ( v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); v8 = (volatile LONG *)v25; } v2[v6 + 86] = (void *)v8; if ( v8 ) InterlockedIncrement(v8 + 1); } sub_9074F0((int)v2[v6 + 86], 1); (*(void (__stdcall **)(struct tagRECT *))(*(_DWORD *)v2[v6 + 86] + 136))(&rc); v10 = v2[v6 + 86]; v10[77] = 1; if ( v10[70] != 18 ) { v10[70] = 18; *((_BYTE *)v10 + 300) = 1; } if ( v6 == 1 ) { v11 = *(_DWORD *)v2[87]; v25 = v2[87]; v12 = sub_4B1B10((float *)&v19, 7u); } else { v11 = *(_DWORD *)v2[v6 + 86]; v25 = v2[v6 + 86]; v12 = sub_4B1B10((float *)&v20, 0x32u); } (*(void (__thiscall **)(void *, float *))(v11 + 176))(v25, v12); v13 = (float *)v2[v6 + 86]; v14 = *((_DWORD *)v13 + 23); v15 = *((_DWORD *)v13 + 22); v21 = (double)v24; v16 = *((_DWORD *)v13 + 24); *((_DWORD *)v13 + 22) = v15; v13[23] = v21; *((_DWORD *)v13 + 24) = v16; v17 = v2[v6 + 86]; v18 = (void (__thiscall *)(void **, void *, _DWORD))*((_DWORD *)*v2 + 29); v24 += psizl.cy + 2; v18(v2, v17, 0); if ( ++v6 >= 2 ) break; v5 = v23; } (*((void (__thiscall **)(void **, signed int))*v2 + 39))(v2, 45); (*((void (__thiscall **)(void **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.63999999, 0.31999999); (*((void (__thiscall **)(void **, _DWORD))*v2 + 60))(v2, 0); return 1; } //----- (005DED60) -------------------------------------------------------- int __cdecl sub_5DED60(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &GuildWarKillCountWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildWarKillCountWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 344), 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( sub_5DEAE0((volatile LONG **)v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E6D18: using guessed type void *GuildWarKillCountWin::`vftable'; // 9E6D34: using guessed type void *GuildWarKillCountWin::`vftable'; //----- (005DEEC0) -------------------------------------------------------- _DWORD *__thiscall sub_5DEEC0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &GuildWarKillCountWin::`vftable'; *((_DWORD *)this + 58) = &GuildWarKillCountWin::`vftable'; `eh vector destructor iterator'((char *)this + 344, 4u, 2, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E6D18: using guessed type void *GuildWarKillCountWin::`vftable'; // 9E6D34: using guessed type void *GuildWarKillCountWin::`vftable'; //----- (005DEF50) -------------------------------------------------------- int __thiscall sub_5DEF50(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int result; // eax v2 = this; v3 = (_DWORD *)this[86]; if ( v3 ) { v2[91] = a2; sub_466AF0(v3, a2, 0, 0); result = sub_465130((_DWORD *)v2[86]); } return result; } //----- (005DEF90) -------------------------------------------------------- int __thiscall sub_5DEF90(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int result; // eax v2 = this; v3 = (_DWORD *)this[88]; if ( v3 ) { v2[92] = a2; sub_466AF0(v3, a2, 0, 0); result = sub_465130((_DWORD *)v2[88]); } return result; } //----- (005DF020) -------------------------------------------------------- int sub_5DF020() { return sub_6D3770(0); } //----- (005DF030) -------------------------------------------------------- char sub_5DF030() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildWarMenu"); return (char)v0; } //----- (005DF060) -------------------------------------------------------- int __thiscall sub_5DF060(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int result; // eax v2 = this; v3 = (_DWORD *)this[88]; if ( v3 ) { result = a2; if ( a2 >= 0 ) { v2[92] = a2; sub_466AF0(v3, a2, 0, 1); result = sub_465130((_DWORD *)v2[88]); } } return result; } //----- (005DF0E0) -------------------------------------------------------- void __thiscall sub_5DF0E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = v1[86]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[86] + 344) = *(_DWORD *)(v1[87] + 300); sub_465130((_DWORD *)v1[86]); } } } //----- (005DF1B0) -------------------------------------------------------- void __thiscall sub_5DF1B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax int v4; // eax _DWORD *v5; // ecx v1 = this; v2 = (_DWORD *)this[89]; if ( v2 && v1[88] && v1[92] >= 0 ) { v3 = ((v1[95] - v1[94]) >> 2) - 9; if ( v3 < 0 ) v3 = 0; sub_4638F0(v2, v3); sub_4637A0((_DWORD *)v1[89], 0); v4 = v1[92]; v5 = (_DWORD *)v1[88]; if ( v4 ) sub_466AF0(v5, v4, 0, 0); else sub_466AF0(v5, 0, 0, 1); *(_DWORD *)(v1[88] + 344) = 0; sub_464D00((_DWORD *)v1[88], 5); sub_465130((_DWORD *)v1[88]); } } //----- (005DF250) -------------------------------------------------------- char __thiscall sub_5DF250(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax _DWORD **v3; // esi const CHAR *v4; // edi signed int v6; // edi _DWORD **v7; // esi const CHAR *v8; // edi _DWORD *v9; // eax char v10; // cl bool v11; // zf const CHAR *v12; // eax _DWORD **v13; // esi const CHAR *v14; // edi int v15; // [esp+8h] [ebp-18h] int v16; // [esp+Ch] [ebp-14h] int v17; // [esp+10h] [ebp-10h] int v18; // [esp+14h] [ebp-Ch] int v19; // [esp+18h] [ebp-8h] v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( !sub_6D31A0(v2) ) { v3 = v1 + 58; v4 = sub_40C190(1803776455); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } return ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } v6 = sub_464F50(v1[88]); if ( v6 >= 0 ) { if ( *(_BYTE *)(sub_6D3800() + 100) ) { v7 = v1 + 58; v8 = sub_40C190(-1394408389); if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v8, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } return ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); } sub_464B60(v1[88], v6, &v15); if ( *(_BYTE *)(sub_6D3800() + 40) ) { v11 = *(_BYTE *)(sub_6D3800() + 40) == 1; v9 = (_DWORD *)v15; if ( !v11 ) goto LABEL_19; v11 = *(_BYTE *)(v15 + 20) == 0; } else { v9 = (_DWORD *)v15; v10 = *(_BYTE *)(v15 + 20); if ( !v10 ) { LABEL_16: v12 = sub_40C190(-1003216093); goto LABEL_21; } v11 = v10 == 1; } if ( v11 ) goto LABEL_16; LABEL_19: v19 = 0; v18 = 0; v17 = 0; v16 = 0; v16 = v9[1]; v17 = v9[2]; v18 = v9[3]; v19 = v9[4]; return sub_6F36A0(&off_AB7F2C, 29, 34, &v16, 0x10u); } v12 = sub_40C190((int)&loc_825A98); LABEL_21: v13 = v1 + 58; v14 = v12; if ( v13[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 4))(25, v12, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 20))(25, v14, v13); } return ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v13)[5])(v13, 25, v14, v13); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005DF440) -------------------------------------------------------- int __thiscall sub_5DF440(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int result; // eax v1 = this; v2 = *(_DWORD *)(this[89] + 300); result = this[90]; if ( result != v2 ) { result = this[88]; if ( result ) { if ( v2 >= 0 ) { *(_DWORD *)(result + 344) = v2; result = sub_465130((_DWORD *)this[88]); } } v1[90] = v2; } return result; } //----- (005DF490) -------------------------------------------------------- char *__cdecl sub_5DF490(unsigned int a1, int a2) { unsigned int v2; // esi unsigned int v3; // edi unsigned int v4; // ebx const CHAR *v5; // eax const CHAR *v6; // eax const CHAR *v7; // eax unsigned int v9; // [esp+14h] [ebp+8h] v2 = (a1 - a2) / 0x3C; v3 = (a1 - a2) / 0xE10; v9 = (a1 - a2) % 0x3C; byte_AD02E0 = 0; v4 = v2 % 0x3C; if ( v3 ) { v5 = sub_40C190(1219600035); strcat(&byte_AD02E0, sub_7549E0("%d %s ", v3, v5)); } if ( v4 ) { v6 = sub_40C190(-1582000158); strcat(&byte_AD02E0, sub_7549E0("%d %s", v4, v6)); } v7 = sub_40C190(1398770841); strcat(&byte_AD02E0, sub_7549E0("%d %s", v9, v7)); return &byte_AD02E0; } // AD02E0: using guessed type char byte_AD02E0; //----- (005DF5C0) -------------------------------------------------------- const CHAR *__cdecl sub_5DF5C0(int *a1) { const CHAR *result; // eax dword_AD0320 = *a1; dword_AD0324 = a1[1]; dword_AD0328 = a1[2]; dword_AD032C = a1[3]; byte_AD0330 = 0; if ( (_BYTE)dword_AD0320 ) result = (const CHAR *)&dword_AD0320; else result = sub_40C190(1836288660); return result; } // AD0320: using guessed type int dword_AD0320; // AD0324: using guessed type int dword_AD0324; // AD0328: using guessed type int dword_AD0328; // AD032C: using guessed type int dword_AD032C; // AD0330: using guessed type char byte_AD0330; //----- (005DF610) -------------------------------------------------------- const CHAR *__cdecl sub_5DF610(char a1) { const CHAR *result; // eax switch ( a1 ) { case 0: result = sub_40C190(1836288660); break; case 1: result = sub_40C190(2092288742); break; case 2: result = sub_40C190(-1329933614); break; case 3: result = sub_40C190(-994457109); break; default: result = "."; break; } return result; } //----- (005DF900) -------------------------------------------------------- void __thiscall sub_5DF900(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // ecx int v5; // edx unsigned int v6; // edi int v7; // eax int v8; // eax char *v9; // eax CHAR *v10; // eax CHAR *v11; // eax void *v12; // eax int v13; // [esp+8h] [ebp-18h] int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] int v16; // [esp+14h] [ebp-Ch] char v17; // [esp+18h] [ebp-8h] v2 = this; if ( this[86] ) { v3 = ((int (__thiscall *)(_DWORD, _DWORD))loc_466CA0)(this[88], 0); v4 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)(a2 + 12); v6 = v3; v13 = *(_DWORD *)(a2 + 4); v7 = *(_DWORD *)(a2 + 16); v14 = v4; v15 = v5; v16 = v7; v17 = 0; v8 = sub_6D3800(); v9 = sub_7549E0("%d", v6 + 10 * *(_DWORD *)(v8 + 2756)); sub_4661A0((_DWORD *)v2[88], v6, 0, v9); sub_4661A0((_DWORD *)v2[88], v6, 1, &v13); v10 = (CHAR *)sub_5DF5C0((int *)(a2 + 26)); sub_4661A0((_DWORD *)v2[88], v6, 2, v10); if ( *(_BYTE *)(a2 + 20) ) { if ( *(_BYTE *)(a2 + 20) == 1 ) v11 = (CHAR *)sub_40C190(1044934038); else v11 = "."; } else { v11 = (CHAR *)sub_40C190(1044198562); } sub_4661A0((_DWORD *)v2[88], v6, 3, v11); if ( *(_WORD *)(a2 + 23) == -1 ) v12 = (void *)sub_40C190(84418096); else v12 = sub_7549E0("%d", *(unsigned __int16 *)(a2 + 23)); sub_4661A0((_DWORD *)v2[88], v6, 4, v12); sub_464B20((_DWORD *)v2[88], v6, a2); } } //----- (005DFA40) -------------------------------------------------------- void __thiscall sub_5DFA40(float *this, float a2) { float *v2; // esi int v3; // ebx unsigned int v4; // edi char *v5; // eax unsigned int v6; // [esp+Ch] [ebp-10h] __int64 v7; // [esp+10h] [ebp-Ch] float v8; // [esp+24h] [ebp+8h] v2 = this; v7 = (signed __int64)sub_6D3790(); HIDWORD(v7) = v7; v3 = *(_DWORD *)(sub_6D3800() + 1084); v4 = 0; if ( sub_464700(*((_DWORD **)v2 + 86)) ) { do { if ( !v3 ) break; sub_464B60(*((_DWORD **)v2 + 86), v4, &v6); if ( *(_DWORD *)(v3 + 22) - HIDWORD(v7) < v6 ) { v5 = sub_5DF490(*(_DWORD *)(v3 + 22), SHIDWORD(v7)); sub_4661A0(*((_DWORD **)v2 + 86), v4, 2, v5); sub_464B20(*((_DWORD **)v2 + 86), v4, *(_DWORD *)(v3 + 22)); } v3 = *(_DWORD *)(v3 + 240); ++v4; } while ( v4 < sub_464700(*((_DWORD **)v2 + 86)) ); } sub_465130(*((_DWORD **)v2 + 86)); if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { sub_4E3710(*((_DWORD **)v2 + 86), *((_DWORD **)v2 + 87)); sub_4E3710(*((_DWORD **)v2 + 88), *((_DWORD **)v2 + 89)); } if ( *((_BYTE *)v2 + 392) != 1 ) { v8 = a2 - v2[99]; if ( v8 >= 5.0 ) *((_BYTE *)v2 + 392) = 1; } } //----- (005DFB80) -------------------------------------------------------- char __stdcall sub_5DFB80(int TestChar) { unsigned int v2; // edi _DWORD *v3; // esi const CHAR *v4; // eax const CHAR *v5; // eax BYTE TestChara; // [esp+8h] [ebp+8h] if ( !TestChar ) return 0; v2 = strlen((const char *)TestChar); TestChara = *(_BYTE *)TestChar; v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; if ( IsDBCSLeadByte(TestChara) ) { if ( v2 < 2 ) { v4 = sub_4090F0(-1764700746); sub_492060(v3, (int)v4); return 0; } return 1; } if ( v2 < 1 ) { v5 = sub_4090F0(-1764700746); sub_492060(v3, (int)v5); return 0; } return 1; } //----- (005DFC20) -------------------------------------------------------- signed int __thiscall sub_5DFC20(_DWORD **this) { _DWORD **v1; // ebx int i; // esi int v3; // eax int v4; // ecx int v5; // edx unsigned int v6; // edi int v7; // eax char *v8; // eax signed __int64 v9; // ST18_8 char *v10; // eax char *v11; // eax char *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax char *v15; // eax const CHAR *v17; // [esp+10h] [ebp-1Ch] int v18; // [esp+14h] [ebp-18h] int v19; // [esp+18h] [ebp-14h] int v20; // [esp+1Ch] [ebp-10h] int v21; // [esp+20h] [ebp-Ch] char v22; // [esp+24h] [ebp-8h] v1 = this; sub_466A50(this[86]); for ( i = *(_DWORD *)(sub_6D3800() + 1084); i; i = *(_DWORD *)(i + 240) ) { if ( v1[86] ) { v3 = ((int (__stdcall *)(_DWORD))loc_466CA0)(0); v4 = *(_DWORD *)(i + 8); v5 = *(_DWORD *)(i + 12); v6 = v3; v18 = *(_DWORD *)(i + 4); v7 = *(_DWORD *)(i + 16); v19 = v4; v20 = v5; v21 = v7; v22 = 0; v8 = sub_7549E0("%d", v6); sub_4661A0(v1[86], v6, 0, v8); sub_4661A0(v1[86], v6, 1, &v18); v9 = (signed __int64)sub_6D3790(); v10 = sub_5DF490(*(_DWORD *)(i + 22), v9); sub_4661A0(v1[86], v6, 2, v10); v11 = sub_7549E0( "%d", *(_DWORD *)(i + 164) + *(_DWORD *)(i + 168) + *(_DWORD *)(i + 172) + *(_DWORD *)(i + 176) + *(_DWORD *)(i + 180) + *(_DWORD *)(i + 184) + *(_DWORD *)(i + 188)); sub_4661A0(v1[86], v6, 3, v11); v12 = sub_7549E0( "%d", *(_DWORD *)(i + 206) + *(_DWORD *)(i + 210) + *(_DWORD *)(i + 214) + *(_DWORD *)(i + 218) + *(_DWORD *)(i + 222) + *(_DWORD *)(i + 226) + *(_DWORD *)(i + 230)); sub_4661A0(v1[86], v6, 4, v12); if ( *(_DWORD *)(i + 146) == *(_DWORD *)(sub_6D3800() + 12) ) v13 = sub_40C190(-353235157); else v13 = sub_40C190(-1560537305); v17 = v13; switch ( *(unsigned __int8 *)(i + 21) ) { case 0u: v14 = sub_40C190(1836288660); break; case 1u: v14 = sub_40C190(2092288742); break; case 2u: v14 = sub_40C190(-1329933614); break; case 3u: v14 = sub_40C190(-994457109); break; default: v14 = "."; break; } v15 = sub_7549E0("%s/%s", v17, v14); sub_4661A0(v1[86], v6, 5, v15); sub_464B20(v1[86], v6, -1); sub_464BA0(v1[86], v6, 1); } } sub_466AF0(v1[86], (int)v1[91], 0, 0); sub_464D00(v1[86], 5); sub_465130(v1[86]); return sub_4638F0(v1[87], v1[86][84]); } //----- (005DFEC0) -------------------------------------------------------- int __thiscall sub_5DFEC0(_DWORD **this) { _DWORD **v1; // edi int i; // esi int v3; // eax int v4; // ecx int v5; // edx unsigned int v6; // ebx int v7; // eax int v8; // eax char *v9; // eax CHAR *v10; // eax CHAR *v11; // eax void *v12; // eax int v13; // eax _DWORD *v14; // ecx int result; // eax int v16; // eax int v17; // [esp+8h] [ebp-18h] int v18; // [esp+Ch] [ebp-14h] int v19; // [esp+10h] [ebp-10h] int v20; // [esp+14h] [ebp-Ch] char v21; // [esp+18h] [ebp-8h] v1 = this; sub_466A50(this[88]); for ( i = *(_DWORD *)(sub_6D3800() + 1932); i; i = *(_DWORD *)(i + 48) ) { if ( v1[86] ) { v3 = ((int (__thiscall *)(_DWORD *, _DWORD))loc_466CA0)(v1[88], 0); v4 = *(_DWORD *)(i + 8); v5 = *(_DWORD *)(i + 12); v6 = v3; v17 = *(_DWORD *)(i + 4); v7 = *(_DWORD *)(i + 16); v18 = v4; v19 = v5; v20 = v7; v21 = 0; v8 = sub_6D3800(); v9 = sub_7549E0("%d", v6 + 10 * *(_DWORD *)(v8 + 2756)); sub_4661A0(v1[88], v6, 0, v9); sub_4661A0(v1[88], v6, 1, &v17); dword_AD0320 = *(_DWORD *)(i + 26); dword_AD0324 = *(_DWORD *)(i + 30); dword_AD0328 = *(_DWORD *)(i + 34); dword_AD032C = *(_DWORD *)(i + 38); byte_AD0330 = 0; if ( (_BYTE)dword_AD0320 ) v10 = (CHAR *)&dword_AD0320; else v10 = (CHAR *)sub_40C190(1836288660); sub_4661A0(v1[88], v6, 2, v10); if ( *(_BYTE *)(i + 20) ) { if ( *(_BYTE *)(i + 20) == 1 ) v11 = (CHAR *)sub_40C190(1044934038); else v11 = "."; } else { v11 = (CHAR *)sub_40C190(1044198562); } sub_4661A0(v1[88], v6, 3, v11); if ( *(_WORD *)(i + 23) == -1 ) v12 = (void *)sub_40C190(84418096); else v12 = sub_7549E0("%d", *(unsigned __int16 *)(i + 23)); sub_4661A0(v1[88], v6, 4, v12); sub_464B20(v1[88], v6, i); } } v13 = (int)v1[92]; v14 = v1[88]; if ( v13 ) sub_466AF0(v14, v13, 0, 0); else sub_466AF0(v14, 0, 0, 1); sub_464D00(v1[88], 5); sub_465130(v1[88]); result = sub_6D3800(); if ( result ) { v1[90] = *(_DWORD **)(result + 2756); v16 = sub_6D3800(); sub_4638F0(v1[89], *(_DWORD *)(v16 + 1928) - 9); result = sub_4637A0(v1[89], (int)v1[90]); } return result; } // AD0320: using guessed type int dword_AD0320; // AD0324: using guessed type int dword_AD0324; // AD0328: using guessed type int dword_AD0328; // AD032C: using guessed type int dword_AD032C; // AD0330: using guessed type char byte_AD0330; //----- (005E00E0) -------------------------------------------------------- void __thiscall sub_5E00E0(int this) { _DWORD **v1; // esi _DWORD *v2; // esi const CHAR *v3; // eax int v4; // eax int v5; // eax v1 = (_DWORD **)this; if ( *(_BYTE *)(this + 392) ) { *(_BYTE *)(this + 392) = 0; *(float *)(this + 396) = flt_ACCFCC; sub_6F36A0(&off_AB7F2C, 29, 36, 0, 0); v4 = sub_6D3800(); sub_751C10((_DWORD *)(v4 + 1080)); v5 = sub_6D3800(); sub_751C50((_DWORD *)(v5 + 1928)); sub_5DFC20(v1); sub_5DFEC0(v1); sub_6D3770(1); } else { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) { v3 = sub_4090F0(53309289); sub_492060(v2, (int)v3); } } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (005E01C0) -------------------------------------------------------- char __thiscall sub_5E01C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int *i; // edi const CHAR *v5; // eax v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v2 ) return 0; if ( !((v1[95] - v1[94]) & 0xFFFFFFFC) ) { v5 = sub_4090F0(-1244540504); sub_492060(v2, (int)v5); return 0; } sub_466A50((_DWORD *)v1[88]); sub_465130((_DWORD *)v1[88]); for ( i = (int *)v1[94]; i != (int *)v1[95]; ++i ) sub_5DF900(v1, *i); return 1; } //----- (005E0250) -------------------------------------------------------- float *__thiscall sub_5E0250(float *this) { float *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &GuildWarStateWin::`vftable'; *((_DWORD *)v1 + 58) = &GuildWarStateWin::`vftable'; v1[93] = 0.0; v1[94] = 0.0; v1[95] = 0.0; v1[96] = 0.0; v1[99] = 0.0; v1[86] = 0.0; v1[87] = 0.0; v1[91] = 0.0; v1[92] = 0.0; v1[90] = 0.0; *((_BYTE *)v1 + 392) = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E7464: using guessed type void *GuildWarStateWin::`vftable'; // 9E7484: using guessed type void *GuildWarStateWin::`vftable'; //----- (005E02C0) -------------------------------------------------------- LONG __thiscall sub_5E02C0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax int v3; // edi v1 = this; *this = &GuildWarStateWin::`vftable'; this[58] = &GuildWarStateWin::`vftable'; v2 = (void *)this[94]; if ( v2 ) operator delete(v2); v1[94] = 0; v1[95] = 0; v1[96] = 0; v3 = v1[93]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9E7464: using guessed type void *GuildWarStateWin::`vftable'; // 9E7484: using guessed type void *GuildWarStateWin::`vftable'; //----- (005E0370) -------------------------------------------------------- volatile LONG *__cdecl sub_5E0370(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x190u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_5E0250((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005E04A0) -------------------------------------------------------- void __thiscall sub_5E04A0(_DWORD **this) { _DWORD *v1; // esi int v2; // eax char *v3; // ebx const void *v4; // ecx void *v5; // edi _DWORD *i; // edi unsigned int v7; // eax unsigned int v8; // ecx int v9; // ebx _DWORD *v10; // eax _DWORD *v11; // eax char *v12; // [esp+Ch] [ebp-40h] _DWORD *v13; // [esp+10h] [ebp-3Ch] char v14[4]; // [esp+14h] [ebp-38h] int v15; // [esp+18h] [ebp-34h] int v16; // [esp+1Ch] [ebp-30h] int v17; // [esp+20h] [ebp-2Ch] int v18; // [esp+24h] [ebp-28h] int v19; // [esp+28h] [ebp-24h] int v20; // [esp+2Ch] [ebp-20h] int v21; // [esp+30h] [ebp-1Ch] char v22[4]; // [esp+34h] [ebp-18h] int v23; // [esp+38h] [ebp-14h] int v24; // [esp+3Ch] [ebp-10h] int v25; // [esp+40h] [ebp-Ch] char v26; // [esp+44h] [ebp-8h] v1 = this; v2 = (*(int (**)(void))(*this[93] + 452))(); v3 = (char *)v2; v12 = (char *)v2; if ( v2 && sub_5DFB80(v2) ) { v4 = (const void *)v1[95]; v5 = (void *)v1[94]; if ( v5 != v4 ) { memcpy_0(v5, v4, 0); v1[95] = v5; v3 = v12; } for ( i = *(_DWORD **)(sub_6D3800() + 1932); i; i = (_DWORD *)i[12] ) { *(_DWORD *)v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v21 = 0; *(_DWORD *)v22 = i[1]; v23 = i[2]; v24 = i[3]; v25 = i[4]; v26 = 0; strncpy(v14, v22, 0x12u); _strlwr(v14); _strlwr(v3); if ( _mbsstr((const unsigned __int8 *)v14, (const unsigned __int8 *)v3) ) { v7 = v1[95]; v13 = i; if ( (unsigned int)&v13 >= v7 || (v8 = v1[94], v8 > (unsigned int)&v13) ) { if ( v7 == v1[96] ) sub_5E2180((int)(v1 + 94), 1); v11 = (_DWORD *)v1[95]; if ( v11 ) *v11 = i; } else { v9 = (signed int)((signed int)&v13 - v8) >> 2; if ( v7 == v1[96] ) sub_5E2180((int)(v1 + 94), 1); v10 = (_DWORD *)v1[95]; if ( v10 ) *v10 = *(_DWORD *)(v1[94] + 4 * v9); v3 = v12; } v1[95] += 4; } } if ( sub_5E01C0(v1) ) sub_5DF1B0(v1); } } //----- (005E0640) -------------------------------------------------------- void __thiscall sub_5E0640(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax v3 = this; switch ( a2 ) { case 2: sub_5DF0E0(this); break; case 5: sub_5DF440(this); break; case 6: v4 = sub_6D3800(); nullsub_33(v4); break; case 7: v5 = sub_6D3800(); nullsub_34(v5); break; case 8: sub_5DF250((_DWORD **)this); break; case 9: case 10: case 11: case 12: case 13: case 14: sub_5DEF50(this, a2 - 9); break; case 15: sub_5DF060(this, 0); break; case 16: case 17: case 18: case 19: case 20: sub_5DEF90(this, a2 - 15); break; case 22: sub_5DF030(); break; case 23: sub_5E04A0((_DWORD **)this); break; case 24: sub_6D3770(1); (*(void (__thiscall **)(_DWORD *))(*v3 + 264))(v3); break; default: return; } } // 6D32C0: using guessed type int __thiscall nullsub_33(_DWORD); // 6D32D0: using guessed type int __thiscall nullsub_34(_DWORD); //----- (005E0760) -------------------------------------------------------- void __thiscall sub_5E0760(_DWORD *this, int a2, int a3) { _DWORD **v3; // esi int *v4; // edi int v5; // ebx int v6; // eax v3 = (_DWORD **)this; v4 = (int *)this[93]; v5 = *v4; v6 = (*(int (__thiscall **)(_DWORD))(*v4 + 456))(this[93]); (*(void (__thiscall **)(int *, int))(v5 + 460))(v4, v6); (*(void (**)(void))(*v3[93] + 480))(); sub_5E04A0(v3); } //----- (005E07A0) -------------------------------------------------------- char __thiscall sub_5E07A0(_DWORD *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax void (__thiscall ***v12)(_DWORD, signed int); // esi int v13; // eax volatile LONG *v14; // eax volatile LONG v15; // edx const CHAR *v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax volatile LONG **v23; // eax int v24; // eax volatile LONG *v25; // ecx volatile LONG **v26; // eax int v27; // eax volatile LONG *v28; // eax volatile LONG v29; // edx const CHAR *v30; // eax volatile LONG *v31; // ecx volatile LONG **v32; // eax int v33; // eax volatile LONG *v34; // eax volatile LONG v35; // edx const CHAR *v36; // eax volatile LONG *v37; // ecx volatile LONG **v38; // eax int v39; // eax volatile LONG *v40; // eax volatile LONG v41; // edx const CHAR *v42; // eax volatile LONG *v43; // ecx volatile LONG **v44; // eax int v45; // eax volatile LONG *v46; // eax volatile LONG v47; // edx const CHAR *v48; // eax volatile LONG *v49; // ecx volatile LONG **v50; // eax int v51; // eax volatile LONG *v52; // eax volatile LONG v53; // edx const CHAR *v54; // eax volatile LONG *v55; // ecx volatile LONG **v56; // eax int v57; // eax volatile LONG *v58; // eax volatile LONG v59; // edx const CHAR *v60; // eax int v61; // eax volatile LONG *v62; // eax volatile LONG v63; // edx const CHAR *v64; // eax volatile LONG **v65; // eax volatile LONG **v66; // eax volatile LONG **v67; // eax volatile LONG *v68; // eax volatile LONG **v69; // eax int v70; // eax volatile LONG *v71; // ecx volatile LONG **v72; // eax int v73; // eax volatile LONG *v74; // eax volatile LONG v75; // edx const CHAR *v76; // eax volatile LONG *v77; // ecx volatile LONG **v78; // eax int v79; // eax volatile LONG *v80; // eax volatile LONG v81; // edx const CHAR *v82; // eax volatile LONG *v83; // ecx volatile LONG **v84; // eax int v85; // eax volatile LONG *v86; // eax volatile LONG v87; // edx const CHAR *v88; // eax volatile LONG *v89; // ecx volatile LONG **v90; // eax int v91; // eax volatile LONG *v92; // eax volatile LONG v93; // edx const CHAR *v94; // eax volatile LONG *v95; // ecx volatile LONG **v96; // eax int v97; // eax volatile LONG *v98; // eax volatile LONG v99; // edx const CHAR *v100; // eax int v101; // eax volatile LONG *v102; // eax volatile LONG v103; // edx const CHAR *v104; // eax volatile LONG *v105; // ecx volatile LONG v106; // eax int v107; // eax volatile LONG *v108; // eax volatile LONG v109; // edx const CHAR *v110; // eax int v111; // eax volatile LONG **v112; // edx int v113; // eax volatile LONG *v114; // eax volatile LONG v115; // edx const CHAR *v116; // eax volatile LONG *v117; // eax volatile LONG *v118; // ecx volatile LONG **v119; // eax int v120; // eax volatile LONG *v121; // eax volatile LONG v122; // edx const CHAR *v123; // eax volatile LONG *v124; // ecx volatile LONG **v125; // eax int v126; // eax volatile LONG *v127; // edi volatile LONG v128; // ebx const CHAR *v129; // eax int v130; // [esp+12Ch] [ebp-6Ch] int v131; // [esp+130h] [ebp-68h] int v132; // [esp+134h] [ebp-64h] char v133; // [esp+13Ch] [ebp-5Ch] int v134; // [esp+140h] [ebp-58h] int v135; // [esp+144h] [ebp-54h] int v136; // [esp+148h] [ebp-50h] int v137; // [esp+14Ch] [ebp-4Ch] int v138; // [esp+150h] [ebp-48h] int v139; // [esp+154h] [ebp-44h] volatile LONG *v140; // [esp+158h] [ebp-40h] int v141; // [esp+15Ch] [ebp-3Ch] int v142; // [esp+160h] [ebp-38h] int v143; // [esp+164h] [ebp-34h] volatile LONG **v144; // [esp+168h] [ebp-30h] void *v145; // [esp+16Ch] [ebp-2Ch] int v146; // [esp+17Ch] [ebp-1Ch] unsigned int v147; // [esp+180h] [ebp-18h] int v148; // [esp+194h] [ebp-4h] v2 = (int)this; v143 = 0; this[74] = a2; v3 = dword_BA6BA0; v148 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildWarMenu.nif"); sub_8F66B0(v4, (int)&v143, v3); if ( !v143 ) return 0; v5 = sub_8FB140(v143, (int)"Frame", (int)&v142, (int)&v141, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildWarStateWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v143; v148 = -1; if ( v143 && !InterlockedDecrement((volatile LONG *)(v143 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v142; v9 = v141; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v143, (int)"Theme", (int)&v142, (int)&v141, v10); else v11 = sub_8FB140(v143, (int)"Theme", (int)&v142, (int)&v141, 0); sub_8F3EB0(v142 - v8, v141 - v9, (int)v11, v2, 0, 0); if ( sub_8F71E0(v143, (int)"WinTitle", &v142, &v141, &v138, &v139) ) { v13 = sub_421050(0); v14 = sub_8F4A20(v142 - v8, v141 - v9, v138, v139, v13, v2, 0, 0); v15 = *v14; v144 = (volatile LONG **)v14; (*(void (__thiscall **)(volatile LONG *, signed int))(v15 + 488))(v14, 1); (*((void (__stdcall **)(int *))*v144 + 117))(&dword_AA8D98); v140 = *v144; v16 = sub_40C190(-920306874); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v16); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"ClsNor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"ClsClick"); sub_8FB650(v144, v143, (int)"ClsOver"); sub_90C8D0(v142 - v8, v141 - v9, (int)v144, v2); v140 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v143 + 72))("HelpLinkNor") ) { v144 = sub_8FB140(v143, (int)"HelpLinkNor", (int)&v142, (int)&v141, v140); sub_8FB650(v144, v143, (int)"HelpLinkClick"); sub_8FB650(v144, v143, (int)"HelpLinkOver"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 22, 0, 0); } v17 = sub_8FB140(v143, (int)"Panel01", (int)&v142, (int)&v141, 0); sub_8F3EB0(v142 - v8, v141 - v9, (int)v17, v2, 0, 0); v18 = sub_8FB140(v143, (int)"IconSlot", (int)&v142, (int)&v141, 0); sub_8F3EB0(v142 - v8, v141 - v9, (int)v18, v2, 0, 0); v130 = 0; v131 = 0; v132 = 0; v133 = 0; v134 = 0; v135 = 0; v136 = 0; v137 = 0; LOBYTE(v148) = 1; v19 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 1); *v19 = (volatile LONG *)1; v19[1] = (volatile LONG *)v143; v144 = v19; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "ColumnBarNor", 0xCu); LOBYTE(v148) = 2; v144 += 18; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "ColumnBarClick", 0xEu); LOBYTE(v148) = 3; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "ColumnBarOver", 0xDu); LOBYTE(v148) = 4; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column01", 8u); LOBYTE(v148) = 5; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column02", 8u); LOBYTE(v148) = 6; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v20 = v144; v144[1] = (volatile LONG *)v143; *((_BYTE *)v20 + 88) = 1; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column03", 8u); LOBYTE(v148) = 7; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column04", 8u); LOBYTE(v148) = 8; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column05", 8u); LOBYTE(v148) = 9; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; v147 = 15; v146 = 0; LOBYTE(v145) = 0; sub_4018E0(&v145, "Column06", 8u); LOBYTE(v148) = 10; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; if ( v147 >= 0x10 ) operator delete(v145); v144[1] = (volatile LONG *)v143; v134 = 5; v135 = 0; sub_466680(&v130, 0); v21 = sub_8FB140(v143, (int)"Text01", (int)&v142, (int)&v141, 0); v22 = sub_466330(v142 - v8, v141 - v9, (int)v21, *(float *)&v2, (int **)&v130, 0, 0); *(_DWORD *)(v2 + 344) = v22; *((_DWORD *)v22 + 89) = 0; *(_DWORD *)(*(_DWORD *)(v2 + 344) + 352) = 1; sub_464D00(*(_DWORD **)(v2 + 344), 5); sub_465130(*(_DWORD **)(v2 + 344)); v23 = sub_8FB140(v143, (int)"SlideBar_SlideBtnMiddle", (int)&v142, (int)&v141, 0); v24 = sub_464310(v143, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v23, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 348) = v24; *(_DWORD *)(v24 + 312) = 2; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; sub_4638F0(*(_DWORD **)(v2 + 348), *(_DWORD *)(*(_DWORD *)(v2 + 344) + 336)); v144 = sub_8FB140(v143, (int)"Title01Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title01Click"); sub_8FB650(v144, v143, (int)"Title01Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 9, 0, 0); v25 = v144[9]; v26 = *(volatile LONG ***)(*v25 + 20); v140 = *(volatile LONG **)(*v25 + 24); v144 = v26; v27 = sub_421050(7); v28 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v27, v2, 0, 0); v29 = *v28; v144 = (volatile LONG **)v28; (*(void (__thiscall **)(volatile LONG *, signed int))(v29 + 488))(v28, 5); v140 = *v144; v30 = sub_40C190(-1999902495); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v30); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title02Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title02Click"); sub_8FB650(v144, v143, (int)"Title02Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 10, 0, 0); v31 = v144[9]; v32 = *(volatile LONG ***)(*v31 + 20); v140 = *(volatile LONG **)(*v31 + 24); v144 = v32; v33 = sub_421050(7); v34 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v33, v2, 0, 0); v35 = *v34; v144 = (volatile LONG **)v34; (*(void (__thiscall **)(volatile LONG *, signed int))(v35 + 488))(v34, 5); v140 = *v144; v36 = sub_40C190(-2033071894); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v36); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title03Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title03Click"); sub_8FB650(v144, v143, (int)"Title03Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 11, 0, 0); v37 = v144[9]; v38 = *(volatile LONG ***)(*v37 + 20); v140 = *(volatile LONG **)(*v37 + 24); v144 = v38; v39 = sub_421050(7); v40 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v39, v2, 0, 0); v41 = *v40; v144 = (volatile LONG **)v40; (*(void (__thiscall **)(volatile LONG *, signed int))(v41 + 488))(v40, 5); v140 = *v144; v42 = sub_40C190(-2088274520); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v42); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title04Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title04Click"); sub_8FB650(v144, v143, (int)"Title04Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 12, 0, 0); v43 = v144[9]; v44 = *(volatile LONG ***)(*v43 + 20); v140 = *(volatile LONG **)(*v43 + 24); v144 = v44; v45 = sub_421050(7); v46 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v45, v2, 0, 0); v47 = *v46; v144 = (volatile LONG **)v46; (*(void (__thiscall **)(volatile LONG *, signed int))(v47 + 488))(v46, 5); v140 = *v144; v48 = sub_40C190(2044063202); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v48); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title05Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title05Click"); sub_8FB650(v144, v143, (int)"Title05Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 13, 0, 0); v49 = v144[9]; v50 = *(volatile LONG ***)(*v49 + 20); v140 = *(volatile LONG **)(*v49 + 24); v144 = v50; v51 = sub_421050(7); v52 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v51, v2, 0, 0); v53 = *v52; v144 = (volatile LONG **)v52; (*(void (__thiscall **)(volatile LONG *, signed int))(v53 + 488))(v52, 5); v140 = *v144; v54 = sub_40C190(-841279397); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v54); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title06Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title06Click"); sub_8FB650(v144, v143, (int)"Title06Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 14, 0, 0); v55 = v144[9]; v56 = *(volatile LONG ***)(*v55 + 20); v140 = *(volatile LONG **)(*v55 + 24); v144 = v56; v57 = sub_421050(7); v58 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v57, v2, 0, 0); v59 = *v58; v144 = (volatile LONG **)v58; (*(void (__thiscall **)(volatile LONG *, signed int))(v59 + 488))(v58, 5); v140 = *v144; v60 = sub_40C190(-2005107059); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v60); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); if ( !sub_8F71E0(v143, (int)"GuildList", &v142, &v141, &v138, &v139) ) goto LABEL_45; v61 = sub_421050(2); v62 = sub_8F4A20(v142 - v8, v141 - v9, v138, v139, v61, v2, 0, 0); v63 = *v62; v144 = (volatile LONG **)v62; (*(void (__thiscall **)(volatile LONG *, signed int))(v63 + 488))(v62, 1); v140 = *v144; v64 = sub_40C190(-920306874); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v64); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); sub_40AE60(&v130); v65 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 1); *v65 = (volatile LONG *)1; v65[1] = (volatile LONG *)v143; v144 = v65; sub_4019E0(&v145, "ColumnBarNor01"); LOBYTE(v148) = 11; v144 += 18; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); sub_4019E0(&v145, "ColumnBarClick01"); LOBYTE(v148) = 12; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); sub_4019E0(&v145, "ColumnBarOver01"); LOBYTE(v148) = 13; sub_40B060((int *)v144, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; sub_4019E0(&v145, "Column07"); LOBYTE(v148) = 14; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; sub_4019E0(&v145, "Column08"); LOBYTE(v148) = 15; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v66 = v144; v144[1] = (volatile LONG *)v143; *((_BYTE *)v66 + 88) = 1; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; sub_4019E0(&v145, "Column09"); LOBYTE(v148) = 16; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; sub_4019E0(&v145, "Column10"); LOBYTE(v148) = 17; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v144[1] = (volatile LONG *)v143; v144 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v130, 2); *v144 = (volatile LONG *)2; sub_4019E0(&v145, "Column11"); LOBYTE(v148) = 18; sub_40B060((int *)v144 + 18, (const void **)&v145); LOBYTE(v148) = 1; sub_636A10(&v145); v144[1] = (volatile LONG *)v143; v134 = 5; v135 = 0; sub_466680(&v130, 0); v67 = sub_8FB140(v143, (int)"Text02", (int)&v142, (int)&v141, 0); v68 = sub_466330(v142 - v8, v141 - v9, (int)v67, *(float *)&v2, (int **)&v130, 0, 0); *(_DWORD *)(v2 + 352) = v68; *((_DWORD *)v68 + 89) = 3; *(_DWORD *)(*(_DWORD *)(v2 + 352) + 352) = 4; sub_464D00(*(_DWORD **)(v2 + 352), 5); sub_465130(*(_DWORD **)(v2 + 352)); v69 = sub_8FB140(v143, (int)"SlideBar_SlideBtnMiddle", (int)&v142, (int)&v141, 0); v70 = sub_464310(v143, (int)"SlideBar01", "SlideBar01_UpBtn", "SlideBar01_DnBtn", (int)v69, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 356) = v70; *(_DWORD *)(v70 + 312) = 5; *(_DWORD *)(*(_DWORD *)(v2 + 356) + 304) = 1; sub_4638F0(*(_DWORD **)(v2 + 356), *(_DWORD *)(*(_DWORD *)(v2 + 352) + 336)); v144 = sub_8FB140(v143, (int)"Title07Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title07Click"); sub_8FB650(v144, v143, (int)"Title07Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 15, 0, 0); v71 = v144[9]; v72 = *(volatile LONG ***)(*v71 + 20); v140 = *(volatile LONG **)(*v71 + 24); v144 = v72; v73 = sub_421050(7); v74 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v73, v2, 0, 0); v75 = *v74; v144 = (volatile LONG **)v74; (*(void (__thiscall **)(volatile LONG *, signed int))(v75 + 488))(v74, 5); v140 = *v144; v76 = sub_40C190(-1999902495); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v76); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title08Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title08Click"); sub_8FB650(v144, v143, (int)"Title08Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 16, 0, 0); v77 = v144[9]; v78 = *(volatile LONG ***)(*v77 + 20); v140 = *(volatile LONG **)(*v77 + 24); v144 = v78; v79 = sub_421050(7); v80 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v79, v2, 0, 0); v81 = *v80; v144 = (volatile LONG **)v80; (*(void (__thiscall **)(volatile LONG *, signed int))(v81 + 488))(v80, 5); v140 = *v144; v82 = sub_40C190(-2033071894); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v82); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title09Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title09Click"); sub_8FB650(v144, v143, (int)"Title09Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 17, 0, 0); v83 = v144[9]; v84 = *(volatile LONG ***)(*v83 + 20); v140 = *(volatile LONG **)(*v83 + 24); v144 = v84; v85 = sub_421050(7); v86 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v85, v2, 0, 0); v87 = *v86; v144 = (volatile LONG **)v86; (*(void (__thiscall **)(volatile LONG *, signed int))(v87 + 488))(v86, 5); v140 = *v144; v88 = sub_40C190(-920306874); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v88); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title10Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title10Click"); sub_8FB650(v144, v143, (int)"Title10Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 18, 0, 0); v89 = v144[9]; v90 = *(volatile LONG ***)(*v89 + 20); v140 = *(volatile LONG **)(*v89 + 24); v144 = v90; v91 = sub_421050(7); v92 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v91, v2, 0, 0); v93 = *v92; v144 = (volatile LONG **)v92; (*(void (__thiscall **)(volatile LONG *, signed int))(v93 + 488))(v92, 5); v140 = *v144; v94 = sub_40C190(-2000035884); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v94); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Title11Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Title11Click"); sub_8FB650(v144, v143, (int)"Title11Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 19, 0, 0); v95 = v144[9]; v96 = *(volatile LONG ***)(*v95 + 20); v140 = *(volatile LONG **)(*v95 + 24); v144 = v96; v97 = sub_421050(7); v98 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v97, v2, 0, 0); v99 = *v98; v144 = (volatile LONG **)v98; (*(void (__thiscall **)(volatile LONG *, signed int))(v99 + 488))(v98, 5); v140 = *v144; v100 = sub_40C190(455355511); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v100); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); if ( sub_8F71E0(v143, (int)"GuildWarList", &v142, &v141, &v138, &v139) ) { v101 = sub_421050(2); v102 = sub_8F4A20(v142 - v8, v141 - v9, v138, v139, v101, v2, 0, 0); v103 = *v102; v144 = (volatile LONG **)v102; (*(void (__thiscall **)(volatile LONG *, signed int))(v103 + 488))(v102, 1); v140 = *v144; v104 = sub_40C190(538124679); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v104); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"GuildWarApplyNor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"GuildWarApplyClick"); sub_8FB650(v144, v143, (int)"GuildWarApplyOver"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 8, 0, 0); v105 = v144[9]; v106 = *v105; v140 = *(volatile LONG **)(*v105 + 24); v144 = *(volatile LONG ***)(v106 + 20); v107 = sub_421050(0); v108 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v107, v2, 0, 0); v109 = *v108; v144 = (volatile LONG **)v108; (*(void (__thiscall **)(volatile LONG *, signed int))(v109 + 488))(v108, 5); v140 = *v144; v110 = sub_40C190(-489737172); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v110); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v111 = *sub_8FB140(v143, (int)"Text03", (int)&v142, (int)&v141, 0)[9]; v112 = *(volatile LONG ***)(v111 + 20); v140 = *(volatile LONG **)(v111 + 24); v144 = v112; v113 = sub_421050(0); v114 = sub_8F4A20(v142 - v8, v141 - v9, (int)v144, (int)v140, v113, v2, 0, 0); v115 = *v114; v144 = (volatile LONG **)v114; (*(void (__thiscall **)(volatile LONG *, signed int))(v115 + 488))(v114, 5); v140 = *v144; v116 = sub_4090F0(187721062); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v116); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Search_Input", (int)&v142, (int)&v141, 0); sub_8F3EB0(v142, v141, (int)v144, v2, 0, 0); v117 = sub_45A900( v142, v141 + 2, *(_DWORD *)(*v144[9] + 20), *(_DWORD *)(*v144[9] + 24), v2, 1342177280, 16, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 372), (int)v117); sub_459B60(*(_DWORD **)(v2 + 372), 1); v144 = sub_8FB140(v143, (int)"SearchBtnNor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"SearchBtnClick"); sub_8FB650(v144, v143, (int)"SearchBtnOver"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 23, 0, 0); v118 = v144[9]; v119 = *(volatile LONG ***)(*v118 + 20); v140 = *(volatile LONG **)(*v118 + 24); v144 = v119; v120 = sub_421050(0); v121 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v120, v2, 0, 0); v122 = *v121; v144 = (volatile LONG **)v121; (*(void (__thiscall **)(volatile LONG *, signed int))(v122 + 488))(v121, 5); v140 = *v144; v123 = sub_4090F0(1735876473); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v140 + 118))(v144, v123); (*((void (__stdcall **)(_DWORD))*v144 + 60))(0); v144 = sub_8FB140(v143, (int)"Btn01Nor", (int)&v142, (int)&v141, 0); sub_8FB650(v144, v143, (int)"Btn01Click"); sub_8FB650(v144, v143, (int)"Btn01Over"); sub_8FE0F0(v142 - v8, v141 - v9, (int)v144, v2, 24, 0, 0); v124 = v144[9]; v125 = *(volatile LONG ***)(*v124 + 20); v140 = *(volatile LONG **)(*v124 + 24); v144 = v125; v126 = sub_421050(0); v127 = sub_8F4A20(v142 - v8, v141 - v9 + 1, (int)v144, (int)v140, v126, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v127 + 488))(v127, 5); v128 = *v127; v129 = sub_4090F0(1920115437); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v128 + 472))(v127, v129); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v127 + 240))(v127, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v148) = 0; sub_40AE10((void **)&v130); v148 = -1; sub_410C00(&v143); result = 1; } else { LABEL_45: LOBYTE(v148) = 0; sub_40AE10((void **)&v130); v148 = -1; sub_410C00(&v143); result = 0; } } else { v12 = (void (__thiscall ***)(_DWORD, signed int))v143; v148 = -1; if ( v143 && !InterlockedDecrement((volatile LONG *)(v143 + 4)) && v12 ) (**v12)(v12, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005E2180) -------------------------------------------------------- char *__thiscall sub_5E2180(int this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 2; if ( 0x3FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 2; if ( (unsigned int)result > v4 ) { if ( 0x3FFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_74E360((const void **)this, v5); } return result; } //----- (005E21E0) -------------------------------------------------------- void *__thiscall sub_5E21E0(void *this, char a2) { void *v2; // esi v2 = this; sub_5E02C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005E2240) -------------------------------------------------------- int __thiscall sub_5E2240(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 0; sub_466AF0(v2, 0, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005E2270) -------------------------------------------------------- int __thiscall sub_5E2270(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 1; sub_466AF0(v2, 1, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005E22A0) -------------------------------------------------------- int __thiscall sub_5E22A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 2; sub_466AF0(v2, 2, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005E22D0) -------------------------------------------------------- int __thiscall sub_5E22D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 3; sub_466AF0(v2, 3, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005E2300) -------------------------------------------------------- int __thiscall sub_5E2300(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 4; sub_466AF0(v2, 4, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005E2390) -------------------------------------------------------- int __thiscall sub_5E2390(_DWORD **this, int a2) { int result; // eax if ( this[120] ) result = (*(int (__stdcall **)(int))(*this[120] + 472))(a2); return result; } //----- (005E23C0) -------------------------------------------------------- int __thiscall sub_5E23C0(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; if ( this[119] ) result = (*(int (__stdcall **)(void *))(*this[119] + 472))(&unk_9E76CF); if ( v1[120] ) result = (*(int (__stdcall **)(void *))(*v1[120] + 472))(&unk_9E76D6); return result; } //----- (005E2410) -------------------------------------------------------- char sub_5E2410() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildWin"); return (char)v0; } //----- (005E2440) -------------------------------------------------------- char sub_5E2440() { int v0; // eax _DWORD *v1; // eax v0 = sub_6D3840(); if ( v0 ) { v1 = (_DWORD *)sub_6D3840(); LOBYTE(v0) = sub_8F82A0(&unk_BA6B10, v1); } return v0; } //----- (005E2460) -------------------------------------------------------- char __thiscall sub_5E2460(_BYTE *this) { _BYTE *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ecx v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( v2 ) { LOBYTE(v2) = sub_6D3020(v2); if ( (_BYTE)v2 ) { if ( !*((_DWORD *)v1 + 90) && !v1[541] ) { LOBYTE(v2) = v1[548]; if ( !(_BYTE)v2 || (_BYTE)v2 == -1 ) { v3 = (_DWORD *)*((_DWORD *)v1 + 74); if ( v3 ) LOBYTE(v2) = sub_4C0AB0(v3); } } } } return (char)v2; } //----- (005E24E0) -------------------------------------------------------- LONG __thiscall sub_5E24E0(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ecx LONG result; // eax v2 = this; v3 = (_DWORD *)this[138]; if ( v3 ) { result = sub_5D4A30(v3, a2); *((_BYTE *)v2 + 541) = a2; } return result; } //----- (005E2510) -------------------------------------------------------- int __thiscall sub_5E2510(_DWORD *this, _DWORD *a2) { int result; // eax this[17] = *a2; this[18] = a2[1]; this[19] = a2[2]; this[20] = a2[3]; result = a2[4]; this[21] = result; return result; } //----- (005E2540) -------------------------------------------------------- char __thiscall sub_5E2540(int this, _DWORD *a2, char a3, char a4) { char result; // al *(_DWORD *)(this + 68) = *a2; *(_DWORD *)(this + 72) = a2[1]; *(_DWORD *)(this + 76) = a2[2]; *(_DWORD *)(this + 80) = a2[3]; *(_DWORD *)(this + 84) = a2[4]; result = a4; *(_BYTE *)(this + 89) = a3; *(_BYTE *)(this + 88) = a4; return result; } //----- (005E2580) -------------------------------------------------------- int __thiscall sub_5E2580(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (005E2600) -------------------------------------------------------- char __thiscall sub_5E2600(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { sub_4E3710(v2[97], v2[99]); sub_4E3710(v2[96], v2[98]); LOBYTE(v3) = sub_4E3710(v2[100], v2[101]); } return v3; } //----- (005E2660) -------------------------------------------------------- int __thiscall sub_5E2660(void *this, int a2) { int result; // eax result = (int)this; if ( this == *(void **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (005E2680) -------------------------------------------------------- char __thiscall sub_5E2680(void *this, int a2) { void *v2; // esi int v3; // edi LONG v4; // ebx unsigned int v5; // eax char result; // al _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // ecx _DWORD *v16; // [esp+Ch] [ebp-4h] v2 = this; if ( this == *(void **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v3 = pt.x; v4 = pt.y; v5 = sub_464F50(*((_DWORD **)v2 + 96)); result = sub_464B60(*((_DWORD **)v2 + 96), v5, &v16); if ( v16 ) { v7 = (_DWORD *)sub_680810(byte_AD9238); if ( *v16 != *v7 || v16[1] != v7[1] || v16[2] != v7[2] || v16[3] != v7[3] || v16[4] != v7[4] || (v8 = (_DWORD *)sub_6D3800(), sub_6D3020(v8)) ) { v9 = (_DWORD *)sub_680810(byte_AD9238); if ( *v16 == *v9 && v16[1] == v9[1] && v16[2] == v9[2] && v16[3] == v9[3] && v16[4] == v9[4] && (v10 = (_DWORD *)sub_6D3800(), sub_6D3020(v10)) ) { (*(void (__stdcall **)(int, LONG))(**((_DWORD **)v2 + 121) + 308))(v3, v4); sub_58DFD0(*((_DWORD **)v2 + 121)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 134)); sub_58D930(*((_DWORD **)v2 + 121), 0); sub_8FA050(&unk_BA6B10, 0, *((_DWORD **)v2 + 121)); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 121) + 240))(1); } else { (*(void (__stdcall **)(int, LONG))(**((_DWORD **)v2 + 121) + 308))(v3, v4); sub_58DFD0(*((_DWORD **)v2 + 121)); v11 = (_DWORD *)sub_6D3800(); if ( sub_6D30A0(v11) ) { sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 126)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 127)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 128)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 129)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 130)); } v12 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v12) ) sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 133)); v13 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v13) ) sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 134)); v14 = (_DWORD *)sub_6D3800(); if ( sub_6D3050(v14) ) sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 131)); sub_58E080(*((_DWORD **)v2 + 121), v3, *((_DWORD *)v2 + 132)); v15 = (_DWORD *)*((_DWORD *)v2 + 121); if ( v15[104] ) { sub_58D930(v15, 0); sub_8FA050(&unk_BA6B10, 0, *((_DWORD **)v2 + 121)); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 121) + 240))(1); } else { result = sub_58DFD0(v15); } } } else { sub_58DFD0(*((_DWORD **)v2 + 121)); result = sub_8FA190(&unk_BA6B10, *((_DWORD *)v2 + 121)); } } return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (005E2950) -------------------------------------------------------- int __thiscall sub_5E2950(_DWORD **this) { _DWORD **v1; // esi v1 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*this[59] + 4))(45, 0, v1); if ( v1[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v1[1] + 20))(45, 0, v1); } return ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v1)[5])(v1, 45, 0, v1); } //----- (005E29A0) -------------------------------------------------------- int __thiscall sub_5E29A0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (005E2A00) -------------------------------------------------------- void __thiscall sub_5E2A00(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(v1[74]); } // AD01E8: using guessed type int dword_AD01E8; //----- (005E2A70) -------------------------------------------------------- char __thiscall sub_5E2A70(_DWORD *this) { int v1; // eax int v2; // ecx v2 = this[74]; v1 = *(_DWORD *)(v2 + 908); if ( v1 ) LOBYTE(v1) = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 908)); return v1; } //----- (005E2A80) -------------------------------------------------------- int __thiscall sub_5E2A80(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edx int v4; // ecx int v5; // eax int v6; // ecx char *v7; // eax char *v8; // eax volatile LONG *v9; // eax char v11[4]; // [esp+4h] [ebp-1Ch] int v12; // [esp+8h] [ebp-18h] int v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] char v16; // [esp+18h] [ebp-8h] v1 = this; v2 = this[17]; v3 = this[19]; v4 = this[18]; *(_DWORD *)v11 = v2; v5 = v1[20]; v13 = v3; v12 = v4; v6 = v1[21]; v14 = v5; v15 = v6; v16 = 0; v1[16] = 0; v7 = (char *)sub_40C190(272432551); v8 = sub_7549E0(v7, v11); v9 = sub_462C30(2, v8); v1[22] = v9; return (**((int (__stdcall ***)(int))v9 + 58))((int)(v1 + 2)); } //----- (005E2B00) -------------------------------------------------------- void __thiscall sub_5E2B00(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax int v7; // eax int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx int v12; // [esp+4h] [ebp-18h] int v13; // [esp+8h] [ebp-14h] int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] int v16; // [esp+14h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[20]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 && !*a3 ) { v7 = this[17]; v8 = this[15]; v9 = v4[16]; v14 = v7; v12 = v8; v10 = v4[18]; v13 = v9; v11 = v4[19]; v15 = v10; v16 = v11; sub_6F36A0(&off_AB7F2C, 29, 14, &v12, 0x14u); v4[14] = 1; } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005E2B80) -------------------------------------------------------- int __thiscall sub_5E2B80(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int v3; // eax int v4; // ecx int v5; // eax int v6; // ecx const CHAR *v7; // eax bool v8; // zf char *v9; // eax char *v10; // eax volatile LONG *v11; // eax const CHAR *v12; // ST10_4 char *v13; // eax char *v14; // eax char v16[4]; // [esp+4h] [ebp-1Ch] int v17; // [esp+8h] [ebp-18h] int v18; // [esp+Ch] [ebp-14h] int v19; // [esp+10h] [ebp-10h] int v20; // [esp+14h] [ebp-Ch] char v21; // [esp+18h] [ebp-8h] v1 = this; v2 = this[19]; v3 = this[17]; v4 = this[18]; v18 = v2; LOBYTE(v2) = *((_BYTE *)v1 + 89); *(_DWORD *)v16 = v3; v5 = v1[20]; v17 = v4; v6 = v1[21]; v19 = v5; v20 = v6; v21 = 0; v7 = sub_5E8560(v2); v8 = *((_BYTE *)v1 + 89) == 6; v1[16] = 0; if ( v8 ) { v9 = (char *)sub_40C190(1921728424); v10 = sub_7549E0(v9, v16); v11 = sub_462C30(2, v10); } else { v12 = v7; v13 = (char *)sub_40C190(-2064529935); v14 = sub_7549E0(v13, v16, v12); v11 = sub_462C30(2, v14); } v1[23] = v11; return (**(int (__thiscall ***)(int, int))(v1[23] + 232))(v1[23] + 232, (int)(v1 + 2)); } //----- (005E2C40) -------------------------------------------------------- char __thiscall sub_5E2C40(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // edi int v6; // eax _DWORD *v7; // esi char *v8; // eax const CHAR *v10; // eax char *v11; // eax char *v12; // eax char *v13; // eax v5 = this; if ( a2 == 29 && a3 == 23 ) { v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v7 = (_DWORD *)v6; switch ( *(unsigned __int16 *)(a5 + 21) ) { case 0xC8Au: v13 = (char *)sub_40A910(1241690295); sub_462C30(1, v13); v5[5] = 2; return 0; case 0xCE8u: case 0xCE9u: case 0xCEAu: case 0xCEBu: case 0xCECu: v8 = (char *)sub_40C190(-1109520314); sub_462C30(1, v8); v5[5] = 2; return 0; case 0xCEEu: if ( !v6 ) goto LABEL_12; v10 = sub_40C190(-1649101233); goto LABEL_11; case 0xCEFu: if ( v6 ) { v10 = sub_4090F0(-544452229); LABEL_11: sub_492060(v7, (int)v10); } goto LABEL_12; case 0xCFBu: v11 = (char *)sub_40A910(1081963898); v12 = sub_7549E0(v11, 20); sub_462C30(1, v12); v5[5] = 2; return 0; default: LABEL_12: v5[5] = 2; break; } } return 0; } //----- (005E2DD0) -------------------------------------------------------- char __thiscall sub_5E2DD0(_WORD *this) { _WORD *v1; // esi char *v2; // eax char *v3; // eax v1 = this; if ( this[44] >= 0x14u ) return 1; v2 = (char *)sub_40A910(1081963898); v3 = sub_7549E0(v2, 20); sub_462C30(1, v3); *((_DWORD *)v1 + 5) = 2; return 0; } //----- (005E2E10) -------------------------------------------------------- char __thiscall sub_5E2E10(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax char *v3; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D3120(v2) ) return sub_8F82A0(&unk_BA6B10, v1[124]); v3 = (char *)sub_40C190(71048826); return (unsigned int)sub_462C30(1, v3); } //----- (005E2E50) -------------------------------------------------------- int __thiscall sub_5E2E50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[96]; v2 = (_DWORD *)this[98]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (005E2E90) -------------------------------------------------------- int __thiscall sub_5E2E90(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[97]; v2 = (_DWORD *)this[99]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (005E2ED0) -------------------------------------------------------- int __thiscall sub_5E2ED0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[100]; v2 = (_DWORD *)this[101]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (005E2F10) -------------------------------------------------------- const CHAR *__stdcall sub_5E2F10(int a1) { const CHAR *result; // eax switch ( a1 ) { case 0: result = sub_4090F0(588792946); break; case 1: result = sub_4090F0(-556252126); break; case 2: result = sub_4090F0(-736146406); break; case 3: result = sub_4090F0(757612912); break; case 10: result = sub_4090F0(1735305603); break; case 11: result = sub_4090F0(-1128199995); break; case 12: result = sub_4090F0(1803460222); break; case 13: result = sub_4090F0(1987026041); break; default: result = 0; break; } return result; } //----- (005E2FF0) -------------------------------------------------------- void __thiscall sub_5E2FF0(_DWORD *this, unsigned __int8 *a2) { _DWORD *v2; // esi int v3; // edx int v4; // eax signed int v5; // ecx const char *v6; // eax const char *v7; // eax const char *v8; // eax v2 = this; v3 = this[136]; if ( v3 ) { v4 = this[138]; if ( v4 ) { v5 = *a2; if ( v5 <= 255 ) { if ( v5 == 255 ) { *(_DWORD *)(v4 + 272) = 0; *(_DWORD *)(v2[136] + 272) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[136] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[136] + 240))(1); *(_BYTE *)(v2[136] + 380) = 1; } else { switch ( v5 ) { case 0: *(_DWORD *)(v4 + 272) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[136] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[136] + 240))(0); sub_5E24E0(v2, 0); break; case 1: if ( *((_BYTE *)v2 + 540) ) { if ( !*(_DWORD *)(v4 + 272) ) *(_DWORD *)(v4 + 272) = dword_AD01E8; v7 = sub_4090F0(-1058125271); sub_8F2EA0((void **)v2[138], v7); sub_5E24E0(v2, 1); goto LABEL_10; } break; case 3: if ( !*(_DWORD *)(v4 + 272) ) *(_DWORD *)(v4 + 272) = dword_AD01E8; v6 = sub_4090F0(1335994234); sub_8F2EA0((void **)v2[138], v6); sub_5E24E0(v2, 0); LABEL_10: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[136] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[136] + 240))(0); break; case 4: if ( !*(_DWORD *)(v3 + 272) ) *(_DWORD *)(v3 + 272) = dword_AD01E8; v8 = sub_4090F0(-1058125271); sub_8F2EA0((void **)v2[136], v8); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[136] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[136] + 240))(1); *(_BYTE *)(v2[136] + 380) = 0; break; default: return; } } } } } } // AD01E8: using guessed type int dword_AD01E8; //----- (005E31D0) -------------------------------------------------------- void __thiscall sub_5E31D0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax int v7; // edx int v8; // eax int v9; // edx int v10; // eax int v11; // [esp+4h] [ebp-1Ch] int v12; // [esp+8h] [ebp-18h] int v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] char v16; // [esp+18h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[21]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { this[3] = 2; } else if ( sub_5E2DD0((_WORD *)this - 4) ) { v7 = v4[15]; v8 = v4[16]; v16 = *((_BYTE *)v4 + 81); v13 = v4[17]; v11 = v7; v9 = v4[18]; v12 = v8; v10 = v4[19]; v14 = v9; v15 = v10; sub_6F36A0(&off_AB7F2C, 29, 22, &v11, 0x15u); v4[14] = 1; } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005E3280) -------------------------------------------------------- void __thiscall sub_5E3280(int this, int a2) { int v2; // edi int v3; // eax int v4; // edx int v5; // eax int v6; // ebx int v7; // eax CHAR *v8; // eax char *v9; // eax CHAR *v10; // eax unsigned int v11; // eax int v12; // ST28_4 int v13; // ST24_4 int v14; // ST20_4 const char *v15; // eax _DWORD *v16; // ecx char v17; // [esp+14h] [ebp-3Ch] int v18; // [esp+34h] [ebp-1Ch] int v19; // [esp+38h] [ebp-18h] int v20; // [esp+3Ch] [ebp-14h] int v21; // [esp+40h] [ebp-10h] int v22; // [esp+44h] [ebp-Ch] char v23; // [esp+48h] [ebp-8h] v2 = this; if ( *(_DWORD *)(this + 384) && (!*(_BYTE *)(this + 408) || *(_BYTE *)(a2 + 91) & 1) && *(_BYTE *)(a2 + 96) ) { v3 = *(_DWORD *)a2; v19 = *(_DWORD *)(a2 + 4); v4 = *(_DWORD *)(a2 + 12); v18 = v3; v5 = *(_DWORD *)(a2 + 8); v21 = v4; v20 = v5; v22 = *(_DWORD *)(a2 + 16); v23 = 0; v6 = ((int (__stdcall *)(int *))loc_466CA0)(&v18); v7 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a2 + 95)); if ( v7 ) v8 = (CHAR *)(v7 + 21); else v8 = (CHAR *)&byte_9A8050; sub_4661A0(*(_DWORD **)(v2 + 384), v6, 1, v8); v9 = sub_7549E0("%d", *(unsigned __int8 *)(a2 + 96)); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 2, v9); v10 = (CHAR *)sub_5E8560(*(_BYTE *)(a2 + 20)); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 3, v10); v11 = *(_DWORD *)(a2 + 91); v12 = (*(_DWORD *)(a2 + 91) >> 16) & 0x1F; v13 = (unsigned __int16)v11 >> 12; v14 = (v11 >> 1) & 0x7FF; v15 = sub_40A910(1296251015); stru_ACEBE4.tm_mon = v13 - 1; stru_ACEBE4.tm_year = v14 - 1900; stru_ACEBE4.tm_mday = v12; strftime(&v17, 0x20u, v15, &stru_ACEBE4); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 4, &v17); sub_464B20(*(_DWORD **)(v2 + 384), v6, a2); sub_464BA0(*(_DWORD **)(v2 + 384), v6, 1); v16 = *(_DWORD **)(v2 + 384); if ( *(_BYTE *)(a2 + 91) & 1 ) sub_464BE0(v16, v6, 255, 255, 0); else sub_464BE0(v16, v6, 200, 200, 200); } } // AC9C84: using guessed type int dword_AC9C84; //----- (005E3720) -------------------------------------------------------- void __thiscall sub_5E3720(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx int v3; // eax _DWORD *v4; // ecx int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // ebx int v9; // ST2C_4 int v10; // ST28_4 const char *v11; // eax int v12; // ebx _DWORD *v13; // [esp+4h] [ebp-50h] CHAR *v14; // [esp+8h] [ebp-4Ch] int v15; // [esp+14h] [ebp-40h] char v16; // [esp+18h] [ebp-3Ch] int v17; // [esp+38h] [ebp-1Ch] int v18; // [esp+3Ch] [ebp-18h] int v19; // [esp+40h] [ebp-14h] int v20; // [esp+44h] [ebp-10h] int v21; // [esp+48h] [ebp-Ch] char v22; // [esp+4Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[100]; if ( v2 ) { sub_466A50(v2); v3 = sub_6D3800(); if ( v3 ) { v4 = *(_DWORD **)(v3 + 2764); v5 = *(_DWORD *)(v3 + 2772); if ( v5 ) { v15 = v5; while ( 1 ) { v6 = v4[2]; v7 = (_DWORD *)*v4; v17 = *(_DWORD *)(v6 + 8); v18 = *(_DWORD *)(v6 + 12); v13 = v7; v19 = *(_DWORD *)(v6 + 16); v20 = *(_DWORD *)(v6 + 20); v21 = *(_DWORD *)(v6 + 24); v22 = 0; v14 = (CHAR *)sub_5E2F10(*(_DWORD *)(v6 + 28)); if ( v14 ) { v8 = *(unsigned __int8 *)(v6 + 7); v9 = *(unsigned __int8 *)(v6 + 6); v10 = *(unsigned __int16 *)(v6 + 4); v11 = sub_40A910(1296251015); stru_ACEBE4.tm_year = v10 - 1900; stru_ACEBE4.tm_mon = v9 - 1; stru_ACEBE4.tm_mday = v8; strftime(&v16, 0x20u, v11, &stru_ACEBE4); v12 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[100], &v16); sub_4661A0((_DWORD *)v1[100], v12, 1, &v17); sub_4661A0((_DWORD *)v1[100], v12, 2, v14); sub_464B20((_DWORD *)v1[100], v12, v6); sub_464BA0((_DWORD *)v1[100], v12, 1); } if ( !--v15 ) break; v4 = v13; } } sub_464D00((_DWORD *)v1[100], 4); sub_464DA0((_DWORD *)v1[100], 0, 5); sub_464DA0((_DWORD *)v1[100], 1u, 4); sub_464DA0((_DWORD *)v1[100], 2u, 4); sub_465130((_DWORD *)v1[100]); } } } //----- (005E38C0) -------------------------------------------------------- void __thiscall sub_5E38C0(int this, char a2) { int v2; // esi void *v3; // ecx _DWORD *v4; // eax int v5; // [esp+0h] [ebp-4h] v2 = this; if ( *(_DWORD *)(this + 544) ) { if ( a2 ) { if ( !*(_DWORD *)(this + 360) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 544) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 544) + 240))(0); v3 = *(void **)(v2 + 552); if ( v3 ) sub_42A5C0(v3, (unsigned __int8 *)(v2 + 549), (_BYTE *)(v2 + 550), 1); sub_5E2FF0((_DWORD *)v2, (unsigned __int8 *)(v2 + 548)); } } else { v4 = (_DWORD *)sub_6D3800(); if ( v4 ) { if ( *(_DWORD *)(v2 + 360) || !(unsigned __int8)sub_6D3010(v4) ) { (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v2 + 544) + 256))(0, v5); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v2 + 544) + 240))(0); } else { (*(void (__stdcall **)(bool, int))(**(_DWORD **)(v2 + 544) + 256))(*(_BYTE *)(v2 + 540) == 0, v5); (*(void (__cdecl **)(bool))(**(_DWORD **)(v2 + 544) + 240))(*(_BYTE *)(v2 + 540) == 0); } if ( *(_DWORD *)(v2 + 552) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 552) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 552) + 240))(0); } } } } } //----- (005E39F0) -------------------------------------------------------- void __thiscall sub_5E39F0(int this, _WORD *a2, __int16 a3) { char v3; // bl int v4; // esi unsigned __int8 *v5; // eax void *v6; // ecx int *v7; // eax int v8; // eax _WORD *v9; // eax v3 = a3; v4 = this; v5 = (unsigned __int8 *)(this + 549); *(_WORD *)(this + 549) = *a2; v6 = *(void **)(this + 552); *(_BYTE *)(v4 + 548) = v3; if ( v6 && sub_42A5C0(v6, v5, (_BYTE *)(v4 + 550), 1) ) { *(_BYTE *)(v4 + 540) = 1; v7 = (int *)sub_680810(byte_AD9238); v8 = sub_664630(dword_AD8C90, *v7, v7[1], v7[2], v7[3], v7[4]); if ( v8 ) { if ( v3 == 1 ) { v9 = *(_WORD **)(v8 + 676); a3 = -1; sub_6D8C90(v9, &a3); } else { sub_6D8C90(*(_WORD **)(v8 + 676), a2); } if ( *(_DWORD *)(v4 + 360) ) sub_5E38C0(v4, 0); else sub_5E38C0(v4, *(_BYTE *)(v4 + 540)); } } else { *(_BYTE *)(v4 + 540) = 0; } } //----- (005E3AE0) -------------------------------------------------------- void __thiscall sub_5E3AE0(_BYTE *this) { this[540] = 0; sub_5E38C0((int)this, 0); } //----- (005E3AF0) -------------------------------------------------------- void __thiscall sub_5E3AF0(_DWORD *this) { int v1; // esi _DWORD *v2; // ecx int v3; // ebx signed int v4; // edi int v5; // [esp+4h] [ebp-4h] v1 = (int)this; v2 = (_DWORD *)this[96]; if ( v2 ) { sub_466A50(v2); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 384) + 260))() ) { v3 = sub_6D1A90(); v4 = 0; if ( *(_WORD *)(v3 + 4) > 0u ) { v5 = v3 + 6; do { if ( *(_BYTE *)(v1 + 409) ) sub_5E3280(v1, v5); v5 += 110; ++v4; } while ( v4 < *(unsigned __int16 *)(v3 + 4) ); } sub_466AF0(*(_DWORD **)(v1 + 384), *(_DWORD *)(v1 + 344), 0, 0); sub_464D00(*(_DWORD **)(v1 + 384), 4); sub_464DA0(*(_DWORD **)(v1 + 384), 0, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 1u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 2u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 3u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 4u, 5); sub_465130(*(_DWORD **)(v1 + 384)); sub_4638F0(*(_DWORD **)(v1 + 392), *(_DWORD *)(*(_DWORD *)(v1 + 384) + 336)); } } } //----- (005E3C00) -------------------------------------------------------- void __thiscall sub_5E3C00(_DWORD *this, _DWORD *a2, _DWORD *a3) { int v3; // eax int v4; // edi int v5; // edx _DWORD *v6; // ecx _DWORD *v7; // eax _DWORD *v8; // [esp+0h] [ebp-4h] v8 = this; v3 = sub_6D1A90(); if ( v3 ) { v4 = *(unsigned __int16 *)(v3 + 4); v5 = 0; if ( v4 > 0 ) { v6 = (_DWORD *)(v3 + 14); while ( *(v6 - 2) != *a2 || *(v6 - 1) != a2[1] || *v6 != a2[2] || v6[1] != a2[3] || v6[2] != a2[4] ) { ++v5; v6 = (_DWORD *)((char *)v6 + 110); if ( v5 >= v4 ) return; } v7 = (_DWORD *)(110 * v5 + v3 + 6); *v7 = *a3; v7[1] = a3[1]; v7[2] = a3[2]; v7[3] = a3[3]; v7[4] = a3[4]; sub_5E3AF0(v8); } } } //----- (005E3CA0) -------------------------------------------------------- char __thiscall sub_5E3CA0(_DWORD **this, int a2, int a3, int a4, int a5) { _DWORD **v5; // ebx int v6; // edx int v7; // ecx int v8; // edx int v9; // ecx int v10; // eax char *v11; // eax char *v12; // eax char *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax char *v16; // eax char *v17; // edi void *v19; // [esp-1Ch] [ebp-48h] int v20; // [esp-18h] [ebp-44h] int v21; // [esp-14h] [ebp-40h] int v22; // [esp-10h] [ebp-3Ch] int v23; // [esp-Ch] [ebp-38h] int v24; // [esp-8h] [ebp-34h] int v25; // [esp-4h] [ebp-30h] void **v26; // [esp+Ch] [ebp-20h] char v27[4]; // [esp+10h] [ebp-1Ch] int v28; // [esp+14h] [ebp-18h] int v29; // [esp+18h] [ebp-14h] int v30; // [esp+1Ch] [ebp-10h] int v31; // [esp+20h] [ebp-Ch] char v32; // [esp+24h] [ebp-8h] v5 = this; if ( a2 == 29 && a3 == 15 ) { v6 = *(_DWORD *)(a5 + 4); *(_DWORD *)v27 = *(_DWORD *)a5; v7 = *(_DWORD *)(a5 + 8); v28 = v6; v8 = *(_DWORD *)(a5 + 12); v29 = v7; v9 = *(_DWORD *)(a5 + 16); v10 = *(unsigned __int16 *)(a5 + 20); v30 = v8; v31 = v9; v32 = 0; if ( (_WORD)v10 == 3137 ) { v14 = (_DWORD *)sub_6D3800(); sub_6D6D10(v14); v15 = (_DWORD *)sub_715490(); sub_7173C0(v15); sub_6D3E70(); sub_715440(); v25 = (int)v27; v16 = (char *)sub_40C190(-992629261); v17 = sub_7549E0(v16, v27); if ( v5[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v5[3] + 4))(25, v17, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v5[3] + 20))(25, v17, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v5[2][5])(v5 + 2, 25, v17, v5 + 2); } else if ( v10 == 3321 ) { v13 = (char *)sub_40A910(1441310432); sub_462CA0(1, v13); } else if ( v10 == 12695 ) { v26 = &v19; sub_4019E0(&v19, "Guild_CannotLeaveTime"); v25 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v19, v20, v21, v22, v23, v24, v25); v12 = (char *)sub_4090F0(931152775); sub_462CA0(1, v12); } else { v11 = (char *)sub_40C190(1936350078); sub_462CA0(1, v11); } v5[5] = (_DWORD *)2; } return 0; } //----- (005E3E10) -------------------------------------------------------- volatile LONG *sub_5E3E10() { _DWORD *v0; // eax char *v1; // eax volatile LONG *result; // eax _DWORD *v3; // eax char *v4; // eax v0 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v0) ) { v3 = (_DWORD *)sub_6D3800(); if ( sub_6D30E0(v3) ) { result = (volatile LONG *)sub_4B2590(); } else { v4 = (char *)sub_40C190(-2133472293); result = sub_462C30(1, v4); } } else { v1 = (char *)sub_40C190(1988193177); result = sub_462C30(1, v1); } return result; } //----- (005E3E70) -------------------------------------------------------- void __thiscall sub_5E3E70(unsigned __int8 *this) { unsigned __int8 *v1; // esi _DWORD *v2; // eax bool v3; // al void (__stdcall *v4)(signed int); // edx _DWORD *v5; // eax int v6; // ebx unsigned __int16 *v7; // eax _DWORD *v8; // eax struct tm *v9; // eax char *v10; // eax int *v11; // eax int v12; // edi int v13; // ST28_4 char *v14; // eax char *v15; // eax char v16; // al const CHAR *v17; // eax char v18; // al int v19; // edi const CHAR *v20; // ST28_4 const CHAR *v21; // eax char *v22; // eax int v23; // edi int v24; // ST28_4 char *v25; // eax char *v26; // eax int v27; // edi int v28; // ST28_4 char *v29; // eax char *v30; // eax int v31; // edi int v32; // ST28_4 int v33; // ST24_4 char *v34; // eax char *v35; // eax signed __int64 v36; // kr08_8 int v37; // edi char *v38; // eax char *v39; // eax int v40; // edi int v41; // ST28_4 int v42; // ST24_4 char *v43; // eax char *v44; // eax int v45; // edi signed int v46; // ebx int v47; // edi int v48; // eax int v49; // ecx int v50; // eax int v51; // ecx const CHAR *v52; // eax const CHAR *v53; // eax const CHAR *v54; // eax char *v55; // eax const CHAR *v56; // eax char *v57; // eax const CHAR *v58; // eax char *v59; // eax int v60; // eax int v61; // eax int v62; // eax const CHAR *v63; // edi int v64; // eax rsize_t v65; // edi unsigned int v66; // eax int v67; // ebx const void *v68; // eax int v69; // ecx void *v70; // eax _DWORD *v71; // eax int v72; // eax const char *v73; // eax void **v74; // ecx int v75; // eax HDC hdc; // [esp+10h] [ebp-494h] __time64_t Time; // [esp+14h] [ebp-490h] char v78[4]; // [esp+1Ch] [ebp-488h] char v79; // [esp+20h] [ebp-484h] rsize_t MaxCount; // [esp+24h] [ebp-480h] void *Src; // [esp+28h] [ebp-47Ch] rsize_t v82; // [esp+38h] [ebp-46Ch] unsigned int v83; // [esp+3Ch] [ebp-468h] char v84; // [esp+44h] [ebp-460h] char v85; // [esp+45h] [ebp-45Fh] _BYTE v86[256]; // [esp+244h] [ebp-260h] char Dst; // [esp+344h] [ebp-160h] char v88; // [esp+345h] [ebp-15Fh] char v89; // [esp+444h] [ebp-60h] char v90; // [esp+464h] [ebp-40h] char v91; // [esp+478h] [ebp-2Ch] int v92; // [esp+47Ch] [ebp-28h] int v93; // [esp+480h] [ebp-24h] int v94; // [esp+484h] [ebp-20h] int v95; // [esp+488h] [ebp-1Ch] int v96; // [esp+48Ch] [ebp-18h] char v97; // [esp+490h] [ebp-14h] int v98; // [esp+4A0h] [ebp-4h] v1 = this; sub_5E3AF0(this); if ( *((_DWORD *)v1 + 90) ) goto LABEL_65; v2 = (_DWORD *)sub_6D3800(); v3 = sub_6D3120(v2); v4 = *(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 125) + 256); if ( v3 ) v4(1); else v4(0); MaxCount = sub_6D1A90(); v5 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v5) ) { v6 = sub_6D3800(); if ( v6 ) { v7 = (unsigned __int16 *)sub_6D1A90(); v8 = (_DWORD *)sub_6D1A50(v7); if ( v8 && *(_DWORD *)(v6 + 56) ) { sub_4169E0(v8, (int)&v90); v91 = 0; v9 = _localtime32((const __time32_t *)(v6 + 56)); sub_4EB700(&Time, v9->tm_year + 1900, v9->tm_mon + 1, v9->tm_mday, 0, 0, 0, -1); v10 = (char *)sub_40A910(1296251015); v11 = (int *)sub_5E8BB0(&Time, (int)v78, v10); v12 = **((_DWORD **)v1 + 107); v13 = *v11; v98 = 0; v14 = (char *)sub_4090F0(387646050); v15 = sub_7549E0(v14, &v90, v13); (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(*((_DWORD *)v1 + 107), v15); v98 = -1; ((void (__thiscall *)(char *))loc_5E84E0)(v78); (*(void (__cdecl **)(signed int))(**((_DWORD **)v1 + 107) + 256))(1); } v16 = *(_BYTE *)(v6 + 40); if ( v16 || *(_BYTE *)(v6 + 41) != 1 ) { if ( v16 != 1 || *(_BYTE *)(v6 + 41) != 1 ) { v18 = *(_BYTE *)(v6 + 41); switch ( v18 ) { case 2: v17 = sub_40C190(1587899366); break; case 3: v17 = sub_40C190(1420849369); break; case 4: v17 = sub_40C190(1873504154); break; default: LABEL_24: v23 = **((_DWORD **)v1 + 109); v24 = *(unsigned __int16 *)(v6 + 98); v25 = (char *)sub_4090F0(-1059932386); v26 = sub_7549E0(v25, v24); (*(void (__thiscall **)(_DWORD, char *))(v23 + 472))(*((_DWORD *)v1 + 109), v26); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 109) + 256))(1); v27 = **((_DWORD **)v1 + 110); v28 = *(_DWORD *)(v6 + 42); v29 = (char *)sub_4090F0(-623060959); v30 = sub_7549E0(v29, v28); (*(void (__thiscall **)(_DWORD, char *))(v27 + 472))(*((_DWORD *)v1 + 110), v30); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 110) + 256))(1); v31 = **((_DWORD **)v1 + 111); v32 = *(unsigned __int16 *)(MaxCount + 4); v33 = sub_6D1A30((unsigned __int16 *)MaxCount); v34 = (char *)sub_40C190(-861724368); v35 = sub_7549E0(v34, v33, v32); (*(void (__thiscall **)(_DWORD, char *))(v31 + 472))(*((_DWORD *)v1 + 111), v35); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 111) + 256))(1); v36 = *(signed int *)(sub_715490() + 1184); *(_DWORD *)v78 = (signed int)((double)v36 / 3600.0); Time = v36 % 3600; v37 = **((_DWORD **)v1 + 112); v38 = (char *)sub_40A910(-271590143); v39 = sub_7549E0(v38, (signed int)((double)v36 / 3600.0), (signed int)((double)(v36 % 3600) / 60.0)); (*(void (__thiscall **)(_DWORD, char *))(v37 + 472))(*((_DWORD *)v1 + 112), v39); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 112) + 256))(1); v40 = **((_DWORD **)v1 + 113); v41 = *(_DWORD *)(v6 + 2740); v42 = *(_DWORD *)(v6 + 2736); v43 = (char *)sub_40A910(-2137268247); v44 = sub_7549E0(v43, v42, v41); (*(void (__thiscall **)(_DWORD, char *))(v40 + 472))(*((_DWORD *)v1 + 113), v44); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 113) + 256))(1); goto LABEL_27; } } else { v17 = sub_40C190(593260685); } } else { v17 = sub_40C190(-1444300238); } if ( v17 ) { v19 = **((_DWORD **)v1 + 108); v20 = v17; v21 = sub_40C190(-573972700); v22 = sub_7549E0("%s : %s", v21, v20); (*(void (__thiscall **)(_DWORD, char *))(v19 + 472))(*((_DWORD *)v1 + 108), v22); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 108) + 256))(1); } goto LABEL_24; } } else { v45 = (int)(v1 + 428); v46 = 7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v45 + 256))(0); v45 += 4; --v46; } while ( v46 ); } LABEL_27: sub_466A50(*((_DWORD **)v1 + 97)); v47 = sub_6D3800(); if ( (unsigned __int8)sub_6D3010((_DWORD *)v47) && *(_BYTE *)(v47 + 567) ) { v48 = *(_DWORD *)(v47 + 547); v49 = *(_DWORD *)(v47 + 551); v94 = *(_DWORD *)(v47 + 555); v92 = v48; v50 = *(_DWORD *)(v47 + 559); v93 = v49; v51 = *(_DWORD *)(v47 + 563); v95 = v50; v96 = v51; v97 = 0; v84 = 0; memset(&v85, 0, 0x1FFu); v52 = sub_40A910(439042339); sprintf(&v84, "%s", v52); strftime(&v89, 0x1Fu, &v84, (const struct tm *)(v47 + 511)); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*((_DWORD *)v1 + 97), &unk_9E76BF); v53 = sub_40C190(-549510319); ((void (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(*((_DWORD *)v1 + 97), v53); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*((_DWORD *)v1 + 97), &unk_9E76C6); v54 = sub_40C190(-2037134623); v55 = sub_7549E0("%s : %s", v54, &v92); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*((_DWORD *)v1 + 97), v55); v56 = sub_40C190(-2087492459); v57 = sub_7549E0("%s : %s", v56, &v89); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*((_DWORD *)v1 + 97), v57); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*((_DWORD *)v1 + 97), &unk_9E76C7); v58 = sub_40C190(-438189863); v59 = sub_7549E0("%s :", v58); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*((_DWORD *)v1 + 97), v59); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*((_DWORD *)v1 + 97), &unk_9E76CE); strcpy(&v84, (const char *)(v47 + 567)); v60 = *((_DWORD *)v1 + 97); if ( (*(_DWORD *)(v60 + 300) - *(_DWORD *)(v60 + 296)) >> 2 ) { v61 = **(_DWORD **)(v60 + 296); if ( (*(_DWORD *)(v61 + 336) - *(_DWORD *)(v61 + 332)) >> 2 ) v62 = **(_DWORD **)(v61 + 332); else v62 = 0; *(_DWORD *)v78 = v62; } else { *(_DWORD *)v78 = 0; } hdc = *(HDC *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)v78 + 288) + 312) + 192); v86[0] = 0; memset(&v86[1], 0, 0xFFu); v83 = 15; v82 = 0; LOBYTE(Src) = 0; sub_4018E0(&Src, &v84, strlen(&v84)); v98 = 1; v79 = 10; while ( 1 ) { memset(v86, 0, 0x100u); v63 = (const CHAR *)Src; if ( v83 < 0x10 ) v63 = (const CHAR *)&Src; v64 = (*(int (**)(void))(**(_DWORD **)v78 + 144))(); v65 = sub_8F5700((int)v86, v63, hdc, v64 - 10); v66 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v79, 0x100000000ui64); HIDWORD(Time) = v66; if ( !v65 ) break; if ( v66 > v65 || (MaxCount = v66, v66 == -1) ) MaxCount = v65; Dst = 0; memset(&v88, 0, 0xFFu); v67 = MaxCount; if ( v82 < MaxCount ) v67 = v82; v68 = Src; if ( v83 < 0x10 ) v68 = &Src; memcpy_s(&Dst, 0x100u, v68, v67); v69 = *((_DWORD *)v1 + 97); *(&Dst + v67) = 0; ((void (__thiscall *)(int, char *))loc_466CA0)(v69, &Dst); if ( HIDWORD(Time) > v65 ) sub_4014F0(&Src, 0, MaxCount); else sub_4014F0(&Src, 0, MaxCount + 1); } v70 = Src; if ( v83 < 0x10 ) v70 = &Src; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*((_DWORD *)v1 + 97), v70); sub_464D00(*((_DWORD **)v1 + 97), 4); sub_465130(*((_DWORD **)v1 + 97)); sub_4638F0(*((_DWORD **)v1 + 99), *(_DWORD *)(*((_DWORD *)v1 + 96) + 336)); v98 = -1; if ( v83 >= 0x10 ) operator delete(Src); v83 = 15; v82 = 0; LOBYTE(Src) = 0; } v71 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v71) ) { sub_5E2FF0(v1, v1 + 548); } else { if ( v1[540] ) { v75 = *((_DWORD *)v1 + 138); if ( !v75 ) return; if ( !*(_DWORD *)(v75 + 272) ) *(_DWORD *)(v75 + 272) = dword_AD01E8; v73 = sub_4090F0(1855892882); v74 = (void **)*((_DWORD *)v1 + 138); } else { v72 = *((_DWORD *)v1 + 136); if ( !*(_DWORD *)(v72 + 272) ) *(_DWORD *)(v72 + 272) = dword_AD01E8; v73 = sub_4090F0(1855892882); v74 = (void **)*((_DWORD *)v1 + 136); } sub_8F2EA0(v74, v73); } LABEL_65: sub_5E3720(v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (005E4780) -------------------------------------------------------- void __thiscall sub_5E4780(unsigned __int8 *this, int *a2) { unsigned __int8 *v2; // edi int v3; // eax int v4; // edx int v5; // ecx int v6; // edx int v7; // ecx int v8; // ST00_4 int v9; // ST04_4 int v10; // ST08_4 int v11; // ST0C_4 int v12; // ST10_4 _DWORD *v13; // eax int v14; // ST08_4 int v15; // [esp+8h] [ebp-18h] int v16; // [esp+Ch] [ebp-14h] int v17; // [esp+10h] [ebp-10h] int v18; // [esp+14h] [ebp-Ch] int v19; // [esp+18h] [ebp-8h] v2 = this; v3 = sub_6D1A90(); v4 = a2[1]; v15 = *a2; v5 = a2[2]; v16 = v4; v6 = a2[3]; v17 = v5; v7 = a2[4]; v18 = v6; v19 = v7; if ( !v3 || (*(int (__thiscall **)(int, int *))(*(_DWORD *)v3 + 36))(v3, &v15) ) { v8 = v15; v9 = v16; v10 = v17; v11 = v18; v12 = v19; v13 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715390(v13, v8, v9, v10, v11, v12) ) { v14 = sub_715490() + 1152; *(_DWORD *)(v14 + 16) = 0; *(_DWORD *)(v14 + 12) = 0; *(_DWORD *)(v14 + 8) = 0; *(_DWORD *)(v14 + 4) = 0; *(_DWORD *)v14 = 0; strncpy((char *)v14, &byte_9E76D7, 0x14u); } sub_5E3E70(v2); } } //----- (005E4850) -------------------------------------------------------- LONG __thiscall sub_5E4850(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi _DWORD *v11; // ST08_4 _DWORD *v12; // ST04_4 char v14; // [esp+10h] [ebp-18h] _DWORD *v15; // [esp+14h] [ebp-14h] _DWORD *v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v1 = this; v16 = this; *this = &GuildWin::`vftable'; this[58] = &GuildWin::`vftable'; v2 = this[134]; v17 = 9; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[133]; LOBYTE(v17) = 8; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[132]; LOBYTE(v17) = 7; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[131]; LOBYTE(v17) = 6; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[130]; LOBYTE(v17) = 5; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[129]; LOBYTE(v17) = 4; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[128]; LOBYTE(v17) = 3; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[127]; LOBYTE(v17) = 2; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[126]; LOBYTE(v17) = 1; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v15 = v1 + 91; v11 = (_DWORD *)v1[92]; v12 = *(_DWORD **)v1[92]; LOBYTE(v17) = 10; sub_6CDE90(v1 + 91, (int *)&v14, v12, v11); operator delete((void *)v1[92]); v17 = -1; return sub_8F10F0(v1); } // 9E8028: using guessed type void *GuildWin::`vftable'; // 9E8044: using guessed type void *GuildWin::`vftable'; //----- (005E4A40) -------------------------------------------------------- void __thiscall sub_5E4A40(unsigned __int8 *this, int a2, int *a3, int a4) { unsigned __int8 *v4; // esi _DWORD *v5; // ecx signed int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax _DWORD *v14; // eax _DWORD *v15; // edi _DWORD *v16; // eax const CHAR *v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax _DWORD *v20; // esi _DWORD *v21; // eax const CHAR *v22; // edi int v23; // [esp+4h] [ebp-20h] char v24; // [esp+8h] [ebp-1Ch] char v25; // [esp+1Ch] [ebp-8h] v4 = this; v5 = (_DWORD *)*((_DWORD *)this + 38); if ( v5 ) { v6 = sub_464F50(v5); if ( v6 >= 0 ) { switch ( a2 ) { case 9: case 12: if ( v4 - 232 == *(unsigned __int8 **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return; case 15: sub_464B60(*((_DWORD **)v4 + 38), v6, &v23); v7 = *a3; if ( *a3 > 1011 ) { if ( v7 != 1012 ) return; v19 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v19) ) { v20 = (_DWORD *)sub_5E8A70(); v21 = (_DWORD *)sub_680810(byte_AD9238); sub_7136E0(v20, v21); return; } v17 = sub_40C190(673398324); } else { if ( *a3 != 1011 ) { switch ( v7 ) { case 34: v8 = sub_5E8950(); sub_5E2540(v8, (_DWORD *)v23, 0, *(_BYTE *)(v23 + 96)); break; case 35: v9 = sub_5E8950(); sub_5E2540(v9, (_DWORD *)v23, 1, 0); break; case 36: v10 = sub_5E8950(); sub_5E2540(v10, (_DWORD *)v23, 2, 0); break; case 37: v11 = sub_5E8950(); sub_5E2540(v11, (_DWORD *)v23, 3, 0); break; case 38: v12 = sub_5E8950(); sub_5E2540(v12, (_DWORD *)v23, 4, 0); break; case 39: v13 = sub_5E8950(); sub_5E2540(v13, (_DWORD *)v23, 6, 0); break; case 40: v14 = (_DWORD *)sub_5E88C0(); sub_5E2510(v14, (_DWORD *)v23); break; case 41: v15 = (_DWORD *)v23; sub_4169E0((_DWORD *)v23, (int)&v24); v25 = 0; *(_DWORD *)dword_ACEB0C = *v15; dword_ACEB10 = v15[1]; dword_ACEB14 = v15[2]; dword_ACEB18 = v15[3]; dword_ACEB1C = v15[4]; sub_4A7840(*((_DWORD ***)v4 + 16), &v24); break; default: return; } return; } v16 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v16) ) { if ( *(_BYTE *)(v23 + 20) <= 3u ) { v18 = (_DWORD *)sub_5E89E0(); sub_7136B0(v18, (_DWORD *)v23); return; } v17 = sub_40C190(-1118937508); } else { v17 = sub_40C190(1723173574); } } v22 = v17; if ( *((_DWORD *)v4 + 1) ) { (*(void (__stdcall **)(signed int, const CHAR *, unsigned __int8 *))(**((_DWORD **)v4 + 1) + 4))( 25, v17, v4); if ( *((_DWORD *)v4 + 1) ) (*(void (__stdcall **)(signed int, const CHAR *, unsigned __int8 *))(**((_DWORD **)v4 + 1) + 20))( 25, v22, v4); } (*(void (__thiscall **)(unsigned __int8 *, signed int, const CHAR *, unsigned __int8 *))(*(_DWORD *)v4 + 20))( v4, 25, v22, v4); break; case 41: sub_5E3E70(v4 - 232); return; default: return; } } } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // AD01E8: using guessed type int dword_AD01E8; //----- (005E4DB0) -------------------------------------------------------- void __thiscall sub_5E4DB0(_DWORD *this) { int v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ecx void (__stdcall *v5)(signed int); // edx int **v6; // eax int *j; // eax int i; // eax _DWORD *v9; // eax _DWORD *v10; // esi int v11; // eax const char *v12; // eax int v13; // eax const char *v14; // eax v1 = (int)this; v2 = (_DWORD *)this[92]; this[90] = 0; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { v4 = v3[3]; if ( v4 ) { v5 = *(void (__stdcall **)(signed int))(*(_DWORD *)v4 + 256); if ( v3[4] ) v5(0); else v5(1); } if ( !*((_BYTE *)v3 + 21) ) { v6 = (int **)v3[2]; if ( *((_BYTE *)v6 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v6; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != *(_DWORD **)(v1 + 368) ); } sub_5E3E70((unsigned __int8 *)v1); *(_BYTE *)(*(_DWORD *)(v1 + 348) + 380) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 352) + 380) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 356) + 380) = 0; v9 = (_DWORD *)sub_6D3800(); v10 = v9; if ( v9 ) { if ( (unsigned __int8)sub_6D3010(v9) ) sub_5E38C0(v1, *(_BYTE *)(v1 + 540)); else sub_5E38C0(v1, 0); if ( !sub_6D3020(v10) ) { if ( *(_BYTE *)(v1 + 540) ) { v13 = *(_DWORD *)(v1 + 552); if ( v13 ) { if ( !*(_DWORD *)(v13 + 272) ) *(_DWORD *)(v13 + 272) = dword_AD01E8; v14 = sub_4090F0(1855892882); sub_8F2EA0(*(void ***)(v1 + 552), v14); } } else { v11 = *(_DWORD *)(v1 + 544); if ( !*(_DWORD *)(v11 + 272) ) *(_DWORD *)(v11 + 272) = dword_AD01E8; v12 = sub_4090F0(1855892882); sub_8F2EA0(*(void ***)(v1 + 544), v12); *(_BYTE *)(*(_DWORD *)(v1 + 544) + 380) = 0; } } } } // AD01E8: using guessed type int dword_AD01E8; //----- (005E4F20) -------------------------------------------------------- void __thiscall sub_5E4F20(_DWORD *this) { int v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax v1 = (int)this; v2 = (_DWORD *)this[92]; this[90] = 1; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { (*(void (__stdcall **)(bool))(*(_DWORD *)v3[3] + 256))(v3[4] == 1); if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != *(_DWORD **)(v1 + 368) ); } sub_5E3E70((unsigned __int8 *)v1); *(_BYTE *)(*(_DWORD *)(v1 + 348) + 380) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 352) + 380) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 356) + 380) = 0; sub_5E38C0(v1, 0); } //----- (005E4FE0) -------------------------------------------------------- void __thiscall sub_5E4FE0(_DWORD *this) { int v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax v1 = (int)this; v2 = (_DWORD *)this[92]; this[90] = 2; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { (*(void (__stdcall **)(bool))(*(_DWORD *)v3[3] + 256))(v3[4] == 2); if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != *(_DWORD **)(v1 + 368) ); } sub_5E3E70((unsigned __int8 *)v1); *(_BYTE *)(*(_DWORD *)(v1 + 348) + 380) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 352) + 380) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 356) + 380) = 1; sub_5E38C0(v1, 0); } //----- (005E50A0) -------------------------------------------------------- char *__thiscall sub_5E50A0(char *this) { char *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] char *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &GuildWin::`vftable'; *((_DWORD *)v1 + 58) = &GuildWin::`vftable'; v7 = 0; *((_DWORD *)v1 + 93) = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 92) = v2; *v2 = v2; *(_DWORD *)(*((_DWORD *)v1 + 92) + 4) = *((_DWORD *)v1 + 92); *(_DWORD *)(*((_DWORD *)v1 + 92) + 8) = *((_DWORD *)v1 + 92); *(_BYTE *)(*((_DWORD *)v1 + 92) + 20) = 1; *(_BYTE *)(*((_DWORD *)v1 + 92) + 21) = 1; *((_DWORD *)v1 + 126) = 0; *((_DWORD *)v1 + 127) = 0; *((_DWORD *)v1 + 128) = 0; *((_DWORD *)v1 + 129) = 0; *((_DWORD *)v1 + 130) = 0; *((_DWORD *)v1 + 131) = 0; *((_DWORD *)v1 + 132) = 0; *((_DWORD *)v1 + 133) = 0; *((_DWORD *)v1 + 134) = 0; *((_WORD *)v1 + 204) = 256; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 98) = 0; *((_DWORD *)v1 + 99) = 0; *((_DWORD *)v1 + 95) = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 97) = 0; *((_DWORD *)v1 + 103) = 0; *((_DWORD *)v1 + 104) = 0; *((_DWORD *)v1 + 105) = 0; *((_DWORD *)v1 + 106) = 0; *((_DWORD *)v1 + 114) = 0; *((_DWORD *)v1 + 115) = 0; *((_DWORD *)v1 + 117) = 0; *((_DWORD *)v1 + 118) = 0; *((_DWORD *)v1 + 116) = 0; *((_DWORD *)v1 + 121) = 0; *((_DWORD *)v1 + 122) = 0; *((_DWORD *)v1 + 123) = 0; *((_DWORD *)v1 + 119) = 0; *((_DWORD *)v1 + 120) = 0; *((_DWORD *)v1 + 90) = 0; *((_WORD *)v1 + 270) = 0; v1[548] = 4; *((_DWORD *)v1 + 136) = 0; *((_DWORD *)v1 + 138) = 0; *(_WORD *)(v1 + 549) = -1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9E8028: using guessed type void *GuildWin::`vftable'; // 9E8044: using guessed type void *GuildWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005E5250) -------------------------------------------------------- volatile LONG *__cdecl sub_5E5250(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x22Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_5E50A0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005E5380) -------------------------------------------------------- void __thiscall sub_5E5380(_DWORD **this, int a2, int a3) { switch ( a2 ) { case 11: sub_5E2A00(this); break; case 12: sub_5E2950(this); break; case 13: sub_5E3E10(); break; case 14: sub_6C29C0(42, 0); break; case 17: sub_5E2E50(this); break; case 18: sub_5E2E90(this); break; case 19: sub_5E2240(this); break; case 20: sub_5E2270(this); break; case 21: sub_5E22A0(this); break; case 22: sub_5E22D0(this); break; case 23: sub_5E2300(this); break; case 24: sub_5E2680(this, a3); break; case 25: sub_5E2660(this, a3); break; case 26: sub_5E2E10(this); break; case 27: sub_5E29A0(this, 0); break; case 28: sub_5E29A0(this, 2); break; case 29: sub_5E29A0(this, 3); break; case 30: sub_5E29A0(this, 4); break; case 31: sub_5E29A0(this, 5); break; case 32: sub_5E2410(); break; case 33: sub_5E2440(); break; case 34: sub_5E4DB0(this); break; case 35: sub_5E4F20(this); break; case 36: sub_5E4FE0(this); break; case 40: sub_5E2ED0(this); break; case 41: sub_5E2460(this); break; default: return; } } //----- (005E5520) -------------------------------------------------------- void __thiscall sub_5E5520(_DWORD *this) { int v1; // eax int v2; // eax v1 = this[90]; if ( v1 ) { v2 = v1 - 1; if ( v2 ) { if ( v2 == 1 ) sub_5E4FE0(this); } else { sub_5E4F20(this); } } else { sub_5E4DB0(this); } } //----- (005E82C0) -------------------------------------------------------- HGLOBAL __cdecl sub_5E82C0(HMODULE hModule, HRSRC hResInfo, int a3) { HGLOBAL result; // eax _WORD *v4; // esi DWORD v5; // eax int v6; // ecx result = LoadResource(hModule, hResInfo); if ( result ) { v4 = LockResource(result); if ( !v4 ) return 0; v5 = (DWORD)v4 + SizeofResource(hModule, hResInfo); v6 = a3 & 0xF; if ( a3 & 0xF ) { while ( (unsigned int)v4 < v5 ) { --v6; v4 += (unsigned __int16)*v4 + 1; if ( !v6 ) goto LABEL_6; } return 0; } LABEL_6: if ( (unsigned int)v4 >= v5 ) return 0; result = (HGLOBAL)(*v4 != 0 ? (unsigned int)v4 : 0); } return result; } //----- (005E8330) -------------------------------------------------------- HMODULE __cdecl sub_5E8330(int a1, WORD wLanguage) { HGLOBAL v2; // edi HMODULE v3; // esi HRSRC v4; // eax int v5; // eax int v7; // [esp+Ch] [ebp-4h] v2 = 0; v3 = (HMODULE)sub_916BBD((int)&unk_BA6C5C, 0); v7 = 1; if ( v3 ) { while ( !v2 ) { v4 = FindResourceExW(v3, (LPCWSTR)6, (LPCWSTR)(unsigned __int16)(((unsigned int)a1 >> 4) + 1), wLanguage); if ( v4 ) { v2 = sub_5E82C0(v3, v4, a1); if ( v2 ) return v3; } v5 = sub_916BBD((int)&unk_BA6C5C, v7++); v3 = (HMODULE)v5; if ( !v5 ) return 0; } } return 0; } //----- (005E83B0) -------------------------------------------------------- void __noreturn sub_5E83B0() { sub_4EB6E0(-2147024882); } //----- (005E8440) -------------------------------------------------------- int __thiscall sub_5E8440(int *this, int a2) { int *v2; // esi int v3; // eax int v4; // ecx int v5; // eax int v6; // eax int result; // eax v2 = this; v3 = *this; v4 = *(_DWORD *)(*this - 16); v5 = v3 - 16; if ( *(_DWORD *)(v5 + 8) >= a2 || a2 <= 0 || (v6 = (*(int (__stdcall **)(int, int, signed int))(*(_DWORD *)v4 + 8))(v5, a2, 1)) == 0 ) { sub_5E83B0(); } result = v6 + 16; *v2 = result; return result; } //----- (005E8500) -------------------------------------------------------- int __thiscall sub_5E8500(int *this, int a2) { int v2; // eax int v3; // edi int result; // eax int v5; // esi v2 = *this; v3 = a2; if ( *(_DWORD *)(*this - 12) > a2 ) v3 = *(_DWORD *)(*this - 12); if ( *(_DWORD *)(v2 - 4) > 1 ) return ((int (__stdcall *)(int))loc_5E83C0)(v3); result = *(_DWORD *)(v2 - 8); if ( result < v3 ) { if ( result <= 0x40000000 ) v5 = result / 2 + result; else v5 = result + 0x100000; if ( v5 < v3 ) v5 = v3; result = sub_5E8440(this, v5); } return result; } //----- (005E8560) -------------------------------------------------------- const CHAR *__cdecl sub_5E8560(char a1) { const CHAR *result; // eax switch ( a1 ) { case 0: result = sub_40C190(236267817); break; case 1: result = sub_40C190(1667795051); break; case 2: result = sub_40C190(218693381); break; case 3: result = sub_40C190(304422436); break; case 4: result = sub_40C190(487988255); break; case 6: result = sub_40C190(1672066249); break; default: result = "default"; break; } return result; } //----- (005E85F0) -------------------------------------------------------- int __thiscall sub_5E85F0(int *this, void *Src, rsize_t MaxCount) { signed int v3; // esi int *v4; // ebx int result; // eax void *v6; // ecx char *v7; // edi int v8; // eax rsize_t MaxCounta; // [esp+14h] [ebp+Ch] v3 = MaxCount; v4 = this; if ( !MaxCount ) return ((int (*)(void))loc_5E8480)(); v6 = Src; if ( !Src ) goto LABEL_16; v7 = (char *)Src - *v4; MaxCounta = *(_DWORD *)(*v4 - 12); if ( v3 < 0 ) sub_4EB6E0(-2147024809); if ( ((*(_DWORD *)(*v4 - 8) - v3) | (1 - *(_DWORD *)(*v4 - 4))) < 0 ) { sub_5E8500(v4, v3); v6 = Src; } v8 = *v4; if ( (unsigned int)v7 > MaxCounta ) memcpy_s((void *)v8, *(_DWORD *)(v8 - 8), v6, v3); else memmove_s((void *)v8, *(_DWORD *)(v8 - 8), &v7[v8], v3); result = *v4; if ( v3 > *(_DWORD *)(*v4 - 8) ) LABEL_16: sub_4EB6E0(-2147024809); *(_DWORD *)(result - 12) = v3; *(_BYTE *)(v3 + *v4) = 0; return result; } //----- (005E8690) -------------------------------------------------------- int __thiscall sub_5E8690(int *this, HMODULE hModule, LPCWSTR lpWideCharStr) { int *v3; // ebx HRSRC v4; // eax unsigned __int16 *v5; // eax unsigned __int16 *v6; // edi int v8; // eax int v9; // esi v3 = this; v4 = FindResourceW(hModule, (LPCWSTR)(unsigned __int16)(((unsigned int)lpWideCharStr >> 4) + 1), (LPCWSTR)6); if ( !v4 ) return 0; v5 = (unsigned __int16 *)sub_5E82C0(hModule, v4, (int)lpWideCharStr); v6 = v5; if ( !v5 ) return 0; v8 = WideCharToMultiByte(3u, 0, v5 + 1, *v5, 0, 0, 0, 0); v9 = v8; if ( v8 < 0 ) goto LABEL_12; if ( ((*(_DWORD *)(*v3 - 8) - v8) | (1 - *(_DWORD *)(*v3 - 4))) < 0 ) sub_5E8500(v3, v8); WideCharToMultiByte(3u, 0, v6 + 1, *v6, (LPSTR)*v3, v9, 0, 0); if ( v9 > *(_DWORD *)(*v3 - 8) ) LABEL_12: sub_4EB6E0(-2147024809); *(_DWORD *)(*v3 - 12) = v9; *(_BYTE *)(v9 + *v3) = 0; return 1; } //----- (005E8750) -------------------------------------------------------- void *__thiscall sub_5E8750(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD0334 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E7E88: using guessed type void *ISingletonTask::`vftable'; // 9E7EA4: using guessed type void *ISingletonTask::`vftable'; // AD0334: using guessed type int dword_AD0334; //----- (005E8790) -------------------------------------------------------- void *__thiscall sub_5E8790(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD0338 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E7EBC: using guessed type void *ISingletonTask::`vftable'; // 9E7ED8: using guessed type void *ISingletonTask::`vftable'; // AD0338: using guessed type int dword_AD0338; //----- (005E87D0) -------------------------------------------------------- void *__thiscall sub_5E87D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD033C = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E7EF0: using guessed type void *ISingletonTask::`vftable'; // 9E7F0C: using guessed type void *ISingletonTask::`vftable'; // AD033C: using guessed type int dword_AD033C; //----- (005E8810) -------------------------------------------------------- void *__thiscall sub_5E8810(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_AD0340 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E7F24: using guessed type void *ISingletonTask::`vftable'; // 9E7F40: using guessed type void *ISingletonTask::`vftable'; // AD0340: using guessed type int dword_AD0340; //----- (005E8850) -------------------------------------------------------- _DWORD *__thiscall sub_5E8850(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; result[4] = *((_DWORD *)v4 + 1); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005E88C0) -------------------------------------------------------- int sub_5E88C0() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD0334; if ( !dword_AD0334 ) { v1 = (void ***)operator new(0x5Cu); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildMemberVanishTask::`vftable'; v2[2] = &GuildMemberVanishTask::`vftable'; v2[21] = 0; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_AD0334 = (int)v2; } return result; } // 9E7F58: using guessed type void *GuildMemberVanishTask::`vftable'; // 9E7F74: using guessed type void *GuildMemberVanishTask::`vftable'; // AD0334: using guessed type int dword_AD0334; //----- (005E8950) -------------------------------------------------------- int sub_5E8950() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD0338; if ( !dword_AD0338 ) { v1 = (void ***)operator new(0x60u); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildMemberGradeSetupTask::`vftable'; v2[2] = &GuildMemberGradeSetupTask::`vftable'; v2[21] = 0; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_AD0338 = (int)v2; } return result; } // 9E7F8C: using guessed type void *GuildMemberGradeSetupTask::`vftable'; // 9E7FA8: using guessed type void *GuildMemberGradeSetupTask::`vftable'; // AD0338: using guessed type int dword_AD0338; //----- (005E89E0) -------------------------------------------------------- int sub_5E89E0() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD033C; if ( !dword_AD033C ) { v1 = (void ***)operator new(0x5Cu); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildAcademyMasterAppointTask::`vftable'; v2[2] = &GuildAcademyMasterAppointTask::`vftable'; v2[21] = 0; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_AD033C = (int)v2; } return result; } // 9E7FC0: using guessed type void *GuildAcademyMasterAppointTask::`vftable'; // 9E7FDC: using guessed type void *GuildAcademyMasterAppointTask::`vftable'; // AD033C: using guessed type int dword_AD033C; //----- (005E8A70) -------------------------------------------------------- int sub_5E8A70() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_AD0340; if ( !dword_AD0340 ) { v1 = (void ***)operator new(0x5Cu); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildAcademyMasterInitializeTask::`vftable'; v2[2] = &GuildAcademyMasterInitializeTask::`vftable'; v2[21] = 0; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_AD0340 = (int)v2; } return result; } // 9E7FF4: using guessed type void *GuildAcademyMasterInitializeTask::`vftable'; // 9E8010: using guessed type void *GuildAcademyMasterInitializeTask::`vftable'; // AD0340: using guessed type int dword_AD0340; //----- (005E8B00) -------------------------------------------------------- int *__thiscall sub_5E8B00(int *this, void *Src) { int *v2; // esi HMODULE v3; // eax rsize_t v4; // eax v2 = this; *this = ((int (__thiscall *)(int (__stdcall ***)(int, int)))off_AC4910[3])(&off_AC4910) + 16; if ( !Src ) { v4 = 0; LABEL_7: sub_5E85F0(v2, Src, v4); return v2; } if ( (unsigned int)Src & 0xFFFF0000 ) { v4 = strlen((const char *)Src); goto LABEL_7; } v3 = sub_5E8330((unsigned __int16)Src, 0); if ( v3 ) sub_5E8690(v2, v3, (LPCWSTR)(unsigned __int16)Src); return v2; } // AC4910: using guessed type int (__stdcall **off_AC4910)(int, int); //----- (005E8BB0) -------------------------------------------------------- int __thiscall sub_5E8BB0(__time64_t *Time, int a2, char *a3) { struct tm Tm; // [esp+Ch] [ebp-A8h] char Src; // [esp+30h] [ebp-84h] if ( a3 ) { if ( _localtime64_s(&Tm, Time) ) sub_4EB6E0(-2147024809); if ( !strftime(&Src, 0x80u, a3, &Tm) ) Src = 0; sub_5E8B00((int *)a2, &Src); } else { sub_5E8B00((int *)a2, 0); } return a2; } //----- (005E8C50) -------------------------------------------------------- void *__thiscall sub_5E8C50(void *this, char a2) { void *v2; // esi v2 = this; sub_5E4850(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005E8CE0) -------------------------------------------------------- char __thiscall sub_5E8CE0(volatile LONG **this, int a2, int a3) { volatile LONG **v3; // edi int v4; // eax volatile LONG *v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf int v9; // ebx char *v10; // eax volatile LONG **v11; // eax void (__thiscall ***v12)(_DWORD, signed int); // esi char v13; // [esp+18h] [ebp-18h] char v14; // [esp+1Ch] [ebp-14h] int v15; // [esp+20h] [ebp-10h] int v16; // [esp+2Ch] [ebp-4h] v3 = this; v15 = 0; v16 = 0; if ( a3 ) v4 = sub_43D0D0(0x17u); else v4 = sub_43D0D0(0x16u); v5 = (volatile LONG *)v4; if ( !v4 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( !v15 || InterlockedDecrement((volatile LONG *)(v15 + 4)) ) return 0; v7 = v15 == 0; LABEL_8: if ( !v7 ) (**v6)(v6, 1); return 0; } v9 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTFlag.nif"); sub_8F66B0(v10, (int)&v15, v9); if ( !v15 ) return 0; v11 = sub_8FB140(v15, (int)"Plane01", (int)&v13, (int)&v14, v5); if ( !sub_8F1440(v3, 0, 0, (int)v11, 0, a2, (int)"GTIFlagWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( !v15 || InterlockedDecrement((volatile LONG *)(v15 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_8; } if ( a3 ) (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v3 + 59))( v3, xRight, dword_AC2F78, 0.69999999, 0.15000001); else (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v3 + 59))( v3, xRight, dword_AC2F78, 0.69999999, 0.25); v12 = (void (__thiscall ***)(_DWORD, signed int))v15; v16 = -1; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v12 ) (**v12)(v12, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005E8EB0) -------------------------------------------------------- int __cdecl sub_5E8EB0(int a1, int a2) { void *v2; // eax int v3; // esi void (__thiscall ***v4)(void *, signed int); // edi int result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x158u); v3 = (int)v2; v6 = v2; v7 = 0; if ( v2 ) { Concurrency::overwrite_buffer::overwrite_buffer(v2); *(_DWORD *)v3 = >IFlagWin::`vftable'; *(_DWORD *)(v3 + 232) = >IFlagWin::`vftable'; } else { v3 = 0; } if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v7 = 1; sub_403790(&unk_BA6B10, v3); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, (_DWORD *)v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E829C: using guessed type void *GTIFlagWin::`vftable'; // 9E82BC: using guessed type void *GTIFlagWin::`vftable'; //----- (005E8FF0) -------------------------------------------------------- void *__thiscall sub_5E8FF0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >IFlagWin::`vftable'; *((_DWORD *)this + 58) = >IFlagWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E829C: using guessed type void *GTIFlagWin::`vftable'; // 9E82BC: using guessed type void *GTIFlagWin::`vftable'; //----- (005E9030) -------------------------------------------------------- void __thiscall sub_5E9030(float **this, int a2, char a3, int a4, int a5, int a6, char a7, float a8) { float **v8; // ebx float **v9; // esi signed int v10; // edi signed int v11; // edi v8 = this; if ( 0.0 == a8 ) a8 = 3.0; v9 = this + 86; if ( a7 ) { v11 = 5; do { (*(void (__stdcall **)(void *))(*(_DWORD *)*v9 + 148))(&unk_9E84DC); sub_4EAAF0(*v9, -1.0); ++v9; --v11; } while ( v11 ); } else { v10 = 4; do { sub_4EAC00(*v9, v9[1]); ++v9; --v10; } while ( v10 ); } (*(void (__stdcall **)(char *))(*(_DWORD *)v8[90] + 176))(&a3); (*(void (__stdcall **)(int))(*(_DWORD *)v8[90] + 148))(a2); sub_4EAAF0(v8[90], a8); } //----- (005E90F0) -------------------------------------------------------- void __thiscall sub_5E90F0(float **this, int a2, int a3, char a4, int a5, int a6, int a7, float a8) { float **v8; // edi int v9; // ebx float **v10; // esi v8 = this; if ( 0.0 == a8 ) a8 = 3.0; v9 = a2 - 1; if ( a2 != 1 ) { v10 = this + 86; do { sub_4EAC00(*v10, v10[1]); ++v10; --v9; } while ( v9 ); } (*(void (__stdcall **)(char *))(*(_DWORD *)v8[a2 + 85] + 176))(&a4); (*(void (__stdcall **)(int))(*(_DWORD *)v8[a2 + 85] + 148))(a3); sub_4EAAF0(v8[a2 + 85], a8); } //----- (005E9180) -------------------------------------------------------- void __thiscall sub_5E9180(float **this) { float **v1; // esi signed int v2; // edi v1 = this + 86; v2 = 5; do { (*(void (__stdcall **)(void *))(*(_DWORD *)*v1 + 148))(&unk_9E84DD); sub_4EAAF0(*v1, -1.0); ++v1; --v2; } while ( v2 ); } //----- (005E92C0) -------------------------------------------------------- char __thiscall sub_5E92C0(volatile LONG **this, int a2) { int *v2; // edi int v4; // eax volatile LONG *v5; // ebx int *v6; // esi void *v7; // eax volatile LONG *v8; // eax int v9; // ebx int v10; // eax int v11; // ebx _BYTE *v12; // eax int v13; // eax int v14; // edx float v15; // ST38_4 int v16; // edx int v17; // eax void (__thiscall *v18)(int *, int, _DWORD); // edx unsigned __int8 v19; // [esp+14h] [ebp-74h] unsigned __int8 v20; // [esp+18h] [ebp-70h] unsigned __int8 v21; // [esp+1Ch] [ebp-6Ch] float v22[4]; // [esp+40h] [ebp-48h] struct tagSIZE psizl; // [esp+50h] [ebp-38h] volatile LONG *v24; // [esp+58h] [ebp-30h] int v25; // [esp+5Ch] [ebp-2Ch] int v26; // [esp+60h] [ebp-28h] void *v27; // [esp+64h] [ebp-24h] struct tagRECT rc; // [esp+68h] [ebp-20h] int v29; // [esp+84h] [ebp-4h] v2 = (int *)this; if ( !sub_8F15E0(this, 0, 0, 0, a2, (int)"GTInformWin", 0) ) return 0; v4 = sub_421050(8); v5 = (volatile LONG *)v4; v24 = (volatile LONG *)v4; if ( !v4 ) return 0; SelectObject(*(HDC *)(v4 + 192), *(HGDIOBJ *)(v4 + 184)); sub_4593C0(v5, "W", 1, &psizl); v26 = -2; SetRect(&rc, 0, 0, 500, psizl.cy); v6 = v2 + 86; v25 = 5; while ( 1 ) { v7 = operator new(0x158u); v27 = v7; v29 = 0; if ( v7 ) { v8 = (volatile LONG *)sub_4EAD10((float *)v7, v5); v27 = (void *)v8; } else { v27 = 0; v8 = 0; } v9 = *v6; v29 = -1; if ( (volatile LONG *)v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8 = (volatile LONG *)v27; } *v6 = (int)v8; if ( v8 ) InterlockedIncrement(v8 + 1); } sub_9074F0(*v6, 3); (*(void (__stdcall **)(struct tagRECT *))(*(_DWORD *)*v6 + 136))(&rc); v10 = *v6; *(_DWORD *)(v10 + 308) = 1; if ( *(_DWORD *)(v10 + 280) != 18 ) { *(_DWORD *)(v10 + 280) = 18; *(_BYTE *)(v10 + 300) = 1; } v11 = *v6; if ( dword_ACD914 ) { v12 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x23u); if ( !v12 ) { sub_419EE0(v22, 0xFFu, 0, 0xFFu, 0xFFu); goto LABEL_25; } v21 = v12[6]; v20 = v12[5]; v19 = v12[4]; } else { v21 = -1; v20 = dword_ACD914; v19 = -1; } sub_419EE0(v22, v19, v20, v21, 0xFFu); LABEL_25: (*(void (__thiscall **)(int, float *))(*(_DWORD *)v11 + 176))(v11, v22); v13 = *v6; v14 = *(_DWORD *)(*v6 + 92); v15 = (double)v26; v16 = *(_DWORD *)(*v6 + 96); *(_DWORD *)(v13 + 88) = *(_DWORD *)(*v6 + 88); *(float *)(v13 + 92) = v15; *(_DWORD *)(v13 + 96) = v16; v17 = *v6; v18 = *(void (__thiscall **)(int *, int, _DWORD))(*v2 + 116); v26 += psizl.cy + 2; v18(v2, v17, 0); ++v6; if ( !--v25 ) break; v5 = v24; } sub_85C4D0(v2); (*(void (__thiscall **)(int *, signed int))(*v2 + 152))(v2, 500); (*(void (__thiscall **)(int *, signed int))(*v2 + 156))(v2, 45); (*(void (__thiscall **)(int *, int, int, _DWORD, _DWORD))(*v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 240))(v2, 0); return 1; } // ACD914: using guessed type int dword_ACD914; //----- (005E9570) -------------------------------------------------------- int __cdecl sub_5E9570(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x16Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = >InformWin::`vftable'; *(_DWORD *)(v2 + 232) = >InformWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 344), 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( sub_5E92C0((volatile LONG **)v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E84F4: using guessed type void *GTInformWin::`vftable'; // 9E8514: using guessed type void *GTInformWin::`vftable'; //----- (005E96D0) -------------------------------------------------------- _DWORD *__thiscall sub_5E96D0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = >InformWin::`vftable'; *((_DWORD *)this + 58) = >InformWin::`vftable'; `eh vector destructor iterator'((char *)this + 344, 4u, 5, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E84F4: using guessed type void *GTInformWin::`vftable'; // 9E8514: using guessed type void *GTInformWin::`vftable'; //----- (005E9760) -------------------------------------------------------- BOOL __cdecl sub_5E9760(int a1, int a2) { return *(_DWORD *)(a2 + 28) < *(_DWORD *)(a1 + 28); } //----- (005E9780) -------------------------------------------------------- BOOL __cdecl sub_5E9780(int a1, int a2) { return *(_DWORD *)(a1 + 28) < *(_DWORD *)(a2 + 28); } //----- (005E97A0) -------------------------------------------------------- BOOL __cdecl sub_5E97A0(int a1, int a2) { return *(_DWORD *)(a1 + 32) < *(_DWORD *)(a2 + 32); } //----- (005E97C0) -------------------------------------------------------- BOOL __cdecl sub_5E97C0(int a1, int a2) { return *(_DWORD *)(a1 + 36) < *(_DWORD *)(a2 + 36); } //----- (005E97E0) -------------------------------------------------------- BOOL __cdecl sub_5E97E0(int a1, int a2) { return *(_DWORD *)(a2 + 40) < *(_DWORD *)(a1 + 40); } //----- (005E9800) -------------------------------------------------------- BOOL __cdecl sub_5E9800(int a1, int a2) { return *(_DWORD *)(a1 + 40) < *(_DWORD *)(a2 + 40); } //----- (005E9820) -------------------------------------------------------- BOOL __cdecl sub_5E9820(int a1, int a2) { return *(_DWORD *)(a2 + 44) < *(_DWORD *)(a1 + 44); } //----- (005E9840) -------------------------------------------------------- BOOL __cdecl sub_5E9840(int a1, int a2) { return *(_DWORD *)(a1 + 44) < *(_DWORD *)(a2 + 44); } //----- (005E9860) -------------------------------------------------------- BOOL __cdecl sub_5E9860(int a1, int a2) { return *(_DWORD *)(a2 + 48) < *(_DWORD *)(a1 + 48); } //----- (005E9880) -------------------------------------------------------- BOOL __cdecl sub_5E9880(int a1, int a2) { return *(_DWORD *)(a1 + 48) < *(_DWORD *)(a2 + 48); } //----- (005E98C0) -------------------------------------------------------- char __thiscall sub_5E98C0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[89], v2[90]); return v3; } //----- (005E98F0) -------------------------------------------------------- char __thiscall sub_5E98F0(_BYTE *this, char a2) { char result; // al result = a2; this[464] = a2; return result; } //----- (005E9900) -------------------------------------------------------- char sub_5E9900() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildTBattleStatus"); return (char)v0; } //----- (005E99B0) -------------------------------------------------------- int __thiscall sub_5E99B0(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(void *))(*this[90] + 472))(&unk_9E8793); (*(void (__stdcall **)(void *))(*v1[91] + 472))(&unk_9E879E); (*(void (__stdcall **)(void *))(*v1[92] + 472))(&unk_9E879F); (*(void (__stdcall **)(void *))(*v1[93] + 472))(&unk_9E87A6); (*(void (__stdcall **)(void *))(*v1[94] + 472))(&unk_9E87A7); return (*(int (__stdcall **)(void *))(*v1[95] + 472))(&unk_9E87B2); } //----- (005E9A40) -------------------------------------------------------- char __thiscall sub_5E9A40(int this, char a2) { char result; // al result = a2; *(_BYTE *)(this + 384) = a2; *(_DWORD *)(this + 388) = 0; return result; } //----- (005E9A90) -------------------------------------------------------- void __userpurge sub_5E9A90(_DWORD **a1@, int a2@, int a3, int a4) { _DWORD **v4; // esi int v5; // eax int v6; // ebx char *v7; // eax int v8; // eax int v9; // edi char *v10; // eax int v11; // ebx char *v12; // eax int v13; // eax int v14; // edi char *v15; // eax int v16; // ebx char *v17; // eax int v18; // eax int v19; // edi char *v20; // eax int v21; // edi int v22; // eax int v23; // edx int v24; // ebx char *v25; // eax int v26; // eax int v27; // ebx char *v28; // eax int v29; // [esp-4h] [ebp-Ch] v4 = a1; if ( a3 ) { v29 = a2; v5 = sub_6D3800(); if ( v5 && *(_BYTE *)(v5 + 2748) ) { if ( *(_DWORD *)(sub_6D38F0() + 76) == a3 ) { v6 = *v4[91]; v7 = (char *)sub_6D3800(); v8 = sub_6D36C0(v7, a3); (*(void (__thiscall **)(_DWORD *, int))(v6 + 472))(v4[91], v8); v9 = *v4[93]; v10 = sub_7549E0("%d", a4); (*(void (__thiscall **)(_DWORD *, char *))(v9 + 472))(v4[93], v10); (*(void (__stdcall **)(int *))(*v4[91] + 468))(&dword_AA8C88); return; } if ( *(_DWORD *)(sub_6D38F0() + 80) == a3 ) { v11 = *v4[92]; v12 = (char *)sub_6D3800(); v13 = sub_6D36C0(v12, a3); (*(void (__thiscall **)(_DWORD *, int, int))(v11 + 472))(v4[92], v13, v29); v14 = *v4[94]; v15 = sub_7549E0("%d", a4); (*(void (__thiscall **)(_DWORD *, char *))(v14 + 472))(v4[94], v15); LABEL_8: (*(void (__stdcall **)(signed int, signed int, signed int))(*v4[92] + 464))(62, 158, 255); return; } } else { if ( *((_DWORD *)dword_AD8EBC + 169) != a3 ) { v24 = *v4[92]; v25 = (char *)sub_6D3800(); v26 = sub_6D36C0(v25, a3); (*(void (__thiscall **)(_DWORD *, int, int))(v24 + 472))(v4[92], v26, v29); v27 = *v4[94]; v28 = sub_7549E0("%d", a4); (*(void (__thiscall **)(_DWORD *, char *))(v27 + 472))(v4[94], v28); if ( *(_DWORD *)(sub_6D38F0() + 76) == a3 ) { (*(void (__cdecl **)(int *))(*v4[92] + 468))(&dword_AA8C88); return; } goto LABEL_8; } v16 = *v4[91]; v17 = (char *)sub_6D3800(); v18 = sub_6D36C0(v17, a3); (*(void (__thiscall **)(_DWORD *, int, int))(v16 + 472))(v4[91], v18, v29); v19 = *v4[93]; v20 = sub_7549E0("%d", a4); (*(void (__thiscall **)(_DWORD *, char *))(v19 + 472))(v4[93], v20); v21 = *((_DWORD *)dword_AD8EBC + 169); v22 = sub_6D38F0(); v23 = *v4[91]; if ( *(_DWORD *)(v22 + 76) == v21 ) (*(void (__cdecl **)(int *))(v23 + 468))(&dword_AA8C88); else (*(void (__stdcall **)(signed int, signed int, signed int))(v23 + 464))(62, 158, 255); } } } // 5E9A90: could not find valid save-restore pair for ebx // AA8C88: using guessed type int dword_AA8C88; //----- (005E9CD0) -------------------------------------------------------- int __thiscall sub_5E9CD0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[89]; if ( result ) { v3 = (_DWORD *)this[90]; if ( v3 ) sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[89] + 344) = *(_DWORD *)(v1[90] + 300); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (005E9D20) -------------------------------------------------------- char __thiscall sub_5E9D20(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // eax if ( a2 ) { LOBYTE(v3) = a2 - 1; if ( a2 == 1 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "GuildTBattleStatusMin"); } } else { sub_8F86A0(&unk_BA6B10, this); v4 = (_DWORD *)sub_6D4850(); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v4); } return (char)v3; } //----- (005E9D80) -------------------------------------------------------- void __userpurge sub_5E9D80(_DWORD **a1@, int a2@, int a3) { int v3; // edi _DWORD **v4; // esi int v5; // eax int v6; // ebx char *v7; // eax int v8; // eax int v9; // ebx char *v10; // eax int v11; // ebx char *v12; // eax int v13; // ebx int v14; // ebx char *v15; // eax int v16; // eax int v17; // ebx char *v18; // eax int v19; // ebx char *v20; // eax int v21; // eax int v22; // ebx int v23; // ST0C_4 char *v24; // eax int v25; // eax int v26; // ebx char *v27; // eax int v28; // ebx char *v29; // eax int v30; // edi int v31; // eax int *v32; // ecx bool v33; // zf int v34; // ebx int v35; // ST0C_4 char *v36; // eax int v37; // eax int v38; // ebx char *v39; // eax int v40; // ebx char *v41; // eax int v42; // edx int v43; // [esp-4h] [ebp-Ch] int v44; // [esp+10h] [ebp+8h] int v45; // [esp+10h] [ebp+8h] v3 = a3; v4 = a1; if ( a3 ) { v43 = a2; v5 = sub_6D3800(); if ( v5 && *(_BYTE *)(v5 + 2748) ) { v44 = *(_DWORD *)(a3 + 1); if ( *(_DWORD *)(sub_6D38F0() + 76) == v44 ) { v6 = *v4[90]; v7 = (char *)sub_6D3800(); v8 = sub_6D36C0(v7, v44); (*(void (__thiscall **)(_DWORD *, int))(v6 + 472))(v4[90], v8); v9 = *v4[92]; v10 = sub_7549E0("%d", *(_DWORD *)(v3 + 5)); (*(void (__thiscall **)(_DWORD *, char *))(v9 + 472))(v4[92], v10); v11 = *v4[94]; v12 = sub_7549E0("%d", *(_DWORD *)(v3 + 9)); (*(void (__thiscall **)(_DWORD *, char *))(v11 + 472))(v4[94], v12); (*(void (__stdcall **)(int *))(*v4[90] + 468))(&dword_AA8C88); } else { v13 = *(_DWORD *)(v3 + 1); v45 = *(_DWORD *)(v3 + 1); if ( *(_DWORD *)(sub_6D38F0() + 80) == v13 ) { v14 = *v4[91]; v15 = (char *)sub_6D3800(); v16 = sub_6D36C0(v15, v45); (*(void (__thiscall **)(_DWORD *, int))(v14 + 472))(v4[91], v16); v17 = *v4[93]; v18 = sub_7549E0("%d", *(_DWORD *)(v3 + 5)); (*(void (__thiscall **)(_DWORD *, char *))(v17 + 472))(v4[93], v18); v19 = *v4[95]; v20 = sub_7549E0("%d", *(_DWORD *)(v3 + 9)); (*(void (__thiscall **)(_DWORD *, char *))(v19 + 472))(v4[95], v20); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(*v4[91] + 464))(62, 158, 255, 255); } } return; } v21 = *(_DWORD *)(a3 + 1); if ( !v21 ) return; if ( *((_DWORD *)dword_AD8EBC + 169) == v21 ) { v22 = *v4[90]; v23 = *(_DWORD *)(a3 + 1); v24 = (char *)sub_6D3800(); v25 = sub_6D36C0(v24, v23); (*(void (__thiscall **)(_DWORD *, int, int))(v22 + 472))(v4[90], v25, v43); v26 = *v4[92]; v27 = sub_7549E0("%d", *(_DWORD *)(a3 + 5)); (*(void (__thiscall **)(_DWORD *, char *))(v26 + 472))(v4[92], v27); v28 = *v4[94]; v29 = sub_7549E0("%d", *(_DWORD *)(a3 + 9)); (*(void (__thiscall **)(_DWORD *, char *))(v28 + 472))(v4[94], v29); v30 = *((_DWORD *)dword_AD8EBC + 169); v31 = sub_6D38F0(); v32 = v4[90]; v33 = v30 == *(_DWORD *)(v31 + 76); goto LABEL_14; } if ( v21 && *((_DWORD *)dword_AD8EBC + 169) != v21 ) { v34 = *v4[91]; v35 = *(_DWORD *)(a3 + 1); v36 = (char *)sub_6D3800(); v37 = sub_6D36C0(v36, v35); (*(void (__thiscall **)(_DWORD *, int, int))(v34 + 472))(v4[91], v37, v43); v38 = *v4[93]; v39 = sub_7549E0("%d", *(_DWORD *)(a3 + 5)); (*(void (__thiscall **)(_DWORD *, char *))(v38 + 472))(v4[93], v39); v40 = *v4[95]; v41 = sub_7549E0("%d", *(_DWORD *)(a3 + 9)); (*(void (__thiscall **)(_DWORD *, char *))(v40 + 472))(v4[95], v41); v33 = *(_DWORD *)(a3 + 1) == *(_DWORD *)(sub_6D38F0() + 76); v32 = v4[91]; LABEL_14: v42 = *v32; if ( v33 ) (*(void (__cdecl **)(int *))(v42 + 468))(&dword_AA8C88); else (*(void (__stdcall **)(signed int, signed int, signed int))(v42 + 464))(62, 158, 255); return; } } } // 5E9D80: could not find valid save-restore pair for ebx // AA8C88: using guessed type int dword_AA8C88; //----- (005EA090) -------------------------------------------------------- char __thiscall sub_5EA090(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // edi char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax int v12; // eax int v13; // ST8C_4 int v14; // eax volatile LONG v15; // ST8C_4 const CHAR *v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax int v19; // eax int v20; // ST8C_4 int v21; // eax volatile LONG v22; // ST8C_4 const CHAR *v23; // eax volatile LONG *v24; // ecx int v25; // ST8C_4 int v26; // eax volatile LONG v27; // ST8C_4 const CHAR *v28; // eax volatile LONG *v29; // ecx int v30; // ST8C_4 int v31; // eax volatile LONG v32; // ST8C_4 const CHAR *v33; // eax int v34; // eax volatile LONG *v35; // ST74_4 int v36; // ST8C_4 volatile LONG *v37; // eax volatile LONG *v38; // eax int v39; // eax volatile LONG *v40; // ST74_4 int v41; // ST8C_4 volatile LONG *v42; // eax volatile LONG *v43; // eax volatile LONG *v44; // ecx int v45; // ST8C_4 int v46; // eax volatile LONG *v47; // eax volatile LONG *v48; // ecx int v49; // ST8C_4 int v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // ecx int v53; // ST8C_4 int v54; // eax volatile LONG *v55; // eax volatile LONG *v56; // ecx int v57; // ST8C_4 int v58; // eax volatile LONG *v59; // eax void (__thiscall ***v60)(_DWORD, signed int); // esi volatile LONG *v61; // [esp+90h] [ebp-1Ch] int v62; // [esp+94h] [ebp-18h] int v63; // [esp+98h] [ebp-14h] int v64; // [esp+9Ch] [ebp-10h] int v65; // [esp+A8h] [ebp-4h] int v66; // [esp+B4h] [ebp+8h] volatile LONG *v67; // [esp+B4h] [ebp+8h] volatile LONG **v68; // [esp+B4h] [ebp+8h] int v69; // [esp+B4h] [ebp+8h] volatile LONG *v70; // [esp+B4h] [ebp+8h] volatile LONG **v71; // [esp+B4h] [ebp+8h] int v72; // [esp+B4h] [ebp+8h] volatile LONG *v73; // [esp+B4h] [ebp+8h] volatile LONG **v74; // [esp+B4h] [ebp+8h] int v75; // [esp+B4h] [ebp+8h] volatile LONG *v76; // [esp+B4h] [ebp+8h] volatile LONG **v77; // [esp+B4h] [ebp+8h] int v78; // [esp+B4h] [ebp+8h] volatile LONG **v79; // [esp+B4h] [ebp+8h] int v80; // [esp+B4h] [ebp+8h] volatile LONG **v81; // [esp+B4h] [ebp+8h] int v82; // [esp+B4h] [ebp+8h] volatile LONG **v83; // [esp+B4h] [ebp+8h] int v84; // [esp+B4h] [ebp+8h] volatile LONG **v85; // [esp+B4h] [ebp+8h] int v86; // [esp+B4h] [ebp+8h] volatile LONG **v87; // [esp+B4h] [ebp+8h] int v88; // [esp+B4h] [ebp+8h] volatile LONG **v89; // [esp+B4h] [ebp+8h] volatile LONG *v90; // [esp+B4h] [ebp+8h] volatile LONG **v91; // [esp+B4h] [ebp+8h] v2 = (int)this; v62 = 0; v65 = 0; v61 = (volatile LONG *)sub_43D0D0(4u); if ( !v61 ) goto LABEL_23; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTBattleStatusMin.nif"); sub_8F66B0(v6, (int)&v62, v5); if ( !v62 ) return 0; v7 = sub_8FB140(v62, (int)"Frame", (int)&v63, (int)&v64, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"GTStatusMiniWin", 0) ) { LABEL_23: v3 = (void (__thiscall ***)(_DWORD, signed int))v62; v65 = -1; if ( v62 && !InterlockedDecrement((volatile LONG *)(v62 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v63; v9 = v64; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v62, (int)"Theme", (int)&v63, (int)&v64, v10); else v11 = sub_8FB140(v62, (int)"Theme", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64 - v9, (int)v11, v2, 0, 0); v12 = *sub_8FB140(v62, (int)"WinTitle", (int)&v63, (int)&v64, 0)[9]; v66 = *(_DWORD *)(v12 + 24); v13 = *(_DWORD *)(v12 + 20); v14 = sub_421050(0); v67 = sub_8F4A20(v63 - v8, v64 - v9, v13, v66, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v67 + 488))(v67, 5); v15 = *v67; v16 = sub_40A910(883070871); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v15 + 472))(v67, v16); (*(void (__stdcall **)(_DWORD))(*v67 + 240))(0); v17 = sub_8FB140(v62, (int)"Panel01", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v17, v2, 0, 0); v18 = sub_8FB140(v62, (int)"Panel02", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v18, v2, 0, 0); v68 = sub_8FB140(v62, (int)"Text01", (int)&v63, (int)&v64, v61); sub_8F3EB0(v63 - v8, v64 - v9, (int)v68, v2, 0, 0); v19 = *v68[9]; v69 = *(_DWORD *)(v19 + 24); v20 = *(_DWORD *)(v19 + 20); v21 = sub_421050(0); v70 = sub_8F4A20(v63 - v8, v64 - v9, v20, v69, v21, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v70 + 488))(v70, 5); v22 = *v70; v23 = sub_40A910(-622051826); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v70, v23); (*(void (__stdcall **)(_DWORD))(*v70 + 240))(0); v71 = sub_8FB140(v62, (int)"Text02", (int)&v63, (int)&v64, v61); sub_8F3EB0(v63 - v8, v64 - v9, (int)v71, v2, 0, 0); v24 = v71[9]; v72 = *(_DWORD *)(*v24 + 24); v25 = *(_DWORD *)(*v24 + 20); v26 = sub_421050(0); v73 = sub_8F4A20(v63 - v8, v64 - v9, v25, v72, v26, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v73 + 488))(v73, 5); v27 = *v73; v28 = sub_40A910(-582139617); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v27 + 472))(v73, v28); (*(void (__stdcall **)(_DWORD))(*v73 + 240))(0); v74 = sub_8FB140(v62, (int)"Text03", (int)&v63, (int)&v64, v61); sub_8F3EB0(v63 - v8, v64 - v9, (int)v74, v2, 0, 0); v29 = v74[9]; v75 = *(_DWORD *)(*v29 + 24); v30 = *(_DWORD *)(*v29 + 20); v31 = sub_421050(0); v76 = sub_8F4A20(v63 - v8, v64 - v9, v30, v75, v31, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v76 + 488))(v76, 5); v32 = *v76; v33 = sub_40A910(-807675326); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v76, v33); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); v77 = sub_8FB140(v62, (int)"GuildName01", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v77, v2, 0, 0); v34 = *v77[9]; v35 = (volatile LONG *)dword_AD01E8; v78 = *(_DWORD *)(v34 + 24); v36 = *(_DWORD *)(v34 + 20); v37 = (volatile LONG *)sub_421050(0); v38 = sub_90AEF0(v63 - v8, v64 - v9, v36, v78, v37, (_DWORD *)v2, 0, 0, 0, 1, v35, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 360) = v38; (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 360) + 472))(&unk_9E876E); v79 = sub_8FB140(v62, (int)"GuildName02", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v79, v2, 0, 0); v39 = *v79[9]; v40 = (volatile LONG *)dword_AD01E8; v80 = *(_DWORD *)(v39 + 24); v41 = *(_DWORD *)(v39 + 20); v42 = (volatile LONG *)sub_421050(0); v43 = sub_90AEF0(v63 - v8, v64 - v9, v41, v80, v42, (_DWORD *)v2, 0, 0, 0, 1, v40, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 364) = v43; (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 364) + 472))(&unk_9E876F); v81 = sub_8FB140(v62, (int)"Score01", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v81, v2, 0, 0); v44 = v81[9]; v82 = *(_DWORD *)(*v44 + 24); v45 = *(_DWORD *)(*v44 + 20); v46 = sub_421050(0); v47 = sub_8F4A20(v63 - v8, v64 - v9, v45, v82, v46, v2, 0, 0); *(_DWORD *)(v2 + 368) = v47; (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 368) + 472))(&unk_9E8779); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 368) + 240))(0); v83 = sub_8FB140(v62, (int)"Score02", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v83, v2, 0, 0); v48 = v83[9]; v84 = *(_DWORD *)(*v48 + 24); v49 = *(_DWORD *)(*v48 + 20); v50 = sub_421050(0); v51 = sub_8F4A20(v63 - v8, v64 - v9, v49, v84, v50, v2, 0, 0); *(_DWORD *)(v2 + 372) = v51; (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 372) + 472))(&unk_9E877A); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v85 = sub_8FB140(v62, (int)"Flag01", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v85, v2, 0, 0); v52 = v85[9]; v86 = *(_DWORD *)(*v52 + 24); v53 = *(_DWORD *)(*v52 + 20); v54 = sub_421050(0); v55 = sub_8F4A20(v63 - v8, v64 - v9, v53, v86, v54, v2, 0, 0); *(_DWORD *)(v2 + 376) = v55; (*(void (__thiscall **)(volatile LONG *, signed int))(*v55 + 488))(v55, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 376) + 472))(&unk_9E877B); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v87 = sub_8FB140(v62, (int)"Flag02", (int)&v63, (int)&v64, 0); sub_8F3EB0(v63 - v8, v64, (int)v87, v2, 0, 0); v56 = v87[9]; v88 = *(_DWORD *)(*v56 + 24); v57 = *(_DWORD *)(*v56 + 20); v58 = sub_421050(0); v59 = sub_8F4A20(v63 - v8, v64 - v9, v57, v88, v58, v2, 0, 0); *(_DWORD *)(v2 + 380) = v59; (*(void (__thiscall **)(volatile LONG *, signed int))(*v59 + 488))(v59, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 380) + 472))(&unk_9E8792); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v89 = sub_8FB140(v62, (int)"MaxNor", (int)&v63, (int)&v64, v61); sub_8FB650(v89, v62, (int)"MaxClick"); sub_8FB650(v89, v62, (int)"MaxOver"); sub_8FE0F0(v63 - v8, v64 - v9, (int)v89, v2, 0, 0, 0); v90 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v62 + 72))("HelpLinkNor") ) { v91 = sub_8FB140(v62, (int)"HelpLinkNor", (int)&v63, (int)&v64, v90); sub_8FB650(v91, v62, (int)"HelpLinkClick"); sub_8FB650(v91, v62, (int)"HelpLinkOver"); sub_8FE0F0(v63 - v8, v64 - v9, (int)v91, v2, 1, 0, 0); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.80000001, 0.40000001); v60 = (void (__thiscall ***)(_DWORD, signed int))v62; v65 = -1; if ( v62 && !InterlockedDecrement((volatile LONG *)(v62 + 4)) && v60 ) (**v60)(v60, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005EAA60) -------------------------------------------------------- int __cdecl sub_5EAA60(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = >StatusMiniWin::`vftable'; *(_DWORD *)(v2 + 232) = >StatusMiniWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_BYTE *)(v2 + 384) = 0; *(_DWORD *)(v2 + 388) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E8B58: using guessed type void *GTStatusMiniWin::`vftable'; // 9E8B74: using guessed type void *GTStatusMiniWin::`vftable'; //----- (005EABC0) -------------------------------------------------------- void __thiscall sub_5EABC0(_DWORD *this, int *a2) { void *v2; // eax _BYTE *v3; // eax int *v4; // eax int v5; // ecx CHAR *v6; // eax int v7; // ST0C_4 _DWORD *v8; // eax int v9; // eax int v10; // ST0C_4 _DWORD *v11; // eax int v12; // edx int v13; // ST0C_4 _DWORD *v14; // eax int v15; // ecx int v16; // ST0C_4 _DWORD *v17; // eax int v18; // eax int v19; // ST0C_4 _DWORD *v20; // eax int v21; // edx unsigned int v22; // edi unsigned __int8 *v23; // edx unsigned int v24; // eax unsigned __int8 *v25; // ecx int v26; // eax int v27; // ecx int v28; // edx int v29; // eax int v30; // [esp+10h] [ebp-ECh] void **v31; // [esp+14h] [ebp-E8h] void **v32; // [esp+60h] [ebp-9Ch] int v33; // [esp+A8h] [ebp-54h] void ***v34; // [esp+ACh] [ebp-50h] _DWORD *v35; // [esp+B0h] [ebp-4Ch] void *v36; // [esp+B4h] [ebp-48h] unsigned int v37; // [esp+C4h] [ebp-38h] unsigned int v38; // [esp+C8h] [ebp-34h] void *v39; // [esp+D0h] [ebp-2Ch] unsigned int v40; // [esp+E4h] [ebp-18h] int v41; // [esp+F8h] [ebp-4h] v35 = this; v2 = (void *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v38 = 15; v37 = 0; LOBYTE(v36) = 0; sub_4018E0(&v36, v2, strlen((const char *)v2)); v41 = 0; sub_529D40(&v30, 2u, 1); LOBYTE(v41) = 1; v3 = sub_406190(&v30, " "); sub_529AA0(v3, a2); if ( (unsigned int)a2[5] < 0x10 ) v4 = a2; else v4 = (int *)*a2; v33 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v35[89], v4); v5 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v5) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 2; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); v6 = (CHAR *)sub_5E8560(*((_BYTE *)a2 + 44)); sub_4661A0((_DWORD *)v35[89], v33, 1, v6); sub_529D40(&v30, 2u, 1); v7 = a2[7]; LOBYTE(v41) = 3; sub_529500(&v30, v7); v8 = sub_52B2F0(&v30, &v39); LOBYTE(v41) = 4; if ( v8[5] >= 0x10u ) v8 = (_DWORD *)*v8; sub_4661A0((_DWORD *)v35[89], v33, 2, v8); if ( v40 >= 0x10 ) operator delete(v39); v9 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v9) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 5; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); sub_529D40(&v30, 2u, 1); v10 = a2[8]; LOBYTE(v41) = 6; sub_529500(&v30, v10); v11 = sub_52B2F0(&v30, &v39); LOBYTE(v41) = 7; if ( v11[5] >= 0x10u ) v11 = (_DWORD *)*v11; sub_4661A0((_DWORD *)v35[89], v33, 3, v11); if ( v40 >= 0x10 ) operator delete(v39); v12 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v12) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 8; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); sub_529D40(&v30, 2u, 1); v13 = a2[10]; LOBYTE(v41) = 9; sub_529500(&v30, v13); v14 = sub_52B2F0(&v30, &v39); LOBYTE(v41) = 10; if ( v14[5] >= 0x10u ) v14 = (_DWORD *)*v14; sub_4661A0((_DWORD *)v35[89], v33, 4, v14); if ( v40 >= 0x10 ) operator delete(v39); v15 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v15) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 11; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); sub_529D40(&v30, 2u, 1); v16 = a2[9]; LOBYTE(v41) = 12; sub_529500(&v30, v16); v17 = sub_52B2F0(&v30, &v39); LOBYTE(v41) = 13; if ( v17[5] >= 0x10u ) v17 = (_DWORD *)*v17; sub_4661A0((_DWORD *)v35[89], v33, 5, v17); if ( v40 >= 0x10 ) operator delete(v39); v18 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v18) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 14; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); sub_529D40(&v30, 2u, 1); v19 = a2[12]; LOBYTE(v41) = 15; sub_529500(&v30, v19); v20 = sub_52B2F0(&v30, &v39); LOBYTE(v41) = 16; if ( v20[5] >= 0x10u ) v20 = (_DWORD *)*v20; sub_4661A0((_DWORD *)v35[89], v33, 6, v20); if ( v40 >= 0x10 ) operator delete(v39); v21 = *(_DWORD *)(v30 + 4); v34 = &v32; *(int *)((char *)&v30 + v21) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; LOBYTE(v41) = 17; v31 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v31); sub_423AE0(&v31); *(int *)((char *)&v30 + *(_DWORD *)(v30 + 4)) = (int)&std::basic_ostream>::`vftable'; LOBYTE(v41) = 0; v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); v22 = a2[4]; if ( (unsigned int)a2[5] < 0x10 ) v23 = (unsigned __int8 *)a2; else v23 = (unsigned __int8 *)*a2; v24 = v37; if ( v37 >= v22 ) v24 = a2[4]; v25 = (unsigned __int8 *)v36; if ( v38 < 0x10 ) v25 = (unsigned __int8 *)&v36; if ( !sub_40C0B0(v25, v23, v24) && v37 >= v22 && v37 == v22 ) { v26 = (v37 != v22) + 116; v27 = 245; v28 = 250; goto LABEL_44; } v29 = sub_6D3800(); if ( v29 && *(_BYTE *)(v29 + 2748) ) { if ( v35[109] ) goto LABEL_48; if ( *(_DWORD *)(sub_6D38F0() + 76) == a2[13] ) { v27 = 0; v26 = 255; v28 = 0; goto LABEL_44; } if ( *(_DWORD *)(sub_6D38F0() + 80) != a2[13] ) { LABEL_48: v26 = (int)v34; v27 = (int)v34; v28 = (int)v34; } else { v26 = 62; v27 = 158; v28 = 255; } } else { v26 = 255; v27 = 255; v28 = 0; } LABEL_44: sub_464BE0((_DWORD *)v35[89], v33, v26, v27, v28); if ( v38 >= 0x10 ) operator delete(v36); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (005EB220) -------------------------------------------------------- void __thiscall sub_5EB220(_DWORD **this) { _DWORD **v1; // edi void *v2; // eax char *v3; // esi int v4; // ecx unsigned int v5; // eax int *v6; // ebx unsigned int v7; // esi unsigned __int8 *v8; // edx unsigned int v9; // ecx unsigned __int8 *v10; // eax int v11; // eax unsigned int v12; // ecx unsigned __int8 *v13; // edx unsigned __int8 *v14; // eax char *v15; // esi unsigned int v16; // edx int *v17; // ebx char *v18; // ecx unsigned int v19; // edx unsigned __int8 *v20; // esi int v21; // eax int v22; // eax unsigned int v23; // eax _DWORD *v24; // eax unsigned int v25; // edx unsigned int v26; // [esp+10h] [ebp-38h] unsigned int v27; // [esp+10h] [ebp-38h] unsigned int v28; // [esp+14h] [ebp-34h] int v29; // [esp+14h] [ebp-34h] int v30; // [esp+18h] [ebp-30h] int v31; // [esp+18h] [ebp-30h] void *v32; // [esp+1Ch] [ebp-2Ch] unsigned int v33; // [esp+2Ch] [ebp-1Ch] unsigned int v34; // [esp+30h] [ebp-18h] int v35; // [esp+44h] [ebp-4h] v1 = this; sub_466A50(this[89]); v2 = (void *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v34 = 15; v33 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, v2, strlen((const char *)v2)); v3 = (char *)v1[105]; v4 = (char *)v1[106] - v3; v35 = 0; v28 = 0; if ( v4 / 56 ) { v30 = 0; do { v5 = *(_DWORD *)&v3[v30 + 20]; v6 = (int *)&v3[v30]; v7 = *(_DWORD *)&v3[v30 + 16]; v26 = v5; if ( v5 < 0x10 ) v8 = (unsigned __int8 *)v6; else v8 = (unsigned __int8 *)*v6; v9 = v33; if ( v33 >= v7 ) v9 = v7; v10 = (unsigned __int8 *)v32; if ( v34 < 0x10 ) v10 = (unsigned __int8 *)&v32; v11 = sub_40C0B0(v10, v8, v9); v12 = v33; if ( !v11 && v33 >= v7 ) { LOBYTE(v11) = v33 != v7; if ( !v11 && !v1[109] ) goto LABEL_65; } if ( v26 < 0x10 ) v13 = (unsigned __int8 *)v6; else v13 = (unsigned __int8 *)*v6; if ( v33 >= v7 ) v12 = v7; v14 = (unsigned __int8 *)v32; if ( v34 < 0x10 ) v14 = (unsigned __int8 *)&v32; if ( !sub_40C0B0(v14, v13, v12) && v33 >= v7 && v33 == v7 && v1[109] == (_DWORD *)1 ) LABEL_65: sub_5EABC0(v1, v6); v3 = (char *)v1[105]; v30 += 56; ++v28; } while ( v28 < ((char *)v1[106] - v3) / 56 ); } v15 = (char *)v1[105]; v16 = (signed int)((char *)v1[106] - v15 + ((unsigned __int64)(-1840700269i64 * ((char *)v1[106] - v15)) >> 32)) >> 5; v27 = 0; if ( v16 + (v16 >> 31) ) { v29 = 0; do { v17 = (int *)&v15[v29]; v31 = (int)&v15[v29]; if ( *(_DWORD *)&v15[v29 + 20] < 0x10u ) v18 = &v15[v29]; else v18 = (char *)*v17; v19 = v33; if ( v33 >= *(_DWORD *)&v15[v29 + 16] ) v19 = *(_DWORD *)&v15[v29 + 16]; v20 = (unsigned __int8 *)v32; if ( v34 < 0x10 ) v20 = (unsigned __int8 *)&v32; if ( v19 < 4 ) { LABEL_39: if ( !v19 ) goto LABEL_49; } else { while ( *(_DWORD *)v20 == *(_DWORD *)v18 ) { v19 -= 4; v18 += 4; v20 += 4; if ( v19 < 4 ) goto LABEL_39; } } v21 = *v20 - (unsigned __int8)*v18; if ( *v20 == (unsigned __int8)*v18 ) { if ( v19 <= 1 ) goto LABEL_48; v21 = v20[1] - (unsigned __int8)v18[1]; if ( v20[1] == (unsigned __int8)v18[1] ) { if ( v19 <= 2 ) goto LABEL_48; v21 = v20[2] - (unsigned __int8)v18[2]; if ( v20[2] == (unsigned __int8)v18[2] ) { if ( v19 <= 3 ) { LABEL_48: v17 = (int *)v31; LABEL_49: v22 = 0; goto LABEL_50; } v21 = v20[3] - (unsigned __int8)v18[3]; } } } v17 = (int *)v31; v22 = (v21 >> 31) | 1; LABEL_50: if ( !v22 ) { v23 = v17[4]; if ( v33 >= v23 && v33 == v23 ) goto LABEL_60; } v24 = v1[109]; if ( !v24 ) goto LABEL_59; if ( v24 != (_DWORD *)1 ) { if ( v24 != (_DWORD *)2 || v17[13] == *((_DWORD *)dword_AD8EBC + 169) ) goto LABEL_60; LABEL_59: sub_5EABC0(v1, v17); goto LABEL_60; } if ( v17[13] == *((_DWORD *)dword_AD8EBC + 169) ) goto LABEL_59; LABEL_60: v15 = (char *)v1[105]; v29 += 56; v25 = (signed int)((char *)v1[106] - v15 + ((unsigned __int64)(-1840700269i64 * ((char *)v1[106] - v15)) >> 32)) >> 5; ++v27; } while ( v27 < v25 + (v25 >> 31) ); } sub_465130(v1[89]); if ( v34 >= 0x10 ) operator delete(v32); } //----- (005EB530) -------------------------------------------------------- _DWORD *__thiscall sub_5EB530(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ecx _DWORD *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = >StatusWin::`vftable'; v1[58] = >StatusWin::`vftable'; v1[103] = 15; v1[102] = 0; *((_BYTE *)v1 + 392) = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v2 = v1 + 110; v1[114] = 0; v1[109] = 0; v3 = v1[114]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v1[114] = 0; } result = v1; if ( sub_5E9760 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; v1[111] = sub_5E9760; v1[114] = v1 + 110; } else { v1[114] = 0; } *((_BYTE *)v1 + 464) = 0; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E8DB4: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; // 9E8DD0: using guessed type void *GTStatusWin::`vftable'; // 9E8DEC: using guessed type void *GTStatusWin::`vftable'; //----- (005EB610) -------------------------------------------------------- LONG __thiscall sub_5EB610(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; *this = >StatusWin::`vftable'; this[58] = >StatusWin::`vftable'; v2 = this[114]; if ( v2 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v2 + 12))(v2 != (_DWORD)(v1 + 110)); v1[114] = 0; } v3 = v1[105]; if ( v3 ) { sub_5ED280(v3, v1[106]); operator delete((void *)v1[105]); } v1[105] = 0; v1[106] = 0; v1[107] = 0; if ( v1[103] >= 0x10u ) operator delete((void *)v1[98]); v1[103] = 15; v1[102] = 0; *((_BYTE *)v1 + 392) = 0; return sub_8F10F0(v1); } // 9E8DD0: using guessed type void *GTStatusWin::`vftable'; // 9E8DEC: using guessed type void *GTStatusWin::`vftable'; //----- (005EB710) -------------------------------------------------------- volatile LONG *__cdecl sub_5EB710(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1D8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5EB530(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005EB840) -------------------------------------------------------- int __thiscall sub_5EB840(_DWORD *this) { _DWORD *v1; // esi const void **v2; // eax int v3; // ecx int v4; // edi v1 = this; v2 = (const void **)this[106]; v3 = this[105]; if ( (const void **)v3 != v2 ) { v4 = sub_5ED210(v2, v2, v3); sub_5ED280(v4, v1[106]); v1[106] = v4; } sub_466A50((_DWORD *)v1[89]); return sub_465130((_DWORD *)v1[89]); } //----- (005EB8B0) -------------------------------------------------------- char __thiscall sub_5EB8B0(volatile LONG **this, int a2) { volatile LONG **v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax int v12; // eax volatile LONG **v13; // edx int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // edx int v22; // eax volatile LONG **v23; // edx int v24; // eax volatile LONG *v25; // eax const CHAR *v26; // eax volatile LONG *v27; // ecx volatile LONG **v28; // eax int v29; // eax volatile LONG *v30; // eax const CHAR *v31; // eax volatile LONG *v32; // ecx volatile LONG **v33; // eax int v34; // eax volatile LONG *v35; // eax const CHAR *v36; // eax volatile LONG **v37; // eax volatile LONG **v38; // eax int v39; // STD0_4 char *v40; // eax int v41; // eax volatile LONG **v42; // ecx volatile LONG **v43; // eax volatile LONG *v44; // eax volatile LONG **v45; // eax int v46; // eax int v47; // eax volatile LONG *v48; // ecx int (*v49)(void); // eax int v50; // eax int v51; // eax int v52; // eax int v53; // edx int v54; // eax volatile LONG *v55; // eax volatile LONG v56; // edx const CHAR *v57; // eax int v58; // eax int v59; // edx int v60; // eax volatile LONG *v61; // eax volatile LONG v62; // edx const CHAR *v63; // eax int v64; // eax int v65; // edx int v66; // eax volatile LONG *v67; // eax volatile LONG v68; // edx const CHAR *v69; // eax int v70; // eax int v71; // edx int v72; // eax volatile LONG *v73; // eax volatile LONG v74; // edx const CHAR *v75; // eax int v76; // eax int v77; // edx int v78; // eax volatile LONG *v79; // eax volatile LONG v80; // edx const CHAR *v81; // eax int v82; // eax int v83; // edx int v84; // eax volatile LONG *v85; // eax volatile LONG v86; // edx const CHAR *v87; // eax int v88; // eax int v89; // edx int v90; // eax volatile LONG *v91; // eax volatile LONG v92; // edx const CHAR *v93; // eax volatile LONG *v94; // eax int v95; // edx int v96; // eax int v97; // edx int v98; // eax volatile LONG *v99; // eax int v100; // eax int v101; // edx int v102; // eax volatile LONG *v103; // eax int v104; // eax int v105; // edx int v106; // eax volatile LONG *v107; // eax int v108; // eax int v109; // edx int v110; // eax volatile LONG *v111; // eax void (__thiscall ***v112)(_DWORD, signed int); // esi void *v113; // [esp+E4h] [ebp-6Ch] int v114; // [esp+E8h] [ebp-68h] int v115; // [esp+ECh] [ebp-64h] char v116; // [esp+F0h] [ebp-60h] char v117; // [esp+F4h] [ebp-5Ch] int v118; // [esp+F8h] [ebp-58h] int v119; // [esp+FCh] [ebp-54h] int v120; // [esp+100h] [ebp-50h] int v121; // [esp+104h] [ebp-4Ch] volatile LONG *v122; // [esp+108h] [ebp-48h] volatile LONG *v123; // [esp+10Ch] [ebp-44h] char v124[4]; // [esp+110h] [ebp-40h] int v125; // [esp+114h] [ebp-3Ch] int v126; // [esp+118h] [ebp-38h] int v127; // [esp+11Ch] [ebp-34h] volatile LONG **v128; // [esp+120h] [ebp-30h] void *v129; // [esp+124h] [ebp-2Ch] int v130; // [esp+134h] [ebp-1Ch] unsigned int v131; // [esp+138h] [ebp-18h] int v132; // [esp+14Ch] [ebp-4h] v2 = this; v125 = 0; v132 = 0; v122 = (volatile LONG *)sub_43D0D0(4u); if ( !v122 ) { v132 = -1; if ( v125 && !InterlockedDecrement((volatile LONG *)(v125 + 4)) ) { if ( v125 ) (**(void (__thiscall ***)(int, signed int))v125)(v125, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTBattleStatus.nif"); sub_8F66B0(v5, (int)&v125, v4); if ( !v125 ) return 0; v6 = sub_8FB140(v125, (int)"Frame", (int)&v126, (int)&v127, 0); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, a2, (int)"GTStatusWin", 0) ) { v8 = v126; v9 = v127; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v125, (int)"Theme", (int)&v126, (int)&v127, v10); else v11 = sub_8FB140(v125, (int)"Theme", (int)&v126, (int)&v127, 0); sub_8F3EB0(v126 - v8, v127 - v9, (int)v11, (int)v2, 0, 0); v12 = *sub_8FB140(v125, (int)"WinTitle", (int)&v126, (int)&v127, 0)[9]; v13 = *(volatile LONG ***)(v12 + 20); *(_DWORD *)v124 = *(_DWORD *)(v12 + 24); v128 = v13; v14 = sub_421050(0); v15 = sub_8F4A20(v126 - v8, v127 - v9, (int)v128, *(int *)v124, v14, (int)v2, 0, 0); v16 = *v15; v128 = (volatile LONG **)v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 5); *(_DWORD *)v124 = *v128 + 118; v17 = sub_40A910(883070871); (**(void (__thiscall ***)(volatile LONG **, const CHAR *))v124)(v128, v17); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v18 = sub_8FB140(v125, (int)"Panel01", (int)&v126, (int)&v127, 0); sub_8F3EB0(v126 - v8, v127, (int)v18, (int)v2, 0, 0); v19 = sub_8FB140(v125, (int)"Panel02", (int)&v126, (int)&v127, 0); sub_8F3EB0(v126 - v8, v127, (int)v19, (int)v2, 0, 0); v128 = sub_8FB140(v125, (int)"Tab01", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Tab01Text"); v20 = sub_465940(v126 - v8, v127 - v9, (int)v128, (int)v2, 0, 0); v21 = v128; v2[86] = v20; v22 = *v21[9]; v23 = *(volatile LONG ***)(v22 + 20); *(_DWORD *)v124 = *(_DWORD *)(v22 + 24); v128 = v23; v24 = sub_421050(7); v25 = sub_8F4A20(v126 - v8, v127 - v9 + 1, (int)v128, *(int *)v124, v24, (int)v2, 0, 0); v2[95] = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); *(_DWORD *)v124 = *v2[95] + 472; v26 = sub_40A910(978533704); (**(void (__thiscall ***)(volatile LONG *, const CHAR *))v124)(v2[95], v26); (*(void (__stdcall **)(_DWORD))(*v2[95] + 240))(0); (*(void (__stdcall **)(int *))(*v2[95] + 468))(&dword_AA8CB8); v128 = sub_8FB140(v125, (int)"Tab02", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Tab02Text"); v2[87] = sub_465940(v126 - v8, v127 - v9, (int)v128, (int)v2, 1, 0); v27 = v128[9]; v28 = *(volatile LONG ***)(*v27 + 20); *(_DWORD *)v124 = *(_DWORD *)(*v27 + 24); v128 = v28; v29 = sub_421050(7); v30 = sub_8F4A20(v126 - v8, v127 - v9 + 1, (int)v128, *(int *)v124, v29, (int)v2, 0, 0); v2[96] = v30; (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 488))(v30, 5); *(_DWORD *)v124 = *v2[96] + 472; v31 = sub_40A910(-295679672); (**(void (__thiscall ***)(volatile LONG *, const CHAR *))v124)(v2[96], v31); (*(void (__stdcall **)(_DWORD))(*v2[96] + 240))(0); v128 = sub_8FB140(v125, (int)"Tab03", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Tab03Text"); v2[88] = sub_465940(v126 - v8, v127 - v9, (int)v128, (int)v2, 2, 0); v32 = v128[9]; v33 = *(volatile LONG ***)(*v32 + 20); *(_DWORD *)v124 = *(_DWORD *)(*v32 + 24); v128 = v33; v34 = sub_421050(7); v35 = sub_8F4A20(v126 - v8, v127 - v9 + 1, (int)v128, *(int *)v124, v34, (int)v2, 0, 0); v2[97] = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); *(_DWORD *)v124 = *v2[97] + 472; v36 = sub_40A910(861248149); (**(void (__thiscall ***)(volatile LONG *, const CHAR *))v124)(v2[97], v36); (*(void (__stdcall **)(_DWORD))(*v2[97] + 240))(0); v113 = 0; v114 = 0; v115 = 0; v117 = 0; v118 = 0; v119 = 0; v120 = 0; v121 = 0; LOBYTE(v132) = 1; v37 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v113, 1); *v37 = (volatile LONG *)1; v37[1] = (volatile LONG *)v125; v128 = v37; v131 = 15; v130 = 0; LOBYTE(v129) = 0; sub_4018E0(&v129, "ColumnBar01Nor", 0xEu); LOBYTE(v132) = 2; *(_DWORD *)v124 = v128 + 18; sub_40B060((int *)v128 + 18, (const void **)&v129); LOBYTE(v132) = 1; if ( v131 >= 0x10 ) operator delete(v129); v131 = 15; v130 = 0; LOBYTE(v129) = 0; sub_4018E0(&v129, "ColumnBar01Click", 0x10u); LOBYTE(v132) = 3; sub_40B060(*(int **)v124, (const void **)&v129); LOBYTE(v132) = 1; if ( v131 >= 0x10 ) operator delete(v129); v131 = 15; v130 = 0; LOBYTE(v129) = 0; sub_4018E0(&v129, "ColumnBar01Over", 0xFu); LOBYTE(v132) = 4; sub_40B060(*(int **)v124, (const void **)&v129); LOBYTE(v132) = 1; if ( v131 >= 0x10 ) operator delete(v129); *(_DWORD *)v124 = 1; do { v38 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v113, 2); v39 = *(_DWORD *)v124; v128 = v38; *v38 = (volatile LONG *)2; v40 = sub_7549E0("Column0%d", v39); v131 = 15; v130 = 0; LOBYTE(v129) = 0; v123 = (volatile LONG *)(v40 + 1); sub_4018E0(&v129, v40, strlen(v40)); LOBYTE(v132) = 5; sub_442C70((int *)v128 + 18, &v129); LOBYTE(v132) = 1; if ( v131 >= 0x10 ) operator delete(v129); v41 = *(_DWORD *)v124; v42 = v128; v131 = 15; v130 = 0; LOBYTE(v129) = 0; v128[1] = (volatile LONG *)v125; if ( v41 == 1 ) *((_BYTE *)v42 + 88) = 1; *(_DWORD *)v124 = v41 + 1; } while ( v41 + 1 < 8 ); v118 = 7; v119 = 0; sub_466680(&v113, 0); v43 = sub_8FB140(v125, (int)"SubText01", (int)&v126, (int)&v127, v122); v44 = sub_466330(v126 - v8, v127 - v9, (int)v43, *(float *)&v2, (int **)&v113, 0, 0); v2[89] = v44; sub_465130(v44); v45 = sub_8FB140(v125, (int)"SlideBar_SlideBtnMiddle", (int)&v126, (int)&v127, v122); v46 = sub_464310(v125, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v45, 0, v2); v2[90] = (volatile LONG *)v46; *(_DWORD *)(v46 + 312) = 3; *((_DWORD *)v2[90] + 76) = 1; v47 = *v2[90]; v48 = v2[90]; *(_DWORD *)v124 = v47; v49 = *(int (**)(void))(v47 + 168); v123 = v48; v50 = v49(); v51 = (*(int (__stdcall **)(int))(*v123 + 164))(v50); (*(void (__thiscall **)(volatile LONG *, int))(*(_DWORD *)v124 + 308))(v2[90], v51 - 4); v128 = sub_8FB140(v125, (int)"Title01Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title01Click"); sub_8FB650(v128, v125, (int)"Title01Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 4, 0, 0); v52 = *v128[9]; v53 = *(_DWORD *)(v52 + 20); v123 = *(volatile LONG **)(v52 + 24); *(_DWORD *)v124 = v53; v54 = sub_421050(7); v55 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v54, (int)v2, 0, 0); v56 = *v55; v128 = (volatile LONG **)v55; (*(void (__thiscall **)(volatile LONG *, signed int))(v56 + 488))(v55, 5); v123 = *v128 + 118; v57 = sub_40A910(793722778); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v57); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title02Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title02Click"); sub_8FB650(v128, v125, (int)"Title02Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 5, 0, 0); v58 = *v128[9]; v59 = *(_DWORD *)(v58 + 20); v123 = *(volatile LONG **)(v58 + 24); *(_DWORD *)v124 = v59; v60 = sub_421050(7); v61 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v60, (int)v2, 0, 0); v62 = *v61; v128 = (volatile LONG **)v61; (*(void (__thiscall **)(volatile LONG *, signed int))(v62 + 488))(v61, 5); v123 = *v128 + 118; v63 = sub_40A910(794396812); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v63); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title03Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title03Click"); sub_8FB650(v128, v125, (int)"Title03Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 6, 0, 0); v64 = *v128[9]; v65 = *(_DWORD *)(v64 + 20); v123 = *(volatile LONG **)(v64 + 24); *(_DWORD *)v124 = v65; v66 = sub_421050(7); v67 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v66, (int)v2, 0, 0); v68 = *v67; v128 = (volatile LONG **)v67; (*(void (__thiscall **)(volatile LONG *, signed int))(v68 + 488))(v67, 5); v123 = *v128 + 118; v69 = sub_40A910(-2137748244); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v69); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title04Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title04Click"); sub_8FB650(v128, v125, (int)"Title04Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 7, 0, 0); v70 = *v128[9]; v71 = *(_DWORD *)(v70 + 20); v123 = *(volatile LONG **)(v70 + 24); *(_DWORD *)v124 = v71; v72 = sub_421050(7); v73 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v72, (int)v2, 0, 0); v74 = *v73; v128 = (volatile LONG **)v73; (*(void (__thiscall **)(volatile LONG *, signed int))(v74 + 488))(v73, 5); v123 = *v128 + 118; v75 = sub_40A910(-1041437968); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v75); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title05Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title05Click"); sub_8FB650(v128, v125, (int)"Title05Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 8, 0, 0); v76 = *v128[9]; v77 = *(_DWORD *)(v76 + 20); v123 = *(volatile LONG **)(v76 + 24); *(_DWORD *)v124 = v77; v78 = sub_421050(7); v79 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v78, (int)v2, 0, 0); v80 = *v79; v128 = (volatile LONG **)v79; (*(void (__thiscall **)(volatile LONG *, signed int))(v80 + 488))(v79, 5); v123 = *v128 + 118; v81 = sub_40A910(-1980435235); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v81); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title06Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title06Click"); sub_8FB650(v128, v125, (int)"Title06Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 9, 0, 0); v82 = *v128[9]; v83 = *(_DWORD *)(v82 + 20); v123 = *(volatile LONG **)(v82 + 24); *(_DWORD *)v124 = v83; v84 = sub_421050(7); v85 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v84, (int)v2, 0, 0); v86 = *v85; v128 = (volatile LONG **)v85; (*(void (__thiscall **)(volatile LONG *, signed int))(v86 + 488))(v85, 5); v123 = *v128 + 118; v87 = sub_40A910(2090853621); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v87); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"Title07Nor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"Title07Click"); sub_8FB650(v128, v125, (int)"Title07Over"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 10, 0, 0); v88 = *v128[9]; v89 = *(_DWORD *)(v88 + 20); v123 = *(volatile LONG **)(v88 + 24); *(_DWORD *)v124 = v89; v90 = sub_421050(7); v91 = sub_8F4A20(v126 - v8, v127 - v9 + 1, *(int *)v124, (int)v123, v90, (int)v2, 0, 0); v92 = *v91; v128 = (volatile LONG **)v91; (*(void (__thiscall **)(volatile LONG *, signed int))(v92 + 488))(v91, 5); v123 = *v128 + 118; v93 = sub_40A910(-807675326); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v123)(v128, v93); (*((void (__stdcall **)(_DWORD))*v128 + 60))(0); v128 = sub_8FB140(v125, (int)"MinNor", (int)&v126, (int)&v127, v122); sub_8FB650(v128, v125, (int)"MinClick"); sub_8FB650(v128, v125, (int)"MinOver"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 11, 0, 0); v94 = (volatile LONG *)sub_43D0D0(4u); v95 = *(_DWORD *)v125; v123 = v94; if ( (*(int (__stdcall **)(const char *))(v95 + 72))("HelpLinkNor") ) { v128 = sub_8FB140(v125, (int)"HelpLinkNor", (int)&v126, (int)&v127, v123); sub_8FB650(v128, v125, (int)"HelpLinkClick"); sub_8FB650(v128, v125, (int)"HelpLinkOver"); sub_8FE0F0(v126 - v8, v127 - v9, (int)v128, (int)v2, 12, 0, 0); } v96 = *sub_8FB140(v125, (int)"GuildName01", (int)&v126, (int)&v127, v122)[9]; v97 = *(_DWORD *)(v96 + 20); v123 = *(volatile LONG **)(v96 + 24); *(_DWORD *)v124 = v97; v98 = sub_421050(0); v99 = sub_8F4A20(v126 - v8, v127 - v9, *(int *)v124, (int)v123, v98, (int)v2, 0, 0); v2[91] = v99; (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 5); (*(void (__stdcall **)(void *))(*v2[91] + 472))(&unk_9E8752); (*(void (__stdcall **)(_DWORD))(*v2[91] + 240))(0); v100 = *sub_8FB140(v125, (int)"Score01", (int)&v126, (int)&v127, v122)[9]; v101 = *(_DWORD *)(v100 + 20); v123 = *(volatile LONG **)(v100 + 24); *(_DWORD *)v124 = v101; v102 = sub_421050(0); v103 = sub_8F4A20(v126 - v8, v127 - v9, *(int *)v124, (int)v123, v102, (int)v2, 0, 0); v2[93] = v103; (*(void (__thiscall **)(volatile LONG *, signed int))(*v103 + 488))(v103, 5); (*(void (__stdcall **)(void *))(*v2[93] + 472))(&unk_9E8753); (*(void (__stdcall **)(_DWORD))(*v2[93] + 240))(0); v104 = *sub_8FB140(v125, (int)"GuildName02", (int)&v126, (int)&v127, v122)[9]; v105 = *(_DWORD *)(v104 + 20); v123 = *(volatile LONG **)(v104 + 24); *(_DWORD *)v124 = v105; v106 = sub_421050(0); v107 = sub_8F4A20(v126 - v8, v127 - v9, *(int *)v124, (int)v123, v106, (int)v2, 0, 0); v2[92] = v107; (*(void (__thiscall **)(volatile LONG *, signed int))(*v107 + 488))(v107, 5); (*(void (__stdcall **)(void *))(*v2[92] + 472))(&unk_9E8766); (*(void (__stdcall **)(_DWORD))(*v2[92] + 240))(0); v108 = *sub_8FB140(v125, (int)"Score02", (int)&v126, (int)&v127, v122)[9]; v109 = *(_DWORD *)(v108 + 20); v123 = *(volatile LONG **)(v108 + 24); *(_DWORD *)v124 = v109; v110 = sub_421050(0); v111 = sub_8F4A20(v126 - v8, v127 - v9, *(int *)v124, (int)v123, v110, (int)v2, 0, 0); v2[94] = v111; (*(void (__thiscall **)(volatile LONG *, signed int))(*v111 + 488))(v111, 5); (*(void (__stdcall **)(void *))(*v2[94] + 472))(&unk_9E8767); (*(void (__stdcall **)(_DWORD))(*v2[94] + 240))(0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v132) = 0; if ( v113 ) { ((void (__cdecl *)(void *, int, char *, volatile LONG *))loc_40ACF0)(v113, v114, &v116, v123); operator delete(v113); } v112 = (void (__thiscall ***)(_DWORD, signed int))v125; v113 = 0; v114 = 0; v115 = 0; v132 = -1; if ( v125 && !InterlockedDecrement((volatile LONG *)(v125 + 4)) && v112 ) (**v112)(v112, 1); result = 1; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v125; v132 = -1; if ( v125 && !InterlockedDecrement((volatile LONG *)(v125 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005ECAC0) -------------------------------------------------------- void __thiscall sub_5ECAC0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // eax char v6; // [esp-18h] [ebp-20h] int v7; // [esp-14h] [ebp-1Ch] int v8; // [esp-10h] [ebp-18h] int v9; // [esp-Ch] [ebp-14h] int v10; // [esp-8h] [ebp-10h] void *v11; // [esp-4h] [ebp-Ch] int *v12; // [esp+0h] [ebp-8h] v3 = this; v4 = sub_6D3800(); switch ( a2 ) { case 0: v3[109] = 0; sub_5EB220((_DWORD **)v3); (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v3[95] + 468))(&dword_AA8CB8, v12); v12 = &dword_AA8C68; goto LABEL_3; case 1: if ( v4 && *(_BYTE *)(v4 + 2748) ) return; v3[109] = 1; sub_5EB220((_DWORD **)v3); (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v3[95] + 468))(&dword_AA8C68, v12); v12 = &dword_AA8CB8; LABEL_3: (*(void (__stdcall **)(int *))(*(_DWORD *)v3[96] + 468))(v12); v12 = &dword_AA8C68; goto LABEL_4; case 2: if ( !v4 || !*(_BYTE *)(v4 + 2748) ) { v3[109] = 2; sub_5EB220((_DWORD **)v3); (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v3[95] + 468))(&dword_AA8C68, v12); (*(void (__stdcall **)(int *))(*(_DWORD *)v3[96] + 468))(&dword_AA8C68); v12 = &dword_AA8CB8; LABEL_4: (*(void (__cdecl **)(int *))(*(_DWORD *)v3[97] + 468))(v12); } return; case 3: sub_5E9CD0(v3); return; case 4: if ( byte_AD034A ) { byte_AD034A = 0; v11 = sub_585460; } else { byte_AD034A = 1; v11 = sub_5ED190; } goto LABEL_14; case 5: if ( byte_AD0349 ) { byte_AD0349 = 0; v11 = sub_5E9840; } else { byte_AD0349 = 1; v11 = sub_5E9820; } goto LABEL_14; case 6: if ( byte_AD0348 ) { byte_AD0348 = 0; v11 = sub_5E9780; } else { byte_AD0348 = 1; v11 = sub_5E9760; } goto LABEL_14; case 7: if ( byte_AD0347 ) { byte_AD0347 = 0; v11 = sub_5E97A0; } else { byte_AD0347 = 1; v11 = sub_583B60; } goto LABEL_14; case 8: if ( byte_AD0346 ) { byte_AD0346 = 0; v11 = sub_5E9800; } else { byte_AD0346 = 1; v11 = sub_5E97E0; } goto LABEL_14; case 9: if ( byte_AD0345 ) { byte_AD0345 = 0; v11 = sub_5E97C0; } else { byte_AD0345 = 1; v11 = sub_583B40; } goto LABEL_14; case 10: if ( byte_AD0344 ) { byte_AD0344 = 0; v11 = sub_5E9880; } else { byte_AD0344 = 1; v11 = sub_5E9860; } LABEL_14: sub_5ED1C0(v3 + 110, (int)v11); sub_5ED0B0(&v6, (int)(v3 + 110)); sub_5EF870(v3[105], v3[106], v6, v7, v8, v9, v10); sub_5EB220((_DWORD **)v3); break; case 11: sub_8F86A0(&unk_BA6B10, v3); v5 = (_DWORD *)sub_6D4860(); sub_8F82A0(&unk_BA6B10, v5); break; case 12: sub_5E9900(); break; default: return; } } // 5EF870: using guessed type _DWORD __cdecl sub_5EF870(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; // AD0344: using guessed type char byte_AD0344; // AD0345: using guessed type char byte_AD0345; // AD0346: using guessed type char byte_AD0346; // AD0347: using guessed type char byte_AD0347; // AD0348: using guessed type char byte_AD0348; // AD0349: using guessed type char byte_AD0349; // AD034A: using guessed type char byte_AD034A; //----- (005ECDA0) -------------------------------------------------------- char __thiscall sub_5ECDA0(_DWORD *this, int *a2, int a3) { int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx int v11; // esi int v12; // ecx unsigned int v13; // ebx int v14; // esi unsigned __int8 *v15; // edx unsigned int v16; // ecx unsigned __int8 *v17; // eax unsigned int v18; // eax _DWORD *v20; // [esp+10h] [ebp-6Ch] int v21; // [esp+14h] [ebp-68h] char v22; // [esp+1Bh] [ebp-61h] void *v23; // [esp+1Ch] [ebp-60h] unsigned int v24; // [esp+2Ch] [ebp-50h] unsigned int v25; // [esp+30h] [ebp-4Ch] int v26; // [esp+38h] [ebp-44h] int v27; // [esp+3Ch] [ebp-40h] int v28; // [esp+40h] [ebp-3Ch] int v29; // [esp+44h] [ebp-38h] int v30; // [esp+48h] [ebp-34h] int v31; // [esp+4Ch] [ebp-30h] int v32; // [esp+50h] [ebp-2Ch] int v33; // [esp+54h] [ebp-28h] int v34; // [esp+58h] [ebp-24h] int v35; // [esp+5Ch] [ebp-20h] int v36; // [esp+60h] [ebp-1Ch] int v37; // [esp+64h] [ebp-18h] char v38; // [esp+68h] [ebp-14h] int v39; // [esp+78h] [ebp-4h] v20 = this; v25 = 15; v24 = 0; LOBYTE(v23) = 0; v39 = 0; sub_4018E0(&v23, (void *)&byte_9A8050, 0); v3 = a2[1]; v4 = a2[2]; v33 = *a2; v5 = a2[3]; v34 = v3; v6 = a2[4]; v36 = v5; v37 = v6; v26 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v35 = v4; v38 = 0; sub_4018E0(&v23, &v33, strlen((const char *)&v33)); v7 = a2[6]; v8 = a2[7]; v26 = a2[5]; v29 = a2[8]; v27 = v7; v9 = a2[9]; v28 = v8; v10 = a2[10]; v11 = v20[105]; v32 = a3; v30 = v9; v12 = v20[106] - v11; v31 = v10; v13 = 0; v22 = 0; if ( !(v12 / 56) ) goto LABEL_25; v21 = 0; if ( (unsigned int)(v12 / 56) <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { v14 = v21 + v11; v15 = (unsigned __int8 *)v23; if ( v25 < 0x10 ) v15 = (unsigned __int8 *)&v23; v16 = v24; if ( *(_DWORD *)(v14 + 16) < v24 ) v16 = *(_DWORD *)(v14 + 16); if ( *(_DWORD *)(v14 + 20) < 0x10u ) v17 = (unsigned __int8 *)v14; else v17 = *(unsigned __int8 **)v14; if ( !sub_40C0B0(v17, v15, v16) ) { v18 = *(_DWORD *)(v14 + 16); if ( v18 >= v24 && v18 == v24 ) { v22 = 1; sub_4017F0((const void **)v14, (const void **)&v23, v18 != v24, (void *)0xFFFFFFFF); *(_DWORD *)(v14 + 28) = v26; *(_DWORD *)(v14 + 32) = v27; *(_DWORD *)(v14 + 36) = v28; *(_DWORD *)(v14 + 40) = v29; *(_DWORD *)(v14 + 44) = v30; *(_DWORD *)(v14 + 48) = v31; *(_DWORD *)(v14 + 52) = v32; } } v11 = v20[105]; v21 += 56; ++v13; } while ( (v20[106] - v11) / 56 > v13 ); if ( !v22 ) LABEL_25: sub_5EF420(v20 + 105, (unsigned int)&v23); if ( !*((_BYTE *)v20 + 464) ) { sub_5EF720(v20[105], v20[106], (v20[106] - v20[105]) / 56, (unsigned __int8 (__cdecl *)(int, int))sub_5E9760); *((_BYTE *)v20 + 464) = 1; } sub_5EB220((_DWORD **)v20); if ( v25 >= 0x10 ) operator delete(v23); return 1; } //----- (005ED000) -------------------------------------------------------- void *__thiscall sub_5ED000(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >StatusMiniWin::`vftable'; *((_DWORD *)this + 58) = >StatusMiniWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E8B58: using guessed type void *GTStatusMiniWin::`vftable'; // 9E8B74: using guessed type void *GTStatusMiniWin::`vftable'; //----- (005ED040) -------------------------------------------------------- void *__stdcall sub_5ED040(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x4924924 || (result = operator new(56 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005ED0B0) -------------------------------------------------------- _DWORD *__thiscall sub_5ED0B0(_DWORD *this, int a2) { _DWORD *v2; // esi int (__stdcall ***v3)(_DWORD *); // ecx _DWORD *result; // eax int (__stdcall *v5)(_DWORD *); // eax v2 = this; v3 = *(int (__stdcall ****)(_DWORD *))(a2 + 16); if ( v3 ) { v5 = **v3; if ( v3 == (int (__stdcall ***)(_DWORD *))a2 ) v2[4] = v5(v2); else v2[4] = v5(0); result = v2; } else { v2[4] = 0; result = v2; } return result; } //----- (005ED0F0) -------------------------------------------------------- void ***sub_5ED0F0() { return &bool (__cdecl *)(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &) `RTTI Type Descriptor'; } // AB1C8C: using guessed type void **bool (__cdecl *)(GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &) `RTTI Type Descriptor'; //----- (005ED100) -------------------------------------------------------- void *__thiscall sub_5ED100(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base2::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9E8D98: using guessed type void *std::tr1::_Impl_base2::`vftable'; //----- (005ED130) -------------------------------------------------------- char *__thiscall sub_5ED130(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(8u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; *((_DWORD *)result + 1) = v3[1]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9E8DB4: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005ED190) -------------------------------------------------------- bool __cdecl sub_5ED190(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)a1; if ( *(_DWORD *)(a1 + 20) >= 0x10u ) v2 = *(unsigned __int8 **)a1; return sub_40C2F0((unsigned __int8 *)a2, 0, *(_DWORD *)(a2 + 16), v2, *(_DWORD *)(a1 + 16)) < 0; } //----- (005ED1C0) -------------------------------------------------------- _DWORD *__thiscall sub_5ED1C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; v3 = this[4]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( a2 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; v2[1] = a2; v2[4] = v2; } else { v2[4] = 0; } return v2; } // 9E8DB4: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTStatusWin::RankInfo const &,GTStatusWin::RankInfo const &>::`vftable'; //----- (005ED210) -------------------------------------------------------- int __cdecl sub_5ED210(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi const void *v5; // ecx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 8; do { sub_4017F0((const void **)v3, v4 - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = *(v4 - 1); *(_DWORD *)(v3 + 32) = *v4; *(_DWORD *)(v3 + 36) = v4[1]; *(_DWORD *)(v3 + 40) = v4[2]; *(_DWORD *)(v3 + 44) = v4[3]; *(_DWORD *)(v3 + 48) = v4[4]; v5 = v4[5]; v4 += 14; *(_DWORD *)(v3 + 52) = v5; v3 += 56; } while ( v4 - 8 != a2 ); return v3; } //----- (005ED280) -------------------------------------------------------- void __cdecl sub_5ED280(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 56 ) { if ( *(_DWORD *)(i + 20) >= 0x10u ) operator delete(*(void **)i); *(_DWORD *)(i + 20) = 15; *(_DWORD *)(i + 16) = 0; *(_BYTE *)i = 0; } } //----- (005ED2C0) -------------------------------------------------------- int __cdecl sub_5ED2C0(int a1, int a2) { int result; // eax result = 0; if ( a1 ) { *(_DWORD *)(a1 + 20) = 15; *(_DWORD *)(a1 + 16) = 0; *(_BYTE *)a1 = 0; sub_4017F0((const void **)a1, (const void **)a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(a1 + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 48); result = *(_DWORD *)(a2 + 52); *(_DWORD *)(a1 + 52) = result; } return result; } //----- (005ED350) -------------------------------------------------------- void __cdecl sub_5ED350(int a1, int a2) { int v2; // ecx int v3; // edx int v4; // eax int v5; // ecx int v6; // edx int v7; // eax bool v8; // cf int v9; // ecx int v10; // edx int v11; // eax int v12; // ecx int v13; // edx int v14; // eax void *v15; // [esp+Ch] [ebp-48h] int v16; // [esp+1Ch] [ebp-38h] unsigned int v17; // [esp+20h] [ebp-34h] int v18; // [esp+28h] [ebp-2Ch] int v19; // [esp+2Ch] [ebp-28h] int v20; // [esp+30h] [ebp-24h] int v21; // [esp+34h] [ebp-20h] int v22; // [esp+38h] [ebp-1Ch] int v23; // [esp+3Ch] [ebp-18h] int v24; // [esp+40h] [ebp-14h] int v25; // [esp+50h] [ebp-4h] v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4017F0((const void **)&v15, (const void **)a1, 0, (void *)0xFFFFFFFF); v2 = *(_DWORD *)(a1 + 32); v3 = *(_DWORD *)(a1 + 36); v18 = *(_DWORD *)(a1 + 28); v4 = *(_DWORD *)(a1 + 40); v19 = v2; v5 = *(_DWORD *)(a1 + 44); v20 = v3; v6 = *(_DWORD *)(a1 + 48); v21 = v4; v7 = *(_DWORD *)(a1 + 52); v22 = v5; v23 = v6; v24 = v7; v25 = 0; sub_4017F0((const void **)a1, (const void **)a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(a1 + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 48); *(_DWORD *)(a1 + 52) = *(_DWORD *)(a2 + 52); sub_4017F0((const void **)a2, (const void **)&v15, 0, (void *)0xFFFFFFFF); v8 = v17 < 0x10; v9 = v19; v10 = v20; *(_DWORD *)(a2 + 28) = v18; v11 = v21; *(_DWORD *)(a2 + 32) = v9; v12 = v22; *(_DWORD *)(a2 + 36) = v10; v13 = v23; *(_DWORD *)(a2 + 40) = v11; v14 = v24; *(_DWORD *)(a2 + 44) = v12; *(_DWORD *)(a2 + 48) = v13; *(_DWORD *)(a2 + 52) = v14; if ( !v8 ) operator delete(v15); } //----- (005ED470) -------------------------------------------------------- int __cdecl sub_5ED470(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9) { int v9; // edi int i; // ebx int v11; // esi int v12; // edi int v13; // esi int v14; // ecx int result; // eax std::tr1 *v16; // [esp+0h] [ebp-1Ch] v9 = a2; for ( i = (a2 - 1) / 2; a3 < v9; i = (i - 1) / 2 ) { if ( !a9 ) std::tr1::_Xfunc(v16); v11 = a1 + 56 * i; if ( !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 56 * i, a4) ) break; v12 = a1 + 56 * v9; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v12 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v12 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v12 + 40) = *(_DWORD *)(v11 + 40); *(_DWORD *)(v12 + 44) = *(_DWORD *)(v11 + 44); *(_DWORD *)(v12 + 48) = *(_DWORD *)(v11 + 48); *(_DWORD *)(v12 + 52) = *(_DWORD *)(v11 + 52); v9 = i; } v13 = a1 + 56 * v9; sub_4017F0((const void **)v13, (const void **)a4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v13 + 28) = *(_DWORD *)(a4 + 28); *(_DWORD *)(v13 + 32) = *(_DWORD *)(a4 + 32); *(_DWORD *)(v13 + 36) = *(_DWORD *)(a4 + 36); *(_DWORD *)(v13 + 40) = *(_DWORD *)(a4 + 40); *(_DWORD *)(v13 + 44) = *(_DWORD *)(a4 + 44); v14 = a9; *(_DWORD *)(v13 + 48) = *(_DWORD *)(a4 + 48); result = *(_DWORD *)(a4 + 52); *(_DWORD *)(v13 + 52) = result; if ( v14 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)v14 + 12))(v14 != (_DWORD)&a5); return result; } //----- (005ED5C0) -------------------------------------------------------- int __cdecl sub_5ED5C0(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi if ( a1 == a2 ) return a3; v3 = a3; v4 = a2 + 8; do { v4 -= 14; v3 -= 56; sub_4017F0((const void **)v3, v4 - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = *(v4 - 1); *(_DWORD *)(v3 + 32) = *v4; *(_DWORD *)(v3 + 36) = v4[1]; *(_DWORD *)(v3 + 40) = v4[2]; *(_DWORD *)(v3 + 44) = v4[3]; *(_DWORD *)(v3 + 48) = v4[4]; *(_DWORD *)(v3 + 52) = v4[5]; } while ( v4 - 8 != a1 ); return v3; } //----- (005ED630) -------------------------------------------------------- int __cdecl sub_5ED630(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // edi int i; // ebx int v7; // esi int v8; // edi int v9; // esi int result; // eax v5 = a2; for ( i = (a2 - 1) / 2; a3 < v5; i = (i - 1) / 2 ) { v7 = a1 + 56 * i; if ( !a5(a1 + 56 * i, a4) ) break; v8 = a1 + 56 * v5; sub_4017F0((const void **)v8, (const void **)v7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v8 + 28) = *(_DWORD *)(v7 + 28); *(_DWORD *)(v8 + 32) = *(_DWORD *)(v7 + 32); *(_DWORD *)(v8 + 36) = *(_DWORD *)(v7 + 36); *(_DWORD *)(v8 + 40) = *(_DWORD *)(v7 + 40); *(_DWORD *)(v8 + 44) = *(_DWORD *)(v7 + 44); *(_DWORD *)(v8 + 48) = *(_DWORD *)(v7 + 48); *(_DWORD *)(v8 + 52) = *(_DWORD *)(v7 + 52); v5 = i; } v9 = a1 + 56 * v5; sub_4017F0((const void **)v9, (const void **)a4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(_DWORD *)(a4 + 28); *(_DWORD *)(v9 + 32) = *(_DWORD *)(a4 + 32); *(_DWORD *)(v9 + 36) = *(_DWORD *)(a4 + 36); *(_DWORD *)(v9 + 40) = *(_DWORD *)(a4 + 40); result = *(_DWORD *)(a4 + 44); *(_DWORD *)(v9 + 44) = result; *(_DWORD *)(v9 + 48) = *(_DWORD *)(a4 + 48); *(_DWORD *)(v9 + 52) = *(_DWORD *)(a4 + 52); return result; } //----- (005ED720) -------------------------------------------------------- int __cdecl sub_5ED720(int a1, int a2, int a3) { int result; // eax result = 0; if ( a2 ) { *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; sub_4017F0((const void **)a2, (const void **)a3, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a2 + 28) = *(_DWORD *)(a3 + 28); *(_DWORD *)(a2 + 32) = *(_DWORD *)(a3 + 32); *(_DWORD *)(a2 + 36) = *(_DWORD *)(a3 + 36); *(_DWORD *)(a2 + 40) = *(_DWORD *)(a3 + 40); *(_DWORD *)(a2 + 44) = *(_DWORD *)(a3 + 44); *(_DWORD *)(a2 + 48) = *(_DWORD *)(a3 + 48); result = *(_DWORD *)(a3 + 52); *(_DWORD *)(a2 + 52) = result; } return result; } //----- (005ED7B0) -------------------------------------------------------- int __cdecl sub_5ED7B0(const void **a1, const void **a2, int a3) { int v3; // esi const void **v4; // edi int v9; // [esp+0h] [ebp-24h] int v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v3 = a3; v4 = a1; v10 = a3; v12 = 0; while ( v4 != a2 ) { LOBYTE(v12) = 1; if ( v3 ) { *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, v4, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 28) = v4[7]; *(_DWORD *)(v3 + 32) = v4[8]; *(_DWORD *)(v3 + 36) = v4[9]; *(_DWORD *)(v3 + 40) = v4[10]; *(_DWORD *)(v3 + 44) = v4[11]; *(_DWORD *)(v3 + 48) = v4[12]; *(_DWORD *)(v3 + 52) = v4[13]; } v3 += 56; LOBYTE(v12) = 0; v4 += 14; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005ED890) -------------------------------------------------------- void __cdecl sub_5ED890(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { std::tr1 *v8; // [esp+0h] [ebp-1Ch] if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_5ED350(a2, a1); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a3, a2) ) sub_5ED350(a3, a2); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_5ED350(a2, a1); if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != (_DWORD)&a4); } //----- (005ED970) -------------------------------------------------------- int __cdecl sub_5ED970(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { int v9; // edi int v10; // esi int v11; // ebx bool v12; // zf _DWORD *v13; // esi int v14; // edi int v15; // ebx int v16; // edi int (__stdcall *v17)(char *); // edx int v18; // eax int result; // eax char v20; // [esp-18h] [ebp-34h] int v21; // [esp-14h] [ebp-30h] int v22; // [esp-10h] [ebp-2Ch] int v23; // [esp-Ch] [ebp-28h] int v24; // [esp-8h] [ebp-24h] std::tr1 *v25; // [esp+0h] [ebp-1Ch] int v26; // [esp+18h] [ebp-4h] v9 = a2; v10 = a3; v11 = 2 * a2 + 2; v26 = 0; v12 = v11 == a3; if ( v11 < a3 ) { do { if ( !a9 ) std::tr1::_Xfunc(v25); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a9 + 4))(a1 + 56 * v11, a1 + 56 * v11 - 56) ) --v11; v13 = (_DWORD *)(a1 + 56 * v11); v14 = a1 + 56 * v9; sub_4017F0((const void **)v14, (const void **)(a1 + 56 * v11), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v14 + 28) = v13[7]; *(_DWORD *)(v14 + 32) = v13[8]; *(_DWORD *)(v14 + 36) = v13[9]; *(_DWORD *)(v14 + 40) = v13[10]; *(_DWORD *)(v14 + 44) = v13[11]; *(_DWORD *)(v14 + 48) = v13[12]; *(_DWORD *)(v14 + 52) = v13[13]; v9 = v11; v11 = 2 * v11 + 2; } while ( v11 < a3 ); v10 = a3; v12 = v11 == a3; } if ( v12 ) { v15 = a1 + 56 * v10 - 56; v16 = a1 + 56 * v9; sub_4017F0((const void **)v16, (const void **)v15, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v16 + 28) = *(_DWORD *)(v15 + 28); *(_DWORD *)(v16 + 32) = *(_DWORD *)(v15 + 32); *(_DWORD *)(v16 + 36) = *(_DWORD *)(v15 + 36); *(_DWORD *)(v16 + 40) = *(_DWORD *)(v15 + 40); *(_DWORD *)(v16 + 44) = *(_DWORD *)(v15 + 44); *(_DWORD *)(v16 + 48) = *(_DWORD *)(v15 + 48); *(_DWORD *)(v16 + 52) = *(_DWORD *)(v15 + 52); v9 = v10 - 1; } if ( a9 ) { v17 = **(int (__stdcall ***)(char *))a9; if ( a9 == &a5 ) v18 = v17(&v20); else v18 = v17(0); v24 = v18; } else { v24 = 0; } result = sub_5ED470(a1, v9, a2, a4, v20, v21, v22, v23, v24); v26 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (005EDB10) -------------------------------------------------------- int __cdecl sub_5EDB10(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // esi int v6; // edi int v7; // ebx bool v8; // zf int v9; // esi int v10; // edi int v11; // ebx int v12; // edi v5 = a3; v6 = a2; v7 = 2 * a2 + 2; v8 = v7 == a3; if ( v7 < a3 ) { do { if ( a5(a1 + 56 * v7, a1 + 56 * v7 - 56) ) --v7; v9 = a1 + 56 * v7; v10 = a1 + 56 * v6; sub_4017F0((const void **)v10, (const void **)v9, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v10 + 28) = *(_DWORD *)(v9 + 28); *(_DWORD *)(v10 + 32) = *(_DWORD *)(v9 + 32); *(_DWORD *)(v10 + 36) = *(_DWORD *)(v9 + 36); *(_DWORD *)(v10 + 40) = *(_DWORD *)(v9 + 40); *(_DWORD *)(v10 + 44) = *(_DWORD *)(v9 + 44); *(_DWORD *)(v10 + 48) = *(_DWORD *)(v9 + 48); *(_DWORD *)(v10 + 52) = *(_DWORD *)(v9 + 52); v6 = v7; v7 = 2 * v7 + 2; } while ( v7 < a3 ); v5 = a3; v8 = v7 == a3; } if ( v8 ) { v11 = a1 + 56 * v5 - 56; v12 = a1 + 56 * v6; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 28) = *(_DWORD *)(v11 + 28); *(_DWORD *)(v12 + 32) = *(_DWORD *)(v11 + 32); *(_DWORD *)(v12 + 36) = *(_DWORD *)(v11 + 36); *(_DWORD *)(v12 + 40) = *(_DWORD *)(v11 + 40); *(_DWORD *)(v12 + 44) = *(_DWORD *)(v11 + 44); *(_DWORD *)(v12 + 48) = *(_DWORD *)(v11 + 48); *(_DWORD *)(v12 + 52) = *(_DWORD *)(v11 + 52); v6 = v5 - 1; } return sub_5ED630(a1, v6, a2, a4, a5); } //----- (005EDC30) -------------------------------------------------------- int __cdecl sub_5EDC30(int a1, int a2, int a3, int a4, char a5, int a6, int a7, int a8, char *a9) { char *v9; // ecx int (__stdcall *v10)(char *); // edx int v11; // eax unsigned int v12; // edx int result; // eax char v14; // [esp-18h] [ebp-30h] int v15; // [esp-14h] [ebp-2Ch] int v16; // [esp-10h] [ebp-28h] int v17; // [esp-Ch] [ebp-24h] char *v18; // [esp-8h] [ebp-20h] int v19; // [esp+14h] [ebp-4h] v19 = 0; sub_4017F0((const void **)a3, (const void **)a1, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a3 + 28) = *(_DWORD *)(a1 + 28); *(_DWORD *)(a3 + 32) = *(_DWORD *)(a1 + 32); *(_DWORD *)(a3 + 36) = *(_DWORD *)(a1 + 36); *(_DWORD *)(a3 + 40) = *(_DWORD *)(a1 + 40); *(_DWORD *)(a3 + 44) = *(_DWORD *)(a1 + 44); v9 = a9; *(_DWORD *)(a3 + 48) = *(_DWORD *)(a1 + 48); *(_DWORD *)(a3 + 52) = *(_DWORD *)(a1 + 52); if ( v9 ) { v10 = **(int (__stdcall ***)(char *))v9; if ( v9 == &a5 ) v11 = v10(&v14); else v11 = v10(0); v18 = (char *)v11; } else { v18 = 0; } v12 = (signed int)(a2 - a1 + ((unsigned __int64)(-1840700269i64 * (a2 - a1)) >> 32)) >> 5; result = sub_5ED970(a1, 0, v12 + (v12 >> 31), a4, v14, v15, v16, v17, v18); v19 = -1; if ( a9 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a9 + 12))(a9 != &a5); return result; } //----- (005EDD20) -------------------------------------------------------- int __cdecl sub_5EDD20(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { sub_4017F0((const void **)a3, (const void **)a1, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a3 + 28) = *(_DWORD *)(a1 + 28); *(_DWORD *)(a3 + 32) = *(_DWORD *)(a1 + 32); *(_DWORD *)(a3 + 36) = *(_DWORD *)(a1 + 36); *(_DWORD *)(a3 + 40) = *(_DWORD *)(a1 + 40); *(_DWORD *)(a3 + 44) = *(_DWORD *)(a1 + 44); *(_DWORD *)(a3 + 48) = *(_DWORD *)(a1 + 48); *(_DWORD *)(a3 + 52) = *(_DWORD *)(a1 + 52); return sub_5EDB10(a1, 0, (a2 - a1) / 56, a4, a5); } //----- (005EDDA0) -------------------------------------------------------- #error "5EDF6D: positive sp value has been found (funcsize=194)" //----- (005EDF70) -------------------------------------------------------- void __cdecl sub_5EDF70(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edi const void **v8; // esi int v9; // eax int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx int v14; // edx int (__stdcall *v15)(char *); // eax int v16; // eax char v17; // [esp-18h] [ebp-7Ch] int v18; // [esp-14h] [ebp-78h] int v19; // [esp-10h] [ebp-74h] int v20; // [esp-Ch] [ebp-70h] char *v21; // [esp-8h] [ebp-6Ch] char *v22; // [esp+10h] [ebp-54h] int v23; // [esp+14h] [ebp-50h] int v24; // [esp+18h] [ebp-4Ch] void *v25; // [esp+1Ch] [ebp-48h] int v26; // [esp+2Ch] [ebp-38h] unsigned int v27; // [esp+30h] [ebp-34h] int v28; // [esp+38h] [ebp-2Ch] int v29; // [esp+3Ch] [ebp-28h] int v30; // [esp+40h] [ebp-24h] int v31; // [esp+44h] [ebp-20h] int v32; // [esp+48h] [ebp-1Ch] int v33; // [esp+4Ch] [ebp-18h] int v34; // [esp+50h] [ebp-14h] int v35; // [esp+60h] [ebp-4h] v24 = a1; v23 = (a2 - a1) / 56; v7 = v23 / 2; v35 = 0; if ( v23 / 2 > 0 ) { v8 = (const void **)(a1 + 56 * v7 + 32); do { v8 -= 14; --v7; v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4017F0((const void **)&v25, v8 - 8, 0, (void *)0xFFFFFFFF); v9 = (int)*v8; v10 = (int)v8[1]; v28 = (int)*(v8 - 1); v11 = (int)v8[2]; v29 = v9; v12 = (int)v8[3]; v30 = v10; v13 = (int)v8[4]; v31 = v11; v14 = (int)v8[5]; v32 = v12; v33 = v13; v34 = v14; LOBYTE(v35) = 1; v22 = &v17; if ( a7 ) { v15 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v16 = v15(&v17); else v16 = v15(0); v21 = (char *)v16; } else { v21 = 0; } sub_5ED970(v24, v7, v23, (int)&v25, v17, v18, v19, v20, v21); LOBYTE(v35) = 0; if ( v27 >= 0x10 ) operator delete(v25); v27 = 15; v26 = 0; LOBYTE(v25) = 0; } while ( v7 > 0 ); } v35 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005EE0E0) -------------------------------------------------------- void __cdecl sub_5EE0E0(int a1, int a2, char a3, int a4, int a5, int a6, int a7) { int v7; // edi int i; // ebx int v9; // esi int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx int v14; // edx int v15; // eax int v16; // ecx int v17; // edx int v18; // eax int v19; // ecx int v20; // edx int v21; // eax const void **j; // edi int v23; // eax int v24; // ecx int v25; // edx int v26; // eax int v27; // ecx int v28; // edx std::tr1 *v29; // [esp+0h] [ebp-5Ch] void *v30; // [esp+14h] [ebp-48h] int v31; // [esp+24h] [ebp-38h] unsigned int v32; // [esp+28h] [ebp-34h] int v33; // [esp+30h] [ebp-2Ch] int v34; // [esp+34h] [ebp-28h] int v35; // [esp+38h] [ebp-24h] int v36; // [esp+3Ch] [ebp-20h] int v37; // [esp+40h] [ebp-1Ch] int v38; // [esp+44h] [ebp-18h] int v39; // [esp+48h] [ebp-14h] int v40; // [esp+58h] [ebp-4h] v7 = a1; v40 = 0; if ( a1 != a2 ) { for ( i = a1 + 56; i != a2; LOBYTE(v30) = 0 ) { v9 = i; v32 = 15; v31 = 0; LOBYTE(v30) = 0; sub_4017F0((const void **)&v30, (const void **)i, 0, (void *)0xFFFFFFFF); v10 = *(_DWORD *)(i + 32); v11 = *(_DWORD *)(i + 36); v33 = *(_DWORD *)(i + 28); v12 = *(_DWORD *)(i + 40); v34 = v10; v13 = *(_DWORD *)(i + 44); v35 = v11; v14 = *(_DWORD *)(i + 48); v36 = v12; v15 = *(_DWORD *)(i + 52); v37 = v13; v38 = v14; v39 = v15; LOBYTE(v40) = 1; if ( !a7 ) LABEL_17: std::tr1::_Xfunc(v29); if ( (*(unsigned __int8 (__stdcall **)(void **, int))(*(_DWORD *)a7 + 4))(&v30, v7) ) { sub_5ED5C0((const void **)v7, (const void **)i, i + 56); sub_4017F0((const void **)v7, (const void **)&v30, 0, (void *)0xFFFFFFFF); v16 = v34; v17 = v35; *(_DWORD *)(v7 + 28) = v33; v18 = v36; *(_DWORD *)(v7 + 32) = v16; v19 = v37; *(_DWORD *)(v7 + 36) = v17; v20 = v38; *(_DWORD *)(v7 + 40) = v18; v21 = v39; *(_DWORD *)(v7 + 44) = v19; *(_DWORD *)(v7 + 48) = v20; *(_DWORD *)(v7 + 52) = v21; } else { for ( j = (const void **)(i + 32); ; v9 = (int)(j - 8) ) { j -= 14; if ( !a7 ) goto LABEL_17; if ( !(*(unsigned __int8 (__stdcall **)(void **, const void **))(*(_DWORD *)a7 + 4))(&v30, j - 8) ) break; sub_4017F0((const void **)v9, j - 8, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v9 + 28) = *(j - 1); *(_DWORD *)(v9 + 32) = *j; *(_DWORD *)(v9 + 36) = j[1]; *(_DWORD *)(v9 + 40) = j[2]; *(_DWORD *)(v9 + 44) = j[3]; *(_DWORD *)(v9 + 48) = j[4]; *(_DWORD *)(v9 + 52) = j[5]; } sub_4017F0((const void **)v9, (const void **)&v30, 0, (void *)0xFFFFFFFF); v23 = v34; v24 = v35; v7 = a1; *(_DWORD *)(v9 + 28) = v33; v25 = v36; *(_DWORD *)(v9 + 32) = v23; v26 = v37; *(_DWORD *)(v9 + 36) = v24; v27 = v38; *(_DWORD *)(v9 + 40) = v25; v28 = v39; *(_DWORD *)(v9 + 44) = v26; *(_DWORD *)(v9 + 48) = v27; *(_DWORD *)(v9 + 52) = v28; } LOBYTE(v40) = 0; if ( v32 >= 0x10 ) operator delete(v30); i += 56; v32 = 15; v31 = 0; } } v40 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != (_DWORD)&a3); } //----- (005EE300) -------------------------------------------------------- void __cdecl sub_5EE300(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // eax int v5; // eax int v6; // esi int v7; // eax int v8; // esi int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] int v11; // [esp+1Ch] [ebp+8h] int v12; // [esp+1Ch] [ebp+8h] v4 = (a3 - a1) / 56; if ( v4 <= 40 ) { if ( a4(a2, a1) ) sub_5ED350(a2, a1); if ( a4(a3, a2) ) sub_5ED350(a3, a2); if ( a4(a2, a1) ) sub_5ED350(a2, a1); } else { v5 = (v4 + 1) / 8; v6 = 56 * v5; v9 = 112 * v5; v10 = 56 * v5 + a1; if ( a4(v10, a1) ) sub_5ED350(v10, a1); if ( a4(a1 + v9, v10) ) sub_5ED350(a1 + v9, v10); if ( a4(v10, a1) ) sub_5ED350(v10, a1); v11 = a2 - v6; if ( a4(a2, a2 - v6) ) sub_5ED350(a2, v11); if ( a4(v6 + a2, a2) ) sub_5ED350(v6 + a2, a2); if ( a4(a2, v11) ) sub_5ED350(a2, v11); v7 = a3 - v6; v8 = a3 - v9; v12 = v7; if ( a4(v7, a3 - v9) ) sub_5ED350(v12, v8); if ( a4(a3, v12) ) sub_5ED350(a3, v12); if ( a4(v12, v8) ) sub_5ED350(v12, v8); if ( a4(a2, v10) ) sub_5ED350(a2, v10); if ( a4(v12, a2) ) sub_5ED350(v12, a2); if ( a4(a2, v10) ) sub_5ED350(a2, v10); } } //----- (005EE510) -------------------------------------------------------- void __cdecl sub_5EE510(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // edi const void **v4; // esi int v5; // edx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx void *v11; // [esp+18h] [ebp-48h] int v12; // [esp+28h] [ebp-38h] unsigned int v13; // [esp+2Ch] [ebp-34h] int v14; // [esp+34h] [ebp-2Ch] int v15; // [esp+38h] [ebp-28h] int v16; // [esp+3Ch] [ebp-24h] int v17; // [esp+40h] [ebp-20h] int v18; // [esp+44h] [ebp-1Ch] int v19; // [esp+48h] [ebp-18h] int v20; // [esp+4Ch] [ebp-14h] int v21; // [esp+5Ch] [ebp-4h] v3 = (a2 - a1) / 56 / 2; if ( v3 > 0 ) { v4 = (const void **)(a1 + 56 * v3 + 32); do { v4 -= 14; --v3; v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4017F0((const void **)&v11, v4 - 8, 0, (void *)0xFFFFFFFF); v5 = (int)*v4; v6 = (int)v4[1]; v14 = (int)*(v4 - 1); v7 = (int)v4[2]; v15 = v5; v8 = (int)v4[3]; v16 = v6; v9 = (int)v4[4]; v17 = v7; v10 = (int)v4[5]; v18 = v8; v19 = v9; v20 = v10; v21 = 0; sub_5EDB10(a1, v3, (a2 - a1) / 56, (int)&v11, a3); v21 = -1; if ( v13 >= 0x10 ) operator delete(v11); } while ( v3 > 0 ); } } //----- (005EE630) -------------------------------------------------------- void __cdecl sub_5EE630(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)) { int v3; // esi int i; // ebx int v5; // edi int v6; // edx int v7; // eax int v8; // ecx int v9; // edx int v10; // eax int v11; // ecx int v12; // ecx int v13; // edx int v14; // eax int v15; // ecx int v16; // edx int v17; // eax int j; // esi int v19; // eax int v20; // ecx int v21; // edx int v22; // eax int v23; // ecx int v24; // edx void *v25; // [esp+18h] [ebp-48h] int v26; // [esp+28h] [ebp-38h] unsigned int v27; // [esp+2Ch] [ebp-34h] int v28; // [esp+34h] [ebp-2Ch] int v29; // [esp+38h] [ebp-28h] int v30; // [esp+3Ch] [ebp-24h] int v31; // [esp+40h] [ebp-20h] int v32; // [esp+44h] [ebp-1Ch] int v33; // [esp+48h] [ebp-18h] int v34; // [esp+4Ch] [ebp-14h] int v35; // [esp+5Ch] [ebp-4h] v3 = a1; if ( a1 != a2 ) { for ( i = a1 + 56; i != a2; i += 56 ) { v5 = i; v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4017F0((const void **)&v25, (const void **)i, 0, (void *)0xFFFFFFFF); v6 = *(_DWORD *)(i + 32); v7 = *(_DWORD *)(i + 36); v28 = *(_DWORD *)(i + 28); v8 = *(_DWORD *)(i + 40); v29 = v6; v9 = *(_DWORD *)(i + 44); v30 = v7; v10 = *(_DWORD *)(i + 48); v31 = v8; v11 = *(_DWORD *)(i + 52); v32 = v9; v33 = v10; v34 = v11; v35 = 0; if ( a3(&v25, v3) ) { sub_5ED5C0((const void **)v3, (const void **)i, i + 56); sub_4017F0((const void **)v3, (const void **)&v25, 0, (void *)0xFFFFFFFF); v12 = v29; v13 = v30; *(_DWORD *)(v3 + 28) = v28; v14 = v31; *(_DWORD *)(v3 + 32) = v12; v15 = v32; *(_DWORD *)(v3 + 36) = v13; v16 = v33; *(_DWORD *)(v3 + 40) = v14; v17 = v34; *(_DWORD *)(v3 + 44) = v15; *(_DWORD *)(v3 + 48) = v16; *(_DWORD *)(v3 + 52) = v17; } else { for ( j = i - 56; a3(&v25, j); j -= 56 ) { sub_4017F0((const void **)v5, (const void **)j, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v5 + 28) = *(_DWORD *)(j + 28); *(_DWORD *)(v5 + 32) = *(_DWORD *)(j + 32); *(_DWORD *)(v5 + 36) = *(_DWORD *)(j + 36); *(_DWORD *)(v5 + 40) = *(_DWORD *)(j + 40); *(_DWORD *)(v5 + 44) = *(_DWORD *)(j + 44); *(_DWORD *)(v5 + 48) = *(_DWORD *)(j + 48); *(_DWORD *)(v5 + 52) = *(_DWORD *)(j + 52); v5 = j; } sub_4017F0((const void **)v5, (const void **)&v25, 0, (void *)0xFFFFFFFF); v19 = v29; v20 = v30; v3 = a1; *(_DWORD *)(v5 + 28) = v28; v21 = v31; *(_DWORD *)(v5 + 32) = v19; v22 = v32; *(_DWORD *)(v5 + 36) = v20; v23 = v33; *(_DWORD *)(v5 + 40) = v21; v24 = v34; *(_DWORD *)(v5 + 44) = v22; *(_DWORD *)(v5 + 48) = v23; *(_DWORD *)(v5 + 52) = v24; } v35 = -1; if ( v27 >= 0x10 ) operator delete(v25); } } } //----- (005EE810) -------------------------------------------------------- void __cdecl sub_5EE810(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edx int v8; // eax int v9; // ecx int v10; // edx int v11; // eax int v12; // ecx int (__stdcall *v13)(char *); // edx int v14; // eax char v15; // [esp-1Ch] [ebp-7Ch] int v16; // [esp-18h] [ebp-78h] int v17; // [esp-14h] [ebp-74h] int v18; // [esp-10h] [ebp-70h] char *v19; // [esp-Ch] [ebp-6Ch] int v20; // [esp-4h] [ebp-64h] char *v21; // [esp+10h] [ebp-50h] int v22; // [esp+14h] [ebp-4Ch] void *v23; // [esp+18h] [ebp-48h] int v24; // [esp+28h] [ebp-38h] unsigned int v25; // [esp+2Ch] [ebp-34h] int v26; // [esp+34h] [ebp-2Ch] int v27; // [esp+38h] [ebp-28h] int v28; // [esp+3Ch] [ebp-24h] int v29; // [esp+40h] [ebp-20h] int v30; // [esp+44h] [ebp-1Ch] int v31; // [esp+48h] [ebp-18h] int v32; // [esp+4Ch] [ebp-14h] int v33; // [esp+5Ch] [ebp-4h] v22 = a1; v33 = 0; v25 = 15; v24 = 0; LOBYTE(v23) = 0; sub_4017F0((const void **)&v23, (const void **)(a2 - 56), 0, (void *)0xFFFFFFFF); v7 = *(_DWORD *)(a2 - 56 + 32); v8 = *(_DWORD *)(a2 - 56 + 36); v26 = *(_DWORD *)(a2 - 56 + 28); v9 = *(_DWORD *)(a2 - 56 + 40); v27 = v7; v10 = *(_DWORD *)(a2 - 56 + 44); v28 = v8; v11 = *(_DWORD *)(a2 - 56 + 48); v29 = v9; v12 = *(_DWORD *)(a2 - 56 + 52); v30 = v10; v31 = v11; v32 = v12; v20 = 0; LOBYTE(v33) = 1; v21 = &v15; if ( a7 ) { v13 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v14 = v13(&v15); else v14 = v13(0); v19 = (char *)v14; } else { v19 = 0; } sub_5EDC30(v22, a2 - 56, a2 - 56, (int)&v23, v15, v16, v17, v18, v19); if ( v25 >= 0x10 ) operator delete(v23); v25 = 15; v24 = 0; LOBYTE(v23) = 0; v33 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005EE930) -------------------------------------------------------- void __cdecl sub_5EE930(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx int v7; // edx int v8; // eax void *v9; // [esp+10h] [ebp-48h] int v10; // [esp+20h] [ebp-38h] unsigned int v11; // [esp+24h] [ebp-34h] int v12; // [esp+2Ch] [ebp-2Ch] int v13; // [esp+30h] [ebp-28h] int v14; // [esp+34h] [ebp-24h] int v15; // [esp+38h] [ebp-20h] int v16; // [esp+3Ch] [ebp-1Ch] int v17; // [esp+40h] [ebp-18h] int v18; // [esp+44h] [ebp-14h] int v19; // [esp+54h] [ebp-4h] v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4017F0((const void **)&v9, (const void **)(a2 - 56), 0, (void *)0xFFFFFFFF); v3 = *(_DWORD *)(a2 - 56 + 32); v4 = *(_DWORD *)(a2 - 56 + 36); v12 = *(_DWORD *)(a2 - 56 + 28); v5 = *(_DWORD *)(a2 - 56 + 40); v13 = v3; v6 = *(_DWORD *)(a2 - 56 + 44); v14 = v4; v7 = *(_DWORD *)(a2 - 56 + 48); v15 = v5; v8 = *(_DWORD *)(a2 - 56 + 52); v16 = v6; v17 = v7; v18 = v8; v19 = 0; sub_5EDD20(a1, a2 - 56, a2 - 56, (int)&v9, a3); if ( v11 >= 0x10 ) operator delete(v9); } //----- (005EEA00) -------------------------------------------------------- unsigned int *__cdecl sub_5EEA00(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8) { unsigned int v8; // esi int (__stdcall *v9)(char *); // edx int v10; // eax unsigned int v11; // ebx unsigned int v12; // edi char *v13; // eax unsigned int v14; // edi int v15; // eax bool v16; // zf int v17; // ebx int v18; // eax char *v19; // ecx char v21; // [esp-18h] [ebp-3Ch] int v22; // [esp-14h] [ebp-38h] int v23; // [esp-10h] [ebp-34h] int v24; // [esp-Ch] [ebp-30h] int v25; // [esp-8h] [ebp-2Ch] int v26; // [esp-4h] [ebp-28h] std::tr1 *v27; // [esp+0h] [ebp-24h] char *v28; // [esp+10h] [ebp-14h] unsigned int v29; // [esp+14h] [ebp-10h] int v30; // [esp+20h] [ebp-4h] v8 = a2 + 56 * ((signed int)(a3 - a2) / 56 / 2); v30 = 0; v28 = &v21; if ( a8 ) { v9 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v10 = v9(&v21); else v10 = v9(0); v25 = v10; } else { v25 = 0; } sub_5EDDA0(a2, v8, a3 - 56, v21, v22, v23, v24, v25); v11 = v8 + 56; v29 = v8 + 56; if ( a2 < v8 ) { do { if ( a8 ) { v12 = v8 - 56; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8 - 56, v8) ) break; if ( a8 ) continue; } LABEL_43: std::tr1::_Xfunc(v27); if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v8 - 56) ) break; v8 -= 56; } while ( a2 < v12 ); } if ( v11 < a3 ) { do { if ( a8 ) { if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v11, v8) ) break; if ( a8 ) continue; } goto LABEL_43; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v11) ) break; v11 += 56; } while ( v11 < a3 ); v29 = v11; } v13 = (char *)v8; v14 = v11; v28 = (char *)v8; while ( 2 ) { while ( 2 ) { if ( v14 < a3 ) { while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v14) ) { if ( !a8 ) goto LABEL_43; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v14, v8) ) { LABEL_28: v13 = v28; break; } v15 = v11; v11 += 56; v29 = v11; sub_5ED350(v15, v14); } v14 += 56; if ( v14 >= a3 ) goto LABEL_28; } } v16 = v13 == (char *)a2; if ( (unsigned int)v13 <= a2 ) goto LABEL_38; v17 = (int)(v13 - 56); while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(int, unsigned int))(*(_DWORD *)a8 + 4))(v17, v8) ) break; LABEL_36: v17 -= 56; v28 -= 56; if ( a2 >= (unsigned int)v28 ) goto LABEL_37; } if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(unsigned int, int))(*(_DWORD *)a8 + 4))(v8, v17) ) { v8 -= 56; sub_5ED350(v8, v17); goto LABEL_36; } LABEL_37: v13 = v28; v11 = v29; v16 = v28 == (char *)a2; LABEL_38: if ( !v16 ) { v18 = (int)(v13 - 56); v28 = (char *)v18; if ( v14 == a3 ) { v8 -= 56; if ( v18 != v8 ) sub_5ED350(v18, v8); v11 -= 56; v29 = v11; sub_5ED350(v8, v11); v13 = v28; } else { sub_5ED350(v14, v18); v13 = v28; v14 += 56; } continue; } break; } if ( v14 != a3 ) { if ( v11 != v14 ) sub_5ED350(v8, v11); v26 = v14; v11 += 56; v25 = v8; v29 = v11; v8 += 56; v14 += 56; sub_5ED350(v25, v26); v13 = v28; continue; } break; } v19 = a8; *a1 = v8; a1[1] = v11; v30 = -1; if ( v19 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v19 + 12))(v19 != &a4); return a1; } // 5EDDA0: using guessed type _DWORD __cdecl sub_5EDDA0(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (005EECA0) -------------------------------------------------------- void __cdecl sub_5EECA0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // edx int v8; // eax char v9; // [esp-20h] [ebp-3Ch] int v10; // [esp-1Ch] [ebp-38h] int v11; // [esp-18h] [ebp-34h] int v12; // [esp-14h] [ebp-30h] char *v13; // [esp-10h] [ebp-2Ch] int v14; // [esp-8h] [ebp-24h] int v15; // [esp-4h] [ebp-20h] int v16; // [esp+18h] [ebp-4h] v16 = 0; if ( (a2 - a1) / 56 > 1 ) { v15 = 0; v14 = 0; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = (char *)v8; } else { v13 = 0; } sub_5EDF70(a1, a2, v9, v10, v11, v12, v13); } v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005EED60) -------------------------------------------------------- void __cdecl sub_5EED60(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // eax int v8; // eax char v9; // [esp-1Ch] [ebp-34h] int v10; // [esp-18h] [ebp-30h] int v11; // [esp-14h] [ebp-2Ch] int v12; // [esp-10h] [ebp-28h] int v13; // [esp-Ch] [ebp-24h] int v14; // [esp-4h] [ebp-1Ch] char *v15; // [esp+8h] [ebp-10h] int v16; // [esp+14h] [ebp-4h] v14 = 0; v16 = 0; v15 = &v9; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = v8; } else { v13 = 0; } sub_5EE0E0(a1, a2, v9, v10, v11, v12, v13); v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005EEE00) -------------------------------------------------------- unsigned int *__cdecl sub_5EEE00(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // eax unsigned int v5; // esi unsigned int v6; // ebx unsigned int v7; // eax unsigned int v8; // edi int v9; // ST08_4 bool v10; // zf int v11; // ebx int v12; // ST0C_4 int v13; // ST08_4 int v14; // eax unsigned int *result; // eax int v16; // [esp+Ch] [ebp-8h] unsigned int v17; // [esp+10h] [ebp-4h] unsigned int i; // [esp+10h] [ebp-4h] v4 = (signed int)(a3 - a2) / 56 / 2; v5 = a2 + 56 * v4; sub_5EE300(a2, a2 + 56 * v4, a3 - 56, a4); v6 = v5 + 56; v16 = v5 + 56; if ( a2 < v5 ) { do { v17 = v5 - 56; if ( a4(v5 - 56, v5) ) break; if ( a4(v5, v17) ) break; v5 -= 56; } while ( a2 < v17 ); } if ( v6 < a3 ) { do { if ( a4(v6, v5) ) break; if ( a4(v5, v6) ) break; v6 += 56; } while ( v6 < a3 ); v16 = v6; } v7 = v5; v8 = v6; for ( i = v5; ; v7 = i ) { while ( 1 ) { if ( v8 < a3 ) { do { if ( !a4(v5, v8) ) { if ( a4(v8, v5) ) break; v9 = v6; v6 += 56; sub_5ED350(v9, v8); } v8 += 56; } while ( v8 < a3 ); v7 = i; v16 = v6; } v10 = v7 == a2; if ( v7 > a2 ) { v11 = v7 - 56; do { if ( !a4(v11, v5) ) { if ( a4(v5, v11) ) break; v5 -= 56; sub_5ED350(v5, v11); } v11 -= 56; i -= 56; } while ( a2 < i ); v7 = i; v6 = v16; v10 = i == a2; } if ( v10 ) break; v14 = v7 - 56; i = v14; if ( v8 == a3 ) { v5 -= 56; if ( v14 != v5 ) sub_5ED350(v14, v5); v6 -= 56; v16 = v6; sub_5ED350(v5, v6); v7 = i; } else { sub_5ED350(v8, v14); v7 = i; v8 += 56; } } if ( v8 == a3 ) break; if ( v6 != v8 ) sub_5ED350(v5, v6); v12 = v8; v6 += 56; v13 = v5; v16 = v6; v5 += 56; v8 += 56; sub_5ED350(v13, v12); } result = a1; *a1 = v5; a1[1] = v6; return result; } //----- (005EEFC0) -------------------------------------------------------- void __thiscall sub_5EEFC0(int *this) { int *v1; // esi v1 = this; if ( *this ) { sub_5ED280(*this, this[1]); operator delete((void *)*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (005EF010) -------------------------------------------------------- unsigned int __thiscall sub_5EF010(int *this, char *a2) { int *v2; // esi unsigned int result; // eax void *v4; // eax const void **v5; // ST04_4 const void **v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x4924924 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 56; if ( result < (unsigned int)a2 ) { v4 = sub_5ED040(a2); v5 = (const void **)v2[1]; v6 = (const void **)*v2; v10 = v4; v12 = 0; sub_5ED7B0(v6, v5, (int)v4); v7 = (signed int)(v2[1] - *v2 + ((unsigned __int64)(-1840700269i64 * (v2[1] - *v2)) >> 32)) >> 5; v8 = v7 + (v7 >> 31); if ( *v2 ) { sub_5ED280(*v2, v2[1]); operator delete((void *)*v2); } result = (unsigned int)v10; v2[2] = (int)v10 + 56 * (_DWORD)a2; v2[1] = result + 56 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005EF130) -------------------------------------------------------- int __cdecl sub_5EF130(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // ebx int result; // eax int v9; // edi char *v10; // eax int (__stdcall *v11)(char *); // eax bool v12; // zf char *v13; // ecx int (__thiscall *v14)(char *, char *); // eax int v15; // eax char v16; // [esp-1Ch] [ebp-50h] int v17; // [esp-18h] [ebp-4Ch] int v18; // [esp-14h] [ebp-48h] int v19; // [esp-10h] [ebp-44h] char *v20; // [esp-Ch] [ebp-40h] char *v21; // [esp-4h] [ebp-38h] char v22; // [esp+10h] [ebp-24h] char *v23; // [esp+20h] [ebp-14h] int v24; // [esp+30h] [ebp-4h] v7 = a2; result = (a2 - a1) / 56; v24 = 0; if ( result > 1 ) { v9 = a2 - a1; do { if ( a7 ) { if ( a7 == &a3 ) { v11 = **(int (__stdcall ***)(char *))a7; v21 = &v22; } else { v11 = **(int (__stdcall ***)(char *))a7; v21 = 0; } v10 = (char *)v11(v21); } else { v10 = 0; } v23 = v10; v21 = 0; LOBYTE(v24) = 1; if ( v10 ) { v12 = v10 == &v22; v13 = v10; v14 = **(int (__thiscall ***)(char *, char *))v10; if ( v12 ) v15 = v14(v13, &v16); else v15 = v14(v13, 0); v20 = (char *)v15; } else { v20 = 0; } sub_5EE810(a1, v7, v16, v17, v18, v19, v20); LOBYTE(v24) = 0; if ( v23 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v23 + 12))(v23 != &v22); v23 = 0; } v9 -= 56; result = v9 / 56; v7 -= 56; } while ( v9 / 56 > 1 ); } v24 = -1; if ( a7 ) result = (*(int (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); return result; } //----- (005EF270) -------------------------------------------------------- int __cdecl sub_5EF270(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // edi int v4; // esi int result; // eax v3 = a2; v4 = a2 - a1; result = (a2 - a1) / 56; if ( result > 1 ) { do { sub_5EE930(a1, v3, a3); v4 -= 56; result = v4 / 56; v3 -= 56; } while ( v4 / 56 > 1 ); } return result; } //----- (005EF2D0) -------------------------------------------------------- unsigned int __thiscall sub_5EF2D0(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (this[1] - *this) / 56; if ( 76695844 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 56; if ( v3 > result ) { if ( 76695844 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_5EF010(this, v5); } return result; } //----- (005EF350) -------------------------------------------------------- #error "5EF3E3: positive sp value has been found (funcsize=55)" //----- (005EF3F0) -------------------------------------------------------- void *__thiscall sub_5EF3F0(void *this, char a2) { void *v2; // esi v2 = this; sub_5EB610(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005EF420) -------------------------------------------------------- int __thiscall sub_5EF420(int *this, unsigned int a2) { int *v2; // esi unsigned int v3; // ecx unsigned int v4; // edx int v5; // edi int result; // eax v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_5EF2D0(v2, 1); result = sub_5ED2C0(v2[1], a2); v2[1] += 56; } else { v4 = (signed int)(a2 - *v2 + ((unsigned __int64)(-1840700269i64 * (signed int)(a2 - *v2)) >> 32)) >> 5; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_5EF2D0(v2, 1); result = sub_5ED720((int)(v2 + 3), v2[1], *v2 + 56 * v5); v2[1] += 56; } return result; } //----- (005EF4B0) -------------------------------------------------------- void __cdecl sub_5EF4B0(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8) { int v8; // ebx int v9; // eax int v10; // esi int (__stdcall *v11)(char *); // eax int v12; // eax int (__thiscall *v13)(char *, char *); // edx int v14; // eax int (__thiscall *v15)(char *, char *); // eax int v16; // eax int (__stdcall *v17)(char *); // edx int v18; // eax int (__stdcall *v19)(char *); // eax int v20; // eax int (__stdcall *v21)(char *); // edx int v22; // eax char v23; // [esp-18h] [ebp-3Ch] int v24; // [esp-14h] [ebp-38h] int v25; // [esp-10h] [ebp-34h] int v26; // [esp-Ch] [ebp-30h] char *v27; // [esp-8h] [ebp-2Ch] int v28; // [esp+10h] [ebp-14h] int v29; // [esp+14h] [ebp-10h] int v30; // [esp+20h] [ebp-4h] v8 = a2; v9 = (a2 - a1) / 56; v30 = 0; if ( v9 <= 32 ) goto LABEL_26; v10 = a3; while ( v10 > 0 ) { if ( a8 ) { v11 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v12 = v11(&v23); else v12 = v11(0); v27 = (char *)v12; } else { v27 = 0; } sub_5EEA00((unsigned int *)&v28, a1, v8, v23, v24, v25, v26, v27); v10 = v10 / 2 / 2 + v10 / 2; if ( (v28 - a1) / 56 >= (v8 - v29) / 56 ) { if ( a8 ) { v15 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v16 = v15(a8, &v23); else v16 = v15(a8, 0); v27 = (char *)v16; } else { v27 = 0; } sub_5EF4B0(v29, v8, v10, v23, v24, v25, v26, v27); v8 = v28; } else { if ( a8 ) { v13 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v14 = v13(a8, &v23); else v14 = v13(a8, 0); v27 = (char *)v14; } else { v27 = 0; } sub_5EF4B0(a1, v28, v10, v23, v24, v25, v26, v27); a1 = v29; } v9 = (v8 - a1) / 56; if ( v9 <= 32 ) goto LABEL_26; } if ( v9 <= 32 ) { LABEL_26: if ( v9 > 1 ) { if ( a8 ) { v21 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v22 = v21(&v23); else v22 = v21(0); v27 = (char *)v22; } else { v27 = 0; } sub_5EED60(a1, v8, v23, v24, v25, v26, v27); } } else { if ( a8 ) { v17 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v18 = v17(&v23); else v18 = v17(0); v27 = (char *)v18; } else { v27 = 0; } sub_5EECA0(a1, v8, v23, v24, v25, v26, v27); if ( a8 ) { v19 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v20 = v19(&v23); else v20 = v19(0); sub_5EF350(a1, v8, v23, v24, v25, v26, v20); } else { sub_5EF350(a1, v8, v23, v24, v25, v26, 0); } } v30 = -1; if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != &a4); } // 5EF350: using guessed type _DWORD __cdecl sub_5EF350(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (005EF720) -------------------------------------------------------- void __cdecl sub_5EF720(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // ebx int v5; // edi int v6; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; v6 = (a2 - a1) / 56; if ( v6 <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_5EEE00((unsigned int *)&v8, v4, v5, a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (v8 - v4) / 56 >= (v5 - v9) / 56 ) { sub_5EF720(v9, v5, v7, a4); v5 = v8; v4 = a1; } else { sub_5EF720(a1, v8, v7, a4); v4 = v9; a1 = v9; } v6 = (v5 - v4) / 56; if ( v6 <= 32 ) goto LABEL_8; } if ( v6 <= 32 ) { LABEL_8: if ( v6 > 1 ) sub_5EE630(v4, v5, (unsigned __int8 (__cdecl *)(void **, int))a4); } else { if ( (v5 - v4) / 56 > 1 ) sub_5EE510(v4, v5, a4); sub_5EF270(v4, v5, a4); } } //----- (005EF870) -------------------------------------------------------- #error "5EF91D: positive sp value has been found (funcsize=67)" //----- (005EF920) -------------------------------------------------------- _DWORD *__thiscall sub_5EF920(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = >TDiceWin::`vftable'; v1[58] = >TDiceWin::`vftable'; sub_8D0610((_BYTE *)v1 + 404); sub_8D0610((_BYTE *)v1 + 432); v1[117] = 1; *((_BYTE *)v1 + 402) = 1; v1[86] = 0; v1[116] = 0; *((_WORD *)v1 + 200) = 256; *((_BYTE *)v1 + 460) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E90B4: using guessed type void *GTTDiceWin::`vftable'; // 9E90D4: using guessed type void *GTTDiceWin::`vftable'; //----- (005EF9F0) -------------------------------------------------------- int __thiscall sub_5EF9F0(_DWORD **this) { _DWORD **v1; // ebx int v2; // esi int result; // eax signed int v4; // edi v1 = this; (*(void (__stdcall **)(signed int))(*this[88] + 256))(1); v2 = (int)(v1 + 94); result = (*(int (__stdcall **)(signed int))(*v1[94] + 256))(1); v4 = 0; do { if ( v4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 24) + 256))(0); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v2 + 256))(0); } ++v4; v2 += 4; } while ( v4 < 6 ); *(_WORD *)((char *)v1 + 401) = 257; return result; } //----- (005EFA60) -------------------------------------------------------- char __thiscall sub_5EFA60(_BYTE *this, char a2) { char result; // al result = a2; this[460] = a2; return result; } //----- (005EFA70) -------------------------------------------------------- void __thiscall sub_5EFA70(int this, float a2) { int v2; // esi signed int v3; // ebx int v4; // edi int v5; // eax char *v6; // ebx v2 = this; if ( *(_BYTE *)(this + 400) ) { if ( *(_DWORD *)(this + 464) > 5u ) *(_DWORD *)(this + 464) = 0; if ( *(_BYTE *)(this + 401) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 4 * *(_DWORD *)(this + 464) + 352) + 256))(1); if ( *(_BYTE *)(v2 + 402) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 464) + 376) + 256))(1); v3 = 0; v4 = v2 + 376; do { if ( v3 != *(_DWORD *)(v2 + 464) ) { if ( *(_BYTE *)(v2 + 401) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 24) + 256))(0); if ( *(_BYTE *)(v2 + 402) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); } ++v3; v4 += 4; } while ( v3 < 6 ); if ( !(*(_BYTE *)(v2 + 28) & 1) && sub_8D0630((float *)(v2 + 404), a2) ) { sub_8D06A0((float *)(v2 + 404), flt_ACCFCC); ++*(_DWORD *)(v2 + 464); *(float *)(v2 + 424) = 0.2; } } if ( *(_BYTE *)(v2 + 460) && !(*(_BYTE *)(v2 + 28) & 1) && sub_8D0630((float *)(v2 + 432), a2) ) { if ( *(_DWORD *)(v2 + 468) <= 5u ) { sub_8D06A0((float *)(v2 + 432), flt_ACCFCC); v5 = *(_DWORD *)(v2 + 468); if ( v5 == 5 ) *(float *)(v2 + 424) = 0.1; else *(float *)(v2 + 452) = 1.0; v6 = sub_7549E0("%d", v5); if ( *(_DWORD *)(v2 + 236) ) { (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v2 + 236) + 4))(46, v6, v2 + 232); if ( *(_DWORD *)(v2 + 236) ) (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v2 + 236) + 20))(46, v6, v2 + 232); } (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)(v2 + 232) + 20))(v2 + 232, 46, v6, v2 + 232); ++*(_DWORD *)(v2 + 464); } else { *(_BYTE *)(v2 + 460) = 0; *(_DWORD *)(v2 + 468) = 1; } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005EFC50) -------------------------------------------------------- char __thiscall sub_5EFC50(_BYTE *this) { int v1; // edi _BYTE *v2; // esi __int16 v3; // di int v4; // eax bool v5; // zf int v6; // edi __int16 v7; // di v1 = *((_DWORD *)dword_AD8EBC + 169); v2 = this; if ( v1 == *(_DWORD *)(sub_6D38F0() + 20) ) { v3 = *((_WORD *)dword_AD8EBC + 274); v4 = sub_6D38F0(); v5 = v3 == *(_WORD *)(v4 + 24); } else { v6 = *((_DWORD *)dword_AD8EBC + 169); v4 = sub_6D38F0(); if ( v6 != *(_DWORD *)(v4 + 48) ) return v4; v7 = *((_WORD *)dword_AD8EBC + 274); v4 = sub_6D38F0(); v5 = v7 == *(_WORD *)(v4 + 52); } if ( v5 ) { v2[400] = 1; LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 29, 211, 0, 0); } return v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005EFCD0) -------------------------------------------------------- _DWORD *__thiscall sub_5EFCD0(_BYTE *this, int a2, char a3) { _BYTE *v3; // esi int v4; // edi int v5; // eax int v6; // eax signed int v7; // edi int v8; // ebx _DWORD *result; // eax int v10; // edi int v11; // eax int v12; // eax signed int v13; // edi int v14; // ebx int v15; // eax int v16; // eax signed int v17; // edi int v18; // ebx int v19; // eax int v20; // eax signed int v21; // edi int v22; // ebx v3 = this; if ( a2 ) { if ( a2 == 1 ) { this[402] = a3; this[401] = a3; } } else { this[460] = 0; } v4 = *((_DWORD *)dword_AD8EBC + 169); if ( v4 == *(_DWORD *)(sub_6D38F0() + 4) ) { if ( !v3[401] ) { v5 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v5 + 8) + 348] + 256))(1); } if ( !v3[402] ) { v6 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v6 + 16) + 372] + 256))(1); } v7 = 0; v8 = (int)(v3 + 376); do { if ( v7 != *(_DWORD *)(sub_6D38F0() + 8) - 1 && !v3[401] ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 - 24) + 256))(0); result = (_DWORD *)sub_6D38F0(); if ( v7 != result[4] - 1 && !v3[402] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0); ++v7; v8 += 4; } while ( v7 < 6 ); } else { v10 = *((_DWORD *)dword_AD8EBC + 169); result = (_DWORD *)sub_6D38F0(); if ( v10 == result[3] ) { if ( !v3[401] ) { v11 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v11 + 16) + 348] + 256))(1); } if ( !v3[402] ) { v12 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v12 + 8) + 372] + 256))(1); } v13 = 0; v14 = (int)(v3 + 376); do { if ( v13 != *(_DWORD *)(sub_6D38F0() + 16) - 1 && !v3[401] ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v14 - 24) + 256))(0); result = (_DWORD *)sub_6D38F0(); if ( v13 != result[2] - 1 && !v3[402] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 256))(0); ++v13; v14 += 4; } while ( v13 < 6 ); } else if ( !v3[402] ) { if ( *(_DWORD *)(sub_6D38F0() + 4) ) { if ( !v3[401] ) { v15 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v15 + 16) + 348] + 256))(1); } if ( !v3[402] ) { v16 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v16 + 8) + 372] + 256))(1); } v17 = 0; v18 = (int)(v3 + 376); do { if ( v17 != *(_DWORD *)(sub_6D38F0() + 16) - 1 && !v3[401] ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v18 - 24) + 256))(0); result = (_DWORD *)sub_6D38F0(); if ( v17 != result[2] - 1 && !v3[402] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 256))(0); ++v17; v18 += 4; } while ( v17 < 6 ); } else { result = (_DWORD *)sub_6D38F0(); if ( result[3] ) { if ( !v3[401] ) { v19 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v19 + 8) + 348] + 256))(1); } if ( !v3[402] ) { v20 = sub_6D38F0(); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v3[4 * *(_DWORD *)(v20 + 16) + 372] + 256))(1); } v21 = 0; v22 = (int)(v3 + 376); do { if ( v21 != *(_DWORD *)(sub_6D38F0() + 8) - 1 && !v3[401] ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v22 - 24) + 256))(0); result = (_DWORD *)sub_6D38F0(); if ( v21 != result[4] - 1 && !v3[402] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)v22 + 256))(0); ++v21; v22 += 4; } while ( v21 < 6 ); } } } } return result; } //----- (005F0010) -------------------------------------------------------- int __thiscall sub_5F0010(_DWORD **this) { int v1; // esi _DWORD **v2; // ebx int v3; // ST00_4 char *v4; // eax const char *v5; // edi int v6; // ST00_4 char *v7; // eax char *v8; // eax int v9; // edx char v10; // cl int v11; // esi int result; // eax int v13; // ST00_4 char *v14; // eax const char *v15; // edi int v16; // ST00_4 char *v17; // eax char *v18; // eax int v19; // edx char v20; // cl int v21; // [esp+Ch] [ebp-44h] int v22; // [esp+10h] [ebp-40h] int v23; // [esp+14h] [ebp-3Ch] int v24; // [esp+18h] [ebp-38h] int v25; // [esp+1Ch] [ebp-34h] int v26; // [esp+20h] [ebp-30h] int v27; // [esp+24h] [ebp-2Ch] int v28; // [esp+28h] [ebp-28h] int v29; // [esp+2Ch] [ebp-24h] int v30; // [esp+30h] [ebp-20h] int v31; // [esp+34h] [ebp-1Ch] int v32; // [esp+38h] [ebp-18h] int v33; // [esp+3Ch] [ebp-14h] int v34; // [esp+40h] [ebp-10h] int v35; // [esp+44h] [ebp-Ch] int v36; // [esp+48h] [ebp-8h] v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v35 = 0; v36 = 0; v21 = 0; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; v28 = 0; v1 = *((_DWORD *)dword_AD8EBC + 169); v2 = this; if ( v1 == *(_DWORD *)(sub_6D38F0() + 20) ) { v3 = *(_DWORD *)(sub_6D38F0() + 20); v4 = (char *)sub_6D3800(); v5 = (const char *)sub_6D36C0(v4, v3); v6 = *(_DWORD *)(sub_6D38F0() + 48); v7 = (char *)sub_6D3800(); v8 = (char *)sub_6D36C0(v7, v6); if ( v5 ) strcpy((char *)&v29, v5); if ( v8 ) { v9 = (char *)&v21 - v8; do { v10 = *v8; v8[v9] = *v8; ++v8; } while ( v10 ); } } else { v11 = *((_DWORD *)dword_AD8EBC + 169); result = sub_6D38F0(); if ( v11 != *(_DWORD *)(result + 48) ) return result; v13 = *(_DWORD *)(sub_6D38F0() + 48); v14 = (char *)sub_6D3800(); v15 = (const char *)sub_6D36C0(v14, v13); v16 = *(_DWORD *)(sub_6D38F0() + 20); v17 = (char *)sub_6D3800(); v18 = (char *)sub_6D36C0(v17, v16); if ( v15 ) strcpy((char *)&v29, v15); if ( v18 ) { v19 = (char *)&v21 - v18; do { v20 = *v18; v18[v19] = *v18; ++v18; } while ( v20 ); } } (*(void (__stdcall **)(int *))(*v2[86] + 472))(&v29); return (*(int (__stdcall **)(int *))(*v2[87] + 472))(&v21); } //----- (005F0170) -------------------------------------------------------- char __thiscall sub_5F0170(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // edi char *v6; // eax volatile LONG **v7; // eax int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG *v17; // ebx int v18; // ST34_4 int v19; // ST30_4 int v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // ebx int v24; // ST34_4 int v25; // ST30_4 int v26; // eax volatile LONG *v27; // eax signed int v28; // ebx int v29; // ST54_4 char *v30; // eax volatile LONG **v31; // eax volatile LONG **v32; // eax bool v33; // zf volatile LONG **v34; // ebx int v35; // eax void (__thiscall ***v36)(_DWORD, signed int); // esi char *v37; // [esp+1Ch] [ebp-48h] int v38; // [esp+3Ch] [ebp-28h] int v39; // [esp+40h] [ebp-24h] signed int v40; // [esp+44h] [ebp-20h] volatile LONG *v41; // [esp+48h] [ebp-1Ch] int v42; // [esp+4Ch] [ebp-18h] int v43; // [esp+50h] [ebp-14h] int v44; // [esp+54h] [ebp-10h] int v45; // [esp+60h] [ebp-4h] volatile LONG **v46; // [esp+6Ch] [ebp+8h] v2 = (int)this; v42 = 0; v45 = 0; v41 = (volatile LONG *)sub_43D0D0(4u); if ( !v41 ) goto LABEL_26; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTDiceWin.nif"); sub_8F66B0(v6, (int)&v42, v5); if ( !v42 ) return 0; v7 = sub_8FB140(v42, (int)"Frame", (int)&v43, (int)&v44, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"GTTDiceWin", 0) ) { LABEL_26: v3 = (void (__thiscall ***)(_DWORD, signed int))v42; v45 = -1; if ( v42 && !InterlockedDecrement((volatile LONG *)(v42 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v44; v9 = v43; v39 = v44; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v42, (int)"Theme", (int)&v43, (int)&v44, v10); else v11 = sub_8FB140(v42, (int)"Theme", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v9, v44 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v42, (int)"Panel01", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v9, v44, (int)v12, v2, 0, 0); v13 = sub_8FB140(v42, (int)"Panel03", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v9, v44, (int)v13, v2, 0, 0); v14 = sub_8FB140(v42, (int)"Panel02", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v9, v44, (int)v14, v2, 0, 0); v15 = sub_8FB140(v42, (int)"Panel05", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v9, v44, (int)v15, v2, 0, 0); v16 = sub_8FB140(v42, (int)"Text01", (int)&v43, (int)&v44, v41); v17 = sub_8F3EB0(v43 - v9, v44 - v8, (int)v16, v2, 0, 0); v18 = sub_421050(0); v19 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v21 = sub_8F4A20(0, 1, v20, v19, v18, (int)v17, 0, 0); *(_DWORD *)(v2 + 344) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 6); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 344) + 472))(&unk_9E9023); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v22 = sub_8FB140(v42, (int)"Text02", (int)&v43, (int)&v44, v41); v23 = sub_8F3EB0(v43 - v9, v44 - v39, (int)v22, v2, 0, 0); v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 1, v26, v25, v24, (int)v23, 0, 0); *(_DWORD *)(v2 + 348) = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 6); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 348) + 472))(&unk_9E902A); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); v28 = 7; v46 = (volatile LONG **)(v2 + 376); v40 = 6; do { v29 = v42; v30 = sub_7549E0("Dice0%d", v28 - 6); v31 = sub_8FB140(v29, (int)v30, (int)&v43, (int)&v44, 0); *(v46 - 6) = sub_8F3EB0(v43 - v9, v44, (int)v31, v2, 0, 0); if ( v28 >= 10 ) { v38 = v42; v37 = sub_7549E0("Dice%d", v28); } else { v38 = v42; v37 = sub_7549E0("Dice0%d", v28); } v32 = sub_8FB140(v38, (int)v37, (int)&v43, (int)&v44, 0); *v46 = sub_8F3EB0(v43 - v9, v44, (int)v32, v2, 0, 0); ++v28; v33 = v40-- == 1; ++v46; } while ( !v33 ); v34 = sub_8FB140(v42, (int)"BtnNor", (int)&v43, (int)&v44, v41); sub_8FB650(v34, v42, (int)"BtnClick"); sub_8FB650(v34, v42, (int)"BtnOver"); sub_8FE0F0(v43 - v9, v44 - v39, (int)v34, v2, 0, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.60000002); sub_8D06A0((float *)(v2 + 404), flt_ACCFCC); *(float *)(v2 + 424) = 0.2; sub_8D06A0((float *)(v2 + 432), flt_ACCFCC); v35 = v42; *(float *)(v2 + 452) = 1.0; v45 = -1; if ( v35 ) { v36 = (void (__thiscall ***)(_DWORD, signed int))v35; if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v36 ) (**v36)(v36, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (005F06B0) -------------------------------------------------------- char __thiscall sub_5F06B0(_BYTE *this, int a2, int a3) { char result; // al if ( !a2 ) result = sub_5EFC50(this); return result; } //----- (005F06D0) -------------------------------------------------------- volatile LONG *__cdecl sub_5F06D0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1D8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5EF920(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005F0800) -------------------------------------------------------- void *__thiscall sub_5F0800(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >TDiceWin::`vftable'; *((_DWORD *)this + 58) = >TDiceWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E90B4: using guessed type void *GTTDiceWin::`vftable'; // 9E90D4: using guessed type void *GTTDiceWin::`vftable'; //----- (005F08C0) -------------------------------------------------------- int __thiscall sub_5F08C0(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // ecx int v4; // edi char *v5; // eax v2 = this; v3 = (int *)this[127]; v2[129] = a2; v4 = *v3; v5 = sub_7549E0("%d", a2); return (*(int (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[127], v5); } //----- (005F0900) -------------------------------------------------------- unsigned int __thiscall sub_5F0900(_DWORD *this) { _DWORD *v1; // ebx unsigned int result; // eax unsigned int v3; // edi int v4; // esi v1 = this; result = 9 * this[130]; v3 = result - 9; if ( result - 9 < result ) { v4 = (int)&this[v3 + 116]; do { sub_5AF5E0(*(_WORD **)(v4 - 72), 0xFFFF, 0); sub_5AF5E0(*(_WORD **)(v4 - 36), 0xFFFF, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)v4 + 472))(&unk_9E930E); ++v3; result = 9 * v1[130]; v4 += 4; } while ( v3 < result ); } return result; } //----- (005F0A00) -------------------------------------------------------- int __thiscall sub_5F0A00(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // ecx int v4; // edi char *v5; // eax v2 = this; v3 = (int *)this[86]; v2[88] = a2; v4 = *v3; v5 = sub_7549E0("%d", a2); return (*(int (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[86], v5); } //----- (005F0A40) -------------------------------------------------------- char __thiscall sub_5F0A40(_DWORD **this, int a2) { _DWORD *v2; // esi char result; // al _DWORD *v4; // eax v2 = this; result = (*(int (__stdcall **)(LONG, LONG))(*this[87] + 332))(pt.x, pt.y); if ( result ) { result = dword_ACDC88; if ( !*(_BYTE *)(dword_ACDC88 + 129) ) { if ( *(_BYTE *)(dword_ACDC88 + 131) ) { sub_8F86A0(&unk_BA6B10, v2); v4 = (_DWORD *)sub_6D38D0(); result = sub_8F82A0(&unk_BA6B10, v4); } } } return result; } // ACDC88: using guessed type int dword_ACDC88; //----- (005F0AA0) -------------------------------------------------------- unsigned int __thiscall sub_5F0AA0(_DWORD *this) { _DWORD *v1; // esi unsigned int result; // eax int **v3; // ebx int v4; // eax signed int v5; // eax unsigned int v6; // edi int v7; // eax int v8; // edi char *v9; // eax unsigned int v10; // [esp+8h] [ebp-8h] unsigned int v11; // [esp+Ch] [ebp-4h] v1 = this; this[132] = -1; sub_5F0900(this); result = 9 * v1[130]; v10 = result - 9; v11 = -1; if ( result - 9 < result ) { v3 = (int **)&v1[result + 107]; do { v4 = v1[131]; if ( v4 == 10 ) { v5 = sub_5AFC10(*(v3 - 18), v1[132], 10); } else { if ( v4 != 9 ) goto LABEL_8; v5 = sub_5AFC10(*(v3 - 9), v1[132], 9); } v11 = v5; LABEL_8: v6 = v11; if ( (v11 & 0x80000000) == 0 ) { v1[132] = v11; if ( v11 < sub_5B3A80() ) { while ( !sub_7474E0((_DWORD *)(dword_ACD994 + 4), v6) ) { if ( ++v6 >= sub_5B3A80() ) goto LABEL_15; } v7 = sub_7474E0((_DWORD *)(dword_ACD994 + 4), v6); if ( v7 ) { v8 = **v3; v9 = sub_7549E0("%d", *(unsigned __int16 *)(v7 + 4)); (*(void (__thiscall **)(int *, char *))(v8 + 472))(*v3, v9); } } } LABEL_15: result = 9 * v1[130]; ++v3; ++v10; } while ( v10 < result ); } return result; } // ACD994: using guessed type int dword_ACD994; //----- (005F0BA0) -------------------------------------------------------- char __thiscall sub_5F0BA0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // edi int v5; // eax int v6; // eax v2 = this; v3 = this[131]; if ( v3 == 10 ) { v4 = a2; v5 = this[a2 + 98]; } else { if ( v3 != 9 ) return v3; v4 = a2; v5 = this[a2 + 107]; } v3 = sub_5F1E30(*(_DWORD *)(v5 + 420), *(_DWORD *)(v5 + 424)); if ( v3 ) { v3 = *(unsigned __int16 *)(v3 + 4); if ( v2[129] >= v3 ) { v6 = v2[131]; LOWORD(a2) = 0; if ( v6 == 10 ) { LOWORD(a2) = *(_WORD *)(v2[v4 + 98] + 420); } else if ( v6 == 9 ) { LOWORD(a2) = *(_WORD *)(v2[v4 + 107] + 420); } LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 29, 207, &a2, 2u); } } return v3; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005F0C50) -------------------------------------------------------- unsigned int __thiscall sub_5F0C50(_DWORD *this, int a2) { _DWORD **v2; // ebx unsigned int result; // eax unsigned int v4; // edi unsigned int v5; // esi int v6; // eax float v7; // ST18_4 unsigned int v8; // edi unsigned int v9; // esi int v10; // eax float v11; // ST18_4 _DWORD *v12; // [esp+1Ch] [ebp-8h] signed int v13; // [esp+20h] [ebp-4h] v12 = this; v2 = (_DWORD **)(this + 107); v13 = 9; while ( 1 ) { result = this[131]; if ( result == 10 ) { result = (unsigned int)*(v2 - 9); if ( a2 == *(_DWORD *)(result + 420) ) { v4 = 0; result = sub_5B3A80(); if ( result ) { do { v5 = v4; if ( v4 < sub_5B3A80() ) { while ( !sub_7474E0((_DWORD *)(dword_ACD994 + 4), v5) ) { if ( ++v5 >= sub_5B3A80() ) goto LABEL_13; } v6 = sub_7474E0((_DWORD *)(dword_ACD994 + 4), v5); if ( v6 ) { if ( *(unsigned __int16 *)(v6 + 2) == a2 ) { v7 = (double)*(unsigned int *)(v6 + 42) / 1000.0; sub_5D37A0(*(v2 - 9), flt_ACCFCC, v7, 0.0); } } } LABEL_13: ++v4; result = sub_5B3A80(); } while ( v4 < result ); } } } else if ( result == 9 && a2 == (*v2)[105] ) { v8 = 0; result = sub_5B3A80(); if ( result ) { do { v9 = v8; if ( v8 < sub_5B3A80() ) { while ( !sub_7474E0((_DWORD *)(dword_ACD994 + 4), v9) ) { if ( ++v9 >= sub_5B3A80() ) goto LABEL_25; } v10 = sub_7474E0((_DWORD *)(dword_ACD994 + 4), v9); if ( v10 && *(unsigned __int16 *)(v10 + 2) == a2 ) { v11 = (double)*(unsigned int *)(v10 + 42) / 1000.0; sub_5D37A0(*v2, flt_ACCFCC, v11, 0.0); } } LABEL_25: ++v8; result = sub_5B3A80(); } while ( v8 < result ); } } ++v2; if ( !--v13 ) return result; this = v12; } } // ACCFCC: using guessed type float flt_ACCFCC; // ACD994: using guessed type int dword_ACD994; //----- (005F0E10) -------------------------------------------------------- char __thiscall sub_5F0E10(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // edi char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ST50_4 volatile LONG **v10; // eax volatile LONG **v11; // ebx int v12; // eax int v13; // ebx int v14; // eax volatile LONG *v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi int v17; // [esp+28h] [ebp-18h] int v18; // [esp+2Ch] [ebp-14h] int v19; // [esp+30h] [ebp-10h] int v20; // [esp+3Ch] [ebp-4h] int v21; // [esp+48h] [ebp+8h] v2 = (int)this; v19 = 0; v20 = 0; if ( !sub_43D0D0(4u) ) goto LABEL_18; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\GuildSkill_Min.nif"); sub_8F66B0(v6, (int)&v19, v5); if ( !v19 ) return 0; v7 = sub_8FB140(v19, (int)"Frame", (int)&v17, (int)&v18, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"GTTMiniSkillWin", 0) ) { LABEL_18: v3 = (void (__thiscall ***)(_DWORD, signed int))v19; v20 = -1; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v17; v9 = v18; v10 = sub_8FB140(v19, (int)"IconSlot", (int)&v17, (int)&v18, 0); *(_DWORD *)(v2 + 348) = sub_8F3EB0(v17 - v8, v18, (int)v10, v2, 0, 0); v11 = sub_8FB140(v19, (int)"DeathCount01", (int)&v17, (int)&v18, 0); sub_8F3EB0(v17 - v8, v18, (int)v11, v2, 0, 0); v12 = *v11[9]; v13 = *(_DWORD *)(v12 + 24); v21 = *(_DWORD *)(v12 + 20); v14 = sub_421050(0); v15 = sub_8F4A20(v17 - v8, v18 - v9, v21, v13, v14, v2, 0, 0); *(_DWORD *)(v2 + 344) = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.80000001, 0.69999999); v20 = -1; if ( v19 ) { v16 = (void (__thiscall ***)(_DWORD, signed int))v19; if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) { if ( v16 ) (**v16)(v16, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (005F1050) -------------------------------------------------------- char __thiscall sub_5F1050(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // edi char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // ecx int v16; // ST74_4 int v17; // eax void (__thiscall **v18)(volatile LONG *, const CHAR *); // ST74_4 const CHAR *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // ecx int v22; // ST74_4 int v23; // eax volatile LONG *v24; // eax const CHAR *v25; // eax volatile LONG *v26; // ecx int v27; // ST74_4 int v28; // eax volatile LONG *v29; // eax const CHAR *v30; // eax volatile LONG *v31; // ecx int v32; // ST74_4 int v33; // eax volatile LONG *v34; // eax const CHAR *v35; // eax volatile LONG *v36; // ecx int v37; // ST74_4 int v38; // eax volatile LONG *v39; // eax int v40; // ST78_4 char *v41; // eax volatile LONG **v42; // eax volatile LONG *v43; // ST78_4 int v44; // ST54_4 int v45; // ST50_4 int v46; // eax volatile LONG *v47; // eax int v48; // ST78_4 char *v49; // eax volatile LONG **v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // eax void (__thiscall ***v53)(_DWORD, signed int); // esi int v54; // [esp+7Ch] [ebp-20h] volatile LONG *v55; // [esp+80h] [ebp-1Ch] int v56; // [esp+84h] [ebp-18h] int v57; // [esp+88h] [ebp-14h] int v58; // [esp+8Ch] [ebp-10h] int v59; // [esp+98h] [ebp-4h] volatile LONG **v60; // [esp+A4h] [ebp+8h] int v61; // [esp+A4h] [ebp+8h] volatile LONG *v62; // [esp+A4h] [ebp+8h] volatile LONG **v63; // [esp+A4h] [ebp+8h] int v64; // [esp+A4h] [ebp+8h] void (__thiscall **v65)(_DWORD, const CHAR *); // [esp+A4h] [ebp+8h] volatile LONG **v66; // [esp+A4h] [ebp+8h] int v67; // [esp+A4h] [ebp+8h] void (__thiscall **v68)(_DWORD, const CHAR *); // [esp+A4h] [ebp+8h] int v69; // [esp+A4h] [ebp+8h] void (__thiscall **v70)(_DWORD, const CHAR *); // [esp+A4h] [ebp+8h] volatile LONG **v71; // [esp+A4h] [ebp+8h] int v72; // [esp+A4h] [ebp+8h] volatile LONG **v73; // [esp+A4h] [ebp+8h] volatile LONG *v74; // [esp+A4h] [ebp+8h] volatile LONG **v75; // [esp+A4h] [ebp+8h] volatile LONG **v76; // [esp+A4h] [ebp+8h] volatile LONG **v77; // [esp+A4h] [ebp+8h] volatile LONG **v78; // [esp+A4h] [ebp+8h] v2 = (int)this; v56 = 0; v59 = 0; v55 = (volatile LONG *)sub_43D0D0(4u); if ( !v55 ) goto LABEL_25; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\GuildSkill.nif"); sub_8F66B0(v6, (int)&v56, v5); if ( !v56 ) return 0; v7 = sub_8FB140(v56, (int)"Frame", (int)&v57, (int)&v58, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"GTTSkillWin", 0) ) { LABEL_25: v3 = (void (__thiscall ***)(_DWORD, signed int))v56; v59 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v57; v9 = v58; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v56, (int)"Theme", (int)&v57, (int)&v58, v10); else v11 = sub_8FB140(v56, (int)"Theme", (int)&v57, (int)&v58, 0); sub_8F3EB0(v57 - v8, v58 - v9, (int)v11, v2, 0, 0); v12 = sub_8FB140(v56, (int)"Panel01", (int)&v57, (int)&v58, 0); sub_8F3EB0(v57 - v8, v58, (int)v12, v2, 0, 0); v13 = sub_8FB140(v56, (int)"Panel02", (int)&v57, (int)&v58, 0); sub_8F3EB0(v57 - v8, v58, (int)v13, v2, 0, 0); v14 = sub_8FB140(v56, (int)"IconSlot", (int)&v57, (int)&v58, 0); sub_8F3EB0(v57 - v8, v58, (int)v14, v2, 0, 0); v60 = sub_8FB140(v56, (int)"WinTitle", (int)&v57, (int)&v58, v55); sub_8F3EB0(v57 - v8, v58 - v9, (int)v60, v2, 0, 0); v15 = v60[9]; v61 = *(_DWORD *)(*v15 + 24); v16 = *(_DWORD *)(*v15 + 20); v17 = sub_421050(0); v62 = sub_8F4A20(v57 - v8, v58 - v9, v16, v61, v17, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v62 + 488))(v62, 5); v18 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v62 + 472); v19 = sub_40A910(-1108071878); (*v18)(v62, v19); (*(void (__stdcall **)(_DWORD))(*v62 + 240))(0); v63 = sub_8FB140(v56, (int)"Tab01_Off", (int)&v57, (int)&v58, v55); sub_8FB650(v63, v56, (int)"Tab01_On"); v20 = sub_465940(v57 - v8, v58 - v9, (int)v63, v2, 14, 0); *(_DWORD *)(v2 + 348) = v20; *((_BYTE *)v20 + 380) = 1; v21 = v63[9]; v64 = *(_DWORD *)(*v21 + 24); v22 = *(_DWORD *)(*v21 + 20); v23 = sub_421050(7); v24 = sub_8F4A20(v57 - v8, v58 - v9 + 1, v22, v64, v23, v2, 0, 0); *(_DWORD *)(v2 + 500) = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 5); v65 = (void (__thiscall **)(_DWORD, const CHAR *))(**(_DWORD **)(v2 + 500) + 472); v25 = sub_40A910(-1157706444); (*v65)(*(_DWORD *)(v2 + 500), v25); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 500) + 240))(0); v66 = sub_8FB140(v56, (int)"Tab02_Off", (int)&v57, (int)&v58, v55); sub_8FB650(v66, v56, (int)"Tab02_On"); *(_DWORD *)(v2 + 352) = sub_465940(v57 - v8, v58 - v9, (int)v66, v2, 15, 0); v26 = v66[9]; v67 = *(_DWORD *)(*v26 + 24); v27 = *(_DWORD *)(*v26 + 20); v28 = sub_421050(7); v29 = sub_8F4A20(v57 - v8, v58 - v9 + 1, v27, v67, v28, v2, 0, 0); *(_DWORD *)(v2 + 504) = v29; (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); v68 = (void (__thiscall **)(_DWORD, const CHAR *))(**(_DWORD **)(v2 + 504) + 472); v30 = sub_40A910(-1238100669); (*v68)(*(_DWORD *)(v2 + 504), v30); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 504) + 240))(0); v31 = sub_8FB140(v56, (int)"Text01", (int)&v57, (int)&v58, 0)[9]; v69 = *(_DWORD *)(*v31 + 24); v32 = *(_DWORD *)(*v31 + 20); v33 = sub_421050(7); v34 = sub_8F4A20(v57 - v8, v58 - v9 + 1, v32, v69, v33, v2, 0, 0); *(_DWORD *)(v2 + 512) = v34; (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); v70 = (void (__thiscall **)(_DWORD, const CHAR *))(**(_DWORD **)(v2 + 512) + 472); v35 = sub_40A910(-1005921070); (*v70)(*(_DWORD *)(v2 + 512), v35); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 512) + 240))(0); v71 = sub_8FB140(v56, (int)"DeathCount10", (int)&v57, (int)&v58, 0); sub_8F3EB0(v57 - v8, v58 - v9, (int)v71, v2, 0, 0); v36 = v71[9]; v72 = *(_DWORD *)(*v36 + 24); v37 = *(_DWORD *)(*v36 + 20); v38 = sub_421050(7); v39 = sub_8F4A20(v57 - v8, v58 - v9 + 1, v37, v72, v38, v2, 0, 0); *(_DWORD *)(v2 + 508) = v39; (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 508) + 472))("0"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 508) + 240))(0); v73 = sub_8FB140(v56, (int)"ClsNor", (int)&v57, (int)&v58, v55); sub_8FB650(v73, v56, (int)"ClsClick"); sub_8FB650(v73, v56, (int)"ClsOver"); *(_DWORD *)(v2 + 344) = sub_8FE0F0(v57 - v8, v58 - v9, (int)v73, v2, 11, 0, 0); v74 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v56 + 72))("HelpLinkNor") ) { v75 = sub_8FB140(v56, (int)"HelpLinkNor", (int)&v57, (int)&v58, v74); sub_8FB650(v75, v56, (int)"HelpLinkClick"); sub_8FB650(v75, v56, (int)"HelpLinkOver"); sub_8FE0F0(v57 - v8, v58 - v9, (int)v75, v2, 18, 0, 0); } v76 = sub_8FB140(v56, (int)"PrePageNor", (int)&v57, (int)&v58, v55); sub_8FB650(v76, v56, (int)"PrePageClick"); sub_8FB650(v76, v56, (int)"PrePageOver"); sub_8FE0F0(v57 - v8, v58 - v9, (int)v76, v2, 16, 0, 0); v77 = sub_8FB140(v56, (int)"NextPageNor", (int)&v57, (int)&v58, v55); sub_8FB650(v77, v56, (int)"NextPageClick"); sub_8FB650(v77, v56, (int)"NextPageOver"); sub_8FE0F0(v57 - v8, v58 - v9, (int)v77, v2, 17, 0, 0); v54 = 0; v78 = (volatile LONG **)(v2 + 428); do { v40 = v56; v41 = sub_7549E0("DeathCount0%d", v54 + 1); v42 = sub_8FB140(v40, (int)v41, (int)&v57, (int)&v58, v55); v43 = sub_8F3EB0(v57 - v8, v58 - v9, (int)v42, v2, 0, 0); v44 = sub_421050(0); v45 = (*(int (**)(void))(*v43 + 148))(); v46 = (*(int (**)(void))(*v43 + 144))(); v47 = sub_8F4A20(0, 1, v46, v45, v44, (int)v43, 0, 0); v78[9] = v47; (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); (*(void (__stdcall **)(const char *))(*v78[9] + 472))("0"); (*(void (__stdcall **)(_DWORD))(*v78[9] + 240))(0); v48 = v56; v49 = sub_7549E0("IconSlot00%d", v54 + 1); v50 = sub_8FB140(v48, (int)v49, (int)&v57, (int)&v58, v55); sub_8F3EB0(v57 - v8, v58 - v9, (int)v50, v2, 0, 0); v51 = sub_5B02F0(v57 - v8, v58 - v9, v54, v2); *v78 = v51; sub_5AF5E0(v51, 0xFFFF, 0); (*(void (__stdcall **)(signed int))(**v78 + 516))(12); (*(void (__stdcall **)(signed int))(**v78 + 560))(13); *((_DWORD *)*v78 + 68) = dword_AD01E8; v52 = sub_5B02F0(v57 - v8, v58 - v9, v54, v2); *(v78 - 9) = v52; sub_5AF5E0(v52, 0xFFFF, 0); (*(void (__stdcall **)(signed int))(**(v78 - 9) + 516))(12); (*(void (__stdcall **)(signed int))(**(v78 - 9) + 560))(13); *((_DWORD *)*(v78 - 9) + 68) = dword_AD01E8; ++v54; ++v78; } while ( v54 < 9 ); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_5F0900((_DWORD *)v2); sub_5F0AA0((_DWORD *)v2); v53 = (void (__thiscall ***)(_DWORD, signed int))v56; v59 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) && v53 ) (**v53)(v53, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005F1A10) -------------------------------------------------------- char __thiscall sub_5F1A10(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 11: sub_8F86A0(&unk_BA6B10, this); v4 = (_DWORD *)sub_6D38E0(); LOBYTE(v3) = sub_8F82A0(&unk_BA6B10, v4); break; case 12: LOBYTE(v3) = sub_5F0BA0(this, a3); break; case 14: *(_BYTE *)(this[87] + 380) = 1; *(_BYTE *)(this[88] + 380) = 0; this[131] = 10; LOBYTE(v3) = sub_5F0AA0(this); break; case 15: *(_BYTE *)(this[87] + 380) = 0; *(_BYTE *)(this[88] + 380) = 1; this[131] = 9; LOBYTE(v3) = sub_5F0AA0(this); break; case 18: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "GuildSkill"); break; default: return (char)v3; } return (char)v3; } //----- (005F1B00) -------------------------------------------------------- int __cdecl sub_5F1B00(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x214u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = >TSkillWin::`vftable'; *(_DWORD *)(v2 + 232) = >TSkillWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 516) = 0; *(_DWORD *)(v2 + 520) = 1; *(_DWORD *)(v2 + 524) = 10; *(_DWORD *)(v2 + 528) = -1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E94D8: using guessed type void *GTTSkillWin::`vftable'; // 9E94F4: using guessed type void *GTTSkillWin::`vftable'; //----- (005F1C70) -------------------------------------------------------- int __cdecl sub_5F1C70(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = >TMiniSkillWin::`vftable'; *(_DWORD *)(v2 + 232) = >TMiniSkillWin::`vftable'; *(_DWORD *)(v2 + 352) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E9718: using guessed type void *GTTMiniSkillWin::`vftable'; // 9E9734: using guessed type void *GTTMiniSkillWin::`vftable'; //----- (005F1DB0) -------------------------------------------------------- void *__thiscall sub_5F1DB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >TSkillWin::`vftable'; *((_DWORD *)this + 58) = >TSkillWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E94D8: using guessed type void *GTTSkillWin::`vftable'; // 9E94F4: using guessed type void *GTTSkillWin::`vftable'; //----- (005F1DF0) -------------------------------------------------------- void *__thiscall sub_5F1DF0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >TMiniSkillWin::`vftable'; *((_DWORD *)this + 58) = >TMiniSkillWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E9718: using guessed type void *GTTMiniSkillWin::`vftable'; // 9E9734: using guessed type void *GTTMiniSkillWin::`vftable'; //----- (005F1E30) -------------------------------------------------------- int __cdecl sub_5F1E30(int a1, int a2) { unsigned int v2; // esi v2 = 0; if ( !sub_5B3A80() ) return 0; while ( *(unsigned __int16 *)(sub_7474E0((_DWORD *)(dword_ACD994 + 4), v2) + 2) != a1 || *(unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD994 + 4), v2) != a2 ) { if ( ++v2 >= sub_5B3A80() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD994 + 4), v2); } // ACD994: using guessed type int dword_ACD994; //----- (005F1EB0) -------------------------------------------------------- BOOL __cdecl sub_5F1EB0(int a1, int a2) { return *(_DWORD *)(a1 + 60) < *(_DWORD *)(a2 + 60); } //----- (005F1ED0) -------------------------------------------------------- BOOL __cdecl sub_5F1ED0(int a1, int a2) { return *(_DWORD *)(a1 + 64) < *(_DWORD *)(a2 + 64); } //----- (005F1F60) -------------------------------------------------------- char sub_5F1F60() { int v0; // eax v0 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A8140(v0, 101); return v0; } //----- (005F1F80) -------------------------------------------------------- void __stdcall sub_5F1F80(int a1, _DWORD *a2, int a3) { if ( a1 == 27 && a2 && !*a2 ) { a1 = *(_DWORD *)(sub_6D3800() + 12); sub_6F36A0(&off_AB7F2C, 29, 122, &a1, 4u); } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005F2030) -------------------------------------------------------- char __thiscall sub_5F2030(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[96], v2[97]); return v3; } //----- (005F2060) -------------------------------------------------------- char sub_5F2060() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildList"); return (char)v0; } //----- (005F2090) -------------------------------------------------------- int __thiscall sub_5F2090(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[96]; if ( result ) { v3 = (_DWORD *)this[97]; if ( v3 ) sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[96] + 344) = *(_DWORD *)(v1[97] + 300); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (005F20E0) -------------------------------------------------------- int __thiscall sub_5F20E0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(LONG, LONG))(*v1[98] + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, v1[98]); return (*(int (__stdcall **)(signed int))(*v1[98] + 240))(1); } // AD01E8: using guessed type int dword_AD01E8; //----- (005F2150) -------------------------------------------------------- int __thiscall sub_5F2150(char *this) { int result; // eax unsigned int v2; // ebx signed __int64 v3; // rax int v4; // eax char v5; // cl const char *v6; // edx unsigned int v7; // eax char *v8; // edi char v9; // cl char *v10; // edi char v11; // al signed __int64 v12; // rax unsigned int v13; // eax char *v14; // edi char v15; // cl const char *v16; // ecx unsigned int v17; // eax const char *v18; // esi char *v19; // edi char v20; // cl char *v21; // edi char v22; // al signed __int64 v23; // rax unsigned int v24; // eax char *v25; // edi char v26; // cl const char *v27; // ecx unsigned int v28; // eax const char *v29; // esi char *v30; // edi char v31; // cl char *v32; // edi char v33; // al signed __int64 v34; // rax unsigned int v35; // eax char *v36; // edi char v37; // cl const char *v38; // ecx unsigned int v39; // eax const char *v40; // esi char *v41; // edi char v42; // cl char *v43; // edi char v44; // al char *v45; // eax char *v46; // eax volatile LONG *v47; // eax int v48; // edx char *v49; // [esp+0h] [ebp-208h] char v50[256]; // [esp+4h] [ebp-204h] char v51[256]; // [esp+103h] [ebp-105h] char v52[256]; // [esp+104h] [ebp-104h] v49 = this; result = sub_7474E0((_DWORD *)(dword_ACD998 + 4), 0); if ( result ) { result = sub_7474E0((_DWORD *)(dword_ACD998 + 4), 0); if ( result ) { v2 = *(_DWORD *)(result + 3); memset(v50, 0, 0x100u); memset(v52, 0, 0x100u); if ( v2 ) { if ( sub_680E90(v2) ) { v3 = sub_680E90(v2); sprintf(v50, "%I64d", v3); v4 = 0; do { v5 = v50[v4]; v52[v4++] = v5; } while ( v5 ); v6 = sub_40C190(1197446809); v7 = strlen(v6) + 1; v8 = v51; do v9 = (v8++)[1]; while ( v9 ); qmemcpy(v8, v6, v7); v10 = v51; do v11 = (v10++)[1]; while ( v11 ); *v10 = 0; } if ( sub_680EB0(v2) ) { v12 = sub_680EB0(v2); sprintf(v50, "%I64d", v12); v13 = strlen(v50) + 1; v14 = v51; do v15 = (v14++)[1]; while ( v15 ); qmemcpy(v14, v50, v13); v16 = sub_40C190(1201903011); v17 = strlen(v16) + 1; v18 = v16; v19 = v51; do v20 = (v19++)[1]; while ( v20 ); qmemcpy(v19, v18, v17); v21 = v51; do v22 = (v21++)[1]; while ( v22 ); *v21 = 0; } if ( sub_680F00(v2) ) { v23 = sub_680F00(v2); sprintf(v50, "%I64d", v23); v24 = strlen(v50) + 1; v25 = v51; do v26 = (v25++)[1]; while ( v26 ); qmemcpy(v25, v50, v24); v27 = sub_40C190(-1732930065); v28 = strlen(v27) + 1; v29 = v27; v30 = v51; do v31 = (v30++)[1]; while ( v31 ); qmemcpy(v30, v29, v28); v32 = v51; do v33 = (v32++)[1]; while ( v33 ); *v32 = 0; } if ( sub_680F60(v2) ) { v34 = sub_680F60(v2); sprintf(v50, "%I64d", v34); v35 = strlen(v50) + 1; v36 = v51; do v37 = (v36++)[1]; while ( v37 ); qmemcpy(v36, v50, v35); v38 = sub_40C190(-2001757707); v39 = strlen(v38) + 1; v40 = v38; v41 = v51; do v42 = (v41++)[1]; while ( v42 ); qmemcpy(v41, v40, v39); v43 = v51; do v44 = (v43++)[1]; while ( v44 ); *v43 = 0; } } v45 = (char *)sub_40A910(760566930); v46 = sub_7549E0(v45, v52); v47 = sub_462C30(2, v46); if ( v49 ) v48 = (int)(v49 + 232); else v48 = 0; result = (**((int (__stdcall ***)(int))v47 + 58))(v48); } } return result; } // ACD998: using guessed type int dword_ACD998; // 5F2150: using guessed type char var_104[256]; // 5F2150: using guessed type char var_204[256]; //----- (005F2500) -------------------------------------------------------- int *__thiscall sub_5F2500(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int *result; // eax int v6; // edi const CHAR *v7; // eax int v8; // edi const CHAR *v9; // eax v4 = this; if ( a2 == 74 ) { result = (int *)this[42]; this[43] = 11; if ( result ) { v8 = *result; v9 = sub_40A910(-653596178); result = (int *)(*(int (__thiscall **)(_DWORD, const CHAR *))(v8 + 472))(v4[42], v9); } } else { result = (int *)(a2 - 75); if ( a2 == 75 ) { result = (int *)this[42]; this[43] = 12; if ( result ) { v6 = *result; v7 = sub_40A910(-535629012); result = (int *)(*(int (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(v4[42], v7); } } } return result; } //----- (005F2590) -------------------------------------------------------- int __thiscall sub_5F2590(int this) { int v1; // esi int *v2; // eax int v3; // edi const CHAR *v4; // eax int v5; // edi v1 = this; *(_BYTE *)(this + 412) = 0; *(_DWORD *)(this + 420) = 0; *(_DWORD *)(this + 424) = 0; *(_DWORD *)(this + 428) = 0; *(_DWORD *)(this + 432) = 0; *(_DWORD *)(this + 436) = 0; *(_DWORD *)(this + 440) = 0; *(_DWORD *)(this + 444) = 0; *(_DWORD *)(this + 448) = 0; v2 = *(int **)(this + 400); *(_DWORD *)(this + 404) = 11; if ( v2 ) { v3 = *v2; v4 = sub_40A910(-653596178); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*(_DWORD *)(v1 + 400), v4); } sub_4638F0(*(_DWORD **)(v1 + 388), 0); *(_DWORD *)(*(_DWORD *)(v1 + 384) + 336) = 0; v5 = *(_DWORD *)(v1 + 384); *(float *)(v5 + 340) = 0.0; *(_DWORD *)(v5 + 344) = (signed int)((double)*(signed int *)(v5 + 336) * 0.0); *(_DWORD *)(*(_DWORD *)(v1 + 384) + 344) = 0; return (*(int (__stdcall **)(void *))(**(_DWORD **)(v1 + 408) + 460))(&unk_9E9987); } //----- (005F2670) -------------------------------------------------------- char __thiscall sub_5F2670(char *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 0: LOBYTE(v3) = sub_5F2150(this); break; case 1: sub_6D38A0(1); LOBYTE(v3) = sub_6F36A0(&off_AB7F2C, 29, 126, 0, 0); break; case 2: LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 29, 145, 0, 0); break; case 3: LOBYTE(v3) = sub_6F36A0(&off_AB7F2C, 29, 233, 0, 0); break; case 4: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "GuildMenu"); break; default: return (char)v3; } return (char)v3; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005F2720) -------------------------------------------------------- int __cdecl sub_5F2720(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildTournamentBaseWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildTournamentBaseWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9E9E20: using guessed type void *GuildTournamentBaseWin::`vftable'; // 9E9E3C: using guessed type void *GuildTournamentBaseWin::`vftable'; //----- (005F2860) -------------------------------------------------------- void __thiscall sub_5F2860(char *this, _DWORD *a2) { int v2; // esi int v3; // edi int v4; // ST2C_4 _DWORD *v5; // eax int v6; // edx _BYTE *v7; // eax unsigned int v8; // ecx const char *v9; // eax char *v10; // esi char *v11; // ebx BOOL v12; // eax const unsigned __int8 *v13; // edi size_t v14; // ebx unsigned __int8 *v15; // eax const char *v16; // ebx unsigned int v17; // eax char *v18; // edi char v19; // cl unsigned int v20; // edx char *v21; // edi char v22; // cl unsigned int v23; // eax char *v24; // edi char v25; // cl unsigned int v26; // kr00_4 unsigned int v27; // eax char *v28; // esi char *v29; // edi char v30; // cl int v31; // edx unsigned __int8 v32; // bl size_t v33; // ebx unsigned __int8 *v34; // eax const char *v35; // ebx unsigned int v36; // eax char *v37; // edi char v38; // cl unsigned int v39; // edx char *v40; // edi char v41; // cl unsigned int v42; // eax char *v43; // edi char v44; // cl unsigned int v45; // kr04_4 char v46; // cl char *v47; // edi void *v48; // eax unsigned int v49; // eax char *v50; // edi char v51; // cl unsigned int v52; // eax char *v53; // edi char v54; // cl unsigned int v55; // kr08_4 unsigned int v56; // eax char *v57; // esi char *v58; // edi char v59; // cl char *v60; // edi char *v61; // esi char v62; // cl int v63; // eax int v64; // edi unsigned int v65; // eax char *v66; // edi char v67; // cl unsigned int v68; // eax char *v69; // edi char v70; // cl unsigned int v71; // kr0C_4 char v72; // cl int v73; // eax void **v74; // esi _BYTE *v75; // eax unsigned int v76; // ecx const char *v77; // eax char *v78; // esi const unsigned __int8 *v79; // ebx size_t v80; // edi unsigned __int8 *v81; // eax unsigned int v82; // eax char *v83; // edi char v84; // cl const char *v85; // ebx unsigned int v86; // edx char *v87; // edi char v88; // cl unsigned int v89; // eax char *v90; // edi char v91; // cl unsigned int v92; // kr10_4 unsigned int v93; // eax char *v94; // esi char *v95; // edi char v96; // cl int v97; // edi char *v98; // edi char *v99; // edi char v100; // bl const unsigned __int8 *v101; // edi size_t v102; // ebx unsigned __int8 *v103; // eax const char *v104; // ebx unsigned int v105; // eax char *v106; // edi char v107; // cl unsigned int v108; // edx char *v109; // edi char v110; // cl unsigned int v111; // eax char *v112; // edi char v113; // cl unsigned int v114; // kr14_4 char v115; // cl char *v116; // edi int v117; // esi int v118; // edx int v119; // eax CHAR *v120; // eax unsigned int v121; // eax char *v122; // edi char v123; // cl unsigned int v124; // eax char *v125; // edi char v126; // cl char *v127; // edi __int16 *v128; // esi char v129; // cl const char *v130; // eax unsigned int v131; // kr18_4 unsigned int v132; // eax char *v133; // esi char *v134; // edi char v135; // cl unsigned int v136; // eax char *v137; // edi char v138; // cl unsigned int v139; // eax char *v140; // edi char v141; // cl unsigned int v142; // kr1C_4 char v143; // cl int v144; // ST2C_4 _DWORD *v145; // eax int v146; // ecx int v147; // ST2C_4 _DWORD *v148; // eax int v149; // edx int v150; // [esp-Ch] [ebp-514h] char *v151; // [esp-4h] [ebp-50Ch] __int16 v152; // [esp+10h] [ebp-4F8h] char v153; // [esp+12h] [ebp-4F6h] char v154; // [esp+13h] [ebp-4F5h] int v155; // [esp+110h] [ebp-3F8h] void **v156; // [esp+114h] [ebp-3F4h] void **v157; // [esp+160h] [ebp-3A8h] int v158; // [esp+1A8h] [ebp-360h] BYTE v159[4]; // [esp+1ACh] [ebp-35Ch] BYTE v160[4]; // [esp+1B0h] [ebp-358h] BYTE v161[4]; // [esp+1B4h] [ebp-354h] BYTE v162[4]; // [esp+1B8h] [ebp-350h] unsigned __int8 *v163; // [esp+1BCh] [ebp-34Ch] _DWORD *v164; // [esp+1C0h] [ebp-348h] void ***v165; // [esp+1C4h] [ebp-344h] int v166; // [esp+1C8h] [ebp-340h] BYTE TestChar[4]; // [esp+1CCh] [ebp-33Ch] char *v168; // [esp+1D0h] [ebp-338h] int v169; // [esp+1D4h] [ebp-334h] char *v170; // [esp+1D8h] [ebp-330h] void *v171; // [esp+1DCh] [ebp-32Ch] int v172; // [esp+1ECh] [ebp-31Ch] unsigned int v173; // [esp+1F0h] [ebp-318h] char v174; // [esp+1F8h] [ebp-310h] char v175; // [esp+2F7h] [ebp-211h] char v176; // [esp+2F8h] [ebp-210h] char v177; // [esp+3F7h] [ebp-111h] int v178; // [esp+3F8h] [ebp-110h] int v179; // [esp+3FCh] [ebp-10Ch] int v180; // [esp+400h] [ebp-108h] int v181; // [esp+404h] [ebp-104h] char v182; // [esp+408h] [ebp-100h] int v183; // [esp+460h] [ebp-A8h] void **v184; // [esp+464h] [ebp-A4h] void **v185; // [esp+4B0h] [ebp-58h] int v186; // [esp+504h] [ebp-4h] v2 = (int)a2; v3 = (int)this; v168 = this; v164 = a2; sub_529D40(&v155, 2u, 1); v4 = *(_DWORD *)(v3 + 416); v186 = 0; sub_529500(&v155, v4); v5 = sub_52B2F0(&v155, &v171); LOBYTE(v186) = 1; if ( v5[5] >= 0x10u ) v5 = (_DWORD *)*v5; v166 = ((int (__thiscall *)(_DWORD, _DWORD *))loc_466CA0)(*(_DWORD *)(v3 + 384), v5); if ( v173 >= 0x10 ) operator delete(v171); v6 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v6) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 2; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v155, 2u, 1); v186 = 3; v7 = sub_406190(&v155, " "); sub_529AA0(v7, a2); if ( !strcmp((const char *)(v3 + 420), (const char *)&unk_9E9967) || *(_DWORD *)(v3 + 404) != 11 ) goto LABEL_60; v179 = 2032956015; v178 = 1819239291; v180 = 1869376613; v181 = 11383; memset(&v182, 0, 0xF0u); v152 = 125; v153 = 0; memset(&v154, 0, 0xFDu); memset(&v174, 0, 0x100u); memset(&v176, 0, 0x100u); v8 = a2[5]; v170 = (char *)(v8 < 0x10 ? a2 : *a2); *(_DWORD *)v161 = strlen((const char *)(v3 + 420)); v9 = (const char *)(v8 < 0x10 ? a2 : *a2); *(_DWORD *)v159 = strlen(v9); v169 = 0; if ( *(_DWORD *)v159 <= 0 ) { LABEL_60: if ( *(_DWORD *)(v2 + 20) < 0x10u ) v48 = (void *)v2; else v48 = *(void **)v2; sub_4661A0(*(_DWORD **)(v3 + 384), v166, 1, v48); v64 = (int)v168; goto LABEL_79; } v10 = &v176; while ( 1 ) { v11 = v170; TestChar[0] = *v170; v12 = IsDBCSLeadByte(TestChar[0]); v13 = (const unsigned __int8 *)(v168 + 420); if ( !v12 ) break; v162[0] = *v13; if ( !IsDBCSLeadByte(v162[0]) ) { strncpy(v10, v11, 2u); v169 += 2; v10 += 2; v170 = v11 + 2; goto LABEL_58; } if ( TestChar[0] != v162[0] ) { strncpy(v10, v11, 2u); goto LABEL_35; } v14 = *(_DWORD *)v161; strncpy(&v174, v170, *(size_t *)v161); v15 = _mbsstr((const unsigned __int8 *)&v174, v13); v163 = v15; if ( !v15 ) { strncpy(v10, v170, v14); LABEL_35: v169 += 2; v10 += 2; v170 += 2; goto LABEL_58; } v16 = (const char *)v15; if ( !strcmp((const char *)v15, (const char *)v13) ) { if ( !v169 ) { v49 = strlen(&v174) + 1; v50 = &v177; do v51 = (v50++)[1]; while ( v51 ); qmemcpy(v50, &v174, v49); v52 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v53 = &v177; do v54 = (v53++)[1]; while ( v54 ); qmemcpy(v53, &v152, v52); v55 = strlen(v16); v56 = strlen(&v170[v55]) + 1; v57 = &v170[v55]; v58 = &v177; do v59 = (v58++)[1]; while ( v59 ); goto LABEL_68; } if ( v169 > 0 ) { v17 = strlen((const char *)&v178) + 1; v18 = &v175; do v19 = (v18++)[1]; while ( v19 ); qmemcpy(v18, &v178, v17); v20 = strlen(v16) + 1; v21 = &v175; do v22 = (v21++)[1]; while ( v22 ); qmemcpy(v21, v16, v20); v23 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v24 = &v175; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, &v152, v23); v26 = strlen(v16); v27 = strlen(&v170[v26]) + 1; v28 = &v170[v26]; v29 = &v175; do v30 = (v29++)[1]; while ( v30 ); LABEL_30: v31 = v166; qmemcpy(v29, v28, v27); v151 = &v176; v150 = v31; goto LABEL_69; } } else { strncpy(v10, v170, 2u); v169 += 2; v10 += 2; } memset(&v174, 0, 0x100u); v170 += 2; LABEL_58: if ( v169 >= *(_DWORD *)v159 ) { v2 = (int)v164; v3 = (int)v168; goto LABEL_60; } } v32 = *v13; v160[0] = *v13; if ( IsDBCSLeadByte(v160[0]) ) { v47 = v170; strncpy(v10, v170, 1u); ++v169; ++v10; v170 = v47 + 1; goto LABEL_58; } if ( TestChar[0] != v32 ) { strncpy(v10, v170, 1u); goto LABEL_56; } v33 = *(_DWORD *)v161; strncpy(&v174, v170, *(size_t *)v161); v34 = _mbsstr((const unsigned __int8 *)&v174, v13); v163 = v34; if ( !v34 ) { strncpy(v10, v170, v33); LABEL_56: ++v169; ++v10; ++v170; goto LABEL_58; } v35 = (const char *)v34; if ( strcmp((const char *)v34, (const char *)v13) ) { strncpy(v10, v170, 1u); ++v169; ++v10; LABEL_53: memset(&v174, 0, 0x100u); ++v170; goto LABEL_58; } if ( v169 ) { if ( v169 > 0 ) { v36 = strlen((const char *)&v178) + 1; v37 = &v175; do v38 = (v37++)[1]; while ( v38 ); qmemcpy(v37, &v178, v36); v39 = strlen(v35) + 1; v40 = &v175; do v41 = (v40++)[1]; while ( v41 ); qmemcpy(v40, v35, v39); v42 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v43 = &v175; do v44 = (v43++)[1]; while ( v44 ); qmemcpy(v43, &v152, v42); v45 = strlen(v35); v27 = strlen(&v170[v45]) + 1; v28 = &v170[v45]; v29 = &v175; do v46 = (v29++)[1]; while ( v46 ); goto LABEL_30; } goto LABEL_53; } v65 = strlen(&v174) + 1; v66 = &v177; do v67 = (v66++)[1]; while ( v67 ); qmemcpy(v66, &v174, v65); v68 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v69 = &v177; do v70 = (v69++)[1]; while ( v70 ); qmemcpy(v69, &v152, v68); v71 = strlen(v35); v56 = strlen(&v170[v71]) + 1; v57 = &v170[v71]; v58 = &v177; do v72 = (v58++)[1]; while ( v72 ); LABEL_68: qmemcpy(v58, v57, 4 * (v56 >> 2)); v61 = &v57[4 * (v56 >> 2)]; v60 = &v58[4 * (v56 >> 2)]; v62 = v56; v63 = v166; v151 = (char *)&v178; qmemcpy(v60, v61, v62 & 3); v150 = v63; LABEL_69: v64 = (int)v168; sub_4661A0(*((_DWORD **)v168 + 96), v150, 1, v151); v2 = (int)v164; LABEL_79: v73 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v73) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 4; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v155, 2u, 1); v74 = (void **)(v2 + 28); v186 = 5; v165 = (void ***)v74; v75 = sub_406190(&v155, (const char *)&unk_9E9AF4); sub_529AA0(v75, v74); if ( !strcmp((const char *)(v64 + 420), (const char *)&unk_9E996E) || *(_DWORD *)(v64 + 404) != 12 ) goto LABEL_135; v179 = 2032956015; v178 = 1819239291; v180 = 1869376613; v181 = 11383; memset(&v182, 0, 0xF0u); v152 = 125; v153 = 0; memset(&v154, 0, 0xFDu); memset(&v174, 0, 0x100u); memset(&v176, 0, 0x100u); v76 = (unsigned int)v74[5]; v170 = (char *)(v76 < 0x10 ? v74 : *v74); *(_DWORD *)v162 = strlen((const char *)(v64 + 420)); v77 = (const char *)(v76 < 0x10 ? v74 : *v74); v158 = strlen(v77); v169 = 0; if ( v158 <= 0 ) goto LABEL_135; v78 = &v176; while ( 2 ) { TestChar[0] = *v170; if ( !IsDBCSLeadByte(TestChar[0]) ) { v100 = v168[420]; v101 = (const unsigned __int8 *)(v168 + 420); v159[0] = v168[420]; if ( !IsDBCSLeadByte(v159[0]) ) { if ( TestChar[0] == v100 ) { v102 = *(_DWORD *)v162; strncpy(&v174, v170, *(size_t *)v162); v103 = _mbsstr((const unsigned __int8 *)&v174, v101); *(_DWORD *)v160 = v103; if ( v103 ) { v104 = (const char *)v103; if ( !strcmp((const char *)v103, (const char *)v101) ) { if ( !v169 ) { v136 = strlen(&v174) + 1; v137 = &v177; do v138 = (v137++)[1]; while ( v138 ); qmemcpy(v137, &v174, v136); v139 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v140 = &v177; do v141 = (v140++)[1]; while ( v141 ); qmemcpy(v140, &v152, v139); v142 = strlen(v104); v132 = strlen(&v170[v142]) + 1; v133 = &v170[v142]; v134 = &v177; do v143 = (v134++)[1]; while ( v143 ); goto LABEL_147; } if ( v169 > 0 ) { v105 = strlen((const char *)&v178) + 1; v106 = &v175; do v107 = (v106++)[1]; while ( v107 ); qmemcpy(v106, &v178, v105); v108 = strlen(v104) + 1; v109 = &v175; do v110 = (v109++)[1]; while ( v110 ); qmemcpy(v109, v104, v108); v111 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v112 = &v175; do v113 = (v112++)[1]; while ( v113 ); qmemcpy(v112, &v152, v111); v114 = strlen(v104); v93 = strlen(&v170[v114]) + 1; v94 = &v170[v114]; v95 = &v175; do v115 = (v95++)[1]; while ( v115 ); goto LABEL_104; } } else { strncpy(v78, v170, 1u); ++v169; ++v78; } memset(&v174, 0, 0x100u); ++v170; goto LABEL_133; } strncpy(v78, v170, v102); } else { strncpy(v78, v170, 1u); } ++v169; ++v78; ++v170; goto LABEL_133; } v116 = v170; strncpy(v78, v170, 1u); ++v169; ++v78; v99 = v116 + 1; LABEL_132: v170 = v99; goto LABEL_133; } v79 = (const unsigned __int8 *)(v168 + 420); v161[0] = v168[420]; if ( !IsDBCSLeadByte(v161[0]) ) { v98 = v170; strncpy(v78, v170, 2u); v169 += 2; v78 += 2; v99 = v98 + 2; goto LABEL_132; } if ( TestChar[0] != v161[0] ) { strncpy(v78, v170, 2u); goto LABEL_109; } v80 = *(_DWORD *)v162; strncpy(&v174, v170, *(size_t *)v162); v81 = _mbsstr((const unsigned __int8 *)&v174, v79); v163 = v81; if ( !v81 ) { strncpy(v78, v170, v80); LABEL_109: v169 += 2; v78 += 2; v170 += 2; goto LABEL_133; } if ( strcmp((const char *)v81, (const char *)v79) ) { strncpy(v78, v170, 2u); v169 += 2; v78 += 2; goto LABEL_106; } if ( !v169 ) { v121 = strlen(&v174) + 1; v122 = &v177; do v123 = (v122++)[1]; while ( v123 ); qmemcpy(v122, &v174, v121); v124 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v125 = &v177; do v126 = (v125++)[1]; while ( v126 ); qmemcpy(v125, &v152, 4 * (v124 >> 2)); v128 = &v152 + 2 * (v124 >> 2); v127 = &v125[4 * (v124 >> 2)]; v129 = v124; v130 = (const char *)v163; qmemcpy(v127, v128, v129 & 3); v131 = strlen(v130); v132 = strlen(&v170[v131]) + 1; v133 = &v170[v131]; v134 = &v177; do v135 = (v134++)[1]; while ( v135 ); LABEL_147: qmemcpy(v134, v133, v132); v97 = v166; v117 = (int)v168; sub_4661A0(*((_DWORD **)v168 + 96), v166, 2, &v178); goto LABEL_139; } if ( v169 > 0 ) { v82 = strlen((const char *)&v178) + 1; v83 = &v175; do v84 = (v83++)[1]; while ( v84 ); v85 = (const char *)v163; qmemcpy(v83, &v178, v82); v86 = strlen(v85) + 1; v87 = &v175; do v88 = (v87++)[1]; while ( v88 ); qmemcpy(v87, v85, v86); v89 = (char *)&v152 + strlen((const char *)&v152) + 1 - (char *)&v152; v90 = &v175; do v91 = (v90++)[1]; while ( v91 ); qmemcpy(v90, &v152, v89); v92 = strlen(v85); v93 = strlen(&v170[v92]) + 1; v94 = &v170[v92]; v95 = &v175; do v96 = (v95++)[1]; while ( v96 ); LABEL_104: qmemcpy(v95, v94, v93); v97 = v166; sub_4661A0(*((_DWORD **)v168 + 96), v166, 2, &v176); goto LABEL_138; } LABEL_106: memset(&v174, 0, 0x100u); v170 += 2; LABEL_133: if ( v169 < v158 ) continue; break; } v74 = (void **)v165; v64 = (int)v168; LABEL_135: if ( (unsigned int)v74[5] >= 0x10 ) v74 = (void **)*v74; sub_4661A0(*(_DWORD **)(v64 + 384), v166, 2, v74); v97 = v166; LABEL_138: v117 = (int)v168; LABEL_139: v118 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v118) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 6; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); v119 = v164[14]; if ( !v119 ) { v120 = (CHAR *)sub_40C190(1044198562); goto LABEL_157; } if ( v119 == 1 ) { v120 = (CHAR *)sub_40C190(1044934038); LABEL_157: sub_4661A0(*(_DWORD **)(v117 + 384), v97, 3, v120); } sub_529D40(&v155, 2u, 1); v144 = v164[15]; v186 = 7; sub_529500(&v155, v144); v145 = sub_52B2F0(&v155, &v171); LOBYTE(v186) = 8; if ( v145[5] >= 0x10u ) v145 = (_DWORD *)*v145; sub_4661A0(*(_DWORD **)(v117 + 384), v97, 4, v145); if ( v173 >= 0x10 ) operator delete(v171); v146 = *(_DWORD *)(v155 + 4); v165 = &v157; *(int *)((char *)&v155 + v146) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 9; v156 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v156); sub_423AE0(&v156); *(int *)((char *)&v155 + *(_DWORD *)(v155 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v157 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v157); sub_529D40(&v183, 2u, 1); v147 = v164[16]; v186 = 10; sub_529500(&v183, v147); v148 = sub_52B2F0(&v183, &v171); LOBYTE(v186) = 11; if ( v148[5] >= 0x10u ) v148 = (_DWORD *)*v148; sub_4661A0(*(_DWORD **)(v117 + 384), v97, 5, v148); if ( v173 >= 0x10 ) operator delete(v171); v149 = *(_DWORD *)(v183 + 4); v173 = 15; v172 = 0; LOBYTE(v171) = 0; v165 = &v185; *(int *)((char *)&v183 + v149) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v186 = 12; v184 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v184); sub_423AE0(&v184); *(int *)((char *)&v183 + *(_DWORD *)(v183 + 4)) = (int)&std::basic_ostream>::`vftable'; v186 = -1; v185 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v185); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (005F3BF0) -------------------------------------------------------- int __thiscall sub_5F3BF0(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int v4; // edi int v5; // ST08_4 char *v6; // eax char *v7; // eax int v8; // ecx unsigned __int8 *v9; // edi int v10; // eax _BYTE *v11; // eax const unsigned __int8 *v12; // eax int v13; // ebx int v14; // ST08_4 char *v15; // eax char *v16; // eax int v17; // edx const unsigned __int8 *v18; // ebx _BYTE *v19; // eax int v20; // ebx int v21; // ST08_4 char *v22; // eax char *v23; // eax int v24; // ebx int v25; // ST08_4 char *v26; // eax char *v27; // eax int v28; // ecx char v30; // [esp+10h] [ebp-148h] int v31; // [esp+A8h] [ebp-B0h] void **v32; // [esp+ACh] [ebp-ACh] void **v33; // [esp+BCh] [ebp-9Ch] _DWORD *v34; // [esp+C0h] [ebp-98h] _DWORD *v35; // [esp+CCh] [ebp-8Ch] _DWORD *v36; // [esp+D0h] [ebp-88h] _DWORD *v37; // [esp+DCh] [ebp-7Ch] _DWORD *v38; // [esp+E0h] [ebp-78h] int v39; // [esp+E8h] [ebp-70h] int v40; // [esp+ECh] [ebp-6Ch] void **v41; // [esp+F8h] [ebp-60h] void ***v42; // [esp+140h] [ebp-18h] unsigned int v43; // [esp+144h] [ebp-14h] int v44; // [esp+148h] [ebp-10h] int v45; // [esp+154h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[96]; v2[104] = 0; sub_466A50(v3); v4 = *(_DWORD *)v2[99]; v5 = v2[104]; v6 = (char *)sub_40A910(995377735); v7 = sub_7549E0(v6, v5); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[99], v7); v8 = v2[87] - v2[86]; v43 = 0; if ( v8 / 68 ) { v44 = 0; do { v9 = (unsigned __int8 *)(v44 + v2[86]); if ( a2 ) { v10 = v2[101]; if ( v10 == 11 ) { sub_529D40(&v31, 2u, 1); v45 = 0; v11 = sub_406190(&v31, " "); sub_529AA0(v11, v9); if ( *((_DWORD *)v9 + 5) < 0x10u ) v12 = v9; else v12 = *(const unsigned __int8 **)v9; if ( _mbsstr(v12, (const unsigned __int8 *)v2 + 420) ) { ++v2[104]; v13 = *(_DWORD *)v2[99]; v14 = v2[104]; v15 = (char *)sub_40A910(995377735); v16 = sub_7549E0(v15, v14); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(v2[99], v16); sub_5F2860((char *)v2, v9); } v17 = *(_DWORD *)(v31 + 4); v42 = &v41; *(int *)((char *)&v31 + v17) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v45 = 1; v32 = &std::basic_stringbuf,std::allocator>::`vftable'; if ( v40 & 1 ) operator delete(*v33); *v33 = 0; *v35 = 0; *v37 = 0; *v34 = 0; *v36 = 0; *v38 = 0; v40 &= 0xFFFFFFFE; v39 = 0; sub_423AE0(&v32); *(int *)((char *)&v31 + *(_DWORD *)(v31 + 4)) = (int)&std::basic_ostream>::`vftable'; v45 = -1; v41 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v41); } else if ( v10 == 12 ) { sub_529D40(&v30, 2u, 1); v18 = v9 + 28; v45 = 2; v19 = sub_406190(&v30, " "); sub_529AA0(v19, (_DWORD *)v9 + 7); if ( *((_DWORD *)v9 + 12) >= 0x10u ) v18 = *(const unsigned __int8 **)v18; if ( _mbsstr(v18, (const unsigned __int8 *)v2 + 420) ) { ++v2[104]; v20 = *(_DWORD *)v2[99]; v21 = v2[104]; v22 = (char *)sub_40A910(995377735); v23 = sub_7549E0(v22, v21); (*(void (__thiscall **)(_DWORD, char *))(v20 + 472))(v2[99], v23); sub_5F2860((char *)v2, v9); } v45 = -1; sub_5291C0(&v30); } } else if ( !*((_BYTE *)v2 + 413) ) { ++v2[104]; v24 = *(_DWORD *)v2[99]; v25 = v2[104]; v26 = (char *)sub_40A910(995377735); v27 = sub_7549E0(v26, v25); (*(void (__thiscall **)(_DWORD, char *))(v24 + 472))(v2[99], v27); sub_5F2860((char *)v2, v9); } v28 = v2[87] - v2[86]; v44 += 68; ++v43; } while ( v43 < v28 / 68 ); } return sub_465130((_DWORD *)v2[96]); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (005F3F60) -------------------------------------------------------- _DWORD *__thiscall sub_5F3F60(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = >RequestListWin::`vftable'; v1[58] = >RequestListWin::`vftable'; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[94] = 0; v1[102] = 0; *((_WORD *)v1 + 206) = 0; v1[98] = 0; v1[104] = 0; v1[101] = 11; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EA098: using guessed type void *GTRequestListWin::`vftable'; // 9EA0B4: using guessed type void *GTRequestListWin::`vftable'; //----- (005F3FF0) -------------------------------------------------------- LONG __thiscall sub_5F3FF0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // ecx _DWORD *v4; // eax v1 = this; *this = >RequestListWin::`vftable'; this[58] = >RequestListWin::`vftable'; v2 = this[102]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[94]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)(v1 + 90)); v1[94] = 0; } v4 = (_DWORD *)v1[86]; if ( v4 ) { sub_5F6400(v4, (_DWORD *)v1[87]); operator delete((void *)v1[86]); } v1[86] = 0; v1[87] = 0; v1[88] = 0; return sub_8F10F0(v1); } // 9EA098: using guessed type void *GTRequestListWin::`vftable'; // 9EA0B4: using guessed type void *GTRequestListWin::`vftable'; //----- (005F40F0) -------------------------------------------------------- int __thiscall sub_5F40F0(_DWORD *this) { _DWORD *v1; // esi const void **v2; // eax int v3; // ecx _DWORD *v4; // edi v1 = this; this[105] = 0; this[106] = 0; this[107] = 0; this[108] = 0; this[109] = 0; this[110] = 0; this[111] = 0; this[112] = 0; v2 = (const void **)this[87]; v3 = this[86]; if ( (const void **)v3 != v2 ) { v4 = (_DWORD *)sub_70AC30(v2, v2, v3); sub_5F6400(v4, (_DWORD *)v1[87]); v1[87] = v4; } sub_466A50((_DWORD *)v1[96]); return sub_465130((_DWORD *)v1[96]); } //----- (005F4190) -------------------------------------------------------- volatile LONG *__cdecl sub_5F4190(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5F3F60(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005F42C0) -------------------------------------------------------- char __thiscall sub_5F42C0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // ebx volatile LONG *v15; // ebx volatile LONG **v16; // ebx void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // edx int v23; // ebx int v24; // eax volatile LONG *v25; // ebx const CHAR *v26; // eax volatile LONG **v27; // ebx volatile LONG *v28; // edx int v29; // ebx int v30; // eax volatile LONG *v31; // ebx const CHAR *v32; // eax volatile LONG **v33; // ebx volatile LONG *v34; // edx int v35; // ebx int v36; // eax volatile LONG *v37; // ebx const CHAR *v38; // eax volatile LONG **v39; // ebx volatile LONG *v40; // edx int v41; // ebx int v42; // eax volatile LONG *v43; // edi volatile LONG v44; // ebx const CHAR *v45; // eax volatile LONG *v46; // eax void (__thiscall *v47)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v48)(_DWORD, signed int); // esi int v49; // [esp+5Ch] [ebp-24h] int v50; // [esp+60h] [ebp-20h] int v51; // [esp+64h] [ebp-1Ch] int v52; // [esp+68h] [ebp-18h] int v53; // [esp+6Ch] [ebp-14h] int v54; // [esp+70h] [ebp-10h] int v55; // [esp+7Ch] [ebp-4h] v2 = (int)this; v54 = 0; v3 = dword_BA6BA0; v55 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildMenu.nif"); sub_8F66B0(v4, (int)&v54, v3); if ( !v54 ) return 0; v5 = sub_8FB140(v54, (int)"Frame", (int)&v52, (int)&v53, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildTournamentBaseWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v54; v55 = -1; if ( v54 && !InterlockedDecrement((volatile LONG *)(v54 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v53; v9 = v52; v51 = v53; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v54, (int)"Theme", (int)&v52, (int)&v53, v10); else v11 = sub_8FB140(v54, (int)"Theme", (int)&v52, (int)&v53, 0); sub_8F3EB0(v52 - v9, v53 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v54, (int)"Panel01", (int)&v52, (int)&v53, 0); sub_8F3EB0(v52 - v9, v53, (int)v12, v2, 0, 0); v13 = sub_8FB140(v54, (int)"Panel02", (int)&v52, (int)&v53, 0); sub_8F3EB0(v52 - v9, v53, (int)v13, v2, 0, 0); v14 = sub_8FB140(v54, (int)"ClsNor", (int)&v52, (int)&v53, 0); sub_8FB650(v14, v54, (int)"ClsClick"); sub_8FB650(v14, v54, (int)"ClsOver"); sub_90C8D0(v52 - v9, v53 - v51, (int)v14, v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v54 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v54, (int)"HelpLinkNor", (int)&v52, (int)&v53, v15); sub_8FB650(v16, v54, (int)"HelpLinkClick"); sub_8FB650(v16, v54, (int)"HelpLinkOver"); sub_8FE0F0(v52 - v9, v53 - v51, (int)v16, v2, 4, 0, 0); } if ( sub_8F71E0(v54, (int)"WinTitle", &v52, &v53, &v49, &v50) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v52 - v9, v53, v49, v50, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v51 = *v19; v20 = sub_40C190(764379807); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v54, (int)"Btn01Nor", (int)&v52, (int)&v53, 0); sub_8FB650(v21, v54, (int)"Btn01Click"); sub_8FB650(v21, v54, (int)"Btn01Over"); sub_8FE0F0(v52 - v9, v53, (int)v21, v2, 0, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v51 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(0); v25 = sub_8F4A20(v52 - v9, v53 + 1, v51, v23, v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v51 = *v25; v26 = sub_40C190(-623324695); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v54, (int)"Btn02Nor", (int)&v52, (int)&v53, 0); sub_8FB650(v27, v54, (int)"Btn02Click"); sub_8FB650(v27, v54, (int)"Btn02Over"); sub_8FE0F0(v52 - v9, v53, (int)v27, v2, 3, 0, 0); v28 = v27[9]; v29 = *(_DWORD *)(*v28 + 24); v51 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(0); v31 = sub_8F4A20(v52 - v9, v53 + 1, v51, v29, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v51 = *v31; v32 = sub_40A910(1990264805); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v31, v32); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v33 = sub_8FB140(v54, (int)"Btn03Nor", (int)&v52, (int)&v53, 0); sub_8FB650(v33, v54, (int)"Btn03Click"); sub_8FB650(v33, v54, (int)"Btn03Over"); sub_8FE0F0(v52 - v9, v53, (int)v33, v2, 1, 0, 0); v34 = v33[9]; v35 = *(_DWORD *)(*v34 + 24); v51 = *(_DWORD *)(*v34 + 20); v36 = sub_421050(0); v37 = sub_8F4A20(v52 - v9, v53 + 1, v51, v35, v36, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v51 = *v37; v38 = sub_40C190(371399222); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v51 + 472))(v37, v38); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v39 = sub_8FB140(v54, (int)"Btn04Nor", (int)&v52, (int)&v53, 0); sub_8FB650(v39, v54, (int)"Btn04Click"); sub_8FB650(v39, v54, (int)"Btn04Over"); sub_8FE0F0(v52 - v9, v53, (int)v39, v2, 2, 0, 0); v40 = v39[9]; v41 = *(_DWORD *)(*v40 + 24); v51 = *(_DWORD *)(*v40 + 20); v42 = sub_421050(0); v43 = sub_8F4A20(v52 - v9, v53 + 1, v51, v41, v42, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); v44 = *v43; v45 = sub_40C190(-421997516); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v43, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v46 = sub_5F4190(a2); v47 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 344) = v46; v47(v2, xRight, dword_AC2F78, 0.60000002, 0.60000002); (**(void (__thiscall ***)(int, int))(v2 + 232))(v2 + 232, v2 + 232); v55 = -1; if ( v54 ) { v48 = (void (__thiscall ***)(_DWORD, signed int))v54; if ( !InterlockedDecrement((volatile LONG *)(v54 + 4)) ) { if ( v48 ) (**v48)(v48, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v54; v55 = -1; if ( v54 && !InterlockedDecrement((volatile LONG *)(v54 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005F49B0) -------------------------------------------------------- int __thiscall sub_5F49B0(_DWORD **this) { _DWORD **v1; // esi int result; // eax _DWORD *v3; // edi char *v4; // eax int v5; // edi char v6; // cl _DWORD *v7; // eax _DWORD *v8; // ecx _DWORD *v9; // edi int (__stdcall ***v10)(char *); // ecx int (__stdcall *v11)(char *); // eax int v12; // eax _DWORD *v13; // ecx float *v14; // edi char v15; // [esp-18h] [ebp-28h] int v16; // [esp-14h] [ebp-24h] int v17; // [esp-10h] [ebp-20h] int v18; // [esp-Ch] [ebp-1Ch] int v19; // [esp-8h] [ebp-18h] int v20; // [esp-4h] [ebp-14h] char *v21; // [esp+Ch] [ebp-4h] v1 = this; result = (*(int (**)(void))(*this[102] + 452))(); if ( result ) { v3 = v1 + 105; *v3 = 0; v3[1] = 0; v3[2] = 0; v3[3] = 0; v3[4] = 0; v3[5] = 0; v3[6] = 0; v3[7] = 0; v4 = (char *)(*(int (**)(void))(*v1[102] + 452))(); v5 = (char *)(v1 + 105) - v4; do { v6 = *v4; v4[v5] = *v4; ++v4; } while ( v6 ); v7 = v1[101]; if ( v7 == (_DWORD *)11 ) { v8 = v1[94]; v9 = v1 + 90; if ( v8 ) { (*(void (__stdcall **)(bool))(*v8 + 12))(v8 != v9); v1[94] = 0; } if ( sub_5ED190 ) { *v9 = &std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; v1[91] = sub_5ED190; v1[94] = v1 + 90; } else { v1[94] = 0; } } else if ( v7 == (_DWORD *)12 ) { sub_5F62C0(v1 + 90, (int)sub_5F6290); } v10 = (int (__stdcall ***)(char *))v1[94]; v21 = &v15; if ( v10 ) { v11 = **v10; if ( v10 == v1 + 90 ) v12 = v11(&v15); else v12 = v11(0); v19 = v12; } else { v19 = 0; } sub_5F7A60(v1[86], v1[87], v15, v16, v17, v18, v19); v13 = v1[97]; v20 = 0; *((_BYTE *)v1 + 413) = 1; sub_4638F0(v13, v20); v1[96][84] = 0; v14 = (float *)v1[96]; v14[85] = 0.0; *((_DWORD *)v14 + 86) = (signed int)((double)*((signed int *)v14 + 84) * 0.0); v1[96][86] = 0; result = sub_5F3BF0(v1, 1); } return result; } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // 9EA07C: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; //----- (005F4B20) -------------------------------------------------------- int __thiscall sub_5F4B20(_DWORD *this, int a2, int a3) { _DWORD **v3; // esi int *v4; // edi int v5; // ebx int v6; // eax v3 = (_DWORD **)this; v4 = (int *)this[102]; v5 = *v4; v6 = (*(int (__thiscall **)(_DWORD))(*v4 + 456))(this[102]); (*(void (__thiscall **)(int *, int))(v5 + 460))(v4, v6); (*(void (**)(void))(*v3[102] + 480))(); return sub_5F49B0(v3); } //----- (005F4B60) -------------------------------------------------------- void __thiscall sub_5F4B60(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi int v4; // eax int v5; // edx int v6; // ecx int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // ecx int v12; // edx int v13; // esi char *v14; // eax char *v15; // eax int v16; // esi int v17; // ST20_4 unsigned int v18; // edx void *v19; // [esp+14h] [ebp-80h] int v20; // [esp+24h] [ebp-70h] unsigned int v21; // [esp+28h] [ebp-6Ch] void *v22; // [esp+30h] [ebp-64h] int v23; // [esp+40h] [ebp-54h] unsigned int v24; // [esp+44h] [ebp-50h] int v25; // [esp+4Ch] [ebp-48h] int v26; // [esp+50h] [ebp-44h] int v27; // [esp+54h] [ebp-40h] int v28; // [esp+58h] [ebp-3Ch] int v29; // [esp+5Ch] [ebp-38h] int v30; // [esp+60h] [ebp-34h] int v31; // [esp+64h] [ebp-30h] char v32; // [esp+68h] [ebp-2Ch] int v33; // [esp+6Ch] [ebp-28h] int v34; // [esp+70h] [ebp-24h] int v35; // [esp+74h] [ebp-20h] int v36; // [esp+78h] [ebp-1Ch] int v37; // [esp+7Ch] [ebp-18h] char v38; // [esp+80h] [ebp-14h] int v39; // [esp+90h] [ebp-4h] v3 = this; v21 = 15; v20 = 0; LOBYTE(v19) = 0; v24 = 15; v23 = 0; LOBYTE(v22) = 0; v39 = 0; sub_4018E0(&v19, (void *)&byte_9A8050, 0); sub_4018E0(&v22, (void *)&byte_9A8050, 0); if ( a2 ) { v4 = *(_DWORD *)(a2 + 12); v5 = *(_DWORD *)(a2 + 8); v28 = *(_DWORD *)(a2 + 4); v6 = *(_DWORD *)(a2 + 16); v30 = v4; v29 = v5; v31 = v6; v32 = 0; sub_4018E0(&v19, &v28, strlen((const char *)&v28)); v7 = *(_DWORD *)(a2 + 24); v8 = *(_DWORD *)(a2 + 28); v33 = *(_DWORD *)(a2 + 20); v9 = *(_DWORD *)(a2 + 32); v34 = v7; v10 = *(_DWORD *)(a2 + 36); v36 = v9; v35 = v8; v37 = v10; v38 = 0; LOBYTE(v37) = 0; sub_4018E0(&v22, &v33, strlen((const char *)&v33)); v11 = *(unsigned __int8 *)(a2 + 40); v12 = *(unsigned __int16 *)(a2 + 42); v26 = *(unsigned __int8 *)(a2 + 41); v25 = v11; v27 = v12; if ( a3 > 0 ) { v13 = *(_DWORD *)v3[99]; v14 = (char *)sub_40A910(995377735); v15 = sub_7549E0(v14, a3); (*(void (__thiscall **)(_DWORD, char *))(v13 + 472))(v3[99], v15); } sub_52BA90(v3 + 86, (unsigned int)&v19); if ( !*((_BYTE *)v3 + 412) ) { v16 = v3[87]; v17 = v3[86]; v18 = (signed int)((unsigned __int64)(2021161081i64 * (v16 - v17)) >> 32) >> 5; sub_5F7920(v17, v16, v18 + (v18 >> 31), (unsigned __int8 (__cdecl *)(int, int))sub_5ED190); *((_BYTE *)v3 + 412) = 1; } sub_5F3BF0(v3, 0); } if ( v24 >= 0x10 ) operator delete(v22); v24 = 15; v23 = 0; LOBYTE(v22) = 0; if ( v21 >= 0x10 ) operator delete(v19); } //----- (005F4D60) -------------------------------------------------------- int __thiscall sub_5F4D60(int this) { _DWORD *v1; // esi int (__stdcall ***v2)(char *); // edi int v3; // ecx int (__stdcall ***v4)(char *); // eax int v5; // eax char v7; // [esp-18h] [ebp-28h] int v8; // [esp-14h] [ebp-24h] int v9; // [esp-10h] [ebp-20h] int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] char *v12; // [esp+Ch] [ebp-4h] v1 = (_DWORD *)this; *(_BYTE *)(this + 413) = 0; *(_DWORD *)(this + 420) = 0; *(_DWORD *)(this + 424) = 0; *(_DWORD *)(this + 428) = 0; *(_DWORD *)(this + 432) = 0; *(_DWORD *)(this + 436) = 0; *(_DWORD *)(this + 440) = 0; *(_DWORD *)(this + 444) = 0; v2 = (int (__stdcall ***)(char *))(this + 360); *(_DWORD *)(this + 448) = 0; v3 = *(_DWORD *)(this + 376); if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( sub_5ED190 ) { *v2 = (int (__stdcall **)(char *))&std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; v2[1] = (int (__stdcall **)(char *))sub_5ED190; v2[4] = (int (__stdcall **)(char *))v2; } else { v2[4] = 0; } v4 = (int (__stdcall ***)(char *))v2[4]; v12 = &v7; if ( v4 ) { if ( v4 == v2 ) v5 = (**v4)(&v7); else v5 = (**v4)(0); v11 = v5; } else { v11 = 0; } sub_5F7A60(v1[86], v1[87], v7, v8, v9, v10, v11); return sub_5F3BF0(v1, 0); } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // 9EA07C: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; //----- (005F4E40) -------------------------------------------------------- char __thiscall sub_5F4E40(int this, int a2, int a3) { char result; // al int v4; // esi int v5; // edi char v6; // [esp-18h] [ebp-20h] int v7; // [esp-14h] [ebp-1Ch] int v8; // [esp-10h] [ebp-18h] int v9; // [esp-Ch] [ebp-14h] int v10; // [esp-8h] [ebp-10h] void *v11; // [esp-4h] [ebp-Ch] result = a2 - 1; v4 = this; switch ( a2 ) { case 1: return sub_5F2090((_DWORD *)this); case 3: if ( byte_AD034F ) { byte_AD034F = 0; v11 = sub_585460; } else { byte_AD034F = 1; v11 = sub_5ED190; } goto LABEL_5; case 4: if ( byte_AD034E ) { byte_AD034E = 0; v11 = sub_528E20; } else { byte_AD034E = 1; v11 = sub_5F6290; } goto LABEL_5; case 5: if ( byte_AD034D ) { byte_AD034D = 0; v11 = sub_524F90; } else { byte_AD034D = 1; v11 = sub_524F70; } goto LABEL_5; case 6: if ( byte_AD034C ) { byte_AD034C = 0; v11 = sub_5F1EB0; } else { byte_AD034C = 1; v11 = sub_524FB0; } goto LABEL_5; case 7: if ( byte_AD034B ) { byte_AD034B = 0; v11 = sub_5F1ED0; } else { byte_AD034B = 1; v11 = sub_524FD0; } LABEL_5: sub_5F62C0((_DWORD *)(this + 360), (int)v11); sub_5ED0B0(&v6, v4 + 360); sub_5F7A60(*(_DWORD *)(v4 + 344), *(_DWORD *)(v4 + 348), v6, v7, v8, v9, v10); if ( *(_BYTE *)(v4 + 413) ) result = sub_5F3BF0((_DWORD *)v4, 1); else result = sub_5F3BF0((_DWORD *)v4, 0); break; case 8: result = sub_5F20E0((_DWORD **)this); break; case 9: result = sub_5F49B0((_DWORD **)this); break; case 10: *(_BYTE *)(this + 413) = 0; *(_DWORD *)(this + 420) = 0; *(_DWORD *)(this + 424) = 0; *(_DWORD *)(this + 428) = 0; *(_DWORD *)(this + 432) = 0; *(_DWORD *)(this + 436) = 0; *(_DWORD *)(this + 440) = 0; *(_DWORD *)(this + 444) = 0; *(_DWORD *)(this + 448) = 0; sub_4638F0(*(_DWORD **)(this + 388), 0); *(_DWORD *)(*(_DWORD *)(v4 + 384) + 336) = 0; v5 = *(_DWORD *)(v4 + 384); *(float *)(v5 + 340) = 0.0; *(_DWORD *)(v5 + 344) = (signed int)((double)*(signed int *)(v5 + 336) * 0.0); *(_DWORD *)(*(_DWORD *)(v4 + 384) + 344) = 0; result = sub_5F4D60(v4); break; case 13: result = sub_5F2060(); break; default: return result; } return result; } // 5F7A60: using guessed type _DWORD __cdecl sub_5F7A60(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); // AD034B: using guessed type char byte_AD034B; // AD034C: using guessed type char byte_AD034C; // AD034D: using guessed type char byte_AD034D; // AD034E: using guessed type char byte_AD034E; // AD034F: using guessed type char byte_AD034F; //----- (005F5080) -------------------------------------------------------- char __thiscall sub_5F5080(volatile LONG **this, int a2) { volatile LONG **v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax volatile LONG **v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG *v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax int v30; // eax int (**v31)(void); // eax int (__stdcall ***v32)(int); // ecx int (*v33)(void); // eax int v34; // eax int v35; // eax int v36; // eax volatile LONG *v37; // edx int v38; // eax volatile LONG *v39; // eax volatile LONG v40; // edx const CHAR *v41; // eax int v42; // ecx volatile LONG *v43; // eax int v44; // eax volatile LONG *v45; // eax volatile LONG v46; // edx const CHAR *v47; // eax int v48; // ecx volatile LONG *v49; // eax int v50; // eax volatile LONG *v51; // eax volatile LONG v52; // edx const CHAR *v53; // eax int v54; // ecx volatile LONG *v55; // eax int v56; // eax volatile LONG *v57; // eax volatile LONG v58; // edx const CHAR *v59; // eax int v60; // ecx volatile LONG *v61; // eax int v62; // eax volatile LONG *v63; // eax volatile LONG v64; // edx const CHAR *v65; // eax int v66; // ecx volatile LONG *v67; // eax int v68; // eax volatile LONG *v69; // eax volatile LONG v70; // edx const CHAR *v71; // eax int v72; // ecx volatile LONG *v73; // eax int v74; // eax volatile LONG *v75; // eax int v76; // eax volatile LONG *v77; // edx int v78; // eax volatile LONG *v79; // eax const CHAR *v80; // eax volatile LONG **v81; // eax volatile LONG *v82; // eax int v83; // eax volatile LONG *v84; // eax const CHAR *v85; // eax const CHAR *v86; // eax int v87; // eax volatile LONG *v88; // edx int v89; // eax volatile LONG *v90; // edi volatile LONG v91; // ebx const CHAR *v92; // eax int v93; // [esp+C8h] [ebp-70h] int v94; // [esp+CCh] [ebp-6Ch] int v95; // [esp+D0h] [ebp-68h] char v96; // [esp+D8h] [ebp-60h] int v97; // [esp+DCh] [ebp-5Ch] int v98; // [esp+E0h] [ebp-58h] int v99; // [esp+E4h] [ebp-54h] int v100; // [esp+E8h] [ebp-50h] int v101; // [esp+ECh] [ebp-4Ch] int v102; // [esp+F0h] [ebp-48h] volatile LONG *v103; // [esp+F4h] [ebp-44h] int (__stdcall ***v104)(int); // [esp+F8h] [ebp-40h] int v105; // [esp+FCh] [ebp-3Ch] int v106; // [esp+100h] [ebp-38h] int v107; // [esp+104h] [ebp-34h] volatile LONG *v108; // [esp+108h] [ebp-30h] const void *v109[7]; // [esp+10Ch] [ebp-2Ch] int v110; // [esp+134h] [ebp-4h] v2 = this; v107 = 0; v110 = 0; v103 = (volatile LONG *)sub_43D0D0(4u); if ( !v103 ) { v110 = -1; if ( v107 && !InterlockedDecrement((volatile LONG *)(v107 + 4)) ) { if ( v107 ) (**(void (__thiscall ***)(int, signed int))v107)(v107, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\GuildList.nif"); sub_8F66B0(v5, (int)&v107, v4); if ( !v107 ) return 0; v6 = sub_8FB140(v107, (int)"Frame", (int)&v106, (int)&v105, 0); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, a2, (int)"GuildListWin", 0) ) { v8 = v106; v9 = v105; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v107, (int)"Theme", (int)&v106, (int)&v105, v10); else v11 = sub_8FB140(v107, (int)"Theme", (int)&v106, (int)&v105, 0); sub_8F3EB0(v106 - v8, v105 - v9, (int)v11, (int)v2, 0, 0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"ClsNor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"ClsClick"); sub_8FB650(v108, v107, (int)"ClsOver"); sub_90C8D0(v106 - v8, v105 - v9, (int)v108, (int)v2); v108 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v107 + 72))("HelpLinkNor") ) { v108 = (volatile LONG *)sub_8FB140(v107, (int)"HelpLinkNor", (int)&v106, (int)&v105, v108); sub_8FB650(v108, v107, (int)"HelpLinkClick"); sub_8FB650(v108, v107, (int)"HelpLinkOver"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 13, 0, 0); } v12 = sub_8FB140(v107, (int)"Panel01", (int)&v106, (int)&v105, v103); v13 = sub_8F3EB0(v106 - v8, v105 - v9, (int)v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( sub_8F71E0(v107, (int)"WinTitle", &v106, &v105, &v102, &v101) ) { v14 = sub_421050(7); v15 = sub_8F4A20(v106 - v8, v105 - v9 + 2, v102, v101, v14, (int)v2, 0, 0); v16 = *v15; v108 = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 5); (*(void (__stdcall **)(int *))(*v108 + 468))(&dword_AA8D98); v104 = (int (__stdcall ***)(int))*v108; v17 = sub_40A910(743650721); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v17); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v18 = sub_8FB140(v107, (int)"IconSlot", (int)&v106, (int)&v105, v103); sub_8F3EB0(v106 - v8, v105 - v9, (int)v18, (int)v2, 0, 0); v93 = 0; v94 = 0; v95 = 0; v96 = 0; v97 = 0; v98 = 0; v99 = 0; v100 = 0; LOBYTE(v110) = 1; v19 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 1); *v19 = 1; *((_DWORD *)v19 + 1) = v107; v108 = v19; sub_4019E0(v109, "ColumnBarNor"); LOBYTE(v110) = 2; v108 += 18; sub_40B060((int *)v108, v109); LOBYTE(v110) = 1; sub_636A10(v109); sub_4019E0(v109, "ColumnBarClick"); LOBYTE(v110) = 3; sub_40B060((int *)v108, v109); LOBYTE(v110) = 1; sub_636A10(v109); sub_4019E0(v109, "ColumnBarOver"); LOBYTE(v110) = 4; sub_40B060((int *)v108, v109); LOBYTE(v110) = 1; sub_636A10(v109); v20 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v20; *v20 = 2; sub_4019E0(v109, "Column01"); LOBYTE(v110) = 5; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); *((_DWORD *)v108 + 1) = v107; v21 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v21; *v21 = 2; sub_4019E0(v109, "Column02"); LOBYTE(v110) = 6; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); v22 = v108; *((_DWORD *)v108 + 1) = v107; *((_BYTE *)v22 + 88) = 1; v23 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v23; *v23 = 2; sub_4019E0(v109, "Column03"); LOBYTE(v110) = 7; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); *((_DWORD *)v108 + 1) = v107; v24 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v24; *v24 = 2; sub_4019E0(v109, "Column04"); LOBYTE(v110) = 8; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); *((_DWORD *)v108 + 1) = v107; v25 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v25; *v25 = 2; sub_4019E0(v109, "Column05"); LOBYTE(v110) = 9; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); *((_DWORD *)v108 + 1) = v107; v26 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v93, 2); v108 = v26; *v26 = 2; sub_4019E0(v109, "Column06"); LOBYTE(v110) = 10; sub_40B060((int *)v108 + 18, v109); LOBYTE(v110) = 1; sub_636A10(v109); *((_DWORD *)v108 + 1) = v107; v97 = 6; v98 = 0; sub_466680(&v93, 0); v27 = sub_8FB140(v107, (int)"SubText01", (int)&v106, (int)&v105, v103); v28 = sub_466330(v106 - v8, v105 - v9, (int)v27, *(float *)&v2, (int **)&v93, 0, 0); v2[96] = v28; sub_465130(v28); v29 = sub_8FB140(v107, (int)"SlideBar_SlideBtnMiddle", (int)&v106, (int)&v105, v103); v30 = sub_464310(v107, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v29, 0, v2); v2[97] = (volatile LONG *)v30; *(_DWORD *)(v30 + 312) = 1; *((_DWORD *)v2[97] + 76) = 1; v31 = (int (**)(void))*v2[97]; v32 = (int (__stdcall ***)(int))v2[97]; v108 = (volatile LONG *)v31; v33 = v31[42]; v104 = v32; v34 = v33(); v35 = (*v104)[41](v34); (*((void (__thiscall **)(volatile LONG *, int))v108 + 77))(v2[97], v35 - 18); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title01Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title01Click"); sub_8FB650(v108, v107, (int)"Title01Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 2, 0, 0); v36 = **((_DWORD **)v108 + 9); v37 = *(volatile LONG **)(v36 + 20); v104 = *(int (__stdcall ****)(int))(v36 + 24); v108 = v37; v38 = sub_421050(7); v39 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v38, (int)v2, 0, 0); v40 = *v39; v108 = v39; (*(void (__thiscall **)(volatile LONG *, signed int))(v40 + 488))(v39, 5); v104 = (int (__stdcall ***)(int))*v108; v41 = sub_40A910(649165967); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v41); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title02Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title02Click"); sub_8FB650(v108, v107, (int)"Title02Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 3, 0, 0); v42 = *((_DWORD *)v108 + 9); v43 = *(volatile LONG **)(*(_DWORD *)v42 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v42 + 24); v108 = v43; v44 = sub_421050(7); v45 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v44, (int)v2, 0, 0); v46 = *v45; v108 = v45; (*(void (__thiscall **)(volatile LONG *, signed int))(v46 + 488))(v45, 5); v104 = (int (__stdcall ***)(int))*v108; v47 = sub_40A910(-653596178); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v47); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title03Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title03Click"); sub_8FB650(v108, v107, (int)"Title03Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 4, 0, 0); v48 = *((_DWORD *)v108 + 9); v49 = *(volatile LONG **)(*(_DWORD *)v48 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v48 + 24); v108 = v49; v50 = sub_421050(7); v51 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v50, (int)v2, 0, 0); v52 = *v51; v108 = v51; (*(void (__thiscall **)(volatile LONG *, signed int))(v52 + 488))(v51, 5); v104 = (int (__stdcall ***)(int))*v108; v53 = sub_40A910(-535629012); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v53); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title04Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title04Click"); sub_8FB650(v108, v107, (int)"Title04Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 5, 0, 0); v54 = *((_DWORD *)v108 + 9); v55 = *(volatile LONG **)(*(_DWORD *)v54 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v54 + 24); v108 = v55; v56 = sub_421050(7); v57 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v56, (int)v2, 0, 0); v58 = *v57; v108 = v57; (*(void (__thiscall **)(volatile LONG *, signed int))(v58 + 488))(v57, 5); v104 = (int (__stdcall ***)(int))*v108; v59 = sub_40A910(694369682); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v59); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title05Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title05Click"); sub_8FB650(v108, v107, (int)"Title05Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 6, 0, 0); v60 = *((_DWORD *)v108 + 9); v61 = *(volatile LONG **)(*(_DWORD *)v60 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v60 + 24); v108 = v61; v62 = sub_421050(7); v63 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v62, (int)v2, 0, 0); v64 = *v63; v108 = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(v64 + 488))(v63, 5); v104 = (int (__stdcall ***)(int))*v108; v65 = sub_40C190(-2000035884); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v65); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Title06Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Title06Click"); sub_8FB650(v108, v107, (int)"Title06Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 7, 0, 0); v66 = *((_DWORD *)v108 + 9); v67 = *(volatile LONG **)(*(_DWORD *)v66 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v66 + 24); v108 = v67; v68 = sub_421050(7); v69 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v68, (int)v2, 0, 0); v70 = *v69; v108 = v69; (*(void (__thiscall **)(volatile LONG *, signed int))(v70 + 488))(v69, 5); v104 = (int (__stdcall ***)(int))*v108; v71 = sub_40A910(-1074080219); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v108, v71); (*(void (__stdcall **)(_DWORD))(*v108 + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Count_total", (int)&v106, (int)&v105, v103); sub_8F3EB0(v106 - v8, v105 - v9, (int)v108, (int)v2, 0, 0); v72 = *((_DWORD *)v108 + 9); v73 = *(volatile LONG **)(*(_DWORD *)v72 + 20); v104 = *(int (__stdcall ****)(int))(*(_DWORD *)v72 + 24); v108 = v73; v74 = sub_421050(7); v75 = sub_8F4A20(v106 - v8, v105 - v9 + 1, (int)v108, (int)v104, v74, (int)v2, 0, 0); v2[99] = v75; (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 5); (*(void (__stdcall **)(void *))(*v2[99] + 472))(&unk_9E996F); (*(void (__stdcall **)(_DWORD))(*v2[99] + 240))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"SearchChoiceNor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"SearchChoiceClick"); sub_8FB650(v108, v107, (int)"SearchChoiceOver"); sub_8FE0F0(v106, v105, (int)v108, (int)v2, 8, 0, 0); v76 = **((_DWORD **)v108 + 9); v77 = *(volatile LONG **)(v76 + 20); v104 = *(int (__stdcall ****)(int))(v76 + 24); v108 = v77; v78 = sub_421050(0); v79 = sub_8F4A20(v106, v105 + 1, (int)v108, (int)v104, v78, (int)v2, 0, 0); v2[100] = v79; (*(void (__thiscall **)(volatile LONG *, signed int))(*v79 + 488))(v79, 5); v104 = (int (__stdcall ***)(int))*v2[100]; v80 = sub_40A910(-653596178); ((void (__thiscall *)(volatile LONG *, const CHAR *))v104[118])(v2[100], v80); (*(void (__stdcall **)(_DWORD))(*v2[100] + 240))(0); v81 = sub_8FB140(v107, (int)"Search_Input", (int)&v106, (int)&v105, v103); sub_8F3EB0(v106, v105, (int)v81, (int)v2, 0, 0); v82 = sub_45A900(v106, v105 + 2, v102, v101, (int)v2, 1342177280, 16, 1, 1, 0, 1); sub_56FF80(v2 + 102, (int)v82); sub_459B60(v2[102], 1); v108 = (volatile LONG *)sub_8FB140(v107, (int)"SearchNor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"SearchClick"); sub_8FB650(v108, v107, (int)"SearchOver"); sub_8FE0F0(v106, v105, (int)v108, (int)v2, 9, 0, 0); v83 = sub_43D0D0(1u); v84 = sub_58E5D0(v83, 4, 4, 0); v2[98] = v84; (**((void (__stdcall ***)(int))v84 + 58))((int)(v2 + 58)); sub_58DFD0(v2[98]); v85 = sub_40A910(-653596178); v108 = sub_58E290(v85, 0, 0, 0, 0, 0, 0); sub_58D580((void **)v108, (void *)0x4A, 0); sub_58E080(v2[98], v8, (int)v108); v86 = sub_40A910(-535629012); v108 = sub_58E290(v86, 0, 0, 0, 0, 0, 0); sub_58D580((void **)v108, (void *)0x4B, 0); sub_58E080(v2[98], v8, (int)v108); sub_58D930(v2[98], 0); (*(void (__stdcall **)(_DWORD))(*v2[98] + 256))(0); v108 = (volatile LONG *)sub_8FB140(v107, (int)"Btn01Nor", (int)&v106, (int)&v105, v103); sub_8FB650(v108, v107, (int)"Btn01Click"); sub_8FB650(v108, v107, (int)"Btn01Over"); sub_8FE0F0(v106 - v8, v105 - v9, (int)v108, (int)v2, 10, 0, 0); v87 = **((_DWORD **)v108 + 9); v88 = *(volatile LONG **)(v87 + 20); v104 = *(int (__stdcall ****)(int))(v87 + 24); v103 = v88; v89 = sub_421050(7); v90 = sub_8F4A20(v106 - v8, v105 - v9, (int)v103, (int)v104, v89, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v90 + 488))(v90, 5); v91 = *v90; v92 = sub_40A910(1250851466); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v91 + 472))(v90, v92); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v90 + 240))(v90, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v110) = 0; sub_40AE10((void **)&v93); v110 = -1; sub_410C00(&v107); result = 1; } else { v110 = -1; sub_410C00(&v107); result = 0; } } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v107; v110 = -1; if ( v107 && !InterlockedDecrement((volatile LONG *)(v107 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (005F6140) -------------------------------------------------------- void *__thiscall sub_5F6140(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildTournamentBaseWin::`vftable'; *((_DWORD *)this + 58) = &GuildTournamentBaseWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9E9E20: using guessed type void *GuildTournamentBaseWin::`vftable'; // 9E9E3C: using guessed type void *GuildTournamentBaseWin::`vftable'; //----- (005F6180) -------------------------------------------------------- void ***sub_5F6180() { return &bool (__cdecl *)(GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &) `RTTI Type Descriptor'; } // AB1E40: using guessed type void **bool (__cdecl *)(GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &) `RTTI Type Descriptor'; //----- (005F6190) -------------------------------------------------------- void *__thiscall sub_5F6190(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base2::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9EA060: using guessed type void *std::tr1::_Impl_base2::`vftable'; //----- (005F61C0) -------------------------------------------------------- int __thiscall sub_5F61C0(int (__cdecl **this)(_DWORD, _DWORD), int a2, int a3) { return this[1](a2, a3); } //----- (005F61E0) -------------------------------------------------------- char *__thiscall sub_5F61E0(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(8u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; *((_DWORD *)result + 1) = v3[1]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9EA07C: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005F6290) -------------------------------------------------------- bool __cdecl sub_5F6290(int a1, int a2) { unsigned __int8 *v2; // eax v2 = (unsigned __int8 *)(a1 + 28); if ( *(_DWORD *)(a1 + 48) >= 0x10u ) v2 = *(unsigned __int8 **)v2; return sub_40C2F0((unsigned __int8 *)(a2 + 28), 0, *(_DWORD *)(a2 + 44), v2, *(_DWORD *)(a1 + 44)) < 0; } //----- (005F62C0) -------------------------------------------------------- _DWORD *__thiscall sub_5F62C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; v3 = this[4]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)v2); v2[4] = 0; } if ( a2 ) { *v2 = &std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; v2[1] = a2; v2[4] = v2; } else { v2[4] = 0; } return v2; } // 9EA07C: using guessed type void *std::tr1::_Impl_no_alloc2,bool,GTRequestListWin::GuildInfo const &,GTRequestListWin::GuildInfo const &>::`vftable'; //----- (005F6310) -------------------------------------------------------- int __thiscall sub_5F6310(int this, int a2) { int v2; // esi int v3; // ecx v2 = this; *(_DWORD *)(this + 20) = 15; *(_DWORD *)(this + 16) = 0; *(_BYTE *)this = 0; sub_4017F0((const void **)this, (const void **)a2, 0, (void *)0xFFFFFFFF); v3 = v2 + 28; *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)(v2 + 28), (const void **)(a2 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v2 + 56) = *(_DWORD *)(a2 + 56); *(_DWORD *)(v2 + 60) = *(_DWORD *)(a2 + 60); *(_DWORD *)(v2 + 64) = *(_DWORD *)(a2 + 64); return v2; } //----- (005F63B0) -------------------------------------------------------- void __cdecl sub_5F63B0(int a1, int a2) { if ( *(_DWORD *)(a2 + 48) >= 0x10u ) operator delete(*(void **)(a2 + 28)); *(_DWORD *)(a2 + 48) = 15; *(_DWORD *)(a2 + 44) = 0; *(_BYTE *)(a2 + 28) = 0; if ( *(_DWORD *)(a2 + 20) >= 0x10u ) operator delete(*(void **)a2); *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; } //----- (005F6400) -------------------------------------------------------- void __cdecl sub_5F6400(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // esi if ( a1 != a2 ) { v2 = a1 + 12; do { if ( *v2 >= 0x10u ) operator delete((void *)*(v2 - 5)); *v2 = 15; *(v2 - 1) = 0; *((_BYTE *)v2 - 20) = 0; if ( *(v2 - 7) >= 0x10u ) operator delete((void *)*(v2 - 12)); *(v2 - 7) = 15; *(v2 - 8) = 0; *((_BYTE *)v2 - 48) = 0; v2 += 17; } while ( v2 - 12 != a2 ); } } //----- (005F6460) -------------------------------------------------------- int __cdecl sub_5F6460(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // edi int i; // ebx int v7; // esi int v8; // edi int v9; // esi int result; // eax v5 = a2; for ( i = (a2 - 1) / 2; a3 < v5; i = (i - 1) / 2 ) { v7 = a1 + 68 * i; if ( !a5(a1 + 68 * i, a4) ) break; v8 = a1 + 68 * v5; sub_4017F0((const void **)v8, (const void **)v7, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v8 + 28), (const void **)(v7 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v8 + 56) = *(_DWORD *)(v7 + 56); *(_DWORD *)(v8 + 60) = *(_DWORD *)(v7 + 60); *(_DWORD *)(v8 + 64) = *(_DWORD *)(v7 + 64); v5 = i; } v9 = a1 + 68 * v5; sub_4017F0((const void **)v9, (const void **)a4, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v9 + 28), (const void **)(a4 + 28), 0, (void *)0xFFFFFFFF); result = *(_DWORD *)(a4 + 56); *(_DWORD *)(v9 + 56) = result; *(_DWORD *)(v9 + 60) = *(_DWORD *)(a4 + 60); *(_DWORD *)(v9 + 64) = *(_DWORD *)(a4 + 64); return result; } //----- (005F6530) -------------------------------------------------------- void __cdecl sub_5F6530(int a1, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { std::tr1 *v8; // [esp+0h] [ebp-1Ch] if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_70A990(a2, a1); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a3, a2) ) sub_70A990(a3, a2); if ( !a8 ) std::tr1::_Xfunc(v8); if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)a8 + 4))(a2, a1) ) sub_70A990(a2, a1); if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != (_DWORD)&a4); } //----- (005F6610) -------------------------------------------------------- int __cdecl sub_5F6610(int a1, int a2, int a3, int a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // ebx int v6; // edi int v7; // esi bool v8; // zf int v9; // edi int v10; // ebx int v11; // esi int v12; // ebx v5 = a2; v6 = a3; v7 = 2 * a2 + 2; v8 = v7 == a3; if ( v7 < a3 ) { do { if ( a5(a1 + 68 * v7, a1 + 68 * v7 - 68) ) --v7; v9 = a1 + 68 * v7; v10 = a1 + 68 * v5; sub_4017F0((const void **)v10, (const void **)v9, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v10 + 28), (const void **)(v9 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v10 + 56) = *(_DWORD *)(v9 + 56); *(_DWORD *)(v10 + 60) = *(_DWORD *)(v9 + 60); *(_DWORD *)(v10 + 64) = *(_DWORD *)(v9 + 64); v5 = v7; v7 = 2 * v7 + 2; } while ( v7 < a3 ); v6 = a3; v8 = v7 == a3; } if ( v8 ) { v11 = a1 + 68 * v6 - 68; v12 = a1 + 68 * v5; sub_4017F0((const void **)v12, (const void **)v11, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v12 + 28), (const void **)(v11 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v12 + 56) = *(_DWORD *)(v11 + 56); *(_DWORD *)(v12 + 60) = *(_DWORD *)(v11 + 60); *(_DWORD *)(v12 + 64) = *(_DWORD *)(v11 + 64); v5 = v6 - 1; } return sub_5F6460(a1, v5, a2, a4, a5); } //----- (005F6710) -------------------------------------------------------- #error "5F68DA: positive sp value has been found (funcsize=193)" //----- (005F68E0) -------------------------------------------------------- void __cdecl sub_5F68E0(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int v7; // edi int *v8; // esi int v9; // ecx int v10; // edx int (__stdcall **v11)(char *); // edx int v12; // eax char v13; // [esp-18h] [ebp-88h] int v14; // [esp-14h] [ebp-84h] int v15; // [esp-10h] [ebp-80h] int v16; // [esp-Ch] [ebp-7Ch] char *v17; // [esp-8h] [ebp-78h] int v18; // [esp+10h] [ebp-60h] int v19; // [esp+14h] [ebp-5Ch] char *v20; // [esp+18h] [ebp-58h] void *v21; // [esp+1Ch] [ebp-54h] int v22; // [esp+2Ch] [ebp-44h] unsigned int v23; // [esp+30h] [ebp-40h] void *v24; // [esp+38h] [ebp-38h] int v25; // [esp+48h] [ebp-28h] unsigned int v26; // [esp+4Ch] [ebp-24h] int v27; // [esp+54h] [ebp-1Ch] int v28; // [esp+58h] [ebp-18h] int v29; // [esp+5Ch] [ebp-14h] int v30; // [esp+6Ch] [ebp-4h] v18 = a1; v19 = (a2 - a1) / 68; v7 = v19 / 2; v30 = 0; if ( v19 / 2 > 0 ) { v8 = (int *)(a1 + 68 * v7 + 56); do { v8 -= 17; --v7; v23 = 15; v22 = 0; LOBYTE(v21) = 0; sub_4017F0((const void **)&v21, (const void **)v8 - 14, 0, (void *)0xFFFFFFFF); LOBYTE(v30) = 1; v26 = 15; v25 = 0; LOBYTE(v24) = 0; sub_4017F0((const void **)&v24, (const void **)v8 - 7, 0, (void *)0xFFFFFFFF); v9 = v8[1]; v10 = v8[2]; v27 = *v8; v28 = v9; v29 = v10; LOBYTE(v30) = 2; v20 = &v13; if ( a7 ) { v11 = *(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v12 = (*v11)(&v13); else v12 = (*v11)(0); *((_DWORD *)v20 + 4) = v12; } else { v17 = 0; } sub_52B080(v18, v7, v19, (int)&v21, v13, v14, v15, v16, v17); LOBYTE(v30) = 0; if ( v26 >= 0x10 ) operator delete(v24); v26 = 15; v25 = 0; LOBYTE(v24) = 0; if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; } while ( v7 > 0 ); } v30 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005F6A70) -------------------------------------------------------- void __cdecl sub_5F6A70(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // eax int v5; // eax int v6; // esi int v7; // eax int v8; // esi int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] int v11; // [esp+1Ch] [ebp+8h] int v12; // [esp+1Ch] [ebp+8h] v4 = (a3 - a1) / 68; if ( v4 <= 40 ) { if ( a4(a2, a1) ) sub_70A990(a2, a1); if ( a4(a3, a2) ) sub_70A990(a3, a2); if ( a4(a2, a1) ) sub_70A990(a2, a1); } else { v5 = (v4 + 1) / 8; v6 = 68 * v5; v9 = 136 * v5; v10 = 68 * v5 + a1; if ( a4(v10, a1) ) sub_70A990(v10, a1); if ( a4(a1 + v9, v10) ) sub_70A990(a1 + v9, v10); if ( a4(v10, a1) ) sub_70A990(v10, a1); v11 = a2 - v6; if ( a4(a2, a2 - v6) ) sub_70A990(a2, v11); if ( a4(v6 + a2, a2) ) sub_70A990(v6 + a2, a2); if ( a4(a2, v11) ) sub_70A990(a2, v11); v7 = a3 - v6; v8 = a3 - v9; v12 = v7; if ( a4(v7, a3 - v9) ) sub_70A990(v12, v8); if ( a4(a3, v12) ) sub_70A990(a3, v12); if ( a4(v12, v8) ) sub_70A990(v12, v8); if ( a4(a2, v10) ) sub_70A990(a2, v10); if ( a4(v12, a2) ) sub_70A990(v12, a2); if ( a4(a2, v10) ) sub_70A990(a2, v10); } } //----- (005F6C80) -------------------------------------------------------- void __cdecl sub_5F6C80(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // edi int *v4; // esi int v5; // eax int v6; // ecx int v7; // [esp+18h] [ebp-58h] void *v8; // [esp+1Ch] [ebp-54h] int v9; // [esp+2Ch] [ebp-44h] unsigned int v10; // [esp+30h] [ebp-40h] void *v11; // [esp+38h] [ebp-38h] int v12; // [esp+48h] [ebp-28h] unsigned int v13; // [esp+4Ch] [ebp-24h] int v14; // [esp+54h] [ebp-1Ch] int v15; // [esp+58h] [ebp-18h] int v16; // [esp+5Ch] [ebp-14h] int v17; // [esp+6Ch] [ebp-4h] v7 = (a2 - a1) / 68; v3 = v7 / 2; if ( v7 / 2 > 0 ) { v4 = (int *)(a1 + 68 * v3 + 56); do { v4 -= 17; --v3; v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4017F0((const void **)&v8, (const void **)v4 - 14, 0, (void *)0xFFFFFFFF); v17 = 0; v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4017F0((const void **)&v11, (const void **)v4 - 7, 0, (void *)0xFFFFFFFF); v5 = v4[1]; v6 = v4[2]; v14 = *v4; v15 = v5; v16 = v6; v17 = 1; sub_5F6610(a1, v3, v7, (int)&v8, a3); v17 = -1; if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; if ( v10 >= 0x10 ) operator delete(v8); } while ( v3 > 0 ); } } //----- (005F6DC0) -------------------------------------------------------- void __cdecl sub_5F6DC0(int a1, int a2, unsigned __int8 (__cdecl *a3)(void **, int)) { int v3; // esi int i; // ebx int v5; // edi int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int j; // esi int v11; // ecx int v12; // edx void *v13; // [esp+18h] [ebp-54h] int v14; // [esp+28h] [ebp-44h] unsigned int v15; // [esp+2Ch] [ebp-40h] void *v16; // [esp+34h] [ebp-38h] int v17; // [esp+44h] [ebp-28h] unsigned int v18; // [esp+48h] [ebp-24h] int v19; // [esp+50h] [ebp-1Ch] int v20; // [esp+54h] [ebp-18h] int v21; // [esp+58h] [ebp-14h] int v22; // [esp+68h] [ebp-4h] v3 = a1; if ( a1 != a2 ) { for ( i = a1 + 68; i != a2; i += 68 ) { v5 = i; v15 = 15; v14 = 0; LOBYTE(v13) = 0; sub_4017F0((const void **)&v13, (const void **)i, 0, (void *)0xFFFFFFFF); v22 = 0; v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4017F0((const void **)&v16, (const void **)(i + 28), 0, (void *)0xFFFFFFFF); v6 = *(_DWORD *)(i + 60); v7 = *(_DWORD *)(i + 64); v19 = *(_DWORD *)(i + 56); v20 = v6; v21 = v7; v22 = 1; if ( a3(&v13, v3) ) { sub_70ABD0((const void **)v3, (const void **)i, i + 68); sub_4017F0((const void **)v3, (const void **)&v13, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v3 + 28), (const void **)&v16, 0, (void *)0xFFFFFFFF); v8 = v20; v9 = v21; *(_DWORD *)(v3 + 56) = v19; *(_DWORD *)(v3 + 60) = v8; *(_DWORD *)(v3 + 64) = v9; } else { for ( j = i - 68; a3(&v13, j); j -= 68 ) { sub_4017F0((const void **)v5, (const void **)j, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v5 + 28), (const void **)(j + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v5 + 56) = *(_DWORD *)(j + 56); *(_DWORD *)(v5 + 60) = *(_DWORD *)(j + 60); *(_DWORD *)(v5 + 64) = *(_DWORD *)(j + 64); v5 = j; } sub_4017F0((const void **)v5, (const void **)&v13, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v5 + 28), (const void **)&v16, 0, (void *)0xFFFFFFFF); v11 = v20; v12 = v21; v3 = a1; *(_DWORD *)(v5 + 56) = v19; *(_DWORD *)(v5 + 60) = v11; *(_DWORD *)(v5 + 64) = v12; } v22 = -1; if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; if ( v15 >= 0x10 ) operator delete(v13); } } } //----- (005F6FC0) -------------------------------------------------------- void __cdecl sub_5F6FC0(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { _DWORD *v3; // edi unsigned int v4; // edx void *v5; // [esp+14h] [ebp-54h] unsigned int v6; // [esp+28h] [ebp-40h] void *v7; // [esp+30h] [ebp-38h] int v8; // [esp+40h] [ebp-28h] unsigned int v9; // [esp+44h] [ebp-24h] int v10; // [esp+64h] [ebp-4h] v3 = (_DWORD *)(a2 - 68); sub_5F6310((int)&v5, a2 - 68); v10 = 0; sub_4017F0((const void **)(a2 - 68), (const void **)a1, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(a2 - 68 + 28), (const void **)(a1 + 28), 0, (void *)0xFFFFFFFF); v3[14] = *(_DWORD *)(a1 + 56); v3[15] = *(_DWORD *)(a1 + 60); v3[16] = *(_DWORD *)(a1 + 64); v4 = (signed int)((unsigned __int64)(2021161081i64 * (a2 - a1 - 68)) >> 32) >> 5; sub_5F6610(a1, 0, v4 + (v4 >> 31), (int)&v5, a3); if ( v9 >= 0x10 ) operator delete(v7); v9 = 15; v8 = 0; LOBYTE(v7) = 0; if ( v6 >= 0x10 ) operator delete(v5); } //----- (005F70C0) -------------------------------------------------------- unsigned int *__cdecl sub_5F70C0(unsigned int *a1, unsigned int a2, unsigned int a3, char a4, int a5, int a6, int a7, char *a8) { unsigned int v8; // esi int (__stdcall *v9)(char *); // edx int v10; // eax unsigned int v11; // ebx unsigned int v12; // edi char *v13; // eax unsigned int v14; // edi int v15; // eax bool v16; // zf int v17; // ebx int v18; // eax char *v19; // ecx char v21; // [esp-18h] [ebp-3Ch] int v22; // [esp-14h] [ebp-38h] int v23; // [esp-10h] [ebp-34h] int v24; // [esp-Ch] [ebp-30h] int v25; // [esp-8h] [ebp-2Ch] int v26; // [esp-4h] [ebp-28h] std::tr1 *v27; // [esp+0h] [ebp-24h] char *v28; // [esp+10h] [ebp-14h] unsigned int v29; // [esp+14h] [ebp-10h] int v30; // [esp+20h] [ebp-4h] v8 = a2 + 68 * ((signed int)(a3 - a2) / 68 / 2); v30 = 0; v28 = &v21; if ( a8 ) { v9 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v10 = v9(&v21); else v10 = v9(0); v25 = v10; } else { v25 = 0; } sub_5F6710(a2, v8, a3 - 68, v21, v22, v23, v24, v25); v11 = v8 + 68; v29 = v8 + 68; if ( a2 < v8 ) { do { if ( a8 ) { v12 = v8 - 68; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8 - 68, v8) ) break; if ( a8 ) continue; } LABEL_43: std::tr1::_Xfunc(v27); if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v8 - 68) ) break; v8 -= 68; } while ( a2 < v12 ); } if ( v11 < a3 ) { do { if ( a8 ) { if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v11, v8) ) break; if ( a8 ) continue; } goto LABEL_43; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v11) ) break; v11 += 68; } while ( v11 < a3 ); v29 = v11; } v13 = (char *)v8; v14 = v11; v28 = (char *)v8; while ( 2 ) { while ( 2 ) { if ( v14 < a3 ) { while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v8, v14) ) { if ( !a8 ) goto LABEL_43; if ( (*(unsigned __int8 (__stdcall **)(unsigned int, unsigned int))(*(_DWORD *)a8 + 4))(v14, v8) ) { LABEL_28: v13 = v28; break; } v15 = v11; v11 += 68; v29 = v11; sub_70A990(v15, v14); } v14 += 68; if ( v14 >= a3 ) goto LABEL_28; } } v16 = v13 == (char *)a2; if ( (unsigned int)v13 <= a2 ) goto LABEL_38; v17 = (int)(v13 - 68); while ( 1 ) { if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(int, unsigned int))(*(_DWORD *)a8 + 4))(v17, v8) ) break; LABEL_36: v17 -= 68; v28 -= 68; if ( a2 >= (unsigned int)v28 ) goto LABEL_37; } if ( !a8 ) goto LABEL_43; if ( !(*(unsigned __int8 (__stdcall **)(unsigned int, int))(*(_DWORD *)a8 + 4))(v8, v17) ) { v8 -= 68; sub_70A990(v8, v17); goto LABEL_36; } LABEL_37: v13 = v28; v11 = v29; v16 = v28 == (char *)a2; LABEL_38: if ( !v16 ) { v18 = (int)(v13 - 68); v28 = (char *)v18; if ( v14 == a3 ) { v8 -= 68; if ( v18 != v8 ) sub_70A990(v18, v8); v11 -= 68; v29 = v11; sub_70A990(v8, v11); v13 = v28; } else { sub_70A990(v14, v18); v13 = v28; v14 += 68; } continue; } break; } if ( v14 != a3 ) { if ( v11 != v14 ) sub_70A990(v8, v11); v26 = v14; v11 += 68; v25 = v8; v29 = v11; v8 += 68; v14 += 68; sub_70A990(v25, v26); v13 = v28; continue; } break; } v19 = a8; *a1 = v8; a1[1] = v11; v30 = -1; if ( v19 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v19 + 12))(v19 != &a4); return a1; } // 5F6710: using guessed type _DWORD __cdecl sub_5F6710(_DWORD, _DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (005F7360) -------------------------------------------------------- void __cdecl sub_5F7360(int a1, int a2, char a3, int a4, int a5, int a6, char *a7) { int (__stdcall *v7)(char *); // edx int v8; // eax char v9; // [esp-20h] [ebp-3Ch] int v10; // [esp-1Ch] [ebp-38h] int v11; // [esp-18h] [ebp-34h] int v12; // [esp-14h] [ebp-30h] char *v13; // [esp-10h] [ebp-2Ch] int v14; // [esp-8h] [ebp-24h] int v15; // [esp-4h] [ebp-20h] int v16; // [esp+18h] [ebp-4h] v16 = 0; if ( (a2 - a1) / 68 > 1 ) { v15 = 0; v14 = 0; if ( a7 ) { v7 = **(int (__stdcall ***)(char *))a7; if ( a7 == &a3 ) v8 = v7(&v9); else v8 = v7(0); v13 = (char *)v8; } else { v13 = 0; } sub_5F68E0(a1, a2, v9, v10, v11, v12, v13); } v16 = -1; if ( a7 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a7 + 12))(a7 != &a3); } //----- (005F7420) -------------------------------------------------------- unsigned int *__cdecl sub_5F7420(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // eax unsigned int v5; // esi unsigned int v6; // ebx unsigned int v7; // eax unsigned int v8; // edi int v9; // ST08_4 bool v10; // zf int v11; // ebx int v12; // ST0C_4 int v13; // ST08_4 int v14; // eax unsigned int *result; // eax int v16; // [esp+Ch] [ebp-8h] unsigned int v17; // [esp+10h] [ebp-4h] unsigned int i; // [esp+10h] [ebp-4h] v4 = (signed int)(a3 - a2) / 68 / 2; v5 = a2 + 68 * v4; sub_5F6A70(a2, a2 + 68 * v4, a3 - 68, a4); v6 = v5 + 68; v16 = v5 + 68; if ( a2 < v5 ) { do { v17 = v5 - 68; if ( a4(v5 - 68, v5) ) break; if ( a4(v5, v17) ) break; v5 -= 68; } while ( a2 < v17 ); } if ( v6 < a3 ) { do { if ( a4(v6, v5) ) break; if ( a4(v5, v6) ) break; v6 += 68; } while ( v6 < a3 ); v16 = v6; } v7 = v5; v8 = v6; for ( i = v5; ; v7 = i ) { while ( 1 ) { if ( v8 < a3 ) { do { if ( !a4(v5, v8) ) { if ( a4(v8, v5) ) break; v9 = v6; v6 += 68; sub_70A990(v9, v8); } v8 += 68; } while ( v8 < a3 ); v7 = i; v16 = v6; } v10 = v7 == a2; if ( v7 > a2 ) { v11 = v7 - 68; do { if ( !a4(v11, v5) ) { if ( a4(v5, v11) ) break; v5 -= 68; sub_70A990(v5, v11); } v11 -= 68; i -= 68; } while ( a2 < i ); v7 = i; v6 = v16; v10 = i == a2; } if ( v10 ) break; v14 = v7 - 68; i = v14; if ( v8 == a3 ) { v5 -= 68; if ( v14 != v5 ) sub_70A990(v14, v5); v6 -= 68; v16 = v6; sub_70A990(v5, v6); v7 = i; } else { sub_70A990(v8, v14); v7 = i; v8 += 68; } } if ( v8 == a3 ) break; if ( v6 != v8 ) sub_70A990(v5, v6); v12 = v8; v6 += 68; v13 = v5; v16 = v6; v5 += 68; v8 += 68; sub_70A990(v13, v12); } result = a1; *a1 = v5; a1[1] = v6; return result; } //----- (005F75E0) -------------------------------------------------------- void __thiscall sub_5F75E0(void **this) { void **v1; // esi v1 = this; if ( *this ) { sub_5F6400(*this, this[1]); operator delete(*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (005F7630) -------------------------------------------------------- int __cdecl sub_5F7630(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int v3; // esi int v4; // edi int result; // eax v3 = a2; v4 = a2 - a1; result = (a2 - a1) / 68; if ( result > 1 ) { do { sub_5F6FC0(a1, v3, a3); v4 -= 68; result = v4 / 68; v3 -= 68; } while ( v4 / 68 > 1 ); } return result; } //----- (005F7690) -------------------------------------------------------- void *__thiscall sub_5F7690(void *this, char a2) { void *v2; // esi v2 = this; sub_5F3FF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005F76C0) -------------------------------------------------------- void __cdecl sub_5F76C0(int a1, int a2, int a3, char a4, int a5, int a6, int a7, char *a8) { int v8; // ebx int v9; // eax int v10; // esi int (__stdcall *v11)(char *); // eax int v12; // eax int (__thiscall *v13)(char *, char *); // edx int v14; // eax int (__thiscall *v15)(char *, char *); // eax int v16; // eax int (__stdcall *v17)(char *); // edx int v18; // eax int (__stdcall *v19)(char *); // eax int v20; // eax int (__stdcall *v21)(char *); // edx int v22; // eax char v23; // [esp-18h] [ebp-3Ch] int v24; // [esp-14h] [ebp-38h] int v25; // [esp-10h] [ebp-34h] int v26; // [esp-Ch] [ebp-30h] char *v27; // [esp-8h] [ebp-2Ch] int v28; // [esp+10h] [ebp-14h] int v29; // [esp+14h] [ebp-10h] int v30; // [esp+20h] [ebp-4h] v8 = a2; v9 = (a2 - a1) / 68; v30 = 0; if ( v9 <= 32 ) goto LABEL_26; v10 = a3; while ( v10 > 0 ) { if ( a8 ) { v11 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v12 = v11(&v23); else v12 = v11(0); v27 = (char *)v12; } else { v27 = 0; } sub_5F70C0((unsigned int *)&v28, a1, v8, v23, v24, v25, v26, v27); v10 = v10 / 2 / 2 + v10 / 2; if ( (v28 - a1) / 68 >= (v8 - v29) / 68 ) { if ( a8 ) { v15 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v16 = v15(a8, &v23); else v16 = v15(a8, 0); v27 = (char *)v16; } else { v27 = 0; } sub_5F76C0(v29, v8, v10, v23, v24, v25, v26, v27); v8 = v28; } else { if ( a8 ) { v13 = **(int (__thiscall ***)(char *, char *))a8; if ( a8 == &a4 ) v14 = v13(a8, &v23); else v14 = v13(a8, 0); v27 = (char *)v14; } else { v27 = 0; } sub_5F76C0(a1, v28, v10, v23, v24, v25, v26, v27); a1 = v29; } v9 = (v8 - a1) / 68; if ( v9 <= 32 ) goto LABEL_26; } if ( v9 <= 32 ) { LABEL_26: if ( v9 > 1 ) { if ( a8 ) { v21 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v22 = v21(&v23); else v22 = v21(0); v27 = (char *)v22; } else { v27 = 0; } sub_52B650(a1, v8, v23, v24, v25, v26, v27); } } else { if ( a8 ) { v17 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v18 = v17(&v23); else v18 = v17(0); v27 = (char *)v18; } else { v27 = 0; } sub_5F7360(a1, v8, v23, v24, v25, v26, v27); if ( a8 ) { v19 = **(int (__stdcall ***)(char *))a8; if ( a8 == &a4 ) v20 = v19(&v23); else v20 = v19(0); sub_52B9C0(a1, v8, v23, v24, v25, v26, v20); } else { sub_52B9C0(a1, v8, v23, v24, v25, v26, 0); } } v30 = -1; if ( a8 ) (*(void (__stdcall **)(bool))(*(_DWORD *)a8 + 12))(a8 != &a4); } // 52B9C0: using guessed type _DWORD __cdecl sub_52B9C0(_DWORD, _DWORD, char, _DWORD, _DWORD, _DWORD, _DWORD); //----- (005F7920) -------------------------------------------------------- void __cdecl sub_5F7920(int a1, int a2, int a3, unsigned __int8 (__cdecl *a4)(int, int)) { int v4; // ebx int v5; // edi int v6; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; v6 = (a2 - a1) / 68; if ( v6 <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_5F7420((unsigned int *)&v8, v4, v5, a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (v8 - v4) / 68 >= (v5 - v9) / 68 ) { sub_5F7920(v9, v5, v7, a4); v5 = v8; } else { sub_5F7920(v4, v8, v7, a4); v4 = v9; } v6 = (v5 - v4) / 68; if ( v6 <= 32 ) goto LABEL_8; } if ( v6 <= 32 ) { LABEL_8: if ( v6 > 1 ) sub_5F6DC0(v4, v5, (unsigned __int8 (__cdecl *)(void **, int))a4); } else { if ( (v5 - v4) / 68 > 1 ) sub_5F6C80(v4, v5, a4); sub_5F7630(v4, v5, a4); } } //----- (005F7A60) -------------------------------------------------------- #error "5F7B0B: positive sp value has been found (funcsize=66)" //----- (005F7B10) -------------------------------------------------------- _DWORD *__thiscall sub_5F7B10(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildTournamentScheduleWin::`vftable'; v1[58] = &GuildTournamentScheduleWin::`vftable'; v1[134] = 0; v1[135] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[139] = 0; v1[140] = 0; v1[141] = 0; v1[142] = 0; v1[143] = 0; v1[144] = 0; v1[145] = 0; v1[146] = 0; v1[147] = 0; v1[148] = 0; v1[149] = 0; v1[150] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; v1[154] = 0; v1[155] = 0; v1[156] = 0; v1[157] = 0; v1[158] = 0; v1[159] = 0; v1[160] = 0; v1[161] = 0; v1[162] = 0; v1[163] = 0; v1[164] = 0; v1[201] = -1; v1[202] = -1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EA498: using guessed type void *GuildTournamentScheduleWin::`vftable'; // 9EA4B4: using guessed type void *GuildTournamentScheduleWin::`vftable'; //----- (005F7C40) -------------------------------------------------------- char __thiscall sub_5F7C40(_DWORD *this, int a2, int a3) { this[202] = a2; HIBYTE(a2) = a2; return sub_6F3D10(&off_AB7F2C, 29, 215, (char *)&a2 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005F7C70) -------------------------------------------------------- int __thiscall sub_5F7C70(char *this) { char *v1; // ebx int v2; // esi signed int v3; // edi v1 = this; v2 = (int)(this + 660); v3 = 31; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 472))(&unk_9EA3C5); (*(void (__stdcall **)(int *))(**(_DWORD **)v2 + 468))(&dword_AA8C68); v2 += 4; --v3; } while ( v3 ); (*(void (__stdcall **)(void *))(**((_DWORD **)v1 + 196) + 472))(&unk_9EA3C6); return (*(int (__stdcall **)(void *))(**((_DWORD **)v1 + 197) + 472))(&unk_9EA3C7); } // AA8C68: using guessed type int dword_AA8C68; //----- (005F7CE0) -------------------------------------------------------- char __thiscall sub_5F7CE0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // ebx volatile LONG *v14; // edx int v15; // ebx int v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // ecx int v19; // ebx int v20; // eax volatile LONG *v21; // eax volatile LONG *v22; // ecx int v23; // ebx int v24; // eax volatile LONG *v25; // eax int v26; // ebx const CHAR *v27; // eax int v28; // ebx char *v29; // eax int v30; // ST54_4 char *v31; // eax char *v32; // eax char *v33; // eax int v34; // ST54_4 char *v35; // eax int v36; // eax volatile LONG *v37; // ST3C_4 int v38; // ST54_4 volatile LONG *v39; // eax volatile LONG *v40; // eax char *v41; // eax int v42; // ST54_4 char *v43; // eax int v44; // ST54_4 char *v45; // eax int v46; // eax volatile LONG *v47; // ST3C_4 int v48; // ST54_4 volatile LONG *v49; // eax volatile LONG *v50; // eax char *v51; // eax int v52; // ST54_4 char *v53; // eax int v54; // ST54_4 char *v55; // eax int v56; // eax volatile LONG *v57; // ST3C_4 int v58; // ST54_4 volatile LONG *v59; // eax volatile LONG *v60; // eax char *v61; // eax int v62; // ST54_4 char *v63; // eax int v64; // ST54_4 char *v65; // eax int v66; // eax volatile LONG *v67; // ST3C_4 int v68; // ST54_4 volatile LONG *v69; // eax volatile LONG *v70; // eax int v71; // eax volatile LONG *v72; // ST3C_4 int v73; // ST54_4 volatile LONG *v74; // eax volatile LONG **v75; // ebx int v76; // eax int v77; // edi int v78; // eax volatile LONG *v79; // edx int v80; // edi int v81; // eax volatile LONG *v82; // ecx int v83; // edi int v84; // ebx int v85; // eax volatile LONG *v86; // eax volatile LONG *v87; // ebx volatile LONG v88; // edi const CHAR *v89; // eax signed int v90; // ecx signed int v91; // eax signed int *v92; // esi void (__thiscall ***v93)(_DWORD, signed int); // esi int v94; // [esp+4Ch] [ebp-2Ch] signed int v95; // [esp+50h] [ebp-28h] signed int v96; // [esp+54h] [ebp-24h] signed int v97; // [esp+58h] [ebp-20h] int v98; // [esp+5Ch] [ebp-1Ch] int v99; // [esp+60h] [ebp-18h] int v100; // [esp+64h] [ebp-14h] int v101; // [esp+68h] [ebp-10h] int v102; // [esp+74h] [ebp-4h] int v103; // [esp+80h] [ebp+8h] int v104; // [esp+80h] [ebp+8h] int v105; // [esp+80h] [ebp+8h] int v106; // [esp+80h] [ebp+8h] volatile LONG **v107; // [esp+80h] [ebp+8h] int v108; // [esp+80h] [ebp+8h] int v109; // [esp+80h] [ebp+8h] int v110; // [esp+80h] [ebp+8h] volatile LONG **v111; // [esp+80h] [ebp+8h] int v112; // [esp+80h] [ebp+8h] int v113; // [esp+80h] [ebp+8h] volatile LONG **v114; // [esp+80h] [ebp+8h] int v115; // [esp+80h] [ebp+8h] int v116; // [esp+80h] [ebp+8h] volatile LONG **v117; // [esp+80h] [ebp+8h] int v118; // [esp+80h] [ebp+8h] volatile LONG **v119; // [esp+80h] [ebp+8h] int v120; // [esp+80h] [ebp+8h] int v121; // [esp+80h] [ebp+8h] int v122; // [esp+80h] [ebp+8h] v2 = (int)this; v99 = 0; v3 = dword_BA6BA0; v102 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTornament.nif"); sub_8F66B0(v4, (int)&v99, v3); if ( !v99 ) return 0; v5 = sub_8FB140(v99, (int)"Panel01", (int)&v100, (int)&v101, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildTournamentScheduleWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v99; v102 = -1; if ( v99 && !InterlockedDecrement((volatile LONG *)(v99 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v101; v9 = v100; v98 = v101; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v99, (int)"Theme", (int)&v100, (int)&v101, v10); else v11 = sub_8FB140(v99, (int)"Theme", (int)&v100, (int)&v101, 0); sub_8F3EB0(v100 - v9, v101 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v99, (int)"Panel02", (int)&v100, (int)&v101, 0); sub_8F3EB0(v100 - v9, v101, (int)v12, v2, 0, 0); v13 = sub_8FB140(v99, (int)"ClsNor", (int)&v100, (int)&v101, 0); sub_8FB650(v13, v99, (int)"ClsClick"); sub_8FB650(v13, v99, (int)"ClsOver"); sub_90C8D0(v100 - v9, v101 - v98, (int)v13, v2); v14 = sub_8FB140(v99, (int)"Text01", (int)&v100, (int)&v101, 0)[9]; v15 = *(_DWORD *)(*v14 + 24); v103 = *(_DWORD *)(*v14 + 20); v16 = sub_421050(0); v17 = sub_8F4A20(v100 - v9, v101, v103, v15, v16, v2, 0, 0); *(_DWORD *)(v2 + 784) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 784) + 472))(&unk_9EA30F); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 784) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 784) + 240))(0); v18 = sub_8FB140(v99, (int)"Text02", (int)&v100, (int)&v101, 0)[9]; v19 = *(_DWORD *)(*v18 + 24); v104 = *(_DWORD *)(*v18 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v100 - v9, v101, v104, v19, v20, v2, 0, 0); *(_DWORD *)(v2 + 788) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 788) + 472))(&unk_9EA316); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 788) + 468))(&dword_AA8C68); v97 = 1; v96 = 1; v95 = 1; v22 = sub_8FB140(v99, (int)"Text03", (int)&v100, (int)&v101, 0)[9]; v23 = *(_DWORD *)(*v22 + 24); v105 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(0); v25 = sub_8F4A20(v100 - v9, v101, v105, v23, v24, v2, 0, 0); *(_DWORD *)(v2 + 812) = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v26 = **(_DWORD **)(v2 + 812); v27 = sub_40A910(-1795760430); (*(void (__thiscall **)(_DWORD, const CHAR *))(v26 + 472))(*(_DWORD *)(v2 + 812), v27); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 812) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 812) + 240))(0); v28 = 0; do { if ( v28 < 16 ) { if ( v28 >= 9 ) { v108 = v99; v33 = sub_7549E0("Step1_%dNor", v28 + 1); v107 = sub_8FB140(v108, (int)v33, (int)&v100, (int)&v101, 0); v34 = v99; v35 = sub_7549E0("Step1_%dClick", v28 + 1); sub_8FB650(v107, v34, (int)v35); v94 = v99; v32 = sub_7549E0("Step1_%dOver", v28 + 1); } else { v106 = v99; v29 = sub_7549E0("Step1_0%dNor", v28 + 1); v107 = sub_8FB140(v106, (int)v29, (int)&v100, (int)&v101, 0); v30 = v99; v31 = sub_7549E0("Step1_0%dClick", v28 + 1); sub_8FB650(v107, v30, (int)v31); v94 = v99; v32 = sub_7549E0("Step1_0%dOver", v28 + 1); } sub_8FB650(v107, v94, (int)v32); sub_8FE0F0(v100 - v9, v101 - v98, (int)v107, v2, v28, 0, 0); v36 = *v107[9]; v37 = (volatile LONG *)dword_AD01E8; v109 = *(_DWORD *)(v36 + 24); v38 = *(_DWORD *)(v36 + 20); v39 = (volatile LONG *)sub_421050(0); v40 = sub_90AEF0(v100 - v9, v101 + 2, v38, v109, v39, (_DWORD *)v2, 0, 0, 0, 1, v37, (volatile LONG *)0xC); *(_DWORD *)(v2 + 4 * v28 + 660) = v40; goto LABEL_27; } if ( v28 < 24 ) { v110 = v99; v41 = sub_7549E0("Step2_0%dNor", v97); v111 = sub_8FB140(v110, (int)v41, (int)&v100, (int)&v101, 0); v42 = v99; v43 = sub_7549E0("Step2_0%dClick", v97); sub_8FB650(v111, v42, (int)v43); v44 = v99; v45 = sub_7549E0("Step2_0%dOver", v97); sub_8FB650(v111, v44, (int)v45); sub_8FE0F0(v100 - v9, v101 - v98, (int)v111, v2, v28, 0, 0); v46 = *v111[9]; v47 = (volatile LONG *)dword_AD01E8; v112 = *(_DWORD *)(v46 + 24); v48 = *(_DWORD *)(v46 + 20); v49 = (volatile LONG *)sub_421050(0); v50 = sub_90AEF0(v100 - v9, v101 + 2, v48, v112, v49, (_DWORD *)v2, 0, 0, 0, 1, v47, (volatile LONG *)0xC); *(_DWORD *)(v2 + 4 * v28 + 660) = v50; (*(void (__thiscall **)(volatile LONG *, signed int))(*v50 + 488))(v50, 5); ++v97; goto LABEL_28; } if ( v28 < 28 ) { v113 = v99; v51 = sub_7549E0("Step3_0%dNor", v96); v114 = sub_8FB140(v113, (int)v51, (int)&v100, (int)&v101, 0); v52 = v99; v53 = sub_7549E0("Step3_0%dClick", v96); sub_8FB650(v114, v52, (int)v53); v54 = v99; v55 = sub_7549E0("Step3_0%dOver", v96); sub_8FB650(v114, v54, (int)v55); sub_8FE0F0(v100 - v9, v101 - v98, (int)v114, v2, v28, 0, 0); v56 = *v114[9]; v57 = (volatile LONG *)dword_AD01E8; v115 = *(_DWORD *)(v56 + 24); v58 = *(_DWORD *)(v56 + 20); v59 = (volatile LONG *)sub_421050(0); v60 = sub_90AEF0(v100 - v9, v101 + 2, v58, v115, v59, (_DWORD *)v2, 0, 0, 0, 1, v57, (volatile LONG *)0xC); *(_DWORD *)(v2 + 4 * v28 + 660) = v60; (*(void (__thiscall **)(volatile LONG *, signed int))(*v60 + 488))(v60, 5); ++v96; goto LABEL_28; } if ( v28 < 30 ) { v116 = v99; v61 = sub_7549E0("Step4_0%dNor", v95); v117 = sub_8FB140(v116, (int)v61, (int)&v100, (int)&v101, 0); v62 = v99; v63 = sub_7549E0("Step4_0%dClick", v95); sub_8FB650(v117, v62, (int)v63); v64 = v99; v65 = sub_7549E0("Step4_0%dOver", v95); sub_8FB650(v117, v64, (int)v65); sub_8FE0F0(v100 - v9, v101 - v98, (int)v117, v2, v28, 0, 0); v66 = *v117[9]; v67 = (volatile LONG *)dword_AD01E8; v118 = *(_DWORD *)(v66 + 24); v68 = *(_DWORD *)(v66 + 20); v69 = (volatile LONG *)sub_421050(0); v70 = sub_90AEF0(v100 - v9, v101 + 2, v68, v118, v69, (_DWORD *)v2, 0, 0, 0, 1, v67, (volatile LONG *)0xC); *(_DWORD *)(v2 + 4 * v28 + 660) = v70; (*(void (__thiscall **)(volatile LONG *, signed int))(*v70 + 488))(v70, 5); ++v95; goto LABEL_28; } if ( v28 == 30 ) { v119 = sub_8FB140(v99, (int)"Step5_01Nor", (int)&v100, (int)&v101, 0); sub_8FB650(v119, v99, (int)"Step5_01Click"); sub_8FB650(v119, v99, (int)"Step5_01Over"); sub_8FE0F0(v100 - v9, v101 - v98, (int)v119, v2, 30, 0, 0); v71 = *v119[9]; v72 = (volatile LONG *)dword_AD01E8; v120 = *(_DWORD *)(v71 + 24); v73 = *(_DWORD *)(v71 + 20); v74 = (volatile LONG *)sub_421050(0); v40 = sub_90AEF0(v100 - v9, v101 + 2, v73, v120, v74, (_DWORD *)v2, 0, 0, 0, 1, v72, (volatile LONG *)0xC); *(_DWORD *)(v2 + 780) = v40; LABEL_27: (*(void (__thiscall **)(volatile LONG *, signed int))(*v40 + 488))(v40, 5); } LABEL_28: ++v28; } while ( v28 < 31 ); v75 = sub_8FB140(v99, (int)"Panel03", (int)&v100, (int)&v101, 0); sub_8F3EB0(v100 - v9, v101 - v98, (int)v75, v2, 0, 0); v76 = *v75[9]; v77 = *(_DWORD *)(v76 + 20); v121 = *(_DWORD *)(v76 + 24); v78 = sub_421050(0); *(_DWORD *)(v2 + 792) = sub_8F4A20(v100 + 6, v101 + 8, v121, v77, v78, v2, 0, 0); v79 = v75[9]; v80 = *(_DWORD *)(*v79 + 20); v122 = *(_DWORD *)(*v79 + 24); v81 = sub_421050(0); *(_DWORD *)(v2 + 796) = sub_8F4A20(v100 + 6, v101 + 28, v122, v80, v81, v2, 0, 0); v82 = v75[9]; v83 = *(_DWORD *)(*v82 + 20); v84 = *(_DWORD *)(*v82 + 24); v85 = sub_421050(0); v86 = sub_8F4A20(v100 + 6, v101 + 58, v84, v83, v85, v2, 0, 0); v87 = v86; v88 = *v86; v89 = sub_40C190(697724533); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v88 + 472))(v87, v89); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v90 = 0; v91 = 1; v92 = (signed int *)(v2 + 352); do { if ( v90 >= 8 ) { if ( v90 >= 12 ) { if ( v90 >= 15 ) { *(v92 - 1) = v91 - 3; *v92 = v91 - 2; *(v92 - 2) = 2; } else { *(v92 - 1) = v91 - 1; *v92 = v91; *(v92 - 2) = 4; } } else { *(v92 - 1) = v91 - 1; *v92 = v91; *(v92 - 2) = 8; } } else { *(v92 - 1) = v91 - 1; *v92 = v91; *(v92 - 2) = 16; } v91 += 2; ++v90; v92 += 3; } while ( v91 < 33 ); v93 = (void (__thiscall ***)(_DWORD, signed int))v99; v102 = -1; if ( v99 && !InterlockedDecrement((volatile LONG *)(v99 + 4)) && v93 ) (**v93)(v93, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (005F87A0) -------------------------------------------------------- char __thiscall sub_5F87A0(_DWORD *this, _BYTE *a2) { char result; // al char v3; // dl char v4; // dl signed int v5; // esi char v6; // dl char v7; // dl char v8; // dl char v9; // dl char v10; // dl char v11; // dl char v12; // dl signed int v13; // esi char v14; // dl char v15; // dl char v16; // dl char v17; // dl char v18; // dl char v19; // dl char v20; // dl signed int v21; // esi char v22; // dl char v23; // dl char v24; // dl char v25; // dl char v26; // dl char v27; // dl char v28; // dl signed int v29; // esi char v30; // dl char v31; // dl int *v32; // esi int v33; // edi const CHAR *v34; // eax char v35; // dl signed int v36; // esi int *v37; // esi int v38; // edi const CHAR *v39; // eax int v40; // [esp-4h] [ebp-Ch] int v41; // [esp-4h] [ebp-Ch] result = (char)a2; v3 = a2[362]; if ( v3 == 4 ) { v4 = a2[363]; v5 = 0; if ( v4 != 4 && v4 ) v5 = 1; v6 = a2[384]; if ( v6 != 4 && v6 ) ++v5; v7 = a2[405]; if ( v7 != 4 && v7 ) ++v5; v8 = a2[426]; if ( v8 != 4 && v8 ) ++v5; v9 = a2[447]; if ( v9 != 4 && v9 ) ++v5; v10 = a2[468]; if ( v10 != 4 && v10 ) ++v5; v11 = a2[489]; if ( v11 != 4 && v11 ) ++v5; result = a2[510]; if ( result != 4 ) { if ( result ) ++v5; } if ( v5 == 8 ) { v40 = 1147615635; LABEL_107: v37 = (int *)this[196]; v38 = *v37; v39 = sub_40C190(v40); return (*(int (__thiscall **)(int *, const CHAR *))(v38 + 472))(v37, v39); } return result; } if ( v3 == 5 ) { v12 = a2[531]; v13 = 0; if ( v12 != 4 && v12 ) v13 = 1; v14 = a2[552]; if ( v14 != 4 && v14 ) ++v13; v15 = a2[573]; if ( v15 != 4 && v15 ) ++v13; v16 = a2[594]; if ( v16 != 4 && v16 ) ++v13; v17 = a2[615]; if ( v17 != 4 && v17 ) ++v13; v18 = a2[636]; if ( v18 != 4 && v18 ) ++v13; v19 = a2[657]; if ( v19 != 4 && v19 ) ++v13; result = a2[678]; if ( result != 4 && result ) ++v13; if ( v13 != 8 ) return result; v41 = 1164392851; goto LABEL_97; } if ( v3 != 6 ) { if ( v3 != 7 ) { if ( v3 == 8 ) { v35 = a2[951]; v36 = 0; if ( v35 != 4 && v35 ) v36 = 1; result = a2[972]; if ( result != 4 && result ) ++v36; if ( v36 == 2 ) { v40 = 339884418; goto LABEL_107; } } return result; } v28 = a2[867]; v29 = 0; if ( v28 != 4 && v28 ) v29 = 1; v30 = a2[888]; if ( v30 != 4 && v30 ) ++v29; v31 = a2[909]; if ( v31 != 4 && v31 ) ++v29; result = a2[930]; if ( result != 4 && result ) ++v29; if ( v29 != 4 ) return result; v41 = 339884930; LABEL_97: v32 = (int *)this[196]; v33 = *v32; v34 = sub_40C190(v41); return (*(int (__thiscall **)(int *, const CHAR *))(v33 + 472))(v32, v34); } v20 = a2[699]; v21 = 0; if ( v20 != 4 && v20 ) v21 = 1; v22 = a2[720]; if ( v22 != 4 && v22 ) ++v21; v23 = a2[741]; if ( v23 != 4 && v23 ) ++v21; v24 = a2[762]; if ( v24 != 4 && v24 ) ++v21; v25 = a2[783]; if ( v25 != 4 && v25 ) ++v21; v26 = a2[804]; if ( v26 != 4 && v26 ) ++v21; v27 = a2[825]; if ( v27 != 4 && v27 ) ++v21; result = a2[846]; if ( result != 4 && result ) ++v21; if ( v21 == 8 ) { v40 = 339885954; goto LABEL_107; } return result; } //----- (005F8A60) -------------------------------------------------------- char __userpurge sub_5F8A60@(int a1@, int *a2@, int a3) { int v3; // edi const char *v4; // eax int v5; // ecx const char *v6; // eax signed int v7; // esi unsigned int *v8; // ebx int v9; // eax char v10; // cl int v11; // edx int v12; // ecx int v13; // edx int v14; // ecx int v15; // edx int v16; // ecx int v17; // edx int v18; // ecx int v19; // edx int v20; // ecx int v21; // edx int v22; // ecx int v23; // eax char v24; // al unsigned int v25; // eax const char *v26; // eax const char *v27; // eax const char *v28; // eax const char *v29; // eax const char *v30; // eax char v31; // cl int v32; // edx int v33; // ecx int v34; // edx int v35; // ecx int v36; // ecx int v37; // edx int v38; // ecx int v39; // edx int v40; // ecx int v41; // edx int v42; // ecx int v43; // edx int v44; // ecx int v45; // edx int v46; // ecx int v47; // edx int v48; // ecx int *v50; // [esp-4h] [ebp-CCh] _DWORD *v51; // [esp+Ch] [ebp-BCh] char v52; // [esp+10h] [ebp-B8h] char v53; // [esp+50h] [ebp-78h] int v54; // [esp+90h] [ebp-38h] int v55; // [esp+94h] [ebp-34h] int v56; // [esp+98h] [ebp-30h] int v57; // [esp+9Ch] [ebp-2Ch] char v58; // [esp+A0h] [ebp-28h] char v59[4]; // [esp+A4h] [ebp-24h] int v60; // [esp+A8h] [ebp-20h] int v61; // [esp+ACh] [ebp-1Ch] int v62; // [esp+B0h] [ebp-18h] int v63; // [esp+B4h] [ebp-14h] int v64; // [esp+B8h] [ebp-10h] int v65; // [esp+BCh] [ebp-Ch] int v66; // [esp+C0h] [ebp-8h] v3 = a1; if ( a3 ) { memset(&v53, 0, 0x40u); memset(&v52, 0, 0x40u); v4 = sub_40A910(1347260284); strftime(&v53, 0x40u, v4, (const struct tm *)(a3 + 38)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 792) + 472))(&v53); v5 = *(_DWORD *)(a3 + 330) + 2; if ( v5 == 60 ) { ++*(_DWORD *)(a3 + 334); *(_DWORD *)(a3 + 330) = 0; } else { *(_DWORD *)(a3 + 330) = v5; } v50 = a2; v6 = sub_40A910(1269140344); strftime(&v52, 0x40u, v6, (const struct tm *)(a3 + 326)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 796) + 472))(&v52); sub_5F87A0((_DWORD *)v3, (_BYTE *)a3); *(_DWORD *)(v3 + 800) = *(_DWORD *)(a3 + 2); v7 = 0; v8 = (unsigned int *)(v3 + 352); v51 = (_DWORD *)(v3 + 348); while ( 1 ) { if ( v7 >= 16 ) { v23 = a3 + 21 * v7; if ( *(_DWORD *)(v23 + 364) ) { v31 = *(_BYTE *)(v23 + 363); switch ( v31 ) { case 0: v32 = *(_DWORD *)(v23 + 372); v54 = *(_DWORD *)(v23 + 368); v33 = *(_DWORD *)(v23 + 376); v55 = v32; v34 = *(_DWORD *)(v23 + 380); v56 = v33; v35 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v34; v58 = 0; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v35 + 472))(&v54, v50); if ( v7 != 31 ) goto LABEL_40; v36 = *(_DWORD *)(v3 + 784); v50 = &dword_AA8CB8; goto LABEL_42; case 2: v37 = *(_DWORD *)(v23 + 372); v54 = *(_DWORD *)(v23 + 368); v38 = *(_DWORD *)(v23 + 376); v55 = v37; v39 = *(_DWORD *)(v23 + 380); v56 = v38; v40 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v39; v58 = 0; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v40 + 472))(&v54, v50); v50 = (int *)&unk_AA8CE8; goto LABEL_41; case 1: v41 = *(_DWORD *)(v23 + 372); v54 = *(_DWORD *)(v23 + 368); v42 = *(_DWORD *)(v23 + 376); v55 = v41; v43 = *(_DWORD *)(v23 + 380); v56 = v42; v44 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v43; v58 = 0; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v44 + 472))(&v54, v50); v50 = &dword_AA8CB8; goto LABEL_41; case 4: v45 = *(_DWORD *)(v23 + 372); v54 = *(_DWORD *)(v23 + 368); v46 = *(_DWORD *)(v23 + 376); v55 = v45; v47 = *(_DWORD *)(v23 + 380); v56 = v46; v48 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v47; v58 = 0; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v48 + 472))(&v54, v50); LABEL_40: v50 = &dword_AA8C68; LABEL_41: v36 = *(_DWORD *)(v3 + 4 * v7 + 660); LABEL_42: (*(void (**)(void))(*(_DWORD *)v36 + 468))(); goto LABEL_43; } } else { v24 = *(_BYTE *)(21 * *v51 + a3 + 363); if ( v24 && v24 != 4 && v24 != 2 ) goto LABEL_44; v25 = *v8; if ( *v8 < 8 ) { *(_DWORD *)v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; v26 = sub_40A910(-1768432428); strftime(v59, 0x1Fu, v26, (const struct tm *)(a3 + 146)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(v59); LABEL_43: v51 += 3; v8 += 3; goto LABEL_44; } if ( v25 < 0x10 ) { *(_DWORD *)v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; v27 = sub_40A910(-1768432428); strftime(v59, 0x1Fu, v27, (const struct tm *)(a3 + 182)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(v59); goto LABEL_43; } if ( v25 < 0x18 ) { *(_DWORD *)v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; v28 = sub_40A910(-1768432428); strftime(v59, 0x1Fu, v28, (const struct tm *)(a3 + 218)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(v59); goto LABEL_43; } if ( v25 < 0x1C ) { *(_DWORD *)v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; v29 = sub_40A910(-1768432428); strftime(v59, 0x1Fu, v29, (const struct tm *)(a3 + 254)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(v59); goto LABEL_43; } if ( v25 < 0x1E ) { *(_DWORD *)v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; v30 = sub_40A910(-1768432428); strftime(v59, 0x1Fu, v30, (const struct tm *)(a3 + 290)); (*(void (__stdcall **)(char *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(v59); goto LABEL_43; } } } else { v9 = 21 * v7 + a3; if ( !*(_DWORD *)(v9 + 364) ) { (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 472))(&unk_9EA317); goto LABEL_44; } v10 = *(_BYTE *)(v9 + 363); v58 = 0; switch ( v10 ) { case 0: goto LABEL_14; case 2: v11 = *(_DWORD *)(v9 + 372); v54 = *(_DWORD *)(v9 + 368); v12 = *(_DWORD *)(v9 + 376); v55 = v11; v13 = *(_DWORD *)(v9 + 380); v56 = v12; v14 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v13; (*(void (__stdcall **)(int *))(*(_DWORD *)v14 + 472))(&v54); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 468))(&unk_AA8CE8); break; case 1: v15 = *(_DWORD *)(v9 + 372); v54 = *(_DWORD *)(v9 + 368); v16 = *(_DWORD *)(v9 + 376); v55 = v15; v17 = *(_DWORD *)(v9 + 380); v56 = v16; v18 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v17; (*(void (__stdcall **)(int *))(*(_DWORD *)v18 + 472))(&v54); (*(void (__stdcall **)(int *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 468))(&dword_AA8CB8); break; default: *(_BYTE *)(v9 + 363) = 4; LABEL_14: v19 = *(_DWORD *)(v9 + 372); v54 = *(_DWORD *)(v9 + 368); v20 = *(_DWORD *)(v9 + 376); v55 = v19; v21 = *(_DWORD *)(v9 + 380); v56 = v20; v22 = *(_DWORD *)(v3 + 4 * v7 + 660); v57 = v21; (*(void (__stdcall **)(int *))(*(_DWORD *)v22 + 472))(&v54); (*(void (__stdcall **)(int *))(**(_DWORD **)(v3 + 4 * v7 + 660) + 468))(&dword_AA8C68); break; } } LABEL_44: if ( ++v7 >= 31 ) return 1; } } return 0; } // 5F8A60: could not find valid save-restore pair for ebx // AA8C68: using guessed type int dword_AA8C68; // AA8CB8: using guessed type int dword_AA8CB8; //----- (005F9390) -------------------------------------------------------- int __thiscall sub_5F9390(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // edi const CHAR *v4; // eax int v6; // edi signed int v7; // ebx int v8; // edi const CHAR *v9; // eax int v10; // edi const CHAR *v11; // eax int v12; // edi const CHAR *v13; // eax int v14; // edi const CHAR *v15; // eax int v16; // edi const CHAR *v17; // eax int v18; // edi const CHAR *v19; // eax int v20; // edi const CHAR *v21; // eax int v22; // edi const CHAR *v23; // eax int v24; // edi void *v25; // eax v2 = this; switch ( a2 ) { case 0: v3 = *this[196]; v4 = sub_40C190(1970760068); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v3 + 472))(v2[196], v4); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA36A); case 1: v6 = (int)(this + 165); v7 = 31; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v6 + 472))(&unk_9EA36B); (*(void (__stdcall **)(int *))(**(_DWORD **)v6 + 468))(&dword_AA8C68); v6 += 4; --v7; } while ( v7 ); v8 = *v2[196]; v9 = sub_40C190(1683314876); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v8 + 472))(v2[196], v9); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA37B); case 2: v10 = *this[196]; v11 = sub_40C190(1537651683); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v10 + 472))(v2[196], v11); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA38A); case 3: v12 = *this[196]; v13 = sub_40C190(1537651683); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v12 + 472))(v2[196], v13); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA38B); case 4: v14 = *this[196]; v15 = sub_40C190(-1062292206); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v14 + 472))(v2[196], v15); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA3A6); case 5: v16 = *this[196]; v17 = sub_40C190(-1062292205); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v16 + 472))(v2[196], v17); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA3A7); case 6: v18 = *this[196]; v19 = sub_40C190(2121316566); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v18 + 472))(v2[196], v19); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA3B5); case 7: v20 = *this[196]; v21 = sub_40C190(595089810); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v20 + 472))(v2[196], v21); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA3B6); case 8: v22 = *this[196]; v23 = sub_40C190(-841146831); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v22 + 472))(v2[196], v23); return (*(int (__stdcall **)(void *))(*v2[197] + 472))(&unk_9EA3B7); case 9: v24 = *this[196]; v25 = (void *)sub_40C190(-350742472); return (*(int (__thiscall **)(_DWORD *, void *))(v24 + 472))(v2[196], v25); case 10: v24 = *this[196]; v25 = (void *)sub_40C190(-807596249); break; default: v24 = *this[196]; v25 = sub_7549E0("Type : %d", a2); break; } return (*(int (__thiscall **)(_DWORD *, void *))(v24 + 472))(v2[196], v25); } // AA8C68: using guessed type int dword_AA8C68; //----- (005F96A0) -------------------------------------------------------- volatile LONG *__cdecl sub_5F96A0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x330u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5F7B10(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005F97D0) -------------------------------------------------------- void *__thiscall sub_5F97D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildTournamentScheduleWin::`vftable'; *((_DWORD *)this + 58) = &GuildTournamentScheduleWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EA498: using guessed type void *GuildTournamentScheduleWin::`vftable'; // 9EA4B4: using guessed type void *GuildTournamentScheduleWin::`vftable'; //----- (005F98A0) -------------------------------------------------------- char __thiscall sub_5F98A0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (005F98E0) -------------------------------------------------------- int __thiscall sub_5F98E0(_DWORD *this) { _DWORD *v1; // esi int result; // eax int *v3; // edi int v4; // eax v1 = this; result = sub_5D5470(this); if ( result ) { v3 = (int *)v1[68]; if ( v3 ) { v4 = sub_5D5470(v1); sub_547C20(v3, v4); result = sub_8F2F90((int)v1); } } return result; } //----- (005F9940) -------------------------------------------------------- void __thiscall sub_5F9940(_DWORD *this) { _WORD **v1; // edi _WORD **v2; // esi signed int v3; // ebx unsigned int v4; // esi int v5; // eax v1 = (_WORD **)(this + 118); if ( this[118] ) { v2 = (_WORD **)(this + 118); v3 = 36; do { sub_5D5B70(*v2, 0, 1); ++v2; --v3; } while ( v3 ); v4 = 0; do { v5 = sub_62F4A0(v4); sub_5D5B70(*v1, v5, 1); ++v4; ++v1; } while ( v4 < 0x24 ); } } //----- (005F99A0) -------------------------------------------------------- int *__thiscall sub_5F99A0(_DWORD *this, int *a2) { int *result; // eax result = a2; if ( !this[(_DWORD)a2 + 118] ) result = sub_5D5B70(0, 0, 1); return result; } //----- (005F99C0) -------------------------------------------------------- char __stdcall sub_5F99C0(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 12, 38, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (005F99F0) -------------------------------------------------------- char __thiscall sub_5F99F0(_DWORD **this, int a2) { _DWORD **v2; // esi __int64 v3; // rax signed __int64 v4; // rax __int64 v5; // rax signed __int64 v6; // rax __int64 v7; // rax signed __int64 v8; // rax __int64 v9; // rax signed __int64 v10; // rax char v12; // [esp+4h] [ebp-88h] char v13; // [esp+8h] [ebp-84h] v2 = this; v3 = sub_62F3D0(); v4 = sub_680E90(v3); sprintf(&v13, "%I64d", v4); (*(void (__stdcall **)(char *))(*v2[93] + 472))(&v13); v5 = sub_62F3D0(); v6 = sub_680EB0(v5); sprintf(&v13, "%I64d", v6); (*(void (__stdcall **)(char *))(*v2[92] + 472))(&v13); v7 = sub_62F3D0(); v8 = sub_680F00(v7); sprintf(&v13, "%I64d", v8); (*(void (__stdcall **)(char *))(*v2[91] + 472))(&v13); v9 = sub_62F3D0(); v10 = sub_680F60(v9); sprintf(&v13, "%I64d", v10); (*(void (__stdcall **)(char *))(*v2[90] + 472))(&v13); return sub_6F3170(3, &v12); } //----- (005F9B10) -------------------------------------------------------- char sub_5F9B10() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildTStore"); return (char)v0; } //----- (005F9B40) -------------------------------------------------------- _DWORD *__thiscall sub_5F9B40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildTournamentStorageWin::`vftable'; v1[58] = &GuildTournamentStorageWin::`vftable'; v1[98] = 0; v1[96] = &PgWinDrop::`vftable'; v1[116] = 0; v1[100] = &DropContents::`vftable'; *((_WORD *)v1 + 230) = -1; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[97] = v1 + 100; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[126] = 0; v1[127] = 0; v1[128] = 0; v1[129] = 0; v1[130] = 0; v1[131] = 0; v1[132] = 0; v1[133] = 0; v1[134] = 0; v1[135] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[139] = 0; v1[140] = 0; v1[141] = 0; v1[142] = 0; v1[143] = 0; v1[144] = 0; v1[145] = 0; v1[146] = 0; v1[147] = 0; v1[148] = 0; v1[149] = 0; v1[150] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[86] = 0; *((_BYTE *)v1 + 380) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9EAB54: using guessed type void *GuildTournamentStorageWin::`vftable'; // 9EAB74: using guessed type void *GuildTournamentStorageWin::`vftable'; //----- (005F9D40) -------------------------------------------------------- char sub_5F9D40() { dword_ACEC24 = 0; return sub_6F3D10(&off_AB7F2C, 29, 160, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACEC24: using guessed type int dword_ACEC24; //----- (005F9D60) -------------------------------------------------------- char __thiscall sub_5F9D60(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (005F9D90) -------------------------------------------------------- char __thiscall sub_5F9D90(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (005F9DC0) -------------------------------------------------------- unsigned int __thiscall sub_5F9DC0(_DWORD **this, int a2) { _BYTE *v2; // edi unsigned int result; // eax unsigned int v4; // esi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; result = sub_5D5470(this[a2 + 118]); v4 = result; if ( result ) { v2[380] = 0; result = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)result + 12))(result); if ( result > 1 ) { v2[380] = 1; LOWORD(dword_AD0354) = a2 & 0x3FF | 0x1000; v5 = (int **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 12))(v4); result = sub_4A4E90(v5, v2, (_DWORD *)0x10, (_DWORD *)(v7 - 1), (int)v6, 3); } } return result; } // AD0354: using guessed type int dword_AD0354; //----- (005F9E50) -------------------------------------------------------- void __thiscall sub_5F9E50(_DWORD **this, int a2) { int v2; // ebx _DWORD *v3; // eax int v4; // esi int v5; // edi int v6; // edx unsigned int v7; // eax const CHAR *v8; // eax int v9; // [esp+4h] [ebp-Ch] _DWORD *v10; // [esp+8h] [ebp-8h] __int16 v11; // [esp+Ch] [ebp-4h] v2 = sub_5D5470(this[a2 + 118]); if ( v2 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = dword_ACB230; v5 = *(unsigned __int16 *)(v2 + 8); v6 = *(_DWORD *)dword_ACB230; v10 = v3; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v6 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) && *(_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * v5) ) { v7 = sub_6859E0(&byte_ADA230, v2); if ( v7 == -1 ) { if ( v10 ) { v8 = sub_40C190(-1851208242); sub_492060(v10, (int)v8); } } else { LOWORD(v9) = v7 & 0x3FF | 0x2400; v11 = a2 & 0x3FF | 0x1000; if ( (v9 & 0x3FF) != -1 && v10 ) { sub_4B7B90(v10, &v11, (__int16 *)&v9); sub_6BA9B0(*(unsigned __int16 *)(v2 + 8)); } } } } } } // ACB230: using guessed type int dword_ACB230; // ADA230: using guessed type char byte_ADA230; //----- (005F9F60) -------------------------------------------------------- char __thiscall sub_5F9F60(char *this, _DWORD *a2, __int16 a3) { int v3; // ebx char *v4; // esi int v5; // eax int v6; // edi int v7; // eax int v8; // ebx int v9; // eax int v10; // esi int v12; // edi int v13; // ebx int **v14; // edi const CHAR *v15; // eax _DWORD *v16; // eax _DWORD **v17; // esi const CHAR *v18; // edi _DWORD *v19; // [esp+14h] [ebp+8h] v3 = a2[2]; v4 = this; if ( !a2[4] ) { v5 = a2[5]; if ( v5 ) sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } if ( v3 == 13 ) { v6 = a2[3]; v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v19 = (_DWORD *)v7; if ( !v4[380] ) return 1; v4[380] = 0; v8 = *(_DWORD *)(v7 + 744); if ( !v8 || *(_DWORD *)(v8 + 376) == 3 ) { v9 = sub_5D5470(*(_DWORD **)&v4[4 * v6 + 472]); v10 = v9; if ( v9 && (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9) > 1 ) { word_AD0350 = a3 & 0x3FF | 0x1000; LOWORD(dword_AD0354) = v6 & 0x3FF | 0x1000; sub_4B88F0(v19, (__int16 *)&dword_AD0354, &word_AD0350, *(_DWORD *)(v8 + 348)); sub_6BA9B0(*(unsigned __int16 *)(v10 + 8)); return 1; } return 1; } } else if ( v3 == 5 ) { v12 = a2[5]; if ( v12 ) { v13 = sub_49F760(*(unsigned __int16 *)(v12 + 1)); if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { *((_WORD *)v4 + 308) = *(_WORD *)(v12 + 1); v14 = (int **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v14 ) { v15 = sub_40C190(744001168); sub_4A4E90(v14, v4, (_DWORD *)0x11, *(_DWORD **)(v13 + 106), (int)v15, 3); return 1; } } else { v16 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v16 ) sub_4B7A80(v16, *(_WORD *)(v12 + 1), *(_DWORD *)(v13 + 106)); } return 1; } } else { v17 = (_DWORD **)(v4 + 232); v18 = sub_40C190(237968494); if ( v17[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v17[1] + 4))(25, v18, v17); if ( v17[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v17[1] + 20))(25, v18, v17); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v17)[5])(v17, 25, v18, v17); } return 0; } // ACDC84: using guessed type int dword_ACDC84; // AD0350: using guessed type __int16 word_AD0350; // AD0354: using guessed type int dword_AD0354; //----- (005FA160) -------------------------------------------------------- void __thiscall sub_5FA160(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // ecx const CHAR *v3; // eax const CHAR *v4; // eax v1 = this; v2 = (volatile LONG *)this[86]; if ( v2 ) { sub_572750(v2, v1, (_DWORD *)0xF, 0, (int)&unk_9EA6F3); v3 = sub_40C190(-1984524408); sub_5729A0((_DWORD **)v1[86], (int)v3); v4 = sub_40C190(-705630395); sub_5729D0((_DWORD **)v1[86], (int)v4); } } //----- (005FA1B0) -------------------------------------------------------- int __thiscall sub_5FA1B0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // edi char *v5; // eax char *v6; // eax v3 = this; v4 = *this[94]; v5 = (char *)sub_40A910(-2137268247); v6 = sub_7549E0(v5, a2, a3); return (*(int (__thiscall **)(_DWORD *, char *))(v4 + 472))(v3[94], v6); } //----- (005FA200) -------------------------------------------------------- char __thiscall sub_5FA200(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi _DWORD *v6; // esi char *v7; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 ) return 0; v7 = (char *)sub_402BF0(this); return sub_5F9F60(v7, v6, v4[112]); } //----- (005FA240) -------------------------------------------------------- _DWORD *__thiscall sub_5FA240(int this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax unsigned __int16 *v4; // edi v2 = (_DWORD *)this; *(_BYTE *)(this + 380) = 0; if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) return (_DWORD *)sub_5F9DC0((_DWORD **)this, a2); v4 = (unsigned __int16 *)sub_5D5470(*(_DWORD **)(this + 4 * a2 + 472)); result = 0; if ( v4 ) { v2[104] = 0; v2[102] = 13; v2[106] = 0; v2[105] = v4; v2[103] = a2; v2[116] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v4 + 12))(v4); v2[98] = v2; dword_BA6BCC = (int)(v2 + 96); result = sub_6BA9B0(v4[4]); } return result; } // ACDC84: using guessed type int dword_ACDC84; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005FA2E0) -------------------------------------------------------- void __thiscall sub_5FA2E0(int this, int a2, int *a3) { _DWORD *v3; // esi int v4; // eax int v5; // ecx v3 = (_DWORD *)this; switch ( a2 ) { case 10: sub_5FA240(this, (int)a3); break; case 11: sub_5F9E50((_DWORD **)this, (int)a3); break; case 12: sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4A7DD0(); break; case 14: sub_5FA160((_DWORD *)this); break; case 15: sub_5F99C0(*a3, a3[1]); break; case 16: if ( a3 ) { v4 = sub_5D5470(*(_DWORD **)(this + 4 * (dword_AD0354 & 0x3FF) + 472)); if ( v4 ) { v3[102] = 13; v3[104] = 0; v5 = dword_AD0354 & 0x3FF; v3[105] = v4; v3[103] = v5; v3[106] = 0; (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); v3[116] = a3; v3[98] = v3; dword_BA6BCC = (int)(v3 + 96); } } break; case 17: if ( a3 ) sub_4B7A80(*(_DWORD **)(this + 296), *(_WORD *)(this + 616), (int)a3); break; case 18: sub_5F9B10(); break; default: return; } } // AD0354: using guessed type int dword_AD0354; // BA6BCC: using guessed type int dword_BA6BCC; //----- (005FA430) -------------------------------------------------------- int __cdecl sub_5FA430(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1C4u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_5D6D00((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = >StorageInvWin::`vftable'; *(_DWORD *)(v5 + 232) = >StorageInvWin::`vftable'; *(_DWORD *)(v5 + 448) = -1; sub_5D5B70((_WORD *)v5, 0, 1); } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9EA8C8: using guessed type void *GTStorageInvWin::`vftable'; // 9EA8E4: using guessed type void *GTStorageInvWin::`vftable'; //----- (005FA590) -------------------------------------------------------- volatile LONG *__cdecl sub_5FA590(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x270u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_5F9B40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (005FA6C0) -------------------------------------------------------- char __thiscall sub_5FA6C0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx int v10; // eax int v11; // edx volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // eax volatile LONG v17; // edx const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax int *v22; // ecx volatile LONG *v23; // eax const char *v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG *v27; // ST6C_4 int v28; // ST68_4 int v29; // ST64_4 int v30; // eax volatile LONG *v31; // eax volatile LONG v32; // edx const CHAR *v33; // eax volatile LONG **v34; // eax volatile LONG *v35; // ST6C_4 int v36; // ST68_4 int v37; // ST64_4 int v38; // eax volatile LONG *v39; // eax volatile LONG v40; // edx volatile LONG *v41; // ST74_4 int v42; // edx volatile LONG **v43; // eax volatile LONG *v44; // ST6C_4 int v45; // ST68_4 int v46; // ST64_4 int v47; // eax volatile LONG *v48; // eax volatile LONG v49; // edx volatile LONG *v50; // ST74_4 int v51; // edx volatile LONG **v52; // eax volatile LONG *v53; // ST6C_4 int v54; // ST68_4 int v55; // ST64_4 int v56; // eax volatile LONG *v57; // eax volatile LONG v58; // edx volatile LONG *v59; // ST74_4 int v60; // edx volatile LONG **v61; // eax volatile LONG *v62; // ST6C_4 int v63; // ST68_4 int v64; // ST64_4 int v65; // eax volatile LONG *v66; // eax volatile LONG v67; // edx volatile LONG *v68; // ST74_4 int v69; // edx void (__thiscall ***v70)(_DWORD, signed int); // esi int v71; // eax volatile LONG *v72; // eax int v73; // edi char *v74; // eax char *v75; // eax void (__thiscall ***v76)(_DWORD, signed int); // esi int v77; // [esp+8Ch] [ebp-58h] int v78; // [esp+90h] [ebp-54h] void (__thiscall **v79)(volatile LONG **, const CHAR *); // [esp+94h] [ebp-50h] int v80; // [esp+98h] [ebp-4Ch] volatile LONG *v81; // [esp+9Ch] [ebp-48h] int v82; // [esp+A0h] [ebp-44h] int v83; // [esp+A4h] [ebp-40h] int v84; // [esp+A8h] [ebp-3Ch] volatile LONG **v85; // [esp+ACh] [ebp-38h] char v86; // [esp+B0h] [ebp-34h] int v87; // [esp+E0h] [ebp-4h] v2 = (int)this; v84 = 0; v87 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v81 = v3; if ( !v3 ) goto LABEL_30; v80 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\GuildTStore.nif"); sub_8F66B0(v6, (int)&v84, v80); if ( !v84 ) return 0; v7 = sub_8FB140(v84, (int)"Frame", (int)&v83, (int)&v82, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"GuildTournamentStorageWin", 0) ) { LABEL_30: v4 = (void (__thiscall ***)(_DWORD, signed int))v84; v87 = -1; if ( v84 && !InterlockedDecrement((volatile LONG *)(v84 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v83; v9 = v82; v85 = sub_8FB140(v84, (int)"ClsNor", (int)&v83, (int)&v82, v81); sub_8FB650(v85, v84, (int)"ClsClick"); sub_8FB650(v85, v84, (int)"ClsOver"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 12, 0, 0); v10 = sub_43D0D0(0x18u); v11 = *(_DWORD *)v84; v80 = v10; if ( (*(int (__stdcall **)(const char *))(v11 + 72))("HelpLinkNor") ) { v85 = sub_8FB140(v84, (int)"HelpLinkNor", (int)&v83, (int)&v82, (volatile LONG *)v80); sub_8FB650(v85, v84, (int)"HelpLinkClick"); sub_8FB650(v85, v84, (int)"HelpLinkOver"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 18, 0, 0); } v12 = sub_8FB140(v84, (int)"Panel01", (int)&v83, (int)&v82, v81); v13 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v84, (int)"Panel02", (int)&v83, (int)&v82, v81); sub_8F3EB0(v83 - v8, v82 - v9, (int)v14, v2, 0, 0); if ( sub_8F71E0(v84, (int)"WinTitle", &v83, &v82, &v77, &v78) ) { v15 = sub_421050(0); v16 = sub_8F4A20(v83 - v8, v82 - v9 + 2, v77, v78, v15, v2, 0, 0); v17 = *v16; v85 = (volatile LONG **)v16; (*(void (__thiscall **)(volatile LONG *, signed int))(v17 + 488))(v16, 5); (*((void (__stdcall **)(int *))*v85 + 117))(&dword_AA8D98); v80 = (int)(*v85 + 118); v18 = sub_40C190(931964289); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v80)(v85, v18); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v19 = sub_8FB140(v84, (int)"IconSlot", (int)&v83, (int)&v82, v81); sub_8F3EB0(v83 - v8, v82 - v9, (int)v19, v2, 0, 0); v80 = 0; v85 = (volatile LONG **)(v2 + 472); do { v79 = (void (__thiscall **)(volatile LONG **, const CHAR *))(v80 + 1); sprintf(&v86, "IconSlot%03d", v80 + 1); v20 = sub_8FB140(v84, (int)&v86, (int)&v83, (int)&v82, v81); sub_8F3EB0(v83 - v8, v82 - v9, (int)v20, v2, 0, 0); v21 = (volatile LONG *)sub_5FA430(v83 - v8 + 1, v82 - v9 + 1, v80, v2); *v85 = v21; sub_5D5B70(v21, 0, 1); (*(void (__stdcall **)(signed int))(**v85 + 516))(10); (*(void (__stdcall **)(signed int))(**v85 + 560))(11); v22 = (int *)v85; *((_DWORD *)*v85 + 68) = dword_ACEC34; sub_5D3170(*v22, 1); ++v85; v80 = (int)v79; } while ( (signed int)v79 < 36 ); v85 = sub_8FB140(v84, (int)"Tab01_Off", (int)&v83, (int)&v82, v81); sub_8FB650(v85, v84, (int)"Tab01_Dis"); sub_8FB650(v85, v84, (int)"Tab01_On"); v23 = sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 13, 0, 0); *(_DWORD *)(v2 + 348) = v23; *((_DWORD *)v23 + 68) = dword_AD01E8; v24 = sub_40C190(-1983728165); sub_8F2EA0(*(void ***)(v2 + 348), v24); v25 = sub_8FB140(v84, (int)"Num01", (int)&v83, (int)&v82, 0); v26 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v25, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v85 = sub_8FB140(v84, (int)"DrawNor", (int)&v83, (int)&v82, v81); sub_8FB650(v85, v84, (int)"DrawClick"); sub_8FB650(v85, v84, (int)"DrawOver"); v27 = sub_8FE0F0(v83 - v8 + 60, v82 - v9, (int)v85, v2, 14, 0, 0); v80 = (int)v27; v28 = sub_421050(0); v29 = (*(int (**)(void))(*(_DWORD *)v80 + 148))(); v30 = (*(int (**)(void))(*(_DWORD *)v80 + 144))(); v31 = sub_8F4A20(0, 1, v30, v29, v28, (int)v27, 0, 0); v32 = *v31; v85 = (volatile LONG **)v31; (*(void (__thiscall **)(volatile LONG *, signed int))(v32 + 488))(v31, 5); v79 = (void (__thiscall **)(volatile LONG **, const CHAR *))(*v85 + 118); v33 = sub_40C190(-1984524408); (*v79)(v85, v33); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v34 = sub_8FB140(v84, (int)"GemInput", (int)&v83, (int)&v82, v81); v35 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v34, v2, 0, 0); v85 = (volatile LONG **)v35; v36 = sub_421050(0); v37 = (*((int (**)(void))*v85 + 37))(); v38 = (*((int (**)(void))*v85 + 36))(); v39 = sub_8F4A20(0, 1, v38, v37, v36, (int)v35, 0, 0); v40 = *v39; v85 = (volatile LONG **)v39; (*(void (__thiscall **)(volatile LONG *, signed int))(v40 + 488))(v39, 6); (*((void (__stdcall **)(void *))*v85 + 118))(&unk_9EA6E9); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v41 = v81; v42 = v84; *(_DWORD *)(v2 + 372) = v85; v85 = sub_8FB140(v42, (int)"GemBtn", (int)&v83, (int)&v82, v41); sub_8FB650(v85, v84, (int)"GemBtn"); sub_8FB650(v85, v84, (int)"GemBtn"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 0, 0, 0); v43 = sub_8FB140(v84, (int)"GoldInput", (int)&v83, (int)&v82, v81); v44 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v43, v2, 0, 0); v85 = (volatile LONG **)v44; v45 = sub_421050(0); v46 = (*((int (**)(void))*v85 + 37))(); v47 = (*((int (**)(void))*v85 + 36))(); v48 = sub_8F4A20(0, 1, v47, v46, v45, (int)v44, 0, 0); v49 = *v48; v85 = (volatile LONG **)v48; (*(void (__thiscall **)(volatile LONG *, signed int))(v49 + 488))(v48, 6); (*((void (__stdcall **)(void *))*v85 + 118))(&unk_9EA6EA); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v50 = v81; v51 = v84; *(_DWORD *)(v2 + 368) = v85; v85 = sub_8FB140(v51, (int)"GoldBtn", (int)&v83, (int)&v82, v50); sub_8FB650(v85, v84, (int)"GoldBtn"); sub_8FB650(v85, v84, (int)"GoldBtn"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 0, 0, 0); v52 = sub_8FB140(v84, (int)"SilverInput", (int)&v83, (int)&v82, v81); v53 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v52, v2, 0, 0); v85 = (volatile LONG **)v53; v54 = sub_421050(0); v55 = (*((int (**)(void))*v85 + 37))(); v56 = (*((int (**)(void))*v85 + 36))(); v57 = sub_8F4A20(0, 1, v56, v55, v54, (int)v53, 0, 0); v58 = *v57; v85 = (volatile LONG **)v57; (*(void (__thiscall **)(volatile LONG *, signed int))(v58 + 488))(v57, 6); (*((void (__stdcall **)(void *))*v85 + 118))(&unk_9EA6EB); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v59 = v81; v60 = v84; *(_DWORD *)(v2 + 364) = v85; v85 = sub_8FB140(v60, (int)"SilverBtn", (int)&v83, (int)&v82, v59); sub_8FB650(v85, v84, (int)"SilverBtn"); sub_8FB650(v85, v84, (int)"SilverBtn"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 0, 0, 0); v61 = sub_8FB140(v84, (int)"CopperInput", (int)&v83, (int)&v82, v81); v62 = sub_8F3EB0(v83 - v8, v82 - v9, (int)v61, v2, 0, 0); v85 = (volatile LONG **)v62; v63 = sub_421050(0); v64 = (*((int (**)(void))*v85 + 37))(); v65 = (*((int (**)(void))*v85 + 36))(); v66 = sub_8F4A20(0, 1, v65, v64, v63, (int)v62, 0, 0); v67 = *v66; v85 = (volatile LONG **)v66; (*(void (__thiscall **)(volatile LONG *, signed int))(v67 + 488))(v66, 6); (*((void (__stdcall **)(void *))*v85 + 118))(&unk_9EA6F2); (*((void (__stdcall **)(_DWORD))*v85 + 60))(0); v68 = v81; v69 = v84; *(_DWORD *)(v2 + 360) = v85; v85 = sub_8FB140(v69, (int)"CopperBtn", (int)&v83, (int)&v82, v68); sub_8FB650(v85, v84, (int)"CopperBtn"); sub_8FB650(v85, v84, (int)"CopperBtn"); sub_8FE0F0(v83 - v8, v82 - v9, (int)v85, v2, 0, 0, 0); if ( sub_8F71E0(v84, (int)"Text01", &v83, &v82, &v77, &v78) ) { v71 = sub_421050(0); v72 = sub_8F4A20(v83 - v8, v82 - v9 + 2, v77, v78, v71, v2, 0, 0); *(_DWORD *)(v2 + 376) = v72; (*(void (__thiscall **)(volatile LONG *, signed int))(*v72 + 488))(v72, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 376) + 468))(&dword_AA8D98); v73 = **(_DWORD **)(v2 + 376); v74 = (char *)sub_40A910(-2137268247); v75 = sub_7549E0(v74, 0); (*(void (__thiscall **)(_DWORD, char *))(v73 + 472))(*(_DWORD *)(v2 + 376), v75); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.2, 0.5); *(_DWORD *)(v2 + 344) = sub_573FD0(a2); v87 = -1; if ( v84 ) { v76 = (void (__thiscall ***)(_DWORD, signed int))v84; if ( !InterlockedDecrement((volatile LONG *)(v84 + 4)) ) { if ( v76 ) (**v76)(v76, 1); } } result = 1; } else { v70 = (void (__thiscall ***)(_DWORD, signed int))v84; v87 = -1; if ( v84 && !InterlockedDecrement((volatile LONG *)(v84 + 4)) && v70 ) (**v70)(v70, 1); result = 0; } } else { v87 = -1; sub_410C00(&v84); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (005FB220) -------------------------------------------------------- void *__thiscall sub_5FB220(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = >StorageInvWin::`vftable'; *((_DWORD *)this + 58) = >StorageInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EA8C8: using guessed type void *GTStorageInvWin::`vftable'; // 9EA8E4: using guessed type void *GTStorageInvWin::`vftable'; //----- (005FB260) -------------------------------------------------------- _DWORD *__thiscall sub_5FB260(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; *(_DWORD *)this = &GuildTournamentStorageWin::`vftable'; *((_DWORD *)this + 58) = &GuildTournamentStorageWin::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 86); if ( v3 ) sub_8F9E00(&unk_BA6B10, v3); v2[100] = &DropContents::`vftable'; v2[96] = &PgWinDrop::`vftable'; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9EAB54: using guessed type void *GuildTournamentStorageWin::`vftable'; // 9EAB74: using guessed type void *GuildTournamentStorageWin::`vftable'; //----- (005FB3C0) -------------------------------------------------------- int __thiscall sub_5FB3C0(_DWORD *this, int a2, char *a3, size_t a4) { _DWORD *v4; // esi int v5; // eax int result; // eax bool v7; // zf int v8; // ecx v4 = this; this[this[224] + 73] = a2; v5 = this[224]; if ( this[v5 + 123] < a4 ) { operator delete((void *)this[v5 + 173]); v4[v4[224] + 173] = operator new[](a4 + 1); v4[v4[224] + 123] = a4; } strncpy((char *)v4[v4[224] + 173], a3, a4); result = v4[224]; *(_BYTE *)(a4 + v4[result + 173]) = 0; if ( ++v4[224] >= 50 ) v4[224] = 0; v7 = ++v4[223] == 50; if ( v4[223] > 0x32u ) { v4[223] = 50; v7 = 1; } if ( v7 ) { if ( ++v4[226] >= 50 ) v4[226] = 0; if ( ++v4[225] >= 50 ) v4[225] = 0; } else { v8 = v4[226]; result = (v8 + 9) / 50; if ( (v8 + 9) % 50 == v4[224] ) { result = v8 + 1; v4[226] = v8 + 1; if ( v8 + 1 >= 50 ) v4[226] = 0; } } return result; } //----- (005FB4F0) -------------------------------------------------------- int __thiscall sub_5FB4F0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // edi int v4; // esi int result; // eax signed int v6; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[226]; v4 = (int)(this + 228); v6 = 8; do { result = v2[v3 + 173]; if ( !result || !*(_DWORD *)v4 ) goto LABEL_19; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 148))(v2[v3 + 173]); result = v2[v3 + 73]; if ( result > 16 ) { if ( result > 128 ) { if ( result != 4096 ) goto LABEL_19; } else { if ( result == 128 ) { result = (*(int (__stdcall **)(int *))(**(_DWORD **)v4 + 176))(&dword_AA8CB8); goto LABEL_19; } if ( result != 32 ) { if ( result != 64 ) goto LABEL_19; LABEL_15: result = (*(int (__stdcall **)(int *))(**(_DWORD **)v4 + 176))(&dword_AA8CA8); goto LABEL_19; } } result = (*(int (__stdcall **)(char *))(**(_DWORD **)v4 + 176))(aIii); } else { if ( result == 16 ) goto LABEL_15; switch ( --result ) { case 0: result = (*(int (__stdcall **)(int *))(**(_DWORD **)v4 + 176))(&dword_AA8C68); break; case 1: result = (*(int (__stdcall **)(int *))(**(_DWORD **)v4 + 176))(&dword_AA8C88); break; case 3: result = (*(int (__stdcall **)(void *))(**(_DWORD **)v4 + 176))(&unk_AA8CD8); break; case 7: result = (*(int (__stdcall **)(void *))(**(_DWORD **)v4 + 176))(&unk_AA8CE8); break; default: break; } } LABEL_19: if ( (unsigned int)++v3 >= 0x32 ) v3 = 0; v4 += 4; --v6; } while ( v6 ); return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AA8CA8: using guessed type int dword_AA8CA8; // AA8CB8: using guessed type int dword_AA8CB8; //----- (005FB5E0) -------------------------------------------------------- LONG __thiscall sub_5FB5E0(void **this) { void **v1; // ebx void **v2; // esi signed int v3; // edi v1 = this; *this = &ChatBoard::`vftable'; this[58] = &ChatBoard::`vftable'; v2 = this + 173; v3 = 50; do { operator delete[](*v2); ++v2; --v3; } while ( v3 ); `eh vector destructor iterator'(v1 + 228, 4u, 8, sub_410C00); return sub_8F29C0(v1); } // 9EAD9C: using guessed type void *ChatBoard::`vftable'; // 9EADBC: using guessed type void *ChatBoard::`vftable'; //----- (005FB680) -------------------------------------------------------- void __thiscall sub_5FB680(HDC **this, int a2, char *lpString) { char *v3; // esi HDC **v4; // edi int v5; // eax int v6; // ebx v3 = lpString; v4 = this; if ( lpString && *lpString ) { do { v5 = ((int (__thiscall *)(HDC **))(*v4)[36])(v4); v6 = sub_5FBAD0(v4[72], v3, v5); sub_5FB3C0(v4, a2, v3, v6); v3 += v6; } while ( *v3 ); } } //----- (005FB6D0) -------------------------------------------------------- LONG __thiscall sub_5FB6D0(volatile LONG **this) { volatile LONG **v1; // edi LONG result; // eax int v3; // esi _DWORD *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // ebx volatile LONG *v7; // eax int v8; // edx float v9; // ST20_4 int v10; // edx volatile LONG *v11; // eax void (__thiscall *v12)(volatile LONG **, volatile LONG *, _DWORD); // edx struct tagSIZE psizl; // [esp+1Ch] [ebp-20h] int v14; // [esp+24h] [ebp-18h] int v15; // [esp+28h] [ebp-14h] void *v16; // [esp+2Ch] [ebp-10h] int v17; // [esp+38h] [ebp-4h] v1 = this; if ( !this[72] ) this[72] = (volatile LONG *)sub_421050(0); result = (LONG)v1[72]; if ( result ) { SelectObject(*(HDC *)(result + 192), *(HGDIOBJ *)(result + 184)); sub_4593C0(v1[72], "W", 1, &psizl); v15 = 0; v3 = (int)(v1 + 228); v14 = 8; do { v4 = operator new(0x14Cu); v16 = v4; v17 = 0; if ( v4 ) { v5 = (volatile LONG *)sub_90EEA0(v4, v1[72]); v16 = (void *)v5; } else { v16 = 0; v5 = 0; } v6 = *(volatile LONG **)v3; v17 = -1; if ( v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v5 = (volatile LONG *)v16; } *(_DWORD *)v3 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v7 = *(volatile LONG **)v3; v8 = *(_DWORD *)(*(_DWORD *)v3 + 92); v9 = (double)v15; v10 = *(_DWORD *)(*(_DWORD *)v3 + 96); *((_DWORD *)v7 + 22) = *(_DWORD *)(*(_DWORD *)v3 + 88); *((float *)v7 + 23) = v9; *((_DWORD *)v7 + 24) = v10; v11 = *(volatile LONG **)v3; v12 = (void (__thiscall *)(volatile LONG **, volatile LONG *, _DWORD))*((_DWORD *)*v1 + 29); v15 += psizl.cy + 2; v12(v1, v11, 0); v3 += 4; --v14; } while ( v14 ); result = sub_85C4D0(v1); } return result; } //----- (005FB840) -------------------------------------------------------- _DWORD *__thiscall sub_5FB840(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax signed int v3; // ecx v1 = this; sub_8F2740(this); *v1 = &ChatBoard::`vftable'; v1[58] = &ChatBoard::`vftable'; `eh vector constructor iterator'( v1 + 228, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[72] = 0; v1[223] = 0; v1[224] = 0; v1[225] = 0; v1[226] = 0; v2 = v1 + 173; v3 = 50; do { *(v2 - 50) = 0; *v2 = 0; ++v2; --v3; } while ( v3 ); return v1; } // 9EAD9C: using guessed type void *ChatBoard::`vftable'; // 9EADBC: using guessed type void *ChatBoard::`vftable'; //----- (005FB950) -------------------------------------------------------- char __thiscall sub_5FB950(volatile LONG **this, int a2, int a3, int a4, int a5, _DWORD *a6) { volatile LONG **v6; // esi char result; // al v6 = this; result = sub_8F2900(this, a2, a3, a4, a5, a6, 0, 0); if ( result ) { sub_5FB6D0(v6); result = 1; } return result; } //----- (005FBAD0) -------------------------------------------------------- int __thiscall sub_5FBAD0(HDC *this, LPCSTR lpString, int a3) { CHAR *v3; // ebx int v4; // esi BYTE v5; // dl signed int v6; // edi BYTE *v7; // esi HDC v8; // eax unsigned int v9; // eax unsigned int v10; // ecx struct tagSIZE psizl; // [esp+8h] [ebp-18h] int v13; // [esp+10h] [ebp-10h] unsigned int v14; // [esp+14h] [ebp-Ch] int v15; // [esp+18h] [ebp-8h] HDC *v16; // [esp+1Ch] [ebp-4h] LPCSTR lpStringa; // [esp+28h] [ebp+8h] v3 = (CHAR *)lpString; v4 = 0; v16 = this; if ( !lpString ) return 0; v5 = *lpString; if ( !*lpString ) return 0; v13 = 0; v14 = 0; v15 = strlen(lpString); while ( IsDBCSLeadByte(v5) ) { v6 = 2; if ( !sub_902790(v16, v3, 2, &psizl, 0, 0, 0, 0) ) { GetTextExtentPoint32A(v16[48], v3, 2, &psizl); if ( v16[63] ) { lpStringa = 0; v7 = (BYTE *)v3; if ( *v3 ) { do { if ( v6 <= 0 ) break; if ( *v7 == 32 ) { --v6; ++v7; } else { ++lpStringa; if ( IsDBCSLeadByte(*v7) ) { v7 += 2; v6 -= 2; } else { ++v7; --v6; } } } while ( *v7 ); } v8 = v16[63]; v4 = v13; psizl.cy += 2 * (_DWORD)v8; psizl.cx += 2 * (_DWORD)lpStringa * (_DWORD)v8; } } v9 = psizl.cx + v14; v10 = a3; v15 -= 2; v4 += 2; v3 += 2; v13 = v4; if ( psizl.cx + v14 > a3 ) { v4 -= 2; goto LABEL_24; } LABEL_19: if ( v9 <= v10 ) { v5 = *v3; v14 = v9; if ( v5 ) { if ( v15 > 0 ) continue; } } goto LABEL_24; } sub_4593C0(v16, v3, 1, &psizl); v9 = v14 + psizl.cx; v10 = a3; --v15; ++v4; ++v3; v13 = v4; if ( v14 + psizl.cx <= a3 ) goto LABEL_19; --v4; LABEL_24: if ( v14 > v10 ) --v4; return v4; } //----- (005FBC40) -------------------------------------------------------- void *__thiscall sub_5FBC40(void *this, char a2) { void *v2; // esi v2 = this; sub_5FB5E0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (005FBC70) -------------------------------------------------------- signed int __thiscall sub_5FBC70(_DWORD *this) { signed int result; // eax result = -1; this[82] = -1; this[83] = -1; this[84] = -1; this[85] = -1; this[86] = -1; this[87] = -1; this[88] = -1; this[89] = -1; this[90] = -1; this[91] = -1; this[92] = -1; this[93] = -1; this[94] = -1; this[95] = -1; this[96] = -1; this[97] = -1; this[98] = -1; this[99] = -1; this[100] = -1; this[101] = -1; this[102] = -1; this[103] = -1; this[104] = -1; this[105] = -1; this[106] = -1; this[107] = -1; this[108] = -1; this[109] = -1; this[110] = -1; this[111] = -1; this[112] = -1; this[113] = -1; this[114] = -1; this[115] = -1; this[116] = -1; this[117] = -1; this[118] = -1; this[119] = -1; this[120] = -1; this[121] = -1; return result; } //----- (005FBD70) -------------------------------------------------------- void __thiscall sub_5FBD70(_DWORD *this) { bool v1; // sf int v2; // eax v1 = this[126]-- - 1 < 0; if ( v1 ) { v2 = this[79]; if ( v2 <= 0 ) this[126] = 0; else this[126] = v2 - 1; } } //----- (005FBDB0) -------------------------------------------------------- char __thiscall sub_5FBDB0(_DWORD *this) { int v1; // eax int v3; // eax v1 = this[126]; if ( v1 == this[124] - 1 ) return 0; v3 = v1 + 1; this[126] = v3; if ( v3 >= this[79] ) this[126] = 0; return 1; } //----- (005FBDE0) -------------------------------------------------------- char __thiscall sub_5FBDE0(_DWORD *this) { int v1; // eax int v2; // edx v1 = this[124] - 1; this[126] = v1; if ( v1 < 0 ) { v2 = this[79]; if ( v2 > 0 ) { this[126] = v1 + v2; return 1; } this[126] = 0; } return 1; } //----- (005FBE20) -------------------------------------------------------- int __thiscall sub_5FBE20(_DWORD *this, int a2) { int result; // eax result = a2; this[170] = a2; return result; } //----- (005FBE30) -------------------------------------------------------- char __thiscall sub_5FBE30(_BYTE *this, char a2) { char result; // al result = a2; this[288] = a2; return result; } //----- (005FBE40) -------------------------------------------------------- char __stdcall sub_5FBE40(char *a1, int a2, int a3) { char *v3; // esi signed int v4; // edi char v5; // al char *v6; // ecx char v8; // [esp+12h] [ebp-106h] char v9; // [esp+13h] [ebp-105h] char v10; // [esp+14h] [ebp-104h] v3 = a1; memset(&v10, 0, 0x100u); v4 = 0; v8 = 0; v9 = 0; if ( !*a1 ) return 0; do { if ( !strncmp(v3, "{color,", 7u) ) { v8 = 1; if ( v9 == 1 ) { v3 = (char *)(v4 + a3); v9 = 0; } v3 += 7; v4 += 7; memset(&v10, 0, 0x100u); v5 = *v3; if ( *v3 ) { v6 = &v10; while ( v5 != 44 ) { ++v3; *v6 = v5; v5 = *v3; ++v6; ++v4; if ( !*v3 ) goto LABEL_9; } } else { LABEL_9: if ( *v3 != 44 ) { v8 = 0; goto LABEL_15; } } sprintf((char *)a2, "{color,%s,", &v10); } else if ( !v8 ) { goto LABEL_15; } if ( *v3 == 125 ) v9 = 1; LABEL_15: ++v3; ++v4; } while ( v4 < (signed int)strlen(a1) && *v3 ); if ( v8 == 1 && !v9 ) return 1; return 0; } //----- (005FBFA0) -------------------------------------------------------- int __thiscall sub_5FBFA0(_DWORD *this, int a2) { int *v2; // eax int result; // eax if ( a2 >= 0 && a2 < this[79] && (v2 = (int *)(this[77] + 4 * a2), *v2) ) result = *v2; else result = 0; return result; } //----- (005FBFD0) -------------------------------------------------------- void __thiscall sub_5FBFD0(_DWORD *this, signed int a2) { _DWORD *v2; // esi signed int v3; // edi signed int i; // edi v2 = this; if ( a2 > 0 ) { this[74] = operator new[](4 * a2); v2[76] = operator new[](4 * a2); v2[77] = operator new[](16 * a2); v2[78] = operator new[](4 * a2); v2[183] = operator new[](a2); v3 = 0; for ( v2[184] = operator new[](4 * a2); v3 < a2; ++v3 ) *(_DWORD *)(v2[77] + 4 * v3) = operator new[](0x100u); for ( i = 0; i < a2; ++i ) { strncpy(*(char **)(v2[77] + 4 * i), " ", 0xFFu); *(float *)(v2[78] + 4 * i) = 0.0; *(_DWORD *)(v2[76] + 4 * i) = 0; *(_BYTE *)(i + v2[183]) = 0; *(_DWORD *)(v2[184] + 4 * i) = v2[73]; } v2[79] = a2; } } //----- (005FC120) -------------------------------------------------------- double __thiscall sub_5FC120(_DWORD *this, int a2) { int v2; // ecx double v3; // st7 float *v4; // ecx bool v5; // c3 double result; // st7 if ( a2 < 0 || a2 >= this[79] ) return 0.0; v2 = this[78]; v3 = *(float *)(v2 + 4 * a2); v4 = (float *)(v2 + 4 * a2); v5 = 0.0 == v3; result = 0.0; if ( !v5 ) result = *v4; return result; } //----- (005FC190) -------------------------------------------------------- unsigned int __thiscall sub_5FC190(const char **this, char *a2) { unsigned int v2; // ebx const char **v3; // edi v2 = 0; v3 = this + 180; while ( 1 ) { *v3; if ( !strncmp(a2, *v3, strlen(*v3)) ) break; ++v2; ++v3; if ( v2 >= 2 ) return 2; } return v2; } //----- (005FC1E0) -------------------------------------------------------- int __stdcall sub_5FC1E0(int a1, int a2) { int v3; // ebx const char *v4; // esi signed int v5; // edi int v6; // eax int v7; // esi char v8; // [esp+7h] [ebp-1h] if ( a1 < 0 || !a2 ) return 0; v3 = 0; v8 = 0; v4 = (const char *)(a1 + a2 - 7); v5 = 0; while ( *v4 ) { if ( !strncmp(v4, "{color,", 7u) ) { v8 = 1; break; } ++v5; ++v3; ++v4; if ( v5 >= 7 ) break; } v6 = 0; if ( v8 ) v6 = 7 - v3; v7 = a1 - v6; if ( IsDBCSLeadByte(*(_BYTE *)(a1 - v6 + a2)) ) { if ( v8 == 1 ) --v7; } return v7; } //----- (005FC270) -------------------------------------------------------- int __thiscall sub_5FC270(_DWORD *this, char *a2, int a3) { _DWORD *v3; // ebx const char *v5; // esi int v6; // ebx int v7; // edi char v8[256]; // [esp+Ch] [ebp-104h] v3 = this; if ( !a2 || a3 < 0 ) return 0; memset(v8, 0, 0x100u); if ( v3[170] ) sub_4E2390(a2, (int)v8, a3); v5 = &v8[a3]; v6 = 0; v7 = a3; do { if ( !v5 ) break; if ( !strncmp(v5--, "<\t", 2u) ) { ++v6; } else if ( !strncmp(v5, "\t>", 2u) && !v6 ) { return 0; } --v7; } while ( v7 >= 0 ); return v6; } // 5FC270: using guessed type char var_104[256]; //----- (005FC370) -------------------------------------------------------- int __thiscall sub_5FC370(_DWORD *this, int a2, char *a3, size_t a4) { _DWORD *v4; // esi unsigned int v5; // eax int result; // eax v4 = this; *(_DWORD *)(this[74] + 4 * this[124]) = a2; strncpy(*(char **)(this[77] + 4 * this[124]), byte_9EAFA4, 0xFFu); *(_DWORD *)(v4[76] + 4 * v4[124]) = a4; *(float *)(v4[78] + 4 * v4[124]) = flt_ACCFCC; strncpy(*(char **)(v4[77] + 4 * v4[124]), a3, a4); if ( a2 == 1024 || a2 == 1544 || a2 == 2048 ) *(_DWORD *)(v4[184] + 4 * v4[124]) = sub_421050(11); else *(_DWORD *)(v4[184] + 4 * v4[124]) = v4[73]; v5 = v4[79]; if ( ++v4[124] >= (signed int)v5 ) v4[124] = 0; if ( ++v4[122] > v5 ) v4[122] = v5; result = v4[124]; if ( result <= 0 ) { v4[126] = -1; } else if ( v4[126] == result - 2 ) { v4[126] = --result; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005FC4A0) -------------------------------------------------------- int __thiscall sub_5FC4A0(_DWORD *this, int a2, char *a3, size_t a4, char a5) { _DWORD *v5; // esi int v6; // eax int v7; // edi unsigned int v8; // eax int result; // eax v5 = this; v6 = this[124]; if ( v6 > this[79] - 40 ) { v7 = 0; if ( v6 - 1 > 0 ) { do { strncpy(*(char **)(v5[77] + 4 * v7), *(const char **)(v5[77] + 4 * v7 + 4), 0xFFu); *(float *)(v5[78] + 4 * v7) = *(float *)(v5[78] + 4 * v7 + 4); *(_DWORD *)(v5[76] + 4 * v7) = *(_DWORD *)(v5[76] + 4 * v7 + 4); *(_BYTE *)(v5[183] + v7) = *(_BYTE *)(v5[183] + v7 + 1); *(_DWORD *)(v5[184] + 4 * v7) = *(_DWORD *)(v5[184] + 4 * v7 + 4); ++v7; } while ( v7 < v5[124] - 1 ); } --v5[124]; } *(_DWORD *)(v5[74] + 4 * v5[124]) = a2; strncpy(*(char **)(v5[77] + 4 * v5[124]), byte_9EAFA8, 0xFFu); *(_DWORD *)(v5[76] + 4 * v5[124]) = a4; *(float *)(v5[78] + 4 * v5[124]) = flt_ACCFCC; strncpy(*(char **)(v5[77] + 4 * v5[124]), a3, a4); *(_BYTE *)(v5[183] + v5[124]) = a5; *(_DWORD *)(v5[184] + 4 * v5[124]) = v5[73]; v8 = v5[79]; if ( ++v5[124] >= (signed int)v8 ) v5[124] = 0; if ( ++v5[122] > v8 ) v5[122] = v8; result = v5[124]; if ( result <= 0 ) { v5[126] = -1; } else if ( v5[126] == result - 2 ) { v5[126] = --result; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005FC630) -------------------------------------------------------- LONG __thiscall sub_5FC630(int *this) { int *v1; // edi _DWORD *v2; // ebx LONG result; // eax _DWORD *v4; // eax int v5; // esi int v6; // edx int v7; // eax int *v8; // esi _DWORD *v9; // eax volatile LONG *v10; // eax int v11; // ebx int v12; // eax double v13; // st7 int v14; // eax int v15; // edx float v16; // ST28_4 int v17; // edx int v18; // ecx struct tagSIZE psizl; // [esp+1Ch] [ebp-34h] int v20; // [esp+24h] [ebp-2Ch] void *v21; // [esp+28h] [ebp-28h] void *v22; // [esp+2Ch] [ebp-24h] struct tagRECT rc; // [esp+30h] [ebp-20h] int v24; // [esp+4Ch] [ebp-4h] v1 = this; v2 = 0; if ( this[73] || (result = sub_421050(1), (v1[73] = result) != 0) ) { v4 = operator new(0xE8u); v21 = v4; v24 = 0; if ( v4 ) v2 = sub_85A1C0(v4, 0); v5 = v1[129]; v24 = -1; if ( (_DWORD *)v5 != v2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[129] = (int)v2; if ( v2 ) InterlockedIncrement(v2 + 1); } (*(void (__thiscall **)(int *, int))(*v1 + 116))(v1, v1[129]); SelectObject(*(HDC *)(v1[73] + 192), *(HGDIOBJ *)(v1[73] + 184)); sub_4593C0((_DWORD *)v1[73], "W", 1, &psizl); v6 = *v1; v20 = -v1[127]; v7 = (*(int (__thiscall **)(int *, LONG))(v6 + 144))(v1, psizl.cy); SetRect(&rc, 0, 0, v7, 0); v8 = v1 + 130; v21 = (void *)40; do { v9 = operator new(0x14Cu); v22 = v9; v24 = 1; if ( v9 ) { v10 = (volatile LONG *)sub_90EEA0(v9, (volatile LONG *)v1[73]); v22 = (void *)v10; } else { v22 = 0; v10 = 0; } v11 = *v8; v24 = -1; if ( (volatile LONG *)v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v10 = (volatile LONG *)v22; } *v8 = (int)v10; if ( v10 ) InterlockedIncrement(v10 + 1); } sub_9074F0(*v8, 1); (*(void (__stdcall **)(struct tagRECT *))(*(_DWORD *)*v8 + 136))(&rc); v12 = *v8; *(_DWORD *)(v12 + 308) = 0; if ( *(_DWORD *)(v12 + 280) != 17 ) { *(_DWORD *)(v12 + 280) = 17; *(_BYTE *)(v12 + 300) = 1; } v13 = (double)v20; *(_BYTE *)(*v8 + 285) = 1; v14 = *v8; v15 = *(_DWORD *)(*v8 + 92); v16 = v13; v17 = *(_DWORD *)(*v8 + 96); *(_DWORD *)(v14 + 88) = *(_DWORD *)(*v8 + 88); *(float *)(v14 + 92) = v16; *(_DWORD *)(v14 + 96) = v17; v18 = v1[129]; v20 += psizl.cy + v1[127]; (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v18 + 116))(*v8, 0); ++v8; v21 = (char *)v21 - 1; } while ( v21 ); result = sub_85C4D0(v1); } return result; } //----- (005FC930) -------------------------------------------------------- void __thiscall sub_5FC930(_DWORD *this, int a2, char *a3) { char *v3; // ebx _DWORD *v4; // esi char *v5; // eax size_t v6; // edi int v7; // eax unsigned int v8; // eax int v9; // eax v3 = a3; v4 = this; if ( a3 ) { v5 = a3; v6 = 0; if ( *a3 ) { while ( 1 ) { if ( *v5 != 10 ) { ++v5; ++v6; goto LABEL_20; } if ( !v6 ) goto LABEL_18; *(_DWORD *)(v4[74] + 4 * v4[124]) = a2; strncpy(*(char **)(v4[77] + 4 * v4[124]), byte_9EAFA4, 0xFFu); *(_DWORD *)(v4[76] + 4 * v4[124]) = v6; *(float *)(v4[78] + 4 * v4[124]) = flt_ACCFCC; strncpy(*(char **)(v4[77] + 4 * v4[124]), v3, v6); if ( a2 == 1024 || a2 == 1544 || a2 == 2048 ) v7 = sub_421050(11); else v7 = v4[73]; *(_DWORD *)(v4[184] + 4 * v4[124]) = v7; v8 = v4[79]; if ( ++v4[124] >= (signed int)v8 ) v4[124] = 0; if ( ++v4[122] > v8 ) v4[122] = v8; v9 = v4[124]; if ( v9 <= 0 ) break; if ( v4[126] != v9 - 2 ) goto LABEL_18; v4[126] = v9 - 1; v5 = a3 + 1; v6 = 0; v3 = a3 + 1; LABEL_20: a3 = v5; if ( !*v5 ) { if ( v6 ) sub_5FC370(v4, a2, v3, v6); return; } } v4[126] = -1; LABEL_18: v5 = a3 + 1; v6 = 0; v3 = a3 + 1; goto LABEL_20; } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (005FCAB0) -------------------------------------------------------- char __thiscall sub_5FCAB0(_DWORD *this, char *a2, int a3) { char *v3; // esi char v4; // bl char v5; // al char *v6; // ecx char *v7; // edi int v8; // esi int v9; // ebx _DWORD *v10; // eax _DWORD *v12; // [esp+10h] [ebp-118h] int v13; // [esp+14h] [ebp-114h] struct tagSIZE psizl; // [esp+18h] [ebp-110h] char *v15; // [esp+20h] [ebp-108h] char v16; // [esp+24h] [ebp-104h] v3 = a2; v12 = this; memset(&v16, 0, 0x100u); v4 = 0; *(_DWORD *)a3 = 0; *(_DWORD *)(a3 + 4) = 0; if ( *a2 ) { do { if ( !strncmp(v3, "{color,", 7u) ) { v5 = v3[7]; v3 += 7; v15 = v3; if ( v5 ) { v6 = &v16; while ( v5 != 44 ) { ++v3; *v6 = v5; v5 = *v3; ++v6; if ( !*v3 ) { v15 = v3; goto LABEL_8; } } v15 = v3; LABEL_11: v7 = sub_7549E0("{color,%s", &v16); v8 = strlen(v7); v13 = v12[73]; if ( !sub_902790((_DWORD *)v13, v7, v8, &psizl, 0, 0, 0, 0) ) { GetTextExtentPoint32A(*(HDC *)(v13 + 192), v7, v8, &psizl); if ( *(_DWORD *)(v13 + 252) ) { v9 = 0; while ( *v7 ) { if ( v8 <= 0 ) break; if ( *v7 == 32 ) { --v8; ++v7; } else { ++v9; if ( IsDBCSLeadByte(*v7) ) { v7 += 2; v8 -= 2; } else { ++v7; --v8; } } } psizl.cy += 2 * *(_DWORD *)(v13 + 252); psizl.cx += 2 * v9 * *(_DWORD *)(v13 + 252); } } v10 = (_DWORD *)a3; *v10 += psizl.cx; v10[1] += psizl.cy; v4 = 1; memset(&v16, 0, 0x100u); v3 = v15; goto LABEL_23; } LABEL_8: if ( *v3 == 44 ) goto LABEL_11; } LABEL_23: ++v3; } while ( *v3 ); } return v4; } //----- (005FCC90) -------------------------------------------------------- char __thiscall sub_5FCC90(_DWORD **this, char *a2, int a3) { char *v3; // esi _DWORD **v4; // ebx char v5; // al char *v6; // ecx char *v8; // eax LONG v9; // eax struct tagSIZE psizl; // [esp+Ch] [ebp-10Ch] char v11; // [esp+14h] [ebp-104h] v3 = a2; v4 = this; if ( !a2 ) return 0; memset(&v11, 0, 0x100u); if ( !*a2 ) return 0; while ( 1 ) { if ( strncmp(v3, "{color,", 7u) ) goto LABEL_9; v5 = v3[7]; v3 += 7; if ( v5 ) break; LABEL_8: if ( *v3 == 44 ) goto LABEL_11; LABEL_9: if ( !*++v3 ) return 0; } v6 = &v11; while ( v5 != 44 ) { ++v3; *v6 = v5; v5 = *v3; ++v6; if ( !*v3 ) goto LABEL_8; } LABEL_11: v8 = sub_7549E0("{color,%s", &v11); sub_4593C0(v4[73], v8, strlen(v8), &psizl); v9 = psizl.cx; *(_DWORD *)(a3 + 4) -= psizl.cy; *(_DWORD *)a3 -= v9; return 1; } //----- (005FCD90) -------------------------------------------------------- int __thiscall sub_5FCD90(_DWORD *this, LPCSTR lpString, int a3, int a4) { const char *v4; // esi int v5; // edi const char *v7; // eax char v8; // bl _BYTE *v9; // esi int i; // edi struct tagSIZE psizl; // [esp+8h] [ebp-10h] int v12; // [esp+10h] [ebp-8h] _DWORD *v13; // [esp+14h] [ebp-4h] LPCSTR lpStringa; // [esp+20h] [ebp+8h] v4 = lpString; v5 = 0; v13 = this; if ( !lpString ) return -1; v7 = lpString; lpStringa = 0; v8 = 0; v12 = &v7[strlen(v7)] - v4; if ( *v4 ) { while ( v12 > v5 ) { if ( !strncmp(v4, "{color,", 7u) ) { v9 = v4 + 7; for ( i = v5 + 7; *v9 != 44; ++i ) ++v9; v5 = i + 1; v4 = v9 + 1; v8 = 1; } if ( !strncmp(v4, "}", 1u) && v8 ) { v8 = 0; ++v5; ++v4; } else { if ( IsDBCSLeadByte(*v4) ) { sub_4593C0(*(_DWORD **)(v13[184] + 4 * a4), v4, 2, &psizl); v5 += 2; v4 += 2; } else { sub_4593C0(*(_DWORD **)(v13[184] + 4 * a4), v4, 1, &psizl); ++v5; ++v4; } lpStringa += psizl.cx; if ( (signed int)lpStringa > a3 ) return v5; } if ( !*v4 ) return v5; } } return v5; } //----- (005FCEA0) -------------------------------------------------------- void __thiscall sub_5FCEA0(_DWORD *this, int a2, char *a3) { char *v3; // esi _DWORD *v4; // edi size_t v5; // eax char *v6; // ecx v3 = a3; v4 = this; if ( a3 ) { if ( a2 & this[128] ) { v5 = 0; v6 = a3; if ( *a3 ) { do { if ( *v3 == 10 ) { if ( v5 ) sub_5FC370(v4, a2, v6, v5); ++v3; v5 = 0; v6 = v3; } else { ++v3; ++v5; } } while ( *v3 ); if ( v5 ) sub_5FC370(v4, a2, v6, v5); } } } } //----- (005FCF00) -------------------------------------------------------- void __thiscall sub_5FCF00(_DWORD *this, int a2, char *a3, char a4) { _DWORD *v4; // edi char *v5; // ecx int v6; // edx size_t v7; // eax char *v8; // esi v4 = this; v5 = a3; if ( a3 ) { v6 = a2; if ( a2 & v4[128] ) { v7 = 0; v8 = a3; if ( *a3 ) { do { if ( *v8 == 10 ) { if ( v7 ) { sub_5FC4A0(v4, v6, v5, v7, a4); v6 = a2; } ++v8; v7 = 0; v5 = v8; } else { ++v8; ++v7; } } while ( *v8 ); if ( v7 ) sub_5FC4A0(v4, v6, v5, v7, a4); } } } } //----- (005FCF60) -------------------------------------------------------- char __thiscall sub_5FCF60(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx int v3; // edi unsigned int v4; // eax unsigned int v5; // ecx unsigned int v7; // ebx int v8; // edi int v9; // ST14_4 char v10; // al const CHAR *v11; // edi int v12; // eax signed int v13; // [esp+Ch] [ebp-8h] int i; // [esp+10h] [ebp-4h] v1 = this; v2 = *(_DWORD *)(this[73] + 224); v3 = this[127]; v4 = (*(int (**)(void))(*this + 148))() + 2 * v3; v5 = v1[122]; if ( v5 > v4 / (v2 + v3) ) { v7 = v1[126]; if ( (v7 & 0x80000000) == 0 && v5 >= v7 ) { v8 = v1[127]; v9 = *(_DWORD *)(v1[73] + 224); v13 = ((*(int (__thiscall **)(_DWORD *))(*v1 + 148))(v1) + 2 * v8) / (unsigned int)(v9 + v8); while ( 1 ) { while ( 1 ) { v10 = 0; if ( *(_DWORD *)(v1[74] + 4 * v7) == 24576 ) v10 = 1; if ( !*((_BYTE *)v1 + 324) || !v10 || *((_BYTE *)v1 + 325) ) break; if ( (--v7 & 0x80000000) != 0 ) v7 += v1[79]; } v11 = *(const CHAR **)(v1[77] + 4 * v7); if ( !v11 || v7 == v1[124] ) break; for ( i = 0; *v11; v11 += sub_5FBAD0(*(HDC **)(v1[184] + 4 * v7), v11, v12) ) { v12 = (*(int (__thiscall **)(_DWORD *))(*v1 + 144))(v1); ++i; } v13 -= i; if ( v13 < 0 ) { sub_5FBD70(v1); return 1; } if ( (--v7 & 0x80000000) != 0 ) v7 += v1[79]; } } } return 0; } //----- (005FD090) -------------------------------------------------------- char __thiscall sub_5FD090(int *this, int a2, int a3, int a4, int a5, int a6, char a7, _DWORD *a8) { int *v8; // esi char result; // al int v10; // eax volatile LONG *v11; // eax v8 = this; result = sub_8F2900(this, a2, a3, a4, a5, a8, 0, 0); if ( result ) { v8[73] = a6; sub_5FC630(v8); *((_BYTE *)v8 + 688) = a7; v10 = sub_43D0D0(1u); v11 = sub_58E5D0(v10, 4, 4, 0); v8[173] = (int)v11; (**((void (__stdcall ***)(int))v11 + 58))((int)(v8 + 58)); sub_58D930((_DWORD *)v8[173], 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8[173] + 256))(0); result = 1; } return result; } //----- (005FD130) -------------------------------------------------------- char __thiscall sub_5FD130(int **this) { int **v1; // edi void (__thiscall *v2)(int **, POINT *, LONG *); // edx int v3; // ebx int *v4; // eax int *v5; // esi int v6; // eax int *v7; // ecx int v8; // eax int v9; // edx unsigned int v10; // eax double v11; // st7 int v12; // esi int v13; // eax void (__thiscall *v14)(int **, unsigned int *, LONG *); // edx signed int v16; // ebx signed int v17; // ecx char v18; // dl int v19; // ebx int v20; // eax int i; // eax int v22; // eax char v23; // dl bool v24; // zf char *v25; // eax const char *v26; // esi int v27; // eax int v28; // ecx float v29; // edx int v30; // eax POINT v31; // [esp+Ch] [ebp-430h] unsigned int v32; // [esp+14h] [ebp-428h] int **v33; // [esp+18h] [ebp-424h] float v34; // [esp+1Ch] [ebp-420h] char v35; // [esp+23h] [ebp-419h] char v36[4]; // [esp+24h] [ebp-418h] int v37; // [esp+28h] [ebp-414h] int v38; // [esp+2Ch] [ebp-410h] float v39; // [esp+30h] [ebp-40Ch] int v40; // [esp+34h] [ebp-408h] char v41; // [esp+38h] [ebp-404h] char v42; // [esp+39h] [ebp-403h] v1 = this; v2 = (void (__thiscall *)(int **, POINT *, LONG *))(*this)[56]; v31 = pt; v35 = 0; v2(this, &v31, &v31.y); v3 = 0; v33 = v1 + 130; while ( 1 ) { ((void (__thiscall *)(int **))(*v1)[37])(v1); v4 = *v1; v5 = v1[127]; v34 = *((float *)v1[73] + 56); v6 = ((int (__thiscall *)(int **))v4[37])(v1); v32 = (v6 + 2 * (signed int)v5) % ((unsigned int)v5 + LODWORD(v34)); v34 = (double)v32; v7 = *v33; v8 = (*v33)[22]; v39 = *((float *)*v33 + 23); v9 = *v7; v38 = v8; v40 = v7[24]; v34 = v39 + v34; v10 = (*(int (**)(void))(v9 + 160))(); v11 = v34; *(float *)&v32 = (double)v10 + v34; v34 = (double)v31.y; if ( v34 > v11 && *(float *)&v32 > (double)v34 ) break; ++v33; if ( (unsigned int)++v3 >= 0x28 ) return v35; } v12 = (*(int (**)(void))(*v1[v3 + 130] + 152))(); v13 = ((int (__thiscall *)(int **))(*v1)[36])(v1); sub_5FBAD0((HDC *)v1[184][v3], (LPCSTR)v12, v13); v14 = (void (__thiscall *)(int **, unsigned int *, LONG *))(*v1)[56]; v32 = 416; v14(v1, &v32, &v31.y); if ( !v12 ) return 0; v16 = strlen((const char *)v12); v33 = (int **)v16; v41 = 0; memset(&v42, 0, 0x3FFu); v17 = 0; v18 = 0; if ( *(_BYTE *)v12 == 91 ) { if ( *(_BYTE *)(v12 + 1) == 91 ) v18 = 1; v17 = 0; if ( v16 > 0 ) { v19 = 1 - v12; LODWORD(v34) = 1 - v12; while ( v33 != (int **)(v12 + v17 + v19) ) { if ( *(_BYTE *)(v12 + v17) == 93 ) { if ( !v18 ) goto LABEL_33; *(&v41 + v17) = *(_BYTE *)(v12 + v17 + 1); v18 = 0; } else { *(&v41 + v17) = *(_BYTE *)(v12 + v17 + 1); } if ( ++v17 >= (signed int)v33 ) return v35; v19 = LODWORD(v34); } } } else if ( *(_BYTE *)v12 == 123 ) { v20 = 0; do ++v20; while ( *(_BYTE *)(v20 + v12) != 44 ); for ( i = v20 + 1; *(_BYTE *)(i + v12) != 44; ++i ) ; v22 = i + 1; if ( v22 < v16 ) { while ( 1 ) { v23 = *(_BYTE *)(v22 + v12); if ( v23 == 125 ) break; if ( v23 != 91 || *(_BYTE *)(v22 + v12 + 1) == 91 ) *(&v41 + v17++) = v23; if ( ++v22 >= v16 ) return v35; } LABEL_33: if ( v17 > 2 ) { v24 = *((_BYTE *)v1 + 288) == 0; *((_BYTE *)&v40 + v17 + 3) = 0; if ( v24 ) { v34 = COERCE_FLOAT(sub_402BF0(v1)); if ( v34 != 0.0 ) { v25 = strtok(&v41, " "); if ( v25 ) { do { v26 = v25; v25 = strtok(0, " "); } while ( v25 ); if ( v26 ) { if ( strlen(v26) ) { v40 = 0; v39 = 0.0; v38 = 0; v37 = 0; *(_DWORD *)v36 = 0; strncpy(v36, v26, 0x14u); dword_ACEB14 = v38; *(_DWORD *)dword_ACEB0C = *(_DWORD *)v36; dword_ACEB10 = v37; dword_ACEB18 = LODWORD(v39); dword_ACEB1C = v40; v40 = 0; v39 = 0.0; v38 = 0; v37 = 0; *(_DWORD *)v36 = 0; strncpy(v36, v26, 0x14u); v27 = v37; v28 = v38; v1[174] = *(int **)v36; v29 = v39; v1[175] = (int *)v27; v30 = v40; v1[176] = (int *)v28; *((float *)v1 + 177) = v29; v1[178] = (int *)v30; } } } sub_6068C0((_DWORD *)LODWORD(v34), 0); BYTE2(dword_AD0354) = 1; v35 = 1; } } } } } return v35; } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // AD0354: using guessed type int dword_AD0354; //----- (005FD5C0) -------------------------------------------------------- void __thiscall sub_5FD5C0(_DWORD *this, int a2, const char *a3) { _DWORD *v3; // edi char v4; // [esp+8h] [ebp-204h] char v5; // [esp+9h] [ebp-203h] v3 = this; if ( a3 ) { v4 = 0; memset(&v5, 0, 0x1FFu); strcpy(&v4, a3); sub_5FCEA0(v3, a2, &v4); } } //----- (005FD640) -------------------------------------------------------- void __thiscall sub_5FD640(_DWORD *this, int a2, const char *a3, char a4) { _DWORD *v4; // edi char v5; // [esp+8h] [ebp-204h] char v6; // [esp+9h] [ebp-203h] v4 = this; if ( a3 ) { v5 = 0; memset(&v6, 0, 0x1FFu); strcpy(&v5, a3); sub_5FCF00(v4, a2, &v5, a4); } } //----- (005FD6C0) -------------------------------------------------------- void __thiscall sub_5FD6C0(_DWORD *this, const char *a2) { char v2; // [esp+4h] [ebp-204h] strcpy(&v2, a2); sub_5FCEA0(this, 1, &v2); } //----- (005FD710) -------------------------------------------------------- void __thiscall sub_5FD710(_DWORD *this, const char *a2, char a3) { char v3; // [esp+4h] [ebp-204h] strcpy(&v3, a2); sub_5FCF00(this, 1, &v3, a3); } //----- (005FD760) -------------------------------------------------------- void __thiscall sub_5FD760(_DWORD *this, const char *a2) { char v2; // [esp+4h] [ebp-204h] strcpy(&v2, a2); sub_5FCEA0(this, 1024, &v2); } //----- (005FD7B0) -------------------------------------------------------- char __thiscall sub_5FD7B0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // edx int v5; // ebx int v6; // edi unsigned int v7; // eax int v8; // edi signed int v9; // ebx int (__thiscall *v10)(_DWORD *); // edx _DWORD *v11; // eax int v12; // edx int v13; // ecx int v14; // edx int v15; // edi int v16; // edi CHAR *v17; // edi bool v18; // zf int v19; // eax int v20; // ebx int v21; // eax int v22; // eax LPCSTR v23; // ecx int v24; // ebx signed int v25; // ecx _DWORD *v26; // edx const CHAR *v27; // ecx size_t v28; // eax int *v29; // edi int v30; // eax char *v31; // ebx int v32; // ebx char *v33; // eax int (__thiscall *v34)(_DWORD *); // edx int v35; // eax int v36; // eax int v37; // eax LPCSTR v38; // ebx char v39; // al int v40; // ecx int v41; // ebx _DWORD *v42; // eax signed int v43; // eax char v44; // al char *v45; // ecx int v46; // ebx char *v47; // eax const CHAR *v48; // ecx void (__thiscall *v49)(const CHAR *, char *); // edx unsigned __int8 *v50; // eax int v51; // ebx unsigned __int8 v52; // dl int v53; // ebx unsigned __int8 *v54; // eax unsigned int v55; // ebx _BYTE *v56; // eax int v57; // ebx unsigned __int8 v58; // ST10_1 unsigned __int8 v59; // dl unsigned __int8 *v60; // eax int v61; // ebx _BYTE *v62; // eax signed int v63; // ebx size_t v64; // edi void (__stdcall *v65)(void *); // eax int v66; // edi unsigned __int8 v67; // [esp-18h] [ebp-988h] unsigned __int8 v68; // [esp-14h] [ebp-984h] unsigned __int8 v69; // [esp-10h] [ebp-980h] unsigned int v70; // [esp-Ch] [ebp-97Ch] char v71; // [esp+4h] [ebp-96Ch] char v72; // [esp+14h] [ebp-95Ch] char v73; // [esp+24h] [ebp-94Ch] char v74; // [esp+34h] [ebp-93Ch] char v75; // [esp+44h] [ebp-92Ch] char v76; // [esp+54h] [ebp-91Ch] char v77; // [esp+64h] [ebp-90Ch] char v78; // [esp+74h] [ebp-8FCh] char v79; // [esp+84h] [ebp-8ECh] char v80; // [esp+94h] [ebp-8DCh] char v81; // [esp+A4h] [ebp-8CCh] char v82; // [esp+B4h] [ebp-8BCh] char v83; // [esp+C4h] [ebp-8ACh] char v84; // [esp+D4h] [ebp-89Ch] char v85; // [esp+E4h] [ebp-88Ch] char v86; // [esp+F4h] [ebp-87Ch] char v87; // [esp+104h] [ebp-86Ch] char v88; // [esp+114h] [ebp-85Ch] char v89; // [esp+124h] [ebp-84Ch] char v90; // [esp+134h] [ebp-83Ch] char v91; // [esp+144h] [ebp-82Ch] unsigned int v92; // [esp+148h] [ebp-828h] struct tagSIZE psizl; // [esp+150h] [ebp-820h] char v94; // [esp+15Ah] [ebp-816h] char v95; // [esp+15Bh] [ebp-815h] size_t v96; // [esp+15Ch] [ebp-814h] int v97; // [esp+160h] [ebp-810h] LPCSTR lpString; // [esp+164h] [ebp-80Ch] const CHAR *v99; // [esp+168h] [ebp-808h] char v100; // [esp+16Ch] [ebp-804h] char v101; // [esp+16Dh] [ebp-803h] char v102; // [esp+56Ch] [ebp-404h] char v103[256]; // [esp+66Ch] [ebp-304h] char v104[256]; // [esp+76Ch] [ebp-204h] CHAR String; // [esp+86Ch] [ebp-104h] v2 = this; result = sub_8F3540(this); if ( result && v2[77] ) { v4 = *v2; v5 = v2[127]; v6 = *(_DWORD *)(v2[73] + 224); v97 = v2[126]; v7 = ((*(int (__thiscall **)(_DWORD *))(v4 + 148))(v2) + 2 * v5) / (unsigned int)(v5 + v6); v8 = v2[127]; lpString = *(LPCSTR *)(v2[73] + 224); v9 = v7 - 1; v10 = *(int (__thiscall **)(_DWORD *))(*v2 + 148); v96 = v7 - 1; v92 = (v10(v2) + 2 * v8) % (unsigned int)&lpString[v8]; v11 = (_DWORD *)v2[129]; *(float *)&lpString = (double)v92; v12 = v11[23]; v13 = v11[22]; psizl.cx = (LONG)lpString; v14 = v11[24]; v11[22] = v13; v11[23] = psizl.cx; v11[24] = v14; if ( v9 < 39 ) { v15 = (int)(v2 + 169); lpString = (LPCSTR)(39 - v9); do { (*(void (__stdcall **)(void *))(**(_DWORD **)v15 + 148))(&unk_9EAF8A); v15 -= 4; --lpString; } while ( *(float *)&lpString != 0.0 ); } v95 = 0; if ( v9 >= 0 ) { v16 = v97; while ( 1 ) { if ( v16 < 0 ) { if ( v2[79] != 100 ) OutputDebugStringA(&byte_9EAF8B); if ( v95 == 1 ) { if ( v9 >= 0 ) { v66 = (int)&v2[v9 + 130]; do { (*(void (__stdcall **)(void *))(**(_DWORD **)v66 + 148))(&unk_9EAFA1); v66 -= 4; --v9; } while ( v9 >= 0 ); } goto LABEL_126; } if ( v2[80] <= 0 ) v16 = 0; else v16 += v2[79]; v97 = v16; v95 = 1; } if ( *(_DWORD *)(v2[74] + 4 * v16) != v2[75] ) break; if ( *((_BYTE *)v2 + 325) ) goto LABEL_21; v97 = --v16; LABEL_117: if ( v9 < 0 ) goto LABEL_126; } if ( v2[79] != 100 ) OutputDebugStringA(&byte_9EAFA2); LABEL_21: v17 = *(CHAR **)(v2[77] + 4 * v16); v99 = v17; if ( v17 ) { memset(&String, 0, 0x100u); v18 = *v17 == 0; v94 = 0; *(float *)&lpString = 0.0; if ( !v18 ) { do { v19 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2); v20 = sub_5FBAD0(*(HDC **)(v2[184] + 4 * v97), v17, v19); v100 = 0; memset(&v101, 0, 0x3FFu); strncpy(&v100, v17, v20); if ( sub_5FCAB0(v2, &v100, (int)&psizl) || sub_5FCC90((_DWORD **)v2, v17, (int)&psizl) ) { v21 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2); v22 = sub_5FBAD0(*(HDC **)(v2[184] + 4 * v97), v17, psizl.cx + v21); v20 = sub_5FC1E0(v22, (int)v17); } ++lpString; v17 += v20; } while ( *v17 ); } v23 = lpString; v92 = v96 - (_DWORD)lpString; if ( (signed int)(v96 - (_DWORD)lpString + 1) < 0 ) { if ( (v96 & 0x80000000) == 0 ) { v63 = v96; v64 = (size_t)&v2[v96 + 130]; do { v65 = *(void (__stdcall **)(void *))(**(_DWORD **)v64 + 148); v64 -= 4; v65(&unk_9EAFA3); --v63; } while ( v63 >= 0 ); } goto LABEL_126; } lpString = v99; v24 = (int)(v23 - 1); if ( v95 == 1 ) { v25 = 0; v26 = v2 + 82; while ( *v26 != v97 ) { ++v25; ++v26; if ( v25 >= 40 ) goto LABEL_32; } --v97; goto LABEL_116; } LABEL_32: v27 = v99; v28 = v96 - v24; v2[v96 - v24 + 82] = v97; if ( *v27 ) { v29 = &v2[v28 + 130]; do { v30 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2); v31 = (char *)lpString; v96 = sub_5FBAD0(*(HDC **)(v2[184] + 4 * v97), lpString, v30); if ( v94 == 1 ) { sub_4593C0(*(_DWORD **)(v2[184] + 4 * v97), &String, strlen(&String), &psizl); v96 = 0; strncpy(v103, lpString, strlen(v31) + 1); v32 = 0; while ( 1 ) { if ( !strncmp(&v103[v32], "{color,", 7u) ) { LABEL_39: v33 = sub_7549E0("%s%s", &String, lpString); goto LABEL_40; } if ( !strncmp(&v103[v32], "<\t", 2u) ) break; ++v96; if ( ++v32 >= 10 ) goto LABEL_39; } v33 = sub_7549E0("%s%s", &String, &v103[v96]); LABEL_40: v31 = v33; v34 = *(int (__thiscall **)(_DWORD *))(*v2 + 144); lpString = v33; v94 = 0; v35 = v34(v2); v96 = sub_5FBAD0(*(HDC **)(v2[184] + 4 * v97), v31, v35); } memset(&v102, 0, 0x100u); strncpy(&v102, v31, v96); if ( sub_5FCAB0(v2, &v102, (int)&psizl) || sub_5FCC90((_DWORD **)v2, v31, (int)&psizl) ) { v36 = (*(int (__thiscall **)(_DWORD *))(*v2 + 144))(v2); v37 = sub_5FBAD0(*(HDC **)(v2[184] + 4 * v97), v31, psizl.cx + v36); v96 = sub_5FC1E0(v37, (int)v31); } if ( !*v29 ) goto LABEL_112; memset(v104, 0, 0x100u); v38 = lpString; strncpy(v104, lpString, v96); v104[v96] = 0; v39 = sub_5FBE40(v104, (int)&String, (int)v38); v40 = *v29; v94 = v39; (*(void (__stdcall **)(char *))(*(_DWORD *)v40 + 148))(v104); v41 = v97; v42 = (_DWORD *)(v2[184] + 4 * v97); if ( *(_DWORD *)(*v29 + 312) != *v42 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v29 + 144))(*v42); sub_9074F0(*v29, 1); *(_DWORD *)(*v29 + 328) = v41; v43 = *(_DWORD *)(v2[74] + 4 * v41); if ( v43 > 512 ) { if ( v43 > 4112 ) { switch ( v43 ) { case 8192: v53 = *v29; if ( !dword_ACD914 ) { v69 = -1; v68 = dword_ACD914; v67 = -1; goto LABEL_108; } v62 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x36u); if ( v62 ) { v69 = v62[6]; v68 = v62[5]; v67 = v62[4]; LABEL_108: sub_419EE0((float *)&v88, v67, v68, v69, 0xFFu); } else { sub_419EE0((float *)&v88, 0xFFu, 0, 0xFFu, 0xFFu); } v47 = &v88; LABEL_110: v49 = *(void (__thiscall **)(const CHAR *, char *))(*(_DWORD *)v53 + 176); v48 = (const CHAR *)v53; goto LABEL_111; case 16384: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v81, 7u); goto LABEL_57; case 24576: v61 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_419EE0((float *)&v83, 0xFFu, 0xFFu, 0, 0xFFu); v48 = v99; v49 = *(void (__thiscall **)(const CHAR *, char *))(v61 + 176); goto LABEL_111; } } else { if ( v43 == 4112 ) { v53 = *v29; if ( dword_ACD914 ) { v60 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x35u); if ( v60 ) sub_419EE0((float *)&v89, v60[4], v60[5], v60[6], 0xFFu); else sub_419EE0((float *)&v89, 0xFFu, 0, 0xFFu, 0xFFu); v47 = &v89; } else { sub_419EE0((float *)&v89, 0xFFu, dword_ACD914, 0xFFu, 0xFFu); v47 = &v89; } goto LABEL_110; } if ( v43 > 2048 ) { if ( v43 == 4096 ) { v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v85, 0x25u); goto LABEL_57; } } else { switch ( v43 ) { case 2048: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v86, 0x27u); goto LABEL_57; case 1024: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v72, 0x26u); goto LABEL_57; case 1544: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v80, 0x28u); LABEL_57: v48 = v99; v49 = *(void (__thiscall **)(const CHAR *, char *))(v46 + 176); LABEL_111: v49(v48, v47); break; } } } } else { if ( v43 != 512 ) { if ( v43 > 16 ) { switch ( v43 ) { case 32: v70 = 32; v45 = &v78; LABEL_56: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)v45, v70); goto LABEL_57; case 64: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v84, 0x21u); goto LABEL_57; case 128: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v74, 0x23u); goto LABEL_57; case 256: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v82, 0xEu); goto LABEL_57; default: goto LABEL_112; } goto LABEL_112; } if ( v43 != 16 ) { switch ( v43 ) { case 1: v44 = *(_BYTE *)(v97 + v2[183]); if ( !v44 ) { v70 = 27; v45 = &v73; goto LABEL_56; } v50 = sub_417C60(v44); if ( !v50 ) goto LABEL_112; v51 = *(_DWORD *)*v29; v52 = v50[2]; v99 = (const CHAR *)*v29; v47 = (char *)sub_419EE0((float *)&v79, v50[1], v52, v50[3], 0xFFu); v48 = v99; v49 = *(void (__thiscall **)(const CHAR *, char *))(v51 + 176); break; case 2: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v77, 0x1Du); goto LABEL_57; case 4: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v75, 0x24u); goto LABEL_57; case 8: v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v87, 0x1Eu); goto LABEL_57; default: goto LABEL_112; } goto LABEL_111; } v46 = *(_DWORD *)*v29; v99 = (const CHAR *)*v29; v47 = (char *)sub_4B1B10((float *)&v71, 0x1Fu); goto LABEL_57; } v91 = *(_BYTE *)(v41 + v2[183]); if ( !v91 ) { v53 = *v29; if ( dword_ACD914 ) { v54 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x1Cu); if ( v54 ) sub_419EE0((float *)&v90, v54[4], v54[5], v54[6], 0xFFu); else sub_419EE0((float *)&v90, 0xFFu, 0, 0xFFu, 0xFFu); v47 = &v90; } else { sub_419EE0((float *)&v90, 0xFFu, dword_ACD914, 0xFFu, 0xFFu); v47 = &v90; } goto LABEL_110; } v55 = 0; if ( sub_417C40() ) { while ( 1 ) { v56 = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9CDC + 4), v55); if ( *v56 == v91 ) break; if ( ++v55 >= sub_417C40() ) goto LABEL_112; } v57 = *(_DWORD *)*v29; v58 = v56[3]; v59 = v56[1]; v99 = (const CHAR *)*v29; v47 = (char *)sub_419EE0((float *)&v76, v59, v56[2], v58, 0xFFu); v48 = v99; v49 = *(void (__thiscall **)(const CHAR *, char *))(v57 + 176); goto LABEL_111; } } LABEL_112: ++v29; v18 = lpString[v96] == 0; lpString += v96; } while ( !v18 ); } v96 = v92; } else { (*(void (__stdcall **)(void *))(*(_DWORD *)v2[v9 + 130] + 148))(&unk_9EAFA6); v96 = v9 - 1; } --v97; LABEL_116: v16 = v97; v9 = v96; goto LABEL_117; } LABEL_126: result = sub_5FBC70(v2); } return result; } // AC9CDC: using guessed type int dword_AC9CDC; // ACD914: using guessed type int dword_ACD914; // 5FD7B0: using guessed type char var_204[256]; // 5FD7B0: using guessed type char var_304[256]; //----- (005FE430) -------------------------------------------------------- char __thiscall sub_5FE430(_DWORD *this, LPCSTR lpString, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // edx int v7; // edi int v8; // esi int v9; // eax int v10; // edx int (*v11)(void); // eax int v12; // ebx int v13; // esi int v14; // edi int v15; // esi int v16; // edi _DWORD *v17; // edi size_t v18; // ST08_4 const char *v19; // eax int v20; // edi const char *v21; // esi int v22; // edx unsigned int v23; // eax int v24; // ebx int v25; // esi size_t v26; // ST08_4 const char *v27; // eax int v28; // esi _DWORD *v29; // edx int **v30; // ebx int v31; // ecx int v32; // eax int *v33; // eax int v34; // ecx const CHAR *v35; // eax unsigned __int16 *v37; // ecx _DWORD *v38; // eax void (__thiscall ***v39)(_DWORD, signed int); // esi _DWORD *v40; // [esp+10h] [ebp-420h] int v41; // [esp+14h] [ebp-41Ch] int v42; // [esp+18h] [ebp-418h] int v43; // [esp+1Ch] [ebp-414h] int v44; // [esp+20h] [ebp-410h] _DWORD *v45; // [esp+24h] [ebp-40Ch] int v46; // [esp+28h] [ebp-408h] char v47[1024]; // [esp+2Ch] [ebp-404h] char v48[1024]; // [esp+2Dh] [ebp-403h] v4 = this; v45 = this; v46 = a4; v5 = sub_5FCD90(this, lpString, a3, a4); v6 = v4[a4 + 130]; v7 = *(_DWORD *)(v4[73] + 224); v8 = v4[127]; v42 = v5; v9 = *(_DWORD *)(v6 + 328); v10 = *v45; v43 = v9; v11 = *(int (**)(void))(v10 + 148); v12 = 0; v44 = 0; v41 = (v11() + 2 * v8) / (unsigned int)(v7 + v8); memset(v47, 0, 0x400u); v13 = a4 - 1; if ( a4 - 1 >= 0 ) { v14 = (int)&v45[v13 + 130]; do { if ( (*(int (**)(void))(**(_DWORD **)v14 + 152))() ) { if ( v43 != *(_DWORD *)(*(_DWORD *)v14 + 328) ) break; ++v12; } v14 -= 4; --v13; } while ( v13 >= 0 ); } v15 = v46 + 1; if ( v46 + 1 < v41 ) { v16 = (int)&v45[v15 + 130]; do { if ( (*(int (**)(void))(**(_DWORD **)v16 + 152))() ) { if ( v43 != *(_DWORD *)(*(_DWORD *)v16 + 328) ) break; ++v44; } ++v15; v16 += 4; } while ( v15 < v41 ); } if ( v12 ) { if ( v12 < 0 ) { LABEL_25: v17 = v45; goto LABEL_26; } v40 = (_DWORD *)(v46 - v12); v20 = (int)&v45[v46 - v12 + 130]; while ( 1 ) { if ( (signed int)v40 < 0 ) return 0; v21 = (const char *)(*(int (**)(void))(**(_DWORD **)v20 + 152))(); if ( v21 ) { if ( &v47[strlen(v47) + 1] == v48 ) { strncpy(v47, v21, strlen(v21)); v22 = (int)(v21 + 1); v23 = (unsigned int)&v21[strlen(v21) + 1]; LABEL_23: v42 += v23 - v22; goto LABEL_24; } strncat(v47, v21, strlen(v21)); if ( v12 ) { v22 = (int)(v21 + 1); v23 = (unsigned int)&v21[strlen(v21) + 1]; goto LABEL_23; } } LABEL_24: v40 = (_DWORD *)((char *)v40 + 1); v20 += 4; if ( --v12 < 0 ) goto LABEL_25; } } v17 = v45; v18 = strlen((const char *)(*(int (**)(void))(*(_DWORD *)v45[v46 + 130] + 152))()); v19 = (const char *)(*(int (**)(void))(*(_DWORD *)v45[v46 + 130] + 152))(); strncpy(v47, v19, v18); LABEL_26: if ( v44 ) { v24 = v44; if ( v44 < v41 ) { v25 = (int)&v17[v44 + 130 + v46]; do { if ( v24 + v46 >= v41 ) break; if ( (*(int (**)(void))(**(_DWORD **)v25 + 152))() ) { if ( v43 != *(_DWORD *)(*(_DWORD *)v25 + 328) ) break; v26 = strlen((const char *)(*(int (**)(void))(**(_DWORD **)v25 + 152))()); v27 = (const char *)(*(int (**)(void))(**(_DWORD **)v25 + 152))(); strncat(v47, v27, v26); } ++v24; v25 += 4; } while ( v24 < v41 ); } } if ( v42 >= (signed int)strlen(v47) ) return 0; v28 = sub_5FC270(v17, v47, v42); if ( !v28 ) return 0; v29 = (_DWORD *)v17[188]; if ( (_DWORD *)*v29 == v29 ) return 0; v30 = (int **)v17[170]; v44 = (int)v30; if ( !v30 ) return 0; v31 = (int)v29; v32 = v29[1]; if ( !*(_BYTE *)(v32 + 33) ) { do { if ( *(_DWORD *)(v32 + 12) >= v43 ) { v31 = v32; v32 = *(_DWORD *)v32; } else { v32 = *(_DWORD *)(v32 + 8); } } while ( !*(_BYTE *)(v32 + 33) ); v30 = (int **)v44; } v44 = v31; if ( (_DWORD *)v31 == v29 || v43 < *(_DWORD *)(v31 + 12) ) { v40 = v29; v33 = (int *)&v40; } else { v33 = &v44; } v34 = *v33; if ( (_DWORD *)*v33 == v29 || v28 > (*(_DWORD *)(v34 + 20) - *(_DWORD *)(v34 + 16)) / 103 ) goto LABEL_58; v37 = *(unsigned __int16 **)(v34 + 16); if ( v28 - 1 > 0 ) v37 = (unsigned __int16 *)((char *)v37 + 103 * (v28 - 1)); v38 = sub_6876E0(v37); v39 = (void (__thiscall ***)(_DWORD, signed int))v38; if ( !v38 ) { LABEL_58: v35 = sub_4090F0(691763071); sub_492060(v30, (int)v35); return 0; } sub_4A6140(v30, (int)v38, pt.x, pt.y); (**v39)(v39, 1); return 1; } // 5FE430: using guessed type char var_404[1024]; //----- (005FE890) -------------------------------------------------------- void __thiscall sub_5FE890(const char **this, char *a2) { const char **v2; // edi unsigned int v3; // eax const char *v4; // edi const char *v5; // ecx size_t v6; // edi bool v7; // cf char *v8; // [esp+Ch] [ebp-2Ch] size_t v9; // [esp+1Ch] [ebp-1Ch] unsigned int v10; // [esp+20h] [ebp-18h] int v11; // [esp+34h] [ebp-4h] v2 = this; v3 = sub_5FC190(this, a2); if ( v3 != 2 ) { v4 = v2[v3 + 180]; v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4018E0(&v8, a2, strlen(a2)); v11 = 0; sub_4014F0(&v8, 0, strlen(v4)); v5 = v8; v6 = v9; if ( v10 < 0x10 ) v5 = (const char *)&v8; strncpy(a2, v5, v9); v7 = v10 < 0x10; a2[v6] = 0; if ( !v7 ) operator delete(v8); } } //----- (005FE980) -------------------------------------------------------- void __userpurge sub_5FE980(int a1@, int a2@, int a3, signed int *a4, int a5) { int v5; // ebx volatile LONG *v6; // eax const CHAR *v7; // eax volatile LONG *v8; // eax const CHAR *v9; // eax volatile LONG *v10; // eax const CHAR *v11; // eax volatile LONG *v12; // eax const CHAR *v13; // eax const CHAR *v14; // eax volatile LONG *v15; // eax bool v16; // zf const CHAR *v17; // eax volatile LONG *v18; // eax const CHAR *v19; // eax volatile LONG *v20; // eax const CHAR *v21; // eax volatile LONG *v22; // eax const CHAR *v23; // eax const CHAR *v24; // eax volatile LONG *v25; // eax _DWORD *v26; // ecx bool v27; // sf int v28; // eax int v29; // edi int v30; // eax int *v31; // ecx int v32; // eax int v33; // edx unsigned int v34; // eax double v35; // st7 const char *v36; // edi signed int v37; // eax unsigned int v38; // eax char *v39; // edi char v40; // cl _DWORD *v41; // ecx int v42; // esi signed int v43; // eax _DWORD *v44; // ecx _DWORD *v45; // esi char *v46; // eax char *v47; // eax volatile LONG *v48; // eax int v49; // eax _DWORD *v50; // ebx char *v51; // eax int v52; // edx int v53; // ecx int v54; // edx int v55; // ecx _DWORD *v56; // esi char *v57; // eax char *v58; // eax volatile LONG *v59; // eax int v60; // eax _DWORD *v61; // esi char *v62; // eax int v63; // eax int v64; // eax _DWORD *v65; // ebx const CHAR *v66; // eax int v67; // edx int v68; // ecx int v69; // edx int v70; // ecx int v71; // [esp-14h] [ebp-894h] int v72; // [esp-10h] [ebp-890h] int v73; // [esp-Ch] [ebp-88Ch] int v74; // [esp-8h] [ebp-888h] CHAR *v75; // [esp-4h] [ebp-884h] POINT v76; // [esp+Ch] [ebp-874h] int v77; // [esp+14h] [ebp-86Ch] unsigned int v78; // [esp+18h] [ebp-868h] const char *v79; // [esp+1Ch] [ebp-864h] float v80; // [esp+20h] [ebp-860h] char v81; // [esp+24h] [ebp-85Ch] char v82; // [esp+38h] [ebp-848h] int v83; // [esp+40h] [ebp-840h] float v84; // [esp+44h] [ebp-83Ch] _DWORD *v85; // [esp+48h] [ebp-838h] int v86; // [esp+4Ch] [ebp-834h] char v87; // [esp+50h] [ebp-830h] char v88; // [esp+44Bh] [ebp-435h] char v89; // [esp+44Ch] [ebp-434h] char v90; // [esp+44Dh] [ebp-433h] CHAR String; // [esp+84Ch] [ebp-34h] int v92; // [esp+854h] [ebp-2Ch] _DWORD *v93; // [esp+85Ch] [ebp-24h] char v94; // [esp+860h] [ebp-20h] char v95; // [esp+864h] [ebp-1Ch] char v96; // [esp+878h] [ebp-8h] v5 = a1; if ( !(*(_BYTE *)(a1 - 204) & 1) ) { v76 = pt; switch ( a3 ) { case 2: if ( *(_BYTE *)(a1 + 456) ) { (*(void (__thiscall **)(int, POINT *, LONG *))(*(_DWORD *)(a1 - 232) + 224))(a1 - 232, &v76, &v76.y); v16 = *(_DWORD *)(v5 + 88) == 0; v27 = *(_DWORD *)(v5 + 88) < 0; v77 = 0; if ( !v27 && !v16 ) { v79 = (const char *)(v5 + 288); while ( 1 ) { (*(void (__thiscall **)(int))(*(_DWORD *)(v5 - 232) + 148))(v5 - 232); v28 = *(_DWORD *)(v5 - 232); v29 = *(_DWORD *)(v5 + 276); v80 = *(float *)(*(_DWORD *)(v5 + 60) + 224); v30 = (*(int (__thiscall **)(int))(v28 + 148))(v5 - 232); v78 = (v30 + 2 * v29) % (unsigned int)(v29 + LODWORD(v80)); v80 = (double)v78; v31 = *(int **)v79; v32 = *(_DWORD *)(*(_DWORD *)v79 + 88); v84 = *(float *)(*(_DWORD *)v79 + 92); v33 = *v31; v83 = v32; v85 = (_DWORD *)v31[24]; v80 = v84 + v80; v34 = (*(int (**)(void))(v33 + 160))(); v35 = v80; *(float *)&v78 = (double)v34 + v80; v80 = (double)v76.y; if ( v80 > v35 && *(float *)&v78 > (double)v80 ) break; v79 += 4; if ( ++v77 >= *(_DWORD *)(v5 + 88) ) return; } v36 = (const char *)(*(int (**)(void))(**(_DWORD **)(v5 + 4 * v77 + 288) + 152))(); v80 = *(float *)&v36; if ( sub_5FE430((_DWORD *)(v5 - 232), v36, v76.x, v77) ) { LABEL_38: BYTE2(dword_AD0354) = 1; } else if ( v36 ) { if ( *v36 == 91 ) { v79 = (const char *)strlen(v36); v89 = 0; memset(&v90, 0, 0x3FFu); v37 = 0; if ( (signed int)v79 > 0 ) { v78 = 1 - LODWORD(v80); v77 = (int)(&v89 - LODWORD(v80)); while ( v79 != &v36[v78] ) { if ( *v36 == 93 ) { if ( v37 <= 2 ) return; *(&v88 + v37) = 0; sub_5FE890((const char **)(v5 - 232), &v89); v86 = 2127663; memset(&v87, 0, 0x3FCu); v38 = strlen(&v89) + 1; v39 = (char *)&v85 + 3; do v40 = (v39++)[1]; while ( v40 ); qmemcpy(v39, &v89, v38); v41 = *(_DWORD **)(v5 + 448); if ( v41 ) sub_4A41B0(v41, (int)&v86); goto LABEL_38; } (v36++)[v77] = *(_BYTE *)(v37++ + LODWORD(v80) + 1); if ( v37 >= (signed int)v79 ) return; } } } } } } return; case 5: if ( !sub_5FD130((int **)(a1 - 232)) ) return; sub_4169E0((_DWORD *)(v5 + 464), (int)&String); v94 = 0; if ( !strcmp((const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(), &String) ) return; (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v5 + 460) + 308))(pt.x, pt.y); sub_58DFD0(*(_DWORD **)(v5 + 460)); v6 = sub_58E290(&String, 0, 0, 0, 0, 0, 1); *((_DWORD *)v6 + 83) = 9; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v6); v7 = sub_40C190(-179431613); v8 = sub_58E290(v7, 0, 0, 0, 0, 0, 0); *((_DWORD *)v8 + 83) = 18; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v8); v9 = sub_40C190(458241676); v10 = sub_58E290(v9, 0, 0, 0, 0, 0, 0); *((_DWORD *)v10 + 83) = 1001; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v10); if ( !sub_718A50(&dword_B9E560) ) { v13 = sub_40C190(893229738); v12 = sub_58E290(v13, 0, 0, 0, 0, 0, 0); *((_DWORD *)v12 + 83) = 2; goto LABEL_10; } if ( byte_B9E5CC || byte_B9E5CD ) { v11 = sub_40A910(-84335310); v12 = sub_58E290(v11, 0, 0, 0, 0, 0, 0); *((_DWORD *)v12 + 83) = 1021; LABEL_10: sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v12); } v14 = sub_40C190(-466665679); v15 = sub_58E290(v14, 0, 0, 0, 0, 0, 0); *((_DWORD *)v15 + 83) = 1002; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v15); v16 = *(_BYTE *)(*(_DWORD *)(v5 + 448) + 152) == 0; v75 = 0; v74 = 0; v73 = 0; v72 = 0; v71 = 0; if ( v16 ) { v23 = sub_40A910(-335284234); v22 = sub_58E290(v23, 0, v71, v72, v73, v74, (int)v75); *((_DWORD *)v22 + 83) = 13; } else { v17 = sub_40A910(-202291131); v18 = sub_58E290(v17, 0, v71, v72, v73, v74, (int)v75); *((_DWORD *)v18 + 83) = 11; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v18); v19 = sub_40A910(-587118040); v20 = sub_58E290(v19, 0, 0, 0, 0, 0, 0); *((_DWORD *)v20 + 83) = 14; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v20); v21 = sub_40A910(-1510413337); v22 = sub_58E290(v21, 0, 0, 0, 0, 0, 0); *((_DWORD *)v22 + 83) = 12; } sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v22); v24 = sub_40C190(-572003345); v25 = sub_58E290(v24, 0, 0, 0, 0, 0, 0); *((_DWORD *)v25 + 83) = 9; sub_58E080(*(_DWORD **)(v5 + 460), a2, (int)v25); v26 = *(_DWORD **)(v5 + 460); if ( v26[104] ) { sub_58D930(v26, 0); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 460)); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v5 + 460) + 240))(*(_DWORD *)(v5 + 460), 1); } else { sub_58DFD0(v26); } break; case 15: v43 = *a4; if ( *a4 > 9 ) { if ( v43 > 18 ) { v63 = v43 - 1001; if ( v63 ) { v64 = v63 - 1; if ( v64 ) { if ( v64 == 19 ) { if ( byte_B9E5CD || byte_B9E5CC ) { sub_4169E0((_DWORD *)(a1 + 464), (int)&v95); *(float *)&v78 = COERCE_FLOAT(&v71); v96 = 0; sub_416970((char *)&v71, &v95); sub_4CB290(*(_DWORD **)(v5 + 448), v71, v72, v73, v74, (int)v75); } else { v65 = *(_DWORD **)(a1 + 448); v66 = sub_40A910(69861649); sub_492060(v65, (int)v66); } } } else { v67 = *(_DWORD *)(a1 + 468); v71 = *(_DWORD *)(a1 + 464); v68 = *(_DWORD *)(a1 + 472); v72 = v67; v69 = *(_DWORD *)(v5 + 476); v73 = v68; v70 = *(_DWORD *)(v5 + 480); v74 = v69; v75 = (CHAR *)v70; sub_4CA580(*(_DWORD **)(v5 + 448), v71, v72, v73, v69, v70); } } else { sub_4C1AF0( *(_DWORD *)(a1 + 448), *(_DWORD *)(a1 + 464), *(_DWORD *)(a1 + 468), *(_DWORD *)(a1 + 472), *(_DWORD *)(a1 + 476), *(_DWORD *)(a1 + 480)); } } else if ( v43 == 18 ) { sub_4169E0((_DWORD *)(a1 + 464), (int)&v95); v96 = 0; v61 = (_DWORD *)sub_402BF0((_DWORD *)(v5 - 232)); if ( v61 ) { v62 = sub_416970(&v81, &v95); *(_DWORD *)dword_ACEB0C = *(_DWORD *)v62; dword_ACEB10 = *((_DWORD *)v62 + 1); dword_ACEB14 = *((_DWORD *)v62 + 2); dword_ACEB18 = *((_DWORD *)v62 + 3); dword_ACEB1C = *((_DWORD *)v62 + 4); sub_6068C0(v61, 1); } } else { switch ( v43 ) { case 11: if ( !*(_DWORD *)(a1 + 484) ) { v45 = operator new(0x14u); if ( v45 ) { v45[4] = 0; v45[3] = 0; v45[2] = 0; v45[1] = 0; *v45 = 0; sub_40FA00(v45, (_DWORD *)(v5 + 464)); sub_4169E0((_DWORD *)(v5 + 464), (int)&v95); v96 = 0; v46 = (char *)sub_40A910(-2096895782); v47 = sub_7549E0(v46, &v95); v48 = sub_462CA0(2, v47); sub_56FF80((_DWORD *)(v5 + 484), (int)v48); v92 = 256; v93 = v45; v83 = 257; v85 = v45; v49 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v75 = &v82; sub_461760(*(_DWORD **)(v5 + 484), v49, &String, &v82); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v5 + 484) + 232))( *(_DWORD *)(v5 + 484) + 232, v5 != 232 ? v5 : 0); } } break; case 12: sub_4169E0((_DWORD *)(a1 + 464), (int)&v95); v50 = *(_DWORD **)(v5 + 448); v96 = 0; v51 = sub_7549E0("&pfind %s", &v95); sub_4D6090(v50, v51); break; case 13: v52 = *(_DWORD *)(a1 + 468); v71 = *(_DWORD *)(a1 + 464); v53 = *(_DWORD *)(a1 + 472); v72 = v52; v54 = *(_DWORD *)(v5 + 476); v73 = v53; v55 = *(_DWORD *)(v5 + 480); v74 = v54; v75 = (CHAR *)v55; sub_4CD480(*(_DWORD **)(v5 + 448), v71, v72, v73, v54, v55); break; case 14: if ( !*(_DWORD *)(a1 + 484) ) { v56 = operator new(0x14u); if ( v56 ) { v56[4] = 0; v56[3] = 0; v56[2] = 0; v56[1] = 0; *v56 = 0; sub_40FA00(v56, (_DWORD *)(v5 + 464)); sub_4169E0((_DWORD *)(v5 + 464), (int)&v95); v96 = 0; v57 = (char *)sub_40A910(509646203); v58 = sub_7549E0(v57, &v95); v59 = sub_462CA0(2, v58); sub_56FF80((_DWORD *)(v5 + 484), (int)v59); v83 = 258; v85 = v56; v92 = 259; v93 = v56; v60 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v75 = &String; sub_461760(*(_DWORD **)(v5 + 484), v60, &v82, &String); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v5 + 484) + 232))( *(_DWORD *)(v5 + 484) + 232, v5 != 232 ? v5 : 0); } } goto LABEL_60; default: return; } } } else if ( *a4 == 9 ) { LABEL_60: sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v5 + 460)); } else if ( v43 == 2 ) { sub_4169E0((_DWORD *)(a1 + 464), (int)&String); v44 = *(_DWORD **)(v5 + 448); v94 = 0; sub_4C1490(v44, &String); } return; case 27: if ( *(_DWORD *)(a1 + 484) ) { v42 = *(_DWORD *)(a1 + 484); if ( v42 ) { if ( !InterlockedDecrement((volatile LONG *)(v42 + 4)) && v42 ) (**(void (__thiscall ***)(int, signed int))v42)(v42, 1); *(_DWORD *)(v5 + 484) = 0; } } return; default: return; } } } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // AD0354: using guessed type int dword_AD0354; // B9E560: using guessed type int dword_B9E560; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; //----- (005FF5C0) -------------------------------------------------------- char __thiscall sub_5FF5C0(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // edi unsigned int v5; // edx int v6; // esi char v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (int *)this[188]; v3 = *v2; if ( (int *)*v2 == v2 ) return 0; v5 = (signed int)((unsigned __int64)(333589693i64 * (*(_DWORD *)(v3 + 20) - *(_DWORD *)(v3 + 16))) >> 32) >> 3; v6 = v5 + (v5 >> 31); if ( v6 ) sub_600300(this + 187, (int *)&v7, v3); v1[185] -= v6; return 1; } //----- (005FF620) -------------------------------------------------------- void __thiscall sub_5FF620(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi int *v4; // eax _DWORD *v5; // eax char v6[4]; // [esp+10h] [ebp-38h] void *v7; // [esp+14h] [ebp-34h] void *v8; // [esp+24h] [ebp-24h] int v9; // [esp+28h] [ebp-20h] int v10; // [esp+2Ch] [ebp-1Ch] int v11; // [esp+34h] [ebp-14h] int v12; // [esp+44h] [ebp-4h] v3 = this; if ( a3 && a2 & this[128] && (this[185] < this[186] || sub_5FF5C0(this)) ) { v4 = *sub_5FFD60(v3 + 187, (int **)&a2, v3 + 124); if ( v4 == (int *)v3[188] ) { v8 = 0; v9 = 0; v10 = 0; v12 = 0; sub_600020(&v8, a3); *(_DWORD *)v6 = v3[124]; sub_5FFEC0((char **)&v7, (char **)&v8); LOBYTE(v12) = 1; v5 = sub_6006C0(v3 + 187, v6); sub_6005D0(v3 + 187, (int)&v11, v5, 0); if ( v7 ) operator delete(v7); if ( v8 ) operator delete(v8); } else { sub_600020(v4 + 4, a3); } ++v3[185]; } } //----- (005FF740) -------------------------------------------------------- LONG __thiscall sub_5FF740(void **this) { void **v1; // esi signed int i; // edi int v3; // ST0C_4 int v4; // ST08_4 volatile LONG *v5; // edi volatile LONG *v6; // edi char v8; // [esp+10h] [ebp-18h] _DWORD *v9; // [esp+14h] [ebp-14h] void **v10; // [esp+18h] [ebp-10h] int v11; // [esp+24h] [ebp-4h] v1 = this; v10 = this; *this = &ChatBoardFlex::`vftable'; this[58] = &ChatBoardFlex::`vftable'; v11 = 0; for ( i = 0; i < (signed int)v1[79]; ++i ) operator delete[](*((void **)v1[77] + i)); operator delete[](v1[77]); v9 = v1 + 187; v3 = (int)v1[188]; v4 = *(_DWORD *)v1[188]; LOBYTE(v11) = 4; sub_600790(v1 + 187, (int *)&v8, v4, v3); operator delete(v1[188]); v5 = (volatile LONG *)v1[179]; LOBYTE(v11) = 2; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); LOBYTE(v11) = 1; `eh vector destructor iterator'(v1 + 130, 4u, 40, sub_410C00); v6 = (volatile LONG *)v1[129]; LOBYTE(v11) = 0; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); v11 = -1; return sub_8F29C0(v1); } // 9EB044: using guessed type void *ChatBoardFlex::`vftable'; // 9EB064: using guessed type void *ChatBoardFlex::`vftable'; //----- (005FF870) -------------------------------------------------------- _DWORD *__thiscall sub_5FF870(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi int v4; // edi void *v6; // [esp-1Ch] [ebp-50h] int v7; // [esp-18h] [ebp-4Ch] int v8; // [esp-14h] [ebp-48h] int v9; // [esp-10h] [ebp-44h] int v10; // [esp-Ch] [ebp-40h] int v11; // [esp-8h] [ebp-3Ch] size_t v12; // [esp-4h] [ebp-38h] void **v13; // [esp+10h] [ebp-24h] void **v14; // [esp+1Ch] [ebp-18h] _DWORD *v15; // [esp+20h] [ebp-14h] char *v16; // [esp+24h] [ebp-10h] int v17; // [esp+30h] [ebp-4h] v1 = this; v15 = this; sub_8F2740(this); *v1 = &ChatBoardFlex::`vftable'; v1[58] = &ChatBoardFlex::`vftable'; v17 = 0; v1[129] = 0; `eh vector constructor iterator'( v1 + 130, 4u, 40, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[178] = 0; v1[177] = 0; v1[176] = 0; v1[175] = 0; v1[174] = 0; v1[179] = 0; v12 = 36; LOBYTE(v17) = 3; v1[189] = 0; v2 = operator new(v12); if ( !v2 ) { v16 = 0; std::exception::exception((std::exception *)&v13, (const char *const *)&v16); v13 = &std::bad_alloc::`vftable'; _CxxThrowException(&v13, &_TI2_AVbad_alloc_std__); } v1[188] = v2; *v2 = v2; *(_DWORD *)(v1[188] + 4) = v1[188]; *(_DWORD *)(v1[188] + 8) = v1[188]; *(_BYTE *)(v1[188] + 32) = 1; *(_BYTE *)(v1[188] + 33) = 1; LOBYTE(v17) = 4; v1[73] = 0; v1[122] = 0; v1[124] = 0; v1[125] = 0; v1[126] = -1; v1[74] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[79] = 0; v1[75] = 0; v1[80] = 40; *((_WORD *)v1 + 162) = 0; sub_5FBC70(v1); v1[123] = -1; v3 = v1[129]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[129] = 0; } v1[128] = -1; *((float *)v1 + 171) = 0.0; v1[127] = 4; *((_BYTE *)v1 + 688) = 0; *((_BYTE *)v1 + 288) = 0; v4 = v1[179]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[179] = 0; } v14 = &v6; v1[180] = "From "; v1[181] = "To "; *((_BYTE *)v1 + 728) = 0; v1[183] = 0; v1[185] = 0; v11 = 15; v10 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, "ItemLinkTabLimit", 0x10u); v1[186] = (unsigned __int16)sub_747F30(&unk_ACDC6C, v6, v7, v8, v9, v10, v11, v12); return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9EB044: using guessed type void *ChatBoardFlex::`vftable'; // 9EB064: using guessed type void *ChatBoardFlex::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005FFAD0) -------------------------------------------------------- volatile LONG *__cdecl sub_5FFAD0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax volatile LONG *v8; // esi void (__thiscall ***v9)(void *, signed int); // edi volatile LONG *result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x2FCu); v11 = v7; v12 = 0; if ( v7 ) v8 = sub_5FF870(v7); else v8 = 0; if ( v8 ) InterlockedIncrement(v8 + 1); v12 = 1; sub_403790(&unk_BA6B10, (int)v8); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v8 + 452))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); result = 0; } return result; } //----- (005FFC20) -------------------------------------------------------- int __thiscall sub_5FFC20(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 33) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (005FFC80) -------------------------------------------------------- void *__stdcall sub_5FFC80(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x27C4597 || (result = operator new(103 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (005FFCE0) -------------------------------------------------------- char *__cdecl sub_5FFCE0(char *a1, char *a2, char *a3) { char *v3; // edx char *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 103 ) { if ( result ) qmemcpy(result, v3, 0x67u); v3 += 103; } return result; } //----- (005FFD20) -------------------------------------------------------- char *__cdecl sub_5FFD20(char *a1, char *a2, char *a3) { char *v3; // edx char *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 103 ) { if ( result ) qmemcpy(result, v3, 0x67u); v3 += 103; } return result; } //----- (005FFD60) -------------------------------------------------------- int **__thiscall sub_5FFD60(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 33) ) { if ( v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (005FFDD0) -------------------------------------------------------- unsigned int __thiscall sub_5FFDD0(char **this, char *a2) { char **v2; // esi unsigned int result; // eax void *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 unsigned int v7; // edx int v8; // edi char *v9; // ecx char *v10; // edi int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; if ( (unsigned int)a2 > 0x27C4597 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 103; if ( result < (unsigned int)a2 ) { v4 = sub_5FFC80(a2); v5 = v2[1]; v6 = *v2; v12 = v4; v14 = 0; sub_5FFCE0(v6, v5, (char *)v4); v7 = (signed int)((unsigned __int64)(333589693i64 * (v2[1] - *v2)) >> 32) >> 3; v8 = v7 + (v7 >> 31); if ( *v2 ) operator delete(*v2); v9 = (char *)v12; result = (unsigned int)v12 + 103 * (_DWORD)a2; v10 = (char *)v12 + 103 * v8; v2[2] = (char *)result; v2[1] = v10; *v2 = v9; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005FFEC0) -------------------------------------------------------- char **__thiscall sub_5FFEC0(char **this, char **a2) { char **v2; // esi unsigned int v3; // edi char *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; v9 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = (a2[1] - *a2) / 103; *this = 0; this[1] = 0; this[2] = 0; if ( v3 ) { if ( v3 > 0x27C4597 ) std::_Xlength_error("vector too long"); v4 = (char *)sub_5FFC80((char *)v3); *v2 = v4; v2[1] = v4; v2[2] = &v4[103 * v3]; v5 = a2[1]; v6 = *a2; v11 = 0; v2[1] = sub_5FFD20(v6, v5, v4); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (005FFFA0) -------------------------------------------------------- unsigned int __thiscall sub_5FFFA0(int this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) / 103; if ( 41698711 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (*(_DWORD *)(this + 8) - *(_DWORD *)this) / 103; if ( v3 > result ) { if ( 41698711 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_5FFDD0((char **)this, v5); } return result; } //----- (00600020) -------------------------------------------------------- void __thiscall sub_600020(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // ebx unsigned int v4; // ecx unsigned int v5; // edx int v6; // esi char *v7; // edi int v8; // edi int v9; // esi v2 = a2; v3 = this; v4 = this[1]; if ( (unsigned int)a2 >= v4 || *v3 > (unsigned int)a2 ) { if ( v4 == v3[2] ) sub_5FFFA0((int)v3, 1); } else { v5 = (signed int)((unsigned __int64)(333589693i64 * (signed int)&a2[-*v3]) >> 32) >> 3; v6 = v5 + (v5 >> 31); if ( v4 == v3[2] ) sub_5FFFA0((int)v3, 1); v2 = (char *)(*v3 + 103 * v6); } v7 = (char *)v3[1]; if ( v7 ) { qmemcpy(v7, v2, 0x64u); v9 = (int)(v2 + 100); v8 = (int)(v7 + 100); *(_WORD *)v8 = *(_WORD *)v9; *(_BYTE *)(v8 + 2) = *(_BYTE *)(v9 + 2); } v3[1] += 103; } //----- (006000C0) -------------------------------------------------------- int __thiscall sub_6000C0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx int v8; // edx void **v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0xCCCCCCB ) { if ( *((_DWORD *)a5 + 4) ) operator delete(*((void **)a5 + 4)); *((_DWORD *)a5 + 4) = 0; *((_DWORD *)a5 + 5) = 0; *((_DWORD *)a5 + 6) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; v8 = this[1]; LABEL_12: *(_DWORD *)(v8 + 8) = a5; goto LABEL_13; } if ( !a3 ) { *(_DWORD *)(a4 + 8) = a5; v8 = this[1]; if ( a4 != *(_DWORD *)(v8 + 8) ) goto LABEL_13; goto LABEL_12; } *(_DWORD *)a4 = a5; v9 = (void **)this[1]; if ( (void *)a4 == *v9 ) *v9 = a5; LABEL_13: v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 32) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 32) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 33) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 33) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_53: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 32) = 1; *(_BYTE *)(v13 + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 32) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 33) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 33) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_53; } *(_BYTE *)(v11 + 32) = 1; *(_BYTE *)(v22 + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 32) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 32) = 1; return result; } //----- (00600300) -------------------------------------------------------- int *__thiscall sub_600300(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax unsigned int v16; // eax int *result; // eax void *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 33) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (void *)a3; sub_691140(&a3); if ( *(_BYTE *)(*v3 + 33) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 33) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6687D0((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 33) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6910E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 33) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 32); *(_BYTE *)(v5 + 32) = *((_BYTE *)v3 + 32); *((_BYTE *)v3 + 32) = v13; LABEL_35: if ( *((_BYTE *)v18 + 32) == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 32) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_6914E0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; v15[32] = 0; sub_5FFC20(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; sub_6914E0(i, v6); break; } } else { if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_5FFC20(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; v15[32] = 0; sub_6914E0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; sub_5FFC20(i, (_DWORD *)v6); break; } } v15[32] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 32) = 1; } if ( *((_DWORD *)v18 + 4) ) operator delete(*((void **)v18 + 4)); *((_DWORD *)v18 + 4) = 0; *((_DWORD *)v18 + 5) = 0; *((_DWORD *)v18 + 6) = 0; operator delete(v18); v16 = v19[2]; if ( v16 > 0 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (00600570) -------------------------------------------------------- void __stdcall sub_600570(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 33) ) { do { sub_600570(v2[2]); v2 = (void **)*v2; if ( v1[4] ) operator delete(v1[4]); v1[4] = 0; v1[5] = 0; v1[6] = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 33) ); } } //----- (006005D0) -------------------------------------------------------- int __thiscall sub_6005D0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // ebx int v5; // ecx int v6; // eax int v7; // esi void *v8; // edi bool v9; // cl int v10; // edx int v11; // edx int result; // eax int v13; // ecx int v14; // edx char v15; // [esp+18h] [ebp+Ch] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = a3; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v6 + 33) ) { v10 = *((_DWORD *)v8 + 3); do { v7 = v6; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v6 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v6 + 12); v15 = v9; if ( v9 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 33) ); } a4 = v7; if ( v9 ) { if ( v7 == *(_DWORD *)v4[1] ) { v11 = *(_DWORD *)sub_6000C0(v4, (int)&a4, 1, v7, v8); result = a2; *(_BYTE *)(a2 + 4) = 1; *(_DWORD *)a2 = v11; return result; } sub_69C7C0(&a4); } if ( *(_DWORD *)(a4 + 12) >= *((_DWORD *)v8 + 3) ) { if ( *((_DWORD *)v8 + 4) ) operator delete(*((void **)v8 + 4)); *((_DWORD *)v8 + 4) = 0; *((_DWORD *)v8 + 5) = 0; *((_DWORD *)v8 + 6) = 0; operator delete(v8); result = a2; v14 = a4; *(_BYTE *)(a2 + 4) = 0; *(_DWORD *)a2 = v14; } else { v13 = *(_DWORD *)sub_6000C0(v4, (int)&a4, v15, v7, v8); result = a2; *(_DWORD *)a2 = v13; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006006C0) -------------------------------------------------------- _DWORD *__thiscall sub_6006C0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx _DWORD *v5; // ecx void **v6; // [esp+14h] [ebp-18h] v2 = this; result = operator new(0x24u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a2); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 16) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2 + 4; result[3] = *(_DWORD *)a2; v5 = result + 4; *v5 = 0; v5[1] = 0; v5[2] = 0; if ( result + 4 != (_DWORD *)v4 ) { *v5 = 0; result[5] = 0; result[6] = 0; *v5 = *(_DWORD *)v4; result[5] = *((_DWORD *)v4 + 1); result[6] = *((_DWORD *)v4 + 2); *(_DWORD *)v4 = 0; *((_DWORD *)v4 + 1) = 0; *((_DWORD *)v4 + 2) = 0; } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00600790) -------------------------------------------------------- int *__thiscall sub_600790(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 33) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 33) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 33); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_600300(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_600570(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (00600850) -------------------------------------------------------- void __thiscall sub_600850(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_600790(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (006008B0) -------------------------------------------------------- void *__thiscall sub_6008B0(void *this, char a2) { void *v2; // esi v2 = this; sub_5FF740((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00600910) -------------------------------------------------------- void __thiscall sub_600910(_DWORD **this, const char *a2, char a3) { sub_5FD710(this[93], a2, a3); } //----- (00600920) -------------------------------------------------------- void __thiscall sub_600920(_DWORD **this, char *a2, char a3) { sub_5FCF00(this[93], 512, a2, a3); } //----- (00600940) -------------------------------------------------------- void __thiscall sub_600940(_DWORD **this, const char *a2) { sub_5FD6C0(this[93], a2); } //----- (00600950) -------------------------------------------------------- void __thiscall sub_600950(_DWORD **this, char *a2) { sub_5FCEA0(this[93], 512, a2); } //----- (00600A00) -------------------------------------------------------- void __thiscall sub_600A00(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 1544, &v3); } //----- (00600A60) -------------------------------------------------------- void __thiscall sub_600A60(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 2, &v3); } //----- (00600AC0) -------------------------------------------------------- void __thiscall sub_600AC0(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 8, &v3); } //----- (00600B20) -------------------------------------------------------- void __thiscall sub_600B20(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 16, &v3); } //----- (00600B80) -------------------------------------------------------- void __thiscall sub_600B80(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 32, &v3); } //----- (00600CA0) -------------------------------------------------------- void __thiscall sub_600CA0(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 4096, &v3); } //----- (00600E20) -------------------------------------------------------- void __thiscall sub_600E20(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 4, &v3); } //----- (00600E80) -------------------------------------------------------- void __thiscall sub_600E80(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 128, &v3); } //----- (00600EE0) -------------------------------------------------------- void __thiscall sub_600EE0(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[93], 256, &v3); } //----- (00600F50) -------------------------------------------------------- int __thiscall sub_600F50(_DWORD *this, int a2) { int result; // eax result = this[93]; *(_DWORD *)(result + 512) |= a2; return result; } //----- (00600F70) -------------------------------------------------------- int __thiscall sub_600F70(_DWORD *this, int a2) { int result; // eax result = this[93]; *(_DWORD *)(result + 512) &= ~a2; return result; } //----- (00600F90) -------------------------------------------------------- int __thiscall sub_600F90(_DWORD **this, _DWORD *a2, int *a3) { _DWORD **v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*this[94] + 144))(); result = (*(int (**)(void))(*v3[94] + 148))(); *a3 = result; return result; } //----- (00600FD0) -------------------------------------------------------- int __thiscall sub_600FD0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // eax int v5; // ebx int v6; // ST18_4 int v7; // edi int v8; // ebx int v9; // ST18_4 int v10; // eax _DWORD *v11; // ecx int v12; // eax _DWORD *v13; // ecx _DWORD *v14; // eax int v15; // eax int v17; // [esp+10h] [ebp-14h] int v18; // [esp+14h] [ebp-10h] int v19; // [esp+18h] [ebp-Ch] int v20; // [esp+1Ch] [ebp-8h] v3 = this; v4 = (*(int (**)(void))(*this[94] + 144))(); v5 = v4 - a2; v6 = v4 - a2; v7 = v5 + (*(int (**)(void))(*v3[94] + 164))(); v8 = (*(int (**)(void))(*v3[94] + 144))() - v6; v9 = (*(int (**)(void))(*v3[94] + 168))(); (*(void (**)(void))(*v3[94] + 144))(); (*(void (**)(void))(*v3[94] + 148))(); v10 = (*(int (**)(void))(*v3[94] + 144))(); v11 = v3[94]; v19 = v8 - v10; v20 = a3 - (*(int (**)(void))(*v11 + 148))(); v12 = (*(int (**)(void))(*v3[94] + 164))(); v13 = v3[94]; v17 = v7 - v12; v18 = v9 - (*(int (**)(void))(*v13 + 168))(); (*(void (__stdcall **)(int, int))(*v3[94] + 540))(a2, a3); v14 = v3[94]; if ( v14 ) v15 = (int)(v14 + 58); else v15 = 0; return ((int (__thiscall *)(_DWORD **, signed int, int *, int))v3[58][3])(v3 + 58, 14, &v17, v15); } //----- (00601110) -------------------------------------------------------- int __thiscall sub_601110(_DWORD *this) { return (*(int (__stdcall **)(_DWORD, _DWORD))(*this + 540))(this[122], this[123]); } //----- (00601130) -------------------------------------------------------- void __thiscall sub_601130(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // esi char v4; // al int **v5; // edi int v6; // esi unsigned __int8 v7; // al signed int v8; // [esp+4h] [ebp-4h] v1 = this; if ( this[86] ) { v2 = (int *)this[86]; v3 = *v2; v4 = (*(int (**)(void))(*v2 + 260))(); (*(void (__thiscall **)(_DWORD, bool))(v3 + 256))(v1[86], v4 == 0); v5 = (int **)(v1 + 126); v8 = 8; do { v6 = **v5; v7 = (*(int (**)(void))(*(_DWORD *)v1[86] + 260))(); (*(void (__thiscall **)(int *, _DWORD))(v6 + 256))(*v5, v7); ++v5; --v8; } while ( v8 ); } } //----- (006011D0) -------------------------------------------------------- void __thiscall sub_6011D0(_DWORD **this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx int v4; // edi int v5; // ebx int v6; // eax int v7; // ecx int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(*this[104] + 164))(); v3 = v1[104]; v4 = v1[114]; v8 = v2; v5 = (*(int (**)(void))(*(_DWORD *)v3 + 168))(); v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 148))(v4); v7 = v1[120]; v9 = v5 - v6; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v7 + 220))(&v8, &v9); (*(void (__stdcall **)(int, int))(*(_DWORD *)v1[114] + 308))(v8, v9); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v1[114]); } //----- (00601270) -------------------------------------------------------- int __thiscall sub_601270(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax v2 = this; (*(void (**)(void))(*this[112] + 480))(); (*(void (__stdcall **)(signed int))(*v2[95] + 256))(1); result = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*v2[112] + 464))(a2); return result; } //----- (006012D0) -------------------------------------------------------- void __thiscall sub_6012D0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char *v4; // edi _DWORD *v5; // eax int v6; // eax v3 = this; v4 = (char *)(*(int (**)(void))(*this[112] + 456))(); if ( a2 == 1 ) { v5 = v3[87]; if ( v5 ) { v6 = (int)v5 - 2; if ( v6 ) { if ( v6 == 1 ) sub_496030((int)v3[74], v4, "/g ", 0); } else { sub_496030((int)v3[74], v4, "/p ", 0); } } else { sub_496030((int)v3[74], v4, 0, 0); } } if ( v4 ) { (*(void (__stdcall **)(_DWORD))(*v3[95] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v3[109] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v3[108] + 256))(0); } } //----- (00601370) -------------------------------------------------------- int __thiscall sub_601370(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi _DWORD **v3; // esi _DWORD **v4; // esi _DWORD **v5; // esi _DWORD **v6; // esi _DWORD **v7; // esi _DWORD **v8; // esi _DWORD **v9; // esi int v11; // [esp+Ch] [ebp-8h] char v12; // [esp+10h] [ebp-4h] v2 = this; *(_DWORD *)(this[93] + 512) = a2; v3 = (_DWORD **)(this[113] + 232); v11 = 17; v12 = a2 & 1; if ( v3[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 4))(16, &v11, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 16))(16, &v11, v3); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[4])(v3, 16, &v11, v3); v4 = (_DWORD **)(v2[113] + 232); v11 = 18; v12 = (a2 >> 3) & 1; if ( v4[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 4))(16, &v11, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 16))(16, &v11, v4); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v4)[4])(v4, 16, &v11, v4); v5 = (_DWORD **)(v2[113] + 232); v11 = 19; v12 = (a2 >> 4) & 1; if ( v5[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 4))(16, &v11, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 16))(16, &v11, v5); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v5)[4])(v5, 16, &v11, v5); v6 = (_DWORD **)(v2[113] + 232); v11 = 20; v12 = (a2 >> 5) & 1; if ( v6[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 4))(16, &v11, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 16))(16, &v11, v6); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v6)[4])(v6, 16, &v11, v6); v7 = (_DWORD **)(v2[113] + 232); v11 = 21; v12 = (a2 >> 12) & 1; if ( v7[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 4))(16, &v11, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 16))(16, &v11, v7); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v7)[4])(v7, 16, &v11, v7); v8 = (_DWORD **)(v2[113] + 232); v11 = 26; v12 = BYTE1(a2) & 1; if ( v8[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 4))(16, &v11, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 16))(16, &v11, v8); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v8)[4])(v8, 16, &v11, v8); v9 = (_DWORD **)(v2[113] + 232); v11 = 25; v12 = (a2 >> 2) & 1; if ( v9[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v9[1] + 4))(16, &v11, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v9[1] + 16))(16, &v11, v9); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v9)[4])(v9, 16, &v11, v9); } //----- (00601620) -------------------------------------------------------- BOOL sub_601620() { return byte_B92026 == 0; } // B92026: using guessed type char byte_B92026; //----- (00601630) -------------------------------------------------------- char __thiscall sub_601630(int this) { char v1; // bl char *v3; // ecx v1 = 0; if ( *(float *)(this + 500) < 1.0 ) return 0; v3 = *(char **)(this + 376); if ( v3 ) { if ( v3[365] ) return 2; if ( (unsigned __int8)sub_45B520(v3) ) v1 = 1; } return v1; } //----- (00601670) -------------------------------------------------------- float *__thiscall sub_601670(float *this) { float *v1; // esi int v2; // ebx int v3; // ebx int v4; // ebx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &ChatDisplayWin::`vftable'; *((_DWORD *)v1 + 58) = &ChatDisplayWin::`vftable'; v1[110] = 0.0; v1[111] = 0.0; v1[112] = 0.0; v1[113] = 0.0; v1[114] = 0.0; v1[115] = 0.0; v1[124] = 1.0; v1[121] = 0.0; v1[120] = 0.0; v1[125] = 0.0; v1[119] = 0.0; v1[118] = 0.0; v2 = *((_DWORD *)v1 + 113); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[113] = 0.0; } v3 = *((_DWORD *)v1 + 115); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[115] = 0.0; } v4 = *((_DWORD *)v1 + 114); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[114] = 0.0; } v1[87] = 0.0; v1[117] = 0.0; v1[105] = 0.0; v1[86] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EB4A4: using guessed type void *ChatDisplayWin::`vftable'; // 9EB4C4: using guessed type void *ChatDisplayWin::`vftable'; //----- (006017C0) -------------------------------------------------------- LONG __thiscall sub_6017C0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi v1 = this; *this = &ChatDisplayWin::`vftable'; this[58] = &ChatDisplayWin::`vftable'; v2 = this[112]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[112] = 0; } sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[113]); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[115]); v3 = v1[113]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[113] = 0; } v4 = v1[115]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[115] = 0; } v5 = v1[114]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[114] = 0; } v6 = v1[115]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[114]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[113]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[112]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[111]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[110]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); return sub_8F10F0(v1); } // 9EB4A4: using guessed type void *ChatDisplayWin::`vftable'; // 9EB4C4: using guessed type void *ChatDisplayWin::`vftable'; //----- (00601A00) -------------------------------------------------------- const CHAR *__thiscall sub_601A00(_BYTE **this, const CHAR *a2) { _BYTE **v2; // esi const CHAR *result; // eax _BYTE *v4; // ecx v2 = this; sub_5FBE30(this[93], 1); result = a2; v2[88] = a2; switch ( (unsigned int)a2 ) { case 0u: result = sub_40C190(-284875477); goto LABEL_6; case 1u: result = sub_40C190(-179431613); goto LABEL_6; case 2u: result = sub_40C190(-167392443); goto LABEL_6; case 3u: result = sub_40C190(-285417689); LABEL_6: v4 = v2[116]; if ( v4 ) result = (const CHAR *)(*(int (__stdcall **)(const CHAR *))(*(_DWORD *)v4 + 472))(result); break; default: return result; } return result; } //----- (00601A80) -------------------------------------------------------- char __userpurge sub_601A80@(int a1@, signed int a2@, float a3) { double v3; // st7 double v4; // st6 int v5; // esi _DWORD *v6; // ecx bool v7; // c0 double v8; // st7 _DWORD *v9; // ecx int v10; // ecx int v11; // ecx int v12; // ecx int v13; // ecx int v14; // ecx int v15; // ecx _BYTE *v16; // ecx double v17; // st7 int v18; // ecx int v19; // ecx int v20; // eax int v21; // eax int v22; // ecx int v23; // ecx int v24; // ecx int v25; // ecx _BYTE *v26; // eax signed int v28; // [esp+24h] [ebp-Ch] signed int v29; // [esp+28h] [ebp-8h] float v30; // [esp+38h] [ebp+8h] float v31; // [esp+38h] [ebp+8h] float v32; // [esp+38h] [ebp+8h] float v33; // [esp+38h] [ebp+8h] float v34; // [esp+38h] [ebp+8h] float v35; // [esp+38h] [ebp+8h] float v36; // [esp+38h] [ebp+8h] v3 = a3; v4 = 0.1000000014901161; v5 = a1; v29 = a2; if ( *(_DWORD *)(*(_DWORD *)(a1 + 396) + 308) == 1 && v3 - *(float *)(a1 + 404) > 0.1000000014901161 ) { do { v6 = *(_DWORD **)(v5 + 372); *(float *)(v5 + 404) = v4 + *(float *)(v5 + 404); sub_5FCF60(v6); v3 = a3; v4 = 0.1000000014901161; } while ( a3 - *(float *)(v5 + 404) > 0.1000000014901161 ); } if ( *(_DWORD *)(*(_DWORD *)(v5 + 384) + 308) == 1 ) { v7 = v4 < v3 - *(float *)(v5 + 392); v8 = v4; if ( v7 ) { do { v9 = *(_DWORD **)(v5 + 372); *(float *)(v5 + 392) = v8 + *(float *)(v5 + 392); sub_5FBDB0(v9); v8 = 0.1000000014901161; } while ( a3 - *(float *)(v5 + 392) > 0.1000000014901161 ); } } v10 = *(_DWORD *)(v5 + 380); if ( v10 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v10 + 260))() ) { if ( sub_459B00(*(_DWORD **)(v5 + 448)) == (HIMC)2 ) { v28 = 1; } else { v28 = 0; if ( sub_459B00(*(_DWORD **)(v5 + 448)) == (HIMC)1 ) { (*(void (__stdcall **)(_DWORD, signed int))(**(_DWORD **)(v5 + 436) + 256))(0, a2); v29 = 1; goto LABEL_12; } } (*(void (__stdcall **)(signed int, signed int))(**(_DWORD **)(v5 + 436) + 256))(v28, a2); v29 = 0; LABEL_12: (*(void (**)(void))(**(_DWORD **)(v5 + 432) + 256))(); } if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(**(_DWORD **)(v5 + 376) + 332))(pt.x, pt.y) || (*(unsigned __int8 (__thiscall **)(int, LONG, LONG))(*(_DWORD *)v5 + 332))(v5, pt.x, pt.y) || (v11 = *(_DWORD *)(v5 + 420)) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v11 + 332))(pt.x, pt.y) || (v12 = *(_DWORD *)(v5 + 416)) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v12 + 332))(pt.x, pt.y) || (v13 = *(_DWORD *)(v5 + 428)) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v13 + 332))(pt.x, pt.y) || (v14 = *(_DWORD *)(v5 + 452)) != 0 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v14 + 260))() && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(**(_DWORD **)(v5 + 452) + 332))(pt.x, pt.y) || (v15 = *(_DWORD *)(v5 + 456)) != 0 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v15 + 260))() || (*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 452) + 260))() || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 548))(v5) ) { if ( *(float *)(v5 + 496) > 0.0 ) *(float *)(v5 + 496) = *(float *)(v5 + 496) - flt_ACCFD0; if ( *(float *)(v5 + 496) <= 0.0 ) { (*(void (__stdcall **)(signed int, signed int))(**(_DWORD **)(v5 + 376) + 256))(1, v29); v22 = *(_DWORD *)(v5 + 416); if ( v22 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v22 + 256))(1); v23 = *(_DWORD *)(v5 + 420); if ( v23 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v23 + 256))(1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 240))(v5, 1); v17 = 1.0; if ( *(float *)(v5 + 500) < 1.0 ) { v34 = flt_ACCFD0 + flt_ACCFD0 + *(float *)(v5 + 500); *(float *)(v5 + 500) = v34; if ( v34 > 1.0 ) *(float *)(v5 + 500) = 1.0; if ( *(float *)(v5 + 500) < 1.0 ) { v35 = *(float *)(v5 + 500) * flt_BA45B8; v36 = sin(v35); v17 = v36; } goto LABEL_38; } } } else { v16 = *(_BYTE **)(v5 + 376); if ( v16[365] ) goto LABEL_54; v17 = 0.0; if ( *(float *)(v5 + 500) > 0.0 ) { v30 = *(float *)(v5 + 500) - (flt_ACCFD0 + flt_ACCFD0); *(float *)(v5 + 500) = v30; if ( v30 <= 0.0 ) { *(float *)(v5 + 500) = 0.0; *(float *)(v5 + 496) = 1.0; (*(void (__stdcall **)(_DWORD, signed int))(*(_DWORD *)v16 + 256))(0, v29); v18 = *(_DWORD *)(v5 + 416); if ( v18 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 256))(0); v19 = *(_DWORD *)(v5 + 420); if ( v19 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v19 + 256))(0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 240))(v5, 0); v17 = 0.0; } if ( v17 < *(float *)(v5 + 500) ) { v31 = *(float *)(v5 + 500) * flt_BA45B8; v32 = sin(v31); v17 = v32; } LABEL_38: v20 = *(_DWORD *)(v5 + 440); v33 = v17; *(float *)(v20 + 84) = v33; ++*(_DWORD *)(v20 + 88); goto LABEL_54; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v16 + 256))(0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 240))(v5, 0); v21 = *(_DWORD *)(v5 + 440); *(float *)(v21 + 84) = 0.0; ++*(_DWORD *)(v21 + 88); } LABEL_54: v24 = *(_DWORD *)(v5 + 464); if ( v24 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v24 + 276))(*(float *)(*(_DWORD *)(v5 + 440) + 84)); v25 = *(_DWORD *)(v5 + 468); if ( v25 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v25 + 276))(*(float *)(*(_DWORD *)(v5 + 440) + 84)); v26 = (_BYTE *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v26 ) LOBYTE(v26) = sub_4E2D60(v26, *(_DWORD **)(v5 + 376), *(_DWORD **)(v5 + 372)); return (char)v26; } // 601A80: could not find valid save-restore pair for edi // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (00602020) -------------------------------------------------------- const CHAR *__thiscall sub_602020(_DWORD *this, const CHAR *a2) { const CHAR *result; // eax _DWORD *v3; // edi int v4; // esi const CHAR *v5; // ebx _DWORD *v6; // eax const CHAR *v7; // ebx int v8; // edi const CHAR *v9; // [esp+14h] [ebp+8h] result = a2; v3 = this; v4 = this[87]; this[87] = a2; switch ( (unsigned int)a2 ) { case 0u: result = sub_40C190(-284875477); goto LABEL_16; case 1u: result = sub_40C190(-179431613); goto LABEL_16; case 2u: if ( dword_B9DCC4 ) { result = sub_40C190(-167392443); goto LABEL_16; } v9 = sub_40C190(-284875477); v3[87] = v4; v5 = sub_40C190(2107436777); if ( v3[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 4))(25, v5, v3 + 58); if ( v3[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 20))(25, v5, v3 + 58); } result = (const CHAR *)(*(int (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v3[58] + 20))( v3 + 58, 25, v5, v3 + 58); break; case 3u: v6 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v6) ) { result = sub_40C190(-285417689); LABEL_16: v9 = result; } else { v9 = sub_40C190(-284875477); v3[87] = v4; v7 = sub_40C190(1988193177); if ( v3[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 4))(25, v7, v3 + 58); if ( v3[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[59] + 20))(25, v7, v3 + 58); } result = (const CHAR *)(*(int (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v3[58] + 20))( v3 + 58, 25, v7, v3 + 58); } break; default: this[87] = 0; return result; } v8 = v3[116]; if ( v8 ) result = (const CHAR *)(*(int (__thiscall **)(int, const CHAR *))(*(_DWORD *)v8 + 472))(v8, v9); return result; } // B9DCC4: using guessed type int dword_B9DCC4; //----- (00602190) -------------------------------------------------------- char __thiscall sub_602190(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi bool v4; // zf char result; // al int v6; // ebx char *v7; // eax void *v8; // eax int v9; // edi int v10; // eax _DWORD *v11; // eax int v12; // ecx _DWORD *v13; // eax int v14; // edx _DWORD *v15; // eax int v16; // ecx int v17; // eax void *v18; // eax int v19; // edi int v20; // eax _DWORD *v21; // eax int v22; // ecx _DWORD *v23; // eax int v24; // edx _DWORD *v25; // eax int v26; // ecx volatile LONG *v27; // edx int v28; // eax volatile LONG **v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi int v31; // ebx int v32; // ecx int v33; // eax volatile LONG *v34; // eax int v35; // STA8_4 int v36; // ecx int v37; // edi int v38; // eax int v39; // eax int v40; // ecx _DWORD *v41; // eax unsigned int v42; // edx int v43; // ebx int v44; // ST9C_4 int v45; // ST98_4 int v46; // ST94_4 int v47; // eax volatile LONG *v48; // eax int v49; // STA8_4 int v50; // edi int v51; // eax int v52; // eax int v53; // eax int v54; // edx int v55; // ebx int v56; // eax int v57; // edi volatile LONG **v58; // eax const char *v59; // eax int v60; // ST9C_4 int v61; // ST98_4 int v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // eax int v65; // STA8_4 volatile LONG **v66; // eax volatile LONG *v67; // eax int v68; // STA8_4 int v69; // edi int v70; // ebx char *v71; // eax volatile LONG **v72; // ebx char *v73; // eax char *v74; // eax volatile LONG *v75; // eax int v76; // ebx int v77; // STA0_4 int v78; // ST9C_4 int v79; // ST98_4 int v80; // eax volatile LONG *v81; // eax int v82; // ebx int v83; // eax int v84; // ebx int v85; // STA0_4 int v86; // ST9C_4 int v87; // ST98_4 int v88; // eax volatile LONG *v89; // eax int v90; // edi const CHAR *v91; // eax int v92; // eax int v93; // edi const CHAR *v94; // eax const CHAR *v95; // STA8_4 const CHAR *v96; // eax char *v97; // eax int v98; // edi const CHAR *v99; // eax const CHAR *v100; // eax char *v101; // eax int v102; // edi const CHAR *v103; // eax const CHAR *v104; // eax char *v105; // eax int v106; // edi const CHAR *v107; // eax const CHAR *v108; // eax char *v109; // eax int v110; // edi const CHAR *v111; // eax int v112; // edi const CHAR *v113; // eax char *v114; // eax const CHAR *v115; // STA8_4 const CHAR *v116; // eax char *v117; // eax int v118; // edi const CHAR *v119; // eax int v120; // edi const CHAR *v121; // eax volatile LONG **v122; // edi volatile LONG *v123; // eax int v124; // STA8_4 int v125; // ST9C_4 int v126; // eax int v127; // eax int v128; // eax int v129; // edi int v130; // ebx const char *v131; // eax volatile LONG *v132; // STA8_4 volatile LONG **v133; // eax volatile LONG *v134; // eax int v135; // STA8_4 int v136; // eax volatile LONG *v137; // eax const CHAR *v138; // eax int v139; // eax const CHAR *v140; // eax int v141; // eax const CHAR *v142; // eax int v143; // eax const CHAR *v144; // eax int v145; // eax int v146; // edi int v147; // eax volatile LONG *v148; // eax int v149; // eax int v150; // eax volatile LONG *v151; // eax int v152; // eax volatile LONG *v153; // eax int v154; // edi int v155; // eax const CHAR *v156; // eax volatile LONG *v157; // eax const CHAR *v158; // eax volatile LONG *v159; // eax const CHAR *v160; // eax volatile LONG *v161; // eax int v162; // edi int v163; // eax int v164; // edi int v165; // eax int v166; // eax int v167; // eax int v168; // edi int v169; // ebx volatile LONG *v170; // eax volatile LONG *v171; // eax volatile LONG *v172; // eax volatile LONG *v173; // eax volatile LONG *v174; // eax volatile LONG *v175; // eax int v176; // eax volatile LONG *v177; // eax int v178; // STA8_4 int v179; // ecx volatile LONG *v180; // eax int v181; // ecx int v182; // eax volatile LONG **v183; // eax volatile LONG *v184; // eax volatile LONG **v185; // eax volatile LONG *v186; // eax int v187; // edi int v188; // ebx const CHAR *v189; // eax int v190; // ecx const CHAR *v191; // eax int v192; // ecx void (__thiscall ***v193)(_DWORD, signed int); // esi char v194; // [esp+BCh] [ebp-4Ch] char v195; // [esp+C0h] [ebp-48h] void *v196; // [esp+C4h] [ebp-44h] volatile LONG *v197; // [esp+C8h] [ebp-40h] volatile LONG *v198; // [esp+CCh] [ebp-3Ch] unsigned int v199; // [esp+D0h] [ebp-38h] unsigned int v200; // [esp+D4h] [ebp-34h] volatile LONG *v201; // [esp+D8h] [ebp-30h] volatile LONG *v202; // [esp+DCh] [ebp-2Ch] int v203; // [esp+E0h] [ebp-28h] int v204; // [esp+E4h] [ebp-24h] float *v205; // [esp+E8h] [ebp-20h] char v206[4]; // [esp+ECh] [ebp-1Ch] volatile LONG *v207; // [esp+F0h] [ebp-18h] float *v208; // [esp+F4h] [ebp-14h] int v209; // [esp+F8h] [ebp-10h] int v210; // [esp+104h] [ebp-4h] void (__stdcall ***v211)(signed int); // [esp+110h] [ebp+8h] v2 = (int)this; v209 = 0; v210 = 0; v202 = (volatile LONG *)sub_43D0D0(4u); if ( !v202 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v209; v210 = -1; if ( !v209 || InterlockedDecrement((volatile LONG *)(v209 + 4)) ) return 0; v4 = v209 == 0; LABEL_5: if ( !v4 ) (**v3)(v3, 1); return 0; } v6 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\Chatting.nif"); sub_8F66B0(v7, (int)&v209, v6); if ( !v209 ) return 0; v8 = operator new(0x60u); v196 = v8; LOBYTE(v210) = 1; if ( v8 ) v205 = sub_85EBC0((float *)v8); else v205 = 0; v9 = *(_DWORD *)(v2 + 440); LOBYTE(v210) = 0; if ( (float *)v9 != v205 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = (int)v205; *(_DWORD *)(v2 + 440) = v205; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v11 = *(_DWORD **)(v2 + 440); v11[8] = dword_ABD4FC; v11[9] = dword_ABD500; v12 = dword_ABD504; ++v11[22]; v11[10] = v12; v13 = *(_DWORD **)(v2 + 440); v13[11] = dword_ABD4FC; v13[12] = dword_ABD500; v14 = dword_ABD504; ++v13[22]; v13[13] = v14; v15 = *(_DWORD **)(v2 + 440); v15[17] = dword_ABD4FC; v15[18] = dword_ABD500; v16 = dword_ABD504; ++v15[22]; v15[19] = v16; v17 = *(_DWORD *)(v2 + 440); ++*(_DWORD *)(v17 + 88); *(float *)(v17 + 84) = 1.0; v18 = operator new(0x60u); v196 = v18; LOBYTE(v210) = 2; if ( v18 ) v205 = sub_85EBC0((float *)v18); else v205 = 0; v19 = *(_DWORD *)(v2 + 444); LOBYTE(v210) = 0; if ( (float *)v19 != v205 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = (int)v205; *(_DWORD *)(v2 + 444) = v205; if ( v20 ) InterlockedIncrement((volatile LONG *)(v20 + 4)); } v21 = *(_DWORD **)(v2 + 444); v21[8] = dword_ABD4FC; v21[9] = dword_ABD500; v22 = dword_ABD504; ++v21[22]; v21[10] = v22; v23 = *(_DWORD **)(v2 + 444); v23[11] = dword_ABD4FC; v23[12] = dword_ABD500; v24 = dword_ABD504; ++v23[22]; v23[13] = v24; v25 = *(_DWORD **)(v2 + 444); v25[17] = dword_ABD4FC; v25[18] = dword_ABD500; v26 = dword_ABD504; ++v25[22]; v27 = v202; v25[19] = v26; v28 = *(_DWORD *)(v2 + 444); ++*(_DWORD *)(v28 + 88); *(float *)(v28 + 84) = 1.0; v29 = sub_8FB140(v209, (int)"Frame", (int)&v207, (int)&v208, v27); if ( sub_8F1440((volatile LONG **)v2, (int)v207, (int)v208, (int)v29, 0, a2, (int)"ChatDisplayWin", 0) ) { sub_403700((_DWORD *)v2, *(_DWORD *)(v2 + 440)); v31 = (int)v207; v205 = v208; v201 = v207; if ( !sub_8F71E0(v209, (int)"ChaBox", &v207, &v208, &v204, &v203) ) goto LABEL_107; v32 = v203; *(_DWORD *)(v2 + 488) = v204; *(_DWORD *)(v2 + 492) = v32; v33 = sub_43D0D0(0xBu); v34 = sub_45C5B0(v33, 7, 7, (int)v207 - v31, (char *)v208 - (char *)v205, v2, a2); v35 = v203; v36 = v204; *(_DWORD *)(v2 + 376) = v34; (*(void (__thiscall **)(volatile LONG *, int, int))(*v34 + 540))(v34, v36, v35); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 376) + 364) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 376) + 256))(1); v37 = sub_421050(1); if ( !v37 ) goto LABEL_107; v38 = *(_DWORD *)(v2 + 376); *(_DWORD *)(v38 + 392) = 100; *(_DWORD *)(v38 + 396) = 800; v39 = *(_DWORD *)(v37 + 224); v40 = *(_DWORD *)(v2 + 376); *(_DWORD *)(v40 + 400) = 4 * v39 + 8; *(_DWORD *)(v40 + 404) = 40 * v39 + 88; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 376) + 240))(0); v41 = *(_DWORD **)(v2 + 376); v42 = v41[89]; v43 = *(_DWORD *)(v2 + 376); v198 = (volatile LONG *)v41[88]; v199 = v42; v44 = sub_5BBFF0(v41); v45 = sub_5BBFD0(*(_DWORD **)(v2 + 376)); v46 = (int)v198 + (*(int (__thiscall **)(int))(*(_DWORD *)v43 + 168))(v43); v47 = (*(int (__thiscall **)(int))(*(_DWORD *)v43 + 164))(v43); v48 = sub_5FFAD0(v199 + v47, v46, v45, v44, v37, 0, v2); v49 = *(_DWORD *)(v2 + 296); *(_DWORD *)(v2 + 372) = v48; sub_5FBE20(v48, v49); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 372) + 240))(0); v50 = (*(int (**)(void))(**(_DWORD **)(v2 + 376) + 144))(); v51 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v52 = sub_4635E0(v51 - v50, 0, 0, 0, v2); *(_DWORD *)(v2 + 480) = v52; v53 = (*(int (__thiscall **)(int))(*(_DWORD *)v52 + 164))(v52); v54 = **(_DWORD **)(v2 + 480); v55 = (int)v201 + v53; v198 = (volatile LONG *)((char *)v201 + v53); v56 = (*(int (**)(void))(v54 + 168))(); v57 = (int)v205 + v56; v200 = (unsigned int)v205 + v56; v58 = sub_8FB140(v209, (int)"Panel01", (int)&v207, (int)&v208, 0); *(_DWORD *)(v2 + 416) = sub_8FE0F0((int)v207 - v55, (int)v208 - v57, (int)v58, *(_DWORD *)(v2 + 480), 3, 0, 0); v59 = sub_40C190(-1560949776); sub_8F2EA0(*(void ***)(v2 + 416), v59); *(_DWORD *)(*(_DWORD *)(v2 + 416) + 272) = dword_AD01E8; v199 = *(_DWORD *)(v2 + 416); v60 = sub_421050(0); v61 = (*(int (**)(void))(*(_DWORD *)v199 + 148))(); v62 = (*(int (**)(void))(*(_DWORD *)v199 + 144))(); v63 = sub_8F4A20(0, 0, v62, v61, v60, v199, 0, 0); *(_DWORD *)(v2 + 464) = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); sub_403700(*(_DWORD **)(v2 + 464), *(_DWORD *)(v2 + 440)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 464) + 240))(0); *(_DWORD *)v206 = sub_8FB140(v209, (int)"ChatCommandNor", (int)&v207, (int)&v208, 0); sub_8FB650(*(_DWORD **)v206, v209, (int)"ChatCommandOver"); sub_8FB650(*(_DWORD **)v206, v209, (int)"ChatCommandClick"); v64 = sub_8FE0F0((int)v207 - v55, (int)v208 - v57, *(int *)v206, *(_DWORD *)(v2 + 480), 10, 0, 0); v65 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 412) = v64; sub_403700(v64, v65); v196 = 0; v197 = 0; if ( sub_8F71E0(v209, (int)"ChatCommandPanel", &v194, &v196, &v195, &v197) ) { v66 = sub_8FB140(v209, (int)"ChatCommandPanel", (int)&v207, (int)&v208, 0); v67 = sub_8F3EB0((int)v207 - v55, (int)v208 - v57, (int)v66, *(_DWORD *)(v2 + 480), 0, 0); v68 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 344) = v67; sub_403700(v67, v68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 256))(0); v69 = 0; do { v70 = v209; *(_DWORD *)v206 = v69 + 1; v71 = sub_7549E0("Chat_Cmd_Name%02d_Nor", v69 + 1); v72 = sub_8FB140(v70, (int)v71, (int)&v207, (int)&v208, 0); v199 = v209; v73 = sub_7549E0("Chat_Cmd_Name%02d_Click", *(_DWORD *)v206); sub_8FB650(v72, v199, (int)v73); v199 = v209; v74 = sub_7549E0("Chat_Cmd_Name%02d_Over", *(_DWORD *)v206); sub_8FB650(v72, v199, (int)v74); v75 = sub_8FE0F0((char *)v207 - (char *)v198, (int)v208 - v200, (int)v72, *(_DWORD *)(v2 + 480), v69 + 11, 0, 0); *(_DWORD *)(v2 + 4 * v69 + 504) = v75; sub_403700(v75, *(_DWORD *)(v2 + 444)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v69 + 504) + 256))(0); *(_DWORD *)(*(_DWORD *)(v2 + 4 * v69 + 504) + 272) = dword_AD01E8; v76 = *(_DWORD *)(v2 + 4 * v69 + 504); v77 = *(_DWORD *)(v2 + 4 * v69 + 504); v78 = sub_421050(0); v79 = (*(int (__thiscall **)(int))(*(_DWORD *)v76 + 148))(v76); v80 = (*(int (__thiscall **)(int))(*(_DWORD *)v76 + 144))(v76); v81 = sub_8F4A20(0, 0, v80, v79, v78, v77, 0, 0); *(_DWORD *)(v2 + 4 * v69 + 536) = v81; (*(void (__thiscall **)(volatile LONG *, signed int))(*v81 + 488))(v81, 4); v82 = **(_DWORD **)(v2 + 4 * v69 + 536); v83 = sub_421050(1); (*(void (__thiscall **)(_DWORD, int))(v82 + 452))(*(_DWORD *)(v2 + 4 * v69 + 536), v83); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 4 * v69 + 536) + 468))(&dword_AA8D98); v84 = *(_DWORD *)(v2 + 4 * v69 + 504); v85 = *(_DWORD *)(v2 + 4 * v69 + 504); v86 = sub_421050(0); v87 = (*(int (__thiscall **)(int))(*(_DWORD *)v84 + 148))(v84); v88 = (*(int (__thiscall **)(int))(*(_DWORD *)v84 + 144))(v84); v89 = sub_8F4A20(0, 0, v88, v87, v86, v85, 0, 0); *(_DWORD *)(v2 + 4 * v69 + 568) = v89; (*(void (__thiscall **)(volatile LONG *, signed int))(*v89 + 488))(v89, 6); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v69 + 536) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v69 + 568) + 240))(0); switch ( v69 ) { case 0: v90 = **(_DWORD **)(v2 + 536); v91 = sub_40C190(1027742515); (*(void (__thiscall **)(_DWORD, const CHAR *))(v90 + 472))(*(_DWORD *)(v2 + 536), v91); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 568) + 472))(&unk_9EB242); v92 = *(_DWORD *)(v2 + 504); goto LABEL_51; case 1: v93 = **(_DWORD **)(v2 + 540); v94 = sub_40C190(-1579174713); (*(void (__thiscall **)(_DWORD, const CHAR *))(v93 + 472))(*(_DWORD *)(v2 + 540), v94); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 572) + 472))("/w"); v95 = sub_40C190(-1786286106); v96 = sub_40C190(1231385725); v97 = sub_7549E0("/w [%s] (%s)", v96, v95); sub_8F2EA0(*(void ***)(v2 + 508), v97); break; case 2: v98 = **(_DWORD **)(v2 + 544); v99 = sub_40C190(-297068768); (*(void (__thiscall **)(_DWORD, const CHAR *))(v98 + 472))(*(_DWORD *)(v2 + 544), v99); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 576) + 472))("/s"); v100 = sub_40C190(-1786286106); v101 = sub_7549E0("/s (%s)", v100); sub_8F2EA0(*(void ***)(v2 + 512), v101); break; case 3: v102 = **(_DWORD **)(v2 + 548); v103 = sub_40C190(927796889); (*(void (__thiscall **)(_DWORD, const CHAR *))(v102 + 472))(*(_DWORD *)(v2 + 548), v103); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 580) + 472))("/p"); v104 = sub_40C190(-1786286106); v105 = sub_7549E0("/p (%s)", v104); sub_8F2EA0(*(void ***)(v2 + 516), v105); break; case 4: v106 = **(_DWORD **)(v2 + 552); v107 = sub_40C190(792994427); (*(void (__thiscall **)(_DWORD, const CHAR *))(v106 + 472))(*(_DWORD *)(v2 + 552), v107); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 584) + 472))("/g"); v108 = sub_40C190(-1786286106); v109 = sub_7549E0("/g (%s)", v108); sub_8F2EA0(*(void ***)(v2 + 520), v109); break; case 5: v110 = **(_DWORD **)(v2 + 556); v111 = sub_40C190(893229738); (*(void (__thiscall **)(_DWORD, const CHAR *))(v110 + 472))(*(_DWORD *)(v2 + 556), v111); v112 = **(_DWORD **)(v2 + 588); v113 = sub_40C190(1131439703); v114 = sub_7549E0("/%s", v113); (*(void (__thiscall **)(_DWORD, char *))(v112 + 472))(*(_DWORD *)(v2 + 588), v114); v115 = sub_40C190(-1651719993); v116 = sub_40C190(1131439703); v117 = sub_7549E0("/%s (%s)", v116, v115); sub_8F2EA0(*(void ***)(v2 + 524), v117); break; case 6: v118 = **(_DWORD **)(v2 + 560); v119 = sub_40C190(-301740217); (*(void (__thiscall **)(_DWORD, const CHAR *))(v118 + 472))(*(_DWORD *)(v2 + 560), v119); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 592) + 472))("/r"); sub_8F2EA0(*(void ***)(v2 + 528), (const char *)&unk_9EB35C); v92 = *(_DWORD *)(v2 + 528); goto LABEL_51; case 7: v120 = **(_DWORD **)(v2 + 564); v121 = sub_40C190(-162519510); (*(void (__thiscall **)(_DWORD, const CHAR *))(v120 + 472))(*(_DWORD *)(v2 + 564), v121); v92 = *(_DWORD *)(v2 + 532); LABEL_51: *(_DWORD *)(v92 + 272) = 0; break; default: break; } v69 = *(_DWORD *)v206; } while ( *(_DWORD *)v206 < 8 ); v122 = sub_8FB140(v209, (int)"UnlockNor", (int)&v207, (int)&v208, v202); sub_8FB650(v122, v209, (int)"lockNor"); v123 = sub_465940((char *)v207 - (char *)v198, (int)v208 - v200, (int)v122, *(_DWORD *)(v2 + 480), 19, 0); v124 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 600) = v123; sub_403700(v123, v124); v125 = (*(int (**)(void))(**(_DWORD **)(v2 + 376) + 148))(); v126 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v127 = sub_4635E0(v126, v125, 0, 0, v2); *(_DWORD *)(v2 + 472) = v127; v128 = (*(int (__thiscall **)(int))(*(_DWORD *)v127 + 164))(v127); v129 = (int)v201 + v128; v130 = (int)v205 + (*(int (**)(void))(**(_DWORD **)(v2 + 472) + 168))(); *(_DWORD *)v206 = sub_8FB140(v209, (int)"FillterNor", (int)&v207, (int)&v208, 0); sub_8FB650(*(_DWORD **)v206, v209, (int)"FillterOver"); sub_8FB650(*(_DWORD **)v206, v209, (int)"FillterClick"); *(_DWORD *)(v2 + 428) = sub_8FE0F0( (int)v207 - v129, (int)v208 - v130, *(int *)v206, *(_DWORD *)(v2 + 472), 8, 0, 0); v131 = sub_40C190(-151050969); sub_8F2EA0(*(void ***)(v2 + 428), v131); v132 = v202; *(_DWORD *)(*(_DWORD *)(v2 + 428) + 272) = dword_AD01E8; v133 = sub_8FB140(v209, (int)"Emoticon", (int)&v207, (int)&v208, v132); v134 = sub_8FE0F0((char *)v207 - (char *)v201, (char *)v208 - (char *)v205, (int)v133, v2, 0, 0, 0); v135 = *(_DWORD *)(v2 + 444); *(_DWORD *)(v2 + 424) = v134; sub_403700(v134, v135); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 424) + 256))(0); v136 = sub_43D0D0(1u); v137 = sub_58E5D0(v136, 4, 4, 0); sub_56FF80((_DWORD *)(v2 + 452), (int)v137); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 452) + 232))(*(_DWORD *)(v2 + 452) + 232, v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 452)); v138 = sub_40C190(-284875477); v139 = sub_58E450((int)v138, 0, 0, 0, 0, 0); *(_DWORD *)(v139 + 332) = 17; sub_58E080(*(_DWORD **)(v2 + 452), v129, v139); v140 = sub_40C190(-179431613); v141 = sub_58E450((int)v140, 0, 0, 0, 0, 0); *(_DWORD *)(v141 + 332) = 18; sub_58E080(*(_DWORD **)(v2 + 452), v129, v141); v142 = sub_40C190(-167392443); v143 = sub_58E450((int)v142, 0, 0, 0, 0, 0); *(_DWORD *)(v143 + 332) = 19; sub_58E080(*(_DWORD **)(v2 + 452), v129, v143); v144 = sub_40C190(-285417689); v145 = sub_58E450((int)v144, 0, 0, 0, 0, 0); *(_DWORD *)(v145 + 332) = 20; sub_58E080(*(_DWORD **)(v2 + 452), v129, v145); sub_58D930(*(_DWORD **)(v2 + 452), 0); v146 = *(_DWORD *)(v2 + 452); (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v146 + 256))(*(_DWORD *)(v2 + 452), 0); v147 = sub_43D0D0(1u); v148 = sub_58E5D0(v147, 4, 4, 0); sub_56FF80((_DWORD *)(v2 + 460), (int)v148); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 460) + 232))(*(_DWORD *)(v2 + 460) + 232, v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 460)); v149 = *(_DWORD *)(dword_ACB6C4 + 56); if ( v149 ) v199 = *(_DWORD *)(v149 + 40); else v199 = 0; *(_DWORD *)v206 = 0; v200 = 0; if ( v199 ) { do { v150 = sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v200); if ( !v150 ) break; if ( *(_WORD *)(v150 + 65) == -1 && *(_DWORD *)v206 < 17 && *(_DWORD *)(v150 + 101) == 1 ) { v151 = sub_58E290((LPCSTR)(v150 + 33), 0, 0, 0, 0, 0, 0); *((_DWORD *)v151 + 83) = *(_DWORD *)v206 + 62; sub_58E080(*(_DWORD **)(v2 + 460), v146, (int)v151); ++*(_DWORD *)v206; } ++v200; } while ( v200 < v199 ); } sub_58D930(*(_DWORD **)(v2 + 460), 0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 460) + 256))(*(_DWORD *)(v2 + 460), 0); v152 = sub_43D0D0(1u); v153 = sub_58E5D0(v152, 4, 4, 0); v154 = *(_DWORD *)(v2 + 456); v198 = v153; if ( (volatile LONG *)v154 != v153 ) { if ( v154 && !InterlockedDecrement((volatile LONG *)(v154 + 4)) && v154 ) (**(void (__thiscall ***)(int, signed int))v154)(v154, 1); v155 = (int)v198; *(_DWORD *)(v2 + 456) = v198; if ( v155 ) InterlockedIncrement((volatile LONG *)(v155 + 4)); } (**(void (__thiscall ***)(int))(*(_DWORD *)(v2 + 456) + 232))(*(_DWORD *)(v2 + 456) + 232); sub_58DFD0(*(_DWORD **)(v2 + 456)); v156 = sub_40C190(-284875477); v157 = sub_58E290(v156, 0, 0, 0, 0, 0, 0); *((_DWORD *)v157 + 83) = 27; sub_58E080(*(_DWORD **)(v2 + 456), v154, (int)v157); v158 = sub_40C190(-167392443); v159 = sub_58E290(v158, 0, 0, 0, 0, 0, 0); *((_DWORD *)v159 + 83) = 28; sub_58E080(*(_DWORD **)(v2 + 456), v154, (int)v159); v160 = sub_40C190(-285417689); v161 = sub_58E290(v160, 0, 0, 0, 0, 0, 0); *((_DWORD *)v161 + 83) = 29; sub_58E080(*(_DWORD **)(v2 + 456), v154, (int)v161); sub_58D930(*(_DWORD **)(v2 + 456), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 456) + 256))(0); v162 = *(_DWORD *)(v2 + 376); v163 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v162 + 148))(*(_DWORD *)(v2 + 376)); v164 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v162 + 144))(v162, v163); v165 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v166 = sub_4635E0(v165 - v164, 0, 0, v2, v2 + 232); *(_DWORD *)(v2 + 476) = v166; v167 = (*(int (__thiscall **)(int))(*(_DWORD *)v166 + 164))(v166); v168 = (int)v201 + v167; v169 = (int)v205 + (*(int (**)(void))(**(_DWORD **)(v2 + 476) + 168))(); *(_DWORD *)v206 = sub_8FB140(v209, (int)"PreUpNor", (int)&v207, (int)&v208, 0); sub_8FB650(*(_DWORD **)v206, v209, (int)"PreUpOver"); sub_8FB650(*(_DWORD **)v206, v209, (int)"PreUpClick"); v170 = sub_8FE0F0((int)v207 - v168, (int)v208 - v169, *(int *)v206, *(_DWORD *)(v2 + 476), 0, 0, 0); v197 = v170; *(_DWORD *)(v2 + 396) = v170; v171 = *(volatile LONG **)(v2 + 444); v201 = v171; v196 = (void *)v171; if ( v171 ) InterlockedIncrement(v171 + 1); LOBYTE(v210) = 3; sub_8A6330((_DWORD *)v197 + 39, (int *)&v196); LOBYTE(v210) = 0; if ( v201 && !InterlockedDecrement(v201 + 1) ) (**(void (__stdcall ***)(signed int))v201)(1); *(_DWORD *)v206 = sub_8FB140(v209, (int)"NextDownNor", (int)&v207, (int)&v208, 0); sub_8FB650(*(_DWORD **)v206, v209, (int)"NextDownOver"); sub_8FB650(*(_DWORD **)v206, v209, (int)"NextDownClick"); v172 = sub_8FE0F0((int)v207 - v168, (int)v208 - v169, *(int *)v206, *(_DWORD *)(v2 + 476), 1, 0, 0); v197 = v172; *(_DWORD *)(v2 + 384) = v172; v173 = *(volatile LONG **)(v2 + 444); v201 = v173; v196 = (void *)v173; if ( v173 ) InterlockedIncrement(v173 + 1); LOBYTE(v210) = 4; sub_8A6330((_DWORD *)v197 + 39, (int *)&v196); LOBYTE(v210) = 0; if ( v201 && !InterlockedDecrement(v201 + 1) ) (**(void (__stdcall ***)(signed int))v201)(1); *(_DWORD *)v206 = sub_8FB140(v209, (int)"DownNor", (int)&v207, (int)&v208, 0); sub_8FB650(*(_DWORD **)v206, v209, (int)"DownOver"); sub_8FB650(*(_DWORD **)v206, v209, (int)"DownClick"); v174 = sub_8FE0F0((int)v207 - v168, (int)v208 - v169, *(int *)v206, *(_DWORD *)(v2 + 476), 2, 0, 0); v197 = v174; *(_DWORD *)(v2 + 408) = v174; v175 = *(volatile LONG **)(v2 + 444); v201 = v175; v196 = (void *)v175; if ( v175 ) InterlockedIncrement(v175 + 1); LOBYTE(v210) = 5; sub_8A6330((_DWORD *)v197 + 39, (int *)&v196); LOBYTE(v210) = 0; if ( v201 && !InterlockedDecrement(v201 + 1) ) (**(void (__stdcall ***)(signed int))v201)(1); if ( !sub_8F71E0(v209, (int)"ChaMsgView", &v207, &v208, &v204, &v203) ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v209; v210 = -1; if ( !v209 || InterlockedDecrement((volatile LONG *)(v209 + 4)) ) return 0; v4 = v3 == 0; goto LABEL_5; } v176 = sub_43D0D0(0xBu); v177 = sub_45C5B0(v176, 7, 7, (int)v207 - v168, (int)v208 - v169, *(_DWORD *)(v2 + 476), a2); v178 = v203; v179 = v204; *(_DWORD *)(v2 + 380) = v177; (*(void (__thiscall **)(volatile LONG *, int, int))(*v177 + 540))(v177, v179, v178); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 380) + 364) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 256))(0); sub_403700(*(_DWORD **)(v2 + 380), *(_DWORD *)(v2 + 444)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v196 = (void *)(v204 - 4); v180 = sub_45A900( (int)((char *)v207 - v168 + 4), (int)((char *)v208 - v169 + 4), v204 - 4, v203 - 1, *(_DWORD *)(v2 + 476), 1342177280, 128, 1, 1, 0, 0); v181 = *(_DWORD *)(v2 + 448); v198 = v180; v211 = (void (__stdcall ***)(signed int))v181; if ( (volatile LONG *)v181 != v180 ) { if ( v181 && !InterlockedDecrement((volatile LONG *)(v181 + 4)) && v211 ) (**v211)(1); v182 = (int)v198; *(_DWORD *)(v2 + 448) = v198; if ( v182 ) InterlockedIncrement((volatile LONG *)(v182 + 4)); } sub_459B60(*(_DWORD **)(v2 + 448), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 240))(0); v183 = sub_8FB140(v209, (int)"ChaK", (int)&v207, (int)&v208, v202); v184 = sub_8F3EB0((int)v207 - v168, (int)v208 - v169, (int)v183, *(_DWORD *)(v2 + 476), 0, 0); *(_DWORD *)(v2 + 432) = v184; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v184 + 256))(v184, 0); sub_403700(*(_DWORD **)(v2 + 432), *(_DWORD *)(v2 + 444)); v185 = sub_8FB140(v209, (int)"ChaE", (int)&v207, (int)&v208, v202); v186 = sub_8F3EB0((int)v207 - v168, (int)v208 - v169, (int)v185, *(_DWORD *)(v2 + 476), 0, 0); *(_DWORD *)(v2 + 436) = v186; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v186 + 256))(v186, 0); sub_403700(*(_DWORD **)(v2 + 436), *(_DWORD *)(v2 + 444)); v187 = *(_DWORD *)(v2 + 380); v188 = (*(int (**)(void))(**(_DWORD **)(v2 + 376) + 144))(); *(_DWORD *)(v2 + 484) = v188 - (*(int (__thiscall **)(int))(*(_DWORD *)v187 + 144))(v187); *(_DWORD *)(v2 + 348) = 0; v189 = sub_40C190(-284875477); v190 = *(_DWORD *)(v2 + 464); if ( v190 ) (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v190 + 472))(v189); sub_5FBE30(*(_BYTE **)(v2 + 372), 1); *(_DWORD *)(v2 + 352) = 0; v191 = sub_40C190(-284875477); v192 = *(_DWORD *)(v2 + 464); if ( v192 ) (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v192 + 472))(v191); sub_49F570((void *)v2, xRight, dword_AC2F78, 0.0, 0.80000001); v193 = (void (__thiscall ***)(_DWORD, signed int))v209; v210 = -1; if ( v209 && !InterlockedDecrement((volatile LONG *)(v209 + 4)) && v193 ) (**v193)(v193, 1); result = 1; } else { LABEL_107: v210 = -1; sub_410C00(&v209); result = 0; } } else { v30 = (void (__thiscall ***)(_DWORD, signed int))v209; v210 = -1; if ( v209 && !InterlockedDecrement((volatile LONG *)(v209 + 4)) && v30 ) (**v30)(v30, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // ACB6C4: using guessed type int dword_ACB6C4; // AD01E8: using guessed type int dword_AD01E8; //----- (00603900) -------------------------------------------------------- void __thiscall sub_603900(int this, int a2, int a3) { int v3; // esi const CHAR *v4; // eax int v5; // ecx const CHAR *v6; // eax char *v7; // eax v3 = this; switch ( a2 ) { case 0: sub_5FCF60(*(_DWORD **)(this + 372)); return; case 1: sub_5FBDB0(*(_DWORD **)(this + 372)); return; case 2: sub_5FBDE0(*(_DWORD **)(this + 372)); return; case 3: sub_6011D0((_DWORD **)this); return; case 4: sub_5FBE30(*(_BYTE **)(this + 372), 1); *(_DWORD *)(v3 + 352) = 0; v4 = sub_40C190(-284875477); goto LABEL_8; case 5: sub_5FBE30(*(_BYTE **)(this + 372), 1); *(_DWORD *)(v3 + 352) = 1; v4 = sub_40C190(-179431613); goto LABEL_8; case 6: sub_5FBE30(*(_BYTE **)(this + 372), 1); *(_DWORD *)(v3 + 352) = 2; v4 = sub_40C190(-167392443); goto LABEL_8; case 7: sub_5FBE30(*(_BYTE **)(this + 372), 1); *(_DWORD *)(v3 + 352) = 3; v4 = sub_40C190(-285417689); LABEL_8: v5 = *(_DWORD *)(v3 + 464); if ( v5 ) (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v5 + 472))(v4); break; case 8: (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(this + 452) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 452)); break; case 9: sub_4A4C30(*(_DWORD **)(this + 296)); break; case 10: sub_601130((_DWORD *)this); break; case 11: sub_601270((_DWORD **)this, (int)&unk_9EB243); break; case 12: sub_601270((_DWORD **)this, (int)"/w "); break; case 13: sub_601270((_DWORD **)this, (int)"/s "); break; case 14: sub_601270((_DWORD **)this, (int)"/p "); break; case 15: sub_601270((_DWORD **)this, (int)"/g "); break; case 16: v6 = sub_40C190(1131439703); v7 = sub_7549E0("/%s ", v6); sub_601270((_DWORD **)v3, (int)v7); break; case 17: sub_601270((_DWORD **)this, (int)"/r "); break; case 18: (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(this + 460) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 460)); break; case 19: *(_BYTE *)(*(_DWORD *)(this + 600) + 380) = *(_BYTE *)(*(_DWORD *)(this + 600) + 380) == 0; (*(void (__stdcall **)(bool))(*(_DWORD *)this + 520))(*(_BYTE *)(*(_DWORD *)(this + 600) + 380) == 0); *(_BYTE *)(*(_DWORD *)(v3 + 376) + 412) = *(_BYTE *)(*(_DWORD *)(v3 + 600) + 380); break; default: return; } } //----- (00603BA0) -------------------------------------------------------- void __userpurge sub_603BA0(int a1@, int a2@, int a3@, int a4, _DWORD *a5, int a6) { int v6; // esi int v7; // eax int v8; // eax int v9; // eax int *v10; // ecx int v11; // eax int v12; // eax int *v13; // ecx int v14; // eax int v15; // eax int v16; // ebx int v17; // eax int v18; // eax int *v19; // eax int v20; // ebx int v21; // eax int *v22; // eax int v23; // ebx int v24; // eax int *v25; // eax int v26; // ebx int v27; // eax int *v28; // eax int v29; // edi int v30; // eax int *v31; // eax int v32; // edi int v33; // eax int *v34; // ecx int v35; // edi int v36; // ebx int v37; // eax int v38; // eax int *v39; // ebx int v40; // edi int v41; // eax int *v42; // ebx int v43; // edi int v44; // eax int v45; // edi int v46; // ebx int v47; // eax int v48; // eax int v49; // edi int v50; // eax int v51; // eax int v52; // eax int v53; // eax int v54; // eax int v55; // eax int v56; // eax int v57; // eax int v58; // eax int v59; // eax int v60; // eax int v61; // eax int v62; // eax int v63; // eax int v64; // eax int v65; // eax int v66; // eax signed int v67; // edi const CHAR *v68; // eax int v69; // ecx _DWORD *v70; // ecx int v71; // esi int v72; // [esp+30h] [ebp-8h] int v73; // [esp+34h] [ebp-4h] int v74; // [esp+40h] [ebp+8h] int v75; // [esp+44h] [ebp+Ch] int v76; // [esp+44h] [ebp+Ch] int v77; // [esp+44h] [ebp+Ch] int v78; // [esp+48h] [ebp+10h] int v79; // [esp+48h] [ebp+10h] int v80; // [esp+48h] [ebp+10h] int v81; // [esp+48h] [ebp+10h] int v82; // [esp+48h] [ebp+10h] int v83; // [esp+48h] [ebp+10h] int v84; // [esp+48h] [ebp+10h] int v85; // [esp+48h] [ebp+10h] int v86; // [esp+48h] [ebp+10h] int v87; // [esp+48h] [ebp+10h] v6 = a1; switch ( a4 ) { case 2: v51 = *(_DWORD *)(a1 + 144); if ( v51 ) v52 = v51 + 232; else v52 = 0; if ( a6 == v52 ) goto LABEL_49; v53 = *(_DWORD *)(a1 + 140); v54 = v53 ? v53 + 232 : 0; if ( v54 == a6 ) goto LABEL_49; v55 = *(_DWORD *)(a1 + 152); if ( v55 ) v56 = v55 + 232; else v56 = 0; if ( v56 == a6 ) { *(float *)(a1 + 160) = flt_ACCFCC; *(_BYTE *)(a1 + 156) = 1; } else { v57 = *(_DWORD *)(a1 + 164); if ( v57 ) v58 = v57 + 232; else v58 = 0; if ( v58 == a6 ) { *(float *)(a1 + 172) = flt_ACCFCC; *(_BYTE *)(a1 + 168) = 1; } } break; case 3: v63 = *(_DWORD *)(a1 + 152); if ( v63 ) v64 = v63 + 232; else v64 = 0; if ( v64 == a6 ) { *(_BYTE *)(a1 + 156) = 0; } else { v65 = *(_DWORD *)(a1 + 164); if ( v65 ) v66 = v65 + 232; else v66 = 0; if ( v66 == a6 ) *(_BYTE *)(a1 + 168) = 0; } break; case 5: v59 = *(_DWORD *)(a1 + 144); if ( v59 ) v60 = v59 + 232; else v60 = 0; if ( a6 == v60 || ((v61 = *(_DWORD *)(a1 + 140)) == 0 ? (v62 = 0) : (v62 = v61 + 232), v62 == a6) ) LABEL_49: *(float *)(a1 + 264) = 0.0; break; case 14: v7 = *(_DWORD *)(a1 + 144); if ( v7 ) v8 = v7 + 232; else v8 = 0; if ( a6 == v8 ) { v78 = *(_DWORD *)(a1 - 232); v9 = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)(a1 - 232) + 168))(a1 - 232, a3, a2); (*(void (__thiscall **)(int, int))(v78 + 176))(v6 - 232, a5[1] + v9); v10 = *(int **)(v6 + 144); v79 = *v10; v11 = (*(int (**)(void))(*v10 + 164))(); (*(void (__thiscall **)(_DWORD, int))(v79 + 172))(*(_DWORD *)(v6 + 144), *a5 + v11); v80 = *(_DWORD *)(v6 + 144); v73 = (*(int (**)(void))(**(_DWORD **)(v6 + 144) + 144))() - 2 * *(_DWORD *)(v80 + 356); v81 = *(_DWORD *)(v6 + 144); v72 = (*(int (**)(void))(**(_DWORD **)(v6 + 144) + 148))() - 2 * *(_DWORD *)(v81 + 352); if ( a5[2] && !*a5 ) { v82 = *(_DWORD *)(v6 - 232); v12 = (*(int (__thiscall **)(int))(v82 + 164))(v6 - 232); (*(void (__thiscall **)(int, int))(v82 + 172))(v6 - 232, a5[2] + v12); v13 = *(int **)(v6 + 144); v83 = *v13; v14 = (*(int (**)(void))(*v13 + 164))(); (*(void (__thiscall **)(_DWORD, int))(v83 + 172))(*(_DWORD *)(v6 + 144), v14 - a5[2]); } v15 = *(_DWORD *)(v6 + 144); v16 = *(_DWORD *)(v6 + 144); v84 = *(_DWORD *)(v15 + 352); v75 = *(_DWORD *)(v15 + 356); v74 = **(_DWORD **)(v6 + 140); v17 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v16 + 168))(*(_DWORD *)(v6 + 144)); v18 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v16 + 164))(v16, v84 + v17); (*(void (__thiscall **)(_DWORD, int))(v74 + 308))(*(_DWORD *)(v6 + 140), v75 + v18); (*(void (__stdcall **)(int))(**(_DWORD **)(v6 + 140) + 152))(v73); (*(void (__stdcall **)(int))(**(_DWORD **)(v6 + 140) + 156))(v72); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v6 + 140) + 324))(LODWORD(flt_ACCFCC)); v19 = *(int **)(v6 + 248); if ( v19 ) { v20 = *(_DWORD *)(v6 + 144); v76 = *v19; v85 = (*(int (__thiscall **)(int))(*(_DWORD *)(v6 - 232) + 144))(v6 - 232); v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v20 + 144))(v20); (*(void (__thiscall **)(_DWORD, int))(v76 + 172))(*(_DWORD *)(v6 + 248), v85 - v21); } v22 = *(int **)(v6 + 244); if ( v22 ) { v23 = *(_DWORD *)(v6 + 144); v77 = *v22; v86 = (*(int (__thiscall **)(int))(*(_DWORD *)(v6 - 232) + 144))(v6 - 232); v24 = (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 144))(v23); (*(void (__thiscall **)(_DWORD, int))(v77 + 172))(*(_DWORD *)(v6 + 244), v86 - v24); } v25 = *(int **)(v6 + 240); if ( v25 ) { v26 = *v25; v27 = (*(int (__thiscall **)(int))(*(_DWORD *)(v6 - 232) + 144))(v6 - 232); (*(void (__thiscall **)(_DWORD, int))(v26 + 172))(*(_DWORD *)(v6 + 240), v27); } v28 = *(int **)(v6 + 244); if ( v28 ) { v29 = *v28; v30 = (*(int (**)(void))(**(_DWORD **)(v6 + 144) + 148))(); (*(void (__thiscall **)(_DWORD, int))(v29 + 176))(*(_DWORD *)(v6 + 244), v30); } v31 = *(int **)(v6 + 240); if ( v31 ) { v32 = *v31; v33 = (*(int (**)(void))(**(_DWORD **)(v6 + 144) + 148))(); (*(void (__thiscall **)(_DWORD, int))(v32 + 176))(*(_DWORD *)(v6 + 240), v33); } v34 = *(int **)(v6 + 148); if ( v34 ) { v35 = *v34; v36 = *(_DWORD *)(v6 + 144); v37 = (*(int (**)(void))(*v34 + 148))(); v38 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v36 + 144))(v36, v37); (*(void (__thiscall **)(_DWORD, int))(v35 + 540))(*(_DWORD *)(v6 + 148), v38 - *(_DWORD *)(v6 + 252)); v39 = *(int **)(v6 + 216); v40 = *v39; v41 = (*(int (**)(void))(**(_DWORD **)(v6 + 148) + 144))(); (*(void (__thiscall **)(int *, int))(v40 + 152))(v39, v41 - 4); v42 = *(int **)(v6 + 216); v43 = *v42; v44 = (*(int (**)(void))(**(_DWORD **)(v6 + 148) + 148))(); (*(void (__thiscall **)(int *, int))(v43 + 156))(v42, v44 - 1); v45 = *(_DWORD *)(v6 + 148); v46 = **(_DWORD **)(v6 + 216); v87 = *(_DWORD *)(v6 + 216); v47 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v45 + 168))(*(_DWORD *)(v6 + 148)); v48 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v45 + 164))(v45, v47 + 4); (*(void (__thiscall **)(int, int))(v46 + 308))(v87, v48 + 4); } if ( *(_DWORD *)(v6 + 248) ) { v49 = **(_DWORD **)(v6 + 368); v50 = (*(int (**)(void))(**(_DWORD **)(v6 + 144) + 144))(); (*(void (__thiscall **)(_DWORD, int))(v49 + 172))(*(_DWORD *)(v6 + 368), v50); } } break; case 15: v67 = 0; switch ( *a5 ) { case 0x11: v67 = 1; break; case 0x12: v67 = 8; break; case 0x13: v67 = 16; break; case 0x14: v67 = 32; break; case 0x15: v67 = 4096; break; case 0x1B: *(_DWORD *)(a1 + 116) = 0; v68 = sub_40C190(-284875477); v69 = *(_DWORD *)(v6 + 232); if ( v69 ) (*(void (__stdcall **)(const CHAR *))(*(_DWORD *)v69 + 472))(v68); break; case 0x1C: sub_602020((_DWORD *)(a1 - 232), (const CHAR *)2); break; case 0x1D: sub_602020((_DWORD *)(a1 - 232), (const CHAR *)3); break; case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: v70 = *(_DWORD **)(*(_DWORD *)(a1 + 64) + 772); if ( v70 ) sub_4E7FB0(v70, *a5 - 62); break; default: break; } v71 = *(_DWORD *)(v6 + 140); if ( *((_BYTE *)a5 + 4) ) *(_DWORD *)(v71 + 512) |= v67; else *(_DWORD *)(v71 + 512) &= ~v67; break; default: return; } } // 603BA0: could not find valid save-restore pair for ebx // 603BA0: could not find valid save-restore pair for edi // ACCFCC: using guessed type float flt_ACCFCC; //----- (00604370) -------------------------------------------------------- void *__thiscall sub_604370(void *this, char a2) { void *v2; // esi v2 = this; sub_6017C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006043E0) -------------------------------------------------------- char sub_6043E0() { return 0; } //----- (006043F0) -------------------------------------------------------- char __fastcall sub_6043F0(char *a1) { char v1; // al if ( a1 ) { v1 = *a1; if ( *a1 ) { while ( v1 == 32 ) { v1 = (a1++)[1]; if ( !v1 ) return 1; } } } return 0; } //----- (00604420) -------------------------------------------------------- int __stdcall sub_604420(int a1) { CHAR v2; // [esp+0h] [ebp-104h] return wsprintfA(&v2, "%s", a1); } //----- (00604460) -------------------------------------------------------- void __thiscall sub_604460(_DWORD **this, int a2) { _DWORD **v2; // esi CHAR v3; // [esp+4h] [ebp-104h] v2 = this; wsprintfA(&v3, "%s", a2); sub_5FCEA0(v2[94], 128, &v3); } //----- (006044C0) -------------------------------------------------------- int __thiscall sub_6044C0(_DWORD **this, _DWORD *a2, int *a3) { _DWORD **v3; // esi int result; // eax v3 = this; *a2 = (*(int (**)(void))(*this[95] + 144))(); result = (*(int (**)(void))(*v3[95] + 148))(); *a3 = result; return result; } //----- (00604500) -------------------------------------------------------- int __thiscall sub_604500(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi int v4; // eax int v5; // ebx int v6; // ST18_4 int v7; // edi int v8; // ebx int v9; // ST18_4 int v10; // eax _DWORD *v11; // ecx int v12; // eax _DWORD *v13; // ecx _DWORD *v14; // eax int v15; // eax int v17; // [esp+10h] [ebp-14h] int v18; // [esp+14h] [ebp-10h] int v19; // [esp+18h] [ebp-Ch] int v20; // [esp+1Ch] [ebp-8h] v3 = this; v4 = (*(int (**)(void))(*this[95] + 144))(); v5 = v4 - a2; v6 = v4 - a2; v7 = v5 + (*(int (**)(void))(*v3[95] + 164))(); v8 = (*(int (**)(void))(*v3[95] + 144))() - v6; v9 = (*(int (**)(void))(*v3[95] + 168))(); (*(void (**)(void))(*v3[95] + 144))(); (*(void (**)(void))(*v3[95] + 148))(); v10 = (*(int (**)(void))(*v3[95] + 144))(); v11 = v3[95]; v19 = v8 - v10; v20 = a3 - (*(int (**)(void))(*v11 + 148))(); v12 = (*(int (**)(void))(*v3[95] + 164))(); v13 = v3[95]; v17 = v7 - v12; v18 = v9 - (*(int (**)(void))(*v13 + 168))(); (*(void (__stdcall **)(int, int))(*v3[95] + 540))(a2, a3); v14 = v3[95]; if ( v14 ) v15 = (int)(v14 + 58); else v15 = 0; return ((int (__thiscall *)(_DWORD **, signed int, int *, int))v3[58][3])(v3 + 58, 14, &v17, v15); } //----- (00604660) -------------------------------------------------------- void __thiscall sub_604660(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // esi char v4; // al int **v5; // edi int v6; // esi unsigned __int8 v7; // al signed int v8; // [esp+4h] [ebp-4h] v1 = this; if ( this[86] ) { v2 = (int *)this[86]; v3 = *v2; v4 = (*(int (**)(void))(*v2 + 260))(); (*(void (__thiscall **)(_DWORD, bool))(v3 + 256))(v1[86], v4 == 0); v5 = (int **)(v1 + 144); v8 = 11; do { v6 = **v5; v7 = (*(int (**)(void))(*(_DWORD *)v1[86] + 260))(); (*(void (__thiscall **)(int *, _DWORD))(v6 + 256))(*v5, v7); ++v5; --v8; } while ( v8 ); } } //----- (006046F0) -------------------------------------------------------- int __thiscall sub_6046F0(void *this) { return (*(int (__stdcall **)(signed int, signed int))(*(_DWORD *)this + 380))(22, 1); } //----- (00604700) -------------------------------------------------------- int __thiscall sub_604700(void *this) { return (*(int (__stdcall **)(signed int, signed int))(*(_DWORD *)this + 380))(23, 1); } //----- (00604710) -------------------------------------------------------- int __thiscall sub_604710(void *this) { return (*(int (__stdcall **)(signed int, signed int))(*(_DWORD *)this + 380))(24, 1); } //----- (00604720) -------------------------------------------------------- int __thiscall sub_604720(void *this) { return (*(int (__stdcall **)(signed int, signed int))(*(_DWORD *)this + 380))(26, 1); } //----- (00604730) -------------------------------------------------------- char __thiscall sub_604730(_DWORD **this) { char result; // al if ( this[96] ) result = (*(int (**)(void))(*this[96] + 260))(); else result = 0; return result; } //----- (00604750) -------------------------------------------------------- int __thiscall sub_604750(_DWORD **this) { return (*(int (**)(void))(*this[98] + 460))(); } //----- (00604770) -------------------------------------------------------- HWND __thiscall sub_604770(int this) { int v1; // esi HWND result; // eax v1 = this; if ( *(_DWORD *)(this + 348) == 1 ) { (*(void (**)(void))(**(_DWORD **)(this + 392) + 480))(); result = sub_459C60(*(_DWORD **)(v1 + 392)); } return result; } //----- (006047A0) -------------------------------------------------------- int __thiscall sub_6047A0(void *this) { return (*(int (__stdcall **)(signed int, signed int))(*(_DWORD *)this + 380))(25, 1); } //----- (006047B0) -------------------------------------------------------- int __stdcall sub_6047B0(char *a1, char *a2) { char v2; // al int v3; // esi char *v4; // eax unsigned int v5; // ecx size_t v6; // ecx if ( a2 ) { v2 = *a2; v3 = 0; if ( *a2 == 91 ) { LABEL_6: v4 = strchr(a2, 93); v5 = strlen(&a2[v3 + 1]); v6 = v5 - strlen(v4); if ( v6 <= 0x14 ) strncpy(a1, a2 + 1, v6); } else if ( v2 == 123 ) { while ( v2 != 125 ) { v2 = a2[v3++ + 1]; if ( v2 == 91 ) goto LABEL_6; } } } return 0; } //----- (00604820) -------------------------------------------------------- bool __stdcall sub_604820(char *a1, char *a2) { bool result; // al char v3; // [esp+4h] [ebp-18h] int v4; // [esp+5h] [ebp-17h] int v5; // [esp+9h] [ebp-13h] int v6; // [esp+Dh] [ebp-Fh] int v7; // [esp+11h] [ebp-Bh] __int16 v8; // [esp+15h] [ebp-7h] char v9; // [esp+17h] [ebp-5h] v4 = 0; v5 = 0; v6 = 0; v7 = 0; v8 = 0; v9 = 0; v3 = 0; sub_6047B0(&v3, a2); if ( v3 ) result = strncmp(a1, &v3, 0x14u) == 0; else result = 0; return result; } //----- (006048A0) -------------------------------------------------------- char __thiscall sub_6048A0(_DWORD **this) { char result; // al if ( this[193] ) result = (*(int (**)(void))(*this[193] + 260))(); else result = 1; return result; } //----- (00604B20) -------------------------------------------------------- char __stdcall sub_604B20(int a1, int a2, int a3) { return 0; } //----- (00604BD0) -------------------------------------------------------- void __thiscall sub_604BD0(void *this) { int v1; // esi int v2; // eax volatile LONG *v3; // eax volatile LONG *v4; // edi volatile LONG *v5; // ebx signed int v6; // ebx int *v7; // edi int v8; // eax int v9; // edx int v10; // ecx int v11; // edx volatile LONG *v12; // eax int v13; // eax int v14; // ecx int v15; // edi int v16; // ebx int v17; // eax int v18; // ecx _DWORD *v19; // edi int v20; // ebx int v21; // eax int v22; // [esp+Ch] [ebp-28h] int v23; // [esp+10h] [ebp-24h] int v24; // [esp+14h] [ebp-20h] CHAR String[4]; // [esp+18h] [ebp-1Ch] int v26; // [esp+1Ch] [ebp-18h] int v27; // [esp+20h] [ebp-14h] int v28; // [esp+24h] [ebp-10h] int v29; // [esp+28h] [ebp-Ch] char v30; // [esp+2Ch] [ebp-8h] v1 = (int)this; v24 = 0; v2 = sub_43D0D0(1u); v3 = sub_58E5D0(v2, 4, 4, 0); v4 = *(volatile LONG **)(v1 + 488); v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 488) = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v1 + 488) + 232))(*(_DWORD *)(v1 + 488) + 232, v1 + 232); sub_58DFD0(*(_DWORD **)(v1 + 488)); v6 = 0; v7 = (int *)(*(_DWORD *)(v1 + 296) + 4716); do { v29 = 0; v28 = 0; v27 = 0; v26 = 0; *(_DWORD *)String = 0; strncpy(String, &byte_9EB70B, 0x14u); v8 = *(v7 - 2); if ( v8 != *(_DWORD *)String || *(v7 - 1) != v26 || *v7 != v27 || v7[1] != v28 || v7[2] != v29 ) { v9 = *(v7 - 1); v10 = v7[1]; ++v24; *(_DWORD *)String = v8; v27 = *v7; v26 = v9; v11 = v7[2]; v28 = v10; v29 = v11; v30 = 0; v12 = sub_58E290(String, 0, 0, 0, 0, 0, 0); *((_DWORD *)v12 + 83) = v6 + 79; sub_58E080(*(_DWORD **)(v1 + 488), (int)v7, (int)v12); } ++v6; v7 += 5; } while ( v6 < 6 ); sub_58D930(*(_DWORD **)(v1 + 488), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 488) + 256))(0); v13 = (*(int (**)(void))(**(_DWORD **)(v1 + 432) + 164))(); v14 = *(_DWORD *)(v1 + 488); v15 = *(_DWORD *)(v1 + 432); v22 = v13; v16 = (*(int (**)(void))(*(_DWORD *)v14 + 148))(); v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 168))(v15); v18 = *(_DWORD *)(v1 + 552); v23 = v17 - v16; (*(void (__stdcall **)(int *, int *))(*(_DWORD *)v18 + 220))(&v22, &v23); v19 = *(_DWORD **)(v1 + 380); v20 = *(_DWORD *)(v1 + 488); v21 = (*(int (__thiscall **)(_DWORD))(*v19 + 148))(*(_DWORD *)(v1 + 380)); (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v20 + 308))(v20, v22, v23 + v21 - 2 * v19[88]); if ( v24 > 0 ) sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v1 + 488)); } //----- (00604E00) -------------------------------------------------------- int __thiscall sub_604E00(_DWORD **this) { return (*(int (**)(void))(*this[116] + 492))(); } //----- (00604E10) -------------------------------------------------------- void __thiscall sub_604E10(_DWORD **this, const char *a2) { _DWORD **v2; // esi signed int v3; // edi v2 = this + 89; v3 = 5; do { sub_5FD760(*v2, a2); ++v2; --v3; } while ( v3 ); } //----- (00604E40) -------------------------------------------------------- void __thiscall sub_604E40(_DWORD **this, char *a2) { _DWORD **v2; // esi signed int v3; // edi v2 = this + 89; v3 = 5; do { sub_5FCEA0(*v2, 1024, a2); ++v2; --v3; } while ( v3 ); } //----- (00604E70) -------------------------------------------------------- void __thiscall sub_604E70(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 2048, &v5); ++v3; --v4; } while ( v4 ); } //----- (00604EE0) -------------------------------------------------------- void __thiscall sub_604EE0(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 1544, &v5); ++v3; --v4; } while ( v4 ); } //----- (00604F50) -------------------------------------------------------- void __thiscall sub_604F50(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 2, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605030) -------------------------------------------------------- void __thiscall sub_605030(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 8, &v5); ++v3; --v4; } while ( v4 ); } //----- (006050A0) -------------------------------------------------------- void __thiscall sub_6050A0(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 16, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605110) -------------------------------------------------------- void __thiscall sub_605110(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 16, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605180) -------------------------------------------------------- void __thiscall sub_605180(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 0x2000, &v5); ++v3; --v4; } while ( v4 ); } //----- (006051F0) -------------------------------------------------------- void __thiscall sub_6051F0(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 0x2000, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605260) -------------------------------------------------------- void __thiscall sub_605260(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 0x4000, &v5); ++v3; --v4; } while ( v4 ); } //----- (006052D0) -------------------------------------------------------- void __thiscall sub_6052D0(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 32, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605340) -------------------------------------------------------- void __thiscall sub_605340(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 32, &v5); ++v3; --v4; } while ( v4 ); } //----- (006053B0) -------------------------------------------------------- void __thiscall sub_6053B0(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 4096, &v5); ++v3; --v4; } while ( v4 ); } //----- (00605420) -------------------------------------------------------- void __thiscall sub_605420(char *this, int a2) { char *v2; // esi _DWORD **v3; // esi signed int v4; // edi CHAR v5; // [esp+8h] [ebp-104h] v2 = this; wsprintfA(&v5, "%s", a2); v3 = (_DWORD **)(v2 + 356); v4 = 5; do { sub_5FCEA0(*v3, 4096, &v5); ++v3; --v4; } while ( v4 ); } //----- (006054B0) -------------------------------------------------------- int __userpurge sub_6054B0@(int a1@, int a2@, int a3@, unsigned int a4, int a5) { int v5; // edi int result; // eax _DWORD **v7; // esi _DWORD **v8; // esi _DWORD **v9; // esi _DWORD **v10; // esi _DWORD **v11; // esi _DWORD **v12; // esi _DWORD **v13; // esi int v14; // [esp-8h] [ebp-14h] int v15; // [esp+4h] [ebp-8h] char v16; // [esp+8h] [ebp-4h] v5 = a1; result = a1 + 356; if ( a1 != -356 ) { *(_DWORD *)(*(_DWORD *)(a1 + 4 * a5 + 356) + 512) = a4; v14 = a3; v7 = (_DWORD **)(*(_DWORD *)(a1 + 4 * a5 + 468) + 232); v15 = 17; v16 = (a4 >> 9) & 1; if ( v7[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 4))(16, &v15, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 16))(16, &v15, v7); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **, int, int))(*v7)[4])(v7, 16, &v15, v7, v14, a2); v8 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 18; v16 = (a4 >> 3) & 1; if ( v8[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 4))(16, &v15, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 16))(16, &v15, v8); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v8)[4])(v8, 16, &v15, v8); v9 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 19; v16 = (a4 >> 4) & 1; if ( v9[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v9[1] + 4))(16, &v15, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v9[1] + 16))(16, &v15, v9); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v9)[4])(v9, 16, &v15, v9); v10 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 20; v16 = (a4 >> 5) & 1; if ( v10[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v10[1] + 4))(16, &v15, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v10[1] + 16))(16, &v15, v10); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v10)[4])(v10, 16, &v15, v10); v11 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 21; v16 = (a4 >> 12) & 1; if ( v11[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v11[1] + 4))(16, &v15, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v11[1] + 16))(16, &v15, v11); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v11)[4])(v11, 16, &v15, v11); v12 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 24; v16 = (a4 >> 1) & 1; if ( v12[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v12[1] + 4))(16, &v15, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v12[1] + 16))(16, &v15, v12); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v12)[4])(v12, 16, &v15, v12); v13 = (_DWORD **)(*(_DWORD *)(v5 + 4 * a5 + 468) + 232); v15 = 22; v16 = (a4 >> 13) & 1; if ( v13[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v13[1] + 4))(16, &v15, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v13[1] + 16))(16, &v15, v13); } result = ((int (__thiscall *)(_DWORD **, signed int))(*v13)[4])(v13, 16); } return result; } // 6054B0: could not find valid save-restore pair for ebx // 6054B0: could not find valid save-restore pair for esi //----- (006057B0) -------------------------------------------------------- int __thiscall sub_6057B0(_DWORD **this) { return (*(int (**)(void))(*this[116] + 452))(); } //----- (006057C0) -------------------------------------------------------- BOOL sub_6057C0() { return byte_B92026 == 0; } // B92026: using guessed type char byte_B92026; //----- (006057D0) -------------------------------------------------------- char __thiscall sub_6057D0(int this) { char v1; // bl char *v3; // ecx v1 = 0; if ( *(float *)(this + 572) < 1.0 ) return 0; v3 = *(char **)(this + 380); if ( v3 ) { if ( v3[365] ) return 2; if ( (unsigned __int8)sub_45B520(v3) ) v1 = 1; } return v1; } //----- (00605810) -------------------------------------------------------- void __thiscall sub_605810(_DWORD **this, char *a2) { _DWORD **v2; // esi char v3; // [esp+8h] [ebp-104h] v2 = this; vsprintf(&v3, a2, &v3); sub_5FC930(v2[89], 4112, &v3); } //----- (00605870) -------------------------------------------------------- int __thiscall sub_605870(_DWORD **this, _BYTE *a2) { _DWORD **v2; // ebx int result; // eax int **v4; // edi int v5; // esi unsigned __int8 v6; // al signed int v7; // [esp+Ch] [ebp+8h] v2 = this; result = sub_8F1140(this, a2); if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { result = (*(int (**)(void))(*v2[86] + 260))(); if ( (_BYTE)result ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; (*(void (__stdcall **)(_DWORD))(*v2[86] + 256))(0); v4 = v2 + 144; v7 = 11; do { v5 = **v4; v6 = (*(int (**)(void))(*v2[86] + 260))(); result = (*(int (__thiscall **)(int *, _DWORD))(v5 + 256))(*v4, v6); ++v4; --v7; } while ( v7 ); } } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00605B30) -------------------------------------------------------- char __thiscall sub_605B30(_DWORD **this, int a2) { _DWORD **v2; // esi char result; // al _DWORD *v4; // ecx v2 = this; (*(void (__stdcall **)(int))(*this[193] + 256))(a2); (*(void (__stdcall **)(int))(*v2[195] + 256))(a2); (*(void (__stdcall **)(int))(*v2[196] + 256))(a2); (*(void (__stdcall **)(int))(*v2[197] + 256))(a2); (*(void (__stdcall **)(int))(*v2[198] + 256))(a2); (*(void (__stdcall **)(int))(*v2[199] + 256))(a2); result = (*(int (__stdcall **)(int))(*v2[200] + 256))(a2); if ( !(_BYTE)a2 ) { v4 = v2[74]; result = sub_4B57B0( *((unsigned __int8 *)v2[198] + 380), *((_BYTE *)v2[196] + 380), (signed int)(100.0 - (double)(5 * v2[200][75]))); } return result; } //----- (00605C20) -------------------------------------------------------- char __thiscall sub_605C20(_DWORD *this, char a2) { char result; // al result = a2; *(_BYTE *)(this[89] + 325) = a2; *(_BYTE *)(this[198] + 380) = a2; return result; } //----- (00605C50) -------------------------------------------------------- void __thiscall sub_605C50(_DWORD **this, float a2) { int v2; // esi _DWORD **v3; // edi void **v4; // edi char *v5; // eax v2 = 0; v3 = this; if ( 100.0 != a2 ) v2 = (signed int)((a2 * -1.0 + 100.0) / 5.0); sub_4637A0(this[200], v2); v4 = (void **)v3[192]; v5 = sub_7549E0("%d", v2); sub_8F2EA0(v4, v5); } //----- (00605CC0) -------------------------------------------------------- int __thiscall sub_605CC0(_DWORD **this, char a2) { int v2; // eax int result; // eax v2 = *this[116]; if ( a2 ) result = (*(int (**)(void))(v2 + 480))(); else result = (*(int (__stdcall **)(signed int))(v2 + 488))(1); return result; } //----- (00605CF0) -------------------------------------------------------- bool __thiscall sub_605CF0(_DWORD *this) { return this[202] != 0; } //----- (00605D00) -------------------------------------------------------- void __thiscall sub_605D00(_DWORD **this, int a2, char *a3) { _DWORD **v3; // esi signed int v4; // edi if ( a3 ) { v3 = this + 89; v4 = 5; do { sub_5FF620(*v3, a2, a3); ++v3; --v4; } while ( v4 ); } } //----- (00605D40) -------------------------------------------------------- char __thiscall sub_605D40(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax int v4; // eax v2 = this; (*(void (__stdcall **)(signed int))(*this[116] + 256))(1); v3 = v2[116][75]; *(_BYTE *)(v3 + 36) = 1; *(_DWORD *)(v3 + 44) = 423; (*(void (**)(void))(*v2[116] + 480))(); (*(void (__stdcall **)(signed int))(*v2[96] + 256))(1); if ( a2 ) (*(void (__stdcall **)(int))(*v2[116] + 464))(a2); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A8140(v4, 7); return v4; } //----- (00605DD0) -------------------------------------------------------- void __thiscall sub_605DD0(_DWORD **this, char *a2) { char *v2; // ebx _DWORD **v3; // esi int v4; // ebx char *v5; // eax char *v6; // edi const char *v7; // eax char *v8; // eax float v9; // ST24_4 float v10; // [esp+Ch] [ebp-44h] signed int v11; // [esp+10h] [ebp-40h] float *v12; // [esp+20h] [ebp-30h] char v13; // [esp+24h] [ebp-2Ch] int v14; // [esp+25h] [ebp-2Bh] int v15; // [esp+29h] [ebp-27h] int v16; // [esp+2Dh] [ebp-23h] int v17; // [esp+31h] [ebp-1Fh] __int16 v18; // [esp+35h] [ebp-1Bh] char v19; // [esp+37h] [ebp-19h] char v20; // [esp+38h] [ebp-18h] int v21; // [esp+39h] [ebp-17h] int v22; // [esp+3Dh] [ebp-13h] int v23; // [esp+41h] [ebp-Fh] int v24; // [esp+45h] [ebp-Bh] __int16 v25; // [esp+49h] [ebp-7h] char v26; // [esp+4Bh] [ebp-5h] v2 = a2; v12 = (float *)this; v3 = this + 89; v11 = 5; do { if ( *v3 ) { if ( !*((_BYTE *)*v3 + 324) ) goto LABEL_20; v21 = 0; v10 = flt_ACCFCC; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v20 = 0; sub_6047B0(&v20, v2); if ( !v20 ) goto LABEL_20; v4 = 0; if ( (*v3)[79] <= 0 ) { LABEL_19: v2 = a2; LABEL_20: sub_5FD6C0(*v3, v2); goto LABEL_23; } while ( 1 ) { if ( 0.0 != sub_5FC120(*v3, v4) && v10 - sub_5FC120(*v3, v4) <= 30.0 ) { v5 = (char *)sub_5FBFA0(*v3, v4); v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v13 = 0; sub_6047B0(&v13, v5); if ( v13 ) { if ( !strncmp(&v20, &v13, 0x14u) ) { v6 = strchr(a2, 58); v7 = (const char *)sub_5FBFA0(*v3, v4); v8 = strchr(v7, 58); if ( v6 ) v6 += 2; if ( v8 ) v8 += 2; if ( strlen(v8) >= 0xA ) { sub_60C960((_DWORD *)v12 + 182, v6, v8); if ( a2 ) sub_5FBFA0(*v3, v4); v9 = 100.0 - (double)(5 * *(_DWORD *)(*((_DWORD *)v12 + 200) + 300)); if ( v9 <= sub_60C930(v12 + 182) ) break; } } } } if ( ++v4 >= (*v3)[79] ) goto LABEL_19; } v2 = a2; } sub_5FD5C0(*v3, 24576, v2); LABEL_23: ++v3; --v11; } while ( v11 ); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00605FE0) -------------------------------------------------------- void __thiscall sub_605FE0(_DWORD **this, char *a2, int a3) { char *v3; // ebx _DWORD **v4; // esi int v5; // ebx char *v6; // eax char *v7; // edi const char *v8; // eax char *v9; // eax float v10; // ST24_4 float v11; // [esp+Ch] [ebp-44h] signed int v12; // [esp+10h] [ebp-40h] float *v13; // [esp+20h] [ebp-30h] char v14; // [esp+24h] [ebp-2Ch] int v15; // [esp+25h] [ebp-2Bh] int v16; // [esp+29h] [ebp-27h] int v17; // [esp+2Dh] [ebp-23h] int v18; // [esp+31h] [ebp-1Fh] __int16 v19; // [esp+35h] [ebp-1Bh] char v20; // [esp+37h] [ebp-19h] char v21; // [esp+38h] [ebp-18h] int v22; // [esp+39h] [ebp-17h] int v23; // [esp+3Dh] [ebp-13h] int v24; // [esp+41h] [ebp-Fh] int v25; // [esp+45h] [ebp-Bh] __int16 v26; // [esp+49h] [ebp-7h] char v27; // [esp+4Bh] [ebp-5h] v3 = a2; v13 = (float *)this; v4 = this + 89; v12 = 5; do { if ( *v4 ) { if ( !*((_BYTE *)*v4 + 324) ) goto LABEL_20; v22 = 0; v11 = flt_ACCFCC; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; v21 = 0; sub_6047B0(&v21, v3); if ( !v21 ) goto LABEL_20; v5 = 0; if ( (*v4)[79] <= 0 ) { LABEL_19: v3 = a2; LABEL_20: sub_5FD710(*v4, v3, a3); goto LABEL_23; } while ( 1 ) { if ( 0.0 != sub_5FC120(*v4, v5) && v11 - sub_5FC120(*v4, v5) <= 30.0 ) { v6 = (char *)sub_5FBFA0(*v4, v5); v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v14 = 0; sub_6047B0(&v14, v6); if ( v14 ) { if ( !strncmp(&v21, &v14, 0x14u) ) { v7 = strchr(a2, 58); v8 = (const char *)sub_5FBFA0(*v4, v5); v9 = strchr(v8, 58); if ( v7 ) v7 += 2; if ( v9 ) v9 += 2; if ( strlen(v9) >= 0xA ) { sub_60C960((_DWORD *)v13 + 182, v7, v9); if ( a2 ) sub_5FBFA0(*v4, v5); v10 = 100.0 - (double)(5 * *(_DWORD *)(*((_DWORD *)v13 + 200) + 300)); if ( v10 <= sub_60C930(v13 + 182) ) break; } } } } if ( ++v5 >= (*v4)[79] ) goto LABEL_19; } v3 = a2; } sub_5FD640(*v4, 24576, v3, a3); LABEL_23: ++v4; --v12; } while ( v12 ); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00606200) -------------------------------------------------------- void __thiscall sub_606200(_DWORD **this, char *a2, char a3) { char *v3; // ebx _DWORD **v4; // esi int v5; // ebx char *v6; // eax char *v7; // edi const char *v8; // eax char *v9; // eax float v10; // ST24_4 float v11; // [esp+Ch] [ebp-44h] signed int v12; // [esp+10h] [ebp-40h] float *v13; // [esp+20h] [ebp-30h] char v14; // [esp+24h] [ebp-2Ch] int v15; // [esp+25h] [ebp-2Bh] int v16; // [esp+29h] [ebp-27h] int v17; // [esp+2Dh] [ebp-23h] int v18; // [esp+31h] [ebp-1Fh] __int16 v19; // [esp+35h] [ebp-1Bh] char v20; // [esp+37h] [ebp-19h] char v21; // [esp+38h] [ebp-18h] int v22; // [esp+39h] [ebp-17h] int v23; // [esp+3Dh] [ebp-13h] int v24; // [esp+41h] [ebp-Fh] int v25; // [esp+45h] [ebp-Bh] __int16 v26; // [esp+49h] [ebp-7h] char v27; // [esp+4Bh] [ebp-5h] v3 = a2; v13 = (float *)this; v4 = this + 89; v12 = 5; do { if ( *v4 ) { if ( !*((_BYTE *)*v4 + 324) ) goto LABEL_20; v22 = 0; v11 = flt_ACCFCC; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; v21 = 0; sub_6047B0(&v21, v3); if ( !v21 ) goto LABEL_20; v5 = 0; if ( (*v4)[79] <= 0 ) { LABEL_19: v3 = a2; LABEL_20: sub_5FCF00(*v4, 512, v3, a3); goto LABEL_23; } while ( 1 ) { if ( 0.0 != sub_5FC120(*v4, v5) && v11 - sub_5FC120(*v4, v5) <= 30.0 ) { v6 = (char *)sub_5FBFA0(*v4, v5); v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v14 = 0; sub_6047B0(&v14, v6); if ( v14 ) { if ( !strncmp(&v21, &v14, 0x14u) ) { v7 = strchr(a2, 58); v8 = (const char *)sub_5FBFA0(*v4, v5); v9 = strchr(v8, 58); if ( v7 ) v7 += 2; if ( v9 ) v9 += 2; if ( strlen(v9) >= 0xA ) { sub_60C960((_DWORD *)v13 + 182, v7, v9); if ( a2 ) sub_5FBFA0(*v4, v5); v10 = 100.0 - (double)(5 * *(_DWORD *)(*((_DWORD *)v13 + 200) + 300)); if ( v10 <= sub_60C930(v13 + 182) ) break; } } } } if ( ++v5 >= (*v4)[79] ) goto LABEL_19; } v3 = a2; } sub_5FD640(*v4, 24576, v3, a3); LABEL_23: ++v4; --v12; } while ( v12 ); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00606420) -------------------------------------------------------- void __thiscall sub_606420(_DWORD **this, char *a2) { char *v2; // ebx _DWORD **v3; // esi int v4; // ebx char *v5; // eax char *v6; // edi const char *v7; // eax char *v8; // eax float v9; // ST24_4 float v10; // [esp+Ch] [ebp-44h] signed int v11; // [esp+10h] [ebp-40h] float *v12; // [esp+20h] [ebp-30h] char v13; // [esp+24h] [ebp-2Ch] int v14; // [esp+25h] [ebp-2Bh] int v15; // [esp+29h] [ebp-27h] int v16; // [esp+2Dh] [ebp-23h] int v17; // [esp+31h] [ebp-1Fh] __int16 v18; // [esp+35h] [ebp-1Bh] char v19; // [esp+37h] [ebp-19h] char v20; // [esp+38h] [ebp-18h] int v21; // [esp+39h] [ebp-17h] int v22; // [esp+3Dh] [ebp-13h] int v23; // [esp+41h] [ebp-Fh] int v24; // [esp+45h] [ebp-Bh] __int16 v25; // [esp+49h] [ebp-7h] char v26; // [esp+4Bh] [ebp-5h] v2 = a2; v12 = (float *)this; v3 = this + 89; v11 = 5; do { if ( *v3 ) { if ( !*((_BYTE *)*v3 + 324) ) goto LABEL_20; v21 = 0; v10 = flt_ACCFCC; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v20 = 0; sub_6047B0(&v20, v2); if ( !v20 ) goto LABEL_20; v4 = 0; if ( (*v3)[79] <= 0 ) { LABEL_19: v2 = a2; LABEL_20: sub_5FCEA0(*v3, 512, v2); goto LABEL_23; } while ( 1 ) { if ( 0.0 != sub_5FC120(*v3, v4) && v10 - sub_5FC120(*v3, v4) <= 30.0 ) { v5 = (char *)sub_5FBFA0(*v3, v4); v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v13 = 0; sub_6047B0(&v13, v5); if ( v13 ) { if ( !strncmp(&v20, &v13, 0x14u) ) { v6 = strchr(a2, 58); v7 = (const char *)sub_5FBFA0(*v3, v4); v8 = strchr(v7, 58); if ( v6 ) v6 += 2; if ( v8 ) v8 += 2; if ( strlen(v8) >= 0xA ) { sub_60C960((_DWORD *)v12 + 182, v6, v8); if ( a2 ) sub_5FBFA0(*v3, v4); v9 = 100.0 - (double)(5 * *(_DWORD *)(*((_DWORD *)v12 + 200) + 300)); if ( v9 <= sub_60C930(v12 + 182) ) break; } } } } if ( ++v4 >= (*v3)[79] ) goto LABEL_19; } v2 = a2; } sub_5FD5C0(*v3, 24576, v2); LABEL_23: ++v3; --v11; } while ( v11 ); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006066E0) -------------------------------------------------------- char __thiscall sub_6066E0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // esi int v4; // edi _DWORD **v5; // esi const CHAR *v6; // edi _DWORD *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi _DWORD *v10; // eax _DWORD **v11; // esi const CHAR *v12; // edi result = a2; v3 = this; v4 = this[87]; this[87] = a2; switch ( a2 ) { case 0: result = (unsigned int)sub_40C190(-284875477); break; case 1: result = (unsigned int)sub_40C190(-179431613); break; case 2: if ( dword_B9DCC4 ) { result = (unsigned int)sub_40C190(-167392443); } else { sub_40C190(-284875477); v3[87] = v4; v5 = (_DWORD **)(v3 + 58); v6 = sub_40C190(2107436777); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } break; case 3: v7 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v7) ) { result = (unsigned int)sub_40C190(-285417689); } else { sub_40C190(-284875477); v3[87] = v4; v8 = (_DWORD **)(v3 + 58); v9 = sub_40C190(1988193177); if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v9, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); } break; case 4: v10 = (_DWORD *)sub_715490(); result = sub_715120(v10); if ( !result ) { v3[87] = v4; v11 = (_DWORD **)(v3 + 58); v12 = sub_40C190(-1293162460); if ( v11[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 4))(25, v12, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 20))(25, v12, v11); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v11)[5])(v11, 25, v12, v11); } break; default: this[87] = 0; break; } return result; } // B9DCC4: using guessed type int dword_B9DCC4; //----- (006068C0) -------------------------------------------------------- char __thiscall sub_6068C0(_DWORD *this, char a2) { _DWORD **v2; // esi int v3; // ecx char result; // al int v5; // [esp+4h] [ebp-1Ch] int v6; // [esp+8h] [ebp-18h] int v7; // [esp+Ch] [ebp-14h] int v8; // [esp+10h] [ebp-10h] int v9; // [esp+14h] [ebp-Ch] char v10; // [esp+18h] [ebp-8h] v2 = (_DWORD **)this; v6 = dword_ACEB10; v5 = *(_DWORD *)dword_ACEB0C; v9 = dword_ACEB1C; v3 = this[98]; v7 = dword_ACEB14; v8 = dword_ACEB18; v10 = 0; result = (*(int (__stdcall **)(int *))(*(_DWORD *)v3 + 460))(&v5); if ( a2 ) { ((void (__thiscall *)(_DWORD **, signed int, signed int))(*v2)[95])(v2, 22, 1); result = sub_605D40(v2, (int)&unk_9EB759); } return result; } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; //----- (00606A20) -------------------------------------------------------- char __thiscall sub_606A20(_DWORD **this, char *a2) { _DWORD **v2; // esi char v4[4]; // [esp+8h] [ebp-18h] int v5; // [esp+Ch] [ebp-14h] int v6; // [esp+10h] [ebp-10h] int v7; // [esp+14h] [ebp-Ch] int v8; // [esp+18h] [ebp-8h] v2 = this; sub_6645B0(dword_AD8C90, a2); (*(void (__stdcall **)(char *))(*v2[98] + 460))(a2); v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, a2, 0x14u); *(_DWORD *)dword_ACEB0C = *(_DWORD *)v4; dword_ACEB10 = v5; dword_ACEB18 = v7; dword_ACEB1C = v8; dword_ACEB14 = v6; ((void (__thiscall *)(_DWORD **, signed int, signed int))(*v2)[95])(v2, 22, 1); return sub_605D40(v2, (int)&unk_9EB75B); } // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; //----- (00606AD0) -------------------------------------------------------- int __thiscall sub_606AD0(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx int v3; // edi int v4; // eax int i; // ecx v1 = this; v2 = 0; v3 = sub_90E3C0(*(HWND **)(this[116] + 300)); v4 = (*(int (**)(void))(**(_DWORD **)(v1[116] + 300) + 16))(); for ( i = 0; i < v3; ++i ) { if ( *(_BYTE *)(i + v4) == 9 ) ++v2; } return v2 / 2; } //----- (00606B20) -------------------------------------------------------- char __thiscall sub_606B20(void *this, void (__stdcall ***a2)(signed int)) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi bool v4; // zf int v6; // ebx char *v7; // eax void *v8; // eax int v9; // edi float *v10; // eax _DWORD *v11; // eax int v12; // ecx _DWORD *v13; // eax int v14; // edx _DWORD *v15; // eax int v16; // ecx int v17; // eax void *v18; // eax float *v19; // eax int v20; // edi _DWORD *v21; // eax int v22; // ecx _DWORD *v23; // eax int v24; // edx _DWORD *v25; // eax int v26; // ecx volatile LONG *v27; // edx int v28; // eax volatile LONG **v29; // eax void (__thiscall ***v30)(_DWORD, signed int); // esi const char *v31; // eax int v32; // edi int v33; // ebx int v34; // eax int v35; // edx int v36; // eax volatile LONG *v37; // eax int v38; // ST70_4 int v39; // ecx float *v40; // eax int v41; // ecx int v42; // eax int v43; // ecx _DWORD *v44; // edi _DWORD *v45; // ebx int v46; // eax int v47; // ecx int *v48; // ebx int v49; // edx int v50; // eax int v51; // ecx int v52; // ebx int v53; // eax int v54; // ecx int v55; // edx float v56; // ecx int v57; // ST68_4 _DWORD *v58; // ST64_4 int v59; // ST60_4 int v60; // eax int v61; // ST5C_4 int v62; // eax volatile LONG *v63; // eax int v64; // edi int v65; // ebx int v66; // eax int v67; // eax float *v68; // edi int (*v69)(void); // eax int v70; // eax int v71; // ebx const char *v72; // eax volatile LONG *v73; // edx volatile LONG *v74; // eax const char *v75; // eax volatile LONG **v76; // ebx volatile LONG *v77; // eax const char *v78; // eax volatile LONG **v79; // eax volatile LONG *v80; // eax int v81; // ST70_4 volatile LONG **v82; // eax int v83; // ebx int v84; // eax volatile LONG *v85; // eax int v86; // eax int v87; // edi int v88; // ebx int v89; // ST68_4 int v90; // eax volatile LONG *v91; // eax int v92; // edi const CHAR *v93; // eax volatile LONG **v94; // edi volatile LONG *v95; // eax volatile LONG *v96; // edx int v97; // edi int v98; // ebx int v99; // ST68_4 int v100; // eax volatile LONG *v101; // eax int v102; // edi const CHAR *v103; // eax volatile LONG **v104; // edi volatile LONG *v105; // eax volatile LONG *v106; // edx int v107; // edi int v108; // ebx int v109; // ST68_4 int v110; // eax volatile LONG *v111; // eax int v112; // edi const CHAR *v113; // eax char v114; // al char v115; // al int v116; // edi int v117; // ebx char *v118; // eax volatile LONG **v119; // eax volatile LONG *v120; // ST68_4 volatile LONG *v121; // ebx int v122; // ST64_4 int v123; // ST60_4 int v124; // eax volatile LONG *v125; // eax int v126; // ebx int v127; // ebx int v128; // eax int v129; // edi const CHAR *v130; // eax int v131; // ecx volatile LONG **v132; // edi volatile LONG *v133; // eax int v134; // edi volatile LONG *v135; // ebx const char *v136; // eax int v137; // edi volatile LONG **v138; // eax volatile LONG *v139; // eax int v140; // ST70_4 int v141; // ebx char *v142; // eax volatile LONG **v143; // ebx char *v144; // eax char *v145; // eax volatile LONG *v146; // eax int v147; // ebx int v148; // ebx int v149; // ST68_4 int v150; // ST64_4 int v151; // ST60_4 int v152; // eax volatile LONG *v153; // eax int v154; // ebx int v155; // eax int v156; // ebx int v157; // ST68_4 int v158; // ST64_4 int v159; // ST60_4 int v160; // eax volatile LONG *v161; // eax int v162; // edi const CHAR *v163; // eax int v164; // edi const CHAR *v165; // eax const CHAR *v166; // ST70_4 const CHAR *v167; // eax char *v168; // eax void **v169; // ecx int v170; // edi const CHAR *v171; // eax const CHAR *v172; // eax int v173; // edi const CHAR *v174; // eax const CHAR *v175; // eax int v176; // edi const CHAR *v177; // eax const CHAR *v178; // eax int v179; // edi const CHAR *v180; // eax int v181; // edi const CHAR *v182; // eax char *v183; // eax const CHAR *v184; // ST70_4 const CHAR *v185; // eax int v186; // edi const CHAR *v187; // eax const CHAR *v188; // eax char *v189; // eax int v190; // edi const CHAR *v191; // eax int v192; // edi const CHAR *v193; // eax const CHAR *v194; // eax int v195; // edi const CHAR *v196; // eax const CHAR *v197; // eax const char *v198; // eax const char *v199; // eax int v200; // edi char *v201; // eax const CHAR *v202; // ST70_4 const CHAR *v203; // ST6C_4 const CHAR *v204; // eax volatile LONG **v205; // edi volatile LONG *v206; // eax int v207; // edi volatile LONG *v208; // ebx const char *v209; // eax int v210; // ST64_4 int v211; // eax int v212; // eax int v213; // edi int v214; // eax volatile LONG *v215; // eax volatile LONG *v216; // ebx int v217; // eax const CHAR *v218; // eax int v219; // eax const CHAR *v220; // eax int v221; // eax const CHAR *v222; // eax int v223; // eax const CHAR *v224; // eax int v225; // eax const CHAR *v226; // eax int v227; // eax const CHAR *v228; // eax int v229; // eax const CHAR *v230; // eax int v231; // eax const CHAR *v232; // eax int v233; // eax int v234; // eax volatile LONG *v235; // eax volatile LONG *v236; // edi int v237; // eax int v238; // eax unsigned int v239; // ebx int v240; // edi int v241; // eax volatile LONG *v242; // eax int v243; // edi int v244; // eax int v245; // ebx int v246; // eax int v247; // eax int v248; // eax int v249; // ebx int (*v250)(void); // eax volatile LONG **v251; // edi volatile LONG *v252; // ebx int v253; // edi int (__thiscall *v254)(volatile LONG *); // eax int v255; // eax float *v256; // eax _DWORD *v257; // eax int v258; // ecx volatile LONG **v259; // edi volatile LONG *v260; // eax int v261; // edi volatile LONG *v262; // ebx int (__thiscall *v263)(volatile LONG *); // edx int v264; // eax float *v265; // eax volatile LONG *v266; // eax int v267; // ecx volatile LONG **v268; // edi volatile LONG *v269; // eax int v270; // edi volatile LONG *v271; // ebx int (__thiscall *v272)(volatile LONG *); // eax int v273; // eax float *v274; // eax volatile LONG *v275; // eax int v276; // ecx int v277; // eax int v278; // ecx void (__stdcall ***v279)(signed int); // ST6C_4 int v280; // ST68_4 int v281; // edx volatile LONG *v282; // eax int v283; // ST70_4 int v284; // ecx int v285; // edi _DWORD *v286; // ebx int (__thiscall *v287)(_DWORD *); // eax int v288; // eax float *v289; // eax volatile LONG *v290; // eax int v291; // ecx int v292; // ebx int v293; // edi volatile LONG *v294; // eax int v295; // eax void (__stdcall ***v296)(signed int); // ST6C_4 int v297; // ST68_4 int v298; // ST64_4 int v299; // ST60_4 volatile LONG *v300; // eax int v301; // ST70_4 int v302; // ecx int v303; // edi _DWORD *v304; // ebx int (__thiscall *v305)(_DWORD *); // eax int v306; // eax void (__stdcall ***v307)(_DWORD); // eax volatile LONG *v308; // eax int v309; // ecx int v310; // ebx volatile LONG **v311; // edi volatile LONG *v312; // eax int v313; // edi int (*v314)(void); // edx int v315; // eax void (__stdcall ***v316)(_DWORD); // eax volatile LONG *v317; // ecx _DWORD *v318; // eax int v319; // edx const char *v320; // eax volatile LONG *v321; // eax volatile LONG *v322; // ebx volatile LONG *v323; // edi volatile LONG **v324; // eax volatile LONG *v325; // eax int v326; // ebx _DWORD *v327; // edi int (__thiscall *v328)(_DWORD *); // eax int v329; // eax void (__stdcall ***v330)(_DWORD); // eax volatile LONG *v331; // eax int v332; // ecx volatile LONG **v333; // eax volatile LONG *v334; // eax int v335; // ebx _DWORD *v336; // edi int (__thiscall *v337)(_DWORD *); // eax int v338; // eax void (__stdcall ***v339)(_DWORD); // eax volatile LONG *v340; // eax int v341; // ecx int v342; // edi int v343; // ebx int v344; // ebx signed int v345; // edi void (__thiscall ***v346)(_DWORD, signed int); // esi char v347; // [esp+84h] [ebp-78h] int v348; // [esp+88h] [ebp-74h] int v349; // [esp+8Ch] [ebp-70h] _DWORD *v350; // [esp+90h] [ebp-6Ch] int v351; // [esp+94h] [ebp-68h] volatile LONG *v352; // [esp+98h] [ebp-64h] void *v353; // [esp+9Ch] [ebp-60h] float v354; // [esp+A0h] [ebp-5Ch] int v355; // [esp+A4h] [ebp-58h] int v356; // [esp+A8h] [ebp-54h] int v357; // [esp+ACh] [ebp-50h] volatile LONG *v358; // [esp+B0h] [ebp-4Ch] char *v359; // [esp+B4h] [ebp-48h] char v360[4]; // [esp+B8h] [ebp-44h] void (__stdcall ***v361)(signed int); // [esp+BCh] [ebp-40h] volatile LONG *v362; // [esp+C0h] [ebp-3Ch] float *v363; // [esp+C4h] [ebp-38h] int v364; // [esp+C8h] [ebp-34h] int v365; // [esp+CCh] [ebp-30h] int v366; // [esp+D0h] [ebp-2Ch] char v367; // [esp+D4h] [ebp-28h] int v368; // [esp+F8h] [ebp-4h] v2 = (int)this; v361 = a2; v366 = 0; v368 = 0; v352 = (volatile LONG *)sub_43D0D0(4u); if ( !v352 ) { LABEL_2: v3 = (void (__thiscall ***)(_DWORD, signed int))v366; v368 = -1; if ( !v366 || InterlockedDecrement((volatile LONG *)(v366 + 4)) ) return 0; v4 = v3 == 0; LABEL_5: if ( !v4 ) (**v3)(v3, 1); return 0; } v6 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\Chatting.nif"); sub_8F66B0(v7, (int)&v366, v6); if ( !v366 ) return 0; v8 = operator new(0x60u); v353 = v8; LOBYTE(v368) = 1; if ( v8 ) v363 = sub_85EBC0((float *)v8); else v363 = 0; v9 = *(_DWORD *)(v2 + 456); LOBYTE(v368) = 0; if ( (float *)v9 != v363 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v363; *(_DWORD *)(v2 + 456) = v363; if ( v10 ) InterlockedIncrement((volatile LONG *)v10 + 1); } v11 = *(_DWORD **)(v2 + 456); v11[8] = dword_ABD4FC; v11[9] = dword_ABD500; v12 = dword_ABD504; ++v11[22]; v11[10] = v12; v13 = *(_DWORD **)(v2 + 456); v13[11] = dword_ABD4FC; v13[12] = dword_ABD500; v14 = dword_ABD504; ++v13[22]; v13[13] = v14; v15 = *(_DWORD **)(v2 + 456); v15[17] = dword_ABD4FC; v15[18] = dword_ABD500; v16 = dword_ABD504; ++v15[22]; v15[19] = v16; v17 = *(_DWORD *)(v2 + 456); ++*(_DWORD *)(v17 + 88); *(float *)(v17 + 84) = 1.0; v18 = operator new(0x60u); v353 = v18; LOBYTE(v368) = 2; if ( v18 ) { v19 = sub_85EBC0((float *)v18); v363 = v19; } else { v363 = 0; v19 = 0; } v20 = *(_DWORD *)(v2 + 460); LOBYTE(v368) = 0; if ( (float *)v20 != v19 ) { if ( v20 ) { if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v19 = v363; } *(_DWORD *)(v2 + 460) = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)v19 + 1); } v21 = *(_DWORD **)(v2 + 460); v21[8] = dword_ABD4FC; v21[9] = dword_ABD500; v22 = dword_ABD504; ++v21[22]; v21[10] = v22; v23 = *(_DWORD **)(v2 + 460); v23[11] = dword_ABD4FC; v23[12] = dword_ABD500; v24 = dword_ABD504; ++v23[22]; v23[13] = v24; v25 = *(_DWORD **)(v2 + 460); v25[17] = dword_ABD4FC; v25[18] = dword_ABD500; v26 = dword_ABD504; ++v25[22]; v27 = v352; v25[19] = v26; v28 = *(_DWORD *)(v2 + 460); ++*(_DWORD *)(v28 + 88); *(float *)(v28 + 84) = 1.0; v29 = sub_8FB140(v366, (int)"Panel", (int)&v365, (int)&v364, v27); v358 = (volatile LONG *)(v365 - 20); v351 = v364; if ( !sub_8F1440((volatile LONG **)v2, v365, v364, (int)v29, 0, (int)v361, (int)"ChatDisplayWin2", 0) ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v366; v368 = -1; if ( v366 && !InterlockedDecrement((volatile LONG *)(v366 + 4)) && v30 ) (**v30)(v30, 1); return 0; } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_403700((_DWORD *)v2, *(_DWORD *)(v2 + 456)); v31 = sub_40C190(-1582502409); sub_8F2EA0((void **)v2, v31); v32 = v365; v33 = v364; v34 = v366; *(_DWORD *)(v2 + 272) = dword_AD01E8; v348 = v32; v350 = (_DWORD *)v33; if ( !sub_8F71E0(v34, (int)"ChaBox", &v365, &v364, &v356, &v355) ) goto LABEL_266; v35 = v355; *(_DWORD *)(v2 + 560) = v356; *(_DWORD *)(v2 + 564) = v35; v36 = sub_43D0D0(0xBu); v37 = sub_45C5B0(v36, 7, 7, v365 - v32, v364 - v33, v2, (int)v361); v38 = v355; v39 = v356; *(_DWORD *)(v2 + 380) = v37; (*(void (__thiscall **)(volatile LONG *, int, int))(*v37 + 540))(v37, v39, v38); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 380) + 364) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 380) + 256))(1); v40 = (float *)sub_421050(0); v363 = v40; if ( !v40 ) { LABEL_266: v368 = -1; sub_410C00(&v366); return 0; } v41 = *(_DWORD *)(v2 + 380); *(_DWORD *)(v41 + 392) = 480; *(_DWORD *)(v41 + 396) = 800; v42 = *((_DWORD *)v40 + 56); v43 = *(_DWORD *)(v2 + 380); *(_DWORD *)(v43 + 400) = 4 * v42 + 8; *(_DWORD *)(v43 + 404) = 40 * v42 + 88; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 380) + 240))(0); v44 = (_DWORD *)(v2 + 356); v362 = (volatile LONG *)5; do { v45 = *(_DWORD **)(v2 + 380); v46 = (*(int (__thiscall **)(_DWORD))(*v45 + 148))(*(_DWORD *)(v2 + 380)); v47 = v45[88]; v48 = *(int **)(v2 + 380); v49 = *v48; *(_DWORD *)v360 = v46 - 2 * v47; v50 = (*(int (__thiscall **)(int *))(v49 + 144))(v48); v51 = v48[89]; v52 = *(_DWORD *)(v2 + 380); v53 = v50 - 2 * v51; v54 = *(_DWORD *)(v2 + 380); v55 = *(_DWORD *)(v54 + 352); v56 = *(float *)(v54 + 356); v359 = (char *)v55; v354 = v56; v57 = (int)v363; v58 = *(_DWORD **)v360; v59 = v53; v60 = (*(int (__thiscall **)(int))(*(_DWORD *)v52 + 168))(v52); v61 = (int)&v359[v60]; v62 = (*(int (__thiscall **)(int))(*(_DWORD *)v52 + 164))(v52); v63 = sub_5FFAD0(LODWORD(v354) + v62, v61, v59, (int)v58, v57, 1, v2); sub_56FF80(v44, (int)v63); sub_5FBFD0((_DWORD *)*v44, 1500); *(_DWORD *)(*v44 + 320) = 40; *(_DWORD *)(*v44 + 300) = 24576; *(_BYTE *)(*v44 + 324) = 0; sub_5FBE20((_DWORD *)*v44, *(_DWORD *)(v2 + 296)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v44 + 240))(0); ++v44; v362 = (volatile LONG *)((char *)v362 - 1); } while ( v362 ); v64 = *(_DWORD *)(v2 + 380); v65 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v66 = (*(int (__thiscall **)(int))(*(_DWORD *)v64 + 144))(v64); v67 = sub_4635E0(v65 - v66, 0, 0, 0, v2); *(_DWORD *)(v2 + 552) = v67; v68 = (float *)(v348 + (*(int (__thiscall **)(int))(*(_DWORD *)v67 + 164))(v67)); v69 = *(int (**)(void))(**(_DWORD **)(v2 + 552) + 168); v363 = v68; v70 = v69(); v71 = (int)v350 + v70; v359 = (char *)v350 + v70; *(_DWORD *)v360 = sub_8FB140(v366, (int)"FillterNor", (int)&v365, (int)&v364, 0); sub_8FB650(*(_DWORD **)v360, v366, (int)"FillterOver"); sub_8FB650(*(_DWORD **)v360, v366, (int)"FillterClick"); *(_DWORD *)(v2 + 444) = sub_8FE0F0(v365 - (_DWORD)v68, v364 - v71, *(int *)v360, *(_DWORD *)(v2 + 552), 8, 0, 0); v72 = sub_40C190(-151050969); sub_8F2EA0(*(void ***)(v2 + 444), v72); v73 = v352; *(_DWORD *)(*(_DWORD *)(v2 + 444) + 272) = dword_AD01E8; *(_DWORD *)v360 = sub_8FB140(v366, (int)"ChatBlockNor", (int)&v365, (int)&v364, v73); sub_8FB650(*(_DWORD **)v360, v366, (int)"ChatBlockClick"); sub_8FB650(*(_DWORD **)v360, v366, (int)"ChatBlockOver"); v74 = sub_8FE0F0(v365 - (_DWORD)v68, v364 - v71, *(int *)v360, *(_DWORD *)(v2 + 552), 28, 0, 0); *(_DWORD *)(v2 + 396) = v74; *((_DWORD *)v74 + 68) = dword_AD01E8; v75 = sub_40A910(-1466730004); sub_8F2EA0(*(void ***)(v2 + 396), v75); v76 = sub_8FB140(v366, (int)"SpamBlockNor", (int)&v365, (int)&v364, 0); sub_8FB650(v76, v366, (int)"SpamBlockOver"); sub_8FB650(v76, v366, (int)"SpamBlockClick"); v77 = sub_8FE0F0(v365 - (_DWORD)v68, v364, (int)v76, *(_DWORD *)(v2 + 552), 30, 0, 0); *(_DWORD *)(v2 + 776) = v77; (*(void (__thiscall **)(volatile LONG *, signed int))(*v77 + 256))(v77, 1); *(_DWORD *)(*(_DWORD *)(v2 + 776) + 272) = dword_AD01E8; v78 = sub_40A910(1597801359); sub_8F2EA0(*(void ***)(v2 + 776), v78); v79 = sub_8FB140(v366, (int)"SpamBlockPanel", (int)&v365, (int)&v364, 0); v80 = sub_8F3EB0(v365, v364, (int)v79, *(_DWORD *)(v2 + 552), 0, 0); v81 = *(_DWORD *)(v2 + 460); *(_DWORD *)(v2 + 772) = v80; sub_403700(v80, v81); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 772) + 240))(0); v82 = sub_8FB140(v366, (int)"SpamMovingPoint", (int)&v365, (int)&v364, 0); v83 = (int)v82; v84 = sub_464310(v366, (int)"SpamBlockSlideBar", "SpamBlockLow", "SpamBlockHigh", (int)v82, 0, *(_DWORD **)(v2 + 552)); *(_DWORD *)(v2 + 800) = v84; *(_DWORD *)(v84 + 312) = 31; sub_4638F0(*(_DWORD **)(v2 + 800), 11); sub_4637A0(*(_DWORD **)(v2 + 800), 5); sub_403700(*(_DWORD **)(v2 + 800), *(_DWORD *)(v2 + 460)); v85 = sub_8F3EB0(v365, v364, v83, v2, 0, 0); sub_56FF80((_DWORD *)(v2 + 768), (int)v85); sub_8F2EA0(*(void ***)(v2 + 768), "0"); *(_DWORD *)(*(_DWORD *)(v2 + 768) + 272) = dword_AD01E8; if ( *(_DWORD *)(v2 + 768) ) sub_442AC0(*(_DWORD **)(*(_DWORD *)(v2 + 800) + 292), *(_DWORD *)(v2 + 768)); v86 = *sub_8FB140(v366, (int)"SpamFiltering", (int)&v365, (int)&v364, 0)[9]; v87 = *(_DWORD *)(v86 + 24); v88 = *(_DWORD *)(v86 + 20); v89 = *(_DWORD *)(v2 + 552); v90 = sub_421050(0); v91 = sub_8F4A20(v365, v364, v88, v87, v90, v89, 0, 0); *(_DWORD *)(v2 + 796) = v91; (*(void (__thiscall **)(volatile LONG *, signed int))(*v91 + 488))(v91, 4); sub_403700(*(_DWORD **)(v2 + 796), *(_DWORD *)(v2 + 460)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 796) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 796) + 240))(1); v92 = **(_DWORD **)(v2 + 796); v93 = sub_40A910(643056449); (*(void (__thiscall **)(_DWORD, const CHAR *))(v92 + 472))(*(_DWORD *)(v2 + 796), v93); v94 = sub_8FB140(v366, (int)"SpamOnOffNor", (int)&v365, (int)&v364, v352); sub_8FB650(v94, v366, (int)"SpamOnOffClick"); v95 = sub_465940(v365, v364, (int)v94, *(_DWORD *)(v2 + 552), 32, 0); *(_DWORD *)(v2 + 784) = v95; *((_BYTE *)v95 + 380) = 1; v96 = sub_8FB140(v366, (int)"SpamOnOff", (int)&v365, (int)&v364, 0)[9]; v97 = *(_DWORD *)(*v96 + 24); v98 = *(_DWORD *)(*v96 + 20); v99 = *(_DWORD *)(v2 + 552); v100 = sub_421050(0); v101 = sub_8F4A20(v365, v364, v98, v97, v100, v99, 0, 0); *(_DWORD *)(v2 + 780) = v101; (*(void (__thiscall **)(volatile LONG *, signed int))(*v101 + 488))(v101, 4); sub_403700(*(_DWORD **)(v2 + 780), *(_DWORD *)(v2 + 460)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 780) + 240))(0); v102 = **(_DWORD **)(v2 + 780); v103 = sub_40A910(692946316); (*(void (__thiscall **)(_DWORD, const CHAR *))(v102 + 472))(*(_DWORD *)(v2 + 780), v103); v104 = sub_8FB140(v366, (int)"SpamViewNor", (int)&v365, (int)&v364, v352); sub_8FB650(v104, v366, (int)"SpamViewClick"); v105 = sub_465940(v365, v364, (int)v104, *(_DWORD *)(v2 + 552), 29, 0); *(_DWORD *)(v2 + 792) = v105; *((_BYTE *)v105 + 380) = 0; v106 = sub_8FB140(v366, (int)"SpamView", (int)&v365, (int)&v364, 0)[9]; v107 = *(_DWORD *)(*v106 + 24); v108 = *(_DWORD *)(*v106 + 20); v109 = *(_DWORD *)(v2 + 552); v110 = sub_421050(0); v111 = sub_8F4A20(v365, v364, v108, v107, v110, v109, 0, 0); *(_DWORD *)(v2 + 788) = v111; (*(void (__thiscall **)(volatile LONG *, signed int))(*v111 + 488))(v111, 4); sub_403700(*(_DWORD **)(v2 + 788), *(_DWORD *)(v2 + 460)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 788) + 240))(0); v112 = **(_DWORD **)(v2 + 788); v113 = sub_40A910(1838065622); (*(void (__thiscall **)(_DWORD, const CHAR *))(v112 + 472))(*(_DWORD *)(v2 + 788), v113); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 772) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 780) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 784) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 788) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 792) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 796) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 800) + 256))(0); v114 = *(_BYTE *)(*(_DWORD *)(v2 + 784) + 380); *(_BYTE *)(*(_DWORD *)(v2 + 356) + 324) = v114; *(_BYTE *)(*(_DWORD *)(v2 + 784) + 380) = v114; v354 = 100.0 - (double)(5 * *(_DWORD *)(*(_DWORD *)(v2 + 800) + 300)); sub_605C50((_DWORD **)v2, v354); v115 = *(_BYTE *)(*(_DWORD *)(v2 + 792) + 380); *(_BYTE *)(*(_DWORD *)(v2 + 356) + 325) = v115; *(_BYTE *)(*(_DWORD *)(v2 + 792) + 380) = v115; v116 = 0; do { v117 = v366; *(_DWORD *)v360 = v116 + 1; v118 = sub_7549E0("Tab%02d", v116 + 1); v119 = sub_8FB140(v117, (int)v118, (int)&v365, (int)&v364, 0); v120 = sub_8FE0F0(v365 - (_DWORD)v363 - (_DWORD)v358, v364 - (_DWORD)v359 - v351, (int)v119, v2, v116 + 22, 0, 0); *(_DWORD *)(v2 + 4 * v116 + 524) = v120; v121 = v120; v122 = sub_421050(0); v123 = (*(int (__thiscall **)(volatile LONG *))(*v121 + 148))(v121); v124 = (*(int (__thiscall **)(volatile LONG *))(*v121 + 144))(v121); v125 = sub_8F4A20(10, 2, v124, v123, v122, (int)v120, 0, 0); *(_DWORD *)(v2 + 4 * v116 + 504) = v125; (*(void (__thiscall **)(volatile LONG *, signed int))(*v125 + 488))(v125, 5); v126 = *(int *)(v2 + 456); v362 = *(volatile LONG **)(v2 + 4 * v116 + 504); v354 = *(float *)&v126; if ( *(float *)&v126 != 0.0 ) InterlockedIncrement((volatile LONG *)(v126 + 4)); LOBYTE(v368) = 3; sub_8A6330((_DWORD *)v362 + 39, (int *)&v354); LOBYTE(v368) = 0; if ( *(float *)&v126 != 0.0 && !InterlockedDecrement((volatile LONG *)(v126 + 4)) ) (**(void (__thiscall ***)(int, signed int))v126)(v126, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v116 + 504) + 240))(0); v127 = **(_DWORD **)(v2 + 4 * v116 + 504); v128 = sub_421050(1); (*(void (__thiscall **)(_DWORD, int))(v127 + 452))(*(_DWORD *)(v2 + 4 * v116 + 504), v128); (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)(v2 + 4 * v116 + 504) + 464))( 155, 155, 155, 255); switch ( v116 ) { case 0: v129 = **(_DWORD **)(v2 + 504); v130 = sub_40C190(-179431613); v131 = *(_DWORD *)(v2 + 504); goto LABEL_57; case 1: v129 = **(_DWORD **)(v2 + 508); v130 = sub_40C190(-167392443); v131 = *(_DWORD *)(v2 + 508); goto LABEL_57; case 2: v129 = **(_DWORD **)(v2 + 512); v130 = sub_40C190(-285417689); v131 = *(_DWORD *)(v2 + 512); goto LABEL_57; case 3: v129 = **(_DWORD **)(v2 + 516); v130 = sub_40C190(-2036079644); v131 = *(_DWORD *)(v2 + 516); goto LABEL_57; case 4: (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int))(**(_DWORD **)(v2 + 520) + 464))( 255, 255, 0, 255); v129 = **(_DWORD **)(v2 + 520); v130 = sub_40C190(-284875477); v131 = *(_DWORD *)(v2 + 520); LABEL_57: (*(void (__thiscall **)(int, const CHAR *))(v129 + 472))(v131, v130); break; default: break; } v116 = *(_DWORD *)v360; } while ( *(_DWORD *)v360 < 5 ); v132 = sub_8FB140(v366, (int)"ChatCommandNor", (int)&v365, (int)&v364, 0); sub_8FB650(v132, v366, (int)"ChatCommandOver"); sub_8FB650(v132, v366, (int)"ChatCommandClick"); v133 = sub_8FE0F0(v365 - (_DWORD)v363, v364 - (_DWORD)v359, (int)v132, *(_DWORD *)(v2 + 552), 10, 0, 0); v134 = *(_DWORD *)(v2 + 456); v135 = v133; *(_DWORD *)(v2 + 428) = v133; v358 = (volatile LONG *)v134; if ( v134 ) InterlockedIncrement((volatile LONG *)(v134 + 4)); LOBYTE(v368) = 4; sub_8A6330((_DWORD *)v135 + 39, (int *)&v358); LOBYTE(v368) = 0; if ( v134 && !InterlockedDecrement((volatile LONG *)(v134 + 4)) ) (**(void (__thiscall ***)(int, signed int))v134)(v134, 1); v136 = sub_40C190(-1696350264); sub_8F2EA0(*(void ***)(v2 + 428), v136); *(_DWORD *)(*(_DWORD *)(v2 + 428) + 272) = dword_AD01E8; v137 = 0; v353 = 0; v349 = 0; if ( !sub_8F71E0(v366, (int)"ChatCommandPanel", &v357, &v353, &v347, &v349) ) goto LABEL_2; v138 = sub_8FB140(v366, (int)"ChatCommandPanel", (int)&v365, (int)&v364, 0); v139 = sub_8F3EB0(v365 - (_DWORD)v363, v364 - (_DWORD)v359, (int)v138, *(_DWORD *)(v2 + 552), 0, 0); v140 = *(_DWORD *)(v2 + 460); *(_DWORD *)(v2 + 344) = v139; sub_403700(v139, v140); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 256))(0); do { v141 = v366; *(_DWORD *)v360 = v137 + 1; v142 = sub_7549E0("Chat_Cmd_Name%02d_Nor", v137 + 1); v143 = sub_8FB140(v141, (int)v142, (int)&v365, (int)&v364, 0); v358 = (volatile LONG *)v366; v144 = sub_7549E0("Chat_Cmd_Name%02d_Click", *(_DWORD *)v360); sub_8FB650(v143, (int)v358, (int)v144); v358 = (volatile LONG *)v366; v145 = sub_7549E0("Chat_Cmd_Name%02d_Over", *(_DWORD *)v360); sub_8FB650(v143, (int)v358, (int)v145); v146 = sub_8FE0F0(v365 - (_DWORD)v363, v364 - (_DWORD)v359, (int)v143, *(_DWORD *)(v2 + 552), v137 + 11, 0, 0); *(_DWORD *)(v2 + 4 * v137 + 576) = v146; v147 = *(_DWORD *)(v2 + 460); v358 = v146; v351 = v147; if ( v147 ) { InterlockedIncrement((volatile LONG *)(v147 + 4)); v146 = v358; } LOBYTE(v368) = 5; sub_8A6330((_DWORD *)v146 + 39, &v351); LOBYTE(v368) = 0; if ( v147 && !InterlockedDecrement((volatile LONG *)(v147 + 4)) ) (**(void (__thiscall ***)(int, signed int))v147)(v147, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v137 + 576) + 256))(0); *(_DWORD *)(*(_DWORD *)(v2 + 4 * v137 + 576) + 272) = dword_AD01E8; v148 = *(_DWORD *)(v2 + 4 * v137 + 576); v149 = *(_DWORD *)(v2 + 4 * v137 + 576); v150 = sub_421050(0); v151 = (*(int (__thiscall **)(int))(*(_DWORD *)v148 + 148))(v148); v152 = (*(int (__thiscall **)(int))(*(_DWORD *)v148 + 144))(v148); v153 = sub_8F4A20(0, 0, v152, v151, v150, v149, 0, 0); *(_DWORD *)(v2 + 4 * v137 + 620) = v153; (*(void (__thiscall **)(volatile LONG *, signed int))(*v153 + 488))(v153, 4); v154 = **(_DWORD **)(v2 + 4 * v137 + 620); v155 = sub_421050(1); (*(void (__thiscall **)(_DWORD, int))(v154 + 452))(*(_DWORD *)(v2 + 4 * v137 + 620), v155); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 4 * v137 + 620) + 468))(&dword_AA8D98); v156 = *(_DWORD *)(v2 + 4 * v137 + 576); v157 = *(_DWORD *)(v2 + 4 * v137 + 576); v158 = sub_421050(0); v159 = (*(int (__thiscall **)(int))(*(_DWORD *)v156 + 148))(v156); v160 = (*(int (__thiscall **)(int))(*(_DWORD *)v156 + 144))(v156); v161 = sub_8F4A20(0, 0, v160, v159, v158, v157, 0, 0); *(_DWORD *)(v2 + 4 * v137 + 664) = v161; (*(void (__thiscall **)(volatile LONG *, signed int))(*v161 + 488))(v161, 6); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v137 + 620) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v137 + 664) + 240))(0); switch ( v137 ) { case 0: v162 = **(_DWORD **)(v2 + 620); v163 = sub_40C190(1027742515); (*(void (__thiscall **)(_DWORD, const CHAR *))(v162 + 472))(*(_DWORD *)(v2 + 620), v163); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 664) + 472))(&unk_9EB702); *(_DWORD *)(*(_DWORD *)(v2 + 576) + 272) = 0; break; case 1: v164 = **(_DWORD **)(v2 + 624); v165 = sub_40C190(-1579174713); (*(void (__thiscall **)(_DWORD, const CHAR *))(v164 + 472))(*(_DWORD *)(v2 + 624), v165); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 668) + 472))("/w"); v166 = sub_40C190(-1786286106); v167 = sub_40C190(1231385725); v168 = sub_7549E0("/w [%s] (%s)", v167, v166); v169 = *(void ***)(v2 + 580); goto LABEL_83; case 2: v170 = **(_DWORD **)(v2 + 628); v171 = sub_40C190(-297068768); (*(void (__thiscall **)(_DWORD, const CHAR *))(v170 + 472))(*(_DWORD *)(v2 + 628), v171); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 672) + 472))("/s"); v172 = sub_40C190(-1786286106); v168 = sub_7549E0("/s (%s)", v172); v169 = *(void ***)(v2 + 584); goto LABEL_83; case 3: v173 = **(_DWORD **)(v2 + 632); v174 = sub_40C190(927796889); (*(void (__thiscall **)(_DWORD, const CHAR *))(v173 + 472))(*(_DWORD *)(v2 + 632), v174); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 676) + 472))("/p"); v175 = sub_40C190(-1786286106); v168 = sub_7549E0("/p (%s)", v175); v169 = *(void ***)(v2 + 588); goto LABEL_83; case 4: v176 = **(_DWORD **)(v2 + 636); v177 = sub_40C190(792994427); (*(void (__thiscall **)(_DWORD, const CHAR *))(v176 + 472))(*(_DWORD *)(v2 + 636), v177); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 680) + 472))("/g"); v178 = sub_40C190(-1786286106); v168 = sub_7549E0("/g (%s)", v178); v169 = *(void ***)(v2 + 592); goto LABEL_83; case 5: v179 = **(_DWORD **)(v2 + 640); v180 = sub_40C190(893229738); (*(void (__thiscall **)(_DWORD, const CHAR *))(v179 + 472))(*(_DWORD *)(v2 + 640), v180); v181 = **(_DWORD **)(v2 + 684); v182 = sub_40C190(1131439703); v183 = sub_7549E0("/%s", v182); (*(void (__thiscall **)(_DWORD, char *))(v181 + 472))(*(_DWORD *)(v2 + 684), v183); v184 = sub_40C190(-1651719993); v185 = sub_40C190(1131439703); v168 = sub_7549E0("/%s (%s)", v185, v184); v169 = *(void ***)(v2 + 596); goto LABEL_83; case 6: v186 = **(_DWORD **)(v2 + 644); v187 = sub_40C190(-301740217); (*(void (__thiscall **)(_DWORD, const CHAR *))(v186 + 472))(*(_DWORD *)(v2 + 644), v187); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 688) + 472))("/r"); v188 = sub_40C190(-1786286106); v189 = sub_7549E0("/r (%s)", v188); sub_8F2EA0(*(void ***)(v2 + 600), v189); *(_DWORD *)(*(_DWORD *)(v2 + 600) + 272) = 0; break; case 7: v190 = **(_DWORD **)(v2 + 648); v191 = sub_40C190(-162519510); (*(void (__thiscall **)(_DWORD, const CHAR *))(v190 + 472))(*(_DWORD *)(v2 + 648), v191); *(_DWORD *)(*(_DWORD *)(v2 + 604) + 272) = 0; break; case 8: v192 = **(_DWORD **)(v2 + 652); v193 = sub_40C190(-2036079644); (*(void (__thiscall **)(_DWORD, const CHAR *))(v192 + 472))(*(_DWORD *)(v2 + 652), v193); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 696) + 472))("/a"); v194 = sub_40C190(-1786286106); v168 = sub_7549E0("/a (%s)", v194); v169 = *(void ***)(v2 + 608); goto LABEL_83; case 9: v195 = **(_DWORD **)(v2 + 656); v196 = sub_40A910(-34088146); (*(void (__thiscall **)(_DWORD, const CHAR *))(v195 + 472))(*(_DWORD *)(v2 + 656), v196); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 700) + 472))("/f"); v197 = sub_40C190(-1786286106); v168 = sub_7549E0("/f (%s)", v197); v169 = *(void ***)(v2 + 612); goto LABEL_83; case 10: v358 = (volatile LONG *)16; v198 = sub_40A910(1118204523); sub_60C520(&v367, v198, (signed int *)&v358); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 660) + 472))(&v367); v358 = (volatile LONG *)2; v199 = sub_40C190(-84466138); sub_60C520(&v367, v199, (signed int *)&v358); v200 = **(_DWORD **)(v2 + 704); v201 = sub_7549E0("/%s", &v367); (*(void (__thiscall **)(_DWORD, char *))(v200 + 472))(*(_DWORD *)(v2 + 704), v201); v202 = sub_40C190(-1786286106); v203 = sub_40C190(-84466138); v204 = sub_40A910(1118204523); v168 = sub_7549E0("%s /%s (%s)", v204, v203, v202); v169 = *(void ***)(v2 + 616); LABEL_83: sub_8F2EA0(v169, v168); break; default: break; } v137 = *(_DWORD *)v360; } while ( *(_DWORD *)v360 < 11 ); v205 = sub_8FB140(v366, (int)"UnlockNor", (int)&v365, (int)&v364, v352); sub_8FB650(v205, v366, (int)"lockNor"); v206 = sub_465940(v365 - (_DWORD)v363, v364 - (_DWORD)v359, (int)v205, *(_DWORD *)(v2 + 552), 27, 0); v207 = *(_DWORD *)(v2 + 460); v208 = v206; *(_DWORD *)(v2 + 708) = v206; v358 = (volatile LONG *)v207; if ( v207 ) InterlockedIncrement((volatile LONG *)(v207 + 4)); LOBYTE(v368) = 6; sub_8A6330((_DWORD *)v208 + 39, (int *)&v358); LOBYTE(v368) = 0; if ( v207 && !InterlockedDecrement((volatile LONG *)(v207 + 4)) ) (**(void (__thiscall ***)(int, signed int))v207)(v207, 1); *(_DWORD *)(*(_DWORD *)(v2 + 708) + 272) = dword_AD01E8; v209 = sub_40A910(282576840); sub_8F2EA0(*(void ***)(v2 + 708), v209); *(_BYTE *)(*(_DWORD *)(v2 + 708) + 380) = *(_BYTE *)(*(_DWORD *)(v2 + 708) + 380) == 0; *(_BYTE *)(*(_DWORD *)(v2 + 380) + 412) = *(_BYTE *)(*(_DWORD *)(v2 + 708) + 380); v210 = (*(int (**)(void))(**(_DWORD **)(v2 + 380) + 148))(); v211 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v212 = sub_4635E0(v211, v210, 0, 0, v2); *(_DWORD *)(v2 + 544) = v212; (*(void (__thiscall **)(int))(*(_DWORD *)v212 + 164))(v212); (*(void (**)(void))(**(_DWORD **)(v2 + 544) + 168))(); v213 = 0; do { v214 = sub_43D0D0(1u); v215 = sub_58E5D0(v214, 4, 4, 0); v216 = *(volatile LONG **)(v2 + 4 * v213 + 468); v362 = v215; if ( v216 != v215 ) { if ( v216 && !InterlockedDecrement(v216 + 1) && v216 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v216)(v216, 1); v217 = (int)v362; *(_DWORD *)(v2 + 4 * v213 + 468) = v362; if ( v217 ) InterlockedIncrement((volatile LONG *)(v217 + 4)); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 4 * v213 + 468) + 232))( *(_DWORD *)(v2 + 4 * v213 + 468) + 232, v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 4 * v213 + 468)); v218 = sub_40C190(-284875477); v219 = sub_58E450((int)v218, 0, 0, 0, 0, 0); *(_DWORD *)(v219 + 332) = 17; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v219); v220 = sub_40C190(-179431613); v221 = sub_58E450((int)v220, 0, 0, 0, 0, 0); *(_DWORD *)(v221 + 332) = 18; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v221); v222 = sub_40C190(-167392443); v223 = sub_58E450((int)v222, 0, 0, 0, 0, 0); *(_DWORD *)(v223 + 332) = 19; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v223); v224 = sub_40C190(-285417689); v225 = sub_58E450((int)v224, 0, 0, 0, 0, 0); *(_DWORD *)(v225 + 332) = 20; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v225); v226 = sub_40C190(-297068768); v227 = sub_58E450((int)v226, 0, 0, 0, 0, 0); *(_DWORD *)(v227 + 332) = 24; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v227); v228 = sub_40C190(624629836); v229 = sub_58E450((int)v228, 0, 0, 0, 0, 0); *(_DWORD *)(v229 + 332) = 21; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v229); v230 = sub_40A910(-34088146); v231 = sub_58E450((int)v230, 0, 0, 0, 0, 0); *(_DWORD *)(v231 + 332) = 22; sub_58E080(*(_DWORD **)(v2 + 4 * v213 + 468), v213, v231); if ( v213 == 3 ) { v232 = sub_40A910(1118204523); v233 = sub_58E450((int)v232, 0, 0, 0, 0, 0); *(_DWORD *)(v233 + 332) = 23; sub_58E080(*(_DWORD **)(v2 + 480), 3, v233); } sub_58D930(*(_DWORD **)(v2 + 4 * v213 + 468), 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v213++ + 468) + 256))(0); } while ( v213 < 5 ); v234 = sub_43D0D0(1u); v235 = sub_58E5D0(v234, 4, 4, 0); v236 = *(volatile LONG **)(v2 + 492); v362 = v235; if ( v236 != v235 ) { if ( v236 && !InterlockedDecrement(v236 + 1) && v236 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v236)(v236, 1); v237 = (int)v362; *(_DWORD *)(v2 + 492) = v362; if ( v237 ) InterlockedIncrement((volatile LONG *)(v237 + 4)); } (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 492) + 232))(*(_DWORD *)(v2 + 492) + 232, v2 + 232); sub_58DFD0(*(_DWORD **)(v2 + 492)); v238 = *(_DWORD *)(dword_ACB6C4 + 56); if ( v238 ) v363 = *(float **)(v238 + 40); else v363 = 0; v239 = 0; v240 = 0; if ( v363 ) { do { v241 = sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v239); if ( !v241 ) break; if ( *(_WORD *)(v241 + 65) == -1 && v240 < 17 && *(_DWORD *)(v241 + 101) == 1 ) { v242 = sub_58E290((LPCSTR)(v241 + 33), 0, 0, 0, 0, 0, 0); *((_DWORD *)v242 + 83) = v240 + 62; sub_58E080(*(_DWORD **)(v2 + 492), v240++, (int)v242); } ++v239; } while ( v239 < (unsigned int)v363 ); } sub_58D930(*(_DWORD **)(v2 + 492), 0); (*(void (**)(void))(**(_DWORD **)(v2 + 492) + 256))(); v243 = *(_DWORD *)(v2 + 380); v244 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v243 + 148))(*(_DWORD *)(v2 + 380)); v245 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 144))(v2, v244); v246 = (*(int (__thiscall **)(int))(*(_DWORD *)v243 + 144))(v243); v247 = sub_4635E0(v245 - v246, 0, 0, v2, 0); *(_DWORD *)(v2 + 548) = v247; v248 = (*(int (__thiscall **)(int))(*(_DWORD *)v247 + 164))(v247); v249 = v348 + v248; v250 = *(int (**)(void))(**(_DWORD **)(v2 + 548) + 168); *(_DWORD *)v360 = v249; v359 = (char *)v350 + v250(); v251 = sub_8FB140(v366, (int)"PreUpNor", (int)&v365, (int)&v364, 0); sub_8FB650(v251, v366, (int)"PreUpOver"); sub_8FB650(v251, v366, (int)"PreUpClick"); v252 = sub_8FE0F0(v365 - v249, v364 - (_DWORD)v359, (int)v251, *(_DWORD *)(v2 + 548), 0, 0, 0); *(_DWORD *)(v2 + 412) = v252; v253 = *(_DWORD *)(v2 + 460); v357 = v253; if ( v253 ) InterlockedIncrement((volatile LONG *)(v253 + 4)); v254 = *(int (__thiscall **)(volatile LONG *))(*((_DWORD *)v252 + 39) + 4); LOBYTE(v368) = 7; v255 = v254(v252 + 39); v350 = (_DWORD *)v255; v256 = *(float **)(v255 + 8); v363 = v256; if ( v256 != (float *)v253 ) { if ( v256 && !InterlockedDecrement((volatile LONG *)v256 + 1) && v363 ) (**(void (__stdcall ***)(signed int))v363)(1); v350[2] = v253; if ( v253 ) InterlockedIncrement((volatile LONG *)(v253 + 4)); } v257 = v350; v350[1] = 0; *v257 = *((_DWORD *)v252 + 40); v258 = *((_DWORD *)v252 + 40); if ( v258 ) *(_DWORD *)(v258 + 4) = v257; else *((_DWORD *)v252 + 41) = v257; ++*((_DWORD *)v252 + 42); *((_DWORD *)v252 + 40) = v257; LOBYTE(v368) = 0; if ( v253 && !InterlockedDecrement((volatile LONG *)(v253 + 4)) ) (**(void (__thiscall ***)(int, signed int))v253)(v253, 1); v259 = sub_8FB140(v366, (int)"NextDownNor", (int)&v365, (int)&v364, 0); sub_8FB650(v259, v366, (int)"NextDownOver"); sub_8FB650(v259, v366, (int)"NextDownClick"); v260 = sub_8FE0F0(v365 - *(_DWORD *)v360, v364 - (_DWORD)v359, (int)v259, *(_DWORD *)(v2 + 548), 1, 0, 0); v261 = *(_DWORD *)(v2 + 460); v262 = v260; *(_DWORD *)(v2 + 400) = v260; v357 = v261; if ( v261 ) InterlockedIncrement((volatile LONG *)(v261 + 4)); v263 = *(int (__thiscall **)(volatile LONG *))(*((_DWORD *)v262 + 39) + 4); LOBYTE(v368) = 8; v264 = v263(v262 + 39); v362 = (volatile LONG *)v264; v265 = *(float **)(v264 + 8); v363 = v265; if ( v265 == (float *)v261 ) goto LABEL_142; if ( v265 && !InterlockedDecrement((volatile LONG *)v265 + 1) && v363 ) (**(void (__stdcall ***)(signed int))v363)(1); v266 = v362; *((_DWORD *)v362 + 2) = v261; if ( v261 ) { InterlockedIncrement((volatile LONG *)(v261 + 4)); LABEL_142: v266 = v362; } *((_DWORD *)v266 + 1) = 0; *v266 = *((_DWORD *)v262 + 40); v267 = *((_DWORD *)v262 + 40); if ( v267 ) *(_DWORD *)(v267 + 4) = v266; else *((_DWORD *)v262 + 41) = v266; ++*((_DWORD *)v262 + 42); *((_DWORD *)v262 + 40) = v266; LOBYTE(v368) = 0; if ( v261 && !InterlockedDecrement((volatile LONG *)(v261 + 4)) ) (**(void (__thiscall ***)(int, signed int))v261)(v261, 1); v268 = sub_8FB140(v366, (int)"DownNor", (int)&v365, (int)&v364, 0); sub_8FB650(v268, v366, (int)"DownOver"); sub_8FB650(v268, v366, (int)"DownClick"); v269 = sub_8FE0F0(v365 - *(_DWORD *)v360, v364 - (_DWORD)v359, (int)v268, *(_DWORD *)(v2 + 548), 2, 0, 0); v270 = *(_DWORD *)(v2 + 460); v271 = v269; *(_DWORD *)(v2 + 424) = v269; v357 = v270; if ( v270 ) InterlockedIncrement((volatile LONG *)(v270 + 4)); v272 = *(int (__thiscall **)(volatile LONG *))(*((_DWORD *)v271 + 39) + 4); LOBYTE(v368) = 9; v273 = v272(v271 + 39); v362 = (volatile LONG *)v273; v274 = *(float **)(v273 + 8); v363 = v274; if ( v274 == (float *)v270 ) goto LABEL_158; if ( v274 && !InterlockedDecrement((volatile LONG *)v274 + 1) && v363 ) (**(void (__stdcall ***)(signed int))v363)(1); v275 = v362; *((_DWORD *)v362 + 2) = v270; if ( v270 ) { InterlockedIncrement((volatile LONG *)(v270 + 4)); LABEL_158: v275 = v362; } *((_DWORD *)v275 + 1) = 0; *v275 = *((_DWORD *)v271 + 40); v276 = *((_DWORD *)v271 + 40); if ( v276 ) *(_DWORD *)(v276 + 4) = v275; else *((_DWORD *)v271 + 41) = v275; ++*((_DWORD *)v271 + 42); *((_DWORD *)v271 + 40) = v275; LOBYTE(v368) = 0; if ( v270 && !InterlockedDecrement((volatile LONG *)(v270 + 4)) ) (**(void (__thiscall ***)(int, signed int))v270)(v270, 1); if ( !sub_8F71E0(v366, (int)"CharNameEdit", &v365, &v364, &v356, &v355) ) goto LABEL_166; v277 = sub_43D0D0(0xBu); v278 = v365 - *(_DWORD *)v360; v279 = v361; v280 = *(_DWORD *)(v2 + 548); v281 = v364 - (_DWORD)v359; *(_DWORD *)(v2 + 720) = v365 - *(_DWORD *)v360; v282 = sub_45C5B0(v277, 7, 7, v278, v281, v280, (int)v279); v283 = v355; v284 = v356; *(_DWORD *)(v2 + 388) = v282; (*(void (__thiscall **)(volatile LONG *, int, int))(*v282 + 540))(v282, v284, v283); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 388) + 364) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 256))(0); v285 = *(_DWORD *)(v2 + 460); v286 = *(_DWORD **)(v2 + 388); v357 = v285; if ( v285 ) InterlockedIncrement((volatile LONG *)(v285 + 4)); v287 = *(int (__thiscall **)(_DWORD *))(v286[39] + 4); LOBYTE(v368) = 10; v288 = v287(v286 + 39); v362 = (volatile LONG *)v288; v289 = *(float **)(v288 + 8); v363 = v289; if ( v289 == (float *)v285 ) goto LABEL_178; if ( v289 && !InterlockedDecrement((volatile LONG *)v289 + 1) && v363 ) (**(void (__stdcall ***)(signed int))v363)(1); v290 = v362; *((_DWORD *)v362 + 2) = v285; if ( v285 ) { InterlockedIncrement((volatile LONG *)(v285 + 4)); LABEL_178: v290 = v362; } *((_DWORD *)v290 + 1) = 0; *v290 = v286[40]; v291 = v286[40]; if ( v291 ) *(_DWORD *)(v291 + 4) = v290; else v286[41] = v290; ++v286[42]; v286[40] = v290; LOBYTE(v368) = 0; if ( v285 && !InterlockedDecrement((volatile LONG *)(v285 + 4)) ) (**(void (__thiscall ***)(int, signed int))v285)(v285, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); v292 = (int)v359; v293 = *(_DWORD *)v360; v294 = sub_45A900( v365 - *(_DWORD *)v360 + 3, v364 - (_DWORD)v359 + 3, v356, v355, *(_DWORD *)(v2 + 548), 1342177280, 16, 3, 0, 0, 1); *(_DWORD *)(v2 + 392) = v294; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v294 + 256))(v294, 0); if ( !sub_8F71E0(v366, (int)"ChaMsgView", &v365, &v364, &v356, &v355) ) { LABEL_166: v3 = (void (__thiscall ***)(_DWORD, signed int))v366; v368 = -1; if ( !v366 || InterlockedDecrement((volatile LONG *)(v366 + 4)) ) return 0; v4 = v3 == 0; goto LABEL_5; } v295 = sub_43D0D0(0xBu); v296 = v361; v297 = *(_DWORD *)(v2 + 548); v298 = v364 - v292; v299 = v365 - v293; *(_DWORD *)(v2 + 724) = v365 - v293; v300 = sub_45C5B0(v295, 7, 7, v299, v298, v297, (int)v296); v301 = v355; v302 = v356; *(_DWORD *)(v2 + 384) = v300; (*(void (__thiscall **)(volatile LONG *, int, int))(*v300 + 540))(v300, v302, v301); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 520))(0); *(_BYTE *)(*(_DWORD *)(v2 + 384) + 364) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 256))(0); v303 = *(_DWORD *)(v2 + 460); v304 = *(_DWORD **)(v2 + 384); v357 = v303; if ( v303 ) InterlockedIncrement((volatile LONG *)(v303 + 4)); v305 = *(int (__thiscall **)(_DWORD *))(v304[39] + 4); LOBYTE(v368) = 11; v306 = v305(v304 + 39); v362 = (volatile LONG *)v306; v307 = *(void (__stdcall ****)(_DWORD))(v306 + 8); v361 = v307; if ( v307 == (void (__stdcall ***)(_DWORD))v303 ) goto LABEL_195; if ( v307 && !InterlockedDecrement((volatile LONG *)v307 + 1) && v361 ) (**v361)(1); v308 = v362; *((_DWORD *)v362 + 2) = v303; if ( v303 ) { InterlockedIncrement((volatile LONG *)(v303 + 4)); LABEL_195: v308 = v362; } *((_DWORD *)v308 + 1) = 0; *v308 = v304[40]; v309 = v304[40]; if ( v309 ) *(_DWORD *)(v309 + 4) = v308; else v304[41] = v308; ++v304[42]; v304[40] = v308; LOBYTE(v368) = 0; if ( v303 && !InterlockedDecrement((volatile LONG *)(v303 + 4)) ) (**(void (__thiscall ***)(int, signed int))v303)(v303, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 384) + 240))(0); v351 = v364 - (_DWORD)v359 + 6; v358 = (volatile LONG *)(v356 - 4); v349 = v355 - 1; v310 = v365 - *(_DWORD *)v360 + 4; v311 = sub_8FB140(v366, (int)"DownNor01", (int)&v365, (int)&v364, 0); sub_8FB650(v311, v366, (int)"DownOver01"); sub_8FB650(v311, v366, (int)"DownClick01"); v312 = sub_8FE0F0(v365 - *(_DWORD *)v360, v364 - (_DWORD)v359, (int)v311, *(_DWORD *)(v2 + 548), 3, 0, 0); v313 = *(_DWORD *)(v2 + 460); v353 = (void *)v312; *(_DWORD *)(v2 + 432) = v312; v357 = v313; if ( v313 ) InterlockedIncrement((volatile LONG *)(v313 + 4)); v314 = *(int (**)(void))(*((_DWORD *)v353 + 39) + 4); LOBYTE(v368) = 12; v353 = (char *)v353 + 156; v315 = v314(); v362 = (volatile LONG *)v315; v316 = *(void (__stdcall ****)(_DWORD))(v315 + 8); v361 = v316; if ( v316 == (void (__stdcall ***)(_DWORD))v313 ) goto LABEL_211; if ( v316 && !InterlockedDecrement((volatile LONG *)v316 + 1) && v361 ) (**v361)(1); v317 = v362; *((_DWORD *)v362 + 2) = v313; if ( v313 ) { InterlockedIncrement((volatile LONG *)(v313 + 4)); LABEL_211: v317 = v362; } v318 = v353; *((_DWORD *)v317 + 1) = 0; *v317 = v318[1]; v319 = v318[1]; if ( v319 ) *(_DWORD *)(v319 + 4) = v317; else v318[2] = v317; ++v318[3]; v318[1] = v317; LOBYTE(v368) = 0; if ( v313 && !InterlockedDecrement((volatile LONG *)(v313 + 4)) ) (**(void (__thiscall ***)(int, signed int))v313)(v313, 1); v320 = sub_40C190(-1465818993); sub_8F2EA0(*(void ***)(v2 + 432), v320); *(_DWORD *)(*(_DWORD *)(v2 + 432) + 272) = dword_AD01E8; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 432) + 256))(0); v321 = sub_45A900(v310, v351 - 2, (int)v358, v349, *(_DWORD *)(v2 + 548), 1342177280, 128, 5, 1, 0, 1); v322 = *(volatile LONG **)(v2 + 464); v323 = v321; if ( v322 != v321 ) { if ( v322 && !InterlockedDecrement(v322 + 1) && v322 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v322)(v322, 1); *(_DWORD *)(v2 + 464) = v323; if ( v323 ) InterlockedIncrement(v323 + 1); } sub_459B60(*(_DWORD **)(v2 + 464), 2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 464) + 240))(0); *(_BYTE *)(*(_DWORD *)(v2 + 464) + 324) = 1; v324 = sub_8FB140(v366, (int)"ChaK", (int)&v365, (int)&v364, v352); v325 = sub_8F3EB0(v365 - *(_DWORD *)v360, v364 - (_DWORD)v359, (int)v324, *(_DWORD *)(v2 + 548), 0, 0); *(_DWORD *)(v2 + 448) = v325; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v325 + 256))(v325, 0); v326 = *(_DWORD *)(v2 + 460); v327 = *(_DWORD **)(v2 + 448); v357 = v326; if ( v326 ) InterlockedIncrement((volatile LONG *)(v326 + 4)); v328 = *(int (__thiscall **)(_DWORD *))(v327[39] + 4); LOBYTE(v368) = 13; v329 = v328(v327 + 39); v362 = (volatile LONG *)v329; v330 = *(void (__stdcall ****)(_DWORD))(v329 + 8); v361 = v330; if ( v330 == (void (__stdcall ***)(_DWORD))v326 ) goto LABEL_234; if ( v330 && !InterlockedDecrement((volatile LONG *)v330 + 1) && v361 ) (**v361)(1); v331 = v362; *((_DWORD *)v362 + 2) = v326; if ( v326 ) { InterlockedIncrement((volatile LONG *)(v326 + 4)); LABEL_234: v331 = v362; } *((_DWORD *)v331 + 1) = 0; *v331 = v327[40]; v332 = v327[40]; if ( v332 ) *(_DWORD *)(v332 + 4) = v331; else v327[41] = v331; ++v327[42]; v327[40] = v331; LOBYTE(v368) = 0; if ( v326 && !InterlockedDecrement((volatile LONG *)(v326 + 4)) ) (**(void (__thiscall ***)(int, signed int))v326)(v326, 1); v333 = sub_8FB140(v366, (int)"ChaE", (int)&v365, (int)&v364, v352); v334 = sub_8F3EB0(v365 - *(_DWORD *)v360, v364 - (_DWORD)v359, (int)v333, *(_DWORD *)(v2 + 548), 0, 0); *(_DWORD *)(v2 + 452) = v334; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v334 + 256))(v334, 0); v335 = *(_DWORD *)(v2 + 460); v336 = *(_DWORD **)(v2 + 452); v357 = v335; if ( v335 ) InterlockedIncrement((volatile LONG *)(v335 + 4)); v337 = *(int (__thiscall **)(_DWORD *))(v336[39] + 4); LOBYTE(v368) = 14; v338 = v337(v336 + 39); v362 = (volatile LONG *)v338; v339 = *(void (__stdcall ****)(_DWORD))(v338 + 8); v361 = v339; if ( v339 != (void (__stdcall ***)(_DWORD))v335 ) { if ( v339 && !InterlockedDecrement((volatile LONG *)v339 + 1) && v361 ) (**v361)(1); v340 = v362; *((_DWORD *)v362 + 2) = v335; if ( !v335 ) goto LABEL_251; InterlockedIncrement((volatile LONG *)(v335 + 4)); } v340 = v362; LABEL_251: *((_DWORD *)v340 + 1) = 0; *v340 = v336[40]; v341 = v336[40]; if ( v341 ) *(_DWORD *)(v341 + 4) = v340; else v336[41] = v340; ++v336[42]; v336[40] = v340; LOBYTE(v368) = 0; if ( v335 && !InterlockedDecrement((volatile LONG *)(v335 + 4)) ) (**(void (__thiscall ***)(int, signed int))v335)(v335, 1); v342 = *(_DWORD *)(v2 + 380); v343 = (*(int (**)(void))(**(_DWORD **)(v2 + 384) + 144))(); *(_DWORD *)(v2 + 556) = (*(int (__thiscall **)(int))(*(_DWORD *)v342 + 144))(v342) - v343; *(_DWORD *)(v2 + 348) = 0; sub_40C190(-284875477); v344 = v2 + 356; v345 = 5; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v344 + 256))(0); v344 += 4; --v345; } while ( v345 ); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 356) + 256))(1); *(_DWORD *)(v2 + 376) = *(_DWORD *)(v2 + 356); v368 = -1; if ( v366 ) { v346 = (void (__thiscall ***)(_DWORD, signed int))v366; if ( !InterlockedDecrement((volatile LONG *)(v366 + 4)) ) { if ( v346 ) (**v346)(v346, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // ACB6C4: using guessed type int dword_ACB6C4; // AD01E8: using guessed type int dword_AD01E8; //----- (00609390) -------------------------------------------------------- void __userpurge sub_609390(int a1@, int a2@, int a3@, int a4, int a5) { int v5; // esi const CHAR *v6; // ST10_4 char *v7; // eax int v8; // ecx const CHAR *v9; // ST10_4 int v10; // edi int v11; // edi const CHAR *v12; // eax int v13; // edi const CHAR *v14; // eax int v15; // edi const CHAR *v16; // eax int v17; // edi const CHAR *v18; // eax int v19; // edi const CHAR *v20; // eax int v21; // ecx int v22; // edi const CHAR *v23; // eax int v24; // ecx int v25; // ecx int v26; // ecx int v27; // ecx int v28; // ecx int v29; // esi void (__stdcall *v30)(signed int); // edx char v31; // al int v32; // edx char v33; // al float v34; // ST14_4 int v35; // [esp-4h] [ebp-2Ch] signed int v36; // [esp+8h] [ebp-20h] char v37; // [esp+Ch] [ebp-1Ch] char v38; // [esp+20h] [ebp-8h] v5 = a1; switch ( a4 ) { case 0: sub_5FCF60(*(_DWORD **)(a1 + 376)); return; case 1: sub_5FBDB0(*(_DWORD **)(a1 + 376)); return; case 2: sub_5FBDE0(*(_DWORD **)(a1 + 376)); return; case 3: sub_604BD0((void *)a1); return; case 8: (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(a1 + 4 * *(_DWORD *)(a1 + 348) + 468) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 4 * *(_DWORD *)(v5 + 348) + 468)); return; case 9: sub_4A4C30(*(_DWORD **)(a1 + 296)); return; case 10: sub_604660((_DWORD *)a1); return; case 11: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(26, 1); sub_605D40((_DWORD **)v5, (int)&unk_9EB703); return; case 12: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(22, 1); sub_605D40((_DWORD **)v5, (int)"/w "); return; case 13: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(26, 1); sub_605D40((_DWORD **)v5, (int)"/s "); return; case 14: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(23, 1); sub_605D40((_DWORD **)v5, (int)"/p "); return; case 15: (*(void (__stdcall **)(signed int, _DWORD))(*(_DWORD *)a1 + 380))(24, 0); sub_605D40((_DWORD **)v5, (int)"/g "); return; case 16: v6 = sub_40C190(1131439703); v7 = sub_7549E0("/%s ", v6); goto LABEL_15; case 17: (*(void (__stdcall **)(signed int, _DWORD))(*(_DWORD *)a1 + 380))(22, 0); sub_605D40((_DWORD **)v5, (int)"/r "); sub_4169E0(dword_ACEB0C, (int)&v37); v8 = *(_DWORD *)(v5 + 392); v38 = 0; (*(void (__stdcall **)(char *))(*(_DWORD *)v8 + 460))(&v37); return; case 18: (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(a1 + 492) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 492)); return; case 19: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(25, 1); sub_605D40((_DWORD **)v5, (int)"/a "); return; case 20: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(23, 1); sub_605D40((_DWORD **)v5, (int)&unk_9EB70A); return; case 21: (*(void (__stdcall **)(signed int, signed int))(*(_DWORD *)a1 + 380))(25, 1); v9 = sub_40C190(-84466138); v7 = sub_7549E0("/%s ", v9); LABEL_15: sub_605D40((_DWORD **)v5, (int)v7); return; case 22: case 23: case 24: case 25: case 26: if ( *(float *)(a1 + 572) >= 1.0 || a5 ) { v35 = a3; v10 = a1 + 504; v36 = 5; do { (*(void (__stdcall **)(signed int, signed int, signed int, signed int))(**(_DWORD **)v10 + 464))( 155, 155, 155, 255); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v10 - 148) + 256))(0); v10 += 4; --v36; } while ( v36 ); v11 = **(_DWORD **)(v5 + 504); v12 = sub_40C190(-179431613); (*(void (__thiscall **)(_DWORD, const CHAR *, int))(v11 + 472))(*(_DWORD *)(v5 + 504), v12, v35); v13 = **(_DWORD **)(v5 + 508); v14 = sub_40C190(-167392443); (*(void (__thiscall **)(_DWORD, const CHAR *))(v13 + 472))(*(_DWORD *)(v5 + 508), v14); v15 = **(_DWORD **)(v5 + 512); v16 = sub_40C190(-285417689); (*(void (__thiscall **)(_DWORD, const CHAR *))(v15 + 472))(*(_DWORD *)(v5 + 512), v16); v17 = **(_DWORD **)(v5 + 516); v18 = sub_40C190(-2036079644); (*(void (__thiscall **)(_DWORD, const CHAR *))(v17 + 472))(*(_DWORD *)(v5 + 516), v18); v19 = **(_DWORD **)(v5 + 520); v20 = sub_40C190(-284875477); (*(void (__thiscall **)(_DWORD, const CHAR *))(v19 + 472))(*(_DWORD *)(v5 + 520), v20); switch ( a4 ) { case 22: v21 = *(_DWORD *)(v5 + 504); *(_DWORD *)(v5 + 376) = *(_DWORD *)(v5 + 360); *(_DWORD *)(v5 + 348) = 1; (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*(_DWORD *)v21 + 464))( 255, 255, 0, 255, a2); v22 = **(_DWORD **)(v5 + 504); v23 = sub_40C190(-179431613); v24 = *(_DWORD *)(v5 + 504); goto LABEL_31; case 23: v25 = *(_DWORD *)(v5 + 508); *(_DWORD *)(v5 + 376) = *(_DWORD *)(v5 + 364); *(_DWORD *)(v5 + 348) = 2; (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*(_DWORD *)v25 + 464))( 255, 255, 0, 255, a2); v22 = **(_DWORD **)(v5 + 508); v23 = sub_40C190(-167392443); v24 = *(_DWORD *)(v5 + 508); goto LABEL_31; case 24: v26 = *(_DWORD *)(v5 + 512); *(_DWORD *)(v5 + 376) = *(_DWORD *)(v5 + 368); *(_DWORD *)(v5 + 348) = 3; (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*(_DWORD *)v26 + 464))( 255, 255, 0, 255, a2); v22 = **(_DWORD **)(v5 + 512); v23 = sub_40C190(-285417689); v24 = *(_DWORD *)(v5 + 512); goto LABEL_31; case 25: v27 = *(_DWORD *)(v5 + 516); *(_DWORD *)(v5 + 376) = *(_DWORD *)(v5 + 372); *(_DWORD *)(v5 + 348) = 4; (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*(_DWORD *)v27 + 464))( 255, 255, 0, 255, a2); v22 = **(_DWORD **)(v5 + 516); v23 = sub_40C190(-2036079644); v24 = *(_DWORD *)(v5 + 516); goto LABEL_31; case 26: v28 = *(_DWORD *)(v5 + 520); *(_DWORD *)(v5 + 376) = *(_DWORD *)(v5 + 356); *(_DWORD *)(v5 + 348) = 0; (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*(_DWORD *)v28 + 464))( 255, 255, 0, 255, a2); v22 = **(_DWORD **)(v5 + 520); v23 = sub_40C190(-284875477); v24 = *(_DWORD *)(v5 + 520); LABEL_31: (*(void (__thiscall **)(int, const CHAR *))(v22 + 472))(v24, v23); break; default: break; } v29 = *(_DWORD *)(v5 + 4 * *(_DWORD *)(v5 + 348) + 356); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v29 + 256))(v29, 1); } return; case 27: *(_BYTE *)(*(_DWORD *)(a1 + 708) + 380) = *(_BYTE *)(*(_DWORD *)(a1 + 708) + 380) == 0; *(_BYTE *)(*(_DWORD *)(a1 + 380) + 412) = *(_BYTE *)(*(_DWORD *)(a1 + 708) + 380); v30 = *(void (__stdcall **)(signed int))(*(_DWORD *)a1 + 520); if ( *(_BYTE *)(*(_DWORD *)(a1 + 708) + 380) ) v30(0); else v30(1); return; case 28: sub_4A71A0(*(_DWORD **)(a1 + 296)); return; case 29: *(_BYTE *)(*(_DWORD *)(a1 + 792) + 380) = *(_BYTE *)(*(_DWORD *)(a1 + 792) + 380) == 0; v31 = *(_BYTE *)(*(_DWORD *)(a1 + 792) + 380); *(_BYTE *)(*(_DWORD *)(a1 + 356) + 325) = v31; v32 = *(_DWORD *)(a1 + 792); goto LABEL_41; case 30: v33 = sub_6048A0((_DWORD **)a1); sub_605B30((_DWORD **)v5, v33 == 0); break; case 31: v34 = sub_60C5B0((_DWORD *)a1); sub_605C50((_DWORD **)v5, v34); break; case 32: *(_BYTE *)(*(_DWORD *)(a1 + 784) + 380) = *(_BYTE *)(*(_DWORD *)(a1 + 784) + 380) == 0; v31 = *(_BYTE *)(*(_DWORD *)(a1 + 784) + 380); *(_BYTE *)(*(_DWORD *)(a1 + 356) + 324) = v31; v32 = *(_DWORD *)(a1 + 784); LABEL_41: *(_BYTE *)(v32 + 380) = v31; break; default: return; } } // 609390: could not find valid save-restore pair for ebx // 609390: could not find valid save-restore pair for edi //----- (00609BB0) -------------------------------------------------------- int *__thiscall sub_609BB0(int this, int *a2, _DWORD *a3, int *a4) { int *result; // eax int v5; // esi int v6; // eax int v7; // ebx int v8; // eax int *v9; // ecx int v10; // ebx int v11; // eax _DWORD *v12; // ebx int v13; // eax int v14; // ecx int *v15; // ebx int v16; // edx int v17; // eax bool v18; // zf int (__thiscall *v19)(int); // edx int v20; // eax int *v21; // ecx int v22; // edi int v23; // eax int v24; // edi int v25; // eax int v26; // edx _DWORD *v27; // ecx int *v28; // ebx void (__thiscall **v29)(int, int); // eax int v30; // edx int v31; // eax int v32; // eax int *v33; // eax int v34; // edi int v35; // ebx int v36; // eax int (__thiscall *v37)(int); // edx int v38; // eax int *v39; // eax int v40; // edi int v41; // ebx int v42; // eax int (__thiscall *v43)(int); // edx int v44; // eax int *v45; // eax int v46; // edi int v47; // eax int *v48; // eax int v49; // edi int v50; // eax int v51; // edi int v52; // eax int *v53; // ecx int v54; // edi int v55; // ebx int v56; // eax int v57; // eax int *v58; // ebx int v59; // edi int v60; // eax int *v61; // ebx int v62; // edi int v63; // eax int *v64; // ebx int v65; // esi int v66; // edi int v67; // eax int v68; // eax int v69; // eax int v70; // eax int v71; // eax int v72; // eax int v73; // eax int v74; // eax int v75; // eax int v76; // eax int v77; // eax signed int v78; // ebx float **v79; // ecx int v80; // edi _DWORD *v81; // eax const CHAR *v82; // ebx int v83; // edi _DWORD *v84; // eax const CHAR *v85; // ebx _DWORD *v86; // ecx int v87; // edx int v88; // eax int v89; // ecx _DWORD *v90; // eax int v91; // edx int v92; // ecx int v93; // edx int v94; // eax int v95; // ecx int v96; // eax int v97; // eax int v98; // [esp+30h] [ebp-60h] int v99; // [esp+34h] [ebp-5Ch] int v100; // [esp+38h] [ebp-58h] int v101; // [esp+3Ch] [ebp-54h] int v102; // [esp+40h] [ebp-50h] int v103; // [esp+44h] [ebp-4Ch] int v104; // [esp+48h] [ebp-48h] _DWORD *v105; // [esp+4Ch] [ebp-44h] void (__thiscall **v106)(int, int); // [esp+50h] [ebp-40h] int v107; // [esp+54h] [ebp-3Ch] int v108; // [esp+58h] [ebp-38h] _DWORD *v109; // [esp+5Ch] [ebp-34h] char v110; // [esp+60h] [ebp-30h] char v111; // [esp+74h] [ebp-1Ch] char v112; // [esp+88h] [ebp-8h] result = a2; v5 = this; v109 = a3; switch ( (unsigned int)a2 ) { case 2u: v69 = *(_DWORD *)(this + 148); if ( v69 ) result = (int *)(v69 + 232); else result = 0; if ( a4 == result ) goto LABEL_49; v70 = *(_DWORD *)(this + 144); result = (int *)(v70 ? v70 + 232 : 0); if ( result == a4 ) goto LABEL_49; v71 = *(_DWORD *)(this + 168); if ( v71 ) result = (int *)(v71 + 232); else result = 0; if ( result == a4 ) { *(float *)(this + 176) = flt_ACCFCC; *(_BYTE *)(this + 172) = 1; } else { v72 = *(_DWORD *)(this + 180); if ( v72 ) result = (int *)(v72 + 232); else result = 0; if ( result == a4 ) { *(float *)(this + 188) = flt_ACCFCC; *(_BYTE *)(this + 184) = 1; } } break; case 3u: v75 = *(_DWORD *)(this + 168); if ( v75 ) result = (int *)(v75 + 232); else result = 0; if ( result == a4 ) { *(_BYTE *)(this + 172) = 0; } else { v76 = *(_DWORD *)(this + 180); if ( v76 ) result = (int *)(v76 + 232); else result = 0; if ( result == a4 ) *(_BYTE *)(this + 184) = 0; } break; case 5u: v73 = *(_DWORD *)(this + 148); if ( v73 ) result = (int *)(v73 + 232); else result = 0; if ( a4 == result || ((v74 = *(_DWORD *)(this + 144)) == 0 ? (result = 0) : (result = (int *)(v74 + 232)), result == a4) ) { LABEL_49: *(float *)(this + 336) = 0.0; } break; case 0xEu: v6 = *(_DWORD *)(this + 148); if ( v6 ) result = (int *)(v6 + 232); else result = 0; if ( a4 == result ) { v7 = *(_DWORD *)(this - 232); v8 = (*(int (__thiscall **)(int))(v7 + 168))(this - 232); (*(void (__thiscall **)(int, int))(v7 + 176))(v5 - 232, v109[1] + v8); v9 = *(int **)(v5 + 148); v10 = *v9; v11 = (*(int (**)(void))(*v9 + 164))(); (*(void (__thiscall **)(_DWORD, int))(v10 + 172))(*(_DWORD *)(v5 + 148), *v109 + v11); v12 = *(_DWORD **)(v5 + 148); v13 = (*(int (__thiscall **)(_DWORD))(*v12 + 144))(*(_DWORD *)(v5 + 148)); v14 = v12[89]; v15 = *(int **)(v5 + 148); v16 = *v15; v104 = v13 - 2 * v14; v17 = (*(int (__thiscall **)(int *))(v16 + 148))(v15); v18 = v109[2] == 0; v107 = v17 - 2 * v15[88]; if ( !v18 && !*v109 ) { v19 = *(int (__thiscall **)(int))(*(_DWORD *)(v5 - 232) + 164); v108 = *(_DWORD *)(v5 - 232); v20 = v19(v5 - 232); (*(void (__thiscall **)(int, int))(v108 + 172))(v5 - 232, v109[2] + v20); v21 = *(int **)(v5 + 148); v22 = *v21; v23 = (*(int (**)(void))(*v21 + 164))(); (*(void (__thiscall **)(_DWORD, int))(v22 + 172))(*(_DWORD *)(v5 + 148), v23 - v109[2]); } v24 = v5 + 124; v109 = (_DWORD *)5; do { v25 = *(_DWORD *)(v5 + 148); v26 = *(_DWORD *)(v25 + 352); v27 = *(_DWORD **)v24; v28 = *(int **)(v5 + 148); v103 = *(_DWORD *)(v25 + 356); v29 = (void (__thiscall **)(int, int))(*v27 + 308); v108 = v26; v30 = *v28; v105 = v27; v106 = v29; v31 = (*(int (__thiscall **)(int *))(v30 + 168))(v28); v32 = (*(int (__thiscall **)(int *, int))(*v28 + 164))(v28, v108 + v31); (*v106)((int)v105, v103 + v32); (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 152))(v104); (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 156))(v107); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v24 + 324))(LODWORD(flt_ACCFCC)); v24 += 4; v109 = (_DWORD *)((char *)v109 - 1); } while ( v109 ); v33 = *(int **)(v5 + 320); if ( v33 ) { v34 = *v33; v35 = *(_DWORD *)(v5 + 148); v36 = (*(int (__thiscall **)(int))(*(_DWORD *)(v5 - 232) + 144))(v5 - 232); v37 = *(int (__thiscall **)(int))(*(_DWORD *)v35 + 144); v107 = v36; v38 = v37(v35); (*(void (__thiscall **)(_DWORD, int))(v34 + 172))(*(_DWORD *)(v5 + 320), v107 - v38); } v39 = *(int **)(v5 + 316); if ( v39 ) { v40 = *v39; v41 = *(_DWORD *)(v5 + 148); v42 = (*(int (__thiscall **)(int))(*(_DWORD *)(v5 - 232) + 144))(v5 - 232); v43 = *(int (__thiscall **)(int))(*(_DWORD *)v41 + 144); v107 = v42; v44 = v43(v41); (*(void (__thiscall **)(_DWORD, int))(v40 + 172))(*(_DWORD *)(v5 + 316), v107 - v44); } v45 = *(int **)(v5 + 312); if ( v45 ) { v46 = *v45; v47 = (*(int (__thiscall **)(int))(*(_DWORD *)(v5 - 232) + 144))(v5 - 232); (*(void (__thiscall **)(_DWORD, int))(v46 + 172))(*(_DWORD *)(v5 + 312), v47); } v48 = *(int **)(v5 + 316); if ( v48 ) { v49 = *v48; v50 = (*(int (**)(void))(**(_DWORD **)(v5 + 148) + 148))(); (*(void (__thiscall **)(_DWORD, int))(v49 + 176))(*(_DWORD *)(v5 + 316), v50); } result = *(int **)(v5 + 312); if ( result ) { v51 = *result; v52 = (*(int (**)(void))(**(_DWORD **)(v5 + 148) + 148))(); result = (int *)(*(int (__thiscall **)(_DWORD, int))(v51 + 176))(*(_DWORD *)(v5 + 312), v52); } v53 = *(int **)(v5 + 152); if ( v53 ) { v54 = *v53; v55 = *(_DWORD *)(v5 + 148); v56 = (*(int (**)(void))(*v53 + 148))(); v57 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v55 + 144))(v55, v56); (*(void (__thiscall **)(_DWORD, int))(v54 + 540))(*(_DWORD *)(v5 + 152), v57 - *(_DWORD *)(v5 + 324)); v58 = *(int **)(v5 + 232); v59 = *v58; v60 = (*(int (**)(void))(**(_DWORD **)(v5 + 152) + 144))(); (*(void (__thiscall **)(int *, int))(v59 + 152))(v58, v60 - 4); v61 = *(int **)(v5 + 232); v62 = *v61; v63 = (*(int (**)(void))(**(_DWORD **)(v5 + 152) + 148))(); (*(void (__thiscall **)(int *, int))(v62 + 156))(v61, v63 - 1); v64 = *(int **)(v5 + 232); v65 = *(_DWORD *)(v5 + 152); v66 = *v64; v67 = (*(int (__thiscall **)(int))(*(_DWORD *)v65 + 168))(v65); v68 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v65 + 164))(v65, v67 + 4); result = (int *)(*(int (__thiscall **)(int *, int))(v66 + 308))(v64, v68 + 4); } } break; case 0xFu: v77 = *a3; v78 = 0; v108 = 0; switch ( v77 ) { case 17: v78 = 512; break; case 18: v78 = 8; break; case 19: v78 = 16; break; case 20: v78 = 32; break; case 21: v78 = 4096; break; case 22: v78 = 0x2000; break; case 23: byte_B9E564 = *((_BYTE *)a3 + 4); if ( !*((_BYTE *)a3 + 4) ) { v79 = *(float ***)(*(_DWORD *)(this + 64) + 1256); if ( v79 ) sub_5E9180(v79); } break; case 24: v78 = 2; break; case 27: *(_DWORD *)(this + 116) = 0; sub_40C190(-284875477); break; case 28: sub_6066E0((_DWORD *)(this - 232), 2); break; case 29: v80 = *(_DWORD *)(this + 116); *(_DWORD *)(this + 116) = 3; v81 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v81) ) { sub_40C190(-285417689); } else { sub_40C190(-284875477); *(_DWORD *)(v5 + 116) = v80; v82 = sub_40C190(1988193177); if ( *(_DWORD *)(v5 + 4) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 4) + 4))(25, v82, v5); if ( *(_DWORD *)(v5 + 4) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 4) + 20))(25, v82, v5); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)v5 + 20))(v5, 25, v82, v5); v78 = v108; } break; case 30: v83 = *(_DWORD *)(this + 116); *(_DWORD *)(this + 116) = 4; v84 = (_DWORD *)sub_715490(); if ( !sub_715120(v84) ) { *(_DWORD *)(v5 + 116) = v83; v85 = sub_40C190(-1293162460); if ( *(_DWORD *)(v5 + 4) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 4) + 4))(25, v85, v5); if ( *(_DWORD *)(v5 + 4) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 4) + 20))(25, v85, v5); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)v5 + 20))(v5, 25, v85, v5); v78 = v108; } break; case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: v86 = *(_DWORD **)(*(_DWORD *)(this + 64) + 772); if ( v86 ) sub_4E7FB0(v86, v77 - 62); break; case 79: case 80: case 81: case 82: case 83: case 84: v87 = 5 * v77 - 395; v88 = *(_DWORD *)(this + 64); v89 = *(_DWORD *)(v88 + 4 * v87 + 4708); v90 = (_DWORD *)(v88 + 4 * v87 + 4708); v91 = v90[1]; v98 = v89; v92 = v90[2]; v99 = v91; v93 = v90[3]; v94 = v90[4]; v100 = v92; v101 = v93; v102 = v94; sub_416970(&v110, &byte_9EB74A); if ( !sub_4169A0(&v98, &v110) ) { sub_4169E0(&v98, (int)&v111); v95 = *(_DWORD *)(v5 + 160); v112 = 0; (*(void (__stdcall **)(char *))(*(_DWORD *)v95 + 460))(&v111); (*(void (__thiscall **)(int, signed int, _DWORD))(*(_DWORD *)(v5 - 232) + 380))(v5 - 232, 22, 0); sub_605D40((_DWORD **)(v5 - 232), (int)&unk_9EB74B); } break; default: break; } if ( *((_BYTE *)v109 + 4) ) { v96 = *(_DWORD *)(v5 + 4 * *(_DWORD *)(v5 + 116) + 124); *(_DWORD *)(v96 + 512) |= v78; } else { v97 = *(_DWORD *)(v5 + 4 * *(_DWORD *)(v5 + 116) + 124); *(_DWORD *)(v97 + 512) &= ~v78; } result = (int *)sub_6BC0F0( *(_DWORD *)(v5 + 116), *(_DWORD *)(*(_DWORD *)(v5 + 4 * *(_DWORD *)(v5 + 116) + 124) + 512)); break; default: return result; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; // B9E564: using guessed type char byte_B9E564; //----- (0060A460) -------------------------------------------------------- void __thiscall sub_60A460(_DWORD *this, char *a2) { char *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // ebx int v6; // esi int v7; // edx unsigned int v8; // eax int v9; // esi signed int v10; // ebx int v11; // esi unsigned int v12; // eax char *v13; // edi char v14; // cl unsigned int v15; // eax char *v16; // edi char v17; // cl size_t v18; // ebx const char *v19; // [esp-Ch] [ebp-168h] _DWORD *v20; // [esp+4h] [ebp-158h] int v21; // [esp+8h] [ebp-154h] _DWORD *v22; // [esp+10h] [ebp-14Ch] int v23; // [esp+14h] [ebp-148h] char v24[256]; // [esp+18h] [ebp-144h] char Dst; // [esp+118h] [ebp-44h] v2 = a2; v20 = this; if ( a2 ) { v3 = (_DWORD *)this[201]; v4 = (_DWORD *)*v3; v22 = (_DWORD *)*v3; if ( (_DWORD *)*v3 != v3 ) { while ( 1 ) { memset(&Dst, 0, 0x40u); v5 = *((unsigned __int16 *)v4 + 4); v6 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v7 = *(_DWORD *)(v6 + 196); if ( *(_DWORD *)(v7 + 4 * v5) ) v23 = *(_DWORD *)(v7 + 4 * v5); else v23 = 0; } else { v23 = 0; } } else { v23 = 0; } v8 = strlen(v2); v9 = v8 + 1; v10 = 0; v21 = v8 + 1; if ( (signed int)(v8 + 1) > 0 ) { while ( 1 ) { if ( v2[v10] == 123 && !strncmp(&v2[v10], "{color,", 7u) ) { for ( ; v2[v10 + 1] != 125; ++v10 ) ; ++v10; } if ( v2[v10] == 60 && v2[v10 + 1] == 9 ) break; if ( ++v10 >= v9 ) goto LABEL_44; } v11 = v23; switch ( *(_DWORD *)(v23 + 118) ) { case 0: strcpy_s(&Dst, 0x40u, "{color,#FFFFFF,"); break; case 1: v19 = "{color,green,"; goto LABEL_31; case 2: case 5: strcpy_s(&Dst, 0x40u, "{color,lightblue,"); break; case 3: strcpy_s(&Dst, 0x40u, "{color,yellow,"); break; case 4: v19 = "{color,pink,"; goto LABEL_31; case 6: strcpy_s(&Dst, 0x40u, "{color,orange,"); break; case 7: strcpy_s(&Dst, 0x40u, "{color,violet,"); break; default: v19 = "{color,#FFFFFF,"; LABEL_31: strcpy_s(&Dst, 0x40u, v19); break; } if ( *(_BYTE *)(v11 + 342) != 45 && sub_548FB0((const char *)(v11 + 342)) ) strcpy_s(&Dst, 0x40u, "{color,lightblue,"); memset(v24, 0, 0x100u); strncpy(v24, v2, v10); v12 = strlen(&Dst) + 1; v13 = (char *)&v23 + 3; do v14 = (v13++)[1]; while ( v14 ); qmemcpy(v13, &Dst, v12); v15 = strlen(&a2[v10]) + 1; v16 = (char *)&v23 + 3; do v17 = (v16++)[1]; while ( v17 ); qmemcpy(v16, &a2[v10], v15); for ( ; v10 < v21; ++v10 ) { if ( a2[v10] == 9 && a2[v10 + 1] == 62 ) break; } memset(a2, 0, 0x400u); v18 = strlen(&Dst) + v10 + 2; strncpy(a2, v24, v18); *(_WORD *)&a2[strlen(a2)] = 125; qmemcpy(&a2[strlen(a2)], &v24[v18], &v24[strlen(&v24[v18]) + 1] - v24); v2 = a2; } LABEL_44: v22 = (_DWORD *)*v22; if ( v22 == (_DWORD *)v20[201] ) break; v4 = v22; } } } } // ACB230: using guessed type int dword_ACB230; // 60A460: using guessed type char var_144[256]; //----- (0060A7B0) -------------------------------------------------------- char *__thiscall sub_60A7B0(char *this) { char *v1; // esi int *v2; // ebx _DWORD *v3; // eax int v4; // ebx bool v5; // zf int v6; // ebx int v7; // ebx int v8; // ebx void **v10; // [esp+10h] [ebp-28h] char *v11; // [esp+1Ch] [ebp-1Ch] char *v12; // [esp+20h] [ebp-18h] int v13; // [esp+24h] [ebp-14h] _DWORD *v14; // [esp+28h] [ebp-10h] int v15; // [esp+34h] [ebp-4h] v1 = this; v11 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v15 = 0; *(_DWORD *)v1 = &ChatDisplayWin2::`vftable'; *((_DWORD *)v1 + 58) = &ChatDisplayWin2::`vftable'; `eh vector constructor iterator'( v1 + 356, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 114) = 0; *((_DWORD *)v1 + 115) = 0; *((_DWORD *)v1 + 116) = 0; v2 = (int *)(v1 + 468); `eh vector constructor iterator'( v1 + 468, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 122) = 0; *((_DWORD *)v1 + 123) = 0; sub_60C610((float *)v1 + 182); *((_DWORD *)v1 + 192) = 0; LOBYTE(v15) = 9; *((_DWORD *)v1 + 202) = 0; v3 = operator new(0x70u); if ( !v3 ) { v12 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v12); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 201) = v3; *v3 = v3; *(_DWORD *)(*((_DWORD *)v1 + 201) + 4) = *((_DWORD *)v1 + 201); *((float *)v1 + 142) = 1.0; LOBYTE(v15) = 10; *((_DWORD *)v1 + 139) = 0; *((float *)v1 + 143) = 0.0; *((_DWORD *)v1 + 138) = 0; *((_DWORD *)v1 + 137) = 0; *((_DWORD *)v1 + 136) = 0; v14 = v1 + 468; v13 = 5; do { v4 = *v2; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v14 = 0; } v2 = v14 + 1; v5 = v13-- == 1; ++v14; } while ( !v5 ); v6 = *((_DWORD *)v1 + 123); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v1 + 123) = 0; } v7 = *((_DWORD *)v1 + 122); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v1 + 122) = 0; } *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 125) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 126) = 0; *((_DWORD *)v1 + 127) = 0; *((_DWORD *)v1 + 128) = 0; *((_DWORD *)v1 + 129) = 0; *((_DWORD *)v1 + 130) = 0; *((_DWORD *)v1 + 124) = 0; *((_DWORD *)v1 + 178) = 0; *((_DWORD *)v1 + 179) = 0; *((_DWORD *)v1 + 177) = 0; *((_DWORD *)v1 + 99) = 0; sub_60C650((_DWORD *)v1 + 182, 128); v8 = *((_DWORD *)v1 + 192); if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *((_DWORD *)v1 + 192) = 0; } return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9EBBB8: using guessed type void *ChatDisplayWin2::`vftable'; // 9EBBD4: using guessed type void *ChatDisplayWin2::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0060AA20) -------------------------------------------------------- LONG __thiscall sub_60AA20(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD **v3; // edi signed int v4; // ebx int *v5; // ebx int v6; // edi int v7; // edi int v8; // edi _DWORD **v9; // ecx _DWORD *v10; // eax _DWORD *v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi signed int v19; // [esp+14h] [ebp-10h] v1 = this; *this = &ChatDisplayWin2::`vftable'; this[58] = &ChatDisplayWin2::`vftable'; v2 = this[116]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[116] = 0; } v3 = (_DWORD **)(v1 + 117); v4 = 5; do { sub_8F9E00(&unk_BA6B10, *v3); ++v3; --v4; } while ( v4 ); sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[123]); v5 = v1 + 117; v19 = 5; do { v6 = *v5; if ( *v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *v5 = 0; } ++v5; --v19; } while ( v19 ); v7 = v1[123]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[123] = 0; } v8 = v1[122]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[122] = 0; } v1[177] = 0; v9 = (_DWORD **)v1[201]; v10 = *v9; *v9 = v9; *(_DWORD *)(v1[201] + 4) = v1[201]; v1[202] = 0; if ( v10 != (_DWORD *)v1[201] ) { do { v11 = (_DWORD *)*v10; operator delete(v10); v10 = v11; } while ( v11 != (_DWORD *)v1[201] ); } operator delete((void *)v1[201]); v12 = v1[192]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); nullsub_17(v1 + 182); v13 = v1[123]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[122]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); `eh vector destructor iterator'(v1 + 117, 4u, 5, sub_410C00); v15 = v1[116]; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v16 = v1[115]; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = v1[114]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); `eh vector destructor iterator'(v1 + 89, 4u, 5, sub_410C00); return sub_8F10F0(v1); } // 60C640: using guessed type int __thiscall nullsub_17(_DWORD); // 9EBBB8: using guessed type void *ChatDisplayWin2::`vftable'; // 9EBBD4: using guessed type void *ChatDisplayWin2::`vftable'; //----- (0060AD00) -------------------------------------------------------- volatile LONG *__cdecl sub_60AD00(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x330u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_60A7B0((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 544))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0060AE30) -------------------------------------------------------- _DWORD *__thiscall sub_60AE30(_DWORD *this) { _DWORD *v1; // esi _DWORD ***v2; // ecx _DWORD **v3; // eax _DWORD **v4; // edi _DWORD **v5; // ecx _DWORD *result; // eax _DWORD *v7; // edi v1 = this; v2 = (_DWORD ***)this[201]; v3 = *v2; if ( *v2 != v2 ) { do { v4 = (_DWORD **)*v3; if ( v3 != (_DWORD **)v1[201] ) { *v3[1] = v4; (*v3)[1] = v3[1]; operator delete(v3); --v1[202]; } v3 = v4; } while ( v4 != (_DWORD **)v1[201] ); } v5 = (_DWORD **)v1[201]; result = *v5; *v5 = v5; *(_DWORD *)(v1[201] + 4) = v1[201]; v1[202] = 0; if ( result != (_DWORD *)v1[201] ) { do { v7 = (_DWORD *)*result; operator delete(result); result = v7; } while ( v7 != (_DWORD *)v1[201] ); } return result; } //----- (0060AEB0) -------------------------------------------------------- void __thiscall sub_60AEB0(int this, char a2, char a3) { int v3; // edi _DWORD **v4; // esi int v5; // eax v3 = this; if ( a2 != a3 ) { v4 = **(_DWORD ****)(this + 804); v5 = sub_606AD0((_DWORD *)this); if ( v5 > 0 ) { do { --v5; v4 = (_DWORD **)*v4; } while ( v5 ); } if ( a3 ) { if ( v4 == *(_DWORD ***)(v3 + 804) ) return; *v4[1] = *v4; (*v4)[1] = v4[1]; goto LABEL_10; } if ( a2 && v4 != *(_DWORD ***)(v3 + 804) ) { *v4[1] = *v4; (*v4)[1] = v4[1]; LABEL_10: operator delete(v4); --*(_DWORD *)(v3 + 808); return; } } } //----- (0060AF30) -------------------------------------------------------- _DWORD *__thiscall sub_60AF30(_DWORD **this, int a2, int a3) { _DWORD **v3; // edi int v4; // eax _DWORD *result; // eax _DWORD *v6; // esi const CHAR *v7; // eax char *v8; // esi char v9; // al char v10; // al char *v11; // ecx signed int v12; // edx _DWORD ***v13; // ecx _DWORD **v14; // eax _DWORD *v15; // esi _DWORD **v16; // edi _DWORD *v17; // ecx const char *v18; // esi signed int i; // ecx int v20; // eax const char *v21; // [esp-8h] [ebp-8B4h] char v22; // [esp+10h] [ebp-89Ch] char v23; // [esp+11h] [ebp-89Bh] char v24; // [esp+410h] [ebp-49Ch] char v25; // [esp+810h] [ebp-9Ch] char v26; // [esp+811h] [ebp-9Bh] char v27[20]; // [esp+890h] [ebp-1Ch] char v28[20]; // [esp+891h] [ebp-1Bh] char v29; // [esp+8A4h] [ebp-8h] v3 = this; v4 = (*(int (**)(void))(*this[116] + 456))(); sprintf(&v24, "%s", v4); if ( a2 != 2 ) (*(void (**)(void))(*v3[116] + 468))(); if ( a2 != 1 ) { if ( a2 == 2 ) return (_DWORD *)(*(int (**)(void))(*v3[116] + 480))(); goto LABEL_45; } if ( *((_DWORD *)dword_AD8EBC + 12) > 0 ) { v6 = v3[74]; v7 = sub_40A910(1327088824); sub_492060(v6, (int)v7); } v8 = &v24; if ( !v24 ) { LABEL_21: if ( v3[202] ) sub_60A460(v3, &v24); switch ( (unsigned int)v3[87] ) { case 0u: sub_496030((int)v3[74], &v24, 0, 0); break; case 1u: if ( !v24 || sub_6043F0(&v24) ) break; sub_4169E0(dword_ACEB0C, (int)v27); v17 = v3[98]; v29 = 0; if ( strlen((const char *)(*(int (**)(void))(*v17 + 452))()) ) { v22 = 0; memset(&v23, 0, 0x3FFu); v18 = (const char *)(*(int (**)(void))(*v3[98] + 452))(); result = (_DWORD *)strlen(v18); for ( i = 0; i < (signed int)result; ++i ) { if ( v18[i] == 32 ) return result; } v20 = (*(int (__cdecl **)(char *))(*v3[98] + 452))(&v24); sprintf(&v22, "%s %s", v20); sub_496030((int)v3[74], &v22, "/w ", (int)v18); } else if ( &v27[strlen(v27) + 1] == v28 ) { v21 = "/w "; LABEL_44: sub_496030((int)v3[74], &v24, v21, 0); } else { v22 = 0; memset(&v23, 0, 0x3FFu); sprintf(&v22, "%s %s", v27, &v24); sub_496030((int)v3[74], &v22, "/w ", (int)v27); } break; case 2u: sub_496030((int)v3[74], &v24, "/p ", 0); break; case 3u: v21 = "/g "; goto LABEL_44; case 4u: sub_496030((int)v3[74], &v24, "/a ", 0); break; default: break; } LABEL_45: if ( byte_B92028 && v24 ) { result = (_DWORD *)(*(int (**)(void))(*v3[116] + 480))(); } else { (*(void (__stdcall **)(_DWORD))(*v3[96] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v3[113] + 256))(0); result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*v3[112] + 256))(0); } if ( v3[202] ) result = sub_60AE30(v3); return result; } while ( 1 ) { v9 = *v8++; if ( v9 == 123 ) { v25 = 0; memset(&v26, 0, 0x7Fu); for ( ; *v8 == 32; ++v8 ) ; v10 = *v8; v11 = &v25; if ( *v8 ) { v12 = 0; do { if ( v10 == 44 || v12 >= 64 ) break; if ( v10 != 32 ) { *v11++ = v10; ++v12; } v10 = (v8++)[1]; } while ( v10 ); } *v11 = 0; result = (_DWORD *)_stricmp(&v25, "color"); if ( !result ) break; } if ( !*v8 ) goto LABEL_21; } if ( v3[202] ) { v13 = (_DWORD ***)v3[201]; v14 = *v13; v15 = v3 + 201; if ( *v13 != v13 ) { do { v16 = (_DWORD **)*v14; if ( v14 != (_DWORD **)*v15 ) { *v14[1] = v16; (*v14)[1] = v14[1]; operator delete(v14); --v15[1]; } v14 = v16; } while ( v16 != (_DWORD **)*v15 ); } result = sub_4DD2D0(v15); } return result; } // B92028: using guessed type char byte_B92028; // 60AF30: using guessed type char var_1C[20]; //----- (0060B310) -------------------------------------------------------- LRESULT __thiscall sub_60B310(_DWORD *this, const char *a2, int a3) { LRESULT result; // eax _DWORD *v4; // ebx HWND *v5; // ecx const char *v6; // edi signed int v7; // esi int v8; // eax int i; // eax int j; // eax unsigned int v11; // eax char *v12; // edi char v13; // cl unsigned int v14; // eax char *v15; // edi char v16; // cl int v17; // edi char **v18; // eax int v19; // ecx char *v20; // esi int v21; // eax int v22; // ecx _BYTE *v23; // eax const char *v24; // [esp+8h] [ebp-11Ch] int v25; // [esp+Ch] [ebp-118h] int wParam; // [esp+14h] [ebp-110h] int v27; // [esp+18h] [ebp-10Ch] int v28; // [esp+1Ch] [ebp-108h] char v29[256]; // [esp+20h] [ebp-104h] char v30[256]; // [esp+21h] [ebp-103h] result = (LRESULT)a2; v4 = this; if ( a2 ) { v5 = *(HWND **)(this[116] + 300); v28 = 0; v27 = 0; v25 = sub_90E3C0(v5); memset(v29, 0, 0x100u); v6 = (const char *)(*(int (**)(void))(**(_DWORD **)(v4[116] + 300) + 16))(); v24 = v6; v7 = strlen(v6) + 1; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v4[116] + 492))() ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[116] + 256))(1); v8 = *(_DWORD *)(v4[116] + 300); *(_BYTE *)(v8 + 36) = 1; *(_DWORD *)(v8 + 44) = 423; (*(void (**)(void))(*(_DWORD *)v4[116] + 480))(); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[96] + 256))(1); (*(void (__stdcall **)(void *))(*(_DWORD *)v4[116] + 464))(&unk_9EB76B); } for ( i = 0; i < v25; ++i ) { if ( v6[i] == 9 ) ++v28; } for ( j = v25; j < v7; ++j ) { if ( v6[j] == 9 ) ++v27; } strncpy(v29, v6, v25); v11 = strlen(a2) + 1; v12 = (char *)&v28 + 3; do v13 = (v12++)[1]; while ( v13 ); qmemcpy(v12, a2, v11); wParam = &v29[strlen(v29) + 1] - v30; v14 = strlen(&v24[v25]) + 1; v15 = (char *)&v28 + 3; do v16 = (v15++)[1]; while ( v16 ); qmemcpy(v15, &v24[v25], v14); result = &v29[strlen(v29) + 1] - v30; if ( result + 20 * v4[202] <= 128 ) { if ( v27 ) { v20 = *(char **)v4[201]; v21 = v28 / 2; if ( v28 / 2 > 0 ) { do { --v21; v20 = *(char **)v20; } while ( v21 ); } v18 = sub_4DD390(v20, *((_DWORD *)v20 + 1), a3); v22 = v4[202]; if ( (unsigned int)(41698710 - v22) < 1 ) std::_Xlength_error("list too long"); v4[202] = v22 + 1; *((_DWORD *)v20 + 1) = v18; } else { v17 = v4[201]; v18 = sub_4DD390((char *)v4[201], *(_DWORD *)(v17 + 4), a3); v19 = v4[202]; if ( (unsigned int)(41698710 - v19) < 1 ) std::_Xlength_error("list too long"); v4[202] = v19 + 1; *(_DWORD *)(v17 + 4) = v18; } *(_DWORD *)v18[1] = v18; v23 = (_BYTE *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v23 ) sub_493190(v23, 0); (*(void (__stdcall **)(char *))(**(_DWORD **)(v4[116] + 300) + 20))(v29); result = sub_90E410(*(HWND **)(v4[116] + 300), wParam); } } return result; } // 60B310: using guessed type char var_104[256]; //----- (0060B620) -------------------------------------------------------- void __thiscall sub_60B620(_DWORD **this) { _DWORD **v1; // edi const char *v2; // esi HWND *v3; // edi int v4; // eax signed int v5; // ebx char v6; // cl int v7; // edi int v8; // ebx size_t v9; // edi int v10; // edi size_t v11; // ebx unsigned int v12; // eax char *v13; // edi char v14; // cl _DWORD **v15; // esi int v16; // eax size_t v17; // edi size_t v18; // edi size_t v19; // ebx WPARAM v20; // kr00_4 unsigned int v21; // eax char *v22; // edi char v23; // cl const char *v24; // [esp+8h] [ebp-314h] int v25; // [esp+Ch] [ebp-310h] HWND *v26; // [esp+10h] [ebp-30Ch] size_t wParam; // [esp+14h] [ebp-308h] char v28[256]; // [esp+18h] [ebp-304h] char v29[256]; // [esp+117h] [ebp-205h] char v30; // [esp+118h] [ebp-204h] char v31; // [esp+217h] [ebp-105h] char v32[256]; // [esp+218h] [ebp-104h] v1 = this; v25 = (int)this; v2 = (const char *)(*(int (**)(void))(*this[116] + 452))(); if ( v2 ) { v3 = (HWND *)v1[116][75]; v26 = v3; if ( v3 ) { v4 = sub_90E3C0(v3); wParam = v4; v5 = strlen(v2); if ( v5 ) { v6 = *(_BYTE *)(dword_ACDC84 + 48); if ( v6 & 0x10 ) { if ( v2[v4 - 1] == 60 && v2[v4] == 9 ) { v7 = v4; while ( ++v7 < v5 ) { if ( v2[v7] == 62 ) { memcpy(v28, &v2[v4], v7 - v4); if ( strtok(v28, "\t") ) sub_90E410(v26, v7 + 1); return; } } } } else if ( v6 & 8 ) { if ( v2[v4] == 62 && v2[v4 - 1] == 9 ) { v8 = v4; while ( --v8 > 0 ) { if ( v2[v8 - 1] == 60 ) { memcpy(v28, &v2[v8], v4 - v8); if ( strtok(v28, "\t") ) sub_90E410(v3, v8 - 1); return; } } } } else if ( *(_BYTE *)(dword_ACDC84 + 49) & 2 ) { if ( v2[v4] == 9 ) { memset(&v30, 0, 0x100u); memset(v32, 0, 0x100u); v9 = wParam; while ( (signed int)++v9 < v5 ) { if ( v2[v9] == 62 ) { v10 = v9 + 1; memcpy(&v30, v2, wParam); v11 = v5 - v10; memcpy(v32, &v2[v10], v11); v32[v11] = 0; v12 = strlen(v32) + 1; v13 = v29; do v14 = (v13++)[1]; while ( v14 ); qmemcpy(v13, v32, v12); (*((void (__thiscall **)(HWND *, char *))*v26 + 5))(v26, &v30); sub_90E410(v26, wParam); v15 = **(_DWORD ****)(v25 + 804); v16 = sub_606AD0((_DWORD *)v25); if ( v16 > 0 ) { do { --v16; v15 = (_DWORD **)*v15; } while ( v16 ); } if ( v15 != *(_DWORD ***)(v25 + 804) ) { *v15[1] = *v15; (*v15)[1] = v15[1]; operator delete(v15); --*(_DWORD *)(v25 + 808); } return; } } } } else if ( *(_BYTE *)(dword_ACDC84 + 34) & 0x40 ) { v24 = &v2[v4]; if ( v2[v4 - 1] == 9 ) { memset(v32, 0, 0x100u); memset(&v30, 0, 0x100u); v17 = wParam; while ( (signed int)--v17 > 0 ) { if ( v2[v17 - 1] == 60 ) { v18 = v17 - 1; memcpy(v32, v2, v18); v19 = v5 - v18; memcpy(&v30, v24, v19); v28[v19] = 0; v20 = strlen(v32); v21 = strlen(&v30) + 1; v22 = &v31; do v23 = (v22++)[1]; while ( v23 ); qmemcpy(v22, &v30, v21); (*((void (__thiscall **)(HWND *, char *))*v26 + 5))(v26, v32); sub_90E410(v26, v20); sub_60AEB0(v25, 0, 1); return; } } } } } } } } // ACDC84: using guessed type int dword_ACDC84; // 60B620: using guessed type char var_304[256]; // 60B620: using guessed type char var_104[256]; //----- (0060B9F0) -------------------------------------------------------- void __userpurge sub_60B9F0(float *a1@, int a2@, int a3@, int a4@, float a5) { double v5; // st7 double v6; // st6 int *v7; // esi _DWORD *v8; // ecx bool v9; // c0 double v10; // st7 _DWORD *v11; // ecx int v12; // ecx int v13; // ecx int v14; // ecx int v15; // ecx int v16; // ecx int v17; // ecx int v18; // ecx int v19; // ecx int v20; // ecx int v21; // ecx int v22; // ecx int v23; // ecx int v24; // ecx int v25; // edi signed int v26; // ebx _BYTE *v27; // ecx double v28; // st7 int v29; // ecx int v30; // eax int v31; // eax int v32; // ecx int v33; // ecx int v34; // edi signed int v35; // ebx int v36; // ecx int v37; // edi signed int v38; // ebx int v39; // ecx int v40; // edx LONG v41; // edi float v42; // ebx int v43; // edi int v44; // eax int v45; // eax int v46; // ecx int v47; // edi signed int v48; // ebx char v49; // al void (__stdcall *v50)(signed int); // edx int v51; // eax int *v52; // ecx int v53; // edi int v54; // ebx int v55; // eax int v56; // eax int *v57; // ebx int v58; // edi int v59; // edi int v60; // eax int v61; // eax int v62; // ST9C_4 int *v63; // ebx int v64; // edi int v65; // eax int *v66; // ebx int v67; // edi int v68; // eax int v69; // edi int v70; // ebx int v71; // eax int v72; // eax _BYTE *v73; // eax int v74; // eax int v75; // eax signed int v76; // [esp+90h] [ebp-10h] int v77; // [esp+94h] [ebp-Ch] int v78; // [esp+98h] [ebp-8h] int *v79; // [esp+9Ch] [ebp-4h] float v80; // [esp+A8h] [ebp+8h] float v81; // [esp+A8h] [ebp+8h] float v82; // [esp+A8h] [ebp+8h] float v83; // [esp+A8h] [ebp+8h] float v84; // [esp+A8h] [ebp+8h] float v85; // [esp+A8h] [ebp+8h] float v86; // [esp+A8h] [ebp+8h] int v87; // [esp+A8h] [ebp+8h] int v88; // [esp+A8h] [ebp+8h] int v89; // [esp+A8h] [ebp+8h] char v90; // [esp+ABh] [ebp+Bh] char v91; // [esp+ABh] [ebp+Bh] v79 = (int *)a1; v5 = a5; v78 = a4; v6 = 0.1000000014901161; v7 = (int *)a1; v77 = a3; if ( *(_DWORD *)(*((_DWORD *)a1 + 103) + 308) == 1 && v5 - a1[105] > 0.1000000014901161 ) { do { v8 = (_DWORD *)v7[94]; *((float *)v7 + 105) = v6 + *((float *)v7 + 105); sub_5FCF60(v8); v5 = a5; v6 = 0.1000000014901161; } while ( a5 - *((float *)v7 + 105) > 0.1000000014901161 ); } if ( *(_DWORD *)(v7[100] + 308) == 1 ) { v9 = v6 < v5 - *((float *)v7 + 102); v10 = v6; if ( v9 ) { do { v11 = (_DWORD *)v7[94]; *((float *)v7 + 102) = v10 + *((float *)v7 + 102); sub_5FBDB0(v11); v10 = 0.1000000014901161; } while ( a5 - *((float *)v7 + 102) > 0.1000000014901161 ); } } v12 = v7[96]; if ( v12 && (*(unsigned __int8 (__cdecl **)(int, int, int *))(*(_DWORD *)v12 + 260))(a3, v78, v79) ) { if ( sub_459B00((_DWORD *)v7[116]) == (HIMC)2 ) { v76 = 1; LABEL_11: (*(void (__stdcall **)(signed int, int))(*(_DWORD *)v7[113] + 256))(v76, v77); (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v7[112] + 256))(0); goto LABEL_12; } v76 = 0; if ( sub_459B00((_DWORD *)v7[116]) != (HIMC)1 ) goto LABEL_11; (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v7[113] + 256))(0, v77); (*(void (__cdecl **)(signed int))(*(_DWORD *)v7[112] + 256))(1); } LABEL_12: if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG, int, int, int, int *))(*(_DWORD *)v7[95] + 332))( pt.x, pt.y, a2, v77, v78, v79) ) { goto LABEL_132; } if ( (*(unsigned __int8 (__thiscall **)(int *, LONG, LONG))(*v7 + 332))(v7, pt.x, pt.y) ) goto LABEL_132; v13 = v7[99]; if ( v13 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v13 + 332))(pt.x, pt.y) ) goto LABEL_132; } v14 = v7[194]; if ( v14 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v14 + 332))(pt.x, pt.y) ) goto LABEL_132; } v15 = v7[107]; if ( v15 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v15 + 332))(pt.x, pt.y) ) goto LABEL_132; } v16 = v7[177]; if ( v16 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v16 + 332))(pt.x, pt.y) ) goto LABEL_132; } v17 = v7[103]; if ( v17 ) { if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v17 + 332))(pt.x, pt.y) ) goto LABEL_132; } if ( (v18 = v7[100]) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v18 + 332))(pt.x, pt.y) || (v19 = v7[106]) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v19 + 332))(pt.x, pt.y) || (v20 = v7[109]) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v20 + 332))(pt.x, pt.y) || (v21 = v7[108]) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v21 + 332))(pt.x, pt.y) || (v22 = v7[111]) != 0 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v22 + 332))(pt.x, pt.y) || (v23 = v7[v7[87] + 117]) != 0 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v23 + 260))() && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*(_DWORD *)v7[v7[87] + 117] + 332))(pt.x, pt.y) || (v24 = v7[122]) != 0 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v24 + 260))() || byte_AD0364 ) { LABEL_132: v90 = 1; } else { v90 = 0; v25 = (int)(v7 + 131); v26 = 5; do { if ( *(_DWORD *)v25 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(**(_DWORD **)v25 + 332))(pt.x, pt.y) ) v90 = 1; v25 += 4; --v26; } while ( v26 ); } if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v7[193] + 260))() || v90 || (*(unsigned __int8 (**)(void))(*(_DWORD *)v7[v7[87] + 117] + 260))() || (*(unsigned __int8 (__thiscall **)(int *))(*v7 + 548))(v7) ) { if ( *((float *)v7 + 142) > 0.0 ) *((float *)v7 + 142) = *((float *)v7 + 142) - flt_ACCFD0 * 10.0; if ( *((float *)v7 + 142) <= 0.0 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[95] + 256))(1); v32 = v7[109]; if ( v32 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v32 + 256))(1); (*(void (__thiscall **)(int *, signed int))(*v7 + 240))(v7, 1); v28 = 1.0; if ( *((float *)v7 + 143) < 1.0 ) { v84 = flt_ACCFD0 + flt_ACCFD0 + *((float *)v7 + 143); *((float *)v7 + 143) = v84; if ( v84 > 1.0 ) *((float *)v7 + 143) = 1.0; if ( *((float *)v7 + 143) < 1.0 ) { v85 = *((float *)v7 + 143) * flt_BA45B8; v86 = sin(v85); v28 = v86; } goto LABEL_57; } } } else { v27 = (_BYTE *)v7[95]; if ( v27[365] ) goto LABEL_72; v28 = 0.0; if ( *((float *)v7 + 143) > 0.0 ) { v80 = *((float *)v7 + 143) - (flt_ACCFD0 + flt_ACCFD0); *((float *)v7 + 143) = v80; if ( v80 <= 0.0 ) { *((float *)v7 + 143) = 0.0; *((float *)v7 + 142) = 1.0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v27 + 256))(0); v29 = v7[109]; if ( v29 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v29 + 256))(0); (*(void (__thiscall **)(int *, _DWORD))(*v7 + 240))(v7, 0); v28 = 0.0; } if ( v28 < *((float *)v7 + 143) ) { v81 = *((float *)v7 + 143) * flt_BA45B8; v82 = sin(v81); v28 = v82; } LABEL_57: v30 = v7[114]; v83 = v28; *(float *)(v30 + 84) = v83; ++*(_DWORD *)(v30 + 88); goto LABEL_72; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v27 + 256))(0); (*(void (__thiscall **)(int *, _DWORD))(*v7 + 240))(v7, 0); v31 = v7[114]; *(float *)(v31 + 84) = 0.0; ++*(_DWORD *)(v31 + 88); } LABEL_72: v33 = v7[124]; if ( v33 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v33 + 276))(*(float *)(v7[114] + 84)); v34 = (int)(v7 + 126); v35 = 5; do { if ( *(_DWORD *)v34 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v34 + 276))(*(float *)(v7[114] + 84)); v34 += 4; --v35; } while ( v35 ); v36 = v7[125]; if ( v36 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v36 + 276))(*(float *)(v7[114] + 84)); if ( !*(_BYTE *)(v7[177] + 380) ) { v91 = 0; v37 = (int)(v7 + 131); v38 = 5; do { if ( *(_DWORD *)v37 == dword_BA6B9C && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(**(_DWORD **)v37 + 332))(pt.x, pt.y) ) { v91 = 1; } v37 += 4; --v38; } while ( v38 ); v39 = dword_ACDC88; if ( *((float *)v7 + 143) >= 1.0 && !*(_BYTE *)(v7[95] + 365) && !byte_AD0364 && v91 && *(_BYTE *)(dword_ACDC88 + 129) && (!*(_BYTE *)(dword_ACDC88 + 131) || *(_BYTE *)(dword_ACDC88 + 129)) ) { v40 = dword_AD035C - *(_DWORD *)(dword_ACDC88 + 68); if ( (unsigned int)(dword_AD0360 - *(_DWORD *)(dword_ACDC88 + 36) + 3) > 6 || v40 > 3 || v40 < -3 ) byte_AD0364 = 1; } v41 = pt.x; if ( pt.y >= dword_BA6A84 && pt.x >= dword_BA6A80 && pt.x <= dword_AC2F6C && pt.y <= dword_AC2F70 ) { if ( byte_AD0364 ) { v42 = *(float *)v7; v43 = pt.x - v7[178]; v87 = pt.y - v7[179]; v44 = (*(int (__thiscall **)(int *))(*v7 + 168))(v7); v45 = (*(int (__thiscall **)(int *, int))(*v7 + 164))(v7, v87 + v44); (*(void (__thiscall **)(int *, int))(LODWORD(v42) + 308))(v7, v43 + v45); v41 = pt.x; v39 = dword_ACDC88; } } else { byte_AD0364 = 0; } if ( !*(_BYTE *)(v39 + 129) && *(_BYTE *)(v39 + 131) ) byte_AD0364 = 0; dword_AD0360 = *(_DWORD *)(v39 + 36); dword_AD035C = *(_DWORD *)(v39 + 68); dword_AD0358 = *(_DWORD *)(v39 + 100); v7[178] = v41; v7[179] = pt.y; } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v7[96] + 260))() ) { v46 = v7[116]; if ( v46 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v46 + 488))(1); } v47 = (int)(v7 + 131); v48 = 5; do { (*(void (__stdcall **)(bool))(**(_DWORD **)v47 + 240))(byte_AD0364 == 0); v47 += 4; --v48; } while ( v48 ); if ( v7[87] == 1 ) { v49 = (*(int (**)(void))(*(_DWORD *)v7[96] + 260))(); v50 = *(void (__stdcall **)(signed int))(*(_DWORD *)v7[97] + 256); if ( v49 ) { v50(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[98] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[108] + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v7[96] + 172))(v7[181]); v51 = v7[181]; goto LABEL_118; } } else { v50 = *(void (__stdcall **)(signed int))(*(_DWORD *)v7[97] + 256); } v50(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[98] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[108] + 256))(0); (*(void (__stdcall **)(int))(*(_DWORD *)v7[96] + 172))(v7[180]); v51 = v7[180]; LABEL_118: (*(void (__stdcall **)(int))(*(_DWORD *)v7[116] + 172))(v51 + 3); if ( v7[87] == 1 ) { v52 = (int *)v7[96]; v53 = *v52; v54 = v7[95]; v55 = (*(int (**)(void))(*v52 + 148))(); v56 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v54 + 144))(v54, v55); (*(void (__thiscall **)(int, int))(v53 + 540))(v7[96], v56 - v7[139]); } else { v57 = (int *)v7[96]; v88 = *v57; v58 = (*(int (**)(void))(*(_DWORD *)v7[95] + 144))() - v7[139]; (*(void (**)(void))(*(_DWORD *)v7[108] + 144))(); v59 = v7[97]; v60 = (*(int (__thiscall **)(int *))(v88 + 148))(v57); v61 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v59 + 144))(v59, v60); (*(void (__thiscall **)(int, int))(v88 + 540))(v7[96], v62 + v61); } v63 = (int *)v7[116]; v64 = *v63; v65 = (*(int (**)(void))(*(_DWORD *)v7[96] + 144))(); (*(void (__thiscall **)(int *, int))(v64 + 152))(v63, v65 - 4); v66 = (int *)v7[116]; v67 = *v66; v68 = (*(int (**)(void))(*(_DWORD *)v7[96] + 148))(); (*(void (__thiscall **)(int *, int))(v67 + 156))(v66, v68 - 1); v69 = v7[96]; v70 = *(_DWORD *)v7[116]; v89 = v7[116]; v71 = (*(int (__thiscall **)(int))(*(_DWORD *)v69 + 168))(v7[96]); v72 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v69 + 164))(v69, v71 + 4); (*(void (__thiscall **)(int, int))(v70 + 308))(v89, v72 + 4); v73 = (_BYTE *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v73 ) sub_4E2D60(v73, (_DWORD *)v7[95], (_DWORD *)v7[94]); if ( (*(unsigned __int8 (__thiscall **)(int *, LONG, LONG))(*v7 + 332))(v7, pt.x, pt.y) ) { v74 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v74 ) sub_4A8140(v74, 9); } v75 = v7[116]; if ( v75 && *(_BYTE *)(v75 + 324) ) { if ( v7[202] ) sub_60B620((_DWORD **)v7); } } // 60B9F0: could not find valid save-restore pair for edi // 60B9F0: could not find valid save-restore pair for esi // AC2F6C: using guessed type int dword_AC2F6C; // AC2F70: using guessed type int dword_AC2F70; // ACCFD0: using guessed type float flt_ACCFD0; // ACDC88: using guessed type int dword_ACDC88; // AD0358: using guessed type int dword_AD0358; // AD035C: using guessed type int dword_AD035C; // AD0360: using guessed type int dword_AD0360; // AD0364: using guessed type char byte_AD0364; // BA45B8: using guessed type float flt_BA45B8; // BA6A80: using guessed type int dword_BA6A80; // BA6A84: using guessed type int dword_BA6A84; // BA6B9C: using guessed type int dword_BA6B9C; //----- (0060C4F0) -------------------------------------------------------- char ***__thiscall sub_60C4F0(int **this, char ***a2) { sub_4DDC60(a2, this + 201); return a2; } //----- (0060C520) -------------------------------------------------------- char __cdecl sub_60C520(char *a1, const char *a2, signed int *a3) { BYTE *v3; // edi signed int v4; // eax signed int v5; // ebx char *i; // esi char result; // al v3 = (BYTE *)a2; v4 = strlen(a2); if ( v4 && v4 > *a3 ) { v5 = 0; for ( i = a1; v5 < *a3; *i = 0 ) { if ( IsDBCSLeadByte(*v3) ) { *i = *v3; v5 += 2; i[1] = v3[1]; v3 += 2; i += 2; } else { ++v5; *i++ = *v3++; } } *(_DWORD *)&i[strlen(i)] = 3026478; } else { strcpy(a1, a2); } return result; } //----- (0060C5B0) -------------------------------------------------------- double __thiscall sub_60C5B0(_DWORD *this) { return (float)(100.0 - (double)(5 * *(_DWORD *)(this[200] + 300))); } //----- (0060C5E0) -------------------------------------------------------- void *__thiscall sub_60C5E0(void *this, char a2) { void *v2; // esi v2 = this; sub_60AA20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0060C610) -------------------------------------------------------- float *__thiscall sub_60C610(float *this) { float *result; // eax result = this; *this = 0.0; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; this[4] = 0.0; this[5] = 0.0; this[6] = 0.0; this[7] = 0.0; this[8] = 0.0; this[9] = 0.0; return result; } //----- (0060C650) -------------------------------------------------------- char __thiscall sub_60C650(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi void *v5; // eax void *v6; // edi void *v7; // eax void *v8; // eax void *v9; // eax void *v10; // ST10_4 void *v11; // ST10_4 void *v12; // ST0C_4 int v13; // edi void **v14; // eax void *v15; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( a2 <= 0 ) return 0; this[3] = a2; v5 = malloc(2 * a2); v6 = v5; v3[4] = v5; v7 = malloc(2 * a2); v3[5] = v7; if ( !v6 ) return 0; if ( !v7 ) { free(v6); v3[4] = 0; return 0; } v8 = malloc(4 * a2); v15 = v8; v3[8] = v8; v9 = malloc(4 * v2); v3[9] = v9; if ( !v15 ) { free(v6); v10 = (void *)v3[5]; v3[4] = 0; free(v10); v3[5] = 0; return 0; } if ( !v9 ) { free(v6); v11 = (void *)v3[5]; v3[4] = 0; free(v11); v12 = (void *)v3[8]; v3[5] = 0; free(v12); v3[8] = 0; return 0; } v13 = 0; if ( v2 > 0 ) { while ( 1 ) { *(_DWORD *)(v3[8] + 4 * v13) = malloc(4 * v3[3]); *(_DWORD *)(v3[9] + 4 * v13) = malloc(4 * v3[3]); v14 = (void **)(v3[8] + 4 * v13); if ( !*v14 || !*(_DWORD *)(v3[9] + 4 * v13) ) break; memset(*v14, 0, 4 * v3[3]); memset(*(void **)(v3[9] + 4 * v13++), 0, 4 * v3[3]); if ( v13 >= v3[3] ) return 1; } return 0; } return 1; } //----- (0060C7D0) -------------------------------------------------------- void __thiscall sub_60C7D0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // edi int v6; // edx BYTE v7; // cl const char *v8; // esi v4 = a2; if ( a2 ) { if ( a3 ) { v5 = a4; if ( a4 ) { v6 = *(_DWORD *)(*(_DWORD *)(this[9] + 4 * a2) + 4 * a3); if ( v6 == 1 ) { sub_60C7D0(a2 - 1, a3 - 1, a4); v7 = *(_BYTE *)(v5 + 2 * v4 - 2); v8 = (const char *)(v5 + 2 * v4 - 2); if ( IsDBCSLeadByte(v7) == 1 ) { strncpy((char *)&a2, v8, 2u); BYTE2(a2) = 0; printf("%s", &a2); } else { printf("%c", *v8); } } else if ( v6 == 2 ) { sub_60C7D0(a2 - 1, a3, a4); } else { sub_60C7D0(a2, a3 - 1, a4); } } } } } //----- (0060C890) -------------------------------------------------------- char __thiscall sub_60C890(_DWORD *this, int a2, _DWORD *a3, const char *a4) { const char *v5; // ebx signed int v6; // eax signed int v7; // ecx signed int v8; // esi int v9; // edi signed int v10; // [esp+10h] [ebp+10h] if ( !a2 || !a3 ) return 0; v5 = a4; if ( !a4 ) return 0; v6 = strlen(a4); v7 = this[3]; v10 = v6; if ( v6 > v7 ) { v10 = v7; v6 = v7; } if ( v6 <= 0 ) return 0; v8 = 0; v9 = 0; if ( v6 > 0 ) { do { if ( IsDBCSLeadByte(v5[v8]) == 1 ) *(_WORD *)(a2 + 2 * v9) = *(_WORD *)&v5[v8++]; else *(_WORD *)(a2 + 2 * v9) = v5[v8]; ++v8; ++v9; } while ( v8 < v10 ); } *a3 = v9; return 1; } //----- (0060C930) -------------------------------------------------------- double __thiscall sub_60C930(float *this) { float v2; // [esp+0h] [ebp-4h] if ( this[1] >= (double)*this ) v2 = *this; else v2 = this[1]; return v2; } //----- (0060C960) -------------------------------------------------------- char __thiscall sub_60C960(_DWORD *this, const char *a2, const char *a3) { float *v3; // esi signed int *v4; // edi char result; // al signed int i; // eax _DWORD *v7; // ecx int j; // eax signed int k; // ecx signed int l; // eax _DWORD *v11; // edx int v12; // ebx signed int v13; // eax signed int v14; // ecx signed int v15; // [esp+14h] [ebp+8h] signed int v16; // [esp+18h] [ebp+Ch] v3 = (float *)this; if ( !a2 || !a3 ) return 0; v4 = this + 6; if ( !sub_60C890(this, this[4], this + 6, a2) || !sub_60C890(v3, *((_DWORD *)v3 + 5), (_DWORD *)v3 + 7, a3) ) return 0; for ( i = 1; i <= *v4; *v7 = 0 ) v7 = *(_DWORD **)(*((_DWORD *)v3 + 8) + 4 * i++); for ( j = 0; j <= *((_DWORD *)v3 + 7); ++j ) *(_DWORD *)(**((_DWORD **)v3 + 8) + 4 * j) = 0; for ( k = 1; k <= *((_DWORD *)v3 + 6); ++k ) { for ( l = 1; l <= *((_DWORD *)v3 + 7); ++l ) { v11 = (_DWORD *)(*((_DWORD *)v3 + 8) + 4 * k); if ( *(_WORD *)(*((_DWORD *)v3 + 4) + 2 * k - 2) == *(_WORD *)(*((_DWORD *)v3 + 5) + 2 * l - 2) ) { *(_DWORD *)(*v11 + 4 * l) = *(_DWORD *)(*(v11 - 1) + 4 * l - 4) + 1; *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v3 + 9) + 4 * k) + 4 * l) = 1; } else { v12 = *(_DWORD *)(*(v11 - 1) + 4 * l); if ( v12 < *(_DWORD *)(*v11 + 4 * l - 4) ) { *(_DWORD *)(*v11 + 4 * l) = *(_DWORD *)(*v11 + 4 * l - 4); *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v3 + 9) + 4 * k) + 4 * l) = 3; } else { *(_DWORD *)(*v11 + 4 * l) = v12; *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v3 + 9) + 4 * k) + 4 * l) = 2; } } } } v13 = *((_DWORD *)v3 + 6); v14 = *((_DWORD *)v3 + 7); v16 = v13; v15 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v3 + 8) + 4 * v13) + 4 * v14); *((_DWORD *)v3 + 2) = v15; result = 1; *v3 = (double)v15 / (double)v16 * 100.0; v3[1] = 100.0 * ((double)*((signed int *)v3 + 2) / (double)v14); return result; } //----- (0060CB00) -------------------------------------------------------- int __thiscall sub_60CB00(int this) { int v1; // esi v1 = this; *(_DWORD *)(this + 500) = 0; if ( byte_AD0365 ) { byte_AD0365 = 0; sub_466AF0(*(_DWORD **)(this + 432), 0, 1, 0); } else { byte_AD0365 = 1; sub_466AF0(*(_DWORD **)(this + 432), 0, 0, 0); } return sub_465130(*(_DWORD **)(v1 + 432)); } // AD0365: using guessed type char byte_AD0365; //----- (0060CB40) -------------------------------------------------------- int __thiscall sub_60CB40(_DWORD *this) { char v1; // al _DWORD *v2; // esi _DWORD *v3; // ecx v2 = this; v3 = (_DWORD *)this[108]; byte_AD0366 = byte_AD0366 == 0; v1 = byte_AD0366; v2[125] = 1; if ( v1 ) sub_466AF0(v3, 1, 0, 1); else sub_466AF0(v3, 1, 1, 1); return sub_465130((_DWORD *)v2[108]); } // AD0366: using guessed type char byte_AD0366; //----- (0060CBA0) -------------------------------------------------------- int __thiscall sub_60CBA0(int this) { bool v1; // zf int v2; // esi v1 = byte_AD0367 == 0; v2 = this; *(_DWORD *)(this + 500) = 2; if ( v1 ) { byte_AD0367 = 1; sub_466AF0(*(_DWORD **)(this + 432), 2, 0, 0); } else { byte_AD0367 = 0; sub_466AF0(*(_DWORD **)(this + 432), 2, 1, 0); } return sub_465130(*(_DWORD **)(v2 + 432)); } // AD0367: using guessed type char byte_AD0367; //----- (0060CBF0) -------------------------------------------------------- int __thiscall sub_60CBF0(int this) { bool v1; // zf int v2; // esi v1 = byte_AD0368 == 0; v2 = this; *(_DWORD *)(this + 500) = 3; if ( v1 ) { byte_AD0368 = 1; sub_466AF0(*(_DWORD **)(this + 432), 3, 0, 0); } else { byte_AD0368 = 0; sub_466AF0(*(_DWORD **)(this + 432), 3, 1, 0); } return sub_465130(*(_DWORD **)(v2 + 432)); } // AD0368: using guessed type char byte_AD0368; //----- (0060CC40) -------------------------------------------------------- int __thiscall sub_60CC40(int this, int a2, char a3) { int result; // eax result = 0; if ( !a3 ) { *(_DWORD *)(this + 516) = -1; *(_BYTE *)(this + 512) = 0; *(_DWORD *)(this + 504) = 0; } return result; } //----- (0060CC80) -------------------------------------------------------- signed int __thiscall sub_60CC80(int *this, int a2) { return sub_7520A0(this + 633, a2); } //----- (0060CC90) -------------------------------------------------------- int __thiscall sub_60CC90(_DWORD *this, int a2) { return sub_752110(this + 633, a2); } //----- (0060CCA0) -------------------------------------------------------- int __thiscall sub_60CCA0(int this, int a2) { _DWORD **v2; // esi int result; // eax v2 = (_DWORD **)this; if ( *(_DWORD *)(this + 456) ) { if ( *(_DWORD *)(this + 460) ) { (*(void (__stdcall **)(int))(**(_DWORD **)(this + 456) + 240))(a2); (*(void (__stdcall **)(int))(*v2[115] + 240))(a2); (*(void (__stdcall **)(int))(*v2[114] + 256))(a2); result = (*(int (__stdcall **)(int))(*v2[115] + 256))(a2); if ( v2[120] ) { if ( v2[121] ) { (*(void (__stdcall **)(int))(*v2[120] + 256))(a2); result = (*(int (__stdcall **)(int))(*v2[121] + 256))(a2); } } } } return result; } //----- (0060CD40) -------------------------------------------------------- char sub_60CD40() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCKDQuest"); return (char)v0; } //----- (0060CD70) -------------------------------------------------------- char __thiscall sub_60CD70(_DWORD *this) { int v1; // edi int v2; // esi int v3; // eax char v4; // dl bool v5; // dl v1 = this[633]; v2 = 0; if ( v1 <= 0 ) return 0; v3 = (int)(this + 634); while ( 1 ) { if ( v3 ) { v4 = *(_BYTE *)(v3 + 4); v5 = v4 == 3 || v4 == 4; if ( *(_DWORD *)v3 == this[129] && v5 ) break; } ++v2; v3 += 377; if ( v2 >= v1 ) return 0; } return 1; } //----- (0060CDD0) -------------------------------------------------------- int __thiscall sub_60CDD0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // eax int result; // eax v1 = this; if ( this[129] == -1 && (v2 = (_DWORD *)sub_680810(byte_AD9238), (v3 = sub_681CC0(byte_AD9238, v2)) != 0) ) result = *(_DWORD *)(v3 + 91); else result = v1[129]; return result; } //----- (0060CE10) -------------------------------------------------------- float *__thiscall sub_60CE10(float *this) { float *v1; // esi v1 = this; sub_8F3C20(this); v1[90] = 0.0; v1[85] = 0.0; v1[86] = 0.0; v1[74] = 0.0; *((_BYTE *)v1 + 300) = 0; v1[87] = 0.0; *(_DWORD *)v1 = &KingdomQuestPlayerList::`vftable'; *((_DWORD *)v1 + 58) = &KingdomQuestPlayerList::`vftable'; v1[89] = 2.3509887e-38; return v1; } // 9ECA1C: using guessed type void *KingdomQuestPlayerList::`vftable'; // 9ECA3C: using guessed type void *KingdomQuestPlayerList::`vftable'; //----- (0060CE80) -------------------------------------------------------- int __thiscall sub_60CE80(void *this) { return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)this + 256))(0); } //----- (0060CE90) -------------------------------------------------------- int __thiscall sub_60CE90(int this, int a2) { int v2; // esi int result; // eax v2 = this; if ( a2 ) sub_466AF0(*(_DWORD **)(this + 340), a2, *(_BYTE *)(a2 + this + 356), 0); else sub_466AF0(*(_DWORD **)(this + 340), 0, *(_BYTE *)(this + 356), 1); result = sub_465130(*(_DWORD **)(v2 + 340)); *(_BYTE *)(a2 + v2 + 356) = *(_BYTE *)(a2 + v2 + 356) == 0; return result; } //----- (0060CEF0) -------------------------------------------------------- int __thiscall sub_60CEF0(_DWORD **this) { return sub_466A50(this[85]); } //----- (0060CF00) -------------------------------------------------------- _DWORD *__thiscall sub_60CF00(_DWORD **this) { _DWORD **v1; // esi unsigned int v2; // eax _DWORD *result; // eax int v4; // esi int v5; // edx char v6; // cl v1 = this; v2 = sub_464F50(this[85]); result = sub_4650C0(v1[85], v2, 2u); if ( strcmp((const char *)result, (const char *)&unk_9EBE47) ) { v4 = (int)(v1 + 75); v5 = v4 - (_DWORD)result; do { v6 = *(_BYTE *)result; *((_BYTE *)result + v5) = *(_BYTE *)result; result = (_DWORD *)((char *)result + 1); } while ( v6 ); result = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) result = sub_8EEE70(result, 128, v4, 0); } return result; } //----- (0060CF90) -------------------------------------------------------- char __thiscall sub_60CF90(_DWORD **this, const char *a2) { _DWORD **v2; // edi unsigned int v4; // esi const char *v5; // eax v2 = this; if ( !a2 ) return 0; v4 = 0; if ( sub_464700(this[85]) <= 0 ) return 0; while ( 1 ) { v5 = (const char *)sub_4650C0(v2[85], v4, 2u); if ( v5 ) { if ( !strcmp(a2, v5) ) break; } if ( (signed int)++v4 >= sub_464700(v2[85]) ) return 0; } return 1; } //----- (0060D0C0) -------------------------------------------------------- int __thiscall sub_60D0C0(void *this) { return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)this + 256))(0); } //----- (0060D0D0) -------------------------------------------------------- int __thiscall sub_60D0D0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ebx int result; // eax char v5; // [esp+Ch] [ebp-4h] v2 = this; v5 = 0; if ( !a2 || a2 == 3 ) v5 = 1; if ( a2 && a2 != 1 && a2 != 2 ) { if ( a2 != 3 && a2 != 4 && a2 != 5 ) v3 = (_DWORD *)a2; else v3 = (_DWORD *)this[86]; } else { v3 = (_DWORD *)this[85]; } sub_466AF0(v3, a2, *((_BYTE *)this + a2 + 372), v5); result = sub_465130(v3); *((_BYTE *)v2 + a2 + 372) = *((_BYTE *)v2 + a2 + 372) == 0; return result; } //----- (0060D190) -------------------------------------------------------- int __thiscall sub_60D190(_DWORD **this, char a2) { _DWORD **v2; // esi signed int v4; // [esp-4h] [ebp-8h] int v5; // [esp+0h] [ebp-4h] v2 = this; if ( !a2 ) { v4 = 1; LABEL_3: (*(void (__stdcall **)(signed int, int))(*this[90] + 256))(v4, v5); return (*(int (__cdecl **)(_DWORD))(*v2[91] + 256))(0); } v4 = 0; if ( a2 != 1 ) goto LABEL_3; (*(void (__stdcall **)(_DWORD, int))(*this[90] + 256))(0, v5); return (*(int (__cdecl **)(signed int))(*v2[91] + 256))(1); } //----- (0060D1E0) -------------------------------------------------------- int __thiscall sub_60D1E0(_DWORD **this) { _DWORD **v1; // ebx _DWORD **v2; // esi signed int v3; // edi v1 = this; v2 = this + 85; v3 = 2; do { sub_466A50(*v2); ++v2; --v3; } while ( v3 ); (*(void (__stdcall **)(_DWORD))(*v1[90] + 256))(0); return (*(int (__stdcall **)(_DWORD))(*v1[91] + 256))(0); } //----- (0060D230) -------------------------------------------------------- void __thiscall sub_60D230(_BYTE *this, _DWORD *a2) { _BYTE *v2; // edi unsigned int v3; // eax const char *v4; // eax int v5; // edx char v6; // cl _DWORD *v7; // eax v2 = this; if ( a2 ) { v3 = sub_464F50(a2); v4 = (const char *)sub_4650C0(a2, v3, 2u); if ( strcmp(v4, (const char *)&unk_9EBE51) ) { v5 = v2 + 300 - v4; do { v6 = *v4; v4[v5] = *v4; ++v4; } while ( v6 ); v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_8EEE70(v7, 130, (int)(v2 + 300), 0); } } } //----- (0060D3B0) -------------------------------------------------------- LONG __thiscall sub_60D3B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &KingdomQuestWin::`vftable'; this[58] = &KingdomQuestWin::`vftable'; sub_7522D0(this + 633); `eh vector destructor iterator'(v1 + 132, 0x14u, 100, nullsub_6); v1[90] = &DropContents::`vftable'; v1[86] = &PgWinDrop::`vftable'; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9ECE70: using guessed type void *KingdomQuestWin::`vftable'; // 9ECE8C: using guessed type void *KingdomQuestWin::`vftable'; //----- (0060D450) -------------------------------------------------------- int __thiscall sub_60D450(_DWORD *this) { *(_DWORD *)(this[109] + 344) = *(_DWORD *)(this[113] + 300); return sub_465130((_DWORD *)this[109]); } //----- (0060D480) -------------------------------------------------------- int __thiscall sub_60D480(_DWORD *this) { *(_DWORD *)(this[108] + 344) = *(_DWORD *)(this[112] + 300); return sub_465130((_DWORD *)this[108]); } //----- (0060D4B0) -------------------------------------------------------- int __thiscall sub_60D4B0(_DWORD **this) { _DWORD **v1; // esi int *v2; // eax int v3; // edi float *v4; // eax int v5; // edi float *v6; // eax char v8; // [esp+8h] [ebp-10h] v1 = this; sub_4A5260(this[74]); v2 = v1[118]; *((_WORD *)v1 + 254) = 1; v3 = *v2; v4 = sub_419EE0((float *)&v8, 0xFFu, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(_DWORD *, float *))(v3 + 468))(v1[118], v4); v5 = *v1[119]; v6 = sub_419EE0((float *)&v8, 0xFFu, 0xFFu, 0xFFu, 0xFFu); return (*(int (__thiscall **)(_DWORD *, float *))(v5 + 468))(v1[119], v6); } //----- (0060D540) -------------------------------------------------------- void __thiscall sub_60D540(int this) { int v1; // esi unsigned int v2; // eax _DWORD *v3; // ecx unsigned int v4; // eax int v5; // ecx int v6; // [esp+8h] [ebp-4h] v1 = this; if ( !*(_BYTE *)(this + 115696) && (sub_464F50(*(_DWORD **)(this + 432)) & 0x80000000) == 0 ) { v2 = sub_464F50(*(_DWORD **)(v1 + 432)); sub_464B60(*(_DWORD **)(v1 + 432), v2, &v6); if ( v6 < *(_DWORD *)(v1 + 2532) ) { if ( *(_BYTE *)(377 * v6 + v1 + 2540) == 2 ) { *(_DWORD *)(v1 + 516) = *(_DWORD *)(377 * v6 + v1 + 2536); v3 = *(_DWORD **)(v1 + 432); *(_BYTE *)(v1 + 512) = 1; *(_DWORD *)(v1 + 504) = sub_464F50(v3); } sub_4B8E70(*(_DWORD **)(v1 + 296), *(_DWORD *)(v1 + 516)); v4 = sub_464F50(*(_DWORD **)(v1 + 432)); sub_464BE0(*(_DWORD **)(v1 + 432), v4, 255, 255, 0); sub_8D06A0((float *)(v1 + 115668), flt_ACCFCC); v5 = *(_DWORD *)(v1 + 456); *(float *)(v1 + 115688) = 5.0; *(_BYTE *)(v1 + 115696) = 1; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 240))(0); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0060D640) -------------------------------------------------------- char __thiscall sub_60D640(int this) { int v1; // esi int v2; // eax _DWORD *v3; // ecx v1 = this; if ( *(_BYTE *)(this + 512) ) { v2 = *(_DWORD *)(this + 516); if ( v2 != -1 ) { sub_4B8EB0(*(_DWORD **)(this + 296), *(_DWORD *)(this + 516)); v3 = *(_DWORD **)(v1 + 432); *(_DWORD *)(v1 + 516) = -1; *(_BYTE *)(v1 + 512) = 0; *(_DWORD *)(v1 + 504) = 0; LOBYTE(v2) = sub_464BE0(v3, 0, 0, 0, 0); } } *(_BYTE *)(v1 + 512) = 0; return v2; } //----- (0060D6A0) -------------------------------------------------------- __time32_t __thiscall sub_60D6A0(_BYTE *this, _DWORD *a2) { _BYTE *v2; // esi __time32_t result; // eax int v4; // ecx __time32_t Time; // [esp+4h] [ebp-4h] v2 = this; result = _time32(&Time); v4 = Time - *a2; v2[492] = 1; *((_DWORD *)v2 + 124) = v4; return result; } //----- (0060D6D0) -------------------------------------------------------- int __thiscall sub_60D6D0(void *this) { int result; // eax if ( byte_B6712C == 1 || byte_B6712C == 2 || dword_AD8EBC[1924] == 5 ) result = sub_60CCA0((int)this, 0); else result = sub_60CCA0((int)this, 1); return result; } // B6712C: using guessed type char byte_B6712C; //----- (0060D700) -------------------------------------------------------- char __thiscall sub_60D700(int this, char a2) { char result; // al result = a2; *(_BYTE *)(this + 115712) = a2; if ( !a2 ) *(float *)(this + 115716) = flt_ACCFCC; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0060D720) -------------------------------------------------------- int __thiscall sub_60D720(_DWORD *this) { int result; // eax int v2; // edx result = this[86]; v2 = 0; if ( result ) v2 = *(_DWORD *)(result + 300); if ( this[85] ) { *(_DWORD *)(this[85] + 344) = v2; result = sub_465130((_DWORD *)this[85]); } return result; } //----- (0060D760) -------------------------------------------------------- void __thiscall sub_60D760(int this) { int v1; // esi _DWORD *v2; // eax v1 = this; if ( *(_DWORD *)(this + 352) == -1 ) { sub_466A50(*(_DWORD **)(this + 340)); } else if ( *(_BYTE *)(this + 359) ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4BFEE0(v2, *(_DWORD *)(v1 + 352)); } } //----- (0060D7B0) -------------------------------------------------------- char __thiscall sub_60D7B0(int this, char a2) { char result; // al result = a2; *(_BYTE *)(this + 359) = a2; if ( !a2 ) *(float *)(this + 360) = flt_ACCFCC; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0060D800) -------------------------------------------------------- int __thiscall sub_60D800(_DWORD *this) { _DWORD *v1; // eax _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[86]; result = v1[88]; if ( result ) { if ( v2 ) { v2[86] = *(_DWORD *)(result + 300); result = sub_465130(v2); } } return result; } //----- (0060D830) -------------------------------------------------------- int __thiscall sub_60D830(_DWORD *this) { _DWORD *v1; // eax _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[85]; result = v1[87]; if ( result ) { if ( v2 ) { v2[86] = *(_DWORD *)(result + 300); result = sub_465130(v2); } } return result; } //----- (0060D860) -------------------------------------------------------- void __thiscall sub_60D860(int this) { int v1; // esi _DWORD *v2; // eax v1 = this; if ( *(_DWORD *)(this + 368) == -1 ) { sub_60D1E0((_DWORD **)this); } else if ( *(_BYTE *)(this + 378) ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4BFEE0(v2, *(_DWORD *)(v1 + 368)); } } //----- (0060D8A0) -------------------------------------------------------- char __thiscall sub_60D8A0(int this, char a2) { char result; // al result = a2; *(_BYTE *)(this + 378) = a2; if ( !a2 ) *(float *)(this + 380) = flt_ACCFCC; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0060D8C0) -------------------------------------------------------- _DWORD *__thiscall sub_60D8C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &KingdomQuestWin::`vftable'; v1[58] = &KingdomQuestWin::`vftable'; v1[86] = &PgWinDrop::`vftable'; v1[87] = 0; v1[88] = 0; v1[90] = &DropContents::`vftable'; *((_WORD *)v1 + 210) = -1; v1[106] = 0; `eh vector constructor iterator'(v1 + 132, 0x14u, 100, sub_6F72B0, nullsub_6); sub_752310(v1 + 633); sub_8D0610((_BYTE *)v1 + 115640); sub_8D0610((_BYTE *)v1 + 115668); *((float *)v1 + 28929) = 0.0; v1[129] = -1; v1[130] = -1; v1[131] = -1; *((_BYTE *)v1 + 115712) = 1; v1[125] = 3; v1[126] = 0; *((_BYTE *)v1 + 512) = 0; v1[632] = 0; v1[114] = 0; v1[120] = 0; v1[116] = 0; v1[117] = 0; v1[122] = 0; v1[124] = 0; v1[118] = 0; v1[119] = 0; v1[127] = 16777217; *((_BYTE *)v1 + 115696) = 0; v1[28925] = 0; v1[28926] = 0; v1[28927] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9ECE70: using guessed type void *KingdomQuestWin::`vftable'; // 9ECE8C: using guessed type void *KingdomQuestWin::`vftable'; //----- (0060DA30) -------------------------------------------------------- int __thiscall sub_60DA30(_DWORD *this) { _DWORD *v1; // esi int v2; // ST0C_4 int v3; // ST08_4 const char *v4; // eax int v6; // [esp+4h] [ebp-2Ch] __time32_t Time; // [esp+8h] [ebp-28h] char v8; // [esp+Ch] [ebp-24h] v1 = this; _time32(&Time); if ( *((_BYTE *)v1 + 492) == 1 ) { v6 = Time - v1[124]; _localtime32(&v6); } else { _localtime32(&Time); } v2 = dword_ACCFAC; v3 = dword_ACCFB0; v4 = sub_40C190(877174667); sprintf(&v8, v4, v3, v2); return (*(int (__stdcall **)(char *))(*(_DWORD *)v1[122] + 472))(&v8); } // ACCFAC: using guessed type int dword_ACCFAC; // ACCFB0: using guessed type int dword_ACCFB0; //----- (0060DAD0) -------------------------------------------------------- const CHAR *__stdcall sub_60DAD0(int a1) { const CHAR *result; // eax switch ( a1 ) { case 0: result = sub_40C190(-1615681323); break; case 1: result = sub_40C190(-1615681322); break; case 2: result = sub_40C190(-1615681321); break; case 3: result = sub_40C190(-1615681320); break; case 4: result = sub_40C190(-1615681319); break; case 5: result = sub_40C190(-1615681318); break; case 6: result = sub_40C190(-1615681317); break; case 7: result = sub_40C190(-1615681316); break; case 8: result = sub_40C190(-1615681315); break; case 9: result = sub_40C190(-1615681314); break; case 10: result = sub_40C190(-1615669034); break; default: result = 0; break; } return result; } //----- (0060DBE0) -------------------------------------------------------- void __thiscall sub_60DBE0(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 0: (*(void (**)(void))(*this + 360))(); break; case 1: sub_60D720(this); break; case 2: sub_60D760((int)this); break; case 3: sub_60CE90((int)this, a3); break; case 4: sub_60CF00((_DWORD **)this); break; default: return; } } //----- (0060DC40) -------------------------------------------------------- int __thiscall sub_60DC40(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // edi const CHAR *v4; // eax v1 = this; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { if ( *(_DWORD *)(result + 5080) == 1 ) { v3 = *v1[87]; v4 = sub_40A910(-254923213); } else { v3 = *v1[87]; v4 = sub_40A910(696021910); } (*(void (__thiscall **)(_DWORD *, const CHAR *))(v3 + 472))(v1[87], v4); result = sub_465130(v1[85]); } return result; } //----- (0060DCB0) -------------------------------------------------------- void __thiscall sub_60DCB0(int this, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // eax switch ( a2 ) { case 0: (*(void (**)(void))(*(_DWORD *)this + 360))(); break; case 1: sub_60D830((_DWORD *)this); break; case 2: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4C0620(v3, 0); break; case 3: if ( *(_DWORD *)(this + 340) ) sub_60D230((_BYTE *)this, *(_DWORD **)(this + 340)); break; case 4: sub_60D800((_DWORD *)this); break; case 5: v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) sub_4C0620(v4, 1); break; case 6: if ( *(_DWORD *)(this + 344) ) sub_60D230((_BYTE *)this, *(_DWORD **)(this + 344)); break; case 7: sub_60D860(this); break; case 8: sub_60D0D0((_DWORD *)this, a3); break; default: return; } } //----- (0060DD90) -------------------------------------------------------- int __thiscall sub_60DD90(_DWORD **this) { _DWORD **v1; // esi int result; // eax int v3; // edi const CHAR *v4; // eax _DWORD **v5; // esi signed int v6; // edi v1 = this; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { if ( *(_DWORD *)(result + 5080) == 1 ) { v3 = *v1[89]; v4 = sub_40A910(-254923213); } else { v3 = *v1[89]; v4 = sub_40A910(696021910); } (*(void (__thiscall **)(_DWORD *, const CHAR *))(v3 + 472))(v1[89], v4); v5 = v1 + 85; v6 = 2; do { result = sub_465130(*v5); ++v5; --v6; } while ( v6 ); } return result; } //----- (0060DE00) -------------------------------------------------------- void __thiscall sub_60DE00(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx int v3; // esi int v4; // edi signed int v5; // esi int v6; // eax bool v7; // zf bool v8; // sf unsigned __int8 *v9; // edi int v10; // esi int v11; // ST08_4 char *v12; // eax int v13; // esi signed int v14; // edi int v15; // esi int v16; // eax CHAR *v17; // eax int v18; // eax _DWORD *v19; // ecx int v20; // eax int v21; // eax char v22; // [esp+4h] [ebp-140h] int v23; // [esp+8h] [ebp-13Ch] int v24; // [esp+Ch] [ebp-138h] int v25; // [esp+28h] [ebp-11Ch] int v26; // [esp+2Ch] [ebp-118h] int v27; // [esp+30h] [ebp-114h] int v28; // [esp+34h] [ebp-110h] int v29; // [esp+38h] [ebp-10Ch] unsigned __int8 *v30; // [esp+3Ch] [ebp-108h] char v31; // [esp+40h] [ebp-104h] v1 = this; v2 = (_DWORD *)this[108]; if ( v2 ) { sub_466A50(v2); if ( !*((_BYTE *)v1 + 511) ) { sub_4638F0((_DWORD *)v1[112], 0); v3 = v1[108]; *(float *)(v3 + 340) = 0.0; *(_DWORD *)(v3 + 344) = (signed int)((double)*(signed int *)(v3 + 336) * 0.0); *(_DWORD *)(v1[108] + 344) = 0; } v4 = -1; v5 = -1; v28 = -1; v27 = -1; v6 = sub_680890((unsigned __int8 *)byte_AD9238); v7 = v1[633] == 0; v8 = v1[633] < 0; v25 = v6; v29 = 0; if ( !v8 && !v7 ) { v9 = (unsigned __int8 *)v1 + 2654; v30 = (unsigned __int8 *)v1 + 2654; while ( 1 ) { if ( v9 != (unsigned __int8 *)118 && v6 >= *(v9 - 1) && v6 <= *v9 ) { v10 = ((int (__thiscall *)(_DWORD, unsigned __int8 *))loc_466CA0)(v1[108], v9 - 109); v11 = *(unsigned __int16 *)(v9 - 113); v26 = v10; v12 = _itoa(v11, &v31, 10); sub_4661A0((_DWORD *)v1[108], v10, 1, v12); if ( *(_DWORD *)(v9 - 43) == -1 ) { sprintf(&v31, "%02d:%02d", 2, 5); } else { qmemcpy(&v22, v9 - 39, 0x24u); v13 = v23; v14 = v24; sprintf(&v31, "%02d:%02d", v24, v23); v15 = *(unsigned __int16 *)(v30 - 3) + v13; v23 = v15; if ( v15 > 59 ) { ++v14; v15 += 60 * (((signed int)(((unsigned __int64)(2004318071i64 * v15) >> 32) - v15) >> 5) + ((unsigned int)(((unsigned __int64)(2004318071i64 * v15) >> 32) - v15) >> 31)); v23 = v15; v24 = v14; if ( v14 == 25 ) { v14 = 1; v24 = 1; } } sprintf(&v31, "%s ~ %02d:%02d", &v31, v14, v15); v9 = v30; v10 = v26; } v16 = *(_DWORD *)(v9 - 118); if ( v16 == v1[130] ) v28 = v10; if ( v16 == v1[129] ) v27 = v10; sub_4661A0((_DWORD *)v1[108], v10, 2, &v31); v17 = (CHAR *)sub_60DAD0(*(v9 - 114)); sub_4661A0((_DWORD *)v1[108], v10, 3, v17); sub_464B20((_DWORD *)v1[108], v10, v29); v18 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v18 ) { v19 = (_DWORD *)v1[108]; if ( *(_DWORD *)(v18 + 5080) == 1 ) { sub_464F90(v19, -1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[108] + 240))(0); sub_464BE0((_DWORD *)v1[108], v10, 128, 128, 128); } else { (*(void (__stdcall **)(signed int))(*v19 + 240))(1); sub_464BE0((_DWORD *)v1[108], v10, 255, 255, 255); } } } v9 += 377; ++v29; v30 = v9; if ( v29 >= v1[633] ) break; v6 = v25; } v5 = v27; v4 = v28; } v20 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v20 && *(_DWORD *)(v20 + 5080) != 1 && v4 > -1 ) sub_464F90((_DWORD *)v1[108], v4); *((_BYTE *)v1 + 512) = 0; v21 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v21 && *(_DWORD *)(v21 + 5080) != 1 && v5 > -1 ) { sub_464BE0((_DWORD *)v1[108], v5, 255, 255, 0); *((_BYTE *)v1 + 512) = 1; v1[126] = v5; } sub_466AF0((_DWORD *)v1[108], v1[125], 0, 0); sub_465130((_DWORD *)v1[108]); sub_4638F0((_DWORD *)v1[112], *(_DWORD *)(v1[108] + 336)); *((_BYTE *)v1 + 511) = 1; } } //----- (0060E1D0) -------------------------------------------------------- void __thiscall sub_60E1D0(int this) { int v1; // ebx _DWORD *v2; // ecx int v3; // esi signed int v4; // edi bool v5; // zf bool v6; // sf unsigned __int16 *v7; // esi int v8; // edi int v9; // ST08_4 char *v10; // eax int v11; // esi signed int v12; // edi int v13; // esi int v14; // eax CHAR *v15; // eax char v16; // [esp+4h] [ebp-13Ch] int v17; // [esp+8h] [ebp-138h] int v18; // [esp+Ch] [ebp-134h] int v19; // [esp+28h] [ebp-118h] int v20; // [esp+2Ch] [ebp-114h] int v21; // [esp+30h] [ebp-110h] int v22; // [esp+34h] [ebp-10Ch] unsigned __int16 *v23; // [esp+38h] [ebp-108h] char v24; // [esp+3Ch] [ebp-104h] v1 = this; if ( *(_BYTE *)(this + 508) ) { sub_60DE00((_DWORD *)this); } else { v2 = *(_DWORD **)(this + 432); if ( v2 ) { sub_466A50(v2); if ( !*(_BYTE *)(v1 + 511) ) { sub_4638F0(*(_DWORD **)(v1 + 448), 0); v3 = *(_DWORD *)(v1 + 432); *(float *)(v3 + 340) = 0.0; *(_DWORD *)(v3 + 344) = (signed int)((double)*(signed int *)(v3 + 336) * 0.0); *(_DWORD *)(*(_DWORD *)(v1 + 432) + 344) = 0; } v4 = -1; v5 = *(_DWORD *)(v1 + 2532) == 0; v6 = *(_DWORD *)(v1 + 2532) < 0; v21 = -1; v20 = -1; v22 = 0; if ( !v6 && !v5 ) { v7 = (unsigned __int16 *)(v1 + 2541); v23 = (unsigned __int16 *)(v1 + 2541); do { if ( v7 != (unsigned __int16 *)5 ) { v8 = ((int (__thiscall *)(_DWORD, unsigned __int16 *))loc_466CA0)(*(_DWORD *)(v1 + 432), v7 + 2); v9 = *v7; v19 = v8; v10 = _itoa(v9, &v24, 10); sub_4661A0(*(_DWORD **)(v1 + 432), v8, 1, v10); if ( *(_DWORD *)(v7 + 35) == -1 ) { sprintf(&v24, "%02d:%02d", 2, 5); } else { qmemcpy(&v16, v7 + 37, 0x24u); v11 = v17; v12 = v18; sprintf(&v24, "%02d:%02d", v18, v17); v13 = v23[55] + v11; v17 = v13; if ( v13 > 59 ) { ++v12; v13 += 60 * (((signed int)(((unsigned __int64)(2004318071i64 * v13) >> 32) - v13) >> 5) + ((unsigned int)(((unsigned __int64)(2004318071i64 * v13) >> 32) - v13) >> 31)); v17 = v13; v18 = v12; if ( v12 == 25 ) { v12 = 1; v18 = 1; } } sprintf(&v24, "%s ~ %02d:%02d", &v24, v12, v13); v7 = v23; v8 = v19; } v14 = *(_DWORD *)((char *)v7 - 5); if ( v14 == *(_DWORD *)(v1 + 520) ) v21 = v8; if ( v14 == *(_DWORD *)(v1 + 516) ) v20 = v8; sub_4661A0(*(_DWORD **)(v1 + 432), v8, 2, &v24); v15 = (CHAR *)sub_60DAD0(*((unsigned __int8 *)v7 - 1)); sub_4661A0(*(_DWORD **)(v1 + 432), v8, 3, v15); sub_464B20(*(_DWORD **)(v1 + 432), v8, v22); v4 = v20; } v7 = (unsigned __int16 *)((char *)v7 + 377); ++v22; v23 = v7; } while ( v22 < *(_DWORD *)(v1 + 2532) ); if ( v21 > -1 ) sub_464F90(*(_DWORD **)(v1 + 432), v21); } *(_BYTE *)(v1 + 512) = 0; if ( v4 > -1 ) { sub_464BE0(*(_DWORD **)(v1 + 432), v4, 255, 255, 0); *(_BYTE *)(v1 + 512) = 1; *(_DWORD *)(v1 + 504) = v4; } sub_466AF0(*(_DWORD **)(v1 + 432), *(_DWORD *)(v1 + 500), 0, 0); sub_465130(*(_DWORD **)(v1 + 432)); sub_4638F0(*(_DWORD **)(v1 + 448), *(_DWORD *)(*(_DWORD *)(v1 + 432) + 336)); *(_BYTE *)(v1 + 511) = 1; } } } //----- (0060E4D0) -------------------------------------------------------- void __thiscall sub_60E4D0(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi char v3; // bl char v4; // bl v2 = this; if ( this[28926] && this[28925] ) { if ( a2 <= 1 ) { v4 = (*(int (**)(void))(*this[28925] + 260))(); (*(void (__stdcall **)(_DWORD))(*v2[28926] + 256))(0); (*(void (__stdcall **)(bool))(*v2[28925] + 256))(v4 == 0); if ( !v4 && (*(unsigned __int8 (**)(void))(*v2[28925] + 260))() && *((_BYTE *)v2 + 115712) ) { sub_4BFEE0(v2[74], (int)v2[130]); sub_60DC40((_DWORD **)v2[28925]); } } else if ( a2 == 2 ) { v3 = (*(int (**)(void))(*this[28926] + 260))(); (*(void (__stdcall **)(_DWORD))(*v2[28925] + 256))(0); (*(void (__stdcall **)(bool))(*v2[28926] + 256))(v3 == 0); if ( !v3 ) { if ( *((_BYTE *)v2 + 115712) ) { sub_4BFEE0(v2[74], (int)v2[130]); sub_60DD90((_DWORD **)v2[28926]); } } } } } //----- (0060E600) -------------------------------------------------------- void __thiscall sub_60E600(int *this) { int *v1; // esi unsigned int v2; // edi int v3; // eax int v4; // eax v1 = this; if ( this[28925] && this[28926] ) { v2 = 0; v3 = sub_752110(this + 633, this[130]); if ( v3 ) { v4 = sub_613DD0(*(_WORD *)(v3 + 7)); if ( v4 ) v2 = *(unsigned __int16 *)(v4 + 4); } sub_60E4D0((_DWORD **)v1, v2); } } //----- (0060E650) -------------------------------------------------------- void __thiscall sub_60E650(_DWORD *this, unsigned __int8 *a2) { _DWORD *v2; // edi int *v3; // eax int v4; // edx int v5; // ecx int v6; // edx int v7; // eax int v8; // ecx int v9; // edx int v10; // eax int v11; // ecx int v12; // edx int v13; // eax unsigned int v14; // esi char *v15; // eax int v16; // eax CHAR *v17; // eax const char *v18; // eax int v19; // [esp+8h] [ebp-34h] int v20; // [esp+Ch] [ebp-30h] int v21; // [esp+10h] [ebp-2Ch] int v22; // [esp+14h] [ebp-28h] int v23; // [esp+18h] [ebp-24h] char v24; // [esp+1Ch] [ebp-20h] int v25; // [esp+20h] [ebp-1Ch] int v26; // [esp+24h] [ebp-18h] int v27; // [esp+28h] [ebp-14h] int v28; // [esp+2Ch] [ebp-10h] int v29; // [esp+30h] [ebp-Ch] char v30; // [esp+34h] [ebp-8h] v2 = this; if ( this[85] ) { v3 = (int *)sub_680810(byte_AD9238); v4 = v3[1]; v19 = *v3; v5 = v3[2]; v20 = v4; v6 = v3[3]; v7 = v3[4]; v21 = v5; v8 = *(_DWORD *)(a2 + 2); v22 = v6; v9 = *(_DWORD *)(a2 + 6); v23 = v7; v10 = *(_DWORD *)(a2 + 10); v25 = v8; v11 = *(_DWORD *)(a2 + 14); v26 = v9; v12 = *(_DWORD *)(a2 + 18); v27 = v10; v24 = 0; v28 = v11; v29 = v12; v30 = 0; if ( !strcmp((const char *)&v25, (const char *)&v19) ) v13 = ((int (__thiscall *)(_DWORD, int *))loc_466DE0)(v2[85], &v25); else v13 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v2[85], &v25); v14 = v13; v15 = sub_7549E0("%d", *a2); sub_4661A0((_DWORD *)v2[85], v14, 0, v15); v16 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), a2[1]); if ( v16 ) v17 = (CHAR *)(v16 + 21); else v17 = (CHAR *)&byte_9A8050; sub_4661A0((_DWORD *)v2[85], v14, 1, v17); sub_4661A0((_DWORD *)v2[85], v14, 2, &v25); sub_464BE0((_DWORD *)v2[85], v14, 255, 255, 255); sub_464BA0((_DWORD *)v2[85], v14, 1); v18 = sub_40A910(-597671402); sub_464760((_DWORD *)v2[85], v14, v18); } } // AC9C84: using guessed type int dword_AC9C84; //----- (0060E7D0) -------------------------------------------------------- void __userpurge sub_60E7D0(int a1@, int a2@, unsigned __int8 *a3) { int v3; // esi unsigned int v4; // eax _DWORD *v5; // ecx unsigned __int8 v6; // al signed int v7; // ebx int *v8; // eax int v9; // edx int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx int v14; // edx int v15; // eax int v16; // ecx int v17; // edx int v18; // edi unsigned __int8 v19; // al int v20; // edx void (__cdecl *v21)(signed int); // eax bool v22; // zf char *v23; // eax int v24; // eax CHAR *v25; // eax const char *v26; // eax int v27; // [esp-4h] [ebp-44h] signed int v28; // [esp-4h] [ebp-44h] int v29; // [esp+Ch] [ebp-34h] int v30; // [esp+10h] [ebp-30h] int v31; // [esp+14h] [ebp-2Ch] int v32; // [esp+18h] [ebp-28h] int v33; // [esp+1Ch] [ebp-24h] char v34; // [esp+20h] [ebp-20h] int v35; // [esp+24h] [ebp-1Ch] int v36; // [esp+28h] [ebp-18h] int v37; // [esp+2Ch] [ebp-14h] int v38; // [esp+30h] [ebp-10h] int v39; // [esp+34h] [ebp-Ch] char v40; // [esp+38h] [ebp-8h] v3 = a1; v4 = 0; v5 = (_DWORD *)(a1 + 340); while ( *v5 ) { ++v4; ++v5; if ( v4 >= 2 ) { v6 = a3[22]; v27 = a2; v7 = -1; switch ( v6 ) { case 2u: return; case 1u: v7 = 0; break; case 0u: v7 = 1; break; } v8 = (int *)sub_680810(byte_AD9238); v9 = v8[1]; v29 = *v8; v10 = v8[2]; v30 = v9; v11 = v8[3]; v12 = v8[4]; v31 = v10; v13 = *(_DWORD *)(a3 + 2); v32 = v11; v14 = *(_DWORD *)(a3 + 6); v33 = v12; v15 = *(_DWORD *)(a3 + 10); v35 = v13; v16 = *(_DWORD *)(a3 + 14); v36 = v14; v17 = *(_DWORD *)(a3 + 18); v37 = v15; v34 = 0; v38 = v16; v39 = v17; v40 = 0; if ( !strcmp((const char *)&v35, (const char *)&v29) ) { v18 = ((int (__thiscall *)(_DWORD, int *, int))loc_466DE0)(*(_DWORD *)(v3 + 4 * v7 + 340), &v35, v27); v19 = a3[22]; v20 = **(_DWORD **)(v3 + 360); if ( !v19 ) { v21 = *(void (__cdecl **)(signed int))(v20 + 256); v28 = 1; goto LABEL_12; } v22 = v19 == 1; v21 = *(void (__cdecl **)(signed int))(v20 + 256); v28 = 0; if ( v22 ) { v21(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 364) + 256))(1); } else { LABEL_12: v21(v28); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 364) + 256))(0); } } else { v18 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(*(_DWORD *)(v3 + 4 * v7 + 340), &v35); } v23 = sub_7549E0("%d", *a3); sub_4661A0(*(_DWORD **)(v3 + 4 * v7 + 340), v18, 0, v23); v24 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), a3[1]); if ( v24 ) v25 = (CHAR *)(v24 + 21); else v25 = (CHAR *)&byte_9A8050; sub_4661A0(*(_DWORD **)(v3 + 4 * v7 + 340), v18, 1, v25); sub_4661A0(*(_DWORD **)(v3 + 4 * v7 + 340), v18, 2, &v35); sub_464BE0(*(_DWORD **)(v3 + 4 * v7 + 340), v18, 255, 255, 255); sub_464BA0(*(_DWORD **)(v3 + 4 * v7 + 340), v18, 1); v26 = sub_40A910(-597671402); sub_464760(*(_DWORD **)(v3 + 4 * v7 + 340), v18, v26); return; } } } // 60E7D0: could not find valid save-restore pair for ebx // AC9C84: using guessed type int dword_AC9C84; //----- (0060E9E0) -------------------------------------------------------- void __thiscall sub_60E9E0(_DWORD *this, int a2) { int v2; // edx signed int v3; // eax _DWORD *v4; // ecx int v5; // ecx int v6; // eax int v7; // ecx int v8; // eax _DWORD **v9; // edi unsigned int v10; // esi _DWORD *v11; // eax char *v12; // edx char v13; // cl int v14; // eax _DWORD *v15; // ecx const char *v16; // eax char v17; // al _DWORD *v18; // ecx const char *v19; // eax char v20; // al _DWORD *v21; // ecx char *v22; // eax char *v23; // edx char v24; // cl _DWORD *v25; // ecx int v26; // [esp+8h] [ebp-ECh] char v27; // [esp+10h] [ebp-E4h] char v28; // [esp+11h] [ebp-E3h] int v29; // [esp+12h] [ebp-E2h] int v30; // [esp+16h] [ebp-DEh] int v31; // [esp+1Ah] [ebp-DAh] int v32; // [esp+1Eh] [ebp-D6h] int v33; // [esp+22h] [ebp-D2h] char v34; // [esp+26h] [ebp-CEh] int v35; // [esp+28h] [ebp-CCh] unsigned int v36; // [esp+2Ch] [ebp-C8h] char v37[4]; // [esp+30h] [ebp-C4h] int v38; // [esp+34h] [ebp-C0h] int v39; // [esp+38h] [ebp-BCh] int v40; // [esp+3Ch] [ebp-B8h] int v41; // [esp+40h] [ebp-B4h] char v42[128]; // [esp+44h] [ebp-B0h] int v43; // [esp+C4h] [ebp-30h] int v44; // [esp+C8h] [ebp-2Ch] int v45; // [esp+CCh] [ebp-28h] int v46; // [esp+D0h] [ebp-24h] int v47; // [esp+D4h] [ebp-20h] char v48; // [esp+D8h] [ebp-1Ch] char v49[4]; // [esp+DCh] [ebp-18h] int v50; // [esp+E0h] [ebp-14h] int v51; // [esp+E4h] [ebp-10h] int v52; // [esp+E8h] [ebp-Ch] int v53; // [esp+ECh] [ebp-8h] v2 = (int)(this + 85); v26 = (int)this; v3 = 0; v4 = this + 85; while ( *v4 ) { ++v3; ++v4; if ( v3 >= 2 ) { v5 = *(_DWORD *)(a2 + 4); v43 = *(_DWORD *)a2; v6 = *(_DWORD *)(a2 + 8); v44 = v5; v7 = *(_DWORD *)(a2 + 12); v45 = v6; v8 = *(_DWORD *)(a2 + 16); v33 = 0; v32 = 0; v31 = 0; v30 = 0; v29 = 0; v46 = v7; v47 = v8; v48 = 0; v42[0] = 0; v9 = (_DWORD **)v2; v35 = 2; do { v10 = 0; if ( sub_464700(*v9) ) { while ( 1 ) { v11 = sub_4650C0(*v9, v10, 2u); v12 = (char *)(v42 - (char *)v11); do { v13 = *(_BYTE *)v11; *((_BYTE *)v11 + (_DWORD)v12) = *(_BYTE *)v11; v11 = (_DWORD *)((char *)v11 + 1); } while ( v13 ); v14 = strcmp(v42, (const char *)&v43); v15 = *v9; if ( !v14 ) break; if ( ++v10 >= sub_464700(v15) ) goto LABEL_16; } v36 = v10; v16 = (const char *)sub_4650C0(v15, v10, 0); v17 = atoi(v16); v18 = *v9; v27 = v17; v19 = (const char *)sub_4650C0(v18, v10, 1u); v20 = sub_613E60(v19); v21 = *v9; v28 = v20; v41 = 0; v40 = 0; v39 = 0; v38 = 0; *(_DWORD *)v37 = 0; v22 = (char *)sub_4650C0(v21, v10, 2u); if ( strlen(v22) < 0x13 ) { *(_DWORD *)v49 = 0; v50 = 0; v51 = 0; v52 = 0; v53 = 0; v23 = (char *)(v49 - v22); do { v24 = *v22; v22[(_DWORD)v23] = *v22; ++v22; } while ( v24 ); v41 = 0; v40 = 0; v39 = 0; v38 = 0; *(_DWORD *)v37 = 0; strncpy(v37, v49, 0x14u); } v30 = v38; v29 = *(_DWORD *)v37; v33 = v41; v31 = v39; v32 = v40; v25 = *v9; v34 = *(_BYTE *)(a2 + 20); sub_4665D0(v25, v36); } LABEL_16: ++v9; --v35; } while ( v35 ); sub_60E7D0(v26, 0, (unsigned __int8 *)&v27); return; } } } // 60E9E0: using guessed type char var_B0[128]; //----- (0060EC40) -------------------------------------------------------- void __thiscall sub_60EC40(int *this, _WORD *a2) { int v2; // esi v2 = (int)this; if ( a2 ) { sub_752150(this + 633, a2); sub_60E1D0(v2); } } //----- (0060EC70) -------------------------------------------------------- void __thiscall sub_60EC70(_DWORD *this, _WORD *a2) { int v2; // esi v2 = (int)this; if ( a2 ) { sub_7521F0(this + 633, a2); sub_60E1D0(v2); } } //----- (0060ECA0) -------------------------------------------------------- void __thiscall sub_60ECA0(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // edi float *v4; // eax int v5; // edi float *v6; // eax char v7; // [esp+8h] [ebp-10h] v1 = this; v2 = (int *)this[118]; *((_WORD *)v1 + 254) = 1; *((_BYTE *)v1 + 511) = 0; v3 = *v2; v4 = sub_419EE0((float *)&v7, 0xFFu, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v3 + 468))(v1[118], v4); v5 = *(_DWORD *)v1[119]; v6 = sub_419EE0((float *)&v7, 0xFFu, 0xFFu, 0xFFu, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v5 + 468))(v1[119], v6); sub_60DE00(v1); } //----- (0060ED40) -------------------------------------------------------- void __thiscall sub_60ED40(_DWORD *this) { int v1; // esi int *v2; // ecx int v3; // edi float *v4; // eax int v5; // edi float *v6; // eax char v7; // [esp+8h] [ebp-10h] v1 = (int)this; v2 = (int *)this[119]; *(_WORD *)(v1 + 508) = 256; *(_BYTE *)(v1 + 511) = 0; v3 = *v2; v4 = sub_419EE0((float *)&v7, 0xFFu, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v3 + 468))(*(_DWORD *)(v1 + 476), v4); v5 = **(_DWORD **)(v1 + 472); v6 = sub_419EE0((float *)&v7, 0xFFu, 0xFFu, 0xFFu, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))(v5 + 468))(*(_DWORD *)(v1 + 472), v6); sub_60E1D0(v1); } //----- (0060EDE0) -------------------------------------------------------- volatile LONG *__cdecl sub_60EDE0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C408u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_60D8C0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0060EF10) -------------------------------------------------------- volatile LONG *__cdecl sub_60EF10(int a1, int *a2) { void *v2; // eax volatile LONG *v3; // esi int *v4; // edi volatile LONG *result; // eax int v6; // [esp-8h] [ebp-28h] int *v7; // [esp-4h] [ebp-24h] void *v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v9 = 0; v2 = operator new(0x16Cu); v8 = v2; LOBYTE(v9) = 1; if ( v2 ) v3 = (volatile LONG *)sub_60CE10((float *)v2); else v3 = 0; v8 = (void *)v3; if ( v3 ) InterlockedIncrement(v3 + 1); LOBYTE(v9) = 2; sub_403790(&unk_BA6B10, (int)v3); v7 = a2; v6 = a1; a2 = &v6; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int *))(*v3 + 516))(v3, v6, v7) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) && a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &a2, v3); if ( a2 ) { v4 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v4 ) (*(void (__thiscall **)(int *, signed int))*v4)(v4, 1); } } LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) ) { if ( a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); } result = 0; } return result; } //----- (0060F0A0) -------------------------------------------------------- volatile LONG *__cdecl sub_60F0A0(int a1, int *a2) { volatile LONG *v2; // eax volatile LONG *v3; // esi int *v4; // edi volatile LONG *result; // eax int v6; // [esp-8h] [ebp-28h] int *v7; // [esp-4h] [ebp-24h] void *v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v9 = 0; v2 = (volatile LONG *)operator new(0x180u); v3 = v2; v8 = (void *)v2; LOBYTE(v9) = 1; if ( v2 ) { sub_8F3C20(v2); *v3 = (volatile LONG)&KingdomQuestTeamList::`vftable'; *((_DWORD *)v3 + 58) = &KingdomQuestTeamList::`vftable'; *((_DWORD *)v3 + 93) = 0; *((_WORD *)v3 + 188) = 0; *((float *)v3 + 95) = 0.0; *((_DWORD *)v3 + 74) = 0; *((_BYTE *)v3 + 300) = 0; *((_DWORD *)v3 + 89) = 0; *((_BYTE *)v3 + 378) = 1; } else { v3 = 0; } v8 = (void *)v3; if ( v3 ) InterlockedIncrement(v3 + 1); LOBYTE(v9) = 2; sub_403790(&unk_BA6B10, (int)v3); v7 = a2; v6 = a1; a2 = &v6; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int *))(*v3 + 516))(v3, v6, v7) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) && a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &a2, v3); if ( a2 ) { v4 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v4 ) (*(void (__thiscall **)(int *, signed int))*v4)(v4, 1); } } LOBYTE(v9) = 0; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); v9 = -1; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) ) { if ( a1 ) (**(void (__thiscall ***)(int, signed int))a1)(a1, 1); } result = 0; } return result; } // 9ECC48: using guessed type void *KingdomQuestTeamList::`vftable'; // 9ECC64: using guessed type void *KingdomQuestTeamList::`vftable'; //----- (0060F270) -------------------------------------------------------- void __thiscall sub_60F270(int this, float a2) { int v2; // esi double v3; // st7 void *v4; // [esp-1Ch] [ebp-24h] int v5; // [esp-18h] [ebp-20h] int v6; // [esp-14h] [ebp-1Ch] int v7; // [esp-10h] [ebp-18h] int v8; // [esp-Ch] [ebp-14h] int v9; // [esp-8h] [ebp-10h] int v10; // [esp-4h] [ebp-Ch] void **v11; // [esp+4h] [ebp-4h] float v12; // [esp+10h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 115712) != 1 ) { v3 = a2 - *(float *)(this + 115716); v11 = &v4; v9 = 15; v12 = v3; v8 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, "KQPlayerList_ResetListCoolTime", 0x1Eu); if ( (double)(unsigned __int16)sub_747F30(&unk_ACDC6C, v4, v5, v6, v7, v8, v9, v10) <= v12 ) *(_BYTE *)(v2 + 115712) = 1; } } //----- (0060F2E0) -------------------------------------------------------- void __thiscall sub_60F2E0(int this, float a2) { int v2; // esi double v3; // st7 void *v4; // [esp-1Ch] [ebp-24h] int v5; // [esp-18h] [ebp-20h] int v6; // [esp-14h] [ebp-1Ch] int v7; // [esp-10h] [ebp-18h] int v8; // [esp-Ch] [ebp-14h] int v9; // [esp-8h] [ebp-10h] int v10; // [esp-4h] [ebp-Ch] void **v11; // [esp+4h] [ebp-4h] float v12; // [esp+10h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 359) != 1 ) { v3 = a2 - *(float *)(this + 360); v11 = &v4; v9 = 15; v12 = v3; v8 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, "KQPlayerList_ResetListCoolTime", 0x1Eu); if ( (double)(unsigned __int16)sub_747F30(&unk_ACDC6C, v4, v5, v6, v7, v8, v9, v10) <= v12 ) *(_BYTE *)(v2 + 359) = 1; } } //----- (0060F350) -------------------------------------------------------- void __thiscall sub_60F350(int this, float a2) { int v2; // esi double v3; // st7 void *v4; // [esp-1Ch] [ebp-24h] int v5; // [esp-18h] [ebp-20h] int v6; // [esp-14h] [ebp-1Ch] int v7; // [esp-10h] [ebp-18h] int v8; // [esp-Ch] [ebp-14h] int v9; // [esp-8h] [ebp-10h] int v10; // [esp-4h] [ebp-Ch] void **v11; // [esp+4h] [ebp-4h] float v12; // [esp+10h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 378) != 1 ) { v3 = a2 - *(float *)(this + 380); v11 = &v4; v9 = 15; v12 = v3; v8 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, "KQPlayerList_ResetListCoolTime", 0x1Eu); if ( (double)(unsigned __int16)sub_747F30(&unk_ACDC6C, v4, v5, v6, v7, v8, v9, v10) <= v12 ) *(_BYTE *)(v2 + 378) = 1; } } //----- (0060F3C0) -------------------------------------------------------- void __thiscall sub_60F3C0(int this, float a2) { int v2; // esi _DWORD *v3; // ecx v2 = this; if ( !(*(_BYTE *)(this + 28) & 1) && sub_8D0630((float *)(this + 115640), a2) ) { v3 = *(_DWORD **)(v2 + 296); *(_BYTE *)(v2 + 511) = 1; sub_4B8E30(v3); } sub_60DA30((_DWORD *)v2); if ( *(_BYTE *)(v2 + 115696) ) { if ( *(_BYTE *)(v2 + 28) & 1 || !sub_8D0630((float *)(v2 + 115668), a2) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 456) + 240))(0); } else { *(_BYTE *)(v2 + 115696) = 0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 456) + 240))(1); } } if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { sub_4E3710(*(_DWORD **)(v2 + 436), *(_DWORD **)(v2 + 452)); sub_4E3710(*(_DWORD **)(v2 + 432), *(_DWORD **)(v2 + 448)); } sub_60F270(v2, a2); } //----- (0060F4A0) -------------------------------------------------------- void __thiscall sub_60F4A0(void *this, float a2) { sub_60F2E0((int)this, a2); } //----- (0060F4C0) -------------------------------------------------------- void __thiscall sub_60F4C0(void *this, float a2) { sub_60F350((int)this, a2); } //----- (0060F4E0) -------------------------------------------------------- void __thiscall sub_60F4E0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // ecx unsigned int v4; // eax int v5; // edx int v6; // esi int v7; // ST18_4 const char *v8; // eax int v9; // esi int v10; // ecx char *v11; // eax int v12; // ST18_4 char *v13; // ST14_4 const char *v14; // eax int v15; // eax int v16; // ST18_4 int v17; // edi const char *v18; // eax int v19; // ST18_4 int v20; // ST14_4 const char *v21; // eax int v22; // edi const CHAR *v23; // eax int v24; // ST18_4 int v25; // ST14_4 const char *v26; // eax char v27; // al int v28; // edi int v29; // ecx int *v30; // esi int v31; // edx int v32; // ecx unsigned int v33; // eax int v34; // edx char *v35; // edi const char *v36; // eax _DWORD *v37; // eax _DWORD *v38; // ecx char *v39; // eax int v40; // esi int v41; // eax signed int v42; // ecx double v43; // st7 char *v44; // eax int v45; // edx double v46; // st7 const CHAR *v47; // eax int v48; // edi char v49; // al int v50; // edi void *v51; // eax _BYTE *v52; // eax void *v53; // eax int v54; // edi int v55; // eax signed int v56; // esi _DWORD *v57; // ecx int v58; // [esp+14h] [ebp-368h] char *v59; // [esp+18h] [ebp-364h] _DWORD *v60; // [esp+1Ch] [ebp-360h] char *v61; // [esp+20h] [ebp-35Ch] char v62[4]; // [esp+24h] [ebp-358h] char *v63; // [esp+28h] [ebp-354h] char v64; // [esp+2Ch] [ebp-350h] int v65; // [esp+30h] [ebp-34Ch] char *v66; // [esp+34h] [ebp-348h] size_t v67; // [esp+44h] [ebp-338h] unsigned int v68; // [esp+48h] [ebp-334h] void *v69; // [esp+50h] [ebp-32Ch] int v70; // [esp+54h] [ebp-328h] int v71; // [esp+58h] [ebp-324h] int v72; // [esp+5Ch] [ebp-320h] int v73; // [esp+60h] [ebp-31Ch] unsigned int v74; // [esp+64h] [ebp-318h] char v75; // [esp+68h] [ebp-314h] char v76; // [esp+6Ch] [ebp-310h] char v77; // [esp+6Dh] [ebp-30Fh] char v78; // [esp+16Ch] [ebp-210h] char v79[2]; // [esp+26Ah] [ebp-112h] char v80; // [esp+26Ch] [ebp-110h] char v81; // [esp+26Dh] [ebp-10Fh] char v82; // [esp+2ECh] [ebp-90h] int v83; // [esp+378h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[108]; if ( v3 ) { if ( a2 < v2[633] && (sub_464F50(v3) & 0x80000000) == 0 ) { sub_466A50((_DWORD *)v2[109]); v4 = sub_464F50((_DWORD *)v2[108]); sub_464B60((_DWORD *)v2[108], v4, &v58); if ( v58 < v2[633] ) { v5 = *(_DWORD *)((char *)v2 + 377 * v58 + 2536); v6 = (int)v2 + 377 * v58 + 2536; v7 = (int)v2 + 377 * v58 + 2545; v59 = (char *)v2 + 377 * v58 + 2536; v2[130] = v5; v8 = sub_40C190(-1701146239); sprintf(&v78, v8, v7); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[109], &v78); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[109], &unk_9EBE27); qmemcpy(&v64, (const void *)(v6 + 79), 0x24u); v9 = (int)v59; v10 = *(unsigned __int16 *)(v59 + 115) + v65; if ( v10 <= 59 ) { v11 = v66; } else { v11 = v66 + 1; v10 += 60 * (((signed int)(((unsigned __int64)(2004318071i64 * v10) >> 32) - v10) >> 5) + ((unsigned int)(((unsigned __int64)(2004318071i64 * v10) >> 32) - v10) >> 31)); if ( v66 + 1 == (char *)25 ) v11 = (char *)1; } v12 = v10; v13 = v11; v14 = sub_40A910(1515530300); sprintf(&v78, v14, v13, v12); v15 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[109], &v78); v16 = *(unsigned __int16 *)(v9 + 73); v17 = v15; v18 = sub_40C190(943797839); sprintf(&v78, v18, v16); sub_4661A0((_DWORD *)v2[109], v17, 1, &v78); v19 = *(unsigned __int8 *)(v9 + 118); v20 = *(unsigned __int8 *)(v9 + 117); v21 = sub_40C190(-435620284); sprintf(&v78, v21, v20, v19); v22 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[109], &v78); v23 = sub_40C190(-1024795851); ((void (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(v2[109], v23); v24 = *(unsigned __int16 *)(v9 + 121); v25 = *(unsigned __int16 *)(v9 + 119); v26 = sub_40C190(759841685); sprintf(&v78, v26, v25, v24); sub_4661A0((_DWORD *)v2[109], v22, 1, &v78); v27 = *(_BYTE *)(v9 + 4); if ( v27 == 2 || v27 == 4 ) { v28 = 0; v68 = 15; v67 = 0; LOBYTE(v66) = 0; v29 = v2[130]; v83 = 0; if ( v29 == v2[131] && v2[632] > 0 ) { v30 = v2 + 134; do { v31 = *(v30 - 2); v32 = *v30; v71 = *(v30 - 1); v33 = v30[2]; v70 = v31; v34 = v30[1]; v74 = v33; v73 = v34; v72 = v32; v75 = 0; sub_401D10((int)&v66, &v70, strlen((const char *)&v70)); sub_401D10((int)&v66, ", ", 2u); ++v28; v30 += 5; } while ( v28 < v2[632] ); v9 = (int)v59; } v80 = 0; memset(&v81, 0, 0xFFu); v76 = 0; memset(&v77, 0, 0xFFu); v35 = sub_7549E0(0); v36 = v66; if ( v68 < 0x10 ) v36 = (const char *)&v66; strncpy(v35, v36, v67); v35[v67] = 0; v37 = (_DWORD *)sub_40A8C0((_DWORD *)v2[109], 0, 0); v38 = *(_DWORD **)(v37[72] + 312); *(_DWORD *)v62 = v37; v60 = v38; if ( v38 ) { v61 = (char *)(2 * (*(int (__thiscall **)(_DWORD *))(*v37 + 144))(v37)); v39 = sub_900720(v60, v35, (signed int)((double)(unsigned int)v61 / 1.049999952316284), 0); v63 = v39; v61 = v39; if ( v39 ) { while ( 1 ) { v40 = v39 - v35; strncpy(&v80, v35, v39 - v35); v41 = v40 - 2; *(&v80 + v40) = 0; if ( v40 - 2 > 0 && *(&v80 + v41) != 44 ) { v42 = 2; while ( *(&v80 + v41) != 44 ) { --v41; ++v42; if ( v41 <= 0 ) goto LABEL_29; } *(&v80 + v41) = 0; LABEL_29: v63 -= v42; } v35 = v63; v43 = (double)(unsigned int)(2 * (*(int (**)(void))(**(_DWORD **)v62 + 144))()); v44 = sub_900720(v60, v63, (signed int)(v43 / 1.049999952316284), 0); v45 = **(_DWORD **)v62; v63 = v44; v46 = (double)(unsigned int)(2 * (*(int (**)(void))(v45 + 144))()); if ( sub_900720(v60, v61, (signed int)(v46 / 1.049999952316284), 0) ) { v61 = v63; } else { if ( v40 - 2 > 0 ) v79[v40] = 0; v61 = 0; } sprintf(&v76, " %s", &v80); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[109], &v76); if ( !v61 ) break; v39 = v63; } v9 = (int)v59; } } v83 = -1; if ( v68 >= 0x10 ) operator delete(v66); } ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[109], &unk_9EBE3E); v47 = sub_40C190(-1499031438); ((void (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(v2[109], v47); v48 = sub_7474E0((_DWORD *)(dword_ACD94C + 4), *(unsigned __int16 *)(v9 + 7)); if ( v48 ) { v74 = 15; v73 = 0; LOBYTE(v69) = 0; v83 = 1; sub_4018E0(&v69, " ", 3u); v49 = *(_BYTE *)(v48 + 2); v50 = v48 + 2; for ( v62[0] = v49; v49; v62[0] = v49 ) { if ( v49 == 10 ) { v51 = v69; if ( v74 < 0x10 ) v51 = &v69; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[109], v51); v52 = v69; v73 = 0; if ( v74 < 0x10 ) v52 = &v69; *v52 = 0; sub_4018E0(&v69, " ", 3u); } else { sub_40AB50(&v69, 1u, v62[0]); } v49 = *(_BYTE *)(v50++ + 1); } v53 = v69; if ( v74 < 0x10 ) v53 = &v69; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[109], v53); sub_464D00((_DWORD *)v2[109], 4); v83 = -1; if ( v74 >= 0x10 ) operator delete(v69); } else { sprintf(&v82, "%d KQDesc Not Found", *(unsigned __int16 *)(v9 + 7)); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[109], &v82); } sub_465130((_DWORD *)v2[109]); v54 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v54 ) { v55 = v2[108]; v56 = *(_DWORD *)(v55 + 344); if ( v56 < *(_DWORD *)(v55 + 332) ) { do { v57 = (_DWORD *)v2[108]; if ( *(_DWORD *)(v54 + 5080) == 1 ) { sub_464F90(v57, -1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[108] + 240))(0); sub_464BE0((_DWORD *)v2[108], v56, 128, 128, 128); } else { (*(void (__stdcall **)(signed int))(*v57 + 240))(1); sub_464BE0((_DWORD *)v2[108], v56, 255, 255, 255); } ++v56; } while ( v56 < *(_DWORD *)(v2[108] + 332) ); } } sub_4638F0((_DWORD *)v2[113], *(_DWORD *)(v2[109] + 336)); } } } } // ACD94C: using guessed type int dword_ACD94C; // 60F4E0: using guessed type char var_112[2]; //----- (0060FCF0) -------------------------------------------------------- void __thiscall sub_60FCF0(_DWORD **this, int a2) { _DWORD **v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi int v5; // ST18_4 const char *v6; // eax int v7; // ecx char *v8; // eax int v9; // ST18_4 char *v10; // ST14_4 const char *v11; // eax int v12; // eax int v13; // ST18_4 int v14; // edi const char *v15; // eax int v16; // ST18_4 int v17; // ST14_4 const char *v18; // eax int v19; // edi const CHAR *v20; // eax int v21; // ST18_4 int v22; // ST14_4 const char *v23; // eax char v24; // al _DWORD *v25; // ecx signed int v26; // edi int *v27; // esi int v28; // edx int v29; // ecx unsigned int v30; // eax size_t v31; // edx char *v32; // esi const char *v33; // eax _DWORD *v34; // eax _DWORD *v35; // eax int v36; // edx double v37; // st7 char *v38; // edi int v39; // esi int v40; // eax signed int v41; // ecx double v42; // st7 double v43; // st7 const CHAR *v44; // eax int v45; // esi char v46; // cl void *v47; // eax _BYTE *v48; // eax size_t v49; // esi bool v50; // zf _BYTE *v51; // eax _BYTE *v52; // eax _BYTE *v53; // eax void *v54; // eax int v55; // edi _DWORD *v56; // eax signed int v57; // esi _DWORD *v58; // ecx char *v59; // [esp+14h] [ebp-368h] _DWORD *v60; // [esp+18h] [ebp-364h] _DWORD *v61; // [esp+1Ch] [ebp-360h] char *v62; // [esp+20h] [ebp-35Ch] _DWORD *v63; // [esp+24h] [ebp-358h] char *i; // [esp+24h] [ebp-358h] char v65; // [esp+2Bh] [ebp-351h] char v66; // [esp+2Ch] [ebp-350h] int v67; // [esp+30h] [ebp-34Ch] char *v68; // [esp+34h] [ebp-348h] size_t v69; // [esp+44h] [ebp-338h] unsigned int v70; // [esp+48h] [ebp-334h] void *v71; // [esp+50h] [ebp-32Ch] int v72; // [esp+54h] [ebp-328h] int v73; // [esp+58h] [ebp-324h] int v74; // [esp+5Ch] [ebp-320h] size_t v75; // [esp+60h] [ebp-31Ch] unsigned int v76; // [esp+64h] [ebp-318h] char v77; // [esp+68h] [ebp-314h] char v78; // [esp+6Ch] [ebp-310h] char v79; // [esp+6Dh] [ebp-30Fh] char v80; // [esp+16Ch] [ebp-210h] char v81[2]; // [esp+26Ah] [ebp-112h] char v82; // [esp+26Ch] [ebp-110h] char v83; // [esp+26Dh] [ebp-10Fh] char v84; // [esp+2ECh] [ebp-90h] int v85; // [esp+378h] [ebp-4h] v2 = this; if ( a2 != -1 ) { sub_466A50(this[109]); v3 = (_DWORD *)sub_752110(v2 + 633, a2); v61 = v3; if ( v3 ) { v4 = v3; v5 = (int)v3 + 9; v2[130] = (_DWORD *)*v3; v6 = sub_40C190(-1701146239); sprintf(&v80, v6, v5); ((void (__thiscall *)(_DWORD *, char *))loc_466CA0)(v2[109], &v80); ((void (__thiscall *)(_DWORD *, void *))loc_466CA0)(v2[109], &unk_9EBE3F); qmemcpy(&v66, (char *)v4 + 79, 0x24u); v7 = *(unsigned __int16 *)((char *)v61 + 115) + v67; if ( v7 <= 59 ) { v8 = v68; } else { v8 = v68 + 1; v7 += 60 * (((signed int)(((unsigned __int64)(2004318071i64 * v7) >> 32) - v7) >> 5) + ((unsigned int)(((unsigned __int64)(2004318071i64 * v7) >> 32) - v7) >> 31)); if ( v68 + 1 == (char *)25 ) v8 = (char *)1; } v9 = v7; v10 = v8; v11 = sub_40A910(1515530300); sprintf(&v80, v11, v10, v9); v12 = ((int (__thiscall *)(_DWORD *, char *))loc_466CA0)(v2[109], &v80); v13 = *(unsigned __int16 *)((char *)v61 + 73); v14 = v12; v15 = sub_40C190(943797839); sprintf(&v80, v15, v13); sub_4661A0(v2[109], v14, 1, &v80); v16 = *((unsigned __int8 *)v61 + 118); v17 = *((unsigned __int8 *)v61 + 117); v18 = sub_40C190(-435620284); sprintf(&v80, v18, v17, v16); v19 = ((int (__thiscall *)(_DWORD *, char *))loc_466CA0)(v2[109], &v80); v20 = sub_40C190(-1024795851); ((void (__thiscall *)(_DWORD *, const CHAR *))loc_466CA0)(v2[109], v20); v21 = *(unsigned __int16 *)((char *)v61 + 121); v22 = *(unsigned __int16 *)((char *)v61 + 119); v23 = sub_40C190(759841685); sprintf(&v80, v23, v22, v21); sub_4661A0(v2[109], v19, 1, &v80); v24 = *((_BYTE *)v61 + 4); if ( v24 == 2 || v24 == 4 ) { v70 = 15; v69 = 0; LOBYTE(v68) = 0; v25 = v2[130]; v85 = 0; if ( v25 == v2[131] ) { v26 = 0; if ( (signed int)v2[632] > 0 ) { v27 = (int *)(v2 + 134); do { v28 = *(v27 - 2); v29 = *v27; v73 = *(v27 - 1); v30 = v27[2]; v72 = v28; v31 = v27[1]; v76 = v30; v75 = v31; v74 = v29; v77 = 0; sub_401D10((int)&v68, &v72, strlen((const char *)&v72)); sub_401D10((int)&v68, ", ", 2u); ++v26; v27 += 5; } while ( v26 < (signed int)v2[632] ); } } v82 = 0; memset(&v83, 0, 0xFFu); v78 = 0; memset(&v79, 0, 0xFFu); v32 = sub_7549E0(0); v33 = v68; v59 = v32; if ( v70 < 0x10 ) v33 = (const char *)&v68; strncpy(v32, v33, v69); v32[v69] = 0; v34 = v2[109]; if ( (v34[75] - v34[74]) >> 2 ) { v36 = v34[74]; if ( (*(_DWORD *)(*(_DWORD *)v36 + 336) - *(_DWORD *)(*(_DWORD *)v36 + 332)) >> 2 ) v35 = **(_DWORD ***)(*(_DWORD *)v36 + 332); else v35 = 0; } else { v35 = 0; } v60 = v35; v63 = *(_DWORD **)(v35[72] + 312); if ( v63 ) { v37 = (double)(unsigned int)(2 * (*(int (**)(void))(*v35 + 144))()); v38 = sub_900720(v63, v32, (signed int)(v37 / 1.049999952316284), 0); v62 = v38; while ( v62 ) { v39 = v38 - v59; strncpy(&v82, v59, v38 - v59); v40 = v38 - v59 - 2; *(&v82 + v38 - v59) = 0; if ( v40 > 0 && *(&v82 + v40) != 44 ) { v41 = 2; while ( *(&v82 + v40) != 44 ) { --v40; ++v41; if ( v40 <= 0 ) goto LABEL_29; } *(&v82 + v40) = 0; LABEL_29: v38 -= v41; } v59 = v38; v42 = (double)(unsigned int)(2 * (*(int (**)(void))(*v60 + 144))()); v38 = sub_900720(v63, v38, (signed int)(v42 / 1.049999952316284), 0); v43 = (double)(unsigned int)(2 * (*(int (**)(void))(*v60 + 144))()); if ( sub_900720(v63, v62, (signed int)(v43 / 1.049999952316284), 0) ) { v62 = v38; } else { if ( v39 - 2 > 0 ) v81[v39] = 0; v62 = 0; } sprintf(&v78, " %s", &v82); ((void (__thiscall *)(_DWORD *, char *))loc_466CA0)(v2[109], &v78); } } v85 = -1; if ( v70 >= 0x10 ) operator delete(v68); } ((void (__thiscall *)(_DWORD *, void *))loc_466CA0)(v2[109], &unk_9EBE46); v44 = sub_40C190(-1499031438); ((void (__thiscall *)(_DWORD *, const CHAR *))loc_466CA0)(v2[109], v44); v45 = sub_7474E0((_DWORD *)(dword_ACD94C + 4), *(unsigned __int16 *)((char *)v61 + 7)); if ( v45 ) { v76 = 15; v75 = 0; LOBYTE(v71) = 0; v85 = 1; sub_4018E0(&v71, " ", 3u); v46 = *(_BYTE *)(v45 + 2); v65 = v46; if ( v46 ) { for ( i = (char *)(v45 + 2); ; v46 = *i ) { if ( v46 == 10 ) { v47 = v71; if ( v76 < 0x10 ) v47 = &v71; ((void (__thiscall *)(_DWORD *, void *))loc_466CA0)(v2[109], v47); v48 = v71; v75 = 0; if ( v76 < 0x10 ) v48 = &v71; *v48 = 0; sub_4018E0(&v71, " ", 3u); goto LABEL_63; } if ( -1 - v75 <= 1 || (v49 = v75 + 1, v75 + 1 > 0xFFFFFFFE) ) std::_Xlength_error("string too long"); if ( v76 >= v49 ) { v50 = v49 == 0; if ( v75 != -1 ) goto LABEL_57; v51 = v71; v75 = 0; if ( v76 < 0x10 ) v51 = &v71; *v51 = 0; } else { sub_4015D0((const void **)&v71, (void *)(v75 + 1), v75); v46 = v65; } v50 = v49 == 0; LABEL_57: if ( !v50 ) { v52 = v71; if ( v76 < 0x10 ) v52 = &v71; v52[v75] = v46; v53 = v71; v75 = v49; if ( v76 < 0x10 ) v53 = &v71; v53[v49] = 0; } LABEL_63: v65 = *++i; if ( !*i ) break; } } v54 = v71; if ( v76 < 0x10 ) v54 = &v71; ((void (__thiscall *)(_DWORD *, void *))loc_466CA0)(v2[109], v54); sub_464D00(v2[109], 4); v85 = -1; if ( v76 >= 0x10 ) operator delete(v71); } else { sprintf(&v84, "%d KQDesc Not Found", *(unsigned __int16 *)((char *)v61 + 7)); ((void (__thiscall *)(_DWORD *, char *))loc_466CA0)(v2[109], &v84); } sub_465130(v2[109]); v55 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v55 ) { v56 = v2[108]; v57 = v56[86]; if ( v57 < v56[83] ) { do { v58 = v2[108]; if ( *(_DWORD *)(v55 + 5080) == 1 ) { sub_464F90(v58, -1); (*(void (__stdcall **)(_DWORD))(*v2[108] + 240))(0); sub_464BE0(v2[108], v57, 128, 128, 128); } else { (*(void (__stdcall **)(signed int))(*v58 + 240))(1); sub_464BE0(v2[108], v57, 255, 255, 255); } ++v57; } while ( v57 < v2[108][83] ); } } sub_4638F0(v2[113], v2[109][84]); } } } // ACD94C: using guessed type int dword_ACD94C; // 60FCF0: using guessed type char var_112[2]; //----- (00610590) -------------------------------------------------------- void __thiscall sub_610590(_DWORD **this, int a2) { _DWORD **v2; // esi signed int v3; // eax unsigned int v4; // edi int v5; // eax int v6; // eax int v7; // [esp+4h] [ebp-4h] v2 = this; v3 = sub_464F50(this[108]); if ( v3 >= 0 ) { sub_464B60(v2[108], v3, &v7); if ( v7 < (signed int)v2[633] ) { sub_4B8DF0(v2[74], *(int *)((char *)v2 + 377 * v7 + 2536)); sub_60F4E0(v2, a2); sub_4B68F0(v2[74], (int)v2[130]); if ( (*(unsigned __int8 (**)(void))(*v2[28925] + 260))() || (*(unsigned __int8 (**)(void))(*v2[28926] + 260))() ) { v4 = 0; v5 = sub_752110(v2 + 633, (int)v2[130]); if ( v5 ) { v6 = sub_613DD0(*(_WORD *)(v5 + 7)); if ( v6 ) v4 = *(unsigned __int16 *)(v6 + 4); } (*(void (__stdcall **)(_DWORD))(*v2[28925] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[28926] + 256))(0); sub_466A50((_DWORD *)v2[28925][85]); sub_60D1E0((_DWORD **)v2[28926]); sub_60E4D0(v2, v4); } } } } //----- (006106B0) -------------------------------------------------------- void __thiscall sub_6106B0(_DWORD *this, int a2) { unsigned int v2; // edi _DWORD *v3; // edx _DWORD *v4; // eax if ( a2 ) { this[131] = *(_DWORD *)a2; this[632] = *(unsigned __int16 *)(a2 + 5); v2 = 0; if ( *(_WORD *)(a2 + 5) > 0u ) { v3 = this + 134; v4 = (_DWORD *)(a2 + 15); do { *(v3 - 2) = *(v4 - 2); *(v3 - 1) = *(v4 - 1); *v3 = *v4; v3[1] = v4[1]; v3[2] = v4[2]; ++v2; v4 += 5; v3 += 5; } while ( v2 < *(unsigned __int16 *)(a2 + 5) ); } sub_60F4E0(this, 0); } } //----- (00610720) -------------------------------------------------------- void __thiscall sub_610720(void *this) { int v1; // esi int v2; // eax _DWORD *v3; // eax int v4; // eax int v5; // eax const char *v6; // eax v1 = (int)this; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 && *(_DWORD *)(v2 + 5080) == 1 ) { if ( *(_DWORD *)(v1 + 516) == -1 && (v3 = (_DWORD *)sub_680810(byte_AD9238), (v4 = sub_681CC0(byte_AD9238, v3)) != 0) ) { v5 = *(_DWORD *)(v4 + 91); } else { v5 = *(_DWORD *)(v1 + 516); } sub_60FCF0((_DWORD **)v1, v5); } if ( byte_B6712C == 1 || byte_B6712C == 2 ) sub_60CCA0(v1, 0); else sub_60CCA0(v1, 1); *(_BYTE *)(v1 + 492) = 0; sub_8D06A0((float *)(v1 + 115640), flt_ACCFCC); sub_60E1D0(v1); if ( *(_DWORD *)(*(_DWORD *)(v1 + 296) + 5080) == 1 ) { v6 = sub_40A910(-2085694304); } else { sub_464F90(*(_DWORD **)(v1 + 432), -1); v6 = sub_40A910(-2002217372); } sub_8F2EA0(*(void ***)(v1 + 115708), v6); } // ACCFCC: using guessed type float flt_ACCFCC; // B6712C: using guessed type char byte_B6712C; //----- (006107F0) -------------------------------------------------------- void __thiscall sub_6107F0(int *this, int a2, int a3) { switch ( a2 ) { case 1: sub_60D4B0((_DWORD **)this); break; case 2: sub_60CB00((int)this); break; case 3: sub_60CB40(this); break; case 4: sub_60CBA0((int)this); break; case 5: sub_60CBF0((int)this); break; case 6: sub_60D540((int)this); break; case 7: sub_60D640((int)this); break; case 8: sub_610590((_DWORD **)this, a3); break; case 9: sub_610590((_DWORD **)this, a3); break; case 10: sub_60D480(this); break; case 11: sub_60D450(this); break; case 12: sub_60ECA0(this); break; case 13: sub_60ED40(this); break; case 14: sub_60CD40(); break; case 15: sub_60E600(this); break; default: return; } } //----- (006108E0) -------------------------------------------------------- char __thiscall sub_6108E0(void *this, void **a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // edi int v13; // ebx volatile LONG *v14; // eax volatile LONG **v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // eax volatile LONG v20; // edx const CHAR *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG **v26; // eax volatile LONG **v27; // eax volatile LONG *v28; // eax volatile LONG **v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax int v33; // eax int v34; // eax void **v35; // ecx int (*v36)(void); // eax int v37; // eax int v38; // eax void **v39; // eax void **v40; // eax void **v41; // eax void **v42; // eax void **v43; // eax void **v44; // eax int v45; // eax void **v46; // eax int v47; // ecx int (*v48)(void); // eax int v49; // eax int v50; // eax int v51; // eax void **v52; // edx int v53; // eax volatile LONG *v54; // eax volatile LONG v55; // edx const CHAR *v56; // eax int v57; // eax void **v58; // edx int v59; // eax volatile LONG *v60; // eax volatile LONG v61; // edx const CHAR *v62; // eax int v63; // eax void **v64; // edx int v65; // eax volatile LONG *v66; // eax volatile LONG v67; // edx const CHAR *v68; // eax int v69; // eax void **v70; // edx int v71; // eax volatile LONG *v72; // eax volatile LONG v73; // edx const CHAR *v74; // eax volatile LONG *v75; // eax volatile LONG **v76; // edx int v77; // eax void **v78; // edx int v79; // eax volatile LONG *v80; // eax const CHAR *v81; // eax volatile LONG **v82; // eax volatile LONG *v83; // eax volatile LONG **v84; // ecx int v85; // eax void **v86; // edx int v87; // eax volatile LONG *v88; // eax float *v89; // eax const CHAR *v90; // eax volatile LONG **v91; // eax volatile LONG *v92; // eax volatile LONG **v93; // ecx int v94; // eax void **v95; // edx int v96; // eax volatile LONG *v97; // eax const CHAR *v98; // eax volatile LONG *v99; // eax volatile LONG **v100; // ecx int v101; // eax void **v102; // edx int v103; // eax volatile LONG *v104; // eax const CHAR *v105; // eax int v106; // eax int v107; // edx const char *v108; // eax void **v109; // ecx volatile LONG **v110; // edx int v111; // eax int v112; // edx void **v113; // eax int v114; // STF8_4 int v115; // eax volatile LONG *v116; // eax volatile LONG v117; // edx const CHAR *v118; // eax volatile LONG *v119; // eax volatile LONG *v120; // eax int v121; // eax int v122; // ecx void **v123; // edx int v124; // eax volatile LONG *v125; // eax int v126; // edi const CHAR *v127; // eax void (__thiscall ***v128)(_DWORD, signed int); // edi void (__thiscall ***v129)(_DWORD, signed int); // edi int v130; // [esp+104h] [ebp-88h] int *v131; // [esp+108h] [ebp-84h] int v132; // [esp+114h] [ebp-78h] int v133; // [esp+118h] [ebp-74h] int v134; // [esp+11Ch] [ebp-70h] int v135; // [esp+120h] [ebp-6Ch] int v136; // [esp+124h] [ebp-68h] char v137; // [esp+12Ch] [ebp-60h] int v138; // [esp+130h] [ebp-5Ch] int v139; // [esp+134h] [ebp-58h] int v140; // [esp+138h] [ebp-54h] int v141; // [esp+13Ch] [ebp-50h] int v142; // [esp+140h] [ebp-4Ch] volatile LONG *v143; // [esp+144h] [ebp-48h] void **v144; // [esp+148h] [ebp-44h] volatile LONG *v145; // [esp+14Ch] [ebp-40h] int v146; // [esp+150h] [ebp-3Ch] int v147; // [esp+154h] [ebp-38h] int v148; // [esp+158h] [ebp-34h] volatile LONG **v149; // [esp+15Ch] [ebp-30h] void *v150; // [esp+160h] [ebp-2Ch] char v151; // [esp+16Ch] [ebp-20h] int v152; // [esp+170h] [ebp-1Ch] unsigned int v153; // [esp+174h] [ebp-18h] int v154; // [esp+188h] [ebp-4h] v2 = (int)this; v144 = a2; v148 = 0; v3 = dword_BA6BA0; v154 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\NPCKDQuest.nif"); sub_8F66B0(v4, (int)&v148, v3); if ( !v148 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v142 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v154) = 1; if ( v8 ) v143 = *(volatile LONG **)(v8 + 4); else v143 = 0; v9 = sub_8FB140(v148, (int)"Frame", (int)&v147, (int)&v146, v143); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, (int)v144, (int)"KingdomQuestWin", 0) ) { LOBYTE(v154) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v148; v154 = -1; if ( v148 && !InterlockedDecrement((volatile LONG *)(v148 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v147; v13 = v146; v14 = (volatile LONG *)sub_43D0D0(0x13u); if ( v14 ) v15 = sub_8FB140(v148, (int)"Theme", (int)&v147, (int)&v146, v14); else v15 = sub_8FB140(v148, (int)"Theme", (int)&v147, (int)&v146, 0); sub_8F3EB0(v147 - v12, v146 - v13, (int)v15, v2, 0, 0); if ( sub_8F71E0(v148, (int)"WinTitle", &v147, &v146, &v132, &v133) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v147 - v12, v146 - v13, v132, v133, v18, v2, 0, 0); v20 = *v19; v149 = (volatile LONG **)v19; (*(void (__thiscall **)(volatile LONG *, signed int))(v20 + 488))(v19, 1); (*((void (__stdcall **)(int *))*v149 + 117))(&dword_AA8D98); v144 = (void **)(*v149 + 118); v21 = sub_40C190(-1800667912); ((void (__thiscall *)(volatile LONG **, const CHAR *))*v144)(v149, v21); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v22 = sub_8FB140(v148, (int)"Panel01", (int)&v147, (int)&v146, v143); v23 = sub_8F3EB0(v147 - v12, v146 - v13, (int)v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 240))(v23, 1); v24 = sub_8FB140(v148, (int)"IconSlot", (int)&v147, (int)&v146, v143); v25 = sub_8F3EB0(v147 - v12, v146 - v13, (int)v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v134 = 0; v135 = 0; v136 = 0; v137 = 0; v138 = 0; v139 = 0; v140 = 0; v141 = 0; LOBYTE(v154) = 2; v26 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 1); *v26 = (volatile LONG *)1; v26[1] = (volatile LONG *)v148; v149 = v26; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "ColumnBarNor", 0xCu); LOBYTE(v154) = 3; v149 += 18; sub_40B060((int *)v149, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "ColumnBarClick", 0xEu); LOBYTE(v154) = 4; sub_40B060((int *)v149, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "ColumnBarOver", 0xDu); LOBYTE(v154) = 5; sub_40B060((int *)v149, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column01", 8u); LOBYTE(v154) = 6; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column02", 8u); LOBYTE(v154) = 7; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column03", 8u); LOBYTE(v154) = 8; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column04", 8u); LOBYTE(v154) = 9; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; sub_466680(&v134, 0); v27 = sub_8FB140(v148, (int)"SubText01", (int)&v147, (int)&v146, v143); v28 = sub_466330(v147 - v12, v146 - v13, (int)v27, *(float *)&v2, (int **)&v134, 3, 0); *(_DWORD *)(v2 + 432) = v28; *((_DWORD *)v28 + 89) = 8; *(_DWORD *)(*(_DWORD *)(v2 + 432) + 352) = 9; sub_40AE60(&v134); v29 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 1); *v29 = (volatile LONG *)1; v29[1] = (volatile LONG *)v148; v149 = v29; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "ColumnBarNor01", 0xEu); LOBYTE(v154) = 10; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column05", 8u); LOBYTE(v154) = 11; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; v149 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v134, 2); *v149 = (volatile LONG *)2; v153 = 15; v152 = 0; LOBYTE(v150) = 0; sub_4018E0(&v150, "Column06", 8u); LOBYTE(v154) = 12; sub_40B060((int *)v149 + 18, (const void **)&v150); LOBYTE(v154) = 2; if ( v153 >= 0x10 ) operator delete(v150); v149[1] = (volatile LONG *)v148; sub_466680(&v134, 0); v30 = sub_8FB140(v148, (int)"SubText02", (int)&v147, (int)&v146, v143); v31 = sub_466330(v147 - v12, v146 - v13, (int)v30, *(float *)&v2, (int **)&v134, 4, 0); *(_DWORD *)(v2 + 436) = v31; sub_464D00(v31, 4); sub_465130(*(_DWORD **)(v2 + 436)); v32 = sub_8FB140(v148, (int)"SlideBar_SlideBtnMiddle", (int)&v147, (int)&v146, v143); v149 = v32; v33 = sub_464310(v148, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v32, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 448) = v33; *(_DWORD *)(v33 + 312) = 10; *(_DWORD *)(*(_DWORD *)(v2 + 448) + 304) = 1; v34 = **(_DWORD **)(v2 + 448); v35 = *(void ***)(v2 + 448); v145 = (volatile LONG *)v34; v36 = *(int (**)(void))(v34 + 168); v144 = v35; v37 = v36(); v38 = (*((int (__stdcall **)(int))*v144 + 41))(v37); (*((void (__thiscall **)(_DWORD, int))v145 + 77))(*(_DWORD *)(v2 + 448), v38); v39 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v39, "SlideBar_DnBtn01Nor"); v40 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v40, "SlideBar_DnBtn01Click"); v41 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v41, "SlideBar_DnBtn01Over"); v42 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v42, "SlideBar_UpBtn01Nor"); v43 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v43, "SlideBar_UpBtn01Click"); v44 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v148 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v44, "SlideBar_UpBtn01Over"); v45 = sub_464310(v148, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v149, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 452) = v45; *(_DWORD *)(v45 + 312) = 11; *(_DWORD *)(*(_DWORD *)(v2 + 452) + 304) = 1; v46 = **(void ****)(v2 + 452); v47 = *(_DWORD *)(v2 + 452); v144 = v46; v48 = (int (*)(void))v46[42]; v145 = (volatile LONG *)v47; v49 = v48(); v50 = (*(int (__stdcall **)(int))(*v145 + 164))(v49); ((void (__thiscall *)(_DWORD, int))v144[77])(*(_DWORD *)(v2 + 452), v50); v149 = sub_8FB140(v148, (int)"Title01Nor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"Title01Click"); sub_8FB650(v149, v148, (int)"Title01Over"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 2, 0, 0); v51 = *v149[9]; v52 = *(void ***)(v51 + 20); v145 = *(volatile LONG **)(v51 + 24); v144 = v52; v53 = sub_421050(7); v54 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v53, v2, 0, 0); v55 = *v54; v149 = (volatile LONG **)v54; (*(void (__thiscall **)(volatile LONG *, signed int))(v55 + 488))(v54, 5); v145 = *v149 + 118; v56 = sub_40C190(-1795623687); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v145)(v149, v56); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v149 = sub_8FB140(v148, (int)"Title02Nor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"Title02Click"); sub_8FB650(v149, v148, (int)"Title02Over"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 3, 0, 0); v57 = *v149[9]; v58 = *(void ***)(v57 + 20); v145 = *(volatile LONG **)(v57 + 24); v144 = v58; v59 = sub_421050(7); v60 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v59, v2, 0, 0); v61 = *v60; v149 = (volatile LONG **)v60; (*(void (__thiscall **)(volatile LONG *, signed int))(v61 + 488))(v60, 5); v145 = *v149 + 118; v62 = sub_40C190(-836945355); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v145)(v149, v62); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v149 = sub_8FB140(v148, (int)"Title03Nor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"Title03Click"); sub_8FB650(v149, v148, (int)"Title03Over"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 4, 0, 0); v63 = *v149[9]; v64 = *(void ***)(v63 + 20); v145 = *(volatile LONG **)(v63 + 24); v144 = v64; v65 = sub_421050(7); v66 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v65, v2, 0, 0); v67 = *v66; v149 = (volatile LONG **)v66; (*(void (__thiscall **)(volatile LONG *, signed int))(v67 + 488))(v66, 5); v145 = *v149 + 118; v68 = sub_40C190(1972670195); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v145)(v149, v68); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v149 = sub_8FB140(v148, (int)"Title04Nor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"Title04Click"); sub_8FB650(v149, v148, (int)"Title04Over"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 5, 0, 0); v69 = *v149[9]; v70 = *(void ***)(v69 + 20); v145 = *(volatile LONG **)(v69 + 24); v144 = v70; v71 = sub_421050(7); v72 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v71, v2, 0, 0); v73 = *v72; v149 = (volatile LONG **)v72; (*(void (__thiscall **)(volatile LONG *, signed int))(v73 + 488))(v72, 5); v145 = *v149 + 118; v74 = sub_40C190(-234357530); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v145)(v149, v74); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v149 = sub_8FB140(v148, (int)"OkNor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"OkClick"); sub_8FB650(v149, v148, (int)"OkOver"); sub_8FB650(v149, v148, (int)"OkDisable"); v75 = sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 6, 0, 0); v76 = v149; *(_DWORD *)(v2 + 456) = v75; v77 = *v76[9]; v78 = *(void ***)(v77 + 20); v145 = *(volatile LONG **)(v77 + 24); v144 = v78; v79 = sub_421050(7); v80 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v79, v2, 0, 0); *(_DWORD *)(v2 + 480) = v80; (*(void (__thiscall **)(volatile LONG *, signed int))(*v80 + 488))(v80, 5); v145 = (volatile LONG *)(**(_DWORD **)(v2 + 480) + 472); v81 = sub_40C190(-1955096704); (*(void (__thiscall **)(_DWORD, const CHAR *))v145)(*(_DWORD *)(v2 + 480), v81); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 480) + 240))(0); v82 = sub_8FB140(v148, (int)"Tab01", (int)&v147, (int)&v146, v143); v149 = v82; v83 = sub_8FE0F0(v147 - v12, v146 - v13, (int)v82, v2, 12, 0, 0); v84 = v149; *(_DWORD *)(v2 + 464) = v83; v85 = *v84[9]; v86 = *(void ***)(v85 + 20); v145 = *(volatile LONG **)(v85 + 24); v144 = v86; v87 = sub_421050(7); v88 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v87, v2, 0, 0); *(_DWORD *)(v2 + 472) = v88; (*(void (__thiscall **)(volatile LONG *, signed int))(*v88 + 488))(v88, 5); v145 = (volatile LONG *)(**(_DWORD **)(v2 + 472) + 468); v89 = sub_419EE0((float *)&v151, 0xFFu, 0xFFu, 0, 0xFFu); (*(void (__thiscall **)(_DWORD, float *))v145)(*(_DWORD *)(v2 + 472), v89); v145 = (volatile LONG *)(**(_DWORD **)(v2 + 472) + 472); v90 = sub_40C190(-134876072); (*(void (__thiscall **)(_DWORD, const CHAR *))v145)(*(_DWORD *)(v2 + 472), v90); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 472) + 240))(0); v91 = sub_8FB140(v148, (int)"Tab02", (int)&v147, (int)&v146, v143); v149 = v91; v92 = sub_8FE0F0(v147 - v12, v146 - v13, (int)v91, v2, 13, 0, 0); v93 = v149; *(_DWORD *)(v2 + 468) = v92; v94 = *v93[9]; v95 = *(void ***)(v94 + 20); v145 = *(volatile LONG **)(v94 + 24); v144 = v95; v96 = sub_421050(7); v97 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v96, v2, 0, 0); *(_DWORD *)(v2 + 476) = v97; (*(void (__thiscall **)(volatile LONG *, signed int))(*v97 + 488))(v97, 5); v145 = (volatile LONG *)(**(_DWORD **)(v2 + 476) + 472); v98 = sub_40C190(-521381052); (*(void (__thiscall **)(_DWORD, const CHAR *))v145)(*(_DWORD *)(v2 + 476), v98); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 476) + 240))(0); v149 = sub_8FB140(v148, (int)"CancelBtnNor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"OkClick"); sub_8FB650(v149, v148, (int)"OkOver"); v99 = sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 7, 0, 0); v100 = v149; *(_DWORD *)(v2 + 460) = v99; v101 = *v100[9]; v102 = *(void ***)(v101 + 20); v145 = *(volatile LONG **)(v101 + 24); v144 = v102; v103 = sub_421050(7); v104 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v103, v2, 0, 0); *(_DWORD *)(v2 + 484) = v104; (*(void (__thiscall **)(volatile LONG *, signed int))(*v104 + 488))(v104, 5); v145 = (volatile LONG *)(**(_DWORD **)(v2 + 484) + 472); v105 = sub_40C190(557200800); (*(void (__thiscall **)(_DWORD, const CHAR *))v145)(*(_DWORD *)(v2 + 484), v105); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 484) + 240))(0); v149 = sub_8FB140(v148, (int)"ClsNor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"ClsClick"); sub_8FB650(v149, v148, (int)"ClsOver"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 1, 0, 0); v106 = sub_43D0D0(4u); v107 = *(_DWORD *)v148; v145 = (volatile LONG *)v106; if ( (*(int (__stdcall **)(const char *))(v107 + 72))("HelpLinkNor") ) { v149 = sub_8FB140(v148, (int)"HelpLinkNor", (int)&v147, (int)&v146, v145); sub_8FB650(v149, v148, (int)"HelpLinkClick"); sub_8FB650(v149, v148, (int)"HelpLinkOver"); sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 14, 0, 0); } v149 = sub_8FB140(v148, (int)"PlayerListBtnNor", (int)&v147, (int)&v146, v143); sub_8FB650(v149, v148, (int)"PlayerListBtnClick"); sub_8FB650(v149, v148, (int)"PlayerListBtnOver"); v144 = (void **)sub_8FE0F0(v147 - v12, v146 - v13, (int)v149, v2, 15, 0, 0); v144[68] = (void *)dword_AD01E8; v108 = sub_40A910(-2085694304); sub_8F2EA0(v144, v108); v109 = v144; v110 = v149; *(_DWORD *)(v2 + 115708) = v144; v111 = *v110[9]; v112 = *(_DWORD *)(v111 + 24); v113 = *(void ***)(v111 + 20); v114 = (int)v109; v145 = (volatile LONG *)v112; v144 = v113; v115 = sub_421050(7); v116 = sub_8F4A20(0, 0, (int)v144, (int)v145, v115, v114, 0, 0); v117 = *v116; v149 = (volatile LONG **)v116; (*(void (__thiscall **)(volatile LONG *, signed int, int, int *))(v117 + 488))(v116, 5, v130, v131); v145 = *v149 + 118; v118 = sub_40A910(-1270598834); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v145)(v149, v118); (*((void (__stdcall **)(_DWORD))*v149 + 60))(0); v131 = (int *)v2; v130 = v148; v145 = &v130; if ( v148 ) InterlockedIncrement((volatile LONG *)(v148 + 4)); v119 = sub_60EF10(v130, v131); *(_DWORD *)(v2 + 115700) = v119; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v119 + 256))(v119, 0); v131 = (int *)v2; v130 = v148; v145 = &v130; if ( v148 ) InterlockedIncrement((volatile LONG *)(v148 + 4)); v120 = sub_60F0A0(v130, v131); *(_DWORD *)(v2 + 115704) = v120; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v120 + 256))(v120, 0); v121 = *sub_8FB140(v148, (int)"Time", (int)&v147, (int)&v146, v143)[9]; v122 = *(_DWORD *)(v121 + 24); v123 = *(void ***)(v121 + 20); v130 = 0; v145 = (volatile LONG *)v122; v144 = v123; v124 = sub_421050(7); v125 = sub_8F4A20(v147 - v12, v146 - v13 + 1, (int)v144, (int)v145, v124, v2, 0, v130); *(_DWORD *)(v2 + 488) = v125; (*(void (__thiscall **)(volatile LONG *, signed int))(*v125 + 488))(v125, 5); v126 = **(_DWORD **)(v2 + 488); v127 = sub_40C190(-1955096704); (*(void (__thiscall **)(_DWORD, const CHAR *))(v126 + 472))(*(_DWORD *)(v2 + 488), v127); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 488) + 468))(&dword_AA8CB8); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 488) + 472))(&unk_9EBE26); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.0, 0.5); sub_8D06A0((float *)(v2 + 115640), flt_ACCFCC); *(float *)(v2 + 115660) = 6.0; LOBYTE(v154) = 1; sub_40AE10((void **)&v134); v128 = (void (__thiscall ***)(_DWORD, signed int))v142; LOBYTE(v154) = 0; if ( !InterlockedDecrement((volatile LONG *)(v142 + 4)) ) (**v128)(v128, 1); v129 = (void (__thiscall ***)(_DWORD, signed int))v148; v154 = -1; if ( v148 && !InterlockedDecrement((volatile LONG *)(v148 + 4)) && v129 ) (**v129)(v129, 1); result = 1; } else { v16 = (void (__thiscall ***)(_DWORD, signed int))v142; LOBYTE(v154) = 0; if ( !InterlockedDecrement((volatile LONG *)(v142 + 4)) ) (**v16)(v16, 1); v17 = (void (__thiscall ***)(_DWORD, signed int))v148; v154 = -1; if ( !v148 || InterlockedDecrement((volatile LONG *)(v148 + 4)) || !v17 ) return 0; (**v17)(v17, 1); result = 0; } return result; } // AA8CB8: using guessed type int dword_AA8CB8; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // AD01E8: using guessed type int dword_AD01E8; //----- (00611D90) -------------------------------------------------------- char __thiscall sub_611D90(void *this, volatile LONG *a2, _DWORD *a3) { _DWORD *v3; // edi int v4; // esi int (__thiscall *v5)(_DWORD *); // edx int v6; // ebx char *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // esi char result; // al int v11; // edi int (__thiscall *v12)(int); // edx volatile LONG **v13; // ebx volatile LONG **v14; // ebx volatile LONG *v15; // edi const char *v16; // eax int v17; // eax int v18; // ebx int v19; // eax volatile LONG *v20; // ebx volatile LONG v21; // edi const CHAR *v22; // eax CHAR *v23; // eax CHAR *v24; // eax CHAR *v25; // eax signed int v26; // ebx int v27; // edi char *v28; // eax volatile LONG **v29; // edi char *v30; // eax char *v31; // eax volatile LONG *v32; // eax void (__thiscall *v33)(volatile LONG *, int); // edx int v34; // eax int v35; // edi int v36; // ST40_4 int v37; // eax volatile LONG *v38; // edi int v39; // eax _DWORD *v40; // edi int *v41; // edi _DWORD *v42; // edi int v43; // edi int v44; // edi volatile LONG **v45; // eax volatile LONG *v46; // eax void **v47; // eax void **v48; // eax void **v49; // eax void **v50; // eax void **v51; // eax void **v52; // eax volatile LONG **v53; // eax int v54; // eax int *v55; // eax int v56; // ebx int v57; // edi int v58; // eax int v59; // eax int v60; // edi volatile LONG *v61; // esi int v62; // eax volatile LONG *v63; // eax int v64; // edi const CHAR *v65; // eax volatile LONG *v66; // esi int v67; // [esp+14h] [ebp-C4h] void *v68; // [esp+18h] [ebp-C0h] int v69; // [esp+1Ch] [ebp-BCh] int v70; // [esp+20h] [ebp-B8h] char v71; // [esp+24h] [ebp-B4h] char v72; // [esp+28h] [ebp-B0h] int v73; // [esp+2Ch] [ebp-ACh] int v74; // [esp+30h] [ebp-A8h] int v75; // [esp+34h] [ebp-A4h] int v76; // [esp+38h] [ebp-A0h] int v77; // [esp+3Ch] [ebp-9Ch] int v78; // [esp+40h] [ebp-98h] int *v79; // [esp+44h] [ebp-94h] volatile LONG *v80; // [esp+48h] [ebp-90h] int v81; // [esp+4Ch] [ebp-8Ch] int v82; // [esp+50h] [ebp-88h] int v83; // [esp+54h] [ebp-84h] void *v84; // [esp+58h] [ebp-80h] int v85; // [esp+68h] [ebp-70h] unsigned int v86; // [esp+6Ch] [ebp-6Ch] char v87; // [esp+74h] [ebp-64h] int v88; // [esp+84h] [ebp-54h] int v89; // [esp+88h] [ebp-50h] char v90; // [esp+90h] [ebp-48h] int v91; // [esp+A0h] [ebp-38h] int v92; // [esp+A4h] [ebp-34h] char v93; // [esp+ACh] [ebp-2Ch] int v94; // [esp+BCh] [ebp-1Ch] int v95; // [esp+C0h] [ebp-18h] int v96; // [esp+D4h] [ebp-4h] v3 = a3; v4 = (int)this; v5 = *(int (__thiscall **)(_DWORD *))(*a3 + 164); v96 = 0; v6 = v5(a3); v81 = (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); v78 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\NPCKDQuest_TeamNone.nif"); sub_8F66B0(v7, (int)&a2, v78); if ( !a2 ) return 0; v8 = sub_8FB140((int)a2, (int)"Panel03", (int)&v83, (int)&v82, 0); if ( !sub_8F43D0((volatile LONG **)v4, v83 - v6, v82 - v81, (int)v8, v3, 0, 0) ) { v9 = a2; v96 = -1; if ( a2 && !InterlockedDecrement(a2 + 1) ) { if ( v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); } return 0; } v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 164))(v4); v12 = *(int (__thiscall **)(int))(*(_DWORD *)v4 + 168); v78 = v11; v81 = v12(v4); v13 = sub_8FB140((int)a2, (int)"ClsNor01", (int)&v83, (int)&v82, 0); sub_8FB650(v13, (int)a2, (int)"ClsClick01"); sub_8FB650(v13, (int)a2, (int)"ClsOver01"); sub_8FE0F0(v83 - v11, v82 - v81, (int)v13, v4, 0, 0, 0); v14 = sub_8FB140((int)a2, (int)"BtnNor", (int)&v83, (int)&v82, 0); sub_8FB650(v14, (int)a2, (int)"BtnClick"); sub_8FB650(v14, (int)a2, (int)"BtnOver"); v15 = sub_8FE0F0(v83 - v11, v82 - v81, (int)v14, v4, 2, 0, 0); *((_DWORD *)v15 + 68) = dword_AD01E8; v16 = sub_40A910(675062371); sub_8F2EA0((void **)v15, v16); v17 = *v14[9]; v18 = *(_DWORD *)(v17 + 24); v79 = *(int **)(v17 + 20); v19 = sub_421050(7); v20 = sub_8F4A20(0, 0, (int)v79, v18, v19, (int)v15, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 5); v21 = *v20; v22 = sub_40A910(137572017); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v20, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v23 = (CHAR *)sub_40C190(-1734041703); v89 = 15; v88 = 0; v87 = 0; sub_4018E0(&v87, v23, strlen(v23)); LOBYTE(v96) = 1; v24 = (CHAR *)sub_40C190(-1766684000); v92 = 15; v91 = 0; v90 = 0; sub_4018E0(&v90, v24, strlen(v24)); LOBYTE(v96) = 2; v25 = (CHAR *)sub_40C190(1319409301); v95 = 15; v94 = 0; v93 = 0; sub_4018E0(&v93, v25, strlen(v25)); LOBYTE(v96) = 3; v26 = 5; v79 = (int *)&v87; do { v27 = (int)a2; v28 = sub_7549E0("Title%02dNor", v26); v29 = sub_8FB140(v27, (int)v28, (int)&v83, (int)&v82, 0); v80 = a2; v30 = sub_7549E0("Title%02dClick", v26); sub_8FB650(v29, (int)v80, (int)v30); v80 = a2; v31 = sub_7549E0("Title%02dOver", v26); sub_8FB650(v29, (int)v80, (int)v31); v32 = sub_8FE0F0(v83 - v78, v82 - v81, (int)v29, v4, 3, 0, 0); v33 = *(void (__thiscall **)(volatile LONG *, int))(*v32 + 520); v80 = v32; v33(v32, v26 - 5); v34 = *v29[9]; v35 = *(_DWORD *)(v34 + 24); v36 = *(_DWORD *)(v34 + 20); v37 = sub_421050(7); v38 = sub_8F4A20(0, 0, v36, v35, v37, (int)v80, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); v39 = (int)v79; if ( (unsigned int)v79[5] >= 0x10 ) v39 = *v79; (*(void (__thiscall **)(volatile LONG *, int))(*v38 + 472))(v38, v39); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); v79 += 7; ++v26; } while ( (unsigned int)(v26 - 5) < 3 ); v68 = 0; v69 = 0; v70 = 0; v75 = 0; v76 = 0; LOBYTE(v96) = 4; v72 = 0; v73 = 0; v74 = 0; v40 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v68, 1); *v40 = 1; v40[1] = a2; v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "ColumnBarNor02", 0xEu); v41 = v40 + 18; LOBYTE(v96) = 5; sub_40B060(v41, (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "ColumnBarClick02", 0x10u); LOBYTE(v96) = 6; sub_40B060(v41, (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "ColumnBarOver02", 0xFu); LOBYTE(v96) = 7; sub_40B060(v41, (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); v42 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v68, 2); *v42 = 2; v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "Column09", 8u); LOBYTE(v96) = 8; sub_40B060(v42 + 18, (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); v42[1] = a2; v43 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v68, 2); *(_DWORD *)v43 = 2; v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "Column07", 8u); LOBYTE(v96) = 9; sub_40B060((int *)(v43 + 72), (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); *(_DWORD *)(v43 + 4) = a2; *(_BYTE *)(v43 + 88) = 1; v44 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v68, 2); *(_DWORD *)v44 = 2; v86 = 15; v85 = 0; LOBYTE(v84) = 0; sub_4018E0(&v84, "Column08", 8u); LOBYTE(v96) = 10; sub_40B060((int *)(v44 + 72), (const void **)&v84); LOBYTE(v96) = 4; if ( v86 >= 0x10 ) operator delete(v84); v86 = 15; v85 = 0; LOBYTE(v84) = 0; *(_DWORD *)(v44 + 4) = a2; *(_BYTE *)(v44 + 88) = 1; sub_466680(&v68, 0); v45 = sub_8FB140((int)a2, (int)"Object01", (int)&v83, (int)&v82, 0); v46 = sub_466330(v83 - v78, v82 - v81, (int)v45, *(float *)&v4, (int **)&v68, 0, 0); *(_DWORD *)(v4 + 340) = v46; *((_DWORD *)v46 + 89) = 4; sub_465130(*(_DWORD **)(v4 + 340)); sub_464710(*(_DWORD **)(v4 + 340), dword_AD01E8); v47 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnNor02"); sub_85AB50(v47, "SlideBar_DnBtn02Nor"); v48 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnClick02"); sub_85AB50(v48, "SlideBar_DnBtn02Click"); v49 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnOver02"); sub_85AB50(v49, "SlideBar_DnBtn02Over"); v50 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnNor02"); sub_85AB50(v50, "SlideBar_UpBtn02Nor"); v51 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnClick02"); sub_85AB50(v51, "SlideBar_UpBtn02Click"); v52 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnOver02"); sub_85AB50(v52, "SlideBar_UpBtn02Over"); v53 = sub_8FB140((int)a2, (int)"SlideBar_SlideBtnMiddle", (int)&v83, (int)&v82, 0); v54 = sub_464310((int)a2, (int)"SlideBar02", "SlideBar_UpBtn02", "SlideBar_DnBtn02", (int)v53, 0, (_DWORD *)v4); *(_DWORD *)(v4 + 344) = v54; *(_DWORD *)(v54 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v4 + 344) + 304) = 1; v55 = *(int **)(v4 + 344); v56 = *v55; v57 = *(_DWORD *)(v4 + 344); v58 = (*(int (__thiscall **)(_DWORD))(*v55 + 168))(*(_DWORD *)(v4 + 344)); v59 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v57 + 164))(v57, v58 - v81); v60 = v78; (*(void (__thiscall **)(_DWORD, int))(v56 + 308))(*(_DWORD *)(v4 + 344), v59 - v78); if ( sub_8F71E0((int)a2, (int)"JoinPlayerList", &v83, &v82, &v77, &v67) ) { v62 = sub_421050(7); v63 = sub_8F4A20(v83 - v60, v82 - v81, v77, v67, v62, v4, 0, 0); *(_DWORD *)(v4 + 348) = v63; (*(void (__thiscall **)(volatile LONG *, int *))(*v63 + 468))(v63, &dword_AA8D98); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 348) + 488))(1); v64 = **(_DWORD **)(v4 + 348); v65 = sub_40A910(696021910); (*(void (__thiscall **)(_DWORD, const CHAR *))(v64 + 472))(*(_DWORD *)(v4 + 348), v65); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 348) + 240))(*(_DWORD *)(v4 + 348), 0); LOBYTE(v96) = 3; if ( v68 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v68, v69, &v71, v77); operator delete(v68); } v68 = 0; v69 = 0; v70 = 0; LOBYTE(v96) = 0; `eh vector destructor iterator'(&v87, 0x1Cu, 3, sub_636A10); v66 = a2; v96 = -1; if ( a2 && !InterlockedDecrement(a2 + 1) && v66 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v66)(v66, 1); result = 1; } else { LOBYTE(v96) = 3; if ( v68 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v68, v69, &v71, v77); operator delete(v68); } v68 = 0; v69 = 0; v70 = 0; LOBYTE(v96) = 0; `eh vector destructor iterator'(&v87, 0x1Cu, 3, sub_636A10); v61 = a2; v96 = -1; if ( a2 && !InterlockedDecrement(a2 + 1) && v61 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v61)(v61, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00612840) -------------------------------------------------------- char __thiscall sub_612840(void *this, volatile LONG *a2, _DWORD *a3) { _DWORD *v3; // edi int v4; // esi int (__thiscall *v5)(_DWORD *); // edx int v6; // ebx char *v7; // eax volatile LONG **v8; // eax volatile LONG *v9; // esi char result; // al int v11; // edi int v12; // ebx volatile LONG *v13; // eax int v14; // ecx int v15; // edx unsigned int v16; // ecx int v17; // ST24_4 int v18; // eax volatile LONG *v19; // eax volatile LONG v20; // edx const CHAR *v21; // eax volatile LONG *v22; // eax int v23; // ecx int v24; // edx unsigned int v25; // ecx int v26; // ST24_4 int v27; // eax volatile LONG *v28; // eax volatile LONG v29; // edx const CHAR *v30; // eax const char *v31; // eax int v32; // eax volatile LONG **v33; // edx int v34; // ST24_4 int v35; // eax volatile LONG *v36; // eax volatile LONG v37; // edx const CHAR *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG **v41; // eax volatile LONG *v42; // eax CHAR *v43; // eax CHAR *v44; // eax CHAR *v45; // eax char *v46; // eax char *v47; // eax char *v48; // eax volatile LONG *v49; // eax void (__thiscall *v50)(volatile LONG *, unsigned int); // edx int v51; // eax volatile LONG **v52; // edx int v53; // eax int v54; // ST24_4 int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx char *v58; // eax volatile LONG **v59; // eax volatile LONG **v60; // eax volatile LONG **v61; // eax volatile LONG **v62; // eax volatile LONG *v63; // eax void **v64; // eax void **v65; // eax void **v66; // eax void **v67; // eax void **v68; // eax void **v69; // eax volatile LONG **v70; // eax int v71; // eax int v72; // ecx int (*v73)(void); // edx int v74; // eax int v75; // eax volatile LONG **v76; // eax volatile LONG **v77; // eax volatile LONG **v78; // eax volatile LONG **v79; // eax volatile LONG *v80; // eax void **v81; // eax void **v82; // eax void **v83; // eax void **v84; // eax void **v85; // eax void **v86; // eax volatile LONG **v87; // eax int v88; // eax int v89; // ecx int (*v90)(void); // edx int v91; // eax int v92; // eax volatile LONG *v93; // esi int v94; // eax volatile LONG *v95; // eax int v96; // edi const CHAR *v97; // eax volatile LONG *v98; // esi int v99; // [esp+10h] [ebp-118h] void *v100; // [esp+14h] [ebp-114h] void *v101; // [esp+18h] [ebp-110h] int v102; // [esp+1Ch] [ebp-10Ch] char v103; // [esp+20h] [ebp-108h] char v104; // [esp+24h] [ebp-104h] int v105; // [esp+28h] [ebp-100h] int v106; // [esp+2Ch] [ebp-FCh] int v107; // [esp+30h] [ebp-F8h] int v108; // [esp+34h] [ebp-F4h] int v109; // [esp+38h] [ebp-F0h] void *v110; // [esp+3Ch] [ebp-ECh] unsigned int v111; // [esp+40h] [ebp-E8h] int v112; // [esp+44h] [ebp-E4h] int v113; // [esp+48h] [ebp-E0h] int v114; // [esp+4Ch] [ebp-DCh] volatile LONG **v115; // [esp+50h] [ebp-D8h] void *v116; // [esp+54h] [ebp-D4h] int v117; // [esp+64h] [ebp-C4h] unsigned int v118; // [esp+68h] [ebp-C0h] char v119[16]; // [esp+70h] [ebp-B8h] int v120; // [esp+80h] [ebp-A8h] int v121[2]; // [esp+84h] [ebp-A4h] char v122; // [esp+8Ch] [ebp-9Ch] int v123; // [esp+9Ch] [ebp-8Ch] int v124; // [esp+A0h] [ebp-88h] char v125; // [esp+A8h] [ebp-80h] int v126; // [esp+B8h] [ebp-70h] int v127; // [esp+BCh] [ebp-6Ch] char v128; // [esp+C4h] [ebp-64h] int v129; // [esp+124h] [ebp-4h] v3 = a3; v4 = (int)this; v5 = *(int (__thiscall **)(_DWORD *))(*a3 + 164); v129 = 0; v6 = v5(a3); v111 = (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); if ( a2 ) { v114 = (int)a2; if ( !InterlockedDecrement(a2 + 1) && v114 ) (**(void (__stdcall ***)(signed int))v114)(1); a2 = 0; } v114 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACAB50, "Game\\NPCKDQuest_TeamSelect.nif"); sub_8F66B0(v7, (int)&a2, v114); if ( !a2 ) return 0; v8 = sub_8FB140((int)a2, (int)"Panel03", (int)&v113, (int)&v112, 0); if ( !sub_8F43D0((volatile LONG **)v4, v113 - v6, v112 - v111, (int)v8, v3, 0, 0) ) { v9 = a2; v129 = -1; if ( a2 && !InterlockedDecrement(a2 + 1) ) { if ( v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); } return 0; } v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 164))(v4); v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 168))(v4); v115 = sub_8FB140((int)a2, (int)"ClsNor01", (int)&v113, (int)&v112, 0); sub_8FB650(v115, (int)a2, (int)"ClsClick01"); sub_8FB650(v115, (int)a2, (int)"ClsOver01"); sub_8FE0F0(v113 - v11, v112 - v12, (int)v115, v4, 0, 0, 0); v115 = sub_8FB140((int)a2, (int)"RedNor", (int)&v113, (int)&v112, 0); sub_8FB650(v115, (int)a2, (int)"RedClick"); sub_8FB650(v115, (int)a2, (int)"RedOver"); v13 = sub_8FE0F0(v113 - v11, v112 - v12, (int)v115, v4, 2, 0, 0); v14 = *v115[9]; v15 = *(_DWORD *)(v14 + 24); v16 = *(_DWORD *)(v14 + 20); v17 = (int)v13; v114 = v15; v111 = v16; v18 = sub_421050(7); v19 = sub_8F4A20(0, 0, v111, v114, v18, v17, 0, 0); v20 = *v19; v115 = (volatile LONG **)v19; (*(void (__thiscall **)(volatile LONG *, signed int))(v20 + 488))(v19, 5); v114 = (int)(*v115 + 118); v21 = sub_4090F0(-1190513665); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v114)(v115, v21); (*((void (__stdcall **)(_DWORD))*v115 + 60))(0); v115 = sub_8FB140((int)a2, (int)"BlueNor", (int)&v113, (int)&v112, 0); sub_8FB650(v115, (int)a2, (int)"BlueClick"); sub_8FB650(v115, (int)a2, (int)"BlueOver"); v22 = sub_8FE0F0(v113 - v11, v112 - v12, (int)v115, v4, 5, 0, 0); v23 = *v115[9]; v24 = *(_DWORD *)(v23 + 24); v25 = *(_DWORD *)(v23 + 20); v26 = (int)v22; v114 = v24; v111 = v25; v27 = sub_421050(7); v28 = sub_8F4A20(0, 0, v111, v114, v27, v26, 0, 0); v29 = *v28; v115 = (volatile LONG **)v28; (*(void (__thiscall **)(volatile LONG *, signed int))(v29 + 488))(v28, 5); v114 = (int)(*v115 + 118); v30 = sub_4090F0(-1203226614); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v114)(v115, v30); (*((void (__stdcall **)(_DWORD))*v115 + 60))(0); v115 = sub_8FB140((int)a2, (int)"BtnNor", (int)&v113, (int)&v112, 0); sub_8FB650(v115, (int)a2, (int)"BtnClick"); sub_8FB650(v115, (int)a2, (int)"BtnOver"); v114 = (int)sub_8FE0F0(v113 - v11, v112 - v12, (int)v115, v4, 7, 0, 0); *(_DWORD *)(v114 + 272) = dword_AD01E8; v31 = sub_40A910(675062371); sub_8F2EA0((void **)v114, v31); v32 = *v115[9]; v33 = *(volatile LONG ***)(v32 + 20); v34 = v114; v111 = *(_DWORD *)(v32 + 24); v115 = v33; v35 = sub_421050(7); v36 = sub_8F4A20(0, 0, (int)v115, v111, v35, v34, 0, 0); v37 = *v36; v115 = (volatile LONG **)v36; (*(void (__thiscall **)(volatile LONG *, signed int))(v37 + 488))(v36, 5); v114 = (int)(*v115 + 118); v38 = sub_40A910(137572017); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v114)(v115, v38); (*((void (__stdcall **)(_DWORD))*v115 + 60))(0); v39 = sub_8FB140((int)a2, (int)"Red_Select", (int)&v113, (int)&v112, 0); v40 = sub_8F3EB0(v113 - v11, v112 - v12, (int)v39, v4, 0, 0); *(_DWORD *)(v4 + 360) = v40; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 360) + 256))(0); v41 = sub_8FB140((int)a2, (int)"Blue_Select", (int)&v113, (int)&v112, 0); v42 = sub_8F3EB0(v113 - v11, v112 - v12, (int)v41, v4, 0, 0); *(_DWORD *)(v4 + 364) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 364) + 256))(0); v43 = (CHAR *)sub_40C190(-1734041703); v121[0] = 15; v120 = 0; v119[0] = 0; v114 = (int)(v43 + 1); sub_4018E0(v119, v43, strlen(v43)); LOBYTE(v129) = 1; v44 = (CHAR *)sub_40C190(-1766684000); v124 = 15; v123 = 0; v122 = 0; v114 = (int)(v44 + 1); sub_4018E0(&v122, v44, strlen(v44)); LOBYTE(v129) = 2; v45 = (CHAR *)sub_40C190(1319409301); v127 = 15; v126 = 0; v125 = 0; v114 = (int)(v45 + 1); sub_4018E0(&v125, v45, strlen(v45)); LOBYTE(v129) = 3; `eh vector constructor iterator'(&v128, 0x1Cu, 3, sub_401C00, sub_636A10); LOBYTE(v129) = 4; v111 = 0; do { v114 = (int)a2; v46 = sub_7549E0("Title%02dNor", v111 + 5); v115 = sub_8FB140(v114, (int)v46, (int)&v113, (int)&v112, 0); v114 = (int)a2; v47 = sub_7549E0("Title%02dClick", v111 + 5); sub_8FB650(v115, v114, (int)v47); v114 = (int)a2; v48 = sub_7549E0("Title%02dOver", v111 + 5); sub_8FB650(v115, v114, (int)v48); v49 = sub_8FE0F0(v113 - v11, v112 - v12, (int)v115, v4, 8, 0, 0); v50 = *(void (__thiscall **)(volatile LONG *, unsigned int))(*v49 + 520); v114 = (int)v49; v50(v49, v111); v51 = *v115[9]; v52 = *(volatile LONG ***)(v51 + 24); v53 = *(_DWORD *)(v51 + 20); v54 = v114; v115 = v52; v110 = (void *)v53; v55 = sub_421050(7); v56 = sub_8F4A20(0, 0, (int)v110, (int)v115, v55, v54, 0, 0); v57 = *v56; v115 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); v58 = &v119[28 * (v111 % 3)]; if ( (unsigned int)v121[7 * (v111 % 3)] >= 0x10 ) v58 = *(char **)v58; (*((void (__stdcall **)(char *))*v115 + 118))(v58); (*((void (__stdcall **)(_DWORD))*v115 + 60))(0); ++v111; } while ( v111 < 6 ); v100 = 0; v101 = 0; v102 = 0; v107 = 0; v108 = 0; LOBYTE(v129) = 5; v104 = 0; v105 = 0; v106 = 0; v59 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 1); *v59 = (volatile LONG *)1; v59[1] = a2; v115 = v59; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarNor02", 0xEu); LOBYTE(v129) = 6; v111 = (unsigned int)(v115 + 18); sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarClick02", 0x10u); LOBYTE(v129) = 7; sub_40B060((int *)v111, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarOver02", 0xFu); LOBYTE(v129) = 8; sub_40B060((int *)v111, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column09", 8u); LOBYTE(v129) = 9; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v115[1] = a2; v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column07", 8u); LOBYTE(v129) = 10; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v60 = v115; v115[1] = a2; *((_BYTE *)v60 + 88) = 1; v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column08", 8u); LOBYTE(v129) = 11; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v61 = v115; v115[1] = a2; *((_BYTE *)v61 + 88) = 1; sub_466680(&v100, 0); v62 = sub_8FB140((int)a2, (int)"Object01", (int)&v113, (int)&v112, 0); v63 = sub_466330(v113 - v11, v112 - v12, (int)v62, *(float *)&v4, (int **)&v100, 0, 0); *(_DWORD *)(v4 + 340) = v63; *((_DWORD *)v63 + 89) = 3; sub_465130(*(_DWORD **)(v4 + 340)); sub_464710(*(_DWORD **)(v4 + 340), dword_AD01E8); v64 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnNor02"); sub_85AB50(v64, "SlideBar_DnBtn02Nor"); v65 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnClick02"); sub_85AB50(v65, "SlideBar_DnBtn02Click"); v66 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnOver02"); sub_85AB50(v66, "SlideBar_DnBtn02Over"); v67 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnNor02"); sub_85AB50(v67, "SlideBar_UpBtn02Nor"); v68 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnClick02"); sub_85AB50(v68, "SlideBar_UpBtn02Click"); v69 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnOver02"); sub_85AB50(v69, "SlideBar_UpBtn02Over"); v70 = sub_8FB140((int)a2, (int)"SlideBar_SlideBtnMiddle", (int)&v113, (int)&v112, 0); v71 = sub_464310((int)a2, (int)"SlideBar02", "SlideBar_UpBtn02", "SlideBar_DnBtn02", (int)v70, 0, (_DWORD *)v4); *(_DWORD *)(v4 + 348) = v71; *(_DWORD *)(v71 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v4 + 348) + 304) = 1; v72 = *(_DWORD *)(v4 + 348); v73 = *(int (**)(void))(**(_DWORD **)(v4 + 348) + 168); v114 = **(_DWORD **)(v4 + 348); v110 = (void *)v72; v74 = v73(); v75 = (*(int (__stdcall **)(int))(*(_DWORD *)v110 + 164))(v74 - v12); (*(void (__thiscall **)(_DWORD, int))(v114 + 308))(*(_DWORD *)(v4 + 348), v75 - v11); if ( v100 != v101 ) { v110 = (void *)((int (__cdecl *)(void *, void *, void *, int))loc_40AC30)(v101, v101, v100, v109); ((void (__cdecl *)(void *, void *, char *, int))loc_40ACF0)(v110, v101, &v103, v109); v101 = v110; } v104 = 0; v105 = 0; v106 = 0; v76 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 1); *v76 = (volatile LONG *)1; v76[1] = a2; v115 = v76; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarNor03", 0xEu); LOBYTE(v129) = 12; v111 = (unsigned int)(v115 + 18); sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarClick03", 0x10u); LOBYTE(v129) = 13; sub_40B060((int *)v111, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "ColumnBarOver03", 0xFu); LOBYTE(v129) = 14; sub_40B060((int *)v111, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column10", 8u); LOBYTE(v129) = 15; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v115[1] = a2; v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column11", 8u); LOBYTE(v129) = 16; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v77 = v115; v115[1] = a2; *((_BYTE *)v77 + 88) = 1; v115 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v100, 2); *v115 = (volatile LONG *)2; v118 = 15; v117 = 0; LOBYTE(v116) = 0; sub_4018E0(&v116, "Column12", 8u); LOBYTE(v129) = 17; sub_40B060((int *)v115 + 18, (const void **)&v116); LOBYTE(v129) = 5; if ( v118 >= 0x10 ) operator delete(v116); v78 = v115; v118 = 15; v117 = 0; LOBYTE(v116) = 0; v115[1] = a2; *((_BYTE *)v78 + 88) = 1; sub_466680(&v100, 0); v79 = sub_8FB140((int)a2, (int)"Object02", (int)&v113, (int)&v112, 0); v80 = sub_466330(v113 - v11, v112 - v12, (int)v79, *(float *)&v4, (int **)&v100, 0, 0); *(_DWORD *)(v4 + 344) = v80; *((_DWORD *)v80 + 89) = 6; sub_465130(*(_DWORD **)(v4 + 344)); sub_464710(*(_DWORD **)(v4 + 344), dword_AD01E8); v81 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnNor03"); sub_85AB50(v81, "SlideBar_DnBtn03Nor"); v82 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnClick03"); sub_85AB50(v82, "SlideBar_DnBtn03Click"); v83 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_DnBtnOver03"); sub_85AB50(v83, "SlideBar_DnBtn03Over"); v84 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnNor03"); sub_85AB50(v84, "SlideBar_UpBtn03Nor"); v85 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnClick03"); sub_85AB50(v85, "SlideBar_UpBtn03Click"); v86 = (void **)(*(int (__stdcall **)(const char *))(*a2 + 72))("SlideBar_UpBtnOver03"); sub_85AB50(v86, "SlideBar_UpBtn03Over"); v87 = sub_8FB140((int)a2, (int)"SlideBar_SlideBtnMiddle01", (int)&v113, (int)&v112, 0); v88 = sub_464310((int)a2, (int)"SlideBar03", "SlideBar_UpBtn03", "SlideBar_DnBtn03", (int)v87, 0, (_DWORD *)v4); *(_DWORD *)(v4 + 352) = v88; *(_DWORD *)(v88 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v4 + 352) + 304) = 1; v89 = *(_DWORD *)(v4 + 352); v90 = *(int (**)(void))(**(_DWORD **)(v4 + 352) + 168); v114 = **(_DWORD **)(v4 + 352); v110 = (void *)v89; v91 = v90(); v92 = (*(int (__stdcall **)(int))(*(_DWORD *)v110 + 164))(v91 - v12); (*(void (__thiscall **)(_DWORD, int))(v114 + 308))(*(_DWORD *)(v4 + 352), v92 - v11); if ( sub_8F71E0((int)a2, (int)"JoinPlayerList", &v113, &v112, &v109, &v99) ) { v94 = sub_421050(7); v95 = sub_8F4A20(v113 - v11, v112 - v12, v109, v99, v94, v4, 0, 0); *(_DWORD *)(v4 + 356) = v95; (*(void (__thiscall **)(volatile LONG *, int *))(*v95 + 468))(v95, &dword_AA8D98); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 356) + 488))(1); v96 = **(_DWORD **)(v4 + 356); v97 = sub_40A910(696021910); (*(void (__thiscall **)(_DWORD, const CHAR *))(v96 + 472))(*(_DWORD *)(v4 + 356), v97); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 356) + 240))(*(_DWORD *)(v4 + 356), 0); LOBYTE(v129) = 4; if ( v100 ) { ((void (__cdecl *)(void *, void *, char *, int))loc_40ACF0)(v100, v101, &v103, v109); operator delete(v100); } v100 = 0; v101 = 0; v102 = 0; LOBYTE(v129) = 0; `eh vector destructor iterator'(v119, 0x1Cu, 6, sub_636A10); v129 = -1; if ( a2 ) { v98 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v98 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v98)(v98, 1); } } result = 1; } else { LOBYTE(v129) = 4; if ( v100 ) { ((void (__cdecl *)(void *, void *, char *, int))loc_40ACF0)(v100, v101, &v103, v109); operator delete(v100); } v100 = 0; v101 = 0; v102 = 0; LOBYTE(v129) = 0; `eh vector destructor iterator'(v119, 0x1Cu, 6, sub_636A10); v129 = -1; if ( a2 ) { v93 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v93 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v93)(v93, 1); } } result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // 612840: using guessed type int var_A4[2]; // 612840: using guessed type char var_B8[16]; //----- (00613D50) -------------------------------------------------------- void *__thiscall sub_613D50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &KingdomQuestPlayerList::`vftable'; *((_DWORD *)this + 58) = &KingdomQuestPlayerList::`vftable'; *((_DWORD *)this + 88) = -1; sub_8F3CC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ECA1C: using guessed type void *KingdomQuestPlayerList::`vftable'; // 9ECA3C: using guessed type void *KingdomQuestPlayerList::`vftable'; //----- (00613D90) -------------------------------------------------------- void *__thiscall sub_613D90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &KingdomQuestTeamList::`vftable'; *((_DWORD *)this + 58) = &KingdomQuestTeamList::`vftable'; *((_DWORD *)this + 92) = -1; sub_8F3CC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ECC48: using guessed type void *KingdomQuestTeamList::`vftable'; // 9ECC64: using guessed type void *KingdomQuestTeamList::`vftable'; //----- (00613DD0) -------------------------------------------------------- int __cdecl sub_613DD0(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACDA20 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACDA20 + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA20 + 4), v3); } // ACDA20: using guessed type int dword_ACDA20; //----- (00613E30) -------------------------------------------------------- void *__thiscall sub_613E30(void *this, char a2) { void *v2; // esi v2 = this; sub_60D3B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00613E60) -------------------------------------------------------- char __cdecl sub_613E60(const char *a1) { unsigned int v1; // edi v1 = 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v1) + 21), a1) ) { if ( (signed int)++v1 >= 28 ) return 0; } return *(_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v1); } // AC9C84: using guessed type int dword_AC9C84; //----- (00613F90) -------------------------------------------------------- int __thiscall sub_613F90(_DWORD *this, int a2) { int v2; // esi int v3; // edi int result; // eax this[99] = a2 - 1; v2 = 0; v3 = (int)(this + 94); do { result = (*(int (__stdcall **)(bool))(**(_DWORD **)v3 + 256))(a2 - 1 > v2++); v3 += 4; } while ( v2 < 5 ); return result; } //----- (00613FE0) -------------------------------------------------------- char __thiscall sub_613FE0(int this, int a2) { int v2; // esi char result; // al v2 = this; if ( !dword_AD036C ) *(_BYTE *)(this + 400) = 0; dword_AD036C = a2; result = sub_8D06A0((float *)(this + 348), flt_ACCFCC); *(float *)(v2 + 368) = 1.0; return result; } // ACCFCC: using guessed type float flt_ACCFCC; // AD036C: using guessed type int dword_AD036C; //----- (00614020) -------------------------------------------------------- char __thiscall sub_614020(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG **v10; // edi volatile LONG *v11; // eax int v12; // eax int v13; // edi int v14; // ebx int v15; // eax volatile LONG *v16; // eax int v17; // edi int v18; // eax volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // eax volatile LONG *v24; // ecx int v25; // edi int v26; // ebx int v27; // eax volatile LONG *v28; // eax int v29; // edi int v30; // eax int v31; // eax volatile LONG **v32; // ebx int v33; // edi char *v34; // eax volatile LONG **v35; // eax volatile LONG *v36; // edi volatile LONG *v37; // edi int v38; // eax void (__thiscall ***v39)(_DWORD, signed int); // esi volatile LONG *v40; // [esp+4Ch] [ebp-1Ch] int v41; // [esp+50h] [ebp-18h] int v42; // [esp+54h] [ebp-14h] int v43; // [esp+58h] [ebp-10h] int v44; // [esp+64h] [ebp-4h] int v45; // [esp+70h] [ebp+8h] v2 = (int)this; v43 = 0; v44 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v40 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v43; v44 = -1; if ( !v43 || InterlockedDecrement((volatile LONG *)(v43 + 4)) ) return 0; v5 = v43 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\QuestTime.nif"); sub_8F66B0(v8, (int)&v43, v7); if ( !v43 ) return 0; v9 = sub_8FB140(v43, (int)"Frame", (int)&v41, (int)&v42, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"KQuestTimeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v43; v44 = -1; if ( !v43 || InterlockedDecrement((volatile LONG *)(v43 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = sub_8FB140(v43, (int)"KillCount_Off", (int)&v41, (int)&v42, 0); sub_8FB650(v10, v43, (int)"KillCount_On"); sub_8FB650(v10, v43, (int)"Reward"); v11 = sub_8F3EB0(v41, v42, (int)v10, v2, 0, 0); *(_DWORD *)(v2 + 412) = v11; *((_DWORD *)v11 + 68) = dword_AD01E8; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 412) + 256))(1); v12 = *v10[9]; v13 = *(_DWORD *)(v12 + 24); v14 = *(_DWORD *)(v12 + 20); v15 = sub_421050(0); v16 = sub_8F4A20(v41, v42, v14, v13, v15, v2, 0, 0); *(_DWORD *)(v2 + 408) = v16; (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 5); v17 = **(_DWORD **)(v2 + 408); v18 = sub_421050(1); (*(void (__thiscall **)(_DWORD, int))(v17 + 452))(*(_DWORD *)(v2 + 408), v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 240))(0); sub_8F2EA0(*(void ***)(v2 + 412), "-"); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 408) + 472))(&unk_9ED0C6); v19 = sub_8FB140(v43, (int)"Panel01", (int)&v41, (int)&v42, 0); v20 = sub_8F3EB0(v41, v42, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v21 = sub_8FB140(v43, (int)"Time", (int)&v41, (int)&v42, v40); v22 = v21; v23 = sub_8F3EB0(v41, v42, (int)v21, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v24 = v22[9]; v25 = *(_DWORD *)(*v24 + 24); v26 = *(_DWORD *)(*v24 + 20); v27 = sub_421050(0); v28 = sub_8F4A20(v41, v42 + 2, v26, v25, v27, v2, 0, 0); *(_DWORD *)(v2 + 344) = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); v29 = **(_DWORD **)(v2 + 344); v30 = sub_421050(6); (*(void (__thiscall **)(_DWORD, int))(v29 + 452))(*(_DWORD *)(v2 + 344), v30); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("00:00"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v31 = 0; v32 = (volatile LONG **)(v2 + 376); do { v33 = v43; v45 = v31 + 1; v34 = sub_7549E0("Life%02d", v31 + 1); v35 = sub_8FB140(v33, (int)v34, (int)&v41, (int)&v42, v40); v36 = sub_8F3EB0(v41, v42, (int)v35, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 256))(v36, 0); v31 = v45; *v32 = v36; ++v32; } while ( v45 < 5 ); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 1.0, 0.0); v37 = *(volatile LONG **)v2; v38 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 164))(v2, 200); (*((void (__thiscall **)(int, int))v37 + 77))(v2, v38); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 520))(v2, 1); sub_613F90((_DWORD *)v2, 0); v44 = -1; if ( v43 ) { v39 = (void (__thiscall ***)(_DWORD, signed int))v43; if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) { if ( v39 ) (**v39)(v39, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00614470) -------------------------------------------------------- void __thiscall sub_614470(float *this, float a2) { float *v2; // esi int v3; // ecx int v4; // edi char *v5; // eax void (__stdcall *v6)(int *); // edx _DWORD *v7; // edi const CHAR *v8; // eax v2 = this; if ( !dword_AD036C ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 256))(0); return; } if ( sub_8D0630(this + 87, a2) ) { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 256))(v2, 1); --dword_AD036C; if ( *((_DWORD *)v2 + 101) <= 0 ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 103) + 492))(2); } else { (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 102) + 256))(1); v3 = *((_DWORD *)v2 + 103); if ( dword_AD036C & 1 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 492))(1); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 102) + 468))(&dword_AA8CB8); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 492))(0); (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 102) + 468))(&dword_AA8C88); } sub_9074F0(*(_DWORD *)(*((_DWORD *)v2 + 102) + 288), 1); } } (*(void (__stdcall **)(int *))(**((_DWORD **)v2 + 86) + 468))(&dword_AA8C68); v4 = **((_DWORD **)v2 + 86); v5 = sub_7549E0("%02d:%02d", dword_AD036C / 0x3Cu % 0x3C, dword_AD036C % 0x3Cu); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(*((_DWORD *)v2 + 86), v5); if ( (unsigned int)dword_AD036C >= 0x3C ) { if ( (unsigned int)dword_AD036C >= 0x12C ) goto LABEL_16; v6 = *(void (__stdcall **)(int *))(**((_DWORD **)v2 + 86) + 468); } else { v6 = *(void (__stdcall **)(int *))(**((_DWORD **)v2 + 86) + 468); if ( !(dword_AD036C & 1) ) { v6(&dword_AA8C68); goto LABEL_16; } } v6(&dword_AA8C88); LABEL_16: if ( !*((_BYTE *)v2 + 400) && dword_AD036C == 300 ) { v7 = (_DWORD *)*((_DWORD *)v2 + 74); v8 = sub_40C190(-1159058882); sub_492060(v7, (int)v8); *((_BYTE *)v2 + 400) = 1; } if ( dword_AD036C == 60 ) sub_6BA650(&dword_AB6520, 25); } // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; // AA8CB8: using guessed type int dword_AA8CB8; // AD036C: using guessed type int dword_AD036C; //----- (00614660) -------------------------------------------------------- void __thiscall sub_614660(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // edi char *v5; // eax int v6; // ST04_4 char *v7; // eax char *v8; // eax const char *v9; // eax v2 = this; v3 = (int *)this[102]; this[101] = a2; if ( v3 ) { v4 = *v3; v5 = sub_7549E0("%d", a2); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(v2[102], v5); v6 = v2[101]; v7 = (char *)sub_40A910(-1344612793); v8 = sub_7549E0(v7, v6); sub_8F2EA0((void **)v2[103], v8); } if ( v2[101] <= 0 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[102] + 256))(0); v9 = sub_40A910(2025904376); sub_8F2EA0((void **)v2[103], v9); } } //----- (00614700) -------------------------------------------------------- int __cdecl sub_614700(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A0u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &KQuestTimeWin::`vftable'; *(_DWORD *)(v2 + 232) = &KQuestTimeWin::`vftable'; sub_8D0610((_BYTE *)(v2 + 348)); *(_DWORD *)(v2 + 396) = 0; *(_BYTE *)(v2 + 400) = 0; *(_DWORD *)(v2 + 404) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ED13C: using guessed type void *KQuestTimeWin::`vftable'; // 9ED15C: using guessed type void *KQuestTimeWin::`vftable'; //----- (00614860) -------------------------------------------------------- void *__thiscall sub_614860(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &KQuestTimeWin::`vftable'; *((_DWORD *)this + 58) = &KQuestTimeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ED13C: using guessed type void *KQuestTimeWin::`vftable'; // 9ED15C: using guessed type void *KQuestTimeWin::`vftable'; //----- (006149A0) -------------------------------------------------------- int __thiscall sub_6149A0(int this, unsigned int a2) { int v2; // esi int v3; // edi int v4; // ebx unsigned int v5; // eax int v6; // ebx int v7; // edi int v8; // ebx int v9; // edi int v10; // edi void (__thiscall *v11)(int, int); // eax int v12; // ecx int v13; // eax int v14; // ecx int v15; // ebx int v16; // eax int v17; // ebx int v18; // eax int v20; // [esp+Ch] [ebp-14h] int v21; // [esp+10h] [ebp-10h] int v22; // [esp+14h] [ebp-Ch] int v23; // [esp+18h] [ebp-8h] v2 = this; v3 = *(_DWORD *)(this + 332); v4 = (*(int (**)(void))(**(_DWORD **)(this + 328) + 144))(); v5 = v4 + (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 144))(v3) + 3; v6 = a2; if ( v5 > a2 ) { v7 = *(_DWORD *)(v2 + 332); v8 = (*(int (**)(void))(**(_DWORD **)(v2 + 328) + 144))(); v6 = v8 + (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 144))(v7) + 3; } v9 = v6 - (*(int (**)(void))(**(_DWORD **)(v2 + 328) + 144))(); v10 = v9 - (*(int (**)(void))(**(_DWORD **)(v2 + 332) + 144))(); v11 = *(void (__thiscall **)(int, int))(*(_DWORD *)v2 + 152); *(_DWORD *)(v2 + 324) = v6; v11(v2, v6); v22 = *(_DWORD *)(v2 + 324); v12 = *(_DWORD *)(v2 + 328); v20 = 0; v21 = 0; v13 = (*(int (**)(void))(*(_DWORD *)v12 + 148))(); v14 = *(_DWORD *)(v2 + 340); v23 = v13; (*(void (__stdcall **)(int *))(*(_DWORD *)v14 + 460))(&v20); v15 = **(_DWORD **)(v2 + 336); v16 = (*(int (**)(void))(**(_DWORD **)(v2 + 328) + 144))(); (*(void (__thiscall **)(_DWORD, int))(v15 + 172))(*(_DWORD *)(v2 + 336), v16); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 336) + 468))(v10); v17 = **(_DWORD **)(v2 + 332); v18 = (*(int (**)(void))(**(_DWORD **)(v2 + 328) + 144))(); return (*(int (__thiscall **)(_DWORD, int))(v17 + 172))(*(_DWORD *)(v2 + 332), v10 + v18); } //----- (00614B10) -------------------------------------------------------- int __thiscall sub_614B10(_DWORD **this, int a2) { int result; // eax if ( !a2 ) return (*(int (__stdcall **)(signed int, signed int, signed int, signed int))(*this[85] + 464))(255, 255, 255, 255); if ( a2 == 1 ) return (*(int (__stdcall **)(_DWORD, signed int, signed int, signed int))(*this[85] + 464))(0, 255, 204, 255); result = a2 - 2; if ( a2 == 2 ) result = (*(int (__stdcall **)(signed int, signed int, _DWORD, signed int))(*this[85] + 464))(246, 255, 0, 255); return result; } //----- (00614BE0) -------------------------------------------------------- int __thiscall sub_614BE0(_DWORD **this, int a2) { _DWORD **v2; // esi int result; // eax int v4; // [esp+0h] [ebp-4h] v2 = this; if ( a2 ) { if ( a2 == 1 ) { (*(void (__stdcall **)(_DWORD, signed int, signed int, signed int, int))(*this[83] + 464))(0, 255, 204, 255, v4); result = (*(int (__cdecl **)(signed int))(*v2[81] + 492))(1); } else { result = a2 - 2; if ( a2 == 2 ) { (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*this[83] + 464))(54, 255, 0, 255, v4); result = (*(int (__cdecl **)(signed int))(*v2[81] + 492))(2); } } } else { (*(void (__stdcall **)(signed int, signed int, _DWORD, signed int, int))(*this[83] + 464))(246, 255, 0, 255, v4); result = (*(int (__cdecl **)(_DWORD))(*v2[81] + 492))(0); } return result; } //----- (00614E70) -------------------------------------------------------- bool __cdecl sub_614E70(int a1, int a2) { unsigned int v2; // eax unsigned int v3; // ecx bool result; // al v2 = dword_AD0370[*(unsigned __int8 *)(a1 + 44)]; v3 = dword_AD0370[*(unsigned __int8 *)(a2 + 44)]; if ( v2 == v3 ) result = 0; else result = v2 < v3; return result; } // AD0370: using guessed type int dword_AD0370[]; //----- (00614EA0) -------------------------------------------------------- char __cdecl sub_614EA0(int a1, int a2) { return *(_BYTE *)(a1 + 47) == *(_BYTE *)(a2 + 47) ? 0 : *(_BYTE *)(a1 + 47); } //----- (00614EC0) -------------------------------------------------------- char __cdecl sub_614EC0(int a1, int a2) { return *(_BYTE *)(a1 + 45) == *(_BYTE *)(a2 + 45) ? 0 : *(_BYTE *)(a1 + 45); } //----- (00614EE0) -------------------------------------------------------- char __cdecl sub_614EE0(int a1, int a2) { return *(_BYTE *)(a1 + 46) == *(_BYTE *)(a2 + 46) ? 0 : *(_BYTE *)(a1 + 46); } //----- (00614F00) -------------------------------------------------------- bool __cdecl sub_614F00(int a1, int a2) { char v2; // al bool result; // al v2 = *(_BYTE *)(a1 + 44); if ( v2 == *(_BYTE *)(a2 + 44) ) result = 0; else result = v2 == 3; return result; } //----- (00614F20) -------------------------------------------------------- BOOL __cdecl sub_614F20(int a1, int a2) { return *(_DWORD *)(a2 + 36) < *(_DWORD *)(a1 + 36); } //----- (00614F40) -------------------------------------------------------- bool __cdecl sub_614F40(int a1, int a2) { unsigned int v2; // eax unsigned int v3; // ecx bool result; // al v2 = dword_AD03A0[*(_DWORD *)(a1 + 40)]; v3 = dword_AD03A0[*(_DWORD *)(a2 + 40)]; if ( v2 == v3 ) result = 0; else result = v2 < v3; return result; } // AD03A0: using guessed type int dword_AD03A0[]; //----- (00614FC0) -------------------------------------------------------- char __thiscall sub_614FC0(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi char result; // al __int16 v4; // [esp+4h] [ebp-4h] v2 = this; result = sub_464B60(this[86], a2, &v4); if ( result ) { LOWORD(a2) = *((_WORD *)v2 + 176); HIWORD(a2) = v4; sub_6F3D10(&off_AB7F2C, 17, 15, &a2, 4u); result = sub_8F86A0(&unk_BA6B10, v2); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00615020) -------------------------------------------------------- char __thiscall sub_615020(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[86], v2[87]); return v3; } //----- (00615080) -------------------------------------------------------- char __cdecl sub_615080(char *a1, int a2, int a3) { char *v3; // ebx char result; // al int v5; // esi int *v6; // eax int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx char v11; // al char *v12; // ecx int v13; // [esp+10h] [ebp-44h] int v14; // [esp+14h] [ebp-40h] int v15; // [esp+18h] [ebp-3Ch] int v16; // [esp+1Ch] [ebp-38h] int v17; // [esp+20h] [ebp-34h] char v18; // [esp+24h] [ebp-30h] v3 = a1; result = *a1; v5 = 0; if ( *a1 ) { while ( 1 ) { if ( v5 >= a3 - 1 ) goto LABEL_12; if ( result != 37 ) break; if ( *++v3 == 110 ) { v6 = (int *)sub_680810(byte_AD9238); v7 = v6[1]; v13 = *v6; v8 = v6[2]; v14 = v7; v9 = v6[3]; v15 = v8; v10 = v6[4]; v11 = v13; v16 = v9; v17 = v10; v18 = 0; if ( (_BYTE)v13 ) { v12 = (char *)&v13 - v5; do { *(_BYTE *)(a2 + v5) = v11; v11 = v12[v5++ + 1]; } while ( v11 ); } goto LABEL_10; } LABEL_11: result = *v3; if ( !*v3 ) goto LABEL_12; } *(_BYTE *)(a2 + v5++) = result; LABEL_10: ++v3; goto LABEL_11; } LABEL_12: *(_BYTE *)(a2 + v5) = 0; return result; } //----- (00615120) -------------------------------------------------------- char __thiscall sub_615120(int *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7) { int v7; // ebx int *v8; // esi char result; // al volatile LONG *v10; // eax int *v11; // ecx int v12; // edi int v13; // eax volatile LONG *v14; // eax int v15; // edi int v16; // eax int v17; // edi int v18; // eax v7 = *(_DWORD *)(a5 + 224); v8 = this; result = sub_8FE550(this, a2, a3, 1, v7, a6, a7, 0, 0); if ( result ) { v10 = sub_8F3EB0(0, 0, a4, (int)v8, 0, 0); v8[81] = (int)v10; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = (int *)v8[81]; v12 = *v11; v13 = (*(int (**)(void))(*v11 + 148))(); (*(void (__thiscall **)(int, unsigned int))(v12 + 176))(v8[81], (unsigned int)(v7 - v13) >> 1); v14 = sub_8F4A20(0, 0, 1, v7, a5, (int)v8, 0, 0); v8[83] = (int)v14; (*(void (__thiscall **)(volatile LONG *, signed int, signed int, _DWORD, signed int))(*v14 + 464))( v14, 246, 255, 0, 255); v15 = *(_DWORD *)v8[83]; v16 = (*(int (**)(void))(*(_DWORD *)v8[81] + 144))(); (*(void (__thiscall **)(int, int))(v15 + 172))(v8[83], v16 + 3); (*(void (__stdcall **)(signed int))(*(_DWORD *)v8[83] + 488))(4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8[83] + 240))(0); v17 = *v8; v18 = (*(int (**)(void))(*(_DWORD *)v8[81] + 144))(); (*(void (__thiscall **)(int *, int))(v17 + 152))(v8, v18); result = 1; } return result; } //----- (00615260) -------------------------------------------------------- int __stdcall sub_615260(int a1, unsigned int *a2) { _DWORD *v2; // eax unsigned int v3; // edx unsigned int *v4; // ecx unsigned int v5; // ecx _DWORD *v6; // ecx int result; // eax unsigned int v8; // ebx _DWORD *v9; // esi int v10; // eax int v11; // [esp+10h] [ebp+8h] v2 = *(_DWORD **)(a1 + 4); v3 = 0; if ( v2 ) { do { v4 = (unsigned int *)v2[2]; v2 = (_DWORD *)*v2; if ( *((_BYTE *)v4 + 8) ) { v5 = *v4; if ( v3 < v5 ) v3 = v5; } } while ( v2 ); if ( *a2 < v3 ) *a2 = v3; } v6 = *(_DWORD **)(a1 + 4); result = 0; v11 = 0; if ( v6 ) { v8 = *a2; do { v9 = (_DWORD *)v6[2]; v6 = (_DWORD *)*v6; if ( *v9 / v8 && *v9 != v8 ) v10 = v9[1] * (*v9 / v8 + 1); else v10 = v9[1]; v11 += v10; } while ( v6 ); result = v11; } return result; } //----- (006152E0) -------------------------------------------------------- int __thiscall sub_6152E0(_DWORD *this, int a2, unsigned int *a3, int a4) { _DWORD *v4; // esi int v5; // eax float v6; // ST1C_4 float *v7; // eax int result; // eax v4 = this; v5 = this[this[72] + 73]; *(_WORD *)(v5 + 28) &= 0xFFFEu; v6 = (double)*a3; v7 = (float *)v4[v4[72] + 73]; v7[22] = 0.0; v7[23] = v6; v7[24] = 0.0; sub_907630((void *)v4[v4[72] + 73], 0, 0, a2, 10); (*(void (__stdcall **)(int))(*(_DWORD *)v4[v4[72] + 73] + 148))(a4); result = (*(int (**)(void))(*(_DWORD *)v4[v4[72] + 73] + 160))(); *a3 += result; ++v4[72]; return result; } //----- (006153A0) -------------------------------------------------------- void __stdcall sub_6153A0(int a1, unsigned int *a2, unsigned int *a3) { unsigned int *v3; // edi unsigned int v4; // ebx unsigned int v5; // esi unsigned int v6; // edx float v7; // ST14_4 unsigned int v8; // eax _DWORD *v9; // ebx unsigned int v10; // esi int v11; // eax unsigned int v12; // eax unsigned int v13; // eax unsigned int v14; // eax unsigned int v15; // [esp+10h] [ebp-8h] signed int v16; // [esp+24h] [ebp+Ch] v3 = a2; v4 = *a2; v15 = 0; v16 = 0; v5 = v4; do { if ( v5 <= 5 ) break; v6 = *v3; *v3; v7 = (double)*v3 / (double)*a3; if ( v7 <= 2.4000001 ) { v5 = v4 - v6; v15 = *v3; *v3 = v6 + ((v4 - v6) >> 1); } else { v4 = *v3; v5 = v6 - v15; *v3 = v6 - ((v6 - v15) >> 1); } sub_615260(a1, v3); *a3 = v8; ++v16; } while ( v16 < 50 ); v9 = *(_DWORD **)(a1 + 4); v10 = 99999999; if ( v9 ) { do { v11 = v9[2]; v9 = (_DWORD *)*v9; if ( *(_BYTE *)(v11 + 8) ) { v12 = *(_DWORD *)v11; if ( v10 > v12 ) v10 = v12; } else if ( *v3 && v10 > *(_DWORD *)v11 % *v3 ) { v10 = *(_DWORD *)v11 % *v3; } } while ( v9 ); if ( v10 < 0x3C ) { *v3 += v10 + 40; sub_615260(a1, v3); *a3 = v13; } } if ( *v3 > 0x258 ) { *v3 = 600; sub_615260(a1, v3); *a3 = v14; } } // 615260: using guessed type double __stdcall sub_615260(_DWORD, _DWORD); //----- (006154E0) -------------------------------------------------------- int __thiscall sub_6154E0(volatile LONG *this, _BYTE *a2) { volatile LONG *v2; // edi int v3; // eax _DWORD *v4; // esi int v5; // eax const char *v6; // eax v2 = this; if ( dword_BA6AB4 >= 1 && (*(unsigned __int8 (__stdcall **)(LONG, LONG))(*this + 332))(pt.x, pt.y) == 1 ) { v3 = *((_DWORD *)v2 + 111); if ( v3 ) { if ( *(_DWORD *)(v3 + 304) == 1 ) { v4 = *(_DWORD **)(v3 + 308); if ( v4 ) { v5 = sub_85AA60(v4, "action"); if ( v5 ) { v6 = *(const char **)(v5 + 12); if ( v6 ) { if ( !strncmp(v6, "quest_ack", 9u) ) sub_8F2C80(v2, 77777, (int)v4); } } } } } } return sub_8F1140((void *)v2, a2); } // BA6AB4: using guessed type int dword_BA6AB4; //----- (00615580) -------------------------------------------------------- int __thiscall sub_615580(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // esi int result; // eax v4 = this; if ( a2 == 15 ) { if ( this[1] ) { (*(void (__stdcall **)(signed int, int, _DWORD **))(*this[1] + 4))(15, a3, this); if ( v4[1] ) (*(void (__stdcall **)(signed int, int, _DWORD **))(*v4[1] + 20))(15, a3, v4); } result = ((int (__thiscall *)(_DWORD **, signed int, int, _DWORD **))(*v4)[5])(v4, 15, a3, v4); } return result; } //----- (006155D0) -------------------------------------------------------- _DWORD *__thiscall sub_6155D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &NpcDialogWin::`vftable'; v1[58] = &NpcDialogWin::`vftable'; v1[89] = 0; sub_8D0610((_BYTE *)v1 + 372); *((_WORD *)v1 + 180) = -1; v1[92] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EE42C: using guessed type void *NpcDialogWin::`vftable'; // 9EE44C: using guessed type void *NpcDialogWin::`vftable'; //----- (006156F0) -------------------------------------------------------- void __thiscall sub_6156F0(int this, float a2) { *(_BYTE *)(this + 362) = 1; *(float *)(this + 364) = flt_ACCFCC + a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00615710) -------------------------------------------------------- int __thiscall sub_615710(float *this, int a2) { float *v2; // edi void *v3; // esi int result; // eax double v5; // st7 int v6; // [esp+8h] [ebp-Ch] BYTE TestChar; // [esp+10h] [ebp-4h] v2 = this; *((_BYTE *)this + 362) = 0; v3 = sub_6CD770(); unknown_libname_14(&TestChar); sub_6CE010(&TestChar, (int)v3, a2); result = sub_6CE0D0((int)&TestChar, (int)&v6); if ( result != 11 ) { while ( result != 15 ) { result = sub_6CE0D0((int)&TestChar, (int)&v6); if ( result == 11 ) return result; } v5 = (double)v6; *((_BYTE *)v2 + 362) = 1; v2[91] = v5 + flt_ACCFCC; } return result; } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (00615790) -------------------------------------------------------- char __thiscall sub_615790(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax int v4; // edx v1 = this; v2 = this[87]; *(_BYTE *)(v2 + 512) = 0; (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 508) + 256))(*(_DWORD *)(v2 + 508), 0); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v1[89] + 260))() == 1 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[89] + 256))(0); v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v4 = *(_DWORD *)(v1[87] + 444); if ( v4 ) { if ( *(_DWORD *)(v4 + 304) > 1 ) LOBYTE(v3) = sub_4A8140(v3, 1); } } return v3; } //----- (00615820) -------------------------------------------------------- char __thiscall sub_615820(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax _DWORD *v3; // esi _DWORD *v4; // esi int v5; // eax v1 = this; if ( ((unsigned __int8 (*)(void))(*this)[65])() == 1 ) sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); (*(void (__stdcall **)(_DWORD))(*v1[89] + 256))(0); sub_8F86A0(&unk_BA6B10, v1); v2 = v1[87]; if ( v2 ) *((_BYTE *)v2 + 504) = 0; v3 = v1[87]; if ( v3 ) { v4 = (_DWORD *)v3[124]; if ( v4 ) sub_8F86A0(&unk_BA6B10, v4); } v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) LOBYTE(v5) = sub_4A8140(v5, 1); return v5; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00615900) -------------------------------------------------------- char __thiscall sub_615900(int *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8) { int *v8; // esi int v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // eax int v14; // edi int v15; // ST10_4 int v16; // eax volatile LONG *v17; // eax v8 = this; if ( !a4 && !a5 && !a6 ) return 0; v10 = *(_DWORD *)(**(_DWORD **)(a6 + 36) + 20) + *(_DWORD *)(**(_DWORD **)(a5 + 36) + 20) + *(_DWORD *)(**(_DWORD **)(a4 + 36) + 20); this[81] = v10; if ( !sub_8FE550(this, a2, a3, v10, *(_DWORD *)(**(_DWORD **)(a4 + 36) + 24), a7, a8, 0, 0) ) return 0; v11 = sub_8F3EB0(0, 0, a4, (int)v8, 0, 0); v8[82] = (int)v11; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = sub_8F3EB0(0, 0, a5, (int)v8, 0, 0); v8[83] = (int)v12; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = sub_8F3EB0(0, 0, a6, (int)v8, 0, 0); v8[84] = (int)v13; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = v8[82]; v15 = sub_421050(2); v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 148))(v14); v17 = sub_8F4A20(a2, a3, v8[81], v16, v15, (int)v8, 0, 0); v8[85] = (int)v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8[85] + 240))(0); sub_6149A0((int)v8, v8[81]); return 1; } //----- (00615AD0) -------------------------------------------------------- int __thiscall sub_615AD0(_DWORD **this, int a2, char a3) { int v3; // esi int result; // eax int v5; // ebx int v6; // edi int v7; // eax int v8; // ebx int v9; // eax v3 = (int)this; result = (*(int (__stdcall **)(int))(*this[85] + 472))(a2); if ( a3 ) { v5 = *(_DWORD *)(v3 + 332); v6 = *(_DWORD *)(*(_DWORD *)(v3 + 340) + 288); v7 = (*(int (**)(void))(**(_DWORD **)(v3 + 328) + 144))(); v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 144))(v5) + v7; v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 156))(v6); result = sub_6149A0(v3, v8 + v9); } return result; } //----- (00615B50) -------------------------------------------------------- int __thiscall sub_615B50(_DWORD *this, LPCSTR lpString) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int v5; // eax struct tagSIZE psizl; // [esp+8h] [ebp-1Ch] int v8; // [esp+10h] [ebp-14h] int v9; // [esp+14h] [ebp-10h] struct tagSIZE v10; // [esp+18h] [ebp-Ch] v2 = this; sub_4593C0(*(_DWORD **)(*(_DWORD *)(this[83] + 288) + 312), lpString, strlen(lpString), &psizl); v10 = psizl; v3 = v2[83]; v8 = 0; v9 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v3 + 460))(&v8); (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)v2[83] + 472))(lpString); v4 = *v2; v5 = (*(int (**)(void))(*(_DWORD *)v2[81] + 144))(); (*(void (__thiscall **)(_DWORD *, int))(v4 + 152))(v2, v5 + psizl.cx + 3); return (*(int (__thiscall **)(_DWORD *, LONG))(*v2 + 156))(v2, psizl.cy); } //----- (00615C20) -------------------------------------------------------- int __thiscall sub_615C20(_DWORD *this, LPCSTR lpString) { _DWORD *v2; // esi struct tagSIZE psizl; // [esp+8h] [ebp-8h] v2 = this; sub_4593C0(*(_DWORD **)(*(_DWORD *)(this[83] + 288) + 312), lpString, strlen(lpString), &psizl); return psizl.cx + (*(int (**)(void))(*(_DWORD *)v2[81] + 144))(); } //----- (00615C80) -------------------------------------------------------- void __thiscall sub_615C80(_DWORD *this, int a2, LPCSTR lpString, int a4, int a5) { _DWORD *v5; // ecx LPCSTR v6; // ebx CHAR v7; // dl const CHAR *v8; // eax LONG v9; // eax LONG *v10; // eax LONG *v11; // edi _DWORD *v12; // eax _DWORD *v13; // ecx LONG *v14; // ecx LONG *v15; // eax struct tagSIZE psizl; // [esp+0h] [ebp-10h] _DWORD *v17; // [esp+8h] [ebp-8h] _DWORD *v18; // [esp+Ch] [ebp-4h] v18 = this; v5 = (_DWORD *)this[91]; v17 = v5; if ( v5 ) { v6 = lpString; if ( lpString ) { v7 = *lpString; v8 = lpString; if ( *lpString ) { do { if ( v7 == 10 ) { if ( v8 >= v6 ) { v9 = v5[56]; psizl.cx = 1; psizl.cy = v9; } else { sub_4593C0(v5, v8, v6 - v8, &psizl); } v10 = (LONG *)operator new(0xCu); v11 = v10; v10[1] = psizl.cy + v18[92]; *v10 = psizl.cx; *((_BYTE *)v10 + 8) = 0; v12 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); v12[2] = v11; *v12 = 0; v12[1] = *(_DWORD *)(a2 + 8); v13 = *(_DWORD **)(a2 + 8); if ( v13 ) *v13 = v12; else *(_DWORD *)(a2 + 4) = v12; v14 = (LONG *)a4; ++*(_DWORD *)(a2 + 12); *(_DWORD *)(a2 + 8) = v12; if ( psizl.cx > (unsigned int)*v14 ) *v14 = psizl.cx; *(_DWORD *)a5 += psizl.cy; v5 = v17; v8 = ++v6; } else { ++v6; } v7 = *v6; } while ( *v6 ); if ( v8 < v6 ) { sub_4593C0(v5, v8, v6 - v8, &psizl); v15 = (LONG *)operator new(0xCu); v15[1] = psizl.cy + v18[92]; *v15 = psizl.cx; lpString = (LPCSTR)v15; *((_BYTE *)v15 + 8) = 0; sub_6B9900((_DWORD *)a2, &lpString); if ( (unsigned int)psizl.cx > *(_DWORD *)a4 ) *(_DWORD *)a4 = psizl.cx; *(_DWORD *)a5 += psizl.cy; } } } } } //----- (00615DC0) -------------------------------------------------------- _DWORD *__thiscall sub_615DC0(_DWORD *this, _DWORD *a2, unsigned __int16 a3, int a4, unsigned int *a5, _DWORD *a6) { _DWORD *v6; // ebx _DWORD *result; // eax int v8; // esi _DWORD *v9; // ecx const char *v10; // ecx unsigned int v11; // eax const char *v12; // esi char *v13; // edi char v14; // cl _WORD *v15; // edi char v16; // al int i; // eax _DWORD *v18; // eax int *v19; // eax int v20; // edx int v21; // ecx int v22; // edx unsigned int v23; // eax char *v24; // edi char v25; // cl _WORD *v26; // edi char v27; // al int v28; // kr00_4 LONG *v29; // eax unsigned int *v30; // edi int v31; // esi unsigned int v32; // eax int *v33; // esi int (*v34)(void); // edx int v35; // kr04_4 LONG *v36; // eax unsigned int v37; // ecx _DWORD *v38; // ecx int v39; // kr08_4 LONG *v40; // eax int v41; // esi unsigned int v42; // eax int v43; // kr0C_4 LONG *v44; // eax int v45; // esi unsigned int *v46; // ecx unsigned int v47; // eax struct tagSIZE v48; // [esp+Ch] [ebp-484h] struct tagSIZE v49; // [esp+14h] [ebp-47Ch] struct tagSIZE psizl; // [esp+1Ch] [ebp-474h] struct tagSIZE v51; // [esp+24h] [ebp-46Ch] LPCSTR lpString; // [esp+2Ch] [ebp-464h] size_t v53; // [esp+30h] [ebp-460h] BYTE TestChar; // [esp+34h] [ebp-45Ch] unsigned int *v55; // [esp+38h] [ebp-458h] _DWORD *v56; // [esp+3Ch] [ebp-454h] _DWORD *v57; // [esp+40h] [ebp-450h] _DWORD *v58; // [esp+44h] [ebp-44Ch] LONG *v59; // [esp+48h] [ebp-448h] CHAR String; // [esp+4Ch] [ebp-444h] int v61; // [esp+44Ch] [ebp-44h] int v62; // [esp+450h] [ebp-40h] int v63; // [esp+454h] [ebp-3Ch] int v64; // [esp+458h] [ebp-38h] int v65; // [esp+45Ch] [ebp-34h] char v66; // [esp+460h] [ebp-30h] v6 = this; v57 = a2; v55 = a5; v58 = a6; result = sub_6CD770(); v8 = (int)result; if ( result ) { result = (_DWORD *)v6[91]; v56 = result; if ( result ) { unknown_libname_14(&TestChar); result = sub_6CE010(&TestChar, v8, a4); String = 0; v9 = *(_DWORD **)(v8 + 4); if ( v9 ) { if ( a3 != -1 ) { v10 = (const char *)sub_74E810(v9, a3); v11 = strlen(v10) + 1; v12 = v10; v13 = (char *)&v59 + 3; do v14 = (v13++)[1]; while ( v14 ); qmemcpy(v13, v12, v11); v15 = (_WORD *)((char *)&v59 + 3); do { v16 = *((_BYTE *)v15 + 1); v15 = (_WORD *)((char *)v15 + 1); } while ( v16 ); *v15 = 10; } for ( i = sub_6CE0D0((int)&TestChar, (int)&lpString); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&lpString) ) { switch ( i ) { case 0: strncat(&String, lpString, v53); sub_4593C0(v56, lpString, v53, &psizl); v18 = operator new(0xCu); *v18 += psizl.cx; if ( v18[1] < (unsigned int)psizl.cy ) v18[1] = psizl.cy; *((_BYTE *)v18 + 8) = 0; break; case 1: v19 = (int *)sub_680810(byte_AD9238); v20 = v19[1]; v61 = *v19; v21 = v19[2]; v62 = v20; v22 = v19[3]; v65 = v19[4]; v63 = v21; v64 = v22; v66 = 0; v23 = strlen((const char *)&v61) + 1; v24 = (char *)&v59 + 3; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, &v61, v23); break; case 2: v26 = (_WORD *)((char *)&v59 + 3); do { v27 = *((_BYTE *)v26 + 1); v26 = (_WORD *)((char *)v26 + 1); } while ( v27 ); *v26 = 10; break; case 4: v39 = strlen(&String); if ( v39 ) { sub_4593C0(v56, &String, v39, &v51); v40 = (LONG *)operator new(0xCu); v41 = (int)v40; *v40 = v51.cx; v40[1] = v51.cy + v6[92]; v42 = *v40; v59 = (LONG *)v41; if ( v42 > *v55 ) *v55 = v42; *v58 += *(_DWORD *)(v41 + 4); sub_6B9900(v57, &v59); *(_BYTE *)(v41 + 8) = 0; goto LABEL_37; } break; case 5: v35 = strlen(&String); if ( v35 ) { sub_4593C0(v56, &String, v35, &v49); v36 = (LONG *)operator new(0xCu); *v36 = v49.cx; v36[1] = v49.cy + v6[92]; v37 = *v36; v59 = v36; if ( v37 > *v55 ) *v55 = v37; *v58 += v36[1]; v38 = v57; *((_BYTE *)v36 + 8) = 0; sub_6B9900(v38, &v59); LABEL_37: String = 0; } break; case 7: v28 = strlen(&String); if ( v28 ) { sub_4593C0(v56, &String, v28, &v48); v29 = (LONG *)operator new(0xCu); v30 = v55; v31 = (int)v29; *v29 = v48.cx; v29[1] = v48.cy + v6[92]; v32 = *v29; v59 = (LONG *)v31; if ( v32 > *v30 ) *v30 = v32; *v58 += *(_DWORD *)(v31 + 4); sub_6B9900(v57, &v59); *(_BYTE *)(v31 + 8) = 0; String = 0; } else { v30 = v55; } v33 = (int *)operator new(0xCu); v34 = *(int (**)(void))(*(_DWORD *)v6[77] + 148); v59 = v33; v33[1] = v6[92] + v34(); *v33 = sub_615C20((_DWORD *)v6[77], lpString); *((_BYTE *)v33 + 8) = 1; if ( *v33 > *v30 ) *v30 = *v33; *v58 += v33[1]; sub_6B9900(v57, &v59); break; default: continue; } } v43 = strlen(&String); result = (_DWORD *)v43; if ( v43 ) { sub_4593C0(v56, &String, v43, &v51); v44 = (LONG *)operator new(0xCu); v45 = (int)v44; *v44 = v51.cx; v46 = v55; v44[1] = v51.cy + v6[92]; v47 = *v44; v59 = (LONG *)v45; if ( v47 > *v46 ) *v46 = v47; *v58 += *(_DWORD *)(v45 + 4); result = sub_6B9900(v57, &v59); *(_BYTE *)(v45 + 8) = 0; } } } } return result; } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); //----- (006162B0) -------------------------------------------------------- char __thiscall sub_6162B0(_DWORD *this, int a2, char a3, int a4, int a5) { _DWORD *v5; // edi signed int v6; // eax _DWORD **v7; // esi v5 = this; v6 = this[112]; if ( v6 < 0 || v6 >= 7 ) return 0; v7 = (_DWORD **)this[v6 + 113]; if ( !v7 ) return 0; sub_615AD0(v7, a2, a3); ((void (__thiscall *)(_DWORD **, signed int))(*v7)[64])(v7, 1); sub_85AFB0(v7, "type"); if ( a4 ) sub_85AE20(v7, "type", a4); sub_85AFB0(v7, "action"); if ( a5 ) { if ( strlen(*(const char **)(a5 + 12)) ) sub_85AE20(v7, "action", a5); } ++v5[112]; return 1; } //----- (00616370) -------------------------------------------------------- const char *__thiscall sub_616370(_DWORD *this, unsigned __int16 a2, char *a3, int a4, int a5) { int v5; // esi const char *result; // eax int v7; // esi char *v8; // edi int *v9; // eax int v10; // edx int v11; // ecx int v12; // edx _DWORD *v13; // eax _DWORD *v14; // edi _DWORD *v15; // eax _DWORD *v16; // esi _DWORD *v17; // [esp+14h] [ebp-64h] char *v18; // [esp+18h] [ebp-60h] size_t v19; // [esp+1Ch] [ebp-5Ch] BYTE TestChar; // [esp+20h] [ebp-58h] char *v21; // [esp+24h] [ebp-54h] int v22; // [esp+28h] [ebp-50h] int v23; // [esp+2Ch] [ebp-4Ch] int v24; // [esp+30h] [ebp-48h] int v25; // [esp+34h] [ebp-44h] int v26; // [esp+38h] [ebp-40h] char v27; // [esp+3Ch] [ebp-3Ch] int v28; // [esp+74h] [ebp-4h] v17 = this; v21 = a3; sub_421050(1); v5 = dword_ACDA48; result = (const char *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2); if ( (_BYTE)result ) { if ( a2 <= *(_WORD *)(v5 + 200) ) { result = (const char *)(*(_DWORD *)(v5 + 196) + 4 * a2); if ( *(_DWORD *)result ) { result = *(const char **)result; if ( result ) { result += 2; if ( result ) { result = sub_61B500(result); if ( result ) { v7 = (int)(result + 64); if ( result != (const char *)-64 ) { v8 = v21; if ( v21 ) *v21 = 0; unknown_libname_14(&TestChar); sub_6CE750((int)&TestChar, v7, a5); for ( result = (const char *)sub_6CE0D0((int)&TestChar, (int)&v18); result != (const char *)11; result = (const char *)sub_6CE0D0((int)&TestChar, (int)&v18) ) { if ( result == (const char *)16 ) break; switch ( (unsigned int)result ) { case 0u: if ( v8 ) strncat(v8, v18, v19); break; case 1u: if ( v8 ) { v9 = (int *)sub_680810(byte_AD9238); v10 = v9[1]; v22 = *v9; v11 = v9[2]; v23 = v10; v12 = v9[3]; v26 = v9[4]; v24 = v11; v25 = v12; v27 = 0; strcat(v8, (const char *)&v22); goto LABEL_26; } break; case 2u: if ( v8 ) { *(_WORD *)&v8[strlen(v8)] = 10; goto LABEL_26; } break; case 8u: v13 = operator new(0x10u); v28 = 0; if ( v13 ) v14 = sub_86B500(v13, (char *)v19); else v14 = 0; v28 = -1; v15 = operator new(0x10u); v16 = v15; v28 = 1; if ( v15 ) { sub_868D00(v15); *v16 = &NiIntegerExtraData::`vftable'; v16[3] = 0; } else { v16 = 0; } v28 = -1; sub_6162B0(v17, (int)v18, 0, (int)v16, (int)v14); LABEL_26: v8 = v21; break; default: continue; } } } } } } } } } return result; } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; // ACDA48: using guessed type int dword_ACDA48; //----- (00616660) -------------------------------------------------------- char __thiscall sub_616660(_DWORD *this, int a2, int a3) { volatile LONG *v3; // eax v3 = (volatile LONG *)sub_402BF0(this); return sub_8F2C80(v3, a2, a3); } //----- (00616690) -------------------------------------------------------- void __thiscall sub_616690(_DWORD *this, int a2) { _DWORD *v2; // edi char *v3; // eax _DWORD *v4; // eax char *v5; // eax v2 = this; if ( a2 ) { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.png", byte_ACAB50, a2); v4 = sub_486130((int)v3); if ( v4 ) goto LABEL_12; if ( !byte_ACAD5C ) sub_420410(); v5 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.tga", byte_ACAB50, a2); v4 = sub_486130((int)v5); if ( v4 ) { LABEL_12: sub_8FCC40(*(void **)(v2[89] + 288), (int)v4); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[89] + 256))(1); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[89] + 256))(0); } } } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00616730) -------------------------------------------------------- char __fastcall sub_616730(int a1, int a2, int a3, int a4, int a5) { signed int v5; // eax int v6; // esi int v7; // esi _DWORD *v8; // esi int v9; // esi __int16 v10; // ax char *v11; // eax volatile LONG *v12; // eax char *v13; // eax volatile LONG *v14; // eax LOBYTE(v5) = a3; v6 = a1; switch ( a3 ) { case 15: v5 = *(_DWORD *)a4; if ( *(_DWORD *)a4 < 42 || v5 > 61 ) { if ( v5 == 1003 ) { v11 = (char *)sub_40C190(225993562); v12 = sub_462C30(2, v11); LOBYTE(v5) = (**((int (__stdcall ***)(int))v12 + 58))(v6 != 232 ? v6 : 0); *(_DWORD *)(v6 + 136) = 1; } else if ( v5 == 1004 ) { v13 = (char *)sub_40C190(1688958398); v14 = sub_462C30(2, v13); LOBYTE(v5) = (**((int (__stdcall ***)(int))v14 + 58))(v6 != 232 ? v6 : 0); *(_DWORD *)(v6 + 136) = 2; } } else { v10 = *(_WORD *)(a4 + 8); LOWORD(a4) = *(_WORD *)(a1 + 128); HIWORD(a4) = v10; LOBYTE(v5) = sub_6F3D10(&off_AB7F2C, 17, 15, &a4, 4u); } break; case 27: LOBYTE(v5) = a4; if ( a4 && !*(_DWORD *)a4 ) { v9 = *(_DWORD *)(a1 + 136); if ( v9 == 1 ) { LOBYTE(v5) = sub_6F3D10(&off_AB7F2C, 8, 91, 0, 0); } else if ( v9 == 2 ) { LOBYTE(v5) = sub_6F3D10(&off_AB7F2C, 8, 92, 0, 0); } } break; case 36: v5 = *(_DWORD *)(a1 + 116); if ( v5 ) *(_BYTE *)(v5 + 504) = 0; if ( *(_BYTE *)(a1 + 112) ) { *(_BYTE *)(a1 + 112) = 0; } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(a1 + 124) + 256))(0); LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, (_DWORD *)(v6 - 232)); } v7 = *(_DWORD *)(v6 + 116); if ( v7 ) { v8 = *(_DWORD **)(v7 + 496); if ( v8 ) LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, v8); } break; } return v5; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006168D0) -------------------------------------------------------- int __thiscall sub_6168D0(int this, float a2) { int v2; // esi int v3; // eax int *v4; // edi int v5; // ebx int v6; // eax int v7; // edi int v8; // ebx int v9; // eax int result; // eax v2 = this; if ( *(_BYTE *)(this + 362) ) { if ( *(float *)(this + 364) < (double)flt_ACCFCC ) { sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 256))(0); sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); v3 = *(_DWORD *)(v2 + 348); *(_BYTE *)(v2 + 362) = 0; if ( v3 ) *(_BYTE *)(v3 + 504) = 0; } } v4 = *(int **)(v2 + 356); v5 = *v4; v6 = (*(int (__thiscall **)(_DWORD))(*v4 + 144))(*(_DWORD *)(v2 + 356)); (*(void (__thiscall **)(int *, int))(v5 + 172))(v4, xRight - v6); v7 = *(_DWORD *)(v2 + 356); v8 = *(_DWORD *)v7; v9 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v7 + 148))(*(_DWORD *)(v2 + 356)); (*(void (__thiscall **)(int, int))(v8 + 176))(v7, dword_AC2F78 - v9); sub_46AEA0(*(_DWORD *)(v2 + 348), v7, v2, SLODWORD(a2), dword_B66FB0, dword_BA6B30); if ( sub_8D0630((float *)(v2 + 372), a2) ) *(_BYTE *)(v2 + 400) = *(_BYTE *)(v2 + 400) == 0; result = *(_DWORD *)(v2 + 348); if ( *(_BYTE *)(result + 512) ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(result + 508) + 256))(*(unsigned __int8 *)(v2 + 400)); return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; // BA6B30: using guessed type int dword_BA6B30; //----- (00616A00) -------------------------------------------------------- void __thiscall sub_616A00(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = v1[86]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[86] + 344) = *(_DWORD *)(v1[87] + 300); sub_465130((_DWORD *)v1[86]); } } } //----- (00616A50) -------------------------------------------------------- int __thiscall sub_616A50(_DWORD *this, LPCSTR lpString, int a3, int a4) { _DWORD *v4; // esi int v5; // ebx int v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // ecx void *v10; // edi int v11; // ebx int v12; // edi int v13; // edi int v14; // eax int result; // eax _DWORD *v16; // esi _DWORD *v17; // ST0C_4 int v18; // [esp+10h] [ebp-24h] _DWORD *v19; // [esp+14h] [ebp-20h] _DWORD *v20; // [esp+18h] [ebp-1Ch] int v21; // [esp+1Ch] [ebp-18h] int v22; // [esp+20h] [ebp-14h] int v23; // [esp+24h] [ebp-10h] int i; // [esp+30h] [ebp-4h] v4 = this; v21 = 0; v19 = 0; v20 = 0; v18 = (int)&NiTList::`vftable'; v5 = a4; i = 0; v23 = 0; v22 = 0; if ( a4 ) { v6 = *(_DWORD *)a4; v22 = *(_DWORD *)(a4 + 4); v23 = v6; v7 = sub_6F3330(); v7[2] = v5; *v7 = 0; v7[1] = v20; if ( v20 ) *v20 = v7; else v19 = v7; ++v21; v20 = v7; } sub_615C80(v4, (int)&v18, lpString, (int)&v23, (int)&v22); sub_6153A0((int)&v18, (unsigned int *)&v23, (unsigned int *)&v22); while ( v21 ) { v8 = v19; v9 = (_DWORD *)*v19; v19 = v9; if ( v9 ) v9[1] = 0; else v20 = 0; v10 = (void *)v8[2]; (*(void (__thiscall **)(int *, _DWORD *))(v18 + 8))(&v18, v8); --v21; operator delete(v10); } v11 = v23; if ( a3 < (unsigned int)v23 ) v11 = a3; v4[72] = 0; v4[76] = 0; v12 = (int)(v4 + 77); a4 = 10; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(0); v12 += 4; --a4; } while ( a4 ); *(_WORD *)(v4[73] + 28) |= 1u; *(_WORD *)(v4[74] + 28) |= 1u; *(_WORD *)(v4[75] + 28) |= 1u; a4 = 0; sub_6152E0(v4, v11, (unsigned int *)&a4, (int)lpString); v13 = *v4; v14 = (*(int (**)(void))(*(_DWORD *)v4[73] + 160))(); (*(void (__thiscall **)(_DWORD *, int))(v13 + 156))(v4, v14); result = (*(int (__thiscall **)(_DWORD *, int))(*v4 + 152))(v4, v11); v18 = (int)&NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; v16 = v19; for ( i = 1; v16; result = (*(int (__thiscall **)(int *, _DWORD *))(v18 + 8))(&v18, v17) ) { v17 = v16; v16 = (_DWORD *)*v16; } return result; } // 9EE418: using guessed type void *NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; // 9EE670: using guessed type void *NiTList::`vftable'; //----- (00616C20) -------------------------------------------------------- int __thiscall sub_616C20(_DWORD **this, unsigned __int16 a2, int a3, int a4) { _DWORD **v4; // esi int v5; // edx void (__stdcall *v6)(_DWORD); // eax int v7; // edi signed int v8; // ebx _DWORD *v9; // ecx int v10; // eax int v11; // edi int v12; // edx unsigned __int16 v13; // bx int v14; // edi int v15; // edx bool v16; // zf _DWORD *v17; // eax _DWORD *v18; // ebx _DWORD *v19; // eax _DWORD *v20; // edi const CHAR *v21; // eax _DWORD *v22; // eax _DWORD *v23; // ebx _DWORD *v24; // eax _DWORD *v25; // edi const CHAR *v26; // eax _DWORD *v27; // ebx int v28; // edi const CHAR *v29; // eax int v30; // ebx int v31; // edi int v32; // ebx unsigned __int8 (__thiscall *v33)(int, int); // eax int v34; // ecx int v35; // edi char v36; // bl _DWORD *v37; // eax int i; // esi int v39; // eax int v40; // ebx int v41; // edi _DWORD *v42; // edi int v43; // eax _DWORD *v44; // ebx _DWORD *v45; // eax _DWORD *v46; // edi _DWORD *v47; // eax _DWORD *v48; // ebx _DWORD *v49; // eax _DWORD *v50; // edi const CHAR *v51; // eax int v52; // esi int v53; // eax int *v54; // edi int v55; // ebx int v56; // esi int (*v57)(void); // eax int v58; // eax int v59; // edi int v60; // eax int v61; // edi int result; // eax int v63; // ebx signed int v64; // edi int *v65; // esi char v66; // [esp+10h] [ebp-844h] int v67; // [esp+1Ch] [ebp-838h] int *v68; // [esp+20h] [ebp-834h] int v69; // [esp+24h] [ebp-830h] _DWORD **v70; // [esp+28h] [ebp-82Ch] char v71; // [esp+2Fh] [ebp-825h] void *v72; // [esp+30h] [ebp-824h] int v73; // [esp+34h] [ebp-820h] char v74[4]; // [esp+38h] [ebp-81Ch] int v75; // [esp+3Ch] [ebp-818h] int v76; // [esp+40h] [ebp-814h] char v77; // [esp+44h] [ebp-810h] CHAR String; // [esp+444h] [ebp-410h] int v79; // [esp+850h] [ebp-4h] v4 = this; v5 = *this[125]; v73 = a2; v6 = *(void (__stdcall **)(_DWORD))(v5 + 256); v70 = this; v6(0); v7 = (int)(v4 + 113); v68 = (int *)(v4 + 113); v8 = 7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); v7 += 4; --v8; } while ( v8 ); v9 = v4[127]; v4[112] = 0; *((_BYTE *)v4 + 512) = 0; (*(void (__stdcall **)(_DWORD))(*v9 + 256))(0); v10 = sub_6FD400(); v11 = dword_ACDA48; v12 = *(_DWORD *)dword_ACDA48; v13 = v73; v69 = v10; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v12 + 16))(dword_ACDA48, v73) ) { if ( (unsigned __int16)v73 <= *(_WORD *)(v11 + 200) ) { v15 = *(_DWORD *)(v11 + 196); if ( *(_DWORD *)(v15 + 4 * (unsigned __int16)v73) ) v14 = *(_DWORD *)(v15 + 4 * (unsigned __int16)v73); else v14 = 0; } else { v14 = 0; } } else { v14 = 0; } v16 = *(_BYTE *)v69 == 1; v67 = v14; if ( v16 && v14 && !strcmp((const char *)(v14 + 2), "WeddingDreian") ) { v17 = operator new(0x10u); v72 = v17; v79 = 0; if ( v17 ) v18 = sub_86B500(v17, "MarryRequest"); else v18 = 0; v19 = operator new(0x10u); v20 = v19; v72 = v19; v79 = 1; if ( v19 ) { sub_868D00(v19); *v20 = &NiIntegerExtraData::`vftable'; v20[3] = 0; } else { v20 = 0; } v79 = -1; v21 = sub_40C190(-300731855); sub_6162B0(v4, (int)v21, 0, (int)v20, (int)v18); v13 = v73; v14 = v67; } sub_616370(v4, v13, &v77, 1023, a4); if ( *(_BYTE *)v69 == 2 && v14 && !strcmp((const char *)(v14 + 2), "WeddingDreian") ) { v22 = operator new(0x10u); v72 = v22; v79 = 2; if ( v22 ) v23 = sub_86B500(v22, "DivorceRequest"); else v23 = 0; v79 = -1; v24 = operator new(0x10u); v25 = v24; v72 = v24; v79 = 3; if ( v24 ) { sub_868D00(v24); *v25 = &NiIntegerExtraData::`vftable'; v25[3] = 0; } else { v25 = 0; } v79 = -1; v26 = sub_40C190(-2067673667); sub_6162B0(v4, (int)v26, 0, (int)v25, (int)v23); sub_58DFD0(v4[123]); v27 = v72; v28 = 0; while ( v28 ) { if ( v28 == 1 ) { v29 = sub_40C190(206317937); goto LABEL_34; } LABEL_35: v27[83] = v28 + 1003; sub_58E080(v4[123], v28++, (int)v27); if ( v28 >= 2 ) { sub_58D930(v4[123], 0xC8u); goto LABEL_37; } } v29 = sub_40C190(-1256646899); LABEL_34: v27 = sub_58E290(v29, 0, 0, 0, 0, 0, 0); goto LABEL_35; } LABEL_37: v30 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v73) ) { if ( (unsigned __int16)v73 <= *(_WORD *)(v30 + 200) ) { v31 = 4 * (unsigned __int16)v73; if ( *(_DWORD *)(*(_DWORD *)(v30 + 196) + v31) ) { v32 = dword_ACDA74; v33 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16); v71 = 0; if ( !v33(dword_ACDA74, v73) || (unsigned __int16)v73 > *(_WORD *)(v32 + 200) || (v34 = *(_DWORD *)(v32 + 196), !*(_DWORD *)(v31 + v34)) || (v35 = *(_DWORD *)(v31 + v34)) == 0 || (v36 = 1, *(_DWORD *)(v35 + 170) != 23) ) { v36 = v71; } v37 = sub_439D70(byte_ADB468, &v66); v69 = sub_4316B0(v37); if ( v36 ) { *((_BYTE *)v70 + 504) = 1; for ( i = 0; i < sub_55EDB0(); ++i ) { v39 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), i); v76 = 0; v75 = 0; *(_DWORD *)v74 = 0; strncpy(v74, (const char *)(v39 + 3), 0xCu); v40 = sub_4316B0(v74); v41 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), i); if ( sub_680890((unsigned __int8 *)byte_AD9238) >= (unsigned int)*(unsigned __int8 *)(v41 + 1) ) { v73 = v40 + 14; if ( strcmp((const char *)(v69 + 14), (const char *)(v40 + 14)) ) { v42 = operator new(0x10u); v72 = v42; v79 = 4; if ( v42 ) { v43 = sub_7474E0((_DWORD *)(dword_ACD970 + 4), i); v44 = sub_86B500(v42, (char *)(v43 + 3)); } else { v44 = 0; } v79 = -1; v45 = operator new(0x10u); v46 = v45; v72 = v45; v79 = 5; if ( v45 ) { sub_868D00(v45); *v46 = &NiIntegerExtraData::`vftable'; v46[3] = 0; } else { v46 = 0; } v79 = -1; sub_6162B0(v70, v73, 0, (int)v46, (int)v44); } } } } } } } v47 = operator new(0x10u); v72 = v47; v79 = 6; if ( v47 ) v48 = sub_86B500(v47, "close"); else v48 = 0; v79 = -1; v49 = operator new(0x10u); v50 = v49; v72 = v49; v79 = 7; if ( v49 ) { sub_868D00(v49); *v50 = &NiIntegerExtraData::`vftable'; v50[3] = 0; } else { v50 = 0; } v79 = -1; v51 = sub_40C190(-1696072729); v52 = (int)v70; sub_6162B0(v70, (int)v51, 0, (int)v50, (int)v48); v53 = *(_DWORD *)(v52 + 448); v54 = 0; if ( v53 ) { v55 = 141 * v53 + 1; v56 = (*(int (**)(void))(*(_DWORD *)*v68 + 148))(); v54 = (int *)operator new(0xCu); v54[1] = v56; v52 = (int)v70; *((_BYTE *)v54 + 8) = 1; *v54 = v55; } sub_615080(&v77, (int)&String, 1024); sub_616A50(*(_DWORD **)(v52 + 444), &String, a3, (int)v54); v57 = *(int (**)(void))(**(_DWORD **)(v52 + 444) + 144); v73 = 1; v58 = v57(); sub_469C70((_DWORD *)v52, v58 + 10); if ( *(_DWORD *)(v52 + 448) ) v59 = (*(int (**)(void))(*(_DWORD *)*v68 + 148))() + 10; else v59 = 0; v60 = (*(int (**)(void))(**(_DWORD **)(v52 + 444) + 148))(); sub_469E70((_DWORD *)v52, v59 + v60); v61 = (*(int (**)(void))(*(_DWORD *)*v68 + 148))(); result = sub_46A610((void *)v52); v63 = result - v61; v64 = 0; if ( *(_DWORD *)(v52 + 448) <= 0 ) { *(_DWORD *)(v52 + 480) = -1; } else { v65 = v68; do { (*(void (__stdcall **)(int))(*(_DWORD *)*v65 + 172))(v73); (*(void (__stdcall **)(int))(*(_DWORD *)*v65 + 176))(v63); sub_6149A0(*v65, 0x8Cu); result = (int)v70; v73 += 141; ++v64; ++v65; } while ( v64 < (signed int)v70[112] ); v70[120] = (_DWORD *)-1; } return result; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; // ACD970: using guessed type int dword_ACD970; // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; //----- (00617390) -------------------------------------------------------- int __thiscall sub_617390(int *this, int a2, LPCSTR lpString, int a4, int a5) { int *v5; // esi int v6; // ebx _DWORD *v7; // edi _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // ebx const CHAR *v11; // eax int v12; // ecx _BYTE *v13; // eax int v14; // ebx int v15; // edi int v16; // eax int v17; // ebx int v18; // eax int *v19; // edi int v20; // ebx int result; // eax signed int v22; // ebx int i; // [esp+2Ch] [ebp+10h] char *v24; // [esp+30h] [ebp+14h] v5 = this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[125] + 256))(0); v6 = (int)(v5 + 113); v7 = (_DWORD *)7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0); v6 += 4; v7 = (_DWORD *)((char *)v7 - 1); } while ( v7 ); v5[112] = 0; if ( (_BYTE)a5 == 1 ) { v8 = operator new(0x10u); if ( v8 ) v7 = sub_86B500(v8, "close"); v9 = operator new(0x10u); v10 = v9; if ( v9 ) { sub_868D00(v9); *v10 = &NiIntegerExtraData::`vftable'; v10[3] = 0; } else { v10 = 0; } v11 = sub_40C190(-1696072729); sub_6162B0(v5, (int)v11, 0, (int)v10, (int)v7); } v12 = v5[112]; v13 = 0; if ( v12 ) { v14 = 141 * v12 + 1; v15 = (*(int (**)(void))(*(_DWORD *)v5[113] + 148))(); v13 = operator new(0xCu); v13[8] = 1; *(_DWORD *)v13 = v14; *((_DWORD *)v13 + 1) = v15; } sub_616A50((_DWORD *)v5[111], lpString, a4, (int)v13); v24 = (char *)1; v16 = (*(int (**)(void))(*(_DWORD *)v5[111] + 144))(); sub_469C70(v5, v16 + 10); if ( v5[112] ) v17 = (*(int (**)(void))(*(_DWORD *)v5[113] + 148))() + 10; else v17 = 0; v18 = (*(int (**)(void))(*(_DWORD *)v5[111] + 148))(); sub_469E70(v5, v17 + v18); v19 = v5 + 113; v20 = (*(int (**)(void))(*(_DWORD *)v5[113] + 148))(); result = sub_46A610(v5) - v20; v22 = 0; for ( i = result; v22 < v5[112]; ++v19 ) { (*(void (__stdcall **)(char *))(*(_DWORD *)*v19 + 172))(v24); (*(void (__stdcall **)(int))(*(_DWORD *)*v19 + 176))(i); result = sub_6149A0(*v19, 0x8Cu); v24 += 141; ++v22; } v5[120] = -1; return result; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; //----- (006175B0) -------------------------------------------------------- _DWORD *__thiscall sub_6175B0(void *this, int a2, int a3) { int v3; // esi void *v4; // edi _DWORD *result; // eax _DWORD *v6; // esi char *v7; // eax _DWORD *v8; // eax char *v9; // eax unsigned int v10; // esi unsigned int v11; // ebx int *v12; // ecx int v13; // eax int *v14; // ecx int v15; // esi unsigned int v16; // eax float v17; // ST14_4 char v18; // [esp+24h] [ebp-Ch] int v19; // [esp+38h] [ebp+8h] float v20; // [esp+38h] [ebp+8h] float v21; // [esp+38h] [ebp+8h] v3 = dword_ACDA48; v4 = this; result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2); if ( (_BYTE)result ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( *result ) { *((_BYTE *)v4 + 362) = 0; result = (_DWORD *)sub_61B590(a2); v6 = result; if ( result ) { if ( !byte_ACAD5C ) sub_420410(); v7 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.png", byte_ACAB50, v6); v8 = sub_486130((int)v7); if ( !v8 ) { if ( !byte_ACAD5C ) sub_420410(); v9 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.tga", byte_ACAB50, v6); v8 = sub_486130((int)v9); } if ( (_WORD)a2 != -1 && v8 ) { sub_8FCC40(*(void **)(*((_DWORD *)v4 + 89) + 288), (int)v8); (*(void (__stdcall **)(signed int))(**((_DWORD **)v4 + 89) + 256))(1); } else { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v4 + 89) + 256))(0); } v10 = (unsigned int)(650 * xRight) >> 10; v11 = 570 * dword_AC2F78 / 0x300u; sub_616C20(*((_DWORD ***)v4 + 87), a2, v10 - 30, a3); v12 = (int *)*((_DWORD *)v4 + 87); *((_BYTE *)v4 + 344) = a3 != 0; v19 = *v12; v13 = (*(int (**)(void))(*v12 + 144))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v19 + 172))(*((_DWORD *)v4 + 87), v10 - v13); v14 = (int *)*((_DWORD *)v4 + 87); v15 = *v14; v16 = (*(int (**)(void))(*v14 + 148))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v15 + 176))(*((_DWORD *)v4 + 87), v11 - (v16 >> 1)); *(_DWORD *)(*((_DWORD *)v4 + 87) + 344) = 1; v20 = (double)(unsigned int)dword_AC2F78 * 0.800000011920929; v17 = v20; v21 = 0.800000011920929 * (double)(unsigned int)xRight; sub_46A150(*((float **)v4 + 87), v21, v17); result = (_DWORD *)(*(int (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v18); } } } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA48: using guessed type int dword_ACDA48; //----- (006177C0) -------------------------------------------------------- void __thiscall sub_6177C0(_DWORD *this, int a2, LPCSTR lpString, int a4) { int v4; // esi _DWORD *v5; // edi int *v6; // eax int v7; // eax unsigned int v8; // esi unsigned int v9; // ebx int *v10; // ecx int v11; // eax int *v12; // ecx int v13; // esi unsigned int v14; // eax float v15; // ST10_4 int v16; // [esp+28h] [ebp+8h] float v17; // [esp+28h] [ebp+8h] float v18; // [esp+28h] [ebp+8h] v4 = dword_ACDA48; v5 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v4 + 200) ) { v6 = (int *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)a2); if ( *v6 ) { v7 = *v6; if ( v7 ) { *((_BYTE *)v5 + 362) = 0; sub_616690(v5, v7 + 2); v8 = (unsigned int)(650 * xRight) >> 10; v9 = 570 * dword_AC2F78 / 0x300u; sub_617390((int *)v5[87], a2, lpString, v8 - 30, a4); v10 = (int *)v5[87]; v16 = *v10; v11 = (*(int (**)(void))(*v10 + 144))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v16 + 172))(v5[87], v8 - v11); v12 = (int *)v5[87]; v13 = *v12; v14 = (*(int (**)(void))(*v12 + 148))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v13 + 176))(v5[87], v9 - (v14 >> 1)); *(_DWORD *)(v5[87] + 344) = 1; v17 = (double)(unsigned int)dword_AC2F78 * 0.800000011920929; v15 = v17; v18 = 0.800000011920929 * (double)(unsigned int)xRight; sub_46A150((float *)v5[87], v18, v15); } } } } } // ACDA48: using guessed type int dword_ACDA48; //----- (00617920) -------------------------------------------------------- void __thiscall sub_617920(int this, int a2, LPCSTR lpString, int a4) { int v4; // esi unsigned int v5; // edi unsigned int v6; // ebx LPCSTR *v7; // ecx int v8; // eax int *v9; // ecx int v10; // edi unsigned int v11; // eax float v12; // ST0C_4 LPCSTR lpStringa; // [esp+28h] [ebp+Ch] float lpStringb; // [esp+28h] [ebp+Ch] float lpStringc; // [esp+28h] [ebp+Ch] v4 = this; if ( a2 ) { if ( lpString ) { *(_BYTE *)(this + 362) = 0; sub_616690((_DWORD *)this, a2); v5 = (unsigned int)(650 * xRight) >> 10; v6 = 570 * dword_AC2F78 / 0x300u; sub_617390(*(int **)(v4 + 348), 0xFFFF, lpString, v5 - 30, a4); v7 = *(LPCSTR **)(v4 + 348); lpStringa = *v7; v8 = (*((int (**)(void))*v7 + 36))(); (*((void (__thiscall **)(_DWORD, unsigned int))lpStringa + 43))(*(_DWORD *)(v4 + 348), v5 - v8); v9 = *(int **)(v4 + 348); v10 = *v9; v11 = (*(int (**)(void))(*v9 + 148))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v10 + 176))(*(_DWORD *)(v4 + 348), v6 - (v11 >> 1)); *(_DWORD *)(*(_DWORD *)(v4 + 348) + 344) = 1; lpStringb = (double)(unsigned int)dword_AC2F78 * 0.800000011920929; v12 = lpStringb; lpStringc = 0.800000011920929 * (double)(unsigned int)xRight; sub_46A150(*(float **)(v4 + 348), lpStringc, v12); } } } //----- (00617A50) -------------------------------------------------------- _DWORD *__thiscall sub_617A50(_DWORD *this) { _DWORD *result; // eax result = this; *(_WORD *)this = -1; this[6] = 15; this[5] = 0; *((_BYTE *)this + 4) = 0; this[8] = 0xFFFF; this[9] = 0; this[10] = 0; this[11] = 0; dword_AD03A0[0] = 21; dword_AD03A4 = 21; dword_AD03A8 = 21; dword_AD03AC = 21; dword_AD03B0 = 21; dword_AD03C4 = 21; dword_AD03C8 = 21; dword_AD03CC = 21; dword_AD03D0 = 21; dword_AD03D4 = 21; dword_AD03D8 = 21; dword_AD03DC = 21; dword_AD03E0 = 21; dword_AD03E4 = 21; dword_AD03E8 = 21; dword_AD03EC = 21; dword_AD03C0 = 0; dword_AD037C = 0; dword_AD03B4 = 1; dword_AD03F0 = 1; dword_AD03B8 = 2; dword_AD03BC = 2; dword_AD0374 = 11; dword_AD0380 = 11; dword_AD0398 = 11; dword_AD0378 = 1; dword_AD0388 = 2; dword_AD038C = 2; dword_AD0390 = 2; dword_AD0384 = 3; dword_AD0394 = 4; dword_AD0370[0] = 5; return result; } // AD0370: using guessed type int dword_AD0370[]; // AD0374: using guessed type int dword_AD0374; // AD0378: using guessed type int dword_AD0378; // AD037C: using guessed type int dword_AD037C; // AD0380: using guessed type int dword_AD0380; // AD0384: using guessed type int dword_AD0384; // AD0388: using guessed type int dword_AD0388; // AD038C: using guessed type int dword_AD038C; // AD0390: using guessed type int dword_AD0390; // AD0394: using guessed type int dword_AD0394; // AD0398: using guessed type int dword_AD0398; // AD03A0: using guessed type int dword_AD03A0[]; // AD03A4: using guessed type int dword_AD03A4; // AD03A8: using guessed type int dword_AD03A8; // AD03AC: using guessed type int dword_AD03AC; // AD03B0: using guessed type int dword_AD03B0; // AD03B4: using guessed type int dword_AD03B4; // AD03B8: using guessed type int dword_AD03B8; // AD03BC: using guessed type int dword_AD03BC; // AD03C0: using guessed type int dword_AD03C0; // AD03C4: using guessed type int dword_AD03C4; // AD03C8: using guessed type int dword_AD03C8; // AD03CC: using guessed type int dword_AD03CC; // AD03D0: using guessed type int dword_AD03D0; // AD03D4: using guessed type int dword_AD03D4; // AD03D8: using guessed type int dword_AD03D8; // AD03DC: using guessed type int dword_AD03DC; // AD03E0: using guessed type int dword_AD03E0; // AD03E4: using guessed type int dword_AD03E4; // AD03E8: using guessed type int dword_AD03E8; // AD03EC: using guessed type int dword_AD03EC; // AD03F0: using guessed type int dword_AD03F0; //----- (00617BB0) -------------------------------------------------------- void __thiscall sub_617BB0(_DWORD **this, int a2, unsigned int a3) { _DWORD *v3; // eax switch ( a2 ) { case 0: sub_614FC0(this, a3); break; case 1: sub_616A00(this); break; case 2: sub_8F86A0(&unk_BA6B10, this); break; case 3: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "QuestList"); break; default: return; } } //----- (00617C20) -------------------------------------------------------- int __cdecl sub_617C20(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi int result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x158u); v8 = (int)v7; v11 = v7; v12 = 0; if ( v7 ) { sub_8FE000(v7); *(_DWORD *)v8 = &FlexDlgBtn::`vftable'; *(_DWORD *)(v8 + 232) = &FlexDlgBtn::`vftable'; } else { v8 = 0; } if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v12 = 1; sub_403790(&unk_BA6B10, v8); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)v8 + 560))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, (_DWORD *)v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = 0; } return result; } // 9ED8F0: using guessed type void *FlexDlgBtn::`vftable'; // 9ED90C: using guessed type void *FlexDlgBtn::`vftable'; //----- (00617D80) -------------------------------------------------------- int __cdecl sub_617D80(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax int v7; // esi void (__thiscall ***v8)(void *, signed int); // edi int result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x150u); v7 = (int)v6; v10 = v6; v11 = 0; if ( v6 ) { sub_8FE000(v6); *(_DWORD *)v7 = &TextBtn::`vftable'; *(_DWORD *)(v7 + 232) = &TextBtn::`vftable'; } else { v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; sub_403790(&unk_BA6B10, v7); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int))(*(_DWORD *)v7 + 560))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, (_DWORD *)v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = 0; } return result; } // 9EDB44: using guessed type void *TextBtn::`vftable'; // 9EDB64: using guessed type void *TextBtn::`vftable'; //----- (00617ED0) -------------------------------------------------------- int __cdecl sub_617ED0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x184u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8F2740(v5); *(_DWORD *)v6 = &AutoSizingDialogWin::`vftable'; *(_DWORD *)(v6 + 232) = &AutoSizingDialogWin::`vftable'; *(_DWORD *)(v6 + 364) = 0; *(_DWORD *)(v6 + 368) = 4; *(_DWORD *)(v6 + 372) = -1; *(_BYTE *)(v6 + 376) = -1; *(_DWORD *)(v6 + 380) = 0; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 452))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // 9EDD9C: using guessed type void *AutoSizingDialogWin::`vftable'; // 9EDDBC: using guessed type void *AutoSizingDialogWin::`vftable'; //----- (00618040) -------------------------------------------------------- char __thiscall sub_618040(_DWORD *this, int a2, int a3, int a4, volatile LONG **a5, int a6) { _DWORD *v6; // esi int *v8; // edi _DWORD *v9; // eax int v10; // eax int v11; // eax int v12; // edi char *v13; // eax volatile LONG **v14; // ebx int v15; // edi int v16; // ST2C_4 int v17; // eax int v18; // eax int v19; // ST1C_4 volatile LONG **v20; // edi signed int v21; // ebx volatile LONG *v22; // eax volatile LONG *v23; // eax int v24; // edi int v25; // eax void (__thiscall ***v26)(_DWORD, signed int); // esi char v27; // [esp+44h] [ebp-10h] int v28; // [esp+50h] [ebp-4h] v6 = this; if ( !sub_8F2900(this, a2, a3, 1, 1, (_DWORD *)a6, 0, 0) || !a5 ) return 0; v6[91] = a5; v8 = v6 + 73; a3 = 3; do { v9 = operator new(0x14Cu); v28 = 0; if ( v9 ) v10 = sub_90EEA0(v9, (volatile LONG *)a5); else v10 = 0; *v8 = v10; *(_WORD *)(v10 + 28) |= 1u; *(_BYTE *)(*v8 + 284) = 1; *(_BYTE *)(*v8 + 285) = 1; v11 = *v8; v28 = -1; *(_DWORD *)(v11 + 308) = 0; if ( *(_DWORD *)(v11 + 280) != 17 ) { *(_DWORD *)(v11 + 280) = 17; *(_BYTE *)(v11 + 300) = 1; } sub_9076A0((_DWORD *)*v8, v6[92]); (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v6 + 116))(v6, *v8, 0); ++v8; --a3; } while ( a3 ); v6[72] = 0; a6 = 0; v12 = dword_BA6BA0; v28 = 1; if ( !byte_ACAD5C ) sub_420410(); v13 = (char *)sub_401410(byte_ACAB50, "Game\\DialogBtn.nif"); sub_8F66B0(v13, (int)&a6, v12); if ( !a6 ) return 0; v14 = sub_8FB140(a6, (int)"BtnNor", (int)&v27, (int)&a2, 0); sub_8FB650(v14, a6, (int)"BtnClick"); sub_8FB650(v14, a6, (int)"BtnOver"); v15 = (int)(v6 + 77); a5 = (volatile LONG **)10; do { v16 = a4; v17 = sub_421050(3); v18 = sub_617D80(0, 0, (int)v14, v17, (int)v6, v16); *(_DWORD *)v15 = v18; (*(void (__thiscall **)(int, int))(*(_DWORD *)v18 + 520))(v18, v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 256))(0); v15 += 4; a5 = (volatile LONG **)((char *)a5 - 1); } while ( a5 ); v19 = a6; v6[76] = 0; a5 = sub_8FB140(v19, (int)"Line", (int)&v27, (int)&a2, 0); v20 = (volatile LONG **)(v6 + 88); v21 = 3; do { v22 = sub_8F3EB0(0, 0, (int)a5, (int)v6, 0, 0); *v20 = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 256))(v22, 0); ++v20; --v21; } while ( v21 ); v6[87] = 0; v23 = sub_599650(0); v6[96] = v23; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 520))(v23, 0); sub_5986B0((int *)v6[96], 1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6[96] + 256))(0); v24 = v6[96]; if ( v24 ) { v25 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v24 + 4))(v6[96]); if ( v25 ) { while ( (_UNKNOWN *)v25 != &unk_BA6A8C ) { v25 = *(_DWORD *)(v25 + 4); if ( !v25 ) goto LABEL_24; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v6 + 116))(v6, v24, 0); sub_85C4D0(v6); sub_85BED0((_DWORD **)v6, 0.0, 1); } } LABEL_24: (*(void (__thiscall **)(_DWORD *, _DWORD))(*v6 + 240))(v6, 0); sub_85BED0((_DWORD **)v6, 0.0, 1); sub_85C4D0(v6); v28 = -1; if ( a6 ) { v26 = (void (__thiscall ***)(_DWORD, signed int))a6; if ( !InterlockedDecrement((volatile LONG *)(a6 + 4)) ) { if ( v26 ) (**v26)(v26, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00618380) -------------------------------------------------------- int __cdecl sub_618380(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x20Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { sub_469C10((float *)v1); *(_DWORD *)v2 = &SpeechBubbleDlgWin::`vftable'; *(_DWORD *)(v2 + 232) = &SpeechBubbleDlgWin::`vftable'; *(_DWORD *)(v2 + 500) = 0; *(_BYTE *)(v2 + 504) = 0; *(_DWORD *)(v2 + 496) = 0; *(_BYTE *)(v2 + 512) = 0; *(_BYTE *)(v2 + 520) = 0; *(_DWORD *)(v2 + 516) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 9EDF88: using guessed type void *SpeechBubbleDlgWin::`vftable'; // 9EDFA4: using guessed type void *SpeechBubbleDlgWin::`vftable'; //----- (006184E0) -------------------------------------------------------- volatile LONG *__cdecl sub_6184E0(int a1, int a2, int a3) { _DWORD *v3; // eax volatile LONG *v4; // esi void (__thiscall ***v5)(void *, signed int); // edi volatile LONG *result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x194u); v7 = v3; v8 = 0; if ( v3 ) v4 = sub_6155D0(v3); else v4 = 0; if ( v4 ) InterlockedIncrement(v4 + 1); v8 = 1; sub_403790(&unk_BA6B10, (int)v4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int))(*v4 + 540))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(volatile LONG *))(*v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = 0; } return result; } //----- (00618620) -------------------------------------------------------- char __thiscall sub_618620(void *this, int a2, int a3, int a4) { int v4; // esi volatile LONG *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf int v9; // ebx char *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax int *v13; // ebx int v14; // eax int *v15; // ebx int v16; // eax int v17; // eax void (__thiscall ***v18)(_DWORD, signed int); // esi char v19; // [esp+10h] [ebp-2Ch] char v20; // [esp+24h] [ebp-18h] char v21; // [esp+28h] [ebp-14h] int v22; // [esp+2Ch] [ebp-10h] int v23; // [esp+38h] [ebp-4h] int v24; // [esp+48h] [ebp+Ch] int v25; // [esp+48h] [ebp+Ch] v4 = (int)this; v22 = 0; v23 = 0; v5 = (volatile LONG *)sub_43D0D0(4u); if ( !v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v22; v23 = -1; if ( !v22 || InterlockedDecrement((volatile LONG *)(v22 + 4)) ) return 0; v7 = v22 == 0; LABEL_5: if ( !v7 ) (**v6)(v6, 1); return 0; } v9 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACAB50, "Game\\NPCFace.nif"); sub_8F66B0(v10, (int)&v22, v9); if ( !v22 ) return 0; if ( !sub_8F15E0((volatile LONG **)v4, 0, 0, 0, a2, a3, 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v22; v23 = -1; if ( !v22 || InterlockedDecrement((volatile LONG *)(v22 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_5; } sub_456260(&v19); LOBYTE(v23) = 1; sub_455FF0(&v19, v4); sub_456380(&v19, v22); v11 = sub_8FB140(v22, (int)"NPCFace", (int)&v20, (int)&v21, v5); v12 = sub_8F3EB0(0, 0, (int)v11, v4, 0, 0); sub_56FF80((_DWORD *)(v4 + 356), (int)v12); v13 = *(int **)(v4 + 356); v24 = *v13; v14 = (*(int (__thiscall **)(_DWORD))(*v13 + 144))(*(_DWORD *)(v4 + 356)); (*(void (__thiscall **)(int *, int))(v24 + 172))(v13, xRight - v14); v15 = *(int **)(v4 + 356); v25 = *v15; v16 = (*(int (__thiscall **)(_DWORD))(*v15 + 148))(*(_DWORD *)(v4 + 356)); (*(void (__thiscall **)(int *, int))(v25 + 176))(v15, dword_AC2F78 - v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 356) + 256))(0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 356) + 240))(*(_DWORD *)(v4 + 356), 0); v17 = sub_618380(0); *(_DWORD *)(v4 + 348) = v17; *(_DWORD *)(v17 + 344) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 348) + 256))(1); (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v4 + 116))(v4, *(_DWORD *)(v4 + 348), 0); sub_85C4D0((_DWORD *)v4); sub_8F2880((_BYTE *)v4, 0); LOBYTE(v23) = 0; sub_4562E0(&v19); v23 = -1; if ( v22 ) { v18 = (void (__thiscall ***)(_DWORD, signed int))v22; if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) { if ( v18 ) (**v18)(v18, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00618890) -------------------------------------------------------- int __cdecl sub_618890(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &DlgQuestListWin::`vftable'; *(_DWORD *)(v2 + 232) = &DlgQuestListWin::`vftable'; *(_WORD *)(v2 + 352) = -1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EE1C8: using guessed type void *DlgQuestListWin::`vftable'; // 9EE1E4: using guessed type void *DlgQuestListWin::`vftable'; //----- (006189E0) -------------------------------------------------------- char __thiscall sub_6189E0(void *this, int a2) { int v2; // esi int v4; // eax int v5; // edi char *v6; // eax volatile LONG **v7; // edi volatile LONG **v8; // ebx volatile LONG **v9; // eax int v10; // eax int v11; // edi signed int v12; // ebx volatile LONG **v13; // eax int v14; // eax int v15; // eax volatile LONG *v16; // eax int v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax void (__thiscall ***v20)(_DWORD, signed int); // esi volatile LONG **v21; // [esp+10h] [ebp-20h] volatile LONG **v22; // [esp+14h] [ebp-1Ch] char v23; // [esp+18h] [ebp-18h] char v24; // [esp+1Ch] [ebp-14h] int v25; // [esp+20h] [ebp-10h] int v26; // [esp+2Ch] [ebp-4h] v2 = (int)this; if ( !sub_46A6E0(this, a2) ) return 0; v4 = sub_421050(1); *(_DWORD *)(v2 + 444) = sub_617ED0(5, 5, 77777, v4, v2); v25 = 0; v5 = dword_BA6BA0; v26 = 0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\DialogBtn.nif"); sub_8F66B0(v6, (int)&v25, v5); if ( !v25 ) return 0; v7 = sub_8FB140(v25, (int)"BtnLeft01", (int)&v23, (int)&v24, 0); v8 = sub_8FB140(v25, (int)"BtnRight01", (int)&v23, (int)&v24, 0); v9 = sub_8FB140(v25, (int)"BtnMiddle01", (int)&v23, (int)&v24, 0); v10 = sub_617C20(0, 0, (int)v7, (int)v8, (int)v9, v2, 0); *(_DWORD *)(v2 + 508) = v10; (*(void (__thiscall **)(int, int))(*(_DWORD *)v10 + 520))(v10, v10); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 508) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 508) + 240))(0); v21 = sub_8FB140(v25, (int)"BtnLeft", (int)&v23, (int)&v24, 0); v22 = sub_8FB140(v25, (int)"BtnRight", (int)&v23, (int)&v24, 0); v11 = v2 + 452; v12 = 7; do { v13 = sub_8FB140(v25, (int)"BtnMiddle", (int)&v23, (int)&v24, 0); v14 = sub_617C20(0, 0, (int)v21, (int)v22, (int)v13, v2, 77777); *(_DWORD *)v11 = v14; (*(void (__thiscall **)(int, int))(*(_DWORD *)v14 + 520))(v14, v14); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 256))(0); v11 += 4; --v12; } while ( v12 ); v15 = sub_43D0D0(1u); v16 = sub_58E5D0(v15, 5, 5, 0); *(_DWORD *)(v2 + 488) = v16; (**((void (__stdcall ***)(int))v16 + 58))(v2 + 232); v17 = sub_43D0D0(1u); v18 = sub_58E5D0(v17, 5, 5, 0); *(_DWORD *)(v2 + 492) = v18; (**((void (__stdcall ***)(int))v18 + 58))(v2 + 232); v19 = sub_599650(a2); *(_DWORD *)(v2 + 500) = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 520))(v19, 0); sub_5986B0(*(int **)(v2 + 500), 1); sub_442AC0((_DWORD *)v2, *(_DWORD *)(v2 + 500)); *(_DWORD *)(v2 + 516) = (*(int (**)(void))(**(_DWORD **)(v2 + 500) + 144))(); if ( !*(_DWORD *)(v2 + 496) ) *(_DWORD *)(v2 + 496) = sub_618890(0); v20 = (void (__thiscall ***)(_DWORD, signed int))v25; v26 = -1; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v20 ) (**v20)(v20, 1); } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00618CC0) -------------------------------------------------------- int __thiscall sub_618CC0(int *this, const CHAR *a2, int a3, int a4) { int *v4; // esi int v5; // edi signed int v6; // ebx _DWORD *v7; // eax int v8; // edi _DWORD *v9; // eax int v10; // ecx int v11; // edx int v12; // ecx _BYTE *v13; // eax int v14; // edi int v15; // ebx int v16; // eax int v17; // edi int v18; // eax int v19; // edi int result; // eax signed int v21; // ebx int *v22; // edi _DWORD *v23; // [esp+10h] [ebp-38h] LPCSTR lpString; // [esp+14h] [ebp-34h] char v25; // [esp+18h] [ebp-30h] signed int v26; // [esp+18h] [ebp-30h] void *v27; // [esp+1Ch] [ebp-2Ch] int v28; // [esp+2Ch] [ebp-1Ch] unsigned int v29; // [esp+30h] [ebp-18h] int v30; // [esp+44h] [ebp-4h] v4 = this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[125] + 256))(0); v5 = (int)(v4 + 113); v6 = 7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 256))(0); v5 += 4; --v6; } while ( v6 ); v4[112] = 0; v7 = *(_DWORD **)(a3 + 4); while ( v7 ) { v8 = v7[2]; v7 = (_DWORD *)*v7; v23 = v7; if ( v8 ) { v9 = (_DWORD *)sub_61B8B0((const void **)v8, (int)&v27); v10 = *(_DWORD *)(v8 + 36); v11 = *(_DWORD *)(v8 + 32); v25 = *(_BYTE *)(v8 + 28); v30 = 0; if ( v9[5] >= 0x10u ) v9 = (_DWORD *)*v9; sub_6162B0(v4, (int)v9, v25, v11, v10); v30 = -1; if ( v29 >= 0x10 ) operator delete(v27); v29 = 15; v28 = 0; LOBYTE(v27) = 0; if ( *(_DWORD *)(v8 + 20) >= 0x10u ) operator delete(*(void **)v8); *(_DWORD *)(v8 + 20) = 15; *(_DWORD *)(v8 + 16) = 0; *(_BYTE *)v8 = 0; operator delete((void *)v8); v7 = v23; } } v12 = v4[112]; v13 = 0; if ( v12 ) { v14 = 141 * v12 + 1; v15 = (*(int (**)(void))(*(_DWORD *)v4[113] + 148))(); v13 = operator new(0xCu); v13[8] = 1; *(_DWORD *)v13 = v14; *((_DWORD *)v13 + 1) = v15; } sub_616A50((_DWORD *)v4[111], a2, a4, (int)v13); v26 = 1; v16 = (*(int (**)(void))(*(_DWORD *)v4[111] + 144))(); sub_469C70(v4, v16 + 10); if ( v4[112] ) v17 = (*(int (**)(void))(*(_DWORD *)v4[113] + 148))() + 10; else v17 = 0; v18 = (*(int (**)(void))(*(_DWORD *)v4[111] + 148))(); sub_469E70(v4, v17 + v18); v19 = (*(int (**)(void))(*(_DWORD *)v4[113] + 148))(); result = sub_46A610(v4) - v19; v21 = 0; lpString = (LPCSTR)result; if ( v4[112] > 0 ) { v22 = v4 + 113; do { (*(void (__stdcall **)(signed int))(*(_DWORD *)*v22 + 172))(v26); (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)*v22 + 176))(lpString); result = sub_6149A0(*v22, 0x8Cu); v26 += 141; ++v21; ++v22; } while ( v21 < v4[112] ); } v4[120] = -1; return result; } //----- (00618F30) -------------------------------------------------------- void __thiscall sub_618F30(int this, int a2, const CHAR *a3, int a4) { int v4; // esi unsigned int v5; // edi unsigned int v6; // ebx int *v7; // ecx int v8; // eax int *v9; // ecx int v10; // edi unsigned int v11; // eax float v12; // ST0C_4 int v13; // [esp+28h] [ebp+Ch] float v14; // [esp+28h] [ebp+Ch] float v15; // [esp+28h] [ebp+Ch] v4 = this; if ( a2 ) { if ( a3 ) { *(_BYTE *)(this + 362) = 0; sub_616690((_DWORD *)this, a2); v5 = (unsigned int)(650 * xRight) >> 10; v6 = 570 * dword_AC2F78 / 0x300u; sub_618CC0(*(int **)(v4 + 348), a3, a4, v5 - 30); v7 = *(int **)(v4 + 348); v13 = *v7; v8 = (*(int (**)(void))(*v7 + 144))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v13 + 172))(*(_DWORD *)(v4 + 348), v5 - v8); v9 = *(int **)(v4 + 348); v10 = *v9; v11 = (*(int (**)(void))(*v9 + 148))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v10 + 176))(*(_DWORD *)(v4 + 348), v6 - (v11 >> 1)); *(_DWORD *)(*(_DWORD *)(v4 + 348) + 344) = 1; v14 = (double)(unsigned int)dword_AC2F78 * 0.800000011920929; v12 = v14; v15 = 0.800000011920929 * (double)(unsigned int)xRight; sub_46A150(*(float **)(v4 + 348), v15, v12); } } } //----- (00619060) -------------------------------------------------------- void __thiscall sub_619060(_WORD *this) { _WORD *v1; // esi unsigned __int16 v2; // ST00_2 void **v3; // eax v1 = this; if ( *((_DWORD *)this + 95) ) { v2 = this[190]; v3 = sub_4967C0(); sub_6D0D10(v3, v2); *((_DWORD *)v1 + 95) = 0; } } //----- (00619090) -------------------------------------------------------- void *__thiscall sub_619090(_DWORD *this, unsigned __int16 a2, int a3, int a4) { _DWORD *v4; // ebx void *result; // eax int v6; // esi _DWORD *v7; // esi int v8; // eax char *v9; // esi unsigned int v10; // eax char *v11; // edi char v12; // cl int i; // eax int *v14; // eax int v15; // edx int v16; // ecx int v17; // edx unsigned int v18; // eax char *v19; // edi char v20; // cl _WORD *v21; // edi char v22; // al signed int v23; // eax _DWORD *v24; // eax _DWORD *v25; // esi _DWORD *v26; // ecx _DWORD *v27; // esi char *v28; // eax _DWORD *v29; // eax _DWORD *v30; // ecx float v31; // ST08_4 __int16 v32; // ST04_2 __int16 v33; // ST00_2 void **v34; // eax LPCSTR lpString; // [esp+10h] [ebp-464h] size_t v36; // [esp+14h] [ebp-460h] BYTE TestChar; // [esp+18h] [ebp-45Ch] void *v38; // [esp+1Ch] [ebp-458h] int v39; // [esp+20h] [ebp-454h] char v40[1024]; // [esp+24h] [ebp-450h] char v41[1024]; // [esp+25h] [ebp-44Fh] int v42; // [esp+424h] [ebp-50h] int v43; // [esp+428h] [ebp-4Ch] int v44; // [esp+42Ch] [ebp-48h] int v45; // [esp+430h] [ebp-44h] int v46; // [esp+434h] [ebp-40h] char v47; // [esp+438h] [ebp-3Ch] int v48; // [esp+470h] [ebp-4h] v4 = this; result = sub_6CD770(); v6 = (int)result; if ( result ) { if ( v4[91] ) { unknown_libname_14(&TestChar); result = sub_6CE010(&TestChar, v6, a3); v40[0] = 0; v7 = *(_DWORD **)(v6 + 4); v39 = 0; if ( v7 ) { if ( a2 != -1 ) { v8 = sub_74E810(v7, a2); v9 = sub_7549E0("< %s >\n\n", v8); v10 = strlen(v9) + 1; v11 = (char *)&v39 + 3; do v12 = (v11++)[1]; while ( v12 ); qmemcpy(v11, v9, v10); } for ( i = sub_6CE0D0((int)&TestChar, (int)&lpString); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&lpString) ) { switch ( i ) { case 0: strncat(v40, lpString, v36); break; case 1: v14 = (int *)sub_680810(byte_AD9238); v15 = v14[1]; v42 = *v14; v16 = v14[2]; v43 = v15; v17 = v14[3]; v46 = v14[4]; v44 = v16; v45 = v17; v47 = 0; v18 = strlen((const char *)&v42) + 1; v19 = (char *)&v39 + 3; do v20 = (v19++)[1]; while ( v20 ); qmemcpy(v19, &v42, v18); break; case 2: v21 = (_WORD *)((char *)&v39 + 3); do { v22 = *((_BYTE *)v21 + 1); v21 = (_WORD *)((char *)v21 + 1); } while ( v22 ); *v21 = 10; break; case 5: if ( &v40[strlen(v40) + 1] != v41 ) { sub_6152E0(v4, a4, (unsigned int *)&v39, (int)v40); v40[0] = 0; } break; case 7: if ( &v40[strlen(v40) + 1] != v41 ) { sub_6152E0(v4, a4, (unsigned int *)&v39, (int)v40); v40[0] = 0; } v23 = v4[76]; if ( v23 < 10 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v4[v23 + 77] + 176))(v39); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[v4[76] + 77] + 172))(10); sub_615B50((_DWORD *)v4[v4[76] + 77], lpString); sub_85AFB0((_DWORD *)v4[v4[76] + 77], "type"); v24 = operator new(0x10u); v25 = v24; v38 = v24; v48 = 0; if ( v24 ) { sub_868D00(v24); *v25 = &NiIntegerExtraData::`vftable'; v25[3] = 1; } else { v25 = 0; } v26 = (_DWORD *)v4[v4[76] + 77]; v48 = -1; sub_85AE20(v26, "type", (int)v25); sub_85AFB0((_DWORD *)v4[v4[76] + 77], "action"); v27 = operator new(0x10u); v38 = v27; v48 = 1; if ( v27 ) { v28 = sub_7549E0("quest_ack %d", v36); v29 = sub_86B500(v27, v28); } else { v29 = 0; } v30 = (_DWORD *)v4[v4[76] + 77]; v48 = -1; sub_85AE20(v30, "action", (int)v29); (*(void (__stdcall **)(signed int))(*(_DWORD *)v4[v4[76] + 77] + 256))(1); v39 += v4[92] + (*(int (**)(void))(*(_DWORD *)v4[v4[76] + 77] + 148))(); ++v4[76]; } break; case 9: LODWORD(v31) = *((unsigned __int8 *)v4 + 376); v32 = *((_WORD *)v4 + 186); v33 = (signed __int16)lpString; v4[95] = lpString; v34 = sub_4967C0(); sub_6D0F30((char **)v34, v33, v32, v31); break; case 13: if ( dword_AD8EBC ) { if ( dword_AD8EBC[1924] == 1 ) (*(void (__stdcall **)(LPCSTR))(*(_DWORD *)dword_AD8EBC + 456))(lpString); else OutputDebugStringA(&byte_9ED42C); } break; default: continue; } } if ( &v40[strlen(v40) + 1] != v41 ) { sub_6152E0(v4, a4, (unsigned int *)&v39, (int)v40); v40[0] = 0; } (*(void (__thiscall **)(_DWORD *, int))(*v4 + 156))(v4, v39); result = (void *)(*(int (__thiscall **)(_DWORD *, int))(*v4 + 152))(v4, a4); } } } return result; } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; // 619090: using guessed type char var_450[1024]; //----- (00619540) -------------------------------------------------------- void *__thiscall sub_619540(int this, int a2, unsigned int a3, int a4, char a5, int *a6) { _DWORD *v6; // esi int v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // ecx void *v11; // edi int v12; // edi signed int v13; // ebx int v14; // ecx void *result; // eax _DWORD *v16; // esi _DWORD *v17; // ST10_4 void **v18; // [esp+10h] [ebp-24h] _DWORD *v19; // [esp+14h] [ebp-20h] _DWORD *v20; // [esp+18h] [ebp-1Ch] int v21; // [esp+1Ch] [ebp-18h] int v22; // [esp+20h] [ebp-14h] unsigned int v23; // [esp+24h] [ebp-10h] int i; // [esp+30h] [ebp-4h] v6 = (_DWORD *)this; v21 = 0; v19 = 0; v20 = 0; v18 = &NiTList::`vftable'; i = 0; v23 = 0; v22 = 0; *(_DWORD *)(this + 372) = a4; *(_BYTE *)(this + 376) = a5; if ( a6 ) { v7 = a6[1]; v23 = *a6; v22 = v7; v8 = sub_6F3330(); v8[2] = a6; *v8 = 0; v8[1] = v20; if ( v20 ) *v20 = v8; else v19 = v8; ++v21; v20 = v8; } sub_615DC0(v6, &v18, a4, a2, &v23, &v22); sub_6153A0((int)&v18, &v23, (unsigned int *)&v22); while ( v21 ) { v9 = v19; v10 = (_DWORD *)*v19; v19 = v10; if ( v10 ) v10[1] = 0; else v20 = 0; v11 = (void *)v9[2]; ((void (__thiscall *)(void ***, _DWORD *))v18[2])(&v18, v9); --v21; operator delete(v11); } if ( a3 < v23 ) v23 = a3; v6[72] = 0; v6[76] = 0; v12 = (int)(v6 + 77); v13 = 10; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v12 + 256))(0); v12 += 4; --v13; } while ( v13 ); v14 = v23; *(_WORD *)(v6[73] + 28) |= 1u; *(_WORD *)(v6[74] + 28) |= 1u; *(_WORD *)(v6[75] + 28) |= 1u; result = sub_619090(v6, a4, a2, v14); v18 = &NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; v16 = v19; for ( i = 1; v16; result = (void *)((int (__thiscall *)(void ***, _DWORD *))v18[2])(&v18, v17) ) { v17 = v16; v16 = (_DWORD *)*v16; } return result; } // 9EE418: using guessed type void *NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; // 9EE670: using guessed type void *NiTList::`vftable'; //----- (006196F0) -------------------------------------------------------- void *__thiscall sub_6196F0(_DWORD *this, __int16 a2, int a3, void *a4, char a5, unsigned int a6, void *a7) { _DWORD *v7; // esi void *v8; // edi char v9; // bl int i; // eax int v11; // edi _DWORD *v12; // ebx char v13; // al _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // edi const CHAR *v17; // eax int v18; // ecx _BYTE *v19; // eax int v20; // edi int v21; // ebx int v22; // eax int v23; // ebx int v24; // edi int v25; // eax int *v26; // edi int v27; // ebx int v28; // eax int v29; // ebx _DWORD *v30; // eax _DWORD *v31; // edi signed int v32; // eax int v33; // ST10_4 signed int v34; // ST0C_4 char *v35; // eax char *v36; // ebx _DWORD *v37; // eax _DWORD *v38; // eax _DWORD *v39; // edi int v40; // eax int v41; // eax _BYTE *v42; // edi int v43; // ebx int v44; // ecx char v45; // al _DWORD **v46; // ecx char *v47; // ecx char *v48; // ecx int v49; // eax int v50; // ebx int v51; // edi int v52; // eax int v53; // edi int v54; // ebx int *v55; // edi int v56; // edi int v57; // eax void *result; // eax int v59; // [esp+10h] [ebp-24h] void *v60; // [esp+18h] [ebp-1Ch] int v61; // [esp+1Ch] [ebp-18h] BYTE TestChar; // [esp+20h] [ebp-14h] char v63; // [esp+26h] [ebp-Eh] char v64; // [esp+27h] [ebp-Dh] int v65; // [esp+30h] [ebp-4h] int j; // [esp+3Ch] [ebp+8h] int v67; // [esp+3Ch] [ebp+8h] char *v68; // [esp+50h] [ebp+1Ch] _DWORD *v69; // [esp+50h] [ebp+1Ch] void *v70; // [esp+50h] [ebp+1Ch] char *v71; // [esp+50h] [ebp+1Ch] v7 = this; v64 = 0; v8 = sub_6CD770(); v9 = 0; unknown_libname_14(&TestChar); sub_6CE010(&TestChar, (int)v8, a3); for ( i = sub_6CE0D0((int)&TestChar, (int)&v59); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&v59) ) { if ( i == 12 ) { v9 = 1; } else if ( i == 3 ) { v64 = 1; } } v63 = v9; if ( v9 && a2 == -1 ) v63 = 0; v11 = (int)(v7 + 113); v12 = (_DWORD *)7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 256))(0); v11 += 4; v12 = (_DWORD *)((char *)v12 - 1); } while ( v12 ); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[127] + 256))(0); *((_BYTE *)v7 + 512) = 0; v7[112] = 0; v13 = 1; if ( a3 != 119 ) v13 = v63; if ( (_BYTE)a7 && v13 ) { if ( a3 != 119 ) sub_616370(v7, a2, 0, 0, 0); v14 = operator new(0x10u); v65 = 0; if ( v14 ) v12 = sub_86B500(v14, "close"); v65 = -1; v15 = operator new(0x10u); v16 = v15; v65 = 1; if ( v15 ) { sub_868D00(v15); *v16 = &NiIntegerExtraData::`vftable'; v16[3] = 0; } else { v16 = 0; } v65 = -1; v17 = sub_40C190(-1696072729); sub_6162B0(v7, (int)v17, 0, (int)v16, (int)v12); if ( a3 == 119 ) { v18 = v7[112]; v19 = 0; if ( v18 ) { v20 = 141 * v18 + 1; v21 = (*(int (**)(void))(*(_DWORD *)v7[113] + 148))(); v19 = operator new(0xCu); v19[8] = 1; *(_DWORD *)v19 = v20; *((_DWORD *)v19 + 1) = v21; } sub_619540(v7[111], 119, a6, (int)a4, a5, (int *)v19); v68 = (char *)1; v22 = (*(int (**)(void))(*(_DWORD *)v7[111] + 144))(); sub_469C70(v7, v22 + 10); if ( v7[112] ) v23 = (*(int (**)(void))(*(_DWORD *)v7[113] + 148))() + 10; else v23 = 0; if ( v64 ) v24 = (*(int (**)(void))(*(_DWORD *)v7[125] + 148))() + 10; else v24 = 0; v25 = (*(int (**)(void))(*(_DWORD *)v7[111] + 148))(); sub_469E70(v7, v23 + v24 + v25); v26 = v7 + 113; v27 = (*(int (**)(void))(*(_DWORD *)v7[113] + 148))(); v28 = sub_46A610(v7) - v27; v29 = 0; for ( j = v28; v29 < v7[112]; ++v26 ) { (*(void (__stdcall **)(char *))(*(_DWORD *)*v26 + 172))(v68); (*(void (__stdcall **)(int))(*(_DWORD *)*v26 + 176))(j); sub_6149A0(*v26, 0x8Cu); v68 += 141; ++v29; } goto LABEL_78; } v30 = sub_6CD770(); v31 = v30; if ( v30 ) { if ( v30[1] ) { if ( sub_74C590(v30, a2) ) { v32 = v31[7]; if ( v32 >= 2 ) { v61 = v31[7]; if ( v32 > 20 ) v61 = 20; v33 = v31[6]; v34 = v32; v35 = (char *)sub_40A910(-1618052183); v36 = sub_7549E0(v35, v34, v33); v37 = operator new(0x10u); v65 = 2; if ( v37 ) v69 = sub_86B500(v37, "questlist"); else v69 = 0; v65 = -1; v38 = operator new(0x10u); v39 = v38; v60 = v38; v65 = 3; if ( v38 ) { sub_868D00(v38); *v39 = &NiIntegerExtraData::`vftable'; v39[3] = 0; } else { v39 = 0; } v65 = -1; sub_6162B0(v7, (int)v36, 0, (int)v39, (int)v69); if ( v61 > 0 ) *((_BYTE *)v7 + 512) = 1; v40 = v7[124]; if ( v40 ) *(_WORD *)(v40 + 352) = a2; } } } } } v41 = v7[112]; v42 = 0; if ( v41 ) { v43 = 141 * v41 + 1; v70 = (void *)(*(int (**)(void))(*(_DWORD *)v7[113] + 148))(); v42 = operator new(0xCu); v42[8] = 1; *(_DWORD *)v42 = v43; *((_DWORD *)v42 + 1) = v70; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[125] + 256))(0); if ( v64 ) { v44 = v7[125]; v45 = sub_5985E0((__int16)a4); v46 = (_DWORD **)v7[125]; if ( v45 ) { sub_598700(v46, 1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[125] + 468))(v7[129]); if ( v42 ) { if ( *(_DWORD *)v42 < (unsigned int)(*(int (**)(void))(*(_DWORD *)v7[125] + 144))() ) *(_DWORD *)v42 = (*(int (**)(void))(*(_DWORD *)v7[125] + 144))(); *((_DWORD *)v42 + 1) += (*(int (**)(void))(*(_DWORD *)v7[125] + 148))(); } else { v42 = operator new(0xCu); v42[8] = 1; *(_DWORD *)v42 = (*(int (**)(void))(*(_DWORD *)v7[125] + 144))(); *((_DWORD *)v42 + 1) = (*(int (**)(void))(*(_DWORD *)v7[125] + 148))(); } v47 = (char *)v7[125]; *((_BYTE *)v7 + 520) = 1; sub_599090(v47, a4); (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[125] + 256))(1); } else { sub_598700(v46, 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[125] + 468))(v7[129] >> 1); if ( v42 ) { if ( *(_DWORD *)v42 < (unsigned int)(*(int (**)(void))(*(_DWORD *)v7[125] + 144))() ) *(_DWORD *)v42 = (*(int (**)(void))(*(_DWORD *)v7[125] + 144))(); *((_DWORD *)v42 + 1) += (*(int (**)(void))(*(_DWORD *)v7[125] + 148))(); } else { v42 = operator new(0xCu); v42[8] = 1; *(_DWORD *)v42 = (*(int (**)(void))(*(_DWORD *)v7[125] + 144))(); *((_DWORD *)v42 + 1) = (*(int (**)(void))(*(_DWORD *)v7[125] + 148))(); } v48 = (char *)v7[125]; *((_BYTE *)v7 + 520) = 0; sub_599090(v48, a4); (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[125] + 256))(1); } } sub_619540(v7[111], a3, a6, (int)a4, a5, (int *)v42); v71 = (char *)1; v49 = (*(int (**)(void))(*(_DWORD *)v7[111] + 144))(); sub_469C70(v7, v49 + 10); if ( v7[112] ) v50 = (*(int (**)(void))(*(_DWORD *)v7[113] + 148))() + 10; else v50 = 0; if ( v64 ) v51 = (*(int (**)(void))(*(_DWORD *)v7[125] + 148))() + 10; else v51 = 0; v52 = (*(int (**)(void))(*(_DWORD *)v7[111] + 148))(); sub_469E70(v7, v50 + v51 + v52); v53 = (*(int (**)(void))(*(_DWORD *)v7[113] + 148))(); v54 = sub_46A610(v7) - v53; v67 = 0; if ( v7[112] > 0 ) { v55 = v7 + 113; do { (*(void (__stdcall **)(char *))(*(_DWORD *)*v55 + 172))(v71); (*(void (__stdcall **)(int))(*(_DWORD *)*v55 + 176))(v54); sub_6149A0(*v55, 0x8Cu); v71 += 141; ++v55; ++v67; } while ( v67 < v7[112] ); } if ( *((_BYTE *)v7 + 512) ) { (*(void (__stdcall **)(char *))(*(_DWORD *)v7[127] + 172))(v71 - 141); (*(void (__stdcall **)(int))(*(_DWORD *)v7[127] + 176))(v54 - 2); sub_6149A0(v7[127], 0x8Cu); } LABEL_78: if ( v64 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[125] + 172))(0); v56 = *(_DWORD *)v7[125]; v57 = (*(int (**)(void))(*(_DWORD *)v7[111] + 148))(); (*(void (__thiscall **)(_DWORD, int))(v56 + 176))(v7[125], v57 + 10); } result = a4; *((_BYTE *)v7 + 484) = a5; v7[120] = a4; return result; } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; //----- (00619E80) -------------------------------------------------------- char __thiscall sub_619E80(void *this, int a2, int a3, void *a4, char a5, void *a6) { int v6; // edi void *v7; // esi _DWORD *v8; // eax _DWORD *v9; // edi char *v10; // eax _DWORD *v11; // eax char *v12; // eax unsigned int v13; // ebx unsigned int v14; // edi _DWORD *v15; // ecx int v16; // ebx int *v17; // ecx int v18; // ebx unsigned int v19; // eax float v20; // ST14_4 char v22; // [esp+24h] [ebp-Ch] float v23; // [esp+38h] [ebp+8h] float v24; // [esp+38h] [ebp+8h] v6 = dword_ACDA48; v7 = this; LOBYTE(v8) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2); if ( (_BYTE)v8 ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v6 + 200) ) { v8 = (_DWORD *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)a2); if ( *v8 ) { sub_615710((float *)v7, a3); v8 = (_DWORD *)sub_61B590(a2); v9 = v8; if ( v8 ) { if ( !byte_ACAD5C ) sub_420410(); v10 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.png", byte_ACAB50, v9); v11 = sub_486130((int)v10); if ( !v11 ) { if ( !byte_ACAD5C ) sub_420410(); v12 = sub_7549E0("%s\\game\\NPCFaceCut\\%s.tga", byte_ACAB50, v9); v11 = sub_486130((int)v12); } if ( (_WORD)a2 != -1 && v11 ) { sub_8FCC40(*(void **)(*((_DWORD *)v7 + 89) + 288), (int)v11); (*(void (__stdcall **)(signed int))(**((_DWORD **)v7 + 89) + 256))(1); } else { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v7 + 89) + 256))(0); } if ( (unsigned int)xRight > 0x320 || (unsigned int)dword_AC2F78 > 0x258 ) { v13 = (unsigned int)(650 * xRight) >> 10; v14 = 570 * dword_AC2F78 / 0x300u; } else { v13 = 650 * xRight / 0x320u; v14 = 570 * dword_AC2F78 / 0x2BCu; } v15 = (_DWORD *)*((_DWORD *)v7 + 87); *((_WORD *)v7 + 180) = a2; sub_6196F0(v15, a2, a3, a4, a5, v13 - 30, a6); v16 = v13 - (*(int (**)(void))(**((_DWORD **)v7 + 87) + 144))(); if ( v16 < 0 ) v16 = 20; (*(void (__stdcall **)(int))(**((_DWORD **)v7 + 87) + 172))(v16); v17 = (int *)*((_DWORD *)v7 + 87); v18 = *v17; v19 = (*(int (**)(void))(*v17 + 148))(); (*(void (__thiscall **)(_DWORD, unsigned int))(v18 + 176))(*((_DWORD *)v7 + 87), v14 - (v19 >> 1)); *(_DWORD *)(*((_DWORD *)v7 + 87) + 344) = 1; v23 = (double)(unsigned int)dword_AC2F78 * 0.800000011920929; v20 = v23; v24 = 0.800000011920929 * (double)(unsigned int)xRight; sub_46A150(*((float **)v7 + 87), v24, v20); (*(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v22); LOBYTE(v8) = sub_8D06A0((float *)v7 + 93, flt_ACCFCC); *((float *)v7 + 98) = 1.0; } } } } return (char)v8; } // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // ACDA48: using guessed type int dword_ACDA48; //----- (0061A0F0) -------------------------------------------------------- int __thiscall sub_61A0F0(float *this, int a2, void *a3, char a4) { float *v4; // esi unsigned int v5; // edi unsigned int v6; // ebx _DWORD *v7; // ecx int v8; // eax int v9; // edi unsigned int v10; // eax char v12; // [esp+Ch] [ebp-Ch] int v13; // [esp+20h] [ebp+8h] v4 = this; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)this + 89) + 256))(0); v5 = (unsigned int)(440 * xRight) >> 10; v6 = 370 * dword_AC2F78 / 0x300u; sub_615710(v4, a2); sub_6196F0(*((_DWORD **)v4 + 87), 0xFFFF, a2, a3, a4, v5 - 30, (void *)1); v7 = (_DWORD *)*((_DWORD *)v4 + 87); v13 = *v7; v8 = (*(int (**)(void))(*v7 + 144))(); (*(void (__thiscall **)(_DWORD *, unsigned int))(v13 + 172))(*((_DWORD **)v4 + 87), v5 - v8); v9 = **((_DWORD **)v4 + 87); v10 = (*(int (**)(void))(**((_DWORD **)v4 + 87) + 148))(); (*(void (__thiscall **)(_DWORD *, unsigned int))(v9 + 176))(*((_DWORD **)v4 + 87), v6 - (v10 >> 1)); *(_DWORD *)(*((_DWORD *)v4 + 87) + 344) = 0; return (*(int (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200))(&v12); } //----- (0061A1E0) -------------------------------------------------------- char __thiscall sub_61A1E0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // edi int v13; // ebx volatile LONG *v14; // eax volatile LONG **v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // edi const CHAR *v20; // eax volatile LONG *v21; // edi volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG **v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG **v31; // eax volatile LONG **v32; // eax volatile LONG *v33; // eax volatile LONG **v34; // edi void **v35; // eax void **v36; // eax void **v37; // eax void **v38; // eax void **v39; // eax void **v40; // eax int v41; // eax int *v42; // eax int v43; // ebx int v44; // edi int v45; // eax int v46; // eax void (__thiscall ***v47)(_DWORD, signed int); // esi void (__thiscall ***v48)(_DWORD, signed int); // esi int v49; // [esp+68h] [ebp-74h] int v50; // [esp+6Ch] [ebp-70h] int v51; // [esp+70h] [ebp-6Ch] char v52; // [esp+78h] [ebp-64h] int v53; // [esp+7Ch] [ebp-60h] int v54; // [esp+80h] [ebp-5Ch] int v55; // [esp+84h] [ebp-58h] int v56; // [esp+88h] [ebp-54h] int v57; // [esp+8Ch] [ebp-50h] int v58; // [esp+90h] [ebp-4Ch] int v59; // [esp+94h] [ebp-48h] int v60; // [esp+98h] [ebp-44h] int v61; // [esp+9Ch] [ebp-40h] volatile LONG **v62; // [esp+A0h] [ebp-3Ch] int v63; // [esp+A4h] [ebp-38h] int v64; // [esp+A8h] [ebp-34h] int v65; // [esp+ACh] [ebp-30h] void *v66; // [esp+B0h] [ebp-2Ch] int v67; // [esp+C0h] [ebp-1Ch] unsigned int v68; // [esp+C4h] [ebp-18h] int v69; // [esp+D8h] [ebp-4h] v2 = (int)this; v61 = a2; v65 = 0; v3 = dword_BA6BA0; v69 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\QuestList.nif"); sub_8F66B0(v4, (int)&v65, v3); if ( !v65 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v59 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v69) = 1; if ( v8 ) v62 = *(volatile LONG ***)(v8 + 4); else v62 = 0; v9 = sub_8FB140(v65, (int)"Frame", (int)&v64, (int)&v63, (volatile LONG *)v62); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, v61, (int)"DlgQuestListWin", 0) ) { LOBYTE(v69) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v65; v69 = -1; if ( v65 && !InterlockedDecrement((volatile LONG *)(v65 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v63; v13 = v64; v61 = v63; v14 = (volatile LONG *)sub_43D0D0(0x13u); if ( v14 ) v15 = sub_8FB140(v65, (int)"Theme", (int)&v64, (int)&v63, v14); else v15 = sub_8FB140(v65, (int)"Theme", (int)&v64, (int)&v63, 0); sub_8F3EB0(v64 - v13, v63 - v12, (int)v15, v2, 0, 0); if ( sub_8F71E0(v65, (int)"WinTitle", &v64, &v63, &v58, &v57) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v64 - v13, v63 - v12, v58, v57, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v60 = *v19; v20 = sub_40A910(-117712292); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = (volatile LONG *)v62; v22 = sub_8FB140(v65, (int)"Panel01", (int)&v64, (int)&v63, (volatile LONG *)v62); v23 = sub_8F3EB0(v64 - v13, v63 - v61, (int)v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 240))(v23, 1); v24 = sub_8FB140(v65, (int)"Panel02", (int)&v64, (int)&v63, v21); v25 = sub_8F3EB0(v64 - v13, v63 - v61, (int)v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 240))(v25, 1); v26 = sub_8FB140(v65, (int)"IconSlot", (int)&v64, (int)&v63, v21); v27 = sub_8F3EB0(v64 - v13, v63 - v61, (int)v26, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v28 = sub_8FB140(v65, (int)"Title01Nor", (int)&v64, (int)&v63, v21); v29 = sub_8F3EB0(v64 - v13, v63 - v61, (int)v28, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); v62 = sub_8FB140(v65, (int)"ClsNor", (int)&v64, (int)&v63, v21); sub_8FB650(v62, v65, (int)"ClsClick"); sub_8FB650(v62, v65, (int)"ClsOver"); sub_8FE0F0(v64 - v13, v63 - v61, (int)v62, v2, 2, 0, 0); v60 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("HelpLinkNor") ) { v62 = sub_8FB140(v65, (int)"HelpLinkNor", (int)&v64, (int)&v63, (volatile LONG *)v60); sub_8FB650(v62, v65, (int)"HelpLinkClick"); sub_8FB650(v62, v65, (int)"HelpLinkOver"); sub_8FE0F0(v64 - v13, v63 - v61, (int)v62, v2, 3, 0, 0); } v49 = 0; v50 = 0; v51 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; LOBYTE(v69) = 2; v30 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v49, 1); *v30 = (volatile LONG *)1; v30[1] = (volatile LONG *)v65; v62 = v30; v68 = 15; v67 = 0; LOBYTE(v66) = 0; sub_4018E0(&v66, "ColumnBarNor", 0xCu); LOBYTE(v69) = 3; v62 += 18; sub_40B060((int *)v62, (const void **)&v66); LOBYTE(v69) = 2; if ( v68 >= 0x10 ) operator delete(v66); v68 = 15; v67 = 0; LOBYTE(v66) = 0; sub_4018E0(&v66, "ColumnBarClick", 0xEu); LOBYTE(v69) = 4; sub_40B060((int *)v62, (const void **)&v66); LOBYTE(v69) = 2; if ( v68 >= 0x10 ) operator delete(v66); v68 = 15; v67 = 0; LOBYTE(v66) = 0; sub_4018E0(&v66, "ColumnBarClick", 0xEu); LOBYTE(v69) = 5; sub_40B060((int *)v62, (const void **)&v66); LOBYTE(v69) = 2; if ( v68 >= 0x10 ) operator delete(v66); v62 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v49, 2); *v62 = (volatile LONG *)2; v68 = 15; v67 = 0; LOBYTE(v66) = 0; sub_4018E0(&v66, "Column01", 8u); LOBYTE(v69) = 6; sub_40B060((int *)v62 + 18, (const void **)&v66); LOBYTE(v69) = 2; if ( v68 >= 0x10 ) operator delete(v66); v31 = v62; *((_BYTE *)v62 + 88) = 1; v31[1] = (volatile LONG *)v65; v68 = 15; v67 = 0; LOBYTE(v66) = 0; sub_466680(&v49, 0); v32 = sub_8FB140(v65, (int)"SubText01", (int)&v64, (int)&v63, v21); v33 = sub_466330(v64 - v13, v63 - v61, (int)v32, *(float *)&v2, (int **)&v49, 0, 0); *(_DWORD *)(v2 + 344) = v33; *((_DWORD *)v33 + 88) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 344) + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 344), 4); sub_465130(*(_DWORD **)(v2 + 344)); v34 = sub_8FB140(v65, (int)"SlideBar_SlideBtnMiddle", (int)&v64, (int)&v63, v21); v35 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v35, "SlideBar_DnBtn01Nor"); v36 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v36, "SlideBar_DnBtn01Click"); v37 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v37, "SlideBar_DnBtn01Over"); v38 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v38, "SlideBar_UpBtn01Nor"); v39 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v39, "SlideBar_UpBtn01Click"); v40 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v65 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v40, "SlideBar_UpBtn01Over"); v41 = sub_464310(v65, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v34, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 348) = v41; *(_DWORD *)(v41 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; v42 = *(int **)(v2 + 348); v43 = *v42; v44 = *(_DWORD *)(v2 + 348); v45 = (*(int (__thiscall **)(_DWORD))(*v42 + 168))(*(_DWORD *)(v2 + 348)); v46 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v44 + 164))(v44, v45); (*(void (__thiscall **)(_DWORD, int))(v43 + 308))(*(_DWORD *)(v2 + 348), v46 - 18); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v69) = 1; sub_40AE10((void **)&v49); v47 = (void (__thiscall ***)(_DWORD, signed int))v59; LOBYTE(v69) = 0; if ( !InterlockedDecrement((volatile LONG *)(v59 + 4)) ) (**v47)(v47, 1); v48 = (void (__thiscall ***)(_DWORD, signed int))v65; v69 = -1; if ( v65 && !InterlockedDecrement((volatile LONG *)(v65 + 4)) && v48 ) (**v48)(v48, 1); result = 1; } else { v16 = (void (__thiscall ***)(_DWORD, signed int))v59; LOBYTE(v69) = 0; if ( !InterlockedDecrement((volatile LONG *)(v59 + 4)) ) (**v16)(v16, 1); v17 = (void (__thiscall ***)(_DWORD, signed int))v65; v69 = -1; if ( !v65 || InterlockedDecrement((volatile LONG *)(v65 + 4)) || !v17 ) return 0; (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0061AA10) -------------------------------------------------------- void __thiscall sub_61AA10(void *this) { int v1; // ebx _DWORD *v2; // eax _DWORD *v3; // ecx _DWORD *v4; // esi _DWORD *v5; // eax int *v6; // edi _DWORD *v7; // esi void *v8; // ebx __int16 v9; // dx char *v10; // eax void *v11; // esi char v12; // dl int v13; // eax char v14; // cl char v15; // dl char v16; // cl const CHAR *v17; // eax void *v18; // ecx char *v19; // eax unsigned int v20; // edi _DWORD *v21; // ecx _DWORD *v22; // ecx int v23; // eax int v24; // [esp-4h] [ebp-88h] void **v25; // [esp+10h] [ebp-74h] char *v26; // [esp+1Ch] [ebp-68h] int v27; // [esp+20h] [ebp-64h] _DWORD *v28; // [esp+24h] [ebp-60h] int v29; // [esp+28h] [ebp-5Ch] _DWORD *v30; // [esp+2Ch] [ebp-58h] int v31; // [esp+30h] [ebp-54h] int v32; // [esp+34h] [ebp-50h] void *v33; // [esp+38h] [ebp-4Ch] int v34; // [esp+3Ch] [ebp-48h] int v35; // [esp+44h] [ebp-40h] void *v36; // [esp+48h] [ebp-3Ch] int v37; // [esp+58h] [ebp-2Ch] unsigned int v38; // [esp+5Ch] [ebp-28h] int v39; // [esp+64h] [ebp-20h] char v40[4]; // [esp+68h] [ebp-1Ch] int v41; // [esp+6Ch] [ebp-18h] char v42; // [esp+70h] [ebp-14h] bool v43; // [esp+71h] [ebp-13h] bool v44; // [esp+72h] [ebp-12h] bool v45; // [esp+73h] [ebp-11h] int v46; // [esp+80h] [ebp-4h] v1 = (int)this; v27 = (int)this; v2 = sub_6CD770(); v3 = *(_DWORD **)(v1 + 344); v4 = v2; v5 = (_DWORD *)v2[1]; v28 = v4; v30 = v5; sub_466A50(v3); v34 = 0; v6 = (int *)operator new(0x38u); if ( !v6 ) { v26 = 0; std::exception::exception((std::exception *)&v25, (const char *const *)&v26); v25 = &std::bad_alloc::`vftable'; _CxxThrowException(&v25, &_TI2_AVbad_alloc_std__); } *v6 = (int)v6; v33 = v6; v6[1] = (int)v6; v46 = 0; if ( v30 && sub_74C590(v4, *(_WORD *)(v1 + 352)) ) { v29 = v4[7]; v31 = 0; if ( v29 > 0 ) { v32 = 0; while ( 1 ) { v7 = (_DWORD *)(v32 + v4[8]); v8 = (void *)sub_74E810(v30, *(unsigned __int16 *)(v7[1] + 4)); sub_617A50(&v35); v9 = *(_WORD *)(v7[1] + 4); LOBYTE(v46) = 1; LOWORD(v35) = v9; sub_4018E0(&v36, v8, strlen((const char *)v8)); v39 = *(unsigned __int16 *)(v7[1] + 4); *(_DWORD *)v40 = v7[3]; v41 = v7[2]; v42 = *(_BYTE *)(v7[1] + 17); v45 = *(_BYTE *)(v7[1] + 18) != 0; v43 = *(_BYTE *)(v7[1] + 32) != 0; v44 = *(_BYTE *)(v7[1] + 56) != 0; v10 = sub_61B9B0((char *)v6, v6[1], (int)&v35); if ( (unsigned int)(89478484 - v34) < 1 ) std::_Xlength_error("list too long"); ++v34; v6[1] = (int)v10; **((_DWORD **)v10 + 1) = v10; LOBYTE(v46) = 0; if ( v38 >= 0x10 ) operator delete(v36); v32 += 16; if ( ++v31 >= v29 ) break; v4 = v28; } v1 = v27; } sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614E70); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614EA0); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614EC0); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614EE0); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614F00); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614F20); sub_61BB10(&v33, (unsigned __int8 (__cdecl *)(int *, int *))sub_614F40); v11 = *(void **)v33; if ( *(void **)v33 != v33 ) { while ( 1 ) { LOWORD(v35) = *((_WORD *)v11 + 4); v38 = 15; v37 = 0; LOBYTE(v36) = 0; sub_4017F0((const void **)&v36, (const void **)v11 + 3, 0, (void *)0xFFFFFFFF); v12 = *((_BYTE *)v11 + 52); v13 = *((_DWORD *)v11 + 10); *(_DWORD *)v40 = *((_DWORD *)v11 + 11); v14 = *((_BYTE *)v11 + 53); v42 = v12; v15 = *((_BYTE *)v11 + 54); v43 = v14; v16 = *((_BYTE *)v11 + 55); v39 = v13; v41 = *((_DWORD *)v11 + 12); v44 = v15; v45 = v16; LOBYTE(v46) = 2; switch ( v41 ) { case 4: case 5: case 9: case 20: v17 = sub_40C190(-1987520582); break; case 6: v17 = sub_40C190(-1526862915); break; case 8: v17 = sub_40C190(-2053322291); break; default: v17 = "."; break; } v18 = v36; if ( v38 < 0x10 ) v18 = &v36; v19 = sub_7549E0("(%d) %s (%s)", *(_DWORD *)v40, v18, v17); v20 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v1 + 344), v19); sub_464B20(*(_DWORD **)(v1 + 344), v20, v39); if ( v41 == 5 || v41 == 20 || v41 == 4 ) break; v21 = *(_DWORD **)(v1 + 344); if ( v41 != 6 ) { v24 = 255; LABEL_28: sub_464BE0(v21, v20, 255, 255, v24); goto LABEL_29; } sub_464BE0(v21, v20, 0, 248, 240); LABEL_29: LOBYTE(v46) = 0; if ( v38 >= 0x10 ) operator delete(v36); v11 = *(void **)v11; if ( v11 == v33 ) goto LABEL_32; } v21 = *(_DWORD **)(v1 + 344); v24 = 0; goto LABEL_28; } LABEL_32: sub_464D00(*(_DWORD **)(v1 + 344), 4); sub_464DA0(*(_DWORD **)(v1 + 344), 1u, 5); v22 = *(_DWORD **)(v1 + 348); if ( v22 ) { v23 = *(_DWORD *)(v1 + 344); if ( v23 ) { sub_4638F0(v22, *(_DWORD *)(v23 + 336)); *(_DWORD *)(*(_DWORD *)(v1 + 344) + 344) = *(_DWORD *)(*(_DWORD *)(v1 + 348) + 300); sub_465130(*(_DWORD **)(v1 + 344)); } } } sub_61B950((void ***)&v33); operator delete(v33); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061AE50) -------------------------------------------------------- void __userpurge sub_61AE50(int a1@, int a2@, int a3@, int a4, _DWORD *a5) { int v5; // ebx _DWORD *v6; // esi int v7; // eax int v8; // edi int v9; // eax int v10; // ecx void *v11; // ecx unsigned int v12; // edi const CHAR *v13; // edi int v14; // ecx unsigned int v15; // esi const CHAR *v16; // edi bool v17; // zf int v18; // edx char v19; // al int v20; // [esp-8h] [ebp-1Ch] int v21; // [esp-4h] [ebp-18h] int v22; // [esp+4h] [ebp-10h] int v23; // [esp+8h] [ebp-Ch] char v24; // [esp+Ch] [ebp-8h] int v25; // [esp+10h] [ebp-4h] v5 = a1; if ( a4 != 77777 ) return; v21 = a3; v6 = a5; v20 = a2; sub_85AA60(a5, "type"); v7 = sub_85AA60(v6, "action"); v8 = v7; if ( !v7 ) goto LABEL_50; a5 = *(_DWORD **)(v7 + 12); if ( !strcmp((const char *)a5, "close") ) { v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v9 ) { v10 = *(_DWORD *)(v9 + 1032); if ( v10 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v10 + 260))() ) sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); } } goto LABEL_50; } if ( !strcmp((const char *)a5, "questlist") ) { v11 = *(void **)(v5 + 496); if ( v11 ) { sub_61AA10(v11); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 496)); } return; } if ( !strcmp((const char *)a5, "DivorceRequest") ) { (*(void (__stdcall **)(LONG, LONG))(**(_DWORD **)(v5 + 492) + 308))(pt.x, pt.y); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v5 + 492)); return; } if ( !strcmp((const char *)a5, "MarryRequest") ) { sub_6F3D10(&off_AB7F2C, 8, 83, 0, 0); LABEL_50: if ( *(_DWORD *)(v5 + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 4))(36, 0, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 20))(36, 0, v5 + 232); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 36, 0, v5 + 232); return; } if ( !strcmp((const char *)a5, "PetSetName") ) { if ( *(_DWORD *)(v5 + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 4))(80, 0, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 20))(80, 0, v5 + 232); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 80, 0, v5 + 232); goto LABEL_50; } if ( !strcmp((const char *)a5, "PetSetNameCancel") ) { if ( *(_DWORD *)(v5 + 236) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 4))(81, 0, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 236) + 20))(81, 0, v5 + 232); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 81, 0, v5 + 232); goto LABEL_50; } if ( *(_BYTE *)(v5 + 504) ) { v12 = 0; if ( sub_55EDB0() > 0 ) { while ( strcmp((const char *)(sub_55ED90(v12) + 3), (const char *)a5) ) { if ( (signed int)++v12 >= sub_55EDB0() ) goto LABEL_50; } HIBYTE(a4) = *(_BYTE *)sub_55ED90(v12); sub_6F3D10(&off_AB7F2C, 6, 26, (char *)&a4 + 3, 1u); *(_BYTE *)(v5 + 504) = 0; } goto LABEL_50; } if ( (*(unsigned __int8 (__stdcall **)(int, int))(**(_DWORD **)(v5 + 500) + 260))(v20, v21) && *(_BYTE *)(v5 + 520) ) { if ( sub_598640(*(_WORD **)(v5 + 500)) == -1 ) { v13 = sub_40C190(-1862477369); if ( *(_DWORD *)(v5 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 236) + 4))(25, v13, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 236) + 20))(25, v13, v5 + 232); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 25); return; } v25 = sub_598640(*(_WORD **)(v5 + 500)); } else { v25 = -1; } if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v5 + 500) + 260))() || (v14 = *(_DWORD *)(v5 + 500), v15 = sub_598760(*(_WORD *)(v5 + 480)), sub_686420(&byte_ADA230) >= v15) ) { v17 = *(_DWORD *)(v5 + 236) == 0; v18 = *(_DWORD *)(v5 + 480); v19 = *(_BYTE *)(v5 + 484); v22 = *(_DWORD *)(v8 + 12); v23 = v18; v24 = v19; if ( !v17 ) { (*(void (__stdcall **)(signed int, int *, int))(**(_DWORD **)(v5 + 236) + 4))(37, &v22, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, int *, int))(**(_DWORD **)(v5 + 236) + 20))(37, &v22, v5 + 232); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 37); goto LABEL_50; } v16 = sub_40C190(1820086166); if ( *(_DWORD *)(v5 + 236) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 236) + 4))(25, v16, v5 + 232); if ( *(_DWORD *)(v5 + 236) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v5 + 236) + 20))(25, v16, v5 + 232); } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)(v5 + 232) + 20))(v5 + 232, 25); } // 61AE50: could not find valid save-restore pair for edi // 61AE50: could not find valid save-restore pair for esi // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (0061B390) -------------------------------------------------------- void *__thiscall sub_61B390(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9EE408: using guessed type void *NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; //----- (0061B3C0) -------------------------------------------------------- void *__thiscall sub_61B3C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &FlexDlgBtn::`vftable'; *((_DWORD *)this + 58) = &FlexDlgBtn::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ED8F0: using guessed type void *FlexDlgBtn::`vftable'; // 9ED90C: using guessed type void *FlexDlgBtn::`vftable'; //----- (0061B400) -------------------------------------------------------- void *__thiscall sub_61B400(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &TextBtn::`vftable'; *((_DWORD *)this + 58) = &TextBtn::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EDB44: using guessed type void *TextBtn::`vftable'; // 9EDB64: using guessed type void *TextBtn::`vftable'; //----- (0061B440) -------------------------------------------------------- void *__thiscall sub_61B440(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AutoSizingDialogWin::`vftable'; *((_DWORD *)this + 58) = &AutoSizingDialogWin::`vftable'; sub_8F29C0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EDD9C: using guessed type void *AutoSizingDialogWin::`vftable'; // 9EDDBC: using guessed type void *AutoSizingDialogWin::`vftable'; //----- (0061B480) -------------------------------------------------------- void *__thiscall sub_61B480(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &SpeechBubbleDlgWin::`vftable'; *((_DWORD *)this + 58) = &SpeechBubbleDlgWin::`vftable'; sub_469C50(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EDF88: using guessed type void *SpeechBubbleDlgWin::`vftable'; // 9EDFA4: using guessed type void *SpeechBubbleDlgWin::`vftable'; //----- (0061B4C0) -------------------------------------------------------- void *__thiscall sub_61B4C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &DlgQuestListWin::`vftable'; *((_DWORD *)this + 58) = &DlgQuestListWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EE1C8: using guessed type void *DlgQuestListWin::`vftable'; // 9EE1E4: using guessed type void *DlgQuestListWin::`vftable'; //----- (0061B500) -------------------------------------------------------- const char *__cdecl sub_61B500(const char *a1) { const char *v1; // ebx int v2; // eax unsigned int v3; // edi unsigned int v4; // esi const char *result; // eax v1 = a1; if ( !a1 || !*a1 ) return 0; v2 = *(_DWORD *)(dword_ACD954 + 56); if ( v2 ) v3 = *(_DWORD *)(v2 + 40); else v3 = 0; v4 = 0; if ( v3 ) { do { result = (const char *)sub_7474E0((_DWORD *)(dword_ACD954 + 4), v4); if ( result ) { if ( !strcmp(result, v1) ) return result; v1 = a1; } ++v4; } while ( v4 < v3 ); } return 0; } // ACD954: using guessed type int dword_ACD954; //----- (0061B590) -------------------------------------------------------- int __cdecl sub_61B590(int a1) { int v1; // esi int v2; // ecx int v3; // eax int result; // eax const char *v5; // eax const char *v6; // eax v1 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a1) && (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) && (v2 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v2 + 4 * (unsigned __int16)a1)) && (v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)a1)) != 0 && (v5 = (const char *)(v3 + 2)) != 0 && (v6 = sub_61B500(v5)) != 0 ) { result = (int)(v6 + 32); } else { result = 0; } return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (0061B5F0) -------------------------------------------------------- int __thiscall sub_61B5F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST10_4 int result; // eax v1 = this; *this = &NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; return result; } // 9EE408: using guessed type void *NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; // 9EE418: using guessed type void *NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; //----- (0061B670) -------------------------------------------------------- _DWORD *__thiscall sub_61B670(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9EE408: using guessed type void *NiTListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; // 9EE418: using guessed type void *NiTPointerListBase,AutoSizingDialogWin::VirtualRect *>::`vftable'; //----- (0061B700) -------------------------------------------------------- _DWORD *__thiscall sub_61B700(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &NpcDialogWin::`vftable'; *((_DWORD *)this + 58) = &NpcDialogWin::`vftable'; v3 = *((_DWORD *)this + 89); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EE42C: using guessed type void *NpcDialogWin::`vftable'; // 9EE44C: using guessed type void *NpcDialogWin::`vftable'; //----- (0061B7A0) -------------------------------------------------------- int __thiscall sub_61B7A0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 89478484 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (0061B850) -------------------------------------------------------- void __thiscall sub_61B850(void *this) { void *v1; // esi _DWORD *v2; // eax void **v3; // [esp+4h] [ebp-10h] char *v4; // [esp+10h] [ebp-4h] v1 = this; *((_DWORD *)this + 1) = 0; v2 = operator new(0x38u); if ( !v2 ) { v4 = 0; std::exception::exception((std::exception *)&v3, (const char *const *)&v4); v3 = &std::bad_alloc::`vftable'; _CxxThrowException(&v3, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v1 = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)v1 + 4) = *(_DWORD *)v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061B8B0) -------------------------------------------------------- int __thiscall sub_61B8B0(const void **this, int a2) { *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; sub_4017F0((const void **)a2, this, 0, (void *)0xFFFFFFFF); return a2; } //----- (0061B8E0) -------------------------------------------------------- char *__thiscall sub_61B8E0(char *this, int a2) { char *v2; // esi int v3; // ecx v2 = this; v3 = (int)(this + 4); *(_WORD *)v2 = *(_WORD *)a2; *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, (const void **)(a2 + 4), 0, (void *)0xFFFFFFFF); *((_DWORD *)v2 + 8) = *(_DWORD *)(a2 + 32); *((_DWORD *)v2 + 9) = *(_DWORD *)(a2 + 36); *((_DWORD *)v2 + 10) = *(_DWORD *)(a2 + 40); v2[44] = *(_BYTE *)(a2 + 44); v2[45] = *(_BYTE *)(a2 + 45); v2[46] = *(_BYTE *)(a2 + 46); v2[47] = *(_BYTE *)(a2 + 47); return v2; } //----- (0061B950) -------------------------------------------------------- void __thiscall sub_61B950(void ***this) { void ***v1; // edi void **v2; // esi void **v3; // ebx v1 = this; v2 = (void **)**this; **this = *this; (*this)[1] = *this; this[1] = 0; if ( v2 != *this ) { do { v3 = (void **)*v2; if ( (unsigned int)v2[8] >= 0x10 ) operator delete(v2[3]); v2[8] = (void *)15; v2[7] = 0; *((_BYTE *)v2 + 12) = 0; operator delete(v2); v2 = v3; } while ( v3 != *v1 ); } } //----- (0061B9B0) -------------------------------------------------------- char *__stdcall sub_61B9B0(char *a1, int a2, int a3) { char *v3; // esi char *v4; // eax int v6; // [esp+0h] [ebp-30h] void **v7; // [esp+10h] [ebp-20h] void *v8; // [esp+1Ch] [ebp-14h] int *v9; // [esp+20h] [ebp-10h] int v10; // [esp+2Ch] [ebp-4h] v9 = &v6; v3 = (char *)operator new(0x38u); v8 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a1); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v4 = a1; *((_DWORD *)v3 + 1) = a2; v10 = 0; *(_DWORD *)v3 = v4; a1 = v3 + 8; a2 = (int)(v3 + 8); LOBYTE(v10) = 1; if ( v3 != (char *)-8 ) sub_61B8E0(v3 + 8, a3); return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061BA70) -------------------------------------------------------- void __thiscall sub_61BA70(void *this) { void **v1; // esi v1 = (void **)this; sub_61B950((void ***)this); operator delete(*v1); } //----- (0061BA90) -------------------------------------------------------- void __thiscall sub_61BA90(int ***this, int ***a2, unsigned __int8 (__cdecl *a3)(int *, int *)) { int ***v3; // edx int **v4; // eax int *v5; // esi int **v6; // edi int *v7; // ebx int v8; // edi int **v9; // [esp+0h] [ebp-Ch] int ***v10; // [esp+4h] [ebp-8h] int **v11; // [esp+8h] [ebp-4h] v3 = a2; v10 = this; if ( a2 != this ) { v4 = *a2; v5 = **a2; v6 = *this; v7 = **this; v9 = *this; v11 = *a2; if ( v7 == (int *)*this ) { LABEL_9: if ( v5 != (int *)v4 ) sub_61B7A0(this, (int)v6, v3, (int)v5, (int)v4, (unsigned int)v3[1]); } else { while ( v5 != (int *)v4 ) { if ( a3(v5 + 2, v7 + 2) ) { v8 = *v5; sub_61B7A0(v10, (int)v7, a2, (int)v5, *v5, 1u); v5 = (int *)v8; v6 = v9; } else { v7 = (int *)*v7; } v4 = v11; if ( v7 == (int *)v6 ) { v3 = a2; this = v10; goto LABEL_9; } } } } } //----- (0061BB10) -------------------------------------------------------- void __thiscall sub_61BB10(void **this, unsigned __int8 (__cdecl *a2)(int *, int *)) { void **v2; // edi bool v3; // cf unsigned int v4; // ebx _DWORD *v5; // eax int v6; // eax int v7; // ecx int v8; // edx int v9; // esi unsigned int v10; // edi char *v11; // esi int **v12; // eax int v13; // edx int v14; // eax char *v15; // eax void *v16; // ecx int v17; // ecx int ***v18; // esi void **v19; // eax void **v20; // [esp+10h] [ebp-16Ch] char *v21; // [esp+1Ch] [ebp-160h] unsigned __int8 (__cdecl *v22)(int *, int *); // [esp+20h] [ebp-15Ch] void **v23; // [esp+24h] [ebp-158h] void *v24; // [esp+28h] [ebp-154h] int v25; // [esp+2Ch] [ebp-150h] char v26[12]; // [esp+34h] [ebp-148h] char v27; // [esp+40h] [ebp-13Ch] char v28; // [esp+154h] [ebp-28h] int v29; // [esp+178h] [ebp-4h] v2 = this; v3 = (unsigned int)this[1] < 2; v23 = this; v22 = a2; if ( !v3 ) { v4 = 0; v25 = 0; v5 = operator new(0x38u); if ( !v5 ) { v21 = 0; std::exception::exception((std::exception *)&v20, (const char *const *)&v21); v20 = &std::bad_alloc::`vftable'; _CxxThrowException(&v20, &_TI2_AVbad_alloc_std__); } *v5 = v5; v24 = v5; v5[1] = v5; v29 = 0; `eh vector constructor iterator'(v26, 0xCu, 26, sub_61B850, sub_61BA70); LOBYTE(v29) = 1; if ( v2[1] ) { do { v6 = **(_DWORD **)*v2; v7 = *(_DWORD *)*v2; v8 = *(_DWORD *)v24; if ( &v24 != v2 ) { if ( (unsigned int)(89478484 - v25) < 1 ) std::_Xlength_error("list too long"); ++v25; v2[1] = (char *)v2[1] - 1; } **(_DWORD **)(v7 + 4) = v6; **(_DWORD **)(v6 + 4) = v8; **(_DWORD **)(v8 + 4) = v7; v9 = *(_DWORD *)(v8 + 4); *(_DWORD *)(v8 + 4) = *(_DWORD *)(v6 + 4); v10 = 0; *(_DWORD *)(v6 + 4) = *(_DWORD *)(v7 + 4); *(_DWORD *)(v7 + 4) = v9; if ( !v4 ) goto LABEL_33; v11 = v26; do { if ( !*((_DWORD *)v11 + 1) ) break; sub_61BA90((int ***)v11, (int ***)&v24, v22); if ( v11 != (char *)&v24 ) { v12 = *(int ***)v11; v13 = v25; *(_DWORD *)v11 = v24; v24 = v12; v14 = *((_DWORD *)v11 + 1); *((_DWORD *)v11 + 1) = v13; v25 = v14; } ++v10; v11 += 12; } while ( v10 < v4 ); if ( v10 == 25 ) { sub_61BA90((int ***)&v28, (int ***)&v24, v22); } else { LABEL_33: v15 = &v26[12 * v10]; if ( v15 != (char *)&v24 ) { v16 = *(void **)v15; *(_DWORD *)v15 = v24; v24 = v16; v17 = *((_DWORD *)v15 + 1); *((_DWORD *)v15 + 1) = v25; v25 = v17; } if ( v10 == v4 ) ++v4; } v2 = v23; } while ( v23[1] ); } if ( v4 > 1 ) { v18 = (int ***)&v27; v23 = (void **)(v4 - 1); do { sub_61BA90(v18, v18 - 3, v22); v18 += 3; v23 = (void **)((char *)v23 - 1); } while ( v23 ); } v19 = &v24 + 3 * v4; if ( v2 != v19 ) { if ( v19[1] ) sub_61B7A0(v2, *(_DWORD *)*v2, v19, *(_DWORD *)*v19, (int)*v19, (unsigned int)v19[1]); } LOBYTE(v29) = 0; `eh vector destructor iterator'(v26, 0xCu, 26, sub_61BA70); sub_61B950((void ***)&v24); operator delete(v24); } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // 61BB10: using guessed type char var_148[12]; //----- (0061BE60) -------------------------------------------------------- char __thiscall sub_61BE60(volatile LONG *this, int a2, int a3) { _DWORD *v3; // eax LOBYTE(v3) = a2; switch ( a2 ) { case 2: LOBYTE(v3) = sub_8F2BC0(this, 1, 0, 0); break; case 3: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "NpcQuestWin"); break; default: return (char)v3; } return (char)v3; } //----- (0061BEC0) -------------------------------------------------------- char __thiscall sub_61BEC0(volatile LONG **this, volatile LONG *a2, int a3) { volatile LONG **v3; // esi int v4; // edi char *v5; // eax volatile LONG *v6; // edi volatile LONG **v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi int v10; // ST40_4 int v11; // ST3C_4 int v12; // eax volatile LONG *v13; // ebx const CHAR *v14; // eax volatile LONG **v15; // ebx volatile LONG **v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // ebx volatile LONG **v21; // ebx volatile LONG **v22; // edi volatile LONG *v23; // edi int v24; // ST40_4 int v25; // ST3C_4 int v26; // eax volatile LONG *v27; // edi volatile LONG v28; // ebx const CHAR *v29; // eax volatile LONG *v30; // edi volatile LONG **v31; // edi void (__thiscall ***v32)(_DWORD, signed int); // esi int v33; // [esp+34h] [ebp-18h] int v34; // [esp+38h] [ebp-14h] int v35; // [esp+3Ch] [ebp-10h] int v36; // [esp+48h] [ebp-4h] volatile LONG v37; // [esp+54h] [ebp+8h] v3 = this; v35 = 0; v4 = dword_BA6BA0; v36 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "NpcQuestWin.nif"); sub_8F66B0(v5, (int)&v35, v4); if ( !v35 ) return 0; v6 = a2; v7 = sub_8FB140(v35, (int)"Frame", (int)&v33, (int)&v34, a2); if ( !sub_8F1440(v3, 0, 0, (int)v7, 0, a3, (int)"NpcQuestWin", 0) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v35; v36 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } return 0; } v10 = sub_421050(0); v11 = (*((int (__thiscall **)(volatile LONG **))*v3 + 37))(v3); v12 = (*((int (__thiscall **)(volatile LONG **))*v3 + 36))(v3); v13 = sub_8F4A20(0, 0, v12, v11, v10, (int)v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 5); v37 = *v13; v14 = sub_40C190(-1559954454); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v37 + 472))(v13, v14); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v15 = sub_8FB140(v35, (int)"CloseButton", (int)&v33, (int)&v34, v6); sub_8FB650(v15, v35, (int)"CloseButtonClick"); sub_90C8D0(v33, v34, (int)v15, (int)v3); v16 = sub_8FB140(v35, (int)"panel", (int)&v33, (int)&v34, v6); sub_8F3EB0(v33, v34, (int)v16, (int)v3, 0, 0); v17 = sub_8FB140(v35, (int)"line", (int)&v33, (int)&v34, v6); sub_8F3EB0(v33, v34, (int)v17, (int)v3, 0, 0); v18 = sub_8FB140(v35, (int)"title1", (int)&v33, (int)&v34, v6); sub_8F3EB0(v33, v34, (int)v18, (int)v3, 0, 0); v19 = sub_8FB140(v35, (int)"title2", (int)&v33, (int)&v34, v6); sub_8F3EB0(v33, v34, (int)v19, (int)v3, 0, 0); v20 = sub_8FB140(v35, (int)"tab1", (int)&v33, (int)&v34, v6); sub_8FB650(v20, v35, (int)"tab1On"); sub_8FE0F0(v33, v34, (int)v20, (int)v3, 0, 0, 0); v21 = sub_8FB140(v35, (int)"tab2", (int)&v33, (int)&v34, v6); sub_8FB650(v21, v35, (int)"tab2On"); sub_8FE0F0(v33, v34, (int)v21, (int)v3, 1, 0, 0); v22 = sub_8FB140(v35, (int)"button1", (int)&v33, (int)&v34, v6); sub_8FB650(v22, v35, (int)"button1Click"); v23 = sub_8FE0F0(v33, v34, (int)v22, (int)v3, 2, 0, 0); v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 1, v26, v25, v24, (int)v23, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v27; v29 = sub_40C190(-1696072716); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v27, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v35 + 72))("HelpLinkNor") ) { v31 = sub_8FB140(v35, (int)"HelpLinkNor", (int)&v33, (int)&v34, v30); sub_8FB650(v31, v35, (int)"HelpLinkClick"); sub_8FB650(v31, v35, (int)"HelpLinkOver"); sub_8FE0F0(v33, v34, (int)v31, (int)v3, 3, 0, 0); } (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v3 + 59))(v3, xRight, dword_AC2F78, 0.0, 0.5); v32 = (void (__thiscall ***)(_DWORD, signed int))v35; v36 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v32 ) (**v32)(v32, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0061C450) -------------------------------------------------------- void *__thiscall sub_61C450(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NpcQuestWin::`vftable'; *((_DWORD *)this + 58) = &NpcQuestWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EE760: using guessed type void *NpcQuestWin::`vftable'; // 9EE77C: using guessed type void *NpcQuestWin::`vftable'; //----- (0061C4B0) -------------------------------------------------------- int __thiscall sub_61C4B0(_DWORD *this, float a2) { _DWORD *v2; // esi _BYTE *v3; // ecx int result; // eax int v5; // edx int v6; // edi int v7; // esi v2 = this; v3 = (_BYTE *)this[101]; if ( v3 ) sub_6B0C00(v3, a2); result = 1; v5 = (v2[91] - v2[90]) >> 1; if ( v5 <= 0 ) *((_WORD *)v2 + 14) |= 1u; else *((_WORD *)v2 + 14) &= 0xFFFEu; *(_WORD *)(v2[103] + 28) |= 1u; *(_WORD *)(v2[104] + 28) |= 1u; *(_WORD *)(v2[105] + 28) |= 1u; *(_WORD *)(v2[106] + 28) |= 1u; *(_WORD *)(v2[107] + 28) |= 1u; *(_WORD *)(v2[108] + 28) |= 1u; *(_WORD *)(v2[109] + 28) |= 1u; *(_WORD *)(v2[110] + 28) |= 1u; *(_WORD *)(v2[111] + 28) |= 1u; v6 = (int)(v2 + 103); *(_WORD *)(v2[112] + 28) |= 1u; if ( v5 > 0 ) { v7 = v5; do { if ( v5 <= 10 ) *(_WORD *)(*(_DWORD *)v6 + 28) &= 0xFFFEu; v6 += 4; --v7; } while ( v7 ); } return result; } //----- (0061C590) -------------------------------------------------------- char __thiscall sub_61C590(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG **v10; // eax volatile LONG *v11; // eax char *v12; // ecx volatile LONG **v13; // eax volatile LONG *v14; // eax void *v15; // eax int v16; // eax char v17; // al int v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax int v23; // edi char *v24; // eax void (__thiscall ***v25)(_DWORD, signed int); // esi void *v26; // edi int v27; // eax float *v28; // eax void (__thiscall *v29)(int, int, int, _DWORD, _DWORD); // eax void (__thiscall ***v30)(_DWORD, signed int); // esi void (__thiscall ***v31)(_DWORD, signed int); // esi int v32; // [esp+30h] [ebp-12Ch] volatile LONG *v33; // [esp+34h] [ebp-128h] void *v34; // [esp+38h] [ebp-124h] volatile LONG **v35; // [esp+3Ch] [ebp-120h] int v36; // [esp+40h] [ebp-11Ch] int v37; // [esp+44h] [ebp-118h] int v38; // [esp+48h] [ebp-114h] char v39; // [esp+4Ch] [ebp-110h] char v40; // [esp+4Dh] [ebp-10Fh] int v41; // [esp+158h] [ebp-4h] v2 = (int)this; v38 = 0; v41 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v33 = v3; if ( !v3 ) goto LABEL_43; v34 = (void *)dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\QuestFinishWin.nif"); sub_8F66B0(v6, (int)&v38, (int)v34); if ( !v38 ) return 0; v7 = sub_8FB140(v38, (int)"Plane01", (int)&v37, (int)&v36, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"QuestFinishWin", 0) ) { LABEL_43: v4 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v37; v9 = v36; v35 = 0; v34 = (void *)(v2 + 412); do { v39 = 0; memset(&v40, 0, 0xFFu); v35 = (volatile LONG **)((char *)v35 + 1); sprintf(&v39, "Quest%02d", v35); v10 = sub_8FB140(v38, (int)&v39, (int)&v37, (int)&v36, v33); v11 = sub_8FE0F0(v37 - v8, v36 - v9, (int)v10, v2, 0, 0, 0); v12 = (char *)v34; *(_DWORD *)v34 = v11; v34 = v12 + 4; } while ( (signed int)v35 < 10 ); v13 = sub_8FB140(v38, (int)"NPCFaceBack", (int)&v37, (int)&v36, v33); v14 = sub_8F3EB0(v37 - v8, v36 - v9, (int)v13, v2, 0, 0); *(_DWORD *)(v2 + 392) = v14; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 256))(v14, 0); v15 = (void *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v38 + 72))("Face_Mask"); v34 = v15; if ( v15 ) { v16 = (*(int (__thiscall **)(void *))(*(_DWORD *)v15 + 4))(v15); if ( v16 ) { while ( (char *)v16 != dword_BA478C ) { v16 = *(_DWORD *)(v16 + 4); if ( !v16 ) goto LABEL_18; } v17 = 1; } else { LABEL_18: v17 = 0; } v34 = (void *)(v17 != 0 ? (unsigned int)v34 : 0); } else { v34 = 0; } sub_8FB140(v38, (int)"Face_Mask", (int)&v37, (int)&v36, v33); v18 = sub_460640(v37 - v8, v36 - v9, (int)v34, (_DWORD *)v2); *(_DWORD *)(v2 + 396) = v18; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v18 + 256))(v18, 0); v35 = sub_8FB140(v38, (int)"Face_Panel_Nor", (int)&v37, (int)&v36, v33); sub_8FB650(v35, v38, (int)"Face_Panel_Click"); sub_8FB650(v35, v38, (int)"Face_Panel_Over"); v19 = sub_8FE0F0(v37 - v8, v36 - v9, (int)v35, v2, 10, 0, 0); *(_DWORD *)(v2 + 400) = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 256))(v19, 0); v35 = sub_8FB140(v38, (int)"NPCFaceNor", (int)&v37, (int)&v36, v33); sub_8FB650(v35, v38, (int)"NPCFaceClick"); sub_8FB650(v35, v38, (int)"NPCFaceOver"); v20 = sub_8FE0F0(v37 - v8, v36 - v9, (int)v35, v2, 10, 0, 0); *(_DWORD *)(v2 + 348) = v20; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 256))(v20, 0); v21 = sub_8FB140(v38, (int)"Plane01", (int)&v37, (int)&v36, 0); v22 = sub_8F3EB0(v37 - v8, v36 - v9, (int)v21, v2, 0, 0); *(_DWORD *)(v2 + 408) = v22; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v22 + 240))(v22, 0); v32 = 0; v23 = dword_BA6BA0; LOBYTE(v41) = 1; if ( !byte_ACAD5C ) sub_420410(); v24 = (char *)sub_401410(byte_ACAB50, "Game\\QuestFinishEffect.nif"); sub_8F66B0(v24, (int)&v32, v23); if ( v32 ) { v26 = operator new(0x44u); v34 = v26; LOBYTE(v41) = 2; if ( v26 ) { v27 = sub_85BD60((void *)v32); v28 = sub_6B0A90((float *)v26, v27); } else { v28 = 0; } *(_DWORD *)(v2 + 404) = v28; v29 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); LOBYTE(v41) = 1; v29(v2, xRight, dword_AC2F78, 1.0, 0.60000002); LOBYTE(v41) = 0; if ( v32 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v32; if ( !InterlockedDecrement((volatile LONG *)(v32 + 4)) ) { if ( v30 ) (**v30)(v30, 1); } } v31 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v31 ) (**v31)(v31, 1); result = 1; } else { v25 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v25 ) (**v25)(v25, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0061CB70) -------------------------------------------------------- LONG __thiscall sub_61CB70(_DWORD **this, int a2, char a3) { _DWORD **v3; // esi LONG result; // eax v3 = this; if ( a3 == 1 ) { (*(void (__stdcall **)(_DWORD))(*this[98] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v3[87] + 256))(0); (*(void (__stdcall **)(signed int))(*v3[99] + 256))(1); sub_460590((_DWORD **)v3[99], a2); (*(void (__stdcall **)(signed int))(*v3[100] + 256))(1); result = sub_8FCC40((void *)v3[100][72], a2); } else { (*(void (__stdcall **)(_DWORD))(*this[99] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v3[100] + 256))(0); (*(void (__stdcall **)(signed int))(*v3[98] + 256))(1); sub_8FCC40((void *)v3[98][72], a2); (*(void (__stdcall **)(signed int))(*v3[87] + 256))(1); result = sub_8FCC40((void *)v3[87][72], a2); } return result; } //----- (0061CC60) -------------------------------------------------------- int *__thiscall sub_61CC60(int this, int a2) { int v2; // esi int v3; // ebx int *v4; // eax int v5; // eax int v6; // eax int v7; // edi int v8; // ebx int *result; // eax int v10; // ecx char v11; // al char v12; // di int v13; // ebx int v14; // edx int v15; // eax _DWORD *v16; // eax _DWORD *v17; // edi char v18; // [esp+Ch] [ebp-4h] char v19; // [esp+1Bh] [ebp+Bh] v2 = this; sub_6B0B40(*(float **)(this + 404), *(_DWORD **)(this + 408)); if ( *(_DWORD *)(v2 + 408) ) sub_6B0B40(*(float **)(v2 + 404), *(_DWORD **)(v2 + 408)); v3 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a2) && (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) && (v4 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2), *v4) && (v5 = *v4) != 0 && (v6 = *(unsigned __int16 *)(v5 + 174), (_WORD)v6) ) { v7 = dword_ACDA78; v8 = v6; result = (int *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA78 + 16))(dword_ACDA78, v6); if ( (_BYTE)result ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { result = (int *)(*(_DWORD *)(v7 + 196) + 4 * v8); if ( *result ) { v10 = *result; if ( *result ) { v11 = 64; switch ( *(_DWORD *)(v10 + 2) ) { case 0: v11 = 1; break; case 1: v11 = 6; break; case 2: v11 = 11; break; case 3: v11 = 16; break; case 6: v11 = 21; break; case 7: v11 = 26; break; default: break; } v12 = *(_BYTE *)(v10 + 8); v13 = *(unsigned __int8 *)(v10 + 9); v18 = *(_BYTE *)(v10 + 10); v19 = *(_BYTE *)(v10 + 6); if ( v11 != 64 ) goto LABEL_23; v14 = *(_DWORD *)(v10 + 2); if ( v14 == 4 ) { v11 = sub_652070(dword_AD8EBC); if ( dword_AD8EBC != (char *)-776 ) { v12 = dword_AD8EBC[941]; v13 = (unsigned __int8)dword_AD8EBC[939]; v18 = dword_AD8EBC[940]; v19 = dword_AD8EBC[938]; } goto LABEL_23; } if ( v14 != 5 ) { LABEL_23: v15 = sub_67EDE0(v13, v11, v19, v12, v13, v18, 0xFFFF, 5, 0); return (int *)sub_61CB70((_DWORD **)v2, v15, 1); } v16 = sub_67EEC0(*(unsigned __int16 *)(v10 + 6)); result = (int *)sub_61CB70((_DWORD **)v2, (int)v16, 0); } } } } } else { v17 = sub_67EEC0(a2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 392) + 256))(1); sub_8FCC40(*(void **)(*(_DWORD *)(v2 + 392) + 288), (int)v17); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 348) + 256))(1); result = (int *)sub_8FCC40(*(void **)(*(_DWORD *)(v2 + 348) + 288), (int)v17); } return result; } // ACDA74: using guessed type int dword_ACDA74; // ACDA78: using guessed type int dword_ACDA78; //----- (0061CEB0) -------------------------------------------------------- _DWORD *__thiscall sub_61CEB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &QuestFinishWin::`vftable'; v1[58] = &QuestFinishWin::`vftable'; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[88] = 0; v1[87] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EEA80: using guessed type void *QuestFinishWin::`vftable'; // 9EEA9C: using guessed type void *QuestFinishWin::`vftable'; //----- (0061CF60) -------------------------------------------------------- LONG __thiscall sub_61CF60(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx v1 = this; *this = &QuestFinishWin::`vftable'; this[58] = &QuestFinishWin::`vftable'; v2 = (int *)this[101]; if ( v2 ) { sub_8D47C0(v2 + 7); nullsub_6(v2 + 1); v3 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); } if ( v1[94] ) operator delete((void *)v1[94]); v1[94] = 0; v1[95] = 0; v1[96] = 0; if ( v1[90] ) operator delete((void *)v1[90]); v1[90] = 0; v1[91] = 0; v1[92] = 0; return sub_8F10F0(v1); } // 9EEA80: using guessed type void *QuestFinishWin::`vftable'; // 9EEA9C: using guessed type void *QuestFinishWin::`vftable'; //----- (0061D070) -------------------------------------------------------- volatile LONG *__cdecl sub_61D070(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_61CEB0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0061D1A0) -------------------------------------------------------- void __thiscall sub_61D1A0(int *this) { int *v1; // esi unsigned __int16 *v2; // ecx unsigned __int16 *v3; // eax unsigned __int16 *i; // edi int v5; // ebx int v6; // ecx unsigned __int16 *j; // eax __int16 v8; // di _DWORD **v9; // eax int v10; // eax v1 = this; if ( (signed int)((this[91] - this[90]) & 0xFFFFFFFE) > 0 ) { v2 = (unsigned __int16 *)this[91]; v3 = (unsigned __int16 *)v1[90]; for ( i = 0; v3 != v2; ++v3 ) i = v3; v5 = *i; memcpy_0(i, i + 1, 2 * (v2 - (i + 1))); v1[91] -= 2; sub_4A7080(v1[74], v5, (int)i, v5, (void *)1); v1[89] = v5; if ( (signed int)((v1[91] - v1[90]) & 0xFFFFFFFE) > 0 ) { v6 = v1[91]; for ( j = (unsigned __int16 *)v1[90]; j != (unsigned __int16 *)v6; ++j ) i = j; v8 = *i; v9 = (_DWORD **)sub_6CD770(); v10 = sub_74E7D0(v9[1], v8); sub_61CC60((int)v1, *(unsigned __int16 *)(v10 + 94)); } } } //----- (0061D260) -------------------------------------------------------- void __thiscall sub_61D260(int *this, int a2, int a3) { if ( a2 == 10 ) sub_61D1A0(this); } //----- (0061D280) -------------------------------------------------------- __int16 __thiscall sub_61D280(const void **this) { float *v1; // eax signed int v2; // esi const void **v3; // edi float *v4; // eax _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // eax char *v8; // ebx _WORD *v9; // esi _WORD *i; // edi _WORD *v11; // eax _WORD *v12; // ecx int v13; // esi char v14; // dl unsigned int v15; // eax _BYTE *v16; // edx _BYTE *v17; // ecx int v18; // edi unsigned int v19; // eax unsigned int v20; // eax unsigned int v21; // ecx char *v22; // ecx _WORD *v23; // eax _WORD *v24; // edi const void *v25; // ecx unsigned int v26; // eax unsigned int v27; // eax unsigned int v28; // ecx char *v29; // ecx _WORD *v30; // eax unsigned int v31; // eax unsigned int v32; // edx const void *v33; // ecx int v34; // ebx unsigned int v35; // eax unsigned int v36; // eax unsigned int v37; // ecx char *v38; // ecx _WORD *v39; // eax _BYTE *v40; // ecx _BYTE *v41; // edx unsigned int v42; // eax unsigned int v43; // eax unsigned int v44; // ecx char *v45; // ecx _WORD *v46; // eax int v48; // [esp+10h] [ebp-4Ch] int v49; // [esp+14h] [ebp-48h] int v50; // [esp+18h] [ebp-44h] signed int v51; // [esp+1Ch] [ebp-40h] _DWORD **v52; // [esp+20h] [ebp-3Ch] _DWORD *v53; // [esp+24h] [ebp-38h] const void **v54; // [esp+28h] [ebp-34h] char v55; // [esp+2Fh] [ebp-2Dh] v1 = (float *)dword_ACCFE0; v2 = 0; v3 = this; v54 = this; if ( !dword_ACCFE0 ) { v4 = (float *)operator new(0xB4u); v50 = (int)v4; if ( v4 ) v1 = sub_4546A0(v4); else v1 = 0; dword_ACCFE0 = (int)v1; } if ( !*((_BYTE *)v1 + 4) ) { v5 = sub_6CD770(); v6 = (_DWORD *)v5[1]; v52 = (_DWORD **)v5; v53 = (_DWORD *)v5[1]; v55 = 0; v51 = 0; LOWORD(v1) = sub_53DA30(v6); if ( (unsigned __int16)v1 > 0u ) { while ( 1 ) { v7 = sub_74E2E0(v6, v2); v8 = (char *)(v7 + 4); v49 = v7; v48 = v7 + 4; if ( sub_74BAB0(v52, *(_WORD *)(v7 + 4)) ) { if ( sub_74BA80(v52, *(_WORD *)v8) == 8 ) { v11 = v3[94]; v12 = v3[95]; v13 = (int)(v3 + 94); v14 = 0; if ( v11 == v12 ) goto LABEL_80; do { if ( *v11 == *(_WORD *)v8 ) v14 = 1; ++v11; } while ( v11 != v12 ); if ( !v14 ) { LABEL_80: v15 = (unsigned int)v3[95]; if ( (unsigned int)v8 >= v15 || (v16 = *(_BYTE **)v13, *(_DWORD *)v13 > (unsigned int)v8) ) { v25 = v3[96]; if ( (const void *)v15 == v25 ) { v26 = (signed int)(v15 - *(_DWORD *)v13) >> 1; if ( v26 > 0x7FFFFFFE ) goto LABEL_76; v27 = v26 + 1; v28 = (_DWORD)((_DWORD)v25 - *(_DWORD *)v13) >> 1; if ( v27 > v28 ) { if ( 0x7FFFFFFF - (v28 >> 1) >= v28 ) v29 = (char *)((v28 >> 1) + v28); else v29 = 0; if ( (unsigned int)v29 < v27 ) v29 = (char *)v27; sub_4F9A90((const void **)v13, v29); } } v30 = v3[95]; if ( v30 ) *v30 = *(_WORD *)v8; } else { v17 = v3[96]; v18 = (v8 - v16) >> 1; if ( (_BYTE *)v15 == v17 ) { v19 = (signed int)(v15 - (_DWORD)v16) >> 1; if ( v19 > 0x7FFFFFFE ) goto LABEL_76; v20 = v19 + 1; v21 = (v17 - v16) >> 1; if ( v20 > v21 ) { if ( 0x7FFFFFFF - (v21 >> 1) >= v21 ) v22 = (char *)((v21 >> 1) + v21); else v22 = 0; if ( (unsigned int)v22 < v20 ) v22 = (char *)v20; sub_4F9A90((const void **)v13, v22); v8 = (char *)v48; } } v23 = *(_WORD **)(v13 + 4); v24 = (_WORD *)(*(_DWORD *)v13 + 2 * v18); if ( v23 ) *v23 = *v24; } *(_DWORD *)(v13 + 4) += 2; v31 = (unsigned int)v54[91]; if ( (unsigned int)v8 >= v31 || (v32 = (unsigned int)v54[90], v32 > (unsigned int)v8) ) { v40 = v54[92]; if ( (_BYTE *)v31 == v40 ) { v41 = v54[90]; v42 = (signed int)(v31 - (_DWORD)v41) >> 1; if ( v42 > 0x7FFFFFFE ) LABEL_76: std::_Xlength_error("vector too long"); v43 = v42 + 1; v44 = (v40 - v41) >> 1; if ( v43 > v44 ) { if ( 0x7FFFFFFF - (v44 >> 1) >= v44 ) v45 = (char *)((v44 >> 1) + v44); else v45 = 0; if ( (unsigned int)v45 < v43 ) v45 = (char *)v43; sub_4F9A90(v54 + 90, v45); } } v46 = v54[91]; if ( v46 ) *v46 = *(_WORD *)v8; } else { v33 = v54[92]; v34 = (signed int)&v8[-v32] >> 1; if ( (const void *)v31 == v33 ) { v35 = (signed int)(v31 - v32) >> 1; if ( v35 > 0x7FFFFFFE ) goto LABEL_76; v36 = v35 + 1; v37 = (signed int)((signed int)v33 - v32) >> 1; if ( v36 > v37 ) { if ( 0x7FFFFFFF - (v37 >> 1) >= v37 ) v38 = (char *)((v37 >> 1) + v37); else v38 = 0; if ( (unsigned int)v38 < v36 ) v38 = (char *)v36; sub_4F9A90(v54 + 90, v38); } } v39 = v54[91]; if ( v39 ) *v39 = *((_WORD *)v54[90] + v34); } v54[91] = (char *)v54[91] + 2; v50 = *(unsigned __int16 *)(v49 + 94); v55 = 1; } } else { v9 = v3[90]; for ( i = v3[91]; v9 != i; ++v9 ) { if ( *v9 == *(_WORD *)v8 ) { memcpy_0(v9, v9 + 1, 2 * (((_BYTE *)v54[91] - (_BYTE *)(v9 + 1)) >> 1)); v54[91] = (char *)v54[91] - 2; } } } v3 = v54; v2 = v51; } v51 = ++v2; LOWORD(v1) = sub_53DA30(v53); if ( v2 >= (unsigned __int16)v1 ) break; v6 = v53; } if ( v55 ) LOWORD(v1) = (unsigned int)sub_61CC60((int)v3, v50); } } return (signed __int16)v1; } // ACCFE0: using guessed type int dword_ACCFE0; //----- (0061D610) -------------------------------------------------------- void *__thiscall sub_61D610(void *this, char a2) { void *v2; // esi v2 = this; sub_61CF60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0061D6A0) -------------------------------------------------------- int __thiscall sub_61D6A0(_BYTE *this) { _BYTE *v1; // esi int result; // eax v1 = this; result = sub_8F28E0(this); v1[352] = 0; return result; } //----- (0061D6C0) -------------------------------------------------------- void __thiscall sub_61D6C0(_BYTE *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 == 10 ) { this[352] = 1; v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5090(v3, 1, 2); } } //----- (0061D700) -------------------------------------------------------- signed int __stdcall sub_61D700(unsigned __int8 a1) { _DWORD *v1; // eax _DWORD *v2; // ebx unsigned int v3; // edi int v4; // esi int v5; // eax _DWORD **v7; // [esp+Ch] [ebp-4h] v1 = sub_6CD770(); v2 = (_DWORD *)v1[1]; v7 = (_DWORD **)v1; v3 = 0; if ( (unsigned __int16)sub_53DA30((_DWORD *)v1[1]) <= 0u ) return 0; while ( 1 ) { v4 = sub_74E2E0(v2, v3); v5 = sub_74BA80(v7, *(_WORD *)(v4 + 4)); if ( *(_BYTE *)(v4 + 32) != 1 && *(_BYTE *)(v4 + 24) && v5 == 5 && a1 - *(unsigned __int8 *)(v4 + 27) <= 150 ) break; if ( (signed int)++v3 >= (unsigned __int16)sub_53DA30(v2) ) return 0; } return 1; } //----- (0061D790) -------------------------------------------------------- char __thiscall sub_61D790(float *this) { float *v1; // esi char result; // al v1 = this; sub_8F28C0(this); *((_BYTE *)v1 + 440) = 1; result = sub_8D06A0(v1 + 103, flt_ACCFCC); v1[108] = 1.5; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0061D8F0) -------------------------------------------------------- char __thiscall sub_61D8F0(_DWORD *this, int a2, int a3, _DWORD *a4) { _DWORD *v4; // esi int v5; // eax _DWORD *v6; // eax bool v7; // cf v4 = this; v5 = this[60]; if ( v5 ) v6 = (_DWORD *)(v5 + 232); else v6 = 0; if ( a4 == v6 ) { if ( a2 == 27 ) { LOBYTE(v6) = sub_8F86A0(&unk_BA6B10, this - 58); if ( v4[57] ) { v7 = v4[58] < 0x10u; v6 = v4 + 53; v4[57] = 0; if ( !v7 ) v6 = (_DWORD *)*v6; *(_BYTE *)v6 = 0; } } v4[60] = 0; } return (char)v6; } //----- (0061D960) -------------------------------------------------------- int __thiscall sub_61D960(int this, int a2) { int v2; // edi float *v3; // ecx int v4; // eax int result; // eax _DWORD **v6; // eax _DWORD *v7; // esi int v8; // eax int v9; // esi int v10; // eax bool v11; // zf int v12; // ecx int *v13; // eax _DWORD *v14; // eax signed int v15; // esi int v16; // [esp+4h] [ebp-30h] int v17; // [esp+Ch] [ebp-28h] int v18; // [esp+10h] [ebp-24h] char v19; // [esp+14h] [ebp-20h] _DWORD **v20; // [esp+18h] [ebp-1Ch] _DWORD *v21; // [esp+1Ch] [ebp-18h] int v22; // [esp+20h] [ebp-14h] int v23; // [esp+24h] [ebp-10h] int v24; // [esp+28h] [ebp-Ch] unsigned int v25; // [esp+2Ch] [ebp-8h] char v26; // [esp+33h] [ebp-1h] v2 = this; if ( *(_BYTE *)(this + 500) ) { v3 = *(float **)(this + 476); *(_BYTE *)(v2 + 500) = 0; sub_6B0B40(v3, (_DWORD *)v2); *(_BYTE *)(*(_DWORD *)(v2 + 476) + 65) = 1; v4 = **(_DWORD **)(v2 + 476); if ( v4 ) *(_WORD *)(v4 + 28) &= 0xFFFEu; v17 = 2; v18 = 0; sub_6B69F0(dword_AB6534, (int)&v17, 0.0, 0); } if ( *(_BYTE *)(v2 + 440) ) { *(_WORD *)(*(_DWORD *)(v2 + 348) + 28) &= 0xFFFEu; *(_BYTE *)(v2 + 440) = 0; *(_BYTE *)(v2 + 500) = 1; } result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2); if ( (_BYTE)result ) { v6 = (_DWORD **)sub_6CD770(); v7 = v6[1]; v20 = v6; v21 = v7; v26 = 0; v24 = sub_680890((unsigned __int8 *)byte_AD9238); v25 = 0; if ( (unsigned __int16)sub_53DA30(v7) <= 0u ) goto LABEL_32; while ( 1 ) { v8 = sub_74E2E0(v7, v25); v9 = v8; v10 = sub_74BA80(v20, *(_WORD *)(v8 + 4)); v11 = *(_BYTE *)(v9 + 32) == 1; v12 = *(unsigned __int8 *)(v9 + 27); v22 = v10; v23 = v12; if ( !v11 && *(_BYTE *)(v9 + 24) ) { v13 = *sub_61E770((_DWORD *)(v2 + 480), (int **)&v19, (_WORD *)(v9 + 4)); if ( v22 != 5 || v24 - v23 > 150 ) { if ( v13 != *(int **)(v2 + 484) ) sub_61E430((_DWORD *)(v2 + 480), &v18, (int)v13); } else if ( v13 == *(int **)(v2 + 484) ) { v14 = sub_4DD530((_DWORD *)(v2 + 480), (char *)(v9 + 4)); sub_4DD450((_DWORD *)(v2 + 480), (int)&v16, v14, 0); *(_BYTE *)(v2 + 352) = 0; *(_BYTE *)(v2 + 440) = 1; } if ( v24 - v23 <= 150 && v24 - v23 >= 0 && v22 == 5 ) v26 = 1; } v15 = ++v25; if ( v15 >= (unsigned __int16)sub_53DA30(v21) ) break; v7 = v21; } if ( !v26 ) LABEL_32: sub_8F86A0(&unk_BA6B10, (_DWORD *)v2); result = **(_DWORD **)(v2 + 476); if ( result ) { if ( *(_BYTE *)(v2 + 352) ) *(_WORD *)(result + 28) |= 1u; else *(_WORD *)(result + 28) &= 0xFFFEu; } } return result; } // AB6534: using guessed type int dword_AB6534; //----- (0061DB70) -------------------------------------------------------- int __thiscall sub_61DB70(char *this, unsigned __int8 a2) { signed int v2; // edi _DWORD **v3; // eax _DWORD *v4; // esi int v5; // ebx char *v6; // esi int v7; // eax bool v8; // zf _DWORD *v9; // edi int **v10; // eax signed int v11; // ecx int v12; // eax _DWORD *v13; // eax int v14; // eax unsigned __int8 v15; // bl int v16; // ST08_4 int v17; // ST04_4 char *v18; // eax char *v19; // eax int v21; // [esp+Ch] [ebp-38h] char v22; // [esp+14h] [ebp-30h] char v23; // [esp+18h] [ebp-2Ch] _DWORD *v24; // [esp+1Ch] [ebp-28h] _DWORD **v25; // [esp+20h] [ebp-24h] int v26; // [esp+24h] [ebp-20h] int v27; // [esp+28h] [ebp-1Ch] int v28; // [esp+2Ch] [ebp-18h] char v29[4]; // [esp+30h] [ebp-14h] int v30; // [esp+34h] [ebp-10h] int v31; // [esp+38h] [ebp-Ch] char *v32; // [esp+3Ch] [ebp-8h] unsigned __int8 v33; // [esp+43h] [ebp-1h] v2 = 0; v32 = this; v26 = 0; v3 = (_DWORD **)sub_6CD770(); v4 = v3[1]; v25 = v3; v24 = v4; v33 = 0; *(_DWORD *)v29 = 0; v30 = 0; v27 = 0; if ( (unsigned __int16)sub_53DA30(v4) <= 0u ) return 0; do { v5 = sub_74E2E0(v4, v2); v6 = (char *)(v5 + 4); v7 = sub_74BA80(v25, *(_WORD *)(v5 + 4)); v8 = *(_BYTE *)(v5 + 32) == 1; v31 = v7; v28 = *(unsigned __int8 *)(v5 + 27); if ( v8 || !*(_BYTE *)(v5 + 24) ) goto LABEL_22; v9 = v32 + 480; v10 = sub_61E770((_DWORD *)v32 + 120, (int **)&v23, v6); v11 = v31; v12 = (int)*v10; if ( v31 != 5 || a2 - v28 > 150 ) { if ( v12 != *((_DWORD *)v32 + 121) ) { sub_61E430(v9, (int *)&v22, v12); goto LABEL_10; } } else if ( v12 == *((_DWORD *)v32 + 121) ) { v13 = sub_4DD530(v9, v6); sub_4DD450(v9, (int)&v21, v13, 0); v14 = (int)v32; v32[352] = 0; *(_BYTE *)(v14 + 440) = 1; v33 = 1; LABEL_10: v11 = v31; goto LABEL_11; } LABEL_11: if ( a2 - v28 > 150 ) goto LABEL_22; if ( v11 == 5 ) { v26 = 1; } else if ( v11 < 4 || v11 > 5 && v11 != 20 ) { goto LABEL_22; } v15 = *(_BYTE *)(v5 + 17); if ( v15 == 1 || v15 > 5u && v15 <= 7u ) ++v30; else ++*(_DWORD *)v29; LABEL_22: v4 = v24; v2 = ++v27; } while ( v2 < (unsigned __int16)sub_53DA30(v24) ); if ( v26 ) { v16 = v30; v17 = *(_DWORD *)v29; v18 = (char *)sub_40A910(-112844975); v19 = sub_7549E0(v18, v17, v16); sub_8F2EA0(*((void ***)v32 + 87), v19); } return v33; } //----- (0061DD20) -------------------------------------------------------- LONG __thiscall sub_61DD20(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // ebx _DWORD *v4; // ST08_4 _DWORD *v5; // ST04_4 char v7; // [esp+10h] [ebp-18h] _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD *v9; // [esp+18h] [ebp-10h] int v10; // [esp+24h] [ebp-4h] v1 = this; v9 = this; *this = &QuestNewsWin::`vftable'; this[58] = &QuestNewsWin::`vftable'; v10 = 0; v2 = (int *)this[119]; if ( v2 ) { v8 = (_DWORD *)this[119]; sub_8D47C0(v2 + 7); LOBYTE(v10) = 3; nullsub_6(v2 + 1); v3 = *v2; LOBYTE(v10) = 2; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete(v2); } v8 = v1 + 120; v4 = (_DWORD *)v1[121]; v5 = *(_DWORD **)v1[121]; LOBYTE(v10) = 5; sub_61E6D0(v1 + 120, (int *)&v7, v5, v4); operator delete((void *)v1[121]); if ( v1[116] >= 0x10u ) operator delete((void *)v1[111]); v1[116] = 15; v1[115] = 0; *((_BYTE *)v1 + 444) = 0; v10 = -1; return sub_8F10F0(v1); } // 9EED10: using guessed type void *QuestNewsWin::`vftable'; // 9EED2C: using guessed type void *QuestNewsWin::`vftable'; //----- (0061DE40) -------------------------------------------------------- char __thiscall sub_61DE40(void *this, void *a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // edi int v8; // ebx volatile LONG *v9; // eax CHAR *v10; // eax int v11; // edi char *v12; // eax float *v13; // edi int v14; // eax float *v15; // eax void (__thiscall *v16)(int, int, int, _DWORD, _DWORD); // eax void (__thiscall ***v18)(_DWORD, signed int); // esi int v19; // [esp+18h] [ebp-24h] int v20; // [esp+1Ch] [ebp-20h] int v21; // [esp+20h] [ebp-1Ch] int v22; // [esp+24h] [ebp-18h] int v23; // [esp+28h] [ebp-14h] int v24; // [esp+2Ch] [ebp-10h] int v25; // [esp+38h] [ebp-4h] v2 = (int)this; v24 = 0; v3 = dword_BA6BA0; v25 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\NewQuest.nif"); sub_8F66B0(v4, (int)&v24, v3); if ( !v24 ) return 0; v5 = sub_8FB140(v24, (int)"Plane04", (int)&v21, (int)&v22, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, (int)a2, (int)"QuestNewsWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v24; v25 = -1; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v7 = v21; v8 = v22; if ( !sub_8F71E0(v24, (int)"Picking", &v21, &v22, &v19, &v20) ) { v18 = (void (__thiscall ***)(_DWORD, signed int))v24; v25 = -1; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v18 ) (**v18)(v18, 1); return 0; } v9 = sub_8FE250(v21 - v7, v22 - v8, v19, v20, v2, 10, 0, 0); *(_DWORD *)(v2 + 348) = v9; *((_WORD *)v9 + 14) |= 1u; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 272) = dword_AD01E8; sub_8F2EA0(*(void ***)(v2 + 348), (const char *)&unk_9EECCE); v10 = (CHAR *)sub_40C190(-399167680); sub_4018E0((_DWORD *)(v2 + 444), v10, strlen(v10)); v23 = 0; v11 = dword_BA6BA0; LOBYTE(v25) = 1; if ( !byte_ACAD5C ) sub_420410(); v12 = (char *)sub_401410(byte_ACAB50, "Game\\NewQuestEffect02.nif"); sub_8F66B0(v12, (int)&v23, v11); if ( !v23 ) { LOBYTE(v25) = 0; sub_410C00(&v23); v25 = -1; sub_410C00(&v24); return 0; } v13 = (float *)operator new(0x44u); LOBYTE(v25) = 2; if ( v13 ) { v14 = sub_85BD60((void *)v23); v15 = sub_6B0A90(v13, v14); } else { v15 = 0; } *(_DWORD *)(v2 + 476) = v15; v16 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); LOBYTE(v25) = 1; v16(v2, xRight, dword_AC2F78, 0.69999999, 0.1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); LOBYTE(v25) = 0; sub_410C00(&v23); v25 = -1; sub_410C00(&v24); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0061E110) -------------------------------------------------------- _DWORD *__thiscall sub_61E110(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+10h] [ebp-20h] void *v5; // [esp+1Ch] [ebp-14h] char *v6; // [esp+20h] [ebp-10h] int v7; // [esp+2Ch] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v7 = 0; *v1 = &QuestNewsWin::`vftable'; v1[58] = &QuestNewsWin::`vftable'; sub_8D0610((_BYTE *)v1 + 356); sub_8D0610((_BYTE *)v1 + 384); sub_8D0610((_BYTE *)v1 + 412); v1[116] = 15; v1[115] = 0; *((_BYTE *)v1 + 444) = 0; LOBYTE(v7) = 1; v1[122] = 0; v2 = operator new(0x10u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[121] = v2; *v2 = v2; *(_DWORD *)(v1[121] + 4) = v1[121]; *(_DWORD *)(v1[121] + 8) = v1[121]; *(_BYTE *)(v1[121] + 14) = 1; *(_BYTE *)(v1[121] + 15) = 1; LOBYTE(v7) = 2; v1[86] = 0; *((_BYTE *)v1 + 352) = 0; v1[118] = 0; *((_BYTE *)v1 + 440) = 0; v1[119] = 0; sub_61E680(v1 + 120); v1[124] = 0; *((_BYTE *)v1 + 500) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9EED10: using guessed type void *QuestNewsWin::`vftable'; // 9EED2C: using guessed type void *QuestNewsWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061E250) -------------------------------------------------------- volatile LONG *__cdecl sub_61E250(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1F8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_61E110(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0061E380) -------------------------------------------------------- _DWORD *__cdecl sub_61E380(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 15) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 15) ); } return result; } //----- (0061E3A0) -------------------------------------------------------- _DWORD *__thiscall sub_61E3A0(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 15) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 15) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 15); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (0061E3F0) -------------------------------------------------------- void __stdcall sub_61E3F0(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 15) ) { do { sub_61E3F0(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 15) ); } } //----- (0061E430) -------------------------------------------------------- int *__thiscall sub_61E430(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 15) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_61E3A0(&a3); if ( *(_BYTE *)(*v3 + 15) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 15) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 15) ) { v9 = (_DWORD *)v6; } else { v9 = sub_61E380((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 15) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_4DC350(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 15) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 15) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 14); *(_BYTE *)(v5 + 14) = *((_BYTE *)v3 + 14); *((_BYTE *)v3 + 14) = v13; LABEL_35: if ( v18[14] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 14) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[14] ) { v15[14] = 1; *(_BYTE *)(v6 + 14) = 0; sub_4DC9D0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[15] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 14) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 14) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 14) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 14) = 1; v15[14] = 0; sub_4DCA30(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[14] = *(_BYTE *)(v6 + 14); *(_BYTE *)(v6 + 14) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 14) = 1; sub_4DC9D0(i, v6); break; } } else { if ( !v15[14] ) { v15[14] = 1; *(_BYTE *)(v6 + 14) = 0; sub_4DCA30(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[15] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 14) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 14) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 14) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 14) = 1; v15[14] = 0; sub_4DC9D0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[14] = *(_BYTE *)(v6 + 14); *(_BYTE *)(v6 + 14) = 1; *(_BYTE *)(*(_DWORD *)v15 + 14) = 1; sub_4DCA30(i, (_DWORD *)v6); break; } } v15[14] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 14) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (0061E680) -------------------------------------------------------- int __thiscall sub_61E680(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[15] ) { do { sub_61E3F0((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 15) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (0061E6D0) -------------------------------------------------------- int *__thiscall sub_61E6D0(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 15) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 15) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 15); j = (int *)*j ) v10 = j; a3 = v10; } } sub_61E430(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_61E680(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (0061E770) -------------------------------------------------------- int **__thiscall sub_61E770(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 15) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (0061E7E0) -------------------------------------------------------- void __thiscall sub_61E7E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_61E6D0(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (0061E840) -------------------------------------------------------- void *__thiscall sub_61E840(void *this, char a2) { void *v2; // esi v2 = this; sub_61DD20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0061E870) -------------------------------------------------------- double __cdecl sub_61E870(float a1) { long double v1; // st7 v1 = a1; if ( a1 <= -1.0 ) return flt_BA45B4; if ( v1 >= 1.0 ) return 0.0; return (float)acos(v1); } // BA45B4: using guessed type float flt_BA45B4; //----- (0061E8B0) -------------------------------------------------------- double sub_61E8B0() { int v0; // eax v0 = rand(); return (float)(((double)v0 + (double)v0) / 32767.0 - 1.0); } //----- (0061E8E0) -------------------------------------------------------- float *__thiscall sub_61E8E0(float *this, float *a2, float *a3) { float *v3; // edx float *result; // eax v3 = a3; result = a2; *a2 = a3[2] * this[1] - a3[1] * this[2]; a2[1] = this[2] * *v3 - *this * v3[2]; a2[2] = v3[1] * *this - *v3 * this[1]; return result; } //----- (0061E920) -------------------------------------------------------- int __thiscall sub_61E920(_DWORD *this, int a2) { char v2; // al v2 = sub_8C4C90(this + 30, a2, &a2); return v2 != 0 ? a2 : 0; } //----- (0061E950) -------------------------------------------------------- void __usercall sub_61E950(float *a1@, int a2@) { float *v2; // esi __int16 v3; // ax char *v4; // edi int v5; // ebx float v6; // ecx float v7; // edx __int16 v8; // ax float v9; // ST14_4 float v10; // ST18_4 float v11; // ST1C_4 unsigned int v12; // edx unsigned int v13; // eax float *v14; // edi double v15; // st7 void (__thiscall *v16)(float *, float *); // eax float v17; // edx float v18; // eax int v19; // edi int v20; // ecx void (__thiscall *v21)(float *, float *); // eax long double v22; // st7 double v23; // st7 int v24; // eax double v25; // st7 float v26; // [esp+1Ch] [ebp-2Ch] float v27; // [esp+20h] [ebp-28h] float v28; // [esp+24h] [ebp-24h] float v29; // [esp+28h] [ebp-20h] float v30; // [esp+2Ch] [ebp-1Ch] float v31; // [esp+30h] [ebp-18h] float v32; // [esp+34h] [ebp-14h] float v33; // [esp+38h] [ebp-10h] unsigned int v34[2]; // [esp+3Ch] [ebp-Ch] float v35; // [esp+44h] [ebp-4h] v2 = a1; v3 = sub_6A7770(a1); v4 = sub_664AB0(dword_AD8C90, v3); if ( v4 ) { *(_QWORD *)v34 = (signed __int64)flt_ACCFCC; srand(v34[0]); (*(void (__thiscall **)(char *, float *, int))(*(_DWORD *)v4 + 200))(v4, &v27, a2); v5 = *(_DWORD *)(dword_B66FB0 + 88); v6 = *(float *)(dword_B66FB0 + 92); v7 = *(float *)(dword_B66FB0 + 96); v8 = *((_WORD *)v4 + 274); v33 = *(float *)(dword_B66FB0 + 88); *(float *)v34 = v6; v30 = v27 - v33; *(float *)&v34[1] = v7; v31 = v28 - v6; v32 = v29 - v7; if ( v8 == *((_WORD *)dword_AD8EBC + 274) ) { v9 = -v30; v30 = v9; v10 = -v31; v31 = v10; v11 = -v32; v32 = v11; sub_4430B0(&v30); v12 = v34[0]; v13 = v34[1]; v14 = v2 + 133; *(_DWORD *)v14 = v5; *((_DWORD *)v14 + 1) = v12; *((_DWORD *)v14 + 2) = v13; *(float *)&v34[1] = (double)rand() * 2.0 / 32767.0 - 1.0; *v14 = (*(float *)&v34[1] + 2.0) * v30 + *v14; *(float *)&v34[1] = (double)rand() * 2.0 / 32767.0 - 1.0; v2[134] = (*(float *)&v34[1] + 2.0) * v31 + v2[134]; v33 = -1.0; *(float *)v34 = 0.0; *(float *)&v34[1] = 0.0; sub_4430B0(&v33); v35 = *(float *)v34 * v31 + v33 * v30 + *(float *)&v34[1] * v32; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); *(float *)&v34[1] = v33 * v31 - *(float *)v34 * v30; if ( *(float *)&v34[1] <= 0.0 ) v15 = 180.0 - sub_61E870(v35) * 57.2957763671875 + 180.0; else v15 = sub_61E870(v35) * 57.2957763671875; v2[136] = v15; v34[1] = rand(); v16 = *(void (__thiscall **)(float *, float *))(*(_DWORD *)v2 + 28); *(float *)&v34[1] = ((double)(signed int)v34[1] + (double)(signed int)v34[1]) / 32767.0 - 1.0; v2[136] = *(float *)&v34[1] * 20.0 + v2[136]; v16(v2, v2 + 133); *((_BYTE *)v2 + 529) = 1; } else { v17 = v28; v18 = v29; v19 = (int)(v2 + 133); *(float *)v19 = v27; *(float *)(v19 + 4) = v17; *(float *)(v19 + 8) = v18; v34[1] = rand() % 10; *(float *)v19 = ((double)(signed int)v34[1] * 0.25 + 2.0) * v30 + *(float *)v19; v20 = rand() % 10; v21 = *(void (__thiscall **)(float *, float *))(*(_DWORD *)v2 + 28); v34[1] = v20; v2[134] = ((double)v20 * 0.25 + 2.0) * v31 + v2[134]; v21(v2, v2 + 133); v33 = 1.0; *(float *)v34 = 0.0; *(float *)&v34[1] = 0.0; sub_4430B0(&v33); v27 = v30; v29 = 0.0; v28 = v31; sub_4430B0(&v27); *(float *)&v34[1] = v33 * v27 + *(float *)v34 * v28 + *(float *)&v34[1] * v29; v26 = v27 * *(float *)v34 - v33 * v28; v22 = *(float *)&v34[1]; if ( *(float *)&v34[1] <= -1.0 ) { v23 = flt_BA45B4; } else if ( v22 >= 1.0 ) { v23 = 0.0; } else { *(float *)&v34[1] = acos(v22); v23 = *(float *)&v34[1]; } v35 = v23; v24 = rand(); *(float *)&v34[1] = ((double)v24 + (double)v24) / 32767.0 - 1.0; *(float *)&v34[1] = *(float *)&v34[1] * 90.0 + v35 * 57.2957763671875; v25 = *(float *)&v34[1]; v2[136] = *(float *)&v34[1]; if ( v26 >= 0.0 ) { *((_BYTE *)v2 + 529) = 1; } else { *((_BYTE *)v2 + 529) = 1; v2[136] = v25 + 180.0; } } } else { *((_BYTE *)v2 + 529) = 0; } } // 61E950: could not find valid save-restore pair for ebx // ACCFCC: using guessed type float flt_ACCFCC; // BA45B4: using guessed type float flt_BA45B4; //----- (0061ED50) -------------------------------------------------------- int __thiscall sub_61ED50(float *this, int a2, char *a3) { int v3; // esi _DWORD *v4; // eax int v5; // edi int v6; // edi _DWORD **v7; // ecx _DWORD *v8; // eax _DWORD *v9; // edi int result; // eax void **v11; // [esp+10h] [ebp-1Ch] float *v12; // [esp+1Ch] [ebp-10h] int v13; // [esp+28h] [ebp-4h] v3 = (int)this; v12 = this; sub_6A83F0(this, 0, 0, (int)a3); *(_DWORD *)v3 = &QuestPigeonEffect::`vftable'; *(_DWORD *)(v3 + 8) = &QuestPigeonEffect::`vftable'; v13 = 0; *(_DWORD *)(v3 + 524) = 0; *(float *)(v3 + 544) = 0.0; *(_BYTE *)(v3 + 529) = 1; *(_DWORD *)(v3 + 548) = 3; *(_DWORD *)(v3 + 556) = -2; LOBYTE(v13) = 1; *(_DWORD *)(v3 + 564) = 0; v4 = operator new(0x14u); if ( !v4 ) { a3 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&a3); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v3 + 560) = v4; *v4 = v4; *(_DWORD *)(*(_DWORD *)(v3 + 560) + 4) = *(_DWORD *)(v3 + 560); LOBYTE(v13) = 2; if ( a2 ) { v5 = *(_DWORD *)(v3 + 524); if ( v5 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v3 + 524) = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = *(_DWORD *)(*(_DWORD *)(v3 + 524) + 12); sub_8D8240((_DWORD *)(*(_DWORD *)(v3 + 112) + 176)); if ( v6 ) (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(v3 + 112) + 116))(v6, 0); } v7 = *(_DWORD ***)(v3 + 560); v8 = *v7; *v7 = v7; *(_DWORD *)(*(_DWORD *)(v3 + 560) + 4) = *(_DWORD *)(v3 + 560); *(_DWORD *)(v3 + 564) = 0; if ( v8 != *(_DWORD **)(v3 + 560) ) { do { v9 = (_DWORD *)*v8; operator delete(v8); v8 = v9; } while ( v9 != *(_DWORD **)(v3 + 560) ); } result = v3; *(float *)(v3 + 108) = 0.0; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9EEFAC: using guessed type void *QuestPigeonEffect::`vftable'; // 9EEFC4: using guessed type void *QuestPigeonEffect::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061EEE0) -------------------------------------------------------- LONG __thiscall sub_61EEE0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD **v3; // ecx _DWORD *v4; // eax _DWORD *v5; // edi _DWORD **v6; // ecx _DWORD *v7; // eax _DWORD *v8; // edi int v9; // edi v1 = this; *this = &QuestPigeonEffect::`vftable'; this[2] = &QuestPigeonEffect::`vftable'; v2 = this[131]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[131] = 0; } v3 = (_DWORD **)v1[140]; v4 = *v3; *v3 = v3; *(_DWORD *)(v1[140] + 4) = v1[140]; v1[141] = 0; if ( v4 != (_DWORD *)v1[140] ) { do { v5 = (_DWORD *)*v4; operator delete(v4); v4 = v5; } while ( v5 != (_DWORD *)v1[140] ); } v6 = (_DWORD **)v1[140]; v7 = *v6; *v6 = v6; *(_DWORD *)(v1[140] + 4) = v1[140]; v1[141] = 0; if ( v7 != (_DWORD *)v1[140] ) { do { v8 = (_DWORD *)*v7; operator delete(v7); v7 = v8; } while ( v8 != (_DWORD *)v1[140] ); } operator delete((void *)v1[140]); v9 = v1[131]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return sub_6A7FF0(v1); } // 9EEFAC: using guessed type void *QuestPigeonEffect::`vftable'; // 9EEFC4: using guessed type void *QuestPigeonEffect::`vftable'; //----- (0061F020) -------------------------------------------------------- void __thiscall sub_61F020(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // edi _DWORD **v5; // eax _DWORD *v6; // ebx int v7; // edi __int16 v8; // ax char *v9; // edi float *v10; // eax float v11; // ST30_4 int v12; // ST34_4 int v13; // ST38_4 _DWORD *v14; // eax float *v15; // edi int v16; // eax int v17; // [esp+2Ch] [ebp-18h] int v18; // [esp+34h] [ebp-10h] int v19; // [esp+38h] [ebp-Ch] int v20; // [esp+3Ch] [ebp-8h] float v21; // [esp+40h] [ebp-4h] v2 = this; if ( this[141] ) { v3 = this[139]; if ( v3 != -2 ) { if ( sub_8C4C90((_DWORD *)(this[131] + 120), v3, &v20) ) { v4 = v20; if ( v20 ) { sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = (_DWORD **)v2[140]; v21 = *(float *)(v4 + 60); v6 = *v5; if ( *v5 != v5 ) { while ( 1 ) { if ( v21 >= 0.0 && *(_DWORD *)(v4 + 68) == 1 ) { v7 = v6[4]; v17 = v6[2]; v18 = v6[4]; if ( *((float *)v6 + 3) > (double)v21 ) { if ( (unsigned __int8)v6[2] && *((_BYTE *)v2 + 140) ) *((_BYTE *)v6 + 8) = 0; } else { v8 = sub_6A7770(v2); sub_664AB0(dword_AD8C90, v8); if ( v7 ) { v9 = (char *)(v7 + 4); if ( *v9 != 45 ) { v10 = (float *)(*(int (__thiscall **)(_DWORD *))(*v2 + 48))(v2); v11 = -*v10; *(float *)&v12 = -v10[1]; *(float *)&v13 = -v10[2]; (*(void (__thiscall **)(_DWORD *))(*v2 + 32))(v2); v14 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 32))(v2); v15 = sub_6AE0A0( &unk_B91250, v9, *v14, v14[1], v14[2], SLOBYTE(v11), v12, v13, SLODWORD(flt_ACCFCC), 1); sub_6AACF0((int)v15); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v15 + 60))(v15, LODWORD(flt_ACCFCC)); } v7 = v18; } if ( !(_BYTE)v17 ) { v16 = (*(int (__thiscall **)(_DWORD *))(*v2 + 32))(v2); sub_6BAB40(&dword_AB6520, v7, v16); *((_BYTE *)v6 + 8) = 1; } if ( !*((_BYTE *)v2 + 140) ) { v6 = *(_DWORD **)sub_61FD90(v2 + 140, (int)&v19, v6); goto LABEL_23; } } } v6 = (_DWORD *)*v6; LABEL_23: if ( v6 == (_DWORD *)v2[140] ) return; v4 = v20; } } } } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0061F220) -------------------------------------------------------- void __thiscall sub_61F220(_DWORD *this, int a2) { _DWORD *v2; // edi char **v3; // ecx char *v4; // eax char **v5; // ebx char *v6; // esi int v7; // eax int v8; // eax unsigned int v9; // edi int v10; // esi const char *v11; // ecx unsigned __int16 v12; // ax int v13; // eax double v14; // st7 char v15; // [esp+Ch] [ebp-1Ch] float v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] unsigned int v18; // [esp+18h] [ebp-10h] _DWORD *v19; // [esp+1Ch] [ebp-Ch] const char *v20; // [esp+20h] [ebp-8h] int v21; // [esp+24h] [ebp-4h] v2 = this; v19 = this; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (char **)v2[140]; v4 = *v3; v5 = (char **)(v2 + 140); *v3 = (char *)v3; *(_DWORD *)(v2[140] + 4) = v2[140]; v2[141] = 0; if ( v4 != (char *)v2[140] ) { do { v6 = *(char **)v4; operator delete(v4); v4 = v6; } while ( v6 != *v5 ); } v7 = v2[131]; if ( v7 ) { if ( sub_8C4C90((_DWORD *)(v7 + 120), v2[139], &v21) ) { if ( v21 ) { v8 = *(_DWORD *)(v21 + 32); v21 = v8; if ( v8 ) { v9 = 0; if ( *(_DWORD *)(v8 + 12) ) { do { v10 = *(_DWORD *)(v8 + 16); v11 = *(const char **)(v10 + 8 * v9 + 4); v18 = *(_DWORD *)(v8 + 12); if ( v11 ) { v20 = v11 + 1; if ( strlen(v11) == 7 && !strncmp("AE", v11, 2u) ) { v12 = sub_6A7630(*(const char **)(v10 + 8 * v9 + 4)); v13 = sub_4DCEA0(v12); v14 = *(float *)(v10 + 8 * v9); v17 = v13; v16 = v14; v15 = 0; sub_61FE00(v5, (int)&v15); } v8 = v21; } ++v9; } while ( v9 < v18 ); } } } } } else { OutputDebugStringA("QuestPigeon Effect CatchAEEff Fail"); } } //----- (0061F360) -------------------------------------------------------- void __userpurge sub_61F360(float *a1@, int a2@, float a3) { int *v3; // esi __int16 v4; // ax char *v5; // eax char *v6; // edi int (__thiscall *v7)(int *); // edx float *v8; // eax double v9; // st6 double v10; // st7 int v11; // eax double v12; // st7 double v13; // st6 double v14; // st7 double v15; // st5 double v16; // st7 int (__thiscall *v17)(int *); // eax float *v18; // eax float v19; // ecx float v20; // edx float v21; // eax void (__thiscall *v22)(int *, float *); // edx double v23; // st7 float v24; // ST0C_4 float *v25; // eax int v26; // edx int v27; // eax double v28; // st7 int v29; // eax char v30; // al int v31; // edi int v32; // eax _DWORD *v33; // edi unsigned __int8 v34; // al int **v35; // esi void (__stdcall *v36)(_DWORD); // eax int v37; // [esp+Ch] [ebp-74h] char v38; // [esp+14h] [ebp-6Ch] float v39; // [esp+20h] [ebp-60h] float v40; // [esp+24h] [ebp-5Ch] float v41; // [esp+28h] [ebp-58h] float v42; // [esp+2Ch] [ebp-54h] float v43; // [esp+30h] [ebp-50h] float v44; // [esp+34h] [ebp-4Ch] float v45; // [esp+38h] [ebp-48h] float v46; // [esp+3Ch] [ebp-44h] float v47; // [esp+40h] [ebp-40h] float v48; // [esp+44h] [ebp-3Ch] double v49; // [esp+48h] [ebp-38h] float v50; // [esp+50h] [ebp-30h] float v51; // [esp+54h] [ebp-2Ch] char v52; // [esp+58h] [ebp-28h] v3 = (int *)a1; v37 = a2; v51 = a3 - a1[27]; a1[27] = a3; a1[136] = v51 * 7.0 + a1[136]; v4 = sub_6A7770(a1); v5 = sub_664AB0(dword_AD8C90, v4); v6 = v5; if ( !v5 ) goto LABEL_28; (*(void (__thiscall **)(char *, float *, int))(*(_DWORD *)v5 + 200))(v5, &v45, v37); v7 = *(int (__thiscall **)(int *))(*v3 + 32); v47 = v47 + 70.0; v8 = (float *)v7(v3); v48 = v45 - *v8; *(float *)&v49 = v46 - v8[1]; *((float *)&v49 + 1) = v47 - v8[2]; v51 = *(float *)&v49 * *(float *)&v49 + v48 * v48 + *((float *)&v49 + 1) * *((float *)&v49 + 1); v51 = sqrt(v51); v9 = v51; if ( v51 < 5.0 ) { if ( !v3[137] ) { (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v6 + 220))(v6, &v42); v10 = *(float *)((*(int (__thiscall **)(int *))(*v3 + 32))(v3) + 8); v11 = *v3; v47 = v10; (*(void (__thiscall **)(int *, float *))(v11 + 28))(v3, &v45); if ( sub_8C4C90((_DWORD *)(v3[131] + 120), 501000, &v51) && v51 != 0.0 ) *(float *)(LODWORD(v51) + 72) = -3.4028235e38; sub_4106E0((_DWORD *)v3[131], 501000); *((_BYTE *)v3 + 140) = 0; v3[137] = 1; v3[139] = 501000; sub_61F220(v3, 0); goto LABEL_28; } goto LABEL_21; } if ( v3[137] ) { LABEL_21: v28 = *(float *)((*(int (__thiscall **)(int *))(*v3 + 32))(v3) + 8); v29 = *v3; v47 = v28; (*(void (__thiscall **)(int *, float *))(v29 + 28))(v3, &v45); v30 = sub_8C4C90((_DWORD *)(v3[131] + 120), 501000, &v50); v31 = v30 != 0 ? LODWORD(v50) : 0; if ( *(_DWORD *)(v30 != 0 ? LODWORD(v50) + 0x44 : 68) == 1 ) { sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( *(float *)(v31 + 48) == *(float *)(v31 + 60) ) { v3[139] = -2; v32 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v33 = (_DWORD *)v32; if ( v32 ) { if ( *(_DWORD *)(v32 + 1048) ) { v34 = sub_680890((unsigned __int8 *)byte_AD9238); if ( sub_61D700(v34) ) sub_4A5B30(v33); } } v3[137] = 2; } } goto LABEL_28; } if ( v9 <= 50.0 ) { v51 = *((float *)v3 + 138) * 0.8999999761581421; v15 = v51; *((float *)v3 + 138) = v51; if ( v15 >= 5.0 ) { v16 = v9; } else { v16 = v9; *((float *)v3 + 138) = 5.0; } v14 = v16 - *((float *)v3 + 138); } else { v12 = v51; v51 = (*((float *)v3 + 27) - *((float *)v3 + 25)) * 2.200000047683716; v13 = v51; *((float *)v3 + 138) = v51; v14 = v12 - v13; } v51 = v14; if ( v51 < 0.0 ) v51 = 0.0; v49 = v45; v50 = -*((float *)v3 + 136) * 0.01745329238474369; v50 = cos(v50); v39 = v45 - v50 * v51; v49 = v46; v50 = *((float *)v3 + 136) * 0.01745329238474369; v50 = sin(v50); v17 = *(int (__thiscall **)(int *))(*v3 + 32); v40 = v46 - v50 * v51; v41 = v47; v18 = (float *)v17(v3); v19 = *v18; v20 = v18[1]; v21 = v18[2]; v43 = v20; v22 = *(void (__thiscall **)(int *, float *))(*v3 + 28); v44 = v21; v42 = v19; v22(v3, &v39); v48 = v39 - v42; *(float *)&v49 = v40 - v43; *((float *)&v49 + 1) = 0.0; sub_4430B0(&v48); v42 = 0.0; v43 = -1.0; v44 = 0.0; v51 = v48 * 0.0 - 1.0 * *(float *)&v49 + *((float *)&v49 + 1) * 0.0; v50 = *(float *)&v49 * 0.0 - v48 * -1.0; if ( v50 <= 0.0 ) v23 = sub_61E870(v51); else v23 = -sub_61E870(v51); v24 = v23; sub_85D810((float *)&v52, v24); v25 = sub_85DA90((float *)&v52, (float *)&v38, &v42); v48 = *v25; *(float *)&v49 = v25[1]; v26 = *((_DWORD *)v25 + 2); v27 = *v3; HIDWORD(v49) = v26; (*(void (__thiscall **)(int *, float *))(v27 + 40))(v3, &v48); LABEL_28: sub_803810((float *)v3[131], a3); sub_61F020(v3, SLODWORD(a3)); v35 = (int **)v3[32]; while ( v35 ) { v36 = *(void (__stdcall **)(_DWORD))(*v35[2] + 56); v35 = (int **)*v35; v36(LODWORD(a3)); } } // 61F360: could not find valid save-restore pair for edi //----- (0061F7C0) -------------------------------------------------------- char __userpurge sub_61F7C0@(float *a1@, int a2@, float a3) { float *v3; // esi double v4; // st7 float v5; // ST04_4 int **v6; // edi void (__stdcall *v7)(_DWORD); // edx float v8; // eax float v9; // esi unsigned __int8 v10; // al v3 = a1; sub_61E950(a1, a2); if ( !*((_BYTE *)v3 + 529) ) (*(void (__thiscall **)(float *))(*(_DWORD *)v3 + 64))(v3); v4 = a3; v3[25] = a3; v5 = v4; sub_6A95B0((_DWORD *)v3 + 8, v5); sub_6A9460((_DWORD *)v3 + 38, a3); v6 = (int **)*((_DWORD *)v3 + 32); v3[27] = a3; while ( v6 ) { v7 = *(void (__stdcall **)(_DWORD))(*v6[2] + 60); v6 = (int **)*v6; v7(LODWORD(a3)); } LOBYTE(v8) = sub_8C4C90((_DWORD *)(*((_DWORD *)v3 + 131) + 120), 202000, &a3); if ( LOBYTE(v8) ) { v8 = a3; if ( a3 != 0.0 ) { *(_DWORD *)(LODWORD(a3) + 36) = 0; *(float *)(LODWORD(v8) + 72) = -3.4028235e38; sub_4106E0(*((_DWORD **)v3 + 131), 202000); v3[137] = 0.0; *((_DWORD *)v3 + 139) = 202000; *((_BYTE *)v3 + 140) = 1; sub_61F220(v3, 0); v8 = COERCE_FLOAT(sub_8EF6C0(&unk_BA6A18, dword_ACDD68)); v9 = v8; if ( v8 != 0.0 ) { if ( *(_DWORD *)(LODWORD(v8) + 1048) ) { v10 = sub_680890((unsigned __int8 *)byte_AD9238); v8 = COERCE_FLOAT(sub_61D700(v10)); if ( v8 != 0.0 ) LOBYTE(v8) = sub_4A5B30((_DWORD *)LODWORD(v9)); } } } } return LOBYTE(v8); } //----- (0061F8E0) -------------------------------------------------------- int __thiscall sub_61F8E0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8D8240((_DWORD *)(this[28] + 176)); result = a2; if ( a2 ) result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v2[28] + 116))(a2, 0); return result; } //----- (0061F910) -------------------------------------------------------- char **__stdcall sub_61F910(char *a1, int a2, int a3) { char **result; // eax int v4; // edx int v5; // edx void **v6; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x14u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) { v5 = a3; result[2] = *(char **)a3; result[3] = *(char **)(v5 + 4); result[4] = *(char **)(v5 + 8); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0061F980) -------------------------------------------------------- void *sub_61F980() { return &unk_AD0C3C; } //----- (0061F990) -------------------------------------------------------- bool __thiscall sub_61F990(int this, float a2) { return a2 - *(float *)(this + 100) > 60.0 || *(_DWORD *)(this + 548) == 2; } //----- (0061F9C0) -------------------------------------------------------- void *__thiscall sub_61F9C0(char *this, char a2) { return sub_61FDD0(this - 8, a2); } //----- (0061F9D0) -------------------------------------------------------- int __thiscall sub_61F9D0(char *this) { return (int)(this + 32); } //----- (0061F9E0) -------------------------------------------------------- int __thiscall sub_61F9E0(char *this) { return (int)(this + 88); } //----- (0061F9F0) -------------------------------------------------------- float *__thiscall sub_61F9F0(void *this) { void *v1; // edi float *v2; // eax float *v3; // esi v1 = this; v2 = (float *)operator new(0x20Cu); v3 = 0; if ( v2 ) v3 = sub_6A83F0(v2, 0, 0, 0); (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v1 + 88))(v1, v3); return v3; } //----- (0061FA60) -------------------------------------------------------- double __thiscall sub_61FA60(float *this) { return this[26]; } //----- (0061FA70) -------------------------------------------------------- void __thiscall sub_61FA70(float *this, float a2) { this[26] = a2; } //----- (0061FA80) -------------------------------------------------------- void __thiscall sub_61FA80(_BYTE *this) { this[148] = 1; } //----- (0061FA90) -------------------------------------------------------- int __thiscall sub_61FA90(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int v3; // ecx int result; // eax v1 = this; if ( this[4] ) { v2 = (_DWORD *)this[2]; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v3 + 8))(v1 - 2); } result = sub_521E30(v1 + 1); } return result; } //----- (0061FAD0) -------------------------------------------------------- int __thiscall sub_61FAD0(_DWORD *this, char a2) { int result; // eax int v3; // eax result = this[21]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; v3 = this[28]; if ( v3 ) { if ( a2 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; else *(_WORD *)(v3 + 28) |= 1u; } result = this[29]; if ( result ) { if ( a2 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; } } return result; } //----- (0061FB30) -------------------------------------------------------- int __thiscall sub_61FB30(_DWORD *this) { return this[21]; } //----- (0061FB40) -------------------------------------------------------- void __thiscall sub_61FB40(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; if ( a2 ) { v3 = this[21]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[21] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } sub_6A9A70((int)(v2 + 8), (_DWORD *)a2); } } //----- (0061FBA0) -------------------------------------------------------- _DWORD *__thiscall sub_61FBA0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = (_DWORD *)this[28]; if ( result ) { result[22] = *a2; result[23] = a2[1]; result[24] = a2[2]; } return result; } //----- (0061FBD0) -------------------------------------------------------- void *__thiscall sub_61FBD0(_DWORD *this) { int v1; // eax void *result; // eax v1 = this[28]; if ( v1 ) result = (void *)(v1 + 88); else result = &unk_B91238; return result; } //----- (0061FBF0) -------------------------------------------------------- void *__thiscall sub_61FBF0(_DWORD *this) { int v1; // eax void *result; // eax v1 = this[28]; if ( v1 ) result = (void *)(v1 + 140); else result = &unk_B91238; return result; } //----- (0061FC10) -------------------------------------------------------- float *__thiscall sub_61FC10(_DWORD *this, int *a2) { float *result; // eax _DWORD *v3; // esi bool v4; // zf char v5; // [esp+4h] [ebp-28h] result = (float *)a2; v3 = this; v4 = this[28] == 0; this[22] = *a2; this[23] = a2[1]; this[24] = a2[2]; if ( !v4 ) { result = sub_8CF440(a2, (float *)&v5); qmemcpy((void *)(v3[28] + 52), &v5, 0x24u); } return result; } //----- (0061FC70) -------------------------------------------------------- float *__thiscall sub_61FC70(_DWORD *this, int a2) { float *result; // eax _DWORD *v3; // esi bool v4; // zf char v5; // [esp+4h] [ebp-28h] result = (float *)a2; v3 = this; v4 = this[28] == 0; this[22] = *(_DWORD *)a2; this[23] = *(_DWORD *)(a2 + 4); this[24] = *(_DWORD *)(a2 + 8); if ( !v4 ) { result = sub_8CF390((float *)a2, (float *)&v5); qmemcpy((void *)(v3[28] + 52), &v5, 0x24u); } return result; } //----- (0061FCD0) -------------------------------------------------------- char __thiscall sub_61FCD0(_DWORD *this, int *a2) { _DWORD *v2; // edi void *v3; // ecx int v4; // ebx int v5; // eax char result; // al v2 = this; v3 = (void *)this[21]; if ( v3 ) { v4 = *a2; v5 = sub_85BD60(v3); (*(void (__thiscall **)(int *, int))(v4 + 12))(a2, v5); } a2[26] = v2[26]; result = *((_BYTE *)v2 + 120); *((_BYTE *)a2 + 120) = result; if ( result ) result = sub_6A7910(a2); return result; } //----- (0061FD10) -------------------------------------------------------- void __thiscall sub_61FD10(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx if ( a2 ) { v2 = this + 1; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[1] + 4))(this + 1); v3[2] = a2; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = v3; ++v2[3]; } else { ++v2[3]; v2[1] = v3; } v2[2] = v3; } } //----- (0061FD60) -------------------------------------------------------- int __thiscall sub_61FD60(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8D8240((_DWORD *)(this[29] + 176)); result = a2; if ( a2 ) result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v2[29] + 116))(a2, 0); return result; } //----- (0061FD90) -------------------------------------------------------- int __thiscall sub_61FD90(_DWORD *this, int a2, void *a3) { _DWORD **v3; // eax _DWORD *v4; // esi void *v5; // ecx int result; // eax void *v7; // [esp+10h] [ebp+Ch] v3 = (_DWORD **)a3; v4 = this; v5 = *(void **)a3; v7 = *(void **)a3; if ( v3 != (_DWORD **)*v4 ) { *v3[1] = *v3; (*v3)[1] = v3[1]; operator delete(v3); v5 = v7; --v4[1]; } result = a2; *(_DWORD *)a2 = v5; return result; } //----- (0061FDD0) -------------------------------------------------------- void *__thiscall sub_61FDD0(void *this, char a2) { void *v2; // esi v2 = this; sub_61EEE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0061FE00) -------------------------------------------------------- char **__thiscall sub_61FE00(char **this, int a2) { char **v2; // esi char *v3; // edi char **result; // eax char *v5; // ecx v2 = this; v3 = *this; result = sub_61F910(*this, *((_DWORD *)*this + 1), a2); v5 = v2[1]; if ( (unsigned int)(357913940 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = result; *(_DWORD *)result[1] = result; return result; } //----- (0061FEA0) -------------------------------------------------------- char __thiscall sub_61FEA0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[86], v2[87]); return v3; } //----- (0061FED0) -------------------------------------------------------- int __thiscall sub_61FED0(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // esi int v4; // edi int v5; // eax int *v6; // ecx int v7; // edi int v8; // ebx int v9; // ebx int v10; // eax result = a2; v3 = this; this[88] = a2; if ( a2 ) { (*(void (__stdcall **)(int, _DWORD))(*this + 116))(a2, 0); v4 = *(_DWORD *)v3[88]; v5 = (*(int (**)(void))(*(_DWORD *)v3[86] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v4 + 172))(v3[88], v5); v6 = (int *)v3[88]; v7 = *v6; v8 = 8 - (*(int (**)(void))(*v6 + 148))(); v9 = (*(int (**)(void))(*(_DWORD *)v3[86] + 168))() + v8; v10 = (*(int (**)(void))(*(_DWORD *)v3[86] + 148))(); (*(void (__thiscall **)(_DWORD, int))(v7 + 176))(v3[88], v9 + v10); result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3[88] + 520))(v3[88], 0); } return result; } //----- (0061FF80) -------------------------------------------------------- char __thiscall sub_61FF80(_DWORD *this) { return sub_8F81A0(&unk_BA6B10, this); } //----- (0061FFC0) -------------------------------------------------------- void __thiscall sub_61FFC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax int v4; // edi int v5; // eax int v6; // esi v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = v1[86]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); v4 = *(_DWORD *)(v1[87] + 300); *(_DWORD *)(v1[86] + 344) = v4; sub_465130((_DWORD *)v1[86]); v5 = v1[87]; v6 = v1[88]; if ( v4 + 1 == *(_DWORD *)(v5 + 296) ) { if ( v6 ) *(_WORD *)(v6 + 28) &= 0xFFFEu; } else if ( v6 ) { *(_WORD *)(v6 + 28) |= 1u; } } } } //----- (00620040) -------------------------------------------------------- int __thiscall sub_620040(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_4638F0(this[87], 0); v1[86][84] = 0; v1[86][86] = 0; return sub_465130(v1[86]); } //----- (00620080) -------------------------------------------------------- void __thiscall sub_620080(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ebx int v5; // eax void (__thiscall *v6)(_DWORD *, int *, int); // edx void (__thiscall ***v7)(_DWORD, signed int); // edi void (__thiscall ***v8)(_DWORD, signed int); // edi _DWORD *v9; // eax int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v3 = this; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); switch ( a2 ) { case 0: v5 = v3[88]; v6 = *(void (__thiscall **)(_DWORD *, int *, int))(*v3 + 120); *((_WORD *)v3 + 178) = -1; v6(v3, &v11, v5); if ( v11 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } if ( v4 ) sub_6217C0(*(_DWORD **)(v4 + 776), *(_DWORD *)(v4 + 596)); goto LABEL_15; case 1: sub_61FFC0(v3); break; case 2: LOWORD(a2) = *((_WORD *)v3 + 178); sub_6F3D10(&off_AB7F2C, 17, 20, &a2, 2u); (*(void (__thiscall **)(_DWORD *, int *, _DWORD))(*v3 + 120))(v3, &v10, v3[88]); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v4 ) sub_6217C0(*(_DWORD **)(v4 + 776), *(_DWORD *)(v4 + 596)); LABEL_15: sub_8F86A0(&unk_BA6B10, v3); break; case 3: v9 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v9 ) sub_4A5170(v9, "QuestWin_QuickStart"); break; default: return; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006201E0) -------------------------------------------------------- LONG __thiscall sub_6201E0(_DWORD *this, int a2, int a3) { void *v3; // eax int i; // eax char *v5; // ebx int v6; // eax int v7; // eax int v8; // ecx int v9; // edx int v10; // eax _DWORD *v11; // esi double v12; // st7 char *j; // esi double v14; // st7 _DWORD *v16; // [esp+18h] [ebp-3A8h] char *v17; // [esp+1Ch] [ebp-3A4h] size_t v18; // [esp+20h] [ebp-3A0h] _DWORD *v19; // [esp+24h] [ebp-39Ch] BYTE TestChar; // [esp+28h] [ebp-398h] int v21; // [esp+2Ch] [ebp-394h] char v22; // [esp+30h] [ebp-390h] char v23; // [esp+1B0h] [ebp-210h] char v24; // [esp+1B1h] [ebp-20Fh] char v25; // [esp+2B0h] [ebp-110h] char v26; // [esp+2B1h] [ebp-10Fh] int v27; // [esp+3BCh] [ebp-4h] v19 = this; sub_8FFFC0(&v22); v27 = 0; v25 = 0; memset(&v26, 0, 0xFFu); v23 = 0; memset(&v24, 0, 0xFFu); unknown_libname_14(&TestChar); v3 = sub_6CD770(); sub_6CE010(&TestChar, (int)v3, a2); for ( i = sub_6CE0D0((int)&TestChar, (int)&v17); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&v17) ) { if ( !i ) { v5 = sub_7549E0(0); strncpy(v5, v17, v18); v6 = (int)v19; v5[v18] = 0; v7 = *(_DWORD *)(v6 + 344); v8 = (*(_DWORD *)(v7 + 300) - *(_DWORD *)(v7 + 296)) >> 2; if ( v8 ) { v9 = *(_DWORD *)(v7 + 296); v10 = (*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0; v21 = v10; v8 = v10; } else { v21 = 0; } v11 = *(_DWORD **)(*(_DWORD *)(v8 + 288) + 312); v16 = v11; if ( v11 ) { v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284; for ( j = sub_900720(v11, v5, (signed int)v12, 0); j; j = sub_900720( v16, j, (signed int)v14, (unsigned int)&v23) ) { strncpy(&v25, v5, j - v5); *(&v25 + j - v5) = 0; if ( a3 ) sprintf(&v23, "%s%s", a3, &v25); else sprintf(&v23, "%s", &v25); ((void (__thiscall *)(_DWORD))loc_466CA0)(v19[86]); v5 = j; v14 = (double)(unsigned int)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)v21 + 144))(0) / 1.049999952316284; } } } } v27 = -1; return sub_900160(&v22); } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); //----- (006204A0) -------------------------------------------------------- int __cdecl sub_6204A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &QuestStartItemWin::`vftable'; *(_DWORD *)(v2 + 232) = &QuestStartItemWin::`vftable'; *(_WORD *)(v2 + 356) = -1; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9EF368: using guessed type void *QuestStartItemWin::`vftable'; // 9EF384: using guessed type void *QuestStartItemWin::`vftable'; //----- (006205F0) -------------------------------------------------------- void __thiscall sub_6205F0(_DWORD *this, unsigned __int16 a2) { int v2; // ebx _DWORD *v3; // ecx int v4; // eax _DWORD *v5; // ecx _DWORD *v6; // eax _DWORD *v7; // edi int v8; // eax int v9; // ecx int v10; // edi const CHAR *v11; // eax const CHAR *v12; // eax _BYTE *v13; // edi int v14; // esi int v15; // edx int v16; // eax int v17; // edx int v18; // ST10_4 const char *v19; // eax int v20; // esi int v21; // ebx int v22; // eax int v23; // edx int v24; // ST10_4 const char *v25; // eax int v26; // esi int v27; // ebx int v28; // eax int v29; // ecx signed int v30; // esi int v31; // eax char v32; // cl unsigned __int16 *v33; // esi int v34; // edi int v35; // ebx int v36; // edi int v37; // edx int v38; // eax int v39; // esi const char *v40; // eax _DWORD *v41; // eax signed int v42; // edi _BYTE *v43; // esi _DWORD *v44; // eax CHAR *v45; // eax _DWORD *v46; // esi int v47; // edi int v48; // ebx int v49; // eax int v50; // ecx int **v51; // eax int *j; // eax int i; // eax void *v54; // eax _DWORD *v55; // esi const CHAR *v56; // eax int v57; // esi _DWORD *v58; // ecx void **v59; // [esp+10h] [ebp-160h] int v60; // [esp+1Ch] [ebp-154h] int v61; // [esp+20h] [ebp-150h] char v62; // [esp+24h] [ebp-14Ch] void *v63; // [esp+28h] [ebp-148h] int v64; // [esp+2Ch] [ebp-144h] int v65; // [esp+34h] [ebp-13Ch] char *v66; // [esp+38h] [ebp-138h] int v67; // [esp+3Ch] [ebp-134h] _DWORD *v68; // [esp+40h] [ebp-130h] void *v69; // [esp+44h] [ebp-12Ch] int v70; // [esp+54h] [ebp-11Ch] unsigned int v71; // [esp+58h] [ebp-118h] char v72; // [esp+60h] [ebp-110h] int v73; // [esp+16Ch] [ebp-4h] v2 = (int)this; v3 = (_DWORD *)this[86]; v68 = (_DWORD *)v2; sub_466A50(v3); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) sub_61FED0((_DWORD *)v2, *(_DWORD *)(v4 + 596)); v5 = *(_DWORD **)(v2 + 296); *(_WORD *)(v2 + 356) = a2; sub_497270(v5, (void *)a2); v6 = sub_6CD770(); if ( v6 ) { v7 = (_DWORD *)v6[1]; if ( v7 ) { v66 = (char *)sub_74A800(v6, a2); v8 = sub_74E7D0(v7, a2); v9 = *(_DWORD *)(v2 + 344); v10 = v8; v65 = v8; ((void (__thiscall *)(int, void *))loc_466CA0)(v9, &unk_9EF055); v11 = sub_40C190(-1694960385); sprintf(&v72, "<%s>", v11); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v2 + 344), &v72); sub_6201E0((_DWORD *)v2, *(_DWORD *)(v10 + 8), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*(_DWORD *)(v2 + 344), &unk_9EF056); v12 = sub_40C190(2056619164); sprintf(&v72, "<%s>", v12); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v2 + 344), &v72); if ( *(_BYTE *)(v10 + 89) ) { sprintf(&v72, "Level : %d", *(unsigned __int8 *)(v10 + 90)); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v2 + 344), &v72); } v67 = 0; v13 = (_BYTE *)(v10 + 94); while ( 1 ) { if ( !*(v13 - 2) ) { LABEL_51: v67 = 0; v33 = (unsigned __int16 *)(v65 + 134); do { if ( !*((_BYTE *)v33 - 2) ) break; v34 = dword_ACB230; v35 = *v33; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v35) ) { if ( (unsigned __int16)v35 <= *(_WORD *)(v34 + 200) ) { v37 = *(_DWORD *)(v34 + 196); v36 = *(_DWORD *)(v37 + 4 * v35) ? *(_DWORD *)(v37 + 4 * v35) : 0; } else { v36 = 0; } } else { v36 = 0; } v38 = sub_6854B0(&byte_ADA230, *v33); sprintf(&v72, "%s %d/%d", v36 + 34, v38, v33[1]); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v68[86], &v72); v33 += 3; ++v67; } while ( v67 < 5 ); v39 = v65; if ( *(_BYTE *)(v65 + 162) ) { v40 = sub_40C190(959593777); sprintf(&v72, v40, &unk_9EF05F); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v68[86], &v72); } v64 = 0; v41 = operator new(0x10u); if ( !v41 ) { v66 = 0; std::exception::exception((std::exception *)&v59, (const char *const *)&v66); v59 = &std::bad_alloc::`vftable'; _CxxThrowException(&v59, &_TI2_AVbad_alloc_std__); } v63 = v41; *v41 = v41; *((_DWORD *)v63 + 1) = v63; *((_DWORD *)v63 + 2) = v63; *((_BYTE *)v63 + 14) = 1; *((_BYTE *)v63 + 15) = 1; v42 = 0; v73 = 0; v43 = (_BYTE *)(v39 + 96); do { if ( !*(v43 - 4) ) break; if ( !*v43 ) { v44 = sub_4DD530(&v62, v43 - 2); sub_4DD450(&v62, (int)&v60, v44, 0); } ++v42; v43 += 8; } while ( v42 < 5 ); v71 = 15; v70 = 0; LOBYTE(v69) = 0; LOBYTE(v73) = 1; v45 = (CHAR *)sub_40C190(-301846455); sub_401D10((int)&v69, v45, strlen(v45)); v46 = *(_DWORD **)v63; while ( v46 != v63 ) { v47 = dword_ACDA48; v48 = *((unsigned __int16 *)v46 + 6); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v48) ) { if ( (unsigned __int16)v48 <= *(_WORD *)(v47 + 200) ) { v50 = *(_DWORD *)(v47 + 196); if ( *(_DWORD *)(v50 + 4 * v48) ) v49 = *(_DWORD *)(v50 + 4 * v48); else v49 = 0; } else { v49 = 0; } } else { v49 = 0; } sprintf(&v72, " %s", v49 + 34); sub_401D10((int)&v69, &v72, strlen(&v72)); if ( !*((_BYTE *)v46 + 15) ) { v51 = (int **)v46[2]; if ( *((_BYTE *)v51 + 15) ) { for ( i = v46[1]; !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) ) { if ( v46 != *(_DWORD **)(i + 8) ) break; v46 = (_DWORD *)i; } v46 = (_DWORD *)i; } else { v46 = (_DWORD *)v46[2]; for ( j = *v51; !*((_BYTE *)j + 15); j = (int *)*j ) v46 = j; } } } v54 = v69; if ( v71 < 0x10 ) v54 = &v69; v55 = v68; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v68[86], v54); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v55[86], &unk_9EF072); v56 = sub_40C190(-286830771); sprintf(&v72, "<%s>", v56); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v55[86], &v72); sub_6201E0(v55, *(_DWORD *)(v65 + 12), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v55[86], &unk_9EF073); sub_464D00((_DWORD *)v55[86], 4); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v55[86], &unk_9EF07A); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v55[86], &unk_9EF07B); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v55[86], &unk_9EF082); sub_465130((_DWORD *)v55[86]); v57 = v55[88]; if ( v57 ) *(_WORD *)(v57 + 28) |= 1u; if ( v71 >= 0x10 ) operator delete(v69); v71 = 15; v70 = 0; LOBYTE(v69) = 0; v58 = *(_DWORD **)v63; v73 = 2; sub_61E6D0(&v62, (int *)&v66, v58, v63); operator delete(v63); return; } if ( v13[2] == 1 ) { v26 = dword_ACDA48; v27 = *(unsigned __int16 *)v13; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v27) ) { if ( (unsigned __int16)v27 <= *(_WORD *)(v26 + 200) ) { v29 = *(_DWORD *)(v26 + 196); if ( *(_DWORD *)(v29 + 4 * v27) ) v28 = *(_DWORD *)(v29 + 4 * v27); else v28 = 0; } else { v28 = 0; } } else { v28 = 0; } v30 = 1; if ( v66 ) v30 = (unsigned __int8)v66[v67 + 24]; if ( v13[4] ) { v31 = sub_4B0D70(*(unsigned __int16 *)v13); if ( v31 ) { v32 = v13[4]; switch ( v32 ) { case 1: sprintf(&v72, "%s %d/%d", v31 + 181, v30, (unsigned __int8)v13[3]); break; case 2: sprintf(&v72, "%s %d/%d", v31 + 213, v30, (unsigned __int8)v13[3]); break; case 3: sprintf(&v72, "%s %d/%d", v31 + 245, v30, (unsigned __int8)v13[3]); break; case 4: sprintf(&v72, "%s %d/%d", v31 + 277, v30, (unsigned __int8)v13[3]); break; } } } else { sprintf(&v72, "%s %d/%d", v28 + 34, v30, (unsigned __int8)v13[3]); } ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v68[86], &v72); } else { if ( v13[2] != 2 ) { if ( v13[2] == 3 ) { v14 = dword_ACDA48; v15 = *(_DWORD *)dword_ACDA48; v61 = *(unsigned __int16 *)v13; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v15 + 16))(dword_ACDA48, v61) ) { if ( (unsigned __int16)v61 <= *(_WORD *)(v14 + 200) ) { v17 = *(_DWORD *)(v14 + 196); if ( *(_DWORD *)(v17 + 4 * (unsigned __int16)v61) ) v16 = *(_DWORD *)(v17 + 4 * (unsigned __int16)v61); else v16 = 0; } else { v16 = 0; } } else { v16 = 0; } v18 = v16 + 34; v19 = sub_40C190(-1913854750); sprintf(&v72, v19, &unk_9EF05E, v18); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(*(_DWORD *)(v2 + 344), &v72); } goto LABEL_50; } v20 = dword_ACDA48; v21 = *(unsigned __int16 *)v13; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v21) ) { if ( (unsigned __int16)v21 <= *(_WORD *)(v20 + 200) ) { v23 = *(_DWORD *)(v20 + 196); if ( *(_DWORD *)(v23 + 4 * v21) ) v22 = *(_DWORD *)(v23 + 4 * v21); else v22 = 0; } else { v22 = 0; } } else { v22 = 0; } v24 = v22 + 34; v25 = sub_40C190(1011449494); sprintf(&v72, v25, &unk_9EF057, v24); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v68[86], &v72); } v2 = (int)v68; LABEL_50: v13 += 8; if ( ++v67 >= 5 ) goto LABEL_51; } } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACB230: using guessed type int dword_ACB230; // ACDA48: using guessed type int dword_ACDA48; // ADA230: using guessed type char byte_ADA230; //----- (00620E20) -------------------------------------------------------- char __thiscall sub_620E20(volatile LONG **this, int a2) { volatile LONG **v2; // esi char result; // al int v4; // ebx char *v5; // eax volatile LONG **v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax int v13; // eax int v14; // edx int v15; // eax volatile LONG *v16; // edi const CHAR *v17; // eax volatile LONG *v18; // edi volatile LONG **v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // edi void **v23; // eax void **v24; // eax void **v25; // eax void **v26; // eax void **v27; // eax void **v28; // eax int v29; // eax volatile LONG *v30; // edi int (__thiscall *v31)(volatile LONG *); // edx volatile LONG *v32; // ecx int v33; // eax int v34; // eax volatile LONG **v35; // edi int v36; // eax int v37; // edi int v38; // eax volatile LONG *v39; // edi const CHAR *v40; // eax volatile LONG **v41; // edi int v42; // eax int v43; // edi int v44; // eax volatile LONG *v45; // edi volatile LONG v46; // ebx const CHAR *v47; // eax void (__thiscall ***v48)(_DWORD, signed int); // esi int v49; // [esp+74h] [ebp-6Ch] int v50; // [esp+78h] [ebp-68h] int v51; // [esp+7Ch] [ebp-64h] char v52; // [esp+84h] [ebp-5Ch] int v53; // [esp+88h] [ebp-58h] int v54; // [esp+8Ch] [ebp-54h] int v55; // [esp+90h] [ebp-50h] int v56; // [esp+94h] [ebp-4Ch] volatile LONG *v57; // [esp+98h] [ebp-48h] int v58; // [esp+9Ch] [ebp-44h] volatile LONG **v59; // [esp+A0h] [ebp-40h] int v60; // [esp+A4h] [ebp-3Ch] int v61; // [esp+A8h] [ebp-38h] int v62; // [esp+ACh] [ebp-34h] int v63; // [esp+B0h] [ebp-30h] void *v64; // [esp+B4h] [ebp-2Ch] int v65; // [esp+C4h] [ebp-1Ch] unsigned int v66; // [esp+C8h] [ebp-18h] int v67; // [esp+DCh] [ebp-4h] v2 = this; v63 = 0; v67 = 0; v57 = (volatile LONG *)sub_43D0D0(4u); if ( !v57 ) { v67 = -1; if ( v63 && !InterlockedDecrement((volatile LONG *)(v63 + 4)) ) { if ( v63 ) (**(void (__thiscall ***)(int, signed int))v63)(v63, 1); } return 0; } v4 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\QuestWin_QuickStart.nif"); sub_8F66B0(v5, (int)&v63, v4); if ( !v63 ) return 0; v6 = sub_8FB140(v63, (int)"Frame", (int)&v62, (int)&v61, 0); if ( sub_8F1440(v2, 0, 0, (int)v6, 0, a2, (int)"QuestStartItemWin", 0) ) { v8 = v61; v9 = v62; v58 = v61; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v63, (int)"Theme", (int)&v62, (int)&v61, v10); else v11 = sub_8FB140(v63, (int)"Theme", (int)&v62, (int)&v61, 0); sub_8F3EB0(v62 - v9, v61 - v8, (int)v11, (int)v2, 0, 0); v12 = sub_8FB140(v63, (int)"Panel01", (int)&v62, (int)&v61, 0); sub_8F3EB0(v62 - v9, v61, (int)v12, (int)v2, 0, 0); v13 = *sub_8FB140(v63, (int)"WinTitle", (int)&v62, (int)&v61, v57)[9]; v14 = *(_DWORD *)(v13 + 20); v59 = *(volatile LONG ***)(v13 + 24); v60 = v14; v15 = sub_421050(0); v16 = sub_8F4A20(v62 - v9, v61 - v8, v60, (int)v59, v15, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v16 + 488))(v16, 5); v60 = *v16; v17 = sub_40C190(-1499031438); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v16, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v18 = v57; v59 = sub_8FB140(v63, (int)"ClsNor", (int)&v62, (int)&v61, v57); sub_8FB650(v59, v63, (int)"ClsClick"); sub_8FB650(v59, v63, (int)"ClsOver"); sub_8FE0F0(v62 - v9, v61 - v58, (int)v59, (int)v2, 0, 0, 0); v60 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("HelpLinkNor") ) { v59 = sub_8FB140(v63, (int)"HelpLinkNor", (int)&v62, (int)&v61, (volatile LONG *)v60); sub_8FB650(v59, v63, (int)"HelpLinkClick"); sub_8FB650(v59, v63, (int)"HelpLinkOver"); sub_8FE0F0(v62 - v9, v61 - v58, (int)v59, (int)v2, 3, 0, 0); } v49 = 0; v50 = 0; v51 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; LOBYTE(v67) = 1; v19 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v49, 1); *v19 = (volatile LONG *)1; v19[1] = (volatile LONG *)v63; v59 = v19; v66 = 15; v65 = 0; LOBYTE(v64) = 0; sub_4018E0(&v64, "ColumnBar01Nor", 0xEu); LOBYTE(v67) = 2; sub_40B060((int *)v59 + 18, (const void **)&v64); LOBYTE(v67) = 1; if ( v66 >= 0x10 ) operator delete(v64); v59 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v49, 2); *v59 = (volatile LONG *)2; v66 = 15; v65 = 0; LOBYTE(v64) = 0; sub_4018E0(&v64, "Column04", 8u); LOBYTE(v67) = 3; sub_40B060((int *)v59 + 18, (const void **)&v64); LOBYTE(v67) = 1; if ( v66 >= 0x10 ) operator delete(v64); v59[1] = (volatile LONG *)v63; v66 = 15; v65 = 0; LOBYTE(v64) = 0; sub_466680(&v49, 0); v20 = sub_8FB140(v63, (int)"SubText02", (int)&v62, (int)&v61, v18); v21 = sub_466330(v62 - v9, v61 - v58, (int)v20, *(float *)&v2, (int **)&v49, 0, 0); v2[86] = v21; *((_BYTE *)v21 + 348) = 0; ((void (__thiscall *)(volatile LONG *, const char *))loc_466CA0)(v2[86], "."); ((void (__thiscall *)(volatile LONG *, const char *))loc_466CA0)(v2[86], ".."); ((void (__thiscall *)(volatile LONG *, const char *))loc_466CA0)(v2[86], "..."); sub_464D00(v2[86], 4); sub_465130(v2[86]); v22 = sub_8FB140(v63, (int)"SlideBar_SlideBtnMiddle", (int)&v62, (int)&v61, v18); v23 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v23, "SlideBar_DnBtn01Nor"); v24 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v24, "SlideBar_DnBtn01Click"); v25 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v25, "SlideBar_DnBtn01Over"); v26 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v26, "SlideBar_UpBtn01Nor"); v27 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v27, "SlideBar_UpBtn01Click"); v28 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v63 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v28, "SlideBar_UpBtn01Over"); v29 = sub_464310(v63, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v22, 0, v2); v2[87] = (volatile LONG *)v29; *(_DWORD *)(v29 + 312) = 1; *((_DWORD *)v2[87] + 76) = 1; v30 = v2[87]; v31 = *(int (__thiscall **)(volatile LONG *))(*v2[87] + 168); v32 = v2[87]; v60 = *v2[87]; v33 = v31(v32); v34 = (*(int (__thiscall **)(volatile LONG *, int))(*v30 + 164))(v30, v33); (*(void (__thiscall **)(volatile LONG *, int))(v60 + 308))(v2[87], v34 - 18); sub_4638F0(v2[87], *((_DWORD *)v2[86] + 84)); sub_4638F0(v2[87], 0); *((_DWORD *)v2[86] + 84) = 0; *((_DWORD *)v2[86] + 86) = 0; sub_465130(v2[86]); v35 = sub_8FB140(v63, (int)"GiveupNor", (int)&v62, (int)&v61, v57); sub_8FB650(v35, v63, (int)"GiveupClick"); sub_8FB650(v35, v63, (int)"GiveupOver"); sub_8FE0F0(v62 - v9, v61 - v58, (int)v35, (int)v2, 2, 0, 0); v36 = *v35[9]; v37 = *(_DWORD *)(v36 + 24); v60 = *(_DWORD *)(v36 + 20); v38 = sub_421050(7); v39 = sub_8F4A20(v62 - v9, v61 - v58 + 1, v60, v37, v38, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); v60 = *v39; v40 = sub_40C190(-586948640); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v60 + 472))(v39, v40); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v41 = sub_8FB140(v63, (int)"EpicQuestNor", (int)&v62, (int)&v61, v57); sub_8FB650(v41, v63, (int)"EpicQuestClick"); sub_8FB650(v41, v63, (int)"EpicQuestOver"); sub_8FE0F0(v62 - v9, v61 - v58, (int)v41, (int)v2, 0, 0, 0); v42 = *v41[9]; v43 = *(_DWORD *)(v42 + 24); v60 = *(_DWORD *)(v42 + 20); v44 = sub_421050(7); v45 = sub_8F4A20(v62 - v9, v61 - v58 + 1, v60, v43, v44, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v45 + 488))(v45, 5); v46 = *v45; v47 = sub_40C190(-1696072729); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v46 + 472))(v45, v47); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v67) = 0; sub_40AE10((void **)&v49); v67 = -1; if ( v63 ) { v48 = (void (__thiscall ***)(_DWORD, signed int))v63; if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) ) { if ( v48 ) (**v48)(v48, 1); } } result = 1; } else { v7 = (void (__thiscall ***)(_DWORD, signed int))v63; v67 = -1; if ( v63 && !InterlockedDecrement((volatile LONG *)(v63 + 4)) && v7 ) (**v7)(v7, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00621670) -------------------------------------------------------- void *__thiscall sub_621670(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &QuestStartItemWin::`vftable'; *((_DWORD *)this + 58) = &QuestStartItemWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9EF368: using guessed type void *QuestStartItemWin::`vftable'; // 9EF384: using guessed type void *QuestStartItemWin::`vftable'; //----- (006216C0) -------------------------------------------------------- int __thiscall sub_6216C0(_DWORD **this) { _DWORD **v1; // esi signed int v2; // edi int result; // eax v1 = this + 111; v2 = 10; do { (*(void (__stdcall **)(_DWORD))(**(v1 - 10) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(v1 - 10) + 256))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[10] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[10] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[20] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[20] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[30] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[30] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[40] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[40] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[67] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[67] + 256))(0); ++v1; --v2; } while ( v2 ); return result; } //----- (006217C0) -------------------------------------------------------- int __thiscall sub_6217C0(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // esi int v4; // edi int v5; // eax int *v6; // ecx int v7; // edi int v8; // ebx int v9; // ebx int v10; // eax result = a2; v3 = this; this[194] = a2; if ( a2 ) { (*(void (__stdcall **)(int, _DWORD))(*this + 116))(a2, 0); v4 = *(_DWORD *)v3[194]; v5 = (*(int (**)(void))(*(_DWORD *)v3[91] + 164))(); (*(void (__thiscall **)(_DWORD, int))(v4 + 172))(v3[194], v5); v6 = (int *)v3[194]; v7 = *v6; v8 = 8 - (*(int (**)(void))(*v6 + 148))(); v9 = (*(int (**)(void))(*(_DWORD *)v3[91] + 168))() + v8; v10 = (*(int (**)(void))(*(_DWORD *)v3[91] + 148))(); (*(void (__thiscall **)(_DWORD, int))(v7 + 176))(v3[194], v9 + v10); result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3[194] + 520))(v3[194], 0); } return result; } //----- (00621870) -------------------------------------------------------- char sub_621870() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "QuestWin"); return (char)v0; } //----- (006218A0) -------------------------------------------------------- void __thiscall sub_6218A0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax v1 = this; if ( this[168] ) { if ( (*(unsigned __int8 (**)(void))(*this[168] + 260))() ) sub_8F86A0(&unk_BA6B10, v1[168]); v2 = v1[87]; if ( v2 == (_DWORD *)1 ) { v1[168][155] = 1; sub_8F82A0(&unk_BA6B10, v1[168]); } else { if ( v2 == (_DWORD *)2 ) v1[168][155] = 0; sub_8F82A0(&unk_BA6B10, v1[168]); } } } //----- (00621930) -------------------------------------------------------- char __thiscall sub_621930(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { sub_4E3710(v2[157], v2[159]); LOBYTE(v3) = sub_4E3710(v2[156], v2[158]); } return v3; } //----- (00621980) -------------------------------------------------------- void __thiscall sub_621980(int this) { int v1; // esi _DWORD *v2; // eax v1 = this; if ( *(_DWORD *)(this + 648) >= 0 && sub_464700(*(_DWORD **)(this + 624)) ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4BF200(v2, *(_WORD *)(v1 + 648)); } } //----- (006219C0) -------------------------------------------------------- int __thiscall sub_6219C0(_DWORD **this) { _DWORD **v1; // esi signed int v2; // edi int result; // eax v1 = this + 99; v2 = 13; do { (*(void (__stdcall **)(_DWORD))(**(v1 - 13) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(v1 - 13) + 256))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v1 + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[13] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[13] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[26] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[26] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[39] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*v1[39] + 256))(0); ++v1; --v2; } while ( v2 ); return result; } //----- (00621AF0) -------------------------------------------------------- bool __thiscall sub_621AF0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, a7, a8) != 0; } //----- (00621B20) -------------------------------------------------------- char __thiscall sub_621B20(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax int v3; // esi v1 = this; v2 = (_DWORD *)this[174]; if ( v2 ) { sub_8F9E00(&unk_BA6B10, v2); v3 = v1[174]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[174] = 0; } } return sub_4A50D0((_DWORD *)v1[74]); } //----- (00621B80) -------------------------------------------------------- void __thiscall sub_621B80(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi int v5; // esi v4 = this; if ( a2 == 27 ) { if ( a3 ) { if ( this[116] ) { v5 = this[116]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v4[116] = 0; } } } } } //----- (00621BE0) -------------------------------------------------------- void __thiscall sub_621BE0(int this) { int v1; // eax v1 = *(_DWORD *)(*(_DWORD *)(this + 296) + 572); if ( v1 ) sub_51E7C0(*(_DWORD **)(v1 + 532), *(_WORD *)(this + 344)); } //----- (00621C10) -------------------------------------------------------- _DWORD *__thiscall sub_621C10(_DWORD **this, __int16 a2) { _DWORD *result; // eax _DWORD *v3; // edi int *v4; // esi _DWORD **v5; // [esp+4h] [ebp-Ch] _DWORD **v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v6 = this; v5 = (_DWORD **)sub_6CD770(); LOBYTE(v7) = 0; result = sub_6CF210(); if ( result ) { v3 = (_DWORD *)dword_AB76B8; if ( dword_AB76B8 ) { while ( 1 ) { v4 = (int *)v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { if ( *(_WORD *)(*v4 + 4) == a2 && (sub_74BA80(v5, *(_WORD *)(*v4 + 4)) == 6 || (unsigned __int8)sub_6CE8A0(*v4) == 1) ) { break; } } if ( !v3 ) goto LABEL_10; } LOBYTE(v7) = 1; } LABEL_10: (*(void (__stdcall **)(int))(*v6[195] + 256))(v7); result = (_DWORD *)(*(int (__stdcall **)(int))(*v6[196] + 256))(v7); } return result; } // AB76B8: using guessed type int dword_AB76B8; //----- (00621D10) -------------------------------------------------------- char __thiscall sub_621D10(_DWORD *this, int a2) { if ( !a2 ) return 0; sub_62AF10(this + 210, &a2); return 1; } //----- (00621D40) -------------------------------------------------------- char __thiscall sub_621D40(int this, int a2) { int v2; // esi unsigned int v3; // edi int v4; // eax bool v5; // zf _DWORD *v6; // eax _DWORD *v7; // eax v2 = this; v3 = 0; *(float *)(this + 864) = flt_ACCFD0 + flt_ACCFD0 + *(float *)(this + 864); if ( *(_DWORD *)(this + 852) ) { do { if ( *(float *)(v2 + 864) < 2.0 ) { if ( *(float *)(v2 + 864) >= 1.0 ) { v7 = (_DWORD *)(*(_DWORD *)(v2 + 844) + 4 * v3); if ( *v7 ) (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)*v7 + 492))(*v7, 2); } } else { v4 = *(_DWORD *)(v2 + 844); v5 = *(_DWORD *)(v4 + 4 * v3) == 0; v6 = (_DWORD *)(v4 + 4 * v3); if ( !v5 ) (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*v6 + 492))(*v6, 0); *(float *)(v2 + 864) = 0.0; } ++v3; } while ( v3 < *(_DWORD *)(v2 + 852) ); } return 1; } // ACCFD0: using guessed type float flt_ACCFD0; //----- (00621DE0) -------------------------------------------------------- _DWORD *__thiscall sub_621DE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax signed int v3; // edx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &EpicQuestWin::`vftable'; v1[58] = &EpicQuestWin::`vftable'; v1[154] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; v1[155] = 1; v2 = v1 + 99; v3 = 13; do { *(v2 - 13) = 0; *v2 = 0; v2[13] = 0; v2[26] = 0; v2[39] = 0; ++v2; --v3; } while ( v3 ); v1[160] = 0; v1[161] = 0; v1[162] = -1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F02B0: using guessed type void *EpicQuestWin::`vftable'; // 9F02CC: using guessed type void *EpicQuestWin::`vftable'; //----- (00621EF0) -------------------------------------------------------- int sub_621EF0() { _DWORD *v0; // eax _DWORD *v1; // edi signed int v2; // ebx int v3; // eax int v4; // esi int v5; // eax int v6; // esi _DWORD **v8; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v0 = sub_6CD770(); v1 = (_DWORD *)v0[1]; v8 = (_DWORD **)v0; v9 = 0; if ( !v1 ) return 0; v2 = 0; if ( (unsigned __int16)sub_53DA30(v1) <= 0u ) return 0; do { v3 = sub_74E2E0(v1, v2); v4 = v3; v5 = sub_74BA80(v8, *(_WORD *)(v3 + 4)); if ( v5 == 9 || v5 >= 4 && (v5 <= 5 || v5 == 20) && (v6 = *(unsigned __int8 *)(v4 + 27), sub_680890((unsigned __int8 *)byte_AD9238) - v6 <= 5) ) { ++v9; } ++v2; } while ( v2 < (unsigned __int16)sub_53DA30(v1) ); return v9; } //----- (00621F90) -------------------------------------------------------- int __thiscall sub_621F90(_DWORD *this) { _DWORD *v1; // eax _DWORD *v2; // edi int v3; // esi signed int v4; // ebx int v5; // esi char v6; // al char v7; // al _DWORD *v9; // [esp+8h] [ebp-10h] _DWORD **v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] int v12; // [esp+14h] [ebp-4h] v9 = this; v1 = sub_6CD770(); v2 = (_DWORD *)v1[1]; v3 = 0; v10 = (_DWORD **)v1; v12 = 0; v11 = 0; if ( v2 ) { v4 = 0; if ( (unsigned __int16)sub_53DA30(v2) > 0u ) { do { v5 = sub_74E2E0(v2, v4); if ( sub_74BA80(v10, *(_WORD *)(v5 + 4)) == 2 ) { v6 = *(_BYTE *)(v5 + 17); if ( v6 == 6 || v6 == 7 ) ++v12; } v7 = *(_BYTE *)(v5 + 17); if ( v7 == 6 || v7 == 7 ) ++v11; ++v4; } while ( v4 < (unsigned __int16)sub_53DA30(v2) ); v3 = v12; } } v9[161] = v3; v9[160] = v11; return v3; } //----- (00622080) -------------------------------------------------------- int __thiscall sub_622080(void *this, _BYTE *a2) { void *v2; // esi v2 = this; if ( (*(unsigned __int8 (__thiscall **)(void *, LONG, LONG))(*(_DWORD *)this + 332))(this, pt.x, pt.y) && (*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)v2 + 260))(v2) && !dword_BA6B9C ) { dword_BA6B9C = (int)v2; } return sub_8FE5D0(v2, a2); } // BA6B9C: using guessed type int dword_BA6B9C; //----- (006220E0) -------------------------------------------------------- char __stdcall sub_6220E0(unsigned __int16 *a1) { int v1; // eax unsigned int v2; // eax int v3; // ebx char *v4; // edi int (__thiscall ***v5)(_DWORD, signed int); // esi int *v6; // eax int v7; // edx int v8; // ecx int v9; // edx int v10; // eax float **v11; // edi int v12; // eax char *v13; // eax char *v14; // eax int v16; // [esp-10h] [ebp-80h] char v17; // [esp-Ch] [ebp-7Ch] int v18; // [esp-8h] [ebp-78h] int v19; // [esp-4h] [ebp-74h] int v20; // [esp+0h] [ebp-70h] float v21; // [esp+8h] [ebp-68h] char v22; // [esp+18h] [ebp-58h] float v23; // [esp+24h] [ebp-4Ch] float v24; // [esp+28h] [ebp-48h] float v25; // [esp+2Ch] [ebp-44h] int v26; // [esp+30h] [ebp-40h] char *v27; // [esp+34h] [ebp-3Ch] float v28; // [esp+3Ch] [ebp-34h] float v29; // [esp+40h] [ebp-30h] float v30; // [esp+44h] [ebp-2Ch] unsigned __int16 *v31; // [esp+48h] [ebp-28h] int v32; // [esp+4Ch] [ebp-24h] int v33; // [esp+50h] [ebp-20h] int v34; // [esp+54h] [ebp-1Ch] char v35; // [esp+58h] [ebp-18h] int v36; // [esp+5Ch] [ebp-14h] int v37; // [esp+60h] [ebp-10h] int v38; // [esp+64h] [ebp-Ch] char v39; // [esp+68h] [ebp-8h] LOWORD(v1) = *a1; v31 = a1; if ( (_WORD)v1 != -1 ) { v2 = sub_5701E0(v1); v1 = sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v2); v3 = v1; if ( v1 ) { if ( *(_WORD *)(v1 + 2) == *a1 ) { v4 = (char *)*sub_49F490(&v26); LOBYTE(v1) = v26; v27 = v4; if ( v26 ) { v5 = (int (__thiscall ***)(_DWORD, signed int))v26; v1 = InterlockedDecrement((volatile LONG *)(v26 + 4)); if ( !v1 ) { if ( v5 ) LOBYTE(v1) = (**v5)(v5, 1); } } if ( v4 ) { v28 = (double)*(unsigned int *)(v3 + 16); v29 = (double)*(unsigned int *)(v3 + 20); v30 = 0.0; v24 = v29; v23 = v28; v25 = 0.0; (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v28); v6 = sub_439D70(byte_ADB468, &v22); v32 = *v6; v33 = v6[1]; v7 = v6[2]; v8 = *(_DWORD *)(v3 + 8); v36 = *(_DWORD *)(v3 + 4); v34 = v7; v9 = *(_DWORD *)(v3 + 12); v37 = v8; v35 = 0; v38 = v9; v39 = 0; v10 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v11 = *(float ***)(v10 + 1220); if ( v11 ) { sub_5E9180(*(float ***)(v10 + 1220)); v31 = (unsigned __int16 *)sub_49F370(*v31); if ( v31 ) { v12 = sub_49F8D0((_DWORD *)(v3 + 4)); if ( v12 && *(_DWORD *)(v12 + 212) == 1 ) { v21 = 1000000.0; v17 = dword_AA8CB8; v18 = dword_AA8CBC; v19 = dword_AA8CC0; v20 = dword_AA8CC4; v16 = (int)(v31 + 17); v13 = (char *)sub_40A910(1045901377); } else { v21 = 1000000.0; v17 = dword_AA8CB8; v18 = dword_AA8CBC; v19 = dword_AA8CC0; v20 = dword_AA8CC4; v16 = (int)(v31 + 17); v13 = (char *)sub_40A910(-1617112356); } v14 = sub_7549E0(v13, v16); sub_5E9030(v11, (int)v14, v17, v18, v19, v20, 0, v21); } } LOBYTE(v1) = sub_630280(v27, (int)&v28, &v23, (char *)&v32, (char *)&v36, *(_WORD *)(v3 + 2)); } } } } return v1; } // AA8CB8: using guessed type int dword_AA8CB8; // AA8CBC: using guessed type int dword_AA8CBC; // AA8CC0: using guessed type int dword_AA8CC0; // AA8CC4: using guessed type int dword_AA8CC4; // ACDA58: using guessed type int dword_ACDA58; //----- (00622330) -------------------------------------------------------- char __userpurge sub_622330@(int a1@, int a2@, signed int a3@, unsigned int a4, char a5) { int v5; // esi char result; // al int v7; // eax _DWORD **v8; // edi int v9; // ebx const CHAR *v10; // eax _DWORD **v11; // eax bool v12; // zf void (__stdcall *v13)(signed int, signed int); // eax int v14; // edi int v15; // [esp-8h] [ebp-10h] signed int v16; // [esp-4h] [ebp-Ch] int v17; // [esp+4h] [ebp-4h] int v18; // [esp+10h] [ebp+8h] v5 = a1; sub_466A50(*(_DWORD **)(a1 + 364)); result = sub_464B60(*(_DWORD **)(v5 + 368), a4, &v17); if ( result ) { v7 = v17; v16 = a3; *(_DWORD *)(v5 + 344) = v17; if ( v7 != -1 && *(_DWORD *)(v5 + 348) == 1 ) { v15 = a2; v8 = (_DWORD **)sub_6CD770(); v18 = sub_74BA80(v8, *(_WORD *)(v5 + 344)); v9 = **(_DWORD **)(v5 + 688); if ( v18 == 8 ) v10 = sub_40C190(-637277950); else v10 = sub_40C190(-284824239); (*(void (__thiscall **)(_DWORD, const CHAR *, int))(v9 + 472))(*(_DWORD *)(v5 + 688), v10, v15); if ( *(_BYTE *)(sub_74E7D0(v8[1], *(_WORD *)(v5 + 344)) + 88) || v18 != 8 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 + 700) + 240))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 240))(0); v16 = 0; } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 700) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 + 704) + 240))(1); v16 = 1; } (*(void (**)(void))(**(_DWORD **)(v5 + 704) + 256))(); } if ( *(_DWORD *)(v5 + 348) == 2 && *(_DWORD *)(v5 + 344) != -1 ) { if ( *(_BYTE *)(v5 + 752) && !a5 ) *(_BYTE *)(v5 + 752) = 0; *(_BYTE *)(v5 + 753) = a5; v11 = (_DWORD **)sub_6CD770(); v12 = *(_BYTE *)(sub_74E7D0(v11[1], *(_WORD *)(v5 + 344)) + 25) == 0; v13 = *(void (__stdcall **)(signed int, signed int))(**(_DWORD **)(v5 + 700) + 240); if ( v12 ) { v13(0, v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 700) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 256))(0); } else { v13(1, v16); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 + 700) + 256))(1); } (*(void (**)(void))(**(_DWORD **)(v5 + 688) + 256))(); } if ( *(_DWORD *)(v5 + 696) ) { sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v5 + 696)); v14 = *(_DWORD *)(v5 + 696); if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); } *(_DWORD *)(v5 + 696) = 0; } } result = sub_6275A0((char *)v5); } return result; } // 622330: could not find valid save-restore pair for ebx // 622330: could not find valid save-restore pair for edi //----- (00622590) -------------------------------------------------------- bool __thiscall sub_622590(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // ebx int v4; // eax char *v5; // edx char v6; // cl int v7; // eax const char *v8; // edx unsigned int v9; // eax char *v10; // edi char v11; // cl char v12; // cl char v13; // cl char v14; // cl int v15; // esi _DWORD *v16; // eax int v17; // eax char *v18; // eax char *v19; // eax _DWORD *v20; // ecx char *v21; // eax char *v22; // eax int v23; // eax _DWORD *v24; // ecx int v26; // [esp-8h] [ebp-A4h] int v27; // [esp-4h] [ebp-A0h] int v28; // [esp-4h] [ebp-A0h] _DWORD **v29; // [esp+Ch] [ebp-90h] int v30; // [esp+10h] [ebp-8Ch] int v31; // [esp+14h] [ebp-88h] char v32[128]; // [esp+18h] [ebp-84h] v2 = a2; v3 = this; v31 = a2; v29 = (_DWORD **)sub_6CD770(); v30 = sub_74E7D0(v29[1], *(_WORD *)a2); memset(v32, 0, 0x80u); v4 = a2 + 8; if ( *(_DWORD *)(a2 + 28) >= 0x10u ) v4 = *(_DWORD *)v4; v5 = &v32[-v4]; do { v6 = *(_BYTE *)v4; v5[v4] = *(_BYTE *)v4; ++v4; } while ( v6 ); v7 = *(_DWORD *)(a2 + 4); if ( v7 == 9 ) { v8 = sub_40A910(726497718); v9 = strlen(v8) + 1; v10 = (char *)&v31 + 3; do v11 = (v10++)[1]; while ( v11 ); LABEL_22: qmemcpy(v10, v8, v9); v2 = v31; goto LABEL_23; } if ( v7 != 6 ) { switch ( v7 ) { case 7: v8 = sub_40A910(1011256507); v9 = strlen(v8) + 1; v10 = (char *)&v31 + 3; do v14 = (v10++)[1]; while ( v14 ); break; case 5: v8 = sub_40A910(1011256507); v9 = strlen(v8) + 1; v10 = (char *)&v31 + 3; do v12 = (v10++)[1]; while ( v12 ); break; case 8: v8 = sub_40A910(860239275); v9 = strlen(v8) + 1; v10 = (char *)&v31 + 3; do v13 = (v10++)[1]; while ( v13 ); break; default: goto LABEL_23; } goto LABEL_22; } LABEL_23: v15 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v3[92], v32); v16 = (_DWORD *)(v2 + 36); if ( *(_DWORD *)(v2 + 56) >= 0x10u ) v16 = (_DWORD *)*v16; sub_4661A0((_DWORD *)v3[92], v15, 1, v16); sub_464B20((_DWORD *)v3[92], v15, *(_DWORD *)(v2 + 64)); sub_464BE0((_DWORD *)v3[92], v15, *(_DWORD *)(v2 + 68), *(_DWORD *)(v2 + 72), *(_DWORD *)(v2 + 76)); v17 = sub_680890((unsigned __int8 *)byte_AD9238); v27 = *(unsigned __int8 *)(v30 + 27); if ( v17 <= v27 + 5 ) { v21 = (char *)sub_40A910(1234924430); v22 = sub_7549E0(v21, v27); sub_4661A0((_DWORD *)v3[92], v15, 2, v22); switch ( *(_DWORD *)(v2 + 4) ) { case 6: case 7: v28 = 255; v26 = 0; goto LABEL_34; case 9: sub_464BE0((_DWORD *)v3[92], v15, 252, 129, 236); break; case 0xA: sub_464BE0((_DWORD *)v3[92], v15, 68, 255, 142); break; default: v28 = 0; v26 = 255; LABEL_34: sub_464BE0((_DWORD *)v3[92], v15, 255, v26, v28); break; } v23 = sub_74BA80(v29, *(_WORD *)v2); v24 = (_DWORD *)v3[92]; if ( v23 == 8 ) sub_464C80(v24, v15, 1u, 255, 0, 0); else sub_464C80(v24, v15, 1u, 255, 255, 0); if ( *(_DWORD *)(v2 + 4) == 10 ) goto LABEL_39; } else { v18 = (char *)sub_40A910(1234924430); v19 = sub_7549E0(v18, v27); sub_4661A0((_DWORD *)v3[92], v15, 2, v19); v20 = (_DWORD *)v3[92]; if ( *(_DWORD *)(v2 + 4) == 10 ) { sub_464BE0(v20, v15, 68, 255, 142); LABEL_39: sub_464C80((_DWORD *)v3[92], v15, 1u, 68, 255, 142); return v3[86] == *(_DWORD *)v2; } sub_464BE0(v20, v15, 212, 111, 11); sub_464C80((_DWORD *)v3[92], v15, 1u, 212, 111, 11); } return v3[86] == *(_DWORD *)v2; } // 622590: using guessed type char var_84[128]; //----- (006228C0) -------------------------------------------------------- int __thiscall sub_6228C0(_DWORD **this) { _DWORD **v1; // ebx _DWORD *v2; // ecx int v3; // eax int v4; // edi int v5; // esi int v6; // edi _DWORD **v7; // eax int v8; // eax void ***v9; // esi const char *v10; // eax void ***v11; // esi const char *v12; // eax void ***v13; // esi const char *v14; // eax void ***v15; // esi const char *v16; // eax void ***v17; // esi const char *v18; // eax void ***v19; // esi const char *v20; // eax int v21; // esi int v22; // edi int v23; // eax int v24; // esi int v25; // ST14_4 int v26; // edx int result; // eax _DWORD **v28; // [esp+8h] [ebp-2Ch] int v29; // [esp+Ch] [ebp-28h] _DWORD **v30; // [esp+10h] [ebp-24h] int v31; // [esp+14h] [ebp-20h] void ***v32; // [esp+18h] [ebp-1Ch] void ***v33; // [esp+1Ch] [ebp-18h] void ***v34; // [esp+20h] [ebp-14h] void ***v35; // [esp+24h] [ebp-10h] void ***v36; // [esp+28h] [ebp-Ch] void ***v37; // [esp+2Ch] [ebp-8h] int v38; // [esp+30h] [ebp-4h] v1 = this; sub_6216C0(this); v2 = v1[92]; v3 = v2[75] - v2[74]; v4 = 0; v38 = 0; if ( (signed int)(v3 & 0xFFFFFFFC) > 0 ) { v30 = v1 + 178; v32 = (void ***)(v1 + 151); v33 = (void ***)(v1 + 141); v34 = (void ***)(v1 + 131); v35 = (void ***)(v1 + 121); v36 = (void ***)(v1 + 111); v37 = (void ***)(v1 + 101); while ( 1 ) { v5 = sub_517CC0(v2, v4, 3u); v6 = sub_517D50(v1[92], v4, 3u); if ( sub_464B60(v1[92], v38 + v1[92][86], &v29) ) { v7 = (_DWORD **)sub_6CD770(); v28 = v7; v8 = sub_74E7D0(v7[1], v29); v31 = v8; if ( v8 ) { switch ( *(unsigned __int8 *)(v8 + 17) ) { case 0u: case 5u: case 8u: (*((void (__stdcall **)(signed int))**v37 + 64))(1); (*((void (__stdcall **)(int))**v37 + 43))(v5); v9 = v37; (*((void (__stdcall **)(int))**v37 + 44))(v6); (*((void (__stdcall **)(signed int))**v9 + 60))(1); (*v9)[68] = (void *)dword_AD01E8; v10 = sub_40A910(-656085514); sub_8F2EA0(*v9, v10); v37 = v9 + 1; break; case 1u: case 6u: case 7u: (*((void (__stdcall **)(signed int))**v36 + 64))(1); (*((void (__stdcall **)(int))**v36 + 43))(v5); v11 = v36; (*((void (__stdcall **)(int))**v36 + 44))(v6); (*((void (__stdcall **)(signed int))**v11 + 60))(1); (*v11)[68] = (void *)dword_AD01E8; v12 = sub_40A910(-1919228947); sub_8F2EA0(*v11, v12); v36 = v11 + 1; break; case 2u: (*((void (__stdcall **)(signed int))**v35 + 64))(1); (*((void (__stdcall **)(int))**v35 + 43))(v5); v13 = v35; (*((void (__stdcall **)(int))**v35 + 44))(v6); (*((void (__stdcall **)(signed int))**v13 + 60))(1); (*v13)[68] = (void *)dword_AD01E8; v14 = sub_40A910(-1981025307); sub_8F2EA0(*v13, v14); v35 = v13 + 1; break; case 3u: (*((void (__stdcall **)(signed int))**v34 + 64))(1); (*((void (__stdcall **)(int))**v34 + 43))(v5); v15 = v34; (*((void (__stdcall **)(int))**v34 + 44))(v6); (*((void (__stdcall **)(signed int))**v15 + 60))(1); (*v15)[68] = (void *)dword_AD01E8; v16 = sub_40A910(-1813057815); sub_8F2EA0(*v15, v16); v34 = v15 + 1; break; case 4u: case 9u: (*((void (__stdcall **)(signed int))**v33 + 64))(1); (*((void (__stdcall **)(int))**v33 + 43))(v5); v17 = v33; (*((void (__stdcall **)(int))**v33 + 44))(v6); (*((void (__stdcall **)(signed int))**v17 + 60))(1); (*v17)[68] = (void *)dword_AD01E8; v18 = sub_40A910(-2048135195); sub_8F2EA0(*v17, v18); v33 = v17 + 1; break; case 0xAu: (*((void (__stdcall **)(signed int))**v32 + 64))(1); (*((void (__stdcall **)(int))**v32 + 43))(v5); v19 = v32; (*((void (__stdcall **)(int))**v32 + 44))(v6); (*((void (__stdcall **)(signed int))**v19 + 60))(1); (*v19)[68] = (void *)dword_AD01E8; v20 = sub_40A910(-454695703); sub_8F2EA0(*v19, v20); v32 = v19 + 1; break; default: break; } if ( sub_74BA80(v28, *(_WORD *)(v31 + 4)) == 5 && (v1[86] != (_DWORD *)*(unsigned __int16 *)(v31 + 4) || *((_BYTE *)v1 + 753)) ) { v21 = v38; v22 = sub_517CC0(v1[92], v38, 1u); v23 = sub_517D50(v1[92], v21, 1u); v24 = (int)v30; v25 = v23; (*(void (__stdcall **)(signed int))(**v30 + 256))(1); (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 172))(v22); (*(void (__stdcall **)(int))(**(_DWORD **)v24 + 176))(v25); v30 = (_DWORD **)(v24 + 4); } } } v2 = v1[92]; v26 = (v2[75] - v2[74]) >> 2; if ( ++v38 >= v26 ) break; v4 = v38; } } if ( *((_BYTE *)v1 + 752) ) result = (*(int (__stdcall **)(signed int))(*v1[177] + 256))(1); else result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1[177] + 256))(v1[177], 0); return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (00622D40) -------------------------------------------------------- LONG __thiscall sub_622D40(_DWORD *this, int a2, int a3) { void *v3; // eax int i; // eax char *v5; // ebx int v6; // eax int v7; // eax int v8; // ecx int v9; // edx int v10; // eax _DWORD *v11; // esi double v12; // st7 char *j; // esi double v14; // st7 _DWORD *v16; // [esp+18h] [ebp-3A8h] char *v17; // [esp+1Ch] [ebp-3A4h] size_t v18; // [esp+20h] [ebp-3A0h] _DWORD *v19; // [esp+24h] [ebp-39Ch] BYTE TestChar; // [esp+28h] [ebp-398h] int v21; // [esp+2Ch] [ebp-394h] char v22; // [esp+30h] [ebp-390h] char v23; // [esp+1B0h] [ebp-210h] char v24; // [esp+1B1h] [ebp-20Fh] char v25; // [esp+2B0h] [ebp-110h] char v26; // [esp+2B1h] [ebp-10Fh] int v27; // [esp+3BCh] [ebp-4h] v19 = this; sub_8FFFC0(&v22); v27 = 0; v25 = 0; memset(&v26, 0, 0xFFu); v23 = 0; memset(&v24, 0, 0xFFu); unknown_libname_14(&TestChar); v3 = sub_6CD770(); sub_6CE010(&TestChar, (int)v3, a2); for ( i = sub_6CE0D0((int)&TestChar, (int)&v17); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&v17) ) { if ( !i ) { v5 = sub_7549E0(0); strncpy(v5, v17, v18); v6 = (int)v19; v5[v18] = 0; v7 = *(_DWORD *)(v6 + 364); v8 = (*(_DWORD *)(v7 + 300) - *(_DWORD *)(v7 + 296)) >> 2; if ( v8 ) { v9 = *(_DWORD *)(v7 + 296); v10 = (*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0; v21 = v10; v8 = v10; } else { v21 = 0; } v11 = *(_DWORD **)(*(_DWORD *)(v8 + 288) + 312); v16 = v11; if ( v11 ) { v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284; for ( j = sub_900720(v11, v5, (signed int)v12, 0); j; j = sub_900720( v16, j, (signed int)v14, (unsigned int)&v23) ) { strncpy(&v25, v5, j - v5); *(&v25 + j - v5) = 0; if ( a3 ) sprintf(&v23, "%s%s", a3, &v25); else sprintf(&v23, "%s", &v25); ((void (__thiscall *)(_DWORD))loc_466CA0)(v19[91]); v5 = j; v14 = (double)(unsigned int)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)v21 + 144))(0) / 1.049999952316284; } } } } v27 = -1; return sub_900160(&v22); } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); //----- (00623000) -------------------------------------------------------- void __thiscall sub_623000(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax int v4; // edi int v5; // eax _DWORD *v6; // eax unsigned int v7; // edi int v8; // eax int v9; // ecx int v10; // edi unsigned int v11; // ebx _DWORD *v12; // ecx _DWORD *v13; // ecx int v14; // edi int v15; // eax int v16; // ST18_4 int v17; // ST14_4 int v18; // ecx int v19; // edi int v20; // eax int v21; // [esp+Ch] [ebp-Ch] int *v22; // [esp+10h] [ebp-8h] int v23; // [esp+14h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[95]; if ( v2 ) { v3 = v1[91]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); v4 = *(_DWORD *)(v1[95] + 300); *(_DWORD *)(v1[91] + 344) = v4; sub_465130((_DWORD *)v1[91]); v5 = v1[194]; if ( v4 + 1 == *(_DWORD *)(v1[95] + 296) ) { if ( v5 ) *(_WORD *)(v5 + 28) &= 0xFFFEu; } else if ( v5 ) { *(_WORD *)(v5 + 28) |= 1u; } v6 = (_DWORD *)v1[91]; v7 = 0; if ( v6[83] > 0 ) { do { if ( v7 < (v6[75] - v6[74]) >> 2 ) { v8 = *(_DWORD *)(v6[74] + 4 * v7); if ( (*(_DWORD *)(v8 + 336) - *(_DWORD *)(v8 + 332)) >> 2 ) { v9 = **(_DWORD **)(v8 + 332); if ( v9 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 172))(0); } } v6 = (_DWORD *)v1[91]; ++v7; } while ( (signed int)v7 < v6[83] ); } v10 = (int)(v1 + 197); v11 = 10; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v10 + 256))(0); v10 += 4; --v11; } while ( v11 ); v12 = (_DWORD *)v1[91]; v21 = v12[86]; if ( (signed int)((v12[75] - v12[74]) & 0xFFFFFFFC) > 0 ) { do { v23 = -1; sub_464B60(v12, v11 + v21, &v23); if ( (unsigned int)(v23 - 1) <= 9 ) { v13 = (_DWORD *)v1[91]; v14 = v23 - 1; if ( v11 < (v13[75] - v13[74]) >> 2 ) { v15 = *(_DWORD *)(v13[74] + 4 * v11); if ( (*(_DWORD *)(v15 + 336) - *(_DWORD *)(v15 + 332)) >> 2 ) { v22 = **(int ***)(v15 + 332); if ( v22 ) { v16 = sub_517CC0(v13, v11, 0); v17 = sub_517D50((_DWORD *)v1[91], v11, 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[v14 + 197] + 240))(*((unsigned __int8 *)v1 + v14 + 828)); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[v14 + 197] + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v1[v14 + 197] + 172))(v16); (*(void (__stdcall **)(int))(*(_DWORD *)v1[v14 + 197] + 176))(v17); v18 = v1[v14 + 197]; v19 = *v22; v20 = (*(int (**)(void))(*(_DWORD *)v18 + 144))(); (*(void (__thiscall **)(int *, int))(v19 + 172))(v22, v20); } } } } v12 = (_DWORD *)v1[91]; ++v11; } while ( (signed int)v11 < (v12[75] - v12[74]) >> 2 ); } } } } //----- (00623280) -------------------------------------------------------- int __userpurge sub_623280@(int a1@, int a2@, int a3@, int a4) { int result; // eax int v5; // esi _DWORD **v6; // edi int v7; // ebx const CHAR *v8; // eax int v9; // [esp-8h] [ebp-Ch] int v10; // [esp-4h] [ebp-8h] int v11; // [esp+Ch] [ebp+8h] result = a4; v5 = a1; byte_AD0C44 = 1; *(_DWORD *)(a1 + 344) = a4; if ( a4 != -1 ) { v10 = a2; v9 = a3; v6 = (_DWORD **)sub_6CD770(); v7 = sub_74BA80(v6, *(_WORD *)(v5 + 344)); if ( v7 == 8 ) { v11 = **(_DWORD **)(v5 + 688); v8 = sub_40C190(-637277950); } else { v11 = **(_DWORD **)(v5 + 688); v8 = sub_40C190(-284824239); } (*(void (__thiscall **)(_DWORD, const CHAR *, int, int))(v11 + 472))(*(_DWORD *)(v5 + 688), v8, v9, v10); if ( *(_BYTE *)(sub_74E7D0(v6[1], *(_WORD *)(v5 + 344)) + 88) || v7 != 8 ) { (*(void (__cdecl **)(signed int))(**(_DWORD **)(v5 + 700) + 240))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 704) + 240))(0); } else { (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v5 + 700) + 240))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 + 704) + 240))(1); } result = (*(int (**)(void))(**(_DWORD **)(v5 + 704) + 256))(); } return result; } // 623280: could not find valid save-restore pair for ebx // 623280: could not find valid save-restore pair for edi // AD0C44: using guessed type char byte_AD0C44; //----- (006233A0) -------------------------------------------------------- void __thiscall sub_6233A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[159]; if ( v2 ) { v3 = v1[157]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[157] + 344) = *(_DWORD *)(v1[159] + 300); sub_465130((_DWORD *)v1[157]); } } } //----- (006233F0) -------------------------------------------------------- bool __thiscall sub_6233F0(_DWORD *this, int a2) { int *v2; // edi _DWORD *v3; // ebx int v4; // eax char *v5; // edx char v6; // cl int v7; // eax const char *v8; // edx unsigned int v9; // eax char *v10; // edi char v11; // cl char v12; // cl char v13; // cl char v14; // cl int v15; // esi int v16; // edi char *v17; // eax char *v18; // eax int v19; // eax int v20; // ecx char *v21; // eax char *v22; // eax char *v23; // eax char *v24; // eax int *v25; // edi signed int v26; // eax int v27; // eax _DWORD *v28; // ecx char *v29; // eax char *v30; // eax int v32; // [esp-8h] [ebp-A8h] int v33; // [esp-4h] [ebp-A4h] _DWORD **v34; // [esp+Ch] [ebp-94h] int v35; // [esp+10h] [ebp-90h] int v36; // [esp+14h] [ebp-8Ch] int *v37; // [esp+18h] [ebp-88h] char v38[128]; // [esp+1Ch] [ebp-84h] v2 = (int *)a2; v3 = this; v37 = (int *)a2; v34 = (_DWORD **)sub_6CD770(); v36 = sub_74E7D0(v34[1], *(_WORD *)a2); memset(v38, 0, 0x80u); v4 = a2 + 8; if ( *(_DWORD *)(a2 + 28) >= 0x10u ) v4 = *(_DWORD *)v4; v5 = &v38[-v4]; do { v6 = *(_BYTE *)v4; v5[v4] = *(_BYTE *)v4; ++v4; } while ( v6 ); v7 = *(_DWORD *)(a2 + 4); if ( v7 == 9 ) { v8 = sub_40A910(726497718); v9 = strlen(v8) + 1; v10 = (char *)&v37 + 3; do v11 = (v10++)[1]; while ( v11 ); LABEL_22: qmemcpy(v10, v8, v9); v2 = v37; goto LABEL_23; } if ( v7 != 6 ) { switch ( v7 ) { case 7: v8 = sub_40A910(1011256507); v9 = strlen(v8) + 1; v10 = (char *)&v37 + 3; do v14 = (v10++)[1]; while ( v14 ); break; case 5: v8 = sub_40A910(1011256507); v9 = strlen(v8) + 1; v10 = (char *)&v37 + 3; do v12 = (v10++)[1]; while ( v12 ); break; case 8: v8 = sub_40A910(860239275); v9 = strlen(v8) + 1; v10 = (char *)&v37 + 3; do v13 = (v10++)[1]; while ( v13 ); break; default: goto LABEL_23; } goto LABEL_22; } LABEL_23: v15 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v3[156], v38); sub_464B20((_DWORD *)v3[156], v15, v2[9]); sub_464BE0((_DWORD *)v3[156], v15, v2[10], v2[11], v2[12]); v16 = *(unsigned __int8 *)(v36 + 27); v35 = sub_680890((unsigned __int8 *)byte_AD9238); v17 = (char *)sub_40A910(1234924430); v18 = sub_7549E0(v17, v16); sub_4661A0((_DWORD *)v3[156], v15, 2, v18); v19 = v16 + 5; if ( v35 > v16 + 5 ) { sub_464BE0((_DWORD *)v3[156], v15, 212, 111, 11); v19 = v16 + 5; } v20 = v3[155]; if ( v20 == 1 ) { if ( v35 > v19 ) { v21 = (char *)sub_40A910(1234924430); v22 = sub_7549E0(v21, v16); sub_4661A0((_DWORD *)v3[156], v15, 2, v22); sub_464BE0((_DWORD *)v3[156], v15, 212, 111, 11); sub_464C80((_DWORD *)v3[156], v15, 1u, 212, 111, 11); return v3[162] == *v37; } v23 = (char *)sub_40A910(1234924430); v24 = sub_7549E0(v23, v16); sub_4661A0((_DWORD *)v3[156], v15, 2, v24); v25 = v37; v26 = v37[1]; if ( v26 >= 6 ) { if ( v26 <= 7 ) { v33 = 255; v32 = 0; LABEL_34: sub_464BE0((_DWORD *)v3[156], v15, 255, v32, v33); LABEL_35: v27 = sub_74BA80(v34, *(_WORD *)v25); v28 = (_DWORD *)v3[156]; if ( v27 == 8 ) sub_464C80(v28, v15, 1u, 255, 0, 0); else sub_464C80(v28, v15, 1u, 255, 255, 0); return v3[162] == *v37; } if ( v26 == 9 ) { sub_464BE0((_DWORD *)v3[156], v15, 252, 129, 236); goto LABEL_35; } } v33 = 0; v32 = 255; goto LABEL_34; } if ( !v20 ) { v29 = (char *)sub_40A910(1234924430); v30 = sub_7549E0(v29, v16); sub_4661A0((_DWORD *)v3[156], v15, 2, v30); if ( v35 > v16 + 5 ) sub_464BE0((_DWORD *)v3[156], v15, 212, 111, 11); } return v3[162] == *v37; } // 6233F0: using guessed type char var_84[128]; //----- (00623790) -------------------------------------------------------- LONG __thiscall sub_623790(_DWORD *this, int a2, int a3) { void *v3; // eax int i; // eax char *v5; // ebx int v6; // eax int v7; // eax int v8; // ecx int v9; // edx int v10; // eax _DWORD *v11; // esi double v12; // st7 char *j; // esi double v14; // st7 _DWORD *v16; // [esp+18h] [ebp-3A8h] char *v17; // [esp+1Ch] [ebp-3A4h] size_t v18; // [esp+20h] [ebp-3A0h] _DWORD *v19; // [esp+24h] [ebp-39Ch] BYTE TestChar; // [esp+28h] [ebp-398h] int v21; // [esp+2Ch] [ebp-394h] char v22; // [esp+30h] [ebp-390h] char v23; // [esp+1B0h] [ebp-210h] char v24; // [esp+1B1h] [ebp-20Fh] char v25; // [esp+2B0h] [ebp-110h] char v26; // [esp+2B1h] [ebp-10Fh] int v27; // [esp+3BCh] [ebp-4h] v19 = this; sub_8FFFC0(&v22); v27 = 0; v25 = 0; memset(&v26, 0, 0xFFu); v23 = 0; memset(&v24, 0, 0xFFu); unknown_libname_14(&TestChar); v3 = sub_6CD770(); sub_6CE010(&TestChar, (int)v3, a2); for ( i = sub_6CE0D0((int)&TestChar, (int)&v17); i != 11; i = sub_6CE0D0((int)&TestChar, (int)&v17) ) { if ( !i ) { v5 = sub_7549E0(0); strncpy(v5, v17, v18); v6 = (int)v19; v5[v18] = 0; v7 = *(_DWORD *)(v6 + 628); v8 = (*(_DWORD *)(v7 + 300) - *(_DWORD *)(v7 + 296)) >> 2; if ( v8 ) { v9 = *(_DWORD *)(v7 + 296); v10 = (*(_DWORD *)(*(_DWORD *)v9 + 336) - *(_DWORD *)(*(_DWORD *)v9 + 332)) >> 2 ? **(_DWORD **)(*(_DWORD *)v9 + 332) : 0; v21 = v10; v8 = v10; } else { v21 = 0; } v11 = *(_DWORD **)(*(_DWORD *)(v8 + 288) + 312); v16 = v11; if ( v11 ) { v12 = (double)(unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 144))() / 1.049999952316284; for ( j = sub_900720(v11, v5, (signed int)v12, 0); j; j = sub_900720( v16, j, (signed int)v14, (unsigned int)&v23) ) { strncpy(&v25, v5, j - v5); *(&v25 + j - v5) = 0; if ( a3 ) sprintf(&v23, "%s%s", a3, &v25); else sprintf(&v23, "%s", &v25); ((void (__thiscall *)(_DWORD))loc_466CA0)(v19[157]); v5 = j; v14 = (double)(unsigned int)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)v21 + 144))(0) / 1.049999952316284; } } } } v27 = -1; return sub_900160(&v22); } // 6CE000: using guessed type int __thiscall unknown_libname_14(_DWORD); //----- (00623A50) -------------------------------------------------------- int __thiscall sub_623A50(_DWORD **this) { int v1; // edi _DWORD *v2; // ecx int result; // eax void ***v4; // ebx int v5; // esi int v6; // edi _DWORD **v7; // eax int v8; // eax void ***v9; // esi const char *v10; // eax void ***v11; // esi const char *v12; // eax void ***v13; // esi const char *v14; // eax void ***v15; // esi const char *v16; // eax const char *v17; // eax int v18; // edx int v19; // [esp+4h] [ebp-1Ch] _DWORD **v20; // [esp+8h] [ebp-18h] void ***v21; // [esp+Ch] [ebp-14h] void ***v22; // [esp+10h] [ebp-10h] void ***v23; // [esp+14h] [ebp-Ch] void ***v24; // [esp+18h] [ebp-8h] int v25; // [esp+1Ch] [ebp-4h] v1 = (int)this; v20 = this; sub_6219C0(this); v2 = *(_DWORD **)(v1 + 624); result = v2[75] - v2[74]; v25 = 0; if ( (signed int)(result & 0xFFFFFFFC) > 0 ) { v21 = (void ***)(v1 + 500); v22 = (void ***)(v1 + 448); v4 = (void ***)(v1 + 552); v23 = (void ***)(v1 + 396); v24 = (void ***)(v1 + 344); while ( 1 ) { v5 = sub_517CC0(v2, v25, 1u); v6 = sub_517D50(*(_DWORD **)(v1 + 624), v25, 1u); if ( sub_464B60(v20[156], v25 + v20[156][86], &v19) ) { v7 = (_DWORD **)sub_6CD770(); v8 = sub_74E7D0(v7[1], v19); if ( v8 ) { switch ( *(unsigned __int8 *)(v8 + 17) ) { case 0u: case 5u: case 8u: (*((void (__stdcall **)(signed int))**v24 + 64))(1); (*((void (__stdcall **)(int))**v24 + 43))(v5); v9 = v24; (*((void (__stdcall **)(int))**v24 + 44))(v6); (*((void (__stdcall **)(signed int))**v9 + 60))(1); (*v9)[68] = (void *)dword_AD01E8; v10 = sub_40A910(-656085514); sub_8F2EA0(*v9, v10); v24 = v9 + 1; break; case 1u: case 6u: case 7u: (*((void (__stdcall **)(signed int))**v23 + 64))(1); (*((void (__stdcall **)(int))**v23 + 43))(v5); v11 = v23; (*((void (__stdcall **)(int))**v23 + 44))(v6); (*((void (__stdcall **)(signed int))**v11 + 60))(1); (*v11)[68] = (void *)dword_AD01E8; v12 = sub_40A910(-1919228947); sub_8F2EA0(*v11, v12); v23 = v11 + 1; break; case 2u: (*((void (__stdcall **)(signed int))**v22 + 64))(1); (*((void (__stdcall **)(int))**v22 + 43))(v5); v13 = v22; (*((void (__stdcall **)(int))**v22 + 44))(v6); (*((void (__stdcall **)(signed int))**v13 + 60))(1); (*v13)[68] = (void *)dword_AD01E8; v14 = sub_40A910(-1981025307); sub_8F2EA0(*v13, v14); v22 = v13 + 1; break; case 3u: (*((void (__stdcall **)(signed int))**v21 + 64))(1); (*((void (__stdcall **)(int))**v21 + 43))(v5); v15 = v21; (*((void (__stdcall **)(int))**v21 + 44))(v6); (*((void (__stdcall **)(signed int))**v15 + 60))(1); (*v15)[68] = (void *)dword_AD01E8; v16 = sub_40A910(-1813057815); sub_8F2EA0(*v15, v16); v21 = v15 + 1; break; case 4u: case 9u: (*((void (__stdcall **)(signed int))**v4 + 64))(1); (*((void (__stdcall **)(int))**v4 + 43))(v5); (*((void (__stdcall **)(int))**v4 + 44))(v6); (*((void (__stdcall **)(signed int))**v4 + 60))(1); (*v4)[68] = (void *)dword_AD01E8; v17 = sub_40A910(-2048135195); sub_8F2EA0(*v4, v17); ++v4; break; default: break; } } } v2 = v20[156]; result = v25 + 1; v18 = (v2[75] - v2[74]) >> 2; v25 = result; if ( result >= v18 ) break; v1 = (int)v20; } } return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (00623DF0) -------------------------------------------------------- char __thiscall sub_623DF0(_DWORD *this, int a2) { _DWORD *v3; // esi unsigned int v4; // edi if ( !a2 ) return 0; v3 = this + 210; v4 = this[213]; if ( v4 >= this[212] ) sub_6AA490(this + 210, v4 + this[215]); sub_823870(v3, v4, &a2); return 1; } //----- (00623E80) -------------------------------------------------------- void __thiscall sub_623E80(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[94]; if ( v2 ) { v3 = v1[92]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[92] + 344) = *(_DWORD *)(v1[94] + 300); sub_465130((_DWORD *)v1[92]); sub_6228C0((_DWORD **)v1); } } } //----- (00623ED0) -------------------------------------------------------- void __thiscall sub_623ED0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[158]; if ( v2 ) { v3 = v1[156]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[156] + 344) = *(_DWORD *)(v1[158] + 300); sub_465130((_DWORD *)v1[156]); sub_623A50((_DWORD **)v1); } } } //----- (00623F20) -------------------------------------------------------- void __thiscall sub_623F20(int this) { int v1; // esi _DWORD **v2; // eax int v3; // eax int v4; // ebx char *v5; // eax volatile LONG *v6; // eax int v7; // edx int v8; // eax int v9; // eax int v10; // eax _DWORD *v11; // eax char v12; // [esp+4h] [ebp-20h] int v13; // [esp+8h] [ebp-1Ch] char v14; // [esp+Ch] [ebp-18h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] int v17; // [esp+1Ch] [ebp-8h] v1 = this; if ( *(_DWORD *)(this + 344) >= 0 && sub_464700(*(_DWORD **)(this + 368)) ) { v2 = (_DWORD **)sub_6CD770(); v3 = sub_74BA80(v2, *(_WORD *)(v1 + 344)); v4 = v3; if ( !*(_DWORD *)(v1 + 696) && *(_DWORD *)(v1 + 348) == 1 && v3 != 8 ) { v5 = (char *)sub_40C190(-1954049380); v6 = sub_462CA0(2, v5); sub_56FF80((_DWORD *)(v1 + 696), (int)v6); v7 = *(_DWORD *)(v1 + 344); v8 = *(_DWORD *)(v1 + 348); v15 = 260; v17 = v7; v16 = v8; v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760(*(_DWORD **)(v1 + 696), v9, &v14, 0); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v1 + 696) + 232))(*(_DWORD *)(v1 + 696) + 232, v1 + 232); } v10 = *(_DWORD *)(v1 + 348); if ( v10 == 2 ) goto LABEL_16; if ( v4 != 8 ) return; if ( v10 == 2 ) { LABEL_16: v13 = *(unsigned __int16 *)(v1 + 344); if ( *sub_61E770((_DWORD *)(v1 + 756), (int **)&v12, &v13) != *(int **)(v1 + 760) ) *(_BYTE *)(v1 + 752) = 0; } v11 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v11 ) sub_4BF200(v11, *(_WORD *)(v1 + 344)); } } //----- (00624080) -------------------------------------------------------- volatile LONG *__cdecl sub_624080(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x290u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_621DE0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006241B0) -------------------------------------------------------- int __cdecl sub_6241B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax int v8; // esi void (__thiscall ***v9)(void *, signed int); // edi int result; // eax void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v7 = operator new(0x144u); v8 = (int)v7; v11 = v7; v12 = 0; if ( v7 ) { sub_8FE000(v7); *(_DWORD *)v8 = &AutoRunBut::`vftable'; *(_DWORD *)(v8 + 232) = &AutoRunBut::`vftable'; } else { v8 = 0; } if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v12 = 1; sub_403790(&unk_BA6B10, v8); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)v8 + 548))( v8, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 356))(v8); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = v8; } else { sub_403A70(&unk_BA6B10, &v11, (_DWORD *)v8); if ( v11 ) { v9 = (void (__thiscall ***)(void *, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)v11 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = 0; } return result; } // 9F0054: using guessed type void *AutoRunBut::`vftable'; // 9F0074: using guessed type void *AutoRunBut::`vftable'; //----- (00624310) -------------------------------------------------------- LONG __thiscall sub_624310(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi void *v4; // ST0C_4 int v5; // edi _DWORD *v6; // ST0C_4 _DWORD *v7; // ST08_4 int v8; // edi char v10; // [esp+10h] [ebp-18h] _DWORD *v11; // [esp+14h] [ebp-14h] _DWORD *v12; // [esp+18h] [ebp-10h] int v13; // [esp+24h] [ebp-4h] v1 = this; v11 = this; *this = &CQuestWin2::`vftable'; this[58] = &CQuestWin2::`vftable'; v13 = 6; v2 = this + 197; v12 = (_DWORD *)10; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; v12 = (_DWORD *)((char *)v12 - 1); } while ( v12 ); v4 = (void *)v1[211]; v1[210] = &NiTArray::`vftable'; operator delete[](v4); LOBYTE(v13) = 4; `eh vector destructor iterator'(v1 + 197, 4u, 10, sub_410C00); v5 = v1[193]; LOBYTE(v13) = 3; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v12 = v1 + 189; v6 = (_DWORD *)v1[190]; v7 = *(_DWORD **)v1[190]; LOBYTE(v13) = 7; sub_61E6D0(v1 + 189, (int *)&v10, v7, v6); operator delete((void *)v1[190]); v8 = v1[174]; LOBYTE(v13) = 1; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); LOBYTE(v13) = 0; nullsub_6(v1 + 161); v13 = -1; return sub_8F10F0(v1); } // 9F02A8: using guessed type void *NiTArray::`vftable'; // 9F04F0: using guessed type void *CQuestWin2::`vftable'; // 9F050C: using guessed type void *CQuestWin2::`vftable'; //----- (00624480) -------------------------------------------------------- char *__thiscall sub_624480(char *this) { char *v1; // esi _DWORD *v2; // eax int v3; // eax char *v4; // eax signed int v5; // edi int v6; // eax char *v7; // eax void **v9; // [esp+10h] [ebp-24h] char *v10; // [esp+1Ch] [ebp-18h] char *v11; // [esp+20h] [ebp-14h] char *i; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v1 = this; v10 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v13 = 0; *(_DWORD *)v1 = &CQuestWin2::`vftable'; *((_DWORD *)v1 + 58) = &CQuestWin2::`vftable'; sub_8D06C0((float *)v1 + 161); *((_DWORD *)v1 + 174) = 0; LOBYTE(v13) = 2; *((_DWORD *)v1 + 191) = 0; v2 = operator new(0x10u); if ( !v2 ) { v11 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v11); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v1 + 190) = v2; *v2 = v2; *(_DWORD *)(*((_DWORD *)v1 + 190) + 4) = *((_DWORD *)v1 + 190); *(_DWORD *)(*((_DWORD *)v1 + 190) + 8) = *((_DWORD *)v1 + 190); *(_BYTE *)(*((_DWORD *)v1 + 190) + 14) = 1; *(_BYTE *)(*((_DWORD *)v1 + 190) + 15) = 1; *((_DWORD *)v1 + 193) = 0; LOBYTE(v13) = 4; `eh vector constructor iterator'( v1 + 788, 4u, 10, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_DWORD *)v1 + 210) = &NiTArray::`vftable'; *((_DWORD *)v1 + 212) = 0; *((_DWORD *)v1 + 215) = 1; *((_DWORD *)v1 + 213) = 0; *((_DWORD *)v1 + 214) = 0; *((_DWORD *)v1 + 211) = 0; *((float *)v1 + 216) = 0.0; *((_DWORD *)v1 + 91) = 0; *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 94) = 0; *((_DWORD *)v1 + 95) = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 97) = 0; *((_DWORD *)v1 + 99) = 0; *((_DWORD *)v1 + 100) = 0; *((_DWORD *)v1 + 86) = -1; *((_DWORD *)v1 + 87) = -1; *((_DWORD *)v1 + 88) = -1; v1[360] = 1; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 194) = 0; *((_DWORD *)v1 + 169) = 0; *((_DWORD *)v1 + 170) = 0; *((_DWORD *)v1 + 171) = 0; *((_DWORD *)v1 + 172) = 0; *((_DWORD *)v1 + 173) = 0; *((_DWORD *)v1 + 175) = 0; *((_DWORD *)v1 + 176) = 0; v3 = *((_DWORD *)v1 + 174); LOBYTE(v13) = 6; v11 = (char *)v3; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v11 ) (**(void (__stdcall ***)(signed int))v11)(1); *((_DWORD *)v1 + 174) = 0; } *((_DWORD *)v1 + 177) = 0; *((_DWORD *)v1 + 178) = 0; *((_DWORD *)v1 + 179) = 0; *((_DWORD *)v1 + 180) = 0; *((_DWORD *)v1 + 181) = 0; *((_DWORD *)v1 + 182) = 0; *((_DWORD *)v1 + 183) = 0; *((_DWORD *)v1 + 184) = 0; *((_DWORD *)v1 + 185) = 0; *((_DWORD *)v1 + 186) = 0; *((_DWORD *)v1 + 187) = 0; v1[752] = 0; v11 = *(char **)(*((_DWORD *)v1 + 190) + 4); for ( i = v11; !i[15]; v11 = i ) { sub_61E3F0(*((void **)i + 2)); i = *(char **)i; operator delete(v11); } *(_DWORD *)(*((_DWORD *)v1 + 190) + 4) = *((_DWORD *)v1 + 190); **((_DWORD **)v1 + 190) = *((_DWORD *)v1 + 190); *(_DWORD *)(*((_DWORD *)v1 + 190) + 8) = *((_DWORD *)v1 + 190); v4 = v1 + 788; *((_DWORD *)v1 + 191) = 0; v5 = 0; i = v1 + 788; do { v6 = *(_DWORD *)v4; v11 = (char *)v6; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v11 ) (**(void (__stdcall ***)(signed int))v11)(1); *(_DWORD *)i = 0; } v7 = i; v1[v5++ + 828] = 0; v4 = v7 + 4; i = v4; } while ( v5 < 10 ); return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F02A8: using guessed type void *NiTArray::`vftable'; // 9F04F0: using guessed type void *CQuestWin2::`vftable'; // 9F050C: using guessed type void *CQuestWin2::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00624770) -------------------------------------------------------- volatile LONG *__cdecl sub_624770(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x364u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_624480((char *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006248A0) -------------------------------------------------------- void __thiscall sub_6248A0(_DWORD *this, unsigned __int16 a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v4; // eax unsigned int v5; // ebx int v6; // eax int v7; // ecx _DWORD **v8; // eax _DWORD *v9; // ebx int v10; // eax int v11; // ecx int v12; // edi const CHAR *v13; // eax _DWORD *v14; // eax int v15; // edi int v16; // eax const CHAR *v17; // eax unsigned int v18; // eax CHAR *v19; // eax int v20; // ebx int v21; // edi int v22; // eax int v23; // edx void *v24; // eax int v25; // edi _DWORD *v26; // ebx int v27; // ebx int v28; // eax void (__stdcall *v29)(int, int); // edx int v30; // ebx int v31; // eax void **v32; // ebx const char *v33; // eax _DWORD *v34; // ecx int v35; // edi const CHAR *v36; // eax int v37; // edi const CHAR *v38; // eax int v39; // edi int v40; // ebx int v41; // eax int v42; // edx int v43; // ST10_4 const char *v44; // eax int v45; // edi int v46; // ebx int v47; // eax int v48; // ecx int v49; // ST10_4 const char *v50; // eax signed int v51; // eax int v52; // edi int v53; // ebx int v54; // eax int v55; // edx int v56; // edi int v57; // ebx int v58; // edx int *v59; // eax int v60; // eax char v61; // cl unsigned int v62; // ebx _DWORD *v63; // ecx int v64; // eax int v65; // eax _DWORD *v66; // ecx _DWORD **v67; // eax int v68; // edx int v69; // edi int v70; // eax unsigned int v71; // edi int v72; // edi int v73; // edx const char *v74; // eax int *v75; // edx _DWORD *v76; // ecx unsigned __int16 *v77; // eax char **v78; // edi int v79; // ebx int v80; // edx int v81; // ebx int v82; // edx int v83; // eax int v84; // eax int v85; // ecx signed int v86; // ebx int v87; // eax _DWORD *v88; // edx int v89; // eax _DWORD *v90; // eax int v91; // ecx int v92; // edx _DWORD *v93; // ecx _DWORD **v94; // ebx int v95; // ebx int v96; // ebx int (*v97)(void); // eax _DWORD *v98; // ecx unsigned int v99; // eax int v100; // eax int v101; // edx int v102; // ebx int v103; // ebx int v104; // eax char *v105; // ebx int v106; // edx int v107; // eax const char *v108; // eax _DWORD *v109; // eax int v110; // ecx int v111; // edx int v112; // ecx int v113; // ebx int v114; // ebx int v115; // ebx int (*v116)(void); // eax _DWORD *v117; // ecx unsigned int v118; // eax int v119; // eax int v120; // edx int v121; // ebx int v122; // ebx int v123; // eax int v124; // edx int v125; // eax _DWORD *v126; // ecx int v127; // edi const char *v128; // eax signed int v129; // ebx _DWORD *v130; // eax _BYTE *v131; // edi _DWORD *v132; // eax CHAR *v133; // eax int v134; // edi int v135; // ebx int v136; // edx int v137; // eax int v138; // edx int v139; // eax int k; // eax int j; // eax void *v142; // eax signed int v143; // edi int v144; // eax _DWORD *v145; // ebx int v146; // eax int v147; // eax int v148; // edx int v149; // ecx int v150; // ecx int v151; // eax int v152; // ebx _DWORD *v153; // ecx int v154; // eax int v155; // ebx char *v156; // edi int v157; // edi int v158; // eax int (__thiscall *v159)(int); // edx int v160; // eax int v161; // ebx void (__thiscall **v162)(int, int); // edi int v163; // eax void **v164; // edi const char *v165; // eax const CHAR *v166; // eax int v167; // edi _DWORD *v168; // ecx int v169; // esi _DWORD *v170; // ecx const char *v171; // [esp-10h] [ebp-1BCh] int v172; // [esp-Ch] [ebp-1B8h] int v173; // [esp-8h] [ebp-1B4h] int v174; // [esp-4h] [ebp-1B0h] int v175; // [esp-4h] [ebp-1B0h] int v176; // [esp+0h] [ebp-1ACh] void **v177; // [esp+10h] [ebp-19Ch] char v178; // [esp+1Ch] [ebp-190h] void *v179; // [esp+20h] [ebp-18Ch] int v180; // [esp+24h] [ebp-188h] int v181; // [esp+2Ch] [ebp-180h] int v182; // [esp+30h] [ebp-17Ch] int v183; // [esp+34h] [ebp-178h] int v184; // [esp+38h] [ebp-174h] int v185; // [esp+3Ch] [ebp-170h] int v186; // [esp+40h] [ebp-16Ch] _DWORD **v187; // [esp+44h] [ebp-168h] int i; // [esp+48h] [ebp-164h] int v189; // [esp+4Ch] [ebp-160h] unsigned int v190; // [esp+50h] [ebp-15Ch] char *v191; // [esp+54h] [ebp-158h] int v192; // [esp+58h] [ebp-154h] _DWORD *v193; // [esp+5Ch] [ebp-150h] __int16 v194; // [esp+60h] [ebp-14Ch] char v195; // [esp+62h] [ebp-14Ah] void *v196; // [esp+64h] [ebp-148h] int v197; // [esp+74h] [ebp-138h] unsigned int v198; // [esp+78h] [ebp-134h] void *v199; // [esp+80h] [ebp-12Ch] int v200; // [esp+90h] [ebp-11Ch] unsigned int v201; // [esp+94h] [ebp-118h] char v202; // [esp+9Ch] [ebp-110h] int v203; // [esp+1A8h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[74]; i = a2; sub_497270(v3, (void *)a2); sub_466A50((_DWORD *)v2[91]); v4 = (_DWORD *)v2[91]; v5 = 0; v186 = 0; if ( v4[83] > 0 ) { do { if ( v5 < (v4[75] - v4[74]) >> 2 ) { v6 = *(_DWORD *)(v4[74] + 4 * v5); if ( (*(_DWORD *)(v6 + 336) - *(_DWORD *)(v6 + 332)) >> 2 ) { v7 = **(_DWORD **)(v6 + 332); if ( v7 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 172))(0); } } v4 = (_DWORD *)v2[91]; ++v5; } while ( (signed int)v5 < v4[83] ); } LOBYTE(v183) = 1; if ( !sub_6F3100(35) && (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) > 0x3C ) LOBYTE(v183) = 0; v8 = (_DWORD **)sub_6CD770(); v187 = v8; if ( v8 ) { v9 = v8[1]; if ( v9 ) { v184 = sub_74A800(v8, a2); v10 = sub_74E7D0(v9, a2); v11 = v2[91]; v12 = v10; v185 = v10; ((void (__thiscall *)(int, void *))loc_466CA0)(v11, &unk_9EF5B7); v13 = sub_40C190(-1694960385); sprintf(&v202, "<%s>", v13); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); sub_622D40(v2, *(_DWORD *)(v12 + 8), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5C6); v192 = sub_74BA80(v187, *(_WORD *)(v12 + 4)); if ( v192 == 5 && !*((_BYTE *)v2 + 753) ) { v14 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v14 ) { sub_4BF250(v14, *(_WORD *)(v12 + 4)); v194 = *(_WORD *)(v12 + 4); v195 = 20; sub_74A8B0(v187, &v194); } v189 = sub_680890((unsigned __int8 *)byte_AD9238); v190 = 0; if ( (unsigned __int16)sub_53DA30(v9) <= 0u ) { LABEL_21: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[177] + 256))(0); } else { while ( 1 ) { v15 = sub_74E2E0(v9, v190); v16 = sub_74BA80(v187, *(_WORD *)(v15 + 4)); if ( (v2[87] != 2 || v189 - *(unsigned __int8 *)(v15 + 27) <= 150) && v16 == 5 ) break; if ( (signed int)++v190 >= (unsigned __int16)sub_53DA30(v9) ) goto LABEL_21; } } } if ( !*(_BYTE *)(v185 + 25) && v2[87] == 2 ) { v17 = sub_40A910(-352854964); sprintf(&v202, "<%s>", v17); v18 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); sub_464BE0((_DWORD *)v2[91], v18, 255, 255, 0); v198 = 15; v197 = 0; LOBYTE(v196) = 0; v203 = 0; v19 = (CHAR *)sub_40A910(879065258); sub_401D10((int)&v196, v19, strlen(v19)); v20 = *(unsigned __int16 *)(v185 + 30); v21 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v20) ) { if ( (unsigned __int16)v20 <= *(_WORD *)(v21 + 200) ) { v23 = *(_DWORD *)(v21 + 196); if ( *(_DWORD *)(v23 + 4 * v20) ) v22 = *(_DWORD *)(v23 + 4 * v20); else v22 = 0; } else { v22 = 0; } } else { v22 = 0; } sprintf(&v202, " %s", v22 + 34); sub_401D10((int)&v196, &v202, strlen(&v202)); v24 = v196; if ( v198 < 0x10 ) v24 = &v196; v25 = ((int (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], v24); sub_464BE0((_DWORD *)v2[91], v25, 255, 255, 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5C7); if ( v25 > 0 ) { v26 = (_DWORD *)v2[91]; if ( v25 >= v26[83] ) { (*(void (__stdcall **)(_DWORD, int))(*(_DWORD *)v2[197] + 240))(0, v176); (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2[197] + 256))(v2[197], 0); } else { v193 = (_DWORD *)sub_40A8C0(v26, v25, 0); if ( v193 ) { v27 = sub_517CC0(v26, v25, 0); v28 = sub_517D50((_DWORD *)v2[91], v25, 0); v29 = *(void (__stdcall **)(int, int))(*(_DWORD *)v2[197] + 240); v189 = v28; v29(v183, v176); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[197] + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)v2[197] + 172))(v27); (*(void (__stdcall **)(int))(*(_DWORD *)v2[197] + 176))(v189); v30 = *v193; v31 = (*(int (**)(void))(*(_DWORD *)v2[197] + 144))(); (*(void (__thiscall **)(_DWORD *, int))(v30 + 172))(v193, v31); } } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[197] + 520))(*(unsigned __int16 *)(v185 + 30)); v32 = (void **)v2[197]; if ( (_BYTE)v183 ) v33 = sub_40A910(984975493); else v33 = sub_40A910(-1985051943); sub_8F2EA0(v32, v33); *((_BYTE *)v2 + 828) = v183; v34 = (_DWORD *)v2[91]; v186 = 1; sub_464B20(v34, v25, 1); } v203 = -1; if ( v198 >= 0x10 ) operator delete(v196); } if ( (unsigned __int16)i == -1 || v2[87] != 1 ) { v37 = v185; } else { v35 = *(_DWORD *)v2[172]; if ( v192 == 8 ) v36 = sub_40C190(-637277950); else v36 = sub_40C190(-284824239); (*(void (__thiscall **)(_DWORD, const CHAR *))(v35 + 472))(v2[172], v36); v37 = v185; if ( *(_BYTE *)(v185 + 88) || v192 != 8 ) { (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[175] + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[176] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[176] + 256))(0); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[175] + 240))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[176] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[176] + 256))(1); } } v38 = sub_40C190(2056619164); sprintf(&v202, "<%s>", v38); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); if ( *(_BYTE *)(v37 + 89) ) { sprintf(&v202, "Level : %d", *(unsigned __int8 *)(v37 + 90)); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); } v190 = 0; i = (int)&v2[v186 + 197]; v192 = v37 + 98; while ( *(_BYTE *)(v192 - 6) ) { switch ( *(_BYTE *)(v192 - 2) ) { case 1: v52 = *(unsigned __int16 *)(v192 - 4); v53 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v52) ) { if ( (unsigned __int16)v52 <= *(_WORD *)(v53 + 200) ) { v55 = *(_DWORD *)(v53 + 196); if ( *(_DWORD *)(v55 + 4 * v52) ) v54 = *(_DWORD *)(v55 + 4 * v52); else v54 = 0; } else { v54 = 0; } } else { v54 = 0; } if ( v184 && v2[87] == 1 ) v56 = *(unsigned __int8 *)(v190 + v184 + 24); else v56 = 0; if ( !*(_BYTE *)v192 ) { sprintf(&v202, "%s %d/%d", v54 + 34, v56, *(unsigned __int8 *)(v192 - 1)); goto LABEL_103; } v57 = dword_ACDA74; v58 = *(_DWORD *)dword_ACDA74; v189 = *(unsigned __int16 *)(v192 - 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(v58 + 16))(dword_ACDA74, v189) ) { if ( (unsigned __int16)v189 <= *(_WORD *)(v57 + 200) ) { v59 = (int *)(*(_DWORD *)(v57 + 196) + 4 * (unsigned __int16)v189); if ( *v59 ) { v60 = *v59; if ( v60 ) { v61 = *(_BYTE *)v192; if ( *(_BYTE *)v192 == 1 ) { sprintf(&v202, "%s %d/%d", v60 + 181, v56, *(unsigned __int8 *)(v192 - 1)); goto LABEL_103; } switch ( v61 ) { case 2: v174 = *(unsigned __int8 *)(v192 - 1); v173 = v56; v172 = v60 + 213; v171 = "%s %d/%d"; break; case 3: v174 = *(unsigned __int8 *)(v192 - 1); v173 = v56; v172 = v60 + 245; v171 = "%s %d/%d"; break; case 4: v174 = *(unsigned __int8 *)(v192 - 1); v173 = v56; v172 = v60 + 277; v171 = "%s %d/%d"; break; default: goto LABEL_103; } sprintf(&v202, v171, v172, v173, v174); } } } } LABEL_103: v51 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); LABEL_104: v62 = v51; if ( v51 > 0 ) { v63 = (_DWORD *)v2[91]; if ( v51 < v63[83] && v51 < (unsigned int)((v63[75] - v63[74]) >> 2) ) { v64 = *(_DWORD *)(v63[74] + 4 * v51); if ( (*(_DWORD *)(v64 + 336) - *(_DWORD *)(v64 + 332)) >> 2 ) { v193 = **(_DWORD ***)(v64 + 332); if ( v193 ) { v65 = sub_517CC0(v63, v62, 0); v66 = (_DWORD *)v2[91]; v189 = v65; v67 = (_DWORD **)sub_517D50(v66, v62, 0); v68 = **(_DWORD **)i; v187 = v67; (*(void (__stdcall **)(signed int))(v68 + 256))(1); (*(void (__stdcall **)(int))(**(_DWORD **)i + 172))(v189); (*(void (__stdcall **)(_DWORD **))(**(_DWORD **)i + 176))(v187); v69 = *v193; v70 = (*(int (**)(void))(**(_DWORD **)i + 144))(); (*(void (__thiscall **)(_DWORD *, int))(v69 + 172))(v193, v70); } } } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)i + 520))(*(unsigned __int16 *)(v192 - 4)); v189 = *(unsigned __int16 *)(v192 - 4); v71 = 0; if ( sub_5701C0() ) { do { if ( *(_WORD *)(sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v71) + 2) == (_WORD)v189 ) break; ++v71; } while ( v71 < sub_5701C0() ); } if ( sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v71) && v2[87] != 2 && (_BYTE)v183 ) { v72 = v186; v73 = i; *((_BYTE *)v2 + v186 + 828) = 1; (*(void (__stdcall **)(signed int))(**(_DWORD **)v73 + 240))(1); v189 = *(_DWORD *)i; v74 = sub_40A910(984975493); } else { v72 = v186; v75 = (int *)i; *((_BYTE *)v2 + v186 + 828) = 0; v189 = *v75; v74 = sub_40A910(-1985051943); } sub_8F2EA0((void **)v189, v74); v76 = (_DWORD *)v2[91]; i += 4; v186 = v72 + 1; sub_464B20(v76, v62, v72 + 1); } break; case 2: v45 = *(unsigned __int16 *)(v192 - 4); v46 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v45) ) { if ( (unsigned __int16)v45 <= *(_WORD *)(v46 + 200) ) { v48 = *(_DWORD *)(v46 + 196); if ( *(_DWORD *)(v48 + 4 * v45) ) v47 = *(_DWORD *)(v48 + 4 * v45); else v47 = 0; } else { v47 = 0; } } else { v47 = 0; } v49 = v47 + 34; v50 = sub_40C190(1011449494); sprintf(&v202, v50, &unk_9EF5D1, v49); v51 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); goto LABEL_104; case 3: v39 = *(unsigned __int16 *)(v192 - 4); v40 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v39) ) { if ( (unsigned __int16)v39 <= *(_WORD *)(v40 + 200) ) { v42 = *(_DWORD *)(v40 + 196); if ( *(_DWORD *)(v42 + 4 * v39) ) v41 = *(_DWORD *)(v42 + 4 * v39); else v41 = 0; } else { v41 = 0; } } else { v41 = 0; } v43 = v41 + 34; v44 = sub_40C190(-1913854750); sprintf(&v202, v44, &unk_9EF5D2, v43); goto LABEL_103; } v192 += 8; if ( (signed int)++v190 >= 5 ) break; } v77 = (unsigned __int16 *)(v185 + 134); v189 = 0; v78 = (char **)&v2[v186 + 197]; for ( i = v185 + 134; ; v77 = (unsigned __int16 *)i ) { if ( !*((_BYTE *)v77 - 2) ) { LABEL_194: v127 = v185; if ( *(_BYTE *)(v185 + 162) ) { v128 = sub_40C190(959593777); sprintf(&v202, v128, &unk_9EF5D3); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); } v129 = 0; v180 = 0; v130 = operator new(0x10u); if ( !v130 ) { v191 = 0; std::exception::exception((std::exception *)&v177, (const char *const *)&v191); v177 = &std::bad_alloc::`vftable'; _CxxThrowException(&v177, &_TI2_AVbad_alloc_std__); } v179 = v130; *v130 = v130; *((_DWORD *)v179 + 1) = v179; *((_DWORD *)v179 + 2) = v179; *((_BYTE *)v179 + 14) = 1; *((_BYTE *)v179 + 15) = 1; v203 = 1; v131 = (_BYTE *)(v127 + 96); do { if ( !*(v131 - 4) ) break; if ( !*v131 ) { v132 = sub_4DD530(&v178, v131 - 2); sub_4DD450(&v178, (int)&v181, v132, 0); } ++v129; v131 += 8; } while ( v129 < 5 ); v201 = 15; v200 = 0; LOBYTE(v199) = 0; LOBYTE(v203) = 2; v133 = (CHAR *)sub_40C190(-301846455); sub_401D10((int)&v199, v133, strlen(v133)); v134 = *(_DWORD *)v179; while ( (void *)v134 != v179 ) { v135 = dword_ACDA48; v136 = *(_DWORD *)dword_ACDA48; v191 = (char *)*(unsigned __int16 *)(v134 + 12); if ( (*(unsigned __int8 (__thiscall **)(int, char *))(v136 + 16))(dword_ACDA48, v191) ) { if ( (unsigned __int16)v191 <= *(_WORD *)(v135 + 200) ) { v138 = *(_DWORD *)(v135 + 196); if ( *(_DWORD *)(v138 + 4 * (unsigned __int16)v191) ) v137 = *(_DWORD *)(v138 + 4 * (unsigned __int16)v191); else v137 = 0; } else { v137 = 0; } } else { v137 = 0; } sprintf(&v202, " %s", v137 + 34); sub_401D10((int)&v199, &v202, strlen(&v202)); if ( !*(_BYTE *)(v134 + 15) ) { v139 = *(_DWORD *)(v134 + 8); if ( *(_BYTE *)(v139 + 15) ) { for ( j = *(_DWORD *)(v134 + 4); !*(_BYTE *)(j + 15); j = *(_DWORD *)(j + 4) ) { if ( v134 != *(_DWORD *)(j + 8) ) break; v134 = j; } v134 = j; } else { v134 = *(_DWORD *)(v134 + 8); for ( k = *(_DWORD *)v139; !*(_BYTE *)(k + 15); k = *(_DWORD *)k ) v134 = k; } } } v142 = v199; if ( v201 < 0x10 ) v142 = &v199; v143 = ((int (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], v142); v144 = *(_DWORD *)v179; v190 = v143; v184 = v144; if ( v143 > 0 ) { v145 = (_DWORD *)v2[91]; if ( v143 < v145[83] && v143 < (unsigned int)((v145[75] - v145[74]) >> 2) && (v146 = *(_DWORD *)(v145[74] + 4 * v143), (*(_DWORD *)(v146 + 336) - *(_DWORD *)(v146 + 332)) >> 2) && (v189 = **(_DWORD **)(v146 + 332)) != 0 ) { v147 = (v145[75] - v145[74]) >> 2; if ( v143 < (unsigned int)v147 && (v148 = *(_DWORD *)(v145[74] + 4 * v143), v149 = *(_DWORD *)(v148 + 336) - *(_DWORD *)(v148 + 332), v182 = *(_DWORD *)(v145[74] + 4 * v143), v149 >> 2) && (v150 = **(_DWORD **)(v148 + 332)) != 0 ) { if ( v143 < v147 && v148 ) { v151 = (*(int (**)(void))(*(_DWORD *)v150 + 164))(); v152 = (*(int (__thiscall **)(_DWORD *))(*v145 + 164))(v145) + v151; v193 = (_DWORD *)(v152 + (*(int (**)(void))(*(_DWORD *)v182 + 164))()); } else { v193 = 0; } } else { v193 = 0; } v153 = (_DWORD *)v2[91]; v154 = (v153[75] - v153[74]) >> 2; if ( v143 < (unsigned int)v154 && (v155 = *(_DWORD *)(v153[74] + 4 * v143), (*(_DWORD *)(v155 + 336) - *(_DWORD *)(v155 + 332)) >> 2) && (v191 = **(char ***)(v155 + 332)) != 0 ) { if ( v143 < v154 && v155 ) { v157 = (*(int (**)(void))(*v153 + 168))(); v158 = (*(int (**)(void))(*(_DWORD *)v191 + 168))(); v159 = *(int (__thiscall **)(int))(*(_DWORD *)v155 + 168); v191 = (char *)(v158 + v157); v160 = v159(v155); v156 = &v191[v160]; } else { v156 = 0; } } else { v156 = 0; } v161 = v186; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[v186 + 197] + 256))(1); (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v2[v161 + 197] + 172))(v193); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[v161 + 197] + 176))(v156); v162 = *(void (__thiscall ***)(int, int))v189; v163 = (*(int (**)(void))(*(_DWORD *)v2[v161 + 197] + 144))(); v162[43](v189, v163); } else { v161 = v186; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[v161 + 197] + 520))(*(unsigned __int16 *)(v184 + 12)); if ( v2[87] != 2 && (_BYTE)v183 ) { *((_BYTE *)v2 + v161 + 828) = 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[v161 + 197] + 240))(1); v175 = 984975493; } else { *((_BYTE *)v2 + v161 + 828) = 0; v175 = -1985051943; } v164 = (void **)v2[v161 + 197]; v165 = sub_40A910(v175); sub_8F2EA0(v164, v165); sub_464B20((_DWORD *)v2[91], v190, v161 + 1); } ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5DA); v166 = sub_40C190(-286830771); sprintf(&v202, "<%s>", v166); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); v167 = v185; sub_622D40(v2, *(_DWORD *)(v185 + 12), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5DB); sub_464D00((_DWORD *)v2[91], 4); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5E2); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5E3); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5ED); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5EE); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF5EF); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[91], &unk_9EF601); sub_621C10((_DWORD **)v2, *(_WORD *)(v167 + 4)); v168 = (_DWORD *)v2[95]; if ( v168 ) { if ( v2[91] ) { sub_4638F0(v168, 0); *(_DWORD *)(v2[91] + 344) = 0; sub_465130((_DWORD *)v2[91]); v169 = v2[194]; if ( v169 ) *(_WORD *)(v169 + 28) |= 1u; } } if ( v201 >= 0x10 ) operator delete(v199); v201 = 15; v200 = 0; LOBYTE(v199) = 0; v170 = *(_DWORD **)v179; v203 = 3; sub_61E6D0(&v178, (int *)&v191, v170, v179); operator delete(v179); return; } v79 = dword_ACB230; v80 = *(_DWORD *)dword_ACB230; v184 = *v77; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v80 + 16))(dword_ACB230, v184) ) { if ( (unsigned __int16)v184 <= *(_WORD *)(v79 + 200) ) { v82 = *(_DWORD *)(v79 + 196); if ( *(_DWORD *)(v82 + 4 * (unsigned __int16)v184) ) v81 = *(_DWORD *)(v82 + 4 * (unsigned __int16)v184); else v81 = 0; } else { v81 = 0; } } else { v81 = 0; } v83 = sub_6854B0(&byte_ADA230, *(_WORD *)i); sprintf(&v202, "%s %d/%d", v81 + 34, v83, *(unsigned __int16 *)(i + 2)); v84 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[91], &v202); v85 = *(unsigned __int8 *)(v185 + 192); v86 = v84; v87 = 0; v192 = v86; v190 = 0xFFFF; if ( v85 > 0 ) { v88 = (_DWORD *)(v185 + 208); while ( *((_BYTE *)v88 - 12) ) { v86 = v192; if ( *v88 == *(unsigned __int16 *)i ) { v190 = *(unsigned __int16 *)(32 * v87 + v185 + 200); break; } ++v87; v88 += 8; if ( v87 >= v85 ) break; } } v187 = 0; if ( sub_5701C0() ) { do { if ( *(_WORD *)(sub_7474E0((_DWORD *)(dword_ACDA58 + 4), (unsigned int)v187) + 2) == (_WORD)v190 ) break; v187 = (_DWORD **)((char *)v187 + 1); } while ( (unsigned int)v187 < sub_5701C0() ); } v89 = sub_7474E0((_DWORD *)(dword_ACDA58 + 4), (unsigned int)v187); if ( (_WORD)v190 == -1 || !v89 ) break; if ( v86 <= 0 ) goto LABEL_193; v90 = (_DWORD *)v2[91]; v193 = v90; if ( v86 < v90[83] && v86 < (unsigned int)((v90[75] - v90[74]) >> 2) ) { v91 = *(_DWORD *)(v90[74] + 4 * v86); if ( (*(_DWORD *)(v91 + 336) - *(_DWORD *)(v91 + 332)) >> 2 ) { v191 = **(char ***)(v91 + 332); if ( v191 ) { v92 = (v90[75] - v90[74]) >> 2; if ( v86 < (unsigned int)v92 && (v93 = *(_DWORD **)(v90[74] + 4 * v86), (v93[84] - v93[83]) >> 2) && (v184 = *(_DWORD *)v93[83]) != 0 ) { if ( v86 < v92 && v93 ) { v95 = (*(int (**)(void))(*v93 + 164))(); v96 = (*(int (**)(void))(*v193 + 164))() + v95; v97 = *(int (**)(void))(*(_DWORD *)v184 + 164); v193 = (_DWORD *)v96; v94 = (_DWORD **)(v96 + v97()); } else { v94 = 0; } } else { v94 = 0; } v98 = (_DWORD *)v2[91]; v99 = (v98[75] - v98[74]) >> 2; v187 = v94; v184 = v99; if ( v192 < v99 && (v100 = *(_DWORD *)(v98[74] + 4 * v192), v101 = *(_DWORD *)(v100 + 336) - *(_DWORD *)(v100 + 332), v193 = *(_DWORD **)(v98[74] + 4 * v192), v101 >> 2) && (v182 = **(_DWORD **)(v100 + 332)) != 0 ) { if ( v192 < v184 && v193 ) { v102 = (*(int (**)(void))(*v98 + 168))(); v103 = (*(int (**)(void))(*v193 + 168))() + v102; v104 = v103 + (*(int (**)(void))(*(_DWORD *)v182 + 168))(); v94 = v187; v193 = (_DWORD *)v104; } else { v193 = 0; } } else { v193 = 0; } (*(void (__stdcall **)(signed int))(*(_DWORD *)*v78 + 256))(1); (*(void (__stdcall **)(_DWORD **))(*(_DWORD *)*v78 + 172))(v94); (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)*v78 + 176))(v193); v105 = v191; v106 = *(_DWORD *)*v78; v191 = (char *)(*(_DWORD *)v191 + 172); v107 = (*(int (**)(void))(v106 + 144))(); (*(void (__thiscall **)(char *, int))v191)(v105, v107); v86 = v192; } } } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v78 + 520))((unsigned __int16)v190); if ( v2[87] == 2 || !(_BYTE)v183 ) { *((_BYTE *)v2 + v186 + 828) = 0; v191 = *v78; LABEL_191: v108 = sub_40A910(-1985051943); goto LABEL_192; } *((_BYTE *)v2 + v186 + 828) = 1; (*(void (__stdcall **)(signed int))(*(_DWORD *)*v78 + 240))(1); v191 = *v78; v108 = sub_40A910(984975493); LABEL_192: sub_8F2EA0((void **)v191, v108); v126 = (_DWORD *)v2[91]; ++v78; sub_464B20(v126, v86, ++v186); LABEL_193: i += 6; if ( ++v189 >= 5 ) goto LABEL_194; } if ( v86 <= 0 ) goto LABEL_193; v109 = (_DWORD *)v2[91]; v193 = v109; if ( v86 < v109[83] && v86 < (unsigned int)((v109[75] - v109[74]) >> 2) ) { v110 = *(_DWORD *)(v109[74] + 4 * v86); if ( (*(_DWORD *)(v110 + 336) - *(_DWORD *)(v110 + 332)) >> 2 ) { v184 = **(_DWORD **)(v110 + 332); if ( v184 ) { v111 = (v109[75] - v109[74]) >> 2; if ( v86 < (unsigned int)v111 && (v112 = *(_DWORD *)(v109[74] + 4 * v86), (*(_DWORD *)(v112 + 336) - *(_DWORD *)(v112 + 332)) >> 2) && (v191 = **(char ***)(v112 + 332)) != 0 ) { if ( v86 < v111 && v112 ) { v114 = (*(int (**)(void))(*(_DWORD *)v112 + 164))(); v115 = (*(int (**)(void))(*v193 + 164))() + v114; v116 = *(int (**)(void))(*(_DWORD *)v191 + 164); v182 = v115; v113 = v115 + v116(); } else { v113 = 0; } } else { v113 = 0; } v117 = (_DWORD *)v2[91]; v118 = (v117[75] - v117[74]) >> 2; v193 = (_DWORD *)v113; v191 = (char *)v118; if ( v192 < v118 && (v119 = *(_DWORD *)(v117[74] + 4 * v192), v120 = *(_DWORD *)(v119 + 336) - *(_DWORD *)(v119 + 332), v190 = *(_DWORD *)(v117[74] + 4 * v192), v120 >> 2) && (v182 = **(_DWORD **)(v119 + 332)) != 0 ) { if ( v192 < (signed int)v191 && v190 ) { v121 = (*(int (**)(void))(*v117 + 168))(); v122 = (*(int (**)(void))(*(_DWORD *)v190 + 168))() + v121; v123 = v122 + (*(int (**)(void))(*(_DWORD *)v182 + 168))(); v113 = (int)v193; v190 = v123; } else { v190 = 0; } } else { v190 = 0; } (*(void (__stdcall **)(signed int))(*(_DWORD *)*v78 + 256))(1); (*(void (__stdcall **)(int))(*(_DWORD *)*v78 + 172))(v113); (*(void (__stdcall **)(unsigned int))(*(_DWORD *)*v78 + 176))(v190); v124 = *(_DWORD *)*v78; v191 = (char *)(*(_DWORD *)v184 + 172); v125 = (*(int (**)(void))(v124 + 144))(); (*(void (__thiscall **)(int, int))v191)(v184, v125); v86 = v192; } } } (*(void (__stdcall **)(signed int))(*(_DWORD *)*v78 + 520))(0xFFFF); *((_BYTE *)v2 + v186 + 828) = 0; v191 = *v78; goto LABEL_191; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACB230: using guessed type int dword_ACB230; // ACDA48: using guessed type int dword_ACDA48; // ACDA58: using guessed type int dword_ACDA58; // ACDA74: using guessed type int dword_ACDA74; // ADA230: using guessed type char byte_ADA230; //----- (006261C0) -------------------------------------------------------- void __thiscall sub_6261C0(_DWORD *this, __int16 a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD *v4; // eax _DWORD *v5; // ebx int v6; // eax int v7; // ecx int v8; // esi const CHAR *v9; // eax const CHAR *v10; // eax unsigned int v11; // eax CHAR *v12; // eax int v13; // eax int *v14; // eax unsigned int v15; // eax const CHAR *v16; // eax _BYTE *v17; // ebx int v18; // esi int v19; // edi int v20; // eax int v21; // edx int v22; // ST10_4 const char *v23; // eax int v24; // esi int v25; // edi int v26; // eax int v27; // ecx int v28; // ST10_4 const char *v29; // eax int v30; // esi int v31; // edi int v32; // eax int v33; // edx int v34; // esi int v35; // eax char v36; // cl unsigned __int16 *v37; // esi int v38; // edi int v39; // ebx int v40; // edi int v41; // edx int v42; // eax int v43; // esi const char *v44; // eax _DWORD *v45; // eax signed int v46; // edi _BYTE *v47; // esi _DWORD *v48; // eax CHAR *v49; // eax _DWORD *v50; // esi int v51; // edi int v52; // ebx int v53; // eax int v54; // ecx int **v55; // eax int *j; // eax int i; // eax void *v58; // eax _DWORD *v59; // esi const CHAR *v60; // eax _DWORD *v61; // ecx int v62; // eax _DWORD *v63; // ecx void **v64; // [esp+10h] [ebp-178h] char v65; // [esp+1Ch] [ebp-16Ch] void *v66; // [esp+20h] [ebp-168h] int v67; // [esp+24h] [ebp-164h] int v68; // [esp+2Ch] [ebp-15Ch] int v69; // [esp+30h] [ebp-158h] char *v70; // [esp+34h] [ebp-154h] int v71; // [esp+38h] [ebp-150h] _DWORD *v72; // [esp+3Ch] [ebp-14Ch] int v73; // [esp+40h] [ebp-148h] int v74; // [esp+50h] [ebp-138h] unsigned int v75; // [esp+54h] [ebp-134h] void *v76; // [esp+5Ch] [ebp-12Ch] int v77; // [esp+6Ch] [ebp-11Ch] unsigned int v78; // [esp+70h] [ebp-118h] char v79; // [esp+78h] [ebp-110h] int v80; // [esp+184h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[157]; v72 = v2; sub_466A50(v3); v4 = sub_6CD770(); if ( !v4 ) return; v5 = (_DWORD *)v4[1]; if ( !v5 ) return; v70 = (char *)sub_74A800(v4, a2); v6 = sub_74E7D0(v5, a2); v7 = v2[157]; v8 = v6; v71 = v6; ((void (__thiscall *)(int, void *))loc_466CA0)(v7, &unk_9EF602); v9 = sub_40C190(-1694960385); sprintf(&v79, "<%s>", v9); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[157], &v79); sub_623790(v2, *(_DWORD *)(v8 + 8), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[157], &unk_9EF603); if ( !*(_BYTE *)(v8 + 25) && !v2[155] ) { v10 = sub_40A910(-352854964); sprintf(&v79, "<%s>", v10); v11 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[157], &v79); sub_464BE0((_DWORD *)v2[157], v11, 255, 255, 0); v75 = 15; v74 = 0; LOBYTE(v73) = 0; v80 = 0; v12 = (CHAR *)sub_40A910(879065258); sub_401D10((int)&v73, v12, strlen(v12)); v13 = sub_49F370(*(unsigned __int16 *)(v8 + 30)); sprintf(&v79, " %s", v13 + 34); sub_401D10((int)&v73, &v79, strlen(&v79)); v14 = (int *)v73; if ( v75 < 0x10 ) v14 = &v73; v15 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v2[157], v14); sub_464BE0((_DWORD *)v2[157], v15, 255, 255, 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v2[157], &unk_9EF60B); v80 = -1; sub_636A10(&v73); } v16 = sub_40C190(2056619164); sprintf(&v79, "<%s>", v16); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[157], &v79); if ( *(_BYTE *)(v8 + 89) ) { sprintf(&v79, "Level : %d", *(unsigned __int8 *)(v8 + 90)); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[157], &v79); } v69 = 0; v17 = (_BYTE *)(v8 + 94); while ( *(v17 - 2) ) { switch ( v17[2] ) { case 1: v30 = dword_ACDA48; v31 = *(unsigned __int16 *)v17; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v31) ) { if ( (unsigned __int16)v31 <= *(_WORD *)(v30 + 200) ) { v33 = *(_DWORD *)(v30 + 196); if ( *(_DWORD *)(v33 + 4 * v31) ) v32 = *(_DWORD *)(v33 + 4 * v31); else v32 = 0; } else { v32 = 0; } } else { v32 = 0; } if ( v70 && v72[155] == 1 ) v34 = (unsigned __int8)v70[v69 + 24]; else v34 = 0; if ( v17[4] ) { v35 = sub_4B0D70(*(unsigned __int16 *)v17); if ( v35 ) { v36 = v17[4]; switch ( v36 ) { case 1: sprintf(&v79, "%s %d/%d", v35 + 181, v34, (unsigned __int8)v17[3]); break; case 2: sprintf(&v79, "%s %d/%d", v35 + 213, v34, (unsigned __int8)v17[3]); break; case 3: sprintf(&v79, "%s %d/%d", v35 + 245, v34, (unsigned __int8)v17[3]); break; case 4: sprintf(&v79, "%s %d/%d", v35 + 277, v34, (unsigned __int8)v17[3]); break; } } } else { sprintf(&v79, "%s %d/%d", v32 + 34, v34, (unsigned __int8)v17[3]); } goto LABEL_53; case 2: v24 = dword_ACDA48; v25 = *(unsigned __int16 *)v17; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v25) ) { if ( (unsigned __int16)v25 <= *(_WORD *)(v24 + 200) ) { v27 = *(_DWORD *)(v24 + 196); if ( *(_DWORD *)(v27 + 4 * v25) ) v26 = *(_DWORD *)(v27 + 4 * v25); else v26 = 0; } else { v26 = 0; } } else { v26 = 0; } v28 = v26 + 34; v29 = sub_40C190(1011449494); sprintf(&v79, v29, &unk_9EF615, v28); LABEL_53: ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v72[157], &v79); LABEL_54: v8 = v71; break; case 3: v18 = dword_ACDA48; v19 = *(unsigned __int16 *)v17; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v19) ) { if ( (unsigned __int16)v19 <= *(_WORD *)(v18 + 200) ) { v21 = *(_DWORD *)(v18 + 196); if ( *(_DWORD *)(v21 + 4 * v19) ) v20 = *(_DWORD *)(v21 + 4 * v19); else v20 = 0; } else { v20 = 0; } } else { v20 = 0; } v22 = v20 + 34; v23 = sub_40C190(-1913854750); sprintf(&v79, v23, &unk_9EF616, v22); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v72[157], &v79); goto LABEL_54; } v17 += 8; if ( ++v69 >= 5 ) break; } v69 = 0; v37 = (unsigned __int16 *)(v8 + 134); do { if ( !*((_BYTE *)v37 - 2) ) break; v38 = dword_ACB230; v39 = *v37; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v39) ) { if ( (unsigned __int16)v39 <= *(_WORD *)(v38 + 200) ) { v41 = *(_DWORD *)(v38 + 196); v40 = *(_DWORD *)(v41 + 4 * v39) ? *(_DWORD *)(v41 + 4 * v39) : 0; } else { v40 = 0; } } else { v40 = 0; } v42 = sub_6854B0(&byte_ADA230, *v37); sprintf(&v79, "%s %d/%d", v40 + 34, v42, v37[1]); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v72[157], &v79); v37 += 3; ++v69; } while ( v69 < 5 ); v43 = v71; if ( *(_BYTE *)(v71 + 162) ) { v44 = sub_40C190(959593777); sprintf(&v79, v44, &unk_9EF617); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v72[157], &v79); } v67 = 0; v45 = operator new(0x10u); if ( !v45 ) { v70 = 0; std::exception::exception((std::exception *)&v64, (const char *const *)&v70); v64 = &std::bad_alloc::`vftable'; _CxxThrowException(&v64, &_TI2_AVbad_alloc_std__); } v66 = v45; *v45 = v45; *((_DWORD *)v66 + 1) = v66; *((_DWORD *)v66 + 2) = v66; *((_BYTE *)v66 + 14) = 1; *((_BYTE *)v66 + 15) = 1; v46 = 0; v80 = 1; v47 = (_BYTE *)(v43 + 96); do { if ( !*(v47 - 4) ) break; if ( !*v47 ) { v48 = sub_4DD530(&v65, v47 - 2); sub_4DD450(&v65, (int)&v68, v48, 0); } ++v46; v47 += 8; } while ( v46 < 5 ); v78 = 15; v77 = 0; LOBYTE(v76) = 0; LOBYTE(v80) = 2; v49 = (CHAR *)sub_40C190(-301846455); sub_401D10((int)&v76, v49, strlen(v49)); v50 = *(_DWORD **)v66; while ( v50 != v66 ) { v51 = dword_ACDA48; v52 = *((unsigned __int16 *)v50 + 6); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v52) ) { if ( (unsigned __int16)v52 <= *(_WORD *)(v51 + 200) ) { v54 = *(_DWORD *)(v51 + 196); if ( *(_DWORD *)(v54 + 4 * v52) ) v53 = *(_DWORD *)(v54 + 4 * v52); else v53 = 0; } else { v53 = 0; } } else { v53 = 0; } sprintf(&v79, " %s", v53 + 34); sub_401D10((int)&v76, &v79, strlen(&v79)); if ( !*((_BYTE *)v50 + 15) ) { v55 = (int **)v50[2]; if ( *((_BYTE *)v55 + 15) ) { for ( i = v50[1]; !*(_BYTE *)(i + 15); i = *(_DWORD *)(i + 4) ) { if ( v50 != *(_DWORD **)(i + 8) ) break; v50 = (_DWORD *)i; } v50 = (_DWORD *)i; } else { v50 = (_DWORD *)v50[2]; for ( j = *v55; !*((_BYTE *)j + 15); j = (int *)*j ) v50 = j; } } } v58 = v76; if ( v78 < 0x10 ) v58 = &v76; v59 = v72; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v72[157], v58); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v59[157], &unk_9EF646); v60 = sub_40C190(-286830771); sprintf(&v79, "<%s>", v60); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v59[157], &v79); sub_623790(v59, *(_DWORD *)(v71 + 12), 0); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v59[157], &unk_9EF647); sub_464D00((_DWORD *)v59[157], 4); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v59[157], &unk_9EF655); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v59[157], &unk_9EF656); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v59[157], &unk_9EF657); v61 = (_DWORD *)v59[159]; if ( v61 ) { v62 = v59[157]; if ( v62 ) { sub_4638F0(v61, *(_DWORD *)(v62 + 336)); *(_DWORD *)(v59[157] + 344) = *(_DWORD *)(v59[159] + 300); sub_465130((_DWORD *)v59[157]); } } if ( v78 >= 0x10 ) operator delete(v76); v78 = 15; v77 = 0; LOBYTE(v76) = 0; v63 = *(_DWORD **)v66; v80 = 3; sub_61E6D0(&v65, (int *)&v70, v63, v66); operator delete(v66); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACB230: using guessed type int dword_ACB230; // ACDA48: using guessed type int dword_ACDA48; // ADA230: using guessed type char byte_ADA230; //----- (00626B10) -------------------------------------------------------- void __thiscall sub_626B10(_DWORD **this, char a2, int a3) { _DWORD **v3; // eax _DWORD *v4; // edi _DWORD *v5; // eax int v6; // eax _DWORD **v7; // edi char *v8; // ebx __int16 v9; // ST24_2 __int16 v10; // ST24_2 int v11; // eax bool v12; // zf int v13; // esi signed int v14; // edi CHAR *v15; // eax CHAR *v16; // eax CHAR *v17; // eax CHAR *v18; // eax int v19; // ecx int v20; // eax _DWORD *v21; // esi int v22; // eax int *v23; // eax int v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax void *v27; // ecx char v28; // ST24_1 int v29; // ST20_4 int v30; // ST1C_4 int v31; // ST18_4 int v32; // ST14_4 int v33; // ST10_4 void *v34; // ST0C_4 void *v35; // eax unsigned __int8 *v36; // esi int *v37; // eax signed int v38; // esi _DWORD *v39; // esi _DWORD *v40; // edi _DWORD *v41; // ecx int ll; // eax int kk; // eax int v44; // eax int nn; // eax _BYTE *mm; // eax _DWORD *v47; // esi _DWORD *v48; // edi _BYTE *v49; // eax _DWORD *jj; // eax int ii; // eax int v52; // esi int v53; // edi _DWORD *v54; // ebx int v55; // eax int l; // eax int k; // eax int v58; // esi int v59; // edi _DWORD *v60; // ebx int v61; // eax int n; // eax int m; // eax _DWORD *v64; // esi _DWORD *v65; // edi int v66; // eax _BYTE *j; // eax int i; // eax int v69; // edi _DWORD *v70; // ecx int v71; // eax int v72; // esi int v73; // ST24_4 char *v74; // eax char *v75; // eax int v76; // ebx int v77; // esi int v78; // ST24_4 char *v79; // eax char *v80; // eax _DWORD *v81; // ecx int v82; // [esp+10h] [ebp-164h] int v83; // [esp+18h] [ebp-15Ch] char v84; // [esp+20h] [ebp-154h] void **v85; // [esp+28h] [ebp-14Ch] int v86; // [esp+34h] [ebp-140h] char *v87; // [esp+38h] [ebp-13Ch] _DWORD **v88; // [esp+3Ch] [ebp-138h] int v89; // [esp+40h] [ebp-134h] int v90; // [esp+44h] [ebp-130h] int v91; // [esp+48h] [ebp-12Ch] int v92; // [esp+4Ch] [ebp-128h] char v93[4]; // [esp+50h] [ebp-124h] unsigned __int8 *v94; // [esp+54h] [ebp-120h] char v95[4]; // [esp+58h] [ebp-11Ch] unsigned int v96; // [esp+5Ch] [ebp-118h] int v97; // [esp+60h] [ebp-114h] int v98; // [esp+64h] [ebp-110h] int v99; // [esp+68h] [ebp-10Ch] _DWORD *v100; // [esp+6Ch] [ebp-108h] char v101; // [esp+70h] [ebp-104h] void *v102; // [esp+74h] [ebp-100h] int v103; // [esp+78h] [ebp-FCh] int v104; // [esp+80h] [ebp-F4h] char v105[4]; // [esp+84h] [ebp-F0h] int v106; // [esp+88h] [ebp-ECh] _DWORD **v107; // [esp+8Ch] [ebp-E8h] char v108; // [esp+93h] [ebp-E1h] char v109; // [esp+94h] [ebp-E0h] void *v110; // [esp+9Ch] [ebp-D8h] unsigned int v111; // [esp+B0h] [ebp-C4h] void *v112; // [esp+B8h] [ebp-BCh] int v113; // [esp+C8h] [ebp-ACh] unsigned int v114; // [esp+CCh] [ebp-A8h] char v115[4]; // [esp+ECh] [ebp-88h] char v116; // [esp+F0h] [ebp-84h] void *v117; // [esp+F8h] [ebp-7Ch] unsigned int v118; // [esp+10Ch] [ebp-68h] void *v119; // [esp+114h] [ebp-60h] int v120; // [esp+124h] [ebp-50h] unsigned int v121; // [esp+128h] [ebp-4Ch] void *v122; // [esp+148h] [ebp-2Ch] int v123; // [esp+158h] [ebp-1Ch] unsigned int v124; // [esp+15Ch] [ebp-18h] int v125; // [esp+170h] [ebp-4h] v107 = this; sub_466A50(this[92]); v3 = (_DWORD **)sub_6CD770(); v4 = v3[1]; v88 = v3; v100 = v4; v108 = 0; v103 = 0; v5 = operator new(0x6Cu); if ( !v5 ) { v87 = 0; std::exception::exception((std::exception *)&v85, (const char *const *)&v87); v85 = &std::bad_alloc::`vftable'; _CxxThrowException(&v85, &_TI2_AVbad_alloc_std__); } v102 = v5; *v5 = v5; *((_DWORD *)v102 + 1) = v102; *((_DWORD *)v102 + 2) = v102; *((_BYTE *)v102 + 104) = 1; *((_BYTE *)v102 + 105) = 1; v125 = 0; *(_DWORD *)v93 = 0; *(_DWORD *)v95 = 0; v96 = 0; if ( (unsigned __int16)sub_53DA30(v4) > 0u ) { while ( 1 ) { v6 = sub_74E2E0(v100, v96); v7 = v88; v8 = (char *)(v6 + 4); v9 = *(_WORD *)(v6 + 4); v94 = (unsigned __int8 *)v6; if ( sub_74BAB0(v88, v9) || sub_74B520(v7, *(_WORD *)v8) ) break; LABEL_61: v38 = ++v96; if ( v38 >= (unsigned __int16)sub_53DA30(v100) ) goto LABEL_62; } v124 = 15; v123 = 0; LOBYTE(v122) = 0; v10 = *(_WORD *)v8; LOBYTE(v125) = 1; v11 = sub_74BA80(v7, v10); v12 = v107[89] == 0; v13 = v11; v90 = v11; v91 = 255; v92 = 255; v89 = 255; v105[0] = 1; if ( v12 ) v105[0] = 0; v14 = 0; v97 = v94[27]; v104 = sub_680890((unsigned __int8 *)byte_AD9238); if ( !a2 ) v104 = a3; switch ( v13 ) { case 0: sub_4018E0(&v122, "None", 4u); break; case 4: case 5: case 20: v18 = (CHAR *)sub_40A910(1061705653); sub_4018E0(&v122, v18, strlen(v18)); v14 = 2; break; case 6: v15 = (CHAR *)sub_40C190(-1615681320); sub_4018E0(&v122, v15, strlen(v15)); if ( v107[89] == (_DWORD *)1 ) v105[0] = 0; goto LABEL_12; case 7: v16 = (CHAR *)sub_40C190(-689244940); sub_4018E0(&v122, v16, strlen(v16)); v14 = 1; break; case 8: v17 = (CHAR *)sub_40C190(-637277950); sub_4018E0(&v122, v17, strlen(v17)); v12 = v107[89] == (_DWORD *)2; v89 = 64; v92 = 251; v91 = 107; if ( v12 ) { v105[0] = 0; v14 = 1; } else { LABEL_12: v14 = 1; } break; default: sub_4018E0(&v122, "...", 3u); break; } if ( v94[32] != 1 && v94[24] ) { if ( v14 != 1 ) { if ( v14 == 2 && v104 - v97 <= 150 ) ++*(_DWORD *)v93; goto LABEL_28; } } else if ( v14 != 1 ) { LABEL_59: LOBYTE(v125) = 0; if ( v124 >= 0x10 ) operator delete(v122); goto LABEL_61; } ++*(_DWORD *)v95; LABEL_28: v19 = (int)v107[190]; v20 = *(_DWORD *)(v19 + 4); v21 = v107 + 189; while ( !*(_BYTE *)(v20 + 15) ) { if ( *(_WORD *)(v20 + 12) >= *(_WORD *)v8 ) { v19 = v20; v20 = *(_DWORD *)v20; } else { v20 = *(_DWORD *)(v20 + 8); } } v22 = (int)v107[190]; v86 = v19; if ( v19 == v22 || *(_WORD *)v8 < *(_WORD *)(v19 + 12) ) { v106 = v22; v23 = &v106; } else { v23 = &v86; } v24 = *v23; if ( v90 != 5 || v104 - v97 > 150 ) { if ( (_DWORD *)v24 != v107[190] ) sub_61E430(v107 + 189, &v99, v24); } else if ( (_DWORD *)v24 == v107[190] ) { v25 = sub_4DD530(v107 + 189, v8); sub_4DD450(v21, (int)&v83, v25, 0); *((_BYTE *)v107 + 752) = 1; } v26 = v107[87]; if ( (v26 != (_DWORD *)2 || v104 - v97 <= 150) && v26 == (_DWORD *)v14 ) { v27 = v122; if ( v124 < 0x10 ) v27 = &v122; v28 = v105[0]; v29 = v90; v30 = v91; v31 = v92; v32 = v89; v33 = *(unsigned __int16 *)v8; v34 = v27; v35 = (void *)sub_74E810(v100, v33); v36 = v94; sub_62B410((int *)&v109, *(unsigned __int16 *)v8, v94[17], v35, v34, v33, v32, v31, v30, v29, v28); v12 = v107[89] == (_DWORD *)4; LOBYTE(v125) = 2; if ( v12 ) { *(_DWORD *)v115 = v36[27]; sub_62B4E0((const void **)&v116, (int)&v109); LOBYTE(v125) = 3; v37 = &v82; } else { *(_DWORD *)v115 = v105[0] != 0; sub_62B4E0((const void **)&v116, (int)&v109); LOBYTE(v125) = 4; v37 = (int *)&v84; } sub_62C460(&v101, (int)v37, v115); if ( v121 >= 0x10 ) operator delete(v119); LOBYTE(v119) = 0; v120 = 0; v121 = 15; if ( v118 >= 0x10 ) operator delete(v117); if ( v114 >= 0x10 ) operator delete(v112); v114 = 15; v113 = 0; LOBYTE(v112) = 0; if ( v111 >= 0x10 ) operator delete(v110); } goto LABEL_59; } LABEL_62: if ( v107[89] != (_DWORD *)4 ) { if ( v107[87] == (_DWORD *)2 ) { v64 = *(_DWORD **)v102; if ( *(void **)v102 == v102 ) goto LABEL_152; v65 = v107; do { if ( sub_622590(v65, (int)(v64 + 4)) ) v108 = 1; if ( !*((_BYTE *)v64 + 105) ) { v66 = v64[2]; if ( *(_BYTE *)(v66 + 105) ) { for ( i = v64[1]; !*(_BYTE *)(i + 105); i = *(_DWORD *)(i + 4) ) { if ( v64 != *(_DWORD **)(i + 8) ) break; v64 = (_DWORD *)i; } v64 = (_DWORD *)i; } else { v64 = (_DWORD *)v64[2]; for ( j = *(_BYTE **)v66; !j[105]; j = *(_BYTE **)j ) v64 = j; } } } while ( v64 != v102 ); } else { v106 = 1; sub_62B270(&v101, &v98, &v106); v52 = v98; v53 = v99; if ( v98 != v99 ) { v54 = v107; do { if ( sub_622590(v54, v52 + 16) ) v108 = 1; if ( !*(_BYTE *)(v52 + 105) ) { v55 = *(_DWORD *)(v52 + 8); if ( *(_BYTE *)(v55 + 105) ) { for ( k = *(_DWORD *)(v52 + 4); !*(_BYTE *)(k + 105); k = *(_DWORD *)(k + 4) ) { if ( v52 != *(_DWORD *)(k + 8) ) break; v52 = k; } v52 = k; } else { v52 = *(_DWORD *)(v52 + 8); for ( l = *(_DWORD *)v55; !*(_BYTE *)(l + 105); l = *(_DWORD *)l ) v52 = l; } } } while ( v52 != v53 ); } v106 = 0; sub_62B270(&v101, &v98, &v106); v58 = v98; v59 = v99; if ( v98 != v99 ) { v60 = v107; do { if ( sub_622590(v60, v58 + 16) ) v108 = 1; if ( !*(_BYTE *)(v58 + 105) ) { v61 = *(_DWORD *)(v58 + 8); if ( *(_BYTE *)(v61 + 105) ) { for ( m = *(_DWORD *)(v58 + 4); !*(_BYTE *)(m + 105); m = *(_DWORD *)(m + 4) ) { if ( v58 != *(_DWORD *)(m + 8) ) break; v58 = m; } v58 = m; } else { v58 = *(_DWORD *)(v58 + 8); for ( n = *(_DWORD *)v61; !*(_BYTE *)(n + 105); n = *(_DWORD *)n ) v58 = n; } } } while ( v58 != v59 ); } } goto LABEL_151; } if ( !*((_BYTE *)v107 + 360) ) { v47 = *(_DWORD **)v102; if ( *(void **)v102 == v102 ) goto LABEL_152; v48 = v107; do { if ( sub_622590(v48, (int)(v47 + 4)) ) v108 = 1; if ( !*((_BYTE *)v47 + 105) ) { v49 = (_BYTE *)v47[2]; if ( v49[105] ) { for ( ii = v47[1]; !*(_BYTE *)(ii + 105); ii = *(_DWORD *)(ii + 4) ) { if ( v47 != *(_DWORD **)(ii + 8) ) break; v47 = (_DWORD *)ii; } v47 = (_DWORD *)ii; } else { v47 = (_DWORD *)v47[2]; for ( jj = *(_DWORD **)v49; !*((_BYTE *)jj + 105); jj = (_DWORD *)*jj ) v47 = jj; } } } while ( v47 != v102 ); LABEL_151: if ( v108 ) goto LABEL_153; goto LABEL_152; } v39 = v102; if ( v39 != (_DWORD *)*v39 ) { v40 = v107; do { v41 = v39; if ( *((_BYTE *)v39 + 105) ) { v41 = (_DWORD *)v39[2]; } else if ( *(_BYTE *)(*v39 + 105) ) { for ( kk = v39[1]; !*(_BYTE *)(kk + 105); kk = *(_DWORD *)(kk + 4) ) { if ( v41 != *(_DWORD **)kk ) break; v41 = (_DWORD *)kk; } if ( !*((_BYTE *)v41 + 105) ) v41 = (_DWORD *)kk; } else { v41 = (_DWORD *)*v39; for ( ll = *(_DWORD *)(*v39 + 8); !*(_BYTE *)(ll + 105); ll = *(_DWORD *)(ll + 8) ) v41 = (_DWORD *)ll; } if ( sub_622590(v40, (int)(v41 + 4)) ) v108 = 1; if ( *((_BYTE *)v39 + 105) ) { v39 = (_DWORD *)v39[2]; } else { v44 = *v39; if ( *(_BYTE *)(*v39 + 105) ) { for ( mm = (_BYTE *)v39[1]; !mm[105]; mm = (_BYTE *)*((_DWORD *)mm + 1) ) { if ( v39 != *(_DWORD **)mm ) break; v39 = mm; } if ( !*((_BYTE *)v39 + 105) ) v39 = mm; } else { v39 = (_DWORD *)*v39; for ( nn = *(_DWORD *)(v44 + 8); !*(_BYTE *)(nn + 105); nn = *(_DWORD *)(nn + 8) ) v39 = (_DWORD *)nn; } } } while ( v39 != *(_DWORD **)v102 ); goto LABEL_151; } LABEL_152: v107[86] = (_DWORD *)-1; LABEL_153: v69 = (int)v107; if ( !v107[88] ) sub_466AF0(v107[92], 0, *((_BYTE *)v107 + 360), 0); sub_464D00(*(_DWORD **)(v69 + 368), 4); sub_464DA0(*(_DWORD **)(v69 + 368), 1u, 5); v70 = *(_DWORD **)(v69 + 376); if ( v70 ) { v71 = *(_DWORD *)(v69 + 368); if ( v71 ) { sub_4638F0(v70, *(_DWORD *)(v71 + 336)); *(_DWORD *)(*(_DWORD *)(v69 + 368) + 344) = *(_DWORD *)(*(_DWORD *)(v69 + 376) + 300); sub_465130(*(_DWORD **)(v69 + 368)); sub_6228C0((_DWORD **)v69); } } v72 = **(_DWORD **)(v69 + 680); v73 = *(_DWORD *)v95; v74 = (char *)sub_40A910(1195978914); v75 = sub_7549E0(v74, v73); (*(void (__thiscall **)(_DWORD, char *))(v72 + 472))(*(_DWORD *)(v69 + 680), v75); v76 = *(_DWORD *)v93; v77 = **(_DWORD **)(v69 + 684); v78 = *(_DWORD *)v93; v79 = (char *)sub_40A910(1061705397); v80 = sub_7549E0(v79, v78); (*(void (__thiscall **)(_DWORD, char *))(v77 + 472))(*(_DWORD *)(v69 + 684), v80); if ( !v76 ) *(_BYTE *)(v69 + 752) = 0; v81 = *(_DWORD **)v102; v125 = 5; sub_62C2E0(&v101, (int)&v99, v81, (int)v102); operator delete(v102); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006275A0) -------------------------------------------------------- int __thiscall sub_6275A0(char *this) { int v1; // esi signed int v2; // edi int v3; // ebx int v4; // eax int result; // eax v1 = (int)this; v2 = 0; v3 = (int)(this + 788); do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); *(_BYTE *)(v1 + v2++ + 828) = 0; v3 += 4; } while ( v2 < 10 ); sub_626B10((_DWORD **)v1, 1, 0); if ( *(_DWORD *)(v1 + 344) <= -1 ) sub_622330(v1, v3, -1, 0, 1); else sub_6248A0((_DWORD *)v1, *(_WORD *)(v1 + 344)); if ( *(_DWORD *)(v1 + 344) == -1 ) { v4 = *(_DWORD *)(v1 + 776); if ( v4 ) *(_WORD *)(v4 + 28) |= 1u; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 780) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 784) + 256))(0); } result = sub_464700(*(_DWORD **)(v1 + 368)); if ( !result && *(_DWORD *)(v1 + 348) == 2 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 700) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 704) + 240))(0); result = (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 704) + 256))(*(_DWORD *)(v1 + 704), 0); } return result; } //----- (006276A0) -------------------------------------------------------- void __thiscall sub_6276A0(_DWORD *this) { _DWORD *v1; // edi _DWORD **v2; // eax _DWORD *v3; // ebx _DWORD *v4; // ecx signed int v5; // esi _DWORD *v6; // eax int v7; // esi int v8; // eax char v9; // al int v10; // edi void *v11; // eax int v12; // ecx int v13; // edx _DWORD **v14; // ebx __int16 v15; // ST18_2 int v16; // eax int v17; // ebx CHAR *v18; // eax int v19; // ST0C_4 void *v20; // eax char *v21; // eax _DWORD *v22; // esi _DWORD *v23; // ecx int j; // eax int i; // eax int v26; // eax int l; // eax _BYTE *k; // eax _DWORD *v29; // ecx int v30; // eax int v31; // ST14_4 int v32; // [esp+10h] [ebp-FCh] int v33; // [esp+18h] [ebp-F4h] void **v34; // [esp+20h] [ebp-ECh] int v35; // [esp+2Ch] [ebp-E0h] _DWORD *v36; // [esp+30h] [ebp-DCh] _DWORD **v37; // [esp+34h] [ebp-D8h] int v38; // [esp+38h] [ebp-D4h] char *v39; // [esp+3Ch] [ebp-D0h] char v40; // [esp+40h] [ebp-CCh] void *v41; // [esp+44h] [ebp-C8h] int v42; // [esp+48h] [ebp-C4h] _DWORD *v43; // [esp+50h] [ebp-BCh] char v44; // [esp+57h] [ebp-B5h] char v45; // [esp+58h] [ebp-B4h] char v46[4]; // [esp+90h] [ebp-7Ch] int v47; // [esp+94h] [ebp-78h] int v48; // [esp+98h] [ebp-74h] void *v49; // [esp+9Ch] [ebp-70h] int v50; // [esp+ACh] [ebp-60h] unsigned int v51; // [esp+B0h] [ebp-5Ch] int v52; // [esp+B8h] [ebp-54h] int v53; // [esp+BCh] [ebp-50h] unsigned int v54; // [esp+C0h] [ebp-4Ch] int v55; // [esp+C4h] [ebp-48h] int v56; // [esp+C8h] [ebp-44h] int v57; // [esp+CCh] [ebp-40h] void *v58; // [esp+D0h] [ebp-3Ch] void *v59; // [esp+E0h] [ebp-2Ch] unsigned int v60; // [esp+E4h] [ebp-28h] int v61; // [esp+ECh] [ebp-20h] int v62; // [esp+F0h] [ebp-1Ch] unsigned int v63; // [esp+F4h] [ebp-18h] int v64; // [esp+F8h] [ebp-14h] int v65; // [esp+108h] [ebp-4h] v1 = this; v43 = this; v2 = (_DWORD **)sub_6CD770(); v3 = v2[1]; v4 = (_DWORD *)v1[156]; v37 = v2; v36 = v3; v44 = 0; sub_466A50(v4); v5 = 0; v42 = 0; v6 = operator new(0x48u); if ( !v6 ) { v39 = 0; std::exception::exception((std::exception *)&v34, (const char *const *)&v39); v34 = &std::bad_alloc::`vftable'; _CxxThrowException(&v34, &_TI2_AVbad_alloc_std__); } v41 = v6; *v6 = v6; *((_DWORD *)v41 + 1) = v41; *((_DWORD *)v41 + 2) = v41; *((_BYTE *)v41 + 68) = 1; *((_BYTE *)v41 + 69) = 1; v65 = 0; v38 = 0; if ( (unsigned __int16)sub_53DA30(v3) > 0u ) { do { v7 = sub_74E2E0(v3, v5); v8 = v1[155]; if ( v8 == 1 ) { if ( sub_74BA80(v37, *(_WORD *)(v7 + 4)) != 2 ) goto LABEL_25; v9 = *(_BYTE *)(v7 + 17); if ( v9 != 6 && v9 != 7 ) goto LABEL_25; v10 = *(unsigned __int16 *)(v7 + 4); v11 = (void *)sub_74E810(v3, v10); v12 = *(unsigned __int8 *)(v7 + 17); v13 = *(unsigned __int16 *)(v7 + 4); v60 = 15; v59 = 0; LOBYTE(v58) = 0; v57 = v12; v56 = v13; LOBYTE(v65) = 1; sub_4018E0(&v58, v11, strlen((const char *)v11)); v61 = v10; v62 = 255; v63 = 255; v64 = 255; *(_DWORD *)v46 = *(unsigned __int8 *)(v7 + 27); LOBYTE(v65) = 2; v47 = v56; v48 = v57; v51 = 15; v50 = 0; LOBYTE(v49) = 0; sub_4017F0((const void **)&v49, (const void **)&v58, 0, (void *)0xFFFFFFFF); v52 = v61; v53 = v62; v54 = v63; v55 = v64; LOBYTE(v65) = 3; sub_62C4D0(&v40, (int)&v33, v46); if ( v51 >= 0x10 ) operator delete(v49); LOBYTE(v65) = 0; if ( v60 >= 0x10 ) operator delete(v58); } else { if ( v8 ) goto LABEL_25; v14 = v37; if ( !sub_74B520(v37, *(_WORD *)(v7 + 4)) ) goto LABEL_25; v63 = 15; v62 = 0; LOBYTE(v59) = 0; v15 = *(_WORD *)(v7 + 4); LOBYTE(v65) = 4; v16 = sub_74BA80(v14, v15); v17 = *(unsigned __int8 *)(v7 + 27); v35 = v16; if ( sub_680890((unsigned __int8 *)byte_AD9238) - v17 > 150 && *(_BYTE *)(v7 + 32) != 1 && *(_BYTE *)(v7 + 24) ) { switch ( v35 ) { case 0: sub_4018E0(&v59, "None", 4u); break; case 3: case 4: case 5: case 9: case 20: v18 = (CHAR *)sub_40A910(1061705653); sub_40AC00(&v59, v18); v19 = *(unsigned __int16 *)(v7 + 4); v20 = (void *)sub_74E810(v36, v19); sub_62B380(&v47, *(unsigned __int16 *)(v7 + 4), *(unsigned __int8 *)(v7 + 17), v20, v19, 255, 255, 255); LOBYTE(v65) = 5; v21 = (char *)sub_62B630(&v45, (unsigned __int8 *)(v7 + 27), (int)&v47); LOBYTE(v65) = 6; sub_62C4D0(&v40, (int)&v32, v21); sub_62B350((int)&v45); sub_62B240((int)&v47); break; default: sub_4018E0(&v59, "...", 3u); break; } LOBYTE(v65) = 0; if ( v63 >= 0x10 ) operator delete(v59); } else { LOBYTE(v65) = 0; if ( v63 >= 0x10 ) operator delete(v59); } } v1 = v43; LABEL_25: v3 = v36; v5 = ++v38; } while ( v5 < (unsigned __int16)sub_53DA30(v36) ); } v22 = v41; if ( v22 == (_DWORD *)*v22 ) goto LABEL_62; do { v23 = v22; if ( *((_BYTE *)v22 + 69) ) { v23 = (_DWORD *)v22[2]; } else if ( *(_BYTE *)(*v22 + 69) ) { for ( i = v22[1]; !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) ) { if ( v23 != *(_DWORD **)i ) break; v23 = (_DWORD *)i; } if ( !*((_BYTE *)v23 + 69) ) v23 = (_DWORD *)i; } else { v23 = (_DWORD *)*v22; for ( j = *(_DWORD *)(*v22 + 8); !*(_BYTE *)(j + 69); j = *(_DWORD *)(j + 8) ) v23 = (_DWORD *)j; } if ( sub_6233F0(v1, (int)(v23 + 4)) ) v44 = 1; if ( *((_BYTE *)v22 + 69) ) { v22 = (_DWORD *)v22[2]; } else { v26 = *v22; if ( *(_BYTE *)(*v22 + 69) ) { for ( k = (_BYTE *)v22[1]; !k[69]; k = (_BYTE *)*((_DWORD *)k + 1) ) { if ( v22 != *(_DWORD **)k ) break; v22 = k; } if ( !*((_BYTE *)v22 + 69) ) v22 = k; } else { v22 = (_DWORD *)*v22; for ( l = *(_DWORD *)(v26 + 8); !*(_BYTE *)(l + 69); l = *(_DWORD *)(l + 8) ) v22 = (_DWORD *)l; } } } while ( v22 != *(_DWORD **)v41 ); if ( !v44 ) LABEL_62: v1[162] = -1; sub_464D00((_DWORD *)v1[156], 4); sub_464DA0((_DWORD *)v1[156], 1u, 5); v29 = (_DWORD *)v1[158]; if ( v29 ) { v30 = v1[156]; if ( v30 ) { sub_4638F0(v29, *(_DWORD *)(v30 + 336)); *(_DWORD *)(v1[156] + 344) = *(_DWORD *)(v1[158] + 300); sub_465130((_DWORD *)v1[156]); sub_623A50((_DWORD **)v1); } } v31 = *(_DWORD *)v41; v65 = 7; sub_62C3A0(&v40, (int *)&v39, v31, (int)v41); operator delete(v41); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00627C20) -------------------------------------------------------- char __thiscall sub_627C20(char *this, float a2) { char *v2; // esi int v3; // edi signed int v4; // ebx _DWORD *v5; // eax unsigned int v6; // edi int v7; // eax int v8; // ecx _DWORD *v9; // ecx unsigned int v10; // ebx _DWORD *v11; // ecx int v12; // edi int v13; // eax int v14; // ST34_4 int v15; // ST30_4 _DWORD *v16; // ecx int v17; // edi int v18; // eax int v20; // [esp+38h] [ebp-Ch] int *v21; // [esp+3Ch] [ebp-8h] int v22; // [esp+40h] [ebp-4h] v2 = this; if ( byte_AB7288 || byte_AD0C44 ) { byte_AD0C44 = 0; sub_6275A0(this); } if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { sub_4E3710(*((_DWORD **)v2 + 91), *((_DWORD **)v2 + 95)); sub_4E3710(*((_DWORD **)v2 + 92), *((_DWORD **)v2 + 94)); } if ( (*(unsigned __int8 (__stdcall **)(LONG, LONG))(**((_DWORD **)v2 + 91) + 332))(pt.x, pt.y) && 0.0 != (double)dword_BA6A68 ) { v3 = (int)(v2 + 788); v4 = 10; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); v3 += 4; --v4; } while ( v4 ); v5 = (_DWORD *)*((_DWORD *)v2 + 91); v6 = 0; if ( v5[83] > 0 ) { do { if ( v6 < (v5[75] - v5[74]) >> 2 ) { v7 = *(_DWORD *)(v5[74] + 4 * v6); if ( (*(_DWORD *)(v7 + 336) - *(_DWORD *)(v7 + 332)) >> 2 ) { v8 = **(_DWORD **)(v7 + 332); if ( v8 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 172))(0); } } v5 = (_DWORD *)*((_DWORD *)v2 + 91); ++v6; } while ( (signed int)v6 < v5[83] ); } v9 = (_DWORD *)*((_DWORD *)v2 + 91); v10 = 0; v20 = v9[86]; if ( (signed int)((v9[75] - v9[74]) & 0xFFFFFFFC) > 0 ) { do { v22 = -1; sub_464B60(v9, v10 + v20, &v22); if ( (unsigned int)(v22 - 1) <= 9 ) { v11 = (_DWORD *)*((_DWORD *)v2 + 91); v12 = v22 - 1; if ( v10 < (v11[75] - v11[74]) >> 2 ) { v13 = *(_DWORD *)(v11[74] + 4 * v10); if ( (*(_DWORD *)(v13 + 336) - *(_DWORD *)(v13 + 332)) >> 2 ) { v21 = **(int ***)(v13 + 332); if ( v21 ) { v14 = sub_517CC0(v11, v10, 0); v15 = sub_517D50(*((_DWORD **)v2 + 91), v10, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&v2[4 * v12 + 788] + 240))((unsigned __int8)v2[v12 + 828]); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v2[4 * v12 + 788] + 256))(1); (*(void (__stdcall **)(int))(**(_DWORD **)&v2[4 * v12 + 788] + 172))(v14); (*(void (__stdcall **)(int))(**(_DWORD **)&v2[4 * v12 + 788] + 176))(v15); v16 = *(_DWORD **)&v2[4 * v12 + 788]; v17 = *v21; v18 = (*(int (**)(void))(*v16 + 144))(); (*(void (__thiscall **)(int *, int))(v17 + 172))(v21, v18); } } } } v9 = (_DWORD *)*((_DWORD *)v2 + 91); ++v10; } while ( (signed int)v10 < (v9[75] - v9[74]) >> 2 ); } } return sub_621D40((int)v2, SLODWORD(a2)); } // AB7288: using guessed type char byte_AB7288; // AD0C44: using guessed type char byte_AD0C44; // BA6A68: using guessed type int dword_BA6A68; //----- (00627ED0) -------------------------------------------------------- char __thiscall sub_627ED0(void *this, volatile LONG *a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // edi int v13; // ebx volatile LONG *v14; // eax volatile LONG **v15; // eax void (__thiscall ***v16)(_DWORD, signed int); // esi void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // eax volatile LONG v20; // edx const CHAR *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax volatile LONG *v26; // eax int v27; // edx volatile LONG *v28; // ecx volatile LONG **v29; // eax int v30; // eax volatile LONG *v31; // eax char *v32; // eax char *v33; // eax const char *v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // edx int v37; // eax volatile LONG **v38; // edx int v39; // eax volatile LONG *v40; // eax char *v41; // eax char *v42; // eax const char *v43; // eax volatile LONG *v44; // eax volatile LONG *v45; // STE0_4 int v46; // ecx volatile LONG **v47; // eax int *v48; // ecx int v49; // STF0_4 int v50; // STEC_4 int v51; // eax volatile LONG *v52; // eax const char *v53; // eax int v54; // eax volatile LONG *v55; // ecx volatile LONG **v56; // edx int *v57; // eax int v58; // STF0_4 volatile LONG *v59; // STEC_4 volatile LONG **v60; // STE8_4 int v61; // STE4_4 int v62; // eax volatile LONG *v63; // eax const CHAR *v64; // eax int v65; // eax volatile LONG **v66; // edx int v67; // eax volatile LONG *v68; // eax volatile LONG v69; // edx const CHAR *v70; // eax int v71; // eax volatile LONG **v72; // edx int v73; // eax volatile LONG *v74; // eax volatile LONG v75; // edx const CHAR *v76; // eax int v77; // eax volatile LONG **v78; // edx int v79; // eax volatile LONG *v80; // eax volatile LONG v81; // edx const CHAR *v82; // eax int v83; // eax volatile LONG **v84; // edx int v85; // eax volatile LONG *v86; // eax volatile LONG v87; // edx const CHAR *v88; // eax volatile LONG **v89; // eax volatile LONG **v90; // eax volatile LONG **v91; // eax volatile LONG *v92; // eax volatile LONG **v93; // eax volatile LONG **v94; // eax volatile LONG *v95; // eax volatile LONG **v96; // eax int v97; // eax void **v98; // eax void **v99; // eax void **v100; // eax void **v101; // eax void **v102; // eax void **v103; // eax int v104; // eax volatile LONG **v105; // eax volatile LONG **v106; // ecx void ***v107; // ecx volatile LONG **v108; // eax volatile LONG *v109; // eax volatile LONG *v110; // eax volatile LONG *v111; // eax volatile LONG *v112; // eax volatile LONG *v113; // eax volatile LONG *v114; // eax volatile LONG *v115; // eax volatile LONG *v116; // eax const char *v117; // eax const char *v118; // eax volatile LONG *v119; // eax const char *v120; // eax int v121; // eax volatile LONG **v122; // edx int v123; // eax volatile LONG *v124; // eax int v125; // edi const CHAR *v126; // eax void (__thiscall ***v127)(_DWORD, signed int); // esi void (__thiscall ***v128)(_DWORD, signed int); // esi int v129; // [esp+110h] [ebp-90h] volatile LONG **v130; // [esp+114h] [ebp-8Ch] volatile LONG **v131; // [esp+118h] [ebp-88h] int v132; // [esp+11Ch] [ebp-84h] void *v133; // [esp+120h] [ebp-80h] int v134; // [esp+124h] [ebp-7Ch] int v135; // [esp+128h] [ebp-78h] char v136; // [esp+12Ch] [ebp-74h] char v137; // [esp+130h] [ebp-70h] int v138; // [esp+134h] [ebp-6Ch] int v139; // [esp+138h] [ebp-68h] int v140; // [esp+13Ch] [ebp-64h] int v141; // [esp+140h] [ebp-60h] int v142; // [esp+144h] [ebp-5Ch] volatile LONG **v143; // [esp+148h] [ebp-58h] volatile LONG **v144; // [esp+14Ch] [ebp-54h] volatile LONG **v145; // [esp+150h] [ebp-50h] int *v146; // [esp+154h] [ebp-4Ch] volatile LONG **v147; // [esp+158h] [ebp-48h] volatile LONG *v148; // [esp+15Ch] [ebp-44h] volatile LONG *v149; // [esp+160h] [ebp-40h] int v150; // [esp+164h] [ebp-3Ch] int v151; // [esp+168h] [ebp-38h] int v152; // [esp+16Ch] [ebp-34h] volatile LONG **v153; // [esp+170h] [ebp-30h] void *v154; // [esp+174h] [ebp-2Ch] int v155; // [esp+184h] [ebp-1Ch] unsigned int v156; // [esp+188h] [ebp-18h] int v157; // [esp+19Ch] [ebp-4h] v2 = (int)this; v149 = a2; v152 = 0; v3 = dword_BA6BA0; v157 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\QuestWin.nif"); sub_8F66B0(v4, (int)&v152, v3); if ( !v152 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v142 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v157) = 1; if ( v8 ) v148 = *(volatile LONG **)(v8 + 4); else v148 = 0; v9 = sub_8FB140(v152, (int)"Frame", (int)&v151, (int)&v150, v148); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, (int)v149, (int)"QuestWin", 0) ) { LOBYTE(v157) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v152; v157 = -1; if ( v152 && !InterlockedDecrement((volatile LONG *)(v152 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v151; v13 = v150; v14 = (volatile LONG *)sub_43D0D0(0x13u); if ( v14 ) v15 = sub_8FB140(v152, (int)"Theme", (int)&v151, (int)&v150, v14); else v15 = sub_8FB140(v152, (int)"Theme", (int)&v151, (int)&v150, 0); sub_8F3EB0(v151 - v12, v150 - v13, (int)v15, v2, 0, 0); if ( sub_8F71E0(v152, (int)"WinTitle", &v151, &v150, &v129, &v132) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v151 - v12, v150 - v13, v129, v132, v18, v2, 0, 0); v20 = *v19; v153 = (volatile LONG **)v19; (*(void (__thiscall **)(volatile LONG *, signed int))(v20 + 488))(v19, 1); (*((void (__stdcall **)(int *))*v153 + 117))(&dword_AA8D98); v149 = *v153 + 118; v21 = sub_40C190(-1509622800); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v149)(v153, v21); (*((void (__stdcall **)(_DWORD))*v153 + 60))(0); v22 = sub_8FB140(v152, (int)"Panel01", (int)&v151, (int)&v150, v148); v23 = sub_8F3EB0(v151 - v12, v150 - v13, (int)v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 240))(v23, 1); v24 = sub_8FB140(v152, (int)"IconSlot", (int)&v151, (int)&v150, v148); v25 = sub_8F3EB0(v151 - v12, v150 - v13, (int)v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v153 = sub_8FB140(v152, (int)"ClsNor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"ClsClick"); sub_8FB650(v153, v152, (int)"ClsOver"); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 1, 0, 0); v26 = (volatile LONG *)sub_43D0D0(4u); v27 = *(_DWORD *)v152; v149 = v26; if ( (*(int (__stdcall **)(const char *))(v27 + 72))("HelpLinkNor") ) { v153 = sub_8FB140(v152, (int)"HelpLinkNor", (int)&v151, (int)&v150, v149); sub_8FB650(v153, v152, (int)"HelpLinkClick"); sub_8FB650(v153, v152, (int)"HelpLinkOver"); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 20, 0, 0); } v153 = sub_8FB140(v152, (int)"Tab01_Off", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"Tab01_On"); *(_DWORD *)(v2 + 384) = sub_465940(v151 - v12, v150 - v13, (int)v153, v2, 2, 0); v28 = v153[9]; v29 = *(volatile LONG ***)(*v28 + 20); v149 = *(volatile LONG **)(*v28 + 24); v147 = v29; v30 = sub_421050(7); v31 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v30, v2, 0, 0); *(_DWORD *)(v2 + 680) = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v149 = (volatile LONG *)(**(_DWORD **)(v2 + 680) + 472); v32 = (char *)sub_40A910(1195978914); v33 = sub_7549E0(v32, 0); (*(void (__thiscall **)(_DWORD, char *))v149)(*(_DWORD *)(v2 + 680), v33); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 680) + 240))(0); *(_DWORD *)(*(_DWORD *)(v2 + 384) + 272) = dword_AD01E8; v34 = sub_4090F0(-1234400376); sub_8F2EA0(*(void ***)(v2 + 384), v34); v153 = sub_8FB140(v152, (int)"Tab02_Off", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"Tab02_On"); v35 = sub_465940(v151 - v12, v150 - v13, (int)v153, v2, 3, 0); v36 = v153; *(_DWORD *)(v2 + 388) = v35; v37 = *v36[9]; v38 = *(volatile LONG ***)(v37 + 20); v149 = *(volatile LONG **)(v37 + 24); v147 = v38; v39 = sub_421050(7); v40 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v39, v2, 0, 0); *(_DWORD *)(v2 + 684) = v40; (*(void (__thiscall **)(volatile LONG *, signed int))(*v40 + 488))(v40, 5); v149 = (volatile LONG *)(**(_DWORD **)(v2 + 684) + 472); v41 = (char *)sub_40A910(1061705397); v42 = sub_7549E0(v41, 0); (*(void (__thiscall **)(_DWORD, char *))v149)(*(_DWORD *)(v2 + 684), v42); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 684) + 240))(0); *(_DWORD *)(*(_DWORD *)(v2 + 388) + 272) = dword_AD01E8; v43 = sub_40A910(-1198947589); sub_8F2EA0(*(void ***)(v2 + 388), v43); v153 = sub_8FB140(v152, (int)"GiveupNor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"GiveupClick"); sub_8FB650(v153, v152, (int)"GiveupOver"); sub_8FB650(v153, v152, (int)"GiveupDisable"); v44 = sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 5, 0, 0); v45 = v148; v46 = v152; *(_DWORD *)(v2 + 700) = v44; v47 = sub_8FB140(v46, (int)"GiveupDisable", (int)&v151, (int)&v150, v45); v48 = *(int **)(v2 + 700); v153 = v47; v146 = v48; v49 = (int)v47; v50 = (*(int (**)(void))(*v48 + 168))(); v51 = (*(int (**)(void))(*v146 + 164))(); v52 = sub_8F3EB0(v51, v50, v49, v2, 0, 0); *(_DWORD *)(v2 + 704) = v52; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 240))(v52, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 704) + 256))(0); *(_DWORD *)(*(_DWORD *)(v2 + 704) + 272) = dword_AD01E8; v53 = sub_40A910(680097434); sub_8F2EA0(*(void ***)(v2 + 704), v53); v54 = *v153[9]; v55 = *(volatile LONG **)(v54 + 24); v56 = *(volatile LONG ***)(v54 + 20); v57 = *(int **)(v2 + 700); v149 = v55; v147 = v56; v146 = v57; v58 = sub_421050(7); v59 = v149; v60 = v147; v61 = (*(int (**)(void))(*v146 + 168))(); v62 = (*(int (**)(void))(*v146 + 164))(); v63 = sub_8F4A20(v62, v61, (int)v60, (int)v59, v58, v2, 0, 0); *(_DWORD *)(v2 + 688) = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); v149 = (volatile LONG *)(**(_DWORD **)(v2 + 688) + 472); v64 = sub_40C190(-284824239); (*(void (__thiscall **)(_DWORD, const CHAR *))v149)(*(_DWORD *)(v2 + 688), v64); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 688) + 240))(0); v153 = sub_8FB140(v152, (int)"Title01Nor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"Title01Click"); sub_8FB650(v153, v152, (int)"Title01Over"); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 13, 0, 0); v65 = *v153[9]; v66 = *(volatile LONG ***)(v65 + 20); v149 = *(volatile LONG **)(v65 + 24); v147 = v66; v67 = sub_421050(7); v68 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v67, v2, 0, 0); v69 = *v68; v153 = (volatile LONG **)v68; (*(void (__thiscall **)(volatile LONG *, signed int))(v69 + 488))(v68, 5); v149 = *v153 + 118; v70 = sub_40C190(-1946686207); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v149)(v153, v70); (*((void (__stdcall **)(_DWORD))*v153 + 60))(0); v153 = sub_8FB140(v152, (int)"Title02Nor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"Title02Click"); sub_8FB650(v153, v152, (int)"Title02Over"); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 11, 0, 0); v71 = *v153[9]; v72 = *(volatile LONG ***)(v71 + 20); v149 = *(volatile LONG **)(v71 + 24); v147 = v72; v73 = sub_421050(7); v74 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v73, v2, 0, 0); v75 = *v74; v153 = (volatile LONG **)v74; (*(void (__thiscall **)(volatile LONG *, signed int))(v75 + 488))(v74, 5); v149 = *v153 + 118; v76 = sub_40C190(-1795623687); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v149)(v153, v76); (*((void (__stdcall **)(_DWORD))*v153 + 60))(0); v153 = sub_8FB140(v152, (int)"Title03Nor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"Title03Click"); sub_8FB650(v153, v152, (int)"Title03Over"); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 12, 0, 0); v77 = *v153[9]; v78 = *(volatile LONG ***)(v77 + 20); v149 = *(volatile LONG **)(v77 + 24); v147 = v78; v79 = sub_421050(7); v80 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v79, v2, 0, 0); v81 = *v80; v153 = (volatile LONG **)v80; (*(void (__thiscall **)(volatile LONG *, signed int))(v81 + 488))(v80, 5); v149 = *v153 + 118; v82 = sub_40C190(-133694228); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v149)(v153, v82); (*((void (__stdcall **)(_DWORD))*v153 + 60))(0); v153 = sub_8FB140(v152, (int)"Title04Nor", (int)&v151, (int)&v150, v148); sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 0, 0, 0); v83 = *v153[9]; v84 = *(volatile LONG ***)(v83 + 20); v149 = *(volatile LONG **)(v83 + 24); v147 = v84; v85 = sub_421050(7); v86 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v147, (int)v149, v85, v2, 0, 0); v87 = *v86; v153 = (volatile LONG **)v86; (*(void (__thiscall **)(volatile LONG *, signed int))(v87 + 488))(v86, 5); v149 = *v153 + 118; v88 = sub_40C190(-1499031438); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v149)(v153, v88); (*((void (__stdcall **)(_DWORD))*v153 + 60))(0); v133 = 0; v134 = 0; v135 = 0; v137 = 0; v138 = 0; v139 = 0; v140 = 0; v141 = 0; LOBYTE(v157) = 2; v89 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 1); *v89 = (volatile LONG *)1; v89[1] = (volatile LONG *)v152; v153 = v89; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "ColumnBarNor", 0xCu); LOBYTE(v157) = 3; v146 = (int *)(v153 + 18); sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "ColumnBarClick", 0xEu); LOBYTE(v157) = 4; sub_40B060(v146, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "ColumnBarOver", 0xDu); LOBYTE(v157) = 5; sub_40B060(v146, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 2); *v153 = (volatile LONG *)2; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "Column03", 8u); LOBYTE(v157) = 6; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v90 = v153; v153[1] = (volatile LONG *)v152; *((_BYTE *)v90 + 88) = 1; v153 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 2); *v153 = (volatile LONG *)2; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "Column04", 8u); LOBYTE(v157) = 7; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153[1] = (volatile LONG *)v152; v153 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 2); *v153 = (volatile LONG *)2; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "Column02", 8u); LOBYTE(v157) = 8; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153[1] = (volatile LONG *)v152; v153 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 2); *v153 = (volatile LONG *)2; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "Column01", 8u); LOBYTE(v157) = 9; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153[1] = (volatile LONG *)v152; sub_466680(&v133, 0); v91 = sub_8FB140(v152, (int)"SubText01", (int)&v151, (int)&v150, v148); v92 = sub_466330(v151, v150, (int)v91, *(float *)&v2, (int **)&v133, 0, 0); *(_DWORD *)(v2 + 368) = v92; *((_DWORD *)v92 + 89) = 7; *(_DWORD *)(*(_DWORD *)(v2 + 368) + 352) = 8; *(_BYTE *)(*(_DWORD *)(v2 + 368) + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 368), 4); sub_465130(*(_DWORD **)(v2 + 368)); sub_40AE60(&v133); v93 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 1); *v93 = (volatile LONG *)1; v93[1] = (volatile LONG *)v152; v153 = v93; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "ColumnBar01Nor", 0xEu); LOBYTE(v157) = 10; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v133, 2); *v153 = (volatile LONG *)2; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_4018E0(&v154, "Column05", 8u); LOBYTE(v157) = 11; sub_40B060((int *)v153 + 18, (const void **)&v154); LOBYTE(v157) = 2; if ( v156 >= 0x10 ) operator delete(v154); v153[1] = (volatile LONG *)v152; v156 = 15; v155 = 0; LOBYTE(v154) = 0; sub_466680(&v133, 0); v94 = sub_8FB140(v152, (int)"SubText02", (int)&v151, (int)&v150, v148); v95 = sub_466330(v151 - v12, v150 - v13, (int)v94, *(float *)&v2, (int **)&v133, 0, 0); *(_DWORD *)(v2 + 364) = v95; *((_BYTE *)v95 + 348) = 0; ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(*(_DWORD *)(v2 + 364), "."); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(*(_DWORD *)(v2 + 364), ".."); ((void (__thiscall *)(_DWORD, const char *))loc_466CA0)(*(_DWORD *)(v2 + 364), "..."); sub_464D00(*(_DWORD **)(v2 + 364), 4); sub_465130(*(_DWORD **)(v2 + 364)); v96 = sub_8FB140(v152, (int)"SlideBar_SlideBtnMiddle", (int)&v151, (int)&v150, v148); v153 = v96; v97 = sub_464310(v152, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v96, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 376) = v97; *(_DWORD *)(v97 + 312) = 9; *(_DWORD *)(*(_DWORD *)(v2 + 376) + 304) = 1; v98 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v98, "SlideBar_DnBtn01Nor"); v99 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v99, "SlideBar_DnBtn01Click"); v100 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v100, "SlideBar_DnBtn01Over"); v101 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v101, "SlideBar_UpBtn01Nor"); v102 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v102, "SlideBar_UpBtn01Click"); v103 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v152 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v103, "SlideBar_UpBtn01Over"); v104 = sub_464310(v152, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v153, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 380) = v104; *(_DWORD *)(v104 + 312) = 10; *(_DWORD *)(*(_DWORD *)(v2 + 380) + 304) = 1; sub_4638F0(*(_DWORD **)(v2 + 376), *(_DWORD *)(*(_DWORD *)(v2 + 368) + 336)); sub_4638F0(*(_DWORD **)(v2 + 380), *(_DWORD *)(*(_DWORD *)(v2 + 364) + 336)); v153 = sub_8FB140(v152, (int)"AutoRunNor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"AutoRunClick"); sub_8FB650(v153, v152, (int)"AutoRunOver"); sub_8FB650(v153, v152, (int)"AutoRunDisable"); v146 = (int *)(v2 + 788); v149 = (volatile LONG *)10; do { v105 = (volatile LONG **)sub_6241B0(0, 0, (int)v153, v2, 19, 0, 0); v106 = (volatile LONG **)*v146; v147 = v105; v143 = v106; if ( v106 != v105 ) { if ( v106 ) { if ( !InterlockedDecrement((volatile LONG *)v106 + 1) && v143 ) (*(void (__stdcall **)(signed int))*v143)(1); v105 = v147; } *v146 = (int)v105; if ( v105 ) InterlockedIncrement((volatile LONG *)v105 + 1); } v107 = (void ***)v146; *(_DWORD *)(*v146 + 272) = dword_AD01E8; sub_8F2EA0(*v107, (const char *)&unk_9EF5B6); ++v146; v149 = (volatile LONG *)((char *)v149 - 1); } while ( v149 ); v143 = sub_8FB140(v152, (int)"IconQstNor", (int)&v151, (int)&v150, v148); v147 = sub_8FB140(v152, (int)"IconQstEpic", (int)&v151, (int)&v150, v148); v146 = (int *)sub_8FB140(v152, (int)"IconQstJob", (int)&v151, (int)&v150, v148); v131 = sub_8FB140(v152, (int)"IconQstEvent", (int)&v151, (int)&v150, v148); v144 = sub_8FB140(v152, (int)"IconQstDaily", (int)&v151, (int)&v150, v148); v145 = sub_8FB140(v152, (int)"NewQuest_Text", (int)&v151, (int)&v150, v148); v108 = sub_8FB140(v152, (int)"NewQuest_ready", (int)&v151, (int)&v150, v148); *(_DWORD *)(v2 + 708) = sub_8F3EB0(v151 - v12, v150 - v13, (int)v108, v2, 0, 0); v130 = sub_8FB140(v152, (int)"IconQstInDun", (int)&v151, (int)&v150, v148); v153 = (volatile LONG **)(v2 + 444); v149 = (volatile LONG *)10; do { v109 = sub_8F3EB0(0, 0, (int)v143, v2, 0, 0); *(v153 - 10) = v109; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v109 + 240))(v109, 0); (*(void (__stdcall **)(_DWORD))(**(v153 - 10) + 256))(0); v110 = sub_8F3EB0(0, 0, (int)v147, v2, 0, 0); *v153 = v110; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v110 + 240))(v110, 0); (*(void (__stdcall **)(_DWORD))(**v153 + 256))(0); v111 = sub_8F3EB0(0, 0, (int)v146, v2, 0, 0); v153[10] = v111; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v111 + 240))(v111, 0); (*(void (__stdcall **)(_DWORD))(*v153[10] + 256))(0); v112 = sub_8F3EB0(0, 0, (int)v131, v2, 0, 0); v153[20] = v112; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v112 + 240))(v112, 0); (*(void (__stdcall **)(_DWORD))(*v153[20] + 256))(0); v113 = sub_8F3EB0(0, 0, (int)v130, v2, 0, 0); v153[30] = v113; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v113 + 240))(v113, 0); (*(void (__stdcall **)(_DWORD))(*v153[30] + 256))(0); v114 = sub_8F3EB0(0, 0, (int)v144, v2, 0, 0); v153[40] = v114; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v114 + 240))(v114, 0); (*(void (__stdcall **)(_DWORD))(*v153[40] + 256))(0); v115 = sub_8F3EB0(0, 0, (int)v145, v2, 0, 0); v153[67] = v115; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v115 + 240))(v115, 0); (*(void (__stdcall **)(_DWORD))(*v153[67] + 256))(0); ++v153; v149 = (volatile LONG *)((char *)v149 - 1); } while ( v149 ); *(_BYTE *)(*(_DWORD *)(v2 + 384) + 380) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 388) + 380) = 0; *(float *)(v2 + 656) = 1.0; *(_DWORD *)(v2 + 348) = 1; sub_8D06E0((float *)(v2 + 644), flt_ACCFCC, 1); v153 = sub_8FB140(v152, (int)"EpicQuestNor", (int)&v151, (int)&v150, v148); sub_8FB650(v153, v152, (int)"EpicQuestClick"); sub_8FB650(v153, v152, (int)"EpicQuestOver"); sub_8FB650(v153, v152, (int)"EpicQuestDisable"); v116 = sub_8FE0F0(v151 - v12, v150 - v13, (int)v153, v2, 6, 0, 0); *(_DWORD *)(v2 + 668) = v116; *((_DWORD *)v116 + 68) = dword_AD01E8; v117 = sub_40A910(-1198947589); sub_8F2EA0(*(void ***)(v2 + 668), v117); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 668) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 668) + 240))(0); v118 = sub_40A910(-1981095447); sub_8F2EA0(*(void ***)(v2 + 668), v118); *(_DWORD *)(v2 + 672) = sub_624080(0); v153 = sub_8FB140(v152, (int)"Btn01Nor", (int)&v151, (int)&v150, 0); sub_8FB650(v153, v152, (int)"Btn01Over"); sub_8FB650(v153, v152, (int)"Btn01Click"); v119 = sub_8FE0F0(v151 - v12, v150 - v13 + 1, (int)v153, v2, 18, 0, 0); *(_DWORD *)(v2 + 780) = v119; *((_DWORD *)v119 + 68) = dword_AD01E8; v120 = sub_40A910(-1311259668); sub_8F2EA0(*(void ***)(v2 + 780), v120); v121 = *v153[9]; v122 = *(volatile LONG ***)(v121 + 20); v145 = *(volatile LONG ***)(v121 + 24); v144 = v122; v123 = sub_421050(7); v124 = sub_8F4A20(v151 - v12, v150 - v13 + 1, (int)v144, (int)v145, v123, v2, 0, 0); *(_DWORD *)(v2 + 784) = v124; (*(void (__thiscall **)(volatile LONG *, signed int))(*v124 + 488))(v124, 5); v125 = **(_DWORD **)(v2 + 784); v126 = sub_40A910(-1160461080); (*(void (__thiscall **)(_DWORD, const CHAR *))(v125 + 472))(*(_DWORD *)(v2 + 784), v126); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 784) + 240))(0); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 784) + 256))(*(_DWORD *)(v2 + 784), 0); LOBYTE(v157) = 1; if ( v133 ) { ((void (__cdecl *)(void *, int, char *, volatile LONG **))loc_40ACF0)(v133, v134, &v136, v145); operator delete(v133); } v127 = (void (__thiscall ***)(_DWORD, signed int))v142; v133 = 0; v134 = 0; v135 = 0; LOBYTE(v157) = 0; if ( !InterlockedDecrement((volatile LONG *)(v142 + 4)) ) (**v127)(v127, 1); v128 = (void (__thiscall ***)(_DWORD, signed int))v152; v157 = -1; if ( v152 && !InterlockedDecrement((volatile LONG *)(v152 + 4)) && v128 ) (**v128)(v128, 1); result = 1; } else { v16 = (void (__thiscall ***)(_DWORD, signed int))v142; LOBYTE(v157) = 0; if ( !InterlockedDecrement((volatile LONG *)(v142 + 4)) ) (**v16)(v16, 1); v17 = (void (__thiscall ***)(_DWORD, signed int))v152; v157 = -1; if ( !v152 || InterlockedDecrement((volatile LONG *)(v152 + 4)) || !v17 ) return 0; (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // AD01E8: using guessed type int dword_AD01E8; //----- (00629700) -------------------------------------------------------- int __thiscall sub_629700(char *this) { char *v1; // esi int v2; // ecx int v3; // edi const CHAR *v4; // eax v1 = this; *(_BYTE *)(*((_DWORD *)this + 96) + 380) = 1; *(_BYTE *)(*((_DWORD *)this + 97) + 380) = 0; v2 = *((_DWORD *)this + 175); *((_DWORD *)v1 + 87) = 1; *((_DWORD *)v1 + 86) = -1; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 176) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 172) + 256))(1); v3 = **((_DWORD **)v1 + 172); v4 = sub_40C190(-284824239); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(*((_DWORD *)v1 + 172), v4); return sub_6275A0(v1); } //----- (006297E0) -------------------------------------------------------- int __thiscall sub_6297E0(int this) { int v1; // esi _DWORD *v2; // ecx char v3; // ST04_1 v1 = this; if ( *(_DWORD *)(this + 352) ) *(_BYTE *)(this + 360) = 0; else *(_BYTE *)(this + 360) = *(_BYTE *)(this + 360) == 0; v2 = *(_DWORD **)(this + 368); v3 = *(_BYTE *)(v1 + 360); *(_DWORD *)(v1 + 352) = 0; sub_466AF0(v2, 0, v3, 0); sub_465130(*(_DWORD **)(v1 + 368)); return sub_6275A0((char *)v1); } //----- (00629840) -------------------------------------------------------- int __thiscall sub_629840(char *this) { bool v1; // sf unsigned __int8 v2; // of v2 = __OFSUB__(++*((_DWORD *)this + 89), 3); v1 = *((_DWORD *)this + 89) - 3 < 0; *((_DWORD *)this + 88) = -1; if ( !(v1 ^ v2) ) *((_DWORD *)this + 89) = 0; return sub_6275A0(this); } //----- (00629870) -------------------------------------------------------- int __thiscall sub_629870(_DWORD *this) { _DWORD *v1; // esi bool v2; // zf _DWORD *v3; // ecx int v4; // eax int result; // eax v1 = this; v2 = this[87] == 2; v3 = (_DWORD *)this[168]; if ( v2 ) v4 = sub_621EF0(); else v4 = sub_621F90(v3); v1[169] = v4; *((_BYTE *)v1 + 360) = 1; v1[88] = -1; v1[89] = 4; sub_6275A0((char *)v1); result = sub_6275A0((char *)v1); if ( !dword_AB76C0 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[195] + 256))(0); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[196] + 256))(0); } return result; } // AB76C0: using guessed type int dword_AB76C0; //----- (006298F0) -------------------------------------------------------- void __thiscall sub_6298F0(_BYTE *this, unsigned __int8 a2) { int v2; // ebx _DWORD **v3; // eax _DWORD *v4; // esi int v5; // esi char *v6; // edi int v7; // eax int v8; // edx int v9; // ecx _DWORD *v10; // esi int v11; // ecx int *v12; // ecx int v13; // ecx _DWORD *v14; // eax signed int v15; // esi int v16; // [esp+8h] [ebp-2Ch] char v17; // [esp+10h] [ebp-24h] int v18; // [esp+14h] [ebp-20h] int v19; // [esp+18h] [ebp-1Ch] int v20; // [esp+1Ch] [ebp-18h] int v21; // [esp+20h] [ebp-14h] _DWORD *v22; // [esp+24h] [ebp-10h] unsigned int v23; // [esp+28h] [ebp-Ch] _BYTE *v24; // [esp+2Ch] [ebp-8h] _DWORD **v25; // [esp+30h] [ebp-4h] v2 = (int)this; v24 = this; this[752] = 0; v3 = (_DWORD **)sub_6CD770(); v4 = v3[1]; v25 = v3; v22 = v4; v23 = 0; if ( (unsigned __int16)sub_53DA30(v4) > 0u ) { while ( 1 ) { v5 = sub_74E2E0(v4, v23); v6 = (char *)(v5 + 4); if ( sub_74BAB0(v25, *(_WORD *)(v5 + 4)) || sub_74B520(v25, *(_WORD *)v6) ) { v7 = sub_74BA80(v25, *(_WORD *)v6); v18 = *(unsigned __int8 *)(v5 + 27); v19 = a2; if ( v7 != 5 || *(_BYTE *)(v5 + 32) != 1 && *(_BYTE *)(v5 + 24) ) { v8 = *(_DWORD *)(v2 + 760); v9 = *(_DWORD *)(v8 + 4); v10 = (_DWORD *)(v2 + 756); if ( !*(_BYTE *)(v9 + 15) ) { do { if ( *(_WORD *)(v9 + 12) >= *(_WORD *)v6 ) { v8 = v9; v9 = *(_DWORD *)v9; } else { v9 = *(_DWORD *)(v9 + 8); } } while ( !*(_BYTE *)(v9 + 15) ); v2 = (int)v24; } v11 = v10[1]; v21 = v8; if ( v8 == v11 || (v2 = (int)v24, *(_WORD *)v6 < *(_WORD *)(v8 + 12)) ) { v20 = v11; v12 = &v20; } else { v12 = &v21; } v13 = *v12; if ( v7 != 5 || v19 - v18 > 150 ) { if ( v13 != *(_DWORD *)(v2 + 760) ) sub_61E430(v10, (int *)&v17, v13); } else if ( v13 == *(_DWORD *)(v2 + 760) ) { v14 = sub_4DD530(v10, v6); sub_4DD450(v10, (int)&v16, v14, 0); *(_BYTE *)(v2 + 752) = 1; } } } v15 = ++v23; if ( v15 >= (unsigned __int16)sub_53DA30(v22) ) break; v4 = v22; } } sub_626B10((_DWORD **)v2, 0, a2); } //----- (00629A70) -------------------------------------------------------- char __thiscall sub_629A70(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // edi volatile LONG **v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char result; // al volatile LONG *v13; // eax volatile LONG **v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi void (__thiscall ***v16)(_DWORD, signed int); // esi int v17; // eax volatile LONG *v18; // eax const CHAR *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax volatile LONG **v22; // eax volatile LONG *v23; // eax volatile LONG **v24; // eax volatile LONG *v25; // eax int v26; // eax volatile LONG *v27; // eax volatile LONG v28; // edx const CHAR *v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax volatile LONG **v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax volatile LONG **v36; // eax volatile LONG *v37; // eax volatile LONG **v38; // eax int v39; // edx void **v40; // eax void **v41; // eax void **v42; // eax void **v43; // eax void **v44; // eax void **v45; // eax int v46; // eax void **v47; // eax void **v48; // eax void **v49; // eax void **v50; // eax void **v51; // eax void **v52; // eax int v53; // eax volatile LONG **v54; // ecx int (*v55)(void); // edx int v56; // eax int v57; // eax volatile LONG **v58; // edi volatile LONG *v59; // eax volatile LONG *v60; // eax volatile LONG *v61; // eax volatile LONG *v62; // eax volatile LONG *v63; // eax volatile LONG **v64; // edi volatile LONG *v65; // eax int v66; // edx volatile LONG **v67; // eax int v68; // edi int v69; // STBC_4 int v70; // STB8_4 int v71; // eax volatile LONG *v72; // eax const char *v73; // eax int v74; // eax volatile LONG **v75; // edx int v76; // edi int v77; // STBC_4 volatile LONG **v78; // STB8_4 volatile LONG **v79; // STB4_4 int v80; // STB0_4 int v81; // eax volatile LONG *v82; // eax int v83; // edi const CHAR *v84; // eax void (__thiscall ***v85)(_DWORD, signed int); // esi void (__thiscall ***v86)(_DWORD, signed int); // esi volatile LONG **v87; // [esp+DCh] [ebp-88h] void *v88; // [esp+E0h] [ebp-84h] int v89; // [esp+E4h] [ebp-80h] int v90; // [esp+E8h] [ebp-7Ch] char v91; // [esp+ECh] [ebp-78h] char v92; // [esp+F0h] [ebp-74h] int v93; // [esp+F4h] [ebp-70h] int v94; // [esp+F8h] [ebp-6Ch] int v95; // [esp+FCh] [ebp-68h] int v96; // [esp+100h] [ebp-64h] int v97; // [esp+104h] [ebp-60h] int v98; // [esp+108h] [ebp-5Ch] volatile LONG **v99; // [esp+10Ch] [ebp-58h] int v100; // [esp+110h] [ebp-54h] volatile LONG **v101; // [esp+114h] [ebp-50h] volatile LONG **v102; // [esp+118h] [ebp-4Ch] int v103; // [esp+11Ch] [ebp-48h] int v104; // [esp+120h] [ebp-44h] volatile LONG *v105; // [esp+124h] [ebp-40h] volatile LONG **v106; // [esp+128h] [ebp-3Ch] int v107; // [esp+12Ch] [ebp-38h] int v108; // [esp+130h] [ebp-34h] int v109; // [esp+134h] [ebp-30h] void *v110; // [esp+138h] [ebp-2Ch] int v111; // [esp+148h] [ebp-1Ch] unsigned int v112; // [esp+14Ch] [ebp-18h] int v113; // [esp+160h] [ebp-4h] v2 = (int)this; v105 = (volatile LONG *)a2; v109 = 0; v3 = dword_BA6BA0; v113 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\EpicQuestWin.nif"); sub_8F66B0(v4, (int)&v109, v3); if ( !v109 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v100 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v113) = 1; if ( v8 ) v9 = *(volatile LONG **)(v8 + 4); else v9 = 0; v10 = sub_8FB140(v109, (int)"Frame", (int)&v108, (int)&v107, v9); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, (int)v105, (int)"EpicQuestWin", 0) ) { LOBYTE(v113) = 0; if ( !InterlockedDecrement((volatile LONG *)(v100 + 4)) ) (**(void (__thiscall ***)(int, signed int))v100)(v100, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v109; v113 = -1; if ( v109 && !InterlockedDecrement((volatile LONG *)(v109 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v103 = v108; v104 = v107; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v109, (int)"Theme", (int)&v108, (int)&v107, v13); else v14 = sub_8FB140(v109, (int)"Theme", (int)&v108, (int)&v107, 0); sub_8F3EB0(v108 - v103, v107 - v104, (int)v14, v2, 0, 0); if ( sub_8F71E0(v109, (int)"WinTitle", &v108, &v107, &v98, &v97) ) { v17 = sub_421050(7); v18 = sub_8F4A20(v108 - v103, v107 - v104, v98, v97, v17, v2, 0, 0); *(_DWORD *)(v2 + 652) = v18; (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 1); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 652) + 468))(&dword_AA8D98); v105 = (volatile LONG *)(**(_DWORD **)(v2 + 652) + 472); v19 = sub_40A910(-1769226266); (*(void (__thiscall **)(_DWORD, const CHAR *))v105)(*(_DWORD *)(v2 + 652), v19); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 652) + 240))(0); v20 = sub_8FB140(v109, (int)"Panel01", (int)&v108, (int)&v107, v9); v21 = sub_8F3EB0(v108 - v103, v107 - v104, (int)v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 240))(v21, 1); v22 = sub_8FB140(v109, (int)"Panel02", (int)&v108, (int)&v107, v9); v23 = sub_8F3EB0(v108 - v103, v107 - v104, (int)v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 240))(v23, 1); v24 = sub_8FB140(v109, (int)"IconSlot", (int)&v108, (int)&v107, v9); v25 = sub_8F3EB0(v108 - v103, v107 - v104, (int)v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v106 = sub_8FB140(v109, (int)"ClsNor", (int)&v108, (int)&v107, v9); sub_8FB650(v106, v109, (int)"ClsClick"); sub_8FB650(v106, v109, (int)"ClsOver"); sub_8FE0F0(v108 - v103, v107 - v104, (int)v106, v2, 3, 0, 0); v105 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("HelpLinkNor") ) { v106 = sub_8FB140(v109, (int)"HelpLinkNor", (int)&v108, (int)&v107, v105); sub_8FB650(v106, v109, (int)"HelpLinkClick"); sub_8FB650(v106, v109, (int)"HelpLinkOver"); sub_8FE0F0(v108 - v103, v107 - v104, (int)v106, v2, 5, 0, 0); } v106 = sub_8FB140(v109, (int)"Title01Nor", (int)&v108, (int)&v107, v9); v26 = sub_421050(7); v27 = sub_8F4A20(v108 - v103, v107 - v104, v98, v97, v26, v2, 0, 0); v28 = *v27; v105 = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(v28 + 488))(v27, 1); (*(void (__stdcall **)(int *))(*v105 + 468))(&dword_AA8C68); v102 = (volatile LONG **)(*v105 + 472); v29 = sub_40A910(-218899379); ((void (__thiscall *)(volatile LONG *, const CHAR *))*v102)(v105, v29); (*(void (__stdcall **)(_DWORD))(*v105 + 240))(0); v30 = sub_8F3EB0(v108 - v103, v107 - v104, (int)v106, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); v88 = 0; v89 = 0; v90 = 0; v92 = 0; v93 = 0; v94 = 0; v95 = 0; v96 = 0; LOBYTE(v113) = 2; v31 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 1); *v31 = (volatile LONG *)1; v31[1] = (volatile LONG *)v109; v106 = v31; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "ColumnBarNor", 0xCu); LOBYTE(v113) = 3; v105 = (volatile LONG *)(v106 + 18); sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "ColumnBarOver", 0xDu); LOBYTE(v113) = 4; sub_40B060((int *)v105, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "ColumnBarClick", 0xEu); LOBYTE(v113) = 5; sub_40B060((int *)v105, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v106 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 2); *v106 = (volatile LONG *)2; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "Column03", 8u); LOBYTE(v113) = 6; sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v32 = v106; *((_BYTE *)v106 + 88) = 1; v32[1] = (volatile LONG *)v109; v106 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 2); *v106 = (volatile LONG *)2; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "Column01", 8u); LOBYTE(v113) = 7; sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v106[1] = (volatile LONG *)v109; v106 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 2); *v106 = (volatile LONG *)2; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "Column02", 8u); LOBYTE(v113) = 8; sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v106[1] = (volatile LONG *)v109; sub_466680(&v88, 0); v33 = sub_8FB140(v109, (int)"SubText01", (int)&v108, (int)&v107, v9); v34 = sub_466330(v108 - v103, v107 - v104, (int)v33, *(float *)&v2, (int **)&v88, 0, 0); *(_DWORD *)(v2 + 624) = v34; *((_DWORD *)v34 + 88) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 624) + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 624), 4); sub_465130(*(_DWORD **)(v2 + 624)); sub_40AE60(&v88); v35 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 1); *v35 = (volatile LONG *)1; v35[1] = (volatile LONG *)v109; v106 = v35; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "ColumnBar02Nor", 0xEu); LOBYTE(v113) = 9; sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v106 = (volatile LONG **)((int (__thiscall *)(void **, signed int))loc_466F40)(&v88, 2); *v106 = (volatile LONG *)2; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_4018E0(&v110, "Column04", 8u); LOBYTE(v113) = 10; sub_40B060((int *)v106 + 18, (const void **)&v110); LOBYTE(v113) = 2; if ( v112 >= 0x10 ) operator delete(v110); v106[1] = (volatile LONG *)v109; v112 = 15; v111 = 0; LOBYTE(v110) = 0; sub_466680(&v88, 0); v36 = sub_8FB140(v109, (int)"SubText02", (int)&v108, (int)&v107, v9); v37 = sub_466330(v108 - v103, v107 - v104, (int)v36, *(float *)&v2, (int **)&v88, 0, 0); *(_DWORD *)(v2 + 628) = v37; *((_BYTE *)v37 + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 628), 4); sub_465130(*(_DWORD **)(v2 + 628)); v38 = sub_8FB140(v109, (int)"SlideBar_SlideBtnMiddle", (int)&v108, (int)&v107, v9); v39 = *(_DWORD *)v109; v106 = v38; v40 = (void **)(*(int (__stdcall **)(const char *))(v39 + 72))("SlideBar_DnBtnNor01"); sub_85AB50(v40, "SlideBar_DnBtn01Nor"); v41 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_DnBtnClick01"); sub_85AB50(v41, "SlideBar_DnBtn01Click"); v42 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_DnBtnOver01"); sub_85AB50(v42, "SlideBar_DnBtn01Over"); v43 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnNor01"); sub_85AB50(v43, "SlideBar_UpBtn01Nor"); v44 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnClick01"); sub_85AB50(v44, "SlideBar_UpBtn01Click"); v45 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnOver01"); sub_85AB50(v45, "SlideBar_UpBtn01Over"); v46 = sub_464310(v109, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", (int)v106, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 632) = v46; *(_DWORD *)(v46 + 312) = 1; *(_DWORD *)(*(_DWORD *)(v2 + 632) + 304) = 1; v47 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_DnBtnNor02"); sub_85AB50(v47, "SlideBar_DnBtn02Nor"); v48 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_DnBtnClick02"); sub_85AB50(v48, "SlideBar_DnBtn02Click"); v49 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_DnBtnOver02"); sub_85AB50(v49, "SlideBar_DnBtn02Over"); v50 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnNor02"); sub_85AB50(v50, "SlideBar_UpBtn02Nor"); v51 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnClick02"); sub_85AB50(v51, "SlideBar_UpBtn02Click"); v52 = (void **)(*(int (__stdcall **)(const char *))(*(_DWORD *)v109 + 72))("SlideBar_UpBtnOver02"); sub_85AB50(v52, "SlideBar_UpBtn02Over"); v53 = sub_464310(v109, (int)"SlideBar02", "SlideBar_UpBtn02", "SlideBar_DnBtn02", (int)v106, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 636) = v53; *(_DWORD *)(v53 + 312) = 2; *(_DWORD *)(*(_DWORD *)(v2 + 636) + 304) = 1; v54 = *(volatile LONG ***)(v2 + 636); v55 = *(int (**)(void))(**(_DWORD **)(v2 + 636) + 168); v105 = **(volatile LONG ***)(v2 + 636); v102 = v54; v56 = v55(); v57 = (*((int (__stdcall **)(int))*v102 + 41))(v56); (*((void (__thiscall **)(_DWORD, int))v105 + 77))(*(_DWORD *)(v2 + 636), v57); v102 = sub_8FB140(v109, (int)"IconQstNor", (int)&v108, (int)&v107, v9); v106 = sub_8FB140(v109, (int)"IconQstEpic", (int)&v108, (int)&v107, v9); v87 = sub_8FB140(v109, (int)"IconQstJob", (int)&v108, (int)&v107, v9); v99 = sub_8FB140(v109, (int)"IconQstEvent", (int)&v108, (int)&v107, v9); v101 = sub_8FB140(v109, (int)"IconQstInDun", (int)&v108, (int)&v107, v9); v58 = (volatile LONG **)(v2 + 396); v105 = (volatile LONG *)13; do { v59 = sub_8F3EB0(0, 0, (int)v102, v2, 0, 0); *(v58 - 13) = v59; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); (*(void (__stdcall **)(_DWORD))(**(v58 - 13) + 256))(0); v60 = sub_8F3EB0(0, 0, (int)v106, v2, 0, 0); *v58 = v60; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v60 + 240))(v60, 0); (*(void (__stdcall **)(_DWORD))(**v58 + 256))(0); v61 = sub_8F3EB0(0, 0, (int)v87, v2, 0, 0); v58[13] = v61; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v61 + 240))(v61, 0); (*(void (__stdcall **)(_DWORD))(*v58[13] + 256))(0); v62 = sub_8F3EB0(0, 0, (int)v99, v2, 0, 0); v58[26] = v62; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v62 + 240))(v62, 0); (*(void (__stdcall **)(_DWORD))(*v58[26] + 256))(0); v63 = sub_8F3EB0(0, 0, (int)v101, v2, 0, 0); v58[39] = v63; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v63 + 240))(v63, 0); (*(void (__stdcall **)(_DWORD))(*v58[39] + 256))(0); ++v58; v105 = (volatile LONG *)((char *)v105 - 1); } while ( v105 ); v64 = sub_8FB140(v109, (int)"BtnNor", (int)&v108, (int)&v107, 0); sub_8FB650(v64, v109, (int)"BtnOver"); sub_8FB650(v64, v109, (int)"BtnClick"); sub_8FB650(v64, v109, (int)"BtnDisable"); v65 = sub_8FE0F0(v108 - v103, v107 - v104 + 1, (int)v64, v2, 4, 0, 0); v66 = v109; *(_DWORD *)(v2 + 604) = v65; v67 = sub_8FB140(v66, (int)"BtnDisable", (int)&v108, (int)&v107, 0); v68 = *(_DWORD *)(v2 + 604); v106 = v67; v69 = (int)v67; v70 = (*(int (__thiscall **)(int))(*(_DWORD *)v68 + 168))(v68); v71 = (*(int (__thiscall **)(int))(*(_DWORD *)v68 + 164))(v68); v72 = sub_8F3EB0(v71, v70, v69, v2, 0, 0); *(_DWORD *)(v2 + 608) = v72; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v72 + 240))(v72, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 608) + 256))(0); *(_DWORD *)(*(_DWORD *)(v2 + 608) + 272) = dword_AD01E8; v73 = sub_40A910(680097434); sub_8F2EA0(*(void ***)(v2 + 608), v73); v74 = *v106[9]; v75 = *(volatile LONG ***)(v74 + 20); v76 = *(_DWORD *)(v2 + 604); v101 = *(volatile LONG ***)(v74 + 24); v99 = v75; v77 = sub_421050(7); v78 = v101; v79 = v99; v80 = (*(int (__thiscall **)(int))(*(_DWORD *)v76 + 168))(v76); v81 = (*(int (__thiscall **)(int))(*(_DWORD *)v76 + 164))(v76); v82 = sub_8F4A20(v81, v80, (int)v79, (int)v78, v77, v2, 0, 0); *(_DWORD *)(v2 + 612) = v82; (*(void (__thiscall **)(volatile LONG *, signed int))(*v82 + 488))(v82, 5); v83 = **(_DWORD **)(v2 + 612); v84 = sub_40A910(-723065369); (*(void (__thiscall **)(_DWORD, const CHAR *))(v83 + 472))(*(_DWORD *)(v2 + 612), v84); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 612) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v113) = 1; if ( v88 ) { ((void (__cdecl *)(void *, int, char *, volatile LONG **))loc_40ACF0)(v88, v89, &v91, v101); operator delete(v88); } v85 = (void (__thiscall ***)(_DWORD, signed int))v100; v88 = 0; v89 = 0; v90 = 0; LOBYTE(v113) = 0; if ( !InterlockedDecrement((volatile LONG *)(v100 + 4)) ) (**v85)(v85, 1); v86 = (void (__thiscall ***)(_DWORD, signed int))v109; v113 = -1; if ( v109 && !InterlockedDecrement((volatile LONG *)(v109 + 4)) && v86 ) (**v86)(v86, 1); result = 1; } else { v15 = (void (__thiscall ***)(_DWORD, signed int))v100; LOBYTE(v113) = 0; if ( !InterlockedDecrement((volatile LONG *)(v100 + 4)) ) (**v15)(v15, 1); v16 = (void (__thiscall ***)(_DWORD, signed int))v109; v113 = -1; if ( !v109 || InterlockedDecrement((volatile LONG *)(v109 + 4)) || !v16 ) return 0; (**v16)(v16, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0062A980) -------------------------------------------------------- int __thiscall sub_62A980(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; sub_6276A0(this); if ( v1[162] <= -1 ) sub_62AA00((_DWORD **)v1, 0); else sub_6261C0(v1, *((_WORD *)v1 + 324)); result = sub_464700((_DWORD *)v1[156]); if ( !result && !v1[155] ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[151] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[152] + 240))(0); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[152] + 256))(0); } return result; } //----- (0062AA00) -------------------------------------------------------- char __thiscall sub_62AA00(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi char result; // al int v4; // eax _DWORD **v5; // eax int v6; // eax void (__stdcall *v7)(signed int, int); // edx int v8; // [esp+0h] [ebp-8h] _DWORD *v9; // [esp+4h] [ebp-4h] v2 = this; sub_466A50(this[157]); result = sub_464B60(v2[156], a2, &v9); if ( result ) { v4 = (int)v9; v2[162] = v9; if ( v4 != -1 && !v2[155] ) { v5 = (_DWORD **)sub_6CD770(); v6 = sub_74E7D0(v5[1], *((_WORD *)v2 + 324)); v7 = *(void (__stdcall **)(signed int, int))(*v2[151] + 240); if ( *(_BYTE *)(v6 + 25) ) { v7(1, v8); (*(void (__stdcall **)(_DWORD))(*v2[152] + 240))(0); (*(void (__cdecl **)(_DWORD))(*v2[152] + 256))(0); } else { v7(0, v8); (*(void (__stdcall **)(signed int))(*v2[152] + 240))(1); (*(void (__cdecl **)(signed int))(*v2[152] + 256))(1); } } result = sub_62A980(v2); } return result; } //----- (0062AAC0) -------------------------------------------------------- int __thiscall sub_62AAC0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // edi const CHAR *v4; // eax v1 = this; *(_BYTE *)(this[96] + 380) = 0; *(_BYTE *)(this[97] + 380) = 1; v2 = this[175]; v1[87] = 2; v1[86] = -1; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[176] + 256))(0); v3 = *(_DWORD *)v1[172]; v4 = sub_40A910(-723065369); (*(void (__thiscall **)(_DWORD, const CHAR *))(v3 + 472))(v1[172], v4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[172] + 256))(0); *((_BYTE *)v1 + 360) = 1; v1[88] = -1; v1[89] = 4; sub_6275A0((char *)v1); return sub_6275A0((char *)v1); } //----- (0062AB80) -------------------------------------------------------- int __thiscall sub_62AB80(char *this, int a2) { int result; // eax result = a2; if ( a2 == 1 ) return sub_629700(this); if ( a2 == 2 ) result = sub_62AAC0(this); return result; } //----- (0062ABB0) -------------------------------------------------------- int __thiscall sub_62ABB0(int this) { int v1; // esi int v2; // eax int v3; // edi int v4; // ST08_4 int v5; // ST04_4 char *v6; // eax char *v7; // eax int result; // eax int v9; // edi const CHAR *v10; // eax v1 = this; v2 = *(_DWORD *)(this + 620); if ( v2 == 1 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 608) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 608) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 604) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 604) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 612) + 256))(0); sub_621F90((_DWORD *)v1); v3 = **(_DWORD **)(v1 + 652); v4 = *(_DWORD *)(v1 + 640); v5 = *(_DWORD *)(v1 + 644); v6 = (char *)sub_40A910(690752653); v7 = sub_7549E0(v6, v5, v4); (*(void (__thiscall **)(_DWORD, char *))(v3 + 472))(*(_DWORD *)(v1 + 652), v7); result = sub_62A980((_DWORD *)v1); } else { if ( !v2 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 604) + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 604) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v1 + 612) + 256))(1); v9 = **(_DWORD **)(v1 + 652); v10 = sub_40A910(-1869709867); (*(void (__thiscall **)(_DWORD, const CHAR *))(v9 + 472))(*(_DWORD *)(v1 + 652), v10); } result = sub_62A980((_DWORD *)v1); } return result; } //----- (0062ACD0) -------------------------------------------------------- void __thiscall sub_62ACD0(_DWORD **this, int a2, unsigned int a3) { _DWORD *v3; // eax switch ( a2 ) { case 0: sub_62AA00(this, a3); break; case 1: sub_623ED0(this); break; case 2: sub_6233A0(this); break; case 3: sub_8F86A0(&unk_BA6B10, this); break; case 4: sub_621980((int)this); goto LABEL_7; case 5: LABEL_7: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "EpicQuestWin"); break; default: return; } } //----- (0062AD60) -------------------------------------------------------- void __userpurge sub_62AD60(int a1@, int a2@, signed int a3@, int a4, unsigned int a5) { bool v5; // zf switch ( a4 ) { case 1: sub_621B20((_DWORD *)a1); break; case 2: sub_629700((char *)a1); break; case 3: *(_BYTE *)(a1 + 752) = 0; sub_62AAC0((_DWORD *)a1); break; case 5: sub_623F20(a1); break; case 6: sub_6218A0((_DWORD **)a1); break; case 8: sub_622330(a1, a2, a3, a5, 0); break; case 9: sub_623E80((_DWORD *)a1); break; case 10: sub_623000((_DWORD *)a1); break; case 11: sub_6297E0(a1); break; case 12: sub_629840((char *)a1); break; case 13: v5 = *(_BYTE *)(a1 + 360) == 0; *(_DWORD *)(a1 + 352) = -1; *(_BYTE *)(a1 + 360) = v5; *(_DWORD *)(a1 + 356) = 4; sub_6275A0((char *)a1); break; case 18: sub_621BE0(a1); break; case 19: a5 = (unsigned __int16)a5; sub_6220E0((unsigned __int16 *)&a5); break; case 20: sub_621870(); break; default: return; } } //----- (0062AE90) -------------------------------------------------------- _DWORD *__cdecl sub_62AE90(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 105) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 105) ); } return result; } //----- (0062AEB0) -------------------------------------------------------- int __cdecl sub_62AEB0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 105); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (0062AED0) -------------------------------------------------------- int __cdecl sub_62AED0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (0062AF10) -------------------------------------------------------- unsigned int __thiscall sub_62AF10(_DWORD *this, _DWORD *a2) { unsigned int result; // eax _DWORD *v3; // edx int v4; // edx int v5; // edx if ( !*a2 ) return -1; result = 0; if ( !this[3] ) return -1; v3 = (_DWORD *)this[1]; while ( *v3 != *a2 ) { ++result; ++v3; if ( result >= this[3] ) return -1; } *(_DWORD *)(this[1] + 4 * result) = 0; v4 = this[3]; --this[4]; v5 = v4 - 1; if ( result == v5 ) this[3] = v5; return result; } //----- (0062AF70) -------------------------------------------------------- void *__thiscall sub_62AF70(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F02A8: using guessed type void *NiTArray::`vftable'; //----- (0062AFA0) -------------------------------------------------------- void *__thiscall sub_62AFA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AutoRunBut::`vftable'; *((_DWORD *)this + 58) = &AutoRunBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0054: using guessed type void *AutoRunBut::`vftable'; // 9F0074: using guessed type void *AutoRunBut::`vftable'; //----- (0062AFE0) -------------------------------------------------------- _DWORD *__thiscall sub_62AFE0(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 105) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 105) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 105); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 105); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (0062B030) -------------------------------------------------------- _DWORD *__thiscall sub_62B030(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 105) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (0062B090) -------------------------------------------------------- int __thiscall sub_62B090(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 105) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (0062B0F0) -------------------------------------------------------- _DWORD *__thiscall sub_62B0F0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 69) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (0062B150) -------------------------------------------------------- _DWORD *__thiscall sub_62B150(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &EpicQuestWin::`vftable'; *((_DWORD *)this + 58) = &EpicQuestWin::`vftable'; v3 = *((_DWORD *)this + 154); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F02B0: using guessed type void *EpicQuestWin::`vftable'; // 9F02CC: using guessed type void *EpicQuestWin::`vftable'; //----- (0062B1F0) -------------------------------------------------------- void __thiscall sub_62B1F0(int this) { int v1; // esi v1 = this; if ( *(_DWORD *)(this + 56) >= 0x10u ) operator delete(*(void **)(this + 36)); *(_DWORD *)(v1 + 56) = 15; *(_DWORD *)(v1 + 52) = 0; *(_BYTE *)(v1 + 36) = 0; if ( *(_DWORD *)(v1 + 28) >= 0x10u ) operator delete(*(void **)(v1 + 8)); *(_DWORD *)(v1 + 24) = 0; *(_DWORD *)(v1 + 28) = 15; *(_BYTE *)(v1 + 8) = 0; } //----- (0062B240) -------------------------------------------------------- int __thiscall sub_62B240(int this) { int v1; // esi int result; // eax v1 = this; if ( *(_DWORD *)(this + 28) >= 0x10u ) operator delete(*(void **)(this + 8)); result = 0; *(_DWORD *)(v1 + 28) = 15; *(_DWORD *)(v1 + 24) = 0; *(_BYTE *)(v1 + 8) = 0; return result; } //----- (0062B270) -------------------------------------------------------- _DWORD *__thiscall sub_62B270(_DWORD *this, _DWORD *a2, int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx int v6; // edi int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 105) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 105) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 105) ); } if ( *((_BYTE *)v3 + 105) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 105) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (0062B300) -------------------------------------------------------- void __thiscall sub_62B300(int this) { int v1; // esi v1 = this; if ( *(_DWORD *)(this + 60) >= 0x10u ) operator delete(*(void **)(this + 40)); *(_DWORD *)(v1 + 60) = 15; *(_DWORD *)(v1 + 56) = 0; *(_BYTE *)(v1 + 40) = 0; if ( *(_DWORD *)(v1 + 32) >= 0x10u ) operator delete(*(void **)(v1 + 12)); *(_DWORD *)(v1 + 28) = 0; *(_DWORD *)(v1 + 32) = 15; *(_BYTE *)(v1 + 12) = 0; } //----- (0062B350) -------------------------------------------------------- int __thiscall sub_62B350(int this) { int v1; // esi int result; // eax v1 = this; if ( *(_DWORD *)(this + 32) >= 0x10u ) operator delete(*(void **)(this + 12)); result = 0; *(_DWORD *)(v1 + 32) = 15; *(_DWORD *)(v1 + 28) = 0; *(_BYTE *)(v1 + 12) = 0; return result; } //----- (0062B380) -------------------------------------------------------- int *__thiscall sub_62B380(int *this, int a2, int a3, void *a4, int a5, int a6, int a7, int a8) { int *v8; // esi _DWORD *v9; // ecx v8 = this; v9 = this + 2; v9[5] = 15; v9[4] = 0; *(_BYTE *)v9 = 0; v8[1] = a3; *v8 = a2; sub_4018E0(v9, a4, strlen((const char *)a4)); v8[9] = a5; v8[12] = a8; v8[10] = a6; v8[11] = a7; return v8; } //----- (0062B410) -------------------------------------------------------- int *__thiscall sub_62B410(int *this, int a2, int a3, void *a4, void *a5, int a6, int a7, int a8, int a9, int a10, char a11) { int *v11; // esi _DWORD *v12; // ecx v11 = this; v12 = this + 2; v12[5] = 15; v12[4] = 0; *(_BYTE *)v12 = 0; v11[14] = 15; v11[13] = 0; *((_BYTE *)v11 + 36) = 0; *v11 = a2; v11[1] = a3; sub_4018E0(v12, a4, strlen((const char *)a4)); sub_4018E0(v11 + 9, a5, strlen((const char *)a5)); v11[16] = a6; v11[17] = a7; v11[18] = a8; v11[19] = a9; v11[20] = a10; *((_BYTE *)v11 + 84) = a11; return v11; } //----- (0062B4E0) -------------------------------------------------------- const void **__thiscall sub_62B4E0(const void **this, int a2) { const void **v2; // esi int v3; // ecx int v4; // ecx v2 = this; *this = *(const void **)a2; this[1] = *(const void **)(a2 + 4); v3 = (int)(this + 2); *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, (const void **)(a2 + 8), 0, (void *)0xFFFFFFFF); v4 = (int)(v2 + 9); *(_DWORD *)(v4 + 20) = 15; *(_DWORD *)(v4 + 16) = 0; *(_BYTE *)v4 = 0; sub_4017F0(v2 + 9, (const void **)(a2 + 36), 0, (void *)0xFFFFFFFF); v2[16] = *(const void **)(a2 + 64); v2[17] = *(const void **)(a2 + 68); v2[18] = *(const void **)(a2 + 72); v2[19] = *(const void **)(a2 + 76); v2[20] = *(const void **)(a2 + 80); *((_BYTE *)v2 + 84) = *(_BYTE *)(a2 + 84); return v2; } //----- (0062B5A0) -------------------------------------------------------- void *__thiscall sub_62B5A0(void *this, char a2) { void *v2; // esi v2 = this; sub_624310(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0062B5D0) -------------------------------------------------------- _DWORD *__thiscall sub_62B5D0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); v3 = (int)(this + 3); v2[2] = *(_DWORD *)(a2 + 8); *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)v3, (const void **)(a2 + 12), 0, (void *)0xFFFFFFFF); v2[10] = *(_DWORD *)(a2 + 40); v2[11] = *(_DWORD *)(a2 + 44); v2[12] = *(_DWORD *)(a2 + 48); v2[13] = *(_DWORD *)(a2 + 52); return v2; } //----- (0062B630) -------------------------------------------------------- _DWORD *__thiscall sub_62B630(_DWORD *this, unsigned __int8 *a2, int a3) { _DWORD *v3; // esi int v4; // ecx v3 = this; *this = *a2; this[1] = *(_DWORD *)a3; v4 = (int)(this + 3); v3[2] = *(_DWORD *)(a3 + 4); *(_DWORD *)(v4 + 20) = 15; *(_DWORD *)(v4 + 16) = 0; *(_BYTE *)v4 = 0; sub_4017F0((const void **)v4, (const void **)(a3 + 8), 0, (void *)0xFFFFFFFF); v3[10] = *(_DWORD *)(a3 + 36); v3[11] = *(_DWORD *)(a3 + 40); v3[12] = *(_DWORD *)(a3 + 44); v3[13] = *(_DWORD *)(a3 + 48); return v3; } //----- (0062B690) -------------------------------------------------------- int __thiscall sub_62B690(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi _DWORD *v22; // edx int v23; // esi int v24; // esi _DWORD *v25; // esi int v26; // edi _DWORD *v27; // edi int v28; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x2C8590A ) { if ( *((_DWORD *)a5 + 18) >= 0x10u ) operator delete(*((void **)a5 + 13)); *((_DWORD *)a5 + 18) = 15; *((_DWORD *)a5 + 17) = 0; *((_BYTE *)a5 + 52) = 0; if ( *((_DWORD *)a5 + 11) >= 0x10u ) operator delete(*((void **)a5 + 6)); *((_DWORD *)a5 + 11) = 15; *((_DWORD *)a5 + 10) = 0; *((_BYTE *)a5 + 24) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 104) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 104) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 105) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 104) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 104) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 105) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_54: v6 = a5; v17[1] = v18; continue; } } else { v13 = *v12; if ( *(_BYTE *)(v13 + 104) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v22 = *(_DWORD **)v11; *v10 = v22[2]; v23 = v22[2]; if ( !*(_BYTE *)(v23 + 105) ) *(_DWORD *)(v23 + 4) = v10; v22[1] = v10[1]; v24 = this[1]; if ( v10 == *(_DWORD **)(v24 + 4) ) { *(_DWORD *)(v24 + 4) = v22; } else { v25 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v25[2] ) v25[2] = v22; else *v25 = v22; } v22[2] = v10; v10[1] = v22; } *(_BYTE *)(v10[1] + 104) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 104) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 105) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v26 = this[1]; if ( v17 == *(_DWORD **)(v26 + 4) ) { *(_DWORD *)(v26 + 4) = v18; } else { v27 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v27 ) *v27 = v18; else v27[2] = v18; } *v18 = v17; goto LABEL_54; } } *(_BYTE *)(v11 + 104) = 1; *(_BYTE *)(v13 + 104) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 104) = 0; v10 = *(_DWORD **)(v10[1] + 4); } while ( !*(_BYTE *)(v10[1] + 104) ); } v28 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v28 + 104) = 1; return result; } //----- (0062B8F0) -------------------------------------------------------- int __thiscall sub_62B8F0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x4924923 ) { if ( *((_DWORD *)a5 + 11) >= 0x10u ) operator delete(*((void **)a5 + 6)); *((_DWORD *)a5 + 11) = 15; *((_DWORD *)a5 + 10) = 0; *((_BYTE *)a5 + 24) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 68) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 68) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 69) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 69) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_53: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 68) = 1; *(_BYTE *)(v13 + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 68) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 69) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 69) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_53; } *(_BYTE *)(v11 + 68) = 1; *(_BYTE *)(v22 + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 68) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 68) = 1; return result; } //----- (0062BB40) -------------------------------------------------------- int __thiscall sub_62BB40(_DWORD *this, int a2, void *a3) { int *v3; // edi int v4; // ebx int *v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // eax int v11; // ecx int **v12; // ecx char v13; // cl _BYTE *v14; // eax unsigned int v15; // eax int result; // eax _DWORD *v17; // [esp+Ch] [ebp-4h] v3 = (int *)a3; v17 = this; if ( *((_BYTE *)a3 + 105) ) std::_Xout_of_range("invalid map/set iterator"); sub_62AFE0(&a3); if ( *(_BYTE *)(*v3 + 105) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 105) ) *(_DWORD *)(v4 + 4) = v6; v7 = v17; v8 = v17[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v17[1] == v3 ) { if ( *(_BYTE *)(v4 + 105) ) { v9 = (_DWORD *)v6; } else { v9 = sub_62AE90((_DWORD *)v4); v7 = v17; } *(_DWORD *)v7[1] = v9; } if ( *(int **)(v7[1] + 8) == v3 ) { if ( *(_BYTE *)(v4 + 105) ) { *(_DWORD *)(v7[1] + 8) = v6; } else { v10 = sub_62AEB0(v4); v7 = v17; *(_DWORD *)(v17[1] + 8) = v10; } } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 105) ) { v4 = *v3; goto LABEL_8; } v5 = (int *)a3; v4 = *((_DWORD *)a3 + 2); if ( a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *v5 = *v3; if ( v5 == (int *)v3[2] ) { v6 = (int)v5; } else { v6 = v5[1]; if ( !*(_BYTE *)(v4 + 105) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; v5[2] = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v17[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int **)v3[1]; if ( *v12 == v3 ) *v12 = v5; else v12[2] = v5; } v5[1] = v3[1]; v13 = *((_BYTE *)v5 + 104); *((_BYTE *)v5 + 104) = *((_BYTE *)v3 + 104); *((_BYTE *)v3 + 104) = v13; v7 = v17; LABEL_35: if ( *((_BYTE *)v3 + 104) == 1 ) { for ( ; v4 != *(_DWORD *)(v7[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 104) != 1 ) break; v14 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v14 = *(_BYTE **)(v6 + 8); if ( !v14[104] ) { v14[104] = 1; *(_BYTE *)(v6 + 104) = 0; sub_62B030(v7, v6); v14 = *(_BYTE **)(v6 + 8); v7 = v17; } if ( v14[105] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v14 + 104) != 1 || *(_BYTE *)(*((_DWORD *)v14 + 2) + 104) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 104) == 1 ) { *(_BYTE *)(*(_DWORD *)v14 + 104) = 1; v14[104] = 0; sub_62B090(v7, v14); v14 = *(_BYTE **)(v6 + 8); v7 = v17; } v14[104] = *(_BYTE *)(v6 + 104); *(_BYTE *)(v6 + 104) = 1; *(_BYTE *)(*((_DWORD *)v14 + 2) + 104) = 1; sub_62B030(v7, v6); break; } } else { if ( !v14[104] ) { v14[104] = 1; *(_BYTE *)(v6 + 104) = 0; sub_62B090(v7, (_DWORD *)v6); v14 = *(_BYTE **)v6; v7 = v17; } if ( v14[105] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 104) != 1 || *(_BYTE *)(*(_DWORD *)v14 + 104) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v14 + 104) == 1 ) { *(_BYTE *)(*((_DWORD *)v14 + 2) + 104) = 1; v14[104] = 0; sub_62B030(v7, (int)v14); v14 = *(_BYTE **)v6; v7 = v17; } v14[104] = *(_BYTE *)(v6 + 104); *(_BYTE *)(v6 + 104) = 1; *(_BYTE *)(*(_DWORD *)v14 + 104) = 1; sub_62B090(v7, (_DWORD *)v6); break; } } v14[104] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 104) = 1; } if ( (unsigned int)v3[18] >= 0x10 ) operator delete((void *)v3[13]); v3[18] = 15; v3[17] = 0; *((_BYTE *)v3 + 52) = 0; if ( (unsigned int)v3[11] >= 0x10 ) operator delete((void *)v3[6]); v3[11] = 15; v3[10] = 0; *((_BYTE *)v3 + 24) = 0; operator delete(v3); v15 = v17[2]; if ( v15 > 0 ) v17[2] = v15 - 1; result = a2; *(_DWORD *)a2 = a3; return result; } //----- (0062BDE0) -------------------------------------------------------- int *__thiscall sub_62BDE0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl void **v14; // eax _DWORD *i; // ecx _BYTE *v16; // eax int v17; // eax int *result; // eax void **v19; // [esp+10h] [ebp-8h] _DWORD *v20; // [esp+14h] [ebp-4h] v3 = (int *)a3; v20 = this; if ( *(_BYTE *)(a3 + 69) ) std::_Xout_of_range("invalid map/set iterator"); v19 = (void **)a3; sub_7493D0(&a3); if ( *(_BYTE *)(*v3 + 69) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 69) ) *(_DWORD *)(v4 + 4) = v6; v7 = v20; v8 = v20[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v20[1] == v3 ) { if ( *(_BYTE *)(v4 + 69) ) { v9 = (_DWORD *)v6; } else { v9 = sub_7493B0((_DWORD *)v4); v7 = v20; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 69) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_62AED0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 69) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 69) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v20[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 68); *(_BYTE *)(v5 + 68) = *((_BYTE *)v3 + 68); *((_BYTE *)v3 + 68) = v13; LABEL_35: v14 = v19; if ( *((_BYTE *)v19 + 68) == 1 ) { for ( i = v20; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 68) != 1 ) break; v16 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v16 = *(_BYTE **)(v6 + 8); if ( !v16[68] ) { v16[68] = 1; *(_BYTE *)(v6 + 68) = 0; sub_62B0F0(i, v6); v16 = *(_BYTE **)(v6 + 8); i = v20; } if ( v16[69] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v16 + 68) != 1 || *(_BYTE *)(*((_DWORD *)v16 + 2) + 68) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 68) == 1 ) { *(_BYTE *)(*(_DWORD *)v16 + 68) = 1; v16[68] = 0; sub_749480(i, v16); v16 = *(_BYTE **)(v6 + 8); i = v20; } v16[68] = *(_BYTE *)(v6 + 68); *(_BYTE *)(v6 + 68) = 1; *(_BYTE *)(*((_DWORD *)v16 + 2) + 68) = 1; sub_62B0F0(i, v6); break; } } else { if ( !v16[68] ) { v16[68] = 1; *(_BYTE *)(v6 + 68) = 0; sub_749480(i, (_DWORD *)v6); v16 = *(_BYTE **)v6; i = v20; } if ( v16[69] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v16 + 2) + 68) != 1 || *(_BYTE *)(*(_DWORD *)v16 + 68) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v16 + 68) == 1 ) { *(_BYTE *)(*((_DWORD *)v16 + 2) + 68) = 1; v16[68] = 0; sub_62B0F0(i, (int)v16); v16 = *(_BYTE **)v6; i = v20; } v16[68] = *(_BYTE *)(v6 + 68); *(_BYTE *)(v6 + 68) = 1; *(_BYTE *)(*(_DWORD *)v16 + 68) = 1; sub_749480(i, (_DWORD *)v6); break; } } v16[68] = 0; LABEL_53: v4 = v6; } v14 = v19; *(_BYTE *)(v4 + 68) = 1; } if ( (unsigned int)v14[11] >= 0x10 ) operator delete(v14[6]); v19[11] = (void *)15; v19[10] = 0; *((_BYTE *)v19 + 24) = 0; operator delete(v19); v17 = v20[2]; if ( v17 ) v20[2] = v17 - 1; result = a2; *a2 = a3; return result; } //----- (0062C060) -------------------------------------------------------- void __stdcall sub_62C060(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 105) ) { do { sub_62C060(v2[2]); v2 = (void **)*v2; if ( (unsigned int)v1[18] >= 0x10 ) operator delete(v1[13]); v1[18] = (void *)15; v1[17] = 0; *((_BYTE *)v1 + 52) = 0; if ( (unsigned int)v1[11] >= 0x10 ) operator delete(v1[6]); v1[11] = (void *)15; v1[10] = 0; *((_BYTE *)v1 + 24) = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 105) ); } } //----- (0062C0E0) -------------------------------------------------------- void __stdcall sub_62C0E0(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 69) ) { do { sub_62C0E0(v2[2]); v2 = (void **)*v2; if ( (unsigned int)v1[11] >= 0x10 ) operator delete(v1[6]); v1[11] = (void *)15; v1[10] = 0; *((_BYTE *)v1 + 24) = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 69) ); } } //----- (0062C140) -------------------------------------------------------- _DWORD *__thiscall sub_62C140(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax char *v6; // ST04_4 int v8; // [esp+0h] [ebp-38h] void **v9; // [esp+10h] [ebp-28h] void *v10; // [esp+1Ch] [ebp-1Ch] _DWORD *v11; // [esp+20h] [ebp-18h] void *v12; // [esp+24h] [ebp-14h] int *v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v13 = &v8; v2 = this; v3 = operator new(0x6Cu); v4 = v3; v12 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a2); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v3[2] = v2[1]; v5 = v3 + 3; *((_WORD *)v4 + 52) = 0; v14 = 0; v11 = v4 + 3; v10 = v4 + 3; LOBYTE(v14) = 1; if ( v5 ) { v6 = a2 + 4; *v5 = *(_DWORD *)a2; sub_62B4E0((const void **)v4 + 4, (int)v6); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0062C210) -------------------------------------------------------- _DWORD *__thiscall sub_62C210(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v5; // [esp+0h] [ebp-38h] void **v6; // [esp+10h] [ebp-28h] void *v7; // [esp+1Ch] [ebp-1Ch] _DWORD *v8; // [esp+20h] [ebp-18h] void *v9; // [esp+24h] [ebp-14h] int *v10; // [esp+28h] [ebp-10h] int v11; // [esp+34h] [ebp-4h] v10 = &v5; v2 = this; v3 = operator new(0x48u); v9 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a2); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v3[2] = v2[1]; *((_WORD *)v3 + 34) = 0; v11 = 0; v8 = v3 + 3; v7 = v3 + 3; LOBYTE(v11) = 1; if ( v3 != (_DWORD *)-12 ) sub_62B5D0(v3 + 3, (int)a2); return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0062C2E0) -------------------------------------------------------- int __thiscall sub_62C2E0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // esi void **v5; // eax void *v6; // ecx _DWORD *v7; // ecx int result; // eax void *v9; // edx int v10; // eax void *v11; // ecx _BYTE *j; // eax int i; // eax int v14; // [esp+4h] [ebp-4h] v4 = this; v5 = (void **)this[1]; v6 = a3; if ( a3 != *v5 || (void **)a4 != v5 ) { for ( ; a3 != (void *)a4; v6 = a3 ) { v9 = v6; if ( !*((_BYTE *)v6 + 105) ) { v10 = *((_DWORD *)v6 + 2); if ( *(_BYTE *)(v10 + 105) ) { for ( i = *((_DWORD *)v6 + 1); !*(_BYTE *)(i + 105); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(void **)(i + 8) ) break; v6 = (void *)i; } a3 = (void *)i; } else { v11 = (void *)*((_DWORD *)v6 + 2); for ( j = *(_BYTE **)v10; !j[105]; j = *(_BYTE **)j ) v11 = j; a3 = v11; } } sub_62BB40(v4, (int)&v14, v9); } result = a2; *(_DWORD *)a2 = v6; } else { sub_62C060(v5[1]); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (_DWORD *)v4[1]; result = a2; v4[2] = 0; *(_DWORD *)a2 = *v7; } return result; } //----- (0062C3A0) -------------------------------------------------------- int *__thiscall sub_62C3A0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 69) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 69) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 69); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_62BDE0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_62C0E0(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (0062C460) -------------------------------------------------------- int __thiscall sub_62C460(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // ecx bool v7; // zf int v8; // edi int v9; // ecx int result; // eax v3 = this; v4 = sub_62C140(this, a3); v5 = v3[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 105) == 0; LOBYTE(a3) = 1; if ( v7 ) { v8 = v4[3]; do { v5 = v6; LOBYTE(a3) = v8 < *(_DWORD *)(v6 + 12); if ( (_BYTE)a3 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 105) ); } v9 = *(_DWORD *)sub_62B690(v3, (int)&a3, (char)a3, v5, v4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (0062C4D0) -------------------------------------------------------- int __thiscall sub_62C4D0(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // ecx bool v7; // zf int v8; // edi int v9; // ecx int result; // eax v3 = this; v4 = sub_62C210(this, a3); v5 = v3[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 69) == 0; LOBYTE(a3) = 1; if ( v7 ) { v8 = v4[3]; do { v5 = v6; LOBYTE(a3) = v8 < *(_DWORD *)(v6 + 12); if ( (_BYTE)a3 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 69) ); } v9 = *(_DWORD *)sub_62B8F0(v3, (int)&a3, (char)a3, v5, v4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (0062C540) -------------------------------------------------------- void __thiscall sub_62C540(_DWORD *this) { _DWORD *v1; // esi void **v2; // eax void *v3; // ST04_4 int v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (void **)this[1]; v3 = *v2; v6 = 0; sub_62C2E0(this, (int)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (0062C5A0) -------------------------------------------------------- void __thiscall sub_62C5A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_62C3A0(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (0062C680) -------------------------------------------------------- void __thiscall sub_62C680(_BYTE *this, int a2) { this[254] = 1; } //----- (0062C690) -------------------------------------------------------- char __thiscall sub_62C690(int this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax int v5; // edi v2 = (_DWORD *)this; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 376) + 452))(*(_DWORD *)(this + 476)); v3 = *(_DWORD *)(v2[94] + 288); if ( v3 ) v4 = *(_DWORD *)(v3 + 8); else v4 = 0; v5 = **(_DWORD **)(v4 + 12); sub_868090(**(_DWORD **)(v4 + 12), 0, 0, 0, v2 + 120); sub_868090(v5, 0, 1, 0, v2 + 124); sub_868090(v5, 0, 2, 0, v2 + 126); return sub_868090(v5, 0, 3, 0, v2 + 122); } //----- (0062C720) -------------------------------------------------------- _DWORD *__thiscall sub_62C720(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *result; // eax _WORD **v5; // edi signed int v6; // ebx unsigned int v7; // edi int v8; // edx int v9; // ecx int v10; // [esp+4h] [ebp-8h] int v11; // [esp+8h] [ebp-4h] v3 = this; result = (_DWORD *)(*(int (**)(void))(*this + 260))(); if ( (_BYTE)result ) { v5 = (_WORD **)(v3 + 96); v6 = 20; do { sub_5D5B70(*v5, 0, 1); ++v5; --v6; } while ( v6 ); v7 = 20 * (v3[116] + 10 * v3[117]); v10 = 20 * (v3[116] + 10 * v3[117]); sub_4DD710(v3 + 86, (int **)&v11, &v10); v8 = v3[87]; v9 = v11; if ( v11 != v8 ) goto LABEL_15; result = *(_DWORD **)(v8 + 4); v9 = v3[87]; while ( !*((_BYTE *)result + 21) ) { if ( v7 >= result[3] ) { result = (_DWORD *)result[2]; } else { v9 = (int)result; result = (_DWORD *)*result; } } v11 = v9; if ( v9 != v8 ) { LABEL_15: do { result = *(_DWORD **)(v9 + 12); if ( (unsigned int)result >= v7 + 20 ) break; sub_5D5EA0(v3[(_DWORD)&result[v7 / 0xFFFFFFFC] + 96], v7, *(unsigned __int16 *)(v9 + 16)); result = sub_717D90(&v11); v9 = v11; } while ( v11 != v3[87] ); } } return result; } //----- (0062C800) -------------------------------------------------------- _DWORD *__thiscall sub_62C800(_DWORD *this, int a2) { int v2; // ST04_4 v2 = this[117]; this[116] = a2; return sub_62C720(this, a2, v2); } //----- (0062C820) -------------------------------------------------------- _DWORD *__thiscall sub_62C820(_DWORD *this, int a2) { this[117] = a2; return sub_62C720(this, this[116], a2); } //----- (0062C840) -------------------------------------------------------- unsigned int __thiscall sub_62C840(_DWORD *this, __int16 a2) { _DWORD *v2; // esi unsigned int v3; // edi _DWORD *v4; // eax int v5; // ecx int v6; // edx unsigned int result; // eax char v8[4]; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; if ( this[88] ) { v9 = this[87]; sub_4DC030(&v9); v3 = *(_DWORD *)(v9 + 12) + 1; } else { v3 = 0; } *(_DWORD *)v8 = v3; LOWORD(v9) = a2; v4 = sub_62E110(v2 + 86, v8); sub_62DDE0(v2 + 86, (int)v8, v4, 0); v5 = v2[117]; v6 = v2[116]; result = 20 * (v6 + 10 * v5); if ( result <= v3 ) { result += 20; if ( v3 < result ) result = (unsigned int)sub_62C720(v2, v6, v5); } return result; } //----- (0062C8E0) -------------------------------------------------------- LONG __thiscall sub_62C8E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi _DWORD *v4; // ST08_4 _DWORD *v5; // ST04_4 char v7; // [esp+10h] [ebp-18h] _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD *v9; // [esp+18h] [ebp-10h] int v10; // [esp+24h] [ebp-4h] v1 = this; v9 = this; *this = &MonsterCardInventoryWin::`vftable'; this[58] = &MonsterCardInventoryWin::`vftable'; v2 = this[119]; v10 = 2; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[119] = 0; } v3 = v1[119]; LOBYTE(v10) = 1; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v8 = v1 + 86; v4 = (_DWORD *)v1[87]; v5 = *(_DWORD **)v1[87]; LOBYTE(v10) = 3; sub_6CDE90(v1 + 86, (int *)&v7, v5, v4); operator delete((void *)v1[87]); v10 = -1; return sub_8F10F0(v1); } // 9F0934: using guessed type void *MonsterCardInventoryWin::`vftable'; // 9F0954: using guessed type void *MonsterCardInventoryWin::`vftable'; //----- (0062C9D0) -------------------------------------------------------- int __thiscall sub_62C9D0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi v1 = this; *(_DWORD *)(this[91] + 344) = 0; v2 = 0; do sub_62C840(v1, v2++ + 3); while ( v2 < 0x1E ); sub_62C720(v1, v1[116], v1[117]); sub_62C690((int)v1, 0); return sub_85BED0((_DWORD **)v1, 0.0, 1); } //----- (0062CA30) -------------------------------------------------------- _DWORD *__thiscall sub_62CA30(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] void *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MonsterCardInventoryWin::`vftable'; v1[58] = &MonsterCardInventoryWin::`vftable'; v7 = 0; v1[88] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[87] = v2; *v2 = v2; *(_DWORD *)(v1[87] + 4) = v1[87]; *(_DWORD *)(v1[87] + 8) = v1[87]; *(_BYTE *)(v1[87] + 20) = 1; *(_BYTE *)(v1[87] + 21) = 1; v1[116] = 0; v1[117] = 0; *((_BYTE *)v1 + 472) = 0; v1[119] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F0934: using guessed type void *MonsterCardInventoryWin::`vftable'; // 9F0954: using guessed type void *MonsterCardInventoryWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0062CC40) -------------------------------------------------------- int __thiscall sub_62CC40(_DWORD **this, int a2) { int v2; // esi void (__stdcall *v3)(int); // edx int result; // eax _DWORD *v5; // eax _DWORD *v6; // edi int v7; // edx unsigned __int16 v8; // ST10_2 _DWORD *v9; // eax bool v10; // cf int v11; // eax int v12; // ebx unsigned int v13; // eax int v14; // esi void (__thiscall ***v15)(_DWORD, signed int); // esi int *v16; // ecx int *v17; // eax int i; // eax _DWORD *v19; // [esp+1Ch] [ebp-E4h] int v20; // [esp+24h] [ebp-DCh] int v21; // [esp+28h] [ebp-D8h] _DWORD *v22; // [esp+2Ch] [ebp-D4h] void **v23; // [esp+34h] [ebp-CCh] char v24; // [esp+38h] [ebp-C8h] void **v25; // [esp+44h] [ebp-BCh] _DWORD *v26; // [esp+48h] [ebp-B8h] _DWORD *v27; // [esp+54h] [ebp-ACh] _DWORD *v28; // [esp+58h] [ebp-A8h] _DWORD *v29; // [esp+64h] [ebp-9Ch] _DWORD *v30; // [esp+68h] [ebp-98h] int *v31; // [esp+6Ch] [ebp-94h] int v32; // [esp+70h] [ebp-90h] int v33; // [esp+74h] [ebp-8Ch] void **v34; // [esp+7Ch] [ebp-84h] int v35; // [esp+88h] [ebp-78h] void ***v36; // [esp+B4h] [ebp-4Ch] int v37; // [esp+B8h] [ebp-48h] char v38; // [esp+BCh] [ebp-44h] char v39; // [esp+C4h] [ebp-3Ch] void *v40; // [esp+C8h] [ebp-38h] int v41; // [esp+CCh] [ebp-34h] _DWORD **v42; // [esp+D0h] [ebp-30h] void *v43; // [esp+D4h] [ebp-2Ch] unsigned int v44; // [esp+E8h] [ebp-18h] int v45; // [esp+FCh] [ebp-4h] v2 = (int)this; v41 = 0; v3 = *(void (__stdcall **)(int))(*this[90] + 240); v42 = this; v3(a2); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 360) + 256))(a2); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 364) + 240))(a2); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 364) + 256))(a2); (*(void (__stdcall **)(int))(**(_DWORD **)(v2 + 368) + 240))(a2); result = (*(int (__stdcall **)(int))(**(_DWORD **)(v2 + 368) + 256))(a2); if ( (_BYTE)a2 ) { sub_466A50(*(_DWORD **)(v2 + 364)); v5 = *(_DWORD **)(v2 + 348); v6 = (_DWORD *)*v5; if ( (_DWORD *)*v5 != v5 ) { do { v19 = &unk_A41204; v22 = &unk_9C6DA8; v41 |= 1u; v45 = 0; v34 = &std::basic_istream>::`vftable'; v20 = 0; v21 = 0; sub_423A10(&v34); v36 = &v23; v37 = 0; v38 = sub_424CA0(&v34, 32); if ( !v36 ) sub_405C10(&v34, v35 | 4, 0); *(_DWORD **)((char *)&v22 + v22[1]) = &std::basic_ostream>::`vftable'; *(_DWORD **)((char *)&v19 + v19[1]) = &std::basic_iostream>::`vftable'; v7 = v19[1]; v45 = 5; *(_DWORD **)((char *)&v19 + v7) = &std::basic_stringstream,std::allocator>::`vftable'; sub_423F50(&v23); v23 = &std::basic_stringbuf,std::allocator>::`vftable'; v32 = 0; v33 = 0; v8 = *((_WORD *)v6 + 8); v45 = 7; sub_62DF20(&v22, v8); v9 = sub_62E1B0(&v19, &v43); v10 = v9[5] < 0x10u; LOBYTE(v45) = 8; if ( !v10 ) v9 = (_DWORD *)*v9; ((void (__thiscall *)(_DWORD, _DWORD *))loc_466CA0)(*(_DWORD *)(v2 + 364), v9); LOBYTE(v45) = 7; if ( v44 >= 0x10 ) operator delete(v43); v11 = sub_464700(*(_DWORD **)(v2 + 364)); sub_464C80(*(_DWORD **)(v2 + 364), v11 - 1, 0, 0, 0, 0); *(_DWORD **)((char *)&v19 + v19[1]) = &std::basic_stringstream,std::allocator>::`vftable'; v45 = 9; v23 = &std::basic_stringbuf,std::allocator>::`vftable'; if ( v33 & 1 ) operator delete(*v25); *v25 = 0; *v27 = 0; *v29 = 0; *v26 = 0; *v28 = 0; *v30 = 0; v33 &= 0xFFFFFFFE; v32 = 0; v23 = &std::basic_streambuf>::`vftable'; LOBYTE(v45) = 10; v40 = v31; if ( v31 ) { v12 = *v31; if ( *v31 ) { std::_Lockit::_Lockit((std::_Lockit *)&v39, 0); v13 = *(_DWORD *)(v12 + 4); if ( v13 && v13 < 0xFFFFFFFF ) *(_DWORD *)(v12 + 4) = v13 - 1; v14 = -(*(_DWORD *)(v12 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v39); v15 = (void (__thiscall ***)(_DWORD, signed int))(v12 & v14); if ( v15 ) (**v15)(v15, 1); v2 = (int)v42; } operator delete(v40); } LOBYTE(v45) = 9; std::_Mutex::~_Mutex((std::_Mutex *)&v24); *(_DWORD **)((char *)&v19 + v19[1]) = &std::basic_iostream>::`vftable'; *(_DWORD **)((char *)&v22 + v22[1]) = &std::basic_ostream>::`vftable'; *(_DWORD **)((char *)&v19 + v19[1]) = &std::basic_istream>::`vftable'; v45 = -1; v34 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v34); if ( !*((_BYTE *)v6 + 21) ) { v16 = (int *)v6[2]; if ( *((_BYTE *)v16 + 21) ) { for ( i = v6[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD **)(i + 8) ) break; v6 = (_DWORD *)i; } v6 = (_DWORD *)i; } else { v17 = (int *)*v16; if ( !*(_BYTE *)(*v16 + 21) ) { do { v16 = v17; v17 = (int *)*v17; } while ( !*((_BYTE *)v17 + 21) ); } v6 = v16; } } } while ( v6 != *(_DWORD **)(v2 + 348) ); } sub_4638F0(*(_DWORD **)(v2 + 368), *(_DWORD *)(*(_DWORD *)(v2 + 364) + 336)); result = sub_465130(*(_DWORD **)(v2 + 364)); } return result; } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB514: using guessed type void *std::basic_streambuf>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; // 9F092C: using guessed type void *std::basic_stringstream,std::allocator>::`vftable'; //----- (0062D050) -------------------------------------------------------- void __thiscall sub_62D050(_DWORD **this, int a2) { _DWORD **v2; // ebx int v3; // esi _DWORD *v4; // eax int v5; // eax int v6; // eax int v7; // esi int v8; // esi int v9; // esi int *v10; // eax int v11; // eax _BYTE *v12; // eax _DWORD *v13; // eax _DWORD *v14; // [esp+14h] [ebp-DCh] int v15; // [esp+1Ch] [ebp-D4h] int v16; // [esp+20h] [ebp-D0h] _DWORD *v17; // [esp+24h] [ebp-CCh] void **v18; // [esp+2Ch] [ebp-C4h] int v19; // [esp+68h] [ebp-88h] int v20; // [esp+6Ch] [ebp-84h] void **v21; // [esp+74h] [ebp-7Ch] int v22; // [esp+80h] [ebp-70h] void ***v23; // [esp+ACh] [ebp-44h] int v24; // [esp+B0h] [ebp-40h] char v25; // [esp+B4h] [ebp-3Ch] float v26; // [esp+BCh] [ebp-34h] float v27; // [esp+C0h] [ebp-30h] void *v28; // [esp+C4h] [ebp-2Ch] int v29; // [esp+D4h] [ebp-1Ch] unsigned int v30; // [esp+D8h] [ebp-18h] int v31; // [esp+ECh] [ebp-4h] v27 = 0.0; v2 = this; v3 = *this[94]; v4 = sub_67E9D0((int)dword_AD8EBC); (*(void (__thiscall **)(_DWORD *, _DWORD *))(v3 + 452))(v2[94], v4); v5 = v2[94][72]; if ( v5 ) v6 = *(_DWORD *)(v5 + 8); else v6 = 0; v7 = **(_DWORD **)(v6 + 12); v26 = 0.0; v27 = 0.0; sub_868090(v7, 0, 0, 0, &v26); v26 = 0.0; v27 = 1.0; sub_868090(v7, 0, 1, 0, &v26); v26 = 1.0; v27 = 1.0; sub_868090(v7, 0, 2, 0, &v26); v26 = 1.0; v27 = 0.0; sub_868090(v7, 0, 3, 0, &v26); v8 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v8 + 200) ) { v10 = (int *)(*(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)a2); if ( *v10 ) v9 = *v10; else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } v14 = &unk_A41204; v17 = &unk_9C6DA8; v31 = 0; LODWORD(v27) = 1; v21 = &std::basic_istream>::`vftable'; v15 = 0; v16 = 0; sub_423A10(&v21); v23 = &v18; v24 = 0; v25 = sub_424CA0(&v21, 32); if ( !v23 ) sub_405C10(&v21, v22 | 4, 0); *(_DWORD **)((char *)&v17 + v17[1]) = &std::basic_ostream>::`vftable'; *(_DWORD **)((char *)&v14 + v14[1]) = &std::basic_iostream>::`vftable'; v11 = v14[1]; v31 = 5; *(_DWORD **)((char *)&v14 + v11) = &std::basic_stringstream,std::allocator>::`vftable'; sub_423F50(&v18); v18 = &std::basic_stringbuf,std::allocator>::`vftable'; v19 = 0; v20 = 0; v31 = 7; v12 = sub_406190(&v17, (const char *)(v9 + 34)); sub_406190(v12, (const char *)&unk_9F0914); v13 = sub_62E1B0(&v14, &v28); LOBYTE(v31) = 8; if ( v13[5] >= 0x10u ) v13 = (_DWORD *)*v13; (*(void (__stdcall **)(_DWORD *))(*v2[93] + 472))(v13); if ( v30 >= 0x10 ) operator delete(v28); v30 = 15; v29 = 0; LOBYTE(v28) = 0; v31 = -1; sub_62DD50(&v21); v21 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v21); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; // 9F092C: using guessed type void *std::basic_stringstream,std::allocator>::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (0062D300) -------------------------------------------------------- void __thiscall sub_62D300(int this, int a2, int a3) { int v3; // eax v3 = a2; switch ( a2 ) { case 0: sub_62C800((_DWORD *)this, 0); break; case 1: sub_62C800((_DWORD *)this, 1); break; case 2: sub_62C800((_DWORD *)this, 2); break; case 3: sub_62C800((_DWORD *)this, 3); break; case 4: sub_62C800((_DWORD *)this, 4); break; case 5: sub_62C800((_DWORD *)this, 5); break; case 6: sub_62C800((_DWORD *)this, 6); break; case 7: sub_62C800((_DWORD *)this, 7); break; case 8: sub_62C800((_DWORD *)this, 8); break; case 9: sub_62C800((_DWORD *)this, 9); break; case 10: sub_62C820((_DWORD *)this, 0); break; case 11: sub_62C820((_DWORD *)this, 1); break; case 12: sub_62C820((_DWORD *)this, 2); break; case 13: sub_62C820((_DWORD *)this, 3); break; case 14: sub_62C820((_DWORD *)this, 4); break; case 15: sub_62C820((_DWORD *)this, 5); break; case 17: LOBYTE(v3) = *(_BYTE *)(this + 472) == 0; *(_BYTE *)(this + 472) = v3; sub_62CC40((_DWORD **)this, v3); break; case 19: *(_DWORD *)(*(_DWORD *)(this + 364) + 344) = *(_DWORD *)(*(_DWORD *)(this + 368) + 300); sub_465130(*(_DWORD **)(this + 364)); break; case 20: sub_62D050((_DWORD **)this, a3 + 20 * (*(_DWORD *)(this + 464) + 10 * *(_DWORD *)(this + 468))); break; case 21: sub_62D050((_DWORD **)this, a3); break; case 22: sub_8F2BC0((volatile LONG *)this, 1, 0, 0); break; default: return; } } //----- (0062D4B0) -------------------------------------------------------- char __thiscall sub_62D4B0(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v8; // eax int v9; // eax int v10; // edi int v11; // ebx int v12; // eax int v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax signed int v17; // ebx int *v18; // edi char *v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax _DWORD *v22; // ebx int *v23; // ebx _DWORD *v24; // ebx volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax int v28; // eax int *v29; // eax int v30; // ebx int v31; // edi int v32; // eax int v33; // eax void (__thiscall ***v34)(_DWORD, signed int); // esi void *v35; // [esp+3Ch] [ebp-7Ch] int v36; // [esp+40h] [ebp-78h] int v37; // [esp+44h] [ebp-74h] char v38; // [esp+48h] [ebp-70h] char v39; // [esp+4Ch] [ebp-6Ch] int v40; // [esp+50h] [ebp-68h] int v41; // [esp+54h] [ebp-64h] int v42; // [esp+58h] [ebp-60h] int v43; // [esp+5Ch] [ebp-5Ch] int v44; // [esp+60h] [ebp-58h] int v45; // [esp+64h] [ebp-54h] int v46; // [esp+68h] [ebp-50h] int v47[5]; // [esp+6Ch] [ebp-4Ch] int v48; // [esp+80h] [ebp-38h] int v49; // [esp+84h] [ebp-34h] int v50; // [esp+88h] [ebp-30h] void *v51; // [esp+8Ch] [ebp-2Ch] int v52; // [esp+9Ch] [ebp-1Ch] unsigned int v53; // [esp+A0h] [ebp-18h] int v54; // [esp+B4h] [ebp-4h] v2 = (int)this; v50 = 0; v3 = dword_BA6BA0; v54 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MonsterCardInventory.nif"); sub_8F66B0(v4, (int)&v50, v3); if ( !v50 ) return 0; v5 = sub_8FB140(v50, (int)"Panel01", (int)&v46, (int)&v45, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"Frame", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v50; v54 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } sub_456260(v47); LOBYTE(v54) = 1; sub_455FF0(v47, v2); sub_456000(v47, v46, v45); sub_456380(v47, v50); sub_456820(v47, (int)"Panel02", 0); sub_456820(v47, (int)"Panel04", 0); v8 = sub_456820(v47, (int)"MonFace", 0); *(_DWORD *)(v2 + 376) = v8; v9 = (*(int (__thiscall **)(volatile LONG *))(*v8 + 456))(v8); v10 = *(_DWORD *)(v2 + 476); v11 = v9; if ( v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *(_DWORD *)(v2 + 476) = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); } v12 = *(_DWORD *)(*(_DWORD *)(v2 + 376) + 288); if ( v12 ) v13 = *(_DWORD *)(v12 + 8); else v13 = 0; sub_8682E0( **(_DWORD **)(v13 + 12), 0, 0, (_DWORD *)(v2 + 480), (_DWORD *)(v2 + 496), (_DWORD *)(v2 + 504), (_DWORD *)(v2 + 488)); v14 = sub_456980( v47, (int)"SubText01", (int)&unk_9F074A, 3, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 0, 0, 0); *(_DWORD *)(v2 + 372) = v14; *(_BYTE *)(*((_DWORD *)v14 + 72) + 284) = 1; sub_4563D0(v47, 0, (int)"Tab01", 0, 0, 0, 0); sub_4563D0(v47, 1, (int)"Tab02", 0, 0, 0, 0); sub_4563D0(v47, 2, (int)"Tab03", 0, 0, 0, 0); sub_4563D0(v47, 3, (int)"Tab04", 0, 0, 0, 0); sub_4563D0(v47, 4, (int)"Tab05", 0, 0, 0, 0); sub_4563D0(v47, 5, (int)"Tab06", 0, 0, 0, 0); sub_4563D0(v47, 6, (int)"Tab07", 0, 0, 0, 0); sub_4563D0(v47, 7, (int)"Tab08", 0, 0, 0, 0); sub_4563D0(v47, 8, (int)"Tab09", 0, 0, 0, 0); sub_4563D0(v47, 9, (int)"Tab10", 0, 0, 0, 0); sub_4563D0(v47, 10, (int)"AtbTab01", 0, 0, 0, 0); sub_4563D0(v47, 11, (int)"AtbTab02", 0, 0, 0, 0); sub_4563D0(v47, 12, (int)"AtbTab03", 0, 0, 0, 0); sub_4563D0(v47, 13, (int)"AtbTab04", 0, 0, 0, 0); sub_4563D0(v47, 14, (int)"AtbTab05", 0, 0, 0, 0); sub_4563D0(v47, 15, (int)"AtbTab06", 0, 0, 0, 0); v15 = sub_4563D0(v47, 22, (int)"BtnNor02", (int)"BtnOver02", (int)"BtnClick02", 0, 0); sub_456040((int)v15, (int)"You Out", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v16 = sub_4563D0(v47, 17, (int)"BtnNor01", (int)"BtnOver01", (int)"BtnClick01", 0, 0); sub_456040((int)v16, (int)"Metamorphoisi", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v17 = 0; v18 = (int *)(v2 + 384); do { v44 = v50; v19 = sub_7549E0("IconSlot%02d", v17); v20 = sub_8FB140(v44, (int)v19, (int)&v49, (int)&v48, 0); sub_8F3EB0(v49 - v46, v48 - v45, (int)v20, v2, 0, 0); v21 = sub_5D6E20(v49 - v46 + 1, v48 - v45 + 1, v2); *v18 = (int)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 516))(v21, 20); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v18 + 520))(v17); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v18 + 560))(21); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v18 + 564))(v17); sub_5D5B70((_WORD *)*v18, 0, 1); sub_5D3170(*v18, 1); ++v17; ++v18; } while ( v17 < 20 ); *(_DWORD *)(v2 + 360) = sub_456820(v47, (int)"Panel03", 0); v35 = 0; v36 = 0; v37 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; v43 = 0; LOBYTE(v54) = 2; v22 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v35, 1); *v22 = 1; v22[1] = v50; v53 = 15; v52 = 0; LOBYTE(v51) = 0; sub_4018E0(&v51, "ColumnBarNor", 0xCu); v23 = v22 + 18; LOBYTE(v54) = 3; sub_40B060(v23, (const void **)&v51); LOBYTE(v54) = 2; if ( v53 >= 0x10 ) operator delete(v51); v53 = 15; v52 = 0; LOBYTE(v51) = 0; sub_4018E0(&v51, "ColumnBarClick", 0xEu); LOBYTE(v54) = 4; sub_40B060(v23, (const void **)&v51); LOBYTE(v54) = 2; if ( v53 >= 0x10 ) operator delete(v51); v53 = 15; v52 = 0; LOBYTE(v51) = 0; sub_4018E0(&v51, "ColumnBarOver", 0xDu); LOBYTE(v54) = 5; sub_40B060(v23, (const void **)&v51); LOBYTE(v54) = 2; if ( v53 >= 0x10 ) operator delete(v51); v24 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v35, 2); *v24 = 2; v53 = 15; v52 = 0; LOBYTE(v51) = 0; sub_4018E0(&v51, "Column", 6u); LOBYTE(v54) = 6; sub_40B060(v24 + 18, (const void **)&v51); LOBYTE(v54) = 2; if ( v53 >= 0x10 ) operator delete(v51); v24[1] = v50; v53 = 15; v52 = 0; LOBYTE(v51) = 0; sub_466680(&v35, 0); v25 = sub_8FB140(v50, (int)"ListBox", (int)&v49, (int)&v48, 0); v26 = sub_466330(v49 - v46, v48 - v45, (int)v25, *(float *)&v2, (int **)&v35, 10, 0); *(_DWORD *)(v2 + 364) = v26; *((_DWORD *)v26 + 88) = 18; v27 = sub_8FB140(v50, (int)"SlideBar_SlideBtnMiddle", (int)&v49, (int)&v48, 0); v28 = sub_464310(v50, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v27, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 368) = v28; *(_DWORD *)(v28 + 312) = 19; *(_DWORD *)(*(_DWORD *)(v2 + 368) + 304) = 1; v29 = *(int **)(v2 + 368); v30 = *v29; v31 = *(_DWORD *)(v2 + 368); v32 = (*(int (__thiscall **)(_DWORD))(*v29 + 168))(*(_DWORD *)(v2 + 368)); v33 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v31 + 164))(v31, v32 - 25); (*(void (__thiscall **)(_DWORD, int))(v30 + 308))(*(_DWORD *)(v2 + 368), v33 - 5); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.1, 0.5); LOBYTE(v54) = 1; if ( v35 ) { ((void (__cdecl *)(void *, int, char *, int))loc_40ACF0)(v35, v36, &v38, v44); operator delete(v35); } v35 = 0; v36 = 0; v37 = 0; LOBYTE(v54) = 0; sub_4562E0(v47); v34 = (void (__thiscall ***)(_DWORD, signed int))v50; v54 = -1; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v34 ) (**v34)(v34, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0062DCF0) -------------------------------------------------------- char *__thiscall sub_62DCF0(struct std::ios_base *this, char a2) { char *v2; // esi v2 = (char *)this - 24; *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_iostream>::`vftable'; *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 2) + 4) - 8) = &std::basic_ostream>::`vftable'; *(_DWORD *)((char *)this + *(_DWORD *)(*((_DWORD *)this - 6) + 4) - 24) = &std::basic_istream>::`vftable'; *(_DWORD *)this = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; //----- (0062DD50) -------------------------------------------------------- int __thiscall sub_62DD50(_DWORD *this) { _DWORD *v1; // esi int result; // eax *(_DWORD *)((char *)this + *(_DWORD *)(*(this - 24) + 4) - 96) = &std::basic_stringstream,std::allocator>::`vftable'; v1 = this - 18; *(this - 18) = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)(this - 18)); sub_423AE0(v1); *(_DWORD *)((char *)v1 + *(_DWORD *)(*(v1 - 6) + 4) - 24) = &std::basic_iostream>::`vftable'; result = *(_DWORD *)(*(v1 - 2) + 4); *(_DWORD *)((char *)v1 + result - 8) = &std::basic_ostream>::`vftable'; *(_DWORD *)((char *)v1 + *(_DWORD *)(*(v1 - 6) + 4) - 24) = &std::basic_istream>::`vftable'; return result; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; // 9F092C: using guessed type void *std::basic_stringstream,std::allocator>::`vftable'; //----- (0062DDE0) -------------------------------------------------------- int __thiscall sub_62DDE0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 21) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (0062DEE0) -------------------------------------------------------- _DWORD *__thiscall sub_62DEE0(struct std::ios_base *this, char a2) { _DWORD *v2; // edi struct std::ios_base *v3; // esi v2 = (_DWORD *)((char *)this - 96); v3 = this; sub_62DD50(this); *(_DWORD *)v3 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (0062DF20) -------------------------------------------------------- _BYTE *__thiscall sub_62DF20(_BYTE *this, unsigned __int16 a2) { _BYTE *v2; // esi int v3; // ecx int v4; // eax _BYTE *v5; // eax int v6; // eax _DWORD *v7; // eax struct std::locale::facet *v8; // eax int v9; // ebx unsigned int v10; // eax int v11; // edi void (__thiscall ***v12)(_DWORD, signed int); // edi int v13; // eax int v14; // ecx char v15; // dl int v16; // ecx int v17; // edi void (__thiscall *v18)(struct std::locale::facet *, int *, int, int, _BYTE *, int, _DWORD); // edx _DWORD *v19; // ecx int v20; // eax int v21; // ecx int v23; // [esp+0h] [ebp-44h] int v24; // [esp+10h] [ebp-34h] _BYTE *v25; // [esp+18h] [ebp-2Ch] bool v26; // [esp+1Ch] [ebp-28h] struct std::locale::facet *v27; // [esp+20h] [ebp-24h] int v28; // [esp+24h] [ebp-20h] int v29; // [esp+28h] [ebp-1Ch] int v30; // [esp+2Ch] [ebp-18h] _BYTE *v31; // [esp+30h] [ebp-14h] int *v32; // [esp+34h] [ebp-10h] int v33; // [esp+40h] [ebp-4h] v32 = &v23; v2 = this; v31 = this; v3 = *(_DWORD *)&this[*(_DWORD *)(*(_DWORD *)this + 4) + 56]; v30 = 0; v25 = v31; if ( v3 ) (*(void (**)(void))(*(_DWORD *)v3 + 4))(); v4 = *(_DWORD *)(*(_DWORD *)v2 + 4); v33 = 0; if ( !*(_DWORD *)&v2[v4 + 12] ) { v5 = *(_BYTE **)&v2[v4 + 60]; if ( v5 ) sub_406070(v5); } v6 = *(_DWORD *)v2; v26 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 12] == 0; v33 = 1; if ( v26 ) { v7 = sub_422FF0((_DWORD **)&v2[*(_DWORD *)(v6 + 4)], &v29); LOBYTE(v33) = 2; v8 = sub_529280((int)v7); v9 = v29; v27 = v8; LOBYTE(v33) = 1; if ( v29 ) { std::_Lockit::_Lockit((std::_Lockit *)&v28, 0); v10 = *(_DWORD *)(v9 + 4); if ( v10 > 0 && v10 < 0xFFFFFFFF ) *(_DWORD *)(v9 + 4) = v10 - 1; v11 = -(*(_DWORD *)(v9 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v28); v12 = (void (__thiscall ***)(_DWORD, signed int))(v9 & v11); if ( v12 ) (**v12)(v12, 1); } v13 = *(_DWORD *)(*(_DWORD *)v2 + 4); v14 = *(_DWORD *)(*(_DWORD *)v2 + 4); v15 = v2[v14 + 64]; v16 = *(_DWORD *)&v2[v14 + 56]; LOBYTE(v28) = v15; v17 = *(_DWORD *)v27; LOBYTE(v24) = 0; v18 = *(void (__thiscall **)(struct std::locale::facet *, int *, int, int, _BYTE *, int, _DWORD))(v17 + 24); LOBYTE(v33) = 3; v18(v27, &v24, v24, v16, &v2[v13], v28, a2); if ( (_BYTE)v24 ) v30 = 4; v33 = 1; } v19 = &v2[*(_DWORD *)(*(_DWORD *)v2 + 4)]; if ( v30 ) { v20 = v30 | v19[3]; if ( !v19[14] ) v20 |= 4u; sub_405C10(v19, v20, 0); } v33 = 5; if ( !__uncaught_exception() ) sub_4060C0(v2); v21 = *(_DWORD *)&v2[*(_DWORD *)(*(_DWORD *)v2 + 4) + 56]; v33 = -1; if ( v21 ) (*(void (**)(void))(*(_DWORD *)v21 + 8))(); return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0062E110) -------------------------------------------------------- _DWORD *__thiscall sub_62E110(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; *((_WORD *)result + 8) = *((_WORD *)v4 + 2); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0062E180) -------------------------------------------------------- void *__thiscall sub_62E180(void *this, char a2) { void *v2; // esi v2 = this; sub_62C8E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0062E1B0) -------------------------------------------------------- void *__thiscall sub_62E1B0(void *this, void *a2) { sub_52AE60((int)this + 24, a2); return a2; } //----- (0062E1E0) -------------------------------------------------------- __int64 sub_62E1E0() { return qword_AD0C48; } // AD0C48: using guessed type __int64 qword_AD0C48; //----- (0062E1F0) -------------------------------------------------------- int __cdecl sub_62E1F0(__int64 a1) { int result; // eax result = a1; qword_AD0C48 = a1; return result; } // AD0C48: using guessed type __int64 qword_AD0C48; //----- (0062E210) -------------------------------------------------------- char sub_62E210() { return byte_AD0C50; } // AD0C50: using guessed type char byte_AD0C50; //----- (0062E220) -------------------------------------------------------- unsigned int __cdecl sub_62E220(int a1) { unsigned int v1; // ebx unsigned int v2; // edi _WORD *v3; // esi unsigned int v4; // ST14_4 unsigned int result; // eax int v6; // [esp+10h] [ebp-4h] sub_6F3170(3, &v6); v1 = 4 * (9 * v6 + 18); v2 = 0; do { if ( v2 >= v1 ) break; v3 = (_WORD *)dword_AD0C58[v2]; if ( v3 ) { if ( v3[4] == *(_WORD *)(a1 + 8) ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 16))(dword_AD0C58[v2]); if ( v4 > (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v3 + 12))(v3) ) return v2; } } ++v2; } while ( v2 < 0x240 ); result = 0; do { if ( result >= v1 ) break; if ( !dword_AD0C58[result] ) return result; ++result; } while ( result < 0x240 ); return -1; } //----- (0062E2B0) -------------------------------------------------------- void *sub_62E2B0() { void *result; // eax int *v1; // esi int *v2; // ebx char *v3; // eax char *v4; // edi int **v5; // eax int *j; // eax int *i; // eax result = dword_AD155C; v1 = *(int **)dword_AD155C; v2 = (int *)dword_AD155C; if ( *(void **)dword_AD155C != dword_AD155C ) { do { v3 = (char *)v1[4]; if ( v3 ) { v4 = v3 - 4; `eh vector destructor iterator'(v3, 4u, *((_DWORD *)v3 - 1), sub_410C00); operator delete[](v4); } if ( !*((_BYTE *)v1 + 21) ) { v5 = (int **)v1[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = (int *)v1[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v1 != (int *)i[2] ) break; v1 = i; } v1 = i; } else { v1 = (int *)v1[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v1 = j; } } } while ( v1 != v2 ); result = (void *)sub_668390(&unk_AD1558); } return result; } //----- (0062E340) -------------------------------------------------------- void **__cdecl sub_62E340(unsigned __int8 a1) { void **result; // eax void **v2; // [esp+4h] [ebp-4h] if ( a1 < 0x10u ) memset(&dword_AD0C58[36 * a1], 0, 0x90u); sub_62E930(&unk_AD1558, (int **)&v2, &a1); result = v2; if ( v2 != dword_AD155C ) result = (void **)memset(v2[4], 0, 0x90u); qword_AD0C48 = 0i64; return result; } // AD0C48: using guessed type __int64 qword_AD0C48; //----- (0062E440) -------------------------------------------------------- int __cdecl sub_62E440(unsigned int a1) { unsigned int v1; // esi int result; // eax _DWORD *v3; // [esp+4h] [ebp-4h] v1 = a1; if ( a1 >= 36 * (unsigned int)(unsigned __int8)byte_AD0C50 ) return 0; if ( a1 < 0x240 ) return dword_AD0C58[a1]; HIBYTE(a1) = a1 / 0x24; sub_62E930(&unk_AD1558, &v3, (_BYTE *)&a1 + 3); if ( v3 == dword_AD155C ) result = 0; else result = *(_DWORD *)(v3[4] + 4 * (v1 % 0x24)); return result; } // AD0C50: using guessed type char byte_AD0C50; //----- (0062E4C0) -------------------------------------------------------- unsigned int __cdecl sub_62E4C0(int a1, unsigned int a2) { unsigned int v2; // esi unsigned int result; // eax int v4; // edi _DWORD *v5; // [esp+4h] [ebp-4h] v2 = a2; result = 36 * (unsigned __int8)byte_AD0C50; if ( a2 < result ) { if ( a2 >= 0x240 ) { HIBYTE(a2) = a2 / 0x24; sub_62E930(&unk_AD1558, &v5, (_BYTE *)&a2 + 3); result = (unsigned int)v5; if ( v5 != dword_AD155C ) result = (unsigned int)sub_56FF80((_DWORD *)(v5[4] + 4 * (v2 % 0x24)), a1); } else { v4 = dword_AD0C58[a2]; if ( v4 != a1 ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } dword_AD0C58[v2] = a1; if ( a1 ) result = InterlockedIncrement((volatile LONG *)(a1 + 4)); } } } return result; } // AD0C50: using guessed type char byte_AD0C50; //----- (0062E580) -------------------------------------------------------- bool __cdecl sub_62E580(char a1) { int v1; // ecx int v3; // [esp+0h] [ebp-4h] v3 = v1; sub_62E930(&unk_AD1558, (int **)&v3, &a1); return v3 != (_DWORD)dword_AD155C; } //----- (0062E5B0) -------------------------------------------------------- char __cdecl sub_62E5B0(_BYTE *a1) { _BYTE *v1; // esi _BYTE *v2; // edi unsigned __int8 v3; // ST10_1 _DWORD *v4; // eax void *v5; // edi _DWORD *v6; // eax int v7; // eax int v8; // ebx _DWORD *v9; // esi int v10; // edi int v11; // ebx int v12; // ecx int v13; // edx int v14; // edi _DWORD *v15; // ebx char v17; // [esp+10h] [ebp-28h] _DWORD *v18; // [esp+14h] [ebp-24h] int v19; // [esp+18h] [ebp-20h] _DWORD *v20; // [esp+1Ch] [ebp-1Ch] int v21; // [esp+20h] [ebp-18h] _BYTE *v22; // [esp+24h] [ebp-14h] char *v23; // [esp+28h] [ebp-10h] int v24; // [esp+34h] [ebp-4h] v1 = a1; v2 = a1 + 9; v3 = a1[9]; v23 = a1 + 9; sub_62E340(v3); qword_AD0C48 = *(_QWORD *)v1; byte_AD0C50 = v1[8]; if ( *v2 >= 0x10u ) { sub_62E930(&unk_AD1558, (int **)&a1, v2); if ( a1 == dword_AD155C ) { v4 = operator new[](0x94u); a1 = v4; v24 = 0; if ( v4 ) { v5 = v4 + 1; *v4 = 36; `eh vector constructor iterator'( v4 + 1, 4u, 36, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v5 = 0; } v24 = -1; memset(v5, 0, 0x90u); v17 = *v23; v18 = v5; v6 = sub_62E9A0(&unk_AD1558, &v17); sub_62E850(&unk_AD1558, (int)&v17, v6, 0); } } v7 = (unsigned __int8)v1[11]; v8 = (int)(v1 + 12); v22 = v1 + 12; if ( v7 ) { v21 = v7; do { v9 = sub_688E00(v8, &a1, &v19); v18 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); v24 = 1; if ( ((unsigned __int16)a1 & 0xFC00) != 6144 || (v10 = (unsigned __int16)a1 & 0x3FF, v10 >= 36 * (unsigned __int8)byte_AD0C50) ) { if ( v9 ) { if ( !InterlockedDecrement(v9 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); v9 = 0; } } else if ( ((unsigned __int16)a1 & 0x3FFu) >= 0x240 ) { sub_62E930(&unk_AD1558, &v20, v23); if ( v20 == dword_AD155C ) goto LABEL_34; v12 = v20[4]; v13 = (unsigned __int16)(v10 % 36); v14 = *(_DWORD *)(v12 + 4 * v13); v15 = (_DWORD *)(v12 + 4 * v13); if ( (_DWORD *)v14 != v9 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *v15 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } } else { v11 = dword_AD0C58[v10]; if ( (_DWORD *)v11 != v9 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); dword_AD0C58[v10] = (int)v9; if ( v9 ) InterlockedIncrement(v9 + 1); } } v8 = (int)&v22[v19]; v22 += v19; LABEL_34: v24 = -1; if ( v9 && !InterlockedDecrement(v9 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); --v21; } while ( v21 ); } return 1; } // AD0C48: using guessed type __int64 qword_AD0C48; // AD0C50: using guessed type char byte_AD0C50; //----- (0062E850) -------------------------------------------------------- int __thiscall sub_62E850(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // ebx int v5; // ecx int v6; // eax int v7; // esi bool v8; // cl unsigned __int8 v9; // dl int v10; // edi int v11; // edx int result; // eax int v13; // ecx char v14; // [esp+Ch] [ebp-4h] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = 1; v14 = 1; if ( !*(_BYTE *)(v6 + 21) ) { v9 = *((_BYTE *)a3 + 12); do { v7 = v6; if ( (_BYTE)a4 ) v8 = *(_BYTE *)(v6 + 12) >= v9; else v8 = v9 < *(_BYTE *)(v6 + 12); v14 = v8; if ( v8 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 21) ); } v10 = v7; a4 = v7; if ( v8 ) { if ( v7 == *(_DWORD *)v4[1] ) { v11 = *(_DWORD *)sub_6A0F70(v4, (int)&a4, 1, v7, a3); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v10 = a4; } if ( *(_BYTE *)(v10 + 12) >= *((_BYTE *)a3 + 12) ) { operator delete(a3); result = a2; *(_DWORD *)a2 = v10; *(_BYTE *)(a2 + 4) = 0; } else { v13 = *(_DWORD *)sub_6A0F70(v4, (int)&a4, v14, v7, a3); result = a2; *(_DWORD *)a2 = v13; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (0062E930) -------------------------------------------------------- int **__thiscall sub_62E930(_DWORD *this, int **a2, _BYTE *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 21) ) { if ( *((_BYTE *)v4 + 12) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_BYTE *)v3 + 12) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (0062E9A0) -------------------------------------------------------- _DWORD *__thiscall sub_62E9A0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // esi void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_BYTE *)result + 12) = *a2; result[4] = *((_DWORD *)v4 + 1); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0062EA20) -------------------------------------------------------- char __stdcall sub_62EA20(int a1) { return 0; } //----- (0062EA30) -------------------------------------------------------- void *__thiscall sub_62EA30(unsigned int *this) { unsigned int *v1; // esi void *result; // eax int v3; // eax v1 = this; sub_6838D0(&unk_ADA1E0, this + 4); result = sub_664AB0(dword_AD8C90, *((_WORD *)v1 + 14)); if ( result ) { v3 = (*(int (__thiscall **)(void *))(*(_DWORD *)result + 196))(result); result = sub_6BA930(&dword_AB6520, *((unsigned __int16 *)v1 + 9), v3); } return result; } //----- (0062EA80) -------------------------------------------------------- bool __thiscall sub_62EA80(_WORD *this, __int16 a2) { return this[8] == a2; } //----- (0062EAF0) -------------------------------------------------------- void sub_62EAF0() { int v0; // eax int v1; // ecx void *v2; // esi while ( dword_AB25C0 ) { v0 = dword_AB25B8; v1 = *(_DWORD *)dword_AB25B8; dword_AB25B8 = v1; if ( v1 ) *(_DWORD *)(v1 + 4) = 0; else dword_AB25BC = 0; v2 = *(void **)(v0 + 8); off_AB25B4[2](&off_AB25B4, v0); --dword_AB25C0; operator delete(v2); } } // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062EBB0) -------------------------------------------------------- void sub_62EBB0() { _DWORD *v0; // esi int v1; // ebx __int16 v2; // ax char *v3; // eax char *v4; // edi void *v5; // eax _DWORD *v6; // [esp+4h] [ebp-4h] v0 = (_DWORD *)dword_AB25B8; if ( dword_AB25B8 ) { do { v1 = v0[2]; v2 = *(_WORD *)(v1 + 8); v6 = v0; v0 = (_DWORD *)*v0; v3 = sub_664AB0(dword_AD8C90, v2); v4 = v3; if ( !v3 || v3[2680] || sub_651680((int)v3) || (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 92))(v4) <= 0 ) { (**(void (__thiscall ***)(int))v1)(v1); v5 = (void *)sub_403620(&off_AB25B4, &v6); operator delete(v5); } } while ( v0 ); } } // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; //----- (0062EC30) -------------------------------------------------------- _DWORD *__thiscall sub_62EC30(_DWORD *this, int a2, const void *a3) { _DWORD *v3; // ebx _DWORD *v4; // eax __int16 v5; // dx v3 = this; this[1] = a2; *this = &ICharDeadEvent::`vftable'; v4 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB25B4[1])(&off_AB25B4); v4[2] = v3; *v4 = 0; v4[1] = dword_AB25BC; if ( dword_AB25BC ) *(_DWORD *)dword_AB25BC = v4; else dword_AB25B8 = (int)v4; dword_AB25BC = (int)v4; ++dword_AB25C0; v3[3] = 0; *v3 = &CharDeadEvent_LevelUp::`vftable'; qmemcpy(v3 + 4, a3, 0xEBu); v5 = *(_WORD *)((char *)v3 + 17); v3[3] = 1; *((_WORD *)v3 + 4) = v5; return v3; } // 9F0BB8: using guessed type void *ICharDeadEvent::`vftable'; // 9F0BC4: using guessed type void *CharDeadEvent_LevelUp::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062ECC0) -------------------------------------------------------- int __thiscall sub_62ECC0(char *this) { _DWORD *v1; // esi int v2; // edi int v3; // ebx char *v4; // eax char *v5; // eax int v6; // ecx char *v7; // eax char *v8; // eax int v9; // ecx int v10; // ST10_4 char *v11; // eax char *v12; // eax int v13; // ecx int v14; // ST10_4 char *v15; // eax char *v16; // eax int v17; // ecx int v18; // ST10_4 char *v19; // eax char *v20; // eax int v21; // ecx int v23; // [esp+14h] [ebp-14h] int v24; // [esp+18h] [ebp-10h] char v25[4]; // [esp+1Ch] [ebp-Ch] char v26[4]; // [esp+20h] [ebp-8h] char v27[4]; // [esp+24h] [ebp-4h] v1 = this; sub_6808A0(byte_AD9238, this[16]); sub_6AF890(&unk_B91250, (int)&v23, "LevelUp", *((_DWORD *)dword_AD8EBC + 175), flt_ACCFCC, 0); v2 = *(_DWORD *)((char *)v1 + 35) - sub_680960((int)byte_AD9238); v3 = *(_DWORD *)((char *)v1 + 43) - sub_680980((int)byte_AD9238); *(_DWORD *)v27 = *(_DWORD *)((char *)v1 + 51) - sub_680970((int)byte_AD9238); *(_DWORD *)v26 = *(_DWORD *)((char *)v1 + 59) - sub_6809A0((int)byte_AD9238); *(_DWORD *)v25 = *(_DWORD *)((char *)v1 + 75) - sub_6809B0((int)byte_AD9238); if ( v2 ) { v4 = (char *)sub_40C190(-418969622); v5 = sub_7549E0(v4, v2); v6 = v1[1]; if ( v6 ) (*(void (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v6 + 4))(25, v5, 0); } if ( v3 ) { v7 = (char *)sub_40C190(-1812464137); v8 = sub_7549E0(v7, v3); v9 = v1[1]; if ( v9 ) (*(void (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v9 + 4))(25, v8, 0); } if ( *(_DWORD *)v27 ) { v10 = *(_DWORD *)v27; v11 = (char *)sub_40C190(-654833680); v12 = sub_7549E0(v11, v10); v13 = v1[1]; if ( v13 ) (*(void (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v13 + 4))(25, v12, 0); } if ( *(_DWORD *)v26 ) { v14 = *(_DWORD *)v26; v15 = (char *)sub_40C190(-503511060); v16 = sub_7549E0(v15, v14); v17 = v1[1]; if ( v17 ) (*(void (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v17 + 4))(25, v16, 0); } if ( *(_DWORD *)v25 ) { v18 = *(_DWORD *)v25; v19 = (char *)sub_40C190(-603256853); v20 = sub_7549E0(v19, v18); v21 = v1[1]; if ( v21 ) (*(void (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v21 + 4))(25, v20, 0); } sub_680940((int)byte_AD9238, (char *)v1 + 19); v24 = 9; *(_DWORD *)v25 = 0; return sub_6B69F0(dword_AB6534, (int)&v24, 0.0, 0); } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0062EE80) -------------------------------------------------------- _DWORD *__thiscall sub_62EE80(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; this[1] = a2; *this = &ICharDeadEvent::`vftable'; v4 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB25B4[1])(&off_AB25B4); v4[2] = v3; *v4 = 0; v4[1] = dword_AB25BC; if ( dword_AB25BC ) *(_DWORD *)dword_AB25BC = v4; else dword_AB25B8 = (int)v4; ++dword_AB25C0; dword_AB25BC = (int)v4; v3[3] = 0; *v3 = &CharDeadEvent_DropItem::`vftable'; v3[4] = *(_DWORD *)a3; v3[5] = *(_DWORD *)(a3 + 4); v3[6] = *(_DWORD *)(a3 + 8); *((_WORD *)v3 + 14) = *(_WORD *)(a3 + 12); *((_BYTE *)v3 + 30) = *(_BYTE *)(a3 + 14); *((_WORD *)v3 + 4) = *((_WORD *)v3 + 14); v3[3] = 2; return v3; } // 9F0BB8: using guessed type void *ICharDeadEvent::`vftable'; // 9F0BD0: using guessed type void *CharDeadEvent_DropItem::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062EF20) -------------------------------------------------------- _DWORD *__thiscall sub_62EF20(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax __int16 v5; // ax v3 = this; this[1] = a2; *this = &ICharDeadEvent::`vftable'; v4 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB25B4[1])(&off_AB25B4); v4[2] = v3; *v4 = 0; v4[1] = dword_AB25BC; if ( dword_AB25BC ) *(_DWORD *)dword_AB25BC = v4; else dword_AB25B8 = (int)v4; ++dword_AB25C0; dword_AB25BC = (int)v4; v3[3] = 0; *v3 = &CharDeadEvent_ExpGain::`vftable'; v3[4] = *(_DWORD *)a3; v5 = *(_WORD *)(a3 + 4); *((_WORD *)v3 + 10) = v5; *((_WORD *)v3 + 4) = v5; v3[3] = 3; return v3; } // 9F0BB8: using guessed type void *ICharDeadEvent::`vftable'; // 9F0BDC: using guessed type void *CharDeadEvent_ExpGain::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062EFB0) -------------------------------------------------------- char *__thiscall sub_62EFB0(unsigned int *this) { unsigned int *v1; // esi char *result; // eax unsigned int v3; // ST08_4 char *v4; // eax unsigned int v5; // ecx v1 = this; sub_6808E0((int)byte_AD9238, this[4]); result = (char *)v1[4]; if ( result ) { v3 = v1[4]; v4 = (char *)sub_40C190(-521468100); result = sub_7549E0(v4, v3); v5 = v1[1]; if ( v5 ) result = (char *)(*(int (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v5 + 4))(25, result, 0); } return result; } //----- (0062F000) -------------------------------------------------------- _DWORD *__thiscall sub_62F000(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; this[1] = a2; *this = &ICharDeadEvent::`vftable'; v4 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB25B4[1])(&off_AB25B4); v4[2] = v3; *v4 = 0; v4[1] = dword_AB25BC; if ( dword_AB25BC ) *(_DWORD *)dword_AB25BC = v4; else dword_AB25B8 = (int)v4; ++dword_AB25C0; dword_AB25BC = (int)v4; v3[3] = 0; *v3 = &CharDeadEvent_SomeoneLevelUp::`vftable'; v3[4] = *a3; *((_WORD *)v3 + 4) = *((_WORD *)v3 + 9); v3[3] = 4; return v3; } // 9F0BB8: using guessed type void *ICharDeadEvent::`vftable'; // 9F0BE8: using guessed type void *CharDeadEvent_SomeoneLevelUp::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062F080) -------------------------------------------------------- char __thiscall sub_62F080(__int16 *this) { char *v1; // eax int v3; // [esp+8h] [ebp-4h] v3 = (int)this; v1 = sub_664AB0(dword_AD8C90, this[8]); if ( v1 ) LOBYTE(v1) = sub_6AF890(&unk_B91250, (int)&v3, "LevelUp", *((_DWORD *)v1 + 175), flt_ACCFCC, 0); return (char)v1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0062F0D0) -------------------------------------------------------- char *__thiscall sub_62F0D0(char *this) { char *v1; // esi int v2; // ST04_4 char *v3; // eax char *result; // eax int v5; // ecx v1 = this; v2 = (int)(this + 16); v3 = (char *)sub_40C190(-800573885); result = sub_7549E0(v3, v2); v5 = *((_DWORD *)v1 + 1); if ( v5 ) result = (char *)(*(int (__stdcall **)(signed int, char *, _DWORD))(*(_DWORD *)v5 + 4))(26, result, 0); return result; } //----- (0062F110) -------------------------------------------------------- char __cdecl sub_62F110(int a1, int a2, char a3) { _DWORD *v3; // edi char v4; // bl _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // ecx int v8; // edx int v10; // [esp+8h] [ebp-4h] v3 = (_DWORD *)dword_AB25B8; v4 = 0; if ( dword_AB25B8 ) { do { v5 = (_DWORD *)v3[2]; v3 = (_DWORD *)*v3; if ( v5 ) { if ( a1 == v5[3] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v5 + 4))(v5, a2) ) { v4 = 1; if ( a3 == 1 ) { v6 = (_DWORD *)dword_AB25B8; if ( dword_AB25B8 ) { while ( 1 ) { v7 = v6 + 2; v8 = (int)v6; v6 = (_DWORD *)*v6; if ( v5 == (_DWORD *)*v7 ) break; if ( !v6 ) goto LABEL_9; } } else { LABEL_9: v8 = 0; } v10 = v8; if ( v8 ) sub_403620(&off_AB25B4, (_DWORD **)&v10); operator delete(v5); } } } } } while ( v3 ); } return v4; } // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; //----- (0062F1A0) -------------------------------------------------------- _DWORD *__thiscall sub_62F1A0(void *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // eax __int16 v6; // dx __int16 v7; // ST00_2 char *v8; // eax char *v9; // edi _DWORD *v10; // eax _DWORD *v11; // ecx int v12; // edx _DWORD *result; // eax _DWORD *v14; // eax _DWORD *v15; // ecx int v16; // edx char *v17; // eax int v18; // edx char v19; // cl v4 = this; *((_DWORD *)this + 1) = a2; *(_DWORD *)this = &ICharDeadEvent::`vftable'; v5 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB25B4[1])(&off_AB25B4); v5[2] = v4; *v5 = 0; v5[1] = dword_AB25BC; if ( dword_AB25BC ) *(_DWORD *)dword_AB25BC = v5; else dword_AB25B8 = (int)v5; ++dword_AB25C0; v6 = a3; dword_AB25BC = (int)v5; v7 = a4; v4[3] = 0; *v4 = &CharDeadEvent_InformWhoKilledMe::`vftable'; *((_WORD *)v4 + 4) = v6; v8 = sub_664AB0(dword_AD8C90, v7); v9 = v8; if ( v8 ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v8 + 32))(v8) ) { v14 = (_DWORD *)dword_AB25B8; if ( dword_AB25B8 ) { while ( 1 ) { v15 = v14 + 2; v16 = (int)v14; v14 = (_DWORD *)*v14; if ( v4 == (_DWORD *)*v15 ) break; if ( !v14 ) goto LABEL_16; } } else { LABEL_16: v16 = 0; } a3 = v16; if ( v16 ) sub_403620(&off_AB25B4, (_DWORD **)&a3); operator delete(v4); result = v4; } else { v17 = (char *)(*(int (__thiscall **)(char *))(*(_DWORD *)v9 + 84))(v9); v18 = (char *)(v4 + 4) - v17; do { v19 = *v17; v17[v18] = *v17; ++v17; } while ( v19 ); v4[3] = 5; result = v4; } } else { v10 = (_DWORD *)dword_AB25B8; if ( dword_AB25B8 ) { while ( 1 ) { v11 = v10 + 2; v12 = (int)v10; v10 = (_DWORD *)*v10; if ( v4 == (_DWORD *)*v11 ) break; if ( !v10 ) goto LABEL_8; } } else { LABEL_8: v12 = 0; } a3 = v12; if ( v12 ) sub_403620(&off_AB25B4, (_DWORD **)&a3); operator delete(v4); result = v4; } return result; } // 9F0BB8: using guessed type void *ICharDeadEvent::`vftable'; // 9F0BF4: using guessed type void *CharDeadEvent_InformWhoKilledMe::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (0062F2E0) -------------------------------------------------------- void *__thiscall sub_62F2E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,ICharDeadEvent *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0B88: using guessed type void *NiTListBase,ICharDeadEvent *>::`vftable'; //----- (0062F310) -------------------------------------------------------- _DWORD *__thiscall sub_62F310(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,ICharDeadEvent *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,ICharDeadEvent *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0B88: using guessed type void *NiTListBase,ICharDeadEvent *>::`vftable'; // 9F0B98: using guessed type void *NiTPointerListBase,ICharDeadEvent *>::`vftable'; //----- (0062F3D0) -------------------------------------------------------- __int64 sub_62F3D0() { return qword_AD1568; } // AD1568: using guessed type __int64 qword_AD1568; //----- (0062F3E0) -------------------------------------------------------- int __cdecl sub_62F3E0(__int64 a1) { int result; // eax result = a1; qword_AD1568 = a1; return result; } // AD1568: using guessed type __int64 qword_AD1568; //----- (0062F410) -------------------------------------------------------- void sub_62F410() { unsigned int v0; // edi int v1; // esi v0 = 0; do { v1 = dword_AD1578[v0]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); dword_AD1578[v0] = 0; } ++v0; } while ( v0 < 36 ); qword_AD1568 = 0i64; dword_AD1570 = 0; dword_AD1574 = 0; } // AD1568: using guessed type __int64 qword_AD1568; // AD1570: using guessed type int dword_AD1570; // AD1574: using guessed type int dword_AD1574; //----- (0062F4A0) -------------------------------------------------------- int __cdecl sub_62F4A0(unsigned int a1) { int result; // eax if ( a1 < 0x24 ) result = dword_AD1578[a1]; else result = 0; return result; } //----- (0062F4C0) -------------------------------------------------------- void __cdecl sub_62F4C0(int a1, unsigned int a2) { int v2; // esi if ( a2 < 0x24 ) { v2 = dword_AD1578[a2]; if ( v2 != a1 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_AD1578[a2] = a1; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); } } } //----- (0062F520) -------------------------------------------------------- void __cdecl sub_62F520(unsigned int a1) { int v1; // esi if ( a1 < 0x24 ) { v1 = dword_AD1578[a1]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } dword_AD1578[a1] = 0; } } } //----- (0062F590) -------------------------------------------------------- char __cdecl sub_62F590(int a1) { int v1; // ecx int v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // edi int *v6; // ebx int v8; // [esp+14h] [ebp-18h] int v9; // [esp+18h] [ebp-14h] int v10; // [esp+1Ch] [ebp-10h] int v11; // [esp+28h] [ebp-4h] sub_62F410(); v1 = *(unsigned __int8 *)(a1 + 18); dword_AD1570 = *(_DWORD *)(a1 + 10); dword_AD1574 = *(_DWORD *)(a1 + 14); LODWORD(qword_AD1568) = *(_DWORD *)(a1 + 2); v2 = a1 + 19; HIDWORD(qword_AD1568) = *(_DWORD *)(a1 + 6); v10 = a1 + 19; if ( v1 ) { v9 = v1; do { v3 = sub_688E00(v2, &a1, &v8); v4 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); v11 = 0; if ( (a1 & 0xFC00) != 4096 || (a1 & 0x3FFu) >= 0x24 ) { if ( v4 ) { if ( !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); v4 = 0; } } else { v5 = dword_AD1578[a1 & 0x3FF]; v6 = &dword_AD1578[a1 & 0x3FF]; if ( (_DWORD *)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v6 = (int)v4; if ( v4 ) InterlockedIncrement(v4 + 1); } } v2 = v8 + v10; v11 = -1; v10 += v8; if ( v4 && !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); --v9; } while ( v9 ); } return 1; } // AD1568: using guessed type __int64 qword_AD1568; // AD1570: using guessed type int dword_AD1570; // AD1574: using guessed type int dword_AD1574; //----- (0062F700) -------------------------------------------------------- int __thiscall sub_62F700(_DWORD *this, int a2) { int result; // eax result = a2; if ( a2 ) { if ( a2 == this[9] ) this[9] = 0; if ( a2 == this[10] ) this[10] = 0; if ( a2 == this[11] ) this[11] = 0; } return result; } //----- (0062F730) -------------------------------------------------------- _DWORD *__cdecl sub_62F730(__int16 a1) { _DWORD *result; // eax int v2; // esi _DWORD *v3; // [esp+0h] [ebp-4h] result = (_DWORD *)dword_AB27A8; v3 = (_DWORD *)dword_AB27A8; if ( dword_AB27A8 ) { while ( 1 ) { v2 = result[2]; if ( *(_WORD *)(v2 + 20) == a1 ) break; result = (_DWORD *)*result; if ( !result ) { v3 = 0; return result; } } v3 = result; sub_6ACDF0(&unk_B91250, *(int **)(v2 + 36)); if ( *(_DWORD *)(v2 + 36) ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(v2 + 36) + 8) + 12))(*(_DWORD *)(v2 + 36) + 8); sub_6ACDF0(&unk_B91250, *(int **)(v2 + 40)); if ( *(_DWORD *)(v2 + 44) ) sub_6AAD40(*(_DWORD *)(v2 + 44)); sub_403620(&off_AB27A4, &v3); result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } return result; } // AB27A4: using guessed type int (__thiscall **off_AB27A4)(void *, char); // AB27A8: using guessed type int dword_AB27A8; //----- (0062F830) -------------------------------------------------------- char *__cdecl sub_62F830(_DWORD *a1, _DWORD *a2, char a3) { _DWORD *v3; // eax _DWORD *v4; // ebx _DWORD *v5; // edi int v6; // esi char *result; // eax float v8; // ST18_4 float v9; // ST14_4 float *v10; // eax int v11; // esi int v12; // ebx int v13; // ecx int v14; // eax bool v15; // zf int v16; // ecx int v17; // eax int v18; // eax int v19; // eax int v20; // [esp+20h] [ebp-14h] int v21; // [esp+24h] [ebp-10h] int v22; // [esp+28h] [ebp-Ch] float v23; // [esp+2Ch] [ebp-8h] float v24; // [esp+30h] [ebp-4h] char *v25; // [esp+3Ch] [ebp+8h] char *v26; // [esp+3Ch] [ebp+8h] v3 = operator new(0x30u); v4 = a1; v5 = 0; if ( v3 ) { v3[4] = 0; v3[2] = 0; v3[3] = 0; v3[1] = &NiTList::`vftable'; v3[9] = 0; v3[10] = 0; v3[11] = 0; *v3 = &MagicField::`vftable'; v3[5] = *a1; v3[6] = a1[1]; v3[7] = a1[2]; v3[8] = a1[3]; v5 = v3; } v6 = dword_ACEA9C; v25 = (char *)*((unsigned __int16 *)a1 + 2); result = (char *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACEA9C + 16))( dword_ACEA9C, *((unsigned __int16 *)v4 + 2)); if ( (_BYTE)result ) { result = v25; if ( (unsigned __int16)v25 <= *(_WORD *)(v6 + 200) ) { result = (char *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v25); if ( *(_DWORD *)result ) { result = *(char **)result; v26 = result; if ( result ) { v8 = (double)*(unsigned int *)((char *)v4 + 10); v9 = (double)*(unsigned int *)((char *)v4 + 6); sub_69ACA0((int)byte_ADB468, v9, v8, (int)&v20, 0); v5[9] = sub_6AE0A0(&unk_B91250, v26 + 455, v20, v21, v22, *a2, a2[1], a2[2], SLODWORD(flt_ACCFCC), a3); v10 = sub_6AE0A0(&unk_B91250, v26 + 519, v20, v21, v22, *a2, a2[1], a2[2], SLODWORD(flt_ACCFCC), a3); v5[10] = v10; if ( v10 ) { v11 = *((unsigned __int16 *)v4 + 2); v12 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v11) ) { if ( (unsigned __int16)v11 <= *(_WORD *)(v12 + 200) ) { v13 = *(_DWORD *)(v12 + 196); if ( *(_DWORD *)(v13 + 4 * v11) ) { v14 = *(_DWORD *)(v13 + 4 * v11); if ( v14 ) { v15 = *(_DWORD *)(v14 + 539) == 14; v23 = 0.0; if ( v15 ) v23 = (double)*(unsigned int *)(v14 + 543) / 1000.0; v16 = v5[9]; v24 = 0.0; if ( v16 ) v24 = *(float *)((*(int (**)(void))(*(_DWORD *)v16 + 16))() + 12); sub_6A7E60(v5[10], v26 + 551, v23, v24, flt_ACCFCC); } } } } } v17 = v5[9]; if ( v17 ) { *(_DWORD *)(v17 + 144) = v5[10]; sub_6AAD40(v5[9]); sub_6BABB0(&dword_AB6520, (int)(v26 + 487), (int)&v20); } v18 = v5[9]; if ( v18 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)(v18 + 8) + 4))(v18 + 8, v5); v19 = v5[10]; if ( v19 ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)(v19 + 8) + 4))(v19 + 8, v5); result = (char *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB27A4[1])(&off_AB27A4); *((_DWORD *)result + 2) = v5; *(_DWORD *)result = 0; *((_DWORD *)result + 1) = dword_AB27AC; if ( dword_AB27AC ) { *(_DWORD *)dword_AB27AC = result; ++dword_AB27B0; } else { ++dword_AB27B0; dword_AB27A8 = (int)result; } dword_AB27AC = (int)result; } } } } return result; } // 9F0C6C: using guessed type void *NiTList::`vftable'; // 9F0C7C: using guessed type void *MagicField::`vftable'; // AB27A4: using guessed type int (__thiscall **off_AB27A4)(void *, char); // AB27A8: using guessed type int dword_AB27A8; // AB27AC: using guessed type int dword_AB27AC; // AB27B0: using guessed type int dword_AB27B0; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; // ACEA9C: using guessed type int dword_ACEA9C; //----- (0062FB30) -------------------------------------------------------- void *__thiscall sub_62FB30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,MagicField *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0C08: using guessed type void *NiTListBase,MagicField *>::`vftable'; //----- (0062FB70) -------------------------------------------------------- void *__thiscall sub_62FB70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,IEffectDestroyMessenger *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0C18: using guessed type void *NiTListBase,IEffectDestroyMessenger *>::`vftable'; //----- (0062FBA0) -------------------------------------------------------- _DWORD *__thiscall sub_62FBA0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,IEffectDestroyMessenger *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,IEffectDestroyMessenger *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0C18: using guessed type void *NiTListBase,IEffectDestroyMessenger *>::`vftable'; // 9F0C28: using guessed type void *NiTPointerListBase,IEffectDestroyMessenger *>::`vftable'; //----- (0062FC30) -------------------------------------------------------- _DWORD *__thiscall sub_62FC30(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,MagicField *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MagicField *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0C08: using guessed type void *NiTListBase,MagicField *>::`vftable'; // 9F0C38: using guessed type void *NiTPointerListBase,MagicField *>::`vftable'; //----- (0062FCC0) -------------------------------------------------------- int __thiscall sub_62FCC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this + 1; *this = &IEffectDestroyMessenger::`vftable'; this[1] = &NiTPointerListBase,IEffectDestroyMessenger *>::`vftable'; for ( i = (_DWORD *)this[2]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,IEffectDestroyMessenger *>::`vftable'; return result; } // 9F0C18: using guessed type void *NiTListBase,IEffectDestroyMessenger *>::`vftable'; // 9F0C28: using guessed type void *NiTPointerListBase,IEffectDestroyMessenger *>::`vftable'; // 9F0C58: using guessed type void *IEffectDestroyMessenger::`vftable'; //----- (0062FD40) -------------------------------------------------------- void *__thiscall sub_62FD40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MagicField::`vftable'; *((_DWORD *)this + 9) = 0; *((_DWORD *)this + 10) = 0; *((_DWORD *)this + 11) = 0; sub_62FCC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0C7C: using guessed type void *MagicField::`vftable'; //----- (0062FD90) -------------------------------------------------------- _DWORD *__thiscall sub_62FD90(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ST00_4 v1 = this; sub_85BA50(this); *v1 = &MapNavigator::`vftable'; sub_633AA0(v1 + 3); *((_WORD *)v1 + 44) = -1; *((_BYTE *)v1 + 52) = 0; v1[14] = 0; *((_BYTE *)v1 + 90) = 0; v2 = (_DWORD *)((char *)v1 + 91); v2[2] = 0; v2[1] = 0; *v2 = 0; strncpy((char *)v1 + 91, &byte_9F0C8C, 0xCu); return v1; } // 9F0C94: using guessed type void *MapNavigator::`vftable'; //----- (0062FE80) -------------------------------------------------------- void sub_62FE80() { _DWORD *v0; // eax _DWORD *v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi if ( !dword_AD1608 ) { v0 = operator new(0x68u); v1 = v0 ? sub_62FD90(v0) : 0; if ( (_DWORD *)dword_AD1608 != v1 ) { if ( dword_AD1608 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_AD1608; if ( !InterlockedDecrement((volatile LONG *)(dword_AD1608 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } dword_AD1608 = (int)v1; if ( v1 ) InterlockedIncrement(v1 + 1); } } } // AD1608: using guessed type int dword_AD1608; //----- (0062FF70) -------------------------------------------------------- char __thiscall sub_62FF70(char *this) { int v1; // eax char *v2; // ebx int v3; // eax int v4; // ecx void *v5; // ecx _DWORD *v6; // ebx int i; // edi int v8; // eax unsigned __int16 *v9; // esi int v10; // ecx int v11; // edx int v12; // eax unsigned int v13; // esi unsigned __int16 *v14; // eax unsigned int v15; // esi int v16; // eax char *v18; // [esp+Ch] [ebp-18h] char v19[4]; // [esp+10h] [ebp-14h] int v20; // [esp+14h] [ebp-10h] int v21; // [esp+18h] [ebp-Ch] char v22; // [esp+1Ch] [ebp-8h] v1 = *(_DWORD *)(dword_ACB234 + 56); v2 = this; v18 = this; if ( v1 ) v3 = *(_DWORD *)(v1 + 40); else v3 = 0; v4 = *(_DWORD *)(dword_ACD9BC + 56); if ( v4 ) v5 = *(void **)(v4 + 40); else v5 = 0; v6 = v2 + 12; sub_6336C0(v6, v5, v3, 4); for ( i = 0; i < sub_431660(); ++i ) { v8 = sub_7474E0((_DWORD *)(dword_ACB234 + 4), i); v9 = (unsigned __int16 *)v8; if ( v8 ) { v10 = *(_DWORD *)(v8 + 6); *(_DWORD *)v19 = *(_DWORD *)(v8 + 2); v11 = *(_DWORD *)(v8 + 10); v20 = v10; v21 = v11; v22 = 0; v12 = sub_49F8D0((_DWORD *)(v8 + 2)); if ( !v12 ) goto LABEL_19; sub_633B00(v6, v19, *v9, *(_DWORD *)(v12 + 212)); } } v13 = 0; if ( sub_630EC0() <= 0 ) { LABEL_15: v15 = 0; if ( sub_630EE0() <= 0 ) { LABEL_18: v18[8] = 1; v18[90] = (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x3C; return 1; } while ( 1 ) { v16 = sub_7474E0((_DWORD *)(dword_ACD9C0 + 4), v15); if ( !v16 ) break; sub_6343B0(v6, *(_DWORD **)v16, *(_DWORD **)(v16 + 4), *(unsigned __int16 *)(v16 + 12), *(_DWORD *)(v16 + 8)); if ( (signed int)++v15 >= sub_630EE0() ) goto LABEL_18; } } else { while ( 1 ) { v14 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACD9BC + 4), v13); if ( !v14 ) break; sub_6342B0(v6, *v14, *(_DWORD *)(v14 + 1), *(_DWORD *)(v14 + 3), *((unsigned __int8 *)v14 + 10)); if ( (signed int)++v13 >= sub_630EC0() ) goto LABEL_15; } } LABEL_19: v18[8] = 0; return 0; } // ACB234: using guessed type int dword_ACB234; // ACD9BC: using guessed type int dword_ACD9BC; // ACD9C0: using guessed type int dword_ACD9C0; //----- (00630100) -------------------------------------------------------- char *__thiscall sub_630100(unsigned __int16 *this, float *a2) { unsigned __int16 *v2; // esi int v3; // eax float **v4; // edi int v5; // eax int v6; // eax char v7; // ST08_1 int v8; // ST0C_4 int v9; // ST10_4 int v10; // ST04_4 int v11; // ST14_4 char *v12; // eax char *v13; // eax double v14; // st6 double v15; // st5 double v16; // st6 double v17; // st7 _DWORD *v18; // eax float v20; // [esp+Ch] [ebp-24h] float v21; // [esp+10h] [ebp-20h] float v22; // [esp+14h] [ebp-1Ch] float v23; // [esp+18h] [ebp-18h] float v24; // [esp+1Ch] [ebp-14h] float v25; // [esp+20h] [ebp-10h] float v26; // [esp+24h] [ebp-Ch] float v27; // [esp+28h] [ebp-8h] float v28; // [esp+2Ch] [ebp-4h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v4 = *(float ***)(v3 + 1220); if ( v4 ) { sub_5E9180(*(float ***)(v3 + 1220)); v5 = v2[44]; if ( (_WORD)v5 != -1 ) { v6 = sub_49F370(v5); if ( v6 ) { v7 = aIii[0]; v8 = *(_DWORD *)&aIii[4]; v9 = dword_AA8CA0; v10 = v6 + 34; v11 = dword_AA8CA4; v12 = (char *)sub_40A910(-1617308968); v13 = sub_7549E0(v12, v10); sub_5E9030(v4, (int)v13, v7, v8, v9, v11, 0, 5.0); } } } } (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v20); v23 = *((float *)v2 + 16) - v20; v14 = *((float *)v2 + 17); v26 = v23; v15 = v14 - v21; v16 = v21; v24 = v15; v25 = *((float *)v2 + 18) - v22; v26 = v23 * 0.800000011920929; v27 = v24 * 0.800000011920929; v28 = 0.800000011920929 * v25; v17 = v22; v23 = v20 + v26; *a2 = v23; v24 = v16 + v27; a2[1] = v24; v25 = v17 + v28; a2[2] = v25; v18 = (_DWORD *)((char *)v2 + 91); *((_BYTE *)v2 + 52) = 0; v2[44] = -1; v18[2] = 0; v18[1] = 0; *v18 = 0; return strncpy((char *)v2 + 91, byte_9F0C8D, 0xCu); } // AA8CA0: using guessed type int dword_AA8CA0; // AA8CA4: using guessed type int dword_AA8CA4; //----- (00630280) -------------------------------------------------------- char __thiscall sub_630280(char *this, int a2, float *a3, char *a4, char *a5, __int16 a6) { char *v6; // esi int v7; // eax float **v8; // ebx char v9; // al int v10; // eax float *v11; // eax int v12; // ST04_4 int v13; // ST08_4 int v14; // ST0C_4 int v15; // ST10_4 const CHAR *v16; // eax int v17; // ebx double v18; // st7 char *v19; // ST18_4 int v20; // eax float *v21; // eax int v22; // edx float *v24; // eax int v25; // ST04_4 int v26; // ST08_4 int v27; // ST0C_4 int v28; // ST10_4 const CHAR *v29; // eax float *v30; // eax float **v31; // ecx float **v32; // [esp+14h] [ebp-2Ch] int v33; // [esp+18h] [ebp-28h] int v34; // [esp+1Ch] [ebp-24h] char *v35; // [esp+20h] [ebp-20h] float *v36; // [esp+24h] [ebp-1Ch] int *v37; // [esp+28h] [ebp-18h] int v38; // [esp+2Ch] [ebp-14h] char v39[4]; // [esp+30h] [ebp-10h] char *v40; // [esp+34h] [ebp-Ch] float v41; // [esp+38h] [ebp-8h] v6 = this; v36 = a3; v35 = a5; v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v7 ) return 0; v8 = *(float ***)(v7 + 1220); v32 = v8; if ( !v8 ) return 0; if ( !v6[8] || !v6[90] || (v9 = dword_AD8EBC[1924], v9 == 4) || v9 == 5 ) { v31 = v8; goto LABEL_25; } sub_474A60(v39, a4); v10 = sub_49F8D0(v39); if ( v10 && *(_DWORD *)(v10 + 212) == 1 ) { sub_5E9180(v8); v11 = sub_419EE0((float *)&v38, 0xFFu, 0x90u, 0, 0xFFu); v12 = *(_DWORD *)v11; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); v15 = *((_DWORD *)v11 + 3); v16 = sub_40A910(-1920365408); sub_5E9030(v8, (int)v16, v12, v13, v14, v15, 0, 3.0); return 0; } v17 = (int)(v6 + 56); *((_WORD *)v6 + 44) = -1; *((_DWORD *)v6 + 14) = 0; *((_DWORD *)v6 + 15) = 0; v18 = *(float *)(a2 + 4); v37 = (int *)(v6 + 12); if ( !sub_634A20((_DWORD *)v6 + 3, a4, (signed int)*(float *)a2, (signed int)v18, (int)&v33) || !sub_634A20(v37, v35, (signed int)*v36, (signed int)v36[1], (int)&v34) ) { v31 = v32; LABEL_25: sub_5E9180(v31); return 0; } v19 = v35; *((_WORD *)v6 + 44) = a6; sub_410C30(v6 + 91, v19); if ( !sub_634520(v37, *(_DWORD **)v33, *(_DWORD *)v34, (_DWORD *)v6 + 14) ) { if ( v33 == v34 ) { *((_DWORD *)v6 + 19) = *(_DWORD *)a2; *((_DWORD *)v6 + 20) = *(_DWORD *)(a2 + 4); v30 = v36; *((_DWORD *)v6 + 21) = *(_DWORD *)(a2 + 8); *((float *)v6 + 16) = *v30; *((float *)v6 + 17) = v30[1]; *((float *)v6 + 18) = v30[2]; sub_630100((unsigned __int16 *)v6, (float *)v39); *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, v39); sub_67D830((int)dword_AD8EBC); } return 1; } if ( *(_DWORD *)v17 ) { sub_634520(v37, *(_DWORD **)v33, *(_DWORD *)v34, (_DWORD *)v6 + 14); v20 = *(_DWORD *)v17; *(float *)&v35 = (double)*(signed int *)(*(_DWORD *)v17 + 12); *(float *)v39 = (double)*(signed int *)(v20 + 8); v40 = v35; v41 = 0.0; *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, v39); sub_67D830((int)dword_AD8EBC); v6[52] = 1; *(_WORD *)(dword_B67118 + 28) |= 1u; *((_DWORD *)v6 + 19) = *(_DWORD *)a2; *((_DWORD *)v6 + 20) = *(_DWORD *)(a2 + 4); *((_DWORD *)v6 + 21) = *(_DWORD *)(a2 + 8); v21 = v36; *((float *)v6 + 16) = *v36; *((float *)v6 + 17) = v21[1]; v22 = *(_DWORD *)v17; *((float *)v6 + 18) = v21[2]; if ( *(_DWORD *)(v22 + 16) == 2 ) { *((_DWORD *)v6 + 15) = 1; return 1; } return 1; } if ( sub_6337C0(v37) == 100 ) { sub_5E9180(v32); v24 = sub_419EE0((float *)&v38, 0xFFu, 0x90u, 0, 0xFFu); v25 = *(_DWORD *)v24; v26 = *((_DWORD *)v24 + 1); v27 = *((_DWORD *)v24 + 2); v28 = *((_DWORD *)v24 + 3); v29 = sub_40A910(181107836); sub_5E9030(v32, (int)v29, v25, v26, v27, v28, 0, 3.0); } else { sub_5E9180(v32); } return 1; } // B67118: using guessed type int dword_B67118; //----- (00630650) -------------------------------------------------------- void __thiscall sub_630650(_BYTE *this, int a2) { _BYTE *v2; // ebx bool v3; // zf const void **v4; // edi int v5; // eax float **v6; // esi float *v7; // eax int v8; // ST08_4 int v9; // ST0C_4 int v10; // ST10_4 int v11; // ST14_4 const CHAR *v12; // eax signed int *v13; // eax void (__stdcall *v14)(float *); // edx int v15; // esi _DWORD *v16; // eax unsigned int v17; // eax int v18; // eax _DWORD *v19; // esi void (__stdcall *v20)(char *); // edx int *v21; // eax int v22; // ecx int v23; // eax int v24; // edx __int16 v25; // ST1C_2 int v26; // eax signed int *v27; // edi double v28; // st7 char *v29; // edx float v30; // edi int v31; // edi int v32; // eax int v33; // eax float **v34; // esi int v35; // eax int v36; // eax char v37; // ST08_1 int v38; // ST0C_4 int v39; // ST10_4 int v40; // ST04_4 int v41; // ST14_4 char *v42; // eax char *v43; // eax double v44; // st7 double v45; // st7 int v46; // edx void (__stdcall *v47)(float *); // edx _DWORD *v48; // esi unsigned __int16 *v49; // edi float v50; // eax char *v51; // eax _BYTE *v52; // eax signed int *v53; // edi double v54; // st7 signed int *v55; // edi double v56; // st7 signed int *v57; // edi double v58; // st7 char v59; // [esp+14h] [ebp-198h] int v60; // [esp+18h] [ebp-194h] int v61; // [esp+1Ch] [ebp-190h] int v62; // [esp+20h] [ebp-18Ch] float v63; // [esp+40h] [ebp-16Ch] float v64; // [esp+44h] [ebp-168h] float v65; // [esp+48h] [ebp-164h] float v66; // [esp+4Ch] [ebp-160h] float v67; // [esp+50h] [ebp-15Ch] float v68; // [esp+54h] [ebp-158h] float v69; // [esp+58h] [ebp-154h] signed int v70; // [esp+5Ch] [ebp-150h] float v71; // [esp+60h] [ebp-14Ch] float v72; // [esp+64h] [ebp-148h] float v73; // [esp+68h] [ebp-144h] float v74; // [esp+6Ch] [ebp-140h] float v75; // [esp+70h] [ebp-13Ch] float v76; // [esp+74h] [ebp-138h] float v77; // [esp+78h] [ebp-134h] char v78[4]; // [esp+7Ch] [ebp-130h] float v79; // [esp+80h] [ebp-12Ch] float v80; // [esp+84h] [ebp-128h] char v81; // [esp+88h] [ebp-124h] int v82; // [esp+89h] [ebp-123h] int v83; // [esp+188h] [ebp-24h] int v84; // [esp+18Ch] [ebp-20h] int v85; // [esp+190h] [ebp-1Ch] char v86; // [esp+194h] [ebp-18h] int v87; // [esp+198h] [ebp-14h] int v88; // [esp+19Ch] [ebp-10h] int v89; // [esp+1A0h] [ebp-Ch] char v90; // [esp+1A4h] [ebp-8h] v2 = this; if ( this[8] ) { if ( sub_6F3100(35) == 1 ) v2[90] = 1; if ( v2[90] && !sub_6F3100(35) ) v2[90] = (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) <= 0x3C; if ( v2[52] ) { v3 = *((_DWORD *)v2 + 14) == 0; v4 = (const void **)(v2 + 56); LODWORD(v74) = v2 + 56; if ( !v3 ) { if ( sub_65C450(dword_AD8EBC) || sub_65C360(dword_AD8EBC) || sub_65C4A0(dword_AD8EBC) ) { v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 ) { v6 = *(float ***)(v5 + 1220); if ( v6 ) { sub_5E9180(*(float ***)(v5 + 1220)); v7 = sub_419EE0((float *)&v83, 0xFFu, 0x90u, 0, 0xFFu); v8 = *(_DWORD *)v7; v9 = *((_DWORD *)v7 + 1); v10 = *((_DWORD *)v7 + 2); v11 = *((_DWORD *)v7 + 3); v12 = sub_40A910(1011971465); sub_5E9030(v6, (int)v12, v8, v9, v10, v11, 0, 3.0); } } v2[52] = 0; } v13 = (signed int *)*v4; v14 = *(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200); v75 = (double)*((signed int *)*v4 + 2); v76 = (double)v13[3]; v14(&v66); v15 = *((_DWORD *)v2 + 15); v66 = v66 - v75; v67 = v67 - v76; v68 = 0.0 - 0.0; if ( v15 == 3 ) { v3 = *v4 == 0; *((_DWORD *)v2 + 15) = 0; if ( v3 ) { sub_630100((unsigned __int16 *)v2, &v75); } else { v16 = sub_439D70(byte_ADB468, v78); if ( sub_431080(v2 + 91, v16) ) { v17 = sub_5701E0(*((_WORD *)v2 + 44)); v18 = sub_5701A0(v17); v19 = (_DWORD *)v18; if ( v18 ) { v71 = (double)*(unsigned int *)(v18 + 16); v72 = (double)*(unsigned int *)(v18 + 20); v73 = 0.0; v63 = v71; v64 = v72; v20 = *(void (__stdcall **)(char *))(*(_DWORD *)dword_AD8EBC + 200); v65 = 0.0; v20(v78); v21 = sub_439D70(byte_ADB468, &v71); v83 = *v21; v22 = v19[1]; v84 = v21[1]; v23 = v21[2]; v24 = v19[2]; v87 = v22; v25 = *((_WORD *)v2 + 44); v85 = v23; v26 = v19[3]; v88 = v24; v89 = v26; v86 = 0; v90 = 0; sub_630280(v2, (int)v78, &v63, (char *)&v83, (char *)&v87, v25); return; } } v27 = (signed int *)*v4; v71 = (double)v27[2]; v28 = (double)v27[3]; v75 = v71; v72 = v28; v76 = v72; v73 = 0.0; v77 = 0.0; } *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); v29 = (char *)&v75; goto LABEL_63; } *(float *)&v70 = v68 * v68 + v66 * v66 + v67 * v67; *(float *)&v70 = sqrt(*(float *)&v70); if ( *(float *)&v70 < 50.0 && v15 != 2 ) { if ( v15 == 1 ) { if ( *((_DWORD *)*v4 + 4) == 2 ) { qmemcpy(&v59, *v4, 0x2Cu); v30 = v74; sub_634520((_DWORD *)v2 + 3, (_DWORD *)0xFFFFFFFF, -1, (_DWORD *)LODWORD(v74)); v31 = *(_DWORD *)LODWORD(v30); if ( v31 ) { v81 = 0; memset(&v82, 0, 0xFFu); sub_633D80((_DWORD *)v2 + 3, *(_DWORD *)(v31 + 4), &v81); sub_474A60(v78, &v81); v32 = sub_49F8D0(v78); v4 = (const void **)LODWORD(v74); if ( v60 == *(_DWORD *)(*(_DWORD *)LODWORD(v74) + 4) ) { *((_DWORD *)v2 + 15) = 0; } else if ( v32 && *(_DWORD *)(v32 + 212) == 1 ) { *((_DWORD *)v2 + 15) = 0; v33 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v33 ) { v34 = *(float ***)(v33 + 1220); if ( v34 ) { sub_5E9180(*(float ***)(v33 + 1220)); v35 = *((unsigned __int16 *)v2 + 44); if ( (_WORD)v35 != -1 ) { v36 = sub_49F370(v35); if ( v36 ) { v37 = aIii[0]; v38 = *(_DWORD *)&aIii[4]; v39 = dword_AA8CA0; v40 = v36 + 34; v41 = dword_AA8CA4; v42 = (char *)sub_40A910(-588593175); v43 = sub_7549E0(v42, v40); sub_5E9030(v34, (int)v43, v37, v38, v39, v41, 0, 5.0); } } } } v44 = (double)v61; *v4 = 0; v2[52] = 0; v75 = v44; v45 = (double)v62; v71 = v75; *((_WORD *)v2 + 44) = -1; v76 = v45; v72 = v76; v77 = 0.0; v73 = 0.0; } } else { *((_DWORD *)v2 + 15) = 0; sub_630100((unsigned __int16 *)v2, &v71); v4 = (const void **)LODWORD(v74); } } if ( *((_DWORD *)v2 + 15) ) { v46 = *(_DWORD *)dword_AD8EBC; v74 = 9999.0; v47 = *(void (__stdcall **)(float *))(v46 + 200); v70 = 0xFFFF; v47(&v63); v48 = (_DWORD *)dword_AD8CCC; if ( dword_AD8CCC ) { do { v49 = (unsigned __int16 *)v48[2]; v48 = (_DWORD *)*v48; if ( v49 ) { if ( sub_6516C0(v49) ) { (*(void (__thiscall **)(unsigned __int16 *, float *))(*(_DWORD *)v49 + 200))(v49, &v75); *(float *)v78 = v63 - v75; v79 = v64 - v76; v80 = v65 - v77; v69 = sub_443070((float *)v78); if ( v69 < (double)v74 ) { LODWORD(v50) = v49[274]; v74 = v69; *(float *)&v70 = v50; } } } } while ( v48 ); if ( (_WORD)v70 != -1 ) { v51 = sub_664AB0(dword_AD8C90, v70); (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v51 + 200))(v51, &v71); } } v52 = (_BYTE *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v52 ) { sub_4B5D10(v52); if ( v2[52] ) { if ( *((_DWORD *)v2 + 15) == 1 ) *((_DWORD *)v2 + 15) = 2; } } } else { v53 = (signed int *)*v4; if ( v53 ) { v75 = (double)v53[2]; v54 = (double)v53[3]; v71 = v75; v76 = v54; v72 = v76; v77 = 0.0; v73 = 0.0; } } } else { sub_634520((_DWORD *)v2 + 3, (_DWORD *)0xFFFFFFFF, -1, (_DWORD *)v2 + 14); v55 = (signed int *)*v4; *((_DWORD *)v2 + 15) = 0; if ( v55 ) { v75 = (double)v55[2]; v56 = (double)v55[3]; v71 = v75; v76 = v56; v72 = v76; v77 = 0.0; v73 = 0.0; if ( v55[4] == 2 ) *((_DWORD *)v2 + 15) = 1; } else { sub_630100((unsigned __int16 *)v2, &v71); } } *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, &v71); goto LABEL_64; } if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { v57 = (signed int *)*v4; if ( v57 ) { v75 = (double)v57[2]; v58 = (double)v57[3]; *(float *)v78 = v75; v76 = v58; v79 = v76; v77 = 0.0; v80 = 0.0; *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); v29 = v78; LABEL_63: sub_67B590((int)dword_AD8EBC, v29); LABEL_64: sub_67D830((int)dword_AD8EBC); return; } } } } } } // AA8CA0: using guessed type int dword_AA8CA0; // AA8CA4: using guessed type int dword_AA8CA4; // AD8CCC: using guessed type int dword_AD8CCC; //----- (00630EB0) -------------------------------------------------------- char *sub_630EB0() { return dword_BA4574; } //----- (00630EC0) -------------------------------------------------------- int sub_630EC0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9BC + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9BC: using guessed type int dword_ACD9BC; //----- (00630EE0) -------------------------------------------------------- int sub_630EE0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9C0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9C0: using guessed type int dword_ACD9C0; //----- (00630F00) -------------------------------------------------------- _DWORD *__thiscall sub_630F00(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &MapNavigator::`vftable'; sub_633AC0((_DWORD *)this + 3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0C94: using guessed type void *MapNavigator::`vftable'; //----- (00630F70) -------------------------------------------------------- int sub_630F70() { int result; // eax result = 0; dword_AD46E0 = 0; dword_AD46DC = 0; dword_AD46D8 = 0; dword_AD398C = 0; dword_AD3988 = 0; dword_AD3980 = 0; dword_AD3978 = 0; dword_AD3970 = 0; dword_AD3968 = 0; dword_AD3984 = 0; dword_AD397C = 0; dword_AD3974 = 0; dword_AD396C = 0; dword_AD3964 = 0; dword_AD1888 = 0; dword_AD162C = 0; dword_AD1628 = 0; dword_AD188C = 0; dword_AD3960 = 0; return result; } // AD1628: using guessed type int dword_AD1628; // AD162C: using guessed type int dword_AD162C; // AD1888: using guessed type int dword_AD1888; // AD188C: using guessed type int dword_AD188C; // AD3960: using guessed type int dword_AD3960; // AD3964: using guessed type int dword_AD3964; // AD3968: using guessed type int dword_AD3968; // AD396C: using guessed type int dword_AD396C; // AD3970: using guessed type int dword_AD3970; // AD3974: using guessed type int dword_AD3974; // AD3978: using guessed type int dword_AD3978; // AD397C: using guessed type int dword_AD397C; // AD3980: using guessed type int dword_AD3980; // AD3984: using guessed type int dword_AD3984; // AD3988: using guessed type int dword_AD3988; // AD398C: using guessed type int dword_AD398C; // AD46D8: using guessed type int dword_AD46D8; // AD46DC: using guessed type int dword_AD46DC; // AD46E0: using guessed type int dword_AD46E0; //----- (00630FE0) -------------------------------------------------------- char *__cdecl sub_630FE0(unsigned int a1) { char *result; // eax if ( a1 < dword_AD162C ) result = (char *)&unk_AD1AE8 + 3 * a1; else result = 0; return result; } // AD162C: using guessed type int dword_AD162C; //----- (00631000) -------------------------------------------------------- int sub_631000() { return dword_AD162C; } // AD162C: using guessed type int dword_AD162C; //----- (00631010) -------------------------------------------------------- char *__cdecl sub_631010(unsigned int a1) { char *result; // eax if ( a1 < dword_AD1628 ) result = (char *)&unk_AD1890 + 3 * a1; else result = 0; return result; } // AD1628: using guessed type int dword_AD1628; //----- (00631030) -------------------------------------------------------- int sub_631030() { return dword_AD1628; } // AD1628: using guessed type int dword_AD1628; //----- (00631040) -------------------------------------------------------- int sub_631040() { return dword_AD46E0; } // AD46E0: using guessed type int dword_AD46E0; //----- (00631050) -------------------------------------------------------- int sub_631050() { return dword_AD46DC; } // AD46DC: using guessed type int dword_AD46DC; //----- (00631060) -------------------------------------------------------- int sub_631060() { return dword_AD46D8; } // AD46D8: using guessed type int dword_AD46D8; //----- (00631070) -------------------------------------------------------- char *__cdecl sub_631070(unsigned int a1) { char *result; // eax if ( a1 < dword_AD46E0 ) result = (char *)&unk_AD4480 + 3 * a1; else result = 0; return result; } // AD46E0: using guessed type int dword_AD46E0; //----- (00631090) -------------------------------------------------------- char *__cdecl sub_631090(unsigned int a1) { char *result; // eax if ( a1 < dword_AD46DC ) result = (char *)&unk_AD4228 + 3 * a1; else result = 0; return result; } // AD46DC: using guessed type int dword_AD46DC; //----- (006310B0) -------------------------------------------------------- char *__cdecl sub_6310B0(unsigned int a1) { char *result; // eax if ( a1 < dword_AD46D8 ) result = (char *)&unk_AD3FD0 + 3 * a1; else result = 0; return result; } // AD46D8: using guessed type int dword_AD46D8; //----- (006310D0) -------------------------------------------------------- int sub_6310D0() { return dword_AD398C; } // AD398C: using guessed type int dword_AD398C; //----- (006310E0) -------------------------------------------------------- int *__cdecl sub_6310E0(unsigned int a1) { int *result; // eax if ( a1 < dword_AD398C ) result = &dword_AD3990[2 * a1]; else result = 0; return result; } // AD398C: using guessed type int dword_AD398C; // AD3990: using guessed type int dword_AD3990[]; //----- (00631100) -------------------------------------------------------- char *__cdecl sub_631100(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3984 ) result = (char *)&unk_AD2DA8 + 3 * a1; else result = 0; return result; } // AD3984: using guessed type int dword_AD3984; //----- (00631120) -------------------------------------------------------- char *__cdecl sub_631120(unsigned int a1) { char *result; // eax if ( a1 < dword_AD397C ) result = (char *)&unk_AD2B50 + 3 * a1; else result = 0; return result; } // AD397C: using guessed type int dword_AD397C; //----- (00631140) -------------------------------------------------------- char *__cdecl sub_631140(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3974 ) result = (char *)&unk_AD28F8 + 3 * a1; else result = 0; return result; } // AD3974: using guessed type int dword_AD3974; //----- (00631160) -------------------------------------------------------- char *__cdecl sub_631160(unsigned int a1) { char *result; // eax if ( a1 < dword_AD396C ) result = (char *)&unk_AD26A0 + 3 * a1; else result = 0; return result; } // AD396C: using guessed type int dword_AD396C; //----- (00631180) -------------------------------------------------------- char *__cdecl sub_631180(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3988 ) result = (char *)&unk_AD3708 + 3 * a1; else result = 0; return result; } // AD3988: using guessed type int dword_AD3988; //----- (006311A0) -------------------------------------------------------- char *__cdecl sub_6311A0(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3980 ) result = (char *)&unk_AD34B0 + 3 * a1; else result = 0; return result; } // AD3980: using guessed type int dword_AD3980; //----- (006311C0) -------------------------------------------------------- char *__cdecl sub_6311C0(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3978 ) result = (char *)&unk_AD3258 + 3 * a1; else result = 0; return result; } // AD3978: using guessed type int dword_AD3978; //----- (006311E0) -------------------------------------------------------- char *__cdecl sub_6311E0(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3970 ) result = (char *)&unk_AD3000 + 3 * a1; else result = 0; return result; } // AD3970: using guessed type int dword_AD3970; //----- (00631200) -------------------------------------------------------- char *__cdecl sub_631200(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3964 ) result = (char *)&unk_AD2448 + 3 * a1; else result = 0; return result; } // AD3964: using guessed type int dword_AD3964; //----- (00631220) -------------------------------------------------------- char *__cdecl sub_631220(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3968 ) result = (char *)&unk_AD21F0 + 3 * a1; else result = 0; return result; } // AD3968: using guessed type int dword_AD3968; //----- (00631240) -------------------------------------------------------- char *__cdecl sub_631240(unsigned int a1) { char *result; // eax if ( a1 < dword_AD188C ) result = (char *)&unk_AD1F98 + 3 * a1; else result = 0; return result; } // AD188C: using guessed type int dword_AD188C; //----- (00631260) -------------------------------------------------------- char *__cdecl sub_631260(unsigned int a1) { char *result; // eax if ( a1 < dword_AD3960 ) result = (char *)&unk_AD1D40 + 3 * a1; else result = 0; return result; } // AD3960: using guessed type int dword_AD3960; //----- (006312A0) -------------------------------------------------------- _DWORD *__cdecl sub_6312A0(unsigned __int8 *a1) { unsigned int v1; // edi __int16 *v2; // eax _DWORD *result; // eax unsigned int v4; // ebx unsigned __int8 *v5; // esi unsigned __int8 *v6; // ecx __int16 v7; // cx int v8; // [esp+4h] [ebp-4h] v1 = 0; dword_AD398C = 0; v2 = word_AD3994; do { *((_DWORD *)v2 - 1) = 0; *v2 = -1; v2 += 4; } while ( (signed int)v2 < (signed int)&unk_AD3AE4 ); result = a1; if ( a1 ) { v4 = *a1; v8 = 0; if ( v4 ) { v5 = a1 + 1; if ( v4 > 0 ) { do { result = sub_688200(v5, &a1, &v8); v6 = v5 + 1; v5 += v8; if ( result ) { dword_AD3990[2 * v1] = (int)result; v7 = *v6; ++dword_AD398C; word_AD3994[4 * v1] = v7; } ++v1; } while ( v1 < v4 ); } } } return result; } // AD398C: using guessed type int dword_AD398C; // AD3990: using guessed type int dword_AD3990[]; // AD3994: using guessed type __int16 word_AD3994[]; //----- (00631320) -------------------------------------------------------- char *__cdecl sub_631320(char *a1) { char *result; // eax int v2; // ecx result = a1; if ( dword_AD3990[2 * (_DWORD)a1] ) { v2 = dword_AD398C - (_DWORD)a1; if ( (char *)dword_AD398C != a1 ) { result = (char *)&unk_AD3998 + 8 * (_DWORD)a1; do { *((_DWORD *)result - 2) = *(_DWORD *)result; *((_WORD *)result - 2) = *((_WORD *)result + 2); *(_DWORD *)result = 0; *((_WORD *)result + 2) = -1; result += 8; --v2; } while ( v2 ); } --dword_AD398C; } return result; } // AD398C: using guessed type int dword_AD398C; // AD3990: using guessed type int dword_AD3990[]; //----- (00631370) -------------------------------------------------------- int *__cdecl sub_631370(_WORD *a1) { int v1; // esi _DWORD *v2; // eax __int16 v3; // cx v1 = dword_AD398C; v2 = sub_6876E0(a1 + 1); if ( v2 ) { dword_AD3990[2 * v1] = (int)v2; v3 = *a1; ++dword_AD398C; word_AD3994[4 * v1] = v3; } return &dword_AD3990[2 * v1]; } // AD398C: using guessed type int dword_AD398C; // AD3990: using guessed type int dword_AD3990[]; // AD3994: using guessed type __int16 word_AD3994[]; //----- (006313C0) -------------------------------------------------------- int __cdecl sub_6313C0(__int16 a1) { int result; // eax int v2; // ecx result = 0; v2 = 0; if ( dword_AD398C ) { while ( word_AD3994[4 * v2] != a1 ) { if ( ++v2 >= (unsigned int)dword_AD398C ) return result; } result = v2; } return result; } // AD398C: using guessed type int dword_AD398C; // AD3994: using guessed type __int16 word_AD3994[]; //----- (006313F0) -------------------------------------------------------- int *__cdecl sub_6313F0(int *a1) { int *result; // eax sub_630F70(); result = a1; dword_AD1610 = *a1; dword_AD1614 = a1[1]; dword_AD1618 = a1[2]; dword_AD161C = a1[3]; dword_AD1620 = a1[4]; dword_AD1624 = a1[5]; return result; } // AD1610: using guessed type int dword_AD1610; // AD1614: using guessed type int dword_AD1614; // AD1618: using guessed type int dword_AD1618; // AD161C: using guessed type int dword_AD161C; // AD1620: using guessed type int dword_AD1620; // AD1624: using guessed type int dword_AD1624; //----- (00631440) -------------------------------------------------------- int *sub_631440() { return &dword_AD1610; } // AD1610: using guessed type int dword_AD1610; //----- (00631450) -------------------------------------------------------- int *sub_631450() { return &dword_AD161C; } // AD161C: using guessed type int dword_AD161C; //----- (00631460) -------------------------------------------------------- int sub_631460() { return dword_AD3988; } // AD3988: using guessed type int dword_AD3988; //----- (00631470) -------------------------------------------------------- int sub_631470() { return dword_AD3980; } // AD3980: using guessed type int dword_AD3980; //----- (00631480) -------------------------------------------------------- int sub_631480() { return dword_AD3978; } // AD3978: using guessed type int dword_AD3978; //----- (00631490) -------------------------------------------------------- int sub_631490() { return dword_AD3970; } // AD3970: using guessed type int dword_AD3970; //----- (006314A0) -------------------------------------------------------- int sub_6314A0() { return dword_AD3984; } // AD3984: using guessed type int dword_AD3984; //----- (006314B0) -------------------------------------------------------- int sub_6314B0() { return dword_AD397C; } // AD397C: using guessed type int dword_AD397C; //----- (006314C0) -------------------------------------------------------- int sub_6314C0() { return dword_AD3974; } // AD3974: using guessed type int dword_AD3974; //----- (006314D0) -------------------------------------------------------- int sub_6314D0() { return dword_AD396C; } // AD396C: using guessed type int dword_AD396C; //----- (006314E0) -------------------------------------------------------- int sub_6314E0() { return dword_AD3968; } // AD3968: using guessed type int dword_AD3968; //----- (006314F0) -------------------------------------------------------- int sub_6314F0() { return dword_AD3964; } // AD3964: using guessed type int dword_AD3964; //----- (00631500) -------------------------------------------------------- int sub_631500() { return dword_AD3960; } // AD3960: using guessed type int dword_AD3960; //----- (00631510) -------------------------------------------------------- int sub_631510() { return dword_AD188C; } // AD188C: using guessed type int dword_AD188C; //----- (00631520) -------------------------------------------------------- int sub_631520() { return dword_AD1888; } // AD1888: using guessed type int dword_AD1888; //----- (00631530) -------------------------------------------------------- char *__cdecl sub_631530(unsigned int a1) { char *result; // eax if ( a1 < dword_AD1888 ) result = (char *)&unk_AD1630 + 3 * a1; else result = 0; return result; } // AD1888: using guessed type int dword_AD1888; //----- (00631550) -------------------------------------------------------- int (__thiscall ***sub_631550())(void *, char) { return &off_AB2930; } // AB2930: using guessed type int (__thiscall **off_AB2930)(void *, char); //----- (00631560) -------------------------------------------------------- int __cdecl sub_631560(_WORD *a1) { int result; // eax char *v2; // ebx int *v3; // esi unsigned __int8 *v4; // edi int v5; // eax int v6; // eax bool v7; // zf int *v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // [esp+Ch] [ebp-10h] unsigned __int16 v13; // [esp+10h] [ebp-Ch] int v14; // [esp+14h] [ebp-8h] sub_630F70(); result = 0; v2 = 0; v3 = 0; v14 = 0; if ( *a1 > 0u ) { v4 = (unsigned __int8 *)(a1 + 2); do { v13 = *(_WORD *)(v4 + 1); v12 = dword_ACB230; if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACB230 + 16))(*(unsigned __int16 *)(v4 + 1)) ) { if ( v13 <= *(_WORD *)(v12 + 200) ) { v6 = *(_DWORD *)(v12 + 196); v7 = *(_DWORD *)(v6 + 4 * v13) == 0; v8 = (int *)(v6 + 4 * v13); if ( v7 ) v5 = 0; else v5 = *v8; } else { v5 = 0; } } else { v5 = 0; } if ( !*v4 ) { v9 = *(_DWORD *)(v5 + 102); if ( v9 == 5 ) { v2 = (char *)&unk_AD4480; v3 = &dword_AD46E0; } else if ( (unsigned int)(v9 - 6) > 2 ) { v2 = (char *)&unk_AD3FD0; v3 = &dword_AD46D8; } else { v2 = (char *)&unk_AD4228; v3 = &dword_AD46DC; } } if ( *v3 >= (unsigned int)*v4 ) { LABEL_19: if ( (unsigned int)*v3 < 0xC8 ) { v11 = (int)&v2[2 * *v3 + *v3]; *(_WORD *)v11 = *(_WORD *)v4; *(_BYTE *)(v11 + 2) = v4[2]; ++*v3; } } else { while ( (unsigned int)*v3 < 0xC8 ) { v10 = (int)&v2[2 * *v3 + *v3]; *(_WORD *)v10 = -256; *(_BYTE *)(v10 + 2) = -1; if ( ++*v3 >= (unsigned int)*v4 ) goto LABEL_19; } } result = v14 + 1; v4 += 3; v14 = result; } while ( result < (unsigned __int16)*a1 ); } return result; } // ACB230: using guessed type int dword_ACB230; // AD46D8: using guessed type int dword_AD46D8; // AD46DC: using guessed type int dword_AD46DC; // AD46E0: using guessed type int dword_AD46E0; //----- (006316A0) -------------------------------------------------------- int __cdecl sub_6316A0(_WORD *a1) { _WORD *v1; // edi signed int v2; // ebx int *v3; // esi unsigned __int16 *v4; // edi char *v5; // eax int result; // eax unsigned __int8 *v7; // edi int v8; // ebx int v9; // eax int *v10; // eax int v11; // eax char *v12; // edx int v13; // eax int v14; // eax unsigned __int16 v15; // [esp+Ch] [ebp-10h] int v16; // [esp+10h] [ebp-Ch] char *v17; // [esp+14h] [ebp-8h] sub_630F70(); v1 = a1; v2 = 0; v3 = 0; v17 = 0; if ( *a1 > 0u ) { v4 = (_WORD *)((char *)a1 + 5); do { v5 = sub_7549E0("Sell ITem = %d. Index = %d\n", *v4, *((unsigned __int8 *)v4 - 1)); OutputDebugStringA(v5); ++v2; v4 = (unsigned __int16 *)((char *)v4 + 3); } while ( v2 < (unsigned __int16)*a1 ); v1 = a1; } result = 0; v16 = 0; if ( *v1 > 0u ) { v7 = (unsigned __int8 *)(v1 + 2); while ( 1 ) { v8 = dword_ACB230; v15 = *(_WORD *)(v7 + 1); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(unsigned __int16 *)(v7 + 1)) ) { if ( v15 <= *(_WORD *)(v8 + 200) ) { v10 = (int *)(*(_DWORD *)(v8 + 196) + 4 * v15); if ( *v10 ) v9 = *v10; else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } if ( *v7 ) goto LABEL_19; v11 = *(_DWORD *)(v9 + 102); if ( v11 == 16 ) break; if ( v11 != 35 ) goto LABEL_19; v12 = (char *)&unk_AD1AE8; v17 = (char *)&unk_AD1AE8; v3 = &dword_AD162C; LABEL_20: if ( *v3 >= (unsigned int)*v7 ) { LABEL_23: if ( (unsigned int)*v3 < 0xC8 ) { v14 = (int)&v12[2 * *v3 + *v3]; *(_WORD *)v14 = *(_WORD *)v7; *(_BYTE *)(v14 + 2) = v7[2]; ++*v3; } } else { while ( (unsigned int)*v3 < 0xC8 ) { v13 = (int)&v12[2 * *v3 + *v3]; *(_WORD *)v13 = -256; *(_BYTE *)(v13 + 2) = -1; if ( ++*v3 >= (unsigned int)*v7 ) goto LABEL_23; } } result = v16 + 1; v7 += 3; v16 = result; if ( result >= (unsigned __int16)*a1 ) return result; } v17 = (char *)&unk_AD1890; v3 = &dword_AD1628; LABEL_19: v12 = v17; goto LABEL_20; } return result; } // ACB230: using guessed type int dword_ACB230; // AD1628: using guessed type int dword_AD1628; // AD162C: using guessed type int dword_AD162C; //----- (006318C0) -------------------------------------------------------- void sub_6318C0() { int v0; // eax int v1; // ecx void *v2; // esi while ( dword_AB293C ) { v0 = dword_AB2934; v1 = *(_DWORD *)dword_AB2934; dword_AB2934 = v1; if ( v1 ) *(_DWORD *)(v1 + 4) = 0; else dword_AB2938 = 0; v2 = *(void **)(v0 + 8); off_AB2930[2](&off_AB2930, v0); --dword_AB293C; operator delete(v2); } } // AB2930: using guessed type int (__thiscall **off_AB2930)(void *, char); // AB2934: using guessed type int dword_AB2934; // AB2938: using guessed type int dword_AB2938; // AB293C: using guessed type int dword_AB293C; //----- (00631920) -------------------------------------------------------- signed int __cdecl sub_631920(_WORD *a1) { int v1; // ebx signed int result; // eax unsigned __int8 *v3; // edi _BYTE *v4; // esi _DWORD *v5; // eax char v6; // dl signed int v7; // [esp+8h] [ebp-8h] sub_630F70(); sub_6318C0(); v1 = 0; result = 0xFFFF; v7 = 0; if ( *a1 > 0u ) { v3 = (unsigned __int8 *)(a1 + 2); do { v4 = operator new(3u); v5 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB2930[1])(&off_AB2930); v5[2] = v4; *v5 = 0; v5[1] = dword_AB2938; if ( dword_AB2938 ) *(_DWORD *)dword_AB2938 = v5; else dword_AB2934 = (int)v5; dword_AB2938 = (int)v5; ++dword_AB293C; if ( *v3 == v1 ) { ++v7; *(_WORD *)v4 = *(_WORD *)v3; v6 = v3[2]; v3 += 3; } else { v6 = -1; *(_WORD *)v4 = -256; } ++v1; result = (signed int)a1; v4[2] = v6; } while ( v7 < (unsigned __int16)*a1 ); } return result; } // AB2930: using guessed type int (__thiscall **off_AB2930)(void *, char); // AB2934: using guessed type int dword_AB2934; // AB2938: using guessed type int dword_AB2938; // AB293C: using guessed type int dword_AB293C; //----- (006319F0) -------------------------------------------------------- int __cdecl sub_6319F0(_WORD *a1) { int result; // eax char *v2; // edi int *v3; // esi int v4; // ebx int *v5; // eax int v6; // ebx signed __int64 v7; // kr00_8 int v8; // eax int v9; // eax unsigned __int16 v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] unsigned __int8 *v12; // [esp+18h] [ebp-Ch] char v13; // [esp+23h] [ebp-1h] sub_630F70(); v11 = 0; result = (int)a1; v2 = 0; v3 = 0; if ( *a1 > 0u ) { v12 = (unsigned __int8 *)(a1 + 2); do { v4 = dword_ACB230; v10 = *(_WORD *)(v12 + 1); if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(unsigned __int16 *)(v12 + 1)) ) goto LABEL_44; if ( v10 > *(_WORD *)(v4 + 200) ) goto LABEL_44; v5 = (int *)(*(_DWORD *)(v4 + 196) + 4 * v10); if ( !*v5 ) goto LABEL_44; v6 = *v5; if ( !*v5 || *(_DWORD *)(v6 + 102) != 11 ) goto LABEL_44; if ( *v12 ) goto LABEL_39; if ( (unsigned __int8)sub_6BE7F0(*(_WORD *)v6) ) { v2 = (char *)&unk_AD1630; v3 = &dword_AD1888; goto LABEL_39; } if ( sub_438F10((void *)(v6 + 2)) ) { v13 = 1; } else { if ( !sub_579BC0((const char *)(v6 + 2)) ) goto LABEL_44; v13 = 0; } v7 = sub_6622F0(*(_DWORD *)(v6 + 207)); if ( sub_6621D0(v7, SHIDWORD(v7), 1) ) { if ( v13 ) { v2 = (char *)&unk_AD2DA8; v3 = &dword_AD3984; } else { v2 = (char *)&unk_AD3708; v3 = &dword_AD3988; } goto LABEL_39; } if ( sub_6621D0(v7, SHIDWORD(v7), 11) ) { if ( v13 ) { v2 = (char *)&unk_AD28F8; v3 = &dword_AD3974; } else { v2 = (char *)&unk_AD3258; v3 = &dword_AD3978; } goto LABEL_39; } if ( sub_6621D0(v7, SHIDWORD(v7), 6) ) { if ( v13 ) { v2 = (char *)&unk_AD2B50; v3 = &dword_AD397C; } else { v2 = (char *)&unk_AD34B0; v3 = &dword_AD3980; } goto LABEL_39; } if ( sub_6621D0(v7, SHIDWORD(v7), 16) ) { if ( v13 ) { v2 = (char *)&unk_AD26A0; v3 = &dword_AD396C; } else { v2 = (char *)&unk_AD3000; v3 = &dword_AD3970; } goto LABEL_39; } if ( sub_6621D0(v7, SHIDWORD(v7), 21) ) { if ( v13 ) { v2 = (char *)&unk_AD2448; v3 = &dword_AD3964; } else { v2 = (char *)&unk_AD21F0; v3 = &dword_AD3968; } goto LABEL_39; } if ( sub_6621D0(v7, SHIDWORD(v7), 26) ) { if ( v13 ) { v2 = (char *)&unk_AD1F98; v3 = &dword_AD188C; } else { v2 = (char *)&unk_AD1D40; v3 = &dword_AD3960; } LABEL_39: if ( *v3 >= (unsigned int)*v12 ) { LABEL_42: if ( (unsigned int)*v3 < 0xC8 ) { v9 = (int)&v2[2 * *v3 + *v3]; *(_WORD *)v9 = *(_WORD *)v12; *(_BYTE *)(v9 + 2) = v12[2]; ++*v3; } } else { while ( (unsigned int)*v3 < 0xC8 ) { v8 = (int)&v2[2 * *v3 + *v3]; *(_WORD *)v8 = -256; *(_BYTE *)(v8 + 2) = -1; if ( ++*v3 >= (unsigned int)*v12 ) goto LABEL_42; } } } LABEL_44: v12 += 3; result = v11 + 1; v11 = result; } while ( result < (unsigned __int16)*a1 ); } return result; } // ACB230: using guessed type int dword_ACB230; // AD1888: using guessed type int dword_AD1888; // AD188C: using guessed type int dword_AD188C; // AD3960: using guessed type int dword_AD3960; // AD3964: using guessed type int dword_AD3964; // AD3968: using guessed type int dword_AD3968; // AD396C: using guessed type int dword_AD396C; // AD3970: using guessed type int dword_AD3970; // AD3974: using guessed type int dword_AD3974; // AD3978: using guessed type int dword_AD3978; // AD397C: using guessed type int dword_AD397C; // AD3980: using guessed type int dword_AD3980; // AD3984: using guessed type int dword_AD3984; // AD3988: using guessed type int dword_AD3988; //----- (00631CB0) -------------------------------------------------------- void *__thiscall sub_631CB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0CF4: using guessed type void *NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; //----- (00631CE0) -------------------------------------------------------- _DWORD *__thiscall sub_631CE0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0CF4: using guessed type void *NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; // 9F0D04: using guessed type void *NiTPointerListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; //----- (00631E00) -------------------------------------------------------- int __thiscall sub_631E00(_DWORD *this) { int v1; // eax int v2; // edx int result; // eax v1 = this[2]; v2 = v1 + 4; if ( this[3] < (unsigned int)(v1 + 4) ) return 0; result = *(_DWORD *)(v1 + *this); this[2] = v2; return result; } //----- (00631E60) -------------------------------------------------------- char __thiscall sub_631E60(_DWORD *this, void *a2, size_t a3) { _DWORD *v3; // esi int v4; // eax v3 = this; v4 = this[3]; if ( this[1] < v4 + a3 ) return 0; memcpy((void *)(v4 + *this), a2, a3); v3[3] += a3; return 1; } //----- (00631EE0) -------------------------------------------------------- int __thiscall sub_631EE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *i; // edi _DWORD *v3; // ST00_4 int result; // eax v1 = (_DWORD *)this[2]; for ( i = this + 1; v1; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 8))(i, v3) ) { v3 = v1; v1 = (_DWORD *)*v1; } i[3] = 0; i[1] = 0; i[2] = 0; return result; } //----- (00631F20) -------------------------------------------------------- char __thiscall sub_631F20(_DWORD *this, int a2) { int **v2; // esi unsigned __int8 (__stdcall *v3)(int); // edx v2 = (int **)this[2]; if ( !v2 ) return 1; while ( 1 ) { v3 = *(unsigned __int8 (__stdcall **)(int))*v2[2]; v2 = (int **)*v2; if ( !v3(a2) ) break; if ( !v2 ) return 1; } return 0; } //----- (00631F60) -------------------------------------------------------- int __thiscall sub_631F60(_DWORD *this, int a2) { int **i; // esi int (__stdcall *v3)(int); // edx int result; // eax for ( i = (int **)this[2]; i; result = v3(a2) ) { v3 = *(int (__stdcall **)(int))(*i[2] + 4); i = (int **)*i; } return result; } //----- (00631F90) -------------------------------------------------------- _DWORD *__thiscall sub_631F90(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ecx v2 = this + 1; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[1] + 4))(this + 1); result[2] = a2; *result = 0; result[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (00632020) -------------------------------------------------------- char __thiscall sub_632020(_DWORD *this, int a2) { if ( !a2 ) return 0; this[2] = *(_DWORD *)(a2 + 3); return 1; } //----- (00632040) -------------------------------------------------------- signed int __thiscall sub_632040(_WORD *this, _WORD *a2) { *a2 = this[4]; return 2; } //----- (00632060) -------------------------------------------------------- char __thiscall sub_632060(_WORD *this, int a2) { if ( !a2 ) return 0; this[4] = *(_WORD *)(a2 + 3); return 1; } //----- (00632080) -------------------------------------------------------- signed int __thiscall sub_632080(_WORD *this, _WORD *a2) { this[4] = *a2; return 2; } //----- (006320A0) -------------------------------------------------------- char __thiscall sub_6320A0(__int16 *this) { return sub_6BE330(this[4]); } //----- (006320B0) -------------------------------------------------------- signed int __thiscall sub_6320B0(_DWORD *this, _DWORD *a2) { *a2 = this[2]; a2[1] = this[3]; a2[2] = this[4]; return 12; } //----- (006320D0) -------------------------------------------------------- signed int __thiscall sub_6320D0(_DWORD *this, _DWORD *a2) { this[2] = *a2; this[3] = a2[1]; this[4] = a2[2]; return 12; } //----- (006320F0) -------------------------------------------------------- char __thiscall sub_6320F0(_WORD *this, int a2) { int v3; // eax if ( !a2 ) return 0; v3 = *(unsigned __int16 *)(a2 + 3); this[6] = v3; (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACB230 + 16))(v3); return 1; } // ACB230: using guessed type int dword_ACB230; //----- (00632120) -------------------------------------------------------- signed int __thiscall sub_632120(int this, _WORD *a2) { signed int result; // eax __int16 v3; // ax result = *(_DWORD *)(this + 8); if ( result ) { v3 = *(_WORD *)(result + 8); *(_WORD *)(this + 12) = v3; *a2 = v3; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACB230 + 16))(*(unsigned __int16 *)(this + 12)); result = 2; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00632160) -------------------------------------------------------- signed int __thiscall sub_632160(_DWORD *this, unsigned __int16 *a2) { _DWORD *v2; // edi int v3; // esi int v4; // eax v2 = this; v3 = this[2]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[2] = 0; } v4 = *a2; *((_WORD *)v2 + 6) = v4; (*(void (__stdcall **)(int))(*(_DWORD *)dword_ACB230 + 16))(v4); return 2; } // ACB230: using guessed type int dword_ACB230; //----- (006321C0) -------------------------------------------------------- void __thiscall sub_6321C0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[2]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[2] = a2; if ( !a2 ) goto LABEL_9; InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( !a2 ) { LABEL_9: *((_WORD *)v2 + 6) = -1; return; } *((_WORD *)v2 + 6) = *(_WORD *)(v2[2] + 8); } //----- (00632230) -------------------------------------------------------- _DWORD *__thiscall sub_632230(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &ShortCutInvPosItem::`vftable'; v1[2] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D24: using guessed type void *ShortCutInvPosItem::`vftable'; //----- (00632280) -------------------------------------------------------- _DWORD *__thiscall sub_632280(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *((_WORD *)v1 + 4) = -1; *v1 = &ShortCutSkill::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D40: using guessed type void *ShortCutSkill::`vftable'; //----- (006322D0) -------------------------------------------------------- _DWORD *__thiscall sub_6322D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &ShortCutAction::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D5C: using guessed type void *ShortCutAction::`vftable'; //----- (00632320) -------------------------------------------------------- _DWORD *__thiscall sub_632320(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &ShortCutSoulStone::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D78: using guessed type void *ShortCutSoulStone::`vftable'; //----- (00632370) -------------------------------------------------------- signed int __thiscall sub_632370(unsigned __int16 *this) { int v1; // esi int v2; // edi int v3; // ecx int v4; // eax int v6; // eax int v7; // eax v1 = dword_ACB6C4; v2 = this[4]; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v2) ) return 0; if ( (unsigned __int16)v2 > *(_WORD *)(v1 + 200) ) return 0; v3 = *(_DWORD *)(v1 + 196); if ( !*(_DWORD *)(v3 + 4 * v2) ) return 0; v4 = *(_DWORD *)(v3 + 4 * v2); if ( !v4 ) return 0; v6 = *(_DWORD *)(v4 + 101); if ( !v6 ) return 4; v7 = v6 - 1; if ( !v7 ) return 5; if ( v7 != 1 ) return 0; return 6; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (006323E0) -------------------------------------------------------- _DWORD *__thiscall sub_6323E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &ShortCutItem::`vftable'; v1[2] = 0; *((_WORD *)v1 + 6) = -1; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D94: using guessed type void *ShortCutItem::`vftable'; //----- (00632480) -------------------------------------------------------- LONG __thiscall sub_632480(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &ShortCutItem::`vftable'; v2 = this[2]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = 0; } *((_WORD *)v1 + 6) = -1; v3 = v1[2]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0D94: using guessed type void *ShortCutItem::`vftable'; //----- (00632530) -------------------------------------------------------- signed int __thiscall sub_632530(_DWORD *this, _DWORD *a2) { unsigned int v2; // ecx int v3; // eax *a2 = this[2]; v2 = this[2]; if ( v2 < 0xC0 ) { v3 = dword_ADA234[v2]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACB230 + 16))(*(unsigned __int16 *)(v3 + 8)); } return 4; } // ACB230: using guessed type int dword_ACB230; //----- (00632570) -------------------------------------------------------- signed int __thiscall sub_632570(_DWORD *this, unsigned int *a2) { unsigned int v2; // eax int v3; // eax v2 = *a2; this[2] = *a2; if ( v2 < 0xC0 ) { v3 = dword_ADA234[v2]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_ACB230 + 16))(*(unsigned __int16 *)(v3 + 8)); } return 4; } // ACB230: using guessed type int dword_ACB230; //----- (006325B0) -------------------------------------------------------- char __thiscall sub_6325B0(_DWORD *this, int a2) { int v2; // esi int v3; // edi _DWORD *v4; // ebx int *v5; // eax int v6; // ecx v2 = dword_ACB6C4; v3 = *(unsigned __int16 *)(a2 + 3); v4 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v3) ) return 0; if ( (unsigned __int16)v3 > *(_WORD *)(v2 + 200) ) return 0; v5 = (int *)(*(_DWORD *)(v2 + 196) + 4 * v3); if ( !*v5 ) return 0; v6 = *v5; if ( !*v5 ) return 0; v4[2] = *(_DWORD *)(a2 + 3); switch ( *(_WORD *)(a2 + 1) ) { case 4: v4[3] = 4; break; case 5: v4[3] = 5; break; case 6: v4[3] = 6; break; } v4[4] = sub_632650(v6); return 1; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (00632650) -------------------------------------------------------- int __cdecl sub_632650(int a1) { int v1; // ebx unsigned int v2; // esi int v4; // eax unsigned int v5; // edi int v6; // eax int v7; // [esp+10h] [ebp+8h] v1 = a1; v2 = 0; if ( !a1 ) return 0; v4 = *(_DWORD *)(dword_ACB6C4 + 56); v7 = 0; if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; if ( v5 > 0 ) { do { v6 = sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v2); if ( *(_DWORD *)(v6 + 101) == *(_DWORD *)(v1 + 101) ) { if ( v6 == v1 ) return v7; if ( *(unsigned __int16 *)(v6 + 65) >= v5 ) ++v7; } ++v2; } while ( v2 < v5 ); } return v7; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (006326C0) -------------------------------------------------------- void *__thiscall sub_6326C0(void *this, char a2) { void *v2; // esi v2 = this; *((_DWORD *)this + 2) = 0; *(_DWORD *)this = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (00632700) -------------------------------------------------------- void *__thiscall sub_632700(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (00632730) -------------------------------------------------------- void *__thiscall sub_632730(void *this, char a2) { void *v2; // esi v2 = this; sub_632480(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00632760) -------------------------------------------------------- char sub_632760() { return 1; } //----- (00632790) -------------------------------------------------------- char __stdcall sub_632790(_DWORD *a1) { sub_631E00(a1); return 1; } //----- (006327B0) -------------------------------------------------------- _DWORD *__stdcall sub_6327B0(void *a1) { _DWORD *v1; // eax _DWORD *result; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax switch ( (unsigned int)a1 ) { case 1u: v4 = operator new(0xCu); if ( !v4 ) goto LABEL_12; result = sub_632280(v4); break; case 2u: v5 = operator new(0x14u); if ( !v5 ) goto LABEL_12; result = sub_6322D0(v5); break; case 3u: v6 = operator new(8u); if ( !v6 ) goto LABEL_12; result = sub_632320(v6); break; case 4u: v3 = operator new(0x10u); if ( !v3 ) goto LABEL_12; result = sub_6323E0(v3); break; case 5u: v1 = operator new(0xCu); if ( !v1 ) goto LABEL_12; result = sub_632230(v1); break; default: LABEL_12: result = 0; break; } return result; } //----- (00632950) -------------------------------------------------------- char __thiscall sub_632950(_BYTE *this, char a2) { char result; // al result = a2; this[411] = a2; return result; } //----- (00632970) -------------------------------------------------------- void __thiscall sub_632970(char *this, unsigned __int16 a2, unsigned __int16 a3, char a4) { int v4; // edi int v5; // eax int v6; // ecx signed int v7; // [esp+Ch] [ebp-4h] v4 = (int)(this + 4); v7 = 100; do { if ( *(_DWORD *)v4 && (*(int (**)(void))(**(_DWORD **)v4 + 4))() == 5 ) { v5 = *(_DWORD *)v4; v6 = *(_DWORD *)(*(_DWORD *)v4 + 8); if ( v6 == a3 ) *(_DWORD *)(v5 + 8) = a2; if ( !a4 && v6 == a2 ) *(_DWORD *)(v5 + 8) = a3; } v4 += 4; --v7; } while ( v7 ); } //----- (006329D0) -------------------------------------------------------- char __thiscall sub_6329D0(char *this, int a2, int a3) { int v4; // esi signed int v5; // edi int v6; // eax if ( a2 < 0 ) return 0; if ( a3 < 0 ) return 0; v4 = (int)(this + 4); v5 = 100; do { if ( *(_DWORD *)v4 ) { if ( (*(int (**)(void))(**(_DWORD **)v4 + 4))() == 2 ) { v6 = *(_DWORD *)v4; if ( *(_DWORD *)v4 ) { if ( *(_DWORD *)(v6 + 8) == a2 && *(_DWORD *)(v6 + 16) != a3 ) *(_DWORD *)(v6 + 16) = a3; } } } v4 += 4; --v5; } while ( v5 ); return 1; } //----- (00632A30) -------------------------------------------------------- void __thiscall sub_632A30(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 1; v2 = 100; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00632A80) -------------------------------------------------------- void __thiscall sub_632A80(char *this) { int v1; // edi signed int v2; // ebx int v3; // esi int v4; // esi v1 = (int)(this + 4); v2 = 100; do { if ( *(_DWORD *)v1 ) { if ( (*(int (**)(void))(**(_DWORD **)v1 + 4))() == 1 ) { v3 = *(_DWORD *)v1; if ( *(_DWORD *)v1 ) { if ( !sub_6BE330(*(_WORD *)(v3 + 8)) && !(unsigned __int8)sub_6BE7D0(*(_WORD *)(v3 + 8)) ) { v4 = *(_DWORD *)v1; if ( *(_DWORD *)v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } *(_DWORD *)v1 = 0; } } } } } v1 += 4; --v2; } while ( v2 ); } //----- (00632BA0) -------------------------------------------------------- _DWORD *__thiscall sub_632BA0(_DWORD *this) { _DWORD *v1; // esi const void *v2; // ecx void *v3; // ebx __int16 v5; // [esp+18h] [ebp-10h] v1 = this; *this = &ShortCutMgr::`vftable'; `eh vector constructor iterator'( this + 1, 4u, 100, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[101] = 0; *((_BYTE *)v1 + 408) = 0; sub_4585C0(v1 + 103); sub_458690(v1 + 3195); v1[4239] = 0; v1[4240] = 0; v1[4241] = 0; LOBYTE(v5) = 0; v1[101] = 184879062; *((_WORD *)v1 + 204) = v5; *((_WORD *)v1 + 205) = 0; v2 = (const void *)v1[4240]; v3 = (void *)v1[4239]; if ( v3 != v2 ) { memcpy_0(v3, v2, 0); v1[4240] = v3; } sub_74E360((const void **)v1 + 4239, (char *)0x14); sub_632A30(v1); return v1; } // 9F0DB0: using guessed type void *ShortCutMgr::`vftable'; //----- (00632CB0) -------------------------------------------------------- void __thiscall sub_632CB0(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // ebx _DWORD *v4; // esi char *v5; // esi int v6; // eax unsigned int v7; // ecx int v8; // ecx int v9; // ecx int v10; // eax int v11; // eax unsigned __int16 *v12; // ecx __int16 v13; // ax const void *v14; // ecx void *v15; // ebx int v16; // [esp+0h] [ebp-10Ch] int v17; // [esp+4h] [ebp-108h] unsigned __int16 *v18; // [esp+4h] [ebp-108h] char v19; // [esp+8h] [ebp-104h] char v20; // [esp+9h] [ebp-103h] char v21; // [esp+Ah] [ebp-102h] v2 = this; if ( !(dword_AD46E8 & 1) ) { dword_AD46E8 |= 1u; flt_AD46E4 = a2; } v3 = (_DWORD *)this[4239]; v4 = (_DWORD *)this[4240]; v16 = 0; if ( v3 != v4 && flt_AD46E4 + 1.0 < a2 ) { flt_AD46E4 = a2; memset(&v20, 0, 0xFFu); v19 = v4 - v3; if ( v3 != v4 ) { v5 = &v21; do { if ( v2[*v3 + 1] ) { switch ( (*(int (**)(void))(*(_DWORD *)v2[*v3 + 1] + 4))() ) { case 1: *(_WORD *)v5 = 3; v11 = v2[*v3 + 1]; if ( v11 ) { *(_DWORD *)(v5 + 2) = *(unsigned __int16 *)(v11 + 8); *(v5 - 1) = *(_BYTE *)v3; goto LABEL_24; } break; case 2: v12 = (unsigned __int16 *)v2[*v3 + 1]; v18 = v12; if ( v12 ) { v13 = sub_632370(v12); *(_WORD *)v5 = v13; if ( v13 ) { *(_DWORD *)(v5 + 2) = *((_DWORD *)v18 + 2); *(v5 - 1) = *(_BYTE *)v3; goto LABEL_24; } } break; case 4: *(_WORD *)v5 = 1; v10 = v2[*v3 + 1]; if ( v10 ) { *(_DWORD *)(v5 + 2) = *(unsigned __int16 *)(v10 + 12); *(v5 - 1) = *(_BYTE *)v3; goto LABEL_24; } break; case 5: *(_WORD *)v5 = 2; v6 = v2[*v3 + 1]; v17 = v6; if ( !v6 ) break; v7 = *(_DWORD *)(v6 + 8); if ( v7 >= 0xC0 ) break; v8 = dword_ADA234[v7]; if ( !v8 ) break; v9 = *(unsigned __int16 *)(v8 + 8); if ( (_WORD)v9 == -1 ) goto LABEL_15; if ( sub_49F760(v9) ) { v6 = v17; LABEL_15: *(_DWORD *)(v5 + 2) = *(_DWORD *)(v6 + 8); *(v5 - 1) = *(_BYTE *)v3; goto LABEL_24; } break; default: break; } } else { *(_DWORD *)(v5 + 2) = 0; *(_WORD *)v5 = 0; *(v5 - 1) = *(_BYTE *)v3; LABEL_24: ++v16; v5 += 7; } ++v3; } while ( v3 != (_DWORD *)v2[4240] ); } v14 = (const void *)v2[4240]; v15 = (void *)v2[4239]; if ( v15 != v14 ) { memcpy_0(v15, v14, 0); v2[4240] = v15; } sub_6F36A0(&off_AB7F2C, 28, 55, &v19, 7 * v16 + 4); } } // AB7F2C: using guessed type void **off_AB7F2C; // AD46E4: using guessed type float flt_AD46E4; // AD46E8: using guessed type int dword_AD46E8; //----- (00632F20) -------------------------------------------------------- void __thiscall sub_632F20(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // eax int v4; // esi _DWORD *v5; // ecx unsigned int v6; // eax _BYTE *v7; // edx int v8; // ecx int v9; // edi unsigned int v10; // eax unsigned int v11; // eax unsigned int v12; // ecx char *v13; // ecx _DWORD *v14; // eax int v15; // ecx unsigned int v16; // eax unsigned int v17; // eax unsigned int v18; // ecx char *v19; // ecx signed int *v20; // eax v2 = a2; if ( a2 < 100 ) { v3 = (_DWORD *)this[4239]; v4 = (int)(this + 4239); v5 = (_DWORD *)this[4240]; if ( v3 == v5 ) { LABEL_5: v6 = *(_DWORD *)(v4 + 4); if ( (unsigned int)&a2 >= v6 || (v7 = *(_BYTE **)v4, *(_DWORD *)v4 > (unsigned int)&a2) ) { v15 = *(_DWORD *)(v4 + 8); if ( v6 == v15 ) { v16 = (signed int)(v6 - *(_DWORD *)v4) >> 2; if ( v16 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v17 = v16 + 1; v18 = (v15 - *(_DWORD *)v4) >> 2; if ( v17 > v18 ) { if ( 0x3FFFFFFF - (v18 >> 1) >= v18 ) v19 = (char *)((v18 >> 1) + v18); else v19 = 0; if ( (unsigned int)v19 < v17 ) v19 = (char *)v17; sub_74E360((const void **)v4, v19); } } v20 = *(signed int **)(v4 + 4); if ( v20 ) *v20 = v2; } else { v8 = *(_DWORD *)(v4 + 8); v9 = ((char *)&a2 - v7) >> 2; if ( v6 == v8 ) { v10 = (signed int)(v6 - (_DWORD)v7) >> 2; if ( v10 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v11 = v10 + 1; v12 = (v8 - (signed int)v7) >> 2; if ( v11 > v12 ) { if ( 0x3FFFFFFF - (v12 >> 1) >= v12 ) v13 = (char *)((v12 >> 1) + v12); else v13 = 0; if ( (unsigned int)v13 < v11 ) v13 = (char *)v11; sub_74E360((const void **)v4, v13); } } v14 = *(_DWORD **)(v4 + 4); if ( v14 ) { *v14 = *(_DWORD *)(*(_DWORD *)v4 + 4 * v9); *(_DWORD *)(v4 + 4) += 4; return; } } *(_DWORD *)(v4 + 4) += 4; } else { while ( *v3 != a2 ) { ++v3; if ( v3 == v5 ) goto LABEL_5; } } } } //----- (00633040) -------------------------------------------------------- char __thiscall sub_633040(char *this) { unsigned int v1; // edi int v2; // esi int v3; // ebx int v4; // esi int v5; // eax int v6; // edi _DWORD *v7; // eax int v8; // esi unsigned int v9; // eax int v10; // ecx int v11; // esi LONG v12; // eax int v14; // [esp+Ch] [ebp-78h] unsigned int v15; // [esp+10h] [ebp-74h] char v16; // [esp+17h] [ebp-6Dh] __int16 v17; // [esp+18h] [ebp-6Ch] v1 = 0; v2 = (int)(this + 4); v16 = 1; v15 = 0; v14 = (int)(this + 4); while ( 1 ) { if ( !*(_DWORD *)v2 ) goto LABEL_39; if ( (*(int (**)(void))(**(_DWORD **)v2 + 4))() == 4 ) break; if ( !*(_DWORD *)v2 || (*(int (**)(void))(**(_DWORD **)v2 + 4))() != 5 || !*(_DWORD *)v2 ) goto LABEL_39; v9 = *(_DWORD *)(*(_DWORD *)v2 + 8); if ( v9 >= 0xC0 || (v10 = dword_ADA234[v9]) == 0 ) { if ( v1 < 0x64 ) { v11 = dword_AD46F4[v1]; if ( v11 ) { v12 = InterlockedDecrement((volatile LONG *)(v11 + 4)); LABEL_33: if ( !v12 && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); dword_AD46F4[v1] = 0; } goto LABEL_37; } goto LABEL_38; } if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v10 + 4))() != 24 ) { if ( v1 < 0x64 ) { v11 = dword_AD46F4[v1]; if ( v11 ) { v12 = InterlockedDecrement((volatile LONG *)(v11 + 4)); goto LABEL_33; } LABEL_37: byte_AD488A = 1; } LABEL_38: v16 = 0; } LABEL_39: ++v1; v2 = v14 + 4; v15 = v1; v14 += 4; if ( (signed int)v1 >= 100 ) return v16; } v3 = *(_DWORD *)v2; if ( !*(_DWORD *)v2 ) goto LABEL_39; v4 = *(unsigned __int16 *)(v3 + 12); if ( (_WORD)v4 == -1 ) goto LABEL_38; v5 = sub_685510(&byte_ADA230, *(_WORD *)(v3 + 12)); if ( v5 ) { sub_6321C0((_DWORD *)v3, v5); goto LABEL_39; } v6 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) && (unsigned __int16)v4 <= *(_WORD *)(v6 + 200) && *(_DWORD *)(*(_DWORD *)(v6 + 196) + 4 * v4) ) { memset(&v17, 0, 0x67u); v17 = v4; v7 = sub_6876E0((unsigned __int16 *)&v17); if ( !v7 ) { if ( v15 < 0x64 ) { v8 = dword_AD46F4[v15]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } dword_AD46F4[v15] = 0; } byte_AD488A = 1; } v1 = v15; goto LABEL_38; } sub_6321C0((_DWORD *)v3, (int)v7); v1 = v15; goto LABEL_39; } return 0; } // ACB230: using guessed type int dword_ACB230; // AD488A: using guessed type char byte_AD488A; // ADA230: using guessed type char byte_ADA230; //----- (00633240) -------------------------------------------------------- char __thiscall sub_633240(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // esi unsigned int v9; // ebx int v10; // edi _DWORD *v11; // [esp+10h] [ebp-10h] v2 = this; v11 = this; if ( !a2 ) return 0; switch ( *(unsigned __int16 *)(a2 + 1) ) { case 1u: v4 = operator new(0x10u); if ( !v4 ) goto LABEL_11; v5 = sub_6323E0(v4); goto LABEL_12; case 2u: v6 = operator new(0xCu); if ( !v6 ) goto LABEL_11; v5 = sub_632230(v6); goto LABEL_12; case 3u: v5 = sub_6327B0((void *)1); goto LABEL_12; case 4u: case 5u: case 6u: v7 = operator new(0x14u); if ( v7 ) v5 = sub_6322D0(v7); else LABEL_11: v5 = 0; LABEL_12: v8 = v5; if ( v5 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v5 + 16))(v5, a2); v9 = (unsigned __int8)*a2; if ( v9 < 0x64 ) { v10 = v2[v9 + 1]; if ( (_DWORD *)v10 != v8 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); } v11[v9 + 1] = v8; InterlockedIncrement(v8 + 1); } *((_BYTE *)v11 + 410) = 1; } } break; default: return 1; } return 1; } //----- (006333A0) -------------------------------------------------------- int __cdecl sub_6333A0(unsigned int a1) { int result; // eax if ( a1 < 0xC ) result = dword_AD893C[a1]; else result = -1; return result; } //----- (006333C0) -------------------------------------------------------- char __cdecl sub_6333C0(char a1) { char result; // al result = a1; byte_AD896C = a1; return result; } // AD896C: using guessed type char byte_AD896C; //----- (006333D0) -------------------------------------------------------- char __cdecl sub_6333D0(char a1) { char result; // al result = a1; byte_AD896D = a1; return result; } // AD896D: using guessed type char byte_AD896D; //----- (006333E0) -------------------------------------------------------- char sub_6333E0() { return byte_AD896C; } // AD896C: using guessed type char byte_AD896C; //----- (006333F0) -------------------------------------------------------- char sub_6333F0() { return byte_AD896D; } // AD896D: using guessed type char byte_AD896D; //----- (00633400) -------------------------------------------------------- char __cdecl sub_633400(char a1) { char result; // al result = a1; byte_AD896E = a1; return result; } // AD896E: using guessed type char byte_AD896E; //----- (00633410) -------------------------------------------------------- char sub_633410() { return byte_AD896E; } // AD896E: using guessed type char byte_AD896E; //----- (00633440) -------------------------------------------------------- char sub_633440() { return byte_AD8970; } // AD8970: using guessed type char byte_AD8970; //----- (00633450) -------------------------------------------------------- char __cdecl sub_633450(char a1) { char result; // al result = a1; byte_AD8970 = a1; return result; } // AD8970: using guessed type char byte_AD8970; //----- (00633460) -------------------------------------------------------- void sub_633460() { unsigned int v0; // esi int v1; // edi int v2; // edi v0 = 0; do { v1 = dword_AD8974[v0]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); dword_AD8974[v0] = 0; } v2 = dword_AD89A4[v0]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_AD89A4[v0] = 0; } dword_AD893C[v0] = 0; ++v0; } while ( v0 < 12 ); byte_AD896C = 0; byte_AD896D = 0; byte_AD896E = 0; byte_AD896F = 0; } // AD896C: using guessed type char byte_AD896C; // AD896D: using guessed type char byte_AD896D; // AD896E: using guessed type char byte_AD896E; // AD896F: using guessed type char byte_AD896F; //----- (00633500) -------------------------------------------------------- int __cdecl sub_633500(unsigned int a1) { int result; // eax if ( a1 < 0xC ) result = dword_AD8974[a1]; else result = 0; return result; } //----- (00633520) -------------------------------------------------------- int __cdecl sub_633520(unsigned int a1) { int result; // eax if ( a1 < 0xC ) result = dword_AD89A4[a1]; else result = 0; return result; } //----- (00633540) -------------------------------------------------------- void __cdecl sub_633540(int a1, unsigned int a2) { int v2; // esi if ( a2 < 0xC ) { v2 = dword_AD8974[a2]; if ( v2 != a1 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_AD8974[a2] = a1; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); } } } //----- (006335A0) -------------------------------------------------------- void __cdecl sub_6335A0(int a1, unsigned int a2, int a3) { int v3; // esi if ( a2 < 0xC ) { v3 = dword_AD89A4[a2]; if ( v3 != a1 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); dword_AD89A4[a2] = a1; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); } dword_AD893C[a2] = a3; } } //----- (00633600) -------------------------------------------------------- void __cdecl sub_633600(unsigned int a1) { int v1; // esi if ( a1 < 0xC ) { v1 = dword_AD8974[a1]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } dword_AD8974[a1] = 0; } } } //----- (00633650) -------------------------------------------------------- int __cdecl sub_633650(unsigned int a1) { int v2; // esi if ( a1 >= 0xC ) return -1; v2 = dword_AD89A4[a1]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } dword_AD89A4[a1] = 0; } return dword_AD893C[a1]; } //----- (006336C0) -------------------------------------------------------- int __thiscall sub_6336C0(_DWORD *this, void *a2, int a3, int a4) { char *v4; // ebx _DWORD *v5; // esi void *v6; // eax int v8; // eax void *v9; // [esp+14h] [ebp+8h] v4 = (char *)a2; v5 = this; if ( (signed int)a2 <= 0 ) return 0; if ( a3 <= 0 ) return 0; if ( a4 <= 0 ) return 0; v9 = malloc(44 * (_DWORD)a2); v5[6] = v9; if ( !v9 ) return 0; v6 = malloc(20 * a3); v5[7] = v6; if ( !v6 ) { free(v9); return 0; } v5[1] = v4; v5[2] = a3; v5[3] = a4; v5[4] = 0; v5[5] = 0; if ( (signed int)v4 > 0 ) { v8 = 0; do { *(_DWORD *)(v8 + v5[6]) = -1; *(_DWORD *)(v8 + v5[6] + 4) = -1; *(_DWORD *)(v8 + v5[6] + 8) = -1; *(_DWORD *)(v8 + v5[6] + 12) = -1; *(_DWORD *)(v8 + v5[6] + 16) = 0; *(_DWORD *)(v8 + v5[6] + 24) = -1; *(_DWORD *)(v8 + v5[6] + 36) = 0; *(_DWORD *)(v8 + v5[6] + 40) = 0; v8 += 44; --v4; } while ( v4 ); } return 1; } //----- (006337C0) -------------------------------------------------------- int __thiscall sub_6337C0(int *this) { int result; // eax result = *this; *this = 0; return result; } //----- (006337E0) -------------------------------------------------------- void __thiscall sub_6337E0(void *this) { void *v1; // esi void *v2; // ST00_4 v1 = this; while ( *(_DWORD *)v1 ) { v2 = *(void **)v1; *(_DWORD *)v1 = *(_DWORD *)(*(_DWORD *)v1 + 4); free(v2); } *(_DWORD *)v1 = 0; } //----- (00633810) -------------------------------------------------------- signed int __thiscall sub_633810(void *this, int a2) { _DWORD *v3; // edx _DWORD *v4; // eax if ( !a2 ) return 0; if ( *(_DWORD *)this ) { v3 = 0; v4 = *(_DWORD **)this; while ( *v4 != a2 ) { v3 = v4; v4 = (_DWORD *)v4[1]; if ( !v4 ) return 1; } if ( !v3 ) { *(_DWORD *)this = *(_DWORD *)(*(_DWORD *)this + 4); free(v4); return 1; } v3[1] = v4[1]; free(v4); } return 1; } //----- (00633880) -------------------------------------------------------- signed int __thiscall sub_633880(_DWORD *this, _DWORD *a2, int a3, int a4, int a5, int a6) { _DWORD *v7; // eax _DWORD *v8; // edx _DWORD *v9; // ecx _DWORD *v10; // esi _DWORD *v11; // [esp+4h] [ebp-4h] v11 = this; if ( !a2 ) return 0; if ( a4 < 0 ) return 0; if ( a5 < 0 ) return 0; if ( a2[6] != a6 || a2[7] >= a4 + a5 ) { v7 = malloc(8u); if ( !v7 ) return 0; v7[1] = 0; *v7 = a2; a2[6] = a6; a2[8] = a3; a2[7] = a4 + a5; a2[9] = 1; v8 = (_DWORD *)*v11; if ( !*v11 ) { *v11 = v7; return 1; } v9 = (_DWORD *)*v11; v10 = 0; if ( v8 ) { do { if ( *(_DWORD *)(*v9 + 28) > a4 + a5 ) break; v10 = v9; v9 = (_DWORD *)v9[1]; } while ( v9 ); } if ( !v10 ) { v7[1] = v8; *v11 = v7; return 1; } if ( v9 ) v7[1] = v9; v10[1] = v7; } return 1; } //----- (00633960) -------------------------------------------------------- signed int __thiscall sub_633960(_DWORD **this, _DWORD *a2) { _DWORD *v3; // eax if ( !a2 ) return 0; v3 = *this; if ( *this ) { *(_DWORD *)(*v3 + 36) = 2; *a2 = **this; *this = (_DWORD *)(*this)[1]; free(v3); } else { *a2 = 0; } return 1; } //----- (006339F0) -------------------------------------------------------- signed int __thiscall sub_6339F0(void *this) { void *v1; // esi void *v2; // ST00_4 v1 = this; while ( *(_DWORD *)v1 ) { v2 = *(void **)v1; *(_DWORD *)v1 = *(_DWORD *)(*(_DWORD *)v1 + 4); free(v2); } *(_DWORD *)v1 = 0; return 1; } //----- (00633A20) -------------------------------------------------------- _DWORD *__thiscall sub_633A20(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax v2 = this; result = malloc(8u); if ( result ) { *result = a2; result[1] = 0; if ( *v2 ) result[1] = *v2; *v2 = result; result = (_DWORD *)1; } return result; } //----- (00633A60) -------------------------------------------------------- signed int __thiscall sub_633A60(_DWORD **this, _DWORD *a2) { _DWORD *v3; // ST00_4 if ( *this ) { *a2 = **this; v3 = *this; *this = (_DWORD *)(*this)[1]; free(v3); } else { *a2 = 0; } return 1; } //----- (00633AA0) -------------------------------------------------------- _DWORD *__thiscall sub_633AA0(_DWORD *this) { _DWORD *result; // eax result = this; this[9] = 0; this[1] = 0; this[2] = 0; this[4] = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; *this = 0; return result; } //----- (00633AC0) -------------------------------------------------------- void __thiscall sub_633AC0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 v1 = this; while ( v1[9] ) { v2 = (void *)v1[9]; v1[9] = *(_DWORD *)(v1[9] + 4); free(v2); } v1[9] = 0; } //----- (00633B00) -------------------------------------------------------- int __thiscall sub_633B00(_DWORD *this, char *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int v7; // edx int v8; // ecx int result; // eax int v10; // edi int v11; // ebx int v12; // eax v4 = this; if ( !this[6] ) return 0; v5 = this[7]; if ( !v5 ) return 0; v6 = this[1]; if ( v6 <= 0 ) return 0; v7 = v4[2]; if ( v7 <= 0 ) return 0; if ( v4[4] > v6 ) return 0; v8 = v4[5]; if ( v8 > v7 || !a2 || a3 < 0 || v8 >= v7 ) return 0; v10 = 0; if ( v8 <= 0 ) { LABEL_16: strncpy((char *)(v4[7] + 20 * v4[5] + 4), a2, 0xCu); v12 = 20 * v10; *(_DWORD *)(v12 + v4[7]) = a3; *(_DWORD *)(v12 + v4[7] + 16) = a4; result = 1; ++v4[5]; } else { v11 = 0; while ( strncmp(a2, (const char *)(v11 + v5 + 4), 0xCu) ) { v5 = v4[7]; if ( *(_DWORD *)(v11 + v5) == a3 ) break; ++v10; v11 += 20; if ( v10 >= v4[5] ) goto LABEL_16; } result = 0; } return result; } //----- (00633CC0) -------------------------------------------------------- signed int __thiscall sub_633CC0(_DWORD *this, int a2) { _DWORD *v2; // edx int v3; // esi signed int v4; // eax signed int v5; // ecx signed int result; // eax if ( !this[6] ) return 0; v2 = (_DWORD *)this[7]; if ( !v2 ) return 0; v3 = this[1]; if ( v3 <= 0 ) return 0; v4 = this[2]; if ( v4 <= 0 ) return 0; if ( this[4] > v3 ) return 0; v5 = this[5]; if ( v5 > v4 ) return 0; result = 0; if ( a2 < 0 ) return result; if ( v5 <= 0 ) return 0; while ( *v2 != a2 ) { ++result; v2 += 5; if ( result >= v5 ) return 0; } return 1; } //----- (00633D20) -------------------------------------------------------- signed int __thiscall sub_633D20(_DWORD *this, int a2, _DWORD *a3) { int v3; // edi int v4; // eax int v5; // edx int v6; // esi v3 = this[6]; if ( !v3 ) return 0; if ( !this[7] ) return 0; v4 = this[1]; if ( v4 <= 0 ) return 0; v5 = this[2]; if ( v5 <= 0 ) return 0; v6 = this[4]; if ( v6 > v4 || this[5] > v5 || a2 < 0 || a2 >= v6 || !a3 ) return 0; *a3 = v3 + 44 * a2; return 1; } //----- (00633D80) -------------------------------------------------------- int __thiscall sub_633D80(_DWORD *this, int a2, char *a3) { _DWORD *v3; // ebx int v4; // edx int v5; // eax int v6; // ecx int result; // eax _DWORD *v8; // edx if ( !this[6] ) return 0; v3 = (_DWORD *)this[7]; if ( !v3 ) return 0; v4 = this[1]; if ( v4 <= 0 ) return 0; v5 = this[2]; if ( v5 <= 0 ) return 0; if ( this[4] > v4 ) return 0; v6 = this[5]; if ( v6 > v5 ) return 0; result = 0; if ( a2 >= 0 && a3 ) { if ( v6 <= 0 ) { LABEL_14: result = 0; } else { v8 = v3; while ( *v8 != a2 ) { ++result; v8 += 5; if ( result >= v6 ) goto LABEL_14; } strncpy(a3, (const char *)&v3[5 * result + 1], 0xCu); result = 1; } } return result; } //----- (00633E10) -------------------------------------------------------- int __thiscall sub_633E10(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // eax int v6; // ecx int v8; // edi int v9; // ebx v3 = this; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v4 = this[1]; if ( v4 <= 0 ) return 0; v5 = v3[2]; if ( v5 <= 0 ) return 0; if ( v3[4] > v4 ) return 0; v6 = v3[5]; if ( v6 > v5 || !a2 || !a3 ) return 0; v8 = 0; if ( v6 <= 0 ) return 0; v9 = 0; while ( strncmp(a2, (const char *)(v9 + v3[7] + 4), 0xCu) ) { ++v8; v9 += 20; if ( v8 >= v3[5] ) return 0; } *(_DWORD *)a3 = *(_DWORD *)(v3[7] + 20 * v8); return 1; } //----- (00633EB0) -------------------------------------------------------- signed int __thiscall sub_633EB0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // ebx int v4; // edx signed int v5; // eax signed int v6; // ecx signed int result; // eax _DWORD *v8; // edx if ( !this[6] ) return 0; v3 = (_DWORD *)this[7]; if ( !v3 ) return 0; v4 = this[1]; if ( v4 <= 0 ) return 0; v5 = this[2]; if ( v5 <= 0 ) return 0; if ( this[4] > v4 ) return 0; v6 = this[5]; if ( v6 > v5 ) return 0; result = 0; if ( a2 >= 0 && a3 ) { if ( v6 <= 0 ) { LABEL_14: result = 0; } else { v8 = v3; while ( *v8 != a2 ) { ++result; v8 += 5; if ( result >= v6 ) goto LABEL_14; } *a3 = v3[5 * result + 4]; result = 1; } } return result; } //----- (00633FD0) -------------------------------------------------------- signed int __thiscall sub_633FD0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // edi int v4; // eax int v5; // ecx int v6; // ebx int v8; // eax int v9; // esi _DWORD *v10; // eax int v11; // ecx int *v12; // eax int *i; // ebx _DWORD *v14; // esi int v15; // ecx _DWORD *v16; // eax int v17; // ebx int v18; // esi int v19; // ecx int v20; // ecx int v21; // edx bool v22; // zf bool v23; // sf unsigned __int8 v24; // of int v25; // ebx int v26; // ebx _DWORD *v27; // [esp+8h] [ebp-8h] int v28; // [esp+Ch] [ebp-4h] v3 = this; v22 = this[6] == 0; v28 = 0; if ( v22 ) return 0; if ( !this[7] ) return 0; v4 = this[1]; if ( v4 <= 0 ) return 0; v5 = this[2]; if ( v5 <= 0 ) return 0; v6 = v3[4]; if ( v6 > v4 || v3[5] > v5 ) return 0; v8 = a3; v9 = (int)a2; *v3 = 0; if ( v9 == v8 ) return 0; if ( v9 < 0 || v8 < 0 || v9 >= v6 || v8 >= v6 ) { LABEL_37: sub_6337E0(&v28); return 0; } if ( !sub_633D20(v3, v8, &a2) ) goto LABEL_36; v10 = a2; if ( !a2[5] ) { v11 = 0; if ( v6 > 0 ) { do { if ( v10[5] == 1 ) { v10[6] = v3[8]; v10[7] = 0; } ++v11; } while ( v11 < v3[4] ); } } if ( !sub_633D20(v3, v9, &a2) ) goto LABEL_37; if ( !sub_633880(&v28, a2, -1, 0, 0, v3[8]) ) { ++v3[8]; sub_6337E0(&v28); return 0; } if ( !sub_633960((_DWORD **)&v28, &a2) ) goto LABEL_36; while ( 1 ) { v12 = a2; if ( !a2 || *a2 == a3 ) break; for ( i = (int *)a2[10]; i; i = (int *)i[3] ) { v14 = (_DWORD *)i[2]; v27 = v14; if ( !v14 ) goto LABEL_36; if ( v14[6] == v3[8] ) { v15 = v14[9]; if ( v15 == 2 || v15 != 1 || v14[7] <= v12[7] + *i ) continue; sub_633810(&v28, (int)v14); sub_633880(&v28, v14, *a2, a2[7], *i, v3[8]); } else { sub_633880(&v28, v14, *v12, v12[7], *i, v3[8]); } v12 = a2; } if ( !sub_633960((_DWORD **)&v28, &a2) ) goto LABEL_36; } if ( !sub_633D20(v3, a3, &a2) ) goto LABEL_36; v16 = a2; v17 = a2[1]; v18 = 0; if ( a2[6] != v3[8] ) goto LABEL_47; while ( 1 ) { if ( v17 != v16[1] && v16[4] == 2 ) { ++v18; v17 = v16[1]; } v19 = v16[8]; if ( v19 == -1 ) break; if ( sub_633D20(v3, v19, &v27) ) { v16 = v27; v20 = v27[6]; a2 = v27; if ( v20 == v3[8] ) continue; } goto LABEL_47; } if ( v16[5] == 1 ) { v21 = v3[3] + 1; v24 = __OFSUB__(v18, v21); v22 = v18 == v21; v23 = v18 - v21 < 0; } else { v24 = __OFSUB__(v18, v3[3]); v22 = v18 == v3[3]; v23 = v18 - v3[3] < 0; } if ( !((unsigned __int8)(v23 ^ v24) | v22) ) { ++v3[8]; *v3 = 100; sub_6337E0(&v28); return 0; } if ( !sub_633D20(v3, a3, &a2) ) { LABEL_47: ++v3[8]; sub_6337E0(&v28); return 0; } sub_6339F0(v3 + 9); v25 = (int)a2; if ( a2[6] != v3[8] ) { LABEL_36: ++v3[8]; goto LABEL_37; } while ( 1 ) { sub_633A20(v3 + 9, v25); v26 = *(_DWORD *)(v25 + 32); if ( v26 == -1 ) break; if ( sub_633D20(v3, v26, &v27) ) { v25 = (int)v27; if ( v27[6] == v3[8] ) continue; } goto LABEL_36; } ++v3[8]; sub_6337E0(&v28); return 1; } //----- (006342B0) -------------------------------------------------------- signed int __thiscall sub_6342B0(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi int v6; // eax int v7; // ecx int v8; // edi signed int result; // eax int v10; // ebx v5 = this; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v6 = this[1]; if ( v6 <= 0 ) return 0; v7 = this[2]; if ( v7 <= 0 ) return 0; v8 = v5[4]; if ( v8 > v6 || v5[5] > v7 ) return 0; v10 = a2; if ( a2 < 0 || a3 < 0 || a4 < 0 || a5 != 1 && a5 != 2 || !sub_633CC0(v5, a2) || !sub_633EB0(v5, v10, &a2) ) return 0; *(_DWORD *)(44 * v8 + v5[6]) = v8; *(_DWORD *)(44 * v5[4] + v5[6] + 4) = v10; *(_DWORD *)(44 * v5[4] + v5[6] + 8) = a3; *(_DWORD *)(44 * v5[4] + v5[6] + 12) = a4; *(_DWORD *)(44 * v5[4] + v5[6] + 16) = a5; *(_DWORD *)(44 * v5[4] + v5[6] + 20) = a2; result = 1; *(_DWORD *)(44 * v5[4]++ + v5[6] + 40) = 0; return result; } //----- (006343B0) -------------------------------------------------------- signed int __thiscall sub_6343B0(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5) { _DWORD *v5; // esi signed int v6; // eax int v7; // edx signed int v8; // ecx int v10; // edi _DWORD *v11; // esi _DWORD *v12; // ebx int v13; // ecx int v14; // eax _DWORD *v15; // eax int v16; // ecx _DWORD *v17; // edi _DWORD *v18; // eax int v19; // ecx v5 = this; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v6 = this[1]; if ( v6 <= 0 ) return 0; v7 = this[2]; if ( v7 <= 0 ) return 0; v8 = this[4]; if ( v8 > v6 || v5[5] > v7 || (signed int)a2 < 0 || (signed int)a2 >= v8 ) return 0; v10 = (int)a3; if ( (signed int)a3 < 0 || (signed int)a3 >= v8 || a2 == a3 || !sub_633D20(v5, (int)a2, &a2) || !sub_633D20(v5, v10, &a3) ) { return 0; } v11 = a2; v12 = a3; if ( a5 < 0 ) { if ( a2[1] == a3[1] ) { v13 = a2[3] - a3[3]; v14 = a2[2] - a3[2]; a5 = v14 * v14 + v13 * v13; *(float *)&a5 = sqrt((double)a5); a5 = (signed int)*(float *)&a5; } else { *(float *)&a5 = 0.0; } } if ( a4 == 1 ) { v15 = malloc(0x10u); if ( v15 ) { v16 = a5; v15[2] = v12; *v15 = v16; v15[3] = v11[10]; v11[10] = v15; return 1; } return 0; } if ( a4 ) return 0; v17 = malloc(0x10u); if ( !v17 ) return 0; v18 = malloc(0x10u); if ( !v18 ) { free(v17); return 0; } v19 = a5; v17[2] = v12; *v17 = v19; v17[3] = v11[10]; v11[10] = v17; v18[2] = v11; *v18 = v19; v18[3] = v12[10]; v12[10] = v18; return 1; } //----- (00634520) -------------------------------------------------------- BOOL __thiscall sub_634520(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int v7; // edx v4 = this; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v5 = this[1]; if ( v5 <= 0 ) return 0; v6 = this[2]; if ( v6 <= 0 ) return 0; v7 = v4[4]; if ( v7 > v5 || v4[5] > v6 || !a4 ) return 0; if ( (a2 != (_DWORD *)a3 || (signed int)a2 <= 0 || a3 <= 0) && (signed int)a2 < v7 && a3 < v7 ) { if ( (signed int)a2 >= 0 ) { if ( a3 >= 0 ) { sub_6339F0(v4 + 9); sub_633FD0(v4, a2, a3); return sub_633A60((_DWORD **)v4 + 9, a4) != 0; } } else if ( a3 < 0 ) { return sub_633A60((_DWORD **)v4 + 9, a4) != 0; } } return 0; } //----- (00634660) -------------------------------------------------------- signed int __thiscall sub_634660(_DWORD *this, int a2, signed int a3, signed int a4, _DWORD *a5) { _DWORD *v5; // esi int v6; // edi int v7; // ecx int v8; // eax int v9; // ebx _DWORD *v10; // eax int v11; // eax signed int v12; // ebx int v13; // edx int v14; // edi _DWORD *v15; // ecx unsigned int v16; // eax int v17; // ecx int v18; // eax int v19; // eax signed int v21; // eax int v22; // edx int v23; // ecx char v24; // [esp+10h] [ebp-47Ch] float v25; // [esp+14h] [ebp-478h] float v26; // [esp+18h] [ebp-474h] float v27; // [esp+1Ch] [ebp-470h] float v28; // [esp+20h] [ebp-46Ch] void *v29; // [esp+24h] [ebp-468h] int v30; // [esp+28h] [ebp-464h] int v31; // [esp+2Ch] [ebp-460h] _DWORD *v32; // [esp+34h] [ebp-458h] int v33; // [esp+38h] [ebp-454h] int v34; // [esp+3Ch] [ebp-450h] int v35; // [esp+40h] [ebp-44Ch] _DWORD *v36; // [esp+44h] [ebp-448h] int v37; // [esp+48h] [ebp-444h] char v38[4]; // [esp+4Fh] [ebp-43Dh] int v39; // [esp+5Ch] [ebp-430h] char v40; // [esp+37Ch] [ebp-110h] char v41; // [esp+37Dh] [ebp-10Fh] int v42; // [esp+488h] [ebp-4h] v5 = this; v6 = 0; v32 = a5; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v7 = this[1]; if ( v7 <= 0 ) return 0; v8 = v5[2]; if ( v8 <= 0 ) return 0; if ( v5[4] > v7 ) return 0; if ( v5[5] > v8 ) return 0; v9 = a2; if ( a2 < 0 || a3 < 0 || a4 < 0 || !a5 || !sub_633CC0(v5, a2) ) return 0; v40 = 0; memset(&v41, 0, 0xFFu); sub_633D80(v5, a2, &v40); sub_474A60(&v38[1], &v40); v10 = sub_439D70(byte_ADB468, &v24); if ( !sub_431080(v10, &v38[1]) ) { v21 = -1; v35 = 0x7FFFFFFF; v37 = -1; if ( v5[4] > 0 ) { v22 = 0; v34 = v5[6]; v36 = (_DWORD *)(v34 + 4); while ( 1 ) { if ( *v36 == v9 ) { if ( (*(_DWORD *)(v5[6] + v22 + 8) - a3) * (*(_DWORD *)(v5[6] + v22 + 8) - a3) + (*(_DWORD *)(v5[6] + v22 + 12) - a4) * (*(_DWORD *)(v5[6] + v22 + 12) - a4) >= v35 ) { v21 = v37; } else { v35 = (*(_DWORD *)(v5[6] + v22 + 8) - a3) * (*(_DWORD *)(v5[6] + v22 + 8) - a3) + (*(_DWORD *)(v5[6] + v22 + 12) - a4) * (*(_DWORD *)(v5[6] + v22 + 12) - a4); v21 = v6; v37 = v6; } } v23 = v5[4]; v36 += 11; ++v6; v22 += 44; if ( v6 >= v23 ) break; v9 = a2; } if ( v21 >= 0 && v21 < v23 ) { *v32 = v34 + 44 * v21; return 1; } } return 0; } v29 = 0; v30 = 0; v31 = 0; v11 = v5[4]; v42 = 0; v33 = 0; if ( v11 <= 0 ) { LABEL_31: sub_467570(&v29); return 0; } while ( 1 ) { v12 = -1; v13 = 0; v35 = 0x7FFFFFFF; v37 = -1; if ( v11 <= 0 ) { LABEL_35: if ( v29 ) operator delete(v29); return 0; } v14 = 0; v15 = (_DWORD *)(v5[6] + 4); v36 = (_DWORD *)(v5[6] + 4); do { if ( *v15 != a2 ) goto LABEL_23; v16 = (v30 - (signed int)v29) >> 2; v17 = 0; if ( v16 ) { while ( *((_DWORD *)v29 + v17) != v13 ) { if ( ++v17 >= v16 ) goto LABEL_20; } } else { LABEL_20: if ( (*(_DWORD *)(v14 + v5[6] + 8) - a3) * (*(_DWORD *)(v14 + v5[6] + 8) - a3) + (*(_DWORD *)(v14 + v5[6] + 12) - a4) * (*(_DWORD *)(v14 + v5[6] + 12) - a4) < v35 ) { v12 = v13; v35 = (*(_DWORD *)(v14 + v5[6] + 8) - a3) * (*(_DWORD *)(v14 + v5[6] + 8) - a3) + (*(_DWORD *)(v14 + v5[6] + 12) - a4) * (*(_DWORD *)(v14 + v5[6] + 12) - a4); v37 = v13; goto LABEL_23; } } v12 = v37; LABEL_23: v18 = v5[4]; ++v13; v15 = v36 + 11; v14 += 44; v36 += 11; } while ( v13 < v18 ); if ( v12 < 0 || v12 >= v18 ) goto LABEL_35; v19 = v5[6]; v25 = (double)*(signed int *)(v19 + 44 * v12 + 8); v26 = (double)*(signed int *)(v19 + 44 * v12 + 12); v38[0] = 0; v27 = (double)a3; v28 = (double)a4; sub_699300(byte_ADB468, v25, v26, v27, v28, 100, (int)&v39, (int)&v34, (int)v38); if ( v34 ) break; sub_5B3CF0(&v29, &v37); LABEL_30: v11 = v5[4]; if ( ++v33 >= v11 ) goto LABEL_31; } if ( !v38[0] ) { sub_5B3CF0(&v29, &v37); goto LABEL_30; } *v32 = v5[6] + 44 * v12; sub_467570(&v29); return 1; } //----- (00634A20) -------------------------------------------------------- int __thiscall sub_634A20(_DWORD *this, char *a2, int a3, int a4, int a5) { _DWORD *v5; // esi int v6; // ecx int v7; // eax int result; // eax int v9; // ebx _DWORD *v10; // edi v5 = this; if ( !this[6] ) return 0; if ( !this[7] ) return 0; v6 = this[1]; if ( v6 <= 0 ) return 0; v7 = v5[2]; if ( v7 <= 0 || v5[4] > v6 || v5[5] > v7 || !a2 || a3 < 0 ) return 0; v9 = a4; if ( a4 < 0 ) return 0; v10 = (_DWORD *)a5; if ( a5 && sub_633E10(v5, a2, (int)&a2) ) result = sub_634660(v5, (int)a2, a3, v9, v10); else result = 0; return result; } //----- (00634B40) -------------------------------------------------------- _DWORD *__thiscall sub_634B40(_DWORD *this) { _DWORD *result; // eax result = this; *this = &CharScreenBoardBase::`vftable'; this[5] = 0; *((_WORD *)this + 2) = -1; *((_BYTE *)this + 24) = 0; return result; } // 9F0DE4: using guessed type void *CharScreenBoardBase::`vftable'; //----- (00634B60) -------------------------------------------------------- int __thiscall sub_634B60(_DWORD *this) { return this[5]; } //----- (00634B70) -------------------------------------------------------- char __thiscall sub_634B70(void *this, float a2, int a3) { float *v3; // ebx void *v4; // esi float v5; // ST08_4 float v6; // ST04_4 char result; // al unsigned int *v8; // edi _DWORD *v9; // ecx int v10; // eax float v11; // ST28_4 float v12; // ST2C_4 float v13; // ST30_4 float *v14; // eax int v15; // edx float v16; // ecx int v17; // edx int v18; // [esp+30h] [ebp-Ch] float v19; // [esp+34h] [ebp-8h] int v20; // [esp+38h] [ebp-4h] v3 = (float *)LODWORD(a2); v4 = this; v5 = (double)(unsigned int)dword_AC2F78; v6 = (double)(unsigned int)xRight; if ( !sub_8F74F0( a3, v6, v5, *(_DWORD *)LODWORD(a2), *(_DWORD *)(LODWORD(a2) + 4), *(_DWORD *)(LODWORD(a2) + 8), (int)&v18) || (v8 = (unsigned int *)sub_664AB0(dword_AD8C90, *((_WORD *)v4 + 2))) != 0 && ((*(unsigned __int8 (__thiscall **)(unsigned int *))(*v8 + 660))(v8) || (v9 = (_DWORD *)v8[731]) != 0 && !sub_744760(v9, v8[730], 0)) ) { *(_WORD *)(*((_DWORD *)v4 + 5) + 28) |= 1u; result = 0; } else { *(_WORD *)(*((_DWORD *)v4 + 5) + 28) &= 0xFFFEu; if ( byte_B9202B == 1 ) v19 = v19 - 15.0; if ( sub_664AB0(dword_AD8C90, *((_WORD *)v4 + 2)) == dword_AD8EBC ) v19 = v19 - 8.0; if ( !*((_BYTE *)v4 + 24) ) { v10 = *((_DWORD *)v4 + 5); *(_DWORD *)(v10 + 88) = v18; *(float *)(v10 + 92) = v19; *(_DWORD *)(v10 + 96) = v20; } if ( byte_B9202B == 1 ) { v11 = *(float *)(a3 + 140) - *v3; v12 = *(float *)(a3 + 144) - v3[1]; v13 = *(float *)(a3 + 148) - v3[2]; *(float *)&a3 = v12 * v12 + v11 * v11 + v13 * v13; *(float *)&a3 = sqrt(*(float *)&a3); *(float *)&a3 = *(float *)&a3 / (double)dword_AB2A5C; a2 = 1.0; v14 = (float *)&a3; if ( *(float *)&a3 >= 1.0 ) v14 = &a2; v15 = *((_DWORD *)v4 + 5); *(float *)&a3 = *v14 * 0.1000000014901161; *(float *)&a3 = 1.0 - *(float *)&a3; *(float *)&a3 = fabs(*(float *)&a3); *(float *)(v15 + 100) = *(float *)&a3; } v16 = v19; v17 = v20; *((_DWORD *)v4 + 2) = v18; *((float *)v4 + 3) = v16; *((_DWORD *)v4 + 4) = v17; result = 1; } return result; } // AB2A5C: using guessed type int dword_AB2A5C; // B9202B: using guessed type char byte_B9202B; //----- (00634D50) -------------------------------------------------------- char *__thiscall sub_634D50(__int16 *this) { char *result; // eax result = sub_664AB0(dword_AD8C90, this[2]); if ( result ) result = (char *)sub_6D8C70(*((_DWORD *)result + 169)); return result; } //----- (00634D80) -------------------------------------------------------- float *__thiscall sub_634D80(_DWORD *this, float a2) { _DWORD *v2; // esi _DWORD **v3; // ecx float *result; // eax _DWORD **v5; // ecx _DWORD **v6; // ecx _DWORD *v7; // ecx v2 = this; v3 = (_DWORD **)this[7]; if ( v3 ) result = (float *)sub_63CB40(v3, a2); v5 = (_DWORD **)v2[9]; if ( v5 ) result = (float *)sub_63CB40(v5, a2); v6 = (_DWORD **)v2[8]; if ( v6 ) result = (float *)sub_63CB40(v6, a2); v7 = (_DWORD *)v2[10]; if ( v7 ) result = sub_42A820(v7, &a2); return result; } //----- (00634DE0) -------------------------------------------------------- signed int __thiscall sub_634DE0(__int16 *this) { char *v1; // eax char *v2; // esi int v4; // ST00_4 signed int v5; // edi _DWORD *v6; // eax int v7; // ST00_4 _DWORD *v8; // eax v1 = sub_664AB0(dword_AD8C90, this[2]); v2 = v1; if ( !v1 ) return 65280; v4 = *((_DWORD *)v1 + 169); v5 = 65280; v6 = (_DWORD *)sub_6D3800(); if ( sub_6D3280(v6, v4) ) { v5 = 0xFFFF; } else { v7 = *((_DWORD *)v2 + 169); v8 = (_DWORD *)sub_6D3800(); if ( sub_6D3250(v8, v7) ) v5 = 255; } sub_6D8C50(*((_DWORD *)v2 + 169)); if ( v2[680] == 1 ) v5 = 65280; return v5; } //----- (00634E60) -------------------------------------------------------- int __thiscall sub_634E60(void *this, signed int a2, signed int a3, int a4) { void *v4; // esi int result; // eax int v6; // edi int v7; // ebx void *v8; // ecx v4 = this; result = sub_42A8B0( -(signed int)((double)a2 * 0.5 + 32.0 + 3.0), -(signed int)((double)a3 + (double)a3 + 3.0), 0, 0, 0, 32, 32); v6 = *((_DWORD *)v4 + 10); v7 = result; if ( v6 != result ) { if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *((_DWORD *)v4 + 10) = v7; if ( v7 ) result = InterlockedIncrement((volatile LONG *)(v7 + 4)); } v8 = (void *)*((_DWORD *)v4 + 10); if ( v8 ) { sub_42A5C0(v8, (unsigned __int8 *)v4 + 44, (_BYTE *)v4 + 45, 1); result = (*(int (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v4 + 5) + 116))(*((_DWORD *)v4 + 10), 0); } return result; } //----- (00634F20) -------------------------------------------------------- int __thiscall sub_634F20(_DWORD *this, float a2) { _DWORD **v2; // ecx int result; // eax v2 = (_DWORD **)this[7]; if ( v2 ) result = sub_63CB40(v2, a2); return result; } //----- (00634F40) -------------------------------------------------------- int __thiscall sub_634F40(_DWORD *this, float a2) { _DWORD **v2; // ecx int result; // eax v2 = (_DWORD **)this[7]; if ( v2 ) result = sub_63CB40(v2, a2); return result; } //----- (00634F60) -------------------------------------------------------- bool __cdecl sub_634F60(float *a1) { float v1; // ST00_4 float v2; // ST04_4 float v3; // ST08_4 float v5; // [esp+14h] [ebp+8h] float v6; // [esp+14h] [ebp+8h] v1 = *(float *)(dword_B66FB0 + 88) - *a1; v2 = *(float *)(dword_B66FB0 + 92) - a1[1]; v3 = *(float *)(dword_B66FB0 + 96) - a1[2]; v5 = v1 * v1 + v2 * v2 + v3 * v3; v6 = sqrt(v5); return v6 <= (double)flt_AB2A2C; } // AB2A2C: using guessed type float flt_AB2A2C; //----- (00634FE0) -------------------------------------------------------- void __thiscall sub_634FE0(__int16 *this, float *a2) { __int16 *v2; // esi float v3; // ST08_4 float v4; // ST0C_4 float v5; // ST10_4 double v6; // st7 double v7; // st6 char *v8; // eax double v9; // rt1 float v10; // [esp+1Ch] [ebp+8h] float v11; // [esp+1Ch] [ebp+8h] float v12; // [esp+1Ch] [ebp+8h] float v13; // [esp+1Ch] [ebp+8h] float v14; // [esp+1Ch] [ebp+8h] v2 = this; v3 = *(float *)(dword_B66FB0 + 88) - *a2; v4 = *(float *)(dword_B66FB0 + 92) - a2[1]; v5 = *(float *)(dword_B66FB0 + 96) - a2[2]; v10 = v3 * v3 + v4 * v4 + v5 * v5; v11 = sqrt(v10); v6 = v11; v7 = flt_AB2A30; if ( flt_AB2A30 > (double)v11 ) { v8 = sub_664AB0(dword_AD8C90, this[2]); if ( !v8 || !v8[2932] ) { (*(void (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v2 + 16))(v2, 1.0); return; } goto LABEL_6; } if ( flt_AB2A34 < v6 ) { LABEL_6: (*(void (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v2 + 16))(v2, 0.0); return; } v12 = flt_AB2A34 - v7; if ( 0.0 != v12 ) { v9 = v12; v13 = v6 - v7; v14 = 1.0 - v13 / v9; (*(void (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)this + 16))(this, LODWORD(v14)); } } // AB2A30: using guessed type float flt_AB2A30; // AB2A34: using guessed type float flt_AB2A34; //----- (00635100) -------------------------------------------------------- void __thiscall sub_635100(__int16 *this, float a2, int a3, int a4) { __int16 *v4; // esi char *v5; // eax char *v6; // edi float *v7; // eax char v8; // [esp+10h] [ebp-18h] float v9[2]; // [esp+1Ch] [ebp-Ch] float v10; // [esp+24h] [ebp-4h] v4 = this; v5 = sub_664AB0(dword_AD8C90, this[2]); v6 = v5; if ( v5 ) { v7 = sub_653B10(v5, (float *)&v8); sub_634FE0(v4, v7); sub_653B10(v6, v9); v10 = v10 + 3.0; sub_634B70(v4, COERCE_FLOAT(v9), a3); if ( !*((_BYTE *)v4 + 24) ) sub_85BED0(*((_DWORD ***)v4 + 5), a2, 1); (*(void (__thiscall **)(__int16 *))(*(_DWORD *)v4 + 24))(v4); sub_637B10((_DWORD *)v4 + 12, *((float *)v4 + 2), *((_DWORD *)v4 + 3), *((_DWORD *)v4 + 4), a2); } } //----- (006351B0) -------------------------------------------------------- char __cdecl sub_6351B0(__int16 a1) { char *v1; // eax char *v2; // esi int v4; // eax char v5; // [esp+4h] [ebp-Ch] v1 = sub_664AB0(dword_AD8C90, a1); v2 = v1; if ( !v1 ) return 0; if ( !sub_6510B0((int)v1) ) return 0; if ( v2[2140] == 1 ) return 0; sub_653B10(v2, (float *)&v5); if ( !sub_634F60((float *)&v5) || v2[1924] == 5 ) return 0; if ( *((char **)dword_AD8EBC + 1026) != v2 && (char *)dword_AD8BF8 != v2 ) { if ( sub_651680((int)v2) ) { if ( !byte_B92000 ) return 0; } else if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 32))(v2) ) { if ( !byte_B92001 ) return 0; } else if ( dword_AD8EBC == v2 ) { if ( !BYTE2(dword_B91FFC) ) return 0; } else if ( !HIBYTE(dword_B91FFC) ) { return 0; } } if ( !(*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 12))(v2) ) return 0; if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v2 + 32))(v2) ) { v4 = *(_DWORD *)(sub_650CF0(v2) + 99); if ( v4 == 13 || v4 == 19 || v4 == 27 || v4 == 29 || v4 == 20 || v4 == 24 ) return 0; } return 1; } // AD8BF8: using guessed type int dword_AD8BF8; // B91FFC: using guessed type int dword_B91FFC; // B92000: using guessed type char byte_B92000; // B92001: using guessed type char byte_B92001; //----- (006352D0) -------------------------------------------------------- char __thiscall sub_6352D0(__int16 *this, float a2, int a3, int a4) { __int16 *v4; // esi int v5; // eax int v6; // edi int v7; // eax int v8; // ecx double v9; // st7 int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] float v13; // [esp+18h] [ebp-4h] v4 = this; v5 = sub_682C20(&unk_ADA1E0, this[2]); v6 = v5; if ( v5 ) { sub_634FE0(v4, (float *)(*(_DWORD *)(v5 + 12) + 88)); v7 = *(_DWORD *)(v6 + 12); v8 = *(_DWORD *)(v7 + 92); v11 = *(_DWORD *)(v7 + 88); v9 = *(float *)(v7 + 96) + 12.0; v12 = v8; v13 = v9; LOBYTE(v5) = sub_634B70(v4, COERCE_FLOAT(&v11), a3); if ( !*((_BYTE *)v4 + 24) ) LOBYTE(v5) = sub_85BED0(*((_DWORD ***)v4 + 5), a2, 1); } return v5; } //----- (00635350) -------------------------------------------------------- int __thiscall sub_635350(__int16 *this) { int result; // eax int v2; // esi int v3; // edi int v4; // edx int v5; // eax result = sub_682C20(&unk_ADA1E0, this[2]); if ( result ) { v2 = dword_ACB230; v3 = *(unsigned __int16 *)(result + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200) && (v4 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v4 + 4 * v3)) && (v5 = *(_DWORD *)(v4 + 4 * v3)) != 0 ) { switch ( *(_DWORD *)(v5 + 118) ) { case 1: result = 65280; break; case 2: case 5: result = 16695821; break; case 3: result = 58623; break; case 4: result = 15671549; break; case 6: result = 33023; break; case 7: result = 16711935; break; default: result = 0xFFFFFF; break; } } else { result = 3339263; } } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00635410) -------------------------------------------------------- bool __cdecl sub_635410(__int16 a1) { int v1; // eax int v2; // esi bool result; // al _DWORD *v4; // eax int v5; // ecx int v6; // edx int v7; // eax int v8; // [esp+4h] [ebp-Ch] int v9; // [esp+8h] [ebp-8h] int v10; // [esp+Ch] [ebp-4h] v1 = sub_682C20(&unk_ADA1E0, a1); v2 = v1; result = 0; if ( v1 ) { v4 = *(_DWORD **)(v1 + 12); v5 = v4[22]; v6 = v4[23]; v7 = v4[24]; v8 = v5; v9 = v6; v10 = v7; if ( sub_634F60((float *)&v8) && (byte_B92002 || dword_ADA1D8 == v2) ) result = 1; } return result; } // ADA1D8: using guessed type int dword_ADA1D8; // B92002: using guessed type char byte_B92002; //----- (00635470) -------------------------------------------------------- void __thiscall sub_635470(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi int v4; // esi v1 = this; *this = &CharScreenBoardBase::`vftable'; v2 = this[5]; if ( v2 ) { sub_8D8240((_DWORD *)(v2 + 176)); v3 = v1[5]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[5] = 0; } } v4 = v1[5]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } // 9F0DE4: using guessed type void *CharScreenBoardBase::`vftable'; //----- (00635520) -------------------------------------------------------- void __thiscall sub_635520(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi v1 = this; *this = &CharScreenBoardUserChar::`vftable'; v2 = this[7]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[7] = 0; } v3 = v1[8]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[8] = 0; } v4 = v1[9]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[9] = 0; } v5 = v1[10]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[10] = 0; } *((_WORD *)v1 + 22) = -1; sub_637A70(v1 + 12); v6 = v1[10]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[9]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[8]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[7]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); sub_635470(v1); } // 9F0E14: using guessed type void *CharScreenBoardUserChar::`vftable'; //----- (006356C0) -------------------------------------------------------- char __thiscall sub_6356C0(__int16 *this) { __int16 *v1; // esi char result; // al v1 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 20))() == 1 || (*(unsigned __int8 (__thiscall **)(__int16 *))(*(_DWORD *)v1 + 24))(v1) == 1 ) { result = 0; } else { result = sub_6351B0(v1[2]); } return result; } //----- (006356F0) -------------------------------------------------------- void __thiscall sub_6356F0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi v1 = this; *this = &CharScreenBoardDropItem::`vftable'; v2 = this[5]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[5] = 0; } v3 = v1[7]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[7] = 0; } v4 = v1[7]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_635470(v1); } // 9F0E34: using guessed type void *CharScreenBoardDropItem::`vftable'; //----- (006357D0) -------------------------------------------------------- bool __thiscall sub_6357D0(__int16 *this) { int v1; // eax int v2; // esi bool result; // al _DWORD *v4; // eax int v5; // ecx int v6; // edx int v7; // eax int v8; // [esp+4h] [ebp-Ch] int v9; // [esp+8h] [ebp-8h] int v10; // [esp+Ch] [ebp-4h] v1 = sub_682C20(&unk_ADA1E0, this[2]); v2 = v1; result = 0; if ( v1 ) { v4 = *(_DWORD **)(v1 + 12); v5 = v4[22]; v6 = v4[23]; v7 = v4[24]; v8 = v5; v9 = v6; v10 = v7; if ( sub_634F60((float *)&v8) && (byte_B92002 || dword_ADA1D8 == v2) ) result = 1; } return result; } // ADA1D8: using guessed type int dword_ADA1D8; // B92002: using guessed type char byte_B92002; //----- (006358B0) -------------------------------------------------------- int __thiscall sub_6358B0(__int16 *this) { char *v1; // eax int v2; // esi int result; // eax _DWORD *v4; // eax int v5; // eax int v6; // eax int v7; // eax signed int v8; // eax signed int v9; // edi char *v10; // eax int v11; // [esp-14h] [ebp-20h] int v12; // [esp-10h] [ebp-1Ch] int v13; // [esp-Ch] [ebp-18h] int v14; // [esp-8h] [ebp-14h] int v15; // [esp-4h] [ebp-10h] int *v16; // [esp+8h] [ebp-4h] v1 = sub_664AB0(dword_AD8C90, this[2]); v2 = (int)v1; if ( !v1 ) return 16711935; if ( v1 == dword_AD8EBC ) return 14286592; if ( sub_651680((int)v1) ) return 3342335; if ( sub_650B20((_DWORD *)v2) ) return 16417535; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 32))(v2) ) { v15 = *(unsigned __int16 *)(v2 + 548); v4 = sub_6D14F0(); v5 = sub_4A3ED0(v4, v15); if ( v5 && v5 == *((_DWORD *)dword_AD8EBC + 169) ) return 0xFFFFFF; v6 = sub_6D3800(); if ( v6 && *(_DWORD *)(v6 + 2700) == 2 && *((_DWORD *)dword_AD8EBC + 169) != *(_DWORD *)(v2 + 676) ) { result = 255; } else { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 164))(v2); v8 = sub_652AC0(dword_AD8EBC, v7); if ( v8 == 5 ) return 16711935; result = dword_AB2AD8[v8]; } } else { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 664))(v2) ) return 0xFFFFFF; v9 = 0xFFFFFF; v10 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 84))(v2); v16 = &v11; sub_416970((char *)&v11, v10); if ( sub_6C11C0(&dword_B9DC70, v11, v12, v13, v14, v15) ) v9 = 16433206; if ( sub_67DA80(dword_AD8EBC, v2) == 3 ) v9 = 255; result = v9; } return result; } // B9DC70: using guessed type int dword_B9DC70; //----- (00635A20) -------------------------------------------------------- bool __thiscall sub_635A20(__int16 *this) { __int16 *v1; // esi bool result; // al char *v3; // ecx int v4; // edi char *v5; // ecx char *v6; // ecx int v7; // edi v1 = this; if ( !sub_664AB0(dword_AD8C90, this[2]) ) return 0; v3 = (char *)*((_DWORD *)v1 + 7); result = 1; if ( !v3 || (v4 = sub_63C8B0(v3), sub_6358B0(v1) == *(_DWORD *)(v4 + 28)) ) { v5 = (char *)*((_DWORD *)v1 + 8); if ( !v5 || *(_DWORD *)(sub_63C8B0(v5) + 28) == 0xFFFF ) { v6 = (char *)*((_DWORD *)v1 + 9); if ( !v6 || (v7 = sub_63C8B0(v6), sub_634DE0(v1) == *(_DWORD *)(v7 + 28)) ) result = 0; } } return result; } //----- (00635A90) -------------------------------------------------------- char __thiscall sub_635A90(unsigned __int16 *this, float a2, int a3, int a4) { unsigned __int16 *v4; // edi char result; // al int v6; // esi float *v7; // eax int v8; // ecx int v9; // edx float v10; // eax int v11; // eax double v12; // st7 int v13; // ST14_4 int v14; // ST18_4 int v15; // [esp+20h] [ebp-14h] int v16; // [esp+24h] [ebp-10h] float v17; // [esp+28h] [ebp-Ch] _DWORD *v18; // [esp+2Ch] [ebp-8h] int v19; // [esp+30h] [ebp-4h] v4 = this; v19 = this[2]; sub_4A3E20(&unk_B9E1CC, &v18, &v19); result = (char)v18; if ( v18 != dword_B9E1D0 ) { v6 = v18[4]; if ( v6 ) { v7 = *(float **)(v6 + 36); v8 = *((_DWORD *)v7 + 35); v9 = *((_DWORD *)v7 + 36); v10 = v7[37]; v15 = v8; v16 = v9; v17 = v10; sub_634FE0((__int16 *)v4, (float *)&v15); v11 = (*(int (__stdcall **)(const char *))(**(_DWORD **)(v6 + 36) + 72))("Name"); if ( v11 ) { v12 = *(float *)(v11 + 148); v13 = *(_DWORD *)(v11 + 140); v14 = *(_DWORD *)(v11 + 144); } else { v12 = v17 + 56.0; } v17 = v12; result = sub_634B70(v4, COERCE_FLOAT(&v15), a3); if ( !*((_BYTE *)v4 + 24) ) result = sub_85BED0(*((_DWORD ***)v4 + 5), a2, 1); } } return result; } //----- (00635B70) -------------------------------------------------------- bool __cdecl sub_635B70(int a1) { int v1; // eax _DWORD *v3; // eax int v4; // ecx int v5; // edx int v6; // eax int v7; // [esp+0h] [ebp-10h] int v8; // [esp+4h] [ebp-Ch] int v9; // [esp+8h] [ebp-8h] _DWORD *v10; // [esp+Ch] [ebp-4h] a1 = (unsigned __int16)a1; sub_4A3E20(&unk_B9E1CC, &v10, &a1); if ( v10 == dword_B9E1D0 ) return 0; v1 = v10[4]; if ( !v1 ) return 0; v3 = *(_DWORD **)(v1 + 36); v4 = v3[35]; v5 = v3[36]; v6 = v3[37]; v7 = v4; v8 = v5; v9 = v6; return sub_634F60((float *)&v7) != 0; } //----- (00635BE0) -------------------------------------------------------- _DWORD *__thiscall sub_635BE0(__int16 *this, _DWORD *a2) { char *v2; // eax char *v3; // edi _DWORD *result; // eax char *v5; // eax char *v6; // esi const CHAR *v7; // eax char *v8; // eax v2 = sub_664AB0(dword_AD8C90, this[2]); v3 = v2; if ( v2 ) { v5 = sub_6D8C50(*((_DWORD *)v2 + 169)); v6 = v5; if ( v5 ) { if ( v3[680] == 1 ) { v7 = sub_40C190(-2036079644); v8 = sub_7549E0("[%s][%s]", v7, v6); } else { v8 = sub_7549E0("[%s]", v5); } sub_4019E0(a2, v8); result = a2; } else { result = a2; a2[4] = v6; a2[5] = 15; *(_BYTE *)a2 = 0; } } else { result = a2; a2[4] = v3; a2[5] = 15; *(_BYTE *)a2 = 0; } return result; } //----- (00635C90) -------------------------------------------------------- _DWORD *__thiscall sub_635C90(__int16 *this, _DWORD *a2) { char *v2; // eax _DWORD *result; // eax int v4; // ST08_4 const char *v5; // eax void *v6; // eax char v7; // [esp+Ch] [ebp-108h] v2 = sub_664AB0(dword_AD8C90, this[2]); if ( v2 ) { if ( v2[1924] == 4 ) { v4 = (*(int (**)(void))(*(_DWORD *)v2 + 84))(); v5 = sub_40C190(-1817051927); sprintf(&v7, v5, v4); a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, &v7, strlen(&v7)); } else { v6 = (void *)(*(int (**)(void))(*(_DWORD *)v2 + 84))(); a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, v6, strlen((const char *)v6)); } result = a2; } else { a2[4] = 0; a2[5] = 15; *(_BYTE *)a2 = 0; result = a2; } return result; } //----- (00635DA0) -------------------------------------------------------- char __thiscall sub_635DA0(_WORD *this, __int16 a2, int a3) { _WORD *v3; // esi _DWORD *v4; // ebx _DWORD *v6; // eax int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi void *v11; // eax const void **v12; // ecx int *v13; // ebx int v14; // edi int v15; // eax unsigned __int16 *v16; // [esp+18h] [ebp-3Ch] void *v17; // [esp+1Ch] [ebp-38h] int v18; // [esp+2Ch] [ebp-28h] unsigned int v19; // [esp+30h] [ebp-24h] int v20; // [esp+38h] [ebp-1Ch] int v21; // [esp+3Ch] [ebp-18h] int v22; // [esp+40h] [ebp-14h] int v23; // [esp+50h] [ebp-4h] v3 = this; this[2] = a2; v4 = 0; v16 = (unsigned __int16 *)sub_682C20(&unk_ADA1E0, a2); if ( !v16 ) return 0; v6 = operator new(0xE8u); v23 = 0; if ( v6 ) v4 = sub_85A1C0(v6, 0); v7 = *((_DWORD *)v3 + 5); v23 = -1; if ( (_DWORD *)v7 != v4 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v3 + 5) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v8 = operator new(0x70u); v23 = 1; if ( v8 ) v9 = sub_63CCA0(v8, a3); else v9 = 0; v10 = *((_DWORD *)v3 + 7); v23 = -1; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v3 + 7) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v19 = 15; v18 = 0; LOBYTE(v17) = 0; v23 = 2; v20 = sub_635350(v3); v11 = (void *)sub_682990(v16); sub_4018E0(&v17, v11, strlen((const char *)v11)); v22 = dword_BA482C; v12 = (const void **)*((_DWORD *)v3 + 7); v21 = dword_BA4828; sub_63CD50(v12, COERCE_FLOAT(&v17)); v13 = (int *)*((_DWORD *)v3 + 5); v14 = *v13; v15 = sub_63CB30(*((_DWORD **)v3 + 7)); (*(void (__thiscall **)(int *, int, _DWORD))(v14 + 116))(v13, v15, 0); if ( v19 >= 0x10 ) operator delete(v17); return 1; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (00635F70) -------------------------------------------------------- char __thiscall sub_635F70(_WORD *this, unsigned __int16 a2, int a3) { _WORD *v3; // esi _DWORD *v4; // ebx _DWORD *v6; // eax int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi const void **v11; // ecx int *v12; // edi _DWORD *v13; // ecx int v14; // esi int v15; // eax _DWORD *v16; // [esp+14h] [ebp-D8h] void *v17; // [esp+18h] [ebp-D4h] void *v18; // [esp+1Ch] [ebp-D0h] int v19; // [esp+2Ch] [ebp-C0h] unsigned int v20; // [esp+30h] [ebp-BCh] int v21; // [esp+38h] [ebp-B4h] int v22; // [esp+3Ch] [ebp-B0h] int v23; // [esp+40h] [ebp-ACh] char v24; // [esp+44h] [ebp-A8h] char v25; // [esp+45h] [ebp-A7h] int v26; // [esp+C4h] [ebp-28h] int v27; // [esp+C8h] [ebp-24h] int v28; // [esp+CCh] [ebp-20h] int v29; // [esp+D0h] [ebp-1Ch] int v30; // [esp+D4h] [ebp-18h] char v31; // [esp+D8h] [ebp-14h] int v32; // [esp+E8h] [ebp-4h] v3 = this; this[2] = a2; v17 = (void *)a2; sub_4A3E20(&unk_B9E1CC, &v16, &v17); if ( v16 == dword_B9E1D0 ) return 0; v4 = 0; v16 = (_DWORD *)v16[4]; if ( !v16 ) return 0; v6 = operator new(0xE8u); v17 = v6; v32 = 0; if ( v6 ) v4 = sub_85A1C0(v6, 0); v7 = *((_DWORD *)v3 + 5); v32 = -1; if ( (_DWORD *)v7 != v4 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v3 + 5) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v8 = operator new(0x70u); v17 = v8; v32 = 1; if ( v8 ) v9 = sub_63CCA0(v8, a3); else v9 = 0; v10 = *((_DWORD *)v3 + 7); v32 = -1; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v3 + 7) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v24 = 0; memset(&v25, 0, 0x7Fu); v26 = *(_DWORD *)((char *)v16 + 14); v27 = *(_DWORD *)((char *)v16 + 18); v28 = *(_DWORD *)((char *)v16 + 22); v29 = *(_DWORD *)((char *)v16 + 26); v30 = *(_DWORD *)((char *)v16 + 30); v31 = 0; sprintf(&v24, "[%s] %s", &v26, v16 + 10); v20 = 15; v19 = 0; LOBYTE(v18) = 0; v32 = 2; v21 = 0xFFFF; sub_4018E0(&v18, &v24, strlen(&v24)); v11 = (const void **)*((_DWORD *)v3 + 7); v22 = dword_BA4828; v23 = dword_BA482C; sub_63CD50(v11, COERCE_FLOAT(&v18)); v12 = (int *)*((_DWORD *)v3 + 5); v13 = (_DWORD *)*((_DWORD *)v3 + 7); v14 = *v12; v15 = sub_63CB30(v13); (*(void (__thiscall **)(int *, int, _DWORD))(v14 + 116))(v12, v15, 0); if ( v20 >= 0x10 ) operator delete(v18); return 1; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (006361F0) -------------------------------------------------------- bool __thiscall sub_6361F0(unsigned __int16 *this) { return sub_635B70(this[2]); } //----- (00636200) -------------------------------------------------------- void *__thiscall sub_636200(__int16 *this, void *a2) { char *v2; // eax void *v4; // [esp+14h] [ebp-2Ch] int v5; // [esp+24h] [ebp-1Ch] unsigned int v6; // [esp+28h] [ebp-18h] int v7; // [esp+3Ch] [ebp-4h] v2 = sub_664AB0(dword_AD8C90, this[2]); if ( v2 && v2[465] ) { v6 = 15; v5 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, v2 + 209, strlen(v2 + 209)); v7 = 0; sub_401D10((int)&v4, " ", 1u); *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; *(_BYTE *)a2 = 0; sub_406450(a2, &v4); if ( v6 >= 0x10 ) operator delete(v4); } else { *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; *(_BYTE *)a2 = 0; } return a2; } //----- (006362F0) -------------------------------------------------------- char __thiscall sub_6362F0(__int16 *this) { __int16 *v1; // esi char *v2; // eax char *v3; // ecx int v4; // edi unsigned __int8 *v5; // eax bool v6; // cf unsigned int v7; // ecx bool v8; // bl char *v9; // ecx int v10; // edi void *v11; // eax bool v12; // bl char *v14; // ecx int v15; // edi _DWORD *v16; // eax bool v17; // bl char *v18; // eax char *v19; // [esp+10h] [ebp-4Ch] char v20; // [esp+14h] [ebp-48h] void *v21; // [esp+30h] [ebp-2Ch] unsigned int v22; // [esp+44h] [ebp-18h] int v23; // [esp+58h] [ebp-4h] v1 = this; v2 = sub_664AB0(dword_AD8C90, this[2]); v19 = v2; if ( !v2 ) return 0; v3 = (char *)*((_DWORD *)v1 + 7); if ( v3 ) { v4 = sub_63C8B0(v3); v5 = (unsigned __int8 *)sub_635C90(v1, &v21); v6 = *((_DWORD *)v5 + 5) < 0x10u; v7 = *((_DWORD *)v5 + 4); v23 = 0; if ( !v6 ) v5 = *(unsigned __int8 **)v5; v8 = sub_40C2F0((unsigned __int8 *)v4, 0, *(_DWORD *)(v4 + 16), v5, v7) != 0; v23 = -1; if ( v22 >= 0x10 ) operator delete(v21); if ( v8 ) return 1; v2 = v19; } if ( v2[465] && v2[1924] != 4 ) { v9 = (char *)*((_DWORD *)v1 + 8); if ( !v9 ) return 1; v10 = sub_63C8B0(v9); v11 = sub_636200(v1, &v21); v23 = 1; v12 = sub_4B1EE0(v10, (int)v11); v23 = -1; sub_636A10(&v21); if ( v12 ) return 1; v2 = v19; } else if ( *((_DWORD *)v1 + 8) ) { return 1; } if ( v2[2680] != 1 || !*((_DWORD *)v2 + 169) ) { if ( !*((_DWORD *)v1 + 9) ) return 0; return 1; } v14 = (char *)*((_DWORD *)v1 + 9); if ( !v14 ) return 1; v15 = sub_63C8B0(v14); v16 = sub_635BE0(v1, &v20); v23 = 2; v17 = sub_4B1EE0(v15, (int)v16); v23 = -1; sub_636A10(&v20); if ( v17 ) return 1; if ( byte_B9202B != 1 ) return 0; v18 = sub_634D50(v1); if ( !v18 ) return 1; if ( *((_BYTE *)v1 + 44) != *v18 || *((_BYTE *)v1 + 45) != v18[1] ) return 1; return 0; } // B9202B: using guessed type char byte_B9202B; //----- (006364A0) -------------------------------------------------------- char __thiscall sub_6364A0(_WORD *this, __int16 a2, void (__thiscall ***a3)(_DWORD, int *, void *)) { _WORD *v3; // esi _DWORD *v4; // ebx _DWORD *v5; // eax int v6; // edi _DWORD *v7; // eax _DWORD *v8; // ebx int v9; // edi _DWORD *v10; // eax _DWORD *v11; // eax void (__thiscall ***v12)(_DWORD, int *, void *); // ebx _DWORD *v13; // eax void *v14; // eax void *v15; // eax void *v16; // eax int v17; // edx double v18; // st7 void *v19; // edx const void **v20; // ecx int *v21; // ebx int v22; // edi int v23; // eax int *v24; // ebx int v25; // edi int v26; // eax void *v27; // eax void (__thiscall ***v28)(_DWORD, _DWORD, _DWORD); // edi _DWORD *v29; // eax _DWORD *v30; // eax signed int v31; // eax const void **v32; // ecx int *v33; // ebx int v34; // edi int v35; // eax char *v36; // eax int v38; // [esp+10h] [ebp-9Ch] int v39; // [esp+18h] [ebp-94h] int v40; // [esp+1Ch] [ebp-90h] char *v41; // [esp+20h] [ebp-8Ch] void (__thiscall ***v42)(_DWORD, int *, void *); // [esp+24h] [ebp-88h] float v43; // [esp+28h] [ebp-84h] void *v44; // [esp+2Ch] [ebp-80h] void *v45; // [esp+30h] [ebp-7Ch] int v46; // [esp+40h] [ebp-6Ch] unsigned int v47; // [esp+44h] [ebp-68h] int v48; // [esp+4Ch] [ebp-60h] int v49; // [esp+50h] [ebp-5Ch] float v50; // [esp+54h] [ebp-58h] void *v51; // [esp+58h] [ebp-54h] int v52; // [esp+68h] [ebp-44h] unsigned int v53; // [esp+6Ch] [ebp-40h] void *v54; // [esp+74h] [ebp-38h] int v55; // [esp+84h] [ebp-28h] unsigned int v56; // [esp+88h] [ebp-24h] int v57; // [esp+90h] [ebp-1Ch] float v58; // [esp+94h] [ebp-18h] float v59; // [esp+98h] [ebp-14h] int v60; // [esp+A8h] [ebp-4h] v3 = this; v42 = a3; this[2] = a2; v4 = 0; v41 = sub_664AB0(dword_AD8C90, a2); if ( !v41 ) return 0; v5 = operator new(0xE8u); v44 = v5; v60 = 0; if ( v5 ) v4 = sub_85A1C0(v5, 0); v6 = *((_DWORD *)v3 + 5); v60 = -1; if ( (_DWORD *)v6 != v4 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v3 + 5) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v7 = operator new(0x70u); v44 = v7; v60 = 1; if ( v7 ) v8 = sub_63CCA0(v7, (int)v42); else v8 = 0; v9 = *((_DWORD *)v3 + 7); v60 = -1; if ( (_DWORD *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v3 + 7) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } v47 = 15; v46 = 0; LOBYTE(v45) = 0; v60 = 2; v48 = sub_6358B0(v3); v10 = sub_635C90(v3, &v51); LOBYTE(v60) = 3; sub_406450(&v45, v10); LOBYTE(v60) = 2; if ( v53 >= 0x10 ) operator delete(v51); v49 = dword_BA4828; v50 = *(float *)&dword_BA482C; if ( v41[465] && v41[1924] != 4 ) { v11 = operator new(0x70u); v44 = v11; v12 = v42; LOBYTE(v60) = 4; if ( v11 ) v13 = sub_63CCA0(v11, (int)v42); else v13 = 0; LOBYTE(v60) = 2; sub_56FF80((_DWORD *)v3 + 8, (int)v13); v56 = 15; v55 = 0; LOBYTE(v54) = 0; LOBYTE(v60) = 5; v14 = sub_636200(v3, &v51); LOBYTE(v60) = 6; sub_406450(&v54, v14); LOBYTE(v60) = 5; if ( v53 >= 0x10 ) operator delete(v51); v15 = v45; v57 = 0xFFFF; if ( v47 < 0x10 ) v15 = &v45; (**v42)(v42, &v39, v15); v16 = v54; if ( v56 < 0x10 ) v16 = &v54; (**v12)(v12, &v38, v16); v17 = v38 / 2 + v39 / 2; v39 /= 2; v18 = (double)(v38 / 2); v19 = (void *)(v17 - v38 / 2); v38 /= 2; v43 = v18; v49 = LODWORD(v43); v44 = v19; v50 = 0.0; v20 = (const void **)*((_DWORD *)v3 + 8); v43 = -(double)(signed int)v19; v58 = v43; *(float *)&v44 = 0.0; v59 = 0.0; sub_63CD50(v20, COERCE_FLOAT(&v54)); v21 = (int *)*((_DWORD *)v3 + 5); v22 = *v21; v23 = sub_63CB30(*((_DWORD **)v3 + 8)); (*(void (__thiscall **)(int *, int, _DWORD))(v22 + 116))(v21, v23, 0); LOBYTE(v60) = 2; if ( v56 >= 0x10 ) operator delete(v54); } sub_63CD50(*((const void ***)v3 + 7), COERCE_FLOAT(&v45)); v24 = (int *)*((_DWORD *)v3 + 5); v25 = *v24; v26 = sub_63CB30(*((_DWORD **)v3 + 7)); (*(void (__thiscall **)(int *, int, _DWORD))(v25 + 116))(v24, v26, 0); if ( v41[2680] == 1 && *((_DWORD *)v41 + 169) ) { sub_635BE0(v3, &v51); LOBYTE(v60) = 7; if ( v52 ) { v27 = v51; if ( v53 < 0x10 ) v27 = &v51; v28 = (void (__thiscall ***)(_DWORD, _DWORD, _DWORD))v42; (**v42)(v42, &v39, v27); v29 = operator new(0x70u); v44 = v29; LOBYTE(v60) = 8; if ( v29 ) v30 = sub_63CCA0(v29, (int)v28); else v30 = 0; LOBYTE(v60) = 7; sub_56FF80((_DWORD *)v3 + 9, (int)v30); v56 = 15; v55 = 0; LOBYTE(v54) = 0; LOBYTE(v60) = 9; sub_4017F0((const void **)&v54, (const void **)&v51, 0, (void *)0xFFFFFFFF); v31 = sub_634DE0(v3); v43 = 0.0; v57 = v31; v58 = 0.0; v32 = (const void **)*((_DWORD *)v3 + 9); *(float *)&v44 = -((double)v40 + 2.0); v59 = *(float *)&v44; sub_63CD50(v32, COERCE_FLOAT(&v54)); v33 = (int *)*((_DWORD *)v3 + 5); v34 = *v33; v35 = sub_63CB30(*((_DWORD **)v3 + 9)); (*(void (__thiscall **)(int *, int, _DWORD))(v34 + 116))(v33, v35, 0); if ( v41[680] != 1 ) { v36 = sub_634D50(v3); if ( !v36 ) { sub_636A10(&v54); sub_636A10(&v51); sub_636A10(&v45); return 0; } v3[22] = *(_WORD *)v36; if ( byte_B9202B == 1 ) sub_634E60(v3, v39, v40, (int)v36); } sub_636A10(&v54); } if ( v53 >= 0x10 ) operator delete(v51); } if ( v47 >= 0x10 ) operator delete(v45); return 1; } // B9202B: using guessed type char byte_B9202B; // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (00636980) -------------------------------------------------------- double __thiscall sub_636980(_DWORD *this, float *a2) { float *v2; // eax float v3; // ST00_4 float v4; // ST04_4 float v5; // ST08_4 float v7; // [esp+14h] [ebp+8h] v2 = (float *)this[143058]; v3 = v2[22] - *a2; v4 = v2[23] - a2[1]; v5 = v2[24] - a2[2]; v7 = v3 * v3 + v4 * v4 + v5 * v5; return (float)sqrt(v7); } //----- (006369E0) -------------------------------------------------------- void *__thiscall sub_6369E0(void *this, char a2) { void *v2; // esi v2 = this; sub_635520(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00636A10) -------------------------------------------------------- void __thiscall sub_636A10(void *this) { _DWORD *v1; // esi v1 = this; if ( *((_DWORD *)this + 5) >= 0x10u ) operator delete(*(void **)this); v1[5] = 15; v1[4] = 0; *(_BYTE *)v1 = 0; } //----- (00636A40) -------------------------------------------------------- void *__thiscall sub_636A40(void *this, char a2) { void *v2; // esi v2 = this; sub_6356F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00636A70) -------------------------------------------------------- _DWORD *__thiscall sub_636A70(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &CharScreenBoardMiniHouse::`vftable'; v3 = *((_DWORD *)this + 7); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_635470(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0E4C: using guessed type void *CharScreenBoardMiniHouse::`vftable'; //----- (00636B00) -------------------------------------------------------- void *__thiscall sub_636B00(void *this, char a2) { void *v2; // esi v2 = this; sub_635470(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00636B30) -------------------------------------------------------- void *__thiscall sub_636B30(void **this, void *a2) { void **v2; // esi void *result; // eax v2 = this; operator delete[](this[4]); result = operator new[]((unsigned int)a2 + 1); v2[5] = a2; v2[4] = result; return result; } //----- (00636B60) -------------------------------------------------------- bool __thiscall sub_636B60(_BYTE *this, int a2) { return this[28] != 0; } //----- (00636B70) -------------------------------------------------------- int __thiscall sub_636B70(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; if ( this[13] ) result = (*(int (__stdcall **)(_DWORD *))(*this[13] + 8))(this[13]); if ( v1[14] ) result = (*(int (__stdcall **)(_DWORD *))(*v1[14] + 8))(v1[14]); return result; } //----- (00636BA0) -------------------------------------------------------- void __usercall sub_636BA0(int a1@, int a2@) { int v2; // esi int v3; // edi int v4; // ebx int v5; // eax int v6; // eax int x; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] HDC hdc; // [esp+Ch] [ebp-4h] v2 = a1; if ( *(_DWORD *)(a1 + 52) ) { (*(void (__stdcall **)(_DWORD, HDC *, int))(**(_DWORD **)(a1 + 52) + 60))(*(_DWORD *)(a1 + 52), &hdc, a2); SetBkMode(hdc, 1); SetTextColor(hdc, *(_DWORD *)(v2 + 108)); SelectObject(hdc, h); v3 = *(_DWORD *)(v2 + 88); x = *(_DWORD *)(v2 + 84); v8 = 0; if ( *(_DWORD *)(v2 + 60) ) { v4 = v2 + 64; while ( 1 ) { v5 = *(_DWORD *)(v2 + 4); if ( !v5 ) break; v6 = v5 - 1; if ( v6 ) { if ( v6 != 1 ) break; SetTextColor(hdc, 0xFFu); } else { SetTextColor(hdc, 0xFFFFu); } LABEL_10: TextOutA(hdc, x, v3, *(LPCSTR *)v4, *(_DWORD *)(v4 + 4)); v3 += *(_DWORD *)(v2 + 80) + 1; v4 += 4; if ( (unsigned int)++v8 >= *(_DWORD *)(v2 + 60) ) goto LABEL_11; } SetTextColor(hdc, 0xFF00u); goto LABEL_10; } LABEL_11: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 52) + 64))(*(_DWORD *)(v2 + 52)); } } //----- (00636C80) -------------------------------------------------------- __int16 __thiscall sub_636C80(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[6] = a2; return result; } //----- (00636CA0) -------------------------------------------------------- char __usercall sub_636CA0@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5) { const CHAR *v5; // edi struct tagSIZE psizl; // [esp+4h] [ebp-8h] v5 = (const CHAR *)a1; *a2 = 0; *a3 = 0; if ( a1 ) { LOBYTE(a1) = *(_BYTE *)a1; if ( (_BYTE)a1 ) { do { if ( IsDBCSLeadByte(a1) ) { GetTextExtentPoint32A(hdc, v5, 2, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; v5 += 2; *a2 += 2; } else { GetTextExtentPoint32A(hdc, v5, 1, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; ++v5; ++*a2; } *a3 += a1; LOBYTE(a1) = *v5; } while ( *v5 ); } } return a1; } //----- (00636D20) -------------------------------------------------------- bool __thiscall sub_636D20(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v4; // eax int v5; // ecx int v6; // eax v1 = this; v2 = *(_DWORD *)(this[8] + 40); if ( !v2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)v2 + 20))(); if ( !v4 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v4 + 72))(v4, 0, v1 + 14); if ( !v1[14] ) return 0; v5 = *(_DWORD *)(dword_AD89DC + 40); if ( !v5 ) return 0; v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))(); if ( !v6 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v6 + 72))(v6, 0, v1 + 13); return v1[13] != 0; } // AD89DC: using guessed type int dword_AD89DC; //----- (00636D90) -------------------------------------------------------- int __thiscall sub_636D90(_DWORD *this) { _DWORD *v1; // edi int result; // eax LONG v3; // eax HDC v4; // ST08_4 int v5; // eax int v6; // esi unsigned int v7; // eax int v8; // edx int v9; // [esp+0h] [ebp-3Ch] struct tagSIZE psizl; // [esp+8h] [ebp-34h] unsigned int v11; // [esp+10h] [ebp-2Ch] int v12; // [esp+14h] [ebp-28h] int v13; // [esp+18h] [ebp-24h] _DWORD *v14; // [esp+1Ch] [ebp-20h] LONG v15; // [esp+20h] [ebp-1Ch] HDC hDC; // [esp+24h] [ebp-18h] struct tagRECT rc; // [esp+28h] [ebp-14h] v1 = this; result = this[13]; if ( result ) { this[15] = 0; this[18] = 0; this[19] = 0; this[20] = 0; (*(void (__stdcall **)(int, HDC *, int))(*(_DWORD *)result + 60))(result, &hDC, v9); SetRect(&rc, 0, 0, 209, 22); FillRect(hDC, &rc, ho); SelectObject(hDC, h); v15 = v1[4]; GetTextExtentPoint32A(hDC, "W", 1, &psizl); v1[20] = psizl.cy; v13 = 0; v14 = v1 + 17; do { v3 = v15; v4 = hDC; *(v14 - 1) = v15; sub_636CA0(v3, &v12, &v11, v4, 0xC8u); if ( !v12 ) break; v15 += v12; *v14 = v12; if ( v1[18] < v11 ) v1[18] = v11; v5 = v13; ++v1[15]; ++v14; v13 = v5 + 1; } while ( (unsigned int)(v5 + 1) < 1 ); v6 = v1[18]; v7 = (unsigned int)(209 - v6) >> 1; v8 = v1[15] * (v1[20] + 1) - 1; v1[21] = v7; v1[22] = 16 - v8; v1[23] = v7 - 1; v1[25] = v6 + v7; v1[26] = 16; v1[19] = v8; v1[24] = 16 - v8 - 1; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[13] + 64))(v1[13]); } return result; } // 636D90: could not find valid save-restore pair for ebx //----- (00636EE0) -------------------------------------------------------- void __thiscall sub_636EE0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ebx int v4; // ecx int v5; // eax int v6; // edx int v7; // edi char *v8; // esi bool v9; // zf unsigned int v10; // eax signed int v11; // ebx signed int v12; // esi _DWORD *v13; // ecx int v14; // eax _DWORD *v15; // ecx int v16; // [esp+Ch] [ebp-38h] int v17; // [esp+10h] [ebp-34h] int v18; // [esp+14h] [ebp-30h] _DWORD *v19; // [esp+18h] [ebp-2Ch] _DWORD *v20; // [esp+1Ch] [ebp-28h] int v21; // [esp+20h] [ebp-24h] char *v22; // [esp+24h] [ebp-20h] _DWORD *v23; // [esp+28h] [ebp-1Ch] char *v24; // [esp+2Ch] [ebp-18h] int v25; // [esp+30h] [ebp-14h] int v26; // [esp+34h] [ebp-10h] int v27; // [esp+38h] [ebp-Ch] int v28; // [esp+3Ch] [ebp-8h] v1 = this; v23 = this; if ( this[13] ) { if ( this[14] ) { v2 = this[13]; v3 = 22; v25 = 0; v26 = 0; v27 = 209; v28 = 22; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v2 + 52))(v2, &v18, &v25, 0) ) { v4 = v1[12]; v25 = v1[11]; v26 = v4; v27 = v25 + 209; v5 = v1[14]; v28 = v4 + 22; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v5 + 52))(v5, &v21, &v25, 0) ) { v6 = (int)v22; v20 = v19; v17 = v21 - 836; v16 = v18 - 836; v24 = v22; do { memset(v24, 0, 0x344u); v24 += v21; --v3; } while ( v3 ); v7 = (int)v23; v8 = (char *)(v6 + v21 * (v1[24] - 1) + 4 * v1[23] - 12); v9 = v23[19] == -4; v24 = v8; if ( !v9 ) { do { memset32(v24, 2147483648, *(_DWORD *)(v7 + 72) + 8); v8 += v21; ++v3; v10 = v23[19] + 4; v24 = v8; v7 = (int)v23; } while ( v3 < v10 ); } v11 = 22; do { v12 = 209; do { v13 = v20; v14 = *v20 & 0xFFFFFF; if ( v14 == 16712191 ) { *(_BYTE *)(v6 + 3) = -128; } else if ( v14 != 16711935 ) { *(_DWORD *)v6 = v14; *(_BYTE *)(v6 + 3) = -1; } v15 = v13 + 1; v6 += 4; --v12; v20 = v15; } while ( v12 ); v6 += v17; --v11; v20 = (_DWORD *)((char *)v15 + v16); } while ( v11 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + 56) + 56))(*(_DWORD *)(v7 + 56)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + 52) + 56))(*(_DWORD *)(v7 + 52)); } } } } } //----- (00637080) -------------------------------------------------------- bool __cdecl sub_637080(float *a1) { float v1; // ST00_4 float v2; // ST04_4 float v3; // ST08_4 float v5; // [esp+14h] [ebp+8h] float v6; // [esp+14h] [ebp+8h] v1 = *(float *)(dword_B66FB0 + 88) - *a1; v2 = *(float *)(dword_B66FB0 + 92) - a1[1]; v3 = *(float *)(dword_B66FB0 + 96) - a1[2]; v5 = v1 * v1 + v2 * v2 + v3 * v3; v6 = sqrt(v5); return v6 <= (double)flt_AB2AEC; } // AB2AEC: using guessed type float flt_AB2AEC; //----- (00637100) -------------------------------------------------------- void __thiscall sub_637100(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // esi v1 = this; *this = &GuildBD::`vftable'; v2 = this[10]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[10] = 0; } v3 = v1[9]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[9] = 0; } operator delete[]((void *)v1[4]); v4 = v1[10]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[9]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } // 9F0E84: using guessed type void *GuildBD::`vftable'; //----- (00637200) -------------------------------------------------------- char __thiscall sub_637200(_DWORD *this, const char *a2, int a3) { int v3; // esi const char *v4; // ecx char v5; // bl _BYTE *v6; // eax void *v7; // eax _BYTE *v8; // edx const char *v9; // ecx char v10; // al v3 = (int)this; if ( a2 && *a2 ) { *(_WORD *)(this[10] + 28) &= 0xFFFEu; v4 = (const char *)this[4]; v5 = 0; if ( !v4 || strcmp(a2, v4) ) v5 = 1; LOBYTE(v6) = a3; if ( *(_DWORD *)(v3 + 4) != a3 || v5 ) { *(_DWORD *)(v3 + 4) = a3; v7 = (void *)strlen(a2); if ( *(_DWORD *)(v3 + 20) < (unsigned int)v7 ) sub_636B30((void **)v3, v7); v8 = *(_BYTE **)(v3 + 16); v9 = a2; do { v10 = *v9; *v8++ = *v9++; } while ( v10 ); LOBYTE(v6) = sub_636D20((_DWORD *)v3); if ( (_BYTE)v6 ) { sub_636D90((_DWORD *)v3); sub_636BA0(v3, (int)a2); sub_636EE0((_DWORD *)v3); LOBYTE(v6) = sub_636B70((_DWORD **)v3); } } } else { v6 = (_BYTE *)this[4]; if ( v6 ) { *v6 = 0; this[15] = 0; } *(_WORD *)(this[10] + 28) |= 1u; } return (char)v6; } //----- (006372F0) -------------------------------------------------------- void __thiscall sub_6372F0(__int16 *this, float a2, int a3, int a4) { __int16 *v4; // esi char *v5; // eax char *v6; // ebx float *v7; // eax double v8; // st7 double v9; // st6 int v10; // eax int v11; // eax double v12; // rt0 float v13; // ST08_4 float v14; // ST04_4 int v15; // ST18_4 _DWORD *v16; // eax int v17; // ST18_4 _DWORD *v18; // eax char *v19; // eax char *v20; // edi const CHAR *v21; // eax char *v22; // eax char *v23; // eax _BYTE *v24; // eax int v25; // eax bool v26; // zf float v27; // ecx int v28; // edx int v29; // [esp+24h] [ebp-1Ch] int v30; // [esp+28h] [ebp-18h] int v31; // [esp+2Ch] [ebp-14h] int v32; // [esp+30h] [ebp-10h] float v33; // [esp+34h] [ebp-Ch] int v34; // [esp+38h] [ebp-8h] float v35; // [esp+3Ch] [ebp-4h] signed int v36; // [esp+4Ch] [ebp+Ch] v4 = this; v5 = sub_664AB0(dword_AD8C90, this[6]); v6 = v5; if ( !v5 ) goto LABEL_31; if ( v5[1924] == 5 ) { LABEL_3: *(_WORD *)(*((_DWORD *)v4 + 9) + 28) |= 1u; return; } v7 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); v35 = sub_636980(byte_ADB468, v7); v8 = v35; if ( v35 <= (double)flt_AB2AEC && *((_DWORD *)v6 + 169) ) { v9 = flt_AB2AF0; if ( flt_AB2AF0 <= v8 ) { if ( flt_AB2AF4 >= v8 ) { v35 = flt_AB2AF4 - v9; if ( 0.0 != v35 ) { v12 = v35; v35 = v8 - v9; v35 = 1.0 - v35 / v12; sub_637930((_DWORD **)v4, v35); } } else { v11 = sub_85C050(*((_DWORD **)v4 + 9), 3); ++*(_DWORD *)(v11 + 88); *(float *)(v11 + 84) = 0.0; } } else { v10 = sub_85C050(*((_DWORD **)v4 + 9), 3); ++*(_DWORD *)(v10 + 88); *(float *)(v10 + 84) = 1.0; } sub_653B10(v6, (float *)&v29); *(float *)&v31 = *(float *)&v31 + 3.0; v13 = (double)(unsigned int)dword_AC2F78; v14 = (double)(unsigned int)xRight; if ( !sub_8F74F0(a3, v14, v13, v29, v30, v31, (int)&v32) ) goto LABEL_3; v15 = *((_DWORD *)v6 + 169); v36 = 0; v16 = (_DWORD *)sub_6D3800(); if ( sub_6D3280(v16, v15) ) { v36 = 2; } else { v17 = *((_DWORD *)v6 + 169); v18 = (_DWORD *)sub_6D3800(); if ( sub_6D3250(v18, v17) ) v36 = 1; } v19 = sub_6D8C50(*((_DWORD *)v6 + 169)); v20 = v19; if ( v19 ) { if ( v6[680] == 1 ) { v21 = sub_40C190(-2036079644); v22 = sub_7549E0("[%s][%s]", v21, v20); sub_637200(v4, v22, 0); } else { v23 = sub_7549E0("[%s]", v19); sub_637200(v4, v23, v36); } } else { v24 = (_BYTE *)*((_DWORD *)v4 + 4); if ( v24 ) { *v24 = 0; *((_DWORD *)v4 + 15) = 0; } *(_WORD *)(*((_DWORD *)v4 + 10) + 28) |= 1u; } *(_WORD *)(*((_DWORD *)v4 + 9) + 28) &= 0xFFFEu; *(float *)&v32 = *(float *)&v32 - 104.0; v33 = v33 - 22.0; if ( v6 == dword_AD8EBC ) v33 = v33 - 8.0; v25 = *((_DWORD *)v4 + 9); v33 = v33 - 17.0; *(float *)(v25 + 88) = *(float *)&v32; *(float *)(v25 + 92) = v33; *(_DWORD *)(v25 + 96) = v34; v26 = *((_BYTE *)v4 + 380) == 0; v27 = v33; v28 = v34; *((float *)v4 + 28) = *(float *)&v32; *((float *)v4 + 29) = v27; *((_DWORD *)v4 + 30) = v28; if ( v26 ) sub_85BED0(*((_DWORD ***)v4 + 9), a2, 1); } else { LABEL_31: *((_BYTE *)v4 + 28) = 0; } } // AB2AEC: using guessed type float flt_AB2AEC; // AB2AF0: using guessed type float flt_AB2AF0; // AB2AF4: using guessed type float flt_AB2AF4; //----- (006375D0) -------------------------------------------------------- int __thiscall sub_6375D0(_DWORD *this, void *a2, unsigned int a3) { _DWORD *v3; // esi void *v4; // ebx unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // ST0C_4 _WORD *v9; // edi _DWORD *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // edi _DWORD *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // edi _DWORD *v16; // eax _DWORD *v17; // edi void *v18; // eax float *v19; // edi int result; // eax v3 = this; v4 = a2; v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); a2 = (void *)(*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 64))(v4); v6 = 22 * (a3 / (v5 / 0xD1)); v7 = 209 * (a3 % (v5 / 0xD1)); v3[12] = v6; v8 = (unsigned int)a2; v3[11] = v7; v9 = sub_8F5E10(v5, v8, v7, v6, 0xD0u, 0x15u); v3[8] = v4; v10 = operator new(0xC4u); a2 = v10; if ( v10 ) { v11 = sub_868C00(v10, (int)v9); a2 = (void *)v11; } else { a2 = 0; v11 = 0; } v12 = (volatile LONG *)v3[9]; if ( v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); v11 = (volatile LONG *)a2; } v3[9] = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v13 = operator new(0xE8u); a2 = v13; if ( v13 ) { v14 = sub_85A1C0(v13, 0); a2 = (void *)v14; } else { a2 = 0; v14 = 0; } v15 = (volatile LONG *)v3[10]; if ( v15 != v14 ) { if ( v15 ) { if ( !InterlockedDecrement(v15 + 1) && v15 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v15)(v15, 1); v14 = (volatile LONG *)a2; } v3[10] = v14; if ( v14 ) InterlockedIncrement(v14 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v3[10] + 116))(v3[9], 0); v16 = operator new(0x44u); a2 = v16; if ( v16 ) v17 = sub_863BB0(v16); else v17 = 0; sub_42AB40(v17, (int)v4); sub_45C760((_DWORD **)v17, 0); v17[7] = 2; sub_470EE0((_DWORD **)v17, 0); a3 = v3[9]; a2 = v17; InterlockedIncrement(v17 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement(v17 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); v18 = operator new(0x60u); a2 = v18; if ( v18 ) v19 = sub_85EBC0((float *)v18); else v19 = 0; ++*((_DWORD *)v19 + 22); v19[17] = 1.0; v19[18] = 1.0; v19[19] = 1.0; a3 = v3[9]; a2 = v19; InterlockedIncrement((volatile LONG *)v19 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement((volatile LONG *)v19 + 1) ) (**(void (__thiscall ***)(float *, signed int))v19)(v19, 1); sub_85C4D0((_DWORD *)v3[9]); result = sub_85BED0((_DWORD **)v3[9], 0.0, 0); *(_WORD *)(v3[9] + 28) |= 1u; return result; } //----- (006378A0) -------------------------------------------------------- int __thiscall sub_6378A0(int this, void *a2, unsigned int a3) { int v3; // esi v3 = this; *(_DWORD *)this = &GuildBD::`vftable'; *(_DWORD *)(this + 36) = 0; *(_DWORD *)(this + 40) = 0; *(_WORD *)(this + 12) = -1; *(_BYTE *)(this + 28) = 1; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 0; *(_DWORD *)(this + 8) = a3; if ( a2 ) sub_6375D0((_DWORD *)this, a2, a3); *(_DWORD *)(v3 + 108) = 0xFFFFFF; *(_DWORD *)(v3 + 4) = 0; *(_BYTE *)(v3 + 380) = 0; return v3; } // 9F0E84: using guessed type void *GuildBD::`vftable'; //----- (00637930) -------------------------------------------------------- int __thiscall sub_637930(_DWORD **this, float a2) { int result; // eax result = sub_85C050(this[9], 3); ++*(_DWORD *)(result + 88); *(float *)(result + 84) = a2; return result; } //----- (00637950) -------------------------------------------------------- void *__thiscall sub_637950(void *this, char a2) { void *v2; // esi v2 = this; sub_637100(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006379C0) -------------------------------------------------------- _DWORD *__thiscall sub_6379C0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi int v4; // ebx v1 = this; *this = &IConBD::`vftable'; this[1] = 0; v2 = sub_5D2380(0, 0, 16, 16, 0); v3 = v1[1]; v4 = v2; if ( v3 != v2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[1] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[1] + 256))(0); return v1; } // 9F0EA4: using guessed type void *IConBD::`vftable'; //----- (00637A70) -------------------------------------------------------- void __thiscall sub_637A70(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // edi v1 = this; *this = &IConBD::`vftable'; v2 = this[1]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[1] = 0; } v3 = v1[1]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9F0EA4: using guessed type void *IConBD::`vftable'; //----- (00637B10) -------------------------------------------------------- void __thiscall sub_637B10(_DWORD *this, float a2, int a3, int a4, float a5) { _DWORD *v5; // ecx int v6; // eax float v7; // [esp+10h] [ebp+8h] v5 = (_DWORD *)this[1]; if ( v5 ) { v7 = a2 - 16.0; v6 = sub_5D2120(v5); *(float *)(v6 + 88) = v7; *(_DWORD *)(v6 + 92) = a3; *(_DWORD *)(v6 + 96) = a4; sub_85BED0((_DWORD **)v6, a5, 1); } } //----- (00637B60) -------------------------------------------------------- void *__thiscall sub_637B60(void *this, char a2) { void *v2; // esi v2 = this; sub_637A70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00637C00) -------------------------------------------------------- char __usercall sub_637C00@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5) { const CHAR *v5; // edi struct tagSIZE psizl; // [esp+4h] [ebp-8h] v5 = (const CHAR *)a1; *a2 = 0; *a3 = 0; if ( a1 ) { LOBYTE(a1) = *(_BYTE *)a1; if ( (_BYTE)a1 ) { do { if ( IsDBCSLeadByte(a1) ) { GetTextExtentPoint32A(hdc, v5, 2, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; v5 += 2; *a2 += 2; } else { GetTextExtentPoint32A(hdc, v5, 1, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; ++v5; ++*a2; } *a3 += a1; LOBYTE(a1) = *v5; } while ( *v5 ); } } return a1; } //----- (00637C80) -------------------------------------------------------- bool __thiscall sub_637C80(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v4; // eax int v5; // ecx int v6; // eax v1 = this; v2 = *(_DWORD *)(this[7] + 40); if ( !v2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)v2 + 20))(); if ( !v4 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v4 + 72))(v4, 0, v1 + 12); if ( !v1[12] ) return 0; v5 = *(_DWORD *)(dword_AD89F0 + 40); if ( !v5 ) return 0; v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))(); if ( !v6 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v6 + 72))(v6, 0, v1 + 11); return v1[11] != 0; } // AD89F0: using guessed type int dword_AD89F0; //----- (00637CF0) -------------------------------------------------------- int __thiscall sub_637CF0(_DWORD *this) { _DWORD *v1; // edi int result; // eax int v3; // ecx LONG v4; // eax HDC v5; // ST08_4 int v6; // eax int v7; // esi unsigned int v8; // eax int v9; // edx int v10; // [esp+0h] [ebp-3Ch] int v11; // [esp+8h] [ebp-34h] unsigned int v12; // [esp+Ch] [ebp-30h] struct tagSIZE psizl; // [esp+10h] [ebp-2Ch] int v14; // [esp+18h] [ebp-24h] _DWORD *v15; // [esp+1Ch] [ebp-20h] int v16; // [esp+20h] [ebp-1Ch] HDC hDC; // [esp+24h] [ebp-18h] struct tagRECT rc; // [esp+28h] [ebp-14h] v1 = this; result = this[11]; if ( result ) { this[13] = 0; this[16] = 0; this[17] = 0; this[18] = 0; (*(void (__stdcall **)(int, HDC *, int))(*(_DWORD *)result + 60))(result, &hDC, v10); SetRect(&rc, 0, 0, 279, 22); FillRect(hDC, &rc, dword_AD89E0); SelectObject(hDC, dword_AD89E4); v3 = v1[3]; psizl.cx = 0; psizl.cy = 0; v16 = v3; GetTextExtentPoint32A(hDC, "W", 1, &psizl); v1[18] = psizl.cy; v14 = 0; v15 = v1 + 15; do { v4 = v16; v5 = hDC; *(v15 - 1) = v16; sub_637C00(v4, &v11, &v12, v5, 0x10Eu); if ( !v11 ) break; v16 += v11; *v15 = v11; if ( v1[16] < v12 ) v1[16] = v12; v6 = v14; ++v1[13]; ++v15; v14 = v6 + 1; } while ( (unsigned int)(v6 + 1) < 1 ); v7 = v1[16]; v8 = (unsigned int)(279 - v7) >> 1; v9 = v1[13] * (v1[18] + 1) - 1; v1[19] = v8; v1[20] = 16 - v9; v1[21] = v8 - 1; v1[23] = v7 + v8; v1[24] = 16; v1[17] = v9; v1[22] = 16 - v9 - 1; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[11] + 64))(v1[11]); } return result; } // 637CF0: could not find valid save-restore pair for ebx //----- (00637E40) -------------------------------------------------------- int __usercall sub_637E40@(int a1@, int a2@) { int v2; // edi int v3; // ecx unsigned int v4; // esi int v5; // ebx int v6; // esi int v7; // edx int v8; // edx int v9; // ebx int result; // eax int v11; // [esp+4h] [ebp-11Ch] unsigned int v12; // [esp+8h] [ebp-118h] int c; // [esp+Ch] [ebp-114h] int y; // [esp+10h] [ebp-110h] int x; // [esp+14h] [ebp-10Ch] HDC hdc; // [esp+18h] [ebp-108h] CHAR String; // [esp+1Ch] [ebp-104h] char v18; // [esp+1Dh] [ebp-103h] v2 = a1; if ( *(_DWORD *)(a1 + 44) ) { (*(void (__stdcall **)(_DWORD, HDC *, int))(**(_DWORD **)(a1 + 44) + 60))(*(_DWORD *)(a1 + 44), &hdc, a2); SetBkMode(hdc, 1); SetTextColor(hdc, *(_DWORD *)(v2 + 100)); SelectObject(hdc, dword_AD89E4); v3 = *(_DWORD *)(v2 + 80); v4 = 0; x = *(_DWORD *)(v2 + 76); y = v3; v12 = 0; if ( *(_DWORD *)(v2 + 52) ) { do { v5 = 0; c = 0; if ( *(_DWORD *)(v2 + 384) ) { if ( !v4 ) { SetTextColor(hdc, 0xFFFFu); String = 0; memset(&v18, 0, 0xFFu); strncpy(&String, *(const char **)(v2 + 56), *(_DWORD *)(v2 + 384)); sub_637C00((LONG)&String, &c, &v11, hdc, 0x10Eu); v5 = c; v6 = x; TextOutA(hdc, x, y, &String, c); x = v11 + v6; v4 = v12; } } SetTextColor(hdc, *(_DWORD *)(v2 + 100)); v7 = *(_DWORD *)(v2 + 4 * v4 + 60); *(_DWORD *)(v2 + 4 * v4 + 56) += *(_DWORD *)(v2 + 384); v8 = v7 - v5; v9 = y; TextOutA(hdc, x, y, *(LPCSTR *)(v2 + 4 * v4++ + 56), v8); y = v9 + *(_DWORD *)(v2 + 72) + 1; v12 = v4; } while ( v4 < *(_DWORD *)(v2 + 52) ); } result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 44) + 64))(*(_DWORD *)(v2 + 44)); } return result; } //----- (00638010) -------------------------------------------------------- void __thiscall sub_638010(_DWORD *this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // ebx int v4; // ecx int v5; // eax int v6; // edx int v7; // edi char *v8; // esi bool v9; // zf unsigned int v10; // eax signed int v11; // esi _DWORD *v12; // ecx int v13; // eax int v14; // eax int v15; // eax _DWORD *v16; // ecx int v17; // [esp+Ch] [ebp-38h] int v18; // [esp+10h] [ebp-34h] int v19; // [esp+14h] [ebp-30h] _DWORD *v20; // [esp+18h] [ebp-2Ch] _DWORD *v21; // [esp+1Ch] [ebp-28h] int v22; // [esp+20h] [ebp-24h] char *v23; // [esp+24h] [ebp-20h] char *v24; // [esp+28h] [ebp-1Ch] _DWORD *v25; // [esp+2Ch] [ebp-18h] int v26; // [esp+30h] [ebp-14h] int v27; // [esp+34h] [ebp-10h] int v28; // [esp+38h] [ebp-Ch] int v29; // [esp+3Ch] [ebp-8h] v1 = this; v25 = this; if ( this[11] ) { if ( this[12] ) { v2 = this[11]; v3 = 22; v26 = 0; v27 = 0; v28 = 279; v29 = 22; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v2 + 52))(v2, &v19, &v26, 0) ) { v4 = v1[10]; v26 = v1[9]; v27 = v4; v28 = v26 + 279; v5 = v1[12]; v29 = v4 + 22; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v5 + 52))(v5, &v22, &v26, 0) ) { v6 = (int)v23; v21 = v20; v18 = v22 - 1116; v17 = v19 - 1116; v24 = v23; do { memset(v24, 0, 0x45Cu); v24 += v22; --v3; } while ( v3 ); v7 = (int)v25; v8 = (char *)(v6 + v22 * (v1[22] - 1) + 4 * v1[21] - 12); v9 = v25[17] == -4; v24 = v8; if ( !v9 ) { do { memset32(v24, 2147483648, *(_DWORD *)(v7 + 64) + 8); v8 += v22; ++v3; v10 = v25[17] + 4; v24 = v8; v7 = (int)v25; } while ( v3 < v10 ); } v25 = (_DWORD *)22; do { v11 = 93; do { v12 = v21; v13 = *v21 & 0xFFFFFF; if ( v13 == 16712191 ) { *(_BYTE *)(v6 + 3) = -128; } else if ( v13 != 16711935 ) { *(_DWORD *)v6 = v13; *(_BYTE *)(v6 + 3) = -1; } v14 = v12[1] & 0xFFFFFF; if ( v14 == 16712191 ) { *(_BYTE *)(v6 + 7) = -128; } else if ( v14 != 16711935 ) { *(_DWORD *)(v6 + 4) = v14; *(_BYTE *)(v6 + 7) = -1; } v15 = v12[2] & 0xFFFFFF; if ( v15 == 16712191 ) { *(_BYTE *)(v6 + 11) = -128; } else if ( v15 != 16711935 ) { *(_DWORD *)(v6 + 8) = v15; *(_BYTE *)(v6 + 11) = -1; } v16 = v12 + 3; v6 += 12; --v11; v21 = v16; } while ( v11 ); v6 += v18; v9 = v25 == (_DWORD *)1; v25 = (_DWORD *)((char *)v25 - 1); v21 = (_DWORD *)((char *)v16 + v17); } while ( !v9 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + 48) + 56))(*(_DWORD *)(v7 + 48)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + 44) + 56))(*(_DWORD *)(v7 + 44)); } } } } } //----- (00638280) -------------------------------------------------------- void __thiscall sub_638280(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // esi v1 = this; *this = &NameBD::`vftable'; v2 = this[8]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[8] = 0; } operator delete[]((void *)v1[3]); sub_637A70(v1 + 27); v3 = v1[8]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9F0EF8: using guessed type void *NameBD::`vftable'; //----- (00638340) -------------------------------------------------------- char __thiscall sub_638340(_DWORD *this, const char *a2) { int v2; // esi const char *v3; // eax int v4; // eax int v5; // edx unsigned int v6; // edi _BYTE *v7; // edx const char *v8; // ecx char v9; // al int v10; // esi v2 = (int)this; if ( a2 && *a2 ) { v3 = (const char *)this[3]; if ( !v3 || strcmp(v3, a2) || (v4 = *(_DWORD *)(v2 + 100), v4 != *(_DWORD *)(v2 + 104)) || *(_DWORD *)(v2 + 392) != *(_DWORD *)(v2 + 384) ) { v5 = *(_DWORD *)(v2 + 100); *(_DWORD *)(v2 + 392) = *(_DWORD *)(v2 + 384); *(_DWORD *)(v2 + 104) = v5; v6 = strlen(a2); if ( *(_DWORD *)(v2 + 16) < v6 ) { operator delete[](*(void **)(v2 + 12)); *(_DWORD *)(v2 + 12) = operator new[](v6 + 1); *(_DWORD *)(v2 + 16) = v6; } v7 = *(_BYTE **)(v2 + 12); v8 = a2; do { v9 = *v8; *v7++ = *v8++; } while ( v9 ); LOBYTE(v4) = sub_637C80((_DWORD *)v2); if ( (_BYTE)v4 ) { sub_637CF0((_DWORD *)v2); sub_637E40(v2, v2); sub_638010((_DWORD *)v2); v4 = *(_DWORD *)(v2 + 44); if ( v4 ) LOBYTE(v4) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(*(_DWORD *)(v2 + 44)); v10 = *(_DWORD *)(v2 + 48); if ( v10 ) LOBYTE(v4) = (*(int (__stdcall **)(int))(*(_DWORD *)v10 + 8))(v10); } } } else { v4 = this[3]; if ( v4 ) { *(_BYTE *)v4 = 0; this[13] = 0; } } return v4; } //----- (006388A0) -------------------------------------------------------- int __thiscall sub_6388A0(_DWORD *this, void *a2, unsigned int a3) { _DWORD *v3; // esi void *v4; // ebx unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // ST08_4 _WORD *v9; // edi _DWORD *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // edi _DWORD *v13; // eax _DWORD *v14; // edi void *v15; // eax float *v16; // edi int result; // eax v3 = this; v4 = a2; v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); a2 = (void *)(*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 64))(v4); v6 = 22 * (a3 / (v5 / 0x117)); v7 = 279 * (a3 % (v5 / 0x117)); v3[10] = v6; v8 = (unsigned int)a2; v3[9] = v7; v9 = sub_8F5E10(v5, v8, v7, v6, 0x116u, 0x15u); v3[7] = v4; v10 = operator new(0xC4u); a2 = v10; if ( v10 ) { v11 = sub_868C00(v10, (int)v9); a2 = (void *)v11; } else { a2 = 0; v11 = 0; } v12 = (volatile LONG *)v3[8]; if ( v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); v11 = (volatile LONG *)a2; } v3[8] = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v13 = operator new(0x44u); a2 = v13; if ( v13 ) v14 = sub_863BB0(v13); else v14 = 0; sub_42AB40(v14, (int)v4); sub_45C760((_DWORD **)v14, 0); v14[7] = 2; sub_470EE0((_DWORD **)v14, 0); a3 = v3[8]; a2 = v14; InterlockedIncrement(v14 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement(v14 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v14)(v14, 1); v15 = operator new(0x60u); a2 = v15; if ( v15 ) v16 = sub_85EBC0((float *)v15); else v16 = 0; ++*((_DWORD *)v16 + 22); v16[17] = 1.0; v16[18] = 1.0; v16[19] = 1.0; a3 = v3[8]; a2 = v16; InterlockedIncrement((volatile LONG *)v16 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement((volatile LONG *)v16 + 1) ) (**(void (__thiscall ***)(float *, signed int))v16)(v16, 1); sub_85C4D0((_DWORD *)v3[8]); result = sub_85BED0((_DWORD **)v3[8], 0.0, 0); *(_WORD *)(v3[8] + 28) |= 1u; return result; } //----- (00639930) -------------------------------------------------------- void *__thiscall sub_639930(void *this, char a2) { void *v2; // esi v2 = this; sub_638280(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00639A00) -------------------------------------------------------- bool __thiscall sub_639A00(int this, float a2) { return *(_BYTE *)(this + 28) && a2 - *(float *)(this + 24) <= flt_AB2B9C; } // AB2B9C: using guessed type float flt_AB2B9C; //----- (00639A90) -------------------------------------------------------- char __usercall sub_639A90@(const CHAR *a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5) { const CHAR *v5; // edi struct tagSIZE psizl; // [esp+4h] [ebp-8h] v5 = a1; *a2 = 0; *a3 = 0; if ( a1 ) { LOBYTE(a1) = *a1; if ( (_BYTE)a1 ) { do { a1 = (const CHAR *)IsDBCSLeadByte((BYTE)a1); if ( a1 ) { GetTextExtentPoint32A(hdc, v5, 2, &psizl); a1 = (const CHAR *)psizl.cx; if ( psizl.cx + *a3 > a5 ) return (char)a1; v5 += 2; *a2 += 2; } else { if ( *v5 == 10 ) { ++*a2; return (char)a1; } GetTextExtentPoint32A(hdc, v5, 1, &psizl); a1 = (const CHAR *)psizl.cx; if ( psizl.cx + *a3 > a5 ) return (char)a1; ++v5; ++*a2; } *a3 += a1; LOBYTE(a1) = *v5; } while ( *v5 ); } } return (char)a1; } //----- (00639B20) -------------------------------------------------------- bool __thiscall sub_639B20(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v4; // eax int v5; // ecx int v6; // eax v1 = this; v2 = *(_DWORD *)(this[8] + 40); if ( !v2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)v2 + 20))(); if ( !v4 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v4 + 72))(v4, 0, v1 + 13); if ( !v1[13] ) return 0; v5 = *(_DWORD *)(dword_AD8A00 + 40); if ( !v5 ) return 0; v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))(); if ( !v6 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v6 + 72))(v6, 0, v1 + 12); return v1[12] != 0; } // AD8A00: using guessed type int dword_AD8A00; //----- (00639B90) -------------------------------------------------------- int __usercall sub_639B90@(_DWORD *a1@, int a2@) { _DWORD *v2; // edi int result; // eax const char *v4; // ebx char *v5; // eax HDC v6; // ST0C_4 int v7; // eax int v8; // edx int v9; // eax int v10; // esi unsigned int v11; // eax int v12; // edx struct tagSIZE psizl; // [esp+8h] [ebp-34h] unsigned int v14; // [esp+10h] [ebp-2Ch] int v15; // [esp+14h] [ebp-28h] int v16; // [esp+18h] [ebp-24h] char *v17; // [esp+1Ch] [ebp-20h] int *v18; // [esp+20h] [ebp-1Ch] HDC hDC; // [esp+24h] [ebp-18h] struct tagRECT rc; // [esp+28h] [ebp-14h] v2 = a1; result = a1[12]; if ( result ) { a1[14] = 0; a1[23] = 0; a1[24] = 0; a1[25] = 0; (*(void (__stdcall **)(int, HDC *, int))(*(_DWORD *)result + 60))(result, &hDC, a2); SetRect(&rc, 0, 0, 228, 81); FillRect(hDC, &rc, dword_AD89F4); SelectObject(hDC, dword_AD89F8); v4 = (const char *)v2[4]; GetTextExtentPoint32A(hDC, "W", 1, &psizl); v2[25] = psizl.cy; v5 = sub_7549E0(0); strcpy(v5, v4); v5[strlen(v5) + 1] = 0; v17 = v5; v15 = 0; v18 = v2 + 19; while ( 1 ) { v6 = hDC; *(v18 - 4) = (int)v5; sub_639A90(v5, &v16, &v14, v6, 0xC8u); v7 = v16; if ( !v16 ) break; v8 = v2[4]; v17 += v16; if ( *(_BYTE *)(v8 + v16 - 1) == 10 ) v7 = v16-- - 1; *v18 = v7; if ( v2[23] < v14 ) v2[23] = v14; v9 = v15; ++v2[14]; ++v18; v15 = v9 + 1; if ( (unsigned int)(v9 + 1) >= 4 ) break; v5 = v17; } v10 = v2[23]; v11 = (unsigned int)(228 - v10) >> 1; v12 = v2[14] * (v2[25] + 1) - 1; v2[26] = v11; v2[27] = 69 - v12; v2[28] = v11 - 5; v2[30] = v11 + v10 + 4; v2[31] = 73; v2[29] = 69 - v12 - 5; v2[23] = v10 + 9; v2[24] = v12 + 9; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[12] + 64))(v2[12]); } return result; } //----- (00639D30) -------------------------------------------------------- void __thiscall sub_639D30(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _BYTE *v3; // edx _DWORD *v4; // eax signed int v5; // ebx signed int v6; // edi _BYTE *v7; // edx _DWORD *v8; // eax signed int v9; // ebx signed int v10; // edi _BYTE *v11; // edx _DWORD *v12; // eax signed int v13; // ebx signed int v14; // edi _BYTE *v15; // edx _DWORD *v16; // eax signed int v17; // ebx signed int v18; // edi int v19; // eax void *v20; // ST18_4 int v21; // eax unsigned int v22; // edx int v23; // ecx _DWORD *v24; // edi int v25; // eax _DWORD *v26; // edx int v27; // eax int v28; // [esp+Ch] [ebp-20h] int v29; // [esp+10h] [ebp-1Ch] unsigned int v30; // [esp+14h] [ebp-18h] int v31; // [esp+18h] [ebp-14h] int v32; // [esp+1Ch] [ebp-10h] int v33; // [esp+20h] [ebp-Ch] int v34; // [esp+24h] [ebp-8h] v1 = this; if ( this[12] ) { v2 = this[12]; v31 = 0; v32 = 0; v33 = 227; v34 = 80; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v2 + 52))(v2, &v28, &v31, 0) ) { v3 = &unk_AB2B5C; v4 = (_DWORD *)(v29 + v28 * (v1[29] - 3) + 4 * v1[28] - 12); v30 = v28 - 16; v5 = 4; do { v6 = 4; do { if ( *v3 == 1 ) { *v4 = 0xFFFFFF; } else if ( *v3 == 2 ) { *v4 = 16712191; } ++v4; ++v3; --v6; } while ( v6 ); v4 = (_DWORD *)((char *)v4 + v30); --v5; } while ( v5 ); v7 = &unk_AB2B6C; v8 = (_DWORD *)(v29 + v28 * v1[31] + 4 * v1[28] - 12); v30 = v28 - 16; v9 = 4; do { v10 = 4; do { if ( *v7 == 1 ) { *v8 = 0xFFFFFF; } else if ( *v7 == 2 ) { *v8 = 16712191; } ++v8; ++v7; --v10; } while ( v10 ); v8 = (_DWORD *)((char *)v8 + v30); --v9; } while ( v9 ); v11 = &unk_AB2B7C; v12 = (_DWORD *)(v29 + v28 * (v1[29] - 3) + 4 * v1[30]); v30 = v28 - 16; v13 = 4; do { v14 = 4; do { if ( *v11 == 1 ) { *v12 = 0xFFFFFF; } else if ( *v11 == 2 ) { *v12 = 16712191; } ++v12; ++v11; --v14; } while ( v14 ); v12 = (_DWORD *)((char *)v12 + v30); --v13; } while ( v13 ); v15 = &unk_AB2B8C; v16 = (_DWORD *)(v29 + v28 * v1[31] + 4 * v1[30]); v30 = v28 - 16; v17 = 4; do { v18 = 4; do { if ( *v15 == 1 ) { *v16 = 0xFFFFFF; } else if ( *v15 == 2 ) { *v16 = 16712191; } ++v16; ++v15; --v18; } while ( v18 ); v16 = (_DWORD *)((char *)v16 + v30); --v17; } while ( v17 ); v19 = v1[28]; v20 = (void *)(v29 + v28 * (v1[29] - 2) + 4 * v19); v30 = v1[30] - v19 + 1; memset32(v20, 0xFFFFFF, v30); v21 = v1[28]; v22 = v1[30] - v21 + 1; v30 = v29 + v28 * (v1[31] + 2) + 4 * v21; memset32((void *)v30, 0xFFFFFF, v22); v23 = v28; v24 = (_DWORD *)(v29 + v28 * v1[29] + 4 * v1[28] - 8); v25 = v1[31] - v1[29] + 1; if ( v1[31] - v1[29] != -1 ) { do { *v24 = 0xFFFFFF; v24 = (_DWORD *)((char *)v24 + v23); --v25; } while ( v25 ); v23 = v28; } v26 = (_DWORD *)(v29 + v23 * v1[29] + 4 * v1[30] + 8); v27 = v1[31] - v1[29] + 1; if ( v1[31] - v1[29] != -1 ) { do { *v26 = 0xFFFFFF; v26 = (_DWORD *)((char *)v26 + v23); --v27; } while ( v27 ); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 56))(v1[12]); } } } //----- (00639FA0) -------------------------------------------------------- void __usercall sub_639FA0(int a1@, int a2@) { int v2; // esi char *v3; // eax int v4; // edi int v5; // ebx int x; // [esp+4h] [ebp-Ch] unsigned int v7; // [esp+8h] [ebp-8h] HDC hdc; // [esp+Ch] [ebp-4h] v2 = a1; if ( *(_DWORD *)(a1 + 48) ) { if ( *(_WORD *)(a1 + 12) != -1 ) { v3 = sub_664AB0(dword_AD8C90, *(_WORD *)(a1 + 12)); if ( v3 ) { if ( dword_AD89FC != v2 ) { *(_DWORD *)(v2 + 4) = 15776401; if ( v3[208] ) *(_DWORD *)(v2 + 4) = 12436211; } (*(void (__stdcall **)(_DWORD, HDC *, int))(**(_DWORD **)(v2 + 48) + 60))(*(_DWORD *)(v2 + 48), &hdc, a2); SetBkMode(hdc, 1); SetTextColor(hdc, *(_DWORD *)(v2 + 4)); SelectObject(hdc, dword_AD89F8); v4 = *(_DWORD *)(v2 + 108); x = *(_DWORD *)(v2 + 104); v7 = 0; if ( *(_DWORD *)(v2 + 56) ) { v5 = v2 + 60; do { TextOutA(hdc, x, v4, *(LPCSTR *)v5, *(_DWORD *)(v5 + 16)); v5 += 4; v4 += *(_DWORD *)(v2 + 100) + 1; ++v7; } while ( v7 < *(_DWORD *)(v2 + 56) ); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 48) + 64))(*(_DWORD *)(v2 + 48)); } } } } // AD89FC: using guessed type int dword_AD89FC; //----- (0063A0A0) -------------------------------------------------------- void __thiscall sub_63A0A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax signed int v3; // ebx int v4; // ecx int v5; // eax int v6; // edx unsigned int v7; // ebx int v8; // eax int v9; // ecx int v10; // eax int v11; // ecx char *v12; // ebx bool v13; // zf signed int v14; // ebx signed int v15; // edi int v16; // eax int v17; // ecx int v18; // [esp+8h] [ebp-40h] int v19; // [esp+Ch] [ebp-3Ch] _DWORD *v20; // [esp+14h] [ebp-34h] int v21; // [esp+1Ch] [ebp-2Ch] _DWORD *v22; // [esp+20h] [ebp-28h] unsigned int v23; // [esp+24h] [ebp-24h] int v24; // [esp+28h] [ebp-20h] char *v25; // [esp+2Ch] [ebp-1Ch] char *v26; // [esp+30h] [ebp-18h] int v27; // [esp+34h] [ebp-14h] int v28; // [esp+38h] [ebp-10h] int v29; // [esp+3Ch] [ebp-Ch] int v30; // [esp+40h] [ebp-8h] v1 = this; if ( this[12] ) { if ( this[13] ) { v2 = this[12]; v3 = 81; v27 = 0; v28 = 0; v29 = 228; v30 = 81; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v2 + 52))(v2, &v21, &v27, 0) ) { v4 = v1[11]; v27 = v1[10]; v28 = v4; v29 = v27 + 228; v5 = v1[13]; v30 = v4 + 81; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v5 + 52))(v5, &v24, &v27, 0) ) { v6 = (int)v25; v20 = v22; v18 = v24 - 912; v19 = v21 - 912; v26 = v25; if ( v25 ) { do { memset(v26, 0, 0x390u); v26 += v24; --v3; } while ( v3 ); v26 = (char *)(v6 + v24 * (v1[29] - 3) + 4 * v1[28]); v7 = 4; do { v23 = v1[23]; memset32(v26, 2147483648, v23); v8 = v24; v26 += v24; --v7; } while ( v7 ); v26 = (char *)(v6 + v24 * (v1[29] + 1) + 4 * v1[28] - 12); if ( v1[24] > 0u ) { do { v23 = v1[23] + 7; memset32(v26, 2147483648, v23); v8 = v24; v26 += v24; ++v7; } while ( v7 < v1[24] ); } v9 = v8 * v1[31]; v10 = v1[28]; v11 = v6 + v9; v12 = (char *)(v11 + 4 * v10); v26 = (char *)(v11 + 4 * v10); v23 = 4; do { memset32(v26, 2147483648, v1[23]); v12 += v24; v13 = v23-- == 1; v26 = v12; } while ( !v13 ); v14 = 81; do { v15 = 228; do { v16 = *v20 & 0xFFFFFF; if ( v16 == 16712191 ) { *(_DWORD *)v6 = 2147483648; *(_BYTE *)(v6 + 3) = -128; } else if ( v16 != 16711935 ) { *(_DWORD *)v6 = v16; *(_BYTE *)(v6 + 3) = -1; } v17 = (int)(v20 + 1); v6 += 4; --v15; ++v20; } while ( v15 ); v6 += v18; --v14; v20 = (_DWORD *)(v19 + v17); } while ( v14 ); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[13] + 56))(v1[13]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 56))(v1[12]); } } } } } } //----- (0063A2A0) -------------------------------------------------------- void __thiscall sub_63A2A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // esi v1 = this; *this = &PrivateStoreBD::`vftable'; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } operator delete[]((void *)v1[4]); v3 = v1[9]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9F0F18: using guessed type void *PrivateStoreBD::`vftable'; //----- (0063A350) -------------------------------------------------------- _BYTE *__userpurge sub_63A350@(int a1@, int a2@, const char *a3) { int v3; // esi unsigned int v4; // kr00_4 _BYTE *v5; // edx const char *v6; // ecx char v7; // al int v8; // eax int v9; // eax _BYTE *result; // eax v3 = a1; if ( a3 && *a3 ) { v4 = strlen(a3); if ( *(_DWORD *)(v3 + 20) < v4 ) { operator delete[](*(void **)(v3 + 16)); *(_DWORD *)(v3 + 16) = operator new[](v4 + 1); *(_DWORD *)(v3 + 20) = v4; } v5 = *(_BYTE **)(v3 + 16); v6 = a3; do { v7 = *v6; *v5++ = *v6++; } while ( v7 ); if ( sub_639B20((_DWORD *)v3) ) { sub_639B90((_DWORD *)v3, (int)a3); sub_639D30((_DWORD *)v3); sub_639FA0(v3, a2); sub_63A0A0((_DWORD *)v3); v8 = *(_DWORD *)(v3 + 48); if ( v8 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 8))(*(_DWORD *)(v3 + 48)); v9 = *(_DWORD *)(v3 + 52); if ( v9 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 8))(*(_DWORD *)(v3 + 52)); } result = (_BYTE *)sprintf((char *)(v3 + 140), "%s", a3); } else { result = *(_BYTE **)(a1 + 16); if ( result ) { *result = 0; *(_DWORD *)(a1 + 56) = 0; } } return result; } // 63A350: could not find valid save-restore pair for edi //----- (0063A430) -------------------------------------------------------- void __thiscall sub_63A430(int this, float a2, int a3, int a4) { int v4; // esi __int16 v5; // ST18_2 char *v6; // eax char *v7; // edi float *v8; // eax double v9; // st7 double v10; // st6 int v11; // eax double v12; // st7 float v13; // ST08_4 float v14; // ST04_4 int v15; // eax float v16; // eax double v17; // st5 int v18; // ecx double v19; // st7 int v20; // edi int v21; // [esp+24h] [ebp-2Ch] int v22; // [esp+28h] [ebp-28h] int v23; // [esp+2Ch] [ebp-24h] float v24; // [esp+30h] [ebp-20h] float v25; // [esp+34h] [ebp-1Ch] float v26; // [esp+38h] [ebp-18h] int v27; // [esp+3Ch] [ebp-14h] float v28; // [esp+40h] [ebp-10h] int v29; // [esp+44h] [ebp-Ch] float v30; // [esp+48h] [ebp-8h] float v31; // [esp+4Ch] [ebp-4h] v4 = this; v5 = *(_WORD *)(this + 12); *(_DWORD *)(this + 4) = 0xFFFFFF; v6 = sub_664AB0(dword_AD8C90, v5); v7 = v6; if ( !v6 ) goto LABEL_28; v8 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 196))(v6); v24 = *(float *)(dword_B66FB0 + 88) - *v8; v25 = *(float *)(dword_B66FB0 + 92) - v8[1]; v26 = *(float *)(dword_B66FB0 + 96) - v8[2]; v30 = v24 * v24 + v25 * v25 + v26 * v26; v30 = sqrt(v30); v31 = v30; v9 = v30; if ( v30 > (double)flt_AB2BA0 ) { LABEL_28: *(_BYTE *)(v4 + 28) = 0; return; } v10 = flt_AB2BA4; if ( flt_AB2BA4 <= v9 ) { if ( flt_AB2BA8 >= v9 ) { v31 = v9 - v10; v30 = flt_AB2BA8 - v10; if ( 0.0 == v30 ) goto LABEL_11; v11 = sub_85C050(*(_DWORD **)(v4 + 36), 3); v12 = 1.0 - v31 / v30; } else { v11 = sub_85C050(*(_DWORD **)(v4 + 36), 3); v12 = 0.0; } } else { v11 = sub_85C050(*(_DWORD **)(v4 + 36), 3); v12 = 1.0; } ++*(_DWORD *)(v11 + 88); *(float *)(v11 + 84) = v12; LABEL_11: sub_653B10(v7, (float *)&v21); *(float *)&v23 = *(float *)&v23 + 3.0; v13 = (double)(unsigned int)dword_AC2F78; v14 = (double)(unsigned int)xRight; if ( sub_8F74F0(a3, v14, v13, v21, v22, v23, (int)&v27) ) { *(_WORD *)(*(_DWORD *)(v4 + 36) + 28) &= 0xFFFEu; *(float *)&v27 = *(float *)&v27 - 114.0; v28 = v28 - 102.0; if ( v7 == dword_AD8EBC ) v28 = v28 - 8.0; v15 = *(_DWORD *)(v4 + 36); *(float *)(v15 + 88) = *(float *)&v27; *(float *)(v15 + 92) = v28; *(_DWORD *)(v15 + 96) = v29; v16 = v28; v17 = *(float *)&v27; v18 = v29; v19 = (double)*(signed int *)(v4 + 112) + *(float *)&v27; *(float *)(v4 + 128) = *(float *)&v27; *(float *)(v4 + 132) = v16; *(_DWORD *)(v4 + 136) = v18; v20 = pt.x; if ( pt.x > (signed int)v19 && pt.x < (signed int)(v17 + (double)*(signed int *)(v4 + 120)) ) { v20 = pt.y; if ( pt.y > (signed int)((double)*(signed int *)(v4 + 116) + v28) && pt.y < (signed int)(v28 + (double)*(signed int *)(v4 + 124)) ) { if ( dword_AD89FC ) { if ( *(float *)(dword_AD89FC + 136) > (double)*(float *)(v4 + 136) ) { dword_AD89FC = v4; *(_BYTE *)(v4 + 396) = 1; } } else { dword_AD89FC = v4; *(_BYTE *)(v4 + 396) = 1; } } } sub_85BED0(*(_DWORD ***)(v4 + 36), a2, 1); if ( *(_BYTE *)(v4 + 396) ) { if ( dword_AD89FC != v4 ) { sub_63A350(v4, v20, (const char *)(v4 + 140)); *(_BYTE *)(v4 + 396) = 0; } } } else { *(_WORD *)(*(_DWORD *)(v4 + 36) + 28) |= 1u; } } // AB2BA0: using guessed type float flt_AB2BA0; // AB2BA4: using guessed type float flt_AB2BA4; // AB2BA8: using guessed type float flt_AB2BA8; // AD89FC: using guessed type int dword_AD89FC; //----- (0063A710) -------------------------------------------------------- int __thiscall sub_63A710(_DWORD *this, void *a2, unsigned int a3) { _DWORD *v3; // esi void *v4; // edi unsigned int v5; // ebx unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // ST08_4 _WORD *v9; // ebx _DWORD *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // ebx _DWORD *v13; // eax _DWORD *v14; // ebx void *v15; // eax float *v16; // edi int result; // eax v3 = this; v4 = a2; v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); a2 = (void *)(*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 64))(v4); v6 = 81 * (a3 / (v5 / 0xE4)); v7 = 228 * (a3 % (v5 / 0xE4)); v3[11] = v6; v8 = (unsigned int)a2; v3[10] = v7; v9 = sub_8F5E10(v5, v8, v7, v6, 0xE4u, 0x51u); v3[8] = v4; v10 = operator new(0xC4u); a2 = v10; if ( v10 ) { v11 = sub_868C00(v10, (int)v9); a2 = (void *)v11; } else { a2 = 0; v11 = 0; } v12 = (volatile LONG *)v3[9]; if ( v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); v11 = (volatile LONG *)a2; } v3[9] = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v13 = operator new(0x44u); a2 = v13; if ( v13 ) v14 = sub_863BB0(v13); else v14 = 0; sub_42AB40(v14, (int)v4); sub_45C760((_DWORD **)v14, 0); v14[7] = 2; a3 = v3[9]; a2 = v14; InterlockedIncrement(v14 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement(v14 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v14)(v14, 1); v15 = operator new(0x60u); a2 = v15; if ( v15 ) v16 = sub_85EBC0((float *)v15); else v16 = 0; ++*((_DWORD *)v16 + 22); v16[17] = 1.0; v16[18] = 1.0; v16[19] = 1.0; a3 = v3[9]; a2 = v16; InterlockedIncrement((volatile LONG *)v16 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement((volatile LONG *)v16 + 1) ) (**(void (__thiscall ***)(float *, signed int))v16)(v16, 1); sub_85C4D0((_DWORD *)v3[9]); result = sub_85BED0((_DWORD **)v3[9], 0.0, 0); *(_WORD *)(v3[9] + 28) |= 1u; return result; } //----- (0063A950) -------------------------------------------------------- int __thiscall sub_63A950(int this, void *a2, unsigned int a3) { int v3; // esi v3 = this; *(_DWORD *)this = &PrivateStoreBD::`vftable'; *(_DWORD *)(this + 36) = 0; *(float *)(this + 24) = 0.0; *(_WORD *)(this + 12) = -1; *(_BYTE *)(this + 28) = 1; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 0; *(_DWORD *)(this + 8) = a3; if ( a2 ) sub_63A710((_DWORD *)this, a2, a3); *(_DWORD *)(v3 + 4) = 0xFFFFFF; *(_BYTE *)(v3 + 396) = 0; return v3; } // 9F0F18: using guessed type void *PrivateStoreBD::`vftable'; //----- (0063A9E0) -------------------------------------------------------- void *__thiscall sub_63A9E0(void *this, char a2) { void *v2; // esi v2 = this; sub_63A2A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0063AA10) -------------------------------------------------------- int __thiscall sub_63AA10(char *this) { return (int)(this + 260); } //----- (0063AA20) -------------------------------------------------------- void __thiscall sub_63AA20(int this) { sub_85FB50(*(float **)(this + 24), *(_DWORD *)this, (_DWORD *)(this + 100), 0); } //----- (0063AA40) -------------------------------------------------------- Concurrency::details::HardwareAffinity *__thiscall sub_63AA40(_DWORD *this, __int16 a2) { _DWORD *v2; // esi Concurrency::details::HardwareAffinity *v3; // edi v2 = (_DWORD *)this[62]; if ( !v2 ) return 0; while ( 1 ) { v3 = (Concurrency::details::HardwareAffinity *)v2[2]; v2 = (_DWORD *)*v2; if ( Concurrency::details::HardwareAffinity::GetGroup(v3) == a2 ) break; if ( !v2 ) return 0; } return v3; } //----- (0063AA80) -------------------------------------------------------- Concurrency::details::HardwareAffinity *__thiscall sub_63AA80(_DWORD *this, float *a2) { _DWORD *v2; // esi Concurrency::details::HardwareAffinity *v3; // ebx float *v4; // eax _DWORD *v5; // esi float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 Concurrency::details::HardwareAffinity *v9; // edi __int16 v10; // ax char *v11; // eax float *v12; // eax float v13; // ST28_4 float v15; // [esp+8h] [ebp-1Ch] float v16; // [esp+Ch] [ebp-18h] float v17; // [esp+10h] [ebp-14h] float v18; // [esp+14h] [ebp-10h] float v19; // [esp+18h] [ebp-Ch] float v20; // [esp+1Ch] [ebp-8h] float v21; // [esp+2Ch] [ebp+8h] v2 = this; v3 = 0; v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v20 = v4[2]; v18 = *v4; v19 = v4[1]; v5 = (_DWORD *)v2[62]; v6 = *v4 - *a2; v7 = v19 - a2[1]; v8 = v20 - a2[2]; v21 = v7 * v7 + v6 * v6 + v8 * v8; while ( v5 ) { v9 = (Concurrency::details::HardwareAffinity *)v5[2]; v5 = (_DWORD *)*v5; if ( v9 ) { v10 = Concurrency::details::HardwareAffinity::GetGroup(v9); v11 = sub_664AB0(dword_AD8C90, v10); if ( v11 ) { v12 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v11 + 196))(v11); v15 = v18 - *v12; v16 = v19 - v12[1]; v17 = v20 - v12[2]; v13 = v16 * v16 + v15 * v15 + v17 * v17; if ( v13 > (double)v21 ) { v21 = v16 * v16 + v15 * v15 + v17 * v17; v3 = v9; } } } } return v3; } //----- (0063AB90) -------------------------------------------------------- char __thiscall sub_63AB90(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // esi int v8; // esi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi v2 = a2; v3 = this; v4 = (_DWORD *)this[62]; v5 = this + 61; if ( v4 ) { while ( 1 ) { v6 = v4 + 2; v7 = v4; v4 = (_DWORD *)*v4; if ( a2 == (_DWORD *)*v6 ) break; if ( !v4 ) goto LABEL_4; } } else { LABEL_4: v7 = 0; } a2 = v7; if ( v7 ) sub_403620(v5, &a2); v8 = *(_DWORD *)v3[3]; v9 = sub_634B60(v2); (*(void (__thiscall **)(_DWORD, _DWORD **, int))(v8 + 120))(v3[3], &a2, v9); if ( a2 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v10 ) (**v10)(v10, 1); } } if ( v2 ) (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); return 1; } //----- (0063AC30) -------------------------------------------------------- void __thiscall sub_63AC30(_DWORD *this) { int v1; // esi _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx int v6; // edx int v7; // esi int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] _DWORD *v12; // [esp+10h] [ebp-4h] v1 = (int)this; v2 = (_DWORD *)this[62]; v12 = this; if ( v2 ) { while ( 1 ) { v3 = (_DWORD *)v2[2]; v4 = *(_DWORD **)(v1 + 248); v2 = (_DWORD *)*v2; if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = (int)v4; v4 = (_DWORD *)*v4; if ( v3 == (_DWORD *)*v5 ) break; if ( !v4 ) goto LABEL_7; } } else { LABEL_7: v6 = 0; } v11 = v6; if ( v6 ) sub_403620((_DWORD *)(v1 + 244), (_DWORD **)&v11); v7 = **(_DWORD **)(v1 + 12); v8 = sub_634B60(v3); (*(void (__thiscall **)(_DWORD, int *, int))(v7 + 120))(v12[3], &v10, v8); if ( v10 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } if ( v3 ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); if ( !v2 ) break; v1 = (int)v12; } } } //----- (0063AD20) -------------------------------------------------------- int __thiscall sub_63AD20(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi v1 = this; sub_63ECB0((int)this, (signed int)this); sub_63AC30(v1); sub_63FE40(v1 + 65); nullsub_48(v1); sub_63E2A0(v1); result = sub_63D900((int)v1, (signed int)v1); v3 = v1[6]; if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result && v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[6] = 0; } *v1 = 0; return result; } // 63D9B0: using guessed type int __thiscall nullsub_48(_DWORD); //----- (0063AD90) -------------------------------------------------------- int __thiscall sub_63AD90(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_63ECA0(); sub_63AC30(v1); nullsub_20(v1); sub_63E290(v1); return sub_63D570(v1); } // 63D570: using guessed type int __thiscall sub_63D570(_DWORD); // 63D9C0: using guessed type int __thiscall nullsub_20(_DWORD); // 63E290: using guessed type int __thiscall sub_63E290(_DWORD); // 63ECA0: using guessed type int sub_63ECA0(void); //----- (0063ADC0) -------------------------------------------------------- char __thiscall sub_63ADC0(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // edi int v4; // ebx float *v5; // ecx char result; // al v2 = this; v3 = 510; v4 = 14; if ( a2 == 1 ) { v3 = 1020; v4 = 42; } sub_63AC30(this); v5 = (float *)(v2 + 65); if ( a2 == 1 ) { if ( !sub_63FA70(v5, v3, v4, 10, 100) ) return 0; *((_BYTE *)v2 + 368) = 1; v2[91] = 0; result = 1; } else { if ( !sub_63FA70(v5, v3, v4, 0, 190) ) return 0; *((_BYTE *)v2 + 368) = 0; v2[91] = 2063597568; result = 1; } return result; } //----- (0063AE60) -------------------------------------------------------- char __thiscall sub_63AE60(_DWORD *this, int a2, float *a3, int a4) { _DWORD *v4; // ebx Concurrency::details::HardwareAffinity *v5; // eax _DWORD *v6; // esi Concurrency::details::HardwareAffinity *v7; // edi _DWORD *v8; // eax Concurrency::details::HardwareAffinity *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // ecx Concurrency::details::HardwareAffinity *v14; // esi v4 = this; LOBYTE(v5) = sub_63F4A0(this + 65); if ( (_BYTE)v5 ) { LABEL_4: v6 = (_DWORD *)v4[62]; if ( v6 ) { while ( 1 ) { v7 = (Concurrency::details::HardwareAffinity *)v6[2]; v6 = (_DWORD *)*v6; LOWORD(v5) = Concurrency::details::HardwareAffinity::GetGroup(v7); if ( (_WORD)v5 == (_WORD)a2 ) break; if ( !v6 ) goto LABEL_7; } } else { LABEL_7: v7 = 0; } if ( v7 ) return (char)v5; if ( a4 ) { if ( a4 == 1 ) { v10 = operator new(0x20u); if ( v10 ) { v9 = (Concurrency::details::HardwareAffinity *)sub_63C2D0(v10); goto LABEL_19; } } else { if ( a4 != 2 ) { LABEL_20: v12 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v4[61] + 4))(v4 + 61); v12[2] = v7; *v12 = 0; v12[1] = v4[63]; v13 = (_DWORD *)v4[63]; if ( v13 ) *v13 = v12; else v4[62] = v12; ++v4[64]; v4[63] = v12; (*(void (__thiscall **)(Concurrency::details::HardwareAffinity *, int, _DWORD *))(*(_DWORD *)v7 + 4))( v7, a2, v4 + 65); v5 = (Concurrency::details::HardwareAffinity *)sub_634B60(v7); v14 = v5; if ( v5 ) { (*(void (__stdcall **)(Concurrency::details::HardwareAffinity *, signed int))(*(_DWORD *)v4[3] + 116))( v5, 1); sub_85C4D0(v14); sub_85C6F0(v14); LOBYTE(v5) = sub_85BED0((_DWORD **)v14, 0.0, 1); } return (char)v5; } v8 = operator new(0x20u); if ( v8 ) { v9 = (Concurrency::details::HardwareAffinity *)sub_63C2F0(v8); LABEL_19: v7 = v9; goto LABEL_20; } } } else { v11 = operator new(0x38u); if ( v11 ) { v9 = (Concurrency::details::HardwareAffinity *)sub_63C260(v11); goto LABEL_19; } } v9 = 0; goto LABEL_19; } while ( 1 ) { v5 = sub_63AA80(v4, a3); if ( !v5 ) return (char)v5; sub_63AB90(v4, v5); LOBYTE(v5) = sub_63F4A0(v4 + 65); if ( (_BYTE)v5 ) goto LABEL_4; } } //----- (0063B020) -------------------------------------------------------- bool __thiscall sub_63B020(void **this) { void **v1; // esi _DWORD *v2; // eax volatile LONG *v3; // ebx volatile LONG *v4; // edi _DWORD *v5; // eax _DWORD *v6; // edi _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // eax void (__thiscall *v17)(_DWORD *, _DWORD *, _DWORD); // edx _DWORD *v18; // ST40_4 _DWORD *v19; // ebx int v20; // edi int v21; // ecx int v22; // eax _DWORD *v23; // eax int v24; // edi __int16 v25; // cx void *v26; // eax float *v27; // edi _DWORD *v28; // ecx int v29; // eax bool result; // al void *v31; // [esp+64h] [ebp-14h] _DWORD *v32; // [esp+68h] [ebp-10h] int v33; // [esp+74h] [ebp-4h] v1 = this; v2 = operator new(0x130u); v31 = v2; v3 = 0; v33 = 0; if ( v2 ) v3 = sub_911260(v2); v4 = (volatile LONG *)v1[6]; v33 = -1; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); v1[6] = (void *)v3; if ( v3 ) InterlockedIncrement(v3 + 1); } *v1 = (void *)*((_DWORD *)v1[6] + 74); v5 = operator new(0xECu); v31 = v5; v33 = 1; if ( v5 ) v6 = sub_861B30(v5); else v6 = 0; v6[58] = 0; v7 = operator new(0xE8u); v31 = v7; v33 = 2; if ( v7 ) v8 = sub_85A1C0(v7, 0); else v8 = 0; v1[1] = v8; v9 = operator new(0xE8u); v31 = v9; v33 = 3; if ( v9 ) v10 = sub_85A1C0(v9, 0); else v10 = 0; v1[3] = v10; v11 = operator new(0xE8u); v31 = v11; v33 = 4; if ( v11 ) v12 = sub_85A1C0(v11, 0); else v12 = 0; v1[4] = v12; v13 = operator new(0xE8u); v31 = v13; v33 = 5; if ( v13 ) v14 = sub_85A1C0(v13, 0); else v14 = 0; v1[2] = v14; v15 = operator new(0xE8u); v31 = v15; v33 = 6; if ( v15 ) v16 = sub_85A1C0(v15, 0); else v16 = 0; v1[5] = v16; v17 = *(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v6 + 116); v18 = v1[1]; v33 = -1; v17(v6, v18, 0); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*v6 + 116))(v6, v1[3], 0); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*v6 + 116))(v6, v1[4], 0); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*v6 + 116))(v6, v1[2], 0); (*(void (__thiscall **)(_DWORD *, void *, _DWORD))(*v6 + 116))(v6, v1[5], 0); (*(void (__stdcall **)(_DWORD *, _DWORD))(*(_DWORD *)*v1 + 116))(v6, 0); v19 = v1[6]; v20 = v19[75]; v21 = dword_BA46D0; v32 = (_DWORD *)dword_BA46D0; if ( v20 != dword_BA46D0 ) { if ( v20 ) { if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = (int)v32; } v19[75] = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); } v22 = sub_85C050(*v1, 11); *(_WORD *)(v22 + 28) = *(_WORD *)(v22 + 28) & 0xFFFE | 2; v23 = operator new(0x20u); v24 = (int)v23; v31 = v23; v33 = 7; if ( v23 ) { sub_85B2B0(v23); *(_DWORD *)v24 = &NiAlphaProperty::`vftable'; *(_WORD *)(v24 + 28) = 236; *(_BYTE *)(v24 + 30) = 0; } else { v24 = 0; } v25 = *(_WORD *)(v24 + 28) & 0xFBFF | 0x1A01; *(_BYTE *)(v24 + 30) = 10; *(_WORD *)(v24 + 28) = v25; v31 = *v1; v32 = (_DWORD *)v24; InterlockedIncrement((volatile LONG *)(v24 + 4)); v33 = 8; sub_8A6330((_DWORD *)v31 + 39, (int *)&v32); v33 = -1; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v26 = operator new(0x60u); v31 = v26; v33 = 9; if ( v26 ) v27 = sub_85EBC0((float *)v26); else v27 = 0; ++*((_DWORD *)v27 + 22); v27[17] = 1.0; v27[18] = 1.0; v27[19] = 1.0; v28 = *v1; v33 = -1; v29 = sub_85C050(v28, 3); sub_4EAA40(*v1, v29); v32 = *v1; v31 = v27; InterlockedIncrement((volatile LONG *)v27 + 1); v33 = 10; sub_8A6330(v32 + 39, (int *)&v31); v33 = -1; if ( !InterlockedDecrement((volatile LONG *)v27 + 1) ) (**(void (__thiscall ***)(float *, signed int))v27)(v27, 1); sub_85C4D0(*v1); sub_85C6F0(*v1); sub_85BED0((_DWORD **)*v1, 0.0, 1); sub_9117C0((float *)v1[6]); sub_85BED0((_DWORD **)v1[6], 0.0, 1); if ( sub_63E340(v1) && sub_63ADC0(v1, byte_B9202B) && sub_63D9A0() ) result = sub_63DA90(v1) != 0; else result = 0; return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // B9202B: using guessed type char byte_B9202B; // BA46D0: using guessed type int dword_BA46D0; //----- (0063B470) -------------------------------------------------------- char __thiscall sub_63B470(_DWORD *this, float a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // esi _DWORD *v5; // edi _DWORD *v6; // eax int v7; // edi _DWORD *v8; // esi Concurrency::details::HardwareAffinity *v9; // ebx int v10; // esi float *v11; // eax _DWORD *v12; // eax int v13; // ebx _DWORD *v14; // esi Concurrency::details::HardwareAffinity *v15; // edi int *i; // eax int *v17; // ebx unsigned __int16 *v18; // edi _DWORD *v19; // esi Concurrency::details::HardwareAffinity *v20; // edi int *v21; // ecx int **j; // esi int (__stdcall *v23)(_DWORD, int, _DWORD); // edx __int16 v25; // [esp+8h] [ebp-1Ch] __int16 v26; // [esp+18h] [ebp-Ch] __int16 v27; // [esp+18h] [ebp-Ch] unsigned __int16 v28; // [esp+18h] [ebp-Ch] _DWORD *v29; // [esp+1Ch] [ebp-8h] _DWORD *v30; // [esp+1Ch] [ebp-8h] unsigned __int16 *v31; // [esp+1Ch] [ebp-8h] _DWORD *v32; // [esp+20h] [ebp-4h] v3 = this; v4 = (_DWORD *)this[62]; v32 = this; while ( v4 ) { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v5 + 12))(v5) ) sub_63AB90(v3, v5); } v6 = (_DWORD *)dword_AD8CCC; if ( dword_AD8CCC ) { while ( 1 ) { v7 = v6[2]; v29 = (_DWORD *)*v6; if ( v7 ) { v8 = (_DWORD *)v3[62]; v26 = *(_WORD *)(v7 + 548); if ( !v8 ) goto LABEL_14; while ( 1 ) { v9 = (Concurrency::details::HardwareAffinity *)v8[2]; v8 = (_DWORD *)*v8; if ( Concurrency::details::HardwareAffinity::GetGroup(v9) == v26 ) break; if ( !v8 ) goto LABEL_14; } if ( !v9 ) { LABEL_14: v25 = *(_WORD *)(v7 + 548); if ( *(_BYTE *)(v7 + 1924) == 5 ) { if ( !sub_63DA50(v32, v25) ) sub_63DDD0(v32, *(_WORD *)(v7 + 548)); } else if ( sub_6351B0(v25) ) { v10 = *(unsigned __int16 *)(v7 + 548); v11 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 196))(v7); sub_63AE60(v32, v10, v11, 0); } } } if ( !v29 ) break; v6 = v29; v3 = v32; } } v12 = (_DWORD *)dword_ADA1E4; if ( dword_ADA1E4 ) { while ( 1 ) { v13 = v12[2]; v30 = (_DWORD *)*v12; if ( v13 ) { v14 = (_DWORD *)v32[62]; v27 = *(_WORD *)(v13 + 6); if ( !v14 ) goto LABEL_29; while ( 1 ) { v15 = (Concurrency::details::HardwareAffinity *)v14[2]; v14 = (_DWORD *)*v14; if ( Concurrency::details::HardwareAffinity::GetGroup(v15) == v27 ) break; if ( !v14 ) goto LABEL_29; } if ( !v15 ) { LABEL_29: if ( sub_635410(*(_WORD *)(v13 + 6)) ) sub_63AE60(v32, *(unsigned __int16 *)(v13 + 6), (float *)(*(_DWORD *)(v13 + 12) + 88), 1); } } if ( !v30 ) break; v12 = v30; } } LOBYTE(i) = (_BYTE)dword_B9E1D0; v17 = *(int **)dword_B9E1D0; while ( v17 != dword_B9E1D0 ) { v18 = (unsigned __int16 *)v17[4]; v31 = v18; if ( v18 ) { v19 = (_DWORD *)v32[62]; v28 = *v18; if ( v19 ) { while ( 1 ) { v20 = (Concurrency::details::HardwareAffinity *)v19[2]; v19 = (_DWORD *)*v19; LOWORD(i) = Concurrency::details::HardwareAffinity::GetGroup(v20); if ( (_WORD)i == v28 ) break; if ( !v19 ) goto LABEL_39; } if ( v20 ) goto LABEL_42; LABEL_39: v18 = v31; } LOBYTE(i) = sub_635B70(*v18); if ( (_BYTE)i ) LOBYTE(i) = sub_63AE60(v32, *v18, (float *)(*((_DWORD *)v18 + 9) + 140), 2); } LABEL_42: if ( !*((_BYTE *)v17 + 21) ) { v21 = (int *)v17[2]; if ( *((_BYTE *)v21 + 21) ) { for ( i = (int *)v17[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v17 != (int *)i[2] ) break; v17 = i; } v17 = i; } else { i = (int *)*v21; if ( !*(_BYTE *)(*v21 + 21) ) { do { v21 = i; i = (int *)*i; } while ( !*((_BYTE *)i + 21) ); } v17 = v21; } } } for ( j = (int **)v32[62]; j; LOBYTE(i) = v23(LODWORD(a2), a3, v32[6]) ) { v23 = *(int (__stdcall **)(_DWORD, int, _DWORD))(*j[2] + 8); j = (int **)*j; } return (char)i; } // AD8CCC: using guessed type int dword_AD8CCC; // ADA1E4: using guessed type int dword_ADA1E4; //----- (0063B700) -------------------------------------------------------- int __thiscall sub_63B700(_DWORD *this, float a2, int a3) { _DWORD ***v3; // esi char *v4; // eax char *v5; // eax v3 = (_DWORD ***)this; dword_AD89FC = 0; dword_AD89EC = 0; dword_AD89E8 = 0; sub_63B470(this, a2, a3); sub_63E1F0(v3, 0.0, a3); if ( dword_AD89EC ) { v4 = sub_664AB0(dword_AD8C90, *(_WORD *)(dword_AD89EC + 8)); if ( v4 ) { if ( v4[1924] == 5 ) { *(_DWORD *)(dword_AD89EC + 100) = &loc_808080; sub_638340((_DWORD *)dword_AD89EC, (const char *)(dword_AD89EC + 128)); } } } if ( dword_AD89FC ) { v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(dword_AD89FC + 12)); if ( v5 ) { if ( v5[1924] == 5 ) { *(_DWORD *)(dword_AD89FC + 4) = &loc_808080; sub_63A350(dword_AD89FC, a3, (const char *)(dword_AD89FC + 140)); } } } sub_63EC00(v3, a2, a3); nullsub_21(LODWORD(a2), a3); sub_85BED0(*v3, a2, 1); return sub_85BED0(v3[6], a2, 1); } // 63D9D0: using guessed type _DWORD __stdcall nullsub_21(_DWORD, _DWORD); // AD89E8: using guessed type int dword_AD89E8; // AD89EC: using guessed type int dword_AD89EC; // AD89FC: using guessed type int dword_AD89FC; //----- (0063B810) -------------------------------------------------------- LONG __thiscall sub_63B810(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi _DWORD *v4; // ebx _DWORD *v5; // ST10_4 int v6; // edi int v7; // edi _DWORD *v8; // ebx _DWORD *v9; // ST10_4 int *v10; // ecx int v11; // edi _DWORD *v12; // ebx _DWORD *v13; // ST10_4 int v14; // edi int v15; // edi _DWORD *v16; // ebx _DWORD *v17; // ST10_4 int v18; // edi int v19; // edi _DWORD *v20; // ebx LONG result; // eax _DWORD *v22; // ST10_4 int v23; // esi v1 = this; v2 = this[104]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = (int)(v1 + 100); v1[100] = &PgTList::`vftable'; v4 = (_DWORD *)v1[101]; while ( v4 ) { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v3 + 8))(v1 + 100, v5); } v1[103] = 0; v1[101] = 0; v1[102] = 0; *(_DWORD *)v3 = &NiTListBase,GuildBD *>::`vftable'; v6 = v1[97]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = (int)(v1 + 93); v1[93] = &PgTList::`vftable'; v8 = (_DWORD *)v1[94]; while ( v8 ) { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v7 + 8))(v1 + 93, v9); } v1[96] = 0; v1[94] = 0; v1[95] = 0; *(_DWORD *)v7 = &NiTListBase,PrivateStoreBD *>::`vftable'; v10 = (int *)v1[76]; if ( v10 ) { sub_467720(v10, (int *)v1[77]); operator delete((void *)v1[76]); } v11 = (int)(v1 + 61); v1[76] = 0; v1[77] = 0; v1[78] = 0; v1[61] = &PgTList::`vftable'; v12 = (_DWORD *)v1[62]; while ( v12 ) { v13 = v12; v12 = (_DWORD *)*v12; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v11 + 8))(v1 + 61, v13); } v1[64] = 0; v1[62] = 0; v1[63] = 0; *(_DWORD *)v11 = &NiTListBase,CharScreenBoardBase *>::`vftable'; sub_85F7E0(v1 + 25); operator delete[]((void *)v1[21]); v14 = v1[18]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = (int)(v1 + 14); v1[14] = &PgTList::`vftable'; v16 = (_DWORD *)v1[15]; while ( v16 ) { v17 = v16; v16 = (_DWORD *)*v16; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v15 + 8))(v1 + 14, v17); } v1[17] = 0; v1[15] = 0; v1[16] = 0; *(_DWORD *)v15 = &NiTListBase,NameBD *>::`vftable'; v18 = v1[11]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = (int)(v1 + 7); v1[7] = &PgTList::`vftable'; v20 = (_DWORD *)v1[8]; result = 0; if ( v20 ) { do { v22 = v20; v20 = (_DWORD *)*v20; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v19 + 8))(v1 + 7, v22); } while ( v20 ); result = 0; } v1[10] = 0; v1[8] = 0; v1[9] = 0; *(_DWORD *)v19 = &NiTListBase,SpeechBD *>::`vftable'; v23 = v1[6]; if ( v23 ) { result = InterlockedDecrement((volatile LONG *)(v23 + 4)); if ( !result ) { if ( v23 ) result = (**(int (__thiscall ***)(int, signed int))v23)(v23, 1); } } return result; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; // 9F0FD4: using guessed type void *PgTList::`vftable'; // 9F0FE4: using guessed type void *PgTList::`vftable'; // 9F0FF4: using guessed type void *PgTList::`vftable'; // 9F1004: using guessed type void *PgTList::`vftable'; // 9F1014: using guessed type void *PgTList::`vftable'; //----- (0063BAB0) -------------------------------------------------------- _DWORD *__thiscall sub_63BAB0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx v1 = this; this[6] = 0; this[10] = 0; this[8] = 0; this[9] = 0; this[7] = &PgTList::`vftable'; this[11] = 0; this[17] = 0; this[15] = 0; this[16] = 0; this[14] = &PgTList::`vftable'; this[18] = 0; v2 = this + 21; *v2 = 0; v2[1] = 0; v2[2] = 0; v2[3] = 1024; sub_85F230(this + 21, 0x400u); sub_85F910(v1 + 25, (int)v2); v1[64] = 0; v1[62] = 0; v1[63] = 0; v1[61] = &PgTList::`vftable'; sub_63F990(v1 + 65); v1[96] = 0; v1[94] = 0; v1[95] = 0; v1[93] = &PgTList::`vftable'; v1[97] = 0; v1[103] = 0; v1[101] = 0; v1[102] = 0; v1[100] = &PgTList::`vftable'; v1[104] = 0; v1[12] = 0; v1[13] = 0; v1[107] = 40; return v1; } // 9F0FD4: using guessed type void *PgTList::`vftable'; // 9F0FE4: using guessed type void *PgTList::`vftable'; // 9F0FF4: using guessed type void *PgTList::`vftable'; // 9F1004: using guessed type void *PgTList::`vftable'; // 9F1014: using guessed type void *PgTList::`vftable'; //----- (0063BC20) -------------------------------------------------------- void *__thiscall sub_63BC20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SpeechBD *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; //----- (0063BC50) -------------------------------------------------------- void *__thiscall sub_63BC50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NameBD *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; //----- (0063BC80) -------------------------------------------------------- void *__thiscall sub_63BC80(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,CharScreenBoardBase *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; //----- (0063BCB0) -------------------------------------------------------- void *__thiscall sub_63BCB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PrivateStoreBD *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; //----- (0063BCE0) -------------------------------------------------------- void *__thiscall sub_63BCE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,GuildBD *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; //----- (0063BD10) -------------------------------------------------------- int __thiscall sub_63BD10(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,SpeechBD *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,SpeechBD *>::`vftable'; return result; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; // 9F0F84: using guessed type void *NiTPointerListBase,SpeechBD *>::`vftable'; //----- (0063BD90) -------------------------------------------------------- int __thiscall sub_63BD90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NameBD *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NameBD *>::`vftable'; return result; } // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; // 9F0F94: using guessed type void *NiTPointerListBase,NameBD *>::`vftable'; //----- (0063BE10) -------------------------------------------------------- int __thiscall sub_63BE10(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,CharScreenBoardBase *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,CharScreenBoardBase *>::`vftable'; return result; } // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; // 9F0FA4: using guessed type void *NiTPointerListBase,CharScreenBoardBase *>::`vftable'; //----- (0063BE90) -------------------------------------------------------- int __thiscall sub_63BE90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,PrivateStoreBD *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PrivateStoreBD *>::`vftable'; return result; } // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; // 9F0FB4: using guessed type void *NiTPointerListBase,PrivateStoreBD *>::`vftable'; //----- (0063BF10) -------------------------------------------------------- int __thiscall sub_63BF10(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,GuildBD *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,GuildBD *>::`vftable'; return result; } // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; // 9F0FC4: using guessed type void *NiTPointerListBase,GuildBD *>::`vftable'; //----- (0063BF90) -------------------------------------------------------- _DWORD *__thiscall sub_63BF90(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SpeechBD *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SpeechBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; // 9F0F84: using guessed type void *NiTPointerListBase,SpeechBD *>::`vftable'; //----- (0063C020) -------------------------------------------------------- _DWORD *__thiscall sub_63C020(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NameBD *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NameBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; // 9F0F94: using guessed type void *NiTPointerListBase,NameBD *>::`vftable'; //----- (0063C0B0) -------------------------------------------------------- _DWORD *__thiscall sub_63C0B0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,CharScreenBoardBase *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,CharScreenBoardBase *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; // 9F0FA4: using guessed type void *NiTPointerListBase,CharScreenBoardBase *>::`vftable'; //----- (0063C140) -------------------------------------------------------- _DWORD *__thiscall sub_63C140(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PrivateStoreBD *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PrivateStoreBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; // 9F0FB4: using guessed type void *NiTPointerListBase,PrivateStoreBD *>::`vftable'; //----- (0063C1D0) -------------------------------------------------------- _DWORD *__thiscall sub_63C1D0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,GuildBD *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GuildBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; // 9F0FC4: using guessed type void *NiTPointerListBase,GuildBD *>::`vftable'; //----- (0063C260) -------------------------------------------------------- _DWORD *__thiscall sub_63C260(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_634B40(this); *v1 = &CharScreenBoardUserChar::`vftable'; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; sub_6379C0(v1 + 12); return v1; } // 9F0E14: using guessed type void *CharScreenBoardUserChar::`vftable'; //----- (0063C2D0) -------------------------------------------------------- _DWORD *__thiscall sub_63C2D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_634B40(this); *v1 = &CharScreenBoardDropItem::`vftable'; v1[7] = 0; return v1; } // 9F0E34: using guessed type void *CharScreenBoardDropItem::`vftable'; //----- (0063C2F0) -------------------------------------------------------- _DWORD *__thiscall sub_63C2F0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_634B40(this); *v1 = &CharScreenBoardMiniHouse::`vftable'; v1[7] = 0; return v1; } // 9F0E4C: using guessed type void *CharScreenBoardMiniHouse::`vftable'; //----- (0063C310) -------------------------------------------------------- int __thiscall sub_63C310(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,SpeechBD *>::`vftable'; return result; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; // 9F0FD4: using guessed type void *PgTList::`vftable'; //----- (0063C390) -------------------------------------------------------- int __thiscall sub_63C390(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NameBD *>::`vftable'; return result; } // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; // 9F0FE4: using guessed type void *PgTList::`vftable'; //----- (0063C410) -------------------------------------------------------- int __thiscall sub_63C410(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,CharScreenBoardBase *>::`vftable'; return result; } // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; // 9F0FF4: using guessed type void *PgTList::`vftable'; //----- (0063C490) -------------------------------------------------------- int __thiscall sub_63C490(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,PrivateStoreBD *>::`vftable'; return result; } // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; // 9F1004: using guessed type void *PgTList::`vftable'; //----- (0063C510) -------------------------------------------------------- int __thiscall sub_63C510(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,GuildBD *>::`vftable'; return result; } // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; // 9F1014: using guessed type void *PgTList::`vftable'; //----- (0063C590) -------------------------------------------------------- _DWORD *__thiscall sub_63C590(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SpeechBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F34: using guessed type void *NiTListBase,SpeechBD *>::`vftable'; // 9F0FD4: using guessed type void *PgTList::`vftable'; //----- (0063C620) -------------------------------------------------------- _DWORD *__thiscall sub_63C620(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NameBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F44: using guessed type void *NiTListBase,NameBD *>::`vftable'; // 9F0FE4: using guessed type void *PgTList::`vftable'; //----- (0063C6B0) -------------------------------------------------------- _DWORD *__thiscall sub_63C6B0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,CharScreenBoardBase *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F54: using guessed type void *NiTListBase,CharScreenBoardBase *>::`vftable'; // 9F0FF4: using guessed type void *PgTList::`vftable'; //----- (0063C740) -------------------------------------------------------- _DWORD *__thiscall sub_63C740(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PrivateStoreBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F64: using guessed type void *NiTListBase,PrivateStoreBD *>::`vftable'; // 9F1004: using guessed type void *PgTList::`vftable'; //----- (0063C7D0) -------------------------------------------------------- _DWORD *__thiscall sub_63C7D0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GuildBD *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F0F74: using guessed type void *NiTListBase,GuildBD *>::`vftable'; // 9F1014: using guessed type void *PgTList::`vftable'; //----- (0063C860) -------------------------------------------------------- void __thiscall sub_63C860(int **this) { int **v1; // esi int *v2; // eax v1 = this; v2 = this[11]; if ( v2 ) { sub_467720(v2, this[12]); operator delete(v1[11]); } v1[11] = 0; v1[12] = 0; v1[13] = 0; } //----- (0063C8B0) -------------------------------------------------------- int __thiscall sub_63C8B0(char *this) { return (int)(this + 20); } //----- (0063C8E0) -------------------------------------------------------- _WORD *__thiscall sub_63C8E0(float *this, float a2, float a3, float a4, float a5) { float *v5; // esi unsigned int v6; // edi unsigned int v7; // eax double v8; // st6 float v9; // ST40_4 float v10; // ST38_4 float v11; // ST4C_4 float v12; // ST44_4 float v13; // ST44_4 double v14; // st4 float v15; // ST40_4 float v16; // ST4C_4 float v17; // ST38_4 double v18; // st6 float v19; // ST4C_4 float v20; // ST44_4 _DWORD *v21; // eax signed int v22; // esi _WORD *v23; // ebx float *v24; // edi float v26; // [esp+28h] [ebp-54h] float v27; // [esp+2Ch] [ebp-50h] float v28; // [esp+30h] [ebp-4Ch] float v29; // [esp+34h] [ebp-48h] float v30; // [esp+38h] [ebp-44h] float v31; // [esp+3Ch] [ebp-40h] float v32; // [esp+40h] [ebp-3Ch] float v33; // [esp+44h] [ebp-38h] float v34; // [esp+48h] [ebp-34h] float v35; // [esp+4Ch] [ebp-30h] float v36; // [esp+50h] [ebp-2Ch] float v37; // [esp+54h] [ebp-28h] float v38; // [esp+58h] [ebp-24h] float v39; // [esp+5Ch] [ebp-20h] float v40; // [esp+60h] [ebp-1Ch] float v41; // [esp+64h] [ebp-18h] float v42; // [esp+68h] [ebp-14h] int v43; // [esp+78h] [ebp-4h] v5 = this; v6 = (*(int (**)(void))(**((_DWORD **)this + 27) + 60))(); v7 = (*(int (**)(void))(**((_DWORD **)v5 + 27) + 64))(); v8 = 0.5 * a2; v9 = v5[13] - v8; v10 = v5[14] - a3; v11 = v8 + v5[13]; v12 = v5[14] + 0.0; v27 = v9; v28 = v10; v29 = v9; v30 = v12; v31 = v11; v32 = v12; v33 = v11; v34 = v10; v26 = 0.0; if ( byte_B9202B == 1 ) v26 = 1.0; v13 = (double)v6; v14 = v26; v15 = (a4 + v26) / v13; v16 = (double)v7; v17 = (a5 + v14) / v16; v18 = v16; v19 = (a2 + a4 - v14) / v13; v20 = (a5 + a3 - v14) / v18; v35 = v15; v36 = v17; v37 = v15; v38 = v20; v39 = v19; v40 = v20; v41 = v19; v42 = v17; v21 = operator new(0x70u); v22 = 0; v43 = 0; if ( v21 ) v23 = sub_868440(v21, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v23 = 0; v43 = -1; sub_867880(v23, 4, 0, 0); v24 = &v27; do { sub_867DE0((int)v23, 0, v22++, v24); v24 += 2; } while ( v22 < 4 ); sub_867680((int)v23); sub_868230((int)v23, 0, 0, &v35, &v37, &v39, &v41); return v23; } // B9202B: using guessed type char byte_B9202B; //----- (0063CB30) -------------------------------------------------------- int __thiscall sub_63CB30(_DWORD *this) { return this[18]; } //----- (0063CB40) -------------------------------------------------------- int __thiscall sub_63CB40(_DWORD **this, float a2) { int result; // eax result = sub_85C050(this[18], 3); if ( result ) { ++*(_DWORD *)(result + 88); *(float *)(result + 84) = a2; } return result; } //----- (0063CB60) -------------------------------------------------------- LONG __thiscall sub_63CB60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &ScreenBoardGeometry::`vftable'; v2 = this[18]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[18] = 0; } v3 = v1[4]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[4] = 0; } if ( v1[24] >= 0x10u ) operator delete((void *)v1[19]); v1[24] = 15; v1[23] = 0; *((_BYTE *)v1 + 76) = 0; v4 = v1[18]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( v1[10] >= 0x10u ) operator delete((void *)v1[5]); v1[10] = 15; v1[9] = 0; *((_BYTE *)v1 + 20) = 0; v5 = v1[4]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F1024: using guessed type void *ScreenBoardGeometry::`vftable'; //----- (0063CCA0) -------------------------------------------------------- _DWORD *__thiscall sub_63CCA0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &ScreenBoardGeometry::`vftable'; v2[4] = 0; v2[10] = 15; v2[9] = 0; *((_BYTE *)v2 + 20) = 0; v2[18] = 0; v2[24] = 15; v2[23] = 0; *((_BYTE *)v2 + 76) = 0; v2[3] = a2; v3 = v2[4]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[4] = 0; } return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F1024: using guessed type void *ScreenBoardGeometry::`vftable'; //----- (0063CD50) -------------------------------------------------------- int *__thiscall sub_63CD50(const void **this, float a2) { const void **v2; // esi float v3; // ebx _DWORD *v4; // edi _DWORD *v5; // eax int *result; // eax _DWORD *v7; // eax int *v8; // ebx volatile LONG *v9; // edi volatile LONG *v10; // ebx float v11; // edi _DWORD *v12; // ecx int v13; // eax _DWORD **v14; // ecx double v15; // st7 float v16; // ST34_4 float v17; // ST38_4 float *v18; // eax _WORD *v19; // ebx volatile LONG *v20; // edi float v21; // eax volatile LONG *v22; // ebx volatile LONG *v23; // edi float v24; // eax _DWORD *v25; // edi int v26; // ST1C_4 float *v27; // eax float *v28; // eax _DWORD *v29; // ecx int v30; // [esp+3Ch] [ebp-1Ch] int v31; // [esp+40h] [ebp-18h] char v32; // [esp+44h] [ebp-14h] float v33; // [esp+48h] [ebp-10h] int v34; // [esp+54h] [ebp-4h] v2 = this; v3 = a2; v4 = this + 5; sub_4017F0(this + 5, (const void **)LODWORD(a2), 0, (void *)0xFFFFFFFF); v4[7] = *(_DWORD *)(LODWORD(v3) + 28); v4[8] = *(_DWORD *)(LODWORD(v3) + 32); v4[9] = *(_DWORD *)(LODWORD(v3) + 36); if ( v4[5] < 0x10u ) v5 = v4; else v5 = (_DWORD *)*v4; result = (int *)(**(int (__stdcall ***)(int *, _DWORD *))v2[3])(&v30, v5); if ( v30 ) { v7 = v2[3]; v7[1] = 0; v7[2] = 0; if ( v4[5] >= 0x10u ) v4 = (_DWORD *)*v4; result = sub_63F690(v2[3], (int)&a2, v4, (int)v2[12]); v8 = result; v9 = (volatile LONG *)v2[4]; v34 = 0; if ( v9 != (volatile LONG *)*result ) { if ( v9 ) { result = (int *)InterlockedDecrement(v9 + 1); if ( !result ) { if ( v9 ) result = (int *)(**(int (__thiscall ***)(const void *, signed int))v9)((const void *)v9, 1); } } v10 = (volatile LONG *)*v8; v2[4] = (const void *)v10; if ( v10 ) result = (int *)InterlockedIncrement(v10 + 1); } v11 = a2; v34 = -1; if ( a2 != 0.0 ) { result = (int *)InterlockedDecrement((volatile LONG *)(LODWORD(a2) + 4)); if ( !result && v11 != 0.0 ) result = (int *)(**(int (__thiscall ***)(_DWORD, signed int))LODWORD(v11))(LODWORD(v11), 1); } v12 = v2[4]; if ( v12 ) { v13 = sub_63F360(v12); v14 = (_DWORD **)v2[4]; a2 = (double)v30; v15 = (double)v31; v2[27] = (const void *)v13; v33 = v15; v16 = a2; v17 = v33; v18 = sub_63F370(v14, (float *)&v32); v19 = sub_63C8E0((float *)v2, v16, v17, *v18, v18[1]); if ( v2[18] ) { v20 = (volatile LONG *)v2[18]; if ( v20 ) { if ( !InterlockedDecrement(v20 + 1) && v20 ) (**(void (__thiscall ***)(const void *, signed int))v20)((const void *)v20, 1); v2[18] = 0; } } v21 = COERCE_FLOAT(operator new(0xC4u)); a2 = v21; v34 = 1; if ( v21 == 0.0 ) v22 = 0; else v22 = sub_868C00((_DWORD *)LODWORD(v21), (int)v19); v23 = (volatile LONG *)v2[18]; v34 = -1; if ( v23 != v22 ) { if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(const void *, signed int))v23)((const void *)v23, 1); v2[18] = (const void *)v22; if ( v22 ) InterlockedIncrement(v22 + 1); } v24 = COERCE_FLOAT(operator new(0x44u)); a2 = v24; v34 = 2; if ( v24 == 0.0 ) v25 = 0; else v25 = sub_863BB0((_DWORD *)LODWORD(v24)); v26 = (int)v2[27]; v34 = -1; sub_42AB40(v25, v26); sub_45C760((_DWORD **)v25, 1); if ( !byte_B9202B ) sub_45C760((_DWORD **)v25, 0); v25[7] = 2; sub_470EE0((_DWORD **)v25, 0); sub_403700(v2[18], (int)v25); *(float *)&v27 = COERCE_FLOAT(operator new(0x60u)); a2 = *(float *)&v27; v34 = 3; if ( *(float *)&v27 == 0.0 ) v28 = 0; else v28 = sub_85EBC0(v27); ++*((_DWORD *)v28 + 22); v28[17] = 1.0; v28[18] = 1.0; v28[19] = 1.0; v29 = v2[18]; v34 = -1; sub_403700(v29, (int)v28); sub_85C4D0(v2[18]); sub_85BED0((_DWORD **)v2[18], 0.0, 0); result = (int *)65534; *((_WORD *)v2[18] + 14) &= 0xFFFEu; } } return result; } // B9202B: using guessed type char byte_B9202B; //----- (0063D030) -------------------------------------------------------- void *__thiscall sub_63D030(void *this, char a2) { void *v2; // esi v2 = this; sub_63CB60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0063D060) -------------------------------------------------------- signed int __thiscall sub_63D060(_DWORD *this) { signed int v1; // edx signed int result; // eax int v3; // ecx v1 = this[105]; result = 0; if ( v1 <= 0 ) return -1; v3 = this[106]; while ( *(_BYTE *)(v3 + result) ) { if ( ++result >= v1 ) return -1; } return result; } //----- (0063D090) -------------------------------------------------------- int __thiscall sub_63D090(_DWORD *this, __int16 a2) { _DWORD *v2; // ecx int result; // eax v2 = (_DWORD *)this[101]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(result + 12) == a2 ) break; if ( !v2 ) return 0; } return result; } //----- (0063D0C0) -------------------------------------------------------- int __thiscall sub_63D0C0(_DWORD *this, float *a2) { _DWORD *v2; // esi int v3; // ebx float *v4; // eax _DWORD *v5; // esi float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 int v9; // edi char *v10; // eax float *v11; // eax float v12; // ST28_4 float v14; // [esp+8h] [ebp-1Ch] float v15; // [esp+Ch] [ebp-18h] float v16; // [esp+10h] [ebp-14h] float v17; // [esp+14h] [ebp-10h] float v18; // [esp+18h] [ebp-Ch] float v19; // [esp+1Ch] [ebp-8h] float v20; // [esp+2Ch] [ebp+8h] v2 = this; v3 = 0; v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v19 = v4[2]; v17 = *v4; v18 = v4[1]; v5 = (_DWORD *)v2[101]; v6 = *v4 - *a2; v7 = v18 - a2[1]; v8 = v19 - a2[2]; v20 = v7 * v7 + v6 * v6 + v8 * v8; while ( v5 ) { v9 = v5[2]; v5 = (_DWORD *)*v5; if ( v9 ) { v10 = sub_664AB0(dword_AD8C90, *(_WORD *)(v9 + 12)); if ( v10 ) { v11 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v10 + 196))(v10); v14 = v17 - *v11; v15 = v18 - v11[1]; v16 = v19 - v11[2]; v12 = v15 * v15 + v14 * v14 + v16 * v16; if ( v12 > (double)v20 ) { v20 = v15 * v15 + v14 * v14 + v16 * v16; v3 = v9; } } } } return v3; } //----- (0063D410) -------------------------------------------------------- int __thiscall sub_63D410(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // ebx void (__thiscall ***v8)(_DWORD, signed int); // edi v2 = a2; v3 = this; *(_BYTE *)(this[106] + a2[2]) = 0; v4 = (_DWORD *)this[101]; v5 = this + 100; if ( v4 ) { while ( 1 ) { v6 = v4 + 2; v7 = v4; v4 = (_DWORD *)*v4; if ( v2 == (_DWORD *)*v6 ) break; if ( !v4 ) goto LABEL_4; } } else { LABEL_4: v7 = 0; } a2 = v7; if ( v7 ) sub_403620(v5, &a2); (*(void (__stdcall **)(_DWORD **, _DWORD))(*(_DWORD *)v3[5] + 120))(&a2, v2[10]); if ( a2 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } return (*(int (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); } //----- (0063D4B0) -------------------------------------------------------- void __usercall sub_63D4B0(int a1@, signed int a2@) { int v2; // ebx _DWORD *v3; // edi int v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx int v7; // edx void (__thiscall ***v8)(_DWORD, signed int); // ebx signed int v9; // [esp-4h] [ebp-18h] int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v2 = a1; v3 = *(_DWORD **)(a1 + 404); v12 = a1; if ( v3 ) { v9 = a2; do { v4 = v3[2]; v3 = (_DWORD *)*v3; *(_BYTE *)(*(_DWORD *)(v4 + 8) + *(_DWORD *)(v2 + 424)) = 0; v5 = *(_DWORD **)(v2 + 404); if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = (int)v5; v5 = (_DWORD *)*v5; if ( v4 == *v6 ) break; if ( !v5 ) goto LABEL_6; } } else { LABEL_6: v7 = 0; } v11 = v7; if ( v7 ) sub_403620((_DWORD *)(v2 + 400), (_DWORD **)&v11); (*(void (__stdcall **)(int *, _DWORD, signed int))(**(_DWORD **)(v2 + 20) + 120))(&v10, *(_DWORD *)(v4 + 40), v9); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } v2 = v12; } v9 = 1; (**(void (__thiscall ***)(int))v4)(v4); } while ( v3 ); } } // 63D4B0: could not find valid save-restore pair for esi //----- (0063D580) -------------------------------------------------------- void __thiscall sub_63D580(_DWORD *this, __int16 a2) { _DWORD *v2; // esi char *v3; // edi float *v4; // eax signed int v5; // ebx float *v6; // eax _DWORD *v7; // eax void *v8; // eax _DWORD *v9; // edi _DWORD *v10; // edi void *v11; // [esp+20h] [ebp-18h] float v12; // [esp+24h] [ebp-14h] float v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v2 = this; v3 = sub_664AB0(dword_AD8C90, a2); if ( v3 ) { v4 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); v12 = *(float *)(dword_B66FB0 + 88) - *v4; v13 = *(float *)(dword_B66FB0 + 92) - v4[1]; *(float *)&v11 = *(float *)(dword_B66FB0 + 96) - v4[2]; *(float *)&v11 = v13 * v13 + v12 * v12 + *(float *)&v11 * *(float *)&v11; *(float *)&v11 = sqrt(*(float *)&v11); if ( flt_AB2AEC >= (double)*(float *)&v11 && *((_DWORD *)v3 + 169) && !sub_63D090(v2, a2) ) { v5 = sub_63D060(v2); if ( v5 == -1 ) { v6 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); v7 = (_DWORD *)sub_63D0C0(v2, v6); if ( !v7 ) return; v5 = v7[2]; sub_63D410(v2, v7); } *(_BYTE *)(v5 + v2[106]) = 1; v8 = operator new(0x180u); v11 = v8; v9 = 0; v14 = 0; if ( v8 ) v9 = (_DWORD *)sub_6378A0((int)v8, (void *)v2[104], v5); v14 = -1; v11 = v9; sub_636C80(v9, a2); sub_6B9900(v2 + 100, &v11); v10 = (_DWORD *)v9[10]; if ( v10 ) { (*(void (__stdcall **)(_DWORD *, signed int))(*(_DWORD *)v2[5] + 116))(v10, 1); sub_85C4D0(v10); sub_85C6F0(v10); sub_85BED0((_DWORD **)v2[5], 0.0, 1); } } } } // AB2AEC: using guessed type float flt_AB2AEC; //----- (0063D900) -------------------------------------------------------- BOOL __usercall sub_63D900@(int a1@, signed int a2@) { int v2; // edi void (__thiscall ***v3)(_DWORD, signed int); // esi int v4; // esi v2 = a1; sub_63D4B0(a1, a2); if ( dword_AD89DC ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_AD89DC; if ( !InterlockedDecrement((volatile LONG *)(dword_AD89DC + 4)) && v3 ) (**v3)(v3, 1); dword_AD89DC = 0; } v4 = *(_DWORD *)(v2 + 416); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v2 + 416) = 0; } operator delete[](*(void **)(v2 + 424)); *(_DWORD *)(v2 + 424) = 0; DeleteObject(ho); return DeleteObject(h); } // AD89DC: using guessed type int dword_AD89DC; //----- (0063D9A0) -------------------------------------------------------- char sub_63D9A0() { return 1; } //----- (0063D9E0) -------------------------------------------------------- signed int __thiscall sub_63D9E0(_DWORD *this) { signed int v1; // edx signed int result; // eax int v3; // ecx v1 = this[98]; result = 0; if ( v1 <= 0 ) return -1; v3 = this[99]; while ( *(_BYTE *)(v3 + result) ) { if ( ++result >= v1 ) return -1; } return result; } //----- (0063DA50) -------------------------------------------------------- int __thiscall sub_63DA50(_DWORD *this, __int16 a2) { _DWORD *v2; // ecx int result; // eax v2 = (_DWORD *)this[94]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(result + 12) == a2 ) break; if ( !v2 ) return 0; } return result; } //----- (0063DA90) -------------------------------------------------------- char __thiscall sub_63DA90(_DWORD *this) { int v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // edi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // ebx char result; // al _DWORD *v8; // eax _DWORD *v9; // edi _DWORD *v10; // eax _DWORD *v11; // ecx int v12; // edi _DWORD *v13; // ebx unsigned int v14; // eax void *v15; // eax int v16; // ecx int *v17; // eax int v18; // [esp+10h] [ebp-68h] int v19; // [esp+14h] [ebp-64h] int v20; // [esp+18h] [ebp-60h] void *v21; // [esp+1Ch] [ebp-5Ch] _DWORD *v22; // [esp+20h] [ebp-58h] _DWORD *v23; // [esp+24h] [ebp-54h] char v24; // [esp+2Bh] [ebp-4Dh] LOGFONTA lf; // [esp+2Ch] [ebp-4Ch] int v26; // [esp+74h] [ebp-4h] v1 = 0; v23 = this; v19 = 3; v18 = 2; v20 = 0; v24 = byte_BA4774; byte_BA4774 = 1; v22 = 0; v26 = 0; v2 = operator new(0x70u); v21 = v2; LOBYTE(v26) = 1; if ( v2 ) v3 = sub_8698C0(v2, 0x200u, 0x200u, &unk_ABDB18, 1u, 1); else v3 = 0; LOBYTE(v26) = 0; if ( v3 ) { v1 = (int)v3; v22 = v3; InterlockedIncrement(v3 + 1); } v4 = sub_865FA0(v1, &v18); v5 = dword_AD8A00; if ( (_DWORD *)dword_AD8A00 != v4 ) { if ( dword_AD8A00 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8A00; if ( !InterlockedDecrement((volatile LONG *)(dword_AD8A00 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } dword_AD8A00 = (int)v4; if ( !v4 ) goto LABEL_14; InterlockedIncrement(v4 + 1); v5 = dword_AD8A00; } if ( !v5 ) { LABEL_14: v26 = -1; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } return 0; } v8 = operator new(0x70u); v21 = v8; LOBYTE(v26) = 2; if ( v8 ) v9 = sub_8698C0(v8, 0x400u, 0x400u, &unk_ABDAD0, 1u, 1); else v9 = 0; LOBYTE(v26) = 0; if ( (_DWORD *)v1 != v9 ) { if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); v1 = (int)v9; v22 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v10 = sub_865FA0(v1, &v18); v11 = v23; v12 = v23[97]; v13 = v10; if ( (_DWORD *)v12 != v10 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v11 = v23; } v11[97] = v13; if ( v13 ) { InterlockedIncrement(v13 + 1); v11 = v23; } } if ( v11[97] ) { byte_BA4774 = v24; v14 = v11[107]; v11[98] = v14; v15 = operator new[](v14); v16 = (int)v23; v23[99] = v15; memset(v15, 0, *(_DWORD *)(v16 + 392)); dword_AD89F4 = CreateSolidBrush(0xFF00FFu); if ( dword_AD89F4 ) { v17 = sub_420870(1); *(_WORD *)&lf.lfUnderline = 0; lf.lfItalic = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfOutPrecision = *((_BYTE *)v17 + 20); lf.lfClipPrecision = 0; lf.lfHeight = *v17; lf.lfWidth = 0; lf.lfCharSet = *((_BYTE *)v17 + 16); lf.lfQuality = *((_BYTE *)v17 + 24); lf.lfWeight = v17[2]; lf.lfPitchAndFamily = *((_BYTE *)v17 + 28); lstrcpyA(lf.lfFaceName, (LPCSTR)v17[8]); dword_AD89F8 = CreateFontIndirectA(&lf); v26 = -1; if ( dword_AD89F8 ) { sub_410C00(&v22); result = 1; } else { sub_410C00(&v22); result = 0; } } else { v26 = -1; if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } } else { v26 = -1; if ( !v1 || InterlockedDecrement((volatile LONG *)(v1 + 4)) ) return 0; (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // AD8A00: using guessed type int dword_AD8A00; // BA4774: using guessed type char byte_BA4774; //----- (0063DDD0) -------------------------------------------------------- void __thiscall sub_63DDD0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi char *v3; // ebx float *v4; // eax signed int v5; // edi int v6; // eax void *v7; // eax int v8; // edi _DWORD *v9; // edi const CHAR *v10; // eax const CHAR *v11; // eax int v12; // ST0C_4 const char *v13; // ST08_4 int v14; // ST0C_4 const char *v15; // ST08_4 float *v16; // esi char *v17; // [esp+Ch] [ebp-1CCh] void *v18; // [esp+24h] [ebp-1B4h] char v19; // [esp+28h] [ebp-1B0h] char v20; // [esp+128h] [ebp-B0h] char v21; // [esp+129h] [ebp-AFh] char v22[29]; // [esp+1A8h] [ebp-30h] char v23[29]; // [esp+1A9h] [ebp-2Fh] char v24; // [esp+1C5h] [ebp-13h] __int16 v25; // [esp+1C6h] [ebp-12h] int v26; // [esp+1D4h] [ebp-4h] v2 = this; if ( this[96] < this[107] ) { v3 = sub_664AB0(dword_AD8C90, a2); if ( v3 ) { v4 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); if ( flt_AB2BA0 >= sub_636980(byte_ADB468, v4) ) { v18 = (void *)sub_63DA50(v2, a2); if ( !v18 ) { v5 = sub_63D9E0(v2); if ( v5 == -1 ) { v6 = v2[94]; if ( v6 ) v5 = *(_DWORD *)(*(_DWORD *)(v6 + 8) + 8); else v5 = MEMORY[8]; } else { *(_BYTE *)(v5 + v2[99]) = 1; } v7 = operator new(0x190u); v18 = v7; v26 = 0; if ( v7 ) v8 = sub_63A950((int)v7, (void *)v2[97], v5); else v8 = 0; *(_WORD *)(v8 + 12) = a2; v26 = -1; v18 = (void *)v8; sub_6B9900(v2 + 93, &v18); if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 32))(v3) ) flt_AB2B9C = 20.0; v9 = *(_DWORD **)(v8 + 36); if ( v9 ) { (*(void (__stdcall **)(_DWORD *, signed int))(*(_DWORD *)v2[2] + 116))(v9, 1); sub_85C4D0(v9); sub_85C6F0(v9); sub_85BED0((_DWORD **)v2[2], 0.0, 1); } } qmemcpy(v22, v3 + 178, 0x1Eu); v24 = 0; if ( &v22[strlen(v22) + 1] - v23 <= 0 ) { if ( v3[208] ) { v17 = (char *)&unk_9F1029; v10 = sub_40C190(-170593082); } else { v17 = (char *)&unk_9F102A; v10 = sub_40C190(-1444870987); } } else { v20 = 0; memset(&v21, 0, 0x7Fu); sprintf(&v20, "\n %s", v22); if ( !v3[208] ) { v11 = sub_40C190(-1444870987); v12 = (*(int (__thiscall **)(char *, const CHAR *, char *))(*(_DWORD *)v3 + 84))(v3, v11, &v20); v13 = sub_40C190(1250471795); sprintf(&v19, v13, v12); LABEL_25: v16 = (float *)v18; sub_63A350((int)v18, (int)&v25, &v19); v16[6] = flt_ACCFCC; return; } v17 = &v20; v10 = sub_40C190(-170593082); } v14 = (*(int (__thiscall **)(char *, const CHAR *, char *))(*(_DWORD *)v3 + 84))(v3, v10, v17); v15 = sub_40C190(1250471795); sprintf(&v19, v15, v14); goto LABEL_25; } } } } // AB2B9C: using guessed type float flt_AB2B9C; // AB2BA0: using guessed type float flt_AB2BA0; // ACCFCC: using guessed type float flt_ACCFCC; // 63DDD0: using guessed type char var_30[29]; //----- (0063E080) -------------------------------------------------------- void __userpurge sub_63E080(_DWORD *a1@, int a2@, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi int v10; // [esp-4h] [ebp-Ch] v3 = a3; v4 = a1; if ( a3 ) { *(_BYTE *)(a1[99] + a3[2]) = 0; v5 = (_DWORD *)a1[94]; v6 = a1 + 93; v10 = a2; if ( v5 ) { while ( 1 ) { v7 = v5 + 2; v8 = v5; v5 = (_DWORD *)*v5; if ( v3 == (_DWORD *)*v7 ) break; if ( !v5 ) goto LABEL_5; } } else { LABEL_5: v8 = 0; } a3 = v8; if ( v8 ) sub_403620(v6, &a3); (*(void (__stdcall **)(_DWORD **, _DWORD, int))(*(_DWORD *)v4[2] + 120))(&a3, v3[9], v10); if ( a3 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement(a3 + 1) ) { if ( v9 ) (**v9)(v9, 1); } } (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); } } // 63E080: could not find valid save-restore pair for edi //----- (0063E120) -------------------------------------------------------- void __usercall sub_63E120(int a1@, signed int a2@) { int v2; // ebx int *v3; // ecx int v4; // esi _DWORD *v5; // eax _DWORD *v6; // edx int v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // edi signed int v9; // [esp-8h] [ebp-18h] int v10; // [esp+4h] [ebp-Ch] int v11; // [esp+8h] [ebp-8h] int *v12; // [esp+Ch] [ebp-4h] v2 = a1; v3 = *(int **)(a1 + 376); if ( v3 ) { v9 = a2; while ( 1 ) { v4 = v3[2]; v12 = (int *)*v3; if ( v4 ) { *(_BYTE *)(*(_DWORD *)(v2 + 396) + *(_DWORD *)(v4 + 8)) = 0; v5 = *(_DWORD **)(v2 + 376); if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = (int)v5; v5 = (_DWORD *)*v5; if ( v4 == *v6 ) break; if ( !v5 ) goto LABEL_8; } } else { LABEL_8: v7 = 0; } v11 = v7; if ( v7 ) sub_403620((_DWORD *)(v2 + 372), (_DWORD **)&v11); (*(void (__stdcall **)(int *, _DWORD, signed int))(**(_DWORD **)(v2 + 8) + 120))(&v10, *(_DWORD *)(v4 + 36), v9); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } v9 = 1; (**(void (__thiscall ***)(int))v4)(v4); } if ( !v12 ) break; v3 = v12; } } } // 63E120: could not find valid save-restore pair for edi //----- (0063E1F0) -------------------------------------------------------- int __thiscall sub_63E1F0(_DWORD *this, float a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // edi int v5; // esi char *v6; // eax _DWORD *v7; // esi int *v8; // eax v3 = this; v4 = (_DWORD *)this[94]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) { if ( !sub_639A00(v5, a2) || (v6 = sub_664AB0(dword_AD8C90, *(_WORD *)(v5 + 12))) == 0 || v6[1924] != 5 ) sub_63E080(v3, (int)v4, (_DWORD *)v5); } } v7 = (_DWORD *)v3[94]; while ( v7 ) { v8 = v7 + 2; v7 = (_DWORD *)*v7; sub_63A430(*v8, a2, a3, v3[6]); } return sub_85BED0((_DWORD **)v3[2], a2, 1); } //----- (0063E2A0) -------------------------------------------------------- BOOL __thiscall sub_63E2A0(void *this) { void *v1; // edi void (__thiscall ***v2)(_DWORD, signed int); // esi int v3; // esi v1 = this; sub_63E120((int)this, (signed int)this); if ( dword_AD8A00 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8A00; if ( !InterlockedDecrement((volatile LONG *)(dword_AD8A00 + 4)) && v2 ) (**v2)(v2, 1); dword_AD8A00 = 0; } v3 = *((_DWORD *)v1 + 97); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 97) = 0; } operator delete[](*((void **)v1 + 99)); *((_DWORD *)v1 + 99) = 0; DeleteObject(dword_AD89F4); return DeleteObject(dword_AD89F8); } // AD8A00: using guessed type int dword_AD8A00; //----- (0063E340) -------------------------------------------------------- char __thiscall sub_63E340(_DWORD *this) { int v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // edi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // ebx char result; // al _DWORD *v8; // eax _DWORD *v9; // edi _DWORD *v10; // eax int v11; // edi _DWORD *v12; // ebx void *v13; // eax size_t v14; // ST0C_4 int *v15; // eax int v16; // [esp+10h] [ebp-68h] int v17; // [esp+14h] [ebp-64h] int v18; // [esp+18h] [ebp-60h] void *v19; // [esp+1Ch] [ebp-5Ch] _DWORD *v20; // [esp+20h] [ebp-58h] _DWORD *v21; // [esp+24h] [ebp-54h] char v22; // [esp+2Bh] [ebp-4Dh] LOGFONTA lf; // [esp+2Ch] [ebp-4Ch] int v24; // [esp+74h] [ebp-4h] v1 = 0; v20 = this; v17 = 3; v16 = 2; v18 = 0; v22 = byte_BA4774; byte_BA4774 = 1; v21 = 0; v24 = 0; v2 = operator new(0x70u); v19 = v2; LOBYTE(v24) = 1; if ( v2 ) v3 = sub_8698C0(v2, 0x100u, 0x80u, &unk_ABDB18, 1u, 1); else v3 = 0; LOBYTE(v24) = 0; if ( v3 ) { v1 = (int)v3; v21 = v3; InterlockedIncrement(v3 + 1); } v4 = sub_865FA0(v1, &v16); v5 = dword_AD8BC8; if ( (_DWORD *)dword_AD8BC8 != v4 ) { if ( dword_AD8BC8 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BC8; if ( !InterlockedDecrement((volatile LONG *)(dword_AD8BC8 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } dword_AD8BC8 = (int)v4; if ( !v4 ) goto LABEL_14; InterlockedIncrement(v4 + 1); v5 = dword_AD8BC8; } if ( !v5 ) { LABEL_14: v24 = -1; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } return 0; } v8 = operator new(0x70u); v19 = v8; LOBYTE(v24) = 2; if ( v8 ) v9 = sub_8698C0(v8, 0x400u, 0x200u, &unk_ABDAD0, 1u, 1); else v9 = 0; LOBYTE(v24) = 0; if ( (_DWORD *)v1 != v9 ) { if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); v1 = (int)v9; v21 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v10 = sub_865FA0(v1, &v16); v11 = v20[11]; v12 = v10; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v20[11] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } if ( v20[11] ) { byte_BA4774 = v22; v20[12] = 36; v13 = operator new[](0x24u); v14 = v20[12]; v20[13] = v13; memset(v13, 0, v14); dword_AD8BC0 = CreateSolidBrush(0xFF00FFu); if ( dword_AD8BC0 ) { v15 = sub_420870(0); *(_WORD *)&lf.lfUnderline = 0; lf.lfItalic = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfOutPrecision = *((_BYTE *)v15 + 20); lf.lfClipPrecision = 0; lf.lfHeight = *v15; lf.lfWidth = 0; lf.lfCharSet = *((_BYTE *)v15 + 16); lf.lfQuality = 3; lf.lfWeight = v15[2]; lf.lfPitchAndFamily = *((_BYTE *)v15 + 28); lstrcpyA(lf.lfFaceName, (LPCSTR)v15[8]); dword_AD8BC4 = CreateFontIndirectA(&lf); v24 = -1; if ( dword_AD8BC4 ) { sub_410C00(&v21); result = 1; } else { sub_410C00(&v21); result = 0; } } else { v24 = -1; if ( !v1 || InterlockedDecrement((volatile LONG *)(v1 + 4)) ) return 0; (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } } else { v24 = -1; if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); result = 0; } return result; } // AD8BC8: using guessed type int dword_AD8BC8; // BA4774: using guessed type char byte_BA4774; //----- (0063E660) -------------------------------------------------------- _DWORD *__thiscall sub_63E660(_DWORD *this, __int16 a2) { _DWORD *result; // eax int v3; // ecx result = (_DWORD *)this[8]; if ( result ) { while ( 1 ) { v3 = result[2]; result = (_DWORD *)*result; if ( *(_WORD *)(v3 + 8) == a2 ) break; if ( !result ) return result; } *(float *)(v3 + 24) = 0.0; } return result; } //----- (0063E690) -------------------------------------------------------- void __thiscall sub_63E690(void *this, int a2, void *a3) { void *v3; // ebx char *v4; // eax float *v5; // eax _DWORD *v6; // eax int v7; // ecx int v8; // edi signed int v9; // ecx unsigned int v10; // eax int v11; // edx unsigned int v12; // esi int v13; // eax void *v14; // eax int v15; // esi _DWORD *v16; // esi char *v17; // [esp+20h] [ebp-1Ch] void *v18; // [esp+24h] [ebp-18h] float v19; // [esp+28h] [ebp-14h] float v20; // [esp+2Ch] [ebp-10h] int v21; // [esp+38h] [ebp-4h] v3 = this; v4 = sub_664AB0(dword_AD8C90, a2); v17 = v4; if ( v4 ) { v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); v19 = *(float *)(dword_B66FB0 + 88) - *v5; v20 = *(float *)(dword_B66FB0 + 92) - v5[1]; *(float *)&v18 = *(float *)(dword_B66FB0 + 96) - v5[2]; *(float *)&v18 = v20 * v20 + v19 * v19 + *(float *)&v18 * *(float *)&v18; *(float *)&v18 = sqrt(*(float *)&v18); if ( flt_AB3198 >= (double)*(float *)&v18 ) { v6 = (_DWORD *)*((_DWORD *)v3 + 8); if ( v6 ) { while ( 1 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( *(_WORD *)(v7 + 8) == (_WORD)a2 ) break; if ( !v6 ) goto LABEL_6; } } else { LABEL_6: v7 = 0; } v8 = v7; if ( !v7 ) { v9 = *((_DWORD *)v3 + 12); v10 = 0; if ( v9 <= 0 ) goto LABEL_14; v11 = *((_DWORD *)v3 + 13); while ( *(_BYTE *)(v11 + v10) ) { if ( (signed int)++v10 >= v9 ) goto LABEL_14; } v12 = v10; if ( v10 != -1 ) { *(_BYTE *)(v11 + v10) = 1; } else { LABEL_14: v13 = *((_DWORD *)v3 + 8); if ( v13 ) v12 = *(_DWORD *)(*(_DWORD *)(v13 + 8) + 4); else v12 = MEMORY[4]; } v14 = operator new(0x88u); v18 = v14; v21 = 0; if ( v14 ) v15 = sub_6413E0((int)v14, *((void **)v3 + 11), v12); else v15 = 0; *(_WORD *)(v15 + 8) = a2; v8 = v15; v21 = -1; v18 = (void *)v15; sub_6B9900((_DWORD *)v3 + 7, &v18); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v17 + 32))() ) *(float *)(v15 + 24) = 20.0; v16 = *(_DWORD **)(v15 + 36); if ( v16 ) { (*(void (__stdcall **)(_DWORD *, signed int))(**((_DWORD **)v3 + 1) + 116))(v16, 1); sub_85C4D0(v16); sub_85C6F0(v16); sub_85BED0(*((_DWORD ***)v3 + 1), 0.0, 1); } } sub_640DA0(v8, v8, a3); *(float *)(v8 + 20) = flt_ACCFCC; } } } // AB3198: using guessed type float flt_AB3198; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0063E870) -------------------------------------------------------- int *__thiscall sub_63E870(void *this, int a2, void *a3, float a4) { void *v4; // esi int *result; // eax int v6; // ecx v4 = this; sub_63E690(this, a2, a3); result = (int *)*((_DWORD *)v4 + 8); if ( result ) { while ( 1 ) { v6 = result[2]; result = (int *)*result; if ( *(_WORD *)(v6 + 8) == (_WORD)a2 ) break; if ( !result ) return result; } *(float *)(v6 + 24) = a4; } return result; } //----- (0063E8C0) -------------------------------------------------------- void __thiscall sub_63E8C0(void *this, int a2, void *a3, int a4, int a5) { void *v5; // ebx char *v6; // eax float *v7; // eax _DWORD *v8; // eax int v9; // ecx int v10; // edi signed int v11; // ecx unsigned int v12; // eax int v13; // edx unsigned int v14; // esi int v15; // eax void *v16; // eax int v17; // esi _DWORD *v18; // esi char *v19; // [esp+20h] [ebp-1Ch] void *v20; // [esp+24h] [ebp-18h] float v21; // [esp+28h] [ebp-14h] float v22; // [esp+2Ch] [ebp-10h] int v23; // [esp+38h] [ebp-4h] v5 = this; v6 = sub_664AB0(dword_AD8C90, a2); v19 = v6; if ( v6 ) { v7 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 196))(v6); v21 = *(float *)(dword_B66FB0 + 88) - *v7; v22 = *(float *)(dword_B66FB0 + 92) - v7[1]; *(float *)&v20 = *(float *)(dword_B66FB0 + 96) - v7[2]; *(float *)&v20 = v22 * v22 + v21 * v21 + *(float *)&v20 * *(float *)&v20; *(float *)&v20 = sqrt(*(float *)&v20); if ( flt_AB3198 >= (double)*(float *)&v20 ) { v8 = (_DWORD *)*((_DWORD *)v5 + 8); if ( v8 ) { while ( 1 ) { v9 = v8[2]; v8 = (_DWORD *)*v8; if ( *(_WORD *)(v9 + 8) == (_WORD)a2 ) break; if ( !v8 ) goto LABEL_6; } } else { LABEL_6: v9 = 0; } v10 = v9; if ( !v9 ) { v11 = *((_DWORD *)v5 + 12); v12 = 0; if ( v11 <= 0 ) goto LABEL_14; v13 = *((_DWORD *)v5 + 13); while ( *(_BYTE *)(v13 + v12) ) { if ( (signed int)++v12 >= v11 ) goto LABEL_14; } v14 = v12; if ( v12 != -1 ) { *(_BYTE *)(v13 + v12) = 1; } else { LABEL_14: v15 = *((_DWORD *)v5 + 8); if ( v15 ) v14 = *(_DWORD *)(*(_DWORD *)(v15 + 8) + 4); else v14 = MEMORY[4]; } v16 = operator new(0x88u); v20 = v16; v23 = 0; if ( v16 ) v17 = sub_6413E0((int)v16, *((void **)v5 + 11), v14); else v17 = 0; *(_WORD *)(v17 + 8) = a2; v10 = v17; v23 = -1; v20 = (void *)v17; sub_6B9900((_DWORD *)v5 + 7, &v20); if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v19 + 32))() ) *(float *)(v17 + 24) = 20.0; v18 = *(_DWORD **)(v17 + 36); if ( v18 ) { (*(void (__stdcall **)(_DWORD *, signed int))(**((_DWORD **)v5 + 1) + 116))(v18, 1); sub_85C4D0(v18); sub_85C6F0(v18); sub_85BED0(*((_DWORD ***)v5 + 1), 0.0, 1); } } sub_641010((_DWORD *)v10, (unsigned __int8 *)a4); sub_640E80((_DWORD *)v10, (unsigned __int8 *)a5); sub_640DA0(v10, v10, a3); *(float *)(v10 + 20) = flt_ACCFCC; } } } // AB3198: using guessed type float flt_AB3198; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0063EAB0) -------------------------------------------------------- int __thiscall sub_63EAB0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // ebx void (__thiscall ***v8)(_DWORD, signed int); // edi v2 = a2; v3 = this; *(_BYTE *)(this[13] + a2[1]) = 0; v4 = (_DWORD *)this[8]; v5 = this + 7; if ( v4 ) { while ( 1 ) { v6 = v4 + 2; v7 = v4; v4 = (_DWORD *)*v4; if ( v2 == (_DWORD *)*v6 ) break; if ( !v4 ) goto LABEL_4; } } else { LABEL_4: v7 = 0; } a2 = v7; if ( v7 ) sub_403620(v5, &a2); (*(void (__stdcall **)(_DWORD **, _DWORD))(*(_DWORD *)v3[1] + 120))(&a2, v2[9]); if ( a2 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } return (*(int (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); } //----- (0063EB40) -------------------------------------------------------- void __usercall sub_63EB40(int a1@, signed int a2@) { int v2; // ebx _DWORD *v3; // edi int v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx int v7; // edx void (__thiscall ***v8)(_DWORD, signed int); // ebx signed int v9; // [esp-4h] [ebp-18h] int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v2 = a1; v3 = *(_DWORD **)(a1 + 32); v12 = a1; if ( v3 ) { v9 = a2; do { v4 = v3[2]; v3 = (_DWORD *)*v3; *(_BYTE *)(*(_DWORD *)(v4 + 4) + *(_DWORD *)(v2 + 52)) = 0; v5 = *(_DWORD **)(v2 + 32); if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = (int)v5; v5 = (_DWORD *)*v5; if ( v4 == *v6 ) break; if ( !v5 ) goto LABEL_6; } } else { LABEL_6: v7 = 0; } v11 = v7; if ( v7 ) sub_403620((_DWORD *)(v2 + 28), (_DWORD **)&v11); (*(void (__stdcall **)(int *, _DWORD, signed int))(**(_DWORD **)(v2 + 4) + 120))(&v10, *(_DWORD *)(v4 + 36), v9); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } v2 = v12; } v9 = 1; (**(void (__thiscall ***)(int))v4)(v4); } while ( v3 ); } } // 63EB40: could not find valid save-restore pair for esi //----- (0063EC00) -------------------------------------------------------- int __thiscall sub_63EC00(_DWORD *this, float a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v5; // ebx _DWORD *v6; // esi __int16 **v7; // eax int result; // eax int v9; // edi v3 = this; v4 = (_DWORD *)this[8]; while ( v4 ) { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( !sub_640150((int)v5, a2) ) sub_63EAB0(v3, v5); } v6 = (_DWORD *)v3[8]; while ( v6 ) { v7 = (__int16 **)(v6 + 2); v6 = (_DWORD *)*v6; sub_640AE0(*v7, a2, a3, v3[6]); } result = sub_85BED0((_DWORD **)v3[1], a2, 1); v9 = v3[1]; if ( byte_B92006 ) *(_WORD *)(v9 + 28) &= 0xFFFEu; else *(_WORD *)(v9 + 28) |= 1u; return result; } // B92006: using guessed type char byte_B92006; //----- (0063ECB0) -------------------------------------------------------- BOOL __usercall sub_63ECB0@(int a1@, signed int a2@) { int v2; // edi void (__thiscall ***v3)(_DWORD, signed int); // esi int v4; // esi v2 = a1; sub_63EB40(a1, a2); if ( dword_AD8BC8 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BC8; if ( !InterlockedDecrement((volatile LONG *)(dword_AD8BC8 + 4)) && v3 ) (**v3)(v3, 1); dword_AD8BC8 = 0; } v4 = *(_DWORD *)(v2 + 44); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v2 + 44) = 0; } operator delete[](*(void **)(v2 + 52)); *(_DWORD *)(v2 + 52) = 0; DeleteObject(dword_AD8BC0); return DeleteObject(dword_AD8BC4); } // AD8BC8: using guessed type int dword_AD8BC8; //----- (0063ED50) -------------------------------------------------------- int __thiscall sub_63ED50(int this) { int v1; // esi HDC v2; // eax HDC v3; // eax int result; // eax v1 = this; if ( *(_DWORD *)(this + 76) ) { v2 = *(HDC *)(this + 88); if ( v2 ) { SelectObject(v2, *(HGDIOBJ *)(this + 12)); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 76) + 64))(*(_DWORD *)(v1 + 76), *(_DWORD *)(v1 + 88)); *(_DWORD *)(v1 + 88) = 0; } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 76) + 8))(*(_DWORD *)(v1 + 76)); } if ( *(_BYTE *)(v1 + 108) == 1 && *(_DWORD *)(v1 + 84) ) { v3 = *(HDC *)(v1 + 92); if ( v3 ) { SelectObject(v3, *(HGDIOBJ *)(v1 + 12)); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 84) + 64))(*(_DWORD *)(v1 + 84), *(_DWORD *)(v1 + 92)); *(_DWORD *)(v1 + 92) = 0; } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 84) + 8))(*(_DWORD *)(v1 + 84)); } result = *(_DWORD *)(v1 + 80); if ( result ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(*(_DWORD *)(v1 + 80)); *(_DWORD *)(v1 + 80) = 0; *(_DWORD *)(v1 + 76) = 0; return result; } //----- (0063EDE0) -------------------------------------------------------- void __usercall sub_63EDE0(int *a1@, int a2@, const CHAR *a3@) { int *v3; // esi bool v4; // zf int v5; // ecx int v6; // ST10_4 signed int v7; // ST0C_4 int v8; // eax int v9; // eax _DWORD *v10; // edx _BYTE *v11; // edi int v12; // eax int v13; // ecx bool v14; // sf int v15; // ebx int v16; // ecx int v17; // eax int v18; // [esp+4h] [ebp-5Ch] unsigned __int8 *v19; // [esp+8h] [ebp-58h] int v20; // [esp+Ch] [ebp-54h] _BYTE *v21; // [esp+10h] [ebp-50h] int v22; // [esp+14h] [ebp-4Ch] _DWORD *v23; // [esp+18h] [ebp-48h] int v24; // [esp+1Ch] [ebp-44h] int v25; // [esp+20h] [ebp-40h] int v26; // [esp+24h] [ebp-3Ch] int v27; // [esp+28h] [ebp-38h] int v28; // [esp+2Ch] [ebp-34h] int v29; // [esp+30h] [ebp-30h] unsigned __int8 *v30; // [esp+34h] [ebp-2Ch] int v31; // [esp+38h] [ebp-28h] struct tagRECT v32; // [esp+3Ch] [ebp-24h] struct tagRECT rc; // [esp+4Ch] [ebp-14h] v3 = a1; if ( a1[19] ) { SetRect(&rc, 0, 0, a1[16], a1[17]); FillRect((HDC)v3[22], &rc, (HBRUSH)v3[4]); SetBkMode((HDC)v3[22], 1); SetTextColor((HDC)v3[22], 0xFFFFFFu); TextOutA((HDC)v3[22], v3[9] / 2, v3[10] / 2, (LPCSTR)v3[24], v3[18]); SelectObject((HDC)v3[22], (HGDIOBJ)v3[3]); (*(void (__stdcall **)(int, int))(*(_DWORD *)v3[19] + 64))(v3[19], v3[22]); v4 = *((_BYTE *)v3 + 108) == 1; v3[22] = 0; if ( v4 ) { FillRect((HDC)v3[23], &rc, (HBRUSH)v3[4]); SetBkMode((HDC)v3[23], 1); SetTextColor((HDC)v3[23], 0xFFFFFFu); v5 = v3[24]; v6 = v3[18]; v31 = v3[10] / 2; v7 = (signed int)((double)v31 + *((float *)v3 + 6)); v31 = v3[9] / 2; TextOutA((HDC)v3[23], (signed int)((double)v31 + *((float *)v3 + 5)), v6, a3, a2); SelectObject((HDC)v3[23], (HGDIOBJ)v3[3]); (*(void (__cdecl **)(int, int))(*(_DWORD *)v3[21] + 64))(v3[21], v3[23]); v3[23] = 0; } v8 = v3[19]; if ( v8 ) { if ( v3[20] ) { if ( !(*(int (__stdcall **)(int, int *, struct tagRECT *, _DWORD))(*(_DWORD *)v8 + 52))(v8, &v20, &rc, 0) ) { if ( *((_BYTE *)v3 + 108) != 1 || (v9 = v3[21]) != 0 && !(*(int (__stdcall **)(int, int *, struct tagRECT *, _DWORD))(*(_DWORD *)v9 + 52))(v9, &v18, &rc, 0) ) { SetRect(&v32, v3[1], v3[2], v3[1] + v3[16], v3[2] + v3[17]); if ( !(*(int (__stdcall **)(int, int *, struct tagRECT *, _DWORD))(*(_DWORD *)v3[20] + 52))( v3[20], &v22, &v32, 0) ) { v10 = v23; v11 = v21; v12 = 4 * v3[16]; v13 = v22 - v12; v4 = *((_BYTE *)v3 + 108) == 0; v26 = v22 - v12; v29 = v20 - v12; if ( !v4 ) { v30 = v19; v28 = v18 - v12; } v4 = v3[17] == 0; v14 = v3[17] < 0; v27 = *((unsigned __int8 *)v3 + 102); v24 = *((unsigned __int8 *)v3 + 101); v25 = *((unsigned __int8 *)v3 + 100); v31 = 0; if ( v14 || v4 ) goto LABEL_26; while ( 1 ) { v15 = 0; if ( v3[16] <= 0 ) goto LABEL_25; do { v16 = 0; if ( *((_BYTE *)v3 + 108) == 1 ) v16 = *v30; if ( *v11 ) { v17 = v27 | ((v24 | ((v25 | ((unsigned __int8)*v11 << 8)) << 8)) << 8); } else { if ( v16 ) { *v10 = (unsigned int)&loc_585858 | (v16 << 24); goto LABEL_23; } v17 = v3[26]; } *v10 = v17; LABEL_23: v30 += 4; ++v15; ++v10; v11 += 4; } while ( v15 < v3[16] ); v13 = v26; LABEL_25: v30 += v28; v11 += v29; v10 = (_DWORD *)((char *)v10 + v13); if ( ++v31 >= v3[17] ) { LABEL_26: (*(void (__stdcall **)(int))(*(_DWORD *)v3[20] + 56))(v3[20]); (*(void (__stdcall **)(int))(*(_DWORD *)v3[19] + 56))(v3[19]); if ( *((_BYTE *)v3 + 108) == 1 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3[21] + 56))(v3[21]); return; } } } } } } } } } // 63EDE0: could not find valid save-restore pair for ebx // 63EDE0: could not find valid save-restore pair for edi //----- (0063F100) -------------------------------------------------------- _DWORD *__thiscall sub_63F100(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = this[7]; a2[1] = this[8]; v3 = this[9]; v4 = this[10]; *result += v3; result[1] += v4; return result; } //----- (0063F140) -------------------------------------------------------- _DWORD *__thiscall sub_63F140(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = this[7]; a2[1] = this[8]; v3 = this[9]; v4 = this[10]; *result += v3; result[1] += v4; return result; } //----- (0063F160) -------------------------------------------------------- void __usercall sub_63F160(int a1@, int a2@) { int v2; // esi CHAR **v3; // edi CHAR *v4; // edi v2 = a1; v3 = (CHAR **)(a1 + 88); (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(a1 + 76) + 60))(*(_DWORD *)(a1 + 76), a1 + 88); v4 = *v3; if ( v4 ) { SelectObject((HDC)v4, *(HGDIOBJ *)(v2 + 12)); sub_63EDE0((int *)v2, a2, v4); } } //----- (0063F190) -------------------------------------------------------- char __thiscall sub_63F190(_DWORD *this, LPCSTR lpString, int a3, int a4) { bool v4; // zf int v6; // eax const CHAR *v7; // edi BYTE v8; // al HDC v9; // eax LONG v10; // eax LONG *v11; // eax int v12; // [esp+8h] [ebp-14h] struct tagSIZE psizl; // [esp+10h] [ebp-Ch] _DWORD *v14; // [esp+18h] [ebp-4h] *(_DWORD *)a3 = 0; *(_DWORD *)a4 = 0; *(_DWORD *)(a4 + 4) = 0; v4 = this[22] == 0; v14 = this; if ( v4 ) return 0; v6 = this[8]; v7 = lpString; v12 = this[7]; if ( !lpString ) return 0; v8 = *lpString; if ( !*lpString ) return 0; do { v4 = IsDBCSLeadByte(v8) == 0; v9 = (HDC)v14[22]; if ( v4 ) { GetTextExtentPoint32A(v9, v7, 1, &psizl); v10 = psizl.cx; if ( psizl.cx + *(_DWORD *)a4 > v12 ) return 0; ++v7; ++*(_DWORD *)a3; } else { GetTextExtentPoint32A(v9, v7, 2, &psizl); v10 = psizl.cx; if ( psizl.cx + *(_DWORD *)a4 > v12 ) return 0; v7 += 2; *(_DWORD *)a3 += 2; } *(_DWORD *)a4 += v10; v11 = &psizl.cy; if ( *(_DWORD *)(a4 + 4) >= psizl.cy ) v11 = (LONG *)(a4 + 4); *(_DWORD *)(a4 + 4) = *v11; v8 = *v7; } while ( *v7 ); return 1; } //----- (0063F270) -------------------------------------------------------- char __thiscall sub_63F270(char *this, int a2) { char *v2; // esi int v3; // ecx int v5; // eax _DWORD *v6; // edi HDC v7; // ebx int v8; // ecx int v9; // eax int v10; // ecx int v11; // eax _DWORD *v12; // esi v2 = this; v3 = *(_DWORD *)(dword_AD8BB8 + 40); if ( !v3 ) return 0; v5 = (*(int (**)(void))(*(_DWORD *)v3 + 20))(); if ( !v5 ) return 0; v6 = v2 + 76; (*(void (__stdcall **)(int, _DWORD, char *))(*(_DWORD *)v5 + 72))(v5, 0, v2 + 76); if ( !*((_DWORD *)v2 + 19) ) return 0; (*(void (__stdcall **)(_DWORD, char *))(*(_DWORD *)*v6 + 60))(*v6, v2 + 88); v7 = (HDC)*((_DWORD *)v2 + 22); if ( !v7 ) return 0; SelectObject(v7, *((HGDIOBJ *)v2 + 3)); if ( v2[108] == 1 ) { v8 = *(_DWORD *)(dword_AD8BBC + 40); if ( !v8 ) return 0; v9 = (*(int (**)(void))(*(_DWORD *)v8 + 20))(); if ( !v9 ) return 0; (*(void (__stdcall **)(int, _DWORD, char *))(*(_DWORD *)v9 + 72))(v9, 0, v2 + 84); if ( !*v6 ) return 0; (*(void (__stdcall **)(_DWORD, char *))(**((_DWORD **)v2 + 21) + 60))(*((_DWORD *)v2 + 21), v2 + 92); SelectObject(*((HDC *)v2 + 23), *((HGDIOBJ *)v2 + 3)); } if ( a2 ) { v10 = *(_DWORD *)(a2 + 40); if ( !v10 ) return 0; v11 = (*(int (**)(void))(*(_DWORD *)v10 + 20))(); if ( !v11 ) return 0; v12 = v2 + 80; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v11 + 72))(v11, 0, v12); if ( !*v12 ) return 0; } return 1; } // AD8BB8: using guessed type int dword_AD8BB8; // AD8BBC: using guessed type int dword_AD8BBC; //----- (0063F360) -------------------------------------------------------- int __thiscall sub_63F360(_DWORD *this) { return this[3]; } //----- (0063F370) -------------------------------------------------------- float *__thiscall sub_63F370(_DWORD **this, float *a2) { _DWORD **v2; // esi double v3; // st6 float *result; // eax int v5; // edx int v6; // edx float v7; // [esp+4h] [ebp-18h] float v8; // [esp+8h] [ebp-14h] int v9; // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] float v11; // [esp+14h] [ebp-8h] float v12; // [esp+18h] [ebp-4h] v2 = this; (*(void (__stdcall **)(int *))(*this[2] + 4))(&v9); v7 = (double)v9; v8 = (double)v10; v10 = (*(int (**)(void))(*v2[3] + 60))(); v3 = (double)(unsigned int)v10 / v7; if ( (signed int)v3 ) { v6 = (signed int)v2[4] % (signed int)v3; v10 = (signed int)v2[4] / (signed int)v3; result = a2; v11 = (double)v6; v12 = (double)v10; *a2 = v7 * v11; a2[1] = v8 * v12; } else { result = a2; v5 = dword_BA482C; *(_DWORD *)a2 = dword_BA4828; *((_DWORD *)a2 + 1) = v5; } return result; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (0063F410) -------------------------------------------------------- int __thiscall sub_63F410(int this, int a2, LPCSTR lpString) { int v3; // esi _DWORD *v4; // edi int v5; // edx int result; // eax int v7; // ebx int v8; // edi v3 = this; v4 = (_DWORD *)(this + 64); *(_DWORD *)(this + 68) = 0; *(_DWORD *)(this + 64) = 0; if ( sub_63F270((char *)this, 0) ) { sub_63F190((_DWORD *)v3, lpString, v3 + 72, (int)v4); sub_63ED50(v3); v7 = *(_DWORD *)(v3 + 36) + *v4; v8 = *(_DWORD *)(v3 + 40) + v4[1]; if ( *(_BYTE *)(v3 + 108) == 1 ) { v7 += (signed int)*(float *)(v3 + 20); v8 += (signed int)*(float *)(v3 + 24); } result = a2; *(_DWORD *)a2 = v7; *(_DWORD *)(a2 + 4) = v8; } else { v5 = v4[1]; result = a2; *(_DWORD *)a2 = *v4; *(_DWORD *)(a2 + 4) = v5; } return result; } //----- (0063F4A0) -------------------------------------------------------- bool __thiscall sub_63F4A0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // eax unsigned int v4; // edi int v5; // eax int v6; // edx v1 = this; v2 = this[15]; if ( v2 < (this[12] - this[11]) >> 2 ) return 1; v4 = 0; if ( v2 ) { do { v5 = v1[11]; if ( *(_DWORD *)(*(_DWORD *)(v5 + 4 * v4) + 4) == 1 ) { v6 = v1[15]; if ( v6 ) { sub_63FED0((int *)(v5 + 4 * v4), (int *)(v5 + 4 * v6 - 4)); --v1[15]; --v4; } } ++v4; } while ( v4 < v1[15] ); } return v1[15] < (unsigned int)((v1[12] - v1[11]) >> 2); } //----- (0063F500) -------------------------------------------------------- LONG __thiscall sub_63F500(void **this) { void **v1; // esi volatile LONG *v2; // edi v1 = this; *this = &ScreenBoardTexture::DescInfo::`vftable'; if ( (unsigned int)this[10] >= 0x10 ) operator delete(this[5]); v1[10] = (void *)15; v1[9] = 0; *((_BYTE *)v1 + 20) = 0; v2 = (volatile LONG *)v1[3]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F103C: using guessed type void *ScreenBoardTexture::DescInfo::`vftable'; //----- (0063F5A0) -------------------------------------------------------- _DWORD *__thiscall sub_63F5A0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // edi int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // edi v4 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v4 = &ScreenBoardTexture::DescInfo::`vftable'; v4[3] = 0; v4[10] = 15; v4[9] = 0; *((_BYTE *)v4 + 20) = 0; v4[12] = 0; v4[2] = a2; v5 = v4[3]; v6 = a3; if ( v5 != a3 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = a3; } v4[3] = v6; if ( v6 ) { InterlockedIncrement((volatile LONG *)(v6 + 4)); v6 = a3; } } v4[4] = a4; if ( v6 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } return v4; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F103C: using guessed type void *ScreenBoardTexture::DescInfo::`vftable'; //----- (0063F690) -------------------------------------------------------- int *__thiscall sub_63F690(_DWORD *this, int a2, void *a3, int a4) { int v4; // esi int v5; // ebx int v6; // edi unsigned int v7; // ebx unsigned __int8 *v8; // edx unsigned int v9; // ecx unsigned __int8 *v10; // eax int v11; // eax bool v12; // zf signed int v13; // eax bool v14; // cf _DWORD *v15; // esi int *result; // eax int v17; // eax int v18; // edi int v19; // ecx int v20; // eax signed int v21; // eax int *v22; // esi _DWORD *v23; // edi int v24; // ecx double v25; // st7 int *v26; // edi float v27; // [esp+10h] [ebp-4Ch] float v28; // [esp+14h] [ebp-48h] int v29; // [esp+18h] [ebp-44h] int *v30; // [esp+1Ch] [ebp-40h] int v31; // [esp+20h] [ebp-3Ch] int v32; // [esp+24h] [ebp-38h] _DWORD *v33; // [esp+28h] [ebp-34h] void *v34; // [esp+2Ch] [ebp-30h] unsigned int v35; // [esp+3Ch] [ebp-20h] unsigned int v36; // [esp+40h] [ebp-1Ch] int v37; // [esp+48h] [ebp-14h] int v38; // [esp+58h] [ebp-4h] v4 = (int)this; v5 = 0; v29 = 0; v33 = (_DWORD *)a2; this[24] = a3; this[25] = a4; v32 = 0; v38 = 1; v36 = 15; v35 = 0; LOBYTE(v34) = 0; sub_4018E0(&v34, a3, strlen((const char *)a3)); v37 = a4; v12 = *(_DWORD *)(v4 + 60) == 0; LOBYTE(v38) = 2; v31 = 0; if ( !v12 ) { v30 = *(int **)(v4 + 44); while ( 1 ) { v6 = *v30; v7 = *(_DWORD *)(*v30 + 36); if ( *(_DWORD *)(*v30 + 40) < 0x10u ) v8 = (unsigned __int8 *)(v6 + 20); else v8 = *(unsigned __int8 **)(v6 + 20); v9 = v35; if ( v35 >= v7 ) v9 = *(_DWORD *)(*v30 + 36); v10 = (unsigned __int8 *)v34; if ( v36 < 0x10 ) v10 = (unsigned __int8 *)&v34; v11 = sub_40C0B0(v10, v8, v9); v12 = v11 == 0; if ( !v11 ) { if ( v35 >= v7 ) v13 = v35 != v7; else v13 = -1; v12 = v13 == 0; } if ( v12 && a4 == *(_DWORD *)(v6 + 48) ) break; ++v30; if ( (unsigned int)++v31 >= *(_DWORD *)(v4 + 60) ) { v5 = v32; goto LABEL_19; } } v17 = *(_DWORD *)(*(_DWORD *)(v4 + 44) + 4 * v31); v15 = v33; *v33 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); if ( v36 >= 0x10 ) operator delete(v34); return v15; } LABEL_19: if ( !sub_63F4A0((_DWORD *)v4) ) { v14 = v36 < 0x10; v15 = v33; *v33 = 0; if ( !v14 ) { operator delete(v34); return v15; } return v15; } v18 = *(_DWORD *)(*(_DWORD *)(v4 + 44) + 4 * *(_DWORD *)(v4 + 60)); sub_4017F0((const void **)(v18 + 20), (const void **)&v34, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v18 + 48) = v37; v19 = *(_DWORD *)(v4 + 44); v20 = *(_DWORD *)(v19 + 4 * *(_DWORD *)(v4 + 60)); if ( v20 ) { v32 = *(_DWORD *)(v19 + 4 * *(_DWORD *)(v4 + 60)); InterlockedIncrement((volatile LONG *)(v20 + 4)); v5 = v32; } ++*(_DWORD *)(v4 + 60); sub_63F370((_DWORD **)v5, &v27); v21 = (signed int)v28; *(_DWORD *)(v4 + 4) = (signed int)v27; *(_DWORD *)(v4 + 8) = v21; if ( sub_63F270((char *)v4, *(_DWORD *)(v5 + 12)) ) { v23 = (_DWORD *)(v4 + 64); sub_63F190((_DWORD *)v4, *(LPCSTR *)(v4 + 96), v4 + 72, v4 + 64); v24 = *(_DWORD *)(v4 + 40); *v23 += *(_DWORD *)(v4 + 36); *(_DWORD *)(v4 + 68) += v24; if ( *(_BYTE *)(v4 + 108) == 1 ) { v25 = *(float *)(v4 + 24); *v23 += (signed int)*(float *)(v4 + 20); *(_DWORD *)(v4 + 68) += (signed int)v25; } (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 8))(v4); sub_63ED50(v4); v26 = v33; *(_DWORD *)(v4 + 96) = 0; *v26 = v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); v29 = 1; if ( v36 >= 0x10 ) operator delete(v34); v36 = 15; v35 = 0; LOBYTE(v34) = 0; LOBYTE(v38) = 0; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v26; } else { v14 = v36 < 0x10; v22 = v33; *v33 = 0; v29 = 1; if ( !v14 ) operator delete(v34); v36 = 15; v35 = 0; LOBYTE(v34) = 0; LOBYTE(v38) = 0; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v22; } return result; } //----- (0063F990) -------------------------------------------------------- _DWORD *__thiscall sub_63F990(_DWORD *this) { _DWORD *result; // eax result = this; *this = &ScreenBoardTexture::`vftable'; this[11] = 0; this[12] = 0; this[13] = 0; this[3] = 0; this[4] = 0; this[26] = 0; *((_BYTE *)this + 108) = 0; return result; } // 9F1044: using guessed type void *ScreenBoardTexture::`vftable'; //----- (0063F9B0) -------------------------------------------------------- int __thiscall sub_63F9B0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int *v3; // ecx int *v4; // edi void *v5; // eax int result; // eax v1 = this; v2 = (int *)this[12]; v3 = (int *)this[11]; if ( v3 != v2 ) { v4 = sub_63FFD0(v2, v2, v3); sub_467720(v4, (int *)v1[12]); v1[12] = v4; } v5 = (void *)v1[3]; v1[15] = 0; if ( v5 ) { DeleteObject(v5); v1[3] = 0; } result = v1[4]; if ( result ) { result = DeleteObject((HGDIOBJ)v1[4]); v1[4] = 0; } return result; } //----- (0063FA70) -------------------------------------------------------- bool __thiscall sub_63FA70(float *this, int a2, int a3, int a4, int a5) { float *v5; // ebx float v6; // eax float v7; // ecx double v8; // st7 signed int v9; // eax double v10; // st7 int v11; // edi int v12; // esi _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax int v20; // ecx int v21; // eax int v22; // esi _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax _DWORD *v26; // edi _DWORD *v27; // esi volatile LONG *v28; // eax void (__thiscall ***v29)(void *, signed int); // esi HBRUSH v30; // eax int *v31; // eax HFONT v32; // eax int v33; // [esp-8h] [ebp-98h] int v34; // [esp-4h] [ebp-94h] _DWORD *v35; // [esp+10h] [ebp-80h] int v36; // [esp+14h] [ebp-7Ch] int v37; // [esp+18h] [ebp-78h] int v38; // [esp+1Ch] [ebp-74h] int v39; // [esp+20h] [ebp-70h] float v40; // [esp+24h] [ebp-6Ch] float v41; // [esp+28h] [ebp-68h] int v42; // [esp+2Ch] [ebp-64h] int v43; // [esp+30h] [ebp-60h] int v44; // [esp+34h] [ebp-5Ch] void *v45; // [esp+38h] [ebp-58h] void *v46; // [esp+3Ch] [ebp-54h] char v47; // [esp+43h] [ebp-4Dh] LOGFONTA lf; // [esp+44h] [ebp-4Ch] int v49; // [esp+8Ch] [ebp-4h] v40 = 0.0; v5 = this; v41 = 1.0; v39 = a4; *((_DWORD *)this + 9) = 2; *((_DWORD *)this + 10) = 2; v6 = v40; *((_DWORD *)this + 7) = a2; v7 = v41; v5[5] = v6; v8 = v5[5]; *((_DWORD *)v5 + 8) = a3; v5[6] = v7; v9 = (signed int)v8; v10 = v5[6]; *((_DWORD *)v5 + 7) += v9; *((_DWORD *)v5 + 8) += (signed int)v10; v11 = *((_DWORD *)v5 + 7) + 2; v12 = *((_DWORD *)v5 + 8) + 2; if ( v11 > 1024 || v12 > 256 ) return 0; v37 = 3; v36 = 2; v38 = 0; v47 = byte_BA4774; byte_BA4774 = 1; if ( !dword_AD8BB8 ) { v14 = operator new(0x70u); v46 = v14; v49 = 0; v15 = v14 ? sub_8698C0(v14, 0x400u, 0x100u, &unk_ABDB18, 1u, 1) : 0; v49 = -1; v16 = sub_865FA0((int)v15, &v36); sub_56FF80(&dword_AD8BB8, (int)v16); if ( !dword_AD8BB8 ) return 0; } if ( !dword_AD8BBC ) { v17 = operator new(0x70u); v46 = v17; v49 = 1; v18 = v17 ? sub_8698C0(v17, 0x400u, 0x100u, &unk_ABDB18, 1u, 1) : 0; v49 = -1; v19 = sub_865FA0((int)v18, &v36); sub_56FF80(&dword_AD8BBC, (int)v19); if ( !dword_AD8BBC ) return 0; } v20 = 1024 / v11; if ( !(1024 / v11) ) return 0; v21 = 1024 / v12; if ( !(1024 / v12) ) return 0; v43 = v21 * v20; v22 = a5 / (v21 * v20); v42 = a5 / (v21 * v20); if ( a5 % (v21 * v20) ) v42 = ++v22; sub_63F9B0(v5); v46 = 0; if ( v22 > 0 ) { do { v23 = operator new(0x70u); v45 = v23; v49 = 2; if ( v23 ) v24 = sub_8698C0(v23, 0x400u, 0x400u, &unk_ABDAD0, 1u, 1); else v24 = 0; v49 = -1; v25 = sub_865FA0((int)v24, &v36); v26 = v25; v35 = v25; if ( v25 ) InterlockedIncrement(v25 + 1); v49 = 3; if ( !v26 ) return 0; v44 = 0; if ( v43 > 0 ) { do { v27 = operator new(0x34u); v45 = v27; LOBYTE(v49) = 4; if ( v27 ) { v34 = v44; v41 = COERCE_FLOAT(&v33); v33 = (int)v26; InterlockedIncrement(v26 + 1); v28 = sub_63F5A0(v27, (int)v5, v33, v34); } else { v28 = 0; } v45 = (void *)v28; if ( v28 ) InterlockedIncrement(v28 + 1); LOBYTE(v49) = 5; sub_4E7210((_DWORD *)v5 + 11, (char *)&v45); v29 = (void (__thiscall ***)(void *, signed int))v45; LOBYTE(v49) = 3; if ( v45 && !InterlockedDecrement((volatile LONG *)v45 + 1) ) (**v29)(v29, 1); ++v44; } while ( v44 < v43 ); v22 = v42; } v49 = -1; if ( !InterlockedDecrement(v26 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v26)(v26, 1); v46 = (char *)v46 + 1; } while ( (signed int)v46 < v22 ); } byte_BA4774 = v47; v34 = 0; v5[15] = 0.0; v30 = CreateSolidBrush(v34); *((_DWORD *)v5 + 4) = v30; if ( !v30 ) return 0; v31 = sub_420870(v39); *(_WORD *)&lf.lfUnderline = 0; *(_WORD *)&lf.lfItalic = *((unsigned __int8 *)v31 + 12); lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfOutPrecision = *((_BYTE *)v31 + 20); lf.lfClipPrecision = 0; lf.lfHeight = *v31; lf.lfWidth = 0; lf.lfCharSet = *((_BYTE *)v31 + 16); lf.lfQuality = *((_BYTE *)v31 + 24); lf.lfWeight = v31[2]; lf.lfPitchAndFamily = *((_BYTE *)v31 + 28); lstrcpyA(lf.lfFaceName, (LPCSTR)v31[8]); v32 = CreateFontIndirectA(&lf); *((_DWORD *)v5 + 3) = v32; return v32 != 0; } // AD8BB8: using guessed type int dword_AD8BB8; // AD8BBC: using guessed type int dword_AD8BBC; // BA4774: using guessed type char byte_BA4774; //----- (0063FE40) -------------------------------------------------------- int __thiscall sub_63FE40(_DWORD *this) { _DWORD *v1; // ebx void (__thiscall ***v2)(_DWORD, signed int); // esi void (__thiscall ***v3)(_DWORD, signed int); // esi v1 = this; if ( dword_AD8BB8 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BB8; if ( !InterlockedDecrement((volatile LONG *)(dword_AD8BB8 + 4)) && v2 ) (**v2)(v2, 1); dword_AD8BB8 = 0; } v3 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BBC; if ( dword_AD8BBC ) { if ( !InterlockedDecrement((volatile LONG *)(dword_AD8BBC + 4)) && v3 ) (**v3)(v3, 1); dword_AD8BBC = 0; } return sub_63F9B0(v1); } // AD8BB8: using guessed type int dword_AD8BB8; // AD8BBC: using guessed type int dword_AD8BBC; //----- (0063FED0) -------------------------------------------------------- void __cdecl sub_63FED0(int *a1, int *a2) { int v2; // edi int v3; // esi int v4; // eax int v5; // esi v2 = *a1; if ( *a1 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v3 = *a1; if ( *a1 != *a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *a2; *a1 = *a2; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = *a2; if ( *a2 != v2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); } if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } } //----- (0063FFD0) -------------------------------------------------------- int *__cdecl sub_63FFD0(int *a1, int *a2, int *a3) { int *v3; // edi int *v4; // ebx int v5; // esi int v6; // eax v3 = a1; if ( a1 == a2 ) return a3; v4 = a3; do { v5 = *v4; if ( *v4 != *v3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = *v3; *v4 = *v3; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } ++v3; ++v4; } while ( v3 != a2 ); return v4; } //----- (00640040) -------------------------------------------------------- void *__thiscall sub_640040(void *this, char a2) { void *v2; // esi v2 = this; sub_63F500((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00640070) -------------------------------------------------------- int *__cdecl sub_640070(int *a1, int *a2, int *a3) { int *v3; // esi int *v4; // edi int v5; // eax v3 = a1; if ( a1 == a2 ) return a3; v4 = a3; do { if ( v4 ) { v5 = *v3; *v4 = *v3; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } ++v3; ++v4; } while ( v3 != a2 ); return v4; } //----- (00640150) -------------------------------------------------------- bool __thiscall sub_640150(int this, float a2) { return *(_BYTE *)(this + 28) && a2 - *(float *)(this + 20) <= *(float *)(this + 24); } //----- (006401B0) -------------------------------------------------------- int __usercall sub_6401B0@(int a1@, int a2@) { int v2; // esi int v3; // edi int v4; // ebx int result; // eax int x; // [esp+4h] [ebp-Ch] unsigned int v7; // [esp+8h] [ebp-8h] HDC hdc; // [esp+Ch] [ebp-4h] v2 = a1; if ( *(_DWORD *)(a1 + 48) ) { (*(void (__stdcall **)(_DWORD, HDC *, int))(**(_DWORD **)(a1 + 48) + 60))(*(_DWORD *)(a1 + 48), &hdc, a2); SetBkMode(hdc, 1); SelectObject(hdc, dword_AD8BC4); v3 = *(_DWORD *)(v2 + 108); x = *(_DWORD *)(v2 + 104); v7 = 0; if ( *(_DWORD *)(v2 + 56) ) { v4 = v2 + 60; do { TextOutA(hdc, x, v3, *(LPCSTR *)v4, *(_DWORD *)(v4 + 16)); v3 += *(_DWORD *)(v2 + 100) + 1; v4 += 4; ++v7; } while ( v7 < *(_DWORD *)(v2 + 56) ); } result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 48) + 64))(*(_DWORD *)(v2 + 48)); } return result; } //----- (00640290) -------------------------------------------------------- char __usercall sub_640290@(LONG a1@, _DWORD *a2@, _DWORD *a3@, HDC hdc, unsigned int a5) { const CHAR *v5; // edi struct tagSIZE psizl; // [esp+4h] [ebp-8h] v5 = (const CHAR *)a1; *a2 = 0; *a3 = 0; if ( a1 ) { LOBYTE(a1) = *(_BYTE *)a1; if ( (_BYTE)a1 ) { do { if ( IsDBCSLeadByte(a1) ) { GetTextExtentPoint32A(hdc, v5, 2, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; v5 += 2; *a2 += 2; } else { GetTextExtentPoint32A(hdc, v5, 1, &psizl); a1 = psizl.cx; if ( psizl.cx + *a3 > a5 ) return a1; ++v5; ++*a2; } *a3 += a1; LOBYTE(a1) = *v5; } while ( *v5 ); } } return a1; } //----- (00640310) -------------------------------------------------------- bool __thiscall sub_640310(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v4; // eax int v5; // ecx int v6; // eax v1 = this; v2 = *(_DWORD *)(this[8] + 40); if ( !v2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)v2 + 20))(); if ( !v4 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v4 + 72))(v4, 0, v1 + 13); if ( !v1[13] ) return 0; v5 = *(_DWORD *)(dword_AD8BC8 + 40); if ( !v5 ) return 0; v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))(); if ( !v6 ) return 0; (*(void (__stdcall **)(int, _DWORD, _DWORD *))(*(_DWORD *)v6 + 72))(v6, 0, v1 + 12); return v1[12] != 0; } // AD8BC8: using guessed type int dword_AD8BC8; //----- (00640380) -------------------------------------------------------- int __thiscall sub_640380(_DWORD *this) { _DWORD *v1; // edi int result; // eax LONG v3; // eax HDC v4; // ST08_4 int v5; // eax int v6; // esi unsigned int v7; // eax int v8; // edx int v9; // [esp+0h] [ebp-3Ch] struct tagSIZE psizl; // [esp+8h] [ebp-34h] unsigned int v11; // [esp+10h] [ebp-2Ch] int v12; // [esp+14h] [ebp-28h] int v13; // [esp+18h] [ebp-24h] _DWORD *v14; // [esp+1Ch] [ebp-20h] LONG v15; // [esp+20h] [ebp-1Ch] HDC hDC; // [esp+24h] [ebp-18h] struct tagRECT rc; // [esp+28h] [ebp-14h] v1 = this; result = this[12]; if ( result ) { this[14] = 0; this[23] = 0; this[24] = 0; this[25] = 0; (*(void (__stdcall **)(int, HDC *, int))(*(_DWORD *)result + 60))(result, &hDC, v9); SetRect(&rc, 0, 0, 148, 81); FillRect(hDC, &rc, dword_AD8BC0); SelectObject(hDC, dword_AD8BC4); v15 = v1[3]; GetTextExtentPoint32A(hDC, "W", 1, &psizl); v1[25] = psizl.cy; v13 = 0; v14 = v1 + 19; do { v3 = v15; v4 = hDC; *(v14 - 4) = v15; sub_640290(v3, &v12, &v11, v4, 0x78u); if ( !v12 ) break; v15 += v12; *v14 = v12; if ( v1[23] < v11 ) v1[23] = v11; v5 = v13; ++v1[14]; ++v14; v13 = v5 + 1; } while ( (unsigned int)(v5 + 1) < 4 ); v6 = v1[23]; v7 = (unsigned int)(148 - v6) >> 1; v8 = v1[14] * (v1[25] + 1) - 1; v1[26] = v7; v1[27] = 69 - v8; v1[28] = v7 - 5; v1[30] = v7 + v6 + 4; v1[31] = 73; v1[29] = 69 - v8 - 5; v1[23] = v6 + 9; v1[24] = v8 + 9; result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 64))(v1[12]); } return result; } // 640380: could not find valid save-restore pair for ebx //----- (006404E0) -------------------------------------------------------- int __thiscall sub_6404E0(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // eax _BYTE *v4; // edx int *v5; // eax signed int v6; // ebx signed int v7; // edi _BYTE *v8; // edx int *v9; // eax signed int v10; // ebx signed int v11; // edi _BYTE *v12; // edx int *v13; // eax signed int v14; // ebx signed int v15; // edi _BYTE *v16; // edx int *v17; // eax signed int v18; // ebx signed int v19; // edi int v20; // eax void *v21; // ST18_4 int v22; // eax unsigned int v23; // ecx int v24; // ecx int *v25; // edi int v26; // eax int *v27; // edx int v28; // eax int v29; // [esp+Ch] [ebp-24h] int v30; // [esp+10h] [ebp-20h] int v31; // [esp+14h] [ebp-1Ch] unsigned int v32; // [esp+18h] [ebp-18h] int v33; // [esp+1Ch] [ebp-14h] int v34; // [esp+20h] [ebp-10h] int v35; // [esp+24h] [ebp-Ch] int v36; // [esp+28h] [ebp-8h] v1 = this; result = this[12]; if ( result ) { v33 = 0; v34 = 0; v35 = 147; v36 = 80; result = (*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)result + 52))(result, &v30, &v33, 0); if ( !result ) { if ( v31 ) { v3 = v1[29]; *((_BYTE *)v1 + 131) = 0; v29 = v1[32]; v4 = &unk_AB3158; v5 = (int *)(v31 + v30 * (v3 - 3) + 4 * v1[28] - 12); v32 = v30 - 16; v6 = 4; do { v7 = 4; do { if ( *v4 == 1 ) { *v5 = v29; } else if ( *v4 == 2 ) { *v5 = 16712191; } ++v5; ++v4; --v7; } while ( v7 ); v5 = (int *)((char *)v5 + v32); --v6; } while ( v6 ); v8 = &unk_AB3168; v9 = (int *)(v31 + v30 * v1[31] + 4 * v1[28] - 12); v32 = v30 - 16; v10 = 4; do { v11 = 4; do { if ( *v8 == 1 ) { *v9 = v29; } else if ( *v8 == 2 ) { *v9 = 16712191; } ++v9; ++v8; --v11; } while ( v11 ); v9 = (int *)((char *)v9 + v32); --v10; } while ( v10 ); v12 = &unk_AB3178; v13 = (int *)(v31 + v30 * (v1[29] - 3) + 4 * v1[30]); v32 = v30 - 16; v14 = 4; do { v15 = 4; do { if ( *v12 == 1 ) { *v13 = v29; } else if ( *v12 == 2 ) { *v13 = 16712191; } ++v13; ++v12; --v15; } while ( v15 ); v13 = (int *)((char *)v13 + v32); --v14; } while ( v14 ); v16 = &unk_AB3188; v17 = (int *)(v31 + v30 * v1[31] + 4 * v1[30]); v32 = v30 - 16; v18 = 4; do { v19 = 4; do { if ( *v16 == 1 ) { *v17 = v29; } else if ( *v16 == 2 ) { *v17 = 16712191; } ++v17; ++v16; --v19; } while ( v19 ); v17 = (int *)((char *)v17 + v32); --v18; } while ( v18 ); v20 = v1[28]; v21 = (void *)(v31 + v30 * (v1[29] - 2) + 4 * v20); v32 = v1[30] - v20 + 1; memset32(v21, v29, v32); v22 = v1[28]; v23 = v1[30] - v22 + 1; v32 = v31 + v30 * (v1[31] + 2) + 4 * v22; memset32((void *)v32, v29, v23); v24 = v30; v25 = (int *)(v31 + v30 * v1[29] + 4 * v1[28] - 8); v26 = v1[31] - v1[29] + 1; if ( v1[31] - v1[29] != -1 ) { do { *v25 = v29; v25 = (int *)((char *)v25 + v24); --v26; } while ( v26 ); v24 = v30; } v27 = (int *)(v31 + v24 * v1[29] + 4 * v1[30] + 8); v28 = v1[31] - v1[29] + 1; if ( v1[31] - v1[29] != -1 ) { do { *v27 = v29; v27 = (int *)((char *)v27 + v24); --v28; } while ( v28 ); } result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 56))(v1[12]); } } } return result; } //----- (00640750) -------------------------------------------------------- void __thiscall sub_640750(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax int v3; // ecx int v4; // eax int v5; // edx _DWORD *v6; // esi int v7; // eax bool v8; // zf signed int v9; // edi int v10; // eax int v11; // eax int v12; // esi int v13; // eax int v14; // edx int v15; // eax int v16; // esi int v17; // eax int v18; // edx int v19; // eax int v20; // esi int v21; // eax int v22; // edx int v23; // [esp+8h] [ebp-3Ch] int v24; // [esp+Ch] [ebp-38h] int v25; // [esp+14h] [ebp-30h] _DWORD *v26; // [esp+18h] [ebp-2Ch] unsigned int v27; // [esp+1Ch] [ebp-28h] int v28; // [esp+20h] [ebp-24h] char *v29; // [esp+24h] [ebp-20h] unsigned int v30; // [esp+28h] [ebp-1Ch] char *v31; // [esp+2Ch] [ebp-18h] int v32; // [esp+30h] [ebp-14h] int v33; // [esp+34h] [ebp-10h] int v34; // [esp+38h] [ebp-Ch] int v35; // [esp+3Ch] [ebp-8h] v1 = this; if ( this[12] ) { if ( this[13] ) { v2 = this[12]; v32 = 0; v33 = 0; v34 = 148; v35 = 81; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v2 + 52))(v2, &v25, &v32, 0) ) { v3 = v1[11]; v32 = v1[10]; v33 = v3; v34 = v32 + 148; v4 = v1[13]; v35 = v3 + 81; if ( !(*(int (__stdcall **)(int, int *, int *, _DWORD))(*(_DWORD *)v4 + 52))(v4, &v28, &v32, 0) ) { v5 = (int)v29; v6 = v26; v24 = v28 - 592; v23 = v25 - 592; v31 = v29; v30 = 81; do { memset(v31, 0, 0x250u); v31 += v28; --v30; } while ( v30 ); v31 = (char *)(v5 + v28 * (v1[29] - 3) + 4 * v1[28]); v30 = 4; do { v27 = v1[23]; memset32(v31, 2147483648, v27); v7 = v28; v31 += v28; --v30; } while ( v30 ); v8 = v1[24] == 0; v31 = (char *)(v5 + v28 * (v1[29] + 1) + 4 * v1[28] - 12); v30 = 0; if ( !v8 ) { do { v27 = v1[23] + 7; memset32(v31, 2147483648, v27); v7 = v28; v31 += v28; ++v30; } while ( v30 < v1[24] ); } v31 = (char *)(v5 + v7 * v1[31] + 4 * v1[28]); v30 = 4; do { v27 = v1[23]; memset32(v31, 2147483648, v27); v31 += v28; --v30; } while ( v30 ); v30 = 81; while ( 1 ) { v9 = 37; do { v10 = *v6 & 0xFFFFFF; if ( v10 == 16712191 ) { *(_DWORD *)v5 = 2147483648; *(_BYTE *)(v5 + 3) = -128; goto LABEL_21; } if ( v10 != v1[32] ) { if ( v10 == 16711935 ) goto LABEL_21; v10 = v1[33]; } *(_DWORD *)v5 = v10; *(_BYTE *)(v5 + 3) = -1; LABEL_21: v11 = v6[1]; v12 = (int)(v6 + 1); v13 = v11 & 0xFFFFFF; v14 = v5 + 4; if ( v13 == 16712191 ) { *(_DWORD *)v14 = 2147483648; *(_BYTE *)(v14 + 3) = -128; goto LABEL_27; } if ( v13 != v1[32] ) { if ( v13 == 16711935 ) goto LABEL_27; v13 = v1[33]; } *(_DWORD *)v14 = v13; *(_BYTE *)(v14 + 3) = -1; LABEL_27: v15 = *(_DWORD *)(v12 + 4); v16 = v12 + 4; v17 = v15 & 0xFFFFFF; v18 = v14 + 4; if ( v17 == 16712191 ) { *(_DWORD *)v18 = 2147483648; *(_BYTE *)(v18 + 3) = -128; goto LABEL_33; } if ( v17 != v1[32] ) { if ( v17 == 16711935 ) goto LABEL_33; v17 = v1[33]; } *(_DWORD *)v18 = v17; *(_BYTE *)(v18 + 3) = -1; LABEL_33: v19 = *(_DWORD *)(v16 + 4); v20 = v16 + 4; v21 = v19 & 0xFFFFFF; v22 = v18 + 4; if ( v21 == 16712191 ) { *(_DWORD *)v22 = 2147483648; *(_BYTE *)(v22 + 3) = -128; goto LABEL_39; } if ( v21 != v1[32] ) { if ( v21 == 16711935 ) goto LABEL_39; v21 = v1[33]; } *(_DWORD *)v22 = v21; *(_BYTE *)(v22 + 3) = -1; LABEL_39: v5 = v22 + 4; v6 = (_DWORD *)(v20 + 4); --v9; } while ( v9 ); v5 += v24; v6 = (_DWORD *)((char *)v6 + v23); if ( !--v30 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[13] + 56))(v1[13]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[12] + 56))(v1[12]); return; } } } } } } } //----- (00640A30) -------------------------------------------------------- void __thiscall sub_640A30(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // esi v1 = this; *this = &SpeechBD::`vftable'; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } operator delete[]((void *)v1[3]); v3 = v1[9]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9F106C: using guessed type void *SpeechBD::`vftable'; //----- (00640AE0) -------------------------------------------------------- void __thiscall sub_640AE0(__int16 *this, float a2, int a3, int a4) { __int16 *v4; // esi char *v5; // eax char *v6; // edi float *v7; // eax float v8; // ST28_4 float v9; // ST2C_4 float v10; // ST30_4 double v11; // st7 double v12; // st6 int v13; // eax double v14; // st7 float v15; // ST08_4 float *v16; // ebx float v17; // ST04_4 float v18; // ST28_4 float v19; // ST2C_4 float v20; // ST30_4 int *v21; // eax bool v22; // zf int v23; // eax int v24; // [esp+30h] [ebp-20h] int v25; // [esp+34h] [ebp-1Ch] int v26; // [esp+38h] [ebp-18h] int v27; // [esp+3Ch] [ebp-14h] float v28; // [esp+40h] [ebp-10h] int v29; // [esp+44h] [ebp-Ch] float v30; // [esp+48h] [ebp-8h] float v31; // [esp+4Ch] [ebp-4h] v4 = this; v5 = sub_664AB0(dword_AD8C90, this[4]); v6 = v5; if ( !v5 ) goto LABEL_24; v7 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 196))(v5); v8 = *(float *)(dword_B66FB0 + 88) - *v7; v9 = *(float *)(dword_B66FB0 + 92) - v7[1]; v10 = *(float *)(dword_B66FB0 + 96) - v7[2]; v30 = v9 * v9 + v8 * v8 + v10 * v10; v30 = sqrt(v30); v31 = v30; v11 = v30; if ( v30 > (double)flt_AB3198 ) { LABEL_24: *((_BYTE *)v4 + 28) = 0; return; } v12 = flt_AB319C; if ( flt_AB319C <= v11 ) { if ( flt_AB31A0 >= v11 ) { v31 = v11 - v12; v30 = flt_AB31A0 - v12; if ( 0.0 == v30 ) goto LABEL_11; v13 = sub_85C050(*((_DWORD **)v4 + 9), 3); v14 = 1.0 - v31 / v30; } else { v13 = sub_85C050(*((_DWORD **)v4 + 9), 3); v14 = 0.0; } } else { v13 = sub_85C050(*((_DWORD **)v4 + 9), 3); v14 = 1.0; } ++*(_DWORD *)(v13 + 88); *(float *)(v13 + 84) = v14; LABEL_11: sub_653B10(v6, (float *)&v24); *(float *)&v26 = *(float *)&v26 + 3.0; v15 = (double)(unsigned int)dword_AC2F78; v16 = (float *)a3; v17 = (double)(unsigned int)xRight; if ( sub_8F74F0(a3, v17, v15, v24, v25, v26, (int)&v27) ) { *(_WORD *)(*((_DWORD *)v4 + 9) + 28) &= 0xFFFEu; *(float *)&v27 = *(float *)&v27 - 74.0; v28 = v28 - 104.0; if ( *((_DWORD *)v6 + 169) ) v28 = v28 - 21.0; if ( byte_B9202B == 1 ) { v18 = v16[35] - *(float *)&v24; v19 = v16[36] - *(float *)&v25; v20 = v16[37] - *(float *)&v26; *(float *)&a3 = v19 * v19 + v18 * v18 + v20 * v20; *(float *)&a3 = sqrt(*(float *)&a3); *(float *)&a3 = *(float *)&a3 / (double)dword_AB31BC; v30 = 0.69999999; v21 = &a3; if ( *(float *)&a3 >= 0.69999999 ) v21 = (int *)&v30; v22 = *((_DWORD *)v6 + 169) == 0; a3 = *v21; v30 = 40.0; if ( !v22 ) v30 = 60.0; v28 = v28 - (1.0 - *(float *)&a3) * v30; } v23 = *((_DWORD *)v4 + 9); *(float *)(v23 + 88) = *(float *)&v27; *(float *)(v23 + 92) = v28; *(_DWORD *)(v23 + 96) = v29; sub_85BED0(*((_DWORD ***)v4 + 9), a2, 1); } else { *(_WORD *)(*((_DWORD *)v4 + 9) + 28) |= 1u; } } // AB3198: using guessed type float flt_AB3198; // AB319C: using guessed type float flt_AB319C; // AB31A0: using guessed type float flt_AB31A0; // AB31BC: using guessed type int dword_AB31BC; // B9202B: using guessed type char byte_B9202B; //----- (00640DA0) -------------------------------------------------------- char __userpurge sub_640DA0@(int a1@, int a2@, void *a3) { int v3; // esi size_t v4; // kr00_4 _BYTE *v5; // edx char *v6; // ecx char v7; // al int v8; // eax int v9; // esi v3 = a1; if ( a3 && *(_BYTE *)a3 ) { v4 = strlen((const char *)a3); if ( *(_DWORD *)(v3 + 16) < v4 ) { operator delete[](*(void **)(v3 + 12)); *(_DWORD *)(v3 + 12) = operator new[](v4 + 1); *(_DWORD *)(v3 + 16) = v4; } if ( *((_DWORD *)dword_AD8EBC + 12) > 0 && v4 ) memset(a3, 32, v4); v5 = *(_BYTE **)(v3 + 12); v6 = (char *)a3; do { v7 = *v6; *v5++ = *v6++; } while ( v7 ); LOBYTE(v8) = sub_640310((_DWORD *)v3); if ( (_BYTE)v8 ) { sub_640380((_DWORD *)v3); sub_6404E0((_DWORD *)v3); sub_6401B0(v3, a2); sub_640750((_DWORD *)v3); v8 = *(_DWORD *)(v3 + 48); if ( v8 ) LOBYTE(v8) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 8))(*(_DWORD *)(v3 + 48)); v9 = *(_DWORD *)(v3 + 52); if ( v9 ) LOBYTE(v8) = (*(int (__stdcall **)(int))(*(_DWORD *)v9 + 8))(v9); } } else { v8 = *(_DWORD *)(a1 + 12); if ( v8 ) { *(_BYTE *)v8 = 0; *(_DWORD *)(a1 + 56) = 0; } } return v8; } // 640DA0: could not find valid save-restore pair for edi //----- (00640E80) -------------------------------------------------------- unsigned __int8 *__thiscall sub_640E80(_DWORD *this, unsigned __int8 *a2) { unsigned __int8 *result; // eax _DWORD *v3; // ebx float *v4; // ecx signed int v5; // edi double v6; // st4 double v7; // st7 signed int v8; // esi signed int v9; // edx double v10; // rtt double v11; // st4 double v12; // st7 double v13; // rt0 signed int v14; // eax char v15; // [esp+4h] [ebp-18h] __int64 v16; // [esp+14h] [ebp-8h] result = a2; v3 = this; if ( (_BYTE)a2 ) { result = sub_417C60((char)a2); if ( result ) { v4 = sub_419EE0((float *)&v15, result[1], result[2], result[3], 0xFFu); if ( *v4 < 1.0 ) { if ( *v4 > 0.0 ) { v16 = (signed __int64)(*v4 * 255.0 + 0.5); v5 = v16; } else { v5 = 0; } } else { v5 = 255; } v6 = 1.0; v7 = 0.0; if ( v4[1] < 1.0 ) { if ( v4[1] > 0.0 ) { v16 = (signed __int64)(v4[1] * 255.0 + 0.5); v8 = v16; } else { v8 = 0; } v6 = 1.0; v7 = 0.0; } else { v8 = 255; } if ( v6 > v4[2] ) { v10 = v6; v11 = v7; v12 = v10; if ( v11 < v4[2] ) { v16 = (signed __int64)(v4[2] * 255.0 + 0.5); v9 = v16; } else { v9 = 0; } v13 = v11; v6 = v12; v7 = v13; } else { v9 = 255; } if ( v6 > v4[3] ) { if ( v7 < v4[3] ) { v16 = (signed __int64)(255.0 * v4[3] + 0.5); v14 = v16; } else { v14 = 0; } } else { v14 = 255; } result = (unsigned __int8 *)(v9 | ((v8 | ((v5 | (v14 << 8)) << 8)) << 8)); v3[32] = result; } } return result; } //----- (00641010) -------------------------------------------------------- unsigned __int8 *__thiscall sub_641010(_DWORD *this, unsigned __int8 *a2) { unsigned __int8 *result; // eax _DWORD *v3; // ebx float *v4; // ecx signed int v5; // edi double v6; // st4 double v7; // st7 signed int v8; // esi signed int v9; // edx double v10; // rtt double v11; // st4 double v12; // st7 double v13; // rt0 signed int v14; // eax char v15; // [esp+4h] [ebp-18h] __int64 v16; // [esp+14h] [ebp-8h] result = a2; v3 = this; if ( (_BYTE)a2 ) { result = sub_417C60((char)a2); if ( result ) { v4 = sub_419EE0((float *)&v15, result[1], result[2], result[3], 0xFFu); if ( *v4 < 1.0 ) { if ( *v4 > 0.0 ) { v16 = (signed __int64)(*v4 * 255.0 + 0.5); v5 = v16; } else { v5 = 0; } } else { v5 = 255; } v6 = 1.0; v7 = 0.0; if ( v4[1] < 1.0 ) { if ( v4[1] > 0.0 ) { v16 = (signed __int64)(v4[1] * 255.0 + 0.5); v8 = v16; } else { v8 = 0; } v6 = 1.0; v7 = 0.0; } else { v8 = 255; } if ( v6 > v4[2] ) { v10 = v6; v11 = v7; v12 = v10; if ( v11 < v4[2] ) { v16 = (signed __int64)(v4[2] * 255.0 + 0.5); v9 = v16; } else { v9 = 0; } v13 = v11; v6 = v12; v7 = v13; } else { v9 = 255; } if ( v6 > v4[3] ) { if ( v7 < v4[3] ) { v16 = (signed __int64)(255.0 * v4[3] + 0.5); v14 = v16; } else { v14 = 0; } } else { v14 = 255; } result = (unsigned __int8 *)(v9 | ((v8 | ((v5 | (v14 << 8)) << 8)) << 8)); v3[33] = result; } } return result; } //----- (006411A0) -------------------------------------------------------- int __thiscall sub_6411A0(_DWORD *this, void *a2, unsigned int a3) { _DWORD *v3; // esi void *v4; // edi unsigned int v5; // ebx unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // ST08_4 _WORD *v9; // ebx _DWORD *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // ebx _DWORD *v13; // eax _DWORD *v14; // ebx void *v15; // eax float *v16; // edi int result; // eax v3 = this; v4 = a2; v5 = (*(int (__thiscall **)(void *))(*(_DWORD *)a2 + 60))(a2); a2 = (void *)(*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 64))(v4); v6 = 81 * (a3 / (v5 / 0x94)); v7 = 148 * (a3 % (v5 / 0x94)); v3[11] = v6; v8 = (unsigned int)a2; v3[10] = v7; v9 = sub_8F5E10(v5, v8, v7, v6, 0x94u, 0x51u); v3[8] = v4; v10 = operator new(0xC4u); a2 = v10; if ( v10 ) { v11 = sub_868C00(v10, (int)v9); a2 = (void *)v11; } else { a2 = 0; v11 = 0; } v12 = (volatile LONG *)v3[9]; if ( v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); v11 = (volatile LONG *)a2; } v3[9] = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v13 = operator new(0x44u); a2 = v13; if ( v13 ) v14 = sub_863BB0(v13); else v14 = 0; sub_42AB40(v14, (int)v4); sub_45C760((_DWORD **)v14, 0); v14[7] = 2; a3 = v3[9]; a2 = v14; InterlockedIncrement(v14 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement(v14 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v14)(v14, 1); v15 = operator new(0x60u); a2 = v15; if ( v15 ) v16 = sub_85EBC0((float *)v15); else v16 = 0; ++*((_DWORD *)v16 + 22); v16[17] = 1.0; v16[18] = 1.0; v16[19] = 1.0; a3 = v3[9]; a2 = v16; InterlockedIncrement((volatile LONG *)v16 + 1); sub_8A6330((_DWORD *)(a3 + 156), (int *)&a2); if ( !InterlockedDecrement((volatile LONG *)v16 + 1) ) (**(void (__thiscall ***)(float *, signed int))v16)(v16, 1); sub_85C4D0((_DWORD *)v3[9]); result = sub_85BED0((_DWORD **)v3[9], 0.0, 0); *(_WORD *)(v3[9] + 28) |= 1u; return result; } //----- (006413E0) -------------------------------------------------------- int __thiscall sub_6413E0(int this, void *a2, unsigned int a3) { int v3; // esi signed int v4; // edi float *v5; // eax signed int v6; // ebx double v7; // st4 double v8; // st7 signed int v9; // edx double v10; // rtt double v11; // st4 double v12; // st7 double v13; // rt0 signed int v14; // eax float *v15; // ecx double v16; // st6 signed int v17; // ebx double v18; // st5 double v19; // st4 double v20; // st5 double v21; // st4 double v22; // rtt double v23; // st4 double v24; // rt0 double v25; // rt1 double v26; // st4 double v27; // st7 signed int v28; // edi signed int v29; // edx double v30; // rt0 double v31; // st4 double v32; // st7 double v33; // rt1 signed int v34; // eax double v35; // rt2 double v36; // st5 double v37; // st7 char v39; // [esp+10h] [ebp-28h] __int64 v40; // [esp+20h] [ebp-18h] int v41; // [esp+28h] [ebp-10h] int v42; // [esp+34h] [ebp-4h] v3 = this; v41 = this; v4 = 0; *(_DWORD *)this = &SpeechBD::`vftable'; *(_DWORD *)(this + 36) = 0; *(float *)(this + 20) = 0.0; *(_WORD *)(this + 8) = -1; v42 = 0; *(_BYTE *)(this + 28) = 1; *(_DWORD *)(this + 12) = 0; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 4) = a3; if ( a2 ) sub_6411A0((_DWORD *)this, a2, a3); *(float *)(v3 + 24) = 8.0; v5 = sub_419EE0((float *)&v39, 0xE1u, 0xFFu, 0xFFu, 0xFFu); if ( *v5 < 1.0 ) { if ( *v5 > 0.0 ) { v40 = (signed __int64)(*v5 * 255.0 + 0.5); v6 = v40; } else { v6 = 0; } } else { v6 = 255; } v7 = 1.0; v8 = 0.0; if ( v5[1] < 1.0 ) { if ( v5[1] > 0.0 ) { v40 = (signed __int64)(v5[1] * 255.0 + 0.5); v4 = v40; } v7 = 1.0; v8 = 0.0; } else { v4 = 255; } if ( v7 > v5[2] ) { v10 = v7; v11 = v8; v12 = v10; if ( v11 < v5[2] ) { v40 = (signed __int64)(v5[2] * 255.0 + 0.5); v9 = v40; } else { v9 = 0; } v13 = v11; v7 = v12; v8 = v13; } else { v9 = 255; } if ( v7 > v5[3] ) { if ( v8 < v5[3] ) { v40 = (signed __int64)(255.0 * v5[3] + 0.5); v14 = v40; } else { v14 = 0; } } else { v14 = 255; } *(_DWORD *)(v3 + 128) = v9 | ((v4 | ((v6 | (v14 << 8)) << 8)) << 8); v15 = sub_419EE0((float *)&v39, 0xE4u, 0xDAu, 0xB2u, 0xFFu); if ( *v15 < 1.0 ) { if ( *v15 > 0.0 ) { v21 = 255.0; v20 = 0.5; v40 = (signed __int64)(*v15 * 255.0 + 0.5); v17 = v40; } else { v20 = 0.5; v17 = 0; v21 = 255.0; } v22 = v21; v23 = v20; v18 = v22; v24 = v23; v19 = 0.0; v16 = v24; } else { v16 = 0.5; v17 = 255; v18 = 255.0; v19 = 0.0; } v25 = v19; v26 = 1.0; v27 = v25; if ( v15[1] < 1.0 ) { if ( v27 < v15[1] ) { v40 = (signed __int64)(v15[1] * v18 + v16); v28 = v40; } else { v28 = 0; } v26 = 1.0; } else { v28 = 255; } if ( v26 > v15[2] ) { v30 = v26; v31 = v27; v32 = v30; if ( v31 < v15[2] ) { v40 = (signed __int64)(v15[2] * v18 + v16); v29 = v40; } else { v29 = 0; } v33 = v31; v26 = v32; v27 = v33; } else { v29 = 255; } if ( v26 > v15[3] ) { v35 = v18; v36 = v27; v37 = v35; if ( v36 < v15[3] ) { v40 = (signed __int64)(v37 * v15[3] + v16); v34 = v40; } else { v34 = 0; } } else { v34 = 255; } *(_DWORD *)(v3 + 132) = v29 | ((v28 | ((v17 | (v34 << 8)) << 8)) << 8); return v3; } // 9F106C: using guessed type void *SpeechBD::`vftable'; //----- (00641740) -------------------------------------------------------- void *__thiscall sub_641740(void *this, char a2) { void *v2; // esi v2 = this; sub_640A30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006417D0) -------------------------------------------------------- char __thiscall sub_6417D0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi volatile LONG **v9; // eax volatile LONG **v10; // ebx void (__thiscall ***v11)(_DWORD, signed int); // esi int v12; // eax volatile LONG *v13; // ebx volatile LONG **v14; // ebx int v15; // eax int v16; // ebx int v17; // eax volatile LONG *v18; // ebx volatile LONG **v19; // ebx int v20; // eax int v21; // ebx int v22; // eax volatile LONG *v23; // ebx volatile LONG **v24; // ebx int v25; // eax int v26; // ebx int v27; // eax volatile LONG *v28; // ebx const CHAR *v29; // eax volatile LONG **v30; // ebx int v31; // eax int v32; // ebx int v33; // eax volatile LONG *v34; // edi void (__thiscall ***v35)(_DWORD, signed int); // esi int v36; // [esp+58h] [ebp-20h] int v37; // [esp+5Ch] [ebp-1Ch] int v38; // [esp+60h] [ebp-18h] int v39; // [esp+64h] [ebp-14h] int v40; // [esp+68h] [ebp-10h] int v41; // [esp+74h] [ebp-4h] int v42; // [esp+80h] [ebp+8h] int v43; // [esp+80h] [ebp+8h] int v44; // [esp+80h] [ebp+8h] int v45; // [esp+80h] [ebp+8h] volatile LONG v46; // [esp+80h] [ebp+8h] int v47; // [esp+80h] [ebp+8h] v2 = this; v38 = 0; v3 = dword_BA6BA0; v41 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GMCommand.nif"); sub_8F66B0(v4, (int)&v38, v3); if ( !v38 ) return 0; v5 = sub_8FB140(v38, (int)"Frame", (int)&v39, (int)&v40, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"GMCommandWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v39; v42 = v40; v9 = sub_8FB140(v38, (int)"Panel01", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39 - v8, v40, (int)v9, (int)v2, 0, 0); v10 = sub_8FB140(v38, (int)"ClsNor", (int)&v39, (int)&v40, 0); sub_8FB650(v10, v38, (int)"ClsClick"); sub_8FB650(v10, v38, (int)"ClsOver"); sub_90C8D0(v39 - v8, v40 - v42, (int)v10, (int)v2); if ( sub_8F71E0(v38, (int)"WinTitle", &v39, &v40, &v36, &v37) ) { v12 = sub_421050(0); v13 = sub_8F4A20(v39 - v8, v40, v36, v37, v12, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v13 + 488))(v13, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v13 + 468))(v13, &dword_AA8D98); (*(void (__thiscall **)(volatile LONG *, void *))(*v13 + 472))(v13, &unk_9F10DC); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v38, (int)"Btn01Nor", (int)&v39, (int)&v40, 0); sub_8FE0F0(v39 - v8, v40, (int)v14, (int)v2, 1, 0, 0); v15 = *v14[9]; v16 = *(_DWORD *)(v15 + 24); v43 = *(_DWORD *)(v15 + 20); v17 = sub_421050(0); v18 = sub_8F4A20(v39 - v8, v40 + 1, v43, v16, v17, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); (*(void (__thiscall **)(volatile LONG *, const char *))(*v18 + 472))(v18, "̧˞"); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v19 = sub_8FB140(v38, (int)"Btn02Nor", (int)&v39, (int)&v40, 0); sub_8FE0F0(v39 - v8, v40, (int)v19, (int)v2, 2, 0, 0); v20 = *v19[9]; v21 = *(_DWORD *)(v20 + 24); v44 = *(_DWORD *)(v20 + 20); v22 = sub_421050(0); v23 = sub_8F4A20(v39 - v8, v40 + 1, v44, v21, v22, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 5); (*(void (__thiscall **)(volatile LONG *, void *))(*v23 + 472))(v23, &unk_9F1108); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v24 = sub_8FB140(v38, (int)"Btn03Nor", (int)&v39, (int)&v40, 0); sub_8FE0F0(v39 - v8, v40, (int)v24, (int)v2, 3, 0, 0); v25 = *v24[9]; v26 = *(_DWORD *)(v25 + 24); v45 = *(_DWORD *)(v25 + 20); v27 = sub_421050(0); v28 = sub_8F4A20(v39 - v8, v40 + 1, v45, v26, v27, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); v46 = *v28; v29 = sub_40C190(859917957); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v46 + 472))(v28, v29); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v30 = sub_8FB140(v38, (int)"Btn04Nor", (int)&v39, (int)&v40, 0); sub_8FE0F0(v39 - v8, v40, (int)v30, (int)v2, 4, 0, 0); v31 = *v30[9]; v32 = *(_DWORD *)(v31 + 24); v47 = *(_DWORD *)(v31 + 20); v33 = sub_421050(0); v34 = sub_8F4A20(v39 - v8, v40 + 1, v47, v32, v33, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); (*(void (__thiscall **)(volatile LONG *, void *))(*v34 + 472))(v34, &unk_9F112C); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 1.0, 0.5); v41 = -1; if ( v38 ) { v35 = (void (__thiscall ***)(_DWORD, signed int))v38; if ( !InterlockedDecrement((volatile LONG *)(v38 + 4)) ) { if ( v35 ) (**v35)(v35, 1); } } result = 1; } else { v11 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v11 ) (**v11)(v11, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00641E20) -------------------------------------------------------- void *__thiscall sub_641E20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GMCommandWin::`vftable'; *((_DWORD *)this + 58) = &GMCommandWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F113C: using guessed type void *GMCommandWin::`vftable'; // 9F115C: using guessed type void *GMCommandWin::`vftable'; //----- (00641EF0) -------------------------------------------------------- int __thiscall sub_641EF0(_DWORD **this, int a2) { int result; // eax if ( this[88] ) result = (*(int (__stdcall **)(int))(*this[88] + 464))(a2); return result; } //----- (00641F30) -------------------------------------------------------- char __thiscall sub_641F30(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // edi int v11; // ebx volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // eax const CHAR *v15; // eax int v16; // eax const CHAR *v17; // eax volatile LONG *v18; // eax int v19; // edx int v20; // eax const CHAR *v21; // eax int v22; // eax const CHAR *v23; // eax volatile LONG *v24; // eax int v25; // edx volatile LONG **v26; // eax volatile LONG **v27; // eax int v28; // ST3C_4 int v29; // eax const CHAR *v30; // eax volatile LONG **v31; // eax int v32; // ST3C_4 int v33; // eax volatile LONG *v34; // edi volatile LONG v35; // ebx const CHAR *v36; // eax int v37[5]; // [esp+50h] [ebp-3Ch] volatile LONG v38; // [esp+64h] [ebp-28h] volatile LONG *v39; // [esp+68h] [ebp-24h] int v40; // [esp+6Ch] [ebp-20h] int v41; // [esp+70h] [ebp-1Ch] int v42; // [esp+74h] [ebp-18h] int v43; // [esp+78h] [ebp-14h] int v44; // [esp+7Ch] [ebp-10h] int v45; // [esp+88h] [ebp-4h] volatile LONG **v46; // [esp+94h] [ebp+8h] volatile LONG *v47; // [esp+94h] [ebp+8h] volatile LONG *v48; // [esp+94h] [ebp+8h] volatile LONG *v49; // [esp+94h] [ebp+8h] volatile LONG *v50; // [esp+94h] [ebp+8h] volatile LONG *v51; // [esp+94h] [ebp+8h] v2 = (int)this; v42 = 0; v45 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v39 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v42; v45 = -1; if ( !v42 || InterlockedDecrement((volatile LONG *)(v42 + 4)) ) return 0; v5 = v42 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\GMArrest.nif"); sub_8F66B0(v8, (int)&v42, v7); if ( !v42 ) return 0; v9 = sub_8FB140(v42, (int)"Frame", (int)&v43, (int)&v44, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"PrivateStoreWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v42; v45 = -1; if ( !v42 || InterlockedDecrement((volatile LONG *)(v42 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v43; v11 = v44; v46 = sub_8FB140(v42, (int)"ClsNor", (int)&v43, (int)&v44, v39); sub_8FB650(v46, v42, (int)"ClsClick"); sub_8FB650(v46, v42, (int)"ClsOver"); sub_8FE0F0(v43 - v10, v44 - v11, (int)v46, v2, 12, 0, 0); v12 = sub_8FB140(v42, (int)"Panel01", (int)&v43, (int)&v44, v39); v13 = sub_8F3EB0(v43 - v10, v44 - v11, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); if ( !sub_8F71E0(v42, (int)"WinTitle", &v43, &v44, &v40, &v41) ) goto LABEL_19; v14 = sub_421050(0); v47 = sub_8F4A20(v43 - v10, v44 - v11 + 1, v40, v41, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 1); (*(void (__stdcall **)(int *))(*v47 + 468))(&dword_AA8D98); v38 = *v47; v15 = sub_40C190(-1834971686); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v47, v15); (*(void (__stdcall **)(_DWORD))(*v47 + 240))(0); if ( !sub_8F71E0(v42, (int)"ID", &v43, &v44, &v40, &v41) ) { LABEL_19: v45 = -1; sub_410C00(&v42); return 0; } v16 = sub_421050(0); v48 = sub_8F4A20(v43 - v10, v44 - v11, v40, v41, v16, v2, 0, 0); v38 = *v48; v17 = sub_40C190(1179420810); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v48, v17); sub_456260(v37); LOBYTE(v45) = 1; sub_456000(v37, v10, v11 + 2); sub_455FF0(v37, v2); sub_456380(v37, v42); v18 = sub_4565F0(v37, (int)"InputID", 20, 1342177280, v39, 0); v19 = v42; *(_DWORD *)(v2 + 352) = v18; if ( !sub_8F71E0(v19, (int)"Time", &v43, &v44, &v40, &v41) || (v20 = sub_421050(0), v49 = sub_8F4A20(v43 - v10, v44 - v11, v40, v41, v20, v2, 0, 0), v38 = *v49, v21 = sub_40C190(-1952871019), (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v49, v21), *(_DWORD *)(v2 + 356) = sub_4565F0(v37, (int)"InputTime", 4, 1342185472, v39, 0), !sub_8F71E0(v42, (int)"Reason", &v43, &v44, &v40, &v41)) ) { LOBYTE(v45) = 0; sub_4562E0(v37); goto LABEL_19; } v22 = sub_421050(0); v50 = sub_8F4A20(v43 - v10, v44 - v11, v40, v41, v22, v2, 0, 0); v38 = *v50; v23 = sub_40C190(-1701849130); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v50, v23); v24 = sub_4565F0(v37, (int)"InputReason", 14, 1342177280, v39, 0); v25 = v42; *(_DWORD *)(v2 + 360) = v24; HIBYTE(v50) = sub_8F71E0(v25, (int)"Editor", &v43, &v44, &v40, &v41); v26 = sub_8FB140(v42, (int)"Editor", (int)&v43, (int)&v44, 0); sub_8F3EB0(v43 - v10, v44 - v11, (int)v26, v2, 0, 0); if ( HIBYTE(v50) ) *(_DWORD *)(v2 + 364) = sub_45A900(v43 - v10, v44 - v11, v40, v41, v2, 1342181380, 256, 4, 0, 0, 1); v27 = sub_8FB140(v42, (int)"Ok", (int)&v43, (int)&v44, v39); *(_DWORD *)(v2 + 344) = sub_8FE0F0(v43 - v10, v44 - v11, (int)v27, v2, 10, 0, 0); sub_8F71E0(v42, (int)"Ok", &v43, &v44, &v40, &v41); v28 = *(_DWORD *)(v2 + 344); v29 = sub_421050(0); v51 = sub_8F4A20(v43 - v10, v44 - v11, v40, v41, v29, v28, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); v38 = *v51; v30 = sub_40C190(-1718229792); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v38 + 472))(v51, v30); (*(void (__stdcall **)(_DWORD))(*v51 + 240))(0); v31 = sub_8FB140(v42, (int)"Modif", (int)&v43, (int)&v44, v39); *(_DWORD *)(v2 + 348) = sub_8FE0F0(v43 - v10, v44 - v11, (int)v31, v2, 13, 0, 0); sub_8F71E0(v42, (int)"Modif", &v43, &v44, &v40, &v41); v32 = *(_DWORD *)(v2 + 348); v33 = sub_421050(0); v34 = sub_8F4A20(v43 - v10, v44 - v11, v40, v41, v33, v32, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); v35 = *v34; v36 = sub_40C190(742205487); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v35 + 472))(v34, v36); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v45) = 0; sub_4562E0(v37); v45 = -1; sub_410C00(&v42); return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00642630) -------------------------------------------------------- char __thiscall sub_642630(_DWORD **this, char a2) { _DWORD **v2; // esi const char *v3; // edi const char *v4; // eax _DWORD *v5; // ecx const char *v6; // ebx const char *v7; // eax char *v8; // eax int v9; // edi int v10; // eax _DWORD *v11; // ecx int v12; // eax _DWORD *v13; // ecx int (*v14)(void); // edx char *v15; // eax int v17; // [esp-20h] [ebp-34h] int v18; // [esp-1Ch] [ebp-30h] int v19; // [esp-18h] [ebp-2Ch] int v20; // [esp-14h] [ebp-28h] int v21; // [esp-10h] [ebp-24h] int v22; // [esp-Ch] [ebp-20h] int v23; // [esp-8h] [ebp-1Ch] int v24; // [esp-4h] [ebp-18h] const char *v25; // [esp+10h] [ebp-4h] v2 = this; v3 = (const char *)(*(int (**)(void))(*this[88] + 452))(); v4 = (const char *)(*(int (**)(void))(*v2[91] + 452))(); v5 = v2[90]; v25 = v4; v6 = (const char *)(*(int (**)(void))(*v5 + 452))(); v7 = (const char *)(*(int (**)(void))(*v2[89] + 452))(); if ( v3 ) { if ( !strlen(v3) ) { v24 = -2037871133; LABEL_4: v8 = (char *)sub_40C190(v24); LOBYTE(v7) = (unsigned int)sub_462CA0(1, v8); return (char)v7; } if ( !strlen(v7) ) { v24 = -549244123; goto LABEL_4; } if ( !strlen(v6) ) { v24 = 542255471; goto LABEL_4; } if ( !strlen(v25) ) { v24 = -733139926; goto LABEL_4; } v9 = (unsigned __int16)atoi(v7); v10 = (*(int (**)(void))(*v2[91] + 452))(); v11 = v2[90]; v24 = v10; v12 = (*(int (**)(void))(*v11 + 452))(); v13 = v2[88]; v23 = v12; v14 = *(int (**)(void))(*v13 + 452); v22 = v9; v15 = (char *)v14(); if ( a2 ) { sub_416970((char *)&v17, v15); LOBYTE(v7) = sub_4C8870(v2[74], v17, v18, v19, v20, v21, v22, v23, v24); } else { sub_416970((char *)&v17, v15); LOBYTE(v7) = sub_4C8AD0(v2[74], v17, v18, v19, v20, v21, v22, v23, v24); } } return (char)v7; } //----- (006427B0) -------------------------------------------------------- char __thiscall sub_6427B0(volatile LONG *this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 10: result = sub_642630((_DWORD **)this, 1); break; case 11: case 12: result = sub_8F2BC0(this, 1, 0, 0); break; case 13: result = sub_642630((_DWORD **)this, 0); break; default: return result; } return result; } //----- (00642800) -------------------------------------------------------- int __cdecl sub_642800(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GMPrisonWin::`vftable'; *(_DWORD *)(v2 + 232) = &GMPrisonWin::`vftable'; *(_DWORD *)(v2 + 352) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F1438: using guessed type void *GMPrisonWin::`vftable'; // 9F1454: using guessed type void *GMPrisonWin::`vftable'; //----- (00642940) -------------------------------------------------------- void *__thiscall sub_642940(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GMPrisonWin::`vftable'; *((_DWORD *)this + 58) = &GMPrisonWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F1438: using guessed type void *GMPrisonWin::`vftable'; // 9F1454: using guessed type void *GMPrisonWin::`vftable'; //----- (00642980) -------------------------------------------------------- char __thiscall sub_642980(_DWORD *this, unsigned __int16 a2) { int v2; // esi unsigned __int8 (__thiscall *v3)(int, _DWORD); // edx int v4; // ebx int v5; // eax int *v6; // eax int v7; // esi int v8; // esi FILE *v9; // eax _DWORD *v10; // eax int v11; // esi int v12; // esi int *v13; // esi int v14; // esi FILE *v15; // eax _DWORD *v16; // eax int v17; // esi volatile LONG *v18; // eax volatile LONG *v19; // eax int v20; // eax int v21; // esi int v22; // edi int v23; // eax int v24; // esi int v25; // ecx volatile LONG *v26; // eax int v27; // esi unsigned __int16 v28; // di int v29; // eax int v30; // eax int v31; // ecx int v32; // edx int v33; // eax int v34; // eax char result; // al int v36; // [esp+1Ch] [ebp-14Ch] int v37; // [esp+34h] [ebp-134h] int v38; // [esp+38h] [ebp-130h] _DWORD *v39; // [esp+3Ch] [ebp-12Ch] _DWORD *v40; // [esp+40h] [ebp-128h] char v41; // [esp+44h] [ebp-124h] int v42; // [esp+144h] [ebp-24h] int v43; // [esp+148h] [ebp-20h] int v44; // [esp+14Ch] [ebp-1Ch] char v45; // [esp+150h] [ebp-18h] int *v46; // [esp+158h] [ebp-10h] int v47; // [esp+164h] [ebp-4h] v46 = &v36; v2 = dword_ACDA4C; v3 = *(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA4C + 16); v40 = this; v4 = 0; v38 = a2; v47 = 0; if ( !v3(dword_ACDA4C, a2) ) return 0; if ( a2 > *(_WORD *)(v2 + 200) ) return 0; v5 = 4 * a2; v37 = v5; v6 = (int *)(*(_DWORD *)(v2 + 196) + v5); if ( !*v6 ) return 0; v7 = *v6; if ( !*v6 ) return 0; if ( !byte_ACAD5C ) sub_420410(); v8 = v7 + 132; sprintf(&v41, "%sLoading\\%s.png", byte_ACAB50, v8); v9 = fopen(&v41, "r"); if ( v9 ) { fclose(v9); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v41, "%sLoading\\%s.tga", byte_ACAB50, v8); } v39 = 0; LOBYTE(v47) = 2; v10 = sub_486130((int)&v41); if ( v10 ) { v4 = (int)v10; v39 = v10; InterlockedIncrement(v10 + 1); } v47 = 1; if ( !v4 ) { v11 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, 0) ) { v13 = *(int **)(v11 + 196); if ( *v13 ) v12 = *v13; else v12 = 0; } else { v12 = 0; } if ( !byte_ACAD5C ) sub_420410(); v14 = v12 + 132; sprintf(&v41, "%sLoading\\%s.png", byte_ACAB50, v14); v15 = fopen(&v41, "r"); if ( v15 ) { fclose(v15); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v41, "%sLoading\\%s.tga", byte_ACAB50, v14); } v16 = sub_486130((int)&v41); if ( v16 ) { v4 = (int)v16; v39 = v16; InterlockedIncrement(v16 + 1); } else { v34 = sub_43D0D0(2u); if ( !v34 || (v4 = v34, (v39 = (_DWORD *)v34) == 0) ) { v17 = (int)v40; sub_642980(v38); goto LABEL_30; } InterlockedIncrement((volatile LONG *)(v34 + 4)); } } v17 = (int)v40; LABEL_30: v18 = sub_8F4010(0, 0, v4, 0, 0, 0, 1024, 768, 0, 0, 0); *(_DWORD *)(v17 + 36) = v18; (*(void (__thiscall **)(volatile LONG *, int))(*v18 + 468))(v18, xRight); (*(void (__stdcall **)(int))(**(_DWORD **)(v17 + 36) + 472))(dword_AC2F78); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17 + 36) + 240))(0); v19 = sub_8F4010(63, 487, v4, 0, 0, 780, 465, 77, 0, 0, 0); *(_DWORD *)(v17 + 40) = v19; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v17 + 40) + 276))(1.0); v20 = sub_911A50(); v21 = v40[12]; v22 = v20; if ( v21 != v20 ) { if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v40[12] = v22; if ( v22 ) InterlockedIncrement((volatile LONG *)(v22 + 4)); } v23 = sub_85C050((_DWORD *)v40[10], 3); v24 = (int)v40; v25 = v40[12]; v40[13] = v23; (*(void (__stdcall **)(int))(*(_DWORD *)v25 + 72))(v23); sub_599BC0(*(_DWORD **)(v24 + 52), *(_DWORD *)(v24 + 48)); v26 = sub_8F4010(63, 487, v4, 0, 0, 870, 465, 77, 0, 0, 0); *(_DWORD *)(v24 + 44) = v26; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v24 + 36)); v27 = dword_ACB234; v28 = v38; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB234 + 16))(dword_ACB234, v38) ) goto LABEL_58; if ( v28 > *(_WORD *)(v27 + 200) ) goto LABEL_58; v29 = *(_DWORD *)(v27 + 196); if ( !*(_DWORD *)(v29 + v37) ) goto LABEL_58; v30 = *(_DWORD *)(v29 + v37); if ( !v30 ) goto LABEL_58; v31 = *(_DWORD *)(v30 + 2); v32 = *(_DWORD *)(v30 + 6); v33 = *(_DWORD *)(v30 + 10); v42 = v31; v44 = v33; v43 = v32; v45 = 0; if ( !strcmp((const char *)&v42, "EldPri") ) { *((_BYTE *)v40 + 104) = 0; LOBYTE(v47) = 0; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } result = 1; } else { LABEL_58: LOBYTE(v47) = 0; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 1; } return result; } // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // ACB234: using guessed type int dword_ACB234; // ACDA4C: using guessed type int dword_ACDA4C; //----- (00642F00) -------------------------------------------------------- void __thiscall sub_642F00(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // ST00_4 _DWORD *v4; // ST00_4 _DWORD *v5; // ST00_4 int v6; // [esp+0h] [ebp-48h] _DWORD *v7; // [esp+34h] [ebp-14h] int *v8; // [esp+38h] [ebp-10h] int v9; // [esp+44h] [ebp-4h] v8 = &v6; v1 = this; v7 = this; v2 = this[12]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[12] = 0; } if ( v1[9] ) { v3 = (_DWORD *)v1[9]; v9 = 0; sub_8F9E00(&unk_BA6B10, v3); v9 = -1; v1[9] = 0; } if ( v1[10] ) { v4 = (_DWORD *)v1[10]; v9 = 2; sub_8F9E00(&unk_BA6B10, v4); v9 = -1; v1[10] = 0; } if ( v1[11] ) { v5 = (_DWORD *)v1[11]; v9 = 4; sub_8F9E00(&unk_BA6B10, v5); v1[11] = 0; } } //----- (00643020) -------------------------------------------------------- bool __thiscall sub_643020(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // edi v1 = this; v2 = this[15]; v3 = dword_AB7F34[dword_AB7F30]; if ( v2 != v3 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[15] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } return v1[15] != 0; } // AB7F30: using guessed type int dword_AB7F30; //----- (006430C0) -------------------------------------------------------- char __thiscall sub_6430C0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi v1 = this; v2 = 0; if ( !this[14] ) { v3 = operator new(0x20u); if ( v3 ) v2 = sub_435790(v3); v4 = v1[14]; if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[14] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } *(_DWORD *)(v1[14] + 8) = v1; } return 1; } //----- (006431B0) -------------------------------------------------------- char __thiscall sub_6431B0(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ecx unsigned __int16 v5; // ax int v7; // [esp+0h] [ebp-3Ch] char v8; // [esp+14h] [ebp-28h] int v9; // [esp+1Ch] [ebp-20h] int *v10; // [esp+2Ch] [ebp-10h] int v11; // [esp+38h] [ebp-4h] v10 = &v7; v2 = this; v11 = 0; if ( !a2 ) return 0; v3 = *(int **)(a2 + 16); v4 = *v3; if ( *(_DWORD *)(a2 + 12) == 1 ) { v2[16] = v4; v2[17] = v3[1]; *((_WORD *)v2 + 36) = *((_WORD *)v3 + 4); v5 = *((_WORD *)v2 + 32); v9 = 11; } else { *(_DWORD *)((char *)v2 + 74) = v4; *(_DWORD *)((char *)v2 + 78) = v3[1]; *((_WORD *)v2 + 41) = *((_WORD *)v3 + 4); v2[21] = *(int *)((char *)v3 + 10); v2[22] = *(int *)((char *)v3 + 14); v2[23] = *(int *)((char *)v3 + 18); v2[24] = *(int *)((char *)v3 + 22); *((_WORD *)v2 + 50) = *((_WORD *)v3 + 13); *((_WORD *)v2 + 51) = *((_WORD *)v3 + 14); v5 = *((_WORD *)v2 + 37); v9 = 10; } if ( !sub_642980(v2, v5) || !sub_643020(v2) || !sub_6430C0(v2) ) return 0; sub_8EF240(v2, &v8); *((_BYTE *)v2 + 32) = 1; return 1; } // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); //----- (00643310) -------------------------------------------------------- char __thiscall sub_643310(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // eax v1 = this; v2 = this[14]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[14] = 0; } v3 = v1[15]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[15] = 0; } sub_642F00(v1); *((_BYTE *)v1 + 32) = 0; v1[7] = 0; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4B6700(); return v4; } //----- (006433C0) -------------------------------------------------------- _DWORD *__thiscall sub_6433C0(void *this) { void *v1; // esi v1 = this; sub_6BEDA0(); sub_6BE700(); sub_6F3C20(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (006433F0) -------------------------------------------------------- int __stdcall sub_6433F0(int a1, int a2) { sub_6BE6F0(*(_BYTE *)(a2 + 102) & 1); sub_6824C0(byte_AD9238, a2); return a1; } //----- (00643550) -------------------------------------------------------- int __stdcall sub_643550(int a1, unsigned __int8 *a2) { sub_686030((int *)&byte_ADA230, a2, (int)a2); sub_633040((char *)&dword_AD46F0); return a1; } // AD46F0: using guessed type int dword_AD46F0; // ADA230: using guessed type char byte_ADA230; //----- (006435B0) -------------------------------------------------------- int __stdcall sub_6435B0(int a1, _WORD *a2) { signed int v2; // edi int v3; // esi sub_6F2B10(); v2 = 0; if ( *a2 > 0u ) { v3 = (int)(a2 + 1); do { sub_6F2BF0(v3); ++v2; v3 += 14; } while ( v2 < (unsigned __int16)*a2 ); } return a1; } //----- (00643610) -------------------------------------------------------- int __stdcall sub_643610(int a1, int *a2) { sub_6815B0(byte_AD9238, *a2, a2[1]); sub_6815D0(byte_AD9238, a2[2], a2[3]); return a1; } //----- (00643660) -------------------------------------------------------- void sub_643660() { sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); } // BA46D0: using guessed type int dword_BA46D0; //----- (00643690) -------------------------------------------------------- char __thiscall sub_643690(unsigned __int16 *this) { unsigned __int16 *v1; // esi unsigned __int16 *v2; // ebx int v3; // edi int v4; // esi int v5; // edx int v6; // esi int v7; // edi float *v8; // eax float v9; // ST10_4 int *v10; // edi _DWORD *v11; // eax int v12; // eax int v13; // esi int v14; // edx int v15; // eax int v16; // esi float v17; // ST0C_4 float v18; // ST08_4 char result; // al float v20; // ST10_4 float v21; // ST0C_4 int *v22; // eax int v23; // [esp+20h] [ebp-70h] int v24; // [esp+2Ch] [ebp-64h] int v25; // [esp+30h] [ebp-60h] int v26; // [esp+34h] [ebp-5Ch] int v27; // [esp+38h] [ebp-58h] char *v28; // [esp+3Ch] [ebp-54h] float v29; // [esp+40h] [ebp-50h] char v30; // [esp+44h] [ebp-4Ch] char v31; // [esp+68h] [ebp-28h] int v32; // [esp+70h] [ebp-20h] char v33[4]; // [esp+7Ch] [ebp-14h] int v34; // [esp+80h] [ebp-10h] int v35; // [esp+84h] [ebp-Ch] char v36; // [esp+88h] [ebp-8h] v1 = this; v2 = 0; v28 = (char *)this; v27 = 0; v29 = (flt_BA45B4 + flt_BA45B4) * 90.0 / 180.0; sub_85D810((float *)&v30, v29); sub_85DA90((float *)&v30, (float *)&v24, (float *)&dword_AB4FE8); sub_63AD90(byte_AD8A08); sub_6AD0E0(&unk_B91250); dword_AD8EBC[5448] = 0; byte_ADA230 = 0; v3 = v1[32]; v4 = dword_ACB234; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB234 + 16))(dword_ACB234, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v5 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v5 + 4 * v3) ) v2 = *(unsigned __int16 **)(v5 + 4 * v3); } } v6 = dword_ACDA4C; v7 = *v2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) ) { v8 = (float *)(*(_DWORD *)(v6 + 196) + 4 * v7); if ( *(_DWORD *)v8 ) v29 = *v8; else v29 = 0.0; } else { v29 = 0.0; } } else { v29 = 0.0; } *((_DWORD *)dword_AD8EBC + 1361) = *((_DWORD *)v2 + 18); *((float *)dword_AD8EBC + 374) = (double)*((unsigned int *)v2 + 18); if ( v29 != 0.0 ) { v27 = *(unsigned __int16 *)(LODWORD(v29) + 209); v9 = (double)v27; sub_692EF0((float *)byte_ADB468, v9); } v10 = (int *)(v2 + 1); v11 = sub_439D70(byte_ADB468, v33); if ( *v11 == *(_DWORD *)(v2 + 1) && v11[1] == *(_DWORD *)(v2 + 3) && v11[2] == *(_DWORD *)(v2 + 5) ) { sub_695790(1); sub_69E4D0(byte_ADB468); } else { byte_B6712C = *((_BYTE *)v2 + 58); v12 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v13 = v12; if ( v12 ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v12 + 740) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v13 + 740)); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(*(_DWORD *)(v13 + 572) + 532) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(*(_DWORD *)(v13 + 572) + 532)); sub_4A5C20((_DWORD **)v13); sub_4A5E20((_DWORD *)v13, 0); sub_4A5ED0((_DWORD *)v13, 0); } dword_B6711C = *v10; dword_B67120 = *(_DWORD *)(v2 + 3); dword_B67124 = *(_DWORD *)(v2 + 5); sub_695790(0); } if ( v29 != 0.0 ) { if ( *(_BYTE *)(LODWORD(v29) + 130) ) sub_698060(byte_ADB468); else sub_697FF0(byte_ADB468); } sub_6BA240(&dword_AB6520); v14 = *(_DWORD *)(v2 + 3); *(_DWORD *)v33 = *v10; v15 = *(_DWORD *)(v2 + 5); v34 = v14; v35 = v15; v36 = 0; if ( dword_AB6528 ) sub_6B8FC0((_DWORD *)dword_AB6528, (int)v33); sub_665FD0(dword_AD8C90); sub_67DDD0(dword_AD8EBC); v16 = (int)v28; v17 = (double)*(unsigned int *)(v28 + 70); v18 = (double)*(unsigned int *)(v28 + 66); result = sub_69AD10((float *)byte_ADB468, v18, v17, (int)&v23); if ( result ) { v20 = (double)*(unsigned int *)(v16 + 70); v21 = (double)*(unsigned int *)(v16 + 66); result = sub_699590(byte_ADB468, v21, v20); if ( !result ) { v35 = 0; v34 = 0; *(_DWORD *)v33 = 0; strncpy(v33, "Job1_Dn01", 0xCu); if ( sub_431080(v10, v33) ) { v22 = (int *)sub_4389C0((float *)v33, 0); v24 = *v22; v25 = v22[1]; v26 = v22[2]; } (*(void (__stdcall **)(int *, int *))(*(_DWORD *)dword_AD8EBC + 184))(&v23, &v24); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 76))(); sub_69E480(byte_ADB468, (char)dword_AD8EBC); v32 = 10; sub_8EF1C0(dword_ACDD68, &v31); result = (unsigned int)sub_8EF160((void *)v16); } } return result; } // 695790: using guessed type _DWORD __stdcall sub_695790(char); // 6BA240: using guessed type int __thiscall sub_6BA240(_DWORD); // AB4FE8: using guessed type int dword_AB4FE8; // AB6528: using guessed type int dword_AB6528; // ACB234: using guessed type int dword_ACB234; // ACDA4C: using guessed type int dword_ACDA4C; // ADA230: using guessed type char byte_ADA230; // B6711C: using guessed type int dword_B6711C; // B67120: using guessed type int dword_B67120; // B67124: using guessed type int dword_B67124; // B6712C: using guessed type char byte_B6712C; // BA45B4: using guessed type float flt_BA45B4; //----- (00643B20) -------------------------------------------------------- void __thiscall sub_643B20(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi void *v5; // ST04_4 v1 = this; *this = &LinkFrameWork::`vftable'; nullsub_6(this + 28); v2 = v1[15]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[14]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[12]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v5); } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9F181C: using guessed type void *LinkFrameWork::`vftable'; //----- (00643C00) -------------------------------------------------------- char __thiscall sub_643C00(_DWORD *this, __int16 a2, int a3, int *a4) { char result; // al _DWORD *v5; // edi int v6; // eax int v7; // ebx int v8; // edx int v9; // eax int *v10; // eax int *v11; // eax int v12; // edx int v13; // ecx int v14; // edx int v15; // eax int v16; // edx int v17; // eax __int16 v18; // [esp+8h] [ebp-60h] int v19; // [esp+Ah] [ebp-5Eh] __int16 v20; // [esp+Eh] [ebp-5Ah] int v21; // [esp+10h] [ebp-58h] int *v22; // [esp+14h] [ebp-54h] int v23; // [esp+18h] [ebp-50h] _DWORD *v24; // [esp+1Ch] [ebp-4Ch] __int16 v25; // [esp+20h] [ebp-48h] int v26; // [esp+24h] [ebp-44h] int v27; // [esp+28h] [ebp-40h] int v28; // [esp+2Ch] [ebp-3Ch] __int16 v29; // [esp+30h] [ebp-38h] __int16 v30; // [esp+32h] [ebp-36h] int v31; // [esp+34h] [ebp-34h] int v32; // [esp+38h] [ebp-30h] int v33; // [esp+3Ch] [ebp-2Ch] int v34; // [esp+40h] [ebp-28h] int v35; // [esp+44h] [ebp-24h] int v36; // [esp+48h] [ebp-20h] int v37; // [esp+4Ch] [ebp-1Ch] int v38; // [esp+50h] [ebp-18h] int v39; // [esp+54h] [ebp-14h] int v40; // [esp+58h] [ebp-10h] int v41; // [esp+5Ch] [ebp-Ch] __int16 v42; // [esp+60h] [ebp-8h] __int16 v43; // [esp+62h] [ebp-6h] result = (char)a4; v5 = this; v22 = a4; v24 = (_DWORD *)dword_AB7F4C; if ( dword_AB7F4C ) { v25 = 2112; sub_905F90(dword_AB7F4C, &v25, 2u); v6 = *((unsigned __int16 *)v5 + 37); v7 = dword_ACB234; v28 = 0; v27 = 0; v26 = 0; v33 = 0; v32 = 0; v31 = 0; v37 = 0; v36 = 0; v35 = 0; v34 = 0; v41 = 0; v40 = 0; v39 = 0; v38 = 0; v8 = *(_DWORD *)dword_ACB234; v23 = v6; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v8 + 16))(dword_ACB234, v6) ) { if ( (unsigned __int16)v23 <= *(_WORD *)(v7 + 200) ) { v10 = (int *)(*(_DWORD *)(v7 + 196) + 4 * (unsigned __int16)v23); if ( *v10 ) v9 = *v10; else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } v30 = a2; v29 = a3; v26 = *(_DWORD *)(v9 + 2); v27 = *(_DWORD *)(v9 + 6); v28 = *(_DWORD *)(v9 + 10); v11 = (int *)sub_6807B0(byte_AD9238); v31 = *v11; v32 = v11[1]; v33 = v11[2]; v12 = v22[1]; v34 = *v22; v36 = v22[2]; v13 = v5[22]; v35 = v12; v14 = v22[3]; v15 = v5[21]; v39 = v13; LOWORD(v13) = *((_WORD *)v5 + 50); v37 = v14; v16 = v5[23]; v38 = v15; v17 = v5[24]; v40 = v16; v41 = v17; v42 = v13; if ( a3 ) { v43 = 2; sub_905F90((int)v24, &v26, 0x40u); v18 = 0; v20 = 1; v19 = sub_906340(v24); v21 = sub_906380(v24); sub_906000((int)v24, &v18, 0xCu); } else { v43 = 0; sub_906000((int)v24, &v26, 0x40u); } result = sub_9060A0(dword_AB7F4C); } return result; } // AB7F4C: using guessed type int dword_AB7F4C; // ACB234: using guessed type int dword_ACB234; //----- (00643DB0) -------------------------------------------------------- char __thiscall sub_643DB0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax char *v4; // ecx signed int i; // ebx int v6; // eax int v7; // eax int v8; // edi char result; // al int v10; // [esp+Ch] [ebp-2Ch] int v11; // [esp+10h] [ebp-28h] int v12; // [esp+14h] [ebp-24h] int v13; // [esp+18h] [ebp-20h] int v14; // [esp+1Ch] [ebp-1Ch] char v15[4]; // [esp+20h] [ebp-18h] int v16; // [esp+24h] [ebp-14h] int v17; // [esp+28h] [ebp-10h] int v18; // [esp+2Ch] [ebp-Ch] char v19; // [esp+30h] [ebp-8h] v1 = this; v10 = dword_B7D178; v11 = dword_B7D17C; v2 = this[21]; v13 = dword_B7D184; v3 = *((unsigned __int16 *)v1 + 50); dword_B7D178 = v2; v12 = dword_B7D180; dword_B7D17C = v1[22]; dword_B7D180 = v1[23]; dword_B7D184 = v1[24]; dword_B7D188 = v3; LOWORD(v3) = *((_WORD *)v1 + 51); *(_DWORD *)v15 = v2; word_B7D19C = v3; v4 = (char *)v1[15]; v16 = dword_B7D17C; v17 = dword_B7D180; v18 = dword_B7D184; v19 = 0; sub_905DE0(v4, v15); sub_905E10((_DWORD *)v1[15], dword_B7D188); for ( i = 0; ; sub_643C00(v1, i, 100, &v10) ) { while ( 1 ) { v6 = rand(); Sleep(v6 % 200 + 300); if ( i <= 2 ) break; v7 = sub_6F3D60(&off_AB7F2C, v15, dword_B7D188); v8 = v1[15]; v14 = v7; if ( v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = v14; } v1[15] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } result = (*(int (**)(void))(*(_DWORD *)v1[15] + 8))(); if ( result ) { if ( i ) result = sub_643C00(v1, i + 1, 0, &v10); return result; } sub_643C00(v1, ++i, 100, &v10); } result = (*(int (**)(void))(*(_DWORD *)v1[15] + 8))(); if ( result ) break; ++i; } if ( i ) result = sub_643C00(v1, i + 1, 0, &v10); return result; } // AB7F2C: using guessed type void **off_AB7F2C; // B7D178: using guessed type int dword_B7D178; // B7D17C: using guessed type int dword_B7D17C; // B7D180: using guessed type int dword_B7D180; // B7D184: using guessed type int dword_B7D184; // B7D19C: using guessed type __int16 word_B7D19C; //----- (00643F40) -------------------------------------------------------- char __thiscall sub_643F40(void *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax unsigned __int16 *v4; // eax int v5; // esi unsigned __int16 *v6; // ebx int v7; // edi int v8; // edi int v9; // edx float v10; // ST08_4 int *v11; // eax int v12; // eax int v13; // esi _DWORD *v14; // esi _DWORD *v15; // eax int v16; // eax int v17; // esi float v18; // ST04_4 float v19; // ST00_4 char result; // al float v21; // ST08_4 float v22; // ST04_4 _DWORD *v23; // eax int v24; // edi void *v25; // esi int v26; // [esp+18h] [ebp-6Ch] int v27; // [esp+24h] [ebp-60h] int v28; // [esp+28h] [ebp-5Ch] int v29; // [esp+2Ch] [ebp-58h] void *v30; // [esp+30h] [ebp-54h] float v31; // [esp+34h] [ebp-50h] char v32; // [esp+38h] [ebp-4Ch] int v33; // [esp+40h] [ebp-44h] char v34; // [esp+4Ch] [ebp-38h] char v35[4]; // [esp+70h] [ebp-14h] int v36; // [esp+74h] [ebp-10h] int v37; // [esp+78h] [ebp-Ch] char v38; // [esp+7Ch] [ebp-8h] v30 = this; v31 = (flt_BA45B4 + flt_BA45B4) * 90.0 / 180.0; sub_85D810((float *)&v34, v31); sub_85DA90((float *)&v34, (float *)&v27, (float *)&dword_AB4FE8); sub_63AD90(byte_AD8A08); sub_6AD0E0(&unk_B91250); dword_AD8EBC[5448] = 0; v1 = (_DWORD *)sub_6807B0(byte_AD9238); v2 = sub_439D70(byte_ADB468, v35); if ( *v2 == *v1 && v2[1] == v1[1] && v2[2] == v1[2] ) { sub_695790(1); sub_69E4D0(byte_ADB468); } else { v3 = (_DWORD *)sub_6807B0(byte_AD9238); v4 = (unsigned __int16 *)sub_4316B0(v3); v5 = dword_ACDA4C; v6 = v4; v7 = *v4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, v7) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v5 + 200) ) { v9 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v9 + 4 * v7) ) v8 = *(_DWORD *)(v9 + 4 * v7); else v8 = 0; } else { v8 = 0; } } else { v8 = 0; } *((_DWORD *)dword_AD8EBC + 1361) = *((_DWORD *)v6 + 18); *((float *)dword_AD8EBC + 374) = (double)*((unsigned int *)v6 + 18); if ( v8 ) { LODWORD(v31) = *(unsigned __int16 *)(v8 + 209); v10 = (double)SLODWORD(v31); sub_692EF0((float *)byte_ADB468, v10); } v11 = (int *)sub_6807B0(byte_AD9238); dword_B6711C = *v11; dword_B67120 = v11[1]; dword_B67124 = v11[2]; byte_B6712C = *((_BYTE *)v6 + 58); v12 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v13 = v12; if ( v12 ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(v12 + 740) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v13 + 740)); if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(*(_DWORD *)(v13 + 572) + 532) + 260))() ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(*(_DWORD *)(v13 + 572) + 532)); sub_4A5C20((_DWORD **)v13); sub_4A5E20((_DWORD *)v13, 0); sub_4A5ED0((_DWORD *)v13, 0); } sub_695790(0); if ( *(_BYTE *)(v8 + 130) ) sub_698060(byte_ADB468); else sub_697FF0(byte_ADB468); } sub_6BA240(&dword_AB6520); v14 = (_DWORD *)dword_AB6528; v15 = (_DWORD *)sub_6807B0(byte_AD9238); *(_DWORD *)v35 = *v15; v36 = v15[1]; v37 = v15[2]; v38 = 0; if ( v14 ) sub_6B8FC0(v14, (int)v35); sub_665FD0(dword_AD8C90); sub_67DDD0(dword_AD8EBC); v16 = sub_6807A0(byte_AD9238); v17 = v16; v18 = (double)*(unsigned int *)(v16 + 238); v19 = (double)*(unsigned int *)(v16 + 234); result = sub_69AD10((float *)byte_ADB468, v19, v18, (int)&v26); if ( result ) { v21 = (double)*(unsigned int *)(v17 + 238); v22 = (double)*(unsigned int *)(v17 + 234); result = sub_699590(byte_ADB468, v22, v21); if ( !result ) { v23 = (_DWORD *)sub_6807B0(byte_AD9238); v24 = sub_4316B0(v23); if ( v24 ) { v37 = 0; v36 = 0; *(_DWORD *)v35 = 0; strncpy(v35, "Job1_Dn01", 0xCu); if ( *(_DWORD *)(v24 + 2) == *(_DWORD *)v35 && *(_DWORD *)(v24 + 6) == v36 && *(_DWORD *)(v24 + 10) == v37 ) { v31 = (flt_BA45B4 + flt_BA45B4) * 0.0 / 180.0; sub_85D810((float *)&v34, v31); sub_85DA90((float *)&v34, (float *)v35, (float *)&dword_AB4FE8); v27 = *(_DWORD *)v35; v28 = v36; v29 = v37; } } (*(void (__stdcall **)(int *, int *))(*(_DWORD *)dword_AD8EBC + 184))(&v26, &v27); *((_WORD *)dword_AD8EBC + 274) = *(_WORD *)v17; (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 76))(); sub_69E480(byte_ADB468, (char)dword_AD8EBC); v25 = v30; v33 = 10; sub_8EF1C0(dword_ACDD68, &v32); result = (unsigned int)sub_8EF160(v25); } } return result; } // 695790: using guessed type _DWORD __stdcall sub_695790(char); // 6BA240: using guessed type int __thiscall sub_6BA240(_DWORD); // AB4FE8: using guessed type int dword_AB4FE8; // AB6528: using guessed type int dword_AB6528; // ACDA4C: using guessed type int dword_ACDA4C; // B6711C: using guessed type int dword_B6711C; // B67120: using guessed type int dword_B67120; // B67124: using guessed type int dword_B67124; // B6712C: using guessed type char byte_B6712C; // BA45B4: using guessed type float flt_BA45B4; //----- (00644380) -------------------------------------------------------- int __thiscall sub_644380(int this, int a2, int a3) { void *v3; // esi char *v4; // eax volatile LONG *v5; // eax v3 = (void *)this; *(_BYTE *)(this + 106) = 0; *(_DWORD *)(this + 108) = 0; if ( *(_WORD *)a3 == 327 ) { sub_74CF60((char *)&unk_BA0610, *(unsigned __int8 *)(a3 + 2)); v4 = (char *)sub_40C190(456471347); v5 = sub_462C30(1, v4); sub_8F81A0(&unk_BA6B10, v5); } sub_6BEDA0(); sub_6BE700(); sub_6F3C20(&off_AB7F2C); sub_8EF040(v3, dword_ACDD50, 0); return a2; } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00644400) -------------------------------------------------------- int __thiscall sub_644400(int this, int a2, const void *a3) { void *v3; // esi _DWORD *v4; // eax v3 = (void *)this; *(_BYTE *)(this + 106) = 0; *(_DWORD *)(this + 108) = 0; sub_680780((int)byte_AD9238, a3); sub_643F40(v3); v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4984E0(v4); return a2; } //----- (00644450) -------------------------------------------------------- _DWORD *__thiscall sub_644450(_DWORD *this) { _DWORD *v1; // esi int v3; // [esp+Ch] [ebp-1Ch] int v4; // [esp+10h] [ebp-18h] int v5; // [esp+14h] [ebp-14h] _DWORD *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v1 = this; v6 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[4] = 1; v1[5] = -1; v1[6] = 0; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &LinkFrameWork::`vftable'; v7 = 0; v1[12] = 0; v1[14] = 0; v1[15] = 0; LOBYTE(v7) = 3; v3 = 3; v1[24] = 0; v1[23] = 0; v1[22] = 0; v1[21] = 0; *((_BYTE *)v1 + 106) = 0; v1[27] = 0; v4 = 0; v5 = 0; sub_749220(v1 + 28, (int)&v3); v1[9] = 0; *((_WORD *)v1 + 52) = 1; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9F181C: using guessed type void *LinkFrameWork::`vftable'; //----- (00644520) -------------------------------------------------------- char __thiscall sub_644520(_DWORD *this, float a2) { int v2; // esi int v3; // ecx __time32_t v4; // eax int v5; // ecx v2 = (int)this; v3 = this[15]; if ( v3 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0((_DWORD *)v2); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); LOBYTE(v4) = (*(int (**)(void))(**(_DWORD **)(v2 + 36) + 268))(); if ( dword_AB7F4C ) LOBYTE(v4) = sub_9060A0(dword_AB7F4C); if ( *(_BYTE *)(v2 + 106) ) { v4 = _time32(0); if ( v4 >= *(_DWORD *)(v2 + 116) ) { sub_7491A0((__time32_t *)(v2 + 112)); v4 = *(_DWORD *)(v2 + 108); *(_DWORD *)(v2 + 108) = v4 + 1; if ( v4 >= 2 ) { OutputDebugStringA("ERR_CHARLOGIN_NO_ANSWER\n"); LOWORD(a2) = 330; LOBYTE(v4) = sub_644380(v2, 3, (int)&a2); } else { v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOWORD(a2) = 2054; LOBYTE(v4) = sub_906000(v5, &a2, 2u); } } } } dword_AD036C = 0; dword_ACF570 = 0; return v4; } // AB7F4C: using guessed type int dword_AB7F4C; // ACF570: using guessed type int dword_ACF570; // AD036C: using guessed type int dword_AD036C; //----- (00644600) -------------------------------------------------------- char __thiscall sub_644600(unsigned __int16 *this, int a2, int a3, int a4) { char result; // al result = a2; switch ( a2 ) { case 10: result = sub_643DB0(this); break; case 11: result = sub_643690(this); break; case 14: result = (unsigned int)sub_6433C0(this); break; default: return result; } return result; } //----- (00644650) -------------------------------------------------------- void __thiscall sub_644650(_DWORD *this) { int v1; // ecx signed int v2; // edi char *v3; // esi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // [esp+10h] [ebp-710h] __int16 v7; // [esp+14h] [ebp-70Ch] __int16 v8; // [esp+18h] [ebp-708h] char v9[4]; // [esp+1Ah] [ebp-706h] int v10; // [esp+1Eh] [ebp-702h] int v11; // [esp+22h] [ebp-6FEh] int v12; // [esp+26h] [ebp-6FAh] int v13; // [esp+2Ah] [ebp-6F6h] char v14; // [esp+2Eh] [ebp-6F2h] char v15; // [esp+36h] [ebp-6EAh] char v16[4]; // [esp+690h] [ebp-90h] int v17; // [esp+694h] [ebp-8Ch] int v18; // [esp+698h] [ebp-88h] int v19; // [esp+69Ch] [ebp-84h] int v20; // [esp+6A0h] [ebp-80h] char v21; // [esp+6A4h] [ebp-7Ch] int v22; // [esp+71Ch] [ebp-4h] v6 = this; v1 = this[15]; if ( v1 ) { v7 = 6145; sub_905F90(v1, &v7, 2u); v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; `eh vector constructor iterator'(&v14, 0x20u, 51, sub_486D80, nullsub_6); v22 = 0; v8 = word_B7D19C; v2 = 0; v3 = &v15; do { v4 = (_DWORD *)sub_74CF40((char *)&unk_BA0610, v2); *((_DWORD *)v3 - 2) = *v4; *((_DWORD *)v3 - 1) = v4[1]; *(_DWORD *)v3 = v4[2]; *((_DWORD *)v3 + 1) = v4[3]; *((_DWORD *)v3 + 2) = v4[4]; *((_DWORD *)v3 + 3) = v4[5]; *((_DWORD *)v3 + 4) = v4[6]; *((_DWORD *)v3 + 5) = v4[7]; ++v2; v3 += 32; } while ( v2 < 51 ); v5 = (_DWORD *)sub_6805D0((int)byte_AD9238); *(_DWORD *)v16 = v5[1]; v17 = v5[2]; v18 = v5[3]; v19 = v5[4]; v20 = v5[5]; v21 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v16, 0x14u); sub_906000(v6[15], &v8, 0x676u); *((_BYTE *)v6 + 106) = 1; sub_7491A0(v6 + 28); v22 = -1; `eh vector destructor iterator'(&v14, 0x20u, 51, nullsub_6); } } // B7D19C: using guessed type __int16 word_B7D19C; //----- (00644810) -------------------------------------------------------- int __thiscall sub_644810(_BYTE **this, int a2, unsigned __int16 *a3) { _BYTE **v3; // esi v3 = this; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_9063C0(v3[15], 1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[15] + 12))(*a3); sub_644650(v3); if ( dword_AB7F4C ) sub_6F3480((void *)dword_AB7F4C); return a2; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (00644860) -------------------------------------------------------- int __thiscall sub_644860(_BYTE **this, int a2, int a3, int a4, unsigned __int16 *a5) { int result; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax result = 0; switch ( a2 ) { case 2: if ( a3 == 7 ) { result = sub_644810(this, a4, a5); } else if ( a3 == 16 ) { if ( *(_BYTE *)a5 == 1 ) dword_AD036C = *(unsigned __int16 *)((char *)a5 + 1); result = a4; } break; case 4: switch ( a3 ) { case 16: case 17: case 42: case 72: goto LABEL_3; case 56: result = sub_6433F0(a4, (int)a5); break; case 57: sub_680750((int)byte_AD9238, a5); result = a4; break; case 58: v6 = sub_6CD770(); sub_74AC80(v6, (int)a5); result = a4; break; case 59: v7 = sub_6CD770(); sub_74AD60(v7, (int)a5); result = a4; break; case 60: sub_680FF0(byte_AD9238, a5); result = a4; break; case 61: sub_6BFFF0((unsigned __int8 *)a5); result = a4; break; case 62: sub_6BEDF0(a5); result = a4; break; case 71: result = sub_643550(a4, (unsigned __int8 *)a5); break; case 73: sub_67D1B0((int)dword_AD8EBC, (int)a5); result = a4; break; case 74: result = sub_6435B0(a4, a5); break; case 206: v8 = sub_6CD770(); sub_74AE60(v8, (int)a5); result = a4; break; case 215: v9 = sub_6CD770(); sub_74AF30(v9, (int)a5); result = a4; break; case 222: result = sub_643610(a4, (int *)a5); break; default: return result; } break; case 6: if ( a3 == 2 ) { result = sub_644400((int)this, a4, a5); } else if ( a3 == 4 ) { result = sub_644380((int)this, a4, (int)a5); } break; case 8: if ( a3 == 17 ) LABEL_3: result = a4; break; default: return result; } return result; } // AD036C: using guessed type int dword_AD036C; //----- (00644B50) -------------------------------------------------------- int *sub_644B50() { return &dword_AD8BCC; } // AD8BCC: using guessed type int dword_AD8BCC; //----- (00644B60) -------------------------------------------------------- int sub_644B60() { return dword_AD8BCC; } // AD8BCC: using guessed type int dword_AD8BCC; //----- (00644B70) -------------------------------------------------------- void *__thiscall sub_644B70(void *this, char a2) { void *v2; // esi v2 = this; sub_643B20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00644BA0) -------------------------------------------------------- char __thiscall sub_644BA0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi int v5; // edi FILE *v6; // eax _DWORD *v7; // eax int v8; // edi int v9; // ebx int v10; // ebx int *v11; // ebx int v12; // ebx FILE *v13; // eax _DWORD *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax int v17; // eax int v18; // ebx int v19; // eax int v20; // ecx volatile LONG *v21; // eax int v22; // [esp+2Ch] [ebp-114h] char v23; // [esp+30h] [ebp-110h] int v24; // [esp+13Ch] [ebp-4h] v1 = this; v2 = (_DWORD *)sub_6807B0(byte_AD9238); v3 = sub_49F8D0(v2); if ( !v3 ) return 0; if ( !byte_ACAD5C ) sub_420410(); v5 = v3 + 132; sprintf(&v23, "%sLoading\\%s.png", byte_ACAB50, v5); v6 = fopen(&v23, "r"); if ( v6 ) { fclose(v6); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v23, "%sLoading\\%s.tga", byte_ACAB50, v5); } v7 = sub_486130((int)&v23); v8 = (int)v7; if ( v7 ) InterlockedIncrement(v7 + 1); v24 = 0; if ( !v8 ) { v9 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, 0) ) { v11 = *(int **)(v9 + 196); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } if ( !byte_ACAD5C ) sub_420410(); v12 = v10 + 132; sprintf(&v23, "%sLoading\\%s.png", byte_ACAB50, v12); v13 = fopen(&v23, "r"); if ( v13 ) { fclose(v13); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v23, "%sLoading\\%s.tga", byte_ACAB50, v12); } v14 = sub_486130((int)&v23); if ( v14 || (v14 = (_DWORD *)sub_43D0D0(2u)) != 0 ) { v8 = (int)v14; InterlockedIncrement(v14 + 1); } } v15 = sub_8F4010(0, 0, v8, 0, 0, 0, 1024, 768, 0, 0, 0); v1[9] = v15; (*(void (__thiscall **)(volatile LONG *, int))(*v15 + 468))(v15, xRight); (*(void (__stdcall **)(int))(*(_DWORD *)v1[9] + 472))(dword_AC2F78); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[9] + 240))(0); v16 = sub_8F4010(63, 487, v8, 0, 0, 780, 465, 77, 0, 0, 0); v1[10] = v16; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[10] + 276))(1.0); v17 = sub_911A50(); v18 = v1[12]; v22 = v17; if ( v18 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v17 = v22; } v1[12] = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } v19 = sub_85C050((_DWORD *)v1[10], 3); v20 = v1[12]; v1[13] = v19; (*(void (__stdcall **)(int))(*(_DWORD *)v20 + 72))(v19); sub_599BC0((_DWORD *)v1[13], v1[12]); v21 = sub_8F4010(63, 487, v8, 0, 0, 870, 465, 77, 0, 0, 0); v1[11] = v21; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[9]); v24 = -1; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA4C: using guessed type int dword_ACDA4C; //----- (00644F10) -------------------------------------------------------- _DWORD *__thiscall sub_644F10(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *result; // eax v1 = this; v2 = this[12]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[12] = 0; } if ( v1[9] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[9]); v1[9] = 0; } if ( v1[10] ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[10]); v1[10] = 0; } result = (_DWORD *)v1[11]; if ( result ) { result = sub_8F9E00(&unk_BA6B10, (_DWORD *)v1[11]); v1[11] = 0; } return result; } //----- (00644F80) -------------------------------------------------------- char __thiscall sub_644F80(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi v1 = this; v2 = 0; if ( !this[14] ) { v3 = operator new(0x20u); if ( v3 ) v2 = sub_435790(v3); v4 = v1[14]; if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[14] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } *(_DWORD *)(v1[14] + 8) = v1; } return 1; } //----- (00645070) -------------------------------------------------------- char __thiscall sub_645070(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al char v4; // [esp+4h] [ebp-18h] int v5; // [esp+Ch] [ebp-10h] v2 = this; if ( !sub_644BA0(this) || !sub_644F80(v2) ) return 0; v5 = 9; sub_8EF240(v2, &v4); result = 1; *((_BYTE *)v2 + 32) = 1; return result; } //----- (006450E0) -------------------------------------------------------- _DWORD *__thiscall sub_6450E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *result; // eax v1 = this; v2 = this[14]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[14] = 0; } result = sub_644F10(v1); *((_BYTE *)v1 + 32) = 0; v1[7] = 0; return result; } //----- (00645150) -------------------------------------------------------- void sub_645150() { sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); } // BA46D0: using guessed type int dword_BA46D0; //----- (00645180) -------------------------------------------------------- void __stdcall sub_645180(int a1, int a2, int a3) { if ( a1 == 9 ) byte_AD8BD4 = 1; } // AD8BD4: using guessed type char byte_AD8BD4; //----- (006451A0) -------------------------------------------------------- _DWORD *__thiscall sub_6451A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &LoadingFrameWork::`vftable'; v1[12] = 0; v1[14] = 0; v1[9] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9F18CC: using guessed type void *LoadingFrameWork::`vftable'; //----- (00645200) -------------------------------------------------------- void __thiscall sub_645200(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi void *v4; // ST04_4 v1 = this; *this = &LoadingFrameWork::`vftable'; v2 = this[14]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[12]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (void *)v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v4); } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9F18CC: using guessed type void *LoadingFrameWork::`vftable'; //----- (006452B0) -------------------------------------------------------- _DWORD *__thiscall sub_6452B0(int *this, float a2) { int *v2; // esi _DWORD *result; // eax v2 = this; sub_8EEEE0(this); sub_8F8AE0(&unk_BA6B10, 1); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); sub_435250(v2[14]); result = 0; dword_AD036C = 0; dword_ACF570 = 0; if ( byte_AD8BD4 ) result = sub_8EF040(v2, dword_ACDD68, 0); return result; } // ACF570: using guessed type int dword_ACF570; // AD036C: using guessed type int dword_AD036C; // AD8BD4: using guessed type char byte_AD8BD4; //----- (00645320) -------------------------------------------------------- int *sub_645320() { return &dword_AD8BD8; } // AD8BD8: using guessed type int dword_AD8BD8; //----- (00645330) -------------------------------------------------------- int sub_645330() { return dword_AD8BD8; } // AD8BD8: using guessed type int dword_AD8BD8; //----- (00645340) -------------------------------------------------------- void *__thiscall sub_645340(void *this, char a2) { void *v2; // esi v2 = this; sub_645200(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00645370) -------------------------------------------------------- float *__thiscall sub_645370(float *this) { float *result; // eax result = this; this[1] = -1.0; *(_DWORD *)this = &ITimer::`vftable'; return result; } // 9F1910: using guessed type void *ITimer::`vftable'; //----- (00645390) -------------------------------------------------------- int __thiscall sub_645390(int this) { int (__thiscall ***v1)(_DWORD, signed int); // esi v1 = (int (__thiscall ***)(_DWORD, signed int))this; sub_8EEE70(*(_DWORD **)(this + 8), *(_DWORD *)(this + 12), 0, 0); return (**v1)(v1, 1); } //----- (006453B0) -------------------------------------------------------- int sub_6453B0() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 int result; // eax v0 = (_DWORD *)dword_AB3308; if ( dword_AB3308 ) { do { v1 = v0; v0 = (_DWORD *)*v0; result = off_AB3304[2](&off_AB3304, (char)v1); } while ( v0 ); } dword_AB3310 = 0; dword_AB3308 = 0; dword_AB330C = 0; return result; } // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; // AB330C: using guessed type int dword_AB330C; // AB3310: using guessed type int dword_AB3310; //----- (00645400) -------------------------------------------------------- _DWORD *__thiscall sub_645400(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // edx _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &ITimer::`vftable'; result = (_DWORD *)dword_AB3308; if ( dword_AB3308 ) { while ( 1 ) { v2 = result + 2; v3 = result; result = (_DWORD *)*result; if ( (_DWORD *)*v2 == this ) break; if ( !result ) return result; } result = (_DWORD *)sub_403620(&off_AB3304, &v3); } return result; } // 9F1910: using guessed type void *ITimer::`vftable'; // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; //----- (00645440) -------------------------------------------------------- _DWORD *__thiscall sub_645440(float *this, float a2) { float *v2; // esi _DWORD *result; // eax v2 = this; this[1] = flt_AD8BE0 + a2; result = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB3304[1])(&off_AB3304); result[2] = v2; *result = 0; result[1] = dword_AB330C; if ( dword_AB330C ) { *(_DWORD *)dword_AB330C = result; ++dword_AB3310; } else { ++dword_AB3310; dword_AB3308 = (int)result; } dword_AB330C = (int)result; return result; } // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; // AB330C: using guessed type int dword_AB330C; // AB3310: using guessed type int dword_AB3310; // AD8BE0: using guessed type float flt_AD8BE0; //----- (006454B0) -------------------------------------------------------- void __cdecl sub_6454B0(float a1) { int *v1; // edx int *v2; // edi double v3; // st7 int *v4; // esi int *v5; // ecx int v6; // ecx int v7; // esi int v8; // eax _DWORD *v9; // ecx int *v10; // eax int v11; // edx v1 = (int *)dword_AB3308; flt_AD8BE0 = a1; v2 = (int *)dword_AB3308; if ( dword_AB3308 ) { do { v3 = *(float *)(v2[2] + 4); v4 = v2 + 2; v5 = v2; v2 = (int *)*v2; if ( a1 >= v3 ) { if ( v5 == v1 ) { v6 = *v1; dword_AB3308 = v6; if ( v6 ) *(_DWORD *)(v6 + 4) = 0; else dword_AB330C = 0; v7 = v1[2]; off_AB3304[2](&off_AB3304, (char)v1); } else { v8 = dword_AB330C; if ( v5 == (int *)dword_AB330C ) { v9 = *(_DWORD **)(dword_AB330C + 4); dword_AB330C = (int)v9; if ( v9 ) *v9 = 0; else dword_AB3308 = 0; v7 = *(_DWORD *)(v8 + 8); off_AB3304[2](&off_AB3304, v8); } else { v10 = (int *)v5[1]; v11 = *v5; if ( v10 ) *v10 = v11; if ( v11 ) *(_DWORD *)(v11 + 4) = v10; v7 = *v4; off_AB3304[2](&off_AB3304, (char)v5); } } --dword_AB3310; (*(void (**)(void))(*(_DWORD *)v7 + 4))(); v1 = (int *)dword_AB3308; } } while ( v2 ); } } // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; // AB330C: using guessed type int dword_AB330C; // AB3310: using guessed type int dword_AB3310; // AD8BE0: using guessed type float flt_AD8BE0; //----- (00645590) -------------------------------------------------------- float *__thiscall sub_645590(float *this, float a2, int a3, int a4) { float *v4; // esi _DWORD *v5; // eax v4 = this; this[1] = -1.0; *(_DWORD *)this = &FrameWorkTimer::`vftable'; this[1] = flt_AD8BE0 + a2; v5 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB3304[1])(&off_AB3304); v5[2] = v4; *v5 = 0; v5[1] = dword_AB330C; if ( dword_AB330C ) *(_DWORD *)dword_AB330C = v5; else dword_AB3308 = (int)v5; ++dword_AB3310; dword_AB330C = (int)v5; *((_DWORD *)v4 + 3) = a3; *((_DWORD *)v4 + 2) = a4; return v4; } // 9F194C: using guessed type void *FrameWorkTimer::`vftable'; // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; // AB330C: using guessed type int dword_AB330C; // AB3310: using guessed type int dword_AB3310; // AD8BE0: using guessed type float flt_AD8BE0; //----- (00645650) -------------------------------------------------------- void *__thiscall sub_645650(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,ITimer *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F191C: using guessed type void *NiTListBase,ITimer *>::`vftable'; //----- (00645680) -------------------------------------------------------- _DWORD *__thiscall sub_645680(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,ITimer *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,ITimer *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F191C: using guessed type void *NiTListBase,ITimer *>::`vftable'; // 9F192C: using guessed type void *NiTPointerListBase,ITimer *>::`vftable'; //----- (00645710) -------------------------------------------------------- void *__thiscall sub_645710(void *this, char a2) { void *v2; // esi _DWORD *v3; // eax void **v4; // ecx _DWORD *v6; // [esp+4h] [ebp-4h] v2 = this; *(_DWORD *)this = &ITimer::`vftable'; v3 = (_DWORD *)dword_AB3308; if ( dword_AB3308 ) { while ( 1 ) { v4 = (void **)(v3 + 2); v6 = v3; v3 = (_DWORD *)*v3; if ( *v4 == v2 ) break; if ( !v3 ) goto LABEL_6; } sub_403620(&off_AB3304, &v6); } LABEL_6: if ( a2 & 1 ) operator delete(v2); return v2; } // 9F1910: using guessed type void *ITimer::`vftable'; // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; //----- (00645780) -------------------------------------------------------- char __thiscall sub_645780(_DWORD *this, char a2) { _DWORD *v2; // eax void *v3; // ecx v2 = this; v3 = (void *)this[23]; if ( v3 && *((_BYTE *)v2 + 101) != a2 ) { *((_BYTE *)v2 + 101) = a2; LOBYTE(v2) = sub_64F3A0(v3, (int)(v2 + 25)); } return (char)v2; } //----- (006457B0) -------------------------------------------------------- char __thiscall sub_6457B0(_DWORD *this, char a2) { _DWORD *v2; // eax _BYTE *v3; // ecx v2 = this; v3 = (_BYTE *)this[23]; if ( v3 && *((_BYTE *)v2 + 102) != a2 ) { *((_BYTE *)v2 + 102) = a2; LOBYTE(v2) = sub_64F4A0(v3, (int)(v2 + 25)); } return (char)v2; } //----- (006457E0) -------------------------------------------------------- _DWORD *__thiscall sub_6457E0(void *this) { void *v1; // esi v1 = this; sub_6F3C20(&off_AB7F2C); return sub_8EF040(v1, dword_ACDD50, 0); } // AB7F2C: using guessed type void **off_AB7F2C; // ACDD50: using guessed type int dword_ACDD50; //----- (00645800) -------------------------------------------------------- void __thiscall sub_645800(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void *v4; // [esp+Ch] [ebp-B0h] int v5; // [esp+10h] [ebp-ACh] int v6; // [esp+14h] [ebp-A8h] int v7; // [esp+18h] [ebp-A4h] char v8; // [esp+1Ch] [ebp-A0h] int v9; // [esp+B8h] [ebp-4h] v1 = this; if ( this[10] ) { v4 = 0; v5 = 0; v6 = 0; v7 = 1024; sub_85F230(&v4, 0x400u); v9 = 0; sub_85F910(&v8, (int)&v4); LOBYTE(v9) = 1; v2 = sub_8E5FC0(); sub_8E5970(v2); sub_85FB50((float *)v1[10], v1[18], &v8, 0); v3 = sub_8E5FC0(); sub_8E59E0(v3); sub_8F9950((_DWORD **)&unk_BA6B10, dword_BA46D0); LOBYTE(v9) = 0; sub_85F7E0(&v8); operator delete[](v4); } } // BA46D0: using guessed type int dword_BA46D0; //----- (00645900) -------------------------------------------------------- char __thiscall sub_645900(_DWORD **this) { _DWORD **v1; // esi char result; // al _DWORD *v3; // ecx unsigned __int8 v4; // dl char v5; // al char v6; // dl v1 = this; result = sub_8F81A0(&unk_BA6B10, this[17]); v3 = v1[23]; if ( v3 ) { v4 = *((_BYTE *)v1 + 100); result = *((_BYTE *)v1 + 191); if ( v4 >> 7 != result || *((_BYTE *)v1 + 101) != *((_BYTE *)v1 + 188) || *((_BYTE *)v1 + 102) != *((_BYTE *)v1 + 189) || *((_BYTE *)v1 + 103) != *((_BYTE *)v1 + 190) ) { v5 = v4 & 0x7F | (result << 7); *((_BYTE *)v1 + 101) = *((_BYTE *)v1 + 188); v6 = *((_BYTE *)v1 + 190); *((_BYTE *)v1 + 100) = v5; *((_BYTE *)v1 + 102) = *((_BYTE *)v1 + 189); *((_BYTE *)v1 + 103) = v6; sub_64F1F0(v3, (unsigned __int8 *)v1 + 100, 2); (*(void (__stdcall **)(_DWORD))(*v1[23] + 564))(0.0); sub_85BED0((_DWORD **)v1[12], 0.0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*v1[23] + 328))(102010, 0, 0); result = (unsigned int)sub_664570(dword_AD8C90, 0.0); } } return result; } //----- (006459D0) -------------------------------------------------------- char __thiscall sub_6459D0(int this) { int v1; // esi int v2; // ecx char result; // al __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; if ( *(_BYTE *)(this + 56) != 1 ) { v2 = *(_DWORD *)(this + 104); result = 31; v4 = 3103; if ( v2 ) { sub_905F90(v2, &v4, 2u); result = sub_906000(*(_DWORD *)(v1 + 104), &v5, 1u); } *(_BYTE *)(v1 + 56) = 1; } return result; } //----- (00645A20) -------------------------------------------------------- void __thiscall sub_645A20(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // ecx int v7; // [esp+4h] [ebp-4h] v2 = (_DWORD *)this[29]; while ( v2 ) { v3 = v2[2]; v4 = *(_DWORD *)(v3 + 12); v2 = (_DWORD *)*v2; v5 = (void (__thiscall ***)(_DWORD, signed int))v4; v7 = *(_DWORD *)(v3 + 12); if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v5 ) (**v5)(v5, 1); *(_DWORD *)(v3 + 12) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = *(_DWORD **)(v3 + 36); if ( v6 ) { if ( v7 ) sub_833360(v6, v7); if ( a2 ) sub_833620(*(_DWORD **)(v3 + 36), *(_DWORD **)(v3 + 12), 0, -1, 1); } } } //----- (00645AC0) -------------------------------------------------------- char __thiscall sub_645AC0(_DWORD *this) { int v1; // edx unsigned int v2; // eax _DWORD *v3; // ebx _DWORD *v4; // esi _DWORD *v5; // edi int *v6; // ecx int v7; // eax int v8; // eax int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] unsigned int v14; // [esp+18h] [ebp-8h] char v15; // [esp+1Fh] [ebp-1h] v1 = dword_AC9CE8; LOBYTE(v2) = *(_BYTE *)(dword_AC9CE8 + 12); v3 = this; *(_BYTE *)(dword_AC9CE8 + 12) = 0; v4 = (_DWORD *)this[29]; v13 = v1; v15 = v2; if ( v4 ) { v2 = 0; v14 = 0; if ( this[36] ) { do { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) { v6 = (int *)(v3[37] + 4 * v2); v7 = *v6; v10 = *(_DWORD *)(*v6 + 88); v11 = *(_DWORD *)(v7 + 92); v12 = *(_DWORD *)(v7 + 96); sub_68E670(v5, *v6, (int)&v10); v1 = v13; *(_WORD *)(v5[29] + 28) &= 0xFFFEu; v2 = v14; } v14 = ++v2; } while ( v2 < v3[36] ); } for ( ; v4; *(_WORD *)(v2 + 28) |= 1u ) { v8 = v4[2]; v4 = (_DWORD *)*v4; v2 = *(_DWORD *)(v8 + 116); } *(_BYTE *)(v1 + 12) = v15; } return v2; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (00645B70) -------------------------------------------------------- float *__thiscall sub_645B70(_DWORD *this) { _DWORD *v1; // ebx float *result; // eax float v3; // ST14_4 char v4; // [esp+14h] [ebp-70h] char v5; // [esp+38h] [ebp-4Ch] char v6; // [esp+5Ch] [ebp-28h] v1 = this; result = (float *)this[23]; if ( result ) { if ( *((_DWORD *)result + 175) ) { v3 = flt_ACCFD0 * -2.0; sub_85D810((float *)&v6, v3); qmemcpy(&v5, (const void *)(v1[21] + 52), 0x24u); result = sub_85D940((float *)&v5, (float *)&v4, (float *)&v6); qmemcpy(&v6, result, 0x24u); qmemcpy((void *)(v1[21] + 52), &v6, 0x24u); } } return result; } // ACCFD0: using guessed type float flt_ACCFD0; //----- (00645C00) -------------------------------------------------------- float *__thiscall sub_645C00(_DWORD *this) { _DWORD *v1; // ebx float *result; // eax float v3; // ST14_4 char v4; // [esp+14h] [ebp-70h] char v5; // [esp+38h] [ebp-4Ch] char v6; // [esp+5Ch] [ebp-28h] v1 = this; result = (float *)this[23]; if ( result ) { if ( *((_DWORD *)result + 175) ) { v3 = flt_ACCFD0 + flt_ACCFD0; sub_85D810((float *)&v6, v3); qmemcpy(&v5, (const void *)(v1[21] + 52), 0x24u); result = sub_85D940((float *)&v5, (float *)&v4, (float *)&v6); qmemcpy(&v6, result, 0x24u); qmemcpy((void *)(v1[21] + 52), &v6, 0x24u); } } return result; } // ACCFD0: using guessed type float flt_ACCFD0; //----- (00645C90) -------------------------------------------------------- void __thiscall sub_645C90(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi void *v3; // ecx v2 = this; if ( this[23] ) { if ( sub_7474E0((_DWORD *)(dword_AC9C9C + 4), a2) ) { v3 = (void *)v2[23]; *((_BYTE *)v2 + 103) = a2; sub_64F210(v3, (unsigned __int8 *)v2 + 100); } } } // AC9C9C: using guessed type int dword_AC9C9C; //----- (00645CD0) -------------------------------------------------------- char __thiscall sub_645CD0(char *this, _BYTE *a2) { char *v2; // esi char result; // al unsigned __int8 v4; // al unsigned __int8 v5; // bl int v6; // eax _BYTE *v7; // eax unsigned __int8 v8; // al int v9; // eax unsigned __int8 *v10; // eax unsigned __int8 v11; // al bool v12; // cf char *v13; // eax unsigned __int8 v14; // [esp+4h] [ebp-4h] unsigned __int8 v15; // [esp+5h] [ebp-3h] unsigned __int8 v16; // [esp+6h] [ebp-2h] char v17; // [esp+7h] [ebp-1h] v2 = this; if ( this[191] == (unsigned __int8)this[100] >> 7 ) { v4 = this[103]; v5 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; if ( this[190] == v4 ) { v17 = 1; } else { v6 = sub_7474E0((_DWORD *)(dword_AC9C9C + 4), v4); if ( v6 ) { v16 = *(_BYTE *)(v6 + 33); if ( v16 ) --v16; } } if ( v2[188] == v2[101] ) { v17 |= 2u; } else { v7 = sub_40D7F0(v2[101]); if ( v7 ) { v5 = v7[65]; v14 = v5; if ( v5 ) v14 = --v5; } } v8 = v2[102]; if ( v2[189] == v8 ) { v17 |= 4u; } else { v9 = sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), v8); if ( v9 ) { v15 = *(_BYTE *)(v9 + 61); if ( v15 ) --v15; } } if ( (v17 & 7) == 7 ) { *a2 = 0; result = -1; } else { *a2 = 1; v10 = &v14; if ( v16 >= v5 ) v10 = &v16; v11 = *v10; v12 = v11 < v15; HIBYTE(a2) = v11; v13 = (char *)&v15; if ( !v12 ) v13 = (char *)&a2 + 3; result = *v13; } } else { *a2 = 1; result = 5; } return result; } // AC9C9C: using guessed type int dword_AC9C9C; // AC9CA0: using guessed type int dword_AC9CA0; //----- (00645DE0) -------------------------------------------------------- char __thiscall sub_645DE0(char *this) { int v1; // esi _DWORD *v2; // eax char *v3; // eax unsigned __int8 v4; // cl int v5; // edi char *v6; // eax int v7; // ebx int v8; // ST10_4 const char *v9; // eax volatile LONG *v10; // eax char v12; // [esp+7h] [ebp-119h] char v13; // [esp+8h] [ebp-118h] int v14; // [esp+10h] [ebp-110h] char v15; // [esp+1Ch] [ebp-104h] v1 = (int)this; v12 = 0; LOBYTE(v2) = sub_645CD0(this, &v12); if ( v12 ) { if ( (unsigned __int8)v2 < 6u ) { v4 = 6; if ( *(_BYTE *)(v1 + 191) == *(_BYTE *)(v1 + 100) >> 7 ) v4 = 5; if ( (unsigned __int8)v2 >= v4 ) goto LABEL_11; while ( !*(_WORD *)(v1 + 4 * (unsigned __int8)v2 + 166) ) { LOBYTE(v2) = (_BYTE)v2 + 1; if ( (unsigned __int8)v2 >= v4 ) goto LABEL_11; } v5 = *(unsigned __int16 *)(v1 + 4 * (unsigned __int8)v2 + 164); if ( (_WORD)v5 != -1 ) { v7 = dword_ACB230; LOBYTE(v2) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5); if ( (_BYTE)v2 ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v7 + 200) ) { v2 = (_DWORD *)(*(_DWORD *)(v7 + 196) + 4 * v5); if ( *v2 ) { v2 = (_DWORD *)*v2; if ( v2 ) { v8 = (int)v2 + 34; v9 = sub_40C190(-1885438098); sprintf(&v15, v9, v8); v10 = sub_462C30(2, &v15); v14 = 10; LOBYTE(v2) = (unsigned int)sub_461760(v10, v1, &v13, 0); } } } } } else { LABEL_11: v6 = (char *)sub_40C190(-1645099327); LOBYTE(v2) = (unsigned int)sub_462C30(1, v6); } } } else { v3 = (char *)sub_40C190(-2105705111); LOBYTE(v2) = (unsigned int)sub_462C30(1, v3); } return (char)v2; } // ACB230: using guessed type int dword_ACB230; //----- (00645F40) -------------------------------------------------------- int __thiscall sub_645F40(int this, float a2) { int v2; // esi int v3; // ecx int v4; // ecx _DWORD **v5; // ecx char *v6; // eax volatile LONG *v7; // eax char *v8; // eax volatile LONG *v9; // eax void **v11; // [esp+1Ch] [ebp-40h] _DWORD *(__thiscall *v12)(void *); // [esp+20h] [ebp-3Ch] int v13; // [esp+24h] [ebp-38h] void ***v14; // [esp+2Ch] [ebp-30h] void **v15; // [esp+34h] [ebp-28h] _DWORD *(__thiscall *v16)(void *); // [esp+38h] [ebp-24h] int v17; // [esp+3Ch] [ebp-20h] void ***v18; // [esp+44h] [ebp-18h] int v19; // [esp+58h] [ebp-4h] v2 = this; v3 = *(_DWORD *)(this + 104); if ( v3 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v3 + 16))(v2, 100); sub_8EEEE0((_DWORD *)v2); sub_8F8AE0(&unk_BA6B10, 1); sub_8F89B0(&unk_BA6B10); sub_8F98A0(&unk_BA6B10, a2); sub_645AC0((_DWORD *)v2); v4 = *(_DWORD *)(v2 + 104); if ( v4 ) sub_9060A0(v4); v5 = *(_DWORD ***)(v2 + 72); if ( v5 ) sub_85BED0(v5, a2, 1); if ( byte_B68508 != 1 || *(_DWORD *)(v2 + 192) ) { if ( *(_BYTE *)(*(_DWORD *)(v2 + 104) + 9) ) { if ( !*(_DWORD *)(v2 + 192) ) { v16 = sub_6457E0; v15 = &std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable'; v17 = v2; v18 = &v15; v19 = 1; v8 = (char *)sub_40C190(-808578239); v9 = sub_41E360(0, v2, 1, v8); *(_DWORD *)(v2 + 192) = v9; sub_41E140((void *)v9, 1, (int)&v15); v19 = -1; if ( v18 ) { ((void (__stdcall *)(bool))(*v18)[3])(v18 != &v15); v18 = 0; } } } } else { v12 = sub_6457E0; v11 = &std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable'; v13 = v2; v14 = &v11; v19 = 0; v6 = (char *)sub_40C190(374499920); v7 = sub_41E360(0, v2, 1, v6); *(_DWORD *)(v2 + 192) = v7; sub_41E140((void *)v7, 1, (int)&v11); byte_B68508 = 0; v19 = -1; if ( v14 ) ((void (__stdcall *)(bool))(*v14)[3])(v14 != &v11); } if ( *(_BYTE *)(v2 + 44) ) { if ( *(_BYTE *)(v2 + 45) ) sub_645C00((_DWORD *)v2); else sub_645B70((_DWORD *)v2); } sub_664570(dword_AD8C90, a2); return sub_6BACD0(&dword_AB6520, a2, 0); } // 9F1958: using guessed type void *std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable'; // B68508: using guessed type char byte_B68508; //----- (00646150) -------------------------------------------------------- void __thiscall sub_646150(_BYTE *this, int a2, int a3, int a4) { int v4; // esi unsigned __int8 v5; // cl void *v6; // ebx void *v7; // edi void *v8; // ecx unsigned __int8 v9; // al void *v10; // ebx void *v11; // edi _BYTE *v12; // ecx unsigned __int8 v13; // al void *v14; // edi char *v15; // eax volatile LONG *v16; // eax unsigned int v17; // [esp+10h] [ebp-28h] char v18; // [esp+14h] [ebp-24h] void *v19; // [esp+18h] [ebp-20h] void *v20; // [esp+1Ch] [ebp-1Ch] int v21; // [esp+20h] [ebp-18h] int v22; // [esp+34h] [ebp-4h] v4 = (int)this; switch ( a2 ) { case 9: sub_8EF040(this, dword_ACDD50, 0); break; case 10: if ( this[191] == this[100] >> 7 ) { sub_647C50(this); } else { v15 = (char *)sub_40C190(1753831807); v16 = sub_462C30(2, v15); v20 = (void *)11; sub_461760(v16, v4, &v18, 0); } break; case 11: v19 = 0; v20 = 0; v21 = 0; v5 = this[100]; v22 = 0; switch ( ((unsigned int)v5 >> 2) & 0x1F ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(v17) = 1; sub_40C590(v17, v5 >> 7, 0, &v19); break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(v17) = 6; sub_40C590(v17, v5 >> 7, 0, &v19); break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(v17) = 11; sub_40C590(v17, v5 >> 7, 0, &v19); break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(v17) = 16; sub_40C590(v17, v5 >> 7, 0, &v19); break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(v17) = 21; sub_40C590(v17, v5 >> 7, 0, &v19); break; case 0x1Au: case 0x1Bu: LOBYTE(v17) = 26; sub_40C590(v17, v5 >> 7, 0, &v19); break; default: LOBYTE(v17) = 0; sub_40C590(v17, v5 >> 7, 0, &v19); break; } v6 = v20; v7 = v19; if ( ((_BYTE *)v20 - (_BYTE *)v19) & 0xFFFFFFFC ) { v8 = *(void **)(v4 + 92); v9 = *(_BYTE *)v19; if ( v8 ) { if ( *(_BYTE *)(v4 + 101) != v9 ) { *(_BYTE *)(v4 + 101) = v9; sub_64F3A0(v8, v4 + 100); } } } if ( v7 != v6 ) { memcpy_0(v7, v6, 0); v20 = v7; } sub_40D870(0, &v19); v10 = v20; v11 = v19; if ( ((_BYTE *)v20 - (_BYTE *)v19) & 0xFFFFFFFC ) { v12 = *(_BYTE **)(v4 + 92); v13 = *(_BYTE *)v19; if ( v12 ) { if ( *(_BYTE *)(v4 + 102) != v13 ) { *(_BYTE *)(v4 + 102) = v13; sub_64F4A0(v12, v4 + 100); } } } if ( v11 != v10 ) { memcpy_0(v11, v10, 0); v20 = v11; } sub_40C4E0(0, &v19); v14 = v19; if ( ((_BYTE *)v20 - (_BYTE *)v19) & 0xFFFFFFFC ) sub_645C90((_DWORD *)v4, *(_BYTE *)v19); sub_647C50((_DWORD *)v4); if ( v14 ) operator delete(v14); break; } } // ACDD50: using guessed type int dword_ACDD50; //----- (006463B0) -------------------------------------------------------- void __thiscall sub_6463B0(int this, unsigned int a2) { int v2; // esi unsigned __int8 v3; // al void *v4; // eax void *v5; // edi void *v6; // eax void *v7; // edi void *v8; // eax char v9; // cl char v10; // dl void *v11; // [esp+24h] [ebp-1Ch] void *v12; // [esp+28h] [ebp-18h] int v13; // [esp+2Ch] [ebp-14h] int v14; // [esp+3Ch] [ebp-4h] v2 = this; if ( *(_DWORD *)(this + 92) && *(_BYTE *)(this + 100) >> 7 != (_BYTE)a2 ) { v3 = ((_BYTE)a2 << 7) | *(_BYTE *)(this + 100) & 0x7F; *(_BYTE *)(this + 100) = v3; if ( v3 >> 7 == *(_BYTE *)(this + 191) ) { v9 = *(_BYTE *)(this + 189); v10 = *(_BYTE *)(v2 + 190); *(_BYTE *)(v2 + 101) = *(_BYTE *)(v2 + 188); *(_BYTE *)(v2 + 102) = v9; *(_BYTE *)(v2 + 103) = v10; } else { v11 = 0; v12 = 0; v13 = 0; v14 = 0; switch ( ((unsigned int)v3 >> 2) & 0x1F ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(a2) = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(a2) = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(a2) = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(a2) = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(a2) = 21; break; case 0x1Au: case 0x1Bu: LOBYTE(a2) = 26; break; default: LOBYTE(a2) = 0; break; } sub_40C590(a2, v3 >> 7, 0, &v11); v4 = v12; v5 = v11; if ( ((_BYTE *)v12 - (_BYTE *)v11) & 0xFFFFFFFC ) *(_BYTE *)(v2 + 101) = *(_BYTE *)v11; if ( v5 != v4 ) { memcpy_0(v5, v4, 0); v12 = v5; } sub_40D870(0, &v11); v6 = v12; v7 = v11; if ( ((_BYTE *)v12 - (_BYTE *)v11) & 0xFFFFFFFC ) *(_BYTE *)(v2 + 102) = *(_BYTE *)v11; if ( v7 != v6 ) { memcpy_0(v7, v6, 0); v12 = v7; } sub_40C4E0(0, &v11); v8 = v11; if ( ((_BYTE *)v12 - (_BYTE *)v11) & 0xFFFFFFFC ) *(_BYTE *)(v2 + 103) = *(_BYTE *)v11; v14 = -1; if ( v8 ) operator delete(v8); } sub_64F1F0(*(_DWORD **)(v2 + 92), (unsigned __int8 *)(v2 + 100), 2); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 92) + 564))(0.0); sub_85BED0(*(_DWORD ***)(v2 + 48), 0.0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v2 + 92) + 328))(102010, 0, 0); sub_664570(dword_AD8C90, 0.0); } } //----- (00646600) -------------------------------------------------------- void ***sub_646600() { return &std::tr1::_Bind,CHairShopFrameWork *>> `RTTI Type Descriptor'; } // AB33E0: using guessed type void **std::tr1::_Bind,CHairShopFrameWork *>> `RTTI Type Descriptor'; //----- (00646610) -------------------------------------------------------- void *__thiscall sub_646610(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base0::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9A8720: using guessed type void *std::tr1::_Impl_base0::`vftable'; //----- (00646640) -------------------------------------------------------- int __thiscall sub_646640(char *this) { return (int)(this + 4); } //----- (00646650) -------------------------------------------------------- char *__thiscall sub_646650(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0xCu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F1958: using guessed type void *std::tr1::_Impl_no_alloc0,CHairShopFrameWork *>>,0>,void>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006466B0) -------------------------------------------------------- int __thiscall sub_6466B0(int this) { return (*(int (__thiscall **)(_DWORD))(this + 4))(*(_DWORD *)(this + 8)); } //----- (006466C0) -------------------------------------------------------- char __thiscall sub_6466C0(int this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax volatile LONG *v5; // eax v1 = (_DWORD *)this; *(_WORD *)(this + 44) = 0; *(_BYTE *)(this + 56) = 0; if ( !dword_AD01E8 ) { v2 = sub_43D0D0(1u); dword_AD01E8 = sub_5C1E00(v2, 7, 7); sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_AD01E8); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 240))(0); } v3 = (_DWORD *)sub_6485D0((int)v1); v1[15] = v3; sub_8F8610(&unk_BA6B10, v3); v4 = (_DWORD *)sub_648A70((int)v1); v1[16] = v4; sub_8F82A0(&unk_BA6B10, v4); v5 = sub_6491C0((int)v1); v1[17] = v5; sub_8F82A0(&unk_BA6B10, v5); return 1; } // AD01E8: using guessed type int dword_AD01E8; //----- (00646770) -------------------------------------------------------- void __thiscall sub_646770(_DWORD *this) { this[41] = 0xFFFF; this[42] = 0xFFFF; this[43] = 0xFFFF; this[44] = 0xFFFF; this[45] = 0xFFFF; this[46] = 0xFFFF; } //----- (006467B0) -------------------------------------------------------- int __thiscall sub_6467B0(_DWORD **this) { _DWORD **v1; // esi int result; // eax v1 = this; if ( this[17] ) { sub_8F9E00(&unk_BA6B10, this[17]); v1[17] = 0; } if ( v1[16] ) { sub_8F9E00(&unk_BA6B10, v1[16]); v1[16] = 0; } if ( v1[15] ) { sub_8F9E00(&unk_BA6B10, v1[15]); v1[15] = 0; } if ( dword_AD01E8 ) { sub_8F9E00(&unk_BA6B10, (_DWORD *)dword_AD01E8); dword_AD01E8 = 0; } if ( v1[48] ) { sub_8F9E00(&unk_BA6B10, v1[48]); v1[48] = 0; } result = dword_BA6B5C; if ( dword_BA6B5C != -1 ) { while ( 1 ) { if ( ++result == dword_BA6B58 ) result = 0; if ( result == dword_BA6B60 ) break; if ( result == -1 ) { dword_BA6B5C = -1; return result; } } dword_BA6B60 = 0; dword_BA6B5C = -1; } return result; } // AD01E8: using guessed type int dword_AD01E8; // BA6B58: using guessed type int dword_BA6B58; // BA6B5C: using guessed type int dword_BA6B5C; // BA6B60: using guessed type int dword_BA6B60; //----- (00646870) -------------------------------------------------------- void __thiscall sub_646870(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; v2 = this[10]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[10] = 0; } v3 = v1[19]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[19] = 0; } v4 = v1[18]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[18] = 0; } if ( v1[9] ) { v5 = v1[9]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[9] = 0; } } v6 = v1[27]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } v1[27] = 0; } } //----- (00646940) -------------------------------------------------------- char __thiscall sub_646940(unsigned __int8 *this) { int v1; // eax unsigned __int8 *v2; // esi double v3; // st7 int v4; // edx unsigned __int8 *v5; // edi _DWORD *v6; // eax unsigned __int8 v8; // al unsigned __int8 v9; // cl unsigned __int8 v10; // dl unsigned __int8 v11; // al _DWORD *v12; // eax float v13; // [esp+24h] [ebp-1Ch] float v14; // [esp+28h] [ebp-18h] float v15; // [esp+2Ch] [ebp-14h] float v16; // [esp+30h] [ebp-10h] float v17; // [esp+34h] [ebp-Ch] float v18; // [esp+38h] [ebp-8h] float v19; // [esp+3Ch] [ebp-4h] v1 = dword_AC9CE8; v2 = this; v19 = fabs(1.5); v3 = v19; v4 = *((_DWORD *)this + 10); *((_DWORD *)this + 24) = *(_DWORD *)(dword_AC9CE8 + 52); *(_DWORD *)(v1 + 52) = v4; *(float *)(*((_DWORD *)this + 21) + 100) = v3; *(float *)(*((_DWORD *)this + 22) + 100) = v3; flt_AD8BE8 = *(float *)(dword_AC9CE8 + 44); v5 = this + 100; *(float *)(dword_AC9CE8 + 44) = 0.00044999999; *((_DWORD *)this + 25) = 0; v6 = (_DWORD *)sub_680770(byte_AD9238); if ( !v6 ) return 0; *(_DWORD *)v5 = *v6; v13 = 0.0; v8 = v2[101]; v14 = 0.0; v9 = v2[102]; v15 = 0.0; v10 = v2[103]; v16 = 0.0; v2[188] = v8; v11 = *v5; v17 = -1.0; v2[189] = v9; v18 = 0.0; v2[190] = v10; v2[191] = v11 >> 7; sub_66D990(&unk_AD8D28); v12 = sub_665580(dword_AD8C90, v5, (int)&v13, (int)&v16, 2); *((_DWORD *)v2 + 23) = v12; if ( !v12 ) return 0; *((_DWORD *)v2 + 12) = v12[175]; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v12 + 564))(v12, 0.0); sub_85BED0(*((_DWORD ***)v2 + 12), 0.0, 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v2 + 21) + 116))(*((_DWORD *)v2 + 12), 0); sub_85C4D0(*((_DWORD **)v2 + 21)); sub_85C6F0(*((_DWORD **)v2 + 21)); sub_85BED0(*((_DWORD ***)v2 + 21), 0.0, 1); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**((_DWORD **)v2 + 23) + 328))(102010, 0, 0); sub_664570(dword_AD8C90, 0.0); return 1; } // AC9CE8: using guessed type int dword_AC9CE8; // AD8BE8: using guessed type float flt_AD8BE8; //----- (00646B00) -------------------------------------------------------- char __thiscall sub_646B00(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // edi v1 = this; v2 = this[26]; v3 = dword_AB7F4C; if ( v2 != dword_AB7F4C ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[26] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } return 1; } // AB7F4C: using guessed type int dword_AB7F4C; //----- (00646B90) -------------------------------------------------------- char __thiscall sub_646B90(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // edi _DWORD *v4; // ST30_4 void *v5; // eax float *v6; // edi _DWORD *v7; // eax unsigned int v8; // edi unsigned int v9; // ebx int v10; // edi float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] void *v15; // [esp+50h] [ebp-18h] volatile LONG *v16; // [esp+54h] [ebp-14h] void **v17; // [esp+58h] [ebp-10h] int v18; // [esp+64h] [ebp-4h] v1 = this; v2 = this[27]; v12 = 0.0; v13 = 0.0; v1[36] = 1; v14 = 50.0; sub_8D8240((_DWORD *)(v2 + 176)); v3 = (_DWORD *)v1[29]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[28] + 8))(v1 + 28, v4); } v1[31] = 0; v1[29] = 0; v1[30] = 0; v17 = 0; if ( v1[36] > 0u ) { do { v5 = operator new(0x84u); v15 = v5; v6 = 0; v18 = 0; if ( v5 ) v6 = sub_68E760((float *)v5, (int)&v12, 0, 0, 5); v16 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v18 = 1; sub_8B8EC0(v1 + 28, (int *)&v16); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[27] + 116))(*((_DWORD *)v6 + 29), 0); v18 = -1; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); v17 = (void **)((char *)v17 + 1); } while ( (unsigned int)v17 < v1[36] ); } v7 = operator new(0xE8u); v15 = v7; v8 = 0; v18 = 2; if ( v7 ) v17 = (void **)sub_85A1C0(v7, 0); else v17 = 0; v18 = -1; sub_85AB50(v17, "ShadowNode"); v9 = (v1[33] - v1[32]) >> 2; if ( v9 ) { do { (*(void (__stdcall **)(volatile LONG **, _DWORD))(*(_DWORD *)v1[18] + 120))(&v16, *(_DWORD *)(v1[32] + 4 * v8)); if ( v16 ) { v15 = (void *)v16; if ( !InterlockedDecrement(v16 + 1) ) { if ( v15 ) (**(void (__stdcall ***)(signed int))v15)(1); } } (*((void (__stdcall **)(_DWORD, _DWORD))*v17 + 29))(*(_DWORD *)(v1[32] + 4 * v8++), 0); } while ( v8 < v9 ); } v10 = (int)v17; (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v1[19] + 116))(v17, 0); sub_85BED0((_DWORD **)v1[19], 0.0, 1); sub_85C4D0((_DWORD *)v1[19]); sub_85C6F0((_DWORD *)v1[19]); sub_645A20(v1, v10); return 1; } //----- (00646DB0) -------------------------------------------------------- _DWORD *__thiscall sub_646DB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[1] = 0; this[2] = 0; *this = &PgFrameWork::`vftable'; this[3] = operator new[](0x14u); v1[6] = 0; v1[4] = 1; v1[5] = -1; v1[7] = 0; *((_BYTE *)v1 + 32) = 0; *v1 = &CHairShopFrameWork::`vftable'; v1[9] = 0; v1[10] = 0; v1[18] = 0; v1[19] = 0; v1[21] = 0; v1[22] = 0; v1[26] = 0; v1[27] = 0; v1[31] = 0; v1[29] = 0; v1[30] = 0; v1[28] = &PgTList>::`vftable'; v1[32] = 0; v1[33] = 0; v1[34] = 0; v1[37] = 0; v1[38] = 0; v1[39] = 0; v1[15] = 0; v1[16] = 0; v1[17] = 0; v1[23] = 0; *(_WORD *)((char *)v1 + 189) = 0; *((_BYTE *)v1 + 188) = 0; *((_BYTE *)v1 + 191) = 0; v1[48] = 0; return v1; } // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9F19E4: using guessed type void *CHairShopFrameWork::`vftable'; //----- (00646E80) -------------------------------------------------------- void __thiscall sub_646E80(void **this) { void **v1; // ebx int v2; // esi _DWORD *v3; // edi _DWORD *v4; // ST00_4 volatile LONG *v5; // esi volatile LONG *v6; // esi volatile LONG *v7; // esi volatile LONG *v8; // esi volatile LONG *v9; // esi volatile LONG *v10; // esi volatile LONG *v11; // esi volatile LONG *v12; // esi void *v13; // ST00_4 v1 = this; *this = &CHairShopFrameWork::`vftable'; if ( this[37] ) operator delete(this[37]); v1[37] = 0; v1[38] = 0; v1[39] = 0; if ( v1[32] ) operator delete(v1[32]); v1[32] = 0; v1[33] = 0; v1[34] = 0; v2 = (int)(v1 + 28); v1[28] = &PgTList>::`vftable'; v3 = v1[29]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(void **, _DWORD *))(*(_DWORD *)v2 + 8))(v1 + 28, v4); } v1[31] = 0; v1[29] = 0; v1[30] = 0; *(_DWORD *)v2 = &NiTListBase,NiPointer>::`vftable'; v5 = (volatile LONG *)v1[27]; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); v6 = (volatile LONG *)v1[26]; if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); v7 = (volatile LONG *)v1[22]; if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(void *, signed int))v7)((void *)v7, 1); v8 = (volatile LONG *)v1[21]; if ( v8 && !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(void *, signed int))v8)((void *)v8, 1); v9 = (volatile LONG *)v1[19]; if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(void *, signed int))v9)((void *)v9, 1); v10 = (volatile LONG *)v1[18]; if ( v10 && !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(void *, signed int))v10)((void *)v10, 1); v11 = (volatile LONG *)v1[10]; if ( v11 && !InterlockedDecrement(v11 + 1) && v11 ) (**(void (__thiscall ***)(void *, signed int))v11)((void *)v11, 1); v12 = (volatile LONG *)v1[9]; if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(void *, signed int))v12)((void *)v12, 1); v13 = v1[3]; *v1 = &PgFrameWork::`vftable'; operator delete[](v13); } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8CC4: using guessed type void *PgFrameWork::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9F19E4: using guessed type void *CHairShopFrameWork::`vftable'; //----- (00647090) -------------------------------------------------------- char __thiscall sub_647090(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // esi int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // esi int v9; // ebx _DWORD *v10; // eax _DWORD *v11; // esi _DWORD *v12; // eax int v13; // esi _DWORD *v14; // eax int v15; // esi _DWORD *v16; // eax _DWORD *v17; // eax int v18; // esi float *v19; // eax float *v20; // esi int v21; // eax float *v22; // eax float *v23; // esi int v24; // eax int v25; // ST70_4 char *v26; // eax volatile LONG *v27; // esi void (__thiscall ***v28)(_DWORD, signed int); // esi void (__thiscall ***v30)(_DWORD, signed int); // esi int v31; // eax int v32; // ebx int v33; // eax int v34; // eax int v35; // ebx int v36; // eax int v37; // eax int v38; // eax int v39; // eax int v40; // ebx int v41; // esi int v42; // eax char *v43; // eax char *v44; // ebx char *v45; // ecx char *v46; // esi int v47; // esi void (__thiscall ***v48)(_DWORD, signed int); // esi _DWORD *v49; // [esp+98h] [ebp-20h] volatile LONG *v50; // [esp+9Ch] [ebp-1Ch] _DWORD *v51; // [esp+A0h] [ebp-18h] int v52; // [esp+A4h] [ebp-14h] int v53; // [esp+A8h] [ebp-10h] int v54; // [esp+B4h] [ebp-4h] v1 = this; v2 = operator new(0xE8u); v3 = 0; v54 = 0; if ( v2 ) v3 = sub_85A1C0(v2, 0); v4 = v1[18]; v54 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[18] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v5 = v1[27]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[27] = 0; } v6 = operator new(0xE8u); v54 = 1; if ( v6 ) v7 = sub_85A1C0(v6, 0); else v7 = 0; v8 = v1[27]; v54 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[27] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = 0; v49 = 0; v54 = 2; v10 = operator new(0x20u); v11 = v10; LOBYTE(v54) = 3; if ( v10 ) { sub_85B2B0(v10); *((_BYTE *)v11 + 30) = 0; *v11 = &NiAlphaProperty::`vftable'; *((_WORD *)v11 + 14) = 236; v9 = (int)v11; v49 = v11; InterlockedIncrement(v11 + 1); } *(_WORD *)(v9 + 28) |= 1u; *(_WORD *)(v9 + 28) |= 0x200u; *(_WORD *)(v9 + 28) = *(_WORD *)(v9 + 28) & 0xF3FF | 0x1000; *(_BYTE *)(v9 + 30) = 8; *(_WORD *)(v9 + 28) = (*(_WORD *)(v9 + 28) & 0xFE5F | 0x40) & 0xFFE3 | 2; v52 = v1[27]; v50 = (volatile LONG *)v9; InterlockedIncrement((volatile LONG *)(v9 + 4)); LOBYTE(v54) = 4; sub_8A6330((_DWORD *)(v52 + 156), (int *)&v50); LOBYTE(v54) = 2; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v12 = operator new(0x28u); v13 = (int)v12; LOBYTE(v54) = 5; if ( v12 ) { sub_85B2B0(v12); *(_DWORD *)v13 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v13 + 28) = 0; *(_DWORD *)(v13 + 32) = 0; *(_DWORD *)(v13 + 36) = 1; } else { v13 = 0; } v52 = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); *(_DWORD *)(v13 + 32) = 1; *(_DWORD *)(v13 + 36) = 1; v53 = v1[27]; v50 = (volatile LONG *)v13; InterlockedIncrement((volatile LONG *)(v13 + 4)); LOBYTE(v54) = 7; sub_8A6330((_DWORD *)(v53 + 156), (int *)&v50); LOBYTE(v54) = 6; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = operator new(0x30u); v15 = (int)v14; LOBYTE(v54) = 8; if ( v14 ) { sub_85B2B0(v14); *(_DWORD *)v15 = &NiFogProperty::`vftable'; *(float *)(v15 + 36) = 0.0; *(float *)(v15 + 40) = 0.0; *(float *)(v15 + 44) = 0.0; *(_WORD *)(v15 + 28) = 0; *(float *)(v15 + 32) = 1.0; *(_DWORD *)(v15 + 36) = dword_BA4724; *(_DWORD *)(v15 + 40) = dword_BA4728; *(_DWORD *)(v15 + 44) = dword_BA472C; } else { v15 = 0; } *(_WORD *)(v15 + 28) &= 0xFFFEu; v53 = v1[27]; v50 = (volatile LONG *)v15; InterlockedIncrement((volatile LONG *)(v15 + 4)); LOBYTE(v54) = 9; sub_8A6330((_DWORD *)(v53 + 156), (int *)&v50); LOBYTE(v54) = 6; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v16 = operator new(0xE8u); LOBYTE(v54) = 10; if ( v16 ) { v17 = sub_85A1C0(v16, 0); v53 = (int)v17; } else { v53 = 0; v17 = 0; } v18 = v1[19]; LOBYTE(v54) = 6; if ( (_DWORD *)v18 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v17 = (_DWORD *)v53; } v1[19] = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } v19 = (float *)operator new(0x10Cu); LOBYTE(v54) = 11; if ( v19 ) v20 = sub_861A00(v19); else v20 = 0; *((_DWORD *)v20 + 47) += 2; v20[56] = 1.0; LOBYTE(v54) = 6; v20[57] = 0.57999998; v20[58] = 0.57999998; v20[59] = 0.57999998; v21 = *((_DWORD *)v20 + 47); *((_DWORD *)v20 + 60) = dword_ABD4FC; *((_DWORD *)v20 + 61) = dword_ABD500; *((_DWORD *)v20 + 62) = dword_ABD504; *((_DWORD *)v20 + 47) = ++v21; *((_DWORD *)v20 + 63) = dword_BA4724; *((_DWORD *)v20 + 64) = dword_BA4728; *((_DWORD *)v20 + 65) = dword_BA472C; *((_DWORD *)v20 + 47) = v21 + 1; sub_861480(v20, v1[19]); *((_BYTE *)v20 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v1[19] + 116))(v20, 0); v22 = (float *)operator new(0x118u); LOBYTE(v54) = 12; if ( v22 ) v23 = sub_860F90(v22); else v23 = 0; v24 = ++*((_DWORD *)v23 + 47); v23[56] = 1.0; *((_DWORD *)v23 + 57) = dword_BA4724; *((_DWORD *)v23 + 58) = dword_BA4728; *((_DWORD *)v23 + 59) = dword_BA472C; v23[60] = 1.0; v23[61] = 1.0; v24 += 2; *((_DWORD *)v23 + 47) = v24; v23[62] = 1.0; *((_DWORD *)v23 + 63) = dword_BA4724; *((_DWORD *)v23 + 64) = dword_BA4728; *((_DWORD *)v23 + 65) = dword_BA472C; *((_DWORD *)v23 + 47) = v24 + 1; v25 = v1[19]; LOBYTE(v54) = 6; sub_861480(v23, v25); *((_BYTE *)v23 + 176) = 1; (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v1[19] + 116))(v23, 0); LOBYTE(v54) = 13; if ( !byte_ACAD5C ) sub_420410(); v26 = (char *)sub_401410(byte_ACAB50, "\\shop\\HairShopBack.nif"); v27 = sub_8F63D0(v26, 0); v50 = v27; if ( !v27 ) { v30 = (void (__thiscall ***)(_DWORD, signed int))v52; LOBYTE(v54) = 2; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) (**v30)(v30, 1); v54 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return 0; } InterlockedIncrement(v27 + 1); v51 = 0; if ( !sub_8F73A0(v27, &v51) ) { LOBYTE(v54) = 6; if ( !InterlockedDecrement(v27 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v27)(v27, 1); v28 = (void (__thiscall ***)(_DWORD, signed int))v52; LOBYTE(v54) = 2; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) (**v28)(v28, 1); v54 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return 0; } return 0; } v31 = (int)v51; v32 = v1[10]; v53 = (int)v51; if ( (_DWORD *)v32 != v51 ) { if ( v32 ) { if ( !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); v31 = v53; } v1[10] = v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); } v33 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v27 + 72))(v27, "Avatar01"); v34 = sub_402BA0((int)dword_BA455C, v33); v35 = v1[21]; v53 = v34; if ( v35 != v34 ) { if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); v36 = v53; v1[21] = v53; if ( v36 ) InterlockedIncrement((volatile LONG *)(v36 + 4)); } v37 = v1[21]; if ( v37 ) (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v1[19] + 116))(v37, 0); v38 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v27 + 72))(v27, "Avatar_Face"); v39 = sub_402BA0((int)dword_BA455C, v38); v40 = v1[22]; v41 = v39; if ( v40 != v39 ) { if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v40 ) (**(void (__thiscall ***)(int, signed int))v40)(v40, 1); v1[22] = v41; if ( v41 ) InterlockedIncrement((volatile LONG *)(v41 + 4)); } v42 = v1[22]; if ( v42 ) (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v1[19] + 116))(v42, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(*(_DWORD *)v1[18] + 116))(v50, 0); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[18] + 116))(v1[19], 0); v43 = (char *)v1[38]; v44 = (char *)v1[37]; if ( v44 != v43 ) { v53 = 0; memcpy_0(v44, v43, 0); v1[38] = &v44[v53]; } v53 = v1[21]; sub_5B3CF0(v1 + 37, &v53); v45 = (char *)v1[33]; v46 = (char *)v1[32]; if ( v46 != v45 ) { v53 = 0; memcpy_0(v46, v45, 0); v1[33] = &v46[v53]; } v47 = (int)v50; v50 = (volatile LONG *)(*(int (__thiscall **)(volatile LONG *, const char *))(*v50 + 72))(v50, "Object33"); if ( v50 ) sub_5B3CF0(v1 + 32, &v50); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[19] + 116))(v1[27], 0); sub_85C4D0((_DWORD *)v1[18]); sub_85C6F0((_DWORD *)v1[18]); sub_85BED0((_DWORD **)v1[18], 0.0, 1); LOBYTE(v54) = 6; if ( !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); v48 = (void (__thiscall ***)(_DWORD, signed int))v52; LOBYTE(v54) = 2; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) (**v48)(v48, 1); v54 = -1; if ( !InterlockedDecrement(v49 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v49)(v49, 1); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACAD5C: using guessed type char byte_ACAD5C; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00647990) -------------------------------------------------------- void *__thiscall sub_647990(_DWORD *this) { _DWORD *v1; // esi const void *v2; // ecx void *v3; // edi void *result; // eax const void *v5; // ecx void *v6; // edi _DWORD *v7; // edi _DWORD *i; // esi _DWORD *v9; // ST08_4 v1 = this; v2 = (const void *)this[33]; v3 = (void *)v1[32]; if ( v3 != v2 ) { result = memcpy_0(v3, v2, 0); v1[33] = v3; } v5 = (const void *)v1[38]; v6 = (void *)v1[37]; if ( v6 != v5 ) { result = memcpy_0(v6, v5, 0); v1[38] = v6; } v7 = v1 + 28; for ( i = (_DWORD *)v1[29]; i; result = (void *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9) ) { v9 = i; i = (_DWORD *)*i; } v7[3] = 0; v7[1] = 0; v7[2] = 0; return result; } //----- (00647A20) -------------------------------------------------------- char __thiscall sub_647A20(unsigned __int8 *this, int a2) { unsigned __int8 *v2; // esi _DWORD *v4; // ecx char *v5; // eax char *v6; // ST04_4 void **v7; // eax v2 = this; if ( !sub_647090(this) || !sub_646940(v2) || !sub_6466C0((int)v2) || !sub_646B00(v2) || !sub_646B90(v2) ) return 0; v2[32] = 1; sub_646770(v2); sub_647C90(v4); v5 = sub_4083B0(); v6 = (char *)sub_401410(v5, "\\shop\\shop.conf"); v7 = sub_8E50C0(); sub_8E5310((CHAR ***)v7, v6); return 1; } //----- (00647AA0) -------------------------------------------------------- void __thiscall sub_647AA0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // eax int v4; // edi v1 = this; sub_647990(this); v2 = v1[26]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[26] = 0; } sub_6467B0((_DWORD **)v1); v3 = dword_AC9CE8; if ( dword_AC9CE8 ) { *(float *)(dword_AC9CE8 + 44) = 0.0017500001; *(_DWORD *)(v3 + 52) = v1[24]; } v4 = v1[21]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[21] = 0; } v1[23] = 0; sub_665FD0(dword_AD8C90); sub_646870(v1); *((_BYTE *)v1 + 32) = 0; v1[7] = 0; } // AC9CE8: using guessed type int dword_AC9CE8; //----- (00647B40) -------------------------------------------------------- int *sub_647B40() { return &dword_AD8BEC; } // AD8BEC: using guessed type int dword_AD8BEC; //----- (00647B50) -------------------------------------------------------- int sub_647B50() { return dword_AD8BEC; } // AD8BEC: using guessed type int dword_AD8BEC; //----- (00647B60) -------------------------------------------------------- void *__thiscall sub_647B60(void *this, char a2) { void *v2; // esi v2 = this; sub_646E80((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00647BB0) -------------------------------------------------------- int __thiscall sub_647BB0(_WORD *this, int a2, _WORD *a3) { if ( *a3 == 4736 ) { this[82] = a3[1]; this[83] = a3[2]; this[84] = a3[3]; this[85] = a3[4]; this[86] = a3[5]; this[87] = a3[6]; this[88] = a3[7]; this[89] = a3[8]; this[90] = a3[9]; this[91] = a3[10]; this[92] = a3[11]; this[93] = a3[12]; } return a2; } //----- (00647C50) -------------------------------------------------------- char __thiscall sub_647C50(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx char result; // al int v5; // [esp+4h] [ebp-8h] __int16 v6; // [esp+8h] [ebp-4h] v1 = this; v2 = this[26]; if ( v2 ) { v6 = 4216; sub_905F90(v2, &v6, 2u); v3 = v1[26]; v5 = v1[25]; result = sub_906000(v3, &v5, 4u); } return result; } //----- (00647C90) -------------------------------------------------------- char __thiscall sub_647C90(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx char result; // al __int16 v4; // [esp+4h] [ebp-8h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[26]; if ( v2 ) { v4 = 4220; sub_905F90(v2, &v4, 2u); result = sub_906000(v1[26], &v5, 1u); } return result; } //----- (00647CD0) -------------------------------------------------------- int __thiscall sub_647CD0(void **this, int a2, int a3) { void **v3; // esi v3 = this; word_B7D19C = *(_WORD *)a3; sub_680620(byte_AD9238, (void *)(a3 + 3), *(unsigned __int8 *)(a3 + 2)); sub_6F3480(v3[26]); sub_8EF040(v3, dword_ACDD5C, 0); return a2; } // ACDD5C: using guessed type int dword_ACDD5C; // B7D19C: using guessed type __int16 word_B7D19C; //----- (00647D20) -------------------------------------------------------- int __thiscall sub_647D20(char *this, int a2, unsigned __int16 *a3) { int v3; // eax char *v4; // esi char *v5; // eax int v6; // ST10_4 const CHAR *v7; // ST0C_4 char *v8; // eax int result; // eax int v10; // ST10_4 const CHAR *v11; // ST0C_4 char *v12; // eax unsigned __int8 v13; // al __int16 v14; // cx char *v15; // eax char v16; // dl char v17; // al char v18; // cl v3 = *a3; v4 = this; if ( (_WORD)v3 == 4736 ) { v12 = (char *)sub_40C190(-1500872257); sub_462C30(1, v12); HIBYTE(a3) = 0; v13 = sub_645CD0(v4, (_BYTE *)&a3 + 3); if ( v13 < 6u ) { v14 = *(_WORD *)&v4[4 * v13 + 166]; v15 = &v4[4 * v13 + 166]; if ( v14 ) *(_WORD *)v15 = v14 - 1; } v16 = v4[102]; v17 = v4[101]; v4[190] = v4[103]; v18 = (unsigned __int8)v4[100] >> 7; v4[189] = v16; v4[188] = v17; v4[191] = v18; LABEL_13: result = a2; } else { switch ( v3 ) { case 4737: case 4738: v6 = *a3; v7 = sub_40C190(-723960768); v8 = sub_7549E0("%s(%d)", v7, v6); goto LABEL_5; case 4739: v5 = (char *)sub_40C190(-1645099327); goto LABEL_8; case 4740: v10 = *a3; v11 = sub_40C190(-1796740911); v8 = sub_7549E0("%s(%d)", v11, v10); LABEL_5: sub_462C30(1, v8); result = a2; break; case 4742: v5 = (char *)sub_40C190(942497856); LABEL_8: sub_462C30(1, v5); result = a2; break; default: goto LABEL_13; } } return result; } //----- (00647E40) -------------------------------------------------------- int __thiscall sub_647E40(void **this, int a2, int a3, int a4, unsigned __int16 *a5) { int result; // eax result = 0; if ( a2 == 3 ) { if ( a3 == 20 ) { result = sub_647CD0(this, a4, (int)a5); } else if ( a3 != 21 && a3 == 23 ) { if ( *a5 == 1667 ) byte_B68508 = 1; result = a4; } } else if ( a2 == 4 ) { if ( a3 == 121 ) { result = sub_647D20((char *)this, a4, a5); } else if ( a3 == 125 ) { result = sub_647BB0(this, a4, a5); } } return result; } // B68508: using guessed type char byte_B68508; //----- (00647F00) -------------------------------------------------------- void __thiscall sub_647F00(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( this[91] ) { if ( timeGetTime() - this[91] > 0x3E8 ) { v3 = v2[89]; v2[91] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 240))(1); } } } //----- (00647FA0) -------------------------------------------------------- char __thiscall sub_647FA0(_DWORD *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v8; // edi int v9; // ebx volatile LONG **v10; // eax volatile LONG *v11; // edi int v12; // ST1C_4 int v13; // ST18_4 int v14; // eax volatile LONG *v15; // eax int v16; // edi int v17; // eax int v18; // edi const CHAR *v19; // eax volatile LONG **v20; // edi volatile LONG *v21; // eax int v22; // edi int v23; // ST20_4 int v24; // ST1C_4 int v25; // ST18_4 int v26; // eax volatile LONG *v27; // eax int v28; // edi const CHAR *v29; // eax int v30; // edi int v31; // eax volatile LONG **v32; // edi volatile LONG *v33; // edi int v34; // ST1C_4 int v35; // ST18_4 int v36; // eax volatile LONG *v37; // edi volatile LONG v38; // ST3C_4 int v39; // eax volatile LONG v40; // ST3C_4 const CHAR *v41; // eax volatile LONG **v42; // edi volatile LONG *v43; // ST20_4 volatile LONG *v44; // edi int v45; // ST1C_4 int v46; // ST18_4 int v47; // eax volatile LONG *v48; // eax int v49; // edi int v50; // eax int v51; // edi const CHAR *v52; // eax volatile LONG *v53; // edi int v54; // ST30_4 int (__thiscall *v55)(int); // eax int v56; // ST30_4 int v57; // ST30_4 void (__thiscall ***v58)(_DWORD, signed int); // esi int v59; // [esp+14h] [ebp-18h] int v60; // [esp+18h] [ebp-14h] int v61; // [esp+1Ch] [ebp-10h] int v62; // [esp+28h] [ebp-4h] int v63; // [esp+34h] [ebp+8h] v2 = (int)this; this[91] = 0; v61 = 0; v3 = dword_BA6BA0; v62 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "\\shop\\ShopPanel.nif"); sub_8F66B0(v4, (int)&v61, v3); if ( !v61 ) return 0; v5 = sub_8FB140(v61, (int)"Plane01", (int)&v59, (int)&v60, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"CHairShopOkCancelWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v61; v62 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v60; v9 = v59; v63 = v60; v10 = sub_8FB140(v61, (int)"TextPanel", (int)&v59, (int)&v60, 0); v11 = sub_8F3EB0(v59 - v9, v60 - v8, (int)v10, v2, 0, 0); v12 = sub_421050(0); v13 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 148))(v11); v14 = (*(int (__thiscall **)(volatile LONG *))(*v11 + 144))(v11); v15 = sub_8F4A20(0, 2, v14, v13, v12, (int)v11, 0, 0); *(_DWORD *)(v2 + 344) = v15; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 488))(v15, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); sub_9076A0(*(_DWORD **)(*(_DWORD *)(v2 + 344) + 288), 6); v16 = **(_DWORD **)(v2 + 344); v17 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v16 + 452))(*(_DWORD *)(v2 + 344), v17); v18 = **(_DWORD **)(v2 + 344); v19 = sub_40C190(-2137536299); (*(void (__thiscall **)(_DWORD, const CHAR *))(v18 + 472))(*(_DWORD *)(v2 + 344), v19); v20 = sub_8FB140(v61, (int)"PrePageNor", (int)&v59, (int)&v60, 0); sub_8FB650(v20, v61, (int)"PrePageClick"); sub_8FB650(v20, v61, (int)"PrePageOver"); v21 = sub_8FE0F0(v59 - v9, v60 - v63, (int)v20, v2, 0, 0, 0); *(_DWORD *)(v2 + 356) = v21; *((_BYTE *)v21 + 320) = 0; v22 = *(_DWORD *)(v2 + 356); v23 = *(_DWORD *)(v2 + 356); v24 = sub_421050(0); v25 = (*(int (__thiscall **)(int))(*(_DWORD *)v22 + 148))(v22); v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v22 + 144))(v22); v27 = sub_8F4A20(0, 3, v26, v25, v24, v23, 0, 0); *(_DWORD *)(v2 + 348) = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = **(_DWORD **)(v2 + 348); v29 = sub_40C190(-632867535); (*(void (__thiscall **)(_DWORD, const CHAR *))(v28 + 472))(*(_DWORD *)(v2 + 348), v29); v30 = **(_DWORD **)(v2 + 348); v31 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v30 + 452))(*(_DWORD *)(v2 + 348), v31); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v2 + 348) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); v32 = sub_8FB140(v61, (int)"CreatCharNor", (int)&v59, (int)&v60, 0); sub_8FB650(v32, v61, (int)"CreatCharClick"); sub_8FB650(v32, v61, (int)"CreatCharOver"); v33 = sub_8FE0F0(v59 - v9, v60 - v63, (int)v32, v2, 2, 0, 0); v34 = sub_421050(0); v35 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 148))(v33); v36 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 144))(v33); v37 = sub_8F4A20(0, 3, v36, v35, v34, (int)v33, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v38 = *v37; v39 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v38 + 452))(v37, v39); v40 = *v37; v41 = sub_40C190(-1142367184); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v37, v41); sub_9074F0(*((_DWORD *)v37 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v42 = sub_8FB140(v61, (int)"StartNor", (int)&v59, (int)&v60, 0); sub_8FB650(v42, v61, (int)"StartClick"); sub_8FB650(v42, v61, (int)"StartOver"); v43 = sub_8FE0F0(v59 - v9, v60 - v63, (int)v42, v2, 1, 0, 0); *(_DWORD *)(v2 + 360) = v43; v44 = v43; v45 = sub_421050(0); v46 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 148))(v44); v47 = (*(int (__thiscall **)(volatile LONG *))(*v44 + 144))(v44); v48 = sub_8F4A20(0, 3, v47, v46, v45, (int)v43, 0, 0); *(_DWORD *)(v2 + 352) = v48; (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); v49 = **(_DWORD **)(v2 + 352); v50 = sub_421050(3); (*(void (__thiscall **)(_DWORD, int))(v49 + 452))(*(_DWORD *)(v2 + 352), v50); v51 = **(_DWORD **)(v2 + 352); v52 = sub_40C190(1169396396); (*(void (__thiscall **)(_DWORD, const CHAR *))(v51 + 472))(*(_DWORD *)(v2 + 352), v52); sub_9074F0(*(_DWORD *)(*(_DWORD *)(v2 + 352) + 288), 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); v53 = *(volatile LONG **)v2; if ( xRight == 1024 ) { v54 = dword_AC2F78 - (*((int (__thiscall **)(int))v53 + 37))(v2) + 4; (*((void (__thiscall **)(int, signed int, int))v53 + 77))(v2, -64, v54); } else { v55 = (int (__thiscall *)(int))*((_DWORD *)v53 + 37); if ( xRight == 800 ) { v56 = dword_AC2F78 - v55(v2) + 4; (*((void (__thiscall **)(int, signed int, int))v53 + 77))(v2, -274, v56); } else { v57 = dword_AC2F78 - v55(v2) + 4; (*((void (__thiscall **)(int, _DWORD, int))v53 + 77))(v2, 0, v57); } } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v58 = (void (__thiscall ***)(_DWORD, signed int))v61; v62 = -1; if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v58 ) (**v58)(v58, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00648560) -------------------------------------------------------- char __thiscall sub_648560(int *this, int a2, int a3) { DWORD v3; // eax int *v4; // esi LOBYTE(v3) = a2; v4 = this; if ( a2 ) { if ( a2 == 1 ) { LOBYTE(v3) = sub_6459D0(this[74]); } else { LOBYTE(v3) = a2 - 2; if ( a2 == 2 ) LOBYTE(v3) = sub_645900((_DWORD **)this[74]); } } else if ( !this[91] ) { sub_645DE0((char *)this[74]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4[89] + 240))(0); v3 = timeGetTime(); v4[91] = v3; } return v3; } //----- (006485D0) -------------------------------------------------------- int __cdecl sub_6485D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CHairShopOkCancelWin::`vftable'; *(_DWORD *)(v2 + 232) = &CHairShopOkCancelWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F1AF4: using guessed type void *CHairShopOkCancelWin::`vftable'; // 9F1B14: using guessed type void *CHairShopOkCancelWin::`vftable'; //----- (00648710) -------------------------------------------------------- void *__thiscall sub_648710(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CHairShopOkCancelWin::`vftable'; *((_DWORD *)this + 58) = &CHairShopOkCancelWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F1AF4: using guessed type void *CHairShopOkCancelWin::`vftable'; // 9F1B14: using guessed type void *CHairShopOkCancelWin::`vftable'; //----- (00648800) -------------------------------------------------------- int __thiscall sub_648800(_DWORD *this, int a2, int a3) { int result; // eax if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) { result = this[86]; if ( result ) { *(_BYTE *)(this[86] + 44) = *(_BYTE *)(result + 44) == 0; result = this[86]; *(_BYTE *)(result + 45) = 0; } } } else { result = this[86]; if ( result ) { *(_BYTE *)(result + 44) = *(_BYTE *)(result + 44) == 0; *(_BYTE *)(this[86] + 45) = 1; } } return result; } //----- (00648860) -------------------------------------------------------- char __thiscall sub_648860(_DWORD *this, int a2) { int v2; // esi int v3; // edi volatile LONG *v4; // ebx void (__thiscall ***v5)(_DWORD, signed int); // esi LONG v6; // eax char *v8; // eax volatile LONG **v9; // edi volatile LONG **v10; // edi volatile LONG *v11; // eax void (__thiscall *v12)(int, int, int, _DWORD, _DWORD); // edx void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // [esp+18h] [ebp-18h] int v15; // [esp+1Ch] [ebp-14h] int v16; // [esp+20h] [ebp-10h] int v17; // [esp+2Ch] [ebp-4h] v2 = (int)this; v16 = 0; v3 = a2; v17 = 0; this[86] = a2; v4 = (volatile LONG *)sub_43D0D0(5u); if ( !v4 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v16; v17 = -1; if ( v16 ) { v6 = InterlockedDecrement((volatile LONG *)(v16 + 4)); goto LABEL_4; } return 0; } v14 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Shop\\CreatCharTurnButton.nif"); sub_8F66B0(v8, (int)&v16, v14); if ( !v16 ) return 0; if ( !sub_8F15E0((volatile LONG **)v2, 0, 0, 0, v3, (int)"HairShopViewCtrlWin", 0) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v16; v17 = -1; if ( v16 ) { v6 = InterlockedDecrement((volatile LONG *)(v16 + 4)); LABEL_4: if ( !v6 ) { if ( v5 ) (**v5)(v5, 1); } } return 0; } v9 = sub_8FB140(v16, (int)"TurnL", (int)&v15, (int)&a2, v4); sub_8FB650(v9, v16, (int)"TurnLClick"); *(_DWORD *)(v2 + 348) = sub_8FE0F0(v15, a2, (int)v9, v2, 0, 0, 0); v10 = sub_8FB140(v16, (int)"TurnR", (int)&v15, (int)&a2, v4); sub_8FB650(v10, v16, (int)"TurnRClick"); v11 = sub_8FE0F0(v15, a2, (int)v10, v2, 1, 0, 0); v12 = *(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236); *(_DWORD *)(v2 + 352) = v11; v12(v2, xRight, dword_AC2F78, 0.33000001, 0.44); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); v17 = -1; if ( v16 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00648A70) -------------------------------------------------------- int __cdecl sub_648A70(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &CHairShopViewCtrlWin::`vftable'; *(_DWORD *)(v2 + 232) = &CHairShopViewCtrlWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F1D94: using guessed type void *CHairShopViewCtrlWin::`vftable'; // 9F1DB4: using guessed type void *CHairShopViewCtrlWin::`vftable'; //----- (00648BC0) -------------------------------------------------------- void *__thiscall sub_648BC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CHairShopViewCtrlWin::`vftable'; *((_DWORD *)this + 58) = &CHairShopViewCtrlWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F1D94: using guessed type void *CHairShopViewCtrlWin::`vftable'; // 9F1DB4: using guessed type void *CHairShopViewCtrlWin::`vftable'; //----- (00648C90) -------------------------------------------------------- bool __thiscall sub_648C90(_DWORD *this, int a2, int a3, _DWORD *a4) { return sub_907E00(this, a2, a3, 32, 32, a4, 0, 0) != 0; } //----- (00648D10) -------------------------------------------------------- int __thiscall sub_648D10(_DWORD *this) { int result; // eax if ( this[125] ) { *(_DWORD *)(this[125] + 344) = *(_DWORD *)(this[126] + 300); result = sub_465130((_DWORD *)this[125]); } return result; } //----- (00648D40) -------------------------------------------------------- void __thiscall sub_648D40(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( *(_BYTE *)(this + 380) != -1 ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 296), *(unsigned __int8 *)(v1 + 380)); } } //----- (00648D70) -------------------------------------------------------- _DWORD *__thiscall sub_648D70(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &CHairShopwin::`vftable'; v1[58] = &CHairShopwin::`vftable'; v1[126] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; *((_WORD *)v1 + 198) = -256; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F253C: using guessed type void *CHairShopwin::`vftable'; // 9F255C: using guessed type void *CHairShopwin::`vftable'; //----- (00648F20) -------------------------------------------------------- void __thiscall sub_648F20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx const CHAR *v3; // eax unsigned int v4; // eax const CHAR *v5; // eax unsigned int v6; // eax v1 = this; v2 = (_DWORD *)this[125]; if ( v2 ) { sub_466A50(v2); v3 = sub_40C190(1112702319); v4 = ((int (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(v1[125], v3); sub_464B20((_DWORD *)v1[125], v4, 1); v5 = sub_40C190(-1701610371); v6 = ((int (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(v1[125], v5); sub_464B20((_DWORD *)v1[125], v6, 0); sub_464D00((_DWORD *)v1[125], 5); sub_465130((_DWORD *)v1[125]); } } //----- (00648FA0) -------------------------------------------------------- int __thiscall sub_648FA0(_WORD *this, unsigned __int8 a2) { unsigned __int8 v2; // bl _WORD *v3; // esi int v4; // edi int v5; // eax int result; // eax int v7; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; v4 = a2; if ( sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), a2) ) { v7 = *(_DWORD *)v3; v5 = sub_42BF30((int)"HairColor"); (*(void (__thiscall **)(_WORD *, int, int, signed int, signed int))(v7 + 584))(v3, v5, v4, 32, 32); v3[14] &= 0xFFFEu; result = (*(int (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v3 + 240))(v3, 1); } else { (*(void (__thiscall **)(_WORD *, _DWORD, signed int, signed int, signed int))(*(_DWORD *)v3 + 584))( v3, 0, -1, 32, 32); v3[14] |= 1u; result = (*(int (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v3 + 240))(v3, 0); } *((_BYTE *)v3 + 380) = v2; return result; } // AC9CA0: using guessed type int dword_AC9CA0; //----- (00649030) -------------------------------------------------------- int __thiscall sub_649030(unsigned __int8 *this) { void **v1; // esi int v2; // eax v1 = (void **)this; v2 = sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), this[380]); if ( v2 ) sub_8F2EA0(v1, (const char *)(v2 + 16)); return sub_8F2F90((int)v1); } // AC9CA0: using guessed type int dword_AC9CA0; //----- (00649060) -------------------------------------------------------- int __cdecl sub_649060(int a1, int a2, int a3) { _DWORD *v3; // eax int v4; // esi void (__thiscall ***v5)(void *, signed int); // edi int result; // eax void *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v3 = operator new(0x180u); v4 = (int)v3; v7 = v3; v8 = 0; if ( v3 ) { sub_5D35C0(v3); LOBYTE(v8) = 1; *(_DWORD *)v4 = &CColorIcon::`vftable'; *(_DWORD *)(v4 + 232) = &CColorIcon::`vftable'; *(_BYTE *)(v4 + 380) = -1; sub_5D4380((_DWORD *)v4, 0x20u, (volatile LONG *)0x20); } else { v4 = 0; } if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v8 = 2; sub_403790(&unk_BA6B10, v4); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)v4 + 608))(v4, a1, a2, a3) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 356))(v4); v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v4; } else { sub_403A70(&unk_BA6B10, &v7, (_DWORD *)v4); if ( v7 ) { v5 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v5 ) (**v5)(v5, 1); } } v8 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } return result; } // 9F22B4: using guessed type void *CColorIcon::`vftable'; // 9F22D4: using guessed type void *CColorIcon::`vftable'; //----- (006491C0) -------------------------------------------------------- volatile LONG *__cdecl sub_6491C0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1FCu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_648D70(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006492F0) -------------------------------------------------------- void __thiscall sub_6492F0(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3) { int v3; // esi _DWORD *v4; // ecx int v5; // edi unsigned __int8 *v6; // ebx unsigned int v7; // esi int v8; // eax unsigned int v9; // eax void *v10; // [esp+10h] [ebp-20h] int v11; // [esp+14h] [ebp-1Ch] int v12; // [esp+18h] [ebp-18h] _DWORD *v13; // [esp+20h] [ebp-10h] int v14; // [esp+2Ch] [ebp-4h] int v15; // [esp+38h] [ebp+8h] v3 = (int)this; v13 = this; v4 = (_DWORD *)this[125]; v5 = 0; if ( v4 ) { sub_466A50(v4); v10 = 0; v11 = 0; v12 = 0; v14 = 0; if ( a3 == -1 ) sub_40C4E0(a2, &v10); else sub_64B180(a3, a2, &v10); v6 = (unsigned __int8 *)v10; v15 = (v11 - (signed int)v10) >> 2; if ( v15 > 0 ) { do { v7 = v6[4 * v5]; v8 = sub_7474E0((_DWORD *)(dword_AC9C9C + 4), v7); if ( v8 ) { v9 = ((int (__thiscall *)(_DWORD, int))loc_466CA0)(v13[125], v8 + 1); sub_464B20((_DWORD *)v13[125], v9, v7); } ++v5; } while ( v5 < v15 ); v3 = (int)v13; } sub_464D00(*(_DWORD **)(v3 + 500), 5); sub_465130(*(_DWORD **)(v3 + 500)); if ( v6 ) operator delete(v6); } } // AC9C9C: using guessed type int dword_AC9C9C; //----- (00649400) -------------------------------------------------------- void __thiscall sub_649400(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3) { int v3; // edi _DWORD *v4; // ecx unsigned __int8 *v5; // eax unsigned __int8 v6; // cl char v7; // cl _BYTE *v8; // esi int v9; // ecx int v10; // eax unsigned __int8 v11; // bl int v12; // eax unsigned int v13; // edi unsigned int v14; // esi _BYTE *v15; // eax int v16; // esi unsigned int v17; // eax void *v18; // [esp+10h] [ebp-24h] int v19; // [esp+14h] [ebp-20h] int v20; // [esp+18h] [ebp-1Ch] _DWORD *v21; // [esp+20h] [ebp-14h] unsigned int v22; // [esp+24h] [ebp-10h] int v23; // [esp+30h] [ebp-4h] int v24; // [esp+3Ch] [ebp+8h] int v25; // [esp+40h] [ebp+Ch] v3 = (int)this; v21 = this; v4 = (_DWORD *)this[125]; if ( v4 ) { sub_466A50(v4); v5 = (unsigned __int8 *)(*(_DWORD *)(v3 + 344) + 100); if ( *(_DWORD *)(v3 + 344) != -100 ) { v6 = *v5; switch ( ((unsigned int)*v5 >> 2) & 0x1F ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(v22) = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(v22) = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(v22) = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(v22) = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(v22) = 21; break; case 0x1Au: case 0x1Bu: LOBYTE(v22) = 26; break; default: LOBYTE(v22) = 0; break; } v18 = 0; v19 = 0; v20 = 0; v7 = v6 >> 7; v23 = 0; if ( a3 == -1 ) sub_40C590(v22, v7, a2, &v18); else sub_64B1E0(v22, v7, a3, a2, &v18); v8 = v18; v9 = (v19 - (signed int)v18) >> 2; v10 = 0; v24 = v9; v25 = 0; if ( v9 > 0 ) { do { v11 = v8[4 * v10]; v12 = *(_DWORD *)(dword_AC9C94 + 56); if ( v12 ) v13 = *(_DWORD *)(v12 + 40); else v13 = 0; v14 = 0; if ( v13 ) { while ( 1 ) { v15 = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v14); if ( *v15 == v11 ) break; if ( ++v14 >= v13 ) goto LABEL_23; } v16 = (int)v21; v17 = ((int (__thiscall *)(_DWORD, _BYTE *))loc_466CA0)(v21[125], v15 + 33); sub_464B20(*(_DWORD **)(v16 + 500), v17, v11); LABEL_23: v9 = v24; } v8 = v18; v10 = v25 + 1; v25 = v10; } while ( v10 < v9 ); v3 = (int)v21; } sub_464D00(*(_DWORD **)(v3 + 500), 5); sub_465130(*(_DWORD **)(v3 + 500)); if ( v8 ) operator delete(v8); } } } // AC9C94: using guessed type int dword_AC9C94; //----- (00649610) -------------------------------------------------------- void __thiscall sub_649610(char *this, unsigned __int8 a2, unsigned __int8 a3) { char *v3; // esi unsigned __int8 *v4; // edi unsigned __int8 v5; // bl _WORD **v6; // esi _WORD *v7; // ecx void *v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] int v11; // [esp+28h] [ebp-4h] unsigned __int8 v12; // [esp+37h] [ebp+Bh] v3 = this; v8 = 0; v9 = 0; v10 = 0; v11 = 0; if ( a3 == -1 ) sub_40D870(a2, &v8); else sub_64B530(a3, a2, &v8); v4 = (unsigned __int8 *)v8; v5 = 0; v12 = (v9 - (signed int)v8) >> 2; v6 = (_WORD **)(v3 + 400); do { v7 = *v6; if ( v5 < v12 ) sub_648FA0(v7, *v4); else sub_648FA0(v7, 0xFFu); ++v5; v4 += 4; ++v6; } while ( v5 < 0x19u ); if ( v8 ) operator delete(v8); } //----- (006496D0) -------------------------------------------------------- void __thiscall sub_6496D0(int this, char a2) { unsigned __int8 v2; // al int v3; // esi char v4; // al v2 = 0; v3 = this + 364; do { if ( *(_DWORD *)v3 ) *(_BYTE *)(*(_DWORD *)v3 + 380) = a2 == v2; ++v2; v3 += 4; } while ( v2 < 4u ); v4 = *(_BYTE *)(this + 396); switch ( v4 ) { case 1: if ( a2 ) { if ( a2 == 1 ) { sub_649400((_DWORD *)this, 4u, 4u); } else if ( a2 == 2 ) { sub_649400((_DWORD *)this, 5u, 5u); } } else { sub_649400((_DWORD *)this, 1u, 0); } break; case 2: if ( a2 ) { if ( a2 == 1 ) { sub_6492F0((_DWORD *)this, 4u, 4u); } else if ( a2 == 2 ) { sub_6492F0((_DWORD *)this, 5u, 5u); } } else { sub_6492F0((_DWORD *)this, 1u, 0); } break; case 3: sub_648F20((_DWORD *)this); break; } } //----- (006497B0) -------------------------------------------------------- void __thiscall sub_6497B0(char *this, char a2) { char *v2; // ebx unsigned __int8 v3; // al int v4; // edi unsigned __int8 *v5; // edi unsigned __int8 v6; // bl _WORD **v7; // esi _WORD *v8; // ecx void *v9; // [esp+10h] [ebp-20h] int v10; // [esp+14h] [ebp-1Ch] int v11; // [esp+18h] [ebp-18h] char *v12; // [esp+20h] [ebp-10h] int v13; // [esp+2Ch] [ebp-4h] unsigned __int8 v14; // [esp+3Bh] [ebp+Bh] v2 = this; v12 = this; v3 = 0; v4 = (int)(this + 380); do { if ( *(_DWORD *)v4 ) { *(_BYTE *)(*(_DWORD *)v4 + 380) = a2 == v3; v2 = v12; } ++v3; v4 += 4; } while ( v3 < 4u ); if ( a2 ) { if ( a2 == 1 ) { sub_649610(v2, 4u, 4u); } else if ( a2 == 2 ) { sub_649610(v2, 5u, 5u); } } else { v9 = 0; v10 = 0; v11 = 0; v13 = 0; sub_64B530(0, 1u, &v9); v5 = (unsigned __int8 *)v9; v6 = 0; v14 = (v10 - (signed int)v9) >> 2; v7 = (_WORD **)(v12 + 400); do { v8 = *v7; if ( v6 < v14 ) sub_648FA0(v8, *v5); else sub_648FA0(v8, 0xFFu); ++v6; v5 += 4; ++v7; } while ( v6 < 0x19u ); if ( v9 ) operator delete(v9); } } //----- (006498E0) -------------------------------------------------------- void __thiscall sub_6498E0(int this, int a2) { _DWORD **v2; // esi char v3; // al int v4; // edi signed int v5; // ebx int v6; // edi signed int v7; // ebx int v8; // edi signed int v9; // ebx v2 = (_DWORD **)this; v3 = *(_BYTE *)(this + 397); if ( v3 != -1 ) { *(_BYTE *)(this + 396) = v3; *(_BYTE *)(this + 397) = -1; switch ( v3 ) { case 0: (*(void (__stdcall **)(signed int))(**(_DWORD **)(this + 348) + 240))(1); (*(void (__stdcall **)(signed int))(*v2[87] + 256))(1); (*(void (__stdcall **)(signed int))(*v2[88] + 240))(1); (*(void (__stdcall **)(signed int))(*v2[88] + 256))(1); (*(void (__stdcall **)(signed int))(*v2[89] + 240))(1); (*(void (__stdcall **)(signed int))(*v2[89] + 256))(1); v4 = (int)(v2 + 91); v5 = 4; do { if ( *(_DWORD *)v4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 256))(0); } v4 += 4; --v5; } while ( v5 ); sub_466A50(v2[125]); break; case 1: case 2: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 348) + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[87] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[88] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[89] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[89] + 256))(0); v6 = (int)(v2 + 91); v7 = 4; do { if ( *(_DWORD *)v6 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)v6 + 240))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v6 + 256))(1); } v6 += 4; --v7; } while ( v7 ); sub_6496D0((int)v2, 0); break; case 3: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 348) + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[87] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[88] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v2[89] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v2[89] + 256))(0); v8 = (int)(v2 + 91); v9 = 4; do { if ( *(_DWORD *)v8 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0); } v8 += 4; --v9; } while ( v9 ); sub_6496D0((int)v2, 0); break; default: return; } } } //----- (00649B40) -------------------------------------------------------- void __thiscall sub_649B40(void *this, unsigned int a2, char a3) { int v3; // esi char v4; // al signed int v5; // eax char v6; // al v3 = (int)this; if ( dword_AD8BF4 ) { if ( timeGetTime() - dword_AD8BF4 < 0x1F4 ) return; dword_AD8BF4 = 0; } else { dword_AD8BF4 = timeGetTime(); } switch ( a2 ) { case 0u: v4 = 1; goto LABEL_7; case 1u: v4 = 2; goto LABEL_7; case 2u: v4 = 3; LABEL_7: if ( *(_BYTE *)(v3 + 397) != v4 ) *(_BYTE *)(v3 + 397) = v4; break; case 3u: sub_6496D0(v3, 0); break; case 4u: sub_6496D0(v3, 1); break; case 5u: sub_6496D0(v3, 2); break; case 7u: if ( *(_BYTE *)(v3 + 396) && *(_BYTE *)(v3 + 397) ) *(_BYTE *)(v3 + 397) = 0; sub_4637A0(*(_DWORD **)(v3 + 504), 0); *(_DWORD *)(*(_DWORD *)(v3 + 500) + 344) = 0; sub_465130(*(_DWORD **)(v3 + 500)); break; case 8u: sub_6497B0((char *)v3, 0); break; case 9u: sub_6497B0((char *)v3, 1); break; case 0xAu: sub_6497B0((char *)v3, 2); break; case 0xCu: sub_6457B0(*(_DWORD **)(v3 + 344), a3); break; case 0xDu: v5 = sub_464F50(*(_DWORD **)(v3 + 500)); if ( v5 >= 0 ) { sub_464B60(*(_DWORD **)(v3 + 500), v5, &a2); v6 = *(_BYTE *)(v3 + 396); switch ( v6 ) { case 1: sub_645780(*(_DWORD **)(v3 + 344), a2); break; case 2: sub_645C90(*(_DWORD **)(v3 + 344), a2); break; case 3: sub_6463B0(*(_DWORD *)(v3 + 344), a2 != 0); break; } } break; case 0xEu: sub_648D10((_DWORD *)v3); break; default: return; } } // AD8BF4: using guessed type int dword_AD8BF4; //----- (00649D20) -------------------------------------------------------- char __thiscall sub_649D20(_DWORD *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al int v6; // STD8_4 char *v7; // eax volatile LONG **v8; // eax int v9; // ebx volatile LONG **v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG **v13; // eax int v14; // eax volatile LONG *v15; // eax volatile LONG v16; // edx const CHAR *v17; // eax int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // STD0_4 volatile LONG *v23; // ebx int v24; // STCC_4 int v25; // STC8_4 int v26; // eax volatile LONG *v27; // ebx const CHAR *v28; // eax int v29; // eax volatile LONG **v30; // ebx volatile LONG *v31; // STD0_4 volatile LONG *v32; // ebx int v33; // STCC_4 int v34; // STC8_4 int v35; // eax volatile LONG *v36; // ebx const CHAR *v37; // eax int v38; // eax volatile LONG **v39; // ebx volatile LONG *v40; // STD0_4 volatile LONG *v41; // ebx int v42; // STCC_4 int v43; // STC8_4 int v44; // eax volatile LONG *v45; // ebx const CHAR *v46; // eax int v47; // eax volatile LONG **v48; // ebx volatile LONG *v49; // STD0_4 volatile LONG *v50; // ebx int v51; // STCC_4 int v52; // STC8_4 int v53; // eax volatile LONG *v54; // ebx const CHAR *v55; // eax int v56; // eax volatile LONG **v57; // ebx volatile LONG *v58; // STD0_4 volatile LONG *v59; // ebx int v60; // STCC_4 int v61; // STC8_4 int v62; // eax volatile LONG *v63; // ebx const CHAR *v64; // eax int v65; // eax volatile LONG **v66; // ebx volatile LONG *v67; // STD0_4 volatile LONG *v68; // ebx int v69; // STCC_4 int v70; // STC8_4 int v71; // eax volatile LONG *v72; // ebx const CHAR *v73; // eax int v74; // eax volatile LONG **v75; // ebx volatile LONG *v76; // STD0_4 volatile LONG *v77; // ebx int v78; // STCC_4 int v79; // STC8_4 int v80; // eax volatile LONG *v81; // ebx const CHAR *v82; // eax int v83; // eax volatile LONG **v84; // ebx volatile LONG *v85; // STD0_4 volatile LONG *v86; // ebx int v87; // STCC_4 int v88; // STC8_4 int v89; // eax volatile LONG *v90; // ebx const CHAR *v91; // eax int v92; // eax volatile LONG **v93; // ebx volatile LONG *v94; // STD0_4 volatile LONG *v95; // ebx int v96; // STCC_4 int v97; // STC8_4 int v98; // eax volatile LONG *v99; // ebx const CHAR *v100; // eax int v101; // eax volatile LONG **v102; // ebx volatile LONG *v103; // STD0_4 volatile LONG *v104; // ebx int v105; // STCC_4 int v106; // STC8_4 int v107; // eax volatile LONG *v108; // ebx const CHAR *v109; // eax int v110; // eax int *v111; // ebx volatile LONG **v112; // eax int v113; // eax volatile LONG *v114; // eax volatile LONG **v115; // eax volatile LONG *v116; // eax volatile LONG **v117; // eax int v118; // eax int *v119; // ebx int (__thiscall *v120)(int); // edx int v121; // ecx int v122; // eax int v123; // eax void (__thiscall ***v124)(_DWORD, signed int); // esi int v125; // [esp+ECh] [ebp-174h] int v126; // [esp+F0h] [ebp-170h] int v127; // [esp+F4h] [ebp-16Ch] char v128; // [esp+FCh] [ebp-164h] int v129; // [esp+100h] [ebp-160h] int v130; // [esp+104h] [ebp-15Ch] int v131; // [esp+108h] [ebp-158h] int v132; // [esp+10Ch] [ebp-154h] int v133; // [esp+110h] [ebp-150h] int v134; // [esp+114h] [ebp-14Ch] int v135; // [esp+118h] [ebp-148h] int v136; // [esp+11Ch] [ebp-144h] volatile LONG *v137; // [esp+120h] [ebp-140h] int v138; // [esp+124h] [ebp-13Ch] int v139; // [esp+128h] [ebp-138h] int v140; // [esp+12Ch] [ebp-134h] int v141; // [esp+130h] [ebp-130h] void *v142; // [esp+134h] [ebp-12Ch] int v143; // [esp+144h] [ebp-11Ch] unsigned int v144; // [esp+148h] [ebp-118h] char v145; // [esp+150h] [ebp-110h] int v146; // [esp+25Ch] [ebp-4h] v2 = (int)this; v140 = 0; v146 = 0; this[86] = a2; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) goto LABEL_36; v141 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = v141; v7 = (char *)sub_401410(byte_ACAB50, "\\shop\\HairShopWin.nif"); sub_8F66B0(v7, (int)&v140, v6); if ( !v140 ) return 0; v8 = sub_8FB140(v140, (int)"Panel01", (int)&v138, (int)&v139, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v8, 0, a2, (int)"HairShopWin", 0) ) { LABEL_36: v4 = (void (__thiscall ***)(_DWORD, signed int))v140; v146 = -1; if ( v140 && !InterlockedDecrement((volatile LONG *)(v140 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v9 = v138; v136 = v139; v133 = v138; v10 = sub_8FB140(v140, (int)"Panel01", (int)&v138, (int)&v139, v3); sub_8F3EB0(v138 - v9, v139 - v136, (int)v10, v2, 0, 0); v11 = sub_8FB140(v140, (int)"Panel03", (int)&v138, (int)&v139, v3); sub_8F3EB0(v138 - v9, v139 - v136, (int)v11, v2, 0, 0); v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v140, (int)"Theme", (int)&v138, (int)&v139, v12); else v13 = sub_8FB140(v140, (int)"Theme", (int)&v138, (int)&v139, 0); sub_8F3EB0(v138 - v9, v139 - v136, (int)v13, v2, 0, 0); if ( !sub_8F71E0(v140, (int)"WinTitle01", &v138, &v139, &v134, &v135) ) goto LABEL_37; v14 = sub_421050(7); v15 = sub_8F4A20(v138 - v9, v139 - v136 + 2, v134, v135, v14, v2, 0, 0); v16 = *v15; v137 = v15; (*(void (__thiscall **)(volatile LONG *, signed int))(v16 + 488))(v15, 5); (*(void (__stdcall **)(int *))(*v137 + 468))(&dword_AA8D98); v141 = *v137 + 472; v17 = sub_40C190(810517115); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v137, v17); (*(void (__stdcall **)(_DWORD))(*v137 + 240))(0); if ( sub_8F71E0(v140, (int)"WinTitle02", &v138, &v139, &v134, &v135) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v138 - v9, v139 - v136 + 2, v134, v135, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v141 = *v19 + 472; v20 = sub_40C190(1146434676); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v140, (int)"Shape_Tab01_On", (int)&v138, (int)&v139, v3); sub_8FB650(v21, v140, (int)"Shape_Tab04_Click"); sub_8FB650(v21, v140, (int)"Shape_Tab04_Over"); sub_8FB650(v21, v140, (int)"Shape_Tab04_Off"); v22 = sub_8FE0F0(v138, v139, (int)v21, v2, 0, 0, 0); *(_DWORD *)(v2 + 348) = v22; v23 = v22; v24 = sub_421050(0); v25 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 148))(v23); v26 = (*(int (__thiscall **)(volatile LONG *))(*v23 + 144))(v23); v27 = sub_8F4A20(0, 3, v26, v25, v24, (int)v22, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v141 = *v27 + 472; v28 = sub_40C190(1195122978); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v27, v28); v141 = *v27 + 452; v29 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v27, v29); sub_9074F0(*((_DWORD *)v27 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); v30 = sub_8FB140(v140, (int)"Shape_Tab02_On", (int)&v138, (int)&v139, v3); sub_8FB650(v30, v140, (int)"Shape_Tab04_Click"); sub_8FB650(v30, v140, (int)"Shape_Tab04_Over"); sub_8FB650(v30, v140, (int)"Shape_Tab04_Off"); v31 = sub_8FE0F0(v138, v139, (int)v30, v2, 1, 0, 0); *(_DWORD *)(v2 + 352) = v31; v32 = v31; v33 = sub_421050(0); v34 = (*(int (__thiscall **)(volatile LONG *))(*v32 + 148))(v32); v35 = (*(int (__thiscall **)(volatile LONG *))(*v32 + 144))(v32); v36 = sub_8F4A20(0, 3, v35, v34, v33, (int)v31, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v36 + 488))(v36, 5); v141 = *v36 + 472; v37 = sub_40C190(976625952); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v36, v37); v141 = *v36 + 452; v38 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v36, v38); sub_9074F0(*((_DWORD *)v36 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); v39 = sub_8FB140(v140, (int)"Shape_Tab03_On", (int)&v138, (int)&v139, v3); sub_8FB650(v39, v140, (int)"Shape_Tab04_Click"); sub_8FB650(v39, v140, (int)"Shape_Tab04_Over"); sub_8FB650(v39, v140, (int)"Shape_Tab04_Off"); v40 = sub_8FE0F0(v138, v139, (int)v39, v2, 2, 0, 0); *(_DWORD *)(v2 + 356) = v40; v41 = v40; v42 = sub_421050(0); v43 = (*(int (__thiscall **)(volatile LONG *))(*v41 + 148))(v41); v44 = (*(int (__thiscall **)(volatile LONG *))(*v41 + 144))(v41); v45 = sub_8F4A20(0, 3, v44, v43, v42, (int)v40, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v45 + 488))(v45, 5); v141 = *v45 + 472; v46 = sub_40C190(-807945221); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v45, v46); v141 = *v45 + 452; v47 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v45, v47); sub_9074F0(*((_DWORD *)v45 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); v48 = sub_8FB140(v140, (int)"Shape_Tab01_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v48, v140, (int)"Shape_Tab01_On"); v49 = sub_465940(v138, v139, (int)v48, v2, 3, 0); *(_DWORD *)(v2 + 364) = v49; v50 = v49; v51 = sub_421050(0); v52 = (*(int (__thiscall **)(volatile LONG *))(*v50 + 148))(v50); v53 = (*(int (__thiscall **)(volatile LONG *))(*v50 + 144))(v50); v54 = sub_8F4A20(0, 3, v53, v52, v51, (int)v49, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v54 + 488))(v54, 5); v141 = *v54 + 472; v55 = sub_40C190(-2105636233); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v54, v55); v141 = *v54 + 452; v56 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v54, v56); sub_9074F0(*((_DWORD *)v54 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); v57 = sub_8FB140(v140, (int)"Shape_Tab02_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v57, v140, (int)"Shape_Tab02_On"); v58 = sub_465940(v138, v139, (int)v57, v2, 4, 0); *(_DWORD *)(v2 + 368) = v58; v59 = v58; v60 = sub_421050(0); v61 = (*(int (__thiscall **)(volatile LONG *))(*v59 + 148))(v59); v62 = (*(int (__thiscall **)(volatile LONG *))(*v59 + 144))(v59); v63 = sub_8F4A20(0, 3, v62, v61, v60, (int)v58, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); v141 = *v63 + 472; v64 = sub_40C190(2022408374); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v63, v64); v141 = *v63 + 452; v65 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v63, v65); sub_9074F0(*((_DWORD *)v63 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v63 + 240))(v63, 0); v66 = sub_8FB140(v140, (int)"Shape_Tab03_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v66, v140, (int)"Shape_Tab03_On"); v67 = sub_465940(v138, v139, (int)v66, v2, 5, 0); *(_DWORD *)(v2 + 372) = v67; v68 = v67; v69 = sub_421050(0); v70 = (*(int (__thiscall **)(volatile LONG *))(*v68 + 148))(v68); v71 = (*(int (__thiscall **)(volatile LONG *))(*v68 + 144))(v68); v72 = sub_8F4A20(0, 3, v71, v70, v69, (int)v67, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v72 + 488))(v72, 5); v141 = *v72 + 472; v73 = sub_40C190(-1785884035); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v72, v73); v141 = *v72 + 452; v74 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v72, v74); sub_9074F0(*((_DWORD *)v72 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v72 + 240))(v72, 0); v75 = sub_8FB140(v140, (int)"Shape_Tab04_Nor", (int)&v138, (int)&v139, v3); sub_8FB650(v75, v140, (int)"Shape_Tab04_Click"); sub_8FB650(v75, v140, (int)"Shape_Tab04_Over"); v76 = sub_8FE0F0(v138, v139, (int)v75, v2, 7, 0, 0); *(_DWORD *)(v2 + 360) = v76; v77 = v76; v78 = sub_421050(0); v79 = (*(int (__thiscall **)(volatile LONG *))(*v77 + 148))(v77); v80 = (*(int (__thiscall **)(volatile LONG *))(*v77 + 144))(v77); v81 = sub_8F4A20(0, 3, v80, v79, v78, (int)v76, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v81 + 488))(v81, 5); v141 = *v81 + 472; v82 = sub_40C190(-724152012); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v81, v82); v141 = *v81 + 452; v83 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v81, v83); sub_9074F0(*((_DWORD *)v81 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v81 + 240))(v81, 0); v84 = sub_8FB140(v140, (int)"Color_Tab01_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v84, v140, (int)"Color_Tab01_On"); v85 = sub_465940(v138, v139, (int)v84, v2, 8, 0); *(_DWORD *)(v2 + 380) = v85; v86 = v85; v87 = sub_421050(0); v88 = (*(int (__thiscall **)(volatile LONG *))(*v86 + 148))(v86); v89 = (*(int (__thiscall **)(volatile LONG *))(*v86 + 144))(v86); v90 = sub_8F4A20(0, 3, v89, v88, v87, (int)v85, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v90 + 488))(v90, 5); v141 = *v90 + 472; v91 = sub_40C190(-2105636233); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v90, v91); v141 = *v90 + 452; v92 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v90, v92); sub_9074F0(*((_DWORD *)v90 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v90 + 240))(v90, 0); v93 = sub_8FB140(v140, (int)"Color_Tab02_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v93, v140, (int)"Color_Tab02_On"); v94 = sub_465940(v138, v139, (int)v93, v2, 9, 0); *(_DWORD *)(v2 + 384) = v94; v95 = v94; v96 = sub_421050(0); v97 = (*(int (__thiscall **)(volatile LONG *))(*v95 + 148))(v95); v98 = (*(int (__thiscall **)(volatile LONG *))(*v95 + 144))(v95); v99 = sub_8F4A20(0, 3, v98, v97, v96, (int)v94, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 5); v141 = *v99 + 472; v100 = sub_40C190(2022408374); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v99, v100); v141 = *v99 + 452; v101 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v99, v101); sub_9074F0(*((_DWORD *)v99 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v99 + 240))(v99, 0); v102 = sub_8FB140(v140, (int)"Color_Tab03_Off", (int)&v138, (int)&v139, v3); sub_8FB650(v102, v140, (int)"Color_Tab03_On"); v103 = sub_465940(v138, v139, (int)v102, v2, 10, 0); *(_DWORD *)(v2 + 388) = v103; v104 = v103; v105 = sub_421050(0); v106 = (*(int (__thiscall **)(volatile LONG *))(*v104 + 148))(v104); v107 = (*(int (__thiscall **)(volatile LONG *))(*v104 + 144))(v104); v108 = sub_8F4A20(0, 3, v107, v106, v105, (int)v103, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v108 + 488))(v108, 5); v141 = *v108 + 472; v109 = sub_40C190(-1785884035); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v141)(v108, v109); v141 = *v108 + 452; v110 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))v141)(v108, v110); sub_9074F0(*((_DWORD *)v108 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v108 + 240))(v108, 0); v137 = (volatile LONG *)1; v111 = (int *)(v2 + 400); v141 = 25; do { sprintf(&v145, "IconSlot%02d", v137); v112 = sub_8FB140(v140, (int)&v145, (int)&v138, (int)&v139, v3); sub_8F3EB0(v138 - v133, v139 - v136, (int)v112, v2, 0, 0); v113 = sub_649060(v138 - v133 + 1, v139 - v136 + 1, v2); *v111 = v113; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v113 + 516))(v113, 12); sub_648FA0((_WORD *)*v111, 0xFFu); *(_DWORD *)(*v111 + 272) = dword_AD01E8; v137 = (volatile LONG *)((char *)v137 + 1); ++v111; --v141; } while ( v141 ); v125 = 0; v126 = 0; v127 = 0; v128 = 0; v129 = 0; v130 = 0; v131 = 0; v132 = 0; LOBYTE(v146) = 1; v114 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v125, 1); *v114 = 1; v137 = v114; *((_DWORD *)v114 + 1) = v140; v144 = 15; v143 = 0; LOBYTE(v142) = 0; sub_4018E0(&v142, "ColumnBarNor", 0xCu); LOBYTE(v146) = 2; v141 = (int)(v137 + 18); sub_40B060((int *)v137 + 18, (const void **)&v142); LOBYTE(v146) = 1; if ( v144 >= 0x10 ) operator delete(v142); v144 = 15; v143 = 0; LOBYTE(v142) = 0; sub_4018E0(&v142, "ColumnBarClick", 0xEu); LOBYTE(v146) = 3; sub_40B060((int *)v141, (const void **)&v142); LOBYTE(v146) = 1; if ( v144 >= 0x10 ) operator delete(v142); v144 = 15; v143 = 0; LOBYTE(v142) = 0; sub_4018E0(&v142, "ColumnBarOver", 0xDu); LOBYTE(v146) = 4; sub_40B060((int *)v141, (const void **)&v142); LOBYTE(v146) = 1; if ( v144 >= 0x10 ) operator delete(v142); v137 = (volatile LONG *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v125, 2); *v137 = 2; v144 = 15; v143 = 0; LOBYTE(v142) = 0; sub_4018E0(&v142, "Column01", 8u); LOBYTE(v146) = 5; sub_40B060((int *)v137 + 18, (const void **)&v142); LOBYTE(v146) = 1; if ( v144 >= 0x10 ) operator delete(v142); *((_DWORD *)v137 + 1) = v140; v144 = 15; v143 = 0; LOBYTE(v142) = 0; v129 = 1; v130 = 0; sub_466680(&v125, v3); v115 = sub_8FB140(v140, (int)"TextBox", (int)&v138, (int)&v139, v3); v116 = sub_466330(v138 - v133, v139 - v136, (int)v115, *(float *)&v2, (int **)&v125, 0, 0); *(_DWORD *)(v2 + 500) = v116; *((_DWORD *)v116 + 88) = 13; sub_465130(*(_DWORD **)(v2 + 500)); v117 = sub_8FB140(v140, (int)"SlideBar_SlideBtnMiddle", (int)&v138, (int)&v139, v3); v118 = sub_464310(v140, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v117, 0, (_DWORD *)v2); sub_56FF80((_DWORD *)(v2 + 504), v118); *(_DWORD *)(*(_DWORD *)(v2 + 504) + 312) = 14; *(_DWORD *)(*(_DWORD *)(v2 + 504) + 304) = 1; v119 = *(int **)(v2 + 504); v120 = *(int (__thiscall **)(int))(*v119 + 168); v121 = *(_DWORD *)(v2 + 504); v141 = *v119; v122 = v120(v121); v123 = (*(int (__thiscall **)(int *, int))(*v119 + 164))(v119, v122); (*(void (__thiscall **)(int *, int))(v141 + 308))(v119, v123); sub_4638F0(*(_DWORD **)(v2 + 504), 9); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.80000001, 0.40000001); if ( *(_BYTE *)(v2 + 397) ) *(_BYTE *)(v2 + 397) = 0; sub_6497B0((char *)v2, 0); LOBYTE(v146) = 0; sub_40AE10((void **)&v125); v124 = (void (__thiscall ***)(_DWORD, signed int))v140; v146 = -1; if ( v140 && !InterlockedDecrement((volatile LONG *)(v140 + 4)) && v124 ) (**v124)(v124, 1); result = 1; } else { LABEL_37: v146 = -1; sub_410C00(&v140); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0064B0A0) -------------------------------------------------------- void *__thiscall sub_64B0A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CColorIcon::`vftable'; *((_DWORD *)this + 58) = &CColorIcon::`vftable'; sub_5D3FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F22B4: using guessed type void *CColorIcon::`vftable'; // 9F22D4: using guessed type void *CColorIcon::`vftable'; //----- (0064B0E0) -------------------------------------------------------- _DWORD *__thiscall sub_64B0E0(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &CHairShopwin::`vftable'; *((_DWORD *)this + 58) = &CHairShopwin::`vftable'; v3 = *((_DWORD *)this + 126); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F253C: using guessed type void *CHairShopwin::`vftable'; // 9F255C: using guessed type void *CHairShopwin::`vftable'; //----- (0064B180) -------------------------------------------------------- char __cdecl sub_64B180(unsigned __int8 a1, unsigned __int8 a2, _DWORD *a3) { int v3; // eax unsigned int v4; // edi unsigned int v5; // esi unsigned int v7; // [esp+8h] [ebp-4h] v3 = *(_DWORD *)(dword_AC9C9C + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { do { v3 = sub_7474E0((_DWORD *)(dword_AC9C9C + 4), v5); if ( v3 ) { LOBYTE(v3) = *(_BYTE *)(v3 + 33); if ( (unsigned __int8)v3 >= a1 && (unsigned __int8)v3 <= a2 ) { v7 = v5; LOBYTE(v3) = (unsigned int)sub_5B3CF0(a3, &v7); } } ++v5; } while ( v5 < v4 ); } return v3; } // AC9C9C: using guessed type int dword_AC9C9C; //----- (0064B1E0) -------------------------------------------------------- char __cdecl sub_64B1E0(unsigned int a1, char a2, unsigned __int8 a3, unsigned __int8 a4, _DWORD *a5) { unsigned __int8 v5; // al int v6; // ecx unsigned int v7; // esi unsigned int v8; // ecx int v9; // eax char v10; // bl unsigned int v11; // edi int v12; // ecx char v13; // bl unsigned int v14; // edi int v15; // ecx char v16; // bl unsigned int v17; // edi int v18; // ecx char v19; // bl unsigned int v20; // edi int v21; // ecx char v22; // bl unsigned int v23; // edi int v24; // ecx _DWORD *v25; // edi char v26; // bl int v27; // ecx switch ( (unsigned __int8)a1 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v5 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v5 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v5 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v5 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v5 = 21; break; case 0x1Au: case 0x1Bu: v5 = 26; break; default: v5 = 0; break; } v6 = *(_DWORD *)(dword_AC9C94 + 56); v7 = 0; if ( v6 ) { v8 = *(_DWORD *)(v6 + 40); a1 = v8; } else { a1 = 0; v8 = 0; } v9 = v5 - 1; switch ( v9 ) { case 0: if ( v8 > 0 ) { v10 = a2; v11 = a1; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v12 = *(_DWORD *)(v9 + 66); if ( v12 == 3 || v12 == 1 && v10 == 1 || v12 == 2 && !v10 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a1 = v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(a5, &a1); } } ++v7; } while ( v7 < v11 ); } break; case 5: if ( v8 > 0 ) { v13 = a2; v14 = a1; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v15 = *(_DWORD *)(v9 + 74); if ( v15 == 3 || v15 == 1 && v13 == 1 || v15 == 2 && !v13 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a1 = v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(a5, &a1); } } ++v7; } while ( v7 < v14 ); } break; case 10: if ( v8 > 0 ) { v16 = a2; v17 = a1; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v18 = *(_DWORD *)(v9 + 70); if ( v18 == 3 || v18 == 1 && v16 == 1 || v18 == 2 && !v16 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a1 = v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(a5, &a1); } } ++v7; } while ( v7 < v17 ); } break; case 15: if ( v8 > 0 ) { v19 = a2; v20 = a1; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v21 = *(_DWORD *)(v9 + 78); if ( v21 == 3 || v21 == 1 && v19 == 1 || v21 == 2 && !v19 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a1 = v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(a5, &a1); } } ++v7; } while ( v7 < v20 ); } break; case 20: if ( v8 > 0 ) { v22 = a2; v23 = a1; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v24 = *(_DWORD *)(v9 + 78); if ( v24 == 3 || v24 == 1 && v22 == 1 || v24 == 2 && !v22 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a1 = v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(a5, &a1); } } ++v7; } while ( v7 < v23 ); } break; case 25: if ( v8 > 0 ) { v25 = a5; v26 = a2; do { v9 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v7); v27 = *(_DWORD *)(v9 + 78); if ( v27 == 3 || v27 == 1 && v26 == 1 || v27 == 2 && !v26 ) { LOBYTE(v9) = *(_BYTE *)(v9 + 65); if ( (unsigned __int8)v9 <= a4 && (unsigned __int8)v9 >= a3 ) { a5 = (_DWORD *)v7; LOBYTE(v9) = (unsigned int)sub_5B3CF0(v25, &a5); } } ++v7; } while ( v7 < a1 ); } break; default: return v9; } return v9; } // AC9C94: using guessed type int dword_AC9C94; //----- (0064B530) -------------------------------------------------------- char __cdecl sub_64B530(unsigned __int8 a1, unsigned __int8 a2, _DWORD *a3) { int v3; // eax unsigned int v4; // edi unsigned int v5; // esi unsigned int v7; // [esp+8h] [ebp-4h] v3 = *(_DWORD *)(dword_AC9CA0 + 56); if ( v3 ) v4 = *(_DWORD *)(v3 + 40); else v4 = 0; v5 = 0; if ( v4 ) { do { v3 = sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), v5); if ( v3 ) { LOBYTE(v3) = *(_BYTE *)(v3 + 61); if ( (unsigned __int8)v3 >= a1 && (unsigned __int8)v3 <= a2 ) { v7 = v5; LOBYTE(v3) = (unsigned int)sub_5B3CF0(a3, &v7); } } ++v5; } while ( v5 < v4 ); } return v3; } // AC9CA0: using guessed type int dword_AC9CA0; //----- (0064B9E0) -------------------------------------------------------- int __thiscall sub_64B9E0(_DWORD *this, int a2) { unsigned int v2; // edx unsigned int v3; // eax int v4; // esi _DWORD *v5; // ecx v2 = this[1]; v3 = 0; if ( !v2 ) return 0; v4 = this[2]; v5 = (_DWORD *)(v4 + 108); while ( *v5 != a2 ) { ++v3; v5 += 88; if ( v3 >= v2 ) return 0; } return v4 + 352 * v3; } //----- (0064BA20) -------------------------------------------------------- int __thiscall sub_64BA20(_DWORD *this, const char *a2) { unsigned int v2; // edi unsigned int v3; // eax const char *v4; // esi int v6; // [esp+Ch] [ebp-4h] v2 = this[1]; v3 = 0; if ( !v2 ) return 0; v6 = this[2]; v4 = (const char *)(v6 + 2); while ( strcmp(v4, a2) ) { ++v3; v4 += 352; if ( v3 >= v2 ) return 0; } return v6 + 352 * v3; } //----- (0064BAA0) -------------------------------------------------------- unsigned int __thiscall sub_64BAA0(_DWORD *this, char *a2, int a3, char a4) { unsigned int v4; // esi _DWORD *v5; // ebx signed int v6; // eax int v7; // ecx int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] v4 = 0; v5 = this; v9 = 0; if ( !this[1] ) return 0; v10 = 0; while ( 1 ) { if ( !_stricmp((const char *)(v10 + v5[2] + 35), a2) ) { if ( !a4 ) break; if ( a3 ) { switch ( *(_DWORD *)(a3 + 232) ) { case 1: if ( *(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 1; break; case 2: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 8; break; case 3: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 128; break; case 4: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 4; break; case 5: if ( *(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 64; break; case 0xA: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 16; break; case 0xB: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 256; break; case 0xD: if ( *(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 32; break; case 0xF: if ( !_stricmp((const char *)(a3 + 2), "Hoe") ) { v4 = v9; v6 = 2048; } else { v4 = v9; v6 = _stricmp((const char *)(a3 + 2), "Axe") != 0 ? 512 : 1024; } break; case 0x10: v6 = 0x10000; break; case 0x11: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 0x20000; break; case 0x12: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 0x40000; break; case 0x13: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 393216; break; case 0x15: if ( !*(_BYTE *)(a3 + 122) ) goto LABEL_35; v6 = 2; break; default: goto LABEL_35; } } else { LABEL_35: v6 = 0; } v7 = *(_DWORD *)(v10 + v5[2] + 68); if ( v7 == -1 || !v7 && !v6 ) break; if ( v7 & v6 ) break; } v10 += 352; v9 = ++v4; if ( v4 >= v5[1] ) return 0; } return v5[2] + 352 * v4; } //----- (0064BCB0) -------------------------------------------------------- char __thiscall sub_64BCB0(_DWORD *this, char *a2) { _DWORD *v2; // esi unsigned int v3; // edi int v4; // ebx v2 = this; v3 = 0; if ( !this[1] ) return 0; v4 = 0; while ( _stricmp((const char *)(v2[2] + v4 + 35), a2) ) { ++v3; v4 += 352; if ( v3 >= v2[1] ) return 0; } return 1; } //----- (0064BD40) -------------------------------------------------------- int __cdecl sub_64BD40(const char *a1) { int result; // eax result = strcmp(a1, "HairLink"); if ( result ) { if ( !strcmp(a1, "Chest") ) return 1; if ( !strcmp(a1, "LeftHand") ) return 2; if ( !strcmp(a1, "RightHand") ) return 3; if ( !strcmp(a1, "LeftShoesAcc") ) return 4; if ( !strcmp(a1, "RightShoesAcc") ) return 5; if ( !strcmp(a1, "BC_ChestParallel") ) return 6; if ( !strcmp(a1, "BC_ChestToChest") ) return 7; if ( !strcmp(a1, "Ground") ) return 8; if ( !strcmp(a1, "Op_Ground") ) return 9; if ( !strcmp(a1, "Op_Chest") ) { result = 10; } else if ( !strcmp(a1, "World") ) { result = 11; } else if ( !strcmp(a1, "Op_World") ) { result = 12; } else if ( !strcmp(a1, "Spot") ) { result = 13; } else if ( !strcmp(a1, "OP_HairLink") ) { result = 14; } else if ( !strcmp(a1, "TopLink") ) { result = 15; } else if ( !strcmp(a1, "OP_TopLink") ) { result = 16; } else { if ( !strcmp(a1, "-") ) return 9; if ( !strcmp(a1, "0") ) result = 9; else result = 8; } } return result; } //----- (0064C180) -------------------------------------------------------- unsigned int sub_64C180() { int v0; // eax unsigned int result; // eax unsigned int *v2; // esi int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = 0; if ( dword_AB35F4 ) { while ( !*((_DWORD *)dword_AB35F8 + v0) ) { if ( ++v0 >= (unsigned int)dword_AB35F4 ) goto LABEL_4; } result = *((_DWORD *)dword_AB35F8 + v0); } else { LABEL_4: result = 0; } v2 = (unsigned int *)result; if ( result ) { do { result = *v2; v3 = (int (__thiscall ***)(_DWORD, signed int))v2[2]; if ( *v2 ) { v2 = (unsigned int *)*v2; } else { result = ((int (__thiscall *)(void ***, unsigned int))off_AB35F0[1])(&off_AB35F0, v2[1]) + 1; if ( result >= dword_AB35F4 ) { LABEL_12: v2 = 0; } else { while ( 1 ) { v2 = (unsigned int *)*((_DWORD *)dword_AB35F8 + result); if ( v2 ) break; if ( ++result >= dword_AB35F4 ) goto LABEL_12; } } } if ( v3 ) result = (**v3)(v3, 1); } while ( v2 ); } return result; } // AB35F0: using guessed type void **off_AB35F0; // AB35F4: using guessed type int dword_AB35F4; //----- (0064C210) -------------------------------------------------------- unsigned int sub_64C210() { int v0; // eax unsigned int result; // eax unsigned int *v2; // esi int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = 0; if ( dword_AB3604 ) { while ( !*((_DWORD *)dword_AB3608 + v0) ) { if ( ++v0 >= (unsigned int)dword_AB3604 ) goto LABEL_4; } result = *((_DWORD *)dword_AB3608 + v0); } else { LABEL_4: result = 0; } v2 = (unsigned int *)result; if ( result ) { do { result = *v2; v3 = (int (__thiscall ***)(_DWORD, signed int))v2[2]; if ( *v2 ) { v2 = (unsigned int *)*v2; } else { result = ((int (__thiscall *)(void ***, unsigned int))off_AB3600[1])(&off_AB3600, v2[1]) + 1; if ( result >= dword_AB3604 ) { LABEL_12: v2 = 0; } else { while ( 1 ) { v2 = (unsigned int *)*((_DWORD *)dword_AB3608 + result); if ( v2 ) break; if ( ++result >= dword_AB3604 ) goto LABEL_12; } } } if ( v3 ) result = (**v3)(v3, 1); } while ( v2 ); } return result; } // AB3600: using guessed type void **off_AB3600; // AB3604: using guessed type int dword_AB3604; //----- (0064C2A0) -------------------------------------------------------- unsigned int sub_64C2A0() { int v0; // eax unsigned int result; // eax unsigned int *v2; // esi int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = 0; if ( dword_AB3614 ) { while ( !*((_DWORD *)dword_AB3618 + v0) ) { if ( ++v0 >= (unsigned int)dword_AB3614 ) goto LABEL_4; } result = *((_DWORD *)dword_AB3618 + v0); } else { LABEL_4: result = 0; } v2 = (unsigned int *)result; if ( result ) { do { result = *v2; v3 = (int (__thiscall ***)(_DWORD, signed int))v2[2]; if ( *v2 ) { v2 = (unsigned int *)*v2; } else { result = ((int (__thiscall *)(void ***, unsigned int))off_AB3610[1])(&off_AB3610, v2[1]) + 1; if ( result >= dword_AB3614 ) { LABEL_12: v2 = 0; } else { while ( 1 ) { v2 = (unsigned int *)*((_DWORD *)dword_AB3618 + result); if ( v2 ) break; if ( ++result >= dword_AB3614 ) goto LABEL_12; } } } if ( v3 ) result = (**v3)(v3, 1); } while ( v2 ); } return result; } // AB3610: using guessed type void **off_AB3610; // AB3614: using guessed type int dword_AB3614; //----- (0064C330) -------------------------------------------------------- unsigned int sub_64C330() { int v0; // eax unsigned int result; // eax unsigned int *v2; // esi int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = 0; if ( dword_AB3624 ) { while ( !*((_DWORD *)dword_AB3628 + v0) ) { if ( ++v0 >= (unsigned int)dword_AB3624 ) goto LABEL_4; } result = *((_DWORD *)dword_AB3628 + v0); } else { LABEL_4: result = 0; } v2 = (unsigned int *)result; if ( result ) { do { result = *v2; v3 = (int (__thiscall ***)(_DWORD, signed int))v2[2]; if ( *v2 ) { v2 = (unsigned int *)*v2; } else { result = ((int (__thiscall *)(void ***, unsigned int))off_AB3620[1])(&off_AB3620, v2[1]) + 1; if ( result >= dword_AB3624 ) { LABEL_12: v2 = 0; } else { while ( 1 ) { v2 = (unsigned int *)*((_DWORD *)dword_AB3628 + result); if ( v2 ) break; if ( ++result >= dword_AB3624 ) goto LABEL_12; } } } if ( v3 ) result = (**v3)(v3, 1); } while ( v2 ); } return result; } // AB3620: using guessed type void **off_AB3620; // AB3624: using guessed type int dword_AB3624; //----- (0064C450) -------------------------------------------------------- int __cdecl sub_64C450(int a1, unsigned __int8 a2) { unsigned __int8 v2; // al switch ( (unsigned __int8)a1 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v2 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v2 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v2 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v2 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v2 = 21; break; case 0x1Au: case 0x1Bu: v2 = 26; break; default: v2 = 0; break; } a1 = 0; sub_8C4C90(&off_AB35F0, a2 | (v2 << 8), &a1); return a1; } // AB35F0: using guessed type void **off_AB35F0; //----- (0064C520) -------------------------------------------------------- FILE *__cdecl sub_64C520(int a1) { FILE *result; // eax FILE *v2; // edi FILE *v3; // esi int v4; // eax int v5; // [esp+10h] [ebp-118h] char v6; // [esp+14h] [ebp-114h] int v7; // [esp+124h] [ebp-4h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v6, "%sAction\\%s.dat", byte_ACA520, a1); result = fopen(&v6, "rb"); v2 = result; if ( result ) { fread(&v5, 4u, 1u, result); v3 = (FILE *)operator new(0x8Cu); v7 = 0; if ( v3 ) { v4 = v5; v3->_ptr = (char *)&ActionInfoSet::`vftable'; v3->_cnt = v4; if ( v4 ) v3->_base = (char *)operator new[](352 * v4); else v3->_base = 0; } else { v3 = 0; } fread(v3->_base, 352 * v3->_cnt, 1u, v2); fclose(v2); result = v3; } return result; } // 9F2988: using guessed type void *ActionInfoSet::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0064C640) -------------------------------------------------------- unsigned int sub_64C640() { int v0; // eax unsigned int result; // eax unsigned int *v2; // esi int (__thiscall ***v3)(_DWORD, signed int); // edi sub_64C180(); sub_64C210(); sub_64C2A0(); sub_64C330(); v0 = 0; if ( dword_AB3634 ) { while ( !*((_DWORD *)dword_AB3638 + v0) ) { if ( ++v0 >= (unsigned int)dword_AB3634 ) goto LABEL_4; } result = *((_DWORD *)dword_AB3638 + v0); } else { LABEL_4: result = 0; } v2 = (unsigned int *)result; if ( result ) { do { result = *v2; v3 = (int (__thiscall ***)(_DWORD, signed int))v2[2]; if ( *v2 ) { v2 = (unsigned int *)*v2; } else { result = ((int (__thiscall *)(void ***, unsigned int))off_AB3630[1])(&off_AB3630, v2[1]) + 1; if ( result >= dword_AB3634 ) { LABEL_12: v2 = 0; } else { while ( 1 ) { v2 = (unsigned int *)*((_DWORD *)dword_AB3638 + result); if ( v2 ) break; if ( ++result >= dword_AB3634 ) goto LABEL_12; } } } if ( v3 ) result = (**v3)(v3, 1); } while ( v2 ); } return result; } // AB3630: using guessed type void **off_AB3630; // AB3634: using guessed type int dword_AB3634; //----- (0064C660) -------------------------------------------------------- char sub_64C660() { signed int v0; // edi FILE *v1; // eax char *v2; // edx int *v3; // esi char v4; // cl v0 = 0; do { v1 = sub_64C520((int)off_AB35C0[v0]); v2 = off_AB35C0[v0]; v3 = &v1->_flag; do { v4 = *v2; *(_BYTE *)v3 = *v2++; v3 = (int *)((char *)v3 + 1); } while ( v4 ); if ( v1 ) sub_815C70(&off_AB35F0, (unsigned __int8)byte_AB35A8[v0] | ((unsigned __int8)byte_AB35B4[v0] << 8), (int)v1); ++v0; } while ( v0 < 12 ); return 1; } // AB35C0: using guessed type char *off_AB35C0[13]; // AB35F0: using guessed type void **off_AB35F0; //----- (0064C6D0) -------------------------------------------------------- FILE *__cdecl sub_64C6D0(int a1) { unsigned int v1; // esi unsigned __int16 *v2; // eax FILE *v4; // eax FILE *v5; // esi v1 = 0; if ( !sub_4DC690() ) return 0; while ( 1 ) { v2 = (unsigned __int16 *)sub_7474E0((_DWORD *)(dword_ACDA54 + 4), v1); if ( *v2 == a1 ) break; if ( ++v1 >= sub_4DC690() ) return 0; } v4 = sub_64C520((int)(v2 + 49)); v5 = v4; if ( !v4 ) return 0; sub_815C70(&off_AB3610, a1, (int)v4); return v5; } // AB3610: using guessed type void **off_AB3610; // ACDA54: using guessed type int dword_ACDA54; //----- (0064C730) -------------------------------------------------------- FILE *__cdecl sub_64C730(int a1) { int v1; // esi int v3; // esi int v4; // ecx int v5; // eax FILE *v6; // eax FILE *v7; // esi v1 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a1) ) return 0; if ( (unsigned __int16)a1 > *(_WORD *)(v1 + 200) ) return 0; if ( !*(_DWORD *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1) ) return 0; v3 = dword_ACDA74; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a1) ) return 0; if ( (unsigned __int16)a1 > *(_WORD *)(v3 + 200) ) return 0; v4 = *(_DWORD *)(v3 + 196); if ( !*(_DWORD *)(v4 + 4 * (unsigned __int16)a1) ) return 0; v5 = *(_DWORD *)(v4 + 4 * (unsigned __int16)a1); if ( !v5 ) return 0; v6 = sub_64C520(v5 + 34); v7 = v6; if ( !v6 ) return 0; sub_815C70(&off_AB3600, (unsigned __int16)a1, (int)v6); return v7; } // AB3600: using guessed type void **off_AB3600; // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; //----- (0064C7E0) -------------------------------------------------------- FILE *__cdecl sub_64C7E0(int a1) { FILE *result; // eax FILE *v2; // [esp+4h] [ebp-4h] v2 = 0; sub_8C4C90(&off_AB3600, (unsigned __int16)a1, &v2); result = v2; if ( !v2 ) result = sub_64C730(a1); return result; } // AB3600: using guessed type void **off_AB3600; //----- (0064C820) -------------------------------------------------------- FILE *__cdecl sub_64C820(int a1) { FILE *result; // eax FILE *v2; // [esp+4h] [ebp-4h] v2 = 0; sub_8C4C90(&off_AB3610, a1, &v2); result = v2; if ( !v2 ) result = sub_64C6D0(a1); return result; } // AB3610: using guessed type void **off_AB3610; //----- (0064C860) -------------------------------------------------------- FILE *__cdecl sub_64C860(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi int v4; // eax void *v6; // eax FILE *v7; // esi v1 = *(_DWORD *)(dword_ACB374 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { v4 = sub_7474E0((_DWORD *)(dword_ACB374 + 4), v3); if ( v4 ) { if ( *(_DWORD *)v4 == a1 ) break; } if ( ++v3 >= v2 ) return 0; } v6 = sub_50EFA0((char *)(v4 + 4)); if ( !v6 ) return 0; v7 = sub_64C520((int)v6 + 64); sub_815C70(&off_AB3620, a1, (int)v7); return v7; } // AB3620: using guessed type void **off_AB3620; // ACB374: using guessed type int dword_ACB374; //----- (0064C8E0) -------------------------------------------------------- FILE *__cdecl sub_64C8E0(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi int v4; // eax void *v6; // eax FILE *v7; // esi v1 = *(_DWORD *)(dword_ACB380 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { v4 = sub_7474E0((_DWORD *)(dword_ACB380 + 4), v3); if ( v4 ) { if ( *(_DWORD *)v4 == a1 ) break; } if ( ++v3 >= v2 ) return 0; } v6 = sub_443AD0((char *)(v4 + 4)); if ( !v6 ) return 0; v7 = sub_64C520((int)v6 + 64); sub_815C70(&off_AB3630, a1, (int)v7); return v7; } // AB3630: using guessed type void **off_AB3630; // ACB380: using guessed type int dword_ACB380; //----- (0064C960) -------------------------------------------------------- FILE *__cdecl sub_64C960(int a1) { FILE *result; // eax FILE *v2; // [esp+4h] [ebp-4h] v2 = 0; sub_8C4C90(&off_AB3620, a1, &v2); result = v2; if ( !v2 ) result = sub_64C860(a1); return result; } // AB3620: using guessed type void **off_AB3620; //----- (0064C9A0) -------------------------------------------------------- FILE *__cdecl sub_64C9A0(int a1) { FILE *result; // eax FILE *v2; // [esp+4h] [ebp-4h] v2 = 0; sub_8C4C90(&off_AB3630, a1, &v2); result = v2; if ( !v2 ) result = sub_64C8E0(a1); return result; } // AB3630: using guessed type void **off_AB3630; //----- (0064C9E0) -------------------------------------------------------- void *__thiscall sub_64C9E0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &ActionInfoSet::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2988: using guessed type void *ActionInfoSet::`vftable'; //----- (0064CA30) -------------------------------------------------------- void **__thiscall sub_64CA30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; //----- (0064CA70) -------------------------------------------------------- void **__thiscall sub_64CA70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; //----- (0064CAF0) -------------------------------------------------------- void __thiscall sub_64CAF0(_DWORD *this) { *this = &ActorCallBack::`vftable'; } // 9F29D4: using guessed type void *ActorCallBack::`vftable'; //----- (0064CB70) -------------------------------------------------------- void __thiscall sub_64CB70(_WORD **this, int a2, int a3, _BYTE *a4, int a5, int a6, int a7) { _DWORD *v7; // esi char v8; // al char v9; // al char v10; // cl char v11; // al v7 = this; if ( a4 && *a4 == 33 ) { v8 = a4[1]; if ( v8 < 97 ) v9 = v8 - 48; else v9 = v8 - 87; if ( v9 == (((unsigned __int8)*this[1] + (*this[1] >> 8) + ((char)*this[1] >> 4) + ((char)(*this[1] >> 8) >> 4)) & 0xF) ) { v10 = a4[2]; v11 = a4[3] - 48; if ( v10 == 69 ) { (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v7 + 28))(v7, v11, v7[1]); } else if ( v10 == 83 ) { (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v7 + 32))(v7, v11, v7[1]); } } } } //----- (0064CC00) -------------------------------------------------------- _DWORD *__thiscall sub_64CC00(_DWORD *this) { _DWORD *result; // eax result = this; *this = &ActorCallBack::`vftable'; return result; } // 9F29D4: using guessed type void *ActorCallBack::`vftable'; //----- (0064CEE0) -------------------------------------------------------- _DWORD *__thiscall sub_64CEE0(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; return result; } //----- (0064CEF0) -------------------------------------------------------- void *__thiscall sub_64CEF0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ActorCallBack::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F29D4: using guessed type void *ActorCallBack::`vftable'; //----- (0064CF20) -------------------------------------------------------- float *__thiscall sub_64CF20(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[207]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 30.0; } return result; } //----- (0064CF80) -------------------------------------------------------- float *__thiscall sub_64CF80(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[214]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 25.0; } return result; } //----- (0064D000) -------------------------------------------------------- void *__thiscall sub_64D000(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,AttackSequence *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F2A54: using guessed type void *NiTListBase,AttackSequence *>::`vftable'; //----- (0064D030) -------------------------------------------------------- void *__thiscall sub_64D030(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SkillSequence *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F2A64: using guessed type void *NiTListBase,SkillSequence *>::`vftable'; //----- (0064D060) -------------------------------------------------------- bool __stdcall sub_64D060(int a1) { if ( !a1 ) return 1; if ( *(_DWORD *)(a1 + 68) == 1 ) return *(float *)(a1 + 48) <= (double)*(float *)(a1 + 52); return 0; } //----- (0064D0C0) -------------------------------------------------------- int __thiscall sub_64D0C0(_DWORD *this) { return this[4]; } //----- (0064D0D0) -------------------------------------------------------- bool __thiscall sub_64D0D0(_DWORD *this) { return this[4] > 0; } //----- (0064D0E0) -------------------------------------------------------- BOOL __thiscall sub_64D0E0(_DWORD *this) { return this[8] == 0; } //----- (0064D0F0) -------------------------------------------------------- int __thiscall sub_64D0F0(_DWORD *this, __int16 a2) { _DWORD *v2; // eax int v3; // ecx if ( !this[8] ) return 0; v2 = (_DWORD *)this[6]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(v3 + 20) == a2 ) break; if ( !v2 ) return 0; } return v3 + 4; } //----- (0064D130) -------------------------------------------------------- int __thiscall sub_64D130(_DWORD *this) { int v1; // ecx int result; // eax v1 = this[2]; if ( !v1 ) return 0; while ( 1 ) { result = *(_DWORD *)(v1 + 8); v1 = *(_DWORD *)(v1 + 4); if ( result ) { if ( *(_WORD *)(result + 20) == -1 ) break; } if ( !v1 ) return 0; } return result; } //----- (0064D160) -------------------------------------------------------- int __thiscall sub_64D160(_DWORD *this, __int16 a2) { _DWORD *v2; // eax int v3; // ecx if ( !this[4] ) return 0; v2 = (_DWORD *)this[2]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(v3 + 38) == a2 ) break; if ( !v2 ) return 0; } return v3 + 16; } //----- (0064D1D0) -------------------------------------------------------- int __thiscall sub_64D1D0(_DWORD *this) { _DWORD *v1; // ecx int result; // eax if ( !this[4] ) return 0; v1 = (_DWORD *)this[2]; if ( !v1 ) return 0; while ( 1 ) { result = v1[2]; v1 = (_DWORD *)*v1; if ( *(_WORD *)(result + 38) == -1 ) break; if ( !v1 ) return 0; } return result; } //----- (0064D230) -------------------------------------------------------- char __thiscall sub_64D230(_DWORD *this, int a2, __int16 a3, int a4, unsigned int a5, char a6, char a7, __int16 a8) { _DWORD *v8; // esi int v9; // eax unsigned int v10; // edi int v11; // ebx _DWORD *v12; // edi _DWORD *v13; // eax _DWORD *v14; // ecx char *v15; // eax char *v16; // eax char *v17; // esi _DWORD *v18; // eax _DWORD *v19; // eax v8 = this; if ( this[3] ) { v9 = *(_DWORD *)(this[2] + 8); if ( v9 ) { if ( a8 == -1 ) { v10 = a5; v11 = a4; *(_DWORD *)(v9 + 4) = a2; *(_WORD *)(v9 + 8) = a3; *(_DWORD *)(v9 + 12) = a5; *(_DWORD *)(v9 + 16) = a4; *(_BYTE *)v9 = a6; goto LABEL_12; } goto LABEL_7; } } if ( a7 != 1 || (v12 = (_DWORD *)sub_64D130(this)) == 0 ) LABEL_7: v12 = operator new(0x18u); v11 = a4; v12[1] = a2; *((_WORD *)v12 + 4) = a3; v12[3] = a5; v12[4] = a4; *(_BYTE *)v12 = a6; *((_WORD *)v12 + 11) = a8; v13 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); v13[2] = v12; *v13 = 0; v13[1] = v8[2]; v14 = (_DWORD *)v8[2]; if ( v14 ) *v14 = v13; else v8[1] = v13; v10 = a5; ++v8[3]; v8[2] = v13; LABEL_12: v15 = sub_664AB0(dword_AD8C90, a3); if ( v15 && *((_WORD *)v15 + 274) == *((_WORD *)dword_AD8EBC + 2057) ) sub_650D00(v15, v11, v10); v16 = sub_664AB0(dword_AD8C90, a3); v17 = v16; if ( v16 ) { v18 = (_DWORD *)sub_6D3800(); if ( sub_6D32F0(v18) && v11 != -65536 && v11 != -131072 ) sub_650BA0(v17, v11, v10); v19 = (_DWORD *)sub_6D3800(); LOBYTE(v16) = sub_6D3370(v19); if ( (_BYTE)v16 && v11 != -65536 && v11 != -131072 ) LOBYTE(v16) = sub_650BA0(v17, v11, v10); if ( !(a2 & 0x20000000) ) LOBYTE(v16) = sub_650BA0(v17, v11, v10); } return (char)v16; } //----- (0064D390) -------------------------------------------------------- void __thiscall sub_64D390(int this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx if ( a2 ) { v2 = (_DWORD *)(this + 20); *(_BYTE *)(this + 52) = 1; v3 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(this + 20) + 4))(this + 20); v3[2] = a2; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = v3; ++v2[3]; } else { ++v2[3]; v2[1] = v3; } v2[2] = v3; } } //----- (0064D3E0) -------------------------------------------------------- void __thiscall sub_64D3E0(__int16 *this, char *a2) { __int16 *v2; // edi char *v3; // eax char *v4; // esi int v5; // ebx int v6; // ebx int v7; // eax bool v8; // al int v9; // eax int v10; // eax unsigned int v11; // ST04_4 signed int v12; // eax int v13; // ebx int v14; // eax int v15; // edi char v16; // [esp+4h] [ebp-Ch] v2 = this; if ( a2 ) { v3 = sub_664AB0(dword_AD8C90, this[4]); v4 = v3; if ( v3 ) { (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 96))(v3); (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 92))(v4); v5 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 100))(v4); if ( (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 92))(v4) == v5 ) { v6 = *(_DWORD *)v4; v7 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 92))(v4); (*(void (__thiscall **)(char *, int))(v6 + 132))(v4, v7); } if ( !(*((_DWORD *)v2 + 1) & 0x34000000) && !sub_65B9D0(v4, 500000) ) (*(void (__thiscall **)(char *, _DWORD, _DWORD))(*(_DWORD *)v4 + 412))(v4, *((_DWORD *)v2 + 1), 0); v8 = *((_DWORD *)v2 + 1) < 0; if ( *((_DWORD *)v2 + 1) >= 0 ) v8 = sub_65B9D0(v4, 500000) == 0; if ( *(_BYTE *)v2 ) { if ( v8 ) { v9 = *((_DWORD *)v2 + 1); if ( !(v9 & 0x4000000) || v9 & 0x21000000 ) sub_6B34A0(&unk_B912C8, (void *)(unsigned __int16)v2[4], v9 & 0x77D0FFFF); } } v10 = *((_DWORD *)v2 + 1); if ( *((_DWORD *)v2 + 1) & 0x10000000 || (unsigned int)sub_800000 & v10 ) { if ( *((_DWORD *)v2 + 1) & 0x10000000 ) sub_6B34A0(&unk_B912C8, (void *)(unsigned __int16)v2[4], v10 & 0x1000FFFF); } else if ( !(v10 & 0x24000000) ) { v11 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 544))(v4); v12 = sub_651840(a2); v13 = sub_64EC70(v12, v11); if ( v13 ) { sub_64CF20(v4, (float *)&v16); sub_6BABB0(&dword_AB6520, v13, (int)&v16); } } if ( *((_DWORD *)v2 + 1) & 0x40000000 && a2 == dword_AD8EBC && byte_AB66EE ) { v14 = sub_441430(1); sub_693270(byte_ADB468, v14); } if ( v4[1924] != 3 ) { v15 = *((_DWORD *)v2 + 1); if ( v15 < 0 && !(v15 & 0x4000000) ) (*(void (__thiscall **)(char *))(*(_DWORD *)v4 + 644))(v4); } } } } // AB66EE: using guessed type char byte_AB66EE; //----- (0064D5A0) -------------------------------------------------------- _DWORD *__thiscall sub_64D5A0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &AttackSequenceManager::`vftable'; this[4] = 0; this[2] = 0; this[3] = 0; this[1] = &NiTList::`vftable'; this[8] = 0; this[6] = 0; this[7] = 0; this[5] = &NiTList::`vftable'; *((float *)this + 16) = 100.0; *((float *)this + 9) = 1.0; *((_BYTE *)this + 44) = 0; *((float *)this + 10) = 1.0; *((_BYTE *)this + 52) = 0; *((_WORD *)this + 27) = -1; this[14] = 0; this[15] = 0; *((_WORD *)this + 34) = 0; return result; } // 9F2AA0: using guessed type void *NiTList::`vftable'; // 9F2AB0: using guessed type void *NiTList::`vftable'; // 9F2AC0: using guessed type void *AttackSequenceManager::`vftable'; //----- (0064D600) -------------------------------------------------------- char __thiscall sub_64D600(_DWORD *this, char *a2, _DWORD *a3) { _DWORD *v3; // edi __int16 *v4; // esi _DWORD *v5; // eax __int16 **v6; // ecx _DWORD *v7; // edx char result; // al _DWORD *v9; // esi _DWORD *v10; // eax _DWORD *v11; // ecx _DWORD *v12; // edx _DWORD *v13; // [esp+Ch] [ebp-4h] v3 = (_DWORD *)this[1]; v13 = this; if ( (_BYTE)a3 == 1 ) { while ( v3 ) { v4 = (__int16 *)v3[2]; v3 = (_DWORD *)*v3; sub_64D3E0(v4, a2); operator delete(v4); v5 = (_DWORD *)v13[1]; if ( v5 ) { while ( 1 ) { v6 = (__int16 **)(v5 + 2); v7 = v5; v5 = (_DWORD *)*v5; if ( v4 == *v6 ) break; if ( !v5 ) goto LABEL_6; } } else { LABEL_6: v7 = 0; } a3 = v7; if ( v7 ) sub_403620(v13, &a3); } result = 1; } else if ( v3 ) { while ( 1 ) { v9 = (_DWORD *)v3[2]; v3 = (_DWORD *)*v3; a3 = v9; sub_64D3E0((__int16 *)v9, a2); if ( *(_BYTE *)v9 || v9[4] != -131072 ) break; operator delete(v9); v10 = (_DWORD *)v13[1]; if ( v10 ) { while ( 1 ) { v11 = v10 + 2; v12 = v10; v10 = (_DWORD *)*v10; if ( v9 == (_DWORD *)*v11 ) break; if ( !v10 ) goto LABEL_17; } } else { LABEL_17: v12 = 0; } a3 = v12; if ( v12 ) sub_403620(v13, &a3); if ( !v3 ) goto LABEL_21; } operator delete(v9); sub_937220(v13, (int *)&a3); result = 1; } else { LABEL_21: result = 0; } return result; } //----- (0064D740) -------------------------------------------------------- char __thiscall sub_64D740(unsigned __int16 *this, char *a2, _DWORD *a3) { unsigned __int16 *v3; // ebx char *v5; // eax int v6; // esi int v7; // edi int v8; // edx int *v9; // eax int v10; // esi float v11; // ST18_4 char v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v3 = this; if ( !a2 || !*((_DWORD *)this + 4) ) return 0; v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(*(_DWORD *)(*((_DWORD *)this + 2) + 8) + 8)); v6 = dword_ACEA9C; v7 = *v3; v8 = *(_DWORD *)dword_ACEA9C; v13 = (int)v5; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(v8 + 16))(dword_ACEA9C, v7) ) return 0; if ( (unsigned __int16)v7 > *(_WORD *)(v6 + 200) ) return 0; v9 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v7); if ( !*v9 ) return 0; v10 = *v9; if ( !*v9 ) return 0; if ( *(_DWORD *)(v10 + 91) == 1 ) { if ( strcmp((const char *)(v10 + 195), (const char *)&unk_9F29F8) ) { v11 = (double)*(unsigned int *)(v10 + 191); sub_6AE300( &unk_B91250, (char *)(v10 + 195), v10 + 291, v10 + 327, (int)a2, v13, flt_ACCFCC, v11, (int)(v3 + 2), *(_DWORD *)(v10 + 323), 1); } sub_64CF80(a2, (float *)&v12); sub_6BABB0(&dword_AB6520, v10 + 227, (int)&v12); return 0; } return sub_64D600((_DWORD *)v3 + 1, a2, a3); } // ACCFCC: using guessed type float flt_ACCFCC; // ACEA9C: using guessed type int dword_ACEA9C; //----- (0064D8A0) -------------------------------------------------------- char __thiscall sub_64D8A0(_DWORD *this, __int16 a2, __int16 a3, int a4, int a5, int a6, unsigned int a7, int a8) { _DWORD *v8; // esi int v9; // edx bool v10; // zf _DWORD *v11; // eax int v12; // ecx __int16 v13; // bx _DWORD *v14; // eax int v15; // edi _BYTE *v16; // eax int v17; // eax _WORD *v18; // eax _WORD *v19; // edi int v20; // eax _BYTE *v22; // eax int v23; // eax int v24; // eax _BYTE *v25; // eax int v26; // eax _WORD *v27; // eax _WORD *v28; // esi int v29; // eax _DWORD *v30; // eax char *v31; // eax void **v32; // [esp+10h] [ebp-1Ch] int v33; // [esp+14h] [ebp-18h] int v34; // [esp+18h] [ebp-14h] int v35; // [esp+1Ch] [ebp-10h] int v36; // [esp+28h] [ebp-4h] _DWORD *v37; // [esp+34h] [ebp+8h] _DWORD *v38; // [esp+34h] [ebp+8h] v8 = this; v9 = this[4]; v10 = v9 == 0; if ( !v9 ) { LABEL_6: v13 = a2; if ( v10 || (v14 = (_DWORD *)v8[2]) == 0 ) { LABEL_10: if ( (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8) ) { v16 = (_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); if ( sub_652200(v16) ) { v17 = (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); v18 = sub_6AAF40(&unk_B91250, a2, *(_WORD *)(v17 + 548)); v19 = v18; if ( v18 ) { v20 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v18 + 140))(v18); if ( v20 ) { *(_DWORD *)(v20 + 4) = a4; *(_WORD *)(v20 + 8) = a5; *(_DWORD *)(v20 + 12) = a7; *(_DWORD *)(v20 + 16) = a6; *(_BYTE *)v20 = a8; } else { (*(void (__thiscall **)(_WORD *, int, int, int, unsigned int, int, signed int, signed int, signed int))(*(_DWORD *)v19 + 128))( v19, a4, a5, a6, a7, a8, 1, -1, -1); } return 1; } } } v35 = 0; v33 = 0; v34 = 0; v32 = &NiTList::`vftable'; v36 = 0; sub_438A70(&v32); sub_64D230(&v32, a4, a5, a6, a7, a8, a3 != 0, -1); v31 = (char *)(*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); sub_64D600(&v32, v31, 0); v36 = -1; sub_438C80(&v32); } else { while ( 1 ) { v15 = v14[2]; v14 = (_DWORD *)*v14; if ( *(_WORD *)(v15 + 38) == a2 ) break; if ( !v14 ) goto LABEL_10; } v24 = sub_64D160(v8, a2); *(_BYTE *)(v15 + 36) = 1; v37 = (_DWORD *)v24; if ( (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8) ) { v25 = (_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); if ( sub_652200(v25) ) { v26 = (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); v27 = sub_6AAF40(&unk_B91250, v13, *(_WORD *)(v26 + 548)); v28 = v27; if ( v27 ) { v29 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v27 + 140))(v27); if ( !v29 ) { (*(void (__thiscall **)(_WORD *, int, int, int, unsigned int, int, signed int, signed int, signed int))(*(_DWORD *)v28 + 128))( v28, a4, a5, a6, a7, a8, 1, -1, -1); return 1; } } else { v38 = (_DWORD *)(v15 + 16); v29 = sub_64D130((_DWORD *)(v15 + 16)); if ( !v29 ) { v30 = operator new(0x18u); v30[1] = a4; *((_WORD *)v30 + 4) = a5; v30[3] = a7; v30[4] = a6; *(_BYTE *)v30 = a8; sub_64D230(v38, a4, a5, a6, a7, a8, a3 != 0, -1); return 1; } } *(_DWORD *)(v29 + 4) = a4; *(_WORD *)(v29 + 8) = a5; *(_DWORD *)(v29 + 12) = a7; *(_DWORD *)(v29 + 16) = a6; *(_BYTE *)v29 = a8; return 1; } sub_64D230(v37, a4, a5, a6, a7, a8, 1, a3); } } return 0; } v11 = (_DWORD *)this[2]; if ( !v11 ) { LABEL_5: v10 = v9 == 0; goto LABEL_6; } while ( 1 ) { v12 = v11[2]; v11 = (_DWORD *)*v11; if ( *(_WORD *)(v12 + 38) == -1 ) break; if ( !v11 ) goto LABEL_5; } *(_WORD *)(v12 + 38) = a2; *(_BYTE *)(v12 + 36) = 1; if ( (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8) ) { v22 = (_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); if ( sub_652200(v22) == 1 ) { v23 = (*(int (__thiscall **)(_DWORD *))(*v8 + 4))(v8); sub_6AAF40(&unk_B91250, a2, *(_WORD *)(v23 + 548)); } } return 1; } // 9AD4BC: using guessed type void *NiTList::`vftable'; //----- (0064DC40) -------------------------------------------------------- void __thiscall sub_64DC40(float *this) { float *v1; // edi unsigned __int8 *v2; // ebx int v3; // eax float *v4; // esi char *v5; // eax unsigned __int8 v6; // dl unsigned __int8 v7; // al int v8; // eax double v9; // st7 _DWORD *v10; // [esp+4h] [ebp-10h] float v11; // [esp+4h] [ebp-10h] float *v12; // [esp+8h] [ebp-Ch] float v13; // [esp+Ch] [ebp-8h] float v14; // [esp+10h] [ebp-4h] v1 = this; if ( !*((_DWORD *)this + 4) ) return; v2 = *(unsigned __int8 **)(*((_DWORD *)this + 2) + 8); v12 = (float *)v2; if ( !v2 ) return; if ( v2[12] ) return; v13 = COERCE_FLOAT((**(int (***)(void))this)()); if ( v13 == 0.0 ) return; v3 = (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 4))(v1); v4 = (float *)v3; if ( !v3 ) return; sub_651970(v3); if ( !*((_DWORD *)v2 + 7) ) { if ( sub_652200(v4) != 1 ) goto LABEL_11; if ( !*((_DWORD *)v2 + 7) ) { sub_937220((_DWORD *)v1 + 1, (int *)&v12); sub_438C80((_DWORD *)v2 + 4); operator delete(v2); return; } } v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(*(_DWORD *)(*((_DWORD *)v2 + 5) + 8) + 8)); v6 = *v2; v14 = *v4; v12 = (float *)v5; v7 = sub_653940(v4, v6); (*(void (__thiscall **)(float *, float *, _DWORD))(LODWORD(v14) + 292))(v4, v12, v7); LABEL_11: v10 = *(_DWORD **)(LODWORD(v13) + 8); if ( v10 ) { v14 = COERCE_FLOAT(sub_65B8B0(v4, 0, 0, 0)); v12 = 0; if ( LODWORD(v14) == sub_65B8B0(v4, 1, 0, 0) ) v12 = (float *)sub_64EE80(v10, *(_DWORD *)(LODWORD(v13) + 64), *(_DWORD *)(LODWORD(v13) + 28)); v8 = sub_65D700(v4, SLODWORD(v14)); if ( v8 ) { v14 = *(float *)(v8 + 48); if ( v12 ) v14 = v12[1] + v14; v13 = *((float *)v2 + 2) - (flt_ACCFCC - *((float *)v2 + 1)); v9 = 0.1; if ( v13 < 0.0 ) v13 = 0.1; v11 = (v14 + 0.0) / (v13 + 0.0); v1[10] = v11; if ( v11 < 0.1000000014901161 || (v9 = 3.0, v11 > 3.0) ) v1[10] = v9; v1[9] = v1[10]; v2[12] = 1; *((_DWORD *)v1 + 12) = sub_65B8B0(v4, 0, 0, 0); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0064DE20) -------------------------------------------------------- int __thiscall sub_64DE20(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // ecx int v4; // esi _DWORD *v5; // esi _DWORD *v6; // edi _DWORD *v7; // ST08_4 int (__thiscall *v8)(_DWORD *, _DWORD); // edx int result; // eax void *v10; // [esp+20h] [ebp-14h] _DWORD *v11; // [esp+24h] [ebp-10h] v1 = this; v11 = this; if ( this[4] ) { do { v2 = (int *)v1[2]; v3 = *v2; v1[2] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[3] = 0; v4 = v2[2]; v10 = (void *)v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[1] + 8))(v1 + 1, v2); --v1[4]; if ( v4 ) { v5 = (_DWORD *)(v4 + 16); sub_438A70(v5); *v5 = &NiTPointerListBase,DamageInfo *>::`vftable'; v6 = (_DWORD *)v5[1]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,DamageInfo *>::`vftable'; operator delete(v10); } } while ( v11[4] ); v1 = v11; } v8 = *(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 8); *((_BYTE *)v1 + 52) = 0; result = v8(v1, 1.0); *((_BYTE *)v1 + 69) = 0; return result; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (0064DF20) -------------------------------------------------------- int __thiscall sub_64DF20(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // ecx int v4; // esi _DWORD *v5; // esi _DWORD *v6; // edi _DWORD *v7; // ST08_4 int (__thiscall *v8)(_DWORD *, _DWORD); // edx int result; // eax void *v10; // [esp+20h] [ebp-14h] _DWORD *v11; // [esp+24h] [ebp-10h] v1 = this; v11 = this; if ( this[8] ) { do { v2 = (int *)v1[6]; v3 = *v2; v1[6] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[7] = 0; v4 = v2[2]; v10 = (void *)v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[5] + 8))(v1 + 5, v2); --v1[8]; if ( v4 ) { v5 = (_DWORD *)(v4 + 4); sub_438A70(v5); *v5 = &NiTPointerListBase,DamageInfo *>::`vftable'; v6 = (_DWORD *)v5[1]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,DamageInfo *>::`vftable'; operator delete(v10); } } while ( v11[8] ); v1 = v11; } v8 = *(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 8); *((_BYTE *)v1 + 52) = 0; result = v8(v1, 1.0); *((_BYTE *)v1 + 69) = 0; return result; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (0064E020) -------------------------------------------------------- char __thiscall sub_64E020(_DWORD *this, char *a2, _DWORD *a3, char a4) { _DWORD *v4; // edi bool v5; // zf int v6; // esi char v8; // al int v9; // [esp+4h] [ebp-8h] char v10; // [esp+Bh] [ebp-1h] v4 = this; if ( !(*(int (**)(void))(*this + 4))() ) return 1; v5 = v4[8] == 0; v10 = 1; if ( !v5 ) { v6 = *(_DWORD *)(v4[6] + 8); v9 = v6; if ( !v6 ) return 0; v8 = sub_64D740((unsigned __int16 *)v6, a2, a3); if ( (_BYTE)a3 == 1 ) { sub_937220(v4 + 5, &v9); sub_438C80((_DWORD *)(v6 + 4)); operator delete((void *)v6); return v10; } if ( a4 == 1 && (v8 != 1 || *(_DWORD *)(v6 + 16)) ) v10 = 0; } return v10; } //----- (0064E0C0) -------------------------------------------------------- int __userpurge sub_64E0C0@(int result@, _DWORD *a2@, int a3) { _DWORD *v3; // edi _DWORD *v4; // ebx int *v5; // eax int v6; // ecx int v7; // esi _DWORD *v8; // esi _DWORD *v9; // edi _DWORD *v10; // ST04_4 void *v11; // [esp+14h] [ebp-14h] _DWORD *v12; // [esp+18h] [ebp-10h] v3 = a2; v12 = a2; if ( a2[4] ) { v4 = a2 + 1; while ( 1 ) { v5 = (int *)v4[1]; v6 = *v5; v4[1] = *v5; if ( v6 ) *(_DWORD *)(v6 + 4) = 0; else v4[2] = 0; v7 = v5[2]; v11 = (void *)v5[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v4 + 8))(v4, v5); --v4[3]; ++v3[14]; if ( *(_BYTE *)(v7 + 36) ) (*(void (__thiscall **)(_DWORD *, int, int))(*v3 + 20))(v3, v7, a3); v8 = (_DWORD *)(v7 + 16); sub_438A70(v8); *v8 = &NiTPointerListBase,DamageInfo *>::`vftable'; v9 = (_DWORD *)v8[1]; while ( v9 ) { v10 = v9; v9 = (_DWORD *)*v9; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v8 + 8))(v8, v10); } v8[3] = 0; v8[1] = 0; v8[2] = 0; *v8 = &NiTListBase,DamageInfo *>::`vftable'; operator delete(v11); if ( !v12[4] ) break; v3 = v12; } } return result; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; //----- (0064E250) -------------------------------------------------------- char __thiscall sub_64E250(_DWORD *this) { _DWORD *v1; // eax int v2; // esi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx int v7; // edi int v8; // [esp+4h] [ebp-4h] v1 = (_DWORD *)this[2]; if ( !v1 ) return 0; while ( 1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; if ( v2 ) { if ( !*(_BYTE *)(v2 + 36) ) break; } if ( !v1 ) return 0; } v4 = (_DWORD *)this[2]; v5 = this + 1; if ( v4 ) { while ( 1 ) { v6 = v4 + 2; v7 = (int)v4; v4 = (_DWORD *)*v4; if ( v2 == *v6 ) break; if ( !v4 ) goto LABEL_9; } } else { LABEL_9: v7 = 0; } v8 = v7; if ( v7 ) sub_403620(v5, (_DWORD **)&v8); sub_438C80((_DWORD *)(v2 + 16)); operator delete((void *)v2); return 1; } //----- (0064E360) -------------------------------------------------------- void __thiscall sub_64E360(int (***this)(void), float a2) { __int16 *v2; // esi bool v3; // zf int v4; // edi int v5; // eax _DWORD *v6; // ebx __int16 v7; // ax int v8; // edi char *v9; // eax int v10; // ebx int v11; // edi int v12; // ecx unsigned int v13; // eax _BYTE *v14; // eax bool v15; // al double v16; // st7 void (__thiscall *v17)(__int16 *, _DWORD); // edx _DWORD *v18; // edi char *v19; // eax double v20; // st7 _DWORD *v21; // ebx _BYTE *v22; // eax _DWORD *v23; // edi char *v24; // eax void (__thiscall *v25)(__int16 *); // eax _DWORD *v26; // [esp+10h] [ebp-8h] float v27; // [esp+10h] [ebp-8h] int v28; // [esp+14h] [ebp-4h] float v29; // [esp+20h] [ebp+8h] float v30; // [esp+20h] [ebp+8h] v2 = (__int16 *)this; v3 = this[4] == 0; *((_BYTE *)this + 69) = 0; if ( !v3 ) { v4 = (**this)(); v5 = (*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); v6 = (_DWORD *)v5; v26 = (_DWORD *)v5; if ( v4 ) { if ( v5 && !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 500))(v5) ) { v7 = v2[27]; v8 = *(_DWORD *)(*((_DWORD *)v2 + 3) + 8); v28 = *(_DWORD *)(*((_DWORD *)v2 + 2) + 8); if ( v7 == -1 ) { *(_BYTE *)(v8 + 14) = 1; v2[27] = -1; } else { v9 = sub_664AB0(dword_AD8C90, v7); if ( v9 ) { if ( v9[2496] ) { *(_BYTE *)(v8 + 14) = 1; v2[27] = -1; } } else { *(_BYTE *)(v8 + 14) = 1; v2[27] = -1; } } if ( *((_DWORD *)v2 + 4) <= 0 ) { *(_BYTE *)(v8 + 14) = 1; v2[27] = -1; } (*(void (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); v10 = sub_65B8B0(v6, 0, 0, 0); v11 = sub_65D700(v26, v10); if ( v11 ) { v12 = v28; if ( !*(_BYTE *)(v28 + 12) ) { sub_64DC40((float *)v2); v12 = v28; } if ( !*((_BYTE *)v2 + 68) ) { if ( *(float *)(v11 + 52) < (double)*((float *)v2 + 16) ) *((_BYTE *)v2 + 68) = 1; goto LABEL_19; } if ( *(_DWORD *)(v11 + 68) != 1 ) { LABEL_19: *((float *)v2 + 10) = 1.0; *((float *)v2 + 9) = 1.0; LABEL_54: v25 = *(void (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4); v30 = *((float *)v2 + 10) - *((float *)v2 + 9); *((float *)v2 + 9) = v30 * 0.1000000014901161 + *((float *)v2 + 9); v25(v2); (*(void (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v2 + 8))(v2, *((float *)v2 + 9)); return; } if ( v10 != *((_DWORD *)v2 + 12) ) { if ( *(_BYTE *)(v12 + 12) ) *(_BYTE *)(v12 + 12) = 0; sub_64DC40((float *)v2); goto LABEL_54; } v13 = *((_DWORD *)v2 + 4); if ( v13 != 1 ) { if ( v13 <= 1 ) goto LABEL_54; (*(void (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); v21 = (_DWORD *)v28; if ( *(_BYTE *)(v28 + 36) || (v22 = (_BYTE *)(*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2), sub_652200(v22)) ) { if ( !sub_64D060(v11) ) { v20 = 5.0; LABEL_53: *((float *)v2 + 10) = v20; goto LABEL_54; } *((_BYTE *)v2 + 68) = 0; *((float *)v2 + 16) = *(float *)(v11 + 52); v23 = (_DWORD *)sub_6B5000((_DWORD *)v2 + 1); if ( v23[7] ) { v24 = (char *)(*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); sub_64D600(v23 + 4, v24, (_DWORD *)1); } sub_438C80(v23 + 4); operator delete(v23); } else { OutputDebugStringA("???? ?? ??? ???? ???. ??? ?? ??? ??..\n"); sub_937220((_DWORD *)v2 + 1, &v28); sub_438C80(v21 + 4); operator delete(v21); } ++*((_DWORD *)v2 + 14); sub_64DC40((float *)v2); return; } v27 = *(float *)(v11 + 48) - *(float *)(v11 + 52); if ( !*(_BYTE *)(v12 + 36) ) { v14 = (_BYTE *)(*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); v15 = sub_652200(v14); v12 = v28; if ( !v15 ) { v16 = 0.0; *((_BYTE *)v2 + 69) = 1; LABEL_37: v29 = *(float *)(v12 + 8) - (a2 - *(float *)(v12 + 4)); if ( v29 < 0.1000000014901161 ) v29 = 0.1; if ( v16 > v27 ) v27 = v16; v20 = (v27 + 0.0) / (v29 + 0.0); goto LABEL_53; } } v16 = 0.0; if ( v27 >= 0.0 ) goto LABEL_37; if ( !*(_BYTE *)(v12 + 14) ) { v16 = 0.0; ++*((_DWORD *)v2 + 14); v27 = 0.0; goto LABEL_37; } v17 = *(void (__thiscall **)(__int16 *, _DWORD))(*(_DWORD *)v2 + 8); *((float *)v2 + 16) = 1000.0; *((_BYTE *)v2 + 68) = 0; v17(v2, 1.0); v18 = (_DWORD *)sub_6B5000((_DWORD *)v2 + 1); if ( v18[7] ) { if ( *(_WORD *)((*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2) + 548) == *((_WORD *)dword_AD8EBC + 274) ) OutputDebugStringA("last sequence -applicate\n"); v19 = (char *)(*(int (__thiscall **)(__int16 *))(*(_DWORD *)v2 + 4))(v2); sub_64D600(v18 + 4, v19, (_DWORD *)1); } sub_438C80(v18 + 4); operator delete(v18); } } } } } //----- (0064E6E0) -------------------------------------------------------- void __thiscall sub_64E6E0(_DWORD *this, void *a2) { _DWORD *v2; // esi char *v3; // edi int (__thiscall *v4)(_DWORD *); // eax int v5; // eax int v6; // eax unsigned int v7; // eax _DWORD *v8; // eax _DWORD *v9; // ecx int v10; // [esp+Ch] [ebp-4h] v2 = this; v3 = (char *)(*(int (**)(void))(*this + 4))(); if ( v3 && (sub_65B8B0(v3, 0, (unsigned int *)&v10, 0), v10 != 300000) && v10 != 100000 && v10 != 600000 && v10 != 700000 && v10 != 400000 && v10 != 200000 ) { sub_64D600((_DWORD *)a2 + 4, v3, (_DWORD *)1); if ( a2 ) { sub_438C80((_DWORD *)a2 + 4); operator delete(a2); } } else { v4 = *(int (__thiscall **)(_DWORD *))(*v2 + 4); *((_BYTE *)v2 + 52) = 1; v5 = v4(v2); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 32))(v5) ) *((_BYTE *)a2 + 14) = 1; if ( *((_DWORD *)a2 + 7) ) { v6 = *(_DWORD *)(*((_DWORD *)a2 + 5) + 8); *((_WORD *)v2 + 27) = *(_WORD *)(v6 + 8); if ( *(_DWORD *)(v6 + 4) < 0 ) { *((_BYTE *)a2 + 14) = 1; if ( (char *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2) == dword_AD8EBC ) (*(void (__thiscall **)(_DWORD *))(*v2 + 4))(v2); } } v7 = v2[4]; if ( v7 ) { if ( v7 > 4 && !sub_64E250(v2) ) { sub_438C80((_DWORD *)a2 + 4); operator delete(a2); return; } } else { *((float *)v2 + 16) = 1000.0; } v8 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[1] + 4))(v2 + 1); v8[2] = a2; *v8 = 0; v8[1] = v2[3]; v9 = (_DWORD *)v2[3]; if ( v9 ) *v9 = v8; else v2[2] = v8; v2[3] = v8; ++v2[4]; *((_DWORD *)a2 + 8) = v2[15]++; } } //----- (0064E910) -------------------------------------------------------- void __fastcall sub_64E910(_DWORD *a1) { int *v1; // eax _DWORD *v2; // esi int v3; // ecx int v4; // edi _DWORD *v5; // esi _DWORD *v6; // edi _DWORD *v7; // ST00_4 int *v8; // eax _DWORD *v9; // esi int v10; // ecx int v11; // edi _DWORD *v12; // esi _DWORD *v13; // edi _DWORD *v14; // ST00_4 _DWORD *v15; // esi _DWORD *v16; // edi _DWORD *v17; // ST00_4 _DWORD *v18; // edi _DWORD *v19; // esi _DWORD *v20; // ST00_4 void *v21; // [esp+14h] [ebp-14h] void *v22; // [esp+14h] [ebp-14h] _DWORD *v23; // [esp+18h] [ebp-10h] v23 = a1; for ( *a1 = &AttackSequenceManager::`vftable'; v23[4]; a1 = v23 ) { v1 = (int *)a1[2]; v2 = a1 + 1; v3 = *v1; v2[1] = *v1; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v2[2] = 0; v4 = v1[2]; v21 = (void *)v1[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 8))(v2, v1); --v2[3]; if ( v4 ) { v5 = (_DWORD *)(v4 + 16); sub_438A70((_DWORD *)(v4 + 16)); *(_DWORD *)(v4 + 16) = &NiTPointerListBase,DamageInfo *>::`vftable'; v6 = *(_DWORD **)(v4 + 20); while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,DamageInfo *>::`vftable'; operator delete(v21); } } if ( a1[8] ) { do { v8 = (int *)a1[6]; v9 = a1 + 5; v10 = *v8; v9[1] = *v8; if ( v10 ) *(_DWORD *)(v10 + 4) = 0; else v9[2] = 0; v11 = v8[2]; v22 = (void *)v8[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v9 + 8))(v9, v8); --v9[3]; if ( v11 ) { v12 = (_DWORD *)(v11 + 4); sub_438A70((_DWORD *)(v11 + 4)); *(_DWORD *)(v11 + 4) = &NiTPointerListBase,DamageInfo *>::`vftable'; v13 = *(_DWORD **)(v11 + 8); while ( v13 ) { v14 = v13; v13 = (_DWORD *)*v13; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v12 + 8))(v12, v14); } v12[3] = 0; v12[1] = 0; v12[2] = 0; *v12 = &NiTListBase,DamageInfo *>::`vftable'; operator delete(v22); } a1 = v23; } while ( v23[8] ); } v15 = a1 + 5; a1[5] = &NiTPointerListBase,SkillSequence *>::`vftable'; v16 = (_DWORD *)a1[6]; if ( v16 ) { do { v17 = v16; v16 = (_DWORD *)*v16; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v15 + 8))(v15, v17); } while ( v16 ); a1 = v23; } v18 = a1 + 1; v15[3] = 0; v15[1] = 0; v15[2] = 0; *v15 = &NiTListBase,SkillSequence *>::`vftable'; a1[1] = &NiTPointerListBase,AttackSequence *>::`vftable'; v19 = (_DWORD *)a1[2]; while ( v19 ) { v20 = v19; v19 = (_DWORD *)*v19; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v18 + 8))(v18, v20); } v18[3] = 0; v18[1] = 0; v18[2] = 0; *v18 = &NiTListBase,AttackSequence *>::`vftable'; } // 9AD47C: using guessed type void *NiTListBase,DamageInfo *>::`vftable'; // 9AD4AC: using guessed type void *NiTPointerListBase,DamageInfo *>::`vftable'; // 9F2A54: using guessed type void *NiTListBase,AttackSequence *>::`vftable'; // 9F2A64: using guessed type void *NiTListBase,SkillSequence *>::`vftable'; // 9F2A7C: using guessed type void *NiTPointerListBase,AttackSequence *>::`vftable'; // 9F2A8C: using guessed type void *NiTPointerListBase,SkillSequence *>::`vftable'; // 9F2AC0: using guessed type void *AttackSequenceManager::`vftable'; //----- (0064EB10) -------------------------------------------------------- char __thiscall sub_64EB10(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax _DWORD *v4; // eax int v5; // eax char *v6; // eax _DWORD *v7; // eax int v8; // edi _DWORD *v9; // eax _DWORD *v11; // [esp+0h] [ebp-10h] _DWORD *v12; // [esp+Ch] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(*this + 4))(); if ( v2 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); sub_64E0C0(v3, v1, 1); if ( (*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1) ) { v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); v5 = sub_65C170(v4); if ( v5 ) { LOBYTE(v12) = *(_WORD *)(v5 + 669) == 0; v11 = v12; } else { v11 = (_DWORD *)1; } v6 = (char *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); sub_64E020(v1, v6, v11, 0); } v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); if ( v2 ) { v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); v8 = sub_6506C0(v7); v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); LOBYTE(v2) = sub_656DB0(v9); if ( (_BYTE)v2 != 1 || !v8 || !*(_DWORD *)(v8 + 36) ) LOBYTE(v2) = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 8))(v1, 1.0); } *((_BYTE *)v1 + 69) = 0; } return v2; } //----- (0064EBE0) -------------------------------------------------------- _DWORD *__thiscall sub_64EBE0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,AttackSequence *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,AttackSequence *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2A54: using guessed type void *NiTListBase,AttackSequence *>::`vftable'; // 9F2A7C: using guessed type void *NiTPointerListBase,AttackSequence *>::`vftable'; //----- (0064EC70) -------------------------------------------------------- int __cdecl sub_64EC70(unsigned int a1, unsigned int a2) { int v2; // eax int v3; // esi int result; // eax if ( a1 >= 0x16 ) return 0; if ( a2 >= 0xC ) return 0; if ( !a1 ) return 0; if ( !a2 ) return 0; v2 = sub_7474E0((_DWORD *)(dword_ACD940 + 4), a1 - 1); if ( !v2 ) return 0; v3 = v2 + 32 * (a2 - 1); result = strcmp((const char *)(v2 + 32 * (a2 - 1)), (const char *)&unk_9F2A98); if ( result ) result = v3; return result; } // ACD940: using guessed type int dword_ACD940; //----- (0064ECF0) -------------------------------------------------------- int __thiscall sub_64ECF0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,AttackSequence *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,AttackSequence *>::`vftable'; return result; } // 9F2A54: using guessed type void *NiTListBase,AttackSequence *>::`vftable'; // 9F2A7C: using guessed type void *NiTPointerListBase,AttackSequence *>::`vftable'; //----- (0064ED70) -------------------------------------------------------- int __thiscall sub_64ED70(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,SkillSequence *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,SkillSequence *>::`vftable'; return result; } // 9F2A64: using guessed type void *NiTListBase,SkillSequence *>::`vftable'; // 9F2A8C: using guessed type void *NiTPointerListBase,SkillSequence *>::`vftable'; //----- (0064EDF0) -------------------------------------------------------- _DWORD *__thiscall sub_64EDF0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SkillSequence *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SkillSequence *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2A64: using guessed type void *NiTListBase,SkillSequence *>::`vftable'; // 9F2A8C: using guessed type void *NiTPointerListBase,SkillSequence *>::`vftable'; //----- (0064EE80) -------------------------------------------------------- int __thiscall sub_64EE80(_DWORD *this, int a2, int a3) { char v4; // al if ( !sub_8C4C90(this + 6, a2, &a2) || !a2 ) return 0; v4 = sub_8C4C90((_DWORD *)(a2 + 12), a3, &a2); return v4 != 0 ? a2 : 0; } //----- (0064EED0) -------------------------------------------------------- _DWORD *__thiscall sub_64EED0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // ebx _DWORD *v4; // ecx _DWORD *v5; // edi _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *v8; // ecx _DWORD *v9; // [esp+Ch] [ebp+8h] result = a2; v3 = this; v4 = (_DWORD *)a2[1]; if ( v4 ) { while ( 1 ) { v5 = (_DWORD *)v4[2]; v9 = (_DWORD *)*v4; v6 = operator new(0x18u); v7 = v6; *v6 = *v5; v6[1] = v5[1]; v6[2] = v5[2]; v6[3] = v5[3]; v6[4] = v5[4]; v6[5] = v5[5]; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3); result[2] = v7; *result = 0; result[1] = v3[2]; v8 = (_DWORD *)v3[2]; if ( v8 ) *v8 = result; else v3[1] = result; ++v3[3]; v3[2] = result; if ( !v9 ) break; v4 = v9; } } return result; } //----- (0064EF60) -------------------------------------------------------- void *__thiscall sub_64EF60(void *this, char a2) { void *v2; // esi v2 = this; sub_64E910(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0064F000) -------------------------------------------------------- _DWORD *__thiscall sub_64F000(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; sub_658E20(this); v2 = v1[175]; *v1 = &Avatar::`vftable'; v1[15] = &Avatar::`vftable'; v1[21] = &Avatar::`vftable'; *(_WORD *)(v2 + 28) &= 0xFFFEu; return v1; } // 9F2AE0: using guessed type void *Avatar::`vftable'; // 9F2B00: using guessed type void *Avatar::`vftable'; // 9F2B0C: using guessed type void *Avatar::`vftable'; //----- (0064F030) -------------------------------------------------------- int __thiscall sub_64F030(float **this, float a2) { float **v2; // esi int result; // eax v2 = this; result = (*((int (__stdcall **)(_DWORD))*this + 147))(LODWORD(a2)); if ( v2[174] ) { if ( v2[175] ) { sub_651ED0(v2); sub_803810(v2[174], a2); sub_85BED0((_DWORD **)v2[175], a2, 1); result = (*((int (__thiscall **)(float **, _DWORD))*v2 + 145))(v2, LODWORD(a2)); } } return result; } //----- (0064F0A0) -------------------------------------------------------- char __thiscall sub_64F0A0(_DWORD *this) { _DWORD *v1; // esi void **v3; // [esp+8h] [ebp-18h] int v4; // [esp+Ch] [ebp-14h] int v5; // [esp+10h] [ebp-10h] int v6; // [esp+1Ch] [ebp-4h] v1 = this; sub_674B40(this + 194); v4 = 0; v5 = -1; v3 = &LODNodeInActivate::`vftable'; v6 = 0; return sub_8CFE00(&v3, v1[175], (int)dword_BA457C, 0); } // 9F2DD0: using guessed type void *LODNodeInActivate::`vftable'; //----- (0064F110) -------------------------------------------------------- char __thiscall sub_64F110(_DWORD *this, int a2) { _DWORD *v2; // eax v2 = (_DWORD *)this[174]; if ( v2 ) { v2 = (_DWORD *)v2[5]; if ( v2 ) LOBYTE(v2) = sub_810BE0(v2, 0); } return (char)v2; } //----- (0064F130) -------------------------------------------------------- char __thiscall sub_64F130(_DWORD *this, unsigned __int8 *a2, int a3) { _DWORD *v3; // esi char v4; // bl int v5; // ST00_4 void **v7; // [esp+Ch] [ebp-18h] int v8; // [esp+10h] [ebp-14h] int v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v3 = this; sub_673CC0((int)(this + 194), a2); v4 = (*(int (__thiscall **)(_DWORD *, _DWORD, int))(*v3 + 600))(v3, 0, a3); v8 = 0; v9 = -1; v7 = &LODNodeInActivate::`vftable'; v5 = v3[175]; v10 = 0; sub_8CFE00(&v7, v5, (int)dword_BA457C, 0); return v4; } // 9F2DD0: using guessed type void *LODNodeInActivate::`vftable'; //----- (0064F1D0) -------------------------------------------------------- char __thiscall sub_64F1D0(_DWORD *this, unsigned __int8 *a2, int a3) { char result; // al if ( a2 ) result = sub_64F130(this, a2, a3); else result = 0; return result; } //----- (0064F1F0) -------------------------------------------------------- char __thiscall sub_64F1F0(_DWORD *this, unsigned __int8 *a2, int a3) { char result; // al if ( a2 ) result = sub_64F130(this, a2, a3); else result = 0; return result; } //----- (0064F210) -------------------------------------------------------- char __thiscall sub_64F210(void *this, unsigned __int8 *a2) { int v2; // esi unsigned __int8 *v3; // edx unsigned __int8 v5; // cl int v6; // ST08_4 void **v7; // [esp+Ch] [ebp-1Ch] int v8; // [esp+10h] [ebp-18h] int v9; // [esp+14h] [ebp-14h] char v10; // [esp+1Bh] [ebp-Dh] int v11; // [esp+24h] [ebp-4h] v2 = (int)this; v3 = a2; if ( !a2 ) return 0; v5 = *a2; switch ( ((unsigned int)*a2 >> 2) & 0x1F ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(a2) = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(a2) = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(a2) = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(a2) = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(a2) = 21; break; case 0x1Au: case 0x1Bu: LOBYTE(a2) = 26; break; default: LOBYTE(a2) = 0; break; } sub_64F580(v3[3], (char)a2, v5 >> 7, (_BYTE *)&a2 + 3, &v10); if ( HIBYTE(a2) != -1 ) *(_BYTE *)(v2 + 920) = HIBYTE(a2); if ( v10 != -1 ) *(_BYTE *)(v2 + 941) = v10; sub_675370(v2 + 776); v8 = 0; v9 = -1; v7 = &LODNodeInActivate::`vftable'; v6 = *(_DWORD *)(v2 + 700); v11 = 0; sub_8CFE00(&v7, v6, (int)dword_BA457C, 0); return 1; } // 9F2DD0: using guessed type void *LODNodeInActivate::`vftable'; //----- (0064F3A0) -------------------------------------------------------- char __thiscall sub_64F3A0(void *this, int a2) { int v2; // edi int v3; // eax unsigned int v4; // ebx unsigned int v5; // esi int v7; // ST00_4 void **v8; // [esp+10h] [ebp-1Ch] int v9; // [esp+14h] [ebp-18h] int v10; // [esp+18h] [ebp-14h] void *v11; // [esp+1Ch] [ebp-10h] int v12; // [esp+28h] [ebp-4h] char v13; // [esp+34h] [ebp+8h] v11 = this; v2 = a2; if ( !a2 ) return 0; v13 = *(_BYTE *)(a2 + 1); v3 = *(_DWORD *)(dword_AC9C94 + 56); v4 = v3 ? *(_DWORD *)(v3 + 40) : 0; v5 = 0; if ( !v4 ) return 0; while ( *(_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v5) != v13 ) { if ( ++v5 >= v4 ) return 0; } if ( !sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), *(unsigned __int8 *)(v2 + 2)) ) return 0; sub_676F20((_BYTE *)v11 + 776, *(_BYTE *)(v2 + 1)); sub_6765B0((_BYTE *)v11 + 776, (char *)*(unsigned __int8 *)(v2 + 2)); v9 = 0; v10 = -1; v8 = &LODNodeInActivate::`vftable'; v7 = *((_DWORD *)v11 + 175); v12 = 0; sub_8CFE00(&v8, v7, (int)dword_BA457C, 0); return 1; } // 9F2DD0: using guessed type void *LODNodeInActivate::`vftable'; // AC9C94: using guessed type int dword_AC9C94; // AC9CA0: using guessed type int dword_AC9CA0; //----- (0064F4A0) -------------------------------------------------------- char __thiscall sub_64F4A0(_BYTE *this, int a2) { _BYTE *v2; // edi v2 = this; if ( !a2 || !sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), *(unsigned __int8 *)(a2 + 2)) ) return 0; sub_6765B0(v2 + 776, (char *)*(unsigned __int8 *)(a2 + 2)); v2[940] = *(_BYTE *)(a2 + 2); return 1; } // AC9CA0: using guessed type int dword_AC9CA0; //----- (0064F4F0) -------------------------------------------------------- void __stdcall sub_64F4F0(int a1) { JUMPOUT(&loc_64F540); } //----- (0064F500) -------------------------------------------------------- _DWORD *__thiscall sub_64F500(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 15; *v2 = &Avatar::`vftable'; v2[15] = &Avatar::`vftable'; v2[21] = &Avatar::`vftable'; sub_657580(this - 15); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2AE0: using guessed type void *Avatar::`vftable'; // 9F2B00: using guessed type void *Avatar::`vftable'; // 9F2B0C: using guessed type void *Avatar::`vftable'; //----- (0064F580) -------------------------------------------------------- char __cdecl sub_64F580(unsigned int a1, char a2, char a3, _BYTE *a4, _BYTE *a5) { _BYTE *v5; // eax char v6; // dl char v7; // dl char v8; // dl char v9; // dl *a4 = -1; *a5 = -1; v5 = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C9C + 4), a1); if ( v5 ) { switch ( a2 ) { case 1: if ( a3 ) { *a4 = v5[34]; *a5 = v5[35]; } else { *a4 = v5[36]; LOBYTE(v5) = v5[37]; *a5 = (_BYTE)v5; } break; case 6: if ( a3 ) { *a4 = v5[38]; v6 = v5[39]; } else { *a4 = v5[40]; v6 = v5[41]; } *a5 = v6; break; case 0xB: if ( a3 ) { *a4 = v5[42]; v7 = v5[43]; } else { *a4 = v5[44]; v7 = v5[45]; } *a5 = v7; break; case 0x10: if ( a3 ) { *a4 = v5[46]; v8 = v5[47]; } else { *a4 = v5[48]; v8 = v5[49]; } *a5 = v8; break; case 0x15: if ( a3 ) { *a4 = v5[50]; v9 = v5[51]; } else { *a4 = v5[52]; v9 = v5[53]; } *a5 = v9; break; case 0x1A: if ( a3 ) { *a4 = v5[54]; *a5 = v5[55]; } else { *a4 = v5[56]; *a5 = v5[57]; } break; default: return (char)v5; } } return (char)v5; } // AC9C9C: using guessed type int dword_AC9C9C; //----- (0064F6D0) -------------------------------------------------------- signed int __stdcall sub_64F6D0(int *a1, int a2) { int v3; // eax int v4; // eax int v5; // esi unsigned int v6; // edi int v7; // ebx double v8; // st7 int v9; // [esp+4h] [ebp-4h] float v10; // [esp+10h] [ebp+8h] if ( !a1 ) return -1; v3 = (*(int (__thiscall **)(int *))(*a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA4838 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 1; } v4 = sub_402BA0((int)dword_BA4830, a1[69]); v5 = v4; if ( v4 ) { v6 = 0; v9 = *(_DWORD *)(v4 + 32); if ( v9 > 0 ) { v7 = 0; do { v10 = *(float *)(v7 + *(_DWORD *)(v5 + 36)); if ( 0.0 == v10 ) { if ( v6 >= *(_DWORD *)(v5 + 32) ) sub_86CDB0(v5, v6 + 1); *(float *)(v7 + *(_DWORD *)(v5 + 36)) = v10; v8 = 100000000.0; } else { if ( v6 >= *(_DWORD *)(v5 + 32) ) sub_86CDB0(v5, v6 + 1); *(float *)(v7 + *(_DWORD *)(v5 + 36)) = 1.0; v8 = 0.0; } *(float *)(*(_DWORD *)(v5 + 36) + v7 + 4) = v8; ++v6; v7 += 16; } while ( (signed int)v6 < v9 ); } } } return 1; } //----- (0064F7B0) -------------------------------------------------------- int __thiscall sub_64F7B0(_DWORD *this, int a2) { int result; // eax result = a2; if ( a2 ) { if ( a2 == this[10] ) this[10] = 0; if ( a2 == this[11] ) this[11] = 0; } return result; } //----- (0064F7D0) -------------------------------------------------------- _DWORD *__thiscall sub_64F7D0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[14]; return result; } //----- (0064F7E0) -------------------------------------------------------- int __thiscall sub_64F7E0(_DWORD *this, signed int a2, unsigned __int8 a3, int a4) { int result; // eax result = a2; if ( a2 > 336 ) { if ( a2 == 337 ) { result = a4; this[12] += a4; return result; } result = a2 - 487; if ( a2 == 487 ) { LABEL_15: this[9] = a3; return result; } result = a2 - 560; if ( a2 != 560 ) return result; LABEL_14: result = a4; this[11] += a4; return result; } if ( a2 == 336 ) { this[13] += a4; return result; } if ( a2 > 199 ) { if ( a2 != 335 ) return result; goto LABEL_14; } if ( a2 == 199 ) goto LABEL_15; result = a2 - 75; if ( a2 == 75 ) goto LABEL_15; result = a2 - 77; if ( a2 == 77 ) { result = a3; this[10] = a3; } return result; } //----- (0064F860) -------------------------------------------------------- int __thiscall sub_64F860(char *this) { return (int)(this + 8); } //----- (0064F870) -------------------------------------------------------- BOOL __thiscall sub_64F870(_DWORD *this) { if ( !this[9] ) return 0; if ( this[10] ) return 1; return sub_652070(dword_AD8EBC) == 15; } //----- (0064F8A0) -------------------------------------------------------- void __thiscall sub_64F8A0(int this, float a2) { double v2; // st6 double v3; // st6 double v4; // st7 double v5; // rt1 _DWORD *v6; // edx double v7; // st5 double v8; // rt2 int v9; // esi double v10; // rtt double v11; // st5 double v12; // st6 float v13; // [esp+8h] [ebp+8h] v2 = a2; if ( *(float *)(this + 4) >= 0.0 ) { v13 = v2 - *(float *)(this + 4); v5 = v2; v3 = 0.0; v4 = v5; } else { v3 = 0.0; v4 = a2; v13 = 0.0; } v6 = *(_DWORD **)(this + 12); if ( v6 ) { v7 = v13; while ( 1 ) { v9 = v6[2]; v10 = v7; v11 = v3; v12 = v10; v6 = (_DWORD *)*v6; if ( v11 <= *(float *)(v9 + 36) ) *(float *)(v9 + 36) = *(float *)(v9 + 36) - v12; if ( !v6 ) break; v8 = v11; v7 = v12; v3 = v8; } } *(float *)(this + 4) = v4; } //----- (0064F900) -------------------------------------------------------- char __thiscall sub_64F900(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // edi int v5; // esi int *v6; // eax int v7; // eax v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = *(unsigned __int16 *)(v3 + 20); v5 = dword_ACDA7C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4); if ( *v6 ) { v7 = *v6; if ( v7 ) { if ( a2 == *(_DWORD *)(v7 + 34) ) break; } } } } } if ( !v2 ) return 0; } return 1; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (0064F980) -------------------------------------------------------- void __thiscall sub_64F980(_DWORD *this, int a2) { _DWORD *v2; // ebx int *v3; // eax int v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // edi v2 = this; if ( this[5] ) { do { v3 = (int *)v2[3]; v4 = *v3; v2[3] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else v2[4] = 0; v5 = (void (__thiscall ***)(_DWORD, signed int))v3[2]; (*(void (__thiscall **)(_DWORD *, int *))(v2[2] + 8))(v2 + 2, v3); --v2[5]; (*(void (__thiscall **)(_DWORD *, void (__thiscall ***)(_DWORD, signed int), int))(*v2 + 4))(v2, v5, a2); if ( v5 ) (**v5)(v5, 1); } while ( v2[5] ); v2[14] = 0; } else { this[14] = 0; } } //----- (0064FA00) -------------------------------------------------------- bool __thiscall sub_64FA00(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = dword_ACDA7C; v4 = *(unsigned __int16 *)(v2[2] + 20); v2 = (_DWORD *)*v2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *v5 ) { v6 = *v5; if ( v6 ) break; } } } if ( !v2 ) return 0; } return *(_DWORD *)(v6 + 34) == a2; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (0064FA70) -------------------------------------------------------- void __thiscall sub_64FA70(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v1 = this; *this = &AbStateInfectee::`vftable'; sub_64F980(this, 0); v2 = v1 + 2; v1[2] = &NiTPointerListBase,AbStateInst *>::`vftable'; v3 = (_DWORD *)v1[3]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,AbStateInst *>::`vftable'; } // 9F2DF0: using guessed type void *NiTListBase,AbStateInst *>::`vftable'; // 9F2E00: using guessed type void *NiTPointerListBase,AbStateInst *>::`vftable'; // 9F2E20: using guessed type void *AbStateInfectee::`vftable'; //----- (0064FB00) -------------------------------------------------------- int __thiscall sub_64FB00(_DWORD *this, int a2, int a3) { unsigned __int16 v3; // bx int v4; // esi _DWORD *v5; // edi int v6; // ecx int v7; // eax int v8; // eax int v9; // eax int result; // eax int v11; // esi _DWORD *v12; // ebx int v13; // edi int v14; // esi char v15; // cl char v16; // dl char v17; // al _DWORD *v18; // [esp+Ch] [ebp-4h] v3 = a2; v4 = dword_ACDA7C; v5 = this; v18 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, a2) ) { if ( v3 <= *(_WORD *)(v4 + 200) ) { v6 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v6 + 4 * v3) ) { v7 = *(_DWORD *)(v6 + 4 * v3); if ( v7 ) { if ( *(_DWORD *)(v7 + 34) == 289 ) { v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) sub_569950(*(_DWORD ***)(v8 + 572), 0); v9 = sub_6D3800(); if ( v9 ) *(_BYTE *)(v9 + 2748) = 0; } } } } } result = v5[3]; if ( result ) { while ( 1 ) { v11 = *(_DWORD *)(result + 8); a2 = result; result = *(_DWORD *)result; if ( *(_WORD *)(v11 + 20) == v3 ) break; if ( !result ) goto LABEL_15; } (*(void (__thiscall **)(_DWORD *, int, int))(*v5 + 4))(v5, v11, a3); sub_403620(v5 + 2, (_DWORD **)&a2); result = (**(int (__thiscall ***)(int, signed int))v11)(v11, 1); } LABEL_15: v12 = (_DWORD *)v5[3]; if ( v12 ) { while ( 1 ) { v13 = *(unsigned __int16 *)(v12[2] + 20); v14 = dword_ACDA80; v12 = (_DWORD *)*v12; result = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v13); if ( (_BYTE)result ) { if ( (unsigned __int16)v13 <= *(_WORD *)(v14 + 200) ) { result = *(_DWORD *)(v14 + 196) + 4 * v13; if ( *(_DWORD *)result ) { result = *(_DWORD *)result; if ( result ) { v15 = *(_BYTE *)(result + 326); v16 = *(_BYTE *)(result + 327); v17 = *(_BYTE *)(result + 328); a2 = 0; LOBYTE(a2) = v15; BYTE1(a2) = v16; BYTE2(a2) = v17; result = a2; if ( a2 ) break; } } } } if ( !v12 ) { v5 = v18; goto LABEL_23; } } v18[14] = a2; } else { LABEL_23: v5[14] = 0; } return result; } // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; //----- (0064FC60) -------------------------------------------------------- _DWORD *__thiscall sub_64FC60(_DWORD *this) { _DWORD *result; // eax result = this; *this = &AbStateInfectee::`vftable'; this[5] = 0; this[3] = 0; this[4] = 0; this[2] = &NiTList::`vftable'; *((float *)this + 1) = -1.0; this[7] = 0; this[6] = 0; this[8] = 0; this[9] = 1; this[10] = 1; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; return result; } // 9F2E10: using guessed type void *NiTList::`vftable'; // 9F2E20: using guessed type void *AbStateInfectee::`vftable'; //----- (0064FCB0) -------------------------------------------------------- char __thiscall sub_64FCB0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // edi int v5; // esi int v6; // eax int v7; // ecx int v8; // eax v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = *(unsigned __int16 *)(v3 + 20); v5 = dword_ACDA7C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v7 = *(_DWORD *)(v5 + 196); v6 = *(_DWORD *)(v7 + 4 * v4) ? *(_DWORD *)(v7 + 4 * v4) : 0; } else { v6 = 0; } } else { v6 = 0; } v8 = sub_4DCF40((const char *)(v6 + 212)); if ( v8 ) { if ( a2 == *(_DWORD *)(v8 + 47) || a2 == *(_DWORD *)(v8 + 55) || a2 == *(_DWORD *)(v8 + 63) || a2 == *(_DWORD *)(v8 + 71) ) { break; } } } if ( !v2 ) return 0; } return 1; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (0064FD50) -------------------------------------------------------- int *__thiscall sub_64FD50(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // edi _DWORD *v5; // ebx int *result; // eax int v7; // esi int v8; // ecx v3 = dword_ACDA7C; v4 = *(unsigned __int16 *)(a2 + 20); v5 = this; result = (int *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4); if ( (_BYTE)result ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { result = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *result ) { v7 = *result; if ( *result ) { (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD, signed int))(*v5 + 8))(v5, *(_DWORD *)(v7 + 34), 0, 1); result = (int *)(v7 + 212); if ( *(_BYTE *)(v7 + 212) != 45 ) { result = (int *)sub_4DCF40((const char *)(v7 + 212)); if ( result ) { if ( *(int *)((char *)result + 47) == 19 || *(int *)((char *)result + 55) == 19 || *(int *)((char *)result + 63) == 19 || *(int *)((char *)result + 71) == 19 || (v8 = *(int *)((char *)result + 38), v8 == 67) || v8 == 68 ) { ++v5[6]; } if ( *(int *)((char *)result + 47) == 25 || *(int *)((char *)result + 55) == 25 || *(int *)((char *)result + 63) == 25 || *(int *)((char *)result + 71) == 25 || *(int *)((char *)result + 38) == 67 ) { ++v5[7]; } if ( *(int *)((char *)result + 47) == 38 || *(int *)((char *)result + 55) == 38 || *(int *)((char *)result + 63) == 38 || *(int *)((char *)result + 71) == 38 ) { ++v5[8]; } } } } } } } return result; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (0064FE50) -------------------------------------------------------- int *__thiscall sub_64FE50(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // edi _DWORD *v5; // ebx int *result; // eax int v7; // esi int v8; // ecx v3 = dword_ACDA7C; v4 = *(unsigned __int16 *)(a2 + 20); v5 = this; result = (int *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4); if ( (_BYTE)result ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { result = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *result ) { v7 = *result; if ( *result ) { (*(void (__thiscall **)(_DWORD *, _DWORD, signed int, signed int))(*v5 + 8))(v5, *(_DWORD *)(v7 + 34), 1, -1); result = (int *)(v7 + 212); if ( *(_BYTE *)(v7 + 212) != 45 ) { result = (int *)sub_4DCF40((const char *)(v7 + 212)); if ( result ) { if ( *(int *)((char *)result + 47) == 19 || *(int *)((char *)result + 55) == 19 || *(int *)((char *)result + 63) == 19 || *(int *)((char *)result + 71) == 19 || (v8 = *(int *)((char *)result + 38), v8 == 67) || v8 == 68 ) { --v5[6]; } if ( *(int *)((char *)result + 47) == 25 || *(int *)((char *)result + 55) == 25 || *(int *)((char *)result + 63) == 25 || *(int *)((char *)result + 71) == 25 || *(int *)((char *)result + 38) == 67 ) { --v5[7]; } if ( *(int *)((char *)result + 47) == 38 || *(int *)((char *)result + 55) == 38 || *(int *)((char *)result + 63) == 38 || *(int *)((char *)result + 71) == 38 ) { --v5[8]; } } } } } } } return result; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (0064FF40) -------------------------------------------------------- int __thiscall sub_64FF40(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax int v5; // edi int v6; // ecx int v7; // eax const char *v8; // esi int v9; // eax int v11; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = dword_ACDA7C; v4 = v2[2]; v5 = *(unsigned __int16 *)(v4 + 20); v2 = (_DWORD *)*v2; v11 = v4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v3 + 200) ) { v6 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = *(_DWORD *)(v6 + 4 * v5); if ( v7 ) { v8 = (const char *)(v7 + 212); if ( strcmp((const char *)(v7 + 212), "-") ) { v9 = sub_4DCF40(v8); if ( v9 ) { if ( *(_DWORD *)(v9 + 38) == a2 ) break; } } } } } } if ( !v2 ) return 0; } return v11; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (00650000) -------------------------------------------------------- char __thiscall sub_650000(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax int v7; // eax v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = dword_ACDA7C; v4 = *(unsigned __int16 *)(v2[2] + 20); v2 = (_DWORD *)*v2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *v5 ) { v6 = *v5; if ( v6 ) { v7 = sub_4DCF40((const char *)(v6 + 212)); if ( v7 ) { if ( *(_BYTE *)(v7 + 2) != 45 && *(_DWORD *)(v7 + 38) == a2 ) break; } } } } } if ( !v2 ) return 0; } return 1; } // ACDA7C: using guessed type int dword_ACDA7C; //----- (00650090) -------------------------------------------------------- char __thiscall sub_650090(_DWORD *this, int a2, float a3, int a4) { int v4; // ebx int v5; // esi unsigned __int8 (__thiscall *v6)(int, int); // edx int v7; // edi int v8; // eax int v9; // edi int v10; // esi int v11; // ecx _DWORD *v12; // eax int v13; // esi _DWORD *v14; // eax int v15; // esi int v16; // eax int v17; // eax _DWORD *v19; // [esp+Ch] [ebp-8h] int v20; // [esp+10h] [ebp-4h] int v21; // [esp+1Ch] [ebp+8h] int v22; // [esp+20h] [ebp+Ch] v4 = a2; v5 = dword_ACDA7C; v6 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16); v19 = this; v7 = 0; v20 = 0; if ( !v6(dword_ACDA7C, a2) ) { v21 = 0; goto LABEL_14; } if ( (unsigned __int16)a2 > *(_WORD *)(v5 + 200) ) { v21 = 0; goto LABEL_14; } v8 = *(_DWORD *)(v5 + 196); v9 = 4 * (unsigned __int16)a2; if ( *(_DWORD *)(v8 + v9) ) { v21 = *(_DWORD *)(v8 + v9); if ( v21 ) { v10 = dword_ACDA80; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v10 + 200) ) { v11 = *(_DWORD *)(v10 + 196); if ( *(_DWORD *)(v9 + v11) ) { v7 = *(_DWORD *)(v9 + v11); goto LABEL_14; } } } v20 = 0; } } else { v21 = 0; } v7 = v20; LABEL_14: v12 = (_DWORD *)v19[3]; if ( v12 ) { while ( 1 ) { v13 = v12[2]; v12 = (_DWORD *)*v12; if ( *(_WORD *)(v13 + 20) == (_WORD)v4 ) break; if ( !v12 ) goto LABEL_17; } *(float *)(v13 + 36) = a3; if ( v7 && *(_BYTE *)(v7 + 397) == 1 ) { (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v19 + 4))(v19, v13, 0); (*(void (__thiscall **)(_DWORD *, int, int))*v19)(v19, v13, a4); return 1; } } else { LABEL_17: v14 = operator new(0x74u); v15 = 0; if ( v14 ) { v14[4] = 0; v14[2] = 0; v14[3] = 0; v14[1] = &NiTList::`vftable'; v14[10] = 0; v14[11] = 0; *v14 = &AbStateInst::`vftable'; v15 = (int)v14; } *(_WORD *)(v15 + 20) = v4; *(float *)(v15 + 36) = a3; *(_DWORD *)(v15 + 40) = 0; *(_DWORD *)(v15 + 44) = 0; *(_BYTE *)(v15 + 48) = 0; v20 = v15; *(_DWORD *)(v15 + 112) = 0; if ( v21 && *(_DWORD *)(v21 + 34) == 289 ) { v16 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v16 ) sub_569950(*(_DWORD ***)(v16 + 572), 1); v17 = sub_6D3800(); if ( v17 ) *(_BYTE *)(v17 + 2748) = 1; } (*(void (__thiscall **)(_DWORD *, int, int))*v19)(v19, v15, a4); if ( v7 ) { v22 = *(unsigned __int8 *)(v7 + 326); *(_WORD *)((char *)&v22 + 1) = *(_WORD *)(v7 + 327); if ( v22 ) v19[14] = v22; if ( !strcmp((const char *)(v7 + 506), "BUFF") ) { sub_650410(v19 + 2, &v20); return 1; } if ( !strcmp((const char *)(v7 + 506), "DEBUFF") ) sub_6B9900(v19 + 2, &v20); } } return 1; } // 9F0C6C: using guessed type void *NiTList::`vftable'; // 9F2E44: using guessed type void *AbStateInst::`vftable'; // ACDA7C: using guessed type int dword_ACDA7C; // ACDA80: using guessed type int dword_ACDA80; //----- (00650300) -------------------------------------------------------- char **__thiscall sub_650300(_DWORD *this, int a2) { char **result; // eax int v3; // ebx int v4; // edi int v5; // esi int v6; // edx char *v7; // esi int v8; // ecx int v9; // [esp+0h] [ebp-4h] char *v10; // [esp+Ch] [ebp+8h] v9 = (int)this; result = (char **)this[3]; if ( result ) { v3 = a2; while ( 1 ) { v10 = *result; result = (char **)result[2]; if ( result ) { v4 = *((unsigned __int16 *)result + 10); v5 = dword_ACDA80; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = *(_DWORD *)(v5 + 196); result = (char **)(*(_DWORD *)(v6 + 4 * v4) ? *(_DWORD *)(v6 + 4 * v4) : 0); } else { result = 0; } } else { result = 0; } v9 = (int)result; if ( result ) { if ( *((_BYTE *)result + 329) != 45 ) { v7 = *(char **)v3; result = sub_67ADC0(*(char **)v3, *(_DWORD *)(*(_DWORD *)v3 + 4), (int)&v9); v8 = *(_DWORD *)(v3 + 4); if ( (unsigned int)(1073741822 - v8) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v3 + 4) = v8 + 1; *((_DWORD *)v7 + 1) = result; *(_DWORD *)result[1] = result; } } } if ( !v10 ) break; result = (char **)v10; } } return result; } // ACDA80: using guessed type int dword_ACDA80; //----- (006503E0) -------------------------------------------------------- void *__thiscall sub_6503E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,AbStateInst *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F2DF0: using guessed type void *NiTListBase,AbStateInst *>::`vftable'; //----- (00650410) -------------------------------------------------------- _DWORD *__thiscall sub_650410(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *result; // eax int v4; // ecx v2 = this; result = (_DWORD *)(*(int (**)(void))(*this + 4))(); result[2] = *a2; result[1] = 0; *result = v2[1]; v4 = v2[1]; if ( v4 ) { *(_DWORD *)(v4 + 4) = result; ++v2[3]; } else { ++v2[3]; v2[2] = result; } v2[1] = result; return result; } //----- (00650460) -------------------------------------------------------- int __thiscall sub_650460(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,AbStateInst *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,AbStateInst *>::`vftable'; return result; } // 9F2DF0: using guessed type void *NiTListBase,AbStateInst *>::`vftable'; // 9F2E00: using guessed type void *NiTPointerListBase,AbStateInst *>::`vftable'; //----- (006504E0) -------------------------------------------------------- _DWORD *__thiscall sub_6504E0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,AbStateInst *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,AbStateInst *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F2DF0: using guessed type void *NiTListBase,AbStateInst *>::`vftable'; // 9F2E00: using guessed type void *NiTPointerListBase,AbStateInst *>::`vftable'; //----- (00650570) -------------------------------------------------------- void *__thiscall sub_650570(void *this, char a2) { void *v2; // esi v2 = this; sub_64FA70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006505A0) -------------------------------------------------------- void *__thiscall sub_6505A0(void *this, char a2) { void *v2; // esi v2 = this; sub_62FCC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00650610) -------------------------------------------------------- void __cdecl sub_650610(float a1) { flt_AD8BFC = a1; } // AD8BFC: using guessed type float flt_AD8BFC; //----- (00650620) -------------------------------------------------------- void __cdecl sub_650620(float a1) { flt_AD8C00 = a1; } // AD8C00: using guessed type float flt_AD8C00; //----- (00650630) -------------------------------------------------------- double sub_650630() { return flt_AD8BFC; } // AD8BFC: using guessed type float flt_AD8BFC; //----- (00650650) -------------------------------------------------------- signed int __thiscall sub_650650(void *this, unsigned __int8 *a2, const void *a3) { int v3; // esi signed int result; // eax v3 = (int)this; if ( a2 ) sub_673CC0((int)this + 776, a2); result = (signed int)a3; if ( a3 ) result = sub_673110(v3 + 776, a3); return result; } //----- (006506B0) -------------------------------------------------------- signed int __stdcall sub_6506B0(int a1) { return -1; } //----- (006506C0) -------------------------------------------------------- int __thiscall sub_6506C0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int result; // eax v1 = this; v2 = sub_65B8B0(this, 0, 0, 0); if ( (*(int (__thiscall **)(_DWORD *))(*v1 + 440))(v1) == 4 ) result = sub_65D700(v1, v1[467]); else result = sub_65D700(v1, v2); return result; } //----- (00650700) -------------------------------------------------------- double sub_650700() { return 1.0; } //----- (00650710) -------------------------------------------------------- char __thiscall sub_650710(void *this) { return sub_674C60((int)this + 776); } //----- (00650720) -------------------------------------------------------- char __thiscall sub_650720(void *this) { return sub_674C60((int)this + 776); } //----- (00650730) -------------------------------------------------------- int __thiscall sub_650730(void *this) { return (*(int (__stdcall **)(signed int, _DWORD))(*(_DWORD *)this + 600))(1, 0); } //----- (00650740) -------------------------------------------------------- int __thiscall sub_650740(_DWORD *this) { return this[476]; } //----- (00650750) -------------------------------------------------------- int __thiscall sub_650750(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; (*(void (**)(void))(*this + 424))(); result = a2; v2[476] = a2; return result; } //----- (00650770) -------------------------------------------------------- bool __userpurge sub_650770@(_DWORD *a1@, double a2@, char a3, float a4) { int v4; // edx bool result; // al v4 = a1[476]; if ( !v4 || v4 == 4 ) goto LABEL_12; if ( a3 ) { a2 = a4; if ( a4 >= 0.0 ) return (*(unsigned __int8 (__stdcall **)(_DWORD))(*a1 + 428))(LODWORD(a4)) != 0; } if ( v4 != 2 && ((*(void (**)(void))(*a1 + 416))(), a2 >= 0.0) ) result = 1; else LABEL_12: result = 0; return result; } //----- (006507E0) -------------------------------------------------------- char *__thiscall sub_6507E0(__int16 *this) { return sub_664AB0(dword_AD8C90, this[1240]); } //----- (00650810) -------------------------------------------------------- signed int __thiscall sub_650810(void *this) { signed int result; // eax switch ( sub_673720((int)this + 776) ) { case 10: case 50: result = 2; break; case 20: case 30: case 40: case 60: case 70: case 80: result = 3; break; case 90: result = 4; break; default: result = 6; break; } return result; } //----- (006508C0) -------------------------------------------------------- char __thiscall sub_6508C0(_BYTE *this) { return this[1483]; } //----- (006508D0) -------------------------------------------------------- int __thiscall sub_6508D0(char *this) { return (int)(this - 84); } //----- (006508E0) -------------------------------------------------------- void __thiscall sub_6508E0(float *this, float a2) { this[351] = a2; } //----- (006508F0) -------------------------------------------------------- __int16 __thiscall sub_6508F0(_WORD *this) { return this[27]; } //----- (00650900) -------------------------------------------------------- int __thiscall sub_650900(void *this) { return sub_673680((int)this + 776); } //----- (00650910) -------------------------------------------------------- int __thiscall sub_650910(char *this, int a2) { return sprintf(this + 209, "%s", a2); } //----- (00650930) -------------------------------------------------------- bool __thiscall sub_650930(int this, _DWORD *a2, _DWORD *a3) { *a2 = *(_DWORD *)(this + 2500); *a3 = *(_DWORD *)(this + 2504); return *(_BYTE *)(this + 2508) != 0; } //----- (00650960) -------------------------------------------------------- char __thiscall sub_650960(int this, int a2, int a3, char a4) { char result; // al *(_DWORD *)(this + 2500) = a2; result = a4; *(_DWORD *)(this + 2504) = a3; *(_BYTE *)(this + 2508) = a4; return result; } //----- (00650990) -------------------------------------------------------- void __thiscall sub_650990(_BYTE *this) { this[2508] = 0; } //----- (006509A0) -------------------------------------------------------- signed int __thiscall sub_6509A0(int this) { int v1; // esi signed int result; // eax unsigned __int16 v3; // ax unsigned __int16 v4; // ax v1 = this; result = 0xFFFF; if ( *(_WORD *)(this + 520) != -1 ) { if ( *(_BYTE *)(this + 486) ) sub_679B00((_DWORD *)(this + 776), 10); if ( *(_BYTE *)(v1 + 487) ) sub_679B00((_DWORD *)(v1 + 776), 12); if ( *(_BYTE *)(v1 + 488) ) sub_679B00((_DWORD *)(v1 + 776), 11); if ( *(_BYTE *)(v1 + 489) ) sub_679B00((_DWORD *)(v1 + 776), 13); if ( *(_BYTE *)(v1 + 490) ) sub_679B00((_DWORD *)(v1 + 776), 29); if ( *(_DWORD *)(v1 + 492) == 1 ) { v3 = *(_WORD *)(v1 + 472); if ( v3 != -1 ) { sub_673190((void *)(v1 + 776), v3, *(_BYTE *)(v1 + 474)); *(_WORD *)(v1 + 472) = -1; } v4 = *(_WORD *)(v1 + 476); if ( v4 != -1 ) { sub_673190((void *)(v1 + 776), v4, *(_BYTE *)(v1 + 478)); *(_WORD *)(v1 + 476) = -1; } if ( *(_WORD *)(v1 + 480) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 480)); *(_WORD *)(v1 + 480) = -1; } if ( *(_WORD *)(v1 + 482) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 482)); *(_WORD *)(v1 + 482) = -1; } if ( *(_WORD *)(v1 + 484) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 484)); *(_WORD *)(v1 + 484) = -1; } } result = 0xFFFF; *(_WORD *)(v1 + 520) = -1; } return result; } //----- (00650B20) -------------------------------------------------------- bool __thiscall sub_650B20(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax bool result; // al v1 = this; result = 0; if ( (*(unsigned __int8 (**)(void))(*this + 32))() ) { v2 = v1[678]; if ( v2 ) { v3 = *(_DWORD *)(v2 + 99); if ( v3 == 8 || v3 == 10 || v3 == 9 || v3 == 22 || v3 == 21 ) result = 1; } } return result; } //----- (00650B60) -------------------------------------------------------- _WORD *__thiscall sub_650B60(_WORD *this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, __int16 a9, char a10) { _WORD *result; // eax _WORD *v11; // edi char v12; // cl result = this; HIBYTE(a9) = 0; qmemcpy(this + 89, &a2, 0x1Cu); v11 = this + 103; v12 = a10; *v11 = a9; *((_BYTE *)result + 208) = v12; return result; } //----- (00650B90) -------------------------------------------------------- char __thiscall sub_650B90(_BYTE *this, char a2) { char result; // al result = a2; this[465] = a2; return result; } //----- (00650BA0) -------------------------------------------------------- int __thiscall sub_650BA0(char *this, unsigned __int16 a2, unsigned int a3) { char *v3; // esi unsigned int v4; // ecx unsigned int v5; // edi bool v6; // zf int result; // eax v3 = this; v4 = *((_DWORD *)this + 39); if ( v4 == -65536 ) { v5 = a3; *((_DWORD *)v3 + 39) = a2; v6 = v3 == dword_AD8EBC; goto LABEL_10; } if ( v4 > 0xEA60 && a2 < 0x2710u ) { v5 = a3; *((_DWORD *)v3 + 39) = a2; v6 = v3 == dword_AD8EBC; goto LABEL_10; } result = a2; if ( a2 > v4 || (++*((_DWORD *)v3 + 40), *((_DWORD *)v3 + 40) > 4u) ) { v5 = a3; *((_DWORD *)v3 + 39) = a2; if ( v3 != dword_AD8EBC ) { LABEL_12: result = (*(int (__thiscall **)(char *, unsigned int))(*(_DWORD *)v3 + 128))(v3, v5); goto LABEL_13; } v6 = sub_65B9D0(v3, 500000) == 0; LABEL_10: if ( v6 ) sub_680C20((int)byte_AD9238, v5); goto LABEL_12; } LABEL_13: *((_DWORD *)v3 + 40) = 0; return result; } //----- (00650C60) -------------------------------------------------------- void __thiscall sub_650C60(_DWORD *this) { this[39] = -65536; } //----- (00650CC0) -------------------------------------------------------- char __thiscall sub_650CC0(_BYTE *this) { return sub_672F50(this + 776); } //----- (00650CD0) -------------------------------------------------------- char __thiscall sub_650CD0(_BYTE *this, char a2) { return sub_672F60(this + 776, a2); } //----- (00650CF0) -------------------------------------------------------- int __thiscall sub_650CF0(_DWORD *this) { return this[678]; } //----- (00650D00) -------------------------------------------------------- int __thiscall sub_650D00(_DWORD *this, unsigned __int16 a2, int a3) { _DWORD *v3; // esi unsigned int v4; // ecx int v5; // eax int (__thiscall *v6)(_DWORD *, int); // edx int result; // eax v3 = this; v4 = this[41]; if ( v4 == -65536 ) { v5 = a2; LABEL_3: v6 = *(int (__thiscall **)(_DWORD *, int))(*v3 + 176); v3[41] = v5; result = v6(v3, a3); v3[42] = 0; return result; } if ( v4 > 0xEA60 && a2 < 0x2710u ) { v5 = a2; goto LABEL_3; } result = a2; if ( a2 > v4 || (++v3[42], v3[40] > 4u) ) { v3[41] = a2; result = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 176))(v3, a3); } v3[42] = 0; return result; } //----- (00650DB0) -------------------------------------------------------- char __thiscall sub_650DB0(char *this, int a2) { char *v2; // esi int v3; // eax v2 = this; LOBYTE(v3) = sub_65B9D0(this, 500000); if ( !(_BYTE)v3 ) { if ( v2 == dword_AD8EBC ) v3 = sub_680CC0((int)byte_AD9238); else v3 = (*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 100))(v2); if ( a2 && (a2 != v3 || *((_DWORD *)v2 + 158) != v3) ) { v3 = *((_DWORD *)v2 + 158); if ( v3 != a2 ) { *((_DWORD *)v2 + 159) = v3; *((_DWORD *)v2 + 158) = a2; } } else { *((_DWORD *)v2 + 159) = a2; *((_DWORD *)v2 + 158) = a2; } } return v3; } //----- (00650E20) -------------------------------------------------------- bool __thiscall sub_650E20(float *this) { return 0.0 != this[117]; } //----- (00650E40) -------------------------------------------------------- char __thiscall sub_650E40(_BYTE *this, char a2) { char result; // al result = a2; this[2742] = a2; return result; } //----- (00650E50) -------------------------------------------------------- double __thiscall sub_650E50(float *this, float a2) { float v2; // ST00_4 double v3; // st7 double v4; // st6 double result; // st7 float v6; // [esp+Ch] [ebp+8h] float v7; // [esp+Ch] [ebp+8h] v2 = this[723] / this[722]; v3 = v2; v4 = a2; if ( a2 >= v3 + v3 ) return 0.0; if ( v4 >= v3 ) { if ( v4 <= v3 ) v7 = v3 * (this[722] * 0.5 * v3); else v7 = v3 * (v3 * (this[722] * 0.5)) - (v3 - v4) * (this[722] * 0.5 * (v3 - v4)); result = v7; } else { v6 = v4 * this[723] - a2 * (this[722] * 0.5 * a2); result = v6; } return result; } //----- (00650F10) -------------------------------------------------------- double __stdcall sub_650F10(unsigned __int16 *a1) { int v1; // edi int v2; // esi int *v3; // eax int v4; // eax if ( !a1 ) return 50.0; if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a1 + 32))(a1) ) return 50.0; v1 = a1[471]; v2 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v1) ) return 50.0; if ( (unsigned __int16)v1 > *(_WORD *)(v2 + 200) ) return 50.0; v3 = (int *)(*(_DWORD *)(v2 + 196) + 4 * v1); if ( !*v3 ) return 50.0; v4 = *v3; if ( !v4 ) return 50.0; return (float)((double)*(unsigned int *)(v4 + 104) * 50.0 / 1000.0); } // ACDA48: using guessed type int dword_ACDA48; //----- (00650FA0) -------------------------------------------------------- double __stdcall sub_650FA0(unsigned __int16 *a1, int a2) { int v2; // esi int *v3; // eax int v4; // edi int v5; // eax v2 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) return 50.0; if ( (unsigned __int16)a2 > *(_WORD *)(v2 + 200) ) return 50.0; v3 = (int *)(*(_DWORD *)(v2 + 196) + 4 * (unsigned __int16)a2); if ( !*v3 ) return 50.0; v4 = *v3; if ( !*v3 ) return 50.0; if ( a1 ) { if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a1 + 32))(a1) ) return (float)((double)*(unsigned int *)(v4 + 180) + 50.0); v5 = sub_49F370(a1[471]); if ( v5 ) return (float)((double)*(unsigned int *)(v5 + 104) * 50.0 / 1000.0 + (double)*(unsigned int *)(v4 + 180)); } return (double)*(unsigned int *)(v4 + 180); } // ACE8D0: using guessed type int dword_ACE8D0; //----- (006510B0) -------------------------------------------------------- char __thiscall sub_6510B0(int this) { char result; // al result = 1; if ( !*(_BYTE *)(this + 1922) ) { if ( *(_BYTE *)(*(_DWORD *)(this + 700) + 28) & 1 ) result = 0; } return result; } //----- (006510D0) -------------------------------------------------------- void __thiscall sub_6510D0(char *this, float a2) { char *v2; // ebx int *v3; // eax char v4; // [esp+Ch] [ebp-24h] v2 = this; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)this + 48))() ) { sub_8CF810((int)(v2 + 1516), a2); if ( (*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 440))(v2) != 4 ) { v3 = (int *)sub_8E48E0(v2 + 1516); if ( sub_443200(v3, (float *)&v4) ) qmemcpy((void *)(*((_DWORD *)v2 + 175) + 52), &v4, 0x24u); qmemcpy((void *)(*((_DWORD *)v2 + 175) + 52), &v4, 0x24u); } sub_6FDD70(*((_DWORD **)v2 + 676), a2); } } //----- (006511D0) -------------------------------------------------------- bool __thiscall sub_6511D0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax bool result; // al v2 = this; v3 = sub_65B8B0(this, 0, 0, 0); if ( (*(int (__thiscall **)(_DWORD *))(*v2 + 440))(v2) == 4 ) v4 = sub_65D700(v2, v2[467]); else v4 = sub_65D700(v2, v3); if ( v4 ) result = a2 == *(_DWORD *)(v4 + 68); else result = 0; return result; } //----- (00651220) -------------------------------------------------------- bool __thiscall sub_651220(int this, int a2) { int v2; // esi bool result; // al v2 = this; switch ( a2 ) { case 1: case 5: if ( *(_BYTE *)(this + 2680) != 1 || (sub_6C10B0(&dword_B9DC70, *(unsigned __int16 *)(this + 548)) || !dword_B9DCC4) && (!sub_6C10B0(&dword_B9DC70, *(unsigned __int16 *)(v2 + 548)) || dword_B9DCC4) && *(_WORD *)(v2 + 548) != *((_WORD *)dword_AD8EBC + 274) ) { goto LABEL_12; } result = 0; break; case 2: case 6: if ( sub_6C10B0(&dword_B9DC70, *(unsigned __int16 *)(this + 548)) && dword_B9DCC4 ) goto LABEL_12; result = *(_WORD *)(v2 + 548) == *((_WORD *)dword_AD8EBC + 274); break; default: LABEL_12: result = 1; break; } return result; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00651300) -------------------------------------------------------- int __stdcall sub_651300(int a1, int a2, float a3) { unsigned int v3; // ebx int v4; // ecx double v5; // st7 double v6; // st4 int v8; // [esp+18h] [ebp+Ch] v3 = a2; v4 = 0; if ( !a2 ) return 0; v5 = a3; while ( 1 ) { if ( strlen(*(const char **)(a1 + 8 * v4 + 4)) == 2 ) { v6 = *(float *)(a1 + 8 * v4) >= v5 ? *(float *)(a1 + 8 * v4) - v5 : v5 - *(float *)(a1 + 8 * v4); *(float *)&v8 = v6; if ( *(float *)&v8 >= 0.0 && *(float *)&v8 <= 0.00009999999747378752 ) break; } if ( ++v4 >= v3 ) return 0; } return atoi(*(const char **)(a1 + 8 * v4 + 4)); } //----- (006513A0) -------------------------------------------------------- void __thiscall sub_6513A0(_BYTE *this, int a2) { _BYTE *v2; // esi int v3; // eax unsigned __int8 v4; // al unsigned __int8 *v5; // eax int v6; // edx int v7; // eax char v8; // [esp+4h] [ebp-Ch] float v9; // [esp+18h] [ebp+8h] v2 = this; if ( a2 ) { v8 = *(_BYTE *)(a2 + 31); if ( *(_BYTE *)(a2 + 31) == 4 ) { sub_443390(this, 4); v7 = *(_DWORD *)v2; v2[1925] = 1; *((_WORD *)v2 + 88) = *(_WORD *)(a2 + 37); (*(void (__thiscall **)(_BYTE *, int))(v7 + 56))(v2, a2); } else if ( *(_BYTE *)(a2 + 31) == 5 ) { sub_443390(this, v8); v6 = *(_DWORD *)v2; v2[1925] = 1; *((_WORD *)v2 + 88) = *(_WORD *)(a2 + 37); (*(void (__thiscall **)(_BYTE *, int))(v6 + 56))(v2, a2); v2[208] = *(_BYTE *)(a2 + 49) != 0; } else { sub_443390(this, v8); v3 = *((_DWORD *)v2 + 175); v2[1925] = 1; *(_WORD *)(v3 + 28) |= 1u; v4 = *(_BYTE *)(a2 + 84); if ( v4 != -1 ) { v5 = (unsigned __int8 *)sub_4B0DC0(v4); if ( v5 ) { (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v2 + 456))(v2, *v5); v9 = (double)*(unsigned __int16 *)(a2 + 85) / 1000.0; (*(void (__thiscall **)(_BYTE *, signed int, _DWORD))(*(_DWORD *)v2 + 464))(v2, 1, LODWORD(v9)); } } } } } //----- (006514A0) -------------------------------------------------------- void __thiscall sub_6514A0(float *this) { float *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = *((_DWORD *)this + 175); if ( v2 ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); if ( v3 ) { while ( (char *)v3 != dword_BA6660 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) { v1[136] = 0.0; return; } } sub_8D9300(*((_DWORD **)v1 + 175), v1[373], 0); } } v1[136] = 0.0; } //----- (00651500) -------------------------------------------------------- void __thiscall sub_651500(float *this) { float *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = *((_DWORD *)this + 175); if ( v2 ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); if ( v3 ) { while ( (char *)v3 != dword_BA6660 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) { v1[136] = 0.0; return; } } sub_8D9300(*((_DWORD **)v1 + 175), v1[373], 1); } } v1[136] = 0.0; } //----- (00651560) -------------------------------------------------------- bool __thiscall sub_651560(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = this[175]; if ( !v2 ) return 0; v3 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); if ( !v3 ) return 0; while ( (char *)v3 != dword_BA6660 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return *(_DWORD *)(v1[175] + 356) != 0; } //----- (006515E0) -------------------------------------------------------- bool __thiscall sub_6515E0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax v1 = this; v2 = this[175]; if ( !v2 ) return 0; v3 = (*(int (**)(void))(*(_DWORD *)v2 + 4))(); if ( !v3 ) return 0; while ( (char *)v3 != dword_BA6660 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return *(_DWORD *)(v1[175] + 356) == 2; } //----- (00651660) -------------------------------------------------------- bool __thiscall sub_651660(_BYTE *this) { bool result; // al char v2; // al if ( this[2680] || (v2 = this[1924], v2 == 4) ) result = 0; else result = v2 != 5; return result; } //----- (00651680) -------------------------------------------------------- bool __thiscall sub_651680(int this) { char v2; // al int v3; // ecx if ( *(_BYTE *)(this + 1936) == 4 ) return 1; if ( *(_BYTE *)(this + 2680) ) return 0; v2 = *(_BYTE *)(this + 1924); if ( v2 == 4 ) return 0; if ( v2 == 5 ) return 0; v3 = *(_DWORD *)(this + 2712); if ( !v3 ) return 0; return *(_BYTE *)(v3 + 82) != 0; } //----- (006516C0) -------------------------------------------------------- bool __thiscall sub_6516C0(_BYTE *this) { _BYTE *v1; // esi char v2; // al int v3; // eax int v4; // esi bool result; // al v1 = this; result = 0; if ( this[1936] == 4 || !this[2680] && (v2 = this[1924], v2 != 4) && v2 != 5 && (v3 = *((_DWORD *)this + 678)) != 0 && *(_BYTE *)(v3 + 82) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 32))() ) { v4 = *((_DWORD *)v1 + 679); if ( v4 ) { if ( *(_DWORD *)(v4 + 170) == 5 ) result = 1; } } } return result; } //----- (00651720) -------------------------------------------------------- signed int __thiscall sub_651720(_DWORD *this) { _DWORD *v1; // esi int v2; // eax signed int result; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*this + 32))() && (v2 = v1[678]) != 0 ) result = *(_DWORD *)(v2 + 66); else result = 1; return result; } //----- (00651750) -------------------------------------------------------- void __thiscall sub_651750(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax v2 = this; if ( this[174] ) { v3 = (*(int (__stdcall **)(signed int, signed int))(*this + 484))(200000, 1000); v4 = sub_65D700(v2, v3 + 201000); if ( v4 ) *(float *)(v4 + 40) = a2; } } //----- (00651790) -------------------------------------------------------- void __thiscall sub_651790(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax v2 = this; if ( this[174] ) { v3 = (*(int (__stdcall **)(signed int, signed int))(*this + 484))(200000, 2000); v4 = sub_65D700(v2, v3 + 202000); if ( v4 ) *(float *)(v4 + 40) = a2; } } //----- (006517D0) -------------------------------------------------------- signed int __thiscall sub_6517D0(_DWORD *this) { int v1; // edx signed int result; // eax if ( !this[476] || (v1 = this[174]) == 0 || (result = this[477], result != *(_DWORD *)(v1 + 64)) ) result = -1; return result; } //----- (00651800) -------------------------------------------------------- double __thiscall sub_651800(_DWORD *this) { int v1; // edx double result; // st7 int v3; // eax v1 = this[174]; if ( v1 && this[477] == *(_DWORD *)(v1 + 64) && this[476] == 2 && (v3 = sub_65D700(this, this[477])) != 0 ) result = *(float *)(v3 + 52); else result = -3.4028235e38; return result; } //----- (00651840) -------------------------------------------------------- signed int __thiscall sub_651840(_DWORD *this) { _DWORD *v1; // esi int v2; // esi signed int result; // eax int v4; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*this + 32))() ) { v2 = v1[678]; if ( v2 ) result = *(_DWORD *)(v2 + 87); else result = 1; } else { v4 = sub_673680((int)(v1 + 194)); if ( v4 ) result = *(_DWORD *)(v4 + 232); else result = 7; } return result; } //----- (00651890) -------------------------------------------------------- int __thiscall sub_651890(_DWORD *this) { return this[153]; } //----- (006518A0) -------------------------------------------------------- void __thiscall sub_6518A0(float *this, float a2) { float *v2; // edi int v3; // eax int v4; // eax v2 = this; if ( *((_DWORD *)this + 153) ) { v3 = sub_65B8B0((_DWORD *)this - 21, 0, 0, 0); v4 = sub_65D700((_DWORD *)v2 - 21, v3); if ( v4 ) *(float *)(v4 + 72) = a2 - v2[352]; } } //----- (006518E0) -------------------------------------------------------- void __thiscall sub_6518E0(__int16 *this) { sub_63DDD0(byte_AD8A08, this[274]); } //----- (00651900) -------------------------------------------------------- void __usercall sub_651900(int a1@, int a2@) { _DWORD *v2; // eax v2 = (_DWORD *)sub_63DA50(byte_AD8A08, *(_WORD *)(a1 + 548)); sub_63E080(byte_AD8A08, a2, v2); } //----- (00651920) -------------------------------------------------------- void *__thiscall sub_651920(_BYTE *this) { _BYTE *v1; // esi bool v2; // zf void *result; // eax v1 = this; v2 = sub_6516C0(this) == 0; result = v1 + 590; if ( v2 ) result = &unk_9F2E5F; return result; } //----- (00651940) -------------------------------------------------------- bool __thiscall sub_651940(_BYTE *this, const char *a2) { _BYTE *v2; // esi bool result; // al v2 = this; result = sub_6516C0(this); if ( result ) strcpy(v2 + 590, a2); return result; } //----- (00651970) -------------------------------------------------------- void __thiscall sub_651970(int this) { int v1; // esi unsigned __int16 v2; // ax int v3; // eax int v4; // edi int v5; // ebx int v6; // edi int v7; // edx int v8; // edi v1 = this; if ( *(_DWORD *)(this + 516) ) { if ( *(_BYTE *)(this + 510) ) sub_679B00((_DWORD *)(this + 776), 10); if ( *(_BYTE *)(v1 + 511) ) sub_679B00((_DWORD *)(v1 + 776), 12); if ( *(_BYTE *)(v1 + 512) ) sub_679B00((_DWORD *)(v1 + 776), 11); if ( *(_BYTE *)(v1 + 513) ) sub_679B00((_DWORD *)(v1 + 776), 13); if ( *(_BYTE *)(v1 + 514) ) sub_679B00((_DWORD *)(v1 + 776), 29); v2 = *(_WORD *)(v1 + 496); if ( v2 != -1 ) { sub_673190((void *)(v1 + 776), v2, *(_BYTE *)(v1 + 498)); *(_WORD *)(v1 + 496) = -1; sub_679A10(v1 + 776); } v3 = *(unsigned __int16 *)(v1 + 500); if ( (_WORD)v3 != -1 ) { v4 = dword_ACB230; v5 = *(unsigned __int16 *)(v1 + 500); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v7 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v7 + 4 * v5) ) v6 = *(_DWORD *)(v7 + 4 * v5); else v6 = 0; } else { v6 = 0; } } else { v6 = 0; } sub_673190((void *)(v1 + 776), *(_WORD *)(v1 + 500), *(_BYTE *)(v1 + 502)); *(_WORD *)(v1 + 500) = -1; v8 = *(_DWORD *)(v6 + 102) - 5; if ( v8 ) { if ( v8 == 2 ) sub_67A330(v1 + 776); } else { sub_679A10(v1 + 776); } } if ( *(_WORD *)(v1 + 504) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 504)); *(_WORD *)(v1 + 504) = -1; } if ( *(_WORD *)(v1 + 506) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 506)); *(_WORD *)(v1 + 506) = -1; } if ( *(_WORD *)(v1 + 508) != -1 ) { sub_679AA0((void *)(v1 + 776), *(unsigned __int16 *)(v1 + 508)); *(_WORD *)(v1 + 508) = -1; sub_67A330(v1 + 776); } *(_DWORD *)(v1 + 516) = 0; *(_WORD *)(v1 + 496) = -1; *(_BYTE *)(v1 + 498) = 0; *(_WORD *)(v1 + 500) = -1; *(_BYTE *)(v1 + 502) = 0; *(_DWORD *)(v1 + 504) = -1; *(_DWORD *)(v1 + 510) = 0; *(_WORD *)(v1 + 508) = -1; *(_BYTE *)(v1 + 514) = 0; } } // ACB230: using guessed type int dword_ACB230; //----- (00651BB0) -------------------------------------------------------- void __thiscall sub_651BB0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // [esp+4h] [ebp-8h] int v4; // [esp+8h] [ebp-4h] v1 = this; if ( this[174] && !(*(unsigned __int8 (**)(void))(*this + 488))() ) { sub_65B8B0(v1, 0, (unsigned int *)&v4, &v3); if ( v1[468] == -2 ) { v2 = (*(int (__thiscall **)(_DWORD *, int, int))(*v1 + 484))(v1, v4, v3); (*(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD))(*v1 + 328))(v1, v3 + v4 + v2, 0, 0); } } } //----- (00651C20) -------------------------------------------------------- char __thiscall sub_651C20(int this, int a2, char a3) { char result; // al result = a2; if ( *(_DWORD *)(*(_DWORD *)(this + 696) + 28) != a2 ) { *(float *)(this + 2684) = 0.0; *(_BYTE *)(this + 2690) = 2; *(_BYTE *)(this + 2688) = a3; result = sub_65D100((_DWORD *)this, a2); } return result; } //----- (00651C60) -------------------------------------------------------- char __thiscall sub_651C60(int this) { char v1; // al int v2; // eax int v4; // ecx char v5; // bl int v6; // eax if ( *(_BYTE *)(this + 1936) != 4 ) { if ( *(_BYTE *)(this + 2680) ) return 0; v1 = *(_BYTE *)(this + 1924); if ( v1 == 4 ) return 0; if ( v1 == 5 ) return 0; v2 = *(_DWORD *)(this + 2712); if ( !v2 || !*(_BYTE *)(v2 + 82) ) return 0; } v4 = *(_DWORD *)(this + 2716); v5 = 0; if ( v4 ) { v6 = *(unsigned __int16 *)(v4 + 174); if ( (_WORD)v6 ) { if ( sub_5C17B0(v6) ) v5 = 1; } } return v5; } //----- (00651CD0) -------------------------------------------------------- bool __thiscall sub_651CD0(_DWORD *this) { int v1; // eax int v2; // ecx int v3; // eax bool result; // al v1 = this[678]; result = 0; if ( v1 ) { v2 = this[679]; if ( v2 ) { if ( !*(_BYTE *)(v1 + 82) ) { v3 = *(unsigned __int16 *)(v2 + 174); if ( (_WORD)v3 ) { if ( sub_5C17B0(v3) ) result = 1; } } } } return result; } //----- (00651D10) -------------------------------------------------------- bool __thiscall sub_651D10(_DWORD *this) { int v1; // esi int v2; // edi bool result; // al int v4; // edx v1 = dword_ACDA78; v2 = *(unsigned __int16 *)(this[679] + 174); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA78 + 16))(dword_ACDA78, v2) && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200) && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) ) { result = *(_BYTE *)(*(_DWORD *)(v4 + 4 * v2) + 23) != 0; } else { result = MEMORY[0x17] != 0; } return result; } // ACDA78: using guessed type int dword_ACDA78; //----- (00651D70) -------------------------------------------------------- char __thiscall sub_651D70(_WORD *this, int a2) { _BYTE *v2; // esi int v3; // eax _WORD *v4; // edi char v5; // bl char v7; // cl char v8; // al char v9; // cl char v10; // dl char v11; // cl char v12; // al unsigned __int8 v13; // al __int16 v14; // si v2 = (_BYTE *)a2; v3 = *(_DWORD *)(a2 + 2); v4 = this; v5 = 64; if ( v3 == 5 ) return 64; v7 = 0; switch ( v3 ) { case 0: v5 = 1; break; case 1: v5 = 6; break; case 2: v5 = 11; break; case 3: v5 = 16; break; case 4: v7 = 1; break; case 6: v5 = 21; break; case 7: v5 = 26; break; default: break; } v8 = a2 & 0xFC; LOBYTE(a2) = a2 & 0xFC; if ( v7 ) { if ( dword_AD8EBC == (char *)-776 ) return 64; v13 = (v8 ^ 4 * dword_AD8EBC[944]) & 0x7C ^ v8; LOBYTE(a2) = v13; HIBYTE(a2) = dword_AD8EBC[941]; v5 = (v13 >> 2) & 0x1F; LOBYTE(a2) = v13 & 0x7F | (dword_AD8EBC[938] << 7); BYTE2(a2) = dword_AD8EBC[940]; v12 = dword_AD8EBC[939]; } else { v9 = v2[6]; HIBYTE(a2) = v2[8]; v10 = v2[10]; v11 = ((v8 ^ 4 * v5) & 0x7C ^ v8) & 0x7F | (v9 << 7); v12 = v2[9]; LOBYTE(a2) = v11; BYTE2(a2) = v10; } v14 = v4[471]; BYTE1(a2) = v12; sub_673CC0((int)(v4 + 388), (unsigned __int8 *)&a2); v4[471] = v14; return v5; } //----- (00651ED0) -------------------------------------------------------- void __thiscall sub_651ED0(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // edi int v3; // [esp+4h] [ebp-4h] v1 = this; sub_65B8B0(this, 0, (unsigned int *)&v3, 0); if ( v3 == 400000 || v3 == 500000 ) { sub_673A40((int)(v1 + 194), 17); *((_BYTE *)v1 + 2692) = 1; return; } v2 = timeGetTime(); if ( !*((_BYTE *)v1 + 2692) ) { if ( v1[674] ) { if ( v2 - v1[674] <= 500 * (rand() % 5 + 4) ) return; *((_BYTE *)v1 + 2692) = 1; sub_673A40((int)(v1 + 194), 17); } goto LABEL_11; } if ( *((_BYTE *)v1 + 2692) == 1 && v2 - v1[674] > 0x78 ) { *((_BYTE *)v1 + 2692) = 0; sub_673A40((int)(v1 + 194), 0); LABEL_11: v1[674] = timeGetTime(); } } //----- (00651F90) -------------------------------------------------------- char __thiscall sub_651F90(_DWORD *this, __int16 a2) { int v2; // edi int v3; // eax int v4; // eax int v5; // esi int v6; // edx int v7; // edx int v8; // eax int v9; // eax int v10; // ecx char *v12; // eax v2 = this[24]; if ( v2 ) { while ( 1 ) { v3 = *(_DWORD *)(v2 + 8); v2 = *(_DWORD *)(v2 + 4); if ( v3 ) { v4 = *(_DWORD *)(v3 + 24); if ( v4 ) break; } LABEL_9: if ( !v2 ) goto LABEL_10; } while ( 1 ) { v5 = *(_DWORD *)(v4 + 8); v4 = *(_DWORD *)(v4 + 4); if ( v5 ) { if ( *(_WORD *)(v5 + 8) == a2 ) { v6 = *(_DWORD *)(v5 + 4); if ( v6 < 0 ) return 0; if ( v6 & 0x4080FFFF ) break; } } if ( !v4 ) goto LABEL_9; } v12 = sub_664AB0(dword_AD8C90, *(_WORD *)(v5 + 8)); } else { LABEL_10: v7 = this[28]; if ( !v7 ) return 1; while ( 1 ) { v8 = *(_DWORD *)(v7 + 8); v7 = *(_DWORD *)(v7 + 4); if ( v8 ) { v9 = *(_DWORD *)(v8 + 12); if ( v9 ) break; } LABEL_18: if ( !v7 ) return 1; } while ( 1 ) { v5 = *(_DWORD *)(v9 + 8); v9 = *(_DWORD *)(v9 + 4); if ( v5 ) { if ( *(_WORD *)(v5 + 8) == a2 ) { v10 = *(_DWORD *)(v5 + 4); if ( v10 < 0 ) return 0; if ( v10 & 0x4080FFFF ) break; } } if ( !v9 ) goto LABEL_18; } v12 = sub_664AB0(dword_AD8C90, *(_WORD *)(v5 + 8)); } v12[2496] = 1; *(_DWORD *)(v5 + 4) |= 0x80000000; *(_DWORD *)(v5 + 12) = 0; return 0; } //----- (00652070) -------------------------------------------------------- char __thiscall sub_652070(_BYTE *this) { char result; // al result = this[2700]; if ( !result ) result = this[944]; return result; } //----- (00652090) -------------------------------------------------------- BOOL __thiscall sub_652090(int this) { return *(_BYTE *)(this + 2680) && *(_WORD *)(this + 942) != -1 && (*(_BYTE *)(this + 2700) || *(_BYTE *)(this + 944)); } //----- (006520D0) -------------------------------------------------------- int __thiscall sub_6520D0(_DWORD *this) { return this[175] + 88; } //----- (006520E0) -------------------------------------------------------- int __thiscall sub_6520E0(_DWORD *this) { return this[175] + 88; } //----- (006520F0) -------------------------------------------------------- void __thiscall sub_6520F0(float *this) { this[677] = flt_ACCFCC; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00652150) -------------------------------------------------------- int __thiscall sub_652150(_WORD *this, int a2) { _WORD *v2; // ebx int v3; // esi int v4; // eax int v5; // ecx int v6; // esi int result; // eax int v8; // edx v2 = this; this[471] = a2; v3 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)a2) ) v4 = *(_DWORD *)(v5 + 4 * (unsigned __int16)a2); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } *((_DWORD *)v2 + 678) = v4; v6 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a2) && (unsigned __int16)a2 <= *(_WORD *)(v6 + 200) && (v8 = *(_DWORD *)(v6 + 196), *(_DWORD *)(v8 + 4 * (unsigned __int16)a2)) ) { result = *(_DWORD *)(v8 + 4 * (unsigned __int16)a2); *((_DWORD *)v2 + 679) = result; } else { result = 0; *((_DWORD *)v2 + 679) = 0; } return result; } // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; //----- (00652200) -------------------------------------------------------- bool __thiscall sub_652200(_BYTE *this) { _BYTE *v1; // esi char v2; // al bool result; // al v1 = this; if ( this[2680] ) { v2 = this[2700]; if ( !v2 ) v2 = this[944]; switch ( v2 ) { case 1: case 2: case 3: case 4: case 5: result = 0; break; case 6: case 7: case 8: case 9: case 0xA: result = 0; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: result = 1; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: result = 0; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: result = 0; break; case 0x1A: case 0x1B: result = 0; break; default: result = 0; break; } } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 32))() && *((_DWORD *)v1 + 678) ) { result = *(_DWORD *)(*((_DWORD *)v1 + 679) + 98) == 1; } else { result = 0; } return result; } //----- (00652320) -------------------------------------------------------- int __thiscall sub_652320(_DWORD *this, int a2) { int result; // eax int v3; // ecx unsigned int v4; // esi unsigned int v5; // eax int v6; // edi const char *v7; // edx int v8; // [esp+8h] [ebp+8h] if ( !a2 ) return this[526]; result = sub_65D700(this, a2); if ( result ) { v3 = *(_DWORD *)(result + 32); v8 = 0; if ( v3 ) { v4 = *(_DWORD *)(v3 + 12); v5 = 0; if ( v4 ) { v6 = *(_DWORD *)(v3 + 16); do { v7 = *(const char **)(v6 + 8 * v5 + 4); if ( v7 ) { if ( !strcmp("Hit", v7) ) ++v8; } ++v5; } while ( v5 < v4 ); } } result = v8; } return result; } //----- (006524E0) -------------------------------------------------------- char __userpurge sub_6524E0@(int a1@, int a2@, int a3) { *(_BYTE *)(a1 + 1449) = a3; return sub_674DE0(a1 + 776, a2, a3); } //----- (00652500) -------------------------------------------------------- char __userpurge sub_652500@(int a1@, int a2@, int a3) { *(_BYTE *)(a1 + 1460) = a3; return sub_674FF0(a1 + 776, a2, a3); } //----- (00652520) -------------------------------------------------------- int __thiscall sub_652520(_DWORD *this, char a2) { _WORD *v2; // esi v2 = this; if ( a2 == 1 ) { if ( sub_662E50(this + 424) ) v2[1366] = 256; else *((_BYTE *)v2 + 2732) = 1; } else if ( !a2 ) { if ( sub_65C980(this) && !sub_65B9D0(v2, 500000) ) (*(void (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 340))(v2); if ( sub_662E50((_DWORD *)v2 + 424) ) (*(void (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 340))(v2); *((_BYTE *)v2 + 2732) = 0; } return sub_8EF6C0(&unk_BA6A18, dword_ACDD68); } //----- (006525B0) -------------------------------------------------------- char __thiscall sub_6525B0(void *this, int a2) { int v2; // ebx int v3; // esi int v4; // edi int v5; // eax _DWORD *v6; // edi int v7; // esi int v8; // esi int (__stdcall *v9)(_DWORD); // eax int v10; // esi int v11; // ebx int v12; // esi int v14; // [esp+24h] [ebp-4h] int v15; // [esp+30h] [ebp+8h] v2 = *(unsigned __int16 *)(a2 + 20); v3 = dword_ACDA7C; v4 = (int)this; LOBYTE(v5) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v2); if ( (_BYTE)v5 ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196) + 4 * v2; if ( *(_DWORD *)v5 ) { v5 = *(_DWORD *)v5; if ( v5 ) { v5 = *(_DWORD *)(v5 + 34); switch ( v5 ) { case 367: v9 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)(v4 + 84) + 8); *(_BYTE *)(v4 + 2741) = 0; LOBYTE(v5) = v9(1.0); break; case 372: if ( !*(_BYTE *)(v4 + 2740) ) { LOBYTE(v5) = sub_64F900((_DWORD *)v4, 376); if ( (_BYTE)v5 ) { if ( *(_DWORD *)(v4 + 20) ) { v5 = *(_DWORD *)(v4 + 12); if ( v5 ) { while ( 1 ) { v10 = *(_DWORD *)(v5 + 8); v15 = *(_DWORD *)v5; if ( v10 ) { v14 = sub_4DBF00(*(unsigned __int16 *)(v10 + 20)); v11 = sub_4DBF50(*(unsigned __int16 *)(v10 + 20)); LOBYTE(v5) = v14; if ( v14 ) { if ( v11 ) { if ( *(_DWORD *)(v14 + 34) == 376 ) { v5 = *(_DWORD *)(v10 + 44); v12 = v10 + 44; if ( v5 ) { sub_6ACDF0(&unk_B91250, (int *)v5); *(_DWORD *)v12 = 0; sub_6AF8E0( &unk_B91250, v12, (char *)(v11 + 398), v4, *(_DWORD *)(v11 + 430), flt_ACCFCC, 1, 0, 0, 1); v5 = *(_DWORD *)v12; *(_BYTE *)(*(_DWORD *)v12 + 140) = 1; } } } } } if ( !v15 ) break; v5 = v15; } } } } } break; case 373: if ( !*(_BYTE *)(v4 + 2740) ) { *(_DWORD *)(v4 + 36) = 1; sub_672F60((_BYTE *)(v4 + 776), 0); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 488))(v4) && sub_661030((_BYTE *)(v4 + 2576)) ) { sub_661E70((_BYTE *)(v4 + 2576), 0); } LOBYTE(v5) = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 48))(v4); if ( (_BYTE)v5 ) LOBYTE(v5) = sub_661E70((_BYTE *)(v4 + 2772), 0); if ( (char *)v4 != dword_AD8EBC && *(_DWORD *)(v4 + 20) > 0 ) { v6 = *(_DWORD **)(v4 + 12); while ( v6 ) { v7 = v6[2]; LOBYTE(v5) = (_BYTE)v6 + 8; v6 = (_DWORD *)*v6; if ( v7 ) { if ( *(_DWORD *)(v7 + 44) ) { LOBYTE(v5) = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v7 + 44) + 76))(LODWORD(flt_ACCFCC)); if ( !(_BYTE)v5 ) LOBYTE(v5) = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v7 + 44) + 84))(1); } } } } } break; case 374: if ( (char *)v4 == dword_AD8EBC ) { v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v8 = v5; if ( v5 ) { if ( !*(_BYTE *)(v4 + 2740) ) { sub_56C310(*(_DWORD ***)(v5 + 572)); LOBYTE(v5) = sub_56B150(*(_DWORD **)(v8 + 572)); } } } break; case 376: LOBYTE(v5) = sub_672FE0((_BYTE *)(v4 + 776), 0); if ( !*(_BYTE *)(v4 + 2740) ) LOBYTE(v5) = sub_67A440(v4 + 776); break; default: return v5; } } } } } return v5; } // ACCFCC: using guessed type float flt_ACCFCC; // ACDA7C: using guessed type int dword_ACDA7C; //----- (006528A0) -------------------------------------------------------- char __thiscall sub_6528A0(void *this, float a2) { int v2; // esi int v3; // eax v2 = (int)this; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)this + 248))(); if ( (_BYTE)v3 ) { if ( *(_BYTE *)(v2 + 2741) ) { v3 = sub_8D0630((float *)(v2 + 2744), a2); if ( v3 ) { sub_6AF8E0(&unk_B91250, (int)&a2, "Sta_GTI_Speed", v2, 1, flt_ACCFCC, 0, 0, 1, 1); LOBYTE(v3) = sub_8D06A0((float *)(v2 + 2744), flt_ACCFCC); *(float *)(v2 + 2764) = 0.039999999; } } } return v3; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00652930) -------------------------------------------------------- void __thiscall sub_652930(int this, float a2) { int v2; // esi double v3; // st7 int *v4; // eax double v5; // st6 int v6; // edx int v7; // edi float v8; // ST04_4 double v9; // st7 int v10; // esi int v11; // edx int v12; // [esp+10h] [ebp-10h] float v13; // [esp+14h] [ebp-Ch] float v14; // [esp+18h] [ebp-8h] float v15; // [esp+1Ch] [ebp-4h] float v16; // [esp+28h] [ebp+8h] v2 = this; v15 = *(float *)(this + 2892) / *(float *)(this + 2888); v3 = v15; if ( v15 + v15 >= *(float *)(this + 2900) ) { v15 = *(float *)(this + 2880); v5 = a2; v16 = a2 - *(float *)(this + 2876); *(float *)(this + 2880) = v16; *(float *)(this + 2884) = v16 - v15; if ( *(_BYTE *)(this + 2953) ) { if ( *(float *)(this + 2880) > *(float *)(this + 2896) - v3 ) { *(_BYTE *)(this + 2953) = 0; *(_BYTE *)(this + 2954) = 1; *(float *)(this + 2876) = v5; *(float *)(this + 2880) = 0.0; *(float *)(this + 2884) = 0.0; } } else { if ( *(float *)(this + 2880) > v3 && !*(_BYTE *)(this + 2954) ) *(_BYTE *)(this + 2953) = 1; *(float *)(this + 2900) = *(float *)(this + 2884) + *(float *)(this + 2900); } v6 = *(_DWORD *)(this + 2904); v7 = *(_DWORD *)(this + 2908); v8 = *(float *)(this + 2900); v14 = *(float *)(this + 2912); v9 = sub_650E50((float *)this, v8) + v14; v10 = *(_DWORD *)(v2 + 700); *(_DWORD *)(v10 + 88) = v11; *(_DWORD *)(v10 + 92) = v7; v14 = v9; *(float *)(v10 + 96) = v14; } else { v4 = (int *)(*(int (**)(void))(*(_DWORD *)this + 196))(); v12 = *v4; v13 = *((float *)v4 + 1); v14 = *((float *)v4 + 2); sub_69AD10((float *)byte_ADB468, *(float *)&v12, v13, (int)&v12); (*(void (__thiscall **)(int, int *))(*(_DWORD *)v2 + 188))(v2, &v12); *(float *)(v2 + 2900) = 0.0; *(_BYTE *)(v2 + 2872) = 0; *(_WORD *)(v2 + 2953) = 0; } } //----- (00652AC0) -------------------------------------------------------- signed int __thiscall sub_652AC0(_BYTE *this, int a2) { int v2; // eax int (*v3)(void); // edx int v4; // ecx signed int result; // eax v2 = *(_DWORD *)this; if ( this[2680] ) v3 = *(int (**)(void))(v2 + 656); else v3 = *(int (**)(void))(v2 + 164); v4 = a2 - v3(); result = 0; while ( v4 < dword_AB3960[result] ) { if ( (unsigned int)++result >= 5 ) return 5; } return result; } //----- (00652B00) -------------------------------------------------------- int __thiscall sub_652B00(float *this) { float *v1; // esi int v2; // edi int result; // eax v1 = this; v2 = sub_65B8B0(this, 0, 0, 0); if ( (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 440))(v1) == 4 ) result = sub_65D700(v1, *((_DWORD *)v1 + 467)); else result = sub_65D700(v1, v2); if ( result && *((_DWORD *)v1 + 621) ) v1[562] = *(float *)(result + 48) + flt_ACCFCC - *(float *)(result + 60); else v1[562] = flt_ACCFCC; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00652B70) -------------------------------------------------------- char __thiscall sub_652B70(int this, int a2) { _DWORD *v2; // ebx int v3; // edx int v4; // eax int v5; // ecx int v6; // edx int v7; // eax void (__thiscall *v8)(_DWORD *, int *); // edx char v9; // dl _DWORD *v10; // eax int v11; // eax char v12; // al char v14; // al bool v15; // al char v16; // [esp-18h] [ebp-5Ch] int v17; // [esp-14h] [ebp-58h] int v18; // [esp-10h] [ebp-54h] int v19; // [esp-Ch] [ebp-50h] int v20; // [esp-8h] [ebp-4Ch] int v21; // [esp-4h] [ebp-48h] int v22; // [esp+0h] [ebp-44h] __int16 v23; // [esp+4h] [ebp-40h] float v24; // [esp+8h] [ebp-3Ch] char v25; // [esp+18h] [ebp-2Ch] int v26; // [esp+28h] [ebp-1Ch] int v27; // [esp+2Ch] [ebp-18h] int v28; // [esp+30h] [ebp-14h] int v29; // [esp+34h] [ebp-10h] int v30; // [esp+38h] [ebp-Ch] char v31; // [esp+3Ch] [ebp-8h] v2 = (_DWORD *)this; *(_BYTE *)(this + 2700) = 0; if ( !a2 ) return 0; *(_WORD *)(this + 548) = *(_WORD *)a2; v3 = *(_DWORD *)(a2 + 6); v4 = *(_DWORD *)(a2 + 10); v26 = *(_DWORD *)(a2 + 2); v5 = *(_DWORD *)(a2 + 14); v27 = v3; v6 = *(_DWORD *)(a2 + 18); v29 = v5; v28 = v4; v7 = *v2; v30 = v6; v8 = *(void (__thiscall **)(_DWORD *, int *))(v7 + 88); v31 = 0; v8(v2, &v26); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 260))(v2, LODWORD(flt_AD8BFC)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 264))(v2, LODWORD(flt_AD8C00)); (*(void (__thiscall **)(_DWORD *))(v2[397] + 32))(v2 + 397); sub_443390(v2, *(_BYTE *)(a2 + 31)); *((_BYTE *)v2 + 1936) = *(_BYTE *)(a2 + 204); *((_WORD *)v2 + 1458) = *(_WORD *)(a2 + 240); v2[730] = *(unsigned __int8 *)(a2 + 242); *((_BYTE *)v2 + 2952) = *(_BYTE *)(a2 + 243); v9 = *(_BYTE *)(a2 + 32); v2[39] = -65536; v2[41] = -65536; v24 = COERCE_FLOAT(&v25); *((_BYTE *)v2 + 944) = v9; *((_BYTE *)v2 + 1482) = 1; v10 = sub_439D70(byte_ADB468, (_DWORD *)LODWORD(v24)); v11 = sub_4316B0(v10); if ( v11 ) *((float *)v2 + 374) = (double)*(unsigned int *)(v11 + 72); v12 = *(_BYTE *)(a2 + 32); if ( v12 != ((*(_BYTE *)(a2 + 33) >> 2) & 0x1F) ) { *(_BYTE *)(a2 + 33) ^= (*(_BYTE *)(a2 + 33) ^ 4 * v12) & 0x7C; return 0; } (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 64))(v2, a2 + 33, 0); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 48))(v2) ) { v14 = *((_BYTE *)v2 + 1924); if ( v14 == 4 ) { *((_WORD *)v2 + 88) = *(_WORD *)(a2 + 37); } else if ( v14 == 5 ) { *((_WORD *)v2 + 88) = *(_WORD *)(a2 + 37); v15 = *(_BYTE *)(a2 + 49) != 0; *((_BYTE *)v2 + 208) = v15; qmemcpy(&v16, (const void *)(a2 + 50), 0x1Eu); sub_650B60(v2, v16, v17, v18, v19, v20, v21, v22, v23, v15); } } else { sub_65DC00((float *)v2); if ( *((_BYTE *)v2 + 1924) == 6 ) sub_672DF0(v2 + 194, *(unsigned __int16 *)(a2 + 80)); (*(void (__thiscall **)(_DWORD *, _DWORD, int))(*v2 + 64))(v2, 0, a2 + 37); v2[169] = *(_DWORD *)(a2 + 200); } return 1; } // AD8BFC: using guessed type float flt_AD8BFC; // AD8C00: using guessed type float flt_AD8C00; //----- (00652D90) -------------------------------------------------------- char __thiscall sub_652D90(_WORD *this, int a2, __int16 a3) { int v3; // edi _WORD *v4; // esi int *v5; // eax int v6; // edi int v8; // eax float v9; // ST10_4 float v10; // ST10_4 _DWORD *v11; // eax int v12; // eax char v13; // [esp+20h] [ebp-Ch] v3 = dword_ACDA48; v4 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2) ) return 0; if ( (unsigned __int16)a2 > *(_WORD *)(v3 + 200) ) return 0; v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( !*v5 ) return 0; v6 = *v5; if ( !*v5 ) return 0; v8 = *(_DWORD *)v4; v4[274] = a3; (*(void (__thiscall **)(_WORD *, int))(v8 + 88))(v4, v6 + 34); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 136))(v4, *(_DWORD *)(v6 + 70)); v9 = (double)*(unsigned int *)(v6 + 74); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 260))(v4, LODWORD(v9)); v10 = (double)*(unsigned int *)(v6 + 78); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 264))(v4, LODWORD(v10)); (*(void (__thiscall **)(_WORD *))(*((_DWORD *)v4 + 397) + 32))(v4 + 794); sub_443390(v4, 1); (*(void (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 48))(v4); *((_BYTE *)v4 + 944) = 0; sub_652150(v4, a2); *((_DWORD *)v4 + 39) = -65536; *((_DWORD *)v4 + 41) = -65536; *((_BYTE *)v4 + 1482) = 1; v11 = sub_439D70(byte_ADB468, &v13); v12 = sub_4316B0(v11); if ( v12 ) *((float *)v4 + 374) = (double)*(unsigned int *)(v12 + 72); *((_BYTE *)v4 + 2680) = 0; return 1; } // ACDA48: using guessed type int dword_ACDA48; //----- (00652EE0) -------------------------------------------------------- signed int __thiscall sub_652EE0(_DWORD *this, int a2) { _DWORD *v2; // esi char v3; // bl unsigned __int8 (__thiscall *v4)(_DWORD *); // edx int v5; // eax signed int result; // eax v2 = this; (*(void (__stdcall **)(_DWORD))(*this + 260))(LODWORD(flt_AD8BFC)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 264))(v2, LODWORD(flt_AD8C00)); (*(void (__thiscall **)(_DWORD *))(v2[397] + 32))(v2 + 397); v3 = (*(int (__thiscall **)(_DWORD *))(*v2 + 48))(v2); v4 = *(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 48); *((_BYTE *)v2 + 1924) = 1; v2[482] = 0; if ( v3 != v4(v2) ) *((_BYTE *)v2 + 1925) = 1; v5 = sub_4316B0((_DWORD *)(a2 + 27)); if ( v5 ) *((float *)v2 + 374) = (double)*(unsigned int *)(v5 + 72); (*(void (__thiscall **)(_DWORD *))(*v2 + 48))(v2); (*(void (__thiscall **)(_DWORD *, int, int))(*v2 + 64))(v2, a2 + 44, a2 + 48); result = -65535; v2[39] = -65536; v2[41] = -65536; return result; } // AD8BFC: using guessed type float flt_AD8BFC; // AD8C00: using guessed type float flt_AD8C00; //----- (00652FB0) -------------------------------------------------------- double __thiscall sub_652FB0(_BYTE *this, int a2) { _BYTE *v2; // ebx int v3; // eax int v4; // eax double result; // st7 int v6; // edi int v7; // esi int *v8; // eax int v9; // esi unsigned int v10; // edx unsigned int v11; // edx char v12; // [esp+14h] [ebp+8h] float v13; // [esp+14h] [ebp+8h] float v14; // [esp+14h] [ebp+8h] char v15; // [esp+14h] [ebp+8h] v2 = this; if ( !a2 ) return 50.0; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 32))(a2) ) { v3 = *(_DWORD *)(a2 + 2712); if ( v3 ) { v4 = *(_DWORD *)(v3 + 99); if ( v4 == 8 || v4 == 10 || v4 == 9 || v4 == 22 || v4 == 21 ) return 10.0; } } if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 32))(a2) ) { if ( v2[2700] ) v15 = v2[2700]; else v15 = v2[944]; if ( sub_4DC110(v15, 11) ) { v11 = sub_65B8B0(v2, 0, 0, 0) % 0x64u; if ( v11 ) { if ( v11 != 80 ) return 450.0; } } return 50.0; } v6 = *(unsigned __int16 *)(a2 + 942); v7 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v6) ) return 50.0; if ( (unsigned __int16)v6 > *(_WORD *)(v7 + 200) ) return 50.0; v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * v6); if ( !*v8 ) return 50.0; v9 = *v8; if ( !*v8 ) return 50.0; if ( v2[2700] ) v12 = v2[2700]; else v12 = v2[944]; if ( sub_4DC110(v12, 11) && (v10 = sub_65B8B0(v2, 0, 0, 0) % 0x64u) != 0 && v10 != 80 ) { v13 = (double)*(unsigned int *)(v9 + 104) * 50.0 / 1000.0 + 450.0; result = v13; } else { v14 = (double)*(unsigned int *)(v9 + 104) * 50.0 / 1000.0; result = v14; } return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (00653170) -------------------------------------------------------- void __userpurge sub_653170(_BYTE *a1@, int a2@, double a3@, float a4) { int v4; // esi int v5; // eax int v6; // ecx char v7; // dl int v8; // eax int v9; // ebx float v10; // ST14_4 int v11; // ebx float v12; // ST14_4 int v13; // eax _DWORD *v14; // eax double v15; // st7 int v16; // eax float *v17; // eax double v18; // st7 int v19; // eax int v20; // ecx int v21; // ST24_4 float v22; // edx float v23; // ecx float v24; // edx bool v25; // zf float v26; // ecx float v27; // edx float *v28; // eax int v29; // [esp+30h] [ebp-1Ch] float v30; // [esp+34h] [ebp-18h] float v31; // [esp+38h] [ebp-14h] int v32; // [esp+3Ch] [ebp-10h] float v33; // [esp+40h] [ebp-Ch] float v34; // [esp+44h] [ebp-8h] float v35; // [esp+48h] [ebp-4h] float v36; // [esp+54h] [ebp+8h] v4 = (int)a1; if ( !sub_6516C0(a1) ) { v5 = *(_DWORD *)(v4 + 696); v6 = 0; if ( v5 ) v6 = *(_DWORD *)(v5 + 64); v7 = 0; if ( !v5 || v6 == 801700 || v6 == 801000 || v6 == 801100 && !*(_DWORD *)(v5 + 44) ) v7 = 1; if ( *(_DWORD *)(v4 + 1904) || v7 ) { *(float *)(v4 + 1580) = 0.0; v35 = flt_ACCFCC; v13 = sub_689FF0((char *)(v4 + 1516)); sub_8CFDB0((void *)(v4 + 1516), v35, v13); sub_67E1E0((float *)(v4 + 1588), 0.0); } else { v8 = *(_DWORD *)(v4 + 1932); if ( v8 ) { if ( v8 == 1 ) { v9 = *(_DWORD *)(v4 + 1588); (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 272))(v4); v10 = a3; (*(void (__thiscall **)(int, _DWORD))(v9 + 8))(v4 + 1588, LODWORD(v10)); } } else { v11 = *(_DWORD *)(v4 + 1588); (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 268))(v4); v12 = a3; (*(void (__thiscall **)(int, _DWORD))(v11 + 8))(v4 + 1588, LODWORD(v12)); } *(float *)(v4 + 1580) = flt_BA45B4 * 4.0; } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(v4 + 1588) + 36))(v4 + 1588, LODWORD(a4)); v14 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(v4 + 1588) + 56))(v4 + 1588); sub_662E20((_DWORD *)(v4 + 1696), v14); v36 = sub_663240(v4 + 1696, a2, SLODWORD(flt_ACCFCC)); if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 248))(v4) && !*(_BYTE *)(v4 + 1481) && !sub_662E50((_DWORD *)(v4 + 1696)) ) { goto LABEL_40; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 248))(v4) ) { *(_BYTE *)(v4 + 1481) = 1; } else { v15 = *(float *)(v4 + 468); *(_BYTE *)(v4 + 1481) = 0; if ( v15 > 0.0 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 264))(v4, *(float *)(v4 + 468)); v16 = *(_DWORD *)v4; *(float *)(v4 + 468) = 0.0; (*(void (__thiscall **)(int, signed int))(v16 + 240))(v4, 1); } } v17 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)(v4 + 1588) + 56))(v4 + 1588); v29 = *(int *)v17; v30 = v17[1]; v31 = v17[2]; if ( *(_BYTE *)(v4 + 1716) && sub_662E50((_DWORD *)(v4 + 1696)) ) { v32 = v29; v33 = v30; v18 = v36; } else { if ( sub_69AD10((float *)byte_ADB468, *(float *)&v29, v30, (int)&v32) ) { LABEL_31: if ( *(_DWORD *)(v4 + 1904) == 4 ) v34 = v31; if ( !*(_BYTE *)(v4 + 1716) && sub_662E50((_DWORD *)(v4 + 1696)) ) { v23 = v33; v24 = v34; *(float *)(v4 + 1732) = *(float *)&v32; *(float *)(v4 + 1736) = v23; *(float *)(v4 + 1740) = v24; } v25 = *(_BYTE *)(v4 + 1716) == 0; v26 = v33; v27 = v34; *(float *)(v4 + 1856) = *(float *)&v32; *(float *)(v4 + 1860) = v26; *(float *)(v4 + 1864) = v27; if ( !v25 && sub_662E50((_DWORD *)(v4 + 1696)) ) *(float *)(v4 + 1864) = sub_662E40((float *)(v4 + 1696)); v28 = *(float **)(v4 + 700); v28[22] = *(float *)&v32; v28[23] = v33; v28[24] = v34; LABEL_40: if ( sub_662E10((_BYTE *)(v4 + 1696)) ) { sub_651970(v4); sub_651BB0((_DWORD *)v4); } return; } v19 = *(_DWORD *)(v4 + 700); v20 = *(_DWORD *)(v19 + 92); v21 = *(_DWORD *)(v19 + 88); v22 = *(float *)(v19 + 96); v32 = v29; v33 = v30; v18 = v22; } v34 = v18; goto LABEL_31; } } // ACCFCC: using guessed type float flt_ACCFCC; // BA45B4: using guessed type float flt_BA45B4; //----- (006534B0) -------------------------------------------------------- void __thiscall sub_6534B0(float *this, int a2) { float *v2; // esi int v3; // eax _DWORD *v4; // ebx float *v5; // eax float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v9; // ST18_4 float v10; // ST18_4 signed int v11; // ecx double v12; // st7 v2 = this; v3 = *((_DWORD *)this + 174); if ( v3 ) { v4 = *(_DWORD **)(v3 + 20); if ( v4 ) { v5 = (float *)*((_DWORD *)this + 175); v6 = *(float *)(dword_B66FB0 + 88) - v5[22]; v7 = *(float *)(dword_B66FB0 + 92) - v5[23]; v8 = *(float *)(dword_B66FB0 + 96) - v5[24]; v9 = v7 * v7 + v6 * v6 + v8 * v8; v10 = sqrt(v9); v11 = 0; v12 = *(float *)(dword_B66FB0 + 292) * v10; if ( v2[376] < v12 ) { v11 = 1; if ( v2[377] < v12 ) v11 = 2; } if ( *((_DWORD *)v2 + 636) != v11 ) { *((_DWORD *)v2 + 636) = v11; sub_810BE0(v4, v11); } } } } //----- (00653580) -------------------------------------------------------- void __thiscall sub_653580(_BYTE *this) { _BYTE *v1; // esi char v2; // al int v3; // eax float *v4; // eax double v5; // st7 float v6; // ST18_4 v1 = this; if ( this[1936] == 4 || !this[2680] && (v2 = this[1924], v2 != 4) && v2 != 5 && (v3 = *((_DWORD *)this + 678)) != 0 && *(_BYTE *)(v3 + 82) ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 32))() ) { v4 = (float *)*((_DWORD *)v1 + 455); v5 = *((float *)v1 + 248); v4[22] = 0.0; v6 = v5; v4[23] = 0.0; v4[24] = v6; if ( byte_AB7288 ) { sub_6CD770(); sub_680110((_DWORD *)v1 + 455, *((_WORD *)v1 + 471)); (*(void (__stdcall **)(_DWORD, signed int))(**((_DWORD **)v1 + 175) + 116))(*((_DWORD *)v1 + 455), 1); *((_DWORD *)v1 + 136) = 0; } } } } // AB7288: using guessed type char byte_AB7288; //----- (00653650) -------------------------------------------------------- bool __thiscall sub_653650(_BYTE *this) { return this[2510] || !this[944] && sub_6516C0(this); } //----- (00653680) -------------------------------------------------------- bool __thiscall sub_653680(_BYTE *this) { _DWORD *v1; // esi bool result; // al int v3; // esi v1 = this; result = 1; if ( !this[2510] && (this[944] || !sub_6516C0(this)) ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 32))(v1) || (v3 = v1[678]) == 0 || *(_DWORD *)(v3 + 99) != 11 ) { result = 0; } } return result; } //----- (006536D0) -------------------------------------------------------- signed int __thiscall sub_6536D0(void *this, int a2) { void *v2; // esi signed int result; // eax int v4; // eax unsigned __int8 *v5; // eax v2 = this; if ( (*(int (**)(void))(*(_DWORD *)this + 440))() != 4 && (v4 = (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 448))(v2), v4 >= 0) && (v5 = (unsigned __int8 *)sub_4B1560(v4)) != 0 ) { result = *v5; } else { result = 0xFFFF; } return result; } //----- (00653710) -------------------------------------------------------- signed int __thiscall sub_653710(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v4; // edi int v5; // esi int v6; // ecx int v7; // eax v1 = this; if ( (*(unsigned __int8 (**)(void))(*this + 32))() ) { v2 = v1[678]; if ( v2 ) return *(_DWORD *)(v2 + 91); } else if ( dword_ADA550 ) { v4 = *(unsigned __int16 *)(dword_ADA550 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v6 + 4 * v4) ) { v7 = *(_DWORD *)(v6 + 4 * v4); if ( v7 ) return *(_DWORD *)(v7 + 236); } } } } return 1; } // ACB230: using guessed type int dword_ACB230; // ADA550: using guessed type int dword_ADA550; //----- (00653870) -------------------------------------------------------- char __thiscall sub_653870(_DWORD *this, int a2, int a3) { void *v3; // edi int v4; // edi int v5; // ebx _DWORD *v6; // eax int v8; // [esp+24h] [ebp-4h] v3 = this; v8 = (int)this; sub_64FE50(this, a2, a3); if ( *(_DWORD *)(a2 + 44) ) { sub_6ACDF0(&unk_B91250, *(int **)(a2 + 44)); *(_DWORD *)(a2 + 44) = 0; } if ( *(_DWORD *)(a2 + 40) ) { sub_6ACDF0(&unk_B91250, *(int **)(a2 + 40)); *(_DWORD *)(a2 + 40) = 0; } if ( (_BYTE)a3 || *(_BYTE *)(a2 + 48) == 45 ) goto LABEL_12; v4 = dword_ACDA80; v5 = *(unsigned __int16 *)(a2 + 20); LOBYTE(v6) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v5); if ( (_BYTE)v6 ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = (_DWORD *)(*(_DWORD *)(v4 + 196) + 4 * v5); if ( *v6 ) { v6 = (_DWORD *)*v6; if ( v6 ) { sub_6AF8E0( &unk_B91250, (int)&a3, (char *)(a2 + 48), v8, *(_DWORD *)((char *)v6 + 466), flt_ACCFCC, 0, 0, 0, 1); v3 = (void *)v8; LABEL_12: LOBYTE(v6) = sub_6525B0(v3, a2); return (char)v6; } } } } return (char)v6; } // ACCFCC: using guessed type float flt_ACCFCC; // ACDA80: using guessed type int dword_ACDA80; //----- (00653940) -------------------------------------------------------- char __thiscall sub_653940(_BYTE *this, unsigned __int8 a2) { _BYTE *v2; // esi __int16 v3; // ax char v4; // bl char v5; // al char v6; // al char v7; // al char v8; // al char v9; // al char v10; // al v2 = this; if ( this[2700] || this[944] ) { switch ( sub_673720((int)(this + 776)) ) { case 10: case 20: case 30: case 40: case 50: case 60: case 70: case 80: case 90: v4 = v2[2700]; if ( v4 ) v5 = sub_4DC110(v2[2700], 11); else v5 = sub_4DC110(v2[944], 11); if ( v5 ) goto LABEL_21; if ( v4 ) v6 = sub_4DC110(v4, 1); else v6 = sub_4DC110(v2[944], 1); if ( v6 ) goto LABEL_30; v7 = v4 ? sub_4DC110(v4, 6) : sub_4DC110(v2[944], 6); if ( v7 ) goto LABEL_30; if ( v4 ) v8 = sub_4DC110(v4, 16); else v8 = sub_4DC110(v2[944], 16); if ( v8 ) { LABEL_21: v3 = a2 % 2; } else { if ( v4 ) v9 = sub_4DC110(v4, 21); else v9 = sub_4DC110(v2[944], 21); if ( v9 || (v4 ? (v10 = sub_4DC110(v4, 26)) : (v10 = sub_4DC110(v2[944], 26)), v10) ) LABEL_30: LOBYTE(v3) = a2 % 6; else LOBYTE(v3) = 0; } break; default: goto LABEL_4; } } else { LABEL_4: LOBYTE(v3) = 0; } return v3; } //----- (00653B10) -------------------------------------------------------- float *__thiscall sub_653B10(_BYTE *this, float *a2) { _BYTE *v2; // edi int *v3; // eax int v4; // ecx float *v5; // esi int v6; // edx int v7; // eax char v8; // al int v9; // eax int v10; // eax float *result; // eax int v12; // eax int v13; // ebx int v14; // eax char *v15; // eax _DWORD *v16; // eax int v17; // ecx int v18; // edx int v19; // eax int v20; // eax int v21; // ecx _DWORD *v22; // eax int v23; // ecx int v24; // edx int v25; // eax int v26; // ecx int v27; // edx float v28; // [esp+1Ch] [ebp+8h] float v29; // [esp+1Ch] [ebp+8h] float v30; // [esp+1Ch] [ebp+8h] v2 = this; v3 = (int *)(*(int (**)(void))(*(_DWORD *)this + 196))(); v4 = *v3; v5 = a2; v6 = v3[1]; v7 = v3[2]; *(_DWORD *)a2 = v4; *((_DWORD *)a2 + 1) = v6; *((_DWORD *)a2 + 2) = v7; v8 = v2[1924]; if ( v8 == 4 || v8 == 5 ) { v10 = (*(int (__stdcall **)(const char *))(**((_DWORD **)v2 + 178) + 72))("Name"); if ( v10 ) { LABEL_21: v26 = *(_DWORD *)(v10 + 140); v27 = *(_DWORD *)(v10 + 144); a2[2] = *(float *)(v10 + 148); return a2; } result = a2; a2[2] = a2[2] + 56.0; } else { v9 = *((_DWORD *)v2 + 642); if ( v9 ) { v10 = (*(int (__stdcall **)(const char *))(**(_DWORD **)(v9 + 12) + 72))("#Name"); if ( !v10 ) { result = a2; v28 = *((float *)v2 + 248) * 0.5 + a2[2]; v5[2] = v28 + *((float *)v2 + 669); return result; } goto LABEL_21; } if ( *((_DWORD *)v2 + 731) ) { v12 = (**(int (__thiscall ***)(int))(*((_DWORD *)v2 + 731) + 84))(*((_DWORD *)v2 + 731) + 84); if ( v12 && (v13 = *(_DWORD *)(v12 + 12)) != 0 && ((v14 = *((_DWORD *)v2 + 730)) != 0 ? (v15 = sub_7549E0("#Name%02d", v14 + 1)) : (v15 = "#Name"), (v16 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v13 + 72))(v13, v15)) != 0) ) { v17 = v16[35]; v18 = v16[36]; v19 = v16[37]; *(_DWORD *)a2 = v17; *((_DWORD *)a2 + 1) = v18; *((_DWORD *)a2 + 2) = v19; result = a2; } else { result = a2; v29 = *((float *)v2 + 248) + a2[2]; v5[2] = v29 + *((float *)v2 + 669); } } else { v20 = *((_DWORD *)v2 + 174); if ( v20 && (v21 = *(_DWORD *)(v20 + 12)) != 0 && (v22 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v21 + 72))("#Name")) != 0 ) { v23 = v22[35]; v24 = v22[36]; v25 = v22[37]; *(_DWORD *)a2 = v23; *((_DWORD *)a2 + 1) = v24; *((_DWORD *)a2 + 2) = v25; result = a2; } else { result = a2; v30 = *((float *)v2 + 248) + a2[2]; v5[2] = v30 + *((float *)v2 + 669); } } } return result; } //----- (00653D00) -------------------------------------------------------- char __thiscall sub_653D00(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int *v4; // eax int v5; // edi int v6; // eax char v7; // bl int v8; // eax char result; // al int v10; // eax bool v11; // zf int v12; // eax int v13; // [esp+Ch] [ebp-8h] char v14; // [esp+13h] [ebp-1h] v2 = dword_ACB230; v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a2) ) return 0; if ( (unsigned __int16)a2 > *(_WORD *)(v2 + 200) ) return 0; v4 = (int *)(*(_DWORD *)(v2 + 196) + 4 * (unsigned __int16)a2); if ( !*v4 ) return 0; v5 = *v4; if ( !*v4 ) return 0; v6 = *(_DWORD *)(v5 + 110); v7 = 0; if ( v6 == 10 || v6 == 12 || v6 == 11 || v6 == 13 || v6 == 29 ) v7 = 1; if ( *((_WORD *)v3 + 260) != -1 && v7 == 1 ) { v3[123] = 1; v8 = *(_DWORD *)(v5 + 110); switch ( v8 ) { case 12: *((_WORD *)v3 + 236) = *(_WORD *)v5; *((_BYTE *)v3 + 474) = 0; *((_BYTE *)v3 + 487) = 0; return 0; case 10: *((_WORD *)v3 + 238) = *(_WORD *)v5; *((_BYTE *)v3 + 478) = 0; *((_BYTE *)v3 + 486) = 0; return 0; case 13: *((_WORD *)v3 + 240) = *(_WORD *)v5; *((_BYTE *)v3 + 489) = 0; return 0; case 11: *((_WORD *)v3 + 241) = *(_WORD *)v5; *((_BYTE *)v3 + 486) = 0; return 0; case 29: *((_WORD *)v3 + 242) = *(_WORD *)v5; *((_BYTE *)v3 + 490) = 0; break; } return 0; } sub_65B8B0(v3, 0, (unsigned int *)&v13, 0); v14 = 0; if ( !v7 ) return sub_679AA0(v3 + 194, a2); if ( v13 != 300000 && v13 != 600000 && v13 != 700000 ) { v14 = sub_679AA0(v3 + 194, a2); v10 = *(_DWORD *)(v5 + 110); if ( v10 == 10 || v10 == 12 ) { if ( *(_DWORD *)(v5 + 232) ) { sub_679A10((int)(v3 + 194)); LABEL_36: sub_651BB0(v3); result = v14; *((_WORD *)v3 + 248) = -1; *((_WORD *)v3 + 250) = -1; v3[129] = 0; *((_WORD *)v3 + 255) = 0; return result; } v11 = *(_DWORD *)(v5 + 102) == 7; } else { v11 = v10 == 29; } if ( v11 ) sub_67A330((int)(v3 + 194)); goto LABEL_36; } v3[129] = 1; v12 = *(_DWORD *)(v5 + 110); switch ( v12 ) { case 12: *((_WORD *)v3 + 248) = *(_WORD *)v5; result = v14; *((_BYTE *)v3 + 498) = 0; *((_BYTE *)v3 + 511) = 0; return result; case 10: result = v14; *((_WORD *)v3 + 250) = *(_WORD *)v5; *((_BYTE *)v3 + 502) = 0; *((_BYTE *)v3 + 510) = 0; return result; case 13: result = v14; *((_WORD *)v3 + 252) = *(_WORD *)v5; *((_BYTE *)v3 + 513) = 0; return result; case 11: *((_WORD *)v3 + 253) = *(_WORD *)v5; result = v14; *((_BYTE *)v3 + 512) = 0; return result; case 29: result = v14; *((_WORD *)v3 + 254) = *(_WORD *)v5; *((_BYTE *)v3 + 514) = 0; return result; } return v14; } // ACB230: using guessed type int dword_ACB230; //----- (00654000) -------------------------------------------------------- char __thiscall sub_654000(_DWORD *this, int a2, char a3) { int v3; // edi _DWORD *v4; // esi __int16 *v5; // edi __int16 **v6; // eax char v7; // bl int v8; // eax char result; // al __int16 v10; // dx int v11; // eax bool v12; // zf __int16 v13; // dx int v14; // [esp+Ch] [ebp-8h] char v15; // [esp+13h] [ebp-1h] v3 = dword_ACB230; v4 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { v6 = (__int16 **)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( *v6 ) v5 = *v6; else v5 = 0; } else { v5 = 0; } } else { v5 = 0; } v7 = 0; if ( v5 ) { v8 = *(_DWORD *)(v5 + 55); if ( v8 == 10 || v8 == 12 ) v7 = 1; } if ( *((_WORD *)v4 + 260) == -1 || v7 != 1 ) { sub_65B8B0(v4, 0, (unsigned int *)&v14, 0); v15 = 0; if ( !v7 ) return sub_673190(v4 + 194, a2, a3); if ( v14 == 300000 || v14 == 600000 || v14 == 700000 ) { v4[129] = 1; if ( *(_DWORD *)(v5 + 55) == 12 ) { *((_WORD *)v4 + 248) = *v5; result = v15; *((_BYTE *)v4 + 498) = a3; *((_BYTE *)v4 + 511) = 0; } else { v13 = *v5; *((_BYTE *)v4 + 502) = a3; result = v15; *((_WORD *)v4 + 250) = v13; *((_BYTE *)v4 + 510) = 0; } return result; } v15 = sub_673190(v4 + 194, a2, a3); v11 = *(_DWORD *)(v5 + 55); if ( v11 == 10 || v11 == 12 ) { if ( *((_DWORD *)v5 + 58) ) { sub_679A10((int)(v4 + 194)); LABEL_30: sub_651BB0(v4); result = v15; *((_WORD *)v4 + 248) = -1; *((_WORD *)v4 + 250) = -1; v4[129] = 0; *((_WORD *)v4 + 255) = 0; return result; } v12 = *(_DWORD *)(v5 + 51) == 7; } else { v12 = v11 == 29; } if ( v12 ) sub_67A330((int)(v4 + 194)); goto LABEL_30; } v4[123] = 1; if ( *(_DWORD *)(v5 + 55) == 12 ) { *((_WORD *)v4 + 236) = *v5; *((_BYTE *)v4 + 474) = a3; *((_BYTE *)v4 + 487) = 0; } else { v10 = *v5; *((_BYTE *)v4 + 478) = a3; *((_WORD *)v4 + 238) = v10; *((_BYTE *)v4 + 486) = 0; } return 0; } // ACB230: using guessed type int dword_ACB230; //----- (00654220) -------------------------------------------------------- char __thiscall sub_654220(_DWORD *this, int a2) { int v2; // edi char v3; // al _DWORD *v4; // esi int v5; // ecx int v6; // ecx int v7; // eax char result; // al char v9; // al int v10; // ebx int v11; // eax bool v12; // zf int v13; // eax int v14; // edi int v15; // [esp+Ch] [ebp-4h] char v16; // [esp+1Bh] [ebp+Bh] v2 = *(_DWORD *)(a2 + 112); v3 = 0; v4 = this; if ( v2 && ((v5 = *(_DWORD *)(v2 + 110), v5 == 10) || v5 == 12) || (v6 = *(_DWORD *)(v2 + 110), v6 == 11) || v6 == 13 || v6 == 29 ) { v3 = 1; } if ( *((_WORD *)v4 + 260) != -1 && v3 == 1 ) { v4[123] = 1; v7 = *(_DWORD *)(v2 + 110); if ( v7 == 12 ) { *((_WORD *)v4 + 236) = *(_WORD *)v2; *((_BYTE *)v4 + 474) = *(_BYTE *)(a2 + 10); *((_BYTE *)v4 + 487) = 0; result = 0; } else if ( v7 == 10 ) { *((_WORD *)v4 + 238) = *(_WORD *)v2; *((_BYTE *)v4 + 478) = 0; *((_BYTE *)v4 + 486) = 0; result = 0; } else if ( v7 == 13 ) { *((_WORD *)v4 + 240) = *(_WORD *)v2; *((_BYTE *)v4 + 489) = 0; result = 0; } else if ( v7 == 11 ) { *((_WORD *)v4 + 241) = *(_WORD *)v2; *((_BYTE *)v4 + 488) = 0; result = 0; } else { if ( v7 == 29 ) { *((_WORD *)v4 + 242) = *(_WORD *)v2; *((_BYTE *)v4 + 490) = 0; } result = 0; } return result; } if ( !v3 ) return sub_6790F0(v4 + 194, (_DWORD *)a2); sub_65B8B0(v4, 0, (unsigned int *)&v15, 0); if ( v15 != 300000 && v15 != 600000 && v15 != 700000 ) { v9 = sub_6790F0(v4 + 194, (_DWORD *)a2); v10 = *(_DWORD *)(a2 + 112); v16 = v9; v11 = *(_DWORD *)(v10 + 110); if ( v11 == 10 || v11 == 12 ) { if ( *(_DWORD *)(v10 + 232) ) { sub_679A10((int)(v4 + 194)); LABEL_33: sub_651BB0(v4); *((_WORD *)v4 + 248) = -1; result = v16; *((_WORD *)v4 + 250) = -1; v4[129] = 0; *((_WORD *)v4 + 255) = 0; return result; } v12 = *(_DWORD *)(v2 + 102) == 7; } else { v12 = v11 == 29; } if ( v12 ) sub_67A330((int)(v4 + 194)); goto LABEL_33; } v4[129] = 1; v13 = *(_DWORD *)(v2 + 110); if ( v13 == 12 ) { *((_WORD *)v4 + 248) = *(_WORD *)v2; *((_BYTE *)v4 + 498) = *(_BYTE *)(a2 + 10); *((_BYTE *)v4 + 511) = 0; return 0; } if ( v13 == 10 ) { *((_WORD *)v4 + 250) = *(_WORD *)v2; v14 = *(_DWORD *)(v2 + 102) - 5; if ( v14 ) { if ( v14 == 2 ) { *((_BYTE *)v4 + 502) = *(_BYTE *)(a2 + 10); *((_BYTE *)v4 + 510) = 0; return 0; } } else { *((_BYTE *)v4 + 502) = *(_BYTE *)(a2 + 10); } *((_BYTE *)v4 + 510) = 0; result = 0; } else if ( v13 == 13 ) { *((_WORD *)v4 + 252) = *(_WORD *)v2; *((_BYTE *)v4 + 513) = 0; result = 0; } else if ( v13 == 11 ) { *((_WORD *)v4 + 253) = *(_WORD *)v2; *((_BYTE *)v4 + 512) = 0; result = 0; } else { if ( v13 == 29 ) { *((_WORD *)v4 + 254) = *(_WORD *)v2; *((_BYTE *)v4 + 514) = 0; } result = 0; } return result; } //----- (00654520) -------------------------------------------------------- char __thiscall sub_654520(int this, int a2) { int v2; // edi char v3; // al int v4; // esi char result; // al char v6; // bl v2 = a2; v3 = 0; v4 = this; if ( a2 == 10 || a2 == 12 || a2 == 11 || a2 == 13 || a2 == 29 ) v3 = 1; if ( *(_WORD *)(this + 520) == -1 || v3 != 1 ) { if ( v3 ) { sub_65B8B0((_DWORD *)this, 0, (unsigned int *)&a2, 0); if ( a2 == 300000 || a2 == 600000 || a2 == 700000 ) { *(_DWORD *)(v4 + 516) = 1; if ( v2 == 10 ) { *(_BYTE *)(v4 + 510) = 1; *(_WORD *)(v4 + 500) = -1; *(_BYTE *)(v4 + 502) = 0; result = 0; } else if ( v2 == 12 ) { *(_BYTE *)(v4 + 511) = 1; *(_WORD *)(v4 + 496) = -1; *(_BYTE *)(v4 + 498) = 0; result = 0; } else if ( v2 == 13 ) { result = 0; *(_BYTE *)(v4 + 513) = 1; *(_WORD *)(v4 + 504) = -1; } else if ( v2 == 11 ) { *(_BYTE *)(v4 + 512) = 1; *(_WORD *)(v4 + 506) = -1; result = 0; } else { if ( v2 == 29 ) { *(_WORD *)(v4 + 508) = -1; *(_BYTE *)(v4 + 514) = 1; } result = 0; } } else { v6 = sub_679B00((_DWORD *)(v4 + 776), v2); sub_651BB0((_DWORD *)v4); *(_WORD *)(v4 + 500) = -1; *(_WORD *)(v4 + 496) = -1; *(_DWORD *)(v4 + 516) = 0; *(_WORD *)(v4 + 510) = 0; result = v6; } } else { result = sub_679B00((_DWORD *)(this + 776), a2); } } else if ( a2 == 10 ) { *(_BYTE *)(this + 486) = 1; *(_WORD *)(this + 476) = -1; *(_BYTE *)(this + 478) = 0; result = 0; } else if ( a2 == 12 ) { result = 0; *(_WORD *)(this + 472) = -1; *(_BYTE *)(this + 487) = 1; *(_BYTE *)(this + 474) = 0; } else if ( a2 == 11 ) { *(_BYTE *)(this + 488) = 1; *(_WORD *)(this + 482) = -1; result = 0; } else if ( a2 == 13 ) { *(_BYTE *)(this + 489) = 1; *(_WORD *)(this + 480) = -1; result = 0; } else { if ( a2 == 29 ) { *(_WORD *)(this + 484) = -1; *(_BYTE *)(this + 490) = 1; } result = 0; } return result; } //----- (00654750) -------------------------------------------------------- char __thiscall sub_654750(float *this, int a2) { int v2; // esi float *v3; // edi int v4; // ebx int v5; // esi int *v6; // eax int v7; // eax int v8; // ecx void (__thiscall *v10)(float *, _DWORD, _DWORD, _DWORD); // edx v2 = dword_ACDA78; v3 = this; v4 = *(unsigned __int16 *)(*((_DWORD *)this + 679) + 174); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA78 + 16))(dword_ACDA78, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v2 + 200) ) { v6 = (int *)(*(_DWORD *)(v2 + 196) + 4 * v4); if ( *v6 ) v5 = *v6; else v5 = 0; } else { v5 = 0; } } else { v5 = 0; } if ( !*(_DWORD *)(v5 + 11) || (*(int (__thiscall **)(float *))(*(_DWORD *)v3 + 372))(v3) ) return 0; v7 = *((_DWORD *)v3 + 174); v8 = *(_DWORD *)(v5 + 11); if ( *(_DWORD *)(v7 + 28) != v8 || (_BYTE)a2 == 1 ) { v10 = *(void (__thiscall **)(float *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 328); v3[671] = 0.0; *((_BYTE *)v3 + 2690) = 0; v10(v3, *(_DWORD *)(v5 + 11), 0, 0); } else if ( sub_8C4C90((_DWORD *)(v7 + 120), v8, &a2) && a2 && *(_DWORD *)(a2 + 36) ) { sub_4DC550(*((float **)v3 + 174)); return 1; } return 1; } // ACDA78: using guessed type int dword_ACDA78; //----- (00654840) -------------------------------------------------------- void __thiscall sub_654840(_DWORD *this) { _DWORD *v1; // esi char v2; // bl unsigned __int8 (__thiscall *v3)(_DWORD *); // eax v1 = this; if ( sub_65C980(this) && !sub_65B9D0(v1, 500000) ) (*(void (__thiscall **)(_DWORD *))(*v1 + 340))(v1); if ( sub_662E50(v1 + 424) ) (*(void (__thiscall **)(_DWORD *))(*v1 + 340))(v1); *((_BYTE *)v1 + 2732) = 0; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); (*(void (__thiscall **)(_DWORD *, _DWORD, signed int))(*v1 + 40))(v1, 0, 4); sub_64DE20(v1 + 21); sub_64DF20(v1 + 21); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 48))(v1); *((_BYTE *)v1 + 1924) = 3; sub_65F610((float *)v1); v3 = *(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 48); v1[482] = 0; if ( v2 != v3(v1) ) *((_BYTE *)v1 + 1925) = 1; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 128))(v1, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v1 + 240))(v1, 1); (*(void (__thiscall **)(_DWORD *))(*v1 + 468))(v1); sub_6A9BC0(&unk_B683E8, *((_WORD *)v1 + 274)); } //----- (006549B0) -------------------------------------------------------- char __thiscall sub_6549B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ebx _DWORD *v4; // eax _DWORD *v5; // edi char v6; // al char v8; // [esp+10h] [ebp-10h] int v9; // [esp+1Ch] [ebp-4h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*this + 648))() || sub_6FDCD0((_DWORD *)v2[676]) ) return 0; sub_65CE60(v2); sub_65CE10(v2); sub_64DE20(v2 + 21); sub_673940(v2 + 194); sub_65B8B0(v2, 1, (unsigned int *)&v8, 0); v3 = (int)a2; v4 = sub_669410(&unk_AD8D28, (unsigned __int16)a2); v5 = v4; a2 = v4; if ( v4 ) InterlockedIncrement(v4 + 1); v9 = 0; if ( !v5 ) return 0; sub_65AD50(v2 + 174, (int *)&a2); v6 = *((_BYTE *)v2 + 2700); if ( !v6 ) v6 = *((_BYTE *)v2 + 944); *((_BYTE *)v2 + 2700) = v6; v2[568] = sub_64C7E0(v3); *((_BYTE *)v2 + 944) = 0; sub_652150(v2, v3); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 604))(v2, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v2 + 336))(v2, 1); (*(void (__thiscall **)(_DWORD *))(*v2 + 652))(v2); v9 = -1; if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); return 1; } //----- (00654B20) -------------------------------------------------------- int __thiscall sub_654B20(_BYTE *this, int a2) { _BYTE *v2; // esi int result; // eax char v4; // al char v5; // ST1C_1 _DWORD *v6; // eax int v7; // edi _DWORD *v8; // ebx int (__thiscall *v9)(_BYTE *); // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 648))(); if ( (_BYTE)result ) { v4 = v2[2700]; v5 = v2[938]; v2[944] = v4; v6 = sub_66E1C0(&unk_AD8D28, v4, v5, 1); v7 = *((_DWORD *)v2 + 174); v8 = v6; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v2 + 174) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } *((_DWORD *)v2 + 568) = 0; sub_652150(v2, 0xFFFF); (*(void (__thiscall **)(_BYTE *, signed int))(*(_DWORD *)v2 + 604))(v2, 1); (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v2 + 336))(v2, 0); v2[2700] = 0; sub_65CE60(v2); sub_65CE10(v2); v9 = *(int (__thiscall **)(_BYTE *))(*(_DWORD *)v2 + 344); *((_DWORD *)v2 + 482) = 0; result = v9(v2); } return result; } //----- (00654C10) -------------------------------------------------------- void __usercall sub_654C10(int *a1@, int a2@, int a3@) { int *v3; // esi _DWORD *v4; // ecx char v5; // al int v6; // eax void (__thiscall *v7)(int *); // eax int *v8; // ecx int v9; // eax v3 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 488))() ) { if ( v3[642] ) { (*(void (__thiscall **)(int *))(*v3 + 384))(v3); v4 = (_DWORD *)v3[642]; if ( v3[637] != v4[7] ) { if ( v4 ) sub_4106E0(v4, v3[637]); sub_65B0E0(v3 + 637, v3[637]); } } return; } if ( !*((_BYTE *)v3 + 2700) && !*((_BYTE *)v3 + 944) ) { if ( *((_BYTE *)v3 + 1936) != 4 ) { if ( *((_BYTE *)v3 + 2680) || (v5 = *((_BYTE *)v3 + 1924), v5 == 4) || v5 == 5 || (v6 = v3[678]) == 0 || !*(_BYTE *)(v6 + 82) ) { if ( !*((_BYTE *)v3 + 2510) ) { v7 = *(void (__thiscall **)(int *))(*v3 + 348); v8 = v3; LABEL_26: v7(v8); return; } } } goto LABEL_27; } if ( *((_BYTE *)v3 + 2680) != 1 ) { if ( !sub_651680((int)v3) && !*((_BYTE *)v3 + 2510) ) { v9 = v3[678]; if ( !v9 || *(_DWORD *)(v9 + 99) != 24 ) { v7 = *(void (__thiscall **)(int *))(*v3 + 348); v8 = v3; goto LABEL_26; } } LABEL_27: sub_65F070((int)v3, a2, a3, 100000, 1000); return; } if ( !sub_65F070((int)v3, a2, a3, 100000, 1000) && (*(unsigned __int8 (__thiscall **)(int *))(*v3 + 648))(v3) ) sub_65F070((int)v3, a2, a3, 100000, 2000); } //----- (00654D50) -------------------------------------------------------- char __userpurge sub_654D50@(_BYTE *a1@, int a2@, int a3) { char v3; // al v3 = a3; a1[2725] = a3; if ( (_BYTE)a3 || a1[2726] ) v3 = 1; LOBYTE(a3) = v3; a1[1460] = v3; return sub_674FF0((int)(a1 + 776), a2, a3); } //----- (00654D90) -------------------------------------------------------- char __userpurge sub_654D90@(_BYTE *a1@, int a2@, int a3) { bool v3; // zf char v4; // al v3 = a1[2725] == 0; v4 = a3; a1[2726] = a3; if ( !v3 || (_BYTE)a3 ) v4 = 1; LOBYTE(a3) = v4; a1[1460] = v4; return sub_674FF0((int)(a1 + 776), a2, a3); } //----- (00654DD0) -------------------------------------------------------- void __thiscall sub_654DD0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // edi int v5; // eax v2 = this; if ( *((_BYTE *)this + 16) != (_BYTE)a2 ) { v3 = this[1] - *this; v4 = 0; *((_BYTE *)this + 16) = a2; if ( (signed int)(v3 & 0xFFFFFFFC) > 0 ) { do { if ( v4 < (v2[1] - *v2) >> 2 ) v5 = *(_DWORD *)(*v2 + 4 * v4); else v5 = 0; sub_6AB580(&unk_B91250, v5, a2, 0); ++v4; } while ( v4 < (v2[1] - *v2) >> 2 ); } } } //----- (00654E30) -------------------------------------------------------- void __thiscall sub_654E30(int this, int a2) { int v2; // edi int v3; // esi char v4; // bl int v5; // eax float *v6; // ecx int v7; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; if ( *(_DWORD *)(this + 544) != a2 ) { sub_85C6F0(*(_DWORD **)(this + 700)); sub_85C4D0(*(_DWORD **)(v3 + 700)); *(_DWORD *)(v3 + 544) = v2; } v4 = 1; sub_65B8B0((_DWORD *)v3, 1, (unsigned int *)&v7, 0); sub_65B8B0((_DWORD *)v3, 0, (unsigned int *)&a2, 0); if ( a2 == 100000 && v7 == 100000 ) { v5 = *(_DWORD *)(v3 + 696); if ( v5 ) { if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(v5 + 28) ) v4 = 0; } } if ( *(_BYTE *)(v3 + 2141) != *(_BYTE *)(v3 + 2140) || *(_BYTE *)(v3 + 1923) || v4 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 252))(v3) || sub_651560((_DWORD *)v3) || sub_65AC30((_DWORD *)(v3 + 1820)) || sub_662E50((_DWORD *)(v3 + 1696)) ) { v6 = *(float **)(v3 + 696); if ( v6 ) { if ( *(_BYTE *)(v3 + 2732) ) return; sub_803810(v6, *(float *)(v3 + 1492)); } if ( !*(_BYTE *)(v3 + 2732) ) { sub_65B320((int *)(v3 + 2548), *(float *)(v3 + 1492)); sub_85BED0(*(_DWORD ***)(v3 + 700), *(float *)(v3 + 1492), 1); } } } //----- (00654F60) -------------------------------------------------------- _DWORD *__thiscall sub_654F60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; v2 = *(_DWORD *)(this[174] + 12); (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 116))(*(_DWORD *)(this[174] + 12), this[532], 0); return sub_861480((_DWORD *)v1[532], v2); } //----- (00654FD0) -------------------------------------------------------- double __thiscall sub_654FD0(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // eax int v5; // eax double result; // st7 float v7; // [esp+Ch] [ebp+8h] float v8; // [esp+Ch] [ebp+8h] float v9; // [esp+10h] [ebp+Ch] v3 = a2; if ( !a2 ) return 1.0; v4 = sub_65D700(this, a3); if ( !v4 || !*(_DWORD *)(v4 + 36) ) return 1.0; v9 = *(float *)(v4 + 48); v7 = 0.001; v5 = sub_4DCF40((const char *)(v3 + 212)); if ( v5 ) v7 = (double)*(unsigned int *)(v5 + 43) * 0.001000000047497451; if ( 0.0 == v9 ) return 1.0; if ( 0.0 == v7 ) return 1.0; v8 = v9 / v7; result = v8; if ( v8 <= 0.0 ) return 1.0; return result; } //----- (00655080) -------------------------------------------------------- char __thiscall sub_655080(_DWORD *this, int a2, float a3, int a4) { _DWORD *v4; // esi int v5; // eax unsigned __int16 *v6; // edi int v7; // eax int v8; // ebx int v9; // edi int *v10; // eax int v11; // eax char v12; // cl const char *v13; // eax _DWORD *v14; // ecx int v15; // ebx int v16; // eax int v18; // eax int v19; // ebx float v20; // ST08_4 int v21; // [esp+14h] [ebp-4h] int v22; // [esp+20h] [ebp+8h] v4 = this; v5 = sub_4DCEF0(a2); v6 = (unsigned __int16 *)v5; v21 = v5; if ( !v5 ) return 0; v7 = sub_4DCF40((const char *)(v5 + 212)); if ( *(_DWORD *)(v6 + 17) == 358 ) { if ( sub_662E50(v4 + 424) ) *((_WORD *)v4 + 1366) = 256; else *((_BYTE *)v4 + 2732) = 1; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); } else if ( v7 && (*(_DWORD *)(v7 + 47) == 110 || *(_DWORD *)(v7 + 55) == 110 || *(_DWORD *)(v7 + 63) == 110 || *(_DWORD *)(v7 + 71) == 110) ) { if ( sub_662E50(v4 + 424) ) *((_WORD *)v4 + 1366) = 256; else *((_BYTE *)v4 + 2732) = 1; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); } if ( sub_650090(v4, *v6, a3, a4) != 1 ) return 0; v8 = *v6; v9 = dword_ACDA80; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v8) ) return 0; if ( (unsigned __int16)v8 > *(_WORD *)(v9 + 200) ) return 0; v10 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v8); if ( !*v10 ) return 0; v11 = *v10; v22 = v11; if ( !v11 ) return 0; if ( *((_BYTE *)v4 + 2496) ) return 0; v12 = *(_BYTE *)(v11 + 329); v13 = (const char *)(v11 + 329); if ( v12 == 45 || v12 == 32 ) return 0; v14 = (_DWORD *)v4[540]; if ( !v14 || (v15 = sub_64BA20(v14, v13)) == 0 ) { (*(void (__thiscall **)(_DWORD *))(*v4 + 340))(v4); return 0; } sub_65B8B0(v4, 0, (unsigned int *)&a4, 0); if ( a4 == 600000 || a4 == 700000 ) { v16 = v4[541]; if ( !v16 ) return 0; v9 = v16 + 2; if ( !strncmp((const char *)(v16 + 2), "FatalShadow", 0xBu) ) { if ( strncmp((const char *)(v22 + 2), "StaShadowBinding", 0x10u) ) return 0; goto LABEL_34; } if ( strncmp((const char *)v9, "SD_KingCrabSkill07_N", 0x14u) || strncmp((const char *)(v22 + 2), "StaSDVale01_Wheel", 0x11u) ) { return 0; } } LABEL_34: if ( sub_662E50(v4 + 424) == 1 ) sub_662E00((int)(v4 + 424), 1); sub_65B390(v4); if ( sub_65CF20(v4, v15, v9, (char *)(v15 + 2), 0) == 1 ) { v18 = *(_DWORD *)(v15 + 108); if ( v18 == 45 ) { (*(void (__stdcall **)(_DWORD))(v4[21] + 8))(1.0); return 1; } v19 = v4[21]; v20 = sub_654FD0(v4, v21, v18); (*(void (__thiscall **)(_DWORD *, _DWORD))(v19 + 8))(v4 + 21, LODWORD(v20)); } return 1; } // ACDA80: using guessed type int dword_ACDA80; //----- (00655330) -------------------------------------------------------- int __thiscall sub_655330(_DWORD *this, unsigned __int16 a2) { _DWORD *v2; // esi int result; // eax unsigned __int16 *v4; // edi int v5; // eax v2 = this; result = sub_4DCEF0(a2); v4 = (unsigned __int16 *)result; if ( result ) { v5 = sub_4DCF40((const char *)(result + 212)); if ( *(_DWORD *)(v4 + 17) == 358 || v5 && (*(_DWORD *)(v5 + 47) == 110 || *(_DWORD *)(v5 + 55) == 110 || *(_DWORD *)(v5 + 63) == 110 || *(_DWORD *)(v5 + 71) == 110) ) { if ( sub_65C980(v2) && !sub_65B9D0(v2, 500000) ) (*(void (__thiscall **)(_DWORD *))(*v2 + 340))(v2); if ( sub_662E50(v2 + 424) ) (*(void (__thiscall **)(_DWORD *))(*v2 + 340))(v2); *((_BYTE *)v2 + 2732) = 0; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); } result = sub_64FB00(v2, *v4, 0); } return result; } //----- (006553F0) -------------------------------------------------------- int __thiscall sub_6553F0(_DWORD *this, int a2) { int result; // eax int v3; // eax if ( a2 ) { v3 = sub_65D700(this, *(_DWORD *)(a2 + 108)); result = sub_6639E0(v3); if ( !result ) result = sub_4DCEA0(0); } else { OutputDebugStringA("shoot! Use Default\n"); result = sub_4DCEA0(0); } return result; } //----- (00655440) -------------------------------------------------------- void __thiscall sub_655440(void *this, int a2) { int v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // eax signed int v7; // eax _DWORD *v8; // eax _DWORD *v9; // esi int v10; // eax int v11; // ST20_4 _DWORD *v12; // eax _DWORD *v13; // edi int v14; // eax _BYTE *v15; // edi int v16; // eax _DWORD *v17; // eax int v18; // esi int v19; // ebx int *v20; // eax int v21; // esi int v22; // eax int v23; // eax int v24; // eax double v25; // st7 bool v26; // sf int v27; // eax int v28; // eax int v29; // [esp+24h] [ebp-4h] _DWORD *v30; // [esp+30h] [ebp+8h] signed int v31; // [esp+30h] [ebp+8h] v2 = *(unsigned __int16 *)(a2 + 20); v3 = dword_ACDA7C; v4 = (int)this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA7C + 16))(dword_ACDA7C, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v2); if ( *v5 ) { v6 = *v5; if ( v6 ) { v7 = *(_DWORD *)(v6 + 34); if ( v7 > 463 ) { switch ( v7 ) { case 556: goto LABEL_49; case 627: v23 = sub_4DCEF0(0x273u); if ( !v23 ) return; v24 = sub_4DCF40((const char *)(v23 + 212)); if ( !v24 ) return; v31 = *(_DWORD *)(v24 + 43); v25 = (double)v31; v26 = v31 < 0; goto LABEL_62; case 628: v27 = sub_4DCEF0(0x274u); if ( !v27 ) return; v28 = sub_4DCF40((const char *)(v27 + 212)); if ( !v28 ) return; v26 = *(_DWORD *)(v28 + 43) < 0; goto LABEL_61; case 746: v22 = sub_4DCEF0(0x2EAu); goto LABEL_58; default: return; } } else if ( v7 == 463 ) { LABEL_49: if ( !*(_BYTE *)(v4 + 2872) ) { v22 = sub_4DCEF0(0x1CFu); LABEL_58: if ( v22 ) { v28 = sub_4DCF40((const char *)(v22 + 212)); if ( v28 ) { v26 = *(_DWORD *)(v28 + 43) < 0; LABEL_61: v25 = (double)*(signed int *)(v28 + 43); LABEL_62: if ( v26 ) v25 = v25 + 4294967300.0; *(float *)(v4 + 2896) = v25 / 1000.0; sub_65AC70((float *)v4, 1); } } } } else { switch ( v7 ) { case 367: *(_BYTE *)(v4 + 2741) = 1; sub_8D06A0((float *)(v4 + 2744), flt_ACCFCC); *(float *)(v4 + 2764) = 0.039999999; break; case 372: sub_65F350((_DWORD *)v4, COERCE_FLOAT(1)); if ( sub_64F900((_DWORD *)v4, 376) ) { if ( *(_DWORD *)(v4 + 20) ) { v17 = *(_DWORD **)(v4 + 12); if ( v17 ) { while ( 1 ) { v18 = v17[2]; v30 = (_DWORD *)*v17; if ( v18 ) { v29 = sub_4DBF00(*(unsigned __int16 *)(v18 + 20)); v19 = sub_4DBF50(*(unsigned __int16 *)(v18 + 20)); if ( v29 ) { if ( v19 && *(_DWORD *)(v29 + 34) == 376 ) { v20 = *(int **)(v18 + 44); v21 = v18 + 44; if ( v20 ) { sub_6ACDF0(&unk_B91250, v20); *(_DWORD *)v21 = 0; sub_6AF8E0( &unk_B91250, v21, (char *)(v19 + 398), v4, *(_DWORD *)(v19 + 430), flt_ACCFCC, 1, 0, 0, 1); *(_BYTE *)(*(_DWORD *)v21 + 140) = 1; } } } } if ( !v30 ) break; v17 = v30; } } } } break; case 373: if ( *(_DWORD *)(v4 + 676) == *((_DWORD *)dword_AD8EBC + 169) ) { v8 = (_DWORD *)sub_672FD0((char *)(v4 + 776)); sub_6618E0(v8, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_672F60((_BYTE *)(v4 + 776), 1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 488))(v4) && !sub_661030((_BYTE *)(v4 + 2576)) ) { sub_6618E0((_DWORD *)(v4 + 2576), "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_661E70((_BYTE *)(v4 + 2576), 1); } sub_6618E0((_DWORD *)(v4 + 2772), "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_661E70((_BYTE *)(v4 + 2772), 1); if ( (char *)v4 == dword_AD8EBC ) goto LABEL_67; if ( *(_DWORD *)(v4 + 20) ) { v9 = *(_DWORD **)(v4 + 12); while ( v9 ) { v10 = v9[2]; v9 = (_DWORD *)*v9; if ( v10 && *(_DWORD *)(v10 + 44) ) (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v10 + 44) + 84))( *(_DWORD *)(v10 + 44), 0); } } *(_DWORD *)(v4 + 36) = 1; if ( (char *)v4 == dword_AD8EBC ) LABEL_67: *(_DWORD *)(v4 + 36) = 0; } v11 = *(_DWORD *)(v4 + 676); v12 = (_DWORD *)sub_6D3800(); if ( sub_6D3340(v12, v11) ) { *(_DWORD *)(v4 + 36) = 0; if ( (char *)v4 != dword_AD8EBC ) { if ( *(_DWORD *)(v4 + 20) ) { v13 = *(_DWORD **)(v4 + 12); while ( v13 ) { v14 = v13[2]; v13 = (_DWORD *)*v13; if ( v14 && *(_DWORD *)(v14 + 44) ) (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v14 + 44) + 84))( *(_DWORD *)(v14 + 44), 0); } } } } break; case 374: if ( (char *)v4 == dword_AD8EBC ) { v16 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v16 ) sub_56C390(*(_DWORD *)(v16 + 572)); } break; case 376: v15 = (_BYTE *)(v4 + 776); sub_672FE0(v15, 1); sub_673300(v15, (int *)3, 0, (int **)0x1A); sub_6734F0((int)v15, 1); sub_673300(v15, 0, 0, (int **)0x1B); break; default: return; } } } } } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACDA7C: using guessed type int dword_ACDA7C; //----- (00655980) -------------------------------------------------------- char __thiscall sub_655980(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // edi int v4; // edi int v5; // ecx int v7; // [esp+8h] [ebp-4h] v2 = this; v3 = sub_65B8B0(this, 0, (unsigned int *)&v7, 0); if ( v7 != 300000 && v7 != 600000 && v7 != 700000 && !sub_65C360(v2) ) return 0; if ( !v2[174] ) return 0; v4 = sub_65D700(v2, v3); if ( !v4 ) return 0; if ( !sub_65C360(v2) ) { if ( sub_6511D0(v2, 1) == 1 ) goto LABEL_9; return 0; } if ( !sub_6511D0(v2, 1) ) return 0; LABEL_9: if ( !v2[526] ) return 0; v5 = *(_DWORD *)v2[525]; if ( *(float *)(v5 + 8) > (double)*(float *)(v4 + 60) ) return 0; if ( a2 == 1 ) (*(void (__thiscall **)(_DWORD *, int))(*v2 + 628))(v2, v5); return 1; } //----- (00655A40) -------------------------------------------------------- void __thiscall sub_655A40(_DWORD *this, int a2) { int v2; // edi int v3; // esi int v4; // eax int v5; // esi int v6; // eax int *v7; // eax int v8; // ebx int v9; // ecx int *v10; // eax int v11; // esi int v12; // eax int v13; // eax int j; // eax int i; // eax char v16; // [esp+10h] [ebp-14h] int v17; // [esp+14h] [ebp-10h] float v18; // [esp+18h] [ebp-Ch] int v19; // [esp+1Ch] [ebp-8h] int v20; // [esp+20h] [ebp-4h] v2 = (int)this; if ( byte_AB66EE ) { v3 = sub_65B8B0(this, 0, 0, 0); v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 440))(v2) == 4 ? sub_65D700((_DWORD *)v2, *(_DWORD *)(v2 + 1868)) : sub_65D700((_DWORD *)v2, v3); if ( v4 && *(_DWORD *)(v4 + 68) == 1 ) { v5 = sub_65B8B0((_DWORD *)v2, 0, 0, 0); v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 440))(v2) == 4 ? sub_65D700( (_DWORD *)v2, *(_DWORD *)(v2 + 1868)) : sub_65D700((_DWORD *)v2, v5); v20 = v6; if ( v6 ) { v7 = *(int **)(v2 + 1944); v8 = *v7; v19 = v8; if ( (int *)v8 != v7 ) { do { v9 = *(_DWORD *)(v8 + 16); v10 = *(int **)(v9 + 4); v11 = *v10; v17 = *(_DWORD *)(v8 + 16); if ( (int *)v11 != v10 ) { do { v18 = *(float *)(v20 + 60) - *(float *)(v11 + 12); if ( v18 < 0.0 || v18 >= 0.1000000014901161 ) { if ( !*(_BYTE *)(v11 + 21) ) { v13 = *(_DWORD *)(v11 + 8); if ( *(_BYTE *)(v13 + 21) ) { for ( i = *(_DWORD *)(v11 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v11 != *(_DWORD *)(i + 8) ) break; v11 = i; } v11 = i; } else { v11 = *(_DWORD *)(v11 + 8); for ( j = *(_DWORD *)v13; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v11 = j; } } } else { v12 = *(_DWORD *)(v8 + 12); switch ( v12 ) { case 0: case 1: case 2: case 3: goto LABEL_19; case 4: if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 32))(v2) ) { if ( !sub_440FB0((float *)&unk_B67078) ) { v12 = *(_DWORD *)(v8 + 12); LABEL_19: if ( sub_651220(v2, v12) == 1 ) sub_693270(byte_ADB468, *(_DWORD *)(v11 + 16)); } } else if ( *(_WORD *)(v2 + 548) == *((_WORD *)dword_AD8EBC + 274) ) { sub_693270(byte_ADB468, *(_DWORD *)(v11 + 16)); } break; case 5: case 6: case 7: if ( !sub_440FB0((float *)&unk_B67078) && sub_651220(v2, *(_DWORD *)(v8 + 12)) == 1 ) sub_693270(byte_ADB468, *(_DWORD *)(v11 + 16)); break; case 8: (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v2 + 404))( v2, *(_DWORD *)(v11 + 16), LODWORD(flt_ACCFCC)); break; default: OutputDebugStringA(&byte_9F2E8C); break; } v11 = *sub_6CDBF0(*(_DWORD **)(v8 + 16), (int *)&v16, v11); v9 = v17; } } while ( v11 != *(_DWORD *)(v9 + 4) ); } sub_717D90(&v19); v8 = v19; } while ( v19 != *(_DWORD *)(v2 + 1944) ); } } } } } // AB66EE: using guessed type char byte_AB66EE; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00655CB0) -------------------------------------------------------- char __thiscall sub_655CB0(char *this, int a2, _DWORD *a3) { int v3; // ebx char *v4; // edi char v6; // al char *v7; // esi int v8; // eax int v9; // eax int v10; // eax int v11; // edi int v12; // [esp+10h] [ebp-20h] char *v13; // [esp+28h] [ebp-8h] char *Src; // [esp+2Ch] [ebp-4h] char *v15; // [esp+38h] [ebp+8h] char v16; // [esp+3Bh] [ebp+Bh] int v17; // [esp+3Ch] [ebp+Ch] v3 = a2; v4 = this; if ( !a2 ) return 0; v6 = this[2616]; v7 = this - 84; v16 = 0; Src = 0; v13 = this - 84; if ( !v6 ) v6 = v7[944]; if ( !sub_4DC110(v6, 11) ) { if ( !v7[2700] && !v7[944] ) { v8 = *((_DWORD *)v4 + 658); if ( !v8 ) goto LABEL_15; if ( *(_DWORD *)(v8 + 98) == 1 ) { v16 = 0; Src = (char *)(v8 + 102); goto LABEL_15; } } LABEL_14: v16 = 1; goto LABEL_15; } if ( sub_651840((_DWORD *)v4 - 21) != 10 && sub_651840((_DWORD *)v4 - 21) != 2 ) goto LABEL_14; v16 = 0; LABEL_15: if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*(_DWORD *)v7 + 648))((_DWORD *)v4 - 21) || (v9 = *((_DWORD *)v4 + 658)) == 0 ) { if ( !v16 ) goto LABEL_19; return sub_64D600((_DWORD *)(v3 + 16), v4 - 84, a3); } if ( *(_DWORD *)(v9 + 98) != 1 ) return sub_64D600((_DWORD *)(v3 + 16), v4 - 84, a3); Src = (char *)(v9 + 102); LABEL_19: v17 = *((_DWORD *)v4 + 537); if ( !Src ) Src = "Arrow"; if ( *(_DWORD *)(v3 + 28) ) { v15 = sub_664AB0(dword_AD8C90, *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 20) + 8) + 8)); if ( v15 ) { if ( *(_WORD *)(v3 + 38) != -1 ) { v10 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 4))(v4); if ( !sub_6AAF40(&unk_B91250, *(_WORD *)(v3 + 38), *(_WORD *)(v10 + 548)) ) { v11 = sub_663C70((_DWORD *)v4 + 515, 1, 1); if ( !v11 ) v11 = sub_6553F0(v7, v17); v12 = sub_64BD40((const char *)(v11 + 36)) == 9; if ( !sub_6AE840( &unk_B91250, Src, v11, (int)v13, (int)v15, flt_ACCFCC, 800.0, *(unsigned __int16 *)(v3 + 38), v3 + 16, v12, 0) ) sub_64D600((_DWORD *)(v3 + 16), v13, (_DWORD *)1); sub_438A70((_DWORD *)(v3 + 16)); } } } } return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00655EE0) -------------------------------------------------------- void __thiscall sub_655EE0(_DWORD *this, int a2, char *a3) { int v3; // ebx int v4; // esi int v5; // edi int v6; // edx int *v7; // eax int v8; // edi char *v9; // eax float **v10; // ecx float **v11; // ecx float *v12; // eax int v13; // ST0C_4 int v14; // ST10_4 int v15; // ST14_4 int v16; // ST18_4 const CHAR *v17; // eax char *v18; // eax char v19; // cl char v20; // cl bool v21; // zf bool v22; // ST20_1 float *v23; // eax bool v24; // al float *v25; // eax int v26; // eax int v27; // eax int v28; // eax int v29; // eax int v30; // eax int v31; // eax int v32; // [esp+28h] [ebp-20h] float **v33; // [esp+38h] [ebp-10h] void (__stdcall ***v34)(signed int); // [esp+3Ch] [ebp-Ch] void (__stdcall ***v35)(_DWORD); // [esp+40h] [ebp-8h] char *Src; // [esp+44h] [ebp-4h] char *v37; // [esp+54h] [ebp+Ch] v3 = a2; v4 = (int)this; sub_64FD50(this, a2, (int)a3); sub_655440((void *)v4, a2); v5 = dword_ACDA80; v6 = *(_DWORD *)dword_ACDA80; Src = (char *)*(unsigned __int16 *)(a2 + 20); if ( !(*(unsigned __int8 (__thiscall **)(int, char *))(v6 + 16))(dword_ACDA80, Src) ) return; if ( (unsigned __int16)Src > *(_WORD *)(v5 + 200) ) return; v7 = (int *)(*(_DWORD *)(v5 + 196) + 4 * (unsigned __int16)Src); if ( !*v7 ) return; v8 = *v7; if ( !*v7 ) return; if ( *(_DWORD *)(a2 + 40) ) { sub_6ACDF0(&unk_B91250, *(int **)(a2 + 40)); *(_DWORD *)(a2 + 40) = 0; } if ( *(_DWORD *)(a2 + 44) ) { sub_6ACDF0(&unk_B91250, *(int **)(a2 + 44)); *(_DWORD *)(a2 + 44) = 0; } if ( *(_DWORD *)(v4 + 24) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 248))(v4) && !*(_BYTE *)(v4 + 2496) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 340))(v4); } if ( *((_WORD *)dword_AD8EBC + 274) == *(_WORD *)(v4 + 548) && (*((_DWORD *)dword_AD8EBC + 6) || *((_DWORD *)dword_AD8EBC + 8) > 0) ) { v33 = (float **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v33 ) { v9 = (char *)*sub_49F490(&v35); Src = v9; if ( v35 ) { v34 = v35; if ( !InterlockedDecrement((volatile LONG *)v35 + 1) && v34 ) (**v34)(1); v9 = Src; } if ( v9 ) { if ( v9[52] ) { v10 = v33; v9[52] = 0; v11 = (float **)v10[305]; v33 = v11; if ( v11 ) { sub_5E9180(v11); v12 = sub_419EE0((float *)&v32, 0xFFu, 0x90u, 0, 0xFFu); v13 = *(_DWORD *)v12; v14 = *((_DWORD *)v12 + 1); v15 = *((_DWORD *)v12 + 2); v16 = *((_DWORD *)v12 + 3); v17 = sub_40A910(1011971465); sub_5E9030(v33, (int)v17, v13, v14, v15, v16, 0, 3.0); } } } } } *(_BYTE *)(a2 + 48) = 45; *(_BYTE *)(a2 + 49) = 0; if ( (_BYTE)a3 ) return; v18 = (char *)(v8 + 434); do { v19 = *v18; v18[a2 + 48 - (v8 + 434)] = *v18; ++v18; } while ( v19 ); v20 = *(_BYTE *)(v8 + 361); v37 = (char *)(v8 + 361); if ( v20 == 45 ) { LABEL_53: if ( *(_BYTE *)(v8 + 398) != 45 ) { if ( (char *)v4 == dword_AD8EBC ) { sub_6AF8E0(&unk_B91250, a2 + 44, (char *)(v8 + 398), v4, *(_DWORD *)(v8 + 430), flt_ACCFCC, 1, 0, 0, 1); } else if ( sub_64FA00((_DWORD *)v4, 373) ) { sub_6AF8E0(&unk_B91250, a2 + 44, (char *)(v8 + 398), v4, *(_DWORD *)(v8 + 430), flt_ACCFCC, 1, 0, 0, 0); } else { sub_6AF8E0(&unk_B91250, a2 + 44, (char *)(v8 + 398), v4, *(_DWORD *)(v8 + 430), flt_ACCFCC, 1, 0, 0, 1); } v27 = *(_DWORD *)(a2 + 44); if ( v27 ) *(_BYTE *)(v27 + 140) = 1; } v3 = a2; goto LABEL_62; } v21 = *(_BYTE *)(v8 + 398) == 45; Src = (char *)(v8 + 398); if ( v21 ) { if ( v20 != 45 ) { if ( !strcmp((const char *)(v8 + 2), "StaTimeAttack") || !strcmp((const char *)(v8 + 2), "StaTimeAttackMini") ) { sub_6AFA60( &unk_B91250, a2 + 40, v37, v4, *(_DWORD *)(v8 + 393), SLODWORD(flt_ACCFCC), 0, *(unsigned __int16 *)(a2 + 20)); } else if ( (char *)v4 == dword_AD8EBC ) { sub_6AF8E0(&unk_B91250, a2 + 40, v37, v4, *(_DWORD *)(v8 + 393), flt_ACCFCC, 0, 0, 0, 1); } else if ( sub_64FA00((_DWORD *)v4, 373) ) { sub_6AF8E0(&unk_B91250, a2 + 40, v37, v4, *(_DWORD *)(v8 + 393), flt_ACCFCC, 0, 0, 0, 0); } else { sub_6AF8E0(&unk_B91250, a2 + 40, v37, v4, *(_DWORD *)(v8 + 393), flt_ACCFCC, 0, 0, 0, 1); } LABEL_62: if ( !sub_64F870((_DWORD *)v4) ) { v28 = *(_DWORD *)(v3 + 40); if ( v28 ) sub_6AB580(&unk_B91250, v28, 0, 1); v29 = *(_DWORD *)(v3 + 44); if ( v29 ) sub_6AB580(&unk_B91250, v29, 0, 1); } v30 = *(_DWORD *)(v3 + 40); if ( v30 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)(v30 + 8) + 4))(v30 + 8, v3); v31 = *(_DWORD *)(v3 + 44); if ( v31 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)(v31 + 8) + 4))(v31 + 8, v3); return; } goto LABEL_53; } if ( (char *)v4 == dword_AD8EBC ) { v23 = sub_6AF730(&unk_B91250, (char *)(v8 + 361), v4, *(_DWORD *)(v8 + 393), flt_ACCFCC, 1); } else { v22 = sub_64FA00((_DWORD *)v4, 373) == 0; v23 = sub_6AF730(&unk_B91250, v37, v4, *(_DWORD *)(v8 + 393), flt_ACCFCC, v22); } *(_DWORD *)(a2 + 40) = v23; if ( v23 ) { if ( (char *)v4 == dword_AD8EBC || (v24 = sub_64FA00((_DWORD *)v4, 373)) != 0 ) { v25 = sub_6AF730(&unk_B91250, Src, v4, *(_DWORD *)(v8 + 430), flt_ACCFCC, 0); } else { if ( *(_DWORD *)(a2 + 40) ) v24 = 1; v25 = sub_6AF730(&unk_B91250, Src, v4, *(_DWORD *)(v8 + 430), flt_ACCFCC, v24 == 0); } *(_DWORD *)(a2 + 44) = v25; if ( v25 ) { *((_BYTE *)v25 + 140) = 1; v26 = *(_DWORD *)(a2 + 40); if ( v26 ) { *(_DWORD *)(v26 + 144) = *(_DWORD *)(a2 + 44); sub_6AAD40(*(_DWORD *)(a2 + 40)); } goto LABEL_62; } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACDA80: using guessed type int dword_ACDA80; //----- (00656460) -------------------------------------------------------- char __thiscall sub_656460(float *this, int a2) { float *v2; // esi int *v3; // eax unsigned __int8 v4; // al int v5; // ebx int v6; // edi int v7; // ecx float v8; // ST18_4 int (__thiscall *v9)(float *, _DWORD, _DWORD, _DWORD); // edx v2 = this; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)this + 492))(); if ( (_BYTE)v3 ) { v4 = *((_BYTE *)v2 + 2690); if ( v4 <= 1u ) { LOBYTE(v3) = sub_654750(v2, 0); } else { if ( v4 != 2 || !*((_BYTE *)v2 + 2688) ) { LABEL_8: LOBYTE(v3) = (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 340))(v2); goto LABEL_9; } LOBYTE(v3) = sub_654750(v2, 0); *((_BYTE *)v2 + 2688) = 0; } if ( (_BYTE)v3 ) goto LABEL_9; goto LABEL_8; } LABEL_9: if ( !*((_BYTE *)v2 + 2690) ) { v5 = *(unsigned __int16 *)(*((_DWORD *)v2 + 679) + 174); v6 = dword_ACDA78; LOBYTE(v3) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA78 + 16))(dword_ACDA78, v5); if ( (_BYTE)v3 ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v3 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v5); if ( *v3 ) v7 = *v3; else v7 = 0; } else { v7 = 0; } } else { v7 = 0; } if ( *(_DWORD *)(v7 + 15) ) { v8 = flt_ACCFD0 + v2[671]; v2[671] = v8; v3 = (int *)(signed __int64)(v8 * 1000.0); if ( *(_DWORD *)(v7 + 19) < (unsigned int)v3 ) { v9 = *(int (__thiscall **)(float *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 328); v2[671] = 0.0; *((_BYTE *)v2 + 2690) = 1; LOBYTE(v3) = v9(v2, *(_DWORD *)(v7 + 15), 0, 0); } } } return (char)v3; } // ACCFD0: using guessed type float flt_ACCFD0; // ACDA78: using guessed type int dword_ACDA78; //----- (006565A0) -------------------------------------------------------- void __thiscall sub_6565A0(_DWORD *this) { _DWORD *v1; // edi int v2; // eax int v3; // esi int v4; // ebx unsigned int v5; // edi int v6; // esi const char *v7; // ecx unsigned int v8; // [esp+4h] [ebp-Ch] char **v9; // [esp+8h] [ebp-8h] float v10; // [esp+Ch] [ebp-4h] v1 = this; v9 = (char **)this; if ( this[174] ) { v2 = sub_65B8B0(this, 0, 0, 0); v3 = sub_65D700(v1, v2); if ( v3 ) { (*(void (__thiscall **)(_DWORD *))(*v1 + 632))(v1); v4 = *(_DWORD *)(v3 + 32); if ( v4 ) { v5 = 0; if ( *(_DWORD *)(v4 + 12) ) { do { v6 = *(_DWORD *)(v4 + 16); v7 = *(const char **)(v6 + 8 * v5 + 4); v8 = *(_DWORD *)(v4 + 12); if ( v7 ) { if ( !strcmp((const char *)&unk_9F2EB4, v7) ) { v10 = *(float *)(v6 + 8 * v5); sub_65B490(v9 + 525, (int)&v10); } } ++v5; } while ( v5 < v8 ); } } } } } //----- (00656660) -------------------------------------------------------- _DWORD **__thiscall sub_656660(_DWORD *this) { _DWORD *v1; // esi _DWORD ***v2; // ecx _DWORD **result; // eax _DWORD **v4; // edi v1 = this; v2 = (_DWORD ***)this[525]; result = *v2; if ( *v2 != v2 ) { do { v4 = (_DWORD **)*result; if ( result != (_DWORD **)v1[525] ) { *result[1] = v4; (*result)[1] = result[1]; operator delete(result); --v1[526]; } result = v4; } while ( v4 != (_DWORD **)v1[525] ); } return result; } //----- (006566B0) -------------------------------------------------------- void __thiscall sub_6566B0(void **this, void *a2) { void **v2; // esi v2 = this; if ( a2 != this[525] ) { **((_DWORD **)a2 + 1) = *(_DWORD *)a2; *(_DWORD *)(*(_DWORD *)a2 + 4) = *((_DWORD *)a2 + 1); operator delete(a2); v2[526] = (char *)v2[526] - 1; } } //----- (006566F0) -------------------------------------------------------- _DWORD **__thiscall sub_6566F0(_DWORD *this) { _DWORD *v1; // esi _DWORD ***v2; // ecx _DWORD **result; // eax _DWORD **v4; // edi v1 = this; v2 = (_DWORD ***)this[171]; result = *v2; if ( *v2 != v2 ) { do { v4 = (_DWORD **)*result; if ( result != (_DWORD **)v1[171] ) { *result[1] = v4; (*result)[1] = result[1]; operator delete(result); --v1[172]; } result = v4; } while ( v4 != (_DWORD **)v1[171] ); } return result; } //----- (00656740) -------------------------------------------------------- void *__thiscall sub_656740(void **this) { void **v1; // esi int v2; // edi int *v3; // eax const void *v4; // ecx void *v5; // edi void *result; // eax v1 = this; v2 = 0; if ( (signed int)(((_BYTE *)this[1] - (_BYTE *)*this) & 0xFFFFFFFC) > 0 ) { do { if ( v2 < ((_BYTE *)v1[1] - (_BYTE *)*v1) >> 2 ) v3 = (int *)*((_DWORD *)*v1 + v2); else v3 = 0; sub_6ACDF0(&unk_B91250, v3); ++v2; } while ( v2 < ((_BYTE *)v1[1] - (_BYTE *)*v1) >> 2 ); } v4 = v1[1]; v5 = *v1; result = (void *)(((_BYTE *)v1[1] - (_BYTE *)*v1) >> 2); if ( result ) { if ( v5 != v4 ) { result = memcpy_0(v5, v4, 0); v1[1] = v5; } } return result; } //----- (006567C0) -------------------------------------------------------- char __thiscall sub_6567C0(_DWORD *this, int a2) { int v2; // esi float *v3; // edi float *v4; // eax float v5; // ST10_4 float v6; // ST14_4 float v7; // ST18_4 float v8; // ST24_4 char v9; // al int v10; // edx void (__thiscall *v11)(int, _DWORD); // eax bool v12; // zf char v13; // cl int v14; // edx void (__thiscall *v15)(int, _DWORD); // eax int v16; // eax int v17; // ecx char v18; // al int v19; // eax float v21; // [esp+18h] [ebp-Ch] int v22; // [esp+1Ch] [ebp-8h] float v23; // [esp+20h] [ebp-4h] v2 = (int)this; v3 = (float *)this[175]; v4 = (float *)sub_693030(byte_ADB468); v5 = *v4 - v3[22]; v6 = v4[1] - v3[23]; v7 = v4[2] - v3[24]; v8 = v6 * v6 + v5 * v5 + v7 * v7; v23 = sqrt(v8); v12 = *(_DWORD *)(v2 + 40) == 0; v21 = (double)*((unsigned int *)dword_AD8EBC + 1361); *(_BYTE *)(v2 + 1923) = 0; if ( v12 ) { v9 = dword_AD8EBC[2700]; if ( !v9 ) v9 = dword_AD8EBC[944]; if ( v9 != 15 ) { v10 = *(_DWORD *)v2; if ( *(_DWORD *)(v2 + 2164) ) v11 = *(void (__thiscall **)(int, _DWORD))(v10 + 596); else v11 = *(void (__thiscall **)(int, _DWORD))(v10 + 592); v11(v2, *(float *)(v2 + 1492)); *(_WORD *)(*(_DWORD *)(v2 + 700) + 28) |= 1u; if ( !*(_DWORD *)(v2 + 696) ) { v12 = *(_DWORD *)(*(_DWORD *)(v2 + 712) + 192) == 0; goto LABEL_43; } goto LABEL_44; } } if ( *(_BYTE *)(v2 + 2509) || sub_6516C0((_BYTE *)v2) || *(_BYTE *)(v2 + 2510) || v23 < sub_65B1B0(v2) && *(_BYTE *)(v2 + 1482) && (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 12))(v2) ) { v14 = *(_DWORD *)v2; if ( *(_DWORD *)(v2 + 2164) ) v15 = *(void (__thiscall **)(int, _DWORD))(v14 + 596); else v15 = *(void (__thiscall **)(int, _DWORD))(v14 + 592); v15(v2, *(float *)(v2 + 1492)); if ( *(_BYTE *)(v2 + 1480) == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 648))(v2) || sub_672F50((_BYTE *)(v2 + 776)) || *(_BYTE *)(v2 + 2140) ) { sub_673B40(v2 + 776, 0); sub_6A6D60(v2 + 60, 0); sub_654DD0((_DWORD *)(v2 + 524), 0); } else { LOBYTE(v22) = byte_AB66F5; sub_673B40(v2 + 776, v22); sub_654DD0((_DWORD *)(v2 + 524), v22); sub_6A6D60(v2 + 60, v22); } } if ( *(_DWORD *)(v2 + 2924) ) *(_BYTE *)(v2 + 1922) = 1; if ( !*(_BYTE *)(v2 + 1922) && !sub_6516C0((_BYTE *)v2) && !*(_BYTE *)(v2 + 2510) ) { v16 = *(_DWORD *)(v2 + 2712); if ( !v16 || !sub_4DD9E0((char *)(v16 + 2)) ) sub_6514A0((float *)v2); } if ( dword_AD8EBC != (char *)v2 ) { if ( *(_BYTE *)(v2 + 1922) ) { v17 = *(_DWORD *)(v2 + 700); if ( *(_BYTE *)(v17 + 28) & 1 ) { if ( v23 < 500.0 ) *(_WORD *)(v17 + 28) &= 0xFFFEu; } } } v12 = *(_DWORD *)(v2 + 696) == 0; *(_BYTE *)(v2 + 1923) = 1; if ( v12 ) { v12 = *(_DWORD *)(*(_DWORD *)(v2 + 712) + 192) == 0; LABEL_43: if ( v12 ) goto LABEL_45; } LABEL_44: *(_BYTE *)(v2 + 1922) = 1; goto LABEL_45; } if ( *(_BYTE *)(v2 + 1922) ) { sub_651500((float *)v2); sub_673B40(v2 + 776, 0); sub_654DD0((_DWORD *)(v2 + 524), 0); sub_6A6D60(v2 + 60, 0); } v13 = *(_BYTE *)(v2 + 2140); *(_BYTE *)(v2 + 1922) = 0; *(_BYTE *)(v2 + 2141) = v13; *(_BYTE *)(v2 + 2140) = 1; LABEL_45: if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 12))(v2) ) { if ( *(_BYTE *)(v2 + 1936) == 4 ) return 1; if ( !*(_BYTE *)(v2 + 2680) ) { v18 = *(_BYTE *)(v2 + 1924); if ( v18 != 4 && v18 != 5 ) { v19 = *(_DWORD *)(v2 + 2712); if ( v19 ) { if ( *(_BYTE *)(v19 + 82) ) return 1; } } } if ( v23 <= (double)v21 ) return 1; } if ( !*(_DWORD *)(v2 + 40) ) return 1; sub_673B40(v2 + 776, 0); sub_654DD0((_DWORD *)(v2 + 524), 0); sub_6A6D60(v2 + 60, 0); return 0; } // AB66F5: using guessed type char byte_AB66F5; //----- (00656B40) -------------------------------------------------------- int *__thiscall sub_656B40(_DWORD *this) { _DWORD *v1; // edi int *result; // eax int *v3; // esi int v4; // eax char v5; // [esp+8h] [ebp-4h] v1 = this; result = (int *)this[486]; v3 = (int *)*result; if ( (int *)*result != result ) { do { result = sub_6CDE90((_DWORD *)v3[4], (int *)&v5, **(_DWORD ***)(v3[4] + 4), *(_DWORD **)(v3[4] + 4)); if ( !*((_BYTE *)v3 + 21) ) { v4 = v3[2]; if ( *(_BYTE *)(v4 + 21) ) { for ( result = (int *)v3[1]; !*((_BYTE *)result + 21); result = (int *)result[1] ) { if ( v3 != (int *)result[2] ) break; v3 = result; } v3 = result; } else { v3 = (int *)v3[2]; for ( result = *(int **)v4; !*((_BYTE *)result + 21); result = (int *)*result ) v3 = result; } } } while ( v3 != (int *)v1[486] ); } return result; } //----- (00656BC0) -------------------------------------------------------- char __thiscall sub_656BC0(void *this, int a2) { int v2; // esi char result; // al v2 = (int)this; result = (*(int (**)(void))(*(_DWORD *)this + 44))(); if ( result ) { sub_65B210(v2, 1); if ( *(_BYTE *)(v2 + 2700) || (result = *(_BYTE *)(v2 + 944)) != 0 ) result = (unsigned int)sub_656740((void **)(v2 + 524)); if ( !*(_DWORD *)(v2 + 696) ) { if ( a2 ) (*(void (__thiscall **)(int, int, int))(*(_DWORD *)v2 + 64))(v2, a2 + 33, a2 + 37); result = (*(int (__thiscall **)(int, signed int, _DWORD))(*(_DWORD *)v2 + 600))(v2, 1, 0); } } return result; } //----- (00656C30) -------------------------------------------------------- char __thiscall sub_656C30(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi char result; // al _DWORD *v4; // ecx bool v5; // bl void *v6; // [esp+Ch] [ebp-2Ch] int v7; // [esp+1Ch] [ebp-1Ch] unsigned int v8; // [esp+20h] [ebp-18h] int v9; // [esp+34h] [ebp-4h] v2 = this; result = sub_6549B0(this, a2); if ( result ) { v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, "Metamorphosis", 0xDu); v4 = (_DWORD *)v2[676]; v9 = 0; v5 = sub_6FDE00(v4, (int)&v6) == 0; if ( v8 >= 0x10 ) operator delete(v6); result = v5 == 0; } return result; } //----- (00656CE0) -------------------------------------------------------- bool __thiscall sub_656CE0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ecx bool v4; // [esp+Bh] [ebp-2Dh] void *v5; // [esp+Ch] [ebp-2Ch] int v6; // [esp+1Ch] [ebp-1Ch] unsigned int v7; // [esp+20h] [ebp-18h] int v8; // [esp+34h] [ebp-4h] v1 = this; if ( !((unsigned __int8 (*)(void))(*this)[162])() || sub_6FDCD0(v1[676]) ) return 0; ((void (__thiscall *)(_DWORD **, signed int))(*v1)[60])(v1, 1); v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4018E0(&v5, "UnMetamorphosis", 0xFu); v2 = v1[676]; v8 = 0; v4 = sub_6FDE00(v2, (int)&v5) == 0; if ( v7 >= 0x10 ) operator delete(v5); return v4 == 0; } //----- (00656DB0) -------------------------------------------------------- char __thiscall sub_656DB0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax void ***v3; // edx void ***v4; // edi _DWORD *v5; // ecx int v6; // esi void **v7; // eax void *v8; // ecx void **v9; // esi void **v11; // [esp+10h] [ebp-28h] void *v12; // [esp+1Ch] [ebp-1Ch] int v13; // [esp+20h] [ebp-18h] char *v14; // [esp+28h] [ebp-10h] int v15; // [esp+34h] [ebp-4h] v1 = this; v13 = 0; v2 = operator new(0xCu); if ( !v2 ) { v14 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&v14); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } v12 = v2; *v2 = v2; *((_DWORD *)v12 + 1) = v12; v15 = 0; sub_650300(v1, (int)&v12); v3 = (void ***)v12; if ( v13 ) { v4 = *(void ****)v12; if ( *(void **)v12 != v12 ) { do { v5 = (_DWORD *)v1[540]; if ( v5 ) { v6 = sub_64BA20(v5, (const char *)v4[2] + 329); if ( v6 && *(_DWORD *)(v6 + 108) == sub_65B8B0(v1, 0, 0, 0) ) { sub_4E6E90(&v12); return 1; } v3 = (void ***)v12; } v4 = (void ***)*v4; } while ( v4 != v3 ); } } v7 = *v3; *v3 = (void **)v3; *((_DWORD *)v12 + 1) = v12; v8 = v12; v13 = 0; if ( v7 != v12 ) { do { v9 = (void **)*v7; operator delete(v7); v8 = v12; v7 = v9; } while ( v9 != v12 ); } operator delete(v8); return 0; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00656EF0) -------------------------------------------------------- char **__thiscall sub_656EF0(char **this, int a2) { char *v2; // edi int v3; // esi char **result; // eax int v5; // ecx v2 = this[171]; v3 = (int)(this + 171); result = sub_61F910(this[171], *((_DWORD *)v2 + 1), a2); v5 = *(_DWORD *)(v3 + 4); if ( (unsigned int)(357913940 - v5) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v3 + 4) = v5 + 1; *((_DWORD *)v2 + 1) = result; *(_DWORD *)result[1] = result; return result; } //----- (00656F40) -------------------------------------------------------- void __thiscall sub_656F40(int this) { int v1; // esi int v2; // ecx int v3; // ST28_4 float v4; // ST2C_4 int v5; // eax float v6; // ST30_4 float v7; // ST34_4 _DWORD ***v8; // ecx _DWORD **v9; // eax float v10; // [esp+28h] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 688) ) { v2 = **(_DWORD **)(this + 684); v3 = *(_DWORD *)(v2 + 16); v4 = *(float *)(v2 + 8) - *(float *)(v1 + 1612); v5 = *(_DWORD *)(v1 + 1620); v6 = *(float *)(v2 + 12) - *(float *)(v1 + 1616); v7 = 0.0 - 0.0; v10 = v6 * v6 + v4 * v4 + v7 * v7; if ( v10 <= 10000.0 ) (*(void (__thiscall **)(int, int, _DWORD, float *, _DWORD))(*(_DWORD *)v1 + 232))(v1, v2 + 8, 0, &flt_AB399C, 0); if ( v10 <= 1.0 ) { v8 = *(_DWORD ****)(v1 + 684); v9 = *v8; if ( *v8 != v8 ) { *v9[1] = *v9; (*v9)[1] = v9[1]; operator delete(v9); --*(_DWORD *)(v1 + 688); } } } } // AB399C: using guessed type float flt_AB399C; //----- (00657030) -------------------------------------------------------- int __thiscall sub_657030(_DWORD *this) { int v1; // esi unsigned int v2; // edi unsigned int v3; // esi const char *v4; // eax const char *v5; // esi _DWORD *v6; // edi _BYTE *v7; // esi void *v9; // [esp+10h] [ebp-24h] _BYTE *v10; // [esp+14h] [ebp-20h] int v11; // [esp+18h] [ebp-1Ch] int v12; // [esp+20h] [ebp-14h] int v13; // [esp+24h] [ebp-10h] int v14; // [esp+30h] [ebp-4h] v1 = 0; v13 = this[678]; if ( !v13 ) return v1; v9 = 0; v10 = 0; v11 = 0; v14 = 0; v2 = 0; if ( sub_65AF30() ) { do { v3 = v2; if ( v2 < sub_65AF30() ) { while ( !sub_7474E0((_DWORD *)(dword_ACD9A8 + 4), v3) ) { if ( ++v3 >= sub_65AF30() ) goto LABEL_10; } v4 = (const char *)sub_7474E0((_DWORD *)(dword_ACD9A8 + 4), v3); v5 = v4; if ( v4 && !strcmp((const char *)(v13 + 2), v4) ) { v12 = *((_DWORD *)v5 + 8); sub_5B3CF0(&v9, &v12); } } LABEL_10: ++v2; } while ( v2 < sub_65AF30() ); v6 = v9; v7 = v10; if ( v9 != v10 ) { v1 = v6[rand() % (unsigned int)((v7 - (_BYTE *)v6) >> 2)]; if ( v6 ) operator delete(v6); return v1; } if ( v9 ) operator delete(v9); } return 0; } // ACD9A8: using guessed type int dword_ACD9A8; //----- (00657190) -------------------------------------------------------- char __thiscall sub_657190(void **this, int a2, int a3) { _DWORD *v3; // ebx int v4; // edi _DWORD *v6; // ecx unsigned int v7; // edx int v8; // eax int v9; // ebx int v10; // esi void (__thiscall *v11)(int, void (__stdcall ****)(_DWORD), int); // edx int v12; // ecx unsigned int v13; // eax int v14; // esi int v15; // esi _DWORD *v16; // eax int *v17; // eax _DWORD *v18; // ecx unsigned int v19; // edx int v20; // eax int v21; // ebx int v22; // esi void (__thiscall *v23)(int, int *, int); // edx int v24; // ecx void (__thiscall ***v25)(_DWORD, signed int); // ebx unsigned int v26; // eax _BYTE *v27; // edx int v28; // ecx int v29; // esi unsigned int v30; // eax unsigned int v31; // eax unsigned int v32; // ecx char *v33; // ecx _DWORD *v34; // eax _DWORD *v35; // esi int v36; // ecx unsigned int v37; // eax unsigned int v38; // eax unsigned int v39; // ecx char *v40; // ecx void (__stdcall ****v41)(signed int); // eax int v42; // [esp+3Ch] [ebp-64h] int v43; // [esp+40h] [ebp-60h] void (__stdcall ***v44)(_DWORD); // [esp+44h] [ebp-5Ch] unsigned int v45; // [esp+48h] [ebp-58h] void (__stdcall ***v46)(signed int); // [esp+4Ch] [ebp-54h] char v47; // [esp+53h] [ebp-4Dh] void **v48; // [esp+54h] [ebp-4Ch] int v49; // [esp+58h] [ebp-48h] int v50; // [esp+5Ch] [ebp-44h] void *v51; // [esp+60h] [ebp-40h] int v52; // [esp+70h] [ebp-30h] unsigned int v53; // [esp+74h] [ebp-2Ch] void *v54; // [esp+7Ch] [ebp-24h] int v55; // [esp+80h] [ebp-20h] int v56; // [esp+84h] [ebp-1Ch] int v57; // [esp+9Ch] [ebp-4h] v3 = (_DWORD *)a2; v4 = (int)this; v42 = a2; sub_656740(this); if ( !a2 ) return 0; v47 = 0; v49 = 0; v50 = -1; v48 = &NsFindObjectByName::`vftable'; v53 = 15; v52 = 0; LOBYTE(v51) = 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; sub_65B560(&v48, a2, "NOOUTLINE"); v6 = v54; v7 = 0; v8 = (v55 - (signed int)v54) >> 2; v45 = 0; if ( v8 > 0 ) { v47 = 1; while ( 1 ) { if ( v7 < v8 ) v9 = v6[v7]; else v9 = 0; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v10 = *(_DWORD *)(v9 + 32); v11 = *(void (__thiscall **)(int, void (__stdcall ****)(_DWORD), int))(*(_DWORD *)v10 + 120); v12 = *(_DWORD *)(v9 + 32); LOBYTE(v57) = 1; v11(v12, &v44, v9); if ( v44 ) { v46 = v44; if ( !InterlockedDecrement((volatile LONG *)v44 + 1) ) { if ( v46 ) (**v46)(1); } } if ( sub_6AF460(&unk_B91250, (int)&v43, v9, v10, flt_ACCFCC, 1, a3) ) { v13 = *(_DWORD *)(v4 + 4); v14 = v43; v46 = (void (__stdcall ***)(signed int))v43; if ( (unsigned int)&v46 >= v13 || *(_DWORD *)v4 > (unsigned int)&v46 ) { if ( v13 == *(_DWORD *)(v4 + 8) ) sub_5E2180(v4, 1); v17 = *(int **)(v4 + 4); if ( v17 ) *v17 = v14; } else { v15 = ((signed int)&v46 - *(_DWORD *)v4) >> 2; if ( v13 == *(_DWORD *)(v4 + 8) ) sub_5E2180(v4, 1); v16 = *(_DWORD **)(v4 + 4); if ( v16 ) *v16 = *(_DWORD *)(*(_DWORD *)v4 + 4 * v15); } *(_DWORD *)(v4 + 4) += 4; } LOBYTE(v57) = 0; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v6 = v54; v8 = (v55 - (signed int)v54) >> 2; if ( (signed int)++v45 >= v8 ) break; v7 = v45; } v3 = (_DWORD *)v42; } if ( sub_85AA60(v3, "#EF") ) { sub_4E6D30(&v54, 0); sub_65B560(&v48, (int)v3, "Scene Root"); v18 = v54; v19 = 0; v20 = (v55 - (signed int)v54) >> 2; v44 = 0; if ( v20 > 0 ) { while ( 1 ) { if ( v19 < v20 ) { v45 = v18[v19]; v21 = v45; } else { v21 = 0; v45 = 0; } if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); v22 = *(_DWORD *)(v21 + 32); v23 = *(void (__thiscall **)(int, int *, int))(*(_DWORD *)v22 + 120); v24 = *(_DWORD *)(v21 + 32); LOBYTE(v57) = 2; v23(v24, &v42, v21); if ( v42 ) { v25 = (void (__thiscall ***)(_DWORD, signed int))v42; if ( !InterlockedDecrement((volatile LONG *)(v42 + 4)) && v25 ) (**v25)(v25, 1); v21 = v45; } if ( sub_6AF460(&unk_B91250, (int)&v43, v21, v22, flt_ACCFCC, 1, a3) ) { v26 = *(_DWORD *)(v4 + 4); v46 = (void (__stdcall ***)(signed int))v43; if ( (unsigned int)&v46 >= v26 || (v27 = *(_BYTE **)v4, *(_DWORD *)v4 > (unsigned int)&v46) ) { v36 = *(_DWORD *)(v4 + 8); if ( v26 == v36 ) { v37 = (signed int)(v26 - *(_DWORD *)v4) >> 2; if ( v37 > 0x3FFFFFFE ) LABEL_75: std::_Xlength_error("vector too long"); v38 = v37 + 1; v39 = (v36 - *(_DWORD *)v4) >> 2; if ( v38 > v39 ) { if ( 0x3FFFFFFF - (v39 >> 1) >= v39 ) v40 = (char *)((v39 >> 1) + v39); else v40 = 0; if ( (unsigned int)v40 < v38 ) v40 = (char *)v38; sub_74E360((const void **)v4, v40); } } v41 = *(void (__stdcall *****)(signed int))(v4 + 4); if ( v41 ) *v41 = v46; } else { v28 = *(_DWORD *)(v4 + 8); v29 = ((char *)&v46 - v27) >> 2; if ( v26 == v28 ) { v30 = (signed int)(v26 - (_DWORD)v27) >> 2; if ( v30 > 0x3FFFFFFE ) goto LABEL_75; v31 = v30 + 1; v32 = (v28 - (signed int)v27) >> 2; if ( v31 > v32 ) { if ( 0x3FFFFFFF - (v32 >> 1) >= v32 ) v33 = (char *)((v32 >> 1) + v32); else v33 = 0; if ( (unsigned int)v33 < v31 ) v33 = (char *)v31; sub_74E360((const void **)v4, v33); v21 = v45; } } v34 = *(_DWORD **)(v4 + 4); v35 = (_DWORD *)(*(_DWORD *)v4 + 4 * v29); if ( v34 ) *v34 = *v35; } *(_DWORD *)(v4 + 4) += 4; } v47 = 1; LOBYTE(v57) = 0; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v18 = v54; v20 = (v55 - (signed int)v54) >> 2; v44 = (void (__stdcall ***)(_DWORD))((char *)v44 + 1); if ( (signed int)v44 >= v20 ) break; v19 = (unsigned int)v44; } } } else { v18 = v54; } if ( v18 ) operator delete(v18); v54 = 0; v55 = 0; v56 = 0; if ( v53 >= 0x10 ) operator delete(v51); return v47; } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00657580) -------------------------------------------------------- void __thiscall sub_657580(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi _DWORD *v12; // eax _DWORD *v13; // edi int v14; // ecx int **v15; // eax int *j; // eax int i; // eax int v18; // edi int v19; // edi int v20; // edi int v21; // edi _DWORD **v22; // ecx _DWORD *v23; // eax _DWORD *v24; // edi _DWORD *v25; // ST08_4 _DWORD *v26; // ST04_4 _DWORD *v27; // ST08_4 _DWORD *v28; // ST04_4 _DWORD *v29; // ST08_4 _DWORD *v30; // ST04_4 _DWORD *v31; // ST08_4 _DWORD *v32; // ST04_4 _DWORD *v33; // ST08_4 _DWORD *v34; // ST04_4 _DWORD *v35; // ST08_4 _DWORD *v36; // ST04_4 _DWORD *v37; // ST08_4 _DWORD *v38; // ST04_4 _DWORD *v39; // ST08_4 _DWORD *v40; // ST04_4 _DWORD *v41; // ST08_4 _DWORD *v42; // ST04_4 _DWORD *v43; // ST08_4 _DWORD *v44; // ST04_4 int v45; // edi int v46; // edi int v47; // edi int v48; // edi int v49; // edi int v50; // edi int v51; // edi int v52; // edi int v53; // edi int v54; // edi _DWORD **v55; // ecx _DWORD *v56; // eax _DWORD *v57; // edi _DWORD *v58; // [esp+10h] [ebp-18h] _DWORD *v59; // [esp+14h] [ebp-14h] _DWORD *v60; // [esp+18h] [ebp-10h] int v61; // [esp+24h] [ebp-4h] v1 = this; v60 = this; *this = &Char::`vftable'; this[15] = &Char::`vftable'; this[21] = &Char::`vftable'; v2 = this[174]; v61 = 37; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[174] = 0; } v3 = v1[179]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[179] = 0; } v4 = v1[175]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[175] = 0; } v5 = v1[178]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[178] = 0; } v6 = v1[177]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[177] = 0; } v7 = v1[176]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[176] = 0; } v8 = v1[180]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[180] = 0; } v9 = v1[181]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v1[181] = 0; } sub_656740((void **)v1 + 131); sub_662F80(v1 + 424); v10 = v1[532]; if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[532] = 0; } v11 = v1[533]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[533] = 0; } *((_BYTE *)v1 + 2740) = 1; sub_64F980(v1, 1); sub_656B40(v1); v12 = (_DWORD *)v1[486]; v13 = (_DWORD *)*v12; if ( (_DWORD *)*v12 != v12 ) { do { v14 = (int)v13; if ( !*((_BYTE *)v13 + 21) ) { v15 = (int **)v13[2]; if ( *((_BYTE *)v15 + 21) ) { for ( i = v13[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v13 != *(_DWORD **)(i + 8) ) break; v13 = (_DWORD *)i; } v13 = (_DWORD *)i; } else { v13 = (_DWORD *)v13[2]; for ( j = *v15; !*((_BYTE *)j + 21); j = (int *)*j ) v13 = j; } } sub_6CDBF0(v1 + 485, (int *)&v59, v14); } while ( v13 != (_DWORD *)v1[486] ); } v1[682] = -1; LOBYTE(v61) = 36; sub_6612F0((char *)v1 + 2772); v18 = v1[676]; LOBYTE(v61) = 35; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v59 = v1 + 637; LOBYTE(v61) = 38; sub_6612F0((char *)v1 + 2576); v19 = v1[642]; LOBYTE(v61) = 34; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); LOBYTE(v61) = 33; sub_663D50(v1 + 592); LOBYTE(v61) = 32; sub_663D50(v1 + 564); LOBYTE(v61) = 31; sub_663D50(v1 + 536); v59 = v1 + 532; v20 = v1[533]; LOBYTE(v61) = 39; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = v1[532]; LOBYTE(v61) = 30; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = (_DWORD **)v1[525]; v23 = *v22; *v22 = v22; *(_DWORD *)(v1[525] + 4) = v1[525]; v1[526] = 0; if ( v23 != (_DWORD *)v1[525] ) { do { v24 = (_DWORD *)*v23; operator delete(v23); v23 = v24; } while ( v24 != (_DWORD *)v1[525] ); } operator delete((void *)v1[525]); v59 = v1 + 521; v25 = (_DWORD *)v1[522]; v26 = *(_DWORD **)v1[522]; LOBYTE(v61) = 40; sub_6CDE90(v1 + 521, (int *)&v58, v26, v25); operator delete((void *)v1[522]); v58 = v1 + 517; v27 = (_DWORD *)v1[518]; v28 = *(_DWORD **)v1[518]; LOBYTE(v61) = 41; sub_6CDE90(v1 + 517, (int *)&v59, v28, v27); operator delete((void *)v1[518]); v58 = v1 + 513; v29 = (_DWORD *)v1[514]; v30 = *(_DWORD **)v1[514]; LOBYTE(v61) = 42; sub_6CDE90(v1 + 513, (int *)&v59, v30, v29); operator delete((void *)v1[514]); v58 = v1 + 509; v31 = (_DWORD *)v1[510]; v32 = *(_DWORD **)v1[510]; LOBYTE(v61) = 43; sub_6CDE90(v1 + 509, (int *)&v59, v32, v31); operator delete((void *)v1[510]); v58 = v1 + 505; v33 = (_DWORD *)v1[506]; v34 = *(_DWORD **)v1[506]; LOBYTE(v61) = 44; sub_6CDE90(v1 + 505, (int *)&v59, v34, v33); operator delete((void *)v1[506]); v58 = v1 + 501; v35 = (_DWORD *)v1[502]; v36 = *(_DWORD **)v1[502]; LOBYTE(v61) = 45; sub_6CDE90(v1 + 501, (int *)&v59, v36, v35); operator delete((void *)v1[502]); v58 = v1 + 497; v37 = (_DWORD *)v1[498]; v38 = *(_DWORD **)v1[498]; LOBYTE(v61) = 46; sub_6CDE90(v1 + 497, (int *)&v59, v38, v37); operator delete((void *)v1[498]); v58 = v1 + 493; v39 = (_DWORD *)v1[494]; v40 = *(_DWORD **)v1[494]; LOBYTE(v61) = 47; sub_6CDE90(v1 + 493, (int *)&v59, v40, v39); operator delete((void *)v1[494]); v58 = v1 + 489; v41 = (_DWORD *)v1[490]; v42 = *(_DWORD **)v1[490]; LOBYTE(v61) = 48; sub_6CDE90(v1 + 489, (int *)&v59, v42, v41); operator delete((void *)v1[490]); v58 = v1 + 485; v43 = (_DWORD *)v1[486]; v44 = *(_DWORD **)v1[486]; LOBYTE(v61) = 49; sub_6CDE90(v1 + 485, (int *)&v59, v44, v43); operator delete((void *)v1[486]); LOBYTE(v61) = 18; sub_65B040(v1 + 455); v58 = v1 + 424; LOBYTE(v61) = 50; sub_8D47C0(v1 + 446); v45 = v1[426]; LOBYTE(v61) = 17; if ( v45 && !InterlockedDecrement((volatile LONG *)(v45 + 4)) && v45 ) (**(void (__thiscall ***)(int, signed int))v45)(v45, 1); LOBYTE(v61) = 16; sub_67E1D0(v1 + 397); LOBYTE(v61) = 15; nullsub_6(v1 + 379); LOBYTE(v61) = 14; sub_676CA0((char *)v1 + 776); v46 = v1[193]; LOBYTE(v61) = 13; if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) && v46 ) (**(void (__thiscall ***)(int, signed int))v46)(v46, 1); LOBYTE(v61) = 12; sub_441070(v1 + 182); v47 = v1[181]; LOBYTE(v61) = 11; if ( v47 && !InterlockedDecrement((volatile LONG *)(v47 + 4)) && v47 ) (**(void (__thiscall ***)(int, signed int))v47)(v47, 1); v48 = v1[180]; LOBYTE(v61) = 10; if ( v48 && !InterlockedDecrement((volatile LONG *)(v48 + 4)) && v48 ) (**(void (__thiscall ***)(int, signed int))v48)(v48, 1); v49 = v1[179]; LOBYTE(v61) = 9; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v49 ) (**(void (__thiscall ***)(int, signed int))v49)(v49, 1); v50 = v1[178]; LOBYTE(v61) = 8; if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v50 ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); v51 = v1[177]; LOBYTE(v61) = 7; if ( v51 && !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v51 ) (**(void (__thiscall ***)(int, signed int))v51)(v51, 1); v52 = v1[176]; LOBYTE(v61) = 6; if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 ) (**(void (__thiscall ***)(int, signed int))v52)(v52, 1); v53 = v1[175]; LOBYTE(v61) = 5; if ( v53 && !InterlockedDecrement((volatile LONG *)(v53 + 4)) && v53 ) (**(void (__thiscall ***)(int, signed int))v53)(v53, 1); v54 = v1[174]; LOBYTE(v61) = 4; if ( v54 && !InterlockedDecrement((volatile LONG *)(v54 + 4)) && v54 ) (**(void (__thiscall ***)(int, signed int))v54)(v54, 1); v55 = (_DWORD **)v1[171]; v56 = *v55; *v55 = v55; *(_DWORD *)(v1[171] + 4) = v1[171]; v1[172] = 0; if ( v56 != (_DWORD *)v1[171] ) { do { v57 = (_DWORD *)*v56; operator delete(v56); v56 = v57; } while ( v57 != (_DWORD *)v1[171] ); } operator delete((void *)v1[171]); if ( v1[131] ) operator delete((void *)v1[131]); v1[131] = 0; v1[132] = 0; v1[133] = 0; LOBYTE(v61) = 1; sub_64E910(v1 + 21); LOBYTE(v61) = 0; sub_6A7330(v1 + 15); v61 = -1; sub_64FA70(v1); } // 9F317C: using guessed type void *Char::`vftable'; // 9F319C: using guessed type void *Char::`vftable'; // 9F31A4: using guessed type void *Char::`vftable'; //----- (00657DC0) -------------------------------------------------------- void __thiscall sub_657DC0(int this, float a2) { int v2; // esi char v3; // al int v4; // eax float *v5; // edi float *v6; // eax float v7; // ST28_4 unsigned int v8; // ecx int v9; // eax int v10; // eax int v11; // eax void *v12; // ecx unsigned int v13; // edi unsigned int v14; // ecx unsigned __int8 *v15; // eax int v16; // eax bool v17; // zf signed int v18; // eax bool v19; // bl unsigned int v20; // ecx unsigned __int8 *v21; // eax int v22; // eax bool v23; // zf signed int v24; // eax int v25; // eax double v26; // st7 double v27; // st7 float *v28; // eax double v29; // st7 int v30; // eax bool v31; // bl _DWORD *v32; // ecx float v33; // [esp+2Ch] [ebp-4Ch] float v34; // [esp+30h] [ebp-48h] float v35; // [esp+34h] [ebp-44h] float v36; // [esp+38h] [ebp-40h] float v37; // [esp+3Ch] [ebp-3Ch] float v38; // [esp+40h] [ebp-38h] float v39; // [esp+44h] [ebp-34h] float v40; // [esp+48h] [ebp-30h] unsigned __int8 *v41; // [esp+4Ch] [ebp-2Ch] unsigned int v42; // [esp+5Ch] [ebp-1Ch] unsigned int v43; // [esp+60h] [ebp-18h] int v44; // [esp+74h] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 2733) && !sub_662E50((_DWORD *)(this + 1696)) ) *(_WORD *)(v2 + 2732) = 1; if ( *(_BYTE *)(v2 + 1936) == 4 || !*(_BYTE *)(v2 + 2680) && (v3 = *(_BYTE *)(v2 + 1924), v3 != 4) && v3 != 5 && (v4 = *(_DWORD *)(v2 + 2712)) != 0 && *(_BYTE *)(v4 + 82) ) { if ( !sub_6516C0((_BYTE *)v2) && !*(_BYTE *)(v2 + 2510) ) { v5 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v2 + 196))(v2); v6 = (float *)sub_693030(byte_ADB468); v7 = *v6 - *v5; v39 = v6[1] - v5[1]; v40 = v6[2] - v5[2]; v40 = v7 * v7 + v39 * v39 + v40 * v40; v40 = sqrt(v40); v8 = *((_DWORD *)dword_AD8EBC + 1361); v39 = v40; v40 = (double)v8; if ( v39 > (double)v40 ) { v9 = *(_DWORD *)(v2 + 700); *(_BYTE *)(v2 + 2141) = *(_BYTE *)(v2 + 2140); *(_BYTE *)(v2 + 2140) = 1; *(_WORD *)(v9 + 28) |= 1u; *(_BYTE *)(v2 + 1922) = 1; return; } } } if ( !*(_DWORD *)(v2 + 700) ) { LOBYTE(v10) = sub_64E020((_DWORD *)(v2 + 84), (char *)v2, (_DWORD *)1, 0); sub_64E0C0(v10, (_DWORD *)(v2 + 84), 1); return; } if ( !*(_BYTE *)(v2 + 1922) || *(_BYTE *)(v2 + 2140) ) { LOBYTE(v11) = sub_64E020((_DWORD *)(v2 + 84), (char *)v2, (_DWORD *)1, 0); sub_64E0C0(v11, (_DWORD *)(v2 + 84), 1); } if ( -3.4028235e38 == *(float *)(v2 + 1484) ) { *(float *)(v2 + 1484) = a2; *(float *)(v2 + 1492) = a2; } else { v40 = a2 - *(float *)(v2 + 1484); *(float *)(v2 + 1492) = *(float *)(v2 + 1488) * v40 + *(float *)(v2 + 1492); *(float *)(v2 + 1484) = a2; } if ( byte_AB66DA && *(_BYTE *)(v2 + 2510) ) { v12 = (void *)(*(_DWORD *)(v2 + 2712) + 2); v43 = 15; v42 = 0; LOBYTE(v41) = 0; sub_4018E0(&v41, v12, strlen((const char *)v12)); v13 = v42; v44 = 0; v14 = v42; if ( v42 >= 7 ) v14 = 7; v15 = v41; if ( v43 < 0x10 ) v15 = (unsigned __int8 *)&v41; v16 = sub_40C0B0(v15, "OX_gate", v14); v17 = v16 == 0; if ( !v16 ) { if ( v13 >= 7 ) v18 = v13 != 7; else v18 = -1; v17 = v18 == 0; } v19 = v17; v20 = v13; if ( v13 >= 0xC ) v20 = 12; v21 = v41; if ( v43 < 0x10 ) v21 = (unsigned __int8 *)&v41; v22 = sub_40C0B0(v21, "KQSpringDoor", v20); v23 = v22 == 0; if ( !v22 ) { if ( v13 >= 0xC ) v24 = v13 != 12; else v24 = -1; v23 = v24 == 0; } if ( v23 || v19 ) { v25 = *(_DWORD *)(v2 + 700); *(_BYTE *)(v2 + 2141) = *(_BYTE *)(v2 + 2140); *(_BYTE *)(v2 + 2140) = 1; *(_WORD *)(v25 + 28) |= 1u; *(_BYTE *)(v2 + 1922) = 1; sub_636A10(&v41); return; } v44 = -1; sub_636A10(&v41); } sub_653580((_BYTE *)v2); sub_656F40(v2); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 584))(v2, LODWORD(a2)); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 580))(v2, LODWORD(a2)); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 588))(v2, LODWORD(a2)); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 576))(v2, LODWORD(a2)) ) { sub_651ED0((_DWORD *)v2); sub_64E360((int (***)(void))(v2 + 84), a2); sub_64F8A0(v2, a2); sub_4410A0((float *)(v2 + 728), a2); v36 = *(float *)(dword_B66FB0 + 104); v26 = *(float *)(dword_B66FB0 + 116); v33 = v36; v37 = v26; v27 = *(float *)(dword_B66FB0 + 128); v34 = v37; v38 = v27; v35 = v38; if ( *(_DWORD *)(v2 + 768) == 1 ) v35 = 1.0; else v34 = 0.0; sub_4430B0(&v33); v28 = *(float **)(v2 + 716); v40 = *(float *)(v2 + 752); v29 = v40; v36 = v33 * v40; v28[22] = v36; v37 = v29 * v34; v28[23] = v37; v38 = v29 * v35; v28[24] = v38; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 432))(v2, *(float *)(v2 + 1492)); v30 = *(_DWORD *)(v2 + 2164); v31 = 0; if ( v30 ) v31 = *(_BYTE *)(v30 + 971) != 0; if ( sub_65C450((_DWORD *)v2) || v31 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 488))(v2) ) { sub_6739A0((_DWORD *)(v2 + 776), 12, 0); sub_6739A0((_DWORD *)(v2 + 776), 11, 0); sub_673B40(v2 + 776, 0); v32 = *(_DWORD **)(v2 + 2924); if ( !v32 || sub_744760(v32, *(_DWORD *)(v2 + 2920), 1) ) goto LABEL_64; } else if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 648))(v2) ) { sub_6739A0((_DWORD *)(v2 + 776), 5, 0); sub_673B40(v2 + 776, 0); } else { if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 48))(v2) ) { if ( *(_BYTE *)(v2 + 1449) || *(_BYTE *)(v2 + 1460) ) { sub_672F70((_DWORD *)(v2 + 776), *(unsigned __int8 *)(v2 + 1449)); sub_672FA0((_DWORD *)(v2 + 776), *(unsigned __int8 *)(v2 + 1460)); } goto LABEL_64; } sub_673B40(v2 + 776, 0); } sub_672F70((_DWORD *)(v2 + 776), 0); sub_672FA0((_DWORD *)(v2 + 776), 0); LABEL_64: sub_65D170(v2, SLODWORD(a2)); sub_65D810((_DWORD *)v2); if ( *(_BYTE *)(v2 + 2680) ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 616))(v2); sub_6528A0((void *)v2, a2); if ( *(_BYTE *)(v2 + 2872) ) sub_652930(v2, a2); } } // AB66DA: using guessed type char byte_AB66DA; //----- (00658390) -------------------------------------------------------- void __thiscall sub_658390(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax int v3; // esi int v4; // edi int v5; // esi int v6; // edi unsigned int v7; // eax void *v8; // ecx const char *v9; // eax unsigned __int8 *v10; // edx unsigned int v11; // ebx unsigned int v12; // esi unsigned int v13; // ecx unsigned __int8 *v14; // eax int v15; // eax bool v16; // zf signed int v17; // eax bool v18; // bl int v19; // esi __int16 v20; // ax int v21; // eax double v22; // st7 _DWORD *v23; // esi _DWORD *v24; // eax int v25; // [esp+14h] [ebp-78h] char v26; // [esp+1Ch] [ebp-70h] char v27[4]; // [esp+20h] [ebp-6Ch] int v28; // [esp+24h] [ebp-68h] int *v29; // [esp+28h] [ebp-64h] int v30; // [esp+2Ch] [ebp-60h] float v31; // [esp+30h] [ebp-5Ch] _DWORD *v32; // [esp+34h] [ebp-58h] int v33; // [esp+38h] [ebp-54h] int v34; // [esp+3Ch] [ebp-50h] int v35; // [esp+40h] [ebp-4Ch] void *v36; // [esp+44h] [ebp-48h] unsigned int v37; // [esp+54h] [ebp-38h] unsigned int v38; // [esp+58h] [ebp-34h] void *v39; // [esp+60h] [ebp-2Ch] unsigned int v40; // [esp+70h] [ebp-1Ch] unsigned int v41; // [esp+74h] [ebp-18h] int v42; // [esp+88h] [ebp-4h] v1 = this; v32 = this; v2 = sub_65B8B0(this, 0, 0, 0); v3 = sub_65D700(v1, v2); v30 = v3; if ( v3 ) { sub_656B40(v1); v4 = 0; v33 = 0; while ( 1 ) { v41 = 15; v40 = 0; LOBYTE(v39) = 0; sub_4018E0(&v39, &unk_9F2E5E, 0); v42 = 0; sub_4412F0((const void **)&v39, v4); v5 = *(_DWORD *)(v3 + 32); if ( v5 ) { v35 = v4; v29 = *sub_67AF30(v1 + 485, (int **)&v26, &v35); if ( v29 == (int *)v1[486] ) { v42 = -1; if ( v41 >= 0x10 ) operator delete(v39); goto LABEL_30; } v6 = *(_DWORD *)(v5 + 16); v7 = 0; v35 = *(_DWORD *)(v5 + 12); v34 = 0; if ( v35 ) { do { v8 = *(void **)(v6 + 8 * v7 + 4); if ( v8 ) { v9 = *(const char **)(v6 + 8 * v7 + 4); v38 = 15; v37 = 0; LOBYTE(v36) = 0; sub_4018E0(&v36, v8, &v9[strlen(v9)] - (_BYTE *)v8); v10 = (unsigned __int8 *)v39; if ( v41 < 0x10 ) v10 = (unsigned __int8 *)&v39; v11 = v37; v12 = v40; v13 = v37; if ( v37 >= v40 ) v13 = v40; v14 = (unsigned __int8 *)v36; if ( v38 < 0x10 ) v14 = (unsigned __int8 *)&v36; v15 = sub_40C0B0(v14, v10, v13); v16 = v15 == 0; if ( !v15 ) { if ( v11 >= v12 ) v17 = v11 != v12; else v17 = -1; v16 = v17 == 0; } v18 = v16; LOBYTE(v42) = 0; if ( v38 >= 0x10 ) operator delete(v36); if ( v18 ) { v19 = v34; v31 = *(float *)(v6 + 8 * v34); v20 = sub_651300(v6, v35, v31); v21 = sub_441430(v20); v22 = *(float *)(v6 + 8 * v19); v23 = (_DWORD *)v29[4]; *(float *)v27 = v22; v28 = v21; v24 = sub_6A9330(v23, v27); sub_65B3F0(v23, (int)&v25, v24, 0); } } v7 = v34 + 1; v34 = v7; } while ( v7 < v35 ); v1 = v32; } v4 = v33; } v42 = -1; if ( v41 >= 0x10 ) operator delete(v39); LABEL_30: v33 = ++v4; if ( v4 >= 9 ) return; v3 = v30; } } } //----- (006585E0) -------------------------------------------------------- char __thiscall sub_6585E0(void *this, int a2) { int v2; // esi int v3; // eax int v4; // edi int *v5; // eax int *v6; // eax bool v7; // al _DWORD *v8; // ecx v2 = (int)this; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)this + 44))(); if ( (_BYTE)v3 ) { sub_65B210(v2, 0); v3 = *(_DWORD *)(v2 + 712); if ( v3 ) { sub_8D8240((_DWORD *)(v3 + 176)); v3 = sub_66C5D0(&unk_AD8D28, *(unsigned __int16 *)(v2 + 176)); v4 = v3; if ( v3 ) { if ( !byte_AB395E || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 516))(v2) ) { v6 = sub_661CD0(); sub_661D40((int)v6, v4); } else { v5 = sub_661CD0(); sub_6615F0((char *)v5, v4); } sub_6613F0((int *)(v2 + 2772), v4); v7 = sub_64FA00((_DWORD *)v2, 373); v8 = (_DWORD *)(v2 + 2772); if ( v7 ) { sub_6618E0(v8, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_661E70((_BYTE *)(v2 + 2772), 1); } else { sub_661E70(v8, 0); } (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(v2 + 712) + 116))(v4, 0); sub_85C6F0(*(_DWORD **)(v2 + 712)); sub_85C4D0(*(_DWORD **)(v2 + 712)); LOBYTE(v3) = sub_657190((void **)(v2 + 524), v4, 0xFFFF); } } } return v3; } // AB395E: using guessed type char byte_AB395E; //----- (006586F0) -------------------------------------------------------- char __thiscall sub_6586F0(_DWORD *this, char a2) { int v2; // ebx int v3; // eax bool v4; // zf int v5; // edi _DWORD *v6; // ecx int v7; // eax _DWORD *v8; // ecx int v9; // eax _DWORD *v10; // ecx int v11; // eax _DWORD *v12; // ecx int v13; // eax _DWORD *v14; // ecx int v15; // eax char *v16; // esi int v17; // ST14_4 _DWORD *v18; // edx int v19; // eax int v20; // ecx bool v21; // cf int v22; // eax int v23; // eax char *v24; // esi float *v25; // eax char *v26; // esi char *v27; // edi int v28; // eax int v29; // edx int v30; // ecx int v31; // eax int v32; // eax signed int v33; // eax int v34; // edx int v35; // eax int v36; // eax int v37; // eax int v38; // ST14_4 int *v39; // eax int v40; // ST14_4 int *v41; // eax char v42; // al int v43; // eax char *v44; // eax struct Concurrency::IExecutionContext *v45; // eax int v46; // ebx _DWORD *v47; // eax int v49; // [esp+24h] [ebp-D4h] float v50; // [esp+28h] [ebp-D0h] float v51; // [esp+2Ch] [ebp-CCh] int v52; // [esp+30h] [ebp-C8h] int v53; // [esp+34h] [ebp-C4h] int v54; // [esp+38h] [ebp-C0h] char *v55; // [esp+3Ch] [ebp-BCh] char v56; // [esp+40h] [ebp-B8h] char v57; // [esp+64h] [ebp-94h] float v58; // [esp+88h] [ebp-70h] float v59; // [esp+8Ch] [ebp-6Ch] float v60; // [esp+90h] [ebp-68h] float v61; // [esp+94h] [ebp-64h] float v62; // [esp+98h] [ebp-60h] float v63; // [esp+9Ch] [ebp-5Ch] float v64; // [esp+A0h] [ebp-58h] float v65; // [esp+A4h] [ebp-54h] float v66; // [esp+A8h] [ebp-50h] void **v67; // [esp+ACh] [ebp-4Ch] int v68; // [esp+B0h] [ebp-48h] int v69; // [esp+B4h] [ebp-44h] void *v70; // [esp+B8h] [ebp-40h] int v71; // [esp+C8h] [ebp-30h] unsigned int v72; // [esp+CCh] [ebp-2Ch] void *v73; // [esp+D4h] [ebp-24h] int v74; // [esp+D8h] [ebp-20h] int v75; // [esp+DCh] [ebp-1Ch] int v76; // [esp+F4h] [ebp-4h] v2 = (int)this; this[469] = sub_65D700(this, 203020); *(_DWORD *)(v2 + 1880) = sub_65D700((_DWORD *)v2, 203010); *(_DWORD *)(v2 + 1884) = sub_65D700((_DWORD *)v2, 203030); v3 = sub_65D700((_DWORD *)v2, 203040); v4 = *(_DWORD *)(v2 + 1876) == 0; *(_DWORD *)(v2 + 1888) = v3; *(_BYTE *)(v2 + 1892) = !v4 && *(_DWORD *)(v2 + 1880) && *(_DWORD *)(v2 + 1884) && v3; v4 = *(_BYTE *)(v2 + 1892) == 0; *(float *)(v2 + 1896) = 0.5; *(float *)(v2 + 1900) = 0.5; if ( !v4 ) { sub_800560(*(void ***)(v2 + 696), 203020, 3, 0, 0.5, 0.0, -2); sub_800560(*(void ***)(v2 + 696), 203010, 3, 0, 0.5, 0.0, -2); sub_800560(*(void ***)(v2 + 696), 203030, 3, 0, 0.5, 0.0, -2); sub_800560(*(void ***)(v2 + 696), 203040, 3, 0, 0.5, 0.0, -2); } sub_662F80((_DWORD *)(v2 + 1696)); v5 = 0; *(_DWORD *)(v2 + 1720) = *(_DWORD *)(v2 + 696); *(_DWORD *)(v2 + 1724) = v2; v6 = *(_DWORD **)(v2 + 2160); v54 = 0; v53 = 0; v52 = 0; v55 = 0; if ( v6 ) { v7 = sub_64BA20(v6, "JumpStand_JumpStart"); if ( v7 ) v54 = *(_DWORD *)(v7 + 108); } v8 = *(_DWORD **)(v2 + 2160); if ( v8 ) { v9 = sub_64BA20(v8, "JumpRun_JumpStart"); if ( v9 ) v53 = *(_DWORD *)(v9 + 108); } v10 = *(_DWORD **)(v2 + 2160); if ( v10 ) { v11 = sub_64BA20(v10, "Jump_DownHill"); if ( v11 ) v52 = *(_DWORD *)(v11 + 108); } v12 = *(_DWORD **)(v2 + 2160); if ( v12 ) { v13 = sub_64BA20(v12, "JumpStand_Land"); if ( v13 ) v55 = *(char **)(v13 + 108); } v14 = *(_DWORD **)(v2 + 2160); if ( v14 ) { v15 = sub_64BA20(v14, "JumpRun_Land"); if ( v15 ) v5 = *(_DWORD *)(v15 + 108); } sub_662ED0((_DWORD *)(v2 + 1696), v54, v53, v52, (int)v55, v5); v16 = *(char **)(*(_DWORD *)(v2 + 696) + 12); v17 = *(unsigned __int16 *)(v2 + 548); v55 = v16; if ( sub_657190((void **)(v2 + 524), (int)v16, v17) ) { *(float *)&v49 = 0.0; v50 = 0.0; v51 = 1.0; sub_8B8B90((int)v16, (int)&v49, 1.0, "WireABVTemp", 0); v68 = 0; v69 = -1; v67 = &NsFindObjectByName::`vftable'; v72 = 15; v71 = 0; LOBYTE(v70) = 0; v73 = 0; v74 = 0; v75 = 0; v76 = 0; sub_65B560(&v67, (int)v16, "WireABVTemp"); v18 = v73; v19 = (v74 - (signed int)v73) >> 2; v20 = 0; if ( v19 > 0 ) { v21 = (unsigned int)v19 > 0; do { if ( v21 ) { v22 = v18[v20]; if ( v22 ) { *(_WORD *)(v22 + 28) |= 1u; v18 = v73; } } ++v20; v23 = (v74 - (signed int)v18) >> 2; v21 = v20 < (unsigned int)v23; } while ( v20 < v23 ); } v76 = -1; if ( v18 ) operator delete(v18); v73 = 0; v74 = 0; v75 = 0; if ( v72 >= 0x10 ) operator delete(v70); } v24 = v55; sub_85BED0((_DWORD **)v55, 0.0, 1); v58 = -1.0; v61 = 0.0; v64 = 0.0; v59 = 0.0; v65 = 0.0; v60 = 0.0; qmemcpy(&v57, v24 + 52, 0x24u); v63 = 0.0; v62 = -1.0; v66 = 1.0; v25 = sub_85D940((float *)&v57, (float *)&v56, &v58); qmemcpy(&v57, v25, 0x24u); qmemcpy(v55 + 52, v25, 0x24u); sub_8D8240((_DWORD *)(*(_DWORD *)(v2 + 708) + 176)); v26 = v55; (*(void (__stdcall **)(char *, _DWORD))(**(_DWORD **)(v2 + 708) + 116))(v55, 0); v27 = (char *)(v2 + 776); sub_676EB0(v2 + 776, v26); v28 = *(_DWORD *)(v2 + 696); v29 = *(_DWORD *)(v2 + 2144); *(_DWORD *)(v2 + 1076) = *(_DWORD *)(v28 + 20); *(_DWORD *)(v2 + 1004) = v28; (*(void (__thiscall **)(int, int))(v29 + 20))(v2 + 2144, v28); if ( *(_BYTE *)(v2 + 944) ) { sub_675370(v2 + 776); sub_676F20((_BYTE *)(v2 + 776), *(_BYTE *)(v2 + 939)); sub_6765B0((_BYTE *)(v2 + 776), (char *)*(unsigned __int8 *)(v2 + 940)); } v30 = *(_DWORD *)(v2 + 700); if ( v30 ) { v31 = (*(int (**)(void))(*(_DWORD *)v30 + 4))(); if ( v31 ) { while ( (char *)v31 != dword_BA6660 ) { v31 = *(_DWORD *)(v31 + 4); if ( !v31 ) goto LABEL_43; } *(_BYTE *)(*(_DWORD *)(v2 + 700) + 232) = 0; } } LABEL_43: sub_85BED0(*(_DWORD ***)(v2 + 700), 0.0, 1); v32 = *(_DWORD *)(*(_DWORD *)(v2 + 696) + 20); if ( v32 ) v33 = *(_DWORD *)(v32 + 60); else v33 = -1; v34 = *(_DWORD *)v2; *(_DWORD *)(v2 + 2544) = v33; if ( !(*(unsigned __int8 (__thiscall **)(int))(v34 + 32))(v2) ) goto LABEL_84; v35 = *(_DWORD *)(v2 + 2712); if ( !v35 ) goto LABEL_84; v36 = *(_DWORD *)(v35 + 99); if ( v36 != 8 ) { if ( v36 == 10 ) goto LABEL_62; if ( v36 != 9 && v36 != 22 && v36 != 21 ) goto LABEL_84; } if ( v36 != 10 && v36 != 9 ) { LABEL_84: v37 = *(_DWORD *)(v2 + 2712); if ( !v37 || strcmp((const char *)(v37 + 2), "KQ_Gate5") ) { if ( !byte_AB395E || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 516))(v2) || sub_650B20((_DWORD *)v2) ) { v40 = *(_DWORD *)(v2 + 700); v41 = sub_661CD0(); sub_661D40((int)v41, v40); } else { v38 = *(_DWORD *)(v2 + 700); v39 = sub_661CD0(); sub_6615F0((char *)v39, v38); } } } LABEL_62: sub_653580((_BYTE *)v2); if ( *(_BYTE *)(v2 + 1936) == 4 || !*(_BYTE *)(v2 + 2680) && (v42 = *(_BYTE *)(v2 + 1924), v42 != 4) && v42 != 5 && (v43 = *(_DWORD *)(v2 + 2712)) != 0 && *(_BYTE *)(v43 + 82) ) { byte_AB7288 = 1; } if ( a2 ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 80))(v2); if ( *(_BYTE *)(v2 + 1924) == 6 ) { if ( *(_WORD *)(v2 + 2916) == -1 ) { if ( !*(_DWORD *)(v2 + 2924) ) { v45 = Concurrency::details::UMSThreadVirtualProcessor::GetDefaultDestination((Concurrency::details::UMSThreadVirtualProcessor *)(v2 + 776)); sub_65DD20((_DWORD *)v2, (unsigned int)v45); } } else { v44 = sub_664AB0(dword_AD8C90, *(_WORD *)(v2 + 2916)); *(_DWORD *)(v2 + 2924) = v44; if ( v44 ) sub_7443B0(v44, v2, *(volatile LONG ***)(v2 + 2920)); } } else { sub_65DC00((float *)v2); } sub_85C4D0(*(_DWORD **)(v2 + 700)); sub_85C6F0(*(_DWORD **)(v2 + 700)); *(_DWORD *)(v2 + 544) = 0; *(_BYTE *)(v2 + 2692) = 0; *(_DWORD *)(v2 + 2696) = 0; *(_BYTE *)(v2 + 928) = 17; sub_673A40(v2 + 776, 0); *(_DWORD *)(v2 + 2696) = timeGetTime(); v46 = *(_DWORD *)(v2 + 2716); if ( v46 && *(_BYTE *)(v46 + 180) == 1 ) { v47 = (_DWORD *)sub_672FD0(v27); sub_6618E0(v47, "FxSkinning_Greyscale", "FxNoSkinning_Greyscale"); sub_672F60(v27, 1); } return 1; } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; // AB395E: using guessed type char byte_AB395E; // AB7288: using guessed type char byte_AB7288; //----- (00658E20) -------------------------------------------------------- int __thiscall sub_658E20(_DWORD *this) { int v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax char *v14; // eax char *v15; // eax int v16; // edx void (__stdcall *v17)(_DWORD); // eax char *v18; // eax float v19; // eax char *v20; // eax char *v21; // eax float v22; // eax char *v23; // eax char *v24; // eax float v25; // eax char *v26; // eax char *v27; // eax float v28; // eax char *v29; // eax char *v30; // eax float v31; // eax char *v32; // eax char **v33; // ecx char *v34; // eax int v35; // ecx int v36; // ecx double v37; // st7 char *v38; // eax float v39; // eax char *v40; // eax int v41; // eax int v42; // eax int v43; // eax float v44; // edx float v45; // edx int v46; // eax float v47; // edx char *v48; // eax float v49; // eax char *v50; // eax int v51; // eax int v52; // eax char *v53; // edx int v54; // eax float v55; // edx char *v56; // edx int v57; // eax char *v58; // ecx int v59; // eax _DWORD *v60; // eax _DWORD *v61; // eax _DWORD *v62; // eax _DWORD *v63; // eax _DWORD *v64; // eax _DWORD *v65; // eax _DWORD *v66; // eax _DWORD *v67; // eax _DWORD *v68; // eax _DWORD **v69; // eax _DWORD *v70; // ecx _DWORD *v71; // edi char **v73; // ecx void **v74; // [esp+48h] [ebp-3Ch] void **v75; // [esp+54h] [ebp-30h] _DWORD *v76; // [esp+60h] [ebp-24h] float v77; // [esp+64h] [ebp-20h] char v78[4]; // [esp+68h] [ebp-1Ch] char *v79; // [esp+6Ch] [ebp-18h] char *v80; // [esp+70h] [ebp-14h] char *i; // [esp+74h] [ebp-10h] int v82; // [esp+80h] [ebp-4h] v1 = (int)this; v76 = this; sub_64FC60(this); v82 = 0; sub_6A73E0((_DWORD *)(v1 + 60)); sub_64D5A0((_DWORD *)(v1 + 84)); *(_DWORD *)v1 = &Char::`vftable'; *(_DWORD *)(v1 + 60) = &Char::`vftable'; *(_DWORD *)(v1 + 84) = &Char::`vftable'; *(_DWORD *)(v1 + 524) = 0; *(_DWORD *)(v1 + 528) = 0; *(_DWORD *)(v1 + 532) = 0; *(_BYTE *)(v1 + 540) = 0; LOBYTE(v82) = 3; *(_DWORD *)(v1 + 688) = 0; v2 = operator new(0x14u); if ( !v2 ) { *(float *)&v79 = 0.0; v73 = &v79; goto LABEL_135; } *(_DWORD *)(v1 + 684) = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)(v1 + 684) + 4) = *(_DWORD *)(v1 + 684); *(_DWORD *)(v1 + 696) = 0; *(_DWORD *)(v1 + 700) = 0; *(_DWORD *)(v1 + 704) = 0; *(_DWORD *)(v1 + 708) = 0; *(_DWORD *)(v1 + 712) = 0; *(_DWORD *)(v1 + 716) = 0; *(_DWORD *)(v1 + 720) = 0; *(_DWORD *)(v1 + 724) = 0; sub_441020((float *)(v1 + 728)); *(_DWORD *)(v1 + 772) = 0; sub_677490((_DWORD *)(v1 + 776)); sub_8CF4C0((float *)(v1 + 1516)); sub_67E1B0((float *)(v1 + 1588)); sub_663020((_DWORD *)(v1 + 1696)); sub_65AF80((_DWORD *)(v1 + 1820)); LOBYTE(v82) = 19; *(_DWORD *)(v1 + 1948) = 0; v3 = operator new(0x18u); if ( !v3 ) { LABEL_132: *(float *)&v79 = 0.0; std::exception::exception((std::exception *)&v75, (const char *const *)&v79); v75 = &std::bad_alloc::`vftable'; _CxxThrowException(&v75, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 1944) = v3; *v3 = v3; *(_DWORD *)(*(_DWORD *)(v1 + 1944) + 4) = *(_DWORD *)(v1 + 1944); *(_DWORD *)(*(_DWORD *)(v1 + 1944) + 8) = *(_DWORD *)(v1 + 1944); *(_BYTE *)(*(_DWORD *)(v1 + 1944) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 1944) + 21) = 1; LOBYTE(v82) = 20; *(_DWORD *)(v1 + 1964) = 0; v4 = operator new(0x18u); if ( !v4 ) { LABEL_130: *(float *)&v80 = 0.0; std::exception::exception((std::exception *)&v74, (const char *const *)&v80); v74 = &std::bad_alloc::`vftable'; _CxxThrowException(&v74, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 1960) = v4; *v4 = v4; *(_DWORD *)(*(_DWORD *)(v1 + 1960) + 4) = *(_DWORD *)(v1 + 1960); *(_DWORD *)(*(_DWORD *)(v1 + 1960) + 8) = *(_DWORD *)(v1 + 1960); *(_BYTE *)(*(_DWORD *)(v1 + 1960) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 1960) + 21) = 1; LOBYTE(v82) = 21; *(_DWORD *)(v1 + 1980) = 0; v5 = operator new(0x18u); if ( !v5 ) { LABEL_128: *(float *)&v79 = 0.0; std::exception::exception((std::exception *)&v75, (const char *const *)&v79); v75 = &std::bad_alloc::`vftable'; _CxxThrowException(&v75, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 1976) = v5; *v5 = v5; *(_DWORD *)(*(_DWORD *)(v1 + 1976) + 4) = *(_DWORD *)(v1 + 1976); *(_DWORD *)(*(_DWORD *)(v1 + 1976) + 8) = *(_DWORD *)(v1 + 1976); *(_BYTE *)(*(_DWORD *)(v1 + 1976) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 1976) + 21) = 1; LOBYTE(v82) = 22; *(_DWORD *)(v1 + 1996) = 0; v6 = operator new(0x18u); if ( !v6 ) { LABEL_126: *(float *)&v80 = 0.0; std::exception::exception((std::exception *)&v74, (const char *const *)&v80); v74 = &std::bad_alloc::`vftable'; _CxxThrowException(&v74, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 1992) = v6; *v6 = v6; *(_DWORD *)(*(_DWORD *)(v1 + 1992) + 4) = *(_DWORD *)(v1 + 1992); *(_DWORD *)(*(_DWORD *)(v1 + 1992) + 8) = *(_DWORD *)(v1 + 1992); *(_BYTE *)(*(_DWORD *)(v1 + 1992) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 1992) + 21) = 1; LOBYTE(v82) = 23; *(_DWORD *)(v1 + 2012) = 0; v7 = operator new(0x18u); if ( !v7 ) { LABEL_124: *(float *)&v79 = 0.0; std::exception::exception((std::exception *)&v75, (const char *const *)&v79); v75 = &std::bad_alloc::`vftable'; _CxxThrowException(&v75, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 2008) = v7; *v7 = v7; *(_DWORD *)(*(_DWORD *)(v1 + 2008) + 4) = *(_DWORD *)(v1 + 2008); *(_DWORD *)(*(_DWORD *)(v1 + 2008) + 8) = *(_DWORD *)(v1 + 2008); *(_BYTE *)(*(_DWORD *)(v1 + 2008) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2008) + 21) = 1; LOBYTE(v82) = 24; *(_DWORD *)(v1 + 2028) = 0; v8 = operator new(0x18u); if ( !v8 ) { *(float *)&v80 = 0.0; v73 = &v80; LABEL_135: std::exception::exception((std::exception *)&v74, (const char *const *)v73); v74 = &std::bad_alloc::`vftable'; _CxxThrowException(&v74, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 2024) = v8; *v8 = v8; *(_DWORD *)(*(_DWORD *)(v1 + 2024) + 4) = *(_DWORD *)(v1 + 2024); *(_DWORD *)(*(_DWORD *)(v1 + 2024) + 8) = *(_DWORD *)(v1 + 2024); *(_BYTE *)(*(_DWORD *)(v1 + 2024) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2024) + 21) = 1; LOBYTE(v82) = 25; *(_DWORD *)(v1 + 2044) = 0; v9 = operator new(0x18u); if ( !v9 ) goto LABEL_132; *(_DWORD *)(v1 + 2040) = v9; *v9 = v9; *(_DWORD *)(*(_DWORD *)(v1 + 2040) + 4) = *(_DWORD *)(v1 + 2040); *(_DWORD *)(*(_DWORD *)(v1 + 2040) + 8) = *(_DWORD *)(v1 + 2040); *(_BYTE *)(*(_DWORD *)(v1 + 2040) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2040) + 21) = 1; LOBYTE(v82) = 26; *(_DWORD *)(v1 + 2060) = 0; v10 = operator new(0x18u); if ( !v10 ) goto LABEL_130; *(_DWORD *)(v1 + 2056) = v10; *v10 = v10; *(_DWORD *)(*(_DWORD *)(v1 + 2056) + 4) = *(_DWORD *)(v1 + 2056); *(_DWORD *)(*(_DWORD *)(v1 + 2056) + 8) = *(_DWORD *)(v1 + 2056); *(_BYTE *)(*(_DWORD *)(v1 + 2056) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2056) + 21) = 1; LOBYTE(v82) = 27; *(_DWORD *)(v1 + 2076) = 0; v11 = operator new(0x18u); if ( !v11 ) goto LABEL_128; *(_DWORD *)(v1 + 2072) = v11; *v11 = v11; *(_DWORD *)(*(_DWORD *)(v1 + 2072) + 4) = *(_DWORD *)(v1 + 2072); *(_DWORD *)(*(_DWORD *)(v1 + 2072) + 8) = *(_DWORD *)(v1 + 2072); *(_BYTE *)(*(_DWORD *)(v1 + 2072) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2072) + 21) = 1; LOBYTE(v82) = 28; *(_DWORD *)(v1 + 2092) = 0; v12 = operator new(0x18u); if ( !v12 ) goto LABEL_126; *(_DWORD *)(v1 + 2088) = v12; *v12 = v12; *(_DWORD *)(*(_DWORD *)(v1 + 2088) + 4) = *(_DWORD *)(v1 + 2088); *(_DWORD *)(*(_DWORD *)(v1 + 2088) + 8) = *(_DWORD *)(v1 + 2088); *(_BYTE *)(*(_DWORD *)(v1 + 2088) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 2088) + 21) = 1; LOBYTE(v82) = 29; *(_DWORD *)(v1 + 2104) = 0; v13 = operator new(0xCu); if ( !v13 ) goto LABEL_124; *(_DWORD *)(v1 + 2100) = v13; *v13 = v13; *(_DWORD *)(*(_DWORD *)(v1 + 2100) + 4) = *(_DWORD *)(v1 + 2100); *(_DWORD *)(v1 + 2128) = 0; *(_DWORD *)(v1 + 2132) = 0; sub_663F40((_DWORD *)(v1 + 2144)); sub_663F40((_DWORD *)(v1 + 2256)); sub_663F40((_DWORD *)(v1 + 2368)); v80 = (char *)(v1 + 2548); *(_DWORD *)(v1 + 2568) = 0; LOBYTE(v82) = 35; sub_661220((_DWORD *)(v1 + 2576)); v14 = (char *)*((_DWORD *)v80 + 5); LOBYTE(v82) = 36; i = v14; if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)v14 + 1) && *(float *)&i != 0.0 ) (**(void (__stdcall ***)(signed int))i)(1); *((_DWORD *)v80 + 5) = 0; } v15 = v80; *(_DWORD *)v80 = 0; *((_DWORD *)v15 + 1) = 0; *((_DWORD *)v15 + 2) = 0; *((_DWORD *)v15 + 3) = 0; *(_DWORD *)(v1 + 2704) = 0; sub_8D0610((_BYTE *)(v1 + 2744)); sub_661220((_DWORD *)(v1 + 2772)); *(float *)(v1 + 2876) = 0.0; *(float *)(v1 + 2880) = 0.0; *(float *)(v1 + 2884) = 0.0; LOBYTE(v82) = 39; *(_WORD *)(v1 + 548) = -1; *(_BYTE *)(v1 + 550) = 0; *(_BYTE *)(v1 + 590) = 0; *(_DWORD *)(v1 + 632) = 0; *(_DWORD *)(v1 + 636) = 0; *(_DWORD *)(v1 + 640) = 0; *(_DWORD *)(v1 + 644) = 0; *(_DWORD *)(v1 + 648) = 0; *(_DWORD *)(v1 + 652) = 0; *(_DWORD *)(v1 + 656) = 0; *(_BYTE *)(v1 + 1481) = 0; *(_BYTE *)(v1 + 1922) = 0; sub_8CF540(v1 + 1516, &dword_AB4FE8, &flt_AB4FD0); *(float *)&v80 = flt_BA45B4 * 4.0; *(float *)(v1 + 1580) = *(float *)&v80; *(_DWORD *)(v1 + 550) = 0; *(_DWORD *)(v1 + 554) = 0; *(_DWORD *)(v1 + 558) = 0; *(_DWORD *)(v1 + 562) = 0; *(_DWORD *)(v1 + 566) = 0; *(_DWORD *)(v1 + 570) = 0; *(_DWORD *)(v1 + 574) = 0; *(_DWORD *)(v1 + 578) = 0; *(_DWORD *)(v1 + 582) = 0; *(_DWORD *)(v1 + 586) = 0; v16 = *(_DWORD *)(v1 + 1588); *(_DWORD *)(v1 + 1868) = -2; v17 = *(void (__stdcall **)(_DWORD))(v16 + 8); *(_DWORD *)(v1 + 1872) = -2; *(float *)(v1 + 1844) = flt_AD8BFC; *(float *)(v1 + 1848) = flt_AD8C00; *(float *)(v1 + 1852) = 1.0; v17(*(float *)(v1 + 1848)); (*(void (__thiscall **)(int))(*(_DWORD *)(v1 + 1588) + 32))(v1 + 1588); *(_BYTE *)(v1 + 1924) = 1; *(_DWORD *)(v1 + 1928) = 0; *(_DWORD *)(v1 + 1932) = 1; *(_WORD *)(v1 + 2112) = -1; *(_DWORD *)(v1 + 1916) = 0; *(_WORD *)(v1 + 1920) = -1; *(float *)&v18 = COERCE_FLOAT(operator new(0x168u)); v79 = v18; LOBYTE(v82) = 40; if ( *(float *)&v18 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_8D83D0(v18, 0)); v19 = *(float *)(v1 + 700); LOBYTE(v82) = 39; *(float *)&v80 = v19; if ( (char *)LODWORD(v19) != i ) { if ( v19 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v19) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v20 = i; *(float *)(v1 + 700) = *(float *)&i; if ( v20 ) InterlockedIncrement((volatile LONG *)v20 + 1); } sub_85AB50(*(void ***)(v1 + 700), off_AB3B78); *(_WORD *)(*(_DWORD *)(v1 + 700) + 28) |= 1u; *(float *)&v21 = COERCE_FLOAT(operator new(0xE8u)); v79 = v21; LOBYTE(v82) = 41; if ( *(float *)&v21 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_85A1C0(v21, 0)); v22 = *(float *)(v1 + 716); LOBYTE(v82) = 39; *(float *)&v80 = v22; if ( (char *)LODWORD(v22) != i ) { if ( v22 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v22) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v23 = i; *(float *)(v1 + 716) = *(float *)&i; if ( v23 ) InterlockedIncrement((volatile LONG *)v23 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 700) + 116))(*(_DWORD *)(v1 + 716), 0); *(float *)&v24 = COERCE_FLOAT(operator new(0xE8u)); v79 = v24; LOBYTE(v82) = 42; if ( *(float *)&v24 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_85A1C0(v24, 0)); v25 = *(float *)(v1 + 708); LOBYTE(v82) = 39; *(float *)&v80 = v25; if ( (char *)LODWORD(v25) != i ) { if ( v25 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v25) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v26 = i; *(float *)(v1 + 708) = *(float *)&i; if ( v26 ) InterlockedIncrement((volatile LONG *)v26 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 716) + 116))(*(_DWORD *)(v1 + 708), 0); *(_WORD *)(*(_DWORD *)(v1 + 708) + 28) &= 0xFFFEu; *(float *)&v27 = COERCE_FLOAT(operator new(0xE8u)); v79 = v27; LOBYTE(v82) = 43; if ( *(float *)&v27 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_85A1C0(v27, 0)); v28 = *(float *)(v1 + 712); LOBYTE(v82) = 39; *(float *)&v80 = v28; if ( (char *)LODWORD(v28) != i ) { if ( v28 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v28) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v29 = i; *(float *)(v1 + 712) = *(float *)&i; if ( v29 ) InterlockedIncrement((volatile LONG *)v29 + 1); } sub_85D860((float *)(*(_DWORD *)(v1 + 712) + 52), flt_BA45B4, 0.0, 0.0, 1.0); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 716) + 116))(*(_DWORD *)(v1 + 712), 0); *(_WORD *)(*(_DWORD *)(v1 + 712) + 28) |= 1u; *(float *)&v30 = COERCE_FLOAT(operator new(0xE8u)); v79 = v30; LOBYTE(v82) = 44; if ( *(float *)&v30 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_85A1C0(v30, 0)); v31 = *(float *)(v1 + 704); LOBYTE(v82) = 39; *(float *)&v80 = v31; if ( (char *)LODWORD(v31) != i ) { if ( v31 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v31) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v32 = i; *(float *)(v1 + 704) = *(float *)&i; if ( v32 ) InterlockedIncrement((volatile LONG *)v32 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 716) + 116))(*(_DWORD *)(v1 + 704), 0); *(_WORD *)(*(_DWORD *)(v1 + 708) + 28) &= 0xFFFEu; *(_DWORD *)(v1 + 2116) = 0; v33 = *(char ***)(v1 + 2100); v34 = *v33; *v33 = (char *)v33; *(_DWORD *)(*(_DWORD *)(v1 + 2100) + 4) = *(_DWORD *)(v1 + 2100); *(_DWORD *)(v1 + 2104) = 0; if ( v34 != *(char **)(v1 + 2100) ) { do { v80 = *(char **)v34; operator delete(v34); v34 = v80; } while ( v80 != *(char **)(v1 + 2100) ); } v35 = v1 + 2144; *(float *)(v35 + 92) = 0.0; *(float *)(v35 + 96) = 0.0; *(_DWORD *)(v35 + 16) = 0; *(_DWORD *)(v35 + 8) = 0; *(_DWORD *)(v35 + 12) = 0; *(_DWORD *)(v35 + 20) = 0; *(_DWORD *)(v35 + 28) = 0; *(_DWORD *)(v35 + 88) = 0; *(_DWORD *)(v35 + 100) = 0; *(_BYTE *)(v35 + 108) = 0; *(_DWORD *)(v35 + 24) = 0; nullsub_22(0, 0); *(_WORD *)(v1 + 2224) = 0; *(_BYTE *)(v1 + 2226) = 0; v36 = v1 + 2368; *(_WORD *)(v1 + 2227) = 0; *(float *)(v1 + 2248) = 0.0; *(float *)(v36 + 92) = 0.0; *(float *)(v36 + 96) = 0.0; *(_DWORD *)(v36 + 16) = 0; *(_DWORD *)(v36 + 8) = 0; *(_DWORD *)(v36 + 12) = 0; *(_DWORD *)(v36 + 20) = 0; *(_DWORD *)(v36 + 28) = 0; *(_DWORD *)(v36 + 88) = 0; *(_DWORD *)(v36 + 100) = 0; *(_BYTE *)(v36 + 108) = 0; *(_DWORD *)(v36 + 24) = 0; nullsub_22(0, 0); *(_WORD *)(v1 + 2448) = 0; *(_BYTE *)(v1 + 2450) = 0; *(_WORD *)(v1 + 2451) = 0; *(float *)(v1 + 2472) = 0.0; *(_WORD *)(v1 + 2480) = -1; sub_65CE60((_DWORD *)v1); sub_65CE10((_DWORD *)v1); *(float *)(v1 + 1504) = flt_AB66CA; v37 = flt_AB66CE; *(_BYTE *)(v1 + 1482) = 0; *(float *)(v1 + 1508) = v37; *(_BYTE *)(v1 + 1925) = 0; *(_WORD *)(v1 + 2124) = 1; *(float *)(v1 + 1496) = 1000.0; *(_BYTE *)(v1 + 2496) = 0; *(float *)(v1 + 1500) = 4000.0; *(float *)(v1 + 2120) = 1.0; *(float *)(v1 + 1492) = -3.4028235e38; *(float *)(v1 + 1484) = -3.4028235e38; *(float *)(v1 + 1488) = 1.0; sub_65B7F0((_DWORD *)v1); sub_662F80((_DWORD *)(v1 + 1696)); *(_BYTE *)(v1 + 465) = 0; memset((void *)(v1 + 209), 0, 0x100u); *(_WORD *)(v1 + 2508) = 0; *(float *)&v38 = COERCE_FLOAT(operator new(0x10Cu)); v79 = v38; LOBYTE(v82) = 45; if ( *(float *)&v38 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_861A00((float *)v38)); v39 = *(float *)(v1 + 2128); LOBYTE(v82) = 39; *(float *)&v80 = v39; if ( (char *)LODWORD(v39) != i ) { if ( v39 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v39) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v40 = i; *(float *)(v1 + 2128) = *(float *)&i; if ( v40 ) InterlockedIncrement((volatile LONG *)v40 + 1); } v41 = *(_DWORD *)(v1 + 2128); *(float *)(v41 + 224) = 100.0; ++*(_DWORD *)(v41 + 188); v42 = *(_DWORD *)(v1 + 2128); v77 = 0.0; ++*(_DWORD *)(v42 + 188); *(float *)v78 = 0.0; *(float *)(v42 + 228) = v77; *(float *)&v79 = 1.0; *(float *)(v42 + 232) = *(float *)v78; v77 = 0.0; *(float *)v78 = 0.0; *(float *)(v42 + 236) = *(float *)&v79; v43 = *(_DWORD *)(v1 + 2128); *(float *)&v79 = 1.0; v44 = v77; ++*(_DWORD *)(v43 + 188); v77 = 0.0; *(float *)(v43 + 240) = v44; v45 = *(float *)v78; *(float *)v78 = 0.0; *(float *)(v43 + 244) = v45; *(float *)(v43 + 248) = *(float *)&v79; *(float *)&v79 = 1.0; v46 = *(_DWORD *)(v1 + 2128); v47 = v77; ++*(_DWORD *)(v46 + 188); *(float *)(v46 + 252) = v47; *(float *)(v46 + 256) = *(float *)v78; *(float *)(v46 + 260) = *(float *)&v79; *(_BYTE *)(*(_DWORD *)(v1 + 2128) + 176) = 1; *(float *)&v48 = COERCE_FLOAT(operator new(0x10Cu)); v79 = v48; LOBYTE(v82) = 46; if ( *(float *)&v48 == 0.0 ) *(float *)&i = 0.0; else *(float *)&i = COERCE_FLOAT(sub_861A00((float *)v48)); v49 = *(float *)(v1 + 2132); LOBYTE(v82) = 39; *(float *)&v80 = v49; if ( (char *)LODWORD(v49) != i ) { if ( v49 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v49) + 4)) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); v50 = i; *(float *)(v1 + 2132) = *(float *)&i; if ( v50 ) InterlockedIncrement((volatile LONG *)v50 + 1); } v51 = *(_DWORD *)(v1 + 2132); *(float *)(v51 + 224) = 1.0; ++*(_DWORD *)(v51 + 188); v52 = *(_DWORD *)(v1 + 2132); v77 = 0.2; ++*(_DWORD *)(v52 + 188); *(float *)&v79 = 0.2; *(float *)(v52 + 228) = v77; *(float *)v78 = 1.0; *(float *)(v52 + 232) = 1.0; v77 = 0.2; v53 = v79; *(float *)&v79 = 0.2; *(_DWORD *)(v52 + 236) = v53; v54 = *(_DWORD *)(v1 + 2132); *(float *)v78 = 1.0; ++*(_DWORD *)(v54 + 188); v55 = v77; v77 = 0.2; *(float *)(v54 + 240) = v55; *(float *)(v54 + 244) = *(float *)v78; v56 = v79; *(float *)&v79 = 0.2; *(_DWORD *)(v54 + 248) = v56; v57 = *(_DWORD *)(v1 + 2132); *(float *)v78 = 1.0; ++*(_DWORD *)(v57 + 188); *(float *)(v57 + 252) = v77; *(float *)(v57 + 256) = *(float *)v78; *(float *)(v57 + 260) = *(float *)&v79; *(_BYTE *)(*(_DWORD *)(v1 + 2132) + 176) = 1; *(_WORD *)(v1 + 496) = -1; *(_WORD *)(v1 + 472) = -1; *(_WORD *)(v1 + 476) = -1; *(_DWORD *)(v1 + 492) = 0; *(_DWORD *)(v1 + 480) = -1; *(_BYTE *)(v1 + 488) = 0; *(_DWORD *)(v1 + 484) = 0xFFFF; *(_WORD *)(v1 + 500) = -1; *(_DWORD *)(v1 + 516) = 0; *(_DWORD *)(v1 + 504) = -1; *(_WORD *)(v1 + 489) = 0; *(_BYTE *)(v1 + 512) = 0; *(_DWORD *)(v1 + 508) = 0xFFFF; *(_BYTE *)(v1 + 514) = 0; *(_WORD *)(v1 + 520) = -1; *(float *)(v1 + 2136) = 3.4028235e38; *(_BYTE *)(v1 + 1512) = 0; *(float *)(v1 + 2676) = 0.0; *(_BYTE *)(v1 + 208) = 1; *(float *)(v1 + 2684) = 0.0; *(_BYTE *)(v1 + 2510) = 0; *(_BYTE *)(v1 + 1936) = 0; *(_DWORD *)(v1 + 676) = 0; *(_WORD *)(v1 + 176) = 0; *(_BYTE *)(v1 + 2140) = 1; *(_DWORD *)(v1 + 160) = 0; *(_DWORD *)(v1 + 168) = 0; *(_BYTE *)(v1 + 2680) = 1; *(_BYTE *)(v1 + 2690) = 3; *(_WORD *)(v1 + 2688) = 0; *(_DWORD *)(v1 + 1888) = 0; *(_DWORD *)(v1 + 1884) = 0; *(_DWORD *)(v1 + 1880) = 0; *(_DWORD *)(v1 + 1876) = 0; *(_BYTE *)(v1 + 1892) = 0; *(float *)(v1 + 1900) = 0.5; *(float *)(v1 + 1896) = 0.5; *(_BYTE *)(v1 + 1480) = 1; *(_BYTE *)(v1 + 2700) = 0; *(float *)(v1 + 468) = 0.0; *(float *)&v80 = COERCE_FLOAT(sub_6FE020(&v79, v1)); v58 = *(char **)(v1 + 2704); LOBYTE(v82) = 47; i = v58; if ( v58 != *(char **)v80 ) { if ( v58 && !InterlockedDecrement((volatile LONG *)v58 + 1) && *(float *)&i != 0.0 ) (**(void (__stdcall ***)(signed int))i)(1); v59 = *(_DWORD *)v80; *(_DWORD *)(v1 + 2704) = *(_DWORD *)v80; if ( v59 ) InterlockedIncrement((volatile LONG *)(v59 + 4)); } LOBYTE(v82) = 39; if ( *(float *)&v79 != 0.0 ) { v80 = v79; if ( !InterlockedDecrement((volatile LONG *)v79 + 1) && *(float *)&v80 != 0.0 ) (**(void (__stdcall ***)(signed int))v80)(1); } *(float *)(v1 + 2708) = 0.0; *(_BYTE *)(v1 + 680) = -1; *(_DWORD *)(v1 + 2712) = 0; *(_DWORD *)(v1 + 2716) = 0; (**(void (***)(void))(v1 + 728))(); v80 = *(char **)(*(_DWORD *)(v1 + 1944) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 1944) + 4) = *(_DWORD *)(v1 + 1944); **(_DWORD **)(v1 + 1944) = *(_DWORD *)(v1 + 1944); *(_DWORD *)(*(_DWORD *)(v1 + 1944) + 8) = *(_DWORD *)(v1 + 1944); *(_DWORD *)(v1 + 1948) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 1960) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 1960) + 4) = *(_DWORD *)(v1 + 1960); **(_DWORD **)(v1 + 1960) = *(_DWORD *)(v1 + 1960); *(_DWORD *)(*(_DWORD *)(v1 + 1960) + 8) = *(_DWORD *)(v1 + 1960); *(_DWORD *)(v1 + 1964) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 1976) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 1976) + 4) = *(_DWORD *)(v1 + 1976); **(_DWORD **)(v1 + 1976) = *(_DWORD *)(v1 + 1976); *(_DWORD *)(*(_DWORD *)(v1 + 1976) + 8) = *(_DWORD *)(v1 + 1976); *(_DWORD *)(v1 + 1980) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 1992) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 1992) + 4) = *(_DWORD *)(v1 + 1992); **(_DWORD **)(v1 + 1992) = *(_DWORD *)(v1 + 1992); *(_DWORD *)(*(_DWORD *)(v1 + 1992) + 8) = *(_DWORD *)(v1 + 1992); *(_DWORD *)(v1 + 1996) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2008) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2008) + 4) = *(_DWORD *)(v1 + 2008); **(_DWORD **)(v1 + 2008) = *(_DWORD *)(v1 + 2008); *(_DWORD *)(*(_DWORD *)(v1 + 2008) + 8) = *(_DWORD *)(v1 + 2008); *(_DWORD *)(v1 + 2012) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2024) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2024) + 4) = *(_DWORD *)(v1 + 2024); **(_DWORD **)(v1 + 2024) = *(_DWORD *)(v1 + 2024); *(_DWORD *)(*(_DWORD *)(v1 + 2024) + 8) = *(_DWORD *)(v1 + 2024); *(_DWORD *)(v1 + 2028) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2040) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2040) + 4) = *(_DWORD *)(v1 + 2040); **(_DWORD **)(v1 + 2040) = *(_DWORD *)(v1 + 2040); *(_DWORD *)(*(_DWORD *)(v1 + 2040) + 8) = *(_DWORD *)(v1 + 2040); *(_DWORD *)(v1 + 2044) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2056) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2056) + 4) = *(_DWORD *)(v1 + 2056); **(_DWORD **)(v1 + 2056) = *(_DWORD *)(v1 + 2056); *(_DWORD *)(*(_DWORD *)(v1 + 2056) + 8) = *(_DWORD *)(v1 + 2056); *(_DWORD *)(v1 + 2060) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2072) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2072) + 4) = *(_DWORD *)(v1 + 2072); **(_DWORD **)(v1 + 2072) = *(_DWORD *)(v1 + 2072); *(_DWORD *)(*(_DWORD *)(v1 + 2072) + 8) = *(_DWORD *)(v1 + 2072); *(_DWORD *)(v1 + 2076) = 0; v80 = *(char **)(*(_DWORD *)(v1 + 2088) + 4); for ( i = v80; !i[21]; v80 = i ) { sub_6DA320(*((void **)i + 2)); i = *(char **)i; operator delete(v80); } *(_DWORD *)(*(_DWORD *)(v1 + 2088) + 4) = *(_DWORD *)(v1 + 2088); **(_DWORD **)(v1 + 2088) = *(_DWORD *)(v1 + 2088); *(_DWORD *)(*(_DWORD *)(v1 + 2088) + 8) = *(_DWORD *)(v1 + 2088); *(_DWORD *)(v1 + 2092) = 0; *(_DWORD *)v78 = 4; v79 = (char *)(v1 + 1972); v60 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v60, 0); v79 = (char *)(v1 + 1988); *(float *)v78 = 0.0; v61 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v61, 0); *(_DWORD *)v78 = 5; v79 = (char *)(v1 + 2004); v62 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v62, 0); *(_DWORD *)v78 = 1; v79 = (char *)(v1 + 2020); v63 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v63, 0); v79 = (char *)(v1 + 2036); *(_DWORD *)v78 = 6; v64 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v64, 0); *(_DWORD *)v78 = 2; v79 = (char *)(v1 + 2052); v65 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v65, 0); *(_DWORD *)v78 = 7; v79 = (char *)(v1 + 2068); v66 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v66, 0); v79 = (char *)(v1 + 2084); *(_DWORD *)v78 = 3; v67 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v67, 0); *(_DWORD *)v78 = 8; v79 = (char *)(v1 + 1956); v68 = sub_5E8850((_DWORD *)(v1 + 1940), v78); sub_4B1DF0((_DWORD *)(v1 + 1940), (int)v78, v68, 0); v69 = *(_DWORD ***)(v1 + 684); v70 = *v69; *v69 = v69; *(_DWORD *)(*(_DWORD *)(v1 + 684) + 4) = *(_DWORD *)(v1 + 684); *(_DWORD *)(v1 + 688) = 0; if ( v70 != *(_DWORD **)(v1 + 684) ) { do { v71 = (_DWORD *)*v70; operator delete(v70); v70 = v71; } while ( v71 != *(_DWORD **)(v1 + 684) ); } *(_DWORD *)(v1 + 2720) = 0; *(_BYTE *)(v1 + 2724) = 0; *(_DWORD *)(v1 + 2728) = -1; *(_BYTE *)(v1 + 2732) = 0; *(_WORD *)(v1 + 2733) = 0; *(_WORD *)(v1 + 2741) = 0; *(_BYTE *)(v1 + 2740) = 0; *(_BYTE *)(v1 + 2872) = 0; *(float *)(v1 + 2900) = 0.0099999998; *(float *)(v1 + 2896) = 0.0; *(float *)(v1 + 2888) = 190.0; *(float *)(v1 + 2892) = 140.0; sub_4430B0((float *)(v1 + 2904)); *(_DWORD *)(v1 + 2924) = 0; *(_WORD *)(v1 + 2916) = -1; *(_DWORD *)(v1 + 2920) = 0; *(_DWORD *)(v1 + 2928) = 0; *(_DWORD *)(v1 + 660) = 0; *(_DWORD *)(v1 + 664) = 0; *(_WORD *)(v1 + 2950) = -1; *(_BYTE *)(v1 + 2932) = 0; *(_WORD *)(v1 + 2952) = 2; *(_BYTE *)(v1 + 2954) = 0; *(_WORD *)(v1 + 2725) = 0; return v1; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F317C: using guessed type void *Char::`vftable'; // 9F319C: using guessed type void *Char::`vftable'; // 9F31A4: using guessed type void *Char::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // AB4FD0: using guessed type float flt_AB4FD0; // AB4FE8: using guessed type int dword_AB4FE8; // AB66CA: using guessed type float flt_AB66CA; // AB66CE: using guessed type float flt_AB66CE; // AD8BFC: using guessed type float flt_AD8BFC; // AD8C00: using guessed type float flt_AD8C00; // BA45B4: using guessed type float flt_BA45B4; //----- (0065A510) -------------------------------------------------------- void __thiscall sub_65A510(void *this, int a2) { int v2; // edi bool v3; // zf _WORD *v4; // eax _WORD *v5; // eax _WORD *v6; // eax _WORD *v7; // eax _WORD *v8; // eax _WORD *v9; // eax _WORD *v10; // eax _WORD *v11; // eax _WORD *v12; // eax _WORD *v13; // eax _WORD *v14; // eax _WORD *v15; // eax _WORD *v16; // eax _WORD *v17; // eax _WORD *v18; // eax _WORD *v19; // eax _WORD *v20; // eax _WORD *v21; // eax int v22; // [esp+8h] [ebp-30h] int v23; // [esp+Ch] [ebp-2Ch] int v24; // [esp+10h] [ebp-28h] int v25; // [esp+14h] [ebp-24h] int v26; // [esp+18h] [ebp-20h] int v27; // [esp+1Ch] [ebp-1Ch] int v28; // [esp+20h] [ebp-18h] int v29; // [esp+24h] [ebp-14h] int v30; // [esp+28h] [ebp-10h] int v31; // [esp+2Ch] [ebp-Ch] v2 = (int)this; if ( a2 ) { memset(&v22, 0, 0x2Bu); v3 = *(_DWORD *)(a2 + 2) == 4; v22 = -1; v23 = -1; v24 = -1; v25 = -1; v26 = -1; v27 = -1; v28 = -1; v29 = -1; v30 = -1; v31 = -1; if ( v3 && dword_AD8EBC != (char *)-776 ) { sub_673110(v2 + 776, dword_AD8EBC + 945); } else { v4 = (_WORD *)sub_40C8D0((void *)(a2 + 24)); if ( v4 ) LOWORD(v23) = *v4; else LOWORD(v23) = -1; v5 = (_WORD *)sub_40C8D0((void *)(a2 + 56)); if ( v5 ) LOWORD(v24) = *v5; else LOWORD(v24) = -1; v6 = (_WORD *)sub_40C8D0((void *)(a2 + 88)); if ( v6 ) HIWORD(v23) = *v6; else HIWORD(v23) = -1; v7 = (_WORD *)sub_40C8D0((void *)(a2 + 120)); if ( v7 ) HIWORD(v24) = *v7; else HIWORD(v24) = -1; v8 = (_WORD *)sub_40C8D0((void *)(a2 + 152)); if ( v8 ) LOWORD(v25) = *v8; else LOWORD(v25) = -1; v9 = (_WORD *)sub_40C8D0((void *)(a2 + 184)); if ( v9 ) HIWORD(v26) = *v9; else HIWORD(v26) = -1; v10 = (_WORD *)sub_40C8D0((void *)(a2 + 216)); if ( v10 ) LOWORD(v26) = *v10; else LOWORD(v26) = -1; v11 = (_WORD *)sub_40C8D0((void *)(a2 + 248)); if ( v11 ) HIWORD(v25) = *v11; else HIWORD(v25) = -1; v12 = (_WORD *)sub_40C8D0((void *)(a2 + 280)); if ( v12 ) HIWORD(v22) = *v12; else HIWORD(v22) = -1; v13 = (_WORD *)sub_40C8D0((void *)(a2 + 568)); if ( v13 ) LOWORD(v31) = *v13; else LOWORD(v31) = -1; v14 = (_WORD *)sub_40C8D0((void *)(a2 + 312)); if ( v14 ) LOWORD(v27) = *v14; else LOWORD(v27) = -1; v15 = (_WORD *)sub_40C8D0((void *)(a2 + 344)); if ( v15 ) LOWORD(v28) = *v15; else LOWORD(v28) = -1; v16 = (_WORD *)sub_40C8D0((void *)(a2 + 408)); if ( v16 ) HIWORD(v28) = *v16; else HIWORD(v28) = -1; v17 = (_WORD *)sub_40C8D0((void *)(a2 + 440)); if ( v17 ) LOWORD(v29) = *v17; else LOWORD(v29) = -1; v18 = (_WORD *)sub_40C8D0((void *)(a2 + 472)); if ( v18 ) HIWORD(v29) = *v18; else HIWORD(v29) = -1; v19 = (_WORD *)sub_40C8D0((void *)(a2 + 504)); if ( v19 ) LOWORD(v30) = *v19; else LOWORD(v30) = -1; v20 = (_WORD *)sub_40C8D0((void *)(a2 + 536)); if ( v20 ) HIWORD(v30) = *v20; else HIWORD(v30) = -1; v21 = (_WORD *)sub_40C8D0((void *)(a2 + 600)); if ( v21 ) HIWORD(v27) = *v21; else HIWORD(v27) = -1; sub_673110(v2 + 776, &v22); } } } //----- (0065A860) -------------------------------------------------------- char __thiscall sub_65A860(void *this, int a2, int a3) { int v3; // esi void (__thiscall *v4)(int, _DWORD); // edx int v5; // ecx int v6; // eax char result; // al int v8; // eax int v9; // eax int v10; // eax _DWORD *v11; // eax FILE *v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax int v16; // ecx int v17; // edx void (__stdcall ***v18)(signed int); // [esp+14h] [ebp-8h] int v19; // [esp+18h] [ebp-4h] int v20; // [esp+28h] [ebp+Ch] _DWORD *v21; // [esp+28h] [ebp+Ch] v3 = (int)this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 648))() ) sub_654B20((_BYTE *)v3, 0); sub_65B210(v3, 1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 48))(v3) ) { v4 = *(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 56); *(_BYTE *)(v3 + 1925) = 1; v4(v3, 0); v5 = *(_DWORD *)(v3 + 700); if ( v5 ) { v6 = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( v6 ) { while ( (char *)v6 != dword_BA6660 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_10; } *(_BYTE *)(*(_DWORD *)(v3 + 700) + 232) = 0; } } LABEL_10: sub_85C4D0(*(_DWORD **)(v3 + 700)); sub_85C6F0(*(_DWORD **)(v3 + 700)); sub_85BED0(*(_DWORD ***)(v3 + 700), 0.0, 1); result = 1; } else { *(float *)(v3 + 2236) = 0.0; *(float *)(v3 + 2240) = 0.0; *(_DWORD *)(v3 + 2160) = 0; *(_DWORD *)(v3 + 2152) = 0; *(_DWORD *)(v3 + 2156) = 0; *(_DWORD *)(v3 + 2164) = 0; *(_DWORD *)(v3 + 2172) = 0; *(_DWORD *)(v3 + 2232) = 0; *(_DWORD *)(v3 + 2244) = 0; *(_BYTE *)(v3 + 2252) = 0; *(_DWORD *)(v3 + 2168) = 0; nullsub_22(0, 0); *(_WORD *)(v3 + 2224) = 0; *(_BYTE *)(v3 + 2226) = 0; *(_WORD *)(v3 + 2227) = 0; *(float *)(v3 + 2248) = 0.0; *(float *)(v3 + 2460) = 0.0; *(float *)(v3 + 2464) = 0.0; *(_DWORD *)(v3 + 2384) = 0; *(_DWORD *)(v3 + 2376) = 0; *(_DWORD *)(v3 + 2380) = 0; *(_DWORD *)(v3 + 2388) = 0; *(_DWORD *)(v3 + 2396) = 0; *(_DWORD *)(v3 + 2456) = 0; *(_DWORD *)(v3 + 2468) = 0; *(_BYTE *)(v3 + 2476) = 0; *(_DWORD *)(v3 + 2392) = 0; nullsub_22(0, 0); *(_WORD *)(v3 + 2448) = 0; *(_BYTE *)(v3 + 2450) = 0; *(_WORD *)(v3 + 2451) = 0; *(float *)(v3 + 2472) = 0.0; if ( *(_BYTE *)(v3 + 2680) ) { v15 = sub_66E1C0(&unk_AD8D28, *(_BYTE *)(v3 + 944), *(_BYTE *)(v3 + 938), a3); v16 = *(_DWORD *)(v3 + 696); v21 = v15; v18 = (void (__stdcall ***)(signed int))v16; if ( (_DWORD *)v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v18 ) (**v18)(1); v15 = v21; } *(_DWORD *)(v3 + 696) = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } LOBYTE(v18) = *(_BYTE *)(v3 + 944); v12 = (FILE *)sub_64C450((int)v18, *(_BYTE *)(v3 + 938)); } else { v8 = *(_DWORD *)(v3 + 2716); if ( v8 && (v9 = *(unsigned __int16 *)(v8 + 174), (_WORD)v9) && (v10 = sub_5C17B0(v9), (v20 = v10) != 0) ) { LOBYTE(v19) = sub_651D70((_WORD *)v3, v10); if ( (_BYTE)v19 == 64 ) { v13 = sub_669410(&unk_AD8D28, *(_WORD *)(v20 + 6)); sub_56FF80((_DWORD *)(v3 + 696), (int)v13); v12 = sub_64C7E0(*(unsigned __int16 *)(v20 + 6)); } else { sub_65A510((void *)v3, v20); v11 = sub_66E1C0(&unk_AD8D28, v19, *(_BYTE *)(v20 + 6), 0); sub_56FF80((_DWORD *)(v3 + 696), (int)v11); v12 = (FILE *)sub_64C450(v19, *(_BYTE *)(v20 + 6)); } } else { v14 = sub_669410(&unk_AD8D28, *(_WORD *)(v3 + 942)); sub_56FF80((_DWORD *)(v3 + 696), (int)v14); v12 = sub_64C7E0(*(unsigned __int16 *)(v3 + 942)); } } v17 = *(_DWORD *)(v3 + 2144); *(_DWORD *)(v3 + 2160) = v12; (*(void (__thiscall **)(int, int))(v17 + 24))(v3 + 2144, v3); (*(void (__thiscall **)(int, int))(*(_DWORD *)(v3 + 2368) + 24))(v3 + 2368, v3); if ( sub_6516C0((_BYTE *)v3) || *(_BYTE *)(v3 + 2510) ) *(_WORD *)(*(_DWORD *)(v3 + 700) + 28) &= 0xFFFEu; if ( *(_DWORD *)(v3 + 696) ) result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 604))(v3, a2); else result = 0; } return result; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (0065AC00) -------------------------------------------------------- void __thiscall sub_65AC00(float *this, float a2, float a3, float a4, float a5) { sub_85D860(this + 13, a2, a3, a4, a5); } //----- (0065AC30) -------------------------------------------------------- char __thiscall sub_65AC30(_DWORD *this) { char result; // al switch ( this[4] ) { case 4: case 5: case 6: case 8: case 0x14: result = 1; break; default: result = 0; break; } return result; } //----- (0065AC70) -------------------------------------------------------- char __thiscall sub_65AC70(float *this, char a2) { float *v2; // esi int *v3; // eax int v4; // eax float *v5; // eax int v7; // [esp+10h] [ebp-Ch] float v8; // [esp+14h] [ebp-8h] int v9; // [esp+18h] [ebp-4h] v2 = this; v3 = (int *)(*(int (**)(void))(*(_DWORD *)this + 196))(); v7 = *v3; v8 = *((float *)v3 + 1); v9 = v3[2]; sub_69AD10((float *)byte_ADB468, *(float *)&v7, v8, (int)&v7); (*(void (__thiscall **)(float *, int *))(*(_DWORD *)v2 + 188))(v2, &v7); LOBYTE(v4) = a2; *((_BYTE *)v2 + 2872) = a2; if ( a2 == 1 ) { v2[719] = flt_ACCFCC; v2[720] = 0.0; v2[721] = 0.0; v5 = (float *)(*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 196))(v2); v2[726] = *v5; v2[727] = v5[1]; v4 = *((_DWORD *)v5 + 2); v2[725] = 0.0099999998; *((_DWORD *)v2 + 728) = v4; } else if ( !a2 ) { *((_BYTE *)v2 + 2953) = 0; v2[725] = 0.0; *((_BYTE *)v2 + 2954) = 0; } return v4; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065AD50) -------------------------------------------------------- int *__thiscall sub_65AD50(int *this, int *a2) { int *v2; // edi int v3; // esi int v4; // eax v2 = this; v3 = *this; if ( *this != *a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *a2; *v2 = *a2; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } return v2; } //----- (0065ADA0) -------------------------------------------------------- void __thiscall sub_65ADA0(int this) { int v1; // esi int v2; // esi v1 = this; sub_8D47C0((void *)(this + 88)); v2 = *(_DWORD *)(v1 + 8); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } } //----- (0065AE20) -------------------------------------------------------- void __thiscall sub_65AE20(int *this) { int *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = this[1]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = *v1; if ( *v1 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (0065AEB0) -------------------------------------------------------- LONG __thiscall sub_65AEB0(char *this) { char *v1; // esi LONG result; // eax int v3; // esi v1 = this; result = sub_6612F0(this + 28); v3 = *((_DWORD *)v1 + 5); if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } } return result; } //----- (0065AF30) -------------------------------------------------------- int sub_65AF30() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9A8 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9A8: using guessed type int dword_ACD9A8; //----- (0065AF50) -------------------------------------------------------- int __thiscall sub_65AF50(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < (this[11] - this[10]) >> 2 ) result = *(_DWORD *)(this[10] + 4 * a2); else result = 0; return result; } //----- (0065AF80) -------------------------------------------------------- _DWORD *__thiscall sub_65AF80(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // edi v1 = this; v2 = 0; *this = 0; v3 = operator new(0xE8u); if ( v3 ) v2 = sub_85A1C0(v3, 0); v4 = (_DWORD *)*v1; if ( (_DWORD *)*v1 != v2 ) { if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); *v1 = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } v1[4] = 0; v1[3] = 0; v1[5] = 0; *((_WORD *)v1 + 4) = 0; return v1; } //----- (0065B040) -------------------------------------------------------- void __thiscall sub_65B040(int *this) { int *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = *this; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *v1 = 0; } v3 = *v1; if ( *v1 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (0065B0E0) -------------------------------------------------------- void __thiscall sub_65B0E0(int *this, int a2) { int *v2; // ebx FILE *v3; // eax int v4; // eax int v5; // esi int v6; // ST00_4 int v7; // edi _DWORD *v8; // ecx unsigned int v9; // edx v2 = this; v3 = sub_64C820(this[4]); v4 = sub_64B9E0(v3, a2); v5 = v2[6]; v6 = *(_DWORD *)(v5 + 12); v7 = v4; *(_DWORD *)(v5 + 24) = 0; nullsub_22(v6, 0); *(_WORD *)(v5 + 80) = 0; *(_BYTE *)(v5 + 82) = 0; *(_WORD *)(v5 + 83) = 0; v8 = (_DWORD *)v2[6]; v8[6] = v7; if ( v7 ) { v9 = *(_DWORD *)(v7 + 108); v8[7] = v9; if ( 10000 * (v9 / 0x2710) == 300000 ) v8[22] = v7; } nullsub_22(v8[3], v7); sub_6643D0((float *)v2[6], flt_ACCFCC); } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065B180) -------------------------------------------------------- void __thiscall sub_65B180(int *this) { int *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[5]; if ( *v1 != v2[7] ) { if ( v2 ) sub_4106E0(v2, *v1); sub_65B0E0(v1, *v1); } } //----- (0065B1B0) -------------------------------------------------------- double __thiscall sub_65B1B0(int this) { char v1; // al int v2; // eax if ( *(_BYTE *)(this + 1936) != 4 ) { if ( *(_BYTE *)(this + 2680) ) return *(float *)(this + 1496); v1 = *(_BYTE *)(this + 1924); if ( v1 == 4 ) return *(float *)(this + 1496); if ( v1 == 5 ) return *(float *)(this + 1496); v2 = *(_DWORD *)(this + 2712); if ( !v2 || !*(_BYTE *)(v2 + 82) ) return *(float *)(this + 1496); } return (float)(*(float *)(this + 1496) + 500.0); } //----- (0065B210) -------------------------------------------------------- LONG __thiscall sub_65B210(int this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // edi void (__thiscall ***v4)(_DWORD, signed int); // edi v2 = this; if ( (_BYTE)a2 ) { *(_WORD *)(*(_DWORD *)(this + 712) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(this + 708) + 28) &= 0xFFFEu; (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(this + 716) + 120))(&a2, *(_DWORD *)(this + 712)); if ( a2 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } (*(void (__stdcall **)(_DWORD, signed int))(**(_DWORD **)(v2 + 716) + 116))(*(_DWORD *)(v2 + 708), 1); } else { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(this + 716) + 120))(&a2, *(_DWORD *)(this + 708)); if ( a2 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } (*(void (__stdcall **)(_DWORD, signed int))(**(_DWORD **)(v2 + 716) + 116))(*(_DWORD *)(v2 + 712), 1); *(_WORD *)(*(_DWORD *)(v2 + 712) + 28) &= 0xFFFEu; *(_WORD *)(*(_DWORD *)(v2 + 708) + 28) |= 1u; } sub_85C6F0(*(_DWORD **)(v2 + 700)); return sub_85C4D0(*(_DWORD **)(v2 + 700)); } //----- (0065B320) -------------------------------------------------------- void __thiscall sub_65B320(int *this, float a2) { int *v2; // esi _DWORD *v3; // edi int v4; // ecx int v5; // edx int v6; // [esp+Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)this[5]; if ( v3 ) { v4 = this[3]; v5 = v3[16]; if ( v5 == v4 && v3[7] == v4 && sub_8C4C90(v3 + 30, v5, &v6) && v6 && *(float *)(v6 + 48) <= (double)*(float *)(v6 + 52) ) { sub_65B180(v2); } sub_803810((float *)v2[5], a2); } } //----- (0065B390) -------------------------------------------------------- int __thiscall sub_65B390(_DWORD *this) { _DWORD *v1; // esi float *v2; // ecx int result; // eax v1 = this; v2 = (float *)this[174]; if ( v2 ) { if ( !*((_BYTE *)v1 + 2140) ) { sub_803810(v2, *((float *)v1 + 373)); sub_65B320(v1 + 637, *((float *)v1 + 373)); result = sub_85BED0((_DWORD **)v1[175], *((float *)v1 + 373), 1); } } return result; } //----- (0065B3F0) -------------------------------------------------------- int __thiscall sub_65B3F0(_DWORD *this, int a2, void *a3, int a4) { int v4; // edx float *v5; // edi int v6; // esi int v7; // ecx int result; // eax bool v9; // [esp+14h] [ebp+Ch] v4 = *(_DWORD *)(this[1] + 4); v5 = (float *)a3; v6 = this[1]; v9 = 1; while ( !*(_BYTE *)(v4 + 21) ) { v6 = v4; if ( (_BYTE)a4 ) { v9 = v5[3] <= (double)*(float *)(v4 + 12); if ( v5[3] > (double)*(float *)(v4 + 12) ) goto LABEL_8; v4 = *(_DWORD *)v4; } else { if ( *(float *)(v4 + 12) <= (double)v5[3] ) { v9 = 0; LABEL_8: v4 = *(_DWORD *)(v4 + 8); continue; } v4 = *(_DWORD *)v4; v9 = 1; } } v7 = *(_DWORD *)sub_6A0F70(this, (int)&a4, v9, v6, v5); result = a2; *(_DWORD *)a2 = v7; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (0065B490) -------------------------------------------------------- float *__thiscall sub_65B490(char **this, int a2) { char **v2; // esi char *v3; // edi float *result; // eax char *v5; // ecx v2 = this; v3 = *this; result = sub_4044C0(*this, *((_DWORD *)*this + 1), a2); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = result; **((_DWORD **)result + 1) = result; return result; } //----- (0065B4E0) -------------------------------------------------------- _DWORD *__thiscall sub_65B4E0(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; this[2] = -1; *this = &NsFindObjectByName::`vftable'; this[8] = 15; this[7] = 0; *((_BYTE *)this + 12) = 0; this[10] = 0; this[11] = 0; this[12] = 0; return result; } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; //----- (0065B510) -------------------------------------------------------- void __thiscall sub_65B510(void **this) { void **v1; // esi v1 = this; if ( this[10] ) operator delete(this[10]); v1[10] = 0; v1[11] = 0; v1[12] = 0; if ( (unsigned int)v1[8] >= 0x10 ) operator delete(v1[3]); v1[7] = 0; v1[8] = (void *)15; *((_BYTE *)v1 + 12) = 0; *v1 = &Ns_TourScene::`vftable'; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; //----- (0065B560) -------------------------------------------------------- bool __thiscall sub_65B560(_DWORD *this, int a2, void *a3) { _DWORD *v3; // ebx _DWORD *v5; // [esp+Ch] [ebp-8h] _DWORD *v6; // [esp+10h] [ebp-4h] v3 = this; sub_4018E0(this + 3, a3, strlen((const char *)a3)); sub_4E6D30(v3 + 10, 0); if ( v3[8] < 0x10u ) v5 = v3 + 3; else v5 = (_DWORD *)v3[3]; v6 = v3 + 10; sub_8CFE00(v3, a2, (int)dword_BA457C, (int)&v5); v3[14] = (v3[11] - v3[10]) >> 2; return ((v3[11] - v3[10]) & 0xFFFFFFFC) != 0; } //----- (0065B5E0) -------------------------------------------------------- signed int __stdcall sub_65B5E0(int a1, char **a2) { char **v2; // esi v2 = a2; if ( !sub_8CF140(a1, *a2) ) return 1; sub_5B3CF0(v2[1], &a1); return -1; } //----- (0065B620) -------------------------------------------------------- void __stdcall sub_65B620(int a1) { JUMPOUT(&loc_65B640); } //----- (0065B630) -------------------------------------------------------- char *__thiscall sub_65B630(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 15); sub_657580(this - 15); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0065B670) -------------------------------------------------------- int __thiscall sub_65B670(_DWORD *this) { return (*(int (__thiscall **)(_DWORD *))(this[397] + 32))(this + 397); } //----- (0065B690) -------------------------------------------------------- bool __thiscall sub_65B690(_DWORD *this) { _DWORD *v1; // esi int v2; // eax bool result; // al v1 = this; result = 0; if ( (*(unsigned __int8 (**)(void))(*this + 500))() ) { v2 = v1[621]; if ( v2 == 4 || v2 == 2 || v2 == 3 ) result = 1; } return result; } //----- (0065B6C0) -------------------------------------------------------- int __thiscall sub_65B6C0(int this, int a2, __int16 a3) { int result; // eax result = a2; *(_DWORD *)(this + 1916) = a2; *(_WORD *)(this + 1920) = a3; return result; } //----- (0065B6E0) -------------------------------------------------------- int __thiscall sub_65B6E0(_DWORD *this) { return this[479]; } //----- (0065B6F0) -------------------------------------------------------- __int16 __thiscall sub_65B6F0(_WORD *this) { return this[960]; } //----- (0065B700) -------------------------------------------------------- int __thiscall sub_65B700(void *this, float a2, float a3, float a4, int a5, float a6) { return sub_4411A0((int)this + 728, a2, a3, a4, a5, a6); } //----- (0065B740) -------------------------------------------------------- int __thiscall sub_65B740(void *this, int a2, float a3) { int result; // eax result = a2; if ( a2 ) result = sub_4411E0((int)this + 728, a2, a3); return result; } //----- (0065B790) -------------------------------------------------------- int __thiscall sub_65B790(void *this) { return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)this + 328))(300, 0, 0); } //----- (0065B7B0) -------------------------------------------------------- void __thiscall sub_65B7B0(int this, char a2) { int v2; // eax if ( *(_BYTE *)(this + 1483) || (v2 = *(_DWORD *)(this + 2484), v2 == 6) ) { *(_BYTE *)(this + 1483) = a2; } else { *(_BYTE *)(this + 1483) = a2; if ( v2 ) *(_DWORD *)(this + 2484) = 5; } } //----- (0065B7F0) -------------------------------------------------------- int __thiscall sub_65B7F0(_DWORD *this) { int result; // eax result = 0; this[476] = 0; this[478] = 0xFFFF; this[477] = 0; return result; } //----- (0065B810) -------------------------------------------------------- int __thiscall sub_65B810(void *this) { void *v1; // esi v1 = this; (*(void (**)(void))(*(_DWORD *)this + 424))(); return (*(int (__thiscall **)(void *, signed int))(*(_DWORD *)v1 + 436))(v1, 4); } //----- (0065B830) -------------------------------------------------------- int __thiscall sub_65B830(_WORD *this) { _WORD *v1; // esi int result; // eax v1 = this; result = 0xFFFF; if ( this[260] != -1 ) { sub_6509A0((int)this); result = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v1 + 340))(v1); } return result; } //----- (0065B870) -------------------------------------------------------- int __thiscall sub_65B870(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this[476] == 4 ) (*(void (**)(void))(*this + 424))(); if ( v1[476] != 3 ) v1[476] = 1; return (*(int (__stdcall **)(_DWORD))(v1[21] + 8))(1.0); } //----- (0065B8B0) -------------------------------------------------------- signed int __thiscall sub_65B8B0(_DWORD *this, char a2, unsigned int *a3, _DWORD *a4) { _DWORD *v4; // edi int (*v5)(void); // edx unsigned int v6; // esi unsigned int v8; // ecx int v9; // [esp+0h] [ebp-20h] int *v10; // [esp+10h] [ebp-10h] int v11; // [esp+1Ch] [ebp-4h] v10 = &v9; v4 = this; v5 = *(int (**)(void))(*this + 440); v6 = -2; v11 = 0; if ( v5() == 4 ) return v4[467]; if ( !a2 && v4[468] != -2 ) v6 = v4[468]; if ( v6 != -2 || (v6 = v4[467], v6 != -2) ) { v8 = 10000 * (v6 / 0x2710); if ( a3 ) *a3 = v8; if ( a4 ) *a4 = 100 * (v6 / 0x64) - v8; } else { if ( a3 ) *a3 = -1; if ( a4 ) { *a4 = -1; return -2; } } return v6; } //----- (0065B9D0) -------------------------------------------------------- char __thiscall sub_65B9D0(_DWORD *this, int a2) { char result; // al int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] sub_65B8B0(this, 0, (unsigned int *)&v4, &v3); result = 0; if ( v4 == a2 ) return 1; if ( v3 == a2 ) result = 2; return result; } //----- (0065BA10) -------------------------------------------------------- int __thiscall sub_65BA10(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 340))(); } //----- (0065BA20) -------------------------------------------------------- char __thiscall sub_65BA20(_DWORD *this) { int v1; // ecx int v3; // eax v1 = this[731]; if ( !v1 ) return 1; v3 = *(_DWORD *)(v1 + 2984); if ( !v3 ) return 0; if ( *(_WORD *)(v3 + 44) || *(_WORD *)(v3 + 46) ) return 1; return 0; } //----- (0065BA40) -------------------------------------------------------- signed int __stdcall sub_65BA40(int a1) { signed int result; // eax if ( a1 == 1000 ) result = 2; else result = a1 != 2000 ? 0 : 3; return result; } //----- (0065BAA0) -------------------------------------------------------- int __thiscall sub_65BAA0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; if ( (_BYTE)a2 != 1 || !this[6] ) { (*(void (__thiscall **)(_DWORD *))(this[397] + 32))(this + 397); sub_65B8B0(v2, 0, (unsigned int *)&a2, &v4); result = 100000; if ( a2 != 100000 && v4 != 100000 ) result = (*(int (__thiscall **)(_DWORD *))(*v2 + 340))(v2); } return result; } //----- (0065BB70) -------------------------------------------------------- void __thiscall sub_65BB70(_DWORD *this, float a2, float a3, char a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // eax int v7; // ecx int v8; // [esp+14h] [ebp-Ch] int v9; // [esp+18h] [ebp-8h] int v10; // [esp+1Ch] [ebp-4h] v4 = this; if ( a4 != 1 || !this[6] ) { (*(void (__thiscall **)(_DWORD *))(this[397] + 32))(this + 397); if ( sub_69AD10((float *)byte_ADB468, a2, a3, (int)&v8) == 1 ) { (*(void (__thiscall **)(_DWORD *, int *))(v4[397] + 40))(v4 + 397, &v8); v5 = (_DWORD *)v4[175]; v5[22] = v8; v5[23] = v9; v5[24] = v10; v6 = v9; v7 = v10; v4[464] = v8; v4[465] = v6; v4[466] = v7; } } } //----- (0065BC10) -------------------------------------------------------- void __thiscall sub_65BC10(float *this, float *a2) { float *v2; // esi float v3; // [esp+8h] [ebp-24h] float v4; // [esp+Ch] [ebp-20h] float v5; // [esp+10h] [ebp-1Ch] float v6; // [esp+14h] [ebp-18h] float v7; // [esp+18h] [ebp-14h] float v8; // [esp+1Ch] [ebp-10h] float v9; // [esp+20h] [ebp-Ch] float v10; // [esp+24h] [ebp-8h] float v11; // [esp+28h] [ebp-4h] v2 = this; if ( a2 ) { if ( a2 != this ) { (*(void (__stdcall **)(float *))(*(_DWORD *)this + 200))(&v3); (*(void (__thiscall **)(float *, float *))(*(_DWORD *)a2 + 200))(a2, &v6); v9 = v6 - v3; v10 = v7 - v4; v11 = v8 - v5; sub_4430B0(&v9); sub_8CFD90(v2 + 379, (int)&v9); } } } //----- (0065BC90) -------------------------------------------------------- void __thiscall sub_65BC90(float *this, float *a2) { float *v2; // esi float v3; // edx float v4; // eax float v5; // [esp+4h] [ebp-24h] float v6; // [esp+8h] [ebp-20h] float v7; // [esp+Ch] [ebp-1Ch] float v8; // [esp+10h] [ebp-18h] float v9; // [esp+14h] [ebp-14h] float v10; // [esp+18h] [ebp-10h] float v11; // [esp+1Ch] [ebp-Ch] float v12; // [esp+20h] [ebp-8h] float v13; // [esp+24h] [ebp-4h] v2 = this; (*(void (__thiscall **)(float *, float *))(*(_DWORD *)this + 200))(this, &v5); v3 = a2[1]; v4 = a2[2]; v11 = *a2; v12 = v3; v13 = v4; v8 = v11 - v5; v9 = v3 - v6; v10 = v4 - v7; sub_4430B0(&v8); sub_8CFD90(v2 + 379, (int)&v8); } //----- (0065BD00) -------------------------------------------------------- char __thiscall sub_65BD00(int this, int a2, int a3, _DWORD *a4) { _DWORD *v4; // edi char v5; // bl char v6; // al char result; // al _DWORD *v8; // eax bool v9; // zf _DWORD *v10; // eax bool v11; // zf _DWORD *v12; // esi int v13; // eax v4 = (_DWORD *)this; v5 = 0; switch ( *(unsigned __int8 *)(this + 944) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v6 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v6 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v6 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v6 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v6 = 21; break; case 0x1Au: case 0x1Bu: v6 = 26; break; default: v6 = 0; break; } if ( a2 != 100000 && a2 != 200000 ) { if ( a2 == 300000 ) { if ( v6 == 1 ) { if ( a3 == 1500 || a3 == 2500 || a3 == 3500 ) { v5 = 1; if ( *a4 != 10 ) { *a4 = 20; return 1; } } } else if ( v6 == 21 ) { if ( a3 == 1500 || a3 == 2500 || a3 == 3500 ) { *a4 = sub_651840((_DWORD *)this) != 18 ? 20 : 90; return 1; } } else if ( v6 == 26 && (a3 == 1500 || a3 == 2500 || a3 == 3500) ) { v5 = 1; if ( sub_651840((_DWORD *)this) == 19 ) { result = 1; *a4 = 20; return result; } } } return v5; } switch ( v6 ) { case 1: if ( (a2 == 100000 || a2 == 200000) && !*a4 && (a3 == 1000 || a3 == 2000) ) { result = 1; *a4 = 10; return result; } return v5; case 6: if ( a2 == 100000 ) { v8 = a4; if ( *a4 ) return v5; if ( a3 == 1000 ) { LABEL_45: *v8 = 10; return 1; } v9 = a3 == 2000; } else { if ( a2 != 200000 ) return v5; v8 = a4; if ( *a4 ) return v5; v9 = a3 == 1000; } if ( v9 ) goto LABEL_45; return v5; case 11: if ( a2 == 100000 ) { if ( !*a4 && (a3 == 1000 || a3 == 2000) ) { *a4 = 40; return 1; } } else if ( a2 == 200000 && !*a4 && a3 == 1000 ) { *a4 = 30; return 1; } return v5; case 16: if ( a2 == 100000 ) { v10 = a4; if ( *a4 ) return v5; if ( a3 == 1000 ) { LABEL_65: *v10 = 60; return 1; } v11 = a3 == 2000; } else { if ( a2 != 200000 ) return v5; v10 = a4; if ( *a4 ) return v5; v11 = a3 == 1000; } if ( !v11 ) return v5; goto LABEL_65; } if ( v6 != 21 ) { if ( v6 != 26 ) return v5; if ( a2 == 100000 ) { if ( a3 == 2000 ) { *a4 = sub_651840((_DWORD *)this) != 19 ? 0 : 20; return 0; } goto LABEL_83; } if ( a2 != 200000 ) return v5; v12 = a4; if ( *a4 ) return v5; if ( a3 != 1000 ) { v13 = sub_651840((_DWORD *)this) - 19; LABEL_89: *v12 = v13 != 0 ? 0 : 20; return v5; } return 1; } if ( a2 != 100000 ) { if ( a2 != 200000 ) return v5; v12 = a4; if ( *a4 ) return v5; if ( a3 != 1000 ) { if ( sub_651840((_DWORD *)this) == 18 ) { *a4 = 90; return 0; } v13 = sub_651840(v4) - 17; goto LABEL_89; } return 1; } if ( a3 != 2000 ) { LABEL_83: result = 0; *a4 = 0; return result; } if ( sub_651840((_DWORD *)this) == 18 ) *a4 = 90; else *a4 = sub_651840(v4) != 17 ? 0 : 20; return 0; } //----- (0065C150) -------------------------------------------------------- bool __thiscall sub_65C150(_DWORD *this) { return this[542] != 0; } //----- (0065C170) -------------------------------------------------------- int __thiscall sub_65C170(_DWORD *this) { unsigned __int16 *v1; // eax int v2; // esi int v3; // edi int result; // eax int v5; // ecx v1 = (unsigned __int16 *)this[541]; if ( !v1 ) return 0; v2 = dword_ACE8D0; v3 = *v1; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v3) && (unsigned __int16)v3 <= *(_WORD *)(v2 + 200) && (v5 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v5 + 4 * v3)) ) { result = *(_DWORD *)(v5 + 4 * v3); } else { result = 0; } return result; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (0065C1C0) -------------------------------------------------------- int __thiscall sub_65C1C0(_DWORD *this) { return this[542]; } //----- (0065C1D0) -------------------------------------------------------- bool __thiscall sub_65C1D0(_DWORD *this) { return this[541] != 0; } //----- (0065C1E0) -------------------------------------------------------- bool __thiscall sub_65C1E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; return (*(unsigned __int8 (**)(void))(*this + 500))() && (v1[621] != 6 || v1[526]); } //----- (0065C210) -------------------------------------------------------- char __thiscall sub_65C210(float *this) { float *v1; // esi int v2; // eax int v3; // eax v1 = this; if ( *((_DWORD *)this + 476) != 4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 436))(0); LOBYTE(v2) = sub_650B20(v1); if ( !(_BYTE)v2 ) { LOBYTE(v2) = sub_6516C0(v1); if ( !(_BYTE)v2 ) { LOBYTE(v2) = sub_662E50((_DWORD *)v1 + 424); if ( !(_BYTE)v2 && *((_BYTE *)v1 + 1924) != 3 ) { if ( sub_652070(v1) ) { v3 = *((_DWORD *)v1 + 482); v1[372] = 1.0; if ( v3 ) { v2 = v3 - 1; if ( !v2 ) LOBYTE(v2) = (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 348))(v1); } else { LOBYTE(v2) = (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 344))(v1); } } else { LOBYTE(v2) = (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 344))(v1); } } } } return v2; } //----- (0065C2A0) -------------------------------------------------------- char __thiscall sub_65C2A0(float *this) { float *v1; // esi int v2; // eax void (__thiscall *v3)(float *); // edx int v4; // eax void (__thiscall *v5)(float *); // edx v1 = this; LOBYTE(v2) = sub_662E50((_DWORD *)this + 424); if ( (_BYTE)v2 ) return v2; v3 = *(void (__thiscall **)(float *))(*(_DWORD *)v1 + 424); v1[372] = 1.0; v3(v1); v4 = *((_DWORD *)v1 + 483); if ( !v4 ) { v5 = *(void (__thiscall **)(float *))(*(_DWORD *)v1 + 360); goto LABEL_6; } if ( v4 == 1 ) { v5 = *(void (__thiscall **)(float *))(*(_DWORD *)v1 + 364); LABEL_6: v5(v1); } (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 376))(v1); v2 = sub_65C170(v1); if ( !v2 || !*(_BYTE *)(v2 + 192) ) LOBYTE(v2) = sub_64EB10((_DWORD *)v1 + 21); return v2; } //----- (0065C320) -------------------------------------------------------- bool __thiscall sub_65C320(_DWORD *this) { int v1; // eax bool result; // al v1 = this[541]; if ( v1 ) result = *(_DWORD *)(v1 + 87) != 0; else result = 0; return result; } //----- (0065C340) -------------------------------------------------------- bool __thiscall sub_65C340(_DWORD *this) { int v1; // eax bool result; // al v1 = this[541]; if ( v1 ) result = *(_DWORD *)(v1 + 91) == 1; else result = 0; return result; } //----- (0065C360) -------------------------------------------------------- bool __thiscall sub_65C360(_DWORD *this) { int v1; // eax bool result; // al v1 = this[542]; if ( v1 ) result = strcmp((const char *)(v1 + 35), "ActionCollect") == 0; else result = 0; return result; } //----- (0065C3B0) -------------------------------------------------------- bool __thiscall sub_65C3B0(_DWORD *this) { int v1; // eax bool result; // al int v3; // eax v1 = this[174]; result = 0; if ( v1 ) { v3 = *(_DWORD *)(v1 + 28); if ( v3 == 300 || v3 == 400 ) result = 1; } return result; } //----- (0065C3E0) -------------------------------------------------------- int __thiscall sub_65C3E0(_DWORD *this, int a2, int a3) { int v3; // ebx int v5; // eax unsigned int v6; // edx int v7; // eax unsigned int v8; // ecx int v9; // esi v3 = this[540]; if ( !v3 ) return 0; v5 = (*(int (__stdcall **)(int, int))(*this + 484))(a2, a3); v6 = *(_DWORD *)(v3 + 4); v7 = a3 + a2 + v5; v8 = 0; if ( !v6 ) return 0; v9 = *(_DWORD *)(v3 + 8); while ( v7 != *(_DWORD *)(v9 + 108) ) { ++v8; v9 += 352; if ( v8 >= v6 ) return 0; } return v9; } //----- (0065C450) -------------------------------------------------------- bool __thiscall sub_65C450(_DWORD *this) { int v1; // eax bool result; // al v1 = this[542]; if ( v1 ) result = strcmp((const char *)(v1 + 35), "ActionProduct") == 0; else result = 0; return result; } //----- (0065C4A0) -------------------------------------------------------- bool __thiscall sub_65C4A0(_DWORD *this) { int v1; // eax bool result; // al v1 = this[542]; if ( v1 ) result = strcmp((const char *)(v1 + 35), off_AB3998) == 0; else result = 0; return result; } //----- (0065C4F0) -------------------------------------------------------- char __thiscall sub_65C4F0(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // edi int v5; // edi int v6; // eax int v7; // eax int v8; // ecx int (__thiscall *v9)(_DWORD *, _DWORD); // edx int v11; // [esp+4h] [ebp-4h] v2 = this; sub_65B8B0(this, 0, (unsigned int *)&v11, 0); LOBYTE(v3) = v11; if ( v11 == 100000 || v11 == 800000 ) { LOBYTE(v3) = sub_662E50(v2 + 424); if ( !(_BYTE)v3 ) { if ( v2[476] == 2 ) { LOBYTE(v3) = (*(int (__thiscall **)(_DWORD *))(*v2 + 420))(v2); return (char)v3; } v4 = dword_ACB6C4; LOBYTE(v3) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, a2); if ( (_BYTE)v3 ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v4 + 200) ) { v3 = (int *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)a2); if ( *v3 ) { v5 = *v3; if ( *v3 ) { v6 = *(unsigned __int16 *)(v5 + 65); if ( (_WORD)v6 == -1 ) { v2[478] = a2; v7 = *(_DWORD *)(v5 + 105); goto LABEL_17; } v3 = (int *)sub_4B0DC0(v6); if ( v3 ) { v8 = v2[174]; if ( v8 ) { if ( *(int *)((char *)v3 + 109) == *(_DWORD *)(v8 + 64) ) { v9 = *(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 460); v2[478] = a2; LOBYTE(v3) = v9(v2, *(_DWORD *)(v5 + 105)); return (char)v3; } v2[478] = *(unsigned __int8 *)v3; v7 = *(int *)((char *)v3 + 105); LABEL_17: LOBYTE(v3) = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 460))(v2, v7); return (char)v3; } } } } } } } } return (char)v3; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (0065C610) -------------------------------------------------------- void __thiscall sub_65C610(_DWORD *this, int a2) { _DWORD *v2; // esi void (__thiscall *v3)(_DWORD *, int, _DWORD, _DWORD); // edx void (__thiscall *v4)(_DWORD *); // edx v2 = this; if ( this[174] ) { (*(void (**)(void))(*this + 420))(); v3 = *(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD))(*v2 + 328); v2[476] = 1; v3(v2, a2, 0, 0); v4 = *(void (__thiscall **)(_DWORD *))(*v2 + 620); v2[477] = a2; v4(v2); sub_664160(v2 + 536, 0); } } //----- (0065C670) -------------------------------------------------------- bool __thiscall sub_65C670(_DWORD *this) { unsigned __int16 *v1; // eax v1 = (unsigned __int16 *)this[541]; return v1 && sub_6BF020(*v1); } //----- (0065C690) -------------------------------------------------------- void __thiscall sub_65C690(float *this) { float *v1; // esi int v2; // ecx double v3; // st6 double v4; // st2 float v5; // ST04_4 float v6; // ST04_4 int v7; // ecx float v8; // ST04_4 int v9; // ecx double v10; // st3 float v11; // ST04_4 double v12; // st7 float v13; // ST04_4 int v14; // ecx float v15; // ST04_4 float v16; // [esp+4h] [ebp-8h] float v17; // [esp+4h] [ebp-8h] float v18; // [esp+8h] [ebp-4h] float v19; // [esp+8h] [ebp-4h] float v20; // [esp+8h] [ebp-4h] float v21; // [esp+8h] [ebp-4h] v1 = this; if ( *((_BYTE *)this + 1892) ) { if ( (*(int (**)(void))(*(_DWORD *)this + 92))() <= 0 || *((_BYTE *)v1 + 2496) ) { v1[474] = 0.5; v1[475] = 0.25; } v2 = *((_DWORD *)v1 + 469); v3 = 0.0; if ( v2 ) { if ( *((_DWORD *)v1 + 470) ) { v18 = *(float *)(v2 + 28); if ( v18 != v1[474] ) { v4 = 1.0; if ( v1[474] <= 1.0 ) { if ( v1[474] < 0.0 ) v1[474] = 0.0; v4 = 1.0; v3 = 0.0; } else { v1[474] = 1.0; } v19 = v1[474] - v18; v5 = fabs(v19); if ( v5 < 0.0099999998 ) v19 = v3; v16 = v19 * 0.006000000052154064 + v1[474]; v1[474] = v16; if ( v16 <= v4 ) { if ( v16 < v3 ) v1[474] = v3; } else { v1[474] = v4; } v6 = v1[474]; *(float *)(v2 + 28) = v6; if ( v6 < v3 ) *(float *)(v2 + 28) = v3; v7 = *((_DWORD *)v1 + 470); v8 = 1.0 - v1[474]; *(float *)(v7 + 28) = v8; if ( v8 < v3 ) *(float *)(v7 + 28) = v3; } } } v9 = *((_DWORD *)v1 + 471); if ( v9 ) { if ( *((_DWORD *)v1 + 472) ) { v20 = *(float *)(v9 + 28); if ( v20 != v1[475] ) { v10 = 0.5; if ( v1[475] <= 0.5 ) { if ( v3 > v1[475] ) v1[475] = v3; v10 = 0.5; } else { v1[475] = 0.5; } v21 = v1[475] - v20; v11 = fabs(v21); if ( v11 < 0.0099999998 ) v21 = v3; v17 = 0.006000000052154064 * v21 + v1[475]; v1[475] = v17; if ( v17 <= v10 ) { v12 = v3; if ( v3 > v17 ) v1[475] = v3; } else { v12 = v3; v1[475] = v10; } v13 = v1[475]; *(float *)(v9 + 28) = v13; if ( v13 < v12 ) *(float *)(v9 + 28) = v12; v14 = *((_DWORD *)v1 + 472); v15 = 0.5 - v1[475]; *(float *)(v14 + 28) = v15; if ( v15 < v12 ) *(float *)(v14 + 28) = v12; } } } } } //----- (0065C930) -------------------------------------------------------- bool __thiscall sub_65C930(_DWORD *this) { int v1; // eax bool result; // al v1 = this[542]; if ( v1 ) result = strcmp((const char *)(v1 + 35), "ActionFlag") == 0; else result = 0; return result; } //----- (0065C980) -------------------------------------------------------- bool __thiscall sub_65C980(_DWORD *this) { int v1; // eax const char *v2; // esi bool result; // al v1 = this[542]; result = 0; if ( v1 ) { v2 = (const char *)(v1 + 35); if ( !strcmp((const char *)(v1 + 35), "Run_Bow") || !strcmp(v2, "Run_CBow") || !strcmp(v2, "Run_Non") || !strcmp(v2, "Run_Sp-Ham") || !strcmp(v2, "Run_One") || !strcmp(v2, "Run_Two") || !strcmp(v2, "Run_TwoHandAxe") || !strcmp(v2, "Run_TwoS") || !strcmp(v2, "Run_1Claw") || !strcmp(v2, "Run_1DSWord") ) { result = 1; } } return result; } //----- (0065CBB0) -------------------------------------------------------- int __thiscall sub_65CBB0(_DWORD *this) { _DWORD *v1; // ecx int v2; // eax int result; // eax v1 = (_DWORD *)this[540]; if ( v1 && (v2 = sub_64BA20(v1, "JumpStand_JumpStart")) != 0 ) result = *(_DWORD *)(v2 + 108); else result = 0; return result; } //----- (0065CBE0) -------------------------------------------------------- signed int __stdcall sub_65CBE0(signed int a1, int a2) { signed int result; // eax if ( a1 > 400000 ) { if ( a1 == 500000 ) { result = 8; } else { if ( a1 != 600000 ) return 0; result = 9; } } else { if ( a1 != 400000 ) { switch ( a1 ) { case 100000: return 1; case 200000: return sub_65BA40(a2); case 300000: return 5; } return 0; } if ( a2 == 1000 ) result = 7; else result = a2 != 2000 ? 0 : 6; } return result; } //----- (0065CC70) -------------------------------------------------------- int __thiscall sub_65CC70(_BYTE *this, unsigned int a2, int a3) { int v3; // edi bool v5; // zf int v6; // [esp+4h] [ebp-4h] v3 = (int)this; if ( !sub_652070(this) ) return 0; v6 = 0; if ( a2 > 0x7A120 ) { if ( a2 > 0xC3500 ) { v5 = a2 == 900000; goto LABEL_18; } if ( a2 != 800000 ) { if ( a2 != 600000 && a2 != 700000 ) goto LABEL_20; if ( a3 != 9000 ) { v6 = sub_673720(v3 + 776); goto LABEL_20; } } LABEL_19: v6 = 0; goto LABEL_20; } if ( a2 == 500000 ) goto LABEL_19; if ( a2 <= 0x493E0 ) { if ( a2 == 300000 || a2 == 100000 || a2 == 200000 ) v6 = sub_673720(v3 + 776); goto LABEL_20; } v5 = a2 == 400000; LABEL_18: if ( v5 ) goto LABEL_19; LABEL_20: if ( *(_BYTE *)(v3 + 2742) ) v6 = 0; sub_65BD00(v3, a2, a3, &v6); return v6; } //----- (0065CD40) -------------------------------------------------------- char __thiscall sub_65CD40(float *this) { float *v1; // esi char result; // al int v3; // ST14_4 int *v4; // eax v1 = this; if ( sub_64FA00(this, 358) || sub_64FCB0(v1, 110) ) return 1; if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v1 + 488))(v1) ) { if ( *((_DWORD *)v1 + 642) ) { sub_660E50((int *)v1 + 637); return 1; } if ( !*((_DWORD *)v1 + 731) || *((_DWORD *)v1 + 730) ) return 1; (*(void (**)(void))(**((_DWORD **)v1 + 731) + 356))(); result = 1; } else { (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 424))(v1); (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 340))(v1); *(float *)&v3 = flt_ACCFCC; v4 = (int *)(*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 196))(v1); result = sub_662E60(v1 + 424, v3, *v4, v4[1], v4[2]); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065CE10) -------------------------------------------------------- int __thiscall sub_65CE10(_DWORD *this) { _DWORD *v1; // edi int v2; // ST00_4 int result; // eax v1 = this; v2 = this[539]; this[542] = 0; nullsub_22(v2, 0); result = 0; *((_WORD *)v1 + 1112) = 0; *((_BYTE *)v1 + 2226) = 0; *(_WORD *)((char *)v1 + 2227) = 0; *((_BYTE *)v1 + 2488) = 0; return result; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (0065CE60) -------------------------------------------------------- void __thiscall sub_65CE60(_DWORD *this) { int v1; // esi unsigned int v2; // ecx unsigned int v3; // eax int v4; // [esp+8h] [ebp-4h] v1 = (int)this; v2 = this[468]; if ( v2 != -2 ) { v3 = 10000 * (v2 / 0x2710); if ( (v3 == 600000 || v3 == 700000) && sub_8C4C90((_DWORD *)(*(_DWORD *)(v1 + 696) + 120), v2, &v4) && v4 && *(_DWORD *)(v4 + 68) == 1 ) { sub_800630(*(_DWORD **)(v1 + 696), *(_DWORD *)(v1 + 1872), 0.0); *(_DWORD *)(v1 + 1872) = -2; } sub_651970(v1); sub_651BB0((_DWORD *)v1); } *(_DWORD *)(v1 + 2484) = 0; *(_DWORD *)(v1 + 2164) = 0; *(_BYTE *)(v1 + 1483) = 0; sub_650990((_BYTE *)v1); } //----- (0065CF20) -------------------------------------------------------- char __userpurge sub_65CF20@(int *a1@, int a2@, int a3@, char *a4, int a5) { int *v5; // esi int v7; // ST08_4 int v8; // eax _DWORD *v9; // ebx _DWORD *v10; // ecx unsigned int v11; // eax bool v12; // al int v13; // ebx _DWORD *v14; // ecx int v15; // eax int v16; // eax int v17; // [esp+14h] [ebp-Ch] int v18; // [esp+1Ch] [ebp-4h] v5 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 48))() == 1 ) return 0; v17 = a2; v7 = v5[539]; v5[542] = 0; nullsub_22(v7, 0); *((_WORD *)v5 + 1112) = 0; *((_BYTE *)v5 + 2226) = 0; *(_WORD *)((char *)v5 + 2227) = 0; *((_BYTE *)v5 + 2488) = 0; v8 = sub_650900(v5); v9 = (_DWORD *)v5[540]; v18 = v8; if ( !v9 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(int *))(*v5 + 648))(v5) ) { v10 = (_DWORD *)v5[568]; if ( !v10 ) return 0; v11 = sub_64BAA0(v10, a4, v18, 1); } else { if ( *((_BYTE *)v5 + 2680) || (v12 = sub_651CD0(v5)) != 0 ) v12 = 1; v11 = sub_64BAA0(v9, a4, v18, v12); } v13 = v11; if ( !v11 ) return 0; v14 = (_DWORD *)v5[540]; if ( v14 ) { v15 = sub_64B9E0(v14, *(_DWORD *)(v5[174] + 28)); if ( v15 ) { if ( *(_BYTE *)(v15 + 2) == 38 ) (*(void (__thiscall **)(int *))(*v5 + 340))(v5); } } if ( !strcmp(a4, "ActionCollect") ) { (*(void (__thiscall **)(int *, _DWORD, _DWORD, signed int))(*v5 + 328))(v5, *(_DWORD *)(v13 + 108), 0, 1); } else { v16 = *v5; if ( a5 ) { if ( !(*(unsigned __int8 (__thiscall **)(int *, int, int))(v16 + 248))(v5, a3, v17) && (*(unsigned __int8 (__thiscall **)(int *))(*v5 + 256))(v5) == 1 ) { (*(void (__thiscall **)(int *, _DWORD))(*v5 + 352))(v5, 0.0); } (*(void (__thiscall **)(int *, _DWORD, int))(*v5 + 332))(v5, *(_DWORD *)(v13 + 108), a5); } else { (*(void (__thiscall **)(int *, _DWORD, _DWORD, _DWORD))(v16 + 328))(v5, *(_DWORD *)(v13 + 108), 0, 0); } } sub_443300(v5 + 536, v13); sub_6643D0((float *)v5 + 536, flt_ACCFCC); sub_664160(v5 + 536, 1); return 1; } // 65CF20: could not find valid save-restore pair for ebx // 65CF20: could not find valid save-restore pair for edi // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065D100) -------------------------------------------------------- char __thiscall sub_65D100(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ST04_4 v2 = this; v3 = this[539]; this[542] = 0; nullsub_22(v3, 0); *((_WORD *)v2 + 1112) = 0; *((_BYTE *)v2 + 2226) = 0; *(_WORD *)((char *)v2 + 2227) = 0; *((_BYTE *)v2 + 2488) = 0; if ( !v2[174] ) return 0; (*(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD))(*v2 + 328))(v2, a2, 0, 0); return 1; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (0065D170) -------------------------------------------------------- void __thiscall sub_65D170(int this, int a2) { int v2; // esi int v3; // eax int v4; // eax float *v5; // eax float v6; // ST20_4 int v7; // eax int v8; // eax _DWORD *v9; // ecx int v10; // edi int v11; // ebx int *v12; // eax int v13; // edi int v14; // ebx char v15; // dl _WORD *v16; // ecx _WORD *v17; // ecx char *v18; // [esp+10h] [ebp-8h] float v19; // [esp+14h] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 2932) == 1 ) { v3 = sub_65C170((_DWORD *)this); if ( !v3 || *(_DWORD *)(v3 + 539) != 67 ) { *(_BYTE *)(v2 + 2141) = *(_BYTE *)(v2 + 2140); v4 = *(_DWORD *)(v2 + 700); *(_BYTE *)(v2 + 2932) = 0; *(_BYTE *)(v2 + 2140) = 0; *(_WORD *)(v4 + 28) &= 0xFFFEu; *(_WORD *)(v2 + 2950) = -1; } } if ( *(_BYTE *)(v2 + 2734) ) { if ( *(_BYTE *)(v2 + 2510) ) { v5 = (float *)sub_6506C0((_DWORD *)v2); if ( v5 ) { v6 = (v5[12] - v5[11]) / v5[10]; if ( v6 < (double)v5[13] ) { if ( *(_DWORD *)(v2 + 2736) ) sub_660F40((float *)v2); else sub_660E80((float *)v2); *(_BYTE *)(v2 + 2734) = 0; } } } } v18 = sub_664AB0(dword_AD8C90, *(_WORD *)(v2 + 2480)); (*(void (__thiscall **)(int, char *))(*(_DWORD *)(v2 + 2368) + 36))(v2 + 2368, v18); (*(void (__thiscall **)(int, char *))(*(_DWORD *)(v2 + 2144) + 36))(v2 + 2144, v18); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 440))(v2) == 4 ) { v8 = sub_65B8B0((_DWORD *)v2, 0, 0, 0); v9 = *(_DWORD **)(v2 + 2160); if ( v9 ) v7 = sub_64B9E0(v9, v8); else v7 = 0; *(_WORD *)(v2 + 2480) = *(_WORD *)(v2 + 548); } else { v7 = *(_DWORD *)(v2 + 2168); } if ( v7 && *(_DWORD *)(v2 + 696) ) { v10 = dword_ACE8D0; v11 = *(unsigned __int16 *)(v2 + 2950); if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v11) || (unsigned __int16)v11 > *(_WORD *)(v10 + 200) || (v12 = (int *)(*(_DWORD *)(v10 + 196) + 4 * v11), !*v12) || (v13 = *v12) == 0 || *(_DWORD *)(v13 + 539) != 67 ) { LABEL_36: if ( !v18 ) *(_WORD *)(v2 + 2480) = -1; return; } if ( *(_WORD *)(v2 + 2480) == -1 ) *(_WORD *)(v2 + 2480) = *(_WORD *)(v2 + 548); if ( sub_664AB0(dword_AD8C90, *(_WORD *)(v2 + 2480)) ) { v14 = sub_6506C0((_DWORD *)v2); if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) { v19 = *(float *)(v14 + 60); if ( (double)*(unsigned int *)(v13 + 551) / 1000.0 <= v19 ) { v15 = *(_BYTE *)(v2 + 2140); v16 = *(_WORD **)(v2 + 700); *(_BYTE *)(v2 + 2932) = 1; *(_BYTE *)(v2 + 2141) = v15; *(_BYTE *)(v2 + 2140) = 1; sub_4022D0(v16, 1); } if ( (double)*(unsigned int *)(v13 + 543) / 1000.0 <= v19 ) (*(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 316))( v2, *(_DWORD *)(v2 + 2933), *(_DWORD *)(v2 + 2937), *(unsigned __int16 *)(v2 + 2950)); if ( (double)*(unsigned int *)(v13 + 559) / 1000.0 <= v19 ) { *(_BYTE *)(v2 + 2141) = *(_BYTE *)(v2 + 2140); v17 = *(_WORD **)(v2 + 700); *(_BYTE *)(v2 + 2932) = 0; *(_BYTE *)(v2 + 2140) = 0; sub_4022D0(v17, 0); *(_WORD *)(v2 + 2950) = -1; } goto LABEL_36; } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (0065D480) -------------------------------------------------------- int __userpurge sub_65D480@(int a1@, int a2@, int a3, int a4) { int result; // eax int v5; // esi unsigned __int16 v6; // ax unsigned __int16 v7; // ax result = a3; v5 = a1; if ( a3 ) { if ( a3 != a1 ) (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 284))(a3); if ( *(_WORD *)(v5 + 520) != -1 ) { sub_679B00((_DWORD *)(v5 + 776), 10); sub_679B00((_DWORD *)(v5 + 776), 12); v6 = *(_WORD *)(v5 + 472); if ( v6 != -1 ) { sub_673190((void *)(v5 + 776), v6, *(_BYTE *)(v5 + 474)); *(_WORD *)(v5 + 472) = -1; } v7 = *(_WORD *)(v5 + 476); if ( v7 != -1 ) { sub_673190((void *)(v5 + 776), v7, *(_BYTE *)(v5 + 478)); *(_WORD *)(v5 + 476) = -1; } if ( *(_WORD *)(v5 + 480) != -1 ) { sub_679AA0((void *)(v5 + 776), *(unsigned __int16 *)(v5 + 480)); *(_WORD *)(v5 + 472) = -1; } if ( *(_WORD *)(v5 + 482) != -1 ) { sub_679AA0((void *)(v5 + 776), *(unsigned __int16 *)(v5 + 476)); *(_WORD *)(v5 + 482) = -1; } } *(_WORD *)(v5 + 472) = sub_672EC0(v5 + 776, (_BYTE *)(v5 + 474)); *(_WORD *)(v5 + 476) = sub_672EE0(v5 + 776, (_BYTE *)(v5 + 478)); *(_WORD *)(v5 + 480) = sub_672F00(v5 + 776); *(_WORD *)(v5 + 482) = sub_672F10(v5 + 776); *(_WORD *)(v5 + 484) = sub_672F20(v5 + 776); *(_DWORD *)(v5 + 492) = 1; *(_WORD *)(v5 + 486) = 257; sub_679B00((_DWORD *)(v5 + 776), 10); sub_679B00((_DWORD *)(v5 + 776), 12); *(_WORD *)(v5 + 488) = 257; *(_BYTE *)(v5 + 490) = 1; sub_679B00((_DWORD *)(v5 + 776), 11); sub_679B00((_DWORD *)(v5 + 776), 13); sub_679AA0((void *)(v5 + 776), a4); sub_679B00((_DWORD *)(v5 + 776), 29); sub_65CF20((int *)v5, 1, a2, "ActionCollect", 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)(v5 + 84) + 8))(1.0); result = a3; *(_WORD *)(v5 + 520) = *(_WORD *)(a3 + 548); } return result; } //----- (0065D6A0) -------------------------------------------------------- int __usercall sub_65D6A0@(int *a1@, int a2@, int a3@) { int *v3; // esi v3 = a1; sub_65CF20(a1, a2, a3, "ActionProduct", 0); return (*(int (__stdcall **)(_DWORD))(v3[21] + 8))(1.0); } //----- (0065D6D0) -------------------------------------------------------- int __usercall sub_65D6D0@(int *a1@, int a2@, int a3@) { int *v3; // esi v3 = a1; sub_65CF20(a1, a2, a3, off_AB3998, 0); return (*(int (__stdcall **)(_DWORD))(v3[21] + 8))(1.0); } //----- (0065D700) -------------------------------------------------------- int __thiscall sub_65D700(_DWORD *this, int a2) { _BYTE *v2; // esi int result; // eax int v4; // edi unsigned __int8 v5; // ST04_1 unsigned __int8 v6; // al int v7; // eax char v8; // al v2 = this; result = this[174]; if ( result ) { v4 = a2; if ( sub_8C4C90((_DWORD *)(result + 120), a2, &a2) && a2 || (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v2 + 648))(v2) ) { goto LABEL_7; } LOBYTE(a2) = v2[938]; v5 = a2; v6 = sub_652070(v2); v7 = sub_66BDA0(&unk_AD8D28, (void (__thiscall ***)(_DWORD, signed int))v6, v5, v4); if ( v7 ) { sub_801030(*((_DWORD **)v2 + 174), v4, v7); LABEL_7: v8 = sub_8C4C90((_DWORD *)(*((_DWORD *)v2 + 174) + 120), v4, &a2); return v8 != 0 ? a2 : 0; } result = 0; } return result; } //----- (0065D7A0) -------------------------------------------------------- char __thiscall sub_65D7A0(float *this, float a2) { float *v2; // esi int v3; // edi char result; // al void (__thiscall *v5)(float *, int, _DWORD, _DWORD); // edx int v6; // ST04_4 v2 = this; v3 = sub_65D700(this, *((_DWORD *)this + 477)); if ( !v3 || !*((_DWORD *)v2 + 174) ) return 0; v5 = *(void (__thiscall **)(float *, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 328); v6 = *((_DWORD *)v2 + 477); *((_DWORD *)v2 + 476) = 2; v5(v2, v6, 0, 0); (*(void (__stdcall **)(_DWORD))(*((_DWORD *)v2 + 21) + 8))(0.0); result = 1; *(float *)(v3 + 72) = a2 - v2[373]; return result; } //----- (0065D810) -------------------------------------------------------- char __thiscall sub_65D810(_DWORD *this) { _DWORD *v1; // esi char result; // al bool v3; // zf int v4; // [esp+4h] [ebp-Ch] int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v1 = this; result = sub_650B20(this); if ( result ) return result; if ( byte_B6712C == 7 ) { if ( sub_651C60((int)v1) && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 492))(v1) ) (*(void (__thiscall **)(_DWORD *))(*v1 + 340))(v1); } else { result = sub_651C60((int)v1); if ( result ) return result; } result = sub_65C360(v1); if ( result ) return result; result = sub_65C450(v1); if ( result ) return result; result = sub_65C4A0(v1); if ( result ) return result; result = sub_65C930(v1); if ( result ) return result; result = (*(int (__thiscall **)(_DWORD *))(*v1 + 248))(v1); if ( result ) return result; result = (*(int (__thiscall **)(_DWORD *))(*v1 + 256))(v1); if ( !result ) return result; sub_65B8B0(v1, 0, (unsigned int *)&v5, 0); sub_65B8B0(v1, 1, (unsigned int *)&v6, &v4); result = v6; if ( v6 == 500000 || v5 == 910000 ) return result; if ( v6 == 200000 ) return (*(int (__thiscall **)(_DWORD *))(*v1 + 340))(v1); if ( v6 == 100000 ) { if ( v5 == 600000 || v5 == 700000 ) return result; result = v4; if ( v4 != 3000 && v4 != 4000 ) { v3 = v4 == 5000; goto LABEL_31; } return (*(int (__thiscall **)(_DWORD *))(*v1 + 340))(v1); } if ( v5 == v6 ) { result = (*(int (__thiscall **)(_DWORD *))(*v1 + 492))(v1); if ( result ) { if ( !v1[25] && !v1[476] && !v1[621] ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 32))(v1) ) sub_651970((int)v1); result = sub_656DB0(v1); v3 = result == 0; LABEL_31: if ( !v3 ) return result; return (*(int (__thiscall **)(_DWORD *))(*v1 + 340))(v1); } } } return result; } // B6712C: using guessed type char byte_B6712C; //----- (0065D9A0) -------------------------------------------------------- int __usercall sub_65D9A0@(int *a1@, int a2@, int a3@) { int *v3; // esi v3 = a1; sub_65CF20(a1, a2, a3, "ActionFlag", 0); return (*(int (__stdcall **)(_DWORD))(v3[21] + 8))(1.0); } //----- (0065D9D0) -------------------------------------------------------- char __thiscall sub_65D9D0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ST14_4 char result; // al int v6; // ebx int v7; // edi int v8; // eax int v9; // eax int v10; // eax float v11; // [esp+20h] [ebp+8h] int v12; // [esp+24h] [ebp+Ch] v3 = this; v4 = this[539]; this[542] = 0; nullsub_22(v4, 0); *((_WORD *)v3 + 1112) = 0; *((_BYTE *)v3 + 2226) = 0; *(_WORD *)((char *)v3 + 2227) = 0; *((_BYTE *)v3 + 2488) = 0; if ( !v3[174] || *((_BYTE *)v3 + 2496) ) return 0; v6 = sub_65D700(v3, a2); if ( !v6 ) return 0; v7 = a3; if ( a3 && a3 != 1 && a3 != -2 ) v8 = sub_65D700(v3, a3); else v8 = sub_65D700(v3, v3[468]); v12 = v8; v9 = v3[468]; if ( v9 != -2 ) sub_800630((_DWORD *)v3[174], v9, 0.0); if ( v7 ) { if ( v7 == 1 ) v3[468] = -2; else v3[468] = v7; } v10 = v3[468]; if ( v10 != -2 && sub_800560((void **)v3[174], v10, 1, 1, 1.0, 0.0, -2) ) *(float *)(v12 + 44) = 0.0; if ( a2 == v3[467] ) { v11 = (*(float *)(v6 + 48) - *(float *)(v6 + 44)) / *(float *)(v6 + 40); if ( v11 < (double)*(float *)(v6 + 52) ) { if ( *(_DWORD *)(v6 + 36) ) (*(void (__stdcall **)(_DWORD))(v3[21] + 12))(0.0); } result = 1; } else { (*(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD))(*v3 + 328))(v3, a2, 0, 0); result = 1; } return result; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (0065DB50) -------------------------------------------------------- void __thiscall sub_65DB50(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi signed int v4; // eax char v5; // al v3 = this; v4 = 20; this[684] = a3; if ( a3 == 1 ) v4 = 30; v5 = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*this + 328))(v4 + 906000, 0, 0); *((_BYTE *)v3 + 2734) = v5; if ( v5 ) { sub_6643D0((float *)v3 + 536, a2); } else if ( a3 == 1 ) { sub_660F40((float *)v3); } } //----- (0065DBC0) -------------------------------------------------------- int __thiscall sub_65DBC0(_DWORD *this, int a2) { int v2; // edx v2 = this[678]; if ( !v2 ) return 0; if ( a2 && this[732] ) return sub_660FA0((char *)(v2 + 2), a2, this[732]); return 0; } //----- (0065DC00) -------------------------------------------------------- int __thiscall sub_65DC00(float *this) { float *v1; // esi int result; // eax struct Concurrency::IExecutionContext *v3; // eax unsigned __int16 *v4; // eax const char *v5; // eax _DWORD *v6; // ecx int v7; // edi int v8; // eax _DWORD *v9; // ecx int v10; // edi int v11; // eax bool v12; // zf int v13; // eax v1 = this; result = (*(int (**)(void))(*(_DWORD *)this + 488))(); if ( (_BYTE)result ) { v3 = Concurrency::details::UMSThreadVirtualProcessor::GetDefaultDestination((Concurrency::details::UMSThreadVirtualProcessor *)(v1 + 194)); v4 = sub_59AF70((int)v3); if ( v4 ) { v5 = (const char *)(v4 + 33); if ( v5 ) { v6 = (_DWORD *)*((_DWORD *)v1 + 540); v7 = 0; if ( v6 ) { v8 = sub_64BA20(v6, v5); if ( v8 ) v7 = *(_DWORD *)(v8 + 108); } v9 = (_DWORD *)*((_DWORD *)v1 + 174); if ( v9 ) sub_800630(v9, v7, 0.0); } } v10 = *((_DWORD *)v1 + 642); if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[642] = 0.0; } (*(void (__thiscall **)(_DWORD *, _DWORD))(*((_DWORD *)v1 + 592) + 20))((_DWORD *)v1 + 592, 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 179) + 116))(*((_DWORD *)v1 + 177), 0); sub_85D860((float *)(*((_DWORD *)v1 + 177) + 52), 0.0, 0.0, 0.0, 1.0); sub_8D8240((_DWORD *)(*((_DWORD *)v1 + 176) + 176)); v11 = *(_DWORD *)v1; v1[669] = 0.0; v12 = (*(unsigned __int8 (__thiscall **)(float *))(v11 + 248))(v1) == 0; v13 = *(_DWORD *)v1; if ( !v12 ) JUMPOUT(__CS__, *(_DWORD *)(v13 + 368)); JUMPOUT(__CS__, *(_DWORD *)(v13 + 340)); } return result; } //----- (0065DD20) -------------------------------------------------------- unsigned int __thiscall sub_65DD20(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v3; // edi int v4; // edi _DWORD *v5; // eax int v6; // ebx unsigned int result; // eax const char *v8; // eax int (__thiscall **v9)(int, signed int); // edx int v10; // ecx void (__stdcall *v11)(int); // eax _DWORD *v12; // ecx int v13; // edi int v14; // eax int v15; // edi int v16; // eax int v17; // ebx int v18; // ecx int *v19; // eax bool v20; // al _DWORD *v21; // ecx void **v22; // ecx bool v23; // zf float v24; // eax void (__thiscall *v25)(_DWORD *); // edx _DWORD *v26; // [esp+48h] [ebp-14h] const char *v27; // [esp+4Ch] [ebp-10h] v2 = this; v3 = this[642]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[642] = 0; } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v2[179] + 116))(v2[177], 0); sub_85D860((float *)(v2[177] + 52), 0.0, 0.0, 0.0, 1.0); sub_8D8240((_DWORD *)(v2[176] + 176)); v4 = a2; *((float *)v2 + 669) = 0.0; v5 = sub_669170(&unk_AD8D28, v4); v6 = (int)v5; v26 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); a2 = 0; result = sub_4DC690(); if ( result ) { while ( 1 ) { v8 = (const char *)sub_7474E0((_DWORD *)(dword_ACDA54 + 4), a2); v27 = v8; result = *(unsigned __int16 *)v8; if ( result == v4 ) break; ++a2; result = sub_4DC690(); if ( a2 >= result ) goto LABEL_11; } if ( v6 ) { v11 = *(void (__stdcall **)(int))(v2[592] + 20); v2[643] = v2 + 592; v11(v6); *((_BYTE *)v2 + 2476) = 1; sub_672DF0(v2 + 194, v4); v2[641] = v4; sub_92BDF0(v2 + 637, v6); v2[638] = 202000; v2[639] = 201000; v2[637] = 101000; v12 = (_DWORD *)v2[540]; v13 = 0; if ( v12 ) { v14 = sub_64BA20(v12, "JumpStand_JumpStart"); if ( v14 ) v13 = *(_DWORD *)(v14 + 108); } v2[640] = v13; v15 = *(_DWORD *)(v6 + 12); if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); sub_85D860((float *)(v15 + 52), flt_BA45B4, 0.0, 0.0, 1.0); v16 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v15 + 72))(v15, "#Chair"); v17 = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); sub_85BED0((_DWORD **)v15, 0.0, 1); v18 = v2[177]; *((float *)v2 + 669) = *(float *)(v17 + 148); sub_85D860((float *)(v18 + 52), flt_BA45B4, 0.0, 0.0, 1.0); v19 = sub_661CD0(); sub_6615F0((char *)v19, v15); sub_6613F0(v2 + 644, v15); v20 = sub_64FA00(v2, 373); v21 = v2 + 644; if ( v20 ) { sub_6618E0(v21, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_661E70((_BYTE *)v2 + 2576, 1); } else { sub_661E70(v21, 0); } (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v2[176] + 116))(v15, 0); (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v17 + 116))(v17, v2[177], 0); sub_85C6F0((_DWORD *)v15); sub_85C4D0((_DWORD *)v15); if ( v27 != (const char *)-66 ) { a2 = 0; sub_443340(v2 + 536, v27 + 66, &a2); sub_65D700(v2, a2); v22 = (void **)v2[174]; if ( v22 ) sub_800560(v22, a2, 1, 0, 1.0, 0.0, -2); } v23 = (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 248))(v2) == 0; v24 = *(float *)v2; if ( v23 ) v25 = *(void (__thiscall **)(_DWORD *))(LODWORD(v24) + 340); else v25 = *(void (__thiscall **)(_DWORD *))(LODWORD(v24) + 368); v25(v2); if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); result = InterlockedDecrement(v26 + 1); if ( !result ) { v9 = (int (__thiscall **)(int, signed int))*v26; v10 = (int)v26; return (*v9)(v10, 1); } } } else { LABEL_11: if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { v9 = *(int (__thiscall ***)(int, signed int))v6; v10 = v6; return (*v9)(v10, 1); } } } return result; } // ACDA54: using guessed type int dword_ACDA54; // BA45B4: using guessed type float flt_BA45B4; //----- (0065E0E0) -------------------------------------------------------- void __thiscall sub_65E0E0(_DWORD *this, float a2, char a3, float *a4, char a5) { _DWORD *v5; // esi unsigned __int16 *v6; // eax float v7; // ebx float *v8; // ebx float *v9; // eax double v10; // st7 int *v11; // eax int v12; // eax char v13; // [esp+8h] [ebp-30h] float v14; // [esp+14h] [ebp-24h] float v15; // [esp+18h] [ebp-20h] float v16; // [esp+1Ch] [ebp-1Ch] float v17; // [esp+20h] [ebp-18h] float v18; // [esp+24h] [ebp-14h] float v19; // [esp+28h] [ebp-10h] float v20; // [esp+2Ch] [ebp-Ch] float v21; // [esp+30h] [ebp-8h] float v22; // [esp+34h] [ebp-4h] v5 = this; (*(void (**)(void))(*this + 424))(); sub_652520(v5, 0); v6 = (unsigned __int16 *)v5[541]; if ( v6 && !sub_6BF020(*v6) && a5 == 1 ) { sub_64E020(v5 + 21, (char *)v5, (_DWORD *)1, 0); sub_65CE60(v5); sub_65CE10(v5); } (*(void (__thiscall **)(_DWORD *, float *))(*v5 + 200))(v5, &v14); v7 = a2; v17 = v14 - *(float *)LODWORD(a2); v18 = v15 - *(float *)(LODWORD(a2) + 4); v19 = v16 - *(float *)(LODWORD(a2) + 8); a2 = v18 * v18 + v17 * v17 + v19 * v19; a2 = sqrt(a2); if ( a2 >= 1.0 ) { (*(void (__thiscall **)(_DWORD *, float *))(v5[397] + 40))(v5 + 397, &v14); (*(void (__thiscall **)(_DWORD *, float))(v5[397] + 16))(v5 + 397, COERCE_FLOAT(LODWORD(v7))); v8 = a4; if ( flt_AB399C == *a4 && flt_AB39A0 == a4[1] && flt_AB39A4 == a4[2] ) { v11 = (int *)(*(int (__thiscall **)(_DWORD *))(v5[397] + 64))(v5 + 397); v20 = *(float *)v11; v21 = *((float *)v11 + 1); v12 = v11[2]; } else { v9 = sub_4DC1F0(v5, (float *)&v13, a4); v17 = *v9 * -1.0; v18 = v9[1] * -1.0; v10 = -1.0 * v9[2]; v20 = v17; v21 = v18; v19 = v10; } v22 = 0.0; a2 = v21 * v21 + v20 * v20 + 0.0 * 0.0; if ( a2 > 0.0099999998 ) sub_8CFD90((float *)v5 + 379, (int)&v20); sub_65B8B0(v5, 0, (unsigned int *)&a2, &a4); if ( (LODWORD(a2) != 200000 && a4 != (float *)200000 || a3) && flt_AB399C == *v8 && flt_AB39A0 == v8[1] && flt_AB39A4 == v8[2] && !sub_656DB0(v5) && a5 == 1 ) { (*(void (__thiscall **)(_DWORD *))(*v5 + 368))(v5); } } } // AB399C: using guessed type float flt_AB399C; // AB39A0: using guessed type float flt_AB39A0; // AB39A4: using guessed type float flt_AB39A4; //----- (0065E320) -------------------------------------------------------- char __thiscall sub_65E320(_DWORD **this, float a2, int a3, char a4, float *a5, char a6) { _DWORD **v6; // esi unsigned __int16 *v8; // eax float v9; // ebx float *v10; // ebx float *v11; // eax double v12; // st7 int *v13; // eax int v14; // eax char v15; // [esp+4h] [ebp-30h] float v16; // [esp+10h] [ebp-24h] float v17; // [esp+14h] [ebp-20h] float v18; // [esp+18h] [ebp-1Ch] float v19; // [esp+1Ch] [ebp-18h] float v20; // [esp+20h] [ebp-14h] float v21; // [esp+24h] [ebp-10h] float v22; // [esp+28h] [ebp-Ch] float v23; // [esp+2Ch] [ebp-8h] float v24; // [esp+30h] [ebp-4h] v6 = this; if ( sub_6FDCD0(this[676]) ) return 0; v8 = (unsigned __int16 *)v6[541]; if ( v8 && !sub_6BF020(*v8) && a6 == 1 ) { sub_64E020(v6 + 21, (char *)v6, (_DWORD *)1, 0); sub_65CE60(v6); sub_65CE10(v6); } ((void (__thiscall *)(_DWORD **, float *))(*v6)[50])(v6, &v16); v9 = a2; v19 = v16 - *(float *)LODWORD(a2); v20 = v17 - *(float *)(LODWORD(a2) + 4); v21 = v18 - *(float *)(LODWORD(a2) + 8); a2 = v20 * v20 + v19 * v19 + v21 * v21; a2 = sqrt(a2); if ( a2 < 1.0 ) return 0; ((void (__thiscall *)(_DWORD **, float *))v6[397][10])(v6 + 397, &v16); ((void (__thiscall *)(_DWORD **, float))v6[397][4])(v6 + 397, COERCE_FLOAT(LODWORD(v9))); v10 = a5; if ( (unsigned __int8)sub_85ECE0(a5, &flt_AB399C) ) { v11 = sub_4DC1F0(v6, (float *)&v15, v10); v19 = *v11 * -1.0; v20 = v11[1] * -1.0; v12 = -1.0 * v11[2]; v22 = v19; v23 = v20; v21 = v12; } else { v13 = (int *)((int (__thiscall *)(_DWORD **))v6[397][16])(v6 + 397); v22 = *(float *)v13; v23 = *((float *)v13 + 1); v14 = v13[2]; } v24 = 0.0; a2 = v23 * v23 + v22 * v22 + 0.0 * 0.0; if ( a2 > 0.0099999998 ) sub_8CFD90((float *)v6 + 379, (int)&v22); sub_65B8B0(v6, 0, (unsigned int *)&a2, &a5); if ( (LODWORD(a2) != 200000 && a5 != (float *)200000 || a4) && flt_AB399C == *v10 && flt_AB39A0 == v10[1] && flt_AB39A4 == v10[2] && !sub_656DB0(v6) && a6 == 1 ) { ((void (__thiscall *)(_DWORD **))(*v6)[92])(v6); } return 1; } // AB399C: using guessed type float flt_AB399C; // AB39A0: using guessed type float flt_AB39A0; // AB39A4: using guessed type float flt_AB39A4; //----- (0065E540) -------------------------------------------------------- bool __thiscall sub_65E540(_DWORD *this) { _DWORD *v1; // edi int v2; // eax bool result; // al int v4; // esi signed int v5; // eax int v6; // eax v1 = this; v2 = this[174]; if ( !v2 ) return 1; v4 = *(_DWORD *)(v2 + 64); v5 = sub_65B8B0(this, 0, 0, 0); if ( v5 != -2 && v4 != v5 ) v4 = v5; result = 1; if ( v4 != -2 && v4 != -1 ) { v6 = sub_65D700(v1, v4); if ( v6 ) { if ( *(_DWORD *)(v6 + 68) != 1 || *(float *)(v6 + 48) > (double)*(float *)(v6 + 52) ) result = 0; } } return result; } //----- (0065E5E0) -------------------------------------------------------- void __thiscall sub_65E5E0(_DWORD *this, float a2) { _DWORD *v2; // edi int v3; // edx unsigned __int16 *v4; // eax int v5; // ebx int v6; // esi int *v7; // eax int v8; // esi int v9; // esi signed int v10; // esi int v11; // eax int v12; // ebx int v13; // esi int v14; // eax float v15; // ST14_4 float v16; // ST14_4 double v17; // st7 int v18; // [esp+Ch] [ebp-18h] float v19; // [esp+10h] [ebp-14h] int v20; // [esp+14h] [ebp-10h] int v21; // [esp+18h] [ebp-Ch] int v22; // [esp+1Ch] [ebp-8h] v2 = this; v20 = 103000; v21 = 104000; v22 = 105000; v3 = rand() % 3; v4 = (unsigned __int16 *)v2[541]; v18 = *(&v20 + v3); if ( v4 ) { v5 = *v4; v6 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v6 + 200) ) { v7 = (int *)(*(_DWORD *)(v6 + 196) + 4 * v5); if ( *v7 ) { v8 = *v7; if ( *v7 ) { if ( *(_BYTE *)(v8 + 192) ) { if ( *(_DWORD *)(v8 + 188) ) v18 = 105000; else v18 = rand() % 2 != 0 ? 104000 : 103000; } v9 = *(_DWORD *)(v8 + 531); if ( v9 == 36 || v9 == 38 ) v18 = 102000; } } } } } v10 = 0; do { v11 = sub_65D700(v2, *(&v20 + v10)); if ( v11 ) *(_DWORD *)(v11 + 36) = 2; ++v10; } while ( v10 < 3 ); v12 = sub_65D700(v2, v18); if ( v12 ) { v13 = 0; while ( 1 ) { v14 = sub_65D700(v2, *(&v20 + v13)); if ( v14 ) { if ( *(_DWORD *)(v14 + 68) ) break; } if ( ++v13 >= 3 ) { v15 = (*(float *)(v12 + 48) - *(float *)(v12 + 44)) / *(float *)(v12 + 40); if ( a2 < (double)v15 ) { *(float *)(v12 + 72) = -3.4028235e38; *(float *)(v12 + 44) = 0.0; sub_4106E0((_DWORD *)v2[174], v18); v2[467] = v18; } else if ( !*(_DWORD *)(v12 + 68) ) { *(float *)(v12 + 72) = -3.4028235e38; *(float *)(v12 + 44) = 0.0; v16 = (*(float *)(v12 + 48) - 0.0) / *(float *)(v12 + 40); v17 = v16; v19 = a2 - v16; if ( v19 > v17 ) v19 = v19 - v17; *(float *)(v12 + 44) = v19; sub_4106E0((_DWORD *)v2[174], v18); } return; } } } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (0065E7F0) -------------------------------------------------------- void __thiscall sub_65E7F0(_DWORD *this, char a2) { int v2; // esi void (__thiscall *v3)(int, signed int, _DWORD, _DWORD); // edx int v4; // ST04_4 int v5; // ebx int v6; // eax unsigned int v7; // edx int v8; // edi int v9; // eax int v10; // eax int v11; // eax float v12; // ST18_4 v2 = (int)this; if ( sub_650B20(this) ) { v3 = *(void (__thiscall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)v2 + 328); if ( *(_BYTE *)(v2 + 1924) == 3 ) v3(v2, 400, 0, 0); else v3(v2, 100, 0, 0); } else { *(float *)(v2 + 1488) = 1.0; sub_6643D0((float *)(v2 + 2144), flt_ACCFCC); *(float *)(v2 + 1492) = 0.0; v4 = *(_DWORD *)(v2 + 2156); *(_DWORD *)(v2 + 2168) = 0; nullsub_22(v4, 0); *(_WORD *)(v2 + 2224) = 0; *(_BYTE *)(v2 + 2226) = 0; *(_WORD *)(v2 + 2227) = 0; *(_BYTE *)(v2 + 2488) = 0; if ( a2 ) v5 = sub_651680(v2) != 0 ? 1000 : 2000; else v5 = 1000; v6 = sub_65C3E0((_DWORD *)v2, 100000, v5); *(_DWORD *)(v2 + 2168) = v6; if ( v6 ) { v7 = *(_DWORD *)(v6 + 108); *(_DWORD *)(v2 + 2172) = v7; if ( 10000 * (v7 / 0x2710) == 300000 ) *(_DWORD *)(v2 + 2232) = v6; } nullsub_22(*(_DWORD *)(v2 + 2156), v6); v8 = (*(int (__thiscall **)(int, signed int, int))(*(_DWORD *)v2 + 484))(v2, 100000, v5) + v5 + 100000; if ( *(_DWORD *)(v2 + 696) ) { v9 = *(_DWORD *)v2; if ( *(_BYTE *)(v2 + 1924) == 3 ) { (*(void (__thiscall **)(int))(v9 + 468))(v2); v10 = sub_65D700((_DWORD *)v2, v8); if ( v10 ) sub_803810(*(float **)(v2 + 696), *(float *)(v10 + 48)); } else if ( (*(unsigned __int8 (__thiscall **)(int))(v9 + 488))(v2) ) { if ( *(_DWORD *)(v2 + 2568) ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 384))(v2); } else { if ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 328))(v2, v8, 0, 0) && sub_651C60(v2) ) { (*(void (__thiscall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 328))(v2, v5 + 100000, 0, 0); } v11 = sub_65D700((_DWORD *)v2, v8); if ( v11 ) { v12 = *(float *)(v11 + 48); *(float *)(v11 + 72) = (double)(rand() % 100) / 100.0 * v12 - *(float *)(v2 + 1492); } } } } } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065EA30) -------------------------------------------------------- void __userpurge sub_65EA30(int a1@, int a2@, float a3) { int v3; // esi char *v4; // eax char *v5; // eax char *v6; // edi int v7; // ebx float v8; // ST14_4 int v9; // eax int v10; // eax int v11; // eax int v12; // [esp+24h] [ebp-4h] v3 = a1; if ( *(_DWORD *)(a1 + 696) ) { if ( *(_WORD *)(a1 + 2480) != -1 ) { v4 = sub_664AB0(dword_AD8C90, *(_WORD *)(a1 + 2480)); if ( !v4 || !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v4 + 36))(v4) ) *(_WORD *)(v3 + 2480) = -1; } sub_677090(v3 + 776, a2, a3); if ( sub_650B20((_DWORD *)v3) ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 696) + 28) == 100 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 492))(v3) ) { (*(void (__thiscall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 328))(v3, 200, 0, 0); } if ( *(_DWORD *)(*(_DWORD *)(v3 + 696) + 28) == 300 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 492))(v3) ) (*(void (__thiscall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 328))(v3, 400, 0, 0); } } else { if ( sub_651C60(v3) ) sub_656460((float *)v3, SLODWORD(a3)); sub_65B8B0((_DWORD *)v3, 0, (unsigned int *)&a3, &v12); if ( (LODWORD(a3) == 300000 || v12 == 300000) && *(_WORD *)(v3 + 2112) != -1 && (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 608))(v3, 0) && *(_DWORD *)(v3 + 100) && (*(unsigned __int8 (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)(v3 + 84) + 20))( v3 + 84, *(_DWORD *)(*(_DWORD *)(v3 + 92) + 8), 0) == 1 ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 608))(v3, 1); } if ( sub_65C360((_DWORD *)v3) ) { if ( (*(unsigned __int8 (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 608))(v3, 1) ) { if ( !*(_BYTE *)(v3 + 1512) ) { v5 = sub_664AB0(dword_AD8C90, *(_WORD *)(v3 + 520)); v6 = v5; if ( v5 ) { v7 = *(_DWORD *)v5; v8 = flt_ACCFCC; v9 = sub_441430(0); (*(void (__thiscall **)(char *, int, _DWORD))(v7 + 404))(v6, v9, LODWORD(v8)); } } *(_BYTE *)(v3 + 1512) = 1; } else { *(_BYTE *)(v3 + 1512) = 0; } } sub_655A40((_DWORD *)v3, 9); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 248))(v3) ) { if ( *(_DWORD *)(v3 + 2568) ) { v10 = *(_DWORD *)(v3 + 1932); if ( v10 ) { if ( v10 == 1 ) sub_660DF0((int *)(v3 + 2548)); } else { sub_660E20((int *)(v3 + 2548)); } } else if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 660))(v3) ) { v11 = *(_DWORD *)(v3 + 1932); if ( v11 ) { if ( v11 == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 364))(v3); } else { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 360))(v3); } } } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065ECA0) -------------------------------------------------------- void __thiscall sub_65ECA0(_DWORD *this, int a2, float a3) { _DWORD *v3; // esi int v4; // eax int v5; // edx int v6; // ST0C_4 float v7; // ST08_4 double v8; // st6 float v9; // eax double v10; // st7 float v11; // ST04_4 void (__thiscall *v12)(_DWORD *, _DWORD, _DWORD, _DWORD, int, _DWORD); // edx int v13; // eax __int16 v14; // ax int v15; // edi float v16; // ST0C_4 int v17; // eax int v18; // eax int v19; // edx int v20; // ST0C_4 float v21; // ST08_4 double v22; // st6 float v23; // eax double v24; // st7 float v25; // ST04_4 void (__thiscall *v26)(_DWORD *, _DWORD, _DWORD, _DWORD, int, _DWORD); // edx int v27; // [esp+18h] [ebp-4h] v3 = this; if ( *((_BYTE *)this + 2680) == 1 ) { if ( *((_BYTE *)this + 938) == 1 ) v4 = sub_441430(4); else v4 = sub_441430(5); if ( !v4 ) { OutputDebugStringA("ShakeInfo Faile TryActDamage- with MainChar\n"); return; } v5 = *v3; if ( LOBYTE(a3) ) { v6 = *(_DWORD *)(v4 + 14); a3 = (double)*(unsigned int *)(v4 + 10) * 0.009999999776482582; v7 = a3; v8 = (double)*(unsigned int *)(v4 + 6); v9 = *(float *)(v4 + 2); a3 = 0.009999999776482582 * v8; v10 = a3; a3 = v9; v11 = v10; v12 = *(void (__thiscall **)(_DWORD *, _DWORD, _DWORD, _DWORD, int, _DWORD))(v5 + 408); a3 = (double)LODWORD(v9) * 0.002499999944120646; v12(v3, LODWORD(a3), LODWORD(v11), LODWORD(v7), v6, LODWORD(flt_ACCFCC)); } else { (*(void (__thiscall **)(_DWORD *, int, _DWORD))(v5 + 404))(v3, v4, LODWORD(flt_ACCFCC)); } } else { v13 = this[679]; if ( v13 ) { v14 = *(_WORD *)(v13 + 178); if ( LOBYTE(a3) ) { v18 = sub_441430(v14); if ( !v18 ) { OutputDebugStringA("ShakeInfo Faile TryActDamage- with Dot\n"); return; } v19 = *v3; v20 = *(_DWORD *)(v18 + 14); a3 = (double)*(unsigned int *)(v18 + 10) * 0.009999999776482582; v21 = a3; v22 = (double)*(unsigned int *)(v18 + 6); v23 = *(float *)(v18 + 2); a3 = 0.009999999776482582 * v22; v24 = a3; a3 = v23; v25 = v24; v26 = *(void (__thiscall **)(_DWORD *, _DWORD, _DWORD, _DWORD, int, _DWORD))(v19 + 408); a3 = (double)LODWORD(v23) * 0.002499999944120646; v26(v3, LODWORD(a3), LODWORD(v25), LODWORD(v21), v20, LODWORD(flt_ACCFCC)); } else { v15 = *this; v16 = flt_ACCFCC; v17 = sub_441430(v14); (*(void (__thiscall **)(_DWORD *, int, _DWORD))(v15 + 404))(v3, v17, LODWORD(v16)); } } else { OutputDebugStringA("ShakeInfo Faile TryActDamage\n"); } } sub_65B8B0(v3, 0, (unsigned int *)&a3, &v27); if ( (LODWORD(a3) == 100000 || v27 == 100000) && !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 488))(v3) ) (*(void (__thiscall **)(_DWORD *))(*v3 + 396))(v3); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065EEB0) -------------------------------------------------------- char __userpurge sub_65EEB0@(int *a1@, int a2@, int a3@, char *a4) { return sub_65CF20(a1, a2, a3, a4, 0); } //----- (0065EED0) -------------------------------------------------------- void __thiscall sub_65EED0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax int v5; // eax int v6; // edx int v7; // eax v2 = this; sub_6739A0(this + 194, 12, 1); sub_6739A0(v2 + 194, 11, 1); if ( sub_662E50(v2 + 424) ) (*(void (__thiscall **)(_DWORD *))(*v2 + 424))(v2); if ( v2[476] ) { sub_6739A0(v2 + 194, 12, 0); sub_6739A0(v2 + 194, 11, 0); sub_673B40((int)(v2 + 194), 0); if ( v2[174] ) { v3 = v2[476]; if ( v3 != 2 && v3 != 4 ) { v4 = sub_65D700(v2, v2[477]); if ( v4 ) { if ( *(_DWORD *)(v2[174] + 64) == *(_DWORD *)(v2[174] + 28) && *(float *)(v4 + 48) <= (double)*(float *)(v4 + 52) ) { v5 = sub_4B0DC0(*((unsigned __int16 *)v2 + 956)); if ( v5 && *(_DWORD *)(v5 + 109) ) { v6 = *v2; v2[476] = 3; v7 = *(_DWORD *)(v5 + 109); v2[477] = v7; (*(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD))(v6 + 328))(v2, v7, 0, 0); } else { (*(void (__thiscall **)(_DWORD *))(*v2 + 424))(v2); (*(void (__thiscall **)(_DWORD *))(*v2 + 340))(v2); } } } } } } } //----- (0065F000) -------------------------------------------------------- double __thiscall sub_65F000(_DWORD *this) { _DWORD *v1; // esi int v3; // eax void (__stdcall *v4)(_DWORD); // eax int v5; // eax v1 = this; if ( this[476] == 4 ) return -3.4028235e38; v3 = this[174]; if ( !v3 ) return 3.4028235e38; if ( this[477] != *(_DWORD *)(v3 + 64) ) return -3.4028235e38; v4 = *(void (__stdcall **)(_DWORD))(this[21] + 8); this[476] = 2; v4(0.0); v5 = sub_65D700(v1, v1[477]); if ( !v5 ) return -3.4028235e38; return *(float *)(v5 + 52); } //----- (0065F070) -------------------------------------------------------- char __userpurge sub_65F070@(int a1@, int a2@, int a3@, int a4, int a5) { int v5; // esi char result; // al int v7; // eax _DWORD *v8; // ecx int v9; // edi unsigned int v10; // eax int v11; // eax int v12; // eax int v13; // edi int v14; // ebx int *v15; // eax int v16; // edi int v17; // ebx int v18; // edi int v19; // ecx _DWORD *v20; // ebx int v21; // edi int v22; // eax int v23; // eax int v24; // eax int v25; // eax int v26; // ecx unsigned int v27; // edx int v28; // [esp+1Ch] [ebp-18h] int v29; // [esp+28h] [ebp-Ch] int v30; // [esp+2Ch] [ebp-8h] int v31; // [esp+30h] [ebp-4h] v5 = a1; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)a1 + 48))() == 1 ) return 0; if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 500))(v5) ) sub_65CE10((_DWORD *)v5); v28 = a3; v7 = sub_65C3E0((_DWORD *)v5, a4, a5); v8 = *(_DWORD **)(v5 + 696); v9 = v7; v29 = v7; if ( v8 ) { v10 = *(_DWORD *)(v5 + 1868); if ( v10 != -2 && v10 >= 0xC3500 && v10 < 0xDBBA0 ) { v11 = *(_DWORD *)(v5 + 1872); if ( v11 != -2 ) sub_800630(v8, v11, 0.0); *(_DWORD *)(v5 + 1872) = -2; } sub_65B8B0((_DWORD *)v5, 0, (unsigned int *)&v31, &v30); v12 = a4 + (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 484))(v5, a4, a5, v28, a2); v13 = dword_ACB230; v14 = *(unsigned __int16 *)(v5 + 953); v31 = a5 + v12; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v14) ) { if ( (unsigned __int16)v14 <= *(_WORD *)(v13 + 200) ) { v15 = (int *)(*(_DWORD *)(v13 + 196) + 4 * v14); if ( *v15 ) v30 = *v15; else v30 = 0; } else { v30 = 0; } } else { v30 = 0; } v16 = dword_ACB230; v17 = *(unsigned __int16 *)(v5 + 949); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v17) ) { if ( (unsigned __int16)v17 <= *(_WORD *)(v16 + 200) ) { v19 = *(_DWORD *)(v16 + 196); if ( *(_DWORD *)(v19 + 4 * v17) ) v18 = *(_DWORD *)(v19 + 4 * v17); else v18 = 0; } else { v18 = 0; } } else { v18 = 0; } v20 = 0; if ( v30 && *(_DWORD *)(v30 + 232) != 15 ) v20 = sub_4E1830(*(_DWORD *)(v30 + 232)); if ( v18 ) { v21 = *(_DWORD *)(v18 + 232); if ( v21 != 15 ) v20 = sub_4E1830(v21); } if ( a4 == 100000 && a5 == 1000 ) { v22 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 372))(v5); if ( v22 ) v31 = v22; } if ( *(_DWORD *)(v5 + 2928) ) { v23 = sub_65CBE0(a4, a5); v24 = sub_65DBC0((_DWORD *)v5, v23); if ( v24 ) v31 = v24; } if ( v20 && *((_BYTE *)v20 + 6) && (a4 == 300000 || a4 == 600000 || a4 == 700000) ) { result = (*(int (__thiscall **)(int, int, signed int))(*(_DWORD *)v5 + 332))(v5, v31, 1); if ( !result ) return result; } else { result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 328))(v5, v31); if ( !result ) return result; } if ( *(_DWORD *)(v5 + 696) ) { v25 = sub_65D700((_DWORD *)v5, v31); if ( v25 ) *(float *)(v25 + 72) = -3.4028235e38; } v9 = v29; } if ( v9 ) { v26 = v5 + 2144; *(_DWORD *)(v26 + 24) = v9; v27 = *(_DWORD *)(v9 + 108); *(_DWORD *)(v26 + 28) = v27; if ( 10000 * (v27 / 0x2710) == 300000 ) *(_DWORD *)(v5 + 2232) = v9; nullsub_22(*(_DWORD *)(v5 + 2156), v9); } sub_6643D0((float *)(v5 + 2144), flt_ACCFCC); return 1; } // 65F070: could not find valid save-restore pair for ebx // 65F070: could not find valid save-restore pair for edi // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // ACB230: using guessed type int dword_ACB230; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0065F350) -------------------------------------------------------- int __thiscall sub_65F350(_DWORD *this, float a2) { _DWORD *v2; // esi void (__thiscall *v3)(_DWORD *); // edx int v4; // ST00_4 int v5; // eax int v6; // eax float v8; // [esp+14h] [ebp+8h] v2 = this; if ( this[541] ) { if ( this[6] || (*(unsigned __int8 (**)(void))(*this + 248))() != 1 ) v3 = *(void (__thiscall **)(_DWORD *))(*v2 + 340); else v3 = *(void (__thiscall **)(_DWORD *))(*v2 + 368); v3(v2); sub_663CD0(v2 + 536); } sub_65CE60(v2); v4 = v2[539]; v2[542] = 0; nullsub_22(v4, 0); *((_WORD *)v2 + 1112) = 0; *((_BYTE *)v2 + 2226) = 0; *(_WORD *)((char *)v2 + 2227) = 0; *((_BYTE *)v2 + 2488) = 0; if ( LOBYTE(a2) == 1 ) (*(void (__thiscall **)(_DWORD *, signed int))(*v2 + 240))(v2, 1); sub_650990(v2); v8 = 0.0; v5 = sub_65B8B0(v2, 0, 0, 0); v6 = sub_65D700(v2, v5); if ( v6 ) v8 = *((float *)v2 + 373) + *(float *)(v6 + 72); return (*(int (__stdcall **)(float))(v2[21] + 12))(COERCE_FLOAT(LODWORD(v8))); } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (0065F440) -------------------------------------------------------- char __thiscall sub_65F440(int this, int a2, char a3, char a4) { int v4; // esi int v5; // eax _DWORD *v7; // ecx int v8; // edi _DWORD *v9; // eax int v10; // ebx int v11; // edi unsigned __int8 v12; // ST04_1 unsigned __int8 v13; // al int v14; // eax int v15; // eax unsigned int v16; // [esp+4h] [ebp-Ch] int v17; // [esp+Ch] [ebp-4h] _DWORD *v18; // [esp+1Ch] [ebp+Ch] v4 = this; v5 = *(_DWORD *)(this + 696); if ( !v5 || !a3 && *(_BYTE *)(this + 2496) ) return 0; if ( *(_BYTE *)(this + 2732) ) return 0; v7 = *(_DWORD **)(v5 + 8); if ( !v7 ) return 0; v8 = a2; v9 = (_DWORD *)sub_64EE80(v7, *(_DWORD *)(v5 + 64), a2); v18 = v9; if ( v9 ) { if ( *v9 == 3 ) { v10 = 0; v16 = v9[7]; if ( v16 ) { while ( 1 ) { v11 = *(_DWORD *)(v9[5] + 8 * v10); if ( !sub_8C4C90((_DWORD *)(*(_DWORD *)(v4 + 696) + 120), v11, &v17) || !v17 ) { v12 = *(_BYTE *)(v4 + 938); v13 = sub_652070((_BYTE *)v4); v14 = sub_66BDA0(&unk_AD8D28, (void (__thiscall ***)(_DWORD, signed int))v13, v12, v11); if ( !v14 ) return 0; sub_801030(*(_DWORD **)(v4 + 696), v11, v14); } if ( ++v10 >= v16 ) break; v9 = v18; } v8 = a2; } } } v15 = sub_65D700((_DWORD *)v4, v8); if ( !v15 ) return 0; if ( a4 ) { *(_DWORD *)(v15 + 36) = 0; } else if ( v8 == 301000 ) { *(_DWORD *)(v15 + 36) = 2; } *(_DWORD *)(v4 + 1868) = v8; if ( *(_DWORD *)(v15 + 68) == 1 ) *(float *)(v15 + 72) = -3.4028235e38; sub_4106E0(*(_DWORD **)(v4 + 696), v8); return 1; } //----- (0065F570) -------------------------------------------------------- char __thiscall sub_65F570(int this, int a2, int a3) { int v3; // esi int v5; // eax v3 = this; if ( !*(_DWORD *)(this + 696) || *(_BYTE *)(this + 2496) || *(_BYTE *)(this + 2732) ) return 0; if ( !sub_65D700((_DWORD *)this, a2) ) return 0; v5 = *(_DWORD *)(v3 + 1872); if ( v5 != -2 ) sub_800630(*(_DWORD **)(v3 + 696), v5, 0.0); *(_DWORD *)(v3 + 1872) = a2; sub_800560(*(void ***)(v3 + 696), a2, a3, 1, 1.0, 0.0, -2); return 1; } //----- (0065F610) -------------------------------------------------------- void __thiscall sub_65F610(float *this) { float *v1; // esi char *v2; // ecx v1 = this; sub_6509A0((int)this); if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v1 + 488))(v1) ) sub_65DC00(v1); sub_64DE20((_DWORD *)v1 + 21); sub_64F980(v1, 1); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v1 + 260))(v1, LODWORD(flt_AD8BFC)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v1 + 264))(v1, LODWORD(flt_AD8C00)); sub_64E020((_DWORD *)v1 + 21, (char *)v1, (_DWORD *)1, 0); *((_WORD *)v1 + 1240) = -1; sub_65CE60(v1); if ( v1 == (float *)dword_AD8EBC ) { sub_67D370(dword_AD8EBC, 0); *((_DWORD *)dword_AD8EBC + 1030) = 0; v2 = dword_AD8EBC; *((_DWORD *)dword_AD8EBC + 1031) = 0; *((_WORD *)v2 + 2064) = -1; sub_67B690(v2, 0); dword_AD8EBC[4144] = 0; dword_AD8EBC[4116] = 0; } } // AD8BFC: using guessed type float flt_AD8BFC; // AD8C00: using guessed type float flt_AD8C00; //----- (0065F6F0) -------------------------------------------------------- void __usercall sub_65F6F0(int *a1@, int a2@, int a3@) { int *v3; // esi _DWORD *v4; // ecx unsigned __int16 *v5; // eax float *v6; // eax double v7; // st7 float v8; // [esp+8h] [ebp-4h] v3 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 488))() ) { if ( v3[642] ) { (*(void (__thiscall **)(int *))(*v3 + 384))(v3); v4 = (_DWORD *)v3[642]; if ( v3[637] != v4[7] ) { if ( v4 ) sub_4106E0(v4, v3[637]); sub_65B0E0(v3 + 637, v3[637]); } } } else if ( *((_BYTE *)v3 + 2680) && (v5 = (unsigned __int16 *)v3[541]) != 0 && sub_49FBB0(*v5) && ((sub_65B8B0(v3, 0, (unsigned int *)&v8, 0), LODWORD(v8) == 600000) || LODWORD(v8) == 700000) && (v6 = (float *)sub_61E920((_DWORD *)v3[174], v3[468])) != 0 ) { v7 = v6[15]; v8 = (v6[12] - v6[11]) / v6[10]; if ( v8 > v7 ) (*(void (__thiscall **)(int *, float))(*v3 + 352))(v3, v6[13]); } else { sub_65F070((int)v3, a2, a3, 100000, 2000); } } //----- (0065F800) -------------------------------------------------------- _DWORD *__userpurge sub_65F800@(int a1@, int a2@, unsigned int a3, unsigned int a4, int a5) { int v5; // esi _DWORD *result; // eax __int16 v7; // bx int v8; // edi int v9; // eax float v10; // ST10_4 float v11; // ST0C_4 _DWORD *v12; // edx void (__thiscall *v13)(int, float *, int); // edx float v14; // ST14_4 float v15; // ST10_4 _WORD *v16; // eax double v17; // st7 int v18; // [esp+18h] [ebp-30h] float v19; // [esp+24h] [ebp-24h] float v20; // [esp+28h] [ebp-20h] float v21; // [esp+2Ch] [ebp-1Ch] float v22; // [esp+30h] [ebp-18h] float v23; // [esp+34h] [ebp-14h] float v24; // [esp+38h] [ebp-10h] float v25; // [esp+3Ch] [ebp-Ch] float v26; // [esp+40h] [ebp-8h] float v27; // [esp+44h] [ebp-4h] float v28; // [esp+58h] [ebp+10h] float v29; // [esp+58h] [ebp+10h] float v30; // [esp+58h] [ebp+10h] v5 = a1; result = (_DWORD *)(*(int (**)(void))(*(_DWORD *)a1 + 320))(); if ( !(_BYTE)result ) { v7 = a5; v18 = a2; v8 = dword_ACE8D0; result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a5); if ( (_BYTE)result ) { if ( (unsigned __int16)a5 <= *(_WORD *)(v8 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)a5); if ( *result ) { result = (_DWORD *)*result; if ( result ) { v9 = *(_DWORD *)((char *)result + 531); if ( v9 == 36 || v9 == 38 ) { v22 = (double)a3; v12 = *(_DWORD **)v5; v23 = (double)a4; v13 = (void (__thiscall *)(int, float *, int))v12[50]; v24 = 0.0; v13(v5, &v19, v18); v25 = v19 - v22; v19 = v25; v26 = v20 - v23; v20 = v26; v27 = 0.0 - v24; v21 = v27; v28 = v26 * v26 + v25 * v25 + v27 * v27; v29 = sqrt(v28); if ( v29 >= 40.0 ) { v16 = *(_WORD **)(v5 + 2164); if ( v16 && *v16 == v7 ) sub_65E320((_DWORD **)v5, COERCE_FLOAT(&v22), SLODWORD(flt_ACCFCC), 0, &flt_AB399C, 0); else sub_65E320((_DWORD **)v5, COERCE_FLOAT(&v22), SLODWORD(flt_ACCFCC), 0, &flt_AB399C, 1); v17 = *(float *)(v5 + 468); if ( 0.0 == v17 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 272))(v5); *(float *)(v5 + 468) = v17; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); } v30 = *(float *)(v5 + 468) * 10.0; result = (_DWORD *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 264))(v5, LODWORD(v30)); } else { v14 = (double)a4; v15 = (double)a3; result = (_DWORD *)(*(int (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v5 + 236))( v5, LODWORD(v15), LODWORD(v14)); } } else { v10 = (double)a4; v11 = (double)a3; result = (_DWORD *)(*(int (__thiscall **)(int, _DWORD, _DWORD, signed int))(*(_DWORD *)v5 + 236))( v5, LODWORD(v11), LODWORD(v10), 1); } } } } } } return result; } // 65F800: could not find valid save-restore pair for edi // AB399C: using guessed type float flt_AB399C; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (0065FA40) -------------------------------------------------------- int __userpurge sub_65FA40@(float *a1@, int a2@, int a3, char a4) { float *v4; // esi bool v5; // zf __int16 v6; // ax int result; // eax v4 = a1; if ( a3 && (float *)a3 != a1 ) { (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 284))(a3); v5 = *((_BYTE *)v4 + 2680) == 0; v6 = *(_WORD *)(a3 + 548); *((_WORD *)v4 + 1240) = v6; *((_WORD *)v4 + 1056) = v6; *((_WORD *)v4 + 1240) = *(_WORD *)(a3 + 548); if ( v5 ) (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 472))(v4); switch ( a4 ) { case 0: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 472))(v4); return (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 636))(v4); case 1: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 476))(v4); return (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 636))(v4); case 2: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 480))(v4); return (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 636))(v4); case 3: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 424))(v4); sub_65F070((int)v4, a2, a3, 300000, 1500); goto LABEL_10; case 4: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 424))(v4); sub_65F070((int)v4, a2, a3, 300000, 2500); goto LABEL_10; case 5: (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 424))(v4); sub_65F070((int)v4, a2, a3, 300000, 3500); LABEL_10: ((void (__stdcall *)(_DWORD, _DWORD))nullsub_24)(v4[373], 1.5); return (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 636))(v4); case 6: sub_65F070((int)v4, a2, a3, 300000, 7000); break; case 7: sub_65F070((int)v4, a2, a3, 300000, 8000); break; default: break; } result = (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 636))(v4); } return result; } // 674DD0: using guessed type _DWORD __stdcall nullsub_24(_DWORD, _DWORD); //----- (0065FBD0) -------------------------------------------------------- char __thiscall sub_65FBD0(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( !(*(unsigned __int8 (**)(void))(*this + 500))() || v1[621] != 6 || v1[526] ) return 0; sub_65F350(v1, COERCE_FLOAT(1)); return 1; } //----- (0065FC10) -------------------------------------------------------- int __usercall sub_65FC10@(int *a1@, int a2@, int a3@, double a4@) { int *v4; // esi _DWORD *v5; // ecx float v6; // ST04_4 v4 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 488))() ) { if ( v4[642] ) { (*(void (__thiscall **)(int *))(*v4 + 380))(v4); v5 = (_DWORD *)v4[642]; if ( v4[639] != v5[7] ) { if ( v5 ) sub_4106E0(v5, v4[639]); sub_65B0E0(v4 + 637, v4[639]); } } } else { sub_65F070((int)v4, a2, a3, 200000, 1000); } (*(void (__thiscall **)(int *))(*v4 + 268))(v4); v6 = a4; return sub_67E1E0((float *)v4 + 397, v6); } //----- (0065FCA0) -------------------------------------------------------- int __usercall sub_65FCA0@(int *a1@, int a2@, int a3@, double a4@) { int *v4; // esi _DWORD *v5; // ecx float v6; // ST04_4 v4 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 488))() ) { if ( v4[642] ) { (*(void (__thiscall **)(int *))(*v4 + 380))(v4); v5 = (_DWORD *)v4[642]; if ( v4[638] != v5[7] ) { if ( v5 ) sub_4106E0(v5, v4[638]); sub_65B0E0(v4 + 637, v4[638]); } } } else { sub_65F070((int)v4, a2, a3, 200000, 2000); } (*(void (__thiscall **)(int *))(*v4 + 272))(v4); v6 = a4; return sub_67E1E0((float *)v4 + 397, v6); } //----- (0065FD30) -------------------------------------------------------- char __usercall sub_65FD30@(int a1@, int a2@, int a3@) { int v3; // esi v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 424))(); *(float *)(v3 + 1488) = 1.0; sub_64EB10((_DWORD *)(v3 + 84)); return sub_65F070(v3, a2, a3, 400000, 2000); } //----- (0065FD60) -------------------------------------------------------- char __usercall sub_65FD60@(int a1@, int a2@, int a3@) { int v3; // esi v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 424))(); *(float *)(v3 + 1488) = 1.0; return sub_65F070(v3, a2, a3, 400000, 1000); } //----- (0065FD90) -------------------------------------------------------- char __usercall sub_65FD90@(int a1@, int a2@, int a3@) { *(float *)(a1 + 1488) = 1.0; return sub_65F070(a1, a2, a3, 500000, 1000); } //----- (0065FDB0) -------------------------------------------------------- int __usercall sub_65FDB0@(int a1@, int a2@, int a3@) { int v3; // esi v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 424))(); sub_65F070(v3, a2, a3, 300000, 1000); return nullsub_24(*(float *)(v3 + 1492), 1.5); } // 674DD0: using guessed type _DWORD __stdcall nullsub_24(_DWORD, _DWORD); //----- (0065FE00) -------------------------------------------------------- int __usercall sub_65FE00@(int a1@, int a2@, int a3@) { int v3; // esi v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 424))(); sub_65F070(v3, a2, a3, 300000, 2000); return nullsub_24(*(float *)(v3 + 1492), 1.5); } // 674DD0: using guessed type _DWORD __stdcall nullsub_24(_DWORD, _DWORD); //----- (0065FE50) -------------------------------------------------------- int __usercall sub_65FE50@(int a1@, int a2@, int a3@) { int v3; // esi v3 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 424))(); sub_65F070(v3, a2, a3, 300000, 3000); return nullsub_24(*(float *)(v3 + 1492), 1.5); } // 674DD0: using guessed type _DWORD __stdcall nullsub_24(_DWORD, _DWORD); //----- (0065FEA0) -------------------------------------------------------- void __thiscall sub_65FEA0(void *this, int a2, int a3, int a4) { int v4; // esi float *v5; // edi float *v6; // eax float v7; // ST18_4 float v8; // ST1C_4 float v9; // ST20_4 double v10; // st7 BOOL v11; // ST08_4 int v12; // edi int *v13; // eax int v14; // eax void (__stdcall *v15)(_DWORD); // eax float v16; // [esp+24h] [ebp-4h] float v17; // [esp+34h] [ebp+Ch] float v18; // [esp+34h] [ebp+Ch] float v19; // [esp+34h] [ebp+Ch] v4 = (int)this; if ( a3 == 1 ) { (*(void (**)(void))(*(_DWORD *)this + 424))(); v5 = *(float **)(v4 + 700); v6 = (float *)sub_693030(byte_ADB468); v7 = *v6 - v5[22]; v8 = v6[1] - v5[23]; v9 = v6[2] - v5[24]; v17 = v8 * v8 + v7 * v7 + v9 * v9; v18 = sqrt(v17); v16 = v18; v10 = sub_651680(v4) ? *(float *)(v4 + 1496) + 500.0 : *(float *)(v4 + 1496); v19 = v10; if ( v16 <= (double)v19 ) { sub_652B00((float *)v4); sub_64E020((_DWORD *)(v4 + 84), (char *)v4, (_DWORD *)1, 0); if ( sub_650000((_DWORD *)v4, 67) ) { sub_65F350((_DWORD *)v4, 0.0); } else { v11 = sub_6BF020(a4) == 0; sub_65F350((_DWORD *)v4, *(float *)&v11); } *(_WORD *)(v4 + 2480) = a2 ? *(_WORD *)(a2 + 548) : -1; *(_WORD *)(v4 + 2112) = *(_WORD *)(v4 + 2480); v12 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, a4) ) { if ( (unsigned __int16)a4 <= *(_WORD *)(v12 + 200) ) { v13 = (int *)(*(_DWORD *)(v12 + 196) + 4 * (unsigned __int16)a4); if ( *v13 ) { v14 = *v13; if ( v14 ) { *(_DWORD *)(v4 + 2164) = v14; *(_DWORD *)(v4 + 2484) = 0; if ( a2 ) { if ( a2 != v4 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 284))(v4, a2); } v15 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(v4 + 84) + 8); *(_BYTE *)(v4 + 1483) = 0; v15(1.0); } } } } } } } // ACEA9C: using guessed type int dword_ACEA9C; //----- (00660040) -------------------------------------------------------- void __thiscall sub_660040(void *this, unsigned int a2, unsigned int a3, int a4, int a5) { int v5; // esi float *v6; // edi float *v7; // eax double v8; // st7 BOOL v9; // ST08_4 int v10; // edi int *v11; // eax int v12; // eax int v13; // edx void (__thiscall *v14)(int, float *); // edx void (__thiscall *v15)(int, _DWORD); // edx float v16; // [esp+18h] [ebp-10h] float v17; // [esp+1Ch] [ebp-Ch] float v18; // [esp+20h] [ebp-8h] float v19; // [esp+24h] [ebp-4h] float v20; // [esp+38h] [ebp+10h] float v21; // [esp+38h] [ebp+10h] float v22; // [esp+38h] [ebp+10h] v5 = (int)this; if ( a4 == 1 ) { (*(void (**)(void))(*(_DWORD *)this + 424))(); v6 = *(float **)(v5 + 700); v7 = (float *)sub_693030(byte_ADB468); v16 = *v7 - v6[22]; v17 = v7[1] - v6[23]; v18 = v7[2] - v6[24]; v20 = v16 * v16 + v17 * v17 + v18 * v18; v21 = sqrt(v20); v19 = v21; v8 = sub_651680(v5) ? *(float *)(v5 + 1496) + 500.0 : *(float *)(v5 + 1496); v22 = v8; if ( v19 <= (double)v22 ) { sub_64E020((_DWORD *)(v5 + 84), (char *)v5, (_DWORD *)1, 0); if ( sub_650000((_DWORD *)v5, 67) ) { sub_65F350((_DWORD *)v5, 0.0); } else { v9 = sub_6BF020(a5) == 0; sub_65F350((_DWORD *)v5, *(float *)&v9); } v10 = dword_ACEA9C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACEA9C + 16))(dword_ACEA9C, a5) ) { if ( (unsigned __int16)a5 <= *(_WORD *)(v10 + 200) ) { v11 = (int *)(*(_DWORD *)(v10 + 196) + 4 * (unsigned __int16)a5); if ( *v11 ) { v12 = *v11; if ( v12 ) { *(_DWORD *)(v5 + 2484) = 0; *(_DWORD *)(v5 + 2164) = v12; v16 = (double)a2; v13 = *(_DWORD *)v5; v17 = (double)a3; v14 = *(void (__thiscall **)(int, float *))(v13 + 288); v18 = 0.0; v14(v5, &v16); v15 = *(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(v5 + 84) + 8); *(_BYTE *)(v5 + 1483) = 0; v15(v5 + 84, 1.0); } } } } } } } // ACEA9C: using guessed type int dword_ACEA9C; //----- (006601D0) -------------------------------------------------------- char __thiscall sub_6601D0(int this) { _DWORD *v1; // esi int v2; // eax int v3; // eax int v4; // edx float v5; // ST14_4 float v6; // ST14_4 float v8; // [esp+10h] [ebp-4h] v1 = (_DWORD *)this; if ( *(_BYTE *)(this + 69) ) { if ( !*(_DWORD *)(this + 612) ) return 1; v2 = sub_65B8B0((_DWORD *)(this - 84), 0, 0, 0); v3 = sub_65D700(v1 - 21, v2); if ( !v3 ) return 1; v8 = *(float *)(v3 + 52); if ( *((_WORD *)v1 + 232) == *((_WORD *)dword_AD8EBC + 274) && sub_6511D0(v1 - 21, 1) == 1 ) { if ( v1[505] ) { v4 = v1[504]; v5 = *(float *)(*(_DWORD *)v4 + 8) - v8; if ( v5 > 0.05000000074505806 ) { v6 = *(float *)(*(_DWORD *)v4 + 8) - 0.009999999776482582; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 12))(v1, LODWORD(v6)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 8))(v1, 0.0); return 1; } } } } return 0; } //----- (006602A0) -------------------------------------------------------- char __thiscall sub_6602A0(_BYTE *this, int a2, volatile LONG *a3, char a4, unsigned int a5) { _BYTE *v5; // esi int v6; // edi volatile LONG *v7; // esi int v9; // eax int v10; // ebx volatile LONG *v11; // esi int v12; // ebx float *v13; // ecx _DWORD *v14; // eax int v15; // [esp+2Ch] [ebp-20h] int v16; // [esp+30h] [ebp-1Ch] int v17; // [esp+34h] [ebp-18h] int v18; // [esp+38h] [ebp-14h] int v19; // [esp+3Ch] [ebp-10h] int v20; // [esp+48h] [ebp-4h] v5 = this; v6 = a2; v20 = 0; if ( !a2 ) { v7 = a3; v20 = -1; if ( a3 && !InterlockedDecrement(a3 + 1) ) { if ( v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); } return 0; } if ( !a3 ) return 0; v9 = (**(int (__thiscall ***)(int))(a2 + 84))(a2 + 84); v10 = v9; v18 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); if ( v10 ) { v12 = *(_DWORD *)(v10 + 12); v19 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); LOBYTE(v20) = 2; if ( v12 ) { sub_744200((_DWORD *)v6, &a2, a5); LOBYTE(v20) = 3; if ( a2 ) { (*(void (__stdcall **)(_DWORD, _DWORD))(*a3 + 116))(*((_DWORD *)v5 + 177), 0); v13 = (float *)*((_DWORD *)v5 + 177); *((float *)v5 + 669) = *(float *)(a2 + 148); sub_65AC00(v13, flt_BA45B4, 0.0, 0.0, 1.0); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)a2 + 116))(*((_DWORD *)v5 + 177), 0); sub_4022D0(*((_WORD **)v5 + 177), a4 == 0); *((_DWORD *)v5 + 730) = a5; *((_DWORD *)v5 + 731) = v6; *((_WORD *)v5 + 1458) = *(_WORD *)(v6 + 548); sub_443390(v5, 6); (*(void (__thiscall **)(int, int *))(*(_DWORD *)v6 + 200))(v6, &v15); v14 = (_DWORD *)*((_DWORD *)v5 + 175); v14[22] = v15; v14[23] = v16; v14[24] = v17; sub_85BED0((_DWORD **)v12, 0.0, 1); sub_85C6F0((_DWORD *)v12); sub_85C4D0((_DWORD *)v12); sub_85BED0(*((_DWORD ***)v5 + 177), 0.0, 1); sub_85C6F0(*((_DWORD **)v5 + 177)); sub_85C4D0(*((_DWORD **)v5 + 177)); sub_85BED0(*((_DWORD ***)v5 + 175), 0.0, 1); sub_85C6F0(*((_DWORD **)v5 + 175)); sub_85C4D0(*((_DWORD **)v5 + 175)); LOBYTE(v20) = 2; sub_410C00(&a2); LOBYTE(v20) = 1; sub_410C00(&v19); LOBYTE(v20) = 0; sub_410C00(&v18); v20 = -1; sub_410C00(&a3); return 1; } LOBYTE(v20) = 2; sub_410C00(&a2); } LOBYTE(v20) = 1; sub_410C00(&v19); LOBYTE(v20) = 0; sub_410C00(&v18); v20 = -1; sub_410C00(&a3); return 0; } v11 = a3; v20 = -1; if ( a3 && !InterlockedDecrement(a3 + 1) && v11 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v11)(v11, 1); return 0; } // BA45B4: using guessed type float flt_BA45B4; //----- (00660580) -------------------------------------------------------- char __thiscall sub_660580(float *this) { float *v1; // esi int v2; // ecx int *v3; // eax void (__thiscall *v4)(float *, int *); // edx _DWORD *v5; // eax int v6; // eax int v7; // ecx int *v8; // eax void (__thiscall *v9)(float *, int *); // edx _DWORD *v10; // ecx int v11; // ecx char v12; // bl unsigned __int8 (__thiscall *v13)(float *); // edx int v15; // [esp+20h] [ebp-18h] int v16; // [esp+24h] [ebp-14h] int v17; // [esp+28h] [ebp-10h] int v18; // [esp+2Ch] [ebp-Ch] int v19; // [esp+30h] [ebp-8h] int v20; // [esp+34h] [ebp-4h] v1 = this; v2 = *((_DWORD *)this + 731); if ( v2 ) { v3 = (int *)(*(int (**)(void))(*(_DWORD *)v2 + 196))(); v18 = *v3; v19 = v3[1]; v4 = *(void (__thiscall **)(float *, int *))(*(_DWORD *)v1 + 188); v20 = v3[2]; v4(v1, &v18); v5 = (_DWORD *)*((_DWORD *)v1 + 175); v5[22] = v18; v5[23] = v19; v5[24] = v20; v6 = v19; v7 = v20; *((_DWORD *)v1 + 464) = v18; *((_DWORD *)v1 + 465) = v6; *((_DWORD *)v1 + 466) = v7; v8 = (int *)(*(int (**)(void))(**((_DWORD **)v1 + 731) + 212))(); v15 = *v8; v16 = v8[1]; v9 = *(void (__thiscall **)(float *, int *))(*(_DWORD *)v1 + 192); v17 = v8[2]; v9(v1, &v15); } v10 = (_DWORD *)(*((_DWORD *)v1 + 176) + 176); v1[468] = -6.8056465e38/*NaN*/; v1[731] = 0.0; sub_8D8240(v10); v11 = *((_DWORD *)v1 + 177); v1[669] = 0.0; sub_85D860((float *)(v11 + 52), 0.0, 0.0, 0.0, 1.0); *(_WORD *)(*((_DWORD *)v1 + 177) + 28) &= 0xFFFEu; (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 179) + 116))(*((_DWORD *)v1 + 177), 0); sub_85C4D0(*((_DWORD **)v1 + 177)); sub_85C6F0(*((_DWORD **)v1 + 177)); v12 = (*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 48))(v1); v13 = *(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v1 + 48); *((_BYTE *)v1 + 1924) = 1; v1[482] = 0.0; if ( v12 != v13(v1) ) *((_BYTE *)v1 + 1925) = 1; (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 340))(v1); return 1; } //----- (00660700) -------------------------------------------------------- char __thiscall sub_660700(__int16 *this) { __int16 *v1; // ebx _DWORD *v3; // esi int v4; // eax int v5; // esi float v6; // ST18_4 int *v7; // eax int v8; // ecx _DWORD *v9; // edi int v10; // [esp+24h] [ebp-30h] int v11; // [esp+28h] [ebp-2Ch] int v12; // [esp+2Ch] [ebp-28h] int v13; // [esp+30h] [ebp-24h] char v14; // [esp+34h] [ebp-20h] int v15; // [esp+44h] [ebp-10h] int v16; // [esp+50h] [ebp-4h] v1 = this; v15 = (int)sub_664AB0(dword_AD8C90, this[1240]); if ( !v15 ) return 0; v13 = 0; v11 = 0; v12 = 0; v10 = (int)&NiTList::`vftable'; v16 = 0; if ( *((_DWORD *)v1 + 29) ) { v3 = (_DWORD *)*((_DWORD *)v1 + 27); while ( v3 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; sub_64EED0(&v10, (_DWORD *)(v4 + 4)); } v5 = *((_DWORD *)v1 + 541); if ( strcmp((const char *)(v5 + 195), (const char *)&unk_9F3560) ) { v6 = (double)*(unsigned int *)(v5 + 191); sub_6AE300( &unk_B91250, (char *)(v5 + 195), v5 + 291, v5 + 327, (int)v1, v15, flt_ACCFCC, v6, (int)&v10, *(_DWORD *)(v5 + 323), 1); } sub_64CF80(v1, (float *)&v14); sub_6BABB0(&dword_AB6520, v5 + 227, (int)&v14); while ( *((_DWORD *)v1 + 29) ) { v7 = (int *)*((_DWORD *)v1 + 27); v8 = *v7; *((_DWORD *)v1 + 27) = *v7; if ( v8 ) *(_DWORD *)(v8 + 4) = 0; else *((_DWORD *)v1 + 28) = 0; v9 = (_DWORD *)v7[2]; (*(void (__thiscall **)(_DWORD *, int *))(*((_DWORD *)v1 + 26) + 8))((_DWORD *)v1 + 26, v7); --*((_DWORD *)v1 + 29); if ( v9 ) { sub_438C80(v9 + 1); operator delete(v9); } } } v16 = -1; sub_438C80(&v10); return 1; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006608C0) -------------------------------------------------------- char __thiscall sub_6608C0(__int16 *this) { __int16 *v1; // esi int v2; // eax v1 = this; v2 = *((_DWORD *)this + 541); if ( *((_DWORD *)this + 621) == 6 ) { if ( v2 ) { if ( *(_DWORD *)(v2 + 91) == 1 ) { v2 = _strnicmp((const char *)(v2 + 195), "MyWeapon", 8u); if ( !v2 ) { LOBYTE(v2) = (*(int (__thiscall **)(__int16 *))(*(_DWORD *)v1 + 248))(v1); if ( (_BYTE)v2 ) LOBYTE(v2) = sub_660700(v1); } } } } return v2; } //----- (00660910) -------------------------------------------------------- void __userpurge sub_660910(int a1@, int a2@, int a3@, float a4) { int v4; // esi double v5; // st7 char *v6; // edi int v7; // ebx char *v8; // edi int v9; // ebx char *v10; // edi int v11; // eax bool v12; // zf int v13; // eax int v14; // eax int v15; // eax unsigned __int16 *v16; // eax float v17; // eax float v18; // ecx void (__thiscall *v19)(int, float *); // edx char v20; // al float v21; // [esp+14h] [ebp-28h] float v22; // [esp+18h] [ebp-24h] float v23; // [esp+1Ch] [ebp-20h] float v24; // [esp+20h] [ebp-1Ch] float v25; // [esp+24h] [ebp-18h] float v26; // [esp+28h] [ebp-14h] float v27; // [esp+2Ch] [ebp-10h] float v28; // [esp+30h] [ebp-Ch] float v29; // [esp+34h] [ebp-8h] _DWORD *v30; // [esp+38h] [ebp-4h] v4 = a1; if ( !*(_DWORD *)(a1 + 696) ) return; sub_677090(a1 + 776, a3, a4); switch ( *(_DWORD *)(v4 + 2484) ) { case 0: v5 = a4; *(_DWORD *)(v4 + 2484) = 1; *(float *)(v4 + 2492) = v5; goto LABEL_49; case 1: if ( sub_65C320((_DWORD *)v4) ) { v6 = *(char **)(v4 + 2164); v7 = *(_BYTE *)(sub_49FBB0(*(unsigned __int16 *)v6) + 192) != 0; if ( v7 == 1 ) OutputDebugStringA(aAiO); if ( !sub_65CF20((int *)v4, v7, (int)(v6 + 95), v6 + 95, v7) ) { sub_65CE60((_DWORD *)v4); sub_65CE10((_DWORD *)v4); return; } *(_DWORD *)(v4 + 2484) = 2; } else { *(_DWORD *)(v4 + 2484) = 5; } goto LABEL_49; case 2: if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 492))(v4) ) *(_DWORD *)(v4 + 2484) = 2 * (strcmp((const char *)(*(_DWORD *)(v4 + 2164) + 127), (const char *)&unk_9F354C) == 0) + 3; goto LABEL_49; case 3: v8 = *(char **)(v4 + 2164); v9 = *(_BYTE *)(sub_49FBB0(*(unsigned __int16 *)v8) + 192) != 0; if ( v9 == 1 ) OutputDebugStringA(aAiO_0); if ( !sub_65CF20((int *)v4, v9, (int)(v8 + 127), v8 + 127, v9) ) return; *(_DWORD *)(v4 + 2484) = 4; goto LABEL_49; case 5: v10 = *(char **)(v4 + 2164); v11 = sub_49FBB0(*(unsigned __int16 *)v10); v12 = *(_BYTE *)(v11 + 192) == 0; v13 = *(_DWORD *)(v11 + 531); if ( v13 == 36 || v13 == 38 ) { sub_65CF20((int *)v4, a2, (int)(v10 + 159), v10 + 159, 0); } else if ( !sub_65CF20((int *)v4, a2, (int)(v10 + 159), v10 + 159, !v12) ) { sub_65CE60((_DWORD *)v4); sub_65CE10((_DWORD *)v4); goto LABEL_49; } v14 = sub_65B8B0((_DWORD *)v4, 0, 0, 0); v15 = sub_65D700((_DWORD *)v4, v14); if ( v15 ) nullsub_24(*(float *)(v4 + 1492), *(float *)(v15 + 48)); (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 636))(v4); *(_DWORD *)(v4 + 2484) = 6; sub_6520F0((float *)v4); goto LABEL_49; case 6: if ( sub_65C340((_DWORD *)v4) ) { sub_65B8B0((_DWORD *)v4, 0, (unsigned int *)&a4, 0); if ( LODWORD(a4) == 300000 || LODWORD(a4) == 600000 || LODWORD(a4) == 700000 || sub_65C360((_DWORD *)v4) ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 608))(v4, 0) ) { sub_660700((__int16 *)v4); *(_BYTE *)(v4 + 2488) = 1; } } else { sub_64E020((_DWORD *)(v4 + 84), (char *)v4, (_DWORD *)1, 0); sub_65CE60((_DWORD *)v4); sub_65CE10((_DWORD *)v4); } if ( *(_BYTE *)(v4 + 2488) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 492))(v4) ) { sub_65CE60((_DWORD *)v4); sub_65CE10((_DWORD *)v4); } goto LABEL_49; } if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 608))(0) ) { v16 = *(unsigned __int16 **)(v4 + 2164); *(_BYTE *)(v4 + 2488) = 1; v12 = *(_WORD *)(sub_49FBB0(*v16) + 669) == 0; LOBYTE(v30) = 1; if ( !v12 ) LOBYTE(v30) = 0; v12 = *(_DWORD *)(v4 + 2104) == 1; LOBYTE(a4) = 0; if ( v12 ) LOBYTE(a4) = 1; if ( sub_64E020((_DWORD *)(v4 + 84), (char *)v4, v30, SLOBYTE(a4)) == 1 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 492))(v4) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v4 + 608))(v4, 1); } goto LABEL_49; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 492))(v4) ) { sub_64E020((_DWORD *)(v4 + 84), (char *)v4, (_DWORD *)1, 0); LABEL_48: sub_65CE60((_DWORD *)v4); sub_65CE10((_DWORD *)v4); sub_650990((_BYTE *)v4); goto LABEL_49; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 320))(v4) ) { v17 = *(float *)(v4 + 1620); v18 = *(float *)(v4 + 1612); v28 = *(float *)(v4 + 1616); v19 = *(void (__thiscall **)(int, float *))(*(_DWORD *)v4 + 200); v29 = v17; v27 = v18; v19(v4, &v24); v26 = 0.0; v21 = v24 - v27; v22 = v25 - v28; v23 = 0.0 - v29; if ( sub_443070(&v21) < 50.0 ) goto LABEL_48; } LABEL_49: sub_655A40((_DWORD *)v4, 9); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 492))(v4) ) { v20 = *(_BYTE *)(v4 + 2140); if ( v20 ) { *(_BYTE *)(v4 + 2141) = v20; *(_BYTE *)(v4 + 2140) = 0; *(_WORD *)(*(_DWORD *)(v4 + 700) + 28) &= 0xFFFEu; } } return; default: goto LABEL_49; } } // 674DD0: using guessed type _DWORD __stdcall nullsub_24(_DWORD, _DWORD); //----- (00660DA0) -------------------------------------------------------- int __cdecl sub_660DA0(int a1, float a2, int a3) { int result; // eax result = a1; *(float *)a1 = *(float *)a3 * a2; *(float *)(a1 + 4) = *(float *)(a3 + 4) * a2; *(float *)(a1 + 8) = a2 * *(float *)(a3 + 8); return result; } //----- (00660DD0) -------------------------------------------------------- void __thiscall sub_660DD0(int this, int a2) { *(_DWORD *)(this + 40) = a2; sub_834490(*(_DWORD **)(this + 8), a2); } //----- (00660DF0) -------------------------------------------------------- void __thiscall sub_660DF0(int *this) { int *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[5]; if ( v1[1] != v2[7] ) { if ( v2 ) sub_4106E0(v2, v1[1]); sub_65B0E0(v1, v1[1]); } } //----- (00660E20) -------------------------------------------------------- void __thiscall sub_660E20(int *this) { int *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[5]; if ( v1[2] != v2[7] ) { if ( v2 ) sub_4106E0(v2, v1[2]); sub_65B0E0(v1, v1[2]); } } //----- (00660E50) -------------------------------------------------------- void __thiscall sub_660E50(int *this) { int *v1; // esi _DWORD *v2; // ecx v1 = this; v2 = (_DWORD *)this[5]; if ( v1[3] != v2[7] ) { if ( v2 ) sub_4106E0(v2, v1[3]); sub_65B0E0(v1, v1[3]); } } //----- (00660E80) -------------------------------------------------------- void __thiscall sub_660E80(float *this) { float *v1; // esi void (*v2)(void); // edx _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // ST00_4 v1 = this; if ( *((_BYTE *)this + 2510) ) { v2 = *(void (**)(void))(*(_DWORD *)this + 348); this[372] = 1.0; *((_DWORD *)this + 482) = 1; v2(); v3 = *(_DWORD **)(*((_DWORD *)v1 + 175) + 172); if ( !v3 ) { v4 = operator new(0x50u); if ( v4 ) v5 = sub_8339F0(v4, *((_DWORD **)v1 + 175)); else v5 = 0; v3 = v5; } v6 = (_DWORD *)v3[2]; v3[10] = 3; sub_834490(v6, 3); v3[9] = 3; } } //----- (00660F40) -------------------------------------------------------- void __thiscall sub_660F40(float *this) { float *v1; // esi void (*v2)(void); // edx _DWORD *v3; // esi _DWORD *v4; // ST00_4 v1 = this; if ( *((_BYTE *)this + 2510) ) { v2 = *(void (**)(void))(*(_DWORD *)this + 344); this[372] = 1.0; this[482] = 0.0; v2(); v3 = *(_DWORD **)(*((_DWORD *)v1 + 175) + 172); if ( v3 ) { v4 = (_DWORD *)v3[2]; v3[10] = 3; sub_834490(v4, 3); v3[9] = 2; } } } //----- (00660FA0) -------------------------------------------------------- int __cdecl sub_660FA0(char *a1, int a2, int a3) { int v3; // eax unsigned int v4; // edi const char *v5; // eax const char *v6; // esi unsigned int v8; // [esp+Ch] [ebp-4h] v3 = *(_DWORD *)(dword_ACDA24 + 56); v4 = 0; if ( v3 ) v8 = *(_DWORD *)(v3 + 40); else v8 = 0; if ( v8 <= 0 ) return 0; while ( 1 ) { v5 = (const char *)sub_7474E0((_DWORD *)(dword_ACDA24 + 4), v4); v6 = v5; if ( v5 ) { if ( !strncmp(v5, a1, strlen(v5)) && *((_DWORD *)v6 + 8) == a2 && *((unsigned __int8 *)v6 + 36) == a3 ) break; } if ( ++v4 >= v8 ) return 0; } return *(_DWORD *)(v6 + 37); } // ACDA24: using guessed type int dword_ACDA24; //----- (00661030) -------------------------------------------------------- char __thiscall sub_661030(_BYTE *this) { return this[16]; } //----- (00661040) -------------------------------------------------------- bool __thiscall sub_661040(char *this, _DWORD *a2) { int v2; // eax char *v3; // edi int v5; // eax int v6; // esi _DWORD *v7; // eax int v8; // ecx _DWORD *v9; // eax int v10; // esi v2 = a2[47]; v3 = this; if ( (!v2 || !*(_DWORD *)(v2 + 12)) && byte_AB395E && dword_AC9CE4 ) { (*(void (__stdcall **)(_DWORD *, int, _DWORD, signed int, signed int))(*(_DWORD *)dword_AC9CE4 + 16))( a2, dword_BA46D0, 0, 20, 4); return 1; } v5 = sub_85C050(a2, 8); v6 = v5; if ( !v5 ) return 1; v7 = *(_DWORD **)(v5 + 40); if ( !*v7 ) return 0; if ( (v7[1] || v7[3] || v7[4] || v7[5]) && byte_AB395E && dword_AC9CE4 ) { (*(void (__stdcall **)(_DWORD *, int, _DWORD, signed int, signed int))(*(_DWORD *)dword_AC9CE4 + 16))( a2, dword_BA46D0, 0, 20, 4); return 1; } if ( !*(_DWORD *)(*v7 + 4) ) return 0; v8 = sub_863360(); v9 = v3 + 32; if ( !*(_DWORD *)(*(_DWORD *)(v6 + 40) + 8) ) v9 = v3 + 4; if ( v9[5] >= 0x10u ) v9 = (_DWORD *)*v9; v10 = (*(int (__stdcall **)(_DWORD *, signed int, _DWORD))(*(_DWORD *)v8 + 4))(v9, -1, 0); if ( !v10 ) return 0; sub_8633D0((int)a2); return sub_8633A0((int)a2, v10) != 0; } // AB395E: using guessed type char byte_AB395E; // AC9CE4: using guessed type int dword_AC9CE4; // BA46D0: using guessed type int dword_BA46D0; //----- (00661150) -------------------------------------------------------- bool __stdcall sub_661150(_DWORD *a1) { int v1; // eax int v2; // eax int v3; // esi _DWORD *v4; // eax int (__stdcall *v5)(const char *, signed int, _DWORD); // edx int v6; // eax int v7; // esi v1 = a1[47]; if ( !v1 || !*(_DWORD *)(v1 + 12) ) { sub_8633D0((int)a1); return 1; } v2 = sub_85C050(a1, 8); v3 = v2; if ( !v2 ) return 1; v4 = *(_DWORD **)(v2 + 40); if ( v4[1] || v4[3] || v4[4] || v4[5] ) { sub_8633D0((int)a1); return 1; } if ( !*(_DWORD *)(*v4 + 4) ) return 0; v5 = *(int (__stdcall **)(const char *, signed int, _DWORD))(*(_DWORD *)sub_863360() + 4); v6 = *(_DWORD *)(*(_DWORD *)(v3 + 40) + 8) ? v5("FxSkinningHairDetailMap", -1, 0) : v5("FxSkinningBaseMap", -1, 0); v7 = v6; if ( !v6 ) return 0; sub_8633D0((int)a1); return sub_8633A0((int)a1, v7) != 0; } //----- (00661220) -------------------------------------------------------- _DWORD *__thiscall sub_661220(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &CSpactralGlow_Shader_Controller::`vftable'; v1[2] = 0; v1[3] = 0; *((_WORD *)v1 + 8) = 0; v1[5] = &NiTArray::`vftable'; v1[7] = 0; v1[10] = 1; v1[8] = 0; v1[9] = 0; v1[6] = 0; v2 = (int)(v1 + 11); *(_DWORD *)(v2 + 20) = 15; *(_BYTE *)v2 = 0; v1[23] = 15; v1[22] = 0; *((_BYTE *)v1 + 72) = 0; *(_DWORD *)(v2 + 16) = 0; if ( v1[16] >= 0x10u ) v2 = *(_DWORD *)v2; *(_BYTE *)v2 = 0; v1[22] = 0; if ( v1[23] < 0x10u ) *((_BYTE *)v1 + 72) = 0; else *(_BYTE *)v1[18] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F3754: using guessed type void *NiTArray::`vftable'; // 9F376C: using guessed type void *CSpactralGlow_Shader_Controller::`vftable'; //----- (006612F0) -------------------------------------------------------- LONG __thiscall sub_6612F0(char *this) { char *v1; // ebx _BYTE *v2; // eax _BYTE *v3; // eax void *v4; // ST00_4 int v5; // esi v1 = this; *(_DWORD *)this = &CSpactralGlow_Shader_Controller::`vftable'; *((_DWORD *)this + 15) = 0; if ( *((_DWORD *)this + 16) < 0x10u ) v2 = this + 44; else v2 = (_BYTE *)*((_DWORD *)this + 11); *v2 = 0; *((_DWORD *)this + 22) = 0; if ( *((_DWORD *)this + 23) < 0x10u ) v3 = this + 72; else v3 = (_BYTE *)*((_DWORD *)this + 18); *v3 = 0; if ( *((_DWORD *)this + 23) >= 0x10u ) operator delete(*((void **)this + 18)); *((_DWORD *)v1 + 23) = 15; *((_DWORD *)v1 + 22) = 0; v1[72] = 0; if ( *((_DWORD *)v1 + 16) >= 0x10u ) operator delete(*((void **)v1 + 11)); *((_DWORD *)v1 + 16) = 15; *((_DWORD *)v1 + 15) = 0; v1[44] = 0; v4 = (void *)*((_DWORD *)v1 + 6); *((_DWORD *)v1 + 5) = &NiTArray::`vftable'; operator delete[](v4); v5 = *((_DWORD *)v1 + 2); if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F3754: using guessed type void *NiTArray::`vftable'; // 9F376C: using guessed type void *CSpactralGlow_Shader_Controller::`vftable'; //----- (006613F0) -------------------------------------------------------- char __thiscall sub_6613F0(int *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax unsigned int v4; // eax unsigned int v5; // edi _DWORD *v6; // ebx void **v8; // [esp+10h] [ebp-30h] int v9; // [esp+14h] [ebp-2Ch] int v10; // [esp+18h] [ebp-28h] void **v11; // [esp+1Ch] [ebp-24h] void *v12; // [esp+20h] [ebp-20h] int v13; // [esp+24h] [ebp-1Ch] unsigned int v14; // [esp+28h] [ebp-18h] int v15; // [esp+2Ch] [ebp-14h] int v16; // [esp+30h] [ebp-10h] int v17; // [esp+3Ch] [ebp-4h] unsigned int i; // [esp+48h] [ebp+8h] this[3] = a2; v2 = this + 5; v3 = 0; if ( this[8] ) { do *(_DWORD *)(this[6] + 4 * v3++) = 0; while ( v3 < this[8] ); } this[8] = 0; this[9] = 0; v9 = 0; v10 = -1; v8 = &FindChildGeometry::`vftable'; v11 = &NiTArray::`vftable'; v13 = 0; v16 = 1; v14 = 0; v15 = 0; v12 = 0; v17 = 1; sub_8CFE00(&v8, this[3], (int)dword_BA4840, (int)this); v4 = 0; for ( i = 0; v4 < v14; i = v4 ) { v5 = v2[3]; v6 = (char *)v12 + 4 * v4; if ( v5 < v2[2] || (sub_6AA490(v2, v5 + v2[5]), v4 = i, v5 < v2[2]) ) { if ( v5 < v2[3] ) { if ( *v6 ) { if ( !*(_DWORD *)(v2[1] + 4 * v5) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v5) ) { --v2[4]; } } else { v2[3] = v5 + 1; if ( *v6 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v5) = *v6; } ++v4; } v11 = &NiTArray::`vftable'; operator delete[](v12); return 1; } // 9F3754: using guessed type void *NiTArray::`vftable'; // 9F375C: using guessed type void *FindChildGeometry::`vftable'; //----- (00661530) -------------------------------------------------------- signed int __thiscall sub_661530(_DWORD *this, int a2, int a3) { int v3; // esi _DWORD *v4; // edi int v5; // eax _DWORD *v7; // esi unsigned int v8; // edi v3 = a2; v4 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA4840 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) return 1; } a2 = v3; v7 = v4 + 3; v8 = v4[6]; if ( v8 >= v7[2] ) sub_6AA490(v7, v8 + v7[5]); sub_823870(v7, v8, &a2); } } return 1; } //----- (006615F0) -------------------------------------------------------- char __thiscall sub_6615F0(char *this, int a2) { char *v2; // ebx unsigned int i; // edi unsigned int v4; // ecx int v5; // eax unsigned int k; // edi void **v8; // [esp+10h] [ebp-78h] int v9; // [esp+14h] [ebp-74h] int v10; // [esp+18h] [ebp-70h] void **v11; // [esp+1Ch] [ebp-6Ch] void *v12; // [esp+20h] [ebp-68h] int v13; // [esp+24h] [ebp-64h] unsigned int v14; // [esp+28h] [ebp-60h] int v15; // [esp+2Ch] [ebp-5Ch] int v16; // [esp+30h] [ebp-58h] void **v17; // [esp+34h] [ebp-54h] int v18; // [esp+38h] [ebp-50h] int v19; // [esp+3Ch] [ebp-4Ch] void **v20; // [esp+40h] [ebp-48h] void *v21; // [esp+44h] [ebp-44h] int v22; // [esp+48h] [ebp-40h] unsigned int v23; // [esp+4Ch] [ebp-3Ch] int v24; // [esp+50h] [ebp-38h] int v25; // [esp+54h] [ebp-34h] void **v26; // [esp+58h] [ebp-30h] int v27; // [esp+5Ch] [ebp-2Ch] int v28; // [esp+60h] [ebp-28h] void **v29; // [esp+64h] [ebp-24h] void *v30; // [esp+68h] [ebp-20h] int v31; // [esp+6Ch] [ebp-1Ch] unsigned int v32; // [esp+70h] [ebp-18h] int v33; // [esp+74h] [ebp-14h] int v34; // [esp+78h] [ebp-10h] int v35; // [esp+84h] [ebp-4h] unsigned int j; // [esp+90h] [ebp+8h] v2 = this; v9 = 0; v10 = -1; v8 = &FindChildGeometry::`vftable'; v11 = &NiTArray::`vftable'; v13 = 0; v16 = 1; v14 = 0; v15 = 0; v12 = 0; v35 = 1; sub_8CFE00(&v8, a2, (int)dword_BA4840, (int)this); for ( i = 0; i < v14; ++i ) sub_661040(v2, *((_DWORD **)v12 + i)); v18 = 0; v19 = -1; v17 = &Find_EF_ExtraData::`vftable'; v20 = &NiTArray::`vftable'; v22 = 0; v25 = 1; v23 = 0; v24 = 0; v21 = 0; LOBYTE(v35) = 3; sub_8CFE00(&v17, a2, (int)dword_BA455C, (int)v2); v4 = 0; for ( j = 0; v4 < v23; j = v4 ) { v5 = *((_DWORD *)v21 + v4); if ( v5 ) { v27 = 0; v28 = -1; v26 = &FindChildGeometry::`vftable'; v29 = &NiTArray::`vftable'; v31 = 0; v34 = 1; v32 = 0; v33 = 0; v30 = 0; LOBYTE(v35) = 5; sub_8CFE00(&v26, v5, (int)dword_BA4840, (int)v2); for ( k = 0; k < v32; ++k ) sub_661150(*((_DWORD **)v30 + k)); LOBYTE(v35) = 3; v29 = &NiTArray::`vftable'; operator delete[](v30); v4 = j; } ++v4; } v20 = &NiTArray::`vftable'; operator delete[](v21); v11 = &NiTArray::`vftable'; operator delete[](v12); return 1; } // 9F374C: using guessed type void *NiTArray::`vftable'; // 9F3754: using guessed type void *NiTArray::`vftable'; // 9F375C: using guessed type void *FindChildGeometry::`vftable'; // 9F3764: using guessed type void *Find_EF_ExtraData::`vftable'; //----- (00661790) -------------------------------------------------------- char __thiscall sub_661790(_DWORD *this, int a2) { _DWORD *v2; // edi void *v3; // edx int v4; // eax void *v5; // edx int v6; // eax void *v7; // ecx int v8; // eax char result; // al void *v10; // [esp+10h] [ebp-2Ch] int v11; // [esp+20h] [ebp-1Ch] unsigned int v12; // [esp+24h] [ebp-18h] int v13; // [esp+38h] [ebp-4h] v2 = this; if ( this[16] < 0x10u ) v3 = this + 11; else v3 = (void *)this[11]; v12 = 15; v11 = 0; LOBYTE(v10) = 0; sub_4018E0(&v10, v3, strlen((const char *)v3)); v4 = *(_DWORD *)(a2 + 188); v13 = 0; if ( !v4 || !*(_DWORD *)(v4 + 12) ) { if ( v2[23] < 0x10u ) v5 = v2 + 18; else v5 = (void *)v2[18]; sub_4018E0(&v10, v5, strlen((const char *)v5)); } v6 = sub_863360(); v7 = v10; if ( v12 < 0x10 ) v7 = &v10; v8 = (*(int (__thiscall **)(int, void *, signed int, _DWORD))(*(_DWORD *)v6 + 4))(v6, v7, -1, 0); if ( !v8 ) { if ( v12 >= 0x10 ) operator delete(v10); return 0; } if ( sub_8633A0(a2, v8) ) { if ( v12 >= 0x10 ) operator delete(v10); result = 1; } else { if ( v12 < 0x10 ) return 0; operator delete(v10); result = 0; } return result; } //----- (006618E0) -------------------------------------------------------- const void **__thiscall sub_6618E0(_DWORD *this, void *a2, void *a3) { _DWORD *v3; // esi v3 = this; sub_4018E0(this + 11, a2, strlen((const char *)a2)); return sub_4018E0(v3 + 18, a3, strlen((const char *)a3)); } //----- (00661930) -------------------------------------------------------- char __thiscall sub_661930(_DWORD *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // ecx int v4; // eax int v5; // ecx v2 = this; v3 = this + 1; if ( a2 ) { sub_4018E0(v3, "FxSkinningBaseMapWithOutLine", 0x1Cu); sub_4018E0(v2 + 8, "FxSkinningDMWithOutLine", 0x17u); v4 = sub_863360(); if ( v2[6] < 0x10u ) v5 = (int)(v2 + 1); else v5 = v2[1]; if ( !(*(int (__thiscall **)(int, int, signed int, _DWORD))(*(_DWORD *)v4 + 4))(v4, v5, -1, 0) ) { sub_4018E0(v2 + 1, "FxSkinningBaseMap", 0x11u); sub_4018E0(v2 + 8, "FxSkinningHairDetailMap", 0x17u); return 0; } } else { sub_4018E0(v3, "FxSkinningBaseMap", 0x11u); sub_4018E0(v2 + 8, "FxSkinningHairDetailMap", 0x17u); } *((_BYTE *)v2 + 60) = a2; return 1; } //----- (006619E0) -------------------------------------------------------- char __thiscall sub_6619E0(int *this) { int *v1; // esi int v2; // edi v1 = this; sub_6613F0(this, this[3]); v2 = 0; if ( !v1[8] ) return 1; while ( sub_661790(v1, *(_DWORD *)(v1[6] + 4 * v2)) ) { if ( ++v2 >= (unsigned int)v1[8] ) return 1; } return 0; } //----- (00661A20) -------------------------------------------------------- signed int __thiscall sub_661A20(_DWORD *this, _DWORD *a2, int a3) { int v3; // ebx int v4; // eax void *v5; // eax _DWORD *v6; // ecx int v7; // eax int v8; // esi _DWORD *v9; // ebx bool v10; // cf int v11; // ecx unsigned int v12; // edi int v13; // eax const char *v14; // eax int v15; // esi unsigned int v16; // edi int v18; // [esp+10h] [ebp-58h] _DWORD *v19; // [esp+14h] [ebp-54h] _DWORD *v20; // [esp+18h] [ebp-50h] void **v21; // [esp+1Ch] [ebp-4Ch] int v22; // [esp+20h] [ebp-48h] int v23; // [esp+24h] [ebp-44h] void *v24; // [esp+28h] [ebp-40h] int v25; // [esp+38h] [ebp-30h] unsigned int v26; // [esp+3Ch] [ebp-2Ch] void *v27; // [esp+44h] [ebp-24h] int v28; // [esp+48h] [ebp-20h] int v29; // [esp+4Ch] [ebp-1Ch] int v30; // [esp+64h] [ebp-4h] v3 = (int)a2; v19 = this; v20 = a2; if ( a2 ) { v4 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v4 ) { while ( (char *)v4 != dword_BA455C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 1; } if ( sub_85AA60(a2, (const char *)&unk_9F3650) ) { v5 = (void *)a2[2]; if ( v5 ) { v22 = 0; v23 = -1; v21 = &NsFindObjectByName::`vftable'; v26 = 15; v25 = 0; LOBYTE(v24) = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; sub_65B560(&v21, (int)a2, v5); v6 = v27; v7 = (v28 - (signed int)v27) >> 2; v8 = 0; if ( v7 > 0 ) { v9 = v19; v10 = (unsigned int)v7 > 0; do { if ( v10 ) v11 = v6[v8]; else v11 = 0; v12 = v9[6]; v18 = v11; if ( v12 >= v9[5] ) sub_6AA490(v9 + 3, v12 + v9[8]); sub_823870(v9 + 3, v12, &v18); v6 = v27; ++v8; v13 = (v28 - (signed int)v27) >> 2; v10 = v8 < (unsigned int)v13; } while ( v8 < v13 ); v3 = (int)v20; } v30 = -1; if ( v6 ) operator delete(v6); v27 = 0; v28 = 0; v29 = 0; if ( v26 >= 0x10 ) operator delete(v24); } } v14 = *(const char **)(v3 + 8); if ( v14 && !strcmp(v14, "NOOUTLINE") ) { v15 = (int)v19; v16 = v19[6]; v20 = (_DWORD *)v3; if ( v16 >= v19[5] ) sub_6AA490(v19 + 3, v16 + v19[8]); sub_823870((_DWORD *)(v15 + 12), v16, &v20); } } } return 1; } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; //----- (00661BF0) -------------------------------------------------------- _DWORD *__thiscall sub_661BF0(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax int v3; // ecx v1 = this; *this = &CarToonShader::`vftable'; this[6] = 15; this[5] = 0; *((_BYTE *)this + 4) = 0; this[13] = 15; this[12] = 0; *((_BYTE *)this + 32) = 0; sub_4018E0(this + 1, "FxSkinningBaseMapWithOutLine", 0x1Cu); sub_4018E0(v1 + 8, "FxSkinningDMWithOutLine", 0x17u); v2 = sub_863360(); if ( v1[6] < 0x10u ) v3 = (int)(v1 + 1); else v3 = v1[1]; if ( (*(int (__thiscall **)(int, int, signed int, _DWORD))(*(_DWORD *)v2 + 4))(v2, v3, -1, 0) ) { *((_BYTE *)v1 + 60) = 1; } else { sub_4018E0(v1 + 1, "FxSkinningBaseMap", 0x11u); sub_4018E0(v1 + 8, "FxSkinningHairDetailMap", 0x17u); } return v1; } // 9F3774: using guessed type void *CarToonShader::`vftable'; //----- (00661CD0) -------------------------------------------------------- int *sub_661CD0() { if ( !(dword_AD8C88 & 1) ) { dword_AD8C88 |= 1u; sub_661BF0(&dword_AD8C48); atexit(sub_9A30A0); } return &dword_AD8C48; } // AD8C48: using guessed type int dword_AD8C48; // AD8C88: using guessed type int dword_AD8C88; //----- (00661D40) -------------------------------------------------------- char __thiscall sub_661D40(int this, int a2) { int v2; // esi char v3; // ST14_1 v2 = this; v3 = *(_BYTE *)(this + 60); sub_4018E0((_DWORD *)(this + 4), "FxSkinningBaseMap", 0x11u); sub_4018E0((_DWORD *)(v2 + 32), "FxSkinningHairDetailMap", 0x17u); *(_BYTE *)(v2 + 60) = 0; sub_4018E0((_DWORD *)(v2 + 4), "FxSkinningBaseMap", 0x11u); sub_4018E0((_DWORD *)(v2 + 32), "FxSkinningHairDetailMap", 0x17u); sub_6615F0((char *)v2, a2); sub_661930((_DWORD *)v2, v3); return 1; } //----- (00661DB0) -------------------------------------------------------- char __thiscall sub_661DB0(int *this) { int *v1; // esi int v2; // edi char result; // al v1 = this; sub_6613F0(this, this[3]); v2 = 0; if ( v1[8] ) { while ( sub_8633D0(*(_DWORD *)(v1[6] + 4 * v2)) ) { if ( ++v2 >= (unsigned int)v1[8] ) goto LABEL_4; } result = 0; } else { LABEL_4: if ( !(dword_AD8C88 & 1) ) { dword_AD8C88 |= 1u; sub_661BF0(&dword_AD8C48); atexit(sub_9A30A0); } sub_6615F0((char *)&dword_AD8C48, v1[3]); result = 1; } return result; } // AD8C48: using guessed type int dword_AD8C48; // AD8C88: using guessed type int dword_AD8C88; //----- (00661E70) -------------------------------------------------------- char __thiscall sub_661E70(_BYTE *this, char a2) { _BYTE *v2; // esi int v3; // edi _DWORD *v4; // eax _DWORD *v5; // eax v2 = this; if ( !this[17] ) { v3 = sub_863360(); v4 = v2 + 44; if ( *((_DWORD *)v2 + 16) >= 0x10u ) v4 = (_DWORD *)*v4; if ( (*(int (__thiscall **)(int, _DWORD *, signed int, _DWORD))(*(_DWORD *)v3 + 4))(v3, v4, -1, 0) ) { v5 = v2 + 72; if ( *((_DWORD *)v2 + 23) >= 0x10u ) v5 = (_DWORD *)*v5; if ( (*(int (__thiscall **)(int, _DWORD *, signed int, _DWORD))(*(_DWORD *)v3 + 4))(v3, v5, -1, 0) ) v2[17] = 1; } if ( !v2[17] ) return 0; } if ( !*((_DWORD *)v2 + 3) ) return 0; if ( a2 ) { if ( sub_6619E0((int *)v2) ) { v2[16] = 1; return 1; } return 0; } if ( !sub_661DB0((int *)v2) ) return 0; v2[16] = 0; return 1; } //----- (00661F10) -------------------------------------------------------- char __thiscall sub_661F10(_BYTE *this, int a2) { _BYTE *v2; // esi int v3; // edi char result; // al void **v5; // [esp+Ch] [ebp-30h] int v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+14h] [ebp-28h] void **v8; // [esp+18h] [ebp-24h] void *v9; // [esp+1Ch] [ebp-20h] int v10; // [esp+20h] [ebp-1Ch] unsigned int v11; // [esp+24h] [ebp-18h] int v12; // [esp+28h] [ebp-14h] int v13; // [esp+2Ch] [ebp-10h] int v14; // [esp+38h] [ebp-4h] v2 = this; v3 = 0; v6 = 0; v7 = -1; v5 = &FindChildGeometry::`vftable'; v8 = &NiTArray::`vftable'; v10 = 0; v13 = 1; v11 = 0; v12 = 0; v9 = 0; v14 = 1; sub_8CFE00(&v5, a2, (int)dword_BA4840, (int)this); if ( v11 <= 0 ) { LABEL_4: sub_661E70(v2, v2[16]); v8 = &NiTArray::`vftable'; operator delete[](v9); result = 1; } else { while ( sub_661790(v2, *((_DWORD *)v9 + v3)) ) { if ( ++v3 >= v11 ) goto LABEL_4; } v8 = &NiTArray::`vftable'; operator delete[](v9); result = 0; } return result; } // 9F3754: using guessed type void *NiTArray::`vftable'; // 9F375C: using guessed type void *FindChildGeometry::`vftable'; //----- (00662000) -------------------------------------------------------- void *__thiscall sub_662000(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F374C: using guessed type void *NiTArray::`vftable'; //----- (00662030) -------------------------------------------------------- void *__thiscall sub_662030(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3754: using guessed type void *NiTArray::`vftable'; //----- (006620A0) -------------------------------------------------------- void *__thiscall sub_6620A0(void *this, char a2) { void *v2; // esi v2 = this; sub_6612F0((char *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006620D0) -------------------------------------------------------- void *__thiscall sub_6620D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CarToonShader::`vftable'; if ( *((_DWORD *)this + 13) >= 0x10u ) operator delete(*((void **)this + 8)); *((_DWORD *)v2 + 13) = 15; *((_DWORD *)v2 + 12) = 0; *((_BYTE *)v2 + 32) = 0; if ( *((_DWORD *)v2 + 6) >= 0x10u ) operator delete(*((void **)v2 + 1)); *((_DWORD *)v2 + 5) = 0; *((_DWORD *)v2 + 6) = 15; *((_BYTE *)v2 + 4) = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3774: using guessed type void *CarToonShader::`vftable'; //----- (00662140) -------------------------------------------------------- char __cdecl sub_662140(char a1) { char result; // al switch ( a1 ) { case 1: case 3: case 5: case 6: case 8: case 9: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: result = 1; break; case 0xB: case 0xD: case 0xF: case 0x1A: case 0x1B: result = 2; break; case 0x10: case 0x12: case 0x14: result = 3; break; default: result = 0; break; } return result; } //----- (006621D0) -------------------------------------------------------- char __cdecl sub_6621D0(int a1, int a2, char a3) { signed int v3; // esi signed int v4; // edx char v5; // al v3 = 1; v4 = 1; while ( 1 ) { v3 *= 2; if ( a1 & v3 && (_BYTE)v4 ) { switch ( (unsigned __int8)v4 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v5 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v5 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v5 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v5 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v5 = 21; break; case 0x1Au: case 0x1Bu: v5 = 26; break; default: v5 = 0; break; } if ( v5 == a3 ) break; } if ( (unsigned int)++v4 > 0x20 ) return 0; } return 1; } //----- (006622B0) -------------------------------------------------------- char __cdecl sub_6622B0(__int64 a1, unsigned __int8 a2) { int v2; // ebx v2 = a2; if ( (signed int)a2 >= 28 ) return 0; while ( !(a1 & (1i64 << v2)) ) { if ( ++v2 >= 28 ) return 0; } return v2; } //----- (006622F0) -------------------------------------------------------- signed __int64 __cdecl sub_6622F0(int a1) { unsigned __int8 *v1; // eax signed __int64 v2; // krD0_8 v1 = (unsigned __int8 *)sub_662DA0(a1); if ( !v1 ) return 0i64; v2 = (v1[10] << 7) + (v1[11] << 8) + (v1[12] << 9) + (v1[13] << 10) + (v1[14] << 11) + (v1[15] << 12) + (v1[16] << 13) + (v1[17] << 14) + (v1[18] << 15) + (v1[19] << 16) + (v1[20] << 17) + (v1[21] << 18) + (v1[22] << 19) + (v1[23] << 20) + (v1[24] << 21) + (v1[25] << 22) + (v1[26] << 23) + (v1[27] << 24) + (v1[28] << 25) + (v1[29] << 26) + (signed __int64)(v1[30] << 27); return 4 * v1[5] + 8 * v1[6] + 16 * v1[7] + 32 * v1[8] + (v1[9] << 6) + v2 + 2 * v1[4]; } //----- (00662470) -------------------------------------------------------- void __cdecl sub_662470(__int64 a1, char *a2, unsigned int a3) { const char *v3; // edi int v4; // esi signed int v5; // ebx int v6; // eax const char *v7; // eax unsigned int v8; // ecx const char *v9; // ecx int v10; // [esp+4h] [ebp-4h] v3 = a2; if ( a2 ) { *a2 = 0; v4 = 0; v5 = 1; do { if ( a1 & (1i64 << v5) ) { v6 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), (unsigned __int8)v5); if ( v6 ) { v7 = (const char *)(v6 + 21); if ( !v7 ) goto LABEL_12; } else { v7 = &byte_9A8050; } v10 = v4 + 1; if ( v4 + 1 > 2 || strlen(v7) + strlen(v3) + 2 >= a3 ) return; if ( v10 > 1 ) { v8 = (unsigned int)&a2[strlen(a2)]; *(_WORD *)v8 = 8236; *(_BYTE *)(v8 + 2) = 0; } v9 = v7; qmemcpy(&a2[strlen(a2)], v9, &v7[strlen(v7) + 1] - v9); v4 = v10; v3 = a2; } LABEL_12: ++v5; } while ( v5 < 28 ); } } // AC9C84: using guessed type int dword_AC9C84; //----- (00662570) -------------------------------------------------------- char __cdecl sub_662570(signed __int64 a1, char *a2, unsigned int a3) { char *v3; // esi unsigned int v4; // edi const CHAR *v5; // eax int v6; // esi char v7; // cl unsigned __int8 v8; // al unsigned int v9; // edi const char *v10; // ecx const char *v11; // edx char *v12; // esi int v13; // eax const char *v14; // edx char *v15; // eax char *v16; // edi unsigned __int8 v17; // al unsigned int v18; // edi const char *v19; // ecx int v20; // eax const char *v21; // edx char *v22; // eax char *v23; // edi unsigned __int8 v24; // al const char *v25; // ecx int v26; // eax const char *v27; // edx char *v28; // eax char *v29; // edi unsigned __int8 v30; // al unsigned int v31; // edi const char *v32; // ecx int v33; // eax const char *v34; // edx char *v35; // eax char *v36; // edi unsigned __int8 v37; // al unsigned int v38; // edi const char *v39; // ecx int v40; // eax const char *v41; // edx char *v42; // eax char *v43; // edi const char *v44; // ecx char *v45; // eax char *v46; // ecx const char *v47; // ecx unsigned __int8 v49; // [esp+Eh] [ebp-Ah] char v50; // [esp+12h] [ebp-6h] char v51; // [esp+13h] [ebp-5h] char v52; // [esp+14h] [ebp-4h] char v53; // [esp+15h] [ebp-3h] char v54; // [esp+16h] [ebp-2h] char v55; // [esp+17h] [ebp-1h] v3 = a2; v4 = a1; *a2 = 0; v50 = sub_6621D0(a1, SHIDWORD(a1), 1); v55 = sub_6621D0(a1, SHIDWORD(a1), 11); v54 = sub_6621D0(a1, SHIDWORD(a1), 6); v53 = sub_6621D0(a1, SHIDWORD(a1), 16); v52 = sub_6621D0(a1, SHIDWORD(a1), 21); LOBYTE(v5) = sub_6621D0(a1, SHIDWORD(a1), 26); v51 = (char)v5; if ( v50 ) { if ( v55 && v54 && v53 && v52 && (_BYTE)v5 ) { v5 = sub_40C190(-1761683743); v6 = a2 - v5; do { v7 = *v5; v5[v6] = *v5; ++v5; } while ( v7 ); return (char)v5; } v8 = sub_6622B0(a1, 1u); if ( v8 == 4 && a1 > 16 ) { sub_662470(a1, a2, a3); v9 = strlen(a2); v5 = (const CHAR *)strlen(sub_40C190(-368780813)); if ( (unsigned int)&v5[v9 + 2] >= a3 ) return (char)v5; *(_WORD *)&a2[strlen(a2)] = 32; v10 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v10) + 1); v11 = v10; v12 = &a2[strlen(a2)]; LABEL_78: qmemcpy(v12, v11, (unsigned int)v5); return (char)v5; } v13 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v8); v14 = &byte_9A8050; if ( v13 ) v14 = (const char *)(v13 + 21); v5 = (const CHAR *)(strlen(v14) + 1); if ( (unsigned int)v5 >= a3 ) return (char)v5; v15 = sub_7549E0("%s ", v14); v16 = v15; v5 = (const CHAR *)(strlen(v15) + 1); qmemcpy(&a2[strlen(a2)], v16, (unsigned int)v5); v3 = a2; v4 = a1; } if ( v55 ) { v17 = sub_6622B0(__PAIR__(HIDWORD(a1), v4), 0xBu); if ( v17 == 14 && a1 >= 0 && (SHIDWORD(a1) > 0 || v4 > 0x4000) ) { sub_662470(__PAIR__(HIDWORD(a1), v4), v3, a3); v18 = strlen(v3); v5 = (const CHAR *)strlen(sub_40C190(-368780813)); if ( (unsigned int)&v5[v18 + 2] >= a3 ) return (char)v5; *(_WORD *)&v3[strlen(v3)] = 32; v19 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v19) + 1); v11 = v19; v12 = &v3[strlen(v3)]; goto LABEL_78; } v20 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v17); v21 = &byte_9A8050; if ( v20 ) v21 = (const char *)(v20 + 21); v5 = (const CHAR *)(strlen(v21) + 1); if ( (unsigned int)v5 >= a3 ) return (char)v5; v22 = sub_7549E0("%s ", v21); v23 = v22; v5 = (const CHAR *)(strlen(v22) + 1); qmemcpy(&v3[strlen(v3)], v23, (unsigned int)v5); v3 = a2; v4 = a1; } if ( v54 ) { v24 = sub_6622B0(__PAIR__(HIDWORD(a1), v4), 6u); if ( v24 == 9 && a1 >= 0 && (SHIDWORD(a1) > 0 || v4 > 0x200) ) { sub_662470(__PAIR__(HIDWORD(a1), v4), v3, a3); v5 = (const CHAR *)(strlen(sub_40C190(-368780813)) + strlen(v3) + 2); if ( (unsigned int)v5 >= a3 ) return (char)v5; *(_WORD *)&v3[strlen(v3)] = 32; v25 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v25) + 1); v11 = v25; v12 = &v3[strlen(v3)]; goto LABEL_78; } v26 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v24); v27 = &byte_9A8050; if ( v26 ) v27 = (const char *)(v26 + 21); v5 = (const CHAR *)(strlen(v27) + 1); if ( (unsigned int)v5 >= a3 ) return (char)v5; v28 = sub_7549E0("%s ", v27); v29 = v28; v5 = (const CHAR *)(strlen(v28) + 1); qmemcpy(&v3[strlen(v3)], v29, (unsigned int)v5); v3 = a2; v4 = a1; } if ( v53 ) { v30 = sub_6622B0(__PAIR__(HIDWORD(a1), v4), 0x10u); if ( v30 == 19 && a1 >= 0 && (SHIDWORD(a1) > 0 || v4 > 0x80000) ) { sub_662470(__PAIR__(HIDWORD(a1), v4), v3, a3); v31 = strlen(v3); v5 = (const CHAR *)strlen(sub_40C190(-368780813)); if ( (unsigned int)&v5[v31 + 2] >= a3 ) return (char)v5; *(_WORD *)&v3[strlen(v3)] = 32; v32 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v32) + 1); v11 = v32; v12 = &v3[strlen(v3)]; goto LABEL_78; } v33 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v30); v34 = &byte_9A8050; if ( v33 ) v34 = (const char *)(v33 + 21); v5 = (const CHAR *)(strlen(v34) + 1); if ( (unsigned int)v5 >= a3 ) return (char)v5; v35 = sub_7549E0("%s ", v34); v36 = v35; v5 = (const CHAR *)(strlen(v35) + 1); qmemcpy(&v3[strlen(v3)], v36, (unsigned int)v5); v3 = a2; v4 = a1; } if ( !v52 ) { LABEL_62: if ( v51 ) { v49 = sub_6622B0(__PAIR__(HIDWORD(a1), v4), 0x1Au); if ( v49 == 27 && a1 >= 0 && (SHIDWORD(a1) > 0 || v4 > 0x8000000) ) { sub_662470(__PAIR__(HIDWORD(a1), v4), v3, a3); v5 = (const CHAR *)(strlen(sub_40C190(-368780813)) + strlen(v3) + 2); if ( (unsigned int)v5 >= a3 ) return (char)v5; *(_WORD *)&v3[strlen(v3)] = 32; v44 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v44) + 1); v11 = v44; v12 = &v3[strlen(v3)]; goto LABEL_78; } v5 = sub_40AAB0(v49); if ( strlen(v5) + 1 >= a3 ) return (char)v5; v45 = sub_7549E0("%s ", v5); v46 = v45; v5 = (const CHAR *)(strlen(v45) + 1); qmemcpy(&v3[strlen(v3)], v46, (unsigned int)v5); v3 = a2; } if ( v50 || v55 || v54 || v53 || v52 || v51 ) { v47 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v47) + 1); v11 = v47; v12 = &v3[strlen(v3)]; goto LABEL_78; } return (char)v5; } v37 = sub_6622B0(__PAIR__(HIDWORD(a1), v4), 0x15u); if ( v37 == 24 && a1 >= 0 && (SHIDWORD(a1) > 0 || v4 > 0x1000000) ) { sub_662470(__PAIR__(HIDWORD(a1), v4), v3, a3); v38 = strlen(v3); v5 = (const CHAR *)strlen(sub_40C190(-368780813)); if ( (unsigned int)&v5[v38 + 2] >= a3 ) return (char)v5; *(_WORD *)&v3[strlen(v3)] = 32; v39 = sub_40C190(-368780813); v5 = (const CHAR *)(strlen(v39) + 1); v11 = v39; v12 = &v3[strlen(v3)]; goto LABEL_78; } v40 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v37); v41 = &byte_9A8050; if ( v40 ) v41 = (const char *)(v40 + 21); v5 = (const CHAR *)(strlen(v41) + 1); if ( (unsigned int)v5 < a3 ) { v42 = sub_7549E0("%s ", v41); v43 = v42; v5 = (const CHAR *)(strlen(v42) + 1); qmemcpy(&v3[strlen(v3)], v43, (unsigned int)v5); v3 = a2; v4 = a1; goto LABEL_62; } return (char)v5; } // AC9C84: using guessed type int dword_AC9C84; //----- (00662DA0) -------------------------------------------------------- int __cdecl sub_662DA0(int a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACDA40 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(_DWORD *)sub_7474E0((_DWORD *)(dword_ACDA40 + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA40 + 4), v3); } // ACDA40: using guessed type int dword_ACDA40; //----- (00662E00) -------------------------------------------------------- int __thiscall sub_662E00(int this, int a2) { int result; // eax result = 0; *(_DWORD *)(this + 4) = 0; *(_BYTE *)(this + 20) = 0; *(_BYTE *)(this + 32) = 1; return result; } //----- (00662E10) -------------------------------------------------------- char __thiscall sub_662E10(_BYTE *this) { if ( !this[32] ) return 0; this[32] = 0; return 1; } //----- (00662E20) -------------------------------------------------------- int __thiscall sub_662E20(_DWORD *this, _DWORD *a2) { int result; // eax this[12] = *a2; this[13] = a2[1]; result = a2[2]; this[14] = result; return result; } //----- (00662E40) -------------------------------------------------------- double __thiscall sub_662E40(float *this) { return this[11]; } //----- (00662E50) -------------------------------------------------------- bool __thiscall sub_662E50(_DWORD *this) { return this[1] != 0; } //----- (00662E60) -------------------------------------------------------- char __thiscall sub_662E60(float *this, int a2, int a3, int a4, int a5) { float *v5; // esi _DWORD *v6; // ecx v5 = this; v6 = (_DWORD *)*((_DWORD *)this + 7); if ( !v6 || !sub_65D700(v6, *((_DWORD *)v5 + 16)) || !sub_65D700(*((_DWORD **)v5 + 7), *((_DWORD *)v5 + 15)) ) return 0; if ( !*((_DWORD *)v5 + 1) ) { v5[3] = 0.0; v5[4] = 0.0; *((_DWORD *)v5 + 9) = a3; *((_DWORD *)v5 + 10) = a4; *((_DWORD *)v5 + 11) = a5; *(_BYTE *)v5 = 1; v5[1] = 0.0; *((_BYTE *)v5 + 20) = 0; v5[21] = 0.0; } return 1; } //----- (00662ED0) -------------------------------------------------------- int __thiscall sub_662ED0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { int result; // eax this[15] = a2; this[16] = a3; this[17] = a4; result = a6; this[18] = a5; this[19] = a6; return result; } //----- (00662F00) -------------------------------------------------------- int __thiscall sub_662F00(int this, int a2, int a3) { int result; // eax int v4; // esi char *v5; // eax result = a3; v4 = this; if ( a3 == *(_DWORD *)(this + 24) ) { v5 = sub_6507E0(*(__int16 **)(this + 8)); result = sub_6BAFA0(&dword_AB6520, *(_DWORD **)(v4 + 24), a2, *(_DWORD **)(v4 + 8), v5); } return result; } //----- (00662F80) -------------------------------------------------------- int __thiscall sub_662F80(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int result; // eax v1 = this; *(_BYTE *)this = 0; this[1] = 0; v2 = this[2]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = 0; } *((_BYTE *)v1 + 20) = 0; *((float *)v1 + 3) = 0.0; *((_BYTE *)v1 + 32) = 0; v1[17] = 0; *((float *)v1 + 4) = 0.0; v1[18] = 0; v1[19] = 0; v1[15] = 0; v1[16] = 0; v1[21] = 0; v1[20] = 0; v1[6] = 0; v1[7] = 0; v1[9] = dword_BA45C0; v1[10] = dword_BA45C4; v1[11] = dword_BA45C8; v1[12] = dword_BA45C0; v1[13] = dword_BA45C4; result = dword_BA45C8; v1[14] = dword_BA45C8; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00663020) -------------------------------------------------------- _DWORD *__thiscall sub_663020(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[2] = 0; sub_8D4790(this + 22); sub_662F80(v1); return v1; } //----- (00663080) -------------------------------------------------------- char __thiscall sub_663080(float *this, float a2) { float *v2; // esi int v3; // eax float v4; // ecx float v5; // edx int v7; // [esp+10h] [ebp-Ch] float v8; // [esp+14h] [ebp-8h] float v9; // [esp+18h] [ebp-4h] v2 = this; v3 = *((_DWORD *)this + 12); v4 = this[13]; v5 = v2[14]; v7 = v3; v8 = v4; v9 = v5; if ( !sub_69AD10((float *)byte_ADB468, *(float *)&v3, v4, (int)&v7) || !*((_BYTE *)v2 + 20) || v9 <= (double)a2 ) return 0; v2[11] = v9; return 1; } //----- (006630F0) -------------------------------------------------------- char __thiscall sub_6630F0(_DWORD *this) { int v1; // eax int v2; // edx int v3; // eax int v4; // esi char v5; // bl int v6; // edi int v7; // ecx char result; // al char v9; // dl int v10; // [esp+Ch] [ebp-8h] int v11; // [esp+10h] [ebp-4h] v1 = this[6]; v2 = *(_DWORD *)(v1 + 64); v3 = *(_DWORD *)(v1 + 28); v4 = this[15]; v5 = 0; if ( v4 == v2 ) v5 = 1; v11 = this[16]; if ( v11 == v2 ) v5 = 1; v10 = this[17]; if ( v10 == v2 ) v5 = 1; v6 = this[18]; if ( v6 == v2 ) v5 = 1; v7 = this[19]; if ( v7 != v2 && !v5 ) goto LABEL_25; v9 = 0; if ( v4 == v3 ) v9 = 1; if ( v11 == v3 ) v9 = 1; if ( v10 == v3 ) v9 = 1; if ( v6 == v3 ) v9 = 1; if ( v7 == v3 || v9 ) result = 1; else LABEL_25: result = 0; return result; } //----- (00663170) -------------------------------------------------------- void __thiscall sub_663170(int this, int a2, int a3) { int *v3; // esi char *v4; // edi unsigned __int16 *v5; // eax _DWORD *v6; // eax int v7; // edx v3 = (int *)this; if ( a3 == *(_DWORD *)(this + 24) ) { v4 = sub_6507E0(*(__int16 **)(this + 8)); v5 = (unsigned __int16 *)v3[5]; if ( !v5 || a2 ) { sub_6ABF00(&unk_B91250, v3[6], a2, v3[2], v4, 0); } else { v6 = (_DWORD *)sub_49FBB0(*v5); if ( v6 ) { if ( v6[46] == 4 && (v7 = v3[2], *(_BYTE *)(v7 + 2508)) ) { LOBYTE(v6) = 1; sub_6ABF00(&unk_B91250, v3[6], 0, v7, v4, v6); } else { LOBYTE(v6) = 0; sub_6ABF00(&unk_B91250, v3[6], 0, v3[2], v4, v6); } } } } } //----- (00663240) -------------------------------------------------------- double __userpurge sub_663240@(int a1@, int a2@, int a3) { int v3; // esi double result; // st7 char *v5; // eax char *v6; // eax void **v7; // eax int v8; // ecx int v9; // ecx double v10; // st7 int v11; // ecx int v12; // eax _DWORD *v13; // eax _DWORD *v14; // ecx int v15; // eax int v16; // eax int v17; // ecx int v18; // eax _DWORD *v19; // edi int v20; // ebx int v21; // eax int v22; // ecx bool v23; // zf int v24; // eax float v25; // [esp+24h] [ebp-8h] float v26; // [esp+24h] [ebp-8h] float v27; // [esp+28h] [ebp-4h] v3 = a1; if ( !*(_DWORD *)(a1 + 24) || !*(_DWORD *)(a1 + 28) ) return 0.0; v27 = *(float *)(a1 + 44); if ( !*(_BYTE *)a1 ) { if ( !*(_DWORD *)(a1 + 4) ) goto LABEL_54; goto LABEL_13; } if ( *(_DWORD *)(a1 + 4) ) { LABEL_13: v25 = flt_ACCFCC - *(float *)(a1 + 16); *(float *)(a1 + 12) = v25; if ( *(_BYTE *)(a1 + 20) ) sub_85BED0(*(_DWORD ***)(a1 + 8), v25, 1); v9 = (*(int (__stdcall **)(const char *))(**(_DWORD **)(v3 + 8) + 72))("Jump"); if ( *(float *)(v3 + 12) >= (double)*(float *)(v3 + 100) ) { if ( *(_DWORD *)(v3 + 4) != 3 ) *(float *)(v3 + 44) = *(float *)(v3 + 44) - flt_ACCFD0 * 200.0; v10 = *(float *)(v3 + 44); } else { v10 = *(float *)(v9 + 148) + v27; } v27 = v10; if ( *(_DWORD *)(v3 + 4) != 3 && sub_663080((float *)v3, v27) ) { v11 = *(_DWORD *)(v3 + 28) + 1588; *(_DWORD *)(v3 + 4) = 3; if ( (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v11 + 4))(a2) ) *(_DWORD *)(v3 + 84) = *(_DWORD *)(v3 + 76); else *(_DWORD *)(v3 + 84) = *(_DWORD *)(v3 + 72); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 28) + 328))(*(_DWORD *)(v3 + 84), 0); v27 = *(float *)(v3 + 44); *(_BYTE *)(v3 + 20) = 0; } v12 = *(_DWORD *)(v3 + 4); if ( v12 == 1 ) { if ( *(_DWORD *)(v3 + 24) ) { v13 = (_DWORD *)sub_65D700(*(_DWORD **)(v3 + 28), *(_DWORD *)(v3 + 80)); if ( !v13 ) { LABEL_36: result = -1.0; *(_DWORD *)(v3 + 4) = 0; *(_BYTE *)(v3 + 20) = 0; *(_BYTE *)(v3 + 32) = 1; return result; } v26 = sub_80CE40(v13, (int)"Jump"); if ( !*(_BYTE *)(v3 + 20) && *(float *)(v3 + 12) > (double)v26 ) { *(float *)(v3 + 12) = 0.0; *(float *)(v3 + 16) = flt_ACCFCC; *(_BYTE *)(v3 + 20) = 1; sub_8D4750((_DWORD *)(v3 + 88), *(float *)(v3 + 16)); sub_85BED0(*(_DWORD ***)(v3 + 8), 0.0, 1); } v14 = *(_DWORD **)(v3 + 24); v15 = *(_DWORD *)(v3 + 80); if ( v15 == v14[16] || v14[11] == 3 && v15 == v14[7] ) { v16 = sub_65D700(*(_DWORD **)(v3 + 28), *(_DWORD *)(v3 + 80)); if ( !v16 ) goto LABEL_36; if ( *(float *)(v16 + 48) <= (double)*(float *)(v16 + 52) ) { v17 = *(_DWORD *)(v3 + 28); v18 = *(_DWORD *)(v3 + 68); *(_BYTE *)(v3 + 20) = 1; *(_DWORD *)(v3 + 4) = 2; (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)v17 + 328))(v18, 0, 0); result = v27; *(_BYTE *)v3 = 0; return result; } } } else { MessageBoxA(0, "not Found Ani", "Jump error", 0); } } else if ( v12 == 3 ) { v19 = *(_DWORD **)(v3 + 24); if ( v19 ) { v20 = *(_DWORD *)(v3 + 84); if ( v20 == v19[16] || !sub_6630F0((_DWORD *)v3) || v19[11] == 3 && v20 == v19[7] ) { v21 = sub_65D700(*(_DWORD **)(v3 + 28), v20); if ( !v21 || *(float *)(v21 + 48) <= (double)*(float *)(v21 + 52) || !sub_6630F0((_DWORD *)v3) ) { v22 = *(_DWORD *)(v3 + 28) + 1588; *(_DWORD *)(v3 + 4) = 0; *(_BYTE *)(v3 + 20) = 0; *(_BYTE *)(v3 + 32) = 1; v23 = (*(unsigned __int8 (**)(void))(*(_DWORD *)v22 + 4))() == 0; v24 = **(_DWORD **)(v3 + 28); if ( v23 ) (*(void (**)(void))(v24 + 340))(); else (*(void (**)(void))(v24 + 368))(); result = v27; *(_BYTE *)v3 = 0; return result; } } } else { MessageBoxA(0, "not Found Ani", "Jump error", 0); } } LABEL_54: result = v27; *(_BYTE *)v3 = 0; return result; } if ( !*(_DWORD *)(a1 + 8) ) { v5 = sub_421950(); v6 = (char *)sub_401410(v5, "jump.nif"); v7 = sub_8D03E0(v6, 0); sub_56FF80((_DWORD *)(v3 + 8), (int)v7); sub_8D4A70((_DWORD *)(v3 + 88), *(_DWORD **)(v3 + 8)); } *(float *)(v3 + 12) = 0.0; sub_85BED0(*(_DWORD ***)(v3 + 8), 0.0, 1); v8 = *(_DWORD *)(v3 + 28); *(float *)(v3 + 16) = flt_ACCFCC; *(_DWORD *)(v3 + 4) = 1; if ( (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)(v8 + 1588) + 4))(a2) ) *(_DWORD *)(v3 + 80) = *(_DWORD *)(v3 + 64); else *(_DWORD *)(v3 + 80) = *(_DWORD *)(v3 + 60); (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 28) + 328))(*(_DWORD *)(v3 + 80), 0); result = v27; *(_BYTE *)v3 = 0; return result; } // 663240: could not find valid save-restore pair for edi // ACCFCC: using guessed type float flt_ACCFCC; // ACCFD0: using guessed type float flt_ACCFD0; //----- (006639E0) -------------------------------------------------------- int __stdcall sub_6639E0(int a1) { int result; // eax int v2; // ebx int v3; // esi int v4; // edi const char *v5; // ecx const char *v6; // esi unsigned __int16 v7; // ax unsigned int v8; // [esp+0h] [ebp-4h] result = a1; if ( a1 ) { v2 = *(_DWORD *)(a1 + 32); if ( v2 && (v3 = 0, *(_DWORD *)(v2 + 12)) ) { while ( 1 ) { v4 = *(_DWORD *)(v2 + 16); v5 = *(const char **)(v4 + 8 * v3 + 4); v8 = *(_DWORD *)(v2 + 12); if ( v5 ) { if ( strlen(v5) == 7 && !strncmp("SE", v5, 2u) ) break; } if ( ++v3 >= v8 ) goto LABEL_8; } v6 = *(const char **)(v4 + 8 * v3 + 4); if ( v6 && strlen(v6) == 7 ) { v7 = atoi(v6 + 2); result = sub_4DCEA0(v7); } else { result = sub_4DCEA0(0); } } else { LABEL_8: result = 0; } } return result; } //----- (00663AB0) -------------------------------------------------------- void __thiscall sub_663AB0(float *this, _DWORD *a2, float *a3) { float *v3; // esi double v4; // st7 int v5; // eax int *v6; // eax int v7; // edi unsigned __int16 *v8; // eax int v9; // ebx int v10; // edx unsigned __int8 (__stdcall *v11)(_DWORD); // eax int v12; // eax bool v13; // zf int *v14; // eax int v15; // eax int v16; // edx _DWORD *v17; // ecx _DWORD *v18; // ecx _DWORD *v19; // ST10_4 float v20; // ST0C_4 int v21; // ST08_4 int *v22; // eax char v23; // [esp+28h] [ebp-14h] float v24; // [esp+2Ch] [ebp-10h] int v25; // [esp+30h] [ebp-Ch] float v26; // [esp+34h] [ebp-8h] float v27; // [esp+38h] [ebp-4h] v3 = this; v26 = 0.0; sub_67AF30((_DWORD *)this + 8, (int **)&v25, &v26); if ( a3[15] >= 0.0 ) { v4 = a3[15]; v26 = (a3[12] - a3[11]) / a3[10]; if ( v26 > v4 && v3[26] <= (double)flt_ACCFCC ) { v5 = *(_DWORD *)(v25 + 16); v27 = a3[15]; v6 = *(int **)(v5 + 4); v7 = *v6; v26 = *(float *)&v7; if ( (int *)v7 != v6 ) { do { if ( *(float *)(v7 + 12) > (double)v27 ) { sub_717D90(&v26); v7 = LODWORD(v26); } else { v8 = (unsigned __int16 *)*((_DWORD *)v3 + 5); v9 = *(_DWORD *)(v7 + 16); if ( v8 ) { v10 = *(_DWORD *)dword_ACE8D0; LODWORD(v26) = *v8; v11 = *(unsigned __int8 (__stdcall **)(_DWORD))(v10 + 16); v24 = *(float *)&dword_ACE8D0; if ( v11(LODWORD(v26)) ) { if ( LOWORD(v26) <= *(_WORD *)(LODWORD(v24) + 200) ) { v12 = *(_DWORD *)(LODWORD(v24) + 196); v13 = *(_DWORD *)(v12 + 4 * LOWORD(v26)) == 0; v14 = (int *)(v12 + 4 * LOWORD(v26)); if ( !v13 ) { v15 = *v14; if ( v15 ) { LOBYTE(v15) = *(_DWORD *)(v15 + 184) == 4 && *(_BYTE *)(*((_DWORD *)v3 + 2) + 2508); v16 = **((unsigned __int16 **)v3 + 5); v17 = (_DWORD *)*((_DWORD *)v3 + 2); v24 = v27 - *(float *)(v7 + 12); sub_6AB760(&unk_B91250, v9, *((_DWORD *)v3 + 7), v24, v17, a2, v15, v16, (int)a3); } } } } } else { v18 = (_DWORD *)*((_DWORD *)v3 + 2); v24 = v27 - *(float *)(v7 + 12); v19 = v18; v20 = v24; v21 = sub_65B8B0(v18, 0, 0, 0); sub_6AB760(&unk_B91250, v9, v21, v20, v19, a2, 0, 0xFFFF, 0); } sub_6BAF40(&dword_AB6520, v9, *((_DWORD *)v3 + 2), (int)a2); v22 = sub_6CDBF0(*(_DWORD **)(v25 + 16), (int *)&v23, v7); v7 = *v22; v26 = *(float *)v22; } } while ( v7 != *(_DWORD *)(*(_DWORD *)(v25 + 16) + 4) ); } } } } // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (00663C70) -------------------------------------------------------- int __thiscall sub_663C70(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi _DWORD *v4; // ecx int *v5; // edx int v6; // esi int v8; // [esp+4h] [ebp-4h] v3 = this; sub_67AF30(this + 8, (int **)&v8, &a2); if ( v8 == v3[9] ) return 0; v4 = *(_DWORD **)(v8 + 16); if ( !v4[2] ) return 0; v5 = (int *)v4[1]; v6 = *(_DWORD *)(*v5 + 16); if ( a3 == 1 ) sub_6CDBF0(v4, (int *)&a3, *v5); return v6; } //----- (00663CD0) -------------------------------------------------------- int *__thiscall sub_663CD0(_DWORD *this) { _DWORD *v1; // edi int *result; // eax int *v3; // esi int v4; // eax char v5; // [esp+8h] [ebp-4h] v1 = this; result = (int *)this[9]; v3 = (int *)*result; if ( (int *)*result != result ) { do { result = sub_6CDE90((_DWORD *)v3[4], (int *)&v5, **(_DWORD ***)(v3[4] + 4), *(_DWORD **)(v3[4] + 4)); if ( !*((_BYTE *)v3 + 21) ) { v4 = v3[2]; if ( *(_BYTE *)(v4 + 21) ) { for ( result = (int *)v3[1]; !*((_BYTE *)result + 21); result = (int *)result[1] ) { if ( v3 != (int *)result[2] ) break; v3 = result; } v3 = result; } else { v3 = (int *)v3[2]; for ( result = *(int **)v4; !*((_BYTE *)result + 21); result = (int *)*result ) v3 = result; } } } while ( v3 != (int *)v1[9] ); } return result; } //----- (00663D50) -------------------------------------------------------- void __thiscall sub_663D50(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ecx int **v5; // eax int *j; // eax int i; // eax _DWORD *v8; // ST08_4 _DWORD *v9; // ST04_4 _DWORD *v10; // ST08_4 _DWORD *v11; // ST04_4 _DWORD *v12; // ST08_4 _DWORD *v13; // ST04_4 _DWORD *v14; // [esp+10h] [ebp-18h] _DWORD *v15; // [esp+14h] [ebp-14h] _DWORD *v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v1 = this; v16 = this; *this = &ActionMgr::`vftable'; v17 = 3; sub_663CD0(this); v2 = (_DWORD *)v1[9]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { v4 = (int)v3; if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } sub_6CDBF0(v1 + 8, (int *)&v15, v4); } while ( v3 != (_DWORD *)v1[9] ); } v15 = v1 + 16; v8 = (_DWORD *)v1[17]; v9 = *(_DWORD **)v1[17]; LOBYTE(v17) = 4; sub_6CDE90(v1 + 16, (int *)&v14, v9, v8); operator delete((void *)v1[17]); v14 = v1 + 12; v10 = (_DWORD *)v1[13]; v11 = *(_DWORD **)v1[13]; LOBYTE(v17) = 5; sub_6CDE90(v1 + 12, (int *)&v15, v11, v10); operator delete((void *)v1[13]); v14 = v1 + 8; v12 = (_DWORD *)v1[9]; v13 = *(_DWORD **)v1[9]; LOBYTE(v17) = 6; sub_6CDE90(v1 + 8, (int *)&v15, v13, v12); operator delete((void *)v1[9]); v17 = -1; sub_64CAF0(v1); } // 9F387C: using guessed type void *ActionMgr::`vftable'; //----- (00663E90) -------------------------------------------------------- char __thiscall sub_663E90(_DWORD *this, char a2, int a3) { _DWORD *v3; // esi int v4; // ebx float *v6; // edi int v7; // edx unsigned __int16 v8; // ax int v9; // eax _DWORD *v10; // esi _DWORD *v11; // eax char v12[4]; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] v3 = this; sub_67AF30(this + 8, (int **)&v13, &a2); v4 = v13; if ( v13 == v3[9] ) return 0; v6 = (float *)a3; v7 = *(_DWORD *)(a3 + 4); if ( v7 ) { if ( strlen(*(const char **)(a3 + 4)) == 7 ) v8 = atoi((const char *)(v7 + 2)); else v8 = 0; } else { v8 = 0; } v9 = sub_4DCEA0(v8); if ( !v9 ) return 0; v10 = *(_DWORD **)(v4 + 16); *(float *)v12 = *v6; v13 = v9; v11 = sub_6A9330(v10, v12); sub_65B3F0(v10, (int)v12, v11, 0); return 1; } //----- (00663F40) -------------------------------------------------------- _DWORD *__thiscall sub_663F40(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax void **v8; // [esp+10h] [ebp-34h] void **v9; // [esp+1Ch] [ebp-28h] _DWORD *v10; // [esp+28h] [ebp-1Ch] char v11[4]; // [esp+2Ch] [ebp-18h] char *v12; // [esp+30h] [ebp-14h] char *v13; // [esp+34h] [ebp-10h] int v14; // [esp+40h] [ebp-4h] v1 = this; v10 = this; sub_64CC00(this); *v1 = &ActionMgr::`vftable'; v14 = 0; v1[10] = 0; v2 = operator new(0x18u); if ( !v2 ) { v13 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v13); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[9] = v2; *v2 = v2; *(_DWORD *)(v1[9] + 4) = v1[9]; *(_DWORD *)(v1[9] + 8) = v1[9]; *(_BYTE *)(v1[9] + 20) = 1; *(_BYTE *)(v1[9] + 21) = 1; LOBYTE(v14) = 1; v1[14] = 0; v3 = operator new(0x18u); if ( !v3 ) { v12 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v12); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[13] = v3; *v3 = v3; *(_DWORD *)(v1[13] + 4) = v1[13]; *(_DWORD *)(v1[13] + 8) = v1[13]; *(_BYTE *)(v1[13] + 20) = 1; *(_BYTE *)(v1[13] + 21) = 1; LOBYTE(v14) = 2; v1[18] = 0; v4 = operator new(0x18u); if ( !v4 ) { v13 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v13); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[17] = v4; *v4 = v4; *(_DWORD *)(v1[17] + 4) = v1[17]; *(_DWORD *)(v1[17] + 8) = v1[17]; *(_BYTE *)(v1[17] + 20) = 1; *(_BYTE *)(v1[17] + 21) = 1; *((float *)v1 + 23) = 0.0; v1[4] = 0; *((float *)v1 + 24) = 0.0; v1[2] = 0; v1[3] = 0; v1[5] = 0; v1[7] = 0; v1[22] = 0; v1[25] = 0; *((_BYTE *)v1 + 108) = 0; v1[6] = 0; LOBYTE(v14) = 3; nullsub_22(0, 0); *((_WORD *)v1 + 40) = 0; *((_BYTE *)v1 + 82) = 0; *(_WORD *)((char *)v1 + 83) = 0; *((float *)v1 + 26) = 0.0; sub_668390(v1 + 8); sub_668390(v1 + 12); sub_668390(v1 + 16); *(_DWORD *)v11 = 0; v12 = (char *)(v1 + 12); v5 = sub_5E8850(v1 + 8, v11); sub_4B1DF0(v1 + 8, (int)v11, v5, 0); *(_DWORD *)v11 = 1; v12 = (char *)(v1 + 16); v6 = sub_5E8850(v1 + 8, v11); sub_4B1DF0(v1 + 8, (int)v11, v6, 0); return v1; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F387C: using guessed type void *ActionMgr::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00664160) -------------------------------------------------------- void __thiscall sub_664160(_DWORD *this, char a2) { _DWORD *v2; // ebx _DWORD *v3; // ecx int v4; // eax const CHAR *v5; // eax int v6; // esi int v7; // esi unsigned int v8; // ecx int v9; // esi const char *v10; // ecx unsigned int v11; // [esp+4h] [ebp-8h] int v12; // [esp+8h] [ebp-4h] unsigned int v13; // [esp+14h] [ebp+8h] v2 = this; v3 = (_DWORD *)this[2]; if ( !v3 ) { OutputDebugStringA("Char setting error return\n"); return; } v4 = v2[3]; if ( !v4 ) { OutputDebugStringA("Char setting error NO ACTOR return\n"); v5 = (const CHAR *)(*(int (**)(void))(*(_DWORD *)v2[2] + 84))(); OutputDebugStringA(v5); return; } if ( *((_BYTE *)v2 + 108) ) { if ( !sub_8C4C90((_DWORD *)(v4 + 120), v2[7], &v12) ) return; v6 = v12; } else { v6 = sub_6506C0(v3); } if ( v6 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[2] + 248))() == 1 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[2] + 500))() == 1 && !a2 ) { OutputDebugStringA("if you use skill, this works is cancel\n"); return; } sub_663CD0(v2); v7 = *(_DWORD *)(v6 + 32); v12 = v7; if ( v7 ) { v8 = 0; v13 = 0; if ( *(_DWORD *)(v7 + 12) ) { while ( 1 ) { v11 = *(_DWORD *)(v7 + 12); v9 = *(_DWORD *)(v7 + 16) + 8 * v8; v10 = *(const char **)(v9 + 4); if ( v10 && strlen(*(const char **)(v9 + 4)) == 7 ) { if ( !strncmp("AE", v10, 2u) ) goto LABEL_28; if ( !strncmp("SE", *(const char **)(v9 + 4), 2u) ) { sub_663E90(v2, 1, v9); goto LABEL_25; } if ( !strncmp("DE", *(const char **)(v9 + 4), 2u) ) LABEL_28: sub_663E90(v2, 0, v9); } LABEL_25: v8 = v13 + 1; v13 = v8; if ( v8 >= v11 ) return; v7 = v12; } } } } } //----- (006642E0) -------------------------------------------------------- void __thiscall sub_6642E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // ebx int v5; // ebx int v6; // eax int v7; // edi int v8; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)this[2]; if ( v3 ) { v4 = this[3]; if ( v4 ) { v9 = 0; sub_67AF30(this + 8, (int **)&v8, &v9); if ( *((_BYTE *)v2 + 108) ) { if ( !sub_8C4C90((_DWORD *)(v4 + 120), v2[7], &v9) ) return; v5 = v9; } else { v5 = sub_6506C0(v3); v6 = sub_65B8B0((_DWORD *)v2[2], 0, 0, 0); v7 = sub_65D700((_DWORD *)v2[2], v6); if ( v7 && (*(int (**)(void))(*(_DWORD *)v2[2] + 440))() != 4 && v5 != v7 ) { v5 = v7; *(float *)(v7 + 44) = 0.0; } } if ( v5 && v8 != v2[9] ) { if ( !*(_DWORD *)(v5 + 36) && *(float *)(v5 + 60) < 0.0099999998 && !*(_DWORD *)(*(_DWORD *)(v8 + 16) + 8) ) sub_664160(v2, 1); sub_663AB0((float *)v2, a2, (float *)v5); } } } } //----- (006643D0) -------------------------------------------------------- void __thiscall sub_6643D0(float *this, float a2) { float *v2; // esi int v3; // ecx v2 = this; v3 = *((_DWORD *)this + 2); v2[23] = a2; v2[24] = 0.0; if ( v3 ) { (*(void (**)(void))(*(_DWORD *)v3 + 620))(); sub_664160(v2, 0); } } //----- (00664400) -------------------------------------------------------- int __thiscall sub_664400(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 21) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (00664460) -------------------------------------------------------- void *__thiscall sub_664460(void *this, char a2) { void *v2; // esi v2 = this; sub_663D50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00664570) -------------------------------------------------------- int ***__thiscall sub_664570(_DWORD *this, float a2) { int ***result; // eax int **i; // esi int (__stdcall *v4)(_DWORD); // eax result = (int ***)this[15]; for ( i = *result; i; result = (int ***)v4(LODWORD(a2)) ) { v4 = *(int (__stdcall **)(_DWORD))(*i[2] + 564); i = (int **)*i; } return result; } //----- (006645B0) -------------------------------------------------------- int __thiscall sub_6645B0(_DWORD *this, const char *a2) { _DWORD *v3; // edi int v4; // ebx if ( !a2 ) return 0; v3 = (_DWORD *)this[15]; if ( !v3 ) return 0; while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( !strcmp((const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 84))(v4), a2) ) break; if ( !v3 ) return 0; } return v4; } //----- (00664630) -------------------------------------------------------- int __thiscall sub_664630(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // edi int v7; // ebx int v9; // [esp+Ch] [ebp-1Ch] int v10; // [esp+10h] [ebp-18h] int v11; // [esp+14h] [ebp-14h] int v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] char v14; // [esp+20h] [ebp-8h] v9 = a2; v6 = (_DWORD *)this[15]; v10 = a3; v11 = a4; v12 = a5; v13 = a6; v14 = 0; if ( !v6 ) return 0; while ( 1 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( !strcmp((const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 84))(v7), (const char *)&v9) ) break; if ( !v6 ) return 0; } return v7; } //----- (006646E0) -------------------------------------------------------- int __thiscall sub_6646E0(_DWORD *this, int a2) { _DWORD *v2; // ecx int result; // eax if ( !a2 ) return 0; v2 = (_DWORD *)this[15]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( a2 == result ) break; if ( !v2 ) return 0; } return result; } //----- (00664710) -------------------------------------------------------- signed __int16 __thiscall sub_664710(_DWORD *this, __int16 a2) { _DWORD *v2; // esi _WORD *v3; // edi v2 = (_DWORD *)this[15]; if ( !v2 ) return -1; while ( 1 ) { v3 = (_WORD *)v2[2]; v2 = (_DWORD *)*v2; if ( (*(unsigned __int8 (__thiscall **)(_WORD *))(*(_DWORD *)v3 + 32))(v3) ) { if ( v3[471] == a2 ) break; } if ( !v2 ) return -1; } return v3[274]; } //----- (00664760) -------------------------------------------------------- void __thiscall sub_664760(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = (_DWORD *)this[15]; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_BYTE *)(v3 + 2680) ) { if ( v3 != -776 ) sub_6759D0(v3 + 776, a2); } } } //----- (006647A0) -------------------------------------------------------- char __thiscall sub_6647A0(_DWORD *this, char a2) { _DWORD *v2; // esi int *v3; // eax int v4; // eax _DWORD *v5; // esi _DWORD *v6; // ebx int v7; // eax const char *v8; // edi char v9; // al int *v10; // eax int *v11; // eax int v13; // [esp-Ch] [ebp-10h] v2 = this; v3 = sub_661CD0(); LOBYTE(v4) = sub_661930(v3, a2); v5 = (_DWORD *)v2[15]; while ( v5 ) { v6 = (_DWORD *)v5[2]; v5 = (_DWORD *)*v5; if ( sub_650B20(v6) ) { v4 = sub_650CF0(v6); if ( *(_DWORD *)(v4 + 99) == 10 ) continue; v4 = sub_650CF0(v6); if ( *(_DWORD *)(v4 + 99) == 9 ) continue; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v6 + 32))(v6) ) { v7 = sub_650CF0(v6); if ( v7 ) { v8 = (const char *)(v7 + 2); v4 = strcmp((const char *)(v7 + 2), "KQ_Gate5"); if ( !v4 ) continue; v4 = strcmp(v8, "Barrier01"); if ( !v4 ) continue; v4 = strcmp(v8, "Barrier02"); if ( !v4 ) continue; } } v9 = (*(int (__thiscall **)(_DWORD *))(*v6 + 516))(v6); v13 = v6[175]; if ( v9 ) { v11 = sub_661CD0(); LOBYTE(v4) = sub_661D40((int)v11, v13); } else { v10 = sub_661CD0(); LOBYTE(v4) = sub_6615F0((char *)v10, v13); } } return v4; } //----- (006648F0) -------------------------------------------------------- _BYTE *__thiscall sub_6648F0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // edi _BYTE *v7; // ebx int v9; // [esp+Ch] [ebp-1Ch] int v10; // [esp+10h] [ebp-18h] int v11; // [esp+14h] [ebp-14h] int v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] char v14; // [esp+20h] [ebp-8h] v9 = a2; v6 = (_DWORD *)this[15]; v10 = a3; v11 = a4; v12 = a5; v13 = a6; v14 = 0; if ( !v6 ) return 0; while ( 1 ) { v7 = (_BYTE *)v6[2]; v6 = (_DWORD *)*v6; if ( !strcmp((const char *)(*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v7 + 84))(v7), (const char *)&v9) ) { if ( v7[2680] ) break; } if ( !v6 ) return 0; } return v7; } //----- (006649B0) -------------------------------------------------------- _BYTE *__thiscall sub_6649B0(_DWORD *this, const char *a2) { _DWORD *v3; // edi _BYTE *v4; // ebx if ( !a2 ) return 0; v3 = (_DWORD *)this[15]; if ( !v3 ) return 0; while ( 1 ) { v4 = (_BYTE *)v3[2]; v3 = (_DWORD *)*v3; if ( !strcmp((const char *)(*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 84))(v4), a2) ) { if ( v4[2680] ) break; } if ( !v3 ) return 0; } return v4; } //----- (00664A30) -------------------------------------------------------- char __thiscall sub_664A30(_DWORD *this, int a2) { _DWORD *v2; // edx _DWORD *v3; // eax int v4; // ecx v2 = (_DWORD *)this[26]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { while ( 1 ) { v4 = v3[2]; if ( *(_WORD *)(v4 + 942) == *(_WORD *)a2 ) break; v3 = (_DWORD *)*v3; if ( v3 == v2 ) return (char)v3; } LOBYTE(v3) = sub_651C20(v4, *(_DWORD *)(a2 + 2), *(_BYTE *)(a2 + 6)); } return (char)v3; } //----- (00664A70) -------------------------------------------------------- int __thiscall sub_664A70(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; if ( a2 && (sub_4DD710(this + 29, (int **)&v4, &a2), v4 != v2[30]) ) result = *(_DWORD *)(v4 + 16); else result = 0; return result; } //----- (00664AB0) -------------------------------------------------------- char *__thiscall sub_664AB0(_DWORD *this, __int16 a2) { __int16 v2; // di _DWORD *v3; // esi char *result; // eax _DWORD *v5; // ecx int v6; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 == -1 ) goto LABEL_8; sub_4A3E20(this + 33, (int **)&v6, &a2); if ( v6 != v3[34] ) return *(char **)(v6 + 16); result = dword_AD8EBC; if ( *((_WORD *)dword_AD8EBC + 274) != v2 ) { v5 = (_DWORD *)v3[15]; while ( v5 ) { result = (char *)v5[2]; v5 = (_DWORD *)*v5; if ( *((_WORD *)result + 274) == v2 ) return result; } LABEL_8: result = 0; } return result; } //----- (00664B30) -------------------------------------------------------- char __thiscall sub_664B30(_BYTE *this) { _DWORD *v1; // edi _DWORD *v2; // eax char *v3; // eax int (__thiscall *v4)(_DWORD *); // edx char *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // ecx int v8; // edx _DWORD *v9; // eax __int16 v10; // dx _DWORD *v11; // eax char v13[4]; // [esp+10h] [ebp-14h] void *v14; // [esp+14h] [ebp-10h] int v15; // [esp+20h] [ebp-4h] v1 = this; this[72] = 0; v2 = operator new(0x1568u); v14 = v2; v15 = 0; if ( v2 ) v3 = (char *)sub_67B7A0(v2); else v3 = 0; dword_AD8EBC = v3; v3[2509] = 1; v4 = *(int (__thiscall **)(_DWORD *))(v1[14] + 4); v5 = dword_AD8EBC; v15 = -1; v6 = (_DWORD *)v4(v1 + 14); v6[2] = v5; *v6 = 0; v6[1] = v1[16]; v7 = (_DWORD *)v1[16]; if ( v7 ) *v7 = v6; else v1[15] = v6; ++v1[17]; v1[16] = v6; v8 = *((_DWORD *)dword_AD8EBC + 175); v14 = dword_AD8EBC; *(_DWORD *)v13 = v8; v9 = sub_5E8850(v1 + 29, v13); sub_62DDE0(v1 + 29, (int)v13, v9, 0); v10 = *((_WORD *)dword_AD8EBC + 274); v14 = dword_AD8EBC; *(_WORD *)v13 = v10; v11 = sub_67FF90(v1 + 33, v13); sub_6E19E0(v1 + 33, (int)v13, v11, 0); return 1; } //----- (00664C40) -------------------------------------------------------- _WORD *__thiscall sub_664C40(_DWORD *this, char a2, char a3, int a4, int a5, unsigned int a6) { unsigned int v6; // edi int v7; // esi signed __int64 v8; // rax signed int v9; // ecx char v10; // al __int16 v11; // cx __int16 v12; // dx __int16 v13; // ax char v14; // al _DWORD *v15; // eax _WORD *v16; // esi unsigned __int8 (__thiscall *v17)(_WORD *, __int16 *); // edx bool v18; // zf int v19; // eax _WORD *result; // eax _DWORD *v21; // eax _DWORD *v22; // ecx _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // [esp+18h] [ebp-114h] char v26[4]; // [esp+1Ch] [ebp-110h] void *v27; // [esp+20h] [ebp-10Ch] __int16 v28; // [esp+24h] [ebp-108h] char v29[4]; // [esp+26h] [ebp-106h] int v30; // [esp+2Ah] [ebp-102h] int v31; // [esp+2Eh] [ebp-FEh] int v32; // [esp+32h] [ebp-FAh] int v33; // [esp+36h] [ebp-F6h] char v34; // [esp+43h] [ebp-E9h] char v35; // [esp+44h] [ebp-E8h] char v36; // [esp+45h] [ebp-E7h] char v37; // [esp+46h] [ebp-E6h] __int16 v38; // [esp+47h] [ebp-E5h] __int16 v39; // [esp+4Bh] [ebp-E1h] int v40; // [esp+4Dh] [ebp-DFh] int v41; // [esp+51h] [ebp-DBh] int v42; // [esp+55h] [ebp-D7h] int v43; // [esp+59h] [ebp-D3h] __int16 v44; // [esp+5Dh] [ebp-CFh] __int16 v45; // [esp+5Fh] [ebp-CDh] int v46; // [esp+61h] [ebp-CBh] int v47; // [esp+65h] [ebp-C7h] int v48; // [esp+69h] [ebp-C3h] __int16 v49; // [esp+6Dh] [ebp-BFh] __int16 v50; // [esp+6Fh] [ebp-BDh] char v51; // [esp+72h] [ebp-BAh] char v52; // [esp+73h] [ebp-B9h] int v53; // [esp+128h] [ebp-4h] v25 = this; v33 = 0; v32 = 0; v31 = 0; v30 = 0; *(_DWORD *)v29 = 0; strncpy(v29, byte_9F38A6, 0x14u); v35 = a2; v40 = -1; v41 = -1; v42 = -1; v43 = -1; v44 = -1; v39 = -1; v49 = -1; v46 = -1; v47 = -1; v48 = -1; v45 = -1; v50 = -1; v6 = 0; if ( sub_548A40() ) { do { v7 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v6); v8 = sub_6622F0(*(_DWORD *)(v7 + 207)); v27 = (void *)HIDWORD(v8); v9 = 1; while ( !((1 << v9) & (unsigned int)v8) ) { if ( ++v9 >= 28 ) { LOBYTE(v9) = 0; break; } } switch ( (unsigned __int8)v9 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v10 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v10 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v10 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v10 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v10 = 21; break; case 0x1Au: case 0x1Bu: v10 = 26; break; default: v10 = 0; break; } if ( v35 == v10 ) { if ( *(_DWORD *)(v7 + 127) < a6 ) goto LABEL_25; switch ( *(_DWORD *)(v7 + 110) ) { case 7: v13 = *(_WORD *)v7; v51 &= 0xF0u; HIWORD(v40) = v13; break; case 0x13: v12 = *(_WORD *)v7; v51 &= 0xFu; HIWORD(v41) = v12; break; case 0x15: v11 = *(_WORD *)v7; v52 &= 0xF0u; LOWORD(v42) = v11; break; } } if ( HIWORD(v40) != -1 && HIWORD(v41) != -1 && (_WORD)v42 != -1 ) break; LABEL_25: ++v6; } while ( v6 < sub_548A40() ); } v28 = rand(); v34 = 1; v36 = (a3 << 7) | ((v36 ^ 4 * a2) & 0x7C ^ v36) & 0x7F; v38 = 0; v37 = 0; v14 = sub_662140(a2); v36 ^= (v14 ^ v36) & 3; v15 = operator new(0xB8Cu); v27 = v15; v53 = 0; if ( v15 ) v16 = (_WORD *)sub_658E20(v15); else v16 = 0; v17 = *(unsigned __int8 (__thiscall **)(_WORD *, __int16 *))(*(_DWORD *)v16 + 556); v53 = -1; v18 = v17(v16, &v28) == 0; v19 = *(_DWORD *)v16; if ( v18 ) { (*(void (__thiscall **)(_WORD *, signed int))(v19 + 28))(v16, 1); result = 0; } else { (*(void (__thiscall **)(_WORD *, int, int))(v19 + 184))(v16, a4, a5); v21 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v25[14] + 4))(v25 + 14); v21[2] = v16; *v21 = 0; v21[1] = v25[16]; v22 = (_DWORD *)v25[16]; if ( v22 ) *v22 = v21; else v25[15] = v21; ++v25[17]; v25[16] = v21; *(_DWORD *)v26 = *((_DWORD *)v16 + 175); v27 = v16; v23 = sub_5E8850(v25 + 29, v26); sub_62DDE0(v25 + 29, (int)v26, v23, 0); *(_WORD *)v26 = v16[274]; v27 = v16; v24 = sub_67FF90(v25 + 33, v26); sub_6E19E0(v25 + 33, (int)v26, v24, 0); sub_69E480(byte_ADB468, (char)v16); result = v16; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00665040) -------------------------------------------------------- int **__thiscall sub_665040(_DWORD *this, int a2, int **a3, int a4, unsigned __int8 a5, int a6, int a7) { _DWORD *v7; // edi int **v8; // ebx int **v9; // esi int **v10; // eax char v11; // al int *v12; // edx int *v14; // ebx unsigned __int8 v15; // al _DWORD *v16; // eax _DWORD *v17; // eax char v18[4]; // [esp+10h] [ebp-18h] int **v19; // [esp+14h] [ebp-14h] int **v20; // [esp+18h] [ebp-10h] int v21; // [esp+24h] [ebp-4h] v7 = this; v8 = a3; v9 = (int **)sub_664AB0(this, (__int16)a3); if ( !v9 ) { v10 = (int **)operator new(0xBB8u); a3 = v10; if ( v10 ) v9 = (int **)sub_744E50(v10); v21 = -1; v20 = v9; if ( !v9 ) return 0; v11 = ((int (__thiscall *)(int **, int, int **, int))(*v9)[167])(v9, a2, v8, a4); v12 = *v9; if ( !v11 ) { ((void (__thiscall *)(int **, signed int))v12[7])(v9, 1); return 0; } if ( !((unsigned __int8 (__thiscall *)(int **, signed int, _DWORD))v12[150])(v9, 1, 0) ) { ((void (__thiscall *)(int **, signed int))(*v9)[7])(v9, 1); return 0; } sub_744BC0(v9, 1, (int)v9, a5); v14 = *v9; v15 = ((int (__thiscall *)(int **))(*v9)[8])(v9); ((void (__thiscall *)(int **, _DWORD))v14[84])(v9, v15); a3 = v9; sub_6B9900(v7 + 14, &a3); *(_DWORD *)v18 = v9[175]; v19 = v9; v16 = sub_5E8850(v7 + 29, v18); sub_62DDE0(v7 + 29, (int)v18, v16, 0); *(_WORD *)v18 = *((_WORD *)v9 + 274); v19 = v9; v17 = sub_67FF90(v7 + 33, v18); sub_6E19E0(v7 + 33, (int)v18, v17, 0); sub_69E480(byte_ADB468, (char)v9); v9 = v20; } ((void (__thiscall *)(int **, int, int))(*v9)[46])(v9, a6, a7); ((void (*)(void))(*v9)[85])(); return v9; } //----- (006651F0) -------------------------------------------------------- int **__thiscall sub_6651F0(_DWORD *this, unsigned __int16 *a2) { _DWORD *v2; // edi float v3; // ST10_4 float v4; // ST0C_4 int v5; // eax int **result; // eax int v7; // [esp+14h] [ebp-50h] int v8; // [esp+20h] [ebp-44h] int v9; // [esp+24h] [ebp-40h] int v10; // [esp+28h] [ebp-3Ch] int v11; // [esp+2Ch] [ebp-38h] int v12; // [esp+30h] [ebp-34h] int v13; // [esp+34h] [ebp-30h] float v14; // [esp+38h] [ebp-2Ch] char v15; // [esp+3Ch] [ebp-28h] v2 = this; v3 = (double)*(unsigned int *)(a2 + 7); v4 = (double)*(unsigned int *)(a2 + 5); sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v7); LODWORD(v14) = *((unsigned __int8 *)a2 + 18); v14 = (flt_BA45B4 + flt_BA45B4) * (double)SLODWORD(v14) / 180.0; sub_85D810((float *)&v15, v14); sub_85DA90((float *)&v15, (float *)&v8, (float *)&dword_AB4FE8); v12 = v9; v5 = *(_DWORD *)(a2 + 1); v11 = v8; v13 = v10; if ( v5 == 0xFFFF ) result = 0; else result = sub_665040(v2, v5, (int **)*a2, *(_DWORD *)(a2 + 3), *((_BYTE *)a2 + 128), (int)&v7, (int)&v11); return result; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (006652E0) -------------------------------------------------------- char __thiscall sub_6652E0(_DWORD *this, _BYTE *a2) { unsigned int v2; // edi bool v3; // zf int v4; // esi float v5; // ST10_4 float v6; // ST0C_4 int v7; // eax int v9; // [esp+18h] [ebp-54h] int v10; // [esp+24h] [ebp-48h] int v11; // [esp+28h] [ebp-44h] int v12; // [esp+2Ch] [ebp-40h] int v13; // [esp+30h] [ebp-3Ch] int v14; // [esp+34h] [ebp-38h] int v15; // [esp+38h] [ebp-34h] _DWORD *v16; // [esp+3Ch] [ebp-30h] float v17; // [esp+40h] [ebp-2Ch] char v18; // [esp+44h] [ebp-28h] v2 = 0; v3 = *a2 == 0; v16 = this; if ( v3 ) return 1; v4 = (int)(a2 + 11); while ( 1 ) { v5 = (double)*(unsigned int *)(v4 + 4); v6 = (double)*(unsigned int *)v4; sub_69AD10((float *)byte_ADB468, v6, v5, (int)&v9); LODWORD(v17) = *(unsigned __int8 *)(v4 + 8); v17 = (double)SLODWORD(v17) * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D810((float *)&v18, v17); sub_85DA90((float *)&v18, (float *)&v13, (float *)&dword_AB4FE8); v11 = v14; v7 = *(_DWORD *)(v4 - 8); v10 = v13; v12 = v15; if ( v7 == 0xFFFF || !sub_665040( v16, v7, (int **)*(unsigned __int16 *)(v4 - 10), *(_DWORD *)(v4 - 4), *(_BYTE *)(v4 + 118), (int)&v9, (int)&v10) ) { break; } ++v2; v4 += 149; if ( v2 >= (unsigned __int8)*a2 ) return 1; } return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (00665400) -------------------------------------------------------- _DWORD *__thiscall sub_665400(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // esi unsigned __int8 (__thiscall *v8)(_DWORD *, int); // edx bool v9; // zf int v10; // eax _DWORD *result; // eax int v12; // eax _DWORD *v13; // eax _DWORD *v14; // ecx _DWORD *v15; // eax _DWORD *v16; // eax char v17[4]; // [esp+10h] [ebp-14h] void *v18; // [esp+14h] [ebp-10h] int v19; // [esp+20h] [ebp-4h] v5 = this; v6 = operator new(0xB8Cu); v18 = v6; v7 = 0; v19 = 0; if ( v6 ) v7 = sub_64F000(v6); v8 = *(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v7 + 548); v19 = -1; v9 = v8(v7, a2) == 0; v10 = *v7; if ( v9 ) { (*(void (__thiscall **)(_DWORD *, signed int))(v10 + 28))(v7, 1); result = 0; } else { v9 = (*(unsigned __int8 (__thiscall **)(_DWORD *, signed int, int))(v10 + 600))(v7, 1, a5) == 0; v12 = *v7; if ( v9 ) { (*(void (__thiscall **)(_DWORD *, signed int))(v12 + 28))(v7, 1); result = 0; } else { (*(void (__thiscall **)(_DWORD *, int, int))(v12 + 184))(v7, a3, a4); if ( !a5 ) (*(void (__thiscall **)(_DWORD *))(*v7 + 340))(v7); v13 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v5[14] + 4))(v5 + 14); v13[2] = v7; *v13 = 0; v13[1] = v5[16]; v14 = (_DWORD *)v5[16]; if ( v14 ) *v14 = v13; else v5[15] = v13; ++v5[17]; v5[16] = v13; *(_DWORD *)v17 = v7[175]; v18 = v7; v15 = sub_5E8850(v5 + 29, v17); sub_62DDE0(v5 + 29, (int)v17, v15, 0); *(_WORD *)v17 = *((_WORD *)v7 + 274); v18 = v7; v16 = sub_67FF90(v5 + 33, v17); sub_6E19E0(v5 + 33, (int)v17, v16, 0); result = v7; } } return result; } //----- (00665580) -------------------------------------------------------- _DWORD *__thiscall sub_665580(_DWORD *this, unsigned __int8 *a2, int a3, int a4, int a5) { _DWORD *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *result; // eax _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // eax _DWORD *v12; // eax char v13[4]; // [esp+10h] [ebp-14h] void *v14; // [esp+14h] [ebp-10h] int v15; // [esp+20h] [ebp-4h] v5 = this; v6 = operator new(0xB8Cu); v14 = v6; v7 = 0; v15 = 0; if ( v6 ) v7 = sub_64F000(v6); v15 = -1; if ( sub_64F130(v7, a2, a5) ) { (*(void (__thiscall **)(_DWORD *, int, int))(*v7 + 184))(v7, a3, a4); if ( !a5 ) (*(void (__thiscall **)(_DWORD *))(*v7 + 340))(v7); v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v5[14] + 4))(v5 + 14); v9[2] = v7; *v9 = 0; v9[1] = v5[16]; v10 = (_DWORD *)v5[16]; if ( v10 ) *v10 = v9; else v5[15] = v9; ++v5[17]; v5[16] = v9; *(_DWORD *)v13 = v7[175]; v14 = v7; v11 = sub_5E8850(v5 + 29, v13); sub_62DDE0(v5 + 29, (int)v13, v11, 0); *(_WORD *)v13 = *((_WORD *)v7 + 274); v14 = v7; v12 = sub_67FF90(v5 + 33, v13); sub_6E19E0(v5 + 33, (int)v13, v12, 0); result = v7; } else { if ( v7 ) (*(void (__thiscall **)(_DWORD *, signed int))(*v7 + 28))(v7, 1); result = 0; } return result; } //----- (006656D0) -------------------------------------------------------- void __thiscall sub_6656D0(_DWORD *this) { void **v1; // esi int v2; // edi _DWORD *v3; // eax _DWORD *v4; // ST04_4 _DWORD *v5; // ST08_4 _DWORD *v6; // ST04_4 _DWORD **v7; // eax _DWORD *v8; // ecx _DWORD *v9; // edi int v10; // edi _DWORD *v11; // ebx _DWORD *v12; // ST08_4 _DWORD *v13; // ST08_4 _DWORD *v14; // ST04_4 _DWORD *v15; // ST08_4 _DWORD *v16; // ST04_4 _DWORD *v17; // [esp+10h] [ebp-18h] _DWORD *v18; // [esp+14h] [ebp-14h] _DWORD *v19; // [esp+18h] [ebp-10h] int v20; // [esp+24h] [ebp-4h] v1 = (void **)this; v19 = this; v20 = 0; v2 = (int)(this + 33); v18 = this + 33; v3 = (_DWORD *)this[34]; v4 = (_DWORD *)*v3; LOBYTE(v20) = 6; sub_6CDE90(this + 33, (int *)&v17, v4, v3); operator delete(*(void **)(v2 + 4)); v17 = v1 + 29; v5 = v1[30]; v6 = *(_DWORD **)v1[30]; LOBYTE(v20) = 7; sub_6CDE90(v1 + 29, (int *)&v18, v6, v5); operator delete(v1[30]); v7 = (_DWORD **)v1[26]; v8 = *v7; *v7 = v7; *((_DWORD *)v1[26] + 1) = v1[26]; v1[27] = 0; if ( v8 != v1[26] ) { do { v9 = (_DWORD *)*v8; operator delete(v8); v8 = v9; } while ( v9 != v1[26] ); } operator delete(v1[26]); v10 = (int)(v1 + 14); v17 = (_DWORD *)v10; *(_DWORD *)v10 = &PgTList::`vftable'; v11 = v1[15]; LOBYTE(v20) = 8; while ( v11 ) { v12 = v11; v11 = (_DWORD *)*v11; (*(void (__thiscall **)(void **, _DWORD *))(*(_DWORD *)v10 + 8))(v1 + 14, v12); } v1[17] = 0; v1[15] = 0; v1[16] = 0; *(_DWORD *)v10 = &NiTListBase,Char *>::`vftable'; v17 = v1 + 10; v13 = v1[11]; v14 = *(_DWORD **)v1[11]; LOBYTE(v20) = 10; sub_61E6D0(v1 + 10, (int *)&v18, v14, v13); operator delete(v1[11]); v17 = v1 + 6; v15 = v1[7]; v16 = *(_DWORD **)v1[7]; LOBYTE(v20) = 11; sub_61E6D0(v1 + 6, (int *)&v18, v16, v15); operator delete(v1[7]); sub_6686E0(v1); operator delete(*v1); *v1 = 0; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; // 9F3920: using guessed type void *PgTList::`vftable'; //----- (006658E0) -------------------------------------------------------- void __thiscall sub_6658E0(int *this, int a2) { int *v2; // ebx char *v3; // edi _DWORD *v4; // ecx _DWORD *v5; // eax char **v6; // edx int v7; // esi _DWORD *v8; // ecx _DWORD *v9; // eax _DWORD *v10; // ecx int v11; // edx unsigned int v12; // ecx _DWORD *********v13; // esi _DWORD ********v14; // edx int v15; // eax _DWORD ********v16; // [esp-Ch] [ebp-48h] int v17; // [esp-8h] [ebp-44h] void *v18; // [esp-4h] [ebp-40h] int v19; // [esp+0h] [ebp-3Ch] char v20; // [esp+10h] [ebp-2Ch] int v21; // [esp+18h] [ebp-24h] _DWORD **********v22; // [esp+1Ch] [ebp-20h] unsigned int v23; // [esp+24h] [ebp-18h] int v24; // [esp+28h] [ebp-14h] int *v25; // [esp+2Ch] [ebp-10h] int v26; // [esp+38h] [ebp-4h] v25 = &v19; v2 = this; v3 = (char *)a2; if ( a2 ) { sub_69EA70(byte_ADB468, a2); v4 = (_DWORD *)*((_DWORD *)v3 + 731); if ( v4 ) sub_7444F0(v4, *((_DWORD *)v3 + 730)); if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 660))(v3) ) sub_7445B0((int)v3); v5 = (_DWORD *)v2[15]; v26 = 0; while ( v5 ) { v6 = (char **)(v5 + 2); v7 = (int)v5; v5 = (_DWORD *)*v5; if ( v3 == *v6 ) goto LABEL_11; } v7 = 0; LABEL_11: a2 = v7; if ( v7 ) sub_403620(v2 + 14, (_DWORD **)&a2); a2 = *((_DWORD *)v3 + 175); v26 = -1; sub_4DD710(v2 + 29, (int **)&v24, &a2); if ( v24 != v2[30] ) sub_6CDBF0(v2 + 29, &a2, v24); a2 = *((unsigned __int16 *)v3 + 274); sub_4A3E20(v2 + 33, (int **)&v24, &a2); if ( v24 != v2[34] ) sub_6CDBF0(v2 + 33, &a2, v24); v8 = (_DWORD *)v2[26]; v9 = (_DWORD *)*v8; if ( (_DWORD *)*v8 != v8 ) { while ( (char *)v9[2] != v3 ) { v9 = (_DWORD *)*v9; if ( v9 == v8 ) goto LABEL_23; } if ( v9 != v8 ) { *(_DWORD *)v9[1] = *v9; v10 = (_DWORD *)*v9; v11 = v9[1]; v18 = v9; v10[1] = v11; operator delete(v18); --v2[27]; } } LABEL_23: if ( dword_AD8EBC && *((char **)dword_AD8EBC + 1026) == v3 ) sub_67D370(dword_AD8EBC, 0); sub_4DD290(v2, &v22); sub_4DD2B0(v2, &v20); v12 = v23; if ( v23 != v21 ) { while ( 1 ) { if ( v22 ) v13 = *v22; else v13 = 0; v14 = v13[2]; v15 = v12; if ( (unsigned int)v14 <= v12 ) v15 = v12 - (_DWORD)v14; if ( v13[1][v15][62] == (_DWORD ******)v3 ) break; if ( ++v12 == v21 ) goto LABEL_39; } a2 = (int)&v16; v16 = 0; v17 = 0; if ( v22 && *v22 ) v16 = **v22; sub_668770(v2, &v20, v16, v17, v12); } LABEL_39: if ( dword_AD8EBC == v3 ) dword_AD8EBC = 0; (*(void (__thiscall **)(char *, signed int))(*(_DWORD *)v3 + 28))(v3, 1); } } //----- (00665B10) -------------------------------------------------------- char __thiscall sub_665B10(int *this, int a2) { int *v2; // ebx _DWORD *v3; // eax unsigned int v4; // esi _DWORD *********v5; // edx _DWORD ********v6; // ecx int v7; // eax _DWORD *******v8; // edi _DWORD ******v9; // edx _DWORD *v10; // eax _DWORD ******v11; // ecx _DWORD ****v13; // eax signed int v14; // esi char v15; // bl unsigned __int8 v16; // al int v17; // esi int v18; // ebx int v19; // edx unsigned __int8 *v20; // eax _DWORD ********v21; // [esp+4h] [ebp-34h] int v22; // [esp+8h] [ebp-30h] char v23; // [esp+1Ch] [ebp-1Ch] _DWORD **********v24; // [esp+28h] [ebp-10h] unsigned int v25; // [esp+30h] [ebp-8h] int *v26; // [esp+34h] [ebp-4h] int v27; // [esp+40h] [ebp+8h] v2 = this; v26 = this; if ( !a2 ) return 0; sub_4DD290(this, &v24); v3 = sub_4DD2B0(v2, &v23); v4 = v25; if ( v25 == v3[2] ) return 0; v27 = *(unsigned __int16 *)(a2 + 548); while ( 1 ) { if ( v24 ) v5 = *v24; else v5 = 0; v6 = v5[2]; v7 = v4; if ( (unsigned int)v6 <= v4 ) v7 = v4 - (_DWORD)v6; v8 = v5[1][v7]; if ( (_WORD)v27 == *(_WORD *)v8 ) { v9 = v8[62]; if ( v9 ) { v10 = (_DWORD *)v2[15]; if ( v10 ) { while ( 1 ) { v11 = (_DWORD ******)v10[2]; v10 = (_DWORD *)*v10; if ( v9 == v11 ) break; if ( !v10 ) goto LABEL_16; } if ( v11 ) break; } } } LABEL_16: if ( ++v4 == sub_4DD2B0(v2, &v23)[2] ) { v25 = v4; return 0; } } v13 = (*v9)[150]; v25 = v4; ((void (__stdcall *)(signed int, _DWORD))v13)(1, 0); v14 = 0; v15 = 1; do { if ( (unsigned __int8)v15 & *((_BYTE *)v8 + ((unsigned int)v14 >> 3) + 91) ) ((void (__stdcall *)(signed int, _DWORD, _DWORD))(*v8[62])[4])(v14, -1.0, 0); ++v14; v15 = __ROL1__(v15, 1); } while ( v14 < 871 ); ((void (__stdcall *)(_DWORD))(*v8[62])[84])(0); v16 = *((_BYTE *)v8 + 84); if ( v16 != -1 ) { v17 = dword_ACB6C4; v18 = v16; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v16) ) { if ( (unsigned __int16)v18 <= *(_WORD *)(v17 + 200) ) { v19 = *(_DWORD *)(v17 + 196); if ( *(_DWORD *)(v19 + 4 * v18) ) { v20 = *(unsigned __int8 **)(v19 + 4 * v18); if ( v20 ) ((void (__thiscall *)(_DWORD ******, _DWORD))(*v8[62])[114])(v8[62], *v20); } } } } v21 = 0; *(float *)&v22 = 0.0; if ( v24 ) { if ( *v24 ) v21 = **v24; } sub_668770(v26, &v23, v21, v22, v25); return 1; } // ACB6C4: using guessed type int dword_ACB6C4; //----- (00665CB0) -------------------------------------------------------- _DWORD *__thiscall sub_665CB0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax void **v9; // [esp+14h] [ebp-30h] void **v10; // [esp+20h] [ebp-24h] _DWORD *v11; // [esp+2Ch] [ebp-18h] char *v12; // [esp+30h] [ebp-14h] char *v13; // [esp+34h] [ebp-10h] int v14; // [esp+40h] [ebp-4h] v1 = this; v11 = this; *this = 0; v2 = operator new(8u); if ( !v2 ) { v12 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v12); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v1 = v2; *v2 = 0; v2[1] = 0; *(_DWORD *)*v1 = v1; v1[1] = 0; v1[2] = 0; v1[3] = 0; v1[4] = 0; v14 = 0; v1[8] = 0; v3 = operator new(0x10u); if ( !v3 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v1[7] = v3; *v3 = v3; *(_DWORD *)(v1[7] + 4) = v1[7]; *(_DWORD *)(v1[7] + 8) = v1[7]; *(_BYTE *)(v1[7] + 14) = 1; *(_BYTE *)(v1[7] + 15) = 1; LOBYTE(v14) = 1; v1[12] = 0; v4 = operator new(0x10u); if ( !v4 ) { v12 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v12); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[11] = v4; *v4 = v4; *(_DWORD *)(v1[11] + 4) = v1[11]; *(_DWORD *)(v1[11] + 8) = v1[11]; *(_BYTE *)(v1[11] + 14) = 1; *(_BYTE *)(v1[11] + 15) = 1; v1[17] = 0; v1[15] = 0; v1[16] = 0; v1[14] = &PgTList::`vftable'; LOBYTE(v14) = 3; sub_8D0610((_BYTE *)v1 + 76); v1[27] = 0; v5 = operator new(0xCu); if ( !v5 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v1[26] = v5; *v5 = v5; *(_DWORD *)(v1[26] + 4) = v1[26]; LOBYTE(v14) = 4; v1[31] = 0; v6 = operator new(0x18u); if ( !v6 ) { v12 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v12); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[30] = v6; *v6 = v6; *(_DWORD *)(v1[30] + 4) = v1[30]; *(_DWORD *)(v1[30] + 8) = v1[30]; *(_BYTE *)(v1[30] + 20) = 1; *(_BYTE *)(v1[30] + 21) = 1; LOBYTE(v14) = 5; v1[35] = 0; v7 = operator new(0x18u); if ( !v7 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v1[34] = v7; *v7 = v7; *(_DWORD *)(v1[34] + 4) = v1[34]; *(_DWORD *)(v1[34] + 8) = v1[34]; *(_BYTE *)(v1[34] + 20) = 1; *(_BYTE *)(v1[34] + 21) = 1; LOBYTE(v14) = 6; sub_8D06A0((float *)v1 + 19, flt_ACCFCC); *((float *)v1 + 24) = 5.0; *((_BYTE *)v1 + 72) = 0; v1[37] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F3920: using guessed type void *PgTList::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00665F60) -------------------------------------------------------- _DWORD *__thiscall sub_665F60(int *this) { int *v1; // esi _DWORD *v2; // edi int v3; // eax _DWORD **v4; // ecx _DWORD *result; // eax _DWORD *v6; // edi v1 = this; v2 = (_DWORD *)this[15]; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; sub_6658E0(v1, v3); } sub_61E680(v1 + 6); sub_61E680(v1 + 10); sub_6686E0(v1); v4 = (_DWORD **)v1[26]; result = *v4; *v4 = v4; *(_DWORD *)(v1[26] + 4) = v1[26]; v1[27] = 0; if ( result != (_DWORD *)v1[26] ) { do { v6 = (_DWORD *)*result; operator delete(result); result = v6; } while ( v6 != (_DWORD *)v1[26] ); } return result; } //----- (00665FD0) -------------------------------------------------------- _DWORD *__thiscall sub_665FD0(int *this) { int *v1; // esi _DWORD *result; // eax _DWORD *v3; // edi int v4; // eax _DWORD **v5; // ecx _DWORD *v6; // edi v1 = this; result = (_DWORD *)this[15]; if ( result ) { v3 = (_DWORD *)*result; if ( *result ) { do { v4 = v3[2]; v3 = (_DWORD *)*v3; sub_6658E0(v1, v4); } while ( v3 ); } sub_61E680(v1 + 6); sub_61E680(v1 + 10); sub_6686E0(v1); v5 = (_DWORD **)v1[26]; result = *v5; *v5 = v5; *(_DWORD *)(v1[26] + 4) = v1[26]; v1[27] = 0; if ( result != (_DWORD *)v1[26] ) { do { v6 = (_DWORD *)*result; operator delete(result); result = v6; } while ( v6 != (_DWORD *)v1[26] ); } } return result; } //----- (00666040) -------------------------------------------------------- void __thiscall sub_666040(int *this) { int *v1; // ebx _DWORD *v2; // eax _DWORD *v3; // edi int v4; // esi v1 = this; v2 = (_DWORD *)this[15]; if ( v2 ) { v3 = (_DWORD *)*v2; if ( *v2 ) { do { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( !sub_651680(v4) && v4 != *((_DWORD *)dword_AD8EBC + 731) ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 660))(v4) ) sub_7445B0(v4); sub_6658E0(v1, v4); } } while ( v3 ); } } } //----- (006660A0) -------------------------------------------------------- void __thiscall sub_6660A0(int *this) { _DWORD *v1; // eax _DWORD *v2; // ebx int v3; // esi float *v4; // edi float *v5; // eax float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST20_4 float v10; // ST24_4 float v11; // ST24_4 int *v12; // [esp+Ch] [ebp-Ch] v1 = (_DWORD *)this[15]; v12 = this; if ( v1 ) { v2 = (_DWORD *)*v1; if ( *v1 ) { do { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 196))(v3); v5 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v6 = *v5 - *v4; v7 = v5[1] - v4[1]; v8 = v5[2] - v4[2]; v9 = (double)*((unsigned int *)dword_AD8EBC + 1361); v10 = v7 * v7 + v6 * v6 + v8 * v8; v11 = sqrt(v10); if ( v9 < (double)v11 ) sub_6658E0(v12, v3); } } while ( v2 ); } } } //----- (00666180) -------------------------------------------------------- void __fastcall sub_666180(int *a1, int a2, float a3) { int *v3; // ebx signed int v4; // esi bool v5; // zf bool v6; // sf unsigned __int8 v7; // of int v8; // edi int v9; // edx _DWORD *v10; // eax int v11; // ecx unsigned __int8 v12; // al int v13; // esi int v14; // edx unsigned __int8 *v15; // eax int v16; // eax int v17; // eax int *v18; // ecx _WORD *v19; // esi void (__thiscall *v20)(_WORD *, _DWORD); // eax int v21; // ecx unsigned __int16 v22; // dx int v23; // eax int v24; // eax int *v25; // eax int v26; // edi _DWORD *v27; // eax int v28; // eax char *v29; // eax int v30; // ecx int v31; // eax int v32; // eax int *v33; // eax int v34; // edi int v35; // [esp+30h] [ebp-24h] char v36; // [esp+38h] [ebp-1Ch] char v37; // [esp+3Ch] [ebp-18h] int v38; // [esp+40h] [ebp-14h] int v39; // [esp+44h] [ebp-10h] int v40; // [esp+48h] [ebp-Ch] int *v41; // [esp+4Ch] [ebp-8h] char v42[4]; // [esp+50h] [ebp-4h] v3 = a1; ++v3[37]; v4 = 0; v7 = __OFSUB__(a1[37], 1000); v5 = a1[37] == 1000; v6 = a1[37] - 1000 < 0; *(_DWORD *)v42 = a1; if ( !((unsigned __int8)(v6 ^ v7) | v5) ) a1[37] = 0; v41 = 0; do { if ( !v3[4] ) break; v8 = sub_667FC0(v3); v9 = *(_DWORD *)(v8 + 248); if ( v9 ) { v10 = (_DWORD *)v3[15]; if ( v10 ) { while ( 1 ) { v11 = v10[2]; v10 = (_DWORD *)*v10; if ( v9 == v11 ) break; if ( !v10 ) goto LABEL_27; } if ( v11 ) { if ( v3[37] < 2 ) break; v3[37] = 0; (*(void (__stdcall **)(signed int, _DWORD))(**(_DWORD **)(v8 + 248) + 600))(1, 0); if ( *(_WORD *)(v8 + 82) != -1 ) { sub_650E40(*(_BYTE **)(v8 + 248), 1); sub_6549B0(*(_DWORD **)(v8 + 248), (_DWORD *)*(unsigned __int16 *)(v8 + 82)); } LOBYTE(v3) = 1; do { if ( (unsigned __int8)v3 & *(_BYTE *)(((unsigned int)v4 >> 3) + v8 + 91) ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v8 + 248) + 16))(v4, -1.0, 0); ++v4; LOBYTE(v3) = __ROL1__((_BYTE)v3, 1); } while ( v4 < 871 ); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 248) + 336))(0); v12 = *(_BYTE *)(v8 + 84); if ( v12 != -1 ) { v13 = dword_ACB6C4; v3 = (int *)v12; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, v12) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v13 + 200) ) { v14 = *(_DWORD *)(v13 + 196); if ( *(_DWORD *)(v14 + 4 * (_DWORD)v3) ) { v15 = *(unsigned __int8 **)(v14 + 4 * (_DWORD)v3); if ( v15 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 248) + 456))(*v15); } } } } if ( strcmp((const char *)(v8 + 208), (const char *)&unk_9F38A4) == 1 ) sub_65CF20(*(int **)(v8 + 248), (int)v3, v8, (char *)(v8 + 208), 0); v3 = *(int **)v42; v4 = 0; } } } LABEL_27: v16 = v3[4]; if ( v16 ) { if ( v3[2] <= (unsigned int)++v3[3] ) v3[3] = 0; v17 = v16 - 1; v3[4] = v17; if ( !v17 ) v3[3] = 0; } v41 = (int *)((char *)v41 + 1); } while ( (signed int)v41 < 1 ); v18 = (int *)v3[15]; if ( v18 ) { while ( 1 ) { v19 = (_WORD *)v18[2]; v20 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v19 + 564); v41 = (int *)*v18; v20(v19, LODWORD(a3)); v21 = v3[11]; v22 = v19[274]; v23 = *(_DWORD *)(v21 + 4); v5 = *(_BYTE *)(v23 + 15) == 0; *(_DWORD *)v42 = (unsigned __int16)v19[274]; if ( v5 ) { do { if ( *(_WORD *)(v23 + 12) >= v22 ) { v21 = v23; v23 = *(_DWORD *)v23; } else { v23 = *(_DWORD *)(v23 + 8); } } while ( !*(_BYTE *)(v23 + 15) ); } v24 = v3[11]; v40 = v21; if ( v21 == v24 || v22 < *(_WORD *)(v21 + 12) ) { v39 = v24; v25 = &v39; } else { v25 = &v40; } v26 = *v25; if ( *v25 != v3[11] ) { if ( !sub_651560(v19) ) { sub_61E430(v3 + 10, (int *)&v37, v26); v27 = sub_4DD530(v3 + 6, v42); sub_4DD450(v3 + 6, (int)&v35, v27, 0); v28 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v19 + 84))(v19); v29 = sub_7549E0("Insert DeletedChar[ %s ]\n", v28); OutputDebugStringA(v29); } v22 = *(_WORD *)v42; } v30 = v3[7]; v31 = *(_DWORD *)(v30 + 4); while ( !*(_BYTE *)(v31 + 15) ) { if ( *(_WORD *)(v31 + 12) >= v22 ) { v30 = v31; v31 = *(_DWORD *)v31; } else { v31 = *(_DWORD *)(v31 + 8); } } v32 = v3[7]; v40 = v30; if ( v30 == v32 || v22 < *(_WORD *)(v30 + 12) ) { v38 = v32; v33 = &v38; } else { v33 = &v40; } v34 = *v33; if ( *v33 != v3[7] ) { sub_6658E0(v3, (int)v19); sub_61E430(v3 + 6, (int *)&v36, v34); } if ( !v41 ) break; v18 = v41; } } byte_AB7288 = 0; } // AB7288: using guessed type char byte_AB7288; // ACB6C4: using guessed type int dword_ACB6C4; //----- (006664B0) -------------------------------------------------------- float *__thiscall sub_6664B0(_DWORD *this, float *a2, int a3, int a4, int a5, char a6, char a7) { _DWORD *v7; // ebx char *v8; // eax int *v9; // eax float *v10; // edi float *v11; // eax float *v12; // eax float *v13; // eax float *v14; // esi int v15; // eax bool v16; // zf int v17; // eax float *result; // eax _DWORD *v19; // eax _DWORD *v20; // ecx _DWORD *v21; // eax _DWORD *v22; // eax char v23[4]; // [esp+10h] [ebp-14h] float *v24; // [esp+14h] [ebp-10h] int v25; // [esp+20h] [ebp-4h] v7 = this; v8 = sub_664AB0(this, a3); if ( v8 ) { sub_6658E0(v7, (int)v8); v9 = *sub_61E770(v7 + 10, (int **)&v24, &a3); if ( v9 != (int *)v7[11] ) sub_61E430(v7 + 10, (int *)&v24, (int)v9); } v10 = a2; if ( (_WORD)a2 != 5700 ) { v13 = (float *)operator new(0xB8Cu); a2 = v13; v25 = 1; if ( v13 ) { v12 = (float *)sub_658E20(v13); goto LABEL_10; } LABEL_9: v12 = 0; goto LABEL_10; } v11 = (float *)operator new(0xB8Cu); a2 = v11; v25 = 0; if ( !v11 ) goto LABEL_9; v12 = (float *)sub_67E4F0(v11); LABEL_10: v14 = v12; a2 = v12; v25 = -1; if ( a6 ) { v15 = *((_DWORD *)v12 + 175); *((_BYTE *)v14 + 2510) = 1; if ( v15 ) *(_WORD *)(v15 + 28) &= 0xFFFEu; } v16 = (*(unsigned __int8 (__thiscall **)(float *, float *, int))(*(_DWORD *)v14 + 552))(v14, v10, a3) == 0; v17 = *(_DWORD *)v14; if ( v16 ) { (*(void (__thiscall **)(float *, signed int))(v17 + 28))(v14, 1); result = 0; } else if ( (*(unsigned __int8 (__thiscall **)(float *, signed int, _DWORD))(v17 + 600))(v14, 1, 0) ) { if ( a7 ) sub_443390(v14, 3); (*(void (__thiscall **)(float *, int, int))(*(_DWORD *)v14 + 184))(v14, a4, a5); (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v14 + 336))(v14, 1); if ( sub_651C60((int)v14) ) { sub_654750(v14, 1); if ( sub_651D10(v14) ) sub_67AFA0((char **)v7 + 26, (int)&a2); } v19 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v7[14] + 4))(v7 + 14); v19[2] = v14; *v19 = 0; v19[1] = v7[16]; v20 = (_DWORD *)v7[16]; if ( v20 ) *v20 = v19; else v7[15] = v19; ++v7[17]; v7[16] = v19; *(float *)v23 = v14[175]; v24 = v14; v21 = sub_5E8850(v7 + 29, v23); sub_62DDE0(v7 + 29, (int)v23, v21, 0); *(_WORD *)v23 = *((_WORD *)v14 + 274); v24 = v14; v22 = sub_67FF90(v7 + 33, v23); sub_6E19E0(v7 + 33, (int)v23, v22, 0); sub_69E480(byte_ADB468, (char)v14); result = v14; } else { (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v14 + 28))(v14, 1); result = 0; } return result; } //----- (00666700) -------------------------------------------------------- float *__thiscall sub_666700(_DWORD *this, unsigned __int16 *a2) { _DWORD *v2; // edi float v3; // ST10_4 float v4; // ST0C_4 float *v5; // eax float *v7; // edi void (__thiscall *v8)(float *, _DWORD); // edx int v9; // ecx int v10; // edx int v11; // eax int v12; // edx int v13; // ecx int v14; // eax int v15; // ecx _BYTE *v16; // eax char v17; // cl char v18; // al int v19; // [esp+14h] [ebp-44h] char v20; // [esp+20h] [ebp-38h] float v21; // [esp+2Ch] [ebp-2Ch] int v22; // [esp+30h] [ebp-28h] int v23; // [esp+34h] [ebp-24h] int v24; // [esp+38h] [ebp-20h] int v25; // [esp+3Ch] [ebp-1Ch] int v26; // [esp+40h] [ebp-18h] int v27; // [esp+44h] [ebp-14h] int v28; // [esp+48h] [ebp-10h] int v29; // [esp+4Ch] [ebp-Ch] char v30; // [esp+50h] [ebp-8h] v2 = this; v3 = (double)*((unsigned int *)a2 + 2); v4 = (double)*((unsigned int *)a2 + 1); sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v19); LODWORD(v21) = ((unsigned int)*((unsigned __int8 *)a2 + 12) + 90) % 0xB4; v21 = (double)SLODWORD(v21) * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D810((float *)&v22, v21); sub_85DA90((float *)&v22, (float *)&v20, (float *)&dword_AB4FE8); v5 = (float *)a2[1]; if ( (_WORD)v5 == -1 ) return 0; v7 = sub_6664B0(v2, v5, *a2, (int)&v19, (int)&v20, 1, 0); if ( !v7 ) return 0; LODWORD(v21) = a2[23]; v8 = *(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v7 + 524); v21 = (double)SLODWORD(v21) / 1000.0; v8(v7, LODWORD(v21)); v9 = *(_DWORD *)(a2 + 9); v10 = *(_DWORD *)(a2 + 11); v22 = *(_DWORD *)(a2 + 7); v11 = *(_DWORD *)(a2 + 13); v24 = v10; v12 = *(_DWORD *)(a2 + 17); v23 = v9; v13 = *(_DWORD *)(a2 + 15); v25 = v11; v14 = *(_DWORD *)(a2 + 19); v27 = v12; v26 = v13; v15 = *(_DWORD *)(a2 + 21); v28 = v14; v16 = (char *)v7 + 2511; v29 = v15; v30 = 0; do { v17 = v16[(char *)&v22 - ((char *)v7 + 2511)]; *v16++ = v17; } while ( v17 ); v18 = *((_BYTE *)a2 + 13); if ( v18 ) { if ( (unsigned __int8)(v18 - 1) <= 1u ) { sub_660E80(v7); return v7; } } else { sub_660F40(v7); } return v7; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (006668A0) -------------------------------------------------------- float *__thiscall sub_6668A0(_DWORD *this, unsigned __int16 *a2) { double v2; // st7 float v3; // ST10_4 float v4; // ST0C_4 int v5; // edi int v6; // ebx int v7; // edx int *v8; // eax int v9; // eax unsigned int v10; // ecx float *v11; // eax bool v13; // zf float *v14; // edi unsigned __int8 v15; // al int v16; // edx int v17; // eax char v18; // al int v19; // eax signed int v20; // edi char v21; // bl int v22; // ebx int v23; // [esp+18h] [ebp-54h] char v24; // [esp+24h] [ebp-48h] _DWORD *v25; // [esp+30h] [ebp-3Ch] float v26; // [esp+34h] [ebp-38h] char v27; // [esp+38h] [ebp-34h] char v28[4]; // [esp+5Ch] [ebp-10h] int v29; // [esp+60h] [ebp-Ch] int v30; // [esp+64h] [ebp-8h] v2 = (double)*(unsigned int *)((char *)a2 + 9); v25 = this; v3 = v2; v4 = (double)*(unsigned int *)((char *)a2 + 5); sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v23); v5 = dword_ACDA48; v6 = *(unsigned __int16 *)((char *)a2 + 3); v7 = *(_DWORD *)dword_ACDA48; LODWORD(v26) = *((unsigned __int8 *)a2 + 13); if ( (*(unsigned __int8 (__thiscall **)(int, int))(v7 + 16))(dword_ACDA48, v6) && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) && (v8 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v6), *v8) && (v9 = *v8) != 0 && *(_BYTE *)(v9 + 82) ) { v10 = (LODWORD(v26) + 90) % 0xB4u; } else { LOBYTE(v10) = LOBYTE(v26); } v26 = (flt_BA45B4 + flt_BA45B4) * (double)(unsigned __int8)v10 / 180.0; sub_85D810((float *)&v27, v26); sub_85DA90((float *)&v27, (float *)&v24, (float *)&dword_AB4FE8); v11 = (float *)*(unsigned __int16 *)((char *)a2 + 3); if ( (_WORD)v11 == -1 ) return 0; v13 = *((_BYTE *)a2 + 2) == 3; LOBYTE(v26) = 0; if ( v13 ) LOBYTE(v26) = 1; v14 = sub_6664B0(v25, v11, *a2, (int)&v23, (int)&v24, 0, SLOBYTE(v26)); v26 = *(float *)&v14; if ( !v14 ) return 0; v15 = *((_BYTE *)a2 + 156); if ( v15 ) { v16 = v15; v17 = *(_DWORD *)v14; *((_DWORD *)v14 + 732) = v16; (*(void (__thiscall **)(float *))(v17 + 340))(v14); } v18 = *((_BYTE *)a2 + 14); if ( v18 == 1 ) { v30 = 0; v29 = 0; *(_DWORD *)v28 = 0; strncpy(v28, (const char *)a2 + 15, 0xCu); v19 = sub_4316B0(v28); if ( v19 ) sub_651940(v14, (const char *)(v19 + 14)); } else if ( !v18 ) { v20 = 0; v21 = 1; do { if ( (unsigned __int8)v21 & *((_BYTE *)a2 + ((unsigned int)v20 >> 3) + 15) ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)LODWORD(v26) + 16))(v20, -1.0, 0); ++v20; v21 = __ROL1__(v21, 1); } while ( v20 < 871 ); v14 = (float *)LODWORD(v26); } v22 = (int)(a2 + 62); if ( strcmp((const char *)a2 + 124, (const char *)&unk_9F38A5) == 1 ) sub_65CF20((int *)v14, v22, (int)v14, (char *)a2 + 124, 0); *((_BYTE *)v14 + 2952) = *((_BYTE *)a2 + 157); if ( *((_BYTE *)a2 + 158) ) sub_65F070((int)v14, v22, (int)v14, 110000, 0); return v14; } // AB4FE8: using guessed type int dword_AB4FE8; // ACDA48: using guessed type int dword_ACDA48; // BA45B4: using guessed type float flt_BA45B4; //----- (00666B00) -------------------------------------------------------- char __thiscall sub_666B00(_DWORD *this, unsigned __int8 *a2) { bool v2; // zf int v3; // edi float v4; // ST10_4 float v5; // ST0C_4 int v6; // esi int v7; // edx unsigned int v8; // ebx int *v9; // eax int v10; // eax float *v11; // eax float *v12; // esi unsigned __int8 v13; // al int v14; // edx int v15; // eax char v16; // al int v17; // eax signed int v18; // esi char v19; // bl int v20; // ebx int v21; // ecx char v23; // [esp+18h] [ebp-60h] int v24; // [esp+24h] [ebp-54h] _DWORD *v25; // [esp+30h] [ebp-48h] unsigned __int8 *v26; // [esp+34h] [ebp-44h] int v27; // [esp+38h] [ebp-40h] int v28; // [esp+3Ch] [ebp-3Ch] float v29; // [esp+40h] [ebp-38h] char v30; // [esp+44h] [ebp-34h] char v31[4]; // [esp+68h] [ebp-10h] int v32; // [esp+6Ch] [ebp-Ch] int v33; // [esp+70h] [ebp-8h] v2 = *a2 == 0; v25 = this; v26 = a2; v28 = 0; if ( v2 ) return 1; v3 = (int)(a2 + 6); while ( 1 ) { v4 = (double)*(unsigned int *)(v3 + 4); v5 = (double)*(unsigned int *)v3; sub_69AD10((float *)byte_ADB468, v5, v4, (int)&v24); v6 = dword_ACDA48; v7 = *(_DWORD *)dword_ACDA48; v8 = *(unsigned __int8 *)(v3 + 8); LODWORD(v29) = *(unsigned __int16 *)(v3 - 2); if ( (*(unsigned __int8 (__thiscall **)(int, float))(v7 + 16))(dword_ACDA48, COERCE_FLOAT(LODWORD(v29))) ) { if ( LOWORD(v29) <= *(_WORD *)(v6 + 200) ) { v9 = (int *)(*(_DWORD *)(v6 + 196) + 4 * LOWORD(v29)); if ( *v9 ) { v10 = *v9; if ( v10 ) { if ( *(_BYTE *)(v10 + 82) ) v8 = (v8 + 90) % 0xB4; } } } } v29 = (flt_BA45B4 + flt_BA45B4) * (double)(unsigned __int8)v8 / 180.0; sub_85D810((float *)&v30, v29); sub_85DA90((float *)&v30, (float *)&v23, (float *)&dword_AB4FE8); v11 = (float *)*(unsigned __int16 *)(v3 - 2); if ( (_WORD)v11 == -1 ) break; v2 = *(_BYTE *)(v3 - 3) == 3; LOBYTE(v27) = 0; if ( v2 ) LOBYTE(v27) = 1; v12 = sub_6664B0(v25, v11, *(unsigned __int16 *)(v3 - 5), (int)&v24, (int)&v23, 0, v27); v29 = *(float *)&v12; if ( !v12 ) break; v13 = *(_BYTE *)(v3 + 151); if ( v13 ) { v14 = v13; v15 = *(_DWORD *)v12; *((_DWORD *)v12 + 732) = v14; (*(void (__thiscall **)(float *))(v15 + 340))(v12); } v16 = *(_BYTE *)(v3 + 9); if ( v16 == 1 ) { v33 = 0; v32 = 0; *(_DWORD *)v31 = 0; strncpy(v31, (const char *)(v3 + 10), 0xCu); v17 = sub_4316B0(v31); if ( v17 ) sub_651940(v12, (const char *)(v17 + 14)); } else if ( !v16 ) { v18 = 0; v19 = 1; do { if ( (unsigned __int8)v19 & *(_BYTE *)(((unsigned int)v18 >> 3) + v3 + 10) ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)LODWORD(v29) + 16))(v18, -1.0, 0); ++v18; v19 = __ROL1__(v19, 1); } while ( v18 < 871 ); v12 = (float *)LODWORD(v29); } v20 = v3 + 119; if ( strcmp((const char *)(v3 + 119), (const char *)&unk_9F38A5) == 1 ) sub_65CF20((int *)v12, v20, v3, (char *)(v3 + 119), 0); *((_BYTE *)v12 + 2952) = *(_BYTE *)(v3 + 152); if ( *(_BYTE *)(v3 + 153) ) sub_65F070((int)v12, v20, v3, 110000, 0); v21 = *v26; v3 += 159; if ( ++v28 >= v21 ) return 1; } return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // ACDA48: using guessed type int dword_ACDA48; // BA45B4: using guessed type float flt_BA45B4; //----- (00666D90) -------------------------------------------------------- char *__fastcall sub_666D90(int *a1, int a2, int a3) { __int16 v3; // ST14_2 char *v4; // ebx int v5; // edx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int (__thiscall *v10)(char *); // edx float v11; // ST10_4 float v12; // ST0C_4 _DWORD *v14; // eax int v15; // esi unsigned __int8 (__thiscall *v16)(int, int); // edx float v17; // ST10_4 float v18; // ST0C_4 unsigned __int8 v19; // al unsigned __int8 v20; // al int v21; // ebx int v22; // edx unsigned __int8 **v23; // eax unsigned __int8 *v24; // eax void (__thiscall *v25)(int, signed int, void *); // edx void *v26; // eax char *v27; // eax int *v28; // ebx _DWORD *v29; // eax _DWORD *v30; // ecx _DWORD *v31; // eax _DWORD *v32; // eax int v33; // [esp+28h] [ebp-74h] float v34[3]; // [esp+34h] [ebp-68h] int *v35; // [esp+40h] [ebp-5Ch] float v36; // [esp+44h] [ebp-58h] char v37[4]; // [esp+48h] [ebp-54h] void *v38; // [esp+4Ch] [ebp-50h] char v39; // [esp+50h] [ebp-4Ch] int v40; // [esp+74h] [ebp-28h] int v41; // [esp+78h] [ebp-24h] int v42; // [esp+7Ch] [ebp-20h] int v43; // [esp+80h] [ebp-1Ch] int v44; // [esp+84h] [ebp-18h] char v45; // [esp+88h] [ebp-14h] int v46; // [esp+98h] [ebp-4h] v3 = *(_WORD *)a3; v35 = a1; v4 = sub_664AB0(a1, v3); if ( v4 ) { v5 = *(_DWORD *)(a3 + 6); v6 = *(_DWORD *)(a3 + 10); v40 = *(_DWORD *)(a3 + 2); v7 = *(_DWORD *)(a3 + 14); v41 = v5; v8 = *(_DWORD *)(a3 + 18); v42 = v6; v9 = *(_DWORD *)v4; v43 = v7; v44 = v8; v10 = *(int (__thiscall **)(char *))(v9 + 84); v45 = 0; if ( !strcmp((const char *)v10(v4), (const char *)&v40) ) { v4[1482] = 1; v11 = (double)*(unsigned int *)(a3 + 26); v12 = (double)*(unsigned int *)(a3 + 22); sub_69AD10((float *)byte_ADB468, v12, v11, (int)&v42); *(float *)&v35 = (double)*(unsigned __int8 *)(a3 + 30) * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D810((float *)&v39, *(float *)&v35); sub_85DA90((float *)&v39, &v36, (float *)&dword_AB4FE8); (*(void (__thiscall **)(char *, int *, float *))(*(_DWORD *)v4 + 184))(v4, &v42, &v36); (*(void (__thiscall **)(char *, int))(*(_DWORD *)v4 + 72))(v4, a3); return v4; } sub_6658E0(v35, (int)v4); } v14 = operator new(0xB8Cu); v38 = v14; v15 = 0; v46 = 0; if ( v14 ) v15 = sub_658E20(v14); v16 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v15 + 556); v46 = -1; if ( !v16(v15, a3) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v15 + 28))(v15, 1); return 0; } v17 = (double)*(unsigned int *)(a3 + 26); v18 = (double)*(unsigned int *)(a3 + 22); sub_69AD10((float *)byte_ADB468, v18, v17, (int)&v33); v38 = (void *)*(unsigned __int8 *)(a3 + 30); *(float *)&v38 = (double)(signed int)v38 * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D810((float *)&v39, *(float *)&v38); sub_85DA90((float *)&v39, v34, (float *)&dword_AB4FE8); (*(void (__thiscall **)(int, int *, float *))(*(_DWORD *)v15 + 184))(v15, &v33, v34); v19 = *(_BYTE *)(a3 + 31); if ( v19 < 4u || v19 > 5u ) { v20 = *(_BYTE *)(a3 + 84); if ( v20 != -1 ) { v21 = dword_ACB6C4; v22 = *(_DWORD *)dword_ACB6C4; v38 = (void *)v20; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(v22 + 16))(dword_ACB6C4, v20) ) { if ( (unsigned __int16)v38 <= *(_WORD *)(v21 + 200) ) { v23 = (unsigned __int8 **)(*(_DWORD *)(v21 + 196) + 4 * (unsigned __int16)v38); if ( *v23 ) { v24 = *v23; if ( v24 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v15 + 456))(v15, *v24); v38 = (void *)*(unsigned __int16 *)(a3 + 85); v25 = *(void (__thiscall **)(int, signed int, void *))(*(_DWORD *)v15 + 464); *(float *)&v38 = (double)(signed int)v38 / 1000.0; v25(v15, 1, v38); } } } } } } *(_DWORD *)(v15 + 676) = *(_DWORD *)(a3 + 200); *(_BYTE *)(v15 + 680) = *(_BYTE *)(a3 + 205); *(_DWORD *)(v15 + 172) = *(unsigned __int8 *)(a3 + 87); if ( *(_BYTE *)(a3 + 87) ) { if ( *(_BYTE *)(a3 + 87) == 10 ) { v27 = sub_4DC370(*(unsigned __int16 *)(a3 + 89), *(unsigned __int8 *)(a3 + 88)); if ( v27 ) { sub_650910((char *)v15, (int)v27); sub_650B90((_BYTE *)v15, 1); } goto LABEL_24; } sub_650B90((_BYTE *)v15, 1); v26 = sub_74CD00(&unk_AD8C08, *(_BYTE *)(a3 + 87), *(_BYTE *)(a3 + 88)); } else { sub_650B90((_BYTE *)v15, 0); v26 = sub_74CD00(&unk_AD8C08, *(_BYTE *)(a3 + 87), 0); } sub_650910((char *)v15, (int)v26); LABEL_24: v28 = v35; v29 = (_DWORD *)(*(int (__thiscall **)(int *))(v35[14] + 4))(v35 + 14); v29[2] = v15; *v29 = 0; v29[1] = v28[16]; v30 = (_DWORD *)v28[16]; if ( v30 ) *v30 = v29; else v28[15] = (int)v29; ++v28[17]; v28[16] = (int)v29; *(_DWORD *)v37 = *(_DWORD *)(v15 + 700); v38 = (void *)v15; v31 = sub_5E8850(v28 + 29, v37); sub_62DDE0(v28 + 29, (int)v37, v31, 0); *(_WORD *)v37 = *(_WORD *)(v15 + 548); v38 = (void *)v15; v32 = sub_67FF90(v28 + 33, v37); sub_6E19E0(v28 + 33, (int)v37, v32, 0); sub_69E480(byte_ADB468, v15); return (char *)v15; } // AB4FE8: using guessed type int dword_AB4FE8; // ACB6C4: using guessed type int dword_ACB6C4; // BA45B4: using guessed type float flt_BA45B4; //----- (00667180) -------------------------------------------------------- char *__fastcall sub_667180(int *a1, int a2, int a3, int a4) { int *v4; // edi char *v5; // esi char *result; // eax int v7; // ecx int *v8; // eax int v9; // [esp+Ch] [ebp-128h] int *v10; // [esp+10h] [ebp-124h] char v11; // [esp+14h] [ebp-120h] char *v12; // [esp+10Ch] [ebp-28h] v4 = a1; v5 = sub_666D90(a1, a2, a3); result = 0; if ( v5 ) { v12 = v5; memset(&v11, 0, 0xF6u); sub_667AE0(&v11, a3); sub_6682F0(v4, &v11); v7 = *((unsigned __int16 *)v5 + 274); v5[1449] = *(_BYTE *)(a3 + 206) != 0; v5[2952] = *(_BYTE *)(a3 + 243); v9 = v7; v8 = *sub_61E770(v4 + 6, &v10, &v9); if ( v8 != (int *)v4[7] ) sub_61E430(v4 + 6, (int *)&v10, (int)v8); result = v5; } return result; } //----- (00667280) -------------------------------------------------------- char __fastcall sub_667280(int *a1, int a2, unsigned __int8 *a3) { bool v3; // zf int *v4; // ebx char *v5; // eax int v6; // esi unsigned int v7; // edi unsigned int v8; // eax void *v9; // eax char *v10; // edi int v11; // edi int v12; // edx int v13; // eax unsigned __int16 v14; // si int v15; // eax int *v16; // eax int v17; // eax void **v19; // [esp+Ch] [ebp-148h] char v20; // [esp+18h] [ebp-13Ch] char *v21; // [esp+1Ch] [ebp-138h] int v22; // [esp+20h] [ebp-134h] unsigned __int8 *v23; // [esp+24h] [ebp-130h] int v24; // [esp+28h] [ebp-12Ch] char *v25; // [esp+2Ch] [ebp-128h] _BYTE *v26; // [esp+30h] [ebp-124h] char v27; // [esp+34h] [ebp-120h] char *v28; // [esp+12Ch] [ebp-28h] v3 = *a3 == 0; v4 = a1; v23 = a3; v24 = 0; if ( v3 ) return 1; v26 = a3 + 1; while ( 1 ) { v5 = sub_666D90(v4, a2, (int)v26); v6 = (int)v5; v25 = v5; if ( !v5 ) break; v28 = v5; memset(&v27, 0, 0xF6u); sub_667AE0(&v27, (int)v26); if ( v4[2] <= (unsigned int)(v4[4] + 1) ) sub_668000(v4, (char *)1); v7 = v4[4] + v4[3]; v8 = v4[2]; if ( v8 <= v7 ) v7 -= v8; if ( !*(_DWORD *)(v4[1] + 4 * v7) ) { v9 = operator new(0x11Cu); if ( !v9 ) { v21 = 0; std::exception::exception((std::exception *)&v19, (const char *const *)&v21); v19 = &std::bad_alloc::`vftable'; _CxxThrowException(&v19, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v4[1] + 4 * v7) = v9; } v10 = *(char **)(v4[1] + 4 * v7); if ( v10 ) { qmemcpy(v10, &v27, 0x11Cu); v6 = (int)v25; } ++v4[4]; v11 = (int)v26; *(_BYTE *)(v6 + 1449) = v26[206] != 0; *(_BYTE *)(v6 + 2952) = *(_BYTE *)(v11 + 243); v12 = v4[7]; v13 = *(_DWORD *)(v12 + 4); v14 = *(_WORD *)(v6 + 548); while ( !*(_BYTE *)(v13 + 15) ) { if ( *(_WORD *)(v13 + 12) >= v14 ) { v12 = v13; v13 = *(_DWORD *)v13; } else { v13 = *(_DWORD *)(v13 + 8); } } v15 = v4[7]; v25 = (char *)v12; if ( v12 == v15 || v14 < *(_WORD *)(v12 + 12) ) { v22 = v15; v16 = &v22; } else { v16 = (int *)&v25; } v17 = *v16; if ( v17 != v4[7] ) sub_61E430(v4 + 6, (int *)&v20, v17); a2 = *v23; ++v24; v26 = (_BYTE *)(v11 + 246); if ( v24 >= a2 ) return 1; } return 0; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006674B0) -------------------------------------------------------- _DWORD *__thiscall sub_6674B0(int *this, int a2, void *a3, int a4, int a5, int a6) { int *v6; // ebx char *v7; // eax _DWORD *v8; // esi _DWORD *v9; // eax int (__thiscall *v10)(_DWORD *, int, void *, int); // eax char v11; // al int v12; // edx _DWORD *result; // eax char v14; // al int v15; // edx _DWORD *v16; // eax _DWORD *v17; // ecx _DWORD *v18; // eax _DWORD *v19; // eax char v20[4]; // [esp+10h] [ebp-14h] _DWORD *v21; // [esp+14h] [ebp-10h] int v22; // [esp+20h] [ebp-4h] v6 = this; v7 = sub_664AB0(this, (__int16)a3); v8 = 0; if ( v7 ) sub_6658E0(v6, (int)v7); v9 = operator new(0xB90u); v22 = 0; if ( v9 ) v8 = sub_442D40(v9); v10 = *(int (__thiscall **)(_DWORD *, int, void *, int))(*v8 + 668); v22 = -1; v11 = v10(v8, a2, a3, a6); v12 = *v8; if ( v11 ) { v14 = (*(int (__thiscall **)(_DWORD *, signed int, _DWORD))(v12 + 600))(v8, 1, 0); v15 = *v8; if ( v14 ) { (*(void (__thiscall **)(_DWORD *, int, int))(v15 + 184))(v8, a4, a5); (*(void (__thiscall **)(_DWORD *, signed int))(*v8 + 336))(v8, 1); v16 = (_DWORD *)(*(int (__thiscall **)(int *))(v6[14] + 4))(v6 + 14); v16[2] = v8; *v16 = 0; v16[1] = v6[16]; v17 = (_DWORD *)v6[16]; if ( v17 ) *v17 = v16; else v6[15] = (int)v16; ++v6[17]; v6[16] = (int)v16; *(_DWORD *)v20 = v8[175]; v21 = v8; v18 = sub_5E8850(v6 + 29, v20); sub_62DDE0(v6 + 29, (int)v20, v18, 0); *(_WORD *)v20 = *((_WORD *)v8 + 274); v21 = v8; v19 = sub_67FF90(v6 + 33, v20); sub_6E19E0(v6 + 33, (int)v20, v19, 0); sub_69E480(byte_ADB468, (char)v8); result = v8; } else { (*(void (__thiscall **)(_DWORD *, signed int))(v15 + 28))(v8, 1); result = 0; } } else { (*(void (__thiscall **)(_DWORD *, signed int))(v12 + 28))(v8, 1); result = 0; } return result; } //----- (00667650) -------------------------------------------------------- _DWORD *__thiscall sub_667650(int *this, unsigned __int16 *a2) { int *v2; // edi float v4; // ST0C_4 float v5; // ST08_4 int v6; // eax int v7; // edx int v8; // ecx int v9; // edx void *v10; // eax int v11; // ecx int v12; // [esp+14h] [ebp-64h] int v13; // [esp+20h] [ebp-58h] int v14; // [esp+24h] [ebp-54h] int v15; // [esp+28h] [ebp-50h] int v16; // [esp+2Ch] [ebp-4Ch] int v17; // [esp+30h] [ebp-48h] int v18; // [esp+34h] [ebp-44h] float v19; // [esp+38h] [ebp-40h] char v20; // [esp+3Ch] [ebp-3Ch] int v21; // [esp+60h] [ebp-18h] int v22; // [esp+64h] [ebp-14h] int v23; // [esp+68h] [ebp-10h] int v24; // [esp+6Ch] [ebp-Ch] char v25; // [esp+70h] [ebp-8h] v2 = this; if ( *(_DWORD *)(a2 + 1) == -1 ) return 0; v4 = (double)*(unsigned int *)(a2 + 5); v5 = (double)*(unsigned int *)(a2 + 3); sub_69AD10((float *)byte_ADB468, v5, v4, (int)&v12); LODWORD(v19) = *((unsigned __int8 *)a2 + 14); v19 = (flt_BA45B4 + flt_BA45B4) * (double)SLODWORD(v19) / 180.0; sub_85D810((float *)&v20, v19); sub_85DA90((float *)&v20, (float *)&v13, (float *)&dword_AB4FE8); v17 = v14; v6 = *(_DWORD *)((char *)a2 + 19); v16 = v13; v7 = *(_DWORD *)((char *)a2 + 15); v18 = v15; v8 = *(_DWORD *)((char *)a2 + 23); v22 = v6; v21 = v7; v9 = *(_DWORD *)((char *)a2 + 27); v23 = v8; v10 = (void *)*a2; v11 = *(_DWORD *)(a2 + 1); v24 = v9; v25 = 0; return sub_6674B0(v2, v11, v10, (int)&v12, (int)&v16, (int)&v21); } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (00667760) -------------------------------------------------------- char __thiscall sub_667760(int *this, _BYTE *a2) { unsigned int v2; // edi bool v3; // zf int *v4; // esi float v5; // ST0C_4 float v6; // ST08_4 int v7; // eax int v8; // edx int v9; // ecx int v10; // edx void *v11; // eax int v12; // ecx int v14; // [esp+18h] [ebp-68h] int v15; // [esp+24h] [ebp-5Ch] int v16; // [esp+28h] [ebp-58h] int v17; // [esp+2Ch] [ebp-54h] int v18; // [esp+30h] [ebp-50h] int v19; // [esp+34h] [ebp-4Ch] int v20; // [esp+38h] [ebp-48h] int *v21; // [esp+3Ch] [ebp-44h] float v22; // [esp+40h] [ebp-40h] char v23; // [esp+44h] [ebp-3Ch] int v24; // [esp+68h] [ebp-18h] int v25; // [esp+6Ch] [ebp-14h] int v26; // [esp+70h] [ebp-10h] int v27; // [esp+74h] [ebp-Ch] char v28; // [esp+78h] [ebp-8h] v2 = 0; v3 = *a2 == 0; v21 = this; if ( v3 ) return 1; v4 = (int *)(a2 + 24); while ( *(int *)((char *)v4 - 21) != -1 ) { v5 = (double)*(unsigned int *)((char *)v4 - 13); v6 = (double)*(unsigned int *)((char *)v4 - 17); sub_69AD10((float *)byte_ADB468, v6, v5, (int)&v14); LODWORD(v22) = *((unsigned __int8 *)v4 - 9); v22 = (double)SLODWORD(v22) * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D810((float *)&v23, v22); sub_85DA90((float *)&v23, (float *)&v15, (float *)&dword_AB4FE8); v19 = v16; v7 = *(v4 - 1); v18 = v15; v8 = *(v4 - 2); v20 = v17; v9 = *v4; v25 = v7; v24 = v8; v10 = v4[1]; v26 = v9; v11 = (void *)*(unsigned __int16 *)((char *)v4 - 23); v12 = *(int *)((char *)v4 - 21); v27 = v10; v28 = 0; if ( !sub_6674B0(v21, v12, v11, (int)&v14, (int)&v18, (int)&v24) ) break; ++v2; v4 = (int *)((char *)v4 + 63); if ( v2 >= (unsigned __int8)*a2 ) return 1; } return 0; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (006678A0) -------------------------------------------------------- char __thiscall sub_6678A0(int *this, _WORD *a2) { _DWORD *v2; // eax int v3; // edx v2 = (_DWORD *)this[15]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(v3 + 548) == *a2 ) break; if ( !v2 ) return 0; } sub_6658E0(this, v3); return 1; } //----- (006678E0) -------------------------------------------------------- _DWORD *__thiscall sub_6678E0(int *this) { _DWORD *result; // eax result = sub_665F60(this); dword_AD8EBC = 0; return result; } //----- (00667AC0) -------------------------------------------------------- int __cdecl sub_667AC0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00667AE0) -------------------------------------------------------- char *__thiscall sub_667AE0(char *this, int a2) { char *result; // eax _BYTE *v3; // esi signed int v4; // ecx result = this; *(_WORD *)this = *(_WORD *)a2; *(_DWORD *)(this + 2) = *(_DWORD *)(a2 + 2); *(_DWORD *)(this + 6) = *(_DWORD *)(a2 + 6); *(_DWORD *)(this + 10) = *(_DWORD *)(a2 + 10); *(_DWORD *)(this + 14) = *(_DWORD *)(a2 + 14); *(_DWORD *)(this + 18) = *(_DWORD *)(a2 + 18); *(_DWORD *)(this + 22) = *(_DWORD *)(a2 + 22); *(_DWORD *)(this + 26) = *(_DWORD *)(a2 + 26); this[30] = *(_BYTE *)(a2 + 30); this[31] = *(_BYTE *)(a2 + 31); this[32] = *(_BYTE *)(a2 + 32); *(_DWORD *)(this + 33) = *(_DWORD *)(a2 + 33); qmemcpy(this + 37, (const void *)(a2 + 37), 0x36u); qmemcpy(this + 91, (const void *)(a2 + 91), 0x75u); v3 = this + 208; v4 = 32; do { *v3 = v3[a2 - (_DWORD)result]; ++v3; --v4; } while ( v4 ); *((_WORD *)result + 120) = *(_WORD *)(a2 + 240); result[242] = *(_BYTE *)(a2 + 242); result[243] = *(_BYTE *)(a2 + 243); result[244] = *(_BYTE *)(a2 + 244); result[245] = *(_BYTE *)(a2 + 245); return result; } //----- (00667C30) -------------------------------------------------------- void *__thiscall sub_667C30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,Char *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; //----- (00667C60) -------------------------------------------------------- char *__thiscall sub_667C60(char *this, int a2) { char *v2; // esi v2 = this; sub_667AE0(this, a2); *((_DWORD *)v2 + 62) = *(_DWORD *)(a2 + 248); v2[252] = *(_BYTE *)(a2 + 252); v2[253] = *(_BYTE *)(a2 + 253); *((_DWORD *)v2 + 64) = *(_DWORD *)(a2 + 256); *((_DWORD *)v2 + 65) = *(_DWORD *)(a2 + 260); *((_DWORD *)v2 + 66) = *(_DWORD *)(a2 + 264); *((_DWORD *)v2 + 67) = *(_DWORD *)(a2 + 268); *((_DWORD *)v2 + 68) = *(_DWORD *)(a2 + 272); *((_DWORD *)v2 + 69) = *(_DWORD *)(a2 + 276); *((_DWORD *)v2 + 70) = *(_DWORD *)(a2 + 280); return v2; } //----- (00667CF0) -------------------------------------------------------- int __thiscall sub_667CF0(int this, int a2, char a3, char a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { int result; // eax result = this; *(_DWORD *)(this + 18) = 0; *(_DWORD *)(this + 14) = 0; *(_DWORD *)(this + 10) = 0; *(_DWORD *)(this + 6) = 0; *(_DWORD *)(this + 2) = 0; *(_DWORD *)(this + 248) = a2; *(_BYTE *)(this + 252) = a3; *(_DWORD *)(this + 256) = a5; *(_BYTE *)(this + 253) = a4; *(_DWORD *)(this + 260) = a6; *(_DWORD *)(this + 264) = a7; *(_DWORD *)(this + 268) = a8; *(_DWORD *)(this + 272) = a9; *(_DWORD *)(this + 276) = a10; *(_DWORD *)(this + 280) = a11; return result; } //----- (00667D70) -------------------------------------------------------- _DWORD *__thiscall sub_667D70(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,Char *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,Char *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; // 9F3910: using guessed type void *NiTPointerListBase,Char *>::`vftable'; //----- (00667E00) -------------------------------------------------------- int __thiscall sub_667E00(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,Char *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,Char *>::`vftable'; return result; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; // 9F3910: using guessed type void *NiTPointerListBase,Char *>::`vftable'; //----- (00667E80) -------------------------------------------------------- _DWORD *__thiscall sub_667E80(_DWORD *this, _DWORD *a2, int a3, int a4, int a5) { _DWORD *result; // eax result = a2; *a2 = 0; a2[1] = 0; if ( this ) *a2 = *this; a2[2] = a5; return result; } //----- (00667EB0) -------------------------------------------------------- int __thiscall sub_667EB0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,Char *>::`vftable'; return result; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; // 9F3920: using guessed type void *PgTList::`vftable'; //----- (00667F30) -------------------------------------------------------- _DWORD *__thiscall sub_667F30(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,Char *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3900: using guessed type void *NiTListBase,Char *>::`vftable'; // 9F3920: using guessed type void *PgTList::`vftable'; //----- (00667FC0) -------------------------------------------------------- int __thiscall sub_667FC0(int *this) { _DWORD *v1; // eax _DWORD *v2; // ecx unsigned int v3; // eax unsigned int v4; // edx int result; // eax char v6; // [esp+0h] [ebp-Ch] v1 = sub_4DD290(this, &v6); v2 = (_DWORD *)*v1; if ( *v1 ) v2 = (_DWORD *)*v2; v3 = v1[2]; v4 = v2[2]; if ( v4 > v3 ) result = *(_DWORD *)(v2[1] + 4 * v3); else result = *(_DWORD *)(v2[1] + 4 * (v3 - v4)); return result; } //----- (00668000) -------------------------------------------------------- void __thiscall sub_668000(_DWORD *this, char *a2) { _DWORD *v2; // ebx unsigned int v3; // ecx signed int v4; // edi char *v5; // eax int v6; // esi unsigned int v7; // eax int v8; // esi const void *v9; // ST10_4 char *v10; // eax const void *v11; // ecx char *v12; // edx unsigned int v13; // ecx char *v14; // edi size_t v15; // esi char *v16; // eax void **v17; // [esp+8h] [ebp-18h] size_t v18; // [esp+14h] [ebp-Ch] unsigned int v19; // [esp+18h] [ebp-8h] void *v20; // [esp+1Ch] [ebp-4h] v2 = this; v3 = this[2]; v4 = (signed int)a2; if ( 15123124 - v3 < (unsigned int)a2 ) std::_Xlength_error("deque too long"); v5 = (char *)(v3 >> 1); if ( v3 >> 1 < 8 ) v5 = (char *)8; if ( a2 < v5 && v3 <= 15123124 - (signed int)v5 ) { a2 = v5; v4 = (signed int)v5; } v6 = v2[3]; v7 = v3 + v4; v19 = v2[3]; v20 = 0; if ( v3 + v4 ) { if ( v7 > 0x3FFFFFFF || (v20 = operator new(4 * v7)) == 0 ) { a2 = 0; std::exception::exception((std::exception *)&v17, (const char *const *)&a2); v17 = &std::bad_alloc::`vftable'; _CxxThrowException(&v17, &_TI2_AVbad_alloc_std__); } } v8 = 4 * v6; v9 = (const void *)(v8 + v2[1]); v18 = 4 * ((4 * v2[2] - v8) >> 2); v10 = (char *)memcpy_0((char *)v20 + v8, v9, v18) + v18; v11 = (const void *)v2[1]; if ( v19 > v4 ) { memcpy_0(v10, v11, 4 * (4 * v4 >> 2)); v15 = 4 * ((v8 - 4 * v4) >> 2); v16 = (char *)memcpy_0(v20, (const void *)(v2[1] + 4 * v4), v15); if ( !v4 ) goto LABEL_19; v13 = v4; v14 = &v16[v15]; goto LABEL_18; } v18 = 4 * (v8 >> 2); v12 = (char *)memcpy_0(v10, v11, v18) + v18; if ( v4 != v19 ) { memset(v12, 0, 4 * (v4 - v19)); v4 = (signed int)a2; } v13 = v19; if ( v19 ) { v14 = (char *)v20; LABEL_18: memset(v14, 0, 4 * v13); v4 = (signed int)a2; } LABEL_19: if ( v2[1] ) operator delete((void *)v2[1]); v2[2] += v4; v2[1] = v20; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00668190) -------------------------------------------------------- _DWORD *__thiscall sub_668190(_DWORD *this, _DWORD *a2, int a3) { _DWORD **v3; // edx _DWORD ***v4; // eax int v5; // ecx _DWORD *result; // eax _DWORD *v7; // edx v3 = 0; if ( *this ) { v4 = *(_DWORD ****)*this; if ( v4 ) v3 = *v4; } v5 = a3 + this[2]; result = a2; *a2 = 0; a2[1] = 0; a2[2] = v5; if ( v3 ) { v7 = *v3; if ( v7 ) *a2 = *v7; } return result; } //----- (006681D0) -------------------------------------------------------- _DWORD *__cdecl sub_6681D0(_DWORD *a1, int a2, int a3, int a4, _DWORD *a5, int a6, unsigned int a7, _DWORD **a8, int a9, int a10) { unsigned int v10; // eax _DWORD *v11; // ecx unsigned int v12; // eax unsigned int v13; // edx int v14; // esi unsigned int v15; // eax _DWORD *v16; // edx unsigned int v17; // ecx _DWORD *result; // eax unsigned int v19; // [esp+20h] [ebp+20h] v10 = a7; if ( a4 != a7 ) { do { v11 = a5; v12 = v10 - 1; v19 = v12; if ( a5 ) v11 = (_DWORD *)*a5; v13 = v11[2]; if ( v13 <= v12 ) v12 -= v13; v14 = *(_DWORD *)(v11[1] + 4 * v12); v15 = a10-- - 1; if ( a8 ) v16 = *a8; else v16 = 0; v17 = v16[2]; if ( v17 <= v15 ) v15 -= v17; sub_667C60(*(char **)(v16[1] + 4 * v15), v14); v10 = v19; } while ( a4 != v19 ); } result = a1; *a1 = 0; a1[1] = 0; if ( !a8 ) goto LABEL_15; if ( *a8 ) { *a1 = **a8; LABEL_15: a1[2] = a10; return result; } a1[2] = a10; return result; } //----- (00668260) -------------------------------------------------------- _DWORD *__cdecl sub_668260(_DWORD *a1, int *a2, int a3, unsigned int a4, int a5, int a6, int a7, _DWORD **a8, int a9, unsigned int a10) { unsigned int v10; // eax unsigned int i; // ecx int v12; // edi unsigned int v13; // edx _DWORD *v14; // edx unsigned int v15; // esi _DWORD *result; // eax v10 = a4; for ( i = a10; v10 != a7; a4 = v10 ) { if ( a2 ) v12 = *a2; else v12 = 0; v13 = *(_DWORD *)(v12 + 8); if ( v13 <= v10 ) v10 -= v13; v14 = a8; if ( a8 ) v14 = *a8; v15 = v14[2]; if ( v15 <= i ) i -= v15; sub_667C60(*(char **)(v14[1] + 4 * i), *(_DWORD *)(*(_DWORD *)(v12 + 4) + 4 * v10)); v10 = a4 + 1; i = a10++ + 1; } result = a1; *a1 = 0; a1[1] = 0; a1[2] = i; if ( a8 ) { if ( *a8 ) *a1 = **a8; } return result; } //----- (006682F0) -------------------------------------------------------- unsigned int __thiscall sub_6682F0(_DWORD *this, const void *a2) { _DWORD *v2; // ebx unsigned int v3; // esi unsigned int result; // eax void *v5; // edi void **v6; // [esp+Ch] [ebp-10h] char *v7; // [esp+18h] [ebp-4h] v2 = this; if ( this[2] <= (unsigned int)(this[4] + 1) ) sub_668000(this, (char *)1); v3 = v2[4] + v2[3]; result = v2[2]; if ( result <= v3 ) v3 -= result; if ( !*(_DWORD *)(v2[1] + 4 * v3) ) { result = (unsigned int)operator new(0x11Cu); if ( !result ) { v7 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v7); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v2[1] + 4 * v3) = result; } v5 = *(void **)(v2[1] + 4 * v3); if ( v5 ) qmemcpy(v5, a2, 0x11Cu); ++v2[4]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00668390) -------------------------------------------------------- int __thiscall sub_668390(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[21] ) { do { sub_6DA320((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 21) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (006683E0) -------------------------------------------------------- _DWORD *__cdecl sub_6683E0(_DWORD *a1, int **a2, int a3, int a4, _DWORD ***a5, int a6, unsigned int a7, _DWORD ****a8, int a9, int a10) { int v11; // [esp-28h] [ebp-30h] int v12; // [esp-24h] [ebp-2Ch] _DWORD *v13; // [esp-1Ch] [ebp-24h] int v14; // [esp-18h] [ebp-20h] unsigned int v15; // [esp-14h] [ebp-1Ch] _DWORD **v16; // [esp-10h] [ebp-18h] int v17; // [esp-Ch] [ebp-14h] int v18; // [esp-8h] [ebp-10h] _DWORD *v19; // [esp-4h] [ebp-Ch] int *v20; // [esp+4h] [ebp-4h] v19 = a1; v16 = 0; v17 = 0; v20 = (int *)&v16; if ( a8 && *a8 ) v16 = **a8; v18 = a10; v13 = 0; v14 = 0; v20 = (int *)&v13; if ( a5 && *a5 ) v13 = **a5; v15 = a7; v11 = 0; v12 = 0; v20 = &v11; if ( a2 && *a2 ) v11 = **a2; sub_6681D0(a1, v11, v12, a4, v13, v14, v15, v16, v17, v18); return a1; } //----- (00668470) -------------------------------------------------------- _DWORD *__cdecl sub_668470(_DWORD *a1, int ***a2, int a3, unsigned int a4, int **a5, int a6, int a7, _DWORD ****a8, int a9, unsigned int a10) { int *v11; // [esp-28h] [ebp-30h] int v12; // [esp-24h] [ebp-2Ch] int v13; // [esp-1Ch] [ebp-24h] int v14; // [esp-18h] [ebp-20h] int v15; // [esp-14h] [ebp-1Ch] _DWORD **v16; // [esp-10h] [ebp-18h] int v17; // [esp-Ch] [ebp-14h] unsigned int v18; // [esp-8h] [ebp-10h] _DWORD *v19; // [esp-4h] [ebp-Ch] int *v20; // [esp+4h] [ebp-4h] v19 = a1; v16 = 0; v17 = 0; v20 = (int *)&v16; if ( a8 && *a8 ) v16 = **a8; v18 = a10; v13 = 0; v14 = 0; v20 = &v13; if ( a5 && *a5 ) v13 = **a5; v15 = a7; v11 = 0; v12 = 0; v20 = (int *)&v11; if ( a2 && *a2 ) v11 = **a2; sub_668260(a1, v11, v12, a4, v13, v14, v15, v16, v17, v18); return a1; } //----- (00668500) -------------------------------------------------------- _DWORD *__thiscall sub_668500(int *this, _DWORD *a2, _DWORD ******a3, int a4, int a5, _DWORD ******a6, int a7, int a8) { int *v8; // esi _DWORD *v9; // eax unsigned int v10; // edi unsigned int v11; // ebx _DWORD *v12; // eax bool v13; // zf int v14; // ecx int v15; // eax _DWORD *v16; // eax int ***v18; // [esp-24h] [ebp-5Ch] int v19; // [esp-20h] [ebp-58h] int v20; // [esp-1Ch] [ebp-54h] int **v21; // [esp-18h] [ebp-50h] int v22; // [esp-14h] [ebp-4Ch] int v23; // [esp-10h] [ebp-48h] _DWORD ****v24; // [esp-Ch] [ebp-44h] _DWORD *v25; // [esp-8h] [ebp-40h] int v26; // [esp-4h] [ebp-3Ch] char v27; // [esp+Ch] [ebp-2Ch] int *****v28; // [esp+18h] [ebp-20h] unsigned int v29; // [esp+20h] [ebp-18h] int ****v30; // [esp+24h] [ebp-14h] int v31; // [esp+2Ch] [ebp-Ch] int ***v32; // [esp+30h] [ebp-8h] _DWORD *****v33; // [esp+34h] [ebp-4h] v8 = this; v24 = 0; v25 = 0; v33 = &v24; if ( a3 && *a3 ) v24 = **a3; sub_667E80(this, &v30, (int)v24, (int)v25, a5); v24 = 0; v25 = 0; v33 = &v24; if ( a6 && *a6 ) v24 = **a6; sub_667E80(v8, &v28, (int)v24, (int)v25, a8); v9 = sub_4DD290(v8, &v27); v10 = v29; v33 = (_DWORD *****)(v31 - v9[2]); v11 = v29 - v31; v12 = sub_4DD2B0(v8, &v27); v13 = (unsigned int)v33 >= v12[2] - v10; v32 = (int ***)&v24; v24 = 0; v25 = 0; if ( v13 ) { if ( v30 && *v30 ) v24 = (_DWORD ****)**v30; v26 = v31; v32 = &v21; sub_4DD2B0(v8, &v21); v18 = 0; v19 = 0; v32 = (int ***)&v18; if ( v28 && *v28 ) v18 = **v28; sub_668470(&v27, v18, v19, v29, v21, v22, v23, v24, (int)v25, v26); if ( v11 > 0 ) { v15 = v8[4]; do { if ( v15 ) { if ( !--v15 ) v8[3] = 0; } --v11; } while ( v11 ); v8[4] = v15; } } else { if ( v28 && *v28 ) v24 = (_DWORD ****)**v28; v26 = v29; v21 = 0; v22 = 0; v32 = &v21; if ( v30 && *v30 ) v21 = **v30; v23 = v31; v32 = (int ***)&v18; sub_4DD290(v8, &v18); sub_6683E0(&v27, (int **)v18, v19, v20, (_DWORD ***)v21, v22, v23, v24, (int)v25, v26); if ( v11 > 0 ) { v14 = v8[4]; do { if ( v14 ) { if ( v8[2] <= (unsigned int)++v8[3] ) v8[3] = 0; if ( !--v14 ) v8[3] = 0; } --v11; } while ( v11 ); v8[4] = v14; } } v26 = (int)v33; v25 = a2; v16 = sub_4DD290(v8, &v27); sub_668190(v16, v25, v26); return a2; } //----- (006686E0) -------------------------------------------------------- void __thiscall sub_6686E0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax unsigned int v3; // edi int v4; // eax bool v5; // zf void **v6; // eax v1 = this; v2 = this[4]; if ( v2 ) { do { if ( v2 ) { this[4] = --v2; if ( !v2 ) this[3] = 0; } } while ( this[4] ); } v3 = this[2]; while ( v3 > 0 ) { v4 = v1[1]; v5 = *(_DWORD *)(v4 + 4 * --v3) == 0; v6 = (void **)(v4 + 4 * v3); if ( !v5 ) operator delete(*v6); } if ( v1[1] ) operator delete((void *)v1[1]); v1[1] = 0; v1[2] = 0; } //----- (00668770) -------------------------------------------------------- _DWORD *__thiscall sub_668770(int *this, _DWORD *a2, _DWORD ********a3, int a4, int a5) { int *v5; // edi _DWORD ******v7; // [esp-18h] [ebp-24h] int v8; // [esp-14h] [ebp-20h] _DWORD ******v9; // [esp-Ch] [ebp-18h] int v10; // [esp-8h] [ebp-14h] int v11; // [esp-4h] [ebp-10h] _DWORD *******v12; // [esp+8h] [ebp-4h] v12 = &v9; v5 = this; sub_668190(&a3, &v9, 1); v7 = 0; v8 = 0; v12 = &v7; if ( a3 && *a3 ) v7 = **a3; sub_668500(v5, a2, v7, v8, a5, v9, v10, v11); return a2; } //----- (006687D0) -------------------------------------------------------- _DWORD *__cdecl sub_6687D0(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 33) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 33) ); } return result; } //----- (006687F0) -------------------------------------------------------- char *sub_6687F0() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA730; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00668810) -------------------------------------------------------- char *sub_668810() { if ( !byte_ACAD5C ) sub_420410(); return byte_ACA418; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00668830) -------------------------------------------------------- signed int __cdecl sub_668830(char a1) { signed int result; // eax switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: result = 0; break; case 6: case 7: case 8: case 9: case 0xA: result = 2; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: result = 1; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: result = 3; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: result = 4; break; case 0x1A: case 0x1B: result = 5; break; default: result = 7; break; } return result; } //----- (006688B0) -------------------------------------------------------- LONG __thiscall sub_6688B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int (__thiscall *v4)(_DWORD *, int); // edx int v5; // ebx _DWORD *v6; // edi _DWORD *v7; // edi LONG result; // eax int v9; // [esp+0h] [ebp-20h] int *v10; // [esp+10h] [ebp-10h] int v11; // [esp+1Ch] [ebp-4h] v3 = this; v4 = *(int (__thiscall **)(_DWORD *, int))(*this + 4); v11 = 0; v5 = v4(this, a2); v6 = *(_DWORD **)(v3[2] + 4 * v5); if ( v6 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, v6[1]) ) { v6 = (_DWORD *)*v6; if ( !v6 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 16))(v3, v6, v9); v9 = a3; v10 = &v9; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 12))(v3, v6, a2); } else { LABEL_4: v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, int))(*v3 + 20))(v3, v9); v9 = a3; v10 = &v9; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 12))(v3, v7, a2); *v7 = *(_DWORD *)(v3[2] + 4 * v5); *(_DWORD *)(v3[2] + 4 * v5) = v7; ++v3[3]; } result = a3; v11 = -1; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); if ( !result ) { if ( a3 ) result = (**(int (__thiscall ***)(int, signed int))a3)(a3, 1); } } return result; } //----- (006689E0) -------------------------------------------------------- int __cdecl sub_6689E0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00668B20) -------------------------------------------------------- _DWORD *__thiscall sub_668B20(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[1] = 0; this[2] = -1; *this = &BonePartitionReCreate::`vftable'; this[3] = a2; return result; } // 9F3FE8: using guessed type void *BonePartitionReCreate::`vftable'; //----- (00668B50) -------------------------------------------------------- _DWORD *__thiscall sub_668B50(_DWORD *this) { _DWORD *v1; // ebx char *v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi int v5; // esi int v7; // [esp+0h] [ebp-128h] char Src; // [esp+10h] [ebp-118h] int *v9; // [esp+118h] [ebp-10h] int v10; // [esp+124h] [ebp-4h] v9 = &v7; v1 = this; v2 = (char *)this[24]; if ( v2 ) return sub_801640(v2); if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s%s\\%s.kfm", byte_ACA628, "LetterWing", "LetterWing"); v10 = 0; v3 = sub_803770(&Src, 0, 1, 0); v4 = v3; v10 = -1; if ( v3 ) { v5 = v1[24]; if ( (_DWORD *)v5 != v3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v1[24] = v4; InterlockedIncrement(v4 + 1); } dword_BA4564 = 1; v2 = (char *)v4; return sub_801640(v2); } return 0; } // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (00668C50) -------------------------------------------------------- char __thiscall sub_668C50(_DWORD *this) { _DWORD *v1; // ebx char *v2; // eax _DWORD *v3; // eax int v4; // esi _DWORD *v5; // edi int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v9; // eax _DWORD *v10; // edi int v11; // esi void (__thiscall ***v12)(_DWORD, signed int); // esi int v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v1 = this; v13 = 0; v14 = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA418, "CharDamageShake.nif"); sub_8F66B0(v2, (int)&v13, 0); if ( !v13 ) return 0; v3 = sub_8F5910((_DWORD *)v13, (int)dword_BA3BB8); v4 = v1[97]; v5 = v3; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[97] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v6 = v1[97]; if ( !v6 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v13; v14 = -1; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } return 0; } *(_WORD *)(v6 + 8) = *(_WORD *)(v6 + 8) & 0xFFF7 | 1; v9 = operator new(0xE8u); LOBYTE(v14) = 1; if ( v9 ) v10 = sub_85A1C0(v9, 0); else v10 = 0; v11 = v1[98]; LOBYTE(v14) = 0; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[98] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[97] + 72))(v1[98]); v14 = -1; if ( v13 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00668F90) -------------------------------------------------------- signed int __thiscall sub_668F90(_BYTE *this, int a2, int a3) { _BYTE *v3; // edi int v4; // eax int v5; // esi int v6; // eax unsigned __int16 *v7; // eax v3 = this; if ( a2 ) { v4 = sub_402BA0((int)dword_BA4858, a2); v5 = v4; if ( v4 ) { v6 = *(_DWORD *)(v4 + 188); if ( v6 ) { if ( *(_DWORD *)(v6 + 12) ) { v7 = (unsigned __int16 *)sub_402BA0((int)dword_BA4850, *(_DWORD *)(v5 + 184)); if ( v7 ) sub_870FE0( *(_DWORD **)(*(_DWORD *)(v5 + 188) + 12), v7, *(_DWORD *)(*(_DWORD *)(v5 + 188) + 8), v3[12], 4, 1); } } } } return 1; } //----- (00669010) -------------------------------------------------------- int __thiscall sub_669010(_DWORD *this, int a2, char a3) { _DWORD *v3; // edi int result; // eax volatile LONG *v5; // esi const char *v6; // [esp-8h] [ebp-120h] const char *v7; // [esp-8h] [ebp-120h] char *v8; // [esp-4h] [ebp-11Ch] char **v9; // [esp+Ch] [ebp-10Ch] char Src; // [esp+10h] [ebp-108h] v3 = this; result = sub_670230(this, a2); if ( !result ) { switch ( a2 ) { case 4: v8 = sub_421950(); if ( a3 ) v6 = "%sGetQuestLowLevel.nif"; else v6 = "%sGetQuest.nif"; sprintf(&Src, v6, v8); goto LABEL_14; case 5: case 20: if ( !byte_ACAD5C ) sub_420410(); v8 = byte_ACA520; v7 = "%sGetQuest.nif"; goto LABEL_13; case 6: v8 = sub_421950(); sprintf(&Src, "%sIngQuest.nif", v8); goto LABEL_14; case 8: v8 = sub_421950(); sprintf(&Src, "%sFinQuest.nif", v8); goto LABEL_14; case 9: v8 = sub_421950(); v7 = "%sGetQuestLowLevel.nif"; LABEL_13: sprintf(&Src, v7, v8); LABEL_14: v8 = (char *)1; v5 = sub_8F63D0(&Src, 0); if ( !v5 ) goto LABEL_16; v9 = &v8; v8 = (char *)v5; InterlockedIncrement(v5 + 1); sub_6688B0(v3 + 33, a2, (int)v8); result = sub_85BD60((void *)v5); break; default: LABEL_16: result = 0; break; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00669170) -------------------------------------------------------- _DWORD *__thiscall sub_669170(_DWORD *this, unsigned __int16 a2) { _DWORD *result; // eax unsigned __int16 *v3; // esi const char *v4; // ebx _DWORD *v5; // eax int v6; // esi int v7; // edi _DWORD *v8; // edi int v9; // eax int v10; // [esp-4h] [ebp-148h] int v11; // [esp+0h] [ebp-144h] void **v12; // [esp+10h] [ebp-134h] int v13; // [esp+14h] [ebp-130h] int v14; // [esp+18h] [ebp-12Ch] _DWORD *v15; // [esp+1Ch] [ebp-128h] _DWORD *v16; // [esp+20h] [ebp-124h] int v17; // [esp+24h] [ebp-120h] int *v18; // [esp+28h] [ebp-11Ch] char Src; // [esp+2Ch] [ebp-118h] int *v20; // [esp+134h] [ebp-10h] int v21; // [esp+140h] [ebp-4h] v20 = &v11; v15 = this; result = sub_66FE60(this, a2); if ( result ) return result; v17 = a2; v3 = sub_59AF70(a2); if ( !v3 ) return 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s%s\\%s.kfm", byte_ACA628, v3 + 49, v3 + 49); v21 = 0; v18 = sub_803770(&Src, 0, 1, 0); v21 = -1; if ( !v18 ) return 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (const char *)(v3 + 82); v10 = (int)(v3 + 82); sprintf(&Src, "%s%s\\%s.dds", byte_ACA628, v3 + 49, v3 + 82); v5 = sub_865EB0(&Src, (int)&unk_ABD7DC, 0); v6 = (int)v5; v16 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); v21 = 2; if ( !strcmp(v4, "-") || !strcmp(v4, (const char *)&unk_9F3976) ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v6 = 0; v16 = 0; } } else if ( v6 ) { v7 = (int)v18; v9 = v18[3]; if ( v9 ) { v13 = 0; v14 = -1; v12 = &ResetTexture::`vftable'; LOBYTE(v21) = 3; sub_8CFE00(&v12, v9, (int)dword_BA457C, v6); LOBYTE(v21) = 2; v12 = &Ns_TourScene::`vftable'; } goto LABEL_17; } v7 = (int)v18; LABEL_17: v10 = v7; v18 = &v10; InterlockedIncrement((volatile LONG *)(v7 + 4)); sub_6688B0(v15 + 8, v17, v10); dword_BA4564 = 1; v8 = sub_801640((char *)v7); v21 = -1; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } return v8; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (00669410) -------------------------------------------------------- _DWORD *__thiscall sub_669410(_DWORD *this, unsigned __int16 a2) { _DWORD *result; // eax int v3; // esi int v4; // esi int v5; // ecx int v6; // edi unsigned __int8 (__thiscall *v7)(int, _DWORD); // eax int *v8; // eax int v9; // ebx _DWORD *v10; // eax int v11; // edi int v12; // eax int v13; // esi _DWORD *v14; // esi int v15; // [esp-4h] [ebp-14Ch] int v16; // [esp+0h] [ebp-148h] void **v17; // [esp+10h] [ebp-138h] int v18; // [esp+14h] [ebp-134h] int v19; // [esp+18h] [ebp-130h] _DWORD *v20; // [esp+1Ch] [ebp-12Ch] int *v21; // [esp+20h] [ebp-128h] int v22; // [esp+24h] [ebp-124h] float v23; // [esp+28h] [ebp-120h] int v24; // [esp+2Ch] [ebp-11Ch] char Src; // [esp+30h] [ebp-118h] int *v26; // [esp+138h] [ebp-10h] int v27; // [esp+144h] [ebp-4h] v26 = &v16; v20 = this; v21 = (int *)a2; result = sub_670050(this, (char *)a2); if ( result ) return result; v3 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a2) ) { if ( a2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * a2) ) v4 = *(_DWORD *)(v5 + 4 * a2); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v6 = dword_ACDA48; v7 = *(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA48 + 16); v24 = v4; if ( v7(dword_ACDA48, a2) ) { if ( a2 <= *(_WORD *)(v6 + 200) ) { v8 = (int *)(*(_DWORD *)(v6 + 196) + 4 * a2); if ( *v8 ) v22 = *v8; else v22 = 0; } else { v22 = 0; } } else { v22 = 0; } if ( !v4 ) return 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s%s\\%s.kfm", byte_ACA628, v4 + 34, v4 + 34); v27 = 0; v23 = COERCE_FLOAT(sub_803770(&Src, 0, 1, 0)); v27 = -1; if ( !byte_ACAD5C ) sub_420410(); v15 = v4 + 66; sprintf(&Src, "%s%s\\%s.dds", byte_ACA628, v4 + 34, v4 + 66); v9 = 0; v24 = 0; v27 = 2; if ( strcmp((const char *)(v4 + 66), "-") && strcmp((const char *)(v4 + 66), (const char *)&unk_9F3996) ) { v10 = sub_865EB0(&Src, (int)&unk_ABD7DC, 0); sub_56FF80(&v24, (int)v10); v9 = v24; } v11 = LODWORD(v23); if ( v23 == 0.0 ) { v27 = -1; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return 0; } v12 = *(_DWORD *)(LODWORD(v23) + 12); v23 = (double)*(unsigned int *)(v22 + 83) / 1000.0; v23 = fabs(v23); *(float *)(v12 + 100) = v23; if ( v9 ) { v18 = 0; v19 = -1; v17 = &ResetTexture::`vftable'; LOBYTE(v27) = 3; sub_8CFE00(&v17, v12, (int)dword_BA457C, v9); LOBYTE(v27) = 2; v17 = &Ns_TourScene::`vftable'; } v13 = (unsigned __int16)v21; v21 = &v15; v15 = v11; InterlockedIncrement((volatile LONG *)(v11 + 4)); sub_6688B0(v20 + 4, v13, v15); dword_BA4564 = 1; v14 = sub_801640((char *)v11); v27 = -1; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } return v14; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; // BA4564: using guessed type int dword_BA4564; //----- (00669780) -------------------------------------------------------- void (__thiscall ***__thiscall sub_669780(_DWORD *this, char a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int) { unsigned __int8 v4; // bl void (__thiscall ***result)(_DWORD, signed int); // eax const CHAR *v6; // ST0C_4 const CHAR *v7; // ST0C_4 _DWORD *v8; // edi void **v9; // eax int v10; // esi _DWORD *v11; // eax int v12; // esi const char *v13; // [esp-10h] [ebp-140h] const CHAR *v14; // [esp-8h] [ebp-138h] int v15; // [esp-4h] [ebp-134h] _DWORD *v16; // [esp+10h] [ebp-120h] int *v17; // [esp+14h] [ebp-11Ch] void *v18; // [esp+18h] [ebp-118h] char Src; // [esp+1Ch] [ebp-114h] int v20; // [esp+12Ch] [ebp-4h] v16 = this; v17 = (int *)a4; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v4 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v4 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v4 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v4 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v4 = 21; break; case 0x1A: case 0x1B: v4 = 26; break; default: v4 = 0; break; } LOBYTE(v18) = v4; result = sub_670100(this, (int)v18, a3, a4); if ( !result ) { if ( a3 == 1 ) { if ( !a4 ) { if ( !byte_ACAD5C ) sub_420410(); v15 = (int)sub_66FC50((char)v18); v6 = sub_66FC50((char)v18); sprintf(&Src, "%s%s-m\\%s-m.nif", byte_ACA628, v6, v15); goto LABEL_26; } if ( !byte_ACAD5C ) sub_420410(); v15 = a4; v14 = sub_66FC50((char)v18); v13 = "%s%s-m\\set%03d.nif"; } else { if ( !a4 ) { if ( !byte_ACAD5C ) sub_420410(); v15 = (int)sub_66FC50((char)v18); v7 = sub_66FC50((char)v18); sprintf(&Src, "%s%s-f\\%s-f.nif", byte_ACA628, v7, v15); goto LABEL_26; } if ( !byte_ACAD5C ) sub_420410(); v15 = a4; v14 = sub_66FC50((char)v18); v13 = "%s%s-f\\set%03d.nif"; } sprintf(&Src, v13, byte_ACA628, v14, v15); LABEL_26: v15 = 1; v8 = 0; v9 = (void **)sub_8F63D0(&Src, 0); v10 = (int)v9; if ( v9 ) { sub_85AB50(v9, "CharSet"); v11 = operator new(0x34u); v18 = v11; v20 = 0; if ( v11 ) v8 = sub_672A90(v11); v20 = -1; sub_672CA0(v8, v10); v12 = (unsigned __int16)v17 | ((a3 | (v4 << 8)) << 16); v17 = &v15; v15 = (int)v8; if ( v8 ) InterlockedIncrement(v8 + 1); sub_6688B0(v16 + 25, v12, v15); result = (void (__thiscall ***)(_DWORD, signed int))v8; } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00669A10) -------------------------------------------------------- int __thiscall sub_669A10(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // esi void **v5; // eax int v7; // [esp-4h] [ebp-12Ch] int *v8; // [esp+10h] [ebp-118h] char v9; // [esp+14h] [ebp-114h] int v10; // [esp+124h] [ebp-4h] v8 = 0; v10 = 0; v3 = this + 89; sub_455570(this + 89, a2, (int *)&v8); v4 = (int)v8; v10 = -1; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v9, "%sHDetail\\%s.tga", byte_ACA628, a3); v5 = (void **)sub_486130((int)&v9); v4 = (int)v5; if ( v5 ) { sub_85AB50(v5, "HairDetailTexture"); v8 = &v7; v7 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); sub_6688B0(v3, a2, v7); } } return v4; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00669B20) -------------------------------------------------------- int __thiscall sub_669B20(_DWORD *this, char a2, char a3, unsigned __int16 a4) { unsigned __int8 v4; // bl int result; // eax const CHAR *v6; // ST0C_4 const CHAR *v7; // ST0C_4 void **v8; // eax volatile LONG *v9; // edi int v10; // esi int v11; // esi int v12; // [esp-4h] [ebp-124h] _DWORD *v13; // [esp+Ch] [ebp-114h] int *v14; // [esp+10h] [ebp-110h] volatile LONG *v15; // [esp+14h] [ebp-10Ch] char Src; // [esp+18h] [ebp-108h] v13 = this; LOBYTE(v14) = a3; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v4 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v4 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v4 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v4 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v4 = 21; break; case 0x1A: case 0x1B: v4 = 26; break; default: v4 = 0; break; } LOBYTE(v15) = v4; result = sub_6703A0(this, v15, (unsigned __int8)v14, a4); if ( !result ) { if ( (_BYTE)v14 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v15 = (volatile LONG *)a4; v6 = sub_66FC50(v4); sprintf(&Src, "%s%s-m\\Face%03d.nif", byte_ACA628, v6, a4); } else { if ( !byte_ACAD5C ) sub_420410(); v15 = (volatile LONG *)a4; v7 = sub_66FC50(v4); sprintf(&Src, "%s%s-f\\Face%03d.nif", byte_ACA628, v7, a4); } v12 = 1; v8 = (void **)sub_8F63D0(&Src, 0); v9 = (volatile LONG *)v8; if ( v8 ) { sub_85AB50(v8, "Face"); v10 = (unsigned __int8)v14 | (v4 << 8); v14 = &v12; v11 = (unsigned int)v15 | (v10 << 16); v12 = (int)v9; InterlockedIncrement(v9 + 1); sub_6688B0(v13 + 41, v11, v12); dword_BA4564 = 1; result = sub_85BD60((void *)v9); } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (00669D20) -------------------------------------------------------- void **__thiscall sub_669D20(_DWORD *this, char a2, char a3, unsigned __int16 a4) { unsigned __int8 v4; // bl void **result; // eax const CHAR *v6; // esi void **v7; // eax void **v8; // edi int v9; // esi int v10; // esi int v11; // [esp-4h] [ebp-124h] _DWORD *v12; // [esp+Ch] [ebp-114h] int *v13; // [esp+10h] [ebp-110h] int v14; // [esp+14h] [ebp-10Ch] char v15; // [esp+18h] [ebp-108h] v12 = this; LOBYTE(v13) = a3; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v4 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v4 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v4 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v4 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v4 = 21; break; case 0x1A: case 0x1B: v4 = 26; break; default: v4 = 0; break; } LOBYTE(v14) = v4; result = (void **)sub_6705C0(this, v14, (unsigned __int8)v13, a4); if ( !result ) { v6 = sub_66FC50(v4); if ( (_BYTE)v13 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v14 = a4; sprintf(&v15, "%s%s-m\\%s-m-face%03d.dds", byte_ACA628, v6, v6, a4); } else { if ( !byte_ACAD5C ) sub_420410(); v14 = a4; sprintf(&v15, "%s%s-f\\%s-f-face%03d.dds", byte_ACA628, v6, v6, a4); } v7 = (void **)sub_486130((int)&v15); v8 = v7; if ( v7 ) { sub_85AB50(v7, "FaceTexture"); v9 = (unsigned __int8)v13 | (v4 << 8); v13 = &v11; v10 = v14 | (v9 << 16); v11 = (int)v8; InterlockedIncrement((volatile LONG *)v8 + 1); sub_6688B0(v12 + 77, v10, v11); } result = v8; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00669FF0) -------------------------------------------------------- void **__thiscall sub_669FF0(_DWORD *this, char a2, char a3, unsigned __int16 a4) { unsigned __int8 v4; // bl void **result; // eax const CHAR *v6; // edi int v7; // eax void **v8; // eax void **v9; // edi int v10; // esi const char *v11; // [esp-10h] [ebp-134h] const CHAR *v12; // [esp-8h] [ebp-12Ch] int v13; // [esp-4h] [ebp-128h] _DWORD *v14; // [esp+Ch] [ebp-118h] unsigned int v15; // [esp+10h] [ebp-114h] int *v16; // [esp+14h] [ebp-110h] int v17; // [esp+18h] [ebp-10Ch] char v18; // [esp+1Ch] [ebp-108h] LOBYTE(v15) = a3; v14 = this; v16 = (int *)a4; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v4 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v4 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v4 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v4 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v4 = 21; break; case 0x1A: case 0x1B: v4 = 26; break; default: v4 = 0; break; } LOBYTE(v17) = v4; result = (void **)sub_670780(this, v17, v15, a4); if ( !result ) { v6 = sub_66FC50(v17); if ( (_BYTE)v15 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v7 = (unsigned __int16)v16; v13 = (unsigned __int16)v16; v12 = v6; v11 = "%s%s-m\\EyeShape%03d.dds"; } else { if ( !byte_ACAD5C ) sub_420410(); v7 = (unsigned __int16)v16; v13 = (unsigned __int16)v16; v12 = v6; v11 = "%s%s-f\\EyeShape%03d.dds"; } v17 = v7; sprintf(&v18, v11, byte_ACA628, v12, v13); v8 = (void **)sub_486130((int)&v18); v9 = v8; if ( v8 ) { sub_85AB50(v8, "EyeTexture"); v16 = &v13; v10 = v17 | (((unsigned __int8)v15 | (v4 << 8)) << 16); v13 = (int)v9; InterlockedIncrement((volatile LONG *)v9 + 1); sub_6688B0(v14 + 93, v10, v13); result = v9; } else if ( (_WORD)v16 ) { result = (void **)sub_669FF0(v4, v15, 0); } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066A310) -------------------------------------------------------- int *__thiscall sub_66A310(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // ebx int *v3; // edi int *result; // eax _DWORD *v5; // eax int *v6; // edi int v7; // [esp-4h] [ebp-12Ch] int *v8; // [esp+10h] [ebp-118h] char Src; // [esp+14h] [ebp-114h] int v10; // [esp+124h] [ebp-4h] v8 = 0; v2 = this + 49; v10 = 0; sub_455570(this + 49, a2, (int *)&v8); v3 = v8; v10 = -1; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (*(void (__thiscall **)(int *, signed int))*v3)(v3, 1); result = v3; } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sUpgradeTexEff%02u.nif", byte_ACA730, a2); v5 = sub_8F63D0(&Src, 0); v6 = v5; if ( v5 ) { v7 = (int)v5; v8 = &v7; InterlockedIncrement(v5 + 1); sub_6688B0(v2, a2, v7); result = v6; } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066A510) -------------------------------------------------------- char __stdcall sub_66A510(char *a1, char a2, int a3, char a4, char a5) { int v5; // edi char v6; // bl char *v7; // eax char v8; // cl char v9; // cl char v10; // al const CHAR *v11; // ST08_4 const CHAR *v12; // ST08_4 unsigned int v13; // eax char *v14; // edi char *v15; // edi char *v16; // esi char v17; // cl char result; // al char v19; // [esp+17h] [ebp-45h] char v20[64]; // [esp+18h] [ebp-44h] v5 = a3; v19 = 0; switch ( a5 ) { case 1: case 2: case 3: case 4: case 5: v6 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v6 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v6 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v6 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v6 = 21; break; case 0x1A: case 0x1B: v6 = 26; break; default: v6 = 0; break; } if ( *(_BYTE *)a3 != 95 ) goto LABEL_34; sprintf(a1, "Common\\"); if ( *(_BYTE *)(a3 + 1) == 67 ) { v19 = 1; goto LABEL_28; } v7 = a1 - 1; if ( a4 == 1 ) { do v8 = (v7++)[1]; while ( v8 ); *(_WORD *)v7 = 23629; } else { do v9 = (v7++)[1]; while ( v9 ); *(_WORD *)v7 = 23622; } v7[2] = 0; v10 = *(_BYTE *)(a3 + 1); if ( v10 == 83 ) { v19 = 2; goto LABEL_28; } if ( v10 != 71 ) { LABEL_34: if ( a4 == 1 ) { v11 = sub_66FC50(a5); sprintf(a1, "%s-m\\", v11); } else { v12 = sub_66FC50(a5); sprintf(a1, "%s-f\\", v12); } goto LABEL_28; } v19 = 3; if ( v6 == 1 || v6 == 6 || v6 == 21 ) { *(_DWORD *)&a1[strlen(a1)] = 6046534; v5 = a3; } else { *(_DWORD *)&a1[strlen(a1)] = 6049089; v5 = a3; } LABEL_28: memset(v20, 0, 0x36u); if ( a2 ) sprintf(v20, "%s.nif", v5); else sprintf(v20, "%s.dds", v5); v13 = strlen(v20) + 1; v14 = &a1[strlen(a1)]; qmemcpy(v14, v20, 4 * (v13 >> 2)); v16 = &v20[4 * (v13 >> 2)]; v15 = &v14[4 * (v13 >> 2)]; v17 = v13; result = v19; qmemcpy(v15, v16, v17 & 3); return result; } // 66A510: using guessed type char var_44[64]; //----- (0066A740) -------------------------------------------------------- char __thiscall sub_66A740(_DWORD *this, unsigned __int8 a2) { int v2; // edi int v3; // ebx void (__thiscall ***v4)(void *, signed int); // esi unsigned __int8 v5; // al int v6; // eax const CHAR *v7; // edi unsigned __int8 v8; // al int v9; // eax const CHAR *v10; // esi unsigned __int8 v11; // al int v12; // eax const CHAR *v13; // esi void **v14; // eax int v15; // edi _DWORD *v16; // eax _DWORD *v17; // esi int v18; // edi void (__thiscall ***v19)(void *, signed int); // esi unsigned __int8 v20; // al int v21; // eax const CHAR *v22; // edi unsigned __int8 v23; // al int v24; // eax const CHAR *v25; // esi unsigned __int8 v26; // al int v27; // eax const CHAR *v28; // esi void **v29; // eax int v30; // edi _DWORD *v31; // eax _DWORD *v32; // esi int v33; // ebx void (__thiscall ***v34)(void *, signed int); // esi unsigned __int8 v35; // al int v36; // eax const CHAR *v37; // esi void **v38; // eax int v39; // edi _DWORD *v40; // eax _DWORD *v41; // esi int v42; // ebx void (__thiscall ***v43)(void *, signed int); // esi unsigned __int8 v44; // al int v45; // eax const CHAR *v46; // esi void **v47; // eax int v48; // edi _DWORD *v49; // eax _DWORD *v50; // esi int v51; // ebx void (__thiscall ***v52)(void *, signed int); // esi unsigned __int8 v53; // al int v54; // eax const CHAR *v55; // esi void **v56; // eax int v57; // edi _DWORD *v58; // eax _DWORD *v59; // esi int v60; // ebx void (__thiscall ***v61)(void *, signed int); // esi unsigned __int8 v62; // al int v63; // eax const CHAR *v64; // esi void **v65; // eax int v66; // edi _DWORD *v67; // eax _DWORD *v68; // esi int v70; // [esp-4h] [ebp-13Ch] int v71; // [esp+10h] [ebp-128h] void *v72; // [esp+14h] [ebp-124h] _DWORD *v73; // [esp+18h] [ebp-120h] int i; // [esp+1Ch] [ebp-11Ch] void *v75; // [esp+20h] [ebp-118h] char Src; // [esp+24h] [ebp-114h] int v77; // [esp+134h] [ebp-4h] i = 0; v71 = a2 << 24; v73 = this + 25; do { v2 = i; v3 = v71 | (unsigned __int16)i | 0x10000; v75 = 0; v77 = 0; sub_455570(v73, v3, (int *)&v75); v4 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v4)(v4, 1); } else { if ( v2 ) { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v11 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v11 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v11 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v11 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v11 = 21; break; case 0x1Au: case 0x1Bu: v11 = 26; break; default: v11 = 0; break; } v12 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v11); v13 = &byte_9A8050; if ( v12 ) v13 = (const CHAR *)(v12 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = v2; sprintf(&Src, "%s%s-m\\set%03d.nif", byte_ACA628, v13, v2); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v5 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v5 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v5 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v5 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v5 = 21; break; case 0x1Au: case 0x1Bu: v5 = 26; break; default: v5 = 0; break; } v6 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v5); v7 = &byte_9A8050; if ( v6 ) v7 = (const CHAR *)(v6 + 5); switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v8 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v8 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v8 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v8 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v8 = 21; break; case 0x1Au: case 0x1Bu: v8 = 26; break; default: v8 = 0; break; } v9 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v8); v10 = &byte_9A8050; if ( v9 ) v10 = (const CHAR *)(v9 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = (int)v7; sprintf(&Src, "%s%s-m\\%s-m.nif", byte_ACA628, v10, v7); } v70 = 1; v14 = (void **)sub_8F63D0(&Src, 0); v15 = (int)v14; if ( v14 ) { sub_85AB50(v14, "CharSet"); v16 = operator new(0x34u); v72 = v16; v77 = 1; if ( v16 ) v17 = sub_672A90(v16); else v17 = 0; v77 = -1; if ( sub_672CA0(v17, v15) ) { v72 = &v70; v70 = (int)v17; if ( v17 ) InterlockedIncrement(v17 + 1); sub_6688B0(v73, v3, v70); } else if ( v17 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); } } } ++i; } while ( i < 5 ); v18 = 0; for ( i = 0; ; v18 = i ) { v75 = 0; v72 = (void *)(v71 | (unsigned __int16)v18); v77 = 2; sub_455570(v73, v71 | (unsigned __int16)v18, (int *)&v75); v19 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v19)(v19, 1); } else { if ( v18 ) { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v26 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v26 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v26 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v26 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v26 = 21; break; case 0x1Au: case 0x1Bu: v26 = 26; break; default: v26 = 0; break; } v27 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v26); v28 = &byte_9A8050; if ( v27 ) v28 = (const CHAR *)(v27 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = v18; sprintf(&Src, "%s%s-f\\set%03d.nif", byte_ACA628, v28, v18); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v20 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v20 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v20 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v20 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v20 = 21; break; case 0x1Au: case 0x1Bu: v20 = 26; break; default: v20 = 0; break; } v21 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v20); v22 = &byte_9A8050; if ( v21 ) v22 = (const CHAR *)(v21 + 5); switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v23 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v23 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v23 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v23 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v23 = 21; break; case 0x1Au: case 0x1Bu: v23 = 26; break; default: v23 = 0; break; } v24 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v23); v25 = &byte_9A8050; if ( v24 ) v25 = (const CHAR *)(v24 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = (int)v22; sprintf(&Src, "%s%s-f\\%s-f.nif", byte_ACA628, v25, v22); } v70 = 1; v29 = (void **)sub_8F63D0(&Src, 0); v30 = (int)v29; if ( v29 ) { sub_85AB50(v29, "CharSet"); v31 = operator new(0x34u); v75 = v31; v77 = 3; if ( v31 ) v32 = sub_672A90(v31); else v32 = 0; v77 = -1; if ( sub_672CA0(v32, v30) ) { v75 = &v70; v70 = (int)v32; if ( v32 ) InterlockedIncrement(v32 + 1); sub_6688B0(v73, (int)v72, v70); } else if ( v32 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v32)(v32, 1); } } } if ( ++i >= 5 ) break; } i = 10; do { v75 = 0; v33 = v71 | (unsigned __int16)i | 0x10000; v77 = 4; sub_455570(v73, v33, (int *)&v75); v34 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v34)(v34, 1); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v35 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v35 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v35 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v35 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v35 = 21; break; case 0x1Au: case 0x1Bu: v35 = 26; break; default: v35 = 0; break; } v36 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v35); v37 = &byte_9A8050; if ( v36 ) v37 = (const CHAR *)(v36 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = i; sprintf(&Src, "%s%s-m\\set%03d.nif", byte_ACA628, v37, i); v38 = (void **)sub_8F63D0(&Src, 0); v39 = (int)v38; if ( v38 ) { sub_85AB50(v38, "CharSet"); v40 = operator new(0x34u); v72 = v40; v77 = 5; if ( v40 ) v41 = sub_672A90(v40); else v41 = 0; v77 = -1; if ( sub_672CA0(v41, v39) ) { v72 = &v70; v70 = (int)v41; if ( v41 ) InterlockedIncrement(v41 + 1); sub_6688B0(v73, v33, v70); } else if ( v41 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v41)(v41, 1); } } } ++i; } while ( i < 23 ); i = 10; do { v42 = v71 | (unsigned __int16)i; v75 = 0; v77 = 6; sub_455570(v73, v71 | (unsigned __int16)i, (int *)&v75); v43 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v43)(v43, 1); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v44 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v44 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v44 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v44 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v44 = 21; break; case 0x1Au: case 0x1Bu: v44 = 26; break; default: v44 = 0; break; } v45 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v44); v46 = &byte_9A8050; if ( v45 ) v46 = (const CHAR *)(v45 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = i; sprintf(&Src, "%s%s-f\\set%03d.nif", byte_ACA628, v46, i); v47 = (void **)sub_8F63D0(&Src, 0); v48 = (int)v47; if ( v47 ) { sub_85AB50(v47, "CharSet"); v49 = operator new(0x34u); v72 = v49; v77 = 7; if ( v49 ) v50 = sub_672A90(v49); else v50 = 0; v77 = -1; if ( sub_672CA0(v50, v48) ) { v72 = &v70; v70 = (int)v50; if ( v50 ) InterlockedIncrement(v50 + 1); sub_6688B0(v73, v42, v70); } else if ( v50 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v50)(v50, 1); } } } ++i; } while ( i < 20 ); v51 = v71 | 0x100FF; v75 = 0; v77 = 8; sub_455570(v73, v71 | 0x100FF, (int *)&v75); v52 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v52)(v52, 1); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v53 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v53 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v53 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v53 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v53 = 21; break; case 0x1Au: case 0x1Bu: v53 = 26; break; default: v53 = 0; break; } v54 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v53); v55 = &byte_9A8050; if ( v54 ) v55 = (const CHAR *)(v54 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = 255; sprintf(&Src, "%s%s-m\\set%03d.nif", byte_ACA628, v55, 255); v56 = (void **)sub_8F63D0(&Src, 0); v57 = (int)v56; if ( v56 ) { sub_85AB50(v56, "CharSet"); v58 = operator new(0x34u); v72 = v58; v77 = 9; if ( v58 ) v59 = sub_672A90(v58); else v59 = 0; v77 = -1; if ( sub_672CA0(v59, v57) ) { v72 = &v70; v70 = (int)v59; if ( v59 ) InterlockedIncrement(v59 + 1); sub_6688B0(v73, v51, v70); } else if ( v59 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v59)(v59, 1); } } } v60 = v71 | 0xFF; v75 = 0; v77 = 10; sub_455570(v73, v71 | 0xFF, (int *)&v75); v61 = (void (__thiscall ***)(void *, signed int))v75; v77 = -1; if ( v75 ) { if ( !InterlockedDecrement((volatile LONG *)v75 + 1) ) (**v61)(v61, 1); } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v62 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v62 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v62 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v62 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v62 = 21; break; case 0x1Au: case 0x1Bu: v62 = 26; break; default: v62 = 0; break; } v63 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v62); v64 = &byte_9A8050; if ( v63 ) v64 = (const CHAR *)(v63 + 5); if ( !byte_ACAD5C ) sub_420410(); v70 = 255; sprintf(&Src, "%s%s-f\\set%03d.nif", byte_ACA628, v64, 255); v65 = (void **)sub_8F63D0(&Src, 0); v66 = (int)v65; if ( v65 ) { sub_85AB50(v65, "CharSet"); v67 = operator new(0x34u); v72 = v67; v77 = 11; if ( v67 ) v68 = sub_672A90(v67); else v68 = 0; v77 = -1; if ( sub_672CA0(v68, v66) ) { v72 = &v70; v70 = (int)v68; if ( v68 ) InterlockedIncrement(v68 + 1); sub_6688B0(v73, v60, v70); } else if ( v68 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v68)(v68, 1); } } } return 1; } // AC9C84: using guessed type int dword_AC9C84; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066B6A0) -------------------------------------------------------- char __thiscall sub_66B6A0(char *this, unsigned __int8 a2) { char *v2; // edi unsigned __int8 v3; // al int v4; // eax int v5; // eax int v6; // ebx int v7; // esi int *v8; // edi void **v9; // eax void **v10; // edi signed int v11; // ebx int v12; // edi int *v13; // esi void **v14; // eax void **v15; // esi int v17; // [esp-4h] [ebp-138h] int v18; // [esp+10h] [ebp-124h] const CHAR *v19; // [esp+14h] [ebp-120h] _DWORD *v20; // [esp+18h] [ebp-11Ch] int *v21; // [esp+1Ch] [ebp-118h] char v22; // [esp+20h] [ebp-114h] int v23; // [esp+130h] [ebp-4h] v2 = this; switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: v3 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v3 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v3 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v3 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v3 = 21; break; case 0x1Au: case 0x1Bu: v3 = 26; break; default: v3 = 0; break; } v4 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v3); if ( v4 ) v19 = (const CHAR *)(v4 + 5); else v19 = &byte_9A8050; v5 = a2 << 24; v6 = 0; v18 = a2 << 24; v20 = v2 + 308; while ( 1 ) { v7 = v5 | (unsigned __int16)v6 | 0x10000; v21 = 0; v23 = 0; sub_455570(v20, v7, (int *)&v21); v8 = v21; v23 = -1; if ( v21 ) { if ( !InterlockedDecrement(v21 + 1) ) (*(void (__thiscall **)(int *, signed int))*v8)(v8, 1); } else { if ( !byte_ACAD5C ) sub_420410(); v17 = v6; sprintf(&v22, "%s%s-m\\%s-m-face%03d.dds", byte_ACA628, v19, v19, v6); v9 = (void **)sub_486130((int)&v22); v10 = v9; if ( v9 ) { sub_85AB50(v9, "FaceTexture"); v17 = (int)v10; v21 = &v17; InterlockedIncrement((volatile LONG *)v10 + 1); sub_6688B0(v20, v7, v17); } } if ( ++v6 >= 16 ) break; v5 = v18; } v11 = 0; do { v12 = v18 | (unsigned __int16)v11; v21 = 0; v23 = 1; sub_455570(v20, v18 | (unsigned __int16)v11, (int *)&v21); v13 = v21; v23 = -1; if ( v21 ) { if ( !InterlockedDecrement(v21 + 1) ) (*(void (__thiscall **)(int *, signed int))*v13)(v13, 1); } else { if ( !byte_ACAD5C ) sub_420410(); v17 = v11; sprintf(&v22, "%s%s-f\\%s-f-face%03d.dds", byte_ACA628, v19, v19, v11); v14 = (void **)sub_486130((int)&v22); v15 = v14; if ( v14 ) { sub_85AB50(v14, "FaceTexture"); v17 = (int)v15; v21 = &v17; InterlockedIncrement((volatile LONG *)v15 + 1); sub_6688B0(v20, v12, v17); } } ++v11; } while ( v11 < 16 ); return 1; } // AC9C84: using guessed type int dword_AC9C84; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066BA90) -------------------------------------------------------- void (__thiscall ***__thiscall sub_66BA90(_DWORD *this, char a2, char a3, unsigned __int16 a4))(_DWORD, signed int) { char v4; // bl int v5; // esi int v6; // edx int v7; // eax void (__thiscall ***result)(_DWORD, signed int); // eax unsigned __int8 v9; // di int v10; // eax int v11; // eax void **v12; // eax int v13; // esi _DWORD *v14; // [esp+10h] [ebp-218h] int v15; // [esp+18h] [ebp-210h] char v16; // [esp+1Ch] [ebp-20Ch] char v17; // [esp+120h] [ebp-108h] v14 = this; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v4 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v4 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v4 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v4 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v4 = 21; break; case 0x1A: case 0x1B: v4 = 26; break; default: v4 = 0; break; } v5 = dword_ACDA70; LOBYTE(v15) = v4; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a4) ) return 0; if ( a4 > *(_WORD *)(v5 + 200) ) return 0; v6 = *(_DWORD *)(v5 + 196); if ( !*(_DWORD *)(v6 + 4 * a4) ) return 0; v7 = *(_DWORD *)(v6 + 4 * a4); if ( !v7 ) return 0; v9 = a3; v10 = (unsigned __int8)sub_66A510(&v16, 0, v7 + 202, a3, v4) - 1; if ( !v10 ) { v9 = 0; goto LABEL_21; } v11 = v10 - 1; if ( !v11 ) { LABEL_21: LOBYTE(v15) = 0; goto LABEL_22; } if ( v11 == 1 ) { switch ( v4 ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 0xA: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: LOBYTE(v15) = 1; break; default: LOBYTE(v15) = 11; break; } } LABEL_22: result = sub_670660(v14, v15, v9, a4); if ( !result ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v17, "%s%s", byte_ACA628, &v16); v12 = (void **)sub_486130((int)&v17); v13 = (int)v12; if ( !v12 ) return 0; sub_85AB50(v12, "SetTexture"); sub_670820(v14, v13, v15, v9, a4); result = (void (__thiscall ***)(_DWORD, signed int))v13; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA70: using guessed type int dword_ACDA70; //----- (0066BD40) -------------------------------------------------------- bool __thiscall sub_66BD40(char *this) { char *v1; // esi bool result; // al v1 = this; if ( sub_66B6A0(this, 1u) && sub_66B6A0(v1, 6u) && sub_66B6A0(v1, 0xBu) && sub_66B6A0(v1, 0x10u) && sub_66B6A0(v1, 0x15u) ) { result = sub_66B6A0(v1, 0x1Au) != 0; } else { result = 0; } return result; } //----- (0066BDA0) -------------------------------------------------------- int __thiscall sub_66BDA0(_DWORD *this, void (__thiscall ***a2)(_DWORD, signed int), unsigned __int8 a3, char a4) { _DWORD *v4; // edi int **v5; // eax int *v6; // esi int result; // eax int *v8; // eax v4 = this; switch ( (unsigned __int8)a2 ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(a2) = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(a2) = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(a2) = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(a2) = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(a2) = 21; break; case 0x1Au: case 0x1Bu: LOBYTE(a2) = 26; break; default: LOBYTE(a2) = 0; break; } a2 = sub_66FDC0(this, (int)a2, a3); v5 = sub_6708C0(v4 + 20, (int **)&a3, &a2); v6 = *v5; if ( *v5 == (int *)v4[21] || (v8 = *sub_4DD710(v6 + 4, (int **)&a2, &a4), v8 == (int *)v6[5]) ) result = 0; else result = sub_85BD60((void *)v8[4]); return result; } //----- (0066BEB0) -------------------------------------------------------- _DWORD *__thiscall sub_66BEB0(_DWORD *this, int a2) { _DWORD *result; // eax char *v3; // eax char *v4; // edi int v5; // esi const char *v6; // edi _DWORD *v7; // eax int v8; // esi int v9; // eax char *v10; // esi _DWORD *v11; // esi int v12; // [esp+0h] [ebp-144h] void **v13; // [esp+10h] [ebp-134h] int v14; // [esp+14h] [ebp-130h] int v15; // [esp+18h] [ebp-12Ch] _DWORD *v16; // [esp+1Ch] [ebp-128h] int v17; // [esp+20h] [ebp-124h] char *v18; // [esp+24h] [ebp-120h] _DWORD *v19; // [esp+28h] [ebp-11Ch] char Src; // [esp+2Ch] [ebp-118h] int *v21; // [esp+134h] [ebp-10h] int v22; // [esp+140h] [ebp-4h] v21 = &v12; v16 = this; v17 = a2; result = sub_66FF10(this, a2); if ( !result ) { v3 = (char *)sub_50EE90(a2); if ( !v3 ) goto LABEL_24; v4 = (char *)sub_50EFA0(v3 + 4); if ( !v4 ) goto LABEL_24; if ( !byte_ACAD5C ) sub_420410(); v5 = (int)(v4 + 64); sprintf(&Src, "%s%s\\%s.kfm", byte_ACA628, v4 + 64, v4 + 64); v22 = 0; v18 = (char *)sub_803770(&Src, 0, 1, 0); v22 = -1; if ( v18 ) { if ( !byte_ACAD5C ) sub_420410(); v6 = v4 + 96; sprintf(&Src, "%s%s\\%s.dds", byte_ACA628, v5, v6); v7 = sub_865EB0(&Src, (int)&unk_ABD7DC, 0); v8 = (int)v7; v19 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); v22 = 2; if ( !strcmp(v6, "-") || !strcmp(v6, (const char *)&unk_9F3977) ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v19 = 0; } } else if ( v8 ) { v9 = *((_DWORD *)v18 + 3); if ( v9 ) { v14 = 0; v15 = -1; v13 = &ResetTexture::`vftable'; LOBYTE(v22) = 3; sub_8CFE00(&v13, v9, (int)dword_BA457C, v8); LOBYTE(v22) = 2; v13 = &Ns_TourScene::`vftable'; } } v10 = v18; sub_670700(v16, (int)v18, v17); dword_BA4564 = 1; v11 = sub_801640(v10); v22 = -1; sub_410C00(&v19); result = v11; } else { LABEL_24: result = 0; } } return result; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (0066C120) -------------------------------------------------------- _DWORD *__thiscall sub_66C120(_DWORD *this, int a2) { _DWORD *result; // eax char *v3; // eax char *v4; // esi int v5; // edi char *v6; // eax int v7; // ecx const char *v8; // esi char *v9; // eax char *v10; // eax _DWORD *v11; // edi int v12; // [esp+0h] [ebp-148h] void **v13; // [esp+10h] [ebp-138h] int v14; // [esp+14h] [ebp-134h] int v15; // [esp+18h] [ebp-130h] _DWORD *v16; // [esp+1Ch] [ebp-12Ch] int v17; // [esp+20h] [ebp-128h] int v18; // [esp+24h] [ebp-124h] char *v19; // [esp+28h] [ebp-120h] float v20; // [esp+2Ch] [ebp-11Ch] char Src; // [esp+30h] [ebp-118h] int *v22; // [esp+138h] [ebp-10h] int v23; // [esp+144h] [ebp-4h] v22 = &v12; v16 = this; v18 = a2; result = sub_66FFB0(this, a2); if ( !result ) { v3 = (char *)sub_443A80(a2); if ( !v3 ) goto LABEL_23; v4 = (char *)sub_443AD0(v3 + 4); if ( !v4 ) goto LABEL_23; if ( !byte_ACAD5C ) sub_420410(); v5 = (int)(v4 + 64); sprintf(&Src, "%s%s\\%s.kfm", byte_ACA628, v4 + 64, v4 + 64); v23 = 0; v6 = (char *)sub_803770(&Src, 0, 1, 0); v19 = v6; v23 = -1; if ( v6 ) { v7 = *((_DWORD *)v6 + 3); v17 = v7; if ( v7 ) { LODWORD(v20) = *((unsigned __int16 *)v4 + 64); v8 = v4 + 96; v20 = (double)SLODWORD(v20) / 1000.0; v20 = fabs(v20); *(float *)(v7 + 100) = v20; v9 = sub_4013F0(); v10 = sub_7549E0("%s%s\\%s.dds", v9, v5, v8); v11 = sub_865EB0(v10, (int)&unk_ABD7DC, 0); v20 = *(float *)&v11; if ( v11 ) InterlockedIncrement(v11 + 1); v23 = 2; if ( !strcmp(v8, "-") || !strcmp(v8, (const char *)&unk_9F3995) ) { if ( v11 ) { if ( !InterlockedDecrement(v11 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v11)(v11, 1); v20 = 0.0; } } else if ( v11 ) { v14 = 0; v15 = -1; v13 = &ResetTexture::`vftable'; LOBYTE(v23) = 3; sub_8CFE00(&v13, v17, (int)dword_BA457C, (int)v11); v13 = &Ns_TourScene::`vftable'; } v23 = -1; sub_410C00(&v20); v6 = v19; } sub_670740(v16, (int)v6, v18); dword_BA4564 = 1; result = sub_801640(v19); } else { LABEL_23: result = 0; } } return result; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (0066C3B0) -------------------------------------------------------- int __thiscall sub_66C3B0(_DWORD *this, int a2, char a3, char a4, int a5) { _DWORD *v5; // esi int v6; // edi char v8; // [esp+8h] [ebp-108h] char v9; // [esp+9h] [ebp-107h] v5 = this; v8 = 0; memset(&v9, 0, 0x103u); switch ( a5 ) { case 1: v6 = a2 + 123; goto LABEL_8; case 2: v6 = a2 + 188; goto LABEL_8; case 3: v6 = a2 + 253; goto LABEL_8; case 4: v6 = a2 + 326; goto LABEL_8; case 5: v6 = a2 + 391; goto LABEL_8; case 6: v6 = a2 + 456; LABEL_8: sub_66A510(&v8, 0, v6, a4, a3); break; default: return sub_6710B0(v5, &v8); } return sub_6710B0(v5, &v8); } //----- (0066C480) -------------------------------------------------------- int __thiscall sub_66C480(_DWORD *this) { _DWORD *v1; // edi int result; // eax v1 = this; sub_940360(this + 45); sub_6FEB80(*(void **)(v1[58] + 4)); *(_DWORD *)(v1[58] + 4) = v1[58]; *(_DWORD *)v1[58] = v1[58]; *(_DWORD *)(v1[58] + 8) = v1[58]; v1[59] = 0; sub_6FEB80(*(void **)(v1[62] + 4)); *(_DWORD *)(v1[62] + 4) = v1[62]; *(_DWORD *)v1[62] = v1[62]; *(_DWORD *)(v1[62] + 8) = v1[62]; v1[63] = 0; sub_6FEB80(*(void **)(v1[66] + 4)); *(_DWORD *)(v1[66] + 4) = v1[66]; *(_DWORD *)v1[66] = v1[66]; result = v1[66]; *(_DWORD *)(result + 8) = result; v1[67] = 0; return result; } //----- (0066C5D0) -------------------------------------------------------- int __thiscall sub_66C5D0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax _WORD *v4; // eax unsigned __int16 *v5; // eax int v6; // eax int v7; // ebx _DWORD *v8; // edi void *v9; // ebx int v10; // eax int v11; // esi char *v12; // eax _DWORD *v13; // eax int v14; // eax int v15; // esi volatile LONG *v16; // edi int v17; // [esp-4h] [ebp-250h] void **v18; // [esp+10h] [ebp-23Ch] int v19; // [esp+14h] [ebp-238h] int v20; // [esp+18h] [ebp-234h] void **v21; // [esp+1Ch] [ebp-230h] int v22; // [esp+20h] [ebp-22Ch] int v23; // [esp+24h] [ebp-228h] _DWORD *v24; // [esp+28h] [ebp-224h] int v25; // [esp+2Ch] [ebp-220h] int *v26; // [esp+30h] [ebp-21Ch] char v27; // [esp+34h] [ebp-218h] char Src; // [esp+138h] [ebp-114h] int v29; // [esp+248h] [ebp-4h] v2 = this; v24 = this; v25 = a2; result = sub_670190(this, a2); if ( result ) return result; v4 = sub_567FD0(a2); if ( !v4 || (v5 = (unsigned __int16 *)sub_40C8D0(v4 + 1)) == 0 || (v6 = *v5, v17 = 1, (v7 = sub_53D9E0(v6)) == 0) ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s\\MiniHouse\\%s.nif", byte_ACA628, "mushroom"); v16 = sub_8F63D0(&Src, 0); if ( v16 ) { v26 = &v17; v17 = (int)v16; InterlockedIncrement(v16 + 1); sub_6688B0(v2 + 29, 0, v17); return sub_85BD60((void *)v16); } return 0; } if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s\\MiniHouse\\%s.nif", byte_ACA628, v7 + 170); v8 = sub_8F63D0(&Src, 0); if ( !v8 ) return 0; v9 = (void *)(v7 + 202); if ( _mbscmp((const unsigned __int8 *)v9, "-") ) { v22 = 0; v23 = -1; v21 = &ResetTexture::`vftable'; v29 = 0; v10 = sub_49F4C0(v8, 0); sub_8CFE00(&v21, v10, (int)dword_BA457C, 0); dword_BA4564 = 1; v11 = sub_670F60(v2, v9); if ( !v11 ) { v12 = sub_4013F0(); sprintf(&v27, "%s\\MiniHouse\\%s.dds", v12, v9); v13 = sub_486130((int)&v27); v11 = (int)v13; if ( v13 ) sub_671D30(v24, (int)v13, v9); } v26 = (int *)v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); LOBYTE(v29) = 1; if ( v11 ) { v19 = 0; v20 = -1; v18 = &ResetTexture::`vftable'; LOBYTE(v29) = 2; v14 = sub_49F4C0(v8, 0); if ( v14 ) sub_8CFE00(&v18, v14, (int)dword_BA457C, v11); LOBYTE(v29) = 1; } sub_66F3F0(v24, (int)v8, v25); v15 = sub_85BD60(v8); LOBYTE(v29) = 0; sub_410C00(&v26); result = v15; } else { sub_66F3F0(v2, (int)v8, v25); result = sub_85BD60(v8); } return result; } // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (0066C880) -------------------------------------------------------- int __thiscall sub_66C880(_DWORD *this, char a2, char a3, char a4, char a5, int a6, int a7) { char v7; // bl _DWORD *v8; // edi int v9; // eax int v10; // eax unsigned __int8 v11; // bl int v12; // esi _DWORD *v13; // eax _DWORD *v14; // edi int v15; // edx int v16; // esi int v17; // ebx _DWORD *v18; // eax int v19; // edi bool v20; // zf int v21; // eax char *v23; // [esp-4h] [ebp-254h] void **v24; // [esp+10h] [ebp-240h] int v25; // [esp+14h] [ebp-23Ch] int v26; // [esp+18h] [ebp-238h] _DWORD *v27; // [esp+1Ch] [ebp-234h] int v28; // [esp+20h] [ebp-230h] int v29; // [esp+24h] [ebp-22Ch] char **v30; // [esp+28h] [ebp-228h] _DWORD *v31; // [esp+2Ch] [ebp-224h] char v32[4]; // [esp+30h] [ebp-220h] char v33[4]; // [esp+34h] [ebp-21Ch] char Src; // [esp+38h] [ebp-218h] char v35; // [esp+13Ch] [ebp-114h] int v36; // [esp+24Ch] [ebp-4h] v7 = a2; v8 = this; LOBYTE(v28) = a4; LOBYTE(v30) = a5; v33[0] = a2; v32[0] = a3; v29 = a7; v31 = this; v9 = (unsigned __int8)sub_66A510(&v35, 1, a6, a3, a2) - 1; if ( v9 ) { v10 = v9 - 1; if ( v10 ) { if ( v10 == 1 ) { switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 0xA: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: v7 = 1; break; default: v7 = 11; break; } } } else { v7 = 0; } } else { v7 = 0; v32[0] = 0; } if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s%s", byte_ACA628, &v35); switch ( v7 ) { case 1: case 2: case 3: case 4: case 5: v11 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v11 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v11 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v11 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v11 = 21; break; case 0x1A: case 0x1B: v11 = 26; break; default: v11 = 0; break; } v33[0] = v11; v12 = sub_6702E0(v8, *(volatile LONG **)v33, v32[0], v28, (unsigned __int8)v30); if ( !v12 ) { v23 = (char *)1; v13 = sub_8F63D0(&Src, 0); v14 = v13; v27 = v13; if ( v13 ) InterlockedIncrement(v13 + 1); v36 = 0; if ( !v14 ) return 0; sub_85AB50((void **)v14, "Hair"); v15 = (unsigned __int8)v30; v30 = &v23; v16 = v15 | (((unsigned __int8)v28 | (((unsigned __int8)v32[0] | (v11 << 8)) << 8)) << 8); v23 = (char *)v14; InterlockedIncrement(v14 + 1); sub_6688B0(v31 + 37, v16, (int)v23); dword_BA4564 = 1; v12 = sub_85BD60(v14); v36 = -1; if ( !InterlockedDecrement(v14 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v14)(v14, 1); v8 = v31; } memset(&Src, 0, 0x104u); memset(&v35, 0, 0x104u); sub_66A510(&v35, 0, v29, v32[0], v33[0]); if ( !byte_ACAD5C ) sub_420410(); v23 = &v35; sprintf(&Src, "%s%s", byte_ACA628, &v35); v17 = sub_6710B0(v8, &v35); v29 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); v36 = 1; if ( v17 ) goto LABEL_51; v18 = sub_486130((int)&Src); v19 = (int)v18; v27 = v18; if ( v18 ) InterlockedIncrement(v18 + 1); LOBYTE(v36) = 2; if ( v19 ) { sub_671E10(v31, v19, &v35); v17 = v19; v29 = v19; InterlockedIncrement((volatile LONG *)(v19 + 4)); } LOBYTE(v36) = 1; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); if ( v17 ) { LABEL_51: v25 = 0; v26 = -1; v24 = &ResetTexture::`vftable'; v20 = *(_DWORD *)(v12 + 188) == 0; LOBYTE(v36) = 3; if ( !v20 ) { v21 = **(_DWORD **)(v12 + 180); if ( v21 ) sub_8CFE00(&v24, v21, (int)dword_BA457C, v17); } v24 = &Ns_TourScene::`vftable'; } v36 = -1; if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } return v12; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (0066CCE0) -------------------------------------------------------- char __stdcall sub_66CCE0(int a1, char a2, char a3, int a4) { int v4; // edi _DWORD *v5; // eax int v6; // esi void **v8; // [esp+14h] [ebp-22Ch] int v9; // [esp+18h] [ebp-228h] int v10; // [esp+1Ch] [ebp-224h] int v11; // [esp+20h] [ebp-220h] int v12; // [esp+24h] [ebp-21Ch] char v13; // [esp+28h] [ebp-218h] char v14; // [esp+12Ch] [ebp-114h] int v15; // [esp+23Ch] [ebp-4h] v11 = a1; memset(&v13, 0, 0x104u); memset(&v14, 0, 0x104u); sub_66A510(&v14, 0, a4, a2, a3); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v13, "%s%s", byte_ACA628, &v14); v4 = sub_6710B0(&unk_AD8D28, &v14); v12 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v15 = 0; if ( v4 ) goto LABEL_21; v5 = sub_486130((int)&v13); v6 = (int)v5; if ( v5 ) LOBYTE(v5) = InterlockedIncrement(v5 + 1); LOBYTE(v15) = 1; if ( v6 ) { sub_671E10(&unk_AD8D28, v6, &v14); v4 = v6; v12 = v6; LOBYTE(v5) = InterlockedIncrement((volatile LONG *)(v6 + 4)); } LOBYTE(v15) = 0; if ( v6 ) { v5 = (_DWORD *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v5 ) LOBYTE(v5) = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } if ( v4 ) { LABEL_21: v9 = 0; v10 = -1; v8 = &ResetTexture::`vftable'; LOBYTE(v15) = 2; LOBYTE(v5) = sub_8CFE00(&v8, v11, (int)dword_BA457C, v4); v8 = &Ns_TourScene::`vftable'; } v15 = -1; if ( v4 ) { v5 = (_DWORD *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !v5 ) LOBYTE(v5) = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } return (char)v5; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066CEC0) -------------------------------------------------------- int __thiscall sub_66CEC0(_DWORD *this, _BYTE *a2, unsigned __int8 a3) { _DWORD *v3; // edi int result; // eax _DWORD *v5; // eax _DWORD *v6; // esi const char *v7; // [esp-Ch] [ebp-320h] _BYTE *v8; // [esp-4h] [ebp-318h] char v9; // [esp+Ch] [ebp-308h] char v10; // [esp+20Ch] [ebp-108h] v3 = this; sprintf(&v9, "%d_%s", a3, a2); result = sub_670E10(v3, &v9); if ( result ) return result; if ( a3 == -1 ) { if ( !byte_ACAD5C ) sub_420410(); v8 = a2; v7 = "%s%s.dds"; } else { if ( *a2 != 95 ) { if ( a3 ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v10, "%sMale\\%s.dds", byte_ACA730, a2); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v10, "%sFemale\\%s.dds", byte_ACA730, a2); } goto LABEL_18; } if ( !byte_ACAD5C ) sub_420410(); v8 = a2; v7 = "%s%s.dds"; } sprintf(&v10, v7, byte_ACA730, v8); LABEL_18: v5 = sub_486130((int)&v10); v6 = v5; if ( v5 ) sub_671C50(v3, (int)v5, &v9); return (int)v6; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0066CFE0) -------------------------------------------------------- _DWORD *__thiscall sub_66CFE0(_DWORD *this, char *Src, char a3, char a4, int a5) { _DWORD *v5; // edi int v6; // esi _DWORD *v7; // eax int v8; // eax int v9; // ebx _DWORD *v10; // esi bool v11; // zf int v12; // eax int v14; // [esp+0h] [ebp-244h] _DWORD *v15; // [esp+10h] [ebp-234h] void **v16; // [esp+14h] [ebp-230h] int v17; // [esp+18h] [ebp-22Ch] int v18; // [esp+1Ch] [ebp-228h] int v19; // [esp+20h] [ebp-224h] _DWORD *v20; // [esp+24h] [ebp-220h] char v21; // [esp+28h] [ebp-21Ch] char v22; // [esp+12Ch] [ebp-118h] int *v23; // [esp+234h] [ebp-10h] int v24; // [esp+240h] [ebp-4h] v23 = &v14; v5 = this; v19 = a5; sub_66A510(&v22, 1, (int)Src, a4, a3); v6 = sub_670B70(v5, &v22); v20 = (_DWORD *)v6; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v21, "%s%s", byte_ACA628, &v22); if ( !v6 ) { v20 = 0; v24 = 0; LOBYTE(v24) = 1; v7 = sub_8F63D0(&v21, 0); if ( v7 ) { v6 = (int)v7; v20 = v7; InterlockedIncrement(v7 + 1); } v24 = 0; if ( !v6 ) return 0; sub_85AB50((void **)v6, Src); sub_671A90(v5, v6, &v22); dword_BA4564 = 1; v20 = (_DWORD *)sub_85BD60((void *)v6); v24 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } memset(&v21, 0, 0x104u); memset(&v22, 0, 0x104u); sub_66A510(&v22, 0, v19, a4, a3); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v21, "%s%s", byte_ACA628, &v22); v8 = sub_670CC0(v5, &v22); v9 = v8; v19 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v24 = 3; if ( v9 ) goto LABEL_34; v10 = sub_486130((int)&v21); v15 = v10; if ( v10 ) InterlockedIncrement(v10 + 1); LOBYTE(v24) = 4; if ( v10 ) { sub_671B70(v5, (int)v10, &v22); v9 = (int)v10; v19 = (int)v10; InterlockedIncrement(v10 + 1); } LOBYTE(v24) = 3; if ( v10 && !InterlockedDecrement(v10 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v10)(v10, 1); if ( v9 ) { LABEL_34: v17 = 0; v18 = -1; v16 = &ResetTexture::`vftable'; v11 = v20[47] == 0; LOBYTE(v24) = 5; if ( !v11 ) { v12 = *(_DWORD *)v20[45]; if ( v12 ) sub_8CFE00(&v16, v12, (int)dword_BA457C, v9); } v16 = &Ns_TourScene::`vftable'; } v24 = -1; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } return v20; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // BA4564: using guessed type int dword_BA4564; //----- (0066D2E0) -------------------------------------------------------- int __thiscall sub_66D2E0(_DWORD *this, char a2, char a3, char a4, char a5, char a6, const char *a7, int a8) { int result; // eax result = strlen(a7); if ( result ) { result = strcmp(a7, "-"); if ( result ) { if ( a6 ) result = sub_66C880(this, a2, a3, a4, a5, (int)a7, a8); } } return result; } //----- (0066D370) -------------------------------------------------------- int __thiscall sub_66D370(_DWORD *this, unsigned __int16 a2, char a3) { _DWORD *v3; // ebx int result; // eax int v5; // esi int v6; // ecx bool v7; // zf char **v8; // eax char *v9; // esi char *v10; // ST08_4 _DWORD *v11; // edi int v12; // eax int v13; // ebx int v14; // eax int v15; // esi int v16; // esi const char *v17; // [esp-Ch] [ebp-14Ch] char *v18; // [esp-8h] [ebp-148h] int v19; // [esp-4h] [ebp-144h] int v20; // [esp+10h] [ebp-130h] void **v21; // [esp+14h] [ebp-12Ch] int v22; // [esp+18h] [ebp-128h] int v23; // [esp+1Ch] [ebp-124h] _DWORD *v24; // [esp+20h] [ebp-120h] int *v25; // [esp+24h] [ebp-11Ch] volatile LONG *v26; // [esp+28h] [ebp-118h] char Src; // [esp+2Ch] [ebp-114h] int v28; // [esp+13Ch] [ebp-4h] v3 = this; LOBYTE(v26) = a3; v24 = this; result = sub_670460(this, a2, v26); if ( result ) return result; v5 = dword_ACDA70; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a2) ) return 0; if ( a2 > *(_WORD *)(v5 + 200) ) return 0; v6 = *(_DWORD *)(v5 + 196); v7 = *(_DWORD *)(v6 + 4 * a2) == 0; v25 = (int *)a2; v8 = (char **)(v6 + 4 * a2); if ( v7 ) return 0; v9 = *v8; if ( !*v8 ) return 0; if ( (_BYTE)v26 == -1 ) { if ( !byte_ACAD5C ) sub_420410(); v19 = (int)(v9 + 170); v18 = byte_ACA730; v17 = "%s%s.nif"; LABEL_17: sprintf(&Src, v17, v18, v19); goto LABEL_18; } if ( v9[170] != 95 ) { v19 = (int)(v9 + 170); if ( (_BYTE)v26 ) { v10 = sub_6687F0(); sprintf(&Src, "%sMale\\%s.nif", v10, v19); goto LABEL_18; } v18 = sub_6687F0(); v17 = "%sFemale\\%s.nif"; goto LABEL_17; } if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%s%s.nif", byte_ACA730, v9 + 170); LABEL_18: v19 = 1; v11 = sub_8F63D0(&Src, 0); if ( !v11 ) return 0; v12 = sub_66CEC0(v3, v9 + 202, (unsigned __int8)v26); v13 = v12; v20 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v14 = 0; v28 = 0; if ( v13 ) { v22 = 0; v23 = -1; v21 = &ResetTexture::`vftable'; LOBYTE(v28) = 1; if ( v11[47] > 0u ) v14 = *(_DWORD *)v11[45]; sub_8CFE00(&v21, v14, (int)dword_BA457C, v13); LOBYTE(v28) = 0; v21 = &Ns_TourScene::`vftable'; } sub_85AB50((void **)v11, v9 + 2); v15 = (unsigned int)v25 | ((unsigned __int8)v26 << 24); v19 = (int)v11; v25 = &v19; InterlockedIncrement(v11 + 1); sub_6688B0(v24 + 45, v15, v19); dword_BA4564 = 1; v16 = sub_85BD60(v11); v28 = -1; if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); } return v16; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F3FE0: using guessed type void *ResetTexture::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // ACDA70: using guessed type int dword_ACDA70; // BA4564: using guessed type int dword_BA4564; //----- (0066D5E0) -------------------------------------------------------- char __thiscall sub_66D5E0(_DWORD *this, char a2, char a3, int a4) { int v4; // esi _DWORD *v5; // edi v4 = a4; v5 = this; sub_66D2E0(this, a2, a3, *(_BYTE *)a4, 0, *(_BYTE *)(a4 + 90) != 0, (const char *)(a4 + 91), a4 + 123); sub_66D2E0(v5, a2, a3, *(_BYTE *)v4, 1, *(_BYTE *)(v4 + 155) != 0, (const char *)(v4 + 156), v4 + 188); sub_66D2E0(v5, a2, a3, *(_BYTE *)v4, 2, *(_BYTE *)(v4 + 220) != 0, (const char *)(v4 + 221), v4 + 253); sub_66D2E0(v5, a2, a3, *(_BYTE *)v4, 3, *(_BYTE *)(v4 + 293) != 0, (const char *)(v4 + 294), v4 + 326); sub_66D2E0(v5, a2, a3, *(_BYTE *)v4, 4, *(_BYTE *)(v4 + 358) != 0, (const char *)(v4 + 359), v4 + 391); sub_66D2E0(v5, a2, a3, *(_BYTE *)v4, 5, *(_BYTE *)(v4 + 423) != 0, (const char *)(v4 + 424), v4 + 456); return 1; } //----- (0066D7F0) -------------------------------------------------------- char __thiscall sub_66D7F0(_DWORD *this) { int v1; // eax _DWORD *v2; // edi int v3; // eax int v4; // esi int v5; // eax int v6; // eax int v7; // eax unsigned int v9; // [esp+4h] [ebp-8h] unsigned int v10; // [esp+8h] [ebp-4h] v1 = *(_DWORD *)(dword_AC9C94 + 56); v2 = this; if ( v1 ) v9 = *(_DWORD *)(v1 + 40); else v9 = 0; v10 = 0; if ( v9 <= 0 ) return 1; do { v3 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v10); v4 = v3; if ( v3 ) { if ( *(_DWORD *)(v3 + 66) == 2 ) { sub_66D5E0(v2, 1, 0, v3); } else if ( *(_DWORD *)(v3 + 78) == 1 ) { sub_66D5E0(v2, 1, 1, v3); } if ( *(_DWORD *)(v4 + 74) == 2 ) { sub_66D5E0(v2, 6, 0, v4); } else if ( *(_DWORD *)(v4 + 78) == 1 ) { sub_66D5E0(v2, 6, 1, v4); } if ( *(_DWORD *)(v4 + 70) == 2 ) { sub_66D5E0(v2, 16, 0, v4); } else if ( *(_DWORD *)(v4 + 78) == 1 ) { sub_66D5E0(v2, 16, 1, v4); } v5 = *(_DWORD *)(v4 + 78); if ( v5 == 2 ) { sub_66D5E0(v2, 11, 0, v4); } else if ( v5 == 1 ) { sub_66D5E0(v2, 11, 1, v4); } v6 = *(_DWORD *)(v4 + 82); if ( v6 == 2 ) { sub_66D5E0(v2, 21, 0, v4); } else if ( v6 == 1 ) { sub_66D5E0(v2, 21, 1, v4); } v7 = *(_DWORD *)(v4 + 86); if ( v7 == 2 ) { sub_66D5E0(v2, 26, 0, v4); } else if ( v7 == 1 ) { sub_66D5E0(v2, 26, 1, v4); } } ++v10; } while ( v10 < v9 ); return 1; } // AC9C94: using guessed type int dword_AC9C94; //----- (0066D910) -------------------------------------------------------- char __thiscall sub_66D910(char *this) { char *v1; // esi v1 = this; if ( !sub_66A740(this, 1u) || !sub_66A740(v1, 6u) || !sub_66A740(v1, 0xBu) || !sub_66A740(v1, 0x10u) || !sub_66A740(v1, 0x15u) || !sub_66A740(v1, 0x1Au) || !sub_66D7F0(v1) || !sub_66BD40(v1) ) { return 0; } sub_66C5D0(v1, 0); return 1; } //----- (0066D990) -------------------------------------------------------- int __thiscall sub_66D990(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; sub_940360(this); sub_672240(v1 + 20, *(void **)(v1[21] + 4)); *(_DWORD *)(v1[21] + 4) = v1[21]; *(_DWORD *)v1[21] = v1[21]; result = v1[21]; *(_DWORD *)(result + 8) = result; v1[22] = 0; return result; } //----- (0066D9D0) -------------------------------------------------------- int __thiscall sub_66D9D0(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; sub_940360(this); sub_672240(v1 + 20, *(void **)(v1[21] + 4)); *(_DWORD *)(v1[21] + 4) = v1[21]; *(_DWORD *)v1[21] = v1[21]; *(_DWORD *)(v1[21] + 8) = v1[21]; v1[22] = 0; sub_940360(v1 + 4); sub_940360(v1 + 8); sub_940360(v1 + 12); sub_940360(v1 + 16); sub_940360(v1 + 25); sub_940360(v1 + 37); sub_940360(v1 + 41); sub_66C480(v1); sub_940360(v1 + 49); sub_940360(v1 + 53); sub_6FEB80(*(void **)(v1[74] + 4)); *(_DWORD *)(v1[74] + 4) = v1[74]; *(_DWORD *)v1[74] = v1[74]; *(_DWORD *)(v1[74] + 8) = v1[74]; v1[75] = 0; sub_940360(v1 + 89); sub_940360(v1 + 77); sub_940360(v1 + 81); sub_940360(v1 + 85); sub_940360(v1 + 29); sub_6FEB80(*(void **)(v1[70] + 4)); *(_DWORD *)(v1[70] + 4) = v1[70]; *(_DWORD *)v1[70] = v1[70]; *(_DWORD *)(v1[70] + 8) = v1[70]; v1[71] = 0; sub_940360(v1 + 93); result = sub_940360(v1 + 33); v3 = v1[97]; if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result && v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[97] = 0; } v4 = v1[98]; if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result && v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); v1[98] = 0; } v5 = v1[99]; if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result && v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); v1[99] = 0; } v6 = v1[100]; if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } v1[100] = 0; } return result; } //----- (0066DBD0) -------------------------------------------------------- void __thiscall sub_66DBD0(_DWORD *this) { _DWORD *v1; // esi HANDLE v2; // eax int v3; // edi int v4; // edi int v5; // edi int v6; // edi _DWORD *v7; // edi _DWORD *v8; // edi _DWORD *v9; // edi _DWORD *v10; // edi _DWORD *v11; // edi int *v12; // eax int *v13; // ecx int *v14; // ST08_4 int *v15; // ST04_4 int *v16; // ST08_4 int *v17; // ST04_4 int *v18; // ST08_4 int *v19; // ST04_4 int *v20; // ST08_4 int *v21; // ST04_4 _DWORD *v22; // edi _DWORD *v23; // edi _DWORD *v24; // edi _DWORD *v25; // edi _DWORD *v26; // edi _DWORD *v27; // edi _DWORD *v28; // edi _DWORD *v29; // edi int v30; // edi int v31; // ST08_4 int v32; // ST04_4 _DWORD *v33; // edi _DWORD *v34; // edi _DWORD *v35; // edi _DWORD *v36; // edi _DWORD *v37; // [esp+10h] [ebp-18h] _DWORD *v38; // [esp+14h] [ebp-14h] void *v39; // [esp+18h] [ebp-10h] int v40; // [esp+24h] [ebp-4h] v1 = this; v39 = this; v40 = 28; v2 = GetCurrentProcess(); TerminateProcess(v2, 0); sub_66D9D0(v1); v3 = v1[100]; LOBYTE(v40) = 27; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[99]; LOBYTE(v40) = 26; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[98]; LOBYTE(v40) = 25; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[97]; LOBYTE(v40) = 24; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1 + 93; v38 = v7; *v7 = &NiTMap>::`vftable'; sub_940360(v1 + 93); LOBYTE(v40) = 23; *v7 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 93); operator delete[]((void *)v1[95]); v8 = v1 + 89; v38 = v8; *v8 = &NiTMap>::`vftable'; sub_940360(v1 + 89); LOBYTE(v40) = 22; *v8 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 89); operator delete[]((void *)v1[91]); v9 = v1 + 85; v38 = v9; *v9 = &NiTMap>::`vftable'; sub_940360(v1 + 85); LOBYTE(v40) = 21; *v9 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 85); operator delete[]((void *)v1[87]); v10 = v1 + 81; v38 = v10; *v10 = &NiTMap>::`vftable'; sub_940360(v1 + 81); LOBYTE(v40) = 20; *v10 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 81); operator delete[]((void *)v1[83]); v11 = v1 + 77; v38 = v11; *v11 = &NiTMap>::`vftable'; sub_940360(v1 + 77); LOBYTE(v40) = 19; *v11 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 77); operator delete[]((void *)v1[79]); v38 = v1 + 73; v12 = (int *)v1[74]; v13 = (int *)*v12; LOBYTE(v40) = 34; sub_6FEDB0(v1 + 73, &v37, v13, v12); operator delete((void *)v1[74]); v37 = v1 + 69; v14 = (int *)v1[70]; v15 = *(int **)v1[70]; LOBYTE(v40) = 35; sub_6FEDB0(v1 + 69, &v38, v15, v14); operator delete((void *)v1[70]); v37 = v1 + 65; v16 = (int *)v1[66]; v17 = *(int **)v1[66]; LOBYTE(v40) = 36; sub_6FEDB0(v1 + 65, &v38, v17, v16); operator delete((void *)v1[66]); v37 = v1 + 61; v18 = (int *)v1[62]; v19 = *(int **)v1[62]; LOBYTE(v40) = 37; sub_6FEDB0(v1 + 61, &v38, v19, v18); operator delete((void *)v1[62]); v37 = v1 + 57; v20 = (int *)v1[58]; v21 = *(int **)v1[58]; LOBYTE(v40) = 38; sub_6FEDB0(v1 + 57, &v38, v21, v20); operator delete((void *)v1[58]); v22 = v1 + 53; v37 = v22; *v22 = &NiTMap>::`vftable'; LOBYTE(v40) = 39; sub_940360(v1 + 53); LOBYTE(v40) = 13; *v22 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v1 + 53); operator delete[]((void *)v1[55]); v23 = v1 + 49; v37 = v23; *v23 = &NiTMap>::`vftable'; LOBYTE(v40) = 40; sub_940360(v1 + 49); LOBYTE(v40) = 12; *v23 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 49); operator delete[]((void *)v1[51]); v24 = v1 + 45; v37 = v24; *v24 = &NiTMap>::`vftable'; LOBYTE(v40) = 41; sub_940360(v1 + 45); LOBYTE(v40) = 11; *v24 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 45); operator delete[]((void *)v1[47]); v25 = v1 + 41; v37 = v25; *v25 = &NiTMap>::`vftable'; LOBYTE(v40) = 42; sub_940360(v1 + 41); LOBYTE(v40) = 10; *v25 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 41); operator delete[]((void *)v1[43]); v26 = v1 + 37; v37 = v26; *v26 = &NiTMap>::`vftable'; LOBYTE(v40) = 43; sub_940360(v1 + 37); LOBYTE(v40) = 9; *v26 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 37); operator delete[]((void *)v1[39]); v27 = v1 + 33; v37 = v27; *v27 = &NiTMap>::`vftable'; LOBYTE(v40) = 44; sub_940360(v1 + 33); LOBYTE(v40) = 8; *v27 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 33); operator delete[]((void *)v1[35]); v28 = v1 + 29; v37 = v28; *v28 = &NiTMap>::`vftable'; LOBYTE(v40) = 45; sub_940360(v1 + 29); LOBYTE(v40) = 7; *v28 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 29); operator delete[]((void *)v1[31]); v29 = v1 + 25; v37 = v29; *v29 = &NiTMap>::`vftable'; LOBYTE(v40) = 46; sub_940360(v1 + 25); LOBYTE(v40) = 6; *v29 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 25); operator delete[]((void *)v1[27]); v30 = v1[24]; LOBYTE(v40) = 5; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v30 ) (**(void (__thiscall ***)(int, signed int))v30)(v30, 1); v37 = v1 + 20; v31 = v1[21]; v32 = *(_DWORD *)v1[21]; LOBYTE(v40) = 47; sub_6726B0(v1 + 20, (int *)&v38, v32, v31); operator delete((void *)v1[21]); v33 = v1 + 16; v37 = v33; *v33 = &NiTMap>::`vftable'; LOBYTE(v40) = 48; sub_940360(v1 + 16); LOBYTE(v40) = 3; *v33 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 16); operator delete[]((void *)v1[18]); v34 = v1 + 12; v37 = v34; *v34 = &NiTMap>::`vftable'; LOBYTE(v40) = 49; sub_940360(v1 + 12); LOBYTE(v40) = 2; *v34 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 12); operator delete[]((void *)v1[14]); v35 = v1 + 8; v37 = v35; *v35 = &NiTMap>::`vftable'; LOBYTE(v40) = 50; sub_940360(v1 + 8); LOBYTE(v40) = 1; *v35 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 8); operator delete[]((void *)v1[10]); v36 = v1 + 4; v37 = v36; *v36 = &NiTMap>::`vftable'; LOBYTE(v40) = 51; sub_940360(v1 + 4); LOBYTE(v40) = 0; *v36 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1 + 4); operator delete[]((void *)v1[6]); *v1 = &NiTMap>::`vftable'; v40 = 52; sub_940360(v1); v40 = -1; *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3F40: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3F60: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3F80: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FA0: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9F3FC0: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FFC: using guessed type void *NiTMap>::`vftable'; // 9F401C: using guessed type void *NiTMap>::`vftable'; // 9F403C: using guessed type void *NiTMap>::`vftable'; // 9F405C: using guessed type void *NiTMap>::`vftable'; // 9F407C: using guessed type void *NiTMap>::`vftable'; //----- (0066E1C0) -------------------------------------------------------- _DWORD *__thiscall sub_66E1C0(_DWORD *this, char a2, char a3, int a4) { char v4; // di _DWORD *result; // eax const CHAR *v6; // ST0C_4 const CHAR *v7; // ST0C_4 const CHAR *v8; // ST0C_4 const CHAR *v9; // ST08_4 const CHAR *v10; // ST0C_4 const CHAR *v11; // ST08_4 char v12; // bl _DWORD *v13; // eax float v14; // edi _DWORD *v15; // eax float *v16; // ebx char *v17; // eax void **v18; // eax _DWORD *v19; // ecx int v20; // esi int v21; // eax int v22; // ebx const CHAR *v23; // ST0C_4 char *v24; // ST08_4 const CHAR *v25; // ST0C_4 char *v26; // ST08_4 int v27; // eax _DWORD *v28; // eax int *v29; // eax int v30; // ecx int v31; // eax int v32; // esi const char *v33; // [esp-4h] [ebp-174h] const CHAR *v34; // [esp+0h] [ebp-170h] const CHAR *v35; // [esp+4h] [ebp-16Ch] float v36; // [esp+8h] [ebp-168h] int v37; // [esp+Ch] [ebp-164h] char v38; // [esp+1Ch] [ebp-154h] int v39; // [esp+2Ch] [ebp-144h] float *v40; // [esp+30h] [ebp-140h] int v41; // [esp+34h] [ebp-13Ch] _DWORD *v42; // [esp+38h] [ebp-138h] int v43; // [esp+3Ch] [ebp-134h] _DWORD *v44; // [esp+40h] [ebp-130h] int v45; // [esp+44h] [ebp-12Ch] _DWORD *v46; // [esp+48h] [ebp-128h] int v47; // [esp+4Ch] [ebp-124h] void *v48; // [esp+50h] [ebp-120h] char *v49; // [esp+54h] [ebp-11Ch] char Src; // [esp+58h] [ebp-118h] int *v51; // [esp+160h] [ebp-10h] int v52; // [esp+16Ch] [ebp-4h] v51 = &v37; v44 = this; LOBYTE(v43) = a3; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: LOBYTE(v49) = 1; break; case 6: case 7: case 8: case 9: case 0xA: LOBYTE(v49) = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: LOBYTE(v49) = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: LOBYTE(v49) = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: LOBYTE(v49) = 21; break; case 0x1A: case 0x1B: LOBYTE(v49) = 26; break; default: LOBYTE(v49) = 0; break; } v4 = (char)v49; result = sub_66FD10(this, v49, v43); if ( !result ) { if ( a4 == 1 ) { if ( a3 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v10 = sub_66FC50(v4); v11 = sub_401410(byte_ACAB50, "CharSelect\\CharSelectAni\\"); sprintf(&Src, "%s%s%s", v11, v10, "-m.kfm"); goto LABEL_34; } if ( !byte_ACAD5C ) sub_420410(); v36 = COERCE_FLOAT("-f.kfm"); v35 = sub_66FC50(v4); v34 = sub_401410(byte_ACAB50, "CharSelect\\CharSelectAni\\"); v33 = "%s%s%s"; } else { if ( a4 != 2 ) { if ( a3 == 1 ) { if ( !byte_ACAD5C ) sub_420410(); v36 = COERCE_FLOAT(sub_66FC50(v4)); v6 = sub_66FC50(v4); sprintf(&Src, "%s%s-m\\%s-m.kfm", byte_ACA628, v6, v36); } else { if ( !byte_ACAD5C ) sub_420410(); v36 = COERCE_FLOAT(sub_66FC50(v4)); v7 = sub_66FC50(v4); sprintf(&Src, "%s%s-f\\%s-f.kfm", byte_ACA628, v7, v36); } goto LABEL_34; } if ( a3 != 1 ) { if ( !byte_ACAD5C ) sub_420410(); v8 = sub_66FC50(v4); v9 = sub_401410(byte_ACAB50, "charcreate\\CharCreateAni\\"); sprintf(&Src, "%s%s%s", v9, v8, "-f.kfm"); goto LABEL_34; } if ( !byte_ACAD5C ) sub_420410(); v36 = COERCE_FLOAT("-m.kfm"); v35 = sub_66FC50(v4); v34 = sub_401410(byte_ACAB50, "charcreate\\CharCreateAni\\"); v33 = "%s%s%s"; } sprintf(&Src, v33, v34, v35, v36); LABEL_34: v12 = byte_BA4774; byte_BA4774 = 1; if ( a4 == 1 || a4 == 2 ) v13 = sub_803770(&Src, 0, 1, 0); else v13 = sub_803770(&Src, 0, 0, 0); v14 = *(float *)&v13; v46 = v13; byte_BA4774 = v12; if ( v13 ) { if ( a4 != 1 && a4 != 2 ) { v36 = COERCE_FLOAT(sub_6E1030(&v38)); v52 = 0; v15 = (_DWORD *)sub_6728D0(v44 + 20, (char *)&v46); sub_671850(v15, (_DWORD *)LODWORD(v36)); v52 = -1; sub_6718B0(&v38); v16 = *(float **)(LODWORD(v14) + 8); v40 = v16; if ( v16 ) { v17 = (char *)sub_812400((void **)v16); if ( v17 ) { v18 = sub_8D03E0(v17, 0); if ( v18 ) { sub_801910((_DWORD *)LODWORD(v14), (int)v18); v42 = 0; sub_811E40(v16, &v42, &v41); v19 = v42; if ( v42 ) { v47 = 0; while ( v47 < v41 + 1 ) { v20 = 801100; if ( v47 != v41 ) v20 = v19[v47]; v45 = v20; v21 = sub_66FC20(v16, v20); if ( v21 ) { v22 = *(_DWORD *)(v21 + 8); v36 = *(float *)(v21 + 4); if ( (_BYTE)v43 == 1 ) { v23 = sub_66FC50((char)v49); v24 = sub_4013F0(); sprintf(&Src, "%s%s-m\\%s", v24, v23, v36); } else { v25 = sub_66FC50((char)v49); v26 = sub_4013F0(); sprintf(&Src, "%s%s-f\\%s", v26, v25, v36); } v48 = 0; v52 = 1; LOBYTE(v52) = 2; v36 = COERCE_FLOAT(sub_80FD40((int)&v39, &Src, v22)); LOBYTE(v52) = 3; sub_65AD50((int *)&v48, (int *)LODWORD(v36)); LOBYTE(v52) = 2; sub_410C00(&v39); v52 = 1; if ( v48 ) { v27 = sub_85BD60(v48); sub_56FF80(&v48, v27); v45 = v20; v28 = (_DWORD *)sub_6728D0(v44 + 20, (char *)&v46); v29 = (int *)sub_6714D0(v28, &v45); sub_65AD50(v29, (int *)&v48); if ( v47 == v41 ) sub_801030((_DWORD *)LODWORD(v14), v20, (int)v48); } v52 = -1; sub_410C00(&v48); } ++v47; v19 = v42; v16 = v40; } operator delete(v19); } } } } } v30 = *(_DWORD *)(LODWORD(v14) + 12); if ( v30 ) { v31 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v30 + 72))("Haduri Light"); if ( v31 ) sub_8F6920(v31, 0); } sub_803810((float *)LODWORD(v14), 0.0); LODWORD(v36) = 1; sub_85BED0(*(_DWORD ***)(LODWORD(v14) + 12), 0.0, 1); v40 = &v36; v32 = ((unsigned __int8)v43 | ((unsigned __int8)v49 << 8)) << 16; v36 = v14; InterlockedIncrement((volatile LONG *)(LODWORD(v14) + 4)); sub_6688B0(v44, v32, SLODWORD(v36)); result = sub_801640((char *)LODWORD(v14)); } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // BA4774: using guessed type char byte_BA4774; //----- (0066E7F0) -------------------------------------------------------- _DWORD *__thiscall sub_66E7F0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST38_4 void *v4; // eax size_t v5; // ST28_4 void *v6; // eax size_t v7; // ST18_4 void *v8; // eax size_t v9; // ST08_4 void *v10; // eax size_t v11; // ST38_4 _DWORD *v12; // eax void *v13; // eax size_t v14; // ST38_4 void *v15; // eax size_t v16; // ST28_4 void *v17; // eax size_t v18; // ST18_4 void *v19; // eax size_t v20; // ST08_4 void *v21; // eax size_t v22; // ST38_4 void *v23; // eax size_t v24; // ST28_4 void *v25; // eax size_t v26; // ST18_4 void *v27; // eax size_t v28; // ST08_4 _DWORD *v29; // eax _DWORD *v30; // eax _DWORD *v31; // eax _DWORD *v32; // eax _DWORD *v33; // eax void *v34; // eax size_t v35; // ST38_4 void *v36; // eax size_t v37; // ST28_4 void *v38; // eax size_t v39; // ST18_4 void *v40; // eax size_t v41; // ST08_4 void *v42; // eax size_t v43; // ST38_4 void **v45; // [esp+10h] [ebp-30h] void **v46; // [esp+1Ch] [ebp-24h] _DWORD *v47; // [esp+28h] [ebp-18h] char *v48; // [esp+2Ch] [ebp-14h] char *v49; // [esp+30h] [ebp-10h] int v50; // [esp+3Ch] [ebp-4h] v1 = this; v47 = this; *this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; this[1] = 37; this[3] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[1]; v1[2] = v2; memset(v2, 0, v3); *v1 = &NiTMap>::`vftable'; v50 = 0; v1[4] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[5] = 37; v1[7] = 0; v4 = operator new[](0x94u); v5 = 4 * v1[5]; v1[6] = v4; memset(v4, 0, v5); v1[4] = &NiTMap>::`vftable'; LOBYTE(v50) = 1; v1[8] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[9] = 37; v1[11] = 0; v6 = operator new[](0x94u); v7 = 4 * v1[9]; v1[10] = v6; memset(v6, 0, v7); v1[8] = &NiTMap>::`vftable'; LOBYTE(v50) = 2; v1[12] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[13] = 37; v1[15] = 0; v8 = operator new[](0x94u); v9 = 4 * v1[13]; v1[14] = v8; memset(v8, 0, v9); v1[12] = &NiTMap>::`vftable'; LOBYTE(v50) = 3; v1[16] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[17] = 37; v1[19] = 0; v10 = operator new[](0x94u); v11 = 4 * v1[17]; v1[18] = v10; memset(v10, 0, v11); v1[16] = &NiTMap>::`vftable'; LOBYTE(v50) = 4; v1[22] = 0; v12 = operator new(0x24u); if ( !v12 ) { v48 = 0; std::exception::exception((std::exception *)&v45, (const char *const *)&v48); v45 = &std::bad_alloc::`vftable'; _CxxThrowException(&v45, &_TI2_AVbad_alloc_std__); } v1[21] = v12; *v12 = v12; *(_DWORD *)(v1[21] + 4) = v1[21]; *(_DWORD *)(v1[21] + 8) = v1[21]; *(_BYTE *)(v1[21] + 32) = 1; *(_BYTE *)(v1[21] + 33) = 1; v1[24] = 0; LOBYTE(v50) = 6; v1[25] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[26] = 37; v1[28] = 0; v13 = operator new[](0x94u); v14 = 4 * v1[26]; v1[27] = v13; memset(v13, 0, v14); v1[25] = &NiTMap>::`vftable'; LOBYTE(v50) = 7; v1[29] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[30] = 37; v1[32] = 0; v15 = operator new[](0x94u); v16 = 4 * v1[30]; v1[31] = v15; memset(v15, 0, v16); v1[29] = &NiTMap>::`vftable'; LOBYTE(v50) = 8; v1[33] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[34] = 37; v1[36] = 0; v17 = operator new[](0x94u); v18 = 4 * v1[34]; v1[35] = v17; memset(v17, 0, v18); v1[33] = &NiTMap>::`vftable'; LOBYTE(v50) = 9; v1[37] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[38] = 37; v1[40] = 0; v19 = operator new[](0x94u); v20 = 4 * v1[38]; v1[39] = v19; memset(v19, 0, v20); v1[37] = &NiTMap>::`vftable'; LOBYTE(v50) = 10; v1[41] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[42] = 37; v1[44] = 0; v21 = operator new[](0x94u); v22 = 4 * v1[42]; v1[43] = v21; memset(v21, 0, v22); v1[41] = &NiTMap>::`vftable'; LOBYTE(v50) = 11; v1[45] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[46] = 37; v1[48] = 0; v23 = operator new[](0x94u); v24 = 4 * v1[46]; v1[47] = v23; memset(v23, 0, v24); v1[45] = &NiTMap>::`vftable'; LOBYTE(v50) = 12; v1[49] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[50] = 37; v1[52] = 0; v25 = operator new[](0x94u); v26 = 4 * v1[50]; v1[51] = v25; memset(v25, 0, v26); v1[49] = &NiTMap>::`vftable'; LOBYTE(v50) = 13; v1[53] = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; v1[54] = 37; v1[56] = 0; v27 = operator new[](0x94u); v28 = 4 * v1[54]; v1[55] = v27; memset(v27, 0, v28); v1[53] = &NiTMap>::`vftable'; LOBYTE(v50) = 14; v1[59] = 0; v29 = operator new(0x30u); if ( !v29 ) { v49 = 0; std::exception::exception((std::exception *)&v46, (const char *const *)&v49); v46 = &std::bad_alloc::`vftable'; _CxxThrowException(&v46, &_TI2_AVbad_alloc_std__); } v1[58] = v29; *v29 = v29; *(_DWORD *)(v1[58] + 4) = v1[58]; *(_DWORD *)(v1[58] + 8) = v1[58]; *(_BYTE *)(v1[58] + 44) = 1; *(_BYTE *)(v1[58] + 45) = 1; LOBYTE(v50) = 15; v1[63] = 0; v30 = operator new(0x30u); if ( !v30 ) { v48 = 0; std::exception::exception((std::exception *)&v45, (const char *const *)&v48); v45 = &std::bad_alloc::`vftable'; _CxxThrowException(&v45, &_TI2_AVbad_alloc_std__); } v1[62] = v30; *v30 = v30; *(_DWORD *)(v1[62] + 4) = v1[62]; *(_DWORD *)(v1[62] + 8) = v1[62]; *(_BYTE *)(v1[62] + 44) = 1; *(_BYTE *)(v1[62] + 45) = 1; LOBYTE(v50) = 16; v1[67] = 0; v31 = operator new(0x30u); if ( !v31 ) { v49 = 0; std::exception::exception((std::exception *)&v46, (const char *const *)&v49); v46 = &std::bad_alloc::`vftable'; _CxxThrowException(&v46, &_TI2_AVbad_alloc_std__); } v1[66] = v31; *v31 = v31; *(_DWORD *)(v1[66] + 4) = v1[66]; *(_DWORD *)(v1[66] + 8) = v1[66]; *(_BYTE *)(v1[66] + 44) = 1; *(_BYTE *)(v1[66] + 45) = 1; LOBYTE(v50) = 17; v1[71] = 0; v32 = operator new(0x30u); if ( !v32 ) { v48 = 0; std::exception::exception((std::exception *)&v45, (const char *const *)&v48); v45 = &std::bad_alloc::`vftable'; _CxxThrowException(&v45, &_TI2_AVbad_alloc_std__); } v1[70] = v32; *v32 = v32; *(_DWORD *)(v1[70] + 4) = v1[70]; *(_DWORD *)(v1[70] + 8) = v1[70]; *(_BYTE *)(v1[70] + 44) = 1; *(_BYTE *)(v1[70] + 45) = 1; LOBYTE(v50) = 18; v1[75] = 0; v33 = operator new(0x30u); if ( !v33 ) { v49 = 0; std::exception::exception((std::exception *)&v46, (const char *const *)&v49); v46 = &std::bad_alloc::`vftable'; _CxxThrowException(&v46, &_TI2_AVbad_alloc_std__); } v1[74] = v33; *v33 = v33; *(_DWORD *)(v1[74] + 4) = v1[74]; *(_DWORD *)(v1[74] + 8) = v1[74]; *(_BYTE *)(v1[74] + 44) = 1; *(_BYTE *)(v1[74] + 45) = 1; LOBYTE(v50) = 19; v1[77] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[78] = 37; v1[80] = 0; v34 = operator new[](0x94u); v35 = 4 * v1[78]; v1[79] = v34; memset(v34, 0, v35); v1[77] = &NiTMap>::`vftable'; LOBYTE(v50) = 20; v1[81] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[82] = 37; v1[84] = 0; v36 = operator new[](0x94u); v37 = 4 * v1[82]; v1[83] = v36; memset(v36, 0, v37); v1[81] = &NiTMap>::`vftable'; LOBYTE(v50) = 21; v1[85] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[86] = 37; v1[88] = 0; v38 = operator new[](0x94u); v39 = 4 * v1[86]; v1[87] = v38; memset(v38, 0, v39); v1[85] = &NiTMap>::`vftable'; LOBYTE(v50) = 22; v1[89] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[90] = 37; v1[92] = 0; v40 = operator new[](0x94u); v41 = 4 * v1[90]; v1[91] = v40; memset(v40, 0, v41); v1[89] = &NiTMap>::`vftable'; LOBYTE(v50) = 23; v1[93] = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; v1[94] = 37; v1[96] = 0; v42 = operator new[](0x94u); v43 = 4 * v1[94]; v1[95] = v42; memset(v42, 0, v43); v1[93] = &NiTMap>::`vftable'; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F3F40: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3F60: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3F80: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FA0: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9F3FC0: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FFC: using guessed type void *NiTMap>::`vftable'; // 9F401C: using guessed type void *NiTMap>::`vftable'; // 9F403C: using guessed type void *NiTMap>::`vftable'; // 9F405C: using guessed type void *NiTMap>::`vftable'; // 9F407C: using guessed type void *NiTMap>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0066F050) -------------------------------------------------------- char __thiscall sub_66F050(_DWORD *this, char a2, unsigned __int8 a3) { unsigned __int8 v3; // bl _DWORD *v4; // edi _DWORD *v5; // esi _DWORD *v6; // eax char result; // al int v8; // eax int v9; // esi int v10; // [esp-4h] [ebp-30h] void *v11; // [esp+10h] [ebp-1Ch] _DWORD *v12; // [esp+14h] [ebp-18h] _DWORD *v13; // [esp+18h] [ebp-14h] _DWORD *v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v12 = this; switch ( a2 ) { case 1: case 2: case 3: case 4: case 5: v3 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v3 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v3 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v3 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 21; break; case 0x1A: case 0x1B: v3 = 26; break; default: v3 = 0; break; } v4 = 0; v13 = 0; v15 = 0; v5 = sub_66E1C0(this, v3, a3, 0); v14 = v5; if ( !v5 ) return 0; v13 = v5; InterlockedIncrement(v5 + 1); v6 = operator new(0x34u); v11 = v6; LOBYTE(v15) = 1; if ( v6 ) v4 = sub_672A90(v6); v10 = v5[3]; LOBYTE(v15) = 0; if ( !sub_672CA0(v4, v10) ) { if ( v4 ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); v15 = -1; if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); return 0; } v8 = sub_668830(v3); if ( v8 == 7 ) { if ( v4 ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); v15 = -1; if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); result = 0; } else { v9 = (unsigned __int8)sub_66FBD0(v8, a3) | ((a3 | (v3 << 8)) << 16); v10 = (int)v4; if ( v4 ) InterlockedIncrement(v4 + 1); sub_6688B0(v12 + 25, v9, v10); if ( !InterlockedDecrement(v14 + 1) ) (*(void (__stdcall **)(signed int))*v14)(1); result = 1; } return result; } //----- (0066F280) -------------------------------------------------------- bool __thiscall sub_66F280(_DWORD *this) { _DWORD *v1; // esi bool result; // al v1 = this; if ( sub_668C50(this) && sub_66F050(v1, 1, 1u) && sub_66F050(v1, 1, 0) && sub_66F050(v1, 6, 1u) && sub_66F050(v1, 6, 0) && sub_66F050(v1, 11, 1u) && sub_66F050(v1, 11, 0) && sub_66F050(v1, 16, 1u) && sub_66F050(v1, 16, 0) && sub_66F050(v1, 21, 1u) && sub_66F050(v1, 21, 0) && sub_66F050(v1, 26, 1u) ) { result = sub_66F050(v1, 26, 0) != 0; } else { result = 0; } return result; } //----- (0066F360) -------------------------------------------------------- int sub_66F360() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACDA44 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACDA44: using guessed type int dword_ACDA44; //----- (0066F380) -------------------------------------------------------- signed int __stdcall sub_66F380(_DWORD *a1, int a2) { const char *v3; // edx _DWORD *v4; // eax if ( !a1 ) return -1; v3 = (const char *)a1[2]; if ( v3 ) { if ( !strcmp("Scene Root", v3) ) return -1; } v4 = (_DWORD *)sub_85C050(a1, 8); if ( v4 ) sub_42AB40(v4, a2); return 1; } //----- (0066F3F0) -------------------------------------------------------- LONG __thiscall sub_66F3F0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v5; // [esp-4h] [ebp-Ch] int *v6; // [esp+4h] [ebp-4h] v3 = this; v6 = &v5; v5 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); return sub_6688B0(v3 + 29, a3, v5); } //----- (0066F450) -------------------------------------------------------- void __thiscall sub_66F450(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3F40: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FFC: using guessed type void *NiTMap>::`vftable'; //----- (0066F4E0) -------------------------------------------------------- void __thiscall sub_66F4E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3F60: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F401C: using guessed type void *NiTMap>::`vftable'; //----- (0066F570) -------------------------------------------------------- void __thiscall sub_66F570(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3F80: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F403C: using guessed type void *NiTMap>::`vftable'; //----- (0066F600) -------------------------------------------------------- LONG __stdcall sub_66F600(int a1, char a2, LONG a3) { int v3; // esi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi *(_BYTE *)(a1 + 4) = a2; v3 = *(_DWORD *)(a1 + 8); result = a3; if ( v3 != a3 ) { if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = a3; } *(_DWORD *)(a1 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a3; } } if ( result ) { v5 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } return result; } //----- (0066F6C0) -------------------------------------------------------- void __thiscall sub_66F6C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3FA0: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9F405C: using guessed type void *NiTMap>::`vftable'; //----- (0066F750) -------------------------------------------------------- void __thiscall sub_66F750(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v1); operator delete[]((void *)v1[2]); } // 9F3FC0: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F407C: using guessed type void *NiTMap>::`vftable'; //----- (0066F7C0) -------------------------------------------------------- void **__thiscall sub_66F7C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F40: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (0066F800) -------------------------------------------------------- void **__thiscall sub_66F800(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F40: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F3FFC: using guessed type void *NiTMap>::`vftable'; //----- (0066F880) -------------------------------------------------------- void **__thiscall sub_66F880(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F60: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (0066F8C0) -------------------------------------------------------- void **__thiscall sub_66F8C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F60: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F401C: using guessed type void *NiTMap>::`vftable'; //----- (0066F940) -------------------------------------------------------- void **__thiscall sub_66F940(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F80: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (0066F980) -------------------------------------------------------- void **__thiscall sub_66F980(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3F80: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F403C: using guessed type void *NiTMap>::`vftable'; //----- (0066FA00) -------------------------------------------------------- void **__thiscall sub_66FA00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3FA0: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; //----- (0066FA40) -------------------------------------------------------- void **__thiscall sub_66FA40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned char,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3FA0: using guessed type void *NiTMapBase>,unsigned char,NiPointer>::`vftable'; // 9F405C: using guessed type void *NiTMap>::`vftable'; //----- (0066FAC0) -------------------------------------------------------- void **__thiscall sub_66FAC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3FC0: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; //----- (0066FB00) -------------------------------------------------------- void **__thiscall sub_66FB00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,unsigned long,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F3FC0: using guessed type void *NiTMapBase>,unsigned long,NiPointer>::`vftable'; // 9F407C: using guessed type void *NiTMap>::`vftable'; //----- (0066FB80) -------------------------------------------------------- _DWORD *__thiscall sub_66FB80(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 45) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 45) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 45); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (0066FBD0) -------------------------------------------------------- char __cdecl sub_66FBD0(int a1, char a2) { unsigned int v2; // esi int v3; // eax char result; // al v2 = 0; if ( !sub_66F360() ) return 0; while ( 1 ) { v3 = sub_7474E0((_DWORD *)(dword_ACDA44 + 4), v2); if ( *(_DWORD *)v3 == a1 ) break; if ( ++v2 >= sub_66F360() ) return 0; } if ( a2 == 1 ) result = *(_BYTE *)(v3 + 4); else result = *(_BYTE *)(v3 + 5); return result; } // ACDA44: using guessed type int dword_ACDA44; //----- (0066FC20) -------------------------------------------------------- int __thiscall sub_66FC20(_DWORD *this, int a2) { char v2; // al v2 = sub_8C4C90(this + 6, a2, &a2); return v2 != 0 ? a2 : 0; } //----- (0066FC50) -------------------------------------------------------- const CHAR *__cdecl sub_66FC50(char a1) { unsigned __int8 v1; // al int v2; // eax const CHAR *result; // eax switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: v1 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v1 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v1 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v1 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v1 = 21; break; case 0x1A: case 0x1B: v1 = 26; break; default: v1 = 0; break; } v2 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), v1); if ( v2 ) result = (const CHAR *)(v2 + 5); else result = &byte_9A8050; return result; } // AC9C84: using guessed type int dword_AC9C84; //----- (0066FD10) -------------------------------------------------------- _DWORD *__thiscall sub_66FD10(_DWORD *this, char *a2, unsigned __int8 a3) { int v3; // eax char *v4; // esi _DWORD *v5; // edi v3 = (a3 | ((unsigned __int8)a2 << 8)) << 16; a2 = 0; sub_455570(this, v3, (int *)&a2); v4 = a2; if ( !a2 ) return 0; dword_BA4564 = 1; v5 = sub_801640(a2); if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) (**(void (__thiscall ***)(char *, signed int))v4)(v4, 1); return v5; } // BA4564: using guessed type int dword_BA4564; //----- (0066FDC0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_66FDC0(_DWORD *this, int a2, unsigned __int8 a3))(_DWORD, signed int) { int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi v3 = (a3 | ((unsigned __int8)a2 << 8)) << 16; a2 = 0; sub_455570(this, v3, &a2); v4 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !a2 ) return 0; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v4)(v4, 1); return v4; } //----- (0066FE60) -------------------------------------------------------- _DWORD *__thiscall sub_66FE60(_DWORD *this, unsigned __int16 a2) { char *v2; // esi _DWORD *v3; // edi char *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this + 8, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_801640(v5); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(char *, signed int))v2)(v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (0066FF10) -------------------------------------------------------- _DWORD *__thiscall sub_66FF10(_DWORD *this, int a2) { char *v2; // esi _DWORD *v3; // edi char *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this + 12, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_801640(v5); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(char *, signed int))v2)(v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (0066FFB0) -------------------------------------------------------- _DWORD *__thiscall sub_66FFB0(_DWORD *this, int a2) { char *v2; // esi _DWORD *v3; // edi char *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this + 16, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_801640(v5); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)v2 + 1) ) (**(void (__thiscall ***)(char *, signed int))v2)(v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (00670050) -------------------------------------------------------- _DWORD *__thiscall sub_670050(_DWORD *this, char *a2) { int v2; // eax char *v3; // esi _DWORD *v4; // edi v2 = (unsigned __int16)a2; a2 = 0; sub_455570(this + 4, v2, (int *)&a2); v3 = a2; dword_BA4564 = 1; if ( !a2 ) return 0; dword_BA4564 = 1; v4 = sub_801640(a2); if ( !InterlockedDecrement((volatile LONG *)v3 + 1) ) (**(void (__thiscall ***)(char *, signed int))v3)(v3, 1); return v4; } // BA4564: using guessed type int dword_BA4564; //----- (00670100) -------------------------------------------------------- void (__thiscall ***__thiscall sub_670100(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int) { int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi v4 = a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 16); a2 = 0; sub_455570(this + 25, v4, &a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v5)(v5, 1); return v5; } //----- (00670190) -------------------------------------------------------- int __thiscall sub_670190(_DWORD *this, int a2) { volatile LONG *v2; // esi int v3; // edi volatile LONG *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this + 29, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_85BD60((void *)v5); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (00670230) -------------------------------------------------------- int __thiscall sub_670230(_DWORD *this, int a2) { volatile LONG *v2; // esi int v3; // edi volatile LONG *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this + 33, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_85BD60((void *)v5); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (006702E0) -------------------------------------------------------- int __thiscall sub_6702E0(_DWORD *this, volatile LONG *a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { int v5; // eax volatile LONG *v6; // esi int v7; // edi v5 = a5 | ((a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 8)) << 8); a2 = 0; sub_455570(this + 37, v5, (int *)&a2); v6 = a2; if ( !a2 ) return 0; dword_BA4564 = 1; v7 = sub_85BD60((void *)a2); if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(void *, signed int))v6)((void *)v6, 1); return v7; } // BA4564: using guessed type int dword_BA4564; //----- (006703A0) -------------------------------------------------------- int __thiscall sub_6703A0(_DWORD *this, volatile LONG *a2, unsigned __int8 a3, unsigned __int16 a4) { int v4; // eax volatile LONG *v5; // esi int v6; // edi v4 = a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 16); a2 = 0; sub_455570(this + 41, v4, (int *)&a2); v5 = a2; if ( !a2 ) return 0; dword_BA4564 = 1; v6 = sub_85BD60((void *)a2); if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); return v6; } // BA4564: using guessed type int dword_BA4564; //----- (00670460) -------------------------------------------------------- int __thiscall sub_670460(_DWORD *this, unsigned __int16 a2, volatile LONG *a3) { int v3; // eax volatile LONG *v4; // esi int v5; // edi v3 = a2 | ((unsigned __int8)a3 << 24); a3 = 0; sub_455570(this + 45, v3, (int *)&a3); v4 = a3; if ( !a3 ) return 0; dword_BA4564 = 1; v5 = sub_85BD60((void *)a3); if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); return v5; } // BA4564: using guessed type int dword_BA4564; //----- (00670510) -------------------------------------------------------- int __thiscall sub_670510(_DWORD *this, volatile LONG *a2) { int v2; // eax volatile LONG *v3; // esi int v4; // edi v2 = (unsigned __int16)a2; a2 = 0; sub_455570(this + 49, v2, (int *)&a2); v3 = a2; if ( !a2 ) return 0; dword_BA4564 = 1; v4 = sub_85BD60((void *)a2); if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); return v4; } // BA4564: using guessed type int dword_BA4564; //----- (006705C0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_6705C0(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int) { int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi v4 = a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 16); a2 = 0; sub_455570(this + 77, v4, &a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v5)(v5, 1); return v5; } //----- (00670660) -------------------------------------------------------- void (__thiscall ***__thiscall sub_670660(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int) { int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi v4 = a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 16); a2 = 0; sub_455570(this + 85, v4, &a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v5)(v5, 1); return v5; } //----- (00670700) -------------------------------------------------------- LONG __thiscall sub_670700(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v5; // [esp-4h] [ebp-Ch] int *v6; // [esp+4h] [ebp-4h] v3 = this; v6 = &v5; v5 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); return sub_6688B0(v3 + 12, a3, v5); } //----- (00670740) -------------------------------------------------------- LONG __thiscall sub_670740(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v5; // [esp-4h] [ebp-Ch] int *v6; // [esp+4h] [ebp-4h] v3 = this; v6 = &v5; v5 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); return sub_6688B0(v3 + 16, a3, v5); } //----- (00670780) -------------------------------------------------------- void (__thiscall ***__thiscall sub_670780(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int16 a4))(_DWORD, signed int) { int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi v4 = a4 | ((a3 | ((unsigned __int8)a2 << 8)) << 16); a2 = 0; sub_455570(this + 93, v4, &a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v5)(v5, 1); return v5; } //----- (00670820) -------------------------------------------------------- LONG __thiscall sub_670820(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int16 a5) { _DWORD *v5; // edi int v7; // [esp-4h] [ebp-Ch] v5 = this; v7 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); return sub_6688B0(v5 + 85, a5 | ((a4 | (a3 << 8)) << 16), v7); } //----- (00670870) -------------------------------------------------------- _DWORD *sub_670870() { _DWORD *v0; // eax _DWORD *v1; // edi int v2; // esi v0 = operator new(0xCu); if ( v0 ) { v0[2] = 0; v1 = v0; } else { v1 = 0; } v2 = v1[2]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = 0; } return v1; } //----- (006708C0) -------------------------------------------------------- int **__thiscall sub_6708C0(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 33) ) { if ( (unsigned int)v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < (unsigned int)v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (00670930) -------------------------------------------------------- int __thiscall sub_670930(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // esi int v8; // edx void **v9; // edx int v10; // edx _DWORD *v11; // eax int v12; // edx int *v13; // esi int v14; // esi _DWORD *v15; // edx int v16; // esi _DWORD *v17; // esi _DWORD *v18; // edx _DWORD *v19; // esi int v20; // edi int v21; // edi _DWORD *v22; // edi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; v6 = a5; if ( v5 >= 0x1FFFFFFE ) { v7 = *((_DWORD *)a5 + 4); if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v8 = this[1]; if ( a4 == v8 ) { *(_DWORD *)(v8 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v9 = (void **)this[1]; if ( (void *)a4 == *v9 ) *v9 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v10 = this[1]; if ( a4 == *(_DWORD *)(v10 + 8) ) *(_DWORD *)(v10 + 8) = a5; } v11 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 20) ) { do { v12 = v11[1]; v13 = *(int **)(v12 + 4); if ( v12 == *v13 ) { v14 = v13[2]; if ( *(_BYTE *)(v14 + 20) ) { if ( v11 == *(_DWORD **)(v12 + 8) ) { v11 = (_DWORD *)v11[1]; v15 = *(_DWORD **)(v12 + 8); v11[2] = *v15; if ( !*(_BYTE *)(*v15 + 21) ) *(_DWORD *)(*v15 + 4) = v11; v15[1] = v11[1]; v16 = this[1]; if ( v11 == *(_DWORD **)(v16 + 4) ) { *(_DWORD *)(v16 + 4) = v15; } else { v17 = (_DWORD *)v11[1]; if ( v11 == (_DWORD *)*v17 ) *v17 = v15; else v17[2] = v15; } *v15 = v11; v11[1] = v15; } *(_BYTE *)(v11[1] + 20) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 20) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)*v18; *v18 = *(_DWORD *)(*v18 + 8); v20 = v19[2]; if ( !*(_BYTE *)(v20 + 21) ) *(_DWORD *)(v20 + 4) = v18; v19[1] = v18[1]; v21 = this[1]; if ( v18 == *(_DWORD **)(v21 + 4) ) { *(_DWORD *)(v21 + 4) = v19; v19[2] = v18; } else { v22 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)v22[2] ) v22[2] = v19; else *v22 = v19; v19[2] = v18; } LABEL_54: v6 = a5; v18[1] = v19; continue; } } else { v14 = *v13; if ( *(_BYTE *)(v14 + 20) ) { if ( v11 == *(_DWORD **)v12 ) { v11 = (_DWORD *)v11[1]; v23 = *(_DWORD **)v12; *v11 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 21) ) *(_DWORD *)(v24 + 4) = v11; v23[1] = v11[1]; v25 = this[1]; if ( v11 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v11[1]; if ( v11 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v11; v11[1] = v23; } *(_BYTE *)(v11[1] + 20) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 20) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)v18[2]; v18[2] = *v19; if ( !*(_BYTE *)(*v19 + 21) ) *(_DWORD *)(*v19 + 4) = v18; v19[1] = v18[1]; v27 = this[1]; if ( v18 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v19; } else { v28 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)*v28 ) *v28 = v19; else v28[2] = v19; } *v19 = v18; goto LABEL_54; } } *(_BYTE *)(v12 + 20) = 1; *(_BYTE *)(v14 + 20) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 20) = 0; v11 = *(_DWORD **)(v11[1] + 4); } while ( !*(_BYTE *)(v11[1] + 20) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 20) = 1; return result; } //----- (00670B70) -------------------------------------------------------- int __thiscall sub_670B70(_DWORD *this, void *a2) { _DWORD *v2; // esi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf signed int v12; // eax int *v13; // eax int v14; // esi void *v15; // ecx int *v17; // [esp+10h] [ebp-38h] int v18; // [esp+14h] [ebp-34h] int v19; // [esp+18h] [ebp-30h] void *v20; // [esp+1Ch] [ebp-2Ch] unsigned int v21; // [esp+2Ch] [ebp-1Ch] unsigned int v22; // [esp+30h] [ebp-18h] int v23; // [esp+44h] [ebp-4h] v2 = this; v18 = this[58]; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, a2, strlen((const char *)a2)); v23 = 0; v3 = sub_4F1D20(v2 + 57, (int)&v20); v4 = v2[58]; v17 = v3; if ( v3 == (int *)v4 ) goto LABEL_24; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v21; v8 = v21; if ( v21 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v9 = (unsigned __int8 *)&v20; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 >= v5 ) v12 = v7 != v5; else v12 = -1; v11 = v12 < 0; } if ( v11 ) { LABEL_24: v19 = v4; v13 = &v19; } else { v13 = (int *)&v17; } v14 = *v13; v23 = -1; if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v14 == v18 ) return 0; v15 = *(void **)(v14 + 40); if ( !v15 ) return 0; dword_BA4564 = 1; return sub_85BD60(v15); } // BA4564: using guessed type int dword_BA4564; //----- (00670CC0) -------------------------------------------------------- int __thiscall sub_670CC0(_DWORD *this, void *a2) { _DWORD *v2; // esi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf signed int v12; // eax int *v13; // eax int v14; // esi void *v15; // ecx int *v17; // [esp+10h] [ebp-38h] int v18; // [esp+14h] [ebp-34h] int v19; // [esp+18h] [ebp-30h] void *v20; // [esp+1Ch] [ebp-2Ch] unsigned int v21; // [esp+2Ch] [ebp-1Ch] unsigned int v22; // [esp+30h] [ebp-18h] int v23; // [esp+44h] [ebp-4h] v2 = this; v18 = this[62]; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, a2, strlen((const char *)a2)); v23 = 0; v3 = sub_4F1D20(v2 + 61, (int)&v20); v4 = v2[62]; v17 = v3; if ( v3 == (int *)v4 ) goto LABEL_24; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v21; v8 = v21; if ( v21 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v9 = (unsigned __int8 *)&v20; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 >= v5 ) v12 = v7 != v5; else v12 = -1; v11 = v12 < 0; } if ( v11 ) { LABEL_24: v19 = v4; v13 = &v19; } else { v13 = (int *)&v17; } v14 = *v13; v23 = -1; if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v14 == v18 ) return 0; v15 = *(void **)(v14 + 40); if ( !v15 ) return 0; dword_BA4564 = 1; return sub_85BD60(v15); } // BA4564: using guessed type int dword_BA4564; //----- (00670E10) -------------------------------------------------------- int __thiscall sub_670E10(_DWORD *this, void *a2) { _DWORD *v2; // esi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf signed int v12; // eax int *v13; // eax int v14; // esi void *v15; // ecx int *v17; // [esp+10h] [ebp-38h] int v18; // [esp+14h] [ebp-34h] int v19; // [esp+18h] [ebp-30h] void *v20; // [esp+1Ch] [ebp-2Ch] unsigned int v21; // [esp+2Ch] [ebp-1Ch] unsigned int v22; // [esp+30h] [ebp-18h] int v23; // [esp+44h] [ebp-4h] v2 = this; v18 = this[66]; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, a2, strlen((const char *)a2)); v23 = 0; v3 = sub_4F1D20(v2 + 65, (int)&v20); v4 = v2[66]; v17 = v3; if ( v3 == (int *)v4 ) goto LABEL_24; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v21; v8 = v21; if ( v21 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v9 = (unsigned __int8 *)&v20; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 >= v5 ) v12 = v7 != v5; else v12 = -1; v11 = v12 < 0; } if ( v11 ) { LABEL_24: v19 = v4; v13 = &v19; } else { v13 = (int *)&v17; } v14 = *v13; v23 = -1; if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v14 == v18 ) return 0; v15 = *(void **)(v14 + 40); if ( !v15 ) return 0; dword_BA4564 = 1; return sub_85BD60(v15); } // BA4564: using guessed type int dword_BA4564; //----- (00670F60) -------------------------------------------------------- int __thiscall sub_670F60(_DWORD *this, void *a2) { _DWORD *v2; // esi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf signed int v12; // eax int *v13; // eax int v14; // esi void *v15; // ecx int *v17; // [esp+10h] [ebp-38h] int v18; // [esp+14h] [ebp-34h] int v19; // [esp+18h] [ebp-30h] void *v20; // [esp+1Ch] [ebp-2Ch] unsigned int v21; // [esp+2Ch] [ebp-1Ch] unsigned int v22; // [esp+30h] [ebp-18h] int v23; // [esp+44h] [ebp-4h] v2 = this; v18 = this[70]; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, a2, strlen((const char *)a2)); v23 = 0; v3 = sub_4F1D20(v2 + 69, (int)&v20); v4 = v2[70]; v17 = v3; if ( v3 == (int *)v4 ) goto LABEL_24; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v21; v8 = v21; if ( v21 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v9 = (unsigned __int8 *)&v20; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 >= v5 ) v12 = v7 != v5; else v12 = -1; v11 = v12 < 0; } if ( v11 ) { LABEL_24: v19 = v4; v13 = &v19; } else { v13 = (int *)&v17; } v14 = *v13; v23 = -1; if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v14 == v18 ) return 0; v15 = *(void **)(v14 + 40); if ( !v15 ) return 0; dword_BA4564 = 1; return sub_85BD60(v15); } // BA4564: using guessed type int dword_BA4564; //----- (006710B0) -------------------------------------------------------- int __thiscall sub_6710B0(_DWORD *this, void *a2) { _DWORD *v2; // esi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf signed int v12; // eax int *v13; // eax int v14; // esi void *v15; // ecx int *v17; // [esp+10h] [ebp-38h] int v18; // [esp+14h] [ebp-34h] int v19; // [esp+18h] [ebp-30h] void *v20; // [esp+1Ch] [ebp-2Ch] unsigned int v21; // [esp+2Ch] [ebp-1Ch] unsigned int v22; // [esp+30h] [ebp-18h] int v23; // [esp+44h] [ebp-4h] v2 = this; v18 = this[74]; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, a2, strlen((const char *)a2)); v23 = 0; v3 = sub_4F1D20(v2 + 73, (int)&v20); v4 = v2[74]; v17 = v3; if ( v3 == (int *)v4 ) goto LABEL_24; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v21; v8 = v21; if ( v21 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v9 = (unsigned __int8 *)&v20; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 >= v5 ) v12 = v7 != v5; else v12 = -1; v11 = v12 < 0; } if ( v11 ) { LABEL_24: v19 = v4; v13 = &v19; } else { v13 = (int *)&v17; } v14 = *v13; v23 = -1; if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; if ( v14 == v18 ) return 0; v15 = *(void **)(v14 + 40); if ( !v15 ) return 0; dword_BA4564 = 1; return sub_85BD60(v15); } // BA4564: using guessed type int dword_BA4564; //----- (00671200) -------------------------------------------------------- void __cdecl sub_671200(int a1, int a2) { int v2; // esi v2 = *(_DWORD *)(a2 + 28); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); if ( *(_DWORD *)(a2 + 20) >= 0x10u ) operator delete(*(void **)a2); *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; } //----- (00671290) -------------------------------------------------------- int __thiscall sub_671290(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_670930(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_670930(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_670930(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_4DC030(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_717D90(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_6A4090(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 21) ) sub_670930(v4, a2, 0, a3, v6); else sub_670930(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 21) ) sub_670930(v4, a2, 0, (int)a4, v6); else sub_670930(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (006713F0) -------------------------------------------------------- _DWORD *__thiscall sub_6713F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // eax int v4; // eax int v5; // eax void **v7; // [esp+10h] [ebp-20h] _DWORD *v8; // [esp+1Ch] [ebp-14h] char *v9; // [esp+20h] [ebp-10h] int v10; // [esp+2Ch] [ebp-4h] v2 = this; v8 = this; this[2] = 0; v3 = operator new(0x18u); if ( !v3 ) { v9 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&v9); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v2[1] = v3; *v3 = v3; *(_DWORD *)(v2[1] + 4) = v2[1]; *(_DWORD *)(v2[1] + 8) = v2[1]; *(_BYTE *)(v2[1] + 20) = 1; *(_BYTE *)(v2[1] + 21) = 1; v10 = 0; if ( v2 != a2 ) { sub_6A3DB0(*(void **)(v2[1] + 4)); *(_DWORD *)(v2[1] + 4) = v2[1]; *(_DWORD *)v2[1] = v2[1]; *(_DWORD *)(v2[1] + 8) = v2[1]; v2[2] = 0; v4 = v2[1]; v2[1] = a2[1]; a2[1] = v4; v5 = v2[2]; v2[2] = a2[2]; a2[2] = v5; } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006714D0) -------------------------------------------------------- int __thiscall sub_6714D0(_DWORD *this, int *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi int v6; // ecx _DWORD *v7; // eax char v9[4]; // [esp+Ch] [ebp-18h] int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 21) ) { if ( *(_DWORD *)(v4 + 12) >= (unsigned int)*a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && (unsigned int)*a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; v11 = 0; v6 = *a2; v12 = 0; *(_DWORD *)v9 = v6; v10 = 0; LOBYTE(v12) = 1; v7 = sub_6E43A0(v2, v9); sub_671290(v2, (int)&a2, v5, v7); return (int)(a2 + 4); } //----- (006715A0) -------------------------------------------------------- int __thiscall sub_6715A0(_DWORD *this, int a2, int a3, void *a4) { void *v4; // ebx _DWORD *v5; // esi _DWORD *v6; // eax char *v7; // edi int result; // eax unsigned __int8 *v9; // eax void *v10; // eax int v11; // ecx int v12; // [esp+Ch] [ebp-8h] v4 = a4; v5 = this; v6 = (_DWORD *)this[1]; v7 = (char *)a4 + 12; if ( !this[2] ) { sub_6E0E00(this, a2, 1, (int)v6, a4); return a2; } if ( a3 == *v6 ) { v9 = (unsigned __int8 *)(a3 + 12); if ( *(_DWORD *)(a3 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; if ( sub_40C2F0((unsigned __int8 *)a4 + 12, 0, *((_DWORD *)a4 + 7), v9, *(_DWORD *)(a3 + 28)) < 0 ) { sub_6E0E00(v5, a2, 1, a3, v4); return a2; } goto LABEL_25; } if ( (_DWORD *)a3 == v6 ) { if ( sub_40C4B0(v6[2] + 12, (int)a4 + 12) ) { sub_6E0E00(v5, a2, 0, *(_DWORD *)(v5[1] + 8), v4); return a2; } goto LABEL_25; } if ( sub_40C4B0((int)a4 + 12, a3 + 12) ) { a4 = (void *)a3; sub_49F3C0(&a4); if ( sub_40C4B0((int)a4 + 12, (int)v7) ) { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 45) ) sub_6E0E00(v5, a2, 0, (int)a4, v4); else sub_6E0E00(v5, a2, 1, a3, v4); return a2; } } if ( !sub_40C4B0(a3 + 12, (int)v7) ) goto LABEL_25; a4 = (void *)a3; sub_66FB80(&a4); v10 = a4; if ( a4 != (void *)v5[1] ) { if ( sub_40C4B0((int)v7, (int)a4 + 12) ) { v10 = a4; goto LABEL_21; } LABEL_25: v11 = *(_DWORD *)sub_96BA80(v5, (int)&v12, v4, 0); result = a2; *(_DWORD *)a2 = v11; return result; } LABEL_21: if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 45) ) sub_6E0E00(v5, a2, 0, a3, v4); else sub_6E0E00(v5, a2, 1, (int)v10, v4); return a2; } //----- (00671760) -------------------------------------------------------- char *__thiscall sub_671760(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v5; // eax int v7; // [esp+0h] [ebp-38h] void **v8; // [esp+10h] [ebp-28h] void *v9; // [esp+1Ch] [ebp-1Ch] char *v10; // [esp+20h] [ebp-18h] void *v11; // [esp+24h] [ebp-14h] int *v12; // [esp+28h] [ebp-10h] int v13; // [esp+34h] [ebp-4h] v12 = &v7; v2 = this; v3 = (char *)operator new(0x30u); v11 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a2); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v13 = 0; v10 = v3 + 12; v9 = v3 + 12; LOBYTE(v13) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_4017F0((const void **)v3 + 3, (const void **)v4, 0, (void *)0xFFFFFFFF); v5 = *((_DWORD *)v4 + 7); *((_DWORD *)v3 + 10) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00671850) -------------------------------------------------------- _DWORD *__thiscall sub_671850(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax v2 = this; if ( this != a2 ) { sub_6A3DB0(*(void **)(this[1] + 4)); *(_DWORD *)(v2[1] + 4) = v2[1]; *(_DWORD *)v2[1] = v2[1]; *(_DWORD *)(v2[1] + 8) = v2[1]; v2[2] = 0; v3 = v2[1]; v2[1] = a2[1]; a2[1] = v3; v4 = v2[2]; v2[2] = a2[2]; a2[2] = v4; } return v2; } //----- (006718B0) -------------------------------------------------------- void __thiscall sub_6718B0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_6A4190(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (00671910) -------------------------------------------------------- int __thiscall sub_671910(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ebx unsigned __int8 *v5; // eax char *v6; // eax int v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi int v10; // [esp+14h] [ebp-34h] void *v11; // [esp+18h] [ebp-30h] int v12; // [esp+28h] [ebp-20h] unsigned int v13; // [esp+2Ch] [ebp-1Ch] int v14; // [esp+34h] [ebp-14h] int v15; // [esp+44h] [ebp-4h] v2 = this; v3 = sub_4F1D20(this, a2); v4 = (int)v3; if ( v3 != (int *)v2[1] ) { v5 = (unsigned __int8 *)(v3 + 3); if ( *(_DWORD *)(v4 + 32) >= 0x10u ) v5 = *(unsigned __int8 **)v5; if ( sub_40C2F0((unsigned __int8 *)a2, 0, *(_DWORD *)(a2 + 16), v5, *(_DWORD *)(v4 + 28)) >= 0 ) return v4 + 40; } v15 = 0; v13 = 15; v12 = 0; LOBYTE(v11) = 0; sub_4017F0((const void **)&v11, (const void **)a2, 0, (void *)0xFFFFFFFF); v14 = 0; LOBYTE(v15) = 1; v6 = sub_671760(v2, (char *)&v11); sub_6715A0(v2, (int)&v10, v4, v6); v7 = v10; LOBYTE(v15) = 2; if ( v14 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v13 >= 0x10 ) operator delete(v11); return v7 + 40; } //----- (00671A20) -------------------------------------------------------- void __thiscall sub_671A20(_DWORD *this) { int v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = (int)(this + 1); v5 = this + 1; v2 = (int *)this[2]; v3 = *v2; v6 = 0; sub_6A4190(this + 1, (int *)&v4, v3, (int)v2); operator delete(*(void **)(v1 + 4)); } //----- (00671A90) -------------------------------------------------------- void __thiscall sub_671A90(_DWORD *this, int a2, void *a3) { _DWORD *v3; // esi int *v4; // edi int v5; // esi void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a3, strlen((const char *)a3)); v9 = 0; v4 = (int *)sub_671910(v3 + 57, (int)&v6); v5 = *v4; if ( *v4 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v8 >= 0x10 ) operator delete(v6); } //----- (00671B70) -------------------------------------------------------- void __thiscall sub_671B70(_DWORD *this, int a2, void *a3) { _DWORD *v3; // esi int *v4; // edi int v5; // esi void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a3, strlen((const char *)a3)); v9 = 0; v4 = (int *)sub_671910(v3 + 61, (int)&v6); v5 = *v4; if ( *v4 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v8 >= 0x10 ) operator delete(v6); } //----- (00671C50) -------------------------------------------------------- void __thiscall sub_671C50(_DWORD *this, int a2, void *a3) { _DWORD *v3; // esi int *v4; // edi int v5; // esi void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a3, strlen((const char *)a3)); v9 = 0; v4 = (int *)sub_671910(v3 + 65, (int)&v6); v5 = *v4; if ( *v4 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v8 >= 0x10 ) operator delete(v6); } //----- (00671D30) -------------------------------------------------------- void __thiscall sub_671D30(_DWORD *this, int a2, void *a3) { _DWORD *v3; // esi int *v4; // edi int v5; // esi void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a3, strlen((const char *)a3)); v9 = 0; v4 = (int *)sub_671910(v3 + 69, (int)&v6); v5 = *v4; if ( *v4 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v8 >= 0x10 ) operator delete(v6); } //----- (00671E10) -------------------------------------------------------- void __thiscall sub_671E10(_DWORD *this, int a2, void *a3) { _DWORD *v3; // esi int *v4; // edi int v5; // esi void *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] unsigned int v8; // [esp+24h] [ebp-18h] int v9; // [esp+38h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a3, strlen((const char *)a3)); v9 = 0; v4 = (int *)sub_671910(v3 + 73, (int)&v6); v5 = *v4; if ( *v4 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v8 >= 0x10 ) operator delete(v6); } //----- (00671EF0) -------------------------------------------------------- int __thiscall sub_671EF0(_DWORD *this, int a2, int a3, int a4, void *a5) { unsigned int v5; // eax void **v6; // edi int v7; // edx void ***v8; // edx int v9; // edx void **v10; // eax void *v11; // edx int *v12; // esi int v13; // esi void ***v14; // edx int v15; // esi void ***v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi _BYTE *v22; // esi void **v23; // edx _DWORD *v24; // esi int v25; // esi void ***v26; // esi int v27; // edi _DWORD *v28; // edi int result; // eax v5 = this[2]; v6 = (void **)a5; if ( v5 >= 0xCCCCCCB ) { sub_6A4190((_DWORD *)a5 + 4, (int *)&a5, **((_DWORD **)a5 + 5), *((_DWORD *)a5 + 5)); operator delete(v6[5]); operator delete(v6); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6[1] = (void *)a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = v6; *(_DWORD *)this[1] = v6; *(_DWORD *)(this[1] + 8) = v6; } else if ( (_BYTE)a3 ) { *(_DWORD *)a4 = v6; v8 = (void ***)this[1]; if ( (void **)a4 == *v8 ) *v8 = v6; } else { *(_DWORD *)(a4 + 8) = v6; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = v6; } v10 = v6; while ( !*((_BYTE *)v10[1] + 32) ) { v11 = v10[1]; v12 = (int *)*((_DWORD *)v11 + 1); if ( v11 == (void *)*v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 32) ) { if ( v10 == *((void ***)v11 + 2) ) { v10 = (void **)v10[1]; v14 = (void ***)*((_DWORD *)v11 + 2); v10[2] = *v14; if ( !*((_BYTE *)*v14 + 33) ) (*v14)[1] = v10; v14[1] = (void **)v10[1]; v15 = this[1]; if ( v10 == *(void ***)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (void ***)v10[1]; if ( v10 == *v16 ) *v16 = (void **)v14; else v16[2] = (void **)v14; } *v14 = v10; v10[1] = v14; } *((_BYTE *)v10[1] + 32) = 1; *(_BYTE *)(*((_DWORD *)v10[1] + 1) + 32) = 0; v17 = (_DWORD *)*((_DWORD *)v10[1] + 1); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 33) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = (void **)a5; v17[1] = v18; continue; } *((_BYTE *)v11 + 32) = 1; *(_BYTE *)(v13 + 32) = 1; *(_BYTE *)(*((_DWORD *)v10[1] + 1) + 32) = 0; v10 = (void **)*((_DWORD *)v10[1] + 1); } else { v22 = (_BYTE *)*v12; if ( v22[32] ) { if ( v10 == *(void ***)v11 ) { v10 = (void **)v10[1]; v23 = *(void ***)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*((_BYTE *)v24 + 33) ) v24[1] = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(void ***)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (void ***)v10[1]; if ( v10 == v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *((_BYTE *)v10[1] + 32) = 1; *(_BYTE *)(*((_DWORD *)v10[1] + 1) + 32) = 0; v17 = (_DWORD *)*((_DWORD *)v10[1] + 1); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 33) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *((_BYTE *)v11 + 32) = 1; v22[32] = 1; *(_BYTE *)(*((_DWORD *)v10[1] + 1) + 32) = 0; v10 = (void **)*((_DWORD *)v10[1] + 1); } } result = a2; *(_BYTE *)(*(_DWORD *)(this[1] + 4) + 32) = 1; *(_DWORD *)a2 = v6; return result; } //----- (00672170) -------------------------------------------------------- _DWORD *__thiscall sub_672170(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax char *v6; // edx int v8; // [esp+0h] [ebp-38h] void **v9; // [esp+10h] [ebp-28h] void *v10; // [esp+1Ch] [ebp-1Ch] _DWORD *v11; // [esp+20h] [ebp-18h] void *v12; // [esp+24h] [ebp-14h] int *v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v13 = &v8; v2 = this; v3 = operator new(0x24u); v4 = v3; v12 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a2); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v3[2] = v2[1]; v5 = v3 + 3; *((_WORD *)v4 + 16) = 0; v14 = 0; v11 = v4 + 3; v10 = v4 + 3; LOBYTE(v14) = 1; if ( v5 ) { v6 = a2 + 4; *v5 = *(_DWORD *)a2; sub_6713F0(v4 + 4, v6); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00672240) -------------------------------------------------------- void __thiscall sub_672240(void *this, void *a2) { _DWORD *v2; // ebx void *i; // esi int v4; // ST08_4 int v5; // ST04_4 void *v6; // ST08_4 char v7; // [esp+10h] [ebp-14h] void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v8 = this; v2 = a2; for ( i = a2; !*((_BYTE *)i + 33); v2 = i ) { sub_672240(*((void **)i + 2)); i = *(void **)i; v4 = v2[5]; v5 = *(_DWORD *)v2[5]; v9 = 0; sub_6A4190(v2 + 4, (int *)&v7, v5, v4); v6 = (void *)v2[5]; v9 = -1; operator delete(v6); operator delete(v2); } } //----- (006722E0) -------------------------------------------------------- int *__thiscall sub_6722E0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi int v7; // ecx int v8; // eax _DWORD *v9; // eax char *v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax void **v16; // esi int v17; // ST08_4 int v18; // ST04_4 int v19; // eax int *result; // eax char v21; // [esp+10h] [ebp-1Ch] char *v22; // [esp+14h] [ebp-18h] void *v23; // [esp+18h] [ebp-14h] _DWORD *v24; // [esp+1Ch] [ebp-10h] int v25; // [esp+28h] [ebp-4h] v24 = this; v3 = (int *)a3; if ( *(_BYTE *)(a3 + 33) ) std::_Xout_of_range("invalid map/set iterator"); v23 = (void *)a3; sub_691140(&a3); if ( *(_BYTE *)(*v3 + 33) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; v7 = (int)v24; v8 = v24[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( **(int ***)(v7 + 4) == v3 ) { if ( *(_BYTE *)(v4 + 33) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6687D0((_DWORD *)v4); v7 = (int)v24; } **(_DWORD **)(v7 + 4) = v9; } v10 = *(char **)(v7 + 4); v22 = v10; if ( *((int **)v10 + 2) == v3 ) { if ( *(_BYTE *)(v4 + 33) ) *((_DWORD *)v10 + 2) = v6; else *((_DWORD *)v22 + 2) = sub_6910E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 33) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v24[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 32); *(_BYTE *)(v5 + 32) = *((_BYTE *)v3 + 32); *((_BYTE *)v3 + 32) = v13; LABEL_35: if ( *((_BYTE *)v23 + 32) == 1 ) { for ( i = v24; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 32) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_6914E0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v24; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; v15[32] = 0; sub_5FFC20(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v24; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; sub_6914E0(i, v6); break; } } else { if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_5FFC20(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v24; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; v15[32] = 0; sub_6914E0(i, (int)v15); v15 = *(_BYTE **)v6; i = v24; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; sub_5FFC20(i, (_DWORD *)v6); break; } } v15[32] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 32) = 1; } v16 = (void **)((char *)v23 + 16); v22 = (char *)v23 + 16; v17 = *((_DWORD *)v23 + 5); v18 = **((_DWORD **)v23 + 5); v25 = 0; sub_6A4190((_DWORD *)v23 + 4, (int *)&v21, v18, v17); operator delete(v16[1]); operator delete(v23); v19 = v24[2]; if ( v19 ) v24[2] = v19 - 1; result = a2; *a2 = a3; return result; } //----- (00672590) -------------------------------------------------------- int __thiscall sub_672590(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // ebx int v5; // ecx int v6; // eax bool v7; // zf _DWORD *v8; // edx int v9; // esi bool v10; // cl unsigned int v11; // edi int v12; // edi int *v13; // eax int v14; // ecx int result; // eax int v16; // esi int v17; // ST0C_4 int v18; // ST08_4 int v19; // [esp+10h] [ebp-10h] int v20; // [esp+1Ch] [ebp-4h] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 33) == 0; v8 = a3; v9 = v5; v10 = 1; LOBYTE(v19) = 1; if ( v7 ) { v11 = *((_DWORD *)a3 + 3); do { v9 = v6; if ( (_BYTE)a4 ) v10 = *(_DWORD *)(v6 + 12) >= v11; else v10 = v11 < *(_DWORD *)(v6 + 12); LOBYTE(v19) = v10; if ( v10 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 33) ); } v12 = v9; a4 = v9; if ( v10 ) { if ( v9 == *(_DWORD *)v4[1] ) { v13 = (int *)sub_671EF0(v4, (int)&a4, 1, v9, a3); LABEL_13: v14 = *v13; result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; return result; } sub_69C7C0(&a4); v12 = a4; v8 = a3; } if ( *(_DWORD *)(v12 + 12) < v8[3] ) { v13 = (int *)sub_671EF0(v4, (int)&a4, v19, v9, v8); goto LABEL_13; } v16 = (int)(v8 + 4); a4 = (int)(v8 + 4); v17 = v8[5]; v18 = *(_DWORD *)v8[5]; v20 = 0; sub_6A4190(v8 + 4, &v19, v18, v17); operator delete(*(void **)(v16 + 4)); operator delete(a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (006726B0) -------------------------------------------------------- int *__thiscall sub_6726B0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 33) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 33) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 33); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_6722E0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_672240(v4, *(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (00672770) -------------------------------------------------------- int __thiscall sub_672770(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_671EF0(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_671EF0(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_671EF0(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_69C7C0(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_691140(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_672590(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 33) ) sub_671EF0(v4, a2, 0, a3, v6); else sub_671EF0(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 33) ) sub_671EF0(v4, a2, 0, (int)a4, v6); else sub_671EF0(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (006728D0) -------------------------------------------------------- int __thiscall sub_6728D0(_DWORD *this, char *a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax int v7; // ST04_4 int v8; // ST04_4 char v10[4]; // [esp+10h] [ebp-40h] char v11; // [esp+14h] [ebp-3Ch] void *v12; // [esp+18h] [ebp-38h] char v13; // [esp+24h] [ebp-2Ch] void *v14; // [esp+28h] [ebp-28h] int v15; // [esp+2Ch] [ebp-24h] void **v16; // [esp+34h] [ebp-1Ch] char *v17; // [esp+40h] [ebp-10h] int v18; // [esp+4Ch] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); while ( !*(_BYTE *)(v4 + 33) ) { if ( *(_DWORD *)(v4 + 12) >= *(_DWORD *)a2 ) { v3 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v3 == this[1] || *(_DWORD *)a2 < *(_DWORD *)(v3 + 12) ) { v15 = 0; v5 = operator new(0x18u); if ( !v5 ) { v17 = 0; std::exception::exception((std::exception *)&v16, (const char *const *)&v17); v16 = &std::bad_alloc::`vftable'; _CxxThrowException(&v16, &_TI2_AVbad_alloc_std__); } v14 = v5; *v5 = v5; *((_DWORD *)v14 + 1) = v14; *((_DWORD *)v14 + 2) = v14; *((_BYTE *)v14 + 20) = 1; *((_BYTE *)v14 + 21) = 1; *(_DWORD *)v10 = *(_DWORD *)a2; v18 = 0; sub_6713F0(&v11, &v13); LOBYTE(v18) = 1; v6 = sub_672170(v2, v10); sub_672770(v2, (int)&a2, v3, v6); v3 = (int)a2; a2 = &v11; v7 = *(_DWORD *)v12; LOBYTE(v18) = 2; sub_6A4190(&v11, (int *)&v17, v7, (int)v12); operator delete(v12); v8 = *(_DWORD *)v14; v18 = 3; sub_6A4190(&v13, (int *)&a2, v8, (int)v14); operator delete(v14); } return v3 + 16; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00672A30) -------------------------------------------------------- void __thiscall sub_672A30(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_6726B0(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (00672A90) -------------------------------------------------------- _DWORD *__thiscall sub_672A90(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &CharSet::`vftable'; v1[3] = 0; v1[2] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F409C: using guessed type void *CharSet::`vftable'; //----- (00672B60) -------------------------------------------------------- char __thiscall sub_672B60(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ST04_4 _DWORD *v3; // eax char result; // al _DWORD *v5; // eax _DWORD *v6; // eax v1 = this; v2 = this + 4; v3 = (_DWORD *)(*(int (__stdcall **)(char *))(*this[3] + 72))(off_AB40A4[0]); if ( !sub_8F5CC0(v3, v2) ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(char *))(*v1[3] + 72))(off_AB40D0[0]); if ( !sub_8F5CC0(v5, v1 + 7) ) return 0; v6 = (_DWORD *)(*(int (__stdcall **)(char *))(*v1[3] + 72))(off_AB40D4[0]); if ( !sub_8F5CC0(v6, v1 + 10) ) return 0; result = 1; v1[2] = (_DWORD *)((char *)v1[2] + 1); return result; } // AB40A4: using guessed type char *off_AB40A4[27]; // AB40D0: using guessed type char *off_AB40D0[16]; // AB40D4: using guessed type char *off_AB40D4[15]; //----- (00672BE0) -------------------------------------------------------- char __thiscall sub_672BE0(_DWORD **this, signed int a2, int a3) { _DWORD **v3; // edi char result; // al int v5; // eax int v6; // esi _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax v3 = this; if ( a2 >= 3 ) return 0; v5 = (*(int (__stdcall **)(int))(*this[3] + 72))(a3); v6 = sub_402BA0((int)dword_BA455C, v5); if ( !v6 ) return 0; v7 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v6 + 72))(v6, off_AB40A4[0]); if ( !sub_8F5CC0(v7, &v3[a2 + 4]) ) return 0; v8 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v6 + 72))(v6, off_AB40D0[0]); if ( !sub_8F5CC0(v8, &v3[a2 + 7]) ) return 0; v9 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v6 + 72))(v6, off_AB40D4[0]); if ( !sub_8F5CC0(v9, &v3[a2 + 10]) ) return 0; result = 1; v3[2] = (_DWORD *)((char *)v3[2] + 1); return result; } // AB40A4: using guessed type char *off_AB40A4[27]; // AB40D0: using guessed type char *off_AB40D0[16]; // AB40D4: using guessed type char *off_AB40D4[15]; //----- (00672CA0) -------------------------------------------------------- bool __thiscall sub_672CA0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = this; v3 = this[3]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[3] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[8] = 0; v2[9] = 0; v2[10] = 0; v2[11] = 0; v2[12] = 0; return a2 && (sub_672BE0((_DWORD **)v2, 0, (int)off_AB40E0[0]) && sub_672BE0((_DWORD **)v2, 1, (int)off_AB40E4[0]) && sub_672BE0((_DWORD **)v2, 2, (int)off_AB40E8[0]) || sub_672B60((_DWORD **)v2)); } // AB40E0: using guessed type char *off_AB40E0[12]; // AB40E4: using guessed type char *off_AB40E4[11]; // AB40E8: using guessed type char *off_AB40E8[10]; //----- (00672D60) -------------------------------------------------------- _DWORD *__thiscall sub_672D60(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &CharSet::`vftable'; v3 = *((_DWORD *)this + 3); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F409C: using guessed type void *CharSet::`vftable'; //----- (00672DF0) -------------------------------------------------------- int __thiscall sub_672DF0(_DWORD *this, int a2) { int result; // eax result = a2; this[53] = a2; return result; } //----- (00672E10) -------------------------------------------------------- signed int __thiscall sub_672E10(int this) { int v1; // esi _WORD *v2; // edi signed int result; // eax v1 = this; v2 = (_WORD *)(this + 169); *(_WORD *)(this + 220) = 0; *(_BYTE *)(this + 222) = 0; memset((void *)(this + 169), 0, 0x2Bu); result = 0xFFFF; *v2 = -1; *(_DWORD *)(v1 + 173) = -1; *(_DWORD *)(v1 + 177) = -1; *(_DWORD *)(v1 + 181) = -1; *(_DWORD *)(v1 + 185) = -1; *(_WORD *)(v1 + 189) = -1; *(_WORD *)(v1 + 171) = -1; *(_WORD *)(v1 + 205) = -1; *(_DWORD *)(v1 + 193) = -1; *(_DWORD *)(v1 + 197) = -1; *(_DWORD *)(v1 + 201) = -1; *(_WORD *)(v1 + 191) = -1; *(_DWORD *)(v1 + 680) = 0; *(_WORD *)(v1 + 207) = -1; return result; } //----- (00672EC0) -------------------------------------------------------- __int16 __thiscall sub_672EC0(int this, _BYTE *a2) { *a2 = *(_BYTE *)(this + 209) >> 4; return *(_WORD *)(this + 173); } //----- (00672EE0) -------------------------------------------------------- __int16 __thiscall sub_672EE0(int this, _BYTE *a2) { *a2 = *(_BYTE *)(this + 209) & 0xF; return *(_WORD *)(this + 177); } //----- (00672F00) -------------------------------------------------------- __int16 __thiscall sub_672F00(int this) { return *(_WORD *)(this + 197); } //----- (00672F10) -------------------------------------------------------- __int16 __thiscall sub_672F10(int this) { return *(_WORD *)(this + 195); } //----- (00672F20) -------------------------------------------------------- __int16 __thiscall sub_672F20(int this) { return *(_WORD *)(this + 207); } //----- (00672F50) -------------------------------------------------------- char __thiscall sub_672F50(_BYTE *this) { return sub_661030(this + 572); } //----- (00672F60) -------------------------------------------------------- char __thiscall sub_672F60(_BYTE *this, char a2) { return sub_661E70(this + 572, a2); } //----- (00672F70) -------------------------------------------------------- void __thiscall sub_672F70(_DWORD *this, int a2) { int v2; // eax v2 = this[169]; if ( v2 ) sub_6AB580(&unk_B91250, v2, a2, 1); } //----- (00672FA0) -------------------------------------------------------- void __thiscall sub_672FA0(_DWORD *this, int a2) { int v2; // eax v2 = this[172]; if ( v2 ) sub_6AB580(&unk_B91250, v2, a2, 1); } //----- (00672FD0) -------------------------------------------------------- int __thiscall sub_672FD0(char *this) { return (int)(this + 572); } //----- (00672FE0) -------------------------------------------------------- char __thiscall sub_672FE0(_BYTE *this, char a2) { char result; // al result = a2; this[696] = a2; return result; } //----- (00673020) -------------------------------------------------------- int *__thiscall sub_673020(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int *result; // eax int *v5; // ecx _DWORD *v6; // ebx int *v7; // [esp+14h] [ebp+8h] v2 = this; v3 = a2; result = (int *)this[2 * a2]; v5 = (int *)this[2 * a2 + 1]; v6 = &v2[2 * a2 + 1]; v7 = v5; if ( result ) { result = sub_6ACDF0(&unk_B91250, result); v5 = v7; } if ( v5 ) result = sub_6ACDF0(&unk_B91250, v5); v2[2 * v3] = 0; *v6 = 0; return result; } //----- (00673070) -------------------------------------------------------- void __thiscall sub_673070(_DWORD *this, int a2) { _DWORD *v2; // ebx signed int v3; // esi int v4; // eax int v5; // edi v2 = this; v3 = 0; do { v4 = v2[2 * v3]; v5 = v2[2 * v3 + 1]; if ( v4 ) sub_6AB580(&unk_B91250, v4, a2, 1); if ( v5 ) sub_6AB580(&unk_B91250, v5, a2, 1); ++v3; } while ( v3 < 30 ); } //----- (00673110) -------------------------------------------------------- signed int __thiscall sub_673110(int this, const void *a2) { signed int result; // eax if ( !a2 ) return sub_672E10(this); qmemcpy((void *)(this + 169), a2, 0x2Bu); return result; } //----- (00673190) -------------------------------------------------------- char __thiscall sub_673190(void *this, unsigned __int16 a1, char a2) { int v3; // esi void *v4; // ebx int *v5; // eax int v6; // esi _DWORD *v8; // esi char v9; // bl unsigned __int16 v10; // [esp+Ch] [ebp-6Ch] char v11; // [esp+Eh] [ebp-6Ah] v3 = dword_ACB230; v4 = this; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a1) ) return 0; if ( a1 > *(_WORD *)(v3 + 200) ) return 0; v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * a1); if ( !*v5 ) return 0; v6 = *v5; if ( !*v5 ) return 0; memset(&v10, 0, 0x67u); v10 = a1; switch ( *(_DWORD *)(v6 + 102) ) { case 5: case 8: v11 = a2; break; case 6: v11 = a2; break; case 7: v11 = a2; break; default: break; } v8 = sub_6876E0(&v10); v9 = sub_6790F0(v4, v8); if ( v8 ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); return v9; } // ACB230: using guessed type int dword_ACB230; //----- (00673280) -------------------------------------------------------- char __thiscall sub_673280(_DWORD *this, int a2) { int v2; // eax void **v4; // [esp+4h] [ebp-18h] int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+18h] [ebp-4h] v2 = this[7]; if ( !v2 ) return 0; v5 = 0; v6 = -1; v4 = &ResetTexture::`vftable'; v7 = 0; sub_8CFE00(&v4, v2, (int)dword_BA457C, a2); return 1; } // 9F3FE0: using guessed type void *ResetTexture::`vftable'; //----- (00673300) -------------------------------------------------------- char __thiscall sub_673300(_DWORD *this, int *a2, void **a3, int **a4) { int *v4; // edi _DWORD *v5; // esi int **v7; // ebx int *v8; // eax int **v9; // ecx int *v10; // ecx int v11; // eax int *v12; // ebx void **v13; // ebx int v14; // ST1C_4 int *v15; // eax v4 = a2; v5 = this; if ( !this[(_DWORD)a2 + 8] ) return 0; v7 = a4; v8 = (int *)this[2 * (_DWORD)a4 + 77]; v9 = (int **)&this[2 * (_DWORD)a4 + 78]; a4 = v9; v10 = *v9; a2 = v10; if ( v8 ) { sub_6ACDF0(&unk_B91250, v8); v10 = a2; } if ( v10 ) sub_6ACDF0(&unk_B91250, v10); *a4 = 0; v5[2 * (_DWORD)v7 + 77] = 0; v11 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v5[(_DWORD)v4 + 8] + 72))("EquipedNode"); if ( v11 ) { (*(void (__stdcall **)(int **, int))(*(_DWORD *)v5[(_DWORD)v4 + 8] + 120))(&a2, v11); if ( a2 ) { v12 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v12 ) (*(void (__thiscall **)(int *, signed int))*v12)(v12, 1); } } } v13 = a3; if ( a3 ) { v14 = (int)a3; v15 = sub_661CD0(); sub_6615F0((char *)v15, v14); if ( sub_661030((_BYTE *)v5 + 572) ) sub_661F10((_BYTE *)v5 + 572, (int)v13); if ( v4 == (int *)1 ) sub_85AB50(v13, "HairPartsNode"); else sub_85AB50(v13, "EquipedNode"); (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v5[(_DWORD)v4 + 8] + 116))(v13, 0); sub_85C4D0((_DWORD *)v5[(_DWORD)v4 + 8]); sub_85C6F0((_DWORD *)v5[(_DWORD)v4 + 8]); } sub_85BED0((_DWORD **)v5[(_DWORD)v4 + 8], 0.0, 1); return 1; } //----- (006734F0) -------------------------------------------------------- int __thiscall sub_6734F0(int this, char a2) { int v2; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int result; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // eax int v15; // eax int v16; // eax int v17; // eax int v18; // eax int v19; // eax int v20; // eax int v21; // eax v2 = *(_DWORD *)(this + 4); if ( a2 & 1 ) { if ( v2 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; v3 = *(_DWORD *)(this + 8); if ( v3 ) *(_WORD *)(v3 + 28) &= 0xFFFEu; v4 = *(_DWORD *)(this + 12); if ( v4 ) *(_WORD *)(v4 + 28) &= 0xFFFEu; v5 = *(_DWORD *)(this + 16); if ( v5 ) *(_WORD *)(v5 + 28) &= 0xFFFEu; v6 = *(_DWORD *)(this + 20); if ( v6 ) *(_WORD *)(v6 + 28) &= 0xFFFEu; v7 = *(_DWORD *)(this + 24); if ( v7 ) *(_WORD *)(v7 + 28) &= 0xFFFEu; result = *(_DWORD *)(this + 28); if ( !result ) goto LABEL_16; goto LABEL_15; } if ( v2 ) *(_WORD *)(v2 + 28) |= 1u; v9 = *(_DWORD *)(this + 8); if ( v9 ) *(_WORD *)(v9 + 28) |= 1u; v10 = *(_DWORD *)(this + 12); if ( v10 ) *(_WORD *)(v10 + 28) |= 1u; v11 = *(_DWORD *)(this + 16); if ( v11 ) *(_WORD *)(v11 + 28) |= 1u; v12 = *(_DWORD *)(this + 20); if ( v12 ) *(_WORD *)(v12 + 28) |= 1u; v13 = *(_DWORD *)(this + 24); if ( v13 ) *(_WORD *)(v13 + 28) |= 1u; v14 = *(_DWORD *)(this + 148); if ( v14 ) *(_WORD *)(v14 + 28) |= 1u; v15 = *(_DWORD *)(this + 156); if ( v15 ) *(_WORD *)(v15 + 28) |= 1u; v16 = *(_DWORD *)(this + 4); if ( v16 && a2 & 2 ) *(_WORD *)(v16 + 28) &= 0xFFFEu; v17 = *(_DWORD *)(this + 8); if ( v17 && a2 & 4 ) *(_WORD *)(v17 + 28) &= 0xFFFEu; v18 = *(_DWORD *)(this + 12); if ( v18 && a2 & 8 ) *(_WORD *)(v18 + 28) &= 0xFFFEu; v19 = *(_DWORD *)(this + 16); if ( v19 && a2 & 0x10 ) *(_WORD *)(v19 + 28) &= 0xFFFEu; v20 = *(_DWORD *)(this + 20); if ( v20 && a2 & 0x20 ) *(_WORD *)(v20 + 28) &= 0xFFFEu; v21 = *(_DWORD *)(this + 24); if ( v21 && a2 & 0x40 ) *(_WORD *)(v21 + 28) &= 0xFFFEu; result = *(_DWORD *)(this + 28); if ( result ) { if ( a2 < 0 ) { LABEL_15: *(_WORD *)(result + 28) &= 0xFFFEu; LABEL_16: *(_BYTE *)(this + 160) = 0; return result; } if ( result ) *(_WORD *)(result + 28) |= 1u; } *(_BYTE *)(this + 160) = 1; return result; } //----- (00673680) -------------------------------------------------------- int __thiscall sub_673680(int this) { int v1; // esi int v2; // edi int v3; // ebx int v4; // ecx int v5; // edi int v6; // esi int v7; // ecx int result; // eax int v9; // [esp+Ch] [ebp-4h] v1 = dword_ACB230; v2 = *(unsigned __int16 *)(this + 177); v9 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v1 + 200) ) { v4 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v4 + 4 * v2) ) v3 = *(_DWORD *)(v4 + 4 * v2); else v3 = 0; } else { v3 = 0; } } else { v3 = 0; } v5 = *(unsigned __int16 *)(v9 + 173); v6 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) || (unsigned __int16)v5 > *(_WORD *)(v6 + 200) || (v7 = *(_DWORD *)(v6 + 196), !*(_DWORD *)(v7 + 4 * v5)) || (result = *(_DWORD *)(v7 + 4 * v5)) == 0 || !*(_DWORD *)(result + 232) ) { result = v3; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00673720) -------------------------------------------------------- signed int __thiscall sub_673720(int this) { int v1; // eax int v2; // edi int v3; // esi int v4; // ebx int v5; // ecx int v6; // edi int v7; // esi int *v8; // eax int v9; // esi int v10; // edi int v11; // edx int v12; // edi int v13; // esi int v14; // esi int v16; // [esp+Ch] [ebp-4h] v1 = *(unsigned __int16 *)(this + 195); v16 = this; if ( (_WORD)v1 != -1 || *(_WORD *)(this + 197) != -1 ) { v9 = dword_ACB230; v10 = *(unsigned __int16 *)(this + 195); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v1) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = *(_DWORD *)(v9 + 196); if ( *(_DWORD *)(v11 + 4 * v10) ) v4 = *(_DWORD *)(v11 + 4 * v10); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v12 = *(unsigned __int16 *)(v16 + 197); v13 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v12) || (unsigned __int16)v12 > *(_WORD *)(v13 + 200) ) { goto LABEL_41; } v8 = (int *)(*(_DWORD *)(v13 + 196) + 4 * v12); } else { v2 = *(unsigned __int16 *)(this + 177); v3 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * v2) ) v4 = *(_DWORD *)(v5 + 4 * v2); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v6 = *(unsigned __int16 *)(v16 + 173); v7 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6) || (unsigned __int16)v6 > *(_WORD *)(v7 + 200) ) { goto LABEL_41; } v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * v6); } if ( *v8 ) { v14 = *v8; if ( *v8 ) { if ( sub_68A170(*v8) ) return 10; if ( sub_68A1E0(v14) ) return 20; if ( sub_68A250(v14) ) return 40; if ( sub_68A270() ) return 50; if ( sub_68A280(v14) ) return 60; if ( sub_68A2A0(v14) ) return 70; if ( sub_68A2C0(v14) ) return 80; if ( sub_68A1C0(v14) ) return 90; return 0; } } LABEL_41: if ( v4 && sub_68A230(v4) ) return 30; return 0; } // ACB230: using guessed type int dword_ACB230; //----- (00673940) -------------------------------------------------------- void __thiscall sub_673940(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v3; // eax int v4; // esi v1 = this; v2 = this[76]; if ( v2 ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 8))(); sub_69CBA0(byte_ADB468, v3); v4 = v1[76]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v1[76] = 0; } } } //----- (006739A0) -------------------------------------------------------- int __thiscall sub_6739A0(_DWORD *this, signed int a2, char a3) { int result; // eax result = this[a2 + 8]; if ( result && a2 < 27 ) { if ( a3 ) *(_WORD *)(result + 28) &= 0xFFFEu; else *(_WORD *)(result + 28) |= 1u; } return result; } //----- (00673A40) -------------------------------------------------------- void __thiscall sub_673A40(int this, char a2) { int v2; // eax if ( *(_BYTE *)(this + 168) ) { if ( !*(_BYTE *)(this + 160) && *(_BYTE *)(this + 152) != a2 ) { v2 = *(_DWORD *)(this + 156); if ( v2 || (v2 = *(_DWORD *)(this + 148)) != 0 ) { *(_BYTE *)(this + 152) = a2; *(_WORD *)(v2 + 28) |= 1u; if ( a2 & 1 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; if ( a2 & 0x10 ) *(_WORD *)(v2 + 28) &= 0xFFFEu; sub_85BED0(*(_DWORD ***)(v2 + 32), 0.0, 0); } } } } //----- (00673AC0) -------------------------------------------------------- LONG __thiscall sub_673AC0(_DWORD *this, int a2) { _DWORD *v2; // edi LONG result; // eax _DWORD **v4; // esi int v5; // eax v2 = this; result = this[37]; if ( result ) { if ( a2 ) { v4 = (_DWORD **)this[10]; if ( v4 ) { *(_WORD *)(result + 28) |= 1u; v5 = this[39]; if ( v5 ) { *(_WORD *)(v5 + 28) |= 1u; this[39] = 0; } ((void (__thiscall *)(_DWORD **, int, _DWORD))(*v4)[29])(v4, a2, 0); sub_85BED0(v4, 0.0, 0); sub_85C4D0(v4); result = sub_85C6F0(v4); v2[39] = a2; } } } return result; } //----- (00673B40) -------------------------------------------------------- void __thiscall sub_673B40(int this, int a2) { if ( *(_BYTE *)(this + 672) != (_BYTE)a2 ) { *(_BYTE *)(this + 672) = a2; sub_673070((_DWORD *)(this + 308), a2); } } //----- (00673BD0) -------------------------------------------------------- void __stdcall sub_673BD0(int a1, int a2) { int v2; // eax int v3; // ecx if ( a1 ) { if ( a2 ) { v2 = (*(int (__stdcall **)(int))(*(_DWORD *)a1 + 72))(a2); if ( v2 ) { v3 = *(_DWORD *)(v2 + 32); if ( v3 ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)v3 + 120))(&a1, v2); sub_410C00(&a1); } } } } } //----- (00673C60) -------------------------------------------------------- int __thiscall sub_673C60(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // edi int *v6; // eax int *v7; // ecx _DWORD *v8; // ebx int result; // eax int *v10; // [esp+14h] [ebp+8h] v4 = this; v5 = a2; v6 = (int *)this[2 * a2]; v7 = (int *)this[2 * a2 + 1]; v8 = &v4[2 * a2 + 1]; v10 = v7; if ( v6 ) { sub_6ACDF0(&unk_B91250, v6); v7 = v10; } if ( v7 ) { sub_6ACDF0(&unk_B91250, v7); result = a3; } else { result = a4; } v4[2 * v5] = a3; *v8 = a4; return result; } //----- (00673CC0) -------------------------------------------------------- char __thiscall sub_673CC0(int this, unsigned __int8 *a2) { unsigned __int8 *v2; // edi int v3; // esi int v4; // eax char v6; // [esp+Bh] [ebp-1h] v2 = a2; v3 = this; *(_BYTE *)(this + 168) = (*a2 >> 2) & 0x1F; *(_WORD *)(this + 166) = -1; *(_BYTE *)(this + 161) = *v2 & 3; *(_BYTE *)(this + 162) = *v2 >> 7; *(_BYTE *)(this + 163) = v2[1]; *(_BYTE *)(this + 164) = v2[2]; switch ( ((unsigned int)*v2 >> 2) & 0x1F ) { case 1u: case 2u: case 3u: case 4u: case 5u: LOBYTE(a2) = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: LOBYTE(a2) = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: LOBYTE(a2) = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: LOBYTE(a2) = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: LOBYTE(a2) = 21; break; case 0x1Au: case 0x1Bu: LOBYTE(a2) = 26; break; default: LOBYTE(a2) = 0; break; } sub_64F580(v2[3], (char)a2, *v2 >> 7, (_BYTE *)&a2 + 3, &v6); if ( HIBYTE(a2) != -1 ) *(_BYTE *)(v3 + 144) = HIBYTE(a2); LOBYTE(v4) = v6; if ( v6 == -1 ) { *(_DWORD *)(v3 + 700) = v2[3]; } else { *(_BYTE *)(v3 + 165) = v6; v4 = v2[3]; *(_DWORD *)(v3 + 700) = v4; } return v4; } //----- (00673E20) -------------------------------------------------------- int __thiscall sub_673E20(_DWORD *this, int a2, char a3) { int result; // eax int v4; // ebx unsigned int v5; // edi int v6; // esi const char *v7; // ecx unsigned int v8; // [esp+Ch] [ebp+8h] result = a2; v4 = this[a2 + 8]; if ( v4 ) { result = *(_DWORD *)(v4 + 188); v5 = 0; v8 = result; if ( result ) { do { if ( *(_DWORD *)(v4 + 188) > v5 ) { v6 = *(_DWORD *)(*(_DWORD *)(v4 + 180) + 4 * v5); if ( v6 ) { v7 = *(const char **)(v6 + 8); if ( v7 ) { result = strcmp("EquipedNode", v7); if ( result ) { if ( a3 ) *(_WORD *)(v6 + 28) &= 0xFFFEu; else *(_WORD *)(v6 + 28) |= 1u; } } } } ++v5; } while ( v5 < v8 ); } } return result; } //----- (00673EB0) -------------------------------------------------------- void **__thiscall sub_673EB0(char *this, int a2, char *a3, int a4, char *Src, int a6) { char *v6; // edi void **v7; // esi void **v8; // ebx _DWORD *v10; // eax int v11; // eax int v12; // edi unsigned int v13; // eax int v14; // esi int j; // eax _DWORD *v16; // eax int v17; // eax int v18; // edi unsigned int v19; // eax int v20; // esi int i; // eax char *v22; // [esp+30h] [ebp+Ch] void **v23; // [esp+34h] [ebp+10h] v6 = this; v7 = (void **)sub_66CFE0(&unk_AD8D28, a3, this[168], this[162], a4); v8 = 0; if ( !v7 ) return 0; v22 = *(char **)&v6[4 * a2 + 32]; if ( !v22 ) return 0; if ( a6 ) { if ( a6 == 1 ) { v16 = operator new(0xE8u); if ( v16 ) v8 = (void **)sub_85A1C0(v16, 0); v23 = v8; v17 = (*((int (__thiscall **)(void **, const char *))*v7 + 18))(v7, "Left"); v18 = v17; if ( v17 ) { if ( sub_402B70((int)dword_BA455C, v17) ) { v19 = *(_DWORD *)(v18 + 188); v20 = 0; if ( v19 ) { if ( v19 > 0 ) goto LABEL_24; for ( i = 0; ; i = *(_DWORD *)(*(_DWORD *)(v18 + 180) + 4 * v20) ) { (*((void (__thiscall **)(void **, int, _DWORD))*v8 + 29))(v8, i, 0); if ( *(_DWORD *)(v18 + 188) <= (unsigned int)++v20 ) break; LABEL_24: ; } } } } } else { if ( a6 != 2 ) return 0; v10 = operator new(0xE8u); if ( v10 ) v8 = (void **)sub_85A1C0(v10, 0); v23 = v8; v11 = (*((int (__thiscall **)(void **, const char *))*v7 + 18))(v7, "Right"); v12 = v11; if ( v11 ) { if ( sub_402B70((int)dword_BA455C, v11) ) { v13 = *(_DWORD *)(v12 + 188); v14 = 0; if ( v13 ) { if ( v13 > 0 ) goto LABEL_14; for ( j = 0; ; j = *(_DWORD *)(*(_DWORD *)(v12 + 180) + 4 * v14) ) { (*((void (__thiscall **)(void **, int, _DWORD))*v8 + 29))(v8, j, 0); if ( *(_DWORD *)(v12 + 188) <= (unsigned int)++v14 ) break; LABEL_14: ; } } } } } } else { v23 = v7; } if ( !v23 ) return 0; sub_85AB50(v23, Src); (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v22 + 116))(v23, 0); return v23; } //----- (006740D0) -------------------------------------------------------- char __userpurge sub_6740D0@(_DWORD *a1@, int a2@, int a3, int a4, void **a5, int a6) { _DWORD *v6; // esi char result; // al int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax v6 = a1; if ( !a3 ) return 0; switch ( a4 ) { case 1: result = sub_673300(a1, 0, a5, (int **)0x1B); break; case 4: result = sub_673300(a1, (int *)4, a5, (int **)4); break; case 9: result = sub_673300(a1, (int *)7, a5, (int **)9); break; case 10: result = sub_673300(a1, (int *)0xB, a5, (int **)0xA); break; case 11: result = sub_673300(a1, (int *)0xB, a5, (int **)0xB); break; case 12: if ( !a5 ) goto LABEL_8; v8 = *(_DWORD *)(a3 + 232); if ( v8 == 18 || v8 == 17 ) { v9 = (*((int (__thiscall **)(void **, const char *, int))*a5 + 18))(a5, "Left", a2); if ( v9 ) { *(float *)(v9 + 88) = 0.0; *(float *)(v9 + 92) = 0.0; *(float *)(v9 + 96) = 0.0; } sub_673300(v6, (int *)0xB, (void **)v9, (int **)0xA); v10 = (*((int (__thiscall **)(void **, const char *))*a5 + 18))(a5, "Right"); if ( v10 ) { *(float *)(v10 + 88) = 0.0; *(float *)(v10 + 92) = 0.0; *(float *)(v10 + 96) = 0.0; } result = sub_673300(v6, (int *)0xC, (void **)v10, (int **)0xC); } else { result = sub_673300(a1, (int *)0xC, a5, (int **)0xC); } break; case 13: if ( !a5 ) goto LABEL_8; v11 = *(_DWORD *)(a3 + 232); if ( v11 == 18 || v11 == 17 ) { v12 = (*((int (__thiscall **)(void **, const char *, int))*a5 + 18))(a5, "Right", a2); if ( v12 ) { *(float *)(v12 + 88) = 0.0; *(float *)(v12 + 92) = 0.0; *(float *)(v12 + 96) = 0.0; } sub_673300(v6, (int *)0xC, (void **)v12, (int **)0xC); v13 = (*((int (__thiscall **)(void **, const char *))*a5 + 18))(a5, "Left"); if ( v13 ) { *(float *)(v13 + 88) = 0.0; *(float *)(v13 + 92) = 0.0; *(float *)(v13 + 96) = 0.0; } result = sub_673300(v6, (int *)0xB, (void **)v13, (int **)0xA); } else { result = sub_673300(a1, (int *)0xC, a5, (int **)0xD); } break; case 14: sub_673300(a1, (int *)0xD, a5, (int **)0xE); sub_673300(v6, (int *)0xE, a5, (int **)0xE); result = 1; break; case 17: result = sub_673300(a1, (int *)0x1A, a5, (int **)0x11); break; case 18: result = sub_673300(a1, (int *)0x10, a5, (int **)0x12); break; case 22: sub_673300(a1, (int *)0x11, a5, (int **)0x16); sub_673300(v6, (int *)0x12, a5, (int **)0x16); result = 1; break; case 24: result = sub_673300(a1, (int *)4, a5, (int **)0x18); break; case 25: sub_673BD0((int)a5, (int)"Right"); sub_673300(v6, (int *)5, a5, (int **)0x19); goto LABEL_8; case 26: result = sub_673300(a1, (int *)3, a5, (int **)0x1A); break; case 27: result = sub_673300(a1, 0, a5, (int **)0x1B); break; case 28: sub_673BD0((int)a5, (int)"Left"); sub_673300(v6, (int *)6, a5, (int **)0x1C); result = 0; break; case 29: result = sub_673300(a1, (int *)0xB, a5, (int **)0x1D); break; default: LABEL_8: result = 0; break; } return result; } // 6740D0: could not find valid save-restore pair for edi //----- (00674470) -------------------------------------------------------- char __stdcall sub_674470(int a1, int a2) { void **v3; // [esp+4h] [ebp-18h] int v4; // [esp+8h] [ebp-14h] int v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] if ( !a1 ) return 0; v4 = 0; v5 = -1; v3 = &ResetTexture::`vftable'; v6 = 0; sub_8CFE00(&v3, a1, (int)dword_BA457C, a2); return 1; } // 9F3FE0: using guessed type void *ResetTexture::`vftable'; //----- (006744F0) -------------------------------------------------------- char __stdcall sub_6744F0(_DWORD *a1, int a2) { int v3; // ebx unsigned int v4; // esi _DWORD *v5; // ecx _DWORD *v6; // eax if ( !a1 || !a2 ) return 0; v3 = a1[48]; v4 = 0; if ( v3 > 0 ) { do { if ( a1[47] > v4 ) { v5 = *(_DWORD **)(a1[45] + 4 * v4); if ( v5 ) { v6 = (_DWORD *)sub_85C050(v5, 8); if ( v6 ) sub_42AB40(v6, a2); } } ++v4; } while ( (signed int)v4 < v3 ); } return 1; } //----- (00674620) -------------------------------------------------------- char __thiscall sub_674620(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v5; // eax _DWORD **v6; // esi signed int v7; // edi _DWORD *v8; // eax v2 = this; v3 = (_DWORD *)this[62]; if ( !v3 ) return 0; v5 = (_DWORD *)sub_85C050(v3, 8); if ( v5 ) sub_42AB40(v5, a2); v6 = (_DWORD **)(v2 + 66); v7 = 3; do { if ( *v6 ) { v8 = (_DWORD *)sub_85C050(*v6, 8); if ( v8 ) sub_42AB40(v8, a2); } ++v6; --v7; } while ( v7 ); return 1; } //----- (00674690) -------------------------------------------------------- char __thiscall sub_674690(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v5; // eax _DWORD **v6; // esi signed int v7; // edi _DWORD *v8; // eax v2 = this; v3 = (_DWORD *)this[63]; if ( !v3 ) return 0; v5 = (_DWORD *)sub_85C050(v3, 8); if ( v5 ) sub_42AB40(v5, a2); v6 = (_DWORD **)(v2 + 69); v7 = 3; do { if ( *v6 ) { v8 = (_DWORD *)sub_85C050(*v6, 8); if ( v8 ) sub_42AB40(v8, a2); } ++v6; --v7; } while ( v7 ); return 1; } //----- (00674700) -------------------------------------------------------- char __thiscall sub_674700(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v5; // eax _DWORD **v6; // esi signed int v7; // edi _DWORD *v8; // eax v2 = this; v3 = (_DWORD *)this[64]; if ( !v3 ) return 0; v5 = (_DWORD *)sub_85C050(v3, 8); if ( v5 ) sub_42AB40(v5, a2); v6 = (_DWORD **)(v2 + 72); v7 = 3; do { if ( *v6 ) { v8 = (_DWORD *)sub_85C050(*v6, 8); if ( v8 ) sub_42AB40(v8, a2); } ++v6; --v7; } while ( v7 ); return 1; } //----- (00674770) -------------------------------------------------------- char __thiscall sub_674770(_DWORD *this, signed int a2, int a3) { _DWORD *v3; // edi int v4; // ecx char result; // al int v6; // eax int v7; // esi _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax v3 = this; v4 = this[56]; if ( !v4 ) return 0; if ( a2 >= 3 ) return 0; v6 = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 72))(a3); v7 = sub_402BA0((int)dword_BA455C, v6); if ( !v7 ) return 0; v8 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v7 + 72))(v7, off_AB40A4[0]); if ( !sub_8F5CC0(v8, &v3[a2 + 66]) ) return 0; v9 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v7 + 72))(v7, off_AB40D0[0]); if ( !sub_8F5CC0(v9, &v3[a2 + 69]) ) return 0; v10 = (_DWORD *)(*(int (__thiscall **)(int, char *))(*(_DWORD *)v7 + 72))(v7, off_AB40D4[0]); if ( !sub_8F5CC0(v10, &v3[a2 + 72]) ) return 0; result = 1; ++v3[65]; return result; } // AB40A4: using guessed type char *off_AB40A4[27]; // AB40D0: using guessed type char *off_AB40D0[16]; // AB40D4: using guessed type char *off_AB40D4[15]; //----- (00674840) -------------------------------------------------------- _DWORD *__cdecl sub_674840(_DWORD *a1) { int v1; // edi int v2; // esi int v3; // eax char v4; // al int v5; // eax const char *v6; // eax unsigned int v7; // eax int v8; // edi int v9; // ecx int v10; // esi int v11; // eax _DWORD *result; // eax v1 = 0; if ( a1[5] ) { while ( 1 ) { v2 = *(_DWORD *)(a1[4] + 4 * v1); if ( v2 ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 4))(v2); if ( v3 ) { while ( (char *)v3 != dword_BA47F0 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_6; } v4 = 1; } else { LABEL_6: v4 = 0; } v5 = v4 != 0 ? v2 : 0; if ( v5 ) { v6 = *(const char **)(v5 + 12); if ( v6 ) { if ( strstr(v6, "NiBoneLOD#BoneRoot") ) break; } } } if ( (unsigned int)++v1 >= a1[5] ) goto LABEL_11; } result = a1; } else { LABEL_11: v7 = a1[47]; v8 = 0; if ( v7 ) { if ( v7 <= 0 ) goto LABEL_21; while ( 1 ) { v9 = a1[45]; v10 = *(_DWORD *)(v9 + 4 * v8); if ( v10 ) { v11 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 4))(*(_DWORD *)(v9 + 4 * v8)); if ( v11 ) { while ( (char *)v11 != dword_BA455C ) { v11 = *(_DWORD *)(v11 + 4); if ( !v11 ) goto LABEL_21; } result = (_DWORD *)sub_674840(v10); if ( result ) break; } } LABEL_21: if ( a1[47] <= (unsigned int)++v8 ) goto LABEL_22; } } else { LABEL_22: result = 0; } } return result; } //----- (00674910) -------------------------------------------------------- char __thiscall sub_674910(_BYTE *this, unsigned __int8 a2, char a3, char a4, const char *a5, const char *a6) { _BYTE *v6; // ebx int v7; // eax int v8; // esi int v9; // edi int v11; // [esp+1Ch] [ebp-118h] char v12; // [esp+20h] [ebp-114h] int v13; // [esp+130h] [ebp-4h] v6 = this; LOBYTE(v11) = a3; v7 = strlen(a5); if ( v7 ) { v7 = strcmp(a5, "-"); if ( v7 ) { if ( a4 ) { v7 = sub_66C880(&unk_AD8D28, v6[168], v6[162], v11, a2, (int)a5, (int)a6); v8 = v7; v11 = v7; if ( v7 ) LOBYTE(v7) = InterlockedIncrement((volatile LONG *)(v7 + 4)); v13 = 0; if ( v8 ) { sub_673300(v6, (int *)1, (void **)v8, 0); LOBYTE(v7) = (unsigned int)sub_65AD50((int *)&v6[4 * a2 + 4], &v11); } v13 = -1; if ( v8 ) { v7 = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !v7 ) LOBYTE(v7) = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } else { memset(&v12, 0, 0x104u); sprintf(&v12, "#%s", a5); v7 = (*(int (__stdcall **)(char *))(**((_DWORD **)v6 + 56) + 72))(&v12); v9 = v7; if ( v7 ) { sub_56FF80(&v6[4 * a2 + 4], v7); *(_WORD *)(*(_DWORD *)&v6[4 * a2 + 4] + 28) &= 0xFFFEu; v7 = strlen(a6); if ( v7 ) { v7 = strcmp(a6, "-"); if ( v7 ) LOBYTE(v7) = sub_66CCE0(v9, v6[162], v6[168], (int)a6); } } } } } return v7; } //----- (00674B40) -------------------------------------------------------- char __thiscall sub_674B40(_DWORD *this) { _DWORD *v1; // ebx unsigned __int16 v2; // ST00_2 unsigned __int16 v3; // ST00_2 int v5; // [esp+Ch] [ebp-2Ch] int v6; // [esp+12h] [ebp-26h] int v7; // [esp+16h] [ebp-22h] int v8; // [esp+1Ah] [ebp-1Eh] int v9; // [esp+1Eh] [ebp-1Ah] unsigned __int16 v10; // [esp+22h] [ebp-16h] int v11; // [esp+24h] [ebp-14h] int v12; // [esp+2Ah] [ebp-Eh] unsigned __int16 v13; // [esp+2Eh] [ebp-Ah] int v14; // [esp+30h] [ebp-8h] unsigned __int8 v15; // [esp+35h] [ebp-3h] char v16; // [esp+36h] [ebp-2h] v1 = this; qmemcpy(&v5, (char *)this + 169, 0x2Bu); sub_673190(this, v5, 0); sub_673190(v1, v6, v15 & 0xF); sub_673190(v1, v7, v15 >> 4); sub_673190(v1, HIWORD(v7), v16 & 0xF); sub_673190(v1, v9, 0); sub_673190(v1, HIWORD(v8), 0); sub_673190(v1, v8, 0); v2 = v14; v1[170] = 25; sub_673190(v1, v2, 0); sub_673190(v1, HIWORD(v9), 0); sub_673190(v1, v11, 0); sub_673190(v1, HIWORD(v5), 0); v3 = v10; v1[170] = 28; sub_673190(v1, v3, 0); sub_673190(v1, v12, 0); sub_673190(v1, HIWORD(v12), 0); return sub_673190(v1, v13, 0); } //----- (00674C60) -------------------------------------------------------- char __thiscall sub_674C60(int this) { _DWORD *v1; // ebx unsigned __int16 v2; // ST00_2 unsigned __int16 v3; // ST00_2 int v5; // [esp+Ch] [ebp-2Ch] unsigned __int16 v6; // [esp+10h] [ebp-28h] int v7; // [esp+12h] [ebp-26h] int v8; // [esp+16h] [ebp-22h] int v9; // [esp+1Ah] [ebp-1Eh] int v10; // [esp+1Eh] [ebp-1Ah] int v11; // [esp+22h] [ebp-16h] int v12; // [esp+26h] [ebp-12h] int v13; // [esp+2Ah] [ebp-Eh] unsigned __int16 v14; // [esp+2Eh] [ebp-Ah] int v15; // [esp+30h] [ebp-8h] unsigned __int8 v16; // [esp+34h] [ebp-4h] unsigned __int8 v17; // [esp+35h] [ebp-3h] char v18; // [esp+36h] [ebp-2h] v1 = (_DWORD *)this; qmemcpy(&v5, (const void *)(this + 169), 0x2Bu); sub_672E10(this); sub_673190(v1, v5, 0); sub_673190(v1, v7, v17 & 0xF); sub_673190(v1, HIWORD(v7), v16 & 0xF); sub_673190(v1, v6, v16 >> 4); sub_673190(v1, v8, v17 >> 4); sub_673190(v1, HIWORD(v8), v18 & 0xF); sub_673190(v1, v12, 0); sub_673190(v1, HIWORD(v12), 0); sub_673190(v1, v10, 0); sub_673190(v1, HIWORD(v9), 0); sub_673190(v1, v9, 0); v2 = v15; v1[170] = 25; sub_673190(v1, v2, 0); sub_673190(v1, HIWORD(v10), 0); sub_673190(v1, HIWORD(v11), 0); sub_673190(v1, HIWORD(v5), 0); v3 = v11; v1[170] = 28; sub_673190(v1, v3, 0); sub_673190(v1, v13, 0); sub_673190(v1, HIWORD(v13), 0); sub_673190(v1, v14, 0); return sub_673190(v1, HIWORD(v15), 0); } //----- (00674DE0) -------------------------------------------------------- char __userpurge sub_674DE0@(int a1@, int a2@, int a3) { int v3; // ebx int v4; // eax int v5; // esi int v6; // ST14_4 int v7; // edi _DWORD *v8; // eax int v9; // esi int v10; // edi char v11; // bl const char *v12; // esi int v13; // edi const char *v14; // eax int v15; // esi int v16; // ecx int v18; // [esp+20h] [ebp-Ch] int v19; // [esp+24h] [ebp-8h] int v20; // [esp+28h] [ebp-4h] v3 = a1; v4 = *(_DWORD *)(a1 + 676); v18 = a1; if ( v4 ) { LOBYTE(v4) = (unsigned int)sub_6ACDF0(&unk_B91250, (int *)v4); *(_DWORD *)(v3 + 676) = 0; } if ( !(_BYTE)a3 ) { *(_BYTE *)(v3 + 673) = 0; return v4; } v4 = *(unsigned __int16 *)(v3 + 205); if ( (_WORD)v4 != -1 || *(_WORD *)(v3 + 191) != -1 ) { v5 = dword_ACB230; v6 = a2; v7 = *(unsigned __int16 *)(v3 + 205); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4, v6) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v5 + 200) ) { v8 = (_DWORD *)(*(_DWORD *)(v5 + 196) + 4 * v7); v20 = *v8 ? *v8 : 0; } else { v20 = 0; } } else { v20 = 0; } v9 = dword_ACB230; v10 = *(unsigned __int16 *)(v3 + 191); LOBYTE(v4) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v10); if ( (_BYTE)v4 ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v4 = *(_DWORD *)(v9 + 196) + 4 * v10; v19 = *(_DWORD *)v4 ? *(_DWORD *)v4 : 0; } else { v19 = 0; } } else { v19 = 0; } if ( v20 || v19 ) { v11 = 0; v12 = 0; v13 = 0; HIBYTE(a3) = 0; if ( v20 ) { v14 = sub_4B17D0((const char *)(v20 + 2)); v12 = v14; if ( v14 ) { if ( *((_DWORD *)v14 + 9) == 1 ) v11 = 1; } } LOBYTE(v4) = v19; if ( v19 ) { v4 = (int)sub_4B17D0((const char *)(v19 + 2)); v13 = v4; if ( v4 ) { if ( *(_DWORD *)(v4 + 36) == 1 ) HIBYTE(a3) = 1; } } if ( v11 || HIBYTE(a3) ) { if ( v12 && *((_DWORD *)v12 + 9) == 1 ) { v15 = v18; LOWORD(v4) = *(_WORD *)(v18 + 205); if ( (_WORD)v4 == *(_WORD *)v20 ) { v16 = *(_DWORD *)(v18 + 52); if ( v16 ) { LABEL_42: v4 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v16 + 72))("Mini"); if ( v4 ) { a3 = 0; LOBYTE(v4) = sub_6AF890(&unk_B91250, (int)&a3, "MiniMon_Auto", v4, flt_ACCFCC, 1); *(_DWORD *)(v15 + 676) = a3; } return v4; } } } else { v15 = v18; } if ( !v13 ) return v4; if ( *(_DWORD *)(v13 + 36) != 1 ) return v4; LOBYTE(v4) = v19; if ( *(_WORD *)(v15 + 191) != *(_WORD *)v19 ) return v4; v16 = *(_DWORD *)(v15 + 56); if ( !v16 ) return v4; goto LABEL_42; } } } return v4; } // 674DE0: could not find valid save-restore pair for edi // ACB230: using guessed type int dword_ACB230; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00674FF0) -------------------------------------------------------- char __userpurge sub_674FF0@(int a1@, int a2@, int a3) { int v3; // edi int v4; // eax int v5; // ST14_4 int v6; // esi int v7; // ebx _DWORD *v8; // eax int v9; // esi int v10; // ebx _DWORD *v11; // eax const char *v12; // esi int v13; // ebx const char *v14; // eax int v15; // ecx int v17; // [esp+20h] [ebp-Ch] int v18; // [esp+24h] [ebp-8h] char v19; // [esp+2Bh] [ebp-1h] v3 = a1; v4 = *(_DWORD *)(a1 + 688); if ( v4 ) { LOBYTE(v4) = (unsigned int)sub_6ACDF0(&unk_B91250, *(int **)(a1 + 688)); *(_DWORD *)(v3 + 688) = 0; } if ( (_BYTE)a3 ) { v4 = *(unsigned __int16 *)(v3 + 205); if ( (_WORD)v4 != -1 || *(_WORD *)(v3 + 191) != -1 ) { v5 = a2; v6 = dword_ACB230; v7 = *(unsigned __int16 *)(v3 + 205); if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4, v5) ) { if ( (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) ) { v8 = (_DWORD *)(*(_DWORD *)(v6 + 196) + 4 * v7); v17 = *v8 ? *v8 : 0; } else { v17 = 0; } } else { v17 = 0; } v9 = dword_ACB230; v10 = *(unsigned __int16 *)(v3 + 191); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v10) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = (_DWORD *)(*(_DWORD *)(v9 + 196) + 4 * v10); v18 = *v11 ? *v11 : 0; } else { v18 = 0; } } else { v18 = 0; } LOBYTE(v4) = v17; if ( v17 || v18 ) { v12 = 0; v13 = 0; HIBYTE(a3) = 0; v19 = 0; *(_BYTE *)(v3 + 684) = 1; if ( v17 ) { v14 = sub_4B17D0((const char *)(v17 + 2)); v12 = v14; if ( v14 ) { if ( *((_DWORD *)v14 + 9) == 2 ) HIBYTE(a3) = 1; } } LOBYTE(v4) = v18; if ( v18 ) { v4 = (int)sub_4B17D0((const char *)(v18 + 2)); v13 = v4; if ( v4 ) { if ( *(_DWORD *)(v4 + 36) == 2 ) v19 = 1; } } if ( HIBYTE(a3) || v19 ) { if ( v12 && *((_DWORD *)v12 + 9) == 2 && (LOWORD(v4) = *(_WORD *)(v3 + 205), (_WORD)v4 == *(_WORD *)v17) && (v15 = *(_DWORD *)(v3 + 52)) != 0 || v13 && *(_DWORD *)(v13 + 36) == 2 && (LOBYTE(v4) = v18, *(_WORD *)(v3 + 191) == *(_WORD *)v18) && (v15 = *(_DWORD *)(v3 + 56)) != 0 ) { v4 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v15 + 72))("Mini"); if ( v4 ) { a3 = 0; LOBYTE(v4) = sub_6AF890(&unk_B91250, (int)&a3, "Minimon_AutoItemUse", v4, flt_ACCFCC, 1); *(_DWORD *)(v3 + 688) = a3; } } } } } } else { *(_BYTE *)(v3 + 684) = 0; } return v4; } // 674FF0: could not find valid save-restore pair for esi // ACB230: using guessed type int dword_ACB230; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006752D0) -------------------------------------------------------- void __cdecl sub_6752D0(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // eax unsigned int v5; // esi _DWORD *v6; // ebx int v7; // eax v2 = a1; if ( a1 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA455C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v5 = 0; if ( v2[48] ) { v6 = a2; do { if ( v2[47] > v5 ) v7 = *(_DWORD *)(v2[45] + 4 * v5); else v7 = 0; sub_6752D0(v7, v6); ++v5; } while ( v5 < v2[48] ); } } else { LABEL_5: v4 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v4 ) { while ( (char *)v4 != dword_BA4840 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return; } a1 = v2; sub_6B9900(a2, &a1); } } } } //----- (00675370) -------------------------------------------------------- char __thiscall sub_675370(int this) { int v1; // esi int v2; // eax int v3; // eax int v4; // edi int v5; // ebx int v6; // edi _DWORD *v7; // ecx _DWORD *v8; // eax volatile LONG *v9; // edi int v10; // eax _DWORD *v11; // ecx _DWORD *v12; // eax int v13; // eax void **v15; // [esp+1Ch] [ebp-14h] void **v16; // [esp+20h] [ebp-10h] v1 = this; v16 = sub_669D20(&unk_AD8D28, *(_BYTE *)(this + 168), *(_BYTE *)(this + 162), *(unsigned __int8 *)(this + 165)); v15 = sub_669FF0(&unk_AD8D28, *(_BYTE *)(v1 + 168), *(_BYTE *)(v1 + 162), *(unsigned __int8 *)(v1 + 165)); v2 = *(_DWORD *)(v1 + 140); if ( *(_BYTE *)(v1 + 144) ) { if ( v2 ) *(_WORD *)(v2 + 28) |= 1u; v2 = sub_669B20(&unk_AD8D28, *(_BYTE *)(v1 + 168), *(_BYTE *)(v1 + 162), *(unsigned __int8 *)(v1 + 144)); v9 = (volatile LONG *)v2; if ( v2 ) { InterlockedIncrement((volatile LONG *)(v2 + 4)); v10 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v9 + 72))(v9, "LODGroup01"); sub_67AA20((_DWORD *)v1, v10); sub_674470(*(_DWORD *)(v1 + 40), (int)v16); v11 = *(_DWORD **)(v1 + 244); if ( v11 ) { v12 = (_DWORD *)sub_85C050(v11, 8); if ( v12 ) sub_863F20(v12, 0, 0); } v13 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v9 + 72))(v9, "EyeShape"); sub_673AC0((_DWORD *)v1, v13); sub_6744F0(*(_DWORD **)(v1 + 156), (int)v15); v2 = InterlockedDecrement(v9 + 1); if ( !v2 ) LOBYTE(v2) = (**(int (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); } } else if ( v2 ) { *(_WORD *)(v2 + 28) &= 0xFFFEu; v3 = *(_DWORD *)(v1 + 40); if ( v3 ) { sub_8D8240((_DWORD *)(v3 + 176)); sub_85BED0(*(_DWORD ***)(v1 + 40), 0.0, 1); } v4 = *(_DWORD *)(v1 + 28); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 28) = 0; } v5 = *(_DWORD *)(v1 + 140); v6 = *(_DWORD *)(v1 + 28); if ( v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v1 + 28) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } sub_673280((_DWORD *)v1, (int)v16); v7 = *(_DWORD **)(v1 + 244); if ( v7 ) { v8 = (_DWORD *)sub_85C050(v7, 8); if ( v8 ) sub_863F20(v8, 0, 0); } if ( *(_DWORD *)(v1 + 156) && *(_DWORD *)(v1 + 40) ) *(_DWORD *)(v1 + 156) = 0; LOBYTE(v2) = sub_6744F0(*(_DWORD **)(v1 + 148), (int)v15); } return v2; } //----- (006755F0) -------------------------------------------------------- char __thiscall sub_6755F0(int this, int a2, int a3) { int v3; // edi signed int v4; // esi const char *v5; // eax int v6; // ebx int v7; // esi v3 = this; v4 = 0xFFFF; if ( a2 == 25 ) { v4 = *(unsigned __int16 *)(this + 191); } else if ( a2 == 28 ) { v4 = *(unsigned __int16 *)(this + 205); } LOBYTE(v5) = -1; *(_BYTE *)(this + 673) = 0; *(_BYTE *)(this + 684) = 0; if ( (_WORD)v4 != -1 ) { v6 = dword_ACB230; LOBYTE(v5) = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4); if ( (_BYTE)v5 ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v6 + 200) ) { v5 = (const char *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v4); if ( *(_DWORD *)v5 ) { v5 = *(const char **)v5; if ( v5 ) { v5 = sub_4B17D0(v5 + 2); v7 = (int)v5; if ( v5 ) { if ( *((_DWORD *)v5 + 9) == 1 && !*(_DWORD *)(v3 + 676) ) { *(_BYTE *)(v3 + 673) = 1; LOBYTE(v5) = sub_674DE0(v3, v3, 1); } if ( *(_DWORD *)(v7 + 36) == 2 && !*(_DWORD *)(v3 + 688) ) { *(_BYTE *)(v3 + 684) = 1; LOBYTE(v5) = sub_674FF0(v3, v7, 1); } } } } } } } return (char)v5; } // ACB230: using guessed type int dword_ACB230; //----- (006756D0) -------------------------------------------------------- char __stdcall sub_6756D0(_DWORD *a1, unsigned __int8 a2, _DWORD ***a3) { int *v3; // eax int *v4; // esi int v6; // eax int v7; // ebx _DWORD *v8; // eax void *v9; // ecx _DWORD **v10; // edi _DWORD *v11; // esi _DWORD *i; // eax _DWORD *v13; // eax int v14; // edx int v15; // eax _DWORD *v16; // ebx _DWORD *v17; // eax _DWORD *v18; // esi int *v19; // ecx int v20; // edx _DWORD *v21; // ecx int v22; // edi signed int v23; // ebx _DWORD *v24; // esi _DWORD *v25; // eax void (__stdcall ***v26)(signed int); // esi void (__stdcall ***v27)(signed int); // ecx void (__stdcall ***v28)(signed int); // ecx void (__stdcall ***v29)(signed int); // ecx void **v30; // eax _DWORD *v31; // ST04_4 int v32; // [esp+10h] [ebp-40h] int v33; // [esp+14h] [ebp-3Ch] int v34; // [esp+18h] [ebp-38h] int v35; // [esp+1Ch] [ebp-34h] void **v36; // [esp+20h] [ebp-30h] _DWORD *v37; // [esp+24h] [ebp-2Ch] int v38; // [esp+28h] [ebp-28h] int v39; // [esp+2Ch] [ebp-24h] void *v40; // [esp+30h] [ebp-20h] _DWORD *v41; // [esp+34h] [ebp-1Ch] int *v42; // [esp+38h] [ebp-18h] void (__stdcall ***v43)(signed int); // [esp+3Ch] [ebp-14h] _DWORD *v44; // [esp+40h] [ebp-10h] int v45; // [esp+4Ch] [ebp-4h] _DWORD *v46; // [esp+5Ch] [ebp+Ch] _DWORD *v47; // [esp+5Ch] [ebp+Ch] v3 = sub_66A310(&unk_AD8D28, a2); v4 = v3; if ( !v3 ) return 0; if ( !sub_8F5CC0(v3, &v41) ) return 0; v46 = (_DWORD *)sub_85C050(v41, 8); if ( !v46 ) return 0; v6 = (*(int (__thiscall **)(int *, const char *))(*v4 + 72))(v4, "EffectNode"); v7 = v6; if ( v6 && *(_DWORD *)(v6 + 212) > 0u ) { v8 = *(_DWORD **)(v6 + 204); if ( v8 ) { do { v9 = (void *)v8[2]; v10 = (_DWORD **)*v8; if ( v9 ) { v11 = (_DWORD *)sub_85BD60(v9); sub_861480(v11, (int)a1); sub_859D00(a1, v11); } if ( !v10 ) break; v8 = *v10; } while ( *v10 ); } sub_85C6F0(a1); if ( *(_DWORD *)(v7 + 212) > 0u ) { for ( i = (_DWORD *)a1[51]; i; i = (_DWORD *)*i ) ; } } v13 = (_DWORD *)v46[10]; v33 = v13[4]; v14 = v13[1]; v15 = v13[2]; v32 = 0; v34 = v14; v35 = v15; v16 = a3; v44 = sub_85B610(v46, (int)dword_BA3BC8); if ( !a3[1] ) return 0; v47 = **a3; if ( v47 == *a3 ) return 1; do { v17 = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*a1 + 72))(v47[2]); if ( !v17 ) goto LABEL_51; v39 = 0; v37 = 0; v38 = 0; v36 = &PgTList::`vftable'; v45 = 0; sub_6752D0(v17, &v36); v18 = v37; v19 = v37; if ( !v37 ) goto LABEL_48; while ( 2 ) { v20 = *v19; v21 = (_DWORD *)v19[2]; v42 = (int *)v20; v22 = sub_85C050(v21, 8); v23 = 0; if ( !v22 ) goto LABEL_46; v43 = 0; do { v24 = (_DWORD *)*(&v32 + v23); if ( !v24 ) goto LABEL_43; v25 = operator new(0x18u); v40 = v25; LOBYTE(v45) = 1; if ( v25 ) v26 = (void (__stdcall ***)(signed int))sub_8639B0(v25, v24); else v26 = 0; LOBYTE(v45) = 0; v43 = v26; switch ( v23 ) { case 1: v29 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v22 + 40) + 16); v40 = v26; if ( v26 != v29 ) { if ( v29 ) (**v29)(1); sub_823870((_DWORD *)(v22 + 36), 4u, &v40); } break; case 2: v28 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v22 + 40) + 4); v40 = v26; if ( v26 != v28 ) { if ( v28 ) (**v28)(1); sub_823870((_DWORD *)(v22 + 36), 1u, &v40); } break; case 3: v27 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v22 + 40) + 8); v40 = v26; if ( v26 != v27 ) { if ( v27 ) (**v27)(1); sub_823870((_DWORD *)(v22 + 36), 2u, &v40); } break; default: goto LABEL_43; } sub_863770(v22, (int)v26); LABEL_43: ++v23; } while ( v23 < 4 ); if ( v44 ) { dword_BA4564 = 1; v30 = (void **)sub_85BD60(v44); sub_814EC0(v30, v43, v22); } LABEL_46: if ( v42 ) { v19 = v42; continue; } break; } v18 = v37; v16 = a3; LABEL_48: v36 = &PgTList::`vftable'; v45 = 2; while ( v18 ) { v31 = v18; v18 = (_DWORD *)*v18; ((void (__thiscall *)(void ***, _DWORD *))v36[2])(&v36, v31); } v39 = 0; v37 = 0; v38 = 0; v45 = -1; v36 = &NiTListBase,NiGeometry *>::`vftable'; LABEL_51: v47 = (_DWORD *)*v47; } while ( v47 != (_DWORD *)*v16 ); return 1; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F42B4: using guessed type void *PgTList::`vftable'; // BA4564: using guessed type int dword_BA4564; //----- (006759D0) -------------------------------------------------------- _DWORD *__thiscall sub_6759D0(int this, char a2) { _DWORD *result; // eax int v3; // [esp+0h] [ebp-4h] v3 = this; result = (_DWORD *)0xFFFF; if ( *(_WORD *)(this + 201) != -1 ) result = sub_67AE20(&v3, **(int ***)(this + 560), *(int **)(this + 560), &a2); return result; } //----- (00675A10) -------------------------------------------------------- int __thiscall sub_675A10(_DWORD *this) { int result; // eax int v2; // edi void **v3; // ebx void **v4; // esi result = 0; this[56] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; this[15] = 0; this[16] = 0; this[17] = 0; this[18] = 0; this[19] = 0; this[20] = 0; this[21] = 0; this[22] = 0; this[23] = 0; this[24] = 0; this[25] = 0; this[26] = 0; this[27] = 0; this[28] = 0; this[29] = 0; this[30] = 0; this[31] = 0; this[32] = 0; this[33] = 0; this[34] = 0; this[60] = 0; this[61] = 0; this[62] = 0; this[63] = 0; this[64] = 0; this[66] = 0; this[67] = 0; this[68] = 0; this[69] = 0; this[70] = 0; this[71] = 0; this[72] = 0; this[73] = 0; this[74] = 0; v2 = (int)(this + 139); v3 = *(void ***)(this[140] + 4); v4 = v3; if ( !*((_BYTE *)v3 + 21) ) { do { sub_6DA320(v4[2]); v4 = (void **)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 21) ); result = 0; } *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) = *(_DWORD *)(v2 + 4); **(_DWORD **)(v2 + 4) = *(_DWORD *)(v2 + 4); *(_DWORD *)(*(_DWORD *)(v2 + 4) + 8) = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 8) = 0; return result; } //----- (00675B20) -------------------------------------------------------- char __thiscall sub_675B20(_DWORD *this, int a2) { _DWORD *v2; // edi int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax v2 = this; sub_675A10(this); if ( !a2 ) return 0; v2[56] = a2; sub_6613F0(v2 + 143, a2); v4 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB408C[0]); v2[9] = sub_402BA0((int)dword_BA455C, v4); v5 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB409C[0]); v2[13] = sub_402BA0((int)dword_BA455C, v5); v6 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB40B8[0]); v2[19] = sub_402BA0((int)dword_BA455C, v6); v7 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB40BC[0]); v2[20] = sub_402BA0((int)dword_BA455C, v7); v8 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB40D8[0]); v2[25] = sub_402BA0((int)dword_BA455C, v8); v9 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB40DC[0]); v2[26] = sub_402BA0((int)dword_BA455C, v9); v10 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)a2 + 72))(a2, off_AB40AC[0]); v2[16] = sub_402BA0((int)dword_BA455C, v10); if ( v2[37] ) v2[37] = 0; return 1; } // AB408C: using guessed type char *off_AB408C[33]; // AB409C: using guessed type char *off_AB409C[29]; // AB40AC: using guessed type char *off_AB40AC[25]; // AB40B8: using guessed type char *off_AB40B8[22]; // AB40BC: using guessed type char *off_AB40BC[21]; // AB40D8: using guessed type char *off_AB40D8[14]; // AB40DC: using guessed type char *off_AB40DC[13]; //----- (00675C50) -------------------------------------------------------- void __thiscall sub_675C50(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // esi _DWORD *v5; // esi int v6; // eax int v7; // ecx int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi void (__thiscall ***v10)(_DWORD, signed int); // esi _DWORD *v11; // ecx int *v12; // eax _DWORD *v13; // edx int v14; // edi int *v15; // eax _DWORD *v16; // [esp+Ch] [ebp-20h] int v17; // [esp+10h] [ebp-1Ch] int *v18; // [esp+14h] [ebp-18h] int *v19; // [esp+18h] [ebp-14h] int v20; // [esp+1Ch] [ebp-10h] int v21; // [esp+28h] [ebp-4h] v2 = this; v17 = a2; v16 = this + 139; sub_67ABA0(this + 139, &v18, &v17); v20 = 0; sub_67A8C0(v18, v19, &v20); v3 = v20; if ( v20 && v2[56] ) { v4 = v16; v17 = a2; sub_67AF30(v16, &v19, &v17); if ( v3 ) { v17 = v3; do { v5 = (_DWORD *)v19[4]; if ( v5 ) { v6 = (*(int (__thiscall **)(int))(*v5 + 4))(v19[4]); if ( v6 ) { while ( (char *)v6 != dword_BA455C ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_21; } v7 = v5[8]; if ( v7 ) { (*(void (__stdcall **)(int *, _DWORD *))(*(_DWORD *)v7 + 120))(&v20, v5); v8 = v20; v21 = 0; if ( v20 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v20; if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v9 ) (**v9)(v9, 1); v8 = 0; v20 = 0; } v21 = -1; if ( v8 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } } sub_717D90(&v19); } } LABEL_21: --v17; } while ( v17 ); v4 = v16; } v11 = (_DWORD *)v4[1]; v12 = (int *)v11[1]; v13 = (_DWORD *)v4[1]; if ( *((_BYTE *)v12 + 21) ) { v14 = a2; } else { do { v14 = a2; if ( v12[3] >= a2 ) { v13 = v12; v12 = (int *)*v12; } else { v12 = (int *)v12[2]; } } while ( !*((_BYTE *)v12 + 21) ); } v15 = (int *)v11[1]; while ( !*((_BYTE *)v15 + 21) ) { if ( v14 >= v15[3] ) { v15 = (int *)v15[2]; } else { v11 = v15; v15 = (int *)*v15; } } sub_6CDE90(v4, &a2, v13, v11); } } //----- (00675E10) -------------------------------------------------------- char __thiscall sub_675E10(_DWORD *this, char *a2) { _DWORD *v2; // edi char *v3; // esi char *v5; // ST08_4 int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // eax int v15; // eax int v16; // eax int v17; // eax int v18; // eax int v19; // eax int v20; // eax int v21; // eax int v22; // eax int v23; // eax int v24; // eax int v25; // eax int v26; // eax int v27; // eax int v28; // eax int v29; // eax int v30; // eax int v31; // eax int v32; // eax int **v33; // eax int v34; // ST00_4 int **v35; // ecx int *v36; // eax int v37; // eax int v38; // ecx _DWORD *v39; // eax _DWORD *v40; // eax _DWORD *v41; // eax int v42; // eax int v43; // eax void **v44; // [esp+10h] [ebp-30h] void **v45; // [esp+1Ch] [ebp-24h] int v46; // [esp+20h] [ebp-20h] int v47; // [esp+24h] [ebp-1Ch] int **v48; // [esp+28h] [ebp-18h] int v49; // [esp+2Ch] [ebp-14h] int v50; // [esp+3Ch] [ebp-4h] v2 = this; sub_675A10(this); v3 = a2; if ( !a2 ) return 0; v5 = a2; v2[56] = a2; sub_6613F0(v2 + 143, (int)v5); v6 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4088[0]); v2[8] = sub_402BA0((int)dword_BA455C, v6); v7 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB408C[0]); v2[9] = sub_402BA0((int)dword_BA455C, v7); v8 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4090[0]); v2[10] = sub_402BA0((int)dword_BA455C, v8); v9 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4094[0]); v2[11] = sub_402BA0((int)dword_BA455C, v9); v10 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4098[0]); v2[12] = sub_402BA0((int)dword_BA455C, v10); v11 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB409C[0]); v2[13] = sub_402BA0((int)dword_BA455C, v11); v12 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40A0[0]); v2[14] = sub_402BA0((int)dword_BA455C, v12); v13 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40A8[0]); v2[15] = sub_402BA0((int)dword_BA455C, v13); v14 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40AC[0]); v2[16] = sub_402BA0((int)dword_BA455C, v14); v15 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40B0[0]); v2[17] = sub_402BA0((int)dword_BA455C, v15); v16 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40B4[0]); v2[18] = sub_402BA0((int)dword_BA455C, v16); v17 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40B8[0]); v2[19] = sub_402BA0((int)dword_BA455C, v17); v18 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40BC[0]); v2[20] = sub_402BA0((int)dword_BA455C, v18); v19 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40C0[0]); v2[21] = sub_402BA0((int)dword_BA455C, v19); v20 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40C4[0]); v2[22] = sub_402BA0((int)dword_BA455C, v20); v21 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40C8[0]); v2[23] = sub_402BA0((int)dword_BA455C, v21); v22 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40CC[0]); v2[24] = sub_402BA0((int)dword_BA455C, v22); v23 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40D8[0]); v2[25] = sub_402BA0((int)dword_BA455C, v23); v24 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40DC[0]); v2[26] = sub_402BA0((int)dword_BA455C, v24); v25 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40EC[0]); v2[27] = sub_402BA0((int)dword_BA455C, v25); v26 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40F0[0]); v2[28] = sub_402BA0((int)dword_BA455C, v26); v27 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40F4[0]); v2[29] = sub_402BA0((int)dword_BA455C, v27); v28 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40F8[0]); v2[30] = sub_402BA0((int)dword_BA455C, v28); v29 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40FC[0]); v2[31] = sub_402BA0((int)dword_BA455C, v29); v30 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4100[0]); v2[32] = sub_402BA0((int)dword_BA455C, v30); v31 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4104[0]); v2[33] = sub_402BA0((int)dword_BA455C, v31); v32 = (*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB4108[0]); v2[34] = sub_402BA0((int)dword_BA455C, v32); v49 = 0; v33 = (int **)operator new(0xCu); if ( !v33 ) { a2 = 0; std::exception::exception((std::exception *)&v44, (const char *const *)&a2); v44 = &std::bad_alloc::`vftable'; _CxxThrowException(&v44, &_TI2_AVbad_alloc_std__); } v48 = v33; *v33 = (int *)v33; v48[1] = (int *)v48; v50 = 0; v46 = 0; v47 = -1; v45 = &FindFaceNode::`vftable'; v34 = v2[56]; LOBYTE(v50) = 1; sub_8CFE00(&v45, v34, (int)dword_BA455C, (int)&v48); v35 = v48; v36 = *v48; if ( *v48 != (int *)v48 ) { while ( !v36[2] ) { if ( v36 != (int *)v35 ) { *(_DWORD *)v36[1] = *v36; *(_DWORD *)(*v36 + 4) = v36[1]; operator delete(v36); v35 = v48; --v49; } v36 = *v35; if ( *v35 == (int *)v35 ) goto LABEL_11; } v2[35] = sub_402BA0((int)dword_BA455C, v36[2]); } LABEL_11: if ( sub_674770(v2, 0, (int)off_AB40E0[0]) && sub_674770(v2, 1, (int)off_AB40E4[0]) && sub_674770(v2, 2, (int)off_AB40E8[0]) ) { v37 = v2[69]; v38 = v2[72]; v2[62] = v2[66]; v2[63] = v37; v2[64] = v38; } else { v39 = (_DWORD *)(*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40A4[0]); sub_8F5CC0(v39, v2 + 62); v40 = (_DWORD *)(*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40D0[0]); sub_8F5CC0(v40, v2 + 63); v41 = (_DWORD *)(*(int (__thiscall **)(char *, char *))(*(_DWORD *)v3 + 72))(v3, off_AB40D4[0]); sub_8F5CC0(v41, v2 + 64); } v42 = (*(int (__thiscall **)(char *, const char *))(*(_DWORD *)v3 + 72))(v3, "EyeShape"); v43 = sub_402BA0((int)dword_BA455C, v42); v2[37] = v43; if ( v43 ) *(_WORD *)(v43 + 28) |= 1u; v45 = &Ns_TourScene::`vftable'; sub_4E6E90(&v48); return 1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F4238: using guessed type void *FindFaceNode::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // AB4088: using guessed type char *off_AB4088[34]; // AB408C: using guessed type char *off_AB408C[33]; // AB4090: using guessed type char *off_AB4090[32]; // AB4094: using guessed type char *off_AB4094[31]; // AB4098: using guessed type char *off_AB4098[30]; // AB409C: using guessed type char *off_AB409C[29]; // AB40A0: using guessed type char *off_AB40A0[28]; // AB40A4: using guessed type char *off_AB40A4[27]; // AB40A8: using guessed type char *off_AB40A8[26]; // AB40AC: using guessed type char *off_AB40AC[25]; // AB40B0: using guessed type char *off_AB40B0[24]; // AB40B4: using guessed type char *off_AB40B4[23]; // AB40B8: using guessed type char *off_AB40B8[22]; // AB40BC: using guessed type char *off_AB40BC[21]; // AB40C0: using guessed type char *off_AB40C0[20]; // AB40C4: using guessed type char *off_AB40C4[19]; // AB40C8: using guessed type char *off_AB40C8[18]; // AB40CC: using guessed type char *off_AB40CC[17]; // AB40D0: using guessed type char *off_AB40D0[16]; // AB40D4: using guessed type char *off_AB40D4[15]; // AB40D8: using guessed type char *off_AB40D8[14]; // AB40DC: using guessed type char *off_AB40DC[13]; // AB40E0: using guessed type char *off_AB40E0[12]; // AB40E4: using guessed type char *off_AB40E4[11]; // AB40E8: using guessed type char *off_AB40E8[10]; // AB40EC: using guessed type char *off_AB40EC[9]; // AB40F0: using guessed type char *off_AB40F0[8]; // AB40F4: using guessed type char *off_AB40F4[7]; // AB40F8: using guessed type char *off_AB40F8[6]; // AB40FC: using guessed type char *off_AB40FC[5]; // AB4100: using guessed type char *off_AB4100[4]; // AB4104: using guessed type char *off_AB4104[3]; // AB4108: using guessed type char *off_AB4108[2]; //----- (006763D0) -------------------------------------------------------- void __thiscall sub_6763D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // ST10_4 void ***v4; // ecx void **v5; // eax _WORD *v6; // eax void **v7; // eax int i; // eax void (__thiscall ***v9)(_DWORD, signed int); // edi int *v10; // edi signed int v11; // ebx int v12; // esi void **v13; // eax void *v14; // ecx void **v15; // esi void **v16; // [esp+2Ch] [ebp-38h] void **v17; // [esp+38h] [ebp-2Ch] int v18; // [esp+3Ch] [ebp-28h] int v19; // [esp+40h] [ebp-24h] void *v20; // [esp+44h] [ebp-20h] int v21; // [esp+48h] [ebp-1Ch] char *v22; // [esp+50h] [ebp-14h] int v23; // [esp+54h] [ebp-10h] int v24; // [esp+60h] [ebp-4h] v1 = this; v21 = 0; v2 = operator new(0xCu); if ( !v2 ) { v22 = 0; std::exception::exception((std::exception *)&v16, (const char *const *)&v22); v16 = &std::bad_alloc::`vftable'; _CxxThrowException(&v16, &_TI2_AVbad_alloc_std__); } v20 = v2; *v2 = v2; *((_DWORD *)v20 + 1) = v20; v24 = 0; v18 = 0; v19 = -1; v17 = &FindHairNode::`vftable'; v3 = v1[56]; LOBYTE(v24) = 1; sub_8CFE00(&v17, v3, (int)dword_BA455C, (int)&v20); v4 = (void ***)v20; v5 = *(void ***)v20; if ( *(void **)v20 != v20 ) { do { v6 = v5[2]; if ( v6 ) { v6[14] |= 1u; v4 = (void ***)v20; } v7 = *v4; if ( *v4 != (void **)v4 ) { *(_DWORD *)v7[1] = *v7; *((_DWORD *)*v7 + 1) = v7[1]; operator delete(v7); v4 = (void ***)v20; --v21; } v5 = *v4; } while ( *v4 != (void **)v4 ); } if ( v1[9] ) { for ( i = (*(int (__stdcall **)(const char *))(*(_DWORD *)v1[9] + 72))("HairPartsNode"); i; i = (*(int (__stdcall **)(const char *))(*(_DWORD *)v1[9] + 72))("HairPartsNode") ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)v1[9] + 120))(&v23, i); if ( v23 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v23; if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } } sub_85BED0((_DWORD **)v1[9], 0.0, 1); } v10 = v1 + 1; v11 = 6; do { v12 = *v10; if ( *v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *v10 = 0; } ++v10; --v11; } while ( v11 ); v17 = &Ns_TourScene::`vftable'; v13 = *(void ***)v20; *(_DWORD *)v20 = v20; *((_DWORD *)v20 + 1) = v20; v14 = v20; v21 = 0; if ( v13 != v20 ) { do { v15 = (void **)*v13; operator delete(v13); v14 = v20; v13 = v15; } while ( v15 != v20 ); } operator delete(v14); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F4240: using guessed type void *FindHairNode::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006765B0) -------------------------------------------------------- char __thiscall sub_6765B0(_BYTE *this, char *a2) { _BYTE *v2; // esi char *v3; // ecx int v5; // eax char v6; // bl unsigned int v7; // edi unsigned int v8; // esi _BYTE *v9; // eax _DWORD *v10; // eax char *v11; // esi int v12; // eax void **v13; // eax _DWORD *v14; // esi int v15; // eax int v16; // eax int v17; // esi int v18; // eax int v19; // edi void (__stdcall ***v20)(signed int); // ebx char *v21; // eax char *v22; // eax int v23; // edi void (__stdcall ***v24)(signed int); // ecx int v25; // edi _DWORD *v26; // eax void (__stdcall ***v27)(signed int); // eax void (__stdcall ***v28)(signed int); // ecx _DWORD *v29; // eax void (__stdcall ***v30)(signed int); // edi void (__stdcall ***v31)(signed int); // ecx int v32; // esi int v33; // eax int v34; // esi void ***v35; // ecx void **v36; // eax void **v37; // eax void *v38; // ecx void **v39; // esi void **v40; // [esp+10h] [ebp-40h] void **v41; // [esp+1Ch] [ebp-34h] int v42; // [esp+20h] [ebp-30h] int v43; // [esp+24h] [ebp-2Ch] void *v44; // [esp+28h] [ebp-28h] int v45; // [esp+2Ch] [ebp-24h] void *v46; // [esp+34h] [ebp-1Ch] void *v47; // [esp+38h] [ebp-18h] _BYTE *v48; // [esp+3Ch] [ebp-14h] int v49; // [esp+40h] [ebp-10h] int v50; // [esp+4Ch] [ebp-4h] v2 = this; v47 = this; v3 = (char *)sub_7474E0((_DWORD *)(dword_AC9CA0 + 4), (unsigned int)a2); a2 = v3; if ( !v3 ) return 0; v5 = *(_DWORD *)(dword_AC9C94 + 56); v6 = v2[163]; if ( v5 ) v7 = *(_DWORD *)(v5 + 40); else v7 = 0; v8 = 0; if ( v7 ) { while ( 1 ) { v9 = (_BYTE *)sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v8); if ( *v9 == v6 ) break; if ( ++v8 >= v7 ) { v3 = a2; goto LABEL_10; } } v3 = a2; v48 = v9; } else { LABEL_10: v48 = 0; } v49 = sub_669A10(&unk_AD8D28, (unsigned __int8)*v3, (int)(v3 + 46)); v45 = 0; v10 = operator new(0xCu); if ( !v10 ) { a2 = 0; std::exception::exception((std::exception *)&v40, (const char *const *)&a2); v40 = &std::bad_alloc::`vftable'; _CxxThrowException(&v40, &_TI2_AVbad_alloc_std__); } v44 = v10; *v10 = v10; *((_DWORD *)v44 + 1) = v44; v50 = 0; v42 = 0; v43 = -1; v41 = &FindGeometry::`vftable'; v11 = 0; LOBYTE(v50) = 1; a2 = 0; do { v12 = *((_DWORD *)v47 + (_DWORD)v11 + 1); if ( v12 ) { sub_8CFE00(&v41, v12, (int)dword_BA4840, (int)&v44); v13 = *(void ***)v44; if ( *(void **)v44 != v44 ) { do { v14 = v13[2]; if ( !v14 ) break; v15 = (*(int (__thiscall **)(_DWORD *))(*v14 + 4))(v14); if ( v15 ) { while ( (char *)v15 != dword_BA4840 ) { v15 = *(_DWORD *)(v15 + 4); if ( !v15 ) goto LABEL_68; } v16 = sub_85C050(v14, 8); v17 = v16; if ( v16 ) { v18 = *(_DWORD *)(v16 + 40); v19 = *(_DWORD *)(v18 + 8); v20 = *(void (__stdcall ****)(signed int))v18; v46 = *(void **)(v18 + 8); if ( v49 ) { if ( v48 && ((v21 = *(char **)(v48 + 285)) != 0 && v21 == a2 + 1 || (v22 = *(char **)(v48 + 289)) != 0 && v22 == a2 + 1) ) { if ( v19 ) { v23 = *(_DWORD *)(v19 + 4); if ( v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); *((_DWORD *)v46 + 1) = 0; } } v24 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v17 + 40) + 8); v46 = 0; if ( v24 ) { (**v24)(1); sub_823870((_DWORD *)(v17 + 36), 2u, &v46); } sub_863770(v17, 0); v25 = sub_66C3B0(&unk_AD8D28, (int)v48, *((_BYTE *)v47 + 168), *((_BYTE *)v47 + 162), (int)(a2 + 1)); if ( !v20 ) { v26 = operator new(0x18u); v46 = v26; LOBYTE(v50) = 2; v27 = (void (__stdcall ***)(signed int))(v26 ? sub_863970(v26, v25, 0, 3, 2, 0) : 0); LOBYTE(v50) = 1; v20 = v27; if ( !v27 ) { sub_67AF00(&v44); LABEL_70: v35 = (void ***)v44; goto LABEL_71; } } sub_42AAF0(v20, v25); v28 = **(void (__stdcall *****)(signed int))(v17 + 40); v46 = v20; if ( v20 != v28 ) { if ( v28 ) (**v28)(1); sub_823870((_DWORD *)(v17 + 36), 0, &v46); } } else if ( v19 ) { v32 = *(_DWORD *)(v19 + 4); if ( v32 != v49 ) { if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v32 ) (**(void (__thiscall ***)(int, signed int))v32)(v32, 1); v33 = v49; *(_DWORD *)(v19 + 4) = v49; InterlockedIncrement((volatile LONG *)(v33 + 4)); } } else { v29 = operator new(0x18u); v46 = v29; LOBYTE(v50) = 3; if ( v29 ) v30 = (void (__stdcall ***)(signed int))sub_863970(v29, v49, 0, 3, 2, 0); else v30 = 0; v31 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v17 + 40) + 8); LOBYTE(v50) = 1; v46 = v30; if ( v30 != v31 ) { if ( v31 ) (**v31)(1); sub_823870((_DWORD *)(v17 + 36), 2u, &v46); } sub_863770(v17, (int)v30); } } else if ( v19 ) { v34 = *(_DWORD *)(v19 + 4); if ( v34 ) { if ( !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); *(_DWORD *)(v19 + 4) = 0; } } else { v46 = 0; sub_863770(v17, 0); } } } LABEL_68: v35 = (void ***)v44; v36 = *(void ***)v44; if ( *(void **)v44 != v44 ) { *(_DWORD *)v36[1] = *v36; *((_DWORD *)*v36 + 1) = v36[1]; operator delete(v36); --v45; goto LABEL_70; } LABEL_71: v13 = *v35; } while ( *v35 != (void **)v35 ); } v11 = a2; sub_85C4D0(*((_DWORD **)v47 + (_DWORD)a2 + 1)); } a2 = ++v11; } while ( (unsigned int)v11 < 6 ); v41 = &Ns_TourScene::`vftable'; v37 = *(void ***)v44; *(_DWORD *)v44 = v44; *((_DWORD *)v44 + 1) = v44; v38 = v44; v45 = 0; if ( v37 != v44 ) { do { v39 = (void **)*v37; operator delete(v37); v38 = v44; v37 = v39; } while ( v39 != v44 ); } operator delete(v38); return 1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F4248: using guessed type void *FindGeometry::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // AC9C94: using guessed type int dword_AC9C94; // AC9CA0: using guessed type int dword_AC9CA0; //----- (00676A40) -------------------------------------------------------- void __stdcall sub_676A40(int a1, const char *a2) { const char *v2; // esi int v3; // ebx char *v4; // eax int v5; // eax const char *v6; // esi _DWORD *v7; // eax int *v8; // ecx int v9; // edx _DWORD *v10; // ecx int v11; // eax _DWORD *v12; // ebx int v13; // edi int v14; // esi int v15; // edi int v16; // esi int v17; // edi int v18; // esi void **v19; // [esp+24h] [ebp-40h] int *v20; // [esp+28h] [ebp-3Ch] int v21; // [esp+2Ch] [ebp-38h] int v22; // [esp+30h] [ebp-34h] void **v23; // [esp+34h] [ebp-30h] const char *v24; // [esp+40h] [ebp-24h] int v25; // [esp+44h] [ebp-20h] char *v26; // [esp+4Ch] [ebp-18h] int v27; // [esp+50h] [ebp-14h] int *v28; // [esp+54h] [ebp-10h] int v29; // [esp+60h] [ebp-4h] if ( a1 ) { v2 = a2; if ( a2 ) { if ( *(_DWORD *)(a1 + 188) > 0u ) { v3 = **(_DWORD **)(a1 + 180); v27 = v3; if ( v3 ) { v25 = 0; v4 = (char *)operator new(0xCu); if ( !v4 ) { v26 = 0; std::exception::exception((std::exception *)&v23, (const char *const *)&v26); v23 = &std::bad_alloc::`vftable'; _CxxThrowException(&v23, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v4 = v4; v24 = v4; *((_DWORD *)v4 + 1) = v4; v5 = *((_DWORD *)v2 + 58); v29 = 0; if ( v5 == 17 || v5 == 18 ) { a2 = "LODGroup02"; sub_67AFA0((char **)&v24, (int)&a2); a2 = "LODGroup03"; sub_67AFA0((char **)&v24, (int)&a2); } else { a2 = "LODGroup01"; sub_67AFA0((char **)&v24, (int)&a2); } v6 = v24; a2 = *(const char **)v24; if ( a2 != v24 ) { do { v7 = (_DWORD *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 72))(v3, *((_DWORD *)a2 + 2)); if ( v7 ) { v22 = 0; v20 = 0; v21 = 0; v19 = &PgTList::`vftable'; LOBYTE(v29) = 1; sub_6752D0(v7, &v19); v8 = v20; if ( v20 ) { while ( 1 ) { v9 = *v8; v10 = (_DWORD *)v8[2]; v28 = (int *)v9; v11 = sub_85C050(v10, 8); v12 = (_DWORD *)v11; if ( v11 ) { v13 = *(_DWORD *)(*(_DWORD *)(v11 + 40) + 16); if ( v13 ) { v14 = *(_DWORD *)(v13 + 4); if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *(_DWORD *)(v13 + 4) = 0; } } v15 = *(_DWORD *)(v12[10] + 4); if ( v15 ) { v16 = *(_DWORD *)(v15 + 4); if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v15 + 4) = 0; } } v17 = *(_DWORD *)(v12[10] + 8); if ( v17 ) { v18 = *(_DWORD *)(v17 + 4); if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) { if ( v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); } *(_DWORD *)(v17 + 4) = 0; } } (*(void (__thiscall **)(_DWORD *, _DWORD))(*v12 + 64))(v12, 0.0); } if ( !v28 ) break; v8 = v28; } v3 = v27; v6 = v24; } LOBYTE(v29) = 0; sub_67AC30(&v19); } a2 = *(const char **)a2; } while ( a2 != v6 ); } sub_85C4D0((_DWORD *)a1); sub_4E6E90(&v24); } } } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F42B4: using guessed type void *PgTList::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00676CA0) -------------------------------------------------------- void __thiscall sub_676CA0(char *this) { char *v1; // esi int v2; // ecx int v3; // eax int v4; // edi int v5; // edi int v6; // edi int v7; // edi _DWORD *v8; // ST0C_4 _DWORD *v9; // ST08_4 int v10; // edi int v11; // edi char v12; // [esp+10h] [ebp-18h] char *v13; // [esp+14h] [ebp-14h] char *v14; // [esp+18h] [ebp-10h] int v15; // [esp+24h] [ebp-4h] v1 = this; v14 = this; *(_DWORD *)this = &CharShape::`vftable'; v2 = *((_DWORD *)this + 76); v15 = 6; if ( v2 ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 8))(); sub_69CBA0(byte_ADB468, v3); v4 = *((_DWORD *)v1 + 76); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 76) = 0; } } v5 = *((_DWORD *)v1 + 76); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 76) = 0; } sub_67A500((_DWORD *)v1 + 77); if ( *((_DWORD *)v1 + 169) ) { sub_6ACDF0(&unk_B91250, *((int **)v1 + 169)); *((_DWORD *)v1 + 169) = 0; } if ( *((_DWORD *)v1 + 172) ) { sub_6ACDF0(&unk_B91250, *((int **)v1 + 172)); *((_DWORD *)v1 + 172) = 0; } v6 = *((_DWORD *)v1 + 7); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v1 + 7) = 0; } v7 = *((_DWORD *)v1 + 173); LOBYTE(v15) = 5; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); LOBYTE(v15) = 4; sub_6612F0(v1 + 572); v13 = v1 + 556; v8 = (_DWORD *)*((_DWORD *)v1 + 140); v9 = (_DWORD *)**((_DWORD **)v1 + 140); LOBYTE(v15) = 7; sub_6CDE90((_DWORD *)v1 + 139, (int *)&v12, v9, v8); operator delete(*((void **)v1 + 140)); LOBYTE(v15) = 2; sub_67A500((_DWORD *)v1 + 77); v10 = *((_DWORD *)v1 + 76); LOBYTE(v15) = 1; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = *((_DWORD *)v1 + 7); LOBYTE(v15) = 0; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v15 = -1; `eh vector destructor iterator'(v1 + 4, 4u, 6, sub_410C00); } // 9F42D4: using guessed type void *CharShape::`vftable'; //----- (00676EB0) -------------------------------------------------------- char __thiscall sub_676EB0(int this, char *a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ST08_4 int v6; // edx v2 = this; if ( *(_BYTE *)(this + 168) ) result = sub_675E10((_DWORD *)this, a2); else result = sub_675B20((_DWORD *)this, (int)a2); v4 = *(_DWORD *)(v2 + 36); if ( v4 ) { v5 = *(_DWORD *)(v4 + 140); v6 = *(_DWORD *)(v4 + 144); *(float *)(v2 + 216) = *(float *)(v4 + 148); } else { *(float *)(v2 + 216) = 53.0; } return result; } //----- (00676F20) -------------------------------------------------------- char __thiscall sub_676F20(_BYTE *this, char a2) { int v2; // eax unsigned int v3; // ebx _BYTE *v4; // edi int v5; // esi unsigned int v7; // [esp+8h] [ebp-4h] v2 = *(_DWORD *)(dword_AC9C94 + 56); v3 = 0; v4 = this; if ( v2 ) v7 = *(_DWORD *)(v2 + 40); else v7 = 0; if ( v7 > 0 ) { while ( 1 ) { v5 = sub_7474E0((_DWORD *)(dword_AC9C94 + 4), v3); LOBYTE(v2) = a2; if ( *(_BYTE *)v5 == a2 ) break; if ( ++v3 >= v7 ) return v2; } v4[163] = a2; sub_6763D0(v4); sub_674910(v4, 0, *(_BYTE *)v5, *(_BYTE *)(v5 + 90) != 0, (const char *)(v5 + 91), (const char *)(v5 + 123)); sub_674910(v4, 1u, *(_BYTE *)v5, *(_BYTE *)(v5 + 155) != 0, (const char *)(v5 + 156), (const char *)(v5 + 188)); sub_674910(v4, 2u, *(_BYTE *)v5, *(_BYTE *)(v5 + 220) != 0, (const char *)(v5 + 221), (const char *)(v5 + 253)); sub_674910(v4, 3u, *(_BYTE *)v5, *(_BYTE *)(v5 + 293) != 0, (const char *)(v5 + 294), (const char *)(v5 + 326)); sub_674910(v4, 4u, *(_BYTE *)v5, *(_BYTE *)(v5 + 358) != 0, (const char *)(v5 + 359), (const char *)(v5 + 391)); sub_674910(v4, 5u, *(_BYTE *)v5, *(_BYTE *)(v5 + 423) != 0, (const char *)(v5 + 424), (const char *)(v5 + 456)); LOBYTE(v2) = sub_6765B0(v4, (char *)(unsigned __int8)v4[164]); } return v2; } // AC9C94: using guessed type int dword_AC9C94; //----- (00677090) -------------------------------------------------------- void __userpurge sub_677090(int a1@, int a2@, float a3) { int v3; // esi int v4; // ecx char v5; // al int v6; // ebx int v7; // ST08_4 int v8; // edi const char *v9; // eax int v10; // ecx int v11; // edi int v12; // ebx int v13; // ecx v3 = a1; v4 = *(_DWORD *)(a1 + 304); if ( v4 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 76))(LODWORD(a3)) ) sub_673940((_DWORD *)v3); else (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 304) + 56))(LODWORD(a3)); } v5 = byte_AB66F5; if ( *(_BYTE *)(v3 + 232) != byte_AB66F5 ) { *(_BYTE *)(v3 + 232) = byte_AB66F5; if ( v5 ) { sub_673190((void *)v3, *(_WORD *)(v3 + 173), *(_BYTE *)(v3 + 209) >> 4); sub_673190((void *)v3, *(_WORD *)(v3 + 177), *(_BYTE *)(v3 + 209) & 0xF); } else { v6 = *(unsigned __int16 *)(v3 + 173); v7 = a2; v8 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6, v7) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v8 + 200) ) { v10 = *(_DWORD *)(v8 + 196); if ( *(_DWORD *)(v10 + 4 * v6) ) v9 = *(const char **)(v10 + 4 * v6); else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } sub_676A40(*(_DWORD *)(v3 + 80), v9); v11 = dword_ACB230; v12 = *(unsigned __int16 *)(v3 + 177); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v12) && (unsigned __int16)v12 <= *(_WORD *)(v11 + 200) && (v13 = *(_DWORD *)(v11 + 196), *(_DWORD *)(v13 + 4 * v12)) ) { sub_676A40(*(_DWORD *)(v3 + 76), *(const char **)(v13 + 4 * v12)); } else { sub_676A40(*(_DWORD *)(v3 + 76), 0); } } } } // 677090: could not find valid save-restore pair for edi // AB66F5: using guessed type char byte_AB66F5; // ACB230: using guessed type int dword_ACB230; //----- (006771F0) -------------------------------------------------------- char __thiscall sub_6771F0(_DWORD *this, _DWORD *a2, int a3, int a4) { int v5; // esi int v6; // ebx int v7; // eax int v8; // edi _DWORD *v9; // esi int v10; // ecx int v11; // eax int v12; // esi int v13; // eax int v14; // eax char *v15[3]; // [esp+18h] [ebp-98h] int v16; // [esp+24h] [ebp-8Ch] int v17; // [esp+28h] [ebp-88h] int v18; // [esp+2Ch] [ebp-84h] int v19; // [esp+30h] [ebp-80h] int v20; // [esp+34h] [ebp-7Ch] _DWORD *v21; // [esp+38h] [ebp-78h] const char *v22; // [esp+3Ch] [ebp-74h] void *v23[10]; // [esp+40h] [ebp-70h] int v24; // [esp+68h] [ebp-48h] int v25; // [esp+6Ch] [ebp-44h] char Src; // [esp+7Ch] [ebp-34h] int v27; // [esp+ACh] [ebp-4h] v21 = this; v20 = a3; if ( !a3 ) return 0; v22 = (const char *)a2[28]; if ( !v22 ) return 0; v5 = a2[29]; if ( !v5 ) return 0; v6 = (*(int (**)(void))(*a2 + 36))() - 1; v7 = sub_67ACD0(*(_WORD *)(v5 + 278)); v8 = v7; v18 = v7; if ( !v7 ) return 0; v9 = v21; v21[61] = v7; v9[60] = v6; if ( v6 <= 0 ) return 0; if ( *(_BYTE *)(v7 + v6 + 2) != -1 ) { sub_65B4E0(v23); v27 = 0; sub_65B560(v23, v20, "WUP"); v10 = 0; v11 = (v25 - v24) >> 2; if ( v11 ) { v17 = 0; v19 = 0; v16 = 0; if ( v11 > 0 ) { do { v12 = sub_65AF50(v23, v10); if ( sub_402B70((int)dword_BA455C, v12) ) { sprintf(&Src, "itemeffect%03d", *(unsigned __int8 *)(v8 + v6 + 2)); if ( strlen(*(const char **)(v12 + 8)) == 5 ) { v13 = atoi((const char *)(*(_DWORD *)(v12 + 8) + 3)) - 1; if ( v13 ) { if ( v13 == 1 ) sub_6AF890(&unk_B91250, (int)&v19, &Src, v12, flt_ACCFCC, 1); } else { sub_6AF890(&unk_B91250, (int)&v17, &Src, v12, flt_ACCFCC, 1); } } } v8 = v18; v10 = v16 + 1; v16 = v10; } while ( v10 < (v25 - v24) >> 2 ); v9 = v21; } sub_673C60(v9, a4, v17, v19); } v27 = -1; sub_65B510(v23); } if ( *(_BYTE *)(v8 + v6 + 14) != -1 ) { sub_5A5FE0(v15); v14 = *((_DWORD *)v22 + 58); v27 = 1; if ( v14 == 17 || v14 == 18 ) { v22 = "LODGroup02"; sub_67AFA0(v15, (int)&v22); v22 = "LODGroup03"; sub_67AFA0(v15, (int)&v22); } else { v22 = "LODGroup01"; sub_67AFA0(v15, (int)&v22); } if ( byte_AB66F5 ) sub_6756D0((_DWORD *)v20, *(_BYTE *)(v8 + v6 + 14), (_DWORD ***)v15); else sub_6756D0((_DWORD *)v20, 0xFFu, (_DWORD ***)v15); v27 = -1; sub_4E6E90(v15); } sub_673070(v21, 0); return 1; } // AB66F5: using guessed type char byte_AB66F5; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00677490) -------------------------------------------------------- int __thiscall sub_677490(_DWORD *this) { int v1; // esi _DWORD *v2; // eax int v3; // edi int *v4; // eax int v5; // edi bool v6; // zf int v7; // edi void **v9; // [esp+10h] [ebp-24h] _DWORD *v10; // [esp+1Ch] [ebp-18h] char *v11; // [esp+20h] [ebp-14h] _DWORD *v12; // [esp+24h] [ebp-10h] int v13; // [esp+30h] [ebp-4h] v1 = (int)this; v10 = this; *this = &CharShape::`vftable'; `eh vector constructor iterator'( this + 1, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v13 = 0; *(_DWORD *)(v1 + 28) = 0; *(_DWORD *)(v1 + 304) = 0; memset((void *)(v1 + 308), 0, 0xF0u); *(_DWORD *)(v1 + 548) = 0; *(_DWORD *)(v1 + 552) = 0; LOBYTE(v13) = 3; *(_DWORD *)(v1 + 564) = 0; v2 = operator new(0x18u); if ( !v2 ) { v11 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v11); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *(_DWORD *)(v1 + 560) = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)(v1 + 560) + 4) = *(_DWORD *)(v1 + 560); *(_DWORD *)(*(_DWORD *)(v1 + 560) + 8) = *(_DWORD *)(v1 + 560); *(_BYTE *)(*(_DWORD *)(v1 + 560) + 20) = 1; *(_BYTE *)(*(_DWORD *)(v1 + 560) + 21) = 1; LOBYTE(v13) = 4; sub_661220((_DWORD *)(v1 + 572)); *(_DWORD *)(v1 + 692) = 0; *(float *)(v1 + 216) = 30.0; *(_BYTE *)(v1 + 168) = 0; *(_WORD *)(v1 + 166) = -1; *(_DWORD *)(v1 + 161) = 16711936; *(_BYTE *)(v1 + 165) = 0; *(_BYTE *)(v1 + 144) = 0; *(_DWORD *)(v1 + 140) = 0; *(_DWORD *)(v1 + 148) = 0; *(_BYTE *)(v1 + 152) = 1; *(_DWORD *)(v1 + 156) = 0; *(_DWORD *)(v1 + 260) = 0; *(_DWORD *)(v1 + 300) = 0; *(_DWORD *)(v1 + 228) = 0; v3 = *(_DWORD *)(v1 + 304); LOBYTE(v13) = 6; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v1 + 304) = 0; } v4 = (int *)(v1 + 4); *(_DWORD *)(v1 + 224) = 0; v12 = (_DWORD *)(v1 + 4); v11 = (char *)6; do { v5 = *v4; if ( *v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v12 = 0; } v4 = v12 + 1; v6 = v11-- == (char *)1; ++v12; } while ( !v6 ); v7 = *(_DWORD *)(v1 + 28); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v1 + 28) = 0; } *(_DWORD *)(v1 + 212) = -1; sub_675A10((_DWORD *)v1); sub_672E10(v1); *(_BYTE *)(v1 + 160) = 0; *(_WORD *)(v1 + 672) = 0; *(_DWORD *)(v1 + 676) = 0; *(_DWORD *)(v1 + 680) = 0; *(_BYTE *)(v1 + 684) = 0; *(_DWORD *)(v1 + 688) = 0; *(_BYTE *)(v1 + 696) = 0; *(_DWORD *)(v1 + 700) = 0; *(_BYTE *)(v1 + 232) = byte_AB66F5; *(_BYTE *)(v1 + 233) = 1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F42D4: using guessed type void *CharShape::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // AB66F5: using guessed type char byte_AB66F5; //----- (00677700) -------------------------------------------------------- char __thiscall sub_677700(char *this, int a2, int a3, char *a4, int a5, char *Src) { char *v6; // esi void **v8; // ebx void **v9; // eax char *v10; // ebx void **v11; // edi char *v12; // ebx char *v13; // ebx char *v14; // ebx char *v15; // ebx char *v16; // ebx int *v17; // eax int *v18; // eax int v19; // [esp+4h] [ebp-10h] char v20[4]; // [esp+Ch] [ebp-8h] void **v21; // [esp+10h] [ebp-4h] v6 = this; if ( !a3 ) return 0; v8 = 0; switch ( a3 ) { case 1: v9 = sub_673EB0(this, 0, a4, a5, Src, 0); goto LABEL_32; case 2: v9 = sub_673EB0(this, 1, a4, a5, Src, 0); goto LABEL_32; case 3: v9 = sub_673EB0(this, 2, a4, a5, Src, 0); goto LABEL_32; case 4: v9 = sub_673EB0(this, 3, a4, a5, Src, 0); goto LABEL_32; case 5: v9 = sub_673EB0(this, 4, a4, a5, Src, 0); goto LABEL_32; case 6: v9 = sub_673EB0(this, 5, a4, a5, Src, 0); goto LABEL_32; case 7: v9 = sub_673EB0(this, 7, a4, a5, Src, 0); goto LABEL_32; case 9: v9 = sub_673EB0(this, 15, a4, a5, Src, 0); goto LABEL_32; case 10: v9 = sub_673EB0(this, 16, a4, a5, Src, 0); goto LABEL_32; case 11: v10 = Src; v11 = sub_673EB0(this, 9, a4, a5, Src, 1); v8 = sub_673EB0(v6, 10, a4, a5, v10, 2); goto LABEL_33; case 12: v9 = sub_673EB0(this, 9, a4, a5, Src, 1); goto LABEL_32; case 13: v9 = sub_673EB0(this, 10, a4, a5, Src, 2); goto LABEL_32; case 14: v12 = Src; v11 = sub_673EB0(this, 19, a4, a5, Src, 1); v8 = sub_673EB0(v6, 20, a4, a5, v12, 2); goto LABEL_33; case 15: v9 = sub_673EB0(this, 19, a4, a5, Src, 1); goto LABEL_32; case 16: v9 = sub_673EB0(this, 20, a4, a5, Src, 2); goto LABEL_32; case 17: v15 = Src; v11 = sub_673EB0(this, 14, a4, a5, Src, 2); v8 = sub_673EB0(v6, 13, a4, a5, v15, 1); goto LABEL_33; case 18: v9 = sub_673EB0(this, 13, a4, a5, Src, 1); goto LABEL_32; case 19: v9 = sub_673EB0(this, 14, a4, a5, Src, 2); goto LABEL_32; case 20: v13 = Src; v11 = sub_673EB0(this, 21, a4, a5, Src, 1); v8 = sub_673EB0(v6, 22, a4, a5, v13, 2); goto LABEL_33; case 21: v9 = sub_673EB0(this, 21, a4, a5, Src, 1); goto LABEL_32; case 22: v9 = sub_673EB0(this, 22, a4, a5, Src, 2); goto LABEL_32; case 23: v14 = Src; v11 = sub_673EB0(this, 23, a4, a5, Src, 1); v8 = sub_673EB0(v6, 24, a4, a5, v14, 2); goto LABEL_33; case 24: v9 = sub_673EB0(this, 23, a4, a5, Src, 1); goto LABEL_32; case 25: v9 = sub_673EB0(this, 24, a4, a5, Src, 2); goto LABEL_32; case 26: v16 = Src; v11 = sub_673EB0(this, 17, a4, a5, Src, 1); v8 = sub_673EB0(v6, 18, a4, a5, v16, 2); goto LABEL_33; case 27: v9 = sub_673EB0(this, 17, a4, a5, Src, 0); goto LABEL_32; case 28: v9 = sub_673EB0(this, 18, a4, a5, Src, 0); goto LABEL_32; case 29: v9 = sub_673EB0(this, 26, a4, a5, Src, 0); LABEL_32: v11 = v9; LABEL_33: if ( v11 ) { *(_DWORD *)v20 = a2; v21 = v11; sub_67B150((_DWORD *)v6 + 139, (int)&v19, v20); v17 = sub_661CD0(); sub_6615F0((char *)v17, (int)v11); } if ( v8 ) { *(_DWORD *)v20 = a2; v21 = v8; sub_67B150((_DWORD *)v6 + 139, (int)&v19, v20); v18 = sub_661CD0(); sub_6615F0((char *)v18, (int)v8); } break; default: break; } if ( a2 == 17 ) { LOBYTE(a5) = byte_AB66EF; if ( *(_WORD *)(v6 + 201) != -1 ) sub_67AE20(&a4, **((int ***)v6 + 140), *((int **)v6 + 140), &a5); } return 1; } // AB66EF: using guessed type char byte_AB66EF; //----- (00677B40) -------------------------------------------------------- char __thiscall sub_677B40(void *this, int a2, int a3) { void *v3; // esi _DWORD *v4; // eax _DWORD *v5; // edi __int16 v6; // cx int v7; // edi _DWORD *v8; // edi int v9; // edx __int16 v11; // [esp+Ch] [ebp-6Ch] char v12; // [esp+Eh] [ebp-6Ah] v3 = this; v4 = (_DWORD *)sub_673680((int)this); v5 = v4; if ( v4 ) { memset(&v11, 0, 0x67u); v6 = *(_WORD *)v5; v7 = *(_DWORD *)((char *)v5 + 110); v11 = v6; if ( v7 == 10 ) { LOBYTE(v4) = *((_BYTE *)v3 + 209) & 0xF; v12 = *((_BYTE *)v3 + 209) & 0xF; } else if ( v7 == 12 ) { LOBYTE(v4) = *((_BYTE *)v3 + 209) >> 4; v12 = *((_BYTE *)v3 + 209) >> 4; } else { LOBYTE(v4) = v12; } if ( (unsigned __int8)v4 >= 1u ) { v4 = sub_6876E0((unsigned __int16 *)&v11); v8 = v4; if ( v4 ) { v4 = (_DWORD *)v4[28]; if ( v4[58] ) { v9 = *(_DWORD *)(a2 + 232); if ( v9 == 17 || v9 == 18 ) { if ( *((_BYTE *)v4 + 240) ) { sub_6771F0((_DWORD *)v3 + 77, v8, *((_DWORD *)v3 + 20), 12); LOBYTE(v4) = sub_6771F0((_DWORD *)v3 + 77, v8, *((_DWORD *)v3 + 19), 10); } } else { LOBYTE(v4) = sub_6771F0((_DWORD *)v3 + 77, v8, a3, *(_DWORD *)(a2 + 110)); } } } } } return (char)v4; } //----- (00677C30) -------------------------------------------------------- char __thiscall sub_677C30(int this, int a2, int a3) { int *v3; // eax int v4; // ebx int v5; // esi int v6; // edi int v7; // esi bool v8; // zf __int16 v10; // [esp+8h] [ebp-6Ch] char v11; // [esp+Ah] [ebp-6Ah] LOBYTE(v3) = a3; v4 = this; if ( a2 ) { if ( a3 ) { v5 = dword_ACB230; v6 = *(unsigned __int16 *)(this + 177); LOBYTE(v3) = (*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6); if ( (_BYTE)v3 ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v3 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v6); if ( *v3 ) { v7 = *v3; if ( *v3 ) { memset(&v10, 0, 0x67u); v8 = *(_DWORD *)(v7 + 110) == 10; v10 = *(_WORD *)v7; if ( v8 ) { LOBYTE(v3) = *(_BYTE *)(v4 + 209) & 0xF; v11 = *(_BYTE *)(v4 + 209) & 0xF; } else { LOBYTE(v3) = v11; } if ( (unsigned __int8)v3 >= 1u ) { v3 = sub_6876E0((unsigned __int16 *)&v10); if ( v3 ) LOBYTE(v3) = sub_6771F0((_DWORD *)(v4 + 308), v3, a3, *(_DWORD *)(a2 + 110)); } } } } } } } return (char)v3; } // ACB230: using guessed type int dword_ACB230; //----- (00677D10) -------------------------------------------------------- void __thiscall sub_677D10(char *this, char *Src, char *a3) { char *v3; // edi char *v4; // esi int v5; // ebx _DWORD *v6; // eax int **v7; // eax _DWORD *i; // esi int v9; // eax int v10; // [esp+10h] [ebp-30h] void **v11; // [esp+1Ch] [ebp-24h] _DWORD *v12; // [esp+28h] [ebp-18h] int v13; // [esp+2Ch] [ebp-14h] int v14; // [esp+3Ch] [ebp-4h] char *Srca; // [esp+48h] [ebp+8h] v3 = this; if ( *((_DWORD *)this + 56) ) { v4 = Src; if ( Src ) { if ( a3 ) { v5 = *(_DWORD *)(Src + 110); if ( v5 == 1 ) v5 = 27; sub_675C50(this, v5); Srca = sub_7549E0("_SubItem%02d", v5); v13 = 0; v6 = operator new(0xCu); if ( !v6 ) { a3 = 0; std::exception::exception((std::exception *)&v11, (const char *const *)&a3); v11 = &std::bad_alloc::`vftable'; _CxxThrowException(&v11, &_TI2_AVbad_alloc_std__); } *v6 = v6; v12 = v6; v6[1] = v6; v14 = 0; v7 = (int **)sub_67B1C0((int)&v10, v4 + 2); LOBYTE(v14) = 1; sub_4839D0(&v12, v7); LOBYTE(v14) = 0; sub_4E6E90(&v10); for ( i = (_DWORD *)*v12; i != v12; i = (_DWORD *)*i ) { v9 = i[2]; if ( v5 == 17 ) { sub_677700(v3, 17, *(_DWORD *)(v9 + 33), (char *)(v9 + 37), v9 + 69, Srca); } else if ( (*(_BYTE *)(v9 + 32) != 0) == (v3[162] == 1) ) { sub_677700(v3, v5, *(_DWORD *)(v9 + 33), (char *)(v9 + 37), v9 + 69, Srca); } } sub_4E6E90(&v12); } } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00677E70) -------------------------------------------------------- char __thiscall sub_677E70(_DWORD *this, int a2, int a3, int a4, int a5) { int v5; // eax int v6; // ecx _DWORD *v7; // eax _DWORD *v8; // edi _DWORD *v9; // esi _DWORD *v10; // eax _DWORD *v11; // ebx _DWORD *v12; // edi _DWORD *v13; // esi unsigned int v14; // eax int *v15; // esi int v16; // ebx _DWORD *v17; // edi void *v18; // eax _DWORD *v19; // ebx int v20; // ST0C_4 int v21; // edi unsigned int v22; // esi int v23; // ST04_4 _DWORD *v24; // esi char v26; // [esp+10h] [ebp-48h] int v27; // [esp+20h] [ebp-38h] _DWORD *v28; // [esp+34h] [ebp-24h] int v29; // [esp+38h] [ebp-20h] _DWORD *v30; // [esp+3Ch] [ebp-1Ch] _DWORD *v31; // [esp+40h] [ebp-18h] void *v32; // [esp+44h] [ebp-14h] int v33; // [esp+48h] [ebp-10h] int v34; // [esp+54h] [ebp-4h] unsigned int v35; // [esp+68h] [ebp+10h] v31 = this; if ( !this[56] ) return 0; if ( a2 < 0 ) return 0; if ( !a3 ) return 0; if ( !a4 ) return 0; if ( !a5 ) return 0; v5 = *(_DWORD *)(a3 + 188); v6 = *(_DWORD *)(a4 + 188); if ( !v5 ) return 0; if ( !v6 ) return 0; v7 = *(_DWORD **)(v5 + 16); v8 = *(_DWORD **)(v6 + 16); v30 = v7; if ( !v7 ) return 0; if ( !v8 ) return 0; v9 = sub_674840(v7); v10 = sub_674840(v8); v11 = v10; if ( !v9 ) return 0; if ( !v10 ) return 0; v12 = sub_85B610(v9, (int)dword_BA3BC0); v28 = v12; v13 = sub_85B610(v11, (int)dword_BA3BC0); if ( !v12 ) return 0; if ( !v13 ) return 0; v33 = 0; v32 = 0; v14 = v12[26]; if ( v14 < a2 ) return 0; if ( v14 != v13[26] ) return 0; v29 = sub_67A7C0(v12, a2, a3, &v33); sub_67A7C0(v13, a2, a4, &v32); if ( !v33 ) return 0; v15 = (int *)v32; if ( !v32 ) return 0; v16 = *(_DWORD *)(*((_DWORD *)v32 + 2) + 64); v35 = *(_DWORD *)(*((_DWORD *)v32 + 2) + 64); v17 = operator new(0x2Cu); v32 = v17; v34 = 0; if ( v17 ) { v18 = operator new[](4 * v16); v19 = sub_67A720(v17, v15[2], (int)v30, (int)v18); } else { v19 = 0; } v20 = v15[3]; v34 = -1; sub_599BC0(v19, v20); v21 = v15[5]; v22 = 0; if ( v35 ) { do { sub_67B380(&v26, (int)(v31 + 8), 27, *(_DWORD *)(*(_DWORD *)(v21 + 4 * v22) + 8)); v23 = v31[56]; v34 = 1; sub_8CFE00(&v26, v23, (int)dword_BA455C, 0); if ( v27 ) *(_DWORD *)(v19[5] + 4 * v22) = v27; v34 = -1; sub_67B300(&v26); ++v22; } while ( v22 < v35 ); } v24 = v28; sub_67A810(v28, a2, v29, a5, (int)v19); sub_67A890(v24, a3, a5); return 1; } //----- (006780D0) -------------------------------------------------------- char __thiscall sub_6780D0(_DWORD *this, int *a2, _DWORD *a3, int a4) { _DWORD *v4; // esi void *v5; // ecx int v6; // eax int v7; // ebx int v8; // edx int v9; // eax int *v10; // esi _DWORD *v11; // edi void *v12; // eax _DWORD *v13; // edi int v14; // edx unsigned int v15; // esi int v16; // ST10_4 _DWORD *v17; // ST14_4 int v18; // esi void (__thiscall ***v19)(void *, signed int); // edi int *v20; // eax int v21; // edi _DWORD *v22; // ecx char v24; // [esp+2Ch] [ebp-44h] int v25; // [esp+3Ch] [ebp-34h] char v26; // [esp+40h] [ebp-30h] void *v27; // [esp+44h] [ebp-2Ch] void *v28; // [esp+50h] [ebp-20h] _DWORD *v29; // [esp+54h] [ebp-1Ch] float v30; // [esp+58h] [ebp-18h] _DWORD *v31; // [esp+5Ch] [ebp-14h] _DWORD *v32; // [esp+60h] [ebp-10h] int v33; // [esp+6Ch] [ebp-4h] v32 = this; if ( !this[56] || !*a2 || !a3 ) return 0; dword_BA4564 = 1; v5 = (void *)a3[8]; v31 = *(_DWORD **)(*a2 + 32); v4 = v31; v29 = a3; v6 = sub_85BD60(v5); v7 = v6; *(_DWORD *)(v6 + 88) = v31[22]; v8 = (int)v31; *(_DWORD *)(v6 + 92) = v4[23]; *(_DWORD *)(v6 + 96) = v4[24]; qmemcpy((void *)(v6 + 52), v4 + 13, 0x24u); v30 = fabs(*(float *)(v8 + 100)); *(float *)(v6 + 100) = v30; sub_8F5CC0((_DWORD *)v6, &a3); v9 = *a2; v10 = (int *)a3[47]; v30 = *(float *)(*a2 + 188); if ( a4 >= 0 ) sub_677E70(v32, a4, v9, (int)v29, (int)a3); a4 = *(_DWORD *)(v10[2] + 64); v11 = operator new(0x2Cu); v28 = v11; v33 = 0; if ( v11 ) { v12 = operator new[](4 * a4); v13 = sub_67A720(v11, v10[2], *(_DWORD *)(LODWORD(v30) + 16), (int)v12); } else { v13 = 0; } v33 = -1; sub_67A930(a3, (int)v13); sub_599BC0(v13, v10[3]); v14 = v10[5]; v15 = 0; v29 = (_DWORD *)v14; if ( a4 ) { v28 = &v26; do { sub_67B380(&v24, (int)(v32 + 8), 27, *(_DWORD *)(v29[v15] + 8)); v16 = v32[56]; v33 = 1; sub_8CFE00(&v24, v16, (int)dword_BA455C, 0); *(_DWORD *)(v13[5] + 4 * v15) = v25; v17 = *(_DWORD **)v27; v33 = 3; sub_4E6DC0(&v26, (int *)&v30, v17, v27); operator delete(v27); ++v15; v33 = -1; } while ( v15 < a4 ); } v18 = v31[8]; (*(void (__thiscall **)(_DWORD, void **, _DWORD *))(*(_DWORD *)v18 + 120))(v31[8], &v28, v31); v19 = (void (__thiscall ***)(void *, signed int))v28; if ( v28 && !InterlockedDecrement((volatile LONG *)v28 + 1) && v19 ) (**v19)(v19, 1); v20 = sub_661CD0(); sub_6615F0((char *)v20, v7); v21 = (int)v32; if ( sub_661030((_BYTE *)v32 + 572) ) sub_661F10((_BYTE *)(v21 + 572), v7); (*(void (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v18 + 116))(v18, v7, 0); v22 = a3; *a2 = (int)a3; sub_85C4D0(v22); sub_85C6F0((_DWORD *)*a2); sub_85BED0((_DWORD **)*a2, 0.0, 1); return 1; } // BA4564: using guessed type int dword_BA4564; //----- (00678370) -------------------------------------------------------- char __thiscall sub_678370(_DWORD *this, int a2) { int v2; // esi int *v3; // ebx int v4; // edi _DWORD *v5; // eax char result; // al _DWORD *v7; // eax _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD **v9; // [esp+18h] [ebp-10h] v8 = this; v2 = 0; if ( this[65] && *(_DWORD *)(a2 + 8) > 0 ) { if ( this[75] ) { v3 = this + 66; v9 = (_DWORD **)(a2 + 16); while ( 1 ) { v4 = *v3; if ( *v3 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = 0; if ( v2 < 3 && v2 < *(_DWORD *)(a2 + 8) ) v5 = *v9; if ( !sub_6780D0(v8, v3, v5, v2) ) break; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } ++v9; ++v2; ++v3; if ( v2 >= 3 ) { v8[62] = v8[66]; return 1; } } if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } result = 0; } else { if ( *(_DWORD *)(a2 + 8) > 0 ) v7 = *(_DWORD **)(a2 + 16); else v7 = 0; this[66] = 0; this[67] = 0; this[68] = 0; result = sub_6780D0(this, this + 62, v7, -1); } return result; } //----- (006784E0) -------------------------------------------------------- char __thiscall sub_6784E0(_DWORD *this, int a2) { int v2; // esi int *v3; // ebx int v4; // edi _DWORD *v5; // eax char result; // al _DWORD *v7; // eax _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD **v9; // [esp+18h] [ebp-10h] v8 = this; v2 = 0; if ( this[65] && *(_DWORD *)(a2 + 8) > 0 ) { if ( this[75] ) { v3 = this + 69; v9 = (_DWORD **)(a2 + 28); while ( 1 ) { v4 = *v3; if ( *v3 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = 0; if ( v2 < 3 && v2 < *(_DWORD *)(a2 + 8) ) v5 = *v9; if ( !sub_6780D0(v8, v3, v5, v2) ) break; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } ++v9; ++v2; ++v3; if ( v2 >= 3 ) { v8[63] = v8[69]; return 1; } } if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } result = 0; } else { if ( *(_DWORD *)(a2 + 8) > 0 ) v7 = *(_DWORD **)(a2 + 28); else v7 = 0; this[69] = 0; this[70] = 0; this[71] = 0; result = sub_6780D0(this, this + 63, v7, -1); } return result; } //----- (00678650) -------------------------------------------------------- char __thiscall sub_678650(_DWORD *this, int a2) { int v2; // esi int *v3; // ebx int v4; // edi _DWORD *v5; // eax char result; // al _DWORD *v7; // eax _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD **v9; // [esp+18h] [ebp-10h] v8 = this; v2 = 0; if ( this[65] && *(_DWORD *)(a2 + 8) > 0 ) { if ( this[75] ) { v3 = this + 72; v9 = (_DWORD **)(a2 + 40); while ( 1 ) { v4 = *v3; if ( *v3 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = 0; if ( v2 < 3 && v2 < *(_DWORD *)(a2 + 8) ) v5 = *v9; if ( !sub_6780D0(v8, v3, v5, v2) ) break; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } ++v9; ++v2; ++v3; if ( v2 >= 3 ) { v8[64] = v8[72]; return 1; } } if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } result = 0; } else { if ( *(_DWORD *)(a2 + 8) > 0 ) v7 = *(_DWORD **)(a2 + 40); else v7 = 0; this[72] = 0; this[73] = 0; this[74] = 0; result = sub_6780D0(this, this + 64, v7, -1); } return result; } //----- (006787C0) -------------------------------------------------------- char __thiscall sub_6787C0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi char result; // al v4 = this; if ( !a3 ) return 0; switch ( a2 ) { case 7: case 8: if ( !sub_678370(this, a3) ) return 0; result = sub_674620(v4, a4); break; case 19: case 20: if ( !sub_6784E0(this, a3) ) return 0; result = sub_674690(v4, a4); break; case 21: case 22: if ( !sub_678650(this, a3) ) return 0; result = sub_674700(v4, a4); break; default: return 0; } return result; } //----- (00678870) -------------------------------------------------------- char __thiscall sub_678870(_BYTE *this) { _BYTE *v1; // edi char v2; // dl int v3; // ecx char v4; // ST14_1 unsigned __int8 v5; // ST18_1 unsigned __int8 v6; // al void (__thiscall ***v7)(_DWORD, signed int); // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al int v10; // eax int v11; // ecx v1 = this; v2 = this[168]; switch ( v2 ) { case 1: case 2: case 3: case 4: case 5: v3 = 0; goto LABEL_3; case 6: case 7: case 8: case 9: case 0xA: v3 = 2; goto LABEL_3; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v3 = 1; goto LABEL_3; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v3 = 3; goto LABEL_3; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 4; goto LABEL_3; case 0x1A: case 0x1B: v3 = 5; LABEL_3: v4 = v2; v5 = v1[162]; v6 = sub_66FBD0(v3, v1[162]); v7 = sub_669780(&unk_AD8D28, v4, v5, v6); v8 = v7; if ( v7 && sub_678370(v1, (int)v7) ) { if ( (signed int)v8[2] > 0 && v8 != (void (__thiscall ***)(_DWORD, signed int))-16 && (v10 = sub_85C050(v8[4], 8)) != 0 && (v11 = *(_DWORD *)(v10 + 40), *(_DWORD *)v11) ) { result = sub_674620(v1, *(_DWORD *)(*(_DWORD *)v11 + 4)); } else { result = sub_674620(v1, 0); } } else { result = 0; } break; default: result = 0; break; } return result; } //----- (00678990) -------------------------------------------------------- char __thiscall sub_678990(_BYTE *this) { _BYTE *v1; // edi char v2; // dl int v3; // ecx char v4; // ST14_1 unsigned __int8 v5; // ST18_1 unsigned __int8 v6; // al void (__thiscall ***v7)(_DWORD, signed int); // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al int v10; // eax int v11; // ecx v1 = this; v2 = this[168]; switch ( v2 ) { case 1: case 2: case 3: case 4: case 5: v3 = 0; goto LABEL_3; case 6: case 7: case 8: case 9: case 0xA: v3 = 2; goto LABEL_3; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v3 = 1; goto LABEL_3; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v3 = 3; goto LABEL_3; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 4; goto LABEL_3; case 0x1A: case 0x1B: v3 = 5; LABEL_3: v4 = v2; v5 = v1[162]; v6 = sub_66FBD0(v3, v1[162]); v7 = sub_669780(&unk_AD8D28, v4, v5, v6); v8 = v7; if ( v7 && sub_6784E0(v1, (int)v7) ) { if ( (signed int)v8[2] > 0 && v8 != (void (__thiscall ***)(_DWORD, signed int))-28 && (v10 = sub_85C050(v8[7], 8)) != 0 && (v11 = *(_DWORD *)(v10 + 40), *(_DWORD *)v11) ) { result = sub_674690(v1, *(_DWORD *)(*(_DWORD *)v11 + 4)); } else { result = sub_674690(v1, 0); } } else { result = 0; } break; default: result = 0; break; } return result; } //----- (00678AB0) -------------------------------------------------------- char __thiscall sub_678AB0(_BYTE *this) { _BYTE *v1; // edi char v2; // dl int v3; // ecx char v4; // ST14_1 unsigned __int8 v5; // ST18_1 unsigned __int8 v6; // al void (__thiscall ***v7)(_DWORD, signed int); // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al int v10; // eax int v11; // ecx v1 = this; v2 = this[168]; switch ( v2 ) { case 1: case 2: case 3: case 4: case 5: v3 = 0; goto LABEL_3; case 6: case 7: case 8: case 9: case 0xA: v3 = 2; goto LABEL_3; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v3 = 1; goto LABEL_3; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v3 = 3; goto LABEL_3; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 4; goto LABEL_3; case 0x1A: case 0x1B: v3 = 5; LABEL_3: v4 = v2; v5 = v1[162]; v6 = sub_66FBD0(v3, v1[162]); v7 = sub_669780(&unk_AD8D28, v4, v5, v6); v8 = v7; if ( v7 && sub_678650(v1, (int)v7) ) { if ( (signed int)v8[2] > 0 && v8 != (void (__thiscall ***)(_DWORD, signed int))-40 && (v10 = sub_85C050(v8[10], 8)) != 0 && (v11 = *(_DWORD *)(v10 + 40), *(_DWORD *)v11) ) { result = sub_674700(v1, *(_DWORD *)(*(_DWORD *)v11 + 4)); } else { result = sub_674700(v1, 0); } } else { result = 0; } break; default: result = 0; break; } return result; } //----- (00678BD0) -------------------------------------------------------- char __thiscall sub_678BD0(int this) { int v1; // esi v1 = this; if ( !sub_673190((void *)this, *(_WORD *)(this + 175), *(_BYTE *)(this + 210) & 0xF) && *(_WORD *)(v1 + 187) == -1 ) sub_678870((_BYTE *)v1); return 1; } //----- (00678C10) -------------------------------------------------------- char __thiscall sub_678C10(int this) { int v1; // esi v1 = this; if ( !sub_673190((void *)this, *(_WORD *)(this + 179), *(_BYTE *)(this + 210) >> 4) && *(_WORD *)(v1 + 185) == -1 ) sub_678990((_BYTE *)v1); return 1; } //----- (00678C50) -------------------------------------------------------- char __thiscall sub_678C50(int this) { int v1; // esi v1 = this; if ( !sub_673190((void *)this, *(_WORD *)(this + 181), *(_BYTE *)(this + 211) & 0xF) && *(_WORD *)(v1 + 183) == -1 ) sub_678AB0((_BYTE *)v1); return 1; } //----- (00678C90) -------------------------------------------------------- char __thiscall sub_678C90(int this) { _DWORD *v1; // edi void (__thiscall ***v2)(_DWORD, signed int); // eax void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // eax int v6; // ecx v1 = (_DWORD *)this; v2 = sub_669780(&unk_AD8D28, *(_BYTE *)(this + 168), *(_BYTE *)(this + 162), 0xFFu); v3 = v2; if ( !v2 || !sub_678370(v1, (int)v2) ) return 0; if ( (signed int)v3[2] > 0 && v3 != (void (__thiscall ***)(_DWORD, signed int))-16 ) { v5 = sub_85C050(v3[4], 8); if ( v5 ) { v6 = *(_DWORD *)(v5 + 40); if ( *(_DWORD *)v6 ) return sub_674620(v1, *(_DWORD *)(*(_DWORD *)v6 + 4)); } } return sub_674620(v1, 0); } //----- (00678D30) -------------------------------------------------------- char __thiscall sub_678D30(int this) { _DWORD *v1; // edi void (__thiscall ***v2)(_DWORD, signed int); // eax void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // eax int v6; // ecx v1 = (_DWORD *)this; v2 = sub_669780(&unk_AD8D28, *(_BYTE *)(this + 168), *(_BYTE *)(this + 162), 0xFFu); v3 = v2; if ( !v2 || !sub_6784E0(v1, (int)v2) ) return 0; if ( (signed int)v3[2] > 0 && v3 != (void (__thiscall ***)(_DWORD, signed int))-28 ) { v5 = sub_85C050(v3[7], 8); if ( v5 ) { v6 = *(_DWORD *)(v5 + 40); if ( *(_DWORD *)v6 ) return sub_674690(v1, *(_DWORD *)(*(_DWORD *)v6 + 4)); } } return sub_674690(v1, 0); } //----- (00678DD0) -------------------------------------------------------- char __thiscall sub_678DD0(int this) { _DWORD *v1; // edi void (__thiscall ***v2)(_DWORD, signed int); // eax void (__thiscall ***v3)(_DWORD, signed int); // esi int v5; // eax int v6; // ecx v1 = (_DWORD *)this; v2 = sub_669780(&unk_AD8D28, *(_BYTE *)(this + 168), *(_BYTE *)(this + 162), 0xFFu); v3 = v2; if ( !v2 || !sub_678650(v1, (int)v2) ) return 0; if ( (signed int)v3[2] > 0 && v3 != (void (__thiscall ***)(_DWORD, signed int))-40 ) { v5 = sub_85C050(v3[10], 8); if ( v5 ) { v6 = *(_DWORD *)(v5 + 40); if ( *(_DWORD *)v6 ) return sub_674700(v1, *(_DWORD *)(*(_DWORD *)v6 + 4)); } } return sub_674700(v1, 0); } //----- (00678E70) -------------------------------------------------------- char __thiscall sub_678E70(_BYTE *this, int a2, int a3, _BYTE *a4) { int v4; // eax _BYTE *v5; // edi int v6; // esi LOBYTE(v4) = a2; v5 = this; if ( a2 ) { v4 = sub_7474E0((_DWORD *)(dword_ACD918 + 4), *(_DWORD *)(a2 + 376)); v6 = v4; if ( v4 ) { if ( *(_BYTE *)(v4 + 4) ) { LOBYTE(v4) = (_BYTE)a4; if ( !*a4 && a3 != 8 ) { v5[220] = 0; LOBYTE(v4) = sub_678BD0((int)v5); } } if ( *(_BYTE *)(v6 + 5) && !a4[1] && a3 != 20 ) { v5[221] = 0; LOBYTE(v4) = sub_678C10((int)v5); } if ( *(_BYTE *)(v6 + 6) && !a4[2] && a3 != 22 ) { v5[222] = 0; LOBYTE(v4) = sub_678C50((int)v5); } } } return v4; } // ACD918: using guessed type int dword_ACD918; //----- (00678F10) -------------------------------------------------------- char __thiscall sub_678F10(_BYTE *this, int a2) { int v2; // eax _BYTE *v3; // edi int v4; // esi LOBYTE(v2) = a2; v3 = this; if ( a2 ) { v2 = sub_7474E0((_DWORD *)(dword_ACD918 + 4), *(_DWORD *)(a2 + 376)); v4 = v2; if ( v2 ) { if ( *(_BYTE *)(v2 + 4) ) { v3[220] = 0; LOBYTE(v2) = sub_678BD0((int)v3); } if ( *(_BYTE *)(v4 + 5) ) { v3[221] = 0; LOBYTE(v2) = sub_678C10((int)v3); } if ( *(_BYTE *)(v4 + 6) ) { v3[222] = 0; LOBYTE(v2) = sub_678C50((int)v3); } } } return v2; } // ACD918: using guessed type int dword_ACD918; //----- (00678F80) -------------------------------------------------------- char __thiscall sub_678F80(void *this, unsigned __int16 *a2) { int v2; // ebx int v3; // edi int v4; // esi int *v5; // eax int v6; // eax unsigned int v8; // ST0C_4 int v9; // eax int v10; // edi int v11; // eax int v12; // eax int v13; // [esp-8h] [ebp-18h] __int16 v14; // [esp+Ch] [ebp-4h] char v15; // [esp+Eh] [ebp-2h] v2 = *a2; v3 = dword_ACDA70; v4 = (int)this; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, v2) ) return 0; if ( (unsigned __int16)v2 > *(_WORD *)(v3 + 200) ) return 0; v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v2); if ( !*v5 ) return 0; v6 = *v5; if ( !v6 ) return 0; v8 = *(_DWORD *)(v6 + 376); v14 = 0; v15 = 0; v9 = sub_7474E0((_DWORD *)(dword_ACD918 + 4), v8); v10 = v9; if ( !v9 ) return 0; if ( *(_BYTE *)(v9 + 4) ) { if ( *(_DWORD *)(a2 + 55) != 8 ) { LOBYTE(v14) = 1; if ( !*(_BYTE *)(v4 + 220) ) { *(_BYTE *)(v4 + 220) = 1; sub_675C50((_DWORD *)v4, 7); sub_678C90(v4); } } } if ( *(_BYTE *)(v10 + 5) ) { if ( *(_DWORD *)(a2 + 55) != 20 ) { HIBYTE(v14) = 1; if ( !*(_BYTE *)(v4 + 221) ) { *(_BYTE *)(v4 + 221) = 1; sub_675C50((_DWORD *)v4, 19); sub_678D30(v4); } } } if ( *(_BYTE *)(v10 + 6) && *(_DWORD *)(a2 + 55) != 22 ) { v15 = 1; if ( !*(_BYTE *)(v4 + 222) ) { *(_BYTE *)(v4 + 222) = 1; sub_675C50((_DWORD *)v4, 21); sub_678DD0(v4); } } v11 = *(_DWORD *)(a2 + 55); switch ( v11 ) { case 8: v13 = 8; v12 = sub_53D9E0(*(unsigned __int16 *)(v4 + 187)); LABEL_25: sub_678E70((_BYTE *)v4, v12, v13, &v14); return 1; case 20: v13 = 20; v12 = sub_53D9E0(*(unsigned __int16 *)(v4 + 185)); goto LABEL_25; case 22: v13 = 22; v12 = sub_53D9E0(*(unsigned __int16 *)(v4 + 205)); goto LABEL_25; } return 1; } // ACD918: using guessed type int dword_ACD918; // ACDA70: using guessed type int dword_ACDA70; //----- (006790F0) -------------------------------------------------------- char __thiscall sub_6790F0(void *this, _DWORD *a2) { int v2; // esi unsigned __int16 *v4; // edi int v5; // ebx char **v6; // eax int v7; // eax char v8; // bl int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // eax bool v15; // zf int v16; // eax int v17; // eax int v18; // eax int v19; // eax void **v20; // ebx int v21; // eax int v22; // eax int v23; // eax unsigned __int16 v24; // ax void (__thiscall ***v25)(_DWORD, signed int); // ebx void (__thiscall ***v26)(_DWORD, signed int); // eax _DWORD *v27; // ecx unsigned __int16 v28; // [esp+8h] [ebp-8h] int v29; // [esp+8h] [ebp-8h] char *v30; // [esp+Ch] [ebp-4h] v2 = (int)this; if ( !a2 ) return 0; v4 = (unsigned __int16 *)a2[28]; if ( !v4 ) return 0; v5 = dword_ACDA70; v28 = *v4; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, *v4) ) return 0; if ( v28 > *(_WORD *)(v5 + 200) ) return 0; v6 = (char **)(*(_DWORD *)(v5 + 196) + 4 * v28); if ( !*v6 ) return 0; v30 = *v6; if ( !*v6 ) return 0; v7 = *(_DWORD *)(v4 + 55); v8 = 1; v29 = v7; if ( v7 == 25 && *(_DWORD *)(v2 + 680) ) { v7 = *(_DWORD *)(v2 + 680); v29 = *(_DWORD *)(v2 + 680); } switch ( v7 ) { case 1: v15 = *(_BYTE *)(v2 + 233) == 0; *(_WORD *)(v2 + 234) = *v4; if ( v15 ) v8 = 0; v15 = *(_BYTE *)(v2 + 696) == 0; *(_WORD *)(v2 + 169) = *v4; if ( !v15 || *(_WORD *)(v2 + 189) != -1 ) return 1; sub_675C50((_DWORD *)v2, 27); sub_673300((_DWORD *)v2, 0, 0, (int **)0x1B); if ( *(_BYTE *)(v2 + 233) ) { v16 = sub_67ACB0(*((_DWORD *)v30 + 94)); if ( v16 ) sub_6734F0(v2, *(_BYTE *)(v16 + 7)); } goto LABEL_63; case 7: if ( *(_BYTE *)(v2 + 220) || *(_WORD *)(v2 + 187) != -1 ) v8 = 0; else sub_675C50((_DWORD *)v2, 8); *(_WORD *)(v2 + 175) = *v4; *(_BYTE *)(v2 + 210) ^= ((*(int (**)(void))(*a2 + 36))() ^ *(_BYTE *)(v2 + 210)) & 0xF; goto LABEL_63; case 8: sub_678F80((void *)v2, v4); *(_WORD *)(v2 + 187) = *v4; sub_675C50((_DWORD *)v2, 7); break; case 9: *(_WORD *)(v2 + 199) = *v4; sub_675C50((_DWORD *)v2, 9); break; case 10: if ( *(_WORD *)(v2 + 195) == -1 ) sub_675C50((_DWORD *)v2, 11); else v8 = 0; *(_WORD *)(v2 + 177) = *v4; *(_BYTE *)(v2 + 209) ^= ((*(int (**)(void))(*a2 + 36))() ^ *(_BYTE *)(v2 + 209)) & 0xF; goto LABEL_63; case 11: *(_WORD *)(v2 + 195) = *v4; goto LABEL_24; case 12: if ( *(_WORD *)(v2 + 197) == -1 ) sub_675C50((_DWORD *)v2, 13); else v8 = 0; v9 = sub_49F760(*(unsigned __int16 *)(v2 + 173)); if ( v9 ) { v10 = *(_DWORD *)(v9 + 232); if ( v10 == 17 || v10 == 18 ) { v11 = sub_67A9D0(v2); if ( v11 ) { v12 = *(_DWORD *)(v11 + 232); if ( v12 != 17 && v12 != 18 ) sub_673300((_DWORD *)v2, (int *)0xB, 0, (int **)0xB); } sub_673300((_DWORD *)v2, (int *)0xB, 0, (int **)0xA); } } *(_WORD *)(v2 + 173) = *v4; *(_BYTE *)(v2 + 209) = 16 * (*(int (**)(void))(*a2 + 36))() | *(_BYTE *)(v2 + 209) & 0xF; goto LABEL_63; case 13: *(_WORD *)(v2 + 197) = *v4; sub_675C50((_DWORD *)v2, 12); v13 = sub_49F760(*(unsigned __int16 *)(v2 + 173)); if ( v13 ) { v14 = *(_DWORD *)(v13 + 232); if ( v14 == 17 || v14 == 18 ) { sub_673300((_DWORD *)v2, (int *)0xB, 0, (int **)0xA); sub_673020((_DWORD *)(v2 + 308), 10); } } sub_673020((_DWORD *)(v2 + 308), 12); break; case 17: *(_WORD *)(v2 + 201) = *v4; sub_675C50((_DWORD *)v2, 17); break; case 18: *(_WORD *)(v2 + 203) = *v4; sub_675C50((_DWORD *)v2, 18); break; case 19: if ( *(_BYTE *)(v2 + 221) || *(_WORD *)(v2 + 185) != -1 ) v8 = 0; else sub_675C50((_DWORD *)v2, 20); *(_WORD *)(v2 + 179) = *v4; *(_BYTE *)(v2 + 210) = 16 * (*(int (**)(void))(*a2 + 36))() | *(_BYTE *)(v2 + 210) & 0xF; goto LABEL_63; case 20: sub_678F80((void *)v2, v4); *(_WORD *)(v2 + 185) = *v4; sub_675C50((_DWORD *)v2, 19); break; case 21: if ( *(_BYTE *)(v2 + 222) || *(_WORD *)(v2 + 183) != -1 ) v8 = 0; else sub_675C50((_DWORD *)v2, 22); *(_WORD *)(v2 + 181) = *v4; *(_BYTE *)(v2 + 211) ^= ((*(int (**)(void))(*a2 + 36))() ^ *(_BYTE *)(v2 + 211)) & 0xF; goto LABEL_63; case 22: sub_678F80((void *)v2, v4); *(_WORD *)(v2 + 183) = *v4; sub_675C50((_DWORD *)v2, 21); break; case 24: *(_WORD *)(v2 + 171) = *v4; sub_675C50((_DWORD *)v2, 24); break; case 25: *(_WORD *)(v2 + 205) = *v4; sub_675C50((_DWORD *)v2, 25); break; case 26: v15 = *(_BYTE *)(v2 + 696) == 0; *(_WORD *)(v2 + 193) = *v4; if ( !v15 ) return 1; sub_675C50((_DWORD *)v2, 26); break; case 27: v15 = *(_BYTE *)(v2 + 233) == 0; *(_WORD *)(v2 + 236) = *v4; if ( v15 ) v8 = 0; if ( !*(_BYTE *)(v2 + 696) ) { *(_WORD *)(v2 + 189) = *v4; sub_675C50((_DWORD *)v2, 27); if ( *(_BYTE *)(v2 + 233) ) { v18 = sub_67ACB0(*((_DWORD *)v30 + 94)); if ( v18 ) sub_6734F0(v2, *(_BYTE *)(v18 + 7)); } LABEL_63: if ( v8 ) break; } return 1; case 28: *(_WORD *)(v2 + 191) = *v4; sub_675C50((_DWORD *)v2, 28); break; case 29: *(_WORD *)(v2 + 207) = *v4; LABEL_24: sub_675C50((_DWORD *)v2, 10); sub_673020((_DWORD *)(v2 + 308), 10); break; default: break; } sub_673020((_DWORD *)(v2 + 308), *(_DWORD *)(v4 + 55)); v17 = *(_DWORD *)(v30 + 166); if ( v17 != 1 ) { if ( v17 != 2 ) goto LABEL_115; if ( *(_BYTE *)(v2 + 162) == 1 ) v24 = *((_WORD *)v30 + 117); else v24 = *((_WORD *)v30 + 119); v25 = sub_669780(&unk_AD8D28, *(_BYTE *)(v2 + 168), *(_BYTE *)(v2 + 162), v24); if ( v25 ) { sub_677D10((char *)v2, (char *)v4, v30); v26 = sub_66BA90(&unk_AD8D28, *(_BYTE *)(v2 + 168), *(_BYTE *)(v2 + 162), *(_WORD *)v30); sub_6787C0((_DWORD *)v2, *(_DWORD *)(v4 + 55), (int)v25, (int)v26); goto LABEL_115; } return 0; } sub_677D10((char *)v2, (char *)v4, v30); switch ( *(_DWORD *)(v4 + 55) ) { case 1: case 9: case 0x12: case 0x18: case 0x1A: case 0x1B: v19 = sub_66D370(&unk_AD8D28, *(_WORD *)v30, *(_BYTE *)(v2 + 162)); goto LABEL_82; case 0x11: v20 = 0; break; default: v19 = sub_66D370(&unk_AD8D28, *(_WORD *)v30, 255); LABEL_82: v20 = (void **)v19; break; } sub_6740D0((_DWORD *)v2, (int)v4, (int)v4, v29, v20, *((_BYTE *)v4 + 122) != 0); v21 = *((_DWORD *)v4 + 58); if ( v21 == 17 || v21 == 18 ) { if ( *((_BYTE *)v4 + 240) ) { sub_6771F0((_DWORD *)(v2 + 308), a2, *(_DWORD *)(v2 + 80), 12); sub_6771F0((_DWORD *)(v2 + 308), a2, *(_DWORD *)(v2 + 76), 10); } } else { sub_6771F0((_DWORD *)(v2 + 308), a2, (int)v20, *(_DWORD *)(v4 + 55)); } v22 = *(_DWORD *)(v4 + 55); if ( v22 == 11 || v22 == 13 ) { if ( (*(unsigned __int8 (**)(void))(*a2 + 4))() == 26 ) sub_677B40((void *)v2, (int)v4, (int)v20); } else if ( v22 == 29 && (*(unsigned __int8 (**)(void))(*a2 + 4))() == 37 ) { sub_677C30(v2, (int)v4, (int)v20); } if ( *(_DWORD *)(v4 + 55) == 25 ) { if ( *(_BYTE *)(v2 + 673) ) { sub_674DE0(v2, (int)v4, 1); } else { if ( *(_DWORD *)(v2 + 676) ) { sub_6ACDF0(&unk_B91250, *(int **)(v2 + 676)); *(_DWORD *)(v2 + 676) = 0; } *(_BYTE *)(v2 + 673) = 0; } if ( *(_BYTE *)(v2 + 684) ) { sub_674FF0(v2, v2, 1); } else { if ( *(_DWORD *)(v2 + 688) ) { sub_6ACDF0(&unk_B91250, *(int **)(v2 + 688)); *(_DWORD *)(v2 + 688) = 0; } *(_BYTE *)(v2 + 684) = 0; if ( byte_ACEB00 ) { v23 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v23 ) sub_4A8140(v23, 140); } } } LABEL_115: if ( *(_WORD *)(v2 + 199) != -1 ) sub_673E20((_DWORD *)v2, 7, 0); if ( *(_WORD *)(v2 + 203) != -1 ) sub_673E20((_DWORD *)v2, 16, 0); if ( *(_BYTE *)(v2 + 672) ) { sub_673B40(v2, 0); sub_673B40(v2, 1); } v27 = *(_DWORD **)(v2 + 224); if ( v27 ) { sub_85C6F0(v27); sub_85C4D0(*(_DWORD **)(v2 + 224)); } return 1; } // ACDA70: using guessed type int dword_ACDA70; // ACEB00: using guessed type char byte_ACEB00; //----- (00679990) -------------------------------------------------------- char __thiscall sub_679990(void *this, __int16 *a2) { void *v2; // edi _DWORD *v4; // esi char v5; // bl __int16 v6; // [esp+8h] [ebp-6Ch] v2 = this; if ( !a2 ) return 0; memset(&v6, 0, 0x67u); v6 = *a2; v4 = sub_6876E0((unsigned __int16 *)&v6); v5 = sub_6790F0(v2, v4); if ( v4 ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); return v5; } //----- (00679A10) -------------------------------------------------------- char __thiscall sub_679A10(int this) { void *v1; // esi _DWORD *v2; // eax __int16 v3; // di int v5; // [esp-4h] [ebp-78h] __int16 v6; // [esp+8h] [ebp-6Ch] v1 = (void *)this; LOWORD(v2) = *(_WORD *)(this + 195); if ( (_WORD)v2 == -1 ) { LOWORD(v2) = *(_WORD *)(this + 197); if ( (_WORD)v2 == -1 ) return (char)v2; v5 = 13; } else { v5 = 11; } v3 = (signed __int16)v2; sub_679B00((_DWORD *)this, v5); LOBYTE(v2) = -1; if ( v3 != -1 ) { memset(&v6, 0, 0x67u); v6 = v3; v2 = sub_6876E0((unsigned __int16 *)&v6); if ( v2 ) LOBYTE(v2) = sub_6790F0(v1, v2); } return (char)v2; } //----- (00679AA0) -------------------------------------------------------- char __thiscall sub_679AA0(void *this, int a2) { int v2; // esi void *v3; // ebx char result; // al int v5; // ecx v2 = dword_ACB230; v3 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, a2) && (unsigned __int16)a2 <= *(_WORD *)(v2 + 200) && (v5 = *(_DWORD *)(v2 + 196), *(_DWORD *)(v5 + 4 * (unsigned __int16)a2)) ) { result = sub_679990(v3, *(__int16 **)(v5 + 4 * (unsigned __int16)a2)); } else { result = sub_679990(v3, 0); } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00679B00) -------------------------------------------------------- char __thiscall sub_679B00(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int **v4; // ecx int *v5; // ecx char v6; // bl int v7; // eax char v8; // dl bool v9; // zf int v10; // eax int v11; // eax int v12; // ebx char v13; // al int v14; // ebx int v15; // eax char v16; // cl int v17; // eax char v18; // dl _DWORD *v19; // ecx _DWORD *v20; // ecx bool v21; // zf int v22; // eax int v23; // eax int **v25; // [esp+Ch] [ebp-8h] int v26; // [esp+Ch] [ebp-8h] int *v27; // [esp+10h] [ebp-4h] v2 = this; sub_675C50(this, a2); v3 = (int *)v2[2 * a2 + 77]; v4 = (int **)&v2[2 * a2 + 78]; v25 = v4; v5 = *v4; v27 = v5; if ( v3 ) { sub_6ACDF0(&unk_B91250, v3); v5 = v27; } if ( v5 ) sub_6ACDF0(&unk_B91250, v5); *v25 = 0; v2[2 * a2 + 77] = 0; v6 = 0; switch ( a2 ) { case 1: *((_WORD *)v2 + 117) = -1; *(_WORD *)((char *)v2 + 169) = -1; if ( *(_WORD *)((char *)v2 + 189) == -1 ) { sub_6734F0((int)v2, 1); v6 = sub_673300(v19, 0, 0, (int **)1); } sub_673E20(v2, 0, 1); break; case 7: v9 = *((_BYTE *)v2 + 220) == 0; *(_WORD *)((char *)v2 + 175) = -1; if ( v9 && -1 == *(_WORD *)((char *)v2 + 187) ) sub_678870(v2); goto LABEL_57; case 8: v7 = sub_53D9E0(*(unsigned __int16 *)((char *)v2 + 187)); sub_678F10(v2, v7); v8 = *((_BYTE *)v2 + 210) & 0xF; *(_WORD *)((char *)v2 + 187) = -1; if ( !sub_673190(v2, *(_WORD *)((char *)v2 + 175), v8) ) sub_678870(v2); goto LABEL_57; case 9: *(_WORD *)((char *)v2 + 199) = -1; v6 = sub_673300(v2, (int *)7, 0, (int **)9); sub_673E20(v2, 7, 1); break; case 10: v9 = *(_WORD *)((char *)v2 + 195) == -1; *(_WORD *)((char *)v2 + 177) = -1; goto LABEL_55; case 11: *(_WORD *)((char *)v2 + 195) = -1; goto LABEL_54; case 12: v26 = sub_49F760(*(unsigned __int16 *)((char *)v2 + 173)); *(_WORD *)((char *)v2 + 173) = -1; if ( *(_WORD *)((char *)v2 + 197) == -1 ) sub_673300(v2, (int *)0xC, 0, (int **)0xC); v6 = 1; if ( v26 ) { v10 = *(_DWORD *)(v26 + 232); if ( v10 == 18 || v10 == 17 ) { v11 = sub_49F760(*(unsigned __int16 *)((char *)v2 + 197)); if ( !v11 || *(_DWORD *)(v11 + 102) != 26 ) { *(_WORD *)((char *)v2 + 177) = -1; sub_673300(v2, (int *)0xB, 0, (int **)0xA); sub_673C60(v2 + 77, 10, 0, 0); } } } break; case 13: v12 = sub_49F760(*(unsigned __int16 *)((char *)v2 + 197)); v13 = *((_BYTE *)v2 + 209) >> 4; *(_WORD *)((char *)v2 + 197) = -1; if ( !sub_673190(v2, *(_WORD *)((char *)v2 + 173), v13) ) { sub_673300(v2, (int *)0xC, 0, (int **)0xC); if ( v12 ) { v14 = *(_DWORD *)(v12 + 232); if ( v14 == 18 || v14 == 17 ) { sub_673300(v2, (int *)0xB, 0, (int **)0xA); sub_673C60(v2 + 77, 10, 0, 0); } } } goto LABEL_57; case 17: *(_WORD *)((char *)v2 + 201) = -1; v6 = sub_673300(v2, (int *)0x1A, 0, (int **)0x11); break; case 18: *(_WORD *)((char *)v2 + 203) = -1; v6 = sub_673300(v2, (int *)0x10, 0, (int **)0x12); sub_673E20(v2, 16, 1); break; case 19: v9 = *((_BYTE *)v2 + 221) == 0; *(_WORD *)((char *)v2 + 179) = -1; if ( v9 && -1 == *(_WORD *)((char *)v2 + 185) ) sub_678990(v2); goto LABEL_57; case 20: v15 = sub_53D9E0(*(unsigned __int16 *)((char *)v2 + 185)); sub_678F10(v2, v15); v16 = *((_BYTE *)v2 + 210) >> 4; *(_WORD *)((char *)v2 + 185) = -1; if ( !sub_673190(v2, *(_WORD *)((char *)v2 + 179), v16) ) sub_678990(v2); goto LABEL_57; case 21: v9 = *((_BYTE *)v2 + 222) == 0; *(_WORD *)((char *)v2 + 181) = -1; if ( v9 && -1 == *(_WORD *)((char *)v2 + 183) ) sub_678AB0(v2); goto LABEL_57; case 22: v17 = sub_53D9E0(*(unsigned __int16 *)((char *)v2 + 183)); sub_678F10(v2, v17); v18 = *((_BYTE *)v2 + 211) & 0xF; *(_WORD *)((char *)v2 + 183) = -1; if ( !sub_673190(v2, *(_WORD *)((char *)v2 + 181), v18) ) sub_678AB0(v2); goto LABEL_57; case 24: *(_WORD *)((char *)v2 + 171) = -1; v6 = sub_673300(v2, (int *)4, 0, (int **)0x18); break; case 25: *(_WORD *)((char *)v2 + 205) = -1; v6 = sub_673300(v2, (int *)5, 0, (int **)0x19); if ( v2[169] ) { sub_6ACDF0(&unk_B91250, (int *)v2[169]); v2[169] = 0; sub_6755F0((int)v2, 25, 0); } if ( v2[172] ) { sub_6ACDF0(&unk_B91250, (int *)v2[172]); v2[172] = 0; sub_6755F0((int)v2, 25, 0); } break; case 26: *(_WORD *)((char *)v2 + 193) = -1; v6 = sub_673300(v2, (int *)3, 0, (int **)0x1A); break; case 27: *((_WORD *)v2 + 118) = -1; sub_6734F0((int)v2, 1); v6 = sub_673300(v20, 0, 0, (int **)0x1B); *(_WORD *)((char *)v2 + 189) = -1; sub_673E20(v2, 0, 1); sub_679AA0(v2, *(unsigned __int16 *)((char *)v2 + 169)); break; case 28: *(_WORD *)((char *)v2 + 191) = -1; v6 = sub_673300(v2, (int *)6, 0, (int **)0x1C); if ( v2[169] ) { sub_6ACDF0(&unk_B91250, (int *)v2[169]); v2[169] = 0; sub_6755F0((int)v2, 28, 0); } if ( v2[172] ) { sub_6ACDF0(&unk_B91250, (int *)v2[172]); v2[172] = 0; sub_6755F0((int)v2, 28, 0); } break; case 29: sub_49F760(*(unsigned __int16 *)((char *)v2 + 207)); *(_WORD *)((char *)v2 + 207) = -1; LABEL_54: v9 = sub_673190(v2, *(_WORD *)((char *)v2 + 177), *((_BYTE *)v2 + 209) & 0xF) == 0; LABEL_55: if ( v9 ) sub_673300(v2, (int *)0xB, 0, (int **)0xA); LABEL_57: v6 = 1; break; default: break; } if ( a2 != 10 ) { if ( a2 != 12 ) { v21 = a2 == 29; goto LABEL_64; } LABEL_66: sub_679A10((int)v2); return v6; } v22 = *(unsigned __int16 *)((char *)v2 + 207); if ( (_WORD)v22 == -1 ) goto LABEL_66; v23 = sub_49F760(v22); if ( !v23 ) return v6; v21 = *(_DWORD *)(v23 + 110) == 29; LABEL_64: if ( v21 ) { sub_67A330((int)v2); return v6; } return v6; } //----- (0067A1D0) -------------------------------------------------------- char __thiscall sub_67A1D0(int this, char a2) { int v2; // eax int v3; // esi int v4; // eax __int16 v5; // bx __int16 v6; // di int *v7; // eax int *v8; // ecx _DWORD *v9; // ecx int *v11; // [esp+Ch] [ebp+8h] LOBYTE(v2) = a2; v3 = this; if ( a2 != *(_BYTE *)(this + 233) ) { *(_BYTE *)(this + 233) = a2; if ( a2 ) { if ( dword_AD8EBC + 776 == (char *)this ) { sub_6790F0((void *)this, (_DWORD *)dword_ADA5A0); LOBYTE(v2) = sub_6790F0((void *)v3, (_DWORD *)dword_ADA538); } else { v4 = *(unsigned __int16 *)(this + 236); *(_DWORD *)(this + 680) = 27; if ( (_WORD)v4 != -1 ) sub_679AA0((void *)this, v4); v2 = *(unsigned __int16 *)(v3 + 234); *(_DWORD *)(v3 + 680) = 1; if ( (_WORD)v2 != -1 ) LOBYTE(v2) = sub_679AA0((void *)v3, v2); } } else { v5 = *(_WORD *)(this + 236); v6 = *(_WORD *)(this + 234); sub_675C50((_DWORD *)this, 27); v7 = *(int **)(v3 + 524); v8 = *(int **)(v3 + 528); v11 = *(int **)(v3 + 528); if ( v7 ) { sub_6ACDF0(&unk_B91250, v7); v8 = v11; } if ( v8 ) sub_6ACDF0(&unk_B91250, v8); *(_DWORD *)(v3 + 524) = 0; *(_DWORD *)(v3 + 528) = 0; *(_WORD *)(v3 + 236) = -1; sub_6734F0(v3, 1); sub_673300(v9, 0, 0, (int **)0x1B); *(_WORD *)(v3 + 189) = -1; sub_673E20((_DWORD *)v3, 0, 1); sub_679AA0((void *)v3, *(unsigned __int16 *)(v3 + 169)); LOBYTE(v2) = sub_679B00((_DWORD *)v3, 1); *(_WORD *)(v3 + 234) = v6; *(_WORD *)(v3 + 236) = v5; } } return v2; } // ADA538: using guessed type int dword_ADA538; // ADA5A0: using guessed type int dword_ADA5A0; //----- (0067A330) -------------------------------------------------------- char __thiscall sub_67A330(int this) { int v1; // esi _DWORD *v2; // eax __int16 v3; // bx int *v4; // edi char v5; // dl __int16 v7; // [esp+4h] [ebp-6Ch] v1 = this; LOWORD(v2) = *(_WORD *)(this + 207); if ( (_WORD)v2 != -1 ) { v3 = *(_WORD *)(this + 207); sub_675C50((_DWORD *)this, 29); v4 = *(int **)(v1 + 544); if ( *(_DWORD *)(v1 + 540) ) sub_6ACDF0(&unk_B91250, *(int **)(v1 + 540)); if ( v4 ) sub_6ACDF0(&unk_B91250, v4); *(_DWORD *)(v1 + 540) = 0; *(_DWORD *)(v1 + 544) = 0; sub_49F760(*(unsigned __int16 *)(v1 + 207)); v5 = *(_BYTE *)(v1 + 209) & 0xF; *(_WORD *)(v1 + 207) = -1; if ( !sub_673190((void *)v1, *(_WORD *)(v1 + 177), v5) ) sub_673300((_DWORD *)v1, (int *)0xB, 0, (int **)0xA); LOBYTE(v2) = sub_67A330(v1); if ( v3 != -1 ) { memset(&v7, 0, 0x67u); v7 = v3; v2 = sub_6876E0((unsigned __int16 *)&v7); if ( v2 ) LOBYTE(v2) = sub_6790F0((void *)v1, v2); } } return (char)v2; } //----- (0067A440) -------------------------------------------------------- char __thiscall sub_67A440(int this) { int v1; // ebx int v2; // eax int v3; // esi int v4; // edi __int16 *v5; // eax int v6; // edx __int16 v7; // ax int v8; // esi int v9; // edi int v10; // edx v1 = this; v2 = *(unsigned __int16 *)(this + 169); if ( (_WORD)v2 != -1 ) { v3 = dword_ACB230; v4 = *(unsigned __int16 *)(this + 169); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v6 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v6 + 4 * v4) ) v5 = *(__int16 **)(v6 + 4 * v4); else v5 = 0; } else { v5 = 0; } } else { v5 = 0; } sub_679990((void *)v1, v5); } v7 = *(_WORD *)(v1 + 193); if ( v7 != -1 ) { v8 = dword_ACB230; v9 = *(unsigned __int16 *)(v1 + 193); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v9) && (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) && (v10 = *(_DWORD *)(v8 + 196), *(_DWORD *)(v10 + 4 * v9)) ) { LOBYTE(v7) = sub_679990((void *)v1, *(__int16 **)(v10 + 4 * v9)); } else { LOBYTE(v7) = sub_679990((void *)v1, 0); } } return v7; } // ACB230: using guessed type int dword_ACB230; //----- (0067A500) -------------------------------------------------------- int *__thiscall sub_67A500(_DWORD *this) { _DWORD *v1; // edi signed int v2; // esi int *result; // eax int *v4; // ebx v1 = this; v2 = 0; do { result = (int *)v1[2 * v2]; v4 = (int *)v1[2 * v2 + 1]; if ( result ) result = sub_6ACDF0(&unk_B91250, (int *)v1[2 * v2]); if ( v4 ) result = sub_6ACDF0(&unk_B91250, v4); v1[2 * v2] = 0; v1[2 * v2++ + 1] = 0; } while ( v2 < 30 ); return result; } //----- (0067A560) -------------------------------------------------------- char __cdecl sub_67A560(int *a1, float *a2) { float v2; // edx float v3; // eax int *v5; // eax float v6; // ecx float v7; // edx int *v8; // eax float v9; // ecx float v10; // edx char v11; // [esp+0h] [ebp-30h] float v12; // [esp+Ch] [ebp-24h] float v13; // [esp+10h] [ebp-20h] float v14; // [esp+14h] [ebp-1Ch] float v15; // [esp+18h] [ebp-18h] float v16; // [esp+1Ch] [ebp-14h] float v17; // [esp+20h] [ebp-10h] float v18; // [esp+24h] [ebp-Ch] float v19; // [esp+28h] [ebp-8h] float v20; // [esp+2Ch] [ebp-4h] float v21; // [esp+38h] [ebp+8h] float v22; // [esp+38h] [ebp+8h] float v23; // [esp+38h] [ebp+8h] float v24; // [esp+38h] [ebp+8h] v2 = *((float *)a1 + 1); v3 = *((float *)a1 + 2); v18 = *(float *)a1; v19 = v2; v20 = v3; sub_4430B0(&v18); v21 = v18 * v18 + v19 * v19 + v20 * v20; v22 = sqrt(v21); if ( v22 < 0.000001 ) return 0; v23 = flt_AB4FD0 * v18 + flt_AB4FD4 * v19 + flt_AB4FD8 * v20; v24 = fabs(v23); if ( 1.0 - v24 < 0.0000009999999974752427 ) return 0; v5 = (int *)sub_443140(&v18, &v12, &flt_AB4FD0); v6 = *((float *)v5 + 1); v15 = *(float *)v5; v7 = *((float *)v5 + 2); v16 = v6; v17 = v7; v8 = (int *)sub_443140(&v15, (float *)&v11, &v18); v9 = *((float *)v8 + 1); v12 = *(float *)v8; v10 = *((float *)v8 + 2); *a2 = v15; v13 = v9; v14 = v10; a2[3] = v16; a2[6] = v17; a2[1] = v18; a2[4] = v19; a2[7] = v20; a2[2] = v12; a2[5] = v13; a2[8] = v14; return 1; } // AB4FD0: using guessed type float flt_AB4FD0; // AB4FD4: using guessed type float flt_AB4FD4; // AB4FD8: using guessed type float flt_AB4FD8; //----- (0067A690) -------------------------------------------------------- void *__thiscall sub_67A690(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiGeometry *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; //----- (0067A6C0) -------------------------------------------------------- _DWORD *__thiscall sub_67A6C0(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 17) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 17) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 17) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 17) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 17) ) goto LABEL_11; return result; } //----- (0067A720) -------------------------------------------------------- _DWORD *__thiscall sub_67A720(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi v4 = this; sub_85BA50(this); *v4 = &NiSkinInstance::`vftable'; v4[2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4[3] = 0; v4[7] = 0; v4[8] = 0; v4[9] = 0; v4[10] = 0; v4[4] = a3; v4[5] = a4; v4[6] = -1; return v4; } // 9F4264: using guessed type void *NiSkinInstance::`vftable'; //----- (0067A780) -------------------------------------------------------- char *sub_67A780() { return dword_BA4860; } //----- (0067A790) -------------------------------------------------------- void *__thiscall sub_67A790(void *this, char a2) { void *v2; // esi v2 = this; sub_871E40(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0067A7C0) -------------------------------------------------------- unsigned int __thiscall sub_67A7C0(_DWORD *this, int a2, int a3, _DWORD *a4) { int *v4; // ecx unsigned int v5; // edx unsigned int result; // eax int v7; // ecx v4 = *(int **)(this[24] + 4 * a2); v5 = v4[2]; result = 0; if ( v5 ) { v7 = *v4; while ( **(_DWORD **)v7 != a3 ) { ++result; v7 += 4; if ( result >= v5 ) goto LABEL_5; } *a4 = *(_DWORD *)(*(_DWORD *)v7 + 4); } else { LABEL_5: *a4 = 0; result = 0; } return result; } //----- (0067A810) -------------------------------------------------------- char __thiscall sub_67A810(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax _DWORD *v7; // edi int v8; // esi v5 = *(_DWORD **)(this[24] + 4 * a2); if ( !v5 ) return 0; v7 = *(_DWORD **)(*v5 + 4 * a3); if ( !v7 ) return 0; *v7 = a4; v8 = v7[1]; if ( v8 != a5 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7[1] = a5; if ( a5 ) InterlockedIncrement((volatile LONG *)(a5 + 4)); } return 1; } //----- (0067A890) -------------------------------------------------------- unsigned int __thiscall sub_67A890(_DWORD *this, int a2, int a3) { unsigned int result; // eax int v4; // edx bool v5; // zf _DWORD *v6; // edx result = 0; if ( this[31] ) { do { v4 = this[29]; v5 = *(_DWORD *)(v4 + 4 * result) == a2; v6 = (_DWORD *)(v4 + 4 * result); if ( v5 && result < this[31] ) *v6 = a3; ++result; } while ( result < this[31] ); } return result; } //----- (0067A8C0) -------------------------------------------------------- void __cdecl sub_67A8C0(int *a1, int *a2, int *a3) { int *v3; // ecx int v4; // edx int **v5; // eax int *j; // eax int *i; // eax v3 = a1; if ( a1 != a2 ) { v4 = *a3; do { *a3 = ++v4; if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = (int *)v3[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v3 != (int *)i[2] ) break; v3 = i; } v3 = i; } else { v3 = (int *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != a2 ); } } //----- (0067A930) -------------------------------------------------------- void __thiscall sub_67A930(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[47]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[47] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0067A980) -------------------------------------------------------- void __thiscall sub_67A980(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[142]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[142] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0067A9D0) -------------------------------------------------------- int __thiscall sub_67A9D0(int this) { int v1; // esi int v2; // edi int result; // eax int v4; // ecx v1 = dword_ACB230; v2 = *(unsigned __int16 *)(this + 197); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200) && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) ) { result = *(_DWORD *)(v4 + 4 * v2); } else { result = 0; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (0067AA20) -------------------------------------------------------- char __thiscall sub_67AA20(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; if ( sub_673300(this, (int *)2, (void **)a2, 0) != 1 ) return 0; v3 = v2[7]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[7] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } return 1; } //----- (0067AA90) -------------------------------------------------------- int __thiscall sub_67AA90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST2C_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiGeometry *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiGeometry *>::`vftable'; return result; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F4250: using guessed type void *NiTPointerListBase,NiGeometry *>::`vftable'; //----- (0067AB10) -------------------------------------------------------- _DWORD *__thiscall sub_67AB10(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiGeometry *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiGeometry *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F4250: using guessed type void *NiTPointerListBase,NiGeometry *>::`vftable'; //----- (0067ABA0) -------------------------------------------------------- _DWORD *__thiscall sub_67ABA0(_DWORD *this, _DWORD *a2, int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx int v6; // edi int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 21) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 21) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 21) ); } if ( *((_BYTE *)v3 + 21) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 21) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (0067AC30) -------------------------------------------------------- int __thiscall sub_67AC30(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST2C_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiGeometry *>::`vftable'; return result; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F42B4: using guessed type void *PgTList::`vftable'; //----- (0067ACB0) -------------------------------------------------------- int __cdecl sub_67ACB0(unsigned int a1) { return sub_7474E0((_DWORD *)(dword_ACD918 + 4), a1); } // ACD918: using guessed type int dword_ACD918; //----- (0067ACD0) -------------------------------------------------------- int __cdecl sub_67ACD0(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACD938 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACD938 + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD938 + 4), v3); } // ACD938: using guessed type int dword_ACD938; //----- (0067AD30) -------------------------------------------------------- _DWORD *__thiscall sub_67AD30(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiGeometry *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F42B4: using guessed type void *PgTList::`vftable'; //----- (0067ADC0) -------------------------------------------------------- char **__stdcall sub_67ADC0(char *a1, int a2, int a3) { char **result; // eax int v4; // edx void **v5; // [esp+0h] [ebp-Ch] result = (char **)operator new(0xCu); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a1); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) result[2] = *(char **)a3; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0067AE20) -------------------------------------------------------- _DWORD *__cdecl sub_67AE20(_DWORD *a1, int *a2, int *a3, _BYTE *a4) { int *v4; // ecx int v5; // eax int **v6; // eax int *j; // eax int *i; // eax _DWORD *result; // eax v4 = a2; if ( a2 == a3 ) { result = a1; *a1 = a4; } else { do { v5 = v4[4]; if ( v4[3] == 17 && v5 ) { if ( *a4 ) *(_WORD *)(v5 + 28) &= 0xFFFEu; else *(_WORD *)(v5 + 28) |= 1u; v4 = a2; } if ( !*((_BYTE *)v4 + 21) ) { v6 = (int **)v4[2]; if ( *((_BYTE *)v6 + 21) ) { for ( i = (int *)v4[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v4 != (int *)i[2] ) break; v4 = i; } v4 = i; } else { v4 = (int *)v4[2]; for ( j = *v6; !*((_BYTE *)j + 21); j = (int *)*j ) v4 = j; } a2 = v4; } } while ( v4 != a3 ); result = a1; *a1 = a4; } return result; } //----- (0067AEC0) -------------------------------------------------------- void __stdcall sub_67AEC0(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 17) ) { do { sub_67AEC0(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 17) ); } } //----- (0067AF00) -------------------------------------------------------- void __thiscall sub_67AF00(_DWORD *this) { _DWORD *v1; // esi _DWORD ***v2; // ecx _DWORD **v3; // eax v1 = this; v2 = (_DWORD ***)*this; v3 = *v2; if ( *v2 != v2 ) { *v3[1] = *v3; (*v3)[1] = v3[1]; operator delete(v3); --v1[1]; } } //----- (0067AF30) -------------------------------------------------------- int **__thiscall sub_67AF30(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 21) ) { if ( v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (0067AFA0) -------------------------------------------------------- char **__thiscall sub_67AFA0(char **this, int a2) { char **v2; // esi char *v3; // edi char **result; // eax char *v5; // ecx v2 = this; v3 = *this; result = sub_67ADC0(*this, *((_DWORD *)*this + 1), a2); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = result; *(_DWORD *)result[1] = result; return result; } //----- (0067AFF0) -------------------------------------------------------- signed int __stdcall sub_67AFF0(int a1, char **a2) { char **v2; // esi char *v3; // edi char **v4; // eax char *v5; // ecx if ( !sub_8CF140(a1, "#Hair") ) return 1; v2 = a2; v3 = *a2; v4 = sub_67ADC0(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = v4; *(_DWORD *)v4[1] = v4; return -1; } //----- (0067B060) -------------------------------------------------------- signed int __stdcall sub_67B060(int a1, char **a2) { char **v2; // esi char *v3; // edi char **v4; // eax char *v5; // ecx if ( !sub_8CF140(a1, "#Face") ) return 1; v2 = a2; v3 = *a2; v4 = sub_67ADC0(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = v4; *(_DWORD *)v4[1] = v4; return -1; } //----- (0067B0D0) -------------------------------------------------------- signed int __stdcall sub_67B0D0(int a1, char **a2) { int v2; // eax char **v4; // esi char *v5; // edi char **v6; // eax char *v7; // ecx if ( !a1 ) return 1; v2 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v2 ) return 1; while ( (char *)v2 != dword_BA4840 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 1; } v4 = a2; v5 = *a2; v6 = sub_67ADC0(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v7 = v4[1]; if ( (unsigned int)(1073741822 - (_DWORD)v7) < 1 ) std::_Xlength_error("list too long"); v4[1] = v7 + 1; *((_DWORD *)v5 + 1) = v6; *(_DWORD *)v6[1] = v6; return -1; } //----- (0067B150) -------------------------------------------------------- int __thiscall sub_67B150(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // ecx bool v7; // zf int v8; // edi int v9; // ecx int result; // eax v3 = this; v4 = sub_5E8850(this, a3); v5 = v3[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 21) == 0; LOBYTE(a3) = 1; if ( v7 ) { v8 = v4[3]; do { v5 = v6; LOBYTE(a3) = v8 < *(_DWORD *)(v6 + 12); if ( (_BYTE)a3 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 21) ); } v9 = *(_DWORD *)sub_6A0F70(v3, (int)&a3, (char)a3, v5, v4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (0067B1C0) -------------------------------------------------------- int __cdecl sub_67B1C0(int a1, void *a2) { _DWORD *v2; // eax void **v4; // [esp+10h] [ebp-3Ch] char *v5; // [esp+1Ch] [ebp-30h] void *v6; // [esp+20h] [ebp-2Ch] int v7; // [esp+30h] [ebp-1Ch] unsigned int v8; // [esp+34h] [ebp-18h] int v9; // [esp+48h] [ebp-4h] v5 = 0; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4018E0(&v6, a2, strlen((const char *)a2)); v9 = 0; sub_438D10(&unk_ACB29C, &v5, (char *)&v6); v9 = -1; if ( v8 >= 0x10 ) operator delete(v6); v8 = 15; v7 = 0; LOBYTE(v6) = 0; if ( v5 == dword_ACB2A0 ) { *(_DWORD *)(a1 + 4) = 0; v2 = operator new(0xCu); if ( !v2 ) { v5 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v5); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *(_DWORD *)a1 = v2; *v2 = v2; *(_DWORD *)(*(_DWORD *)a1 + 4) = *(_DWORD *)a1; } else { sub_4820D0((char ***)a1, (int **)v5 + 9); } return a1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0067B2D0) -------------------------------------------------------- void *__thiscall sub_67B2D0(void *this, char a2) { void *v2; // esi v2 = this; sub_676CA0((char *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0067B300) -------------------------------------------------------- void __thiscall sub_67B300(_DWORD *this) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // eax _DWORD *v4; // ST04_4 char v5; // [esp+Ch] [ebp-18h] _DWORD *v6; // [esp+10h] [ebp-14h] _DWORD *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v1 = this; v7 = this; v2 = (int)(this + 5); v8 = 0; v6 = this + 5; v3 = (_DWORD *)this[6]; v4 = (_DWORD *)*v3; LOBYTE(v8) = 1; sub_4E6DC0(this + 5, (int *)&v5, v4, v3); operator delete(*(void **)(v2 + 4)); *v1 = &Ns_TourScene::`vftable'; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; //----- (0067B380) -------------------------------------------------------- _DWORD *__thiscall sub_67B380(_DWORD *this, int a2, int a3, char a4) { _DWORD *v4; // ebx int v5; // edi int v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax void **v10; // [esp+10h] [ebp-28h] int v11; // [esp+1Ch] [ebp-1Ch] _DWORD *v12; // [esp+24h] [ebp-14h] char *v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v4 = this; v12 = this; v5 = 0; this[1] = 0; this[2] = -1; v6 = a4; *this = &FindBoneNode::`vftable'; this[3] = v6; v14 = 0; this[7] = 0; v7 = operator new(0x14u); if ( !v7 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v4[6] = v7; *v7 = v7; *(_DWORD *)(v4[6] + 4) = v4[6]; *(_DWORD *)(v4[6] + 8) = v4[6]; *(_BYTE *)(v4[6] + 16) = 1; *(_BYTE *)(v4[6] + 17) = 1; LOBYTE(v14) = 1; if ( a3 > 0 ) { do { if ( *(_DWORD *)(a2 + 4 * v5) ) { *(_DWORD *)&a4 = *(_DWORD *)(a2 + 4 * v5); v8 = sub_49FAD0(v4 + 5, &a4); sub_8DE1B0(v4 + 5, (int)&v11, v8, 0); } ++v5; } while ( v5 < a3 ); } v4[4] = 0; return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F42DC: using guessed type void *FindBoneNode::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0067B480) -------------------------------------------------------- int __thiscall sub_67B480(int this, int a2, int a3) { int v3; // ebx const char *v4; // esi int v5; // edi int result; // eax char v7; // [esp+Ch] [ebp-4h] v3 = a2; v4 = *(const char **)(a2 + 8); v5 = this; if ( !v4 ) return 1; if ( *(int **)(this + 24) != *sub_6AD950((_DWORD *)(this + 20), (int **)&v7, &a2) ) return -1; result = strcmp(v4, *(const char **)(v5 + 12)); if ( result ) return 1; *(_DWORD *)(v5 + 16) = v3; return result; } //----- (0067B570) -------------------------------------------------------- bool __thiscall sub_67B570(float *this, int a2, int a3) { return 0.0 != this[117]; } //----- (0067B590) -------------------------------------------------------- _DWORD *__thiscall sub_67B590(int this, _DWORD *a2) { _DWORD *result; // eax result = a2; *(_DWORD *)(this + 4132) = *a2; *(_DWORD *)(this + 4136) = a2[1]; *(float *)(this + 4140) = 0.0; *(_BYTE *)(this + 5425) = 1; return result; } //----- (0067B5C0) -------------------------------------------------------- int __thiscall sub_67B5C0(char *this) { return (int)(this + 4132); } //----- (0067B5D0) -------------------------------------------------------- BOOL __thiscall sub_67B5D0(_BYTE *this) { return this[5412] == 0; } //----- (0067B5E0) -------------------------------------------------------- int __thiscall sub_67B5E0(_DWORD *this) { return (*(int (__thiscall **)(_DWORD *))(this[397] + 4))(this + 397); } //----- (0067B600) -------------------------------------------------------- signed int __thiscall sub_67B600(_DWORD *this) { _BYTE *v1; // esi _DWORD *v3; // eax v1 = this; if ( sub_64F870(this) ) { if ( sub_650CC0(v1) ) { sub_650CD0(v1, 0); return 1; } } else if ( !sub_650CC0(v1) ) { v3 = (_DWORD *)sub_672FD0(v1 + 776); sub_6618E0(v3, "FxSkinning_SpactralGlow", "FxNoSkinning_SpactralGlow"); sub_650CD0(v1, 1); } return 1; } //----- (0067B660) -------------------------------------------------------- int __thiscall sub_67B660(_DWORD *this, int a2) { int result; // eax result = a2; if ( a2 == 1 && this[1030] == 4 ) this[1030] = 1; if ( !this[1030] ) this[1030] = a2; return result; } //----- (0067B690) -------------------------------------------------------- int __thiscall sub_67B690(_DWORD *this, int a2) { int result; // eax result = a2; this[1038] = a2; return result; } //----- (0067B6A0) -------------------------------------------------------- __int16 __thiscall sub_67B6A0(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[2057] = a2; return result; } //----- (0067B6C0) -------------------------------------------------------- int __thiscall sub_67B6C0(_DWORD *this) { int v1; // eax int result; // eax v1 = sub_650CF0(this); if ( !v1 || (result = *(_DWORD *)(v1 + 99), result != 17) && result != 30 ) result = 0; return result; } //----- (0067B6E0) -------------------------------------------------------- bool __thiscall sub_67B6E0(_DWORD *this) { int v1; // eax int v2; // eax bool result; // al v1 = sub_650CF0(this); result = 0; if ( v1 ) { v2 = *(_DWORD *)(v1 + 99); if ( v2 == 17 || v2 == 30 ) result = 1; } return result; } //----- (0067B700) -------------------------------------------------------- int __thiscall sub_67B700(int this, _DWORD *a2) { int result; // eax *(_DWORD *)(this + 4156) = 0; *(_BYTE *)(this + 5412) = 0; *(_DWORD *)(this + 4088) = *a2; *(_DWORD *)(this + 4092) = a2[1]; *(_DWORD *)(this + 4096) = a2[2]; *(_DWORD *)(this + 4132) = *a2; *(_DWORD *)(this + 4136) = a2[1]; result = a2[2]; *(_DWORD *)(this + 4140) = result; return result; } //----- (0067B750) -------------------------------------------------------- char __thiscall sub_67B750(int this, char a2, __int16 a3) { char result; // al result = a2; *(_BYTE *)(this + 5469) = a2; *(_WORD *)(this + 5470) = a3; return result; } //----- (0067B770) -------------------------------------------------------- bool __thiscall sub_67B770(_BYTE *this) { return this[5469] != 0; } //----- (0067B780) -------------------------------------------------------- __int16 __thiscall sub_67B780(_WORD *this) { return this[2735]; } //----- (0067B790) -------------------------------------------------------- int sub_67B790() { return sub_680890((unsigned __int8 *)byte_AD9238); } //----- (0067B7A0) -------------------------------------------------------- _DWORD *__thiscall sub_67B7A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax signed int v3; // ecx int v4; // eax v1 = this; sub_658E20(this); *v1 = &MainChar::`vftable'; v1[15] = &MainChar::`vftable'; v1[21] = &MainChar::`vftable'; sub_8D0610((_BYTE *)v1 + 4056); v1[1021] = 0; v1[1363] = 0; *((_BYTE *)v1 + 5472) = 0; v1[1369] = 0; v2 = (int)(v1 + 1054); v3 = 100; do { *(float *)(v2 - 4) = 0.0; v2 += 12; --v3; *(float *)(v2 - 12) = 0.0; *(float *)(v2 - 8) = 0.0; } while ( v3 ); *((_WORD *)v1 + 2064) = -1; v4 = v1[175]; *((float *)v1 + 1037) = 250.0; v1[1026] = 0; *((_BYTE *)v1 + 4116) = 0; v1[1030] = 0; v1[1031] = 0; v1[1038] = 0; v1[1039] = 0; *((_BYTE *)v1 + 5412) = 0; v1[1354] = 0; v1[1355] = 0; *((_WORD *)v1 + 2712) = 0; v1[1360] = 0; *((_WORD *)v1 + 2072) = 0; *((_BYTE *)v1 + 4146) = 0; v1[1027] = 0; *((_BYTE *)v1 + 4100) = 0; v1[1007] = 0; v1[1013] = 0; *(_WORD *)(v4 + 28) &= 0xFFFEu; *((_WORD *)v1 + 2735) = -1; *((_BYTE *)v1 + 4147) = 0; *((_WORD *)v1 + 2057) = -1; v1[1361] = 0; *((_BYTE *)v1 + 4112) = 0; *((_BYTE *)v1 + 5448) = 0; *((_BYTE *)v1 + 5469) = 0; *((_WORD *)v1 + 1475) = -1; return v1; } // 9F438C: using guessed type void *MainChar::`vftable'; // 9F43AC: using guessed type void *MainChar::`vftable'; // 9F43B4: using guessed type void *MainChar::`vftable'; //----- (0067B910) -------------------------------------------------------- void __thiscall sub_67B910(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &MainChar::`vftable'; this[15] = &MainChar::`vftable'; this[21] = &MainChar::`vftable'; v2 = this[1363]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[1021]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_657580(v1); } // 9F438C: using guessed type void *MainChar::`vftable'; // 9F43AC: using guessed type void *MainChar::`vftable'; // 9F43B4: using guessed type void *MainChar::`vftable'; //----- (0067B9D0) -------------------------------------------------------- char __thiscall sub_67B9D0(_WORD *this, int a2) { _WORD *v2; // esi int v3; // edi int v4; // eax void (__thiscall *v5)(_WORD *, int *); // edx int v6; // eax int v7; // eax unsigned __int8 (__thiscall *v8)(_WORD *); // edx void (__thiscall *v9)(_WORD *, _DWORD); // eax double v10; // st7 float v11; // ST20_4 float v12; // ST1C_4 float v13; // ST24_4 float v14; // ST20_4 int v16; // [esp+34h] [ebp-68h] float v17[4]; // [esp+40h] [ebp-5Ch] float v18; // [esp+50h] [ebp-4Ch] _WORD *v19; // [esp+54h] [ebp-48h] char v20; // [esp+5Bh] [ebp-41h] char v21; // [esp+5Ch] [ebp-40h] int v22; // [esp+80h] [ebp-1Ch] int v23; // [esp+84h] [ebp-18h] int v24; // [esp+88h] [ebp-14h] int v25; // [esp+8Ch] [ebp-10h] int v26; // [esp+90h] [ebp-Ch] char v27; // [esp+94h] [ebp-8h] v2 = this; v3 = sub_680740(byte_AD9238); v18 = COERCE_FLOAT(sub_680770(byte_AD9238)); sub_6805D0((int)byte_AD9238); v2[274] = *(_WORD *)a2; v22 = *(_DWORD *)(v3 + 4); v23 = *(_DWORD *)(v3 + 8); v24 = *(_DWORD *)(v3 + 12); v4 = *(_DWORD *)v2; v25 = *(_DWORD *)(v3 + 16); v26 = *(_DWORD *)(v3 + 20); v5 = *(void (__thiscall **)(_WORD *, int *))(v4 + 88); v27 = 0; v5(v2, &v22); v19 = *(_WORD **)v2; v6 = sub_680CC0((int)byte_AD9238); (*((void (__thiscall **)(_WORD *, int))v19 + 34))(v2, v6); v19 = *(_WORD **)v2; v7 = sub_680CD0((int)byte_AD9238); (*((void (__thiscall **)(_WORD *, int))v19 + 36))(v2, v7); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v2 + 128))(v2, *(_DWORD *)(v3 + 42)); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v2 + 140))(v2, *(_DWORD *)(v3 + 46)); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v2 + 148))(v2, 0); v20 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 48))(v2); v8 = *(unsigned __int8 (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 48); *((_BYTE *)v2 + 1924) = 1; *((_DWORD *)v2 + 482) = 0; if ( v20 != v8(v2) ) *((_BYTE *)v2 + 1925) = 1; v19 = v2 + 388; sub_673CC0((int)(v2 + 388), (unsigned __int8 *)LODWORD(v18)); sub_673110((int)(v2 + 388), 0); v9 = *(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v2 + 688); *((_BYTE *)v2 + 1482) = 1; *((_BYTE *)v2 + 4147) = 0; v9(v2, 0); dword_B6711C = *(_DWORD *)(v3 + 67); dword_B67120 = *(_DWORD *)(v3 + 71); dword_B67124 = *(_DWORD *)(v3 + 75); v10 = (double)*(unsigned int *)(a2 + 238); LODWORD(v18) = a2 + 238; v11 = v10; v12 = (double)*(unsigned int *)(a2 + 234); if ( !sub_69AD10((float *)byte_ADB468, v12, v11, (int)&v16) ) return 0; v13 = (double)(unsigned int)*(_DWORD *)LODWORD(v18); v14 = (double)*(unsigned int *)(a2 + 234); if ( sub_699590(byte_ADB468, v14, v13) ) return 0; *((_DWORD *)v2 + 169) = 0; v18 = (flt_BA45B4 + flt_BA45B4) * 90.0 / 180.0; sub_85D810((float *)&v21, v18); sub_85DA90((float *)&v21, v17, (float *)&dword_AB4FE8); (*(void (__thiscall **)(_WORD *, int *, float *))(*(_DWORD *)v2 + 184))(v2, &v16, v17); sub_650C60(v2); v2[2057] = -1; byte_AB66F6 = *(_BYTE *)(v3 + 54) != 0; sub_67A1D0((int)v19, *(_BYTE *)(v3 + 54) != 0); return 1; } // AB4FE8: using guessed type int dword_AB4FE8; // AB66F6: using guessed type char byte_AB66F6; // B6711C: using guessed type int dword_B6711C; // B67120: using guessed type int dword_B67120; // B67124: using guessed type int dword_B67124; // BA45B4: using guessed type float flt_BA45B4; //----- (0067BD40) -------------------------------------------------------- char __thiscall sub_67BD40(void *this, float a2) { int v2; // esi bool v3; // al float v5[9]; // [esp+10h] [ebp-78h] float v6; // [esp+34h] [ebp-54h] float v7; // [esp+38h] [ebp-50h] int v8; // [esp+84h] [ebp-4h] v2 = (int)this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 248))() ) { sub_67E1B0(v5); v8 = 0; sub_67E120(v2 + 1588, (int)v5); sub_8CFBE0((int *)v5, a2); v3 = sub_699470(byte_ADB468, v6, v7); v8 = -1; if ( v3 ) { sub_67E1D0(v5); return 0; } sub_67E1D0(v5); } return 1; } //----- (0067BE00) -------------------------------------------------------- void __thiscall sub_67BE00(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; v3 = this[731]; if ( v3 && !v2[730] ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 240))(a2); if ( (_BYTE)a2 != 1 || !v2[6] ) { (*(void (__thiscall **)(_DWORD *))(v2[397] + 32))(v2 + 397); if ( !sub_65B9D0(v2, 100000) ) (*(void (__thiscall **)(_DWORD *))(*v2 + 340))(v2); v2[1039] = 0; *((_BYTE *)v2 + 5412) = 0; v2[1030] = 0; } } //----- (0067BE90) -------------------------------------------------------- void __thiscall sub_67BE90(_DWORD *this, float a2, float a3, int a4) { _DWORD *v4; // esi int v5; // ecx _DWORD *v6; // eax int v7; // [esp+20h] [ebp-Ch] int v8; // [esp+24h] [ebp-8h] int v9; // [esp+28h] [ebp-4h] v4 = this; v5 = this[731]; if ( v5 && !v4[730] ) (*(void (__stdcall **)(_DWORD, _DWORD, int))(*(_DWORD *)v5 + 236))(LODWORD(a2), LODWORD(a3), a4); if ( (_BYTE)a4 != 1 || !v4[6] ) { (*(void (__thiscall **)(_DWORD *))(v4[397] + 32))(v4 + 397); if ( sub_69AD10((float *)byte_ADB468, a2, a3, (int)&v7) == 1 ) { (*(void (__thiscall **)(_DWORD *, int *))(*v4 + 188))(v4, &v7); v6 = (_DWORD *)v4[175]; v6[22] = v7; v6[23] = v8; v6[24] = v9; } v4[1039] = 0; *((_BYTE *)v4 + 5412) = 0; } } //----- (0067BF50) -------------------------------------------------------- char __thiscall sub_67BF50(float *this) { float *v1; // esi float v2; // ST28_4 int v3; // eax int v4; // eax int v5; // ecx int v6; // ecx double v7; // st6 int v9; // [esp+18h] [ebp-4h] v1 = this; if ( !(dword_AD91E0 & 1) ) dword_AD91E0 |= 1u; v2 = *(float *)(*(int (__thiscall **)(_DWORD *))(*((_DWORD *)this + 397) + 56))((_DWORD *)this + 397); v3 = (*(int (__thiscall **)(_DWORD *))(*((_DWORD *)v1 + 397) + 56))((_DWORD *)v1 + 397); LOBYTE(v4) = sub_699300( byte_ADB468, v2, *(float *)(v3 + 4), v1[1033], v1[1034], 100, (int)flt_AD8EC0, (int)&v9, (int)(v1 + 1356)); v5 = v9; if ( v9 ) { v4 = 0; *((_BYTE *)v1 + 5412) = 1; *((_DWORD *)v1 + 1354) = v5; v1[1355] = 0.0; if ( v5 > 0 ) { v6 = (int)(v1 + 1054); do { v7 = flt_AD8EC0[2 * v4++]; *(float *)(v6 - 4) = v7; v6 += 12; *(float *)(v6 - 12) = *(float *)&(&dword_AD8EBC)[2 * v4]; *(float *)(v6 - 8) = 0.0; } while ( v4 < *((_DWORD *)v1 + 1354) ); } if ( *((_BYTE *)v1 + 5424) ) { v1[3 * *((_DWORD *)v1 + 1354) + 1050] = v1[1033]; v4 = 3 * *((_DWORD *)v1 + 1354); v1[3 * *((_DWORD *)v1 + 1354) + 1051] = v1[1034]; } } return v4; } // AD91E0: using guessed type int dword_AD91E0; //----- (0067C060) -------------------------------------------------------- char __thiscall sub_67C060(int this) { int v1; // esi int v2; // eax int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx _DWORD *v7; // eax bool v8; // zf int v9; // edx int v10; // eax v1 = this; if ( *(_BYTE *)(this + 5425) ) { v2 = *(_DWORD *)(this + 4132); v3 = *(_DWORD *)(this + 4136); v4 = *(_DWORD *)(v1 + 4140); *(_DWORD *)(v1 + 5428) = v2; *(_DWORD *)(v1 + 5432) = v3; *(_DWORD *)(v1 + 5440) = 0; *(_BYTE *)(v1 + 5425) = 0; *(_DWORD *)(v1 + 4156) = 3; *(_DWORD *)(v1 + 5436) = v4; LOBYTE(v5) = sub_67BF50((float *)v1); } if ( *(_BYTE *)(v1 + 5412) && *(_DWORD *)(v1 + 4156) == 3 ) { v6 = *(_DWORD *)(v1 + 5420); if ( v6 >= *(_DWORD *)(v1 + 5416) ) { v8 = *(_BYTE *)(v1 + 5424) == 0; *(_BYTE *)(v1 + 5412) = 0; if ( v8 ) { v9 = *(_DWORD *)(v1 + 5432); v10 = *(_DWORD *)(v1 + 5436); *(_DWORD *)(v1 + 4132) = *(_DWORD *)(v1 + 5428); *(_DWORD *)(v1 + 4136) = v9; *(_DWORD *)(v1 + 4140) = v10; LOBYTE(v5) = sub_67BF50((float *)v1); } } else { v7 = (_DWORD *)(v1 + 4 * (3 * v6 + 1053)); *(_DWORD *)(v1 + 4156) = 1; *(_DWORD *)(v1 + 4132) = *v7; *(_DWORD *)(v1 + 4136) = v7[1]; v5 = v7[2]; ++*(_DWORD *)(v1 + 5440); *(_DWORD *)(v1 + 4140) = v5; *(_DWORD *)(v1 + 5420) = v6 + 1; } } return v5; } //----- (0067C150) -------------------------------------------------------- int __thiscall sub_67C150(int this) { int v1; // esi int v2; // eax float v3; // ST1C_4 int v4; // ecx int v5; // edx float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST04_4 float v10; // ST08_4 double v11; // st7 float v12; // ST0C_4 float v13; // ST04_4 float v14; // ST08_4 float v15; // ST0C_4 float v16; // ST1C_4 float v17; // ST1C_4 int v18; // ecx int v19; // edx int result; // eax int v21; // ecx int v22; // edx v1 = this; v2 = *(_DWORD *)(this + 4172); v3 = *(float *)(this + 4148); v4 = *(_DWORD *)(this + 4176); v5 = *(_DWORD *)(v1 + 4180); *(_DWORD *)(v1 + 4160) = v2; *(_DWORD *)(v1 + 4164) = v4; *(_DWORD *)(v1 + 4168) = v5; v6 = *(float *)(v1 + 4196) * v3; v7 = *(float *)(v1 + 4200) * v3; v8 = v3 * *(float *)(v1 + 4204); v9 = *(float *)(v1 + 4160) + v6; v10 = *(float *)(v1 + 4164) + v7; v11 = *(float *)(v1 + 4168); *(float *)(v1 + 4132) = v9; *(float *)(v1 + 4136) = v10; v12 = v11 + v8; *(float *)(v1 + 4140) = v12; v13 = *(float *)(v1 + 4132) - *(float *)(v1 + 4184); v14 = *(float *)(v1 + 4136) - *(float *)(v1 + 4188); v15 = *(float *)(v1 + 4140) - *(float *)(v1 + 4192); v16 = v14 * v14 + v13 * v13 + v15 * v15; v17 = sqrt(v16); if ( *(float *)(v1 + 4208) <= (double)v17 ) { v18 = *(_DWORD *)(v1 + 4092); v19 = *(_DWORD *)(v1 + 4096); *(_DWORD *)(v1 + 4132) = *(_DWORD *)(v1 + 4088); *(_DWORD *)(v1 + 4136) = v18; *(_BYTE *)(v1 + 4100) = 1; *(_DWORD *)(v1 + 4140) = v19; } result = *(_DWORD *)(v1 + 4132); v21 = *(_DWORD *)(v1 + 4136); v22 = *(_DWORD *)(v1 + 4140); *(_DWORD *)(v1 + 4172) = result; *(_DWORD *)(v1 + 4176) = v21; *(_DWORD *)(v1 + 4180) = v22; return result; } //----- (0067C2B0) -------------------------------------------------------- char __thiscall sub_67C2B0(float *this) { float *v1; // esi int *v2; // eax double v3; // st7 float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v8; // [esp+14h] [ebp-10h] float v9; // [esp+18h] [ebp-Ch] float v10; // [esp+1Ch] [ebp-8h] float v11; // [esp+20h] [ebp-4h] v1 = this; v2 = (int *)(*(int (__thiscall **)(_DWORD *))(*((_DWORD *)this + 397) + 48))((_DWORD *)this + 397); v8 = *(float *)v2; v3 = v8 - v1[1040]; v9 = *((float *)v2 + 1); v4 = v3; v10 = *((float *)v2 + 2); v5 = v9 - v1[1041]; v6 = v10 - v1[1042]; v11 = v5 * v5 + v4 * v4 + v6 * v6; v11 = sqrt(v11); if ( v1[1037] > (double)v11 ) { v11 = v11 - v1[1037]; v11 = fabs(v11); if ( v11 >= 1.0 ) return 0; } (*(void (__thiscall **)(_DWORD *, float *))(*((_DWORD *)v1 + 397) + 40))((_DWORD *)v1 + 397, &v8); return 1; } //----- (0067C390) -------------------------------------------------------- bool __thiscall sub_67C390(float *this) { float *v1; // esi float *v2; // eax float v3; // ST04_4 float v4; // ST08_4 float v5; // ST0C_4 float v6; // ST1C_4 float v7; // ST1C_4 float v8; // ST1C_4 bool result; // al float v10; // [esp+1Ch] [ebp-4h] v1 = this; v2 = (float *)(*(int (__thiscall **)(_DWORD *))(*((_DWORD *)this + 397) + 48))((_DWORD *)this + 397); v3 = *v2 - v1[1046]; v4 = v2[1] - v1[1047]; v5 = v2[2] - v1[1048]; v6 = v4 * v4 + v3 * v3 + v5 * v5; v10 = sqrt(v6); result = 1; if ( v1[1052] > (double)v10 ) { v7 = v10 - v1[1052]; v8 = fabs(v7); if ( v8 >= 1.0 ) result = 0; } return result; } //----- (0067C450) -------------------------------------------------------- bool __thiscall sub_67C450(void *this, float *a2) { int v2; // esi float *v3; // eax float v4; // ST04_4 float v5; // ST08_4 float v6; // ST0C_4 double v7; // st7 float v9; // [esp+10h] [ebp-4h] float v10; // [esp+1Ch] [ebp+8h] float v11; // [esp+1Ch] [ebp+8h] float v12; // [esp+1Ch] [ebp+8h] v2 = (int)this; v3 = (float *)sub_693030(byte_ADB468); v4 = *v3 - *a2; v5 = v3[1] - a2[1]; v6 = v3[2] - a2[2]; v10 = v4 * v4 + v5 * v5 + v6 * v6; v11 = sqrt(v10); v9 = v11; if ( sub_651680(v2) ) v7 = *(float *)(v2 + 1496) + 500.0; else v7 = *(float *)(v2 + 1496); v12 = v7; return v9 < (double)v12; } //----- (0067C4F0) -------------------------------------------------------- char __thiscall sub_67C4F0(_DWORD *this, char a2, __int16 a3) { _DWORD *v3; // ebx int v4; // esi __int16 *v5; // esi char *v6; // eax int v7; // esi unsigned __int16 v8; // di bool v9; // zf void *v10; // eax unsigned __int16 *v11; // esi int v12; // eax char *v13; // edi char *v15; // [esp+Ch] [ebp-78h] int v16; // [esp+10h] [ebp-74h] signed int v17; // [esp+14h] [ebp-70h] int v18; // [esp+14h] [ebp-70h] char v19; // [esp+18h] [ebp-6Ch] char v20; // [esp+21h] [ebp-63h] __int16 v21; // [esp+7Ch] [ebp-8h] char v22; // [esp+7Eh] [ebp-6h] v3 = this; this[1013] = 0; v4 = sub_685140(&byte_ADA230); v16 = 0; if ( v4 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) == 5 ) { v5 = (__int16 *)(v4 + 8); qmemcpy(&v19, v5, 0x64u); v5 += 50; v21 = *v5; v6 = &v20; v22 = *((_BYTE *)v5 + 2); v15 = &v20; v7 = (int)v3 + 4034; v17 = 3; do { v8 = *(_WORD *)v6; if ( *(_WORD *)v6 != -1 ) { ++v16; *(_BYTE *)(v7 - 2) = sub_74CBD0(dword_B9DE68, v8, *(_DWORD *)(v6 + 2) & 0xFFFFFFF); v6 = v15; *(_WORD *)v7 = v8; *(_BYTE *)(v7 + 2) = 2; v7 += 6; } v6 += 6; v9 = v17-- == 1; v15 = v6; } while ( !v9 ); } v3[1013] = v16; if ( a2 != 10 ) return 1; v3[43] = 10; if ( a3 == -1 ) { sub_67C4F0(v3, 0, 0); *((_BYTE *)v3 + 2957) |= 0xC0u; sub_650B90(v3, 0); v10 = sub_74CD00(&unk_AD8C08, 0, 0); sub_650910((char *)v3, (int)v10); } v18 = 0; if ( v3[1013] <= 0u ) return 1; v11 = (unsigned __int16 *)((char *)v3 + 4034); while ( 1 ) { v12 = *v11; if ( (_WORD)v12 == a3 ) break; LABEL_15: v11 += 3; if ( (unsigned int)++v18 >= v3[1013] ) return 1; } v13 = sub_4DC370(v12, *((unsigned __int8 *)v11 - 2)); if ( v13 ) { *((_BYTE *)v11 + 2) = 3; *((_BYTE *)v3 + 2957) = *((_BYTE *)v3 + 2957) & 0x3F | 0x80; sub_650B90(v3, 1); sub_650910((char *)v3, (int)v13); goto LABEL_15; } return 0; } // ADA230: using guessed type char byte_ADA230; //----- (0067C680) -------------------------------------------------------- void __thiscall sub_67C680(float *this) { float *v1; // esi float *v2; // eax float *v3; // edi float *v4; // eax float v5; // ebx double v6; // st7 double v7; // st7 float v8; // edi double v9; // st7 double v10; // st7 char v11; // cl double v12; // st7 float v13; // [esp+Ch] [ebp-54h] float v14; // [esp+10h] [ebp-50h] float v15; // [esp+14h] [ebp-4Ch] float v16; // [esp+18h] [ebp-48h] float v17; // [esp+1Ch] [ebp-44h] float v18; // [esp+20h] [ebp-40h] int v19; // [esp+24h] [ebp-3Ch] int v20; // [esp+28h] [ebp-38h] int v21; // [esp+2Ch] [ebp-34h] float v22; // [esp+30h] [ebp-30h] float v23; // [esp+34h] [ebp-2Ch] float v24; // [esp+38h] [ebp-28h] float v25; // [esp+3Ch] [ebp-24h] int v26; // [esp+40h] [ebp-20h] int v27; // [esp+44h] [ebp-1Ch] float v28; // [esp+48h] [ebp-18h] float v29; // [esp+4Ch] [ebp-14h] float v30; // [esp+50h] [ebp-10h] int v31; // [esp+54h] [ebp-Ch] float v32; // [esp+58h] [ebp-8h] char v33; // [esp+5Fh] [ebp-1h] v1 = this; v2 = (float *)*((_DWORD *)this + 1026); if ( v2 && v2 != this && ((sub_65B8B0(this, 0, (unsigned int *)&v31, 0), v31 == 100000) || v31 == 200000) ) { (*(void (__thiscall **)(float *, float *))(*(_DWORD *)v1 + 220))(v1, &v13); v3 = (float *)(*(int (__thiscall **)(float *))(*(_DWORD *)v1 + 196))(v1); v4 = (float *)(*(int (**)(void))(**((_DWORD **)v1 + 1026) + 196))(); v22 = *v4 - *v3; v23 = v4[1] - v3[1]; v5 = v23; v6 = v4[2]; v17 = v23; v7 = v6 - v3[2]; v8 = v22; v16 = v22; v24 = v7; v18 = v24; v32 = 0.5 * flt_BA45B4; v29 = 65.0 * flt_BA45B4 / 180.0; v28 = flt_BA45B4 * 25.0 / 180.0; v25 = 0.0; *(float *)&v26 = 0.0; *(float *)&v27 = 1.0; sub_443140(&v25, (float *)&v19, &v16); sub_443140((float *)&v19, &v16, &v25); v33 = 0; v30 = sub_8CF210(v13, v14, v15, v8, v5, v24, SLOBYTE(v25), v26, v27, 0); v9 = v30; v30 = fabs(v30); if ( v29 < (double)v30 ) { v10 = 0.5; } else { v33 = 1; v10 = (v9 + v32) / flt_BA45B4; } v11 = v19; v1[474] = v10; v29 = sub_8CF210(v8, v5, v24, v16, v17, v18, v11, v20, v21, 0); v12 = v29; v29 = fabs(v29); if ( v28 >= (double)v29 && v33 ) { v28 = (v12 + v32) / flt_BA45B4; v1[475] = v28 * 0.5; sub_65C690(v1); return; } } else { v1[474] = 0.5; } v1[475] = 0.25; sub_65C690(v1); } // BA45B4: using guessed type float flt_BA45B4; //----- (0067C8C0) -------------------------------------------------------- signed int __stdcall sub_67C8C0(unsigned __int16 *a1) { signed int result; // eax int v2; // edi int v3; // esi int v4; // ecx int v5; // eax int v6; // eax if ( !a1 ) return 0; if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)a1 + 32))(a1) ) goto LABEL_21; v2 = a1[471]; v3 = dword_ACDA48; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v2) ) goto LABEL_21; if ( (unsigned __int16)v2 > *(_WORD *)(v3 + 200) ) goto LABEL_21; v4 = *(_DWORD *)(v3 + 196); if ( !*(_DWORD *)(v4 + 4 * v2) ) goto LABEL_21; v5 = *(_DWORD *)(v4 + 4 * v2); if ( !v5 ) goto LABEL_21; v6 = *(_DWORD *)(v5 + 99); switch ( v6 ) { case 10: return 4; case 9: return 5; case 8: return 6; case 22: return 7; case 21: result = 8; break; default: LABEL_21: result = 0; break; } return result; } // ACDA48: using guessed type int dword_ACDA48; //----- (0067C980) -------------------------------------------------------- int __userpurge sub_67C980@(int a1@, double a2@, float *a3) { int v3; // esi float *v4; // eax float *v5; // eax int result; // eax v3 = a1; if ( *(_DWORD *)(a1 + 2924) ) { v4 = (float *)(*(int (**)(void))(**(_DWORD **)(a1 + 2924) + 208))(); } else { v5 = (float *)(*(int (__stdcall **)(const char *))(**(_DWORD **)(a1 + 700) + 72))("LookAtCamera"); if ( v5 ) { *a3 = v5[35]; a3[1] = v5[36]; result = *((_DWORD *)v5 + 37); *((_DWORD *)a3 + 2) = result; return result; } v4 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 208))(v3); } *a3 = *v4; a3[1] = v4[1]; a3[2] = v4[2]; result = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 672))(v3); a3[2] = a2 + a3[2]; return result; } //----- (0067CA20) -------------------------------------------------------- _DWORD *__thiscall sub_67CA20(_DWORD *this, unsigned int a2, unsigned int a3, int a4) { int v4; // esi _DWORD *v5; // ebx int *v6; // eax int v7; // eax int v8; // eax _WORD *v9; // eax v4 = dword_ACE8D0; v5 = this; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a4) ) { if ( (unsigned __int16)a4 <= *(_WORD *)(v4 + 200) ) { v6 = (int *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)a4); if ( *v6 ) { v7 = *v6; if ( v7 ) { v8 = *(_DWORD *)(v7 + 531); if ( v8 == 36 || v8 == 38 ) { v9 = (_WORD *)v5[541]; if ( v9 && *v9 != (_WORD)a4 ) (*(void (__thiscall **)(_DWORD *, signed int))(*v5 + 240))(v5, 1); } } } } } return sub_65F800((int)v5, a4, a2, a3, a4); } // ACE8D0: using guessed type int dword_ACE8D0; //----- (0067CAB0) -------------------------------------------------------- bool __thiscall sub_67CAB0(_DWORD *this) { _DWORD *v1; // esi bool result; // al _BYTE *v3; // ecx v1 = this; result = 0; if ( !sub_65B9D0(this, 500000) && !*((_BYTE *)v1 + 2496) && !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 48))(v1) ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 488))(v1) || (v3 = (_BYTE *)v1[731]) != 0 && sub_744000(v3) ) { result = 1; } } return result; } //----- (0067CB10) -------------------------------------------------------- char __thiscall sub_67CB10(_DWORD *this) { _DWORD *v1; // esi char result; // al _DWORD *v3; // ecx int v4; // ebx int v5; // eax _DWORD *v6; // ecx int v7; // eax _DWORD *v8; // ecx int v9; // eax _DWORD *v10; // ecx int v11; // eax _DWORD *v12; // ecx int v13; // eax int v14; // [esp+8h] [ebp-10h] int v15; // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] int v17; // [esp+14h] [ebp-4h] v1 = this; result = sub_662E50(this + 424); if ( result ) { sub_662F80(v1 + 424); v1[430] = v1[174]; v1[431] = v1; v3 = (_DWORD *)v1[540]; v4 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; if ( v3 ) { v5 = sub_64BA20(v3, "JumpStand_JumpStart"); if ( v5 ) v14 = *(_DWORD *)(v5 + 108); } v6 = (_DWORD *)v1[540]; if ( v6 ) { v7 = sub_64BA20(v6, "JumpRun_JumpStart"); if ( v7 ) v15 = *(_DWORD *)(v7 + 108); } v8 = (_DWORD *)v1[540]; if ( v8 ) { v9 = sub_64BA20(v8, "Jump_DownHill"); if ( v9 ) v16 = *(_DWORD *)(v9 + 108); } v10 = (_DWORD *)v1[540]; if ( v10 ) { v11 = sub_64BA20(v10, "JumpStand_Land"); if ( v11 ) v17 = *(_DWORD *)(v11 + 108); } v12 = (_DWORD *)v1[540]; if ( v12 ) { v13 = sub_64BA20(v12, "JumpRun_Land"); if ( v13 ) v4 = *(_DWORD *)(v13 + 108); } result = sub_662ED0(v1 + 424, v14, v15, v16, v17, v4); } return result; } //----- (0067CC20) -------------------------------------------------------- bool __thiscall sub_67CC20(_DWORD *this) { return this[11] <= 0 && !this[7] && this[8] <= 0; } //----- (0067CC40) -------------------------------------------------------- bool __thiscall sub_67CC40(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi bool result; // al int v4; // eax v2 = this; if ( !a2 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*a2 + 32))(a2) && sub_650CF0(a2) && (sub_65B9D0(a2, 500000) || *(_DWORD *)(sub_650CF0(a2) + 99) == 12 || *(_DWORD *)(sub_650CF0(a2) + 99) == 24 || *(_DWORD *)(sub_650CF0(a2) + 99) == 27 || *(_DWORD *)(sub_650CF0(a2) + 99) == 18 || *(_DWORD *)(sub_650CF0(a2) + 99) == 19 || *(_DWORD *)(sub_650CF0(a2) + 99) == 13) || (v4 = sub_650CF0(v2)) != 0 && *(_DWORD *)(v4 + 99) == 17 || *((_DWORD *)dword_AD8EBC + 11) > 0 ) { result = 0; } else { result = sub_6515E0(a2) == 0; } return result; } //----- (0067CD10) -------------------------------------------------------- int __thiscall sub_67CD10(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; if ( this[1030] != 7 ) { if ( this[476] == 4 ) sub_6DB7F0((int)byte_ADB468, 0xFFFF, 255, 0); result = sub_65B7F0(v1); } return result; } //----- (0067CD50) -------------------------------------------------------- void __thiscall sub_67CD50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; if ( this[1030] != 7 ) { if ( this[476] == 4 && sub_6DB7F0((int)byte_ADB468, 0xFFFF, 255, 0) == 1 ) { v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4BEB20(v2); } sub_65B7F0(v1); } } //----- (0067CDA0) -------------------------------------------------------- char __thiscall sub_67CDA0(_DWORD **this, int a2) { _DWORD **v2; // edi char result; // al int v4; // eax int v5; // eax _DWORD *v6; // esi int v7; // ebx v2 = this; result = sub_65A860(this, 1, a2); if ( result ) { v4 = (*(int (__stdcall **)(void *))(*v2[175] + 72))(&unk_9F42E0); v5 = sub_402BA0((int)dword_BA455C, v4); v6 = v2[1021]; v7 = v5; if ( v6 != (_DWORD *)v5 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); v2[1021] = (_DWORD *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } result = v2[1021] != 0; } return result; } //----- (0067CE30) -------------------------------------------------------- void __thiscall sub_67CE30(int this) { int v1; // esi int v2; // eax _DWORD *v3; // eax float v4; // ST10_4 float v5; // ST14_4 float v6; // ST18_4 float v7; // ST18_4 float v8; // ST18_4 int v9; // ecx int v10; // edx int v11; // eax float *v12; // ecx float v13; // ST10_4 float v14; // ST14_4 double v15; // st7 float v16; // ST18_4 bool v17; // zf int v18; // eax int v19; // ecx int v20; // edx int v21; // eax int v22; // eax int v23; // edx int v24; // eax int v25; // ecx int v26; // eax int v27; // edx _DWORD *v28; // eax int v29; // eax int v30; // edi float v31; // ST18_4 int v32; // ST00_4 _DWORD *v33; // eax v1 = this; v2 = *(_DWORD *)(this + 4156); if ( v2 == 1 ) { v3 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)(this + 1588) + 56))(this + 1588); *(_DWORD *)(v1 + 4184) = *v3; *(_DWORD *)(v1 + 4188) = v3[1]; *(float *)(v1 + 4192) = 0.0; v4 = *(float *)(v1 + 4184) - *(float *)(v1 + 4132); v5 = *(float *)(v1 + 4188) - *(float *)(v1 + 4136); v6 = *(float *)(v1 + 4192) - *(float *)(v1 + 4140); v7 = v5 * v5 + v4 * v4 + v6 * v6; v8 = sqrt(v7); v9 = *(_DWORD *)(v1 + 4132); v10 = *(_DWORD *)(v1 + 4136); *(float *)(v1 + 4208) = v8; v11 = *(_DWORD *)(v1 + 4140); *(_DWORD *)(v1 + 4088) = v9; *(_DWORD *)(v1 + 4092) = v10; *(_DWORD *)(v1 + 4096) = v11; v12 = (float *)(v1 + 4196); v13 = *(float *)(v1 + 4132) - *(float *)(v1 + 4184); v14 = *(float *)(v1 + 4136) - *(float *)(v1 + 4188); v15 = *(float *)(v1 + 4140) - *(float *)(v1 + 4192); *v12 = v13; v12[1] = v14; v16 = v15; v12[2] = v16; sub_4430B0((float *)(v1 + 4196)); v17 = *(_DWORD *)(v1 + 4120) == 4; v18 = *(_DWORD *)(v1 + 4184); v19 = *(_DWORD *)(v1 + 4188); v20 = *(_DWORD *)(v1 + 4192); *(_DWORD *)(v1 + 4160) = v18; *(_DWORD *)(v1 + 4132) = v18; *(_DWORD *)(v1 + 4172) = v18; *(_DWORD *)(v1 + 4164) = v19; *(_DWORD *)(v1 + 4136) = v19; *(_DWORD *)(v1 + 4176) = v19; *(_DWORD *)(v1 + 4168) = v20; *(_DWORD *)(v1 + 4140) = v20; *(_DWORD *)(v1 + 4180) = v20; *(_BYTE *)(v1 + 4100) = 0; if ( v17 ) *(_DWORD *)(v1 + 4120) = 1; if ( !*(_DWORD *)(v1 + 4120) ) *(_DWORD *)(v1 + 4120) = 1; *(_DWORD *)(v1 + 4156) = 2; sub_67C150(v1); } else if ( v2 == 2 ) { if ( sub_67C390((float *)this) ) { v21 = *(_DWORD *)(v1 + 5420) + 1; *(_DWORD *)(v1 + 4156) = 3; if ( v21 >= *(_DWORD *)(v1 + 5416) ) { v22 = *(_DWORD *)(v1 + 4152); if ( v22 != 1 ) { if ( v22 == 3 ) *(_BYTE *)(v1 + 4144) = 1; sub_67B660((_DWORD *)v1, v22); v23 = *(_DWORD *)(v1 + 4092); v24 = *(_DWORD *)(v1 + 4096); *(_DWORD *)(v1 + 4132) = *(_DWORD *)(v1 + 4088); *(_DWORD *)(v1 + 4136) = v23; *(_DWORD *)(v1 + 4140) = v24; } } } else if ( sub_67C2B0((float *)v1) ) { if ( *(_DWORD *)(v1 + 4108) ) { v25 = *(_DWORD *)(v1 + 4104); v26 = *(_DWORD *)(v1 + 5432); *(_DWORD *)(v1 + 4132) = *(_DWORD *)(v1 + 5428); v27 = *(_DWORD *)(v1 + 5436); *(_DWORD *)(v1 + 4136) = v26; *(_DWORD *)(v1 + 5440) = 0; *(_DWORD *)(v1 + 4156) = 3; *(_DWORD *)(v1 + 4140) = v27; if ( v25 ) { v28 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)v25 + 196))(); *(_DWORD *)(v1 + 4132) = *v28; *(_DWORD *)(v1 + 4136) = v28[1]; *(_DWORD *)(v1 + 4140) = v28[2]; } sub_67BF50((float *)v1); } else { sub_67C150(v1); (*(void (__thiscall **)(int, int))(*(_DWORD *)(v1 + 1588) + 40))(v1 + 1588, v1 + 4160); if ( *(_DWORD *)(v1 + 4120) == 4 ) *(_DWORD *)(v1 + 4120) = 1; if ( !*(_DWORD *)(v1 + 4120) ) *(_DWORD *)(v1 + 4120) = 1; } } else { v29 = *(_DWORD *)(v1 + 4152); if ( v29 == 3 || v29 == 4 ) { v30 = *(_DWORD *)(v1 + 4104); if ( v30 ) { v31 = sub_4E17C0((void *)v1, *(_DWORD *)(v1 + 4104)); (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 296))(v1, v30); if ( v31 + 50.0 - 10.0 > v31 ) { v32 = *(_DWORD *)(v1 + 4152); *(_BYTE *)(v1 + 4144) = 1; sub_67B660((_DWORD *)v1, v32); v33 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)v1 + 196))(); *(_DWORD *)(v1 + 4132) = *v33; *(_DWORD *)(v1 + 4136) = v33[1]; *(_DWORD *)(v1 + 4140) = v33[2]; } } } } } } //----- (0067D1B0) -------------------------------------------------------- char __thiscall sub_67D1B0(int this, int a2) { int v2; // edi void *v3; // eax unsigned __int16 v4; // ax _BYTE *v6; // eax _BYTE *v7; // esi char *v8; // edx char v9; // cl char v10; // cl unsigned int v11; // ebx _BYTE *v12; // esi char v13; // cl void *v14; // eax unsigned int v15; // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] v2 = this; *(_WORD *)(this + 2956) = -16384; sub_650B90((_BYTE *)this, 0); v3 = sub_74CD00(&unk_AD8C08, 0, 0); sub_650910((char *)v2, (int)v3); *(_DWORD *)(v2 + 4028) = 1; v4 = *(_WORD *)(a2 + 4); v16 = 0; if ( v4 > 0x218u ) return 0; v15 = 0; if ( v4 > 0u ) { v6 = (_BYTE *)(v2 + 2957); v7 = (_BYTE *)(a2 + 7); v8 = (char *)(v2 + 2956); do { v8[2] = *(v7 - 1); v9 = *v7 ^ v6[2]; ++v16; v6 += 2; v8 += 2; *v6 ^= v9 & 0x3F; *v6 = *v7 ^ (*v6 ^ *v7) & 0x3F; if ( (*v7 & 0xC0) == -64 && *(v7 - 1) != 10 ) *(_BYTE *)(v2 + 2957) = *(_BYTE *)(v2 + 2957) & 0x3F | 0x80; v10 = *v8; if ( *v8 && v10 != 10 ) { if ( (*(_BYTE *)a2 != v10 || *(_BYTE *)(a2 + 1) != (*v6 & 0x3F) || (*v6 & 0xC0) != -64) && (*v7 & 0xC0) == -64 ) *v6 = *v6 & 0x3F | 0x80; } else { --v16; v8 -= 2; v6 -= 2; } v7 += 2; ++v15; } while ( v15 < *(unsigned __int16 *)(a2 + 4) ); } *(_DWORD *)(v2 + 4028) += v16; v11 = 0; if ( *(_DWORD *)(v2 + 4028) != 1 ) { v12 = (_BYTE *)(v2 + 2957); do { v13 = v12[2]; v12 += 2; if ( (v13 & 0xC0) == -64 ) { *(_BYTE *)(v2 + 2957) = *(_BYTE *)(v2 + 2957) & 0x3F | 0x80; sub_650B90((_BYTE *)v2, 1); v14 = sub_74CD00(&unk_AD8C08, *(v12 - 1), *v12 & 0x3F); sub_650910((char *)v2, (int)v14); } ++v11; } while ( v11 < *(_DWORD *)(v2 + 4028) - 1 ); } sub_67C4F0((_DWORD *)v2, *(_BYTE *)a2, *(_WORD *)(a2 + 2)); return 1; } //----- (0067D370) -------------------------------------------------------- char __thiscall sub_67D370(_DWORD *this, _BYTE *a2) { _DWORD *v2; // edi char v3; // bl const CHAR *v4; // eax int v5; // edi bool v6; // bl char result; // al _DWORD *v8; // [esp+Ch] [ebp-8h] char v9; // [esp+13h] [ebp-1h] v2 = this; v8 = this; v3 = 1; if ( sub_64F900(this, 392) == 1 && a2 ) { v4 = sub_40A910(-1238683870); return sub_6C29C0(25, (int)v4); } v9 = 1; switch ( sub_652070(v2) ) { case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v5 = v2[1026]; if ( v5 ) { if ( a2 ) { v6 = (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)a2 + 32))(a2) || a2[2680]; result = sub_650B20(a2); if ( result || (result = sub_6516C0(a2)) != 0 || (result = sub_651680((int)a2)) != 0 ) v6 = 0; v9 = v6; if ( *(_WORD *)(v5 + 548) != *((_WORD *)a2 + 274) ) result = sub_6C29C0(76, (int)&v9); goto LABEL_17; } } else if ( a2 ) { v3 = (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)a2 + 32))(a2) || a2[2680] ? 1 : 0; if ( sub_650B20(a2) || sub_6516C0(a2) || sub_651680((int)a2) ) v3 = 0; } v9 = v3; result = sub_6C29C0(76, (int)&v9); LABEL_17: v2 = v8; goto LABEL_18; default: v9 = 0; result = sub_6C29C0(76, (int)&v9); LABEL_18: if ( !a2 ) { v2[1026] = 0; return result; } result = dword_ADB4F8 - 3; if ( (unsigned int)(dword_ADB4F8 - 3) <= 3 ) { v4 = sub_40A910(19356529); return sub_6C29C0(25, (int)v4); } v2[1026] = a2; return result; } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (0067D510) -------------------------------------------------------- int __thiscall sub_67D510(_DWORD *this) { _DWORD *v1; // esi int result; // eax char v3; // [esp+7h] [ebp-1h] v1 = this; result = sub_650CF0(this); if ( result && *(_DWORD *)(result + 99) == 17 ) { sub_64F900(v1, 392); v3 = 1; switch ( sub_652070(v1) ) { case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v3 = 1; result = sub_6C29C0(76, (int)&v3); break; default: v3 = 0; result = sub_6C29C0(76, (int)&v3); break; } v1[1026] = 0; } return result; } //----- (0067D5B0) -------------------------------------------------------- void __thiscall sub_67D5B0(_DWORD *this) { int v1; // eax int v2; // esi _BYTE *v3; // edi _BYTE *v4; // ebx unsigned __int8 v5; // bl volatile LONG *v6; // edi int v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // ebx float **v9; // esi float *v10; // eax int v11; // ST04_4 int v12; // ST08_4 int v13; // ST0C_4 int v14; // ST10_4 const CHAR *v15; // eax int v16; // [esp+14h] [ebp-18h] _DWORD *v17; // [esp+24h] [ebp-8h] int v18; // [esp+28h] [ebp-4h] v17 = this; v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = v1; if ( v1 ) { sub_590390(*(_DWORD *)(v1 + 740), 0); sub_537470(*(char **)(v2 + 716)); v3 = *(_BYTE **)(v2 + 952); v4 = *(_BYTE **)(v2 + 960); if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v3 + 260))(*(_DWORD *)(v2 + 952)) ) { if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 260))(v4) ) { v5 = sub_597590(v4); if ( (unsigned __int8)sub_59DC60(v3) < v5 ) sub_59DCD0((int)v3); } } v6 = *(volatile LONG **)(v2 + 940); if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v6 + 260))(*(_DWORD *)(v2 + 940)) ) sub_5C21D0(v6); v7 = *sub_49F490(&v18); if ( v18 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v18; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( *(_BYTE *)(v7 + 52) ) { *(_BYTE *)(v7 + 52) = 0; v9 = *(float ***)(v2 + 1220); if ( v9 ) { sub_5E9180(v9); v10 = sub_419EE0((float *)&v16, 0xFFu, 0x90u, 0, 0xFFu); v11 = *(_DWORD *)v10; v12 = *((_DWORD *)v10 + 1); v13 = *((_DWORD *)v10 + 2); v14 = *((_DWORD *)v10 + 3); v15 = sub_40A910(1011971465); sub_5E9030(v9, (int)v15, v11, v12, v13, v14, 0, 3.0); } } } sub_654840(v17); } //----- (0067D710) -------------------------------------------------------- int __thiscall sub_67D710(float *this, float a2) { float *v2; // esi int v3; // eax _DWORD *v4; // eax int v5; // eax int result; // eax int v7; // [esp+0h] [ebp-8h] v2 = this; sub_657DC0((int)this, a2); sub_67C060((int)v2); sub_67CE30((int)v2); if ( (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 440))(v2) == 2 ) { if ( !byte_AD91E4 ) { sub_8D06A0(v2 + 1014, flt_ACCFCC); v2[1019] = 3.0; byte_AD91E4 = 1; } if ( sub_8D0630(v2 + 1014, a2) ) { v3 = (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 448))(v2); if ( (unsigned __int16)sub_6536D0(v2, v3) == -1 ) { LOBYTE(v7) = 0; } else { v5 = (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 448))(v2); v7 = (unsigned __int8)sub_6536D0(v2, v5); } v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4B7810(v4, v7); } } else { byte_AD91E4 = 0; } if ( *((_BYTE *)v2 + 5469) && sub_6BEAC0(*((unsigned __int16 *)v2 + 2735)) ) *((_BYTE *)v2 + 5469) = 0; result = *((_DWORD *)v2 + 731); if ( result ) *(_BYTE *)(result + 2992) = *((_BYTE *)v2 + 5412); return result; } // ACCFCC: using guessed type float flt_ACCFCC; // AD91E4: using guessed type char byte_AD91E4; //----- (0067D830) -------------------------------------------------------- void __thiscall sub_67D830(int this) { int v1; // esi int v2; // ecx int v3; // edx v1 = this; if ( *(_BYTE *)(this + 5425) ) { v2 = *(_DWORD *)(this + 4136); v3 = *(_DWORD *)(v1 + 4140); *(_DWORD *)(v1 + 5440) = 0; *(_BYTE *)(v1 + 5425) = 0; *(_DWORD *)(v1 + 5428) = *(_DWORD *)(v1 + 4132); *(_DWORD *)(v1 + 5432) = v2; *(_DWORD *)(v1 + 4156) = 3; *(_DWORD *)(v1 + 5436) = v3; sub_67BF50((float *)v1); } sub_67C060(v1); sub_67CE30(v1); } //----- (0067D890) -------------------------------------------------------- void __thiscall sub_67D890(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int *v4; // eax int v5; // edi char v6; // cl unsigned __int8 v7; // bl int v8; // esi _DWORD *v9; // eax int v10; // esi int v11; // eax int v12; // eax int v13; // eax unsigned __int8 *v14; // eax int v15; // ecx void (__thiscall *v16)(_DWORD *, _DWORD); // edx char v17; // [esp+4h] [ebp-1Ch] int v18; // [esp+10h] [ebp-10h] int v19; // [esp+1Ch] [ebp-4h] v2 = this; sub_65B8B0(this, 0, (unsigned int *)&v19, 0); if ( (v19 == 100000 || v19 == 800000 || v2[476] == 4) && !sub_662E50(v2 + 424) ) { if ( v2[476] == 2 ) { (*(void (__thiscall **)(_DWORD *))(*v2 + 420))(v2); return; } v3 = dword_ACB6C4; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB6C4 + 16))(dword_ACB6C4, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { v4 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( *v4 ) { v5 = *v4; if ( *v4 ) { if ( v2[476] != 4 || !dword_ADB4F8 ) { v12 = *(unsigned __int16 *)(v5 + 65); if ( (_WORD)v12 == -1 ) { v2[478] = a2; v13 = *(_DWORD *)(v5 + 105); } else { v14 = (unsigned __int8 *)sub_4B0DC0(v12); if ( !v14 ) return; v15 = v2[174]; if ( !v15 ) return; if ( *(_DWORD *)(v14 + 109) == *(_DWORD *)(v15 + 64) ) { v16 = *(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 460); v2[478] = a2; v16(v2, *(_DWORD *)(v5 + 105)); return; } v2[478] = *v14; v13 = *(_DWORD *)(v14 + 105); } (*(void (__thiscall **)(_DWORD *, int))(*v2 + 460))(v2, v13); return; } v6 = *(_BYTE *)v5; v7 = dword_ADB61C; v18 = dword_ADB618; v8 = sub_4EA9F0(*(_WORD *)dword_ADB620, v6); if ( v8 ) { v9 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4EA7F0(v9, (int)&v17); if ( (_WORD)v18 == -1 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD8EBC + 436))(0); v10 = *(_DWORD *)dword_AD8EBC; v11 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); (*(void (__thiscall **)(char *, int))(v10 + 192))(dword_AD8EBC, v11); } else { sub_6DC3F0((int)byte_ADB468, (int)&v17, v7, *(unsigned __int8 *)(v8 + 3)); } } } } } } } } // ACB6C4: using guessed type int dword_ACB6C4; // ADB4F8: using guessed type int dword_ADB4F8; // ADB618: using guessed type int dword_ADB618; // ADB61C: using guessed type int dword_ADB61C; // ADB620: using guessed type int dword_ADB620; //----- (0067DA80) -------------------------------------------------------- int __thiscall sub_67DA80(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // edi _DWORD *v6; // eax int v7; // eax char *v8; // eax int v9; // edi char *v10; // eax int v11; // eax char v12; // cl char *v13; // eax char *v14; // eax int v15; // ecx char v16; // al char *v17; // eax char *v18; // eax _BYTE *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax _DWORD *v22; // eax _DWORD *v23; // eax _DWORD *v24; // eax char v25; // al _DWORD *v26; // eax _DWORD *v27; // edi int v28; // esi int v29; // [esp-14h] [ebp-20h] int v30; // [esp-10h] [ebp-1Ch] int v31; // [esp-Ch] [ebp-18h] int v32; // [esp-8h] [ebp-14h] signed int v33; // [esp-4h] [ebp-10h] v2 = this; if ( !a2 || (_DWORD *)a2 == this ) return 0; if ( *(_BYTE *)(a2 + 1936) == 5 ) return 3; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 32))(a2) ) { v3 = *(unsigned __int16 *)(a2 + 942); v33 = 1; v4 = sub_49F370(v3); if ( !v4 ) goto LABEL_53; if ( sub_651680(a2) ) return (*(_BYTE *)(v4 + 103) == 2) + 1; if ( *(_DWORD *)(v4 + 99) != 27 ) { LABEL_53: if ( *(_DWORD *)(v4 + 99) == 24 ) return 1; v33 = *(unsigned __int16 *)(a2 + 548); v6 = sub_6D14F0(); v7 = sub_4A3ED0(v6, v33); if ( v7 ) { if ( v2[169] == v7 ) return 1; } return 3; } return 0; } if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 664))(a2) ) return 9; v8 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); sub_416970((char *)&v29, v8); v9 = sub_6C11C0(&dword_B9DC70, v29, v30, v31, v32, v33); v10 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); sub_416970((char *)&v29, v10); v11 = sub_718D10(&dword_B9E560, v29, v30, v31, v32, v33); if ( !v9 && !v11 && *((_BYTE *)v2 + 4147) & 2 || *(_DWORD *)(a2 + 44) > 0 ) return 3; v12 = *((_BYTE *)v2 + 4147); if ( !(v12 & 1) ) { v25 = *((_BYTE *)v2 + 2952); if ( v25 == 2 || !(v12 & 4) || v25 == *(_BYTE *)(a2 + 2952) ) goto LABEL_47; return 3; } v13 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); sub_416970((char *)&v29, v13); if ( sub_6C11C0(&dword_B9DC70, v29, v30, v31, v32, v33) || (v14 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2), sub_416970((char *)&v29, v14), sub_718D10(&dword_B9E560, v29, v30, v31, v32, v33)) ) { v17 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); sub_416970((char *)&v29, v17); if ( !sub_6C11C0(&dword_B9DC70, v29, v30, v31, v32, v33) ) { v18 = (char *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); sub_416970((char *)&v29, v18); if ( !sub_718D10(&dword_B9E560, v29, v30, v31, v32, v33) ) goto LABEL_47; } if ( byte_B6712C != 4 ) goto LABEL_47; v19 = (_BYTE *)sub_715490(); if ( sub_715130(v19) ) { if ( *(_BYTE *)(a2 + 680) != 1 ) goto LABEL_36; v33 = *(_DWORD *)(a2 + 676); v20 = (_DWORD *)sub_715490(); if ( !sub_717580(v20, v33) ) { if ( *(_BYTE *)(a2 + 680) != 1 ) { LABEL_36: v33 = *(_DWORD *)(a2 + 676); v21 = (_DWORD *)sub_715490(); if ( sub_717580(v21, v33) ) return 3; } LABEL_47: v26 = (_DWORD *)sub_6D3800(); v27 = v26; if ( !v26 ) return 0; v28 = *(_DWORD *)(a2 + 676); if ( !sub_6D3280(v26, v28) && !sub_6D3340(v27, v28) ) return 0; return 3; } } else { v33 = *(_DWORD *)(a2 + 676); v22 = (_DWORD *)sub_6D3800(); if ( !sub_6D3250(v22, v33) ) goto LABEL_47; if ( *(_BYTE *)(a2 + 680) != 1 || (v33 = *(_DWORD *)(a2 + 676), v23 = (_DWORD *)sub_6D3800(), !sub_6D3280(v23, v33)) ) { if ( !*(_BYTE *)(a2 + 680) ) { v33 = *(_DWORD *)(a2 + 676); v24 = (_DWORD *)sub_6D3800(); if ( sub_6D3280(v24, v33) ) return 3; } goto LABEL_47; } } return 3; } if ( byte_B6712C != 4 ) return 3; v15 = *(_DWORD *)(a2 + 676); if ( !v15 ) return 3; v16 = *(_BYTE *)(a2 + 680); if ( (v16 != 1 || *((_DWORD *)dword_AD8EBC + 169) != v15) && (v16 || *((_DWORD *)dword_AD8EBC + 169) != v15) ) return 3; return 0; } // B6712C: using guessed type char byte_B6712C; // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (0067DDD0) -------------------------------------------------------- char __thiscall sub_67DDD0(void *this) { int v1; // esi int (__thiscall *v2)(int); // eax char v3; // al int v4; // edx int (__thiscall *v5)(int); // eax char v6; // al _DWORD *v7; // eax _DWORD *v8; // edi _DWORD *v9; // ebx const char *v10; // eax int *v11; // eax char v13; // [esp+Bh] [ebp-1h] v1 = (int)this; (*(void (**)(void))(*(_DWORD *)this + 424))(); (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 340))(v1); sub_65CE60((_DWORD *)v1); *(_WORD *)(v1 + 2480) = -1; sub_65CE10((_DWORD *)v1); *(_WORD *)(v1 + 4128) = -1; *(_DWORD *)(v1 + 4120) = 0; *(_DWORD *)(v1 + 4124) = 0; *(_DWORD *)(v1 + 4152) = 0; *(_BYTE *)(v1 + 4144) = 0; sub_64F900((_DWORD *)v1, 392); v13 = 1; switch ( sub_652070((_BYTE *)v1) ) { case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v13 = 1; sub_6C29C0(76, (int)&v13); break; default: v13 = 0; sub_6C29C0(76, (int)&v13); break; } v2 = *(int (__thiscall **)(int))(*(_DWORD *)v1 + 48); *(_DWORD *)(v1 + 4104) = 0; *(_BYTE *)(v1 + 4116) = 0; v3 = v2(v1); v4 = *(_DWORD *)v1; v13 = v3; v5 = *(int (__thiscall **)(int))(v4 + 48); *(_BYTE *)(v1 + 1924) = 1; *(_DWORD *)(v1 + 1928) = 0; v6 = v5(v1); if ( v13 != v6 ) *(_BYTE *)(v1 + 1925) = 1; sub_64DE20((_DWORD *)(v1 + 84)); sub_64F980((_DWORD *)v1, 1); *(_BYTE *)(v1 + 2496) = 0; sub_650C60((_DWORD *)v1); *(_DWORD *)(v1 + 2924) = 0; sub_660580((float *)v1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v1 + 240))(v1, 1); sub_6C29C0(32, v1); v7 = sub_6D14F0(); sub_668390(v7); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v1 + 488))(v1) ) sub_65DC00((float *)v1); sub_6CB8A0(); v8 = (_DWORD *)dword_BA6B48; if ( dword_BA6B48 ) { do { v9 = (_DWORD *)v8[2]; v10 = (const char *)v9[2]; v8 = (_DWORD *)*v8; if ( v10 && !strncmp(v10, "MsgBox", 6u) ) { sub_4628C0(v9); sub_8F86A0(&unk_BA6B10, v9); } } while ( v8 ); } if ( dword_ACEABC ) *(_DWORD *)(dword_ACEABC + 20) = 2; *(_BYTE *)(v1 + 4147) = 0; v11 = sub_4DE270(); if ( v11 ) LOBYTE(v11) = sub_4DD7F0(v11); return (char)v11; } // 4628C0: using guessed type int __thiscall sub_4628C0(_DWORD); // ACEABC: using guessed type int dword_ACEABC; // BA6B48: using guessed type int dword_BA6B48; //----- (0067DFC0) -------------------------------------------------------- int __thiscall sub_67DFC0(char *this) { return (int)(this + 36); } //----- (0067DFD0) -------------------------------------------------------- char *__thiscall sub_67DFD0(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 15); sub_67B910(this - 15); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0067E120) -------------------------------------------------------- int __thiscall sub_67E120(int this, int a2) { int result; // eax result = a2; *(float *)(a2 + 4) = *(float *)(this + 4); *(float *)(a2 + 8) = *(float *)(this + 8); *(_DWORD *)(a2 + 12) = *(_DWORD *)(this + 12); *(_DWORD *)(a2 + 16) = *(_DWORD *)(this + 16); *(_DWORD *)(a2 + 20) = *(_DWORD *)(this + 20); *(_DWORD *)(a2 + 24) = *(_DWORD *)(this + 24); *(_DWORD *)(a2 + 28) = *(_DWORD *)(this + 28); *(_DWORD *)(a2 + 32) = *(_DWORD *)(this + 32); *(_DWORD *)(a2 + 36) = *(_DWORD *)(this + 36); *(_DWORD *)(a2 + 40) = *(_DWORD *)(this + 40); *(_DWORD *)(a2 + 44) = *(_DWORD *)(this + 44); *(_DWORD *)(a2 + 60) = *(_DWORD *)(this + 60); *(_DWORD *)(a2 + 64) = *(_DWORD *)(this + 64); *(_DWORD *)(a2 + 68) = *(_DWORD *)(this + 68); *(_DWORD *)(a2 + 72) = *(_DWORD *)(this + 72); *(_DWORD *)(a2 + 76) = *(_DWORD *)(this + 76); *(_DWORD *)(a2 + 80) = *(_DWORD *)(this + 80); *(float *)(a2 + 84) = *(float *)(this + 84); *(float *)(a2 + 88) = *(float *)(this + 88); *(_BYTE *)(a2 + 92) = *(_BYTE *)(this + 92); return result; } //----- (0067E1B0) -------------------------------------------------------- float *__thiscall sub_67E1B0(float *this) { float *v1; // esi v1 = this; sub_8CF980(this); v1[24] = 0.0; *(_DWORD *)v1 = &MoveToTarget::`vftable'; v1[25] = 0.0; *((_BYTE *)v1 + 104) = 0; return v1; } // 9F4824: using guessed type void *MoveToTarget::`vftable'; //----- (0067E1D0) -------------------------------------------------------- void __thiscall sub_67E1D0(_DWORD *this) { *this = &Ns_XYFlatMoveToTarget::`vftable'; sub_8CFA70(this); } // 9F47D4: using guessed type void *Ns_XYFlatMoveToTarget::`vftable'; //----- (0067E1E0) -------------------------------------------------------- int __thiscall sub_67E1E0(float *this, float a2) { float *v2; // esi float v3; // eax int result; // eax v2 = this; v3 = *this; this[22] = a2; result = (*(int (**)(void))(LODWORD(v3) + 4))(); if ( (_BYTE)result ) result = (*(int (__thiscall **)(float *, _DWORD, float *, float *))(*(_DWORD *)v2 + 28))( v2, LODWORD(flt_ACCFCC), v2 + 9, v2 + 6); return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0067E2A0) -------------------------------------------------------- void __thiscall sub_67E2A0(int this, float a2) { bool v2; // zf v2 = *(_BYTE *)(this + 104) == 0; *(float *)(this + 100) = a2; if ( v2 ) *(float *)(this + 88) = a2; } //----- (0067E2C0) -------------------------------------------------------- void __thiscall sub_67E2C0(float *this, float a2) { this[22] = a2; } //----- (0067E2D0) -------------------------------------------------------- char __thiscall sub_67E2D0(_BYTE *this) { return this[92]; } //----- (0067E2E0) -------------------------------------------------------- double __thiscall sub_67E2E0(float *this) { return this[22]; } //----- (0067E2F0) -------------------------------------------------------- int __thiscall sub_67E2F0(_DWORD *this, int *a2) { _DWORD *v2; // esi int result; // eax v2 = this; (*(void (**)(void))(*this + 32))(); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 44))(v2, a2); result = *a2; v2[9] = *a2; v2[10] = a2[1]; v2[11] = a2[2]; return result; } //----- (0067E330) -------------------------------------------------------- int __thiscall sub_67E330(char *this) { return (int)(this + 48); } //----- (0067E340) -------------------------------------------------------- int __thiscall sub_67E340(char *this) { return (int)(this + 72); } //----- (0067E350) -------------------------------------------------------- int __thiscall sub_67E350(char *this) { return (int)(this + 60); } //----- (0067E360) -------------------------------------------------------- _DWORD *__thiscall sub_67E360(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[9]; a2[1] = this[10]; a2[2] = this[11]; return result; } //----- (0067E380) -------------------------------------------------------- _DWORD *__thiscall sub_67E380(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[18]; a2[1] = this[19]; a2[2] = this[20]; return result; } //----- (0067E3A0) -------------------------------------------------------- _DWORD *__thiscall sub_67E3A0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[15]; a2[1] = this[16]; a2[2] = this[17]; return result; } //----- (0067E3C0) -------------------------------------------------------- void __thiscall sub_67E3C0(void *this, float a2, int a3, int a4) { int v4; // [esp+Ch] [ebp-18h] float v5; // [esp+10h] [ebp-14h] float v6; // [esp+14h] [ebp-10h] int v7; // [esp+18h] [ebp-Ch] float v8; // [esp+1Ch] [ebp-8h] float v9; // [esp+20h] [ebp-4h] v4 = *(int *)a3; v5 = *(float *)(a3 + 4); v6 = 0.0; v7 = *(int *)a4; v8 = *(float *)(a4 + 4); v9 = 0.0; sub_8CFAC0((int)this, a2, (int)&v4, (int)&v7); } //----- (0067E410) -------------------------------------------------------- int __thiscall sub_67E410(void *this, float a2, int a3) { return sub_8CFA80(this, a2, a3); } //----- (0067E430) -------------------------------------------------------- int __thiscall sub_67E430(float *this, float *a2, float *a3) { float v4; // [esp+0h] [ebp-18h] float v5; // [esp+4h] [ebp-14h] float v6; // [esp+8h] [ebp-10h] float v7; // [esp+Ch] [ebp-Ch] float v8; // [esp+10h] [ebp-8h] float v9; // [esp+14h] [ebp-4h] v4 = *a2; v5 = a2[1]; v6 = 0.0; v7 = *a3; v8 = a3[1]; v9 = 0.0; return sub_8CFBB0(this, (int)&v4, (int)&v7); } //----- (0067E470) -------------------------------------------------------- int __thiscall sub_67E470(float *this, float *a2) { float v3; // [esp+0h] [ebp-Ch] float v4; // [esp+4h] [ebp-8h] float v5; // [esp+8h] [ebp-4h] v3 = *a2; v4 = a2[1]; v5 = 0.0; return sub_8CFAA0(this, (int)&v3); } //----- (0067E4A0) -------------------------------------------------------- _DWORD *__thiscall sub_67E4A0(int this, _DWORD *a2) { _DWORD *result; // eax result = a2; *(_DWORD *)(this + 48) = *a2; *(_DWORD *)(this + 52) = a2[1]; *(float *)(this + 56) = 0.0; return result; } //----- (0067E4C0) -------------------------------------------------------- void *__thiscall sub_67E4C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Ns_XYFlatMoveToTarget::`vftable'; sub_8CFA70(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F47D4: using guessed type void *Ns_XYFlatMoveToTarget::`vftable'; //----- (0067E4F0) -------------------------------------------------------- _DWORD *__thiscall sub_67E4F0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_658E20(this); *v1 = &ObjectChar::`vftable'; v1[15] = &ObjectChar::`vftable'; v1[21] = &ObjectChar::`vftable'; return v1; } // 9F4874: using guessed type void *ObjectChar::`vftable'; // 9F4894: using guessed type void *ObjectChar::`vftable'; // 9F489C: using guessed type void *ObjectChar::`vftable'; //----- (0067E530) -------------------------------------------------------- int __thiscall sub_67E530(float *this, char a2) { float *v2; // esi v2 = this; sub_65E7F0(this, a2); (*(void (__thiscall **)(float *))(*(_DWORD *)v2 + 340))(v2); sub_6514A0(v2); return (*(int (__thiscall **)(float *, signed int))(*(_DWORD *)v2 + 460))(v2, 801000); } //----- (0067E580) -------------------------------------------------------- char __usercall sub_67E580@(int a1@, int a2@, int a3@) { int v3; // esi char result; // al v3 = a1; result = sub_65FD90(a1, a2, a3); *(_BYTE *)(v3 + 2509) = 1; return result; } //----- (0067E5A0) -------------------------------------------------------- void __stdcall sub_67E5A0(int a1) { JUMPOUT(&loc_67E5C0); } //----- (0067E5B0) -------------------------------------------------------- _DWORD *__thiscall sub_67E5B0(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 15; *v2 = &ObjectChar::`vftable'; v2[15] = &ObjectChar::`vftable'; v2[21] = &ObjectChar::`vftable'; sub_657580(this - 15); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4874: using guessed type void *ObjectChar::`vftable'; // 9F4894: using guessed type void *ObjectChar::`vftable'; // 9F489C: using guessed type void *ObjectChar::`vftable'; //----- (0067E600) -------------------------------------------------------- signed int __cdecl sub_67E600(char a1) { signed int result; // eax switch ( a1 ) { case 0: result = 0; break; case 4: result = 4; break; case 5: result = 5; break; case 6: result = 6; break; case 7: result = 7; break; case 8: result = 8; break; case 9: result = 9; break; case 0xA: result = 10; break; case 0xB: result = 11; break; case 0xC: result = 12; break; case 0xD: result = 13; break; case 0xE: result = 14; break; case 0xF: result = 15; break; case 0x10: result = 16; break; case 0x11: result = 17; break; case 0x12: result = 18; break; case 0x13: result = 19; break; case 0x14: result = 20; break; case 0x15: result = 21; break; case 0x16: result = 22; break; case 0x17: result = 23; break; case 0x18: result = 24; break; case 0x19: result = 25; break; case 0x1A: result = 26; break; case 0x1B: result = 27; break; case 0x1C: result = 28; break; case 0x1D: result = 29; break; case 0x1E: result = 30; break; case 0x1F: result = 31; break; case 0x20: result = 32; break; case 0x21: result = 33; break; case 0x22: result = 34; break; case 0x23: result = 35; break; case 0x24: result = 36; break; case 0x25: result = 37; break; case 0x26: result = 48; break; case 0x27: result = 49; break; case 0x28: result = 50; break; case 0x29: result = 51; break; case 0x2A: result = 52; break; case 0x2B: result = 38; break; case 0x2C: result = 39; break; case 0x2D: result = 40; break; case 0x2E: result = 41; break; case 0x2F: result = 42; break; case 0x30: result = 43; break; case 0x31: result = 44; break; case 0x32: result = 45; break; case 0x33: result = 46; break; case 0x34: result = 47; break; default: result = -1; break; } return result; } //----- (0067E850) -------------------------------------------------------- int sub_67E850() { int result; // eax _DWORD *v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi result = dword_AD9200; if ( !dword_AD9200 ) { v1 = sub_8F62B0(dword_AD9200, dword_AD9200, dword_AD9200, 255); result = dword_AD9200; if ( (_DWORD *)dword_AD9200 != v1 ) { if ( dword_AD9200 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9200; if ( !InterlockedDecrement((volatile LONG *)(dword_AD9200 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } result = (int)v1; dword_AD9200 = (int)v1; if ( v1 ) { InterlockedIncrement(v1 + 1); result = dword_AD9200; } } } return result; } // AD9200: using guessed type int dword_AD9200; //----- (0067E8C0) -------------------------------------------------------- int sub_67E8C0() { int result; // eax char *v1; // eax _DWORD *v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // edi result = dword_AD9204; if ( !dword_AD9204 ) { if ( byte_ACAD5C == (_BYTE)dword_AD9204 ) sub_420410(); v1 = sub_7549E0("%sgame\\MobPortrait\\MP_None.png", byte_ACAB50); v2 = sub_486130((int)v1); result = dword_AD9204; if ( (_DWORD *)dword_AD9204 != v2 ) { if ( dword_AD9204 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9204; if ( !InterlockedDecrement((volatile LONG *)(dword_AD9204 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } dword_AD9204 = (int)v2; if ( !v2 ) return sub_67E850(); InterlockedIncrement(v2 + 1); result = dword_AD9204; } if ( result ) return result; return sub_67E850(); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // AD9204: using guessed type int dword_AD9204; //----- (0067E950) -------------------------------------------------------- _DWORD *__cdecl sub_67E950(int a1) { int v1; // esi int *v2; // eax int v3; // esi char *v4; // eax _DWORD *result; // eax v1 = dword_ACDA74; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a1) ) return (_DWORD *)sub_67E8C0(); if ( (unsigned __int16)a1 > *(_WORD *)(v1 + 200) ) return (_DWORD *)sub_67E8C0(); v2 = (int *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1); if ( !*v2 ) return (_DWORD *)sub_67E8C0(); v3 = *v2; if ( !*v2 ) return (_DWORD *)sub_67E8C0(); if ( !byte_ACAD5C ) sub_420410(); v4 = sub_7549E0("%sgame\\MobPortrait\\CharInfo\\%s.png", byte_ACAB50, v3 + 134); result = sub_486130((int)v4); if ( !result ) return (_DWORD *)sub_67E8C0(); return result; } // ACAD5C: using guessed type char byte_ACAD5C; // ACDA74: using guessed type int dword_ACDA74; //----- (0067E9D0) -------------------------------------------------------- _DWORD *__cdecl sub_67E9D0(int a1) { char v2; // al unsigned int v3; // ebx char *v4; // eax unsigned int v5; // ebx int v6; // ebx unsigned int v7; // esi int *v8; // eax if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a1 + 648))(a1) ) return sub_67E950(*(unsigned __int16 *)(a1 + 942)); switch ( *(unsigned __int8 *)(a1 + 944) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v2 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v2 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v2 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v2 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v2 = 21; break; case 0x1Au: case 0x1Bu: v2 = 26; break; default: v2 = 0; break; } v3 = v2 & 0x3F | ((*(_BYTE *)(a1 + 938) & 1) << 6); v4 = (char *)sub_67FC50(v3 & 0x3F, (v3 >> 6) & 1, *(_BYTE *)(a1 + 920), *(_BYTE *)(a1 + 941)); if ( v4 ) v5 = ((unsigned __int16)v3 ^ (unsigned __int16)((unsigned __int16)sub_67E600(*v4) << 7)) & 0x3F80 ^ v3; else v5 = v3 & 0xFFFFC07F; v6 = v5 & 0xF0003FFF; v7 = v6 | ((*(_BYTE *)(a1 + 939) & 0x7F | ((*(_BYTE *)(a1 + 940) & 0x7F) << 7)) << 14); if ( dword_AB4188 == v7 ) { LOBYTE(v6) = 0; if ( sub_64F900((_DWORD *)a1, 372) ) LOBYTE(v6) = 1; if ( !sub_64F900((_DWORD *)a1, 549) && !(_BYTE)v6 ) { byte_AD91EC = 0; return (_DWORD *)*((_DWORD *)dword_AD91E8 + 2); } if ( byte_AD91EC ) return (_DWORD *)*((_DWORD *)dword_AD91E8 + 2); v8 = sub_67F8F0( v6, a1, v7 & 0x3F, (v7 >> 6) & 1, (v7 >> 7) & 0x7F, (v7 >> 14) & 0x7F, (v7 >> 21) & 0x7F, 7, 0xFFFF, 0); dword_AD91E8 = v8; dword_AB4188 = v7; if ( v8 ) { byte_AD91EC = 1; return (_DWORD *)v8[2]; } } else { v8 = sub_67F8F0( v6, a1, v6 & 0x3F, ((v6 | ((*(_BYTE *)(a1 + 939) & 0x7F | ((*(_BYTE *)(a1 + 940) & 0x7Fu) << 7)) << 14)) >> 6) & 1, ((v6 | ((*(_BYTE *)(a1 + 939) & 0x7F | ((*(_BYTE *)(a1 + 940) & 0x7Fu) << 7)) << 14)) >> 7) & 0x7F, ((v6 | ((*(_BYTE *)(a1 + 939) & 0x7F | ((*(_BYTE *)(a1 + 940) & 0x7Fu) << 7)) << 14)) >> 14) & 0x7F, ((v6 | ((*(_BYTE *)(a1 + 939) & 0x7F | ((*(_BYTE *)(a1 + 940) & 0x7Fu) << 7)) << 14)) >> 21) & 0x7F, 7, 0xFFFF, 0); dword_AD91E8 = v8; dword_AB4188 = v7; if ( v8 ) return (_DWORD *)v8[2]; } return (_DWORD *)sub_67E8C0(); } // AB4188: using guessed type int dword_AB4188; // AD91EC: using guessed type char byte_AD91EC; //----- (0067EC50) -------------------------------------------------------- int sub_67EC50() { void (__thiscall ***v0)(_DWORD, signed int); // esi void (__thiscall ***v1)(_DWORD, signed int); // esi void *v2; // esi int **i; // esi int *v4; // edi _DWORD *v5; // esi _DWORD *v6; // ST04_4 _DWORD *v7; // esi _DWORD *v8; // ST04_4 _DWORD *v9; // esi _DWORD *v10; // ST04_4 char v12; // [esp+Ch] [ebp-4h] if ( dword_AD9200 ) { v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9200; if ( !InterlockedDecrement((volatile LONG *)(dword_AD9200 + 4)) && v0 ) (**v0)(v0, 1); dword_AD9200 = 0; } v1 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9204; if ( dword_AD9204 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_AD9204 + 4)) && v1 ) (**v1)(v1, 1); dword_AD9204 = 0; } v2 = dword_AD91E8; if ( dword_AD91E8 ) { sub_44E770((int *)dword_AD91E8); operator delete(v2); } dword_AD91E8 = 0; dword_AB4188 = -1; for ( i = *(int ***)dword_AD91F4; i != dword_AD91F4; i = (int **)*sub_6CDBF0(&unk_AD91F0, (int *)&v12, (int)i) ) { v4 = i[4]; if ( v4 ) { sub_44E770(i[4]); operator delete(v4); } } v5 = (_DWORD *)dword_AB4190; if ( dword_AB4190 ) { do { v6 = v5; v5 = (_DWORD *)*v5; off_AB418C[2](&off_AB418C, (char)v6); } while ( v5 ); } dword_AB4198 = 0; dword_AB4190 = 0; dword_AB4194 = 0; sub_668390(&unk_AD9208); v7 = (_DWORD *)dword_AB41A0; if ( dword_AB41A0 ) { do { v8 = v7; v7 = (_DWORD *)*v7; off_AB419C[2](&off_AB419C, (char)v8); } while ( v7 ); } dword_AB41A8 = 0; dword_AB41A0 = 0; dword_AB41A4 = 0; sub_668390(&unk_AD9218); v9 = (_DWORD *)dword_AB41B0; if ( dword_AB41B0 ) { do { v10 = v9; v9 = (_DWORD *)*v9; off_AB41AC[2](&off_AB41AC, (char)v10); } while ( v9 ); } dword_AB41B8 = 0; dword_AB41B0 = 0; dword_AB41B4 = 0; return sub_668390(&unk_AD9228); } // AB4188: using guessed type int dword_AB4188; // AB418C: using guessed type int (__thiscall **off_AB418C)(void *, char); // AB4190: using guessed type int dword_AB4190; // AB4194: using guessed type int dword_AB4194; // AB4198: using guessed type int dword_AB4198; // AB419C: using guessed type int (__thiscall **off_AB419C)(void *, char); // AB41A0: using guessed type int dword_AB41A0; // AB41A4: using guessed type int dword_AB41A4; // AB41A8: using guessed type int dword_AB41A8; // AB41AC: using guessed type int (__thiscall **off_AB41AC)(void *, char); // AB41B0: using guessed type int dword_AB41B0; // AB41B4: using guessed type int dword_AB41B4; // AB41B8: using guessed type int dword_AB41B8; // AD9200: using guessed type int dword_AD9200; // AD9204: using guessed type int dword_AD9204; //----- (0067EDE0) -------------------------------------------------------- int __usercall sub_67EDE0@(int a1@, char a2, char a3, char a4, char a5, char a6, int a7, char a8, int a9) { int v9; // edi int v10; // edx int v11; // eax unsigned int v12; // esi int v13; // eax int *v15; // esi v9 = a7; v10 = a3 & 1; v11 = a2 & 0x3F; v12 = v11 | ((v10 | 2 * (a4 & 0x7F | ((a5 & 0x7F | ((a6 & 0x7F | ((a8 & 3 | 4 * ((_WORD)a7 == -1)) << 7)) << 7)) << 7))) << 6); a7 = v11 | ((v10 | 2 * (a4 & 0x7F | ((a5 & 0x7F | ((a6 & 0x7F | ((a8 & 3 | 4 * ((_WORD)a7 == -1)) << 7)) << 7)) << 7))) << 6); v13 = *(_DWORD *)sub_680000(&unk_AD91F0, &a7); if ( v13 ) return *(_DWORD *)(v13 + 8); v15 = sub_67F8F0( a1, v9, v12 & 0x3F, (v12 >> 6) & 1, (v12 >> 7) & 0x7F, (v12 >> 14) & 0x7F, (v12 >> 21) & 0x7F, 6, v9, a9); if ( !v15 ) return sub_67E8C0(); *(_DWORD *)sub_680000(&unk_AD91F0, &a7) = v15; return v15[2]; } //----- (0067EEC0) -------------------------------------------------------- _DWORD *__cdecl sub_67EEC0(int a1) { _DWORD *result; // eax int v2; // esi unsigned __int16 v3; // di int *v4; // eax int v5; // esi int v6; // edi char *v7; // eax _DWORD *v8; // esi char *v9; // eax _DWORD *v10; // [esp+Ch] [ebp-10h] int v11; // [esp+18h] [ebp-4h] result = *(_DWORD **)sub_680080(&unk_AD9208, &a1); if ( !result ) { v2 = dword_ACDA74; v3 = a1; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, a1) ) goto LABEL_21; if ( v3 > *(_WORD *)(v2 + 200) ) goto LABEL_21; v4 = (int *)(*(_DWORD *)(v2 + 196) + 4 * v3); if ( !*v4 ) goto LABEL_21; v5 = *v4; if ( !*v4 ) goto LABEL_21; if ( !byte_ACAD5C ) sub_420410(); v6 = v5 + 134; v7 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v5 + 134); v8 = sub_486130((int)v7); if ( !v8 ) { if ( !byte_ACAD5C ) sub_420410(); v9 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v6); v8 = sub_486130((int)v9); if ( !v8 ) LABEL_21: v8 = (_DWORD *)sub_67E8C0(); } v10 = v8; if ( v8 ) InterlockedIncrement(v8 + 1); v11 = 0; sub_8B8EC0(&off_AB418C, (int *)&v10); v11 = -1; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); } *(_DWORD *)sub_680080(&unk_AD9208, &a1) = v8; result = v8; } return result; } // AB418C: using guessed type int (__thiscall **off_AB418C)(void *, char); // ACAD5C: using guessed type char byte_ACAD5C; // ACDA74: using guessed type int dword_ACDA74; //----- (0067F010) -------------------------------------------------------- _DWORD *__cdecl sub_67F010(int a1) { _DWORD *v1; // esi char *v2; // eax char *v4; // esi int v5; // edi char *v6; // eax char *v7; // eax _DWORD *v8; // [esp+Ch] [ebp-10h] int v9; // [esp+18h] [ebp-4h] v1 = *(_DWORD **)sub_680000(&unk_AD9218, &a1); if ( !v1 ) { v2 = (char *)sub_50EE90(a1); if ( !v2 ) return 0; v4 = (char *)sub_50EFA0(v2 + 4); if ( !v4 ) return 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (int)(v4 + 128); v6 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v4 + 128); v1 = sub_486130((int)v6); if ( !v1 ) { if ( !byte_ACAD5C ) sub_420410(); v7 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v5); v1 = sub_486130((int)v7); if ( !v1 ) v1 = (_DWORD *)sub_67E8C0(); } v8 = v1; if ( v1 ) InterlockedIncrement(v1 + 1); v9 = 0; sub_8B8EC0(&off_AB419C, (int *)&v8); v9 = -1; if ( v1 ) { if ( !InterlockedDecrement(v1 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v1)(v1, 1); } *(_DWORD *)sub_680000(&unk_AD9218, &a1) = v1; } return v1; } // AB419C: using guessed type int (__thiscall **off_AB419C)(void *, char); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0067F160) -------------------------------------------------------- _DWORD *__cdecl sub_67F160(int a1) { _DWORD *v1; // esi char *v2; // eax char *v4; // esi int v5; // edi char *v6; // eax char *v7; // eax _DWORD *v8; // [esp+Ch] [ebp-10h] int v9; // [esp+18h] [ebp-4h] v1 = *(_DWORD **)sub_680000(&unk_AD9228, &a1); if ( !v1 ) { v2 = (char *)sub_443A80(a1); if ( !v2 ) return 0; v4 = (char *)sub_443AD0(v2 + 4); if ( !v4 ) return 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (int)(v4 + 64); v6 = sub_7549E0("%sgame\\MobPortrait\\%s.png", byte_ACAB50, v4 + 64); v1 = sub_486130((int)v6); if ( !v1 ) { if ( !byte_ACAD5C ) sub_420410(); v7 = sub_7549E0("%sgame\\MobPortrait\\%s.tga", byte_ACAB50, v5); v1 = sub_486130((int)v7); if ( !v1 ) v1 = (_DWORD *)sub_67E8C0(); } v8 = v1; if ( v1 ) InterlockedIncrement(v1 + 1); v9 = 0; sub_8B8EC0(&off_AB41AC, (int *)&v8); v9 = -1; if ( v1 ) { if ( !InterlockedDecrement(v1 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v1)(v1, 1); } *(_DWORD *)sub_680000(&unk_AD9228, &a1) = v1; } return v1; } // AB41AC: using guessed type int (__thiscall **off_AB41AC)(void *, char); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0067F2B0) -------------------------------------------------------- _DWORD *__cdecl sub_67F2B0(int a1) { int v1; // esi char *v3; // eax char v4; // di int v5; // eax char v6; // cl char v7; // [esp+4h] [ebp-10h] int v8; // [esp+4h] [ebp-10h] char v9; // [esp+8h] [ebp-Ch] char v10; // [esp+Ch] [ebp-8h] char v11; // [esp+1Fh] [ebp+Bh] v1 = a1; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a1 + 648))(a1) ) return sub_67E950(*(unsigned __int16 *)(a1 + 942)); v10 = *(_BYTE *)(a1 + 941); v11 = 0; v9 = *(_BYTE *)(v1 + 920); v7 = *(_BYTE *)(v1 + 938); switch ( *(unsigned __int8 *)(v1 + 944) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v3 = (char *)sub_67FC50(1, v7, v9, v10); break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v3 = (char *)sub_67FC50(6, v7, v9, v10); break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v3 = (char *)sub_67FC50(11, v7, v9, v10); break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v3 = (char *)sub_67FC50(16, v7, v9, v10); break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v3 = (char *)sub_67FC50(21, v7, v9, v10); break; case 0x1Au: case 0x1Bu: v3 = (char *)sub_67FC50(26, v7, v9, v10); break; default: v3 = (char *)sub_67FC50(0, v7, v9, v10); break; } if ( v3 ) v11 = *v3; v8 = *(unsigned __int16 *)(v1 + 942); v4 = 5; if ( (_WORD)v8 != -1 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 164))(v1); v4 = sub_652AC0(dword_AD8EBC, v5); } switch ( *(unsigned __int8 *)(v1 + 944) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v6 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v6 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v6 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v6 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v6 = 21; break; case 0x1Au: case 0x1Bu: v6 = 26; break; default: v6 = 0; break; } return (_DWORD *)sub_67EDE0( *(_BYTE *)(v1 + 938), v6, *(_BYTE *)(v1 + 938), v11, *(_BYTE *)(v1 + 939), *(_BYTE *)(v1 + 940), v8, v4, 0); } //----- (0067F4F0) -------------------------------------------------------- void *__thiscall sub_67F4F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F4C28: using guessed type void *NiTListBase>,NiPointer>::`vftable'; //----- (0067F520) -------------------------------------------------------- _DWORD *__thiscall sub_67F520(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase>,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4C28: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F4C38: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (0067F5B0) -------------------------------------------------------- int __cdecl sub_67F5B0(char a1, char a2, char a3, char a4, char a5, unsigned __int16 a6) { char v6; // al _DWORD *v7; // eax int v8; // esi char v9; // al int result; // eax int v11; // ST18_4 int v12; // ebx int *v13; // eax int v14; // eax _DWORD *v15; // eax int v16; // ST20_4 _BYTE *v17; // eax void (__thiscall *v18)(int, int *, float *); // edx char v19; // [esp+34h] [ebp-12Ch] void *v20; // [esp+44h] [ebp-11Ch] float v21; // [esp+48h] [ebp-118h] float v22; // [esp+4Ch] [ebp-114h] float v23; // [esp+50h] [ebp-110h] int v24; // [esp+54h] [ebp-10Ch] char v25[6]; // [esp+58h] [ebp-108h] int v26; // [esp+5Eh] [ebp-102h] int v27; // [esp+62h] [ebp-FEh] int v28; // [esp+66h] [ebp-FAh] int v29; // [esp+6Ah] [ebp-F6h] char v30; // [esp+77h] [ebp-E9h] char v31; // [esp+78h] [ebp-E8h] char v32; // [esp+79h] [ebp-E7h] char v33; // [esp+7Ah] [ebp-E6h] char v34; // [esp+7Bh] [ebp-E5h] char v35; // [esp+7Ch] [ebp-E4h] __int16 v36; // [esp+7Dh] [ebp-E3h] __int16 v37; // [esp+7Fh] [ebp-E1h] int v38; // [esp+81h] [ebp-DFh] int v39; // [esp+85h] [ebp-DBh] int v40; // [esp+89h] [ebp-D7h] int v41; // [esp+8Dh] [ebp-D3h] __int16 v42; // [esp+91h] [ebp-CFh] __int16 v43; // [esp+93h] [ebp-CDh] int v44; // [esp+95h] [ebp-CBh] int v45; // [esp+99h] [ebp-C7h] int v46; // [esp+9Dh] [ebp-C3h] __int16 v47; // [esp+A1h] [ebp-BFh] __int16 v48; // [esp+A3h] [ebp-BDh] int v49; // [esp+15Ch] [ebp-4h] v24 = a6; v29 = 0; v28 = 0; v27 = 0; v26 = 0; *(_DWORD *)&v25[2] = 0; strncpy(&v25[2], &byte_9A8050, 0x14u); v31 = a1; v36 = -1; v38 = -1; v39 = -1; v40 = -1; v41 = -1; v42 = -1; v37 = -1; v47 = -1; v44 = -1; v45 = -1; v46 = -1; v43 = -1; v48 = -1; *(_WORD *)v25 = rand(); v35 = a3; v32 = (a2 << 7) | ((v32 ^ 4 * a1) & 0x7C ^ v32) & 0x7F; v30 = 1; v34 = a5; v33 = a4; v6 = sub_662140(a1); v32 ^= (v32 ^ v6) & 3; v7 = operator new(0xB8Cu); v20 = v7; v49 = 0; if ( v7 ) v8 = sub_658E20(v7); else v8 = 0; v49 = -1; if ( sub_67B6C0(dword_AD8EBC) == 17 ) v9 = (*(int (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v8 + 552))( v8, *((unsigned __int16 *)dword_AD8EBC + 471), *(_DWORD *)v25); else v9 = (*(int (__thiscall **)(int, char *))(*(_DWORD *)v8 + 556))(v8, v25); if ( v9 && (*(unsigned __int8 (__thiscall **)(int, signed int, _DWORD))(*(_DWORD *)v8 + 600))(v8, 1, 0) ) { sub_668B20(&v19, 4); v11 = *(_DWORD *)(v8 + 700); v49 = 1; sub_8CFE00(&v19, v11, (int)dword_BA457C, 0); if ( dword_AC9CE4 ) sub_8D2420((_BYTE *)dword_AC9CE4, *(_DWORD **)(v8 + 700), dword_BA46D0, 20, 4); v12 = dword_ACDA74; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v24) ) { if ( (unsigned __int16)v24 <= *(_WORD *)(v12 + 200) ) { v13 = (int *)(*(_DWORD *)(v12 + 196) + 4 * (unsigned __int16)v24); if ( *v13 ) { v14 = *v13; if ( v14 ) { if ( *(_BYTE *)(v14 + 180) ) { v15 = (_DWORD *)sub_672FD0((char *)(v8 + 776)); sub_6618E0(v15, "FxSkinning_Greyscale", "FxNoSkinning_Greyscale"); sub_650CD0((_BYTE *)v8, 1); v16 = *(_DWORD *)(v8 + 700); v17 = (_BYTE *)sub_672FD0((char *)(v8 + 776)); sub_661F10(v17, v16); } } } } } v18 = *(void (__thiscall **)(int, int *, float *))(*(_DWORD *)v8 + 184); v21 = 0.0; v22 = -1.0; v23 = 0.0; v18(v8, &dword_BA45C0, &v21); (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 340))(v8); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 592))(v8, 0.0); result = v8; } else { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 28))(v8, 1); result = 0; } return result; } // AC9CE4: using guessed type int dword_AC9CE4; // ACDA74: using guessed type int dword_ACDA74; // BA45C0: using guessed type int dword_BA45C0; // BA46D0: using guessed type int dword_BA46D0; //----- (0067F8F0) -------------------------------------------------------- int *__usercall sub_67F8F0@(int a1@, int a2@, int a3, char a4, char a5, char a6, char a7, char a8, int a9, int a10) { int *result; // eax int *v11; // esi int v12; // eax double v13; // st7 double v14; // st6 float v15; // ST30_4 double v16; // st7 double v17; // st6 float v18; // ST30_4 double v19; // st7 float v20; // ST30_4 int v21; // edx int v22; // edi int v23; // ebx char *v24; // eax _DWORD *v25; // eax int v26; // eax int v27; // [esp+10h] [ebp-24h] int v28; // [esp+14h] [ebp-20h] float v29; // [esp+1Ch] [ebp-18h] float v30; // [esp+1Ch] [ebp-18h] float v31; // [esp+1Ch] [ebp-18h] float v32; // [esp+20h] [ebp-14h] float v33; // [esp+20h] [ebp-14h] float v34; // [esp+20h] [ebp-14h] float v35; // [esp+24h] [ebp-10h] float v36; // [esp+24h] [ebp-10h] float v37; // [esp+24h] [ebp-10h] int v38; // [esp+2Ch] [ebp-8h] _DWORD *v39; // [esp+30h] [ebp-4h] result = sub_44EAB0((volatile LONG *)dword_BA46D0, a8); v11 = result; if ( result ) { v28 = a1; v27 = a2; v39 = (_DWORD *)sub_67F5B0(a3, a4, a5, a6, a7, a9); if ( v39 ) { *((float *)v11 + 5) = 0.0; *((float *)v11 + 6) = 0.0; *((float *)v11 + 7) = 0.0; *((float *)v11 + 8) = 1.0; if ( (_WORD)a9 == -1 ) { switch ( a3 ) { case 1: v16 = 1.0; v30 = 1.0; v33 = 0.73725492; v17 = 0.53725493; LABEL_11: v36 = v17; goto LABEL_12; case 6: v13 = 1.0; v29 = 0.0; v32 = 1.0; v14 = 0.97254902; goto LABEL_8; case 11: v19 = 1.0; v31 = 0.0; v34 = 1.0; v37 = 0.74117649; goto LABEL_14; case 16: v19 = 1.0; v31 = 1.0; v34 = 0.53725493; v37 = 0.96862745; LABEL_14: v20 = v19; *((float *)v11 + 5) = v31; *((float *)v11 + 6) = v34; *((float *)v11 + 7) = v37; *((float *)v11 + 8) = v20; break; case 21: v29 = 0.47058824; v14 = 0.0; v13 = 1.0; v32 = 0.0; LABEL_8: v35 = v14; goto LABEL_9; case 26: v16 = 1.0; v30 = 0.0; v36 = 0.0; v33 = 1.0; LABEL_12: v18 = v16; *((float *)v11 + 5) = v30; *((float *)v11 + 6) = v33; *((float *)v11 + 7) = v36; *((float *)v11 + 8) = v18; break; default: break; } } else { v12 = sub_49F370(a9); if ( v12 ) { switch ( sub_652AC0(dword_AD8EBC, *(_DWORD *)(v12 + 66)) ) { case 0: *((float *)v11 + 5) = 0.74509805; *((float *)v11 + 6) = 0.14509805; *((float *)v11 + 7) = 0.11372549; *((float *)v11 + 8) = 1.0; goto LABEL_23; case 1: v13 = 1.0; v29 = 1.0; v32 = 0.627451; v14 = 0.14509805; goto LABEL_8; case 2: v16 = 1.0; v30 = 1.0; v33 = 0.95294118; v17 = 0.19607843; goto LABEL_11; case 3: v31 = 0.35294119; v34 = 0.90588236; v37 = 0.33725491; v19 = 1.0; goto LABEL_14; default: v29 = 0.75294119; v32 = 0.75294119; v35 = 0.75294119; v13 = 1.0; break; } LABEL_9: v15 = v13; *((float *)v11 + 5) = v29; *((float *)v11 + 6) = v32; *((float *)v11 + 7) = v35; *((float *)v11 + 8) = v15; } } LABEL_23: v21 = a10; v22 = v39[175]; if ( !a10 ) v21 = rand() % 3 + 1; v23 = *(_DWORD *)v22; v24 = sub_7549E0("Haduri%02d", v21); v25 = (_DWORD *)(*(int (__thiscall **)(int, char *, int, int))(v23 + 72))(v22, v24, v27, v28); if ( v25 ) { if ( sub_8F73A0(v25, &v38) ) sub_44EA40(v11, v38); } v26 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v22 + 72))(v22, "Haduri Light"); sub_8F6920(v26, 1); sub_85C4D0((_DWORD *)v22); sub_85C6F0((_DWORD *)v22); sub_85BED0((_DWORD **)v22, 0.0, 1); *(_WORD *)(v22 + 28) &= 0xFFFEu; sub_40DB00(v11, v22); sub_44E910((float **)v11, COERCE_INT(0.0)); (*(void (__cdecl **)(signed int))(*v39 + 28))(1); } result = v11; } return result; } // 67F8F0: could not find valid save-restore pair for ebx // 67F8F0: could not find valid save-restore pair for edi // BA46D0: using guessed type int dword_BA46D0; //----- (0067FC50) -------------------------------------------------------- int __cdecl sub_67FC50(char a1, char a2, char a3, char a4) { int v4; // eax unsigned int v5; // edi unsigned int v6; // esi char v8; // [esp+Eh] [ebp-2h] char v9; // [esp+Fh] [ebp-1h] v4 = *(_DWORD *)(dword_AC9C9C + 56); if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; v6 = 0; if ( !v5 ) return 0; while ( 1 ) { sub_64F580(v6, a1, a2, &v9, &v8); if ( v9 == a3 && v8 == a4 ) break; if ( ++v6 >= v5 ) return 0; } return sub_7474E0((_DWORD *)(dword_AC9C9C + 4), v6); } // AC9C9C: using guessed type int dword_AC9C9C; //----- (0067FCC0) -------------------------------------------------------- int __thiscall sub_67FCC0(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_6A0F70(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_6A0F70(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_6A0F70(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_4DC030(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_717D90(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_62DDE0(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 21) ) sub_6A0F70(v4, a2, 0, a3, v6); else sub_6A0F70(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 21) ) sub_6A0F70(v4, a2, 0, (int)a4, v6); else sub_6A0F70(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (0067FE20) -------------------------------------------------------- int __thiscall sub_67FE20(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _WORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_6A0F70(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_WORD *)a4 + 6) < *(_WORD *)(a3 + 12) ) { sub_6A0F70(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_WORD *)(v8 + 12) < *((_WORD *)a4 + 6) ) { sub_6A0F70(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_WORD *)a4 + 6) >= *(_WORD *)(a3 + 12) || (a4 = (void *)a3, sub_4DC030(&a4), *((_WORD *)a4 + 6) >= v6[6]) ) { if ( *(_WORD *)(a3 + 12) >= v6[6] || (a4 = (void *)a3, sub_717D90(&a4), a4 != (void *)v4[1]) && v6[6] >= *((_WORD *)a4 + 6) ) { LABEL_22: v9 = *(_DWORD *)sub_6E19E0(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 21) ) sub_6A0F70(v4, a2, 0, a3, v6); else sub_6A0F70(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 21) ) sub_6A0F70(v4, a2, 0, (int)a4, v6); else sub_6A0F70(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (0067FF90) -------------------------------------------------------- _DWORD *__thiscall sub_67FF90(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_WORD *)result + 6) = *(_WORD *)a2; result[4] = *((_DWORD *)v4 + 1); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00680000) -------------------------------------------------------- int __thiscall sub_680000(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi _DWORD *v6; // eax char v8[4]; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 21) ) { if ( *(_DWORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; *(_DWORD *)v8 = *a2; v9 = 0; v6 = sub_5E8850(v2, v8); sub_67FCC0(v2, (int)&a2, v5, v6); return (int)(a2 + 4); } //----- (00680080) -------------------------------------------------------- int __thiscall sub_680080(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi _DWORD *v6; // eax char v8[2]; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 21) ) { if ( *(_WORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_WORD *)(v5 + 12) ) return v5 + 16; *(_WORD *)v8 = *a2; v9 = 0; v6 = sub_67FF90(v2, v8); sub_67FE20(v2, (int)&a2, v5, v6); return (int)(a2 + 8); } //----- (00680110) -------------------------------------------------------- void __thiscall sub_680110(_DWORD *this, __int16 a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // eax int v6; // ecx int v7; // eax unsigned int v8; // eax int v9; // eax int v10; // edi _DWORD *v11; // ecx int v12; // [esp+Ch] [ebp-1Ch] int v13; // [esp+10h] [ebp-18h] int v14; // [esp+14h] [ebp-14h] int v15; // [esp+18h] [ebp-10h] int v16; // [esp+24h] [ebp-4h] v2 = this; v3 = sub_6CD770(); sub_74C540(v3); LOWORD(v12) = a2; v4 = sub_680890((unsigned __int8 *)byte_AD9238); sub_74C6E0(v3, &v12, 6, v4, 0); v5 = v13; v6 = v15; v2[2] = v12; v2[3] = v5; v7 = v14; v2[4] = v14; v2[5] = v6; if ( v7 == 4 && v6 != -1 ) { v8 = sub_680890((unsigned __int8 *)byte_AD9238); if ( v8 <= v15 + 5 ) { v7 = v14; } else { v7 = 9; v14 = 9; } } v9 = sub_669010(&unk_AD8D28, v7, 0); v10 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = (_DWORD *)(*v2 + 176); v16 = 0; sub_8D8240(v11); if ( v10 ) { (*(void (__stdcall **)(int, signed int))(*(_DWORD *)*v2 + 116))(v10, 1); v16 = -1; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); } } //----- (00680250) -------------------------------------------------------- char **__thiscall sub_680250(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { int v11; // edi int v12; // esi int v13; // ecx char **result; // eax int v15; // ecx int v16; // [esp+8h] [ebp-28h] int v17; // [esp+Ch] [ebp-24h] int v18; // [esp+10h] [ebp-20h] int v19; // [esp+14h] [ebp-1Ch] int v20; // [esp+18h] [ebp-18h] int v21; // [esp+1Ch] [ebp-14h] int v22; // [esp+20h] [ebp-10h] int v23; // [esp+24h] [ebp-Ch] int v24; // [esp+28h] [ebp-8h] int v25; // [esp+2Ch] [ebp-4h] v16 = a11; v18 = a3; v20 = a5; v17 = a2; v22 = a7; v11 = this[2]; v19 = a4; v12 = (int)(this + 2); v13 = *(_DWORD *)(v11 + 4); v24 = a9; v21 = a6; v23 = a8; v25 = a10; result = sub_6804E0((char *)v11, v13, (int)&v16); v15 = *(_DWORD *)(v12 + 4); if ( (unsigned int)(107374181 - v15) < 1 ) std::_Xlength_error("list too long"); *(_DWORD *)(v12 + 4) = v15 + 1; *(_DWORD *)(v11 + 4) = result; *(_DWORD *)result[1] = result; return result; } //----- (00680370) -------------------------------------------------------- void __thiscall sub_680370(_DWORD *this) { _DWORD *v1; // eax _DWORD *v2; // ebx _DWORD *v3; // edi float *v4; // esi int v5; // eax char v6; // al _DWORD **v7; // esi _DWORD *v8; // [esp+14h] [ebp-8Ch] _DWORD *v9; // [esp+18h] [ebp-88h] char v10[4]; // [esp+1Ch] [ebp-84h] int v11; // [esp+20h] [ebp-80h] int v12; // [esp+24h] [ebp-7Ch] int v13; // [esp+28h] [ebp-78h] int v14; // [esp+2Ch] [ebp-74h] int v15; // [esp+30h] [ebp-70h] int v16; // [esp+34h] [ebp-6Ch] int v17; // [esp+38h] [ebp-68h] char v18; // [esp+3Ch] [ebp-64h] v9 = this; if ( this[1] ) { v1 = (_DWORD *)this[2]; v2 = (_DWORD *)*v1; v8 = (_DWORD *)this[2]; if ( v1 != (_DWORD *)*v1 ) { do { v3 = v2 + 2; *(_DWORD *)v10 = v2[3]; v11 = v2[4]; v12 = v2[5]; v13 = v2[6]; v14 = v2[7]; v15 = v2[8]; v16 = v2[9]; v17 = v2[10]; v18 = 0; if ( dword_AD8EBC ) { v4 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v5 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v6 = sub_6995F0(byte_ADB468, v10, *v4, *(float *)(v5 + 4)); v7 = (_DWORD **)v2; v2 = (_DWORD *)*v2; if ( v6 ) { if ( v3[9] == 1 && *v3 == -1 ) { sub_4AA230((_DWORD *)v9[1], v10); if ( v7 != (_DWORD **)v9[2] ) { *v7[1] = *v7; (*v7)[1] = v7[1]; operator delete(v7); --v9[3]; } } } else if ( v3[9] == 2 && *v3 == -1 ) { sub_4AA2E0((_DWORD *)v9[1], v10); if ( v7 != (_DWORD **)v9[2] ) { *v7[1] = *v7; (*v7)[1] = v7[1]; operator delete(v7); --v9[3]; } } } } while ( v8 != v2 ); } } } //----- (006804E0) -------------------------------------------------------- char **__stdcall sub_6804E0(char *a1, int a2, int a3) { char **result; // eax int v4; // edx void **v5; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x30u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a1); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) qmemcpy(result + 2, (const void *)a3, 0x28u); return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00680560) -------------------------------------------------------- int __thiscall sub_680560(_DWORD *this, int a2) { int result; // eax if ( a2 < this[25] ) result = (int)this + 130 * a2 + 104; else result = 0; return result; } //----- (00680580) -------------------------------------------------------- int __thiscall sub_680580(_DWORD *this, char a2) { int v2; // esi int v3; // eax _BYTE *v4; // edx v2 = this[25]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = (char *)this + 130; while ( *v4 != a2 ) { ++v3; v4 += 130; if ( v3 >= v2 ) return 0; } return (int)this + 130 * v3 + 104; } //----- (006805D0) -------------------------------------------------------- int __thiscall sub_6805D0(int this) { int v1; // edi int v2; // esi int v3; // eax char v4; // cl _BYTE *v5; // edx v1 = this; v2 = *(_DWORD *)(this + 100); v3 = 0; if ( v2 <= 0 ) return 0; v4 = *(_BYTE *)(this + 884); v5 = (_BYTE *)(v1 + 130); while ( *v5 != v4 ) { ++v3; v5 += 130; if ( v3 >= v2 ) return 0; } return 130 * v3 + v1 + 104; } //----- (00680620) -------------------------------------------------------- void *__thiscall sub_680620(_DWORD *this, void *a2, int a3) { this[25] = a3; if ( a3 > 6 ) this[25] = 6; return memcpy(this + 26, a2, 130 * this[25]); } //----- (00680660) -------------------------------------------------------- char __thiscall sub_680660(_BYTE *this) { return this[884]; } //----- (00680670) -------------------------------------------------------- char __thiscall sub_680670(_BYTE *this, char a2) { char result; // al result = a2; this[884] = a2; return result; } //----- (00680680) -------------------------------------------------------- signed int __thiscall sub_680680(_DWORD *this) { int v1; // esi unsigned __int8 v2; // bl int v3; // eax _BYTE *v4; // edx v1 = this[25]; v2 = 0; do { v3 = 0; if ( v1 <= 0 ) return v2; v4 = (char *)this + 130; while ( *v4 != v2 ) { ++v3; v4 += 130; if ( v3 >= v1 ) return v2; } if ( (_DWORD *)((char *)this + 130 * v3) == (_DWORD *)-104 ) return v2; ++v2; } while ( v2 < 6u ); return -1; } //----- (006806D0) -------------------------------------------------------- int __thiscall sub_6806D0(_DWORD *this, char a2) { int v2; // esi int result; // eax _BYTE *v4; // edx v2 = this[25]; result = 0; if ( v2 > 0 ) { v4 = (char *)this + 130; while ( *v4 != a2 ) { ++result; v4 += 130; if ( result >= v2 ) return result; } result = (int)this + 130 * result + 104; if ( result ) *(_BYTE *)(result + 41) = 6; } return result; } //----- (00680740) -------------------------------------------------------- int __thiscall sub_680740(char *this) { return (int)(this + 885); } //----- (00680750) -------------------------------------------------------- _DWORD *__thiscall sub_680750(int this, _DWORD *a2) { _DWORD *result; // eax result = a2; *(_DWORD *)(this + 991) = *a2; return result; } //----- (00680770) -------------------------------------------------------- int __thiscall sub_680770(char *this) { return (int)(this + 991); } //----- (00680780) -------------------------------------------------------- void __thiscall sub_680780(int this, const void *a2) { qmemcpy((void *)(this + 995), a2, 0xF2u); } //----- (006807A0) -------------------------------------------------------- int __thiscall sub_6807A0(char *this) { return (int)(this + 995); } //----- (006807B0) -------------------------------------------------------- int __thiscall sub_6807B0(char *this) { return (int)(this + 952); } //----- (006807C0) -------------------------------------------------------- _DWORD *__thiscall sub_6807C0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; this[245] = *a2; return result; } //----- (006807E0) -------------------------------------------------------- char __thiscall sub_6807E0(_BYTE *this) { return (this[991] >> 2) & 0x1F; } //----- (006807F0) -------------------------------------------------------- char __thiscall sub_6807F0(_BYTE *this, char a2) { char result; // al result = (this[991] ^ 4 * a2) & 0x7C; this[991] ^= result; return result; } //----- (00680810) -------------------------------------------------------- int __thiscall sub_680810(char *this) { return (int)(this + 889); } //----- (00680820) -------------------------------------------------------- char __thiscall sub_680820(_BYTE *this, char a2) { char result; // al result = (a2 << 7) | this[991] & 0x7F; this[991] = result; return result; } //----- (00680840) -------------------------------------------------------- char __thiscall sub_680840(_BYTE *this) { return this[991] >> 7; } //----- (00680850) -------------------------------------------------------- char __thiscall sub_680850(_BYTE *this, char a2) { char result; // al result = a2; this[992] = a2; return result; } //----- (00680860) -------------------------------------------------------- char __thiscall sub_680860(_BYTE *this, char a2) { char result; // al result = a2; this[994] = a2; return result; } //----- (00680870) -------------------------------------------------------- int __thiscall sub_680870(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[241] = a2; this[242] = a3; return result; } //----- (00680890) -------------------------------------------------------- int __thiscall sub_680890(unsigned __int8 *this) { return this[910]; } //----- (006808A0) -------------------------------------------------------- char __thiscall sub_6808A0(_BYTE *this, char a2) { char result; // al result = a2; this[910] = a2; return result; } //----- (006808B0) -------------------------------------------------------- __int64 __thiscall sub_6808B0(int this) { return *(_QWORD *)(this + 997); } //----- (006808C0) -------------------------------------------------------- __int64 __thiscall sub_6808C0(int this) { return *(_QWORD *)(this + 911); } //----- (006808D0) -------------------------------------------------------- __int64 __thiscall sub_6808D0(int this) { return *(_QWORD *)(this + 1005); } //----- (006808E0) -------------------------------------------------------- unsigned int __thiscall sub_6808E0(int this, unsigned int a2) { unsigned int result; // eax result = a2; *(_QWORD *)(this + 911) += a2; return result; } //----- (00680900) -------------------------------------------------------- unsigned int __thiscall sub_680900(int this, unsigned int a2) { unsigned int result; // eax result = a2; *(_QWORD *)(this + 911) -= a2; return result; } //----- (00680940) -------------------------------------------------------- void __thiscall sub_680940(int this, const void *a2) { if ( a2 ) qmemcpy((void *)(this + 997), a2, 0xE8u); } //----- (00680960) -------------------------------------------------------- int __thiscall sub_680960(int this) { return *(_DWORD *)(this + 1013); } //----- (00680970) -------------------------------------------------------- int __thiscall sub_680970(int this) { return *(_DWORD *)(this + 1029); } //----- (00680980) -------------------------------------------------------- int __thiscall sub_680980(int this) { return *(_DWORD *)(this + 1021); } //----- (006809A0) -------------------------------------------------------- int __thiscall sub_6809A0(int this) { return *(_DWORD *)(this + 1037); } //----- (006809B0) -------------------------------------------------------- int __thiscall sub_6809B0(int this) { return *(_DWORD *)(this + 1053); } //----- (006809C0) -------------------------------------------------------- int __thiscall sub_6809C0(int this) { return *(_DWORD *)(this + 1061); } //----- (006809D0) -------------------------------------------------------- int __thiscall sub_6809D0(int this) { return *(_DWORD *)(this + 1069); } //----- (006809E0) -------------------------------------------------------- int __thiscall sub_6809E0(int this) { return *(_DWORD *)(this + 1077); } //----- (006809F0) -------------------------------------------------------- int __thiscall sub_6809F0(int this) { return *(_DWORD *)(this + 1085); } //----- (00680A00) -------------------------------------------------------- int __thiscall sub_680A00(int this) { return *(_DWORD *)(this + 1093); } //----- (00680A10) -------------------------------------------------------- int __thiscall sub_680A10(int this) { return *(_DWORD *)(this + 1101); } //----- (00680A20) -------------------------------------------------------- int __thiscall sub_680A20(int this) { return *(_DWORD *)(this + 1109); } //----- (00680A30) -------------------------------------------------------- int __thiscall sub_680A30(int this) { return *(_DWORD *)(this + 1117); } //----- (00680AA0) -------------------------------------------------------- int __thiscall sub_680AA0(int this) { return *(_DWORD *)(this + 1017); } //----- (00680AB0) -------------------------------------------------------- int __thiscall sub_680AB0(int this) { return *(_DWORD *)(this + 1033); } //----- (00680AC0) -------------------------------------------------------- int __thiscall sub_680AC0(int this) { return *(_DWORD *)(this + 1025); } //----- (00680AE0) -------------------------------------------------------- int __thiscall sub_680AE0(int this) { return *(_DWORD *)(this + 1041); } //----- (00680AF0) -------------------------------------------------------- int __thiscall sub_680AF0(int this) { return *(_DWORD *)(this + 1057); } //----- (00680B00) -------------------------------------------------------- int __thiscall sub_680B00(int this) { return *(_DWORD *)(this + 1065); } //----- (00680B10) -------------------------------------------------------- int __thiscall sub_680B10(int this) { return *(_DWORD *)(this + 1073); } //----- (00680B20) -------------------------------------------------------- int __thiscall sub_680B20(int this) { return *(_DWORD *)(this + 1081); } //----- (00680B30) -------------------------------------------------------- int __thiscall sub_680B30(int this) { return *(_DWORD *)(this + 1089); } //----- (00680B40) -------------------------------------------------------- int __thiscall sub_680B40(int this) { return *(_DWORD *)(this + 1097); } //----- (00680B50) -------------------------------------------------------- int __thiscall sub_680B50(int this) { return *(_DWORD *)(this + 1105); } //----- (00680B60) -------------------------------------------------------- int __thiscall sub_680B60(int this) { return *(_DWORD *)(this + 1113); } //----- (00680B70) -------------------------------------------------------- int __thiscall sub_680B70(int this) { return *(_DWORD *)(this + 1121); } //----- (00680BE0) -------------------------------------------------------- int __thiscall sub_680BE0(int this) { return *(_DWORD *)(this + 927); } //----- (00680BF0) -------------------------------------------------------- int __thiscall sub_680BF0(int this) { return *(_DWORD *)(this + 931); } //----- (00680C10) -------------------------------------------------------- int __thiscall sub_680C10(int this) { return *(_DWORD *)(this + 935); } //----- (00680C20) -------------------------------------------------------- void __thiscall sub_680C20(int this, unsigned int a2) { int v2; // eax *(_DWORD *)(this + 927) = a2; if ( (double)a2 < (double)*(unsigned int *)(this + 1141) * 0.5 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 ) sub_4A8140(v2, 14); } } //----- (00680C90) -------------------------------------------------------- int __thiscall sub_680C90(int this, int a2) { int result; // eax result = a2; *(_DWORD *)(this + 931) = a2; return result; } //----- (00680CA0) -------------------------------------------------------- int __thiscall sub_680CA0(int this, int a2) { int result; // eax result = a2; *(_DWORD *)(this + 935) = a2; return result; } //----- (00680CC0) -------------------------------------------------------- int __thiscall sub_680CC0(int this) { return *(_DWORD *)(this + 1141); } //----- (00680CD0) -------------------------------------------------------- int __thiscall sub_680CD0(int this) { return *(_DWORD *)(this + 1145); } //----- (00680CF0) -------------------------------------------------------- int __thiscall sub_680CF0(int this) { return *(_DWORD *)(this + 1149); } //----- (00680D20) -------------------------------------------------------- int __thiscall sub_680D20(int this) { return *(unsigned __int16 *)(this + 923); } //----- (00680D30) -------------------------------------------------------- int __thiscall sub_680D30(int this) { return *(unsigned __int16 *)(this + 925); } //----- (00680DC0) -------------------------------------------------------- __int16 __thiscall sub_680DC0(int this, __int16 a2) { __int16 result; // ax result = a2; *(_WORD *)(this + 923) = a2; return result; } //----- (00680DE0) -------------------------------------------------------- __int16 __thiscall sub_680DE0(int this, __int16 a2) { __int16 result; // ax result = a2; *(_WORD *)(this + 925) = a2; return result; } //----- (00680E60) -------------------------------------------------------- __int64 __thiscall sub_680E60(_QWORD *this) { return this[118]; } //----- (00680E70) -------------------------------------------------------- int __thiscall sub_680E70(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[236] = a2; this[237] = a3; return result; } //----- (00680E90) -------------------------------------------------------- signed __int64 __cdecl sub_680E90(__int64 a1) { return a1 / 100000000; } //----- (00680EB0) -------------------------------------------------------- signed __int64 __cdecl sub_680EB0(__int64 a1) { return a1 / 1000000 - 100 * (a1 / 100000000); } //----- (00680F00) -------------------------------------------------------- signed __int64 __cdecl sub_680F00(__int64 a1) { return a1 / 1000 - 1000 * (a1 / 1000000); } //----- (00680F60) -------------------------------------------------------- signed __int64 __cdecl sub_680F60(__int64 a1) { return a1 % 1000; } //----- (00680FA0) -------------------------------------------------------- signed __int64 __cdecl sub_680FA0(__int64 a1, __int64 a2, __int64 a3, __int64 a4) { return a1 + 1000 * (a2 + 1000 * (a3 + 100 * a4)); } //----- (00680FF0) -------------------------------------------------------- unsigned __int16 *__thiscall sub_680FF0(char *this, unsigned __int16 *a2) { unsigned __int16 *result; // eax int v3; // esi int v4; // ebx char *v5; // edx result = a2; v3 = a2[2]; v4 = 0; *((_DWORD *)this + 310) = v3; if ( v3 > 0 ) { v5 = this + 1244; result = a2 + 3; do { qmemcpy(v5, result, 0x24u); ++v4; result += 18; v5 += 36; } while ( v4 < *((_DWORD *)this + 310) ); } return result; } //----- (00681440) -------------------------------------------------------- int __thiscall sub_681440(int this, int *a2) { int result; // eax result = *a2; *(_DWORD *)(this + 1141) = *a2; if ( dword_AD8EBC ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 136))(result); return result; } //----- (006814E0) -------------------------------------------------------- int __thiscall sub_6814E0(char *this) { return (int)(this + 3048); } //----- (006814F0) -------------------------------------------------------- int __thiscall sub_6814F0(unsigned __int8 *this, char a2) { int result; // eax switch ( a2 ) { case 0: result = this[973]; break; case 1: result = this[974]; break; case 2: result = this[975]; break; case 3: result = this[976]; break; case 4: result = this[977]; break; default: result = 0; break; } return result; } //----- (00681560) -------------------------------------------------------- char __thiscall sub_681560(int this) { char result; // al result = 0; *(_DWORD *)(this + 973) = 0; *(_BYTE *)(this + 977) = 0; return result; } //----- (00681580) -------------------------------------------------------- int __thiscall sub_681580(char *this) { return (int)(this + 36); } //----- (00681590) -------------------------------------------------------- void __thiscall sub_681590(int this, const void *a2) { qmemcpy((void *)(this + 36), a2, 0x40u); } //----- (006815B0) -------------------------------------------------------- int __thiscall sub_6815B0(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[768] = a2; this[769] = a3; return result; } //----- (006815D0) -------------------------------------------------------- int __thiscall sub_6815D0(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[770] = a2; this[771] = a3; return result; } //----- (006815F0) -------------------------------------------------------- __int64 __thiscall sub_6815F0(_QWORD *this) { return this[384]; } //----- (00681600) -------------------------------------------------------- __int64 __thiscall sub_681600(_QWORD *this) { return this[385]; } //----- (00681610) -------------------------------------------------------- int __thiscall sub_681610(_DWORD *this, char a2) { int v2; // edi int result; // eax _BYTE *v4; // esi int v5; // edx v2 = this[25]; result = 0; if ( v2 > 0 ) { v4 = (char *)this + 130; while ( *v4 != a2 ) { ++result; v4 += 130; if ( result >= v2 ) return result; } if ( result != -1 ) { v5 = result; if ( result < v2 - 1 ) { result = (int)this + 130 * result + 112; do { *(_DWORD *)(result - 8) = *(_DWORD *)(result + 122); *(_DWORD *)(result - 4) = *(_DWORD *)(result + 126); *(_DWORD *)result = *(_DWORD *)(result + 130); *(_DWORD *)(result + 4) = *(_DWORD *)(result + 134); *(_DWORD *)(result + 8) = *(_DWORD *)(result + 138); *(_DWORD *)(result + 12) = *(_DWORD *)(result + 142); *(_WORD *)(result + 16) = *(_WORD *)(result + 146); *(_BYTE *)(result + 18) = *(_BYTE *)(result + 148); *(_DWORD *)(result + 19) = *(_DWORD *)(result + 149); *(_DWORD *)(result + 23) = *(_DWORD *)(result + 153); *(_DWORD *)(result + 27) = *(_DWORD *)(result + 157); *(_DWORD *)(result + 31) = *(_DWORD *)(result + 161); *(_BYTE *)(result + 35) = *(_BYTE *)(result + 165); *(_DWORD *)(result + 36) = *(_DWORD *)(result + 166); qmemcpy((void *)(result + 40), (const void *)(result + 170), 0x52u); ++v5; result += 130; } while ( v5 < this[25] - 1 ); } --this[25]; } } return result; } //----- (00681780) -------------------------------------------------------- int __thiscall sub_681780(_DWORD *this, _DWORD *a2) { int result; // eax this[238] = *a2; this[239] = a2[1]; result = a2[2]; this[240] = result; return result; } //----- (00681C50) -------------------------------------------------------- int __thiscall sub_681C50(_BYTE *this, char a2, int a3) { int result; // eax result = a3; this[978] += a3; *(_DWORD *)dword_AD9E30 -= a3; switch ( a2 ) { case 0: this[973] += a3; break; case 1: this[974] += a3; break; case 2: this[975] += a3; break; case 3: this[976] += a3; break; case 4: this[977] += a3; break; default: return result; } return result; } //----- (00681CC0) -------------------------------------------------------- int __thiscall sub_681CC0(_DWORD *this, _DWORD *a2) { signed int v2; // edi int *v3; // esi int v4; // edx int v5; // ecx int v6; // eax _DWORD *v8; // [esp+Ch] [ebp-34h] char v9[4]; // [esp+10h] [ebp-30h] int v10; // [esp+14h] [ebp-2Ch] int v11; // [esp+18h] [ebp-28h] int v12; // [esp+1Ch] [ebp-24h] int v13; // [esp+20h] [ebp-20h] char v14[4]; // [esp+24h] [ebp-1Ch] int v15; // [esp+28h] [ebp-18h] int v16; // [esp+2Ch] [ebp-14h] int v17; // [esp+30h] [ebp-10h] int v18; // [esp+34h] [ebp-Ch] char v19; // [esp+38h] [ebp-8h] v8 = this; v2 = 0; v3 = this + 29; while ( 1 ) { v4 = *v3; v5 = *(v3 - 1); *(_DWORD *)v14 = *(v3 - 2); v6 = v3[1]; v16 = v4; v17 = v6; v15 = v5; v18 = v3[2]; v19 = 0; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v14, 0x14u); if ( *(_DWORD *)v9 == *a2 && v10 == a2[1] && v11 == a2[2] && v12 == a2[3] && v13 == a2[4] ) break; ++v2; v3 = (int *)((char *)v3 + 130); if ( v2 >= 6 ) return 0; } return (int)v8 + 130 * v2 + 104; } //----- (00681D90) -------------------------------------------------------- void __thiscall sub_681D90(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST0C_4 v1 = this; v2 = this + 762; this[762] = &NiTPointerListBase,int>::`vftable'; v3 = (_DWORD *)this[763]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,int>::`vftable'; `eh vector destructor iterator'(v1 + 26, 0x82u, 6, nullsub_6); } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; //----- (00681E30) -------------------------------------------------------- char __thiscall sub_681E30(_DWORD *this, int a2) { _DWORD *v2; // esi signed int v3; // eax char result; // al v2 = this; v3 = this[25]; if ( v3 >= 6 ) return 0; sub_682560((_DWORD *)((char *)this + 130 * v3 + 104), a2); result = 1; ++v2[25]; return result; } //----- (00681E70) -------------------------------------------------------- void __thiscall sub_681E70(_DWORD *this, _BYTE *a2) { unsigned __int8 *v2; // edx signed int v3; // ebx _DWORD *v4; // edi _DWORD *v5; // esi int v6; // eax v2 = a2; v3 = 0; v4 = this; if ( *a2 ) { v5 = a2 + 2; do { switch ( *((unsigned __int8 *)v5 - 1) ) { case 0u: *(_DWORD *)((char *)v4 + 1013) = *v5; break; case 1u: *(_DWORD *)((char *)v4 + 1021) = *v5; break; case 2u: *(_DWORD *)((char *)v4 + 1029) = *v5; break; case 3u: *(_DWORD *)((char *)v4 + 1037) = *v5; break; case 4u: *(_DWORD *)((char *)v4 + 1045) = *v5; break; case 5u: *(_DWORD *)((char *)v4 + 1053) = *v5; break; case 6u: *(_DWORD *)((char *)v4 + 1061) = *v5; break; case 7u: *(_DWORD *)((char *)v4 + 1069) = *v5; break; case 8u: *(_DWORD *)((char *)v4 + 1077) = *v5; break; case 9u: *(_DWORD *)((char *)v4 + 1085) = *v5; break; case 0xAu: *(_DWORD *)((char *)v4 + 1093) = *v5; break; case 0xBu: *(_DWORD *)((char *)v4 + 1101) = *v5; break; case 0xCu: *(_DWORD *)((char *)v4 + 1109) = *v5; break; case 0xDu: *(_DWORD *)((char *)v4 + 1117) = *v5; break; case 0xEu: *(_DWORD *)((char *)v4 + 1125) = *v5; break; case 0xFu: *(_DWORD *)((char *)v4 + 1133) = *v5; break; case 0x10u: v6 = *v5; *(_DWORD *)((char *)v4 + 1141) = *v5; if ( dword_AD8EBC ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 136))(v6); v2 = a2; } break; case 0x11u: *(_DWORD *)((char *)v4 + 1145) = *v5; break; case 0x12u: v4[772] = *v5; break; case 0x13u: v4[773] = *v5; break; case 0x14u: v4[774] = *v5; break; case 0x15u: v4[775] = *v5; break; case 0x16u: v4[776] = *v5; break; case 0x17u: v4[777] = *v5; break; case 0x18u: v4[778] = *v5; break; case 0x19u: v4[779] = *v5; break; case 0x1Au: v4[780] = *v5; break; case 0x1Bu: v4[781] = *v5; break; case 0x24u: *(_DWORD *)((char *)v4 + 1149) = *v5; break; default: break; } ++v3; v5 = (_DWORD *)((char *)v5 + 5); } while ( v3 < *v2 ); } } //----- (006820C0) -------------------------------------------------------- void __thiscall sub_6820C0(_DWORD *this, _BYTE *a2) { unsigned __int8 *v2; // edx signed int v3; // ebx _DWORD *v4; // edi _DWORD *v5; // esi int v6; // eax v2 = a2; v3 = 0; v4 = this; if ( *a2 ) { v5 = a2 + 2; do { switch ( *((unsigned __int8 *)v5 - 1) ) { case 0u: *(_DWORD *)((char *)v4 + 1017) = *v5; break; case 1u: *(_DWORD *)((char *)v4 + 1025) = *v5; break; case 2u: *(_DWORD *)((char *)v4 + 1033) = *v5; break; case 3u: *(_DWORD *)((char *)v4 + 1041) = *v5; break; case 4u: *(_DWORD *)((char *)v4 + 1049) = *v5; break; case 5u: *(_DWORD *)((char *)v4 + 1057) = *v5; break; case 6u: *(_DWORD *)((char *)v4 + 1065) = *v5; break; case 7u: *(_DWORD *)((char *)v4 + 1073) = *v5; break; case 8u: *(_DWORD *)((char *)v4 + 1081) = *v5; break; case 9u: *(_DWORD *)((char *)v4 + 1089) = *v5; break; case 0xAu: *(_DWORD *)((char *)v4 + 1097) = *v5; break; case 0xBu: *(_DWORD *)((char *)v4 + 1105) = *v5; break; case 0xCu: *(_DWORD *)((char *)v4 + 1113) = *v5; break; case 0xDu: *(_DWORD *)((char *)v4 + 1121) = *v5; break; case 0xEu: *(_DWORD *)((char *)v4 + 1129) = *v5; break; case 0xFu: *(_DWORD *)((char *)v4 + 1137) = *v5; break; case 0x10u: v6 = *v5; *(_DWORD *)((char *)v4 + 1141) = *v5; if ( dword_AD8EBC ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 136))(v6); v2 = a2; } break; case 0x11u: *(_DWORD *)((char *)v4 + 1145) = *v5; break; case 0x12u: v4[772] = *v5; break; case 0x13u: v4[773] = *v5; break; case 0x14u: v4[774] = *v5; break; case 0x15u: v4[775] = *v5; break; case 0x16u: v4[776] = *v5; break; case 0x17u: v4[777] = *v5; break; case 0x18u: v4[778] = *v5; break; case 0x19u: v4[779] = *v5; break; case 0x1Au: v4[780] = *v5; break; case 0x1Bu: v4[781] = *v5; break; case 0x24u: *(_DWORD *)((char *)v4 + 1149) = *v5; break; default: break; } ++v3; v5 = (_DWORD *)((char *)v5 + 5); } while ( v3 < *v2 ); } } //----- (00682310) -------------------------------------------------------- int __thiscall sub_682310(int this) { int v1; // esi int v2; // eax int v3; // ecx int v4; // edx int v5; // eax int v6; // ecx int v7; // edx char v9[4]; // [esp+8h] [ebp-24h] int v10; // [esp+Ch] [ebp-20h] int v11; // [esp+10h] [ebp-1Ch] int v12; // [esp+14h] [ebp-18h] int v13; // [esp+18h] [ebp-14h] char v14[4]; // [esp+1Ch] [ebp-10h] int v15; // [esp+20h] [ebp-Ch] int v16; // [esp+24h] [ebp-8h] v1 = this; `eh vector constructor iterator'((void *)(this + 104), 0x82u, 6, sub_682530, nullsub_6); *(_DWORD *)(v1 + 905) = 0; *(_DWORD *)(v1 + 901) = 0; *(_DWORD *)(v1 + 897) = 0; *(_DWORD *)(v1 + 893) = 0; *(_DWORD *)(v1 + 889) = 0; *(_DWORD *)(v1 + 960) = 0; *(_DWORD *)(v1 + 956) = 0; *(_DWORD *)(v1 + 952) = 0; *(_DWORD *)(v1 + 3060) = 0; *(_DWORD *)(v1 + 3052) = 0; *(_DWORD *)(v1 + 3056) = 0; *(_DWORD *)(v1 + 3048) = &NiTList::`vftable'; *(_DWORD *)(v1 + 100) = 0; *(_BYTE *)(v1 + 884) = -1; *(_DWORD *)(v1 + 1240) = 0; v16 = 0; v15 = 0; *(_DWORD *)v14 = 0; strncpy(v14, "Rou", 0xCu); v2 = v15; v3 = v16; *(_DWORD *)(v1 + 952) = *(_DWORD *)v14; *(_DWORD *)(v1 + 956) = v2; *(_DWORD *)(v1 + 960) = v3; *(_BYTE *)(v1 + 991) = *(_BYTE *)(v1 + 991) & 0x87 | 4; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, "Tester", 0x14u); v4 = v10; v5 = v11; *(_DWORD *)(v1 + 889) = *(_DWORD *)v9; v6 = v12; *(_DWORD *)(v1 + 893) = v4; v7 = v13; *(_DWORD *)(v1 + 897) = v5; *(_DWORD *)(v1 + 901) = v6; *(_DWORD *)(v1 + 905) = v7; *(_DWORD *)(v1 + 964) = 3550; *(_DWORD *)(v1 + 968) = 3634; *(_DWORD *)(v1 + 3088) = 0; *(_DWORD *)(v1 + 3092) = 0; *(_DWORD *)(v1 + 3096) = 0; *(_DWORD *)(v1 + 3100) = 0; *(_DWORD *)(v1 + 3104) = 0; *(_DWORD *)(v1 + 3108) = 0; *(_DWORD *)(v1 + 3112) = 0; *(_DWORD *)(v1 + 3116) = 0; *(_DWORD *)(v1 + 3120) = 0; *(_DWORD *)(v1 + 3124) = 0; *(_DWORD *)(v1 + 3072) = 0; *(_DWORD *)(v1 + 3076) = 0; *(_DWORD *)(v1 + 3080) = 0; *(_DWORD *)(v1 + 3084) = 0; memset((void *)(v1 + 36), 0, 0x40u); return v1; } // 9F4D10: using guessed type void *NiTList::`vftable'; //----- (006824C0) -------------------------------------------------------- char *__thiscall sub_6824C0(char *this, int a2) { return sub_682730(this + 885, a2); } //----- (006824D0) -------------------------------------------------------- _DWORD *__thiscall sub_6824D0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiTListBase,int>::`vftable'; this[3] = 0; this[1] = 0; this[2] = 0; return result; } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; //----- (00682500) -------------------------------------------------------- void *__thiscall sub_682500(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,int>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; //----- (00682530) -------------------------------------------------------- void __thiscall sub_682530(void *this) { *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)((char *)this + 35) = 0; *(_DWORD *)((char *)this + 31) = 0; *(_DWORD *)((char *)this + 27) = 0; *(_DWORD *)((char *)this + 103) = 0; *(_DWORD *)((char *)this + 99) = 0; *(_DWORD *)((char *)this + 95) = 0; } //----- (00682560) -------------------------------------------------------- _DWORD *__thiscall sub_682560(_DWORD *this, int a2) { _DWORD *result; // eax result = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); *((_WORD *)this + 12) = *(_WORD *)(a2 + 24); *((_BYTE *)this + 26) = *(_BYTE *)(a2 + 26); *(_DWORD *)((char *)this + 27) = *(_DWORD *)(a2 + 27); *(_DWORD *)((char *)this + 31) = *(_DWORD *)(a2 + 31); *(_DWORD *)((char *)this + 35) = *(_DWORD *)(a2 + 35); *(_DWORD *)((char *)this + 39) = *(_DWORD *)(a2 + 39); *((_BYTE *)this + 43) = *(_BYTE *)(a2 + 43); this[11] = *(_DWORD *)(a2 + 44); qmemcpy(this + 12, (const void *)(a2 + 48), 0x52u); return result; } //----- (00682620) -------------------------------------------------------- int __thiscall sub_682620(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,int>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,int>::`vftable'; return result; } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; //----- (006826A0) -------------------------------------------------------- _DWORD *__thiscall sub_6826A0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,int>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,int>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; //----- (00682730) -------------------------------------------------------- char *__thiscall sub_682730(char *this, int a2) { char *result; // eax result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); *((_DWORD *)this + 5) = *(_DWORD *)(a2 + 20); this[24] = *(_BYTE *)(a2 + 24); this[25] = *(_BYTE *)(a2 + 25); *(_DWORD *)(this + 26) = *(_DWORD *)(a2 + 26); *(_DWORD *)(this + 30) = *(_DWORD *)(a2 + 30); *((_WORD *)this + 17) = *(_WORD *)(a2 + 34); *((_WORD *)this + 18) = *(_WORD *)(a2 + 36); *((_WORD *)this + 19) = *(_WORD *)(a2 + 38); *((_WORD *)this + 20) = *(_WORD *)(a2 + 40); *(_DWORD *)(this + 42) = *(_DWORD *)(a2 + 42); *(_DWORD *)(this + 46) = *(_DWORD *)(a2 + 46); *(_DWORD *)(this + 50) = *(_DWORD *)(a2 + 50); this[54] = *(_BYTE *)(a2 + 54); *(_DWORD *)(this + 55) = *(_DWORD *)(a2 + 55); *(_DWORD *)(this + 59) = *(_DWORD *)(a2 + 59); *(_DWORD *)(this + 63) = *(_DWORD *)(a2 + 63); *(_DWORD *)(this + 67) = *(_DWORD *)(a2 + 67); *(_DWORD *)(this + 71) = *(_DWORD *)(a2 + 71); *(_DWORD *)(this + 75) = *(_DWORD *)(a2 + 75); *(_DWORD *)(this + 79) = *(_DWORD *)(a2 + 79); *(_DWORD *)(this + 83) = *(_DWORD *)(a2 + 83); this[87] = *(_BYTE *)(a2 + 87); *((_DWORD *)this + 22) = *(_DWORD *)(a2 + 88); *((_WORD *)this + 46) = *(_WORD *)(a2 + 92); this[94] = *(_BYTE *)(a2 + 94); *(_DWORD *)(this + 95) = *(_DWORD *)(a2 + 95); *(_WORD *)(this + 99) = *(_WORD *)(a2 + 99); this[101] = *(_BYTE *)(a2 + 101); *(_DWORD *)(this + 102) = *(_DWORD *)(a2 + 102); return result; } //----- (00682820) -------------------------------------------------------- void *__thiscall sub_682820(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemAuthority::`vftable'; sub_74DDC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4D20: using guessed type void *ItemAuthority::`vftable'; //----- (00682850) -------------------------------------------------------- bool __thiscall sub_682850(void *this, int a2) { _BYTE *v2; // eax v2 = (_BYTE *)(*(int (__stdcall **)(int))(*(_DWORD *)this + 4))(a2); return v2 && !v2[4] && !v2[5] && !v2[6] && !v2[7] && !v2[8] && !v2[9]; } //----- (006828A0) -------------------------------------------------------- int __stdcall sub_6828A0(int a1) { return sub_6828E0(a1); } //----- (006828C0) -------------------------------------------------------- int sub_6828C0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9C4 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9C4: using guessed type int dword_ACD9C4; //----- (006828E0) -------------------------------------------------------- int __cdecl sub_6828E0(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_6828C0() ) return 0; while ( *(_DWORD *)sub_7474E0((_DWORD *)(dword_ACD9C4 + 4), v1) != a1 ) { if ( ++v1 >= sub_6828C0() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD9C4 + 4), v1); } // ACD9C4: using guessed type int dword_ACD9C4; //----- (00682990) -------------------------------------------------------- int __thiscall sub_682990(unsigned __int16 *this) { int v1; // esi int v2; // edi int result; // eax int v4; // ecx v1 = dword_ACB230; v2 = this[2]; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) && (unsigned __int16)v2 <= *(_WORD *)(v1 + 200) && (v4 = *(_DWORD *)(v1 + 196), *(_DWORD *)(v4 + 4 * v2)) ) { result = *(_DWORD *)(v4 + 4 * v2) + 34; } else { result = 34; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (006829E0) -------------------------------------------------------- bool __thiscall sub_6829E0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax int v3; // esi _DWORD *v4; // edi _DWORD *v6; // eax int v7; // esi _DWORD *v8; // edi char Src; // [esp+Ch] [ebp-108h] v1 = this; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sGroundItem\\GrdNIFLargeEffect_Loop.nif", byte_ACA730); v2 = sub_8F63D0(&Src, 0); v3 = v1[14]; v4 = v2; if ( (_DWORD *)v3 != v2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[14] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } if ( !v1[14] ) return 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sGroundItem\\GrdNIFLargeEffect_Noloop.nif", byte_ACA730); v6 = sub_8F63D0(&Src, 0); v7 = v1[15]; v8 = v6; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[15] = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } return v1[15] != 0; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00682B10) -------------------------------------------------------- bool __thiscall sub_682B10(_DWORD *this) { _DWORD *v1; // ebx void **v2; // eax void **v3; // edi int v4; // esi v1 = this; v2 = (void **)operator new(0x11Cu); v3 = 0; if ( v2 ) v3 = sub_684050(v2); v4 = v1[16]; if ( (void **)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[16] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); } return sub_6829E0(v1) != 0; } //----- (00682BC0) -------------------------------------------------------- int __thiscall sub_682BC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int (__stdcall ***v3)(signed int); // ecx int result; // eax _DWORD *i; // esi _DWORD *v6; // ST00_4 v1 = this; v2 = (_DWORD *)this[1]; while ( v2 ) { v3 = (int (__stdcall ***)(signed int))v2[2]; result = (int)(v2 + 2); v2 = (_DWORD *)*v2; if ( v3 ) result = (**v3)(1); } for ( i = (_DWORD *)v1[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v6) ) { v6 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; return result; } //----- (00682C20) -------------------------------------------------------- int __thiscall sub_682C20(_DWORD *this, __int16 a2) { _DWORD *v2; // ecx int result; // eax v2 = (_DWORD *)this[1]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)(result + 6) == a2 ) break; if ( !v2 ) return 0; } return result; } //----- (00682C80) -------------------------------------------------------- int __thiscall sub_682C80(_DWORD *this, int a2) { _DWORD *v2; // ecx int result; // eax v2 = (_DWORD *)this[1]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( *(_DWORD *)(result + 12) == a2 ) break; if ( !v2 ) return 0; } return result; } //----- (00682CF0) -------------------------------------------------------- int __thiscall sub_682CF0(_DWORD *this, int a2) { char v2; // al volatile LONG *v3; // esi int result; // eax int v5; // edi volatile LONG *v6; // [esp+Ch] [ebp-10h] int v7; // [esp+18h] [ebp-4h] v6 = 0; v7 = 0; v2 = sub_455570(this + 4, a2, (int *)&v6); v3 = v6; if ( v2 ) { v5 = sub_85BD60((void *)v6); v7 = -1; if ( v3 && !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v5; } else { v7 = -1; if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } result = 0; } return result; } //----- (00682DC0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_682DC0(_DWORD *this, int a2))(_DWORD, signed int) { char v2; // al void (__thiscall ***v3)(_DWORD, signed int); // esi void (__thiscall ***result)(_DWORD, signed int); // eax int v5; // [esp+8h] [ebp-10h] int v6; // [esp+14h] [ebp-4h] v5 = 0; v6 = 0; v2 = sub_455570(this + 9, a2, &v5); v3 = (void (__thiscall ***)(_DWORD, signed int))v5; v6 = -1; if ( v2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**v3)(v3, 1); result = v3; } else { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**v3)(v3, 1); } result = 0; } return result; } //----- (00682EA0) -------------------------------------------------------- void __thiscall sub_682EA0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi _DWORD *v5; // edi _DWORD *v6; // ST00_4 v1 = this; v2 = this[16]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[15]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[14]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_683A70((_BYTE *)v1 + 36); sub_6839A0((_BYTE *)v1 + 16); *v1 = &PgTList::`vftable'; v5 = (_DWORD *)v1[1]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v6); } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,DropItem *>::`vftable'; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; // 9F4EAC: using guessed type void *PgTList::`vftable'; //----- (00682FB0) -------------------------------------------------------- int __thiscall sub_682FB0(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi int v4; // edi int v5; // edi v1 = this; sub_682BC0(this); sub_940360(v1 + 4); result = sub_940360(v1 + 9); v3 = v1[14]; if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result && v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[14] = 0; } v4 = v1[15]; if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result && v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); v1[15] = 0; } v5 = v1[16]; if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } v1[16] = 0; } return result; } //----- (00683050) -------------------------------------------------------- char __thiscall sub_683050(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *v8; // edx v2 = this; v3 = (_DWORD *)this[1]; if ( !v3 ) return 0; while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( *(_WORD *)(v4 + 6) == (_WORD)a2 ) break; if ( !v3 ) return 0; } if ( !v4 ) return 0; sub_69CA60((_DWORD **)byte_ADB468, *(_DWORD *)(v4 + 12)); v6 = (_DWORD *)v2[1]; if ( v6 ) { while ( 1 ) { v7 = v6 + 2; v8 = v6; v6 = (_DWORD *)*v6; if ( v4 == *v7 ) break; if ( !v6 ) goto LABEL_9; } } else { LABEL_9: v8 = 0; } a2 = v8; if ( v8 ) sub_403620(v2, &a2); (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return 1; } //----- (006830D0) -------------------------------------------------------- void __thiscall sub_6830D0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // edi float *v4; // esi float *v5; // eax float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST20_4 int v10; // eax _DWORD *v11; // [esp+10h] [ebp-8h] float v12; // [esp+14h] [ebp-4h] v2 = (_DWORD *)this[1]; v11 = this; while ( v2 ) { v3 = v2[2]; v4 = *(float **)(v3 + 12); v2 = (_DWORD *)*v2; v5 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v6 = v4[22] - *v5; v7 = v4[23] - v5[1]; v8 = v4[24] - v5[2]; v9 = v7 * v7 + v6 * v6 + v8 * v8; v12 = sqrt(v9); v10 = *(_DWORD *)(v3 + 12); if ( (double)*((unsigned int *)dword_AD8EBC + 1361) - 1000.0 <= v12 ) { if ( v10 ) *(_WORD *)(v10 + 28) |= 1u; } else if ( v10 ) { *(_WORD *)(v10 + 28) &= 0xFFFEu; } if ( (double)*((unsigned int *)dword_AD8EBC + 1361) < v12 ) sub_683050(v11, (_DWORD *)*(unsigned __int16 *)(v3 + 6)); } } //----- (006831E0) -------------------------------------------------------- int __thiscall sub_6831E0(_DWORD *this, int a2) { int result; // eax volatile LONG *v3; // eax volatile LONG *v4; // esi int v5; // ebx int v6; // [esp-4h] [ebp-134h] int *v7; // [esp+10h] [ebp-120h] volatile LONG *v8; // [esp+14h] [ebp-11Ch] _DWORD *v9; // [esp+18h] [ebp-118h] char Src; // [esp+1Ch] [ebp-114h] int v11; // [esp+12Ch] [ebp-4h] v9 = this; result = sub_682CF0(this, a2); if ( !result ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sGroundItem\\%s.nif", byte_ACA730, a2); v3 = sub_8F63D0(&Src, 0); v4 = v3; v8 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); v11 = 0; if ( v4 ) { v7 = &v6; v6 = (int)v4; InterlockedIncrement(v4 + 1); sub_6688B0(v9 + 4, a2, v6); v5 = sub_85BD60((void *)v4); v11 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); result = v5; } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006832F0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_6832F0(_DWORD *this, int a2))(_DWORD, signed int) { _DWORD *v2; // ebx void (__thiscall ***result)(_DWORD, signed int); // eax _DWORD *v4; // esi int v5; // [esp-4h] [ebp-11Ch] int *v6; // [esp+Ch] [ebp-10Ch] char v7; // [esp+10h] [ebp-108h] v2 = this; result = sub_682DC0(this, a2); if ( !result ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v7, "%sIcon\\%s.dds", byte_ACAB50, a2); v4 = sub_486130((int)&v7); if ( v4 ) { v6 = &v5; v5 = (int)v4; InterlockedIncrement(v4 + 1); sub_6688B0(v2 + 9, a2, v5); result = (void (__thiscall ***)(_DWORD, signed int))v4; } else { result = 0; } } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006833A0) -------------------------------------------------------- void **__thiscall sub_6833A0(_DWORD *this, _DWORD *a2, void *a3, char a4, char a5) { _DWORD *v5; // ebx _DWORD *v6; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi _DWORD *v9; // eax _DWORD *v10; // eax void **v11; // esi void *v12; // ecx void (__thiscall **v13)(void **, int, _DWORD); // edi int v14; // eax void *v15; // ecx void (__thiscall **v16)(void **, int, _DWORD); // edi int v17; // eax v5 = this; v6 = (_DWORD *)sub_6831E0(this, (int)a2); if ( !v6 ) return 0; v8 = sub_6832F0(v5, (int)a3); if ( !v8 ) return 0; a2 = 0; if ( sub_8F5CC0(v6, &a2) ) { v9 = (_DWORD *)sub_85C050(a2, 8); if ( v9 ) sub_42AB40(v9, (int)v8); } v10 = operator new(0xE8u); a3 = v10; v11 = 0; if ( v10 ) v11 = (void **)sub_85A1C0(v10, 0); sub_85AB50(v11, off_AB4378); (*((void (__thiscall **)(void **, _DWORD *, _DWORD))*v11 + 29))(v11, v6, 0); if ( a5 ) { v12 = (void *)v5[14]; if ( v12 ) { v13 = (void (__thiscall **)(void **, int, _DWORD))*v11; v14 = sub_85BD60(v12); v13[29](v11, v14, 0); } if ( a4 ) { v15 = (void *)v5[15]; if ( v15 ) { v16 = (void (__thiscall **)(void **, int, _DWORD))*v11; v17 = sub_85BD60(v15); v16[29](v11, v17, 0); } } } sub_85C4D0(v11); sub_85C6F0(v11); sub_85BED0((_DWORD **)v11, 0.0, 1); return v11; } //----- (006834E0) -------------------------------------------------------- _DWORD *__thiscall sub_6834E0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST18_4 void *v4; // eax size_t v5; // ST08_4 v1 = this; this[3] = 0; this[1] = 0; this[2] = 0; *this = &PgTList::`vftable'; this[4] = &NiTMapBase,char const *,NiPointer>::`vftable'; this[5] = 37; this[7] = 0; v2 = operator new[](0x94u); v3 = 4 * v1[5]; v1[6] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 32) = 1; v1[4] = &NiTStringPointerMap>::`vftable'; v1[9] = &NiTMapBase,char const *,NiPointer>::`vftable'; v1[10] = 37; v1[12] = 0; v4 = operator new[](0x94u); v5 = 4 * v1[10]; v1[11] = v4; memset(v4, 0, v5); *((_BYTE *)v1 + 52) = 1; v1[9] = &NiTStringPointerMap>::`vftable'; v1[14] = 0; v1[15] = 0; v1[16] = 0; return v1; } // 9F4DD4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4DF4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4EAC: using guessed type void *PgTList::`vftable'; // 9F4EBC: using guessed type void *NiTStringPointerMap>::`vftable'; // 9F4EDC: using guessed type void *NiTStringPointerMap>::`vftable'; //----- (00683600) -------------------------------------------------------- char __thiscall sub_683600(_DWORD *this, int a2, _DWORD *a3, char a4, _DWORD *a5, char a6) { _DWORD *v6; // edi int v8; // esi int *v9; // eax _DWORD *v10; // esi int v11; // ebx void **v12; // ebx int v13; // eax _DWORD *v14; // ecx unsigned int v15; // edx int v16; // eax _DWORD *v17; // ebx volatile LONG *v18; // esi int v19; // edx _DWORD *v20; // eax int v21; // eax _DWORD *v22; // eax _DWORD *v23; // ecx _DWORD *v24; // esi void **v25; // [esp+10h] [ebp-3Ch] int v26; // [esp+14h] [ebp-38h] int v27; // [esp+18h] [ebp-34h] void *v28; // [esp+1Ch] [ebp-30h] int v29; // [esp+20h] [ebp-2Ch] int v30; // [esp+24h] [ebp-28h] void *v31; // [esp+30h] [ebp-1Ch] void **v32; // [esp+34h] [ebp-18h] int v33; // [esp+38h] [ebp-14h] int v34; // [esp+3Ch] [ebp-10h] int v35; // [esp+48h] [ebp-4h] unsigned int v36; // [esp+64h] [ebp+18h] float v37; // [esp+64h] [ebp+18h] void (__stdcall ***v38)(signed int); // [esp+64h] [ebp+18h] v6 = this; if ( (_WORD)a3 == -1 ) return 0; v8 = dword_ACDA70; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a2) ) return 0; if ( (unsigned __int16)a2 > *(_WORD *)(v8 + 200) ) return 0; v9 = (int *)(*(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)a2); v10 = 0; if ( !*v9 ) return 0; v11 = *v9; v34 = v11; if ( !v11 ) return 0; sub_683050(v6, a3); v12 = sub_6833A0(v6, "GrdNIFLarge", (void *)(v11 + 38), a6, a4); v13 = v6[16]; v32 = v12; if ( v13 ) { v26 = 0; v27 = -1; v25 = &NsFindGeometry::`vftable'; v28 = 0; v29 = 0; v30 = 0; v35 = 0; sub_683FE0(&v25, (int)v12, (int)dword_BA4840); v14 = v28; v15 = 0; v16 = (v29 - (signed int)v28) >> 2; v36 = 0; if ( v16 > 0 ) { while ( 1 ) { if ( v15 < v16 ) v17 = (_DWORD *)v14[v15]; else v17 = 0; sub_8633A0((int)v17, v6[16]); v18 = (volatile LONG *)operator new(0x10u); v31 = (void *)v18; LOBYTE(v35) = 1; if ( v18 ) { v33 = *(_DWORD *)(v34 + 34); sub_868D00(v18); v19 = v33; *v18 = (volatile LONG)&NiIntegerExtraData::`vftable'; *((_DWORD *)v18 + 3) = v19; } else { v18 = 0; } v31 = (void *)v18; if ( v18 ) InterlockedIncrement(v18 + 1); LOBYTE(v35) = 2; sub_85AE20(v17, "*icon", (int)v18); LOBYTE(v35) = 0; if ( v18 && !InterlockedDecrement(v18 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); v14 = v28; v16 = (v29 - (signed int)v28) >> 2; v10 = 0; if ( (signed int)++v36 >= v16 ) break; v15 = v36; } v12 = v32; } v35 = -1; if ( v14 ) operator delete(v14); v28 = 0; v29 = 0; v30 = 0; v25 = &Ns_TourScene::`vftable'; } if ( !v12 ) return 0; v37 = fabs(*(float *)(v34 + 242)); *((float *)v12 + 25) = v37; v20 = operator new(0x14u); if ( v20 ) { *v20 = &DropItem::`vftable'; v20[3] = 0; *((_BYTE *)v20 + 8) = 0; *((_BYTE *)v20 + 16) = 0; v10 = v20; } v21 = v10[3]; v38 = (void (__stdcall ***)(signed int))v21; if ( (void **)v21 != v12 ) { if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v38 ) (**v38)(1); v10[3] = v12; InterlockedIncrement((volatile LONG *)v12 + 1); } *((_BYTE *)v10 + 8) = a4; v22 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v6 + 4))(v6); v22[2] = v10; *v22 = 0; v22[1] = v6[2]; v23 = (_DWORD *)v6[2]; if ( v23 ) *v23 = v22; else v6[1] = v22; ++v6[3]; v6[2] = v22; sub_69CA10((_DWORD **)byte_ADB468, (_DWORD **)v12); *((_WORD *)v10 + 2) = a2; *((_WORD *)v10 + 3) = (_WORD)a3; v24 = (_DWORD *)v10[3]; if ( v24 ) { v24[22] = *a5; v24[23] = a5[1]; v24[24] = a5[2]; } return 1; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F4E14: using guessed type void *DropItem::`vftable'; // 9F4EFC: using guessed type void *NsFindGeometry::`vftable'; // ACDA70: using guessed type int dword_ACDA70; //----- (006838D0) -------------------------------------------------------- char __thiscall sub_6838D0(_DWORD *this, unsigned int *a2) { _DWORD *v2; // edi float v3; // ST0C_4 float v4; // ST08_4 int v6; // [esp+14h] [ebp-Ch] v2 = this; v3 = (double)a2[2]; v4 = (double)a2[1]; sub_69AD10((float *)byte_ADB468, v4, v3, (int)&v6); return sub_683600( v2, *((unsigned __int16 *)a2 + 1), (_DWORD *)*(unsigned __int16 *)a2, (*((_BYTE *)a2 + 14) >> 3) & 1, &v6, 0); } //----- (00683950) -------------------------------------------------------- void *__thiscall sub_683950(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,DropItem *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; //----- (006839A0) -------------------------------------------------------- void __thiscall sub_6839A0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // 9F4DD4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4E2C: using guessed type void *NiTPointerMap>::`vftable'; // 9F4E4C: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (00683A70) -------------------------------------------------------- void __thiscall sub_683A70(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // 9F4DF4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4E6C: using guessed type void *NiTPointerMap>::`vftable'; // 9F4E8C: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (00683B20) -------------------------------------------------------- void __thiscall sub_683B20(_BYTE *this, int a2) { if ( this[16] ) operator delete[](*(void **)(a2 + 4)); } //----- (00683B40) -------------------------------------------------------- _DWORD *__thiscall sub_683B40(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,DropItem *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,DropItem *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; // 9F4E1C: using guessed type void *NiTPointerListBase,DropItem *>::`vftable'; //----- (00683BD0) -------------------------------------------------------- int __thiscall sub_683BD0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,DropItem *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,DropItem *>::`vftable'; return result; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; // 9F4E1C: using guessed type void *NiTPointerListBase,DropItem *>::`vftable'; //----- (00683C50) -------------------------------------------------------- void **__thiscall sub_683C50(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DD4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (00683C90) -------------------------------------------------------- void **__thiscall sub_683C90(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DD4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4E2C: using guessed type void *NiTPointerMap>::`vftable'; //----- (00683D10) -------------------------------------------------------- void *__thiscall sub_683D10(void *this, char a2) { void *v2; // esi v2 = this; sub_6839A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00683D40) -------------------------------------------------------- void **__thiscall sub_683D40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DF4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (00683D80) -------------------------------------------------------- void **__thiscall sub_683D80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DF4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4E6C: using guessed type void *NiTPointerMap>::`vftable'; //----- (00683E00) -------------------------------------------------------- void *__thiscall sub_683E00(void *this, char a2) { void *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &DropItem::`vftable'; v3 = *((_DWORD *)this + 3); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4E14: using guessed type void *DropItem::`vftable'; //----- (00683E70) -------------------------------------------------------- int __thiscall sub_683E70(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,DropItem *>::`vftable'; return result; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; // 9F4EAC: using guessed type void *PgTList::`vftable'; //----- (00683EF0) -------------------------------------------------------- _DWORD *__thiscall sub_683EF0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,DropItem *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4DC4: using guessed type void *NiTListBase,DropItem *>::`vftable'; // 9F4EAC: using guessed type void *PgTList::`vftable'; //----- (00683F80) -------------------------------------------------------- void *__thiscall sub_683F80(void *this, char a2) { void *v2; // esi v2 = this; sub_683A70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00683FE0) -------------------------------------------------------- bool __thiscall sub_683FE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v6; // [esp+8h] [ebp-4h] v3 = this; v4 = this + 3; sub_4E6D30(this + 3, 0); v6 = v4; sub_8CFE00(v3, a2, a3, (int)&v6); v3[7] = (v4[1] - *v4) >> 2; return ((v4[1] - *v4) & 0xFFFFFFFC) != 0; } //----- (00684030) -------------------------------------------------------- signed int __stdcall sub_684030(char a1, _DWORD **a2) { sub_5B3CF0(*a2, &a1); return 1; } //----- (00684050) -------------------------------------------------------- void **__thiscall sub_684050(void **this) { void **v1; // esi v1 = this; sub_918D50(this); *v1 = &DynaminUV::`vftable'; v1[69] = 0; v1[70] = 0; sub_8693E0(v1, "SHDynamicUV"); return v1; } // 9F4F24: using guessed type void *DynaminUV::`vftable'; //----- (00684160) -------------------------------------------------------- char __thiscall sub_684160(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // ebx _DWORD *v4; // ecx int *v5; // edi int v6; // ecx bool v7; // zf int v8; // edi int v9; // eax int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi int v18; // edi int v19; // edi int v20; // esi _DWORD *v21; // eax int v23; // [esp+10h] [ebp-14h] void *v24; // [esp+14h] [ebp-10h] int v25; // [esp+20h] [ebp-4h] v1 = this; sub_91BE40(&v24); v2 = v24; *(_DWORD *)v24 = 0; v3 = v2[1]; v25 = 0; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[1] = 0; } sub_91A460((_DWORD *)v2[3], 0xBu, 0, 0); v4 = (_DWORD *)v2[3]; *((_BYTE *)v2 + 90) = 1; sub_91A460(v4, 0x18u, 2, 0); sub_91A460(*((_DWORD **)v24 + 3), 1u, 4, 0); sub_91A460(*((_DWORD **)v24 + 3), 2u, 2, 0); sub_91A460(*((_DWORD **)v24 + 3), 3u, 0, 0); sub_91A460(*((_DWORD **)v24 + 3), 4u, 4, 0); sub_91A460(*((_DWORD **)v24 + 3), 5u, 2, 0); sub_91A460(*((_DWORD **)v24 + 3), 6u, 0, 0); sub_91A460(*((_DWORD **)v24 + 3), 0xBu, 0, 0); v5 = sub_91DA90(&v23); v6 = v1[69]; LOBYTE(v25) = 1; if ( v6 != *v5 ) { if ( v6 ) { v7 = (*(_DWORD *)(v6 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v6); } v8 = *v5; v1[69] = v8; if ( v8 ) ++*(_DWORD *)(v8 + 104); } v9 = v23; LOBYTE(v25) = 0; if ( v23 ) { --*(_DWORD *)(v23 + 104); if ( !*(_DWORD *)(v9 + 104) ) sub_91D6F0((_BYTE *)v9); } sub_91D830((_DWORD *)v1[69], *(_DWORD *)(v1[69] + 20), v24); v10 = v1[69]; if ( !*(_DWORD *)(v10 + 56) ) *(_DWORD *)(v10 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v10 + 56), 22, 2, 0); v11 = v1[69]; if ( !*(_DWORD *)(v11 + 56) ) *(_DWORD *)(v11 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v11 + 56), 7, 1, 0); v12 = v1[69]; if ( !*(_DWORD *)(v12 + 56) ) *(_DWORD *)(v12 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v12 + 56), 14, 1, 0); v13 = v1[69]; if ( !*(_DWORD *)(v13 + 56) ) *(_DWORD *)(v13 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v13 + 56), 27, 1, 0); v14 = v1[69]; if ( !*(_DWORD *)(v14 + 56) ) *(_DWORD *)(v14 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v14 + 56), 19, 5, 0); v15 = v1[69]; if ( !*(_DWORD *)(v15 + 56) ) *(_DWORD *)(v15 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v15 + 56), 20, 6, 0); v16 = v1[69]; if ( !*(_DWORD *)(v16 + 56) ) *(_DWORD *)(v16 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v16 + 56), 28, 1, 0); v17 = v1[69]; if ( !*(_DWORD *)(v17 + 56) ) *(_DWORD *)(v17 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v17 + 56), 137, 1, 0); v18 = v1[69]; if ( !*(_DWORD *)(v18 + 56) ) *(_DWORD *)(v18 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v18 + 56), 15, 1, 0); v19 = v1[69]; if ( !*(_DWORD *)(v19 + 56) ) *(_DWORD *)(v19 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v19 + 56), 25, 7, 0); v20 = v1[69]; if ( !*(_DWORD *)(v20 + 56) ) *(_DWORD *)(v20 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v20 + 56), 24, 16, 0); v21 = v24; v25 = -1; if ( v24 ) { --*((_DWORD *)v24 + 23); if ( !v21[23] ) sub_91BD60(v21); } return 1; } //----- (00684480) -------------------------------------------------------- char __thiscall sub_684480(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_917FB0((int)this, a2); if ( result ) { sub_684160(v2); result = 1; } return result; } //----- (006844B0) -------------------------------------------------------- signed int __thiscall sub_6844B0(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // edi _DWORD **v9; // esi int v10; // edi float *v11; // eax float *v12; // esi int v13; // eax int v14; // ebx int v15; // edi int v16; // eax int v17; // edi bool v18; // zf signed int result; // eax int v20; // eax int v21; // edx v8 = (_DWORD *)this; if ( !*(_DWORD *)(this + 72) ) sub_461380(this + 64, *(void **)(this + 84)); v9 = (_DWORD **)(v8 + 69); sub_461550(v8 + 16, 0, v8 + 69); v8[14] = 1; v10 = *(_DWORD *)(a5 + 40); v11 = (float *)sub_4615D0(*v9, 0); v12 = v11; if ( v11 ) ++*((_DWORD *)v11 + 23); v13 = **(_DWORD **)(v10 + 40); if ( v13 ) v14 = *(_DWORD *)(v13 + 4); else v14 = 0; v15 = *((_DWORD *)v12 + 1); if ( v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *((_DWORD *)v12 + 1) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v16 = sub_85AA60(a2, "*icon"); v17 = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); v12[6] = 1.0; v12[10] = 0.0; v12[14] = 0.0; v12[18] = 0.0; v12[7] = 0.0; v12[15] = 0.0; v12[19] = 0.0; v12[8] = 0.0; v12[12] = 0.0; v12[20] = 0.0; v12[9] = 0.0; v12[13] = 0.0; v12[17] = 0.0; v12[11] = 1.0; v12[16] = 1.0; v12[21] = 1.0; if ( v17 ) { v20 = *(_DWORD *)(v17 + 12); v21 = *(_DWORD *)(v17 + 12); v12[6] = 0.125; v12[11] = 0.125; v12[14] = (double)(v21 % 8) * 0.125; v12[15] = 0.125 * (double)(v20 / 8); if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); if ( v12 ) { v18 = (*((_DWORD *)v12 + 23))-- == 1; if ( v18 ) sub_91BD60(v12); } result = 1; } else { if ( v12 ) { v18 = (*((_DWORD *)v12 + 23))-- == 1; if ( v18 ) sub_91BD60(v12); } result = 0; } return result; } //----- (00684680) -------------------------------------------------------- void *sub_684680() { return &unk_ADA224; } //----- (00684690) -------------------------------------------------------- _DWORD *__thiscall sub_684690(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx bool v4; // zf int v5; // ecx v2 = this; *(_DWORD *)this = &DynaminUV::`vftable'; v3 = *((_DWORD *)this + 69); if ( v3 ) { v4 = (*(_DWORD *)(v3 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v3); v2[69] = 0; } v5 = v2[69]; if ( v5 ) { v4 = (*(_DWORD *)(v5 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v5); } sub_918270(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F4F24: using guessed type void *DynaminUV::`vftable'; //----- (00684730) -------------------------------------------------------- bool __stdcall sub_684730(int a1) { int v1; // eax v1 = *(_DWORD *)(a1 + 102); return v1 == 5 || v1 == 26 || v1 == 37 || v1 == 7; } //----- (00684760) -------------------------------------------------------- void __thiscall sub_684760(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 223; v2 = 192; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (006847B0) -------------------------------------------------------- void __thiscall sub_6847B0(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 415; v2 = 11; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00684800) -------------------------------------------------------- void __thiscall sub_684800(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 1; v2 = 192; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00684850) -------------------------------------------------------- void __thiscall sub_684850(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 193; v2 = 30; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (006848A0) -------------------------------------------------------- void __thiscall sub_6848A0(_DWORD *this) { int *v1; // edi signed int v2; // ebx int v3; // esi _DWORD *v4; // [esp+Ch] [ebp-4h] v4 = this; v1 = this + 818; v2 = 192; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = 0; } ++v1; --v2; } while ( v2 ); v4[1010] = 0; } //----- (00684900) -------------------------------------------------------- void __thiscall sub_684900(_DWORD *this) { int *v1; // edi signed int v2; // ebx int v3; // esi _DWORD *v4; // [esp+Ch] [ebp-4h] v4 = this; v1 = this + 1011; v2 = 42; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = 0; } ++v1; --v2; } while ( v2 ); v4[1053] = 0; } //----- (00684960) -------------------------------------------------------- void __thiscall sub_684960(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 622; v2 = 98; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (006849B0) -------------------------------------------------------- void __thiscall sub_6849B0(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 426; v2 = 98; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00684A00) -------------------------------------------------------- void __thiscall sub_684A00(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 524; v2 = 98; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00684A50) -------------------------------------------------------- void __thiscall sub_684A50(int *this) { int *v1; // edi signed int v2; // ebx int v3; // esi v1 = this + 720; v2 = 98; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *v1 = 0; } ++v1; --v2; } while ( v2 ); } //----- (00684AA0) -------------------------------------------------------- bool __thiscall sub_684AA0(_DWORD *this, int a2, unsigned int a3, int a4) { bool result; // al switch ( a2 ) { case 3: if ( a3 >= 0x62 ) goto LABEL_10; sub_56FF80(&this[a3 + 426], a4); result = a4 != 0; break; case 13: if ( a3 >= 0x62 ) goto LABEL_10; sub_56FF80(&this[a3 + 524], a4); result = a4 != 0; break; case 14: if ( a3 >= 0x62 ) goto LABEL_10; sub_56FF80(&this[a3 + 622], a4); result = a4 != 0; break; case 16: if ( a3 >= 0x62 ) goto LABEL_10; sub_56FF80(&this[a3 + 720], a4); result = a4 != 0; break; default: LABEL_10: result = 0; break; } return result; } //----- (00684CE0) -------------------------------------------------------- int __thiscall sub_684CE0(_DWORD *this) { int result; // eax _DWORD *v2; // ecx signed int v3; // edx result = 0; v2 = this + 2; v3 = 32; do { if ( *(v2 - 1) ) ++result; if ( *v2 ) ++result; if ( v2[1] ) ++result; if ( v2[2] ) ++result; if ( v2[3] ) ++result; if ( v2[4] ) ++result; v2 += 6; --v3; } while ( v3 ); return result; } //----- (00684D30) -------------------------------------------------------- int __thiscall sub_684D30(_DWORD *this) { return this[203]; } //----- (00684D60) -------------------------------------------------------- int __thiscall sub_684D60(_DWORD *this) { return this[222]; } //----- (00684D70) -------------------------------------------------------- int __thiscall sub_684D70(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int result; // eax v1 = this; v2 = this[206]; if ( v2 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[206]) == 26 || (v2 = v1[204]) != 0 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(v1[204]) == 26 ) { result = v2; } else { result = 0; } return result; } //----- (00684DB0) -------------------------------------------------------- int __thiscall sub_684DB0(_DWORD *this) { int v1; // esi int result; // eax v1 = this[222]; if ( v1 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v1 + 4))(this[222]) == 37 ) result = v1; else result = 0; return result; } //----- (00684DD0) -------------------------------------------------------- bool __stdcall sub_684DD0(int a1) { int v1; // esi bool result; // al int v3; // esi v1 = dword_ADA568; result = 1; if ( dword_ADA568 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA568 + 4))(dword_ADA568) == 26 || (v1 = dword_ADA560) != 0 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA560 + 4))(dword_ADA560) == 26 ) { v3 = *(_DWORD *)(v1 + 112); if ( *(_DWORD *)(v3 + 232) != *(_DWORD *)(a1 + 232) || *(_BYTE *)(v3 + 122) != *(_BYTE *)(a1 + 122) ) result = 0; } return result; } // ADA560: using guessed type int dword_ADA560; // ADA568: using guessed type int dword_ADA568; //----- (00684E30) -------------------------------------------------------- bool __stdcall sub_684E30(int a1) { int v1; // esi bool result; // al int v3; // esi v1 = dword_ADA55C; result = 0; if ( !dword_ADA55C || ((*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA55C + 4))(dword_ADA55C) != 5 || *(_DWORD *)(*(_DWORD *)(v1 + 112) + 232) == *(_DWORD *)(a1 + 232)) && *(_BYTE *)(*(_DWORD *)(v1 + 112) + 122) == *(_BYTE *)(a1 + 122) ) { v3 = dword_ADA564; if ( !dword_ADA564 || ((*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA564 + 4))(dword_ADA564) != 5 || *(_DWORD *)(*(_DWORD *)(v3 + 112) + 232) == *(_DWORD *)(a1 + 232)) && *(_BYTE *)(*(_DWORD *)(v3 + 112) + 122) == *(_BYTE *)(a1 + 122) ) { result = 1; } } return result; } // ADA55C: using guessed type int dword_ADA55C; // ADA564: using guessed type int dword_ADA564; //----- (00684EB0) -------------------------------------------------------- bool __stdcall sub_684EB0(int a1) { int v1; // esi bool result; // al v1 = dword_ADA568; if ( dword_ADA568 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA568 + 4))(dword_ADA568) == 26 || (v1 = dword_ADA560) != 0 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA560 + 4))(dword_ADA560) == 26 ) { result = *(_BYTE *)(*(_DWORD *)(v1 + 112) + 122) == *(_BYTE *)(a1 + 122); } else { result = 1; } return result; } // ADA560: using guessed type int dword_ADA560; // ADA568: using guessed type int dword_ADA568; //----- (00684F00) -------------------------------------------------------- bool __stdcall sub_684F00(int a1) { int v2; // esi if ( !a1 || dword_ADA55C && (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ADA55C + 4))() != 7 || dword_ADA564 && *(_BYTE *)(*(_DWORD *)(dword_ADA564 + 112) + 122) != *(_BYTE *)(a1 + 122) ) { return 0; } v2 = dword_ADA568; return (!dword_ADA568 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA568 + 4))(dword_ADA568) != 26) && ((v2 = dword_ADA560) == 0 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_ADA560 + 4))(dword_ADA560) != 26) || *(_BYTE *)(*(_DWORD *)(v2 + 112) + 122) == *(_BYTE *)(a1 + 122); } // ADA55C: using guessed type int dword_ADA55C; // ADA560: using guessed type int dword_ADA560; // ADA564: using guessed type int dword_ADA564; // ADA568: using guessed type int dword_ADA568; //----- (00684F90) -------------------------------------------------------- void __thiscall sub_684F90(_DWORD *this) { _DWORD *v1; // edi int *v2; // esi int v3; // eax int v4; // edx v1 = this; v2 = (int *)this[206]; if ( v2 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*v2 + 4))(this[206]) == 26 || (v2 = (int *)v1[204]) != 0 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*v2 + 4))(v1[204]) == 26 ) { v3 = (*(int (__thiscall **)(int *))(*v2 + 76))(v2); v4 = *v2; if ( v3 ) (*(void (__thiscall **)(int *, int))(v4 + 80))(v2, v3 - 1); else (*(void (__thiscall **)(int *, _DWORD))(v4 + 80))(v2, 0); } } //----- (00684FF0) -------------------------------------------------------- void __thiscall sub_684FF0(_DWORD *this) { int *v1; // esi int v2; // eax int v3; // edx v1 = (int *)this[222]; if ( v1 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*v1 + 4))(this[222]) == 37 ) { v2 = (*(int (__thiscall **)(int *))(*v1 + 76))(v1); v3 = *v1; if ( v2 ) (*(void (__thiscall **)(int *, int))(v3 + 80))(v1, v2 - 1); else (*(void (__thiscall **)(int *, _DWORD))(v3 + 80))(v1, 0); } } //----- (00685060) -------------------------------------------------------- char __thiscall sub_685060(_DWORD *this, __int16 a2) { signed int v2; // edi _DWORD *v3; // ebx _WORD *v4; // esi unsigned int v5; // ST0C_4 v2 = 0; v3 = this + 1; while ( 1 ) { v4 = (_WORD *)*v3; if ( !*v3 ) break; if ( v4[4] == a2 ) { v5 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 16))((_WORD *)*v3); if ( (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 12))(v4) < v5 ) break; } ++v2; ++v3; if ( v2 >= 192 ) return 0; } return 1; } //----- (006850C0) -------------------------------------------------------- void __thiscall sub_6850C0(_DWORD *this, unsigned __int16 a2) { int v2; // esi unsigned __int16 v3; // di _DWORD *v4; // esi signed int v5; // ebx int v6; // eax v2 = this[205]; if ( v2 || (v2 = this[203]) != 0 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 4))(v2) == 5 ) { v3 = a2; v4 = (_DWORD *)(v2 + 19); v5 = 3; do { if ( *((_WORD *)v4 - 1) == v3 ) { v6 = sub_74CC20(dword_B9DE68, v3, *v4 & 0xFFFFFFF, (unsigned int *)&a2); if ( v6 ) { if ( (*v4 & 0xFFFFFFFu) < *(_DWORD *)(v6 + 35) ) *v4 ^= (*v4 ^ (*v4 + 1)) & 0xFFFFFFF; } } v4 = (_DWORD *)((char *)v4 + 6); --v5; } while ( v5 ); } } } //----- (00685140) -------------------------------------------------------- int __thiscall sub_685140(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int result; // eax v1 = this; v2 = this[205]; if ( v2 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[205]) == 5 || (v2 = v1[203]) != 0 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(v1[203]) == 5 ) { result = v2; } else { result = 0; } return result; } //----- (00685240) -------------------------------------------------------- bool __thiscall sub_685240(_DWORD *this, int a2) { _DWORD *v2; // ebx unsigned __int16 *v3; // edi int v4; // esi int v5; // esi int v6; // edi int *v7; // eax unsigned __int16 *v8; // edi int v9; // edi int v10; // ecx bool result; // al bool v12; // dl bool v13; // bl bool v14; // cl int v15; // ecx char v16; // dl char v17; // [esp+Dh] [ebp-7h] bool v18; // [esp+Eh] [ebp-6h] bool v19; // [esp+Fh] [ebp-5h] bool v20; // [esp+10h] [ebp-4h] bool v21; // [esp+11h] [ebp-3h] bool v22; // [esp+12h] [ebp-2h] bool v23; // [esp+13h] [ebp-1h] bool v24; // [esp+1Fh] [ebp+Bh] v2 = this; v3 = (unsigned __int16 *)this[205]; v4 = 0; if ( v3 && (*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v3 + 4))(v3) == 5 ) { v5 = dword_ACB230; v6 = v3[4]; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v7 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v6); if ( *v7 ) { v4 = *v7; if ( *v7 ) goto LABEL_13; } else { v4 = 0; } } else { v4 = 0; } } else { v4 = 0; } } v8 = (unsigned __int16 *)v2[203]; if ( v8 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v8 + 4))(v2[203]) == 5 ) v4 = sub_49F760(v8[4]); LABEL_13: v9 = a2; v17 = 0; if ( a2 == 7 ) { v10 = v2[203]; if ( v10 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v10 + 4))() == 7 ) v17 = 1; } } result = 0; v12 = 0; v13 = 0; v14 = 0; v24 = 0; v23 = 0; v22 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; if ( v4 ) { v15 = *(_DWORD *)(v4 + 232); if ( v15 == 16 ) return 0; v16 = *(_BYTE *)(v4 + 122); result = v16 == 1; v12 = v16 == 0; v24 = v15 == 5; v23 = v15 == 13; v22 = v15 == 2; v21 = v15 == 10; v20 = v15 == 3; v19 = v15 == 11; v18 = v15 == 17; v13 = v15 == 18; v14 = v15 == 19; } switch ( v9 ) { case 0: result = v12; break; case 1: return result; case 2: case 6: result = 1; break; case 3: result = result || v12 || v24 || v23 || v22 || v21 || v20 || v19 || v18 || v13 || v14; break; case 4: result = v23; break; case 5: result = v24; break; case 7: result = v17; break; case 8: result = v22; break; case 9: result = v21; break; case 10: result = v20; break; case 11: result = v19; break; case 12: result = v13; break; case 13: result = v18; break; case 14: result = v14; break; default: return 0; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (006854B0) -------------------------------------------------------- int __thiscall sub_6854B0(_DWORD *this, __int16 a2) { int v2; // ebx _DWORD *v3; // edi _WORD *v4; // esi signed int v6; // [esp+Ch] [ebp-4h] v2 = 0; v3 = this + 1; v6 = 192; do { v4 = (_WORD *)*v3; if ( *v3 && v4[4] == a2 ) { if ( (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 16))((_WORD *)*v3) == 1 ) ++v2; else v2 += (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 12))(v4); } ++v3; --v6; } while ( v6 ); return v2; } //----- (00685510) -------------------------------------------------------- int __thiscall sub_685510(_DWORD *this, __int16 a2) { signed int v3; // eax int v4; // edx signed int v5; // eax int v6; // edx if ( a2 == -1 ) return 0; v3 = 0; v4 = (int)(this + 193); do { if ( *(_DWORD *)v4 && *(_WORD *)(*(_DWORD *)v4 + 8) == a2 ) return this[v3 + 193]; ++v3; v4 += 4; } while ( v3 < 30 ); v5 = 0; v6 = (int)(this + 1); while ( !*(_DWORD *)v6 || *(_WORD *)(*(_DWORD *)v6 + 8) != a2 ) { ++v5; v6 += 4; if ( v5 >= 192 ) return 0; } return this[v5 + 1]; } //----- (00685590) -------------------------------------------------------- int __thiscall sub_685590(char *this, __int16 a2) { char *v2; // ebx int v3; // esi signed int v4; // edi _WORD *v5; // ecx int v6; // esi signed int v7; // edi _WORD *v8; // ecx int v10; // [esp+Ch] [ebp-4h] v2 = this; v10 = 0; v3 = (int)(this + 772); v4 = 30; do { v5 = *(_WORD **)v3; if ( *(_DWORD *)v3 && v5[4] == a2 && (unsigned int)(*(int (**)(void))(*(_DWORD *)v5 + 16))() > 1 ) v10 += (*(int (**)(void))(**(_DWORD **)v3 + 12))(); v3 += 4; --v4; } while ( v4 ); v6 = (int)(v2 + 4); v7 = 192; do { v8 = *(_WORD **)v6; if ( *(_DWORD *)v6 && v8[4] == a2 && (unsigned int)(*(int (**)(void))(*(_DWORD *)v8 + 16))() >= 1 ) v10 += (*(int (**)(void))(**(_DWORD **)v6 + 12))(); v6 += 4; --v7; } while ( v7 ); return v10; } //----- (00685620) -------------------------------------------------------- int __thiscall sub_685620(char *this) { int v1; // ebx int v2; // edi int v3; // esi int v4; // ecx int v5; // eax signed int v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v8 = 0; v1 = (int)(this + 4); v7 = 192; do { if ( *(_DWORD *)v1 ) { v2 = *(unsigned __int16 *)(*(_DWORD *)v1 + 8); v3 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v4 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v4 + 4 * v2) ) { v5 = *(_DWORD *)(v4 + 4 * v2); if ( v5 ) { if ( !strcmp((const char *)(v5 + 2), "FreeStatusReloadOne") ) v8 += (*(int (**)(void))(**(_DWORD **)v1 + 12))(); } } } } } v1 += 4; --v7; } while ( v7 ); return v8; } // ACB230: using guessed type int dword_ACB230; //----- (006856E0) -------------------------------------------------------- int __thiscall sub_6856E0(char *this) { int v1; // ebx int v2; // edi int v3; // esi int v4; // ecx int v5; // eax signed int v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v8 = 0; v1 = (int)(this + 4); v7 = 192; do { if ( *(_DWORD *)v1 ) { v2 = *(unsigned __int16 *)(*(_DWORD *)v1 + 8); v3 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v4 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v4 + 4 * v2) ) { v5 = *(_DWORD *)(v4 + 4 * v2); if ( v5 ) { if ( !strcmp((const char *)(v5 + 2), "SkillReloadbundleOne") ) v8 += (*(int (**)(void))(**(_DWORD **)v1 + 12))(); } } } } } v1 += 4; --v7; } while ( v7 ); return v8; } // ACB230: using guessed type int dword_ACB230; //----- (006857A0) -------------------------------------------------------- char __thiscall sub_6857A0(char *this, _WORD *a2) { signed int v2; // ebx int v3; // ecx int v4; // edi int v5; // esi int *v6; // eax int v7; // eax int v9; // [esp+Ch] [ebp-4h] v2 = 0; v3 = (int)(this + 4); v9 = v3; while ( 1 ) { if ( *(_DWORD *)v3 ) { v4 = *(unsigned __int16 *)(*(_DWORD *)v3 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4); if ( *v6 ) { v7 = *v6; if ( v7 ) { if ( !strcmp((const char *)(v7 + 2), "EnchantSocketAdd") ) break; } } } } } ++v2; v3 = v9 + 4; v9 += 4; if ( v2 >= 192 ) return 0; } *a2 = v2 & 0x3FF | 0x2400; return 1; } // ACB230: using guessed type int dword_ACB230; //----- (00685860) -------------------------------------------------------- char __thiscall sub_685860(char *this, _WORD *a2) { signed int v2; // ebx int v3; // ecx int v4; // edi int v5; // esi int *v6; // eax int v7; // eax int v9; // [esp+Ch] [ebp-4h] v2 = 0; v3 = (int)(this + 4); v9 = v3; while ( 1 ) { if ( *(_DWORD *)v3 ) { v4 = *(unsigned __int16 *)(*(_DWORD *)v3 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4); if ( *v6 ) { v7 = *v6; if ( v7 ) { if ( !strcmp((const char *)(v7 + 2), "EnchantSocketReload") ) break; } } } } } ++v2; v3 = v9 + 4; v9 += 4; if ( v2 >= 192 ) return 0; } *a2 = v2 & 0x3FF | 0x2400; return 1; } // ACB230: using guessed type int dword_ACB230; //----- (00685920) -------------------------------------------------------- char __thiscall sub_685920(char *this, _WORD *a2) { signed int v2; // ebx int v3; // ecx int v4; // edi int v5; // esi int *v6; // eax int v7; // eax int v9; // [esp+Ch] [ebp-4h] v2 = 0; v3 = (int)(this + 4); v9 = v3; while ( 1 ) { if ( *(_DWORD *)v3 ) { v4 = *(unsigned __int16 *)(*(_DWORD *)v3 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4); if ( *v6 ) { v7 = *v6; if ( v7 ) { if ( !strcmp((const char *)(v7 + 2), "LicenseClear") ) break; } } } } } ++v2; v3 = v9 + 4; v9 += 4; if ( v2 >= 192 ) return 0; } *a2 = v2 & 0x3FF | 0x2400; return 1; } // ACB230: using guessed type int dword_ACB230; //----- (006859E0) -------------------------------------------------------- unsigned int __thiscall sub_6859E0(char *this, int a2) { char *v2; // edi unsigned int v3; // edx unsigned int v4; // esi _DWORD *v5; // edi int v6; // ebx unsigned int v7; // ST1C_4 _DWORD *v8; // ecx unsigned int result; // eax _DWORD *v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+18h] [ebp-4h] v2 = this; sub_6F3170(2, &v12); v3 = 8 * (3 * v12 + 6); v4 = 0; v5 = v2 + 4; v11 = 8 * (3 * v12 + 6); v10 = v5; do { if ( v4 >= v3 ) break; if ( *v5 && *(_WORD *)(*v5 + 8) == *(_WORD *)(a2 + 8) ) { v6 = *v5; v7 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)*v5 + 12))(*v5); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 16))(v6) > v7 ) return v4; v3 = v11; } ++v4; ++v5; } while ( v4 < 0xC0 ); v8 = v10; result = 0; do { if ( result >= v3 ) break; if ( !*v8 ) return result; ++result; ++v8; } while ( result < 0x240 ); return -1; } //----- (00685A90) -------------------------------------------------------- int __thiscall sub_685A90(_DWORD *this, int a2) { signed int v2; // eax int v3; // edx signed int v4; // eax int v5; // edx signed int v6; // eax int v7; // edx signed int v8; // eax int v9; // edx v2 = 0; v3 = (int)(this + 426); do { if ( *(_DWORD *)v3 && *(unsigned __int16 *)(*(_DWORD *)v3 + 11) == a2 ) return this[v2 + 426]; ++v2; v3 += 4; } while ( v2 < 98 ); v4 = 0; v5 = (int)(this + 524); do { if ( *(_DWORD *)v5 && *(unsigned __int16 *)(*(_DWORD *)v5 + 11) == a2 ) return this[v4 + 524]; ++v4; v5 += 4; } while ( v4 < 98 ); v6 = 0; v7 = (int)(this + 622); do { if ( *(_DWORD *)v7 && *(unsigned __int16 *)(*(_DWORD *)v7 + 11) == a2 ) return this[v6 + 622]; ++v6; v7 += 4; } while ( v6 < 98 ); v8 = 0; v9 = (int)(this + 720); while ( !*(_DWORD *)v9 || *(unsigned __int16 *)(*(_DWORD *)v9 + 11) != a2 ) { ++v8; v9 += 4; if ( v8 >= 98 ) return 0; } return this[v8 + 720]; } //----- (00685BB0) -------------------------------------------------------- signed int __thiscall sub_685BB0(char *this, __int16 a2) { signed int result; // eax int v3; // ecx result = 0; v3 = (int)(this + 4); while ( !*(_DWORD *)v3 || *(_WORD *)(*(_DWORD *)v3 + 8) != a2 ) { ++result; v3 += 4; if ( result >= 192 ) return -1; } return result; } //----- (00685BE0) -------------------------------------------------------- unsigned int __thiscall sub_685BE0(char *this, _WORD *a2) { int v2; // ebx int v3; // edi int v4; // esi int v5; // ecx int v6; // eax signed int v8; // [esp+Ch] [ebp-8h] unsigned int v9; // [esp+10h] [ebp-4h] v9 = 0; v2 = (int)(this + 4); v8 = 192; do { if ( *(_DWORD *)v2 ) { v3 = *(unsigned __int16 *)(*(_DWORD *)v2 + 8); v4 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) ) { if ( (unsigned __int16)v3 <= *(_WORD *)(v4 + 200) ) { v5 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v5 + 4 * v3) ) { v6 = *(_DWORD *)(v5 + 4 * v3); if ( v6 ) { if ( !strcmp((const char *)(v6 + 2), "RandomOption_Recover") ) v9 += (*(int (**)(void))(**(_DWORD **)v2 + 12))(); } } } } } v2 += 4; --v8; } while ( v8 ); if ( v9 < 1 ) return 0; *a2 = *a2 & 0x3FF | 0x2400; return v9; } // ACB230: using guessed type int dword_ACB230; //----- (00685CC0) -------------------------------------------------------- void __thiscall sub_685CC0(int this) { int v1; // esi v1 = this; `eh vector destructor iterator'((void *)(this + 4044), 4u, 42, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 3272), 4u, 192, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 2880), 4u, 98, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 2488), 4u, 98, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 2096), 4u, 98, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 1704), 4u, 98, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 1660), 4u, 11, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 892), 4u, 192, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 772), 4u, 30, sub_410C00); `eh vector destructor iterator'((void *)(v1 + 4), 4u, 192, sub_410C00); } //----- (00685E00) -------------------------------------------------------- void __thiscall sub_685E00(int *this) { int *v1; // esi v1 = this; sub_684760(this); sub_6847B0(v1); } //----- (00685E60) -------------------------------------------------------- LONG __thiscall sub_685E60(_DWORD *this, LONG a2, int a3, unsigned int a4) { LONG result; // eax result = a2; switch ( a2 ) { case 2: result = sub_4DC8E0(this, a3, a4); break; case 8: result = sub_4DC880(this, a3, a4); break; case 9: result = sub_686860(this, a3, a4); break; case 12: if ( a4 <= 0xA ) result = sub_686920(this, a3, a4); else result = sub_6868C0(this, a3, a4 - 11); break; case 15: result = sub_686980(this, a3, a4); break; default: return result; } return result; } //----- (00686010) -------------------------------------------------------- void __thiscall sub_686010(int *this) { int *v1; // esi v1 = this; sub_684960(this); sub_6849B0(v1); sub_684A00(v1); sub_684A50(v1); } //----- (00686030) -------------------------------------------------------- signed int __thiscall sub_686030(int *this, unsigned __int8 *a2, int a3) { unsigned __int8 *v3; // edi unsigned __int8 v4; // al int *v5; // esi int v6; // eax unsigned __int8 *v8; // ebx _DWORD *v9; // eax int *v10; // ecx unsigned int v11; // edx int v12; // [esp-8h] [ebp-1Ch] int v13; // [esp+8h] [ebp-Ch] int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] signed int v16; // [esp+1Ch] [ebp+8h] v3 = a2; v4 = a2[1]; v5 = this; *(_BYTE *)this = 0; if ( a2[2] & 1 ) { switch ( v4 ) { case 2u: sub_6848A0(this); break; case 3u: sub_6849B0(this); break; case 8u: sub_684850(this); break; case 9u: sub_684800(this); break; case 0xCu: sub_684760(this); sub_6847B0(v5); break; case 0xDu: sub_684A00(this); break; case 0xEu: sub_684960(this); break; case 0xFu: sub_684900(this); break; case 0x10u: sub_684A50(this); break; default: break; } } v6 = *a2; v15 = 0; v16 = 3; if ( !v6 ) return 3; v8 = v3 + 3; if ( v6 ) { v13 = v6; do { v9 = sub_688200(v8, &v14, &v15); if ( v9 ) { v16 += v15; v8 += v15; switch ( (unsigned int)(unsigned __int16)v14 >> 10 ) { case 2u: v10 = &v5[(v14 & 0x3FF) + 818]; goto LABEL_36; case 3u: if ( (v14 & 0x3FFu) < 0x62 ) { v10 = &v5[(v14 & 0x3FF) + 426]; if ( !*v10 ) goto LABEL_36; } break; case 7u: (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); break; case 8u: v10 = &v5[(v14 & 0x3FF) + 193]; goto LABEL_36; case 9u: v10 = &v5[(v14 & 0x3FF) + 1]; goto LABEL_36; case 0xCu: v11 = v14 & 0x3FF; v12 = (int)v9; if ( v11 < 0xB ) v10 = &v5[v11 + 415]; else v10 = &v5[v11 + 212]; goto LABEL_37; case 0xDu: if ( (v14 & 0x3FFu) >= 0x62 ) break; v10 = &v5[(v14 & 0x3FF) + 524]; goto LABEL_36; case 0xEu: if ( (v14 & 0x3FFu) >= 0x62 ) break; v10 = &v5[(v14 & 0x3FF) + 622]; goto LABEL_36; case 0xFu: v10 = &v5[(v14 & 0x3FF) + 1011]; goto LABEL_36; case 0x10u: if ( (v14 & 0x3FFu) < 0x62 ) { v10 = &v5[(v14 & 0x3FF) + 720]; LABEL_36: v12 = (int)v9; LABEL_37: sub_56FF80(v10, v12); } break; default: break; } } else { v16 += v15; v8 += v15; } --v13; } while ( v13 ); } return v16; } //----- (006862A0) -------------------------------------------------------- bool __stdcall sub_6862A0(int a1) { bool result; // al result = 1; switch ( *(_DWORD *)(a1 + 102) ) { case 5: result = sub_684DD0(a1); break; case 7: result = sub_684EB0(a1); break; case 0x1A: result = sub_684E30(a1); break; case 0x25: result = sub_684F00(a1); break; default: return result; } return result; } //----- (00686330) -------------------------------------------------------- __int16 __thiscall sub_686330(_DWORD *this) { int v1; // eax int v2; // eax __int16 *v3; // eax __int16 result; // ax v1 = this[415]; if ( v1 && *(_WORD *)(v1 + 8) != -1 && (v2 = *(_DWORD *)(v1 + 116)) != 0 && (v3 = (__int16 *)sub_548E10((const char *)(v2 + 2))) != 0 ) { result = *v3; } else { result = 0; } return result; } //----- (00686370) -------------------------------------------------------- char *__thiscall sub_686370(_DWORD *this) { int v1; // eax int v2; // eax int v3; // eax int v4; // eax char *v5; // edx char v6; // cl v1 = this[415]; if ( v1 ) { if ( *(_WORD *)(v1 + 8) != -1 ) { v2 = *(_DWORD *)(v1 + 116); if ( v2 ) { v3 = sub_548E10((const char *)(v2 + 2)); if ( v3 ) { v4 = v3 + 34; v5 = &aSfxLearnskill[-v4]; do { v6 = *(_BYTE *)v4; v5[v4] = *(_BYTE *)v4; ++v4; } while ( v6 ); } } } } return aSfxLearnskill; } //----- (006863C0) -------------------------------------------------------- char __thiscall sub_6863C0(char *this) { char *v1; // esi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx int v6; // [esp+4h] [ebp-4h] v1 = this; sub_6F3170(2, &v6); v2 = 0; v3 = 8 * (3 * v6 + 6); if ( !v3 ) return 1; v4 = v1 + 4; while ( v2 < 0xC0 && *v4 ) { ++v2; ++v4; if ( v2 >= v3 ) return 1; } return 0; } //----- (00686420) -------------------------------------------------------- int __thiscall sub_686420(char *this) { char *v1; // esi __int64 v2; // rax unsigned int v3; // ecx _DWORD *v4; // esi int v6; // [esp+4h] [ebp-4h] v1 = this; v6 = 0; sub_6F3170(2, &v6); v2 = 0i64; v3 = 8 * (3 * v6 + 6); if ( v3 ) { v4 = v1 + 4; do { if ( HIDWORD(v2) >= 0xC0 || !*v4 ) LODWORD(v2) = v2 + 1; ++HIDWORD(v2); ++v4; } while ( HIDWORD(v2) < v3 ); } return v2; } //----- (00686470) -------------------------------------------------------- int __thiscall sub_686470(int this) { int v1; // esi v1 = this; `eh vector constructor iterator'( (void *)(this + 4), 4u, 192, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 772), 4u, 30, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 892), 4u, 192, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 1660), 4u, 11, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 1704), 4u, 98, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 2096), 4u, 98, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 2488), 4u, 98, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 2880), 4u, 98, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 3272), 4u, 192, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( (void *)(v1 + 4044), 4u, 42, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *(_BYTE *)v1 = 0; *(_DWORD *)(v1 + 4040) = 0; *(_DWORD *)(v1 + 4212) = 0; return v1; } //----- (00686600) -------------------------------------------------------- void __thiscall sub_686600(int *this) { int *v1; // esi v1 = this; sub_684800(this); sub_684850(v1); sub_6848A0(v1); sub_684760(v1); sub_6847B0(v1); sub_684760(v1); sub_6847B0(v1); sub_6849B0(v1); sub_684A00(v1); sub_684960(v1); sub_684900(v1); } //----- (00686650) -------------------------------------------------------- char __thiscall sub_686650(char *this, _WORD *a2) { char *v2; // esi int v3; // esi int v4; // edi int v5; // esi int v6; // edx int v7; // eax unsigned __int8 *v8; // edx unsigned int v9; // esi unsigned int v10; // edi unsigned int v11; // ecx unsigned int v12; // ebx unsigned __int8 *v13; // eax int v14; // eax bool v15; // zf signed int v16; // eax int v18; // [esp+14h] [ebp-50h] signed int v19; // [esp+18h] [ebp-4Ch] void *v20; // [esp+1Ch] [ebp-48h] unsigned int v21; // [esp+2Ch] [ebp-38h] unsigned int v22; // [esp+30h] [ebp-34h] void *v23; // [esp+38h] [ebp-2Ch] unsigned int v24; // [esp+48h] [ebp-1Ch] unsigned int v25; // [esp+4Ch] [ebp-18h] int v26; // [esp+60h] [ebp-4h] v2 = this; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, "MVault", 6u); v3 = (int)(v2 + 4); v26 = 0; v19 = 0; v18 = v3; while ( 1 ) { if ( *(_DWORD *)v3 ) { v4 = *(unsigned __int16 *)(*(_DWORD *)v3 + 8); v5 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v5 + 200) ) { v6 = *(_DWORD *)(v5 + 196); if ( *(_DWORD *)(v6 + 4 * v4) ) { v7 = *(_DWORD *)(v6 + 4 * v4); if ( v7 ) break; } } } } LABEL_24: v3 = v18 + 4; ++v19; v18 += 4; if ( v19 >= 192 ) { if ( v22 >= 0x10 ) operator delete(v20); return 0; } } v25 = 15; v24 = 0; LOBYTE(v23) = 0; sub_4018E0(&v23, (void *)(v7 + 2), strlen((const char *)(v7 + 2))); LOBYTE(v26) = 1; if ( v21 > v24 ) sub_40AB50(&v23, v21 - v24, 0); else sub_4014F0(&v23, v21, 0xFFFFFFFF); v8 = (unsigned __int8 *)v20; if ( v22 < 0x10 ) v8 = (unsigned __int8 *)&v20; v9 = v24; v10 = v21; v11 = v24; if ( v24 >= v21 ) v11 = v21; v12 = v25; v13 = (unsigned __int8 *)v23; if ( v25 < 0x10 ) v13 = (unsigned __int8 *)&v23; v14 = sub_40C0B0(v13, v8, v11); v15 = v14 == 0; if ( !v14 ) { if ( v9 >= v10 ) v16 = v9 != v10; else v16 = -1; v15 = v16 == 0; } if ( !v15 ) { LOBYTE(v26) = v15; if ( v12 >= 0x10 ) operator delete(v23); goto LABEL_24; } *a2 = v19 & 0x3FF | 0x2400; if ( v12 >= 0x10 ) operator delete(v23); v25 = 15; v24 = 0; LOBYTE(v23) = 0; if ( v22 >= 0x10 ) operator delete(v20); return 1; } // ACB230: using guessed type int dword_ACB230; //----- (00686860) -------------------------------------------------------- LONG __thiscall sub_686860(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx int v5; // esi result = a3; v4 = this; v5 = this[a3 + 1]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 1] = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (006868C0) -------------------------------------------------------- LONG __thiscall sub_6868C0(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx int v5; // esi result = a3; v4 = this; v5 = this[a3 + 223]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 223] = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (00686920) -------------------------------------------------------- LONG __thiscall sub_686920(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx int v5; // esi result = a3; v4 = this; v5 = this[a3 + 415]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 415] = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (00686980) -------------------------------------------------------- LONG __thiscall sub_686980(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // esi int v5; // edi result = a3; v4 = this; v5 = this[a3 + 1011]; if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[a3 + 1011] = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } ++v4[1053]; return result; } //----- (006869F0) -------------------------------------------------------- int __thiscall sub_6869F0(char *this) { char *v1; // esi int result; // eax v1 = this; switch ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 4))() ) { case 4u: case 0xAu: result = *(_DWORD *)(v1 + 14); break; case 5u: case 6u: case 7u: case 8u: result = *(_DWORD *)(v1 + 13); break; case 0x17u: result = *(_DWORD *)(v1 + 18); break; default: result = 0; break; } return result; } //----- (00686A50) -------------------------------------------------------- char __thiscall sub_686A50(_BYTE *this, unsigned __int8 a2) { char result; // al if ( this[67] <= a2 ) result = 0; else result = this[2 * a2 + 60 + a2]; return result; } //----- (00686A70) -------------------------------------------------------- unsigned __int8 __thiscall sub_686A70(_BYTE *this, unsigned __int8 a2, char a3) { unsigned __int8 result; // al result = a2; if ( this[67] > a2 ) { result = a2; this[2 * a2 + 60 + a2] = a3; } return result; } //----- (00686A90) -------------------------------------------------------- _DWORD *__thiscall sub_686A90(_DWORD *this, const void *a2) { _DWORD *v2; // ebx int v3; // esi int v4; // edi int v5; // eax int v6; // ecx int v7; // edi int v8; // esi int v9; // eax int v10; // edx v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &Item::`vftable'; qmemcpy(v2 + 2, a2, 0x67u); v3 = dword_ACB230; v4 = *((unsigned __int16 *)v2 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v6 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v6 + 4 * v4) ) v5 = *(_DWORD *)(v6 + 4 * v4); else v5 = 0; } else { v5 = 0; } } else { v5 = 0; } v7 = *((unsigned __int16 *)v2 + 4); v2[28] = v5; v8 = dword_ACDA70; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, v7) && (unsigned __int16)v7 <= *(_WORD *)(v8 + 200) && (v10 = *(_DWORD *)(v8 + 196), *(_DWORD *)(v10 + 4 * v7)) ) { v9 = *(_DWORD *)(v10 + 4 * v7); } else { v9 = 0; } v2[29] = v9; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F502C: using guessed type void *Item::`vftable'; // ACB230: using guessed type int dword_ACB230; // ACDA70: using guessed type int dword_ACDA70; //----- (00686B80) -------------------------------------------------------- _DWORD *__cdecl sub_686B80(unsigned __int16 *a1, int *a2) { int v2; // ebx int v4; // edi int v5; // edx int v6; // eax int v7; // eax int v8; // edi _BYTE *v9; // esi _DWORD *v10; // ebx _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // esi _DWORD *v18; // ecx _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax int v22; // eax _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax _DWORD *v27; // eax _DWORD *v28; // eax _DWORD *v29; // eax int v30; // ecx int v31; // edx _DWORD *v32; // eax _DWORD *v33; // eax _DWORD *v34; // eax _DWORD *v35; // eax _DWORD *v36; // eax _DWORD *v37; // eax _DWORD *v38; // eax int v39; // edx char v40; // al _DWORD *v41; // eax char v42; // al _DWORD *v43; // eax _DWORD *v44; // eax _DWORD *v45; // eax _DWORD *v46; // esi _DWORD *v47; // ecx _DWORD *v48; // eax __int16 v49; // [esp+18h] [ebp-78h] int v50; // [esp+1Ah] [ebp-76h] int v51; // [esp+1Eh] [ebp-72h] int v52; // [esp+22h] [ebp-6Eh] int v53; // [esp+8Ch] [ebp-4h] v2 = *a1; if ( (_WORD)v2 == -1 ) { if ( a2 ) *a2 = 2; return 0; } v4 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) return 0; if ( (unsigned __int16)v2 > *(_WORD *)(v4 + 200) ) return 0; v5 = *(_DWORD *)(v4 + 196); if ( !*(_DWORD *)(v5 + 4 * v2) ) return 0; v6 = *(_DWORD *)(v5 + 4 * v2); if ( !v6 ) return 0; v7 = *(_DWORD *)(v6 + 102); v8 = 2; v49 = v2; v9 = a1 + 1; v10 = 0; switch ( v7 ) { case 0: LOBYTE(v50) = *v9; v8 = 3; v11 = operator new(0x78u); v12 = v11; v53 = 0; if ( !v11 ) goto LABEL_94; sub_686A90(v11, &v49); *v12 = &ItemByteLot::`vftable'; goto LABEL_95; case 1: LOWORD(v50) = *(_WORD *)v9; v8 = 4; v12 = operator new(0x78u); v53 = 1; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemWordLot::`vftable'; goto LABEL_95; case 2: v50 = *(_DWORD *)v9; v8 = 6; v13 = operator new(0x78u); v12 = v13; v53 = 2; if ( !v13 ) goto LABEL_94; sub_686A90(v13, &v49); *v12 = &ItemDwrdLot::`vftable'; goto LABEL_95; case 3: LOWORD(v50) = *(_WORD *)v9; v8 = 4; v14 = operator new(0x78u); v12 = v14; v53 = 3; if ( !v14 ) goto LABEL_94; sub_686A90(v14, &v49); *v12 = &ItemQuest::`vftable'; goto LABEL_95; case 4: v8 = sub_689AF0(&v49, v9) + 2; v12 = operator new(0x78u); v53 = 4; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemAmulet::`vftable'; goto LABEL_95; case 5: v8 = sub_689B30(&v49, v9) + 2; v15 = operator new(0x78u); v12 = v15; v53 = 5; if ( !v15 ) goto LABEL_94; sub_686A90(v15, &v49); *v12 = &ItemWeapon::`vftable'; goto LABEL_95; case 6: v8 = sub_689B70(&v49, v9) + 2; v19 = operator new(0x78u); v12 = v19; v53 = 7; if ( !v19 ) goto LABEL_94; sub_686A90(v19, &v49); *v12 = &ItemArmor::`vftable'; goto LABEL_95; case 7: v8 = sub_689B70(&v49, v9) + 2; v20 = operator new(0x78u); v12 = v20; v53 = 8; if ( !v20 ) goto LABEL_94; sub_686A90(v20, &v49); *v12 = &ItemShield::`vftable'; goto LABEL_95; case 8: v8 = sub_689B70(&v49, v9) + 2; v12 = operator new(0x78u); v53 = 9; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemBoot::`vftable'; goto LABEL_95; case 9: qmemcpy(&v50, v9, 0x24u); v8 = 38; v21 = operator new(0x78u); v12 = v21; v53 = 10; if ( !v21 ) goto LABEL_94; sub_686A90(v21, &v49); *v12 = &ItemFurniture::`vftable'; goto LABEL_95; case 10: v22 = *(_DWORD *)(a1 + 3); v50 = *(_DWORD *)v9; v51 = v22; v8 = 10; v23 = operator new(0x78u); v12 = v23; v53 = 11; if ( !v23 ) goto LABEL_94; sub_686A90(v23, &v49); *v12 = &ItemDecoration::`vftable'; goto LABEL_95; case 11: v8 = 3; v24 = operator new(0x78u); v12 = v24; v53 = 12; if ( !v24 ) goto LABEL_94; sub_686A90(v24, &v49); *v12 = &ItemSkillScroll::`vftable'; goto LABEL_95; case 12: LOBYTE(v50) = *v9; v8 = 3; v25 = operator new(0x78u); v12 = v25; v53 = 13; if ( !v25 ) goto LABEL_94; sub_686A90(v25, &v49); *v12 = &ItemRecallScroll::`vftable'; goto LABEL_95; case 13: LOBYTE(v50) = *v9; memcpy((char *)&v50 + 1, (char *)a1 + 3, 10 * (unsigned __int8)v50); v8 = 10 * (unsigned __int8)v50 + 3; v26 = operator new(0x78u); v12 = v26; v53 = 15; if ( !v26 ) goto LABEL_94; sub_686A90(v26, &v49); *v12 = &ItemBind::`vftable'; goto LABEL_95; case 14: LOBYTE(v50) = *v9; v8 = 3; v12 = operator new(0x78u); v53 = 14; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemUpgradeSource::`vftable'; goto LABEL_95; case 15: v8 = sub_689BB0((int)&v49, v9) + 2; v27 = operator new(0x78u); v12 = v27; v53 = 16; if ( !v27 ) goto LABEL_94; sub_686A90(v27, &v49); *v12 = &ItemChest::`vftable'; goto LABEL_95; case 16: v8 = 3; v28 = operator new(0x78u); v12 = v28; v53 = 18; if ( !v28 ) goto LABEL_94; sub_686A90(v28, &v49); *v12 = &ItemWeaponTitleLicense::`vftable'; goto LABEL_95; case 17: v12 = operator new(0x78u); v53 = 22; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemKQ::`vftable'; goto LABEL_95; case 18: v50 = *(_DWORD *)v9; v8 = 6; v33 = operator new(0x78u); v12 = v33; v53 = 23; if ( !v33 ) goto LABEL_94; sub_686A90(v33, &v49); *v12 = &ItemHouseSkin::`vftable'; goto LABEL_95; case 19: LOBYTE(v50) = *v9; v8 = 3; v34 = operator new(0x78u); v12 = v34; v53 = 24; if ( !v34 ) goto LABEL_94; sub_686A90(v34, &v49); *v12 = &ItemUpRed::`vftable'; goto LABEL_95; case 20: LOBYTE(v50) = *v9; v8 = 3; v12 = operator new(0x78u); v53 = 25; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemUpBlue::`vftable'; goto LABEL_95; case 21: LOWORD(v50) = *(_WORD *)v9; v8 = 4; v35 = operator new(0x78u); v12 = v35; v53 = 26; if ( !v35 ) goto LABEL_94; sub_686A90(v35, &v49); *v12 = &ItemKQStep::`vftable'; goto LABEL_95; case 22: LOBYTE(v50) = *v9; v8 = 3; v36 = operator new(0x78u); v12 = v36; v53 = 27; if ( !v36 ) goto LABEL_94; sub_686A90(v36, &v49); *v12 = &ItemFeed::`vftable'; goto LABEL_95; case 23: v8 = sub_689C10((int)&v49, (int)v9) + 2; v12 = operator new(0x78u); v53 = 28; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemRiding::`vftable'; goto LABEL_95; case 24: v50 = *(_DWORD *)v9; v8 = 6; v37 = operator new(0x78u); v12 = v37; v53 = 29; if ( !v37 ) goto LABEL_94; sub_686A90(v37, &v49); *v12 = &ItemAmount::`vftable'; goto LABEL_95; case 25: LOBYTE(v50) = *v9; v8 = 3; v38 = operator new(0x78u); v12 = v38; v53 = 30; if ( !v38 ) goto LABEL_94; sub_686A90(v38, &v49); *v12 = &ItemUpGold::`vftable'; goto LABEL_95; case 26: v50 = *(_DWORD *)v9; v8 = 6; v16 = operator new(0x7Cu); v17 = v16; v53 = 6; if ( v16 ) { sub_686A90(v16, &v49); *v17 = &ItemCostumeWeapon::`vftable'; v18 = v17; } else { v18 = 0; } v53 = -1; v10 = v18; if ( v18 ) (*(void (**)(void))(*v18 + 88))(); break; case 27: v50 = *(_DWORD *)v9; v8 = 6; v12 = operator new(0x78u); v53 = 31; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemChargedAction::`vftable'; goto LABEL_95; case 28: v30 = *(_DWORD *)(a1 + 3); v31 = *(_DWORD *)(a1 + 5); v50 = *(_DWORD *)v9; v51 = v30; v52 = v31; v8 = 14; v12 = operator new(0x78u); v53 = 20; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemCapsule::`vftable'; goto LABEL_95; case 29: v8 = 3; v29 = operator new(0x78u); v12 = v29; v53 = 19; if ( !v29 ) goto LABEL_94; sub_686A90(v29, &v49); *v12 = &ItemGBCoin::`vftable'; goto LABEL_95; case 30: v39 = *(_DWORD *)(a1 + 3); v40 = *((_BYTE *)a1 + 10); v50 = *(_DWORD *)v9; v51 = v39; LOBYTE(v52) = v40; v8 = 11; v41 = operator new(0x78u); v12 = v41; v53 = 32; if ( !v41 ) goto LABEL_94; sub_686A90(v41, &v49); *v12 = &ItemCollectCloseCard::`vftable'; goto LABEL_95; case 31: v42 = *((_BYTE *)a1 + 6); v50 = *(_DWORD *)v9; LOBYTE(v51) = v42; v8 = 7; v43 = operator new(0x78u); v12 = v43; v53 = 33; if ( !v43 ) goto LABEL_94; sub_686A90(v43, &v49); *v12 = &ItemCollectOpenCard::`vftable'; goto LABEL_95; case 33: LOBYTE(v50) = *v9; v8 = 3; v12 = operator new(0x78u); v53 = 34; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemNoEffect::`vftable'; goto LABEL_95; case 34: LOWORD(v50) = *(_WORD *)v9; v8 = 4; v44 = operator new(0x78u); v12 = v44; v53 = 35; if ( !v44 ) goto LABEL_94; sub_686A90(v44, &v49); *v12 = &ItemActiveskill::`vftable'; goto LABEL_95; case 35: LOBYTE(v50) = *v9; v8 = 3; v12 = operator new(0x78u); v53 = 17; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemEnchant::`vftable'; goto LABEL_95; case 36: qmemcpy(&v50, v9, 0x1Au); v8 = 28; v12 = operator new(0x78u); v53 = 36; if ( !v12 ) goto LABEL_94; sub_686A90(v12, &v49); *v12 = &ItemPet::`vftable'; goto LABEL_95; case 37: v50 = *(_DWORD *)v9; v8 = 6; v45 = operator new(0x7Cu); v46 = v45; v53 = 37; if ( v45 ) { sub_686A90(v45, &v49); *v46 = &ItemCostumeShield::`vftable'; v47 = v46; } else { v47 = 0; } v53 = -1; v10 = v47; if ( v47 ) (*(void (**)(void))(*v47 + 88))(); break; case 38: v8 = sub_689B70(&v49, v9) + 2; v48 = operator new(0x78u); v12 = v48; v53 = 38; if ( !v48 ) goto LABEL_94; sub_686A90(v48, &v49); *v12 = &ItemBracelet::`vftable'; goto LABEL_95; case 39: v8 = sub_689BE0((int)&v49, v9) + 2; v32 = operator new(0x78u); v12 = v32; v53 = 21; if ( v32 ) { sub_686A90(v32, &v49); *v12 = &ItemTimedItem::`vftable'; } else { LABEL_94: v12 = 0; } LABEL_95: v10 = v12; break; default: break; } if ( a2 ) *a2 = v8; return v10; } // 9F507C: using guessed type void *ItemByteLot::`vftable'; // 9F50CC: using guessed type void *ItemWordLot::`vftable'; // 9F511C: using guessed type void *ItemDwrdLot::`vftable'; // 9F516C: using guessed type void *ItemQuest::`vftable'; // 9F51BC: using guessed type void *ItemAmulet::`vftable'; // 9F520C: using guessed type void *ItemWeapon::`vftable'; // 9F5264: using guessed type void *ItemCostumeWeapon::`vftable'; // 9F52C4: using guessed type void *ItemArmor::`vftable'; // 9F5314: using guessed type void *ItemShield::`vftable'; // 9F5364: using guessed type void *ItemCostumeShield::`vftable'; // 9F53C4: using guessed type void *ItemBoot::`vftable'; // 9F5414: using guessed type void *ItemFurniture::`vftable'; // 9F5464: using guessed type void *ItemDecoration::`vftable'; // 9F54B4: using guessed type void *ItemSkillScroll::`vftable'; // 9F5504: using guessed type void *ItemRecallScroll::`vftable'; // 9F5554: using guessed type void *ItemUpgradeSource::`vftable'; // 9F55A4: using guessed type void *ItemBind::`vftable'; // 9F55F4: using guessed type void *ItemChest::`vftable'; // 9F5644: using guessed type void *ItemGBCoin::`vftable'; // 9F5694: using guessed type void *ItemCapsule::`vftable'; // 9F56EC: using guessed type void *ItemTimedItem::`vftable'; // 9F5744: using guessed type void *ItemEnchant::`vftable'; // 9F5794: using guessed type void *ItemWeaponTitleLicense::`vftable'; // 9F57E4: using guessed type void *ItemKQ::`vftable'; // 9F5834: using guessed type void *ItemHouseSkin::`vftable'; // 9F5884: using guessed type void *ItemUpRed::`vftable'; // 9F58D4: using guessed type void *ItemUpBlue::`vftable'; // 9F5924: using guessed type void *ItemKQStep::`vftable'; // 9F5974: using guessed type void *ItemFeed::`vftable'; // 9F59C4: using guessed type void *ItemRiding::`vftable'; // 9F5A14: using guessed type void *ItemAmount::`vftable'; // 9F5A64: using guessed type void *ItemUpGold::`vftable'; // 9F5AB4: using guessed type void *ItemChargedAction::`vftable'; // 9F5B04: using guessed type void *ItemCollectCloseCard::`vftable'; // 9F5B54: using guessed type void *ItemCollectOpenCard::`vftable'; // 9F5BA4: using guessed type void *ItemNoEffect::`vftable'; // 9F5BF4: using guessed type void *ItemActiveskill::`vftable'; // 9F5C44: using guessed type void *ItemPet::`vftable'; // 9F5CA4: using guessed type void *ItemBracelet::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (006876E0) -------------------------------------------------------- _DWORD *__cdecl sub_6876E0(unsigned __int16 *a1) { int v1; // ebx _DWORD *result; // eax int v3; // esi int v4; // edx int v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax _DWORD *v8; // esi _DWORD *v9; // eax _DWORD *v10; // esi _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // eax _DWORD *v14; // esi _DWORD *v15; // eax _DWORD *v16; // esi _DWORD *v17; // eax _DWORD *v18; // esi _DWORD *v19; // eax _DWORD *v20; // esi _DWORD *v21; // ecx _DWORD *v22; // eax _DWORD *v23; // esi _DWORD *v24; // eax _DWORD *v25; // esi _DWORD *v26; // eax _DWORD *v27; // esi _DWORD *v28; // eax _DWORD *v29; // esi _DWORD *v30; // eax _DWORD *v31; // esi _DWORD *v32; // eax _DWORD *v33; // esi _DWORD *v34; // eax _DWORD *v35; // esi _DWORD *v36; // eax _DWORD *v37; // esi _DWORD *v38; // eax _DWORD *v39; // esi _DWORD *v40; // eax _DWORD *v41; // esi _DWORD *v42; // eax _DWORD *v43; // esi _DWORD *v44; // eax _DWORD *v45; // esi _DWORD *v46; // eax _DWORD *v47; // esi _DWORD *v48; // eax _DWORD *v49; // esi _DWORD *v50; // eax _DWORD *v51; // esi _DWORD *v52; // eax _DWORD *v53; // esi _DWORD *v54; // eax _DWORD *v55; // esi _DWORD *v56; // eax _DWORD *v57; // esi _DWORD *v58; // eax _DWORD *v59; // esi _DWORD *v60; // eax _DWORD *v61; // esi _DWORD *v62; // eax _DWORD *v63; // esi _DWORD *v64; // eax _DWORD *v65; // esi _DWORD *v66; // eax _DWORD *v67; // esi _DWORD *v68; // eax _DWORD *v69; // esi _DWORD *v70; // eax _DWORD *v71; // esi _DWORD *v72; // eax _DWORD *v73; // esi _DWORD *v74; // eax _DWORD *v75; // esi _DWORD *v76; // eax _DWORD *v77; // esi _DWORD *v78; // eax _DWORD *v79; // esi _DWORD *v80; // eax _DWORD *v81; // esi _DWORD *v82; // eax _DWORD *v83; // esi _DWORD *v84; // eax _DWORD *v85; // esi v1 = *a1; if ( (_WORD)v1 == -1 ) return 0; v3 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, *a1) ) return 0; if ( (unsigned __int16)v1 > *(_WORD *)(v3 + 200) ) return 0; v4 = *(_DWORD *)(v3 + 196); if ( !*(_DWORD *)(v4 + 4 * v1) ) return 0; v5 = *(_DWORD *)(v4 + 4 * v1); if ( !v5 ) return 0; v6 = 0; switch ( *(_DWORD *)(v5 + 102) ) { case 0: v7 = operator new(0x78u); v8 = v7; if ( !v7 ) goto LABEL_89; sub_686A90(v7, a1); *v8 = &ItemByteLot::`vftable'; return v8; case 1: v9 = operator new(0x78u); v10 = v9; if ( !v9 ) goto LABEL_89; sub_686A90(v9, a1); *v10 = &ItemWordLot::`vftable'; return v10; case 2: v11 = operator new(0x78u); v12 = v11; if ( !v11 ) goto LABEL_89; sub_686A90(v11, a1); *v12 = &ItemDwrdLot::`vftable'; return v12; case 3: v13 = operator new(0x78u); v14 = v13; if ( !v13 ) goto LABEL_89; sub_686A90(v13, a1); *v14 = &ItemQuest::`vftable'; return v14; case 4: v15 = operator new(0x78u); v16 = v15; if ( !v15 ) goto LABEL_89; sub_686A90(v15, a1); *v16 = &ItemAmulet::`vftable'; return v16; case 5: v17 = operator new(0x78u); v18 = v17; if ( !v17 ) goto LABEL_89; sub_686A90(v17, a1); *v18 = &ItemWeapon::`vftable'; return v18; case 6: v22 = operator new(0x78u); v23 = v22; if ( !v22 ) goto LABEL_89; sub_686A90(v22, a1); *v23 = &ItemArmor::`vftable'; return v23; case 7: v24 = operator new(0x78u); v25 = v24; if ( !v24 ) goto LABEL_89; sub_686A90(v24, a1); *v25 = &ItemShield::`vftable'; return v25; case 8: v26 = operator new(0x78u); v27 = v26; if ( !v26 ) goto LABEL_89; sub_686A90(v26, a1); *v27 = &ItemBoot::`vftable'; return v27; case 9: v28 = operator new(0x78u); v29 = v28; if ( !v28 ) goto LABEL_89; sub_686A90(v28, a1); *v29 = &ItemFurniture::`vftable'; return v29; case 0xA: v30 = operator new(0x78u); v31 = v30; if ( !v30 ) goto LABEL_89; sub_686A90(v30, a1); *v31 = &ItemDecoration::`vftable'; return v31; case 0xB: v32 = operator new(0x78u); v33 = v32; if ( !v32 ) goto LABEL_89; sub_686A90(v32, a1); *v33 = &ItemSkillScroll::`vftable'; return v33; case 0xC: v34 = operator new(0x78u); v35 = v34; if ( !v34 ) goto LABEL_89; sub_686A90(v34, a1); *v35 = &ItemRecallScroll::`vftable'; return v35; case 0xD: v38 = operator new(0x78u); v39 = v38; if ( !v38 ) goto LABEL_89; sub_686A90(v38, a1); *v39 = &ItemBind::`vftable'; return v39; case 0xE: v36 = operator new(0x78u); v37 = v36; if ( !v36 ) goto LABEL_89; sub_686A90(v36, a1); *v37 = &ItemUpgradeSource::`vftable'; return v37; case 0xF: v40 = operator new(0x78u); v41 = v40; if ( !v40 ) goto LABEL_89; sub_686A90(v40, a1); *v41 = &ItemChest::`vftable'; return v41; case 0x10: v44 = operator new(0x78u); v45 = v44; if ( !v44 ) goto LABEL_89; sub_686A90(v44, a1); *v45 = &ItemWeaponTitleLicense::`vftable'; return v45; case 0x11: v52 = operator new(0x78u); v53 = v52; if ( !v52 ) goto LABEL_89; sub_686A90(v52, a1); *v53 = &ItemKQ::`vftable'; return v53; case 0x12: v54 = operator new(0x78u); v55 = v54; if ( !v54 ) goto LABEL_89; sub_686A90(v54, a1); *v55 = &ItemHouseSkin::`vftable'; return v55; case 0x13: v56 = operator new(0x78u); v57 = v56; if ( !v56 ) goto LABEL_89; sub_686A90(v56, a1); *v57 = &ItemUpRed::`vftable'; return v57; case 0x14: v58 = operator new(0x78u); v59 = v58; if ( !v58 ) goto LABEL_89; sub_686A90(v58, a1); *v59 = &ItemUpBlue::`vftable'; return v59; case 0x15: v60 = operator new(0x78u); v61 = v60; if ( !v60 ) goto LABEL_89; sub_686A90(v60, a1); *v61 = &ItemKQStep::`vftable'; return v61; case 0x16: v62 = operator new(0x78u); v63 = v62; if ( !v62 ) goto LABEL_89; sub_686A90(v62, a1); *v63 = &ItemFeed::`vftable'; return v63; case 0x17: v64 = operator new(0x78u); v65 = v64; if ( !v64 ) goto LABEL_89; sub_686A90(v64, a1); *v65 = &ItemRiding::`vftable'; return v65; case 0x18: v66 = operator new(0x78u); v67 = v66; if ( !v66 ) goto LABEL_89; sub_686A90(v66, a1); *v67 = &ItemAmount::`vftable'; return v67; case 0x19: v68 = operator new(0x78u); v69 = v68; if ( !v68 ) goto LABEL_89; sub_686A90(v68, a1); *v69 = &ItemUpGold::`vftable'; return v69; case 0x1A: v19 = operator new(0x7Cu); v20 = v19; if ( !v19 ) goto LABEL_22; sub_686A90(v19, a1); *v20 = &ItemCostumeWeapon::`vftable'; v21 = v20; goto LABEL_23; case 0x1B: v70 = operator new(0x78u); v71 = v70; if ( !v70 ) goto LABEL_89; sub_686A90(v70, a1); *v71 = &ItemChargedAction::`vftable'; return v71; case 0x1C: v48 = operator new(0x78u); v49 = v48; if ( !v48 ) goto LABEL_89; sub_686A90(v48, a1); *v49 = &ItemCapsule::`vftable'; return v49; case 0x1D: v46 = operator new(0x78u); v47 = v46; if ( !v46 ) goto LABEL_89; sub_686A90(v46, a1); *v47 = &ItemGBCoin::`vftable'; return v47; case 0x1E: v72 = operator new(0x78u); v73 = v72; if ( !v72 ) goto LABEL_89; sub_686A90(v72, a1); *v73 = &ItemCollectCloseCard::`vftable'; return v73; case 0x1F: v74 = operator new(0x78u); v75 = v74; if ( !v74 ) goto LABEL_89; sub_686A90(v74, a1); *v75 = &ItemCollectOpenCard::`vftable'; return v75; case 0x21: v76 = operator new(0x78u); v77 = v76; if ( !v76 ) goto LABEL_89; sub_686A90(v76, a1); *v77 = &ItemNoEffect::`vftable'; return v77; case 0x22: v78 = operator new(0x78u); v79 = v78; if ( !v78 ) goto LABEL_89; sub_686A90(v78, a1); *v79 = &ItemActiveskill::`vftable'; return v79; case 0x23: v42 = operator new(0x78u); v43 = v42; if ( !v42 ) goto LABEL_89; sub_686A90(v42, a1); *v43 = &ItemEnchant::`vftable'; return v43; case 0x24: v80 = operator new(0x78u); v81 = v80; if ( !v80 ) goto LABEL_89; sub_686A90(v80, a1); *v81 = &ItemPet::`vftable'; return v81; case 0x25: v82 = operator new(0x7Cu); v83 = v82; if ( v82 ) { sub_686A90(v82, a1); *v83 = &ItemCostumeShield::`vftable'; v21 = v83; } else { LABEL_22: v21 = 0; } LABEL_23: v6 = v21; if ( !v21 ) goto LABEL_90; (*(void (**)(void))(*v21 + 88))(); return v6; case 0x26: v84 = operator new(0x78u); v85 = v84; if ( !v84 ) goto LABEL_89; sub_686A90(v84, a1); *v85 = &ItemBracelet::`vftable'; return v85; case 0x27: v50 = operator new(0x78u); v51 = v50; if ( v50 ) { sub_686A90(v50, a1); *v51 = &ItemTimedItem::`vftable'; result = v51; } else { LABEL_89: v6 = 0; LABEL_90: result = v6; } break; default: goto LABEL_90; } return result; } // 9F507C: using guessed type void *ItemByteLot::`vftable'; // 9F50CC: using guessed type void *ItemWordLot::`vftable'; // 9F511C: using guessed type void *ItemDwrdLot::`vftable'; // 9F516C: using guessed type void *ItemQuest::`vftable'; // 9F51BC: using guessed type void *ItemAmulet::`vftable'; // 9F520C: using guessed type void *ItemWeapon::`vftable'; // 9F5264: using guessed type void *ItemCostumeWeapon::`vftable'; // 9F52C4: using guessed type void *ItemArmor::`vftable'; // 9F5314: using guessed type void *ItemShield::`vftable'; // 9F5364: using guessed type void *ItemCostumeShield::`vftable'; // 9F53C4: using guessed type void *ItemBoot::`vftable'; // 9F5414: using guessed type void *ItemFurniture::`vftable'; // 9F5464: using guessed type void *ItemDecoration::`vftable'; // 9F54B4: using guessed type void *ItemSkillScroll::`vftable'; // 9F5504: using guessed type void *ItemRecallScroll::`vftable'; // 9F5554: using guessed type void *ItemUpgradeSource::`vftable'; // 9F55A4: using guessed type void *ItemBind::`vftable'; // 9F55F4: using guessed type void *ItemChest::`vftable'; // 9F5644: using guessed type void *ItemGBCoin::`vftable'; // 9F5694: using guessed type void *ItemCapsule::`vftable'; // 9F56EC: using guessed type void *ItemTimedItem::`vftable'; // 9F5744: using guessed type void *ItemEnchant::`vftable'; // 9F5794: using guessed type void *ItemWeaponTitleLicense::`vftable'; // 9F57E4: using guessed type void *ItemKQ::`vftable'; // 9F5834: using guessed type void *ItemHouseSkin::`vftable'; // 9F5884: using guessed type void *ItemUpRed::`vftable'; // 9F58D4: using guessed type void *ItemUpBlue::`vftable'; // 9F5924: using guessed type void *ItemKQStep::`vftable'; // 9F5974: using guessed type void *ItemFeed::`vftable'; // 9F59C4: using guessed type void *ItemRiding::`vftable'; // 9F5A14: using guessed type void *ItemAmount::`vftable'; // 9F5A64: using guessed type void *ItemUpGold::`vftable'; // 9F5AB4: using guessed type void *ItemChargedAction::`vftable'; // 9F5B04: using guessed type void *ItemCollectCloseCard::`vftable'; // 9F5B54: using guessed type void *ItemCollectOpenCard::`vftable'; // 9F5BA4: using guessed type void *ItemNoEffect::`vftable'; // 9F5BF4: using guessed type void *ItemActiveskill::`vftable'; // 9F5C44: using guessed type void *ItemPet::`vftable'; // 9F5CA4: using guessed type void *ItemBracelet::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (00688200) -------------------------------------------------------- _DWORD *__cdecl sub_688200(unsigned __int8 *a1, _WORD *a2, _DWORD *a3) { int v3; // eax _DWORD *result; // eax int v5; // edi int v6; // ebx int v7; // ecx int v8; // eax int v9; // eax _DWORD *v10; // edi int v11; // ebx _DWORD *v12; // eax _DWORD *v13; // esi _DWORD *v14; // esi _DWORD *v15; // eax _DWORD *v16; // esi _DWORD *v17; // eax _DWORD *v18; // esi _DWORD *v19; // esi _DWORD *v20; // eax _DWORD *v21; // esi _DWORD *v22; // eax _DWORD *v23; // esi _DWORD *v24; // ecx _DWORD *v25; // eax _DWORD *v26; // esi _DWORD *v27; // eax _DWORD *v28; // esi _DWORD *v29; // esi _DWORD *v30; // eax _DWORD *v31; // esi int v32; // eax _DWORD *v33; // eax _DWORD *v34; // esi _DWORD *v35; // eax _DWORD *v36; // esi _DWORD *v37; // eax _DWORD *v38; // esi _DWORD *v39; // esi _DWORD *v40; // eax _DWORD *v41; // esi _DWORD *v42; // eax _DWORD *v43; // esi _DWORD *v44; // esi _DWORD *v45; // eax _DWORD *v46; // esi _DWORD *v47; // eax _DWORD *v48; // esi int v49; // ecx int v50; // edx _DWORD *v51; // esi _DWORD *v52; // eax _DWORD *v53; // esi _DWORD *v54; // esi _DWORD *v55; // eax _DWORD *v56; // esi _DWORD *v57; // eax _DWORD *v58; // esi _DWORD *v59; // esi _DWORD *v60; // eax _DWORD *v61; // esi _DWORD *v62; // eax _DWORD *v63; // esi _DWORD *v64; // esi _DWORD *v65; // eax _DWORD *v66; // esi _DWORD *v67; // eax _DWORD *v68; // esi _DWORD *v69; // esi int v70; // edx unsigned __int8 v71; // al _DWORD *v72; // eax _DWORD *v73; // esi unsigned __int8 v74; // al _DWORD *v75; // eax _DWORD *v76; // esi _DWORD *v77; // esi _DWORD *v78; // eax _DWORD *v79; // esi _DWORD *v80; // esi _DWORD *v81; // eax _DWORD *v82; // esi _DWORD *v83; // ecx _DWORD *v84; // eax _DWORD *v85; // esi __int16 v86; // [esp+18h] [ebp-78h] int v87; // [esp+1Ah] [ebp-76h] int v88; // [esp+1Eh] [ebp-72h] int v89; // [esp+22h] [ebp-6Eh] int v90; // [esp+8Ch] [ebp-4h] *a2 = *(_WORD *)(a1 + 1); v3 = *(unsigned __int16 *)(a1 + 3); if ( (_WORD)v3 == -1 ) { if ( a3 ) *a3 = 5; result = 0; } else { v5 = dword_ACB230; v6 = *(unsigned __int16 *)(a1 + 3); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) && (v7 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v7 + 4 * v6)) && (v8 = *(_DWORD *)(v7 + 4 * v6)) != 0 ) { v9 = *(_DWORD *)(v8 + 102); v10 = 0; v11 = 0; v86 = *(_WORD *)(a1 + 3); switch ( v9 ) { case 0: LOBYTE(v87) = a1[5]; v11 = 1; v12 = operator new(0x78u); v13 = v12; v90 = 0; if ( !v12 ) goto LABEL_15; sub_686A90(v12, &v86); *v13 = &ItemByteLot::`vftable'; v10 = v13; break; case 1: LOWORD(v87) = *(_WORD *)(a1 + 5); v11 = 2; v14 = operator new(0x78u); v90 = 1; if ( !v14 ) goto LABEL_15; sub_686A90(v14, &v86); *v14 = &ItemWordLot::`vftable'; v10 = v14; break; case 2: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v15 = operator new(0x78u); v16 = v15; v90 = 2; if ( !v15 ) goto LABEL_15; sub_686A90(v15, &v86); *v16 = &ItemDwrdLot::`vftable'; v10 = v16; break; case 3: LOWORD(v87) = *(_WORD *)(a1 + 5); v11 = 2; v17 = operator new(0x78u); v18 = v17; v90 = 3; if ( !v17 ) goto LABEL_15; sub_686A90(v17, &v86); *v18 = &ItemQuest::`vftable'; v10 = v18; break; case 4: v11 = sub_689AF0(&v86, a1 + 5); v19 = operator new(0x78u); v90 = 4; if ( !v19 ) goto LABEL_15; sub_686A90(v19, &v86); *v19 = &ItemAmulet::`vftable'; v10 = v19; break; case 5: v11 = sub_689B30(&v86, a1 + 5); v20 = operator new(0x78u); v21 = v20; v90 = 5; if ( !v20 ) goto LABEL_15; sub_686A90(v20, &v86); *v21 = &ItemWeapon::`vftable'; v10 = v21; break; case 6: v11 = sub_689B70(&v86, a1 + 5); v25 = operator new(0x78u); v26 = v25; v90 = 7; if ( !v25 ) goto LABEL_15; sub_686A90(v25, &v86); *v26 = &ItemArmor::`vftable'; v10 = v26; break; case 7: v11 = sub_689B70(&v86, a1 + 5); v27 = operator new(0x78u); v28 = v27; v90 = 8; if ( !v27 ) goto LABEL_15; sub_686A90(v27, &v86); *v28 = &ItemShield::`vftable'; v10 = v28; break; case 8: v11 = sub_689B70(&v86, a1 + 5); v29 = operator new(0x78u); v90 = 9; if ( !v29 ) goto LABEL_15; sub_686A90(v29, &v86); *v29 = &ItemBoot::`vftable'; v10 = v29; break; case 9: qmemcpy(&v87, a1 + 5, 0x24u); v11 = 36; v30 = operator new(0x78u); v31 = v30; v90 = 10; if ( !v30 ) goto LABEL_15; sub_686A90(v30, &v86); *v31 = &ItemFurniture::`vftable'; v10 = v31; break; case 10: v32 = *(_DWORD *)(a1 + 9); v87 = *(_DWORD *)(a1 + 5); v88 = v32; v11 = 8; v33 = operator new(0x78u); v34 = v33; v90 = 11; if ( !v33 ) goto LABEL_15; sub_686A90(v33, &v86); *v34 = &ItemDecoration::`vftable'; v10 = v34; break; case 11: v11 = 1; v35 = operator new(0x78u); v36 = v35; v90 = 12; if ( !v35 ) goto LABEL_15; sub_686A90(v35, &v86); *v36 = &ItemSkillScroll::`vftable'; v10 = v36; break; case 12: LOBYTE(v87) = a1[5]; v11 = 1; v37 = operator new(0x78u); v38 = v37; v90 = 13; if ( !v37 ) goto LABEL_15; sub_686A90(v37, &v86); *v38 = &ItemRecallScroll::`vftable'; v10 = v38; break; case 13: LOBYTE(v87) = a1[5]; memcpy((char *)&v87 + 1, a1 + 6, 10 * (unsigned __int8)v87); v11 = 10 * (unsigned __int8)v87 + 1; v40 = operator new(0x78u); v41 = v40; v90 = 15; if ( !v40 ) goto LABEL_15; sub_686A90(v40, &v86); *v41 = &ItemBind::`vftable'; v10 = v41; break; case 14: LOBYTE(v87) = a1[5]; v11 = 1; v39 = operator new(0x78u); v90 = 14; if ( !v39 ) goto LABEL_15; sub_686A90(v39, &v86); *v39 = &ItemUpgradeSource::`vftable'; v10 = v39; break; case 15: v11 = sub_689BB0((int)&v86, a1 + 5); v42 = operator new(0x78u); v43 = v42; v90 = 16; if ( !v42 ) goto LABEL_15; sub_686A90(v42, &v86); *v43 = &ItemChest::`vftable'; v10 = v43; break; case 16: v11 = 1; v45 = operator new(0x78u); v46 = v45; v90 = 18; if ( !v45 ) goto LABEL_15; sub_686A90(v45, &v86); *v46 = &ItemWeaponTitleLicense::`vftable'; v10 = v46; break; case 17: v54 = operator new(0x78u); v90 = 22; if ( !v54 ) goto LABEL_15; sub_686A90(v54, &v86); *v54 = &ItemKQ::`vftable'; v10 = v54; break; case 18: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v55 = operator new(0x78u); v56 = v55; v90 = 23; if ( !v55 ) goto LABEL_15; sub_686A90(v55, &v86); *v56 = &ItemHouseSkin::`vftable'; v10 = v56; break; case 19: LOBYTE(v87) = a1[5]; v11 = 1; v57 = operator new(0x78u); v58 = v57; v90 = 24; if ( !v57 ) goto LABEL_15; sub_686A90(v57, &v86); *v58 = &ItemUpRed::`vftable'; v10 = v58; break; case 20: LOBYTE(v87) = a1[5]; v11 = 1; v59 = operator new(0x78u); v90 = 25; if ( !v59 ) goto LABEL_15; sub_686A90(v59, &v86); *v59 = &ItemUpBlue::`vftable'; v10 = v59; break; case 21: LOWORD(v87) = *(_WORD *)(a1 + 5); v11 = 2; v60 = operator new(0x78u); v61 = v60; v90 = 26; if ( !v60 ) goto LABEL_15; sub_686A90(v60, &v86); *v61 = &ItemKQStep::`vftable'; v10 = v61; break; case 22: LOBYTE(v87) = a1[5]; v11 = 1; v62 = operator new(0x78u); v63 = v62; v90 = 27; if ( !v62 ) goto LABEL_15; sub_686A90(v62, &v86); *v63 = &ItemFeed::`vftable'; v10 = v63; break; case 23: v11 = sub_689C10((int)&v86, (int)(a1 + 5)); v64 = operator new(0x78u); v90 = 28; if ( !v64 ) goto LABEL_15; sub_686A90(v64, &v86); *v64 = &ItemRiding::`vftable'; v10 = v64; break; case 24: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v65 = operator new(0x78u); v66 = v65; v90 = 29; if ( !v65 ) goto LABEL_15; sub_686A90(v65, &v86); *v66 = &ItemAmount::`vftable'; v10 = v66; break; case 25: LOBYTE(v87) = a1[5]; v11 = 1; v67 = operator new(0x78u); v68 = v67; v90 = 30; if ( !v67 ) goto LABEL_15; sub_686A90(v67, &v86); *v68 = &ItemUpGold::`vftable'; v10 = v68; break; case 26: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v22 = operator new(0x7Cu); v23 = v22; v90 = 6; if ( v22 ) { sub_686A90(v22, &v86); *v23 = &ItemCostumeWeapon::`vftable'; v24 = v23; } else { v24 = 0; } v90 = -1; v10 = v24; if ( v24 ) (*(void (**)(void))(*v24 + 88))(); break; case 27: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v69 = operator new(0x78u); v90 = 31; if ( !v69 ) goto LABEL_15; sub_686A90(v69, &v86); *v69 = &ItemChargedAction::`vftable'; v10 = v69; break; case 28: v49 = *(_DWORD *)(a1 + 9); v50 = *(_DWORD *)(a1 + 13); v87 = *(_DWORD *)(a1 + 5); v88 = v49; v89 = v50; v11 = 12; v51 = operator new(0x78u); v90 = 20; if ( !v51 ) goto LABEL_15; sub_686A90(v51, &v86); *v51 = &ItemCapsule::`vftable'; v10 = v51; break; case 29: v11 = 1; v47 = operator new(0x78u); v48 = v47; v90 = 19; if ( !v47 ) goto LABEL_15; sub_686A90(v47, &v86); *v48 = &ItemGBCoin::`vftable'; v10 = v48; break; case 30: v70 = *(_DWORD *)(a1 + 9); v71 = a1[13]; v87 = *(_DWORD *)(a1 + 5); v88 = v70; LOBYTE(v89) = v71; v11 = 9; v72 = operator new(0x78u); v73 = v72; v90 = 32; if ( !v72 ) goto LABEL_15; sub_686A90(v72, &v86); *v73 = &ItemCollectCloseCard::`vftable'; v10 = v73; break; case 31: v74 = a1[9]; v87 = *(_DWORD *)(a1 + 5); LOBYTE(v88) = v74; v11 = 5; v75 = operator new(0x78u); v76 = v75; v90 = 33; if ( !v75 ) goto LABEL_15; sub_686A90(v75, &v86); *v76 = &ItemCollectOpenCard::`vftable'; v10 = v76; break; case 33: LOBYTE(v87) = a1[5]; v11 = 1; v77 = operator new(0x78u); v90 = 34; if ( !v77 ) goto LABEL_15; sub_686A90(v77, &v86); *v77 = &ItemNoEffect::`vftable'; v10 = v77; break; case 34: LOWORD(v87) = *(_WORD *)(a1 + 5); v11 = 2; v78 = operator new(0x78u); v79 = v78; v90 = 35; if ( !v78 ) goto LABEL_15; sub_686A90(v78, &v86); *v79 = &ItemActiveskill::`vftable'; v10 = v79; break; case 35: LOBYTE(v87) = a1[5]; v11 = 1; v44 = operator new(0x78u); v90 = 17; if ( !v44 ) goto LABEL_15; sub_686A90(v44, &v86); *v44 = &ItemEnchant::`vftable'; v10 = v44; break; case 36: qmemcpy(&v87, a1 + 5, 0x1Au); v11 = 26; v80 = operator new(0x78u); v90 = 36; if ( !v80 ) goto LABEL_15; sub_686A90(v80, &v86); *v80 = &ItemPet::`vftable'; v10 = v80; break; case 37: v87 = *(_DWORD *)(a1 + 5); v11 = 4; v81 = operator new(0x7Cu); v82 = v81; v90 = 37; if ( v81 ) { sub_686A90(v81, &v86); *v82 = &ItemCostumeShield::`vftable'; v83 = v82; } else { v83 = 0; } v90 = -1; v10 = v83; if ( v83 ) (*(void (**)(void))(*v83 + 88))(); break; case 38: v11 = sub_689B70(&v86, a1 + 5); v84 = operator new(0x78u); v85 = v84; v90 = 38; if ( !v84 ) goto LABEL_15; sub_686A90(v84, &v86); *v85 = &ItemBracelet::`vftable'; v10 = v85; break; case 39: v11 = sub_689BE0((int)&v86, a1 + 5); v52 = operator new(0x78u); v53 = v52; v90 = 21; if ( v52 ) { sub_686A90(v52, &v86); *v53 = &ItemTimedItem::`vftable'; v10 = v53; } else { LABEL_15: v10 = 0; } break; default: v11 = *a1; break; } if ( a3 ) *a3 = v11 + 5; result = v10; } else { if ( a3 ) *a3 = 5; result = 0; } } return result; } // 9F507C: using guessed type void *ItemByteLot::`vftable'; // 9F50CC: using guessed type void *ItemWordLot::`vftable'; // 9F511C: using guessed type void *ItemDwrdLot::`vftable'; // 9F516C: using guessed type void *ItemQuest::`vftable'; // 9F51BC: using guessed type void *ItemAmulet::`vftable'; // 9F520C: using guessed type void *ItemWeapon::`vftable'; // 9F5264: using guessed type void *ItemCostumeWeapon::`vftable'; // 9F52C4: using guessed type void *ItemArmor::`vftable'; // 9F5314: using guessed type void *ItemShield::`vftable'; // 9F5364: using guessed type void *ItemCostumeShield::`vftable'; // 9F53C4: using guessed type void *ItemBoot::`vftable'; // 9F5414: using guessed type void *ItemFurniture::`vftable'; // 9F5464: using guessed type void *ItemDecoration::`vftable'; // 9F54B4: using guessed type void *ItemSkillScroll::`vftable'; // 9F5504: using guessed type void *ItemRecallScroll::`vftable'; // 9F5554: using guessed type void *ItemUpgradeSource::`vftable'; // 9F55A4: using guessed type void *ItemBind::`vftable'; // 9F55F4: using guessed type void *ItemChest::`vftable'; // 9F5644: using guessed type void *ItemGBCoin::`vftable'; // 9F5694: using guessed type void *ItemCapsule::`vftable'; // 9F56EC: using guessed type void *ItemTimedItem::`vftable'; // 9F5744: using guessed type void *ItemEnchant::`vftable'; // 9F5794: using guessed type void *ItemWeaponTitleLicense::`vftable'; // 9F57E4: using guessed type void *ItemKQ::`vftable'; // 9F5834: using guessed type void *ItemHouseSkin::`vftable'; // 9F5884: using guessed type void *ItemUpRed::`vftable'; // 9F58D4: using guessed type void *ItemUpBlue::`vftable'; // 9F5924: using guessed type void *ItemKQStep::`vftable'; // 9F5974: using guessed type void *ItemFeed::`vftable'; // 9F59C4: using guessed type void *ItemRiding::`vftable'; // 9F5A14: using guessed type void *ItemAmount::`vftable'; // 9F5A64: using guessed type void *ItemUpGold::`vftable'; // 9F5AB4: using guessed type void *ItemChargedAction::`vftable'; // 9F5B04: using guessed type void *ItemCollectCloseCard::`vftable'; // 9F5B54: using guessed type void *ItemCollectOpenCard::`vftable'; // 9F5BA4: using guessed type void *ItemNoEffect::`vftable'; // 9F5BF4: using guessed type void *ItemActiveskill::`vftable'; // 9F5C44: using guessed type void *ItemPet::`vftable'; // 9F5CA4: using guessed type void *ItemBracelet::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (00688E00) -------------------------------------------------------- _DWORD *__cdecl sub_688E00(int a1, _WORD *a2, _DWORD *a3) { int v3; // eax _DWORD *result; // eax int v5; // edi int v6; // ebx int v7; // ecx int v8; // eax int v9; // eax _DWORD *v10; // edi int v11; // ebx _DWORD *v12; // eax _DWORD *v13; // esi _DWORD *v14; // eax _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // eax _DWORD *v18; // esi _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax int v22; // eax _DWORD *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax _DWORD *v27; // eax _DWORD *v28; // eax _DWORD *v29; // eax int v30; // ecx int v31; // edx _DWORD *v32; // eax _DWORD *v33; // eax _DWORD *v34; // eax _DWORD *v35; // eax _DWORD *v36; // eax _DWORD *v37; // eax _DWORD *v38; // eax int v39; // edx char v40; // al _DWORD *v41; // eax char v42; // al _DWORD *v43; // eax _DWORD *v44; // eax _DWORD *v45; // eax _DWORD *v46; // esi _DWORD *v47; // eax signed int v48; // [esp+14h] [ebp-80h] __int16 v49; // [esp+1Ch] [ebp-78h] int v50; // [esp+1Eh] [ebp-76h] int v51; // [esp+22h] [ebp-72h] int v52; // [esp+26h] [ebp-6Eh] int v53; // [esp+90h] [ebp-4h] *a2 = *(_WORD *)(a1 + 1); v3 = *(unsigned __int16 *)(a1 + 3); v48 = 5; if ( (_WORD)v3 == -1 ) { if ( a3 ) *a3 = 5; result = 0; } else { v5 = dword_ACB230; v6 = *(unsigned __int16 *)(a1 + 3); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v3) && (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) && (v7 = *(_DWORD *)(v5 + 196), *(_DWORD *)(v7 + 4 * v6)) && (v8 = *(_DWORD *)(v7 + 4 * v6)) != 0 ) { v9 = *(_DWORD *)(v8 + 102); v10 = 0; v11 = 0; v49 = *(_WORD *)(a1 + 3); switch ( v9 ) { case 0: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v12 = operator new(0x78u); v13 = v12; v53 = 0; if ( !v12 ) goto LABEL_97; sub_686A90(v12, &v49); *v13 = &ItemByteLot::`vftable'; goto LABEL_98; case 1: LOWORD(v50) = *(_WORD *)(a1 + 5); v11 = 2; v13 = operator new(0x78u); v53 = 1; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemWordLot::`vftable'; goto LABEL_98; case 2: v50 = *(_DWORD *)(a1 + 5); v11 = 4; v14 = operator new(0x78u); v13 = v14; v53 = 2; if ( !v14 ) goto LABEL_97; sub_686A90(v14, &v49); *v13 = &ItemDwrdLot::`vftable'; goto LABEL_98; case 3: LOWORD(v50) = *(_WORD *)(a1 + 5); v11 = 2; v15 = operator new(0x78u); v13 = v15; v53 = 3; if ( !v15 ) goto LABEL_97; sub_686A90(v15, &v49); *v13 = &ItemQuest::`vftable'; goto LABEL_98; case 4: v11 = sub_689AF0(&v49, (const void *)(a1 + 5)); v13 = operator new(0x78u); v53 = 4; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemAmulet::`vftable'; goto LABEL_98; case 5: v11 = sub_689B30(&v49, (const void *)(a1 + 5)); v16 = operator new(0x78u); v13 = v16; v53 = 5; if ( !v16 ) goto LABEL_97; sub_686A90(v16, &v49); *v13 = &ItemWeapon::`vftable'; goto LABEL_98; case 6: v11 = sub_689B70(&v49, (const void *)(a1 + 5)); v19 = operator new(0x78u); v13 = v19; v53 = 7; if ( !v19 ) goto LABEL_97; sub_686A90(v19, &v49); *v13 = &ItemArmor::`vftable'; goto LABEL_98; case 7: v11 = sub_689B70(&v49, (const void *)(a1 + 5)); v20 = operator new(0x78u); v13 = v20; v53 = 8; if ( !v20 ) goto LABEL_97; sub_686A90(v20, &v49); *v13 = &ItemShield::`vftable'; goto LABEL_98; case 8: v11 = sub_689B70(&v49, (const void *)(a1 + 5)); v13 = operator new(0x78u); v53 = 9; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemBoot::`vftable'; goto LABEL_98; case 9: qmemcpy(&v50, (const void *)(a1 + 5), 0x24u); v11 = 36; v21 = operator new(0x78u); v13 = v21; v53 = 10; if ( !v21 ) goto LABEL_97; sub_686A90(v21, &v49); *v13 = &ItemFurniture::`vftable'; goto LABEL_98; case 10: v22 = *(_DWORD *)(a1 + 9); v50 = *(_DWORD *)(a1 + 5); v51 = v22; v11 = 8; v23 = operator new(0x78u); v13 = v23; v53 = 11; if ( !v23 ) goto LABEL_97; sub_686A90(v23, &v49); *v13 = &ItemDecoration::`vftable'; goto LABEL_98; case 11: v11 = 1; v24 = operator new(0x78u); v13 = v24; v53 = 12; if ( !v24 ) goto LABEL_97; sub_686A90(v24, &v49); *v13 = &ItemSkillScroll::`vftable'; goto LABEL_98; case 12: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v25 = operator new(0x78u); v13 = v25; v53 = 13; if ( !v25 ) goto LABEL_97; sub_686A90(v25, &v49); *v13 = &ItemRecallScroll::`vftable'; goto LABEL_98; case 13: LOBYTE(v50) = *(_BYTE *)(a1 + 5); memcpy((char *)&v50 + 1, (const void *)(a1 + 6), 10 * (unsigned __int8)v50); v11 = 10 * (unsigned __int8)v50 + 1; v26 = operator new(0x78u); v13 = v26; v53 = 15; if ( !v26 ) goto LABEL_97; sub_686A90(v26, &v49); *v13 = &ItemBind::`vftable'; goto LABEL_98; case 14: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v13 = operator new(0x78u); v53 = 14; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemUpgradeSource::`vftable'; goto LABEL_98; case 15: v11 = sub_689BB0((int)&v49, (_BYTE *)(a1 + 5)); v27 = operator new(0x78u); v13 = v27; v53 = 16; if ( !v27 ) goto LABEL_97; sub_686A90(v27, &v49); *v13 = &ItemChest::`vftable'; goto LABEL_98; case 16: v11 = 1; v28 = operator new(0x78u); v13 = v28; v53 = 18; if ( !v28 ) goto LABEL_97; sub_686A90(v28, &v49); *v13 = &ItemWeaponTitleLicense::`vftable'; goto LABEL_98; case 17: v13 = operator new(0x78u); v53 = 22; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemKQ::`vftable'; goto LABEL_98; case 18: v50 = *(_DWORD *)(a1 + 5); v11 = 4; v33 = operator new(0x78u); v13 = v33; v53 = 23; if ( !v33 ) goto LABEL_97; sub_686A90(v33, &v49); *v13 = &ItemHouseSkin::`vftable'; goto LABEL_98; case 19: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v34 = operator new(0x78u); v13 = v34; v53 = 24; if ( !v34 ) goto LABEL_97; sub_686A90(v34, &v49); *v13 = &ItemUpRed::`vftable'; goto LABEL_98; case 20: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v13 = operator new(0x78u); v53 = 25; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemUpBlue::`vftable'; goto LABEL_98; case 21: LOWORD(v50) = *(_WORD *)(a1 + 5); v11 = 2; v35 = operator new(0x78u); v13 = v35; v53 = 26; if ( !v35 ) goto LABEL_97; sub_686A90(v35, &v49); *v13 = &ItemKQStep::`vftable'; goto LABEL_98; case 22: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v36 = operator new(0x78u); v13 = v36; v53 = 27; if ( !v36 ) goto LABEL_97; sub_686A90(v36, &v49); *v13 = &ItemFeed::`vftable'; goto LABEL_98; case 23: v11 = sub_689C10((int)&v49, a1 + 5); v13 = operator new(0x78u); v53 = 28; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemRiding::`vftable'; goto LABEL_98; case 24: v50 = *(_DWORD *)(a1 + 5); v11 = 4; v37 = operator new(0x78u); v13 = v37; v53 = 29; if ( !v37 ) goto LABEL_97; sub_686A90(v37, &v49); *v13 = &ItemAmount::`vftable'; goto LABEL_98; case 25: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v48 = 6; v38 = operator new(0x78u); v13 = v38; v53 = 30; if ( !v38 ) goto LABEL_97; sub_686A90(v38, &v49); *v13 = &ItemUpGold::`vftable'; goto LABEL_98; case 26: v50 = *(_DWORD *)(a1 + 5); v11 = 4; v17 = operator new(0x7Cu); v18 = v17; v53 = 6; if ( v17 ) { sub_686A90(v17, &v49); *v18 = &ItemCostumeWeapon::`vftable'; } else { v18 = 0; } v53 = -1; v10 = v18; if ( v18 ) (*(void (__thiscall **)(_DWORD *))(*v18 + 88))(v18); break; case 27: v50 = *(_DWORD *)(a1 + 5); v48 = 9; v13 = operator new(0x78u); v53 = 31; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemChargedAction::`vftable'; goto LABEL_98; case 28: v30 = *(_DWORD *)(a1 + 9); v31 = *(_DWORD *)(a1 + 13); v50 = *(_DWORD *)(a1 + 5); v51 = v30; v52 = v31; v11 = 12; v13 = operator new(0x78u); v53 = 20; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemCapsule::`vftable'; goto LABEL_98; case 29: v11 = 1; v29 = operator new(0x78u); v13 = v29; v53 = 19; if ( !v29 ) goto LABEL_97; sub_686A90(v29, &v49); *v13 = &ItemGBCoin::`vftable'; goto LABEL_98; case 30: v39 = *(_DWORD *)(a1 + 9); v40 = *(_BYTE *)(a1 + 13); v50 = *(_DWORD *)(a1 + 5); v51 = v39; LOBYTE(v52) = v40; v48 = 14; v41 = operator new(0x78u); v13 = v41; v53 = 32; if ( !v41 ) goto LABEL_97; sub_686A90(v41, &v49); *v13 = &ItemCollectCloseCard::`vftable'; goto LABEL_98; case 31: v42 = *(_BYTE *)(a1 + 9); v50 = *(_DWORD *)(a1 + 5); LOBYTE(v51) = v42; v48 = 10; v43 = operator new(0x78u); v13 = v43; v53 = 33; if ( !v43 ) goto LABEL_97; sub_686A90(v43, &v49); *v13 = &ItemCollectOpenCard::`vftable'; goto LABEL_98; case 33: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v48 = 6; v13 = operator new(0x78u); v53 = 34; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemNoEffect::`vftable'; goto LABEL_98; case 34: LOWORD(v50) = *(_WORD *)(a1 + 5); v48 = 7; v44 = operator new(0x78u); v13 = v44; v53 = 35; if ( !v44 ) goto LABEL_97; sub_686A90(v44, &v49); *v13 = &ItemActiveskill::`vftable'; goto LABEL_98; case 35: LOBYTE(v50) = *(_BYTE *)(a1 + 5); v11 = 1; v13 = operator new(0x78u); v53 = 17; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemEnchant::`vftable'; goto LABEL_98; case 36: qmemcpy(&v50, (const void *)(a1 + 5), 0x1Au); v48 = 31; v13 = operator new(0x78u); v53 = 36; if ( !v13 ) goto LABEL_97; sub_686A90(v13, &v49); *v13 = &ItemPet::`vftable'; goto LABEL_98; case 37: v50 = *(_DWORD *)(a1 + 5); v11 = 4; v45 = operator new(0x7Cu); v46 = v45; v53 = 37; if ( v45 ) { sub_686A90(v45, &v49); *v46 = &ItemCostumeShield::`vftable'; } else { v46 = 0; } v53 = -1; v10 = v46; if ( v46 ) (*(void (__thiscall **)(_DWORD *))(*v46 + 88))(v46); break; case 38: v11 = sub_689B70(&v49, (const void *)(a1 + 5)); v47 = operator new(0x78u); v13 = v47; v53 = 38; if ( !v47 ) goto LABEL_97; sub_686A90(v47, &v49); *v13 = &ItemBracelet::`vftable'; goto LABEL_98; case 39: v11 = sub_689BE0((int)&v49, (_DWORD *)(a1 + 5)); v32 = operator new(0x78u); v13 = v32; v53 = 21; if ( v32 ) { sub_686A90(v32, &v49); *v13 = &ItemTimedItem::`vftable'; } else { LABEL_97: v13 = 0; } LABEL_98: v10 = v13; break; default: break; } if ( a3 ) *a3 = v48 + v11; result = v10; } else { if ( a3 ) *a3 = 5; result = 0; } } return result; } // 9F507C: using guessed type void *ItemByteLot::`vftable'; // 9F50CC: using guessed type void *ItemWordLot::`vftable'; // 9F511C: using guessed type void *ItemDwrdLot::`vftable'; // 9F516C: using guessed type void *ItemQuest::`vftable'; // 9F51BC: using guessed type void *ItemAmulet::`vftable'; // 9F520C: using guessed type void *ItemWeapon::`vftable'; // 9F5264: using guessed type void *ItemCostumeWeapon::`vftable'; // 9F52C4: using guessed type void *ItemArmor::`vftable'; // 9F5314: using guessed type void *ItemShield::`vftable'; // 9F5364: using guessed type void *ItemCostumeShield::`vftable'; // 9F53C4: using guessed type void *ItemBoot::`vftable'; // 9F5414: using guessed type void *ItemFurniture::`vftable'; // 9F5464: using guessed type void *ItemDecoration::`vftable'; // 9F54B4: using guessed type void *ItemSkillScroll::`vftable'; // 9F5504: using guessed type void *ItemRecallScroll::`vftable'; // 9F5554: using guessed type void *ItemUpgradeSource::`vftable'; // 9F55A4: using guessed type void *ItemBind::`vftable'; // 9F55F4: using guessed type void *ItemChest::`vftable'; // 9F5644: using guessed type void *ItemGBCoin::`vftable'; // 9F5694: using guessed type void *ItemCapsule::`vftable'; // 9F56EC: using guessed type void *ItemTimedItem::`vftable'; // 9F5744: using guessed type void *ItemEnchant::`vftable'; // 9F5794: using guessed type void *ItemWeaponTitleLicense::`vftable'; // 9F57E4: using guessed type void *ItemKQ::`vftable'; // 9F5834: using guessed type void *ItemHouseSkin::`vftable'; // 9F5884: using guessed type void *ItemUpRed::`vftable'; // 9F58D4: using guessed type void *ItemUpBlue::`vftable'; // 9F5924: using guessed type void *ItemKQStep::`vftable'; // 9F5974: using guessed type void *ItemFeed::`vftable'; // 9F59C4: using guessed type void *ItemRiding::`vftable'; // 9F5A14: using guessed type void *ItemAmount::`vftable'; // 9F5A64: using guessed type void *ItemUpGold::`vftable'; // 9F5AB4: using guessed type void *ItemChargedAction::`vftable'; // 9F5B04: using guessed type void *ItemCollectCloseCard::`vftable'; // 9F5B54: using guessed type void *ItemCollectOpenCard::`vftable'; // 9F5BA4: using guessed type void *ItemNoEffect::`vftable'; // 9F5BF4: using guessed type void *ItemActiveskill::`vftable'; // 9F5C44: using guessed type void *ItemPet::`vftable'; // 9F5CA4: using guessed type void *ItemBracelet::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (006899D0) -------------------------------------------------------- _DWORD *__cdecl sub_6899D0(unsigned __int16 a1) { int v1; // edi unsigned __int8 (__thiscall *v2)(int, _DWORD); // eax int v3; // edx int v4; // eax _DWORD *result; // eax _DWORD *v6; // esi _BYTE *v7; // eax unsigned __int16 v8; // [esp+8h] [ebp-6Ch] __int16 v9; // [esp+11h] [ebp-63h] __int16 v10; // [esp+17h] [ebp-5Dh] __int16 v11; // [esp+1Dh] [ebp-57h] memset(&v8, 0, 0x67u); v1 = dword_ACB230; v2 = *(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16); v8 = a1; if ( v2(dword_ACB230, a1) ) { if ( a1 <= *(_WORD *)(v1 + 200) ) { v3 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v3 + 4 * a1) ) { v4 = *(_DWORD *)(v3 + 4 * a1); if ( v4 ) { if ( *(_DWORD *)(v4 + 102) == 5 ) { v9 = -1; v10 = -1; v11 = -1; } } } } } result = sub_6876E0(&v8); v6 = result; if ( result ) { v7 = (_BYTE *)(*(int (__thiscall **)(_DWORD *))(*result + 48))(result); if ( v7 ) *v7 = 1; result = v6; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (00689A90) -------------------------------------------------------- int __thiscall sub_689A90(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = sub_4507F0((const char *)(this[28] + 2)); if ( result ) { if ( *(_DWORD *)(result + 36) == 28 ) { result = *(unsigned __int16 *)(result + 40); v1[30] = result; } } return result; } //----- (00689AC0) -------------------------------------------------------- int __thiscall sub_689AC0(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = sub_4507F0((const char *)(this[28] + 2)); if ( result ) { if ( *(_DWORD *)(result + 36) == 28 ) { result = *(unsigned __int16 *)(result + 40); v1[30] = result; } } return result; } //----- (00689AF0) -------------------------------------------------------- int __cdecl sub_689AF0(_BYTE *a1, const void *a2) { unsigned __int8 v2; // cl size_t v3; // esi qmemcpy(a1 + 2, a2, 0x3Eu); v2 = a1[39]; a1[39] = v2; v3 = 3 * ((unsigned int)v2 >> 1); memcpy(a1 + 40, a1 + 40, v3); return v3 + 38; } //----- (00689B30) -------------------------------------------------------- int __cdecl sub_689B30(_BYTE *a1, const void *a2) { unsigned __int8 v2; // cl size_t v3; // esi qmemcpy(a1 + 2, a2, 0x59u); v2 = a1[66]; a1[66] = v2; v3 = 3 * ((unsigned int)v2 >> 1); memcpy(a1 + 67, a1 + 67, v3); return v3 + 65; } //----- (00689B70) -------------------------------------------------------- int __cdecl sub_689B70(_BYTE *a1, const void *a2) { unsigned __int8 v2; // cl size_t v3; // esi qmemcpy(a1 + 2, a2, 0x25u); v2 = a1[14]; a1[14] = v2; v3 = 3 * ((unsigned int)v2 >> 1); memcpy(a1 + 15, a1 + 15, v3); return v3 + 13; } //----- (00689BB0) -------------------------------------------------------- int __cdecl sub_689BB0(int a1, _BYTE *a2) { int v2; // esi *(_BYTE *)(a1 + 2) = *a2; v2 = 8 * (*a2 & 0xF); memcpy((void *)(a1 + 3), a2 + 1, 8 * (*a2 & 0xF)); return v2 + 1; } //----- (00689BE0) -------------------------------------------------------- signed int __cdecl sub_689BE0(int a1, _DWORD *a2) { *(_DWORD *)(a1 + 2) = *a2; *(_DWORD *)(a1 + 6) = a2[1]; *(_DWORD *)(a1 + 10) = a2[2]; *(_DWORD *)(a1 + 14) = a2[3]; return 16; } //----- (00689C10) -------------------------------------------------------- signed int __cdecl sub_689C10(int a1, int a2) { *(_DWORD *)(a1 + 2) = *(_DWORD *)a2; *(_DWORD *)(a1 + 6) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 10) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 14) = *(_DWORD *)(a2 + 12); *(_WORD *)(a1 + 18) = *(_WORD *)(a2 + 16); *(_BYTE *)(a1 + 20) = *(_BYTE *)(a2 + 18); return 19; } //----- (00689C50) -------------------------------------------------------- int __thiscall sub_689C50(_DWORD *this) { return *(_DWORD *)(this[28] + 106); } //----- (00689C60) -------------------------------------------------------- bool __thiscall sub_689C60(int this, int a2) { return *(_WORD *)(this + 8) == *(_WORD *)(a2 + 8) && *(_BYTE *)(*(_DWORD *)(this + 112) + 98) == *(_BYTE *)(*(_DWORD *)(a2 + 112) + 98); } //----- (00689C90) -------------------------------------------------------- bool __thiscall sub_689C90(void *this) { return (unsigned int)(*(int (**)(void))(*(_DWORD *)this + 12))() > 1; } //----- (00689CA0) -------------------------------------------------------- char sub_689CA0() { return 2; } //----- (00689CB0) -------------------------------------------------------- int __thiscall sub_689CB0(int this, unsigned __int8 a2) { int result; // eax result = a2; *(_DWORD *)(this + 10) = a2; return result; } //----- (00689CC0) -------------------------------------------------------- char sub_689CC0() { return 3; } //----- (00689CD0) -------------------------------------------------------- int __thiscall sub_689CD0(_WORD *this, unsigned __int8 a2) { int result; // eax result = a2; this[5] = a2; return result; } //----- (00689CE0) -------------------------------------------------------- int __thiscall sub_689CE0(unsigned __int16 *this) { return this[5]; } //----- (00689CF0) -------------------------------------------------------- char sub_689CF0() { return 4; } //----- (00689D00) -------------------------------------------------------- signed int sub_689D00() { return 64; } //----- (00689D10) -------------------------------------------------------- int __thiscall sub_689D10(unsigned __int8 *this) { return this[18]; } //----- (00689D20) -------------------------------------------------------- int __thiscall sub_689D20(char *this) { return (int)(this + 21); } //----- (00689D30) -------------------------------------------------------- int __thiscall sub_689D30(char *this) { return (int)(this + 47); } //----- (00689D40) -------------------------------------------------------- char __thiscall sub_689D40(_BYTE *this) { return this[46]; } //----- (00689D50) -------------------------------------------------------- char sub_689D50() { return 5; } //----- (00689D60) -------------------------------------------------------- signed int sub_689D60() { return 91; } //----- (00689D70) -------------------------------------------------------- int __thiscall sub_689D70(char *this) { return (int)(this + 74); } //----- (00689D80) -------------------------------------------------------- int __thiscall sub_689D80(char *this) { return (int)(this + 69); } //----- (00689D90) -------------------------------------------------------- char __thiscall sub_689D90(_BYTE *this) { return this[73]; } //----- (00689DA0) -------------------------------------------------------- char sub_689DA0() { return 26; } //----- (00689DB0) -------------------------------------------------------- int __thiscall sub_689DB0(int this, int a2) { int result; // eax result = a2; *(_DWORD *)(this + 10) = a2; return result; } //----- (00689DC0) -------------------------------------------------------- int __thiscall sub_689DC0(_DWORD *this) { return this[30]; } //----- (00689DD0) -------------------------------------------------------- char sub_689DD0() { return 6; } //----- (00689DE0) -------------------------------------------------------- int __thiscall sub_689DE0(char *this) { return (int)(this + 17); } //----- (00689DF0) -------------------------------------------------------- char __thiscall sub_689DF0(_BYTE *this) { return this[21]; } //----- (00689E00) -------------------------------------------------------- char sub_689E00() { return 7; } //----- (00689E10) -------------------------------------------------------- char sub_689E10() { return 37; } //----- (00689E20) -------------------------------------------------------- char sub_689E20() { return 8; } //----- (00689E30) -------------------------------------------------------- char sub_689E30() { return 9; } //----- (00689E40) -------------------------------------------------------- signed int sub_689E40() { return 38; } //----- (00689E50) -------------------------------------------------------- char sub_689E50() { return 10; } //----- (00689E60) -------------------------------------------------------- signed int sub_689E60() { return 10; } //----- (00689E70) -------------------------------------------------------- char sub_689E70() { return 11; } //----- (00689E80) -------------------------------------------------------- char sub_689E80() { return 12; } //----- (00689E90) -------------------------------------------------------- char __thiscall sub_689E90(_BYTE *this, char a2) { char result; // al result = a2; this[10] = a2; return result; } //----- (00689EA0) -------------------------------------------------------- char sub_689EA0() { return 14; } //----- (00689EB0) -------------------------------------------------------- int __thiscall sub_689EB0(unsigned __int8 *this) { return this[10]; } //----- (00689EC0) -------------------------------------------------------- char sub_689EC0() { return 13; } //----- (00689ED0) -------------------------------------------------------- char sub_689ED0() { return 15; } //----- (00689EE0) -------------------------------------------------------- char sub_689EE0() { return 29; } //----- (00689EF0) -------------------------------------------------------- char sub_689EF0() { return 28; } //----- (00689F00) -------------------------------------------------------- signed int sub_689F00() { return 14; } //----- (00689F10) -------------------------------------------------------- int __thiscall sub_689F10(char *this) { return (int)(this + 18); } //----- (00689F20) -------------------------------------------------------- char sub_689F20() { return 39; } //----- (00689F30) -------------------------------------------------------- signed int sub_689F30() { return 18; } //----- (00689F40) -------------------------------------------------------- int __thiscall sub_689F40(char *this) { return (int)(this + 22); } //----- (00689F50) -------------------------------------------------------- char sub_689F50() { return 35; } //----- (00689F60) -------------------------------------------------------- char sub_689F60() { return 16; } //----- (00689F70) -------------------------------------------------------- char sub_689F70() { return 17; } //----- (00689F80) -------------------------------------------------------- char sub_689F80() { return 18; } //----- (00689F90) -------------------------------------------------------- char sub_689F90() { return 19; } //----- (00689FA0) -------------------------------------------------------- char sub_689FA0() { return 20; } //----- (00689FB0) -------------------------------------------------------- char sub_689FB0() { return 21; } //----- (00689FC0) -------------------------------------------------------- char sub_689FC0() { return 22; } //----- (00689FD0) -------------------------------------------------------- char sub_689FD0() { return 23; } //----- (00689FE0) -------------------------------------------------------- signed int sub_689FE0() { return 21; } //----- (00689FF0) -------------------------------------------------------- int __thiscall sub_689FF0(char *this) { return (int)(this + 12); } //----- (0068A000) -------------------------------------------------------- int __thiscall sub_68A000(unsigned __int8 *this) { return this[26]; } //----- (0068A010) -------------------------------------------------------- char sub_68A010() { return 24; } //----- (0068A020) -------------------------------------------------------- char sub_68A020() { return 25; } //----- (0068A030) -------------------------------------------------------- char sub_68A030() { return 27; } //----- (0068A040) -------------------------------------------------------- signed int sub_68A040() { return 6; } //----- (0068A050) -------------------------------------------------------- char sub_68A050() { return 30; } //----- (0068A060) -------------------------------------------------------- signed int sub_68A060() { return 11; } //----- (0068A070) -------------------------------------------------------- int __thiscall sub_68A070(unsigned __int16 *this) { return this[7]; } //----- (0068A080) -------------------------------------------------------- int __thiscall sub_68A080(unsigned __int8 *this) { return this[16]; } //----- (0068A090) -------------------------------------------------------- int __thiscall sub_68A090(int this) { return *(unsigned __int16 *)(this + 17); } //----- (0068A0A0) -------------------------------------------------------- char sub_68A0A0() { return 31; } //----- (0068A0B0) -------------------------------------------------------- signed int sub_68A0B0() { return 7; } //----- (0068A0C0) -------------------------------------------------------- int __thiscall sub_68A0C0(int this) { return *(_DWORD *)(this + 10); } //----- (0068A0D0) -------------------------------------------------------- int __thiscall sub_68A0D0(unsigned __int8 *this) { return this[14]; } //----- (0068A0E0) -------------------------------------------------------- char sub_68A0E0() { return 33; } //----- (0068A0F0) -------------------------------------------------------- char sub_68A0F0() { return 34; } //----- (0068A100) -------------------------------------------------------- char sub_68A100() { return 36; } //----- (0068A110) -------------------------------------------------------- int __thiscall sub_68A110(int this) { return *(_DWORD *)(this + 14); } //----- (0068A120) -------------------------------------------------------- bool __thiscall sub_68A120(_BYTE *this) { return this[35] != 0; } //----- (0068A130) -------------------------------------------------------- signed int sub_68A130() { return 28; } //----- (0068A140) -------------------------------------------------------- char sub_68A140() { return 38; } //----- (0068A150) -------------------------------------------------------- signed int sub_68A150() { return 39; } //----- (0068A160) -------------------------------------------------------- int __thiscall sub_68A160(char *this) { return (int)(this + 10); } //----- (0068A170) -------------------------------------------------------- bool __cdecl sub_68A170(int a1) { bool result; // al int v2; // eax result = 0; if ( !*(_BYTE *)(a1 + 122) ) { v2 = *(_DWORD *)(a1 + 232); if ( v2 == 1 || v2 == 4 || v2 == 5 || v2 == 6 || v2 == 7 || v2 == 8 || v2 == 9 || v2 == 13 ) result = 1; } return result; } //----- (0068A1C0) -------------------------------------------------------- bool __cdecl sub_68A1C0(int a1) { return *(_DWORD *)(a1 + 232) == 18; } //----- (0068A1E0) -------------------------------------------------------- bool __cdecl sub_68A1E0(int a1) { bool result; // al int v2; // eax result = 0; if ( *(_BYTE *)(a1 + 122) ) { v2 = *(_DWORD *)(a1 + 232); if ( v2 == 1 || v2 == 21 || v2 == 5 || v2 == 6 || v2 == 7 || v2 == 8 || v2 == 9 || v2 == 13 || v2 == 17 || v2 == 19 ) result = 1; } return result; } //----- (0068A230) -------------------------------------------------------- bool __cdecl sub_68A230(int a1) { return *(_DWORD *)(a1 + 232) == 2; } //----- (0068A250) -------------------------------------------------------- bool __cdecl sub_68A250(int a1) { return *(_DWORD *)(a1 + 232) == 10; } //----- (0068A270) -------------------------------------------------------- char sub_68A270() { return 0; } //----- (0068A280) -------------------------------------------------------- bool __cdecl sub_68A280(int a1) { int v1; // eax bool result; // al v1 = *(_DWORD *)(a1 + 232); if ( v1 == 3 ) result = 1; else result = v1 == 11; return result; } //----- (0068A2A0) -------------------------------------------------------- bool __cdecl sub_68A2A0(int a1) { bool result; // al if ( *(_BYTE *)(a1 + 122) ) result = *(_DWORD *)(a1 + 232) == 4; else result = 0; return result; } //----- (0068A2C0) -------------------------------------------------------- bool __cdecl sub_68A2C0(int a1) { bool result; // al if ( *(_BYTE *)(a1 + 122) ) result = *(_DWORD *)(a1 + 232) == 16; else result = 0; return result; } //----- (0068A8F0) -------------------------------------------------------- unsigned int sub_68A8F0() { unsigned int v0; // esi unsigned int result; // eax int v2; // edi int v3; // ebx int v4; // ST10_4 int v5; // ST18_4 int v6; // ST20_4 int v7; // ST28_4 int v8; // ST5C_4 int v9; // ST30_4 int v10; // ST38_4 int v11; // ST40_4 int v12; // ST48_4 int v13; // ST50_4 int v14; // ST58_4 int v15; // ST60_4 int v16; // ST68_4 int v17; // ST70_4 int v18; // ST78_4 int v19; // ST80_4 int v20; // ST88_4 int v21; // ST90_4 int v22; // ST98_4 int v23; // STA0_4 int v24; // STA8_4 int v25; // STB0_4 int v26; // STB8_4 int v27; // STC0_4 int v28; // STC8_4 int v29; // ST6C_4 int v30; // ST1C_4 int v31; // ST74_4 int v32; // ST44_4 int v33; // STAC_4 int v34; // ST7C_4 int v35; // ST2C_4 int v36; // ST84_4 int v37; // ST4C_4 int v38; // ST8C_4 int v39; // ST24_4 int v40; // STB4_4 int v41; // ST64_4 int v42; // STBC_4 int v43; // ST3C_4 int v44; // STC4_4 int v45; // ST14_4 int v46; // ST94_4 int v47; // ST54_4 int v48; // ST9C_4 int v49; // ST34_4 int v50; // STA4_4 int v51; // eax int v52; // edx v0 = 0; dword_ADB42C = 0; result = sub_548A40(); if ( result ) { do { v2 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v3 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v4 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v5 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v6 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v7 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v8 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v9 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v10 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v11 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v12 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v13 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v14 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v15 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v16 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v17 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v18 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v19 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v20 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v21 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v22 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v23 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v24 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v25 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v26 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v27 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v28 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v29 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v30 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v31 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v32 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v33 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v34 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v35 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v36 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v37 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v38 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v39 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v40 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v41 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v42 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v43 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v44 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v45 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v46 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v47 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v48 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v49 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v50 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v51 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v52 = *(_DWORD *)(v13 + 139) + *(_DWORD *)(v14 + 143) + *(_DWORD *)(v15 + 147) + *(_DWORD *)(v16 + 151) + *(_DWORD *)(v17 + 155) + *(_DWORD *)(v18 + 159) + *(_DWORD *)(v19 + 163) + *(_DWORD *)(v20 + 167) + *(_DWORD *)(v21 + 171) + *(_DWORD *)(v22 + 175) + *(_DWORD *)(v23 + 179) + *(_DWORD *)(v24 + 183) + *(_DWORD *)(v25 + 187) + *(_DWORD *)(v26 + 191) + *(_DWORD *)(v27 + 195) + *(_DWORD *)(v28 + 199) + *(_DWORD *)(v29 + 203) + *(_DWORD *)(v30 + 207) + *(_DWORD *)(v31 + 211) + *(_DWORD *)(v32 + 215) + *(_DWORD *)(v34 + 220) + *(_DWORD *)(v35 + 224) + *(_DWORD *)(v36 + 228) + *(_DWORD *)(v37 + 232) + *(_DWORD *)(v38 + 236) + *(_DWORD *)(v45 + 250) + *(_DWORD *)(v46 + 254) + *(_DWORD *)(v47 + 258) + *(_DWORD *)(v48 + 262) + *(_DWORD *)(v49 + 266) + *(_DWORD *)(v50 + 270) + *(_DWORD *)(v51 + 274) + *(unsigned __int8 *)(v8 + 122) + *(unsigned __int8 *)(v33 + 219) + *(unsigned __int8 *)(v39 + 240) + *(unsigned __int16 *)(v40 + 241) + *(unsigned __int16 *)(v41 + 243) + *(unsigned __int16 *)(v42 + 245) + *(unsigned __int8 *)(v43 + 247) + *(unsigned __int16 *)(v44 + 248); ++v0; dword_ADB42C = (dword_ADB42C + *(_DWORD *)(v2 + 98) + *(_DWORD *)(v3 + 102) + *(_DWORD *)(v4 + 106) + *(_DWORD *)(v5 + 110) + *(_DWORD *)(v6 + 114) + *(_DWORD *)(v7 + 118) + *(_DWORD *)(v9 + 123) + *(_DWORD *)(v10 + 127) + *(_DWORD *)(v11 + 131) + *(_DWORD *)(v12 + 135) + v52) ^ 0x92; result = sub_548A40(); } while ( v0 < result ); } return result; } // ACB230: using guessed type int dword_ACB230; // ADB42C: using guessed type int dword_ADB42C; //----- (0068AED0) -------------------------------------------------------- unsigned int sub_68AED0() { unsigned int v0; // edi unsigned int result; // eax void *v2; // ecx void *v3; // eax int v4; // esi int v5; // ST04_4 char *v6; // ST00_4 char *v7; // eax int v8; // [esp+10h] [ebp-58h] int v9; // [esp+18h] [ebp-50h] void *v10; // [esp+1Ch] [ebp-4Ch] int v11; // [esp+2Ch] [ebp-3Ch] unsigned int v12; // [esp+30h] [ebp-38h] void *v13; // [esp+3Ch] [ebp-2Ch] int v14; // [esp+4Ch] [ebp-1Ch] unsigned int v15; // [esp+50h] [ebp-18h] int v16; // [esp+64h] [ebp-4h] v0 = 0; result = sub_548A40(); if ( result ) { do { v2 = (void *)(sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0) + 2); v15 = 15; v14 = 0; LOBYTE(v13) = 0; sub_4018E0(&v13, v2, strlen((const char *)v2)); v16 = 0; v9 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v0); v3 = (void *)sub_68B120((int)&v10, (const void **)&v13, &v9); v4 = *(_DWORD *)dword_ADB434; v5 = *(_DWORD *)(*(_DWORD *)dword_ADB434 + 4); v6 = *(char **)dword_ADB434; LOBYTE(v16) = 1; v7 = sub_6CCF70(v6, v5, v3); if ( (unsigned int)(134217726 - dword_ADB438) < 1 ) std::_Xlength_error("list too long"); ++dword_ADB438; *(_DWORD *)(v4 + 4) = v7; **((_DWORD **)v7 + 1) = v7; sub_68B280(&unk_ADB430, (int)&v8, *(_DWORD *)dword_ADB434 + 8, *(void **)dword_ADB434); if ( v12 >= 0x10 ) operator delete(v10); v12 = 15; v11 = 0; LOBYTE(v10) = 0; v16 = -1; if ( v15 >= 0x10 ) operator delete(v13); ++v0; result = sub_548A40(); } while ( v0 < result ); } return result; } // ACB230: using guessed type int dword_ACB230; // ADB438: using guessed type int dword_ADB438; //----- (0068B040) -------------------------------------------------------- void *__stdcall sub_68B040(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x3FFFFFFF || (result = operator new(4 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0068B0A0) -------------------------------------------------------- int __thiscall sub_68B0A0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 134217726 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (0068B120) -------------------------------------------------------- int __cdecl sub_68B120(int a1, const void **a2, int *a3) { int v3; // edi v3 = *a3; *(_DWORD *)(a1 + 20) = 15; *(_DWORD *)(a1 + 16) = 0; *(_BYTE *)a1 = 0; sub_4017F0((const void **)a1, a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 28) = v3; return a1; } //----- (0068B160) -------------------------------------------------------- int __thiscall sub_68B160(void **this, int a2, void *a3) { void *v3; // esi void **v4; // edi void *v5; // ecx int result; // eax void *v7; // [esp+14h] [ebp+Ch] v3 = a3; v4 = this; v5 = *(void **)a3; v7 = *(void **)a3; if ( v3 == *v4 ) { result = a2; *(_DWORD *)a2 = v5; } else { **((_DWORD **)v3 + 1) = *(_DWORD *)v3; *(_DWORD *)(*(_DWORD *)v3 + 4) = *((_DWORD *)v3 + 1); if ( *((_DWORD *)v3 + 7) >= 0x10u ) operator delete(*((void **)v3 + 2)); *((_DWORD *)v3 + 7) = 15; *((_DWORD *)v3 + 6) = 0; *((_BYTE *)v3 + 8) = 0; operator delete(v3); result = a2; v4[1] = (char *)v4[1] - 1; *(_DWORD *)a2 = v7; } return result; } //----- (0068B1D0) -------------------------------------------------------- void __thiscall sub_68B1D0(int this) { int v1; // ebx double v2; // st7 unsigned int v3; // esi signed int v4; // eax int *v5; // ecx int v6; // edi int v9; // ST08_4 int v10; // [esp+8h] [ebp-4h] v1 = this; v2 = *(float *)(this + 40); v3 = *(_DWORD *)(this + 36); *(float *)&v10 = (double)*(unsigned int *)(this + 8) / (double)v3; if ( *(float *)&v10 > v2 ) { v4 = 0; do { if ( v3 >= 0x1FFFFFFF ) break; ++v4; v3 *= 2; } while ( v4 < 3 ); v5 = (int *)(this + 16); v6 = *(_DWORD *)(v1 + 16); v10 = *(int *)(v1 + 4); if ( v6 != *(_DWORD *)(v1 + 20) ) { v5 = (int *)(v1 + 16); *(_DWORD *)(v1 + 20) = v6; } sub_433D40(v5, *v5, (char *)(2 * v3), (int)&v10); *(_DWORD *)(v1 + 32) = v3 - 1; v9 = *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 36) = v3; sub_68B400((_DWORD **)v1, v9); } } //----- (0068B280) -------------------------------------------------------- int __thiscall sub_68B280(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // ebx unsigned int v5; // esi int v6; // eax int v7; // edi int v8; // edx int v9; // ecx int v10; // esi int v11; // eax void **v12; // edx unsigned int v13; // ebx unsigned int v14; // edi unsigned __int8 *v15; // eax unsigned int v16; // edx unsigned __int8 *v17; // ecx int v18; // eax bool v19; // sf void *v20; // ecx int v21; // eax void *v22; // edx int v23; // eax unsigned __int8 *v24; // eax int result; // eax void *v26; // edx int v27; // eax int v28; // [esp+Ch] [ebp-14h] unsigned int v29; // [esp+10h] [ebp-10h] void **v30; // [esp+14h] [ebp-Ch] int v31; // [esp+18h] [ebp-8h] int v32; // [esp+1Ch] [ebp-4h] v4 = this; v5 = this[8]; v31 = (int)this; v6 = sub_40C450((char *)a3); v7 = v5 & v6; v32 = v5 & v6; if ( v4[9] <= (v5 & v6) ) { v7 += -1 - (v5 >> 1); v32 = v7; } v8 = v4[4]; v9 = *(_DWORD *)(v8 + 8 * v7); v10 = v4[1]; v11 = v8 + 8 * v7; v12 = (void **)(v4 + 1); v28 = v9; v30 = (void **)(v4 + 1); if ( v10 == v9 || (v10 = **(_DWORD **)(v11 + 4), v10 == v9) ) { LABEL_18: v20 = a4; if ( v10 != *(_DWORD *)a4 ) { sub_68B0A0(v12, v10, v12, (int)a4, *(_DWORD *)a4, 1u); v20 = a4; } v21 = v4[4]; v22 = *(void **)(v21 + 8 * v7); v23 = v21 + 8 * v7; if ( v22 == *v30 ) { *(_DWORD *)v23 = v20; *(_DWORD *)(*(_DWORD *)(v31 + 16) + 8 * v32 + 4) = v20; } else if ( v22 == (void *)v10 ) { *(_DWORD *)v23 = v20; } else { v26 = **(void ***)(v23 + 4); *(_DWORD *)(v23 + 4) = v26; if ( v26 != v20 ) { v27 = *(_DWORD *)(v31 + 16) + 8 * v32 + 4; *(_DWORD *)v27 = *(_DWORD *)(*(_DWORD *)v27 + 4); } } sub_68B1D0(v31); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; return result; } v13 = *(_DWORD *)(a3 + 16); v29 = *(_DWORD *)(a3 + 20); while ( 1 ) { v10 = *(_DWORD *)(v10 + 4); v14 = *(_DWORD *)(v10 + 24); v15 = (unsigned __int8 *)(v10 + 8); if ( *(_DWORD *)(v10 + 28) >= 0x10u ) v15 = *(unsigned __int8 **)v15; v16 = v13; if ( v13 >= v14 ) v16 = *(_DWORD *)(v10 + 24); v17 = (unsigned __int8 *)a3; if ( v29 >= 0x10 ) v17 = *(unsigned __int8 **)a3; v18 = sub_40C0B0(v17, v15, v16); v19 = v18 < 0; if ( v18 ) break; if ( v13 >= v14 ) { LOBYTE(v18) = v13 != v14; v19 = v18 < 0; break; } LABEL_16: if ( v10 == v28 ) goto LABEL_17; } if ( v19 ) goto LABEL_16; if ( v29 < 0x10 ) v24 = (unsigned __int8 *)a3; else v24 = *(unsigned __int8 **)a3; if ( sub_40C2F0((unsigned __int8 *)(v10 + 8), 0, *(_DWORD *)(v10 + 24), v24, v13) < 0 ) { v10 = *(_DWORD *)v10; LABEL_17: v4 = (_DWORD *)v31; v7 = v32; v12 = v30; goto LABEL_18; } sub_68B160(v30, (int)&a3, a4); result = a2; *(_DWORD *)a2 = v10; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (0068B400) -------------------------------------------------------- int __thiscall sub_68B400(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi void *v4; // ST08_4 bool v5; // bl int v6; // [esp+4h] [ebp-8h] void *v7; // [esp+14h] [ebp+8h] result = a2; v3 = this; if ( *this[1] != a2 ) { v7 = *(void **)(a2 + 4); do { v4 = (void *)*v3[1]; v5 = v4 == v7; result = sub_68B280(v3, (int)&v6, (int)v4 + 8, v4); } while ( !v5 ); } return result; } //----- (0068B470) -------------------------------------------------------- int __thiscall sub_68B470(void *this, int a2, int a3) { int result; // eax if ( a2 == 11 ) return (*(int (**)(void))(*(_DWORD *)this + 544))(); if ( a2 == 12 ) return (*(int (**)(void))(*(_DWORD *)this + 548))(); result = a2 - 13; if ( a2 == 13 ) result = (*(int (**)(void))(*(_DWORD *)this + 552))(); return result; } //----- (0068B4C0) -------------------------------------------------------- int __thiscall sub_68B4C0(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 552))(); } //----- (0068B510) -------------------------------------------------------- _BYTE *__thiscall sub_68B510(_BYTE *this) { _BYTE *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[344] = 0; *((_DWORD *)v1 + 87) = 0; *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 91) = 0; *((_DWORD *)v1 + 96) = 0; *(_DWORD *)v1 = &ItemRepairWin::`vftable'; *((_DWORD *)v1 + 58) = &ItemRepairWin::`vftable'; *((_WORD *)v1 + 180) = 0; *((_WORD *)v1 + 184) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9F5E38: using guessed type void *ItemRepairWin::`vftable'; // 9F5E54: using guessed type void *ItemRepairWin::`vftable'; //----- (0068B570) -------------------------------------------------------- int __usercall sub_68B570@(int a1@, int a2@) { int v2; // esi int result; // eax int v4; // edi char *v5; // eax int v6; // ST18_4 float v7; // ST1C_4 char *v8; // eax v2 = a1; result = *(_DWORD *)(a1 + 352); if ( result ) { if ( *(_DWORD *)(a1 + 348) ) { (*(void (__stdcall **)(int, int))(**(_DWORD **)(a1 + 372) + 472))(*(_DWORD *)(result + 112) + 34, a2); v4 = **(_DWORD **)(v2 + 376); v5 = sub_7549E0("%d", *(unsigned __int16 *)(v2 + 360)); (*(void (__thiscall **)(_DWORD, char *))(v4 + 472))(*(_DWORD *)(v2 + 376), v5); v6 = **(_DWORD **)(v2 + 380); v7 = (double)*(unsigned int *)(v2 + 364) / (double)*(unsigned __int16 *)(v2 + 368) * 100.0; v8 = sub_7549E0("(%d/%d) (%d%%)", *(_DWORD *)(v2 + 364), *(unsigned __int16 *)(v2 + 368), (signed int)v7); result = (*(int (__thiscall **)(_DWORD, char *))(v6 + 472))(*(_DWORD *)(v2 + 380), v8); } } return result; } //----- (0068B650) -------------------------------------------------------- char __thiscall sub_68B650(_DWORD *this, unsigned __int16 a2, char a3) { __int16 v3; // ax v3 = a2 >> 10; if ( a2 >> 10 == 8 ) { LOBYTE(v3) = sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * (a2 & 0x3FF) + 1116), a3); } else if ( v3 == 9 ) { LOBYTE(v3) = sub_536E90(*(_DWORD *)(*(_DWORD *)(this[74] + 716) + 4 * (a2 & 0x3FF) + 348), a3); } return v3; } //----- (0068B6C0) -------------------------------------------------------- char __thiscall sub_68B6C0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf char result; // al volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // edi const CHAR *v19; // eax volatile LONG **v20; // eax int v21; // edi volatile LONG **v22; // eax volatile LONG *v23; // ecx int v24; // ST7C_4 int v25; // eax volatile LONG *v26; // edi const CHAR *v27; // eax volatile LONG **v28; // edi volatile LONG *v29; // edx int v30; // edi int v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ebx const CHAR *v34; // eax int v35; // eax int v36; // edi int v37; // ebx int v38; // eax volatile LONG *v39; // edi volatile LONG v40; // ebx const CHAR *v41; // eax volatile LONG *v42; // ecx int v43; // edi int v44; // ebx int v45; // eax volatile LONG *v46; // edi volatile LONG v47; // ebx const CHAR *v48; // eax int v49; // eax int v50; // edi int v51; // ebx int v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // ecx int v55; // edi int v56; // ebx int v57; // eax volatile LONG *v58; // eax volatile LONG *v59; // ecx int v60; // edi int v61; // ebx int v62; // eax volatile LONG *v63; // eax void (__thiscall ***v64)(_DWORD, signed int); // esi int v65; // [esp+80h] [ebp-24h] int v66; // [esp+84h] [ebp-20h] int v67; // [esp+88h] [ebp-1Ch] int v68; // [esp+8Ch] [ebp-18h] int v69; // [esp+90h] [ebp-14h] int v70; // [esp+94h] [ebp-10h] int v71; // [esp+A0h] [ebp-4h] volatile LONG v72; // [esp+ACh] [ebp+8h] volatile LONG **v73; // [esp+ACh] [ebp+8h] volatile LONG **v74; // [esp+ACh] [ebp+8h] int v75; // [esp+ACh] [ebp+8h] volatile LONG v76; // [esp+ACh] [ebp+8h] int v77; // [esp+ACh] [ebp+8h] v2 = this; v68 = 0; v3 = dword_BA6BA0; v71 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MyHomeRepairKit.nif"); sub_8F66B0(v4, (int)&v68, v3); v5 = v68; if ( !v68 ) { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeRepairKit.nif load fail", "LoadFail", 0); v5 = v68; } v71 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( InterlockedDecrement((volatile LONG *)(v5 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_9; } v9 = sub_8FB140(v68, (int)"Frame", (int)&v69, (int)&v70, 0); if ( sub_8F1440(v2, 0, 0, (int)v9, 0, a2, (int)"ItemRepairWin", 0) ) { v11 = v70; v12 = v69; v67 = v70; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v68, (int)"Theme", (int)&v69, (int)&v70, v13); else v14 = sub_8FB140(v68, (int)"Theme", (int)&v69, (int)&v70, 0); sub_8F3EB0(v69 - v12, v70 - v11, (int)v14, (int)v2, 0, 0); v15 = (volatile LONG *)sub_43D0D0(4u); v16 = sub_8FB140(v68, (int)"IconSlot", (int)&v69, (int)&v70, v15); sub_8F3EB0(v69 - v12, v70 - v11, (int)v16, (int)v2, 0, 0); if ( !sub_8F71E0(v68, (int)"WinTitle", &v69, &v70, &v65, &v66) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v68; v71 = -1; if ( !v68 || InterlockedDecrement((volatile LONG *)(v68 + 4)) ) return 0; v7 = v6 == 0; LABEL_9: if ( !v7 ) (**v6)(v6, 1); return 0; } v17 = sub_421050(7); v18 = sub_8F4A20(v69 - v12, v70 - v11, v65, v66, v17, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v18 + 468))(v18, &dword_AA8D98); v72 = *v18; v19 = sub_40A910(814577584); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v72 + 472))(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v20 = sub_8FB140(v68, (int)"Panel01", (int)&v69, (int)&v70, 0); v21 = v67; sub_8F3EB0(v69 - v12, v70 - v67, (int)v20, (int)v2, 0, 0); v22 = sub_8FB140(v68, (int)"Plane", (int)&v69, (int)&v70, 0); sub_8F3EB0(v69 - v12, v70 - v21, (int)v22, (int)v2, 0, 0); v73 = sub_8FB140(v68, (int)"ClsNor", (int)&v69, (int)&v70, 0); sub_8FB650(v73, v68, (int)"ClsClick"); sub_8FB650(v73, v68, (int)"ClsOver"); sub_8FE0F0(v69 - v12, v70 - v21, (int)v73, (int)v2, 11, 0, 0); v74 = sub_8FB140(v68, (int)"Btn01Nor", (int)&v69, (int)&v70, 0); sub_8FB650(v74, v68, (int)"Btn01Click"); sub_8FB650(v74, v68, (int)"Btn01Over"); sub_8FE0F0(v69 - v12, v70 - v21, (int)v74, (int)v2, 12, 0, 0); v23 = v74[9]; v75 = *(_DWORD *)(*v23 + 24); v24 = *(_DWORD *)(*v23 + 20); v25 = sub_421050(7); v26 = sub_8F4A20(v69 - v12, v70 - v21, v24, v75, v25, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v76 = *v26; v27 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v26, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v28 = sub_8FB140(v68, (int)"Btn02Nor", (int)&v69, (int)&v70, 0); sub_8FB650(v28, v68, (int)"Btn02Click"); sub_8FB650(v28, v68, (int)"Btn02Over"); sub_8FE0F0(v69 - v12, v70 - v67, (int)v28, (int)v2, 13, 0, 0); v29 = v28[9]; v30 = *(_DWORD *)(*v29 + 24); v77 = *(_DWORD *)(*v29 + 20); v31 = sub_421050(7); v32 = sub_8F4A20(v69 - v12, v70 - v67, v77, v30, v31, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v33 = *v32; v34 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); v35 = *sub_8FB140(v68, (int)"Text02", (int)&v69, (int)&v70, 0)[9]; v36 = *(_DWORD *)(v35 + 24); v37 = *(_DWORD *)(v35 + 20); v38 = sub_421050(7); v39 = sub_8F4A20(v69, v70, v37, v36, v38, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v39 + 488))(v39, 5); v40 = *v39; v41 = sub_40A910(1468112500); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v39, v41); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v42 = sub_8FB140(v68, (int)"Text03", (int)&v69, (int)&v70, 0)[9]; v43 = *(_DWORD *)(*v42 + 24); v44 = *(_DWORD *)(*v42 + 20); v45 = sub_421050(7); v46 = sub_8F4A20(v69, v70, v44, v43, v45, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v46 + 488))(v46, 5); v47 = *v46; v48 = sub_40A910(-659088102); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v47 + 472))(v46, v48); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v46 + 240))(v46, 0); v49 = *sub_8FB140(v68, (int)"Text01", (int)&v69, (int)&v70, 0)[9]; v50 = *(_DWORD *)(v49 + 24); v51 = *(_DWORD *)(v49 + 20); v52 = sub_421050(7); v53 = sub_8F4A20(v69, v70, v51, v50, v52, (int)v2, 0, 0); v2[93] = v53; (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 5); (*(void (__stdcall **)(void *))(*v2[93] + 472))(&unk_9F5D09); (*(void (__stdcall **)(_DWORD))(*v2[93] + 240))(0); v54 = sub_8FB140(v68, (int)"TextVal02", (int)&v69, (int)&v70, 0)[9]; v55 = *(_DWORD *)(*v54 + 24); v56 = *(_DWORD *)(*v54 + 20); v57 = sub_421050(7); v58 = sub_8F4A20(v69, v70, v56, v55, v57, (int)v2, 0, 0); v2[94] = v58; (*(void (__thiscall **)(volatile LONG *, signed int))(*v58 + 488))(v58, 5); (*(void (__stdcall **)(void *))(*v2[94] + 472))(&unk_9F5D0A); (*(void (__stdcall **)(_DWORD))(*v2[94] + 240))(0); v59 = sub_8FB140(v68, (int)"TextVal03", (int)&v69, (int)&v70, 0)[9]; v60 = *(_DWORD *)(*v59 + 24); v61 = *(_DWORD *)(*v59 + 20); v62 = sub_421050(7); v63 = sub_8F4A20(v69, v70, v61, v60, v62, (int)v2, 0, 0); v2[95] = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); (*(void (__stdcall **)(void *))(*v2[95] + 472))(&unk_9F5D0B); (*(void (__stdcall **)(_DWORD))(*v2[95] + 240))(0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v71 = -1; if ( v68 ) { v64 = (void (__thiscall ***)(_DWORD, signed int))v68; if ( !InterlockedDecrement((volatile LONG *)(v68 + 4)) ) { if ( v64 ) (**v64)(v64, 1); } } result = 1; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))v68; v71 = -1; if ( v68 && !InterlockedDecrement((volatile LONG *)(v68 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0068BEB0) -------------------------------------------------------- void __thiscall sub_68BEB0(int this) { int v1; // esi int v2; // eax int v3; // ecx _DWORD *v4; // esi const CHAR *v5; // eax char *v6; // eax volatile LONG *v7; // eax bool v8; // zf char v9; // al int v10; // [esp-4h] [ebp-Ch] char v11; // [esp+4h] [ebp-4h] __int16 v12; // [esp+5h] [ebp-3h] v1 = this; v2 = *(unsigned __int16 *)(this + 368); v3 = *(_DWORD *)(this + 364); if ( v3 == v2 ) { v10 = 492846737; LABEL_3: v4 = *(_DWORD **)(v1 + 296); v5 = sub_40A910(v10); sub_492060(v4, (int)v5); return; } if ( *(_BYTE *)(v1 + 344) ) { v10 = 123673116; goto LABEL_3; } if ( *(unsigned __int16 *)(v1 + 360) <= (unsigned int)(v2 - v3) ) { v8 = (*(unsigned __int8 (**)(void))(**(_DWORD **)(v1 + 352) + 4))() == 26; v9 = *(_BYTE *)(v1 + 356); v12 = *(_WORD *)(v1 + 357); v11 = v9; if ( v8 ) sub_6F3D10(&off_AB7F2C, 12, 53, &v11, 3u); else sub_6F3D10(&off_AB7F2C, 12, 100, &v11, 3u); *(_BYTE *)(v1 + 344) = 1; } else { v6 = (char *)sub_40A910(-666494421); v7 = sub_462C30(2, v6); *(_DWORD *)(v1 + 384) = v7; (**((void (__stdcall ***)(int))v7 + 58))(v1 + 232); } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0068BFA0) -------------------------------------------------------- char __thiscall sub_68BFA0(int *this) { int *v1; // esi _DWORD *v2; // edi _DWORD *v3; // edi const CHAR *v4; // eax int v5; // edx int (__thiscall *v6)(int *); // eax char result; // al v1 = this; dword_B67404 = 0; v2 = *(_DWORD **)(this[74] + 716); dword_ACEC24 = 0; if ( this[87] ) sub_536E90(v2[*((unsigned __int8 *)this + 356) + 87], 0); if ( v1[88] ) sub_68B650(v1, *(_WORD *)((char *)v1 + 357), 0); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 260))(v2) ) { sub_8F86A0(&unk_BA6B10, v2); sub_4A6BA0((_DWORD **)v1[74]); } v3 = (_DWORD *)v1[74]; v4 = sub_40A910(1860367285); sub_492060(v3, (int)v4); v5 = *v1; *((_WORD *)v1 + 180) = 0; v6 = *(int (__thiscall **)(int *))(v5 + 260); *((_WORD *)v1 + 184) = 0; *((_BYTE *)v1 + 344) = 0; v1[87] = 0; v1[88] = 0; v1[91] = 0; v1[96] = 0; result = v6(v1); if ( result ) result = sub_8F86A0(&unk_BA6B10, v1); return result; } // ACEC24: using guessed type int dword_ACEC24; // B67404: using guessed type int dword_B67404; //----- (0068C090) -------------------------------------------------------- char __thiscall sub_68C090(int *this) { int *v1; // esi _DWORD *v2; // edi _DWORD *v3; // edi const CHAR *v4; // eax int v5; // edx int (__thiscall *v6)(int *); // eax char result; // al v1 = this; dword_B67404 = 0; v2 = *(_DWORD **)(this[74] + 716); dword_ACEC24 = 0; if ( this[87] ) sub_536E90(v2[*((unsigned __int8 *)this + 356) + 87], 0); if ( v1[88] ) sub_68B650(v1, *(_WORD *)((char *)v1 + 357), 0); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v2 + 260))(v2) ) { sub_8F86A0(&unk_BA6B10, v2); sub_4A6BA0((_DWORD **)v1[74]); } v3 = (_DWORD *)v1[74]; v4 = sub_40A910(791645580); sub_492060(v3, (int)v4); v5 = *v1; *((_WORD *)v1 + 180) = 0; v6 = *(int (__thiscall **)(int *))(v5 + 260); *((_WORD *)v1 + 184) = 0; *((_BYTE *)v1 + 344) = 0; v1[87] = 0; v1[88] = 0; v1[91] = 0; v1[96] = 0; result = v6(v1); if ( result ) result = sub_8F86A0(&unk_BA6B10, v1); return result; } // ACEC24: using guessed type int dword_ACEC24; // B67404: using guessed type int dword_B67404; //----- (0068C180) -------------------------------------------------------- int __thiscall sub_68C180(int this, unsigned __int16 a2) { int v2; // esi unsigned int v3; // eax int v4; // eax unsigned int v5; // eax int result; // eax __int16 v7; // ax int v8; // ecx v2 = this; *(_WORD *)(this + 357) = a2; if ( a2 >> 10 == 8 ) { v3 = a2 & 0x3FF; if ( v3 < 0x1E ) v4 = dword_ADA534[v3]; else v4 = 0; LABEL_9: *(_DWORD *)(this + 352) = v4; goto LABEL_10; } if ( a2 >> 10 == 9 ) { v5 = a2 & 0x3FF; if ( v5 < 0xC0 ) v4 = dword_ADA234[v5]; else v4 = 0; goto LABEL_9; } LABEL_10: sub_68B650((_DWORD *)this, a2, 1); result = (*(int (**)(void))(**(_DWORD **)(v2 + 352) + 4))(); if ( (_BYTE)result == 26 || (_BYTE)result == 37 ) { v7 = (*(int (**)(void))(**(_DWORD **)(v2 + 352) + 84))(); v8 = *(_DWORD *)(v2 + 352); *(_WORD *)(v2 + 368) = v7; result = (*(int (**)(void))(*(_DWORD *)v8 + 76))(); *(_DWORD *)(v2 + 364) = result; } return result; } // ADA534: using guessed type int dword_ADA534[]; //----- (0068C230) -------------------------------------------------------- void __thiscall sub_68C230(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi char v5; // al char v6; // al char v7; // al v4 = this; if ( a2 == 27 && a3 ) { if ( *a3 ) { sub_68BFA0(this - 58); } else { if ( !this[30] ) sub_68BFA0(this - 58); v5 = (*(int (**)(void))(*(_DWORD *)v4[30] + 4))(); if ( v5 == 26 ) { v6 = *((_BYTE *)v4 + 124); *(_WORD *)((char *)&a2 + 1) = *(_WORD *)((char *)v4 + 125); LOBYTE(a2) = v6; sub_6F3D10(&off_AB7F2C, 12, 53, &a2, 3u); } else if ( v5 == 37 ) { v7 = *((_BYTE *)v4 + 124); *(_WORD *)((char *)&a2 + 1) = *(_WORD *)((char *)v4 + 125); LOBYTE(a2) = v7; sub_6F3D10(&off_AB7F2C, 12, 100, &a2, 3u); } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0068C2E0) -------------------------------------------------------- char __thiscall sub_68C2E0(int *this) { int *v1; // esi int v2; // eax v1 = this; dword_B67404 = 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v2 && *(_DWORD *)(v2 + 716) ) { sub_68BFA0(v1); LOBYTE(v2) = sub_8F86A0(&unk_BA6B10, v1); } return v2; } // B67404: using guessed type int dword_B67404; //----- (0068C320) -------------------------------------------------------- __int16 __thiscall sub_68C320(int this, unsigned __int8 a2) { int v2; // esi int v3; // eax int v4; // eax v2 = this; *(_BYTE *)(this + 356) = a2; if ( a2 < 0xC0u ) v3 = dword_ADA234[a2]; else v3 = 0; *(_DWORD *)(this + 348) = v3; v4 = sub_4507F0((const char *)(*(_DWORD *)(v3 + 112) + 2)); if ( v4 && *(_DWORD *)(v4 + 36) == 27 ) { LOWORD(v4) = *(_WORD *)(v4 + 40); *(_WORD *)(v2 + 360) = v4; } return v4; } //----- (0068C380) -------------------------------------------------------- volatile LONG *__cdecl sub_68C380(int a1) { _BYTE *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x184u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_68B510(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0068C4B0) -------------------------------------------------------- void *__thiscall sub_68C4B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemRepairWin::`vftable'; *((_DWORD *)this + 58) = &ItemRepairWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F5E38: using guessed type void *ItemRepairWin::`vftable'; // 9F5E54: using guessed type void *ItemRepairWin::`vftable'; //----- (0068C510) -------------------------------------------------------- int __stdcall sub_68C510(_DWORD *a1) { int result; // eax result = sub_684D70(&byte_ADA230); if ( result ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)result + 80))(result, *a1); return result; } // ADA230: using guessed type char byte_ADA230; //----- (0068C540) -------------------------------------------------------- int __stdcall sub_68C540(_DWORD *a1) { int result; // eax result = sub_684DB0(&byte_ADA230); if ( result ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)result + 80))(result, *a1); return result; } // ADA230: using guessed type char byte_ADA230; //----- (0068C570) -------------------------------------------------------- void sub_68C570() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ADB45C; if ( dword_ADB45C ) { if ( !InterlockedDecrement((volatile LONG *)(dword_ADB45C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_ADB45C = 0; } } // ADB45C: using guessed type int dword_ADB45C; //----- (0068C5B0) -------------------------------------------------------- void __thiscall sub_68C5B0(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // esi signed int v4; // eax int v5; // ST08_4 char *v6; // eax char *v7; // eax int v8; // ST08_4 char *v9; // eax char *v10; // eax int v11; // esi char *v12; // eax char *v13; // eax _DWORD *v14; // esi signed int v15; // eax int v16; // ST08_4 char *v17; // eax char *v18; // eax int v19; // ST08_4 char *v20; // eax char *v21; // eax int v22; // esi char *v23; // eax char *v24; // eax signed int v25; // [esp-8h] [ebp-28h] signed int v26; // [esp-8h] [ebp-28h] signed int v27; // [esp-4h] [ebp-24h] signed int v28; // [esp-4h] [ebp-24h] signed int v29; // [esp+14h] [ebp-Ch] signed int v30; // [esp+14h] [ebp-Ch] float v31; // [esp+18h] [ebp-8h] float v32; // [esp+18h] [ebp-8h] _DWORD *v33; // [esp+1Ch] [ebp-4h] _DWORD *v34; // [esp+1Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)sub_684D70(&byte_ADA230); if ( v3 ) { v33 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v31 = (double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v3 + 76))(v3); v29 = (signed int)(v31 / (double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v3 + 84))(v3) * 100.0); v4 = (signed int)v31; if ( v4 ) { if ( v4 >= 11 || v2[20] == v4 ) { v2[17] = 0; } else { v8 = v3[28] + 34; v9 = (char *)sub_40A910(658343308); v10 = sub_7549E0(v9, (signed int)v31, v8); sub_492060(v33, (int)v10); } v2[20] = (signed int)v31; } else { if ( v2[20] ) { v5 = v3[28] + 34; v6 = (char *)sub_40A910(255678066); v7 = sub_7549E0(v6, (signed int)v31, v5); sub_492060(v33, (int)v7); } v2[20] = 0; } if ( v29 == 30 || v29 == 10 || v29 == 1 || !v29 ) { if ( v2[19] != v29 ) { *((_BYTE *)v2 + 72) = 1; v2[19] = v29; goto LABEL_20; } if ( *((_BYTE *)v2 + 72) && v2[17] < 5 && a2 - *((float *)v2 + 16) > 5.0 ) { LABEL_20: v11 = v3[28] + 34; if ( v29 ) { v27 = v29; v25 = v11; v12 = (char *)sub_40A910(116862768); } else { v27 = v11; v25 = (signed int)v31; v12 = (char *)sub_40A910(255678066); } v13 = sub_7549E0(v12, v25, v27); sub_492060(v33, (int)v13); ++v2[17]; *((float *)v2 + 16) = a2; goto LABEL_26; } if ( v2[17] > 4 ) { v2[17] = 0; *((_BYTE *)v2 + 72) = 0; } } } LABEL_26: v14 = (_DWORD *)sub_684D70(&byte_ADA230); if ( v14 ) { v34 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v32 = (double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v14 + 76))(v14); v30 = (signed int)(v32 / (double)(unsigned int)(*(int (__thiscall **)(_DWORD *))(*v14 + 84))(v14) * 100.0); v15 = (signed int)v32; if ( v15 ) { if ( v15 >= 11 || v2[26] == v15 ) { v2[24] = 0; } else { v19 = v14[28] + 34; v20 = (char *)sub_40A910(658343308); v21 = sub_7549E0(v20, (signed int)v32, v19); sub_492060(v34, (int)v21); } v2[26] = (signed int)v32; } else { if ( v2[26] ) { v16 = v14[28] + 34; v17 = (char *)sub_40A910(255678066); v18 = sub_7549E0(v17, (signed int)v32, v16); sub_492060(v34, (int)v18); } v2[26] = 0; } if ( v30 == 30 || v30 == 10 || v30 == 1 || !v30 ) { if ( v2[25] != v30 ) { *((_BYTE *)v2 + 88) = 1; v2[25] = v30; goto LABEL_45; } if ( *((_BYTE *)v2 + 88) && v2[24] < 5 && a2 - *((float *)v2 + 23) > 5.0 ) { LABEL_45: v22 = v14[28] + 34; if ( v30 ) { v28 = v30; v26 = v22; v23 = (char *)sub_40A910(116862768); } else { v28 = v22; v26 = (signed int)v32; v23 = (char *)sub_40A910(255678066); } v24 = sub_7549E0(v23, v26, v28); sub_492060(v34, (int)v24); ++v2[24]; *((float *)v2 + 23) = a2; return; } if ( v2[24] > 4 ) { v2[24] = 0; *((_BYTE *)v2 + 88) = 0; } } } } // ADA230: using guessed type char byte_ADA230; //----- (0068C8E0) -------------------------------------------------------- void __stdcall sub_68C8E0(int a1) { int v1; // eax int v2; // esi __int16 v3; // ax __int16 v4; // cx unsigned int v5; // eax int v6; // edi unsigned int v7; // eax int v8; // edi const CHAR *v9; // eax const CHAR *v10; // eax v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = v1; if ( *(_WORD *)(a1 + 6) == 6784 ) { v3 = *(_WORD *)(a1 + 4); v4 = *(_WORD *)(a1 + 4) >> 10; if ( v4 == 8 ) { v5 = v3 & 0x3FF; if ( v5 < 0x1E ) { v6 = dword_ADA534[v5]; if ( v6 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6) == 26 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 80))(v6, *(_DWORD *)a1); sub_68C090(*(int **)(v2 + 1216)); } } } } else if ( v4 == 9 ) { v7 = v3 & 0x3FF; if ( v7 < 0xC0 ) { v8 = dword_ADA234[v7]; if ( v8 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v8 + 4))(v8) == 26 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 80))(v8, *(_DWORD *)a1); sub_68C090(*(int **)(v2 + 1216)); } } } } } else { sub_68BFA0(*(int **)(v1 + 1216)); switch ( *(unsigned __int16 *)(a1 + 6) ) { case 0x1A81u: case 0x1A83u: case 0x1A84u: v9 = sub_40A910(-1292446161); goto LABEL_15; case 0x1A82u: v9 = sub_40A910(-264214640); goto LABEL_15; case 0x1A86u: v9 = sub_40A910(1842448087); goto LABEL_15; case 0x1A87u: v9 = sub_40A910(492846737); goto LABEL_15; case 0x1A88u: v9 = sub_40A910(-1055206953); LABEL_15: sub_492060((_DWORD *)v2, (int)v9); break; case 0x1A89u: v10 = sub_40C190(-723960768); sub_492060((_DWORD *)v2, (int)v10); break; default: return; } } } // ADA534: using guessed type int dword_ADA534[]; //----- (0068CA40) -------------------------------------------------------- void __stdcall sub_68CA40(int a1) { int v1; // eax int v2; // esi __int16 v3; // ax __int16 v4; // cx unsigned int v5; // eax int v6; // edi unsigned int v7; // eax int v8; // edi const CHAR *v9; // eax const CHAR *v10; // eax v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = v1; if ( *(_WORD *)(a1 + 6) == 6784 ) { v3 = *(_WORD *)(a1 + 4); v4 = *(_WORD *)(a1 + 4) >> 10; if ( v4 == 8 ) { v5 = v3 & 0x3FF; if ( v5 < 0x1E ) { v6 = dword_ADA534[v5]; if ( v6 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6) == 37 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 80))(v6, *(_DWORD *)a1); sub_68C090(*(int **)(v2 + 1216)); } } } } else if ( v4 == 9 ) { v7 = v3 & 0x3FF; if ( v7 < 0xC0 ) { v8 = dword_ADA234[v7]; if ( v8 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v8 + 4))(v8) == 37 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 80))(v8, *(_DWORD *)a1); sub_68C090(*(int **)(v2 + 1216)); } } } } } else { sub_68BFA0(*(int **)(v1 + 1216)); switch ( *(unsigned __int16 *)(a1 + 6) ) { case 0x1A81u: case 0x1A83u: case 0x1A84u: v9 = sub_40A910(-1292446161); goto LABEL_15; case 0x1A82u: v9 = sub_40A910(-264214640); goto LABEL_15; case 0x1A86u: v9 = sub_40A910(1842448087); goto LABEL_15; case 0x1A87u: v9 = sub_40A910(492846737); goto LABEL_15; case 0x1A88u: v9 = sub_40A910(-1055206953); LABEL_15: sub_492060((_DWORD *)v2, (int)v9); break; case 0x1A89u: v10 = sub_40C190(-723960768); sub_492060((_DWORD *)v2, (int)v10); break; default: return; } } } // ADA534: using guessed type int dword_ADA534[]; //----- (0068CBC0) -------------------------------------------------------- char __stdcall sub_68CBC0(int a1, int a2, int a3, _DWORD *a4) { char result; // al if ( a1 != 12 ) return 0; switch ( a2 ) { case 54: sub_68C8E0((int)a4); result = 1; break; case 55: sub_68C510(a4); result = 1; break; case 101: sub_68CA40((int)a4); result = 1; break; case 102: sub_68C540(a4); result = 1; break; default: return 0; } return result; } //----- (0068CCB0) -------------------------------------------------------- int __cdecl sub_68CCB0(int a1) { int v1; // eax void ***v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_ADB45C; if ( !dword_ADB45C ) { v2 = (void ***)operator new(0x6Cu); v3 = (int)v2; if ( v2 ) { sub_6C2E00(v2, 0); *(float *)(v3 + 64) = 0.0; *(_DWORD *)v3 = &ItemRepairTask::`vftable'; *(float *)(v3 + 92) = 0.0; *(_DWORD *)(v3 + 8) = &ItemRepairTask::`vftable'; *(_DWORD *)(v3 + 84) = 0; *(_DWORD *)(v3 + 68) = 0; *(_BYTE *)(v3 + 72) = 0; *(_DWORD *)(v3 + 76) = 0; *(_BYTE *)(v3 + 88) = 0; *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)(v3 + 100) = 0; *(_DWORD *)(v3 + 104) = 0; } else { v3 = 0; } v1 = dword_ADB45C; if ( dword_ADB45C != v3 ) { if ( dword_ADB45C ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_ADB45C; if ( !InterlockedDecrement((volatile LONG *)(dword_ADB45C + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = v3; dword_ADB45C = v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); v1 = dword_ADB45C; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // 9F6084: using guessed type void *ItemRepairTask::`vftable'; // 9F60A0: using guessed type void *ItemRepairTask::`vftable'; // ADB45C: using guessed type int dword_ADB45C; //----- (0068CDA0) -------------------------------------------------------- void *__thiscall sub_68CDA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ItemRepairTask::`vftable'; *((_DWORD *)this + 2) = &ItemRepairTask::`vftable'; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6084: using guessed type void *ItemRepairTask::`vftable'; // 9F60A0: using guessed type void *ItemRepairTask::`vftable'; //----- (0068CE00) -------------------------------------------------------- void *__thiscall sub_68CE00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Singleton::`vftable'; if ( dword_ADB460 ) { (**(void (__stdcall ***)(signed int))dword_ADB460)(1); dword_ADB460 = 0; } byte_ADB464 = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F60B8: using guessed type void *Singleton::`vftable'; // ADB460: using guessed type int dword_ADB460; // ADB464: using guessed type char byte_ADB464; //----- (0068CE50) -------------------------------------------------------- void *__thiscall sub_68CE50(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F60C0: using guessed type void *NiTArray::`vftable'; //----- (0068CE80) -------------------------------------------------------- int *__thiscall sub_68CE80(int *this, int *a2) { int v2; // eax v2 = *this; *a2 = *this; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (0068CEC0) -------------------------------------------------------- _DWORD *__thiscall sub_68CEC0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &FadeObjectMgr::`vftable'; this[1] = &NiTArray::`vftable'; this[3] = 0; this[6] = 1; this[4] = 0; this[5] = 0; this[2] = 0; return result; } // 9F60C0: using guessed type void *NiTArray::`vftable'; // 9F60C8: using guessed type void *FadeObjectMgr::`vftable'; //----- (0068CF70) -------------------------------------------------------- char __thiscall sub_68CF70(_DWORD *this, int a2) { _DWORD *v2; // eax unsigned int v3; // edx int v4; // edi int *v5; // ecx bool v6; // bl void (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v9; // [esp+10h] [ebp-18h] unsigned int v10; // [esp+14h] [ebp-14h] int v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v2 = this; v9 = this; v3 = this[4]; v4 = 0; v12 = 0; v10 = v3; if ( !v3 ) { LABEL_10: v12 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); } return 0; } while ( 1 ) { v5 = *(int **)(v2[2] + 4 * v4); if ( v5 ) break; LABEL_9: if ( ++v4 >= v3 ) goto LABEL_10; } v6 = *sub_68CE80(v5, &v11) == a2; if ( v11 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } if ( !v6 ) { v3 = v10; v2 = v9; goto LABEL_9; } v12 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); return 1; } //----- (0068D0A0) -------------------------------------------------------- float *__thiscall sub_68D0A0(float *this, int a2, char a3) { int v3; // eax float *v4; // esi void (__thiscall ***v5)(_DWORD, signed int); // edi v3 = a2; v4 = this; *(_DWORD *)this = a2; if ( a2 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); v3 = a2; } v4[2] = 0.0; *((_BYTE *)v4 + 4) = a3; v4[3] = 0.0; if ( !v3 ) return v4; v5 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } return v4; } //----- (0068D190) -------------------------------------------------------- char __thiscall sub_68D190(_DWORD *this) { _DWORD **v1; // esi _DWORD *v2; // ecx double v4; // st7 float v5; // ST18_4 int v6; // eax _DWORD *v7; // edi int v8; // ebx float *v9; // eax float *v10; // ebx float *v11; // edi float *v12; // eax double v13; // st7 int v14; // eax int v15; // edi _DWORD *v16; // eax _DWORD *v17; // ebx v1 = (_DWORD **)this; v2 = (_DWORD *)*this; if ( !v2 ) return 0; if ( *((_BYTE *)v1 + 4) ) v4 = 0.0; else v4 = 1.0; v5 = v4; *((float *)v1 + 2) = v5; v6 = sub_85C050(v2, 3); v7 = v1[3]; v8 = v6; if ( v7 != (_DWORD *)v6 ) { if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); v1[3] = (_DWORD *)v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } if ( !v1[3] ) { v9 = (float *)operator new(0x60u); v10 = 0; if ( v9 ) v10 = sub_85EBC0(v9); v11 = (float *)v1[3]; if ( v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)v11 + 1) && v11 ) (**(void (__thiscall ***)(float *, signed int))v11)(v11, 1); v1[3] = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)v10 + 1); } sub_403700(*v1, (int)v1[3]); } v12 = (float *)v1[3]; v13 = *((float *)v1 + 2); ++*((_DWORD *)v12 + 22); v12[21] = v13; v14 = sub_85C050(*v1, 0); v15 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); if ( !v15 ) { v16 = operator new(0x20u); v17 = v16; if ( v16 ) { sub_85B2B0(v16); *v17 = &NiAlphaProperty::`vftable'; *((_WORD *)v17 + 14) = 236; *((_BYTE *)v17 + 30) = 0; } else { v17 = 0; } if ( v17 ) { v15 = (int)v17; InterlockedIncrement(v17 + 1); } sub_403700(*v1, v15); } *(_WORD *)(v15 + 28) |= 1u; sub_85C4D0(*v1); if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); return 1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (0068D370) -------------------------------------------------------- char __thiscall sub_68D370(_DWORD *this, int a2, int *a3) { _DWORD *v3; // esi LONG v4; // eax void *v5; // edi float *v6; // eax unsigned int v7; // edi int v9; // [esp-4h] [ebp-28h] int *v10; // [esp+0h] [ebp-24h] void *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v3 = this; v10 = (int *)a2; v12 = 0; v11 = &v10; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); LOBYTE(v4) = sub_68CF70(v3, (int)v10); if ( (_BYTE)v4 ) { v12 = -1; if ( a2 ) { v4 = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !v4 ) { if ( a2 ) LOBYTE(v4) = (**(int (__cdecl ***)(signed int))a2)(1); } } } else { v5 = operator new(0x10u); v11 = v5; LOBYTE(v12) = 1; if ( v5 ) { v10 = a3; v9 = a2; a3 = &v9; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v6 = sub_68D0A0((float *)v5, v9, (char)v10); } else { v6 = 0; } LOBYTE(v12) = 0; a3 = (int *)v6; sub_68D190(v6); v7 = v3[4]; if ( v7 >= v3[3] ) sub_6AA490(v3 + 1, v7 + v3[6]); LOBYTE(v4) = sub_823870(v3 + 1, v7, &a3); v12 = -1; if ( a2 ) { v4 = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !v4 ) { if ( a2 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))a2)(a2, 1); } } } return v4; } //----- (0068D4C0) -------------------------------------------------------- unsigned int __thiscall sub_68D4C0(_DWORD *this, int a2) { _DWORD *v2; // ebx unsigned int result; // eax int v4; // esi int v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi void (__thiscall **v7)(_DWORD, signed int); // edx void (__thiscall ***v8)(_DWORD, signed int); // ecx bool v9; // zf double v10; // st7 double v11; // st7 double v12; // st7 void (__thiscall ***v13)(_DWORD, signed int); // edi unsigned int v14; // edx void **v15; // eax void *v16; // ecx int v17; // eax int (__thiscall ***v18)(_DWORD, signed int); // esi unsigned int v19; // [esp+10h] [ebp-24h] int v20; // [esp+14h] [ebp-20h] unsigned int v21; // [esp+18h] [ebp-1Ch] float v22; // [esp+1Ch] [ebp-18h] int v23; // [esp+20h] [ebp-14h] float v24; // [esp+24h] [ebp-10h] int v25; // [esp+30h] [ebp-4h] v2 = this; result = 0; v19 = this[4]; v21 = 0; if ( !v19 ) return result; while ( 1 ) { v4 = *(_DWORD *)(v2[2] + 4 * result); if ( !v4 ) goto LABEL_23; sub_68CE80((int *)v4, &v23); v25 = 0; if ( !v23 ) { v25 = -1; goto LABEL_23; } sub_4E6780((_DWORD *)v4, &v20); v5 = v20; LOBYTE(v25) = 1; if ( v20 ) break; v6 = (void (__thiscall ***)(_DWORD, signed int))v23; v25 = -1; if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) { v7 = *v6; v8 = v6; LABEL_22: (*v7)(v8, 1); } LABEL_23: result = v21 + 1; v21 = result; if ( result >= v19 ) return result; } v9 = *(_BYTE *)(v4 + 4) == 0; v24 = *(float *)(v4 + 8); if ( !v9 ) { if ( v24 >= 1.0 ) goto LABEL_25; v24 = v24 + flt_ACCFD0; if ( v24 >= 1.0 ) { v10 = v24; v22 = 1.0; LABEL_18: *(float *)(v4 + 8) = v10; v12 = v22; ++*(_DWORD *)(v5 + 88); *(float *)(v5 + 84) = v12; LOBYTE(v25) = 0; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v23; v25 = -1; if ( InterlockedDecrement((volatile LONG *)(v23 + 4)) ) goto LABEL_23; v7 = *v13; v8 = v13; goto LABEL_22; } v22 = v24 * flt_BA45B8; v22 = sin(v22); v11 = v22; goto LABEL_17; } if ( v24 > 0.0 ) { v24 = v24 - flt_ACCFD0; if ( v24 <= 0.0 ) { v10 = v24; v22 = 0.0; goto LABEL_18; } v22 = v24 * flt_BA45B8; v22 = sin(v22); v11 = v22; LABEL_17: v22 = v11; v10 = v24; goto LABEL_18; } LABEL_25: v14 = v21; if ( v21 < v2[4] ) { v15 = (void **)(v2[2] + 4 * v21); v16 = *v15; *v15 = 0; if ( v16 ) --v2[5]; v17 = v2[4] - 1; if ( v14 == v17 ) v2[4] = v17; if ( v16 ) sub_68D760(v16, 1); } LOBYTE(v25) = 0; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v18 = (int (__thiscall ***)(_DWORD, signed int))v23; v25 = -1; result = InterlockedDecrement((volatile LONG *)(v23 + 4)); if ( !result ) result = (**v18)(v18, 1); return result; } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (0068D700) -------------------------------------------------------- _DWORD *__thiscall sub_68D700(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; *(_DWORD *)this = &FadeObjectMgr::`vftable'; v3 = (void *)*((_DWORD *)this + 2); *((_DWORD *)this + 1) = &NiTArray::`vftable'; operator delete[](v3); *v2 = &Singleton::`vftable'; if ( dword_ADB460 ) { (**(void (__stdcall ***)(signed int))dword_ADB460)(1); dword_ADB460 = 0; } byte_ADB464 = 1; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F60B8: using guessed type void *Singleton::`vftable'; // 9F60C0: using guessed type void *NiTArray::`vftable'; // 9F60C8: using guessed type void *FadeObjectMgr::`vftable'; // ADB460: using guessed type int dword_ADB460; // ADB464: using guessed type char byte_ADB464; //----- (0068D760) -------------------------------------------------------- int *__thiscall sub_68D760(void *this, char a2) { int *v2; // edi int v3; // esi int v4; // esi v2 = (int *)this; v3 = *((_DWORD *)this + 3); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0068D810) -------------------------------------------------------- char sub_68D810() { return 1; } //----- (0068D820) -------------------------------------------------------- void __thiscall sub_68D820(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi _DWORD *v5; // esi _DWORD *v6; // ST00_4 v1 = this; v2 = this[6]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[6] = 0; } v3 = v1[7]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[7] = 0; } v4 = v1[8]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[8] = 0; } v5 = (_DWORD *)v1[2]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[1] + 8))(v1 + 1, v6); } v1[4] = 0; v1[2] = 0; v1[3] = 0; } //----- (0068D8C0) -------------------------------------------------------- void __thiscall sub_68D8C0(int this, float a2) { int v2; // esi _DWORD *v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // ecx float v8; // [esp+14h] [ebp+8h] v2 = this; v3 = *(_DWORD **)(this + 8); *(float *)(this + 20) = 1.0 / (flt_AB52A0 / 10.0); while ( v3 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) *(float *)(v4 + 12) = *(float *)(v2 + 20); } v8 = sub_6A17B0((int)&byte_B68508, a2); v5 = *(_DWORD *)(v2 + 24); if ( v5 ) (*(void (__stdcall **)(float))(*(_DWORD *)v5 + 64))(COERCE_FLOAT(LODWORD(v8))); v6 = *(_DWORD *)(v2 + 28); if ( v6 ) (*(void (__stdcall **)(float))(*(_DWORD *)v6 + 64))(COERCE_FLOAT(LODWORD(v8))); v7 = *(_DWORD *)(v2 + 32); if ( v7 ) (*(void (__stdcall **)(float))(*(_DWORD *)v7 + 64))(COERCE_FLOAT(LODWORD(v8))); } // AB52A0: using guessed type float flt_AB52A0; // B68508: using guessed type char byte_B68508; //----- (0068D960) -------------------------------------------------------- void __thiscall sub_68D960(float *this, _DWORD *a2) { float *v2; // edi float *v3; // eax float *v4; // esi int v5; // edx void (__thiscall *v6)(float *, _DWORD); // eax _DWORD *v7; // eax _DWORD *v8; // ecx v2 = this; if ( a2 ) { v3 = (float *)sub_85B610(a2, (int)dword_BA3BD0); v4 = v3; if ( v3 ) { v5 = *(_DWORD *)v3; *((_WORD *)v3 + 4) = (_WORD)v3[2] & 0xFFF8 | 8; v6 = *(void (__thiscall **)(float *, _DWORD))(v5 + 60); v4[3] = v2[5]; v6(v4, 0.0); v7 = (_DWORD *)(*(int (__thiscall **)(float *))(*((_DWORD *)v2 + 1) + 4))(v2 + 1); v7[2] = v4; *v7 = 0; v7[1] = *((_DWORD *)v2 + 3); v8 = (_DWORD *)*((_DWORD *)v2 + 3); if ( v8 ) { *v8 = v7; ++*((_DWORD *)v2 + 4); } else { ++*((_DWORD *)v2 + 4); *((_DWORD *)v2 + 2) = v7; } *((_DWORD *)v2 + 3) = v7; } } } //----- (0068D9F0) -------------------------------------------------------- char __thiscall sub_68D9F0(float *this, _DWORD *a2) { _DWORD *v2; // edi float *v3; // esi _DWORD *v5; // eax int v6; // eax _DWORD *v7; // eax int v8; // eax _DWORD *v9; // eax int v10; // eax v2 = a2; v3 = this; if ( !a2 ) return 0; sub_68D820(this); v5 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, void *))(*v2 + 72))(v2, &unk_9F60CC); if ( !v5 || !sub_8F5CC0(v5, &a2) ) return 0; v6 = sub_85C050(a2, 3); sub_56FF80((_DWORD *)v3 + 6, v6); sub_68D960(v3, *((_DWORD **)v3 + 6)); v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 72))(v2, "Light"); if ( !v7 ) return 0; if ( !sub_8F5CC0(v7, &a2) ) return 0; v8 = sub_85C050(a2, 3); sub_56FF80((_DWORD *)v3 + 7, v8); sub_68D960(v3, *((_DWORD **)v3 + 7)); v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 72))(v2, "BackGround"); if ( !v9 || !sub_8F5CC0(v9, &a2) ) return 0; v10 = sub_85C050(a2, 3); sub_56FF80((_DWORD *)v3 + 8, v10); sub_68D960(v3, *((_DWORD **)v3 + 8)); return 1; } //----- (0068DAF0) -------------------------------------------------------- int __thiscall sub_68DAF0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // esi _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST00_4 int result; // eax v1 = this; *this = &LightFogCtrl::`vftable'; v2 = this[8]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[7]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[6]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1 + 1; *v5 = &PgTList::`vftable'; v6 = (_DWORD *)v5[1]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } result = 0; v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,NiTimeController *>::`vftable'; return result; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; // 9F6108: using guessed type void *PgTList::`vftable'; // 9F6118: using guessed type void *LightFogCtrl::`vftable'; //----- (0068DBF0) -------------------------------------------------------- _DWORD *__thiscall sub_68DBF0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &LightFogCtrl::`vftable'; this[4] = 0; this[2] = 0; this[3] = 0; this[1] = &PgTList::`vftable'; this[6] = 0; this[7] = 0; this[8] = 0; *((float *)this + 5) = 1.0 / (flt_AB52A0 / 10.0); return result; } // 9F6108: using guessed type void *PgTList::`vftable'; // 9F6118: using guessed type void *LightFogCtrl::`vftable'; // AB52A0: using guessed type float flt_AB52A0; //----- (0068DC40) -------------------------------------------------------- void *__thiscall sub_68DC40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiTimeController *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; //----- (0068DC70) -------------------------------------------------------- _DWORD *__thiscall sub_68DC70(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiTimeController *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiTimeController *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; // 9F60F8: using guessed type void *NiTPointerListBase,NiTimeController *>::`vftable'; //----- (0068DD00) -------------------------------------------------------- int __thiscall sub_68DD00(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiTimeController *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiTimeController *>::`vftable'; return result; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; // 9F60F8: using guessed type void *NiTPointerListBase,NiTimeController *>::`vftable'; //----- (0068DD80) -------------------------------------------------------- int __thiscall sub_68DD80(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiTimeController *>::`vftable'; return result; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; // 9F6108: using guessed type void *PgTList::`vftable'; //----- (0068DE00) -------------------------------------------------------- _DWORD *__thiscall sub_68DE00(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiTimeController *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F60E8: using guessed type void *NiTListBase,NiTimeController *>::`vftable'; // 9F6108: using guessed type void *PgTList::`vftable'; //----- (0068DE90) -------------------------------------------------------- void *__thiscall sub_68DE90(void *this, char a2) { void *v2; // esi v2 = this; sub_68DAF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0068DEC0) -------------------------------------------------------- int __thiscall sub_68DEC0(_DWORD *this, _DWORD *a2) { int result; // eax this[2] = *a2; this[3] = a2[1]; result = a2[2]; this[4] = result; return result; } //----- (0068DEE0) -------------------------------------------------------- char __thiscall sub_68DEE0(_BYTE *this, char a2) { char result; // al result = a2; this[20] = a2; return result; } //----- (0068DEF0) -------------------------------------------------------- char __thiscall sub_68DEF0(_BYTE *this) { return this[20]; } //----- (0068DF00) -------------------------------------------------------- int __thiscall sub_68DF00(char *this) { return (int)(this + 8); } //----- (0068DF10) -------------------------------------------------------- _DWORD *__thiscall sub_68DF10(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &CMagicCircleController::`vftable'; *((_BYTE *)v1 + 20) = 0; v1[6] = 0; sub_8D6D20((float *)v1 + 7); sub_8D7630(v1 + 7); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F6128: using guessed type void *CMagicCircleController::`vftable'; //----- (0068DF90) -------------------------------------------------------- LONG __thiscall sub_68DF90(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &CMagicCircleController::`vftable'; sub_8D64E0(this + 7); v2 = v1[6]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[6] = 0; } sub_8D6E10(v1 + 7); v3 = v1[6]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F6128: using guessed type void *CMagicCircleController::`vftable'; //----- (0068E050) -------------------------------------------------------- double __thiscall sub_68E050(float *this) { return this[13]; } //----- (0068E060) -------------------------------------------------------- int __thiscall sub_68E060(_DWORD *this) { return this[6]; } //----- (0068E070) -------------------------------------------------------- int __thiscall sub_68E070(int this, float a2) { int v2; // esi int result; // eax v2 = this; if ( *(_BYTE *)(this + 20) ) { *(_WORD *)(*(_DWORD *)(this + 24) + 28) &= 0xFFFEu; sub_8D7B80((_DWORD *)(this + 28), 0.0, *(_DWORD *)(this + 24), this + 8); result = sub_85BED0(*(_DWORD ***)(v2 + 24), a2, 1); } else { *(_WORD *)(*(_DWORD *)(this + 24) + 28) |= 1u; } return result; } //----- (0068E0D0) -------------------------------------------------------- char __thiscall sub_68E0D0(_DWORD *this, int a2) { this[7] = a2; return 1; } //----- (0068E0E0) -------------------------------------------------------- char __thiscall sub_68E0E0(_DWORD *this, char *Src, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // edi volatile LONG *v6; // eax volatile LONG *v7; // ebx _DWORD *v9; // eax int v10; // esi _DWORD *v11; // edi int v12; // ebx void *v13; // eax int v14; // eax int v15; // esi int v16; // ST08_4 volatile LONG *v17; // [esp+14h] [ebp-14h] _DWORD *v18; // [esp+18h] [ebp-10h] v4 = this; v18 = this; v5 = 0; v6 = sub_8F63D0(Src, 0); v7 = v6; v17 = v6; if ( v6 ) InterlockedIncrement(v6 + 1); if ( !v7 ) return 0; Src = (char *)(*(int (__thiscall **)(volatile LONG *, const char *))(*v7 + 72))(v7, "Plane01"); if ( !Src ) { if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); return 0; } v9 = operator new(0xE8u); if ( v9 ) v5 = sub_85A1C0(v9, 0); v10 = v4[6]; if ( (_DWORD *)v10 != v5 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v18[6] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v11 = (_DWORD *)*((_DWORD *)Src + 40); if ( v11 ) { do { v12 = v18[6]; v13 = (void *)v11[2]; v11 = (_DWORD *)*v11; v14 = sub_85BD60(v13); v15 = v14; Src = (char *)v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); sub_8A6330((_DWORD *)(v12 + 156), (int *)&Src); if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); } while ( v11 ); v7 = v17; } sub_85C4D0((_DWORD *)v18[6]); v16 = a4; v18[7] = a3; sub_40C270(v18 + 7, v16); if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); return 1; } //----- (0068E2B0) -------------------------------------------------------- int __thiscall sub_68E2B0(void *this, float a2) { return sub_4558F0((int)this + 28, a2, a2); } //----- (0068E2D0) -------------------------------------------------------- void *__thiscall sub_68E2D0(void *this, char a2) { void *v2; // esi v2 = this; sub_68DF90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0068E300) -------------------------------------------------------- char sub_68E300() { return 1; } //----- (0068E340) -------------------------------------------------------- int __thiscall sub_68E340(_DWORD *this, int a2) { volatile LONG *v2; // esi int v3; // edi volatile LONG *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = 0; v6 = 0; sub_455570(this, a2, (int *)&v5); v2 = v5; if ( !v5 ) return 0; dword_BA4564 = 1; v3 = sub_85BD60((void *)v5); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); return v3; } // BA4564: using guessed type int dword_BA4564; //----- (0068E530) -------------------------------------------------------- LONG __thiscall sub_68E530(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi v1 = this; *this = &Shadow::`vftable'; sub_8D64E0(this + 2); v2 = (void *)v1[28]; if ( v2 ) { sub_8DA040((_DWORD *)v1[28]); operator delete(v2); } v3 = v1[29]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[29] = 0; } v4 = v1[30]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[30] = 0; } v5 = v1[31]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[30]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[29]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); sub_8D6E10(v1 + 2); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F615C: using guessed type void *Shadow::`vftable'; //----- (0068E670) -------------------------------------------------------- void __thiscall sub_68E670(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // esi v3 = this; if ( a2 ) { if ( this[32] ) { sub_8D7B80(this + 2, 0.0, this[31], a3); sub_68EB20((_DWORD *)v3[28], a2); v4 = (_DWORD *)dword_BA46D0; if ( dword_BA46D0 && !*(_DWORD *)(dword_BA46D0 + 116) && !*(_DWORD *)(dword_BA46D0 + 120) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)dword_BA46D0 + 264))(dword_BA46D0) ) { v4[29] = 1; } sub_8DAD80(v3[28], 0.0, 0.0); if ( v4 && v4[29] == 1 && !v4[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 268))(v4) ) v4[29] = 2; if ( v4[29] == 2 && !v4[30] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 272))(v4) ) { ++v4[31]; v4[29] = 0; } } } else { sub_8D7B80(this + 2, 0.0, this[30], a3); } } } // BA46D0: using guessed type int dword_BA46D0; //----- (0068E760) -------------------------------------------------------- float *__thiscall sub_68E760(float *this, int a2, void *a3, int a4, int a5) { float *v5; // esi _DWORD *v6; // ebx unsigned __int8 *v7; // eax _DWORD *v8; // eax int v9; // edi _DWORD *v10; // eax _DWORD *v11; // ebx int v12; // edi int v13; // ebx int v14; // edi int v15; // eax _DWORD *v16; // ecx int v17; // eax int v18; // edi double v19; // st7 int v20; // ecx float v21; // ST20_4 v5 = this; v6 = 0; *(_DWORD *)this = &NiRefObject::`vftable'; this[1] = 0.0; InterlockedIncrement(&Addend); *(_DWORD *)v5 = &Shadow::`vftable'; sub_8D6D20(v5 + 2); v5[29] = 0.0; v5[30] = 0.0; v5[31] = 0.0; *((_DWORD *)v5 + 32) = 1; sub_8D7630(v5 + 2); sub_4558F0((int)(v5 + 2), 100.0, 100.0); v7 = sub_8DB8D0((volatile LONG *)dword_BA46D0, 7); *((_DWORD *)v5 + 2) = a3; *((_DWORD *)v5 + 28) = v7; sub_40C270((_DWORD *)v5 + 2, a4); v8 = operator new(0xE8u); if ( v8 ) v6 = sub_85A1C0(v8, 0); v9 = *((_DWORD *)v5 + 29); if ( (_DWORD *)v9 != v6 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v5 + 29) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } v10 = operator new(0xE8u); if ( v10 ) v11 = sub_85A1C0(v10, 0); else v11 = 0; v12 = *((_DWORD *)v5 + 31); if ( (_DWORD *)v12 != v11 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *((_DWORD *)v5 + 31) = v11; if ( v11 ) InterlockedIncrement(v11 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v5 + 29) + 116))(*((_DWORD *)v5 + 31), 0); v13 = *((_DWORD *)v5 + 31); v14 = *((_DWORD *)v5 + 28); sub_861480(*(_DWORD **)(v14 + 28), *((_DWORD *)v5 + 31)); if ( *(_BYTE *)v14 ) { sub_861480(*(_DWORD **)(v14 + 32), v13); sub_861480(*(_DWORD **)(v14 + 36), v13); sub_861480(*(_DWORD **)(v14 + 40), v13); } v15 = *((_DWORD *)v5 + 28); v16 = *(_DWORD **)(v15 + 24); *(float *)(v15 + 44) = 0.77999997; *(float *)(v15 + 48) = 0.77999997; *(float *)(v15 + 52) = 0.77999997; if ( v16 ) { v16[17] = *(_DWORD *)(v15 + 44); v16[18] = *(_DWORD *)(v15 + 48); v17 = *(_DWORD *)(v15 + 52); ++v16[22]; v16[19] = v17; } if ( a2 ) { v18 = *(_DWORD *)(a2 + 4); v19 = *(float *)(a2 + 8) * 3.0; v20 = *((_DWORD *)v5 + 28) + 76; *(_DWORD *)v20 = *(_DWORD *)a2; v21 = v19; *(_DWORD *)(v20 + 4) = v18; *(float *)(v20 + 8) = v21; sub_4430B0((float *)v20); } return v5; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F615C: using guessed type void *Shadow::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (0068E990) -------------------------------------------------------- int __userpurge sub_68E990@(int a1@, int a2@, int a3@, int a4) { int result; // eax int v5; // edi char *v6; // eax _DWORD *v7; // eax int v8; // ecx _DWORD *v9; // esi void *v10; // eax int v11; // eax void (__thiscall ***v12)(_DWORD, signed int); // esi void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // ecx double v15; // st7 float v16; // ST30_4 float v17; // ST2C_4 int v18; // [esp+34h] [ebp-Ch] result = a4; v5 = a1; if ( *(_DWORD *)(a1 + 128) == a4 ) return result; v18 = a3; *(_DWORD *)(a1 + 128) = a4; if ( result || *(_DWORD *)(a1 + 120) ) goto LABEL_12; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACA520, "Misc\\DecalPlane_Shadow.nif"); v7 = sub_8F63D0(v6, 0); sub_56FF80((_DWORD *)(v5 + 120), (int)v7); result = *(_DWORD *)(v5 + 120); if ( !result ) { *(_DWORD *)(v5 + 128) = 1; return result; } result = (*(int (__stdcall **)(int, _DWORD))(**(_DWORD **)(v5 + 116) + 116))(result, 0); v8 = *(_DWORD *)(v5 + 120); if ( v8 ) { result = (*(int (__stdcall **)(const char *))(*(_DWORD *)v8 + 72))("Editable Mesh"); if ( result ) { v9 = *(_DWORD **)(result + 160); while ( v9 ) { v10 = (void *)v9[2]; v9 = (_DWORD *)*v9; a4 = *(_DWORD *)(v5 + 120); v11 = sub_85BD60(v10); sub_403700((_DWORD *)a4, v11); } LABEL_12: (*(void (__stdcall **)(int *, _DWORD, int, int))(**(_DWORD **)(v5 + 116) + 120))( &a4, *(_DWORD *)(v5 + 120), v18, a2); if ( a4 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(v5 + 116) + 120))(&a4, *(_DWORD *)(v5 + 124)); if ( a4 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } v14 = *(_DWORD *)(v5 + 116); if ( *(_DWORD *)(v5 + 128) ) { (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v14 + 116))(*(_DWORD *)(v5 + 124)); v15 = 100.0; } else { (*(void (__cdecl **)(_DWORD))(*(_DWORD *)v14 + 116))(*(_DWORD *)(v5 + 120)); v15 = 50.0; } v16 = v15; v17 = v15; return sub_4558F0(v5 + 8, v17, v16); } } return result; } // 68E990: could not find valid save-restore pair for ebx // 68E990: could not find valid save-restore pair for esi // ACAD5C: using guessed type char byte_ACAD5C; //----- (0068EB20) -------------------------------------------------------- void __thiscall sub_68EB20(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[18]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[18] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0068EB70) -------------------------------------------------------- void *__thiscall sub_68EB70(void *this, char a2) { void *v2; // esi v2 = this; sub_68E530(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0068EBD0) -------------------------------------------------------- void __thiscall sub_68EBD0(_DWORD *this) { int v1; // esi *this = &SkyCtrl::`vftable'; v1 = this[1]; if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } } // 9F6174: using guessed type void *SkyCtrl::`vftable'; //----- (0068EC40) -------------------------------------------------------- char __thiscall sub_68EC40(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // edi _DWORD *v5; // ST08_4 char v7; // [esp+1Ch] [ebp-30h] float v8; // [esp+28h] [ebp-24h] int v9; // [esp+48h] [ebp-4h] v2 = this; this[2] = 0; v3 = this[1]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[1] = 0; } v4 = v2[1]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[1] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } sub_8D4790(&v7); v5 = (_DWORD *)v2[1]; v9 = 0; sub_8D4A70(&v7, v5); sub_8D4750(&v7, 0.0); v2[2] = (signed int)v8; v9 = -1; sub_8D47C0(&v7); return 1; } //----- (0068ED70) -------------------------------------------------------- void __thiscall sub_68ED70(signed int *this, float a2) { signed int *v2; // esi _DWORD *v3; // eax _DWORD *v4; // eax double v5; // st7 float v6; // ST04_4 char v7; // [esp+Ch] [ebp-20h] float v8; // [esp+18h] [ebp-14h] char v9[4]; // [esp+1Ch] [ebp-10h] int v10; // [esp+20h] [ebp-Ch] int v11; // [esp+24h] [ebp-8h] v2 = this; v8 = sub_6A17B0((int)&byte_B68508, a2); if ( v2[1] ) { v3 = sub_439D70(byte_ADB468, v9); if ( sub_4316B0(v3) ) { v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, "KDVictor", 0xCu); v4 = sub_439D70(byte_ADB468, &v7); if ( *v4 != *(_DWORD *)v9 || v4[1] != v10 || v4[2] != v11 ) { v8 = v8 / (flt_AB52A0 / (double)v2[2]); v5 = v8; } else { v5 = v8; } v6 = v5; sub_85BED0((_DWORD **)v2[1], v6, 1); } } } // AB52A0: using guessed type float flt_AB52A0; // B68508: using guessed type char byte_B68508; //----- (0068EE50) -------------------------------------------------------- void *__thiscall sub_68EE50(void *this, char a2) { void *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &SkyCtrl::`vftable'; v3 = *((_DWORD *)this + 1); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6174: using guessed type void *SkyCtrl::`vftable'; //----- (0068EEB0) -------------------------------------------------------- unsigned int __thiscall sub_68EEB0(int *this, signed int a2) { return sub_87FD80(this, a2); } //----- (0068EEC0) -------------------------------------------------------- int __stdcall sub_68EEC0(int a1) { return sub_81C180(a1); } //----- (0068EED0) -------------------------------------------------------- int __thiscall sub_68EED0(void *this, int a2) { return sub_81C190(this, a2); } //----- (0068EEE0) -------------------------------------------------------- int __stdcall sub_68EEE0(int a1) { return sub_81C180(a1); } //----- (0068EEF0) -------------------------------------------------------- bool __thiscall sub_68EEF0(void *this, int a2) { return sub_872A80(this, a2) != 0; } //----- (0068EF10) -------------------------------------------------------- void __thiscall sub_68EF10(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6DE2B0(this); *((_BYTE *)v1 + 488) = 0; sub_699260(v1); sub_697F70(v1); sub_698390(v1); sub_69A010(v1); sub_6A0800(v1); sub_6948D0(v1); sub_6A11B0(v1); sub_693810(v1); sub_69DEF0(v1); } //----- (0068EF60) -------------------------------------------------------- _DWORD *__thiscall sub_68EF60(_DWORD *this) { _DWORD *v1; // esi v1 = this; nullsub_27(); sub_697FB0(v1); sub_698CA0(v1); sub_699DC0(v1); nullsub_28(v1); sub_694610(v1); sub_6A11C0(v1); nullsub_26(v1); return sub_69E520(v1); } // 692EA0: using guessed type int __thiscall nullsub_26(_DWORD); // 699280: using guessed type int nullsub_27(void); // 6A07F0: using guessed type int __thiscall nullsub_28(_DWORD); //----- (0068EFB0) -------------------------------------------------------- char __thiscall sub_68EFB0(char *this, float a2, float a3) { char *v3; // esi float v5; // ecx _DWORD **v6; // edi signed int v7; // eax float v8; // [esp+4h] [ebp-Ch] v3 = this; if ( !sub_69CDC0(this) ) return 0; if ( !sub_6934F0((float *)v3, a2, a3) ) return 0; if ( !sub_6A11A0() ) return 0; if ( !sub_694A10(v3) ) return 0; if ( !sub_6A07E0() ) return 0; if ( !sub_699D50(v3) ) return 0; if ( !sub_698960(v3) ) return 0; if ( !sub_697F60() ) return 0; if ( !sub_699650(v3) ) return 0; v8 = v5; v6 = (_DWORD **)(v3 + 532); sub_4DC2C0((int *)&v8, (int *)v3 + 133); v7 = sub_6DFF90(v3, (volatile LONG *)LODWORD(v8)); v3[488] = 0; if ( v7 != 1 ) return 0; sub_85C6F0(*v6); sub_85C4D0(*v6); LODWORD(v8) = 1; sub_85BED0((_DWORD **)*v6, 0.0, 1); LODWORD(v8) = 1; sub_85BED0(*((_DWORD ***)v3 + 143058), 0.0, 1); *((_DWORD *)v3 + 143335) = 0; return 1; } //----- (0068F0A0) -------------------------------------------------------- int __userpurge sub_68F0A0@(_DWORD *a1@, int a2@, int a3@, float a4@, float a5) { float v5; // ST04_4 _DWORD *v6; // esi v5 = a4; v6 = a1; sub_6A11D0(a1, a5); sub_694950(v6, a5); sub_693C50((int)v6, a2, a3, (int)v6, a5); sub_698490(v6, a5); sub_698560(a5, (int)v6, v5); sub_69CC30(v6, a5); sub_6A09D0(v6); if ( v6[36] ) sub_6DFD50((int)v6, a2, a3, (int)v6, SLODWORD(a5)); sub_68E070(v6[143152], a5); sub_698310(v6, a5); return sub_69EB40(v6, a5); } // 68F0A0: could not find valid save-restore pair for esi //----- (0068F150) -------------------------------------------------------- _DWORD *__thiscall sub_68F150(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // ecx result = (_DWORD *)this[143138]; result[57] = *a2; result[58] = a2[1]; v3 = a2[2]; ++result[47]; result[59] = v3; return result; } //----- (0068F180) -------------------------------------------------------- _DWORD *__thiscall sub_68F180(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // ecx result = (_DWORD *)this[143138]; result[60] = *a2; result[61] = a2[1]; v3 = a2[2]; ++result[47]; result[62] = v3; return result; } //----- (0068F1B0) -------------------------------------------------------- int *__userpurge sub_68F1B0@(int a1@, int a2@, int *a3, int a4) { int v4; // ecx int *result; // eax int v6; // eax v4 = *(_DWORD *)(a1 + 552); if ( v4 ) { v6 = (*(int (__stdcall **)(int, int))(*(_DWORD *)v4 + 72))(a4, a2); *a3 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (0068F200) -------------------------------------------------------- LONG __cdecl sub_68F200(_DWORD *a1) { LONG result; // eax volatile LONG *v2; // esi unsigned int v3; // edi unsigned int v4; // esi int v5; // [esp+10h] [ebp-14h] volatile LONG *v6; // [esp+14h] [ebp-10h] result = dword_BA46D0; v5 = dword_BA46D0; if ( dword_BA46D0 ) { v2 = *(volatile LONG **)(dword_BA46D0 + 8); v6 = v2; if ( v2 ) result = InterlockedIncrement(v2 + 1); if ( v2 ) { result = (*(int (__thiscall **)(volatile LONG *, _DWORD *))(*v2 + 68))(v2, a1); } else { v3 = a1[1]; v4 = 0; if ( v3 ) { do result = (*(int (__stdcall **)(int))(**(_DWORD **)(*a1 + 4 * v4++) + 116))(v5); while ( v4 < v3 ); } v2 = v6; } if ( v2 ) { result = InterlockedDecrement(v2 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0068F2C0) -------------------------------------------------------- int __thiscall sub_68F2C0(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // edi int v5; // eax int result; // eax int v7; // [esp+10h] [ebp-14h] int v8; // [esp+14h] [ebp-10h] int v9; // [esp+18h] [ebp-Ch] char v10; // [esp+1Ch] [ebp-8h] v3 = this; v4 = this + 143149; sub_49F8D0(this + 143149); v5 = sub_4316B0(v4); v7 = *(_DWORD *)(v5 + 59); v8 = *(_DWORD *)(v5 + 63); v9 = *(_DWORD *)(v5 + 67); result = *((unsigned __int8 *)v3 + 572612); v10 = 0; switch ( result ) { case 0: case 6: case 7: if ( !byte_ACAD5C ) sub_420410(); result = sprintf(a2, "%sfield\\%s\\%s.%s", byte_ACAA48, &v7, &v7, a3); break; case 1: if ( !byte_ACAD5C ) sub_420410(); result = sprintf(a2, "%sKDfield\\%s\\%s.%s", byte_ACAA48, &v7, &v7, a3); break; case 2: if ( !byte_ACAD5C ) sub_420410(); result = sprintf(a2, "%sMHfield\\%s\\%s.%s", byte_ACAA48, &v7, &v7, a3); break; case 3: if ( !byte_ACAD5C ) sub_420410(); result = sprintf(a2, "%sIDfield\\%s\\%s.%s", byte_ACAA48, &v7, &v7, a3); break; case 4: if ( !byte_ACAD5C ) sub_420410(); result = sprintf(a2, "%sfield\\%s\\%s.%s", byte_ACAA48, &v7, &v7, a3); break; default: return result; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0068F420) -------------------------------------------------------- LONG __cdecl sub_68F420(int a1, _DWORD *a2) { LONG result; // eax volatile LONG *v3; // esi result = dword_BA46D0; if ( dword_BA46D0 && a1 ) { v3 = *(volatile LONG **)(dword_BA46D0 + 8); if ( v3 ) InterlockedIncrement(v3 + 1); if ( v3 ) (*(void (__thiscall **)(volatile LONG *, int))(*v3 + 60))(v3, a1); result = sub_68F200(a2); if ( v3 ) result = (*(int (__thiscall **)(volatile LONG *))(*v3 + 64))(v3); if ( v3 ) { result = InterlockedDecrement(v3 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0068F530) -------------------------------------------------------- void __thiscall sub_68F530(int *this) { int *v1; // esi int v2; // ST04_4 float *v3; // ST00_4 int v4; // eax float *v5; // esi _DWORD *v6; // edi int v7; // ecx void *v8; // [esp+10h] [ebp-B4h] int v9; // [esp+14h] [ebp-B0h] int v10; // [esp+18h] [ebp-ACh] int v11; // [esp+1Ch] [ebp-A8h] int v12; // [esp+20h] [ebp-A4h] int v13; // [esp+24h] [ebp-A0h] _DWORD *v14; // [esp+2Ch] [ebp-98h] int v15; // [esp+C0h] [ebp-4h] v1 = this; sub_861DD0(this[143058], (int)(this + 143093)); v8 = 0; v9 = 0; v10 = 0; v11 = 1024; sub_85F230(&v8, 0x400u); v15 = 0; sub_85F910(&v13, (int)&v8); v2 = v1[149]; v3 = (float *)v1[143058]; LOBYTE(v15) = 1; sub_85FB50(v3, v2, &v13, 0); sub_861DD0(v1[143058], (int)(v1 + 143100)); v4 = v1[133]; v5 = (float *)v1[143058]; v12 = v4; if ( dword_BA46D0 ) { if ( v5 ) { if ( v4 ) { v6 = v14; if ( v14 ) { sub_85F6C0((_DWORD *)dword_BA46D0, v5); v7 = v12; v6[1] = 0; (*(void (__thiscall **)(int *, float *, int, _DWORD *))(v13 + 8))(&v13, v5, v7, v6); sub_68F420((int)v5, v6); } } } } LOBYTE(v15) = 0; sub_85F7E0(&v13); operator delete[](v8); } // BA46D0: using guessed type int dword_BA46D0; //----- (0068F6A0) -------------------------------------------------------- _DWORD *__thiscall sub_68F6A0(void *this, _DWORD **a2) { void *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x1Cu); v4 = v3; if ( v3 ) { sub_872A60(v3); *v4 = &NiTextureAccumulator::`vftable'; v4[3] = 0; v4[4] = 0; v4[5] = 0; } else { v4 = 0; } sub_872AA0(v2, (int)v4, a2); return v4; } // 9F633C: using guessed type void *NiTextureAccumulator::`vftable'; //----- (0068F840) -------------------------------------------------------- unsigned int __thiscall sub_68F840(char *this, _DWORD *a2) { unsigned int result; // eax int v3; // esi int v4; // edi unsigned int v5; // eax _BYTE *v6; // edx int v7; // ecx int v8; // edi int v9; // eax unsigned int v10; // eax unsigned int v11; // ecx char *v12; // ecx _DWORD *v13; // eax int v14; // ecx int v15; // eax unsigned int v16; // eax unsigned int v17; // ecx char *v18; // ecx int *v19; // eax unsigned int v20; // [esp+0h] [ebp-Ch] unsigned int v21; // [esp+4h] [ebp-8h] int v22; // [esp+8h] [ebp-4h] result = 0; v20 = a2[1]; v21 = 0; if ( v20 ) { v3 = (int)(this + 12); do { v4 = *(_DWORD *)(*a2 + 4 * result); v5 = *(_DWORD *)(v3 + 4); v22 = v4; if ( (unsigned int)&v22 >= v5 || (v6 = *(_BYTE **)v3, *(_DWORD *)v3 > (unsigned int)&v22) ) { v14 = *(_DWORD *)(v3 + 8); if ( v5 == v14 ) { v15 = (signed int)(v5 - *(_DWORD *)v3) >> 2; JUMPOUT(v15, 1073741822, std::vector>::_Xlen); v16 = v15 + 1; v17 = (v14 - *(_DWORD *)v3) >> 2; if ( v16 > v17 ) { if ( 0x3FFFFFFF - (v17 >> 1) >= v17 ) v18 = (char *)((v17 >> 1) + v17); else v18 = 0; if ( (unsigned int)v18 < v16 ) v18 = (char *)v16; sub_74E360((const void **)v3, v18); } } v19 = *(int **)(v3 + 4); if ( v19 ) *v19 = v4; } else { v7 = *(_DWORD *)(v3 + 8); v8 = ((char *)&v22 - v6) >> 2; if ( v5 == v7 ) { v9 = (signed int)(v5 - (_DWORD)v6) >> 2; JUMPOUT(v9, 1073741822, std::vector>::_Xlen); v10 = v9 + 1; v11 = (v7 - (signed int)v6) >> 2; if ( v10 > v11 ) { if ( 0x3FFFFFFF - (v11 >> 1) >= v11 ) v12 = (char *)((v11 >> 1) + v11); else v12 = 0; if ( (unsigned int)v12 < v10 ) v12 = (char *)v10; sub_74E360((const void **)v3, v12); } } v13 = *(_DWORD **)(v3 + 4); if ( v13 ) *v13 = *(_DWORD *)(*(_DWORD *)v3 + 4 * v8); } *(_DWORD *)(v3 + 4) += 4; result = v21 + 1; v21 = result; } while ( result < v20 ); } return result; } // 68F940: using guessed type void __noreturn std::vector>::_Xlen(); //----- (0068F950) -------------------------------------------------------- void __thiscall sub_68F950(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int i; // edi int v4; // [esp+4h] [ebp-4h] v1 = this; v4 = dword_BA46D0; if ( dword_BA46D0 ) { (*(void (**)(void))(*this + 72))(); v2 = v1[3]; for ( i = v1[4]; v2 != i; v2 += 4 ) (*(void (__stdcall **)(int))(**(_DWORD **)v2 + 116))(v4); sub_4E6D30(v1 + 3, 0); sub_868D50(v1); } } // BA46D0: using guessed type int dword_BA46D0; //----- (0068F9B0) -------------------------------------------------------- void __thiscall sub_68F9B0(_DWORD *this, signed int a2) { int v2; // edi int v3; // edi FILE *v4; // eax int v5; // edi int v6; // edi int *v7; // edi int v8; // edi CHAR *v9; // eax _DWORD *v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // edi _DWORD *v14; // esi _DWORD *v15; // eax _DWORD *v16; // eax int *v17; // esi _WORD *v18; // ecx int v19; // ecx _DWORD *v20; // ebx _DWORD *v21; // eax _DWORD *v22; // eax char *v23; // ecx _DWORD *v24; // eax _WORD *v25; // eax _DWORD *v26; // eax void *v27; // ST20_4 _DWORD *v28; // eax _WORD *v29; // eax _WORD *v30; // eax int v31; // eax int v32; // [esp+10h] [ebp-158h] _DWORD *v33; // [esp+24h] [ebp-144h] void *v34; // [esp+28h] [ebp-140h] void *v35; // [esp+2Ch] [ebp-13Ch] void *v36; // [esp+30h] [ebp-138h] void *v37; // [esp+34h] [ebp-134h] char *v38; // [esp+38h] [ebp-130h] int v39; // [esp+48h] [ebp-120h] unsigned int v40; // [esp+4Ch] [ebp-11Ch] char Src; // [esp+54h] [ebp-114h] int *v42; // [esp+158h] [ebp-10h] int v43; // [esp+164h] [ebp-4h] v42 = &v32; v2 = sub_49F8D0(this + 143149); if ( v2 ) { if ( !byte_ACAD5C ) sub_420410(); v3 = v2 + 132; sprintf(&Src, "%sLoading\\%s.png", byte_ACAB50, v3); v4 = fopen(&Src, "r"); if ( v4 ) goto LABEL_72; if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sLoading\\%s.tga", byte_ACAB50, v3); v4 = fopen(&Src, "r"); if ( v4 ) goto LABEL_72; v5 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, 0) ) { v7 = *(int **)(v5 + 196); if ( *v7 ) v6 = *v7; else v6 = 0; } else { v6 = 0; } if ( !byte_ACAD5C ) sub_420410(); v8 = v6 + 132; sprintf(&Src, "%sLoading\\%s.png", byte_ACAB50, v8); v4 = fopen(&Src, "r"); if ( v4 ) { LABEL_72: fclose(v4); } else { if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sLoading\\%s.tga", byte_ACAB50, v8); } if ( !byte_ACAD5C ) sub_420410(); v9 = (CHAR *)sub_401410(byte_ACAB50, "loading\\NowLoadingTextColor.tga"); v40 = 15; v39 = 0; LOBYTE(v38) = 0; sub_4018E0(&v38, v9, strlen(v9)); v43 = 0; v10 = operator new(0xC4u); v34 = v10; LOBYTE(v43) = 1; if ( v10 ) { v11 = operator new(0x70u); v35 = v11; LOBYTE(v43) = 2; if ( v11 ) v12 = sub_868440(v11, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v12 = 0; LOBYTE(v43) = 1; v13 = sub_868C00(v10, (int)v12); v33 = v13; } else { v13 = 0; v33 = 0; } LOBYTE(v43) = 0; v14 = operator new(0xC4u); v34 = v14; LOBYTE(v43) = 3; if ( v14 ) { v15 = operator new(0x70u); v35 = v15; LOBYTE(v43) = 4; if ( v15 ) v16 = sub_868440(v15, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v16 = 0; LOBYTE(v43) = 3; v17 = sub_868C00(v14, (int)v16); v35 = v17; } else { v17 = 0; v35 = 0; } v18 = (_WORD *)v13[46]; LOBYTE(v43) = 0; sub_867880(v18, 4, 0, 0); sub_867880((_WORD *)v17[46], 4, 0, 0); sub_867E60(v13[46], 0, 0.0, 0.0, 1.0, 1.0); v19 = v17[46]; *(float *)&v37 = (double)a2 / 100.0 * 0.5 + 0.5; sub_867E60(v19, 0, 0.0, 0.87900001, *(float *)&v37, 0.121); sub_867680(v13[46]); sub_867680(v17[46]); sub_867FF0(v13[46], 0, &dword_ABD518); sub_867FF0(v17[46], 0, &dword_ABD518); sub_8681A0(v13[46], 0, 0, 0.0, 0.0, 1.0, 1.0); sub_8681A0(v17[46], 0, 0, 0.0, 0.0, *(float *)&v37, 1.0); v20 = (_DWORD *)dword_BA46D0; v34 = (void *)dword_BA46D0; LOBYTE(v43) = 5; v21 = operator new(0x44u); v37 = v21; LOBYTE(v43) = 6; if ( v21 ) v36 = sub_863D50(v21, &Src); else v36 = 0; LOBYTE(v43) = 5; sub_470EE0((_DWORD **)v36, 0); v22 = operator new(0x44u); v37 = v22; LOBYTE(v43) = 7; if ( v22 ) { v23 = v38; if ( v40 < 0x10 ) v23 = (char *)&v38; *(float *)&v37 = COERCE_FLOAT(sub_863D50(v22, v23)); } else { *(float *)&v37 = 0.0; } LOBYTE(v43) = 5; sub_470EE0((_DWORD **)v37, 0); sub_403700(v13, (int)v36); sub_403700(v17, (int)v37); v24 = operator new(0x28u); v37 = v24; v36 = v24; LOBYTE(v43) = 8; if ( v24 ) { sub_85B2B0(v24); v25 = v37; *(_DWORD *)v37 = &NiVertexColorProperty::`vftable'; v25[14] = 0; *((_DWORD *)v25 + 8) = 0; *((_DWORD *)v25 + 9) = 1; v37 = v25; } else { *(float *)&v37 = 0.0; } v26 = v37; v27 = v37; LOBYTE(v43) = 5; *((_DWORD *)v37 + 8) = 1; v26[9] = 0; sub_403700(v13, (int)v27); sub_403700(v17, (int)v37); v28 = operator new(0x20u); v37 = v28; v36 = v28; LOBYTE(v43) = 9; if ( v28 ) { sub_85B2B0(v28); v29 = v37; *(_DWORD *)v37 = &NiAlphaProperty::`vftable'; v29[14] = 236; *((_BYTE *)v29 + 30) = 0; v37 = v29; } else { *(float *)&v37 = 0.0; } v30 = v37; v30[14] &= 0xFFFEu; LOBYTE(v43) = 5; sub_403700(v13, (int)v30); sub_403700(v17, (int)v37); sub_85C4D0(v13); sub_85BED0((_DWORD **)v13, 0.0, 1); sub_85C4D0(v17); sub_85BED0((_DWORD **)v17, 0.0, 1); if ( !v20[29] && !v20[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 264))(v20) ) v20[29] = 1; if ( (v20[29] == 1 || v20[30] == 1) && !*((_BYTE *)v20 + 128) ) { v31 = (*(int (__thiscall **)(_DWORD *))(*v20 + 104))(v20); sub_44ED20((int)v20, v31, 7); } if ( (v20[29] == 1 || v20[30] == 1) && *((_BYTE *)v20 + 128) == 1 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v20 + 284))(v20, 0); sub_868B60(v13); sub_868B60(v17); v43 = 0; sub_44EDF0(v20); if ( v20[29] == 1 && !v20[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 268))(v20) ) v20[29] = 2; if ( v20[29] == 2 && !v20[30] && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 272))(v20) ) { ++v20[31]; v20[29] = 0; } (*(void (__thiscall **)(_DWORD *, signed int))*v13)(v13, 1); (*(void (__thiscall **)(int *, signed int))*v17)(v17, 1); if ( v40 >= 0x10 ) operator delete(v38); } } // 9A5014: using guessed type int __stdcall BT_OpenLogFile(_DWORD); // 9A5018: using guessed type int __stdcall BT_SetLogFlags(_DWORD, _DWORD); // 9A501C: using guessed type int __stdcall BT_GetLogFileName(_DWORD); // 9A5020: using guessed type int __stdcall BT_AddLogFile(_DWORD); // 9A5024: using guessed type int BT_AppLogEntryF(_DWORD, _DWORD, const char *, ...); // 9A5028: using guessed type int __stdcall BT_CloseLogFile(_DWORD); // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ABD518: using guessed type int dword_ABD518; // ACAD5C: using guessed type char byte_ACAD5C; // ACDA4C: using guessed type int dword_ACDA4C; // BA46D0: using guessed type int dword_BA46D0; //----- (00690100) -------------------------------------------------------- int __thiscall sub_690100(int this) { return sub_692910( *(void **)(this + 12), *(_DWORD *)(this + 16), (*(_DWORD *)(this + 16) - *(_DWORD *)(this + 12)) >> 2, this); } //----- (00690130) -------------------------------------------------------- void __thiscall sub_690130(void **this) { void **v1; // esi char *v2; // eax char *v3; // edi _DWORD *v4; // ST10_4 _DWORD *v5; // ST0C_4 _DWORD *v6; // ST10_4 _DWORD *v7; // ST0C_4 _DWORD **v8; // eax _DWORD *v9; // ecx _DWORD *v10; // edi volatile LONG *v11; // edi volatile LONG *v12; // edi _DWORD *v13; // ST10_4 _DWORD *v14; // ST0C_4 _DWORD *v15; // ST10_4 _DWORD *v16; // ST0C_4 _DWORD *v17; // ST10_4 _DWORD *v18; // ST0C_4 int v19; // ST10_4 int v20; // ST0C_4 volatile LONG *v21; // edi volatile LONG *v22; // edi volatile LONG *v23; // edi volatile LONG *v24; // edi volatile LONG *v25; // edi int v26; // edi _DWORD *v27; // ebx _DWORD *v28; // ST10_4 volatile LONG *v29; // edi volatile LONG *v30; // edi volatile LONG *v31; // edi volatile LONG *v32; // edi void *v33; // eax volatile LONG *v34; // edi volatile LONG *v35; // edi volatile LONG *v36; // edi volatile LONG *v37; // edi volatile LONG *v38; // edi volatile LONG *v39; // edi volatile LONG *v40; // edi volatile LONG *v41; // edi volatile LONG *v42; // edi volatile LONG *v43; // edi volatile LONG *v44; // edi volatile LONG *v45; // edi volatile LONG *v46; // edi volatile LONG *v47; // edi volatile LONG *v48; // edi volatile LONG *v49; // edi volatile LONG *v50; // edi volatile LONG *v51; // edi volatile LONG *v52; // edi volatile LONG *v53; // edi volatile LONG *v54; // edi volatile LONG *v55; // edi volatile LONG *v56; // edi _DWORD *v57; // [esp+10h] [ebp-18h] _DWORD *v58; // [esp+14h] [ebp-14h] void **v59; // [esp+18h] [ebp-10h] int v60; // [esp+24h] [ebp-4h] v1 = this; v59 = this; v60 = 59; sub_6A9AC0(this + 144352); LOBYTE(v60) = 58; sub_8E8660(v1 + 143338); v2 = (char *)v1[143325]; LOBYTE(v60) = 57; v1[143324] = &NiTArray>::`vftable'; if ( v2 ) { v3 = v2 - 4; `eh vector destructor iterator'(v2, 4u, *((_DWORD *)v2 - 1), sub_410C00); operator delete[](v3); } v1[143323] = 0; v1[143316] = 0; v58 = v1 + 143306; v4 = v1[143307]; v5 = *(_DWORD **)v1[143307]; LOBYTE(v60) = 60; sub_6CAB30(v1 + 143306, (int *)&v57, v5, v4); operator delete(v1[143307]); v57 = v1 + 143302; v6 = v1[143303]; v7 = *(_DWORD **)v1[143303]; LOBYTE(v60) = 61; sub_692320(v1 + 143302, (int *)&v58, v7, v6); operator delete(v1[143303]); v8 = (_DWORD **)v1[143299]; v9 = *v8; *v8 = v8; *((_DWORD *)v1[143299] + 1) = v1[143299]; v1[143300] = 0; if ( v9 != v1[143299] ) { do { v10 = (_DWORD *)*v9; operator delete(v9); v9 = v10; } while ( v10 != v1[143299] ); } operator delete(v1[143299]); LOBYTE(v60) = 51; `eh vector destructor iterator'(v1 + 143209, 0xCu, 30, sub_691450); v11 = (volatile LONG *)v1[143208]; LOBYTE(v60) = 50; if ( v11 && !InterlockedDecrement(v11 + 1) && v11 ) (**(void (__thiscall ***)(void *, signed int))v11)((void *)v11, 1); v12 = (volatile LONG *)v1[143207]; LOBYTE(v60) = 49; if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(void *, signed int))v12)((void *)v12, 1); v57 = v1 + 143203; v13 = v1[143204]; v14 = *(_DWORD **)v1[143204]; LOBYTE(v60) = 62; sub_4E6DC0(v1 + 143203, (int *)&v58, v14, v13); operator delete(v1[143204]); v57 = v1 + 143199; v15 = v1[143200]; v16 = *(_DWORD **)v1[143200]; LOBYTE(v60) = 63; sub_4E6DC0(v1 + 143199, (int *)&v58, v16, v15); operator delete(v1[143200]); v57 = v1 + 143195; v17 = v1[143196]; v18 = *(_DWORD **)v1[143196]; LOBYTE(v60) = 64; sub_4E6DC0(v1 + 143195, (int *)&v58, v18, v17); operator delete(v1[143196]); v57 = v1 + 143191; v19 = (int)v1[143192]; v20 = *(_DWORD *)v1[143192]; LOBYTE(v60) = 65; sub_692790(v1 + 143191, (int *)&v58, v20, v19); operator delete(v1[143192]); v21 = (volatile LONG *)v1[143189]; LOBYTE(v60) = 44; if ( v21 && !InterlockedDecrement(v21 + 1) && v21 ) (**(void (__thiscall ***)(void *, signed int))v21)((void *)v21, 1); LOBYTE(v60) = 43; sub_8DC0B0(v1 + 143182); LOBYTE(v60) = 42; sub_8D6E10(v1 + 143156); v22 = (volatile LONG *)v1[143155]; LOBYTE(v60) = 41; if ( v22 && !InterlockedDecrement(v22 + 1) && v22 ) (**(void (__thiscall ***)(void *, signed int))v22)((void *)v22, 1); v23 = (volatile LONG *)v1[143154]; LOBYTE(v60) = 40; if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(void *, signed int))v23)((void *)v23, 1); v24 = (volatile LONG *)v1[143152]; LOBYTE(v60) = 39; if ( v24 && !InterlockedDecrement(v24 + 1) && v24 ) (**(void (__thiscall ***)(void *, signed int))v24)((void *)v24, 1); v25 = (volatile LONG *)v1[143148]; LOBYTE(v60) = 38; if ( v25 && !InterlockedDecrement(v25 + 1) && v25 ) (**(void (__thiscall ***)(void *, signed int))v25)((void *)v25, 1); v26 = (int)(v1 + 143143); v57 = (_DWORD *)v26; *(_DWORD *)v26 = &PgTList>::`vftable'; v27 = v1[143144]; LOBYTE(v60) = 66; while ( v27 ) { v28 = v27; v27 = (_DWORD *)*v27; (*(void (__thiscall **)(void **, _DWORD *))(*(_DWORD *)v26 + 8))(v1 + 143143, v28); } v1[143146] = 0; v1[143144] = 0; v1[143145] = 0; *(_DWORD *)v26 = &NiTListBase,NiPointer>::`vftable'; v29 = (volatile LONG *)v1[143138]; LOBYTE(v60) = 36; if ( v29 && !InterlockedDecrement(v29 + 1) && v29 ) (**(void (__thiscall ***)(void *, signed int))v29)((void *)v29, 1); v30 = (volatile LONG *)v1[143137]; LOBYTE(v60) = 35; if ( v30 && !InterlockedDecrement(v30 + 1) && v30 ) (**(void (__thiscall ***)(void *, signed int))v30)((void *)v30, 1); v31 = (volatile LONG *)v1[143136]; LOBYTE(v60) = 34; if ( v31 && !InterlockedDecrement(v31 + 1) && v31 ) (**(void (__thiscall ***)(void *, signed int))v31)((void *)v31, 1); LOBYTE(v60) = 33; sub_68EBD0(v1 + 143133); LOBYTE(v60) = 32; sub_441070(v1 + 143108); LOBYTE(v60) = 31; sub_404020(v1 + 143060); v32 = (volatile LONG *)v1[143058]; LOBYTE(v60) = 30; if ( v32 && !InterlockedDecrement(v32 + 1) && v32 ) (**(void (__thiscall ***)(void *, signed int))v32)((void *)v32, 1); LOBYTE(v60) = 29; sub_753910(v1 + 142800); v33 = v1[142798]; v1[138956] = &InstantBlock::`vftable'; v1[142797] = 0; if ( v33 ) operator delete[](v33); v1[142798] = 0; LOBYTE(v60) = 27; sub_752500(v1 + 135880); v1[157] = &NsPathFinding::`vftable'; v34 = (volatile LONG *)v1[155]; LOBYTE(v60) = 25; if ( v34 && !InterlockedDecrement(v34 + 1) && v34 ) (**(void (__thiscall ***)(void *, signed int))v34)((void *)v34, 1); v35 = (volatile LONG *)v1[154]; LOBYTE(v60) = 24; if ( v35 && !InterlockedDecrement(v35 + 1) && v35 ) (**(void (__thiscall ***)(void *, signed int))v35)((void *)v35, 1); v36 = (volatile LONG *)v1[153]; LOBYTE(v60) = 23; if ( v36 && !InterlockedDecrement(v36 + 1) && v36 ) (**(void (__thiscall ***)(void *, signed int))v36)((void *)v36, 1); v37 = (volatile LONG *)v1[152]; LOBYTE(v60) = 22; if ( v37 && !InterlockedDecrement(v37 + 1) && v37 ) (**(void (__thiscall ***)(void *, signed int))v37)((void *)v37, 1); v38 = (volatile LONG *)v1[151]; LOBYTE(v60) = 21; if ( v38 && !InterlockedDecrement(v38 + 1) && v38 ) (**(void (__thiscall ***)(void *, signed int))v38)((void *)v38, 1); v39 = (volatile LONG *)v1[150]; LOBYTE(v60) = 20; if ( v39 && !InterlockedDecrement(v39 + 1) && v39 ) (**(void (__thiscall ***)(void *, signed int))v39)((void *)v39, 1); v40 = (volatile LONG *)v1[149]; LOBYTE(v60) = 19; if ( v40 && !InterlockedDecrement(v40 + 1) && v40 ) (**(void (__thiscall ***)(void *, signed int))v40)((void *)v40, 1); v41 = (volatile LONG *)v1[148]; LOBYTE(v60) = 18; if ( v41 && !InterlockedDecrement(v41 + 1) && v41 ) (**(void (__thiscall ***)(void *, signed int))v41)((void *)v41, 1); v42 = (volatile LONG *)v1[147]; LOBYTE(v60) = 17; if ( v42 && !InterlockedDecrement(v42 + 1) && v42 ) (**(void (__thiscall ***)(void *, signed int))v42)((void *)v42, 1); v43 = (volatile LONG *)v1[146]; LOBYTE(v60) = 16; if ( v43 && !InterlockedDecrement(v43 + 1) && v43 ) (**(void (__thiscall ***)(void *, signed int))v43)((void *)v43, 1); v44 = (volatile LONG *)v1[145]; LOBYTE(v60) = 15; if ( v44 && !InterlockedDecrement(v44 + 1) && v44 ) (**(void (__thiscall ***)(void *, signed int))v44)((void *)v44, 1); v45 = (volatile LONG *)v1[144]; LOBYTE(v60) = 14; if ( v45 && !InterlockedDecrement(v45 + 1) && v45 ) (**(void (__thiscall ***)(void *, signed int))v45)((void *)v45, 1); v46 = (volatile LONG *)v1[143]; LOBYTE(v60) = 13; if ( v46 && !InterlockedDecrement(v46 + 1) && v46 ) (**(void (__thiscall ***)(void *, signed int))v46)((void *)v46, 1); v47 = (volatile LONG *)v1[142]; LOBYTE(v60) = 12; if ( v47 && !InterlockedDecrement(v47 + 1) && v47 ) (**(void (__thiscall ***)(void *, signed int))v47)((void *)v47, 1); v48 = (volatile LONG *)v1[141]; LOBYTE(v60) = 11; if ( v48 && !InterlockedDecrement(v48 + 1) && v48 ) (**(void (__thiscall ***)(void *, signed int))v48)((void *)v48, 1); v49 = (volatile LONG *)v1[140]; LOBYTE(v60) = 10; if ( v49 && !InterlockedDecrement(v49 + 1) && v49 ) (**(void (__thiscall ***)(void *, signed int))v49)((void *)v49, 1); v50 = (volatile LONG *)v1[139]; LOBYTE(v60) = 9; if ( v50 && !InterlockedDecrement(v50 + 1) && v50 ) (**(void (__thiscall ***)(void *, signed int))v50)((void *)v50, 1); v51 = (volatile LONG *)v1[138]; LOBYTE(v60) = 8; if ( v51 && !InterlockedDecrement(v51 + 1) && v51 ) (**(void (__thiscall ***)(void *, signed int))v51)((void *)v51, 1); v52 = (volatile LONG *)v1[137]; LOBYTE(v60) = 7; if ( v52 && !InterlockedDecrement(v52 + 1) && v52 ) (**(void (__thiscall ***)(void *, signed int))v52)((void *)v52, 1); v53 = (volatile LONG *)v1[136]; LOBYTE(v60) = 6; if ( v53 && !InterlockedDecrement(v53 + 1) && v53 ) (**(void (__thiscall ***)(void *, signed int))v53)((void *)v53, 1); v54 = (volatile LONG *)v1[135]; LOBYTE(v60) = 5; if ( v54 && !InterlockedDecrement(v54 + 1) && v54 ) (**(void (__thiscall ***)(void *, signed int))v54)((void *)v54, 1); v55 = (volatile LONG *)v1[134]; LOBYTE(v60) = 4; if ( v55 && !InterlockedDecrement(v55 + 1) && v55 ) (**(void (__thiscall ***)(void *, signed int))v55)((void *)v55, 1); v56 = (volatile LONG *)v1[133]; LOBYTE(v60) = 3; if ( v56 && !InterlockedDecrement(v56 + 1) && v56 ) (**(void (__thiscall ***)(void *, signed int))v56)((void *)v56, 1); if ( v1[127] ) operator delete(v1[127]); v1[127] = 0; v1[128] = 0; v1[129] = 0; if ( v1[123] ) operator delete(v1[123]); v1[123] = 0; v1[124] = 0; v1[125] = 0; LOBYTE(v60) = 0; sub_68DAF0(v1 + 113); v60 = -1; sub_6DF580(v1); } // 9A8B64: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9F6320: using guessed type void *NsPathFinding::`vftable'; // 9F6328: using guessed type void *InstantBlock::`vftable'; // 9F6330: using guessed type void *NiTArray>::`vftable'; //----- (006909B0) -------------------------------------------------------- _DWORD *__thiscall sub_6909B0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _BYTE *v10; // eax char v11; // ST18_1 char v13; // [esp+2Ch] [ebp-4Ch] void **v14; // [esp+48h] [ebp-30h] float v15; // [esp+54h] [ebp-24h] float v16; // [esp+58h] [ebp-20h] float v17; // [esp+5Ch] [ebp-1Ch] _DWORD *v18; // [esp+60h] [ebp-18h] char *v19; // [esp+64h] [ebp-14h] char *v20; // [esp+68h] [ebp-10h] int v21; // [esp+74h] [ebp-4h] v1 = this; v18 = this; sub_692BC0(this); v21 = 0; sub_68DBF0(v1 + 113); v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[127] = 0; v1[128] = 0; v1[129] = 0; v1[133] = 0; v1[134] = 0; v1[135] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[139] = 0; v1[140] = 0; v1[141] = 0; v1[142] = 0; v1[143] = 0; v1[144] = 0; v1[145] = 0; v1[146] = 0; v1[147] = 0; v1[148] = 0; v1[149] = 0; v1[150] = 0; v1[151] = 0; v1[152] = 0; v1[153] = 0; v1[154] = 0; v1[155] = 0; v1[157] = &NsPathFinding::`vftable'; v1[135879] = 0; sub_753680(v1 + 135880); v1[138956] = &InstantBlock::`vftable'; v1[142797] = 0; v1[142798] = 0; sub_7537D0(v1 + 142800); v1[143058] = 0; sub_403ED0((float *)v1 + 143060); sub_86B1D0((_BYTE *)v1 + 572372, 0); sub_86B1D0((_BYTE *)v1 + 572400, 0); sub_441020((float *)v1 + 143108); DNameNode::DNameNode((DNameNode *)(v1 + 143133)); v1[143136] = 0; v1[143137] = 0; v1[143138] = 0; *((float *)v1 + 143139) = 0.0; *((float *)v1 + 143140) = 0.0; *((float *)v1 + 143141) = 0.0; v1[143146] = 0; v1[143144] = 0; v1[143145] = 0; v1[143143] = &PgTList>::`vftable'; v1[143148] = 0; v2 = v1 + 143149; v2[2] = 0; v2[1] = 0; *v2 = 0; v1[143152] = 0; v1[143154] = 0; v1[143155] = 0; sub_8D6D20((float *)v1 + 143156); sub_8DBFB0(v1 + 143182); v1[143189] = 0; LOBYTE(v21) = 45; v1[143193] = 0; v3 = operator new(0x14u); if ( !v3 ) goto LABEL_23; v1[143192] = v3; *v3 = v3; *(_DWORD *)(v1[143192] + 4) = v1[143192]; *(_DWORD *)(v1[143192] + 8) = v1[143192]; *(_BYTE *)(v1[143192] + 16) = 1; *(_BYTE *)(v1[143192] + 17) = 1; LOBYTE(v21) = 46; v1[143197] = 0; v4 = operator new(0x14u); if ( !v4 ) { v19 = 0; std::exception::exception((std::exception *)&v14, (const char *const *)&v19); v14 = &std::bad_alloc::`vftable'; _CxxThrowException(&v14, &_TI2_AVbad_alloc_std__); } v1[143196] = v4; *v4 = v4; *(_DWORD *)(v1[143196] + 4) = v1[143196]; *(_DWORD *)(v1[143196] + 8) = v1[143196]; *(_BYTE *)(v1[143196] + 16) = 1; *(_BYTE *)(v1[143196] + 17) = 1; LOBYTE(v21) = 47; v1[143201] = 0; v5 = operator new(0x14u); if ( !v5 ) { v20 = 0; std::exception::exception((std::exception *)&v15, (const char *const *)&v20); v15 = COERCE_FLOAT(&std::bad_alloc::`vftable'); _CxxThrowException(&v15, &_TI2_AVbad_alloc_std__); } v1[143200] = v5; *v5 = v5; *(_DWORD *)(v1[143200] + 4) = v1[143200]; *(_DWORD *)(v1[143200] + 8) = v1[143200]; *(_BYTE *)(v1[143200] + 16) = 1; *(_BYTE *)(v1[143200] + 17) = 1; LOBYTE(v21) = 48; v1[143205] = 0; v6 = operator new(0x14u); if ( !v6 ) { v19 = 0; std::exception::exception((std::exception *)&v14, (const char *const *)&v19); v14 = &std::bad_alloc::`vftable'; _CxxThrowException(&v14, &_TI2_AVbad_alloc_std__); } v1[143204] = v6; *v6 = v6; *(_DWORD *)(v1[143204] + 4) = v1[143204]; *(_DWORD *)(v1[143204] + 8) = v1[143204]; *(_BYTE *)(v1[143204] + 16) = 1; *(_BYTE *)(v1[143204] + 17) = 1; v1[143207] = 0; v1[143208] = 0; `eh vector constructor iterator'(v1 + 143209, 0xCu, 30, sub_691440, sub_691450); LOBYTE(v21) = 52; v1[143300] = 0; v7 = operator new(0xCu); if ( !v7 ) { v20 = 0; std::exception::exception((std::exception *)&v15, (const char *const *)&v20); v15 = COERCE_FLOAT(&std::bad_alloc::`vftable'); _CxxThrowException(&v15, &_TI2_AVbad_alloc_std__); } v1[143299] = v7; *v7 = v7; *(_DWORD *)(v1[143299] + 4) = v1[143299]; LOBYTE(v21) = 53; v1[143304] = 0; v8 = operator new(0x24u); if ( !v8 ) { v19 = 0; std::exception::exception((std::exception *)&v14, (const char *const *)&v19); v14 = &std::bad_alloc::`vftable'; _CxxThrowException(&v14, &_TI2_AVbad_alloc_std__); } v1[143303] = v8; *v8 = v8; *(_DWORD *)(v1[143303] + 4) = v1[143303]; *(_DWORD *)(v1[143303] + 8) = v1[143303]; *(_BYTE *)(v1[143303] + 32) = 1; *(_BYTE *)(v1[143303] + 33) = 1; LOBYTE(v21) = 54; v1[143308] = 0; v9 = operator new(0x1Cu); if ( !v9 ) { LABEL_23: v20 = 0; std::exception::exception((std::exception *)&v15, (const char *const *)&v20); v15 = COERCE_FLOAT(&std::bad_alloc::`vftable'); _CxxThrowException(&v15, &_TI2_AVbad_alloc_std__); } v1[143307] = v9; *v9 = v9; *(_DWORD *)(v1[143307] + 4) = v1[143307]; *(_DWORD *)(v1[143307] + 8) = v1[143307]; *(_BYTE *)(v1[143307] + 24) = 1; *(_BYTE *)(v1[143307] + 25) = 1; *((float *)v1 + 143314) = 0.0; v1[143310] = 0; *((float *)v1 + 143315) = 0.0; v1[143311] = 0; v1[143312] = 0; v1[143313] = 0; v1[143316] = 0; *((float *)v1 + 143321) = 0.0; *((float *)v1 + 143322) = 0.0; v1[143317] = 0; v1[143318] = 0; v1[143319] = 0; v1[143320] = 0; v1[143323] = 0; v1[143324] = &NiTArray>::`vftable'; v1[143326] = 0; v1[143329] = 1; v1[143327] = 0; v1[143328] = 0; v1[143325] = 0; sub_8E8190(v1 + 143338); sub_6A9EA0(v1 + 144352); *((float *)v1 + 131) = 2000.0; v1[156] = 0; *((float *)v1 + 132) = 0.0; LOBYTE(v21) = 61; v1[143151] = 0; v1[143150] = 0; *v2 = 0; strncpy((char *)v1 + 572596, "nonMap", 0xCu); v10 = sub_86B1E0(&v13, -0.25, 0.25, 0.1875, -0.1875, 10.0, 1000000.0, *((_BYTE *)v1 + 572368)); v11 = *((_BYTE *)v1 + 572368); qmemcpy(v1 + 143093, v10, 0x1Cu); qmemcpy(v1 + 143100, sub_86B1E0(&v13, -0.25, 0.25, 0.1875, -0.1875, 10.0, 6000.0, v11), 0x1Cu); *((float *)v1 + 143107) = 0.5; *((float *)v1 + 143091) = 50.0; v15 = 1.0; v16 = 1.0; v17 = 1.0; *((float *)v1 + 143139) = 1.0; *((float *)v1 + 143140) = 1.0; v1[143147] = 0; v1[143190] = 0; *((_BYTE *)v1 + 572612) = 0; *((_WORD *)v1 + 224) = 0; *((_BYTE *)v1 + 572368) = 0; *((float *)v1 + 143141) = 1.0; v1[143142] = 10; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9A8D0C: using guessed type void *PgTList>::`vftable'; // 9F6320: using guessed type void *NsPathFinding::`vftable'; // 9F6328: using guessed type void *InstantBlock::`vftable'; // 9F6330: using guessed type void *NiTArray>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006910C0) -------------------------------------------------------- _DWORD *__cdecl sub_6910C0(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 17) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 17) ); } return result; } //----- (006910E0) -------------------------------------------------------- int __cdecl sub_6910E0(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00691100) -------------------------------------------------------- int __cdecl sub_691100(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00691120) -------------------------------------------------------- _DWORD *__cdecl sub_691120(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 25) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 25) ); } return result; } //----- (00691140) -------------------------------------------------------- _DWORD *__thiscall sub_691140(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 33) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 33) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 33); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (00691190) -------------------------------------------------------- _DWORD *__thiscall sub_691190(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 25) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 25) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 25); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (006911F0) -------------------------------------------------------- void *sub_6911F0() { return &unk_BA4868; } //----- (00691200) -------------------------------------------------------- void *__thiscall sub_691200(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiAccumulator::`vftable'; sub_85BA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F62D4: using guessed type void *NiAccumulator::`vftable'; //----- (00691240) -------------------------------------------------------- void *__thiscall sub_691240(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsPathFinding::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6320: using guessed type void *NsPathFinding::`vftable'; //----- (00691270) -------------------------------------------------------- void __thiscall sub_691270(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax v1 = this; v2 = (void *)this[3842]; this[3841] = 0; if ( v2 ) operator delete[](v2); v1[3842] = 0; } //----- (006912E0) -------------------------------------------------------- _DWORD *__thiscall sub_6912E0(void *this, char a2) { _DWORD *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 3842); *(_DWORD *)this = &InstantBlock::`vftable'; *((_DWORD *)this + 3841) = 0; if ( v3 ) operator delete[](v3); v2[3842] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6328: using guessed type void *InstantBlock::`vftable'; //----- (00691330) -------------------------------------------------------- void __thiscall sub_691330(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; v2 = this + 12; sub_8333D0(this + 12); sub_833170(v2); sub_6E2D40(v1 + 8); sub_6E4030(v1); } //----- (006913C0) -------------------------------------------------------- int __thiscall sub_6913C0(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 17) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (00691420) -------------------------------------------------------- int __cdecl sub_691420(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00691440) -------------------------------------------------------- void __thiscall sub_691440(void *this) { *((_DWORD *)this + 1) = 0; *((_DWORD *)this + 2) = 0; } //----- (00691450) -------------------------------------------------------- void __thiscall sub_691450(void *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = *((_DWORD *)this + 2); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[1]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (006914E0) -------------------------------------------------------- _DWORD *__thiscall sub_6914E0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 33) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (00691540) -------------------------------------------------------- _DWORD *__thiscall sub_691540(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 25) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (006915A0) -------------------------------------------------------- _DWORD *__thiscall sub_6915A0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 21) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (00691600) -------------------------------------------------------- void *__thiscall sub_691600(void *this, char a2) { void *v2; // esi char *v3; // eax char *v4; // edi v2 = this; v3 = (char *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray>::`vftable'; if ( v3 ) { v4 = v3 - 4; `eh vector destructor iterator'(v3, 4u, *((_DWORD *)v3 - 1), sub_410C00); operator delete[](v4); } if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6330: using guessed type void *NiTArray>::`vftable'; //----- (00691680) -------------------------------------------------------- _DWORD **__cdecl sub_691680(void *a1, int a2) { _DWORD **result; // eax _DWORD **v3; // ebx _DWORD *v4; // esi _DWORD *v5; // ST18_4 int v6; // edi int v7; // eax int v8; // ecx unsigned int v9; // ecx int v10; // edx unsigned int v11; // eax _DWORD *v12; // edi int v13; // esi int v14; // eax int v15; // edx unsigned int v16; // ecx int v17; // eax unsigned int v18; // eax char *v19; // [esp+4h] [ebp-Ch] _DWORD **v20; // [esp+8h] [ebp-8h] _DWORD *v21; // [esp+Ch] [ebp-4h] result = (_DWORD **)a1; if ( a1 != (void *)a2 ) { v3 = (_DWORD **)((char *)a1 + 4); v19 = (char *)a1 + 4; if ( (char *)a1 + 4 != (void *)a2 ) { while ( 1 ) { v4 = *v3; v21 = v3; v20 = (_DWORD **)*v3; v5 = *result; v6 = sub_85C050(*v3, 8); v7 = sub_85C050(v5, 8); if ( !v6 || v7 && ((v8 = **(_DWORD **)(v6 + 40)) == 0 ? (v9 = 0) : (v9 = *(_DWORD *)(v8 + 4)), (v10 = *(_DWORD *)(v7 + 40), !*(_DWORD *)v10) ? (v11 = 0) : (v11 = *(_DWORD *)(*(_DWORD *)v10 + 4)), v9 <= v11) ) { while ( 1 ) { v12 = *(v3 - 1); --v3; v13 = sub_85C050(v4, 8); v14 = sub_85C050(v12, 8); if ( !v13 ) break; if ( v14 ) { v15 = *(_DWORD *)(v13 + 40); v16 = *(_DWORD *)v15 ? *(_DWORD *)(*(_DWORD *)v15 + 4) : 0; v17 = **(_DWORD **)(v14 + 40); v18 = v17 ? *(_DWORD *)(v17 + 4) : 0; if ( v16 <= v18 ) break; } v4 = v20; *v21 = *v3; v21 = v3; } result = v20; v3 = (_DWORD **)v19; *v21 = v20; } else { result = (_DWORD **)memcpy_0( &v3[-(((char *)v3 - (_BYTE *)a1) >> 2) + 1], a1, 4 * (((char *)v3 - (_BYTE *)a1) >> 2)); *(_DWORD *)a1 = v4; } ++v3; v19 = (char *)v3; if ( v3 == (_DWORD **)a2 ) break; result = (_DWORD **)a1; } } } return result; } //----- (006917A0) -------------------------------------------------------- unsigned int __cdecl sub_6917A0(unsigned int *a1, unsigned int *a2, unsigned int *a3) { _DWORD *v3; // edi int v4; // esi int v5; // eax int v6; // ecx unsigned int v7; // ecx int v8; // edx unsigned int v9; // eax _DWORD *v10; // eax _DWORD *v11; // edi int v12; // esi int v13; // eax int v14; // ecx unsigned int v15; // ecx int v16; // edx unsigned int v17; // eax _DWORD *v18; // eax _DWORD *v19; // edi int v20; // esi unsigned int result; // eax int v22; // ecx unsigned int v23; // ecx int v24; // edx v3 = (_DWORD *)*a1; v4 = sub_85C050((_DWORD *)*a2, 8); v5 = sub_85C050(v3, 8); if ( v4 ) { if ( !v5 || ((v6 = **(_DWORD **)(v4 + 40)) == 0 ? (v7 = 0) : (v7 = *(_DWORD *)(v6 + 4)), (v8 = *(_DWORD *)(v5 + 40), !*(_DWORD *)v8) ? (v9 = 0) : (v9 = *(_DWORD *)(*(_DWORD *)v8 + 4)), v7 > v9) ) { v10 = (_DWORD *)*a2; *a2 = *a1; *a1 = (unsigned int)v10; } } v11 = (_DWORD *)*a2; v12 = sub_85C050((_DWORD *)*a3, 8); v13 = sub_85C050(v11, 8); if ( v12 ) { if ( !v13 || ((v14 = **(_DWORD **)(v12 + 40)) == 0 ? (v15 = 0) : (v15 = *(_DWORD *)(v14 + 4)), (v16 = *(_DWORD *)(v13 + 40), !*(_DWORD *)v16) ? (v17 = 0) : (v17 = *(_DWORD *)(*(_DWORD *)v16 + 4)), v15 > v17) ) { v18 = (_DWORD *)*a3; *a3 = *a2; *a2 = (unsigned int)v18; } } v19 = (_DWORD *)*a1; v20 = sub_85C050((_DWORD *)*a2, 8); result = sub_85C050(v19, 8); if ( v20 ) { if ( !result || ((v22 = **(_DWORD **)(v20 + 40)) == 0 ? (v23 = 0) : (v23 = *(_DWORD *)(v22 + 4)), (v24 = *(_DWORD *)(result + 40), !*(_DWORD *)v24) ? (result = 0) : (result = *(_DWORD *)(*(_DWORD *)v24 + 4)), v23 > result) ) { result = *a2; *a2 = *a1; *a1 = result; } } return result; } //----- (006918A0) -------------------------------------------------------- _DWORD *__cdecl sub_6918A0(_DWORD *a1, int a2, int a3, _DWORD *a4) { int v4; // edi _DWORD *v5; // ebx int v6; // esi int v7; // eax int v8; // edx unsigned int v9; // ecx int v10; // eax unsigned int v11; // eax _DWORD *result; // eax v4 = (a2 - 1) / 2; if ( a3 >= a2 ) { result = (_DWORD *)*a4; a1[a2] = *a4; } else { while ( 1 ) { v5 = (_DWORD *)*a4; v6 = sub_85C050((_DWORD *)a1[v4], 8); v7 = sub_85C050(v5, 8); if ( !v6 ) { LABEL_12: result = (_DWORD *)a2; a1[a2] = *a4; return result; } if ( v7 ) { v8 = *(_DWORD *)(v6 + 40); v9 = *(_DWORD *)v8 ? *(_DWORD *)(*(_DWORD *)v8 + 4) : 0; v10 = **(_DWORD **)(v7 + 40); v11 = v10 ? *(_DWORD *)(v10 + 4) : 0; if ( v9 <= v11 ) break; } a1[a2] = a1[v4]; a2 = v4; v4 = (v4 - 1) / 2; if ( a3 >= a2 ) goto LABEL_12; } result = a1; a1[a2] = *a4; } return result; } //----- (00691960) -------------------------------------------------------- int *__thiscall sub_691960(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 33) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_691140(&a3); if ( *(_BYTE *)(*v3 + 33) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 33) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6687D0((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 33) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6910E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 33) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 33) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 32); *(_BYTE *)(v5 + 32) = *((_BYTE *)v3 + 32); *((_BYTE *)v3 + 32) = v13; LABEL_35: if ( v18[32] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 32) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_6914E0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; v15[32] = 0; sub_5FFC20(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; sub_6914E0(i, v6); break; } } else { if ( !v15[32] ) { v15[32] = 1; *(_BYTE *)(v6 + 32) = 0; sub_5FFC20(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[33] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 32) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 32) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 32) = 1; v15[32] = 0; sub_6914E0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[32] = *(_BYTE *)(v6 + 32); *(_BYTE *)(v6 + 32) = 1; *(_BYTE *)(*(_DWORD *)v15 + 32) = 1; sub_5FFC20(i, (_DWORD *)v6); break; } } v15[32] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 32) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (00691BB0) -------------------------------------------------------- void __stdcall sub_691BB0(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 33) ) { do { sub_691BB0(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 33) ); } } //----- (00691BF0) -------------------------------------------------------- void __stdcall sub_691BF0(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 25) ) { do { sub_691BF0(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 25) ); } } //----- (00691C30) -------------------------------------------------------- unsigned int __cdecl sub_691C30(unsigned int *a1, unsigned int *a2, unsigned int *a3) { unsigned int *v3; // esi int v4; // eax int v5; // eax int v6; // edi unsigned int *v7; // ST4C_4 int v9; // [esp+18h] [ebp+10h] v3 = a3; v4 = a3 - a1; if ( v4 <= 40 ) return sub_6917A0(a1, a2, a3); v5 = (v4 + 1) / 8; v9 = 8 * v5; v6 = 4 * v5; v7 = &a1[v5]; sub_6917A0(a1, v7, &a1[2 * v5]); sub_6917A0(&a2[v6 / 0xFFFFFFFC], a2, &a2[v6 / 4u]); sub_6917A0(&v3[v9 / 0xFFFFFFFC], &v3[v6 / 0xFFFFFFFC], v3); return sub_6917A0(v7, a2, &v3[v6 / 0xFFFFFFFC]); } //----- (00691CE0) -------------------------------------------------------- _DWORD *__cdecl sub_691CE0(_DWORD *a1, int a2, int a3, _DWORD *a4) { int v4; // eax int v5; // ecx int v6; // esi bool v7; // zf _DWORD *v8; // ST20_4 int v9; // edi int v10; // eax int v11; // ecx unsigned int v12; // ecx int v13; // edx unsigned int v14; // eax int v15; // ecx int v16; // eax int v18; // [esp+8h] [ebp-8h] v4 = a2; v5 = a3; v6 = 2 * a2 + 2; v18 = a2; v7 = v6 == a3; if ( v6 < a3 ) { do { v8 = (_DWORD *)a1[v6 - 1]; v9 = sub_85C050((_DWORD *)a1[v6], 8); v10 = sub_85C050(v8, 8); if ( v9 ) { if ( !v10 || ((v11 = **(_DWORD **)(v9 + 40)) == 0 ? (v12 = 0) : (v12 = *(_DWORD *)(v11 + 4)), (v13 = *(_DWORD *)(v10 + 40), !*(_DWORD *)v13) ? (v14 = 0) : (v14 = *(_DWORD *)(*(_DWORD *)v13 + 4)), v12 > v14) ) { --v6; } } v15 = a2; v16 = a1[v6]; a2 = v6; v6 = 2 * v6 + 2; a1[v15] = v16; } while ( v6 < a3 ); v5 = a3; v4 = a2; v7 = v6 == a3; } if ( v7 ) { a1[v4] = a1[v5 - 1]; v4 = v5 - 1; } return sub_6918A0(a1, v4, v18, a4); } //----- (00691DA0) -------------------------------------------------------- void __thiscall sub_691DA0(void **this) { void **v1; // esi volatile LONG *v2; // edi v1 = this; v2 = (volatile LONG *)this[7]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); if ( (unsigned int)v1[5] >= 0x10 ) operator delete(*v1); v1[5] = (void *)15; v1[4] = 0; *(_BYTE *)v1 = 0; } //----- (00691E30) -------------------------------------------------------- int __thiscall sub_691E30(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[33] ) { do { sub_691BB0((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 33) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (00691E80) -------------------------------------------------------- unsigned int **__cdecl sub_691E80(unsigned int **a1, unsigned int *a2, unsigned int *a3) { int v3; // kr00_4 unsigned int *v4; // esi _DWORD *v5; // ebx int v6; // edi int v7; // eax int v8; // edx unsigned int v9; // ecx int v10; // eax unsigned int v11; // eax _DWORD *v12; // ebx int v13; // edi int v14; // eax int v15; // ecx unsigned int v16; // ecx int v17; // edx unsigned int v18; // eax _DWORD *v19; // ebx int v20; // edi int v21; // eax int v22; // edx unsigned int v23; // ecx int v24; // eax unsigned int v25; // eax _DWORD *v26; // ebx int v27; // edi int v28; // eax int v29; // edx unsigned int v30; // ecx int v31; // eax unsigned int v32; // eax unsigned int *v33; // ebx _DWORD *v34; // ST20_4 int v35; // edi int v36; // eax int v37; // edx unsigned int v38; // ecx int v39; // eax unsigned int v40; // eax _DWORD *v41; // ST20_4 int v42; // edi int v43; // eax int v44; // edx unsigned int v45; // ecx int v46; // eax unsigned int v47; // eax unsigned int *v48; // eax _DWORD *v49; // ecx _DWORD *v50; // ebx int v51; // edi int v52; // eax int v53; // edx unsigned int v54; // ecx int v55; // eax unsigned int v56; // eax _DWORD *v57; // ebx int v58; // edi int v59; // eax int v60; // edx unsigned int v61; // ecx int v62; // eax unsigned int v63; // eax unsigned int v64; // ecx _DWORD *v65; // edx unsigned int *v66; // edx unsigned int *v67; // ecx _DWORD *v68; // edi unsigned int v69; // eax unsigned int *v70; // ecx unsigned int *v71; // eax _DWORD *v72; // ecx _DWORD *v73; // ecx _DWORD *v74; // edx unsigned int **result; // eax unsigned int *v76; // [esp+Ch] [ebp-Ch] unsigned int *v77; // [esp+10h] [ebp-8h] unsigned int *i; // [esp+14h] [ebp-4h] v3 = a3 - a2; v4 = &a2[v3 / 2]; sub_691C30(a2, &a2[v3 / 2], a3 - 1); for ( i = v4 + 1; a2 < v4; --v4 ) { v5 = (_DWORD *)*v4; v6 = sub_85C050((_DWORD *)*(v4 - 1), 8); v7 = sub_85C050(v5, 8); if ( v6 ) { if ( !v7 ) break; v8 = *(_DWORD *)(v6 + 40); v9 = *(_DWORD *)v8 ? *(_DWORD *)(*(_DWORD *)v8 + 4) : 0; v10 = **(_DWORD **)(v7 + 40); v11 = v10 ? *(_DWORD *)(v10 + 4) : 0; if ( v9 > v11 ) break; } v12 = (_DWORD *)*(v4 - 1); v13 = sub_85C050((_DWORD *)*v4, 8); v14 = sub_85C050(v12, 8); if ( v13 ) { if ( !v14 ) break; v15 = **(_DWORD **)(v13 + 40); v16 = v15 ? *(_DWORD *)(v15 + 4) : 0; v17 = *(_DWORD *)(v14 + 40); v18 = *(_DWORD *)v17 ? *(_DWORD *)(*(_DWORD *)v17 + 4) : 0; if ( v16 > v18 ) break; } } for ( ; i < a3; ++i ) { v19 = (_DWORD *)*v4; v20 = sub_85C050((_DWORD *)*i, 8); v21 = sub_85C050(v19, 8); if ( v20 ) { if ( !v21 ) break; v22 = *(_DWORD *)(v20 + 40); v23 = *(_DWORD *)v22 ? *(_DWORD *)(*(_DWORD *)v22 + 4) : 0; v24 = **(_DWORD **)(v21 + 40); v25 = v24 ? *(_DWORD *)(v24 + 4) : 0; if ( v23 > v25 ) break; } v26 = (_DWORD *)*i; v27 = sub_85C050((_DWORD *)*v4, 8); v28 = sub_85C050(v26, 8); if ( v27 ) { if ( !v28 ) break; v29 = *(_DWORD *)(v27 + 40); v30 = *(_DWORD *)v29 ? *(_DWORD *)(*(_DWORD *)v29 + 4) : 0; v31 = **(_DWORD **)(v28 + 40); v32 = v31 ? *(_DWORD *)(v31 + 4) : 0; if ( v30 > v32 ) break; } } v33 = i; v77 = i; v76 = v4; while ( 2 ) { while ( 2 ) { if ( v33 >= a3 ) goto LABEL_64; do { v34 = (_DWORD *)*v33; v35 = sub_85C050((_DWORD *)*v4, 8); v36 = sub_85C050(v34, 8); if ( v35 ) { if ( !v36 ) goto LABEL_62; v37 = *(_DWORD *)(v35 + 40); v38 = *(_DWORD *)v37 ? *(_DWORD *)(*(_DWORD *)v37 + 4) : 0; v39 = **(_DWORD **)(v36 + 40); v40 = v39 ? *(_DWORD *)(v39 + 4) : 0; if ( v38 > v40 ) goto LABEL_62; } v41 = (_DWORD *)*v4; v42 = sub_85C050((_DWORD *)*v33, 8); v43 = sub_85C050(v41, 8); if ( v42 ) { if ( !v43 ) break; v44 = *(_DWORD *)(v42 + 40); v45 = *(_DWORD *)v44 ? *(_DWORD *)(*(_DWORD *)v44 + 4) : 0; v46 = **(_DWORD **)(v43 + 40); v47 = v46 ? *(_DWORD *)(v46 + 4) : 0; if ( v45 > v47 ) break; } v48 = i; ++i; v49 = (_DWORD *)*v48; *v48 = *v33; *v33 = (unsigned int)v49; LABEL_62: ++v33; } while ( v33 < a3 ); v77 = v33; LABEL_64: while ( a2 < v76 ) { v50 = (_DWORD *)*v4; v51 = sub_85C050((_DWORD *)*(v76 - 1), 8); v52 = sub_85C050(v50, 8); if ( !v51 || v52 && ((v53 = *(_DWORD *)(v51 + 40), !*(_DWORD *)v53) ? (v54 = 0) : (v54 = *(_DWORD *)(*(_DWORD *)v53 + 4)), (v55 = **(_DWORD **)(v52 + 40)) == 0 ? (v56 = 0) : (v56 = *(_DWORD *)(v55 + 4)), v54 <= v56) ) { v57 = (_DWORD *)*(v76 - 1); v58 = sub_85C050((_DWORD *)*v4, 8); v59 = sub_85C050(v57, 8); if ( v58 ) { if ( !v59 ) break; v60 = *(_DWORD *)(v58 + 40); v61 = *(_DWORD *)v60 ? *(_DWORD *)(*(_DWORD *)v60 + 4) : 0; v62 = **(_DWORD **)(v59 + 40); v63 = v62 ? *(_DWORD *)(v62 + 4) : 0; if ( v61 > v63 ) break; } v64 = *(v4 - 1); --v4; *v4 = *(v76 - 1); *(v76 - 1) = v64; } --v76; } if ( v76 != a2 ) { v70 = v77; v71 = v76 - 1; --v76; if ( v77 == a3 ) { --v4; if ( v71 != v4 ) { v72 = (_DWORD *)*v71; *v71 = *v4; *v4 = (unsigned int)v72; } v73 = (_DWORD *)*v4; v33 = v77; *v4 = *(i - 1); --i; *i = (unsigned int)v73; } else { v74 = (_DWORD *)*v77; *v77 = *v71; *v71 = (unsigned int)v74; ++v77; v33 = v70 + 1; } continue; } break; } if ( v77 != a3 ) { if ( i != v77 ) { v65 = (_DWORD *)*v4; *v4 = *i; *i = (unsigned int)v65; } v66 = v4; ++i; v67 = v77; v68 = (_DWORD *)*v77; ++v4; ++v77; v69 = *v66; v33 = v77; *v66 = (unsigned int)v68; *v67 = v69; continue; } break; } result = a1; *a1 = v4; a1[1] = i; return result; } //----- (00692220) -------------------------------------------------------- _DWORD *__cdecl sub_692220(_DWORD *a1, int a2, char a3) { _DWORD *v3; // edi int v4; // ecx _DWORD *result; // eax int v6; // ebx int v7; // esi int v8; // eax int v9; // esi bool v10; // zf _DWORD *v11; // ecx int v12; // ebx int v13; // eax int v14; // ecx unsigned int v15; // ecx int v16; // edx unsigned int v17; // eax int v18; // ecx int v19; // eax int v20; // [esp+8h] [ebp-14h] int v21; // [esp+Ch] [ebp-10h] int v22; // [esp+10h] [ebp-Ch] _DWORD *v23; // [esp+14h] [ebp-8h] int v24; // [esp+18h] [ebp-4h] int v25; // [esp+24h] [ebp+8h] int v26; // [esp+28h] [ebp+Ch] v3 = a1; v4 = (a2 - (signed int)a1) >> 2; result = (_DWORD *)(v4 - (v4 >> 31)); v6 = v4 / 2; v25 = (a2 - (signed int)a1) >> 2; if ( v6 > 0 ) { v7 = 2 * v6 + 2; while ( 1 ) { v8 = v3[v6-- - 1]; v9 = v7 - 2; v22 = v6; v24 = v9; v20 = v8; LOBYTE(v21) = a3; v26 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { v11 = (_DWORD *)v3[v9]; v23 = (_DWORD *)v3[v9 - 1]; v12 = sub_85C050(v11, 8); v13 = sub_85C050(v23, 8); if ( v12 ) { if ( !v13 || ((v14 = **(_DWORD **)(v12 + 40)) == 0 ? (v15 = 0) : (v15 = *(_DWORD *)(v14 + 4)), (v16 = *(_DWORD *)(v13 + 40), !*(_DWORD *)v16) ? (v17 = 0) : (v17 = *(_DWORD *)(*(_DWORD *)v16 + 4)), v15 > v17) ) { --v9; } } v18 = v26; v19 = v3[v9]; v26 = v9; v9 = 2 * v9 + 2; v3[v18] = v19; } while ( v9 < v25 ); v4 = v25; v6 = v22; v10 = v9 == v25; } if ( v10 ) { v3[v26] = v3[v4 - 1]; v26 = v4 - 1; } result = sub_6918A0(v3, v26, v6, &v20); if ( v6 <= 0 ) break; v7 = v24; v4 = v25; } } return result; } //----- (00692310) -------------------------------------------------------- void *sub_692310() { return &unk_B68404; } //----- (00692320) -------------------------------------------------------- int *__thiscall sub_692320(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 33) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 33) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 33); j = (int *)*j ) v10 = j; a3 = v10; } } sub_691960(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_691E30(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (006923C0) -------------------------------------------------------- int *__thiscall sub_6923C0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi int v7; // eax void **v8; // ebx _DWORD *v9; // eax int v10; // ebx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // esi int v17; // eax int *result; // eax _BYTE *v19; // [esp+0h] [ebp-8h] _DWORD *v20; // [esp+4h] [ebp-4h] v20 = this; if ( *(_BYTE *)(a3 + 17) ) std::_Xout_of_range("invalid map/set iterator"); v3 = (int *)a3; v19 = (_BYTE *)a3; sub_8DDBD0(&a3); if ( *(_BYTE *)(*v3 + 17) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 17) ) *(_DWORD *)(v4 + 4) = v6; v7 = v20[1]; if ( *(int **)(v7 + 4) == v3 ) { *(_DWORD *)(v7 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } v8 = (void **)v20[1]; if ( *v8 == v19 ) { if ( *(_BYTE *)(v4 + 17) ) v9 = (_DWORD *)v6; else v9 = sub_6910C0((_DWORD *)v4); *v8 = v9; } v10 = v20[1]; if ( *(_BYTE **)(v10 + 8) == v19 ) { if ( *(_BYTE *)(v4 + 17) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_691420(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 17) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 17) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v20[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 16); *(_BYTE *)(v5 + 16) = *((_BYTE *)v3 + 16); *((_BYTE *)v3 + 16) = v13; LABEL_35: if ( v19[16] == 1 ) { for ( i = v20; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 16) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[16] ) { v15[16] = 1; *(_BYTE *)(v6 + 16) = 0; sub_8DDC80(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v20; } if ( v15[17] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 16) = 1; v15[16] = 0; sub_6913C0(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v20; } v15[16] = *(_BYTE *)(v6 + 16); *(_BYTE *)(v6 + 16) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) = 1; sub_8DDC80(i, v6); break; } } else { if ( !v15[16] ) { v15[16] = 1; *(_BYTE *)(v6 + 16) = 0; sub_6913C0(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v20; } if ( v15[17] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 16) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 16) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 16) = 1; v15[16] = 0; sub_8DDC80(i, (int)v15); v15 = *(_BYTE **)v6; i = v20; } v15[16] = *(_BYTE *)(v6 + 16); *(_BYTE *)(v6 + 16) = 1; *(_BYTE *)(*(_DWORD *)v15 + 16) = 1; sub_6913C0(i, (_DWORD *)v6); break; } } v15[16] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 16) = 1; } v16 = *((_DWORD *)v19 + 3); if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); operator delete(v19); v17 = v20[2]; if ( v17 ) v20[2] = v17 - 1; result = a2; *a2 = a3; return result; } //----- (00692640) -------------------------------------------------------- void __stdcall sub_692640(void *a1) { _DWORD *v1; // ebx void *i; // esi int v3; // edi v1 = a1; for ( i = a1; !*((_BYTE *)i + 17); v1 = i ) { sub_692640(*((void **)i + 2)); v3 = v1[3]; i = *(void **)i; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v1); } } //----- (006926A0) -------------------------------------------------------- int __cdecl sub_6926A0(int *a1, int a2) { int result; // eax int v3; // ecx int v4; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *a1; a2 = *(int *)((char *)a1 + result - 4); *(int *)((char *)a1 + result - 4) = v3; v4 = result - 4; sub_691CE0(a1, 0, (result - 4) >> 2, &a2); result = v4; } while ( (signed int)(v4 & 0xFFFFFFFC) > 4 ); } return result; } //----- (006926F0) -------------------------------------------------------- void **__thiscall sub_6926F0(void *this, char a2) { void **v2; // edi v2 = (void **)this; *(_DWORD *)this = &NiTextureAccumulator::`vftable'; sub_4E6D30((_DWORD *)this + 3, 0); if ( v2[3] ) operator delete(v2[3]); v2[3] = 0; v2[4] = 0; v2[5] = 0; *v2 = &NiAccumulator::`vftable'; sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F62D4: using guessed type void *NiAccumulator::`vftable'; // 9F633C: using guessed type void *NiTextureAccumulator::`vftable'; //----- (00692790) -------------------------------------------------------- int *__thiscall sub_692790(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 17) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 17) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 17); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_6923C0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_692640(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (00692850) -------------------------------------------------------- void __thiscall sub_692850(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_692320(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (006928B0) -------------------------------------------------------- void __thiscall sub_6928B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_6CAB30(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (00692910) -------------------------------------------------------- int __cdecl sub_692910(void *a1, int a2, int a3, int a4) { unsigned int *v4; // ebx unsigned int *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (unsigned int *)a1; v5 = (unsigned int *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_691E80((unsigned int **)&v8, v4, v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_692910(v9, (int)v5, v7, a4); v5 = (unsigned int *)v8; } else { sub_692910(v4, v8, v7, a4); v4 = (unsigned int *)v9; } result = v5 - v4; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_691680(v4, (int)v5); } else { if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_692220(v4, (int)v5, a4); result = sub_6926A0((int *)v4, (int)v5); } return result; } //----- (00692A00) -------------------------------------------------------- void __thiscall sub_692A00(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_692790(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (00692A60) -------------------------------------------------------- _DWORD *__thiscall sub_692A60(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void **v5; // [esp+10h] [ebp-30h] void **v6; // [esp+1Ch] [ebp-24h] _DWORD *v7; // [esp+28h] [ebp-18h] char *v8; // [esp+2Ch] [ebp-14h] char *v9; // [esp+30h] [ebp-10h] int v10; // [esp+3Ch] [ebp-4h] v1 = this; v7 = this; this[2] = 0; v2 = operator new(0x18u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&v8); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v1[1] = v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)(v1[1] + 8) = v1[1]; *(_BYTE *)(v1[1] + 20) = 1; *(_BYTE *)(v1[1] + 21) = 1; v10 = 0; v1[6] = 0; v3 = operator new(0x18u); if ( !v3 ) { v9 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v9); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[5] = v3; *v3 = v3; *(_DWORD *)(v1[5] + 4) = v1[5]; *(_DWORD *)(v1[5] + 8) = v1[5]; *(_BYTE *)(v1[5] + 20) = 1; *(_BYTE *)(v1[5] + 21) = 1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00692B60) -------------------------------------------------------- void __thiscall sub_692B60(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = (int *)*v2; v6 = 0; sub_6FEDB0(this, (int **)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (00692BC0) -------------------------------------------------------- _DWORD *__thiscall sub_692BC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax int v6; // edi void **v8; // [esp+10h] [ebp-30h] void **v9; // [esp+1Ch] [ebp-24h] _DWORD *v10; // [esp+28h] [ebp-18h] char *v11; // [esp+2Ch] [ebp-14h] char *v12; // [esp+30h] [ebp-10h] int v13; // [esp+3Ch] [ebp-4h] v1 = this; v10 = this; sub_692A60(this); v13 = 0; v1[10] = 0; v2 = operator new(0x18u); if ( !v2 ) { v11 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v11); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[9] = v2; *v2 = v2; *(_DWORD *)(v1[9] + 4) = v1[9]; *(_DWORD *)(v1[9] + 8) = v1[9]; *(_BYTE *)(v1[9] + 20) = 1; *(_BYTE *)(v1[9] + 21) = 1; sub_833100(v1 + 12); v1[24] = 0; v1[28] = 0; v1[34] = 15; v1[33] = 0; v13 = 2; *((_BYTE *)v1 + 116) = 0; v1[36] = 0; v1[38] = 0; v1[39] = 0; v1[40] = 0; v1[41] = 0; LOBYTE(v13) = 6; v1[51] = 0; v3 = operator new(0x30u); if ( !v3 ) { v12 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v12); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[50] = v3; *v3 = v3; *(_DWORD *)(v1[50] + 4) = v1[50]; *(_DWORD *)(v1[50] + 8) = v1[50]; *(_BYTE *)(v1[50] + 44) = 1; *(_BYTE *)(v1[50] + 45) = 1; LOBYTE(v13) = 7; v1[55] = 0; v4 = operator new(0x18u); if ( !v4 ) { v11 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v11); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[54] = v4; *v4 = v4; *(_DWORD *)(v1[54] + 4) = v1[54]; *(_DWORD *)(v1[54] + 8) = v1[54]; *(_BYTE *)(v1[54] + 20) = 1; *(_BYTE *)(v1[54] + 21) = 1; LOBYTE(v13) = 8; v1[59] = 0; v5 = operator new(0x14u); if ( !v5 ) { v12 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&v12); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } v1[58] = v5; *v5 = v5; *(_DWORD *)(v1[58] + 4) = v1[58]; *(_DWORD *)(v1[58] + 8) = v1[58]; *(_BYTE *)(v1[58] + 16) = 1; *(_BYTE *)(v1[58] + 17) = 1; v1[61] = 0xFFFF; *((_BYTE *)v1 + 248) = 0; v1[63] = -1; v1[64] = 0; v1[100] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; *((_WORD *)v1 + 216) = -1; *((_WORD *)v1 + 218) = -1; v1[110] = 0; v6 = v1[104]; LOBYTE(v13) = 12; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[104] = 0; } v1[105] = 1; *((_WORD *)v1 + 212) = -1; *((_WORD *)v1 + 214) = -1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00692EB0) -------------------------------------------------------- void __thiscall sub_692EB0(float *this, float a2) { sub_403BF0(this + 143060, a2); } //----- (00692ED0) -------------------------------------------------------- void __thiscall sub_692ED0(float *this, float a2) { sub_403C00(this + 143060, a2); } //----- (00692EF0) -------------------------------------------------------- void __thiscall sub_692EF0(float *this, float a2) { float *v2; // esi v2 = this + 143060; sub_403C10(this + 143060, a2); if ( a2 < sub_403BA0(v2) ) sub_403D20((int)v2, a2); } //----- (00692F40) -------------------------------------------------------- void __thiscall sub_692F40(float *this, float a2) { sub_403C20(this + 143060, a2); } //----- (00692FB0) -------------------------------------------------------- void __stdcall sub_692FB0(float a1, int a2) { double v2; // st7 double v3; // st6 double v4; // st4 double v5; // st4 double v6; // rt1 double v7; // rt2 double v8; // st4 double v9; // st6 bool v10; // c0 bool v11; // c3 double v12; // rtt double v13; // st4 double v14; // st7 double v15; // st4 float v16; // [esp+8h] [ebp+8h] if ( a2 ) { v2 = a1; v3 = 0.0; if ( a1 >= 0.0 && v2 <= 360.0 ) { *(float *)a2 = a1; return; } v4 = 360.0; while ( 1 ) { v7 = v4; v8 = v3; v9 = v7; v10 = v8 < v2; v11 = v8 == v2; v12 = v8; v13 = v2; v14 = v12; if ( v10 || v11 ) { if ( v13 <= 360.0 ) { *(float *)a2 = v13; return; } v15 = v13 - v9; } else { v15 = v13 + v9; } v16 = v15; v5 = v14; v2 = v16; v6 = v5; v4 = v9; v3 = v6; } } } //----- (00693030) -------------------------------------------------------- int __thiscall sub_693030(char *this) { return (int)(this + 572520); } //----- (00693040) -------------------------------------------------------- void __thiscall sub_693040(void *this, signed int a2, signed int a3) { sub_403E60((int)this + 572240, a2, a3); } //----- (00693050) -------------------------------------------------------- void __thiscall sub_693050(void *this, int a2) { sub_403DB0((int)this + 572240, a2); } //----- (006930F0) -------------------------------------------------------- void __thiscall sub_6930F0(int this, int a2, int a3, int a4, float a5, float a6, float a7) { int v7; // edx double v8; // st7 v7 = this; *(_DWORD *)(this + 572488) = a2; *(_DWORD *)(this + 572492) = a3; *(_DWORD *)(this + 572496) = a4; if ( -1.0 == a5 ) { v8 = -1.0; *(float *)(this + 572512) = -1.0; } else { sub_692FB0(a5, this + 572512); v8 = -1.0; } if ( v8 == a6 ) *(float *)(v7 + 572508) = v8; else sub_692FB0(a6, v7 + 572508); *(float *)(v7 + 572516) = a7; } //----- (006931A0) -------------------------------------------------------- void __thiscall sub_6931A0(float *this, float a2, float a3, float a4) { double v4; // st7 double v5; // st6 double v6; // st5 double v7; // st5 double v8; // rt1 double v9; // st6 float v10; // [esp+0h] [ebp-4h] float v11; // [esp+Ch] [ebp+8h] float v12; // [esp+Ch] [ebp+8h] float v13; // [esp+Ch] [ebp+8h] float v14; // [esp+Ch] [ebp+8h] float v15; // [esp+Ch] [ebp+8h] this[143091] = a2; v11 = a2 / 180.0 * 0.5 * flt_BA45B4; v12 = tan(v11); v4 = v12; v10 = v12; v5 = a3; v6 = a4; if ( a4 >= (double)a3 ) { v13 = v4 * (v6 / v5); v4 = v13; } else { v10 = v5 / v6 * v4; } v14 = -v10; v7 = v14; this[143100] = v14; this[143101] = v10; v8 = v10; this[143102] = v4; v15 = -v4; this[143103] = v15; this[143096] = v15; this[143093] = *(float *)&v7; this[143094] = *(float *)&v8; v9 = v4; this[143095] = *(float *)&v9; this[143107] = (v8 + v8) * 7.5; } // 6931A0: could not find valid save-restore pair for esi // BA45B4: using guessed type float flt_BA45B4; //----- (00693270) -------------------------------------------------------- int __thiscall sub_693270(void *this, int a2) { int result; // eax result = a2; if ( a2 ) result = sub_4411E0((int)this + 572432, a2, flt_ACCFCC); return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006932E0) -------------------------------------------------------- void __thiscall sub_6932E0(float *this, float a2) { float *v2; // esi int (*v3)(void); // edx float *v4; // eax float v5; // ecx float v6; // edx float v7; // eax int v8; // edi double v9; // st7 float v10; // ST04_4 float v11; // [esp+10h] [ebp-40h] float v12; // [esp+14h] [ebp-3Ch] float v13; // [esp+1Ch] [ebp-34h] float v14; // [esp+20h] [ebp-30h] float v15; // [esp+24h] [ebp-2Ch] float v16; // [esp+28h] [ebp-28h] double v17; // [esp+2Ch] [ebp-24h] float v18; // [esp+34h] [ebp-1Ch] double v19; // [esp+38h] [ebp-18h] float v20; // [esp+40h] [ebp-10h] float v21; // [esp+44h] [ebp-Ch] float v22; // [esp+48h] [ebp-8h] float v23; // [esp+4Ch] [ebp-4h] v2 = this; v3 = *(int (**)(void))(*(_DWORD *)dword_AD8EBC + 212); v23 = flt_BA45B4 / 180.0; v22 = this[143073]; v4 = (float *)v3(); v5 = *v4; v6 = v4[1]; v7 = v4[2]; v8 = *((_DWORD *)v2 + 143058); v22 = v22 * v23; v13 = v5; v14 = v6; v15 = v7; v22 = cos(v22); v11 = *(float *)(v8 + 104) / v22; v12 = *(float *)(v8 + 116) / v22; v17 = v12; v19 = v11; v22 = v11 * v5 + v12 * v6 + v7 * 0.0; v20 = v22; v22 = v15 * v15 + v14 * v14 + v13 * v13; v22 = sqrt(v22); v21 = v22; v22 = v19 * v19 + v17 * v17 + 0.0 * 0.0; v22 = sqrt(v22); v21 = v22 * v21; v20 = v20 / v21; v20 = acos(v20); v23 = v20 / v23; if ( a2 >= (double)v23 ) v23 = 0.0; if ( dword_BA6AC0 >= 1 || dword_BA6A9C >= 1 ) { *((_DWORD *)v2 + 143126) = timeGetTime(); } else { sub_443140(&v13, &v16, (float *)&dword_ABD4A4); sub_443140((float *)&dword_ABD4A4, &v18, &v13); v20 = *((float *)&v17 + 1) * 0.0 + v16 * v11 + *(float *)&v17 * v12; v21 = v11 * v18 + v12 * *(float *)&v19 + 0.0 * *((float *)&v19 + 1); if ( v21 > (double)v20 ) { v9 = a2; LABEL_7: v10 = v9; sub_403CB0(v2 + 143060, v23, v10); return; } if ( v21 < (double)v20 ) { v9 = -a2; goto LABEL_7; } } } // ABD4A4: using guessed type int dword_ABD4A4; // BA45B4: using guessed type float flt_BA45B4; // BA6A9C: using guessed type int dword_BA6A9C; // BA6AC0: using guessed type int dword_BA6AC0; //----- (006934F0) -------------------------------------------------------- char __thiscall sub_6934F0(float *this, float a2, float a3) { float *v3; // esi _DWORD *v4; // eax int v5; // ebx int v6; // edi float *v7; // eax _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi int v11; // ecx int v12; // edx v3 = this; sub_6931A0(this, this[143091], a2, a3); v4 = operator new(0x128u); v5 = 0; if ( v4 ) v5 = sub_862BA0(v4); v6 = *((_DWORD *)v3 + 143058); if ( v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v3 + 143058) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } sub_861DD0(*((_DWORD *)v3 + 143058), (int)(v3 + 143100)); v7 = (float *)*((_DWORD *)v3 + 143058); v7[69] = 0.0; v7[70] = 1.0; v7[71] = 1.0; v7[72] = 0.0; *((_DWORD *)v3 + 143059) = dword_BA46D0; v8 = operator new(0xE8u); if ( v8 ) v9 = sub_85A1C0(v8, 0); else v9 = 0; v10 = *((_DWORD *)v3 + 143208); if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v3 + 143208) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v3 + 143208) + 116))(*((_DWORD *)v3 + 143058), 0); sub_403B40( (_DWORD *)v3 + 143060, SLODWORD(flt_AB4FD0), SLODWORD(flt_AB4FD4), SLODWORD(flt_AB4FD8), dword_AB4FF4, dword_AB4FF8, dword_AB4FFC, dword_AB4FE8, dword_AB4FEC, dword_AB4FF0); sub_403B80(v3 + 143060, 40.0, 600.0); v3[143074] = 295.0; v3[143075] = 89.0; sub_403D20((int)(v3 + 143060), 300.0); sub_403EA0((int)(v3 + 143060), 0.0, 35.0); (**((void (__thiscall ***)(int))v3 + 143108))((int)(v3 + 143108)); *((_WORD *)v3 + 286250) = 0; v3[143119] = 0.0; v3[143120] = 0.0; v3[143121] = 0.0; v3[143122] = 0.0; v3[143123] = 0.0; v3[143124] = 0.0; v3[143126] = 0.0; v3[143127] = -1.0; v3[143128] = -1.0; v3[143129] = 0.0; v11 = dword_BA45C4; v12 = dword_BA45C8; *((_DWORD *)v3 + 143130) = dword_BA45C0; *((_DWORD *)v3 + 143131) = v11; *((_DWORD *)v3 + 143132) = v12; return 1; } // AB4FD0: using guessed type float flt_AB4FD0; // AB4FD4: using guessed type float flt_AB4FD4; // AB4FD8: using guessed type float flt_AB4FD8; // AB4FE8: using guessed type int dword_AB4FE8; // AB4FEC: using guessed type int dword_AB4FEC; // AB4FF0: using guessed type int dword_AB4FF0; // AB4FF4: using guessed type int dword_AB4FF4; // AB4FF8: using guessed type int dword_AB4FF8; // AB4FFC: using guessed type int dword_AB4FFC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; // BA46D0: using guessed type int dword_BA46D0; //----- (00693810) -------------------------------------------------------- void __thiscall sub_693810(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; if ( this[143058] ) { v2 = this[143058]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[143058] = 0; } } if ( v1[143208] ) { v3 = v1[143208]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v1[143208] = 0; } } } //----- (00693890) -------------------------------------------------------- void __thiscall sub_693890(float *this, float a2, float a3) { sub_6931A0(this, this[143091], a2, a3); } //----- (006938C0) -------------------------------------------------------- char __thiscall sub_6938C0(int this, char a2, int a3, int a4, char a5, int a6, int a7) { int v7; // ebx int v8; // esi int v9; // edi int *v10; // ebx int *v11; // esi _DWORD *v12; // ecx int v13; // edi _DWORD *i; // esi unsigned int v15; // ST08_4 int v16; // edi double v17; // st7 _BYTE *v18; // esi _DWORD *v19; // ecx int *v20; // eax _DWORD *v21; // edx char *v22; // eax int v23; // ebx _DWORD *v24; // eax int v25; // eax _DWORD *v26; // esi _DWORD *v27; // eax _DWORD *v28; // ecx _DWORD *v29; // eax _DWORD *v30; // edi _BYTE *v31; // esi int v32; // eax float v33; // ST08_4 _DWORD *v34; // esi _DWORD *v35; // eax _DWORD *v36; // esi int **v37; // eax int *k; // eax int j; // eax int v40; // ecx _BYTE *v41; // edi int *v42; // esi int v43; // esi int v45; // [esp+18h] [ebp-38h] int v46; // [esp+20h] [ebp-30h] char v47; // [esp+28h] [ebp-28h] char v48[4]; // [esp+2Ch] [ebp-24h] _DWORD *v49; // [esp+30h] [ebp-20h] _DWORD *v50; // [esp+34h] [ebp-1Ch] unsigned int v51; // [esp+38h] [ebp-18h] char v52[4]; // [esp+3Ch] [ebp-14h] _DWORD *v53; // [esp+40h] [ebp-10h] int *v54; // [esp+44h] [ebp-Ch] _DWORD *v55; // [esp+48h] [ebp-8h] char v56; // [esp+4Fh] [ebp-1h] v7 = *(_DWORD *)(this + 584); v8 = *(_DWORD *)(this + 572588); v9 = *(_DWORD *)(v8 + 24); v55 = (_DWORD *)this; v56 = 0; if ( v9 != v7 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); this = (int)v55; } *(_DWORD *)(v8 + 24) = v7; if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); this = (int)v55; } } v10 = (int *)(this + 572796); v11 = (int *)(this + 572780); v54 = (int *)(this + 572796); v53 = (_DWORD *)(this + 572780); if ( this + 572780 != this + 572796 ) { sub_4E6DC0((_DWORD *)(this + 572780), (int *)v48, **(_DWORD ***)(this + 572784), *(_DWORD **)(this + 572784)); sub_694590(v11, (int)v10); this = (int)v55; } if ( sub_444720(*(_DWORD **)(this + 572588), (float *)&a2, (float *)&a5) ) { v12 = (_DWORD *)v55[143147]; v13 = 0; v51 = 0; for ( i = (_DWORD *)sub_444750(v12, 0); i; i = (_DWORD *)sub_444750(v28, v51) ) { v15 = v13; v16 = (int)v55; *(float *)v52 = sub_444690((_DWORD *)v55[143147], v15); v17 = sub_403BA0((float *)(v16 + 572240)); if ( *(float *)v52 >= v17 ) break; v18 = (_BYTE *)sub_8CFD10(i, "Scene Root", "[PN]"); *(float *)v52 = *(float *)&v18; if ( v18 ) { v19 = (_DWORD *)v10[1]; v20 = (int *)v19[1]; v21 = (_DWORD *)v10[1]; while ( !*((_BYTE *)v20 + 17) ) { if ( v20[3] >= (unsigned int)v18 ) { v21 = v20; v20 = (int *)*v20; } else { v20 = (int *)v20[2]; } } v50 = v21; if ( v21 == v19 || (unsigned int)v18 < v21[3] ) { *(_DWORD *)v48 = v19; v22 = v48; } else { v22 = (char *)&v50; } v23 = *(_DWORD *)v22; v24 = sub_49FAD0((_DWORD *)(v16 + 572812), v52); sub_8DE1B0((_DWORD *)(v16 + 572812), (int)&v46, v24, 0); if ( v23 == *(_DWORD *)(v16 + 572800) ) { v25 = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v18 + 4))(v18); if ( v25 ) { while ( (char *)v25 != dword_BA6660 ) { v25 = *(_DWORD *)(v25 + 4); if ( !v25 ) goto LABEL_31; } v18[352] = 0; sub_8D9300(v18, flt_ACCFCC, 1); sub_8D7EE0(v18, 0.2); v26 = v53; v27 = sub_49FAD0(v53, v52); sub_8DE1B0(v26, (int)&v45, v27, 0); v56 = 1; } } else { sub_4E6A70(v54, (int *)&v47, v23); } LABEL_31: v10 = v54; } v28 = (_DWORD *)v55[143147]; v13 = v51++ + 1; } } v29 = (_DWORD *)v55[143200]; v30 = (_DWORD *)*v29; if ( (_DWORD *)*v29 != v29 ) { do { v31 = (_BYTE *)v30[3]; *(_DWORD *)v48 = v31; if ( v31 ) { v32 = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v31 + 4))(v31); if ( v32 ) { while ( (char *)v32 != dword_BA6660 ) { v32 = *(_DWORD *)(v32 + 4); if ( !v32 ) goto LABEL_40; } v31[352] = 1; v33 = sub_8D7ED0(v31); sub_8D7EE0(v31, v33); sub_8D9300(v31, flt_ACCFCC, 0); v34 = v55; v35 = sub_49FAD0(v55 + 143203, v48); sub_8DE1B0(v34 + 143203, (int)&v45, v35, 0); } } LABEL_40: v36 = v53; sub_6AD670(v53, &v49, v30 + 3); sub_4E6DC0(v36, (int *)&v47, v49, v50); if ( !*((_BYTE *)v30 + 17) ) { v37 = (int **)v30[2]; if ( *((_BYTE *)v37 + 17) ) { for ( j = v30[1]; !*(_BYTE *)(j + 17); j = *(_DWORD *)(j + 4) ) { if ( v30 != *(_DWORD **)(j + 8) ) break; v30 = (_DWORD *)j; } v30 = (_DWORD *)j; } else { v30 = (_DWORD *)v30[2]; for ( k = *v37; !*((_BYTE *)k + 17); k = (int *)*k ) v30 = k; } } } while ( v30 != (_DWORD *)v55[143200] ); } v40 = v10[1]; v41 = *(_BYTE **)(v40 + 4); v42 = *(int **)(v40 + 4); if ( !v41[17] ) { do { sub_67AEC0((void *)v42[2]); v42 = (int *)*v42; operator delete(v41); v41 = v42; } while ( !*((_BYTE *)v42 + 17) ); } v43 = (int)v53; *(_DWORD *)(v10[1] + 4) = v10[1]; *(_DWORD *)v10[1] = v10[1]; *(_DWORD *)(v10[1] + 8) = v10[1]; v10[2] = 0; if ( v10 != (int *)v43 ) { sub_4E6DC0(v10, (int *)&v47, *(_DWORD **)v10[1], (_DWORD *)v10[1]); sub_694590(v10, v43); } return v56; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00693C50) -------------------------------------------------------- int __userpurge sub_693C50@(int a1@, int a2@, int a3@, int a4@, float a5) { int v5; // ST1C_4 int v6; // ebx double v7; // st7 double v8; // st7 float *v9; // eax float *v10; // eax double v11; // st7 int v12; // edx int v13; // eax double v14; // st7 float v15; // ST20_4 float v16; // ST24_4 float v17; // ST24_4 float v18; // edx float v19; // eax float v20; // ecx float *v21; // eax float v22; // esi bool v23; // zf int v24; // edi int v25; // eax float j; // eax float i; // eax int v28; // eax float *v29; // eax float *v30; // eax double v31; // st7 int v32; // ebx double v33; // st7 double v34; // st6 float v36; // [esp+28h] [ebp-94h] float v37; // [esp+2Ch] [ebp-90h] float v38; // [esp+30h] [ebp-8Ch] float v39; // [esp+34h] [ebp-88h] float v40; // [esp+38h] [ebp-84h] float v41; // [esp+3Ch] [ebp-80h] float v42; // [esp+40h] [ebp-7Ch] float v43; // [esp+44h] [ebp-78h] __int64 v44; // [esp+48h] [ebp-74h] float v45; // [esp+50h] [ebp-6Ch] float v46; // [esp+54h] [ebp-68h] float v47; // [esp+58h] [ebp-64h] float v48; // [esp+5Ch] [ebp-60h] int v49; // [esp+60h] [ebp-5Ch] int v50; // [esp+64h] [ebp-58h] float v51; // [esp+68h] [ebp-54h] __int64 v52; // [esp+6Ch] [ebp-50h] float v53; // [esp+74h] [ebp-48h] __int64 v54; // [esp+78h] [ebp-44h] float v55; // [esp+80h] [ebp-3Ch] float v56; // [esp+84h] [ebp-38h] double v57; // [esp+88h] [ebp-34h] float v58; // [esp+90h] [ebp-2Ch] char v59; // [esp+94h] [ebp-28h] v5 = a2; v6 = a1; sub_403C40((float *)(a1 + 572240), a5); (*(void (__stdcall **)(float *, int, int, int))(*(_DWORD *)dword_AD8EBC + 676))(&v48, a3, a4, v5); if ( *(_BYTE *)(v6 + 572500) == 1 ) { if ( *(_BYTE *)(v6 + 572501) == 1 ) sub_6932E0((float *)v6, 3.0); *(float *)&v50 = *(float *)&v50 + 20.0; } sub_403BB0((_DWORD *)(v6 + 572240), &v48); sub_4040A0((float *)(v6 + 572240), &v45); v53 = -*(float *)&dword_AB4FE8; *(float *)&v54 = -*(float *)&dword_AB4FEC; v43 = v53; qmemcpy(&v59, &unk_ABD440, 0x24u); *((float *)&v54 + 1) = -*(float *)&dword_AB4FF0; v48 = *(float *)(v6 + 572488) + v48; *(float *)&v49 = *(float *)(v6 + 572492) + *(float *)&v49; v7 = *(float *)(v6 + 572496); v44 = v54; *(float *)&v50 = v7 + *(float *)&v50; v8 = 0.0; if ( *(float *)(v6 + 572508) >= 0.0 || *(float *)(v6 + 572512) >= 0.0 ) { if ( *(float *)(v6 + 572508) >= 0.0 ) { v53 = -flt_AB500C; *(float *)&v54 = -flt_AB5010; *((float *)&v54 + 1) = -flt_AB5014; v55 = *(float *)(v6 + 572508) * 0.01745329238474369; sub_85D860((float *)&v59, v55, v53, *(float *)&v54, *((float *)&v54 + 1)); v9 = sub_85DAF0(&v53, &v43, (float *)&v59); v8 = 0.0; v43 = *v9; v44 = *(_QWORD *)(v9 + 1); } if ( v8 <= *(float *)(v6 + 572512) ) { v55 = *(float *)(v6 + 572512) * 0.01745329238474369; sub_85D860((float *)&v59, v55, flt_AB4FD0, flt_AB4FD4, flt_AB4FD8); v10 = sub_85DAF0(&v53, &v43, (float *)&v59); v43 = *v10; v44 = *(_QWORD *)(v10 + 1); } v53 = -v43; *(float *)&v54 = -*(float *)&v44; *((float *)&v54 + 1) = -*((float *)&v44 + 1); v55 = *(float *)(v6 + 572516); v56 = v53 * v55; *(float *)&v57 = *(float *)&v54 * v55; *((float *)&v57 + 1) = v55 * *((float *)&v54 + 1); v53 = v56 + v48; v45 = v53; *(float *)&v54 = *(float *)&v57 + *(float *)&v49; v46 = *(float *)&v54; *((float *)&v54 + 1) = *((float *)&v57 + 1) + *(float *)&v50; v47 = *((float *)&v54 + 1); } v11 = v45 - v48; v12 = v49; v13 = v50; *(float *)(v6 + 572520) = v48; v51 = v11; *(_DWORD *)(v6 + 572524) = v12; v14 = v46; *(_DWORD *)(v6 + 572528) = v13; v56 = v51; v53 = v51; *(float *)&v52 = v14 - *(float *)&v49; LODWORD(v57) = v52; LODWORD(v54) = v52; *((float *)&v52 + 1) = v47 - *(float *)&v50; HIDWORD(v57) = HIDWORD(v52); HIDWORD(v54) = HIDWORD(v52); sub_4430B0(&v53); v55 = *(float *)(v6 + 572416); v37 = *(float *)&dword_BA45C0; v38 = *(float *)&dword_BA45C4; v15 = v53 * v55; v39 = *(float *)&dword_BA45C8; v16 = *(float *)&v54 * v55; v36 = v55 * *((float *)&v54 + 1); v56 = v51 - v15; *(float *)&v57 = *(float *)&v57 - v16; *((float *)&v57 + 1) = *((float *)&v57 + 1) - v36; if ( sub_69B970((_DWORD *)v6, &v48, COERCE_FLOAT(&v45), &v40, (int *)&v37, 0) ) { v51 = v40 - v48; *(float *)&v52 = v41 - *(float *)&v49; *((float *)&v52 + 1) = v42 - *(float *)&v50; v55 = *((float *)&v57 + 1) * *((float *)&v57 + 1) + v56 * v56 + *(float *)&v57 * *(float *)&v57; v55 = sqrt(v55); v57 = v55 * 1.5; v58 = *(float *)&v52 * *(float *)&v52 + v51 * v51 + *((float *)&v52 + 1) * *((float *)&v52 + 1); v58 = sqrt(v58); if ( v58 < v57 ) { v58 = v38 * v38 + v37 * v37 + v39 * v39; v58 = sqrt(v58); if ( v58 > 0.1000000014901161 ) { sub_4430B0(&v37); v17 = *(float *)(v6 + 572408); v36 = *(float *)(v6 + 572404); v58 = v36 * v36 + v17 * v17; v58 = sqrt(v58); v56 = v37 * v58; *(float *)&v57 = v38 * v58; *((float *)&v57 + 1) = v58 * v39; v58 = *(float *)(v6 + 572416); v51 = v56 * v58; *(float *)&v52 = *(float *)&v57 * v58; *((float *)&v52 + 1) = v58 * *((float *)&v57 + 1); v56 = v51 * 1.5; *(float *)&v57 = *(float *)&v52 * 1.5; *((float *)&v57 + 1) = 1.5 * *((float *)&v52 + 1); v40 = v56 + v40; v41 = *(float *)&v57 + v41; v42 = *((float *)&v57 + 1) + v42; } v51 = v40 - v48; *(float *)&v52 = v41 - *(float *)&v49; *((float *)&v52 + 1) = v42 - *(float *)&v50; v57 = v55; v58 = *(float *)&v52 * *(float *)&v52 + v51 * v51 + *((float *)&v52 + 1) * *((float *)&v52 + 1); v58 = sqrt(v58); if ( v58 >= (double)v55 ) { v58 = v55; sub_4430B0(&v51); v56 = v51 * v58; *(float *)&v57 = *(float *)&v52 * v58; *((float *)&v57 + 1) = v58 * *((float *)&v52 + 1); v51 = v56 + v48; v18 = v51; *(float *)&v52 = *(float *)&v57 + *(float *)&v49; v19 = *(float *)&v52; *((float *)&v52 + 1) = *((float *)&v57 + 1) + *(float *)&v50; v20 = *((float *)&v52 + 1); } else { v56 = v51 + v48; v18 = v56; *(float *)&v57 = *(float *)&v52 + *(float *)&v49; v19 = *(float *)&v57; *((float *)&v57 + 1) = *((float *)&v52 + 1) + *(float *)&v50; v20 = *((float *)&v57 + 1); } v47 = v20; v46 = v19; v45 = v18; } } sub_6938C0(v6, SLOBYTE(v48), v49, v50, SLOBYTE(v53), v54, SHIDWORD(v54)); v21 = *(float **)(v6 + 572816); v22 = *v21; if ( *(float **)v21 != v21 ) { do { v23 = *(_BYTE *)(LODWORD(v22) + 17) == 0; v24 = *(_DWORD *)(LODWORD(v22) + 12); v55 = v22; if ( v23 ) { v25 = *(_DWORD *)(LODWORD(v22) + 8); if ( *(_BYTE *)(v25 + 17) ) { for ( i = *(float *)(LODWORD(v22) + 4); !*(_BYTE *)(LODWORD(i) + 17); i = *(float *)(LODWORD(i) + 4) ) { if ( LODWORD(v22) != *(_DWORD *)(LODWORD(i) + 8) ) break; v22 = i; } v22 = i; } else { v22 = *(float *)(LODWORD(v22) + 8); for ( j = *(float *)v25; !*(_BYTE *)(LODWORD(j) + 17); j = *(float *)LODWORD(j) ) v22 = j; } } if ( v24 && (v28 = (*(int (__thiscall **)(int))(*(_DWORD *)v24 + 4))(v24)) != 0 ) { while ( (char *)v28 != dword_BA6660 ) { v28 = *(_DWORD *)(v28 + 4); if ( !v28 ) goto LABEL_34; } if ( *(_DWORD *)(v24 + 356) ) { sub_85BED0((_DWORD **)v24, flt_ACCFCC, 1); } else { sub_6AD670((_DWORD *)(v6 + 572812), &v52, (unsigned int *)(LODWORD(v55) + 12)); sub_4E6DC0((_DWORD *)(v6 + 572812), (int *)&v58, (_DWORD *)v52, (_DWORD *)HIDWORD(v52)); } } else { LABEL_34: sub_6AD670((_DWORD *)(v6 + 572812), &v57, (unsigned int *)(LODWORD(v55) + 12)); sub_4E6DC0((_DWORD *)(v6 + 572812), (int *)&v36, (_DWORD *)LODWORD(v57), (_DWORD *)HIDWORD(v57)); } } while ( LODWORD(v22) != *(_DWORD *)(v6 + 572816) ); } v29 = *(float **)(v6 + 572232); v29[22] = v45; v29[23] = v46; v29[24] = v47; sub_85BED0(*(_DWORD ***)(v6 + 572232), 0.0, 1); sub_862170(*(float **)(v6 + 572232), &v48, &flt_AB4FD0); sub_85BED0(*(_DWORD ***)(v6 + 572232), 0.0, 1); sub_4410A0((float *)(v6 + 572432), a5); v30 = *(float **)(v6 + 572232); if ( *(_DWORD *)(v6 + 572472) == 1 ) { v56 = v30[27]; *(float *)&v57 = v30[30]; v31 = v30[33]; } else { v56 = v30[28]; *(float *)&v57 = v30[31]; v31 = v30[34]; } *((float *)&v57 + 1) = v31; v58 = *(float *)(v6 + 572456); v32 = *(_DWORD *)(v6 + 572832); v53 = v56; v54 = *(_QWORD *)&v57; v33 = v58; v56 = v56 * v58; v34 = *(float *)&v57; *(float *)(v32 + 88) = v56; *(float *)&v57 = v34 * v33; *(_DWORD *)(v32 + 92) = LODWORD(v57); *((float *)&v57 + 1) = v33 * *((float *)&v54 + 1); *(_DWORD *)(v32 + 96) = HIDWORD(v57); return sub_85BED0((_DWORD **)v32, a5, 1); } // 693C50: could not find valid save-restore pair for ebx // 693C50: could not find valid save-restore pair for edi // 693C50: could not find valid save-restore pair for esi // AB4FD0: using guessed type float flt_AB4FD0; // AB4FD4: using guessed type float flt_AB4FD4; // AB4FD8: using guessed type float flt_AB4FD8; // AB4FE8: using guessed type int dword_AB4FE8; // AB4FEC: using guessed type int dword_AB4FEC; // AB4FF0: using guessed type int dword_AB4FF0; // AB500C: using guessed type float flt_AB500C; // AB5010: using guessed type float flt_AB5010; // AB5014: using guessed type float flt_AB5014; // ACCFCC: using guessed type float flt_ACCFCC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00694490) -------------------------------------------------------- float *__thiscall sub_694490(float *this, float *a2) { float *result; // eax result = a2; *a2 = this[27]; a2[1] = this[30]; a2[2] = this[33]; return result; } //----- (006944B0) -------------------------------------------------------- float *__thiscall sub_6944B0(float *this, float *a2) { float *result; // eax result = a2; *a2 = this[28]; a2[1] = this[31]; a2[2] = this[34]; return result; } //----- (006944D0) -------------------------------------------------------- void *__thiscall sub_6944D0(int this, int *a2, int a3) { bool v3; // zf _DWORD *v4; // eax _BYTE *v5; // ecx _DWORD *v6; // esi int v7; // ST00_4 int v9; // [esp+0h] [ebp-28h] int v10; // [esp+10h] [ebp-18h] void *v11; // [esp+14h] [ebp-14h] int *v12; // [esp+18h] [ebp-10h] int v13; // [esp+24h] [ebp-4h] v12 = &v9; v10 = this; v3 = *((_BYTE *)a2 + 17) == 0; v11 = *(void **)(this + 4); if ( v3 ) { v4 = sub_49FAD0((_DWORD *)this, (char *)a2 + 12); v5 = v11; v6 = v4; v4[1] = a3; *((_BYTE *)v4 + 16) = *((_BYTE *)a2 + 16); if ( v5[17] ) v11 = v4; v7 = *a2; v13 = 0; *v4 = sub_6944D0(v7, v4); v6[2] = sub_6944D0(a2[2], v6); } return v11; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00694590) -------------------------------------------------------- int *__thiscall sub_694590(int *this, int a2) { int *v2; // esi int v3; // edi int **v4; // edx int *result; // eax int *v6; // ecx int v7; // esi int **v8; // ecx v2 = this; v3 = this[1]; *(_DWORD *)(v3 + 4) = sub_6944D0((int)this, *(int **)(*(_DWORD *)(a2 + 4) + 4), this[1]); v4 = (int **)v2[1]; v2[2] = *(_DWORD *)(a2 + 8); result = v4[1]; if ( *((_BYTE *)result + 17) ) { *v4 = (int *)v4; *(_DWORD *)(v2[1] + 8) = v2[1]; } else { v6 = (int *)*result; if ( !*(_BYTE *)(*result + 17) ) { do { result = v6; v6 = (int *)*v6; } while ( !*((_BYTE *)v6 + 17) ); } *v4 = result; v7 = v2[1]; v8 = *(int ***)(v7 + 4); for ( result = v8[2]; !*((_BYTE *)result + 17); result = (int *)result[2] ) v8 = (int **)result; *(_DWORD *)(v7 + 8) = v8; } return result; } //----- (00694610) -------------------------------------------------------- void __thiscall sub_694610(_DWORD *this) { sub_68D820(this + 113); } //----- (00694620) -------------------------------------------------------- float *__usercall sub_694620@(float *a1@, float *a2@) { float v2; // ecx float v3; // edx float v4; // eax float *result; // eax float v6; // [esp+0h] [ebp-24h] float v7; // [esp+4h] [ebp-20h] float v8; // [esp+8h] [ebp-1Ch] float v9; // [esp+Ch] [ebp-18h] float v10; // [esp+10h] [ebp-14h] float v11; // [esp+14h] [ebp-10h] float v12; // [esp+18h] [ebp-Ch] float v13; // [esp+1Ch] [ebp-8h] float v14; // [esp+20h] [ebp-4h] v2 = *a1; v3 = a1[1]; v4 = a1[2]; v12 = v2; v13 = v3; v14 = v4; sub_4430B0(&v12); sub_694F40(&v12, &v9); result = sub_443140(&v12, &v6, &v9); *a2 = v12; a2[3] = v13; a2[6] = v14; a2[1] = v9; a2[4] = v10; a2[7] = v11; a2[2] = v6; a2[5] = v7; a2[8] = v8; return result; } //----- (006946A0) -------------------------------------------------------- _DWORD *__thiscall sub_6946A0(_DWORD **this, _DWORD *a2) { _DWORD *result; // eax result = (_DWORD *)sub_85C050(this[133], 2); if ( result ) { result[9] = *a2; result[10] = a2[1]; result[11] = a2[2]; } return result; } //----- (006946D0) -------------------------------------------------------- void __thiscall sub_6946D0(_DWORD **this, float a2) { int v2; // ecx v2 = sub_85C050(this[133], 2); if ( v2 ) { if ( a2 < 0.0 ) *(float *)(v2 + 32) = 0.0; else *(float *)(v2 + 32) = a2; } } //----- (00694720) -------------------------------------------------------- int __thiscall sub_694720(_DWORD **this, char a2) { int result; // eax result = sub_85C050(this[133], 2); if ( result ) { if ( a2 ) *(_WORD *)(result + 28) |= 1u; else *(_WORD *)(result + 28) &= 0xFFFEu; } return result; } //----- (00694750) -------------------------------------------------------- _DWORD *__thiscall sub_694750(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // ecx result = (_DWORD *)this[143136]; if ( result ) { result[57] = *a2; result[58] = a2[1]; v3 = a2[2]; ++result[47]; result[59] = v3; } return result; } //----- (006948D0) -------------------------------------------------------- int __thiscall sub_6948D0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = this[143136]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[143136] = 0; } v3 = v1[143137]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[143137] = 0; } return sub_68D950(v1 + 113); } // 68D950: using guessed type int __thiscall sub_68D950(_DWORD); //----- (00694950) -------------------------------------------------------- _DWORD *__thiscall sub_694950(_DWORD *this, float a2) { _DWORD *v2; // esi _DWORD *v3; // eax int v4; // edi int v5; // ebx _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *v8; // eax int v9; // ecx _DWORD *result; // eax int v11; // [esp+14h] [ebp-4h] v2 = this; sub_68D8C0((int)(this + 113), a2); v3 = (_DWORD *)v2[119]; if ( v3 ) { v4 = v3[11]; v5 = v3[12]; v11 = v3[13]; v6 = (_DWORD *)sub_85C050((_DWORD *)v2[133], 2); if ( v6 ) { v6[9] = v4; v6[10] = v5; v6[11] = v11; } } v7 = (_DWORD *)v2[120]; if ( v7 ) { v8 = (_DWORD *)v2[143136]; if ( v8 ) { v8[57] = v7[11]; v8[58] = v7[12]; v9 = v7[13]; ++v8[47]; v8[59] = v9; } } result = (_DWORD *)v2[121]; if ( result ) { v2[143139] = result[11]; v2[143140] = result[12]; result = (_DWORD *)result[13]; v2[143141] = result; } return result; } //----- (00694A10) -------------------------------------------------------- char __thiscall sub_694A10(void *this) { void *v1; // ebx void *v2; // eax volatile LONG *v3; // edi volatile LONG *v4; // eax int v5; // eax int v6; // eax float v7; // ecx _DWORD *v8; // eax int v9; // edx _DWORD *v10; // eax int v11; // ecx void *v12; // eax volatile LONG *v13; // eax volatile LONG *v14; // edi int v15; // eax _DWORD *v16; // eax int v17; // ecx float v18; // edx float *v19; // eax float v20; // ecx float v21; // edx _DWORD *v22; // eax int v23; // ecx void *v24; // eax volatile LONG *v25; // edi volatile LONG *v26; // eax int v27; // eax float v28; // ecx float v29; // edx float *v30; // eax float v31; // ecx float v32; // edx float v33; // ecx float *v34; // eax float v35; // edx float v36; // ecx int v37; // eax int v38; // eax LONG v39; // eax int v40; // ecx void **v41; // eax LONG v43; // [esp-8h] [ebp-78h] _DWORD *v44; // [esp-4h] [ebp-74h] char v45; // [esp+10h] [ebp-60h] float v46; // [esp+34h] [ebp-3Ch] float v47; // [esp+38h] [ebp-38h] float v48; // [esp+3Ch] [ebp-34h] void *v49; // [esp+40h] [ebp-30h] void *v50; // [esp+44h] [ebp-2Ch] int v51; // [esp+54h] [ebp-1Ch] unsigned int v52; // [esp+58h] [ebp-18h] int v53; // [esp+6Ch] [ebp-4h] v1 = this; v2 = operator new(0x10Cu); v49 = v2; v53 = 0; if ( v2 ) v49 = sub_861A00((float *)v2); else v49 = 0; v3 = (volatile LONG *)*((_DWORD *)v1 + 143136); v53 = -1; if ( v3 != v49 ) { if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v4 = (volatile LONG *)v49; *((_DWORD *)v1 + 143136) = v49; if ( v4 ) InterlockedIncrement(v4 + 1); } v5 = *((_DWORD *)v1 + 143136); ++*(_DWORD *)(v5 + 188); *(float *)(v5 + 224) = 1.0; v6 = *((_DWORD *)v1 + 143136); ++*(_DWORD *)(v6 + 188); v46 = 0.2; v47 = 0.2; v48 = 0.2; *(float *)(v6 + 228) = 0.2; v7 = v48; *(float *)(v6 + 232) = 0.2; *(float *)(v6 + 236) = v7; v8 = (_DWORD *)*((_DWORD *)v1 + 143136); v8[60] = dword_ABD4FC; v8[61] = dword_ABD500; v9 = dword_ABD504; ++v8[47]; v8[62] = v9; v10 = (_DWORD *)*((_DWORD *)v1 + 143136); v10[63] = dword_BA4724; v10[64] = dword_BA4728; v11 = dword_BA472C; ++v10[47]; v10[65] = v11; sub_861480(*((_DWORD **)v1 + 143136), *((_DWORD *)v1 + 141)); *(_BYTE *)(*((_DWORD *)v1 + 143136) + 176) = 1; (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 143136), 0); v12 = operator new(0x118u); v49 = v12; v53 = 1; if ( v12 ) { v13 = (volatile LONG *)sub_860F90((float *)v12); v49 = (void *)v13; } else { v49 = 0; v13 = 0; } v14 = (volatile LONG *)*((_DWORD *)v1 + 143137); v53 = -1; if ( v14 != v13 ) { if ( v14 ) { if ( !InterlockedDecrement(v14 + 1) && v14 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v14)(v14, 1); v13 = (volatile LONG *)v49; } *((_DWORD *)v1 + 143137) = v13; if ( v13 ) InterlockedIncrement(v13 + 1); } v15 = *((_DWORD *)v1 + 143137); ++*(_DWORD *)(v15 + 188); *(float *)(v15 + 224) = 1.0; v16 = (_DWORD *)*((_DWORD *)v1 + 143137); v46 = 1.0; v47 = 1.0; v16[57] = dword_BA4724; v48 = 1.0; v16[58] = dword_BA4728; v17 = dword_BA472C; ++v16[47]; v18 = v46; v16[59] = v17; v19 = (float *)*((_DWORD *)v1 + 143137); ++*((_DWORD *)v19 + 47); v20 = v47; v19[60] = v18; v21 = v48; v19[61] = v20; v19[62] = v21; v22 = (_DWORD *)*((_DWORD *)v1 + 143137); v22[63] = dword_BA4724; v22[64] = dword_BA4728; v23 = dword_BA472C; ++v22[47]; v22[65] = v23; sub_861480(*((_DWORD **)v1 + 143137), *((_DWORD *)v1 + 139)); *(_BYTE *)(*((_DWORD *)v1 + 143137) + 176) = 1; sub_694620((float *)&unk_AB5018, (float *)&v45); qmemcpy((void *)(*((_DWORD *)v1 + 143137) + 52), &v45, 0x24u); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 139) + 116))(*((_DWORD *)v1 + 143137), 0); sub_68D810(); v24 = operator new(0x118u); v49 = v24; v53 = 2; if ( v24 ) v49 = sub_860F90((float *)v24); else v49 = 0; v25 = (volatile LONG *)*((_DWORD *)v1 + 143138); v53 = -1; if ( v25 != v49 ) { if ( v25 && !InterlockedDecrement(v25 + 1) && v25 ) (**(void (__thiscall ***)(void *, signed int))v25)((void *)v25, 1); v26 = (volatile LONG *)v49; *((_DWORD *)v1 + 143138) = v49; if ( v26 ) InterlockedIncrement(v26 + 1); } v27 = *((_DWORD *)v1 + 143138); ++*(_DWORD *)(v27 + 188); v48 = 0.75; *(float *)(v27 + 228) = 0.75; v28 = v48; v46 = 1.0; *(float *)(v27 + 232) = 0.75; v47 = 1.0; v29 = v46; v48 = 1.0; *(float *)(v27 + 236) = v28; v30 = (float *)*((_DWORD *)v1 + 143138); v46 = 0.0; ++*((_DWORD *)v30 + 47); v31 = v47; v47 = 0.0; v30[60] = v29; v32 = v48; v48 = 0.0; v30[61] = v31; v33 = v46; v30[62] = v32; v34 = (float *)*((_DWORD *)v1 + 143138); ++*((_DWORD *)v34 + 47); v35 = v47; v34[63] = v33; v36 = v48; v34[64] = v35; v34[65] = v36; v37 = *((_DWORD *)v1 + 143138); ++*(_DWORD *)(v37 + 188); *(float *)(v37 + 224) = 1.0; qmemcpy((void *)(*((_DWORD *)v1 + 143138) + 52), &v45, 0x24u); *(_BYTE *)(*((_DWORD *)v1 + 143138) + 176) = 1; v38 = *((_DWORD *)v1 + 143138); v49 = &v44; v44 = (_DWORD *)v38; if ( v38 ) InterlockedIncrement((volatile LONG *)(v38 + 4)); v39 = *((_DWORD *)v1 + 145); v49 = &v43; v43 = v39; if ( v39 ) InterlockedIncrement((volatile LONG *)(v39 + 4)); sub_8E68D0(*((_DWORD **)v1 + 143334), v43, (int)v44); v52 = 15; v51 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "WorldSetting", 0xCu); v40 = *((_DWORD *)v1 + 143334); v53 = 3; sub_4017F0((const void **)(v40 + 4), (const void **)&v50, 0, (void *)0xFFFFFFFF); v53 = -1; if ( v52 >= 0x10 ) operator delete(v50); v44 = (_DWORD *)*((_DWORD *)v1 + 143334); v52 = 15; v51 = 0; LOBYTE(v50) = 0; v41 = sub_8E50C0(); sub_8E5150((const void **)v41, v44); return 1; } // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00694F40) -------------------------------------------------------- float *__thiscall sub_694F40(float *this, float *a2) { float v2; // ST0C_4 float *result; // eax double v4; // st7 float v5; // ST0C_4 float v6; // [esp+4h] [ebp-8h] float v7; // [esp+8h] [ebp-4h] v7 = fabs(*this); v6 = fabs(this[1]); if ( v6 <= (double)v7 ) { v4 = v6; v5 = fabs(this[2]); if ( v5 < v4 ) goto LABEL_3; sub_443140(this, a2, (float *)&dword_ABD498); result = a2; } else { v2 = fabs(this[2]); if ( v2 < (double)v7 ) { LABEL_3: sub_443140(this, a2, (float *)&dword_ABD4A4); return a2; } sub_443140(this, a2, (float *)&dword_ABD48C); result = a2; } return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD498: using guessed type int dword_ABD498; // ABD4A4: using guessed type int dword_ABD4A4; //----- (00694FD0) -------------------------------------------------------- float *__thiscall sub_694FD0(float *this, float *a2) { float *result; // eax float v3; // ST20_4 float v4; // ST1C_4 float v5; // ST18_4 double v6; // st7 float v7; // ST00_4 float v8; // ST20_4 float v9; // ST10_4 float v10; // ST08_4 float v11; // ST14_4 float v12; // ST0C_4 float v13; // ST1C_4 float v14; // ST04_4 float v15; // ST18_4 result = a2; v3 = this[1] * 2.0; v4 = this[2] * 2.0; v5 = 2.0 * this[3]; v6 = v3; v7 = *this * v3; v8 = *this * v4; v9 = *this * v5; v10 = v6 * this[1]; v11 = v4 * this[1]; v12 = v5 * this[1]; v13 = v4 * this[2]; v14 = this[2] * v5; v15 = v5 * this[3]; *a2 = 1.0 - (v15 + v13); a2[3] = v11 + v9; a2[6] = v12 - v8; a2[1] = v11 - v9; a2[4] = 1.0 - (v15 + v10); a2[7] = v14 + v7; a2[2] = v12 + v8; a2[5] = v14 - v7; a2[8] = 1.0 - (v10 + v13); return result; } //----- (006950D0) -------------------------------------------------------- char __thiscall sub_6950D0(char *this, size_t a2) { char *v2; // ebx FILE *v3; // eax FILE *v4; // esi unsigned int v6; // ecx unsigned int v7; // eax int v8; // edi void *v9; // eax char *v10; // [esp+8h] [ebp-Ch] unsigned int v11; // [esp+Ch] [ebp-8h] unsigned int v12; // [esp+10h] [ebp-4h] unsigned int v13; // [esp+1Ch] [ebp+8h] v2 = this; v10 = this; v3 = fopen((const char *)a2, "r"); v4 = v3; if ( !v3 ) return 0; fread(&v12, 4u, 1u, v3); v6 = v12; v7 = 0; *((_DWORD *)v2 + 3841) = v12; v13 = 0; v11 = 0; if ( v6 ) { v8 = (int)(v2 + 40); do { if ( v7 < 0x100 ) { fread((void *)(v8 - 32), 1u, 0x20u, v4); fread((void *)v8, 4u, 1u, v4); fread((void *)(v8 + 4), 4u, 1u, v4); fread((void *)(v8 + 8), 4u, 1u, v4); fread((void *)(v8 + 12), 4u, 1u, v4); fread((void *)(v8 + 16), 4u, 1u, v4); fread((void *)(v8 + 20), 4u, 1u, v4); v2 = v10; v6 = v12; v13 += 2 * *(_DWORD *)(v8 + 16); v7 = v11; } ++v7; v8 += 60; v11 = v7; } while ( v7 < v6 ); } if ( *((_DWORD *)v2 + 3842) ) operator delete[](*((void **)v2 + 3842)); *((_DWORD *)v2 + 3842) = 0; v9 = operator new[](v13); *((_DWORD *)v2 + 3842) = v9; fread(v9, 1u, v13, v4); fclose(v4); return 1; } //----- (00695210) -------------------------------------------------------- int __cdecl sub_695210(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 14); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (00695230) -------------------------------------------------------- bool __thiscall sub_695230(void *this) { int v1; // eax __int16 v2; // ax bool result; // al v1 = (*(int (__stdcall **)(const char *))(*(_DWORD *)this + 72))("Scene Root"); result = 0; if ( v1 ) { v2 = *(_WORD *)(v1 + 28); if ( ((unsigned __int8)v2 >> 1) & 1 ) { if ( !(((unsigned __int8)v2 >> 4) & 1) ) result = 1; } } return result; } //----- (00695260) -------------------------------------------------------- char __thiscall sub_695260(float *this, int a2) { float *v2; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi int v5; // [esp+8h] [ebp-114h] char Src; // [esp+Ch] [ebp-110h] int v7; // [esp+118h] [ebp-4h] v2 = this; v5 = 0; v7 = 0; sub_68F2C0(this, &Src, (int)"nif"); sub_8F66B0(&Src, (int)&v5, 0); if ( !v5 ) return 0; sub_68D9F0(v2 + 113, (_DWORD *)v5); v7 = -1; if ( v5 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } return 1; } //----- (00695330) -------------------------------------------------------- void __cdecl sub_695330(int a1, _DWORD **a2) { _DWORD *v2; // eax void **i; // eax int v4; // ebx int v5; // ecx int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi void **v8; // eax void **v9; // eax void *v10; // ecx void **v11; // esi void **v12; // [esp+28h] [ebp-3Ch] void **v13; // [esp+34h] [ebp-30h] int v14; // [esp+38h] [ebp-2Ch] int v15; // [esp+3Ch] [ebp-28h] void *v16; // [esp+40h] [ebp-24h] int v17; // [esp+44h] [ebp-20h] int v18; // [esp+4Ch] [ebp-18h] int v19; // [esp+50h] [ebp-14h] char *v20; // [esp+54h] [ebp-10h] int v21; // [esp+60h] [ebp-4h] v17 = 0; v2 = operator new(0xCu); if ( !v2 ) { *(float *)&v20 = 0.0; std::exception::exception((std::exception *)&v12, (const char *const *)&v20); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v16 = v2; *v2 = v2; *((_DWORD *)v16 + 1) = v16; v21 = 0; v14 = 0; v15 = -1; v13 = &FindMultiMNode::`vftable'; LOBYTE(v21) = 1; sub_8CFE00(&v13, a1, (int)dword_BA457C, (int)&v16); for ( i = *(void ***)v16; *(void **)v16 != v16; i = *(void ***)v16 ) { v4 = (int)i[2]; v18 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); LOBYTE(v21) = 2; if ( v4 ) { *(_DWORD *)(v4 + 88) = *(_DWORD *)(v4 + 140); *(_DWORD *)(v4 + 92) = *(_DWORD *)(v4 + 144); *(_DWORD *)(v4 + 96) = *(_DWORD *)(v4 + 148); qmemcpy((void *)(v4 + 52), (const void *)(v4 + 104), 0x24u); v20 = *(char **)(v4 + 152); *(float *)&v20 = fabs(*(float *)&v20); *(float *)(v4 + 100) = *(float *)&v20; v5 = *(_DWORD *)(v4 + 32); if ( v5 ) { v6 = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA537C ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_15; } sub_8ACE50(*(_DWORD **)(v4 + 32), &v19, v4); if ( v19 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v19; if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } } } LABEL_15: *(_WORD *)(v4 + 28) &= 0xFFFEu; ((void (__stdcall *)(int, signed int))(*a2)[29])(v4, 1); } v8 = *(void ***)v16; if ( *(void **)v16 != v16 ) { *(_DWORD *)v8[1] = *v8; *((_DWORD *)*v8 + 1) = v8[1]; operator delete(v8); --v17; } LOBYTE(v21) = 1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } sub_85BED0(a2, 0.0, 1); v13 = &Ns_TourScene::`vftable'; v9 = *(void ***)v16; *(_DWORD *)v16 = v16; *((_DWORD *)v16 + 1) = v16; v10 = v16; v17 = 0; if ( v9 != v16 ) { do { v11 = (void **)*v9; operator delete(v9); v10 = v16; v9 = v11; } while ( v11 != v16 ); } operator delete(v10); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F6604: using guessed type void *FindMultiMNode::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00695560) -------------------------------------------------------- void __cdecl sub_695560(int a1, _DWORD **a2) { _DWORD *v2; // eax void **i; // eax int v4; // ebx int v5; // ecx int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi void **v8; // eax void **v9; // eax void *v10; // ecx void **v11; // esi void **v12; // [esp+28h] [ebp-3Ch] void **v13; // [esp+34h] [ebp-30h] int v14; // [esp+38h] [ebp-2Ch] int v15; // [esp+3Ch] [ebp-28h] void *v16; // [esp+40h] [ebp-24h] int v17; // [esp+44h] [ebp-20h] int v18; // [esp+4Ch] [ebp-18h] int v19; // [esp+50h] [ebp-14h] char *v20; // [esp+54h] [ebp-10h] int v21; // [esp+60h] [ebp-4h] v17 = 0; v2 = operator new(0xCu); if ( !v2 ) { *(float *)&v20 = 0.0; std::exception::exception((std::exception *)&v12, (const char *const *)&v20); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v16 = v2; *v2 = v2; *((_DWORD *)v16 + 1) = v16; v21 = 0; v14 = 0; v15 = -1; v13 = &FindMultiCDNode::`vftable'; LOBYTE(v21) = 1; sub_8CFE00(&v13, a1, (int)dword_BA457C, (int)&v16); for ( i = *(void ***)v16; *(void **)v16 != v16; i = *(void ***)v16 ) { v4 = (int)i[2]; v18 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); LOBYTE(v21) = 2; if ( v4 ) { *(_DWORD *)(v4 + 88) = *(_DWORD *)(v4 + 140); *(_DWORD *)(v4 + 92) = *(_DWORD *)(v4 + 144); *(_DWORD *)(v4 + 96) = *(_DWORD *)(v4 + 148); qmemcpy((void *)(v4 + 52), (const void *)(v4 + 104), 0x24u); v20 = *(char **)(v4 + 152); *(float *)&v20 = fabs(*(float *)&v20); *(float *)(v4 + 100) = *(float *)&v20; v5 = *(_DWORD *)(v4 + 32); if ( v5 ) { v6 = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA537C ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_15; } sub_8ACE50(*(_DWORD **)(v4 + 32), &v19, v4); if ( v19 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v19; if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } } } LABEL_15: *(_WORD *)(v4 + 28) &= 0xFFFEu; ((void (__stdcall *)(int, signed int))(*a2)[29])(v4, 1); } v8 = *(void ***)v16; if ( *(void **)v16 != v16 ) { *(_DWORD *)v8[1] = *v8; *((_DWORD *)*v8 + 1) = v8[1]; operator delete(v8); --v17; } LOBYTE(v21) = 1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } sub_85BED0(a2, 0.0, 1); v13 = &Ns_TourScene::`vftable'; v9 = *(void ***)v16; *(_DWORD *)v16 = v16; *((_DWORD *)v16 + 1) = v16; v10 = v16; v17 = 0; if ( v9 != v16 ) { do { v11 = (void **)*v9; operator delete(v9); v10 = v16; v9 = v11; } while ( v11 != v16 ); } operator delete(v10); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // 9F660C: using guessed type void *FindMultiCDNode::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00695790) -------------------------------------------------------- #error "695AA4: call analysis failed (funcsize=1827)" //----- (00697160) -------------------------------------------------------- void __thiscall sub_697160(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // ecx v2 = this; v3 = this[43]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[43] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v4 = (_DWORD *)v2[43]; if ( v4 ) { if ( (_DWORD *)sub_879520(v4) != v2 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v2[43] + 60))(v2); } } //----- (006971E0) -------------------------------------------------------- unsigned int __thiscall sub_6971E0(char *this, unsigned __int8 *a2, unsigned int a3, unsigned int a4) { unsigned int v4; // edx char *v5; // edi unsigned int result; // eax unsigned int v7; // eax unsigned __int8 *i; // esi v4 = a4; v5 = this; result = *((_DWORD *)this + 4); if ( a4 ) { if ( a4 > result ) { LABEL_17: result = -1; } else { v7 = result - a4; if ( a3 < v7 ) v7 = a3; if ( *((_DWORD *)this + 5) >= 0x10u ) this = *(char **)this; for ( i = (unsigned __int8 *)&this[v7]; *i != *a2 || sub_40C0B0(i, a2, v4); --i ) { if ( i == (unsigned __int8 *)sub_401490(v5) ) goto LABEL_17; v4 = a4; } if ( *((_DWORD *)v5 + 5) >= 0x10u ) v5 = *(char **)v5; result = i - (unsigned __int8 *)v5; } } else if ( a3 < result ) { result = a3; } return result; } //----- (00697270) -------------------------------------------------------- _DWORD *__thiscall sub_697270(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 14) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 14) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 14) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 14) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 14); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 14) ) goto LABEL_11; return result; } //----- (006972D0) -------------------------------------------------------- _DWORD *__thiscall sub_6972D0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 14) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (00697330) -------------------------------------------------------- int __thiscall sub_697330(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 14) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (00697390) -------------------------------------------------------- void __stdcall sub_697390(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 14) ) { do { sub_697390(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 14) ); } } //----- (006973D0) -------------------------------------------------------- int __thiscall sub_6973D0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0xFFFFFFFE ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 13) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 13) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 14) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 13) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 13) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 14) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 13) = 1; *(_BYTE *)(v13 + 13) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 13) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 13) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 14) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 13) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 13) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 14) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 13) = 1; *(_BYTE *)(v22 + 13) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 13) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 13) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 13) = 1; return result; } //----- (006975F0) -------------------------------------------------------- char **__stdcall sub_6975F0(char *a1, int a2) { char **result; // eax void **v3; // [esp+0h] [ebp-Ch] result = (char **)operator new(0xCu); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v3, (const char *const *)&a1); v3 = &std::bad_alloc::`vftable'; _CxxThrowException(&v3, &_TI2_AVbad_alloc_std__); } *result = a1; result[1] = (char *)a2; result[2] = 0; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00697640) -------------------------------------------------------- int __thiscall sub_697640(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x15555554 ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 24) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 24) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 25) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 24) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 24) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 25) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 24) = 1; *(_BYTE *)(v13 + 24) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 24) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 24) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 25) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 24) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 24) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 25) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 24) = 1; *(_BYTE *)(v22 + 24) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 24) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 24) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 24) = 1; return result; } //----- (00697870) -------------------------------------------------------- int __thiscall sub_697870(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[14] ) { do { sub_697390((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 14) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (006978C0) -------------------------------------------------------- char *__thiscall sub_6978C0(_DWORD *this, char *a2) { _DWORD *v2; // esi char *result; // eax void **v4; // [esp+4h] [ebp-Ch] v2 = this; result = (char *)operator new(0x10u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } *(_DWORD *)result = v2[1]; *((_DWORD *)result + 1) = v2[1]; *((_DWORD *)result + 2) = v2[1]; *(_WORD *)(result + 13) = 0; if ( result != (char *)-12 ) result[12] = *a2; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00697930) -------------------------------------------------------- int __thiscall sub_697930(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 25) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 25) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_697640(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_8DCA80(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_697640(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (00697A10) -------------------------------------------------------- void __thiscall sub_697A10(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD **v3; // eax v1 = this; v2 = *this; v3 = *(_DWORD ***)(v2 + 4); if ( v3 != (_DWORD **)v2 ) { *v3[1] = *v3; (*v3)[1] = v3[1]; operator delete(v3); --v1[1]; } } //----- (00697A40) -------------------------------------------------------- int __thiscall sub_697A40(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_697640(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_697640(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_697640(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_8DCA80(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_691190(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_697930(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 25) ) sub_697640(v4, a2, 0, a3, v6); else sub_697640(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 25) ) sub_697640(v4, a2, 0, (int)a4, v6); else sub_697640(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (00697BA0) -------------------------------------------------------- _DWORD *__thiscall sub_697BA0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x1Cu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 12) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; result[4] = *((_DWORD *)v4 + 1); result[5] = *((_DWORD *)v4 + 2); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00697C20) -------------------------------------------------------- int __thiscall sub_697C20(_DWORD *this, int a2, char *a3, int a4) { _DWORD *v4; // edi int v5; // ecx int v6; // eax int v7; // esi bool v8; // cl char v9; // dl int v10; // edx char *v11; // eax int result; // eax int v13; // edx char *v14; // eax char v15; // [esp+8h] [ebp-4h] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = 1; v15 = 1; if ( !*(_BYTE *)(v6 + 14) ) { v9 = *a3; do { v7 = v6; if ( (_BYTE)a4 ) v8 = *(_BYTE *)(v6 + 12) >= v9; else v8 = v9 < *(_BYTE *)(v6 + 12); v15 = v8; if ( v8 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 14) ); } v10 = v7; a4 = v7; if ( v8 ) { if ( v7 == *(_DWORD *)v4[1] ) { v11 = sub_6978C0(v4, a3); sub_6973D0(v4, (int)&a4, 1, v7, v11); result = a2; v13 = a4; *(_BYTE *)(a2 + 4) = 1; *(_DWORD *)a2 = v13; return result; } sub_697270(&a4); v10 = a4; } if ( *(_BYTE *)(v10 + 12) >= *a3 ) { result = a2; *(_BYTE *)(a2 + 4) = 0; *(_DWORD *)a2 = v10; } else { v14 = sub_6978C0(v4, a3); sub_6973D0(v4, (int)&a4, v15, v7, v14); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (00697D00) -------------------------------------------------------- signed int __stdcall sub_697D00(int a1, char **a2) { char **v2; // esi char *v3; // edi char **v4; // eax char *v5; // ecx if ( !sub_8CF140(a1, "#CD") ) return 1; v2 = a2; v3 = *a2; v4 = sub_67ADC0(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = v4; *(_DWORD *)v4[1] = v4; return -1; } //----- (00697D70) -------------------------------------------------------- signed int __stdcall sub_697D70(int a1, char **a2) { char **v2; // esi char *v3; // edi char **v4; // eax char *v5; // ecx if ( !sub_8CF140(a1, "#M") ) return 1; v2 = a2; v3 = *a2; v4 = sub_67ADC0(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v5 = v2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v5) < 1 ) std::_Xlength_error("list too long"); v2[1] = v5 + 1; *((_DWORD *)v3 + 1) = v4; *(_DWORD *)v4[1] = v4; return -1; } //----- (00697DE0) -------------------------------------------------------- void __thiscall sub_697DE0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // eax unsigned int v4; // ebx int v5; // edi char **v6; // eax int v7; // ecx _DWORD **v10; // eax int v11; // [esp+0h] [ebp-24h] _DWORD *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] int v15; // [esp+2Ch] [ebp+8h] v13 = &v11; v2 = this; v12 = this; v3 = this[1]; v4 = a2; if ( a2 <= v3 ) { if ( a2 < v3 ) { do { v10 = *(_DWORD ***)(*v2 + 4); if ( v10 != (_DWORD **)*v2 ) { *v10[1] = *v10; (*v10)[1] = v10[1]; operator delete(v10); --v2[1]; } } while ( a2 < v2[1] ); } } else { v15 = 0; v14 = 0; while ( v2[1] < v4 ) { v5 = *v2; v6 = sub_6975F0((char *)*v2, *(_DWORD *)(*v2 + 4)); v7 = v2[1]; if ( (unsigned int)(1073741822 - v7) < 1 ) std::_Xlength_error("list too long"); ++v15; v2[1] = v7 + 1; *(_DWORD *)(v5 + 4) = v6; *(_DWORD *)v6[1] = v6; } } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00697ED0) -------------------------------------------------------- int __thiscall sub_697ED0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ecx int v4; // eax int v5; // esi _DWORD *v6; // eax char v8[4]; // [esp+8h] [ebp-14h] float v9; // [esp+Ch] [ebp-10h] float v10; // [esp+10h] [ebp-Ch] float v11; // [esp+14h] [ebp-8h] float v12; // [esp+18h] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 25) ) { if ( *(_DWORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; *(_DWORD *)v8 = *a2; v11 = 0.0; v12 = 0.0; v9 = 0.0; v10 = 0.0; v6 = sub_697BA0(v2, v8); sub_697A40(v2, (int)&a2, v5, v6); return (int)(a2 + 4); } //----- (00697F60) -------------------------------------------------------- char sub_697F60() { return 1; } //----- (00697F70) -------------------------------------------------------- void __thiscall sub_697F70(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = this[143189]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } v1[143189] = 0; } } //----- (00697FB0) -------------------------------------------------------- void __thiscall sub_697FB0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = this[143189]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } v1[143189] = 0; } } //----- (00697FF0) -------------------------------------------------------- char __thiscall sub_697FF0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax int v3; // esi _DWORD *v4; // edi v1 = this; v2 = sub_8F62B0(0, 0, 0, 255); v3 = v1[143189]; v4 = v2; if ( (_DWORD *)v3 != v2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[143189] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } return 1; } //----- (00698050) -------------------------------------------------------- int __thiscall sub_698050(_DWORD *this) { return this[143189]; } //----- (00698060) -------------------------------------------------------- char __thiscall sub_698060(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // eax int v4; // esi _DWORD *v5; // ebx _DWORD *v6; // eax int v7; // esi _DWORD *v8; // ebx char v10; // [esp+Ch] [ebp-118h] int v11; // [esp+110h] [ebp-14h] int v12; // [esp+114h] [ebp-10h] int v13; // [esp+118h] [ebp-Ch] char v14; // [esp+11Ch] [ebp-8h] v1 = this; v2 = sub_4316B0(this + 143149); v11 = *(_DWORD *)(v2 + 59); v12 = *(_DWORD *)(v2 + 63); v13 = *(_DWORD *)(v2 + 67); v14 = 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v10, "%sminimap\\%s.dds", byte_ACAB50, &v11); v3 = sub_486130((int)&v10); v4 = v1[143189]; v5 = v3; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[143189] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } if ( v1[143189] ) return 1; v6 = sub_8F62B0(0, 0, 0, 255); v7 = v1[143189]; v8 = v6; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[143189] = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } return 0; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006981A0) -------------------------------------------------------- char __thiscall sub_6981A0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax int v7; // eax _DWORD *v8; // eax int v9; // esi _DWORD *v10; // edi _DWORD *v11; // eax int v12; // esi _DWORD *v13; // edi char v14; // [esp+4h] [ebp-118h] int v15; // [esp+108h] [ebp-14h] int v16; // [esp+10Ch] [ebp-10h] int v17; // [esp+110h] [ebp-Ch] char v18; // [esp+114h] [ebp-8h] v4 = this; v5 = sub_439D70(this, &v15); if ( a2 == *v5 && a3 == v5[1] && a4 == v5[2] ) return 0; v7 = sub_49F8D0(&a2); v15 = *(_DWORD *)(v7 + 118); v16 = *(_DWORD *)(v7 + 122); v17 = *(_DWORD *)(v7 + 126); v18 = 0; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v14, "%sminimap\\%s.dds", byte_ACAB50, &v15); v8 = sub_486130((int)&v14); v9 = v4[143189]; v10 = v8; if ( (_DWORD *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v4[143189] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } if ( v4[143189] ) return 1; v11 = sub_8F62B0(0, 0, 0, 255); v12 = v4[143189]; v13 = v11; if ( (_DWORD *)v12 != v11 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v4[143189] = v13; if ( v13 ) InterlockedIncrement(v13 + 1); } return 0; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00698310) -------------------------------------------------------- void __thiscall sub_698310(_DWORD *this, float a2) { sub_6A9C00(this + 144352, a2); } //----- (00698350) -------------------------------------------------------- int __thiscall sub_698350(_DWORD **this, _DWORD *a2) { return sub_68DEC0(this[143152], a2); } //----- (00698360) -------------------------------------------------------- char __thiscall sub_698360(_BYTE **this, char a2) { return sub_68DEE0(this[143152], a2); } //----- (00698370) -------------------------------------------------------- int __thiscall sub_698370(void **this, float a2) { return sub_68E2B0(this[143152], a2); } //----- (00698390) -------------------------------------------------------- _DWORD *__thiscall sub_698390(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; v2 = this[143148]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[143148] = 0; } v3 = v1[143154]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[143154] = 0; } v4 = v1[143155]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[143155] = 0; } sub_8D64E0(v1 + 143156); v5 = v1[143207]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[143207] = 0; } v6 = v1[143152]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[143152] = 0; } v1[144353] = 0; v1[144354] = 0; return sub_6A9790((int)(v1 + 144352)); } //----- (00698490) -------------------------------------------------------- void __thiscall sub_698490(_DWORD *this, float a2) { _DWORD *v2; // esi v2 = this; if ( this[143148] ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 256))() ) *(_WORD *)(v2[143148] + 28) |= 1u; sub_85BED0((_DWORD **)v2[143148], a2, 1); } } //----- (006984E0) -------------------------------------------------------- void __thiscall sub_6984E0(_DWORD *this) { unsigned __int16 *v1; // esi char v2; // [esp+4h] [ebp-104h] v1 = (unsigned __int16 *)sub_49F8D0(this + 143149); if ( v1 && *((_BYTE *)v1 + 14) != 45 ) { sprintf(&v2, "%s", v1 + 7); sub_6BA1B0(&dword_AB6520, *v1); } else { unknown_libname_12(&dword_AB6520); } } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); //----- (00698560) -------------------------------------------------------- void __fastcall sub_698560(float a1, int a2, float a3) { float v3; // edi int v4; // ecx int v5; // esi int v6; // ebx _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // ecx int v10; // edi void *v11; // eax float *v12; // eax _DWORD *v13; // ecx double v14; // st7 float v15; // ebx int v16; // ebx int v17; // ebx double v18; // st7 double v19; // st7 const char *v20; // eax const char *v21; // eax float v22; // eax float v23; // ecx int v24; // edi int *v25; // eax double v26; // st7 int v27; // eax int v28; // eax void *v29; // eax float v30; // ecx int v31; // [esp-8h] [ebp-5Ch] int v32; // [esp-4h] [ebp-58h] float v33; // [esp+0h] [ebp-54h] float v34; // [esp+4h] [ebp-50h] float v35; // [esp+8h] [ebp-4Ch] int v36; // [esp+1Ch] [ebp-38h] int v37; // [esp+20h] [ebp-34h] int v38; // [esp+24h] [ebp-30h] float v39; // [esp+28h] [ebp-2Ch] float v40; // [esp+2Ch] [ebp-28h] float v41; // [esp+30h] [ebp-24h] float v42; // [esp+34h] [ebp-20h] float v43; // [esp+38h] [ebp-1Ch] float v44; // [esp+3Ch] [ebp-18h] void *v45; // [esp+40h] [ebp-14h] float v46; // [esp+44h] [ebp-10h] int v47; // [esp+50h] [ebp-4h] v3 = a1; v46 = a1; v4 = *(_DWORD *)(LODWORD(a1) + 572620); if ( v4 ) { v5 = *((_DWORD *)dword_AD8EBC + 1026); if ( v5 && !*(_BYTE *)(v5 + 2510) ) { v6 = sub_85C050((_DWORD *)v4, 9); if ( !v6 ) { v7 = operator new(0x28u); v45 = v7; v47 = 0; if ( v7 ) v8 = sub_40D9C0(v7); else v8 = 0; v9 = *(_DWORD **)(LODWORD(v3) + 572620); v47 = -1; v6 = (int)v8; sub_403700(v9, (int)v8); } v10 = sub_85C050(*(_DWORD **)(LODWORD(v3) + 572620), 3); if ( !v10 ) { v11 = operator new(0x60u); v45 = v11; v47 = 1; if ( v11 ) v12 = sub_85EBC0((float *)v11); else v12 = 0; v13 = *(_DWORD **)(LODWORD(v46) + 572620); v47 = -1; v10 = (int)v12; sub_403700(v13, (int)v12); } v42 = 255.0; v43 = 255.0; *(_DWORD *)(v6 + 32) = 0; v44 = 255.0; *(_DWORD *)(v6 + 36) = 0; if ( sub_651680(v5) ) goto LABEL_15; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 32))(v5) ) { v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 164))(v5); v17 = v16 - sub_680890((unsigned __int8 *)byte_AD9238); if ( v17 >= 6 ) { v39 = 190.0; v40 = 37.0; v18 = 29.0; LABEL_25: v41 = v18; v15 = v39; v43 = v40; v44 = v41; goto LABEL_31; } if ( v17 < 3 ) { if ( v17 >= -2 ) { LABEL_15: v39 = 255.0; v40 = 243.0; v14 = 50.0; LABEL_16: v41 = v14; v15 = v39; v43 = v40; v44 = v41; goto LABEL_31; } if ( v17 >= -5 ) { v39 = 90.0; v40 = 231.0; v18 = 86.0; goto LABEL_25; } v19 = 192.0; v39 = 192.0; v40 = 192.0; } else { v39 = 255.0; v40 = 160.0; v19 = 37.0; } v41 = v19; v15 = v39; v43 = v40; v44 = v41; } else { if ( (char *)v5 == dword_AD8EBC ) { v39 = 225.0; v40 = 198.0; v14 = 31.0; goto LABEL_16; } v15 = v42; } LABEL_31: v20 = (const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5); v45 = &v31; v35 = 0.0; v34 = 0.0; v33 = 0.0; v32 = 0; v31 = 0; strncpy((char *)&v31, v20, 0x14u); if ( sub_6C11C0(&dword_B9DC70, v31, v32, SLODWORD(v33), SLODWORD(v34), SLODWORD(v35)) ) { v39 = 146.0; v15 = 146.0; v40 = 164.0; v43 = 164.0; v41 = 245.0; v44 = 245.0; } v21 = (const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5); v45 = &v31; v35 = 0.0; v34 = 0.0; v33 = 0.0; v32 = 0; v31 = 0; strncpy((char *)&v31, v21, 0x14u); if ( sub_718D10(&dword_B9E560, v31, v32, SLODWORD(v33), SLODWORD(v34), SLODWORD(v35)) ) { v39 = 146.0; v15 = 146.0; v40 = 164.0; v22 = 164.0; v41 = 245.0; v23 = 245.0; } else { v23 = v44; v22 = v43; } ++*(_DWORD *)(v10 + 88); *(float *)(v10 + 68) = v15; *(float *)(v10 + 72) = v22; *(float *)(v10 + 76) = v23; v24 = LODWORD(v46); sub_85C4D0(*(_DWORD **)(LODWORD(v46) + 572620)); *(_WORD *)(*(_DWORD *)(v24 + 572620) + 28) &= 0xFFFEu; v25 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 204))(v5); v36 = *v25; v37 = v25[1]; v38 = v25[2]; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 32))(v5) || sub_651680(v5) ) { v27 = *(unsigned __int16 *)(v5 + 942); LODWORD(v35) = 1; v28 = sub_4B0D70(v27); if ( !v28 ) goto LABEL_43; v29 = *(void **)(v28 + 166); if ( !v29 ) goto LABEL_43; v45 = v29; v46 = (double)(unsigned int)v29; v26 = v46; } else { v26 = 50.0; } v35 = v26; v34 = v26; sub_4558F0(v24 + 572624, v34, v35); LABEL_43: sub_8D7B80((_DWORD *)(v24 + 572624), 0.0, *(_DWORD *)(v24 + 572620), (int)&v36); LODWORD(v35) = 1; v34 = v30; sub_85BED0(*(_DWORD ***)(v24 + 572620), a3, 1); return; } *(_WORD *)(v4 + 28) |= 1u; } } // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; //----- (00698960) -------------------------------------------------------- char __thiscall sub_698960(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax _DWORD *v3; // eax int v4; // edi _DWORD *v5; // ebx int v6; // eax char *v7; // eax volatile LONG *v8; // edi int v9; // ebx _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // ebx void *v14; // eax int v15; // eax int v16; // edi int v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax _DWORD *v20; // eax _DWORD *v21; // eax _DWORD *v22; // ebx int v23; // ST08_4 char *v24; // eax int *v25; // ebx int v26; // edi int v27; // eax _DWORD *v28; // [esp+10h] [ebp-1Ch] void *v29; // [esp+10h] [ebp-1Ch] int v30; // [esp+14h] [ebp-18h] volatile LONG *v31; // [esp+18h] [ebp-14h] volatile LONG *v32; // [esp+1Ch] [ebp-10h] int v33; // [esp+28h] [ebp-4h] v1 = this; v31 = 0; v33 = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA520, "Misc\\MoveTargetPoint.nif"); v3 = sub_8F63D0(v2, 0); v4 = v1[143148]; v5 = v3; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[143148] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v6 = v1[143148]; if ( !v6 ) return 0; (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v1[133] + 116))(v6, 0); if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACA520, "Misc\\CharSelectMark.nif"); v8 = sub_8F63D0(v7, 0); v32 = v8; if ( !v8 ) return 0; v31 = v8; InterlockedIncrement(v8 + 1); v9 = (*(int (__thiscall **)(volatile LONG *, const char *))(*v8 + 72))(v8, "Plane01"); if ( !v9 ) { v33 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); return 0; } v11 = operator new(0xE8u); LOBYTE(v33) = 1; if ( v11 ) v12 = sub_85A1C0(v11, 0); else v12 = 0; LOBYTE(v33) = 0; sub_56FF80(v1 + 143155, (int)v12); v13 = *(_DWORD **)(v9 + 160); while ( v13 ) { v14 = (void *)v13[2]; v13 = (_DWORD *)*v13; v28 = (_DWORD *)v1[143155]; v15 = sub_85BD60(v14); v16 = v15; v30 = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); LOBYTE(v33) = 2; sub_8A6330(v28 + 39, &v30); LOBYTE(v33) = 0; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[133] + 116))(v1[143155], 0); sub_8D7630(v1 + 143156); v17 = v1[146]; v1[143156] = v1[156]; sub_40C270(v1 + 143156, v17); v18 = operator new(0x20u); LOBYTE(v33) = 3; if ( v18 ) v19 = sub_698F20(v18, 0); else v19 = 0; LOBYTE(v33) = 0; sub_56FF80(v1 + 143207, (int)v19); v20 = operator new(0x84u); LOBYTE(v33) = 4; if ( v20 ) v21 = sub_68DF10(v20); else v21 = 0; LOBYTE(v33) = 0; sub_56FF80(v1 + 143152, (int)v21); v29 = (void *)v1[146]; if ( !byte_ACAD5C ) sub_420410(); v22 = (_DWORD *)v1[143152]; v23 = v1[156]; v24 = (char *)sub_401410(byte_ACA520, "Misc\\SkillAreaMark.nif"); sub_68E0E0(v22, v24, v23, (int)v29); v25 = (int *)v1[133]; v26 = *v25; v27 = sub_68E060((_DWORD *)v1[143152]); (*(void (__thiscall **)(int *, int, _DWORD))(v26 + 116))(v25, v27, 0); sub_6A9480(v1 + 144352, v1[156], v1[146]); v33 = -1; if ( !InterlockedDecrement(v32 + 1) ) (**(void (__stdcall ***)(signed int))v32)(1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00698CA0) -------------------------------------------------------- _DWORD *__thiscall sub_698CA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *result; // eax _DWORD *v3; // ebx int v4; // esi v1 = this; sub_4A0060(this + 143195); sub_4A0060(v1 + 143199); sub_4A0060(v1 + 143203); result = operator new(0x20u); v3 = 0; if ( result ) { result = sub_698F20(result, 0); v3 = result; } v4 = v1[143207]; if ( (_DWORD *)v4 != v3 ) { if ( v4 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v1[143207] = v3; if ( v3 ) result = (_DWORD *)InterlockedIncrement(v3 + 1); } return result; } //----- (00698D80) -------------------------------------------------------- void __thiscall sub_698D80(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // 9F66AC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F66CC: using guessed type void *NiTPointerMap>::`vftable'; // 9F66EC: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (00698E30) -------------------------------------------------------- void **__thiscall sub_698E30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F66AC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (00698E70) -------------------------------------------------------- void **__thiscall sub_698E70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F66AC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F66CC: using guessed type void *NiTPointerMap>::`vftable'; //----- (00698EF0) -------------------------------------------------------- void *__thiscall sub_698EF0(void *this, char a2) { void *v2; // esi v2 = this; sub_698D80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00698F20) -------------------------------------------------------- _DWORD *__thiscall sub_698F20(_DWORD *this, char a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST08_4 v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiDefaultTexturePalette::`vftable'; v2[3] = 37; v2[2] = &NiTMapBase,char const *,NiPointer>::`vftable'; v2[5] = 0; v3 = operator new[](0x94u); v4 = 4 * v2[3]; v2[4] = v3; memset(v3, 0, v4); *((_BYTE *)v2 + 24) = 1; v2[2] = &NiTStringPointerMap>::`vftable'; *((_BYTE *)v2 + 28) = a2; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F66AC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F670C: using guessed type void *NiTStringPointerMap>::`vftable'; // 9F675C: using guessed type void *NiDefaultTexturePalette::`vftable'; //----- (00698FE0) -------------------------------------------------------- char __thiscall sub_698FE0(_BYTE *this, char a2) { char result; // al result = a2; this[28] = a2; return result; } //----- (00698FF0) -------------------------------------------------------- char __thiscall sub_698FF0(_BYTE *this) { return this[28]; } //----- (00699000) -------------------------------------------------------- LONG __thiscall sub_699000(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v5; // [esp-4h] [ebp-Ch] int *v6; // [esp+4h] [ebp-4h] v3 = this; v6 = &v5; v5 = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); return sub_6688B0(v3 + 2, a2, v5); } //----- (00699040) -------------------------------------------------------- _DWORD *__thiscall sub_699040(_DWORD *this, const char *a2, _DWORD *a3) { _DWORD *v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // esi DWORD v6; // eax _DWORD *v7; // esi int v8; // eax const char *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi void (__thiscall ***v11)(_DWORD, signed int); // edi int v12; // [esp+10h] [ebp-10h] int v13; // [esp+1Ch] [ebp-4h] v3 = this; v12 = 0; v13 = 0; if ( sub_455570(this + 2, (int)a2, &v12) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v12; v13 = -1; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**v4)(v4, 1); } return v4; } if ( !*((_BYTE *)v3 + 28) ) goto LABEL_20; EnterCriticalSection(&stru_BA488C); v6 = GetCurrentThreadId(); v7 = (_DWORD *)dword_BA4878; ++dword_BA48A8; dword_BA48A4 = v6; if ( !dword_BA4878 ) { LABEL_17: if ( !--dword_BA48A8 ) dword_BA48A4 = 0; LeaveCriticalSection(&stru_BA488C); LABEL_20: v10 = (void (__thiscall ***)(_DWORD, signed int))v12; v13 = -1; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**v10)(v10, 1); return 0; } while ( 1 ) { if ( v7 != a3 ) { if ( v7 ) { v8 = (*(int (__thiscall **)(_DWORD *))(*v7 + 4))(v7); if ( v8 ) { while ( (char *)v8 != dword_BA4778 ) { v8 = *(_DWORD *)(v8 + 4); if ( !v8 ) goto LABEL_16; } v9 = (const char *)v7[13]; if ( v9 ) { if ( !sub_96C4B0(v9, a2) ) break; } } } } LABEL_16: v7 = (_DWORD *)v7[12]; if ( !v7 ) goto LABEL_17; } if ( !--dword_BA48A8 ) dword_BA48A4 = 0; LeaveCriticalSection(&stru_BA488C); v11 = (void (__thiscall ***)(_DWORD, signed int))v12; v13 = -1; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**v11)(v11, 1); return v7; } // BA4878: using guessed type int dword_BA4878; // BA48A4: using guessed type int dword_BA48A4; // BA48A8: using guessed type int dword_BA48A8; //----- (006991E0) -------------------------------------------------------- _DWORD *__thiscall sub_6991E0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiDefaultTexturePalette::`vftable'; sub_698D80((_BYTE *)this + 8); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F675C: using guessed type void *NiDefaultTexturePalette::`vftable'; //----- (00699260) -------------------------------------------------------- int __thiscall sub_699260(_DWORD *this) { int v1; // ecx int result; // eax v1 = this[143190]; if ( v1 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v1 + 36))(1); return result; } //----- (00699300) -------------------------------------------------------- char __thiscall sub_699300(_DWORD *this, float a2, float a3, float a4, float a5, int a6, int a7, int a8, int a9) { _DWORD *v9; // esi int v10; // eax signed int v11; // ecx int v12; // eax signed int v13; // ecx int v14; // eax signed int v15; // ecx int v16; // eax int v17; // eax unsigned int *v18; // ecx double v19; // st6 v9 = this; if ( (signed int)(a2 * 100.0) ) v10 = (signed int)(a2 * 100.0) / 625; else v10 = 0; this[138885] = v10; v11 = (signed int)(a3 * 100.0); if ( v11 ) v12 = v11 / 625; else v12 = 0; v9[138886] = v12; v13 = (signed int)(a4 * 100.0); if ( v13 ) v14 = v13 / 625; else v14 = 0; v9[138887] = v14; v15 = (signed int)(100.0 * a5); if ( v15 ) v16 = v15 / 625; else v16 = 0; v9[138888] = v16; sub_752BF0(v9 + 135880); *(_DWORD *)a8 = v9[138891]; v17 = 0; if ( v9[138891] > 0 ) { v18 = v9 + 138893; do { if ( v17 >= a6 ) break; *(float *)(a7 + 8 * v17) = (double)*(v18 - 1) * 6.25; v19 = (double)*v18 * 6.25; ++v17; v18 += 2; *(float *)(a7 + 8 * v17 - 4) = v19; } while ( v17 < v9[138891] ); } if ( *(_DWORD *)a8 == 1 && v9[138885] == v9[2 * v17 + 138892] && v9[138886] == v9[2 * v17 + 138893] ) return 0; *(_BYTE *)a9 = v9[138889] != 0; return 1; } //----- (00699470) -------------------------------------------------------- bool __thiscall sub_699470(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi double v4; // st6 unsigned int v5; // ebx unsigned int v6; // edi bool result; // al unsigned int v8; // [esp+4h] [ebp-4h] unsigned int v9; // [esp+10h] [ebp+8h] unsigned int v10; // [esp+14h] [ebp+Ch] v3 = this + 135880; v4 = a2 / 6.25; v5 = (signed __int64)v4; v6 = (signed __int64)(a3 / 6.25); result = 0; if ( sub_752420(this + 135880, v5, v6) ) { v10 = v5 + 1; v8 = v6 + 1; if ( sub_752420(v3, v5 + 1, v6 + 1) && sub_752420(v3, v10, v6) && sub_752420(v3, (signed __int64)v4, v8) ) { v9 = v6 - 1; if ( sub_752420(v3, v5 - 1, v6 - 1) && sub_752420(v3, v5 - 1, v6) && sub_752420(v3, (signed __int64)v4, v9) && sub_752420(v3, v10, v9) && sub_752420(v3, v5 - 1, v8) ) { result = 1; } } } return result; } //----- (00699590) -------------------------------------------------------- bool __thiscall sub_699590(_DWORD *this, float a2, float a3) { return sub_752470(this + 135880, a2, a3) != 0; } //----- (006995F0) -------------------------------------------------------- char __thiscall sub_6995F0(_DWORD *this, char *a2, float a3, float a4) { _DWORD *v4; // eax char result; // al v4 = sub_753870(this + 142800, a2); if ( v4 ) result = (*(int (__thiscall **)(_DWORD *, _DWORD, _DWORD))*v4)(v4, LODWORD(a3), LODWORD(a4)); else result = 0; return result; } //----- (00699630) -------------------------------------------------------- bool __thiscall sub_699630(_DWORD *this, char *a2) { return sub_753870(this + 142800, a2) != 0; } //----- (00699650) -------------------------------------------------------- char __thiscall sub_699650(_DWORD *this) { _DWORD *v1; // edi float *v2; // eax float *v3; // esi char result; // al v1 = this; v2 = (float *)operator new(0x30u); v3 = v2; if ( v2 ) { sub_8E3AD0(v2); *(_DWORD *)v3 = &NsMakeBlockInfo_Byte::`vftable'; v3[9] = 0.0; v1[143190] = v3; result = 1; } else { result = 1; v1[143190] = 0; } return result; } // 9F677C: using guessed type void *NsMakeBlockInfo_Byte::`vftable'; //----- (006996E0) -------------------------------------------------------- char __thiscall sub_6996E0(_DWORD *this) { int v1; // eax v1 = this[143190]; if ( !v1 ) return 0; this[135879] = v1; sub_8E2A50(this + 157, 0x100u, 0x100u); return 1; } //----- (00699710) -------------------------------------------------------- void __thiscall sub_699710(_DWORD *this, char *a2, char a3) { sub_699A20(this + 138956, a2, a3); } //----- (00699720) -------------------------------------------------------- void *__thiscall sub_699720(int this, int a2, int a3, float a4) { int v4; // esi void *v5; // eax unsigned int v6; // ST00_4 void *result; // eax v4 = this; *(float *)(this + 4) = a4; *(_DWORD *)(this + 8) = a2; *(_DWORD *)(this + 20) = a3 * a2; *(_BYTE *)(this + 32) = 1; *(_DWORD *)(this + 12) = a3; *(_DWORD *)(this + 16) = a3 * a2 * a3 * a2; v5 = *(void **)(this + 28); *(float *)(this + 24) = a4 / (double)(unsigned int)a3; if ( v5 ) operator delete[](v5); v6 = (*(_DWORD *)(v4 + 12) + 1) * (*(_DWORD *)(v4 + 12) + 1); *(_DWORD *)(v4 + 28) = 0; result = operator new[](v6); *(_DWORD *)(v4 + 28) = result; return result; } //----- (00699790) -------------------------------------------------------- void __thiscall sub_699790(int this) { int v1; // esi void *v2; // eax v1 = this; v2 = *(void **)(this + 28); *(float *)(this + 4) = 0.0; *(float *)(this + 24) = 0.0; *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 0; *(_BYTE *)(this + 32) = 0; if ( v2 ) operator delete[](v2); *(_DWORD *)(v1 + 28) = 0; } //----- (006997D0) -------------------------------------------------------- void __thiscall sub_6997D0(int this) { _DWORD *v1; // esi void *v2; // eax void *v3; // eax v1 = (_DWORD *)this; v2 = *(void **)(this + 28); *(float *)(this + 4) = 0.0; *(float *)(this + 24) = 0.0; *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 0; *(_BYTE *)(this + 32) = 0; if ( v2 ) operator delete[](v2); v3 = (void *)v1[9]; v1[7] = 0; v1[10] = 0; v1[11] = 0; if ( v3 ) operator delete[](v3); v1[9] = 0; } //----- (00699820) -------------------------------------------------------- void *__thiscall sub_699820(_DWORD *this, int a2, int a3, float a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int v7; // edx void *v8; // eax unsigned int v9; // ST0C_4 void *v10; // eax size_t v11; // ST08_4 v4 = this; sub_699720((int)this, a2, a3, a4); v5 = v4[5]; v6 = v4[5] >> 3; v4[11] = v6; if ( v5 & 7 ) v4[11] = v6 + 1; v7 = v5 * v4[11]; v8 = (void *)v4[9]; v4[10] = v7; if ( v8 ) operator delete[](v8); v9 = v4[10]; v4[9] = 0; v10 = operator new[](v9); v11 = v4[10]; v4[9] = v10; return memset(v10, 0, v11); } //----- (00699890) -------------------------------------------------------- char __thiscall sub_699890(_DWORD *this, unsigned int a2, int a3, char a4) { _BYTE *v4; // eax char v5; // dl v4 = (_BYTE *)((a2 >> 3) + this[9] + a3 * this[11]); v5 = 1 << (a2 - 8 * (a2 >> 3)); if ( a4 ) *v4 |= v5; else *v4 &= ~v5; return 1; } //----- (006998E0) -------------------------------------------------------- char __thiscall sub_6998E0(_DWORD *this, int a2, int a3, int a4, int a5, char a6) { unsigned int v6; // edx _BYTE *v7; // eax char v8; // dl v6 = a3 + a2 * this[3]; v7 = (_BYTE *)((v6 >> 3) + this[9] + this[11] * (a5 + a4 * this[3])); v8 = 1 << (v6 - 8 * (v6 >> 3)); if ( a6 ) *v7 |= v8; else *v7 &= ~v8; return 1; } //----- (00699940) -------------------------------------------------------- char __thiscall sub_699940(_DWORD *this, unsigned int a2, char a3) { _BYTE *v3; // eax char v4; // dl v3 = (_BYTE *)((a2 >> 3) + this[9]); v4 = 1 << (a2 - 8 * (a2 >> 3)); if ( a3 ) *v3 |= v4; else *v3 &= ~v4; return 1; } //----- (00699980) -------------------------------------------------------- bool __thiscall sub_699980(_DWORD *this, unsigned int a2, unsigned int a3) { int v3; // edx bool result; // al unsigned int v5; // eax v3 = this[9]; if ( !v3 ) return 0; v5 = this[5]; if ( a2 >= v5 || a3 >= v5 ) result = 0; else result = ((unsigned __int8)(1 << (a2 - 8 * (a2 >> 3))) & *(_BYTE *)(v3 + a3 * this[11] + (a2 >> 3))) != 0; return result; } //----- (006999E0) -------------------------------------------------------- _DWORD *__thiscall sub_6999E0(void *this, char a2) { _DWORD *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 9); *(_DWORD *)this = &NsMakeBlockInfo_Byte::`vftable'; if ( v3 ) operator delete[](v3); v2[9] = 0; sub_8E3B00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F677C: using guessed type void *NsMakeBlockInfo_Byte::`vftable'; //----- (00699A20) -------------------------------------------------------- void __thiscall sub_699A20(_DWORD *this, char *a2, char a3) { _DWORD *v3; // edi unsigned int v4; // esi int v5; // ebx int v6; // ecx int v7; // eax unsigned int v8; // edi int v9; // esi int v10; // edi signed int v11; // eax unsigned int v12; // edx _BYTE *v13; // eax unsigned int v14; // edx _BYTE *v15; // eax char *v16; // eax unsigned int v17; // edx _BYTE *v18; // eax unsigned int v19; // edx _BYTE *v20; // eax char *v21; // eax unsigned int v22; // edx _BYTE *v23; // eax unsigned int v24; // edx _BYTE *v25; // eax char *v26; // eax unsigned int v27; // edx _BYTE *v28; // eax unsigned int v29; // edx _BYTE *v30; // eax bool v31; // zf int v32; // [esp+8h] [ebp-1Ch] int v33; // [esp+Ch] [ebp-18h] signed int v34; // [esp+10h] [ebp-14h] int v35; // [esp+14h] [ebp-10h] unsigned int v36; // [esp+18h] [ebp-Ch] _DWORD *v37; // [esp+20h] [ebp-4h] char *v38; // [esp+2Ch] [ebp+8h] char *v39; // [esp+2Ch] [ebp+8h] char *v40; // [esp+2Ch] [ebp+8h] char *v41; // [esp+2Ch] [ebp+8h] v3 = this; v4 = 0; v37 = this; if ( this[3841] ) { v5 = (int)(this + 1); while ( a2 && _stricmp((const char *)(v5 + 4), a2) ) { ++v4; v5 += 60; if ( v4 >= v3[3841] ) return; } v6 = *(_DWORD *)(v5 + 44) - *(_DWORD *)(v5 + 36) + 1; v32 = *(_DWORD *)(v5 + 44) - *(_DWORD *)(v5 + 36) + 1; if ( (*(_DWORD *)(v5 + 48) - *(_DWORD *)(v5 + 40) + 1) % 8 ) { MessageBoxA(0, "Error Door Block Data", "Error", 0); return; } v7 = *(_DWORD *)(v5 + 56); v8 = v6 / 8; v9 = 0; v33 = v6 / 8; if ( !a3 ) v7 += *(_DWORD *)(v5 + 52); v36 = 0; v35 = v37[3842] + v7; if ( *(_DWORD *)(v5 + 52) > 0u ) { LABEL_14: v34 = 2; v10 = *(_DWORD *)(v5 + 40) + v36 / v8; v11 = 1; v38 = (char *)1; v9 %= v6; while ( 1 ) { if ( (unsigned __int8)v11 & *(_BYTE *)(v36 + v35) ) { v12 = (unsigned int)(v9 + *(_DWORD *)(v5 + 36)) >> 3; v13 = (_BYTE *)(v12 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v13 |= 1 << (v9 + *(_BYTE *)(v5 + 36) - 8 * v12); } else { if ( a3 ) goto LABEL_20; v14 = (unsigned int)(v9 + *(_DWORD *)(v5 + 36)) >> 3; v15 = (_BYTE *)(v14 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v15 &= ~(1 << (v9 + *(_BYTE *)(v5 + 36) - 8 * v14)); } v11 = (signed int)v38; LABEL_20: v16 = (char *)__ROL4__(v11, 1); v39 = v16; if ( (unsigned __int8)v16 & *(_BYTE *)(v36 + v35) ) { v17 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 1) >> 3; v18 = (_BYTE *)(v17 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v18 |= 1 << (*(_BYTE *)(v5 + 36) + v9 + 1 - 8 * v17); } else { if ( a3 ) goto LABEL_25; v19 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 1) >> 3; v20 = (_BYTE *)(v19 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v20 &= ~(1 << (*(_BYTE *)(v5 + 36) + v9 + 1 - 8 * v19)); } v16 = v39; LABEL_25: v21 = (char *)__ROL4__(v16, 1); v40 = v21; if ( (unsigned __int8)v21 & *(_BYTE *)(v36 + v35) ) { v22 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 2) >> 3; v23 = (_BYTE *)(v22 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v23 |= 1 << (*(_BYTE *)(v5 + 36) + v9 + 2 - 8 * v22); } else { if ( a3 ) goto LABEL_30; v24 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 2) >> 3; v25 = (_BYTE *)(v24 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v25 &= ~(1 << (*(_BYTE *)(v5 + 36) + v9 + 2 - 8 * v24)); } v21 = v40; LABEL_30: v26 = (char *)__ROL4__(v21, 1); v41 = v26; if ( (unsigned __int8)v26 & *(_BYTE *)(v36 + v35) ) { v27 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 3) >> 3; v28 = (_BYTE *)(v27 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v28 |= 1 << (*(_BYTE *)(v5 + 36) + v9 + 3 - 8 * v27); LABEL_34: v26 = v41; goto LABEL_35; } if ( !a3 ) { v29 = (unsigned int)(*(_DWORD *)(v5 + 36) + v9 + 3) >> 3; v30 = (_BYTE *)(v29 + *(_DWORD *)(v37[3843] + 16) + v10 * *(_DWORD *)(v37[3843] + 12)); *v30 &= ~(1 << (*(_BYTE *)(v5 + 36) + v9 + 3 - 8 * v29)); goto LABEL_34; } LABEL_35: v11 = __ROL4__(v26, 1); v9 += 4; v31 = v34-- == 1; v38 = (char *)v11; if ( v31 ) { if ( ++v36 < *(_DWORD *)(v5 + 52) ) { v8 = v33; v6 = v32; goto LABEL_14; } return; } } } } } //----- (00699D50) -------------------------------------------------------- char __thiscall sub_699D50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; v2 = operator new(0x3Cu); if ( v2 ) v3 = sub_4445D0(v2); else v3 = 0; v1[143147] = v3; return 1; } //----- (00699DC0) -------------------------------------------------------- _DWORD *__thiscall sub_699DC0(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi _DWORD *v3; // eax _DWORD *result; // eax v1 = this; v2 = (void *)this[143147]; if ( v2 ) { sub_4445C0(this[143147]); operator delete(v2); } v1[143147] = 0; v3 = operator new(0x3Cu); if ( v3 ) result = sub_4445D0(v3); else result = 0; v1[143147] = result; return result; } // 4445C0: using guessed type int __thiscall sub_4445C0(_DWORD); //----- (00699EC0) -------------------------------------------------------- int __usercall sub_699EC0@(int a1@) { int v1; // esi const char *v2; // eax v1 = *(_DWORD *)(a1 + 32); if ( !v1 ) return 0; while ( 1 ) { v2 = *(const char **)(v1 + 8); if ( v2 ) { if ( !strcmp(v2, off_AB3B78) ) break; } v1 = *(_DWORD *)(v1 + 32); if ( !v1 ) return 0; } return sub_664A70(dword_AD8C90, v1); } //----- (00699F30) -------------------------------------------------------- int __usercall sub_699F30@(int a1@) { int v1; // esi const char *v2; // eax v1 = *(_DWORD *)(a1 + 32); if ( !v1 ) return 0; while ( 1 ) { v2 = *(const char **)(v1 + 8); if ( v2 ) { if ( !strcmp(v2, off_AB4378) ) break; } v1 = *(_DWORD *)(v1 + 32); if ( !v1 ) return 0; } return sub_682C80(&unk_ADA1E0, v1); } //----- (00699FA0) -------------------------------------------------------- signed __int16 __usercall sub_699FA0@(int a1@) { int v1; // esi const char *v2; // eax v1 = *(_DWORD *)(a1 + 32); if ( !v1 ) return 0; while ( 1 ) { v2 = *(const char **)(v1 + 8); if ( v2 ) { if ( !strcmp(v2, (const char *)dword_B9E1DC) ) break; } v1 = *(_DWORD *)(v1 + 32); if ( !v1 ) return 0; } return sub_6E15E0(&unk_B9E1CC, v1); } // B9E1DC: using guessed type int dword_B9E1DC; //----- (0069A010) -------------------------------------------------------- void __thiscall sub_69A010(_DWORD *this) { _DWORD *v1; // edi void *v2; // esi v1 = this; v2 = (void *)this[143147]; if ( v2 ) { sub_4445C0(this[143147]); operator delete(v2); } v1[143147] = 0; } // 4445C0: using guessed type int __thiscall sub_4445C0(_DWORD); //----- (0069A130) -------------------------------------------------------- char __stdcall sub_69A130(float *a1, float *a2, float *a3, float *a4, float *a5, float *a6, float *a7, float *a8) { float v8; // ST00_4 float v9; // ST04_4 float v10; // ST08_4 float v11; // ST1C_4 float v12; // ST20_4 double v13; // st5 double v14; // st6 double v15; // st3 float v17; // ST18_4 float v18; // ST1C_4 double v19; // st4 double v20; // st7 float v21; // [esp+0h] [ebp-30h] float v22; // [esp+4h] [ebp-2Ch] float v23; // [esp+8h] [ebp-28h] float v24; // [esp+Ch] [ebp-24h] float v25; // [esp+10h] [ebp-20h] float v26; // [esp+14h] [ebp-1Ch] float v27; // [esp+20h] [ebp-10h] float v28; // [esp+24h] [ebp-Ch] float v29; // [esp+28h] [ebp-8h] float v30; // [esp+2Ch] [ebp-4h] float v31; // [esp+40h] [ebp+10h] float v32; // [esp+40h] [ebp+10h] float v33; // [esp+40h] [ebp+10h] float v34; // [esp+44h] [ebp+14h] float v35; // [esp+44h] [ebp+14h] v8 = *a4 - *a3; v9 = a4[1] - a3[1]; v10 = a4[2] - a3[2]; v28 = *a5 - *a3; v29 = a5[1] - a3[1]; v11 = a2[1]; v30 = a5[2] - a3[2]; v12 = a2[2]; v24 = v11 * v30 - v12 * v29; v25 = v12 * v28 - v30 * *a2; v26 = v29 * *a2 - v11 * v28; v13 = v8; v14 = v9; v15 = v10; v34 = v26 * v10 + v25 * v9 + v24 * v8; if ( v34 < 0.0000001000000011686097 ) return 0; v17 = *a1 - *a3; v18 = a1[1] - a3[1]; v27 = a1[2] - a3[2]; v19 = v17; v20 = v18; v31 = v24 * v17 + v25 * v18 + v27 * v26; *a6 = v31; if ( v31 < 0.0 ) return 0; if ( v34 >= (double)v31 ) { v21 = v20 * v15 - v27 * v14; v22 = v27 * v13 - v15 * v19; v23 = v14 * v19 - v20 * v13; v32 = a2[2] * v23 + a2[1] * v22 + v21 * *a2; *a7 = v32; if ( v32 < 0.0 || v34 < v32 + *a6 ) return 0; v33 = 1.0 / v34; v35 = v23 * v30 + v22 * v29 + v21 * v28; *a8 = v35 * v33; *a6 = *a6 * v33; *a7 = v33 * *a7; if ( *a8 >= 0.0 ) return 1; } return 0; } //----- (0069A370) -------------------------------------------------------- char __thiscall sub_69A370(void *this, signed int a2, float a3) { signed int v3; // eax void *v4; // esi float v5; // ecx bool v6; // zf int v7; // edx int v8; // edi int v9; // ebx double v10; // st7 double v11; // st6 int v12; // ecx double v13; // st5 float *v14; // ecx double v15; // st6 int v16; // ecx double v17; // st5 float *v18; // ecx char v19; // al float v20; // edi float v21; // ebx int v22; // eax int v23; // eax int v24; // edx float v25; // ecx int v26; // eax int v27; // eax float v28; // ecx float *v29; // eax float v30; // edx float v31; // ecx int v32; // eax int v33; // eax float v34; // ecx float *v35; // eax float v36; // edx float v37; // ecx int v38; // eax float v39; // edx float v40; // ecx float v42; // [esp+Ch] [ebp-38h] float v43; // [esp+10h] [ebp-34h] float v44; // [esp+14h] [ebp-30h] float v45; // [esp+18h] [ebp-2Ch] float v46; // [esp+1Ch] [ebp-28h] float v47; // [esp+20h] [ebp-24h] float v48; // [esp+24h] [ebp-20h] float v49; // [esp+28h] [ebp-1Ch] float v50; // [esp+2Ch] [ebp-18h] float v51; // [esp+30h] [ebp-14h] float v52; // [esp+34h] [ebp-10h] float v53; // [esp+38h] [ebp-Ch] char v54; // [esp+3Ch] [ebp-8h] char v55; // [esp+40h] [ebp-4h] float v56; // [esp+4Ch] [ebp+8h] float v57; // [esp+4Ch] [ebp+8h] float v58; // [esp+4Ch] [ebp+8h] signed int v59; // [esp+4Ch] [ebp+8h] float v60; // [esp+4Ch] [ebp+8h] float v61; // [esp+4Ch] [ebp+8h] float v62; // [esp+4Ch] [ebp+8h] signed int v63; // [esp+4Ch] [ebp+8h] float v64; // [esp+4Ch] [ebp+8h] char v65; // [esp+4Fh] [ebp+Bh] v3 = a2; v4 = this; v5 = a3; v6 = (a2 + LODWORD(a3)) % 2 == 0; v7 = *((_DWORD *)v4 + 9); v8 = *((_DWORD *)v4 + 8); v9 = *((_DWORD *)v4 + 9); v56 = (double)a2 * *((float *)v4 + 11); v10 = v56; if ( v6 ) { v45 = v56; v57 = (double)SLODWORD(a3) * *((float *)v4 + 12); v11 = v57; v46 = v57; LODWORD(a3) = v8 + 4 * (v3 + LODWORD(a3) * v9); v12 = LODWORD(v5) + 1; v47 = *(float *)LODWORD(a3) * *((float *)v4 + 15) - *((float *)v4 + 16); v58 = (double)(v3 + 1) * *((float *)v4 + 11); v13 = v58; v59 = v12; v48 = v13; v49 = v11; v14 = (float *)(v8 + 4 * (v3 + v7 * v12)); v50 = *(float *)(LODWORD(a3) + 4) * *((float *)v4 + 15) - *((float *)v4 + 16); v51 = v10; v60 = (double)v59 * *((float *)v4 + 12); v52 = v60; v53 = *v14 * *((float *)v4 + 15) - *((float *)v4 + 16); v42 = v13; v43 = v60; v44 = v14[1] * *((float *)v4 + 15) - *((float *)v4 + 16); } else { v51 = v56; v61 = (double)SLODWORD(a3) * *((float *)v4 + 12); v15 = v61; v52 = v61; LODWORD(a3) = v8 + 4 * (v3 + LODWORD(a3) * v9); v16 = LODWORD(v5) + 1; v53 = *(float *)LODWORD(a3) * *((float *)v4 + 15) - *((float *)v4 + 16); v62 = (double)(v3 + 1) * *((float *)v4 + 11); v17 = v62; v63 = v16; v45 = v17; v46 = v15; v18 = (float *)(v8 + 4 * (v3 + v7 * v16)); v47 = *(float *)(LODWORD(a3) + 4) * *((float *)v4 + 15) - *((float *)v4 + 16); v42 = v10; v64 = (double)v63 * *((float *)v4 + 12); v43 = v64; v44 = *v18 * *((float *)v4 + 15) - *((float *)v4 + 16); v48 = v17; v49 = v64; v50 = v18[1] * *((float *)v4 + 15) - *((float *)v4 + 16); } v65 = 0; v19 = sub_69A130((float *)v4 + 17, (float *)v4 + 20, &v45, &v48, &v51, (float *)&v54, (float *)&v55, &a3); v20 = v50; v21 = v49; if ( v19 ) { v22 = *((_DWORD *)v4 + 6); if ( *((_DWORD *)v4 + 7) > v22 ) { *(float *)(*((_DWORD *)v4 + 5) + 48 * v22 + 8) = a3; v23 = *((_DWORD *)v4 + 5); v24 = 6 * *((_DWORD *)v4 + 6); *(float *)(v23 + 8 * v24 + 12) = v45; v25 = v47; v26 = v23 + 8 * v24 + 12; *(float *)(v26 + 4) = v46; *(float *)(v26 + 8) = v25; v27 = *((_DWORD *)v4 + 5) + 48 * *((_DWORD *)v4 + 6) + 24; *(float *)v27 = v48; v28 = v51; *(float *)(v27 + 4) = v21; *(float *)(v27 + 8) = v20; v29 = (float *)(*((_DWORD *)v4 + 5) + 48 * *((_DWORD *)v4 + 6) + 36); v30 = v52; *v29 = v28; v31 = v53; v29[1] = v30; v29[2] = v31; ++*((_DWORD *)v4 + 6); } v65 = 1; } if ( !sub_69A130((float *)v4 + 17, (float *)v4 + 20, &v48, &v42, &v51, (float *)&v54, (float *)&v55, &a3) ) return v65; v32 = *((_DWORD *)v4 + 6); if ( *((_DWORD *)v4 + 7) > v32 ) { *(float *)(*((_DWORD *)v4 + 5) + 48 * v32 + 8) = a3; v33 = *((_DWORD *)v4 + 5) + 48 * *((_DWORD *)v4 + 6) + 12; *(float *)v33 = v48; v34 = v42; *(float *)(v33 + 4) = v21; *(float *)(v33 + 8) = v20; v35 = (float *)(*((_DWORD *)v4 + 5) + 48 * *((_DWORD *)v4 + 6) + 24); v36 = v43; *v35 = v34; v37 = v44; v35[1] = v36; v35[2] = v37; v38 = *((_DWORD *)v4 + 5) + 48 * *((_DWORD *)v4 + 6) + 36; v39 = v52; *(float *)v38 = v51; v40 = v53; *(float *)(v38 + 4) = v39; *(float *)(v38 + 8) = v40; ++*((_DWORD *)v4 + 6); } return 1; } //----- (0069AAD0) -------------------------------------------------------- char __thiscall sub_69AAD0(_DWORD *this, char a2, int a3, int a4, char a5, int a6, float a7, int a8, int a9) { _DWORD *v9; // esi int v10; // eax int v11; // edi int v12; // ebx int v13; // ebx int v14; // eax int v15; // edi int *v16; // ebx char v17; // bl float *v18; // eax int v19; // edx float v20; // ecx char result; // al int v22; // ecx float v23; // edx int v24; // eax int v25; // edx float v26; // ecx int v27; // [esp+Ch] [ebp-24h] int v28; // [esp+10h] [ebp-20h] float v29; // [esp+14h] [ebp-1Ch] int v30; // [esp+18h] [ebp-18h] int v31; // [esp+1Ch] [ebp-14h] float v32; // [esp+20h] [ebp-10h] float v33; // [esp+24h] [ebp-Ch] int v34; // [esp+28h] [ebp-8h] char v35; // [esp+2Fh] [ebp-1h] v9 = this; v10 = this[136]; v11 = this[143147]; v12 = *(_DWORD *)(v11 + 24); v34 = v10; if ( v12 != v10 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v10 = v34; } *(_DWORD *)(v11 + 24) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v35 = sub_4446F0((_DWORD *)v9[143147], (float *)&a2, (float *)&a5); if ( v35 ) { sub_4446C0((_DWORD *)v9[143147], &v30, 0); v33 = sub_444690((_DWORD *)v9[143147], 0); } v13 = v9[143147]; v14 = v9[153]; v15 = *(_DWORD *)(v13 + 24); v16 = (int *)(v13 + 24); v34 = v14; if ( v15 != v14 ) { if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v14 = v34; } *v16 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v17 = sub_4446F0((_DWORD *)v9[143147], (float *)&a2, (float *)&a5); if ( v17 ) { sub_4446C0((_DWORD *)v9[143147], &v27, 0); a7 = sub_444690((_DWORD *)v9[143147], 0); } if ( v35 ) { if ( v17 ) { v18 = (float *)a8; if ( v29 < (double)v32 ) { v19 = v31; *(_DWORD *)a8 = v30; v20 = v32; *((_DWORD *)v18 + 1) = v19; v18[2] = v20; if ( a9 ) { *(float *)a9 = v33; return 1; } return 1; } LABEL_26: v22 = v28; *(_DWORD *)v18 = v27; v23 = v29; *((_DWORD *)v18 + 1) = v22; v18[2] = v23; if ( a9 ) *(float *)a9 = a7; return 1; } v24 = a8; v25 = v31; *(_DWORD *)a8 = v30; v26 = v32; *(_DWORD *)(v24 + 4) = v25; *(float *)(v24 + 8) = v26; if ( a9 ) *(float *)a9 = v33; result = 1; } else { if ( v17 ) { v18 = (float *)a8; goto LABEL_26; } result = 0; } return result; } //----- (0069ACA0) -------------------------------------------------------- char __thiscall sub_69ACA0(int this, float a2, float a3, int a4, int a5) { return sub_69AAD0( (_DWORD *)this, SLOBYTE(a2), SLODWORD(a3), COERCE_INT(*(float *)(this + 524)), dword_AB4FDC, dword_AB4FE0, *(float *)&dword_AB4FE4, a4, a5); } // AB4FDC: using guessed type int dword_AB4FDC; // AB4FE0: using guessed type int dword_AB4FE0; // AB4FE4: using guessed type int dword_AB4FE4; //----- (0069AD10) -------------------------------------------------------- char __thiscall sub_69AD10(float *this, float a2, float a3, int a4) { float *v4; // ebx void *v5; // ecx char v7; // al int v8; // esi int v9; // edi int v10; // eax _DWORD *v11; // ecx char v12; // al float *v13; // eax int v14; // edx float v15; // ecx int v16; // ecx float v17; // edx int v18; // edx float v19; // ecx float v20; // [esp+1Ch] [ebp-2Ch] float v21; // [esp+20h] [ebp-28h] float v22; // [esp+24h] [ebp-24h] int v23; // [esp+28h] [ebp-20h] int v24; // [esp+2Ch] [ebp-1Ch] float v25; // [esp+30h] [ebp-18h] int v26; // [esp+34h] [ebp-14h] int v27; // [esp+38h] [ebp-10h] float v28; // [esp+3Ch] [ebp-Ch] int v29; // [esp+40h] [ebp-8h] char v30; // [esp+47h] [ebp-1h] char v31; // [esp+53h] [ebp+Bh] v4 = this; v5 = (void *)*((_DWORD *)this + 156); if ( !v5 ) { *(float *)a4 = a2; *(float *)(a4 + 4) = a3; return 0; } v7 = sub_8DD4F0(v5, a2, a3, (int)&v26, 0); v8 = *((_DWORD *)v4 + 143147); v9 = *(_DWORD *)(v8 + 24); v30 = v7; v10 = *((_DWORD *)v4 + 153); v29 = v10; if ( v9 != v10 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v29; } *(_DWORD *)(v8 + 24) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v20 = a2; v11 = (_DWORD *)*((_DWORD *)v4 + 143147); v21 = a3; v22 = v4[131]; v12 = sub_4446F0(v11, &v20, (float *)&dword_AB4FDC); v31 = v12; if ( v12 ) { sub_4446C0(*((_DWORD **)v4 + 143147), &v23, 0); v12 = v31; } if ( !v30 ) { if ( !v12 ) return 0; v13 = (float *)a4; LABEL_18: v16 = v24; *(_DWORD *)v13 = v23; v17 = v25; *((_DWORD *)v13 + 1) = v16; v13[2] = v17; return 1; } if ( v12 ) { v13 = (float *)a4; if ( v25 < (double)v28 ) { v14 = v27; *(_DWORD *)a4 = v26; v15 = v28; *(_DWORD *)(a4 + 4) = v14; *(float *)(a4 + 8) = v15; return 1; } goto LABEL_18; } v18 = v27; *(_DWORD *)a4 = v26; v19 = v28; *(_DWORD *)(a4 + 4) = v18; *(float *)(a4 + 8) = v19; return 1; } // AB4FDC: using guessed type int dword_AB4FDC; //----- (0069AEF0) -------------------------------------------------------- char __thiscall sub_69AEF0(_DWORD *this, float *a2, float *a3, char **a4, float *a5) { _DWORD *v5; // esi int v6; // eax int v7; // edi int v8; // ebx unsigned int v9; // ebx unsigned int v10; // edi int v11; // eax char *v12; // eax char *v13; // ebx int v14; // ebx int v15; // eax int v16; // edi unsigned int v17; // ebx unsigned int v18; // edi int v19; // eax char *v20; // eax char *v21; // ebx char result; // al int v23; // [esp+8h] [ebp-10h] unsigned int v24; // [esp+8h] [ebp-10h] int v25; // [esp+8h] [ebp-10h] float v26; // [esp+Ch] [ebp-Ch] char *v27; // [esp+10h] [ebp-8h] char v28; // [esp+17h] [ebp-1h] unsigned int v29; // [esp+24h] [ebp+Ch] float v30; // [esp+24h] [ebp+Ch] v26 = 9.9999998e12; v5 = this; v6 = this[134]; v7 = this[143147]; v8 = *(_DWORD *)(v7 + 24); v27 = 0; v23 = v6; if ( v8 != v6 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v6 = v23; } *(_DWORD *)(v7 + 24) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } v28 = sub_444720((_DWORD *)v5[143147], a2, a3); if ( !v28 ) goto LABEL_17; v9 = *(_DWORD *)(v5[143147] + 44); v10 = 0; v24 = v9; if ( !v9 ) goto LABEL_16; while ( 1 ) { v11 = sub_444750((_DWORD *)v5[143147], v10); if ( v11 ) break; LABEL_15: if ( ++v10 >= v9 ) goto LABEL_16; } v12 = (char *)sub_699EC0(v11); v13 = v12; if ( !v12 || v12 == dword_AD8EBC ) { v9 = v24; goto LABEL_15; } if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v12 + 32))(v12) || (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v13 + 36))(v13) ) { v26 = sub_444690((_DWORD *)v5[143147], v10); v27 = v13; goto LABEL_17; } LABEL_16: v28 = 0; v27 = 0; LABEL_17: v14 = v5[143147]; v15 = v5[142]; v16 = *(_DWORD *)(v14 + 24); v25 = v15; if ( v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v15 = v25; } *(_DWORD *)(v14 + 24) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } if ( !sub_444720((_DWORD *)v5[143147], a2, a3) || (v17 = *(_DWORD *)(v5[143147] + 44), v18 = 0, (v29 = v17) == 0) ) { LABEL_32: if ( v28 ) { *a5 = v26; *a4 = v27; result = 1; } else { *a4 = 0; result = 0; } return result; } while ( 2 ) { v19 = sub_444750((_DWORD *)v5[143147], v18); if ( !v19 ) { LABEL_31: if ( ++v18 >= v17 ) goto LABEL_32; continue; } break; } v20 = (char *)sub_699EC0(v19); v21 = v20; if ( !v20 || v20 == dword_AD8EBC ) { v17 = v29; goto LABEL_31; } v30 = sub_444690((_DWORD *)v5[143147], v18); if ( v28 ) { if ( v30 <= (double)v26 ) { *a5 = v30; *a4 = v21; } else { *a5 = v26; *a4 = v27; } result = 1; } else { *a5 = v30; *a4 = v21; result = 1; } return result; } //----- (0069B130) -------------------------------------------------------- unsigned int __thiscall sub_69B130(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx unsigned int result; // eax unsigned int v4; // edi int v5; // eax int v6; // esi const unsigned __int8 *v7; // ecx int v8; // eax char v9; // dl const unsigned __int8 *v10; // eax unsigned int v11; // [esp+8h] [ebp-Ch] char v12; // [esp+13h] [ebp-1h] v1 = this; v2 = (_DWORD *)this[143147]; result = 0; v4 = 0; v11 = 0; v12 = 0; if ( v2[11] ) { while ( 1 ) { v5 = sub_444750(v2, v4); v6 = v5; if ( !v5 ) return v11; v7 = dword_AB5260; if ( (unsigned int)dword_AB5274 < 0x10 ) v7 = (const unsigned __int8 *)&dword_AB5260; if ( _mbsncmp(*(const unsigned __int8 **)(v5 + 8), v7, 4u) ) { v10 = dword_AB5244; if ( (unsigned int)dword_AB5258 < 0x10 ) v10 = (const unsigned __int8 *)&dword_AB5244; if ( _mbsncmp(*(const unsigned __int8 **)(v6 + 8), v10, 4u) ) goto LABEL_14; } else { if ( v12 ) goto LABEL_14; v8 = sub_6DB5A0(v1, v1[41]); if ( !v8 ) goto LABEL_14; v9 = *(_BYTE *)(v8 + 70); if ( (unsigned __int8)*(_WORD *)(v8 + 68) == 1 ) goto LABEL_14; v12 = 1; } v11 = v4; LABEL_14: v2 = (_DWORD *)v1[143147]; if ( ++v4 >= v2[11] ) return v11; } } return result; } // AB5258: using guessed type int dword_AB5258; // AB5274: using guessed type int dword_AB5274; //----- (0069B200) -------------------------------------------------------- int __thiscall sub_69B200(_DWORD *this, float *a2, float *a3, int a4) { _DWORD *v4; // ebx int v5; // edi int v6; // eax int v7; // esi void (__thiscall ***v8)(_DWORD, signed int); // esi int result; // eax int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v4 = this; v5 = *sub_69C790(this, &v10); v6 = v4[143147]; v7 = *(_DWORD *)(v6 + 24); v12 = 0; v11 = v6; if ( v7 != v5 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v11 + 24) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v8 = (void (__thiscall ***)(_DWORD, signed int))v10; v12 = -1; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v8 ) (**v8)(v8, 1); if ( sub_444720((_DWORD *)v4[143147], a2, a3) ) result = sub_444750((_DWORD *)v4[143147], 0); else result = 0; return result; } //----- (0069B300) -------------------------------------------------------- signed int __thiscall sub_69B300(_DWORD *this, float *a2, float a3, char **a4, int *a5, signed __int16 *a6) { char **v6; // eax _DWORD *v7; // esi int *v8; // ecx char v9; // al int v10; // edi int v11; // ebx char **v12; // eax int v13; // edi int v14; // eax int v15; // ebx char v16; // bl int v17; // ecx float *v18; // eax double v19; // st5 float *v20; // eax double v21; // st4 double v22; // st3 double v23; // st5 int v24; // eax double v26; // st6 signed __int16 v27; // ax int v28; // [esp+8h] [ebp-18h] float v29; // [esp+Ch] [ebp-14h] int v30; // [esp+10h] [ebp-10h] float v31; // [esp+14h] [ebp-Ch] float v32; // [esp+18h] [ebp-8h] char v33; // [esp+1Fh] [ebp-1h] v6 = a4; v31 = 3.4028235e38; v29 = 3.4028235e38; v7 = this; v8 = a5; *a4 = 0; *v8 = 0; *a6 = -1; v28 = 0; v9 = sub_69AEF0(v7, a2, (float *)LODWORD(a3), v6, &v29); v10 = v7[143147]; v11 = *(_DWORD *)(v10 + 24); v33 = v9; v12 = (char **)v7[135]; a4 = v12; if ( (char **)v11 != v12 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = a4; } *(_DWORD *)(v10 + 24) = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)v12 + 1); } HIBYTE(a4) = sub_444720((_DWORD *)v7[143147], a2, (float *)LODWORD(a3)); if ( HIBYTE(a4) ) { v31 = sub_444690((_DWORD *)v7[143147], 0); v28 = sub_444750((_DWORD *)v7[143147], 0); } v13 = v7[143147]; v14 = v7[140]; v32 = 3.4028235e38; v15 = *(_DWORD *)(v13 + 24); v30 = v14; if ( v15 != v14 ) { if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v14 = v30; } *(_DWORD *)(v13 + 24) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v16 = sub_444720((_DWORD *)v7[143147], a2, (float *)LODWORD(a3)); if ( v16 ) { v32 = sub_444690((_DWORD *)v7[143147], 0); v17 = sub_444750((_DWORD *)v7[143147], 0); } else { v17 = 0; } a3 = v29; v18 = &v32; if ( v32 >= (double)v29 ) v18 = &a3; a3 = *v18; v19 = v31; v20 = &v31; if ( a3 <= (double)v31 ) v20 = &a3; a3 = *v20; v21 = a3; if ( HIBYTE(a4) && v19 - 40.0 < v21 ) { v22 = v19 + 40.0; v23 = 40.0; if ( v22 > v21 ) { v24 = sub_699F30(v28); *a5 = v24; return 3; } } else { v23 = 40.0; } if ( v16 && v32 - v23 < v21 ) { v26 = a3; if ( v23 + v32 > a3 ) { v27 = sub_699FA0(v17); *a6 = v27; return 4; } } else { v26 = a3; } return v33 && v26 == v29; } //----- (0069B580) -------------------------------------------------------- char __thiscall sub_69B580(void **this, float *a2, float *a3, float *a4, float *a5, float *a6, _DWORD *a7) { float *v7; // esi void *v8; // ST00_4 float *v9; // ebx float *v10; // edi float v11; // ST20_4 double v12; // st7 float v13; // ST24_4 double v14; // st7 float v15; // ST28_4 float v16; // eax float v17; // ecx double v18; // st7 double v19; // st7 double v20; // st7 double v21; // st6 double v22; // st7 double v23; // st7 int v24; // edx float v25; // ebx int v26; // ecx int v27; // eax int v28; // eax int v29; // eax int v30; // ebx float *v31; // ecx int v32; // edx float v33; // ST20_4 float v34; // ST24_4 float v35; // ST28_4 double v36; // st7 float v37; // ST20_4 float v38; // ST24_4 float v39; // ST28_4 double v40; // st5 double v41; // st6 float v42; // ST14_4 double v43; // st2 double v44; // st6 float v45; // ST18_4 float v46; // ST1C_4 float v48; // [esp+24h] [ebp-18h] float v49; // [esp+28h] [ebp-14h] float v50; // [esp+2Ch] [ebp-10h] int v51; // [esp+30h] [ebp-Ch] int v52; // [esp+34h] [ebp-8h] int i; // [esp+38h] [ebp-4h] float v54; // [esp+44h] [ebp+8h] signed int v55; // [esp+44h] [ebp+8h] int v56; // [esp+44h] [ebp+8h] float v57; // [esp+48h] [ebp+Ch] signed int v58; // [esp+48h] [ebp+Ch] int v59; // [esp+48h] [ebp+Ch] float v60; // [esp+48h] [ebp+Ch] float v61; // [esp+48h] [ebp+Ch] int v62; // [esp+58h] [ebp+1Ch] v7 = (float *)this; operator delete[](*this); v8 = (void *)*((_DWORD *)v7 + 5); *v7 = 0.0; operator delete[](v8); v9 = a3; v10 = a2; v7[5] = 0.0; v11 = *a3 - *a2; v12 = a3[1]; v48 = v11; v13 = v12 - a2[1]; v14 = a3[2]; v49 = v13; v15 = v14 - a2[2]; v50 = v15; sub_4430B0(&v48); v16 = v49; v17 = v50; v18 = 1.0 / v7[11]; v7[20] = v48; v7[21] = v16; v7[22] = v17; v7[17] = *a2; v7[18] = a2[1]; v7[19] = a2[2]; v57 = v18; v54 = 1.0 / v7[12]; v19 = *v9 - *v10; i = (signed int)((v9[1] - v10[1]) * v54); *((_DWORD *)v7 + 1) = abs((signed int)(v19 * v57)) + 2; *((_DWORD *)v7 + 2) = abs(i) + 2; *((_DWORD *)v7 + 7) = 10; v7[6] = 0.0; *((_DWORD *)v7 + 5) = operator new[](0x1E0u); v20 = v57; v58 = (signed int)(*v10 * v57); v21 = v20 * *v9; v22 = v54; v55 = (signed int)(v10[1] * v54); v52 = v58; v51 = v55; v23 = v22 * v9[1]; i = (signed int)v21; if ( v58 > (signed int)v21 ) v58 = i; if ( v55 > (signed int)v23 ) v55 = (signed int)v23; *((_DWORD *)v7 + 3) = v58; v24 = v52; *((_DWORD *)v7 + 4) = v55; v56 = *a7 + v24; LODWORD(v25) = v51 - *a7; v26 = v24 - *a7; v27 = v51 + *a7; v62 = v51 - *a7; v59 = v27; if ( v26 < 0 ) v26 = 0; v28 = *((_DWORD *)v7 + 9); if ( v56 >= v28 ) v56 = v28 - 1; if ( v25 < 0.0 ) { v62 = 0; v25 = 0.0; } v29 = *((_DWORD *)v7 + 10); if ( v59 >= v29 ) v59 = v29 - 1; for ( i = v26; i < v56; ++i ) { if ( SLODWORD(v25) < v59 ) { do { sub_69A370(v7, i, v25); ++LODWORD(v25); } while ( SLODWORD(v25) < v59 ); v25 = *(float *)&v62; } } v30 = *((_DWORD *)v7 + 6); v31 = 0; v60 = 100000000.0; if ( !v30 ) return 0; v32 = *((_DWORD *)v7 + 5) + 48 * v30; do { v32 -= 48; --v30; if ( *(float *)(v32 + 8) < (double)v60 ) { v31 = (float *)v32; v60 = *(float *)(v32 + 8); } } while ( v30 ); if ( !v31 ) return 0; *a6 = v31[2]; v61 = v31[2]; v33 = v61 * v48; v34 = v49 * v61; v35 = v61 * v50; v48 = *v10 + v33; v49 = v10[1] + v34; v36 = v10[2]; *a4 = v48; a4[1] = v49; v50 = v36 + v35; a4[2] = v50; v48 = v31[6] - v31[3]; v49 = v31[7] - v31[4]; v50 = v31[8] - v31[5]; v37 = v31[9] - v31[3]; v38 = v31[10] - v31[4]; v39 = v31[11] - v31[5]; v40 = v49; v41 = v50; v42 = v39 * v49 - v38 * v50; *a5 = v42; v43 = v41 * v37; v44 = v48; v45 = v43 - v39 * v48; a5[1] = v45; v46 = v44 * v38 - v37 * v40; a5[2] = v46; return 1; } //----- (0069B8A0) -------------------------------------------------------- char __thiscall sub_69B8A0(_DWORD *this, float *a2, float *a3, float *a4, float *a5, float *a6, _DWORD *a7) { int v7; // eax int v8; // ecx int v9; // edx int v10; // esi char v11; // bl void *v13; // [esp+Ch] [ebp-68h] void *v14; // [esp+20h] [ebp-54h] int v15; // [esp+24h] [ebp-50h] int v16; // [esp+2Ch] [ebp-48h] int v17; // [esp+30h] [ebp-44h] int v18; // [esp+34h] [ebp-40h] float v19; // [esp+38h] [ebp-3Ch] float v20; // [esp+3Ch] [ebp-38h] int v21; // [esp+40h] [ebp-34h] int v22; // [esp+44h] [ebp-30h] float v23; // [esp+48h] [ebp-2Ch] float v24; // [esp+4Ch] [ebp-28h] int v25; // [esp+70h] [ebp-4h] v13 = 0; v14 = 0; v15 = 0; v25 = 0; v7 = this[156]; v8 = *(_DWORD *)(v7 + 212); v9 = *(_DWORD *)(v7 + 216); v19 = *(float *)(v7 + 92); v10 = *(_DWORD *)(v7 + 196); v20 = *(float *)(v7 + 96); v21 = v8; v23 = *(float *)(v7 + 256); v22 = v9; v24 = *(float *)(v7 + 260); v17 = v8 + 1; v18 = v9 + 1; v16 = v10; v11 = sub_69B580(&v13, a2, a3, a4, a5, a6, a7); operator delete[](v13); operator delete[](v14); return v11; } //----- (0069B970) -------------------------------------------------------- char __thiscall sub_69B970(_DWORD *this, float *a2, float a3, _DWORD *a4, int *a5, float *a6) { _DWORD *v6; // esi int v7; // edi int v8; // eax int v9; // ebx int *v10; // eax int v11; // edx int v12; // eax int v13; // ecx int v14; // edi int v15; // eax int v16; // ebx int v17; // ebx int v18; // eax int v19; // edi int *v20; // ebx char v21; // bl int v22; // ebx int v23; // eax int v24; // edi int *v25; // ebx char v26; // bl bool v27; // zf char result; // al double v29; // st7 double v30; // st7 double v31; // st6 _DWORD *v32; // eax int v33; // edx int v34; // ecx int v35; // edx int *v36; // eax int v37; // ecx int v38; // edx int v39; // edx int v40; // ecx int v41; // edx int *v42; // eax int v43; // ecx int v44; // edx int v45; // edx int v46; // ecx int *v47; // eax int v48; // ecx int v49; // edx int v50; // [esp+Ch] [ebp-7Ch] int v51; // [esp+10h] [ebp-78h] int v52; // [esp+14h] [ebp-74h] int v53; // [esp+18h] [ebp-70h] int v54; // [esp+1Ch] [ebp-6Ch] int v55; // [esp+20h] [ebp-68h] int v56; // [esp+24h] [ebp-64h] int v57; // [esp+28h] [ebp-60h] int v58; // [esp+2Ch] [ebp-5Ch] int v59; // [esp+30h] [ebp-58h] int v60; // [esp+34h] [ebp-54h] int v61; // [esp+38h] [ebp-50h] int v62; // [esp+3Ch] [ebp-4Ch] int v63; // [esp+40h] [ebp-48h] int v64; // [esp+44h] [ebp-44h] int v65; // [esp+48h] [ebp-40h] int v66; // [esp+4Ch] [ebp-3Ch] int v67; // [esp+50h] [ebp-38h] float v68; // [esp+54h] [ebp-34h] float v69; // [esp+58h] [ebp-30h] float v70; // [esp+5Ch] [ebp-2Ch] int v71; // [esp+60h] [ebp-28h] int v72; // [esp+64h] [ebp-24h] int v73; // [esp+68h] [ebp-20h] int v74; // [esp+6Ch] [ebp-1Ch] int v75; // [esp+70h] [ebp-18h] int v76; // [esp+74h] [ebp-14h] int *v77; // [esp+78h] [ebp-10h] float v78; // [esp+7Ch] [ebp-Ch] float v79; // [esp+80h] [ebp-8h] char v80; // [esp+86h] [ebp-2h] char v81; // [esp+87h] [ebp-1h] v6 = this; v68 = *(float *)LODWORD(a3) - *a2; v69 = *(float *)(LODWORD(a3) + 4) - a2[1]; v70 = *(float *)(LODWORD(a3) + 8) - a2[2]; sub_4430B0(&v68); *(_BYTE *)(v6[143147] + 57) = 1; v7 = v6[143147]; v78 = 3.4028235e38; v8 = v6[138]; v9 = *(_DWORD *)(v7 + 24); v81 = 0; v79 = *(float *)&v8; if ( v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *(float *)&v8 = v79; } *(float *)(v7 + 24) = *(float *)&v8; if ( *(float *)&v8 != 0.0 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } if ( sub_444720((_DWORD *)v6[143147], a2, &v68) ) { v78 = sub_444690((_DWORD *)v6[143147], 0); sub_4446C0((_DWORD *)v6[143147], &v53, 0); sub_444650((_DWORD *)v6[143147], &v50, 0); v81 = 1; } v10 = (int *)dword_AD8CCC; if ( dword_AD8CCC ) { while ( 1 ) { v11 = *v10; v12 = v10[2]; v13 = *(_DWORD *)(v12 + 2716); v77 = (int *)v11; if ( v13 && *(_WORD *)(v13 + 176) ) { v14 = v6[143147]; v15 = *(int *)(v12 + 700); v16 = *(_DWORD *)(v14 + 24); v79 = *(float *)&v15; if ( v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(float *)&v15 = v79; } *(float *)(v14 + 24) = *(float *)&v15; if ( *(float *)&v15 != 0.0 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } if ( sub_444720((_DWORD *)v6[143147], a2, &v68) ) { v78 = sub_444690((_DWORD *)v6[143147], 0); sub_4446C0((_DWORD *)v6[143147], &v53, 0); sub_444650((_DWORD *)v6[143147], &v50, 0); v81 = 1; } } if ( !v77 ) break; v10 = v77; } } v17 = v6[143147]; v18 = v6[153]; v79 = 3.4028235e38; v19 = *(_DWORD *)(v17 + 24); v20 = (int *)(v17 + 24); v77 = (int *)v18; if ( v19 != v18 ) { if ( v19 ) { if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v18 = (int)v77; } *v20 = v18; if ( v18 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); } v21 = sub_4446F0((_DWORD *)v6[143147], a2, &v68); v80 = v21; if ( v21 ) { sub_4446C0((_DWORD *)v6[143147], &v74, 0); v79 = sub_444690((_DWORD *)v6[143147], 0); sub_444650((_DWORD *)v6[143147], &v71, 0); } if ( *(_DWORD *)(v6[156] + 196) ) { v77 = (int *)v6[143090]; if ( sub_69B8A0(v6, a2, (float *)LODWORD(a3), (float *)&v65, (float *)&v62, &a3, &v77) ) { if ( v21 ) { if ( v79 <= (double)a3 ) goto LABEL_43; } else { v80 = 1; } v79 = a3; v74 = v65; v75 = v66; v76 = v67; v71 = v62; v72 = v63; v73 = v64; } } LABEL_43: v22 = v6[143147]; v23 = v6[155]; a3 = 3.4028235e38; v24 = *(_DWORD *)(v22 + 24); v25 = (int *)(v22 + 24); v77 = (int *)v23; if ( v24 != v23 ) { if ( v24 ) { if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v23 = (int)v77; } *v25 = v23; if ( v23 ) InterlockedIncrement((volatile LONG *)(v23 + 4)); } v26 = sub_4446F0((_DWORD *)v6[143147], a2, &v68); if ( v26 ) { sub_4446C0((_DWORD *)v6[143147], &v59, 0); a3 = sub_444690((_DWORD *)v6[143147], 0); sub_444650((_DWORD *)v6[143147], &v56, 0); } v27 = v81 == 0; *(_BYTE *)(v6[143147] + 57) = 0; if ( v27 && !v80 && !v26 ) return 0; v29 = v78; if ( v79 >= (double)v78 ) { v31 = a3; v32 = a4; if ( a3 < v29 ) goto LABEL_59; v45 = v54; *a4 = v53; v46 = v55; v32[1] = v45; v32[2] = v46; if ( a6 ) *a6 = v29; v47 = a5; v48 = v51; *a5 = v50; v49 = v52; v47[1] = v48; v47[2] = v49; result = 1; } else { v30 = v79; v31 = a3; v32 = a4; if ( a3 < (double)v79 ) { LABEL_59: v33 = v60; *v32 = v59; v34 = v61; v32[1] = v33; v32[2] = v34; if ( a6 ) { v35 = v56; *a6 = v31; v36 = a5; v37 = v57; *a5 = v35; } else { v36 = a5; v37 = v57; *a5 = v56; } v38 = v58; v36[1] = v37; v36[2] = v38; return 1; } v39 = v75; *a4 = v74; v40 = v76; v32[1] = v39; v32[2] = v40; if ( a6 ) { v41 = v71; *a6 = v30; v42 = a5; v43 = v72; *a5 = v41; } else { v42 = a5; v43 = v72; *a5 = v71; } v44 = v73; v42[1] = v43; v42[2] = v44; result = 1; } return result; } // AD8CCC: using guessed type int dword_AD8CCC; //----- (0069BE40) -------------------------------------------------------- char __thiscall sub_69BE40(float *this, char a2, int a3, int a4, char a5, int a6, int a7, int a8, float *a9) { float *v9; // esi int v10; // eax int v11; // ebx int v12; // edi int v13; // ebx int v14; // edi int v15; // ebx int v16; // edi signed int v17; // eax unsigned int v18; // eax unsigned int v19; // ebx int v20; // eax const void **v21; // eax unsigned __int8 *v22; // eax unsigned __int64 v23; // ST04_8 float *v24; // eax int v25; // edx float v26; // ecx int v28; // ecx float v29; // edx int v30; // [esp+10h] [ebp-5Ch] int v31; // [esp+14h] [ebp-58h] int v32; // [esp+18h] [ebp-54h] float v33; // [esp+1Ch] [ebp-50h] int v34; // [esp+20h] [ebp-4Ch] int v35; // [esp+24h] [ebp-48h] float v36; // [esp+28h] [ebp-44h] float v37; // [esp+2Ch] [ebp-40h] float *v38; // [esp+30h] [ebp-3Ch] float *v39; // [esp+34h] [ebp-38h] float v40; // [esp+38h] [ebp-34h] char v41; // [esp+3Eh] [ebp-2Eh] char v42; // [esp+3Fh] [ebp-2Dh] void *v43; // [esp+40h] [ebp-2Ch] int v44; // [esp+50h] [ebp-1Ch] unsigned int v45; // [esp+54h] [ebp-18h] int v46; // [esp+68h] [ebp-4h] v9 = this; v39 = (float *)a8; v10 = *((_DWORD *)this + 156); v38 = a9; if ( v10 ) { v11 = *(_DWORD *)(v10 + 56); v12 = *(_DWORD *)(*((_DWORD *)this + 143147) + 24); v37 = this[143147]; if ( v12 != v11 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *(_DWORD *)(LODWORD(v37) + 24) = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); } v41 = sub_4446F0(*((_DWORD **)v9 + 143147), (float *)&a2, (float *)&a5); if ( v41 ) { sub_4446C0(*((_DWORD **)v9 + 143147), &v31, 0); v37 = sub_444690((_DWORD *)*((_DWORD *)v9 + 143147), 0); } } v13 = *((_DWORD *)v9 + 153); v14 = *(_DWORD *)(*((_DWORD *)v9 + 143147) + 24); v40 = v9[143147]; if ( v14 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *(_DWORD *)(LODWORD(v40) + 24) = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } v42 = sub_4446F0(*((_DWORD **)v9 + 143147), (float *)&a2, (float *)&a5); if ( v42 ) { sub_4446C0(*((_DWORD **)v9 + 143147), &v34, 0); v40 = sub_444690((_DWORD *)*((_DWORD *)v9 + 143147), 0); } v15 = *((_DWORD *)v9 + 153); v16 = *(_DWORD *)(*((_DWORD *)v9 + 143147) + 24); v30 = *((_DWORD *)v9 + 143147); if ( v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v30 + 24) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } v17 = *((_DWORD *)v9 + 36); if ( v17 && v17 >= 1 ) { v45 = 15; v44 = 0; LOBYTE(v43) = 0; v46 = 0; sub_4017F0((const void **)v9 + 29, (const void **)&v43, 0, (void *)0xFFFFFFFF); v46 = -1; if ( v45 >= 0x10 ) operator delete(v43); if ( sub_444720(*((_DWORD **)v9 + 143147), (float *)&a2, (float *)&a5) ) { v18 = sub_69B130(v9); v19 = v18; v20 = sub_444750(*((_DWORD **)v9 + 143147), v18); if ( !v20 ) return 0; v21 = (const void **)sub_4019E0(&v43, *(void **)(v20 + 8)); v46 = 1; sub_4017F0((const void **)v9 + 29, v21, 0, (void *)0xFFFFFFFF); v46 = -1; sub_636A10(&v43); v22 = dword_AB5260; if ( (unsigned int)dword_AB5274 < 0x10 ) v22 = (unsigned __int8 *)&dword_AB5260; HIDWORD(v23) = dword_AB5270; LODWORD(v23) = 0; if ( sub_417B90((unsigned __int8 *)&dword_ADB4DC, v22, v23) == -1 ) { sub_4446C0(*((_DWORD **)v9 + 143147), &v34, v19); v40 = sub_444690((_DWORD *)*((_DWORD *)v9 + 143147), v19); LABEL_37: v24 = v39; goto LABEL_38; } } } if ( !v41 ) { if ( v42 ) goto LABEL_37; return 0; } if ( v42 ) { v24 = v39; if ( v36 >= (double)v33 ) { LABEL_38: v25 = v35; *(_DWORD *)v24 = v34; v26 = v36; *((_DWORD *)v24 + 1) = v25; v24[2] = v26; if ( v38 ) *v38 = v40; return 1; } } else { v24 = v39; } v28 = v32; *(_DWORD *)v24 = v31; v29 = v33; *((_DWORD *)v24 + 1) = v28; v24[2] = v29; if ( !v38 ) return 1; *v38 = v37; return 1; } // AB5270: using guessed type int dword_AB5270; // AB5274: using guessed type int dword_AB5274; //----- (0069C170) -------------------------------------------------------- signed int __thiscall sub_69C170(float *this, int a2, int a3, int a4, int a5, char a6) { float *v6; // esi int v7; // ebx int v8; // eax int v9; // edi void (__thiscall ***v10)(_DWORD, signed int); // edi void **v11; // eax signed int result; // eax int v13; // edi int v14; // eax _DWORD *v15; // eax int v16; // [esp+10h] [ebp-14h] float v17; // [esp+14h] [ebp-10h] int v18; // [esp+20h] [ebp-4h] int v19; // [esp+38h] [ebp+14h] v6 = this; v17 = 0.0; sub_69BE40( this, *(_DWORD *)a3, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), *(_DWORD *)a4, *(_DWORD *)(a4 + 4), *(_DWORD *)(a4 + 8), a5, &v17); if ( !dword_ADB4F8 ) return 0; v7 = *sub_69C790(v6, &v16); v8 = *((_DWORD *)v6 + 143147); v9 = *(_DWORD *)(v8 + 24); v18 = 0; v19 = v8; if ( v9 != v7 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *(_DWORD *)(v19 + 24) = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v10 = (void (__thiscall ***)(_DWORD, signed int))v16; v18 = -1; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v10 ) (**v10)(v10, 1); if ( !sub_444720(*((_DWORD **)v6 + 143147), (float *)a3, (float *)a4) ) { if ( dword_ADB4F8 == 2 ) { sub_6DCBA0((int)v6, 0xFFFF); return 10; } return 0; } v11 = (void **)sub_444750(*((_DWORD **)v6 + 143147), 0); if ( dword_ADB4F8 == 1 ) { if ( !a6 ) { v15 = (_DWORD *)sub_6DB5A0(v6, (int)v11); if ( v15[1] == 60000 ) return 9; sub_6DE060(v6, v15, 1); } result = 8; } else if ( dword_ADB4F8 == 2 ) { v13 = sub_6DB5A0(v6, (int)v11); if ( v13 ) { v14 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v14 + 1124) + 260))() ) { OutputDebugStringA(asc_9F67C8); sub_6DCBA0((int)v6, *(unsigned __int16 *)(v13 + 4)); } } result = 5; } else { if ( !a6 && dword_ADB4FC == 2 ) sub_6DFB70(v6, v11, 3, 0); result = 5; } return result; } // ADB4F8: using guessed type int dword_ADB4F8; // ADB4FC: using guessed type int dword_ADB4FC; //----- (0069C3E0) -------------------------------------------------------- signed int __thiscall sub_69C3E0(float *this, int a2, int a3, char **a4, int a5, int *a6, signed __int16 *a7) { float *v7; // ebx float *v8; // esi int *v9; // edx int v10; // ecx float *v11; // edi float v12; // edx char v13; // al bool v14; // zf char v15; // cl int v16; // eax int v17; // edx double v18; // st7 float *v19; // eax float *v20; // eax double v21; // st4 float *v22; // eax double v23; // st3 double v24; // st2 double v25; // st4 int v26; // eax signed int result; // eax double v28; // st5 signed __int16 v29; // ax bool v30; // c0 double v31; // st7 int v32; // [esp+8h] [ebp-1Ch] float v33; // [esp+Ch] [ebp-18h] float v34; // [esp+10h] [ebp-14h] float v35; // [esp+14h] [ebp-10h] float v36; // [esp+18h] [ebp-Ch] int v37; // [esp+1Ch] [ebp-8h] char v38; // [esp+23h] [ebp-1h] char v39; // [esp+2Fh] [ebp+Bh] char v40; // [esp+33h] [ebp+Fh] v34 = 3.4028235e38; v7 = (float *)a2; v35 = 3.4028235e38; v33 = 3.4028235e38; v8 = this; v36 = 3.4028235e38; *a7 = -1; v9 = a6; *a4 = 0; v10 = a5; *v9 = 0; v11 = (float *)a3; v12 = *(float *)a3; v37 = 0; v32 = 0; v13 = sub_69BE40( v8, *(_DWORD *)a2, *(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 8), SLOBYTE(v12), *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), v10, &v35); v14 = *((_DWORD *)v8 + 41) == 0; v38 = v13; if ( !v14 || *((_DWORD *)v8 + 36) == 3 ) return 0; v39 = sub_69AEF0(v8, (float *)a2, (float *)a3, a4, &v36); sub_416A10(*((_DWORD **)v8 + 143147), *((_DWORD *)v8 + 135)); v40 = sub_444720(*((_DWORD **)v8 + 143147), v7, (float *)a3); if ( v40 ) { v33 = sub_444690((_DWORD *)*((_DWORD *)v8 + 143147), 0); v32 = sub_444750(*((_DWORD **)v8 + 143147), 0); } sub_416A10(*((_DWORD **)v8 + 143147), *((_DWORD *)v8 + 140)); v15 = sub_444720(*((_DWORD **)v8 + 143147), v7, v11); HIBYTE(a4) = v15; if ( v15 ) { v34 = sub_444690((_DWORD *)*((_DWORD *)v8 + 143147), 0); v16 = sub_444750(*((_DWORD **)v8 + 143147), 0); v15 = HIBYTE(a4); v17 = v16; } else { v17 = 0; } v18 = v36; v19 = &v36; if ( v35 <= (double)v36 ) v19 = &v35; a4 = *(char ***)v19; v20 = &v34; if ( *(float *)&a4 <= (double)v34 ) v20 = (float *)&a4; a4 = *(char ***)v20; v21 = v33; v22 = &v33; if ( *(float *)&a4 <= (double)v33 ) v22 = (float *)&a4; a4 = *(char ***)v22; v23 = *(float *)&a4; if ( v40 && v21 - 40.0 < v23 ) { v24 = v21 + 40.0; v25 = 40.0; if ( v24 > v23 ) { v37 = 3; v26 = sub_699F30(v32); *a6 = v26; return v37; } } else { v25 = 40.0; } if ( v15 && v34 - v25 < v23 ) { v28 = *(float *)&a4; if ( v34 + v25 > *(float *)&a4 ) { v37 = 4; v29 = sub_699FA0(v17); *a7 = v29; return v37; } } else { v28 = *(float *)&a4; } if ( v39 && v18 - v25 < v28 ) { v30 = v28 < v18 + v25; v31 = v28; if ( v30 ) return 1; } else { v31 = v28; } if ( !v38 || v35 != v31 ) return v37; result = sub_69C170(v8, dword_ADB4F8, (int)v7, (int)v11, a5, 1); if ( result ) { v37 = result; } else { v37 = 2; result = 2; } return result; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (0069C6A0) -------------------------------------------------------- signed int __thiscall sub_69C6A0(float *this, int a2, int a3, char **a4, int a5, int *a6, signed __int16 *a7) { return sub_69C3E0(this, a2, a3, a4, a5, a6, a7); } //----- (0069C6B0) -------------------------------------------------------- signed int __thiscall sub_69C6B0(float *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, int a5) { float *v5; // ebx float v7; // [esp+4h] [ebp-4h] v7 = 3.4028235e38; *a4 = 0; v5 = this; if ( dword_ADB4F8 == 3 && *((_DWORD *)this + 41) ) return 6 - (sub_6DE500(this, 0, 0) != 1); sub_69BE40(this, *a2, a2[1], a2[2], *a3, a3[1], a3[2], a5, &v7); return sub_69C170(v5, dword_ADB4F8, (int)a2, (int)a3, a5, 0); } // ADB4F8: using guessed type int dword_ADB4F8; //----- (0069C760) -------------------------------------------------------- double __thiscall sub_69C760(float *this, float *a2) { return (float)(a2[1] * this[1] + *a2 * *this + a2[2] * this[2]); } //----- (0069C790) -------------------------------------------------------- _DWORD *__thiscall sub_69C790(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[38]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (0069C7C0) -------------------------------------------------------- _DWORD *__thiscall sub_69C7C0(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 33) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 33) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 33) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 33) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 33); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 33) ) goto LABEL_11; return result; } //----- (0069C820) -------------------------------------------------------- float *__thiscall sub_69C820(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[227]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 10.0; } return result; } //----- (0069C8F0) -------------------------------------------------------- char __thiscall sub_69C8F0(float *this, int a2, int a3) { float *v3; // esi float *v5; // eax float *v6; // eax float v7; // ST14_4 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST08_4 float v11; // ST0C_4 float v12; // ST10_4 float v13; // [esp+34h] [ebp+8h] float v14; // [esp+34h] [ebp+8h] float v15; // [esp+34h] [ebp+8h] float v16; // [esp+34h] [ebp+8h] float v17; // [esp+38h] [ebp+Ch] v3 = this; if ( !a2 ) return 0; if ( a3 ) { v5 = (float *)(*(int (**)(void))(*(_DWORD *)a2 + 196))(); v3[9] = *v5; v3[10] = v5[1]; v3[11] = v5[2]; v6 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)a3 + 196))(a3); v3[12] = *v6; v3[13] = v6[1]; v3[14] = v6[2]; v7 = v3[6] - v3[9]; v8 = v3[7] - v3[10]; v9 = v3[8] - v3[11]; v10 = v3[6] - v3[12]; v11 = v3[7] - v3[13]; v12 = v3[8] - v3[14]; v13 = v8 * v8 + v7 * v7 + v9 * v9; v14 = sqrt(v13); v17 = v14; v15 = v10 * v10 + v11 * v11 + v12 * v12; v16 = sqrt(v15); if ( v17 >= (double)v16 ) return 0; } return 1; } //----- (0069CA10) -------------------------------------------------------- char __thiscall sub_69CA10(_DWORD **this, _DWORD **a2) { if ( !a2 ) return 0; (*(void (__stdcall **)(_DWORD **, _DWORD))(*this[135] + 116))(a2, 0); sub_85BED0(a2, 0.0, 0); sub_85C6F0(a2); sub_85C4D0(a2); return 1; } //----- (0069CA60) -------------------------------------------------------- char __thiscall sub_69CA60(_DWORD **this, int a2) { void (__thiscall ***v3)(_DWORD, signed int); // esi if ( !a2 ) return 0; (*(void (__stdcall **)(int *, int))(*this[135] + 120))(&a2, a2); if ( a2 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } return 1; } //----- (0069CAB0) -------------------------------------------------------- char __thiscall sub_69CAB0(_DWORD **this, _DWORD **a2) { if ( !a2 ) return 0; (*(void (__stdcall **)(_DWORD **, _DWORD))(*this[140] + 116))(a2, 0); sub_85BED0(a2, 0.0, 0); sub_85C6F0(a2); sub_85C4D0(a2); return 1; } //----- (0069CB00) -------------------------------------------------------- char __thiscall sub_69CB00(_DWORD **this, int a2) { void (__thiscall ***v3)(_DWORD, signed int); // esi if ( !a2 ) return 0; (*(void (__stdcall **)(int *, int))(*this[140] + 120))(&a2, a2); if ( a2 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } return 1; } //----- (0069CB50) -------------------------------------------------------- char __thiscall sub_69CB50(_DWORD **this, _DWORD **a2) { if ( !a2 ) return 0; (*(void (__stdcall **)(_DWORD **, signed int))(*this[151] + 116))(a2, 1); sub_85BED0(a2, 0.0, 0); sub_85C6F0(a2); sub_85C4D0(a2); return 1; } //----- (0069CBA0) -------------------------------------------------------- char __thiscall sub_69CBA0(_DWORD *this, int a2) { int v3; // ecx void (__thiscall ***v4)(_DWORD, signed int); // esi if ( !a2 ) return 0; v3 = this[151]; if ( v3 ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)v3 + 120))(&a2, a2); v4 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 ) { if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } return 1; } //----- (0069CC00) -------------------------------------------------------- _DWORD *__thiscall sub_69CC00(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax result = this; this[6] = *a2; this[7] = a2[1]; this[8] = a2[2]; *this = *a3; this[1] = a3[1]; this[2] = a3[2]; return result; } //----- (0069CC30) -------------------------------------------------------- int __thiscall sub_69CC30(_DWORD *this, float a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ecx int v5; // edx int v6; // edi _DWORD *v7; // eax _DWORD *v8; // eax int v9; // ecx int v10; // edx int result; // eax int v12; // esi float v13; // ST18_4 v2 = this; v3 = (int *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 208))(); v4 = *v3; v5 = v3[1]; v6 = v3[2]; v7 = (_DWORD *)v2[149]; v7[22] = v4; v7[23] = v5; v7[24] = v6; sub_85BED0((_DWORD **)v2[149], a2, 0); v8 = (_DWORD *)*((_DWORD *)dword_AD8EBC + 175); v9 = v8[35]; v10 = v8[36]; result = v8[37]; v12 = v2[143]; if ( v12 ) { *(_DWORD *)(v12 + 88) = v9; *(_DWORD *)(v12 + 92) = v10; v13 = *(float *)&result - 100.0; *(float *)(v12 + 96) = v13; } return result; } //----- (0069CCC0) -------------------------------------------------------- char __thiscall sub_69CCC0(int this, int a2, int a3) { char result; // al _DWORD *v4; // eax _DWORD *v5; // eax float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST04_4 float v10; // ST08_4 float v11; // ST0C_4 float v12; // [esp+30h] [ebp+8h] float v13; // [esp+30h] [ebp+8h] float v14; // [esp+30h] [ebp+8h] float v15; // [esp+30h] [ebp+8h] float v16; // [esp+34h] [ebp+Ch] if ( !a2 ) goto LABEL_8; if ( !a3 ) goto LABEL_9; v4 = *(_DWORD **)(a2 + 12); *(_DWORD *)(this + 36) = v4[22]; *(_DWORD *)(this + 40) = v4[23]; *(_DWORD *)(this + 44) = v4[24]; v5 = *(_DWORD **)(a3 + 12); *(_DWORD *)(this + 48) = v5[22]; *(_DWORD *)(this + 52) = v5[23]; *(_DWORD *)(this + 56) = v5[24]; v6 = *(float *)(this + 24) - *(float *)(this + 36); v7 = *(float *)(this + 28) - *(float *)(this + 40); v8 = *(float *)(this + 32) - *(float *)(this + 44); v9 = *(float *)(this + 24) - *(float *)(this + 48); v10 = *(float *)(this + 28) - *(float *)(this + 52); v11 = *(float *)(this + 32) - *(float *)(this + 56); v12 = v7 * v7 + v6 * v6 + v8 * v8; v13 = sqrt(v12); v16 = v13; v14 = v9 * v9 + v10 * v10 + v11 * v11; v15 = sqrt(v14); if ( v16 < (double)v15 ) LABEL_9: result = 1; else LABEL_8: result = 0; return result; } //----- (0069CDC0) -------------------------------------------------------- char __thiscall sub_69CDC0(char *this) { char *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // edi _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi _DWORD *v11; // eax _DWORD *v12; // ebx int v13; // edi _DWORD *v14; // eax _DWORD *v15; // ebx int v16; // edi _DWORD *v17; // eax _DWORD *v18; // ebx int v19; // edi _DWORD *v20; // eax _DWORD *v21; // ebx int v22; // edi _DWORD *v23; // eax _DWORD *v24; // ebx int v25; // edi _DWORD *v26; // eax _DWORD *v27; // ebx int v28; // edi _DWORD *v29; // eax _DWORD *v30; // ebx int v31; // edi _DWORD *v32; // eax _DWORD *v33; // ebx int v34; // edi _DWORD *v35; // eax _DWORD *v36; // ebx int v37; // edi _DWORD *v38; // eax _DWORD *v39; // ebx int v40; // edi _DWORD *v41; // eax _DWORD *v42; // ebx int v43; // edi _DWORD *v44; // eax _DWORD *v45; // ebx int v46; // edi _DWORD *v47; // eax _DWORD *v48; // ebx int v49; // edi int v50; // ebx _DWORD *v51; // eax int v52; // edi _DWORD *v53; // eax int v54; // edi _DWORD *v55; // eax int v56; // edi _DWORD *v57; // eax _DWORD *v58; // ebx int v59; // edi _DWORD *v60; // eax _DWORD *v61; // ebx int v62; // edi int v63; // edi _DWORD *v64; // eax int v65; // edi void *v66; // eax float *v67; // edi int v68; // eax int v69; // eax int v70; // ecx int v71; // edx _DWORD *v72; // eax _DWORD *v73; // edi double v74; // st7 float v75; // ST18_4 float v76; // ST1C_4 float v77; // ST20_4 __int16 v78; // dx volatile LONG *v79; // eax volatile LONG *v80; // edi _DWORD *v81; // eax _DWORD *v82; // ebx int v83; // edi _DWORD *v84; // eax _DWORD *v85; // ebx int v86; // edi _DWORD *v87; // eax _DWORD *v88; // ebx int v89; // edi _DWORD *v90; // eax _DWORD *v91; // ebx int v92; // edi int *v93; // ebx int v94; // edi int v95; // edi _DWORD *v96; // eax _DWORD *v97; // eax void (__thiscall ***v98)(_DWORD, signed int); // esi void (__thiscall ***v99)(_DWORD, signed int); // esi void (__thiscall ***v100)(_DWORD, signed int); // esi void *v102; // [esp+24h] [ebp-20h] int v103; // [esp+28h] [ebp-1Ch] int v104; // [esp+2Ch] [ebp-18h] int v105; // [esp+30h] [ebp-14h] int v106; // [esp+34h] [ebp-10h] int v107; // [esp+40h] [ebp-4h] v1 = this; v2 = operator new(0xE8u); v102 = v2; v3 = 0; v107 = 0; if ( v2 ) v3 = sub_85A1C0(v2, 0); v4 = *((_DWORD *)v1 + 133); v107 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 133) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v5 = operator new(0xE8u); v102 = v5; v107 = 1; if ( v5 ) v6 = sub_85A1C0(v5, 0); else v6 = 0; v7 = *((_DWORD *)v1 + 134); v107 = -1; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *((_DWORD *)v1 + 134) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } v8 = operator new(0xE8u); v102 = v8; v107 = 2; if ( v8 ) v9 = sub_85A1C0(v8, 0); else v9 = 0; v10 = *((_DWORD *)v1 + 135); v107 = -1; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v1 + 135) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v11 = operator new(0xE8u); v102 = v11; v107 = 3; if ( v11 ) v12 = sub_85A1C0(v11, 0); else v12 = 0; v13 = *((_DWORD *)v1 + 136); v107 = -1; if ( (_DWORD *)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *((_DWORD *)v1 + 136) = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } v14 = operator new(0xE8u); v102 = v14; v107 = 4; if ( v14 ) v15 = sub_85A1C0(v14, 0); else v15 = 0; v16 = *((_DWORD *)v1 + 137); v107 = -1; if ( (_DWORD *)v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *((_DWORD *)v1 + 137) = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } v17 = operator new(0xE8u); v102 = v17; v107 = 5; if ( v17 ) v18 = sub_85A1C0(v17, 0); else v18 = 0; v19 = *((_DWORD *)v1 + 150); v107 = -1; if ( (_DWORD *)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *((_DWORD *)v1 + 150) = v18; if ( v18 ) InterlockedIncrement(v18 + 1); } v20 = operator new(0xE8u); v102 = v20; v107 = 6; if ( v20 ) v21 = sub_85A1C0(v20, 0); else v21 = 0; v22 = *((_DWORD *)v1 + 151); v107 = -1; if ( (_DWORD *)v22 != v21 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); *((_DWORD *)v1 + 151) = v21; if ( v21 ) InterlockedIncrement(v21 + 1); } v23 = operator new(0xE8u); v102 = v23; v107 = 7; if ( v23 ) v24 = sub_85A1C0(v23, 0); else v24 = 0; v25 = *((_DWORD *)v1 + 149); v107 = -1; if ( (_DWORD *)v25 != v24 ) { if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); *((_DWORD *)v1 + 149) = v24; if ( v24 ) InterlockedIncrement(v24 + 1); } v26 = operator new(0xE8u); v102 = v26; v107 = 8; if ( v26 ) v27 = sub_85A1C0(v26, 0); else v27 = 0; v28 = *((_DWORD *)v1 + 141); v107 = -1; if ( (_DWORD *)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *((_DWORD *)v1 + 141) = v27; if ( v27 ) InterlockedIncrement(v27 + 1); } v29 = operator new(0xE8u); v102 = v29; v107 = 9; if ( v29 ) v30 = sub_85A1C0(v29, 0); else v30 = 0; v31 = *((_DWORD *)v1 + 142); v107 = -1; if ( (_DWORD *)v31 != v30 ) { if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); *((_DWORD *)v1 + 142) = v30; if ( v30 ) InterlockedIncrement(v30 + 1); } v32 = operator new(0xE8u); v102 = v32; v107 = 10; if ( v32 ) v33 = sub_85A1C0(v32, 0); else v33 = 0; v34 = *((_DWORD *)v1 + 140); v107 = -1; if ( (_DWORD *)v34 != v33 ) { if ( v34 && !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); *((_DWORD *)v1 + 140) = v33; if ( v33 ) InterlockedIncrement(v33 + 1); } v35 = operator new(0xE8u); v102 = v35; v107 = 11; if ( v35 ) v36 = sub_85A1C0(v35, 0); else v36 = 0; v37 = *((_DWORD *)v1 + 139); v107 = -1; if ( (_DWORD *)v37 != v36 ) { if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); *((_DWORD *)v1 + 139) = v36; if ( v36 ) InterlockedIncrement(v36 + 1); } v38 = operator new(0xECu); v102 = v38; v107 = 12; if ( v38 ) v39 = sub_861B30(v38); else v39 = 0; v40 = *((_DWORD *)v1 + 146); v107 = -1; if ( (_DWORD *)v40 != v39 ) { if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v40 ) (**(void (__thiscall ***)(int, signed int))v40)(v40, 1); *((_DWORD *)v1 + 146) = v39; if ( v39 ) InterlockedIncrement(v39 + 1); } sub_85AB50(*((void ***)v1 + 146), "[PN]"); *(_DWORD *)(*((_DWORD *)v1 + 146) + 232) = 0; v41 = operator new(0xE8u); v102 = v41; v107 = 13; if ( v41 ) v42 = sub_85A1C0(v41, 0); else v42 = 0; v43 = *((_DWORD *)v1 + 138); v107 = -1; if ( (_DWORD *)v43 != v42 ) { if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v43 ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); *((_DWORD *)v1 + 138) = v42; if ( v42 ) InterlockedIncrement(v42 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 146) + 116))(*((_DWORD *)v1 + 138), 0); v44 = operator new(0xE8u); v102 = v44; v107 = 14; if ( v44 ) v45 = sub_85A1C0(v44, 0); else v45 = 0; v46 = *((_DWORD *)v1 + 148); v107 = -1; if ( (_DWORD *)v46 != v45 ) { if ( v46 && !InterlockedDecrement((volatile LONG *)(v46 + 4)) && v46 ) (**(void (__thiscall ***)(int, signed int))v46)(v46, 1); *((_DWORD *)v1 + 148) = v45; if ( v45 ) InterlockedIncrement(v45 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 146) + 116))(*((_DWORD *)v1 + 148), 0); v47 = operator new(0xE8u); v102 = v47; v107 = 15; if ( v47 ) v48 = sub_85A1C0(v47, 0); else v48 = 0; v49 = *((_DWORD *)v1 + 147); v107 = -1; if ( (_DWORD *)v49 != v48 ) { if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v49 ) (**(void (__thiscall ***)(int, signed int))v49)(v49, 1); *((_DWORD *)v1 + 147) = v48; if ( v48 ) InterlockedIncrement(v48 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 146) + 116))(*((_DWORD *)v1 + 147), 0); v50 = 0; v103 = 0; v107 = 16; v51 = operator new(0x20u); v52 = (int)v51; v102 = v51; LOBYTE(v107) = 17; if ( v51 ) { sub_85B2B0(v51); *(_BYTE *)(v52 + 30) = 0; *(_DWORD *)v52 = &NiAlphaProperty::`vftable'; *(_WORD *)(v52 + 28) = 236; v50 = v52; v103 = v52; InterlockedIncrement((volatile LONG *)(v52 + 4)); } *(_WORD *)(v50 + 28) |= 1u; *(_WORD *)(v50 + 28) |= 0x200u; *(_WORD *)(v50 + 28) = *(_WORD *)(v50 + 28) & 0xF3FF | 0x1000; *(_BYTE *)(v50 + 30) = 8; *(_WORD *)(v50 + 28) = (*(_WORD *)(v50 + 28) & 0xFE5F | 0x40) & 0xFFE3 | 2; v105 = *((_DWORD *)v1 + 137); v104 = v50; InterlockedIncrement((volatile LONG *)(v50 + 4)); LOBYTE(v107) = 18; sub_8A6330((_DWORD *)(v105 + 156), &v104); LOBYTE(v107) = 16; if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); v53 = operator new(0x28u); v54 = (int)v53; v102 = v53; LOBYTE(v107) = 19; if ( v53 ) { sub_85B2B0(v53); *(_DWORD *)v54 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v54 + 28) = 0; *(_DWORD *)(v54 + 32) = 0; *(_DWORD *)(v54 + 36) = 1; } else { v54 = 0; } v104 = v54; if ( v54 ) InterlockedIncrement((volatile LONG *)(v54 + 4)); *(_DWORD *)(v54 + 32) = 1; *(_DWORD *)(v54 + 36) = 1; v106 = *((_DWORD *)v1 + 137); v105 = v54; InterlockedIncrement((volatile LONG *)(v54 + 4)); LOBYTE(v107) = 21; sub_8A6330((_DWORD *)(v106 + 156), &v105); LOBYTE(v107) = 20; if ( !InterlockedDecrement((volatile LONG *)(v54 + 4)) ) (**(void (__thiscall ***)(int, signed int))v54)(v54, 1); v55 = operator new(0x30u); v56 = (int)v55; v102 = v55; LOBYTE(v107) = 22; if ( v55 ) { sub_85B2B0(v55); *(_DWORD *)v56 = &NiFogProperty::`vftable'; *(float *)(v56 + 36) = 0.0; *(float *)(v56 + 40) = 0.0; *(float *)(v56 + 44) = 0.0; *(_WORD *)(v56 + 28) = 0; *(float *)(v56 + 32) = 1.0; *(_DWORD *)(v56 + 36) = dword_BA4724; *(_DWORD *)(v56 + 40) = dword_BA4728; *(_DWORD *)(v56 + 44) = dword_BA472C; } else { v56 = 0; } *(_WORD *)(v56 + 28) &= 0xFFFEu; v106 = *((_DWORD *)v1 + 137); v105 = v56; InterlockedIncrement((volatile LONG *)(v56 + 4)); LOBYTE(v107) = 23; sub_8A6330((_DWORD *)(v106 + 156), &v105); LOBYTE(v107) = 20; if ( !InterlockedDecrement((volatile LONG *)(v56 + 4)) ) (**(void (__thiscall ***)(int, signed int))v56)(v56, 1); v57 = operator new(0xECu); v102 = v57; LOBYTE(v107) = 24; if ( v57 ) v58 = sub_861B30(v57); else v58 = 0; v59 = *((_DWORD *)v1 + 144); LOBYTE(v107) = 20; if ( (_DWORD *)v59 != v58 ) { if ( v59 && !InterlockedDecrement((volatile LONG *)(v59 + 4)) && v59 ) (**(void (__thiscall ***)(int, signed int))v59)(v59, 1); *((_DWORD *)v1 + 144) = v58; if ( v58 ) InterlockedIncrement(v58 + 1); } *(_DWORD *)(*((_DWORD *)v1 + 144) + 232) = 1; v60 = operator new(0xE8u); v102 = v60; LOBYTE(v107) = 25; if ( v60 ) v61 = sub_85A1C0(v60, 0); else v61 = 0; v62 = *((_DWORD *)v1 + 145); LOBYTE(v107) = 20; if ( (_DWORD *)v62 != v61 ) { if ( v62 && !InterlockedDecrement((volatile LONG *)(v62 + 4)) && v62 ) (**(void (__thiscall ***)(int, signed int))v62)(v62, 1); *((_DWORD *)v1 + 145) = v61; if ( v61 ) InterlockedIncrement(v61 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 136) + 116))(*((_DWORD *)v1 + 144), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 145) + 116))(*((_DWORD *)v1 + 136), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 145) + 116))(*((_DWORD *)v1 + 146), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 145), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 139), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 139) + 116))(*((_DWORD *)v1 + 134), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 137), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 135), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 139) + 116))(*((_DWORD *)v1 + 140), 0); v63 = *((_DWORD *)v1 + 143); if ( v63 ) { if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) && v63 ) (**(void (__thiscall ***)(int, signed int))v63)(v63, 1); *((_DWORD *)v1 + 143) = 0; } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 150), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 141) + 116))(*((_DWORD *)v1 + 151), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 133) + 116))(*((_DWORD *)v1 + 141), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v1 + 133) + 116))(*((_DWORD *)v1 + 142), 0); v64 = operator new(0x28u); v65 = (int)v64; v102 = v64; LOBYTE(v107) = 26; if ( v64 ) { sub_85B2B0(v64); *(_DWORD *)v65 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v65 + 28) = 0; *(_DWORD *)(v65 + 32) = 0; *(_DWORD *)(v65 + 36) = 1; } else { v65 = 0; } v105 = v65; if ( v65 ) InterlockedIncrement((volatile LONG *)(v65 + 4)); *(_DWORD *)(v65 + 32) = 2; *(_DWORD *)(v65 + 36) = 1; v102 = (void *)*((_DWORD *)v1 + 133); v106 = v65; InterlockedIncrement((volatile LONG *)(v65 + 4)); LOBYTE(v107) = 28; sub_8A6330((_DWORD *)v102 + 39, &v106); LOBYTE(v107) = 27; if ( !InterlockedDecrement((volatile LONG *)(v65 + 4)) ) (**(void (__thiscall ***)(int, signed int))v65)(v65, 1); v66 = operator new(0x60u); v102 = v66; LOBYTE(v107) = 29; if ( v66 ) v67 = sub_85EBC0((float *)v66); else v67 = 0; *((_DWORD *)v67 + 8) = dword_ABD4FC; *((_DWORD *)v67 + 9) = dword_ABD500; v68 = dword_ABD504; ++*((_DWORD *)v67 + 22); *((_DWORD *)v67 + 10) = v68; v69 = *((_DWORD *)v67 + 22); *((_DWORD *)v67 + 11) = dword_ABD4FC; *((_DWORD *)v67 + 12) = dword_ABD500; v70 = dword_ABD504; *((_DWORD *)v67 + 22) = ++v69; *((_DWORD *)v67 + 13) = v70; *((_DWORD *)v67 + 17) = dword_BA4724; *((_DWORD *)v67 + 18) = dword_BA4728; v71 = dword_BA472C; v67[21] = 1.0; *((_DWORD *)v67 + 19) = v71; *((_DWORD *)v67 + 22) = v69 + 2; v106 = *((_DWORD *)v1 + 133); v102 = v67; InterlockedIncrement((volatile LONG *)v67 + 1); LOBYTE(v107) = 30; sub_8A6330((_DWORD *)(v106 + 156), (int *)&v102); LOBYTE(v107) = 27; if ( !InterlockedDecrement((volatile LONG *)v67 + 1) ) (**(void (__thiscall ***)(float *, signed int))v67)(v67, 1); v72 = operator new(0x30u); v73 = v72; v102 = v72; LOBYTE(v107) = 31; if ( v72 ) { sub_85B2B0(v72); *v73 = &NiFogProperty::`vftable'; *((float *)v73 + 9) = 0.0; *((float *)v73 + 10) = 0.0; *((float *)v73 + 11) = 0.0; v74 = 1.0; *((_WORD *)v73 + 14) = 0; *((float *)v73 + 8) = 1.0; v73[9] = dword_BA4724; v73[10] = dword_BA4728; v73[11] = dword_BA472C; } else { v74 = 1.0; v73 = 0; } *((float *)v73 + 8) = 0.60000002; v102 = v73; v75 = v74; *((float *)v73 + 9) = v75; v76 = v74; v77 = v74; v78 = *((_WORD *)v73 + 14); *((float *)v73 + 10) = v76; *((float *)v73 + 11) = v77; *((_WORD *)v73 + 14) = v78 & 0xFFF9 | 1; v106 = *((_DWORD *)v1 + 133); InterlockedIncrement(v73 + 1); LOBYTE(v107) = 32; sub_8A6330((_DWORD *)(v106 + 156), (int *)&v102); LOBYTE(v107) = 27; if ( !InterlockedDecrement(v73 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v73)(v73, 1); v79 = (volatile LONG *)operator new(0x24u); v80 = v79; v102 = (void *)v79; LOBYTE(v107) = 33; if ( v79 ) { sub_85B2B0(v79); *v80 = (volatile LONG)&NiZBufferProperty::`vftable'; *((_WORD *)v80 + 14) = 3; *((_DWORD *)v80 + 8) = 3; } else { v80 = 0; } *((_WORD *)v80 + 14) &= 0xFFFCu; v106 = *((_DWORD *)v1 + 149); v102 = (void *)v80; InterlockedIncrement(v80 + 1); LOBYTE(v107) = 34; sub_8A6330((_DWORD *)(v106 + 156), (int *)&v102); LOBYTE(v107) = 27; if ( !InterlockedDecrement(v80 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v80)(v80, 1); v81 = operator new(0xE8u); v102 = v81; LOBYTE(v107) = 35; if ( v81 ) v82 = sub_85A1C0(v81, 0); else v82 = 0; v83 = *((_DWORD *)v1 + 152); LOBYTE(v107) = 27; if ( (_DWORD *)v83 != v82 ) { if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) && v83 ) (**(void (__thiscall ***)(int, signed int))v83)(v83, 1); *((_DWORD *)v1 + 152) = v82; if ( v82 ) InterlockedIncrement(v82 + 1); } v84 = operator new(0xE8u); v102 = v84; LOBYTE(v107) = 36; if ( v84 ) v85 = sub_85A1C0(v84, 0); else v85 = 0; v86 = *((_DWORD *)v1 + 153); LOBYTE(v107) = 27; if ( (_DWORD *)v86 != v85 ) { if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v86 ) (**(void (__thiscall ***)(int, signed int))v86)(v86, 1); *((_DWORD *)v1 + 153) = v85; if ( v85 ) InterlockedIncrement(v85 + 1); } v87 = operator new(0xE8u); v102 = v87; LOBYTE(v107) = 37; if ( v87 ) v88 = sub_85A1C0(v87, 0); else v88 = 0; v89 = *((_DWORD *)v1 + 154); LOBYTE(v107) = 27; if ( (_DWORD *)v89 != v88 ) { if ( v89 && !InterlockedDecrement((volatile LONG *)(v89 + 4)) && v89 ) (**(void (__thiscall ***)(int, signed int))v89)(v89, 1); *((_DWORD *)v1 + 154) = v88; if ( v88 ) InterlockedIncrement(v88 + 1); } v90 = operator new(0xE8u); v102 = v90; LOBYTE(v107) = 38; if ( v90 ) v91 = sub_85A1C0(v90, 0); else v91 = 0; v92 = *((_DWORD *)v1 + 155); LOBYTE(v107) = 27; if ( (_DWORD *)v92 != v91 ) { if ( v92 && !InterlockedDecrement((volatile LONG *)(v92 + 4)) && v92 ) (**(void (__thiscall ***)(int, signed int))v92)(v92, 1); *((_DWORD *)v1 + 155) = v91; if ( v91 ) InterlockedIncrement(v91 + 1); } v93 = (int *)(v1 + 572844); v106 = 30; do { *(v93 - 2) = 0; v94 = *v93; if ( *v93 ) { if ( !InterlockedDecrement((volatile LONG *)(v94 + 4)) && v94 ) (**(void (__thiscall ***)(int, signed int))v94)(v94, 1); *v93 = 0; } v95 = *(v93 - 1); if ( v95 ) { if ( !InterlockedDecrement((volatile LONG *)(v95 + 4)) && v95 ) (**(void (__thiscall ***)(int, signed int))v95)(v95, 1); *(v93 - 1) = 0; } v93 += 3; --v106; } while ( v106 ); v96 = operator new(0x2Cu); v102 = v96; LOBYTE(v107) = 39; if ( v96 ) v97 = sub_8E6C90(v96); else v97 = 0; *((_DWORD *)v1 + 143334) = v97; v98 = (void (__thiscall ***)(_DWORD, signed int))v105; LOBYTE(v107) = 20; if ( !InterlockedDecrement((volatile LONG *)(v105 + 4)) ) (**v98)(v98, 1); v99 = (void (__thiscall ***)(_DWORD, signed int))v104; LOBYTE(v107) = 16; if ( !InterlockedDecrement((volatile LONG *)(v104 + 4)) ) (**v99)(v99, 1); v100 = (void (__thiscall ***)(_DWORD, signed int))v103; v107 = -1; if ( !InterlockedDecrement((volatile LONG *)(v103 + 4)) ) (**v100)(v100, 1); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (0069DEF0) -------------------------------------------------------- void __thiscall sub_69DEF0(_DWORD *this) { _DWORD *v1; // esi unsigned int i; // eax int v3; // edx int v4; // edi int v5; // edi int v6; // edi int v7; // edi int *v8; // edi int v9; // ebx int v10; // ebx int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi int v18; // edi int v19; // edi int v20; // edi int v21; // edi int v22; // edi int v23; // edi int v24; // edi int v25; // edi int v26; // edi int v27; // edi int v28; // edi int v29; // edi void *v30; // edi void (__stdcall ***v31)(signed int); // ecx signed int v32; // [esp+14h] [ebp-4h] v1 = this; sub_692640(*(void **)(this[143192] + 4)); *(_DWORD *)(v1[143192] + 4) = v1[143192]; *(_DWORD *)v1[143192] = v1[143192]; *(_DWORD *)(v1[143192] + 8) = v1[143192]; v1[143193] = 0; sub_8D0790((float *)v1 + 143310, 0, 0, 0.0, 0); sub_8D0790((float *)v1 + 143317, 0, 0, 0.0, 0); for ( i = 0; i < v1[143327]; ++i ) { v3 = *(_DWORD *)(v1[143325] + 4 * i); if ( v3 ) *(_WORD *)(v3 + 28) |= 2u; } sub_8D8240(v1 + 143324); v4 = v1[152]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[152] = 0; } v5 = v1[153]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[153] = 0; } v6 = v1[155]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[155] = 0; } v7 = v1[154]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[154] = 0; } v8 = v1 + 143210; v32 = 30; do { v9 = v8[1]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8[1] = 0; } v10 = *v8; if ( *v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *v8 = 0; } *(v8 - 1) = 0; v8 += 3; --v32; } while ( v32 ); v11 = v1[134]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[134] = 0; } v12 = v1[135]; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v1[135] = 0; } v13 = v1[136]; if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v1[136] = 0; } v14 = v1[138]; if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v1[138] = 0; } v15 = v1[144]; if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v1[144] = 0; } v16 = v1[141]; if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v1[141] = 0; } v17 = v1[142]; if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v1[142] = 0; } v18 = v1[140]; if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v1[140] = 0; } v19 = v1[139]; if ( v19 ) { if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v1[139] = 0; } v20 = v1[137]; if ( v20 ) { if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v1[137] = 0; } v21 = v1[146]; if ( v21 ) { if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v1[146] = 0; } v22 = v1[145]; if ( v22 ) { if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v1[145] = 0; } v23 = v1[147]; if ( v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v1[147] = 0; } v24 = v1[148]; if ( v24 ) { if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v1[148] = 0; } v25 = v1[143]; if ( v25 ) { if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); v1[143] = 0; } v26 = v1[150]; if ( v26 ) { if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v1[150] = 0; } v27 = v1[151]; if ( v27 ) { if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v1[151] = 0; } v28 = v1[149]; if ( v28 ) { if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v1[149] = 0; } v29 = v1[133]; if ( v29 ) { if ( !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); v1[133] = 0; } sub_8DBE50(v1 + 143182); v30 = (void *)v1[156]; if ( v30 ) { sub_8E2200((_DWORD *)v1[156]); operator delete(v30); } v31 = (void (__stdcall ***)(signed int))v1[143334]; v1[156] = 0; if ( v31 ) (**v31)(1); v1[143334] = 0; } //----- (0069E480) -------------------------------------------------------- char __thiscall sub_69E480(_DWORD *this, char a2) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // [esp+0h] [ebp-8h] if ( !a2 ) return 0; *(_DWORD *)&a2 = *(_DWORD *)(a2 + 700); if ( !a2 ) return 0; v3 = this + 143191; v4 = sub_69FFA0(this + 143191, &a2); sub_6A04A0(v3, (int)&v5, v4, 0); return 1; } //----- (0069E4D0) -------------------------------------------------------- int __thiscall sub_69E4D0(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; sub_8D8240((_DWORD *)(this[134] + 176)); sub_692640(*(void **)(v1[143192] + 4)); *(_DWORD *)(v1[143192] + 4) = v1[143192]; *(_DWORD *)v1[143192] = v1[143192]; result = v1[143192]; *(_DWORD *)(result + 8) = result; v1[143193] = 0; return result; } //----- (0069E520) -------------------------------------------------------- _DWORD *__thiscall sub_69E520(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx void (__thiscall ***v3)(void *, signed int); // edi int v4; // edi void *v5; // edi _DWORD *result; // eax void *v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v1 = this; sub_8D8240((_DWORD *)(this[134] + 176)); sub_692640(*(void **)(v1[143192] + 4)); *(_DWORD *)(v1[143192] + 4) = v1[143192]; *(_DWORD *)v1[143192] = v1[143192]; *(_DWORD *)(v1[143192] + 8) = v1[143192]; v1[143193] = 0; sub_8D8240((_DWORD *)(v1[135] + 176)); sub_682BC0(&unk_ADA1E0); sub_8D8240((_DWORD *)(v1[140] + 176)); sub_6E1550(&unk_B9E1CC, 0); sub_8D8240((_DWORD *)(v1[137] + 176)); sub_8D8240((_DWORD *)(v1[138] + 176)); sub_8D8240((_DWORD *)(v1[144] + 176)); sub_8D8240((_DWORD *)(v1[147] + 176)); sub_8D8240((_DWORD *)(v1[148] + 176)); if ( v1[143] ) { v2 = v1[151]; if ( v2 ) { (*(void (__stdcall **)(void **, _DWORD))(*(_DWORD *)v2 + 120))(&v7, v1[143]); if ( v7 ) { v3 = (void (__thiscall ***)(void *, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)v7 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } } v4 = v1[143]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[143] = 0; } } sub_8D8240((_DWORD *)(v1[149] + 176)); sub_8D8240((_DWORD *)(v1[150] + 176)); sub_8D8240((_DWORD *)(v1[152] + 176)); sub_8D8240((_DWORD *)(v1[153] + 176)); sub_8D8240((_DWORD *)(v1[155] + 176)); sub_8D8240((_DWORD *)(v1[154] + 176)); v5 = (void *)v1[156]; if ( v5 ) { sub_8E2200((_DWORD *)v1[156]); operator delete(v5); } v1[156] = 0; result = operator new(0x1A8u); v7 = result; v8 = 0; if ( result ) { result = sub_8E0A50(result); v1[156] = result; } else { v1[156] = 0; } return result; } //----- (0069E770) -------------------------------------------------------- int __thiscall sub_69E770(float *this, float a2) { float *v2; // edi _DWORD **v3; // ecx _DWORD *v4; // eax unsigned int v5; // esi int v6; // eax int v7; // ecx int v8; // eax int v9; // eax int *v10; // eax _DWORD *v11; // eax int v12; // eax float v13; // edx _DWORD *v14; // eax _DWORD *v15; // eax float *v16; // eax unsigned int v17; // eax int v18; // ecx int v19; // ST08_4 int v21; // [esp+24h] [ebp-74h] int v22; // [esp+28h] [ebp-70h] int v23; // [esp+2Ch] [ebp-6Ch] int v24; // [esp+30h] [ebp-68h] int v25; // [esp+34h] [ebp-64h] int v26; // [esp+38h] [ebp-60h] int v27; // [esp+3Ch] [ebp-5Ch] int v28; // [esp+40h] [ebp-58h] void **v29; // [esp+44h] [ebp-54h] int v30; // [esp+48h] [ebp-50h] int v31; // [esp+4Ch] [ebp-4Ch] _DWORD *v32; // [esp+50h] [ebp-48h] _DWORD *v33; // [esp+54h] [ebp-44h] _DWORD *v34; // [esp+58h] [ebp-40h] _DWORD *v35; // [esp+5Ch] [ebp-3Ch] float v36; // [esp+60h] [ebp-38h] float v37; // [esp+64h] [ebp-34h] char v38; // [esp+68h] [ebp-30h] char v39; // [esp+6Ch] [ebp-2Ch] _DWORD **v40; // [esp+70h] [ebp-28h] void *v41; // [esp+74h] [ebp-24h] int v42; // [esp+78h] [ebp-20h] int v43; // [esp+7Ch] [ebp-1Ch] _DWORD *v44; // [esp+80h] [ebp-18h] unsigned int v45; // [esp+84h] [ebp-14h] char v46; // [esp+8Ah] [ebp-Eh] char v47; // [esp+8Bh] [ebp-Dh] int v48; // [esp+94h] [ebp-4h] v2 = this; v3 = (_DWORD **)*((_DWORD *)this + 143299); v4 = *v3; v40 = v3; if ( v4 != v3 ) { while ( 1 ) { v5 = v4[2]; v41 = v4; v6 = *v4; v45 = v5; v44 = (_DWORD *)v6; if ( v5 ) { v21 = *(_DWORD *)(v5 + 36); v22 = *(_DWORD *)(v5 + 40); v23 = *(_DWORD *)(v5 + 44); v24 = *(_DWORD *)(v5 + 48); v25 = *(_DWORD *)(v5 + 36); v26 = *(_DWORD *)(v5 + 40); v27 = *(_DWORD *)(v5 + 44); v7 = *((_DWORD *)v2 + 143303); v28 = *(_DWORD *)(v5 + 48); v8 = *(_DWORD *)(v7 + 4); while ( !*(_BYTE *)(v8 + 33) ) { if ( *(_DWORD *)(v8 + 12) >= v5 ) { v7 = v8; v8 = *(_DWORD *)v8; } else { v8 = *(_DWORD *)(v8 + 8); } } v9 = *((_DWORD *)v2 + 143303); v43 = v7; if ( v7 == v9 || v5 < *(_DWORD *)(v7 + 12) ) { v42 = v9; v10 = &v42; } else { v10 = &v43; } v11 = (_DWORD *)*v10; if ( v11 != *((_DWORD **)v2 + 143303) ) { v25 = v11[4]; v26 = v11[5]; v27 = v11[6]; v28 = v11[7]; } v12 = sub_697ED0((_DWORD *)v2 + 143306, &v45); v13 = *(float *)(v12 + 4); v36 = *(float *)v12; v37 = v13; if ( flt_ACCFCC - v13 >= v36 ) { *(_DWORD *)(v5 + 36) = v25; *(_DWORD *)(v5 + 40) = v26; *(_DWORD *)(v5 + 44) = v27; *(_DWORD *)(v5 + 48) = v28; sub_8D0AC0((int)(v2 + 143310), (float *)v5); sub_69FE30((_DWORD *)v2 + 143306, &v34, &v45); sub_6CAB30((_DWORD *)v2 + 143306, (int *)&v39, v34, v35); sub_69FAE0((_DWORD *)v2 + 143302, &v32, &v45); sub_692320((_DWORD *)v2 + 143302, (int *)&v38, v32, v33); v15 = v41; if ( v41 != *((void **)v2 + 143299) ) { **((_DWORD **)v41 + 1) = *(_DWORD *)v41; *(_DWORD *)(*v15 + 4) = v15[1]; operator delete(v15); --*((_DWORD *)v2 + 143300); } (*(void (__stdcall **)(char *, _DWORD, char *))(**((_DWORD **)v2 + 147) + 76))(&v46, 0, &v47); sub_85C4D0(*((_DWORD **)v2 + 147)); sub_85C6F0(*((_DWORD **)v2 + 147)); sub_85BED0(*((_DWORD ***)v2 + 147), 0.0, 1); (*(void (**)(void))(**((_DWORD **)v2 + 147) + 64))(); } else { sub_86BC10((float *)&v21, (float *)&v25); v14 = (_DWORD *)sub_6A0690((_DWORD *)v2 + 143302, &v45); *v14 = v21; v14[1] = v22; v14[2] = v23; v14[3] = v24; } } if ( v44 == v40 ) break; v4 = v44; } } v2[143333] = 2000.0; v16 = (float *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v2[143330] = *v16; v2[143331] = v16[1]; v2[143332] = v16[2]; v17 = 0; if ( *((_DWORD *)v2 + 143327) ) { do { v18 = *(_DWORD *)(*((_DWORD *)v2 + 143325) + 4 * v17); if ( v18 ) *(_WORD *)(v18 + 28) |= 2u; ++v17; } while ( v17 < *((_DWORD *)v2 + 143327) ); } sub_8D8240((_DWORD *)v2 + 143324); v30 = 0; v31 = -1; v29 = &FindCullUpdateNode::`vftable'; v19 = *((_DWORD *)v2 + 146); v48 = 0; sub_8CFE00(&v29, v19, (int)dword_BA455C, (int)(v2 + 143324)); return sub_85BF10(*((_DWORD ***)v2 + 146), a2); } // 9F681C: using guessed type void *FindCullUpdateNode::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0069EA70) -------------------------------------------------------- char __thiscall sub_69EA70(_DWORD *this, int a2) { _DWORD *v2; // ebx int v4; // esi int v5; // [esp+10h] [ebp-14h] int v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = this; if ( !a2 ) return 0; v4 = *(_DWORD *)(a2 + 700); if ( !v4 ) return 0; a2 = *(_DWORD *)(a2 + 700); InterlockedIncrement((volatile LONG *)(v4 + 4)); v7 = 0; sub_6AD670(v2 + 143191, &v5, (unsigned int *)&a2); sub_692790(v2 + 143191, &v6, v5, v6); v7 = -1; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return 1; } //----- (0069EB40) -------------------------------------------------------- int __thiscall sub_69EB40(_DWORD *this, float a2) { int v2; // edi int *v3; // eax int v4; // esi _DWORD *v5; // ecx int v6; // edi signed int v7; // ebx const void *v8; // ecx void *v9; // edi int v10; // esi void (*v11)(void); // edx int v12; // eax _DWORD *v13; // esi float *v14; // edi signed int v15; // ebx int v16; // edi float *v17; // eax float v18; // ecx float v19; // edx float v20; // eax char v21; // bl unsigned int v22; // ecx float *v23; // edx double v24; // st4 int v25; // ebx int v26; // edi int v27; // edx int v28; // eax int v29; // eax int v30; // eax unsigned int v31; // ebx int *v32; // eax int v33; // ecx int v34; // edx int v35; // ecx int v36; // eax int v37; // edx int (__thiscall *v38)(_DWORD *); // eax float *v39; // eax float v40; // ecx float v41; // edx int v42; // eax int v43; // ebx char *v44; // ecx float *v45; // eax float *v46; // ecx double v47; // st7 signed int v48; // edi signed int v49; // eax _DWORD *v50; // ecx signed int v51; // edi _DWORD *v52; // eax int v53; // ebx void (__thiscall *v54)(int, _DWORD, _DWORD); // edx _DWORD *v55; // eax int v56; // eax int v57; // esi int *v58; // ebx float v59; // eax _DWORD *v60; // eax int v61; // esi int v62; // edi float v63; // eax float *v64; // eax float *v65; // esi int v66; // eax double v67; // st7 int v68; // edx double v69; // st6 double v70; // st6 int v71; // edx int v72; // eax float *v73; // eax float v74; // ecx int v75; // edi float v76; // edx float v77; // eax double v78; // st7 double v79; // st7 double v80; // st7 double v81; // st7 double v82; // st7 int v83; // edi unsigned int v84; // eax unsigned int v85; // edx int v86; // ecx int v87; // ebx unsigned int v88; // eax unsigned int v89; // eax unsigned int v90; // ecx char *v91; // ecx _DWORD *v92; // eax int v93; // ecx int v94; // edx unsigned int v95; // eax unsigned int v96; // eax unsigned int v97; // ecx char *v98; // ecx _DWORD *v99; // eax int v100; // eax int v101; // ecx int j; // eax int i; // eax float v104; // ecx int v105; // eax int v106; // ebx int v107; // ecx int v108; // edx int v109; // eax double v110; // st7 int *v111; // eax int v112; // esi float v113; // ecx float v114; // ecx float v115; // ecx float v116; // ecx float v118; // [esp-3Ch] [ebp-1ACh] float v119; // [esp+0h] [ebp-170h] float v120; // [esp+4h] [ebp-16Ch] float v121; // [esp+18h] [ebp-158h] float v122; // [esp+1Ch] [ebp-154h] float v123; // [esp+20h] [ebp-150h] int v124; // [esp+30h] [ebp-140h] int v125; // [esp+34h] [ebp-13Ch] int v126; // [esp+38h] [ebp-138h] float v127; // [esp+58h] [ebp-118h] float v128; // [esp+5Ch] [ebp-114h] float v129; // [esp+60h] [ebp-110h] float v130; // [esp+64h] [ebp-10Ch] float v131; // [esp+68h] [ebp-108h] float v132; // [esp+6Ch] [ebp-104h] int *v133; // [esp+70h] [ebp-100h] float v134; // [esp+74h] [ebp-FCh] float v135; // [esp+78h] [ebp-F8h] float v136; // [esp+7Ch] [ebp-F4h] float v137; // [esp+80h] [ebp-F0h] float v138; // [esp+84h] [ebp-ECh] float v139; // [esp+88h] [ebp-E8h] float v140; // [esp+8Ch] [ebp-E4h] float v141; // [esp+90h] [ebp-E0h] float v142; // [esp+94h] [ebp-DCh] float v143; // [esp+98h] [ebp-D8h] float v144; // [esp+9Ch] [ebp-D4h] float v145; // [esp+A0h] [ebp-D0h] float v146; // [esp+A4h] [ebp-CCh] float v147; // [esp+A8h] [ebp-C8h] float v148; // [esp+ACh] [ebp-C4h] float v149; // [esp+B0h] [ebp-C0h] float v150; // [esp+B4h] [ebp-BCh] float v151; // [esp+B8h] [ebp-B8h] _DWORD *v152; // [esp+BCh] [ebp-B4h] float v153; // [esp+C0h] [ebp-B0h] int v154; // [esp+C4h] [ebp-ACh] int v155; // [esp+C8h] [ebp-A8h] float v156; // [esp+CCh] [ebp-A4h] float v157; // [esp+D0h] [ebp-A0h] int v158; // [esp+D4h] [ebp-9Ch] char v159; // [esp+DBh] [ebp-95h] double v160; // [esp+DCh] [ebp-94h] char v161; // [esp+E4h] [ebp-8Ch] char v162; // [esp+ECh] [ebp-84h] int v163; // [esp+144h] [ebp-2Ch] int v164; // [esp+148h] [ebp-28h] int v165; // [esp+14Ch] [ebp-24h] int v166; // [esp+150h] [ebp-20h] int v167; // [esp+154h] [ebp-1Ch] int v168; // [esp+158h] [ebp-18h] char v169; // [esp+15Ch] [ebp-14h] int v170; // [esp+16Ch] [ebp-4h] v2 = (int)this; v3 = (int *)this[143192]; v4 = *v3; v5 = (_DWORD *)(this[134] + 176); v158 = v2; v133 = v3; v155 = v4; sub_8D8240(v5); v6 = v2 + 572840; v7 = 30; do { if ( *(_DWORD *)v6 ) sub_8D8240((_DWORD *)(*(_DWORD *)v6 + 176)); v6 += 12; --v7; } while ( v7 ); v8 = *(const void **)(v158 + 496); v9 = *(void **)(v158 + 492); if ( (*(_DWORD *)(v158 + 496) - (signed int)v9) >> 2 && v9 != v8 ) { memcpy_0(v9, v8, 0); *(_DWORD *)(v158 + 496) = v9; } if ( (int *)v4 != v133 ) { while ( 1 ) { v11 = *(void (**)(void))(*(_DWORD *)dword_AD8EBC + 196); v153 = *(float *)(v155 + 12); v10 = LODWORD(v153); v11(); v12 = sub_664A70(dword_AD8C90, v10); v13 = (_DWORD *)v12; v152 = (_DWORD *)v12; if ( !v12 || !sub_6510B0(v12) ) goto LABEL_122; v14 = (float *)&v161; v15 = 5; do { sub_8736A0(v14); v14 += 4; --v15; } while ( v15 >= 0 ); LODWORD(v120) = *(_DWORD *)(v158 + 572232) + 104; v163 = 63; sub_8737E0(&v161, v158 + 572400, (float *)LODWORD(v120)); v163 = 63; v157 = 30.0; v16 = v13[175]; if ( v16 ) { v156 = *(float *)(v16 + 48); if ( v156 > 30.0 ) v157 = v156; } v17 = (float *)(*(int (__thiscall **)(_DWORD *))(*v13 + 196))(v13); v18 = *v17; v19 = v17[1]; v20 = v17[2]; v130 = v18; v131 = v19; v132 = v20; if ( v16 ) { v156 = *(float *)(v16 + 48); if ( 0.0 != v156 ) v132 = *(float *)(v16 + 44); } v21 = 0; v22 = 0; v156 = -v157; v23 = (float *)&v162; v24 = v156; while ( 1 ) { v156 = *(v23 - 2) * v130 + *(v23 - 1) * v131 + *v23 * v132; v156 = v156 - v23[1]; if ( v156 <= v24 ) break; ++v22; v23 += 4; if ( v22 >= 6 ) goto LABEL_24; } v21 = 1; LABEL_24: if ( *((_BYTE *)v13 + 2932) || v21 ) { *((_BYTE *)v13 + 2141) = *((_BYTE *)v13 + 2140); *((_BYTE *)v13 + 2140) = 1; } else { *((_BYTE *)v13 + 2141) = *((_BYTE *)v13 + 2140); *((_BYTE *)v13 + 2140) = 0; } (*(void (__thiscall **)(_DWORD *, int *))(*v13 + 24))(v13, &v154); if ( !sub_68DEF0(*(_BYTE **)(v158 + 572608)) ) goto LABEL_49; v25 = *((unsigned __int16 *)dword_AD8EBC + 2064); v26 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v25) ) goto LABEL_49; if ( (unsigned __int16)v25 > *(_WORD *)(v26 + 200) ) goto LABEL_49; v27 = *(_DWORD *)(v26 + 196); if ( !*(_DWORD *)(v27 + 4 * v25) ) goto LABEL_49; v28 = *(_DWORD *)(v27 + 4 * v25); if ( !v28 ) goto LABEL_49; v29 = *(_DWORD *)(v28 + 188); v159 = 0; if ( v29 ) { v30 = v29 - 1; if ( !v30 ) { v159 = 0; goto LABEL_43; } if ( v30 != 1 ) goto LABEL_43; v31 = 0; if ( !dword_B9DCC4 ) goto LABEL_43; while ( 1 ) { v32 = (int *)sub_6C10B0(&dword_B9DC70, v31); v33 = *v32; v165 = v32[1]; v34 = v32[3]; v164 = v33; v35 = v32[2]; v36 = v32[4]; v167 = v34; v37 = *v13; v166 = v35; v168 = v36; v38 = *(int (__thiscall **)(_DWORD *))(v37 + 84); v169 = 0; if ( !strcmp((const char *)v38(v13), (const char *)&v164) ) break; if ( ++v31 >= dword_B9DCC4 ) goto LABEL_43; } } else if ( sub_67DA80(dword_AD8EBC, (int)v13) != 3 ) { goto LABEL_43; } v159 = 1; LABEL_43: v39 = (float *)v13[227]; if ( v39 ) { v40 = v39[35]; v41 = v39[36]; v142 = v39[37]; } else { v42 = (*(int (__thiscall **)(_DWORD *))(*v13 + 196))(v13); v40 = *(float *)v42; v41 = *(float *)(v42 + 4); v142 = *(float *)(v42 + 8) + 10.0; } v43 = v158; v140 = v40; v44 = *(char **)(v158 + 572608); v141 = v41; v45 = (float *)sub_68DF00(v44); v157 = *v45 - v140; v156 = v45[1] - v141; *((float *)&v160 + 1) = v45[2] - v142; if ( v159 ) { *((float *)&v160 + 1) = v156 * v156 + v157 * v157 + *((float *)&v160 + 1) * *((float *)&v160 + 1); *((float *)&v160 + 1) = sqrt(*((float *)&v160 + 1)); v46 = *(float **)(v43 + 572608); v160 = *((float *)&v160 + 1); v47 = sub_68E050(v46); if ( v47 * 0.5 > v160 ) { v48 = -65536; v154 = -65536; goto LABEL_51; } } LABEL_49: v48 = v154; if ( !v154 ) { v53 = *(_DWORD *)(v158 + 536); v54 = *(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v53 + 116); LODWORD(v120) = 1; v119 = v153; LABEL_84: v54(v53, LODWORD(v119), LODWORD(v120)); goto LABEL_85; } v43 = v158; LABEL_51: v49 = 0; v50 = (_DWORD *)(v43 + 572836); do { if ( v48 == *v50 ) { v53 = *(_DWORD *)(v158 + 12 * v49 + 572840); v54 = *(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v53 + 116); v120 = 0.0; v119 = v153; goto LABEL_84; } ++v49; v50 += 3; } while ( v49 < 30 ); v51 = 0; v52 = (_DWORD *)(v43 + 572836); while ( *v52 ) { ++v51; v52 += 3; if ( v51 >= 30 ) { v53 = *(_DWORD *)(v158 + 536); v54 = *(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v53 + 116); LODWORD(v120) = 1; v119 = v153; goto LABEL_84; } } v55 = operator new(0xE8u); HIDWORD(v160) = v55; v170 = 0; if ( v55 ) v157 = COERCE_FLOAT(sub_85A1C0(v55, 0)); else v157 = 0.0; v56 = 3 * v51 + 143211; v57 = *(_DWORD *)(v158 + 4 * v56); v58 = (int *)(v158 + 4 * v56); v170 = -1; if ( v57 != LODWORD(v157) ) { if ( v57 && !InterlockedDecrement((volatile LONG *)(v57 + 4)) && v57 ) (**(void (__thiscall ***)(int, signed int))v57)(v57, 1); v59 = v157; *(float *)v58 = v157; if ( v59 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v59) + 4)); } v60 = operator new(0xE8u); HIDWORD(v160) = v60; v170 = 1; if ( v60 ) v157 = COERCE_FLOAT(sub_85A1C0(v60, 0)); else v157 = 0.0; v61 = *(_DWORD *)(v158 + 12 * v51 + 572840); v62 = v158 + 12 * v51; v170 = -1; if ( v61 != LODWORD(v157) ) { if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v61 ) (**(void (__thiscall ***)(int, signed int))v61)(v61, 1); v63 = v157; *(float *)(v62 + 572840) = v157; if ( v63 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v63) + 4)); } v64 = (float *)operator new(0x10Cu); HIDWORD(v160) = v64; v170 = 2; if ( v64 ) v65 = sub_861A00(v64); else v65 = 0; ++*((_DWORD *)v65 + 47); v65[56] = 1.0; v66 = *((_DWORD *)v65 + 47); HIDWORD(v160) = BYTE1(v154); v67 = (double)(unsigned __int8)v154 / 255.0; v68 = BYTE2(v154); *((_DWORD *)v65 + 47) = ++v66; ++v66; v170 = -1; v127 = v67; v69 = (double)SHIDWORD(v160); HIDWORD(v160) = v68; v65[57] = v127; v128 = v69 / 255.0; v70 = (double)SHIDWORD(v160); v65[58] = v128; v129 = v70 / 255.0; v65[59] = v129; *((_DWORD *)v65 + 60) = dword_ABD4FC; *((_DWORD *)v65 + 61) = dword_ABD500; v71 = dword_ABD504; *((_DWORD *)v65 + 47) = v66; *((_DWORD *)v65 + 62) = v71; *((_DWORD *)v65 + 63) = dword_BA4724; *((_DWORD *)v65 + 64) = dword_BA4728; *((_DWORD *)v65 + 65) = dword_BA472C; *((_DWORD *)v65 + 47) = v66 + 1; sub_861480(v65, *v58); v72 = v158; *((_BYTE *)v65 + 176) = 1; (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(v72 + 568) + 116))(*v58, 0); (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)*v58 + 116))(v65, 0); (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)*v58 + 116))(*v58, *(_DWORD *)(v62 + 572840), 0); (*(void (__stdcall **)(float, _DWORD))(**(_DWORD **)(v62 + 572840) + 116))(COERCE_FLOAT(LODWORD(v153)), 0); v53 = *(_DWORD *)(v62 + 572840); v13 = v152; *(_DWORD *)(v62 + 572836) = v154; LABEL_85: (*(void (__thiscall **)(_DWORD *, int))(*v13 + 560))(v13, v53); if ( !*((_BYTE *)v13 + 2140) && sub_67DA80(dword_AD8EBC, (int)v13) == 3 && !sub_651680((int)v13) && !*((_BYTE *)v13 + 2496) && !sub_650B20(v13) ) { v73 = (float *)(*(int (__thiscall **)(_DWORD *))(*v13 + 196))(v13); v74 = *v73; v75 = dword_B66FB0; v76 = v73[1]; v77 = v73[2]; v143 = v74; v78 = v74 - *(float *)(dword_B66FB0 + 140); v144 = v76; v145 = v77; v134 = v78; v135 = v76 - *(float *)(dword_B66FB0 + 144); v136 = v77 - *(float *)(dword_B66FB0 + 148); v137 = *(float *)(dword_B66FB0 + 104); v79 = *(float *)(dword_B66FB0 + 116); v149 = v137; v138 = v79; v139 = *(float *)(dword_B66FB0 + 128); v150 = v138; v151 = v139; v146 = v134; v147 = v135; v148 = v136; *((float *)&v160 + 1) = v135 * v135 + v134 * v134 + v136 * v136; *((float *)&v160 + 1) = sqrt(*((float *)&v160 + 1)); if ( *((float *)&v160 + 1) <= 0.000001 ) { v80 = 0.0; v146 = 0.0; v147 = 0.0; } else { *((float *)&v160 + 1) = 1.0 / *((float *)&v160 + 1); v146 = *((float *)&v160 + 1) * v134; v147 = v147 * *((float *)&v160 + 1); v80 = *((float *)&v160 + 1) * v148; } v148 = v80; *((float *)&v160 + 1) = v138 * v138 + v137 * v137 + v139 * v139; *((float *)&v160 + 1) = sqrt(*((float *)&v160 + 1)); if ( *((float *)&v160 + 1) <= 0.000001 ) { v81 = 0.0; v149 = 0.0; v150 = 0.0; } else { *((float *)&v160 + 1) = 1.0 / *((float *)&v160 + 1); v149 = *((float *)&v160 + 1) * v137; v150 = v150 * *((float *)&v160 + 1); v81 = *((float *)&v160 + 1) * v151; } v151 = v81; *((float *)&v160 + 1) = v150 * v147 + v149 * v146 + v151 * v148; *((float *)&v160 + 1) = acos(*((float *)&v160 + 1)); v82 = *((float *)&v160 + 1); *((float *)&v160 + 1) = flt_BA45B4 * 28.0 / 180.0; if ( *((float *)&v160 + 1) <= v82 ) goto LABEL_123; v83 = v158; v84 = *(_DWORD *)(v158 + 496); if ( (unsigned int)&v152 >= v84 || (v85 = *(_DWORD *)(v158 + 492), v85 > (unsigned int)&v152) ) { v93 = *(_DWORD *)(v158 + 500); if ( v84 == v93 ) { v94 = *(_DWORD *)(v158 + 492); v95 = (signed int)(v84 - v94) >> 2; if ( v95 > 0x3FFFFFFE ) LABEL_135: std::_Xlength_error("vector too long"); v96 = v95 + 1; v97 = (v93 - v94) >> 2; if ( v96 > v97 ) { if ( 0x3FFFFFFF - (v97 >> 1) >= v97 ) v98 = (char *)((v97 >> 1) + v97); else v98 = 0; if ( (unsigned int)v98 < v96 ) v98 = (char *)v96; sub_74E360((const void **)(v158 + 492), v98); } } v99 = *(_DWORD **)(v83 + 496); if ( v99 ) *v99 = v13; } else { v86 = *(_DWORD *)(v158 + 500); v87 = (signed int)((signed int)&v152 - v85) >> 2; if ( v84 == v86 ) { v88 = (signed int)(v84 - v85) >> 2; if ( v88 > 0x3FFFFFFE ) goto LABEL_135; v89 = v88 + 1; v90 = (signed int)(v86 - v85) >> 2; if ( v89 > v90 ) { if ( 0x3FFFFFFF - (v90 >> 1) >= v90 ) v91 = (char *)((v90 >> 1) + v90); else v91 = 0; if ( (unsigned int)v91 < v89 ) v91 = (char *)v89; sub_74E360((const void **)(v158 + 492), v91); } } v92 = *(_DWORD **)(v83 + 496); if ( v92 ) *v92 = *(_DWORD *)(*(_DWORD *)(v83 + 492) + 4 * v87); } *(_DWORD *)(v83 + 496) += 4; } LABEL_122: v75 = dword_B66FB0; LABEL_123: v100 = v155; if ( !*(_BYTE *)(v155 + 17) ) { v101 = *(_DWORD *)(v155 + 8); if ( *(_BYTE *)(v101 + 17) ) { for ( i = *(_DWORD *)(v155 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( v155 != *(_DWORD *)(i + 8) ) break; v155 = i; } v155 = i; } else { for ( j = *(_DWORD *)v101; !*(_BYTE *)(j + 17); j = *(_DWORD *)j ) v101 = j; v155 = v101; } v100 = v155; } if ( (int *)v100 == v133 ) goto LABEL_137; } } v75 = dword_B66FB0; LABEL_137: LODWORD(v104) = v158 + 492; v105 = (*(_DWORD *)(v158 + 496) - *(_DWORD *)(v158 + 492)) >> 2; v106 = 5; if ( v105 ) { if ( v105 < 5 ) v106 = (*(_DWORD *)(v158 + 496) - *(_DWORD *)(v158 + 492)) >> 2; v107 = *(_DWORD *)(v75 + 144); v108 = *(_DWORD *)(v75 + 148); v143 = *(float *)(v75 + 104); v109 = *(_DWORD *)(v75 + 140); v144 = *(float *)(v75 + 116); v125 = v107; v110 = *(float *)(v75 + 128); v126 = v108; v145 = v110; v120 = 0.0; v124 = v109; v122 = v144; v123 = v145; v121 = v143; v111 = *(int **)(v158 + 492); qmemcpy(&v118, &v121, 0x40u); sub_6A0720(v111, (unsigned int)&v111[v106], *(_DWORD *)(v158 + 496)); } v112 = v158; LODWORD(v120) = 1; v119 = v104; sub_85BED0(*(_DWORD ***)(v158 + 548), a2, 1); sub_69E770((float *)v112, a2); sub_6ACAD0(&unk_B91250, a2); LODWORD(v120) = 1; v119 = v113; sub_85BED0(*(_DWORD ***)(v112 + 540), a2, 1); LODWORD(v120) = 1; v119 = v114; sub_85BED0(*(_DWORD ***)(v112 + 560), a2, 1); LODWORD(v120) = 1; v119 = v115; sub_85BED0(*(_DWORD ***)(v112 + 600), a2, 1); LODWORD(v120) = 1; v119 = v116; return sub_85BED0(*(_DWORD ***)(v112 + 604), a2, 1); } // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // ACE8D0: using guessed type int dword_ACE8D0; // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // BA45B4: using guessed type float flt_BA45B4; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (0069F960) -------------------------------------------------------- int __cdecl sub_69F960(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, float a11, float a12, float a13) { int v13; // esi int v14; // edi int v15; // ecx int v16; // ebx float *v17; // eax float *v18; // eax float v19; // ST18_4 float v20; // ST1C_4 float v21; // ST20_4 float v22; // ST0C_4 float v23; // ST10_4 float v24; // ST14_4 float v25; // ST3C_4 int result; // eax float v27; // [esp+40h] [ebp+8h] float v28; // [esp+40h] [ebp+8h] float v29; // [esp+40h] [ebp+8h] float v30; // [esp+40h] [ebp+8h] int v32; // [esp+74h] [ebp+3Ch] int v34; // [esp+78h] [ebp+40h] int v36; // [esp+7Ch] [ebp+44h] v13 = (a2 - 1) / 2; if ( a3 >= a2 ) { result = *(_DWORD *)a4; *(_DWORD *)(a1 + 4 * a2) = *(_DWORD *)a4; } else { v14 = a1; while ( 1 ) { v15 = *(_DWORD *)(v14 + 4 * v13); v16 = *(_DWORD *)a4; if ( !v15 ) { result = *(_DWORD *)a4; *(_DWORD *)(v14 + 4 * a2) = *(_DWORD *)a4; return result; } if ( v16 ) { v17 = (float *)(*(int (**)(void))(*(_DWORD *)v15 + 196))(); v32 = *(int *)v17; v34 = *((int *)v17 + 1); v36 = *((int *)v17 + 2); v18 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v16 + 196))(v16); v19 = a11 - *(float *)&v32; v20 = a12 - *(float *)&v34; v21 = a13 - *(float *)&v36; v22 = a11 - *v18; v23 = a12 - v18[1]; v24 = a13 - v18[2]; v27 = v20 * v20 + v19 * v19 + v21 * v21; v28 = sqrt(v27); v25 = v28; v29 = v22 * v22 + v23 * v23 + v24 * v24; v30 = sqrt(v29); if ( v25 >= (double)v30 ) break; } *(_DWORD *)(v14 + 4 * a2) = *(_DWORD *)(v14 + 4 * v13); a2 = v13; v13 = (v13 - 1) / 2; if ( a3 >= a2 ) { result = a4; *(_DWORD *)(v14 + 4 * a2) = *(_DWORD *)a4; return result; } } result = *(_DWORD *)a4; *(_DWORD *)(v14 + 4 * a2) = *(_DWORD *)a4; } return result; } //----- (0069FAE0) -------------------------------------------------------- _DWORD *__thiscall sub_69FAE0(_DWORD *this, _DWORD *a2, unsigned int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx unsigned int v6; // edi unsigned int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 33) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 33) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 33) ); } if ( *((_BYTE *)v3 + 33) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 33) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (0069FB70) -------------------------------------------------------- int __thiscall sub_69FB70(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0xCCCCCCB ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 32) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 32) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 33) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 33) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 32) = 1; *(_BYTE *)(v13 + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 32) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 33) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 33) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 32) = 1; *(_BYTE *)(v22 + 32) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 32) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 32) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 32) = 1; return result; } //----- (0069FDA0) -------------------------------------------------------- int sub_69FDA0(int a1, int a2, int a3, int a4, ...) { int v4; // eax int v5; // ebx int v6; // esi int v7; // edi int v9; // [esp-40h] [ebp-4Ch] int v10; // [esp-3Ch] [ebp-48h] int v11; // [esp-38h] [ebp-44h] int v12; // [esp-34h] [ebp-40h] int v13; // [esp-30h] [ebp-3Ch] int v14; // [esp-2Ch] [ebp-38h] float v15; // [esp-28h] [ebp-34h] float v16; // [esp-24h] [ebp-30h] float v17; // [esp-20h] [ebp-2Ch] float v18; // [esp+24h] [ebp+18h] va_list va; // [esp+24h] [ebp+18h] int v20; // [esp+28h] [ebp+1Ch] int v21; // [esp+2Ch] [ebp+20h] int v22; // [esp+30h] [ebp+24h] int v23; // [esp+34h] [ebp+28h] int v24; // [esp+38h] [ebp+2Ch] int v25; // [esp+3Ch] [ebp+30h] int v26; // [esp+40h] [ebp+34h] int v27; // [esp+44h] [ebp+38h] int v28; // [esp+48h] [ebp+3Ch] int v29; // [esp+4Ch] [ebp+40h] int v30; // [esp+50h] [ebp+44h] int v31; // [esp+54h] [ebp+48h] int v32; // [esp+58h] [ebp+4Ch] int v33; // [esp+5Ch] [ebp+50h] int v34; // [esp+60h] [ebp+54h] va_list va1; // [esp+64h] [ebp+58h] va_start(va1, a4); va_start(va, a4); LODWORD(v18) = va_arg(va1, _DWORD); v20 = va_arg(va1, _DWORD); v21 = va_arg(va1, _DWORD); v22 = va_arg(va1, _DWORD); v23 = va_arg(va1, _DWORD); v24 = va_arg(va1, _DWORD); v25 = va_arg(va1, _DWORD); v26 = va_arg(va1, _DWORD); v27 = va_arg(va1, _DWORD); v28 = va_arg(va1, _DWORD); v29 = va_arg(va1, _DWORD); v30 = va_arg(va1, _DWORD); v31 = va_arg(va1, _DWORD); v32 = va_arg(va1, _DWORD); v33 = va_arg(va1, _DWORD); v34 = va_arg(va1, _DWORD); v4 = a3; v5 = a2; v6 = 2 * a2 + 2; if ( v6 >= a3 ) { v7 = a1; } else { do { v7 = a1; if ( sub_69C8F0((float *)va, *(_DWORD *)(a1 + 4 * v6), *(_DWORD *)(a1 + 4 * v6 - 4)) ) --v6; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = 2 * v6 + 2; } while ( v6 < a3 ); v4 = a3; } if ( v6 == v4 ) { *(_DWORD *)(v7 + 4 * v5) = *(_DWORD *)(v7 + 4 * v4 - 4); v5 = v4 - 1; } qmemcpy(&v9, va, 0x40u); return sub_69F960(a1, v5, a2, a4, v9, v10, v11, v12, v13, v14, v15, v16, v17); } //----- (0069FE30) -------------------------------------------------------- _DWORD *__thiscall sub_69FE30(_DWORD *this, _DWORD *a2, unsigned int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx unsigned int v6; // edi unsigned int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 25) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 25) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 25) ); } if ( *((_BYTE *)v3 + 25) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 25) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (0069FEC0) -------------------------------------------------------- int __thiscall sub_69FEC0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 33) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 33) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_69FB70(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_69C7C0(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_69FB70(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (0069FFA0) -------------------------------------------------------- _DWORD *__thiscall sub_69FFA0(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx void **v8; // [esp+8h] [ebp-Ch] v2 = this; v3 = operator new(0x14u); v4 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a2); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v3[2] = v2[1]; v5 = v3 + 3; *((_WORD *)v4 + 8) = 0; if ( v4 != (_DWORD *)-12 ) { v6 = *(_DWORD *)a2; *v5 = *(_DWORD *)a2; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006A0020) -------------------------------------------------------- int sub_6A0020(int a1, int a2, ...) { int v2; // ebx int result; // eax int i; // edx int v5; // ecx int v6; // eax int v7; // edi int v8; // esi int v9; // eax int v10; // edx int v11; // ecx int v12; // [esp-40h] [ebp-98h] int v13; // [esp-3Ch] [ebp-94h] int v14; // [esp-38h] [ebp-90h] int v15; // [esp-34h] [ebp-8Ch] int v16; // [esp-30h] [ebp-88h] int v17; // [esp-2Ch] [ebp-84h] float v18; // [esp-28h] [ebp-80h] float v19; // [esp-24h] [ebp-7Ch] float v20; // [esp-20h] [ebp-78h] int v21; // [esp-4h] [ebp-5Ch] char v22; // [esp+Ch] [ebp-4Ch] int v23; // [esp+4Ch] [ebp-Ch] int v24; // [esp+50h] [ebp-8h] int v25; // [esp+54h] [ebp-4h] int v26; // [esp+60h] [ebp+8h] int v27; // [esp+64h] [ebp+Ch] char v28; // [esp+68h] [ebp+10h] va_list va; // [esp+68h] [ebp+10h] int v30; // [esp+6Ch] [ebp+14h] int v31; // [esp+70h] [ebp+18h] int v32; // [esp+74h] [ebp+1Ch] int v33; // [esp+78h] [ebp+20h] int v34; // [esp+7Ch] [ebp+24h] int v35; // [esp+80h] [ebp+28h] int v36; // [esp+84h] [ebp+2Ch] int v37; // [esp+88h] [ebp+30h] int v38; // [esp+8Ch] [ebp+34h] int v39; // [esp+90h] [ebp+38h] int v40; // [esp+94h] [ebp+3Ch] int v41; // [esp+98h] [ebp+40h] int v42; // [esp+9Ch] [ebp+44h] int v43; // [esp+A0h] [ebp+48h] int v44; // [esp+A4h] [ebp+4Ch] va_list va1; // [esp+A8h] [ebp+50h] va_start(va1, a2); va_start(va, a2); *(_DWORD *)&v28 = va_arg(va1, _DWORD); v30 = va_arg(va1, _DWORD); v31 = va_arg(va1, _DWORD); v32 = va_arg(va1, _DWORD); v33 = va_arg(va1, _DWORD); v34 = va_arg(va1, _DWORD); v35 = va_arg(va1, _DWORD); v36 = va_arg(va1, _DWORD); v37 = va_arg(va1, _DWORD); v38 = va_arg(va1, _DWORD); v39 = va_arg(va1, _DWORD); v40 = va_arg(va1, _DWORD); v41 = va_arg(va1, _DWORD); v42 = va_arg(va1, _DWORD); v43 = va_arg(va1, _DWORD); v44 = va_arg(va1, _DWORD); v2 = a1; v24 = (a2 - a1) >> 2; result = v24 / 2; if ( v24 / 2 > 0 ) { for ( i = 2 * result + 2; ; i = v25 ) { v5 = *(_DWORD *)(v2 + 4 * result - 4); v6 = result - 1; v23 = v5; qmemcpy(&v22, va, 0x40u); v7 = v24; v26 = v6; v25 = i - 2; v27 = v6; v8 = i - 2; if ( i - 2 < v24 ) { do { v9 = *(_DWORD *)(v2 + 4 * v8); v21 = *(_DWORD *)(v2 + 4 * v8 - 4); if ( sub_69C8F0((float *)&v22, v9, v21) ) --v8; v10 = v27; v11 = *(_DWORD *)(v2 + 4 * v8); v27 = v8; v8 = 2 * v8 + 2; *(_DWORD *)(v2 + 4 * v10) = v11; } while ( v8 < v7 ); v6 = v26; } if ( v8 == v7 ) { *(_DWORD *)(v2 + 4 * v27) = *(_DWORD *)(v2 + 4 * v7 - 4); v27 = v7 - 1; } qmemcpy(&v12, &v22, 0x40u); result = sub_69F960(v2, v27, v6, (int)&v23, v12, v13, v14, v15, v16, v17, v18, v19, v20); if ( v26 <= 0 ) break; result = v26; } } return result; } //----- (006A0100) -------------------------------------------------------- int __thiscall sub_6A0100(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_69FB70(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_69FB70(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_69FB70(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_69C7C0(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_691140(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_69FEC0(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 33) ) sub_69FB70(v4, a2, 0, a3, v6); else sub_69FB70(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 33) ) sub_69FB70(v4, a2, 0, (int)a4, v6); else sub_69FB70(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (006A0260) -------------------------------------------------------- int __thiscall sub_6A0260(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // esi int v8; // edx void **v9; // edx int v10; // edx _DWORD *v11; // eax int v12; // edx int *v13; // esi int v14; // esi _DWORD *v15; // edx int v16; // esi _DWORD *v17; // esi _DWORD *v18; // edx _DWORD *v19; // esi int v20; // edi int v21; // edi _DWORD *v22; // edi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; v6 = a5; if ( v5 >= 0x3FFFFFFE ) { v7 = *((_DWORD *)a5 + 3); if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v8 = this[1]; if ( a4 == v8 ) { *(_DWORD *)(v8 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v9 = (void **)this[1]; if ( (void *)a4 == *v9 ) *v9 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v10 = this[1]; if ( a4 == *(_DWORD *)(v10 + 8) ) *(_DWORD *)(v10 + 8) = a5; } v11 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 16) ) { do { v12 = v11[1]; v13 = *(int **)(v12 + 4); if ( v12 == *v13 ) { v14 = v13[2]; if ( *(_BYTE *)(v14 + 16) ) { if ( v11 == *(_DWORD **)(v12 + 8) ) { v11 = (_DWORD *)v11[1]; v15 = *(_DWORD **)(v12 + 8); v11[2] = *v15; if ( !*(_BYTE *)(*v15 + 17) ) *(_DWORD *)(*v15 + 4) = v11; v15[1] = v11[1]; v16 = this[1]; if ( v11 == *(_DWORD **)(v16 + 4) ) { *(_DWORD *)(v16 + 4) = v15; } else { v17 = (_DWORD *)v11[1]; if ( v11 == (_DWORD *)*v17 ) *v17 = v15; else v17[2] = v15; } *v15 = v11; v11[1] = v15; } *(_BYTE *)(v11[1] + 16) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 16) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)*v18; *v18 = *(_DWORD *)(*v18 + 8); v20 = v19[2]; if ( !*(_BYTE *)(v20 + 17) ) *(_DWORD *)(v20 + 4) = v18; v19[1] = v18[1]; v21 = this[1]; if ( v18 == *(_DWORD **)(v21 + 4) ) { *(_DWORD *)(v21 + 4) = v19; v19[2] = v18; } else { v22 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)v22[2] ) v22[2] = v19; else *v22 = v19; v19[2] = v18; } LABEL_54: v6 = a5; v18[1] = v19; continue; } } else { v14 = *v13; if ( *(_BYTE *)(v14 + 16) ) { if ( v11 == *(_DWORD **)v12 ) { v11 = (_DWORD *)v11[1]; v23 = *(_DWORD **)v12; *v11 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 17) ) *(_DWORD *)(v24 + 4) = v11; v23[1] = v11[1]; v25 = this[1]; if ( v11 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v11[1]; if ( v11 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v11; v11[1] = v23; } *(_BYTE *)(v11[1] + 16) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 16) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)v18[2]; v18[2] = *v19; if ( !*(_BYTE *)(*v19 + 17) ) *(_DWORD *)(*v19 + 4) = v18; v19[1] = v18[1]; v27 = this[1]; if ( v18 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v19; } else { v28 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)*v28 ) *v28 = v19; else v28[2] = v19; } *v19 = v18; goto LABEL_54; } } *(_BYTE *)(v12 + 16) = 1; *(_BYTE *)(v14 + 16) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 16) = 0; v11 = *(_DWORD **)(v11[1] + 4); } while ( !*(_BYTE *)(v11[1] + 16) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 16) = 1; return result; } //----- (006A04A0) -------------------------------------------------------- int __thiscall sub_6A04A0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // edi int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // ebx int v11; // ebx int v12; // edx int result; // eax int v14; // ecx int v15; // esi char v16; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v16 = 1; if ( !*(_BYTE *)(v7 + 17) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v16 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 17) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_6A0260(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_67A6C0(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { v15 = v4[3]; if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); } v4 = a3; } operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_6A0260(v5, (int)&a4, v16, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006A05A0) -------------------------------------------------------- _DWORD *__thiscall sub_6A05A0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // ecx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x24u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 16) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; result[4] = *((_DWORD *)v4 + 1); result[5] = *((_DWORD *)v4 + 2); result[6] = *((_DWORD *)v4 + 3); result[7] = *((_DWORD *)v4 + 4); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006A0620) -------------------------------------------------------- int sub_6A0620(_DWORD *a1, ...) { _DWORD *v1; // ebx int result; // eax int v3; // edx char v4; // [esp-40h] [ebp-4Ch] int v5; // [esp+14h] [ebp+8h] int v6; // [esp+18h] [ebp+Ch] va_list va; // [esp+18h] [ebp+Ch] va_list va1; // [esp+1Ch] [ebp+10h] va_start(va1, a1); va_start(va, a1); v6 = va_arg(va1, _DWORD); v1 = a1; result = v6 - (_DWORD)a1; if ( (signed int)((v6 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { do { v3 = *(_DWORD *)((char *)v1 + result - 4); *(_DWORD *)((char *)v1 + result - 4) = *v1; v6 = v3; v5 = result - 4; qmemcpy(&v4, va1, 0x40u); sub_69FDA0((int)v1, 0, (result - 4) >> 2, (int)va); result = v5; } while ( (signed int)(v5 & 0xFFFFFFFC) > 4 ); } return result; } //----- (006A0690) -------------------------------------------------------- int __thiscall sub_6A0690(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ecx int v4; // eax int v5; // esi _DWORD *v6; // eax char v8[4]; // [esp+8h] [ebp-14h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 33) ) { if ( *(_DWORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; *(_DWORD *)v8 = *a2; v6 = sub_6A05A0(v2, v8); sub_6A0100(v2, (int)&a2, v5, v6); return (int)(a2 + 4); } //----- (006A0720) -------------------------------------------------------- int sub_6A0720(int *a1, unsigned int a2, unsigned int a3, ...) { int *v3; // ebx int v4; // edx int v5; // eax char v7; // [esp-48h] [ebp-5Ch] char v8; // [esp-40h] [ebp-54h] int v9; // [esp-8h] [ebp-1Ch] int v10; // [esp-4h] [ebp-18h] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] float v13; // [esp+28h] [ebp+14h] va_list va; // [esp+28h] [ebp+14h] int v15; // [esp+2Ch] [ebp+18h] int v16; // [esp+30h] [ebp+1Ch] int v17; // [esp+34h] [ebp+20h] int v18; // [esp+38h] [ebp+24h] int v19; // [esp+3Ch] [ebp+28h] int v20; // [esp+40h] [ebp+2Ch] int v21; // [esp+44h] [ebp+30h] int v22; // [esp+48h] [ebp+34h] int v23; // [esp+4Ch] [ebp+38h] int v24; // [esp+50h] [ebp+3Ch] int v25; // [esp+54h] [ebp+40h] int v26; // [esp+58h] [ebp+44h] int v27; // [esp+5Ch] [ebp+48h] int v28; // [esp+60h] [ebp+4Ch] int v29; // [esp+64h] [ebp+50h] va_list va1; // [esp+68h] [ebp+54h] va_start(va1, a3); va_start(va, a3); LODWORD(v13) = va_arg(va1, _DWORD); v15 = va_arg(va1, _DWORD); v16 = va_arg(va1, _DWORD); v17 = va_arg(va1, _DWORD); v18 = va_arg(va1, _DWORD); v19 = va_arg(va1, _DWORD); v20 = va_arg(va1, _DWORD); v21 = va_arg(va1, _DWORD); v22 = va_arg(va1, _DWORD); v23 = va_arg(va1, _DWORD); v24 = va_arg(va1, _DWORD); v25 = va_arg(va1, _DWORD); v26 = va_arg(va1, _DWORD); v27 = va_arg(va1, _DWORD); v28 = va_arg(va1, _DWORD); v29 = va_arg(va1, _DWORD); v3 = (int *)a2; v11 = (signed int)(a2 - (_DWORD)a1) >> 2; if ( v11 > 1 ) { v10 = 0; v9 = 0; qmemcpy(&v7, va, 0x40u); sub_6A0020((int)a1, a2); } if ( a2 < a3 ) { do { v4 = *v3; v10 = *a1; if ( sub_69C8F0((float *)va, v4, v10) ) { v5 = *v3; *v3 = *a1; v12 = v5; qmemcpy(&v8, va, 0x40u); sub_69FDA0((int)a1, 0, v11, (int)&v12); } ++v3; } while ( (unsigned int)v3 < a3 ); } qmemcpy(&v8, va, 0x40u); return sub_6A0620(a1, a2); } //----- (006A07E0) -------------------------------------------------------- char sub_6A07E0() { return 1; } //----- (006A0800) -------------------------------------------------------- int __thiscall sub_6A0800(_DWORD *this) { _DWORD *v1; // esi _DWORD *i; // edi _DWORD *v3; // ST00_4 int result; // eax v1 = (_DWORD *)this[143144]; for ( i = this + 143143; v1; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 8))(i, v3) ) { v3 = v1; v1 = (_DWORD *)*v1; } i[3] = 0; i[1] = 0; i[2] = 0; return result; } //----- (006A0840) -------------------------------------------------------- int __thiscall sub_6A0840(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi int v3; // eax int result; // eax v1 = this; for ( i = (_DWORD *)this[143144]; i; result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[137] + 116))(*(_DWORD *)(v3 + 116), 0) ) { v3 = i[2]; i = (_DWORD *)*i; *(_DWORD *)(v3 + 8) = v1[156]; } return result; } //----- (006A0880) -------------------------------------------------------- unsigned int __thiscall sub_6A0880(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi unsigned int result; // eax _DWORD *v4; // ST0C_4 void *v5; // eax float *v6; // esi void *v7; // [esp+10h] [ebp-14h] unsigned int v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = this; sub_8D8240((_DWORD *)(this[137] + 176)); v2 = (_DWORD *)v1[143144]; result = 0; if ( v2 ) { do { v4 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[143143] + 8))(v1 + 143143, v4); } while ( v2 ); result = 0; } v1[143146] = 0; v1[143144] = 0; v1[143145] = 0; v8 = 0; if ( v1[143142] > 0u ) { do { v5 = operator new(0x84u); v7 = v5; v6 = 0; v9 = 0; if ( v5 ) v6 = sub_68E760((float *)v5, (int)&unk_AB5018, (void *)v1[156], v1[146], 5); v7 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); v9 = 1; sub_8B8EC0(v1 + 143143, (int *)&v7); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[137] + 116))(*((_DWORD *)v6 + 29), 0); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) (**(void (__thiscall ***)(float *, signed int))v6)(v6, 1); result = v8 + 1; v8 = result; } while ( result < v1[143142] ); } return result; } //----- (006A09D0) -------------------------------------------------------- void __thiscall sub_6A09D0(_DWORD *this) { int v1; // esi int v2; // eax char v3; // cl _DWORD *v4; // ebx int v5; // edx float *v6; // eax float v7; // ecx float v8; // edx float v9; // eax _DWORD *v10; // eax int v11; // esi float *v12; // eax float v13; // ecx float v14; // edx float v15; // eax double v16; // st7 _DWORD *v17; // eax void *v18; // esi _DWORD *v19; // ecx bool v20; // zf unsigned int v21; // edi int v22; // ebx float v23; // edi int v24; // esi _DWORD *v25; // edi int v26; // ebx int v27; // edx int *v28; // eax int v29; // ebx unsigned int v30; // eax int v31; // ebx int v32; // eax float v33; // ecx float v34; // eax float v35; // eax int **v36; // edi int *v37; // edx int *v38; // ecx int *v39; // eax int *i; // eax float *v41; // eax float v42; // eax _DWORD *v43; // esi float v44; // ecx _DWORD *v45; // ST08_4 char v46; // [esp+1Ch] [ebp-70h] void *v47; // [esp+20h] [ebp-6Ch] int v48; // [esp+24h] [ebp-68h] void **v49; // [esp+2Ch] [ebp-60h] float v50; // [esp+38h] [ebp-54h] float v51; // [esp+3Ch] [ebp-50h] float v52; // [esp+40h] [ebp-4Ch] float v53; // [esp+44h] [ebp-48h] float v54; // [esp+48h] [ebp-44h] float v55; // [esp+4Ch] [ebp-40h] char *v56; // [esp+50h] [ebp-3Ch] int v57; // [esp+54h] [ebp-38h] int v58; // [esp+58h] [ebp-34h] char v59[4]; // [esp+5Ch] [ebp-30h] float v60; // [esp+60h] [ebp-2Ch] _DWORD *v61; // [esp+64h] [ebp-28h] char v62[4]; // [esp+68h] [ebp-24h] __int64 v63; // [esp+6Ch] [ebp-20h] float v64; // [esp+74h] [ebp-18h] char v65; // [esp+7Bh] [ebp-11h] float v66; // [esp+7Ch] [ebp-10h] int v67; // [esp+88h] [ebp-4h] v1 = (int)this; v61 = this; if ( this[143146] < this[143142] ) sub_6A0880(this); v2 = dword_AC9CE8; v3 = *(_BYTE *)(dword_AC9CE8 + 12); *(_BYTE *)(dword_AC9CE8 + 12) = 0; v4 = (_DWORD *)dword_AD8CCC; v65 = v3; v5 = *(_DWORD *)dword_AD8EBC; v57 = v2; v6 = (float *)(*(int (**)(void))(v5 + 196))(); v7 = *v6; v8 = v6[1]; v9 = v6[2]; v53 = v7; v54 = v8; v55 = v9; v48 = 0; v10 = operator new(0x18u); if ( !v10 ) { v56 = 0; std::exception::exception((std::exception *)&v49, (const char *const *)&v56); v49 = &std::bad_alloc::`vftable'; _CxxThrowException(&v49, &_TI2_AVbad_alloc_std__); } v47 = v10; *v10 = v10; *((_DWORD *)v47 + 1) = v47; *((_DWORD *)v47 + 2) = v47; *((_BYTE *)v47 + 20) = 1; *((_BYTE *)v47 + 21) = 1; v67 = 0; if ( v4 ) { do { v11 = v4[2]; v4 = (_DWORD *)*v4; if ( *(float *)&v11 != 0.0 ) { v12 = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v11 + 196))(v11); v13 = *v12; v14 = v12[1]; v15 = v12[2]; v50 = v13; v51 = v14; v52 = v15; *((float *)&v63 + 1) = v53 - v13; v64 = v54 - v14; v66 = v55 - v15; *((float *)&v63 + 1) = *((float *)&v63 + 1) * *((float *)&v63 + 1) + v64 * v64 + v66 * v66; *((float *)&v63 + 1) = sqrt(*((float *)&v63 + 1)); v16 = *((float *)&v63 + 1); if ( *((float *)&v63 + 1) <= 1000.0 ) { v60 = *(float *)&v11; v63 = (signed __int64)v16; *(_DWORD *)v59 = (signed __int64)v16; v17 = sub_5E8850(&v46, v59); v18 = v47; v19 = (_DWORD *)*((_DWORD *)v47 + 1); v20 = *((_BYTE *)v19 + 21) == 0; v62[0] = 1; if ( v20 ) { v21 = v17[3]; do { v18 = v19; v62[0] = v21 < v19[3]; if ( v62[0] ) v19 = (_DWORD *)*v19; else v19 = (_DWORD *)v19[2]; } while ( !*((_BYTE *)v19 + 21) ); } sub_6A0F70(&v46, (int)&v58, v62[0], (int)v18, v17); } } } while ( v4 ); v1 = (int)v61; } v22 = *(_DWORD *)(v1 + 572576); HIDWORD(v63) = 0; v23 = *(float *)v47; v64 = v23; if ( (void *)LODWORD(v23) != v47 ) { while ( HIDWORD(v63) < *(_DWORD *)(v1 + 572568) && v22 ) { v24 = *(_DWORD *)(LODWORD(v23) + 16); *(_WORD *)(*(_DWORD *)(v24 + 1820) + 28) |= 1u; if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v24 + 520))(v24) ) { v25 = *(_DWORD **)(v22 + 8); *(float *)v62 = *(float *)v22; if ( v25 ) { HIBYTE(v66) = 0; sub_68E990((int)v25, v22, v24, 1); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v24 + 648))(v24) || v61[143142] != 50 ) { sub_68E990((int)v25, v22, v24, 0); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v24 + 32))(v24) || sub_651680(v24) ) { v26 = dword_ACDA74; v27 = *(_DWORD *)dword_ACDA74; LODWORD(v60) = *(unsigned __int16 *)(v24 + 942); if ( (*(unsigned __int8 (__thiscall **)(int, float))(v27 + 16))(dword_ACDA74, COERCE_FLOAT(LODWORD(v60))) ) { if ( LOWORD(v60) <= *(_WORD *)(v26 + 200) ) { v28 = (int *)(*(_DWORD *)(v26 + 196) + 4 * LOWORD(v60)); if ( *v28 ) { v29 = *v28; if ( *v28 ) { v30 = *(_DWORD *)(v29 + 166); if ( v30 ) { v58 = *(_DWORD *)(v29 + 166); v60 = (double)v30; sub_4558F0((int)(v25 + 2), v60, v60); } HIBYTE(v66) = *(_DWORD *)(v29 + 166) == 0; } } } } } else { sub_4558F0((int)(v25 + 2), 50.0, 50.0); } } if ( sub_650CC0((_BYTE *)v24) || !(*(int (__thiscall **)(int))(*(_DWORD *)v24 + 12))(v24) || HIBYTE(v66) ) { *(_WORD *)(v25[29] + 28) |= 1u; } else { *(_WORD *)(v25[29] + 28) &= 0xFFFEu; v31 = *(_DWORD *)(v24 + 700); v32 = (*(int (__thiscall **)(int))(*(_DWORD *)v24 + 204))(v24); sub_68E670(v25, v31, v32); } ++HIDWORD(v63); } v23 = v64; v22 = *(_DWORD *)v62; } *(_WORD *)(*(_DWORD *)(v24 + 1820) + 28) &= 0xFFFEu; if ( !*(_BYTE *)(LODWORD(v23) + 21) ) { v33 = *(float *)(LODWORD(v23) + 8); if ( *(_BYTE *)(LODWORD(v33) + 21) ) { v35 = *(float *)(LODWORD(v23) + 4); if ( !*(_BYTE *)(LODWORD(v35) + 21) ) { while ( LODWORD(v23) == *(_DWORD *)(LODWORD(v35) + 8) ) { v64 = v35; v35 = *(float *)(LODWORD(v35) + 4); if ( *(_BYTE *)(LODWORD(v35) + 21) ) break; v23 = v64; } } v64 = v35; } else { v34 = *(float *)LODWORD(v33); if ( !*(_BYTE *)(*(_DWORD *)LODWORD(v33) + 21) ) { do { v33 = v34; v34 = *(float *)LODWORD(v34); } while ( !*(_BYTE *)(LODWORD(v34) + 21) ); } v64 = v33; } v23 = v64; } if ( (void *)LODWORD(v23) == v47 ) break; v1 = (int)v61; } } v36 = *(int ***)dword_B9E1D0; v60 = *(float *)&dword_B9E1D0; if ( v22 ) { while ( v36 != (int **)LODWORD(v60) && HIDWORD(v63) < v61[143142] ) { v20 = *((_BYTE *)v36 + 21) == 0; v37 = v36[4]; v58 = (int)v36[4]; if ( v20 ) { v38 = v36[2]; if ( *((_BYTE *)v38 + 21) ) { for ( i = v36[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v36 != (int **)i[2] ) break; v36 = (int **)i; } v36 = (int **)i; } else { v39 = (int *)*v38; if ( !*(_BYTE *)(*v38 + 21) ) { do { v38 = v39; v39 = (int *)*v39; } while ( !*((_BYTE *)v39 + 21) ); } v36 = (int **)v38; } } if ( v37 ) { v41 = (float *)v37[9]; v50 = v41[22]; v51 = v41[23]; v42 = v41[24]; *(float *)v62 = v53 - v50; v52 = v42; v64 = v54 - v51; v66 = v55 - v42; *(float *)v62 = *(float *)v62 * *(float *)v62 + v64 * v64 + v66 * v66; *(float *)v62 = sqrt(*(float *)v62); if ( *(float *)v62 <= 1000.0 ) { v43 = *(_DWORD **)(v22 + 8); *(float *)v62 = *(float *)v22; sub_68E670(v43, *(_DWORD *)(v58 + 36), (int)&v50); v22 = *(_DWORD *)v62; *(_WORD *)(v43[29] + 28) &= 0xFFFEu; ++HIDWORD(v63); } } if ( !v22 ) goto LABEL_76; } if ( v22 ) { while ( 1 ) { v44 = *(float *)v22; *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v22 + 8) + 116) + 28) |= 1u; *(float *)v62 = v44; if ( v44 == 0.0 ) break; v22 = *(_DWORD *)v62; } } } LABEL_76: *(_BYTE *)(v57 + 12) = v65; v45 = *(_DWORD **)v47; v67 = 1; sub_6CDE90(&v46, (int *)&v56, v45, v47); operator delete(v47); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // AC9CE8: using guessed type int dword_AC9CE8; // ACDA74: using guessed type int dword_ACDA74; // AD8CCC: using guessed type int dword_AD8CCC; //----- (006A0F50) -------------------------------------------------------- _DWORD *__cdecl sub_6A0F50(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 21) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 21) ); } return result; } //----- (006A0F70) -------------------------------------------------------- int __thiscall sub_6A0F70(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x1FFFFFFE ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 20) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 20) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 21) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 20) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 20) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 21) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 20) = 1; *(_BYTE *)(v13 + 20) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 20) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 20) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 21) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 20) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 20) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 21) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 20) = 1; *(_BYTE *)(v22 + 20) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 20) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 20) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 20) = 1; return result; } //----- (006A11A0) -------------------------------------------------------- char sub_6A11A0() { return 1; } //----- (006A11B0) -------------------------------------------------------- void __thiscall sub_6A11B0(_DWORD *this) { int v1; // edi int v2; // esi v1 = (int)(this + 143133); this[143135] = 0; v2 = this[143134]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } *(_DWORD *)(v1 + 4) = 0; } } //----- (006A11C0) -------------------------------------------------------- void __thiscall sub_6A11C0(_DWORD *this) { int v1; // edi int v2; // esi v1 = (int)(this + 143133); this[143135] = 0; v2 = this[143134]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } *(_DWORD *)(v1 + 4) = 0; } } //----- (006A11D0) -------------------------------------------------------- int __thiscall sub_6A11D0(_DWORD *this, float a2) { return (*(int (__stdcall **)(_DWORD))(this[143133] + 12))(LODWORD(a2)); } //----- (006A11F0) -------------------------------------------------------- char *__cdecl sub_6A11F0(char *a1, char a2) { char *v2; // eax char v3; // cl char *v4; // eax char v5; // cl signed int v6; // esi const char *v7; // edi v2 = a1; if ( a1 ) { do { v3 = *v2; v2[byte_B871D0 - a1] = *v2; ++v2; } while ( v3 ); v4 = byte_B871D0; dword_B871C8 = byte_B871D0; } else { v4 = dword_B871C8; if ( !dword_B871C8 ) return 0; } v5 = *v4; if ( !*v4 ) return 0; v6 = 0; v7 = v4; do { ++v4; if ( v5 == a2 ) break; v5 = *v4; ++v6; } while ( *v4 ); dword_B871C8 = v4; if ( v6 <= 0 ) { byte_B7D1C8[0] = 0; } else { strncpy(byte_B7D1C8, v7, v6); byte_B7D1C8[v6] = 0; } return byte_B7D1C8; } //----- (006A1280) -------------------------------------------------------- char __cdecl sub_6A1280(const char *a1, char *a2) { char *v3; // eax char *v4; // edx char *v5; // edi int v6; // esi char v7; // cl char v8; // al signed int v9; // esi const char *v10; // ecx char *v11; // esi char *v12; // eax char v13; // cl char *v14; // eax char v15; // cl char *v16; // eax char v17; // cl char *v18; // eax int v19; // esi char v20; // cl signed int v21; // [esp+Ch] [ebp-8008h] char v22; // [esp+10h] [ebp-8004h] char v23; // [esp+11h] [ebp-8003h] char v24; // [esp+5010h] [ebp-3004h] char v25; // [esp+5011h] [ebp-3003h] char v26; // [esp+5810h] [ebp-2804h] char v27; // [esp+6010h] [ebp-2004h] char v28; // [esp+6810h] [ebp-1804h] char v29; // [esp+7010h] [ebp-1004h] char v30; // [esp+7810h] [ebp-804h] v22 = 0; memset(&v23, 0, 0x4FFFu); if ( !sub_913DE0(&v22, 20479, (int)a1, 1) ) return 0; sub_913950(&v22, a1, byte_B7250A); if ( &v22 + strlen(&v22) + 1 == &v23 ) return 0; v24 = 0; memset(&v25, 0, 0x2FFFu); v21 = 0; v3 = sub_6A11F0(&v22, 44); if ( !v3 ) return 0; v4 = dword_B871C8; v5 = &v24; while ( v21 < 6 ) { v6 = v5 - v3; do { v7 = *v3; v3[v6] = *v3; ++v3; } while ( v7 ); ++v21; v5 += 2048; if ( !v4 ) break; v8 = *v4; if ( !*v4 ) break; v9 = 0; v10 = v4; do { ++v4; if ( v8 == 44 ) break; v8 = *v4; ++v9; } while ( *v4 ); dword_B871C8 = v4; if ( v9 <= 0 ) { byte_B7D1C8[0] = 0; } else { strncpy(byte_B7D1C8, v10, v9); v4 = dword_B871C8; byte_B7D1C8[v9] = 0; } v3 = byte_B7D1C8; } if ( v21 < 5 || strlen(&v24) > 0x10 ) return 0; v11 = strcpy(a2, &v24); *((_DWORD *)v11 + 32) = atoi(&v26); v12 = &v27; do { v13 = *v12; v12[v11 - &v27 + 132] = *v12; ++v12; } while ( v13 ); v14 = &v28; do { v15 = *v14; v14[v11 - &v28 + 2180] = *v14; ++v14; } while ( v15 ); v16 = &v29; do { v17 = *v16; v16[v11 - &v29 + 4228] = *v16; ++v16; } while ( v17 ); v18 = &v30; v19 = v11 - &v30; do { v20 = *v18; v18[v19 + 6276] = *v18; ++v18; } while ( v20 ); return 1; } //----- (006A14C0) -------------------------------------------------------- char __cdecl sub_6A14C0(int a1) { int v1; // esi char *v3; // eax char *v4; // edx char *v5; // edi int v6; // esi char v7; // cl char v8; // al signed int v9; // esi const char *v10; // ecx char *v11; // eax char v12; // cl char *v13; // eax char v14; // cl char *v15; // eax char v16; // cl char *v17; // eax int v18; // esi char v19; // cl signed int v20; // [esp+Ch] [ebp-8008h] char v21[20480]; // [esp+10h] [ebp-8004h] char v22; // [esp+5010h] [ebp-3004h] char v23; // [esp+5011h] [ebp-3003h] char v24; // [esp+5810h] [ebp-2804h] char v25; // [esp+6010h] [ebp-2004h] char v26; // [esp+6810h] [ebp-1804h] char v27; // [esp+7010h] [ebp-1004h] char v28; // [esp+7810h] [ebp-804h] v1 = a1; if ( !byte_B68509 ) return 0; v21[0] = 0; memset(&v21[1], 0, 0x4FFFu); sub_913AF0(byte_B7250A, (int)&byte_B6850A, (int)v21); if ( &v21[strlen(v21) + 1] == &v21[1] ) return 0; v22 = 0; memset(&v23, 0, 0x2FFFu); v20 = 0; v3 = sub_6A11F0(v21, 44); if ( !v3 ) return 0; v4 = dword_B871C8; v5 = &v22; while ( v20 < 6 ) { v6 = v5 - v3; do { v7 = *v3; v3[v6] = *v3; ++v3; } while ( v7 ); ++v20; v5 += 2048; if ( !v4 || (v8 = *v4) == 0 ) { v1 = a1; break; } v9 = 0; v10 = v4; do { ++v4; if ( v8 == 44 ) break; v8 = *v4; ++v9; } while ( *v4 ); dword_B871C8 = v4; if ( v9 <= 0 ) { v1 = a1; byte_B7D1C8[0] = 0; } else { strncpy(byte_B7D1C8, v10, v9); v4 = dword_B871C8; byte_B7D1C8[v9] = 0; v1 = a1; } v3 = byte_B7D1C8; } if ( v20 < 5 ) return 0; if ( strlen(&v22) > 0x10 ) return 0; strcpy((char *)v1, &v22); *(_DWORD *)(v1 + 128) = atoi(&v24); v11 = &v25; do { v12 = *v11; v11[v1 - (_DWORD)&v25 + 132] = *v11; ++v11; } while ( v12 ); v13 = &v26; do { v14 = *v13; v13[v1 - (_DWORD)&v26 + 2180] = *v13; ++v13; } while ( v14 ); v15 = &v27; do { v16 = *v15; v15[v1 - (_DWORD)&v27 + 4228] = *v15; ++v15; } while ( v16 ); v17 = &v28; v18 = v1 - (_DWORD)&v28; do { v19 = *v17; v17[v18 + 6276] = *v17; ++v17; } while ( v19 ); return 1; } // B68509: using guessed type char byte_B68509; // B6850A: using guessed type char byte_B6850A; //----- (006A1740) -------------------------------------------------------- int __thiscall sub_6A1740(int this, int a2, float a3) { int result; // eax float v4; // [esp+Ch] [ebp+8h] *(_WORD *)(this + 85142) = *(_WORD *)a2; *(_BYTE *)(this + 85144) = *(_BYTE *)(a2 + 2); result = *(unsigned __int8 *)(this + 85144); v4 = (double)(result + 60 * (*(unsigned __int8 *)(this + 85143) + 60 * *(unsigned __int8 *)(this + 85142))); *(float *)(this + 85148) = v4; *(float *)(this + 85152) = a3; *(float *)(this + 85168) = v4; return result; } //----- (006A17B0) -------------------------------------------------------- double __thiscall sub_6A17B0(int this, float a2) { double result; // st7 double v3; // st6 unsigned __int8 v4; // al unsigned __int8 v5; // al signed int v6; // edx float v7; // [esp+10h] [ebp+8h] float v8; // [esp+10h] [ebp+8h] float v9; // [esp+10h] [ebp+8h] v7 = a2 - *(float *)(this + 85152) + *(float *)(this + 85148); result = v7; v3 = v7; v8 = flt_AB52A0 * (double)(unsigned int)(signed __int64)(v7 / flt_AB52A0); v9 = v3 - v8; *(float *)(this + 85168) = v9; v4 = (signed int)(v9 / 3600.0); *(_BYTE *)(this + 85142) = v4; v5 = (signed int)((*(float *)(this + 85168) - (double)v4 * 3600.0) / 60.0); v6 = *(unsigned __int8 *)(this + 85142); *(_BYTE *)(this + 85143) = v5; *(_BYTE *)(this + 85144) = (signed int)(*(float *)(this + 85168) - 3600.0 * (double)v6 - 60.0 * (double)v5); return result; } // AB52A0: using guessed type float flt_AB52A0; //----- (006A18D0) -------------------------------------------------------- int __thiscall sub_6A18D0(_DWORD *this) { return this[21295]; } //----- (006A18E0) -------------------------------------------------------- int __thiscall sub_6A18E0(_DWORD *this, int a2) { int result; // eax result = a2; this[21295] = a2; return result; } //----- (006A1960) -------------------------------------------------------- char __cdecl sub_6A1960(char *a1) { signed int v1; // edi int v2; // ebx const char *v3; // ecx const char *v4; // esi char result; // al v1 = 1; if ( dword_BA2C9C > 1 ) { v2 = dword_BA2CA0; do { v3 = *(const char **)(v2 + 4 * v1); v4 = *(const char **)(v2 + 4 * v1 + 4); if ( !v3 || !*v3 ) break; if ( !strcmp(v3, "-osk_token") ) { if ( v4 && *v4 ) { byte_B68509 = 1; strcpy(&byte_B6850A, v4); } v1 += 2; } else { ++v1; } } while ( v1 < dword_BA2C9C ); } if ( byte_B68509 ) result = sub_6A1280(&byte_B6850A, a1); else result = 0; return result; } // B68509: using guessed type char byte_B68509; // B6850A: using guessed type char byte_B6850A; // BA2C9C: using guessed type int dword_BA2C9C; // BA2CA0: using guessed type int dword_BA2CA0; //----- (006A1A20) -------------------------------------------------------- int __thiscall sub_6A1A20(int this) { int v1; // esi int v2; // edi _DWORD *v3; // ST0C_4 v1 = this; v2 = this + 81940; memset((void *)(this + 81940), 0, 0x400u); memset((void *)(v2 + 1024), 0, 0x400u); memset((void *)(v2 + 2048), 0, 0x400u); *(_DWORD *)(v1 + 85116) = 0; *(_DWORD *)(v1 + 85112) = 0; *(_DWORD *)(v1 + 85108) = 0; *(_DWORD *)(v1 + 85104) = 0; *(_WORD *)v1 = 0; *(_DWORD *)(v1 + 85132) = 0; *(_DWORD *)(v1 + 85136) = 0; *(_DWORD *)(v1 + 85176) = 0; *(_WORD *)(v1 + 85140) = -1; v3 = (_DWORD *)(v1 + 85084); v3[3] = 0; v3[2] = 0; v3[1] = 0; *v3 = 0; strncpy((char *)(v1 + 85084), "feul.gamigo.com", 0x10u); *(float *)(v1 + 85168) = 0.0; *(_DWORD *)(v1 + 85100) = 9010; *(_DWORD *)(v1 + 85180) = -1; *(_BYTE *)(v1 + 81922) = 0; memset((void *)(v1 + 2), 0, 0x5000u); *(_BYTE *)(v1 + 81923) = 0; return v1; } //----- (006A1C00) -------------------------------------------------------- int __thiscall sub_6A1C00(void **this, unsigned __int8 *a2) { void **v2; // esi char *v3; // eax char *v4; // edi char *v5; // eax char *v6; // edi unsigned __int8 *v7; // ebx int result; // eax int v9; // edi int v10; // ecx int *v11; // eax int v12; // ebx unsigned int v13; // edi int v14; // edx int v15; // edx _DWORD *v16; // ecx v2 = this; operator delete[](this[21283]); operator delete[](v2[21284]); v3 = (char *)v2[21282]; if ( v3 ) { v4 = v3 - 4; `eh vector destructor iterator'(v3, 0x10u, *((_DWORD *)v3 - 1), nullsub_6); operator delete[](v4); } v5 = (char *)v2[21294]; if ( v5 ) { v6 = v5 - 4; `eh vector destructor iterator'(v5, 0x12u, *((_DWORD *)v5 - 1), nullsub_6); operator delete[](v6); } v7 = a2; result = *a2; v2[21281] = (void *)result; if ( result ) { v2[21293] = (void *)result; v9 = result; v10 = 18 * result | -(18 * (unsigned __int64)(unsigned int)result >> 32 != 0); v11 = (int *)operator new[]((v10 + 4) | -__CFADD__(v10, 4)); if ( v11 ) { v12 = (int)(v11 + 1); *v11 = v9; `eh vector constructor iterator'(v11 + 1, 0x12u, v9, sub_6A1DF0, nullsub_6); result = v12; v7 = a2; } else { result = 0; } v13 = 0; v2[21294] = (void *)result; if ( v2[21281] ) { v14 = -10 - (_DWORD)v7; result = (int)(v7 + 10); while ( 1 ) { v15 = result + v14; *((_BYTE *)v2[21294] + v15 + 16) = *(_BYTE *)(result - 9); v16 = (char *)v2[21294] + v15; *v16 = *(_DWORD *)(result - 8); v16[1] = *(_DWORD *)(result - 4); v16[2] = *(_DWORD *)result; v16[3] = *(_DWORD *)(result + 4); ++v13; *((_BYTE *)v2[21294] + v15 + 17) = *(_BYTE *)(result + 8); result += 18; if ( v13 >= (unsigned int)v2[21281] ) break; v14 = -10 - (_DWORD)v7; } } } return result; } //----- (006A1DF0) -------------------------------------------------------- void __thiscall sub_6A1DF0(void *this) { *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; } //----- (006A1E00) -------------------------------------------------------- void *__thiscall sub_6A1E00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CVirtualServer::IProtoStruct::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6850: using guessed type void *CVirtualServer::IProtoStruct::`vftable'; //----- (006A1E60) -------------------------------------------------------- int __cdecl sub_6A1E60(int a1, char a2, int a3, float *a4, int a5, unsigned int a6) { int v6; // esi _DWORD *v7; // ST00_4 char v8; // bl int v9; // edi __int16 v10; // ax __int16 v11; // cx __int16 v12; // dx __int16 v13; // ax char v14; // dl double v15; // st7 int result; // eax unsigned int v17; // [esp+1Ch] [ebp+8h] v6 = a1; v7 = (_DWORD *)(a1 + 2); v7[4] = 0; v7[3] = 0; v7[2] = 0; v7[1] = 0; *v7 = 0; strncpy((char *)(a1 + 2), byte_9F6848, 0x14u); v8 = a2; *(_BYTE *)(a1 + 32) = a2; *(_DWORD *)(a1 + 41) = -1; *(_DWORD *)(a1 + 45) = -1; *(_DWORD *)(a1 + 49) = -1; *(_DWORD *)(a1 + 53) = -1; *(_WORD *)(a1 + 57) = -1; *(_WORD *)(a1 + 39) = -1; *(_WORD *)(a1 + 73) = -1; *(_DWORD *)(a1 + 61) = -1; *(_DWORD *)(a1 + 65) = -1; *(_DWORD *)(a1 + 69) = -1; *(_WORD *)(a1 + 59) = -1; v17 = 0; if ( sub_548A40() ) { while ( 1 ) { v9 = sub_7474E0((_DWORD *)(dword_ACB230 + 4), v17); if ( sub_6622F0(*(_DWORD *)(v9 + 207)) & (1i64 << *(_BYTE *)(v6 + 32)) ) { if ( *(_DWORD *)(v9 + 127) < a6 ) goto LABEL_13; switch ( *(_DWORD *)(v9 + 110) ) { case 7: v12 = *(_WORD *)v9; *(_BYTE *)(v6 + 78) &= 0xF0u; *(_WORD *)(v6 + 43) = v12; break; case 0x13: v11 = *(_WORD *)v9; *(_BYTE *)(v6 + 78) &= 0xFu; *(_WORD *)(v6 + 47) = v11; break; case 0x15: v10 = *(_WORD *)v9; *(_BYTE *)(v6 + 79) &= 0xF0u; *(_WORD *)(v6 + 49) = v10; break; } } if ( *(_WORD *)(v6 + 43) != -1 && *(_WORD *)(v6 + 47) != -1 && *(_WORD *)(v6 + 49) != -1 ) { LABEL_14: v8 = a2; break; } LABEL_13: if ( ++v17 >= sub_548A40() ) goto LABEL_14; } } v13 = rand(); v14 = *(_BYTE *)(v6 + 33); *(_WORD *)v6 = v13; *(_BYTE *)(v6 + 31) = 1; *(_BYTE *)(v6 + 33) = v14 & 3 | 4 * (32 * a3 | v8 & 0x1F); *(_WORD *)(v6 + 35) = 0; *(_BYTE *)(v6 + 34) = 0; *(_BYTE *)(v6 + 33) ^= (sub_662140(v8) ^ *(_BYTE *)(v6 + 33)) & 3; *(_DWORD *)(v6 + 22) = (unsigned __int16)(signed int)*a4; v15 = a4[1]; *(_BYTE *)(v6 + 30) = 0; result = HIWORD(a3) | 0xC00; *(_DWORD *)(v6 + 26) = (unsigned __int16)(signed int)v15; return result; } // ACB230: using guessed type int dword_ACB230; //----- (006A2280) -------------------------------------------------------- char **__thiscall sub_6A2280(char **this, float a2, int a3) { int v3; // edi char **v4; // esi char *v5; // edi char **result; // eax char *v7; // ecx float v8; // [esp+18h] [ebp+8h] v3 = a3; v4 = this; (**(void (__thiscall ***)(int, _DWORD))a3)(a3, LODWORD(flt_ACCFCC)); v8 = flt_ACCFCC + a2; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 4))(v3, LODWORD(v8)); v5 = *v4; result = sub_67ADC0(*v4, *((_DWORD *)*v4 + 1), (int)&a3); v7 = v4[1]; if ( (unsigned int)(1073741822 - (_DWORD)v7) < 1 ) std::_Xlength_error("list too long"); v4[1] = v7 + 1; *((_DWORD *)v5 + 1) = result; *(_DWORD *)result[1] = result; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006A2300) -------------------------------------------------------- char **__thiscall sub_6A2300(char **this, char a2, int a3, float *a4, int a5, unsigned int a6) { char **v6; // esi char *v7; // eax void *v8; // ebx _DWORD *v9; // eax char *v10; // edi char **result; // eax char *v12; // ecx v6 = this; v7 = (char *)operator new(0xF6u); if ( v7 ) { *(_DWORD *)(v7 + 18) = 0; *(_DWORD *)(v7 + 14) = 0; *(_DWORD *)(v7 + 10) = 0; *(_DWORD *)(v7 + 6) = 0; *(_DWORD *)(v7 + 2) = 0; v8 = v7; } else { v8 = 0; } memset(v8, 0, 0xF6u); sub_6A1E60((int)v8, a2, a3, a4, a5, a6); v9 = operator new(0x1Cu); if ( v9 ) { *v9 = &CVirtualServer::ProtoStruct::`vftable'; v9[3] = 7; v9[4] = 6; v9[5] = v8; v9[6] = 246; } else { v9 = 0; } sub_6A2280(v6, 3.0, (int)v9); v10 = v6[3]; result = sub_6A26C0(v6[3], *((_DWORD *)v10 + 1), (int)v8); v12 = v6[4]; if ( (unsigned int)(2147483646 - (_DWORD)v12) < 1 ) std::_Xlength_error("list too long"); v6[4] = v12 + 1; *((_DWORD *)v10 + 1) = result; *(_DWORD *)result[1] = result; *((_BYTE *)v6 + 28) = 1; return result; } // 9F6888: using guessed type void *CVirtualServer::ProtoStruct::`vftable'; //----- (006A23E0) -------------------------------------------------------- char **__thiscall sub_6A23E0(char **this, __int16 a2, __int16 a3) { char **v3; // edi char *v4; // eax char *v5; // esi _DWORD *v6; // eax char **result; // eax v3 = this; v4 = (char *)operator new(0xDu); v5 = v4; *(_DWORD *)v4 = 0; *((_DWORD *)v4 + 1) = 0; *((_DWORD *)v4 + 2) = 0; v4[12] = 0; v4[4] = 0; *(_WORD *)v4 = a2; *(_DWORD *)(v4 + 5) = 0; *((_WORD *)v4 + 1) = a3; *(_WORD *)(v4 + 9) = 1000; v6 = operator new(0x1Cu); if ( v6 ) { *v6 = &CVirtualServer::ProtoStruct::`vftable'; v6[3] = 9; v6[4] = 46; v6[5] = v5; v6[6] = 13; } else { v6 = 0; } result = sub_6A2280(v3, 3.0, (int)v6); *((_BYTE *)v3 + 28) = 1; return result; } // 9F68C0: using guessed type void *CVirtualServer::ProtoStruct::`vftable'; //----- (006A25D0) -------------------------------------------------------- int __thiscall sub_6A25D0(_DWORD *this, int a2) { int result; // eax result = a2; this[5] = a2; return result; } //----- (006A25E0) -------------------------------------------------------- double __thiscall sub_6A25E0(float *this) { return this[1]; } //----- (006A25F0) -------------------------------------------------------- int __thiscall sub_6A25F0(_DWORD *this) { return this[4]; } //----- (006A2600) -------------------------------------------------------- void __thiscall sub_6A2600(float *this, float a2) { this[1] = a2; } //----- (006A2610) -------------------------------------------------------- void __thiscall sub_6A2610(float *this, float a2) { this[2] = a2; } //----- (006A2630) -------------------------------------------------------- int __thiscall sub_6A2630(_DWORD *this, int a2) { int result; // eax result = a2; this[6] = a2; return result; } //----- (006A2640) -------------------------------------------------------- _DWORD *__thiscall sub_6A2640(void *this, char a2) { _DWORD *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 5); *(_DWORD *)this = &CVirtualServer::ProtoStruct::`vftable'; if ( v3 ) operator delete(v3); *v2 = &CVirtualServer::IProtoStruct::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6850: using guessed type void *CVirtualServer::IProtoStruct::`vftable'; // 9F68C0: using guessed type void *CVirtualServer::ProtoStruct::`vftable'; //----- (006A2680) -------------------------------------------------------- _DWORD *__thiscall sub_6A2680(void *this, char a2) { _DWORD *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 5); *(_DWORD *)this = &CVirtualServer::ProtoStruct::`vftable'; if ( v3 ) operator delete(v3); *v2 = &CVirtualServer::IProtoStruct::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6850: using guessed type void *CVirtualServer::IProtoStruct::`vftable'; // 9F6888: using guessed type void *CVirtualServer::ProtoStruct::`vftable'; //----- (006A26C0) -------------------------------------------------------- char **__stdcall sub_6A26C0(char *a1, int a2, int a3) { char **result; // eax int v4; // edx void **v5; // [esp+0h] [ebp-Ch] result = (char **)operator new(0xCu); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a1); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) *((_WORD *)result + 4) = *(_WORD *)a3; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006A2720) -------------------------------------------------------- bool __thiscall sub_6A2720(int this, float a2) { bool result; // al float v3; // [esp+8h] [ebp+8h] result = 0; if ( !*(_DWORD *)(this + 608) ) { v3 = a2 - *(float *)(this + 100); if ( *(float *)(this + 104) < (double)v3 ) result = 1; } return result; } //----- (006A2750) -------------------------------------------------------- _DWORD *__thiscall sub_6A2750(_DWORD *this, int a2, char a3) { _DWORD *v3; // esi int v4; // edi _DWORD *result; // eax v3 = this; sub_6A83F0((float *)this, a2, a3, 0); *v3 = &AfterImgEff::`vftable'; v3[2] = &AfterImgEff::`vftable'; sub_8D0610((_BYTE *)v3 + 524); v3[142] = 0; *((float *)v3 + 138) = 1.0; v3[139] = 1; v3[141] = 0; *((float *)v3 + 140) = 0.0; v3[152] = 0; v4 = v3[142]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[142] = 0; } result = v3; *((float *)v3 + 143) = 0.0; return result; } // 9F69C4: using guessed type void *AfterImgEff::`vftable'; // 9F69DC: using guessed type void *AfterImgEff::`vftable'; //----- (006A2830) -------------------------------------------------------- LONG __thiscall sub_6A2830(_DWORD *this) { _DWORD *v1; // esi int v2; // edi void (__stdcall ***v3)(signed int); // ecx int v4; // edi v1 = this; *this = &AfterImgEff::`vftable'; this[2] = &AfterImgEff::`vftable'; v2 = this[142]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[142] = 0; } v3 = (void (__stdcall ***)(signed int))v1[141]; if ( v3 ) (**v3)(1); v4 = v1[142]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_6A7FF0(v1); } // 9F69C4: using guessed type void *AfterImgEff::`vftable'; // 9F69DC: using guessed type void *AfterImgEff::`vftable'; //----- (006A2900) -------------------------------------------------------- void __thiscall sub_6A2900(float *this, float a2) { float *v2; // ebx int v3; // eax unsigned int v4; // ecx int v5; // eax int v6; // edi const char *v7; // esi double v8; // st6 unsigned int v9; // [esp+4h] [ebp-Ch] int v10; // [esp+Ch] [ebp-4h] float v11; // [esp+18h] [ebp+8h] v2 = this; v3 = *((_DWORD *)this + 152); if ( v3 ) { if ( *((_DWORD *)this + 21) ) { v4 = *(_DWORD *)(v3 + 12); v5 = *(_DWORD *)(v3 + 16); v6 = 0; v11 = a2 - v2[25]; v9 = v4; v10 = v5; if ( v4 ) { while ( 1 ) { v7 = *(const char **)(v5 + 8 * v6 + 4); v8 = *(float *)(v5 + 8 * v6); if ( v8 > v11 ) break; if ( v8 >= 0.0 && v2[27] < v8 && v8 <= v11 ) { if ( !strncmp(v7, "on", 2u) ) { *(_WORD *)(*((_DWORD *)v2 + 21) + 28) &= 0xFFFEu; } else if ( !strncmp(v7, "off", 3u) ) { *(_WORD *)(*((_DWORD *)v2 + 21) + 28) |= 1u; } } if ( ++v6 >= v9 ) break; v5 = v10; } } } } } //----- (006A29F0) -------------------------------------------------------- char __thiscall sub_6A29F0(float *this, float a2) { float *v2; // esi LONG v3; // eax _DWORD **v4; // edi int (__thiscall ***v5)(_DWORD, signed int); // edi int *v6; // eax int *v7; // eax double v8; // st7 signed int v9; // eax int v10; // ebx bool v11; // zf int *v12; // eax int *v13; // eax int v14; // ecx float v15; // ST20_4 float v16; // ST24_4 float v17; // ST28_4 float v18; // ST14_4 double v19; // st7 float v20; // ST18_4 double v21; // st7 int v22; // ecx float v23; // ST1C_4 float v24; // ecx double v25; // st7 float v26; // edx float v27; // eax float v28; // ecx float v29; // edx float v30; // eax float v31; // ST08_4 int v32; // eax float v34; // [esp+2Ch] [ebp-38h] float v35; // [esp+30h] [ebp-34h] float v36; // [esp+34h] [ebp-30h] float v37; // [esp+38h] [ebp-2Ch] float v38; // [esp+3Ch] [ebp-28h] float v39; // [esp+40h] [ebp-24h] float v40; // [esp+44h] [ebp-20h] float v41; // [esp+48h] [ebp-1Ch] float v42; // [esp+4Ch] [ebp-18h] float v43; // [esp+50h] [ebp-14h] float v44; // [esp+54h] [ebp-10h] int v45; // [esp+58h] [ebp-Ch] signed int v46; // [esp+5Ch] [ebp-8h] float v47; // [esp+60h] [ebp-4h] v2 = this; sub_6A2900(this, a2); if ( !*((_DWORD *)v2 + 141) ) { LOBYTE(v3) = sub_6A7C90(a2); return v3; } v3 = *((_DWORD *)v2 + 142); v4 = 0; v45 = 0; if ( v3 ) { if ( *(_DWORD *)(v3 + 4) == 1 ) { v5 = (int (__thiscall ***)(_DWORD, signed int))v3; if ( v3 ) { v3 = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !v3 && v5 ) LOBYTE(v3) = (**v5)(v5, 1); v2[142] = 0.0; } return v3; } v4 = *(_DWORD ***)(v3 + 12); LOBYTE(v3) = sub_8C4C90((_DWORD *)(v3 + 120), *(_DWORD *)(v3 + 64), &v45); if ( !(_BYTE)v3 ) return v3; LOBYTE(v3) = v45; if ( !v45 ) return v3; } v40 = *(float *)&dword_BA45C0; v41 = *(float *)&dword_BA45C4; v42 = *(float *)&dword_BA45C8; v37 = *(float *)&dword_BA45C0; v38 = *(float *)&dword_BA45C4; v39 = *(float *)&dword_BA45C8; if ( v4 ) sub_85BED0(v4, a2, 1); v6 = (int *)*((_DWORD *)v2 + 150); if ( v6 ) { v40 = *((float *)v6 + 35); v41 = *((float *)v6 + 36); v42 = *((float *)v6 + 37); } v7 = (int *)*((_DWORD *)v2 + 151); if ( v7 ) { v37 = *((float *)v7 + 35); v38 = *((float *)v7 + 36); v39 = *((float *)v7 + 37); } v44 = a2 - v2[143]; v34 = v2[144] - v40; v35 = v2[145] - v41; v36 = v2[146] - v42; *(float *)&v46 = v35 * v35 + v34 * v34 + v36 * v36; *(float *)&v46 = sqrt(*(float *)&v46); v47 = *(float *)&v46; v34 = v2[147] - v37; v35 = v2[148] - v38; v36 = v2[149] - v39; *(float *)&v46 = v35 * v35 + v34 * v34 + v36 * v36; *(float *)&v46 = sqrt(*(float *)&v46); v8 = v47; if ( *(float *)&v46 >= (double)v47 ) v8 = *(float *)&v46; *(float *)&v46 = v8; v9 = (signed int)(*(float *)&v46 / -3.0); v10 = 1 - v9; v46 = 1 - v9; v44 = v44 / (double)(1 - v9); v47 = v2[143]; v34 = v40 - v2[144]; v35 = v41 - v2[145]; v36 = v42 - v2[146]; sub_4430B0(&v34); *(float *)&v46 = 0.0; if ( v10 > 0 ) { do { v11 = *((_DWORD *)v2 + 139) == 0; v47 = v47 + v44; if ( v11 ) { if ( !v45 || *(float *)(v45 + 76) <= (double)v47 ) { if ( v4 ) sub_85BED0(v4, v47, 1); v12 = (int *)*((_DWORD *)v2 + 150); v40 = *((float *)v12 + 35); v41 = *((float *)v12 + 36); v42 = *((float *)v12 + 37); v13 = (int *)*((_DWORD *)v2 + 151); v37 = *((float *)v13 + 35); v14 = *((_DWORD *)v2 + 141); v38 = *((float *)v13 + 36); v39 = *((float *)v13 + 37); (*(void (__stdcall **)(float *, float *))(*(_DWORD *)v14 + 12))(&v40, &v37); } } else { v43 = (double)v46 * 3.0; v15 = v34 * v43; v16 = v35 * v43; v17 = v43 * v36; v18 = v15 + v2[144]; v19 = v2[145]; v40 = v18; v20 = v19 + v16; v21 = v2[146]; v41 = v20; v22 = *((_DWORD *)v2 + 141); v23 = v21 + v17; v42 = v23; (*(void (__stdcall **)(float *, float *))(*(_DWORD *)v22 + 12))(&v40, &v40); } ++v46; } while ( v46 < v10 ); } v24 = v40; v25 = a2; v26 = v41; v2[143] = a2; v27 = v42; v2[144] = v24; v28 = v37; v2[145] = v26; v29 = v38; v2[146] = v27; v30 = v39; v2[147] = v28; v2[148] = v29; v2[149] = v30; if ( v4 ) { sub_85BED0(v4, a2, 1); v25 = a2; } v31 = v25; v32 = sub_8D0630(v2 + 131, v31); if ( v32 ) sub_6A4250(*((_DWORD **)v2 + 141), v32); (*(void (__cdecl **)(_DWORD))(**((_DWORD **)v2 + 141) + 8))(LODWORD(a2)); LOBYTE(v3) = sub_6A7C90(a2); return v3; } // 6A29F0: could not find valid save-restore pair for edi // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006A2E20) -------------------------------------------------------- int __thiscall sub_6A2E20(float *this, float a2) { int v2; // esi int v3; // edx int v4; // ecx _DWORD *v5; // eax _DWORD *v6; // eax int v7; // ecx double v8; // st7 float v9; // ST00_4 v2 = (int)this; sub_8D06A0(this + 131, a2); *(float *)(v2 + 544) = 0.0089999996; *(_DWORD *)(v2 + 588) = dword_BA45C0; *(_DWORD *)(v2 + 592) = dword_BA45C4; v3 = dword_BA45C8; *(_DWORD *)(v2 + 596) = dword_BA45C8; v4 = *(_DWORD *)(v2 + 592); *(_DWORD *)(v2 + 576) = *(_DWORD *)(v2 + 588); v5 = *(_DWORD **)(v2 + 600); *(_DWORD *)(v2 + 580) = v4; *(_DWORD *)(v2 + 584) = v3; if ( v5 ) { *(_DWORD *)(v2 + 576) = v5[35]; *(_DWORD *)(v2 + 580) = v5[36]; *(_DWORD *)(v2 + 584) = v5[37]; } v6 = *(_DWORD **)(v2 + 604); if ( v6 ) { *(_DWORD *)(v2 + 588) = v6[35]; *(_DWORD *)(v2 + 592) = v6[36]; *(_DWORD *)(v2 + 596) = v6[37]; } v7 = *(_DWORD *)(v2 + 564); v8 = a2; *(float *)(v2 + 572) = a2; if ( v7 ) { sub_6A43B0(v7, SLODWORD(a2)); v8 = a2; } v9 = v8; return sub_6A3CF0(v2, v9); } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006A2F10) -------------------------------------------------------- void sub_6A2F10() { void **v0; // eax void **v1; // edi volatile LONG *v2; // esi void **v3; // eax void **v4; // edi volatile LONG *v5; // esi if ( dword_B911E0 ) { v0 = (void **)dword_B911DC; v1 = *(void ***)dword_B911DC; if ( *(void **)dword_B911DC != dword_B911DC ) { do { v2 = (volatile LONG *)v1[4]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); v1[4] = 0; v0 = (void **)dword_B911DC; } } while ( v1 != v0 ); } sub_6A3DB0(v0[1]); *((_DWORD *)dword_B911DC + 1) = dword_B911DC; *(_DWORD *)dword_B911DC = dword_B911DC; *((_DWORD *)dword_B911DC + 2) = dword_B911DC; dword_B911E0 = 0; } if ( dword_B911F0 ) { v3 = (void **)dword_B911EC; v4 = *(void ***)dword_B911EC; if ( *(void **)dword_B911EC != dword_B911EC ) { do { v5 = (volatile LONG *)v4[4]; if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) ) { if ( v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); } v4[4] = 0; v3 = (void **)dword_B911EC; } } while ( v4 != v3 ); } sub_6A3DB0(v3[1]); *((_DWORD *)dword_B911EC + 1) = dword_B911EC; *(_DWORD *)dword_B911EC = dword_B911EC; *((_DWORD *)dword_B911EC + 2) = dword_B911EC; dword_B911F0 = 0; } } // B911E0: using guessed type int dword_B911E0; // B911F0: using guessed type int dword_B911F0; //----- (006A3000) -------------------------------------------------------- int *__stdcall sub_6A3000(int *a1, int a2) { int v2; // edi volatile LONG *v3; // eax volatile LONG *v4; // esi _DWORD *v5; // eax int v6; // eax int v8; // eax int v9; // [esp+10h] [ebp-12Ch] volatile LONG *v10; // [esp+18h] [ebp-124h] char v11[4]; // [esp+1Ch] [ebp-120h] void **v12; // [esp+20h] [ebp-11Ch] int *v13; // [esp+24h] [ebp-118h] int v14; // [esp+28h] [ebp-114h] char Src; // [esp+2Ch] [ebp-110h] int v16; // [esp+138h] [ebp-4h] v2 = 0; v14 = 0; v13 = a1; v10 = 0; v16 = 1; sub_4DD710(&unk_B911D8, (int **)&v12, &a2); if ( dword_B911DC == v12 ) { memset(&Src, 0, 0x100u); if ( !byte_ACAD5C ) sub_420410(); sprintf(&Src, "%sUpAftImgEf%02d.nif", byte_ACA838, a2); v3 = sub_8F63D0(&Src, 0); v4 = v3; if ( v3 ) { v10 = v3; InterlockedIncrement(v3 + 1); LOBYTE(v16) = 2; *(_DWORD *)v11 = a2; v12 = (void **)v4; InterlockedIncrement(v4 + 1); v5 = sub_6E43A0(&unk_B911D8, v11); sub_6A4090(&unk_B911D8, (int)&v9, v5, 0); v6 = sub_85BD60((void *)v4); *v13 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v14 = 1; LOBYTE(v16) = 1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); LOBYTE(v16) = 0; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); return v13; } } else { v8 = sub_85BD60(v12[4]); if ( v8 ) { v2 = v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); } } *a1 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v14 = 1; LOBYTE(v16) = 0; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return a1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006A31F0) -------------------------------------------------------- int *__stdcall sub_6A31F0(int *a1, int a2) { int v2; // edi volatile LONG *v3; // eax volatile LONG *v4; // esi _DWORD *v5; // eax int v6; // eax int v8; // eax int v9; // [esp+10h] [ebp-12Ch] volatile LONG *v10; // [esp+18h] [ebp-124h] char v11[4]; // [esp+1Ch] [ebp-120h] void **v12; // [esp+20h] [ebp-11Ch] int *v13; // [esp+24h] [ebp-118h] int v14; // [esp+28h] [ebp-114h] char v15; // [esp+2Ch] [ebp-110h] int v16; // [esp+138h] [ebp-4h] v2 = 0; v13 = a1; v14 = 0; sub_4DD710(&unk_B911E8, (int **)&v12, &a2); v10 = 0; v16 = 1; if ( dword_B911EC == v12 ) { memset(&v15, 0, 0x100u); if ( !byte_ACAD5C ) sub_420410(); sprintf(&v15, "%sUpAftImgEf%02d.dds", byte_ACA838, a2); v3 = sub_486130((int)&v15); v4 = v3; if ( v3 ) { v10 = v3; InterlockedIncrement(v3 + 1); LOBYTE(v16) = 2; *(_DWORD *)v11 = a2; v12 = (void **)v4; InterlockedIncrement(v4 + 1); v5 = sub_6E43A0(&unk_B911E8, v11); sub_6A4090(&unk_B911E8, (int)&v9, v5, 0); v6 = sub_85BD60((void *)v4); *v13 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v14 = 1; LOBYTE(v16) = 1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); LOBYTE(v16) = 0; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); return v13; } } else { v8 = sub_85BD60(v12[4]); if ( v8 ) { v2 = v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); } } *a1 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v14 = 1; LOBYTE(v16) = 0; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return a1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006A33E0) -------------------------------------------------------- char __thiscall sub_6A33E0(void *this, _DWORD *a2, int a3, int a4) { void *v4; // edi int (__thiscall *v6)(_DWORD *, const char *); // eax int v7; // eax void (__stdcall ***v8)(signed int); // ecx char *v9; // eax char *v10; // eax int v11; // eax void (__stdcall ***v12)(signed int); // ecx char *v13; // eax void (__stdcall *v14)(signed int); // eax _DWORD *v15; // ebx void *v16; // esi int v17; // eax int v18; // eax int v19; // esi int v20; // esi int v21; // ebx unsigned __int8 v22; // al _DWORD *v23; // ebx void *v24; // esi int v25; // eax int v26; // eax void (__thiscall ***v27)(_DWORD, signed int); // esi _DWORD *v28; // eax _DWORD *v29; // eax _DWORD *v30; // eax char v31; // [esp+3Ch] [ebp-1Ch] int v32; // [esp+40h] [ebp-18h] int v33; // [esp+44h] [ebp-14h] int v34; // [esp+48h] [ebp-10h] int v35; // [esp+54h] [ebp-4h] _DWORD *v36; // [esp+60h] [ebp+8h] v4 = this; if ( !sub_8F5CC0(a2, &v34) ) return 0; v6 = *(int (__thiscall **)(_DWORD *, const char *))(*a2 + 72); if ( *((_DWORD *)v4 + 139) ) { v11 = v6(a2, "AftImgDummy0"); *((_DWORD *)v4 + 150) = v11; if ( v11 ) { v12 = (void (__stdcall ***)(signed int))*((_DWORD *)v4 + 141); *((_DWORD *)v4 + 151) = 0; if ( v12 ) (**v12)(1); v13 = (char *)operator new(0x58u); v35 = 1; if ( v13 ) { v10 = sub_6A4D00(v13); goto LABEL_16; } LABEL_15: v10 = 0; goto LABEL_16; } return 0; } *((_DWORD *)v4 + 150) = v6(a2, "AftImgDummy0"); v7 = (*(int (__thiscall **)(_DWORD *, const char *))(*a2 + 72))(a2, "AftImgDummy1"); *((_DWORD *)v4 + 151) = v7; if ( !*((_DWORD *)v4 + 150) || !v7 ) return 0; v8 = (void (__stdcall ***)(signed int))*((_DWORD *)v4 + 141); if ( v8 ) (**v8)(1); v9 = (char *)operator new(0x4Cu); v35 = 0; if ( !v9 ) goto LABEL_15; v10 = sub_6A47D0(v9); LABEL_16: *((_DWORD *)v4 + 141) = v10; v14 = *(void (__stdcall **)(signed int))(*(_DWORD *)v10 + 4); v35 = -1; v14(300); *(float *)(*((_DWORD *)v4 + 141) + 4) = *((float *)v4 + 140); v15 = *(_DWORD **)(v34 + 160); v36 = *(_DWORD **)(*((_DWORD *)v4 + 141) + 72); while ( v15 ) { v16 = (void *)v15[2]; v15 = (_DWORD *)*v15; v17 = (*(int (__thiscall **)(void *))(*(_DWORD *)v16 + 60))(v16); sub_85CA90(v36, (volatile LONG **)&v33, v17); if ( v33 ) { v32 = v33; if ( !InterlockedDecrement((volatile LONG *)(v33 + 4)) ) { if ( v32 ) (**(void (__stdcall ***)(signed int))v32)(1); } } v18 = sub_85BD60(v16); v19 = v18; v32 = v18; if ( v18 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); v35 = 2; sub_8A6330(v36 + 39, &v32); v35 = -1; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); } v20 = a4; if ( a4 ) { v21 = a3; v22 = *(_BYTE *)(a3 + a4 + 26); if ( v22 != -1 ) { sub_6A31F0(&a3, v22); v35 = 3; if ( a3 ) { sub_6A3000(&a4, *(unsigned __int8 *)(v21 + v20 + 26)); LOBYTE(v35) = 4; if ( a4 ) { if ( sub_8F5CC0((_DWORD *)a4, &v32) ) { v23 = *(_DWORD **)(v32 + 160); while ( v23 ) { v24 = (void *)v23[2]; v23 = (_DWORD *)*v23; if ( !(*(int (__thiscall **)(void *))(*(_DWORD *)v24 + 60))(v24) || (*(int (__thiscall **)(void *))(*(_DWORD *)v24 + 60))(v24) == 8 ) { v25 = (*(int (__thiscall **)(void *))(*(_DWORD *)v24 + 60))(v24); sub_85CA90(v36, (volatile LONG **)&v31, v25); sub_410C00(&v31); v26 = sub_85BD60(v24); sub_403700(v36, v26); } } } v27 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( a4 ) { if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) && v27 ) (**v27)(v27, 1); a4 = 0; } } v28 = (_DWORD *)sub_85C050(v36, 8); if ( v28 ) sub_42AB40(v28, a3); LOBYTE(v35) = 3; sub_410C00(&a4); } v35 = -1; sub_410C00(&a3); } } v29 = operator new(0xE8u); v35 = 5; if ( v29 ) v30 = sub_85A1C0(v29, 0); else v30 = 0; v35 = -1; sub_56FF80((_DWORD *)v4 + 21, (int)v30); *(_WORD *)(*((_DWORD *)v4 + 21) + 28) &= 0xFFFEu; (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v4 + 21) + 116))(*(_DWORD *)(*((_DWORD *)v4 + 141) + 72), 0); sub_85C4D0(*((_DWORD **)v4 + 21)); sub_85C6F0(*((_DWORD **)v4 + 21)); sub_85BED0(*((_DWORD ***)v4 + 21), 0.0, 1); return 1; } //----- (006A37A0) -------------------------------------------------------- float *__cdecl sub_6A37A0(int a1) { int v1; // eax unsigned int v2; // ebx int v3; // esi int v4; // ecx _DWORD *v5; // edi int v6; // eax int v8; // eax float *v9; // esi char *v10; // edx char *v11; // ecx char v12; // al char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax _DWORD *v17; // eax _DWORD *v18; // ecx float v19; // [esp+14h] [ebp-128h] float v20; // [esp+18h] [ebp-124h] int v21; // [esp+1Ch] [ebp-120h] _DWORD *v22; // [esp+20h] [ebp-11Ch] char v23; // [esp+24h] [ebp-118h] char v24[4]; // [esp+124h] [ebp-18h] int v25; // [esp+138h] [ebp-4h] v1 = a1; v2 = *(_DWORD *)(a1 + 20); v3 = 0; v22 = (_DWORD *)a1; if ( !v2 ) return 0; while ( 1 ) { v4 = *(_DWORD *)(v1 + 16); v5 = *(_DWORD **)(v4 + 4 * v3); if ( v5 ) break; LABEL_7: if ( ++v3 >= v2 ) return 0; } v6 = (*(int (__thiscall **)(_DWORD))(*v5 + 4))(*(_DWORD *)(v4 + 4 * v3)); if ( !v6 ) { LABEL_6: v1 = (int)v22; goto LABEL_7; } while ( (char *)v6 != dword_BA3BA8 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v8 = v5[4]; v9 = 0; if ( !v8 ) return 0; v21 = 1; v19 = 0.30000001; v10 = &v23; v20 = 8.0; v11 = *(char **)(v8 + 4); do { v12 = *v11; *v10++ = *v11++; } while ( v12 ); strcpy(v24, " \t\n\r"); v13 = strtok(&v23, v24); if ( !v13 ) return 0; do { if ( !strcmp(v13, "Type") ) { v14 = strtok(0, v24); if ( !v14 ) return 0; v21 = atoi(v14); } else if ( !strcmp(v13, "ExpandTime") ) { v15 = strtok(0, v24); if ( !v15 ) return 0; sscanf(v15, "%f", &v19); } else { if ( strcmp(v13, "Width") ) return 0; v16 = strtok(0, v24); if ( !v16 ) return 0; sscanf(v16, "%f", &v20); } v13 = strtok(0, v24); } while ( v13 ); v17 = operator new(0x264u); v25 = 0; if ( v17 ) v9 = (float *)sub_6A2750(v17, 0, 0); v18 = v22; *((_DWORD *)v9 + 139) = v21; v9[138] = v19; v9[140] = v20; v25 = -1; sub_6A33E0(v9, v18, 0, 0); *((_DWORD *)v9 + 152) = v5; return v9; } //----- (006A3A30) -------------------------------------------------------- float *__cdecl sub_6A3A30(int a1, int a2, int a3) { int v3; // eax unsigned int v4; // ebx int v5; // edi _DWORD *v6; // esi int v7; // eax int v9; // esi int v10; // ebx char *v11; // edx char *v12; // ecx char v13; // al char *v14; // esi char *v15; // eax char *v16; // eax char *v17; // eax _DWORD *v18; // eax float *v19; // esi _DWORD *v20; // edx float v21; // [esp+18h] [ebp-124h] float v22; // [esp+1Ch] [ebp-120h] _DWORD *v23; // [esp+20h] [ebp-11Ch] char v24; // [esp+24h] [ebp-118h] char v25[4]; // [esp+124h] [ebp-18h] int v26; // [esp+138h] [ebp-4h] v3 = a1; v4 = *(_DWORD *)(a1 + 20); v5 = 0; v23 = (_DWORD *)a1; if ( !v4 ) return 0; while ( 1 ) { v6 = *(_DWORD **)(*(_DWORD *)(v3 + 16) + 4 * v5); if ( v6 ) break; LABEL_7: if ( ++v5 >= v4 ) return 0; } v7 = (*(int (__thiscall **)(_DWORD *))(*v6 + 4))(v6); if ( !v7 ) { LABEL_6: v3 = (int)v23; goto LABEL_7; } while ( (char *)v7 != dword_BA3BA8 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_6; } v9 = v6[4]; if ( !v9 ) return 0; v10 = 1; v22 = 0.30000001; v11 = &v24; v21 = 8.0; v12 = *(char **)(v9 + 4); do { v13 = *v12; *v11++ = *v12++; } while ( v13 ); strcpy(v25, " \t\n\r"); v14 = strtok(&v24, v25); if ( !v14 ) return 0; do { if ( !strcmp(v14, "Type") ) { v15 = strtok(0, v25); if ( !v15 ) return 0; v10 = atoi(v15); } else if ( !strcmp(v14, "ExpandTime") ) { v16 = strtok(0, v25); if ( !v16 ) return 0; sscanf(v16, "%f", &v22); } else { if ( strcmp(v14, "Width") ) return 0; v17 = strtok(0, v25); if ( !v17 ) return 0; sscanf(v17, "%f", &v21); } v14 = strtok(0, v25); } while ( v14 ); v18 = operator new(0x264u); v26 = 0; if ( v18 ) v19 = (float *)sub_6A2750(v18, 0, 0); else v19 = 0; v20 = v23; *((_DWORD *)v19 + 139) = v10; v19[138] = v22; v19[140] = v21; v26 = -1; sub_6A33E0(v19, v20, a2, a3); v19[152] = 0.0; return v19; } //----- (006A3CD0) -------------------------------------------------------- void *__thiscall sub_6A3CD0(char *this, char a2) { return sub_6A3D80(this - 8, a2); } //----- (006A3CE0) -------------------------------------------------------- char *sub_6A3CE0() { return &byte_B871D0[40960]; } //----- (006A3CF0) -------------------------------------------------------- int __thiscall sub_6A3CF0(int this, float a2) { int v2; // esi int result; // eax int **i; // esi int (__stdcall *v5)(_DWORD); // edx v2 = this; *(float *)(this + 100) = a2; sub_6A95B0((_DWORD *)(this + 32), a2); result = sub_6A9460((_DWORD *)(v2 + 152), a2); for ( i = *(int ***)(v2 + 128); i; result = v5(LODWORD(a2)) ) { v5 = *(int (__stdcall **)(_DWORD))(*i[2] + 60); i = (int **)*i; } return result; } //----- (006A3D80) -------------------------------------------------------- void *__thiscall sub_6A3D80(void *this, char a2) { void *v2; // esi v2 = this; sub_6A2830(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A3DB0) -------------------------------------------------------- void __stdcall sub_6A3DB0(void *a1) { _DWORD *v1; // ebx void *i; // esi int v3; // edi v1 = a1; for ( i = a1; !*((_BYTE *)i + 21); v1 = i ) { sub_6A3DB0(*((void **)i + 2)); v3 = v1[4]; i = *(void **)i; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v1); } } //----- (006A3E10) -------------------------------------------------------- int *__thiscall sub_6A3E10(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi int v7; // eax void **v8; // ebx _DWORD *v9; // eax int v10; // ebx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // esi int v17; // eax int *result; // eax _BYTE *v19; // [esp+0h] [ebp-8h] _DWORD *v20; // [esp+4h] [ebp-4h] v20 = this; if ( *(_BYTE *)(a3 + 21) ) std::_Xout_of_range("invalid map/set iterator"); v3 = (int *)a3; v19 = (_BYTE *)a3; sub_717D90(&a3); if ( *(_BYTE *)(*v3 + 21) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; v7 = v20[1]; if ( *(int **)(v7 + 4) == v3 ) { *(_DWORD *)(v7 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } v8 = (void **)v20[1]; if ( *v8 == v19 ) { if ( *(_BYTE *)(v4 + 21) ) v9 = (_DWORD *)v6; else v9 = sub_6A0F50((_DWORD *)v4); *v8 = v9; } v10 = v20[1]; if ( *(_BYTE **)(v10 + 8) == v19 ) { if ( *(_BYTE *)(v4 + 21) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_667AC0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 21) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v20[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 20); *(_BYTE *)(v5 + 20) = *((_BYTE *)v3 + 20); *((_BYTE *)v3 + 20) = v13; LABEL_35: if ( v19[20] == 1 ) { for ( i = v20; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 20) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_6915A0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v20; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; v15[20] = 0; sub_664400(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v20; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; sub_6915A0(i, v6); break; } } else { if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_664400(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v20; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 20) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; v15[20] = 0; sub_6915A0(i, (int)v15); v15 = *(_BYTE **)v6; i = v20; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; sub_664400(i, (_DWORD *)v6); break; } } v15[20] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 20) = 1; } v16 = *((_DWORD *)v19 + 4); if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); operator delete(v19); v17 = v20[2]; if ( v17 ) v20[2] = v17 - 1; result = a2; *a2 = a3; return result; } //----- (006A4090) -------------------------------------------------------- int __thiscall sub_6A4090(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // edi int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // ebx int v11; // ebx int v12; // edx int result; // eax int v14; // ecx int v15; // esi char v16; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v16 = 1; if ( !*(_BYTE *)(v7 + 21) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v16 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_670930(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { v15 = v4[4]; if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); } v4 = a3; } operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_670930(v5, (int)&a4, v16, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006A4190) -------------------------------------------------------- int *__thiscall sub_6A4190(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 21) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 21) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 21); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_6A3E10(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_6A3DB0(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (006A4250) -------------------------------------------------------- void __thiscall sub_6A4250(_DWORD *this, int a2) { int v2; // esi int v3; // edx int v4; // eax v2 = this[5]; if ( v2 >= 0 || this[4] >= 0 ) { v3 = this[4]; v4 = v2 - v3; if ( v2 - v3 < 0 ) v4 += this[2]; if ( v4 + 1 <= a2 ) this[4] = v2; else this[4] = (v3 + a2) % this[2]; } } //----- (006A4290) -------------------------------------------------------- _DWORD *__thiscall sub_6A4290(_DWORD *this, _DWORD *a2, _DWORD *a3) { int v3; // edx int v4; // eax int v5; // eax bool v6; // sf unsigned __int8 v7; // of int v8; // eax int v9; // edx int v10; // eax _DWORD *v11; // eax _DWORD *result; // eax v3 = this[5]; v4 = this[4] - v3; if ( v4 > 0 ) v5 = v4 - 1; else v5 = v4 + this[2] - 1; v7 = __OFSUB__(v5, 1); v6 = v5 - 1 < 0; v8 = v3 + 1; this[5] = v3 + 1; if ( v6 ^ v7 ) this[4] = v3 + 2; v9 = this[2]; if ( v8 >= v9 ) this[5] = v8 - v9; v10 = this[4]; if ( v10 >= v9 ) this[4] = v10 - v9; if ( this[4] < 0 ) this[4] = 0; v11 = (_DWORD *)(this[14] + 24 * this[5]); *v11 = *a2; v11[1] = a2[1]; v11[2] = a2[2]; result = (_DWORD *)(this[14] + 24 * this[5] + 12); *result = *a3; result[1] = a3[1]; result[2] = a3[2]; return result; } //----- (006A4330) -------------------------------------------------------- _DWORD *__thiscall sub_6A4330(_DWORD *this, _DWORD *a2, int a3) { int v3; // edx int v4; // eax int v5; // eax bool v6; // sf unsigned __int8 v7; // of int v8; // eax int v9; // edx int v10; // eax _DWORD *result; // eax v3 = this[5]; v4 = this[4] - v3; if ( v4 > 0 ) v5 = v4 - 1; else v5 = v4 + this[2] - 1; v7 = __OFSUB__(v5, 1); v6 = v5 - 1 < 0; v8 = v3 + 1; this[5] = v3 + 1; if ( v6 ^ v7 ) this[4] = v3 + 2; v9 = this[2]; if ( v8 >= v9 ) this[5] = v8 - v9; v10 = this[4]; if ( v10 >= v9 ) this[4] = v10 - v9; if ( this[4] < 0 ) this[4] = 0; result = (_DWORD *)(this[14] + 12 * this[5]); *result = *a2; result[1] = a2[1]; result[2] = a2[2]; return result; } //----- (006A43B0) -------------------------------------------------------- signed int __thiscall sub_6A43B0(int this, int a2) { signed int result; // eax *(_DWORD *)(this + 16) = -1; *(_DWORD *)(this + 20) = -1; *(_WORD *)(this + 13) = 1; result = 65534; *(_WORD *)(*(_DWORD *)(this + 72) + 28) &= 0xFFFEu; return result; } //----- (006A43F0) -------------------------------------------------------- char *__thiscall sub_6A43F0(char *this) { char *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *(_DWORD *)this = &AfterImgShape::`vftable'; *((float *)this + 6) = 0.0; *((float *)this + 7) = 0.0; *((float *)this + 8) = 0.0; *((float *)this + 9) = 0.0; *((float *)this + 10) = 0.0; *((float *)this + 11) = 0.0; *((float *)this + 12) = 0.0; *((float *)this + 13) = 0.0; *((_DWORD *)this + 15) = 0; *((_DWORD *)this + 16) = 0; *((_DWORD *)this + 17) = 0; *((_DWORD *)this + 18) = 0; *((float *)this + 1) = 5.0; *((_DWORD *)this + 4) = -1; *((_DWORD *)this + 5) = -1; *(_WORD *)(this + 13) = 0; *((_DWORD *)this + 2) = 256; *((_DWORD *)this + 14) = 0; v2 = *((_DWORD *)this + 18); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *((_DWORD *)v1 + 18) = 0; } v3 = *((_DWORD *)v1 + 15); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v1 + 15) = 0; } v4 = *((_DWORD *)v1 + 16); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 16) = 0; } v5 = *((_DWORD *)v1 + 17); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 17) = 0; } v1[12] = 0; *((float *)v1 + 6) = 1.0; *((float *)v1 + 7) = 1.0; *((float *)v1 + 8) = 1.0; *((float *)v1 + 10) = 1.0; *((float *)v1 + 9) = 1.0; *((float *)v1 + 11) = 1.0; *((float *)v1 + 12) = 1.0; *((float *)v1 + 13) = 1.0; return v1; } // 9F6C74: using guessed type void *AfterImgShape::`vftable'; //----- (006A4570) -------------------------------------------------------- void __thiscall sub_6A4570(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // esi v1 = this; *this = &AfterImgShape::`vftable'; v2 = this[18]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[18] = 0; } v3 = v1[15]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[15] = 0; } v4 = v1[16]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[16] = 0; } v5 = v1[17]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[17] = 0; } if ( v1[14] ) operator delete[]((void *)v1[14]); v1[14] = 0; v6 = v1[18]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[17]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[16]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[15]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } } // 9F6C74: using guessed type void *AfterImgShape::`vftable'; //----- (006A47D0) -------------------------------------------------------- char *__thiscall sub_6A47D0(char *this) { char *v1; // esi v1 = this; sub_6A43F0(this); *(_DWORD *)v1 = &AfterImgShape0::`vftable'; return v1; } // 9F6C88: using guessed type void *AfterImgShape0::`vftable'; //----- (006A4800) -------------------------------------------------------- char __thiscall sub_6A4800(int this, int a2) { int v2; // esi int v3; // ecx int v4; // ecx int v5; // ecx int v6; // eax int v7; // edx int v8; // ebx int v9; // edx int v10; // eax int v11; // edi int v12; // eax float v13; // ecx int v14; // edx int v15; // eax int v16; // ebx _DWORD *v17; // eax _DWORD *v18; // ecx _DWORD *v19; // ecx double v20; // st7 float *v21; // eax double v22; // st7 int *v23; // eax float *v24; // eax float *v25; // eax int v26; // ecx int v27; // edx int v28; // eax _DWORD *v29; // eax int v30; // ebx _WORD *v31; // edi _DWORD *v32; // eax int v34; // [esp+20h] [ebp-190h] char v35; // [esp+30h] [ebp-180h] char v36; // [esp+40h] [ebp-170h] int v37; // [esp+50h] [ebp-160h] int v38; // [esp+54h] [ebp-15Ch] int v39; // [esp+58h] [ebp-158h] int v40; // [esp+5Ch] [ebp-154h] int v41; // [esp+60h] [ebp-150h] int v42; // [esp+64h] [ebp-14Ch] int v43; // [esp+68h] [ebp-148h] double v44; // [esp+6Ch] [ebp-144h] int v45; // [esp+74h] [ebp-13Ch] int v46; // [esp+78h] [ebp-138h] int v47; // [esp+7Ch] [ebp-134h] int v48; // [esp+80h] [ebp-130h] int v49; // [esp+84h] [ebp-12Ch] int v50; // [esp+88h] [ebp-128h] float v51; // [esp+8Ch] [ebp-124h] int v52; // [esp+90h] [ebp-120h] char v53; // [esp+94h] [ebp-11Ch] CPPEH_RECORD ms_exc; // [esp+198h] [ebp-18h] v2 = this; v42 = this; if ( !*(_BYTE *)(this + 13) ) return 0; if ( *(_BYTE *)(this + 14) ) return 0; v3 = *(_DWORD *)(this + 20); if ( v3 < 0 && *(_DWORD *)(v2 + 16) < 0 ) return 0; v4 = v3 - *(_DWORD *)(v2 + 16); if ( v4 < 0 ) v4 += *(_DWORD *)(v2 + 8); v5 = v4 + 1; v52 = v5; v6 = *(_DWORD *)(v2 + 72); v7 = *(_DWORD *)(v6 + 184); v8 = *(_DWORD *)(v7 + 32); v50 = v8; v9 = *(_DWORD *)(v7 + 44); v43 = v9; v10 = *(_DWORD *)(*(_DWORD *)(v6 + 184) + 40); v41 = v10; if ( !v8 || !v9 || !v10 ) { sprintf(&v53, "AfterImgShape0::Update() pkVerts:%d, pkTextures:%d, pkColors:%d\n", v8, v9, v10); sub_6A5F70(&v53); return 0; } v11 = 0; while ( 1 ) { v49 = v11; if ( v11 >= v5 ) break; v12 = 2 * (v11 + *(_DWORD *)(v2 + 16)); v13 = *(float *)&v12; LODWORD(v51) = 2 * (v11 + *(_DWORD *)(v2 + 16)); v14 = v12 + 1; HIDWORD(v44) = v12 + 1; v15 = 2 * *(_DWORD *)(v2 + 8); if ( SLODWORD(v13) >= v15 ) { LODWORD(v13) -= v15; v51 = v13; } if ( v14 >= v15 ) { v14 -= v15; HIDWORD(v44) = v14; } if ( SLODWORD(v13) >= v15 ) { sprintf( &v53, "AfterImgShape0::Update() nPosStart is %d count %d %d->%d\n", v13, v52, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 16)); LABEL_18: sub_6A5F70(&v53); return 0; } if ( v14 >= v15 ) { sprintf( &v53, "AfterImgShape0::Update() nPosEnd is %d count %d %d->%d\n", v14, v52, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 16)); goto LABEL_18; } if ( 2 * v11 >= v15 ) { sprintf( &v53, "AfterImgShape0::Update() iX2 is %d count %d %d->%d\n", 2 * v11, v52, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 16)); sub_6A5F70(&v53); return 0; } v16 = 2 * v11 + 1; if ( v16 >= v15 ) { sprintf( &v53, "AfterImgShape0::Update() ix2+1 is %d count %d %d->%d\n", v16, v52, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 16)); sub_6A5F70(&v53); return 0; } if ( v13 < 0.0 || v14 < 0 ) { sprintf(&v53, "AfterImgShape0::Update() nPosStart %d : nPosEnd %d \n", v13, v14); sub_6A5F70(&v53); return 0; } ms_exc.registration.TryLevel = 0; v17 = (_DWORD *)(v50 + 24 * v11); v18 = (_DWORD *)(*(_DWORD *)(v2 + 56) + 12 * LODWORD(v13)); *v17 = *v18; v17[1] = v18[1]; v17[2] = v18[2]; v19 = (_DWORD *)(*(_DWORD *)(v2 + 56) + 12 * v14); v17[3] = *v19; v17[4] = v19[1]; v17[5] = v19[2]; ms_exc.registration.TryLevel = -2; LODWORD(v51) = v52 - 1; if ( v52 == 1 ) v20 = 0.0; else v20 = (double)v49 / (double)SLODWORD(v51); v51 = v20; v44 = 1.0 - v51; v51 = v44; v21 = (float *)(v43 + 16 * v11); v22 = v51; *v21 = v51; v21[1] = 1.0; v21[2] = v22; v21[3] = 0.0; if ( *(_BYTE *)(v2 + 12) ) { v23 = (int *)sub_6A5E90((float *)(v2 + 40), (float *)&v36, (float *)(v2 + 24)); v45 = *v23; v46 = v23[1]; v47 = v23[2]; v48 = v23[3]; v51 = v44; v24 = sub_6A5EE0(&v45, (int)&v34, v51); v25 = sub_6A5E40((float *)(v2 + 24), (float *)&v35, v24); v26 = *(_DWORD *)v25; v27 = *((_DWORD *)v25 + 1); v47 = *((_DWORD *)v25 + 2); v28 = *((_DWORD *)v25 + 3); } else { v26 = *(_DWORD *)(v2 + 24); v27 = *(_DWORD *)(v2 + 28); v47 = *(_DWORD *)(v2 + 32); v28 = *(_DWORD *)(v2 + 36); } v48 = v28; v29 = (_DWORD *)(v41 + 32 * v11); *v29 = v26; v29[1] = v27; v29[2] = v47; v30 = v48; v29[3] = v48; v29[4] = v26; v29[5] = v27; v29[6] = v47; v29[7] = v30; ++v11; v8 = v50; v5 = v52; } if ( v5 == 1 ) { *(_DWORD *)(v8 + 24) = *(_DWORD *)v8; *(_DWORD *)(v8 + 28) = *(_DWORD *)(v8 + 4); *(_DWORD *)(v8 + 32) = *(_DWORD *)(v8 + 8); *(_DWORD *)(v8 + 36) = *(_DWORD *)(v8 + 12); *(_DWORD *)(v8 + 40) = *(_DWORD *)(v8 + 16); *(_DWORD *)(v8 + 44) = *(_DWORD *)(v8 + 20); v52 = 2; v5 = 2; } v31 = *(_WORD **)(*(_DWORD *)(v2 + 72) + 184); (*(void (__thiscall **)(_DWORD, int))(*(_DWORD *)v31 + 72))(*(_DWORD *)(*(_DWORD *)(v2 + 72) + 184), 2 * v5 - 2); (*(void (__thiscall **)(_WORD *, int))(*(_DWORD *)v31 + 60))(v31, 2 * v52); v31[25] |= 0xDu; sub_86B6C0((float *)&v37, 2 * v52, (float *)v8); v32 = *(_DWORD **)(*(_DWORD *)(v2 + 72) + 184); v32[4] = v37; v32[5] = v38; v32[6] = v39; v32[7] = v40; sub_85BED0(*(_DWORD ***)(v2 + 72), 0.0, 1); return 1; } //----- (006A4D00) -------------------------------------------------------- char *__thiscall sub_6A4D00(char *this) { char *v1; // esi v1 = this; sub_6A43F0(this); *(_DWORD *)v1 = &AfterImgShape1::`vftable'; *((_DWORD *)v1 + 19) = dword_BA45C0; *((_DWORD *)v1 + 20) = dword_BA45C4; *((_DWORD *)v1 + 21) = dword_BA45C8; return v1; } // 9F6C9C: using guessed type void *AfterImgShape1::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006A4D40) -------------------------------------------------------- char __thiscall sub_6A4D40(int this, int a2) { int v2; // esi int v4; // ebx int v5; // ebx _DWORD *v6; // eax int v7; // ecx int v8; // ebx int v9; // edi int v10; // edx double v11; // st7 double v12; // st6 double v13; // st5 int v14; // eax int v15; // ebx int v16; // ecx int v17; // eax int v18; // ebx int v19; // ecx double v20; // st4 int v21; // ecx double v22; // st4 float *v23; // ecx float *v24; // eax int v25; // edi float v26; // edx double v27; // st7 double v28; // st7 int v29; // eax int v30; // edx double v31; // st6 float *v32; // eax int v33; // ecx double v34; // st7 double v35; // st7 float *v36; // eax double v37; // st7 float *v38; // eax int v39; // ecx int v40; // edx int v41; // edx int v42; // eax float *v43; // eax float *v44; // eax int v45; // ecx int v46; // edi int v47; // ebx int v48; // eax _DWORD *v49; // eax double v50; // st6 int v51; // edx double v52; // st5 double v53; // rtt int v54; // edx int v55; // eax int v56; // ecx int v57; // edx int v58; // eax void (__stdcall *v59)(int); // edx _DWORD *v60; // eax int v61; // eax char *v62; // [esp+8h] [ebp-208h] int v63; // [esp+1Ch] [ebp-1F4h] char v64; // [esp+2Ch] [ebp-1E4h] char v65; // [esp+3Ch] [ebp-1D4h] char v66; // [esp+4Ch] [ebp-1C4h] char v67; // [esp+58h] [ebp-1B8h] double v68; // [esp+64h] [ebp-1ACh] float v69; // [esp+6Ch] [ebp-1A4h] float v70; // [esp+70h] [ebp-1A0h] float v71; // [esp+74h] [ebp-19Ch] float v72; // [esp+78h] [ebp-198h] float v73; // [esp+7Ch] [ebp-194h] float v74; // [esp+80h] [ebp-190h] int v75; // [esp+84h] [ebp-18Ch] float v76; // [esp+88h] [ebp-188h] float v77; // [esp+8Ch] [ebp-184h] float v78; // [esp+90h] [ebp-180h] float v79; // [esp+94h] [ebp-17Ch] float v80; // [esp+98h] [ebp-178h] float v81; // [esp+9Ch] [ebp-174h] float v82; // [esp+A0h] [ebp-170h] float v83; // [esp+A4h] [ebp-16Ch] float v84; // [esp+A8h] [ebp-168h] float v85; // [esp+ACh] [ebp-164h] float v86; // [esp+B0h] [ebp-160h] float v87; // [esp+B4h] [ebp-15Ch] int v88; // [esp+B8h] [ebp-158h] float v89; // [esp+BCh] [ebp-154h] float v90; // [esp+C0h] [ebp-150h] float v91; // [esp+C4h] [ebp-14Ch] float v92; // [esp+C8h] [ebp-148h] float v93; // [esp+CCh] [ebp-144h] float v94; // [esp+D0h] [ebp-140h] int v95; // [esp+D4h] [ebp-13Ch] int v96; // [esp+D8h] [ebp-138h] int v97; // [esp+DCh] [ebp-134h] int v98; // [esp+E0h] [ebp-130h] float v99; // [esp+E4h] [ebp-12Ch] float v100; // [esp+E8h] [ebp-128h] float v101; // [esp+ECh] [ebp-124h] float v102; // [esp+F0h] [ebp-120h] float v103; // [esp+F4h] [ebp-11Ch] float v104; // [esp+F8h] [ebp-118h] int v105; // [esp+FCh] [ebp-114h] _WORD *v106; // [esp+100h] [ebp-110h] int v107; // [esp+104h] [ebp-10Ch] float v108; // [esp+108h] [ebp-108h] char v109; // [esp+10Ch] [ebp-104h] v2 = this; if ( !*(_BYTE *)(this + 13) || *(_BYTE *)(this + 14) || !dword_B66FB0 ) return 0; v4 = *(_DWORD *)(this + 20); v99 = *(float *)(dword_B66FB0 + 104); v5 = v4 - *(_DWORD *)(this + 16); v100 = *(float *)(dword_B66FB0 + 116); v101 = *(float *)(dword_B66FB0 + 128); if ( v5 < 0 ) v5 += *(_DWORD *)(this + 8); v6 = *(_DWORD **)(*(_DWORD *)(this + 72) + 184); v7 = v6[11]; v8 = v5 + 1; v9 = v6[8]; v88 = v6[10]; v10 = 0; v107 = v8; v106 = (_WORD *)v9; v75 = v7; v105 = 0; if ( v8 > 0 ) { v11 = v101; v12 = v100; v13 = v99; while ( 1 ) { v14 = *(_DWORD *)(v2 + 8); v15 = v10 + *(_DWORD *)(v2 + 16); v108 = *(float *)&v15; v16 = v15 + 1; if ( v15 >= v14 ) { v15 -= v14; v108 = *(float *)&v15; } if ( v16 >= v14 ) v16 -= v14; v17 = *(_DWORD *)(v2 + 56); v18 = 12 * v15; if ( v107 <= 1 ) { *(_DWORD *)v9 = *(_DWORD *)(v17 + v18); *(_DWORD *)(v9 + 4) = *(_DWORD *)(v17 + v18 + 4); *(_DWORD *)(v9 + 8) = *(_DWORD *)(v17 + v18 + 8); v61 = *(_DWORD *)(v2 + 56); *(_DWORD *)(v9 + 12) = *(_DWORD *)(v61 + v18); *(_DWORD *)(v9 + 16) = *(_DWORD *)(v61 + v18 + 4); *(_DWORD *)(v9 + 20) = *(_DWORD *)(v61 + v18 + 8); goto LABEL_25; } v19 = 3 * v16; v20 = *(float *)(v18 + v17) - *(float *)(v17 + 4 * v19); v21 = v17 + 4 * v19; v102 = v20; v103 = *(float *)(v18 + v17 + 4) - *(float *)(v21 + 4); v22 = *(float *)(v18 + v17 + 8) - *(float *)(v21 + 8); v69 = v102; v70 = v103; v104 = v22; v71 = v104; if ( v10 ) { if ( v10 != v107 - 1 ) { v25 = v2 + 76; v79 = v103 * v11 - v104 * v12; v80 = v104 * v13 - v11 * v102; v81 = v102 * v12 - v103 * v13; v76 = v79 + *(float *)(v2 + 76); v77 = *(float *)(v2 + 80) + v80; v26 = v77; v27 = *(float *)(v2 + 84); *(float *)v25 = v76; v28 = v27 + v81; *(float *)(v25 + 4) = v26; v78 = v28; *(float *)(v25 + 8) = v78; sub_4430B0((float *)(v2 + 76)); goto LABEL_20; } v62 = &v67; v23 = &v72; } else { v62 = &v66; v23 = &v69; } v24 = sub_443140(v23, (float *)v62, &v99); v25 = v2 + 76; *(float *)v25 = *v24; *(float *)(v25 + 4) = v24[1]; *(float *)(v25 + 8) = v24[2]; LABEL_20: v74 = v104; v72 = v102; v73 = v103; if ( SLODWORD(v108) >= *(_DWORD *)(v2 + 8) ) { sprintf( &v109, "AfterImgShape1::Update() nPosStart is %d count %d %d->%d\n", v108, v107, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 16)); sub_6A5F70(&v109); return 0; } v29 = *(_DWORD *)(v2 + 56); v30 = v105; v108 = *(float *)(v2 + 4) * 0.5; v92 = v108 * *(float *)v25; v93 = v108 * *(float *)(v25 + 4); v94 = v108 * *(float *)(v25 + 8); v82 = *(float *)(v29 + v18) + v92; v83 = *(float *)(v29 + v18 + 4) + v93; v31 = *(float *)(v29 + v18 + 8) + v94; v32 = (float *)&v106[12 * v105]; *v32 = v82; v84 = v31; v32[1] = v83; v32[2] = v84; v33 = *(_DWORD *)(v2 + 56); v108 = 0.5 * *(float *)(v2 + 4); v89 = v108 * *(float *)v25; v90 = v108 * *(float *)(v25 + 4); v91 = v108 * *(float *)(v25 + 8); v85 = *(float *)(v33 + v18) - v89; v86 = *(float *)(v33 + v18 + 4) - v90; v34 = *(float *)(v33 + v18 + 8) - v91; v32[3] = v85; v32[4] = v86; v87 = v34; v35 = (double)v105; v32[5] = v87; v36 = (float *)(16 * v30 + v75); v108 = v35 / (double)(v107 - 1); v68 = 1.0 - v108; v108 = v68; v37 = v108; *v36 = v108; v36[1] = 1.0; v36[2] = v37; v36[3] = 0.0; if ( *(_BYTE *)(v2 + 12) ) { v38 = sub_6A5E90((float *)(v2 + 40), (float *)&v65, (float *)(v2 + 24)); v39 = *((_DWORD *)v38 + 1); v108 = v68; v40 = *(_DWORD *)v38; v96 = v39; v95 = v40; v41 = *((_DWORD *)v38 + 2); v42 = *((_DWORD *)v38 + 3); v97 = v41; v98 = v42; v43 = sub_6A5EE0(&v95, (int)&v63, v108); v44 = sub_6A5E40((float *)(v2 + 24), (float *)&v64, v43); v45 = *(_DWORD *)v44; v46 = *((_DWORD *)v44 + 1); v47 = *((_DWORD *)v44 + 2); v48 = *((_DWORD *)v44 + 3); v30 = v105; } else { v45 = *(_DWORD *)(v2 + 24); v46 = *(_DWORD *)(v2 + 28); v47 = *(_DWORD *)(v2 + 32); v48 = *(_DWORD *)(v2 + 36); } v98 = v48; v49 = (_DWORD *)(32 * v30 + v88); v50 = v99; v51 = v98; v52 = v100; v11 = v101; *v49 = v45; v53 = v52; v13 = v50; v12 = v53; v49[4] = v45; v49[1] = v46; v49[5] = v46; v9 = (int)v106; v49[2] = v47; v49[6] = v47; v49[3] = v51; v49[7] = v51; v10 = v105; LABEL_25: v105 = ++v10; if ( v10 >= v107 ) { v8 = v107; break; } } } if ( v8 == 1 ) { v54 = *(_DWORD *)(v9 + 4); v55 = *(_DWORD *)(v9 + 8); *(_DWORD *)(v9 + 24) = *(_DWORD *)v9; v56 = *(_DWORD *)(v9 + 12); *(_DWORD *)(v9 + 28) = v54; v57 = *(_DWORD *)(v9 + 16); *(_DWORD *)(v9 + 32) = v55; v58 = *(_DWORD *)(v9 + 20); *(_DWORD *)(v9 + 36) = v56; v107 = 2; v8 = 2; *(_DWORD *)(v9 + 40) = v57; *(_DWORD *)(v9 + 44) = v58; } v59 = *(void (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v2 + 72) + 184) + 72); v106 = *(_WORD **)(*(_DWORD *)(v2 + 72) + 184); v59(2 * v8 - 2); (*(void (__stdcall **)(int))(*(_DWORD *)v106 + 60))(2 * v8); v106[25] |= 0xDu; sub_86B6C0((float *)&v95, 2 * v8, (float *)v9); v60 = *(_DWORD **)(*(_DWORD *)(v2 + 72) + 184); v60[4] = v95; v60[5] = v96; v60[6] = v97; v60[7] = v98; sub_85BED0(*(_DWORD ***)(v2 + 72), 0.0, 1); return 1; } //----- (006A5360) -------------------------------------------------------- int __thiscall sub_6A5360(int this, volatile LONG *a2) { int v2; // esi _DWORD *v3; // ebx int v4; // eax int v5; // ecx int v6; // edi volatile LONG *v7; // eax int v8; // edi int v9; // ecx _WORD *v10; // edi int v11; // edx _WORD *v12; // eax int v13; // edi int v14; // ebx _DWORD *v15; // eax float *v16; // edi volatile LONG *v17; // eax int v18; // edi int v19; // eax _DWORD *v20; // eax _DWORD *v21; // edi _DWORD *v22; // ebx int v23; // edi volatile LONG *v24; // edi int v25; // ebx _DWORD *v26; // eax _DWORD *v27; // edi _DWORD *v28; // ebx int v29; // edi volatile LONG *v30; // edi int v31; // ebx _DWORD *v32; // ebx _DWORD *v33; // eax _DWORD *v34; // edi int v35; // edi volatile LONG *v36; // edi int v37; // esi int result; // eax void *v39; // [esp+20h] [ebp-18h] void *v40; // [esp+24h] [ebp-14h] _WORD *v41; // [esp+28h] [ebp-10h] v2 = this; *(_DWORD *)(this + 8) = a2; v3 = 0; if ( *(_DWORD *)(this + 56) ) operator delete(*(void **)(this + 56)); v4 = 24 * *(_DWORD *)(v2 + 8); v5 = 12 * (unsigned __int64)(unsigned int)(2 * *(_DWORD *)(v2 + 8)) >> 32 != 0; *(_DWORD *)(v2 + 56) = 0; *(_DWORD *)(v2 + 56) = operator new[](v4 | -v5); v39 = operator new[](24 * *(_DWORD *)(v2 + 8)); v40 = operator new[](16 * *(_DWORD *)(v2 + 8)); v6 = 2 * *(_DWORD *)(v2 + 8); v7 = (volatile LONG *)operator new[](32 * *(_DWORD *)(v2 + 8)); if ( v7 ) { v8 = v6 - 1; if ( v8 >= 0 ) { v9 = (int)(v7 + 2); do { *(float *)(v9 - 8) = 0.0; v9 += 16; --v8; *(float *)(v9 - 20) = 0.0; *(float *)(v9 - 16) = 0.0; *(float *)(v9 - 12) = 0.0; } while ( v8 >= 0 ); } a2 = v7; } else { a2 = 0; } v10 = operator new[](4 * (3 * *(_DWORD *)(v2 + 8) - 3)); v11 = 0; v41 = v10; if ( *(_DWORD *)(v2 + 8) - 1 > 0 ) { v12 = v10 + 2; do { v13 = 2 * v11 + 1; v14 = 2 * v11 + 2; *(v12 - 2) = 2 * v11; v12[2] = 2 * v11 + 3; *(v12 - 1) = v13; *v12 = v14; v12[1] = v13; v12[3] = v14; ++v11; v12 += 6; } while ( v11 < *(_DWORD *)(v2 + 8) - 1 ); v10 = v41; v3 = 0; } v15 = operator new(0x5Cu); if ( v15 ) v16 = (float *)sub_8747E0( v15, 2 * *(_WORD *)(v2 + 8), (int)v39, 0, (int)a2, (int)v40, 1, 0, 2 * *(_WORD *)(v2 + 8) - 2, (int)v10, 0, 0); else v16 = 0; v16[4] = 0.0; v16[5] = 0.0; v16[6] = 0.0; v16[7] = 10000.0; v17 = (volatile LONG *)operator new(0xC4u); a2 = v17; if ( v17 ) v3 = sub_866DF0(v17, (int)v16); v18 = *(_DWORD *)(v2 + 72); if ( (_DWORD *)v18 != v3 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); *(_DWORD *)(v2 + 72) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v19 = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_BA4928 + 4))(2); (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA4928 + 20))( v19, *(_DWORD *)(*(_DWORD *)(v2 + 72) + 184), 0); sub_85AB50(*(void ***)(v2 + 72), "The Swoosh"); v20 = operator new(0x20u); v21 = v20; a2 = v20; if ( v20 ) { sub_85B2B0(v20); *v21 = &NiAlphaProperty::`vftable'; *((_WORD *)v21 + 14) = 236; *((_BYTE *)v21 + 30) = 0; v22 = v21; } else { v22 = 0; } v23 = *(_DWORD *)(v2 + 68); if ( (_DWORD *)v23 != v22 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); *(_DWORD *)(v2 + 68) = v22; if ( v22 ) InterlockedIncrement(v22 + 1); } *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) |= 0x200u; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xF3FF | 0x1000; *(_BYTE *)(*(_DWORD *)(v2 + 68) + 30) = 0; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xFFED | 0xC; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xFEFF | 0xE0; v24 = *(volatile LONG **)(v2 + 68); v25 = *(_DWORD *)(v2 + 72); a2 = v24; if ( v24 ) InterlockedIncrement(v24 + 1); sub_8A6330((_DWORD *)(v25 + 156), (int *)&a2); if ( v24 && !InterlockedDecrement(v24 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v24)(v24, 1); v26 = operator new(0x24u); v27 = v26; a2 = v26; if ( v26 ) { sub_85B2B0(v26); *v27 = &NiZBufferProperty::`vftable'; *((_WORD *)v27 + 14) = 3; v27[8] = 3; v28 = v27; } else { v28 = 0; } v29 = *(_DWORD *)(v2 + 64); if ( (_DWORD *)v29 != v28 ) { if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); *(_DWORD *)(v2 + 64) = v28; if ( v28 ) InterlockedIncrement(v28 + 1); } *(_WORD *)(*(_DWORD *)(v2 + 64) + 28) &= 0xFFFDu; v30 = *(volatile LONG **)(v2 + 64); v31 = *(_DWORD *)(v2 + 72); a2 = v30; if ( v30 ) InterlockedIncrement(v30 + 1); sub_8A6330((_DWORD *)(v31 + 156), (int *)&a2); v32 = 0; if ( v30 && !InterlockedDecrement(v30 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v30)(v30, 1); v33 = operator new(0x3Cu); v34 = v33; a2 = v33; if ( v33 ) { sub_85B2B0(v33); v34[9] = 0; v34[11] = 0; v34[12] = 0; v34[14] = 0; *v34 = &NiStencilProperty::`vftable'; *((_BYTE *)v34 + 28) = 0; v34[8] = 4; v34[10] = -1; v34[13] = 3; v32 = v34; } v35 = *(_DWORD *)(v2 + 60); if ( (_DWORD *)v35 != v32 ) { if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); *(_DWORD *)(v2 + 60) = v32; if ( v32 ) InterlockedIncrement(v32 + 1); } *(_DWORD *)(*(_DWORD *)(v2 + 60) + 56) = 3; v36 = *(volatile LONG **)(v2 + 60); v37 = *(_DWORD *)(v2 + 72); a2 = v36; if ( v36 ) InterlockedIncrement(v36 + 1); result = sub_8A6330((_DWORD *)(v37 + 156), (int *)&a2); if ( v36 ) { result = InterlockedDecrement(v36 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v36)(v36, 1); } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; // BA4928: using guessed type int dword_BA4928; //----- (006A58D0) -------------------------------------------------------- int __thiscall sub_6A58D0(int this, volatile LONG *a2) { int v2; // esi _DWORD *v3; // ebx int v4; // eax int v5; // ecx int v6; // edi volatile LONG *v7; // eax int v8; // edi int v9; // ecx _WORD *v10; // edi int v11; // edx _WORD *v12; // eax int v13; // edi int v14; // ebx _DWORD *v15; // eax float *v16; // edi volatile LONG *v17; // eax int v18; // edi int v19; // eax _DWORD *v20; // eax _DWORD *v21; // edi _DWORD *v22; // ebx int v23; // edi volatile LONG *v24; // edi int v25; // ebx _DWORD *v26; // eax _DWORD *v27; // edi _DWORD *v28; // ebx int v29; // edi volatile LONG *v30; // edi int v31; // ebx _DWORD *v32; // ebx _DWORD *v33; // eax _DWORD *v34; // edi int v35; // edi volatile LONG *v36; // edi int v37; // esi int result; // eax void *v39; // [esp+20h] [ebp-18h] void *v40; // [esp+24h] [ebp-14h] _WORD *v41; // [esp+28h] [ebp-10h] v2 = this; *(_DWORD *)(this + 8) = a2; v3 = 0; if ( *(_DWORD *)(this + 56) ) operator delete(*(void **)(this + 56)); v4 = 12 * *(_DWORD *)(v2 + 8); v5 = 12 * (unsigned __int64)*(unsigned int *)(v2 + 8) >> 32 != 0; *(_DWORD *)(v2 + 56) = 0; *(_DWORD *)(v2 + 56) = operator new[](v4 | -v5); v39 = operator new[](24 * *(_DWORD *)(v2 + 8)); v40 = operator new[](16 * *(_DWORD *)(v2 + 8)); v6 = 2 * *(_DWORD *)(v2 + 8); v7 = (volatile LONG *)operator new[](32 * *(_DWORD *)(v2 + 8)); if ( v7 ) { v8 = v6 - 1; if ( v8 >= 0 ) { v9 = (int)(v7 + 2); do { *(float *)(v9 - 8) = 0.0; v9 += 16; --v8; *(float *)(v9 - 20) = 0.0; *(float *)(v9 - 16) = 0.0; *(float *)(v9 - 12) = 0.0; } while ( v8 >= 0 ); } a2 = v7; } else { a2 = 0; } v10 = operator new[](4 * (3 * *(_DWORD *)(v2 + 8) - 3)); v11 = 0; v41 = v10; if ( *(_DWORD *)(v2 + 8) - 1 > 0 ) { v12 = v10 + 2; do { v13 = 2 * v11 + 1; v14 = 2 * v11 + 2; *(v12 - 2) = 2 * v11; v12[2] = 2 * v11 + 3; *(v12 - 1) = v13; *v12 = v14; v12[1] = v13; v12[3] = v14; ++v11; v12 += 6; } while ( v11 < *(_DWORD *)(v2 + 8) - 1 ); v10 = v41; v3 = 0; } v15 = operator new(0x5Cu); if ( v15 ) v16 = (float *)sub_8747E0( v15, 2 * *(_WORD *)(v2 + 8), (int)v39, 0, (int)a2, (int)v40, 1, 0, 2 * *(_WORD *)(v2 + 8) - 2, (int)v10, 0, 0); else v16 = 0; v16[4] = 0.0; v16[5] = 0.0; v16[6] = 0.0; v16[7] = 50.0; v17 = (volatile LONG *)operator new(0xC4u); a2 = v17; if ( v17 ) v3 = sub_866DF0(v17, (int)v16); v18 = *(_DWORD *)(v2 + 72); if ( (_DWORD *)v18 != v3 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); *(_DWORD *)(v2 + 72) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v19 = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_BA4928 + 4))(2); (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA4928 + 20))( v19, *(_DWORD *)(*(_DWORD *)(v2 + 72) + 184), 0); sub_85AB50(*(void ***)(v2 + 72), "The Swoosh"); v20 = operator new(0x20u); v21 = v20; a2 = v20; if ( v20 ) { sub_85B2B0(v20); *v21 = &NiAlphaProperty::`vftable'; *((_WORD *)v21 + 14) = 236; *((_BYTE *)v21 + 30) = 0; v22 = v21; } else { v22 = 0; } v23 = *(_DWORD *)(v2 + 68); if ( (_DWORD *)v23 != v22 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); *(_DWORD *)(v2 + 68) = v22; if ( v22 ) InterlockedIncrement(v22 + 1); } *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) |= 1u; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) |= 0x200u; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xF3FF | 0x1000; *(_BYTE *)(*(_DWORD *)(v2 + 68) + 30) = 0; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xFFED | 0xC; *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) = *(_WORD *)(*(_DWORD *)(v2 + 68) + 28) & 0xFEFF | 0xE0; v24 = *(volatile LONG **)(v2 + 68); v25 = *(_DWORD *)(v2 + 72); a2 = v24; if ( v24 ) InterlockedIncrement(v24 + 1); sub_8A6330((_DWORD *)(v25 + 156), (int *)&a2); if ( v24 && !InterlockedDecrement(v24 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v24)(v24, 1); v26 = operator new(0x24u); v27 = v26; a2 = v26; if ( v26 ) { sub_85B2B0(v26); *v27 = &NiZBufferProperty::`vftable'; *((_WORD *)v27 + 14) = 3; v27[8] = 3; v28 = v27; } else { v28 = 0; } v29 = *(_DWORD *)(v2 + 64); if ( (_DWORD *)v29 != v28 ) { if ( v29 && !InterlockedDecrement((volatile LONG *)(v29 + 4)) && v29 ) (**(void (__thiscall ***)(int, signed int))v29)(v29, 1); *(_DWORD *)(v2 + 64) = v28; if ( v28 ) InterlockedIncrement(v28 + 1); } *(_WORD *)(*(_DWORD *)(v2 + 64) + 28) &= 0xFFFDu; v30 = *(volatile LONG **)(v2 + 64); v31 = *(_DWORD *)(v2 + 72); a2 = v30; if ( v30 ) InterlockedIncrement(v30 + 1); sub_8A6330((_DWORD *)(v31 + 156), (int *)&a2); v32 = 0; if ( v30 && !InterlockedDecrement(v30 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v30)(v30, 1); v33 = operator new(0x3Cu); v34 = v33; a2 = v33; if ( v33 ) { sub_85B2B0(v33); v34[9] = 0; v34[11] = 0; v34[12] = 0; v34[14] = 0; *v34 = &NiStencilProperty::`vftable'; *((_BYTE *)v34 + 28) = 0; v34[8] = 4; v34[10] = -1; v34[13] = 3; v32 = v34; } v35 = *(_DWORD *)(v2 + 60); if ( (_DWORD *)v35 != v32 ) { if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); *(_DWORD *)(v2 + 60) = v32; if ( v32 ) InterlockedIncrement(v32 + 1); } *(_DWORD *)(*(_DWORD *)(v2 + 60) + 56) = 3; v36 = *(volatile LONG **)(v2 + 60); v37 = *(_DWORD *)(v2 + 72); a2 = v36; if ( v36 ) InterlockedIncrement(v36 + 1); result = sub_8A6330((_DWORD *)(v37 + 156), (int *)&a2); if ( v36 ) { result = InterlockedDecrement(v36 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v36)(v36, 1); } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; // BA4928: using guessed type int dword_BA4928; //----- (006A5E40) -------------------------------------------------------- float *__thiscall sub_6A5E40(float *this, float *a2, float *a3) { float *result; // eax int v4; // edx int v5; // ecx result = a2; *a2 = *this; a2[1] = this[1]; v4 = *((_DWORD *)this + 2); v5 = *((_DWORD *)this + 3); *((_DWORD *)a2 + 2) = v4; *((_DWORD *)a2 + 3) = v5; *result = *result + *a3; result[1] = a3[1] + result[1]; result[2] = a3[2] + result[2]; a2[3] = a3[3] + a2[3]; return result; } //----- (006A5E90) -------------------------------------------------------- float *__thiscall sub_6A5E90(float *this, float *a2, float *a3) { float *result; // eax int v4; // edx int v5; // ecx result = a2; *a2 = *this; a2[1] = this[1]; v4 = *((_DWORD *)this + 2); v5 = *((_DWORD *)this + 3); *((_DWORD *)a2 + 2) = v4; *((_DWORD *)a2 + 3) = v5; *result = *result - *a3; result[1] = result[1] - a3[1]; result[2] = result[2] - a3[2]; a2[3] = a2[3] - a3[3]; return result; } //----- (006A5EE0) -------------------------------------------------------- float *__thiscall sub_6A5EE0(_DWORD *this, int a2, float a3) { float *result; // eax int v4; // edx int v5; // ecx result = (float *)a2; *(_DWORD *)a2 = *this; *(_DWORD *)(a2 + 4) = this[1]; v4 = this[2]; v5 = this[3]; *(_DWORD *)(a2 + 8) = v4; *(_DWORD *)(a2 + 12) = v5; *result = *result * a3; result[1] = a3 * result[1]; result[2] = result[2] * a3; *(float *)(a2 + 12) = a3 * *(float *)(a2 + 12); return result; } //----- (006A5F30) -------------------------------------------------------- char *sub_6A5F30() { return dword_BA491C; } //----- (006A5F40) -------------------------------------------------------- void *__thiscall sub_6A5F40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiStencilProperty::`vftable'; sub_85B2F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; //----- (006A5F70) -------------------------------------------------------- void __cdecl sub_6A5F70(void *a1) { int v1; // esi int v2; // [esp+4h] [ebp-Ch] int v3; // [esp+8h] [ebp-8h] __int16 v4; // [esp+Ch] [ebp-4h] v1 = dword_AB7F4C; if ( dword_AB7F4C ) { v4 = 2063; sub_905F90(dword_AB7F4C, &v4, 2u); v2 = (unsigned __int16)word_B7D19C; v3 = (unsigned __int16)(strlen((const char *)a1) + 1); sub_905F90(v1, &v2, 2u); sub_905F90(v1, &v3, 2u); sub_905F90(v1, a1, (unsigned __int16)v3); sub_906000(v1, 0, 0); sub_9060A0(v1); } } // AB7F4C: using guessed type int dword_AB7F4C; // B7D19C: using guessed type __int16 word_B7D19C; //----- (006A6000) -------------------------------------------------------- void *__thiscall sub_6A6000(void *this, char a2) { void *v2; // esi v2 = this; sub_6A4570(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A6030) -------------------------------------------------------- void *__thiscall sub_6A6030(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AfterImgShape0::`vftable'; sub_6A4570(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6C88: using guessed type void *AfterImgShape0::`vftable'; //----- (006A6060) -------------------------------------------------------- void *__thiscall sub_6A6060(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &AfterImgShape1::`vftable'; sub_6A4570(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6C9C: using guessed type void *AfterImgShape1::`vftable'; //----- (006A6090) -------------------------------------------------------- double __thiscall sub_6A6090(float *this) { return this[131]; } //----- (006A60A0) -------------------------------------------------------- int __thiscall sub_6A60A0(int this, float a2) { int (__stdcall *v2)(_DWORD); // edx v2 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)(this + 532) + 8); *(float *)(this + 524) = a2; return v2(LODWORD(a2)); } //----- (006A60D0) -------------------------------------------------------- __int16 __thiscall sub_6A60D0(_WORD *this) { return this[264]; } //----- (006A60E0) -------------------------------------------------------- __int16 __thiscall sub_6A60E0(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[264] = a2; return result; } //----- (006A6100) -------------------------------------------------------- __int16 __thiscall sub_6A6100(_WORD *this) { return this[265]; } //----- (006A6110) -------------------------------------------------------- __int16 __thiscall sub_6A6110(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[265] = a2; return result; } //----- (006A6130) -------------------------------------------------------- bool __thiscall sub_6A6130(float *this, float a2) { float *v2; // esi bool result; // al float v4; // [esp+Ch] [ebp+8h] v2 = this; result = 1; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)this + 116))() ) { v4 = a2 - v2[25]; if ( v2[26] >= (double)v4 ) result = 0; } return result; } //----- (006A6170) -------------------------------------------------------- bool __thiscall sub_6A6170(_DWORD *this) { return (*(unsigned __int8 (__thiscall **)(_DWORD *))(this[133] + 4))(this + 133) == 0; } //----- (006A6190) -------------------------------------------------------- char __thiscall sub_6A6190(_DWORD *this, int a2, __int16 a3, int a4, unsigned int a5, char a6, char a7, int a8, __int16 a9) { return sub_64D230(this + 168, a2, a3, a4, a5, a6, a7, a9); } //----- (006A61C0) -------------------------------------------------------- int __thiscall sub_6A61C0(_DWORD *this) { return sub_64D130(this + 168); } //----- (006A61D0) -------------------------------------------------------- int __thiscall sub_6A61D0(float *this, int *a2) { float *v2; // edi void *v3; // ecx int v4; // ebx int v5; // eax char v6; // al int v7; // eax char v8; // al int result; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 21); if ( v3 ) { v4 = *a2; v5 = sub_85BD60(v3); (*(void (__thiscall **)(int *, int))(v4 + 12))(a2, v5); } a2[26] = *((int *)v2 + 26); v6 = *((_BYTE *)v2 + 120); *((_BYTE *)a2 + 120) = v6; if ( v6 ) sub_6A7910(a2); v7 = (*(int (__thiscall **)(int *))(*a2 + 4))(a2); if ( v7 ) { while ( (_UNKNOWN *)v7 != &unk_B911F8 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_8; } v8 = 1; } else { LABEL_8: v8 = 0; } result = v8 != 0 ? (unsigned int)a2 : 0; *(float *)(result + 524) = v2[131]; *(_BYTE *)(result + 668) = *((_BYTE *)v2 + 668); return result; } //----- (006A6260) -------------------------------------------------------- void __thiscall sub_6A6260(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v3; // eax int v4; // esi v1 = this; v2 = this[175]; if ( v2 ) { v3 = (*(int (**)(void))(*(_DWORD *)v2 + 8))(); sub_69CBA0(byte_ADB468, v3); v4 = v1[175]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v1[175] = 0; } } } //----- (006A62C0) -------------------------------------------------------- void __userpurge sub_6A62C0(int a1@, int a2@, int a3@, int a4@, float a5) { int v5; // ST24_4 int v6; // ebx char *v7; // eax char *v8; // edi int *v9; // eax float v10; // edx int v11; // eax int *v12; // eax void (__thiscall *v13)(int, float *); // edx int v14; // esi int v15; // ecx float v16; // [esp+28h] [ebp-74h] float v17; // [esp+2Ch] [ebp-70h] float v18; // [esp+30h] [ebp-6Ch] float v19; // [esp+34h] [ebp-68h] float v20; // [esp+38h] [ebp-64h] float v21; // [esp+3Ch] [ebp-60h] float v22; // [esp+40h] [ebp-5Ch] float v23; // [esp+44h] [ebp-58h] float v24; // [esp+48h] [ebp-54h] float v25; // [esp+4Ch] [ebp-50h] float v26; // [esp+50h] [ebp-4Ch] int v27; // [esp+54h] [ebp-48h] int v28; // [esp+58h] [ebp-44h] int v29; // [esp+5Ch] [ebp-40h] int v30; // [esp+60h] [ebp-3Ch] int v31; // [esp+64h] [ebp-38h] int v32; // [esp+68h] [ebp-34h] int v33; // [esp+6Ch] [ebp-30h] int v34; // [esp+70h] [ebp-2Ch] float v35; // [esp+74h] [ebp-28h] int v36; // [esp+78h] [ebp-24h] int v37; // [esp+7Ch] [ebp-20h] int v38; // [esp+80h] [ebp-1Ch] int v39; // [esp+84h] [ebp-18h] int v40; // [esp+88h] [ebp-14h] int v41; // [esp+8Ch] [ebp-10h] v5 = a2; v6 = a1; sub_6A7C90(a5); (*(void (__thiscall **)(int, _DWORD, int, int, int))(*(_DWORD *)(v6 + 532) + 36))(v6 + 532, LODWORD(a5), a3, a4, v5); v7 = sub_664AB0(dword_AD8C90, *(_WORD *)(v6 + 528)); v8 = v7; if ( !v7 ) { (*(void (__thiscall **)(int))(*(_DWORD *)(v6 + 532) + 32))(v6 + 532); goto LABEL_14; } if ( !sub_6510B0((int)v7) ) { (*(void (__thiscall **)(int))(*(_DWORD *)(v6 + 532) + 32))(v6 + 532); LABEL_14: sub_6A6260((_DWORD *)v6); return; } v9 = (int *)sub_64CF20(v8, &v17); v23 = *(float *)v9; v24 = *((float *)v9 + 1); v10 = *((float *)v9 + 2); v11 = *(_DWORD *)(v6 + 532); v25 = v10; (*(void (__thiscall **)(int, float *))(v11 + 16))(v6 + 532, &v23); if ( *(_DWORD *)(v6 + 84) ) { v12 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)(v6 + 532) + 56))(v6 + 532); v20 = *(float *)v12; v21 = *((float *)v12 + 1); v13 = *(void (__thiscall **)(int, float *))(*(_DWORD *)v6 + 28); v22 = *((float *)v12 + 2); v13(v6, &v20); v17 = v20 - v23; v18 = v21 - v24; v19 = v22 - v25; if ( sub_4430B0(&v17) < 20.0 ) { (*(void (__thiscall **)(int))(*(_DWORD *)(v6 + 532) + 32))(v6 + 532); sub_6A6260((_DWORD *)v6); } v14 = (*(int (__stdcall **)(const char *))(**(_DWORD **)(v6 + 112) + 72))("MyWeapon"); if ( v14 ) { v16 = flt_ACCFD0 * flt_AB5410; sub_85D7C0(&v35, v16); qmemcpy((void *)(v14 + 52), sub_85D940((float *)(v14 + 52), &v26, &v35), 0x24u); } else { (*(void (__thiscall **)(int, float *))(*(_DWORD *)v6 + 44))(v6, &v17); } } v15 = *(_DWORD *)(v6 + 700); if ( v15 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v15 + 76))(LODWORD(a5)) ) { (*(void (__stdcall **)(_DWORD, float, _DWORD, _DWORD, _DWORD, float, float, float, float, float, float, _DWORD, int, int, int, int, int, int, int, int, _DWORD, int, int, int, int, int, int))(**(_DWORD **)(v6 + 700) + 56))( LODWORD(a5), COERCE_FLOAT(LODWORD(v16)), LODWORD(v17), LODWORD(v18), LODWORD(v19), COERCE_FLOAT(LODWORD(v20)), COERCE_FLOAT(LODWORD(v21)), COERCE_FLOAT(LODWORD(v22)), COERCE_FLOAT(LODWORD(v23)), COERCE_FLOAT(LODWORD(v24)), COERCE_FLOAT(LODWORD(v25)), LODWORD(v26), v27, v28, v29, v30, v31, v32, v33, v34, LODWORD(v35), v36, v37, v38, v39, v40, v41); return; } goto LABEL_14; } } // 6A62C0: could not find valid save-restore pair for ebx // 6A62C0: could not find valid save-restore pair for edi // 6A62C0: could not find valid save-restore pair for esi // AB5410: using guessed type float flt_AB5410; // ACCFD0: using guessed type float flt_ACCFD0; //----- (006A64C0) -------------------------------------------------------- void __thiscall sub_6A64C0(void *this, float a2) { void *v2; // esi char *v3; // edi int *v4; // eax int v5; // eax float *v6; // eax int (__thiscall *v7)(char *); // edx float *v8; // eax float *v9; // eax int v10; // edx double v11; // st7 int (__thiscall *v12)(char *); // eax float *v13; // eax char *v14; // eax int v15; // ecx int v16; // eax int v17; // edi char v18; // [esp+14h] [ebp-18h] float v19; // [esp+20h] [ebp-Ch] int v20; // [esp+24h] [ebp-8h] int v21; // [esp+28h] [ebp-4h] v2 = this; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 116))() ) { v3 = sub_664AB0(dword_AD8C90, *((_WORD *)v2 + 264)); if ( v3 ) { if ( *((_BYTE *)v2 + 628) != 45 ) { if ( v2 != (void *)-628 ) { v4 = (int *)(*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 32))(v2); v19 = *(float *)v4; v20 = v4[1]; v21 = v4[2]; sub_6BABB0(&dword_AB6520, (int)v2 + 704, (int)&v19); } if ( *((_BYTE *)v2 + 628) != 45 ) { v5 = *((_DWORD *)v2 + 185); if ( v5 ) { if ( v5 == 1 ) { v9 = (float *)(*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 48))(v2); v10 = *(_DWORD *)v3; v19 = -*v9; *(float *)&v20 = -v9[1]; v11 = v9[2]; v12 = *(int (__thiscall **)(char *))(v10 + 196); *(float *)&v21 = -v11; v8 = (float *)v12(v3); } else { v6 = (float *)(*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 48))(v2); v19 = -*v6; *(float *)&v20 = -v6[1]; v7 = *(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196); *(float *)&v21 = -v6[2]; v8 = (float *)v7(v3); } } else { v13 = (float *)(*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 48))(v2); v19 = -*v13; *(float *)&v20 = -v13[1]; *(float *)&v21 = -v13[2]; v8 = sub_64CF20(v3, (float *)&v18); } sub_6AF370( &unk_B91250, (char *)v2 + 628, *(_DWORD *)v8, *((_DWORD *)v8 + 1), *((_DWORD *)v8 + 2), SLOBYTE(v19), v20, v21, a2, 1.0); } } v14 = sub_664AB0(dword_AD8C90, *((_WORD *)v2 + 265)); if ( v14 ) sub_64D600((_DWORD *)v2 + 168, v14, (_DWORD *)1); sub_438A70((_DWORD *)v2 + 168); } } v15 = *((_DWORD *)v2 + 175); if ( v15 ) { v16 = (*(int (**)(void))(*(_DWORD *)v15 + 8))(); sub_69CBA0(byte_ADB468, v16); v17 = *((_DWORD *)v2 + 175); if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } *((_DWORD *)v2 + 175) = 0; } } } //----- (006A66A0) -------------------------------------------------------- char __thiscall sub_6A66A0(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi int v4; // ecx int v5; // eax int v6; // edi int v7; // eax float *v8; // eax int v9; // edi float *v10; // ebx int v11; // ecx _DWORD **v12; // eax v3 = this; v4 = this[175]; if ( v4 ) { v5 = (*(int (**)(void))(*(_DWORD *)v4 + 8))(); sub_69CBA0(byte_ADB468, v5); v6 = v3[175]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[175] = 0; } } v7 = (*(int (__thiscall **)(_DWORD *))(*v3 + 8))(v3); v8 = (float *)(*(int (__thiscall **)(int, const char *))(*(_DWORD *)v7 + 72))(v7, "AfterImg000"); if ( v8 ) { v8 = sub_6A3A30((int)v8, 0, 0); v9 = v3[175]; v10 = v8; if ( (float *)v9 != v8 ) { if ( v9 ) { v8 = (float *)InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !v8 ) { if ( v9 ) LOBYTE(v8) = (**(int (__thiscall ***)(int, signed int))v9)(v9, 1); } } v3[175] = v10; if ( v10 ) LOBYTE(v8) = InterlockedIncrement((volatile LONG *)v10 + 1); } v11 = v3[175]; if ( v11 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 72))(LODWORD(a3)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[175] + 60))(LODWORD(a2)); v12 = (_DWORD **)(*(int (**)(void))(*(_DWORD *)v3[175] + 8))(); LOBYTE(v8) = sub_69CB50((_DWORD **)byte_ADB468, v12); } } return (char)v8; } //----- (006A67B0) -------------------------------------------------------- char __thiscall sub_6A67B0(_DWORD *this, float a2) { _DWORD *v2; // esi v2 = this; sub_6A3CF0((int)this, a2); return sub_6A66A0(v2, flt_ACCFCC, 1.0); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006A67E0) -------------------------------------------------------- void __thiscall sub_6A67E0(_DWORD *this, __int16 a2, _DWORD *a3) { _DWORD *v3; // esi v3 = this; if ( a3 ) sub_64EED0(this + 168, a3); else OutputDebugStringA(aShootEffacDama); *((_WORD *)v3 + 335) = a2; } //----- (006A6830) -------------------------------------------------------- float *__thiscall sub_6A6830(float *this, int a2, char a3, int a4) { float *v4; // esi int v5; // edi float *result; // eax v4 = this; sub_6A83F0(this, a2, a3, a4); *(_DWORD *)v4 = &ArrowEff::`vftable'; *((_DWORD *)v4 + 2) = &ArrowEff::`vftable'; sub_8CF980(v4 + 133); v4[171] = 0.0; v4[169] = 0.0; v4[170] = 0.0; *((_DWORD *)v4 + 168) = &NiTList::`vftable'; v4[175] = 0.0; v4[131] = 500.0; v4[132] = -6.8056469e38/*NaN*/; v4[166] = 0.0; *((_BYTE *)v4 + 668) = 1; *((_BYTE *)v4 + 628) = 0; *((_BYTE *)v4 + 704) = 0; v5 = *((_DWORD *)v4 + 175); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4[175] = 0.0; } result = v4; *((_DWORD *)v4 + 185) = 1; return result; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // 9F6D04: using guessed type void *ArrowEff::`vftable'; // 9F6D1C: using guessed type void *ArrowEff::`vftable'; //----- (006A6930) -------------------------------------------------------- LONG __thiscall sub_6A6930(_DWORD *this) { _DWORD *v1; // esi int v2; // edi char *v3; // eax int v4; // edi v1 = this; *this = &ArrowEff::`vftable'; this[2] = &ArrowEff::`vftable'; v2 = this[175]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[175] = 0; } v3 = sub_664AB0(dword_AD8C90, *((_WORD *)v1 + 265)); if ( v3 ) sub_64D600(v1 + 168, v3, (_DWORD *)1); v4 = v1[175]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_438C80(v1 + 168); sub_8CFA70(v1 + 133); return sub_6A7FF0(v1); } // 9F6D04: using guessed type void *ArrowEff::`vftable'; // 9F6D1C: using guessed type void *ArrowEff::`vftable'; //----- (006A6A30) -------------------------------------------------------- float *__thiscall sub_6A6A30(void *this) { void *v1; // edi float *v2; // eax float *v3; // esi v1 = this; v2 = (float *)operator new(0x2E8u); v3 = 0; if ( v2 ) v3 = sub_6A6830(v2, 0, 0, 0); (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v1 + 88))(v1, v3); return v3; } //----- (006A6AA0) -------------------------------------------------------- char *__thiscall sub_6A6AA0(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 2); sub_6A6930(this - 2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A6B80) -------------------------------------------------------- __int16 __thiscall sub_6A6B80(_WORD *this) { return this[263]; } //----- (006A6B90) -------------------------------------------------------- __int16 __thiscall sub_6A6B90(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[263] = a2; return result; } //----- (006A6BB0) -------------------------------------------------------- float *__thiscall sub_6A6BB0(float *this, int a2, char a3, int a4) { float *v4; // esi int v5; // edi v4 = this; sub_6A83F0(this, a2, a3, a4); *(_DWORD *)v4 = &AttachEff::`vftable'; *((_DWORD *)v4 + 2) = &AttachEff::`vftable'; v4[132] = 0.0; *((_WORD *)v4 + 263) = -1; v5 = *((_DWORD *)v4 + 132); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4[132] = 0.0; } *((_BYTE *)v4 + 140) = 0; v4[26] = -1.0; v4[133] = 0.0; *((_BYTE *)v4 + 524) = 1; *((_WORD *)v4 + 268) = 0; return v4; } // 9F6DD8: using guessed type void *AttachEff::`vftable'; // 9F6DEC: using guessed type void *AttachEff::`vftable'; //----- (006A6C80) -------------------------------------------------------- bool __thiscall sub_6A6C80(_WORD *this) { __int16 v1; // ax bool result; // al char *v3; // eax char *v4; // esi float *v5; // edi float *v6; // eax double v7; // st7 float v8; // [esp+0h] [ebp-14h] float v9; // [esp+4h] [ebp-10h] float v10; // [esp+8h] [ebp-Ch] double v11; // [esp+Ch] [ebp-8h] v1 = this[263]; if ( v1 == -1 ) return 1; v3 = sub_664AB0(dword_AD8C90, v1); v4 = v3; result = 1; if ( v3 ) { if ( v3 != dword_AD8EBC && sub_64FA00(v3, 373) || !sub_6516C0(v4) && !v4[2510] && (v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4), v6 = (float *)sub_693030(byte_ADB468), v8 = *v6 - *v5, v9 = v6[1] - v5[1], v10 = v6[2] - v5[2], v11 = sub_65B1B0((int)v4), v7 = sub_443070(&v8), v7 > v11) ) { result = 0; } } return result; } //----- (006A6D60) -------------------------------------------------------- void __thiscall sub_6A6D60(int this, char a2) { int v2; // ebx _DWORD *v3; // edi int v4; // esi __int16 v5; // bx int v6; // [esp+4h] [ebp-4h] v2 = this; v6 = this; if ( *(_BYTE *)(this + 4) != a2 ) { v3 = *(_DWORD **)(this + 12); *(_BYTE *)(this + 4) = a2; while ( v3 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { v5 = *((_WORD *)dword_AD8EBC + 274); if ( v5 == (*(unsigned __int16 (__thiscall **)(int))(*(_DWORD *)v4 + 92))(v4) && *(_WORD *)(dword_AD8EBC + 977) != -1 ) { v2 = v6; continue; } v2 = v6; } sub_6AB580(&unk_B91250, v4, *(unsigned __int8 *)(v2 + 4), 1); } } } //----- (006A6DF0) -------------------------------------------------------- void __thiscall sub_6A6DF0(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax v2 = this; if ( a2 ) { v3 = (_DWORD *)this[132]; v4 = (_DWORD *)(*(int (**)(void))(*this + 8))(); if ( v4 ) { v4[22] = v3[35]; v4[23] = v3[36]; v4[24] = v3[37]; } *((_BYTE *)v2 + 537) = a2; } else { *((_BYTE *)this + 537) = 0; } } //----- (006A6E50) -------------------------------------------------------- char __thiscall sub_6A6E50(_WORD *this, float a2) { _WORD *v2; // ebx int v3; // eax int v4; // esi int v5; // eax _DWORD *v6; // esi char *v7; // eax _DWORD *v8; // eax int v9; // edi unsigned int *v10; // esi _DWORD *v11; // ecx signed __int16 v12; // di int v13; // edi bool v14; // al int v15; // esi bool v16; // al char *v17; // esi float *v18; // eax float v19; // edx float v20; // ecx float v21; // eax int v22; // edx int *v23; // eax int (__thiscall *v24)(_WORD *, int); // edx int *v25; // eax int (__thiscall *v26)(_WORD *, int *); // edx int v28; // [esp+0h] [ebp-30h] float v29; // [esp+Ch] [ebp-24h] float v30; // [esp+10h] [ebp-20h] float v31; // [esp+14h] [ebp-1Ch] float v32; // [esp+18h] [ebp-18h] float v33; // [esp+1Ch] [ebp-14h] float v34; // [esp+20h] [ebp-10h] int v35; // [esp+24h] [ebp-Ch] float v36; // [esp+28h] [ebp-8h] float v37; // [esp+2Ch] [ebp-4h] int v38; // [esp+38h] [ebp+8h] float v39; // [esp+38h] [ebp+8h] int v40; // [esp+38h] [ebp+8h] v2 = this; sub_6A7C90(a2); v3 = *((_DWORD *)v2 + 132); if ( v3 ) { if ( *(_DWORD *)(v3 + 4) == 1 ) { v4 = *((_DWORD *)v2 + 132); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v2 + 132) = 0; } } } v5 = *((_DWORD *)v2 + 132); if ( v5 ) { v6 = (_DWORD *)(v5 + 104); v38 = v5 + 104; v7 = (char *)(*(int (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 8))(v2); if ( !v7 ) return (char)v7; if ( !*((_BYTE *)v2 + 537) ) { *((_DWORD *)v7 + 22) = v6[9]; *((_DWORD *)v7 + 23) = v6[10]; *((_DWORD *)v7 + 24) = v6[11]; } qmemcpy(v7 + 52, v6, 0x24u); v39 = fabs(*(float *)(v38 + 48)); *((float *)v7 + 25) = v39; v8 = sub_439D70(byte_ADB468, &v29); v9 = sub_4316B0(v8); LOBYTE(v7) = *((_BYTE *)v2 + 536); v40 = v9; if ( (_BYTE)v7 != 1 ) goto LABEL_46; if ( !byte_AB66EF ) goto LABEL_30; if ( byte_AB66EF ) { v7 = sub_664AB0(dword_AD8C90, v2[263]); v10 = (unsigned int *)v7; if ( !v7 ) return (char)v7; if ( v7 == dword_AD8EBC ) { if ( !sub_650CC0(v7) ) { LOBYTE(v7) = (*(int (__thiscall **)(unsigned int *))(*v10 + 648))(v10); if ( !(_BYTE)v7 && (!v9 || *(_BYTE *)(v9 + 58) != 2) ) { v11 = (_DWORD *)v10[731]; if ( !v11 ) return (char)v7; goto LABEL_32; } } LABEL_30: LOBYTE(v7) = (*(int (__thiscall **)(_WORD *, _DWORD, int))(*(_DWORD *)v2 + 84))(v2, 0, v28); return (char)v7; } v12 = -1; if ( v7 != (char *)-776 ) v12 = *(_WORD *)(v7 + 977); if ( !(*(int (__thiscall **)(char *))(*(_DWORD *)v7 + 12))(v7) || v12 != -1 ) { LOBYTE(v7) = (*(int (__thiscall **)(_WORD *, _DWORD, int))(*(_DWORD *)v2 + 84))(v2, 0, v28); return (char)v7; } if ( (*(unsigned __int8 (__thiscall **)(unsigned int *))(*v10 + 648))(v10) || v40 && *(_BYTE *)(v40 + 58) == 2 ) goto LABEL_30; v11 = (_DWORD *)v10[731]; if ( v11 ) { LABEL_32: LOBYTE(v7) = (_BYTE)dword_AD8EBC; if ( *(_WORD *)(dword_AD8EBC + 977) == -1 ) { v13 = *(_DWORD *)v2; v14 = sub_744760(v11, v10[730], 1); LOBYTE(v7) = (*(int (__thiscall **)(_WORD *, bool))(v13 + 84))(v2, v14); } return (char)v7; } } else { LABEL_46: if ( (_BYTE)v7 ) return (char)v7; } v15 = *(_DWORD *)v2; v16 = sub_6A6C80(v2); LOBYTE(v7) = (*(int (__thiscall **)(_WORD *, bool, int))(v15 + 84))(v2, v16, v28); return (char)v7; } v7 = sub_664AB0(dword_AD8C90, v2[263]); v17 = v7; if ( v7 ) { if ( *((_BYTE *)v2 + 524) ) { v18 = (float *)(*(int (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 48))(v2); v19 = v18[1]; v20 = *v18; v21 = v18[2]; v33 = v19; v22 = *(_DWORD *)v17; v32 = v20; v34 = v21; v23 = (int *)(*(int (__thiscall **)(char *))(v22 + 196))(v17); v35 = *v23; v36 = *((float *)v23 + 1); v37 = *((float *)v23 + 2); v24 = *(int (__thiscall **)(_WORD *, int))(*(_DWORD *)v2 + 28); v37 = v37 + 35.0; v29 = v32 * 30.0; v30 = v33 * 30.0; v31 = 30.0 * v34; *(float *)&v35 = v29 + COERCE_FLOAT(&v35); v36 = v36 + v30; v37 = v31 + v37; LOBYTE(v7) = v24(v2, v35); } else { v25 = (int *)(*(int (__thiscall **)(char *))(*(_DWORD *)v7 + 196))(v7); v35 = *v25; v36 = *((float *)v25 + 1); v26 = *(int (__thiscall **)(_WORD *, int *))(*(_DWORD *)v2 + 28); v37 = *((float *)v25 + 2); LOBYTE(v7) = v26(v2, &v35); } } return (char)v7; } // AB66EF: using guessed type char byte_AB66EF; //----- (006A71A0) -------------------------------------------------------- _DWORD *__thiscall sub_6A71A0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *result; // eax _DWORD *v4; // edx v2 = this; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[2] + 4))(this + 2); result[2] = a2; *result = 0; result[1] = v2[4]; v4 = (_DWORD *)v2[4]; if ( v4 ) *v4 = result; else v2[3] = result; ++v2[5]; v2[4] = result; if ( a2 ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)a2 + 84))(*((unsigned __int8 *)v2 + 4)); return result; } //----- (006A71F0) -------------------------------------------------------- LONG __thiscall sub_6A71F0(_DWORD *this) { _DWORD *v1; // esi int v2; // edx _DWORD *v3; // eax _DWORD *v4; // ecx int v5; // edi _DWORD *v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v1 = this; *this = &AttachEff::`vftable'; this[2] = &AttachEff::`vftable'; v2 = this[133]; v8 = 1; if ( v2 ) { v3 = *(_DWORD **)(v2 + 12); if ( v3 ) { while ( 1 ) { v4 = v3 + 2; v7 = v3; v3 = (_DWORD *)*v3; if ( (_DWORD *)*v4 == v1 ) break; if ( !v3 ) goto LABEL_7; } sub_403620((_DWORD *)(v2 + 8), &v7); } LABEL_7: v1[133] = 0; } *((_WORD *)v1 + 263) = -1; *((_BYTE *)v1 + 536) = 0; v5 = v1[132]; LOBYTE(v8) = 0; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v8 = -1; return sub_6A7FF0(v1); } // 9F6DD8: using guessed type void *AttachEff::`vftable'; // 9F6DEC: using guessed type void *AttachEff::`vftable'; //----- (006A72D0) -------------------------------------------------------- void __thiscall sub_6A72D0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // [esp+4h] [ebp-4h] v2 = this; v3 = this[133]; if ( v3 ) { v4 = *(_DWORD **)(v3 + 12); if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = v4; v4 = (_DWORD *)*v4; if ( (_DWORD *)*v5 == v2 ) break; if ( !v4 ) { v2[133] = 0; return; } } sub_403620((_DWORD *)(v3 + 8), &v6); } v2[133] = 0; } } //----- (006A7330) -------------------------------------------------------- int *__thiscall sub_6A7330(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi int *v3; // eax int *result; // eax _DWORD *v5; // edi _DWORD *j; // esi _DWORD *v7; // ST00_4 v1 = this; *this = &IEffectHolder::`vftable'; for ( i = (_DWORD *)this[3]; i; result = sub_6ACDF0(&unk_B91250, v3) ) { v3 = (int *)i[2]; i = (_DWORD *)*i; } v5 = v1 + 2; *v5 = &NiTPointerListBase,AttachEff *>::`vftable'; for ( j = (_DWORD *)v5[1]; j; result = (int *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7) ) { v7 = j; j = (_DWORD *)*j; } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,AttachEff *>::`vftable'; return result; } // 9F6DC8: using guessed type void *NiTListBase,AttachEff *>::`vftable'; // 9F6E54: using guessed type void *NiTPointerListBase,AttachEff *>::`vftable'; // 9F6E74: using guessed type void *IEffectHolder::`vftable'; //----- (006A73E0) -------------------------------------------------------- _DWORD *__thiscall sub_6A73E0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &IEffectHolder::`vftable'; this[5] = 0; this[3] = 0; this[4] = 0; this[2] = &NiTList::`vftable'; *((_BYTE *)this + 4) = 1; return result; } // 9F6E64: using guessed type void *NiTList::`vftable'; // 9F6E74: using guessed type void *IEffectHolder::`vftable'; //----- (006A7410) -------------------------------------------------------- void *__thiscall sub_6A7410(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,AttachEff *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6DC8: using guessed type void *NiTListBase,AttachEff *>::`vftable'; //----- (006A7440) -------------------------------------------------------- void *__thiscall sub_6A7440(char *this, char a2) { return sub_6A7600(this - 8, a2); } //----- (006A7450) -------------------------------------------------------- void *sub_6A7450() { return &unk_B91200; } //----- (006A7460) -------------------------------------------------------- char __thiscall sub_6A7460(int this, float a2) { float v3; // [esp+8h] [ebp+8h] if ( *(_BYTE *)(this + 148) ) return 1; if ( !*(_BYTE *)(this + 140) ) { v3 = a2 - *(float *)(this + 100); if ( *(float *)(this + 104) <= 0.0 ) { if ( *(float *)(this + 44) < (double)v3 ) return 1; } else if ( v3 > (double)*(float *)(this + 104) ) { return 1; } } return 0; } //----- (006A74C0) -------------------------------------------------------- int __thiscall sub_6A74C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,AttachEff *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,AttachEff *>::`vftable'; return result; } // 9F6DC8: using guessed type void *NiTListBase,AttachEff *>::`vftable'; // 9F6E54: using guessed type void *NiTPointerListBase,AttachEff *>::`vftable'; //----- (006A7540) -------------------------------------------------------- _DWORD *__thiscall sub_6A7540(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,AttachEff *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,AttachEff *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6DC8: using guessed type void *NiTListBase,AttachEff *>::`vftable'; // 9F6E54: using guessed type void *NiTPointerListBase,AttachEff *>::`vftable'; //----- (006A75D0) -------------------------------------------------------- void *__thiscall sub_6A75D0(void *this, char a2) { void *v2; // esi v2 = this; sub_6A7330(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A7600) -------------------------------------------------------- void *__thiscall sub_6A7600(void *this, char a2) { void *v2; // esi v2 = this; sub_6A71F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A7630) -------------------------------------------------------- int __stdcall sub_6A7630(const char *a1) { int result; // eax if ( a1 && strlen(a1) == 7 ) result = atoi(a1 + 2); else result = 0; return result; } //----- (006A7670) -------------------------------------------------------- char __thiscall sub_6A7670(_BYTE *this, char a2) { char result; // al result = a2; this[460] = a2; return result; } //----- (006A7680) -------------------------------------------------------- char __thiscall sub_6A7680(_BYTE *this) { return this[460]; } //----- (006A7690) -------------------------------------------------------- __int16 __thiscall sub_6A7690(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[260] = a2; return result; } //----- (006A76B0) -------------------------------------------------------- __int16 __thiscall sub_6A76B0(_WORD *this) { return this[260]; } //----- (006A76D0) -------------------------------------------------------- int __stdcall sub_6A76D0(int a1, int a2, float a3) { unsigned int v3; // ebx int v4; // ecx double v5; // st7 double v6; // st4 int v8; // [esp+18h] [ebp+Ch] v3 = a2; v4 = 0; if ( !a2 ) return 0; v5 = a3; while ( 1 ) { if ( strlen(*(const char **)(a1 + 8 * v4 + 4)) == 2 ) { v6 = *(float *)(a1 + 8 * v4) >= v5 ? *(float *)(a1 + 8 * v4) - v5 : v5 - *(float *)(a1 + 8 * v4); *(float *)&v8 = v6; if ( *(float *)&v8 >= 0.0 && *(float *)&v8 <= 0.00009999999747378752 ) break; } if ( ++v4 >= v3 ) return 0; } return atoi(*(const char **)(a1 + 8 * v4 + 4)); } //----- (006A7770) -------------------------------------------------------- signed __int16 __thiscall sub_6A7770(_DWORD *this) { int v1; // eax signed __int16 result; // ax v1 = this[91]; if ( v1 ) result = *(_WORD *)(v1 + 548); else result = -1; return result; } //----- (006A77E0) -------------------------------------------------------- void __thiscall sub_6A77E0(char *this, float a2) { char *v2; // esi double v3; // st7 int v4; // edi int v5; // eax int v6; // edi int v7; // eax v2 = this; if ( this[140] ) { if ( *((_DWORD *)this + 124) ) { v3 = a2; if ( *((float *)this + 116) >= a2 - *((float *)this + 119) ) { if ( *((float *)this + 117) <= 0.0 ) { if ( *((float *)this + 11) < v3 - *((float *)this + 118) ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 60))(LODWORD(a2)); if ( *((_DWORD *)v2 + 125) < 0x10u ) v6 = (int)(v2 + 480); else v6 = *((_DWORD *)v2 + 120); v7 = (*(int (__thiscall **)(char *))(*(_DWORD *)v2 + 32))(v2); sub_6BABB0(&dword_AB6520, v6, v7); *((float *)v2 + 118) = a2; } } else if ( *((float *)this + 117) < v3 - *((float *)this + 118) ) { if ( *((_DWORD *)this + 125) < 0x10u ) v4 = (int)(this + 480); else v4 = *((_DWORD *)this + 120); v5 = (*(int (**)(void))(*(_DWORD *)this + 32))(); sub_6BABB0(&dword_AB6520, v4, v5); *((float *)v2 + 117) = 0.0; *((float *)v2 + 118) = a2; } } } } } //----- (006A7910) -------------------------------------------------------- char __thiscall sub_6A7910(_DWORD *this) { _DWORD *v1; // ebx int i; // eax float *v3; // eax float *v4; // esi float *v6; // [esp+10h] [ebp-3Ch] int v7; // [esp+14h] [ebp-38h] char v8; // [esp+18h] [ebp-34h] int v9; // [esp+48h] [ebp-4h] v1 = this; if ( this[21] ) { v7 = 0; sprintf(&v8, "AfterImg%03d", 0); for ( i = (*(int (__stdcall **)(char *))(*(_DWORD *)v1[21] + 72))(&v8); i; i = (*(int (__stdcall **)(char *))(*(_DWORD *)v1[21] + 72))(&v8) ) { v3 = sub_6A37A0(i); v4 = v3; if ( v3 ) { v6 = v3; InterlockedIncrement((volatile LONG *)v3 + 1); v9 = 0; sub_8B8EC0(v1 + 31, (int *)&v6); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) (**(void (__thiscall ***)(float *, signed int))v4)(v4, 1); } sprintf(&v8, "AfterImg%03d", ++v7); } } return 1; } //----- (006A7A10) -------------------------------------------------------- void __thiscall sub_6A7A10(float *this, float a2) { float *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // edi int *v5; // eax int v6; // esi int v7; // eax int v8; // eax int j; // eax int i; // eax int *v11; // ecx int *v12; // eax int k; // eax char v14; // [esp+8h] [ebp-4h] v2 = this; v3 = (_DWORD *)*((_DWORD *)this + 93); v4 = (_DWORD *)*v3; if ( (_DWORD *)*v3 != v3 ) { do { v5 = *(int **)(v4[4] + 4); v6 = *v5; if ( (int *)*v5 != v5 ) { do { if ( *(float *)(v6 + 12) > a2 - v2[25] ) { if ( !*(_BYTE *)(v6 + 21) ) { v8 = *(_DWORD *)(v6 + 8); if ( *(_BYTE *)(v8 + 21) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } v6 = i; } else { v6 = *(_DWORD *)(v6 + 8); for ( j = *(_DWORD *)v8; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v6 = j; } } } else { v7 = v4[3]; switch ( v7 ) { case 0: case 4: if ( *(_WORD *)(*((_DWORD *)v2 + 91) + 548) == *((_WORD *)dword_AD8EBC + 274) ) { if ( !v7 ) goto LABEL_11; if ( !sub_440FB0((float *)&unk_B67078) ) sub_693270(byte_ADB468, *(_DWORD *)(v6 + 16)); } break; case 3: if ( !sub_440FB0((float *)&unk_B67078) ) LABEL_11: sub_693270(byte_ADB468, *(_DWORD *)(v6 + 16)); break; case 7: sub_693270(byte_ADB468, *(_DWORD *)(v6 + 16)); break; default: break; } v6 = *sub_6CDBF0((_DWORD *)v4[4], (int *)&v14, v6); } } while ( v6 != *(_DWORD *)(v4[4] + 4) ); } if ( !*((_BYTE *)v4 + 21) ) { v11 = (int *)v4[2]; if ( *((_BYTE *)v11 + 21) ) { for ( k = v4[1]; !*(_BYTE *)(k + 21); k = *(_DWORD *)(k + 4) ) { if ( v4 != *(_DWORD **)(k + 8) ) break; v4 = (_DWORD *)k; } v4 = (_DWORD *)k; } else { v12 = (int *)*v11; if ( !*(_BYTE *)(*v11 + 21) ) { do { v11 = v12; v12 = (int *)*v12; } while ( !*((_BYTE *)v12 + 21) ); } v4 = v11; } } } while ( v4 != *((_DWORD **)v2 + 93) ); } } //----- (006A7B90) -------------------------------------------------------- void __thiscall sub_6A7B90(float *this, float a2) { float *v2; // edi int *v3; // eax int v4; // esi int v5; // eax int v6; // eax int j; // eax int i; // eax char v9; // [esp+4h] [ebp-4h] v2 = this; if ( *((_DWORD *)this + 81) ) { v3 = (int *)*((_DWORD *)this + 80); v4 = *v3; if ( (int *)*v3 != v3 ) { do { if ( *(float *)(v4 + 12) > a2 - v2[25] ) { if ( !*(_BYTE *)(v4 + 21) ) { v6 = *(_DWORD *)(v4 + 8); if ( *(_BYTE *)(v6 + 21) ) { for ( i = *(_DWORD *)(v4 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v4 != *(_DWORD *)(i + 8) ) break; v4 = i; } v4 = i; } else { v4 = *(_DWORD *)(v4 + 8); for ( j = *(_DWORD *)v6; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v4 = j; } } } else { v5 = (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 36))(v2); sub_6BAB40(&dword_AB6520, *(_DWORD *)(v4 + 16), v5); v4 = *sub_6CDBF0((_DWORD *)v2 + 79, (int *)&v9, v4); } } while ( v4 != *((_DWORD *)v2 + 80) ); } } } //----- (006A7C90) -------------------------------------------------------- #error "6A7D30: positive sp value has been found (funcsize=58)" //----- (006A7DE0) -------------------------------------------------------- int *__thiscall sub_6A7DE0(_DWORD *this) { _DWORD *v1; // edi int *result; // eax int *v3; // esi int v4; // eax char v5; // [esp+8h] [ebp-4h] v1 = this; result = (int *)this[93]; v3 = (int *)*result; if ( (int *)*result != result ) { do { result = sub_6CDE90((_DWORD *)v3[4], (int *)&v5, **(_DWORD ***)(v3[4] + 4), *(_DWORD **)(v3[4] + 4)); if ( !*((_BYTE *)v3 + 21) ) { v4 = v3[2]; if ( *(_BYTE *)(v4 + 21) ) { for ( result = (int *)v3[1]; !*((_BYTE *)result + 21); result = (int *)result[1] ) { if ( v3 != (int *)result[2] ) break; v3 = result; } v3 = result; } else { v3 = (int *)v3[2]; for ( result = *(int **)v4; !*((_BYTE *)result + 21); result = (int *)*result ) v3 = result; } } } while ( v3 != (int *)v1[93] ); } return result; } //----- (006A7E60) -------------------------------------------------------- const void **__thiscall sub_6A7E60(int this, void *a2, float a3, float a4, float a5) { *(float *)(this + 464) = a3; *(float *)(this + 468) = a4; *(_BYTE *)(this + 140) = 1; *(float *)(this + 472) = a5; *(float *)(this + 476) = a5; return sub_4018E0((_DWORD *)(this + 480), a2, strlen((const char *)a2)); } //----- (006A7EC0) -------------------------------------------------------- char __thiscall sub_6A7EC0(_DWORD **this) { int v1; // eax int v2; // ebx int v3; // edi _DWORD *v4; // esi int v5; // esi const char **v6; // edi int v7; // ebx int v8; // esi _DWORD *v9; // eax int v11; // [esp+4h] [ebp-1Ch] char v12[4]; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] int v15; // [esp+18h] [ebp-8h] _DWORD **v16; // [esp+1Ch] [ebp-4h] v16 = this; v1 = (*(int (__stdcall **)(const char *))(*this[21] + 72))("AEEffNode"); v2 = v1; v14 = v1; if ( v1 ) { v3 = *(_DWORD *)(v1 + 20); while ( v3 ) { v1 = *(_DWORD *)(v2 + 16); v4 = *(_DWORD **)(v1 + 4 * v3-- - 4); v15 = v3; if ( v4 ) { LOBYTE(v1) = (*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4) == (_DWORD)dword_BA3BA8; if ( (_BYTE)v1 ) { v1 = v4[3]; v5 = v4[4]; if ( v1 ) { v6 = (const char **)(v5 + 4); v7 = v1; do { if ( *v6 ) { v1 = strlen(*v6); if ( v1 == 7 ) { v1 = strncmp("AE", *v6, 2u); if ( !v1 ) { if ( *v6 ) { if ( strlen(*v6) == 7 ) LOWORD(v1) = atoi(*v6 + 2); else LOWORD(v1) = 0; } v1 = sub_4DCEA0(v1); if ( v1 ) { v8 = (int)v16; *(float *)v12 = *((float *)v6 - 1); v13 = v1; v9 = sub_6A9330(v16 + 79, v12); LOBYTE(v1) = sub_65B3F0((_DWORD *)(v8 + 316), (int)&v11, v9, 0); } } } } v6 += 2; --v7; } while ( v7 ); v3 = v15; v2 = v14; } } } } } return v1; } //----- (006A7FF0) -------------------------------------------------------- LONG __thiscall sub_6A7FF0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int *v5; // ecx int v6; // eax int *v7; // ecx int v8; // eax int **v9; // eax int v10; // eax _DWORD *v11; // edi _DWORD *v12; // ecx _DWORD *v13; // ecx _DWORD *v14; // ecx _DWORD *v15; // ecx _DWORD *v16; // ecx _DWORD *v17; // ecx _DWORD *v18; // ecx _DWORD *v19; // ecx int v20; // edi volatile LONG *v21; // ebx void (__thiscall *v22)(_DWORD *, volatile LONG *); // eax int v23; // edi int v24; // edi int v25; // edi int v27; // [esp-8h] [ebp-30h] volatile LONG *v28; // [esp-4h] [ebp-2Ch] _DWORD *v29; // [esp+10h] [ebp-18h] volatile LONG **v30; // [esp+14h] [ebp-14h] _DWORD *v31; // [esp+18h] [ebp-10h] int v32; // [esp+24h] [ebp-4h] v1 = this; v31 = this; *this = &Effect::`vftable'; this[2] = &Effect::`vftable'; v2 = this[21]; v32 = 16; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[21] = 0; } v3 = v1[28]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[28] = 0; } v4 = v1[29]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[29] = 0; } sub_6A7DE0(v1); v5 = (int *)v1[93]; v6 = *v5; if ( (int *)*v5 != v5 ) { do v6 = *sub_6CDBF0(v1 + 92, (int *)&v30, v6); while ( v6 != v1[93] ); } v7 = (int *)v1[80]; v1[113] = 0; v1[114] = -1; v8 = *v7; if ( (int *)*v7 != v7 ) { do v8 = *sub_6CDBF0(v1 + 79, (int *)&v30, v8); while ( v8 != v1[80] ); } if ( v1[7] == 1 ) { v28 = (volatile LONG *)1; v1[7] = 8; v9 = (int **)sub_8E5FC0(); v10 = sub_8E5900(v9, (int)v28); v11 = (_DWORD *)sub_402BA0((int)&unk_BA69D8, v10); v28 = (volatile LONG *)dword_B66FB0; v30 = &v28; if ( dword_B66FB0 ) InterlockedIncrement((volatile LONG *)(dword_B66FB0 + 4)); v30 = (volatile LONG **)&v27; sub_8EB290(v11, 0, (LONG)v28); sub_8EAC30(v11, 1); } sub_61FA90(v1 + 2); if ( v1[125] >= 0x10u ) operator delete((void *)v1[120]); v1[125] = 15; v1[124] = 0; *((_BYTE *)v1 + 480) = 0; v30 = (volatile LONG **)(v1 + 108); v12 = *(_DWORD **)v1[109]; v28 = (volatile LONG *)v1[109]; LOBYTE(v32) = 17; sub_6CDE90(v1 + 108, (int *)&v29, v12, v28); operator delete((void *)v1[109]); v29 = v1 + 104; v13 = *(_DWORD **)v1[105]; v28 = (volatile LONG *)v1[105]; LOBYTE(v32) = 18; sub_6CDE90(v1 + 104, (int *)&v30, v13, v28); operator delete((void *)v1[105]); v29 = v1 + 100; v14 = *(_DWORD **)v1[101]; v28 = (volatile LONG *)v1[101]; LOBYTE(v32) = 19; sub_6CDE90(v1 + 100, (int *)&v30, v14, v28); operator delete((void *)v1[101]); v29 = v1 + 96; v15 = *(_DWORD **)v1[97]; v28 = (volatile LONG *)v1[97]; LOBYTE(v32) = 20; sub_6CDE90(v1 + 96, (int *)&v30, v15, v28); operator delete((void *)v1[97]); v29 = v1 + 92; v16 = *(_DWORD **)v1[93]; v28 = (volatile LONG *)v1[93]; LOBYTE(v32) = 21; sub_6CDE90(v1 + 92, (int *)&v30, v16, v28); operator delete((void *)v1[93]); v29 = v1 + 87; v17 = *(_DWORD **)v1[88]; v28 = (volatile LONG *)v1[88]; LOBYTE(v32) = 22; sub_6CDE90(v1 + 87, (int *)&v30, v17, v28); operator delete((void *)v1[88]); v29 = v1 + 83; v18 = *(_DWORD **)v1[84]; v28 = (volatile LONG *)v1[84]; LOBYTE(v32) = 23; sub_6CDE90(v1 + 83, (int *)&v30, v18, v28); operator delete((void *)v1[84]); v29 = v1 + 79; v19 = *(_DWORD **)v1[80]; v28 = (volatile LONG *)v1[80]; LOBYTE(v32) = 24; sub_6CDE90(v1 + 79, (int *)&v30, v19, v28); operator delete((void *)v1[80]); LOBYTE(v32) = 6; sub_6A9020(v1 + 38); v20 = (int)(v1 + 31); v29 = (_DWORD *)v20; *(_DWORD *)v20 = &PgTList>::`vftable'; v21 = (volatile LONG *)v1[32]; LOBYTE(v32) = 25; while ( v21 ) { v22 = *(void (__thiscall **)(_DWORD *, volatile LONG *))(*(_DWORD *)v20 + 8); v28 = v21; v21 = (volatile LONG *)*v21; v22(v1 + 31, v28); } v1[34] = 0; v1[32] = 0; v1[33] = 0; *(_DWORD *)v20 = &NiTListBase,NiPointer>::`vftable'; v23 = v1[29]; LOBYTE(v32) = 4; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v24 = v1[28]; LOBYTE(v32) = 3; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = v1[21]; LOBYTE(v32) = 2; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); LOBYTE(v32) = 1; sub_6A9590(v1 + 8); LOBYTE(v32) = 0; sub_62FCC0(v1 + 2); v28 = &Addend; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(v28); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F6EDC: using guessed type void *PgTList>::`vftable'; // 9F6EEC: using guessed type void *Effect::`vftable'; // 9F6F04: using guessed type void *Effect::`vftable'; //----- (006A83F0) -------------------------------------------------------- float *__thiscall sub_6A83F0(float *this, int a2, char a3, int a4) { float *v4; // esi _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax int *v13; // ecx int v14; // eax char *v15; // eax const char **v16; // eax int *v17; // eax char *v18; // eax const char **v19; // eax int *v20; // eax char *v21; // eax const char **v22; // eax int *v23; // eax const char **v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax _DWORD *v27; // eax _DWORD *v28; // eax int v29; // eax _DWORD *v30; // edi char *v31; // eax int v32; // ecx int v33; // ST34_4 const char *v34; // ecx __int16 v35; // bx unsigned int v36; // edi int v37; // eax _DWORD *v38; // ST30_4 _DWORD *v39; // ST30_4 int *v41; // [esp+2Ch] [ebp-98h] _DWORD *v42; // [esp+30h] [ebp-94h] char v43; // [esp+48h] [ebp-7Ch] char v44; // [esp+50h] [ebp-74h] float *v45; // [esp+58h] [ebp-6Ch] int v46; // [esp+5Ch] [ebp-68h] int v47; // [esp+60h] [ebp-64h] void **v48; // [esp+64h] [ebp-60h] char v49; // [esp+68h] [ebp-5Ch] void **v50; // [esp+70h] [ebp-54h] int v51; // [esp+74h] [ebp-50h] char *v52; // [esp+7Ch] [ebp-48h] char v53[4]; // [esp+80h] [ebp-44h] _DWORD *v54; // [esp+84h] [ebp-40h] int v55; // [esp+88h] [ebp-3Ch] char *v56; // [esp+8Ch] [ebp-38h] int *v57; // [esp+90h] [ebp-34h] const char **v58; // [esp+94h] [ebp-30h] char *v59; // [esp+98h] [ebp-2Ch] size_t v60; // [esp+A8h] [ebp-1Ch] unsigned int v61; // [esp+ACh] [ebp-18h] int v62; // [esp+C0h] [ebp-4h] v4 = this; v45 = this; v55 = a2; *(_DWORD *)this = &NiRefObject::`vftable'; this[1] = 0.0; InterlockedIncrement(&Addend); *((_DWORD *)v4 + 2) = &IEffectDestroyMessenger::`vftable'; v62 = 0; v4[6] = 0.0; v4[4] = 0.0; v4[5] = 0.0; *((_DWORD *)v4 + 3) = &NiTList::`vftable'; *(_DWORD *)v4 = &Effect::`vftable'; *((_DWORD *)v4 + 2) = &Effect::`vftable'; sub_6A9550((_DWORD *)v4 + 8); v4[21] = 0.0; v4[28] = 0.0; v4[29] = 0.0; v4[34] = 0.0; v4[32] = 0.0; v4[33] = 0.0; *((_DWORD *)v4 + 31) = &PgTList>::`vftable'; sub_6A8F80(v4 + 38); LOBYTE(v62) = 7; v4[81] = 0.0; v5 = operator new(0x18u); if ( !v5 ) goto LABEL_92; *((_DWORD *)v4 + 80) = v5; *v5 = v5; *(float *)(*((_DWORD *)v4 + 80) + 4) = v4[80]; *(float *)(*((_DWORD *)v4 + 80) + 8) = v4[80]; *(_BYTE *)(*((_DWORD *)v4 + 80) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 80) + 21) = 1; LOBYTE(v62) = 8; v4[85] = 0.0; v6 = operator new(0x18u); if ( !v6 ) { LABEL_78: v56 = 0; std::exception::exception((std::exception *)&v50, (const char *const *)&v56); v50 = &std::bad_alloc::`vftable'; _CxxThrowException(&v50, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 84) = v6; *v6 = v6; *(float *)(*((_DWORD *)v4 + 84) + 4) = v4[84]; *(float *)(*((_DWORD *)v4 + 84) + 8) = v4[84]; *(_BYTE *)(*((_DWORD *)v4 + 84) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 84) + 21) = 1; LOBYTE(v62) = 9; v4[89] = 0.0; v7 = operator new(0x18u); if ( !v7 ) { v52 = 0; std::exception::exception((std::exception *)&v48, (const char *const *)&v52); v48 = &std::bad_alloc::`vftable'; _CxxThrowException(&v48, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 88) = v7; *v7 = v7; *(float *)(*((_DWORD *)v4 + 88) + 4) = v4[88]; *(float *)(*((_DWORD *)v4 + 88) + 8) = v4[88]; *(_BYTE *)(*((_DWORD *)v4 + 88) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 88) + 21) = 1; LOBYTE(v62) = 10; v4[94] = 0.0; v8 = operator new(0x18u); if ( !v8 ) { v56 = 0; std::exception::exception((std::exception *)&v50, (const char *const *)&v56); v50 = &std::bad_alloc::`vftable'; _CxxThrowException(&v50, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 93) = v8; *v8 = v8; *(float *)(*((_DWORD *)v4 + 93) + 4) = v4[93]; *(float *)(*((_DWORD *)v4 + 93) + 8) = v4[93]; *(_BYTE *)(*((_DWORD *)v4 + 93) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 93) + 21) = 1; LOBYTE(v62) = 11; v4[98] = 0.0; v9 = operator new(0x18u); if ( !v9 ) { v52 = 0; std::exception::exception((std::exception *)&v48, (const char *const *)&v52); v48 = &std::bad_alloc::`vftable'; _CxxThrowException(&v48, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 97) = v9; *v9 = v9; *(float *)(*((_DWORD *)v4 + 97) + 4) = v4[97]; *(float *)(*((_DWORD *)v4 + 97) + 8) = v4[97]; *(_BYTE *)(*((_DWORD *)v4 + 97) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 97) + 21) = 1; LOBYTE(v62) = 12; v4[102] = 0.0; v10 = operator new(0x18u); if ( !v10 ) { v56 = 0; std::exception::exception((std::exception *)&v50, (const char *const *)&v56); v50 = &std::bad_alloc::`vftable'; _CxxThrowException(&v50, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 101) = v10; *v10 = v10; *(float *)(*((_DWORD *)v4 + 101) + 4) = v4[101]; *(float *)(*((_DWORD *)v4 + 101) + 8) = v4[101]; *(_BYTE *)(*((_DWORD *)v4 + 101) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 101) + 21) = 1; LOBYTE(v62) = 13; v4[106] = 0.0; v11 = operator new(0x18u); if ( !v11 ) { LABEL_92: v52 = 0; std::exception::exception((std::exception *)&v48, (const char *const *)&v52); v48 = &std::bad_alloc::`vftable'; _CxxThrowException(&v48, &_TI2_AVbad_alloc_std__); } *((_DWORD *)v4 + 105) = v11; *v11 = v11; *(float *)(*((_DWORD *)v4 + 105) + 4) = v4[105]; *(float *)(*((_DWORD *)v4 + 105) + 8) = v4[105]; *(_BYTE *)(*((_DWORD *)v4 + 105) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 105) + 21) = 1; LOBYTE(v62) = 14; v4[110] = 0.0; v12 = operator new(0x18u); if ( !v12 ) goto LABEL_78; *((_DWORD *)v4 + 109) = v12; *v12 = v12; *(float *)(*((_DWORD *)v4 + 109) + 4) = v4[109]; *(float *)(*((_DWORD *)v4 + 109) + 8) = v4[109]; *(_BYTE *)(*((_DWORD *)v4 + 109) + 20) = 1; *(_BYTE *)(*((_DWORD *)v4 + 109) + 21) = 1; *((_DWORD *)v4 + 125) = 15; v4[124] = 0.0; *((_BYTE *)v4 + 480) = 0; v13 = (int *)*((_DWORD *)v4 + 80); *((_BYTE *)v4 + 308) = 0; v4[78] = 0.0; v14 = *v13; LOBYTE(v62) = 16; if ( (int *)v14 != v13 ) { do v14 = *sub_6CDBF0((_DWORD *)v4 + 79, (int *)&v56, v14); while ( v14 != *((_DWORD *)v4 + 80) ); } sub_668390((_DWORD *)v4 + 96); sub_668390((_DWORD *)v4 + 100); sub_668390((_DWORD *)v4 + 104); sub_668390((_DWORD *)v4 + 108); sub_668390((_DWORD *)v4 + 92); *((_DWORD *)v4 + 91) = a4; v15 = (char *)operator new(0xE8u); v56 = v15; LOBYTE(v62) = 17; if ( v15 ) v57 = sub_85A1C0(v15, 0); else v57 = 0; v16 = (const char **)*((_DWORD *)v4 + 21); LOBYTE(v62) = 16; v58 = v16; if ( v16 != (const char **)v57 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)v16 + 1) && v58 ) (*(void (__stdcall **)(signed int))*v58)(1); v17 = v57; *((_DWORD *)v4 + 21) = v57; if ( v17 ) InterlockedIncrement(v17 + 1); } v18 = (char *)operator new(0xE8u); v56 = v18; LOBYTE(v62) = 18; if ( v18 ) v57 = sub_85A1C0(v18, 0); else v57 = 0; v19 = (const char **)*((_DWORD *)v4 + 28); LOBYTE(v62) = 16; v58 = v19; if ( v19 != (const char **)v57 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)v19 + 1) && v58 ) (*(void (__stdcall **)(signed int))*v58)(1); v20 = v57; *((_DWORD *)v4 + 28) = v57; if ( v20 ) InterlockedIncrement(v20 + 1); } v21 = (char *)operator new(0xE8u); v56 = v21; LOBYTE(v62) = 19; if ( v21 ) v57 = sub_85A1C0(v21, 0); else v57 = 0; v22 = (const char **)*((_DWORD *)v4 + 29); LOBYTE(v62) = 16; v58 = v22; if ( v22 != (const char **)v57 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)v22 + 1) && v58 ) (*(void (__stdcall **)(signed int))*v58)(1); v23 = v57; *((_DWORD *)v4 + 29) = v57; if ( v23 ) InterlockedIncrement(v23 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v4 + 21) + 116))(*((_DWORD *)v4 + 28), 0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v4 + 21) + 116))(*((_DWORD *)v4 + 29), 0); sub_6A8EA0((_DWORD *)v4 + 38, dword_ADB6D8, dword_ADB6B0); sub_8D8240((_DWORD *)(*((_DWORD *)v4 + 28) + 176)); if ( v55 ) (*(void (__stdcall **)(int, _DWORD))(**((_DWORD **)v4 + 28) + 116))(v55, 0); if ( *((_BYTE *)v4 + 308) ) { v55 = *((_DWORD *)v4 + 74); sub_8D8240((_DWORD *)(*((_DWORD *)v4 + 29) + 176)); if ( v55 ) (*(void (__stdcall **)(int, _DWORD))(**((_DWORD **)v4 + 29) + 116))(v55, 0); } v24 = (const char **)*((_DWORD *)v4 + 21); v55 = (int)v24; if ( v24 ) { v58 = v24; sub_6A9A70((int)(v4 + 8), (_DWORD *)v55); } v4[26] = 3.4028235e38; *((_BYTE *)v4 + 120) = a3; v4[27] = -1.0; if ( a3 ) sub_6A7910(v4); *((_BYTE *)v4 + 140) = 0; v4[36] = 0.0; *((_BYTE *)v4 + 148) = 0; *(_DWORD *)v53 = 4; v54 = v4 + 96; v25 = sub_5E8850((_DWORD *)v4 + 92, v53); sub_4B1DF0((_DWORD *)v4 + 92, (int)v53, v25, 0); *(float *)v53 = 0.0; v54 = v4 + 100; v26 = sub_5E8850((_DWORD *)v4 + 92, v53); sub_4B1DF0((_DWORD *)v4 + 92, (int)v53, v26, 0); v54 = v4 + 104; *(_DWORD *)v53 = 7; v27 = sub_5E8850((_DWORD *)v4 + 92, v53); sub_4B1DF0((_DWORD *)v4 + 92, (int)v53, v27, 0); *(_DWORD *)v53 = 3; v54 = v4 + 108; v28 = sub_5E8850((_DWORD *)v4 + 92, v53); sub_4B1DF0((_DWORD *)v4 + 92, (int)v53, v28, 0); v29 = (*(int (__stdcall **)(const char *))(**((_DWORD **)v4 + 21) + 72))("CamEffNode"); v46 = v29; if ( v29 ) { v55 = *(_DWORD *)(v29 + 20); while ( v55 ) { v30 = *(_DWORD **)(*(_DWORD *)(v46 + 16) + 4 * v55-- - 4); if ( v30 ) { if ( (*(int (__thiscall **)(_DWORD *))(*v30 + 4))(v30) == (_DWORD)dword_BA3BA8 ) { v31 = (char *)v30[3]; v32 = v30[4]; v52 = v31; v47 = v32; if ( v31 ) { v58 = (const char **)(v32 + 4); v56 = v31; do { if ( *v58 ) { v57 = (int *)&unk_AB5504; do { v61 = 15; v60 = 0; LOBYTE(v59) = 0; sub_4018E0(&v59, &unk_9F6E7F, 0); v33 = *v57; LOBYTE(v62) = 20; sub_4412F0((const void **)&v59, v33); v34 = v59; if ( v61 < 0x10 ) v34 = (const char *)&v59; if ( !strncmp(*v58, v34, v60) ) { *(float *)v53 = *(float *)v47; v35 = sub_6A76D0(v47, (int)v52, *(float *)v53); v36 = 0; if ( sub_4413E0() ) { while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACB37C + 4), v36) != v35 ) { if ( ++v36 >= sub_4413E0() ) goto LABEL_64; } v37 = sub_7474E0((_DWORD *)(dword_ACB37C + 4), v36); } else { LABEL_64: v37 = 0; } v54 = (_DWORD *)v37; switch ( *v57 ) { case 0: v42 = sub_6A9330((_DWORD *)v4 + 100, v53); v41 = (int *)&v43; goto LABEL_71; case 3: v42 = sub_6A9330((_DWORD *)v4 + 100, v53); v41 = &v51; LABEL_71: sub_65B3F0((_DWORD *)v4 + 100, (int)v41, v42, 0); break; case 4: v38 = sub_6A9330((_DWORD *)v4 + 96, v53); sub_65B3F0((_DWORD *)v4 + 96, (int)&v44, v38, 0); break; case 7: v39 = sub_6A9330((_DWORD *)v4 + 104, v53); sub_65B3F0((_DWORD *)v4 + 104, (int)&v49, v39, 0); break; default: break; } } LOBYTE(v62) = 16; if ( v61 >= 0x10 ) operator delete(v59); ++v57; } while ( (signed int)v57 < (signed int)&unk_AB5514 ); } v58 += 2; --v56; } while ( v56 ); } } } } } sub_6A7EC0((_DWORD **)v4); v4[116] = 0.0; v4[117] = 0.0; *((_BYTE *)v4 + 448) = 0; v4[118] = 0.0; v4[113] = 0.0; v4[119] = 0.0; v4[114] = -6.8056469e38/*NaN*/; v4[128] = 0.0; *((_BYTE *)v4 + 460) = 0; *((_BYTE *)v4 + 508) = 0; *((_WORD *)v4 + 260) = -1; *((_DWORD *)v4 + 7) = 8; return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F0C58: using guessed type void *IEffectDestroyMessenger::`vftable'; // 9F0C6C: using guessed type void *NiTList::`vftable'; // 9F6EDC: using guessed type void *PgTList>::`vftable'; // 9F6EEC: using guessed type void *Effect::`vftable'; // 9F6F04: using guessed type void *Effect::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // ACB37C: using guessed type int dword_ACB37C; // ADB6B0: using guessed type int dword_ADB6B0; // ADB6D8: using guessed type int dword_ADB6D8; //----- (006A8E50) -------------------------------------------------------- void *__thiscall sub_6A8E50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (006A8E80) -------------------------------------------------------- bool __cdecl sub_6A8E80(int a1, int a2) { bool result; // al if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)a2 + 4))() == a1; else result = 0; return result; } //----- (006A8EA0) -------------------------------------------------------- void __thiscall sub_6A8EA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ebx int v6; // esi int v7; // ST00_4 v3 = this; v4 = operator new(0xE8u); v5 = 0; if ( v4 ) v5 = sub_85A1C0(v4, 0); v6 = v3[36]; if ( (_DWORD *)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[36] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v3[37] = a2; v3[38] = a3; sub_8D7630(v3 + 10); v7 = v3[38]; v3[10] = v3[37]; sub_40C270(v3 + 10, v7); } //----- (006A8F80) -------------------------------------------------------- float *__thiscall sub_6A8F80(float *this) { float *v1; // esi int v2; // edi v1 = this; *(_DWORD *)this = &CDecalEffect::`vftable'; sub_8D4790((_DWORD *)this + 1); sub_8D6D20(v1 + 10); v1[36] = 0.0; v2 = *((_DWORD *)v1 + 36); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[36] = 0.0; } return v1; } // 9F6ED4: using guessed type void *CDecalEffect::`vftable'; //----- (006A9020) -------------------------------------------------------- void __thiscall sub_6A9020(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &CDecalEffect::`vftable'; v2 = this[36]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[36] = 0; } v3 = v1[36]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8D6E10(v1 + 10); sub_8D47C0(v1 + 1); } // 9F6ED4: using guessed type void *CDecalEffect::`vftable'; //----- (006A90E0) -------------------------------------------------------- void *__thiscall sub_6A90E0(void *this, char a2) { void *v2; // esi v2 = this; sub_6A9020(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A9110) -------------------------------------------------------- _DWORD *__thiscall sub_6A9110(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F6EC4: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006A91A0) -------------------------------------------------------- int __thiscall sub_6A91A0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F6EC4: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006A9220) -------------------------------------------------------- int __thiscall sub_6A9220(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F6EDC: using guessed type void *PgTList>::`vftable'; //----- (006A92A0) -------------------------------------------------------- _DWORD *__thiscall sub_6A92A0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6EB4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F6EDC: using guessed type void *PgTList>::`vftable'; //----- (006A9330) -------------------------------------------------------- _DWORD *__thiscall sub_6A9330(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((float *)result + 3) = *(float *)a2; result[4] = *((_DWORD *)v4 + 1); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006A93A0) -------------------------------------------------------- char *__thiscall sub_6A93A0(_DWORD *this, char a2) { char *v2; // esi v2 = (char *)(this - 2); sub_6A7FF0(this - 2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006A9440) -------------------------------------------------------- void __thiscall sub_6A9440(float *this, float a2) { this[5] = a2; } //----- (006A9450) -------------------------------------------------------- void __thiscall sub_6A9450(float *this, float a2) { this[6] = a2; } //----- (006A9460) -------------------------------------------------------- int __thiscall sub_6A9460(_DWORD *this, float a2) { return sub_8D4750(this + 1, a2); } //----- (006A9480) -------------------------------------------------------- int __thiscall sub_6A9480(_DWORD *this, int a2, int a3) { int result; // eax if ( a2 ) this[1] = a2; result = a3; if ( a3 ) this[2] = a3; return result; } //----- (006A94A0) -------------------------------------------------------- int __thiscall sub_6A94A0(_DWORD *this, int a2) { int result; // eax result = a2; if ( a2 ) this[1] = a2; return result; } //----- (006A94D0) -------------------------------------------------------- char __thiscall sub_6A94D0(_BYTE *this) { return this[170]; } //----- (006A9520) -------------------------------------------------------- __int16 __thiscall sub_6A9520(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[84] = a2; return result; } //----- (006A9550) -------------------------------------------------------- _DWORD *__thiscall sub_6A9550(_DWORD *this) { _DWORD *result; // eax result = this; *this = &EffectCtrl::`vftable'; this[7] = &NiTArray::`vftable'; this[9] = 0; this[12] = 1; this[10] = 0; this[11] = 0; this[8] = 0; *((float *)this + 2) = 0.0; *((float *)this + 3) = 0.0; this[1] = 0; *((float *)this + 4) = 0.0; *((float *)this + 5) = 0.0; *((float *)this + 6) = 0.0; return result; } // 9F6F6C: using guessed type void *NiTArray::`vftable'; // 9F6FA4: using guessed type void *EffectCtrl::`vftable'; //----- (006A9590) -------------------------------------------------------- void __thiscall sub_6A9590(_DWORD *this) { void *v1; // ST00_4 *this = &EffectCtrl::`vftable'; this[1] = 0; v1 = (void *)this[8]; this[7] = &NiTArray::`vftable'; operator delete[](v1); } // 9F6F6C: using guessed type void *NiTArray::`vftable'; // 9F6FA4: using guessed type void *EffectCtrl::`vftable'; //----- (006A95B0) -------------------------------------------------------- int __thiscall sub_6A95B0(_DWORD *this, float a2) { _DWORD *v2; // edi unsigned int v3; // esi int result; // eax int v5; // ecx v2 = this; v3 = 0; if ( this[10] ) { do { result = v2[8]; v5 = *(_DWORD *)(result + 4 * v3); if ( v5 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 60))(LODWORD(a2)); ++v3; } while ( v3 < v2[10] ); } return result; } //----- (006A9620) -------------------------------------------------------- int __thiscall sub_6A9620(__int16 *this, float a2) { __int16 *v2; // esi char *v3; // eax int v4; // edi float *v5; // eax char v7; // [esp+14h] [ebp-Ch] v2 = this; v3 = sub_664AB0(dword_AD8C90, this[84]); if ( v3 ) { v4 = *((_DWORD *)v2 + 36); v5 = sub_653B10(v3, (float *)&v7); sub_8D7B80((_DWORD *)v2 + 10, 0.0, v4, (int)v5); } else { sub_8D7B80((_DWORD *)v2 + 10, 0.0, *((_DWORD *)v2 + 36), (int)(v2 + 78)); } return sub_85BED0(*((_DWORD ***)v2 + 36), a2, 1); } //----- (006A96C0) -------------------------------------------------------- void __thiscall sub_6A96C0(float *this, float a2) { this[43] = flt_ACCFCC + a2; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006A9790) -------------------------------------------------------- _DWORD *__fastcall sub_6A9790(int a1) { _DWORD *result; // eax int v2; // ebx int v3; // edi int v4; // esi _DWORD *v5; // esi _DWORD *i; // edi _DWORD *v7; // ST00_4 int v8; // [esp+10h] [ebp-18h] _DWORD *v9; // [esp+18h] [ebp-10h] v8 = a1; result = *(_DWORD **)(a1 + 16); v2 = 0; if ( result ) { while ( 1 ) { v3 = result[2]; result = (_DWORD *)*result; v9 = result; if ( v3 ) { v4 = *(_DWORD *)(v3 + 144); if ( v4 ) { v2 = *(_DWORD *)(v3 + 144); InterlockedIncrement((volatile LONG *)(v4 + 4)); sub_69CBA0(byte_ADB468, v4); } result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v3)(v3, 1); if ( v2 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } } v2 = 0; if ( !v9 ) break; result = v9; } a1 = v8; } v5 = *(_DWORD **)(a1 + 16); for ( i = (_DWORD *)(a1 + 12); v5; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 8))(i, v7) ) { v7 = v5; v5 = (_DWORD *)*v5; } i[3] = 0; i[1] = 0; i[2] = 0; return result; } //----- (006A98E0) -------------------------------------------------------- void __thiscall sub_6A98E0(int this, int a2) { int v2; // ebx int v3; // esi unsigned int v4; // eax unsigned int v5; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 ) { if ( *(float *)(this + 8) > (double)*(float *)(a2 + 20) ) *(float *)(this + 8) = *(float *)(a2 + 20); if ( *(float *)(this + 12) < (double)*(float *)(v2 + 24) ) *(float *)(this + 12) = *(float *)(v2 + 24); v4 = *(_DWORD *)(this + 40); v5 = v4; if ( v4 >= *(_DWORD *)(this + 36) ) { sub_6AA490((_DWORD *)(this + 28), v4 + *(_DWORD *)(this + 48)); v4 = v5; } sub_823870((_DWORD *)(v3 + 28), v4, &a2); *(float *)(v3 + 16) = *(float *)(v3 + 16) + 1.0; *(_WORD *)(v2 + 8) = *(_WORD *)(v2 + 8) & 0xFFF7 | 1; } } //----- (006A9970) -------------------------------------------------------- void __thiscall sub_6A9970(void *this, _DWORD *a2) { int v2; // ebx int i; // esi int v4; // eax int v5; // eax _DWORD *v6; // esi int v7; // eax unsigned int v8; // eax int v9; // esi int j; // eax _DWORD *v11; // esi int v12; // eax v2 = (int)this; if ( a2 ) { for ( i = a2[3]; i; i = *(_DWORD *)(i + 52) ) sub_6A98E0(v2, i); v4 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v4 ) { while ( (char *)v4 != dword_BA457C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_7; } v6 = (_DWORD *)a2[40]; while ( a2[42] && v6 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) sub_6A9970(v7); } } LABEL_7: v5 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA455C ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) return; } v8 = a2[47]; v9 = 0; if ( v8 ) { if ( v8 > 0 ) goto LABEL_19; for ( j = 0; ; j = *(_DWORD *)(a2[45] + 4 * v9) ) { sub_6A9970(j); if ( a2[47] <= (unsigned int)++v9 ) break; LABEL_19: ; } } v11 = (_DWORD *)a2[51]; while ( a2[53] && v11 ) { v12 = v11[2]; v11 = (_DWORD *)*v11; if ( v12 ) sub_6A9970(v12); } } } } //----- (006A9A70) -------------------------------------------------------- void __thiscall sub_6A9A70(int this, _DWORD *a2) { unsigned int v2; // eax v2 = 0; if ( *(_DWORD *)(this + 40) ) { do *(_DWORD *)(*(_DWORD *)(this + 32) + 4 * v2++) = 0; while ( v2 < *(_DWORD *)(this + 40) ); } *(_DWORD *)(this + 40) = 0; *(_DWORD *)(this + 44) = 0; *(float *)(this + 8) = 3.4028235e38; *(_DWORD *)(this + 4) = a2; *(float *)(this + 12) = 0.0; *(float *)(this + 16) = 0.0; sub_6A9970((void *)this, a2); } //----- (006A9AC0) -------------------------------------------------------- _DWORD *__thiscall sub_6A9AC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax _DWORD *v3; // edi _DWORD *i; // esi _DWORD *v5; // ST00_4 v1 = this; *this = &DecalMgr::`vftable'; this[1] = 0; this[2] = 0; result = sub_6A9790((int)this); v3 = v1 + 3; v1[3] = &PgTList::`vftable'; for ( i = (_DWORD *)v1[4]; i; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v5) ) { v5 = i; i = (_DWORD *)*i; } v3[3] = 0; v3[1] = 0; v3[2] = 0; *v3 = &NiTListBase,CharDecal *>::`vftable'; return result; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6FE4: using guessed type void *PgTList::`vftable'; // 9F6FF4: using guessed type void *DecalMgr::`vftable'; //----- (006A9B60) -------------------------------------------------------- void __thiscall sub_6A9B60(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // ecx _DWORD *v5; // edx _DWORD *v6; // esi v2 = a2; if ( a2 ) { v3 = (_DWORD *)this[4]; v4 = this + 3; if ( v3 ) { while ( 1 ) { v5 = v3 + 2; v6 = v3; v3 = (_DWORD *)*v3; if ( a2 == (_DWORD *)*v5 ) break; if ( !v3 ) goto LABEL_5; } } else { LABEL_5: v6 = 0; } a2 = v6; if ( v6 ) sub_403620(v4, &a2); if ( v2[36] ) sub_69CBA0(byte_ADB468, v2[36]); (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); } } //----- (006A9BC0) -------------------------------------------------------- void __thiscall sub_6A9BC0(_DWORD *this, __int16 a2) { _DWORD *v2; // eax int v3; // edx v2 = (_DWORD *)this[4]; if ( v2 ) { while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( *(_WORD *)(v3 + 168) == a2 ) break; } if ( !v2 ) return; } sub_6A9B60(this, (_DWORD *)v3); } } //----- (006A9C00) -------------------------------------------------------- void __thiscall sub_6A9C00(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // ebx float *v4; // esi _DWORD *v5; // eax int v6; // esi _DWORD *v7; // eax _DWORD *v8; // edx float v9; // edi _DWORD *v10; // esi _DWORD *v11; // ST00_4 void **v12; // [esp+14h] [ebp-20h] _DWORD *v13; // [esp+18h] [ebp-1Ch] _DWORD *v14; // [esp+1Ch] [ebp-18h] int v15; // [esp+20h] [ebp-14h] _DWORD *v16; // [esp+24h] [ebp-10h] int v17; // [esp+30h] [ebp-4h] v16 = this; v2 = (_DWORD *)this[4]; v3 = 0; v15 = 0; v13 = 0; v14 = 0; v12 = &NiTList::`vftable'; v17 = 0; if ( v2 ) { do { v4 = (float *)v2[2]; v2 = (_DWORD *)*v2; if ( v4 ) { if ( v4[43] < 0.0 || v4[43] >= (double)a2 ) { (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v4 + 4))(v4, LODWORD(a2)); } else { v5 = (_DWORD *)((int (__thiscall *)(void ***))v12[1])(&v12); v5[2] = v4; *v5 = 0; v5[1] = v14; if ( v14 ) { *v14 = v5; ++v15; } else { ++v15; v13 = v5; } v14 = v5; } } } while ( v2 ); v3 = v13; } while ( v3 ) { v6 = v3[2]; v3 = (_DWORD *)*v3; if ( v6 ) { v7 = (_DWORD *)v16[4]; if ( v7 ) { while ( 1 ) { v8 = v7 + 2; v9 = *(float *)&v7; v7 = (_DWORD *)*v7; if ( v6 == *v8 ) break; if ( !v7 ) goto LABEL_17; } } else { LABEL_17: v9 = 0.0; } a2 = v9; if ( v9 != 0.0 ) sub_403620(v16 + 3, (_DWORD **)&a2); if ( *(_DWORD *)(v6 + 144) ) sub_69CBA0(byte_ADB468, *(_DWORD *)(v6 + 144)); (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } } v10 = v13; while ( v10 ) { v11 = v10; v10 = (_DWORD *)*v10; ((void (__thiscall *)(void ***, _DWORD *))v12[2])(&v12, v11); } } // 9F6FC4: using guessed type void *NiTList::`vftable'; //----- (006A9D80) -------------------------------------------------------- char __thiscall sub_6A9D80(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD **v3; // eax int v4; // esi _DWORD *v5; // ecx _DWORD *v6; // ebx int v7; // eax int v9; // ecx void **v10; // [esp+1Ch] [ebp-1Ch] int v11; // [esp+20h] [ebp-18h] int v12; // [esp+24h] [ebp-14h] char v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] float v15; // [esp+40h] [ebp+8h] v2 = this; if ( !a2 ) return 0; v3 = (_DWORD **)(*(int (__stdcall **)(const char *))(*(_DWORD *)a2 + 72))("#Decal"); v4 = (int)v3; if ( !v3 ) return 0; sub_85BED0(v3, 0.0, 1); v15 = *(float *)(v4 + 48) + *(float *)(v4 + 48); sub_4558F0((int)(v2 + 10), v15, v15); v11 = 0; v12 = -1; v10 = &FindDecalGeometry::`vftable'; v5 = (_DWORD *)v2[36]; v14 = 0; sub_6AA6F0(v5); v6 = (_DWORD *)v2[36]; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4); if ( !v7 ) return 0; while ( (char *)v7 != dword_BA455C ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) return 0; } sub_8CFE00(&v10, v4, (int)dword_BA4840, (int)v6); sub_8D4A70(v2 + 1, v6); v9 = *(_DWORD *)(v4 + 32); if ( v9 ) { (*(void (__stdcall **)(char *, int))(*(_DWORD *)v9 + 120))(&v13, v4); sub_410C00(&v13); } return 1; } // 9F6FAC: using guessed type void *FindDecalGeometry::`vftable'; //----- (006A9EA0) -------------------------------------------------------- _DWORD *__thiscall sub_6A9EA0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &DecalMgr::`vftable'; this[1] = 0; this[2] = 0; this[6] = 0; this[4] = 0; this[5] = 0; this[3] = &PgTList::`vftable'; return result; } // 9F6FE4: using guessed type void *PgTList::`vftable'; // 9F6FF4: using guessed type void *DecalMgr::`vftable'; //----- (006A9ED0) -------------------------------------------------------- float *__thiscall sub_6A9ED0(int *this, float *a2) { int *v2; // ebx int v3; // edi float *v4; // eax float *v5; // esi float *v6; // eax int v7; // edi char v9; // [esp+1Ch] [ebp-1Ch] int v10; // [esp+28h] [ebp-10h] int v11; // [esp+34h] [ebp-4h] v2 = this; v3 = (int)a2; if ( !a2 ) return 0; v4 = (float *)operator new(0xB0u); v5 = v4; a2 = v4; v11 = 0; if ( v4 ) { sub_6A8F80(v4); v5[43] = -1.0; *(_DWORD *)v5 = &CharDecal::`vftable'; *((_WORD *)v5 + 84) = -1; *((_BYTE *)v5 + 170) = 0; } else { v5 = 0; } v11 = -1; a2 = v5; if ( !v5 ) return 0; sub_6A8EA0(v5, v2[1], v2[2]); sub_6A9D80(v5, v3); v6 = sub_653B10(dword_AD8EBC, (float *)&v9); sub_8D7B80((_DWORD *)v5 + 10, 0.0, *((_DWORD *)v5 + 36), (int)v6); v7 = *((_DWORD *)v5 + 36); v10 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v11 = 1; if ( !v7 ) { (**(void (__thiscall ***)(float *, signed int))v5)(v5, 1); return 0; } sub_69CB50((_DWORD **)byte_ADB468, (_DWORD **)v7); sub_6B9900(v2 + 3, &a2); v11 = -1; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); return v5; } // 9F6FD4: using guessed type void *CharDecal::`vftable'; //----- (006AA070) -------------------------------------------------------- int __thiscall sub_6AA070(void *this, float a2) { return sub_4558F0((int)this + 40, a2, a2); } //----- (006AA460) -------------------------------------------------------- void *__thiscall sub_6AA460(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,CharDecal *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6F84: using guessed type void *NiTListBase,CharDecal *>::`vftable'; //----- (006AA490) -------------------------------------------------------- void __thiscall sub_6AA490(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // edx int v4; // ecx bool v5; // zf _DWORD *v6; // ecx void *v7; // edi unsigned int v8; // eax unsigned int v9; // eax v2 = this; if ( a2 == this[2] ) return; if ( a2 < this[3] ) { v3 = a2; do { v4 = v2[1]; v5 = *(_DWORD *)(v4 + 4 * v3) == 0; v6 = (_DWORD *)(v4 + 4 * v3); if ( !v5 ) { *v6 = 0; --v2[4]; } ++v3; } while ( v3 < v2[3] ); v2[3] = a2; } v7 = (void *)v2[1]; v2[2] = a2; if ( !a2 ) { v2[1] = 0; LABEL_15: operator delete[](v7); return; } v2[1] = operator new[](4 * a2); v8 = 0; if ( v2[3] ) { do { *(_DWORD *)(v2[1] + 4 * v8) = *((_DWORD *)v7 + v8); ++v8; } while ( v8 < v2[3] ); } v9 = v2[3]; if ( v9 >= v2[2] ) goto LABEL_15; do *(_DWORD *)(v2[1] + 4 * v9++) = 0; while ( v9 < v2[2] ); operator delete[](v7); } //----- (006AA570) -------------------------------------------------------- void *__thiscall sub_6AA570(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6F6C: using guessed type void *NiTArray::`vftable'; //----- (006AA5A0) -------------------------------------------------------- void *__thiscall sub_6AA5A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,CharDecal *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; //----- (006AA5E0) -------------------------------------------------------- int __thiscall sub_6AA5E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,CharDecal *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,CharDecal *>::`vftable'; return result; } // 9F6F84: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6F94: using guessed type void *NiTPointerListBase,CharDecal *>::`vftable'; //----- (006AA660) -------------------------------------------------------- _DWORD *__thiscall sub_6AA660(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,CharDecal *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,CharDecal *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6F84: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6F94: using guessed type void *NiTPointerListBase,CharDecal *>::`vftable'; //----- (006AA6F0) -------------------------------------------------------- int __thiscall sub_6AA6F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *i; // edi _DWORD *v3; // ST00_4 int result; // eax v1 = (_DWORD *)this[40]; for ( i = this + 39; v1; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 8))(i, v3) ) { v3 = v1; v1 = (_DWORD *)*v1; } i[3] = 0; i[1] = 0; i[2] = 0; return result; } //----- (006AA730) -------------------------------------------------------- _DWORD *__thiscall sub_6AA730(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,CharDecal *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,CharDecal *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6FB4: using guessed type void *NiTPointerListBase,CharDecal *>::`vftable'; //----- (006AA7C0) -------------------------------------------------------- int __thiscall sub_6AA7C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,CharDecal *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,CharDecal *>::`vftable'; return result; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6FB4: using guessed type void *NiTPointerListBase,CharDecal *>::`vftable'; //----- (006AA840) -------------------------------------------------------- void *__thiscall sub_6AA840(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; *(_DWORD *)this = &EffectCtrl::`vftable'; *((_DWORD *)this + 1) = 0; v3 = (void *)*((_DWORD *)this + 8); *((_DWORD *)this + 7) = &NiTArray::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6F6C: using guessed type void *NiTArray::`vftable'; // 9F6FA4: using guessed type void *EffectCtrl::`vftable'; //----- (006AA880) -------------------------------------------------------- int __stdcall sub_6AA880(int a1, int a2) { _DWORD *v2; // ebx int v3; // esi if ( a2 ) { v2 = *(_DWORD **)(a1 + 160); while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( !v3 ) break; a1 = v3; InterlockedIncrement((volatile LONG *)(v3 + 4)); sub_8A6330((_DWORD *)(a2 + 156), &a1); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } return 0; } //----- (006AA920) -------------------------------------------------------- int __thiscall sub_6AA920(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,CharDecal *>::`vftable'; return result; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6FE4: using guessed type void *PgTList::`vftable'; //----- (006AA9A0) -------------------------------------------------------- _DWORD *__thiscall sub_6AA9A0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,CharDecal *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6F74: using guessed type void *NiTListBase,CharDecal *>::`vftable'; // 9F6FE4: using guessed type void *PgTList::`vftable'; //----- (006AAA30) -------------------------------------------------------- void *__thiscall sub_6AAA30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CharDecal::`vftable'; sub_6A9020(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F6FD4: using guessed type void *CharDecal::`vftable'; //----- (006AAA60) -------------------------------------------------------- void *__thiscall sub_6AAA60(void *this, char a2) { void *v2; // esi v2 = this; sub_6A9AC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006AAAA0) -------------------------------------------------------- void *__thiscall sub_6AAAA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,Effect *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F70C4: using guessed type void *NiTListBase,Effect *>::`vftable'; //----- (006AAAD0) -------------------------------------------------------- float *__thiscall sub_6AAAD0(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[203]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 53.0; } return result; } //----- (006AAB30) -------------------------------------------------------- float *__thiscall sub_6AAB30(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[213]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 25.0; } return result; } //----- (006AAB90) -------------------------------------------------------- float *__thiscall sub_6AAB90(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[219]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 10.0; } return result; } //----- (006AABF0) -------------------------------------------------------- float *__thiscall sub_6AABF0(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[220]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 10.0; } return result; } //----- (006AAC50) -------------------------------------------------------- float *__thiscall sub_6AAC50(_DWORD *this, float *a2) { float *v2; // edx float *result; // eax int v4; // ecx int v5; // edx float *v6; // ecx int v7; // edx int v8; // ecx v2 = (float *)this[210]; if ( v2 ) { result = a2; *a2 = v2[35]; v4 = *((_DWORD *)v2 + 36); v5 = *((_DWORD *)v2 + 37); *((_DWORD *)a2 + 1) = v4; *((_DWORD *)a2 + 2) = v5; } else { v6 = (float *)(*(int (**)(void))(*this + 196))(); result = a2; *a2 = *v6; v7 = *((_DWORD *)v6 + 1); v8 = *((_DWORD *)v6 + 2); *((_DWORD *)a2 + 1) = v7; *((_DWORD *)a2 + 2) = v8; a2[2] = a2[2] + 53.0; } return result; } //----- (006AACC0) -------------------------------------------------------- void *__thiscall sub_6AACC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,Effect *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; //----- (006AACF0) -------------------------------------------------------- char __stdcall sub_6AACF0(int a1) { _DWORD *v1; // esi int v2; // eax char result; // al if ( a1 ) { v1 = *(_DWORD **)(a1 + 128); while ( v1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; sub_6AACF0(v2); } result = sub_69CB50((_DWORD **)byte_ADB468, *(_DWORD ***)(a1 + 84)); } return result; } //----- (006AAD40) -------------------------------------------------------- int __stdcall sub_6AAD40(int a1) { int result; // eax if ( a1 ) { sub_6AACF0(a1); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a1 + 60))(a1, LODWORD(flt_ACCFCC)); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006AADF0) -------------------------------------------------------- double __stdcall sub_6AADF0(int a1, int a2) { int v2; // esi int v3; // eax int v4; // ST20_4 int v5; // ST1C_4 int v6; // ST24_4 int v7; // ST0C_4 int v8; // ecx int v9; // ST10_4 float v10; // edx float v12; // [esp+20h] [ebp-4h] if ( !a2 || !a1 ) return 1.0; v2 = (*(int (__stdcall **)(const char *))(*(_DWORD *)a1 + 72))("SizeBound"); if ( !v2 ) return 1.0; v3 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)a2 + 72))(a2, "SizeBound"); if ( !v3 ) return 1.0; v4 = *(_DWORD *)(v2 + 40); v12 = *(float *)(v2 + 48); v5 = *(_DWORD *)(v2 + 36); v6 = *(_DWORD *)(v2 + 44); v7 = *(_DWORD *)(v3 + 36); v8 = *(_DWORD *)(v3 + 44); v9 = *(_DWORD *)(v3 + 40); v10 = *(float *)(v3 + 48); if ( 0.0 == v12 || v10 == 0.0 ) return 1.0; return (float)(v10 / v12); } //----- (006AAEB0) -------------------------------------------------------- void __thiscall sub_6AAEB0(_DWORD *this, char a2) { _DWORD *v2; // esi _BYTE *v3; // ecx v2 = (_DWORD *)this[1]; while ( v2 ) { v3 = (_BYTE *)v2[2]; v2 = (_DWORD *)*v2; if ( v3 && v3[448] == 1 ) { if ( a2 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 84))(1); else (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 84))(0); } } } //----- (006AAF40) -------------------------------------------------------- _WORD *__thiscall sub_6AAF40(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // edi _WORD *v4; // esi int v5; // eax v3 = (_DWORD *)this[1]; if ( !v3 ) return 0; while ( 1 ) { v4 = (_WORD *)v3[2]; v3 = (_DWORD *)*v3; if ( sub_6A7770(v4) == a3 ) { if ( v4 ) { v5 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 4))(v4); if ( v5 ) { while ( (_UNKNOWN *)v5 != &unk_B911F8 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_9; } if ( v4[335] == a2 ) return v4; } } } LABEL_9: if ( !v3 ) return 0; } } //----- (006AAFB0) -------------------------------------------------------- void (__thiscall ***__thiscall sub_6AAFB0(_DWORD *this, char *Src))(_DWORD, signed int) { void (__thiscall ***result)(_DWORD, signed int); // eax _DWORD *v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // ebx _DWORD *v5; // eax int v6; // esi char *v7; // [esp-4h] [ebp-130h] char **v8; // [esp+10h] [ebp-11Ch] _DWORD *v9; // [esp+14h] [ebp-118h] _DWORD *v10; // [esp+18h] [ebp-114h] char v11; // [esp+1Ch] [ebp-110h] int v12; // [esp+128h] [ebp-4h] result = 0; v3 = this; if ( byte_AB58AB ) { v10 = 0; v12 = 0; v9 = this + 8; sub_455570(this + 8, (int)Src, (int *)&v10); v4 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 ) { v12 = -1; if ( !InterlockedDecrement(v10 + 1) ) (**v4)(v4, 1); result = v4; } else { if ( !byte_ACAD5C ) sub_420410(); v7 = Src; sprintf(&v11, "%s%s.nif", byte_ACA838, Src); v5 = sub_8F63D0(&v11, v3[13]); v6 = (int)v5; if ( v5 ) { v10 = v5; InterlockedIncrement(v5 + 1); sub_85AB50((void **)v6, Src); v8 = &v7; v7 = (char *)v6; InterlockedIncrement((volatile LONG *)(v6 + 4)); sub_6688B0(v9, (int)Src, (int)v7); v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = (void (__thiscall ***)(_DWORD, signed int))v6; } else { result = 0; } } } return result; } // AB58AB: using guessed type char byte_AB58AB; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006AB100) -------------------------------------------------------- double __thiscall sub_6AB100(_DWORD *this, char *Src, int a3) { void (__thiscall ***v4)(_DWORD, signed int); // eax int v5; // esi int v6; // eax int v7; // ST20_4 int v8; // ST1C_4 int v9; // ST24_4 int v10; // ST0C_4 int v11; // ecx int v12; // ST10_4 float v13; // edx float v14; // [esp+20h] [ebp-4h] if ( !a3 ) return 1.0; v4 = sub_6AAFB0(this, Src); if ( !v4 ) return 1.0; v5 = ((int (__thiscall *)(_DWORD, const char *))(*v4)[18])(v4, "SizeBound"); if ( !v5 ) return 1.0; v6 = (*(int (__thiscall **)(int, const char *))(*(_DWORD *)a3 + 72))(a3, "SizeBound"); if ( !v6 ) return 1.0; v7 = *(_DWORD *)(v5 + 40); v14 = *(float *)(v5 + 48); v8 = *(_DWORD *)(v5 + 36); v9 = *(_DWORD *)(v5 + 44); v10 = *(_DWORD *)(v6 + 36); v11 = *(_DWORD *)(v6 + 44); v12 = *(_DWORD *)(v6 + 40); v13 = *(float *)(v6 + 48); if ( 0.0 == v14 || v13 == 0.0 ) return 1.0; return (float)(v13 / v14); } //----- (006AB1D0) -------------------------------------------------------- int __thiscall sub_6AB1D0(_DWORD *this, __int16 a2) { _DWORD *v2; // edi int v3; // esi int v4; // eax v2 = (_DWORD *)this[1]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3); if ( v4 ) { while ( (_UNKNOWN *)v4 != &unk_B91200 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_8; } if ( (*(unsigned __int16 (__thiscall **)(int))(*(_DWORD *)v3 + 92))(v3) == a2 ) return v3; } } LABEL_8: if ( !v2 ) return 0; } } //----- (006AB240) -------------------------------------------------------- unsigned int __thiscall sub_6AB240(_DWORD *this, int a2, int a3) { unsigned int result; // eax _BYTE *v4; // ebx int v5; // esi unsigned int v6; // edi int v7; // edi int v8; // eax unsigned int v9; // ecx signed int v10; // edx unsigned int *v11; // ecx double v12; // st7 float v13; // ST18_4 double v14; // st7 double v15; // st7 double v16; // st6 float v17; // ST18_4 int v18; // [esp+14h] [ebp-18h] unsigned int v19; // [esp+18h] [ebp-14h] _DWORD *v20; // [esp+1Ch] [ebp-10h] unsigned int v21; // [esp+20h] [ebp-Ch] int v22; // [esp+24h] [ebp-8h] int v23; // [esp+28h] [ebp-4h] result = this[1]; v20 = this; if ( result ) { while ( 1 ) { v4 = *(_BYTE **)(result + 8); result = *(_DWORD *)result; v19 = result; if ( v4 ) { if ( *((_DWORD *)v4 + 113) == 1 && *((unsigned __int16 *)v4 + 229) == a3 ) break; } LABEL_32: if ( !v19 ) return result; result = v19; } v5 = this[15]; v6 = 0; result = (this[16] - v5) / 14; v21 = 0; if ( !result ) goto LABEL_31; v23 = 0; if ( result <= 0 ) std::_Xout_of_range("invalid vector subscript"); LABEL_9: if ( *(_WORD *)(v23 + v5 + 12) != *((_WORD *)v4 + 228) || *((unsigned __int16 *)v4 + 229) != *(_DWORD *)(v23 + v5) ) goto LABEL_30; v22 = 0; if ( *(float *)((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 16))(v4) + 16) <= 0.0 ) goto LABEL_27; while ( 1 ) { v7 = *(_DWORD *)(*(_DWORD *)((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 16))(v4) + 32) + 4 * v22); if ( !v7 ) goto LABEL_25; v18 = sub_4DCEF0(*((_WORD *)v4 + 229)); sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v18 ) goto LABEL_25; v8 = sub_6AD790((const char *)(v18 + 212), *(_DWORD *)(v23 + v5 + 8)); if ( !v8 ) goto LABEL_25; v9 = *(_DWORD *)(v8 + 51); v10 = *(_DWORD *)(v8 + 43); if ( v9 != 1000 ) break; v11 = (unsigned int *)(v23 + v5 + 4); if ( v10 != *v11 ) { v12 = (double)*(signed int *)(v8 + 43); if ( v10 < 0 ) v12 = v12 + 4294967300.0; v13 = 6.666999816894531 / (v12 / 1000.0); *(float *)(v7 + 12) = v13; *v11; v14 = ((double)*(unsigned int *)(v8 + 43) - (double)*v11) / 1000.0 * v13; LABEL_24: *(float *)(v7 + 16) = v14; goto LABEL_25; } *(float *)(v7 + 12) = 6.666999816894531 / ((double)(unsigned int)v10 / 1000.0); LABEL_25: if ( *(float *)((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 16))(v4) + 16) <= (double)++v22 ) { v6 = v21; LABEL_27: if ( !sub_6A7680(v4) ) (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v4 + 60))(v4, LODWORD(flt_ACCFCC)); sub_6A7670(v4, 1); LABEL_30: v5 = v20[15]; v23 += 14; ++v6; result = (v20[16] - v5) / 14; v21 = v6; if ( result <= v6 ) { LABEL_31: this = v20; goto LABEL_32; } goto LABEL_9; } } v15 = (double)*(signed int *)(v8 + 43); if ( v10 < 0 ) v15 = v15 + 4294967300.0; v16 = 6.666999816894531 / (v15 / 1000.0); v17 = v16; *(float *)(v7 + 12) = v16 * ((double)v9 / 1000.0); v14 = ((double)*(unsigned int *)(v8 + 43) - (double)*(unsigned int *)(v23 + v5 + 4)) / 1000.0 * v17; goto LABEL_24; } return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006AB520) -------------------------------------------------------- void __thiscall sub_6AB520(int this, int a2) { int v2; // ebx int v3; // edi _DWORD *v4; // esi int v5; // eax char v6; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 && *sub_6AD950((_DWORD *)(this + 16), (int **)&v6, &a2) != *(int **)(this + 20) ) { v4 = *(_DWORD **)(v2 + 128); while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; sub_6AB520(v3, v5); } sub_69CBA0(byte_ADB468, *(_DWORD *)(v2 + 84)); } } //----- (006AB580) -------------------------------------------------------- void __thiscall sub_6AB580(_DWORD *this, int a2, int a3, char a4) { int v4; // edi _DWORD *v5; // eax int v6; // esi v4 = (int)this; v5 = (_DWORD *)this[1]; if ( v5 ) { while ( 1 ) { v6 = v5[2]; v5 = (_DWORD *)*v5; if ( a2 == v6 ) break; if ( !v5 ) return; } (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 84))(v6, a3); if ( a4 ) { if ( (_BYTE)a3 ) sub_6AACF0(v6); else sub_6AB520(v4, v6); } } } //----- (006AB5E0) -------------------------------------------------------- void __thiscall sub_6AB5E0(_DWORD *this, int a2) { int *v2; // esi int v3; // edx int v4; // eax int j; // eax int i; // eax v2 = (int *)this[20]; v3 = *v2; if ( (int *)*v2 != v2 ) { while ( *(_DWORD *)(v3 + 16) != a2 ) { if ( !*(_BYTE *)(v3 + 21) ) { v4 = *(_DWORD *)(v3 + 8); if ( *(_BYTE *)(v4 + 21) ) { for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD *)(i + 8) ) break; v3 = i; } v3 = i; } else { v3 = *(_DWORD *)(v3 + 8); for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v3 = j; } } if ( (int *)v3 == v2 ) return; } sub_6CDBF0(this + 19, &a2, v3); } } //----- (006AB660) -------------------------------------------------------- char __thiscall sub_6AB660(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax _DWORD *v3; // edi int v4; // esi v1 = this; v2 = operator new(0x20u); v3 = 0; if ( v2 ) v3 = sub_698F20(v2, 0); v4 = v1[13]; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[13] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } return 1; } //----- (006AB700) -------------------------------------------------------- int __thiscall sub_6AB700(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx _DWORD *v5; // eax int v7; // [esp+4h] [ebp-8h] v2 = this; v3 = (_DWORD *)(*(int (**)(void))(*this + 4))(); v3[2] = a2; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) *v4 = v3; else v2[1] = v3; ++v2[3]; v2[2] = v3; v5 = sub_49FAD0(v2 + 4, &a2); return sub_8DE1B0(v2 + 4, (int)&v7, v5, 0); } //----- (006AB760) -------------------------------------------------------- void __thiscall sub_6AB760(_DWORD *this, int a2, int a3, float a4, _DWORD *a5, _DWORD *a6, int a7, int a8, int a9) { _DWORD *v9; // esi char *v10; // eax int v11; // ebx bool v12; // zf int *v13; // eax int *v14; // eax int *v15; // eax int *v16; // eax int *v17; // eax int *v18; // eax _DWORD *v19; // edi int *v20; // eax char *v21; // ecx int v22; // edx int *v23; // eax int v24; // ecx int v25; // edx int v26; // eax int *v27; // eax int v28; // ecx _DWORD *v29; // edi int v30; // eax int *v31; // eax int *v32; // eax int *v33; // eax _DWORD *v34; // ecx int v35; // eax int *v36; // eax float v37; // ST04_4 float v38; // ST00_4 int v39; // eax int *v40; // eax int *v41; // eax int v42; // eax unsigned int *v43; // esi char *v44; // eax int v45; // eax int v46; // esi int v47; // edi unsigned int v48; // ebx const char *v49; // ecx float *v50; // eax float *v51; // eax float *v52; // esi int v53; // ecx int v54; // edx int v55; // eax int v56; // ebx float *v57; // edi int v58; // eax float *v59; // edi float *v60; // edi int v61; // eax void (__thiscall *v62)(float *, int *); // edx int v63; // ST0C_4 int v64; // eax _DWORD *v65; // esi float v66; // ST0C_4 char v67; // [esp+20h] [ebp-110h] char v68; // [esp+2Ch] [ebp-104h] char v69; // [esp+38h] [ebp-F8h] char v70; // [esp+44h] [ebp-ECh] char v71; // [esp+50h] [ebp-E0h] char v72; // [esp+5Ch] [ebp-D4h] char v73; // [esp+68h] [ebp-C8h] char v74; // [esp+74h] [ebp-BCh] char v75; // [esp+80h] [ebp-B0h] char v76; // [esp+8Ch] [ebp-A4h] char v77; // [esp+98h] [ebp-98h] char v78; // [esp+A4h] [ebp-8Ch] char v79; // [esp+B0h] [ebp-80h] char v80; // [esp+BCh] [ebp-74h] char v81; // [esp+C8h] [ebp-68h] char v82; // [esp+D4h] [ebp-5Ch] unsigned int v83; // [esp+E0h] [ebp-50h] int v84; // [esp+E4h] [ebp-4Ch] unsigned int v85; // [esp+E8h] [ebp-48h] int v86; // [esp+ECh] [ebp-44h] int v87; // [esp+F0h] [ebp-40h] int v88; // [esp+F4h] [ebp-3Ch] char v89; // [esp+F8h] [ebp-38h] int v90; // [esp+100h] [ebp-30h] _DWORD *v91; // [esp+104h] [ebp-2Ch] char *Src; // [esp+108h] [ebp-28h] char v93[5]; // [esp+10Fh] [ebp-21h] int v94; // [esp+114h] [ebp-1Ch] int v95; // [esp+118h] [ebp-18h] int v96; // [esp+11Ch] [ebp-14h] _DWORD *v97; // [esp+120h] [ebp-10h] int v98; // [esp+12Ch] [ebp-4h] float v99; // [esp+138h] [ebp+8h] int v100; // [esp+140h] [ebp+10h] char v101; // [esp+147h] [ebp+17h] float v102; // [esp+148h] [ebp+18h] float v103; // [esp+148h] [ebp+18h] v91 = this; if ( a2 ) { v9 = a5; if ( a5 ) { v10 = (char *)(a2 + 4); v101 = 0; if ( *(_BYTE *)(a2 + 4) == 42 ) { v101 = 1; v10 = (char *)(a2 + 5); } Src = v10; v11 = sub_64BD40((const char *)(a2 + 36)); v84 = *(unsigned __int8 *)(a2 + 54); v97 = 0; Src = (char *)sub_6AAFB0(v91, Src); if ( Src ) { v12 = *(_BYTE *)(a2 + 55) == 0; *(_DWORD *)&v93[1] = 0; *(_DWORD *)v93 = !v12; switch ( v11 ) { case 0: v13 = (int *)sub_6AAAD0(v9, (float *)&v70); v94 = *v13; v95 = v13[1]; v96 = v13[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[203]; v97 = v9; break; case 1: v14 = (int *)sub_64CF20(v9, (float *)&v80); v94 = *v14; v95 = v14[1]; v96 = v14[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[207]; v97 = v9; break; case 2: v15 = (int *)sub_6AAB30(v9, (float *)&v82); v94 = *v15; v95 = v15[1]; v96 = v15[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[213]; v97 = v9; break; case 3: v16 = (int *)sub_64CF80(v9, (float *)&v78); v94 = *v16; v95 = v16[1]; v96 = v16[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[214]; v97 = v9; break; case 4: v17 = (int *)sub_6AAB90(v9, (float *)&v72); v94 = *v17; v95 = v17[1]; v96 = v17[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[219]; v97 = v9; break; case 5: v18 = (int *)sub_6AABF0(v9, (float *)&v76); v94 = *v18; v95 = v18[1]; v96 = v18[2]; if ( v9 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = v9[220]; v97 = v9; break; case 6: v19 = a6; if ( !a6 ) return; v20 = (int *)sub_64CF20(v9, (float *)&v68); v86 = *v20; v21 = &v74; goto LABEL_27; case 7: v19 = a6; if ( !a6 ) return; v20 = (int *)sub_64CF20(v9, (float *)&v81); v86 = *v20; v21 = &v79; LABEL_27: v22 = v20[1]; v88 = v20[2]; v87 = v22; v23 = (int *)sub_64CF20(v19, (float *)v21); v24 = *v23; v25 = v23[1]; v26 = v23[2]; v90 = v88; v94 = v24; v95 = v25; v96 = v88; goto LABEL_28; case 8: v27 = (int *)(*(int (__thiscall **)(_DWORD *))(*v9 + 196))(v9); v94 = *v27; v28 = v9[175]; v95 = v27[1]; v96 = v27[2]; *(_DWORD *)&v93[1] = v28; v97 = v9; break; case 9: v29 = a6; if ( !a6 ) return; v30 = *a6; *(_DWORD *)&v93[1] = a6[175]; v31 = (int *)(*(int (__thiscall **)(_DWORD *))(v30 + 196))(a6); v94 = *v31; v95 = v31[1]; v96 = v31[2]; goto LABEL_54; case 10: v29 = a6; if ( !a6 ) return; v32 = (int *)sub_64CF20(a6, (float *)&v77); v94 = *v32; v95 = v32[1]; v96 = v32[2]; goto LABEL_54; case 11: v33 = (int *)sub_69C820(v9, (float *)&v75); v94 = *v33; v95 = v33[1]; v96 = v33[2]; if ( v9 == (_DWORD *)-776 ) goto LABEL_28; *(_DWORD *)&v93[1] = v9[227]; v97 = v9; break; case 12: v34 = a6; if ( !a6 || a6 == (_DWORD *)-776 ) return; v35 = a6[227]; v97 = a6; *(_DWORD *)&v93[1] = v35; if ( !v35 ) goto LABEL_42; v36 = (int *)sub_69C820(a6, (float *)&v73); goto LABEL_43; case 13: sub_650930((int)v9, &v83, &v85); v37 = (double)v85; v38 = (double)v83; sub_69ACA0((int)byte_ADB468, v38, v37, (int)&v94, 0); sub_650990(v9); break; case 14: v34 = a6; if ( !a6 || a6 == (_DWORD *)-776 ) return; v39 = a6[203]; v97 = a6; *(_DWORD *)&v93[1] = v39; if ( v39 ) v36 = (int *)sub_69C820(a6, (float *)&v71); else LABEL_42: v36 = (int *)(*(int (**)(void))(*v34 + 196))(); LABEL_43: v94 = *v36; v95 = v36[1]; v96 = v36[2]; break; case 15: v40 = (int *)sub_6AAC50(v9, (float *)&v69); v94 = *v40; v95 = v40[1]; v96 = v40[2]; if ( v9 == (_DWORD *)-776 ) { LABEL_28: v97 = v9; } else { *(_DWORD *)&v93[1] = v9[210]; v97 = v9; } break; case 16: v29 = a6; if ( !a6 ) return; v41 = (int *)sub_6AAC50(a6, (float *)&v67); v94 = *v41; v95 = v41[1]; v96 = v41[2]; if ( a6 != (_DWORD *)-776 ) *(_DWORD *)&v93[1] = a6[210]; LABEL_54: v97 = v29; break; default: break; } if ( v93[0] ) { v99 = 0.0; v102 = 0.0; v42 = sub_49FBB0(a8); if ( v42 ) { v43 = (unsigned int *)(v42 + 259); if ( !*(_DWORD *)(v42 + 259) ) { v44 = sub_7549E0("pkSkillInfo->Area == 0, SkillID[ %d ]\n", (unsigned __int16)a8); OutputDebugStringA(v44); } v99 = (double)*v43; } if ( a9 && (v45 = *(_DWORD *)(a9 + 32), (v100 = v45) != 0) && (v46 = 0, *(_DWORD *)(v45 + 12)) ) { while ( 1 ) { v47 = *(_DWORD *)(v100 + 16); v48 = *(_DWORD *)(v100 + 12); if ( !v47 ) break; v49 = *(const char **)(v47 + 8 * v46 + 4); if ( v49 && !strcmp("Hit", v49) ) { v102 = *(float *)(v47 + 8 * v46); goto LABEL_69; } v102 = *(float *)(a9 + 48); OutputDebugStringA(aHittimeA); if ( ++v46 >= v48 ) goto LABEL_69; } } else { LABEL_69: v50 = (float *)sub_85BD60(Src); v51 = sub_6A9ED0((int *)&unk_B683E8, v50); v52 = v51; if ( v51 ) { sub_6A96C0(v51, v102); sub_6AA070(v52, v99); v53 = v95; v54 = v96; *((_DWORD *)v52 + 39) = v94; v55 = (int)v97; *((_DWORD *)v52 + 40) = v53; *((_DWORD *)v52 + 41) = v54; if ( v55 ) sub_6A9520(v52, *(_WORD *)(v55 + 548)); } } } else { if ( *(_BYTE *)(a2 + 53) && *(_DWORD *)&v93[1] && (v56 = (int)v97) != 0 ) { v57 = (float *)operator new(0x21Cu); v98 = 0; if ( v57 ) { v58 = sub_85BD60(Src); v59 = sub_6A6BB0(v57, v58, 0, (int)v9); } else { v59 = 0; } v98 = -1; sub_6AD3E0(v59, *(int *)&v93[1], (_DWORD *)(v56 + 60)); if ( v101 ) *((_DWORD *)v59 + 78) = a3; } else { v60 = (float *)operator new(0x20Cu); v98 = 1; if ( v60 ) { v61 = sub_85BD60(Src); v59 = sub_6A83F0(v60, v61, 1, (int)v9); } else { v59 = 0; } v62 = *(void (__thiscall **)(float *, int *))(*(_DWORD *)v59 + 28); v98 = -1; v62(v59, &v94); if ( v101 ) *((_DWORD *)v59 + 78) = a3; } if ( v84 && (!*(_BYTE *)(a2 + 53) || v9 != v97) ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 220))(v9, &v89); (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v59 + 40))(v59, &v89); } v63 = v9[175]; v64 = (*(int (__thiscall **)(float *))(*(_DWORD *)v59 + 8))(v59); v65 = v91; v66 = sub_6AADF0(v64, v63); sub_438A50(v59, v66); if ( a4 < 0.0 ) a4 = 0.0; v103 = flt_ACCFCC + a4; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v59 + 60))(v59, LODWORD(v103)); sub_6AB700(v65, (char)v59); sub_6AACF0((int)v59); } } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006ABF00) -------------------------------------------------------- void __thiscall sub_6ABF00(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, void *a6) { int v6; // esi int v7; // edx char *v8; // edx int v9; // eax _DWORD *v10; // ebx float v11; // ST04_4 float v12; // ST00_4 int *v13; // eax int *v14; // eax int *v15; // eax int *v16; // eax int *v17; // eax int *v18; // eax _DWORD *v19; // edi int *v20; // eax char *v21; // ecx int v22; // edx int *v23; // eax int v24; // ecx int v25; // edx int v26; // eax int *v27; // eax int v28; // ecx int v29; // eax int *v30; // eax int *v31; // eax int *v32; // eax _DWORD *v33; // ecx float v34; // ST04_4 float v35; // ST00_4 int *v36; // eax int *v37; // eax float *v38; // edi int v39; // eax float *v40; // edi float *v41; // edi int v42; // eax float *v43; // edi void (__thiscall *v44)(float *, int *); // edx char v45; // [esp+20h] [ebp-10Ch] char v46; // [esp+2Ch] [ebp-100h] char v47; // [esp+38h] [ebp-F4h] char v48; // [esp+44h] [ebp-E8h] char v49; // [esp+50h] [ebp-DCh] char v50; // [esp+5Ch] [ebp-D0h] char v51; // [esp+68h] [ebp-C4h] char v52; // [esp+74h] [ebp-B8h] char v53; // [esp+80h] [ebp-ACh] char v54; // [esp+8Ch] [ebp-A0h] char v55; // [esp+98h] [ebp-94h] char v56; // [esp+A4h] [ebp-88h] char v57; // [esp+B0h] [ebp-7Ch] char v58; // [esp+BCh] [ebp-70h] char v59; // [esp+C8h] [ebp-64h] char v60; // [esp+D4h] [ebp-58h] int v61; // [esp+E0h] [ebp-4Ch] _DWORD *v62; // [esp+E4h] [ebp-48h] int v63; // [esp+E8h] [ebp-44h] int v64; // [esp+ECh] [ebp-40h] int v65; // [esp+F0h] [ebp-3Ch] int v66; // [esp+F4h] [ebp-38h] char v67; // [esp+F8h] [ebp-34h] int v68; // [esp+100h] [ebp-2Ch] void (__thiscall ***v69)(_DWORD, signed int); // [esp+104h] [ebp-28h] unsigned int v70; // [esp+108h] [ebp-24h] unsigned int v71; // [esp+10Ch] [ebp-20h] int v72; // [esp+110h] [ebp-1Ch] int v73; // [esp+114h] [ebp-18h] int v74; // [esp+118h] [ebp-14h] int v75; // [esp+11Ch] [ebp-10h] int v76; // [esp+128h] [ebp-4h] char v77; // [esp+13Fh] [ebp+13h] float *v78; // [esp+144h] [ebp+18h] v62 = this; if ( a2 ) { v6 = a4; if ( a4 ) { v7 = a3 + a2 + 32 * a3; v77 = 0; if ( *(_BYTE *)(v7 + 116) == 42 ) { v77 = 1; v8 = (char *)(v7 + 117); } else { v8 = (char *)(v7 + 116); } v9 = *(_DWORD *)(a2 + 4 * a3 + 252); v63 = *(_DWORD *)(a2 + 4 * a3 + 216); v61 = v9; v10 = 0; v69 = sub_6AAFB0(this, v8); if ( v69 ) { v72 = 0; if ( (_BYTE)a6 && sub_650930(v6, &v70, &v71) ) { v11 = (double)v71; v12 = (double)v70; sub_69ACA0((int)byte_ADB468, v12, v11, (int)&v73, 0); sub_650990((_BYTE *)v6); } else { switch ( v63 ) { case 0: v13 = (int *)sub_6AAAD0((_DWORD *)v6, (float *)&v48); v73 = *v13; v74 = v13[1]; v75 = v13[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 812); v10 = (_DWORD *)v6; break; case 1: v14 = (int *)sub_64CF20((_DWORD *)v6, (float *)&v58); v73 = *v14; v74 = v14[1]; v75 = v14[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 828); v10 = (_DWORD *)v6; break; case 2: v15 = (int *)sub_6AAB30((_DWORD *)v6, (float *)&v60); v73 = *v15; v74 = v15[1]; v75 = v15[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 852); v10 = (_DWORD *)v6; break; case 3: v16 = (int *)sub_64CF80((_DWORD *)v6, (float *)&v56); v73 = *v16; v74 = v16[1]; v75 = v16[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 856); v10 = (_DWORD *)v6; break; case 4: v17 = (int *)sub_6AAB90((_DWORD *)v6, (float *)&v50); v73 = *v17; v74 = v17[1]; v75 = v17[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 876); v10 = (_DWORD *)v6; break; case 5: v18 = (int *)sub_6AABF0((_DWORD *)v6, (float *)&v54); v73 = *v18; v74 = v18[1]; v75 = v18[2]; if ( v6 != -776 ) v72 = *(_DWORD *)(v6 + 880); v10 = (_DWORD *)v6; break; case 6: v19 = a5; if ( !a5 ) return; v20 = (int *)sub_64CF20((_DWORD *)v6, (float *)&v46); v64 = *v20; v21 = &v52; goto LABEL_31; case 7: v19 = a5; if ( !a5 ) return; v20 = (int *)sub_64CF20((_DWORD *)v6, (float *)&v59); v64 = *v20; v21 = &v57; LABEL_31: v22 = v20[1]; v66 = v20[2]; v65 = v22; v23 = (int *)sub_64CF20(v19, (float *)v21); v24 = *v23; v25 = v23[1]; v26 = v23[2]; v68 = v66; v73 = v24; v74 = v25; v75 = v66; goto LABEL_32; case 8: v27 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 196))(v6); v73 = *v27; v28 = *(_DWORD *)(v6 + 700); v74 = v27[1]; v75 = v27[2]; v10 = (_DWORD *)v6; goto LABEL_58; case 9: v10 = a5; if ( !a5 ) return; v29 = *a5; v72 = a5[175]; v30 = (int *)(*(int (__thiscall **)(_DWORD *))(v29 + 196))(a5); goto LABEL_38; case 10: v10 = a5; if ( !a5 ) return; v31 = (int *)sub_64CF20(a5, (float *)&v55); v73 = *v31; v74 = v31[1]; v75 = v31[2]; break; case 11: v32 = (int *)sub_69C820((_DWORD *)v6, (float *)&v53); v73 = *v32; v74 = v32[1]; v75 = v32[2]; if ( v6 == -776 ) goto LABEL_32; v72 = *(_DWORD *)(v6 + 908); v10 = (_DWORD *)v6; break; case 12: v33 = a5; if ( !a5 || a5 == (_DWORD *)-776 ) return; v10 = a5; v72 = a5[227]; if ( !v72 ) goto LABEL_47; v30 = (int *)sub_69C820(a5, (float *)&v51); goto LABEL_38; case 13: sub_650930(v6, &v70, &v71); v34 = (double)v71; v35 = (double)v70; sub_69ACA0((int)byte_ADB468, v35, v34, (int)&v73, 0); break; case 14: v33 = a5; if ( !a5 || a5 == (_DWORD *)-776 ) return; v10 = a5; v72 = a5[203]; if ( v72 ) v30 = (int *)sub_69C820(a5, (float *)&v49); else LABEL_47: v30 = (int *)(*(int (**)(void))(*v33 + 196))(); LABEL_38: v73 = *v30; v74 = v30[1]; v75 = v30[2]; break; case 15: v36 = (int *)sub_6AAC50((_DWORD *)v6, (float *)&v47); v73 = *v36; v74 = v36[1]; v75 = v36[2]; if ( v6 == -776 ) { LABEL_32: v10 = (_DWORD *)v6; } else { v72 = *(_DWORD *)(v6 + 840); v10 = (_DWORD *)v6; } break; case 16: v10 = a5; if ( !a5 ) return; v37 = (int *)sub_6AAC50(a5, (float *)&v45); v73 = *v37; v74 = v37[1]; v75 = v37[2]; if ( a5 != (_DWORD *)-776 ) { v28 = a5[210]; LABEL_58: v72 = v28; } break; default: break; } } if ( *(_DWORD *)(a2 + 4 * a3 + 240) && v72 && v10 ) { v38 = (float *)operator new(0x21Cu); v76 = 0; if ( v38 ) { v39 = sub_85BD60(v69); v40 = sub_6A6BB0(v38, v39, 0, v6); } else { v40 = 0; } v76 = -1; v78 = v40; sub_6AD3E0(v40, v72, v10 + 15); if ( v77 ) v40[78] = *(float *)(a2 + 108); } else { v41 = (float *)operator new(0x20Cu); v76 = 1; if ( v41 ) { v42 = sub_85BD60(v69); v43 = sub_6A83F0(v41, v42, 1, v6); } else { v43 = 0; } v44 = *(void (__thiscall **)(float *, int *))(*(_DWORD *)v43 + 28); v76 = -1; v78 = v43; v44(v43, &v73); if ( v77 ) v43[78] = *(float *)(a2 + 108); } if ( v61 && (!*(_DWORD *)(a2 + 4 * a3 + 240) || (_DWORD *)v6 != v10) ) { (*(void (__thiscall **)(int, char *))(*(_DWORD *)v6 + 220))(v6, &v67); (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v78 + 40))(v78, &v67); } (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v78 + 60))(v78, LODWORD(flt_ACCFCC)); sub_6AB700(v62, (char)v78); sub_6AACF0((int)v78); } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006AC800) -------------------------------------------------------- int __thiscall sub_6AC800(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ecx int **v5; // eax int *j; // eax int i; // eax int v8; // eax _BYTE *v9; // ebx int *v10; // esi int result; // eax v1 = this; v2 = (_DWORD *)this[20]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { v4 = v3[4]; if ( v4 ) (*(void (**)(void))(*(_DWORD *)v4 + 64))(); if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != (_DWORD *)v1[20] ); } v8 = v1[20]; v9 = *(_BYTE **)(v8 + 4); v10 = *(int **)(v8 + 4); if ( !v9[21] ) { do { sub_6DA320((void *)v10[2]); v10 = (int *)*v10; operator delete(v9); v9 = v10; } while ( !*((_BYTE *)v10 + 21) ); } *(_DWORD *)(v1[20] + 4) = v1[20]; *(_DWORD *)v1[20] = v1[20]; result = v1[20]; *(_DWORD *)(result + 8) = result; v1[21] = 0; return result; } //----- (006AC8B0) -------------------------------------------------------- int *__thiscall sub_6AC8B0(_DWORD *this, int *a2) { _DWORD *v2; // ebx int *result; // eax _DWORD *v4; // ecx int *v5; // esi int **v6; // ecx int *v7; // edx _DWORD *v8; // [esp+4h] [ebp-Ch] _DWORD *v9; // [esp+8h] [ebp-8h] int *v10; // [esp+Ch] [ebp-4h] v2 = this; result = (int *)this[1]; v4 = (_DWORD *)this[1]; if ( v4 ) { while ( 1 ) { v5 = (int *)v4[2]; v4 = (_DWORD *)*v4; v10 = v5; if ( a2 == v5 ) break; if ( !v4 ) return result; } if ( result ) { while ( 1 ) { v6 = (int **)(result + 2); v7 = result; result = (int *)*result; if ( v5 == *v6 ) break; if ( !result ) goto LABEL_8; } } else { LABEL_8: v7 = 0; } a2 = v7; if ( v7 ) sub_403620(v2, &a2); sub_6AD670(v2 + 4, &v8, (unsigned int *)&v10); result = sub_4E6DC0(v2 + 4, (int *)&a2, v8, v9); if ( v5 ) result = (int *)(*(int (__thiscall **)(int *, signed int))*v5)(v5, 1); } return result; } //----- (006AC9F0) -------------------------------------------------------- int *__thiscall sub_6AC9F0(_DWORD *this, int a2) { _DWORD *v2; // ebx int *v3; // esi int v4; // ecx int v5; // eax int j; // eax int i; // eax int *v9; // [esp+Ch] [ebp-Ch] int *v10; // [esp+10h] [ebp-8h] int v11; // [esp+14h] [ebp-4h] v2 = this; sub_6AD700(this + 19, &v9, (unsigned int *)&a2); v11 = 0; sub_67A8C0(v9, v10, &v11); v3 = *sub_4DD710(v2 + 19, &v10, &a2); if ( v11 > 0 ) { do { if ( v3 != (int *)v2[20] ) { v4 = v3[4]; if ( v4 ) (*(void (**)(void))(*(_DWORD *)v4 + 64))(); } if ( !*((_BYTE *)v3 + 21) ) { v5 = v3[2]; if ( *(_BYTE *)(v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(int **)(i + 8) ) break; v3 = (int *)i; } v3 = (int *)i; } else { v3 = (int *)v3[2]; for ( j = *(_DWORD *)v5; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v3 = (int *)j; } } --v11; } while ( v11 ); } sub_6AD700(v2 + 19, &v9, (unsigned int *)&a2); return sub_6CDE90(v2 + 19, &a2, v9, v10); } //----- (006ACAD0) -------------------------------------------------------- int *__thiscall sub_6ACAD0(_DWORD *this, float a2) { _DWORD *v2; // ebx int *result; // eax _DWORD *v4; // edi int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ecx int *v8; // edi int **v9; // ecx int *v10; // edx int v11; // esi _DWORD *v12; // eax int v13; // edx int v14; // ecx int v15; // eax int *v16; // eax _DWORD *v17; // esi int v18; // eax _DWORD *v19; // eax _DWORD *v20; // ecx int v21; // edi _DWORD *v22; // ecx int *v23; // edx _DWORD *v24; // esi int v25; // eax int **i; // esi int (__stdcall *v27)(_DWORD); // eax int *v28; // esi int *v29; // ST14_4 _DWORD *v30; // esi _DWORD *v31; // ST14_4 void **v32; // [esp+28h] [ebp-34h] _DWORD *v33; // [esp+2Ch] [ebp-30h] _DWORD *v34; // [esp+30h] [ebp-2Ch] int v35; // [esp+34h] [ebp-28h] void **v36; // [esp+38h] [ebp-24h] int *v37; // [esp+3Ch] [ebp-20h] _DWORD *v38; // [esp+40h] [ebp-1Ch] int v39; // [esp+44h] [ebp-18h] int v40; // [esp+48h] [ebp-14h] int v41; // [esp+4Ch] [ebp-10h] int j; // [esp+58h] [ebp-4h] v2 = this; result = (int *)&NiTList::`vftable'; v35 = 0; v33 = 0; v34 = 0; v32 = &NiTList::`vftable'; j = 0; v39 = 0; v37 = 0; v38 = 0; v36 = &NiTList::`vftable'; v4 = (_DWORD *)this[1]; LOBYTE(j) = 1; if ( v4 ) { do { v5 = v4[2]; v4 = (_DWORD *)*v4; result = (int *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 76))(v5, LODWORD(a2)); if ( (_BYTE)result ) { result = (int *)((int (__thiscall *)(void ***))v36[1])(&v36); result[2] = v5; *result = 0; result[1] = (int)v38; if ( v38 ) *v38 = result; else v37 = result; ++v39; v38 = result; } } while ( v4 ); while ( v39 ) { v6 = v38; v7 = (_DWORD *)v38[1]; v38 = v7; if ( v7 ) *v7 = 0; else v37 = 0; v8 = (int *)v6[2]; ((void (__thiscall *)(void ***, _DWORD *))v36[2])(&v36, v6); result = (int *)v2[1]; --v39; if ( result ) { while ( 1 ) { v9 = (int **)(result + 2); v10 = result; result = (int *)*result; if ( v8 == *v9 ) break; if ( !result ) goto LABEL_37; } if ( v10 ) { v11 = v8[36]; if ( v11 ) { v12 = (_DWORD *)((int (__thiscall *)(void ***))v32[1])(&v32); v12[2] = v11; *v12 = 0; v12[1] = v34; if ( v34 ) *v34 = v12; else v33 = v12; ++v35; v34 = v12; v8[36] = 0; } v13 = v2[5]; v14 = v2[5]; v15 = *(_DWORD *)(v14 + 4); while ( !*(_BYTE *)(v15 + 17) ) { if ( *(_DWORD *)(v15 + 12) >= (unsigned int)v8 ) { v14 = v15; v15 = *(_DWORD *)v15; } else { v15 = *(_DWORD *)(v15 + 8); } } v41 = v14; if ( v14 == v13 || (unsigned int)v8 < *(_DWORD *)(v14 + 12) ) { v40 = v13; v16 = &v40; } else { v16 = &v41; } if ( *v16 != v13 ) { v17 = (_DWORD *)v8[32]; while ( v17 ) { v18 = v17[2]; v17 = (_DWORD *)*v17; sub_6AB520((int)v2, v18); } sub_69CBA0(byte_ADB468, v8[21]); } (*(void (__thiscall **)(int *, _DWORD))(*v8 + 80))(v8, LODWORD(a2)); result = sub_6AC8B0(v2, v8); if ( (int *)v2[14] == v8 ) v2[14] = 0; } } LABEL_37: ; } while ( v35 ) { v19 = v33; v20 = (_DWORD *)*v33; v33 = v20; if ( v20 ) v20[1] = 0; else v34 = 0; v21 = v19[2]; ((void (__thiscall *)(void ***, _DWORD *))v32[2])(&v32, v19); result = (int *)v2[1]; --v35; if ( result ) { while ( 1 ) { v22 = result + 2; v23 = result; result = (int *)*result; if ( v21 == *v22 ) break; if ( !result ) goto LABEL_51; } if ( v23 && v21 ) { v24 = *(_DWORD **)(v21 + 128); while ( v24 ) { v25 = v24[2]; v24 = (_DWORD *)*v24; sub_6AACF0(v25); } sub_69CB50((_DWORD **)byte_ADB468, *(_DWORD ***)(v21 + 84)); result = (int *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v21 + 60))(v21, LODWORD(flt_ACCFCC)); } } LABEL_51: ; } } for ( i = (int **)v2[1]; i; result = (int *)v27(LODWORD(a2)) ) { v27 = *(int (__stdcall **)(_DWORD))(*i[2] + 56); i = (int **)*i; } v36 = &NiTPointerListBase,Effect *>::`vftable'; v28 = v37; for ( LOBYTE(j) = 2; v28; result = (int *)((int (__thiscall *)(void ***, int *))v36[2])(&v36, v29) ) { v29 = v28; v28 = (int *)*v28; } v39 = 0; v37 = 0; v38 = 0; v36 = &NiTListBase,Effect *>::`vftable'; v32 = &NiTPointerListBase,Effect *>::`vftable'; v30 = v33; for ( j = 3; v30; result = (int *)((int (__thiscall *)(void ***, _DWORD *))v32[2])(&v32, v31) ) { v31 = v30; v30 = (_DWORD *)*v30; } return result; } // 9F70C4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F70EC: using guessed type void *NiTPointerListBase,Effect *>::`vftable'; // 9F70FC: using guessed type void *NiTList::`vftable'; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006ACDF0) -------------------------------------------------------- int *__thiscall sub_6ACDF0(_DWORD *this, int *a2) { _DWORD *v2; // esi int *result; // eax v2 = this; if ( a2 ) { sub_6AB520((int)this, (int)a2); result = sub_6AC8B0(v2, a2); } return result; } //----- (006ACE20) -------------------------------------------------------- _DWORD *__thiscall sub_6ACE20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void *v3; // eax size_t v4; // ST0C_4 _DWORD *v5; // eax void (__stdcall ***v6)(_DWORD); // eax void **v8; // [esp+10h] [ebp-24h] _DWORD *v9; // [esp+1Ch] [ebp-18h] char *v10; // [esp+20h] [ebp-14h] void (__stdcall ***v11)(signed int); // [esp+24h] [ebp-10h] int v12; // [esp+30h] [ebp-4h] v1 = this; v9 = this; this[3] = 0; this[1] = 0; this[2] = 0; *this = &PgTList::`vftable'; v12 = 0; this[6] = 0; v2 = operator new(0x14u); if ( !v2 ) { v10 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v10); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[5] = v2; *v2 = v2; *(_DWORD *)(v1[5] + 4) = v1[5]; *(_DWORD *)(v1[5] + 8) = v1[5]; *(_BYTE *)(v1[5] + 16) = 1; *(_BYTE *)(v1[5] + 17) = 1; v1[9] = 37; LOBYTE(v12) = 1; v1[8] = &NiTMapBase,char const *,NiPointer>::`vftable'; v1[11] = 0; v3 = operator new[](0x94u); v4 = 4 * v1[9]; v1[10] = v3; memset(v3, 0, v4); *((_BYTE *)v1 + 48) = 1; v1[8] = &NiTStringPointerMap>::`vftable'; v1[13] = 0; v1[15] = 0; v1[16] = 0; v1[17] = 0; LOBYTE(v12) = 4; v1[21] = 0; v5 = operator new(0x18u); if ( !v5 ) { v10 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v10); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[20] = v5; *v5 = v5; *(_DWORD *)(v1[20] + 4) = v1[20]; *(_DWORD *)(v1[20] + 8) = v1[20]; *(_BYTE *)(v1[20] + 20) = 1; *(_BYTE *)(v1[20] + 21) = 1; v6 = (void (__stdcall ***)(_DWORD))v1[13]; LOBYTE(v12) = 5; v11 = v6; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) && v11 ) (**v11)(1); v1[13] = 0; } v1[14] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F4DD4: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // 9F4EBC: using guessed type void *NiTStringPointerMap>::`vftable'; // 9F710C: using guessed type void *PgTList::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006ACFB0) -------------------------------------------------------- void __thiscall sub_6ACFB0(char *this) { char *v1; // esi _DWORD *v2; // ST08_4 _DWORD *v3; // ST04_4 int v4; // edi _DWORD *v5; // ST08_4 _DWORD *v6; // ST04_4 _DWORD *v7; // edi _DWORD *v8; // ST08_4 char *v9; // [esp+10h] [ebp-18h] char *v10; // [esp+14h] [ebp-14h] char *v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v1 = this; v11 = this; v12 = 5; sub_6A2F10(); v10 = v1 + 76; v2 = (_DWORD *)*((_DWORD *)v1 + 20); v3 = (_DWORD *)**((_DWORD **)v1 + 20); LOBYTE(v12) = 6; sub_6CDE90((_DWORD *)v1 + 19, (int *)&v9, v3, v2); operator delete(*((void **)v1 + 20)); if ( *((_DWORD *)v1 + 15) ) operator delete(*((void **)v1 + 15)); *((_DWORD *)v1 + 15) = 0; *((_DWORD *)v1 + 16) = 0; *((_DWORD *)v1 + 17) = 0; v4 = *((_DWORD *)v1 + 13); LOBYTE(v12) = 2; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); LOBYTE(v12) = 1; sub_6839A0(v1 + 32); v9 = v1 + 16; v5 = (_DWORD *)*((_DWORD *)v1 + 5); v6 = (_DWORD *)**((_DWORD **)v1 + 5); LOBYTE(v12) = 7; sub_4E6DC0((_DWORD *)v1 + 4, (int *)&v10, v6, v5); operator delete(*((void **)v1 + 5)); *(_DWORD *)v1 = &PgTList::`vftable'; v7 = (_DWORD *)*((_DWORD *)v1 + 1); v12 = 8; while ( v7 ) { v8 = v7; v7 = (_DWORD *)*v7; (*(void (__thiscall **)(char *, _DWORD *))(*(_DWORD *)v1 + 8))(v1, v8); } *((_DWORD *)v1 + 3) = 0; *((_DWORD *)v1 + 1) = 0; *((_DWORD *)v1 + 2) = 0; *(_DWORD *)v1 = &NiTListBase,Effect *>::`vftable'; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F710C: using guessed type void *PgTList::`vftable'; //----- (006AD0E0) -------------------------------------------------------- int __thiscall sub_6AD0E0(_DWORD *this) { _DWORD *v1; // edi int *v2; // ecx unsigned int v3; // ebx int v4; // edx int v5; // ecx int v6; // eax int *v7; // eax _DWORD *v8; // esi int v9; // edx _DWORD *v10; // esi _DWORD *v11; // ST04_4 int v12; // ecx int v16; // [esp+8h] [ebp-Ch] int v17; // [esp+Ch] [ebp-8h] int *v18; // [esp+10h] [ebp-4h] v1 = this; v2 = (int *)this[1]; if ( v2 ) { while ( 1 ) { v3 = v2[2]; v18 = (int *)*v2; if ( v3 ) { v4 = v1[5]; v5 = v1[5]; v6 = *(_DWORD *)(v5 + 4); while ( !*(_BYTE *)(v6 + 17) ) { if ( *(_DWORD *)(v6 + 12) >= v3 ) { v5 = v6; v6 = *(_DWORD *)v6; } else { v6 = *(_DWORD *)(v6 + 8); } } v17 = v5; if ( v5 == v4 || v3 < *(_DWORD *)(v5 + 12) ) { v16 = v4; v7 = &v16; } else { v7 = &v17; } if ( *v7 != v4 ) { v8 = *(_DWORD **)(v3 + 128); while ( v8 ) { v9 = v8[2]; v8 = (_DWORD *)*v8; sub_6AB520((int)v1, v9); } sub_69CBA0(byte_ADB468, *(_DWORD *)(v3 + 84)); } (**(void (__thiscall ***)(unsigned int, signed int))v3)(v3, 1); } if ( !v18 ) break; v2 = v18; } } v10 = (_DWORD *)v1[1]; while ( v10 ) { v11 = v10; v10 = (_DWORD *)*v10; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v11); } v1[3] = 0; v1[1] = 0; v1[2] = 0; sub_4A0060(v1 + 4); v12 = v1[15]; if ( v12 != v1[16] ) v1[16] = v12; return sub_6AC800(v1); } //----- (006AD210) -------------------------------------------------------- int __thiscall sub_6AD210(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // ecx v1 = this; v2 = this[13]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[13] = 0; } sub_6AD0E0(v1); sub_940360(v1 + 8); v3 = v1[15]; if ( v3 != v1[16] ) v1[16] = v3; return sub_6AC800(v1); } //----- (006AD290) -------------------------------------------------------- unsigned int __thiscall sub_6AD290(_DWORD *this, int *a2, int a3) { int v3; // eax int v4; // edx _DWORD *v5; // esi unsigned int *v6; // ecx _DWORD *v7; // edi int v8; // eax char v9; // dl _DWORD *v11; // [esp+Ch] [ebp-18h] int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+18h] [ebp-Ch] __int16 v15; // [esp+1Ch] [ebp-8h] v3 = *a2; v4 = a2[2]; v5 = this; v13 = a2[1]; v12 = v3; v11 = this; v14 = v4; v15 = a3; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4DCEF0(*(_WORD *)a2); v6 = v5 + 15; if ( (v5[16] - v5[15]) / 14 ) { v8 = v5[15]; v7 = v11; v9 = 0; if ( v8 == v11[16] ) goto LABEL_15; do { if ( *(_DWORD *)v8 == *a2 && *(_WORD *)(v8 + 12) == (_WORD)a3 ) { *(_DWORD *)(v8 + 4) = v13; *(_DWORD *)(v8 + 8) = v14; *(_WORD *)(v8 + 12) = a3; v9 = 1; } v8 += 14; } while ( v8 != v11[16] ); if ( !v9 ) LABEL_15: sub_6ADBF0(v6, (unsigned int)&v12); } else { sub_6ADBF0(v6, (unsigned int)&v12); v7 = v11; } return sub_6AB240(v7, a3, *a2); } //----- (006AD380) -------------------------------------------------------- void *__stdcall sub_6AD380(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x12492492 || (result = operator new(14 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006AD3E0) -------------------------------------------------------- void __thiscall sub_6AD3E0(_DWORD *this, int a2, _DWORD *a3) { int v3; // edi int v4; // esi v3 = (int)this; v4 = this[132]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v3 + 528) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } *(_DWORD *)(v3 + 532) = a3; if ( a3 ) sub_6A71A0(a3, v3); } //----- (006AD450) -------------------------------------------------------- _DWORD *__thiscall sub_6AD450(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,Effect *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,Effect *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F70DC: using guessed type void *NiTPointerListBase,Effect *>::`vftable'; //----- (006AD4E0) -------------------------------------------------------- int __thiscall sub_6AD4E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,Effect *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,Effect *>::`vftable'; return result; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F70DC: using guessed type void *NiTPointerListBase,Effect *>::`vftable'; //----- (006AD560) -------------------------------------------------------- int __thiscall sub_6AD560(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,Effect *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,Effect *>::`vftable'; return result; } // 9F70C4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F70EC: using guessed type void *NiTPointerListBase,Effect *>::`vftable'; //----- (006AD5E0) -------------------------------------------------------- _DWORD *__thiscall sub_6AD5E0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,Effect *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,Effect *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F70C4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F70EC: using guessed type void *NiTPointerListBase,Effect *>::`vftable'; //----- (006AD670) -------------------------------------------------------- _DWORD *__thiscall sub_6AD670(_DWORD *this, _DWORD *a2, unsigned int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx unsigned int v6; // edi unsigned int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 17) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 17) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 17) ); } if ( *((_BYTE *)v3 + 17) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 17) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (006AD700) -------------------------------------------------------- _DWORD *__thiscall sub_6AD700(_DWORD *this, _DWORD *a2, unsigned int *a3) { int *v3; // edx int *v4; // eax int *v5; // ebx unsigned int v6; // edi unsigned int v7; // esi int *v8; // eax _DWORD *result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; v5 = (int *)this[1]; if ( !*((_BYTE *)v4 + 21) ) { v6 = *a3; do { v7 = v4[3]; if ( v7 >= v6 ) { if ( *((_BYTE *)v3 + 21) && v6 < v7 ) v3 = v4; v5 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } while ( !*((_BYTE *)v4 + 21) ); } if ( *((_BYTE *)v3 + 21) ) v8 = *(int **)(this[1] + 4); else v8 = (int *)*v3; while ( !*((_BYTE *)v8 + 21) ) { if ( *a3 >= v8[3] ) { v8 = (int *)v8[2]; } else { v3 = v8; v8 = (int *)*v8; } } result = a2; *a2 = v5; a2[1] = v3; return result; } //----- (006AD790) -------------------------------------------------------- int __cdecl sub_6AD790(const char *a1, int a2) { unsigned int v2; // edi if ( !a1 || !*a1 ) return 0; v2 = 0; if ( !sub_4DC330() ) return 0; while ( strcmp((const char *)(sub_7474E0((_DWORD *)(dword_ACDA84 + 4), v2) + 2), a1) || *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACDA84 + 4), v2) + 34) != a2 ) { if ( ++v2 >= sub_4DC330() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACDA84 + 4), v2); } // ACDA84: using guessed type int dword_ACDA84; //----- (006AD840) -------------------------------------------------------- int __thiscall sub_6AD840(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,Effect *>::`vftable'; return result; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F710C: using guessed type void *PgTList::`vftable'; //----- (006AD8C0) -------------------------------------------------------- _DWORD *__thiscall sub_6AD8C0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,Effect *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F70B4: using guessed type void *NiTListBase,Effect *>::`vftable'; // 9F710C: using guessed type void *PgTList::`vftable'; //----- (006AD950) -------------------------------------------------------- int **__thiscall sub_6AD950(_DWORD *this, int **a2, _DWORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 17) ) { if ( (unsigned int)v4[3] >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < (unsigned int)v3[3] ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (006AD9C0) -------------------------------------------------------- int __cdecl sub_6AD9C0(int a1, int a2, int a3) { int v3; // ecx int result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 14 ) { if ( result ) { *(_DWORD *)result = *(_DWORD *)v3; *(_DWORD *)(result + 4) = *(_DWORD *)(v3 + 4); *(_DWORD *)(result + 8) = *(_DWORD *)(v3 + 8); *(_WORD *)(result + 12) = *(_WORD *)(v3 + 12); } v3 += 14; } return result; } //----- (006ADA00) -------------------------------------------------------- void __thiscall sub_6ADA00(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_6CDE90(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (006ADA60) -------------------------------------------------------- unsigned int __thiscall sub_6ADA60(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax void *v4; // eax int v5; // ST04_4 signed int v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x12492492 ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 14; if ( result < (unsigned int)a2 ) { v4 = sub_6AD380(a2); v5 = v2[1]; v6 = *v2; v10 = v4; v12 = 0; sub_6AD9C0(v6, v5, (int)v4); v7 = (signed int)(v2[1] - *v2 + ((unsigned __int64)(-1840700269i64 * (signed int)(v2[1] - *v2)) >> 32)) >> 3; v8 = v7 + (v7 >> 31); if ( *v2 ) operator delete((void *)*v2); result = (unsigned int)v10; v2[2] = (unsigned int)v10 + 14 * (_DWORD)a2; v2[1] = result + 14 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (006ADB70) -------------------------------------------------------- unsigned int __thiscall sub_6ADB70(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 14; if ( 306783378 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 14; if ( v3 > result ) { if ( 306783378 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_6ADA60(this, v5); } return result; } //----- (006ADBF0) -------------------------------------------------------- unsigned int __thiscall sub_6ADBF0(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // ecx unsigned int result; // eax v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_6ADB70(v2, 1); result = v2[1]; if ( result ) { *(_DWORD *)result = *(_DWORD *)a2; *(_DWORD *)(result + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(result + 8) = *(_DWORD *)(a2 + 8); *(_WORD *)(result + 12) = *(_WORD *)(a2 + 12); } } else { v4 = (signed int)(a2 - *v2 + ((unsigned __int64)(-1840700269i64 * (signed int)(a2 - *v2)) >> 32)) >> 3; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_6ADB70(v2, 1); v6 = *v2 + 14 * v5; result = v2[1]; if ( result ) { *(_DWORD *)result = *(_DWORD *)v6; *(_DWORD *)(result + 4) = *(_DWORD *)(v6 + 4); *(_DWORD *)(result + 8) = *(_DWORD *)(v6 + 8); *(_WORD *)(result + 12) = *(_WORD *)(v6 + 12); v2[1] += 14; return result; } } v2[1] += 14; return result; } //----- (006ADD80) -------------------------------------------------------- char __thiscall sub_6ADD80(_DWORD *this, char *a2, float a3) { _DWORD *v3; // ebx _DWORD *v4; // esi float *v5; // eax int v6; // esi v3 = this; v4 = sub_668B50(&unk_AD8D28); if ( !v4 ) return 0; v5 = (float *)operator new(0x23Cu); v6 = v5 ? sub_61ED50(v5, (int)v4, a2) : 0; if ( !v6 || !sub_6646E0(dword_AD8C90, (int)a2) ) return 0; sub_6AB700(v3, v6); sub_6AACF0(v6); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 60))(v6, LODWORD(a3)); return 1; } //----- (006AE000) -------------------------------------------------------- float *__thiscall sub_6AE000(_DWORD *this, char *Src, int a3) { _DWORD *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // eax float *v5; // esi int v6; // esi float *v7; // eax float *v8; // eax v3 = this; v4 = sub_6AAFB0(this, Src); if ( v4 ) { v6 = sub_85BD60(v4); v7 = (float *)operator new(0x228u); if ( v7 ) v8 = sub_6B52A0(v7, v6, 0, 0); else v8 = 0; v5 = v8; } else { v5 = 0; } (*(void (__thiscall **)(float *, int))(*(_DWORD *)v5 + 96))(v5, a3); sub_6AB700(v3, (char)v5); return v5; } //----- (006AE0A0) -------------------------------------------------------- float *__thiscall sub_6AE0A0(_DWORD *this, char *Src, char a3, int a4, int a5, char a6, int a7, int a8, int a9, char a10) { void (__thiscall ***v10)(_DWORD, signed int); // eax int v11; // esi int v12; // eax float *v13; // eax float *v14; // edi _DWORD *v16; // [esp+10h] [ebp-10h] v16 = this; v10 = sub_6AAFB0(this, Src); if ( !v10 ) return 0; v11 = 0; v12 = sub_85BD60(v10); if ( v12 ) { v11 = v12; InterlockedIncrement((volatile LONG *)(v12 + 4)); } v13 = (float *)operator new(0x20Cu); if ( v13 ) v14 = sub_6A83F0(v13, v11, 0, 0); else v14 = 0; if ( !v14 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); } return 0; } (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v14 + 28))(v14, &a3); if ( a10 ) (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v14 + 40))(v14, &a6); sub_6AB700(v16, (char)v14); if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); return v14; } //----- (006AE1D0) -------------------------------------------------------- float *__thiscall sub_6AE1D0(_DWORD *this, char *Src, int a3, char a4, int a5, int a6, int a7) { void (__thiscall ***v7)(_DWORD, signed int); // eax int v8; // edi int v9; // eax float *v10; // eax float *v11; // esi _DWORD *v13; // [esp+14h] [ebp-10h] v13 = this; v7 = sub_6AAFB0(this, Src); if ( !v7 ) return 0; v8 = 0; v9 = sub_85BD60(v7); if ( v9 ) { v8 = v9; InterlockedIncrement((volatile LONG *)(v9 + 4)); } v10 = (float *)operator new(0x21Cu); if ( v10 ) v11 = sub_6A6BB0(v10, v8, 0, 0); else v11 = 0; if ( !v11 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } return 0; } (*(void (__thiscall **)(float *, int))(*(_DWORD *)v11 + 96))(v11, a3); (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v11 + 40))(v11, &a4); (*(void (__thiscall **)(float *, int))(*(_DWORD *)v11 + 96))(v11, a3); sub_6AB700(v13, (char)v11); if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return v11; } //----- (006AE300) -------------------------------------------------------- char __thiscall sub_6AE300(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, float a7, float a8, int a9, int a10, char a11) { int v11; // edi void *v12; // eax int v13; // esi void (__thiscall ***v14)(_DWORD, signed int); // eax void *v15; // eax float *v16; // esi void (__thiscall *v17)(float *, int); // edx int *v18; // eax int *v19; // eax char v21; // [esp+50h] [ebp-94h] float v22[3]; // [esp+5Ch] [ebp-88h] char v23; // [esp+68h] [ebp-7Ch] int v24; // [esp+74h] [ebp-70h] int v25; // [esp+78h] [ebp-6Ch] int v26; // [esp+7Ch] [ebp-68h] int v27; // [esp+80h] [ebp-64h] int v28; // [esp+84h] [ebp-60h] int v29; // [esp+88h] [ebp-5Ch] int v30; // [esp+8Ch] [ebp-58h] int v31; // [esp+90h] [ebp-54h] int v32; // [esp+94h] [ebp-50h] int v33; // [esp+98h] [ebp-4Ch] _DWORD *v34; // [esp+9Ch] [ebp-48h] void *v35; // [esp+A0h] [ebp-44h] int v36; // [esp+A4h] [ebp-40h] int v37; // [esp+A8h] [ebp-3Ch] int v38; // [esp+ACh] [ebp-38h] char v39; // [esp+B0h] [ebp-34h] int v40; // [esp+E0h] [ebp-4h] v11 = a6; v34 = this; v33 = a3; v31 = a4; v30 = a6; v32 = a9; if ( !a5 || !a6 || 0.0 == a8 ) return 0; if ( !_strnicmp(Src, "MyWeapon", 8u) ) { v12 = (void *)sub_85BD60(*(void **)(a5 + 856)); if ( !v12 ) { if ( *(_BYTE *)(a5 + 2680) ) terminate(); return 0; } v13 = sub_85BD60(v12); v35 = (void *)v13; sub_85AB50((void **)v13, "MyWeapon"); sub_85D810((float *)&v39, -1.5707964); qmemcpy((void *)(v13 + 52), &v39, 0x24u); v11 = v30; } else { v14 = sub_6AAFB0(v34, Src); if ( !v14 ) { if ( *(_BYTE *)(a5 + 2680) ) terminate(); return 0; } v13 = sub_85BD60(v14); } if ( !v13 ) return 0; v15 = operator new(0x2E8u); v35 = v15; v40 = 0; v16 = v15 ? sub_6A6830((float *)v15, v13, 0, a5) : 0; v40 = -1; if ( !v16 ) return 0; (*(void (__thiscall **)(float *, signed int, int))(*(_DWORD *)v16 + 136))(v16, -1, v32); (*(void (__thiscall **)(float *, int))(*(_DWORD *)v16 + 120))(v16, v33); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 72))(v16, 1000.0); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 104))(v16, *(unsigned __int16 *)(v11 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 112))(v16, *(unsigned __int16 *)(a5 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 96))(v16, LODWORD(a8)); v17 = *(void (__thiscall **)(float *, int))(*(_DWORD *)v16 + 124); *((_DWORD *)v16 + 185) = a10; v17(v16, v31); (*(void (__thiscall **)(int, int *))(*(_DWORD *)a5 + 220))(a5, &v27); *((_DWORD *)v16 + 172) = v27; *((_DWORD *)v16 + 173) = v28; *((_DWORD *)v16 + 174) = v29; sub_4A3910((void *)a5, v22, v11); sub_4430B0(v22); (*(void (__thiscall **)(float *, float *))(*(_DWORD *)v16 + 40))(v16, v22); if ( a11 ) v18 = (int *)sub_64CF80((_DWORD *)a5, (float *)&v23); else v18 = (int *)sub_6AAB30((_DWORD *)a5, (float *)&v23); v36 = *v18; v37 = v18[1]; v38 = v18[2]; v38 = *((int *)sub_64CF20((_DWORD *)a5, (float *)&v23) + 2); (*(void (__thiscall **)(float *, int *))(*(_DWORD *)v16 + 28))(v16, &v36); (*(void (__thiscall **)(float *, int *))(*((_DWORD *)v16 + 133) + 40))(v16 + 133, &v36); v19 = (int *)sub_64CF20((_DWORD *)v11, (float *)&v21); v24 = *v19; v25 = v19[1]; v26 = v19[2]; (*(void (__thiscall **)(float *, _DWORD, int *, int *))(*((_DWORD *)v16 + 133) + 28))( v16 + 133, LODWORD(a7), &v36, &v24); sub_6AB700(v34, (char)v16); sub_6AACF0((int)v16); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 60))(v16, LODWORD(a7)); return 1; } //----- (006AE840) -------------------------------------------------------- char __thiscall sub_6AE840(_DWORD *this, char *Src, int a3, int a4, int a5, float a6, float a7, int a8, int a9, int a10, char a11) { _DWORD *v11; // edi void *v12; // eax int v13; // esi void (__thiscall ***v14)(_DWORD, signed int); // eax void *v15; // eax float *v16; // esi int v17; // eax int *v18; // eax int *v19; // eax char v21; // [esp+4Ch] [ebp-90h] float v22[3]; // [esp+58h] [ebp-84h] char v23; // [esp+64h] [ebp-78h] int v24; // [esp+70h] [ebp-6Ch] int v25; // [esp+74h] [ebp-68h] int v26; // [esp+78h] [ebp-64h] int v27; // [esp+7Ch] [ebp-60h] int v28; // [esp+80h] [ebp-5Ch] int v29; // [esp+84h] [ebp-58h] int v30; // [esp+88h] [ebp-54h] _DWORD *v31; // [esp+8Ch] [ebp-50h] int v32; // [esp+90h] [ebp-4Ch] void *v33; // [esp+94h] [ebp-48h] int v34; // [esp+98h] [ebp-44h] int v35; // [esp+9Ch] [ebp-40h] int v36; // [esp+A0h] [ebp-3Ch] int v37; // [esp+A4h] [ebp-38h] char v38; // [esp+A8h] [ebp-34h] int v39; // [esp+D8h] [ebp-4h] v11 = this; v32 = a3; v31 = this; v37 = a5; v30 = a9; if ( !a4 || !a5 || 0.0 == a7 ) return 0; if ( !_strnicmp(Src, "MyWeapon", 8u) ) { v12 = (void *)sub_85BD60(*(void **)(a4 + 856)); if ( v12 ) { v13 = sub_85BD60(v12); v33 = (void *)v13; sub_85AB50((void **)v13, "MyWeapon"); sub_85D810((float *)&v38, -1.5707964); qmemcpy((void *)(v13 + 52), &v38, 0x24u); v11 = v31; goto LABEL_11; } return 0; } v14 = sub_6AAFB0(v11, Src); if ( !v14 ) { if ( *(_BYTE *)(a4 + 2680) ) terminate(); return 0; } v13 = sub_85BD60(v14); LABEL_11: if ( !v13 ) return 0; v15 = operator new(0x2E8u); v33 = v15; v39 = 0; v16 = v15 ? sub_6A6830((float *)v15, v13, 0, a4) : 0; v39 = -1; if ( !v16 ) return 0; (*(void (__thiscall **)(float *, int, int))(*(_DWORD *)v16 + 136))(v16, a8, v30); if ( v32 && *(_BYTE *)(v32 + 4) != 45 ) (*(void (__thiscall **)(float *, int))(*(_DWORD *)v16 + 120))(v16, v32 + 4); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 72))(v16, 1000.0); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 104))(v16, *(unsigned __int16 *)(v37 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 112))(v16, *(unsigned __int16 *)(a4 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 96))(v16, LODWORD(a7)); *((_DWORD *)v16 + 185) = a10; (*(void (__thiscall **)(int, int *))(*(_DWORD *)a4 + 220))(a4, &v24); *((_DWORD *)v16 + 172) = v24; v17 = v37; *((_DWORD *)v16 + 173) = v25; *((_DWORD *)v16 + 174) = v26; sub_4A3910((void *)a4, v22, v17); sub_4430B0(v22); (*(void (__thiscall **)(float *, float *))(*(_DWORD *)v16 + 40))(v16, v22); if ( a11 ) v18 = (int *)sub_64CF80((_DWORD *)a4, (float *)&v23); else v18 = (int *)sub_6AAB30((_DWORD *)a4, (float *)&v23); v34 = *v18; v35 = v18[1]; v36 = v18[2]; v36 = *((int *)sub_64CF20((_DWORD *)a4, (float *)&v23) + 2); (*(void (__thiscall **)(float *, int *))(*(_DWORD *)v16 + 28))(v16, &v34); (*(void (__thiscall **)(float *, int *))(*((_DWORD *)v16 + 133) + 40))(v16 + 133, &v34); v19 = (int *)sub_64CF20((_DWORD *)v37, (float *)&v21); v27 = *v19; v28 = v19[1]; v29 = v19[2]; (*(void (__thiscall **)(float *, _DWORD, int *, int *))(*((_DWORD *)v16 + 133) + 28))( v16 + 133, LODWORD(a6), &v34, &v27); sub_6AB700(v11, (char)v16); sub_6AACF0((int)v16); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 60))(v16, LODWORD(a6)); return 1; } //----- (006AED40) -------------------------------------------------------- char __thiscall sub_6AED40(_DWORD *this, char *Src, int a3, int a4, int a5, float a6, float a7, int a8, int a9, char a10, int a11) { int v11; // edi void *v12; // eax int v13; // esi void (__thiscall ***v14)(_DWORD, signed int); // eax void *v15; // eax float *v16; // esi int *v17; // eax int *v18; // eax char v20; // [esp+4Ch] [ebp-90h] float v21[3]; // [esp+58h] [ebp-84h] char v22; // [esp+64h] [ebp-78h] int v23; // [esp+70h] [ebp-6Ch] int v24; // [esp+74h] [ebp-68h] int v25; // [esp+78h] [ebp-64h] int v26; // [esp+7Ch] [ebp-60h] int v27; // [esp+80h] [ebp-5Ch] int v28; // [esp+84h] [ebp-58h] int v29; // [esp+88h] [ebp-54h] int v30; // [esp+8Ch] [ebp-50h] int v31; // [esp+90h] [ebp-4Ch] _DWORD *v32; // [esp+94h] [ebp-48h] void *v33; // [esp+98h] [ebp-44h] int v34; // [esp+9Ch] [ebp-40h] int v35; // [esp+A0h] [ebp-3Ch] int v36; // [esp+A4h] [ebp-38h] char v37; // [esp+A8h] [ebp-34h] int v38; // [esp+D8h] [ebp-4h] v11 = a5; v32 = this; v31 = a3; v29 = a5; v30 = a8; if ( !a4 || !a5 || 0.0 == a7 ) return 0; if ( !_strnicmp(Src, "MyWeapon", 8u) ) { v12 = (void *)sub_85BD60(*(void **)(a4 + 856)); if ( v12 ) { v13 = sub_85BD60(v12); v33 = (void *)v13; sub_85AB50((void **)v13, "MyWeapon"); sub_85D810((float *)&v37, -1.5707964); qmemcpy((void *)(v13 + 52), &v37, 0x24u); v11 = v29; goto LABEL_10; } return 0; } v14 = sub_6AAFB0(v32, Src); if ( !v14 ) terminate(); v13 = sub_85BD60(v14); LABEL_10: if ( !v13 ) return 0; v15 = operator new(0x2E8u); v33 = v15; v38 = 0; v16 = v15 ? sub_6A6830((float *)v15, v13, 0, a4) : 0; v38 = -1; if ( !v16 ) return 0; (*(void (__thiscall **)(float *, signed int, int))(*(_DWORD *)v16 + 136))(v16, -1, v30); (*(void (__thiscall **)(float *, int))(*(_DWORD *)v16 + 120))(v16, v31); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 72))(v16, 1000.0); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 104))(v16, *(unsigned __int16 *)(v11 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 112))(v16, *(unsigned __int16 *)(a4 + 548)); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 96))(v16, LODWORD(a7)); *((_DWORD *)v16 + 185) = a9; sub_6A7690(v16, a11); (*(void (__thiscall **)(int, int *))(*(_DWORD *)a4 + 220))(a4, &v26); *((_DWORD *)v16 + 172) = v26; *((_DWORD *)v16 + 173) = v27; *((_DWORD *)v16 + 174) = v28; sub_4A3910((void *)a4, v21, v11); sub_4430B0(v21); (*(void (__thiscall **)(float *, float *))(*(_DWORD *)v16 + 40))(v16, v21); if ( a10 ) v17 = (int *)sub_64CF80((_DWORD *)a4, (float *)&v22); else v17 = (int *)sub_6AAB30((_DWORD *)a4, (float *)&v22); v34 = *v17; v35 = v17[1]; v36 = v17[2]; v36 = *((int *)sub_64CF20((_DWORD *)a4, (float *)&v22) + 2); (*(void (__thiscall **)(float *, int *))(*(_DWORD *)v16 + 28))(v16, &v34); (*(void (__thiscall **)(float *, int *))(*((_DWORD *)v16 + 133) + 40))(v16 + 133, &v34); v18 = (int *)sub_64CF20((_DWORD *)v11, (float *)&v20); v23 = *v18; v24 = v18[1]; v25 = v18[2]; (*(void (__thiscall **)(float *, _DWORD, int *, int *))(*((_DWORD *)v16 + 133) + 28))( v16 + 133, LODWORD(a6), &v34, &v23); sub_6AB700(v32, (char)v16); sub_6AACF0((int)v16); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v16 + 60))(v16, LODWORD(a6)); return 1; } //----- (006AF040) -------------------------------------------------------- float *__thiscall sub_6AF040(_DWORD *this, char *Src, int a3, int a4, int a5, int a6) { _DWORD *v6; // edi void (__thiscall ***v8)(_DWORD, signed int); // eax float *v9; // esi int v10; // esi float *v11; // eax float *v12; // eax v6 = this; if ( !a6 ) return 0; v8 = sub_6AAFB0(this, Src); if ( v8 ) { v10 = sub_85BD60(v8); v11 = (float *)operator new(0x238u); if ( v11 ) v12 = sub_6B5440(v11, v10, 0, 0); else v12 = 0; v9 = v12; } else { v9 = 0; } (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v9 + 96))(v9, *(unsigned __int16 *)(a6 + 548)); *((_DWORD *)v9 + 138) = a3; *((_DWORD *)v9 + 139) = a4; *((_DWORD *)v9 + 140) = a5; sub_6B5470(v9); sub_6AB700(v6, (char)v9); return v9; } //----- (006AF370) -------------------------------------------------------- char __thiscall sub_6AF370(_DWORD *this, char *Src, char a3, int a4, int a5, char a6, int a7, int a8, float a9, float a10) { _DWORD *v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // eax int v13; // esi float *v14; // eax float *v15; // esi int v16; // eax float Srca; // [esp+2Ch] [ebp+8h] v10 = this; v11 = sub_6AAFB0(this, Src); if ( !v11 ) return 0; v13 = sub_85BD60(v11); v14 = (float *)operator new(0x20Cu); v15 = v14 ? sub_6A83F0(v14, v13, 0, 0) : 0; if ( !v15 ) return 0; (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v15 + 28))(v15, &a3); (*(void (__thiscall **)(float *, char *))(*(_DWORD *)v15 + 40))(v15, &a6); v16 = *((_DWORD *)v15 + 28); if ( v16 ) { Srca = fabs(a10); *(float *)(v16 + 100) = Srca; } sub_6AB700(v10, (char)v15); sub_6AACF0((int)v15); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v15 + 60))(v15, LODWORD(a9)); return 1; } //----- (006AF460) -------------------------------------------------------- char __thiscall sub_6AF460(_DWORD *this, int a2, int a3, int a4, float a5, char a6, int a7) { float *v7; // eax float *v8; // esi int v10; // edi _DWORD *v11; // [esp+20h] [ebp-10h] v11 = this; v7 = (float *)operator new(0x21Cu); if ( v7 ) v8 = sub_6A6BB0(v7, a3, 0, 0); else v8 = 0; if ( !v8 ) return 0; v10 = *((_DWORD *)v8 + 132); if ( v10 != a4 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v8 + 132) = a4; if ( a4 ) InterlockedIncrement((volatile LONG *)(a4 + 4)); } *((_BYTE *)v8 + 140) = a6; v8[133] = 0.0; *(_DWORD *)a2 = v8; (*(void (__thiscall **)(float *, int))(*(_DWORD *)v8 + 96))(v8, a7); sub_6AB700(v11, (char)v8); sub_6AACF0((int)v8); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v8 + 60))(v8, LODWORD(a5)); return 1; } //----- (006AF580) -------------------------------------------------------- char __thiscall sub_6AF580(_DWORD *this, int a2, char *Src, int a4, float a5, float a6) { float *v6; // eax int v8; // esi float *v9; // eax float *v10; // esi int v11; // edi _DWORD *v12; // [esp+18h] [ebp-10h] float Srca; // [esp+34h] [ebp+Ch] v12 = this; v6 = (float *)sub_6AAFB0(this, Src); if ( !v6 ) return 0; Srca = fabs(a5); v6[25] = Srca; v8 = sub_85BD60(v6); v9 = (float *)operator new(0x21Cu); v10 = v9 ? sub_6A6BB0(v9, v8, 0, 0) : 0; if ( !v10 ) return 0; v11 = *((_DWORD *)v10 + 132); if ( v11 != a4 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); *((_DWORD *)v10 + 132) = a4; if ( a4 ) InterlockedIncrement((volatile LONG *)(a4 + 4)); } v10[133] = 0.0; *((_BYTE *)v10 + 140) = 1; *(_DWORD *)a2 = v10; sub_6AB700(v12, (char)v10); sub_6AACF0((int)v10); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v10 + 60))(v10, LODWORD(a6)); return 1; } //----- (006AF6B0) -------------------------------------------------------- int __stdcall sub_6AF6B0(int a1, _DWORD *a2) { int result; // eax result = 0; switch ( a1 ) { case 0: case 1: result = a2[175]; break; case 2: if ( a2 != (_DWORD *)-776 ) result = a2[207]; break; case 3: if ( a2 != (_DWORD *)-776 ) result = a2[203]; break; case 6: if ( a2 != (_DWORD *)-776 ) result = a2[209]; break; case 7: if ( a2 != (_DWORD *)-776 ) result = a2[210]; break; default: return result; } return result; } //----- (006AF730) -------------------------------------------------------- float *__thiscall sub_6AF730(_DWORD *this, char *Src, int a3, int a4, float a5, char a6) { void (__thiscall ***v6)(_DWORD, signed int); // eax int v7; // ebx int v8; // eax float *v9; // eax float *v10; // esi int v12; // eax _DWORD *v13; // ecx _DWORD *v14; // [esp+1Ch] [ebp-10h] v14 = this; v6 = sub_6AAFB0(this, Src); if ( !v6 ) return 0; v7 = 0; v8 = sub_85BD60(v6); if ( v8 ) { v7 = v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); } v9 = (float *)operator new(0x21Cu); if ( v9 ) v10 = sub_6A6BB0(v9, v7, 0, 0); else v10 = 0; if ( !v10 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } return 0; } v12 = sub_6AF6B0(a4, (_DWORD *)a3); if ( a3 ) v13 = (_DWORD *)(a3 + 60); else v13 = 0; sub_6AD3E0(v10, v12, v13); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v10 + 96))(v10, *(unsigned __int16 *)(a3 + 548)); sub_6AB700(v14, (char)v10); if ( a6 ) { (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v10 + 60))(v10, LODWORD(a5)); sub_6AACF0((int)v10); } if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); return v10; } //----- (006AF890) -------------------------------------------------------- char __thiscall sub_6AF890(_DWORD *this, int a2, char *Src, int a4, float a5, char a6) { _DWORD *v6; // esi void (__thiscall ***v7)(_DWORD, signed int); // eax int v9; // eax v6 = this; v7 = sub_6AAFB0(this, Src); if ( !v7 ) return 0; v9 = sub_85BD60(v7); return sub_6AF460(v6, a2, v9, a4, a5, a6, 0xFFFF); } //----- (006AF8E0) -------------------------------------------------------- char __thiscall sub_6AF8E0(_DWORD *this, int a2, char *Src, int a4, int a5, float a6, char a7, char a8, char a9, char a10) { void (__thiscall ***v10)(_DWORD, signed int); // eax int v12; // esi float *v13; // eax float *v14; // esi int v15; // eax _DWORD *v16; // ecx _DWORD *v17; // [esp+18h] [ebp-10h] v17 = this; v10 = sub_6AAFB0(this, Src); if ( !v10 ) return 0; v12 = sub_85BD60(v10); v13 = (float *)operator new(0x21Cu); v14 = v13 ? sub_6A6BB0(v13, v12, 0, 0) : 0; if ( !v14 ) return 0; v15 = sub_6AF6B0(a5, (_DWORD *)a4); if ( !v15 ) v15 = *(_DWORD *)(a4 + 700); if ( a4 ) v16 = (_DWORD *)(a4 + 60); else v16 = 0; sub_6AD3E0(v14, v15, v16); *((_BYTE *)v14 + 140) = a7; if ( a9 ) sub_6A6DF0(v14, 1); if ( !strcmp(Src, "Sta_TimeAttackLast") ) sub_6A6DF0(v14, 1); *(_DWORD *)a2 = v14; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v14 + 96))(v14, *(unsigned __int16 *)(a4 + 548)); if ( a8 ) { *((_BYTE *)v14 + 448) = 1; *((_BYTE *)v14 + 536) = 1; } sub_6AB700(v17, (char)v14); sub_6AACF0((int)v14); if ( a10 ) (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v14 + 60))(v14, LODWORD(a6)); return 1; } //----- (006AFA60) -------------------------------------------------------- char __thiscall sub_6AFA60(_DWORD *this, int a2, char *Src, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // ebx void (__thiscall ***v9)(_DWORD, signed int); // eax int v11; // esi float *v12; // eax float *v13; // esi int v14; // eax _DWORD *v15; // ecx int v16; // eax int v17; // ebx _DWORD *v18; // [esp+10h] [ebp-10h] v8 = this; v18 = this; v9 = sub_6AAFB0(this, Src); if ( !v9 ) return 0; v11 = sub_85BD60(v9); v12 = (float *)operator new(0x21Cu); v13 = v12 ? sub_6A6BB0(v12, v11, 0, 0) : 0; if ( !v13 ) return 0; v14 = sub_6AF6B0(a5, (_DWORD *)a4); if ( !v14 ) v14 = *(_DWORD *)(a4 + 700); if ( a4 ) v15 = (_DWORD *)(a4 + 60); else v15 = 0; sub_6AD3E0(v13, v14, v15); *((_BYTE *)v13 + 140) = 1; *(_DWORD *)a2 = v13; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v13 + 96))(v13, *(unsigned __int16 *)(a4 + 548)); if ( (*(int (__thiscall **)(float *))(*(_DWORD *)v13 + 16))(v13) ) { v16 = sub_4DBF00(a8); v17 = v16; if ( v16 ) { if ( sub_4DCF40((const char *)(v16 + 212)) ) *((_WORD *)v13 + 229) = *(_WORD *)(v17 + 34); } v8 = v18; } *((_WORD *)v13 + 228) = *(_WORD *)(a4 + 548); *((_DWORD *)v13 + 113) = 1; sub_6AB700(v8, (char)v13); sub_6AACF0((int)v13); return 1; } //----- (006AFEC0) -------------------------------------------------------- char __thiscall sub_6AFEC0(_DWORD *this, unsigned int a2) { _DWORD *v2; // ebx int v3; // esi float v4; // ST18_4 _DWORD *v5; // eax v2 = this; if ( a2 > 0xE ) return 0; v3 = this[a2]; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); if ( !v3 ) return 0; v4 = (double)((unsigned int)xRight >> 1); *(float *)(v3 + 88) = v4; *(float *)(v3 + 92) = -500.0; *(float *)(v3 + 96) = 0.0; sub_8FA390(&unk_BA6B10, flt_ACCFCC); sub_8FA270(&unk_BA6B10, flt_ACCFCC, v3); v5 = &v2[7 * a2 + 15]; if ( v2[7 * a2 + 20] >= 0x10u ) v5 = (_DWORD *)*v5; sub_6BA680(&dword_AB6520, (int)v5); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return 1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006AFFF0) -------------------------------------------------------- _DWORD *__thiscall sub_6AFFF0(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi int v3; // esi v1 = this; `eh vector constructor iterator'( this, 4u, 15, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v2 = 0; `eh vector constructor iterator'(v1 + 15, 0x1Cu, 15, sub_401C00, sub_636A10); do { v3 = v1[v2]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[v2] = 0; } ++v2; } while ( v2 < 0xF ); return v1; } //----- (006B00A0) -------------------------------------------------------- void __thiscall sub_6B00A0(char *this) { void *v1; // esi v1 = this; `eh vector destructor iterator'(this + 60, 0x1Cu, 15, sub_636A10); `eh vector destructor iterator'(v1, 4u, 15, sub_410C00); } //----- (006B0110) -------------------------------------------------------- char __thiscall sub_6B0110(void ***this) { void ***v1; // edi unsigned int v2; // eax const char *v3; // esi int v4; // eax char v5; // cl void **v6; // edi void **v7; // esi unsigned int v8; // esi void **v9; // edi void ***v11; // [esp+10h] [ebp-364h] unsigned int i; // [esp+14h] [ebp-360h] void ***v13; // [esp+18h] [ebp-35Ch] void *v14; // [esp+1Ch] [ebp-358h] int v15; // [esp+2Ch] [ebp-348h] int v16[2]; // [esp+30h] [ebp-344h] char v17; // [esp+38h] [ebp-33Ch] int v18; // [esp+48h] [ebp-32Ch] int v19; // [esp+4Ch] [ebp-328h] char v20; // [esp+54h] [ebp-320h] int v21; // [esp+64h] [ebp-310h] int v22; // [esp+68h] [ebp-30Ch] char v23; // [esp+70h] [ebp-304h] int v24; // [esp+80h] [ebp-2F4h] int v25; // [esp+84h] [ebp-2F0h] char v26; // [esp+8Ch] [ebp-2E8h] int v27; // [esp+9Ch] [ebp-2D8h] int v28; // [esp+A0h] [ebp-2D4h] char v29; // [esp+A8h] [ebp-2CCh] int v30; // [esp+B8h] [ebp-2BCh] int v31; // [esp+BCh] [ebp-2B8h] char v32; // [esp+C4h] [ebp-2B0h] int v33; // [esp+D4h] [ebp-2A0h] int v34; // [esp+D8h] [ebp-29Ch] char v35; // [esp+E0h] [ebp-294h] int v36; // [esp+F0h] [ebp-284h] int v37; // [esp+F4h] [ebp-280h] char v38; // [esp+FCh] [ebp-278h] int v39; // [esp+10Ch] [ebp-268h] int v40; // [esp+110h] [ebp-264h] char v41; // [esp+118h] [ebp-25Ch] int v42; // [esp+128h] [ebp-24Ch] int v43; // [esp+12Ch] [ebp-248h] char v44; // [esp+134h] [ebp-240h] int v45; // [esp+144h] [ebp-230h] int v46; // [esp+148h] [ebp-22Ch] char v47; // [esp+150h] [ebp-224h] int v48; // [esp+160h] [ebp-214h] int v49; // [esp+164h] [ebp-210h] char v50; // [esp+16Ch] [ebp-208h] int v51; // [esp+17Ch] [ebp-1F8h] int v52; // [esp+180h] [ebp-1F4h] char v53; // [esp+188h] [ebp-1ECh] int v54; // [esp+198h] [ebp-1DCh] int v55; // [esp+19Ch] [ebp-1D8h] char v56; // [esp+1A4h] [ebp-1D0h] int v57; // [esp+1B4h] [ebp-1C0h] int v58; // [esp+1B8h] [ebp-1BCh] int v59; // [esp+1C0h] [ebp-1B4h] int v60; // [esp+1D0h] [ebp-1A4h] int v61; // [esp+1D4h] [ebp-1A0h] char v62; // [esp+1DCh] [ebp-198h] int v63; // [esp+1ECh] [ebp-188h] int v64; // [esp+1F0h] [ebp-184h] char v65; // [esp+1F8h] [ebp-17Ch] int v66; // [esp+208h] [ebp-16Ch] int v67; // [esp+20Ch] [ebp-168h] char v68; // [esp+214h] [ebp-160h] int v69; // [esp+224h] [ebp-150h] int v70; // [esp+228h] [ebp-14Ch] char v71; // [esp+230h] [ebp-144h] int v72; // [esp+240h] [ebp-134h] int v73; // [esp+244h] [ebp-130h] char v74; // [esp+24Ch] [ebp-128h] int v75; // [esp+25Ch] [ebp-118h] int v76; // [esp+260h] [ebp-114h] char v77; // [esp+268h] [ebp-10Ch] int v78; // [esp+278h] [ebp-FCh] int v79; // [esp+27Ch] [ebp-F8h] char v80; // [esp+284h] [ebp-F0h] int v81; // [esp+294h] [ebp-E0h] int v82; // [esp+298h] [ebp-DCh] char v83; // [esp+2A0h] [ebp-D4h] int v84; // [esp+2B0h] [ebp-C4h] int v85; // [esp+2B4h] [ebp-C0h] char v86; // [esp+2BCh] [ebp-B8h] int v87; // [esp+2CCh] [ebp-A8h] int v88; // [esp+2D0h] [ebp-A4h] char v89; // [esp+2D8h] [ebp-9Ch] int v90; // [esp+2E8h] [ebp-8Ch] int v91; // [esp+2ECh] [ebp-88h] char v92; // [esp+2F4h] [ebp-80h] int v93; // [esp+304h] [ebp-70h] int v94; // [esp+308h] [ebp-6Ch] char v95; // [esp+310h] [ebp-64h] int v96; // [esp+320h] [ebp-54h] int v97; // [esp+324h] [ebp-50h] char v98; // [esp+32Ch] [ebp-48h] int v99; // [esp+33Ch] [ebp-38h] int v100; // [esp+340h] [ebp-34h] char v101; // [esp+348h] [ebp-2Ch] int v102; // [esp+358h] [ebp-1Ch] int v103; // [esp+35Ch] [ebp-18h] int v104; // [esp+370h] [ebp-4h] v1 = this; v11 = this; v61 = 15; v60 = 0; LOBYTE(v59) = 0; sub_4018E0(&v59, "GuildTWin.nif", 0xDu); v104 = 0; v64 = 15; v63 = 0; v62 = 0; sub_4018E0(&v62, "GuildTLose.nif", 0xEu); LOBYTE(v104) = 1; v67 = 15; v66 = 0; v65 = 0; sub_4018E0(&v65, "GuildTDraw.nif", 0xEu); LOBYTE(v104) = 2; v70 = 15; v69 = 0; v68 = 0; sub_4018E0(&v68, "Start.nif", 9u); LOBYTE(v104) = 3; v73 = 15; v72 = 0; v71 = 0; sub_4018E0(&v71, "StaCount8.nif", 0xDu); LOBYTE(v104) = 4; v76 = 15; v75 = 0; v74 = 0; sub_4018E0(&v74, "KQuestSucc.nif", 0xEu); LOBYTE(v104) = 5; v79 = 15; v78 = 0; v77 = 0; sub_4018E0(&v77, "KQuestFail.nif", 0xEu); LOBYTE(v104) = 6; v82 = 15; v81 = 0; v80 = 0; sub_4018E0(&v80, "Start_Olympic.nif", 0x11u); LOBYTE(v104) = 7; v85 = 15; v84 = 0; v83 = 0; sub_4018E0(&v83, "Goal_Olympic.nif", 0x10u); LOBYTE(v104) = 8; v88 = 15; v87 = 0; v86 = 0; sub_4018E0(&v86, "Win_Soccer.nif", 0xEu); LOBYTE(v104) = 9; v91 = 15; v90 = 0; v89 = 0; sub_4018E0(&v89, "Lose_Soccer.nif", 0xFu); LOBYTE(v104) = 10; v94 = 15; v93 = 0; v92 = 0; sub_4018E0(&v92, "Draw_Soccer.nif", 0xFu); LOBYTE(v104) = 11; v97 = 15; v96 = 0; v95 = 0; sub_4018E0(&v95, "Start_Soccer.nif", 0x10u); LOBYTE(v104) = 12; v100 = 15; v99 = 0; v98 = 0; sub_4018E0(&v98, "Goal_Soccer.nif", 0xFu); LOBYTE(v104) = 13; v103 = 15; v102 = 0; v101 = 0; sub_4018E0(&v101, "Start2.nif", 0xAu); v104 = 14; v16[0] = 15; v15 = 0; LOBYTE(v14) = 0; sub_4018E0(&v14, "KQSpringWin", 0xBu); LOBYTE(v104) = 15; v19 = 15; v18 = 0; v17 = 0; sub_4018E0(&v17, "KQSpringLose", 0xCu); LOBYTE(v104) = 16; v22 = 15; v21 = 0; v20 = 0; sub_4018E0(&v20, "KQSpringDraw", 0xCu); LOBYTE(v104) = 17; v25 = 15; v24 = 0; v23 = 0; sub_4018E0(&v23, "Start", 5u); LOBYTE(v104) = 18; v28 = 15; v27 = 0; v26 = 0; sub_4018E0(&v26, "StaCount8", 9u); LOBYTE(v104) = 19; v31 = 15; v30 = 0; v29 = 0; sub_4018E0(&v29, "KDSUCCESS", 9u); LOBYTE(v104) = 20; v34 = 15; v33 = 0; v32 = 0; sub_4018E0(&v32, "KDFAIL", 6u); LOBYTE(v104) = 21; v37 = 15; v36 = 0; v35 = 0; sub_4018E0(&v35, "Start", 5u); LOBYTE(v104) = 22; v40 = 15; v39 = 0; v38 = 0; sub_4018E0(&v38, "DiceFinalResult", 0xFu); LOBYTE(v104) = 23; v43 = 15; v42 = 0; v41 = 0; sub_4018E0(&v41, "KQSpringWin", 0xBu); LOBYTE(v104) = 24; v46 = 15; v45 = 0; v44 = 0; sub_4018E0(&v44, "KQSpringLose", 0xCu); LOBYTE(v104) = 25; v49 = 15; v48 = 0; v47 = 0; sub_4018E0(&v47, "KQSpringDraw", 0xCu); LOBYTE(v104) = 26; v52 = 15; v51 = 0; v50 = 0; sub_4018E0(&v50, "KDSoccer_whistle", 0x10u); LOBYTE(v104) = 27; v55 = 15; v54 = 0; v53 = 0; sub_4018E0(&v53, "DiceFinalResult", 0xFu); LOBYTE(v104) = 28; v58 = 15; v57 = 0; v56 = 0; sub_4018E0(&v56, "Start2", 6u); v2 = 0; LOBYTE(v104) = 29; v13 = v1; for ( i = 0; ; v2 = i ) { if ( *(unsigned int *)((char *)&v61 + v2) < 0x10 ) v3 = (char *)&v59 + v2; else v3 = *(const char **)((char *)&v59 + v2); if ( !byte_ACAD5C ) sub_420410(); v4 = 0; do { v5 = byte_ACA838[v4]; name[v4++] = v5; } while ( v5 ); strcat(name, v3); v6 = sub_8D03E0(name, 0); v7 = *v13; if ( *v13 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)v7 + 1) && v7 ) (*(void (__thiscall **)(void **, signed int))*v7)(v7, 1); *v13 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } v8 = i; v9 = (unsigned int)v16[i / 4] < 0x10 ? (void **)((char *)&v14 + i) : *(void **)((char *)&v14 + i); sub_4018E0(&v11[i / 4 + 15], v9, strlen((const char *)v9)); ++v13; i += 28; if ( (signed int)(v8 + 28) >= 420 ) break; } LOBYTE(v104) = 14; `eh vector destructor iterator'(&v14, 0x1Cu, 15, sub_636A10); v104 = -1; `eh vector destructor iterator'(&v59, 0x1Cu, 15, sub_636A10); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; // 6B0110: using guessed type int var_344[2]; //----- (006B0850) -------------------------------------------------------- bool __thiscall sub_6B0850(void *this, int a2) { return (*(unsigned __int8 (**)(void))(*(_DWORD *)this + 92))() != 0; } //----- (006B0860) -------------------------------------------------------- bool __thiscall sub_6B0860(_DWORD *this) { return (*(unsigned __int8 (__thiscall **)(_DWORD *))(this[131] + 4))(this + 131) == 0; } //----- (006B0880) -------------------------------------------------------- int __userpurge sub_6B0880@(_DWORD *a1@, int a2@, int a3@, int a4@, float a5) { int v5; // ST04_4 _DWORD *v6; // edi char *v7; // eax char *v8; // ebx int *v9; // eax float v10; // edx int v11; // eax int result; // eax int *v13; // eax void (__thiscall *v14)(_DWORD *, float *); // edx float v15; // [esp+10h] [ebp-24h] float v16; // [esp+14h] [ebp-20h] float v17; // [esp+18h] [ebp-1Ch] float v18; // [esp+1Ch] [ebp-18h] float v19; // [esp+20h] [ebp-14h] float v20; // [esp+24h] [ebp-10h] float v21; // [esp+28h] [ebp-Ch] float v22; // [esp+2Ch] [ebp-8h] float v23; // [esp+30h] [ebp-4h] v5 = a3; v6 = a1; sub_6A7C90(a5); (*(void (__thiscall **)(_DWORD *, _DWORD, int, int, int, _DWORD, _DWORD, _DWORD, float, float, float))(v6[131] + 36))( v6 + 131, LODWORD(a5), v5, a4, a2, LODWORD(v15), LODWORD(v16), LODWORD(v17), COERCE_FLOAT(LODWORD(v18)), COERCE_FLOAT(LODWORD(v19)), COERCE_FLOAT(LODWORD(v20))); v7 = sub_664AB0(dword_AD8C90, *((_WORD *)dword_AD8EBC + 274)); v8 = v7; if ( !v7 || !sub_6510B0((int)v7) || v8[2140] ) return (*(int (__thiscall **)(_DWORD *))(v6[131] + 32))(v6 + 131); v9 = (int *)sub_64CF20(v8, &v15); v18 = *(float *)v9; v19 = *((float *)v9 + 1); v10 = *((float *)v9 + 2); v11 = v6[131]; v20 = v10; result = (*(int (__thiscall **)(_DWORD *, float *))(v11 + 16))(v6 + 131, &v18); if ( v6[21] ) { v13 = (int *)(*(int (__thiscall **)(_DWORD *, float))(v6[131] + 56))(v6 + 131, COERCE_FLOAT(LODWORD(v21))); v21 = *(float *)v13; v22 = *((float *)v13 + 1); v14 = *(void (__thiscall **)(_DWORD *, float *))(*v6 + 28); v23 = *((float *)v13 + 2); v14(v6, &v21); v15 = v21 - v18; v16 = v22 - v19; v17 = v23 - v20; if ( sub_4430B0(&v15) < 5.0 ) (*(void (__thiscall **)(_DWORD *))(v6[131] + 32))(v6 + 131); result = (*(int (__thiscall **)(_DWORD *, float *))(*v6 + 44))(v6, &v15); } return result; } // 6B0880: could not find valid save-restore pair for ebx // 6B0880: could not find valid save-restore pair for edi // 6B0880: could not find valid save-restore pair for esi //----- (006B09D0) -------------------------------------------------------- int __thiscall sub_6B09D0(void *this, float a2) { return sub_6A3CF0((int)this, a2); } //----- (006B09F0) -------------------------------------------------------- void *sub_6B09F0() { return &unk_B912AC; } //----- (006B0A00) -------------------------------------------------------- _DWORD *__thiscall sub_6B0A00(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 2; *v2 = &ExpEffect::`vftable'; v2[2] = &ExpEffect::`vftable'; sub_8CFA70(this + 129); sub_6A7FF0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F7348: using guessed type void *ExpEffect::`vftable'; // 9F735C: using guessed type void *ExpEffect::`vftable'; // ABA360: using guessed type int dword_ABA360; //----- (006B0A90) -------------------------------------------------------- float *__thiscall sub_6B0A90(float *this, int a2) { float *v2; // esi int v3; // edi v2 = this; *this = 0.0; sub_8D06C0(this + 1); sub_8D4790((_DWORD *)v2 + 7); v3 = *(_DWORD *)v2; if ( *(_DWORD *)v2 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)v2 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } *((_WORD *)v2 + 32) = 0; *((_BYTE *)v2 + 66) = 0; return v2; } //----- (006B0B40) -------------------------------------------------------- LONG __thiscall sub_6B0B40(float *this, _DWORD *a2) { float *v2; // esi v2 = this; (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*a2 + 116))(a2, *(_DWORD *)this, 0); sub_8D4A70((_DWORD *)v2 + 7, *(_DWORD **)v2); sub_8D4750((_DWORD *)v2 + 7, flt_ACCFCC); v2[4] = v2[10]; sub_8D06E0(v2 + 1, flt_ACCFCC, 1); *((_BYTE *)v2 + 64) = 1; sub_85C4D0(a2); return sub_85C6F0(a2); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B0BB0) -------------------------------------------------------- void __thiscall sub_6B0BB0(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // edi volatile LONG *v3; // esi v2 = this; if ( a2 && *this ) { (*(void (__stdcall **)(volatile LONG **, _DWORD))(*a2 + 120))(&a2, *this); if ( a2 ) { v3 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v3 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } } *((_BYTE *)v2 + 64) = 0; } } //----- (006B0C00) -------------------------------------------------------- void __thiscall sub_6B0C00(_BYTE *this, float a2) { _BYTE *v2; // esi int v3; // eax int v4; // ecx int v5; // eax v2 = this; if ( this[64] ) { if ( this[65] || this[66] ) { if ( this[66] == 1 ) { sub_8D0730((int)(this + 4), a2); if ( v5 == 1 ) { LABEL_10: v2[64] = 0; return; } } } else { sub_8D0730((int)(this + 4), a2); if ( v3 == 1 && *(_DWORD *)v2 ) { v4 = *(_DWORD *)(*(_DWORD *)v2 + 32); if ( v4 ) { (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v4 + 120))(&a2, *(_DWORD *)v2); sub_410C00(&a2); v2[64] = 0; return; } goto LABEL_10; } } } } //----- (006B0CB0) -------------------------------------------------------- char __stdcall sub_6B0CB0(int a1) { return 1; } //----- (006B0CC0) -------------------------------------------------------- char __thiscall sub_6B0CC0(__int16 *this, int a2) { __int16 *v2; // esi char *v3; // eax v2 = this; v3 = sub_664AB0(dword_AD8C90, this[262]); if ( v3 ) LOBYTE(v3) = sub_64D600((_DWORD *)v2 + 142, v3, (_DWORD *)1); return (char)v3; } //----- (006B0D10) -------------------------------------------------------- int __stdcall sub_6B0D10(float a1) { return sub_6A7C90(a1); } //----- (006B0D30) -------------------------------------------------------- int __thiscall sub_6B0D30(void *this, float a2) { return sub_6A3CF0((int)this, a2); } //----- (006B0D50) -------------------------------------------------------- int __thiscall sub_6B0D50(float *this, int *a2) { float *v2; // edi void *v3; // ecx int v4; // ebx int v5; // eax char v6; // al int result; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 21); if ( v3 ) { v4 = *a2; v5 = sub_85BD60(v3); (*(void (__thiscall **)(int *, int))(v4 + 12))(a2, v5); } a2[26] = *((int *)v2 + 26); v6 = *((_BYTE *)v2 + 120); *((_BYTE *)a2 + 120) = v6; if ( v6 ) sub_6A7910(a2); for ( result = (*(int (__thiscall **)(int *))(*a2 + 4))(a2); result; result = *(_DWORD *)(result + 4) ) { if ( (_UNKNOWN *)result == &unk_B912B4 ) break; } return result; } //----- (006B0E70) -------------------------------------------------------- float *__thiscall sub_6B0E70(void *this) { void *v1; // ebx float *v2; // eax float *v3; // esi v1 = this; v2 = (float *)operator new(0x254u); v3 = v2; if ( v2 ) { sub_6A83F0(v2, 0, 0, 0); *(_DWORD *)v3 = &StretchEffect::`vftable'; *((_DWORD *)v3 + 2) = &StretchEffect::`vftable'; v3[145] = 0.0; v3[143] = 0.0; v3[144] = 0.0; *((_DWORD *)v3 + 142) = &NiTList::`vftable'; } else { v3 = 0; } (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v1 + 88))(v1, v3); return v3; } // 9AD4BC: using guessed type void *NiTList::`vftable'; // 9F73D0: using guessed type void *StretchEffect::`vftable'; // 9F73E4: using guessed type void *StretchEffect::`vftable'; //----- (006B0F10) -------------------------------------------------------- void *sub_6B0F10() { return &unk_B912B4; } //----- (006B0F20) -------------------------------------------------------- char *__thiscall sub_6B0F20(_BYTE *this, char *a2) { char *result; // eax int v3; // edx char v4; // cl result = a2; if ( a2 ) { v3 = this + 528 - a2; do { v4 = *result; result[v3] = *result; ++result; } while ( v4 ); } else { this[528] = (_BYTE)a2; } return result; } //----- (006B0F50) -------------------------------------------------------- void __thiscall sub_6B0F50(_BYTE *this, int a2) { if ( !a2 ) this[528] = 0; } //----- (006B0F70) -------------------------------------------------------- __int16 __thiscall sub_6B0F70(_WORD *this) { return this[263]; } //----- (006B0F80) -------------------------------------------------------- __int16 __thiscall sub_6B0F80(_WORD *this) { return this[262]; } //----- (006B0F90) -------------------------------------------------------- _DWORD *__thiscall sub_6B0F90(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 2; *v2 = &StretchEffect::`vftable'; v2[2] = &StretchEffect::`vftable'; sub_438C80(this + 140); sub_6A7FF0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F73D0: using guessed type void *StretchEffect::`vftable'; // 9F73E4: using guessed type void *StretchEffect::`vftable'; // ABA360: using guessed type int dword_ABA360; //----- (006B1020) -------------------------------------------------------- float *__thiscall sub_6B1020(float *this, int a2, char a3) { float *v3; // esi v3 = this; sub_6A83F0(this, a2, a3, 0); *(_DWORD *)v3 = &WeddingEffect::`vftable'; *((_DWORD *)v3 + 2) = &WeddingEffect::`vftable'; sub_8CF980(v3 + 131); v3[155] = -6.8056469e38/*NaN*/; return v3; } // 9F746C: using guessed type void *WeddingEffect::`vftable'; // 9F7484: using guessed type void *WeddingEffect::`vftable'; //----- (006B1110) -------------------------------------------------------- bool __thiscall sub_6B1110(__int16 *this, int a2) { return sub_664AB0(dword_AD8C90, this[310]) == 0; } //----- (006B1130) -------------------------------------------------------- int __userpurge sub_6B1130@(int a1@, int a2@, int a3@, int a4@, float a5) { int v5; // ST04_4 int v6; // edi char *v7; // eax char *v8; // ebx int *v9; // eax void (__thiscall *v10)(int, float **); // edx int result; // eax int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] float *v14; // [esp+18h] [ebp-10h] float *v15; // [esp+1Ch] [ebp-Ch] int v16; // [esp+20h] [ebp-8h] int v17; // [esp+24h] [ebp-4h] int v18; // [esp+30h] [ebp+8h] int v19; // [esp+30h] [ebp+8h] v5 = a3; v6 = a1; sub_6A7C90(a5); (*(void (__thiscall **)(int, _DWORD, int, int, int, int, int, float *, float *))(*(_DWORD *)(v6 + 524) + 36))( v6 + 524, LODWORD(a5), v5, a4, a2, v12, v13, v14, v15); v7 = sub_664AB0(dword_AD8C90, *(_WORD *)(v6 + 620)); v8 = v7; if ( v7 ) { v18 = *(_DWORD *)(v6 + 524); v15 = sub_6AAAD0(v7, (float *)&v12); (*(void (__thiscall **)(int, float *))(v18 + 16))(v6 + 524, v15); v19 = *(_DWORD *)(v6 + 524); v14 = sub_6AAAD0(v8, (float *)&v12); (*(void (__thiscall **)(int, float *))(v19 + 40))(v6 + 524, v14); v9 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)(v6 + 524) + 56))(v6 + 524); v15 = (float *)*v9; v16 = v9[1]; v10 = *(void (__thiscall **)(int, float **))(*(_DWORD *)v6 + 28); v17 = v9[2]; v10(v6, &v15); result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 84))(v6, 1); } else { (*(void (__thiscall **)(int))(*(_DWORD *)(v6 + 524) + 32))(v6 + 524); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 84))(v6, 0); } return result; } // 6B1130: could not find valid save-restore pair for ebx // 6B1130: could not find valid save-restore pair for edi // 6B1130: could not find valid save-restore pair for esi //----- (006B1230) -------------------------------------------------------- int __thiscall sub_6B1230(void *this, float a2) { return sub_6A3CF0((int)this, a2); } //----- (006B1250) -------------------------------------------------------- void *sub_6B1250() { return &unk_B912BC; } //----- (006B1260) -------------------------------------------------------- _DWORD *__thiscall sub_6B1260(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 2; *v2 = &WeddingEffect::`vftable'; v2[2] = &WeddingEffect::`vftable'; sub_8CFA70(this + 129); sub_6A7FF0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F746C: using guessed type void *WeddingEffect::`vftable'; // 9F7484: using guessed type void *WeddingEffect::`vftable'; // ABA360: using guessed type int dword_ABA360; //----- (006B12F0) -------------------------------------------------------- bool __thiscall sub_6B12F0(int this, float a2) { return *(_BYTE *)(this + 20) && a2 - *(float *)(this + 8) <= *(float *)(this + 16); } //----- (006B1320) -------------------------------------------------------- void __thiscall sub_6B1320(float *this, float a2) { this[2] = a2; this[3] = a2; } //----- (006B1330) -------------------------------------------------------- float *__thiscall sub_6B1330(float *this) { float *v1; // esi _DWORD *v2; // ebx _DWORD *v3; // eax int v4; // edi float *result; // eax v1 = this; v2 = 0; *(_DWORD *)this = &TextEff::`vftable'; this[6] = 0.0; this[2] = 0.0; *((_WORD *)this + 2) = -1; *((_BYTE *)this + 20) = 1; this[7] = 0.0; this[8] = 0.0; v3 = operator new(0xE8u); if ( v3 ) v2 = sub_85A1C0(v3, 0); v4 = *((_DWORD *)v1 + 6); if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 6) = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } result = v1; v1[4] = flt_AB5A94; return result; } // 9F74E4: using guessed type void *TextEff::`vftable'; // AB5A94: using guessed type float flt_AB5A94; //----- (006B1400) -------------------------------------------------------- void __thiscall sub_6B1400(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // edi v1 = this; *this = &TextEff::`vftable'; v2 = this[6]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[6] = 0; } v3 = v1[6]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // 9F74E4: using guessed type void *TextEff::`vftable'; //----- (006B14A0) -------------------------------------------------------- int __thiscall sub_6B14A0(int this, int a2, int a3, unsigned int a4) { float v4; // ST14_4 unsigned int v5; // eax _DWORD *v6; // eax float *v7; // eax v4 = (double)*(unsigned int *)(this + 28); *(float *)(a2 + 88) = v4; *(float *)(a2 + 92) = 0.0; *(float *)(a2 + 96) = 0.0; v5 = *(_DWORD *)(this + 32); if ( v5 < a4 ) *(_DWORD *)(this + 32) = a4 + v5; *(_DWORD *)(this + 28) += a3; (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(this + 24) + 116))(a2, 0); v6 = (_DWORD *)sub_85C050((_DWORD *)a2, 3); if ( v6 ) { v7 = (float *)sub_85B610(v6, (int)dword_BA3BD8); if ( v7 ) v7[3] = flt_AB5A94; } sub_85C6F0((_DWORD *)a2); sub_85C4D0((_DWORD *)a2); return sub_85BED0((_DWORD **)a2, 0.0, 1); } // AB5A94: using guessed type float flt_AB5A94; //----- (006B1550) -------------------------------------------------------- int __thiscall sub_6B1550(int this, int a2, int a3, unsigned int a4) { int v4; // edi float v5; // ST18_4 unsigned int v6; // eax int result; // eax v4 = this; v5 = (double)*(unsigned int *)(this + 28); *(float *)(a2 + 88) = v5; *(float *)(a2 + 92) = 0.0; *(float *)(a2 + 96) = 0.0; v6 = *(_DWORD *)(this + 32); if ( v6 < a4 ) *(_DWORD *)(this + 32) = a4 + v6; *(_DWORD *)(this + 28) += a3; *(_WORD *)(a2 + 28) |= 1u; (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(this + 24) + 116))(a2, 0); sub_85C6F0((_DWORD *)a2); sub_85C4D0((_DWORD *)a2); result = sub_85BED0((_DWORD **)a2, 0.0, 0); if ( *(_DWORD *)(a2 + 192) != 1 ) *(float *)(v4 + 16) = *(float *)(v4 + 16) + flt_B912C4; return result; } // B912C4: using guessed type float flt_B912C4; //----- (006B15F0) -------------------------------------------------------- void __thiscall sub_6B15F0(__int16 *this, float a2, int a3, int a4) { __int16 *v4; // edi char *v5; // eax double v6; // st7 double v7; // st5 int v8; // esi int v9; // edx double v10; // st5 unsigned int v11; // esi double v12; // st7 double v13; // st7 int v14; // eax float v15; // ST20_4 unsigned int v16; // ebx double v17; // st7 int v18; // eax int v19; // eax int v20; // [esp+1Ch] [ebp-30h] float v21; // [esp+20h] [ebp-2Ch] float v22; // [esp+24h] [ebp-28h] int v23; // [esp+28h] [ebp-24h] float v24; // [esp+2Ch] [ebp-20h] float v25; // [esp+30h] [ebp-1Ch] float v26; // [esp+34h] [ebp-18h] double v27; // [esp+38h] [ebp-14h] float v28; // [esp+40h] [ebp-Ch] int v29; // [esp+44h] [ebp-8h] int v30; // [esp+48h] [ebp-4h] float v31; // [esp+58h] [ebp+Ch] float v32; // [esp+58h] [ebp+Ch] float v33; // [esp+58h] [ebp+Ch] float v34; // [esp+58h] [ebp+Ch] float v35; // [esp+58h] [ebp+Ch] float v36; // [esp+58h] [ebp+Ch] float v37; // [esp+58h] [ebp+Ch] float v38; // [esp+58h] [ebp+Ch] float v39; // [esp+58h] [ebp+Ch] int v40; // [esp+58h] [ebp+Ch] v4 = this; v5 = sub_664AB0(dword_AD8C90, this[2]); if ( !v5 ) goto LABEL_16; sub_653B10(v5, (float *)&v23); v25 = v25 + 10.0; v26 = *(float *)(dword_B66FB0 + 88) - *(float *)&v23; *(float *)&v27 = *(float *)(dword_B66FB0 + 92) - v24; *((float *)&v27 + 1) = *(float *)(dword_B66FB0 + 96) - v25; v6 = *(float *)&v27; v7 = *((float *)&v27 + 1); v27 = flt_AB5A98; v28 = v6 * v6 + v26 * v26 + v7 * v7; v28 = sqrt(v28); if ( v28 <= (double)flt_AB5A98 ) { v8 = a3; v20 = v23; v21 = v24; v22 = v25; if ( sub_861E70((float *)a3, (int)&v20, (int)&v30, (int)&v29, 0.0000099999997) ) { *(_WORD *)(*((_DWORD *)v4 + 6) + 28) &= 0xFFFEu; v26 = *(float *)(a3 + 88) - *(float *)&v20; *(float *)&v27 = *(float *)(a3 + 92) - v21; *((float *)&v27 + 1) = *(float *)(a3 + 96) - v22; v31 = *(float *)&v27 * *(float *)&v27 + v26 * v26 + *((float *)&v27 + 1) * *((float *)&v27 + 1); v32 = sqrt(v31); *((float *)&v27 + 1) = v32; v33 = *(float *)(v8 + 260) - *(float *)(v8 + 256); v28 = 1.0 / v33; v34 = (double)(unsigned int)xRight * *(float *)&v30; *(float *)&v30 = v34 - (double)(unsigned int)(*((_DWORD *)v4 + 7) >> 1); v35 = 1.0 - *(float *)&v29; v36 = v35 * (double)(unsigned int)dword_AC2F78; *(float *)&v29 = v36 - (double)*((unsigned int *)v4 + 8); v9 = v29; v37 = -(*(float *)(v8 + 260) * *(float *)(v8 + 256) * v28); v10 = *(float *)(v8 + 260); v11 = 0; v12 = v37; v38 = v28 * v10; v39 = (v38 * *((float *)&v27 + 1) + v12) / *((float *)&v27 + 1); v13 = v39 * (*(float *)(a4 + 260) - *(float *)(a4 + 256)) + *(float *)(a4 + 256); v14 = *((_DWORD *)v4 + 6); *(float *)(v14 + 88) = *(float *)&v30; *(_DWORD *)(v14 + 92) = v9; v15 = v13; *(float *)(v14 + 96) = v15; v40 = *((int *)v4 + 2); v16 = *(_DWORD *)(*((_DWORD *)v4 + 6) + 192); if ( v16 ) { do { v17 = *(float *)&v40; if ( a2 >= (double)*(float *)&v40 ) { v18 = *((_DWORD *)v4 + 6); if ( *(_DWORD *)(v18 + 188) > v11 ) { v19 = *(_DWORD *)(*(_DWORD *)(v18 + 180) + 4 * v11); if ( v19 ) { if ( *(_BYTE *)(v19 + 28) & 1 ) { *(_WORD *)(v19 + 28) &= 0xFFFEu; sub_86C420(v19, *(float *)&v40); v17 = *(float *)&v40; } } } } ++v11; *(float *)&v40 = v17 + flt_B912C4; } while ( v11 < v16 ); } *((float *)v4 + 3) = a2; } else { *(_WORD *)(*((_DWORD *)v4 + 6) + 28) |= 1u; } } else { LABEL_16: *((_BYTE *)v4 + 20) = 0; } } // AB5A98: using guessed type float flt_AB5A98; // B912C4: using guessed type float flt_B912C4; //----- (006B18B0) -------------------------------------------------------- void *__thiscall sub_6B18B0(void *this, char a2) { void *v2; // esi v2 = this; sub_6B1400(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B18F0) -------------------------------------------------------- void *__thiscall sub_6B18F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,TextEff *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; //----- (006B1920) -------------------------------------------------------- void __thiscall sub_6B1920(void *this) { int v1; // esi v1 = *((_DWORD *)this + 2); if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } } //----- (006B1950) -------------------------------------------------------- void __thiscall sub_6B1950(void *this) { void *v1; // esi int v2; // ST04_4 float *v3; // ST00_4 void *v4; // [esp+Ch] [ebp-B0h] int v5; // [esp+10h] [ebp-ACh] int v6; // [esp+14h] [ebp-A8h] int v7; // [esp+18h] [ebp-A4h] char v8; // [esp+1Ch] [ebp-A0h] int v9; // [esp+B8h] [ebp-4h] v1 = this; v4 = 0; v5 = 0; v6 = 0; v7 = 1024; sub_85F230(&v4, 0x400u); v9 = 0; sub_85F910(&v8, (int)&v4); v2 = *((_DWORD *)v1 + 197); v3 = (float *)*((_DWORD *)v1 + 196); LOBYTE(v9) = 1; sub_85FB50(v3, v2, &v8, 0); LOBYTE(v9) = 0; sub_85F7E0(&v8); operator delete[](v4); } //----- (006B1A20) -------------------------------------------------------- _DWORD *__stdcall sub_6B1A20(void *a1, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // ebx _DWORD *v8; // eax _DWORD *v9; // edi int v10; // eax _DWORD *v11; // eax v5 = operator new(0xE8u); v6 = 0; if ( v5 ) v7 = sub_85A1C0(v5, 0); else v7 = 0; v8 = operator new(0xE8u); if ( v8 ) v6 = sub_85A1C0(v8, 0); (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)a1 + 72))(v6); v9 = a5; v10 = sub_85C050(a5, 3); (*(void (__stdcall **)(int))(*(_DWORD *)a4 + 72))(v10); if ( a3 ) { v11 = operator new(0xE8u); if ( v11 ) v9 = sub_85A1C0(v11, 0); else v9 = 0; (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)a3 + 72))(v9); (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v9 + 116))(v9, a5, 0); } (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v6 + 116))(v6, v9, 0); (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v7 + 116))(v7, v6, 0); return v7; } //----- (006B1B40) -------------------------------------------------------- int __thiscall sub_6B1B40(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx int v5; // ecx v2 = this; v3 = (_DWORD *)(*(int (**)(void))(*this + 4))(); v3[2] = a2; *v3 = 0; v3[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) *v4 = v3; else v2[1] = v3; ++v2[3]; v5 = v2[197]; v2[2] = v3; (*(void (__stdcall **)(_DWORD, signed int))(*(_DWORD *)v5 + 116))(*(_DWORD *)(a2 + 24), 1); sub_85C4D0(*(_DWORD **)(a2 + 24)); sub_85C6F0(*(_DWORD **)(a2 + 24)); return sub_85BED0(*(_DWORD ***)(a2 + 24), 0.0, 1); } //----- (006B1BB0) -------------------------------------------------------- void __thiscall sub_6B1BB0(_DWORD *this) { int *v1; // edi signed int v2; // ebx int v3; // esi int v4; // esi int v5; // esi int v6; // esi int v7; // esi int v8; // esi signed int v9; // [esp+Ch] [ebp-8h] _DWORD *v10; // [esp+10h] [ebp-4h] v10 = this; v1 = this + 6; v9 = 6; do { v2 = 10; do { v3 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v1 = 0; } v1 += 3; --v2; } while ( v2 ); --v9; } while ( v9 ); v4 = v10[186]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v10[186] = 0; } v5 = v10[189]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v10[189] = 0; } v6 = v10[192]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v10[192] = 0; } v7 = v10[195]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10[195] = 0; } v8 = v10[207]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } v10[207] = 0; } } //----- (006B1D00) -------------------------------------------------------- char __thiscall sub_6B1D00(float *this) { float *v1; // esi char *v2; // eax _DWORD *v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf _DWORD *v7; // eax int v8; // edi _DWORD *v9; // ebx int v10; // eax int v11; // ecx _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax int v15; // eax char *v16; // eax char *v17; // eax _DWORD *v18; // eax _DWORD *v19; // eax int v20; // eax int v21; // ecx _DWORD *v22; // eax _DWORD *v23; // eax int v24; // eax _DWORD *v25; // eax _DWORD *v26; // eax int v27; // eax _DWORD *v28; // eax _DWORD *v29; // eax _DWORD *v30; // eax int v31; // esi int v32; // [esp+14h] [ebp-10h] int v33; // [esp+20h] [ebp-4h] v1 = this; v32 = 0; v33 = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA418, "NormalHitCtrl.nif"); sub_8F66B0(v2, (int)&v32, 0); if ( !v32 ) return 0; v3 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v32 + 72))("Move"); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v32; v33 = -1; if ( !v32 || InterlockedDecrement((volatile LONG *)(v32 + 4)) ) return 0; v5 = v4 == 0; LABEL_8: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = sub_85B610(v3, (int)dword_BA3BB8); v8 = *((_DWORD *)v1 + 198); v9 = v7; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *((_DWORD *)v1 + 198) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v10 = *((_DWORD *)v1 + 198); if ( !v10 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v32; v33 = -1; if ( !v32 || InterlockedDecrement((volatile LONG *)(v32 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_8; } *(_WORD *)(v10 + 8) = *(_WORD *)(v10 + 8) & 0xFFF7 | 1; v11 = v32; v1[201] = *(float *)(*((_DWORD *)v1 + 198) + 24); v12 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v11 + 72))("Plane01"); if ( !v12 ) goto LABEL_38; v13 = (_DWORD *)sub_85C050(v12, 3); v14 = sub_85B610(v13, (int)dword_BA3BD8); sub_56FF80((_DWORD *)v1 + 200, (int)v14); v15 = *((_DWORD *)v1 + 200); if ( !v15 ) goto LABEL_38; *(_WORD *)(v15 + 8) = *(_WORD *)(v15 + 8) & 0xFFF7 | 1; v16 = sub_668810(); v17 = (char *)sub_401410(v16, "CriticalHitCtrl.nif"); sub_8F66B0(v17, (int)&v32, 0); if ( !v32 ) goto LABEL_38; v18 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v32 + 72))("Move"); if ( !v18 ) goto LABEL_38; v19 = sub_85B610(v18, (int)dword_BA3BB8); sub_56FF80((_DWORD *)v1 + 202, (int)v19); v20 = *((_DWORD *)v1 + 202); if ( !v20 ) goto LABEL_38; *(_WORD *)(v20 + 8) = *(_WORD *)(v20 + 8) & 0xFFF7 | 1; v21 = v32; v1[206] = *(float *)(*((_DWORD *)v1 + 202) + 24); v22 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v21 + 72))("noise"); if ( !v22 ) goto LABEL_38; v23 = sub_85B610(v22, (int)dword_BA3BB8); sub_56FF80((_DWORD *)v1 + 203, (int)v23); v24 = *((_DWORD *)v1 + 203); if ( !v24 || (*(_WORD *)(v24 + 8) = *(_WORD *)(v24 + 8) & 0xFFF7 | 1, (v25 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v32 + 72))("size")) == 0) || (v26 = sub_85B610(v25, (int)dword_BA3BB8), sub_56FF80((_DWORD *)v1 + 204, (int)v26), (v27 = *((_DWORD *)v1 + 204)) == 0) || (*(_WORD *)(v27 + 8) = *(_WORD *)(v27 + 8) & 0xFFF7 | 1, (v28 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v32 + 72))("Plane01")) == 0) ) { LABEL_38: v33 = -1; LABEL_24: sub_410C00(&v32); return 0; } v29 = (_DWORD *)sub_85C050(v28, 3); v30 = sub_85B610(v29, (int)dword_BA3BD8); sub_56FF80((_DWORD *)v1 + 205, (int)v30); v31 = *((_DWORD *)v1 + 205); v33 = -1; if ( !v31 ) goto LABEL_24; *(_WORD *)(v31 + 8) = *(_WORD *)(v31 + 8) & 0xFFF7 | 1; sub_410C00(&v32); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006B2080) -------------------------------------------------------- void __thiscall sub_6B2080(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi v1 = this; v2 = this[198]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[198] = 0; } v3 = v1[199]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[199] = 0; } v4 = v1[200]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[200] = 0; } v5 = v1[202]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[202] = 0; } v6 = v1[203]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[203] = 0; } v7 = v1[205]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[205] = 0; } v8 = v1[204]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } v1[204] = 0; } } //----- (006B21C0) -------------------------------------------------------- void __thiscall sub_6B21C0(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi _DWORD *v16; // edi _DWORD *v17; // ST0C_4 v1 = this; v2 = this + 207; sub_8D47C0(this + 214); nullsub_6(v2 + 1); v3 = *v2; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[205]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[204]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[203]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[202]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[200]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[199]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[198]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[196]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[195]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = v1[192]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[189]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = v1[186]; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); `eh vector destructor iterator'(v1 + 4, 0xCu, 60, sub_6B1920); *v1 = &PgTList::`vftable'; v16 = (_DWORD *)v1[1]; while ( v16 ) { v17 = v16; v16 = (_DWORD *)*v16; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v17); } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,TextEff *>::`vftable'; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; // 9F763C: using guessed type void *PgTList::`vftable'; //----- (006B2470) -------------------------------------------------------- void __thiscall sub_6B2470(char *this, __int16 a2, int a3, int a4, char a5) { char *v5; // esi char *v6; // eax float *v7; // eax float v8; // ST34_4 float v9; // ST30_4 float v10; // ST38_4 float v11; // ST38_4 float v12; // ST38_4 float *v13; // edi float *v14; // eax signed int v15; // kr00_4 int v16; // edi void *v17; // ebx void *v18; // ST28_4 void *v19; // ST24_4 int v20; // ST0C_4 int v21; // ST08_4 int v22; // ST04_4 void *v23; // eax _DWORD *v24; // eax int v25; // edx void *v26; // ebx int v27; // ST0C_4 void *v28; // eax _DWORD *v29; // [esp+0h] [ebp-7Ch] signed int v30; // [esp+20h] [ebp-5Ch] int v31; // [esp+24h] [ebp-58h] char v32[64]; // [esp+2Ch] [ebp-50h] int v33; // [esp+78h] [ebp-4h] v5 = this; v6 = sub_664AB0(dword_AD8C90, a2); if ( v6 ) { v7 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v6 + 196))(v6); v8 = *(float *)(dword_B66FB0 + 88) - *v7; v9 = *(float *)(dword_B66FB0 + 92) - v7[1]; v10 = *(float *)(dword_B66FB0 + 96) - v7[2]; v11 = v9 * v9 + v8 * v8 + v10 * v10; v12 = sqrt(v11); if ( flt_AB5A98 >= (double)v12 ) { v13 = 0; if ( *(_DWORD *)&v5[120 * a4 + 24] ) { v14 = (float *)operator new(0x24u); v33 = 0; if ( v14 ) { v13 = sub_6B1330(v14); v31 = (int)v13; } else { v31 = 0; } *((_WORD *)v13 + 2) = a2; v13[4] = *((float *)v5 + 201); v33 = -1; sprintf(v32, "%u", a3); v15 = strlen(v32); v30 = 0; if ( v15 > 0 ) { do { v16 = (int)&v5[120 * a4 + 16 + 4 * (3 * v32[v30] - 144)]; v29 = (_DWORD *)sub_85BD60(*(void **)(v16 + 8)); if ( a5 ) { v17 = (void *)*((_DWORD *)v5 + 204); v18 = (void *)*((_DWORD *)v5 + 203); v19 = (void *)*((_DWORD *)v5 + 202); v20 = sub_85BD60(*((void **)v5 + 205)); v21 = sub_85BD60(v17); v22 = sub_85BD60(v18); v23 = (void *)sub_85BD60(v19); v24 = sub_6B1A20(v23, v22, v21, v20, v29); v25 = *(_DWORD *)v16 + 10; } else { v26 = (void *)*((_DWORD *)v5 + 198); v27 = sub_85BD60(*((void **)v5 + 200)); v28 = (void *)sub_85BD60(v26); v24 = sub_6B1A20(v28, 0, 0, v27, v29); v25 = *(_DWORD *)v16; } sub_6B1550(v31, (int)v24, v25, *(_DWORD *)(v16 + 4)); ++v30; } while ( v30 < v15 ); v13 = (float *)v31; } sub_6B1B40(v5, (int)v13); sub_6B1320(v13, flt_ACCFCC); } } } } // AB5A98: using guessed type float flt_AB5A98; // ACCFCC: using guessed type float flt_ACCFCC; // 6B2470: using guessed type char var_50[64]; //----- (006B26A0) -------------------------------------------------------- void __thiscall sub_6B26A0(_DWORD *this, void *a2) { _DWORD *v2; // edi float *v3; // esi char *v4; // eax float *v5; // eax float *v6; // eax unsigned int v7; // ST08_4 int v8; // ST04_4 int v9; // eax v2 = this; v3 = 0; if ( this[186] ) { v4 = sub_664AB0(dword_AD8C90, (__int16)a2); if ( v4 ) { v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); if ( flt_AB5A98 >= sub_636980(byte_ADB468, v5) ) { v6 = (float *)operator new(0x24u); if ( v6 ) v3 = sub_6B1330(v6); *((_WORD *)v3 + 2) = (_WORD)a2; v7 = v2[185]; v8 = v2[184]; v9 = sub_85BD60((void *)v2[186]); sub_6B14A0((int)v3, v9, v8, v7); sub_6B1320(v3, flt_ACCFCC); sub_6B1B40(v2, (int)v3); } } } } // AB5A98: using guessed type float flt_AB5A98; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B2790) -------------------------------------------------------- void __thiscall sub_6B2790(_DWORD *this, void *a2) { _DWORD *v2; // edi float *v3; // esi char *v4; // eax float *v5; // eax float *v6; // eax unsigned int v7; // ST08_4 int v8; // ST04_4 int v9; // eax v2 = this; v3 = 0; if ( this[192] ) { v4 = sub_664AB0(dword_AD8C90, (__int16)a2); if ( v4 ) { v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); if ( flt_AB5A98 >= sub_636980(byte_ADB468, v5) ) { v6 = (float *)operator new(0x24u); if ( v6 ) v3 = sub_6B1330(v6); *((_WORD *)v3 + 2) = (_WORD)a2; v7 = v2[191]; v8 = v2[190]; v9 = sub_85BD60((void *)v2[192]); sub_6B14A0((int)v3, v9, v8, v7); sub_6B1320(v3, flt_ACCFCC); sub_6B1B40(v2, (int)v3); } } } } // AB5A98: using guessed type float flt_AB5A98; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B2880) -------------------------------------------------------- void __thiscall sub_6B2880(_DWORD *this, void *a2) { _DWORD *v2; // edi float *v3; // esi char *v4; // eax float *v5; // eax float *v6; // eax unsigned int v7; // ST08_4 int v8; // ST04_4 int v9; // eax v2 = this; v3 = 0; if ( this[189] ) { v4 = sub_664AB0(dword_AD8C90, (__int16)a2); if ( v4 ) { v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); if ( flt_AB5A98 >= sub_636980(byte_ADB468, v5) ) { v6 = (float *)operator new(0x24u); if ( v6 ) v3 = sub_6B1330(v6); *((_WORD *)v3 + 2) = (_WORD)a2; v7 = v2[188]; v8 = v2[187]; v9 = sub_85BD60((void *)v2[189]); sub_6B14A0((int)v3, v9, v8, v7); sub_6B1320(v3, flt_ACCFCC); sub_6B1B40(v2, (int)v3); } } } } // AB5A98: using guessed type float flt_AB5A98; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B2970) -------------------------------------------------------- void __thiscall sub_6B2970(_DWORD *this, void *a2) { _DWORD *v2; // edi float *v3; // esi char *v4; // eax float *v5; // eax float *v6; // eax unsigned int v7; // ST08_4 int v8; // ST04_4 int v9; // eax v2 = this; v3 = 0; if ( this[195] ) { v4 = sub_664AB0(dword_AD8C90, (__int16)a2); if ( v4 ) { v5 = (float *)(*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 196))(v4); if ( flt_AB5A98 >= sub_636980(byte_ADB468, v5) ) { v6 = (float *)operator new(0x24u); if ( v6 ) v3 = sub_6B1330(v6); *((_WORD *)v3 + 2) = (_WORD)a2; v7 = v2[194]; v8 = v2[193]; v9 = sub_85BD60((void *)v2[195]); sub_6B14A0((int)v3, v9, v8, v7); sub_6B1320(v3, flt_ACCFCC); sub_6B1B40(v2, (int)v3); } } } } // AB5A98: using guessed type float flt_AB5A98; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B2A60) -------------------------------------------------------- int __thiscall sub_6B2A60(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx void (__thiscall ***v7)(_DWORD, signed int); // edi v2 = a2; v3 = this; v4 = (_DWORD *)this[1]; if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = v4; v4 = (_DWORD *)*v4; if ( a2 == (_DWORD *)*v5 ) break; if ( !v4 ) goto LABEL_4; } } else { LABEL_4: v6 = 0; } a2 = v6; if ( v6 ) sub_403620(v3, &a2); (*(void (__stdcall **)(_DWORD **, _DWORD))(*(_DWORD *)v3[197] + 120))(&a2, v2[6]); if ( a2 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } return (*(int (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); } //----- (006B2AE0) -------------------------------------------------------- void __usercall sub_6B2AE0(int a1@, signed int a2@) { int v2; // edi _DWORD *v3; // ebx int v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx int v7; // edx void (__thiscall ***v8)(_DWORD, signed int); // edi signed int v9; // [esp-4h] [ebp-18h] int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v2 = a1; v3 = *(_DWORD **)(a1 + 4); v12 = a1; if ( v3 ) { v9 = a2; do { v4 = v3[2]; v5 = *(_DWORD **)(v2 + 4); v3 = (_DWORD *)*v3; if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = (int)v5; v5 = (_DWORD *)*v5; if ( v4 == *v6 ) break; if ( !v5 ) goto LABEL_6; } } else { LABEL_6: v7 = 0; } v11 = v7; if ( v7 ) sub_403620((_DWORD *)v2, (_DWORD **)&v11); (*(void (__stdcall **)(int *, _DWORD, signed int))(**(_DWORD **)(v2 + 788) + 120))(&v10, *(_DWORD *)(v4 + 24), v9); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } v2 = v12; } v9 = 1; (**(void (__thiscall ***)(int))v4)(v4); } while ( v3 ); } } // 6B2AE0: could not find valid save-restore pair for esi //----- (006B2B80) -------------------------------------------------------- void __thiscall sub_6B2B80(_DWORD *this, float a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v5; // ebx _DWORD *v6; // esi int v7; // ebx __int16 **v8; // eax int v9; // eax float v10; // esi char *v11; // eax int v12; // eax float *v13; // edi double v14; // st7 int v15; // [esp+1Ch] [ebp-28h] int v16; // [esp+20h] [ebp-24h] float v17; // [esp+24h] [ebp-20h] float v18; // [esp+28h] [ebp-1Ch] float v19; // [esp+2Ch] [ebp-18h] float v20; // [esp+30h] [ebp-14h] int v21; // [esp+34h] [ebp-10h] int v22; // [esp+38h] [ebp-Ch] float v23; // [esp+3Ch] [ebp-8h] v3 = this; v4 = (_DWORD *)this[1]; while ( v4 ) { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( !sub_6B12F0((int)v5, a2) ) sub_6B2A60(v3, v5); } v6 = (_DWORD *)v3[1]; if ( v6 ) { v7 = a3; do { v8 = (__int16 **)(v6 + 2); v6 = (_DWORD *)*v6; sub_6B15F0(*v8, a2, v7, v3[196]); } while ( v6 ); } sub_85BED0((_DWORD **)v3[196], a2, 1); sub_85BED0((_DWORD **)v3[197], a2, 1); sub_8D0730((int)(v3 + 208), a2); if ( v9 == 1 && v3[207] ) { (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v3[197] + 120))(&a2, v3[207]); if ( a2 != 0.0 ) { v10 = a2; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(a2) + 4)) && v10 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v10))(LODWORD(v10), 1); } *((_BYTE *)v3 + 892) = 0; } if ( *((_BYTE *)v3 + 892) ) { v11 = sub_664AB0(dword_AD8C90, *((_WORD *)v3 + 447)); if ( v11 ) { sub_653B10(v11, (float *)&v21); v23 = v23 + 20.0; v15 = v21; v16 = v22; v17 = v23; if ( sub_861E70((float *)dword_B66FB0, (int)&v15, (int)&a2, (int)&a3, 0.0000099999997) ) { *(float *)&a3 = 1.0 - *(float *)&a3; *(float *)&a3 = *(float *)&a3 * (double)(unsigned int)dword_AC2F78; v12 = v3[207]; a2 = (double)(unsigned int)xRight * a2; *(_WORD *)(v12 + 28) &= 0xFFFEu; v13 = (float *)v3[207]; v18 = a2; v14 = *(float *)&a3; v13[22] = a2; v19 = v14; v13[23] = v19; v20 = 0.0; v13[24] = 0.0; } else { *(_WORD *)(v3[207] + 28) |= 1u; } } } } //----- (006B2D80) -------------------------------------------------------- void *__stdcall sub_6B2D80(_DWORD *a1, _DWORD *a2) { void *v2; // eax int v3; // eax void *v4; // eax int v5; // eax void *v6; // eax int v7; // eax void *result; // eax int v9; // eax v2 = (void *)sub_85C050(a2, 0); if ( v2 ) { v3 = sub_85BD60(v2); sub_403700(a1, v3); } v4 = (void *)sub_85C050(a2, 8); if ( v4 ) { v5 = sub_85BD60(v4); sub_403700(a1, v5); } v6 = (void *)sub_85C050(a2, 3); if ( v6 ) { v7 = sub_85BD60(v6); sub_403700(a1, v7); } result = (void *)sub_85C050(a2, 9); if ( result ) { v9 = sub_85BD60(result); result = (void *)sub_403700(a1, v9); } return result; } //----- (006B2E10) -------------------------------------------------------- char __thiscall sub_6B2E10(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax signed int v3; // ebx _DWORD *v4; // eax _WORD *v5; // edi _DWORD *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // ecx volatile LONG **v9; // edi int v10; // edx int v11; // eax volatile LONG *v12; // ecx _DWORD *v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi LONG v15; // eax char result; // al _WORD *v17; // edi _DWORD *v18; // eax _DWORD *v19; // edi int v20; // ebx int v21; // eax _DWORD *v22; // ecx _DWORD *v23; // eax _DWORD *v24; // ebx _WORD *v25; // edi _DWORD *v26; // eax _DWORD *v27; // eax int v28; // edx _DWORD *v29; // ecx _DWORD *v30; // eax _DWORD *v31; // ebx _WORD *v32; // edi _DWORD *v33; // eax _DWORD *v34; // eax int v35; // eax _DWORD *v36; // ecx _DWORD *v37; // eax _DWORD *v38; // ebx _WORD *v39; // edi _DWORD *v40; // eax _DWORD *v41; // eax int v42; // eax _DWORD *v43; // ecx char *v44; // eax char *v45; // eax void **v46; // eax const char *v47; // [esp+34h] [ebp-98h] const char *v48; // [esp+38h] [ebp-94h] const char *v49; // [esp+3Ch] [ebp-90h] const char *v50; // [esp+40h] [ebp-8Ch] const char *v51; // [esp+44h] [ebp-88h] const char *v52; // [esp+48h] [ebp-84h] char *v53; // [esp+4Ch] [ebp-80h] char **v54; // [esp+50h] [ebp-7Ch] _DWORD *v55; // [esp+54h] [ebp-78h] int v56; // [esp+58h] [ebp-74h] int v57; // [esp+5Ch] [ebp-70h] volatile LONG *v58; // [esp+60h] [ebp-6Ch] int v59; // [esp+64h] [ebp-68h] void *v60; // [esp+68h] [ebp-64h] int v61; // [esp+6Ch] [ebp-60h] int v62; // [esp+70h] [ebp-5Ch] _DWORD *v63; // [esp+74h] [ebp-58h] int v64; // [esp+78h] [ebp-54h] char v65; // [esp+7Ch] [ebp-50h] int v66; // [esp+C8h] [ebp-4h] v1 = this; v64 = 0; v66 = 0; if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA838, "Number.nif"); sub_8F66B0(v2, (int)&v64, 0); if ( !v64 ) return 0; v47 = "W20p%02d"; v48 = "R20p%02d"; v49 = "Y20p%02d"; v50 = "G20p%02d"; v51 = "S%02d"; v52 = "H%02d"; v57 = 2; v54 = (char **)&v47; while ( 2 ) { v3 = 0; v53 = *v54; do { v63 = 0; sprintf(&v65, v53, v3); v4 = (_DWORD *)(*(int (__stdcall **)(char *))(*(_DWORD *)v64 + 72))(&v65); sub_8F5CC0(v4, &v63); v55 = v63; if ( !v63 ) goto LABEL_24; v5 = sub_8F6A70(v63[46], (int)&v56, (int)&v59, (int)&v62, (int)&v61, 0.0, 0.0); if ( !v5 ) goto LABEL_22; v6 = operator new(0xC4u); v60 = v6; LOBYTE(v66) = 1; if ( v6 ) { v7 = sub_868C00(v6, (int)v5); v58 = v7; } else { v58 = 0; v7 = 0; } v8 = (volatile LONG *)v1[3 * (v3 + v57)]; v9 = (volatile LONG **)&v1[3 * (v3 + v57)]; LOBYTE(v66) = 0; v60 = (void *)v8; if ( v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) && v60 ) (**(void (__stdcall ***)(signed int))v60)(1); v7 = v58; } *v9 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } sub_6B2D80(*v9, v55); v10 = v61; v11 = (int)&v1[3 * (v57 + v3 - 2)]; *(_DWORD *)(v11 + 16) = v62; v12 = *v9; *(_DWORD *)(v11 + 20) = v10; sub_85C6F0(v12); sub_85C4D0(*v9); sub_85BED0((_DWORD **)*v9, 0.0, 1); ++v3; } while ( v3 < 10 ); ++v54; v57 += 10; if ( v57 < 62 ) continue; break; } v63 = 0; v13 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("Miss"); sub_8F5CC0(v13, &v63); v55 = v63; if ( !v63 ) goto LABEL_22; v17 = sub_8F6A70(v63[46], (int)&v56, (int)&v59, (int)&v62, (int)&v61, 0.0, 0.0); if ( !v17 ) goto LABEL_24; v18 = operator new(0xC4u); v60 = v18; LOBYTE(v66) = 2; if ( v18 ) v19 = sub_868C00(v18, (int)v17); else v19 = 0; v20 = v1[186]; LOBYTE(v66) = 0; if ( (_DWORD *)v20 != v19 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v1[186] = v19; if ( v19 ) InterlockedIncrement(v19 + 1); } sub_6B2D80((_DWORD *)v1[186], v55); v21 = v61; v22 = (_DWORD *)v1[186]; v1[184] = v62; v1[185] = v21; sub_85C6F0(v22); sub_85C4D0((_DWORD *)v1[186]); sub_85BED0((_DWORD **)v1[186], 0.0, 1); v63 = 0; v23 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("Block"); sub_8F5CC0(v23, &v63); v24 = v63; if ( !v63 ) goto LABEL_22; v25 = sub_8F6A70(v63[46], (int)&v56, (int)&v59, (int)&v62, (int)&v61, 0.0, 0.0); if ( !v25 ) { LABEL_24: v14 = (void (__thiscall ***)(_DWORD, signed int))v64; v66 = -1; if ( !v64 ) return 0; v15 = InterlockedDecrement((volatile LONG *)(v64 + 4)); goto LABEL_26; } v26 = operator new(0xC4u); v60 = v26; LOBYTE(v66) = 3; if ( v26 ) v27 = sub_868C00(v26, (int)v25); else v27 = 0; LOBYTE(v66) = 0; sub_56FF80(v1 + 189, (int)v27); sub_6B2D80((_DWORD *)v1[189], v24); v28 = v61; v1[187] = v62; v29 = (_DWORD *)v1[189]; v1[188] = v28; sub_85C6F0(v29); sub_85C4D0((_DWORD *)v1[189]); sub_85BED0((_DWORD **)v1[189], 0.0, 1); v63 = 0; v30 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("Resist"); sub_8F5CC0(v30, &v63); v31 = v63; if ( !v63 ) { LABEL_22: v14 = (void (__thiscall ***)(_DWORD, signed int))v64; v66 = -1; if ( !v64 ) return 0; v15 = InterlockedDecrement((volatile LONG *)(v64 + 4)); LABEL_26: if ( !v15 ) { if ( v14 ) (**v14)(v14, 1); } return 0; } v32 = sub_8F6A70(v63[46], (int)&v56, (int)&v59, (int)&v62, (int)&v61, 0.0, 0.0); if ( !v32 ) goto LABEL_60; v33 = operator new(0xC4u); v60 = v33; LOBYTE(v66) = 4; v34 = v33 ? sub_868C00(v33, (int)v32) : 0; LOBYTE(v66) = 0; sub_56FF80(v1 + 192, (int)v34); sub_6B2D80((_DWORD *)v1[192], v31); v35 = v62; v1[191] = v61; v36 = (_DWORD *)v1[192]; v1[190] = v35; sub_85C6F0(v36); sub_85C4D0((_DWORD *)v1[192]); sub_85BED0((_DWORD **)v1[192], 0.0, 1); v63 = 0; v37 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v64 + 72))("Immune"); sub_8F5CC0(v37, &v63); v38 = v63; if ( !v63 ) goto LABEL_60; v39 = sub_8F6A70(v63[46], (int)&v56, (int)&v59, (int)&v62, (int)&v61, 0.0, 0.0); if ( v39 ) { v40 = operator new(0xC4u); v60 = v40; LOBYTE(v66) = 5; if ( v40 ) v41 = sub_868C00(v40, (int)v39); else v41 = 0; LOBYTE(v66) = 0; sub_56FF80(v1 + 195, (int)v41); sub_6B2D80((_DWORD *)v1[195], v38); v42 = v62; v1[194] = v61; v43 = (_DWORD *)v1[195]; v1[193] = v42; sub_85C6F0(v43); sub_85C4D0((_DWORD *)v1[195]); sub_85BED0((_DWORD **)v1[195], 0.0, 1); v44 = sub_4199F0(); v45 = sub_7549E0("%s\\CriticalEffect.nif", v44); v46 = sub_8D03E0(v45, 0); sub_56FF80(v1 + 207, (int)v46); v66 = -1; sub_410C00(&v64); result = 1; } else { LABEL_60: v66 = -1; sub_410C00(&v64); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006B34A0) -------------------------------------------------------- void __thiscall sub_6B34A0(_DWORD *this, void *a2, int a3) { _DWORD *v3; // esi __int16 v4; // bx char *v5; // eax char v6; // al int v7; // edi char *v8; // ecx int v9; // ecx int v10; // eax char v11; // al char v12; // [esp+Ch] [ebp-10h] char *v13; // [esp+24h] [ebp+8h] v3 = this; if ( a3 & 0x2000000 ) { sub_6B2880(this, a2); return; } v4 = (signed __int16)a2; if ( a3 & 0x1000000 ) sub_6B2790(this, a2); if ( a3 & 0x20000000 ) { sub_6B26A0(v3, a2); return; } if ( a3 & 0x100000 ) { sub_6B2970(v3, a2); return; } if ( !(a3 & 0x4000000) ) { v5 = sub_664AB0(dword_AD8C90, (__int16)a2); if ( a3 & 0x40000000 ) { v13 = v5; if ( !v5 ) return; v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 32))(v5); v7 = (unsigned __int16)a3; v12 = 1; v8 = (char *)v3; if ( v6 ) { sub_6B2470((char *)v3, v4, (unsigned __int16)a3, 0, 1); sub_8D4A70(v3 + 214, (_DWORD *)v3[207]); sub_8D4750(v3 + 214, flt_ACCFCC); *((float *)v3 + 211) = *((float *)v3 + 217); sub_8D06E0((float *)v3 + 208, flt_ACCFCC, 1); v9 = v3[197]; v10 = v3[207]; *((_BYTE *)v3 + 892) = 1; *((_WORD *)v3 + 447) = v4; (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v9 + 116))(v10, 1); sub_6BA650(&dword_AB6520, 31); if ( !sub_6AF730(&unk_B91250, "Critical_Chest", (int)v13, 2, flt_ACCFCC, 1) ) OutputDebugStringA("don't exist Critical Effect by /resmenu/critical_chest.nif"); if ( sub_64F900(v13, 307) ) (*(void (__thiscall **)(char *))(*(_DWORD *)v13 + 400))(v13); sub_85C4D0((_DWORD *)v3[207]); sub_85C6F0((_DWORD *)v3[207]); return; } LABEL_29: sub_6B2470(v8, v4, v7, 2, v12); return; } if ( a3 & 0x10000000 ) { if ( v5 ) sub_6B2470((char *)v3, (__int16)a2, (unsigned __int16)a3, 5, 0); } else { if ( !((unsigned int)sub_800000 & a3) ) { if ( !v5 ) return; v11 = (*(int (__thiscall **)(char *))(*(_DWORD *)v5 + 32))(v5); v7 = (unsigned __int16)a3; v12 = 0; v8 = (char *)v3; if ( v11 ) { sub_6B2470((char *)v3, (__int16)a2, (unsigned __int16)a3, 1, 0); return; } goto LABEL_29; } if ( v5 ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v5 + 32))(v5) ) sub_6B2470((char *)v3, (__int16)a2, (unsigned __int16)a3, 3, 0); else sub_6B2470((char *)v3, (__int16)a2, (unsigned __int16)a3, 4, 0); } } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006B36E0) -------------------------------------------------------- float *__thiscall sub_6B36E0(float *this) { float *v1; // esi v1 = this; this[3] = 0.0; this[1] = 0.0; this[2] = 0.0; *(_DWORD *)this = &PgTList::`vftable'; `eh vector constructor iterator'(this + 4, 0xCu, 60, sub_6B3B00, sub_6B1920); v1[186] = 0.0; v1[189] = 0.0; v1[192] = 0.0; v1[195] = 0.0; v1[196] = 0.0; v1[198] = 0.0; v1[199] = 0.0; v1[200] = 0.0; v1[202] = 0.0; v1[203] = 0.0; v1[204] = 0.0; v1[205] = 0.0; v1[207] = 0.0; sub_8D06C0(v1 + 208); sub_8D4790((_DWORD *)v1 + 214); return v1; } // 9F763C: using guessed type void *PgTList::`vftable'; //----- (006B37C0) -------------------------------------------------------- char __thiscall sub_6B37C0(float *this) { float *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // edi int v5; // ebx int v6; // edi int v7; // ecx _DWORD *v8; // ecx int v9; // eax _DWORD *v10; // eax int v11; // edi void *v12; // eax float *v13; // edi _DWORD *v14; // ecx int v15; // eax char result; // al void *v17; // [esp+2Ch] [ebp-14h] int v18; // [esp+30h] [ebp-10h] int v19; // [esp+3Ch] [ebp-4h] v1 = this; v2 = operator new(0x130u); v17 = v2; v3 = 0; v19 = 0; if ( v2 ) v3 = sub_911260(v2); v4 = *((_DWORD *)v1 + 196); v19 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 196) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v5 = *((_DWORD *)v1 + 196); v6 = *(_DWORD *)(v5 + 300); v7 = dword_BA46D0; v18 = dword_BA46D0; if ( v6 != dword_BA46D0 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v18; } *(_DWORD *)(v5 + 300) = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } sub_9117C0(*((float **)v1 + 196)); sub_85BED0(*((_DWORD ***)v1 + 196), 0.0, 1); v8 = *(_DWORD **)(*((_DWORD *)v1 + 196) + 296); *((_DWORD *)v1 + 197) = v8; v9 = sub_85C050(v8, 11); *(_WORD *)(v9 + 28) = *(_WORD *)(v9 + 28) & 0xFFFD | 1; v10 = operator new(0x20u); v11 = (int)v10; v17 = v10; v19 = 1; if ( v10 ) { sub_85B2B0(v10); *(_DWORD *)v11 = &NiAlphaProperty::`vftable'; *(_WORD *)(v11 + 28) = 236; *(_BYTE *)(v11 + 30) = 0; } else { v11 = 0; } *(_WORD *)(v11 + 28) |= 1u; v17 = (void *)*((_DWORD *)v1 + 197); v18 = v11; InterlockedIncrement((volatile LONG *)(v11 + 4)); v19 = 2; sub_8A6330((_DWORD *)v17 + 39, &v18); v19 = -1; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = operator new(0x60u); v17 = v12; v19 = 3; if ( v12 ) v13 = sub_85EBC0((float *)v12); else v13 = 0; ++*((_DWORD *)v13 + 22); v13[17] = 1.0; v13[18] = 1.0; v13[19] = 1.0; v14 = (_DWORD *)*((_DWORD *)v1 + 197); v19 = -1; v15 = sub_85C050(v14, 3); sub_4EAA40(*((_DWORD **)v1 + 197), v15); v18 = *((_DWORD *)v1 + 197); v17 = v13; InterlockedIncrement((volatile LONG *)v13 + 1); v19 = 4; sub_8A6330((_DWORD *)(v18 + 156), (int *)&v17); v19 = -1; if ( !InterlockedDecrement((volatile LONG *)v13 + 1) ) (**(void (__thiscall ***)(float *, signed int))v13)(v13, 1); sub_85C4D0(*((_DWORD **)v1 + 197)); sub_85C6F0(*((_DWORD **)v1 + 197)); result = sub_6B2E10(v1); if ( result ) result = sub_6B1D00(v1) != 0; return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (006B3A80) -------------------------------------------------------- void __thiscall sub_6B3A80(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; v2 = this[207]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[207] = 0; } sub_6B1BB0(v1); sub_6B2080(v1); sub_6B2AE0((int)v1, (signed int)v1); v3 = v1[196]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[196] = 0; } v1[197] = 0; } //----- (006B3B00) -------------------------------------------------------- void __thiscall sub_6B3B00(void *this) { *((_DWORD *)this + 2) = 0; } //----- (006B3B10) -------------------------------------------------------- int __thiscall sub_6B3B10(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,TextEff *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,TextEff *>::`vftable'; return result; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; // 9F762C: using guessed type void *NiTPointerListBase,TextEff *>::`vftable'; //----- (006B3B90) -------------------------------------------------------- _DWORD *__thiscall sub_6B3B90(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,TextEff *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,TextEff *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; // 9F762C: using guessed type void *NiTPointerListBase,TextEff *>::`vftable'; //----- (006B3C20) -------------------------------------------------------- int __thiscall sub_6B3C20(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,TextEff *>::`vftable'; return result; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; // 9F763C: using guessed type void *PgTList::`vftable'; //----- (006B3CA0) -------------------------------------------------------- _DWORD *__thiscall sub_6B3CA0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,TextEff *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F761C: using guessed type void *NiTListBase,TextEff *>::`vftable'; // 9F763C: using guessed type void *PgTList::`vftable'; //----- (006B3D30) -------------------------------------------------------- void __thiscall sub_6B3D30(int this) { float *v1; // eax if ( *(_DWORD *)(this + 20) && *(float *)(this + 12) >= 1.0 && *(float *)(this + 8) >= 1.0 ) { v1 = (float *)(this + 8); if ( *(float *)(this + 12) <= (double)*(float *)(this + 8) ) v1 = (float *)(this + 12); *(float *)(this + 8) = *v1 / *(float *)(this + 12); *(float *)(this + 12) = *(float *)(this + 12) / *(float *)(this + 12); } } //----- (006B3D80) -------------------------------------------------------- float *__thiscall sub_6B3D80(float *this) { float *v1; // esi float *result; // eax v1 = this; *(_DWORD *)this = &NiRefObject::`vftable'; this[1] = 0.0; InterlockedIncrement(&Addend); v1[2] = 0.0; *(_DWORD *)v1 = &CBlindEffect::`vftable'; v1[3] = 0.0; result = v1; v1[4] = 0.0; v1[5] = 0.0; v1[6] = 0.0; v1[8] = 0.0; *((_BYTE *)v1 + 28) = 0; v1[9] = 0.0; return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F765C: using guessed type void *CBlindEffect::`vftable'; //----- (006B3E10) -------------------------------------------------------- int __thiscall sub_6B3E10(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; if ( this[5] ) { if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 284))(a2, 0); result = sub_868B60((void *)v2[5]); } return result; } //----- (006B3E60) -------------------------------------------------------- void __thiscall sub_6B3E60(int this, float a2) { double v2; // st7 int v3; // esi double v4; // st6 float *v5; // ecx float *v6; // eax int v7; // ecx double v8; // st7 int v9; // ecx double v10; // st6 float v11; // ST10_4 float v12; // ST0C_4 float v13; // ST08_4 float *v14; // eax double v15; // st7 int v16; // eax int v17; // edi float v18; // [esp+14h] [ebp-28h] float v19; // [esp+18h] [ebp-24h] float v20; // [esp+1Ch] [ebp-20h] float v21; // [esp+20h] [ebp-1Ch] float v22; // [esp+24h] [ebp-18h] float v23; // [esp+28h] [ebp-14h] float v24; // [esp+2Ch] [ebp-10h] float v25; // [esp+30h] [ebp-Ch] float v26; // [esp+34h] [ebp-8h] float v27; // [esp+38h] [ebp-4h] v2 = 0.0; v3 = this; if ( *(float *)(this + 8) <= 0.0 ) { v17 = *(_DWORD *)(this + 20); if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v2 = 0.0; *(_DWORD *)(v3 + 20) = 0; } *(float *)(v3 + 16) = v2; *(_BYTE *)(v3 + 28) = 0; *(float *)(v3 + 32) = v2; *(float *)(v3 + 36) = v2; } else { v4 = a2; if ( 0.0 == *(float *)(this + 16) ) *(float *)(this + 16) = a2; *(float *)(this + 8) = *(float *)(this + 8) - (v4 - *(float *)(this + 16)); *(float *)(this + 16) = v4; if ( *(float *)(this + 8) < (double)*(float *)(this + 12) ) { v5 = &v26; v27 = (*(float *)(v3 + 12) - *(float *)(v3 + 8) + 1.0) / (*(float *)(v3 + 12) + 1.0); v26 = 0.0; v25 = 1.0; if ( v27 >= 0.0 ) v5 = &v27; v6 = v5; if ( *v5 >= 1.0 ) v6 = &v25; v7 = *(_DWORD *)(v3 + 20); v18 = 0.0; v19 = 0.0; v20 = 0.0; v21 = *v6; sub_867FF0(*(_DWORD *)(v7 + 184), 0, &v18); if ( v27 > 0.8799999952316284 ) { v25 = sqrt(v27); v27 = v25; sub_867F60(*(_DWORD *)(*(_DWORD *)(v3 + 20) + 184), 0, &v22, &v23, &v24, &v25); v8 = 0.25 * v27; v9 = *(_DWORD *)(*(_DWORD *)(v3 + 20) + 184); v10 = v27 * 0.550000011920929; v26 = v25 + v8; v11 = v26; v26 = v24 + v10; v12 = v26; v26 = v23 - v8 * 0.5; v13 = v26; v26 = v22 - 0.5 * v10; sub_867E60(v9, 0, v26, v13, v12, v11); } sub_85BED0(*(_DWORD ***)(v3 + 20), a2, 1); } if ( *(float *)(v3 + 32) < (double)*(float *)(v3 + 8) ) { a2 = *(float *)(v3 + 36) - *(float *)(v3 + 8); a2 = sqrt(a2); a2 = 1.0 / (a2 * 10.0); v22 = 0.1; v14 = &v22; if ( a2 >= 0.1000000014901161 ) v14 = &a2; v18 = 0.0; v19 = 0.0; v20 = 0.0; v15 = *v14; v16 = *(_DWORD *)(v3 + 20); v21 = v15; sub_867FF0(*(_DWORD *)(v16 + 184), 0, &v18); } } } //----- (006B40A0) -------------------------------------------------------- LONG __thiscall sub_6B40A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi v1 = this; *this = &CBlindEffect::`vftable'; v2 = this[5]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[5] = 0; } *((_BYTE *)v1 + 28) = 0; *((float *)v1 + 4) = 0.0; *((float *)v1 + 8) = 0.0; *((float *)v1 + 9) = 0.0; v3 = v1[6]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[5]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F765C: using guessed type void *CBlindEffect::`vftable'; //----- (006B4180) -------------------------------------------------------- char __thiscall sub_6B4180(float *this, float a2, float a3) { float *v3; // esi _DWORD *v4; // edi _DWORD *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // eax int v8; // edi int v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // edi volatile LONG *v12; // eax volatile LONG *v13; // edi CHAR *v14; // eax _DWORD *v15; // eax char *v16; // ecx _DWORD *v17; // edi bool v18; // cf float v20; // [esp+28h] [ebp-44h] float v21; // [esp+2Ch] [ebp-40h] float v22; // [esp+30h] [ebp-3Ch] float v23; // [esp+34h] [ebp-38h] void *v24; // [esp+38h] [ebp-34h] void *v25; // [esp+3Ch] [ebp-30h] char *Src; // [esp+40h] [ebp-2Ch] int v27; // [esp+50h] [ebp-1Ch] unsigned int v28; // [esp+54h] [ebp-18h] int v29; // [esp+68h] [ebp-4h] v3 = this; this[2] = a2; this[3] = a3; this[4] = 0.0; this[8] = a2 / 0.800000011920929; this[9] = a2; v4 = operator new(0xC4u); v25 = v4; v5 = 0; v29 = 0; if ( v4 ) { v6 = operator new(0x70u); v24 = v6; LOBYTE(v29) = 1; if ( v6 ) v7 = sub_868440(v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v7 = 0; LOBYTE(v29) = 0; v5 = sub_868C00(v4, (int)v7); } v8 = *((_DWORD *)v3 + 5); v29 = -1; if ( (_DWORD *)v8 != v5 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *((_DWORD *)v3 + 5) = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } sub_867880(*(_WORD **)(*((_DWORD *)v3 + 5) + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(*((_DWORD *)v3 + 5) + 184), 0, 0.0, 0.0, 1.0, 1.0); sub_867680(*(_DWORD *)(*((_DWORD *)v3 + 5) + 184)); sub_8681A0(*(_DWORD *)(*((_DWORD *)v3 + 5) + 184), 0, 0, -2.0, -0.69999999, 3.0, 1.7); v9 = *((_DWORD *)v3 + 5); v20 = 0.0; v21 = 0.0; v22 = 0.0; v23 = 0.1; sub_867FF0(*(_DWORD *)(v9 + 184), 0, &v20); v10 = (volatile LONG *)operator new(0x28u); v11 = v10; v25 = (void *)v10; v29 = 2; if ( v10 ) { sub_85B2B0(v10); *v11 = (volatile LONG)&NiVertexColorProperty::`vftable'; *((_WORD *)v11 + 14) = 0; *((_DWORD *)v11 + 8) = 0; *((_DWORD *)v11 + 9) = 1; } else { v11 = 0; } *((_DWORD *)v11 + 9) = 0; *((_DWORD *)v11 + 8) = 1; v25 = (void *)*((_DWORD *)v3 + 5); v24 = (void *)v11; InterlockedIncrement(v11 + 1); v29 = 3; sub_8A6330((_DWORD *)v25 + 39, (int *)&v24); v29 = -1; if ( !InterlockedDecrement(v11 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v11)(v11, 1); v12 = (volatile LONG *)operator new(0x20u); v13 = v12; v25 = (void *)v12; v29 = 4; if ( v12 ) { sub_85B2B0(v12); *v13 = (volatile LONG)&NiAlphaProperty::`vftable'; *((_WORD *)v13 + 14) = 236; *((_BYTE *)v13 + 30) = 0; } else { v13 = 0; } *((_WORD *)v13 + 14) = v13[7] & 0xFECF | 0xCF; v24 = (void *)*((_DWORD *)v3 + 5); v25 = (void *)v13; InterlockedIncrement(v13 + 1); v29 = 5; sub_8A6330((_DWORD *)v24 + 39, (int *)&v25); v29 = -1; if ( !InterlockedDecrement(v13 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); if ( !byte_ACAD5C ) sub_420410(); v14 = (CHAR *)sub_401410(byte_ACA838, "BlindEffect.dds"); v28 = 15; v27 = 0; LOBYTE(Src) = 0; sub_4018E0(&Src, v14, strlen(v14)); v29 = 6; v15 = operator new(0x44u); v25 = v15; LOBYTE(v29) = 7; if ( v15 ) { v16 = Src; if ( v28 < 0x10 ) v16 = (char *)&Src; v17 = sub_863D50(v15, v16); } else { v17 = 0; } LOBYTE(v29) = 6; sub_470EE0((_DWORD **)v17, 0); sub_45C760((_DWORD **)v17, 0); v17[7] = 2; v24 = (void *)*((_DWORD *)v3 + 5); v25 = v17; InterlockedIncrement(v17 + 1); LOBYTE(v29) = 8; sub_8A6330((_DWORD *)v24 + 39, (int *)&v25); LOBYTE(v29) = 6; if ( !InterlockedDecrement(v17 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); sub_85C4D0(*((_DWORD **)v3 + 5)); sub_85BED0(*((_DWORD ***)v3 + 5), 0.0, 1); v18 = v28 < 0x10; *((_BYTE *)v3 + 28) = 1; if ( !v18 ) operator delete(Src); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006B4570) -------------------------------------------------------- void *__thiscall sub_6B4570(void *this, char a2) { void *v2; // esi v2 = this; sub_6B40A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B45E0) -------------------------------------------------------- void __stdcall sub_6B45E0(float a1, int a2, float a3) { double v3; // st7 double v4; // st6 double v5; // st5 double v6; // st5 double v7; // rt1 double v8; // rt2 double v9; // st5 double v10; // st6 double v11; // rtt double v12; // st5 double v13; // st7 double v14; // rt0 double v15; // st5 float v16; // [esp+8h] [ebp+8h] if ( a2 ) { v3 = a1; v4 = 0.0; v5 = a3; if ( a1 >= 0.0 && v5 >= v3 ) { *(float *)a2 = a1; return; } while ( 1 ) { v8 = v5; v9 = v4; v10 = v8; if ( v9 <= v3 ) { v14 = v9; v15 = v3; v13 = v14; if ( v15 <= v10 ) { *(float *)a2 = v15; return; } v12 = v15 - v10; } else { v11 = v9; v12 = v3 + v10; v13 = v11; } v16 = v12; v6 = v13; v3 = v16; v7 = v6; v5 = v10; v4 = v7; } } } //----- (006B4690) -------------------------------------------------------- void __thiscall sub_6B4690(void *this, float a2, float a3) { int v3; // edx sub_6B45E0(a2, (int)this + 56, 360.0); sub_6B45E0(a3, v3 + 60, 90.0); } //----- (006B46D0) -------------------------------------------------------- int __thiscall sub_6B46D0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // edi int v4; // ecx int result; // eax int v6; // ecx _DWORD *i; // esi _DWORD *v8; // ST00_4 v1 = this; v2 = this[2]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = 0; } *((_BYTE *)v1 + 40) = 0; *((float *)v1 + 3) = 0.0; v1[17] = 0; *((float *)v1 + 4) = 0.0; v3 = v1 + 19; v1[5] = dword_ABD508; v1[6] = dword_ABD50C; v1[7] = dword_ABD510; v4 = dword_ABD514; *((float *)v1 + 9) = 1.0; v1[8] = v4; *((_BYTE *)v1 + 40) = 0; v1[11] = dword_BA45C0; result = dword_BA45C4; v1[12] = dword_BA45C4; v6 = dword_BA45C8; *((float *)v1 + 14) = -1.0; *((float *)v1 + 15) = -1.0; v1[13] = v6; for ( i = (_DWORD *)v1[20]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v8) ) { v8 = i; i = (_DWORD *)*i; } v3[3] = 0; v3[1] = 0; v3[2] = 0; return result; } // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006B4790) -------------------------------------------------------- int __thiscall sub_6B4790(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax void *v4; // ecx v2 = this; if ( a2 ) { result = 1; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 284))(a2, 0); v4 = (void *)v2[2]; if ( v4 ) result = sub_868B60(v4); } return result; } //----- (006B47E0) -------------------------------------------------------- void __fastcall sub_6B47E0(float a1, int a2, int a3, float a4, int a5) { double v5; // st7 float *v6; // edx float *v7; // eax double v8; // st7 float *v9; // edx float *v10; // eax int v11; // eax float v12; // [esp+0h] [ebp-4h] v12 = a1; if ( a4 >= 1.0 ) { *(_DWORD *)(LODWORD(a1) + 68) = 0; return; } if ( a5 == 2 ) { v9 = (float *)&a5; *(float *)&a5 = 0.0; v12 = 1.0; if ( a4 >= 0.0 ) v9 = &a4; v10 = v9; if ( *v9 >= 1.0 ) v10 = &v12; v8 = 1.0 - *v10; } else { if ( a5 != 3 ) { v5 = 0.0; goto LABEL_17; } v6 = (float *)&a5; *(float *)&a5 = 0.0; v12 = 1.0; if ( a4 >= 0.0 ) v6 = &a4; v7 = v6; if ( *v6 >= 1.0 ) v7 = &v12; v8 = *v7 + 0.0; } v5 = v8 * *(float *)(LODWORD(a1) + 36); LABEL_17: v11 = *(_DWORD *)(LODWORD(a1) + 8); *(float *)(LODWORD(a1) + 32) = v5; if ( v11 ) sub_867FF0(*(_DWORD *)(v11 + 184), 0, (_DWORD *)(LODWORD(a1) + 20)); } //----- (006B48A0) -------------------------------------------------------- _DWORD *__thiscall sub_6B48A0(int this, signed int a2, unsigned int a3) { int v3; // ebx _DWORD *v4; // esi _DWORD *v5; // edi _DWORD *v6; // ST00_4 signed int v7; // edi _DWORD *result; // eax _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // eax _DWORD *v12; // ecx bool v13; // zf _DWORD *v14; // ecx v3 = this; v4 = (_DWORD *)(this + 76); *(_BYTE *)(this + 40) = 0; v5 = *(_DWORD **)(this + 80); while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v6); } v7 = a2; result = (_DWORD *)(a2 - 1); v4[3] = 0; v4[1] = 0; v4[2] = 0; *(_DWORD *)(v3 + 68) = 0; switch ( (unsigned int)result ) { case 0u: a2 = 3; result = sub_6B9900(v4, &a2); break; case 1u: a2 = 2; sub_6B9900(v4, &a2); a2 = 6; result = sub_6B9900(v4, &a2); break; case 2u: case 3u: a2 = 3; sub_6B9900(v4, &a2); if ( v7 == 3 ) { a2 = 4; sub_6B9900(v4, &a2); } else if ( v7 == 4 ) { a2 = 5; sub_6B9900(v4, &a2); } a2 = 2; sub_6B9900(v4, &a2); a2 = 6; result = sub_6B9900(v4, &a2); break; case 4u: if ( a3 > 0 ) { a2 = a3; do { v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); v9[2] = 3; *v9 = 0; v9[1] = v4[2]; v10 = (_DWORD *)v4[2]; if ( v10 ) *v10 = v9; else v4[1] = v9; ++v4[3]; v4[2] = v9; v11 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); v11[2] = 2; *v11 = 0; v11[1] = v4[2]; v12 = (_DWORD *)v4[2]; if ( v12 ) *v12 = v11; else v4[1] = v11; ++v4[3]; v13 = a2-- == 1; v4[2] = v11; } while ( !v13 ); } result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); result[2] = 6; *result = 0; result[1] = v4[2]; v14 = (_DWORD *)v4[2]; if ( v14 ) { *v14 = result; ++v4[3]; } else { ++v4[3]; v4[1] = result; } v4[2] = result; break; case 5u: a2 = 3; sub_6B9900(v4, &a2); a2 = 2; result = sub_6B9900(v4, &a2); *(_BYTE *)(v3 + 40) = 1; break; default: return result; } return result; } //----- (006B4AA0) -------------------------------------------------------- LONG __thiscall sub_6B4AA0(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi _DWORD *v3; // edi _DWORD *v4; // ST04_4 int v5; // esi v1 = this; *this = &CameraEffect::`vftable'; sub_6B46D0(this); v2 = (int)(v1 + 19); v1[19] = &PgTList::`vftable'; v3 = (_DWORD *)v1[20]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v2 + 8))(v1 + 19, v4); } v1[22] = 0; v1[20] = 0; v1[21] = 0; *(_DWORD *)v2 = &NiTListBase,unsigned int>::`vftable'; v5 = v1[2]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBBDC: using guessed type void *PgTList::`vftable'; // 9F767C: using guessed type void *CameraEffect::`vftable'; //----- (006B4B70) -------------------------------------------------------- void __thiscall sub_6B4B70(_DWORD *this) { sub_6B46D0(this); sub_6930F0((int)byte_ADB468, dword_BA45C0, dword_BA45C4, dword_BA45C8, -1.0, -1.0, 0.0); } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006B4BC0) -------------------------------------------------------- void __fastcall sub_6B4BC0(int *a1, int a2, float a3) { double v3; // st7 int v4; // esi int v5; // eax bool v6; // zf float v7; // ST0C_4 float v8; // ST0C_4 float v9; // [esp+20h] [ebp+8h] v3 = a3; v4 = (int)a1; if ( a1[22] && !a1[17] ) { v5 = a1[20]; if ( !v5 ) return; a1[17] = *(_DWORD *)(v5 + 8); sub_937220(a1 + 19, a1 + 17); v3 = a3; v6 = *(_BYTE *)(v4 + 40) == 0; *(float *)(v4 + 12) = a3; if ( !v6 ) { sub_6B9900((_DWORD *)(v4 + 76), (_DWORD *)(v4 + 68)); v3 = a3; } } v9 = (v3 - *(float *)(v4 + 12)) / *(float *)(v4 + 16); switch ( *(_DWORD *)(v4 + 68) ) { case 2: v7 = v3; sub_6B47E0(v7, v4, a2, v9, 2); break; case 3: v8 = v3; sub_6B47E0(v8, v4, a2, v9, 3); break; case 4: case 5: sub_6930F0( (int)byte_ADB468, *(_DWORD *)(v4 + 44), *(_DWORD *)(v4 + 48), *(_DWORD *)(v4 + 52), *(float *)(v4 + 56), *(float *)(v4 + 60), *(float *)(v4 + 64)); if ( *(_DWORD *)(v4 + 68) == 5 ) { sub_6660A0(dword_AD8C90); sub_6930F0((int)byte_ADB468, dword_BA45C0, dword_BA45C4, dword_BA45C8, -1.0, -1.0, 0.0); } *(_DWORD *)(v4 + 68) = 0; break; case 6: sub_6B46D0((_DWORD *)v4); break; default: return; } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006B4D30) -------------------------------------------------------- char __thiscall sub_6B4D30(float *this, float a2, float a3, int a4, int a5) { float *v5; // edi _DWORD *v6; // ebx _DWORD *v7; // esi _DWORD *v8; // eax _DWORD *v9; // eax int v10; // esi int v11; // eax _DWORD *v13; // eax int v14; // esi _DWORD *v15; // eax int v16; // esi v5 = this; this[3] = a2; this[4] = a3; sub_6B48A0((int)this, a4, a5); v6 = 0; if ( !*((_DWORD *)v5 + 2) ) { v7 = operator new(0xC4u); if ( v7 ) { v8 = operator new(0x70u); if ( v8 ) v9 = sub_868440(v8, 0, 1, 0, 1, 1, 4, 1, 2, 1); else v9 = 0; v6 = sub_868C00(v7, (int)v9); } v10 = *((_DWORD *)v5 + 2); if ( (_DWORD *)v10 != v6 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v5 + 2) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } v11 = *((_DWORD *)v5 + 2); if ( !v11 ) return 0; sub_867880(*(_WORD **)(v11 + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(*((_DWORD *)v5 + 2) + 184), 0, 0.0, 0.0, 1.0, 1.0); sub_867680(*(_DWORD *)(*((_DWORD *)v5 + 2) + 184)); v13 = operator new(0x28u); v14 = (int)v13; if ( v13 ) { sub_85B2B0(v13); *(_DWORD *)v14 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v14 + 28) = 0; *(_DWORD *)(v14 + 32) = 0; *(_DWORD *)(v14 + 36) = 1; } else { v14 = 0; } if ( !v14 ) return 0; *(_DWORD *)(v14 + 32) = 1; *(_DWORD *)(v14 + 36) = 0; sub_403700(*((_DWORD **)v5 + 2), v14); v15 = operator new(0x20u); v16 = (int)v15; if ( v15 ) { sub_85B2B0(v15); *(_DWORD *)v16 = &NiAlphaProperty::`vftable'; *(_WORD *)(v16 + 28) = 236; *(_BYTE *)(v16 + 30) = 0; } else { v16 = 0; } if ( !v16 ) return 0; *(_WORD *)(v16 + 28) = *(_WORD *)(v16 + 28) & 0xFEED | 0xED; sub_403700(*((_DWORD **)v5 + 2), v16); sub_85C4D0(*((_DWORD **)v5 + 2)); } return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (006B4F60) -------------------------------------------------------- float *__thiscall sub_6B4F60(float *this) { float *v1; // esi int v2; // eax int v3; // eax v1 = this; *(_DWORD *)this = &NiRefObject::`vftable'; this[1] = 0.0; InterlockedIncrement(&Addend); *(_DWORD *)v1 = &CameraEffect::`vftable'; v1[2] = 0.0; v1[3] = 0.0; v1[4] = 0.0; *((_DWORD *)v1 + 5) = dword_ABD508; *((_DWORD *)v1 + 6) = dword_ABD50C; *((_DWORD *)v1 + 7) = dword_ABD510; v2 = dword_ABD514; v1[9] = 1.0; *((_DWORD *)v1 + 8) = v2; *((_BYTE *)v1 + 40) = 0; *((_DWORD *)v1 + 11) = dword_BA45C0; *((_DWORD *)v1 + 12) = dword_BA45C4; v3 = dword_BA45C8; v1[14] = -1.0; v1[15] = -1.0; *((_DWORD *)v1 + 13) = v3; v1[17] = 0.0; v1[18] = 0.0; v1[16] = 0.0; v1[22] = 0.0; v1[20] = 0.0; v1[21] = 0.0; *((_DWORD *)v1 + 19) = &PgTList::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9BBBDC: using guessed type void *PgTList::`vftable'; // 9F767C: using guessed type void *CameraEffect::`vftable'; // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (006B5000) -------------------------------------------------------- int __thiscall sub_6B5000(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax int v4; // edi v1 = this; v2 = (int *)this[1]; v3 = *v2; v1[1] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[2] = 0; v4 = v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v1 + 8))(v1, v2); --v1[3]; return v4; } //----- (006B5030) -------------------------------------------------------- void *__thiscall sub_6B5030(void *this, char a2) { void *v2; // esi v2 = this; sub_6B4AA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B5060) -------------------------------------------------------- __int16 __thiscall sub_6B5060(_WORD *this) { return this[262]; } //----- (006B5070) -------------------------------------------------------- __int16 __thiscall sub_6B5070(__int16 *this, __int16 a2) { __int16 *v2; // esi char *v3; // eax int v4; // edi int v5; // eax v2 = this; v3 = sub_664AB0(dword_AD8C90, this[262]); if ( v3 ) { v4 = *(_DWORD *)v2; v5 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 196))(v3); (*(void (__thiscall **)(__int16 *, int))(v4 + 28))(v2, v5); LOWORD(v3) = a2; } v2[262] = a2; return (signed __int16)v3; } //----- (006B50D0) -------------------------------------------------------- int __thiscall sub_6B50D0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax int v6; // ecx int v7; // edx v4 = this; (*(void (__thiscall **)(_DWORD *, int *))(*this + 28))(this, &a2); result = a2; v6 = a3; v7 = a4; v4[132] = a2; v4[133] = v6; v4[134] = v7; return result; } //----- (006B5140) -------------------------------------------------------- LONG __thiscall sub_6B5140(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ClientEffect::`vftable'; this[2] = &ClientEffect::`vftable'; sub_6AB5E0(&unk_B91250, (int)this); return sub_6A7FF0(v1); } // 9F7684: using guessed type void *ClientEffect::`vftable'; // 9F769C: using guessed type void *ClientEffect::`vftable'; //----- (006B51B0) -------------------------------------------------------- void __thiscall sub_6B51B0(_BYTE *this) { this[148] = 1; } //----- (006B51C0) -------------------------------------------------------- bool __thiscall sub_6B51C0(void *this) { void *v1; // esi float *v2; // eax float v3; // ST10_4 float v4; // ST14_4 float v5; // ST18_4 float *v6; // eax float v7; // ST04_4 float v8; // ST08_4 float v9; // ST0C_4 float v10; // ST2C_4 float v11; // ST2C_4 char *v12; // esi char *v13; // ecx double v14; // st7 float v15; // ST2C_4 float v17; // [esp+28h] [ebp-8h] v1 = this; v2 = (float *)(*(int (**)(void))(*(_DWORD *)this + 32))(); v3 = *v2; v4 = v2[1]; v5 = v2[2]; v6 = (float *)sub_693030(byte_ADB468); v7 = *v6 - v3; v8 = v6[1] - v4; v9 = v6[2] - v5; v10 = v8 * v8 + v7 * v7 + v9 * v9; v11 = sqrt(v10); v12 = (char *)*((_DWORD *)v1 + 91); v17 = v11; if ( v12 ) { v13 = v12; } else { v13 = dword_AD8EBC; v12 = dword_AD8EBC; } if ( sub_651680((int)v13) ) v14 = *((float *)v12 + 374) + 500.0; else v14 = *((float *)v12 + 374); v15 = v14; return v17 <= (double)v15; } //----- (006B52A0) -------------------------------------------------------- float *__thiscall sub_6B52A0(float *this, int a2, char a3, int a4) { float *v4; // esi float *result; // eax v4 = this; sub_6A83F0(this, a2, a3, a4); *(_DWORD *)v4 = &ClientEffect::`vftable'; *((_DWORD *)v4 + 2) = &ClientEffect::`vftable'; *((_WORD *)v4 + 262) = -1; v4[132] = 0.0; v4[133] = 0.0; result = v4; v4[134] = 0.0; v4[135] = 0.0; v4[136] = 0.0; v4[137] = 0.0; return result; } // 9F7684: using guessed type void *ClientEffect::`vftable'; // 9F769C: using guessed type void *ClientEffect::`vftable'; //----- (006B5300) -------------------------------------------------------- char *__userpurge sub_6B5300@(__int16 *a1@, int a2@, int a3@, float a4) { int v4; // ST08_4 int v5; // ST04_4 __int16 *v6; // esi int v7; // edi bool v8; // al char *result; // eax double v10; // st7 int (__thiscall *v11)(__int16 *, float *); // edx float v12; // [esp+Ch] [ebp-Ch] float v13; // [esp+10h] [ebp-8h] float v14; // [esp+14h] [ebp-4h] v4 = a3; v5 = a2; v6 = a1; sub_6A7C90(a4); v7 = *(_DWORD *)v6; v8 = sub_6B51C0(v6); (*(void (__thiscall **)(__int16 *, bool, int, int, _DWORD))(v7 + 84))(v6, v8, v5, v4, LODWORD(v12)); result = sub_664AB0(dword_AD8C90, v6[262]); if ( result ) { sub_653B10(result, &v12); v10 = *((float *)v6 + 135); v11 = *(int (__thiscall **)(__int16 *, float *))(*(_DWORD *)v6 + 28); v12 = COERCE_FLOAT(&v12); v13 = *((float *)v6 + 136) + v13; v14 = *((float *)v6 + 137) + v14; result = (char *)v11(v6, &v12); } return result; } // 6B5300: could not find valid save-restore pair for edi // 6B5300: could not find valid save-restore pair for esi //----- (006B5390) -------------------------------------------------------- char *__thiscall sub_6B5390(char *this, char a2) { char *v2; // esi v2 = this - 8; *(_DWORD *)v2 = &ClientEffect::`vftable'; *((_DWORD *)v2 + 2) = &ClientEffect::`vftable'; sub_6AB5E0(&unk_B91250, (int)(this - 8)); sub_6A7FF0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F7684: using guessed type void *ClientEffect::`vftable'; // 9F769C: using guessed type void *ClientEffect::`vftable'; // ABA360: using guessed type int dword_ABA360; //----- (006B5440) -------------------------------------------------------- float *__thiscall sub_6B5440(float *this, int a2, char a3, int a4) { float *v4; // esi v4 = this; sub_6B52A0(this, a2, a3, a4); *(_DWORD *)v4 = &LookAtEffect::`vftable'; *((_DWORD *)v4 + 2) = &LookAtEffect::`vftable'; return v4; } // 9F7704: using guessed type void *LookAtEffect::`vftable'; // 9F771C: using guessed type void *LookAtEffect::`vftable'; //----- (006B5470) -------------------------------------------------------- int __thiscall sub_6B5470(float *this) { float *v1; // esi float *v2; // eax double v3; // st7 float v5; // [esp+4h] [ebp-18h] float v6; // [esp+8h] [ebp-14h] float v7; // [esp+Ch] [ebp-10h] float v8; // [esp+10h] [ebp-Ch] float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] v1 = this; v2 = (float *)(*(int (**)(void))(*(_DWORD *)this + 32))(); v8 = v1[138] - *v2; v9 = v1[139] - v2[1]; v3 = v1[140] - v2[2]; v6 = v9; v10 = v3; v5 = v8; v7 = v10; sub_4430B0(&v5); return (*(int (__thiscall **)(float *, float *))(*(_DWORD *)v1 + 40))(v1, &v5); } //----- (006B54E0) -------------------------------------------------------- char *__userpurge sub_6B54E0@(float *a1@, int a2@, float a3) { __int16 *v3; // esi v3 = (__int16 *)a1; sub_6B5470(a1); return sub_6B5300(v3, a2, (int)v3, a3); } //----- (006B5500) -------------------------------------------------------- int __thiscall sub_6B5500(float *this, float a2) { int v2; // esi v2 = (int)this; sub_6B5470(this); return sub_6A3CF0(v2, a2); } //----- (006B5520) -------------------------------------------------------- _DWORD *__thiscall sub_6B5520(_DWORD *this, char a2) { _DWORD *v2; // esi v2 = this - 2; *v2 = &LookAtEffect::`vftable'; v2[2] = &LookAtEffect::`vftable'; sub_6B5140(this - 2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F7704: using guessed type void *LookAtEffect::`vftable'; // 9F771C: using guessed type void *LookAtEffect::`vftable'; //----- (006B5560) -------------------------------------------------------- double sub_6B5560() { return flt_AB5C20; } // AB5C20: using guessed type float flt_AB5C20; //----- (006B5580) -------------------------------------------------------- void *__thiscall sub_6B5580(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // eax void *result; // eax v2 = this; v3 = operator new[](4 * a2); v2[13] = v3; result = memset(v3, 0, 4 * a2); v2[12] = a2; return result; } //----- (006B55D0) -------------------------------------------------------- char __thiscall sub_6B55D0(_DWORD *this, unsigned int a2, const char *a3) { _DWORD *v3; // edi int v4; // eax _BYTE *v5; // edx const char *v6; // ecx v3 = this; v4 = this[13]; if ( v4 && a2 < this[12] ) { if ( *(_DWORD *)(v4 + 4 * a2) ) { operator delete[](*(void **)(v4 + 4 * a2)); *(_DWORD *)(v3[13] + 4 * a2) = 0; } *(_DWORD *)(v3[13] + 4 * a2) = operator new[](strlen(a3) + 1); v5 = *(_BYTE **)(v3[13] + 4 * a2); v6 = a3; do { LOBYTE(v4) = *v6; *v5++ = *v6++; } while ( (_BYTE)v4 ); } return v4; } //----- (006B5690) -------------------------------------------------------- bool __thiscall sub_6B5690(_DWORD *this, unsigned int *a2, unsigned int a3) { _DWORD *v3; // esi int v4; // eax unsigned int v6; // eax v3 = this; v4 = sub_88CE60(); v3[6] = v4; if ( !v4 ) return 0; sub_6BA370(a2, v3[1]); v6 = sub_6BA350(a2, a3); v3[1] = v6; return v6 == a3; } //----- (006B56E0) -------------------------------------------------------- int __thiscall sub_6B56E0(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // edx result = a2[1]; if ( !result ) { v3 = this[13]; if ( v3 && *a2 < this[12] ) result = *(_DWORD *)(v3 + 4 * *a2); else result = 0; } return result; } //----- (006B5710) -------------------------------------------------------- void __thiscall sub_6B5710(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi v1 = this; if ( this[13] ) { v2 = 0; if ( this[12] ) { do operator delete[](*(void **)(v1[13] + 4 * v2++)); while ( v2 < v1[12] ); } } operator delete[]((void *)v1[13]); v1[13] = 0; v1[12] = 0; } //----- (006B5760) -------------------------------------------------------- char __thiscall sub_6B5760(_BYTE *this, char a2) { char result; // al result = a2; this[32] = a2; return result; } //----- (006B5770) -------------------------------------------------------- void __thiscall sub_6B5770(float *this, float *a2, float *a3) { if ( a2 ) { if ( a3 ) { *a2 = this[10]; *a3 = flt_AB5C18; } } } // AB5C18: using guessed type float flt_AB5C18; //----- (006B57A0) -------------------------------------------------------- int __thiscall sub_6B57A0(char *this) { return (int)(this + 8); } //----- (006B57B0) -------------------------------------------------------- int __thiscall sub_6B57B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B5710(this); return (*(int (__thiscall **)(_DWORD *))(*v1 + 60))(v1); } //----- (006B57D0) -------------------------------------------------------- int __cdecl sub_6B57D0(float a1) { _DWORD *v1; // esi float *v2; // ecx int (__stdcall *v3)(_DWORD); // edx int result; // eax int v5; // [esp+4h] [ebp-24h] _DWORD *v6; // [esp+14h] [ebp-14h] int *v7; // [esp+18h] [ebp-10h] int v8; // [esp+24h] [ebp-4h] float v9; // [esp+30h] [ebp+8h] v7 = &v5; v1 = (_DWORD *)dword_AB5C28; flt_AB5C20 = a1; while ( v1 ) { v2 = (float *)v1[2]; v9 = v2[9]; v1 = (_DWORD *)*v1; v3 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 40); v8 = 0; v6 = v1; result = v3(LODWORD(v9)); v8 = -1; } return result; } // AB5C20: using guessed type float flt_AB5C20; // AB5C28: using guessed type int dword_AB5C28; //----- (006B5870) -------------------------------------------------------- int sub_6B5870() { _DWORD *v0; // esi int v1; // ecx int (*v2)(void); // edx int result; // eax int v4; // [esp+0h] [ebp-24h] _DWORD *v5; // [esp+10h] [ebp-14h] int *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v6 = &v4; v0 = (_DWORD *)dword_AB5C28; while ( v0 ) { v1 = v0[2]; v0 = (_DWORD *)*v0; v2 = *(int (**)(void))(*(_DWORD *)v1 + 36); v7 = 0; v5 = v0; result = v2(); v7 = -1; } return result; } // AB5C28: using guessed type int dword_AB5C28; //----- (006B58F0) -------------------------------------------------------- int __cdecl sub_6B58F0(float a1) { _DWORD *v1; // esi int v2; // ecx int (__stdcall *v3)(_DWORD); // edx int result; // eax int v5; // [esp+4h] [ebp-24h] _DWORD *v6; // [esp+14h] [ebp-14h] int *v7; // [esp+18h] [ebp-10h] int v8; // [esp+24h] [ebp-4h] v7 = &v5; v1 = (_DWORD *)dword_AB5C28; while ( v1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; v3 = *(int (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 44); v8 = 0; v6 = v1; result = v3(LODWORD(a1)); v8 = -1; } return result; } // AB5C28: using guessed type int dword_AB5C28; //----- (006B5980) -------------------------------------------------------- void sub_6B5980() { int v0; // eax int v1; // ecx int v2; // esi while ( dword_AB5C30 ) { v0 = dword_AB5C28; v1 = *(_DWORD *)dword_AB5C28; dword_AB5C28 = v1; if ( v1 ) *(_DWORD *)(v1 + 4) = 0; else dword_AB5C2C = 0; v2 = *(_DWORD *)(v0 + 8); off_AB5C24[2](&off_AB5C24, v0); --dword_AB5C30; if ( v2 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 72))(v2, 1); } } // AB5C24: using guessed type int (__thiscall **off_AB5C24)(void *, char); // AB5C28: using guessed type int dword_AB5C28; // AB5C2C: using guessed type int dword_AB5C2C; // AB5C30: using guessed type int dword_AB5C30; //----- (006B59E0) -------------------------------------------------------- void __cdecl sub_6B59E0(int a1) { _DWORD *v1; // esi int v2; // ecx void (__stdcall *v3)(int); // eax int v4; // [esp+0h] [ebp-24h] _DWORD *v5; // [esp+10h] [ebp-14h] int *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v6 = &v4; v1 = (_DWORD *)dword_AB5C28; while ( v1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; v3 = *(void (__stdcall **)(int))(*(_DWORD *)v2 + 68); v7 = 0; v5 = v1; v3(a1); v7 = -1; } } // AB5C28: using guessed type int dword_AB5C28; //----- (006B5AB7) -------------------------------------------------------- #error "6B5AD4: positive sp value has been found (funcsize=0)" //----- (006B5B37) -------------------------------------------------------- #error "6B5B54: positive sp value has been found (funcsize=0)" //----- (006B5B60) -------------------------------------------------------- BOOL __thiscall sub_6B5B60(_DWORD *this) { return this[5] >= this[1]; } //----- (006B5B70) -------------------------------------------------------- bool __thiscall sub_6B5B70(int this, float *a2) { double v2; // st7 _DWORD *v3; // ecx float v4; // ST18_4 float *v5; // eax float v6; // ST00_4 float v7; // ST04_4 float v8; // ST08_4 float v10; // [esp+24h] [ebp+8h] v2 = *(float *)(this + 56); v3 = *(_DWORD **)(this + 24); if ( !v3 ) return 0; v5 = (float *)sub_88D3D0(v3); v6 = v5[35] - *a2; v7 = v5[36] - a2[1]; v8 = v5[37] - a2[2]; v10 = v6 * v6 + v7 * v7 + v8 * v8; v4 = v2 * v2; return v4 < (double)v10; } //----- (006B5D00) -------------------------------------------------------- int __thiscall sub_6B5D00(int this, float a2) { int **v2; // esi int (__stdcall *v3)(_DWORD); // edx float v4; // ST08_4 int result; // eax v2 = *(int ***)(this + 12); for ( *(float *)(this + 36) = a2; v2; result = v3(LODWORD(v4)) ) { v3 = *(int (__stdcall **)(_DWORD))(*v2[2] + 188); v2 = (int **)*v2; v4 = flt_AB5C20 * a2; } return result; } // AB5C20: using guessed type float flt_AB5C20; //----- (006B5D50) -------------------------------------------------------- int *__thiscall sub_6B5D50(int this, int *a2, int a3) { int v3; // esi int *result; // eax int v5; // ecx int v6; // eax v3 = this; if ( *(_BYTE *)(this + 32) && (v5 = *(_DWORD *)(this + 24)) != 0 && unknown_libname_27(v5) ) { v6 = (*(int (__stdcall **)(int))(**(_DWORD **)(v3 + 24) + 68))(a3); *a2 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); result = a2; } else { result = a2; *a2 = 0; } return result; } // 88D8F0: using guessed type int __thiscall unknown_libname_27(_DWORD); //----- (006B5E10) -------------------------------------------------------- int __thiscall sub_6B5E10(_DWORD *this) { int **i; // esi int (*v2)(void); // edx int result; // eax for ( i = (int **)this[3]; i; result = v2() ) { v2 = *(int (**)(void))(*i[2] + 220); i = (int **)*i; } return result; } //----- (006B5E30) -------------------------------------------------------- bool __thiscall sub_6B5E30(_DWORD *this, float *a2) { bool result; // al if ( this[5] < this[1] ) result = sub_6B5B70((int)this, a2) == 0; else result = 0; return result; } //----- (006B5E90) -------------------------------------------------------- int __thiscall sub_6B5E90(int this, float a2) { int **v2; // esi int (__stdcall *v3)(_DWORD, _DWORD); // edx int result; // eax v2 = *(int ***)(this + 12); for ( *(float *)(this + 40) = a2; v2; result = v3(LODWORD(a2), LODWORD(flt_AB5C18)) ) { v3 = *(int (__stdcall **)(_DWORD, _DWORD))(*v2[2] + 180); v2 = (int **)*v2; } return result; } // AB5C18: using guessed type float flt_AB5C18; //----- (006B5ED0) -------------------------------------------------------- int __thiscall sub_6B5ED0(int this, float a2) { int v2; // edi int **v3; // esi int (__stdcall *v4)(_DWORD, _DWORD); // edx int result; // eax v2 = this; v3 = *(int ***)(this + 12); for ( *(float *)(this + 44) = a2; v3; result = v4(*(float *)(v2 + 40), *(float *)(v2 + 44)) ) { v4 = *(int (__stdcall **)(_DWORD, _DWORD))(*v3[2] + 180); v3 = (int **)*v3; } return result; } //----- (006B5F10) -------------------------------------------------------- char __thiscall sub_6B5F10(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v4; // esi _DWORD *v5; // ebx _DWORD *v6; // ecx int v7; // ST0C_4 v2 = this; if ( !this[15] ) return 0; v4 = 0; if ( !this[12] ) return 1; v5 = a2; while ( 1 ) { v6 = *(_DWORD **)(v2[15] + 4 * v4); if ( !v6 || v6 == v5 ) goto LABEL_9; v7 = sub_88E6A0(v6); if ( v7 == sub_88E6A0(v5) ) return 0; v5 = a2; LABEL_9: if ( (unsigned int)++v4 >= v2[12] ) return 1; } } //----- (006B5F80) -------------------------------------------------------- int __thiscall sub_6B5F80(_DWORD *this, unsigned int a2) { int v2; // eax int result; // eax v2 = this[15]; if ( v2 && a2 < this[12] ) result = *(_DWORD *)(v2 + 4 * a2); else result = 0; return result; } //----- (006B5FD0) -------------------------------------------------------- void __thiscall sub_6B5FD0(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax char *v3; // edi v1 = this; sub_6B5710(this); (*(void (__thiscall **)(_DWORD *))(*v1 + 60))(v1); v2 = (char *)v1[15]; if ( v2 ) { v3 = v2 - 4; `eh vector destructor iterator'(v2, 4u, *((_DWORD *)v2 - 1), sub_410C00); operator delete[](v3); } v1[15] = 0; } //----- (006B6010) -------------------------------------------------------- unsigned int __thiscall sub_6B6010(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi _DWORD *v3; // ST00_4 unsigned int result; // eax int v5; // ecx int v6; // esi _DWORD *v7; // edi int v8; // [esp+Ch] [ebp-4h] v1 = this; (*(void (**)(void))(*this + 64))(); v2 = (_DWORD *)v1[3]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[2] + 8))(v1 + 2, v3); } result = 0; v1[5] = 0; v1[3] = 0; v1[4] = 0; if ( v1[15] ) { v8 = 0; if ( v1[12] > 0u ) { do { v5 = v1[15]; v6 = *(_DWORD *)(v5 + 4 * result); v7 = (_DWORD *)(v5 + 4 * result); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } result = v8; *v7 = 0; } v8 = ++result; } while ( result < v1[12] ); } } return result; } //----- (006B60A0) -------------------------------------------------------- void __thiscall sub_6B60A0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // ebx int v5; // [esp+4h] [ebp-4h] v1 = this; if ( this[15] ) { v2 = 0; if ( this[12] ) { do { v3 = *(_DWORD *)(v1[15] + 4 * v2); if ( v3 ) { if ( *(_DWORD *)(v3 + 32) ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(*(_DWORD *)(v1[15] + 4 * v2) + 32) + 120))( &v5, *(_DWORD *)(v1[15] + 4 * v2)); if ( v5 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } } ++v2; } while ( v2 < v1[12] ); } } } //----- (006B6160) -------------------------------------------------------- char __thiscall sub_6B6160(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ecx int v4; // ebx v2 = (_DWORD *)this[20]; if ( !v2 ) return 1; while ( 1 ) { v3 = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( v3 != a2 ) { v4 = sub_88E6A0(v3); if ( v4 == sub_88E6A0(a2) ) break; } } if ( !v2 ) return 1; } return 0; } //----- (006B61B0) -------------------------------------------------------- int __thiscall sub_6B61B0(_DWORD *this) { _DWORD *v1; // edi int result; // eax _DWORD *i; // esi _DWORD *v4; // ST00_4 _DWORD *j; // esi _DWORD *v6; // ST00_4 _DWORD *k; // esi _DWORD *v8; // ST00_4 _DWORD *l; // esi _DWORD *v10; // ST00_4 _DWORD *m; // esi _DWORD *v12; // ST00_4 v1 = this; result = (*(int (**)(void))(*this + 64))(); for ( i = (_DWORD *)v1[3]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(v1[2] + 8))(v1 + 2, v4) ) { v4 = i; i = (_DWORD *)*i; } v1[5] = 0; v1[3] = 0; v1[4] = 0; for ( j = (_DWORD *)v1[16]; j; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(v1[15] + 8))(v1 + 15, v6) ) { v6 = j; j = (_DWORD *)*j; } v1[18] = 0; v1[16] = 0; v1[17] = 0; for ( k = (_DWORD *)v1[20]; k; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(v1[19] + 8))(v1 + 19, v8) ) { v8 = k; k = (_DWORD *)*k; } v1[22] = 0; v1[20] = 0; v1[21] = 0; for ( l = (_DWORD *)v1[24]; l; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(v1[23] + 8))(v1 + 23, v10) ) { v10 = l; l = (_DWORD *)*l; } v1[26] = 0; v1[24] = 0; v1[25] = 0; for ( m = (_DWORD *)v1[28]; m; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(v1[27] + 8))(v1 + 27, v12) ) { v12 = m; m = (_DWORD *)*m; } v1[30] = 0; v1[28] = 0; v1[29] = 0; return result; } //----- (006B6280) -------------------------------------------------------- void __thiscall sub_6B6280(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx void (__thiscall ***v4)(_DWORD, signed int); // edi int v5; // [esp+4h] [ebp-4h] v1 = (_DWORD *)this[20]; while ( v1 ) { v2 = v1[2]; v3 = *(_DWORD *)(v2 + 32); v1 = (_DWORD *)*v1; if ( v3 ) { (*(void (__stdcall **)(int *, int))(*(_DWORD *)v3 + 120))(&v5, v2); if ( v5 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } } } //----- (006B62E0) -------------------------------------------------------- int __thiscall sub_6B62E0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // edi float *v4; // esi v2 = (int)this; v3 = (_DWORD *)this[3]; while ( v3 ) { v4 = (float *)v3[2]; v3 = (_DWORD *)*v3; if ( !(*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 116))(v4) && sub_6B5B70(v2, v4 + 35) ) (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 220))(v4); } return (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 48))(v2); } //----- (006B6340) -------------------------------------------------------- void __thiscall sub_6B6340(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int (__thiscall *v3)(_DWORD *); // edx int v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // esi _DWORD *v6; // [esp+4h] [ebp-Ch] _DWORD *v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v1 = (_DWORD *)this[3]; v6 = this; while ( v1 ) { v2 = (_DWORD *)v1[2]; v3 = *(int (__thiscall **)(_DWORD *))(*v2 + 228); v7 = v1; v1 = (_DWORD *)*v1; if ( v3(v2) != 1 ) { v4 = v2[8]; if ( v4 ) { (*(void (__stdcall **)(int *, _DWORD *))(*(_DWORD *)v4 + 120))(&v8, v2); if ( v8 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } sub_403620(v6 + 2, &v7); } } } //----- (006B63D0) -------------------------------------------------------- volatile LONG **__thiscall sub_6B63D0(float *this, volatile LONG **a2, float a3, int a4) { volatile LONG *v4; // esi float *v5; // edi int v6; // eax void (__thiscall *v7)(volatile LONG *, _DWORD); // eax void (__stdcall ***v9)(_DWORD); // [esp+34h] [ebp-124h] void (__stdcall ***v10)(signed int); // [esp+38h] [ebp-120h] int v11; // [esp+3Ch] [ebp-11Ch] float v12; // [esp+40h] [ebp-118h] int v13; // [esp+44h] [ebp-114h] char v14; // [esp+48h] [ebp-110h] int v15; // [esp+154h] [ebp-4h] v4 = 0; v11 = 0; v5 = this; v12 = a3; v13 = 0; v15 = 1; if ( *((_DWORD *)this + 6) && *((_BYTE *)this + 32) ) { v6 = *(_DWORD *)(**(int (__stdcall ***)(void (__stdcall ****)(_DWORD), _DWORD))this)(&v9, 0); if ( v6 ) { v4 = (volatile LONG *)v6; v13 = v6; InterlockedIncrement((volatile LONG *)(v6 + 4)); } LOBYTE(v15) = 1; if ( v9 ) { v10 = v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v10 ) (**v10)(1); } } if ( v4 ) { if ( !byte_ACAD5C ) sub_420410(); sprintf(&v14, "%s%s", byte_ACA940, v12); (*(void (__thiscall **)(volatile LONG *, char *))(*v4 + 136))(v4, &v14); (*(void (__thiscall **)(volatile LONG *, int))(*v4 + 128))(v4, a4); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v4 + 148))(v4) ) { v7 = *(void (__thiscall **)(volatile LONG *, _DWORD))(*v4 + 188); v12 = v5[9] * flt_AB5C20; v7(v4, LODWORD(v12)); (*(void (__thiscall **)(volatile LONG *, float, _DWORD))(*v4 + 180))(v4, v5[10], LODWORD(flt_AB5C18)); *a2 = v4; InterlockedIncrement(v4 + 1); } else { if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); v13 = 0; *a2 = 0; } v11 = 1; LOBYTE(v15) = 0; sub_410C00(&v13); } else { *a2 = 0; } } else { *a2 = 0; } return a2; } // AB5C18: using guessed type float flt_AB5C18; // AB5C20: using guessed type float flt_AB5C20; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006B65C0) -------------------------------------------------------- volatile LONG **__thiscall sub_6B65C0(float *this, volatile LONG **a2, float a3, int a4) { volatile LONG *v4; // esi float *v5; // edi int v6; // eax void (__thiscall *v7)(volatile LONG *, _DWORD); // edx void (__stdcall ***v9)(signed int); // [esp+2Ch] [ebp-124h] int v10; // [esp+30h] [ebp-120h] int v11; // [esp+34h] [ebp-11Ch] int v12; // [esp+38h] [ebp-118h] float v13; // [esp+3Ch] [ebp-114h] char v14; // [esp+40h] [ebp-110h] int v15; // [esp+14Ch] [ebp-4h] v4 = 0; v11 = 0; v5 = this; v13 = a3; v12 = 0; v15 = 1; if ( !*((_DWORD *)this + 6) || !*((_BYTE *)this + 32) ) { *a2 = 0; return a2; } v6 = *(_DWORD *)(**(int (__stdcall ***)(int *, signed int))this)(&v10, 1); if ( v6 ) { v4 = (volatile LONG *)v6; v12 = v6; InterlockedIncrement((volatile LONG *)(v6 + 4)); } LOBYTE(v15) = 1; if ( v10 ) { v9 = (void (__stdcall ***)(signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v9 ) (**v9)(1); } } if ( !v4 ) goto LABEL_18; if ( !byte_ACAD5C ) sub_420410(); sprintf(&v14, "%s%s", byte_ACA940, v13); (*(void (__thiscall **)(volatile LONG *, char *))(*v4 + 136))(v4, &v14); (*(void (__thiscall **)(volatile LONG *, int))(*v4 + 128))(v4, a4); if ( !(*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v4 + 148))(v4) || !(_BYTE)a4 && !sub_88E6A0(v4) ) { if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); LABEL_18: *a2 = 0; return a2; } v7 = *(void (__thiscall **)(volatile LONG *, _DWORD))(*v4 + 188); v13 = v5[9] * flt_AB5C20; v7(v4, LODWORD(v13)); *a2 = v4; InterlockedIncrement(v4 + 1); v11 = 1; LOBYTE(v15) = 0; sub_410C00(&v12); return a2; } // AB5C20: using guessed type float flt_AB5C20; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006B6790) -------------------------------------------------------- void __thiscall sub_6B6790(_DWORD *this, int a2) { _DWORD *v2; // edi void *v3; // eax int v4; // ecx int *v5; // eax int v6; // ebx v2 = this; v3 = operator new[](4 * a2); v2[13] = v3; memset(v3, 0, 4 * a2); v2[12] = a2; v4 = 4 * a2 | -((unsigned __int64)(unsigned int)a2 >> 30 != 0); v5 = (int *)operator new[]((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { v6 = (int)(v5 + 1); *v5 = a2; `eh vector constructor iterator'( v5 + 1, 4u, a2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v2[15] = v6; } else { v2[15] = 0; } } //----- (006B6870) -------------------------------------------------------- int __thiscall sub_6B6870(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // edi int result; // eax int v6; // ecx int v7; // eax int *v8; // eax v3 = this; v4 = a2; if ( a2[1] ) return 0; v6 = this[15]; if ( !v6 || *a2 >= v3[12] ) return 0; result = *(_DWORD *)(v6 + 4 * *a2); if ( result ) return result; v7 = sub_6B56E0(v3, a2); if ( !v7 ) return 0; v8 = (int *)(*(int (__thiscall **)(_DWORD *, _DWORD **, int, int))(*v3 + 8))(v3, &a2, v7, a3); sub_65AD50((int *)(v3[15] + 4 * *v4), v8); sub_410C00(&a2); return *(_DWORD *)(v3[15] + 4 * *v4); } //----- (006B6930) -------------------------------------------------------- int __thiscall sub_6B6930(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // edi int result; // eax int v6; // ecx int v7; // eax int *v8; // eax v3 = this; v4 = a2; if ( a2[1] ) return 0; v6 = this[15]; if ( !v6 || *a2 >= v3[12] ) return 0; result = *(_DWORD *)(v6 + 4 * *a2); if ( result ) return result; v7 = sub_6B56E0(v3, a2); if ( !v7 ) return 0; v8 = (int *)(*(int (__thiscall **)(_DWORD *, _DWORD **, int, int))(*v3 + 4))(v3, &a2, v7, a3); sub_65AD50((int *)(v3[15] + 4 * *v4), v8); sub_410C00(&a2); return *(_DWORD *)(v3[15] + 4 * *v4); } //----- (006B69F0) -------------------------------------------------------- int __thiscall sub_6B69F0(int this, int a2, float a3, int a4) { int v4; // edi int v6; // eax int v7; // esi float v8; // [esp+1Ch] [ebp+Ch] v4 = this; if ( !*(_BYTE *)(this + 32) || *(_DWORD *)(this + 20) >= *(_DWORD *)(this + 4) ) return 0; v6 = sub_6B6870((_DWORD *)this, (_DWORD *)a2, a4); v7 = v6; a4 = v6; if ( !v6 ) return 0; (*(void (__thiscall **)(int, bool))(*(_DWORD *)v6 + 208))(v6, LOBYTE(a3) == 0); v8 = *(float *)(v4 + 36) * flt_AB5C20; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 188))(v7, LODWORD(v8)); (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 216))(v7); sub_6B9900((_DWORD *)(v4 + 8), &a4); return v7; } // AB5C20: using guessed type float flt_AB5C20; //----- (006B6A90) -------------------------------------------------------- _DWORD *__thiscall sub_6B6A90(_BYTE *this, _DWORD *a2, _DWORD *a3, char a4) { _DWORD *v4; // edi _DWORD *v6; // ebx int v7; // eax _DWORD *v8; // esi v4 = this; if ( !this[32] ) return 0; v6 = a3; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)this + 20))(a3) ) return 0; v7 = sub_6B6930(v4, a2, 0); v8 = (_DWORD *)v7; a3 = (_DWORD *)v7; if ( !v7 ) return 0; (*(void (__thiscall **)(int, bool))(*(_DWORD *)v7 + 208))(v7, a4 == 0); (*(void (__thiscall **)(_DWORD *))(*v8 + 216))(v8); v8[35] = *v6; v8[36] = v6[1]; v8[37] = v6[2]; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v8 + 252))(v8, 0.0); sub_6B9900(v4 + 2, &a3); return v8; } //----- (006B6B40) -------------------------------------------------------- _DWORD *__userpurge sub_6B6B40@(_BYTE *a1@, int a2@, _DWORD *a3, _DWORD **a4, char a5) { _DWORD *v5; // ebx _DWORD **v7; // edi int v8; // eax _DWORD *v9; // esi _DWORD **v10; // ecx int v11; // [esp+20h] [ebp-Ch] v5 = a1; if ( !a1[32] ) return 0; v7 = a4; if ( !a4 || !(*(unsigned __int8 (__stdcall **)(_DWORD **))(*(_DWORD *)a1 + 20))(a4 + 35) ) return 0; v11 = a2; v8 = sub_6B6930(v5, a3, 0); v9 = (_DWORD *)v8; a4 = (_DWORD **)v8; if ( !v8 ) return 0; (*(void (__thiscall **)(int, bool, int))(*(_DWORD *)v8 + 208))(v8, a5 == 0, v11); v10 = (_DWORD **)v9[8]; if ( v7 != v10 ) { if ( v10 ) { ((void (__stdcall *)(char *, _DWORD *))(*v10)[30])(&a5, v9); sub_410C00(&a5); } ((void (__thiscall *)(_DWORD **, _DWORD *, _DWORD))(*v7)[29])(v7, v9, 0); } sub_85BED0(v7, 0.0, 1); (*(void (__thiscall **)(_DWORD *))(*v9 + 216))(v9); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v9 + 252))(v9, 0.0); sub_6B9900(v5 + 2, &a4); return v9; } // 6B6B40: could not find valid save-restore pair for esi //----- (006B6C20) -------------------------------------------------------- void __thiscall sub_6B6C20(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // ecx int v5; // ecx _DWORD *v6; // eax int v7; // edx _DWORD *v8; // ecx int v9; // edx int v10; // esi _DWORD *v11; // edi v2 = a2; v3 = this; if ( !a2[1] ) { v4 = this[15]; if ( v4 ) { if ( *a2 < v3[12] ) { v5 = *(_DWORD *)(v4 + 4 * *a2); if ( v5 ) { if ( (*(int (**)(void))(*(_DWORD *)v5 + 228))() == 1 ) (*(void (**)(void))(**(_DWORD **)(v3[15] + 4 * *v2) + 220))(); v6 = (_DWORD *)v3[3]; if ( v6 ) { v7 = *(_DWORD *)(v3[15] + 4 * *v2); while ( 1 ) { v8 = v6 + 2; a2 = v6; v6 = (_DWORD *)*v6; if ( *v8 == v7 ) break; if ( !v6 ) goto LABEL_13; } sub_403620(v3 + 2, &a2); } LABEL_13: v9 = v3[15]; v10 = *(_DWORD *)(v9 + 4 * *v2); v11 = (_DWORD *)(v9 + 4 * *v2); if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); } *v11 = 0; } } } } } } //----- (006B6CE0) -------------------------------------------------------- _DWORD *__thiscall sub_6B6CE0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *v4; // edi _DWORD *v5; // ebx _DWORD *result; // eax int v7; // edi int v8; // ecx _DWORD *v9; // esi _DWORD *v10; // ebx _DWORD *v11; // [esp+Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)this[16]; v4 = a2; v11 = this; if ( v3 ) { while ( 1 ) { v5 = (_DWORD *)v3[2]; v3 = (_DWORD *)*v3; result = (_DWORD *)sub_88E6A0(v4); if ( v5 == result ) break; if ( !v3 ) { v2 = v11; goto LABEL_5; } } v9 = (_DWORD *)v11[16]; if ( v9 ) { while ( 1 ) { v10 = (_DWORD *)v9[2]; a2 = v9; v9 = (_DWORD *)*v9; result = (_DWORD *)sub_88E6A0(v4); if ( result == v10 ) break; if ( !v9 ) return result; } result = sub_6B78A0(v11 + 15, &a2); } } else { LABEL_5: v7 = sub_88E6A0(v4); result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[15] + 4))(v2 + 15); result[2] = v7; result[1] = 0; *result = v2[16]; v8 = v2[16]; if ( v8 ) { *(_DWORD *)(v8 + 4) = result; ++v2[18]; } else { ++v2[18]; v2[17] = result; } v2[16] = result; } return result; } //----- (006B6DB0) -------------------------------------------------------- _DWORD *__thiscall sub_6B6DB0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; *this = &SoundGroup::`vftable'; this[5] = 0; this[3] = 0; this[4] = 0; this[2] = &NiTList::`vftable'; *((float *)this + 14) = 5000.0; this[13] = 0; this[12] = 0; *((float *)this + 9) = 1.0; *((float *)this + 10) = flt_AB5C1C; *((_BYTE *)this + 32) = 0; v2 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB5C24[1])(&off_AB5C24); v2[2] = v1; *v2 = 0; v2[1] = dword_AB5C2C; if ( dword_AB5C2C ) *(_DWORD *)dword_AB5C2C = v2; else dword_AB5C28 = (int)v2; ++dword_AB5C30; dword_AB5C2C = (int)v2; return v1; } // 9F77EC: using guessed type void *NiTList::`vftable'; // 9F7804: using guessed type void *SoundGroup::`vftable'; // AB5C1C: using guessed type float flt_AB5C1C; // AB5C24: using guessed type int (__thiscall **off_AB5C24)(void *, char); // AB5C28: using guessed type int dword_AB5C28; // AB5C2C: using guessed type int dword_AB5C2C; // AB5C30: using guessed type int dword_AB5C30; //----- (006B6E70) -------------------------------------------------------- _DWORD *__thiscall sub_6B6E70(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax _DWORD *v3; // ecx int v4; // edx _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST00_4 int v8; // [esp+14h] [ebp-10h] int i; // [esp+20h] [ebp-4h] v1 = this; *this = &SoundGroup::`vftable'; i = 0; sub_6B5710(this); result = (_DWORD *)dword_AB5C28; if ( dword_AB5C28 ) { while ( 1 ) { v3 = result + 2; v4 = (int)result; result = (_DWORD *)*result; if ( v1 == (_DWORD *)*v3 ) break; if ( !result ) goto LABEL_4; } } else { LABEL_4: v4 = 0; } v8 = v4; if ( v4 ) result = (_DWORD *)sub_403620(&off_AB5C24, (_DWORD **)&v8); v5 = v1 + 2; v1[2] = &NiTPointerListBase,NiAudioSource *>::`vftable'; v6 = (_DWORD *)v1[3]; for ( i = 1; v6; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7) ) { v7 = v6; v6 = (_DWORD *)*v6; } v5[3] = 0; v5[1] = 0; v5[2] = 0; *v5 = &NiTListBase,NiAudioSource *>::`vftable'; return result; } // 9F77AC: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; // 9F77CC: using guessed type void *NiTPointerListBase,NiAudioSource *>::`vftable'; // 9F7804: using guessed type void *SoundGroup::`vftable'; // AB5C24: using guessed type int (__thiscall **off_AB5C24)(void *, char); // AB5C28: using guessed type int dword_AB5C28; //----- (006B6F30) -------------------------------------------------------- _DWORD *__thiscall sub_6B6F30(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B6DB0(this); *v1 = &SoundGroupStatic::`vftable'; v1[15] = 0; return v1; } // 9F7854: using guessed type void *SoundGroupStatic::`vftable'; //----- (006B6F50) -------------------------------------------------------- _DWORD *__thiscall sub_6B6F50(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax char *v3; // edi v1 = this; *this = &SoundGroupStatic::`vftable'; sub_6B5710(this); (*(void (__thiscall **)(_DWORD *))(*v1 + 60))(v1); v2 = (char *)v1[15]; if ( v2 ) { v3 = v2 - 4; `eh vector destructor iterator'(v2, 4u, *((_DWORD *)v2 - 1), sub_410C00); operator delete[](v3); } v1[15] = 0; return sub_6B6E70(v1); } // 9F7854: using guessed type void *SoundGroupStatic::`vftable'; //----- (006B6FE0) -------------------------------------------------------- _DWORD *__thiscall sub_6B6FE0(int this, _DWORD *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx _DWORD *v7; // esi _DWORD *v9; // [esp+8h] [ebp-10h] int v10; // [esp+14h] [ebp-4h] v4 = (_DWORD *)this; if ( *(_BYTE *)(this + 32) ) { if ( *(_DWORD *)(this + 20) < *(_DWORD *)(this + 4) ) { v5 = a2[1]; if ( v5 || (v6 = *(_DWORD *)(this + 52)) != 0 && *a2 < v4[12] && (v5 = *(_DWORD *)(v6 + 4 * *a2)) != 0 ) { (*(void (__thiscall **)(_DWORD *, _DWORD **, int, _DWORD))(*v4 + 8))(v4, &a2, v5, 0); v10 = 0; if ( a2 ) { (*(void (**)(void))(*a2 + 216))(); v9 = a2; sub_6B9900(v4 + 2, &v9); sub_8B8EC0(v4 + 19, (int *)&a2); sub_6B6CE0(v4, a2); v7 = a2; v10 = -1; sub_410C00(&a2); return v7; } v10 = -1; sub_410C00(&a2); } } } return 0; } //----- (006B70F0) -------------------------------------------------------- _DWORD *__thiscall sub_6B70F0(_BYTE *this, _DWORD *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD **v5; // edi int v6; // eax int v7; // ecx _DWORD *v8; // esi v4 = this; if ( this[32] ) { v5 = (_DWORD **)a3; if ( a3 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)this + 20))(a3 + 35) ) { v6 = a2[1]; if ( v6 || (v7 = v4[13]) != 0 && *a2 < v4[12] && (v6 = *(_DWORD *)(v7 + 4 * *a2)) != 0 ) { (*(void (__thiscall **)(_DWORD *, _DWORD **, int, _DWORD))(*v4 + 4))(v4, &a3, v6, 0); if ( a3 ) { (*(void (__stdcall **)(bool))(*a3 + 208))((_BYTE)a4 == 0); ((void (__thiscall *)(_DWORD **, _DWORD *, _DWORD))(*v5)[29])(v5, a3, 0); sub_85BED0(v5, 0.0, 1); (*(void (**)(void))(*a3 + 216))(); (*(void (__stdcall **)(_DWORD))(*a3 + 252))(0.0); a4 = a3; sub_6B9900(v4 + 2, &a4); sub_8B8EC0(v4 + 19, (int *)&a3); sub_6B6CE0(v4, a3); v8 = a3; sub_410C00(&a3); return v8; } sub_410C00(&a3); } } } } return 0; } //----- (006B7260) -------------------------------------------------------- _DWORD *__thiscall sub_6B7260(_BYTE *this, _DWORD *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // edi int v6; // eax int v7; // ecx _DWORD *v8; // eax _DWORD *v9; // esi v4 = this; if ( this[32] ) { v5 = a3; if ( (*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)this + 20))(a3) ) { v6 = a2[1]; if ( v6 || (v7 = v4[13]) != 0 && *a2 < v4[12] && (v6 = *(_DWORD *)(v7 + 4 * *a2)) != 0 ) { (*(void (__thiscall **)(_DWORD *, _DWORD **, int, _DWORD))(*v4 + 4))(v4, &a3, v6, 0); if ( a3 ) { (*(void (__stdcall **)(bool))(*a3 + 208))((_BYTE)a4 == 0); v8 = a3; a3[35] = *v5; v8[36] = v5[1]; v8[37] = v5[2]; (*(void (**)(void))(*a3 + 216))(); (*(void (__stdcall **)(_DWORD))(*a3 + 252))(0.0); a4 = a3; sub_6B9900(v4 + 2, &a4); sub_8B8EC0(v4 + 19, (int *)&a3); sub_6B6CE0(v4, a3); v9 = a3; sub_410C00(&a3); return v9; } sub_410C00(&a3); } } } return 0; } //----- (006B73C0) -------------------------------------------------------- int *__thiscall sub_6B73C0(int this, int *a2, int a3) { int v3; // esi int *result; // eax int *v5; // edi int *v6; // ST04_4 int v7; // eax int *v8; // ST04_4 void (__thiscall ***v9)(_DWORD, signed int); // esi int v10; // esi bool v11; // zf int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v3 = this; v12 = 0; if ( !*(_BYTE *)(this + 32) ) goto LABEL_2; if ( !a3 ) { if ( !*(_DWORD *)(this + 120) ) { v5 = a2; sub_6B5D50(this, a2, 0); return v5; } a3 = 0; v8 = (int *)(*(_DWORD *)(this + 112) + 8); v14 = 0; sub_65AD50(&a3, v8); sub_6B7B30((_DWORD *)(v3 + 108), &v12); v7 = v12; LABEL_11: if ( v7 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v10 = a3; v5 = a2; *a2 = a3; v11 = v10 == 0; if ( v10 ) { InterlockedIncrement((volatile LONG *)(v10 + 4)); v11 = v10 == 0; } v14 = -1; if ( !v11 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); return v5; } if ( a3 != 1 ) { LABEL_2: result = a2; *a2 = 0; return result; } if ( *(_DWORD *)(this + 104) ) { a3 = 0; v6 = (int *)(*(_DWORD *)(this + 96) + 8); v14 = 1; sub_65AD50(&a3, v6); sub_6B7B30((_DWORD *)(v3 + 92), &v13); v7 = v13; goto LABEL_11; } v5 = a2; sub_6B5D50(this, a2, 1); return v5; } //----- (006B7500) -------------------------------------------------------- LONG __thiscall sub_6B7500(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // ebx volatile LONG *v3; // esi int v4; // ecx volatile LONG *v5; // edi int v6; // eax LONG result; // eax volatile LONG *v8; // edi v2 = this; v3 = a2; if ( a2 ) { v4 = *((_DWORD *)a2 + 8); if ( v4 ) { (*(void (__stdcall **)(volatile LONG **, volatile LONG *))(*(_DWORD *)v4 + 120))(&a2, a2); if ( a2 ) { v5 = a2; if ( !InterlockedDecrement(a2 + 1) ) { if ( v5 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } } } (*(void (__thiscall **)(volatile LONG *))(*v3 + 152))(v3); } v6 = (*(int (__thiscall **)(volatile LONG *))(*v3 + 116))(v3); if ( v6 ) { result = v6 - 1; if ( result ) return result; v8 = v3 + 1; a2 = v3; InterlockedIncrement(v3 + 1); sub_8B8EC0(v2 + 23, (int *)&a2); } else { v8 = v3 + 1; a2 = v3; InterlockedIncrement(v3 + 1); sub_8B8EC0(v2 + 27, (int *)&a2); } result = InterlockedDecrement(v8); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); return result; } //----- (006B75F0) -------------------------------------------------------- unsigned int __thiscall sub_6B75F0(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi unsigned int result; // eax _DWORD *v4; // ebx volatile LONG *v5; // esi int v6; // eax int (__thiscall *v7)(volatile LONG *); // edx int v8; // ecx void (__thiscall ***v9)(_DWORD, signed int); // edi void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // ecx _DWORD *v12; // eax int v13; // [esp+4h] [ebp-18h] _DWORD *v14; // [esp+8h] [ebp-14h] int v15; // [esp+Ch] [ebp-10h] int v16; // [esp+10h] [ebp-Ch] _DWORD *v17; // [esp+14h] [ebp-8h] int v18; // [esp+18h] [ebp-4h] unsigned int v19; // [esp+24h] [ebp+8h] v2 = this; result = this[18]; v17 = this; if ( result > a2 ) { v4 = (_DWORD *)this[20]; v16 = *(_DWORD *)(this[17] + 8); v18 = 0; v19 = 0; if ( !v4 ) goto LABEL_24; do { v5 = (volatile LONG *)v4[2]; v14 = v4; v4 = (_DWORD *)*v4; v6 = sub_88E6A0(v5); if ( v16 == v6 ) { v7 = *(int (__thiscall **)(volatile LONG *))(*v5 + 228); ++v18; if ( v7(v5) != 1 ) { v8 = *((_DWORD *)v5 + 8); if ( v8 ) { (*(void (__stdcall **)(int *, volatile LONG *))(*(_DWORD *)v8 + 120))(&v15, v5); if ( v15 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v9 ) (**v9)(v9, 1); v2 = v17; } } (*(void (__thiscall **)(volatile LONG *))(*v5 + 152))(v5); sub_6B7500(v2, v5); sub_6BB7C0(v2 + 19, &v13, &v14); if ( v13 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } ++v19; } } } while ( v4 ); result = v19; if ( v18 == v19 ) { LABEL_24: v11 = v2[17]; v12 = *(_DWORD **)(v11 + 4); v2[17] = v12; if ( v12 ) *v12 = 0; else v2[16] = 0; result = (*(int (__thiscall **)(_DWORD *, int))(v2[15] + 8))(v2 + 15, v11); --v2[18]; } } return result; } //----- (006B7720) -------------------------------------------------------- int *__thiscall sub_6B7720(_DWORD *this) { _DWORD *v1; // ebx int *result; // eax volatile LONG *v3; // esi volatile LONG v4; // edx void (__stdcall ***v5)(signed int); // [esp+10h] [ebp-1Ch] int v6; // [esp+14h] [ebp-18h] void *v7; // [esp+18h] [ebp-14h] int *v8; // [esp+1Ch] [ebp-10h] int v9; // [esp+28h] [ebp-4h] v1 = this; result = (int *)this[3]; if ( result ) { while ( 1 ) { v3 = (volatile LONG *)result[2]; v4 = *v3; v7 = result; v8 = (int *)*result; result = (int *)(*(int (__thiscall **)(volatile LONG *))(v4 + 228))(v3); if ( result != (int *)1 ) { sub_403620(v1 + 2, (_DWORD **)&v7); result = (int *)(*(int (__thiscall **)(_DWORD *, volatile LONG *))(*v1 + 16))(v1, v3); if ( !(_BYTE)result ) { sub_6B7500(v1, v3); v7 = (void *)v3; InterlockedIncrement(v3 + 1); v9 = 0; sub_6BB9F0(v1 + 19, &v6, &v7); if ( v6 ) { v5 = (void (__stdcall ***)(signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v5 ) (**v5)(1); } } v9 = -1; result = (int *)InterlockedDecrement(v3 + 1); if ( !result ) result = (int *)(**(int (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } } if ( !v8 ) break; result = v8; } } return result; } //----- (006B7830) -------------------------------------------------------- unsigned int __thiscall sub_6B7830(_DWORD *this, float a2) { _DWORD *v2; // esi v2 = this; sub_6B62E0(this, SLODWORD(a2)); return sub_6B75F0(v2, v2[31]); } //----- (006B7860) -------------------------------------------------------- int __thiscall sub_6B7860(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // eax int v4; // edi v1 = this; v2 = this[2]; v3 = *(_DWORD **)(v2 + 4); v1[2] = v3; if ( v3 ) *v3 = 0; else v1[1] = 0; v4 = *(_DWORD *)(v2 + 8); (*(void (__thiscall **)(_DWORD *, int))(*v1 + 8))(v1, v2); --v1[3]; return v4; } //----- (006B78A0) -------------------------------------------------------- _DWORD *__thiscall sub_6B78A0(_DWORD *this, _DWORD **a2) { _DWORD *result; // eax result = *a2; if ( *a2 && result != (_DWORD *)this[1] ) { if ( result == (_DWORD *)this[2] ) this[2] = result[1]; *(_DWORD *)result[1] = *result; if ( *result ) *(_DWORD *)(*result + 4) = result[1]; result[1] = 0; *result = this[1]; *(_DWORD *)(this[1] + 4) = result; this[1] = result; } return result; } //----- (006B7910) -------------------------------------------------------- void *__thiscall sub_6B7910(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SoundGroup *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F779C: using guessed type void *NiTListBase,SoundGroup *>::`vftable'; //----- (006B7940) -------------------------------------------------------- void *__thiscall sub_6B7940(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiAudioSource *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F77AC: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; //----- (006B7970) -------------------------------------------------------- void __stdcall sub_6B7970(void *a1) { *((_DWORD *)a1 + 2) = 0; operator delete(a1); } //----- (006B7990) -------------------------------------------------------- _DWORD *__thiscall sub_6B7990(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SoundGroup *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SoundGroup *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F779C: using guessed type void *NiTListBase,SoundGroup *>::`vftable'; // 9F77BC: using guessed type void *NiTPointerListBase,SoundGroup *>::`vftable'; //----- (006B7A20) -------------------------------------------------------- int __thiscall sub_6B7A20(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiAudioSource *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiAudioSource *>::`vftable'; return result; } // 9F77AC: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; // 9F77CC: using guessed type void *NiTPointerListBase,NiAudioSource *>::`vftable'; //----- (006B7AA0) -------------------------------------------------------- _DWORD *__thiscall sub_6B7AA0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiAudioSource *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiAudioSource *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F77AC: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; // 9F77CC: using guessed type void *NiTPointerListBase,NiAudioSource *>::`vftable'; //----- (006B7B30) -------------------------------------------------------- _DWORD *__thiscall sub_6B7B30(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int *v3; // edi int v4; // eax int v5; // eax v2 = this; v3 = (int *)this[1]; v4 = *v3; this[1] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else this[2] = 0; v5 = v3[2]; *a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 8))(v2, v3); --v2[3]; return a2; } //----- (006B7BC0) -------------------------------------------------------- void *__thiscall sub_6B7BC0(void *this, char a2) { void *v2; // esi v2 = this; sub_6B6E70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B7BF0) -------------------------------------------------------- void *__thiscall sub_6B7BF0(void *this, char a2) { void *v2; // esi v2 = this; sub_6B6F50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B7C20) -------------------------------------------------------- void __thiscall sub_6B7C20(float *this, float a2) { this[31] = a2; } //----- (006B7C40) -------------------------------------------------------- bool __thiscall sub_6B7C40(_DWORD *this, unsigned int *a2, unsigned int a3) { _DWORD *v3; // esi bool result; // al v3 = this; result = sub_6B5690(this, a2, a3); if ( result ) { (*(void (__thiscall **)(_DWORD *, signed int))(*v3 + 12))(v3, 2); sub_6B55D0(v3, 0, "bogus"); sub_6B55D0(v3, 1u, "bogus"); result = 1; } return result; } //----- (006B7C90) -------------------------------------------------------- char __thiscall sub_6B7C90(_DWORD *this) { int v1; // eax int v2; // eax v1 = sub_6B5F80(this, this[26]); if ( !v1 || (v2 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 228))(v1), v2 != 1) ) LOBYTE(v2) = 0; return v2; } //----- (006B7D50) -------------------------------------------------------- BOOL __thiscall sub_6B7D50(float *this, float a2, float a3) { float v3; // ST00_4 double v4; // st7 float v6; // [esp+Ch] [ebp+8h] float v7; // [esp+Ch] [ebp+8h] float v8; // [esp+Ch] [ebp+8h] v3 = this[13] - a2; v6 = this[14] - a3; v7 = v6 * v6 + v3 * v3; v4 = v7; v8 = this[15] * this[15]; return v8 > v4; } //----- (006B7DB0) -------------------------------------------------------- double __thiscall sub_6B7DB0(float *this) { return this[15]; } //----- (006B7DC0) -------------------------------------------------------- int __thiscall sub_6B7DC0(_DWORD *this, float a2) { int v2; // esi v2 = (int)this; (*(void (__stdcall **)(_DWORD))(this[21] + 40))(LODWORD(a2)); return sub_6B5D00(v2, a2); } //----- (006B7DF0) -------------------------------------------------------- int __thiscall sub_6B7DF0(_DWORD *this, float a2) { _DWORD *v2; // esi float v3; // ST08_4 float v5; // [esp+14h] [ebp+8h] v2 = this; v3 = flt_AB5C20 * a2; sub_6B5D00((int)this, v3); v5 = flt_AB5C20 * a2; return (*(int (__stdcall **)(_DWORD))(v2[16] + 40))(LODWORD(v5)); } // AB5C20: using guessed type float flt_AB5C20; //----- (006B7E40) -------------------------------------------------------- int __thiscall sub_6B7E40(_BYTE *this, int a2) { _BYTE *v2; // esi v2 = this; sub_6B5760(this, a2); return (*(int (__thiscall **)(_BYTE *, int))(*((_DWORD *)v2 + 16) + 68))(v2 + 64, a2); } //----- (006B7E70) -------------------------------------------------------- bool __thiscall sub_6B7E70(_DWORD *this, unsigned int *a2, unsigned int a3) { _DWORD *v3; // esi bool result; // al v3 = this; result = sub_6B5690(this, a2, a3); if ( result ) { (*(void (__thiscall **)(_DWORD *, signed int))(*v3 + 12))(v3, 2); sub_6B55D0(v3, 0, "run_nor.wav"); result = 1; } return result; } //----- (006B7EB0) -------------------------------------------------------- int __thiscall sub_6B7EB0(int this, float a2) { int v2; // edi int **v3; // esi int (__stdcall *v4)(_DWORD); // edx float v5; // ST0C_4 int result; // eax v2 = this; v3 = *(int ***)(this + 12); for ( *(float *)(this + 36) = a2; v3; result = v4(LODWORD(v5)) ) { v4 = *(int (__stdcall **)(_DWORD))(*v3[2] + 188); v3 = (int **)*v3; v5 = *(float *)(v2 + 128) * a2 * flt_AB5C20; } return result; } // AB5C20: using guessed type float flt_AB5C20; //----- (006B7F10) -------------------------------------------------------- float *__thiscall sub_6B7F10(float *this, float *a2) { float *result; // eax result = a2; *a2 = this[13]; a2[1] = this[14]; return result; } //----- (006B7F30) -------------------------------------------------------- int __thiscall sub_6B7F30(_DWORD *this, float a2) { _DWORD *v2; // esi int *v3; // eax _DWORD *v4; // edi int v5; // ST20_4 int v6; // esi char v7; // bl int v9; // [esp+18h] [ebp-10h] int v10; // [esp+1Ch] [ebp-Ch] _DWORD *v11; // [esp+24h] [ebp-4h] v2 = this; v11 = this; v3 = (int *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v4 = (_DWORD *)v2[18]; v9 = *v3; v10 = v3[1]; v5 = v3[2]; if ( v4 ) { do { v6 = v4[2]; v4 = (_DWORD *)*v4; v7 = (**(int (__thiscall ***)(int, int, int))v6)(v6, v9, v10); if ( v7 ) { if ( !*(_BYTE *)(v6 + 44) ) *(_DWORD *)(v6 + 40) = (***(int (__stdcall ****)(int))(v6 + 48))(v6); } else if ( *(_BYTE *)(v6 + 44) && *(_DWORD *)(v6 + 40) >= 0 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(v6 + 48) + 4))(v6); } *(_BYTE *)(v6 + 44) = v7; } while ( v4 ); v2 = v11; } return sub_6B62E0(v2, SLODWORD(a2)); } //----- (006B7FE0) -------------------------------------------------------- char __thiscall sub_6B7FE0(float *this, unsigned int *a2, int a3) { float *v3; // esi char result; // al v3 = this; if ( !sub_6B5690(this, a2, 3u) ) return 0; (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)v3 + 12))(v3, 3); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, unsigned int *, int))(*((_DWORD *)v3 + 21) + 52))( (_DWORD *)v3 + 21, a2, a3 - 3) ) return 0; *((_DWORD *)v3 + 52) = 10; v3[57] = 0.0; v3[58] = 0.0; result = 1; v3[59] = 0.0; return result; } //----- (006B8050) -------------------------------------------------------- void __thiscall sub_6B8050(float *this) { float *v1; // edi _DWORD *v2; // esi int v3; // eax float v4; // ST14_4 unsigned int v5; // esi float *v6; // ebx int v7; // eax float v8; // ST14_4 v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 54); while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; v4 = *(float *)(v3 + 8) * v1[9] * flt_AB5C20; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 4) + 188))(LODWORD(v4)); } v5 = 0; if ( *((_DWORD *)v1 + 1) ) { v6 = v1 + 57; do { v7 = sub_6B5F80(v1, v5); if ( v7 ) { v8 = v1[9] * *v6 * flt_AB5C20; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 188))(v7, LODWORD(v8)); } ++v5; ++v6; } while ( v5 < *((_DWORD *)v1 + 1) ); } } // AB5C20: using guessed type float flt_AB5C20; //----- (006B80E0) -------------------------------------------------------- char __thiscall sub_6B80E0(_DWORD *this, unsigned int *a2, unsigned int a3) { _DWORD *v3; // esi v3 = this; if ( !sub_6B5690(this, a2, a3) ) return 0; (*(void (__thiscall **)(_DWORD *, signed int))(*v3 + 12))(v3, 67); sub_6B55D0(v3, 0, "interface\\KDSUCCESS.wav"); sub_6B55D0(v3, 1u, "interface\\KDFAIL.wav"); sub_6B55D0(v3, 2u, "interface\\ISSUE.wav"); sub_6B55D0(v3, 3u, "interface\\WEAPONTITLE.wav"); sub_6B55D0(v3, 4u, "interface\\SFX_CLICK.wav"); sub_6B55D0(v3, 5u, "interface\\SFX_QITEMGET.wav"); sub_6B55D0(v3, 6u, "interface\\SFX_RITEMGET.wav"); sub_6B55D0(v3, 7u, "interface\\SFX_STARTQUEST.wav"); sub_6B55D0(v3, 8u, "interface\\SFX_ENDQUEST.wav"); sub_6B55D0(v3, 9u, "interface\\SFX_LVUP.wav"); sub_6B55D0(v3, 0xBu, "interface\\SFX_SLOTEND.wav"); sub_6B55D0(v3, 0xCu, "interface\\SFX_UPBEST.wav"); sub_6B55D0(v3, 0xDu, "interface\\SFX_UPGOOD.wav"); sub_6B55D0(v3, 0xEu, "interface\\SFX_UPWORST.wav"); sub_6B55D0(v3, 0xFu, "interface\\SFX_LEARNSKILL.wav"); sub_6B55D0(v3, 0x10u, "interface\\SFX_MoneyGet.wav"); sub_6B55D0(v3, 0x11u, "interface\\CharCreate.wav"); sub_6B55D0(v3, 0x12u, "interface\\CharCreateArc.wav"); sub_6B55D0(v3, 0x13u, "interface\\CharCreateClass.wav"); sub_6B55D0(v3, 0x14u, "interface\\CharCreateClr.wav"); sub_6B55D0(v3, 0x15u, "interface\\CharCreateFig.wav"); sub_6B55D0(v3, 0x16u, "interface\\CharCreateMag.wav"); sub_6B55D0(v3, 0x17u, "interface\\CharCreateSex.wav"); sub_6B55D0(v3, 0x18u, "interface\\SFX_ConFriend.wav"); sub_6B55D0(v3, 0x19u, "interface\\SFX_KQLast.wav"); sub_6B55D0(v3, 0x1Au, "interface\\SFX_SoulStone.wav"); sub_6B55D0(v3, 0x1Bu, "interface\\SFX_WDClosed.wav"); sub_6B55D0(v3, 0x1Cu, "interface\\SFX_UChatJ.wav"); sub_6B55D0(v3, 0x1Du, "interface\\SFX_UChatM.wav"); sub_6B55D0(v3, 0x1Eu, "interface\\SFX_OXField.wav"); sub_6B55D0(v3, 0x1Fu, "interface\\SFX_Critical01.wav"); sub_6B55D0(v3, 0x20u, "interface\\DiceConnect.wav"); sub_6B55D0(v3, 0x21u, "interface\\DiceStartBetting.wav"); sub_6B55D0(v3, 0x22u, "interface\\DiceBettingLogo.wav"); sub_6B55D0(v3, 0x23u, "interface\\DiceOutMoney.wav"); sub_6B55D0(v3, 0x24u, "interface\\DiceChipsPiledUp_Pair.wav"); sub_6B55D0(v3, 0x25u, "interface\\DiceChipsPiledUp_Single.wav"); sub_6B55D0(v3, 0x26u, "interface\\DiceBettingCheckUp.wav"); sub_6B55D0(v3, 0x27u, "interface\\Cast_Clock.wav"); sub_6B55D0(v3, 0x28u, "interface\\Cast_Alarm.wav"); sub_6B55D0(v3, 0x29u, "interface\\Dice_CoinClick.wav"); sub_6B55D0(v3, 0x2Au, "interface\\DiceRoll_Pair.wav"); sub_6B55D0(v3, 0x2Bu, "interface\\DiceRoll_Single01.wav"); sub_6B55D0(v3, 0x2Cu, "interface\\DiceFinalResult.wav"); sub_6B55D0(v3, 0x2Du, "interface\\Dice_fanfare.wav"); sub_6B55D0(v3, 0x2Eu, "interface\\MysteryVaultAlarm.wav"); sub_6B55D0(v3, 0x2Fu, "interface\\PutOnClear.wav"); sub_6B55D0(v3, 0x30u, "interface\\Collect_CardOpen.wav"); sub_6B55D0(v3, 0x31u, "interface\\Collect_CardReward.wav"); sub_6B55D0(v3, 0x32u, "interface\\GB_SM_Bet.wav"); sub_6B55D0(v3, 0x33u, "interface\\GB_SM_Cancle.wav"); sub_6B55D0(v3, 0x34u, "interface\\GB_SM_FullBet.wav"); sub_6B55D0(v3, 0x35u, "interface\\GB_SM_Lose.wav"); sub_6B55D0(v3, 0x36u, "interface\\GB_SM_Open.wav"); sub_6B55D0(v3, 0x37u, "interface\\GB_SM_ReelEnd.wav"); sub_6B55D0(v3, 0x38u, "interface\\GB_SM_ReelLoop.wav"); sub_6B55D0(v3, 0x39u, "interface\\GB_SM_ReelStart.wav"); sub_6B55D0(v3, 0x3Au, "interface\\GB_SM_Reset.wav"); sub_6B55D0(v3, 0x3Bu, "interface\\GB_SM_Spin.wav"); sub_6B55D0(v3, 0x3Cu, "interface\\GB_SM_Stop.wav"); sub_6B55D0(v3, 0x3Du, "interface\\GB_SM_Win.wav"); sub_6B55D0(v3, 0x3Eu, "interface\\CharCreateJok.wav"); sub_6B55D0(v3, 0x3Fu, "interface\\SFX_ItemSort.wav"); sub_6B55D0(v3, 0x40u, "interface\\SFX_MBoxGet.wav"); sub_6B55D0(v3, 0x41u, "interface\\SFX_ItemPutRing.wav"); sub_6B55D0(v3, 0x42u, "interface\\RandomOptionProgress.wav"); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, unsigned int *, unsigned int))(v3[16] + 52))(v3 + 16, a2, a3 - 1) ) return 0; v3[47] = 7; return 1; } //----- (006B84E0) -------------------------------------------------------- int __thiscall sub_6B84E0(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // eax int (__thiscall *v4)(_DWORD *, char *, _DWORD, _DWORD); // edx char v6; // [esp+4h] [ebp-8h] char *v7; // [esp+8h] [ebp-4h] v2 = this; v3 = sub_7549E0("interface\\%s.wav", a2); v4 = *(int (__thiscall **)(_DWORD *, char *, _DWORD, _DWORD))(v2[16] + 24); v7 = v3; return v4(v2 + 16, &v6, 0, 0); } //----- (006B8520) -------------------------------------------------------- int __thiscall sub_6B8520(_DWORD *this, int a2) { _DWORD *v2; // esi const char *v3; // eax int result; // eax int v5; // edi int v6; // ebx float v7; // ST1C_4 double v8; // st7 void (__thiscall *v9)(int, _DWORD, _DWORD, _DWORD); // eax float v10; // ST18_4 void (__thiscall *v11)(_DWORD *, int *, int, signed int); // edx int v12; // [esp+2Ch] [ebp-10h] int v13; // [esp+30h] [ebp-Ch] int v14; // [esp+34h] [ebp-8h] float v15; // [esp+38h] [ebp-4h] v2 = this; if ( sub_6B5F80(this, this[26]) ) { v14 = v2[26]; v15 = 0.0; sub_6B6C20(v2, &v14); } v3 = (const char *)(v2 + 16); if ( v2[21] >= 0x10u ) v3 = *(const char **)v3; sub_6B55D0(v2, v2[26], v3); v12 = v2[26]; v13 = 0; result = sub_6B6870(v2, &v12, 1); v5 = result; if ( result ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)result + 188))(result, 0.0); v6 = *(_DWORD *)v5; v7 = *((float *)v2 + 31); v8 = sub_8A9EF0(); v9 = *(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD))(v6 + 196); v10 = v8; v15 = *((float *)v2 + 32) * *((float *)v2 + 9) * flt_AB5C20; v9(v5, LODWORD(v15), LODWORD(v10), LODWORD(v7)); v11 = *(void (__thiscall **)(_DWORD *, int *, int, signed int))(*v2 + 24); v14 = v2[26]; v15 = 0.0; v11(v2, &v14, a2, 1); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 188))(v5, 0.0); v2[23] = 4; *((_BYTE *)v2 + 101) = 1; } else { v2[23] = 5; *((_BYTE *)v2 + 101) = 0; } return result; } // AB5C20: using guessed type float flt_AB5C20; //----- (006B8630) -------------------------------------------------------- void __thiscall sub_6B8630(int this, _DWORD *a2) { int v2; // ebx int v3; // eax int v4; // esi int v5; // edi float v6; // ST04_4 _DWORD *v7; // eax int v8; // edx _DWORD *v9; // esi _DWORD *v10; // eax int v11; // esi int v12; // ecx void *v13; // eax int v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] v2 = this; v3 = a2[9]; if ( v3 ) { if ( v3 == 1 ) { v7 = *(_DWORD **)(this + 152); if ( v7 ) { v8 = a2[10]; while ( 1 ) { v9 = (_DWORD *)v7[2]; a2 = v7; v7 = (_DWORD *)*v7; if ( v8 == *v9 ) break; if ( !v7 ) return; } v10 = *(_DWORD **)(sub_6B57A0((char *)(this + 20)) + 4); if ( v10 ) { v11 = v9[1]; while ( 1 ) { v12 = v10[2]; v10 = (_DWORD *)*v10; if ( v12 == v11 ) break; if ( !v10 ) goto LABEL_18; } (*(void (**)(void))(*(_DWORD *)v12 + 220))(); } LABEL_18: v13 = (void *)sub_403620((_DWORD *)(v2 + 148), &a2); operator delete(v13); } } } else if ( a2[10] >= 0 ) { v4 = sub_6B5F80((_DWORD *)(this - 64), a2[10]); if ( v4 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 228))(v4) == 1 ) { v5 = *(_DWORD *)v4; v6 = sub_8A9EF0(); (*(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD))(v5 + 196))(v4, 0.0, LODWORD(v6), 3.0); (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 220))(v4); v14 = a2[10]; v15 = 0; sub_6B6C20((_DWORD *)(v2 - 64), &v14); } } } } //----- (006B8750) -------------------------------------------------------- _DWORD *__thiscall sub_6B8750(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B6F30(this); *v1 = &SoundGroupBgm::`vftable'; v1[20] = 0; v1[21] = 15; *((_BYTE *)v1 + 64) = 0; *((float *)v1 + 31) = 6.0; *((float *)v1 + 24) = -1.0; v1[27] = 1; *((_BYTE *)v1 + 132) = 1; *((_WORD *)v1 + 50) = 0; *((float *)v1 + 32) = 0.0; v1[26] = 0; v1[28] = 0; v1[23] = 5; *((_WORD *)v1 + 60) = -1; return v1; } // 9F80FC: using guessed type void *SoundGroupBgm::`vftable'; //----- (006B88F0) -------------------------------------------------------- signed int __thiscall sub_6B88F0(_DWORD *this, _DWORD *a2) { float *v2; // ebx int v3; // eax int v4; // edi unsigned int v5; // esi const char *v7; // eax int (__thiscall *v8)(int, float *, signed int, signed int); // eax int v9; // eax int v10; // ecx void (__thiscall *v11)(int, _DWORD); // eax _DWORD *v12; // eax char v13; // dl _DWORD *v14; // ecx int v15; // ecx int v16; // eax const char *v17; // esi const char *v18; // eax const char *v19; // esi char v20; // cl int v21; // eax float v22; // edx int v23; // eax double v24; // st7 bool v25; // cf _DWORD *v26; // eax int v27; // esi void (__thiscall *v28)(float *); // eax double v29; // st7 bool v30; // zf float v31; // ST18_4 float *v32; // eax double v33; // st7 int v34; // edx float v35; // [esp+28h] [ebp-20h] float v36; // [esp+2Ch] [ebp-1Ch] float v37; // [esp+30h] [ebp-18h] char v38; // [esp+34h] [ebp-14h] _DWORD *v39; // [esp+38h] [ebp-10h] float v40; // [esp+3Ch] [ebp-Ch] float v41; // [esp+40h] [ebp-8h] int v42; // [esp+44h] [ebp-4h] float v43; // [esp+50h] [ebp+8h] float v44; // [esp+50h] [ebp+8h] float v45; // [esp+50h] [ebp+8h] float v46; // [esp+50h] [ebp+8h] float v47; // [esp+50h] [ebp+8h] float v48; // [esp+50h] [ebp+8h] v2 = (float *)a2; v3 = a2[9]; v4 = (int)this; v41 = *(float *)&this; if ( !v3 ) { *(float *)&v5 = 0.0; if ( *(this - 15) ) { while ( sub_6B5F80((_DWORD *)(v4 - 64), v5) ) { if ( ++v5 >= *(_DWORD *)(v4 - 60) ) return 0; } v7 = (const char *)(a2 + 1); if ( a2[6] >= 0x10u ) v7 = *(const char **)v7; sub_6B55D0((_DWORD *)(v4 - 64), v5, v7); v8 = *(int (__thiscall **)(int, float *, signed int, signed int))(*(_DWORD *)(v4 - 64) + 24); v40 = *(float *)&v5; v41 = 0.0; if ( v8(v4 - 64, &v40, 1, 1) ) { v40 = *(float *)&v5; v41 = 0.0; v9 = sub_6B6870((_DWORD *)(v4 - 64), &v40, 1); v10 = v9; v11 = *(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v9 + 188); v43 = (double)(signed int)a2[8] * 0.009999999776482582; *(float *)(v4 + 4 * v5 + 164) = v43; v44 = v43 * *(float *)(v4 - 28) * flt_AB5C20; v11(v10, LODWORD(v44)); return v5; } } return 0; } if ( v3 == 1 ) { v12 = (_DWORD *)this[38]; v13 = 0; if ( !v12 ) goto LABEL_24; do { v14 = (_DWORD *)v12[2]; v12 = (_DWORD *)*v12; if ( *v14 == a2[10] ) v13 = 1; } while ( v12 ); if ( v13 && (v15 = *(_DWORD *)(sub_6B57A0((char *)(v4 + 20)) + 4)) != 0 ) { while ( 1 ) { v16 = **(_DWORD **)(v15 + 8); v42 = *(_DWORD *)v15; v17 = (const char *)(*(int (**)(void))(v16 + 140))(); v18 = (const char *)sub_6B9D00(v2); v19 = &v17[strlen(v17) - strlen(v18)]; v20 = *v18; if ( !*v18 ) break; while ( v20 == *v19 ) { v20 = (v18++)[1]; ++v19; if ( !v20 ) return 0; } v2 = (float *)a2; if ( !v42 ) { v4 = LODWORD(v41); goto LABEL_24; } v15 = v42; } } else { LABEL_24: v21 = (*(int (__thiscall **)(float *, char *))(*(_DWORD *)v2 + 4))(v2, &v38); v22 = *(float *)(v21 + 4); v40 = *(float *)v21; v35 = v40; v41 = v22; v36 = v22; v23 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); v24 = *(float *)(v23 + 8); v25 = *((_DWORD *)v2 + 6) < 0x10u; v37 = *(float *)(v23 + 8); v26 = v2 + 1; if ( !v25 ) v26 = (_DWORD *)*v26; v39 = v26; v27 = (*(int (__thiscall **)(int, char *, float *, signed int))(*(_DWORD *)(v4 + 20) + 32))( v4 + 20, &v38, &v35, 1); if ( v27 ) { v28 = *(void (__thiscall **)(float *))(*(_DWORD *)v2 + 8); v42 = 8; v28(v2); v45 = v24; v29 = v45; do { v30 = v42-- == 1; v45 = v45 * 0.5; } while ( !v30 ); v31 = v29; v46 = v45 * flt_AB5C1C; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v27 + 180))(v27, LODWORD(v46), LODWORD(v31)); v32 = (float *)operator new(0xCu); *v32 = v2[10]; *((_DWORD *)v32 + 1) = v27; v33 = (double)*((signed int *)v2 + 8); v34 = *(_DWORD *)v27; v41 = *(float *)&v32; v47 = v33 * 0.009999999776482582; v32[2] = v47; v48 = v47 * *(float *)(v4 - 28) * flt_AB5C20; (*(void (__thiscall **)(int, _DWORD))(v34 + 188))(v27, LODWORD(v48)); sub_6B9900((_DWORD *)(v4 + 148), &v41); } } return 0; } return -1; } // AB5C1C: using guessed type float flt_AB5C1C; // AB5C20: using guessed type float flt_AB5C20; //----- (006B8BB0) -------------------------------------------------------- bool __thiscall sub_6B8BB0(_DWORD *this, float a2) { int v2; // ebx float *v3; // eax float v4; // ecx _DWORD *v5; // esi float *v6; // edi float *v7; // eax volatile LONG *v8; // esi float v10; // [esp+10h] [ebp-24h] float v11; // [esp+14h] [ebp-20h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float v14; // [esp+20h] [ebp-14h] float v15; // [esp+24h] [ebp-10h] int v16; // [esp+30h] [ebp-4h] v2 = (int)this; if ( !(unsigned __int8)sub_6B5B60(this) ) return sub_6B5B70(v2, (float *)LODWORD(a2)) == 0; v3 = (float *)sub_88D3D0(*(_DWORD **)(v2 + 24)); v4 = a2; v14 = *(float *)LODWORD(a2) - v3[35]; a2 = *(float *)(LODWORD(a2) + 4) - v3[36]; v15 = *(float *)(LODWORD(v4) + 8) - v3[37]; v14 = a2 * a2 + v14 * v14 + v15 * v15; if ( v14 >= *(float *)(v2 + 56) * *(float *)(v2 + 56) ) return 0; v5 = *(_DWORD **)(v2 + 12); a2 = 0.0; v15 = 0.0; if ( *(float *)&v5 == 0.0 ) return 0; do { v6 = (float *)v5[2]; v10 = *(float *)&v5; v5 = *(_DWORD **)v5; v7 = (float *)sub_88D3D0(*(_DWORD **)(v2 + 24)); v12 = v6[35] - v7[35]; v13 = v6[36] - v7[36]; v11 = v6[37] - v7[37]; v11 = v13 * v13 + v12 * v12 + v11 * v11; if ( a2 < (double)v11 ) { a2 = v11; v15 = v10; } } while ( *(float *)&v5 != 0.0 ); if ( a2 <= 0.0 ) return 0; if ( v14 >= (double)a2 ) return 0; v8 = *(volatile LONG **)(LODWORD(v15) + 8); if ( *(float *)&v8 == 0.0 ) return 0; (*(void (__thiscall **)(_DWORD))(*v8 + 220))(*(_DWORD *)(LODWORD(v15) + 8)); if ( !(*(unsigned __int8 (__thiscall **)(int, volatile LONG *))(*(_DWORD *)v2 + 16))(v2, v8) ) { sub_6B7500((_DWORD *)v2, v8); a2 = *(float *)&v8; InterlockedIncrement(v8 + 1); v16 = 0; sub_6BB9F0((_DWORD *)(v2 + 76), &v11, &a2); sub_410C00(&v11); v16 = -1; sub_410C00(&a2); } sub_403620((_DWORD *)(v2 + 8), (_DWORD **)&v15); return 1; } //----- (006B8DD0) -------------------------------------------------------- void __thiscall sub_6B8DD0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ecx int v4; // edi v1 = this; (*(void (**)(void))(*this + 60))(); while ( v1[20] ) { v2 = (int *)v1[18]; v3 = *v2; v1[18] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[19] = 0; v4 = v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[17] + 8))(v1 + 17, v2); --v1[20]; if ( v4 ) { if ( *(_DWORD *)(v4 + 24) >= 0x10u ) operator delete(*(void **)(v4 + 4)); *(_DWORD *)(v4 + 24) = 15; *(_DWORD *)(v4 + 20) = 0; *(_BYTE *)(v4 + 4) = 0; operator delete((void *)v4); } } } //----- (006B8E50) -------------------------------------------------------- _DWORD *__thiscall sub_6B8E50(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // ecx void *v4; // edi int v5; // esi _DWORD *v6; // edi _DWORD *v7; // ST00_4 int v8; // esi _DWORD *v9; // edi _DWORD *v10; // ST00_4 v1 = this; *this = &SoundGroupAmbient::`vftable'; this[16] = &SoundGroupAmbient::`vftable'; sub_6B8DD0(this); while ( v1[56] ) { v2 = (int *)v1[54]; v3 = *v2; v1[54] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[55] = 0; v4 = (void *)v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[53] + 8))(v1 + 53, v2); --v1[56]; operator delete(v4); } v5 = (int)(v1 + 53); v1[53] = &NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; v6 = (_DWORD *)v1[54]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v5 + 8))(v1 + 53, v7); } v1[56] = 0; v1[54] = 0; v1[55] = 0; *(_DWORD *)v5 = &NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; sub_6B9D10(v1 + 21); v8 = (int)(v1 + 17); v1[17] = &NiTPointerListBase,IAmbientArea *>::`vftable'; v9 = (_DWORD *)v1[18]; while ( v9 ) { v10 = v9; v9 = (_DWORD *)*v9; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v8 + 8))(v1 + 17, v10); } v1[20] = 0; v1[18] = 0; v1[19] = 0; *(_DWORD *)v8 = &NiTListBase,IAmbientArea *>::`vftable'; return sub_6B6F50(v1); } // 9F808C: using guessed type void *NiTListBase,IAmbientArea *>::`vftable'; // 9F809C: using guessed type void *NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; // 9F80DC: using guessed type void *NiTPointerListBase,IAmbientArea *>::`vftable'; // 9F80EC: using guessed type void *NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; // 9F816C: using guessed type void *SoundGroupAmbient::`vftable'; // 9F817C: using guessed type void *SoundGroupAmbient::`vftable'; //----- (006B8FC0) -------------------------------------------------------- char __thiscall sub_6B8FC0(_DWORD *this, int a2) { char *v2; // eax unsigned int v3; // eax unsigned int v4; // esi int v5; // edi _DWORD *v6; // eax _DWORD *v7; // esi float v8; // ST24_4 float v9; // ST2C_4 double v10; // st7 float v11; // ST34_4 int v12; // edx int v13; // ecx _DWORD *v14; // eax _DWORD *v15; // ecx _DWORD *v17; // [esp+14h] [ebp-3Ch] unsigned int v18; // [esp+1Ch] [ebp-34h] void *v19; // [esp+24h] [ebp-2Ch] int v20; // [esp+34h] [ebp-1Ch] unsigned int v21; // [esp+38h] [ebp-18h] int v22; // [esp+4Ch] [ebp-4h] v17 = this; sub_6B8DD0(this); if ( !byte_ACAD5C ) sub_420410(); v2 = sub_7549E0("%s\\AmbienceSound\\%s.shn", byte_ACA520, a2); LOBYTE(v3) = sub_6B9F60(v2, 0, 1); if ( (_BYTE)v3 ) { v4 = 0; v18 = 0; v3 = sub_6B98E0(); if ( v3 ) { do { v5 = sub_7474E0((_DWORD *)(dword_B91648 + 4), v4); if ( *(float *)(v5 + 140) > -0.0000099999997 && *(float *)(v5 + 140) < 0.0000099999997 ) { v6 = operator new(0x40u); if ( v6 ) { v6[6] = 15; v6[5] = 0; *((_BYTE *)v6 + 4) = 0; *((_BYTE *)v6 + 44) = 0; v6[12] = 0; v6[10] = 0; v6[8] = 100; *v6 = &CircleAmbientArea::`vftable'; v7 = v6; } else { v7 = 0; } v8 = *(float *)(v5 + 128); v9 = *(float *)(v5 + 132); v21 = 15; v10 = *(float *)(v5 + 136); v20 = 0; v11 = v10; LOBYTE(v19) = 0; *((float *)v7 + 13) = v8; *((float *)v7 + 14) = v9; *((float *)v7 + 15) = v11; sub_4018E0(&v19, (void *)(v5 + 32), strlen((const char *)(v5 + 32))); v22 = 0; sub_4017F0((const void **)v7 + 1, (const void **)&v19, 0, (void *)0xFFFFFFFF); v22 = -1; if ( v21 >= 0x10 ) operator delete(v19); v12 = *(_DWORD *)(v5 + 148); v21 = 15; v20 = 0; LOBYTE(v19) = 0; v7[8] = v12; if ( v17 ) v13 = (int)(v17 + 16); else v13 = 0; v7[12] = v13; v7[9] = *(_DWORD *)(v5 + 152); v14 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v17[17] + 4))(v17 + 17); v14[2] = v7; *v14 = 0; v14[1] = v17[19]; v15 = (_DWORD *)v17[19]; if ( v15 ) *v15 = v14; else v17[18] = v14; ++v17[20]; v4 = v18; v17[19] = v14; } v18 = ++v4; v3 = sub_6B98E0(); } while ( v4 < v3 ); } if ( dword_B91648 ) { LOBYTE(v3) = (**(int (***)(void))dword_B91648)(); if ( dword_B91648 ) LOBYTE(v3) = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_B91648 + 8))(1); dword_B91648 = 0; } } return v3; } // 9F815C: using guessed type void *CircleAmbientArea::`vftable'; // ACAD5C: using guessed type char byte_ACAD5C; // B91648: using guessed type int dword_B91648; //----- (006B9200) -------------------------------------------------------- void __thiscall sub_6B9200(const char *this, char *a2, int a3, float a4) { char *v4; // esi const char *v5; // eax int v6; // edi float v7; // ST28_4 float v8; // ST24_4 unsigned int v9; // ecx int v10; // eax int v11; // eax int v12; // edi int v13; // ebx float v14; // ST28_4 double v15; // st7 void (__thiscall *v16)(int, _DWORD, _DWORD, _DWORD); // edx float v17; // ST24_4 void (__thiscall *v18)(char *, int *, int, signed int); // edx int v19; // [esp+3Ch] [ebp-44h] int v20; // [esp+40h] [ebp-40h] int v21; // [esp+44h] [ebp-3Ch] int v22; // [esp+48h] [ebp-38h] int v23; // [esp+4Ch] [ebp-34h] float v24; // [esp+50h] [ebp-30h] void *v25; // [esp+54h] [ebp-2Ch] int v26; // [esp+64h] [ebp-1Ch] unsigned int v27; // [esp+68h] [ebp-18h] int v28; // [esp+7Ch] [ebp-4h] v4 = (char *)this; if ( *((_DWORD *)this + 21) < 0x10u ) v5 = this + 64; else v5 = (const char *)*((_DWORD *)this + 16); if ( _stricmp(a2, v5) ) { *((float *)v4 + 32) = a4; v27 = 15; v26 = 0; LOBYTE(v25) = 0; sub_4018E0(&v25, a2, strlen(a2)); v28 = 0; sub_406450(v4 + 64, &v25); v28 = -1; if ( v27 >= 0x10 ) operator delete(v25); if ( v4[32] ) { v6 = sub_6B5F80(v4, *((_DWORD *)v4 + 26)); if ( v6 && (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 228))(v6) == 1 && 0.0 != *((float *)v4 + 31) ) { v7 = *((float *)v4 + 31); v24 = *(float *)v6; v8 = sub_8A9EF0(); (*(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD))(LODWORD(v24) + 196))(v6, 0.0, LODWORD(v8), LODWORD(v7)); if ( v4[132] ) { v9 = *((_DWORD *)v4 + 27); v10 = *((_DWORD *)v4 + 26); *((_DWORD *)v4 + 26) = v9; *((_DWORD *)v4 + 27) = v10; sub_6B55D0(v4, v9, a2); if ( sub_6B5F80(v4, *((_DWORD *)v4 + 26)) ) { v23 = *((_DWORD *)v4 + 26); v24 = 0.0; sub_6B6C20(v4, &v23); } v21 = *((_DWORD *)v4 + 26); v22 = 0; v11 = sub_6B6870(v4, &v21, 1); v12 = v11; if ( v11 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v11 + 188))(v11, 0.000099999997); v13 = *(_DWORD *)v12; v14 = *((float *)v4 + 31); v15 = sub_8A9EF0(); v16 = *(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD))(v13 + 196); v17 = v15; v24 = *((float *)v4 + 9) * *((float *)v4 + 32) * flt_AB5C20; v16(v12, LODWORD(v24), LODWORD(v17), LODWORD(v14)); v18 = *(void (__thiscall **)(char *, int *, int, signed int))(*(_DWORD *)v4 + 24); v19 = *((_DWORD *)v4 + 26); v20 = 0; v18(v4, &v19, a3, 1); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v12 + 188))(v12, 0.000099999997); *((_DWORD *)v4 + 23) = 4; v4[101] = 1; } } else { *((_DWORD *)v4 + 23) = 1; } } else { sub_6B8520(v4, a3); } } } } // AB5C20: using guessed type float flt_AB5C20; //----- (006B9450) -------------------------------------------------------- void __userpurge sub_6B9450(int a1@, double a2@, float a3) { int v3; // esi int v4; // eax int v5; // eax int v6; // edi int v7; // eax int v8; // eax int v9; // eax int v10; // edi int v11; // eax int v12; // eax char *v13; // edi unsigned int v14; // edx double v15; // st7 unsigned int v16; // eax int v17; // eax int v18; // [esp+Ch] [ebp-8h] float v19; // [esp+10h] [ebp-4h] v3 = a1; if ( *(_BYTE *)(a1 + 32) ) { v4 = sub_6B5F80((_DWORD *)a1, *(_DWORD *)(a1 + 104)); if ( v4 && (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 228))(v4) != 1 && *(_BYTE *)(v3 + 101) ) { a2 = a3; *(_WORD *)(v3 + 100) = 1; *(float *)(v3 + 96) = a3; *(_DWORD *)(v3 + 92) = 5; } v5 = sub_6B5F80((_DWORD *)v3, *(_DWORD *)(v3 + 108)); v6 = v5; if ( v5 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 192))(v5); if ( a2 < 0.0000099999997 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 220))(v6); v18 = *(_DWORD *)(v3 + 108); v19 = 0.0; sub_6B6C20((_DWORD *)v3, &v18); *(_DWORD *)(v3 + 92) = 5; } } v7 = *(_DWORD *)(v3 + 92); if ( v7 == 1 ) { v8 = sub_6B5F80((_DWORD *)v3, *(_DWORD *)(v3 + 104)); if ( v8 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v8 + 192))(v8); if ( a2 < 0.0000099999997 ) sub_6B8520((_DWORD *)v3, 0); } } else if ( v7 == 2 ) { v9 = sub_6B5F80((_DWORD *)v3, *(_DWORD *)(v3 + 104)); v10 = v9; if ( v9 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 192))(v9); if ( a2 < 0.0000099999997 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v10 + 220))(v10); *(_DWORD *)(v3 + 92) = 5; } } } if ( !*(_BYTE *)(v3 + 100) ) goto LABEL_33; v11 = *(unsigned __int16 *)(v3 + 120); if ( (_WORD)v11 == -1 ) { v19 = a3 - *(float *)(v3 + 96); if ( v19 <= 180.0 ) goto LABEL_33; if ( rand() % 3 != 1 ) { *(float *)(v3 + 96) = a3; goto LABEL_33; } } else { v12 = sub_4E64C0(v11); v13 = (char *)v12; if ( !v12 ) goto LABEL_33; v14 = 274877907 * (unsigned __int64)*(unsigned __int16 *)(v12 + 110) >> 32; v19 = a3 - *(float *)(v3 + 96); v15 = v19; LODWORD(v19) = ((signed int)v14 >> 6) + (v14 >> 31); if ( (double)SLODWORD(v19) >= v15 ) goto LABEL_33; v16 = (unsigned int)rand() % *(_DWORD *)(v3 + 112); if ( v16 != *(_DWORD *)(v3 + 116) ) { *(_DWORD *)(v3 + 116) = v16; if ( !v16 ) { sub_6B9200((const char *)v3, v13 + 14, 0, 1.0); *(_BYTE *)(v3 + 100) = 0; goto LABEL_33; } v17 = v16 - 1; if ( !v17 ) { sub_6B9200((const char *)v3, v13 + 46, 0, 1.0); *(_BYTE *)(v3 + 100) = 0; goto LABEL_33; } if ( v17 == 1 ) { sub_6B9200((const char *)v3, v13 + 78, 0, 1.0); *(_BYTE *)(v3 + 100) = 0; LABEL_33: sub_6B62E0((_DWORD *)v3, SLODWORD(a3)); return; } LABEL_31: *(_BYTE *)(v3 + 100) = 0; goto LABEL_33; } } sub_6B8520((_DWORD *)v3, 0); goto LABEL_31; } } //----- (006B96A0) -------------------------------------------------------- void __thiscall sub_6B96A0(int this, int a2, int a3) { int v3; // esi int v4; // edi int *v5; // eax int v6; // edi unsigned int v7; // eax int v8; // eax v3 = this; if ( *(_BYTE *)(this + 32) ) { *(float *)(this + 128) = 1.0; v4 = dword_ACDA4C; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA4C + 16))(dword_ACDA4C, a2) ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v4 + 200) ) { v5 = (int *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)a2); if ( *v5 ) { v6 = *v5; if ( *v5 ) { *(_WORD *)(v3 + 120) = a2; if ( *(_BYTE *)(v6 + 14) == 45 ) { *(_DWORD *)(v3 + 112) = 0; } else if ( *(_BYTE *)(v6 + 46) == 45 ) { *(_DWORD *)(v3 + 112) = 1; } else if ( *(_BYTE *)(v6 + 78) == 45 ) { *(_DWORD *)(v3 + 112) = 2; } else { *(_DWORD *)(v3 + 112) = 3; } if ( *(_DWORD *)(v3 + 112) ) { *(float *)(v3 + 128) = (double)*(unsigned int *)(v6 + 164) / 100.0; v7 = (unsigned int)rand() % *(_DWORD *)(v3 + 112); *(_DWORD *)(v3 + 116) = v7; if ( v7 ) { v8 = v7 - 1; if ( v8 ) { if ( v8 == 1 ) sub_6B9200((const char *)v3, (char *)(v6 + 78), a3, *(float *)(v3 + 128)); } else { sub_6B9200((const char *)v3, (char *)(v6 + 46), a3, *(float *)(v3 + 128)); } } else { sub_6B9200((const char *)v3, (char *)(v6 + 14), a3, *(float *)(v3 + 128)); } } } } } } } } // ACDA4C: using guessed type int dword_ACDA4C; //----- (006B9820) -------------------------------------------------------- void *__thiscall sub_6B9820(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,void *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; //----- (006B9850) -------------------------------------------------------- void *__thiscall sub_6B9850(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F807C: using guessed type void *NiTListBase>,NiPointer>::`vftable'; //----- (006B9880) -------------------------------------------------------- void *__thiscall sub_6B9880(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,IAmbientArea *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F808C: using guessed type void *NiTListBase,IAmbientArea *>::`vftable'; //----- (006B98B0) -------------------------------------------------------- void *__thiscall sub_6B98B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F809C: using guessed type void *NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; //----- (006B98E0) -------------------------------------------------------- int sub_6B98E0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_B91648 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // B91648: using guessed type int dword_B91648; //----- (006B9900) -------------------------------------------------------- _DWORD *__thiscall sub_6B9900(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ecx v2 = this; result = (_DWORD *)(*(int (**)(void))(*this + 4))(); result[2] = *a2; *result = 0; result[1] = v2[2]; v4 = (_DWORD *)v2[2]; if ( v4 ) { *v4 = result; ++v2[3]; } else { ++v2[3]; v2[1] = result; } v2[2] = result; return result; } //----- (006B9950) -------------------------------------------------------- _DWORD *__thiscall sub_6B9950(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,void *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,void *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; //----- (006B99E0) -------------------------------------------------------- int __thiscall sub_6B99E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,void *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,void *>::`vftable'; return result; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; //----- (006B9A60) -------------------------------------------------------- _DWORD *__thiscall sub_6B9A60(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,IAmbientArea *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,IAmbientArea *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F808C: using guessed type void *NiTListBase,IAmbientArea *>::`vftable'; // 9F80DC: using guessed type void *NiTPointerListBase,IAmbientArea *>::`vftable'; //----- (006B9AF0) -------------------------------------------------------- _DWORD *__thiscall sub_6B9AF0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F809C: using guessed type void *NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; // 9F80EC: using guessed type void *NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; //----- (006B9B80) -------------------------------------------------------- int __thiscall sub_6B9B80(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,IAmbientArea *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,IAmbientArea *>::`vftable'; return result; } // 9F808C: using guessed type void *NiTListBase,IAmbientArea *>::`vftable'; // 9F80DC: using guessed type void *NiTPointerListBase,IAmbientArea *>::`vftable'; //----- (006B9C00) -------------------------------------------------------- int __thiscall sub_6B9C00(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; return result; } // 9F809C: using guessed type void *NiTListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; // 9F80EC: using guessed type void *NiTPointerListBase,SoundGroupAmbient::PlayingAreaInfo *>::`vftable'; //----- (006B9C80) -------------------------------------------------------- int __thiscall sub_6B9C80(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase>,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase>,NiPointer>::`vftable'; return result; } // 9F807C: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F80BC: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (006B9D00) -------------------------------------------------------- _DWORD *__thiscall sub_6B9D00(_DWORD *this) { _DWORD *result; // eax result = this + 1; if ( this[6] >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (006B9D10) -------------------------------------------------------- _DWORD *__fastcall sub_6B9D10(_DWORD *a1) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ST00_4 _DWORD *v4; // esi _DWORD *v5; // edi _DWORD *v6; // ST00_4 _DWORD *v7; // esi _DWORD *v8; // edi _DWORD *v9; // ST00_4 _DWORD *v10; // esi _DWORD *v11; // edi _DWORD *v12; // ST00_4 _DWORD *v14; // [esp+14h] [ebp-10h] v14 = a1; v1 = a1 + 27; a1[27] = &NiTPointerListBase>,NiPointer>::`vftable'; v2 = (_DWORD *)a1[28]; if ( v2 ) { do { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } while ( v2 ); a1 = v14; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase>,NiPointer>::`vftable'; v4 = a1 + 23; a1[23] = &NiTPointerListBase>,NiPointer>::`vftable'; v5 = (_DWORD *)a1[24]; if ( v5 ) { do { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v6); } while ( v5 ); a1 = v14; } v4[3] = 0; v4[1] = 0; v4[2] = 0; *v4 = &NiTListBase>,NiPointer>::`vftable'; v7 = a1 + 19; a1[19] = &NiTPointerListBase>,NiPointer>::`vftable'; v8 = (_DWORD *)a1[20]; if ( v8 ) { do { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v7 + 8))(v7, v9); } while ( v8 ); a1 = v14; } v7[3] = 0; v7[1] = 0; v7[2] = 0; *v7 = &NiTListBase>,NiPointer>::`vftable'; v10 = a1 + 15; a1[15] = &NiTPointerListBase,void *>::`vftable'; v11 = (_DWORD *)a1[16]; if ( v11 ) { do { v12 = v11; v11 = (_DWORD *)*v11; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v10 + 8))(v10, v12); } while ( v11 ); a1 = v14; } v10[3] = 0; v10[1] = 0; v10[2] = 0; *v10 = &NiTListBase,void *>::`vftable'; return sub_6B6E70(a1); } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F807C: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; // 9F80BC: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (006B9E50) -------------------------------------------------------- _DWORD *__thiscall sub_6B9E50(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_B9164C & 1) ) { dword_B9164C |= 1u; atexit(sub_9A3830); } *((_BYTE *)v1 + 68) = 0; *v1 = &MapAmbienceSoundInfoTab::`vftable'; return v1; } // 9F80CC: using guessed type void *ITableBase::`vftable'; // 9F814C: using guessed type void *MapAmbienceSoundInfoTab::`vftable'; // B91648: using guessed type int dword_B91648; // B9164C: using guessed type int dword_B9164C; //----- (006B9E90) -------------------------------------------------------- void **__thiscall sub_6B9E90(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F80CC: using guessed type void *ITableBase::`vftable'; //----- (006B9F10) -------------------------------------------------------- _DWORD *__thiscall sub_6B9F10(void *this, char a2) { _DWORD *v2; // esi v2 = this; if ( *((_DWORD *)this + 21) >= 0x10u ) operator delete(*((void **)this + 16)); v2[21] = 15; v2[20] = 0; *((_BYTE *)v2 + 64) = 0; sub_6B6F50(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006B9F60) -------------------------------------------------------- bool __cdecl sub_6B9F60(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_B91648; if ( !dword_B91648 ) { v5 = operator new(0xC4u); v12 = 0; if ( v5 ) v4 = sub_6B9E50(v5); else v4 = 0; v12 = -1; dword_B91648 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_B91648 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_B91648 + 56); if ( !v6 || *v6 != 1054 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_B91648 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_B91648 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // B91648: using guessed type int dword_B91648; //----- (006BA0B0) -------------------------------------------------------- void *__thiscall sub_6BA0B0(void *this, char a2) { void *v2; // esi v2 = this; sub_6B8E50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006BA0F0) -------------------------------------------------------- int __thiscall sub_6BA0F0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int result; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // ecx int v8; // ecx int v9; // ecx v1 = this; v2 = this[1]; if ( v2 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v2 + 72))(1); v4 = v1[4]; v1[1] = 0; if ( v4 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v4 + 72))(1); v5 = v1[5]; v1[4] = 0; if ( v5 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v5 + 72))(1); v6 = v1[2]; v1[5] = 0; if ( v6 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v6 + 72))(1); v7 = v1[3]; v1[2] = 0; if ( v7 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v7 + 72))(1); v8 = v1[6]; v1[3] = 0; if ( v8 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v8 + 72))(1); v9 = v1[7]; v1[6] = 0; if ( v9 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v9 + 72))(1); v1[7] = 0; return result; } //----- (006BA180) -------------------------------------------------------- void __thiscall sub_6BA180(_BYTE *this, int a2) { this[60] = a2; sub_6B59E0(a2); } //----- (006BA1B0) -------------------------------------------------------- void __thiscall sub_6BA1B0(_DWORD *this, int a2) { int v2; // ecx v2 = this[1]; if ( v2 ) sub_6B96A0(v2, a2, 0); } //----- (006BA1D0) -------------------------------------------------------- char __thiscall sub_6BA1D0(_DWORD *this, char *a2) { const char *v2; // ecx v2 = (const char *)this[1]; if ( v2 ) sub_6B9200(v2, a2, 1, 1.0); return 1; } //----- (006BA350) -------------------------------------------------------- unsigned int __thiscall sub_6BA350(unsigned int *this, unsigned int a2) { unsigned int result; // eax result = *this; if ( *this < a2 ) { *this = 0; } else { *this = result - a2; result = a2; } return result; } //----- (006BA370) -------------------------------------------------------- int __thiscall sub_6BA370(_DWORD *this, int a2) { int result; // eax result = a2; *this += a2; return result; } //----- (006BA380) -------------------------------------------------------- int __stdcall sub_6BA380(float a1) { return sub_6B57D0(a1); } //----- (006BA3A0) -------------------------------------------------------- int __thiscall sub_6BA3A0(int this, char a2) { int result; // eax if ( *(_DWORD *)(this + 4) ) { if ( a2 == 1 ) { *(float *)(this + 64) = sub_6B5560(); result = sub_6B57D0(0.0); } else { result = sub_6B57D0(*(float *)(this + 64)); } } return result; } //----- (006BA3F0) -------------------------------------------------------- void __thiscall sub_6BA3F0(_DWORD *this) { float *v1; // ecx v1 = (float *)this[2]; if ( v1 ) sub_6B8050(v1); } //----- (006BA4E0) -------------------------------------------------------- int __thiscall sub_6BA4E0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // ST00_4 int v4; // esi int v5; // esi int v6; // eax v1 = this; sub_6B5870(); v2 = (_DWORD *)v1[19]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[18] + 8))(v1 + 18, v3); } v1[21] = 0; v1[19] = 0; v1[20] = 0; v4 = v1[10]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[10] = 0; } v5 = v1[11]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[11] = 0; } v1[9] = 0; v1[8] = 0; sub_6BA0F0(v1); sub_6B5980(); v6 = sub_88CE60(); return (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 64))(v6); } //----- (006BA650) -------------------------------------------------------- int __thiscall sub_6BA650(_DWORD *this, int a2) { int v2; // ecx int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] v2 = this[5]; v4 = a2; v5 = 0; return sub_6B69F0(v2, (int)&v4, 0.0, 0); } //----- (006BA680) -------------------------------------------------------- int __thiscall sub_6BA680(_DWORD **this, int a2) { return sub_6B84E0(this[5], a2); } //----- (006BA690) -------------------------------------------------------- int __thiscall sub_6BA690(_DWORD **this, float a2) { return (*(int (__stdcall **)(_DWORD))(*this[1] + 40))(LODWORD(a2)); } //----- (006BA6B0) -------------------------------------------------------- int __thiscall sub_6BA6B0(_DWORD **this, float a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(_DWORD))(*this[4] + 40))(LODWORD(a2)); (*(void (__stdcall **)(_DWORD))(*v2[5] + 40))(LODWORD(a2)); (*(void (__stdcall **)(_DWORD))(*v2[7] + 40))(LODWORD(a2)); return (*(int (__stdcall **)(_DWORD))(*v2[6] + 40))(LODWORD(a2)); } //----- (006BA700) -------------------------------------------------------- int __thiscall sub_6BA700(_DWORD **this, float a2) { return (*(int (__stdcall **)(_DWORD))(*this[7] + 40))(LODWORD(a2)); } //----- (006BA720) -------------------------------------------------------- int __thiscall sub_6BA720(_DWORD **this, float a2) { _DWORD **v2; // esi v2 = this; (*(void (__stdcall **)(_DWORD))(*this[2] + 40))(LODWORD(a2)); return (*(int (__stdcall **)(_DWORD))(*v2[3] + 40))(LODWORD(a2)); } //----- (006BA750) -------------------------------------------------------- int __cdecl sub_6BA750(int a1) { int v1; // edi char *v2; // eax FILE *v3; // eax v1 = 0; while ( 1 ) { if ( !byte_ACAD5C ) sub_420410(); v2 = sub_7549E0("%s\\%s%02d.wav", byte_ACA940, a1, v1 + 1); v3 = fopen(v2, "rb"); if ( !v3 ) break; ++v1; fclose(v3); } return v1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BA7B0) -------------------------------------------------------- void __thiscall sub_6BA7B0(_BYTE *this, unsigned __int16 a2) { _BYTE *v2; // ebx int v3; // esi int *v4; // eax int v5; // eax unsigned int v6; // esi unsigned int v7; // edx int v8; // esi char v9; // [esp+8h] [ebp-110h] char *v10; // [esp+Ch] [ebp-10Ch] char v11; // [esp+10h] [ebp-108h] v2 = this; if ( this[88] ) { v3 = dword_ACDA48; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, a2) ) { if ( a2 <= *(_WORD *)(v3 + 200) ) { v4 = (int *)(*(_DWORD *)(v3 + 196) + 4 * a2); if ( *v4 ) { v5 = *v4; if ( v5 ) { sprintf(&v11, "resvoice\\%s\\%s", v5 + 2, v5 + 2); v6 = sub_6BA750((int)&v11); if ( v6 ) { v7 = rand() % v6; v8 = *((_DWORD *)v2 + 7); v10 = sub_7549E0("%s%02d.wav", &v11, v7 + 1); (*(void (__thiscall **)(int, char *, signed int, _DWORD))(*(_DWORD *)v8 + 24))(v8, &v9, 1, 0); } } } } } } } // ACDA48: using guessed type int dword_ACDA48; //----- (006BA890) -------------------------------------------------------- void __thiscall sub_6BA890(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx char v4; // [esp+8h] [ebp-110h] char *v5; // [esp+Ch] [ebp-10Ch] char v6; // [esp+10h] [ebp-108h] v2 = this; if ( a2 ) { if ( sub_680840(byte_AD9238) ) { if ( sub_680840(byte_AD9238) == 1 ) sprintf(&v6, "MaleVoice\\%s.wav", a2); } else { sprintf(&v6, "FemaleVoice\\%s.wav", a2); } v3 = v2[7]; v5 = &v6; (*(void (__stdcall **)(char *, signed int, _DWORD))(*(_DWORD *)v3 + 24))(&v4, 1, 0); } } //----- (006BA930) -------------------------------------------------------- _DWORD *__thiscall sub_6BA930(_DWORD *this, int a2, int a3) { int v3; // esi _DWORD *v4; // ebx _DWORD *result; // eax char *v6; // eax int v7; // ecx char v8; // [esp+Ch] [ebp-8h] char *v9; // [esp+10h] [ebp-4h] v3 = dword_ACDA70; v4 = this; result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a2); if ( (_BYTE)result ) { if ( (unsigned __int16)a2 <= *(_WORD *)(v3 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)a2); if ( *result ) { result = (_DWORD *)*result; if ( result ) { v6 = sub_7549E0("%s.wav", result + 70); v7 = v4[4]; v9 = v6; result = (_DWORD *)(*(int (__stdcall **)(char *, int, _DWORD))(*(_DWORD *)v7 + 32))(&v8, a3, 0); } } } } return result; } // ACDA70: using guessed type int dword_ACDA70; //----- (006BA9B0) -------------------------------------------------------- _DWORD *__stdcall sub_6BA9B0(int a1) { int v1; // esi _DWORD *result; // eax v1 = dword_ACDA70; result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a1); if ( (_BYTE)result ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1); if ( *result ) { result = (_DWORD *)*result; if ( result ) result = (_DWORD *)sub_6B84E0((_DWORD *)dword_AB6534, (int)(result + 86)); } } } return result; } // AB6534: using guessed type int dword_AB6534; // ACDA70: using guessed type int dword_ACDA70; //----- (006BAA10) -------------------------------------------------------- _DWORD *__stdcall sub_6BAA10(int a1) { int v1; // esi _DWORD *result; // eax v1 = dword_ACDA70; result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA70 + 16))(dword_ACDA70, a1); if ( (_BYTE)result ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { result = (_DWORD *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1); if ( *result ) { result = (_DWORD *)*result; if ( result ) result = (_DWORD *)sub_6B84E0((_DWORD *)dword_AB6534, (int)(result + 78)); } } } return result; } // AB6534: using guessed type int dword_AB6534; // ACDA70: using guessed type int dword_ACDA70; //----- (006BAA70) -------------------------------------------------------- LONG __thiscall sub_6BAA70(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ST00_4 int v4; // esi LONG result; // eax int v6; // esi _DWORD *v7; // [esp+14h] [ebp-10h] v7 = this; v1 = this + 18; this[18] = &PgTList>::`vftable'; v2 = (_DWORD *)this[19]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3); } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; v4 = v7[11]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = (LONG)v7; v6 = v7[10]; if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } return result; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F8354: using guessed type void *PgTList>::`vftable'; //----- (006BAB40) -------------------------------------------------------- int __thiscall sub_6BAB40(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // esi char v5; // cl char *v6; // eax int v7; // ecx char v8; // [esp+8h] [ebp-Ch] char *v9; // [esp+Ch] [ebp-8h] result = a2; v4 = this; if ( a2 ) { v5 = *(_BYTE *)(a2 + 56); result = a2 + 56; if ( v5 != 45 && v5 != 48 && v5 != 32 ) { if ( v4[4] ) { v6 = sub_7549E0("%s.wav", result); v7 = v4[4]; v9 = v6; result = (*(int (__stdcall **)(char *, int, _DWORD))(*(_DWORD *)v7 + 32))(&v8, a3, 0); } } } return result; } //----- (006BABB0) -------------------------------------------------------- int __thiscall sub_6BABB0(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // esi char *v5; // eax int v6; // ecx char v7; // [esp+8h] [ebp-Ch] char *v8; // [esp+Ch] [ebp-8h] result = a2; v4 = this; if ( this[4] ) { v5 = sub_7549E0("%s.wav", a2); v6 = v4[4]; v8 = v5; result = (*(int (__stdcall **)(char *, int, _DWORD))(*(_DWORD *)v6 + 32))(&v7, a3, 0); } return result; } //----- (006BACD0) -------------------------------------------------------- int __thiscall sub_6BACD0(_DWORD *this, float a2, int a3) { _DWORD *v3; // edi int v4; // ecx int v5; // ecx float v6; // eax float v7; // edx volatile LONG *v8; // esi volatile LONG v9; // eax int v10; // esi float *v11; // eax float v12; // ecx float v13; // edx int v14; // ecx int v15; // ecx int v16; // edi float v18; // [esp+2Ch] [ebp-34h] float v19; // [esp+30h] [ebp-30h] float v20; // [esp+34h] [ebp-2Ch] float v21; // [esp+38h] [ebp-28h] float v22; // [esp+3Ch] [ebp-24h] float v23; // [esp+40h] [ebp-20h] void (__stdcall ***v24)(signed int); // [esp+44h] [ebp-1Ch] void (__stdcall ***v25)(_DWORD); // [esp+48h] [ebp-18h] volatile LONG *v26; // [esp+4Ch] [ebp-14h] float v27; // [esp+50h] [ebp-10h] int v28; // [esp+5Ch] [ebp-4h] float v29; // [esp+6Ch] [ebp+Ch] v3 = this; v4 = this[11]; if ( v4 ) { if ( (*(int (**)(void))(*(_DWORD *)v4 + 228))() != 1 && 0.0 != *((float *)v3 + 13) ) { *((_BYTE *)v3 + 48) = 1; *((float *)v3 + 14) = a2; *((float *)v3 + 13) = 0.0; } if ( *((_BYTE *)v3 + 48) ) { v27 = a2 - *((float *)v3 + 14); if ( v27 > 180.0 && rand() % 3 == 1 ) { v5 = v3[11]; *((float *)v3 + 13) = 1.0; *((_BYTE *)v3 + 48) = 0; (*(void (**)(void))(*(_DWORD *)v5 + 216))(); } } } v6 = *((float *)v3 + 19); if ( v6 != 0.0 ) { while ( 1 ) { v7 = *(float *)LODWORD(v6); v8 = *(volatile LONG **)(LODWORD(v6) + 8); v9 = *v8; v27 = v7; if ( (*(int (__thiscall **)(volatile LONG *))(v9 + 228))(v8) != 1 ) { (*(void (__thiscall **)(volatile LONG *))(*v8 + 220))(v8); v26 = v8; InterlockedIncrement(v8 + 1); v28 = 0; sub_6BB9F0(v3 + 18, &v25, &v26); if ( v25 ) { v24 = v25; if ( !InterlockedDecrement((volatile LONG *)v25 + 1) ) { if ( v24 ) (**v24)(1); } } v28 = -1; if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); } if ( v27 == 0.0 ) break; v6 = v27; } } v10 = a3; if ( a3 ) { v11 = (float *)v3[9]; if ( v11 ) { v12 = *(float *)(a3 + 140); v13 = *(float *)(a3 + 144); v29 = *((float *)v3 + 17); v21 = v12; v23 = *(float *)(v10 + 148); v21 = v12 * v29; v11[22] = v21; v22 = v13 * v29; v11[23] = v22; v23 = v29 * v23; v11[24] = v23; v14 = v3[9]; v21 = *(float *)(v10 + 108); v22 = *(float *)(v10 + 120); v23 = *(float *)(v10 + 132); (*(void (__stdcall **)(float *))(*(_DWORD *)v14 + 128))(&v21); v15 = v3[9]; v18 = *(float *)(v10 + 104); v19 = *(float *)(v10 + 116); v20 = *(float *)(v10 + 128); (*(void (__stdcall **)(float *))(*(_DWORD *)v15 + 120))(&v18); sub_85BED0((_DWORD **)v3[9], a2, 1); (*(void (**)(void))(*(_DWORD *)v3[9] + 136))(); sub_85BED0((_DWORD **)v3[10], a2, 1); } } v16 = v3[8]; if ( v16 ) (*(void (__thiscall **)(int, _DWORD, signed int))(*(_DWORD *)v16 + 88))(v16, LODWORD(a2), 1); return sub_6B58F0(a2); } //----- (006BAF40) -------------------------------------------------------- char __thiscall sub_6BAF40(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int v6; // [esp+0h] [ebp-Ch] int v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] LOBYTE(v4) = a2; if ( a2 ) { LOBYTE(v4) = *(_BYTE *)(a2 + 56); if ( (_BYTE)v4 != 45 && (_BYTE)v4 != 48 && (_BYTE)v4 != 32 ) { LOBYTE(v4) = a3; if ( a3 ) { v4 = *(_DWORD **)(a3 + 700); if ( v4 ) { v6 = v4[35]; v7 = v4[36]; v8 = v4[37]; LOBYTE(v4) = sub_6BABB0(this, a2 + 56, (int)&v6); } } } } return (char)v4; } //----- (006BAFA0) -------------------------------------------------------- int __thiscall sub_6BAFA0(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4, _DWORD *a5) { _DWORD *v5; // ebx bool v6; // zf signed int v7; // eax int v8; // edx int v9; // esi _DWORD *v10; // ecx _DWORD *v11; // eax int result; // eax char *v13; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-1Ch] char *v16; // [esp+10h] [ebp-18h] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] _DWORD *v20; // [esp+20h] [ebp-8h] v5 = a5; v6 = a2[87] == 0; v20 = this; if ( v6 ) { v9 = a2[a3 + 83]; v8 = (int)&a2[8 * (a3 + 8) + 2] + a3; } else { v7 = rand() & 0x80000001; v6 = v7 == 0; if ( v7 < 0 ) v6 = (((_BYTE)v7 - 1) | 0xFFFFFFFE) == -1; if ( v6 ) { v8 = (int)a2 + 297; v9 = a2[84]; } else { v8 = (int)(a2 + 66); v9 = a2[83]; } } v10 = 0; v11 = 0; if ( !a5 ) v5 = a4; switch ( v9 ) { case 0: case 3: if ( a4 != (_DWORD *)-776 ) v10 = (_DWORD *)a4[203]; v11 = a4; goto LABEL_31; case 1: if ( a4 != (_DWORD *)-776 ) v10 = (_DWORD *)a4[207]; v11 = a4; goto LABEL_31; case 2: if ( a4 != (_DWORD *)-776 ) v10 = (_DWORD *)a4[213]; v11 = a4; goto LABEL_31; case 4: if ( a4 != (_DWORD *)-776 ) v10 = (_DWORD *)a4[219]; v11 = a4; goto LABEL_31; case 5: if ( a4 != (_DWORD *)-776 ) v10 = (_DWORD *)a4[220]; v11 = a4; goto LABEL_31; case 6: case 7: case 10: if ( v5 != (_DWORD *)-776 ) v10 = (_DWORD *)v5[207]; goto LABEL_30; case 8: v10 = (_DWORD *)a4[175]; v11 = a4; goto LABEL_31; case 9: v10 = (_DWORD *)v5[175]; LABEL_30: v11 = v5; LABEL_31: if ( !v10 ) goto LABEL_32; break; default: LABEL_32: v10 = (_DWORD *)v11[175]; break; } v17 = v10[35]; v18 = v10[36]; result = (int)v20; v6 = v20[4] == 0; v19 = v10[37]; if ( !v6 ) { v13 = sub_7549E0("%s.wav", v8); v14 = v20[4]; v16 = v13; result = (*(int (__stdcall **)(char *, int *, _DWORD))(*(_DWORD *)v14 + 32))(&v15, &v17, 0); } return result; } //----- (006BB140) -------------------------------------------------------- BOOL __thiscall sub_6BB140(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // edi _DWORD *v14; // ecx _DWORD *v15; // eax _DWORD *v16; // eax char v18; // [esp+33h] [ebp-Dh] v1 = this; v18 = 0; v2 = operator new(0x88u); if ( v2 ) v3 = sub_6B8750(v2); else v3 = 0; v1[1] = v3; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v3 + 52))(v3, v1, 2) ) v18 = 1; v4 = operator new(0xC0u); if ( v4 ) v5 = sub_6BBB10(v4); else v5 = 0; v1[5] = v5; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v5 + 52))(v5, v1, 6) ) v18 |= 1u; v6 = operator new(0x80u); if ( v6 ) v7 = sub_6BBC50(v6); else v7 = 0; v1[4] = v7; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v7 + 52))(v7, v1, 6) ) v18 |= 1u; sub_6B5E90(v1[4], 100.0); v8 = operator new(0xF0u); if ( v8 ) v9 = sub_6BBD70(v8); else v9 = 0; v1[2] = v9; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v9 + 52))(v9, v1, 8) ) v18 |= 1u; v10 = operator new(0x80u); if ( v10 ) v11 = sub_6BBCA0(v10); else v11 = 0; v1[3] = v11; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v11 + 52))(v11, v1, 3) ) v18 |= 1u; *(_DWORD *)(v1[3] + 124) = 10; v12 = operator new(0x40u); v13 = v12; if ( v12 ) { sub_6B6F30(v12); *v13 = &SoundGroupMainChar::`vftable'; v14 = v13; } else { v14 = 0; } v1[6] = v14; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *, signed int))(*v14 + 52))(v1, 1) ) v18 |= 1u; v15 = operator new(0x80u); if ( v15 ) v16 = sub_6BBCF0(v15); else v16 = 0; v1[7] = v16; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v16 + 52))(v16, v1, 1) ) v18 |= 1u; *(_DWORD *)(v1[7] + 124) = 2; return v18 == 0; } // 9F82C4: using guessed type void *SoundGroupMainChar::`vftable'; //----- (006BB380) -------------------------------------------------------- bool __thiscall sub_6BB380(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax bool result; // al _DWORD *v4; // eax _DWORD *v5; // edi int v6; // esi int v7; // esi const CHAR *v8; // eax const char **v9; // eax void *v10; // esi int v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax char v14; // [esp+2Ch] [ebp-38h] void *v15; // [esp+30h] [ebp-34h] char v16; // [esp+34h] [ebp-30h] int v17; // [esp+60h] [ebp-4h] v1 = this; v2 = sub_88CE60(); v1[8] = v2; (*(void (__thiscall **)(int, HWND))(*(_DWORD *)v2 + 132))(v2, hWnd); *v1 = 100; result = sub_6BB140(v1); if ( !result ) { *((_BYTE *)v1 + 60) = 0; return result; } v4 = operator new(0xE8u); v15 = v4; v5 = 0; v17 = 0; if ( v4 ) v5 = sub_85A1C0(v4, 0); v6 = v1[10]; v17 = -1; if ( (_DWORD *)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[10] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } if ( !byte_ACAD5C ) sub_420410(); v7 = *(_DWORD *)v1[8]; v8 = sub_401410(byte_ACAC58, "miles"); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, const CHAR *))(v7 + 60))(v1[8], v8) ) goto LABEL_29; v9 = (const char **)sub_88D820((_DWORD *)v1[8], (_DWORD **)&v14); strcpy(&v16, "Miles Fast 2D Positional Audio"); v15 = v9; if ( v9 ) { while ( !strstr(*v9, &v16) ) { v15 = (void *)sub_88D890((_DWORD *)v1[8], (_DWORD **)&v14); if ( !v15 ) goto LABEL_20; v9 = (const char **)v15; } v10 = v15; goto LABEL_23; } LABEL_20: v10 = (void *)sub_88D820((_DWORD *)v1[8], (_DWORD **)&v14); if ( !v10 ) { LABEL_29: *((_BYTE *)v1 + 60) = 0; sub_6B59E0(0); return 0; } LABEL_23: sub_88D910((_DWORD *)v1[8], (int)v10); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[8] + 104))(1.0); v11 = sub_88D3D0((_DWORD *)v1[8]); v1[9] = v11; (*(void (__thiscall **)(int, void *))(*(_DWORD *)v11 + 156))(v11, v10); v12 = operator new(0xE8u); v15 = v12; v17 = 1; if ( v12 ) v13 = sub_85A1C0(v12, 0); else v13 = 0; v17 = -1; sub_56FF80(v1 + 10, (int)v13); sub_85BED0((_DWORD **)v1[10], 0.0, 1); (*(void (__stdcall **)(int *))(*(_DWORD *)v1[9] + 120))(&dword_AB4FE8); (*(void (__stdcall **)(float *))(*(_DWORD *)v1[9] + 128))(&flt_AB4FD0); (*(void (**)(void))(*(_DWORD *)v1[8] + 80))(); *((_BYTE *)v1 + 60) = 1; sub_6B59E0(1); return 1; } // AB4FD0: using guessed type float flt_AB4FD0; // AB4FE8: using guessed type int dword_AB4FE8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BB5F0) -------------------------------------------------------- void *__thiscall sub_6BB5F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (006BB620) -------------------------------------------------------- _DWORD *__thiscall sub_6BB620(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F82B0: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006BB6B0) -------------------------------------------------------- int __thiscall sub_6BB6B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F82B0: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006BB730) -------------------------------------------------------- _DWORD *__thiscall sub_6BB730(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase>,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase>,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F807C: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F80BC: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; //----- (006BB7C0) -------------------------------------------------------- _DWORD *__thiscall sub_6BB7C0(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi _DWORD *v4; // ebx _DWORD *result; // eax _DWORD *v6; // edx _DWORD *v7; // eax int v8; // edi v3 = this; v4 = *a3; if ( *a3 == (_DWORD *)this[1] ) { *a3 = (_DWORD *)*v4; sub_6B7B30(this, a2); result = a2; } else if ( v4 == (_DWORD *)this[2] ) { *a3 = 0; sub_402AA0(this, a2); result = a2; } else { v6 = (_DWORD *)v4[1]; v7 = (_DWORD *)*v4; *a3 = (_DWORD *)*v4; if ( v6 ) *v6 = v7; if ( v7 ) v7[1] = v6; v8 = v4[2]; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v4); --v3[3]; *a2 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } result = a2; } return result; } //----- (006BB8E0) -------------------------------------------------------- int __thiscall sub_6BB8E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F8354: using guessed type void *PgTList>::`vftable'; //----- (006BB960) -------------------------------------------------------- _DWORD *__thiscall sub_6BB960(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F82A0: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F8354: using guessed type void *PgTList>::`vftable'; //----- (006BB9F0) -------------------------------------------------------- _DWORD *__thiscall sub_6BB9F0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // eax _DWORD *v4; // edx _DWORD *v5; // esi int v6; // eax int *v7; // eax _DWORD *v8; // esi signed int v9; // ebx int v10; // eax int v11; // ebx void (__thiscall ***v12)(_DWORD, signed int); // esi int v14; // [esp+10h] [ebp-18h] int v15; // [esp+14h] [ebp-14h] unsigned int v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v16 = 0; v3 = (_DWORD *)this[1]; if ( v3 ) { while ( 1 ) { v4 = v3 + 2; v5 = v3; v3 = (_DWORD *)*v3; if ( *a3 == *v4 ) break; if ( !v3 ) goto LABEL_4; } v6 = (int)v5; } else { LABEL_4: v6 = 0; } v15 = v6; if ( v6 ) { v7 = sub_6BB7C0(this, &v14, (_DWORD **)&v15); v8 = a3; v9 = 1; v17 = 1; } else { v8 = (_DWORD *)*a3; a3 = v8; if ( v8 ) InterlockedIncrement(v8 + 1); v7 = (int *)&a3; v9 = 2; } v10 = *v7; *a2 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v11 = v9 | 4; if ( v11 & 2 ) { v11 &= 0xFFFFFFFD; v16 = v11; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); } } v17 = 0; if ( v11 & 1 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))v14; v16 = v11 & 0xFFFFFFFE; if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v12 ) (**v12)(v12, 1); } } return a2; } //----- (006BBB10) -------------------------------------------------------- _DWORD *__thiscall sub_6BBB10(_DWORD *this) { _DWORD *v1; // ebx v1 = this; sub_6B6F30(this); *v1 = &SoundGroupInterface::`vftable'; sub_6B6DB0(v1 + 16); v1[16] = &SoundGroupDynamic::`vftable'; v1[34] = 0; v1[32] = 0; v1[33] = 0; v1[31] = &SpTList::`vftable'; v1[38] = 0; v1[36] = 0; v1[37] = 0; v1[35] = &NiTList>::`vftable'; v1[39] = &NiTList>::`vftable'; v1[42] = 0; v1[40] = 0; v1[41] = 0; v1[43] = &NiTList>::`vftable'; v1[46] = 0; v1[44] = 0; v1[45] = 0; return v1; } // 9F8334: using guessed type void *NiTList>::`vftable'; // 9F8364: using guessed type void *SpTList::`vftable'; // 9F8374: using guessed type void *SoundGroupDynamic::`vftable'; // 9F83C4: using guessed type void *SoundGroupInterface::`vftable'; //----- (006BBBE0) -------------------------------------------------------- _DWORD *__thiscall sub_6BBBE0(void *this, int a2) { _DWORD *v2; // esi v2 = this; sub_6B9D10((_DWORD *)this + 16); sub_6B6F50(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006BBC50) -------------------------------------------------------- _DWORD *__thiscall sub_6BBC50(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B6DB0(this); v1[18] = 0; v1[16] = 0; v1[17] = 0; v1[15] = &SpTList::`vftable'; v1[22] = 0; v1[20] = 0; v1[21] = 0; v1[19] = &NiTList>::`vftable'; v1[26] = 0; v1[24] = 0; v1[25] = 0; v1[23] = &NiTList>::`vftable'; v1[30] = 0; v1[28] = 0; v1[29] = 0; v1[27] = &NiTList>::`vftable'; *v1 = &SoundGroupFieldEffect::`vftable'; return v1; } // 9F8334: using guessed type void *NiTList>::`vftable'; // 9F8364: using guessed type void *SpTList::`vftable'; // 9F8414: using guessed type void *SoundGroupFieldEffect::`vftable'; //----- (006BBCA0) -------------------------------------------------------- _DWORD *__thiscall sub_6BBCA0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B6DB0(this); v1[18] = 0; v1[16] = 0; v1[17] = 0; v1[15] = &SpTList::`vftable'; v1[22] = 0; v1[20] = 0; v1[21] = 0; v1[19] = &NiTList>::`vftable'; v1[26] = 0; v1[24] = 0; v1[25] = 0; v1[23] = &NiTList>::`vftable'; v1[30] = 0; v1[28] = 0; v1[29] = 0; v1[27] = &NiTList>::`vftable'; *v1 = &SoundGroup3DAmbient::`vftable'; return v1; } // 9F8334: using guessed type void *NiTList>::`vftable'; // 9F8364: using guessed type void *SpTList::`vftable'; // 9F8464: using guessed type void *SoundGroup3DAmbient::`vftable'; //----- (006BBCF0) -------------------------------------------------------- _DWORD *__thiscall sub_6BBCF0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6B6DB0(this); v1[18] = 0; v1[16] = 0; v1[17] = 0; v1[15] = &SpTList::`vftable'; v1[22] = 0; v1[20] = 0; v1[21] = 0; v1[19] = &NiTList>::`vftable'; v1[26] = 0; v1[24] = 0; v1[25] = 0; v1[23] = &NiTList>::`vftable'; v1[30] = 0; v1[28] = 0; v1[29] = 0; v1[27] = &NiTList>::`vftable'; *v1 = &SoundGroupNPCVoice::`vftable'; return v1; } // 9F8334: using guessed type void *NiTList>::`vftable'; // 9F8364: using guessed type void *SpTList::`vftable'; // 9F84B4: using guessed type void *SoundGroupNPCVoice::`vftable'; //----- (006BBD40) -------------------------------------------------------- void *__thiscall sub_6BBD40(void *this, char a2) { void *v2; // esi v2 = this; sub_6B9D10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006BBD70) -------------------------------------------------------- _DWORD *__thiscall sub_6BBD70(_DWORD *this) { _DWORD *v1; // edi v1 = this; sub_6B6F30(this); v1[16] = &IAmbientSoundManager::`vftable'; *v1 = &SoundGroupAmbient::`vftable'; v1[16] = &SoundGroupAmbient::`vftable'; v1[20] = 0; v1[18] = 0; v1[19] = 0; v1[17] = &NiTList::`vftable'; sub_6B6DB0(v1 + 21); v1[39] = 0; v1[37] = 0; v1[38] = 0; v1[36] = &SpTList::`vftable'; v1[43] = 0; v1[41] = 0; v1[42] = 0; v1[40] = &NiTList>::`vftable'; v1[44] = &NiTList>::`vftable'; v1[47] = 0; v1[45] = 0; v1[46] = 0; v1[48] = &NiTList>::`vftable'; v1[51] = 0; v1[49] = 0; v1[50] = 0; v1[21] = &SoundGroup3DAmbient::`vftable'; v1[56] = 0; v1[54] = 0; v1[55] = 0; v1[53] = &NiTList::`vftable'; return v1; } // 9F816C: using guessed type void *SoundGroupAmbient::`vftable'; // 9F817C: using guessed type void *SoundGroupAmbient::`vftable'; // 9F8294: using guessed type void *IAmbientSoundManager::`vftable'; // 9F8314: using guessed type void *NiTList::`vftable'; // 9F8324: using guessed type void *NiTList::`vftable'; // 9F8334: using guessed type void *NiTList>::`vftable'; // 9F8364: using guessed type void *SpTList::`vftable'; // 9F8464: using guessed type void *SoundGroup3DAmbient::`vftable'; //----- (006BBE80) -------------------------------------------------------- float *__thiscall sub_6BBE80(float *this, void *a2, float a3, float a4) { float *v4; // esi unsigned int v5; // kr00_4 void *v6; // eax v4 = this; v5 = strlen((const char *)a2); v6 = operator new[](v5 + 1); *(_DWORD *)v4 = v6; memcpy(v6, a2, v5 + 1); v4[1] = a3; v4[2] = a4; return v4; } //----- (006BBF90) -------------------------------------------------------- bool __thiscall sub_6BBF90(void **this, FILE *a2) { void **v2; // edi bool result; // al void *v4; // eax size_t v5; // ST04_4 size_t v6; // [esp+8h] [ebp-4h] v2 = this; if ( *this ) operator delete[](*this); if ( fread(&v6, 4u, 1u, a2) != 1 || (v4 = operator new[](v6), v5 = v6, *v2 = v4, fread(v4, v5, 1u, a2) != 1) || fread(v2 + 1, 4u, 1u, a2) != 1 ) { result = 0; } else { result = fread(v2 + 2, 4u, 1u, a2) == 1; } return result; } //----- (006BC080) -------------------------------------------------------- signed int sub_6BC080() { signed int result; // eax dword_AB66F8 = dword_AB66A0; result = 50; word_AB66FC = word_AB66A4; dword_AB6700 = 50; dword_AB6704 = 50; dword_AB6708 = 50; dword_AB670C = 50; dword_AB6710 = 50; return result; } // AB66A0: using guessed type int dword_AB66A0; // AB66A4: using guessed type __int16 word_AB66A4; // AB66F8: using guessed type int dword_AB66F8; // AB66FC: using guessed type __int16 word_AB66FC; // AB6700: using guessed type int dword_AB6700; // AB6704: using guessed type int dword_AB6704; // AB6708: using guessed type int dword_AB6708; // AB670C: using guessed type int dword_AB670C; // AB6710: using guessed type int dword_AB6710; //----- (006BC0C0) -------------------------------------------------------- int *sub_6BC0C0() { return &dword_AB66F8; } // AB66F8: using guessed type int dword_AB66F8; //----- (006BC0D0) -------------------------------------------------------- void __cdecl sub_6BC0D0(const void *a1) { qmemcpy(&dword_AB66F8, a1, 0x1Cu); } // AB66F8: using guessed type int dword_AB66F8; //----- (006BC0F0) -------------------------------------------------------- int __cdecl sub_6BC0F0(int a1, int a2) { int result; // eax result = a2; dword_B9200E[a1] = a2; return result; } //----- (006BC110) -------------------------------------------------------- int __cdecl sub_6BC110(int a1) { int result; // eax result = a1; dword_B92022 = a1; return result; } // B92022: using guessed type int dword_B92022; //----- (006BC120) -------------------------------------------------------- char sub_6BC120() { return byte_AB66EC; } // AB66EC: using guessed type char byte_AB66EC; //----- (006BC200) -------------------------------------------------------- char *__thiscall sub_6BC200(char *this) { char *v1; // esi const char *v2; // eax char *result; // eax v1 = this; v2 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); result = strncpy(v1, v2, 0x40u); *(_DWORD *)(v1 + 93) |= 0xFFFFFFFE; *(float *)(v1 + 65) = 0.126; *(float *)(v1 + 69) = 0.125; v1[64] = 1; *(_DWORD *)(v1 + 73) = 1310920; *(float *)(v1 + 77) = 0.126; *(_DWORD *)(v1 + 85) = 1310920; *(_DWORD *)(v1 + 105) = 1310920; *(float *)(v1 + 81) = 0.15360001; v1[109] = 0; *(float *)(v1 + 89) = 0.89999998; *(float *)(v1 + 97) = 0.126; *(float *)(v1 + 101) = 0.1816; return result; } //----- (006BC280) -------------------------------------------------------- unsigned int __cdecl sub_6BC280(unsigned __int16 *a1) { unsigned int result; // eax signed int v2; // edx result = *a1; if ( result <= 0x1D ) { v2 = 0; if ( (unsigned __int16)result > 0u ) { result = (unsigned int)(a1 + 2); do { switch ( *(unsigned __int16 *)(result - 2) ) { case 0u: BYTE2(dword_B91FFC) = *(_BYTE *)result != 0; break; case 1u: HIBYTE(dword_B91FFC) = *(_BYTE *)result != 0; break; case 2u: case 0x15u: byte_B92000 = *(_BYTE *)result != 0; break; case 3u: byte_B92001 = *(_BYTE *)result != 0; break; case 4u: byte_B92002 = *(_BYTE *)result != 0; break; case 5u: byte_B92003 = *(_BYTE *)result != 0; break; case 6u: byte_B92004 = *(_BYTE *)result != 0; break; case 7u: byte_B92005 = *(_BYTE *)result != 0; break; case 8u: byte_B92006 = *(_BYTE *)result != 0; break; case 9u: byte_B9202B = *(_BYTE *)result != 0; break; case 0xAu: byte_B9202C = *(_BYTE *)result != 0; break; case 0xBu: byte_B9202D = *(_BYTE *)result != 0; break; case 0xCu: byte_B92008 = *(_BYTE *)result != 0; break; case 0xDu: byte_B92009 = *(_BYTE *)result != 0; break; case 0xEu: byte_B9200A = *(_BYTE *)result != 0; break; case 0xFu: byte_B9200B = *(_BYTE *)result != 0; break; case 0x10u: byte_B9200C = *(_BYTE *)result != 0; break; case 0x11u: byte_B9200D = *(_BYTE *)result != 0; break; case 0x12u: byte_B9202A = *(_BYTE *)result != 0; break; case 0x13u: byte_B92026 = *(_BYTE *)result != 0; break; case 0x14u: byte_B92027 = *(_BYTE *)result != 0; break; case 0x16u: byte_B92028 = *(_BYTE *)result != 0; break; case 0x17u: byte_B92029 = *(_BYTE *)result != 0; break; case 0x1Bu: byte_B9202E = *(_BYTE *)result != 0; break; case 0x1Cu: byte_AB66F6 = *(_BYTE *)result != 0; break; default: break; } ++v2; result += 3; } while ( v2 < *a1 ); } } return result; } // AB66F6: using guessed type char byte_AB66F6; // B91FFC: using guessed type int dword_B91FFC; // B92000: using guessed type char byte_B92000; // B92001: using guessed type char byte_B92001; // B92002: using guessed type char byte_B92002; // B92003: using guessed type char byte_B92003; // B92004: using guessed type char byte_B92004; // B92005: using guessed type char byte_B92005; // B92006: using guessed type char byte_B92006; // B92008: using guessed type char byte_B92008; // B92009: using guessed type char byte_B92009; // B9200A: using guessed type char byte_B9200A; // B9200B: using guessed type char byte_B9200B; // B9200C: using guessed type char byte_B9200C; // B9200D: using guessed type char byte_B9200D; // B92026: using guessed type char byte_B92026; // B92027: using guessed type char byte_B92027; // B92028: using guessed type char byte_B92028; // B92029: using guessed type char byte_B92029; // B9202A: using guessed type char byte_B9202A; // B9202B: using guessed type char byte_B9202B; // B9202C: using guessed type char byte_B9202C; // B9202D: using guessed type char byte_B9202D; // B9202E: using guessed type char byte_B9202E; //----- (006BC4D0) -------------------------------------------------------- int sub_6BC4D0() { int result; // eax word_B916D0 = 16; word_B916D8 = 17; result = 0; word_B91650[0] = 0; word_B91652[0] = 30976; dword_B91658 = 452984833; dword_B91660 = 1124073474; dword_B91690 = 1442840584; dword_B91668 = 1224736771; dword_B91670 = 1258291204; dword_B91678 = 1275068421; dword_B91688 = 1207959559; dword_B916C8 = 1476395023; dword_B916C0 = -570425330; dword_B91798 = 1291845673; dword_B917A0 = 1426063402; dword_B91790 = 1342177320; dword_B916F8 = 1375731733; dword_B91680 = 1174405126; word_B916D2 = 18176; dword_B916F0 = 20; word_B916DA = 0; dword_B916E8 = 19; word_B916E0 = 18; word_B916E2 = 0; dword_B91698 = 218103817; dword_B916A0 = 1309736970; dword_B916A8 = 1192296459; dword_B91700 = 1091633174; dword_B916B0 = 1343291404; dword_B916B8 = 1460731917; dword_B917B8 = 45; dword_B91708 = 1459617815; dword_B91710 = 1392508952; dword_B91718 = 25; dword_B91720 = 1090519066; dword_B91728 = 1140850715; dword_B91738 = 536870941; dword_B91730 = 1509949468; dword_B91740 = 637534238; dword_B91748 = 671088671; dword_B91750 = 620757024; dword_B91758 = 654311457; dword_B91770 = 1358954532; dword_B91778 = 1157627941; dword_B91760 = 603979810; dword_B91768 = 1409286179; dword_B91780 = -184549338; dword_B91788 = 1107296295; dword_B917A8 = 1510998059; dword_B917B0 = 44; dword_B917C0 = 587202606; dword_B917C8 = 822083631; dword_B917D0 = 838860848; dword_B917D8 = 855638065; dword_B917E0 = 872415282; dword_B917E8 = 889192499; dword_B917F0 = 905969716; dword_B917F8 = 922746933; dword_B91800 = 939524150; dword_B91808 = 956301367; dword_B91810 = 805306424; dword_B91818 = -1124073415; dword_B91820 = -1157627846; dword_B91828 = 823132219; dword_B91830 = 839909436; dword_B91838 = 856686653; dword_B91840 = 873463870; dword_B91848 = 890241087; dword_B91850 = 907018304; dword_B91858 = 923795521; dword_B91860 = 940572738; dword_B91868 = 957349955; dword_B91870 = 806355012; dword_B91878 = -1123024827; dword_B91880 = -1156579258; dword_B91888 = 823263303; dword_B91890 = 840040520; dword_B91898 = 856817737; dword_B918A0 = 873594954; dword_B918A8 = 890372171; dword_B918B0 = 907149388; dword_B918B8 = 923926605; dword_B918C0 = 940703822; dword_B918C8 = 957481039; dword_B918D0 = 806486096; dword_B918D8 = -1122893743; dword_B918E0 = -1156448174; dword_B918E8 = 83; dword_B918F0 = 84; dword_B918F8 = 85; dword_B91900 = 86; dword_B91908 = 87; dword_B91910 = 88; dword_B91918 = 89; dword_B91920 = 90; dword_B91928 = 91; dword_B91930 = 92; dword_B91938 = 93; dword_B91940 = 94; return result; } // B9164C: using guessed type int dword_B9164C; // B91650: using guessed type __int16 word_B91650[]; // B91652: using guessed type __int16 word_B91652[]; // B91658: using guessed type int dword_B91658; // B91660: using guessed type int dword_B91660; // B91668: using guessed type int dword_B91668; // B91670: using guessed type int dword_B91670; // B91678: using guessed type int dword_B91678; // B91680: using guessed type int dword_B91680; // B91688: using guessed type int dword_B91688; // B91690: using guessed type int dword_B91690; // B91698: using guessed type int dword_B91698; // B916A0: using guessed type int dword_B916A0; // B916A8: using guessed type int dword_B916A8; // B916B0: using guessed type int dword_B916B0; // B916B8: using guessed type int dword_B916B8; // B916C0: using guessed type int dword_B916C0; // B916C8: using guessed type int dword_B916C8; // B916D0: using guessed type __int16 word_B916D0; // B916D2: using guessed type __int16 word_B916D2; // B916D8: using guessed type __int16 word_B916D8; // B916DA: using guessed type __int16 word_B916DA; // B916E0: using guessed type __int16 word_B916E0; // B916E2: using guessed type __int16 word_B916E2; // B916E8: using guessed type int dword_B916E8; // B916F0: using guessed type int dword_B916F0; // B916F8: using guessed type int dword_B916F8; // B91700: using guessed type int dword_B91700; // B91708: using guessed type int dword_B91708; // B91710: using guessed type int dword_B91710; // B91718: using guessed type int dword_B91718; // B91720: using guessed type int dword_B91720; // B91728: using guessed type int dword_B91728; // B91730: using guessed type int dword_B91730; // B91738: using guessed type int dword_B91738; // B91740: using guessed type int dword_B91740; // B91748: using guessed type int dword_B91748; // B91750: using guessed type int dword_B91750; // B91758: using guessed type int dword_B91758; // B91760: using guessed type int dword_B91760; // B91768: using guessed type int dword_B91768; // B91770: using guessed type int dword_B91770; // B91778: using guessed type int dword_B91778; // B91780: using guessed type int dword_B91780; // B91788: using guessed type int dword_B91788; // B91790: using guessed type int dword_B91790; // B91798: using guessed type int dword_B91798; // B917A0: using guessed type int dword_B917A0; // B917A8: using guessed type int dword_B917A8; // B917B0: using guessed type int dword_B917B0; // B917B8: using guessed type int dword_B917B8; // B917C0: using guessed type int dword_B917C0; // B917C8: using guessed type int dword_B917C8; // B917D0: using guessed type int dword_B917D0; // B917D8: using guessed type int dword_B917D8; // B917E0: using guessed type int dword_B917E0; // B917E8: using guessed type int dword_B917E8; // B917F0: using guessed type int dword_B917F0; // B917F8: using guessed type int dword_B917F8; // B91800: using guessed type int dword_B91800; // B91808: using guessed type int dword_B91808; // B91810: using guessed type int dword_B91810; // B91818: using guessed type int dword_B91818; // B91820: using guessed type int dword_B91820; // B91828: using guessed type int dword_B91828; // B91830: using guessed type int dword_B91830; // B91838: using guessed type int dword_B91838; // B91840: using guessed type int dword_B91840; // B91848: using guessed type int dword_B91848; // B91850: using guessed type int dword_B91850; // B91858: using guessed type int dword_B91858; // B91860: using guessed type int dword_B91860; // B91868: using guessed type int dword_B91868; // B91870: using guessed type int dword_B91870; // B91878: using guessed type int dword_B91878; // B91880: using guessed type int dword_B91880; // B91888: using guessed type int dword_B91888; // B91890: using guessed type int dword_B91890; // B91898: using guessed type int dword_B91898; // B918A0: using guessed type int dword_B918A0; // B918A8: using guessed type int dword_B918A8; // B918B0: using guessed type int dword_B918B0; // B918B8: using guessed type int dword_B918B8; // B918C0: using guessed type int dword_B918C0; // B918C8: using guessed type int dword_B918C8; // B918D0: using guessed type int dword_B918D0; // B918D8: using guessed type int dword_B918D8; // B918E0: using guessed type int dword_B918E0; // B918E8: using guessed type int dword_B918E8; // B918F0: using guessed type int dword_B918F0; // B918F8: using guessed type int dword_B918F8; // B91900: using guessed type int dword_B91900; // B91908: using guessed type int dword_B91908; // B91910: using guessed type int dword_B91910; // B91918: using guessed type int dword_B91918; // B91920: using guessed type int dword_B91920; // B91928: using guessed type int dword_B91928; // B91930: using guessed type int dword_B91930; // B91938: using guessed type int dword_B91938; // B91940: using guessed type int dword_B91940; //----- (006BC8C0) -------------------------------------------------------- unsigned __int16 *__cdecl sub_6BC8C0(_WORD *a1) { unsigned __int16 *result; // eax signed int v2; // ecx result = 0; v2 = 0; if ( *a1 > 0u ) { result = a1 + 1; do { HIBYTE(word_B91652[4 * *result]) = *((_BYTE *)result + 3); LOBYTE(word_B91652[4 * *result]) = *((_BYTE *)result + 2); ++v2; result += 2; } while ( v2 < (unsigned __int16)*a1 ); } return result; } // B91652: using guessed type __int16 word_B91652[]; //----- (006BC9D0) -------------------------------------------------------- char __thiscall sub_6BC9D0(char *this) { char result; // al __int16 v2; // [esp+6h] [ebp-2h] *(float *)(this + 6) = 1.0; *(float *)(this + 57) = 1.0; *(_DWORD *)this = 151453714; *(float *)(this + 14) = 5000.0; LOBYTE(v2) = 0; *(float *)(this + 18) = 200.0; *((_WORD *)this + 2) = v2; result = 1; *(float *)(this + 22) = 500.0; *(_DWORD *)(this + 30) = 0; this[34] = 1; *(_DWORD *)(this + 35) = 0; *(float *)(this + 26) = 1.0; *(_DWORD *)(this + 39) = 1024; *(_DWORD *)(this + 43) = 768; this[47] = 1; *((_DWORD *)this + 12) = 0; *((_DWORD *)this + 13) = 16842752; this[56] = 1; this[61] = 1; return result; } //----- (006BCA50) -------------------------------------------------------- signed int __thiscall sub_6BCA50(char *this) { signed int result; // eax __int16 v2; // [esp+6h] [ebp-2h] result = 0; *(_DWORD *)this = 403376086; LOBYTE(v2) = 0; *((_WORD *)this + 2) = v2; *(_DWORD *)(this + 6) = 16843009; *(_DWORD *)(this + 10) = 16777472; *(_DWORD *)(this + 14) = 1; *(_DWORD *)(this + 18) = 0; this[48] = 1; *(_DWORD *)(this + 51) = 16843009; do { switch ( result ) { case 0: *(_DWORD *)(this + 22) = -261; break; case 1: *(_DWORD *)(this + 26) = 8; break; case 2: *(_DWORD *)(this + 30) = 8208; break; case 3: *(_DWORD *)(this + 34) = 32; break; case 4: *(_DWORD *)(this + 38) = 4096; break; default: break; } ++result; } while ( result < 5 ); *(_DWORD *)(this + 42) = 260; *((_WORD *)this + 23) = 257; return result; } //----- (006BCB00) -------------------------------------------------------- FILE *sub_6BCB00() { FILE *result; // eax FILE *v1; // esi char v2; // [esp+0h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v2, "%s%s", byte_ACA520, "Option.mco"); result = fopen(&v2, "wb"); v1 = result; if ( result ) { fwrite(&dword_AB66B8, 0x3Fu, 1u, result); result = (FILE *)fclose(v1); } return result; } // AB66B8: using guessed type int dword_AB66B8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BCB80) -------------------------------------------------------- FILE *sub_6BCB80() { FILE *result; // eax FILE *v1; // esi FILE *v2; // esi int v3; // [esp+0h] [ebp-10Ch] char v4; // [esp+4h] [ebp-108h] char v5; // [esp+8h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v5, "%s%s", byte_ACA520, "Option.mco"); result = fopen(&v5, "rb"); v1 = result; if ( result ) { v3 = 0; v4 = 0; fread(&v3, 6u, 1u, result); if ( v3 == dword_AB66B8 && v4 == (_BYTE)word_AB66BC ) { fclose(v1); result = fopen(&v5, "rb"); v2 = result; if ( result ) { fread(&dword_AB66B8, 0x3Fu, 1u, result); result = (FILE *)fclose(v2); flt_AB66CA = 200.0; flt_AB66CE = 500.0; } } else { result = (FILE *)fclose(v1); } } return result; } // AB66B8: using guessed type int dword_AB66B8; // AB66BC: using guessed type __int16 word_AB66BC; // AB66CA: using guessed type float flt_AB66CA; // AB66CE: using guessed type float flt_AB66CE; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BCF10) -------------------------------------------------------- void sub_6BCF10() { _DWORD *v0; // esi void **v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST08_4 v0 = (_DWORD *)dword_AB66AC; if ( dword_AB66AC ) { do { v1 = (void **)v0[2]; v0 = (_DWORD *)*v0; if ( v1 ) { operator delete[](*v1); operator delete(v1); } } while ( v0 ); } v2 = (_DWORD *)dword_AB66AC; if ( dword_AB66AC ) { do { v3 = v2; v2 = (_DWORD *)*v2; ((void (__thiscall *)(void ***, _DWORD *))off_AB66A8[2])(&off_AB66A8, v3); } while ( v2 ); } dword_AB66B4 = 0; dword_AB66AC = 0; dword_AB66B0 = 0; } // AB66A8: using guessed type void **off_AB66A8; // AB66AC: using guessed type int dword_AB66AC; // AB66B0: using guessed type int dword_AB66B0; // AB66B4: using guessed type int dword_AB66B4; //----- (006BCFD0) -------------------------------------------------------- int __cdecl sub_6BCFD0(int a1, float a2, float a3, float a4) { signed int v4; // edi int v5; // esi float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST10_4 int result; // eax signed int v10; // [esp+8h] [ebp-4h] float v11; // [esp+8h] [ebp-4h] v4 = 0; v10 = 0; v5 = a1 + 1024; do { v7 = (double)v10 / 255.0; v6 = 1.0 / a2; v8 = pow(v7, v6); v11 = v8 * a3 + a4; if ( v11 >= 0.0 ) { if ( v11 > 1.0 ) v11 = 1.0; } else { v11 = 0.0; } ++v4; v5 += 2; result = (unsigned __int16)(signed int)(v11 * 65535.0); *(_WORD *)(v5 - 1026) = result; *(_WORD *)(v5 - 514) = result; *(_WORD *)(v5 - 2) = result; v10 = v4; } while ( v4 < 256 ); return result; } //----- (006BD110) -------------------------------------------------------- FILE *sub_6BD110() { FILE *result; // eax FILE *v1; // esi char v2; // [esp+0h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v2, "%s%s", byte_ACA520, "OptionSound.mco"); result = fopen(&v2, "wb"); v1 = result; if ( result ) { fwrite(&dword_AB66F8, 0x1Cu, 1u, result); result = (FILE *)fclose(v1); } return result; } // AB66F8: using guessed type int dword_AB66F8; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BD190) -------------------------------------------------------- FILE *sub_6BD190() { FILE *result; // eax FILE *v1; // esi FILE *v2; // esi int v3; // [esp+0h] [ebp-10Ch] char v4; // [esp+4h] [ebp-108h] char v5; // [esp+8h] [ebp-104h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v5, "%s%s", byte_ACA520, "OptionSound.mco"); result = fopen(&v5, "rb"); v1 = result; if ( result ) { v3 = 0; v4 = 0; fread(&v3, 6u, 1u, result); if ( v3 == dword_AB66A0 && v4 == (_BYTE)word_AB66A4 ) { fclose(v1); result = fopen(&v5, "rb"); v2 = result; if ( result ) { fread(&dword_AB66F8, 0x1Cu, 1u, result); result = (FILE *)fclose(v2); } } else { fclose(v1); word_AB66FC = word_AB66A4; result = (FILE *)50; dword_AB66F8 = dword_AB66A0; dword_AB6700 = 50; dword_AB6704 = 50; dword_AB6708 = 50; dword_AB670C = 50; dword_AB6710 = 50; } } return result; } // AB66A0: using guessed type int dword_AB66A0; // AB66A4: using guessed type __int16 word_AB66A4; // AB66F8: using guessed type int dword_AB66F8; // AB66FC: using guessed type __int16 word_AB66FC; // AB6700: using guessed type int dword_AB6700; // AB6704: using guessed type int dword_AB6704; // AB6708: using guessed type int dword_AB6708; // AB670C: using guessed type int dword_AB670C; // AB6710: using guessed type int dword_AB6710; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BD2E0) -------------------------------------------------------- _BYTE *__thiscall sub_6BD2E0(_BYTE *this) { _BYTE *result; // eax result = this; *(_WORD *)this = 0; this[4] = 0; *((_WORD *)this + 1) = 0; *(_DWORD *)this = dword_AB66A0; *((_WORD *)this + 2) = word_AB66A4; *((_DWORD *)this + 2) = 50; *((_DWORD *)this + 3) = 50; *((_DWORD *)this + 4) = 50; *((_DWORD *)this + 5) = 50; *((_DWORD *)this + 6) = 50; return result; } // AB66A0: using guessed type int dword_AB66A0; // AB66A4: using guessed type __int16 word_AB66A4; //----- (006BD320) -------------------------------------------------------- int __cdecl sub_6BD320(int a1) { int *v1; // eax int result; // eax int v3; // edi _DWORD *v4; // eax int v5; // eax int v6; // esi int v7; // eax byte_AB66EC = a1; v1 = (int *)sub_8E50C0(); result = sub_8E5030(v1, "GlowScreenEffect"); v3 = result; if ( result ) { v4 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)result + 4))(result); v5 = sub_8E61B0(v4, "Enable"); v6 = v5; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5); result = type_info::operator==(v7); if ( (_BYTE)result ) result = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v6 + 12))(v6, v3, a1); } return result; } // 7D451A: using guessed type _DWORD __stdcall type_info::operator==(_DWORD); // AB65D0: using guessed type bool *off_AB65D0; // AB66EC: using guessed type char byte_AB66EC; //----- (006BD400) -------------------------------------------------------- FILE *sub_6BD400() { const char *v0; // eax FILE *result; // eax FILE *v2; // esi if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_ACA520, "FPLIST.ons"); result = fopen(v0, "wb"); v2 = result; if ( result ) { fwrite(byte_B92048, 0x6Eu, 1u, result); result = (FILE *)fclose(v2); } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BD450) -------------------------------------------------------- int __thiscall sub_6BD450(int this) { int v1; // ecx *(_WORD *)this = 0; *(float *)(this + 10) = 5000.0; *(_WORD *)(this + 2) = 0; *(_BYTE *)(this + 4) = 0; sub_6BC9D0((char *)this); return v1; } //----- (006BD480) -------------------------------------------------------- int __thiscall sub_6BD480(int this) { int v1; // ecx *(_WORD *)this = 0; *(_WORD *)(this + 2) = 0; *(_BYTE *)(this + 4) = 0; sub_6BCA50((char *)this); return v1; } //----- (006BD4A0) -------------------------------------------------------- char sub_6BD4A0() { sub_6BCB80(); sub_6BD190(); return 1; } //----- (006BD4B0) -------------------------------------------------------- char sub_6BD4B0() { sub_6BCB00(); sub_6BD110(); return 1; } //----- (006BD4D0) -------------------------------------------------------- char __cdecl sub_6BD4D0(int a1) { int v1; // esi _BYTE *v2; // ebx char result; // al unsigned int v4; // edi signed int v5; // eax double v6; // st6 unsigned int v7; // edi const char **v8; // eax float *v9; // eax float *v10; // esi _DWORD *v11; // eax float v12; // [esp+1Ch] [ebp-10h] float v13; // [esp+34h] [ebp+8h] v1 = a1; v2 = (_BYTE *)(*(int (__thiscall **)(int))(*(_DWORD *)a1 + 136))(a1); if ( !*v2 ) return 0; v4 = xRight; v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 164))(a1); v6 = (double)v4; v7 = dword_AC2F78; v13 = (double)v5 / v6; v12 = (double)(*(int (__thiscall **)(int))(*(_DWORD *)v1 + 168))(v1) / (double)v7; v8 = sub_6BDE80(v1); if ( v8 ) { *((float *)v8 + 1) = v13; *((float *)v8 + 2) = v12; result = 1; } else { v9 = (float *)operator new(0xCu); if ( v9 ) v10 = sub_6BBE80(v9, v2, v13, v12); else v10 = 0; v11 = (_DWORD *)((int (__thiscall *)(void ***))off_AB66A8[1])(&off_AB66A8); v11[2] = v10; *v11 = 0; v11[1] = dword_AB66B0; if ( dword_AB66B0 ) { *(_DWORD *)dword_AB66B0 = v11; ++dword_AB66B4; } else { ++dword_AB66B4; dword_AB66AC = (int)v11; } dword_AB66B0 = (int)v11; result = 1; } return result; } // AB66A8: using guessed type void **off_AB66A8; // AB66AC: using guessed type int dword_AB66AC; // AB66B0: using guessed type int dword_AB66B0; // AB66B4: using guessed type int dword_AB66B4; //----- (006BD660) -------------------------------------------------------- char __cdecl sub_6BD660(int a1) { const char **v1; // esi v1 = sub_6BDE80(a1); if ( !v1 ) return 0; (*(void (__thiscall **)(int, signed int, signed int))(*(_DWORD *)a1 + 308))( a1, (signed int)(*((float *)v1 + 1) * (double)(unsigned int)xRight), (signed int)(*((float *)v1 + 2) * (double)(unsigned int)dword_AC2F78)); return 1; } //----- (006BD7A0) -------------------------------------------------------- int __cdecl sub_6BD7A0(float a1) { int v1; // esi int v3; // [esp+10h] [ebp-604h] flt_AB66BE = a1; v1 = *(_DWORD *)(dword_BA46D0 + 132); sub_6BCFD0((int)&v3, a1, 1.0, 0.0); return (*(int (__stdcall **)(int, _DWORD, _DWORD, int *))(*(_DWORD *)v1 + 84))(v1, 0, 0, &v3); } // AB66BE: using guessed type float flt_AB66BE; // BA46D0: using guessed type int dword_BA46D0; //----- (006BD810) -------------------------------------------------------- char __cdecl sub_6BD810(char a1) { byte_AB66DA = a1; if ( dword_AC9CE8 ) *(_BYTE *)(dword_AC9CE8 + 12) = a1; return sub_6647A0(dword_AD8C90, a1); } // AB66DA: using guessed type char byte_AB66DA; // AC9CE8: using guessed type int dword_AC9CE8; //----- (006BD840) -------------------------------------------------------- char sub_6BD840() { FILE *v0; // eax FILE *v1; // esi char result; // al int v3; // edi int v4; // edi int v5; // ebx const char *v6; // eax int v7; // ebx int v8; // [esp-Ch] [ebp-1C0h] int v9; // [esp-8h] [ebp-1BCh] size_t v10; // [esp-4h] [ebp-1B8h] char v11; // [esp+0h] [ebp-1B4h] char v12; // [esp+70h] [ebp-144h] char v13; // [esp+170h] [ebp-44h] char v14; // [esp+171h] [ebp-43h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v12, "%s%s", byte_ACA520, "FPLIST.ons"); v0 = fopen(&v12, "rb"); v1 = v0; if ( v0 ) { fseek(v0, 0, 2); v3 = ftell(v1); fseek(v1, 0, 0); v4 = v3 / 110; if ( v4 > 100 || (fseek(v1, 0, 2), v5 = ftell(v1), fseek(v1, 0, 0), v5 % 110) ) { fclose(v1); sub_6BC200(byte_B92048); result = 0; } else { v13 = 0; memset(&v14, 0, 0x3Fu); v6 = (const char *)(*(int (__stdcall **)(signed int, int, int))(*(_DWORD *)dword_AD8EBC + 84))(64, v8, v9); strncpy(&v13, v6, v10); v7 = 0; if ( v4 <= 0 ) { LABEL_11: sub_6BC200(byte_B92048); } else { while ( 1 ) { memset(&v11, 0, 0x6Eu); fread(&v11, 0x6Eu, 1u, v1); if ( !&v11 ) { fclose(v1); return 0; } if ( !strncmp(&v13, &v11, 0x40u) ) break; if ( ++v7 >= v4 ) goto LABEL_11; } sub_6BDDE0((int)byte_B92048, (int)&v11); } fclose(v1); result = 1; } } else { sub_6BC200(byte_B92048); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BDA20) -------------------------------------------------------- char __usercall sub_6BDA20@(int a1@, int a2@) { FILE *v2; // eax FILE *v3; // esi char result; // al int v5; // ST28_4 int v6; // edi int v7; // edi const char *v8; // eax int v9; // ebx int v10; // ebx size_t v11; // [esp-4h] [ebp-1B8h] char v12; // [esp+0h] [ebp-1B4h] int v13; // [esp+5Dh] [ebp-157h] char v14; // [esp+70h] [ebp-144h] char v15; // [esp+170h] [ebp-44h] char v16; // [esp+171h] [ebp-43h] if ( !byte_ACAD5C ) sub_420410(); sprintf(&v14, "%s%s", byte_ACA520, "FPLIST.ons"); v2 = fopen(&v14, "rb+"); v3 = v2; if ( !v2 ) { sub_6BD400(); return 0; } v5 = a2; fseek(v2, 0, 2); v6 = ftell(v3); fseek(v3, 0, 0); v7 = v6 / 110; v15 = 0; memset(&v16, 0, 0x3Fu); v8 = (const char *)(*(int (__stdcall **)(signed int, int, int))(*(_DWORD *)dword_AD8EBC + 84))(64, v5, a1); strncpy(&v15, v8, v11); if ( v7 > 100 || (fseek(v3, 0, 2), v9 = ftell(v3), fseek(v3, 0, 0), v9 % 110) ) { fclose(v3); sub_6BD400(); result = 0; } else { v10 = 0; v13 = 0; sub_6BC200(&v12); if ( v7 <= 0 ) { LABEL_10: if ( v7 == 100 ) { fclose(v3); sub_6BD400(); fclose(v3); return 1; } memset(&v12, 0, 0x6Eu); sub_6BDDE0((int)&v12, (int)byte_B92048); fseek(v3, 0, 2); if ( &v12 ) fwrite(&v12, 0x6Eu, 1u, v3); } else { while ( 1 ) { fread(&v12, 0x6Eu, 1u, v3); if ( !strncmp(&v12, &v15, 0x40u) ) break; if ( ++v10 >= v7 ) goto LABEL_10; } fseek(v3, -110, 1); if ( byte_B92048 ) fwrite(byte_B92048, 0x6Eu, 1u, v3); } fclose(v3); result = 1; } return result; } // 6BDA20: could not find valid save-restore pair for ebx // 6BDA20: could not find valid save-restore pair for edi // ACAD5C: using guessed type char byte_ACAD5C; //----- (006BDDB0) -------------------------------------------------------- void *__thiscall sub_6BDDB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,MachineOpt::WinPos *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F863C: using guessed type void *NiTListBase,MachineOpt::WinPos *>::`vftable'; //----- (006BDDE0) -------------------------------------------------------- int __thiscall sub_6BDDE0(int this, int a2) { int result; // eax _BYTE *v3; // esi signed int v4; // edx result = this; v3 = (_BYTE *)this; v4 = 64; do { *v3 = v3[a2 - this]; ++v3; --v4; } while ( v4 ); *(_BYTE *)(this + 64) = *(_BYTE *)(a2 + 64); *(float *)(this + 65) = *(float *)(a2 + 65); *(float *)(this + 69) = *(float *)(a2 + 69); *(_WORD *)(this + 73) = *(_WORD *)(a2 + 73); *(_WORD *)(this + 75) = *(_WORD *)(a2 + 75); *(float *)(this + 77) = *(float *)(a2 + 77); *(float *)(this + 81) = *(float *)(a2 + 81); *(_WORD *)(this + 85) = *(_WORD *)(a2 + 85); *(_WORD *)(this + 87) = *(_WORD *)(a2 + 87); *(float *)(this + 89) = *(float *)(a2 + 89); *(_DWORD *)(this + 93) = *(_DWORD *)(a2 + 93); *(float *)(this + 97) = *(float *)(a2 + 97); *(float *)(this + 101) = *(float *)(a2 + 101); *(_WORD *)(this + 105) = *(_WORD *)(a2 + 105); *(_WORD *)(this + 107) = *(_WORD *)(a2 + 107); *(_BYTE *)(this + 109) = *(_BYTE *)(a2 + 109); return result; } //----- (006BDE80) -------------------------------------------------------- const char **__cdecl sub_6BDE80(int a1) { const char *v1; // edi const char **result; // eax _DWORD *v3; // esi v1 = (const char *)(*(int (**)(void))(*(_DWORD *)a1 + 136))(); if ( !*v1 ) return 0; v3 = (_DWORD *)dword_AB66AC; if ( !dword_AB66AC ) return 0; while ( 1 ) { result = (const char **)v3[2]; v3 = (_DWORD *)*v3; if ( !strcmp(v1, *result) ) break; if ( !v3 ) return 0; } return result; } // AB66AC: using guessed type int dword_AB66AC; //----- (006BDF00) -------------------------------------------------------- _DWORD *__thiscall sub_6BDF00(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,MachineOpt::WinPos *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MachineOpt::WinPos *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F863C: using guessed type void *NiTListBase,MachineOpt::WinPos *>::`vftable'; // 9F864C: using guessed type void *NiTPointerListBase,MachineOpt::WinPos *>::`vftable'; //----- (006BDF90) -------------------------------------------------------- int __thiscall sub_6BDF90(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,MachineOpt::WinPos *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,MachineOpt::WinPos *>::`vftable'; return result; } // 9F863C: using guessed type void *NiTListBase,MachineOpt::WinPos *>::`vftable'; // 9F864C: using guessed type void *NiTPointerListBase,MachineOpt::WinPos *>::`vftable'; //----- (006BE010) -------------------------------------------------------- _DWORD *__thiscall sub_6BE010(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,MachineOpt::WinPos *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F863C: using guessed type void *NiTListBase,MachineOpt::WinPos *>::`vftable'; // 9F866C: using guessed type void *PgTList::`vftable'; //----- (006BE130) -------------------------------------------------------- void *__thiscall sub_6BE130(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Option::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F867C: using guessed type void *Option::`vftable'; //----- (006BE300) -------------------------------------------------------- int sub_6BE300() { return dword_B9DC38; } // B9DC38: using guessed type int dword_B9DC38; //----- (006BE310) -------------------------------------------------------- __int16 *__cdecl sub_6BE310(unsigned int a1) { __int16 *result; // eax if ( a1 < dword_B9DC38 ) result = &word_B995E8[3 * a1]; else result = 0; return result; } // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE330) -------------------------------------------------------- char __cdecl sub_6BE330(__int16 a1) { unsigned int v1; // eax __int16 *v2; // ecx v1 = 0; if ( !dword_B9DC38 ) return 0; v2 = word_B995E8; while ( *v2 != a1 ) { ++v1; v2 += 3; if ( v1 >= dword_B9DC38 ) return 0; } return 1; } // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE370) -------------------------------------------------------- char __cdecl sub_6BE370(__int16 a1) { int v1; // eax v1 = 0; if ( !dword_B9DC50 ) return 0; while ( word_B97E78[v1] != a1 ) { if ( ++v1 >= (unsigned int)dword_B9DC50 ) return 0; } return 1; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BE3A0) -------------------------------------------------------- char __cdecl sub_6BE3A0(__int16 a1) { int v1; // edi char v3; // dl __int16 *v4; // ecx char *v5; // eax int v6; // esi char v7; // [esp+4h] [ebp-5DC4h] v1 = dword_B9DC54; if ( !dword_B9DC54 ) return 0; memcpy(&v7, word_B920B8, 8 * dword_B9DC54); memset(word_B920B8, 0, 8 * v1); v3 = 0; if ( !v1 ) return 0; v4 = word_B920B8; v5 = &v7; v6 = v1; do { if ( *(_WORD *)v5 == a1 ) { v3 = 1; } else { *(_DWORD *)v4 = *(_DWORD *)v5; *((_DWORD *)v4 + 1) = *((_DWORD *)v5 + 1); v4 += 4; } v5 += 8; --v6; } while ( v6 ); if ( !v3 ) return 0; dword_B9DC54 = v1 - 1; return 1; } // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BE470) -------------------------------------------------------- char __cdecl sub_6BE470(__int16 a1) { int v1; // edi char v3; // dl __int16 *v4; // ecx char *v5; // eax int v6; // esi char v7; // [esp+4h] [ebp-4654h] v1 = dword_B9DC38; if ( !dword_B9DC38 ) return 0; memcpy(&v7, word_B995E8, 6 * dword_B9DC38); memset(word_B995E8, 0, 6 * v1); v3 = 0; if ( !v1 ) return 0; v4 = word_B995E8; v5 = &v7; v6 = v1; do { if ( *(_WORD *)v5 == a1 ) { v3 = 1; } else { *(_DWORD *)v4 = *(_DWORD *)v5; v4[2] = *((_WORD *)v5 + 2); v4 += 3; } v5 += 6; --v6; } while ( v6 ); if ( !v3 ) return 0; dword_B9DC38 = v1 - 1; return 1; } // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE540) -------------------------------------------------------- char __cdecl sub_6BE540(__int16 a1) { unsigned int v1; // edi char v3; // bl unsigned int v4; // ecx __int16 *v5; // edx __int16 v6; // ax __int16 v7[3000]; // [esp+4h] [ebp-1774h] v1 = dword_B9DC50; if ( !dword_B9DC50 ) return 0; memcpy(v7, word_B97E78, 2 * dword_B9DC50); memset(word_B97E78, 0, 2 * v1); v3 = 0; v4 = 0; if ( !v1 ) return 0; v5 = word_B97E78; do { v6 = v7[v4]; if ( v6 == a1 ) { v3 = 1; } else { *v5 = v6; ++v5; } ++v4; } while ( v4 < v1 ); if ( !v3 ) return 0; dword_B9DC50 = v1 - 1; return 1; } // B9DC50: using guessed type int dword_B9DC50; // 6BE540: using guessed type __int16 var_1774[3000]; //----- (006BE600) -------------------------------------------------------- int sub_6BE600() { return dword_B9DC3C; } // B9DC3C: using guessed type int dword_B9DC3C; //----- (006BE610) -------------------------------------------------------- int __cdecl sub_6BE610(int a1) { int result; // eax result = a1; dword_B9DC3C = a1; return result; } // B9DC3C: using guessed type int dword_B9DC3C; //----- (006BE620) -------------------------------------------------------- int __cdecl sub_6BE620(int a1) { int result; // eax result = a1; dword_B9DC40 = a1; return result; } // B9DC40: using guessed type int dword_B9DC40; //----- (006BE630) -------------------------------------------------------- int sub_6BE630() { return dword_B9DC40; } // B9DC40: using guessed type int dword_B9DC40; //----- (006BE660) -------------------------------------------------------- int __cdecl sub_6BE660(int a1) { int result; // eax result = a1; dword_B9DC48 = a1; return result; } // B9DC48: using guessed type int dword_B9DC48; //----- (006BE670) -------------------------------------------------------- int sub_6BE670() { return dword_B9DC48; } // B9DC48: using guessed type int dword_B9DC48; //----- (006BE690) -------------------------------------------------------- __int16 *__cdecl sub_6BE690(__int16 a1) { unsigned int v1; // eax __int16 *v2; // ecx v1 = 0; if ( !dword_B9DC38 ) return 0; v2 = word_B995E8; while ( *v2 != a1 ) { ++v1; v2 += 3; if ( v1 >= dword_B9DC38 ) return 0; } return &word_B995E8[3 * v1]; } // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE6D0) -------------------------------------------------------- void sub_6BE6D0() { int v0; // ecx int *v1; // eax v0 = dword_B9DC38; if ( dword_B9DC38 ) { v1 = &dword_B995EA; do { *v1 = 0; v1 = (int *)((char *)v1 + 6); --v0; } while ( v0 ); } } // B995EA: using guessed type int dword_B995EA; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE6F0) -------------------------------------------------------- char __cdecl sub_6BE6F0(char a1) { char result; // al result = a1; byte_B9DC4C = a1; return result; } // B9DC4C: using guessed type char byte_B9DC4C; //----- (006BE700) -------------------------------------------------------- void sub_6BE700() { dword_B9DC50 = 0; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BE710) -------------------------------------------------------- char __cdecl sub_6BE710(__int16 a1) { int v1; // eax v1 = dword_B9DC50; if ( (unsigned int)dword_B9DC50 > 0xBB8 ) return 0; word_B97E78[dword_B9DC50] = a1; dword_B9DC50 = v1 + 1; return 1; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BE740) -------------------------------------------------------- __int16 __cdecl sub_6BE740(unsigned int a1) { __int16 result; // ax if ( a1 < dword_B9DC50 ) result = word_B97E78[a1]; else result = -1; return result; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BE760) -------------------------------------------------------- int sub_6BE760() { return dword_B9DC50; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BE770) -------------------------------------------------------- __int16 *__cdecl sub_6BE770(unsigned int a1) { __int16 *result; // eax if ( a1 < dword_B9DC54 ) result = &word_B920B8[4 * a1]; else result = 0; return result; } // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BE790) -------------------------------------------------------- __int16 *__cdecl sub_6BE790(__int16 a1) { int v1; // eax v1 = 0; if ( !dword_B9DC54 ) return 0; while ( word_B920B8[4 * v1] != a1 ) { if ( ++v1 >= (unsigned int)dword_B9DC54 ) return 0; } return &word_B920B8[4 * v1]; } // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BE7C0) -------------------------------------------------------- int sub_6BE7C0() { return dword_B9DC54; } // B9DC54: using guessed type int dword_B9DC54; //----- (006BE7D0) -------------------------------------------------------- BOOL __cdecl sub_6BE7D0(__int16 a1) { return (unsigned __int16)(a1 - 29100) <= 0x63u; } //----- (006BE7F0) -------------------------------------------------------- BOOL __cdecl sub_6BE7F0(__int16 a1) { return (unsigned __int16)(a1 - 20000) <= 0x270Eu; } //----- (006BE810) -------------------------------------------------------- BOOL __cdecl sub_6BE810(__int16 a1) { return (unsigned __int16)(a1 - 29000) <= 0x63u; } //----- (006BE830) -------------------------------------------------------- bool __cdecl sub_6BE830(__int16 a1) { return a1 == 29206; } //----- (006BE850) -------------------------------------------------------- size_t *__cdecl sub_6BE850(size_t *a1, unsigned __int16 a2) { size_t v2; // ecx unsigned int v3; // eax __int16 *v4; // ecx size_t *result; // eax size_t v6; // ecx v2 = 0; if ( a2 >= 0x4E20u ) goto LABEL_7; v3 = 0; if ( !dword_B9DC38 ) { LABEL_6: v2 = MEMORY[2]; LABEL_7: result = a1; *a1 = v2; return result; } v4 = word_B995E8; while ( *v4 != a2 ) { ++v3; v4 += 3; if ( v3 >= dword_B9DC38 ) goto LABEL_6; } v6 = *(int *)((char *)&dword_B995EA + 6 * v3); result = a1; *a1 = v6; return result; } // B995E8: using guessed type __int16 word_B995E8[]; // B995EA: using guessed type int dword_B995EA; // B9DC38: using guessed type int dword_B9DC38; //----- (006BE900) -------------------------------------------------------- char __cdecl sub_6BE900(int a1) { int v1; // esi int v2; // ecx int v3; // eax const char *v4; // esi int v6; // eax v1 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { v2 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v2 + 4 * (unsigned __int16)a1) ) { v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)a1); if ( v3 ) { v4 = (const char *)(v3 + 2); if ( !strcmp((const char *)(v3 + 2), "Herbing") || !strcmp(v4, "WoodCutting") ) return 1; } } } } v6 = 0; if ( dword_B9DC54 ) { while ( word_B920B8[4 * v6] != (_WORD)a1 ) { if ( ++v6 >= (unsigned int)dword_B9DC54 ) return 0; } return 1; } return 0; } // ACE8D0: using guessed type int dword_ACE8D0; // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BE9E0) -------------------------------------------------------- char __cdecl sub_6BE9E0(unsigned __int16 a1, _BYTE *a2, int a3) { int v3; // esi int v5; // eax int v6; // esi int v7; // eax v3 = dword_B9DC38; if ( (unsigned int)dword_B9DC38 > 0xBB8 ) return 0; if ( a1 >= 0x4E20u && a1 < 0x7210u || a1 == 29206 || a1 == 29207 || a1 == 29208 ) { v7 = dword_B9DC54; word_B920B8[4 * dword_B9DC54] = a1; dword_B920BC[2 * v7] = a3; dword_B9DC54 = v7 + 1; return 1; } if ( a1 >= 0x7210u ) return 1; v5 = 6 * dword_B9DC38; word_B995E8[3 * dword_B9DC38] = a1; if ( a2 ) { *((_BYTE *)&dword_B995EA + v5) = *a2; *((_BYTE *)&dword_B995EA + v5 + 2) = a2[2]; *((_BYTE *)&dword_B995EA + v5 + 3) = a2[3]; v6 = v3 + 1; *((_BYTE *)&dword_B995EA + v5 + 1) = a2[1]; } else { v6 = v3 + 1; *(int *)((char *)&dword_B995EA + v5) = 0; } dword_B9DC38 = v6; return 1; } // B920B8: using guessed type __int16 word_B920B8[]; // B995E8: using guessed type __int16 word_B995E8[]; // B995EA: using guessed type int dword_B995EA; // B9DC38: using guessed type int dword_B9DC38; // B9DC54: using guessed type int dword_B9DC54; //----- (006BEAC0) -------------------------------------------------------- char __cdecl sub_6BEAC0(int a1) { int v1; // esi __int16 *v2; // eax int v3; // ecx _DWORD *v4; // ecx __int16 v5; // dx int v6; // eax v1 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { v3 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v3 + 4 * (unsigned __int16)a1) ) v2 = *(__int16 **)(v3 + 4 * (unsigned __int16)a1); else v2 = 0; } else { v2 = 0; } } else { v2 = 0; } v4 = (_DWORD *)dword_AB6E94; if ( !dword_AB6E94 ) return 1; v5 = *v2; while ( 1 ) { v6 = v4[2]; v4 = (_DWORD *)*v4; if ( *(_WORD *)(v6 + 10) == v5 && *(float *)(v6 + 16) - 0.300000011920929 > flt_ACCFCC - *(float *)(v6 + 20) ) break; if ( !v4 ) return 1; } return 0; } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (006BEC80) -------------------------------------------------------- double __cdecl sub_6BEC80(int a1) { int v1; // esi __int16 *v2; // ecx int v3; // ecx _DWORD *v4; // eax __int16 v5; // dx int v6; // ecx v1 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { v3 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v3 + 4 * (unsigned __int16)a1) ) v2 = *(__int16 **)(v3 + 4 * (unsigned __int16)a1); else v2 = 0; } else { v2 = 0; } } else { v2 = 0; } v4 = (_DWORD *)dword_AB6E94; if ( !dword_AB6E94 ) return 0.0; v5 = *v2; while ( 1 ) { v6 = v4[2]; v4 = (_DWORD *)*v4; if ( *(_WORD *)(v6 + 10) == v5 ) break; if ( !v4 ) return 0.0; } return (float)(*(float *)(v6 + 16) - (flt_ACCFCC - *(float *)(v6 + 20))); } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (006BED10) -------------------------------------------------------- void sub_6BED10() { _DWORD *v0; // edi int v1; // esi float v2; // ST18_4 __int16 v3; // ax float v4; // ST18_4 v0 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) { do { v1 = v0[2]; v0 = (_DWORD *)*v0; v2 = flt_ACCFCC - *(float *)(v1 + 20); sub_5D3900(*(_WORD *)(v1 + 10), flt_ACCFCC, *(float *)(v1 + 16), v2); v3 = *(_WORD *)(v1 + 8); if ( v3 != -1 ) { v4 = flt_ACCFCC - *(float *)(v1 + 20); sub_5D3850(v3, flt_ACCFCC, *(float *)(v1 + 16), v4); } } while ( v0 ); } } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006BEDA0) -------------------------------------------------------- int sub_6BEDA0() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 int result; // eax v0 = (_DWORD *)dword_AB6E94; dword_B9DC38 = 0; dword_B9DC54 = 0; if ( dword_AB6E94 ) { do { v1 = v0; v0 = (_DWORD *)*v0; result = ((int (__thiscall *)(void ***, _DWORD *))off_AB6E90[2])(&off_AB6E90, v1); } while ( v0 ); } dword_AB6E9C = 0; dword_AB6E94 = 0; dword_AB6E98 = 0; return result; } // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; // AB6E98: using guessed type int dword_AB6E98; // AB6E9C: using guessed type int dword_AB6E9C; // B9DC38: using guessed type int dword_B9DC38; // B9DC54: using guessed type int dword_B9DC54; //----- (006BEDF0) -------------------------------------------------------- signed int __cdecl sub_6BEDF0(_WORD *a1) { unsigned int v1; // edx signed int result; // eax __int16 *v3; // ecx v1 = 0; dword_B9DC50 = 0; result = 0; if ( *a1 > 0u ) { v3 = a1 + 1; do { if ( v1 <= 0xBB8 ) { word_B97E78[v1++] = *v3; dword_B9DC50 = v1; } ++result; ++v3; } while ( result < (unsigned __int16)*a1 ); } return result; } // B9DC50: using guessed type int dword_B9DC50; //----- (006BEE40) -------------------------------------------------------- char sub_6BEE40() { signed int v0; // ebx int v1; // esi int v2; // ecx int v3; // eax const char *v4; // esi int v5; // eax v0 = 29100; while ( 1 ) { v1 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))( dword_ACE8D0, (unsigned __int16)v0) ) { if ( (unsigned __int16)v0 <= *(_WORD *)(v1 + 200) ) { v2 = *(_DWORD *)(v1 + 196); if ( *(_DWORD *)(v2 + 4 * (unsigned __int16)v0) ) { v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)v0); if ( v3 ) { v4 = (const char *)(v3 + 2); if ( !strcmp((const char *)(v3 + 2), "Herbing") || !strcmp(v4, "WoodCutting") ) return 1; } } } } v5 = 0; if ( dword_B9DC54 ) { while ( word_B920B8[4 * v5] != (_WORD)v0 ) { if ( ++v5 >= (unsigned int)dword_B9DC54 ) goto LABEL_11; } return 1; } LABEL_11: if ( ++v0 >= 29200 ) return 0; } } // ACE8D0: using guessed type int dword_ACE8D0; // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BEF30) -------------------------------------------------------- int sub_6BEF30() { signed int v0; // ebx int v1; // esi int v2; // ecx int v3; // eax const char *v4; // esi int v5; // eax int v7; // [esp+Ch] [ebp-4h] v7 = 0; v0 = 29100; do { v1 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))( dword_ACE8D0, (unsigned __int16)v0) || (unsigned __int16)v0 > *(_WORD *)(v1 + 200) || (v2 = *(_DWORD *)(v1 + 196), !*(_DWORD *)(v2 + 4 * (unsigned __int16)v0)) || (v3 = *(_DWORD *)(v2 + 4 * (unsigned __int16)v0)) == 0 || (v4 = (const char *)(v3 + 2), strcmp((const char *)(v3 + 2), "Herbing")) && strcmp(v4, "WoodCutting") ) { v5 = 0; if ( !dword_B9DC54 ) goto LABEL_13; while ( word_B920B8[4 * v5] != (_WORD)v0 ) { if ( ++v5 >= (unsigned int)dword_B9DC54 ) goto LABEL_13; } } ++v7; LABEL_13: ++v0; } while ( v0 <= 29105 ); return v7; } // ACE8D0: using guessed type int dword_ACE8D0; // B920B8: using guessed type __int16 word_B920B8[]; // B9DC54: using guessed type int dword_B9DC54; //----- (006BF020) -------------------------------------------------------- bool __cdecl sub_6BF020(int a1) { int v1; // esi int *v2; // eax int v3; // eax bool result; // al v1 = dword_ACE8D0; result = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v1 + 200) ) { v2 = (int *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1); if ( *v2 ) { v3 = *v2; if ( v3 ) { if ( *(_BYTE *)(v3 + 192) ) result = 1; } } } } return result; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (006BF080) -------------------------------------------------------- char __cdecl sub_6BF080(unsigned __int16 a1) { int v1; // edx _DWORD *v3; // ecx int v4; // eax v1 = sub_5A5F90(a1); if ( !v1 ) return 0; v3 = (_DWORD *)dword_AB6E94; if ( !dword_AB6E94 ) return 1; while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { if ( *(_DWORD *)(v4 + 12) == *(unsigned __int16 *)(v1 + 10) && *(float *)(v4 + 16) - 0.300000011920929 > flt_ACCFCC - *(float *)(v4 + 20) ) { break; } } if ( !v3 ) return 1; } return 0; } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006BF0F0) -------------------------------------------------------- _DWORD *__cdecl sub_6BF0F0(__int16 a1, int a2) { _BYTE *v2; // eax _BYTE *v3; // esi _DWORD *result; // eax v2 = operator new(6u); v3 = v2; *(_WORD *)v2 = a1; v2[2] = a2; v2[4] = BYTE2(a2); v2[5] = HIBYTE(a2); v2[3] = BYTE1(a2); result = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB6EA0[1])(&off_AB6EA0); result[2] = v3; *result = 0; result[1] = dword_AB6EA8; if ( dword_AB6EA8 ) { *(_DWORD *)dword_AB6EA8 = result; ++dword_AB6EAC; } else { ++dword_AB6EAC; dword_AB6EA4 = (int)result; } dword_AB6EA8 = (int)result; return result; } // AB6EA0: using guessed type int (__thiscall **off_AB6EA0)(void *, char); // AB6EA4: using guessed type int dword_AB6EA4; // AB6EA8: using guessed type int dword_AB6EA8; // AB6EAC: using guessed type int dword_AB6EAC; //----- (006BF170) -------------------------------------------------------- unsigned int __cdecl sub_6BF170(float a1, float a2, float a3, float a4) { __int16 v4; // bx unsigned int result; // eax _DWORD *v6; // eax int v7; // ecx _DWORD *v8; // eax _DWORD *v9; // esi int v10; // ecx double v11; // st6 double v12; // st7 double v13; // st7 double v14; // st6 double v15; // st5 float v16; // ST10_4 float v17; // ST0C_4 float v18; // ST08_4 unsigned int v19; // esi int v20; // ebx unsigned __int16 v21; // ax _DWORD *v22; // eax int v23; // esi double v24; // st7 int v25; // eax int v26; // [esp+24h] [ebp-1Ch] unsigned int v27; // [esp+28h] [ebp-18h] float v28; // [esp+2Ch] [ebp-14h] int v29; // [esp+30h] [ebp-10h] int v30; // [esp+3Ch] [ebp-4h] v4 = LOWORD(a1); result = sub_5A5F90(LOWORD(a1)); v29 = result; if ( result ) { v6 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) { while ( 1 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( *(_WORD *)(v7 + 8) == v4 ) break; if ( !v6 ) goto LABEL_5; } v9 = (_DWORD *)v7; } else { LABEL_5: v8 = operator new(0x18u); v9 = v8; if ( v8 ) { *v8 = &NiRefObject::`vftable'; v8[1] = 0; InterlockedIncrement(&Addend); *v9 = &SkillUseRecord::`vftable'; } else { v9 = 0; } LODWORD(a1) = v9; if ( v9 ) InterlockedIncrement(v9 + 1); sub_8B8EC0(&off_AB6E90, (int *)&a1); v30 = -1; if ( v9 && !InterlockedDecrement(v9 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); } v10 = v29; v11 = a4; *((_WORD *)v9 + 4) = v4; v9[3] = *(unsigned __int16 *)(v10 + 10); v12 = v11; if ( v11 <= 0.0 ) { a1 = *(float *)(v10 + 6); v12 = (double)LODWORD(a1) / 1000.0; } a1 = v12; v13 = a1; *((float *)v9 + 4) = a1; v14 = a2; v15 = a3; v28 = a2 - a3; *((float *)v9 + 5) = v28; v16 = v15; v17 = v13; v18 = v14; sub_5D3850(v4, v18, v17, v16); v19 = 0; v27 = 0; result = sub_6C0800(); if ( result ) { do { result = sub_5A5F90(v19); v20 = result; if ( !result ) break; v21 = *(_WORD *)(result + 10); if ( v21 == *(_WORD *)(v29 + 10) && v21 > 0u ) { v22 = operator new(0x18u); v23 = (int)v22; if ( v22 ) { *v22 = &NiRefObject::`vftable'; v22[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)v23 = &SkillUseRecord::`vftable'; } else { v23 = 0; } v24 = a1; *(_WORD *)(v23 + 8) = *(_WORD *)v20; v25 = *(unsigned __int16 *)(v20 + 10); *(float *)(v23 + 16) = v24; *(float *)(v23 + 20) = v28; *(_DWORD *)(v23 + 12) = v25; v26 = v23; InterlockedIncrement((volatile LONG *)(v23 + 4)); v30 = 1; sub_8B8EC0(&off_AB6E90, &v26); v30 = -1; if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); sub_5D3850(*(_WORD *)v20, a2, a1, a3); v19 = v27; } v27 = ++v19; result = sub_6C0800(); } while ( v19 < result ); } } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F877C: using guessed type void *SkillUseRecord::`vftable'; // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; //----- (006BF3D0) -------------------------------------------------------- void __cdecl sub_6BF3D0(__int16 a1) { _DWORD *v1; // ecx _DWORD *v2; // edx int v3; // eax char v4; // dl char v5; // bl _DWORD *v6; // edx int v7; // esi int v8; // esi int v9; // ecx unsigned int v10; // eax __int16 *v11; // edi __int16 *v12; // eax int v13; // [esp+0h] [ebp-8h] char v14; // [esp+4h] [ebp-4h] char v15; // [esp+5h] [ebp-3h] char v16; // [esp+6h] [ebp-2h] char v17; // [esp+7h] [ebp-1h] v1 = (_DWORD *)dword_AB6EA4; v2 = (_DWORD *)dword_AB6EA4; if ( dword_AB6EA4 ) { while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( *(_WORD *)v3 == a1 ) break; if ( !v2 ) return; } v16 = *(_BYTE *)(v3 + 4); v17 = *(_BYTE *)(v3 + 5); v4 = *(_BYTE *)(v3 + 3); v5 = *(_BYTE *)(v3 + 2); v14 = *(_BYTE *)(v3 + 2); v15 = v4; if ( dword_AB6EA4 ) { while ( 1 ) { v6 = v1 + 2; v7 = (int)v1; v1 = (_DWORD *)*v1; if ( v3 == *v6 ) break; if ( !v1 ) goto LABEL_8; } } else { LABEL_8: v7 = 0; } v13 = v7; if ( v7 ) sub_403620(&off_AB6EA0, (_DWORD **)&v13); v8 = dword_B9DC3C; v9 = v5 + v16 + v17 + v15; v10 = 0; if ( dword_B9DC38 ) { v11 = word_B995E8; while ( *v11 != a1 ) { ++v10; v11 += 3; if ( v10 >= dword_B9DC38 ) return; } v12 = &word_B995E8[3 * v10]; if ( v12 ) { *((_BYTE *)v12 + 2) += v14; *((_BYTE *)v12 + 3) += v15; *((_BYTE *)v12 + 4) += v16; *((_BYTE *)v12 + 5) += v17; dword_B9DC3C = v8 - v9; } } } } // AB6EA0: using guessed type int (__thiscall **off_AB6EA0)(void *, char); // AB6EA4: using guessed type int dword_AB6EA4; // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; // B9DC3C: using guessed type int dword_B9DC3C; //----- (006BF4D0) -------------------------------------------------------- void __cdecl sub_6BF4D0(__int16 a1) { int v1; // ecx _DWORD *v2; // eax _DWORD *v3; // ecx _WORD *v4; // esi _DWORD *v5; // ecx int v6; // edx int v7; // [esp+0h] [ebp-4h] v7 = v1; v2 = (_DWORD *)dword_AB6EA4; v3 = (_DWORD *)dword_AB6EA4; if ( dword_AB6EA4 ) { while ( 1 ) { v4 = (_WORD *)v3[2]; v3 = (_DWORD *)*v3; if ( *v4 == a1 ) break; if ( !v3 ) return; } if ( dword_AB6EA4 ) { while ( 1 ) { v5 = v2 + 2; v6 = (int)v2; v2 = (_DWORD *)*v2; if ( v4 == (_WORD *)*v5 ) break; if ( !v2 ) goto LABEL_8; } } else { LABEL_8: v6 = 0; } v7 = v6; if ( v6 ) sub_403620(&off_AB6EA0, (_DWORD **)&v7); operator delete(v4); } } // AB6EA0: using guessed type int (__thiscall **off_AB6EA0)(void *, char); // AB6EA4: using guessed type int dword_AB6EA4; //----- (006BF540) -------------------------------------------------------- bool __cdecl sub_6BF540(__int16 a1) { _WORD *v1; // eax bool result; // al v1 = (_WORD *)sub_549180("MiniRoomSkill"); if ( v1 ) result = *v1 == a1; else result = 0; return result; } //----- (006BF570) -------------------------------------------------------- void __cdecl sub_6BF570(float a1) { int *v1; // eax int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // ebx char v4; // bl void **v5; // esi _DWORD *v6; // ecx unsigned int v7; // edx int v8; // ecx int v9; // [esp+10h] [ebp-18h] int v10; // [esp+14h] [ebp-14h] int *v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v1 = (int *)dword_AB6E94; if ( dword_AB6E94 ) { while ( 1 ) { v2 = v1[2]; v11 = (int *)*v1; if ( v2 && *(float *)(v2 + 16) <= a1 - *(float *)(v2 + 20) ) { v10 = v2; InterlockedIncrement((volatile LONG *)(v2 + 4)); v12 = 0; sub_6BB9F0(&off_AB6E90, &v9, &v10); if ( v9 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } v12 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } if ( !v11 ) break; v1 = v11; } } v4 = 0; v5 = sub_5D2FC0(); v6 = *v5; v7 = 0; if ( ((_BYTE *)v5[1] - (_BYTE *)*v5) >> 2 ) { do { v8 = v6[v7]; if ( *(_BYTE *)(v8 + 377) ) { v4 = 1; *(_BYTE *)(v8 + 377) = 0; } v6 = *v5; ++v7; } while ( v7 < ((_BYTE *)v5[1] - (_BYTE *)*v5) >> 2 ); if ( v4 ) sub_6BED10(); } } // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; //----- (006BF6A0) -------------------------------------------------------- _WORD *__cdecl sub_6BF6A0(int a1, float a2) { float v2; // edi int v3; // esi _WORD *result; // eax _DWORD *v5; // ecx double v6; // st7 int v7; // edx double v8; // st7 float v9; // ST0C_4 float v10; // [esp+20h] [ebp+8h] float v11; // [esp+20h] [ebp+8h] float v12; // [esp+20h] [ebp+8h] v2 = *(float *)&a1; v3 = (unsigned __int16)a1; result = (_WORD *)sub_5A5F90((unsigned __int16)a1); if ( result ) { while ( 1 ) { v5 = (_DWORD *)dword_AB6E94; v6 = a2; if ( dword_AB6E94 ) break; LABEL_6: v10 = (double)*(unsigned int *)(result + 3) / 1000.0 - v6; sub_6BF170(v2, flt_ACCFCC, v10, a2); result = (_WORD *)sub_5A5F90(v3); if ( !result ) return result; } while ( 1 ) { v7 = v5[2]; v5 = (_DWORD *)*v5; if ( v7 ) { if ( *(_WORD *)(v7 + 8) == *result ) break; } if ( !v5 ) goto LABEL_6; } v11 = v6 + flt_ACCFCC - *(float *)(v7 + 20); v8 = v11; *(float *)(v7 + 16) = v11; v12 = flt_ACCFCC - *(float *)(v7 + 20); v9 = v8; result = sub_5D3850(*result, flt_ACCFCC, v9, v12); } return result; } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; //----- (006BF780) -------------------------------------------------------- LONG __cdecl sub_6BF780(__int16 a1) { LONG result; // eax int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // ebx int v4; // [esp+10h] [ebp-18h] int v5; // [esp+14h] [ebp-14h] LONG v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] result = dword_AB6E94; if ( dword_AB6E94 ) { while ( 1 ) { v2 = *(_DWORD *)(result + 8); result = *(_DWORD *)result; v6 = result; if ( v2 ) { result = *(unsigned __int16 *)(v2 + 10); if ( (_WORD)result == a1 ) { v5 = v2; InterlockedIncrement((volatile LONG *)(v2 + 4)); v7 = 0; sub_6BB9F0(&off_AB6E90, &v4, &v5); if ( v4 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v4; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } v7 = -1; result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } } if ( !v6 ) break; result = v6; } } return result; } // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; //----- (006BF860) -------------------------------------------------------- bool sub_6BF860() { bool result; // al if ( sub_6C0E30("ActiveSkill.shn", 1, 0) && (sub_6C1FE0(), sub_6C0BB0("ActiveSkillView.shn", 1, 0)) && sub_6C0F70("PassiveSkill.shn", 1, 0) ) { result = sub_6C0CF0("PassiveSkillView.shn", 1, 0) != 0; } else { result = 0; } return result; } //----- (006BF8C0) -------------------------------------------------------- signed __int16 __cdecl sub_6BF8C0(unsigned __int16 a1, signed int *a2) { int v2; // esi int v3; // edx int v4; // eax int v5; // edx signed int v6; // ebx const char *v7; // eax signed int v8; // esi char *v9; // edx char v10; // cl char *v11; // eax signed __int16 *v12; // eax int v13; // edi int v14; // esi int v15; // eax signed __int16 result; // ax signed __int16 v17; // [esp+Ch] [ebp-2Ch] signed int *v18; // [esp+10h] [ebp-28h] char v19[32]; // [esp+14h] [ebp-24h] v2 = dword_ACE8D0; v3 = *(_DWORD *)dword_ACE8D0; v18 = a2; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(v3 + 16))(dword_ACE8D0, a1) ) { if ( a1 <= *(_WORD *)(v2 + 200) ) { v5 = *(_DWORD *)(v2 + 196); if ( *(_DWORD *)(v5 + 4 * a1) ) v4 = *(_DWORD *)(v5 + 4 * a1); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v6 = 1; if ( !v4 ) { *v18 = 1; return -1; } v7 = (const char *)(v4 + 2); v8 = strlen(v7); if ( v8 > 31 ) return -1; v9 = (char *)(v19 - v7); do { v10 = *v7; v7[(_DWORD)v9] = *v7; ++v7; } while ( v10 ); *((_BYTE *)&v18 + v8 + 2) = 0; v11 = sub_7549E0("%s%02d", v19, 1); v12 = (signed __int16 *)sub_438F10(v11); if ( !v12 ) return -1; v17 = *v12; v13 = (unsigned __int16)*v12; while ( 1 ) { v14 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v13) || (unsigned __int16)v13 > *(_WORD *)(v14 + 200) || (v15 = *(_DWORD *)(v14 + 196) + 4 * (unsigned __int16)v13, !*(_DWORD *)v15) ) { result = v17; *v18 = v6; return result; } if ( strcmp((const char *)(*(_DWORD *)v15 + 2), sub_7549E0("%s%02d", v19, v6)) ) break; ++v13; ++v6; } result = v17; *v18 = v6; return result; } // ACE8D0: using guessed type int dword_ACE8D0; // 6BF8C0: using guessed type char var_24[32]; //----- (006BFA60) -------------------------------------------------------- int __cdecl sub_6BFA60(int a1, unsigned __int16 a2) { int v2; // edi int v3; // edx int v4; // eax const char *v5; // eax signed int v6; // esi char *v7; // edx char v8; // cl char *v9; // eax unsigned __int16 *v10; // eax int v11; // edi int v12; // esi int v13; // eax unsigned int v14; // eax __int16 *v15; // ecx __int16 *v17; // eax int i; // [esp+8h] [ebp-28h] char v19[32]; // [esp+Ch] [ebp-24h] *(_DWORD *)a1 = 0; if ( a2 < 0x4E20u ) { v2 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a2) ) { if ( a2 <= *(_WORD *)(v2 + 200) ) { v3 = *(_DWORD *)(v2 + 196); if ( *(_DWORD *)(v3 + 4 * a2) ) { v4 = *(_DWORD *)(v3 + 4 * a2); if ( v4 ) { v5 = (const char *)(v4 + 2); v6 = strlen(v5); if ( v6 <= 31 ) { v7 = (char *)(v19 - v5); do { v8 = *v5; v5[(_DWORD)v7] = *v5; ++v5; } while ( v8 ); *((_BYTE *)&i + v6 + 2) = 0; v9 = sub_7549E0("%s%02d", v19, 1); v10 = (unsigned __int16 *)sub_438F10(v9); if ( v10 ) { v11 = *v10; for ( i = 1; ; ++i ) { v12 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, v11) ) break; if ( (unsigned __int16)v11 > *(_WORD *)(v12 + 200) ) break; v13 = *(_DWORD *)(v12 + 196) + 4 * (unsigned __int16)v11; if ( !*(_DWORD *)v13 ) break; v14 = strcmp((const char *)(*(_DWORD *)v13 + 2), sub_7549E0("%s%02d", v19, i)); if ( v14 || !dword_B9DC38 ) break; v15 = word_B995E8; while ( *v15 != (_WORD)v11 ) { ++v14; v15 += 3; if ( v14 >= dword_B9DC38 ) return a1; } v17 = &word_B995E8[3 * v14]; if ( !v17 ) break; *(_BYTE *)a1 += *((_BYTE *)v17 + 2); *(_BYTE *)(a1 + 1) += *((_BYTE *)v17 + 3); *(_BYTE *)(a1 + 2) += *((_BYTE *)v17 + 4); *(_BYTE *)(a1 + 3) += *((_BYTE *)v17 + 5); ++v11; } } } } } } } } return a1; } // ACE8D0: using guessed type int dword_ACE8D0; // B995E8: using guessed type __int16 word_B995E8[]; // B9DC38: using guessed type int dword_B9DC38; // 6BFA60: using guessed type char var_24[32]; //----- (006BFC20) -------------------------------------------------------- int __cdecl sub_6BFC20(int a1) { int v1; // esi int *v2; // eax int v3; // ecx char v5; // [esp+8h] [ebp-4h] char v6; // [esp+Bh] [ebp-1h] sub_6BFA60((int)&v5, a1); v1 = dword_ACE8D0; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) return 0; if ( (unsigned __int16)a1 > *(_WORD *)(v1 + 200) ) return 0; v2 = (int *)(*(_DWORD *)(v1 + 196) + 4 * (unsigned __int16)a1); if ( !*v2 ) return 0; v3 = *v2; if ( !*v2 ) return 0; if ( v6 ) return *(_DWORD *)(v3 + 207) - *(_DWORD *)(v3 + 4 * v6 + 503); return *(_DWORD *)(v3 + 207); } // ACE8D0: using guessed type int dword_ACE8D0; //----- (006BFD20) -------------------------------------------------------- int *__cdecl sub_6BFD20(int a1, float a2, float a3, float a4) { int v4; // esi int *result; // eax int v6; // edi _DWORD *v7; // eax int v8; // ecx _DWORD *v9; // eax int v10; // esi int v11; // ebx __int16 v12; // cx double v13; // st7 unsigned int v14; // esi double v15; // st7 float v16; // ST10_4 unsigned int v17; // esi int v18; // ebx _DWORD *v19; // eax _DWORD *v20; // esi double v21; // st7 int v22; // eax double v23; // st7 int v24; // [esp+28h] [ebp-20h] _DWORD *v25; // [esp+2Ch] [ebp-1Ch] int v26; // [esp+30h] [ebp-18h] float v27; // [esp+34h] [ebp-14h] float v28; // [esp+38h] [ebp-10h] int v29; // [esp+44h] [ebp-4h] v4 = dword_ACE8D0; result = (int *)(*(int (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1); if ( (_BYTE)result ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v4 + 200) ) { result = (int *)(*(_DWORD *)(v4 + 196) + 4 * (unsigned __int16)a1); if ( *result ) { v6 = *result; v24 = *result; if ( *result ) { v7 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) { while ( 1 ) { v8 = v7[2]; v7 = (_DWORD *)*v7; if ( *(_WORD *)(v8 + 10) == *(_WORD *)v6 ) break; if ( !v7 ) goto LABEL_8; } v11 = v8; } else { LABEL_8: v9 = operator new(0x18u); v10 = (int)v9; if ( v9 ) { *v9 = &NiRefObject::`vftable'; v9[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)v10 = &SkillUseRecord::`vftable'; } else { v10 = 0; } v11 = v10; v26 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v29 = 0; sub_8B8EC0(&off_AB6E90, &v26); v29 = -1; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); } v12 = a1; *(_WORD *)(v11 + 10) = a1; *(_DWORD *)(v11 + 12) = *(_DWORD *)(v6 + 211); v13 = a4; if ( a4 <= 0.0 ) { v14 = *(_DWORD *)(v6 + 207); sub_6BFA60((int)&v26, a1); if ( HIBYTE(v26) ) v14 -= *(_DWORD *)(v6 + 4 * SHIBYTE(v26) + 503); v25 = (_DWORD *)v14; v13 = (double)v14 / 1000.0; v12 = a1; } v28 = v13; v15 = v28; *(float *)(v11 + 16) = v28; v27 = a2 - a3; *(float *)(v11 + 20) = v27; v16 = v15; sub_5D3900(v12, a2, v16, a3); v17 = 0; v26 = 0; result = (int *)sub_6C0390(); if ( result ) { do { result = (int *)sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v17); v18 = (int)result; if ( !result ) break; if ( *(_WORD *)result != (_WORD)a1 && *(int *)((char *)result + 211) == *(_DWORD *)(v6 + 211) && *(_DWORD *)(v6 + 215) ) { v19 = operator new(0x18u); if ( v19 ) v20 = sub_6C01E0(v19); else v20 = 0; v21 = v28; *((_WORD *)v20 + 5) = *(_WORD *)v18; v22 = *(_DWORD *)(v18 + 211); *((float *)v20 + 4) = v21; v23 = v27; v20[3] = v22; *((float *)v20 + 5) = v23; v25 = v20; InterlockedIncrement(v20 + 1); v29 = 1; sub_8B8EC0(&off_AB6E90, (int *)&v25); v29 = -1; if ( !InterlockedDecrement(v20 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v20)(v20, 1); sub_5D3900(*(_WORD *)v18, a2, v28, a3); v17 = v26; v6 = v24; } v26 = ++v17; result = (int *)sub_6C0390(); } while ( v17 < (unsigned int)result ); } } } } } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F877C: using guessed type void *SkillUseRecord::`vftable'; // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; // ACE8D0: using guessed type int dword_ACE8D0; //----- (006BFFF0) -------------------------------------------------------- void __cdecl sub_6BFFF0(unsigned __int8 *a1) { unsigned __int8 *v1; // edi signed int v2; // ebx int v3; // esi unsigned __int8 v4; // al char v5; // dl char v6; // cl int v7; // eax unsigned __int16 v8; // dx float v9; // ST1C_4 float v10; // [esp+18h] [ebp-4h] v1 = a1; if ( a1[1] & 1 ) sub_6BEDA0(); dword_B9DC58 = *((unsigned __int16 *)v1 + 1); dword_B9DC3C = *v1; dword_B9DC44 = 5; v2 = 0; if ( *((_WORD *)v1 + 4) > 0u ) { v3 = (int)(v1 + 17); do { v4 = *(_BYTE *)(v3 - 1); LOBYTE(a1) = *(_BYTE *)(v3 - 1) & 0xF; v5 = *(_BYTE *)v3 & 0xF; v6 = *(_BYTE *)v3 >> 4; BYTE1(a1) = v4 >> 4; v7 = *(_DWORD *)(v3 + 1); BYTE2(a1) = v5; v8 = *(_WORD *)(v3 - 7); HIBYTE(a1) = v6; sub_6BE9E0(v8, &a1, v7); if ( *(_DWORD *)(v3 - 5) ) { v10 = (double)(unsigned int)sub_6BFC20(*(unsigned __int16 *)(v3 - 7)) - (double)*(unsigned int *)(v3 - 5) * 1000.0; if ( v10 < 0.0 ) v10 = 0.0; v9 = v10 / 1000.0; sub_6BFD20(*(unsigned __int16 *)(v3 - 7), flt_ACCFCC, v9, 0.0); } ++v2; v3 += 12; } while ( v2 < *((unsigned __int16 *)v1 + 4) ); } sub_5D79E0(); } // ACCFCC: using guessed type float flt_ACCFCC; // B9DC3C: using guessed type int dword_B9DC3C; // B9DC44: using guessed type int dword_B9DC44; // B9DC58: using guessed type int dword_B9DC58; //----- (006C0100) -------------------------------------------------------- _DWORD *__cdecl sub_6C0100(int a1, float a2) { int v2; // esi __int16 *v3; // esi int v4; // ecx _DWORD *v5; // eax int v6; // ecx double v7; // st7 float v8; // ST08_4 float v10; // [esp+24h] [ebp+Ch] float v11; // [esp+24h] [ebp+Ch] while ( 1 ) { v2 = dword_ACE8D0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACE8D0 + 16))(dword_ACE8D0, a1) ) { if ( (unsigned __int16)a1 <= *(_WORD *)(v2 + 200) ) { v4 = *(_DWORD *)(v2 + 196); v3 = (__int16 *)(*(_DWORD *)(v4 + 4 * (unsigned __int16)a1) ? *(_DWORD *)(v4 + 4 * (unsigned __int16)a1) : 0); } else { v3 = 0; } } else { v3 = 0; } v5 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) break; LABEL_11: sub_6BFD20(a1, flt_ACCFCC, 0.0, a2); } while ( 1 ) { v6 = v5[2]; v5 = (_DWORD *)*v5; if ( *(_WORD *)(v6 + 10) == *v3 ) break; if ( !v5 ) goto LABEL_11; } v10 = flt_ACCFCC + a2 - *(float *)(v6 + 20); v7 = v10; *(float *)(v6 + 16) = v10; v11 = flt_ACCFCC - *(float *)(v6 + 20); v8 = v7; return sub_5D3900(*v3, flt_ACCFCC, v8, v11); } // AB6E94: using guessed type int dword_AB6E94; // ACCFCC: using guessed type float flt_ACCFCC; // ACE8D0: using guessed type int dword_ACE8D0; //----- (006C01E0) -------------------------------------------------------- _DWORD *__thiscall sub_6C01E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &SkillUseRecord::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F877C: using guessed type void *SkillUseRecord::`vftable'; //----- (006C0230) -------------------------------------------------------- void *__thiscall sub_6C0230(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F875C: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (006C0260) -------------------------------------------------------- void *__thiscall sub_6C0260(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F876C: using guessed type void *NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; //----- (006C0290) -------------------------------------------------------- char __thiscall sub_6C0290(void *this) { void *v1; // esi unsigned int i; // edi int v3; // eax int v4; // eax signed int v5; // eax void *v7; // eax unsigned int j; // edi int v9; // eax int v10; // eax unsigned __int16 v11; // ST1C_2 signed int v12; // [esp+10h] [ebp-4h] v1 = this; v12 = -1; for ( i = 0; ; ++i ) { v3 = *((_DWORD *)v1 + 14); if ( !v3 || i >= *(_DWORD *)(v3 + 40) ) break; v4 = sub_7474E0((_DWORD *)v1 + 1, i); v5 = (*(unsigned __int16 (__thiscall **)(void *, int))(*(_DWORD *)v1 + 12))(v1, v4); if ( (unsigned __int16)v5 > v12 ) v12 = v5; } if ( v12 < 0 ) return 0; if ( *((_DWORD *)v1 + 49) ) operator delete[](*((void **)v1 + 49)); v7 = operator new[](4 * (v12 + 1)); *((_DWORD *)v1 + 49) = v7; memset(v7, 0, 4 * v12 + 4); for ( j = 0; ; ++j ) { v9 = *((_DWORD *)v1 + 14); if ( !v9 || j >= *(_DWORD *)(v9 + 40) ) break; v10 = sub_7474E0((_DWORD *)v1 + 1, j); v11 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v1 + 12))(v1, v10); *(_DWORD *)(*((_DWORD *)v1 + 49) + 4 * v11) = sub_7474E0((_DWORD *)v1 + 1, j); } *((_WORD *)v1 + 100) = v12; return 1; } //----- (006C0390) -------------------------------------------------------- int sub_6C0390() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACE8D0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACE8D0: using guessed type int dword_ACE8D0; //----- (006C03B0) -------------------------------------------------------- bool __stdcall sub_6C03B0(__int16 a1) { return a1 != -1; } //----- (006C03D0) -------------------------------------------------------- void **__thiscall sub_6C03D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87AC: using guessed type void *ITableBase::`vftable'; //----- (006C0450) -------------------------------------------------------- void **__thiscall sub_6C0450(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87D4: using guessed type void *ITableBase::`vftable'; //----- (006C04D0) -------------------------------------------------------- void **__thiscall sub_6C04D0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87D4: using guessed type void *ITableBase::`vftable'; // 9F87E4: using guessed type void *IIDTableBase::`vftable'; //----- (006C0560) -------------------------------------------------------- void **__thiscall sub_6C0560(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87FC: using guessed type void *ITableBase::`vftable'; //----- (006C05E0) -------------------------------------------------------- _DWORD *__thiscall sub_6C05E0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,NiPointer>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F875C: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F878C: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006C0670) -------------------------------------------------------- int __thiscall sub_6C0670(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // 9F875C: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F878C: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (006C06F0) -------------------------------------------------------- void **__thiscall sub_6C06F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &ITableBase::`vftable'; sub_747450((int)this + 4); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8824: using guessed type void *ITableBase::`vftable'; //----- (006C0770) -------------------------------------------------------- void **__thiscall sub_6C0770(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8824: using guessed type void *ITableBase::`vftable'; // 9F8834: using guessed type void *IIDTableBase::`vftable'; //----- (006C0800) -------------------------------------------------------- int sub_6C0800() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD984 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD984: using guessed type int dword_ACD984; //----- (006C0820) -------------------------------------------------------- _DWORD *__thiscall sub_6C0820(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F876C: using guessed type void *NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; // 9F879C: using guessed type void *NiTPointerListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; //----- (006C08B0) -------------------------------------------------------- _DWORD *__thiscall sub_6C08B0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F875C: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F885C: using guessed type void *PgTList>::`vftable'; //----- (006C0940) -------------------------------------------------------- _DWORD *__thiscall sub_6C0940(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_B9DC68 & 1) ) { dword_B9DC68 |= 1u; atexit(sub_9A3900); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ActSkillViewInfoTab::`vftable'; return v1; } // 9F8824: using guessed type void *ITableBase::`vftable'; // 9F886C: using guessed type void *ActSkillViewInfoTab::`vftable'; // B9DC68: using guessed type int dword_B9DC68; //----- (006C0990) -------------------------------------------------------- _DWORD *__thiscall sub_6C0990(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_B9DC5C & 1) ) { dword_B9DC5C |= 1u; atexit(sub_9A3990); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &PasSkillViewInfoTab::`vftable'; return v1; } // 9F87AC: using guessed type void *ITableBase::`vftable'; // 9F8884: using guessed type void *PasSkillViewInfoTab::`vftable'; // B9DC5C: using guessed type int dword_B9DC5C; //----- (006C09E0) -------------------------------------------------------- signed int sub_6C09E0() { return 0xFFFF; } //----- (006C09F0) -------------------------------------------------------- void **__thiscall sub_6C09F0(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87AC: using guessed type void *ITableBase::`vftable'; // 9F87BC: using guessed type void *IIDTableBase::`vftable'; //----- (006C0A80) -------------------------------------------------------- _DWORD *__thiscall sub_6C0A80(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_B9DC60 & 1) ) { dword_B9DC60 |= 1u; atexit(sub_9A3960); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &ActSkillInfoTab::`vftable'; return v1; } // 9F87D4: using guessed type void *ITableBase::`vftable'; // 9F88A0: using guessed type void *ActSkillInfoTab::`vftable'; // B9DC5C: using guessed type int dword_B9DC5C; // B9DC60: using guessed type int dword_B9DC60; //----- (006C0AD0) -------------------------------------------------------- _DWORD *__thiscall sub_6C0AD0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &ITableBase::`vftable'; sub_747420(this + 1); if ( !(dword_B9DC64 & 1) ) { dword_B9DC64 |= 1u; atexit(sub_9A3930); } *((_BYTE *)v1 + 68) = 0; v1[49] = 0; *((_WORD *)v1 + 100) = 0; *v1 = &PasSkillInfoTab::`vftable'; return v1; } // 9F87FC: using guessed type void *ITableBase::`vftable'; // 9F88B8: using guessed type void *PasSkillInfoTab::`vftable'; // B9DC60: using guessed type int dword_B9DC60; // B9DC64: using guessed type int dword_B9DC64; //----- (006C0B20) -------------------------------------------------------- void **__thiscall sub_6C0B20(void *this, char a2) { void **v2; // esi void *v3; // ST00_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 49); *(_DWORD *)this = &IIDTableBase::`vftable'; operator delete[](v3); *v2 = &ITableBase::`vftable'; sub_747450((int)(v2 + 1)); sub_747510(v2 + 1); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F87FC: using guessed type void *ITableBase::`vftable'; // 9F880C: using guessed type void *IIDTableBase::`vftable'; //----- (006C0BB0) -------------------------------------------------------- bool __cdecl sub_6C0BB0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACEA9C; if ( !dword_ACEA9C ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_6C0940(v5); else v4 = 0; v12 = -1; dword_ACEA9C = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACEA9C + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACEA9C + 56); if ( !v6 || *v6 != 27613 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACEA9C + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACEA9C + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEA9C: using guessed type int dword_ACEA9C; //----- (006C0CF0) -------------------------------------------------------- bool __cdecl sub_6C0CF0(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACED88; if ( !dword_ACED88 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_6C0990(v5); else v4 = 0; v12 = -1; dword_ACED88 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACED88 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACED88 + 56); if ( !v6 || *v6 != 2384 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACED88 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACED88 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACED88: using guessed type int dword_ACED88; //----- (006C0E30) -------------------------------------------------------- bool __cdecl sub_6C0E30(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACE8D0; if ( !dword_ACE8D0 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_6C0A80(v5); else v4 = 0; v12 = -1; dword_ACE8D0 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACE8D0 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACE8D0 + 56); if ( !v6 || *v6 != 86355 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACE8D0 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACE8D0 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACE8D0: using guessed type int dword_ACE8D0; //----- (006C0F70) -------------------------------------------------------- bool __cdecl sub_6C0F70(char *Src, int a2, char a3) { const char *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax char *v7; // ecx _BYTE *v8; // edx char v9; // al char Dst; // [esp+Ch] [ebp-90h] int v12; // [esp+98h] [ebp-4h] if ( a3 ) { strcpy_s(&Dst, 0x80u, Src); } else { if ( !byte_ACAD5C ) sub_420410(); v3 = sub_401410(byte_ACA520, Src); strcpy_s(&Dst, 0x80u, v3); } v4 = (_DWORD *)dword_ACEAA8; if ( !dword_ACEAA8 ) { v5 = operator new(0xCCu); v12 = 0; if ( v5 ) v4 = sub_6C0AD0(v5); else v4 = 0; v12 = -1; dword_ACEAA8 = (int)v4; } sub_747450((int)(v4 + 1)); if ( !sub_7475B0((void *)(dword_ACEAA8 + 4), &Dst) ) return 0; v6 = *(_DWORD **)(dword_ACEAA8 + 56); if ( !v6 || *v6 != 8436 ) return 0; v7 = &Dst; v8 = (_BYTE *)(dword_ACEAA8 + 68); do { v9 = *v7; *v8++ = *v7++; } while ( v9 ); return (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_ACEAA8 + 4))() != 0; } // ACAD5C: using guessed type char byte_ACAD5C; // ACEAA8: using guessed type int dword_ACEAA8; //----- (006C10B0) -------------------------------------------------------- int __thiscall sub_6C10B0(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < this[21] ) result = (int)&this[17 * a2 + 22]; else result = 0; return result; } //----- (006C10D0) -------------------------------------------------------- int __thiscall sub_6C10D0(int this) { int result; // eax result = 0; *(_BYTE *)(this + 428) = 0; *(_DWORD *)(this + 84) = 0; return result; } //----- (006C1100) -------------------------------------------------------- unsigned __int8 __thiscall sub_6C1100(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3) { unsigned __int8 result; // al if ( a3 < 4u ) { result = a2; if ( a2 < 4u ) { result = a2; this[12] = a3; this[13] = a2; } } return result; } //----- (006C1130) -------------------------------------------------------- void __thiscall sub_6C1130(_DWORD *this) { *this = &Party::`vftable'; `eh vector destructor iterator'(this + 22, 0x44u, 5, nullsub_6); } // 9F88D4: using guessed type void *Party::`vftable'; //----- (006C1150) -------------------------------------------------------- int __thiscall sub_6C1150(int this, _DWORD *a2) { int result; // eax *(_BYTE *)(this + 56) = 1; *(_DWORD *)(this + 57) = *a2; *(_DWORD *)(this + 61) = a2[1]; *(_DWORD *)(this + 65) = a2[2]; *(_DWORD *)(this + 69) = a2[3]; result = a2[4]; *(_DWORD *)(this + 73) = result; *(float *)(this + 80) = flt_ACCFCC; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006C1190) -------------------------------------------------------- char *__thiscall sub_6C1190(_BYTE *this) { _DWORD *v1; // eax v1 = this + 57; this[56] = 0; v1[4] = 0; v1[3] = 0; v1[2] = 0; v1[1] = 0; *v1 = 0; return strncpy(this + 57, byte_9F88CE, 0x14u); } //----- (006C11C0) -------------------------------------------------------- int __thiscall sub_6C11C0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { unsigned int v6; // esi unsigned int v7; // edx _DWORD *v8; // eax v6 = this[21]; v7 = 0; if ( !v6 ) return 0; v8 = this + 24; while ( *(v8 - 2) != a2 || *(v8 - 1) != a3 || *v8 != a4 || v8[1] != a5 || v8[2] != a6 ) { ++v7; v8 += 17; if ( v7 >= v6 ) return 0; } return (int)&this[17 * v7 + 22]; } //----- (006C1220) -------------------------------------------------------- unsigned int __thiscall sub_6C1220(int this, unsigned __int8 *a2) { int v2; // esi unsigned __int8 *v3; // edi _DWORD *v4; // eax int v5; // ecx int v6; // edx char v7; // al unsigned int result; // eax _DWORD *v9; // [esp+Ch] [ebp-4h] unsigned int v10; // [esp+18h] [ebp+8h] v2 = this; v3 = a2; *(_DWORD *)(this + 84) = 0; *(_BYTE *)(this + 428) = 0; *(_DWORD *)(this + 84) = *a2; v4 = (_DWORD *)sub_680810(byte_AD9238); v9 = v4; *(_BYTE *)(v2 + 428) = 0; if ( *(_DWORD *)(v2 + 84) > 0u ) { *(_DWORD *)(v2 + 4) = *(_DWORD *)(a2 + 1); *(_DWORD *)(v2 + 8) = *(_DWORD *)(a2 + 5); *(_DWORD *)(v2 + 12) = *(_DWORD *)(a2 + 9); *(_DWORD *)(v2 + 16) = *(_DWORD *)(a2 + 13); *(_DWORD *)(v2 + 20) = *(_DWORD *)(a2 + 17); } v10 = 0; if ( *(_DWORD *)(v2 + 84) > 0u ) { v5 = v2 + 96; v6 = (int)(v3 + 9); do { if ( *v4 != *(_DWORD *)(v6 - 8) || v4[1] != *(_DWORD *)(v6 - 4) || v4[2] != *(_DWORD *)v6 || v4[3] != *(_DWORD *)(v6 + 4) || v4[4] != *(_DWORD *)(v6 + 8) ) { *(_DWORD *)(v5 - 8) = *(_DWORD *)(v6 - 8); *(_DWORD *)(v5 - 4) = *(_DWORD *)(v6 - 4); *(_DWORD *)v5 = *(_DWORD *)v6; *(_DWORD *)(v5 + 4) = *(_DWORD *)(v6 + 4); *(_DWORD *)(v5 + 8) = *(_DWORD *)(v6 + 8); *(_BYTE *)(v5 + 12) = *(_BYTE *)(v6 + 12); *(_DWORD *)(v5 + 16) = 0; *(_DWORD *)(v5 + 20) = 0; *(_DWORD *)(v5 + 24) = 0; *(_DWORD *)(v5 + 28) = 0; *(_DWORD *)(v5 + 32) = 0; v7 = *(_BYTE *)(v6 + 13); *(float *)(v5 + 48) = 0.0; *(_BYTE *)(v5 + 44) = v7; *(float *)(v5 + 52) = 0.0; v4 = v9; *(_BYTE *)(v5 + 45) = 0; *(_BYTE *)(v5 + 56) = 0; *(_DWORD *)(v5 + 36) = 0; *(_DWORD *)(v5 + 40) = 0; v5 += 68; } v6 += 22; ++v10; } while ( v10 < *(_DWORD *)(v2 + 84) ); } result = *(_DWORD *)(v2 + 84); if ( result > 0 ) *(_DWORD *)(v2 + 84) = --result; return result; } //----- (006C1330) -------------------------------------------------------- int __thiscall sub_6C1330(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v4; // eax _DWORD *v5; // eax int v6; // ecx _DWORD *v7; // eax v2 = this; if ( this[21] >= 4u ) return 0; v4 = (_DWORD *)sub_680810(byte_AD9238); if ( *v4 == *(_DWORD *)a2 && v4[1] == *(_DWORD *)(a2 + 4) && v4[2] == *(_DWORD *)(a2 + 8) && v4[3] == *(_DWORD *)(a2 + 12) && v4[4] == *(_DWORD *)(a2 + 16) ) { return 0; } if ( !v2[21] ) { *((_BYTE *)v2 + 428) = 1; v5 = (_DWORD *)sub_680810(byte_AD9238); v2[1] = *v5; v2[2] = v5[1]; v2[3] = v5[2]; v2[4] = v5[3]; v2[5] = v5[4]; } v6 = 17 * v2[21]; v2[v6 + 22] = *(_DWORD *)a2; v7 = &v2[v6 + 22]; v7[1] = *(_DWORD *)(a2 + 4); v7[2] = *(_DWORD *)(a2 + 8); v7[3] = *(_DWORD *)(a2 + 12); v7[4] = *(_DWORD *)(a2 + 16); LOBYTE(v2[17 * v2[21] + 27]) = 1; *(float *)&v2[17 * v2[21] + 36] = 0.0; *(float *)&v2[17 * v2[21] + 37] = 0.0; LOBYTE(v2[17 * v2[21]++ + 35]) = *(_BYTE *)(a2 + 20); return (int)&v2[17 * v2[21] + 5]; } //----- (006C1440) -------------------------------------------------------- int __thiscall sub_6C1440(_DWORD *this, int *a2) { int result; // eax result = sub_6C11C0(this, *a2, a2[1], a2[2], a2[3], a2[4]); if ( result ) *(_BYTE *)(result + 20) = 0; return result; } //----- (006C1480) -------------------------------------------------------- int __thiscall sub_6C1480(_DWORD *this, int *a2) { int result; // eax result = sub_6C11C0(this, *a2, a2[1], a2[2], a2[3], a2[4]); if ( result ) *(_BYTE *)(result + 20) = 1; return result; } //----- (006C14C0) -------------------------------------------------------- int __thiscall sub_6C14C0(_BYTE *this, int a2, int a3, int a4, int a5, int a6) { _BYTE *v6; // esi _DWORD *v7; // eax int result; // eax v6 = this; v7 = (_DWORD *)sub_680810(byte_AD9238); v6[428] = a2 == *v7 && a3 == v7[1] && a4 == v7[2] && a5 == v7[3] && a6 == v7[4]; result = a3; *((_DWORD *)v6 + 1) = a2; *((_DWORD *)v6 + 4) = a5; *((_DWORD *)v6 + 2) = a3; *((_DWORD *)v6 + 3) = a4; *((_DWORD *)v6 + 5) = a6; return result; } //----- (006C1530) -------------------------------------------------------- _DWORD *__thiscall sub_6C1530(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = this[1]; a2[1] = this[2]; a2[2] = this[3]; v3 = this[4]; v4 = this[5]; a2[3] = v3; a2[4] = v4; return result; } //----- (006C1560) -------------------------------------------------------- BOOL __thiscall sub_6C1560(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; v2 = (_DWORD *)sub_680810(byte_AD9238); return v1[1] == *v2 && v1[2] == v2[1] && v1[3] == v2[2] && v1[4] == v2[3] && v1[5] == v2[4]; } //----- (006C15B0) -------------------------------------------------------- _DWORD *__thiscall sub_6C15B0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax int v3; // edx int v4; // ecx result = a2; *a2 = this[6]; a2[1] = this[7]; a2[2] = this[8]; v3 = this[9]; v4 = this[10]; a2[3] = v3; a2[4] = v4; return result; } //----- (006C15E0) -------------------------------------------------------- int __thiscall sub_6C15E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { int result; // eax this[6] = a2; this[7] = a3; this[8] = a4; result = a6; this[9] = a5; this[10] = a6; return result; } //----- (006C1610) -------------------------------------------------------- int __thiscall sub_6C1610(_DWORD *this, int *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int result; // eax char v12; // [esp+Ch] [ebp-14h] int v13; // [esp+14h] [ebp-Ch] int v14; // [esp+18h] [ebp-8h] v3 = this; v4 = (_DWORD *)sub_6C11C0(this, *a2, a2[1], a2[2], a2[3], a2[4]); if ( v4 ) { *v4 = *a3; v4[1] = a3[1]; v4[2] = a3[2]; v4[3] = a3[3]; v4[4] = a3[4]; } v5 = sub_6C15B0(v3, &v12); if ( *v5 == *a2 && v5[1] == a2[1] && v5[2] == a2[2] && v5[3] == a2[3] && v5[4] == a2[4] ) { v6 = *a3; v7 = a3[1]; v13 = a3[2]; v14 = a3[3]; v8 = a3[4]; v3[6] = v6; v9 = v13; v3[7] = v7; v10 = v14; v3[8] = v9; v3[9] = v10; v3[10] = v8; } if ( v3[1] == *a2 && v3[2] == a2[1] && v3[3] == a2[2] && v3[4] == a2[3] && v3[5] == a2[4] ) { v3[1] = *a3; v3[2] = a3[1]; v3[3] = a3[2]; v3[4] = a3[3]; v3[5] = a3[4]; } result = *(_DWORD *)((char *)v3 + 57); if ( result == *a2 && *(_DWORD *)((char *)v3 + 61) == a2[1] && *(_DWORD *)((char *)v3 + 65) == a2[2] ) { result = *(_DWORD *)((char *)v3 + 69); if ( result == a2[3] && *(_DWORD *)((char *)v3 + 73) == a2[4] ) { *(_DWORD *)((char *)v3 + 57) = *a3; *(_DWORD *)((char *)v3 + 61) = a3[1]; *(_DWORD *)((char *)v3 + 65) = a3[2]; *(_DWORD *)((char *)v3 + 69) = a3[3]; result = a3[4]; *(_DWORD *)((char *)v3 + 73) = result; } } return result; } //----- (006C1760) -------------------------------------------------------- float *__thiscall sub_6C1760(_DWORD *this) { float *v1; // esi v1 = (float *)this; *this = &Party::`vftable'; this[5] = 0; this[4] = 0; this[3] = 0; this[2] = 0; this[1] = 0; this[10] = 0; this[9] = 0; this[8] = 0; this[7] = 0; this[6] = 0; *(_DWORD *)((char *)this + 73) = 0; *(_DWORD *)((char *)this + 69) = 0; *(_DWORD *)((char *)this + 65) = 0; *(_DWORD *)((char *)this + 61) = 0; *(_DWORD *)((char *)this + 57) = 0; `eh vector constructor iterator'(this + 22, 0x44u, 5, sub_6F72B0, nullsub_6); v1[20] = 0.0; *((_BYTE *)v1 + 428) = 1; *((_DWORD *)v1 + 11) = 1; *((_BYTE *)v1 + 56) = 0; v1[108] = 0.0; v1[12] = 0.0; v1[13] = 0.0; return v1; } // 9F88D4: using guessed type void *Party::`vftable'; //----- (006C17E0) -------------------------------------------------------- char *__thiscall sub_6C17E0(int this) { _DWORD *v1; // esi _DWORD *v2; // ST18_4 _DWORD *v3; // ST0C_4 _DWORD *v4; // eax v1 = (_DWORD *)this; *(_BYTE *)(this + 428) = 0; *(_DWORD *)(this + 84) = 0; *(_BYTE *)(this + 56) = 0; v2 = (_DWORD *)(this + 57); v2[4] = 0; v2[3] = 0; v2[2] = 0; v2[1] = 0; *v2 = 0; strncpy((char *)(this + 57), byte_9F88CE, 0x14u); v1[11] = 1; v1[12] = 0; v1[13] = 0; v3 = v1 + 6; v3[4] = 0; v3[3] = 0; v3[2] = 0; v3[1] = 0; *v3 = 0; strncpy((char *)v1 + 24, &byte_9F88CC, 0x14u); v4 = v1 + 1; v4[4] = 0; v4[3] = 0; v4[2] = 0; v4[1] = 0; *v4 = 0; return strncpy((char *)v1 + 4, &byte_9F88CD, 0x14u); } //----- (006C1860) -------------------------------------------------------- int __thiscall sub_6C1860(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int result; // eax unsigned int v8; // edx unsigned int v9; // ecx double v10; // st7 v6 = this; result = sub_680810(byte_AD9238); if ( *(_DWORD *)result != a2 || *(_DWORD *)(result + 4) != a3 || *(_DWORD *)(result + 8) != a4 || *(_DWORD *)(result + 12) != a5 || *(_DWORD *)(result + 16) != a6 ) { v8 = v6[21]; v9 = 0; if ( v8 ) { result = (int)(v6 + 24); while ( *(_DWORD *)(result - 8) != a2 || *(_DWORD *)(result - 4) != a3 || *(_DWORD *)result != a4 || *(_DWORD *)(result + 4) != a5 || *(_DWORD *)(result + 8) != a6 ) { ++v9; result += 68; if ( v9 >= v8 ) return result; } if ( v9 < v8 - 1 ) { result = (int)&v6[17 * v9 + 23]; do { *(_DWORD *)(result - 4) = *(_DWORD *)(result + 64); *(_DWORD *)result = *(_DWORD *)(result + 68); *(_DWORD *)(result + 4) = *(_DWORD *)(result + 72); *(_DWORD *)(result + 8) = *(_DWORD *)(result + 76); *(_DWORD *)(result + 12) = *(_DWORD *)(result + 80); *(_BYTE *)(result + 16) = *(_BYTE *)(result + 84); *(_DWORD *)(result + 20) = *(_DWORD *)(result + 88); *(_DWORD *)(result + 24) = *(_DWORD *)(result + 92); *(_DWORD *)(result + 28) = *(_DWORD *)(result + 96); *(_DWORD *)(result + 32) = *(_DWORD *)(result + 100); *(_DWORD *)(result + 36) = *(_DWORD *)(result + 104); *(_DWORD *)(result + 40) = *(_DWORD *)(result + 108); *(_DWORD *)(result + 44) = *(_DWORD *)(result + 112); *(_BYTE *)(result + 48) = *(_BYTE *)(result + 116); *(_BYTE *)(result + 49) = *(_BYTE *)(result + 117); ++v9; v10 = *(float *)(result + 120); result += 68; *(float *)(result - 16) = v10; *(float *)(result - 12) = *(float *)(result + 56); *(_BYTE *)(result - 8) = *(_BYTE *)(result + 60); } while ( v9 < v6[21] - 1 ); } --v6[21]; } } return result; } //----- (006C1980) -------------------------------------------------------- void *__thiscall sub_6C1980(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Party::`vftable'; `eh vector destructor iterator'((char *)this + 88, 0x44u, 5, nullsub_6); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F88D4: using guessed type void *Party::`vftable'; //----- (006C1FE0) -------------------------------------------------------- unsigned int sub_6C1FE0() { unsigned int v0; // esi unsigned int result; // eax int v2; // edi int v3; // ebx int v4; // ST10_4 int v5; // ST18_4 int v6; // ST5C_4 int v7; // ST20_4 int v8; // ST28_4 int v9; // STAC_4 int v10; // ST24_4 int v11; // ST30_4 int v12; // ST38_4 int v13; // ST40_4 int v14; // ST48_4 int v15; // ST50_4 int v16; // ST58_4 int v17; // ST60_4 int v18; // ST68_4 int v19; // STB4_4 int v20; // ST64_4 int v21; // STBC_4 int v22; // ST3C_4 int v23; // ST70_4 int v24; // ST78_4 int v25; // ST80_4 int v26; // ST88_4 int v27; // ST90_4 int v28; // ST98_4 int v29; // STA0_4 int v30; // STA8_4 int v31; // STB0_4 int v32; // STB8_4 int v33; // STC0_4 int v34; // STC8_4 int v35; // STCC_4 int v36; // ST1C_4 int v37; // ST74_4 int v38; // ST44_4 int v39; // ST7C_4 int v40; // ST2C_4 int v41; // ST84_4 int v42; // ST4C_4 int v43; // ST8C_4 int v44; // ST14_4 int v45; // ST94_4 int v46; // ST54_4 int v47; // ST9C_4 int v48; // ST34_4 int v49; // STA4_4 int v50; // STC4_4 int v51; // ST6C_4 int v52; // eax v0 = 0; dword_B9DE24 = 0; result = sub_6C0390(); if ( result ) { do { v2 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v3 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v4 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v5 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v6 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v7 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v8 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v9 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v10 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v11 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v12 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v13 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v14 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v15 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v16 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v17 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v18 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v19 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v20 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v21 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v22 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v23 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v24 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v25 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v26 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v27 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v28 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v29 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v30 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v31 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v32 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v33 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v34 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v35 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v36 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v37 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v38 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v39 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v40 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v41 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v42 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v43 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v44 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v45 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v46 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v47 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v48 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v49 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v50 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v51 = sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0); v52 = *(_DWORD *)(v17 + 184) + *(_DWORD *)(v18 + 188) + *(_DWORD *)(v23 + 199) + *(_DWORD *)(v24 + 203) + *(_DWORD *)(v25 + 207) + *(_DWORD *)(v26 + 211) + *(_DWORD *)(v27 + 215) + *(_DWORD *)(v28 + 219) + *(_DWORD *)(v29 + 223) + *(_DWORD *)(v30 + 227) + *(_DWORD *)(v31 + 231) + *(_DWORD *)(v32 + 235) + *(_DWORD *)(v33 + 239) + *(_DWORD *)(v34 + 243) + *(_DWORD *)(v35 + 247) + *(_DWORD *)(v36 + 251) + *(_DWORD *)(v37 + 255) + *(_DWORD *)(v38 + 259) + *(_DWORD *)(v39 + 263) + *(_DWORD *)(v40 + 267) + *(_DWORD *)(v41 + 303) + *(_DWORD *)(v42 + 307) + *(_DWORD *)(v43 + 343) + *(_DWORD *)(v44 + 347) + *(_DWORD *)(v45 + 383) + *(_DWORD *)(v46 + 387) + *(_DWORD *)(v47 + 423) + *(_DWORD *)(v48 + 427) + *(_DWORD *)(v49 + 527) + *(unsigned __int16 *)(v6 + 146) + *(unsigned __int16 *)(v9 + 156) + *(unsigned __int16 *)(v10 + 158) + *(unsigned __int8 *)(v19 + 192) + *(unsigned __int16 *)(v20 + 193) + *(unsigned __int16 *)(v21 + 195) + *(unsigned __int16 *)(v22 + 197) + *(unsigned __int8 *)(v50 + 667) + *(unsigned __int8 *)(v51 + 668) + *(unsigned __int16 *)(sub_7474E0((_DWORD *)(dword_ACE8D0 + 4), v0++) + 669); dword_B9DE24 = (dword_B9DE24 + *(_DWORD *)(v2 + 98) + *(_DWORD *)(v3 + 102) + *(_DWORD *)(v4 + 106) + *(_DWORD *)(v5 + 110) + *(_DWORD *)(v7 + 148) + *(_DWORD *)(v8 + 152) + *(_DWORD *)(v11 + 160) + *(_DWORD *)(v12 + 164) + *(_DWORD *)(v13 + 168) + *(_DWORD *)(v14 + 172) + *(_DWORD *)(v15 + 176) + *(_DWORD *)(v16 + 180) + v52) ^ 0x92; result = sub_6C0390(); } while ( v0 < result ); } return result; } // ACE8D0: using guessed type int dword_ACE8D0; // B9DE24: using guessed type int dword_B9DE24; //----- (006C25F0) -------------------------------------------------------- char __thiscall sub_6C25F0(_DWORD *this) { _DWORD *v1; // ebx char result; // al unsigned int i; // edi int v4; // eax void *v5; // ecx void *v6; // eax int v7; // esi int v8; // ST04_4 char *v9; // ST00_4 char *v10; // eax int v11; // [esp+10h] [ebp-58h] int v12; // [esp+18h] [ebp-50h] void *v13; // [esp+1Ch] [ebp-4Ch] int v14; // [esp+2Ch] [ebp-3Ch] unsigned int v15; // [esp+30h] [ebp-38h] void *v16; // [esp+3Ch] [ebp-2Ch] int v17; // [esp+4Ch] [ebp-1Ch] unsigned int v18; // [esp+50h] [ebp-18h] int v19; // [esp+64h] [ebp-4h] v1 = this; result = sub_6C0290(this); if ( result ) { for ( i = 0; ; ++i ) { v4 = v1[14]; if ( !v4 || i >= *(_DWORD *)(v4 + 40) ) break; v5 = (void *)(sub_7474E0(v1 + 1, i) + 2); v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4018E0(&v16, v5, strlen((const char *)v5)); v19 = 0; v12 = sub_7474E0(v1 + 1, i); v6 = (void *)sub_68B120((int)&v13, (const void **)&v16, &v12); v7 = *(_DWORD *)dword_B9DE2C; v8 = *(_DWORD *)(*(_DWORD *)dword_B9DE2C + 4); v9 = *(char **)dword_B9DE2C; LOBYTE(v19) = 1; v10 = sub_6CCF70(v9, v8, v6); if ( (unsigned int)(134217726 - dword_B9DE30) < 1 ) std::_Xlength_error("list too long"); ++dword_B9DE30; *(_DWORD *)(v7 + 4) = v10; **((_DWORD **)v10 + 1) = v10; sub_68B280(&unk_B9DE28, (int)&v11, *(_DWORD *)dword_B9DE2C + 8, *(void **)dword_B9DE2C); if ( v15 >= 0x10 ) operator delete(v13); v15 = 15; v14 = 0; LOBYTE(v13) = 0; v19 = -1; if ( v18 >= 0x10 ) operator delete(v16); } result = 1; } return result; } // B9DE30: using guessed type int dword_B9DE30; //----- (006C2770) -------------------------------------------------------- _DWORD *__thiscall sub_6C2770(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int *v5; // ecx char *v6; // edx int v7; // edi int v8; // eax void **v12; // [esp+10h] [ebp-1Ch] _DWORD *v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+28h] [ebp-4h] v3 = this; v13 = this; *(_BYTE *)this = *a2; this[2] = 0; v4 = operator new(0x28u); if ( !v4 ) { a2 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&a2); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v3[1] = v4; *v4 = v4; *(_DWORD *)(v3[1] + 4) = v3[1]; v5 = v3 + 4; v14 = 0; *v5 = 0; v5[1] = 0; v5[2] = 0; v6 = (char *)v3[1]; *((float *)v3 + 10) = 1.0; v7 = v3[4]; v8 = v3[5]; LOBYTE(v14) = 1; a2 = v6; if ( v7 != v8 ) v3[5] = v7; sub_433D40(v5, *v5, (char *)0x10, (int)&a2); v3[8] = 7; v3[9] = 8; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C2860) -------------------------------------------------------- int __thiscall sub_6C2860(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi int v3; // ecx int result; // eax v1 = this; for ( i = (_DWORD *)this[9]; i; result = sub_6C2860(v3) ) { v3 = i[2]; i = (_DWORD *)*i; } v1[5] = 2; return result; } //----- (006C2890) -------------------------------------------------------- char __thiscall sub_6C2890(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi char i; // bl int v7; // edi char v8; // bl v5 = (_DWORD *)this[9]; for ( i = 0; v5; i = sub_6C2890(a2, a3, a4, a5) | v8 ) { v7 = v5[2]; v5 = (_DWORD *)*v5; v8 = (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v7 + 16))(v7, a2, a3, a4, a5) | i; } return i; } //----- (006C28F0) -------------------------------------------------------- char __cdecl sub_6C28F0(int a1, int a2, int a3, int a4) { return sub_6C2890(&off_AB6EF8, a1, a2, a3, a4); } // AB6EF8: using guessed type void **off_AB6EF8; //----- (006C2930) -------------------------------------------------------- int __thiscall sub_6C2930(_DWORD *this, int a2, int a3, int a4) { _DWORD *i; // edi int v5; // esi int result; // eax for ( i = (_DWORD *)this[7]; i; result = (*(int (__thiscall **)(int, int, int, int))(*(_DWORD *)(v5 + 8) + 16))(v5 + 8, a2, a3, a4) ) { v5 = i[2]; i = (_DWORD *)*i; (*(void (__thiscall **)(int, int, int, int))(*(_DWORD *)(v5 + 8) + 4))(v5 + 8, a2, a3, a4); } return result; } //----- (006C2980) -------------------------------------------------------- int __thiscall sub_6C2980(_DWORD *this, int a2, int a3, int a4) { int i; // esi int result; // eax for ( i = this[5]; i; i = *(_DWORD *)(i + 28) ) result = (*(int (__thiscall **)(int, int, int, int))(*(_DWORD *)(i + 8) + 4))(i + 8, a2, a3, a4); return result; } //----- (006C29C0) -------------------------------------------------------- int __cdecl sub_6C29C0(int a1, int a2) { if ( dword_AB6F04 ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)dword_AB6F04 + 4))(a1, a2, &dword_AB6F00); if ( dword_AB6F04 ) (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)dword_AB6F04 + 16))(a1, a2, &dword_AB6F00); } return (*(int (__thiscall **)(int *, int, int, int *))(dword_AB6F00 + 16))(&dword_AB6F00, a1, a2, &dword_AB6F00); } // AB6F00: using guessed type int dword_AB6F00; // AB6F04: using guessed type int dword_AB6F04; //----- (006C2A20) -------------------------------------------------------- void __thiscall sub_6C2A20(_DWORD *this, float a2) { _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // esi void (__thiscall *v5)(_DWORD *); // edx void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // [esp+10h] [ebp-8h] _DWORD *v8; // [esp+14h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[9]; while ( v3 ) { v4 = (_DWORD *)v3[2]; v8 = v3; v3 = (_DWORD *)*v3; sub_6C2A20(a2); if ( !v4[5] ) { v5 = *(void (__thiscall **)(_DWORD *))(*v4 + 4); v4[5] = 1; v5(v4); } (*(void (__thiscall **)(_DWORD *, _DWORD))(*v4 + 12))(v4, LODWORD(a2)); if ( v4[5] == 2 && !v4[15] && !v4[11] ) { (*(void (__thiscall **)(_DWORD *))(*v4 + 8))(v4); sub_6BB7C0(v2 + 8, &v7, &v8); if ( v7 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } } } } //----- (006C2AE0) -------------------------------------------------------- int __thiscall sub_6C2AE0(_DWORD *this, float a2) { _DWORD *v2; // edi int result; // eax _DWORD *v4; // esi float v5; // esi v2 = this; result = this[13]; if ( result ) { v4 = *(_DWORD **)(result + 8); if ( !v4[5] ) (*(void (__thiscall **)(_DWORD *))(*v4 + 4))(v4); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 12))(v4, LODWORD(a2)); if ( v4[5] == 2 && !v4[15] && !v4[11] ) { (*(void (__thiscall **)(_DWORD *))(*v4 + 8))(v4); sub_6B7B30(v2 + 12, &a2); result = LODWORD(a2); if ( a2 != 0.0 ) { v5 = a2; result = InterlockedDecrement((volatile LONG *)(LODWORD(a2) + 4)); if ( !result && v5 != 0.0 ) result = (**(int (__thiscall ***)(float, signed int))LODWORD(v5))(COERCE_FLOAT(LODWORD(v5)), 1); } } } return result; } //----- (006C2BA0) -------------------------------------------------------- _DWORD *__thiscall sub_6C2BA0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx int v4; // esi v3 = this; v4 = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); sub_6BB9F0(v3 + 8, a2, &a3); if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( *a2 ) *(_DWORD *)(*a2 + 28) = 0; return a2; } //----- (006C2C50) -------------------------------------------------------- int sub_6C2C50() { int *v0; // edx _DWORD *v1; // ecx int v2; // edx v0 = (int *)dword_AB6F1C; if ( dword_AB6F1C ) { do { v1 = (_DWORD *)v0[2]; v2 = *v0; sub_6C2860(v1); } while ( v0 ); } dword_AB6F0C = 2; sub_6C2A20(&off_AB6EF8, 0.0); return sub_6C2AE0(&off_AB6EF8, 0.0); } // AB6EF8: using guessed type void **off_AB6EF8; // AB6F0C: using guessed type int dword_AB6F0C; // AB6F1C: using guessed type int dword_AB6F1C; //----- (006C2CA0) -------------------------------------------------------- int __cdecl sub_6C2CA0(float a1) { sub_6C2A20(&off_AB6EF8, a1); return sub_6C2AE0(&off_AB6EF8, a1); } // AB6EF8: using guessed type void **off_AB6EF8; //----- (006C2CD0) -------------------------------------------------------- void __thiscall sub_6C2CD0(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ecx void (__thiscall ***v4)(_DWORD, signed int); // edi int v5; // [esp+4h] [ebp-4h] v2 = (int)this; v3 = (_DWORD *)this[7]; if ( v3 ) { sub_6C2BA0(v3, &v5, v2); v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !v5 ) { LABEL_6: *(_DWORD *)(v2 + 28) = a2; return; } if ( InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { *(_DWORD *)(v2 + 28) = a2; } else { if ( v4 ) { (**v4)(v4, 1); goto LABEL_6; } *(_DWORD *)(v2 + 28) = a2; } } else { *(_DWORD *)(v2 + 28) = a2; } } //----- (006C2D50) -------------------------------------------------------- LONG __thiscall sub_6C2D50(void *this, _DWORD *a2) { int v2; // edi _DWORD *v3; // esi volatile LONG *v4; // ebx LONG result; // eax v2 = (int)this; v3 = a2; v4 = a2 + 1; InterlockedIncrement(a2 + 1); sub_6C2CD0(v3, v2); a2 = v3; if ( v3 ) InterlockedIncrement(v4); sub_8B8EC0((_DWORD *)(v2 + 32), (int *)&a2); if ( v3 && !InterlockedDecrement(v4) ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = InterlockedDecrement(v4); if ( !result ) { if ( v3 ) result = (*(int (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); } return result; } //----- (006C2E00) -------------------------------------------------------- void ***__thiscall sub_6C2E00(void ***this, void ***a2) { void ***v2; // esi void ***v3; // ecx v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v2[2] = &IDirectMessenger::`vftable'; v2[3] = 0; v2[4] = 0; *v2 = &ITask::`vftable'; v2[2] = &ITask::`vftable'; v2[11] = 0; v2[9] = 0; v2[10] = 0; v2[8] = &NiTList>::`vftable'; v2[15] = 0; v2[13] = 0; v2[14] = 0; v2[12] = &NiTList>::`vftable'; v3 = a2; v2[7] = 0; v2[5] = 0; v2[6] = 0; if ( a2 ) goto LABEL_4; if ( v2 != &off_AB6EF8 ) { v3 = &off_AB6EF8; LABEL_4: sub_6C2D50(v3, v2); } return v2; } // 9A8C04: using guessed type void *IDirectMessenger::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9F88DC: using guessed type void *NiTList>::`vftable'; // 9F88EC: using guessed type void *ITask::`vftable'; // 9F8908: using guessed type void *ITask::`vftable'; // AB6EF8: using guessed type void **off_AB6EF8; //----- (006C2EC0) -------------------------------------------------------- int __thiscall sub_6C2EC0(_DWORD *this, int a2) { int result; // eax result = a2; this[17] = a2; return result; } //----- (006C2ED0) -------------------------------------------------------- int __thiscall sub_6C2ED0(_DWORD *this, int a2) { int result; // eax result = a2; this[21] = a2; return result; } //----- (006C2EE0) -------------------------------------------------------- char sub_6C2EE0() { char result; // al result = dword_B9DE58; if ( dword_B9DE58 ) result = sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_B9DE58); return result; } // B9DE58: using guessed type int dword_B9DE58; //----- (006C2F00) -------------------------------------------------------- char __stdcall sub_6C2F00(int a1) { HIBYTE(a1) = a1; return sub_6F3D10(&off_AB7F2C, 45, 16, (char *)&a1 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C2F30) -------------------------------------------------------- void __thiscall sub_6C2F30(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; if ( this[16] == 4 && (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 248))() ) { if ( dword_B9DE58 ) sub_4F31E0((float *)dword_B9DE58); sub_6F3D10(&off_AB7F2C, 12, 25, 0, 0); v2[5] = 2; } } // AB7F2C: using guessed type void **off_AB7F2C; // B9DE58: using guessed type int dword_B9DE58; //----- (006C2F80) -------------------------------------------------------- char __thiscall sub_6C2F80(int this, int a2, int a3, int a4, int a5) { int v5; // esi int v7; // eax v5 = this; if ( a2 != 12 ) return 0; if ( a3 == 22 ) { *(_DWORD *)(this + 20) = 2; return 1; } if ( a3 != 26 ) return 0; if ( *(_BYTE *)(this + 72) ) return 1; v7 = *(_DWORD *)(this + 64); if ( v7 != 3 && v7 != 4 ) return 1; sub_6BFD20(**(unsigned __int16 **)(this + 80), flt_ACCFCC, 0.0, 0.0); if ( *(_DWORD *)(v5 + 64) == 4 ) sub_4F3590(dword_B9DE58); *(_BYTE *)(v5 + 72) = 1; return 1; } // ACCFCC: using guessed type float flt_ACCFCC; // B9DE58: using guessed type int dword_B9DE58; //----- (006C3010) -------------------------------------------------------- bool __stdcall sub_6C3010(int a1, const char *a2) { int v2; // eax bool result; // al v2 = *(_DWORD *)(a1 + 116); if ( v2 ) result = strcmp((const char *)(v2 + 2), a2) == 0; else result = 0; return result; } //----- (006C3070) -------------------------------------------------------- char __stdcall sub_6C3070(int a1, int a2) { int v2; // eax _DWORD *v3; // ecx if ( !a1 ) return 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v2 ) return 0; v3 = *(_DWORD **)(v2 + 716); if ( !v3 || *(_DWORD *)(*(_DWORD *)(a1 + 112) + 374) != 6 ) return 0; dword_ACEC24 = 8; sub_533910(v3, a2); sub_4A3820(); unknown_libname_5(1); return 1; } // 46EDD0: using guessed type _DWORD __stdcall unknown_libname_5(_DWORD); // ACEC24: using guessed type int dword_ACEC24; //----- (006C30E0) -------------------------------------------------------- void __stdcall sub_6C30E0(int a1, unsigned int a2) { int v2; // eax _DWORD *v3; // edi const CHAR *v4; // eax volatile LONG *v5; // esi const CHAR *v6; // eax int v7; // ebx int v8; // eax if ( a1 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (_DWORD *)v2; if ( v2 ) { if ( dword_B67404 ) { v4 = sub_40A910(123673116); sub_492060(v3, (int)v4); } else { v5 = *(volatile LONG **)(v2 + 716); if ( v5 ) { if ( dword_ACEC24 ) { v6 = sub_40A910(-1292446161); sub_492060(v3, (int)v6); } else { v7 = *(_DWORD *)(v2 + 1216); if ( v7 ) { if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v5 + 260))(v5) ) sub_8F86A0(&unk_BA6B10, v5); v8 = sub_433AF0(v5, a2); sub_536E90(v8, 1); dword_ACEC24 = 6; sub_8F9D50(&unk_BA6B10, v5, 0, 0, 0); sub_68C320(v7, a2); dword_B67404 = 1; } } } } } } } // ACEC24: using guessed type int dword_ACEC24; // B67404: using guessed type int dword_B67404; //----- (006C31D0) -------------------------------------------------------- void __stdcall sub_6C31D0(int a1, unsigned int a2) { int v2; // eax _DWORD *v3; // edi const CHAR *v4; // eax _DWORD *v5; // esi const CHAR *v6; // eax unsigned int v7; // ST00_4 int v8; // eax if ( a1 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (_DWORD *)v2; if ( v2 ) { if ( dword_B67408 ) { v4 = sub_40C190(577119654); sub_492060(v3, (int)v4); } else { v5 = *(_DWORD **)(v2 + 716); if ( v5 && sub_6857A0(&byte_ADA230, &a1) ) { if ( dword_ACEC24 ) { v6 = sub_40C190(577119654); sub_492060(v3, (int)v6); } else { v7 = a2; v5[367] = a2; v8 = sub_433AF0(v5, v7); sub_536E90(v8, 1); dword_ACEC24 = 7; dword_B67408 = 1; } } } } } } // ACEC24: using guessed type int dword_ACEC24; // ADA230: using guessed type char byte_ADA230; // B67408: using guessed type int dword_B67408; //----- (006C3290) -------------------------------------------------------- void __stdcall sub_6C3290(int a1, int a2) { int v2; // eax _DWORD *v3; // esi const CHAR *v4; // eax int v5; // edi const CHAR *v6; // eax const CHAR *v7; // eax if ( a1 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = (_DWORD *)v2; if ( v2 ) { if ( dword_B6740C ) { v4 = sub_40C190(577119654); sub_492060(v3, (int)v4); } else { v5 = *(_DWORD *)(v2 + 716); if ( v5 ) { if ( dword_ACEC24 ) { v6 = sub_40C190(577119654); sub_492060(v3, (int)v6); } else if ( sub_685BE0(&byte_ADA230, &a1) ) { *(_DWORD *)(v5 + 1484) = a2; dword_ACEC24 = 9; dword_B6740C = 1; } else { v7 = sub_4090F0(-1749092413); sub_492060(v3, (int)v7); } } } } } } // ACEC24: using guessed type int dword_ACEC24; // ADA230: using guessed type char byte_ADA230; // B6740C: using guessed type int dword_B6740C; //----- (006C3360) -------------------------------------------------------- void __thiscall sub_6C3360(_DWORD *this, char *a2, _DWORD *a3, int a4) { _DWORD *v4; // esi unsigned int v5; // eax int v6; // ebx const CHAR *v7; // eax _DWORD **v8; // edi int v9; // eax const CHAR *v10; // eax _DWORD **v11; // edi int v12; // eax int v13; // edx const CHAR *v14; // eax int v15; // ecx bool v16; // zf int v17; // eax int v18; // ecx const char *v19; // edi char *v20; // edi int v21; // ebx _WORD *v22; // edi int v23; // edi int v24; // eax _BYTE *v25; // ecx const CHAR *v26; // eax unsigned int v27; // eax int v28; // eax int v29; // eax int v30; // edi char v31; // [esp-18h] [ebp-34h] int v32; // [esp-14h] [ebp-30h] int v33; // [esp-10h] [ebp-2Ch] int v34; // [esp-Ch] [ebp-28h] char *v35; // [esp-8h] [ebp-24h] const CHAR *v36; // [esp-4h] [ebp-20h] int v37; // [esp+14h] [ebp-8h] int v38; // [esp+18h] [ebp-4h] v4 = this; if ( a2 == (char *)27 ) { if ( !a3 ) return; if ( *a3 ) { if ( *a3 != 1 ) return; v27 = this[15]; if ( v27 < 0xC0 ) { v28 = dword_ADA234[v27]; if ( v28 ) { v29 = *(_DWORD *)(v28 + 112); if ( v29 ) { if ( *(_DWORD *)(v29 + 374) == 2 ) { v30 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_6F00B0(*(_BYTE **)(v30 + 1124), 0); sub_537640(*(char **)(v30 + 716)); } } } } } else { v5 = this[15]; if ( v5 >= 0xC0 ) goto LABEL_5; v6 = dword_ADA234[v5]; if ( !v6 ) goto LABEL_5; if ( sub_6C3010(v6, "GuildName") ) { v7 = sub_40A910(-958028331); v8 = (_DWORD **)sub_5DC6C0((int)v7); sub_40A910(1759694544); sub_5DBCC0(v8); v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v38 = v4[15]; a2 = &v31; sub_6C4B40(&v31, (int)sub_4D4620, v9, v37, v38); sub_5DC430((int)v8, v31, v32, v33, v34, v35, (int)v36); v4[3] = 2; return; } if ( sub_6C3010(v6, "GuildTendency") ) { v10 = sub_40A910(708511772); v11 = (_DWORD **)sub_5D9130((int)v10); v12 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v13 = v4[15]; a2 = &v31; v38 = v13; sub_6C4BC0(&v31, (int)sub_4B4C60, v12, v37, v13); sub_5D8E20((int)v11, v31, v32, v33, v34, v35, (int)v36); v36 = sub_40A910(-623718449); v35 = (char *)sub_40A910(894190213); v14 = sub_40A910(-1801990957); sub_5D8720(v11, (int)v14, (int)v35, (int)v36); v4[3] = 2; return; } v15 = *(_DWORD *)(v6 + 112); v16 = *(_DWORD *)(v15 + 98) == 0; a2 = *(char **)(v6 + 112); if ( v16 ) { sub_4C1390((_DWORD *)v4[19], *((_BYTE *)v4 + 60)); *((_BYTE *)v4 + 64) = 0; v4[3] = 2; return; } v17 = *(_DWORD *)(v6 + 116); if ( !v17 ) goto LABEL_5; v18 = *(_DWORD *)(v15 + 374); if ( v18 == 4 || v18 == 5 ) { sub_6C2F00(v4[15]); v4[3] = 2; return; } v19 = (const char *)(v17 + 2); if ( !strcmp((const char *)(v17 + 2), "Roar") ) { if ( v4[1] ) { (*(void (__stdcall **)(signed int, _DWORD *, _DWORD *))(*(_DWORD *)v4[1] + 4))(52, v4 + 15, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, _DWORD *, _DWORD *))(*(_DWORD *)v4[1] + 20))(52, v4 + 15, v4); } (*(void (__thiscall **)(_DWORD *, signed int, _DWORD *, _DWORD *))(*v4 + 20))(v4, 52, v4 + 15, v4); v4[3] = 2; return; } if ( !strcmp(v19, "GoddessWing") ) { if ( v4[1] ) { (*(void (__stdcall **)(signed int, _DWORD *, _DWORD *))(*(_DWORD *)v4[1] + 4))(53, v4 + 15, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, _DWORD *, _DWORD *))(*(_DWORD *)v4[1] + 20))(53, v4 + 15, v4); } (*(void (__thiscall **)(_DWORD *, signed int, _DWORD *, _DWORD *))(*v4 + 20))(v4, 53, v4 + 15, v4); v4[3] = 2; return; } if ( !strcmp(v19, "EnchantSocketAdd") ) { sub_6C31D0(v6, v4[15]); v4[3] = 2; return; } v20 = a2; if ( !strcmp(a2 + 2, "EnchantSocketReload") ) { v21 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v22 = *(_WORD **)(v21 + 996); if ( sub_685860(&byte_ADA230, &a2) && v22 ) { sub_4A4F60((_DWORD **)v21, 1, 1); sub_50B090(v22, &a2); sub_8F82A0(&unk_BA6B10, v22); } v4[3] = 2; return; } v36 = (const CHAR *)v4[15]; v35 = (char *)v6; if ( !strcmp(a2 + 2, "RandomOption_Recover") ) { sub_6C3290((int)v35, (int)v36); v4[3] = 2; return; } if ( *(_DWORD *)(a2 + 374) == 1 ) { sub_6C30E0((int)v35, (unsigned int)v36); v4[3] = 2; return; } if ( sub_6C3070((int)v35, (int)v36) == 1 ) goto LABEL_5; if ( *(_DWORD *)(v20 + 374) != 2 ) { LOBYTE(a2) = *((_BYTE *)v4 + 60); BYTE1(a2) = 9; sub_6F3D10(&off_AB7F2C, 12, 21, &a2, 2u); *((_BYTE *)v4 + 64) = 0; return; } v23 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( dword_ADB4FC != 2 ) { v26 = sub_40A910(1952536033); sub_492060((_DWORD *)v23, (int)v26); v4[3] = 2; return; } sub_6DFA50(byte_ADB468, 2); v24 = (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 196))(); sub_6BABB0(&dword_AB6520, (int)"SFX_EndureKit", v24); v25 = *(_BYTE **)(v23 + 1124); if ( v25 && *(_DWORD *)(v23 + 716) ) { sub_6F00B0(v25, *((_BYTE *)v4 + 60)); sub_537470(*(char **)(v23 + 716)); v4[3] = 2; return; } } v4[3] = 2; return; } if ( a2 == (char *)39 && this[14] == 4 ) { sub_4F31E0((float *)dword_B9DE58); sub_6F3D10(&off_AB7F2C, 12, 25, 0, 0); LABEL_5: v4[3] = 2; } } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; // ADB4FC: using guessed type int dword_ADB4FC; // B9DE58: using guessed type int dword_B9DE58; //----- (006C3930) -------------------------------------------------------- void __thiscall sub_6C3930(_DWORD *this) { int v1; // ebx _DWORD *v2; // eax _DWORD *v3; // esi unsigned int v4; // eax void *v5; // eax int v6; // edi _BYTE *v7; // ecx int v8; // eax int (__thiscall *v9)(_DWORD *); // edx int v10; // eax unsigned int v11; // eax int v12; // eax unsigned int v13; // edi char *v14; // eax _DWORD *v15; // eax _DWORD *v16; // esi _DWORD *v17; // eax int v18; // eax const char *v19; // edi _DWORD *v20; // esi char *v21; // edi int v22; // esi int v23; // ecx char *v24; // eax int v25; // esi char *v26; // eax char *v27; // ST0C_4 char *v28; // eax volatile LONG *v29; // eax int v30; // edi unsigned int v31; // eax _DWORD *v32; // eax int v33; // eax const char *v34; // esi int v35; // edi int v36; // esi int v37; // ecx char *v38; // eax int v39; // esi int v40; // ecx int *v41; // eax int v42; // esi int v43; // ecx char *v44; // eax char *v45; // eax char *v46; // ST0C_4 char *v47; // eax volatile LONG *v48; // eax char *v49; // eax char *v50; // ST0C_4 char *v51; // eax volatile LONG *v52; // eax int v53; // ST0C_4 char *v54; // eax void **v55; // eax int v56; // ST0C_4 char *v57; // eax void **v58; // esi int v59; // eax int v60; // esi char *v61; // eax _DWORD *v62; // edi unsigned __int16 *v63; // eax const char *v64; // esi volatile LONG *v65; // eax int v66; // [esp-4h] [ebp-90h] int v67; // [esp+10h] [ebp-7Ch] _DWORD *v68; // [esp+14h] [ebp-78h] char v69; // [esp+18h] [ebp-74h] char v70; // [esp+19h] [ebp-73h] int v71; // [esp+1Ch] [ebp-70h] _DWORD *v72; // [esp+20h] [ebp-6Ch] _DWORD *v73; // [esp+24h] [ebp-68h] int *v74; // [esp+28h] [ebp-64h] unsigned int v75; // [esp+3Ch] [ebp-50h] char v76[4]; // [esp+44h] [ebp-48h] unsigned int v77; // [esp+58h] [ebp-34h] char v78[4]; // [esp+60h] [ebp-2Ch] unsigned int v79; // [esp+74h] [ebp-18h] int v80; // [esp+88h] [ebp-4h] v1 = (int)this; v72 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = v2; v68 = v2; if ( !v2 ) goto LABEL_9; if ( !v2[179] ) goto LABEL_9; if ( dword_ACEC24 == 8 ) goto LABEL_9; v4 = *(_DWORD *)(v1 + 68); if ( v4 >= 0xC0 ) goto LABEL_9; v73 = (_DWORD *)dword_ADA234[v4]; if ( !v73 ) goto LABEL_9; if ( sub_633440() ) { v5 = (void *)sub_40C190(-1951743271); goto LABEL_8; } v6 = v73[28]; v71 = v6; if ( *(_DWORD *)(v6 + 374) == 2 && dword_ADB4FC == 2 ) { v7 = (_BYTE *)v3[281]; if ( v7 ) { if ( v3[179] ) { sub_6F00B0(v7, *(_BYTE *)(v1 + 68)); sub_537470((char *)v3[179]); } } } if ( !strcmp((const char *)(v6 + 2), "EnchantSocketAdd") || !strcmp((const char *)(v6 + 2), "EnchantSocketReload") || !strcmp((const char *)(v6 + 2), "RandomOption_Recover") ) { v66 = v6 + 34; *(_DWORD *)(v1 + 64) = 1; LABEL_135: v61 = (char *)sub_40C190(-588327666); goto LABEL_136; } if ( *(_DWORD *)(v6 + 374) == 1 ) { v8 = (*(int (__thiscall **)(_DWORD *))(*v73 + 16))(v73); v9 = *(int (__thiscall **)(_DWORD *))(*v73 + 12); v72 = (_DWORD *)v8; if ( v9(v73) != v8 ) { sub_6C30E0((int)v73, *(_DWORD *)(v1 + 68)); *(_DWORD *)(v1 + 20) = 2; return; } v10 = v71 + 34; *(_DWORD *)(v1 + 64) = 1; v66 = v10; goto LABEL_135; } if ( sub_686650(&byte_ADA230, &v67) ) { v11 = v67 & 0x3FF; if ( v11 == *(_DWORD *)(v1 + 68) && v11 < 0xC0 ) { if ( dword_ADA234[v11] ) { v12 = v73[28]; if ( v12 ) { v13 = *(_DWORD *)(v12 + 127); if ( v13 > sub_680890((unsigned __int8 *)byte_AD9238) ) { v14 = (char *)sub_40A910(995381403); v5 = sub_7549E0(v14, v13); goto LABEL_8; } v15 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v16 = v15; if ( v15 ) { sub_4A53B0(v15); sub_4BF2F0(v16, 0); } } } } } v17 = v73; *(_DWORD *)(v1 + 80) = 0; *(_WORD *)(v1 + 88) = -1; v18 = sub_4B1600(*((unsigned __int16 *)v17 + 4)); if ( v18 ) *(_WORD *)(v1 + 88) = *(_WORD *)(v18 + 2); if ( *(_BYTE *)(v71 + 310) != 45 ) *(_DWORD *)(v1 + 80) = sub_438F10((void *)(v71 + 310)); v19 = *(const char **)(v1 + 80); if ( v19 ) { if ( strcmp(v19 + 2, "UseSilverWings") && strcmp(v19 + 2, "UseRide") && !sub_6BEAC0(*(unsigned __int16 *)v19) ) { v5 = (void *)sub_40C190(-2047355183); goto LABEL_8; } if ( sub_672F50(dword_AD8EBC + 776) ) { if ( !strcmp((const char *)(*(_DWORD *)(v1 + 80) + 2), "UseRide") && sub_64FA00(dword_AD8EBC, 75) ) { v5 = (void *)sub_40A910(542412159); goto LABEL_8; } } else if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 648))() || sub_672F50(dword_AD8EBC + 776) ) { v5 = (void *)sub_40C190(577119654); goto LABEL_8; } v20 = v73; if ( *(_DWORD *)(*(_DWORD *)(v1 + 80) + 203) ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v73 + 4))(v73) != 34 ) { *(_DWORD *)(v1 + 64) = 4; if ( dword_B9DE58 || (dword_B9DE58 = sub_4F3800(0, 1), (**(void (__stdcall ***)(int))(dword_B9DE58 + 232))(v1 + 8), sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_B9DE58), (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_B9DE58 + 256))(0), dword_B9DE58) ) { sub_65D6D0((int *)dword_AD8EBC, v1, (int)v19); sub_4F34B0(dword_B9DE58, *(_DWORD *)(*(_DWORD *)(v1 + 80) + 203), 0); } } } else { *(_DWORD *)(v1 + 64) = 3; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 4))(v20) == 34 ) { sub_4E3280(v68, *(_DWORD *)(v1 + 68), **(_WORD **)(v1 + 80)); *(_DWORD *)(v1 + 20) = 2; return; } } else { v20 = v73; *(_DWORD *)(v1 + 64) = 5; } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v20[28] + 274)) ) { v21 = (char *)v73; sub_4019E0(v78, (void *)(v73[28] + 34)); v80 = 0; v22 = sub_417B90((unsigned __int8 *)v78, "(", 0x100000000ui64); if ( v22 != -1 ) { v23 = *sub_424890(v78, (int *)&v68); v24 = *(char **)v78; if ( v79 < 0x10 ) v24 = v78; sub_6C4C60(v78, (int)&v24[v22], v23, &unk_9F892D); } if ( !sub_6869F0(v21) ) { v25 = (int)v72; v26 = *(char **)v78; v72[16] = 2; if ( v79 < 0x10 ) v26 = v78; v27 = v26; v28 = (char *)sub_40A910(-2134069279); v29 = sub_462C30(2, v28, v27); (**((void (__stdcall ***)(int))v29 + 58))(v25 + 8); sub_636A10(v78); return; } v80 = -1; sub_636A10(v78); v1 = (int)v72; v20 = v73; v30 = v71; LABEL_65: if ( *(_DWORD *)(v30 + 118) ) goto LABEL_139; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 4))(v20) == 13 ) { *(_DWORD *)(v1 + 64) = 5; if ( *(_DWORD *)(v1 + 12) ) { (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 4))(53, v1 + 68, v1 + 8); if ( *(_DWORD *)(v1 + 12) ) (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 20))(53, v1 + 68, v1 + 8); } (*(void (__thiscall **)(int, signed int, int, int))(*(_DWORD *)(v1 + 8) + 20))(v1 + 8, 53, v1 + 68, v1 + 8); *(_DWORD *)(v1 + 20) = 2; return; } if ( *(_DWORD *)(v30 + 118) ) goto LABEL_139; v59 = v73[29]; if ( !v59 ) return; if ( strcmp((const char *)(v59 + 2), "ProposeRing") || (*(_DWORD *)(v1 + 64) = 5, (v60 = *((_DWORD *)dword_AD8EBC + 1026)) == 0) || sub_651680(*((_DWORD *)dword_AD8EBC + 1026)) || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v60 + 32))(v60) ) { LABEL_139: v62 = v73; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v73 + 4))(v73) != 22 ) goto LABEL_140; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_AD8EBC + 488))() ) goto LABEL_140; v63 = sub_59AF70(*((_DWORD *)dword_AD8EBC + 641)); if ( !v63 ) goto LABEL_140; if ( v63[65] || (v64 = (const char *)(v63 + 66), !strcmp((const char *)v63 + 132, "-")) ) { v5 = (void *)sub_40C190(1906944922); goto LABEL_8; } if ( !strcmp((const char *)(v62[28] + 2), v64) ) { LABEL_140: v69 = *(_BYTE *)(v1 + 68); v70 = 9; sub_6F3D10(&off_AB7F2C, 12, 21, &v69, 2u); *(_BYTE *)(v1 + 72) = 0; return; } v5 = (void *)sub_40C190(-1141985811); LABEL_8: sub_431140((_DWORD **)(v1 + 8), 25, (int)v5, 0); LABEL_9: *(_DWORD *)(v1 + 20) = 2; return; } v66 = (*(int (__thiscall **)(int))(*(_DWORD *)v60 + 84))(v60); v61 = (char *)sub_40C190(-1865630753); LABEL_136: v65 = sub_462C30(2, v61, v66); (**((void (__stdcall ***)(int))v65 + 58))(v1 + 8); return; } v30 = v71; if ( *(_DWORD *)(v71 + 118) != 4 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v20 + 4))(v20) == 24 || (*(int (__thiscall **)(_DWORD *))(*v20 + 44))(v20) && (!(*(int (__thiscall **)(_DWORD *))(*v20 + 44))(v20) || *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v20 + 44))(v20)) ) { goto LABEL_65; } v31 = *(_DWORD *)(v1 + 68); *(_DWORD *)(v1 + 64) = 1; if ( v31 >= 0xC0 ) return; v32 = (_DWORD *)dword_ADA234[v31]; v73 = v32; if ( !v32 ) return; v33 = v32[29]; if ( !v33 ) return; v34 = (const char *)(v33 + 2); if ( !strcmp((const char *)(v33 + 2), "Roar") ) { if ( *(_DWORD *)(v1 + 12) ) { (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 4))(52, v1 + 68, v1 + 8); if ( *(_DWORD *)(v1 + 12) ) (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 20))(52, v1 + 68, v1 + 8); } (*(void (__thiscall **)(int, signed int, int, int))(*(_DWORD *)(v1 + 8) + 20))(v1 + 8, 52, v1 + 68, v1 + 8); *(_DWORD *)(v1 + 20) = 2; return; } if ( !strcmp(v34, "ProdReload01") ) { if ( *(_DWORD *)(v1 + 12) ) { (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 4))(67, v1 + 68, v1 + 8); if ( *(_DWORD *)(v1 + 12) ) (*(void (__stdcall **)(signed int, int, int))(**(_DWORD **)(v1 + 12) + 20))(67, v1 + 68, v1 + 8); } (*(void (__thiscall **)(int, signed int, int, int))(*(_DWORD *)(v1 + 8) + 20))(v1 + 8, 67, v1 + 68, v1 + 8); *(_DWORD *)(v1 + 20) = 2; return; } if ( *(_DWORD *)(v71 + 98) ) { if ( *(_DWORD *)(v71 + 374) == 2 ) { v53 = v71 + 34; v54 = (char *)sub_40C190(-588327666); v55 = (void **)sub_462C30(2, v54, v53); } else { v56 = v71 + 34; v57 = (char *)sub_40C190(-588327666); v55 = (void **)sub_462CA0(2, v57, v56); } v58 = v55; sub_85AB50(v55, "MsgBoxAskUseItemWin"); (*(void (__thiscall **)(void **, int))v58[58])(v58 + 58, v1 + 8); return; } v35 = 0; while ( !dword_ADA534[v35] ) { LABEL_102: if ( (unsigned int)++v35 >= 0x1E ) { sub_4019E0(v76, (void *)(v73[28] + 34)); v80 = 3; v42 = sub_417B90((unsigned __int8 *)v76, "(", 0x100000000ui64); if ( v42 != -1 ) { v43 = *sub_424890(v76, (int *)&v68); v44 = *(char **)v76; if ( v77 < 0x10 ) v44 = v76; sub_6C4C60(v76, (int)&v44[v42], v43, &unk_9F8959); } v45 = *(char **)v76; if ( v77 < 0x10 ) v45 = v76; v46 = v45; v47 = (char *)sub_40C190(-588327666); v48 = sub_462C30(2, v47, v46); (**((void (__stdcall ***)(int))v48 + 58))((int)(v72 + 2)); sub_636A10(v76); return; } } sub_4019E0(v78, (void *)(v73[28] + 34)); v80 = 1; v36 = sub_417B90((unsigned __int8 *)v78, "(", 0x100000000ui64); if ( v36 != -1 ) { v37 = *sub_424890(v78, (int *)&v68); v38 = *(char **)v78; if ( v79 < 0x10 ) v38 = v78; sub_6C4C60(v78, (int)&v38[v36], v37, &unk_9F892E); } sub_4019E0(&v74, (void *)(*(_DWORD *)(dword_ADA534[v35] + 112) + 34)); LOBYTE(v80) = 2; v39 = sub_417B90((unsigned __int8 *)&v74, "(", 0x100000000ui64); if ( v39 != -1 ) { v40 = *sub_424890(&v74, &v71); v41 = v74; if ( v75 < 0x10 ) v41 = (int *)&v74; sub_6C4C60(&v74, (int)v41 + v39, v40, &unk_9F892F); } if ( !(unsigned __int8)sub_425160((int)v78, (int)&v74) ) { sub_636A10(&v74); v80 = -1; sub_636A10(v78); goto LABEL_102; } v49 = *(char **)v78; if ( v79 < 0x10 ) v49 = v78; v50 = v49; v51 = (char *)sub_40C190(155134222); v52 = sub_462C30(2, v51, v50); (**((void (__stdcall ***)(int))v52 + 58))((int)(v72 + 2)); sub_636A10(&v74); sub_636A10(v78); } // AB7F2C: using guessed type void **off_AB7F2C; // ACEC24: using guessed type int dword_ACEC24; // AD9E70: using guessed type int dword_AD9E70; // ADA230: using guessed type char byte_ADA230; // ADA534: using guessed type int dword_ADA534[]; // ADB4FC: using guessed type int dword_ADB4FC; // B9DE58: using guessed type int dword_B9DE58; //----- (006C4520) -------------------------------------------------------- void ***sub_6C4520() { return &std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor'; } // AB7068: using guessed type void **std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor'; //----- (006C4530) -------------------------------------------------------- char *__thiscall sub_6C4530(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0x14u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,char const *>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; *((_DWORD *)result + 3) = v3[3]; *((_DWORD *)result + 4) = v3[4]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8A84: using guessed type void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,char const *>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C45A0) -------------------------------------------------------- void ***sub_6C45A0() { return &std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor'; } // AB71D0: using guessed type void **std::tr1::_Bind,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>> `RTTI Type Descriptor'; //----- (006C45B0) -------------------------------------------------------- void *__thiscall sub_6C45B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base1::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8A68: using guessed type void *std::tr1::_Impl_base1::`vftable'; //----- (006C45E0) -------------------------------------------------------- char *__thiscall sub_6C45E0(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0x14u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,int>::`vftable'; *((_DWORD *)result + 1) = v3[1]; *((_DWORD *)result + 2) = v3[2]; *((_DWORD *)result + 3) = v3[3]; *((_DWORD *)result + 4) = v3[4]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8AA0: using guessed type void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,int>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C4650) -------------------------------------------------------- int __thiscall sub_6C4650(_DWORD *this, size_t a2, size_t a3, int a4, int a5, size_t a6) { int v6; // esi size_t v7; // edx size_t v8; // edi unsigned int v9; // ebx size_t v10; // ecx size_t v11; // ebx void *v12; // eax size_t v13; // ecx unsigned int v14; // edx char *v15; // eax unsigned int v16; // eax char *v17; // ecx char *v18; // eax int v19; // ecx unsigned int v20; // eax char *v21; // ecx char *v22; // eax unsigned int v23; // eax char *v24; // ecx char *v25; // eax unsigned int v26; // eax char *v27; // ecx char *v28; // eax unsigned int v29; // eax char *v30; // ecx unsigned int v31; // eax char *v32; // ecx char *v33; // eax unsigned int v34; // ecx char *v35; // eax char *v36; // ecx char *v37; // eax unsigned int v38; // eax char *v39; // ecx char *v40; // eax unsigned int v41; // eax char *v42; // eax bool v43; // cf int result; // eax char *v45; // [esp-Ch] [ebp-14h] size_t v46; // [esp-8h] [ebp-10h] size_t v47; // [esp+10h] [ebp+8h] char *v48; // [esp+18h] [ebp+10h] size_t v49; // [esp+20h] [ebp+18h] v6 = (int)this; v7 = this[4]; v8 = a2; if ( v7 < a2 || (v9 = *(_DWORD *)(a4 + 16), v9 < a5) ) std::_Xout_of_range("invalid string position"); if ( v7 - a2 < a3 ) a3 = v7 - a2; v10 = v9 - a5; v11 = a6; if ( v10 < a6 ) v11 = v10; if ( -1 - v11 <= v7 - a3 ) std::_Xlength_error("string too long"); v47 = v7 - a2 - a3; v12 = (void *)(v7 - a3 + v11); v13 = *(_DWORD *)(v6 + 16); v49 = (size_t)v12; if ( v13 < (unsigned int)v12 ) { if ( (unsigned int)v12 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v14 = *(_DWORD *)(v6 + 20); if ( v14 >= (unsigned int)v12 ) { if ( !v12 ) { *(_DWORD *)(v6 + 16) = 0; if ( v14 < 0x10 ) v15 = (char *)v6; else v15 = *(char **)v6; *v15 = 0; } } else { sub_4015D0((const void **)v6, v12, v13); } } if ( v6 == a4 ) { if ( v11 > a3 ) { if ( a5 > v8 ) { v31 = *(_DWORD *)(v6 + 20); if ( v8 + a3 <= a5 ) { if ( v31 < 0x10 ) v32 = (char *)v6; else v32 = *(char **)v6; if ( v31 < 0x10 ) v33 = (char *)v6; else v33 = *(char **)v6; memcpy_0(&v33[v8 + v11], &v32[v8 + a3], v47); v34 = *(_DWORD *)(v6 + 20); if ( v34 < 0x10 ) v35 = (char *)v6; else v35 = *(char **)v6; if ( v34 < 0x10 ) memcpy_0((void *)(v8 + v6), &v35[a5 - a3 + v11], v11); else memcpy_0((void *)(v8 + *(_DWORD *)v6), &v35[a5 - a3 + v11], v11); goto LABEL_90; } if ( v31 < 0x10 ) v36 = (char *)v6; else v36 = *(char **)v6; if ( v31 < 0x10 ) v37 = (char *)v6; else v37 = *(char **)v6; memcpy_0(&v37[v8], &v36[a5], a3); v38 = *(_DWORD *)(v6 + 20); if ( v38 < 0x10 ) v39 = (char *)v6; else v39 = *(char **)v6; if ( v38 < 0x10 ) v40 = (char *)v6; else v40 = *(char **)v6; memcpy_0(&v40[v8 + v11], &v39[v8 + a3], v47); v41 = *(_DWORD *)(v6 + 20); if ( v41 < 0x10 ) v48 = (char *)v6; else v48 = *(char **)v6; if ( v41 < 0x10 ) v42 = (char *)v6; else v42 = *(char **)v6; v46 = v11 - a3; v25 = &v42[v8 + a3]; v45 = &v48[a5 + v11]; } else { v26 = *(_DWORD *)(v6 + 20); if ( v26 < 0x10 ) v27 = (char *)v6; else v27 = *(char **)v6; if ( v26 < 0x10 ) v28 = (char *)v6; else v28 = *(char **)v6; memcpy_0(&v28[v8 + v11], &v27[v8 + a3], v47); v29 = *(_DWORD *)(v6 + 20); if ( v29 < 0x10 ) v30 = (char *)v6; else v30 = *(char **)v6; if ( v29 < 0x10 ) { v46 = v11; v45 = &v30[a5]; v25 = (char *)(v8 + v6); } else { v46 = v11; v45 = &v30[a5]; v25 = (char *)(v8 + *(_DWORD *)v6); } } } else { v20 = *(_DWORD *)(v6 + 20); if ( v20 < 0x10 ) v21 = (char *)v6; else v21 = *(char **)v6; if ( v20 < 0x10 ) v22 = (char *)v6; else v22 = *(char **)v6; memcpy_0(&v22[v8], &v21[a5], v11); v23 = *(_DWORD *)(v6 + 20); if ( v23 < 0x10 ) v24 = (char *)v6; else v24 = *(char **)v6; if ( v23 < 0x10 ) { v46 = v47; v45 = &v24[v8 + a3]; v25 = (char *)(v11 + v8 + v6); } else { v46 = v47; v45 = &v24[v8 + a3]; v25 = (char *)(v11 + v8 + *(_DWORD *)v6); } } memcpy_0(v25, v45, v46); goto LABEL_90; } v16 = *(_DWORD *)(v6 + 20); if ( v16 < 0x10 ) v17 = (char *)v6; else v17 = *(char **)v6; if ( v16 < 0x10 ) v18 = (char *)v6; else v18 = *(char **)v6; memcpy_0(&v18[v8 + v11], &v17[v8 + a3], v47); v19 = a4; if ( *(_DWORD *)(a4 + 20) >= 0x10u ) v19 = *(_DWORD *)a4; if ( *(_DWORD *)(v6 + 20) < 0x10u ) memcpy((void *)(v8 + v6), (const void *)(a5 + v19), v11); else memcpy((void *)(v8 + *(_DWORD *)v6), (const void *)(a5 + v19), v11); LABEL_90: v43 = *(_DWORD *)(v6 + 20) < 0x10u; *(_DWORD *)(v6 + 16) = v49; if ( v43 ) { result = v6; *(_BYTE *)(v6 + v49) = 0; } else { *(_BYTE *)(*(_DWORD *)v6 + v49) = 0; result = v6; } return result; } //----- (006C4970) -------------------------------------------------------- int __thiscall sub_6C4970(int this, size_t a2, size_t a3, void *a4, size_t a5) { int v5; // esi unsigned int v6; // edx char *v7; // ecx char *v8; // ecx int result; // eax size_t v10; // edx size_t v11; // ebx size_t v12; // ecx size_t v13; // eax unsigned int v14; // edx char *v15; // edi char *v16; // edx void *v17; // edi unsigned int v18; // edx unsigned int v19; // edx char *v20; // eax char *v21; // eax bool v22; // cf size_t v23; // [esp+8h] [ebp-4h] char *v24; // [esp+18h] [ebp+Ch] v5 = this; if ( !a4 ) goto LABEL_54; v6 = *(_DWORD *)(this + 20); if ( v6 >= 0x10 ) this = *(_DWORD *)this; if ( (unsigned int)a4 < this || (v6 < 0x10 ? (v7 = (char *)v5) : (v7 = *(char **)v5), &v7[*(_DWORD *)(v5 + 16)] <= a4) ) { LABEL_54: v10 = *(_DWORD *)(v5 + 16); if ( v10 < a2 ) std::_Xout_of_range("invalid string position"); v11 = a3; if ( v10 - a2 < a3 ) v11 = v10 - a2; v12 = a5; if ( -1 - a5 <= v10 - v11 ) std::_Xlength_error("string too long"); v13 = v10 - a2 - v11; v23 = v10 - a2 - v11; if ( a5 < v11 ) { v14 = *(_DWORD *)(v5 + 20); if ( v14 < 0x10 ) v15 = (char *)v5; else v15 = *(char **)v5; if ( v14 < 0x10 ) v16 = (char *)v5; else v16 = *(char **)v5; memcpy_0(&v16[a2 + a5], &v15[a2 + v11], v13); v12 = a5; } if ( v12 || v11 ) { v17 = (void *)(v12 + *(_DWORD *)(v5 + 16) - v11); if ( (unsigned int)v17 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v18 = *(_DWORD *)(v5 + 20); if ( v18 >= (unsigned int)v17 ) { if ( !v17 ) { *(_DWORD *)(v5 + 16) = 0; if ( v18 < 0x10 ) { result = v5; *(_BYTE *)v5 = 0; } else { **(_BYTE **)v5 = 0; result = v5; } return result; } goto LABEL_33; } sub_4015D0((const void **)v5, v17, *(_DWORD *)(v5 + 16)); v12 = a5; if ( v17 ) { LABEL_33: if ( v11 < v12 ) { v19 = *(_DWORD *)(v5 + 20); if ( v19 < 0x10 ) v20 = (char *)v5; else v20 = *(char **)v5; if ( v19 < 0x10 ) v24 = (char *)v5; else v24 = *(char **)v5; memcpy_0(&v24[a2 + v12], &v20[a2 + v11], v23); v12 = a5; } if ( *(_DWORD *)(v5 + 20) < 0x10u ) v21 = (char *)v5; else v21 = *(char **)v5; memcpy(&v21[a2], a4, v12); v22 = *(_DWORD *)(v5 + 20) < 0x10u; *(_DWORD *)(v5 + 16) = v17; if ( !v22 ) { *((_BYTE *)v17 + *(_DWORD *)v5) = 0; return v5; } *((_BYTE *)v17 + v5) = 0; return v5; } } return v5; } if ( v6 < 0x10 ) v8 = (char *)v5; else v8 = *(char **)v5; return sub_6C4650((_DWORD *)v5, a2, a3, v5, (_BYTE *)a4 - v8, a5); } //----- (006C4B40) -------------------------------------------------------- _DWORD *__thiscall sub_6C4B40(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi _DWORD *v6; // eax int v7; // edx int v8; // ecx void **v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] int v12; // [esp+18h] [ebp-8h] char *v13; // [esp+1Ch] [ebp-4h] v5 = this; v11 = a4; v12 = a5; v6 = operator new(0x14u); if ( !v6 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v7 = v11; v8 = v12; *v6 = &std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,char const *>::`vftable'; v6[1] = a2; v6[2] = a3; v6[3] = v7; v6[4] = v8; v5[4] = v6; return v5; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8A84: using guessed type void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,char const *>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C4BC0) -------------------------------------------------------- _DWORD *__thiscall sub_6C4BC0(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi _DWORD *v6; // eax int v7; // edx int v8; // ecx void **v10; // [esp+10h] [ebp-10h] int v11; // [esp+14h] [ebp-Ch] int v12; // [esp+18h] [ebp-8h] char *v13; // [esp+1Ch] [ebp-4h] v5 = this; v11 = a4; v12 = a5; v6 = operator new(0x14u); if ( !v6 ) { v13 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&v13); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v7 = v11; v8 = v12; *v6 = &std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,int>::`vftable'; v6[1] = a2; v6[2] = a3; v6[3] = v7; v6[4] = v8; v5[4] = v6; return v5; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8AA0: using guessed type void *std::tr1::_Impl_no_alloc1,GameFrameWork *,std::tr1::_Ph<1>,unsigned int>>,0>,void,int>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C4C40) -------------------------------------------------------- int __thiscall sub_6C4C40(int this, int a2) { return (*(int (__thiscall **)(_DWORD, int, _DWORD))(this + 4))(*(_DWORD *)(this + 8), a2, *(_DWORD *)(this + 16)); } //----- (006C4C60) -------------------------------------------------------- int __thiscall sub_6C4C60(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi size_t v5; // ecx size_t v6; // esi int v8; // [esp+Ch] [ebp-4h] v8 = (int)this; if ( this[5] < 0x10u ) v4 = this; else v4 = (_DWORD *)*this; if ( a3 ) v5 = a3 - a2; else v5 = 0; if ( a2 ) v6 = a2 - (_DWORD)v4; else v6 = 0; return sub_6C4970(v8, v6, v5, a4, strlen((const char *)a4)); } //----- (006C4CC0) -------------------------------------------------------- int __thiscall sub_6C4CC0(_DWORD *this) { int result; // eax _DWORD *v2; // ecx signed int v3; // esi int v4; // edx int v5; // edx int v6; // edx result = 0; v2 = this + 2; v3 = 13; do { v4 = *(v2 - 2); if ( v4 ) result += v4; v5 = *(v2 - 1); if ( v5 ) result += v5; if ( *v2 ) result += *v2; v6 = v2[1]; if ( v6 ) result += v6; v2 += 4; --v3; } while ( v3 ); return result; } //----- (006C4D00) -------------------------------------------------------- char sub_6C4D00() { _DWORD **v0; // eax v0 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4E2AC0(v0); return (char)v0; } //----- (006C4D20) -------------------------------------------------------- char __thiscall sub_6C4D20(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; if ( (*(unsigned __int8 (**)(void))(*this[20] + 260))() ) result = sub_8F81A0(&unk_BA6B10, v1[20]); else result = sub_8F82A0(&unk_BA6B10, v1[20]); return result; } //----- (006C4D60) -------------------------------------------------------- char __thiscall sub_6C4D60(_DWORD **this) { _DWORD **v1; // esi char result; // al v1 = this; if ( (*(unsigned __int8 (**)(void))(*this[22] + 260))() ) result = sub_8F81A0(&unk_BA6B10, v1[22]); else result = sub_8F82A0(&unk_BA6B10, v1[22]); return result; } //----- (006C4DA0) -------------------------------------------------------- char __stdcall sub_6C4DA0(_DWORD *a1) { return sub_8F86A0(&unk_BA6B10, a1); } //----- (006C4DB0) -------------------------------------------------------- signed int __thiscall sub_6C4DB0(int *this, int a2) { int *v2; // esi float *v3; // ecx v2 = this; if ( *(_WORD *)a2 == 7400 ) { this[33] = 3; sub_753C30((unsigned __int8 *)(a2 + 2), this + 1304); v2[1293] = 100 * *(unsigned __int8 *)(a2 + 2); v2[1294] = 100 * *(unsigned __int8 *)(a2 + 3); v3 = (float *)v2[17]; v2[1295] = 100 * *(unsigned __int8 *)(a2 + 4); sub_72C530(v3, (float *)v2 + 1293); } return 1; } //----- (006C4E30) -------------------------------------------------------- signed int __thiscall sub_6C4E30(_DWORD *this, _WORD *a2) { signed int result; // eax result = 1; if ( *a2 == 7392 ) this[33] = 2; return result; } //----- (006C4E60) -------------------------------------------------------- signed int __stdcall sub_6C4E60(int a1) { sub_6F3D10(&off_AB7F2C, 43, 22, 0, 0); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C4EA0) -------------------------------------------------------- int __stdcall sub_6C4EA0(void *a1) { sub_6F3D10(&off_AB7F2C, 43, 11, a1, 2u); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C4EC0) -------------------------------------------------------- int __stdcall sub_6C4EC0(void *a1) { sub_6F3D10(&off_AB7F2C, 43, 15, a1, 2u); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C4EE0) -------------------------------------------------------- char __thiscall sub_6C4EE0(_BYTE *this) { return this[5260]; } //----- (006C4F30) -------------------------------------------------------- bool __thiscall sub_6C4F30(_DWORD *this) { int v1; // eax v1 = this[1322]; return v1 == 2 || v1 == 4; } //----- (006C4F50) -------------------------------------------------------- void sub_6C4F50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9DE5C; if ( dword_B9DE5C ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9DE5C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9DE5C = 0; } } // B9DE5C: using guessed type int dword_B9DE5C; //----- (006C4F90) -------------------------------------------------------- signed int __thiscall sub_6C4F90(_BYTE *this) { _DWORD *v1; // eax signed int result; // eax if ( this[73] ) { if ( !sub_6C4EE0(this) ) sub_6F3D10(&off_AB7F2C, 43, 1, 0, 0); result = 1; } else { v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_492060(v1, (int)"Initialize Failed. Join not enable"); result = 0; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C4FE0) -------------------------------------------------------- signed int __thiscall sub_6C4FE0(int this, int a2) { int v2; // esi int v3; // eax float *v4; // ebx int v5; // edi float v6; // ST10_4 int v7; // eax float v8; // ST14_4 int v9; // eax int v10; // edi float *v11; // ebx float v12; // ST10_4 float v13; // ST14_4 int v14; // esi int *v15; // edi int (*v16)(void); // edx int v17; // esi int v18; // eax signed int v20; // [esp+18h] [ebp+8h] v2 = this; if ( *(_BYTE *)a2 ) { *(_WORD *)(this + 136) = *(unsigned __int16 *)(a2 + 1) / 10; } else { *(_BYTE *)(this + 5225) = 0; *(_BYTE *)(this + 5226) = 0; *(float *)(this + 5220) = 0.0; v3 = *(_DWORD *)(this + 68); *(float *)(this + 5232) = 0.0; v4 = *(float **)(v3 + 344); v5 = *(_DWORD *)(v3 + 348); v6 = (double)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 164))(*(_DWORD *)(v3 + 348)) - 8.0; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 168))(v5) - 10; v4[22] = v6; v8 = (double)v7; v4[23] = v8; v4[24] = 1.0; v9 = *(_DWORD *)(v2 + 68); v10 = *(_DWORD *)(v9 + 348); v11 = *(float **)(v9 + 352); v12 = (double)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 164))(*(_DWORD *)(v9 + 348)); v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 168))(v10); v11[22] = v12; v13 = (double)v20; v11[23] = v13; v11[24] = 1.0; v14 = *(_DWORD *)(v2 + 68); v15 = *(int **)(v14 + 352); v16 = *(int (**)(void))(**(_DWORD **)(v14 + 348) + 144); v17 = *v15; v18 = v16(); (*(void (__thiscall **)(int *, int))(v17 + 468))(v15, v18); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); } return 1; } // AB6534: using guessed type int dword_AB6534; //----- (006C5130) -------------------------------------------------------- void __thiscall sub_6C5130(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // edi int v5; // esi int v6; // eax int v7; // esi int v8; // esi v4 = this; if ( a2 != 27 || !a3 ) return; if ( *a3 ) { if ( *a3 != 1 ) return; v8 = this[1300]; if ( !v8 ) return; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); goto LABEL_23; } if ( !this[1301] ) { v6 = this[1320]; if ( v6 == 2 || v6 == 4 ) sub_6F3D10(&off_AB7F2C, 47, 104, 0, 0); else sub_6F3D10(&off_AB7F2C, 43, 5, 0, 0); sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v7 = v4[1300]; if ( !v7 ) return; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) { (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[1300] = 0; return; } LABEL_23: v4[1300] = 0; return; } v5 = this[1301]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v4[1301] = 0; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C5250) -------------------------------------------------------- signed int __thiscall sub_6C5250(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi signed int result; // eax _DWORD *v4; // esi const char *v5; // eax v2 = this; if ( *a2 == 7376 ) { if ( this[33] == 1 ) { (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); } v2[33] = 2; result = 1; } else { if ( *a2 == 7384 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = sub_41A850((unsigned __int16)*a2); sub_492060(v4, (int)v5); } result = 1; } return result; } // AB6534: using guessed type int dword_AB6534; //----- (006C52E0) -------------------------------------------------------- signed int __stdcall sub_6C52E0(int a1) { int v1; // eax v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 784)); return 1; } //----- (006C5310) -------------------------------------------------------- int __thiscall sub_6C5310(int this, float a2) { int v2; // esi int v3; // eax int result; // eax int v5; // ecx v2 = this; v3 = *(_DWORD *)(this + 5288); if ( v3 != 2 && v3 != 4 ) { result = (*(int (**)(void))(**(_DWORD **)(this + 68) + 260))(); if ( (_BYTE)result ) return result; v5 = *(_DWORD *)(v2 + 68); } else { result = (*(int (**)(void))(**(_DWORD **)(this + 64) + 260))(); if ( (_BYTE)result ) return result; v5 = *(_DWORD *)(v2 + 64); } return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 324))(LODWORD(a2)); } //----- (006C5370) -------------------------------------------------------- char __thiscall sub_6C5370(char *this) { char *v1; // esi unsigned int v2; // eax unsigned int v3; // ebx signed int v4; // edi unsigned int v5; // edi signed int v6; // edi unsigned int v8; // [esp+14h] [ebp-4h] v1 = this; *((_DWORD *)this + 33) = 1; *((_DWORD *)this + 32) = 2; v2 = sub_6CA5C0(0); v3 = v2; if ( v2 ) { sub_7546B0(v1 + 156, *(unsigned __int8 *)(v2 + 30)); v4 = 0; do { sub_754590((_WORD *)v1 + 2454, v4, *(_WORD *)(v3 + 2 * v4)); ++v4; } while ( v4 < 15 ); LOBYTE(v2) = sub_754570(v1 + 4908); v1[73] = v2; if ( (_BYTE)v2 ) { *((_DWORD *)v1 + 38) = 0; v5 = 0; v2 = sub_6CA5A0(); if ( !v2 ) goto LABEL_20; while ( !sub_7474E0((_DWORD *)(dword_ACD9A0 + 4), v5) ) { ++v5; v2 = sub_6CA5A0(); if ( v5 >= v2 ) { *((_DWORD *)v1 + 1391) = 0; return v2; } } v2 = sub_7474E0((_DWORD *)(dword_ACD9A0 + 4), v5); v8 = v2; if ( v2 ) { v6 = 0; while ( 1 ) { sub_754590((_WORD *)v1 + 2654, v6, *(_WORD *)(v2 + 2 * v6)); if ( ++v6 >= 15 ) break; v2 = v8; } LOBYTE(v2) = sub_754570(v1 + 5308); *((_DWORD *)v1 + 1391) = (unsigned __int8)v2; if ( (_BYTE)v2 ) { *((_DWORD *)v1 + 1316) = 0; *((_DWORD *)v1 + 1317) = 0; *((_DWORD *)v1 + 1318) = 0; *((_DWORD *)v1 + 1319) = 0; *((_DWORD *)v1 + 1322) = 0; *((float *)v1 + 1323) = 0.0; *((float *)v1 + 1324) = 0.0; LOBYTE(v2) = -1; *((float *)v1 + 1325) = 0.0; *((_WORD *)v1 + 2652) = -1; v1[5306] = 0; *((_WORD *)v1 + 2784) = 260; } } else { LABEL_20: *((_DWORD *)v1 + 1391) = 0; } } } else { v1[73] = 0; } return v2; } // ACD9A0: using guessed type int dword_ACD9A0; //----- (006C54F0) -------------------------------------------------------- signed int __stdcall sub_6C54F0(_BYTE *a1) { _DWORD *v1; // ebx int v2; // edi unsigned int v3; // esi unsigned __int8 *v4; // eax char *v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] if ( !a1 ) return 1; v7 = 0; if ( !*a1 ) return 1; v1 = a1 + 3; while ( 1 ) { v6 = sub_664AB0(dword_AD8C90, *((_WORD *)v1 - 1)); if ( !v6 ) return 0; v2 = *v1; v3 = 0; if ( sub_452120() ) { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v3) + 105) != v2 ) { if ( ++v3 >= sub_452120() ) goto LABEL_11; } v4 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v3); if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 456))(*v4); } LABEL_11: v1 = (_DWORD *)((char *)v1 + 6); if ( ++v7 >= (unsigned __int8)*a1 ) return 1; } } // ACB6C4: using guessed type int dword_ACB6C4; //----- (006C55B0) -------------------------------------------------------- int __thiscall sub_6C55B0(int this, int a2, char a3) { int v3; // ebx _DWORD *v4; // esi _DWORD *v5; // edx signed int v6; // edi int **v7; // eax int *j; // eax int i; // eax int result; // eax double v11; // st7 signed int v12; // eax double v13; // st7 signed int v14; // eax signed int v15; // [esp+Ch] [ebp-4h] float v16; // [esp+18h] [ebp+8h] float v17; // [esp+18h] [ebp+8h] v3 = a2; v4 = *(_DWORD **)(this + 100); v5 = (_DWORD *)*v4; v6 = 0; v15 = 0; if ( (_DWORD *)*v4 != v4 ) { do { if ( v5[a2 + 4] ) ++v6; if ( !*((_BYTE *)v5 + 233) ) { v7 = (int **)v5[2]; if ( *((_BYTE *)v7 + 233) ) { for ( i = v5[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v5 != *(_DWORD **)(i + 8) ) break; v5 = (_DWORD *)i; } v5 = (_DWORD *)i; } else { v5 = (_DWORD *)v5[2]; for ( j = *v7; !*((_BYTE *)j + 233); j = (int *)*j ) v5 = j; } } } while ( v5 != v4 ); v15 = v6; } result = *(_DWORD *)(this + 5288); if ( result == 1 ) { if ( v6 ) { v16 = (double)v15 / (double)*(unsigned __int16 *)(this + 5168); v11 = v16; if ( v16 >= 0.2 ) { if ( v11 >= 0.4 ) { if ( v11 >= 0.6 ) { v12 = 3; if ( v11 >= 0.8 ) v12 = 4; } else { v12 = 2; } } else { v12 = 1; } } else { v12 = 0; } result = sub_72A1D0(*(_DWORD ***)(this + 68), v3, 1, v12, a3); } else { result = sub_72A1D0(*(_DWORD ***)(this + 68), a2, 0, 0, 0); } } else if ( result == 2 ) { if ( v6 ) { v17 = (double)v15 / (double)*(unsigned __int16 *)(this + 5168); v13 = v17; if ( v17 >= 0.2 ) { if ( v13 >= 0.4 ) { if ( v13 >= 0.6 ) { v14 = 3; if ( v13 >= 0.8 ) v14 = 4; } else { v14 = 2; } } else { v14 = 1; } } else { v14 = 0; } result = sub_72B280(*(_DWORD ***)(this + 64), v3, 1, v14, a3); } else { result = sub_72B280(*(_DWORD ***)(this + 64), a2, 0, 0, 0); } } return result; } //----- (006C5790) -------------------------------------------------------- int __thiscall sub_6C5790(_DWORD *this, int a2) { int *v2; // esi int *v3; // edx int result; // eax int **v5; // ecx int *j; // ecx int *i; // ecx v2 = (int *)this[25]; v3 = (int *)*v2; result = 0; while ( v3 != v2 ) { result += v3[a2 + 4]; if ( !*((_BYTE *)v3 + 233) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 233) ) { for ( i = (int *)v3[1]; !*((_BYTE *)i + 233); i = (int *)i[1] ) { if ( v3 != (int *)i[2] ) break; v3 = i; } v3 = i; } else { v3 = (int *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 233); j = (int *)*j ) v3 = j; } } } return result; } //----- (006C5810) -------------------------------------------------------- signed int __thiscall sub_6C5810(_DWORD *this, _WORD *a2) { _WORD *v2; // ebx _DWORD *v3; // esi int **v4; // eax int v5; // edi int **v7; // eax int *v8; // ebx int v9; // ecx int v10; // eax int v11; // ST0C_4 _DWORD *v12; // ecx int v13; // ST08_4 int v14; // eax int v15; // esi const char *v16; // eax int *v17; // eax int v18; // ST04_4 int v19; // ST08_4 int v20; // ST0C_4 int v21; // ST10_4 const char *v22; // eax char v23; // [esp+Ch] [ebp-1Ch] char v24; // [esp+1Ch] [ebp-Ch] char v25; // [esp+20h] [ebp-8h] _DWORD *v26; // [esp+24h] [ebp-4h] v2 = a2; v3 = this; v26 = this + 28; v4 = sub_6CAAC0(this + 28, (int **)&v25, a2 + 1); v5 = (int)*v4; if ( *v4 == (int *)v3[29] ) return 0; if ( *v2 == 7344 ) { a2 = (_WORD *)*((unsigned __int16 *)dword_AD8EBC + 274); v7 = sub_6CA9F0(v3 + 24, (int **)&v24, &a2); v8 = *v7; if ( *v7 != (int *)v3[25] ) { v9 = *(_DWORD *)(v5 + 20); if ( v9 ) v8[*(_DWORD *)(v5 + 16) + 4] += v9; } v10 = *(_DWORD *)(v5 + 16); if ( v8[v10 + 4] ) sub_72C630((_DWORD ***)v3[17], v10, 1, 0); v11 = v3[38]; v12 = (_DWORD *)v3[17]; v13 = *(_DWORD *)(v5 + 16); v3[33] = 1; sub_72BFD0(v12, v13, v11, 0); v14 = sub_6C4CC0(v8 + 4); sub_729A30((_DWORD *)v3[17], v14); } else if ( *v2 == 7354 ) { v15 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v16 = sub_41A850((unsigned __int16)*v2); sub_492060((_DWORD *)v15, (int)v16); v17 = (int *)sub_4B1B10((float *)&v23, 0x32u); v18 = *v17; v19 = v17[1]; v20 = v17[2]; v21 = v17[3]; v22 = sub_41A850((unsigned __int16)*v2); sub_492030(v15, v5, v15, (int)v22, v18, v19, v20, v21); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v15 + 1040)); } sub_6CA6C0(v26, (int *)&a2, v5); return 1; } //----- (006C5970) -------------------------------------------------------- signed int __thiscall sub_6C5970(_DWORD *this, _WORD *a2) { _WORD *v2; // esi int v3; // edi int *v4; // eax int v5; // ecx v2 = a2; v3 = (int)this; if ( *a2 == *((_WORD *)dword_AD8EBC + 274) ) return 1; v4 = *sub_6CA9F0(this + 24, (int **)&a2, a2); if ( v4 != *(int **)(v3 + 100) ) { v5 = *(_DWORD *)(v2 + 3); if ( v5 ) v4[*(_DWORD *)(v2 + 1) + 4] += v5; *(_DWORD *)(v3 + 132) = 1; sub_6C55B0(v3, *(_DWORD *)(v2 + 1), 0); return 1; } return 0; } //----- (006C59E0) -------------------------------------------------------- signed int __thiscall sub_6C59E0(_DWORD *this, unsigned __int16 *a2) { unsigned __int16 *v2; // edi int v3; // esi int *v4; // ebx unsigned __int16 v6; // ax int **v7; // eax int *v8; // edi int v9; // eax int v10; // eax unsigned __int16 *v11; // eax unsigned __int16 *v12; // ecx char v13; // bl unsigned __int16 *v14; // edi signed int v15; // eax _DWORD *v16; // ecx int v17; // edi const CHAR *v18; // eax int *v19; // eax int v20; // ST04_4 int v21; // ST08_4 int v22; // ST0C_4 int v23; // ST10_4 const CHAR *v24; // eax __int16 v25; // dx _DWORD **v26; // ecx int v27; // esi int *v28; // eax int v29; // ST04_4 int v30; // ST08_4 int v31; // ST0C_4 int v32; // ST10_4 const char *v33; // eax _DWORD *v34; // esi char *v35; // eax char v36; // [esp+Ch] [ebp-20h] char v37; // [esp+1Ch] [ebp-10h] _DWORD *v38; // [esp+20h] [ebp-Ch] int *v39; // [esp+24h] [ebp-8h] int v40; // [esp+28h] [ebp-4h] v2 = a2; v3 = (int)this; v38 = this + 28; v4 = *sub_6CAAC0(this + 28, (int **)&v40, a2 + 1); v39 = v4; if ( v4 == *(int **)(v3 + 116) ) return 0; v6 = *v2; if ( *v2 == 7360 ) { a2 = (unsigned __int16 *)*((unsigned __int16 *)dword_AD8EBC + 274); v7 = sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v37, &a2); v8 = *v7; if ( *v7 != *(int **)(v3 + 100) ) v8[v4[4] + 4] -= v4[5]; v9 = v4[4]; if ( !v8[v9 + 4] ) sub_72C630(*(_DWORD ****)(v3 + 68), v9, 0, 0); v40 = v4[4]; v10 = sub_6C4CC0(v8 + 4); sub_729A30(*(_DWORD **)(v3 + 68), v10); v11 = *(unsigned __int16 **)(v3 + 100); v12 = *(unsigned __int16 **)v11; v13 = 0; a2 = v12; if ( v12 == v11 ) goto LABEL_29; v14 = v11; do { v15 = 0; v16 = v12 + 8; while ( !*v16 ) { ++v15; ++v16; if ( v15 >= 52 ) goto LABEL_15; } v13 = 1; LABEL_15: sub_6CA3E0(&a2); v12 = a2; } while ( a2 != v14 ); if ( !v13 ) { LABEL_29: v17 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v18 = sub_40A910(-1968853831); sub_492060((_DWORD *)v17, (int)v18); v19 = (int *)sub_4B1B10((float *)&v36, 0x32u); v20 = *v19; v21 = v19[1]; v22 = v19[2]; v23 = v19[3]; v24 = sub_40A910(-1968853831); sub_492030(v17, v17, v3, (int)v24, v20, v21, v22, v23); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v17 + 1040)); v25 = *(_WORD *)(v3 + 104); v26 = *(_DWORD ***)(v3 + 68); *(_DWORD *)(v3 + 132) = 0; *(_WORD *)(v3 + 5168) = v25; sub_72A250(v26, 1, 0, 0); } sub_6C55B0(v3, v40, 0); v4 = v39; } else if ( v6 == 7371 ) { v27 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v28 = (int *)sub_4B1B10((float *)&v36, 0x32u); v29 = *v28; v30 = v28[1]; v31 = v28[2]; v32 = v28[3]; v33 = sub_41A850(*v2); sub_492030(v27, (int)v2, v27, (int)v33, v29, v30, v31, v32); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v27 + 1040)); } else if ( v6 == 7368 || v6 == 7372 || v6 == 7369 ) { v34 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v34 ) { v35 = sub_7549E0("%d", *v2); sub_492060(v34, (int)v35); } } sub_6CA6C0(v38, (int *)&a2, (int)v4); return 1; } //----- (006C5C50) -------------------------------------------------------- signed int __thiscall sub_6C5C50(_DWORD *this, _WORD *a2) { _WORD *v2; // ebx int v3; // esi int *v4; // eax int *v5; // eax int v6; // ecx int *v7; // edi signed int v8; // eax _DWORD *v9; // ecx int v10; // edi const CHAR *v11; // eax int *v12; // eax int v13; // ST04_4 int v14; // ST08_4 int v15; // ST0C_4 int v16; // ST10_4 const CHAR *v17; // eax __int16 v18; // dx _DWORD **v19; // ecx char v21; // [esp+Ch] [ebp-14h] int *v22; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = (int)this; if ( *a2 == *((_WORD *)dword_AD8EBC + 274) ) return 1; v4 = *sub_6CA9F0(this + 24, (int **)&a2, a2); if ( v4 != *(int **)(v3 + 100) ) { v4[*(_DWORD *)(v2 + 1) + 4] -= *(_DWORD *)(v2 + 3); v5 = *(int **)(v3 + 100); v6 = *v5; HIBYTE(a2) = 0; v22 = (int *)v6; if ( (int *)v6 == v5 ) goto LABEL_18; v7 = v5; do { v8 = 0; v9 = (_DWORD *)(v6 + 16); while ( !*v9 ) { ++v8; ++v9; if ( v8 >= 52 ) goto LABEL_10; } HIBYTE(a2) = 1; LABEL_10: sub_6CA3E0(&v22); v6 = (int)v22; } while ( v22 != v7 ); if ( !HIBYTE(a2) ) { LABEL_18: v10 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v11 = sub_40A910(-1968853831); sub_492060((_DWORD *)v10, (int)v11); v12 = (int *)sub_4B1B10((float *)&v21, 0x32u); v13 = *v12; v14 = v12[1]; v15 = v12[2]; v16 = v12[3]; v17 = sub_40A910(-1968853831); sub_492030(v10, v10, v3, (int)v17, v13, v14, v15, v16); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v10 + 1040)); v18 = *(_WORD *)(v3 + 104); v19 = *(_DWORD ***)(v3 + 68); *(_DWORD *)(v3 + 132) = 0; *(_WORD *)(v3 + 5168) = v18; sub_72A250(v19, 1, 0, 0); } sub_6C55B0(v3, *(_DWORD *)(v2 + 1), 0); return 1; } return 0; } //----- (006C5DA0) -------------------------------------------------------- signed int __usercall sub_6C5DA0@(int a1@, int a2@) { int v2; // esi int *v3; // edx int v4; // ebx signed int v5; // eax _DWORD *v6; // ecx char *v8; // eax volatile LONG *v9; // eax int v10; // esi const CHAR *v11; // eax int *v12; // eax int v13; // ST04_4 int v14; // ST08_4 int v15; // ST0C_4 int v16; // ST10_4 const CHAR *v17; // eax char v18; // [esp+Ch] [ebp-18h] char v19; // [esp+1Ch] [ebp-8h] int v20; // [esp+20h] [ebp-4h] v2 = a1; v20 = *((unsigned __int16 *)dword_AD8EBC + 274); v3 = *sub_6CA9F0((_DWORD *)(a1 + 96), (int **)&v19, &v20); v4 = *(_DWORD *)(v2 + 132); v5 = 0; v6 = v3 + 4; while ( !*v6 ) { ++v5; ++v6; if ( v5 >= 52 ) goto LABEL_4; } if ( !*(_DWORD *)(v2 + 5208) && v4 == 1 && !*(_BYTE *)(v2 + 5236) ) { v8 = (char *)sub_40A910(-856420867); v9 = sub_462CA0(2, v8); sub_56FF80((_DWORD *)(v2 + 5208), (int)v9); (**(void (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 5208) + 232))(*(_DWORD *)(v2 + 5208) + 232, v2 + 8); return 1; } LABEL_4: if ( v4 == 2 || v4 == 3 ) { *((_BYTE *)v3 + 228) = 1; v10 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v11 = sub_40A910(-539967539); sub_492060((_DWORD *)v10, (int)v11); v12 = (int *)sub_4B1B10((float *)&v18, 0x32u); v13 = *v12; v14 = v12[1]; v15 = v12[2]; v16 = v12[3]; v17 = sub_40A910(-539967539); sub_492030(v10, a2, v10, (int)v17, v13, v14, v15, v16); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v10 + 1040)); } else if ( !*(_DWORD *)(v2 + 5208) ) { sub_6F3D10(&off_AB7F2C, 43, 5, 0, 0); return 1; } return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C5F10) -------------------------------------------------------- void __userpurge sub_6C5F10(_BYTE *a1@, int a2@, float a3) { int v3; // esi char v4; // dl char v5; // dl double v6; // st7 int v7; // eax int v8; // ecx double v9; // st7 float v10; // ST14_4 int v11; // eax const CHAR *v12; // ST10_4 const CHAR *v13; // ST10_4 _DWORD *v14; // ecx int v15; // ecx int v16; // eax int v17; // eax int v18; // edi double v19; // st7 bool v20; // c0 bool v21; // c3 double v22; // st7 int v23; // eax int *v24; // ebx int v25; // edx int v26; // eax int v27; // edx float v28; // ST14_4 double v29; // st7 void (__cdecl *v30)(_DWORD); // edx int v31; // eax int v32; // edi float *v33; // ebx float v34; // ST10_4 bool v35; // zf double v36; // st7 double v37; // st7 double v38; // st6 int v39; // eax int *v40; // edi int v41; // ebx float v42; // eax int v43; // edx double v44; // st7 int (__thiscall *v45)(int *); // eax float v46; // eax double v47; // st7 signed int v48; // edi _DWORD *v49; // ebx float v50; // eax int v51; // ebx signed int v52; // edi signed int v53; // eax int v54; // ecx signed int v55; // edi _DWORD *v56; // ebx signed int v57; // edi signed int v58; // eax double v59; // st7 int v60; // ecx double v61; // st7 float v62; // ST14_4 int v63; // ecx double v64; // st7 float v65; // ST14_4 int v66; // eax const CHAR *v67; // ST10_4 const CHAR *v68; // ST10_4 _DWORD *v69; // ecx int v70; // ecx int v71; // eax int v72; // eax int v73; // eax double v74; // st7 int v75; // edi double v76; // st7 double v77; // st7 bool v78; // c0 bool v79; // c3 double v80; // st7 int v81; // eax int *v82; // ebx float v83; // edx int v84; // eax float v85; // ST14_4 double v86; // st7 void (__cdecl *v87)(_DWORD); // edx int v88; // eax int v89; // edi float *v90; // ebx float v91; // ST10_4 double v92; // st7 double v93; // st7 double v94; // st6 int v95; // eax int *v96; // edi float *v97; // ebx float v98; // eax int v99; // edx double v100; // st7 int (__thiscall *v101)(int *); // eax float v102; // ST10_4 float v103; // ST0C_4 double v104; // st7 signed int v105; // edi _DWORD *v106; // ebx float v107; // eax int v108; // ebx signed int v109; // edi signed int v110; // eax int v111; // ecx signed int v112; // edi _DWORD *v113; // ebx signed int v114; // edi signed int v115; // eax double v116; // st7 int v117; // ecx float v118; // [esp+24h] [ebp-1E0h] __int64 v119; // [esp+28h] [ebp-1DCh] float v120; // [esp+30h] [ebp-1D4h] float v121; // [esp+34h] [ebp-1D0h] char v122; // [esp+38h] [ebp-1CCh] unsigned __int8 v123; // [esp+9Ch] [ebp-168h] char v124[4]; // [esp+A0h] [ebp-164h] int v125[23]; // [esp+A4h] [ebp-160h] CHAR String; // [esp+100h] [ebp-104h] v3 = (int)a1; if ( !sub_6C4EE0(a1) ) { if ( *(_DWORD *)(v3 + 5288) != 3 ) goto LABEL_8; (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v118); v118 = v118 - *(float *)(v3 + 5292); *(float *)&v119 = *(float *)&v119 - *(float *)(v3 + 5296); *((float *)&v119 + 1) = 0.0 - *(float *)(v3 + 5300); v120 = *((float *)&v119 + 1) * *((float *)&v119 + 1) + v118 * v118 + *(float *)&v119 * *(float *)&v119; v120 = sqrt(v120); if ( v120 >= 5.0 || *(_WORD *)(v3 + 5304) == -1 ) { if ( v120 <= 200.0 ) goto LABEL_8; } else { v4 = *(_BYTE *)(v3 + 5306); LOWORD(v120) = *(_WORD *)(v3 + 5304); BYTE2(v120) = v4; sub_727500(v3, &v120); } *(_DWORD *)(v3 + 5288) = 0; LABEL_8: if ( *(_DWORD *)(v3 + 5288) == 5 ) { (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 200))(&v118); v118 = v118 - *(float *)(v3 + 5292); *(float *)&v119 = *(float *)&v119 - *(float *)(v3 + 5296); *((float *)&v119 + 1) = 0.0 - *(float *)(v3 + 5300); v120 = v118 * v118 + *(float *)&v119 * *(float *)&v119 + *((float *)&v119 + 1) * *((float *)&v119 + 1); v120 = sqrt(v120); if ( v120 >= 30.0 || *(_WORD *)(v3 + 5304) == -1 ) { if ( v120 > 300.0 ) *(_DWORD *)(v3 + 5288) = 0; } else { v5 = *(_BYTE *)(v3 + 5306); LOWORD(v120) = *(_WORD *)(v3 + 5304); BYTE2(v120) = v5; sub_73C0E0(&v120); *(_DWORD *)(v3 + 5288) = 0; } } return; } if ( *(_BYTE *)(v3 + 5188) ) { v121 = *(float *)(v3 + 5196); v120 = a3 - *(float *)(v3 + 5192); v6 = v120; *(float *)(v3 + 5196) = v120; *(float *)(v3 + 5200) = v6 - v121; } else { *(float *)(v3 + 5192) = a3; *(float *)(v3 + 5196) = 0.0; *(float *)(v3 + 5200) = 0.0; *(_BYTE *)(v3 + 5188) = 1; } v7 = *(_DWORD *)(v3 + 5288); if ( v7 == 2 ) { v63 = *(_DWORD *)(v3 + 64); if ( v63 ) { if ( *(float *)(v3 + 5240) < 1.0 ) { v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5240); v64 = v120; *(float *)(v3 + 5240) = v120; v65 = v64; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v63 + 276))(LODWORD(v65)); if ( *(float *)(v3 + 5240) >= 1.0 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 64) + 240))(1); memset(&String, 0, 0x100u); v66 = *(_DWORD *)(v3 + 132); if ( v66 ) { if ( v66 == 3 || v66 != 2 ) { v68 = sub_40A910(573767082); sprintf(&String, "%s", v68); } } else { v67 = sub_40A910(914247794); sprintf(&String, "%s", v67); } if ( *(_DWORD *)(v3 + 132) == 1 ) { if ( !*(_BYTE *)(v3 + 5261) ) { v69 = *(_DWORD **)(v3 + 64); *(_BYTE *)(v3 + 5261) = 1; sub_72B460(v69); } } else { sub_6177C0(*(_DWORD **)(v3 + 92), 8669, &String, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 92)); } } } } v70 = *(_DWORD *)(v3 + 64); if ( !v70 || *(_BYTE *)(v3 + 72) ) goto LABEL_164; if ( !*(_DWORD *)(v3 + 132) ) sub_72F080(v70, 1, 0.0, 0); if ( *(_DWORD *)(v3 + 128) ) { v95 = *(_DWORD *)(v3 + 64); v96 = *(int **)(v95 + 348); v97 = *(float **)(v95 + 344); v98 = COERCE_FLOAT((*(int (__thiscall **)(int *))(*v96 + 168))(v96)); v99 = *v96; v121 = v98; v100 = (double)SLODWORD(v98); v101 = *(int (__thiscall **)(int *))(v99 + 164); v121 = v100 - 10.0; v102 = v121; v121 = COERCE_FLOAT(v101(v96)); v103 = (double)SLODWORD(v121); sub_417B60(v97, v103, v102, 1.0); *(float *)(v3 + 5220) = 0.0; } else { if ( !*(_BYTE *)(v3 + 5224) ) { v71 = *(_DWORD *)(v3 + 132); if ( (v71 == 1 || !v71) && *(float *)(v3 + 5196) > 2.0 ) { *(_BYTE *)(v3 + 5224) = 1; sub_6BA650(&dword_AB6520, 33); } } v72 = *(_DWORD *)(v3 + 132); if ( v72 == 1 ) { v73 = (*(int (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v3 + 64) + 348) + 144))(a2); v74 = *(float *)(v3 + 5200) + *(float *)(v3 + 5232); v75 = v73 - 25; HIDWORD(v119) = v73 - 25; *(float *)(v3 + 5232) = v74; v76 = (double)SHIDWORD(v119); if ( v73 - 25 < 0 ) v76 = v76 + 4294967300.0; v121 = v76; v77 = *(float *)(v3 + 5220); v78 = v121 < v77; v79 = v121 == v77; v80 = v121; if ( !v78 && !v79 ) { LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); *(float *)(v3 + 5220) = v80 / (double)SLODWORD(v121) * *(float *)(v3 + 5200) + *(float *)(v3 + 5220); } v81 = *(_DWORD *)(v3 + 64); v82 = *(int **)(v81 + 348); v83 = *(float *)(v81 + 344); v84 = *v82; v120 = v83; LODWORD(v121) = (*(int (__thiscall **)(int *))(v84 + 168))(v82) - 10; v85 = (double)SLODWORD(v121); v121 = (double)(*(int (__thiscall **)(int *))(*v82 + 164))(v82) + *(float *)(v3 + 5220); sub_417B60((float *)LODWORD(v120), v121, v85, 1.0); v86 = *(float *)(v3 + 5220); v87 = *(void (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v3 + 64) + 352) + 468); LODWORD(v121) = HIWORD(v120) | 0xC00; v119 = (signed __int64)v86; v87(v75 - (unsigned __int64)(signed __int64)v86 + 18); v88 = *(_DWORD *)(v3 + 64); v89 = *(_DWORD *)(v88 + 348); v90 = *(float **)(v88 + 352); v121 = COERCE_FLOAT((*(int (__thiscall **)(_DWORD))(*(_DWORD *)v89 + 168))(*(_DWORD *)(v88 + 348))); v91 = (double)SLODWORD(v121); v121 = (double)(*(int (__thiscall **)(int))(*(_DWORD *)v89 + 164))(v89) + *(float *)(v3 + 5220) + 8.0; sub_417B60(v90, v121, v91, 1.0); v35 = *(_BYTE *)(v3 + 5225) == 0; *(float *)(v3 + 5228) = *(float *)(v3 + 5200) + *(float *)(v3 + 5228); if ( v35 ) { *(_BYTE *)(v3 + 5225) = 1; sub_6BA650(&dword_AB6520, 39); *(float *)(v3 + 5228) = 0.0; } if ( !*(_BYTE *)(v3 + 5226) ) { LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); if ( (double)SLODWORD(v121) - *(float *)(v3 + 5232) < 5.0 ) { (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); sub_6BA650(&dword_AB6520, 40); *(_BYTE *)(v3 + 5226) = 1; } } v92 = *(float *)(v3 + 5200) + *(float *)(v3 + 5256); LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); v120 = v92; v93 = v120; *(float *)(v3 + 5256) = v120; v94 = (double)SLODWORD(v121); v120 = v94 - *(float *)(v3 + 5232); if ( v120 / v94 * 0.1000000014901161 < v93 ) { sub_72B300(*(_DWORD ***)(v3 + 64), 0, 1, 0); *(float *)(v3 + 5256) = 0.0; sub_72F080(*(_DWORD *)(v3 + 64), v89, v120, 1); } } else if ( v72 == 3 ) { *(float *)(v3 + 5220) = 0.0; sub_72F080(*(_DWORD *)(v3 + 64), 1, 0.0, 0); } } if ( *(_DWORD *)(v3 + 132) != 3 ) goto LABEL_164; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5248); v104 = v120; *(float *)(v3 + 5248) = v120; if ( v104 > 0.30000001 && !*(_BYTE *)(v3 + 5252) ) { LODWORD(v121) = *((unsigned __int16 *)dword_AD8EBC + 274); v120 = *(float *)sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v119 + 1, &v121); if ( LODWORD(v120) == *(_DWORD *)(v3 + 100) ) return; sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v122); v105 = 0; v106 = (_DWORD *)(LODWORD(v120) + 16); do { if ( !*v106 ) sub_72EEA0(*(_DWORD **)(v3 + 64), v105, 0, 1); ++v105; ++v106; } while ( v105 < 52 ); v107 = v120; *(_BYTE *)(v3 + 5252) = 1; if ( LODWORD(v107) != *(_DWORD *)(v3 + 100) ) { v108 = 0; sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v123); v109 = 0; if ( v123 <= 0u ) goto LABEL_179; do { v110 = v125[2 * v109]; if ( *(_DWORD *)(LODWORD(v120) + 4 * v110 + 16) ) v108 += sub_754610( (_DWORD *)(v3 + 5308), v110, (unsigned __int8)v124[8 * v109], *(_DWORD *)(LODWORD(v120) + 4 * v110 + 16)); ++v109; } while ( v109 < v123 ); if ( v108 ) sub_729B90(*(_DWORD **)(v3 + 64), v108 - v108 * (unsigned int)*(unsigned __int16 *)(v3 + 5244) / 0x3E8, 0); else LABEL_179: sub_729B90(*(_DWORD **)(v3 + 64), 0, 0); } } if ( *(float *)(v3 + 5248) <= 3.5 ) goto LABEL_164; if ( !*(_BYTE *)(v3 + 5253) ) { v111 = *(_DWORD *)(v3 + 84); if ( v111 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v111 + 260))() == 1 ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 84) + 616) == 1 ) sub_727250(); else sub_727270(); } LODWORD(v121) = *((unsigned __int16 *)dword_AD8EBC + 274); v120 = *(float *)sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v119 + 1, &v121); if ( LODWORD(v120) == *(_DWORD *)(v3 + 100) ) return; sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v123); v112 = 0; v113 = (_DWORD *)(LODWORD(v120) + 16); do { if ( *v113 ) sub_72EEA0(*(_DWORD **)(v3 + 64), v112, 0, 0); ++v112; ++v113; } while ( v112 < 52 ); v114 = 0; if ( v123 ) { do { v115 = v125[2 * v114]; if ( *(_DWORD *)(LODWORD(v120) + 4 * v115 + 16) ) sub_72EEA0(*(_DWORD **)(v3 + 64), v115, 1, 0); ++v114; } while ( v114 < v123 ); } *(_BYTE *)(v3 + 5253) = 1; } v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5256); v116 = v120; *(float *)(v3 + 5256) = v120; if ( v116 > 0.1000000014901161 ) { sub_72B300(*(_DWORD ***)(v3 + 64), 0, 0, 1); goto LABEL_163; } LABEL_164: v117 = *(_DWORD *)(v3 + 92); if ( v117 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v117 + 260))() == 1 ) { if ( *(_BYTE *)(dword_ACDC88 + 129) ) { if ( !*(_DWORD *)(v3 + 132) ) { sub_615820(*(_DWORD ***)(v3 + 92)); if ( !*(_BYTE *)(v3 + 5261) ) { *(_BYTE *)(v3 + 5261) = 1; if ( *(_DWORD *)(v3 + 5288) == 1 ) sub_72A3B0(*(_DWORD **)(v3 + 68)); else sub_72B460(*(_DWORD **)(v3 + 64)); } } } if ( *(_DWORD *)(v3 + 132) == 1 ) { sub_615820(*(_DWORD ***)(v3 + 92)); if ( !*(_BYTE *)(v3 + 5261) ) { *(_BYTE *)(v3 + 5261) = 1; if ( *(_DWORD *)(v3 + 5288) == 1 ) sub_72A3B0(*(_DWORD **)(v3 + 68)); else sub_72B460(*(_DWORD **)(v3 + 64)); } } } return; } if ( v7 == 4 ) { if ( *(float *)(v3 + 5240) < 1.0 ) { v60 = *(_DWORD *)(v3 + 5572); v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5240); v61 = v120; *(float *)(v3 + 5240) = v120; v62 = v61; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v60 + 276))(LODWORD(v62)); if ( *(float *)(v3 + 5240) >= 1.0 ) (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v3 + 5572) + 240))(*(_DWORD *)(v3 + 5572), 1); } } else { v8 = *(_DWORD *)(v3 + 68); if ( v8 ) { if ( *(float *)(v3 + 5240) < 1.0 ) { v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5240); v9 = v120; *(float *)(v3 + 5240) = v120; v10 = v9; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 276))(LODWORD(v10)); if ( *(float *)(v3 + 5240) >= 1.0 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 68) + 240))(1); memset(&String, 0, 0x100u); v11 = *(_DWORD *)(v3 + 132); if ( v11 ) { if ( v11 == 3 || v11 != 2 ) { v13 = sub_40A910(573767082); sprintf(&String, "%s", v13); } } else { v12 = sub_40A910(914247794); sprintf(&String, "%s", v12); } if ( *(_DWORD *)(v3 + 132) == 1 ) { if ( !*(_BYTE *)(v3 + 5261) ) { v14 = *(_DWORD **)(v3 + 68); *(_BYTE *)(v3 + 5261) = 1; sub_72A3B0(v14); } } else { sub_6177C0(*(_DWORD **)(v3 + 92), 260, &String, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 92)); } } } } v15 = *(_DWORD *)(v3 + 68); if ( !v15 || *(_BYTE *)(v3 + 72) ) goto LABEL_164; if ( !*(_DWORD *)(v3 + 132) ) sub_72C450(v15, 1, 0.0, 0); if ( *(_DWORD *)(v3 + 128) ) { v39 = *(_DWORD *)(v3 + 68); v40 = *(int **)(v39 + 348); v41 = *(_DWORD *)(v39 + 344); v42 = COERCE_FLOAT((*(int (__thiscall **)(int *))(*v40 + 164))(v40)); v43 = *v40; v121 = v42; v44 = (double)SLODWORD(v42); v45 = *(int (__thiscall **)(int *))(v43 + 168); v118 = v44; v46 = COERCE_FLOAT(v45(v40)); v121 = v46; *(float *)(v41 + 88) = v118; *(float *)&v119 = (double)SLODWORD(v46) - 10.0; *(_DWORD *)(v41 + 92) = v119; *((float *)&v119 + 1) = 1.0; *(float *)(v41 + 96) = 1.0; *(float *)(v3 + 5220) = 0.0; } else { if ( !*(_BYTE *)(v3 + 5224) ) { v16 = *(_DWORD *)(v3 + 132); if ( (v16 == 1 || !v16) && *(float *)(v3 + 5196) > 2.0 ) { *(_BYTE *)(v3 + 5224) = 1; sub_6BA650(&dword_AB6520, 33); } } v17 = *(_DWORD *)(v3 + 132); if ( v17 == 1 ) { v18 = (*(int (__stdcall **)(int))(**(_DWORD **)(*(_DWORD *)(v3 + 68) + 348) + 144))(a2) - 25; *(float *)(v3 + 5232) = *(float *)(v3 + 5200) + *(float *)(v3 + 5232); v121 = (double)(unsigned int)v18; v19 = *(float *)(v3 + 5220); v20 = v121 < v19; v21 = v121 == v19; v22 = v121; if ( !v20 && !v21 ) { LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); *(float *)(v3 + 5220) = v22 / (double)SLODWORD(v121) * *(float *)(v3 + 5200) + *(float *)(v3 + 5220); } v23 = *(_DWORD *)(v3 + 68); v24 = *(int **)(v23 + 348); v25 = *v24; v120 = *(float *)(v23 + 344); v26 = (*(int (__thiscall **)(int *))(v25 + 168))(v24); v27 = *v24; LODWORD(v121) = v26 - 10; v28 = (double)(v26 - 10); v121 = (double)(*(int (__thiscall **)(int *))(v27 + 164))(v24) + *(float *)(v3 + 5220); sub_417B60((float *)LODWORD(v120), v121, v28, 1.0); v29 = *(float *)(v3 + 5220); v30 = *(void (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v3 + 68) + 352) + 468); LODWORD(v121) = HIWORD(v120) | 0xC00; v119 = (signed __int64)v29; v30(v18 - (unsigned __int64)(signed __int64)v29 + 18); v31 = *(_DWORD *)(v3 + 68); v32 = *(_DWORD *)(v31 + 348); v33 = *(float **)(v31 + 352); v121 = COERCE_FLOAT((*(int (__thiscall **)(_DWORD))(*(_DWORD *)v32 + 168))(*(_DWORD *)(v31 + 348))); v34 = (double)SLODWORD(v121); v121 = (double)(*(int (__thiscall **)(int))(*(_DWORD *)v32 + 164))(v32) + *(float *)(v3 + 5220) + 8.0; sub_417B60(v33, v121, v34, 1.0); v35 = *(_BYTE *)(v3 + 5225) == 0; *(float *)(v3 + 5228) = *(float *)(v3 + 5200) + *(float *)(v3 + 5228); if ( v35 ) { *(_BYTE *)(v3 + 5225) = 1; sub_6BA650(&dword_AB6520, 39); *(float *)(v3 + 5228) = 0.0; } if ( !*(_BYTE *)(v3 + 5226) ) { LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); if ( (double)SLODWORD(v121) - *(float *)(v3 + 5232) < 5.0 ) { (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); sub_6BA650(&dword_AB6520, 40); *(_BYTE *)(v3 + 5226) = 1; } } v36 = *(float *)(v3 + 5200) + *(float *)(v3 + 5256); LODWORD(v121) = *(unsigned __int16 *)(v3 + 136); v120 = v36; v37 = v120; *(float *)(v3 + 5256) = v120; v38 = (double)SLODWORD(v121); v120 = v38 - *(float *)(v3 + 5232); if ( v120 / v38 * 0.1000000014901161 < v37 ) { sub_72A250(*(_DWORD ***)(v3 + 68), 0, 1, 0); *(float *)(v3 + 5256) = 0.0; sub_72C450(*(_DWORD *)(v3 + 68), v32, v120, 1); } } else if ( v17 == 3 ) { *(float *)(v3 + 5220) = 0.0; sub_72C450(*(_DWORD *)(v3 + 68), 1, 0.0, 0); } } if ( *(_DWORD *)(v3 + 132) != 3 ) goto LABEL_164; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5248); v47 = v120; *(float *)(v3 + 5248) = v120; if ( v47 > 0.30000001 && !*(_BYTE *)(v3 + 5252) ) { LODWORD(v121) = *((unsigned __int16 *)dword_AD8EBC + 274); v120 = *(float *)sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v119 + 1, &v121); if ( LODWORD(v120) == *(_DWORD *)(v3 + 100) ) return; sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v122); v48 = 0; v49 = (_DWORD *)(LODWORD(v120) + 16); do { if ( !*v49 ) sub_72C270(*(_DWORD **)(v3 + 68), v48, 0, 1); ++v48; ++v49; } while ( v48 < 52 ); v50 = v120; *(_BYTE *)(v3 + 5252) = 1; if ( LODWORD(v50) != *(_DWORD *)(v3 + 100) ) { v51 = 0; sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v123); v52 = 0; if ( v123 <= 0u ) goto LABEL_180; do { v53 = v125[2 * v52]; if ( *(_DWORD *)(LODWORD(v120) + 4 * v53 + 16) ) v51 += sub_754610( (_DWORD *)(v3 + 4908), v53, (unsigned __int8)v124[8 * v52], *(_DWORD *)(LODWORD(v120) + 4 * v53 + 16)); ++v52; } while ( v52 < v123 ); if ( v51 ) sub_729A30(*(_DWORD **)(v3 + 68), v51 - v51 * (unsigned int)*(unsigned __int16 *)(v3 + 5244) / 0x3E8); else LABEL_180: sub_729A30(*(_DWORD **)(v3 + 68), 0); } } if ( *(float *)(v3 + 5248) <= 3.5 ) goto LABEL_164; if ( *(_BYTE *)(v3 + 5253) ) { LABEL_85: v120 = *(float *)(v3 + 5200) + *(float *)(v3 + 5256); v59 = v120; *(float *)(v3 + 5256) = v120; if ( v59 > 0.1000000014901161 ) { sub_72A250(*(_DWORD ***)(v3 + 68), 0, 0, 1); LABEL_163: *(float *)(v3 + 5256) = 0.0; goto LABEL_164; } goto LABEL_164; } v54 = *(_DWORD *)(v3 + 84); if ( v54 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v54 + 260))() == 1 ) sub_6C4E60(0); LODWORD(v121) = *((unsigned __int16 *)dword_AD8EBC + 274); v120 = *(float *)sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v119 + 1, &v121); if ( LODWORD(v120) != *(_DWORD *)(v3 + 100) ) { sub_753D20((char *)(v3 + 156), *(_DWORD *)(v3 + 5216), (int)&v123); v55 = 0; v56 = (_DWORD *)(LODWORD(v120) + 16); do { if ( *v56 ) sub_72C270(*(_DWORD **)(v3 + 68), v55, 0, 0); ++v55; ++v56; } while ( v55 < 52 ); v57 = 0; if ( v123 ) { do { v58 = v125[2 * v57]; if ( *(_DWORD *)(LODWORD(v120) + 4 * v58 + 16) ) sub_72C270(*(_DWORD **)(v3 + 68), v58, 1, 0); ++v57; } while ( v57 < v123 ); } *(_BYTE *)(v3 + 5253) = 1; goto LABEL_85; } } } // 6C5F10: could not find valid save-restore pair for ebx // AB6534: using guessed type int dword_AB6534; // ACDC88: using guessed type int dword_ACDC88; // 6C5F10: using guessed type int var_160[23]; // 6C5F10: using guessed type char var_164[4]; //----- (006C72A0) -------------------------------------------------------- int __thiscall sub_6C72A0(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi int **v4; // eax int *v5; // ebx int v7; // edx int v8; // ecx signed int v9; // eax unsigned int v10; // edi __int64 v11; // rax unsigned int v12; // esi int v13; // esi unsigned int v14; // eax char v15; // [esp+8h] [ebp-Ch] int v16; // [esp+10h] [ebp-4h] v3 = this; v16 = *((unsigned __int16 *)dword_AD8EBC + 274); v4 = sub_6CA9F0(this + 24, (int **)&v15, &v16); v5 = *v4; if ( *v4 == (int *)v3[25] ) return 0; v7 = v5[a2 + 4]; v8 = v3[1322]; if ( v8 != 2 && v8 != 4 ) { switch ( v3[38] ) { case 0: LABEL_8: v9 = 100; goto LABEL_15; case 1: LABEL_13: v9 = 1000; goto LABEL_15; case 2: LABEL_12: v9 = 10000; goto LABEL_15; case 3: v9 = 100000; goto LABEL_15; case 4: v9 = 1000000; goto LABEL_15; case 5: return a3 - v7; default: break; } } else { switch ( v3[38] ) { case 0: goto LABEL_8; case 1: v9 = 500; goto LABEL_15; case 2: goto LABEL_13; case 3: goto LABEL_12; case 4: return a3 - v7; default: break; } } v9 = a3; LABEL_15: if ( byte_BA6A65 ) v9 = a3; if ( v9 + v7 <= a3 ) v10 = v9; else v10 = a3 - v7; if ( v8 != 2 && v8 != 4 ) { v13 = sub_6C4CC0(v5 + 4); v14 = (unsigned __int64)sub_680E60(byte_AD9238) - v13; if ( v10 > v14 ) v10 = v14; } else { v11 = sub_6815F0(byte_AD9238); v16 = HIDWORD(v11); v12 = v11 - sub_6C4CC0(v5 + 4); if ( v10 > v12 ) return v12; } return v10; } // BA6A65: using guessed type char byte_BA6A65; //----- (006C7400) -------------------------------------------------------- signed int __thiscall sub_6C7400(_DWORD *this, _BYTE *a2) { _BYTE *v2; // ebx _DWORD *v3; // edi int *v4; // esi int *v5; // eax int v6; // ecx signed int result; // eax int *v8; // esi int *v9; // eax int v10; // ecx char v11; // [esp+Ch] [ebp-4h] signed int v12; // [esp+18h] [ebp+8h] signed int v13; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; if ( !(*a2 & 1) || this[36] ) { result = 1; if ( *a2 & 2 && this[36] == 1 ) { v13 = 0; if ( *(_WORD *)(v2 + 1) > 0u ) { v8 = (int *)(v2 + 5); do { v9 = *sub_6CA9F0(v3 + 24, (int **)&v11, (_WORD *)v8 - 1); if ( v9 != (int *)v3[25] ) { v10 = v8[1]; if ( v10 ) v9[*v8 + 4] += v10; sub_6C55B0((int)v3, *v8, 0); } v8 = (int *)((char *)v8 + 10); ++v13; } while ( v13 < *(unsigned __int16 *)(v2 + 1) ); } result = 1; if ( *v2 & 2 ) v3[36] = 0; } } else { v12 = 0; if ( *(_WORD *)(v2 + 1) > 0u ) { v4 = (int *)(v2 + 5); do { v5 = *sub_6CA9F0(v3 + 24, (int **)&v11, (_WORD *)v4 - 1); if ( v5 != (int *)v3[25] ) { v6 = v4[1]; if ( v6 ) v5[*v4 + 4] += v6; sub_6C55B0((int)v3, *v4, 0); } v4 = (int *)((char *)v4 + 10); ++v12; } while ( v12 < *(unsigned __int16 *)(v2 + 1) ); } result = 1; if ( !(*v2 & 2) ) v3[36] = 1; } return result; } //----- (006C7520) -------------------------------------------------------- int __thiscall sub_6C7520(int this, void *a2) { void *v2; // esi __int16 v3; // dx __int16 v4; // ax int *v5; // edx int *v6; // eax int v7; // eax void **v8; // eax int v9; // edx _DWORD *v10; // edi int v11; // eax _DWORD *v12; // eax char v14[2]; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] int v16; // [esp+10h] [ebp-4h] v2 = a2; if ( *(_DWORD *)(this + 120) ) { if ( **(_DWORD **)(this + 116) != *(_DWORD *)(this + 116) ) { do { v4 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v4 + 1; *((_WORD *)v2 + 4) = v4; v5 = *(int **)(this + 116); v6 = (int *)v5[1]; while ( !*((_BYTE *)v6 + 25) ) { if ( *((_WORD *)v6 + 6) >= *((_WORD *)v2 + 4) ) { v5 = v6; v6 = (int *)*v6; } else { v6 = (int *)v6[2]; } } v7 = *(_DWORD *)(this + 116); a2 = v5; if ( v5 == (int *)v7 || *((_WORD *)v2 + 4) < *((_WORD *)v5 + 6) ) { v16 = v7; v8 = (void **)&v16; } else { v8 = &a2; } } while ( *v8 != *(void **)(this + 116) ); } } else { v3 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v3 + 1; *((_WORD *)v2 + 4) = v3; } v9 = *(_DWORD *)v2; v10 = (_DWORD *)(this + 112); *(_WORD *)v14 = *((_WORD *)v2 + 4); v11 = *((_DWORD *)v2 + 1); v15 = v9; v16 = v11; v12 = sub_6CAE60((_DWORD *)(this + 112), v14); sub_6CA910(v10, (int)&v15, v12, 0); sub_6F3D10(&off_AB7F2C, 43, 26, v2, 0xAu); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C7600) -------------------------------------------------------- int __thiscall sub_6C7600(int this, void *a2) { void *v2; // esi __int16 v3; // dx __int16 v4; // ax int *v5; // edx int *v6; // eax int v7; // eax void **v8; // eax int v9; // edx _DWORD *v10; // edi int v11; // eax _DWORD *v12; // eax char v14[2]; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] int v16; // [esp+10h] [ebp-4h] v2 = a2; if ( *(_DWORD *)(this + 120) ) { if ( **(_DWORD **)(this + 116) != *(_DWORD *)(this + 116) ) { do { v4 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v4 + 1; *((_WORD *)v2 + 4) = v4; v5 = *(int **)(this + 116); v6 = (int *)v5[1]; while ( !*((_BYTE *)v6 + 25) ) { if ( *((_WORD *)v6 + 6) >= *((_WORD *)v2 + 4) ) { v5 = v6; v6 = (int *)*v6; } else { v6 = (int *)v6[2]; } } v7 = *(_DWORD *)(this + 116); a2 = v5; if ( v5 == (int *)v7 || *((_WORD *)v2 + 4) < *((_WORD *)v5 + 6) ) { v16 = v7; v8 = (void **)&v16; } else { v8 = &a2; } } while ( *v8 != *(void **)(this + 116) ); } } else { v3 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v3 + 1; *((_WORD *)v2 + 4) = v3; } v9 = *(_DWORD *)v2; v10 = (_DWORD *)(this + 112); *(_WORD *)v14 = *((_WORD *)v2 + 4); v11 = *((_DWORD *)v2 + 1); v15 = v9; v16 = v11; v12 = sub_6CAE60((_DWORD *)(this + 112), v14); sub_6CA910(v10, (int)&v15, v12, 0); sub_6F3D10(&off_AB7F2C, 43, 29, v2, 0xAu); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006C76E0) -------------------------------------------------------- signed int __thiscall sub_6C76E0(_DWORD *this, int a2) { _BYTE *v2; // esi _DWORD *v3; // ebx int **v4; // eax int v5; // edi int v6; // ecx int v8; // esi int v9; // eax int v10; // ebx _DWORD *v11; // eax _DWORD *v12; // ecx signed int v13; // eax _DWORD *v14; // edx int **v15; // eax int *j; // eax int i; // eax int v18; // esi char *v19; // eax int v20; // edi int *v21; // eax int v22; // ST08_4 int v23; // ST0C_4 int v24; // ST10_4 int v25; // ST14_4 char *v26; // eax char *v27; // eax __int16 v28; // dx char v29; // [esp+Ch] [ebp-18h] int *v30; // [esp+1Ch] [ebp-8h] _DWORD *v31; // [esp+20h] [ebp-4h] __int16 *v32; // [esp+2Ch] [ebp+8h] v2 = (_BYTE *)a2; v32 = (__int16 *)(a2 + 1); v3 = this + 24; v31 = this; v4 = sub_6CA9F0(this + 24, &v30, v32); v5 = (int)*v4; v6 = (int)v31; if ( *v4 == (int *)v31[25] ) return 0; if ( *v2 ) { *(_BYTE *)(v5 + 228) = 1; return 1; } if ( v31[33] == 1 ) { v8 = 0; do { v9 = *(_DWORD *)(v5 + 4 * v8 + 16); if ( v9 ) { *(_DWORD *)(v5 + 4 * v8 + 16) -= v9; sub_6C55B0(v6, v8, 0); v6 = (int)v31; } ++v8; } while ( v8 < 52 ); } sub_6CAEE0(v3, (int *)&v30, v5); v10 = (int)v31; v11 = (_DWORD *)v31[25]; v12 = (_DWORD *)*v11; if ( (_DWORD *)*v11 != v11 ) { LABEL_10: v13 = 0; v14 = v12 + 4; while ( !*v14 ) { ++v13; ++v14; if ( v13 >= 52 ) { if ( !*((_BYTE *)v12 + 233) ) { v15 = (int **)v12[2]; if ( *((_BYTE *)v15 + 233) ) { for ( i = v12[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v12 != *(_DWORD **)(i + 8) ) break; v12 = (_DWORD *)i; } v12 = (_DWORD *)i; } else { v12 = (_DWORD *)v12[2]; for ( j = *v15; !*((_BYTE *)j + 233); j = (int *)*j ) v12 = j; } } if ( v12 != (_DWORD *)v31[25] ) goto LABEL_10; goto LABEL_23; } } return 1; } LABEL_23: v18 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v18 ) { v19 = sub_664AB0(dword_AD8C90, *v32); if ( v19 ) { v20 = (*(int (__thiscall **)(char *))(*(_DWORD *)v19 + 84))(v19); v21 = (int *)sub_4B1B10((float *)&v29, 0x32u); v22 = *v21; v23 = v21[1]; v24 = v21[2]; v25 = v21[3]; v26 = (char *)sub_40A910(927277203); v27 = sub_7549E0(v26, v20); sub_492030(v18, v20, v18, (int)v27, v22, v23, v24, v25); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v18 + 1040)); } } v28 = *(_WORD *)(v10 + 104); *(_DWORD *)(v10 + 132) = 0; *(_WORD *)(v10 + 5168) = v28; return 1; } //----- (006C78A0) -------------------------------------------------------- signed int __userpurge sub_6C78A0@(int a1@, int a2@, int a3) { int v3; // esi _DWORD *v4; // eax _DWORD *v5; // edx int **v6; // eax int *j; // eax int i; // eax int *v9; // ecx int v10; // eax const CHAR *v11; // eax char v13; // [esp+8h] [ebp-10Ch] int v14; // [esp+Ch] [ebp-108h] CHAR String; // [esp+10h] [ebp-104h] v3 = a1; if ( a3 ) { *(_DWORD *)(a1 + 128) = *(_DWORD *)a3; sub_72FDB0(*(_DWORD **)(a1 + 68), (unsigned __int8 *)(a3 + 4), 0); v4 = *(_DWORD **)(v3 + 100); v5 = (_DWORD *)*v4; if ( (_DWORD *)*v4 != v4 ) { do { memset(v5 + 4, 0, 0xD0u); if ( !*((_BYTE *)v5 + 233) ) { v6 = (int **)v5[2]; if ( *((_BYTE *)v6 + 233) ) { for ( i = v5[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v5 != *(_DWORD **)(i + 8) ) break; v5 = (_DWORD *)i; } v5 = (_DWORD *)i; } else { v5 = (_DWORD *)v5[2]; for ( j = *v6; !*((_BYTE *)j + 233); j = (int *)*j ) v5 = j; } } } while ( v5 != *(_DWORD **)(v3 + 100) ); } sub_72BE60(*(_DWORD ***)(v3 + 68)); v9 = *(int **)(v3 + 100); *(_DWORD *)(v3 + 132) = 0; v10 = *v9; v14 = v10; if ( (int *)v10 != v9 ) { do { if ( *(_BYTE *)(v10 + 228) == 1 ) { if ( *(_WORD *)(v10 + 12) == *((_WORD *)dword_AD8EBC + 274) ) { sub_6C5DA0(v3, a2); return 1; } v10 = *sub_6CAEE0((_DWORD *)(v3 + 96), (int *)&v13, v10); v14 = v10; } else { sub_6CA3E0(&v14); v10 = v14; } } while ( v10 != *(_DWORD *)(v3 + 100) ); } memset(&String, 0, 0x100u); v11 = sub_40A910(914247794); sprintf(&String, "%s", v11); sub_6177C0(*(_DWORD **)(v3 + 92), 260, &String, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 92)); *(_WORD *)(v3 + 5168) = *(_WORD *)(v3 + 104); sub_6CAA70((_DWORD *)(v3 + 112)); *(float *)(v3 + 5232) = 0.0; *(float *)(v3 + 5228) = 0.0; *(_BYTE *)(v3 + 5188) = 0; *(_WORD *)(v3 + 5225) = 0; *(_BYTE *)(v3 + 5224) = 0; *(_BYTE *)(v3 + 5261) = 0; *(_BYTE *)(v3 + 72) = 0; *(_WORD *)(v3 + 5237) = 0; *(_BYTE *)(v3 + 5239) = 0; *(float *)(v3 + 5248) = 0.0; *(float *)(v3 + 5256) = 0.0; *(_WORD *)(v3 + 5252) = 0; } return 1; } //----- (006C7A90) -------------------------------------------------------- char __thiscall sub_6C7A90(_DWORD *this, signed int a2) { _DWORD *v2; // esi __int64 v3; // rax unsigned int v4; // eax int v5; // edi unsigned int v6; // eax int v8; // [esp+Ch] [ebp-10h] int v9; // [esp+10h] [ebp-Ch] v2 = this; LODWORD(v3) = this[1322]; if ( (_DWORD)v3 == 1 ) { v4 = sub_7545D0(this + 1227, a2, this[1291]); v5 = sub_6C72A0(v2, a2, v4); v3 = sub_680E60(byte_AD9238); if ( (unsigned int)v5 > v3 ) { LODWORD(v3) = sub_680E60(byte_AD9238); v5 = v3; } if ( v5 ) { v8 = a2; v9 = v5; LOBYTE(v3) = sub_6C7520((int)v2, &v8); } } else if ( (_DWORD)v3 == 2 ) { v6 = sub_7545D0(this + 1327, a2, this[1291]); LODWORD(v3) = sub_6C72A0(v2, a2, v6); if ( (unsigned __int64)(unsigned int)v3 > *((_QWORD *)v2 + 660) ) LODWORD(v3) = v2[1320]; if ( (_DWORD)v3 ) { v9 = v3; v8 = a2; LOBYTE(v3) = sub_7288B0((int)v2, &v8); } } return v3; } //----- (006C7B80) -------------------------------------------------------- char __thiscall sub_6C7B80(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // edi int v5; // edx unsigned int v6; // ecx int v8; // [esp+4h] [ebp-18h] unsigned int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] unsigned int v11; // [esp+10h] [ebp-Ch] v2 = this; v8 = *((unsigned __int16 *)dword_AD8EBC + 274); v3 = *sub_6CA9F0(this + 24, (int **)&v9, &v8); if ( v3 != (int *)v2[25] ) { v3 = (int *)v3[a2 + 4]; v4 = v2[1322]; if ( v4 != 2 && v4 != 4 ) { v5 = v2[38]; switch ( v5 ) { case 0: LABEL_7: v6 = 100; break; case 1: LABEL_11: v6 = 1000; break; case 2: LABEL_5: v6 = 10000; break; case 3: v6 = 100000; break; case 4: v6 = 1000000; break; default: goto LABEL_12; } } else { v5 = v2[38]; switch ( v5 ) { case 0: goto LABEL_7; case 1: v6 = 500; goto LABEL_13; case 2: goto LABEL_11; case 3: goto LABEL_5; default: break; } LABEL_12: v6 = v9; } LABEL_13: if ( byte_BA6A65 ) v6 = (unsigned int)v3; if ( v5 == 5 || v5 == 4 || v6 > (unsigned int)v3 ) v6 = (unsigned int)v3; if ( v6 ) { if ( v4 == 1 ) { v11 = v6; v10 = a2; LOBYTE(v3) = sub_6C7600((int)v2, &v10); } else if ( v4 == 2 ) { v11 = v6; v10 = a2; LOBYTE(v3) = sub_728990((int)v2, &v10); } } } return (char)v3; } // BA6A65: using guessed type char byte_BA6A65; //----- (006C7CC0) -------------------------------------------------------- signed int __thiscall sub_6C7CC0(_DWORD *this, __int16 *a2) { _DWORD *v2; // esi _DWORD *v3; // eax char *v4; // edi int v5; // esi int v6; // edi char *v7; // eax char *v8; // eax int *v9; // eax int v10; // ST08_4 int v11; // ST0C_4 int v12; // ST10_4 int v13; // ST14_4 char *v14; // eax char *v15; // eax char v17[2]; // [esp+Ch] [ebp-1CCh] char v18; // [esp+10h] [ebp-1C8h] char v19; // [esp+E8h] [ebp-F0h] int v20; // [esp+F0h] [ebp-E8h] _DWORD *v21; // [esp+F8h] [ebp-E0h] char v22; // [esp+FCh] [ebp-DCh] char v23; // [esp+1D0h] [ebp-8h] v23 = 0; memset(&v22, 0, 0xD0u); *(_WORD *)v17 = *a2; qmemcpy(&v18, &v22, 0xD8u); v2 = this + 24; v21 = this; v3 = sub_6CADE0(this + 24, v17); sub_6CB200(v2, (int)&v20, v3, 0); v4 = sub_664AB0(dword_AD8C90, *a2); v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v5 && v4 ) { v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 84))(v4); v7 = (char *)sub_40A910(2140193749); v8 = sub_7549E0(v7, v6); sub_492060((_DWORD *)v5, (int)v8); v9 = (int *)sub_4B1B10((float *)&v19, 0x32u); v10 = *v9; v11 = v9[1]; v12 = v9[2]; v13 = v9[3]; v14 = (char *)sub_40A910(2140193749); v15 = sub_7549E0(v14, v6); sub_492030(v5, v6, v5, (int)v15, v10, v11, v12, v13); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v5 + 1040)); } if ( !v21[33] ) *((_WORD *)v21 + 2584) = *((_WORD *)v21 + 52); return 1; } //----- (006C7E20) -------------------------------------------------------- signed int __thiscall sub_6C7E20(_DWORD *this, _WORD *a2) { int v2; // esi _DWORD **v3; // ecx int v4; // edi const CHAR *v5; // eax int *v6; // eax int v7; // ST04_4 int v8; // ST08_4 int v9; // ST0C_4 int v10; // ST10_4 const CHAR *v11; // eax char v13; // [esp+Ch] [ebp-10h] v2 = (int)this; if ( *a2 == 7312 ) { v3 = (_DWORD **)this[17]; *(_BYTE *)(v2 + 5260) = 0; sub_72BE60(v3); *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 68) + 356) + 28) |= 1u; sub_6CB2E0((_DWORD *)(v2 + 96)); sub_6CAA70((_DWORD *)(v2 + 112)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 76)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 68)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 80)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 88)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 92)); *(_DWORD *)(v2 + 80) = 0; *(_DWORD *)(v2 + 76) = 0; *(_DWORD *)(v2 + 68) = 0; *(_DWORD *)(v2 + 84) = 0; *(_DWORD *)(v2 + 88) = 0; *(_DWORD *)(v2 + 92) = 0; (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); (*(void (**)(void))(*(_DWORD *)dword_AB6524 + 60))(); sub_6984E0(byte_ADB468); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = sub_40A910(1194662697); sub_492060((_DWORD *)v4, (int)v5); v6 = (int *)sub_4B1B10((float *)&v13, 0x32u); v7 = *v6; v8 = v6[1]; v9 = v6[2]; v10 = v6[3]; v11 = sub_40A910(1194662697); sub_492030(v4, v4, v2, (int)v11, v7, v8, v9, v10); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v4 + 1040)); if ( *(_BYTE *)(v2 + 5236) ) sub_4A78C0(v4, (void (__thiscall ***)(_DWORD, signed int))v4); } } return 1; } // AB6524: using guessed type int dword_AB6524; // AB6534: using guessed type int dword_AB6534; //----- (006C7F90) -------------------------------------------------------- signed int __stdcall sub_6C7F90(_WORD *a1) { int v1; // esi int v2; // eax int v3; // ebx int v4; // eax CHAR *v5; // eax CHAR *v6; // eax unsigned int v7; // ST0C_4 unsigned int v8; // ST08_4 unsigned int v9; // ST04_4 char *v10; // eax char *v11; // eax CHAR *v12; // eax void *v13; // eax _DWORD *v14; // esi int v15; // ST0C_4 char *v16; // eax char *v17; // eax char v19; // [esp+10h] [ebp-98h] unsigned int v20; // [esp+15h] [ebp-93h] _WORD *v21; // [esp+78h] [ebp-30h] void *v22; // [esp+7Ch] [ebp-2Ch] int v23; // [esp+8Ch] [ebp-1Ch] unsigned int v24; // [esp+90h] [ebp-18h] int v25; // [esp+A4h] [ebp-4h] v1 = (int)a1; v21 = a1; if ( *a1 == 7424 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = v2; v4 = sub_5D5470(*(_DWORD **)(*(_DWORD *)(v2 + 1100) + 3592)); if ( v4 ) { qmemcpy(&v19, (const void *)(v4 + 8), 0x67u); v24 = 15; v23 = 0; LOBYTE(v22) = 0; v25 = 0; v5 = (CHAR *)sub_40A910(-1954054194); sub_4018E0(&v22, v5, strlen(v5)); sub_401D10((int)&v22, "\n", 1u); v6 = (CHAR *)sub_40A910(842412080); sub_401D10((int)&v22, v6, strlen(v6)); sub_401D10((int)&v22, "\n", 1u); v7 = (v20 >> 19) & 0x3F; v8 = (v20 >> 13) & 0x3F; v9 = (v20 >> 8) & 0x1F; v10 = (char *)sub_40A910(-875561418); v11 = sub_7549E0(v10, v9, v8, v7); sub_401D10((int)&v22, v11, strlen(v11)); sub_401D10((int)&v22, "\n", 1u); v12 = (CHAR *)sub_40A910(-135720679); sub_401D10((int)&v22, v12, strlen(v12)); v13 = v22; if ( v24 < 0x10 ) v13 = &v22; sub_72AA10(*(_DWORD **)(v3 + 788), (int)v13); v14 = *(_DWORD **)(v3 + 788); v15 = *((_DWORD *)v21 + 1); v16 = (char *)sub_40A910(624918410); v17 = sub_7549E0(v16, v15); sub_72AA30(v14, (int)v17); v25 = -1; if ( v24 >= 0x10 ) operator delete(v22); v1 = (int)v21; v24 = 15; v23 = 0; LOBYTE(v22) = 0; } sub_4B10D0(*(_DWORD ***)(v3 + 788), *(_QWORD *)(v1 + 8)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 788)); } return 1; } //----- (006C81E0) -------------------------------------------------------- _DWORD *__thiscall sub_6C81E0(_DWORD *this, void *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ebx int v5; // edi int v6; // eax CHAR *v7; // eax signed __int64 v8; // rax int v9; // eax char v10; // cl const char *v11; // edx unsigned int v12; // eax char *v13; // edi char v14; // cl signed __int64 v15; // rax unsigned int v16; // eax char *v17; // edi char v18; // cl const char *v19; // ecx unsigned int v20; // eax const char *v21; // esi char *v22; // edi char v23; // cl signed __int64 v24; // rax unsigned int v25; // eax char *v26; // edi char v27; // cl const char *v28; // ecx unsigned int v29; // eax const char *v30; // esi char *v31; // edi char v32; // cl signed __int64 v33; // rax unsigned int v34; // eax char *v35; // edi char v36; // cl const char *v37; // ecx unsigned int v38; // eax const char *v39; // esi char *v40; // edi char v41; // cl void *v43; // [esp+18h] [ebp-22Ch] int v44; // [esp+28h] [ebp-21Ch] unsigned int v45; // [esp+2Ch] [ebp-218h] char v46; // [esp+33h] [ebp-211h] char v47[256]; // [esp+34h] [ebp-210h] char v48[256]; // [esp+134h] [ebp-110h] int v49; // [esp+240h] [ebp-4h] v3 = this; v4 = a2; v45 = 15; v44 = 0; LOBYTE(v43) = 0; v49 = 0; sub_4018E0(&v43, &unk_9F8ABB, 0); v5 = a3; if ( a3 ) { memset(v48, 0, 0x100u); memset(v47, 0, 0x100u); v6 = v3[1322]; if ( v6 == 2 || v6 == 4 ) { sprintf(v48, "%d ", a3); sub_4018E0(&v43, v48, strlen(v48)); v7 = (CHAR *)sub_40A910(-1767704865); sub_401D10((int)&v43, v7, strlen(v7)); *((_DWORD *)a2 + 5) = 15; *((_DWORD *)a2 + 4) = 0; *(_BYTE *)a2 = 0; sub_406450(a2, &v43); if ( v45 >= 0x10 ) operator delete(v43); return v4; } if ( sub_680E90((unsigned int)a3) ) { v8 = sub_680E90((unsigned int)a3); sprintf(v48, "%I64d", v8); v9 = 0; do { v10 = v48[v9]; v47[v9++] = v10; } while ( v10 ); v11 = sub_40C190(1197446809); v12 = strlen(v11) + 1; v13 = &v46; do v14 = (v13++)[1]; while ( v14 ); qmemcpy(v13, v11, v12); v5 = a3; } if ( sub_680EB0((unsigned int)v5) ) { v15 = sub_680EB0((unsigned int)v5); sprintf(v48, "%I64d", v15); v16 = strlen(v48) + 1; v17 = &v46; do v18 = (v17++)[1]; while ( v18 ); qmemcpy(v17, v48, v16); v19 = sub_40C190(1201903011); v20 = strlen(v19) + 1; v21 = v19; v22 = &v46; do v23 = (v22++)[1]; while ( v23 ); qmemcpy(v22, v21, v20); v5 = a3; } if ( sub_680F00((unsigned int)v5) ) { v24 = sub_680F00((unsigned int)v5); sprintf(v48, "%I64d", v24); v25 = strlen(v48) + 1; v26 = &v46; do v27 = (v26++)[1]; while ( v27 ); qmemcpy(v26, v48, v25); v28 = sub_40C190(-1732930065); v29 = strlen(v28) + 1; v30 = v28; v31 = &v46; do v32 = (v31++)[1]; while ( v32 ); qmemcpy(v31, v30, v29); v5 = a3; } if ( sub_680F60((unsigned int)v5) ) { v33 = sub_680F60((unsigned int)v5); sprintf(v48, "%I64d", v33); v34 = strlen(v48) + 1; v35 = &v46; do v36 = (v35++)[1]; while ( v36 ); qmemcpy(v35, v48, v34); v37 = sub_40C190(-2001757707); v38 = strlen(v37) + 1; v39 = v37; v40 = &v46; do v41 = (v40++)[1]; while ( v41 ); qmemcpy(v40, v39, v38); } sub_4018E0(&v43, v47, strlen(v47)); v4 = a2; } v4[5] = 15; v4[4] = 0; *(_BYTE *)v4 = 0; sub_406450(v4, &v43); if ( v45 >= 0x10 ) operator delete(v43); return v4; } // 6C81E0: using guessed type char var_210[256]; // 6C81E0: using guessed type char var_110[256]; //----- (006C8610) -------------------------------------------------------- char __thiscall sub_6C8610(int this) { int v1; // esi int v2; // eax char *v3; // ecx int v4; // edi const CHAR *v5; // eax int *v6; // eax int v7; // ST04_4 int v8; // ST08_4 int v9; // ST0C_4 int v10; // ST10_4 const CHAR *v11; // eax char v13; // [esp+Ch] [ebp-10h] v1 = this; v2 = *(_DWORD *)(this + 5288); if ( v2 != 2 && v2 != 4 || !sub_6C4EE0((_BYTE *)this) ) return 0; v3 = *(char **)(v1 + 64); *(_BYTE *)(v1 + 5260) = 0; sub_72EC50(v3); *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 64) + 356) + 28) |= 1u; sub_6CB2E0((_DWORD *)(v1 + 96)); sub_6CAA70((_DWORD *)(v1 + 112)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 76)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 64)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 80)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 84)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 88)); sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v1 + 92)); *(_DWORD *)(v1 + 80) = 0; *(_DWORD *)(v1 + 76) = 0; *(_DWORD *)(v1 + 64) = 0; *(_DWORD *)(v1 + 84) = 0; *(_DWORD *)(v1 + 88) = 0; *(_DWORD *)(v1 + 92) = 0; (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); (*(void (**)(void))(*(_DWORD *)dword_AB6524 + 60))(); sub_6984E0(byte_ADB468); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = sub_40A910(1194662697); sub_492060((_DWORD *)v4, (int)v5); v6 = (int *)sub_4B1B10((float *)&v13, 0x32u); v7 = *v6; v8 = v6[1]; v9 = v6[2]; v10 = v6[3]; v11 = sub_40A910(1194662697); sub_492030(v4, v4, v1, (int)v11, v7, v8, v9, v10); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v4 + 1040)); } *(_DWORD *)(v1 + 5288) = 0; return 1; } // AB6524: using guessed type int dword_AB6524; // AB6534: using guessed type int dword_AB6534; //----- (006C8790) -------------------------------------------------------- signed int __thiscall sub_6C8790(unsigned __int8 *this, unsigned __int16 *a2) { unsigned __int8 *v2; // ebx int v3; // edi unsigned __int16 v4; // ax int *v5; // eax int v6; // ST04_4 int v7; // ST08_4 int v8; // ST0C_4 int v9; // ST10_4 const char *v10; // eax int v12; // ST10_4 char *v13; // eax char *v14; // eax volatile LONG *v15; // eax char *v16; // eax int v17; // ecx signed int v18; // edi bool v19; // zf _DWORD *v20; // eax float v21; // edx __int16 v22; // dx _DWORD *v23; // eax _DWORD *v24; // ecx int v25; // eax int *v26; // esi float *v27; // edi signed int v28; // eax int v29; // edx double v30; // st7 int (__thiscall *v31)(int *); // eax double v32; // st7 int v33; // eax const char *v34; // edi int v35; // eax _DWORD *v36; // eax _DWORD *v37; // ST10_4 char *v38; // eax char *v39; // eax int v40; // ecx int v41; // eax double v42; // st7 int v43; // eax int v44; // ecx int v45; // esi double v46; // st6 int v47; // eax int *v48; // edi int v49; // edx signed int v50; // eax int v51; // edx double v52; // st7 int (__thiscall *v53)(int *); // eax double v54; // st7 float v55; // eax void (__stdcall *v56)(_DWORD); // edx int v57; // eax int v58; // esi int v59; // edi int (__thiscall *v60)(int); // edx int v61; // eax int v62; // eax int v63; // esi int v64; // ecx int v65; // eax _DWORD *v66; // ecx char v67[2]; // [esp+14h] [ebp-200h] char v68; // [esp+18h] [ebp-1FCh] char v69; // [esp+F0h] [ebp-124h] float v70; // [esp+F4h] [ebp-120h] int v71; // [esp+F8h] [ebp-11Ch] float v72; // [esp+FCh] [ebp-118h] float v73; // [esp+100h] [ebp-114h] __int64 v74; // [esp+104h] [ebp-110h] float v75; // [esp+10Ch] [ebp-108h] char v76; // [esp+110h] [ebp-104h] char v77; // [esp+1E4h] [ebp-30h] void *v78; // [esp+1E8h] [ebp-2Ch] int v79; // [esp+1F8h] [ebp-1Ch] unsigned int v80; // [esp+1FCh] [ebp-18h] int v81; // [esp+210h] [ebp-4h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); HIDWORD(v74) = v3; if ( !v3 ) return 0; v4 = *a2; if ( *a2 != 7296 ) { switch ( v4 ) { case 0x1C86u: v5 = (int *)sub_4B1B10((float *)&v69, 0x32u); v6 = *v5; v7 = v5[1]; v8 = v5[2]; v9 = v5[3]; v10 = sub_41A850(*a2); sub_492030(v3, v3, (int)a2, (int)v10, v6, v7, v8, v9); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v3 + 1040)); return 0; case 0x1C8Cu: if ( !*((_DWORD *)v2 + 1303) ) { v12 = *(unsigned __int16 *)((char *)a2 + 47); v13 = (char *)sub_40A910(594415481); v14 = sub_7549E0(v13, v12); v15 = sub_462C30(1, v14); sub_56FF80((_DWORD *)v2 + 1303, (int)v15); (**(void (__thiscall ***)(int, int))(*((_DWORD *)v2 + 1303) + 232))( *((_DWORD *)v2 + 1303) + 232, (int)(v2 + 8)); return 0; } break; case 0x1C84u: case 0x1C87u: case 0x1C88u: case 0x1C96u: v16 = sub_7549E0("%d", *a2); sub_492060((_DWORD *)v3, (int)v16); break; } return 0; } *((_DWORD *)v2 + 32) = 0; *((float *)v2 + 1310) = 0.0; v17 = *(_DWORD *)(v3 + 792); *((_DWORD *)v2 + 17) = v17; *((_DWORD *)v2 + 19) = *(_DWORD *)(v3 + 796); *((_DWORD *)v2 + 20) = *(_DWORD *)(v3 + 800); *((_DWORD *)v2 + 21) = *(_DWORD *)(v3 + 804); *((_DWORD *)v2 + 22) = *(_DWORD *)(v3 + 808); *((_DWORD *)v2 + 23) = *(_DWORD *)(v3 + 812); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v17 + 276))(0.0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 17) + 240))(0); sub_6CB2E0((_DWORD *)v2 + 24); sub_6CAA70((_DWORD *)v2 + 28); *((_DWORD *)v2 + 33) = *(_DWORD *)((char *)a2 + 23); *((_WORD *)v2 + 68) = ((signed int)(1717986919 * (unsigned __int64)*(unsigned __int16 *)((char *)a2 + 31) >> 32) >> 2) + ((unsigned int)(1717986919 * (unsigned __int64)*(unsigned __int16 *)((char *)a2 + 31) >> 32) >> 31); *((_WORD *)v2 + 69) = *(signed __int16 *)((char *)a2 + 33) / 10; v2[140] = *((_BYTE *)a2 + 49); *((_WORD *)v2 + 2622) = *(unsigned __int16 *)((char *)a2 + 37); *((_DWORD *)v2 + 1291) = *(_DWORD *)((char *)a2 + 39); sub_72FDB0(*((_DWORD **)v2 + 17), 0, 1); v18 = 6; LODWORD(v75) = a2 + 10; do { sub_72FDB0(*((_DWORD **)v2 + 17), (unsigned __int8 *)LODWORD(v75), 0); LODWORD(v75) -= 3; --v18; } while ( v18 >= 0 ); v19 = v2[140] == 0; v73 = 0.0; if ( !v19 ) { LODWORD(v75) = a2 + 25; do { v77 = 0; memset(&v76, 0, 0xD0u); *(_WORD *)v67 = *(_WORD *)LODWORD(v75); qmemcpy(&v68, &v76, 0xD8u); v20 = sub_6CADE0((_DWORD *)v2 + 24, v67); sub_6CB200((_DWORD *)v2 + 24, (int)&v71, v20, 0); LODWORD(v21) = v2[140]; LODWORD(v75) += 2; ++LODWORD(v73); } while ( SLODWORD(v73) < SLODWORD(v21) ); } *((_WORD *)v2 + 2584) = v2[140]; v22 = *((_WORD *)dword_AD8EBC + 274); v77 = 0; memset(&v76, 0, 0xD0u); *(_WORD *)v67 = v22; qmemcpy(&v68, &v76, 0xD8u); v23 = sub_6CADE0((_DWORD *)v2 + 24, v67); sub_6CB200((_DWORD *)v2 + 24, (int)&v71, v23, 0); v24 = (_DWORD *)*((_DWORD *)v2 + 17); ++*((_WORD *)v2 + 2584); sub_8F82A0(&unk_BA6B10, v24); sub_729A30(*((_DWORD **)v2 + 17), 0); v25 = *((_DWORD *)v2 + 17); v26 = *(int **)(v25 + 348); v27 = *(float **)(v25 + 344); *(float *)&v28 = COERCE_FLOAT((*(int (__thiscall **)(int *))(*v26 + 164))(v26)); v29 = *v26; v28 -= 8; v73 = *(float *)&v28; v30 = (double)v28; v31 = *(int (__thiscall **)(int *))(v29 + 168); v75 = v30; v73 = (double)(v31(v26) - 10); v70 = v75; v32 = v73; v27[22] = v75; *(float *)&v71 = v32; v27[23] = *(float *)&v71; v72 = 1.0; v27[24] = 1.0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(*((_DWORD *)v2 + 17) + 348) + 256))(1); v33 = *(_DWORD *)(HIDWORD(v74) + 1084); if ( *(_DWORD *)(v33 + 388) ) { if ( *(_DWORD *)(v33 + 392) < 0x10u ) v34 = (const char *)(v33 + 372); else v34 = *(const char **)(v33 + 372); } else { v34 = (const char *)(*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v33 + 444) + 484))(*(_DWORD *)(v33 + 444)); } v19 = strcmp(v34, (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))()) == 0; v35 = *((_DWORD *)v2 + 1291); v2[5204] = !v19; if ( v35 ) { v36 = sub_6C81E0(v2, &v78, v35); v81 = 0; if ( v36[5] >= 0x10u ) v36 = (_DWORD *)*v36; v37 = v36; v38 = (char *)sub_40A910(2106490755); v39 = sub_7549E0(v38, v37); v40 = *(_DWORD *)(*((_DWORD *)v2 + 17) + 360); if ( v40 ) (*(void (__stdcall **)(char *))(*(_DWORD *)v40 + 472))(v39); v81 = -1; if ( v80 >= 0x10 ) operator delete(v78); v80 = 15; v79 = 0; LOBYTE(v78) = 0; } v41 = *((_DWORD *)v2 + 33); v2[5188] = 0; *(_WORD *)(v2 + 5225) = 0; v2[5224] = 0; v2[5261] = 0; if ( v41 == 1 ) { HIDWORD(v74) = *((unsigned __int16 *)v2 + 68) - *((unsigned __int16 *)v2 + 69); *((float *)v2 + 1308) = (double)SHIDWORD(v74); v42 = 0.0; } else { v42 = 0.0; *((float *)v2 + 1308) = 0.0; } *((float *)v2 + 1307) = v42; *((_WORD *)v2 + 2626) = 0; *((float *)v2 + 1305) = v42; if ( v41 == 1 ) { v43 = (*(int (**)(void))(**(_DWORD **)(*((_DWORD *)v2 + 17) + 348) + 144))(); v44 = *((unsigned __int16 *)v2 + 69); v45 = v43 - 25; LODWORD(v73) = *((unsigned __int16 *)v2 + 68); HIDWORD(v74) = v43 - 25; v46 = (double)(unsigned int)(v43 - 25) / (double)SLODWORD(v73); v47 = *((_DWORD *)v2 + 17); *((float *)v2 + 1305) = (double)(LODWORD(v73) - v44) * v46 + *((float *)v2 + 1305); v48 = *(int **)(v47 + 348); v49 = *v48; v73 = *(float *)(v47 + 344); v50 = (*(int (__thiscall **)(int *))(v49 + 164))(v48); v51 = *v48; HIDWORD(v74) = v50; v52 = (double)v50; v53 = *(int (__thiscall **)(int *))(v51 + 168); v70 = v52 + *((float *)v2 + 1305); HIDWORD(v74) = v53(v48) - 10; v54 = (double)SHIDWORD(v74); v55 = v73; *(float *)(LODWORD(v73) + 88) = v70; *(float *)&v71 = v54; *(float *)(LODWORD(v55) + 92) = *(float *)&v71; v72 = 1.0; *(float *)(LODWORD(v55) + 96) = 1.0; v56 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(*((_DWORD *)v2 + 17) + 352) + 468); v74 = (signed __int64)*((float *)v2 + 1305); v56(v45 - v74); } else { v61 = *((_DWORD *)v2 + 17); *((float *)v2 + 1305) = v42; v62 = (*(int (**)(void))(**(_DWORD **)(v61 + 348) + 144))(); v63 = **(_DWORD **)(*((_DWORD *)v2 + 17) + 352); v74 = (signed __int64)*((float *)v2 + 1305); (*(void (__stdcall **)(_DWORD))(v63 + 468))(v62 - 7 - v74); } v57 = *((_DWORD *)v2 + 17); v58 = *(_DWORD *)(v57 + 348); v59 = *(_DWORD *)(v57 + 352); HIDWORD(v74) = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v58 + 164))(*(_DWORD *)(v57 + 348)); v60 = *(int (__thiscall **)(int))(*(_DWORD *)v58 + 168); v70 = (double)SHIDWORD(v74) + *((float *)v2 + 1305) + 8.0; HIDWORD(v74) = v60(v58); *(float *)&v71 = (double)SHIDWORD(v74); v64 = v71; *(float *)(v59 + 88) = v70; v72 = 1.0; *(_DWORD *)(v59 + 92) = v64; *(float *)(v59 + 96) = 1.0; sub_6BA650(&dword_AB6520, 32); unknown_libname_12(&dword_AB6520); v65 = *((_DWORD *)v2 + 33); v2[5236] = 0; v2[72] = v65 == 2 || v65 == 3; *(_WORD *)(v2 + 5237) = 0; v2[5239] = 0; sub_72A250(*((_DWORD ***)v2 + 17), 1, 0, 0); v66 = (_DWORD *)*((_DWORD *)v2 + 17); *((_DWORD *)v2 + 38) = 0; sub_729FC0(v66, 0, 0); sub_72A4B0(*((char **)v2 + 17), *((_DWORD *)v2 + 1291)); v2[5260] = 1; *((_DWORD *)v2 + 1322) = 1; return 1; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); //----- (006C9050) -------------------------------------------------------- _DWORD *__thiscall sub_6C9050(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx signed int v4; // edi CHAR *v5; // eax CHAR *v6; // eax const CHAR *v7; // ST08_4 char *v8; // eax char *v9; // eax CHAR *v10; // eax CHAR *v11; // eax const CHAR *v12; // ST08_4 char *v13; // eax char *v14; // eax CHAR *v15; // eax CHAR *v16; // eax const CHAR *v17; // ST08_4 char *v18; // eax char *v19; // eax CHAR *v20; // eax CHAR *v21; // eax const CHAR *v22; // ST08_4 char *v23; // eax char *v24; // eax CHAR *v25; // eax CHAR *v26; // eax const CHAR *v27; // ST08_4 char *v28; // eax char *v29; // eax CHAR *v30; // eax CHAR *v31; // eax CHAR *v32; // eax CHAR *v33; // eax const CHAR *v34; // ST08_4 char *v35; // eax char *v36; // eax CHAR *v37; // eax CHAR *v38; // eax int v39; // eax int v40; // eax _DWORD *v41; // eax _DWORD *v42; // ST08_4 const char *v43; // eax int *v44; // eax int v45; // edi _DWORD *v46; // eax bool v47; // cf _DWORD *v48; // ST08_4 const char *v49; // eax int v50; // eax _DWORD *v51; // eax _DWORD *v52; // ST08_4 const char *v53; // eax char v55; // [esp+10h] [ebp-13Ch] _DWORD *v56; // [esp+14h] [ebp-138h] int v57; // [esp+18h] [ebp-134h] int v58; // [esp+1Ch] [ebp-130h] void *v59; // [esp+20h] [ebp-12Ch] unsigned int v60; // [esp+34h] [ebp-118h] char v61; // [esp+3Ch] [ebp-110h] int v62; // [esp+148h] [ebp-4h] a2[5] = 15; a2[4] = 0; v3 = this; v56 = a2; *(_BYTE *)a2 = 0; v4 = a3; v62 = 0; v57 = 1; if ( a3 >= 2 ) { if ( a3 >= 4 ) { if ( a3 >= 10 ) { if ( a3 >= 16 ) { if ( a3 >= 17 ) { if ( a3 >= 31 ) { if ( a3 >= 46 ) { v37 = (CHAR *)sub_40A910(-1914002745); sub_401E30(a2, v37); sub_401E30(a2, "\n"); v38 = (CHAR *)sub_40A910(792585995); sub_401E30(a2, v38); sub_401E30(a2, "\n"); } else { v32 = (CHAR *)sub_40A910(777027188); sub_401E30(a2, v32); sub_401E30(a2, "\n"); v33 = (CHAR *)sub_40A910(1928516025); sub_401E30(a2, v33); sub_401E30(a2, "\n"); v34 = sub_40A910(-218619859); v35 = (char *)sub_40A910(810031653); v36 = sub_7549E0(v35, v34); sub_401E30(a2, v36); sub_401E30(a2, "\n"); } } else { v30 = (CHAR *)sub_40A910(-539967767); sub_401E30(a2, v30); sub_401E30(a2, "\n"); v31 = (CHAR *)sub_40A910(840237707); sub_401E30(a2, v31); sub_401E30(a2, "\n"); } } else { v25 = (CHAR *)sub_40A910(-1801075261); sub_401E30(a2, v25); sub_401E30(a2, "\n"); v26 = (CHAR *)sub_40A910(-666429432); sub_401E30(a2, v26); sub_401E30(a2, "\n"); v27 = sub_40A910(-231989971); v28 = (char *)sub_40A910(810031653); v29 = sub_7549E0(v28, v27); sub_401E30(a2, v29); sub_401E30(a2, "\n"); } } else { v20 = (CHAR *)sub_40A910(894205563); sub_401D10((int)a2, v20, strlen(v20)); sub_401D10((int)a2, "\n", 1u); v21 = (CHAR *)sub_40A910(2045694400); sub_401D10((int)a2, v21, strlen(v21)); sub_401D10((int)a2, "\n", 1u); v22 = sub_40A910(573381677); v23 = (char *)sub_40A910(810031653); v24 = sub_7549E0(v23, v22); sub_401D10((int)a2, v24, strlen(v24)); sub_401D10((int)a2, "\n", 1u); v4 = a3; } } else { v15 = (CHAR *)sub_40A910(2105045221); sub_401D10((int)a2, v15, strlen(v15)); sub_401D10((int)a2, "\n", 1u); v16 = (CHAR *)sub_40A910(-1027861960); sub_401D10((int)a2, v16, strlen(v16)); sub_401D10((int)a2, "\n", 1u); v17 = sub_40A910(-218619091); v18 = (char *)sub_40A910(810031653); v19 = sub_7549E0(v18, v17); sub_401D10((int)a2, v19, strlen(v19)); sub_401D10((int)a2, "\n", 1u); v4 = a3; } } else { v10 = (CHAR *)sub_40A910(-1888583214); sub_401D10((int)a2, v10, strlen(v10)); sub_401D10((int)a2, "\n", 1u); v11 = (CHAR *)sub_40A910(-726523099); sub_401D10((int)a2, v11, strlen(v11)); sub_401D10((int)a2, "\n", 1u); v12 = sub_40A910(-218620883); v13 = (char *)sub_40A910(810031653); v14 = sub_7549E0(v13, v12); sub_401D10((int)a2, v14, strlen(v14)); sub_401D10((int)a2, "\n", 1u); v4 = a3; } } else { v5 = (CHAR *)sub_40A910(1955976654); sub_401D10((int)a2, v5, strlen(v5)); sub_401D10((int)a2, "\n", 1u); v6 = (CHAR *)sub_40A910(-1204344813); sub_401D10((int)a2, v6, strlen(v6)); sub_401D10((int)a2, "\n", 1u); v7 = sub_40A910(-218620883); v8 = (char *)sub_40A910(810031653); v9 = sub_7549E0(v8, v7); sub_401D10((int)a2, v9, strlen(v9)); sub_401D10((int)a2, "\n", 1u); v4 = a3; } v39 = v3[1322]; if ( v39 != 2 && v39 != 4 ) v40 = sub_7545D0(v3 + 1227, v4, v3[1291]); else v40 = sub_7545D0(v3 + 1327, v4, v3[1291]); if ( v40 ) { v41 = sub_6C81E0(v3, &v59, v40); v62 = 1; if ( v41[5] >= 0x10u ) v41 = (_DWORD *)*v41; v42 = v41; v43 = sub_40A910(-85611749); sprintf(&v61, v43, v42); LOBYTE(v62) = 0; if ( v60 >= 0x10 ) operator delete(v59); } sub_401D10((int)a2, &v61, strlen(&v61)); sub_401D10((int)a2, "\n", 1u); v58 = *((unsigned __int16 *)dword_AD8EBC + 274); v44 = *sub_6CA9F0(v3 + 24, (int **)&v55, &v58); if ( v44 == (int *)v3[25] ) { v45 = 0; } else { v45 = v44[a3 + 4]; if ( v45 ) { v46 = sub_6C81E0(v3, &v59, v44[a3 + 4]); v47 = v46[5] < 0x10u; v62 = 2; if ( !v47 ) v46 = (_DWORD *)*v46; v48 = v46; v49 = sub_40A910(861019414); sprintf(&v61, v49, v48); LOBYTE(v62) = 0; if ( v60 >= 0x10 ) operator delete(v59); sub_401D10((int)a2, &v61, strlen(&v61)); sub_401D10((int)a2, "\n", 1u); } } v50 = sub_6C5790(v3, a3) - v45; if ( v50 ) { v51 = sub_6C81E0(v3, &v59, v50); v62 = 3; if ( v51[5] >= 0x10u ) v51 = (_DWORD *)*v51; v52 = v51; v53 = sub_40A910(1311702359); sprintf(&v61, v53, v52); LOBYTE(v62) = 0; if ( v60 >= 0x10 ) operator delete(v59); sub_401D10((int)a2, &v61, strlen(&v61)); } return a2; } //----- (006C9780) -------------------------------------------------------- signed int __thiscall sub_6C9780(_DWORD *this, _BYTE *a2) { int v2; // eax bool v3; // zf int v4; // ebx int *v5; // edi char *v6; // esi int *v7; // eax bool v8; // cf int v9; // edi int *v10; // eax int v11; // ST0C_4 int v12; // ST10_4 int v13; // ST14_4 int v14; // ST18_4 int v15; // ST04_4 char *v16; // eax char *v17; // eax _DWORD *v18; // ST18_4 int v19; // edx char v21; // [esp+10h] [ebp-4Ch] unsigned __int8 *v22; // [esp+20h] [ebp-3Ch] _DWORD *v23; // [esp+24h] [ebp-38h] int v24; // [esp+28h] [ebp-34h] int *v25; // [esp+2Ch] [ebp-30h] void *v26; // [esp+30h] [ebp-2Ch] int v27; // [esp+40h] [ebp-1Ch] unsigned int v28; // [esp+44h] [ebp-18h] int v29; // [esp+58h] [ebp-4h] v23 = this; v22 = a2; if ( a2 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = *a2 == 0; v4 = v2; v24 = 0; if ( !v3 ) { v5 = (int *)(a2 + 3); v25 = (int *)(a2 + 3); do { v6 = sub_664AB0(dword_AD8C90, *((_WORD *)v5 - 1)); if ( v6 && *v5 ) { v7 = sub_6C81E0(v23, &v26, *v5); v8 = (unsigned int)v7[5] < 0x10; v29 = 0; if ( v8 ) v9 = (int)v7; else v9 = *v7; v10 = (int *)sub_4B1B10((float *)&v21, 0x32u); v11 = *v10; v12 = v10[1]; v13 = v10[2]; v14 = v10[3]; v15 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v6 + 84))(v6, v9); v16 = (char *)sub_40A910(1195778186); v17 = sub_7549E0(v16, v15); sub_492030(v4, v9, (int)v6, (int)v17, v11, v12, v13, v14); v29 = -1; if ( v28 >= 0x10 ) operator delete(v26); v18 = *(_DWORD **)(v4 + 1040); v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_8F81A0(&unk_BA6B10, v18); v5 = v25; } v19 = *v22; v5 = (int *)((char *)v5 + 6); ++v24; v25 = v5; } while ( v24 < v19 ); } } return 1; } //----- (006C9900) -------------------------------------------------------- LONG __thiscall sub_6C9900(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi _DWORD *v4; // ST08_4 _DWORD *v5; // ST04_4 _DWORD *v6; // ST08_4 _DWORD *v7; // ST04_4 _DWORD *v9; // [esp+10h] [ebp-18h] _DWORD *v10; // [esp+14h] [ebp-14h] _DWORD *v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v1 = this; v11 = this; *this = &MHDiceGameTask::`vftable'; this[2] = &MHDiceGameTask::`vftable'; v12 = 6; nullsub_6(this + 1327); v2 = v1[1303]; LOBYTE(v12) = 5; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[1302]; LOBYTE(v12) = 4; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); nullsub_6(v1 + 1227); LOBYTE(v12) = 2; nullsub_6(v1 + 39); v10 = v1 + 28; v4 = (_DWORD *)v1[29]; v5 = *(_DWORD **)v1[29]; LOBYTE(v12) = 7; sub_6CAB30(v1 + 28, (int *)&v9, v5, v4); operator delete((void *)v1[29]); v9 = v1 + 24; v6 = (_DWORD *)v1[25]; v7 = *(_DWORD **)v1[25]; LOBYTE(v12) = 8; sub_6CB340(v1 + 24, (int *)&v10, v7, v6); operator delete((void *)v1[25]); v12 = -1; return sub_49FA00(v1); } // 9F8BB4: using guessed type void *MHDiceGameTask::`vftable'; // 9F8BD0: using guessed type void *MHDiceGameTask::`vftable'; //----- (006C9A30) -------------------------------------------------------- void ***__thiscall sub_6C9A30(void ***this) { void ***v1; // esi void **v2; // eax void **v3; // eax void **v4; // edi void **v5; // edi void **v7; // [esp+10h] [ebp-30h] void **v8; // [esp+1Ch] [ebp-24h] void ***v9; // [esp+28h] [ebp-18h] char *v10; // [esp+2Ch] [ebp-14h] char *v11; // [esp+30h] [ebp-10h] int v12; // [esp+3Ch] [ebp-4h] v1 = this; v9 = this; sub_6C2E00(this, 0); *v1 = &MHDiceGameTask::`vftable'; v1[2] = &MHDiceGameTask::`vftable'; v12 = 0; v1[26] = 0; v2 = (void **)operator new(0xECu); if ( !v2 ) { v10 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&v10); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v1[25] = v2; *v2 = v2; v1[25][1] = v1[25]; v1[25][2] = v1[25]; *((_BYTE *)v1[25] + 232) = 1; *((_BYTE *)v1[25] + 233) = 1; LOBYTE(v12) = 1; v1[30] = 0; v3 = (void **)operator new(0x1Cu); if ( !v3 ) { v11 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&v11); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v1[29] = v3; *v3 = v3; v1[29][1] = v1[29]; v1[29][2] = v1[29]; *((_BYTE *)v1[29] + 24) = 1; *((_BYTE *)v1[29] + 25) = 1; sub_8E5020(); sub_754400(v1 + 1227); *((float *)v1 + 1298) = 0.0; *((float *)v1 + 1299) = 0.0; *((float *)v1 + 1300) = 0.0; v1[1302] = 0; v1[1303] = 0; LOBYTE(v12) = 6; sub_754400(v1 + 1327); v1[20] = 0; v1[19] = 0; v1[17] = 0; v1[21] = 0; v1[22] = 0; v1[23] = 0; v1[36] = 0; *((_WORD *)v1 + 74) = 0; v4 = v1[1302]; LOBYTE(v12) = 7; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)v4 + 1) && v4 ) (*(void (__thiscall **)(void **, signed int))*v4)(v4, 1); v1[1302] = 0; } v5 = v1[1303]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)v5 + 1) && v5 ) (*(void (__thiscall **)(void **, signed int))*v5)(v5, 1); v1[1303] = 0; } v1[1393] = 0; *((float *)v1 + 1314) = 0.0; v1[1394] = 0; *((float *)v1 + 1312) = 0.0; v1[1395] = 0; v1[1396] = 0; *((_WORD *)v1 + 2626) = 0; *((_BYTE *)v1 + 5260) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8BB4: using guessed type void *MHDiceGameTask::`vftable'; // 9F8BD0: using guessed type void *MHDiceGameTask::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006C9C50) -------------------------------------------------------- LONG __cdecl sub_6C9C50(int a1) { LONG result; // eax void ***v2; // eax void ***v3; // esi int (__thiscall ***v4)(_DWORD, signed int); // edi result = dword_B9DE5C; if ( dword_B9DE5C ) return (**(int (__stdcall ***)(int))(result + 8))(a1); v2 = (void ***)operator new(0x15D8u); if ( v2 ) v3 = sub_6C9A30(v2); else v3 = 0; result = dword_B9DE5C; if ( (void ***)dword_B9DE5C == v3 ) { LABEL_12: if ( !result ) return result; return (**(int (__stdcall ***)(int))(result + 8))(a1); } if ( dword_B9DE5C ) { v4 = (int (__thiscall ***)(_DWORD, signed int))dword_B9DE5C; result = InterlockedDecrement((volatile LONG *)(dword_B9DE5C + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } dword_B9DE5C = (int)v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)v3 + 1); result = dword_B9DE5C; goto LABEL_12; } return result; } // B9DE5C: using guessed type int dword_B9DE5C; //----- (006C9D20) -------------------------------------------------------- signed int __thiscall sub_6C9D20(int this, _WORD *a2) { int v2; // esi v2 = this; if ( *a2 == 7448 && *(_DWORD *)(this + 68) ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 84) + 260))() ) sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); else sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); sub_6CB6E0(*(_DWORD **)(v2 + 84), (int)a2); sub_739ED0(*(_DWORD **)(v2 + 84)); } return 1; } //----- (006C9D90) -------------------------------------------------------- char __userpurge sub_6C9D90@(unsigned __int8 *a1@, int a2@, int a3, int a4, int a5, unsigned __int16 *a6) { char result; // al if ( a3 != 4 ) { if ( a3 == 43 ) { switch ( a4 ) { case 2: sub_6C8790(a1, a6); return 1; case 3: sub_6C7CC0(a1, (__int16 *)a6); return 1; case 4: sub_6C7400(a1, a6); return 1; case 5: sub_6C5DA0((int)a1, a2); return 1; case 6: sub_6C7E20(a1, a6); return 1; case 7: sub_6C76E0(a1, (int)a6); return 1; case 8: case 9: return 1; case 10: sub_6CB510(a1, (int)a6); return 1; case 14: sub_6C7F90(a6); return 1; case 18: sub_6C52E0((int)a6); return 1; case 25: sub_6C9D20((int)a1, a6); return 1; case 27: sub_6C5810(a1, a6); return 1; case 28: sub_6C5970(a1, a6); return 1; case 30: sub_6C59E0(a1, a6); return 1; case 31: sub_6C5C50(a1, a6); return 1; case 33: sub_6C5250(a1, a6); return 1; case 34: sub_6C4E30(a1, a6); return 1; case 38: sub_6C4DB0((int *)a1, (int)a6); return 1; case 39: sub_6C54F0(a6); return 1; case 42: sub_6C9780(a1, a6); return 1; case 43: sub_6C78A0((int)a1, a2, (int)a6); return 1; case 44: sub_6C4FE0((int)a1, (int)a6); return 1; default: return 0; } } else if ( a3 == 47 ) { switch ( a4 ) { case 3: sub_727380(a1, a6); result = 1; break; case 4: sub_727410((int *)a6); result = 1; break; case 5: sub_727480((int *)a6); result = 1; break; case 12: sub_7270D0((int)a6); result = 1; break; case 14: sub_727110(a6); result = 1; break; case 16: sub_727900(a6); result = 1; break; case 20: sub_727970(a6); result = 1; break; case 24: sub_7279D0(a1, (int)a6); result = 1; break; case 27: sub_727C90((int *)a6); result = 1; break; case 28: sub_727850((int)a6); result = 1; break; case 30: sub_73C3C0((int)a6); result = 1; break; case 101: sub_728C70(a1, a6); result = 1; break; case 102: sub_729460(a1, (__int16 *)a6); result = 1; break; case 103: sub_727E70(a1, a6); result = 1; break; case 105: sub_727230(a1, a6); result = 1; break; case 106: sub_7286F0(a1, (int)a6); result = 1; break; case 110: sub_7295D0((int)a1, a6); result = 1; break; case 112: sub_729650((int)a1, a6); result = 1; break; case 114: sub_728100(a1, a6); result = 1; break; case 115: sub_7282C0(a1, a6); result = 1; break; case 117: sub_728330(a1, a6); result = 1; break; case 118: sub_7285A0(a1, a6); result = 1; break; case 119: sub_727350(a1, a6); result = 1; break; case 123: sub_727290((int *)a1, (int)a6); result = 1; break; case 124: sub_727BD0(a6); result = 1; break; case 126: sub_727310((int)a6); result = 1; break; case 127: sub_727CF0(a1, a6); result = 1; break; case 128: sub_728A70((int)a1, a2, (int)a6); result = 1; break; case 129: sub_727670((int)a1, (int)a6); result = 1; break; case 201: sub_73C260(a1, a6); result = 1; break; case 203: sub_73C660(a1, a6); result = 1; break; case 205: sub_73BEC0(a1, a6); result = 1; break; case 207: sub_73BF00(a1, a6); result = 1; break; case 209: sub_73BF80(a1, a6); result = 1; break; case 210: sub_73BFB0((int)a6); result = 1; break; case 216: sub_73BFC0(a1, a6); result = 1; break; case 218: sub_73C710((_DWORD **)a1, a6); result = 1; break; case 220: sub_73C680((_DWORD **)a1, a6); result = 1; break; case 221: sub_73C4A0(a6); result = 1; break; default: return 0; } return result; } return 0; } if ( a4 != 222 ) return 0; sub_7277C0((int *)a6); return 1; } //----- (006CA390) -------------------------------------------------------- int __cdecl sub_6CA390(int a1) { int result; // eax int i; // ecx result = a1; for ( i = *(_DWORD *)(a1 + 8); !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 8) ) result = i; return result; } //----- (006CA3C0) -------------------------------------------------------- _DWORD *__cdecl sub_6CA3C0(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 233) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 233) ); } return result; } //----- (006CA3E0) -------------------------------------------------------- _DWORD *__thiscall sub_6CA3E0(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 233) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 233) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 233); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (006CA440) -------------------------------------------------------- _DWORD *__thiscall sub_6CA440(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 233) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 233) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 233) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 233) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 233) ) goto LABEL_11; return result; } //----- (006CA4C0) -------------------------------------------------------- int __thiscall sub_6CA4C0(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 233) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (006CA520) -------------------------------------------------------- void *__stdcall sub_6CA520(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0xAAAAAAA || (result = operator new(24 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006CA580) -------------------------------------------------------- int sub_6CA580() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD99C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD99C: using guessed type int dword_ACD99C; //----- (006CA5A0) -------------------------------------------------------- int sub_6CA5A0() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9A0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9A0: using guessed type int dword_ACD9A0; //----- (006CA5C0) -------------------------------------------------------- int __cdecl sub_6CA5C0(unsigned int a1) { unsigned int v1; // esi v1 = a1; if ( a1 >= sub_6CA580() ) return 0; while ( !sub_7474E0((_DWORD *)(dword_ACD99C + 4), v1) ) { if ( ++v1 >= sub_6CA580() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD99C + 4), v1); } // ACD99C: using guessed type int dword_ACD99C; //----- (006CA610) -------------------------------------------------------- _DWORD *__thiscall sub_6CA610(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 233) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (006CA670) -------------------------------------------------------- _DWORD *__cdecl sub_6CA670(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax int v5; // esi if ( a1 == a2 ) return a3; v3 = a1 + 2; result = a3; do { *result = *(v3 - 2); result[1] = *(v3 - 1); result[2] = *v3; result[3] = v3[1]; result[4] = v3[2]; v5 = v3[3]; v3 += 6; result[5] = v5; result += 6; } while ( v3 - 2 != a2 ); return result; } //----- (006CA6C0) -------------------------------------------------------- int *__thiscall sub_6CA6C0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 25) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_691190(&a3); if ( *(_BYTE *)(*v3 + 25) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 25) ) { v9 = (_DWORD *)v6; } else { v9 = sub_691120((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 25) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_691100(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 25) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 24); *(_BYTE *)(v5 + 24) = *((_BYTE *)v3 + 24); *((_BYTE *)v3 + 24) = v13; LABEL_35: if ( v18[24] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 24) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[24] ) { v15[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_691540(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[25] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 24) = 1; v15[24] = 0; sub_8DCA20(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) = 1; sub_691540(i, v6); break; } } else { if ( !v15[24] ) { v15[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_8DCA20(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[25] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 24) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) = 1; v15[24] = 0; sub_691540(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*(_DWORD *)v15 + 24) = 1; sub_8DCA20(i, (_DWORD *)v6); break; } } v15[24] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 24) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (006CA910) -------------------------------------------------------- int __thiscall sub_6CA910(_DWORD *this, int a2, void *a3, int a4) { _WORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned __int16 v10; // di int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 25) ) { v10 = *((_WORD *)a3 + 6); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v7 + 12) >= v10; else v9 = v10 < *(_WORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 25) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_697640(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_8DCA80(&a4); v11 = a4; v4 = a3; } if ( *(_WORD *)(v11 + 12) >= v4[6] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_697640(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006CA9F0) -------------------------------------------------------- int **__thiscall sub_6CA9F0(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 233) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (006CAA70) -------------------------------------------------------- int __thiscall sub_6CAA70(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[25] ) { do { sub_691BF0((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 25) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (006CAAC0) -------------------------------------------------------- int **__thiscall sub_6CAAC0(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 25) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (006CAB30) -------------------------------------------------------- int *__thiscall sub_6CAB30(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 25) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 25) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 25); j = (int *)*j ) v10 = j; a3 = v10; } } sub_6CA6C0(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_6CAA70(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (006CABD0) -------------------------------------------------------- int __thiscall sub_6CABD0(_DWORD *this, int a2, char a3, int a4, void *a5) { _DWORD *v5; // edi unsigned int v6; // eax void *v7; // edx int v8; // ecx void **v9; // ecx int v10; // ecx _DWORD *v11; // esi int v12; // eax int *v13; // ecx int v14; // ecx _DWORD *v15; // eax int v16; // ecx void **v17; // ecx _DWORD *v18; // eax _DWORD *v19; // ecx int v20; // edx int v21; // edx _DWORD *v22; // edx int v23; // edx _DWORD *v24; // edx int result; // eax v5 = this; v6 = this[2]; if ( v6 >= 0x129E411 ) { operator delete(a5); std::_Xlength_error("map/set too long"); } v7 = a5; this[2] = v6 + 1; *((_DWORD *)a5 + 1) = a4; v8 = this[1]; if ( a4 == v8 ) { *(_DWORD *)(v8 + 4) = a5; *(_DWORD *)v5[1] = a5; *(_DWORD *)(v5[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v9 = (void **)v5[1]; if ( (void *)a4 == *v9 ) *v9 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v10 = v5[1]; if ( a4 == *(_DWORD *)(v10 + 8) ) *(_DWORD *)(v10 + 8) = a5; } v11 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 232) ) { do { v12 = v11[1]; v13 = *(int **)(v12 + 4); if ( v12 == *v13 ) { v14 = v13[2]; if ( *(_BYTE *)(v14 + 232) ) { if ( v11 == *(_DWORD **)(v12 + 8) ) { v11 = (_DWORD *)v11[1]; v15 = *(_DWORD **)(v12 + 8); v11[2] = *v15; if ( !*(_BYTE *)(*v15 + 233) ) *(_DWORD *)(*v15 + 4) = v11; v15[1] = v11[1]; v16 = v5[1]; if ( v11 == *(_DWORD **)(v16 + 4) ) { *(_DWORD *)(v16 + 4) = v15; } else { v17 = (void **)v11[1]; if ( v11 == *v17 ) *v17 = v15; else v17[2] = v15; } *v15 = v11; v11[1] = v15; } *(_BYTE *)(v11[1] + 232) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 232) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)*v18; *v18 = *(_DWORD *)(*v18 + 8); v20 = v19[2]; if ( !*(_BYTE *)(v20 + 233) ) *(_DWORD *)(v20 + 4) = v18; v19[1] = v18[1]; v21 = v5[1]; if ( v18 == *(_DWORD **)(v21 + 4) ) { *(_DWORD *)(v21 + 4) = v19; v19[2] = v18; } else { v22 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)v22[2] ) v22[2] = v19; else *v22 = v19; v19[2] = v18; } LABEL_43: v7 = a5; v18[1] = v19; continue; } } else { v14 = *v13; if ( *(_BYTE *)(v14 + 232) ) { if ( v11 == *(_DWORD **)v12 ) { v11 = (_DWORD *)v11[1]; sub_6CA4C0(v5, (_DWORD *)v12); } *(_BYTE *)(v11[1] + 232) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 232) = 0; v18 = *(_DWORD **)(v11[1] + 4); v19 = (_DWORD *)v18[2]; v18[2] = *v19; if ( !*(_BYTE *)(*v19 + 233) ) *(_DWORD *)(*v19 + 4) = v18; v19[1] = v18[1]; v23 = v5[1]; if ( v18 == *(_DWORD **)(v23 + 4) ) { *(_DWORD *)(v23 + 4) = v19; } else { v24 = (_DWORD *)v18[1]; if ( v18 == (_DWORD *)*v24 ) *v24 = v19; else v24[2] = v19; } *v19 = v18; goto LABEL_43; } } *(_BYTE *)(v12 + 232) = 1; *(_BYTE *)(v14 + 232) = 1; *(_BYTE *)(*(_DWORD *)(v11[1] + 4) + 232) = 0; v11 = *(_DWORD **)(v11[1] + 4); } while ( !*(_BYTE *)(v11[1] + 232) ); } *(_BYTE *)(*(_DWORD *)(v5[1] + 4) + 232) = 1; result = a2; *(_DWORD *)a2 = v7; return result; } //----- (006CADE0) -------------------------------------------------------- _DWORD *__thiscall sub_6CADE0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0xECu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 116) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_WORD *)result + 6) = *(_WORD *)a2; qmemcpy(result + 4, v4 + 4, 0xD8u); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006CAE60) -------------------------------------------------------- _DWORD *__thiscall sub_6CAE60(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // edx void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x1Cu); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 12) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_WORD *)result + 6) = *(_WORD *)a2; result[4] = *((_DWORD *)v4 + 1); result[5] = *((_DWORD *)v4 + 2); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006CAEE0) -------------------------------------------------------- int *__thiscall sub_6CAEE0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 233) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_6CA3E0(&a3); if ( *(_BYTE *)(*v3 + 233) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 233) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 233) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6CA3C0((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 233) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6CA390(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 233) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 233) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 232); *(_BYTE *)(v5 + 232) = *((_BYTE *)v3 + 232); *((_BYTE *)v3 + 232) = v13; LABEL_35: if ( v18[232] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 232) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[232] ) { v15[232] = 1; *(_BYTE *)(v6 + 232) = 0; sub_6CA610(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[233] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 232) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 232) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 232) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 232) = 1; v15[232] = 0; sub_6CA4C0(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[232] = *(_BYTE *)(v6 + 232); *(_BYTE *)(v6 + 232) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 232) = 1; sub_6CA610(i, v6); break; } } else { if ( !v15[232] ) { v15[232] = 1; *(_BYTE *)(v6 + 232) = 0; sub_6CA4C0(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[233] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 232) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 232) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 232) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 232) = 1; v15[232] = 0; sub_6CA610(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[232] = *(_BYTE *)(v6 + 232); *(_BYTE *)(v6 + 232) = 1; *(_BYTE *)(*(_DWORD *)v15 + 232) = 1; sub_6CA4C0(i, (_DWORD *)v6); break; } } v15[232] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 232) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (006CB1C0) -------------------------------------------------------- void __stdcall sub_6CB1C0(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 233) ) { do { sub_6CB1C0(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 233) ); } } //----- (006CB200) -------------------------------------------------------- int __thiscall sub_6CB200(_DWORD *this, int a2, void *a3, int a4) { _WORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned __int16 v10; // di int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 233) ) { v10 = *((_WORD *)a3 + 6); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v7 + 12) >= v10; else v9 = v10 < *(_WORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 233) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_6CABD0(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_6CA440(&a4); v11 = a4; v4 = a3; } if ( *(_WORD *)(v11 + 12) >= v4[6] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_6CABD0(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006CB2E0) -------------------------------------------------------- int __thiscall sub_6CB2E0(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _BYTE *v3; // ebx int *v4; // esi int result; // eax v1 = this; v2 = this[1]; v3 = *(_BYTE **)(v2 + 4); v4 = *(int **)(v2 + 4); if ( !v3[233] ) { do { sub_6CB1C0((void *)v4[2]); v4 = (int *)*v4; operator delete(v3); v3 = v4; } while ( !*((_BYTE *)v4 + 233) ); } *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)v1[1] = v1[1]; result = v1[1]; *(_DWORD *)(result + 8) = result; v1[2] = 0; return result; } //----- (006CB340) -------------------------------------------------------- int *__thiscall sub_6CB340(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 233) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 233) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 233); j = (int *)*j ) v10 = j; a3 = v10; } } sub_6CAEE0(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_6CB2E0(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (006CB400) -------------------------------------------------------- unsigned int __thiscall sub_6CB400(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 _DWORD *v7; // ebx unsigned int v8; // edx int v9; // edi _DWORD *i; // eax int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; if ( (unsigned int)a2 > 0xAAAAAAA ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 24; if ( result < (unsigned int)a2 ) { v4 = sub_6CA520(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v12 = v4; v14 = 0; sub_73C8E0(v6, v5, v4); v7 = (_DWORD *)*v2; v8 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(v2[1] - *v2)) >> 32) >> 2; v9 = v8 + (v8 >> 31); if ( *v2 ) { for ( i = (_DWORD *)v2[1]; v7 != i; v7 += 6 ) ; operator delete((void *)*v2); } result = (unsigned int)v12; v2[2] = (unsigned int)v12 + 24 * (_DWORD)a2; v2[1] = result + 24 * v9; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (006CB510) -------------------------------------------------------- signed int __thiscall sub_6CB510(_BYTE *this, int a2) { _DWORD *v2; // ecx _BYTE *v4; // [esp+0h] [ebp-4h] v4 = this; if ( sub_6C4EE0(this) ) { LOWORD(v4) = 7312; sub_6C7E20(v2, &v4); } return 1; } //----- (006CB540) -------------------------------------------------------- unsigned int __thiscall sub_6CB540(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 24; if ( 178956970 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 24; if ( v3 > result ) { if ( 178956970 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_6CB400(this, v5); } return result; } //----- (006CB5C0) -------------------------------------------------------- void __thiscall sub_6CB5C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_6CB340(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (006CB620) -------------------------------------------------------- _DWORD *__thiscall sub_6CB620(unsigned int *this, _DWORD *a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx _DWORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_6CB540(v2, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *a2; result[1] = a2[1]; result[2] = a2[2]; result[3] = a2[3]; result[4] = a2[4]; result[5] = a2[5]; } } else { v4 = (signed int)((unsigned __int64)(715827883i64 * (signed int)((signed int)a2 - *v2)) >> 32) >> 2; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_6CB540(v2, 1); v6 = (_DWORD *)(*v2 + 24 * v5); result = (_DWORD *)v2[1]; if ( result ) { *result = *v6; result[1] = v6[1]; result[2] = v6[2]; result[3] = v6[3]; result[4] = v6[4]; result[5] = v6[5]; v2[1] += 24; return result; } } v2[1] += 24; return result; } //----- (006CB6E0) -------------------------------------------------------- void __thiscall sub_6CB6E0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // ecx _DWORD *v5; // eax _DWORD *v6; // ecx signed int v7; // ebx int *v8; // esi int v9; // ecx int v10; // edx int v11; // eax int v12; // ecx int v13; // edx signed int v14; // ebx _DWORD *v15; // esi unsigned int *v16; // [esp+8h] [ebp-24h] unsigned int *v17; // [esp+Ch] [ebp-20h] int v18; // [esp+10h] [ebp-1Ch] int v19; // [esp+14h] [ebp-18h] int v20; // [esp+18h] [ebp-14h] int v21; // [esp+1Ch] [ebp-10h] int v22; // [esp+20h] [ebp-Ch] int v23; // [esp+24h] [ebp-8h] v2 = this; if ( a2 ) { v3 = (_DWORD *)this[156]; v4 = (_DWORD *)this[155]; v16 = v2 + 155; if ( v4 != v3 ) v2[156] = sub_6CA670(v3, v3, v4); v5 = (_DWORD *)v2[160]; v6 = (_DWORD *)v2[159]; v17 = v2 + 159; if ( v6 != v5 ) v2[160] = sub_6CA670(v5, v5, v6); v7 = 0; if ( *(_BYTE *)(a2 + 2) ) { v8 = (int *)(a2 + 3); do { v9 = v8[1]; v10 = v8[2]; v18 = *v8; v11 = v8[3]; v19 = v9; v12 = v8[4]; v21 = v11; v20 = v10; v13 = v8[5]; v22 = v12; v23 = v13; sub_6CB620(v16, &v18); ++v7; v8 += 6; } while ( v7 < *(unsigned __int8 *)(a2 + 2) ); } v14 = 0; if ( *(_BYTE *)(a2 + 483) ) { v15 = (_DWORD *)(a2 + 484); do { sub_6CB620(v17, v15); ++v14; v15 += 6; } while ( v14 < *(unsigned __int8 *)(a2 + 483) ); } } } //----- (006CB7E0) -------------------------------------------------------- void *__thiscall sub_6CB7E0(void *this, char a2) { void *v2; // esi v2 = this; sub_6C9900(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006CB830) -------------------------------------------------------- char __thiscall sub_6CB830(_DWORD *this, char a2) { _DWORD *v2; // esi int v3; // eax char v5; // [esp+7h] [ebp-1h] v2 = this; v3 = this[16]; if ( v3 != 1 && v3 != 2 ) { v3 = sub_685620(&byte_ADA230); if ( v3 ) { v3 = sub_6814F0((unsigned __int8 *)byte_AD9238, a2); if ( v3 > 0 ) { v5 = a2; LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 4, 98, &v5, 1u); v2[16] = 2; } } } return v3; } // AB7F2C: using guessed type void **off_AB7F2C; // ADA230: using guessed type char byte_ADA230; //----- (006CB8A0) -------------------------------------------------------- int sub_6CB8A0() { int result; // eax result = dword_B9DE64; if ( dword_B9DE64 ) *(_DWORD *)(dword_B9DE64 + 64) = 0; return result; } // B9DE64: using guessed type int dword_B9DE64; //----- (006CB8C0) -------------------------------------------------------- char __thiscall sub_6CB8C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = this[16]; if ( v3 != 1 && v3 != 2 && *(_DWORD *)dword_AD9E30 > 0 ) { HIBYTE(a2) = a2; LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 4, 92, (char *)&a2 + 3, 1u); v2[16] = 1; } return v3; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006CB910) -------------------------------------------------------- char __thiscall sub_6CB910(char *this, int a2, int a3, int a4, char *a5) { char *v5; // esi _DWORD **v6; // esi char result; // al unsigned __int16 *v8; // eax _DWORD **v9; // esi char *v10; // edi char *v11; // edi _DWORD *v12; // esi bool v13; // zf unsigned __int16 *v14; // ecx _DWORD **v15; // esi char *v16; // edi v5 = this; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( a2 != 4 ) return 0; switch ( a3 ) { case 95: *((_DWORD *)v5 + 16) = 0; v6 = (_DWORD **)(v5 + 8); if ( v6[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v6[1] + 4))(29, 0, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v6[1] + 20))(29, 0, v6); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v6)[5])(v6, 29, 0, v6); sub_681C50(byte_AD9238, *a5, 1); result = 1; break; case 97: v8 = (unsigned __int16 *)a5; *((_DWORD *)v5 + 16) = 0; v9 = (_DWORD **)(v5 + 8); v10 = sub_7549E0("err: %d", *v8); if ( v9[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v9[1] + 4))(25, v10, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); result = 1; break; case 101: v11 = a5; *((_DWORD *)v5 + 16) = 0; v12 = v5 + 8; v13 = v12[1] == 0; LOBYTE(a5) = *v11; if ( !v13 ) { (*(void (__stdcall **)(signed int, char **, _DWORD *))(*(_DWORD *)v12[1] + 4))(29, &a5, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, char **, _DWORD *))(*(_DWORD *)v12[1] + 20))(29, &a5, v12); } (*(void (__thiscall **)(_DWORD *, signed int, char **, _DWORD *))(*v12 + 20))(v12, 29, &a5, v12); sub_681C50(byte_AD9238, *v11, -1); result = 1; break; case 103: v14 = (unsigned __int16 *)a5; *((_DWORD *)v5 + 16) = 0; v15 = (_DWORD **)(v5 + 8); v16 = sub_7549E0("err: %d", *v14); if ( v15[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v15[1] + 4))(25, v16, v15); if ( v15[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v15[1] + 20))(25, v16, v15); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v15)[5])(v15, 25, v16, v15); result = 1; break; default: return 0; } return result; } //----- (006CBB00) -------------------------------------------------------- LONG __thiscall sub_6CBB00(_DWORD *this) { int v1; // esi LONG result; // eax void (__thiscall ***v3)(_DWORD, signed int); // edi v1 = (int)this; this[16] = 0; result = dword_B9DE64; if ( (_DWORD *)dword_B9DE64 != this ) { if ( dword_B9DE64 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))dword_B9DE64; if ( !InterlockedDecrement((volatile LONG *)(dword_B9DE64 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } dword_B9DE64 = v1; result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // B9DE64: using guessed type int dword_B9DE64; //----- (006CBB50) -------------------------------------------------------- int __thiscall sub_6CBB50(int *this) { int *v1; // esi int *v2; // edi signed int v3; // ecx int result; // eax signed int v5; // edx v1 = this; v2 = this + 1; v3 = 64; do { result = *v2; if ( *v2 != -1 ) { *v2 = result ^ *((unsigned __int8 *)v1 + 8709); v2[1] ^= *((unsigned __int8 *)v1 + 8710); v5 = 2; result = (int)v2 + 9; do { *(_BYTE *)(result - 1) ^= *((_BYTE *)v1 + (((_BYTE)v5 - 2) & 0x1F) + 8708); *(_BYTE *)result ^= *((_BYTE *)v1 + (((_BYTE)v5 - 1) & 0x1F) + 8708); *(_BYTE *)(result + 1) ^= *((_BYTE *)v1 + (v5 & 0x1F) + 8708); *(_BYTE *)(result + 2) ^= *((_BYTE *)v1 + (((_BYTE)v5 + 1) & 0x1F) + 8708); v5 += 4; result += 4; } while ( v5 - 2 < 128 ); } v2 += 34; --v3; } while ( v3 ); return result; } //----- (006CBCA0) -------------------------------------------------------- signed int __thiscall sub_6CBCA0(_DWORD *this, int a2) { signed int result; // eax _DWORD *v3; // edx _DWORD *v4; // ecx result = 0; if ( a2 == -1 ) { v4 = this + 1; while ( *v4 != -1 ) { ++result; v4 += 34; if ( result >= 64 ) return -1; } } else { v3 = this + 1; while ( 1 ) { if ( *v3 == -1 ) { --result; return result; } if ( *v3 > a2 ) break; ++result; v3 += 34; if ( result >= 64 ) return -1; } --result; } return result; } //----- (006CBE40) -------------------------------------------------------- int __thiscall sub_6CBE40(int *this, int a2, int a3) { signed int v3; // edx int *v4; // esi int v5; // eax v3 = 0; v4 = this + 1; while ( 1 ) { v5 = *v4; if ( *v4 == -1 || a2 < v5 ) return 0; if ( a2 == v5 && a3 == v4[1] ) break; ++v3; v4 += 34; if ( v3 >= 64 ) return 0; } return (int)&this[34 * v3 + 1]; } //----- (006CBE90) -------------------------------------------------------- int __thiscall sub_6CBE90(signed int *this) { __int64 v1; // rax signed int v2; // edi signed int *v3; // esi v1 = 0i64; v2 = -1; v3 = this + 1; do { if ( *v3 == -1 ) break; if ( v2 != *v3 ) { LODWORD(v1) = v1 + 1; v2 = *v3; } ++HIDWORD(v1); v3 += 34; } while ( SHIDWORD(v1) < 64 ); return v1; } //----- (006CBEC0) -------------------------------------------------------- signed int __thiscall sub_6CBEC0(signed int *this, unsigned int a2) { signed int result; // eax signed int v3; // esi signed int *v4; // edx signed int v5; // ecx result = -1; if ( a2 > 0x3F ) return -1; v3 = 0; v4 = this + 1; do { v5 = *v4; if ( *v4 == -1 || (signed int)a2 < v5 ) break; if ( a2 == v5 ) result = v4[1]; ++v3; v4 += 34; } while ( v3 < 64 ); return result; } //----- (006CBF30) -------------------------------------------------------- _DWORD *__thiscall sub_6CBF30(_DWORD *this) { _DWORD *v1; // esi v1 = this; memset(this + 1, -1, 0x2200u); *v1 = 0; v1[2177] = 689917234; v1[2178] = -1803431516; v1[2179] = 1482386196; v1[2180] = -953543731; v1[2181] = 710606797; v1[2182] = -1975659615; v1[2183] = 972304835; v1[2184] = 1276858049; return v1; } //----- (006CBFB0) -------------------------------------------------------- char __thiscall sub_6CBFB0(void *this, FILE *a2) { unsigned __int8 *v2; // esi FILE *v3; // edi char *v5; // ebx int i; // edi FILE *v7; // [esp+10h] [ebp+8h] v2 = (unsigned __int8 *)this; v3 = fopen((const char *)a2, "rb"); v7 = v3; if ( !v3 ) return 0; v5 = (char *)(v2 + 4); memset(v2 + 4, -1, 0x2200u); *(_DWORD *)v2 = 0; fread(v2, 1u, 4u, v3); *(_DWORD *)v2 ^= v2[8708]; if ( *(_DWORD *)v2 > 64 ) return 0; for ( i = 0; i < *(_DWORD *)v2; v5 += 136 ) { fread(v5, 1u, 0x88u, v7); ++i; } sub_6CBB50((int *)v2); return 1; } //----- (006CC050) -------------------------------------------------------- bool __cdecl sub_6CC050(int a1, int a2) { bool v3; // bl int v4; // [esp+8h] [ebp-48h] int v5; // [esp+Ch] [ebp-44h] int v6; // [esp+10h] [ebp-40h] int v7; // [esp+14h] [ebp-3Ch] int v8; // [esp+18h] [ebp-38h] int v9; // [esp+1Ch] [ebp-34h] int v10; // [esp+20h] [ebp-30h] int v11; // [esp+24h] [ebp-2Ch] int v12; // [esp+28h] [ebp-28h] int v13; // [esp+2Ch] [ebp-24h] int v14; // [esp+44h] [ebp-Ch] int v15; // [esp+48h] [ebp-8h] sub_6CC840(&v8); if ( !a2 || (*(int (__stdcall **)(int, int *))(*(_DWORD *)a2 + 48))(a2, &v13) || v13 != 20 || (*(int (__stdcall **)(int, int *, _DWORD, _DWORD))(*(_DWORD *)a2 + 52))(a2, &v11, 0, 0) ) { return 0; } v5 = v15; v4 = v14; v6 = v11; v7 = v12; v10 = 2; v9 = 100; v3 = sub_6CC860(&v8, a1, &v4); (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 56))(a2); return v3; } //----- (006CC110) -------------------------------------------------------- int __cdecl sub_6CC110(int a1, int *a2, int a3) { int v3; // ebx int v4; // edi int v5; // eax int v6; // ecx int v7; // edi int v8; // ebx bool v9; // sf int *v10; // eax int v11; // esi int *v12; // eax int v13; // edx int *v14; // eax int v15; // ecx int *v16; // eax int v17; // ecx int v18; // eax bool v19; // zf int result; // eax int v21; // [esp+14h] [ebp-3Ch] int v22; // [esp+18h] [ebp-38h] char v23; // [esp+1Ch] [ebp-34h] int v24; // [esp+34h] [ebp-1Ch] int v25; // [esp+38h] [ebp-18h] int v26; // [esp+3Ch] [ebp-14h] int v27; // [esp+40h] [ebp-10h] int v28; // [esp+44h] [ebp-Ch] int v29; // [esp+48h] [ebp-8h] v3 = a1; v4 = a3; if ( a3 && !(*(int (__stdcall **)(int, char *))(*(_DWORD *)a1 + 48))(a1, &v23) ) { if ( a2 ) { v5 = *a2; v6 = a2[1]; v7 = a2[2]; v8 = a2[3]; v26 = v5; v9 = v5 < 0; v27 = v6; v28 = v7; v29 = v8; v22 = 0; v10 = &v22; if ( !v9 ) v10 = &v26; v11 = *v10; v26 = *v10; v22 = 0; v12 = &v22; if ( v6 >= 0 ) v12 = &v27; v13 = *v12; v22 = v24; v27 = v13; v14 = &v22; if ( v24 >= v7 ) v14 = &v28; v15 = *v14; v22 = v25; v28 = v15; v16 = &v22; if ( v25 >= v8 ) v16 = &v29; v3 = a1; v4 = a3; v29 = *v16; v17 = v15 - v11; v18 = v29 - v13; } else { v17 = v24; v18 = v25; v26 = 0; v27 = 0; v28 = v24; v29 = v25; } if ( v17 > 0 && v18 > 0 && (*(int (__stdcall **)(int, int, int, signed int, signed int, int *, _DWORD))(*(_DWORD *)v4 + 144))( v4, v17, v18, 20, 3, &v21, 0) >= 0 ) { v19 = D3DXLoadSurfaceFromSurface(v21, 0, 0, v3, 0, &v26, 1, 0) == 0; result = v21; if ( v19 ) return result; (*(void (__stdcall **)(int))(*(_DWORD *)v21 + 8))(v21); } } return 0; } // 9447FC: using guessed type int __stdcall D3DXLoadSurfaceFromSurface(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (006CC250) -------------------------------------------------------- char __cdecl sub_6CC250(int a1, int a2, int *a3, int a4) { int v5; // eax int v6; // esi if ( !a4 ) return 0; v5 = sub_6CC110(a2, a3, a4); v6 = v5; if ( v5 ) { if ( sub_6CC050(a1, v5) ) { (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); return 1; } (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); } return 0; } //----- (006CC2A0) -------------------------------------------------------- char __usercall sub_6CC2A0@(int a1@, int a2, HWND hWnd, int a4, int a5, int a6) { int v7; // esi struct tagRECT *v8; // ebx int v9; // [esp-4h] [ebp-138h] int v10; // [esp+8h] [ebp-12Ch] struct tagRECT Rect; // [esp+Ch] [ebp-128h] int v12; // [esp+1Ch] [ebp-118h] int v13; // [esp+20h] [ebp-114h] char v14; // [esp+2Ch] [ebp-108h] char v15; // [esp+2Dh] [ebp-107h] if ( !a2 ) return 0; v9 = a1; v7 = *(_DWORD *)(a2 + 132); if ( !v7 || (*(int (__stdcall **)(int, _DWORD, int *))(*(_DWORD *)v7 + 32))(v7, 0, &v12) < 0 || (*(int (__stdcall **)(int, int, int, signed int, signed int, int *, _DWORD))(*(_DWORD *)v7 + 144))( v7, v12, v13, 21, 3, &v10, 0) < 0 ) { return 0; } if ( (*(int (__stdcall **)(int, _DWORD, int, int))(*(_DWORD *)v7 + 132))(v7, 0, v10, v9) >= 0 ) { v8 = 0; if ( hWnd && GetWindowRect(hWnd, &Rect) ) v8 = &Rect; v14 = 0; memset(&v15, 0, 0x103u); strcpy(&v14, (const char *)a6); if ( !sub_6CC250((int)&v14, v10, &v8->left, v7) ) { (*(void (__cdecl **)(int))(*(_DWORD *)v10 + 8))(v10); return 0; } if ( a4 ) { if ( (signed int)strlen((const char *)a6) < a5 ) strcpy((char *)a4, (const char *)a6); } } (*(void (__cdecl **)(int))(*(_DWORD *)v10 + 8))(v10); return 1; } // 6CC2A0: could not find valid save-restore pair for esi //----- (006CC430) -------------------------------------------------------- char __cdecl sub_6CC430(int a1, HWND a2, int a3, int a4) { size_t v4; // ST24_4 const char *v5; // eax int v6; // esi FILE *v7; // eax CHAR pszPath; // [esp+10h] [ebp-310h] char v10; // [esp+114h] [ebp-20Ch] char v11; // [esp+115h] [ebp-20Bh] char v12; // [esp+218h] [ebp-108h] char v13; // [esp+219h] [ebp-107h] memset(&pszPath, 0, 0x104u); sub_911D10(&pszPath); v4 = strlen(sub_40A910(675059085)); v5 = sub_40A910(675059085); strncat(&pszPath, v5, v4); _mkdir(&pszPath); v10 = 0; memset(&v11, 0, 0x103u); v12 = 0; memset(&v13, 0, 0x103u); v6 = -1; while ( 1 ) { if ( ++v6 >= 1000 ) sprintf(&v12, "%s%d.jpg", off_AB7284, v6); else sprintf(&v12, "%s%03d.jpg", off_AB7284, v6); sprintf(&v10, "%s\\%s", &pszPath, &v12); v7 = fopen(&v10, "rb"); if ( !v7 ) break; fclose(v7); } return sub_6CC2A0(v6, a1, a2, a3, a4, (int)&v10); } // AB7284: using guessed type char *off_AB7284; //----- (006CC840) -------------------------------------------------------- _DWORD *__thiscall sub_6CC840(_DWORD *this) { _DWORD *result; // eax result = this; *this = 1; this[1] = 75; this[2] = 1; return result; } //----- (006CC860) -------------------------------------------------------- BOOL __thiscall sub_6CC860(int *this, int a2, int *a3) { void *v3; // esp int *v4; // edi int v5; // ecx signed int v7; // [esp+0h] [ebp-4E88h] char v8; // [esp+4h] [ebp-4E84h] int v9; // [esp+8h] [ebp-4E80h] int v10; // [esp+Ch] [ebp-4E7Ch] int v11; // [esp+10h] [ebp-4E78h] int v12; // [esp+14h] [ebp-4E74h] int v13; // [esp+18h] [ebp-4E70h] int v14; // [esp+1Ch] [ebp-4E6Ch] int v15; // [esp+24h] [ebp-4E64h] int v16; // [esp+30h] [ebp-4E58h] int v17; // [esp+34h] [ebp-4E54h] int v18; // [esp+38h] [ebp-4E50h] int v19; // [esp+3Ch] [ebp-4E4Ch] int v20; // [esp+40h] [ebp-4E48h] int v21; // [esp+54h] [ebp-4E34h] unsigned int v22; // [esp+4E6Ch] [ebp-1Ch] CPPEH_RECORD ms_exc; // [esp+4E70h] [ebp-18h] int savedregs; // [esp+4E88h] [ebp+0h] v3 = alloca(20080); ms_exc.registration.ScopeTable = (PSCOPETABLE_ENTRY)((_DWORD)ms_exc.registration.ScopeTable ^ dword_ABA360); v22 = (unsigned int)&savedregs ^ dword_ABA360; v4 = this; v7 = 1; ms_exc.registration.TryLevel = 0; if ( sub_78E170(a2, (int)a3, (int)&v8) ) goto LABEL_7; v5 = a3[2] - 3 * *a3; v10 = *a3; v11 = a3[1]; v9 = a3[3]; v12 = v5; v13 = 3; v14 = v4[2]; v15 = a2; v16 = v10; v17 = v11; v18 = 3; v19 = 3; v20 = *v4; v21 = v4[1]; if ( sub_78FE10((int)&v8, 8) ) LABEL_7: v7 = 0; ms_exc.registration.TryLevel = -2; sub_78E900(&v8); return v7 == 1; } // 6CC860: could not find valid save-restore pair for ebx // 6CC860: could not find valid save-restore pair for edi // 6CC860: could not find valid save-restore pair for esi // ABA360: using guessed type int dword_ABA360; //----- (006CC990) -------------------------------------------------------- int __thiscall sub_6CC990(int this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi bool v9; // cf v8 = this; *(_DWORD *)(this + 20) = 15; *(_DWORD *)(this + 16) = 0; *(_BYTE *)this = 0; sub_4017F0((const void **)this, (const void **)&a2, 0, (void *)0xFFFFFFFF); v9 = (unsigned int)a7 < 0x10; *(_DWORD *)(v8 + 28) = 0; *(_WORD *)(v8 + 32) = 0; *(_BYTE *)(v8 + 34) = 0; if ( !v9 ) operator delete(a2); return v8; } //----- (006CCA10) -------------------------------------------------------- int __cdecl sub_6CCA10(void *a1, int a2, int a3, int a4, int a5, int a6) { int v6; // esi int result; // eax _DWORD *v8; // [esp+8h] [ebp-10h] int v9; // [esp+14h] [ebp-4h] v9 = 0; sub_438D10(&unk_B9DEB0, &v8, (char *)&a1); if ( v8 == dword_B9DEB4 ) { if ( (unsigned int)a6 >= 0x10 ) operator delete(a1); result = 0; } else { v6 = v8[9]; if ( (unsigned int)a6 >= 0x10 ) operator delete(a1); result = v6; } return result; } //----- (006CCAB0) -------------------------------------------------------- void __cdecl sub_6CCAB0(void *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { unsigned int v8; // esi int v9; // ecx unsigned int v10; // edi unsigned __int8 *v11; // eax int v12; // eax void *v13; // esi _BYTE *v14; // eax void *v15; // eax void *v16; // [esp-1Ch] [ebp-68h] int v17; // [esp-18h] [ebp-64h] int v18; // [esp-14h] [ebp-60h] int v19; // [esp-10h] [ebp-5Ch] int v20; // [esp-Ch] [ebp-58h] int v21; // [esp-8h] [ebp-54h] void *v22; // [esp-4h] [ebp-50h] int v23; // [esp+Ch] [ebp-40h] void **v24; // [esp+10h] [ebp-3Ch] int v25; // [esp+14h] [ebp-38h] void *v26; // [esp+18h] [ebp-34h] void *v27; // [esp+1Ch] [ebp-30h] unsigned int v28; // [esp+30h] [ebp-1Ch] int v29; // [esp+48h] [ebp-4h] v25 = a8; v8 = a5; v29 = 0; v9 = a5; if ( (unsigned int)a5 >= 1 ) v9 = 1; v10 = a6; v11 = (unsigned __int8 *)a1; if ( (unsigned int)a6 < 0x10 ) v11 = (unsigned __int8 *)&a1; v12 = sub_40C0B0(v11, "-", v9); if ( !v12 && v8 >= 1 ) { LOBYTE(v12) = v8 != 1; if ( !v12 ) { if ( v10 < 0x10 ) return; v22 = a1; goto LABEL_19; } } sub_438D10(&unk_B9DEB0, &v26, (char *)&a1); if ( v26 == dword_B9DEB4 ) { v13 = operator new(0x24u); v26 = v13; LOBYTE(v29) = 1; if ( v13 ) { v24 = &v16; v21 = 15; v20 = 0; LOBYTE(v16) = 0; sub_4017F0((const void **)&v16, (const void **)&a1, 0, (void *)0xFFFFFFFF); v14 = (_BYTE *)sub_6CC990((int)v13, v16, v17, v18, v19, v20, v21, (int)v22); } else { v14 = 0; } v14[v25 + 28] = 1; v26 = v14; LOBYTE(v29) = 0; v15 = (void *)sub_6CCEB0((int)&v27, (const void **)&a1, &v26); LOBYTE(v29) = 2; sub_6CD040(&unk_B9DEB0, (int)&v23, v15); if ( v28 >= 0x10 ) operator delete(v27); } else { *(_BYTE *)(*((_DWORD *)v26 + 9) + v25 + 28) = 1; } if ( (unsigned int)a6 >= 0x10 ) { v22 = a1; LABEL_19: operator delete(v22); } } //----- (006CCC30) -------------------------------------------------------- void sub_6CCC30() { int v0; // eax unsigned int v1; // edi int v2; // eax int v3; // esi char v4; // [esp-20h] [ebp-38h] int v5; // [esp-1Ch] [ebp-34h] int v6; // [esp-18h] [ebp-30h] int v7; // [esp-14h] [ebp-2Ch] int v8; // [esp-10h] [ebp-28h] int v9; // [esp-Ch] [ebp-24h] int v10; // [esp-8h] [ebp-20h] int v11; // [esp-4h] [ebp-1Ch] char *v12; // [esp+Ch] [ebp-Ch] unsigned int i; // [esp+10h] [ebp-8h] unsigned int v14; // [esp+14h] [ebp-4h] v0 = *(_DWORD *)(dword_ACD944 + 56); if ( v0 ) v14 = *(_DWORD *)(v0 + 40); else v14 = 0; v1 = 0; for ( i = 0; v1 < v14; i = v1 ) { v2 = sub_7474E0((_DWORD *)(dword_ACD944 + 4), v1); v3 = v2; if ( v2 ) { v11 = *(_DWORD *)(v2 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v2 + 135); sub_4018E0(&v4, (void *)(v2 + 134), strlen((const char *)(v2 + 134))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 171); sub_4018E0(&v4, (void *)(v3 + 170), strlen((const char *)(v3 + 170))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 207); sub_4018E0(&v4, (void *)(v3 + 206), strlen((const char *)(v3 + 206))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 243); sub_4018E0(&v4, (void *)(v3 + 242), strlen((const char *)(v3 + 242))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 279); sub_4018E0(&v4, (void *)(v3 + 278), strlen((const char *)(v3 + 278))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 315); sub_4018E0(&v4, (void *)(v3 + 314), strlen((const char *)(v3 + 314))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v4 = 0; v12 = (char *)(v3 + 351); sub_4018E0(&v4, (void *)(v3 + 350), strlen((const char *)(v3 + 350))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v11 = *(_DWORD *)(v3 + 422); v9 = 15; v8 = 0; v12 = &v4; v4 = 0; sub_4018E0(&v4, (void *)(v3 + 386), strlen((const char *)(v3 + 386))); sub_6CCAB0(*(void **)&v4, v5, v6, v7, v8, v9, v10, v11); v1 = i; } ++v1; } } // ACD944: using guessed type int dword_ACD944; //----- (006CCEB0) -------------------------------------------------------- int __cdecl sub_6CCEB0(int a1, const void **a2, _DWORD *a3) { *(_DWORD *)(a1 + 16) = 0; *(_DWORD *)(a1 + 20) = 15; *(_BYTE *)a1 = 0; sub_4017F0((const void **)a1, a2, 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 28) = *a3; return a1; } //----- (006CCEF0) -------------------------------------------------------- void __thiscall sub_6CCEF0(void ***this) { void ***v1; // edi void **v2; // esi void **v3; // ebx v1 = this; v2 = (void **)**this; **this = *this; (*this)[1] = *this; this[1] = 0; if ( v2 != *this ) { do { v3 = (void **)*v2; if ( (unsigned int)v2[7] >= 0x10 ) operator delete(v2[2]); v2[7] = (void *)15; v2[6] = 0; *((_BYTE *)v2 + 8) = 0; operator delete(v2); v2 = v3; } while ( v3 != *v1 ); } } //----- (006CCF70) -------------------------------------------------------- char *__stdcall sub_6CCF70(char *a1, int a2, void *a3) { char *v3; // edi int v4; // edx _DWORD *v5; // ebx int v7; // [esp+0h] [ebp-30h] void **v8; // [esp+10h] [ebp-20h] void *v9; // [esp+1Ch] [ebp-14h] int *v10; // [esp+20h] [ebp-10h] int v11; // [esp+2Ch] [ebp-4h] v10 = &v7; v3 = (char *)operator new(0x28u); v9 = v3; if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a1); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v4 = a2; v11 = 0; *(_DWORD *)v3 = a1; *((_DWORD *)v3 + 1) = v4; a1 = v3 + 8; a2 = (int)(v3 + 8); LOBYTE(v11) = 1; if ( v3 != (char *)-8 ) { v5 = a3; *((_DWORD *)v3 + 7) = 15; *((_DWORD *)v3 + 6) = 0; v3[8] = 0; sub_406450(v3 + 8, v5); *((_DWORD *)v3 + 9) = v5[7]; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006CD040) -------------------------------------------------------- int __thiscall sub_6CD040(_DWORD *this, int a2, void *a3) { _DWORD *v3; // ebx char **v4; // eax char *v5; // edi char *v6; // eax int v7; // ecx v3 = this; v4 = (char **)this[1]; v5 = *v4; v6 = sub_6CCF70(*v4, *((_DWORD *)*v4 + 1), a3); v7 = v3[2]; if ( (unsigned int)(134217726 - v7) < 1 ) std::_Xlength_error("list too long"); v3[2] = v7 + 1; *((_DWORD *)v5 + 1) = v6; **((_DWORD **)v6 + 1) = v6; sub_68B280(v3, a2, *(_DWORD *)v3[1] + 8, *(void **)v3[1]); return a2; } //----- (006CD0C0) -------------------------------------------------------- int sub_6CD0C0() { return sub_680890((unsigned __int8 *)byte_AD9238); } //----- (006CD0D0) -------------------------------------------------------- int __stdcall sub_6CD0D0(__int16 a1) { return sub_6854B0(&byte_ADA230, a1); } // ADA230: using guessed type char byte_ADA230; //----- (006CD0E0) -------------------------------------------------------- char sub_6CD0E0() { char v0; // al v0 = sub_6807E0(byte_AD9238); return sub_662140(v0); } //----- (006CD100) -------------------------------------------------------- char sub_6CD100() { return sub_6807E0(byte_AD9238); } //----- (006CD110) -------------------------------------------------------- char sub_6CD110() { return sub_680840(byte_AD9238); } //----- (006CD120) -------------------------------------------------------- _DWORD *__thiscall sub_6CD120(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; if ( a2 ) { this[41] = *a2; this[42] = a2[1]; this[43] = a2[2]; result = (_DWORD *)a2[3]; this[44] = result; } return result; } //----- (006CD160) -------------------------------------------------------- void __stdcall sub_6CD160(int a1, int a2, int a3) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD170) -------------------------------------------------------- char __stdcall sub_6CD170(int a1, int a2, int a3, int a4) { char result; // al result = 1; byte_AB7288 = 1; byte_AD0C44 = 1; return result; } // AB7288: using guessed type char byte_AB7288; // AD0C44: using guessed type char byte_AD0C44; //----- (006CD180) -------------------------------------------------------- void __stdcall sub_6CD180(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD190) -------------------------------------------------------- void __stdcall sub_6CD190(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1A0) -------------------------------------------------------- void __stdcall sub_6CD1A0(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1B0) -------------------------------------------------------- void __stdcall sub_6CD1B0(int a1, int a2, int a3) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1C0) -------------------------------------------------------- void __stdcall sub_6CD1C0(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1D0) -------------------------------------------------------- void __stdcall sub_6CD1D0(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1E0) -------------------------------------------------------- void __stdcall sub_6CD1E0(int a1, int a2) { byte_AB7288 = 1; } // AB7288: using guessed type char byte_AB7288; //----- (006CD1F0) -------------------------------------------------------- char __thiscall sub_6CD1F0(_DWORD **this, __int16 a2) { return sub_4A57B0(this[49], a2); } //----- (006CD200) -------------------------------------------------------- void __thiscall sub_6CD200(_DWORD *this, int a2, unsigned __int16 a3, unsigned __int16 a4, unsigned __int16 a5) { int v5; // esi int v6; // edi unsigned __int8 (__thiscall *v7)(int, _DWORD); // edx int *v8; // eax int v9; // ebx signed int v10; // eax int v11; // esi int *v12; // eax char v13; // [esp+Ch] [ebp-11Ch] _DWORD *v14; // [esp+1Ch] [ebp-10Ch] float v15; // [esp+20h] [ebp-108h] char v16; // [esp+24h] [ebp-104h] v5 = dword_ACB230; v6 = a3; byte_AB7288 = 1; byte_AD0C44 = 1; v7 = *(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16); v14 = this; if ( v7(dword_ACB230, a3) ) { if ( (unsigned __int16)v6 <= *(_WORD *)(v5 + 200) ) { v8 = (int *)(*(_DWORD *)(v5 + 196) + 4 * a3); if ( *v8 ) { v9 = *v8; if ( *v8 ) { LOWORD(v6) = a5; v10 = 0; if ( a4 && a5 ) { v15 = (double)(100 * a4) / (double)a5; v10 = (signed int)v15; } sprintf(&v16, "%s %d/%d %d%%", v9 + 34, a4, a5, v10); } } } } v11 = v14[49]; if ( v11 ) { v12 = (int *)sub_4B1B10((float *)&v13, 0x32u); sub_492030(v11, v6, v11, (int)&v16, *v12, v12[1], v12[2], v12[3]); } } // AB7288: using guessed type char byte_AB7288; // ACB230: using guessed type int dword_ACB230; // AD0C44: using guessed type char byte_AD0C44; //----- (006CD330) -------------------------------------------------------- void **__stdcall sub_6CD330(int a1, int a2) { return sub_4967C0(); } //----- (006CD340) -------------------------------------------------------- void __thiscall sub_6CD340(_DWORD *this, int a2) { _DWORD *v2; // edi __int64 v3; // ST08_8 int v4; // eax char *v5; // eax CHAR *v6; // eax int v7; // eax char *v8; // eax CHAR *v9; // eax int v10; // eax char *v11; // eax CHAR *v12; // eax int v13; // eax char *v14; // eax CHAR *v15; // eax int *v16; // eax int *v17; // ST0C_4 const char *v18; // eax _DWORD *v19; // eax int v20; // ST0C_4 int v21; // ST08_4 const char *v22; // eax const char *v23; // eax _WORD *v24; // eax int v25; // ST0C_4 const char *v26; // eax void *v27; // ST0C_4 const char *v28; // eax int v29; // [esp-4h] [ebp-23Ch] int *v30; // [esp+Ch] [ebp-22Ch] int v31; // [esp+1Ch] [ebp-21Ch] unsigned int v32; // [esp+20h] [ebp-218h] char v33; // [esp+28h] [ebp-210h] char v34; // [esp+128h] [ebp-110h] int v35; // [esp+234h] [ebp-4h] v2 = (_DWORD *)this[49]; if ( v2 ) { switch ( *(unsigned __int8 *)(a2 + 1) ) { case 1u: v32 = 15; v31 = 0; LOBYTE(v30) = 0; v3 = *(unsigned int *)(a2 + 4); v35 = 0; v4 = sub_680E90(v3); if ( v4 ) { v5 = _itoa(v4, &v33, 10); sub_401E30(&v30, v5); v6 = (CHAR *)sub_40C190(1197446809); sub_401E30(&v30, v6); } v7 = sub_680EB0(*(unsigned int *)(a2 + 4)); if ( v7 ) { v8 = _itoa(v7, &v33, 10); sub_401E30(&v30, v8); v9 = (CHAR *)sub_40C190(1201903011); sub_401E30(&v30, v9); } v10 = sub_680F00(*(unsigned int *)(a2 + 4)); if ( v10 ) { v11 = _itoa(v10, &v33, 10); sub_401E30(&v30, v11); v12 = (CHAR *)sub_40C190(-1732930065); sub_401E30(&v30, v12); } v13 = sub_680F60(*(unsigned int *)(a2 + 4)); if ( v13 ) { v14 = _itoa(v13, &v33, 10); sub_401E30(&v30, v14); v15 = (CHAR *)sub_40C190(-2001757707); sub_401E30(&v30, v15); } v16 = v30; if ( v32 < 0x10 ) v16 = (int *)&v30; v17 = v16; v18 = sub_40C190(1377897853); sprintf(&v34, v18, v17); sub_492060(v2, (int)&v34); sub_636A10(&v30); break; case 2u: v19 = sub_6899D0(*(_WORD *)(a2 + 4)); if ( v19 ) { v20 = v19[28] + 34; v21 = *(unsigned __int16 *)(a2 + 6); v22 = sub_40C190(1511526944); sprintf(&v34, v22, v21, v20); sub_492060(v2, (int)&v34); } break; case 3u: v29 = sub_4DBF00(*(unsigned __int16 *)(a2 + 8)) + 2; v23 = sub_40C190(1634423897); goto LABEL_17; case 4u: v29 = *(_DWORD *)(a2 + 4); v23 = sub_40C190(1377894173); LABEL_17: sprintf(&v34, v23, v29); sub_492060(v2, (int)&v34); break; case 6u: v24 = sub_567FD0(*(unsigned __int8 *)(a2 + 4)); v25 = sub_40C8D0(v24 + 1) + 34; v26 = sub_40C190(-1451862351); sprintf(&v34, v26, v25); sub_492060(v2, (int)&v34); break; case 7u: v27 = sub_74CD00(&unk_AD8C08, *(_BYTE *)(a2 + 4), *(_BYTE *)(a2 + 5)); v28 = sub_40C190(1495730032); sprintf(&v33, v28, v27); sub_492060(v2, (int)&v33); break; default: return; } } } //----- (006CD680) -------------------------------------------------------- int __thiscall sub_6CD680(_DWORD **this, unsigned __int16 *a2, int a3) { __time64_t v3; // rax _DWORD *v4; // esi int v5; // ST08_4 const char *v6; // eax _DWORD *v7; // ecx signed int v8; // ebx char *v9; // edi char v10; // al signed int v11; // eax struct tm Tm; // [esp+Ch] [ebp-A8h] char v14; // [esp+30h] [ebp-84h] LODWORD(v3) = a2; v4 = this; if ( a2 ) { v5 = sub_74E810(this[1], *a2); v6 = sub_40C190(1377897755); LODWORD(v3) = sprintf(&v14, v6, v5); v7 = (_DWORD *)v4[49]; if ( v7 ) { sub_492060(v7, (int)&v14); v8 = 0; v9 = (char *)(a3 + 516); do { v10 = *v9; if ( *v9 ) { if ( v10 == 1 || v10 == 2 && (v11 = sub_6CDE40(v4, *a2), v11 >= 0) && v8 == v11 ) sub_6CD340(v4, (int)v9); } ++v8; v9 += 12; } while ( v8 < 12 ); qmemcpy(&Tm, &unk_ACCFA8, sizeof(Tm)); v3 = _mktime64(&Tm); *(_QWORD *)((char *)a2 + 11) = v3; } } return v3; } //----- (006CD770) -------------------------------------------------------- void *sub_6CD770() { char *v0; // eax char *v2; // eax unsigned __int16 v3; // ax if ( !(dword_B9E060 & 1) ) { dword_B9E060 |= 1u; sub_747420(&unk_B9E020); atexit(sub_9A3C10); } if ( !(dword_B9E060 & 2) ) { dword_B9E060 |= 2u; sub_74EF90(byte_B9DFA8, (int)&unk_B9E020); atexit(sub_9A3C00); } if ( !(dword_B9E060 & 4) ) { dword_B9E060 |= 4u; sub_6CDF30(&unk_B9DEE0, byte_B9DFA8); atexit(sub_9A3C20); } if ( !byte_B9DEDC ) { if ( !byte_ACAD5C ) sub_420410(); v0 = (char *)sub_401410(byte_ACA520, "QuestDialog.shn"); if ( !sub_7475B0(&unk_B9E020, v0) ) return 0; if ( !byte_B9DEDC ) { if ( !byte_ACAD5C ) sub_420410(); v2 = (char *)sub_401410(byte_ACA520, "QuestData.shn"); if ( !sub_74F620((int)byte_B9DFA8, v2, 1) ) return 0; if ( dword_B9DFB8 ) v3 = *(_WORD *)(dword_B9DFB8 + 2); else v3 = 0; sub_74A760((int)&unk_B9DEE0, v3); byte_B9DEDC = 1; } } return &unk_B9DEE0; } // ACAD5C: using guessed type char byte_ACAD5C; // B9DEDC: using guessed type char byte_B9DEDC; // B9DFB8: using guessed type int dword_B9DFB8; // B9E060: using guessed type int dword_B9E060; //----- (006CD900) -------------------------------------------------------- void __thiscall sub_6CD900(_DWORD *this, unsigned __int16 a2, unsigned __int16 a3, int a4, signed int a5) { int v5; // esi int v6; // edi int v7; // edx unsigned __int8 (__thiscall *v8)(int, _DWORD); // eax int v9; // eax signed int v10; // esi unsigned __int8 (__stdcall *v11)(int); // eax int v12; // edx _DWORD *v13; // eax _DWORD *v14; // ecx int v15; // eax _BYTE *v16; // eax char v17; // al int v18; // esi _BYTE *v19; // eax unsigned __int8 v20; // [esp-10h] [ebp-144h] unsigned __int8 v21; // [esp-Ch] [ebp-140h] unsigned __int8 v22; // [esp-8h] [ebp-13Ch] int v23; // [esp+Ch] [ebp-128h] int v24; // [esp+10h] [ebp-124h] int v25; // [esp+14h] [ebp-120h] int v26; // [esp+18h] [ebp-11Ch] int v27; // [esp+1Ch] [ebp-118h] _DWORD *v28; // [esp+20h] [ebp-114h] int v29; // [esp+24h] [ebp-110h] int v30; // [esp+28h] [ebp-10Ch] float v31; // [esp+2Ch] [ebp-108h] char v32; // [esp+30h] [ebp-104h] v5 = dword_ACDA48; v6 = a3; byte_AB7288 = 1; byte_AD0C44 = 1; v7 = *(_DWORD *)dword_ACDA48; v28 = this; v30 = a2; v8 = *(unsigned __int8 (__thiscall **)(int, _DWORD))(v7 + 16); v29 = a3; if ( v8(dword_ACDA48, a3) ) { if ( a3 <= *(_WORD *)(v5 + 200) ) { v9 = *(_DWORD *)(v5 + 196); v6 = 4 * a3; if ( *(_DWORD *)(v9 + v6) ) { v27 = *(_DWORD *)(v9 + v6); if ( v27 ) { v10 = 0; if ( a4 && a5 ) { v31 = (double)(100 * a4) / (double)a5; v10 = (signed int)v31; } v11 = *(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)dword_ACDA74 + 16); v31 = *(float *)&dword_ACDA74; if ( v11(v29) ) { if ( (unsigned __int16)v29 <= *(_WORD *)(LODWORD(v31) + 200) ) { v12 = *(_DWORD *)(LODWORD(v31) + 196); if ( *(_DWORD *)(v6 + v12) ) { v6 = *(_DWORD *)(v6 + v12); if ( v6 ) { v13 = sub_6CD770(); v14 = (_DWORD *)(v13 ? v13[1] : v28); v15 = v14 ? sub_74E7D0(v14, v30) : v28; if ( v15 ) { v16 = (_BYTE *)(v15 + 98); v30 = 0; v31 = *(float *)&v16; do { if ( !*(v16 - 6) ) break; if ( *((_WORD *)v16 - 2) == (_WORD)v29 ) { v17 = *v16; if ( v17 ) { switch ( v17 ) { case 1: sprintf(&v32, "%s %d/%d %d%%", v6 + 181, a4, a5, v10); break; case 2: sprintf(&v32, "%s %d/%d %d%%", v6 + 213, a4, a5, v10); break; case 3: sprintf(&v32, "%s %d/%d %d%%", v6 + 245, a4, a5, v10); break; case 4: sprintf(&v32, "%s %d/%d %d%%", v6 + 277, a4, a5, v10); break; } } else { sprintf(&v32, "%s %d/%d %d%%", v27 + 34, a4, a5, v10); } } v16 = (_BYTE *)(LODWORD(v31) + 8); ++v30; LODWORD(v31) += 8; } while ( v30 < 5 ); } } } } } } } } } v18 = v28[49]; if ( v18 ) { if ( dword_ACD914 ) { v19 = (_BYTE *)sub_7474E0((_DWORD *)(dword_ACD914 + 4), 0x32u); if ( !v19 ) { sub_419EE0((float *)&v23, 0xFFu, 0, 0xFFu, 0xFFu); LABEL_40: sub_492030(v18, v6, v18, (int)&v32, v23, v24, v25, v26); return; } v22 = v19[6]; v21 = v19[5]; v20 = v19[4]; } else { v22 = -1; v21 = dword_ACD914; v20 = -1; } sub_419EE0((float *)&v23, v20, v21, v22, 0xFFu); goto LABEL_40; } } // AB7288: using guessed type char byte_AB7288; // ACD914: using guessed type int dword_ACD914; // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; // AD0C44: using guessed type char byte_AD0C44; //----- (006CDBF0) -------------------------------------------------------- int *__thiscall sub_6CDBF0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 21) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_717D90(&a3); if ( *(_BYTE *)(*v3 + 21) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 21) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6A0F50((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 21) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_667AC0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 21) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 20); *(_BYTE *)(v5 + 20) = *((_BYTE *)v3 + 20); *((_BYTE *)v3 + 20) = v13; LABEL_35: if ( v18[20] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 20) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_6915A0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; v15[20] = 0; sub_664400(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; sub_6915A0(i, v6); break; } } else { if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_664400(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 20) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; v15[20] = 0; sub_6915A0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; sub_664400(i, (_DWORD *)v6); break; } } v15[20] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 20) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (006CDE40) -------------------------------------------------------- signed int __thiscall sub_6CDE40(_DWORD *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v5; // esi int v6; // [esp+8h] [ebp-4h] v2 = this; v3 = this + 45; sub_67AF30(this + 45, (int **)&v6, &a2); if ( v2[46] == v6 ) return -1; v5 = *(_DWORD *)(v6 + 16); sub_6CDBF0(v3, (int *)&a2, v6); return v5; } //----- (006CDE90) -------------------------------------------------------- int *__thiscall sub_6CDE90(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 21) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 21) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 21); j = (int *)*j ) v10 = j; a3 = v10; } } sub_6CDBF0(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_668390(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (006CDF30) -------------------------------------------------------- _DWORD *__thiscall sub_6CDF30(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *v3; // eax void **v5; // [esp+Ch] [ebp-1Ch] _DWORD *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v2 = this; v6 = this; sub_74B7B0(this, (int)a2); *v2 = &CClientQuest::`vftable'; v7 = 0; v2[47] = 0; v3 = operator new(0x18u); if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v2[46] = v3; *v3 = v3; *(_DWORD *)(v2[46] + 4) = v2[46]; *(_DWORD *)(v2[46] + 8) = v2[46]; *(_BYTE *)(v2[46] + 20) = 1; *(_BYTE *)(v2[46] + 21) = 1; v2[49] = 0; return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F8D14: using guessed type void *CClientQuest::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006CE010) -------------------------------------------------------- _BYTE *__thiscall sub_6CE010(_DWORD *this, int a2, int a3) { _BYTE *result; // eax _DWORD *v4; // esi _DWORD *v5; // ecx result = (_BYTE *)a2; v4 = this; if ( a2 ) { v5 = *(_DWORD **)(a2 + 4); if ( v5 ) { result = (_BYTE *)sub_74E280(v5, a3); if ( result ) { if ( *result ) *v4 = result; } } } return result; } //----- (006CE040) -------------------------------------------------------- char *__stdcall sub_6CE040(int TestChar) { char *v1; // edi _BYTE *v2; // eax signed int v3; // ebx BYTE v4; // al byte_B9E068 = 0; v1 = &byte_B9E068; if ( **(_BYTE **)TestChar != 91 ) return 0; v2 = (_BYTE *)(*(_DWORD *)TestChar + 1); *(_DWORD *)TestChar = v2; if ( !*v2 ) return 0; v3 = 0; while ( 1 ) { if ( v3 > 127 ) { *v1 = 0; return v1; } if ( **(_BYTE **)TestChar == 93 ) break; v4 = **(_BYTE **)TestChar; *v1 = v4; ++*(_DWORD *)TestChar; ++v1; ++v3; if ( IsDBCSLeadByte(v4) ) { *v1++ = **(_BYTE **)TestChar; ++v3; ++*(_DWORD *)TestChar; } if ( !**(_BYTE **)TestChar ) return 0; } ++*(_DWORD *)TestChar; *v1 = 0; return &byte_B9E068; } // B9E068: using guessed type char byte_B9E068; //----- (006CE0D0) -------------------------------------------------------- int __thiscall sub_6CE0D0(int TestChar, int a2) { BYTE **v2; // esi _BYTE *v3; // ecx int result; // eax char v5; // al char *v6; // eax BYTE *v7; // eax char *v8; // eax char *v9; // eax BYTE *v10; // eax BYTE *v11; // eax char *v12; // eax char *v13; // eax BYTE *v14; // eax BYTE *v15; // eax BYTE *v16; // eax BYTE *v17; // eax char *v18; // eax BYTE *v19; // eax const CHAR *v20; // eax BYTE *v21; // eax BYTE *v22; // eax char *v23; // eax BYTE *v24; // eax char *v25; // eax BYTE *v26; // eax _BYTE *v27; // edi BYTE v28; // al int v29; // ecx v2 = (BYTE **)TestChar; v3 = *(_BYTE **)TestChar; if ( !v3 ) return 11; v5 = *v3; if ( !*v3 ) return 11; if ( v5 == 10 ) { *v2 = v3 + 1; return 2; } if ( v5 != 91 ) { if ( v5 == 93 ) { *v2 = v3 + 1; return 14; } v27 = v3; while ( 1 ) { v28 = **v2; if ( v28 == 10 || v28 == 91 ) { LABEL_104: v29 = *v2 - v27; *(_DWORD *)a2 = v27; *(_DWORD *)(a2 + 4) = v29; return 0; } if ( v28 == 93 ) break; if ( IsDBCSLeadByte(v28) ) *v2 += 2; else ++*v2; if ( !**v2 ) goto LABEL_104; } ++*v2; return 14; } v6 = sub_6CE040((int)v2); if ( !v6 ) return 14; if ( !strcmp(v6, "NAME") ) return 1; if ( !strcmp(v6, "BUTTON") ) { sub_8F56D0(v2); if ( **v2 ) { do { if ( **v2 == 61 ) break; v7 = *v2 + 1; *v2 = v7; } while ( *v7 ); } ++*v2; sub_8F56D0(v2); v8 = sub_6CE040((int)v2); if ( v8 ) { *(_DWORD *)a2 = sub_7549E0("%s", v8); sub_8F56D0(v2); v9 = sub_6CE040((int)v2); if ( v9 ) { *(_DWORD *)(a2 + 4) = atoi(v9); if ( **v2 ) { do { if ( **v2 == 10 ) break; v10 = *v2 + 1; *v2 = v10; } while ( *v10 ); } LABEL_65: if ( **v2 == 10 ) ++*v2; return 7; } } return 14; } if ( !strcmp(v6, "BUTTON_NPC") ) { sub_8F56D0(v2); if ( **v2 ) { do { if ( **v2 == 61 ) break; v11 = *v2 + 1; *v2 = v11; } while ( *v11 ); } ++*v2; sub_8F56D0(v2); v12 = sub_6CE040((int)v2); if ( !v12 ) return 14; *(_DWORD *)a2 = sub_7549E0("%s", v12); sub_8F56D0(v2); v13 = sub_6CE040((int)v2); if ( !v13 ) return 14; *(_DWORD *)(a2 + 4) = sub_7549E0("%s", v13); if ( **v2 ) { do { if ( **v2 == 10 ) break; v14 = *v2 + 1; *v2 = v14; } while ( *v14 ); } if ( **v2 == 10 ) ++*v2; result = 8; } else if ( !strcmp(v6, "LINE") ) { if ( **v2 ) { do { if ( **v2 == 10 ) break; v15 = *v2 + 1; *v2 = v15; } while ( *v15 ); } if ( **v2 == 10 ) ++*v2; result = 4; } else if ( !strcmp(v6, "SHOW_REWARD") ) { if ( **v2 ) { do { if ( **v2 == 10 ) break; v16 = *v2 + 1; *v2 = v16; } while ( *v16 ); } if ( **v2 == 10 ) ++*v2; result = 3; } else if ( !strcmp(v6, "EVENT") ) { if ( **v2 ) { do { if ( **v2 == 10 ) break; v17 = *v2 + 1; *v2 = v17; } while ( *v17 ); } if ( **v2 == 10 ) ++*v2; result = 6; } else if ( !strcmp(v6, "SCENARIO") ) { sub_8F56D0(v2); v18 = sub_6CE040((int)v2); if ( !v18 ) return 14; *(_DWORD *)a2 = atoi(v18); if ( **v2 ) { do { if ( **v2 == 10 ) break; v19 = *v2 + 1; *v2 = v19; } while ( *v19 ); } if ( **v2 == 10 ) ++*v2; result = 9; } else { if ( !strcmp(v6, "NEXT") ) { v20 = sub_40C190(-1766982416); *(_DWORD *)a2 = sub_7549E0("%s", v20); *(_DWORD *)(a2 + 4) = 1; if ( **v2 ) { do { if ( **v2 == 10 ) break; v21 = *v2 + 1; *v2 = v21; } while ( *v21 ); } goto LABEL_65; } if ( !strcmp(v6, "MENU") ) { if ( **v2 ) { do { if ( **v2 == 10 ) break; v22 = *v2 + 1; *v2 = v22; } while ( *v22 ); } if ( **v2 == 10 ) ++*v2; result = 12; } else if ( !strcmp(v6, "EMOTION") ) { sub_8F56D0(v2); v23 = sub_6CE040((int)v2); if ( !v23 ) return 14; *(_DWORD *)a2 = atoi(v23); if ( **v2 ) { do { if ( **v2 == 10 ) break; v24 = *v2 + 1; *v2 = v24; } while ( *v24 ); } if ( **v2 == 10 ) ++*v2; result = 13; } else { if ( strcmp(v6, "DELAY") ) { if ( !strcmp(v6, "END") ) result = 16; else result = 14; return result; } sub_8F56D0(v2); v25 = sub_6CE040((int)v2); if ( !v25 ) return 14; *(_DWORD *)a2 = atoi(v25); if ( **v2 ) { do { if ( **v2 == 10 ) break; v26 = *v2 + 1; *v2 = v26; } while ( *v26 ); } if ( **v2 == 10 ) ++*v2; result = 15; } } return result; } //----- (006CE750) -------------------------------------------------------- int __thiscall sub_6CE750(int TestChar, int a2, int a3) { int result; // eax int v4; // esi int v5; // edi int v6; // [esp+4h] [ebp-8h] result = a2; v4 = TestChar; if ( a2 ) { if ( *(_BYTE *)a2 ) { *(_DWORD *)TestChar = a2; if ( a3 ) { v5 = 0; for ( result = sub_6CE0D0(TestChar, (int)&v6); result != 11; result = sub_6CE0D0(v4, (int)&v6) ) { if ( result == 16 ) ++v5; if ( v5 == a3 ) break; } } } } return result; } //----- (006CE820) -------------------------------------------------------- char __stdcall sub_6CE820(int a1, unsigned __int16 a2) { int v3; // edx int v4; // eax _DWORD *v5; // ecx signed int v6; // ecx _WORD *v7; // eax if ( !a1 ) return 0; v3 = *(unsigned __int8 *)(a1 + 192); v4 = 0; if ( v3 > 0 ) { v5 = (_DWORD *)(a1 + 200); while ( *((_BYTE *)v5 - 4) ) { if ( *v5 == a2 ) return 1; ++v4; v5 += 8; if ( v4 >= v3 ) break; } } v6 = 0; v7 = (_WORD *)(a1 + 94); do { if ( !*((_BYTE *)v7 - 2) ) break; if ( *v7 == a2 ) return 1; ++v6; v7 += 4; } while ( v6 < 5 ); return 0; } //----- (006CE8A0) -------------------------------------------------------- BOOL __stdcall sub_6CE8A0(int a1) { return !*(_BYTE *)(a1 + 100) && !*(_BYTE *)(a1 + 132) && *(_WORD *)(a1 + 30) != *(_WORD *)(a1 + 94); } //----- (006CE8D0) -------------------------------------------------------- int __thiscall sub_6CE8D0(_DWORD *this, __int16 a2) { _DWORD *v2; // ecx int result; // eax v2 = (_DWORD *)this[1]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( result ) { if ( *(_WORD *)(result + 4) == a2 ) break; } if ( !v2 ) return 0; } return result; } //----- (006CE900) -------------------------------------------------------- int __thiscall sub_6CE900(_DWORD *this) { int result; // eax if ( this[3] ) result = sub_521E30(this); if ( dword_AB76C0 ) result = sub_521E30(&off_AB76B4); return result; } // AB76B4: using guessed type void **off_AB76B4; // AB76C0: using guessed type int dword_AB76C0; //----- (006CE960) -------------------------------------------------------- bool __stdcall sub_6CE960(int a1, unsigned __int16 a2) { _DWORD **v2; // eax int v3; // esi signed int v5; // edi int v6; // ebx signed int v7; // esi int v8; // eax int v9; // edi _DWORD *v10; // edx signed int v11; // esi __int16 *v12; // eax _DWORD *v13; // [esp+4h] [ebp-4h] int v14; // [esp+4h] [ebp-4h] v2 = (_DWORD **)sub_6CD770(); v3 = a1; v13 = v2; if ( !*(_BYTE *)(a1 + 100) && !*(_BYTE *)(a1 + 132) && *(_WORD *)(a1 + 30) != *(_WORD *)(a1 + 94) || *(_BYTE *)(a1 + 89) ) { return 1; } if ( sub_74BA80(v2, *(_WORD *)(a1 + 4)) != 6 ) return 0; v5 = 0; v6 = a1 + 94; do { if ( !*(_BYTE *)(v6 - 2) ) break; if ( *(_WORD *)v6 == a2 ) { v7 = 0; v8 = sub_74A800(v13, *(_WORD *)(a1 + 4)); if ( v8 ) v7 = *(unsigned __int8 *)(v8 + v5 + 24); if ( v7 < *(unsigned __int8 *)(v6 + 3) ) return 1; v3 = a1; } ++v5; v6 += 8; } while ( v5 < 5 ); v9 = 0; v14 = *(unsigned __int8 *)(v3 + 192); if ( v14 > 0 ) { v10 = (_DWORD *)(v3 + 200); do { if ( !*((_BYTE *)v10 - 4) ) break; if ( *v10 == a2 ) { v11 = 0; v12 = (__int16 *)(a1 + 134); while ( *((_BYTE *)v12 - 2) ) { if ( v10[2] == (unsigned __int16)*v12 ) return sub_6854B0(&byte_ADA230, *v12) < *(unsigned __int16 *)(a1 + 6 * v11 + 136); ++v11; v12 += 3; if ( v11 >= 5 ) break; } } ++v9; v10 += 8; } while ( v9 < v14 ); } return 0; } // ADA230: using guessed type char byte_ADA230; //----- (006CEA90) -------------------------------------------------------- int __stdcall sub_6CEA90(int a1, __int16 a2) { unsigned int v2; // esi int v3; // eax _DWORD *v4; // eax _DWORD *v5; // esi int result; // eax unsigned int v7; // ebx int v8; // edi _DWORD *v9; // eax _DWORD *v10; // esi int v11; // [esp+8h] [ebp-4h] v2 = 0; if ( sub_5701C0() ) { do { if ( *(_WORD *)(sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v2) + 2) == a2 ) break; ++v2; } while ( v2 < sub_5701C0() ); } v3 = *(_DWORD *)(dword_ACDA58 + 56); if ( v3 ) v11 = *(_DWORD *)(v3 + 40); else v11 = 0; if ( v2 == v11 ) { v4 = operator new(8u); v5 = v4; *v4 = a1; v4[1] = 0; result = ((int (__thiscall *)(void ***))off_AB76B4[1])(&off_AB76B4); *(_DWORD *)(result + 8) = v5; *(_DWORD *)result = 0; *(_DWORD *)(result + 4) = dword_AB76BC; if ( dword_AB76BC ) { *(_DWORD *)dword_AB76BC = result; ++dword_AB76C0; } else { ++dword_AB76C0; dword_AB76B8 = result; } dword_AB76BC = result; } else { v7 = v2; do { result = sub_7474E0((_DWORD *)(dword_ACDA58 + 4), v7); v8 = result; if ( !result || *(_WORD *)(result + 2) != a2 ) break; v9 = operator new(8u); v10 = v9; *v9 = a1; v9[1] = v8; result = ((int (__thiscall *)(void ***))off_AB76B4[1])(&off_AB76B4); *(_DWORD *)(result + 8) = v10; *(_DWORD *)result = 0; *(_DWORD *)(result + 4) = dword_AB76BC; if ( dword_AB76BC ) *(_DWORD *)dword_AB76BC = result; else dword_AB76B8 = result; ++dword_AB76C0; ++v7; dword_AB76BC = result; } while ( v7 != v11 ); } return result; } // AB76B4: using guessed type void **off_AB76B4; // AB76B8: using guessed type int dword_AB76B8; // AB76BC: using guessed type int dword_AB76BC; // AB76C0: using guessed type int dword_AB76C0; // ACDA58: using guessed type int dword_ACDA58; //----- (006CEBE0) -------------------------------------------------------- void __stdcall sub_6CEBE0(__int16 a1) { int *v1; // edx int v2; // esi int v3; // ecx int *v4; // eax int v5; // eax int v6; // ecx _DWORD *v7; // eax int *v8; // ecx int v9; // edx v1 = (int *)dword_AB76B8; v2 = dword_AB76B8; if ( dword_AB76B8 ) { while ( 1 ) { v3 = **(_DWORD **)(v2 + 8); v4 = (int *)v2; v2 = *(_DWORD *)v2; if ( *(_WORD *)(v3 + 4) == a1 ) { if ( v4 == v1 ) { v5 = *v1; dword_AB76B8 = v5; if ( v5 ) *(_DWORD *)(v5 + 4) = 0; else dword_AB76BC = 0; ((void (__thiscall *)(void ***, int *))off_AB76B4[2])(&off_AB76B4, v1); } else { v6 = dword_AB76BC; if ( v4 == (int *)dword_AB76BC ) { v7 = *(_DWORD **)(dword_AB76BC + 4); dword_AB76BC = (int)v7; if ( v7 ) *v7 = 0; else dword_AB76B8 = 0; ((void (__thiscall *)(void ***, int))off_AB76B4[2])(&off_AB76B4, v6); } else { v8 = (int *)v4[1]; v9 = *v4; if ( v8 ) *v8 = v9; if ( v9 ) *(_DWORD *)(v9 + 4) = v8; ((void (__thiscall *)(void ***, int *))off_AB76B4[2])(&off_AB76B4, v4); } } --dword_AB76C0; } if ( !v2 ) break; v1 = (int *)dword_AB76B8; } } } // AB76B4: using guessed type void **off_AB76B4; // AB76B8: using guessed type int dword_AB76B8; // AB76BC: using guessed type int dword_AB76BC; // AB76C0: using guessed type int dword_AB76C0; //----- (006CECA0) -------------------------------------------------------- void __thiscall sub_6CECA0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int *v3; // edi _WORD *v4; // ecx int *v5; // eax int *v6; // ecx _DWORD *v7; // esi int v8; // eax void (__thiscall *v9)(_DWORD *, int *); // edx int *v10; // ecx _DWORD *v11; // eax void (__thiscall *v12)(_DWORD *, int *); // edx _DWORD *v13; // ecx int v14; // edx _DWORD *v15; // [esp+Ch] [ebp-4h] v2 = this; v3 = (int *)this[12]; v15 = this; if ( v3 ) { while ( 1 ) { v4 = (_WORD *)v3[2]; v5 = v3; v3 = (int *)*v3; if ( *v4 == a2 ) { v6 = (int *)v2[12]; v7 = v2 + 11; if ( v5 == v6 ) { v8 = *v6; v7[1] = *v6; if ( v8 ) { *(_DWORD *)(v8 + 4) = 0; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v6); } else { v9 = *(void (__thiscall **)(_DWORD *, int *))(*v7 + 8); v7[2] = 0; v9(v7, v6); } } else { v10 = (int *)v7[2]; if ( v5 == v10 ) { v11 = (_DWORD *)v10[1]; v7[2] = v11; if ( v11 ) { *v11 = 0; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v10); } else { v12 = *(void (__thiscall **)(_DWORD *, int *))(*v7 + 8); v7[1] = 0; v12(v7, v10); } } else { v13 = (_DWORD *)v5[1]; v14 = *v5; if ( v13 ) *v13 = v14; if ( v14 ) *(_DWORD *)(v14 + 4) = v13; (*(void (__thiscall **)(_DWORD *, int *))(*v7 + 8))(v7, v5); } } --v7[3]; } if ( !v3 ) break; v2 = v15; } } } //----- (006CED70) -------------------------------------------------------- _DWORD *__thiscall sub_6CED70(_DWORD *this) { _DWORD *result; // eax result = this + 4; if ( this[9] >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (006CED80) -------------------------------------------------------- char __userpurge sub_6CED80@(int a1@, int a2@, int a3@, int a4, int a5, float a6) { int v6; // esi float v7; // ST08_4 float v8; // ST04_4 char result; // al _DWORD *v10; // eax int v11; // esi unsigned int v12; // eax int v13; // esi int v14; // eax int v15; // [esp+1Ch] [ebp-14h] int v16; // [esp+20h] [ebp-10h] float v17; // [esp+24h] [ebp-Ch] int v18; // [esp+28h] [ebp-8h] unsigned int v19; // [esp+2Ch] [ebp-4h] v15 = a3; *(float *)&v18 = a6 + 3.0; v6 = a1; v7 = (double)(unsigned int)dword_AC2F78; v8 = (double)(unsigned int)xRight; result = sub_8F74F0(dword_B66FB0, v8, v7, a4, a5, v18, (int)&v16); if ( result ) { v10 = (_DWORD *)(v6 + 16); if ( *(_DWORD *)(v6 + 36) >= 0x10u ) v10 = (_DWORD *)*v10; (*(void (__stdcall **)(_DWORD *, int, int))(*(_DWORD *)dword_AD01E8 + 428))(v10, a2, v15); v11 = dword_AD01E8; v12 = (unsigned int)((*(int (**)(void))(*(_DWORD *)dword_AD01E8 + 144))() - 2 * *(_DWORD *)(v11 + 356)) >> 1; v19 = v12; v13 = dword_AD01E8; *(float *)&v16 = *(float *)&v16 - ((double)v12 + 5.0); v14 = (*(int (**)(void))(*(_DWORD *)dword_AD01E8 + 148))() - 2 * *(_DWORD *)(v13 + 352); v19 = v14; v17 = v17 - ((double)(unsigned int)v14 + 38.0); result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)dword_AD01E8 + 308))( dword_AD01E8, (signed int)*(float *)&v16); } return result; } // 6CED80: could not find valid save-restore pair for edi // 6CED80: could not find valid save-restore pair for esi // AD01E8: using guessed type int dword_AD01E8; //----- (006CEEC0) -------------------------------------------------------- int __thiscall sub_6CEEC0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ebx _DWORD *v4; // edi _DWORD *v5; // ST00_4 _DWORD *v6; // edi _DWORD *v7; // ST00_4 v1 = this; result = 0; v3 = this + 11; this[11] = &PgTList::`vftable'; v4 = (_DWORD *)this[12]; if ( v4 ) { do { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v5); } while ( v4 ); result = 0; } v3[3] = 0; v3[1] = 0; v3[2] = 0; *v3 = &NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; if ( v1[9] >= 0x10u ) { operator delete((void *)v1[4]); result = 0; } v1[9] = 15; v1[8] = 0; *((_BYTE *)v1 + 16) = 0; *v1 = &PgTList::`vftable'; v6 = (_DWORD *)v1[1]; if ( v6 ) { do { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v7); } while ( v6 ); result = 0; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QUEST_DATA *>::`vftable'; return result; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; // 9F8EF8: using guessed type void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; // 9F8F48: using guessed type void *PgTList::`vftable'; // 9F8F74: using guessed type void *PgTList::`vftable'; //----- (006CEFA0) -------------------------------------------------------- void __thiscall sub_6CEFA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // eax __int16 v4; // si int v5; // ecx v2 = this; sub_6CD770(); v3 = (_DWORD *)v2[1]; if ( v3 ) { v4 = (signed __int16)a2; while ( 1 ) { v5 = v3[2]; a2 = v3; v3 = (_DWORD *)*v3; if ( *(_WORD *)(v5 + 4) == v4 ) break; if ( !v3 ) return; } sub_403620(v2, &a2); sub_6CEBE0(v4); sub_6CECA0(v2, v4); } } //----- (006CF000) -------------------------------------------------------- int __thiscall sub_6CF000(int this) { int result; // eax bool v2; // cf result = 0; v2 = *(_DWORD *)(this + 36) < 0x10u; *(_DWORD *)(this + 32) = 0; if ( v2 ) *(_BYTE *)(this + 16) = 0; else **(_BYTE **)(this + 16) = 0; return result; } //----- (006CF060) -------------------------------------------------------- void __thiscall sub_6CF060(void *this, int a2) { int v2; // esi signed int v3; // ebx int v4; // edx __int16 v5; // di _DWORD *v6; // eax _WORD *v7; // ecx _DWORD *v8; // edx _DWORD *v9; // eax int v10; // edi bool v11; // zf _WORD *v12; // ebx __int16 v13; // di _DWORD *v14; // eax _WORD *v15; // ecx _DWORD *v16; // edx _DWORD *v17; // eax int v18; // edx __int16 v19; // ax _DWORD *v20; // esi _DWORD *v21; // ST04_4 void **v22; // [esp+10h] [ebp-24h] _DWORD *v23; // [esp+14h] [ebp-20h] _DWORD *v24; // [esp+18h] [ebp-1Ch] int v25; // [esp+1Ch] [ebp-18h] void *v26; // [esp+20h] [ebp-14h] int v27; // [esp+24h] [ebp-10h] int v28; // [esp+30h] [ebp-4h] v26 = this; v2 = 0; v25 = 0; v23 = 0; v24 = 0; v22 = &PgTList::`vftable'; v28 = 0; v3 = 0; do { v4 = a2; if ( (v3 || *(_BYTE *)(a2 + 89) || (unsigned __int8)sub_6CE8A0(a2)) && *(_BYTE *)(v4 + 8 * v3 + 92) ) { v5 = *(_WORD *)(v4 + 8 * v3 + 94); v6 = (_DWORD *)v2; if ( !v2 ) goto LABEL_11; while ( 1 ) { v7 = v6 + 2; v8 = v6; v6 = (_DWORD *)*v6; if ( v5 == *v7 ) break; if ( !v6 ) goto LABEL_11; } if ( !v8 ) { LABEL_11: v9 = (_DWORD *)((int (__thiscall *)(void ***))v22[1])(&v22); *((_WORD *)v9 + 4) = v5; *v9 = 0; v9[1] = v24; if ( v24 ) { *v24 = v9; v2 = (int)v23; } else { v2 = (int)v9; v23 = v9; } ++v25; v24 = v9; } } ++v3; } while ( v3 < 5 ); v10 = a2; v11 = *(_BYTE *)(a2 + 192) == 0; v27 = 0; if ( !v11 ) { v12 = (_WORD *)(a2 + 200); do { if ( *((_BYTE *)v12 - 4) ) { v13 = *v12; v14 = (_DWORD *)v2; if ( !v2 ) goto LABEL_24; while ( 1 ) { v15 = v14 + 2; v16 = v14; v14 = (_DWORD *)*v14; if ( v13 == *v15 ) break; if ( !v14 ) goto LABEL_24; } if ( !v16 ) { LABEL_24: v17 = (_DWORD *)((int (__thiscall *)(void ***))v22[1])(&v22); *((_WORD *)v17 + 4) = v13; *v17 = 0; v17[1] = v24; if ( v24 ) { *v24 = v17; v2 = (int)v23; } else { v2 = (int)v17; v23 = v17; } ++v25; v24 = v17; } v10 = a2; } v18 = *(unsigned __int8 *)(v10 + 192); v12 += 16; ++v27; } while ( v27 < v18 ); } if ( v2 ) { do { v19 = *(_WORD *)(v2 + 8); v2 = *(_DWORD *)v2; sub_6CEA90(v10, v19); } while ( v2 ); v20 = v23; while ( v20 ) { v21 = v20; v20 = (_DWORD *)*v20; ((void (__thiscall *)(void ***, _DWORD *))v22[2])(&v22, v21); } } } // 9F8F58: using guessed type void *PgTList::`vftable'; //----- (006CF210) -------------------------------------------------------- _DWORD *sub_6CF210() { _DWORD *result; // eax result = dword_B9E0E8; if ( !dword_B9E0E8 ) { result = operator new(0x40u); if ( result ) { result[3] = 0; result[1] = 0; result[2] = 0; *result = &PgTList::`vftable'; result[8] = 0; result[9] = 15; *((_BYTE *)result + 16) = 0; result[14] = 0; result[12] = 0; result[13] = 0; result[11] = &PgTList::`vftable'; dword_B9E0E8 = result; } else { result = 0; dword_B9E0E8 = 0; } } return result; } // 9F8F48: using guessed type void *PgTList::`vftable'; // 9F8F74: using guessed type void *PgTList::`vftable'; //----- (006CF270) -------------------------------------------------------- void sub_6CF270() { void *v0; // esi if ( dword_B9E0E8 ) { v0 = dword_B9E0E8; sub_6CEEC0(dword_B9E0E8); operator delete(v0); dword_B9E0E8 = 0; } } //----- (006CF2A0) -------------------------------------------------------- void __thiscall sub_6CF2A0(_DWORD *this, int a2) { unsigned __int16 *v2; // ebx int v3; // esi int v4; // edi int *v5; // eax int v6; // esi _DWORD *v7; // eax _DWORD *v8; // edi _DWORD *v9; // eax _DWORD *v10; // ecx unsigned __int16 *v11; // ebx int v12; // esi int v13; // edi int *v14; // eax int v15; // esi _DWORD *v16; // eax _DWORD *v17; // edi _DWORD *v18; // eax _DWORD *v19; // ecx _DWORD *v20; // [esp+Ch] [ebp-8h] signed int v21; // [esp+10h] [ebp-4h] signed int v22; // [esp+10h] [ebp-4h] v20 = this; v21 = 0; v2 = (unsigned __int16 *)(a2 + 94); do { if ( !*((_BYTE *)v2 - 2) ) break; if ( *((_BYTE *)v2 + 4) == 2 ) { v3 = dword_ACDA74; v4 = *v2; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * v4); if ( *v5 ) { v6 = *v5; if ( *v5 ) { v7 = operator new(0x20u); v8 = 0; if ( v7 ) { v7[5] = 0; v7[6] = 15; *((_BYTE *)v7 + 4) = 0; v8 = v7; } *(_WORD *)v8 = *(_WORD *)(a2 + 4); *((_WORD *)v8 + 1) = *v2; sub_4018E0(v8 + 1, (void *)(v6 + 213), strlen((const char *)(v6 + 213))); v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v20[11] + 4))(v20 + 11); v9[2] = v8; *v9 = 0; v9[1] = v20[13]; v10 = (_DWORD *)v20[13]; if ( v10 ) *v10 = v9; else v20[12] = v9; ++v20[14]; v20[13] = v9; } } } } } v2 += 4; ++v21; } while ( v21 < 5 ); v22 = 0; if ( *(_BYTE *)(a2 + 192) ) { v11 = (unsigned __int16 *)(a2 + 200); do { if ( !*((_BYTE *)v11 - 4) ) break; if ( *((_BYTE *)v11 + 24) == 2 ) { v12 = dword_ACDA74; v13 = *v11; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v13) ) { if ( (unsigned __int16)v13 <= *(_WORD *)(v12 + 200) ) { v14 = (int *)(*(_DWORD *)(v12 + 196) + 4 * v13); if ( *v14 ) { v15 = *v14; if ( *v14 ) { v16 = operator new(0x20u); v17 = 0; if ( v16 ) { v16[5] = 0; v16[6] = 15; *((_BYTE *)v16 + 4) = 0; v17 = v16; } *(_WORD *)v17 = *(_WORD *)(a2 + 4); *((_WORD *)v17 + 1) = *v11; sub_4018E0(v17 + 1, (void *)(v15 + 213), strlen((const char *)(v15 + 213))); v18 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v20[11] + 4))(v20 + 11); v18[2] = v17; *v18 = 0; v18[1] = v20[13]; v19 = (_DWORD *)v20[13]; if ( v19 ) *v19 = v18; else v20[12] = v18; ++v20[14]; v20[13] = v18; } } } } } v11 += 16; ++v22; } while ( v22 < *(unsigned __int8 *)(a2 + 192) ); } } // ACDA74: using guessed type int dword_ACDA74; //----- (006CF4D0) -------------------------------------------------------- char __thiscall sub_6CF4D0(_DWORD *this, int a2, _WORD *a3) { _DWORD *v3; // ebx int v4; // edi int v5; // esi unsigned __int8 (__thiscall *v6)(int, int); // edx int *v7; // eax int v8; // eax _DWORD *v9; // ebx int v10; // eax unsigned int v11; // esi int v12; // edi unsigned int v13; // ecx unsigned __int8 *v14; // eax int v15; // eax unsigned __int8 *v16; // eax int v18; // [esp+10h] [ebp-34h] void *v19; // [esp+18h] [ebp-2Ch] unsigned int v20; // [esp+28h] [ebp-1Ch] unsigned int v21; // [esp+2Ch] [ebp-18h] int v22; // [esp+40h] [ebp-4h] v3 = this; v21 = 15; v20 = 0; LOBYTE(v19) = 0; v4 = (unsigned __int16)*a3; v5 = dword_ACDA74; v6 = *(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16); v22 = 0; if ( !v6(dword_ACDA74, v4) || (unsigned __int16)v4 > *(_WORD *)(v5 + 200) || (v7 = (int *)(*(_DWORD *)(v5 + 196) + 4 * v4), !*v7) || (v8 = *v7) == 0 ) { if ( v21 >= 0x10 ) operator delete(v19); return 0; } sub_4018E0(&v19, (void *)(v8 + 213), strlen((const char *)(v8 + 213))); v9 = (_DWORD *)v3[12]; if ( !v9 ) { LABEL_22: if ( v21 >= 0x10 ) operator delete(v19); return 0; } while ( 1 ) { v10 = v9[2]; v9 = (_DWORD *)*v9; v18 = v10; if ( v10 ) { if ( *(_WORD *)v10 == *(_WORD *)(*(_DWORD *)a2 + 4) ) { v11 = *(_DWORD *)(v10 + 20); v12 = v10 + 4; v13 = v11; if ( v11 >= 1 ) v13 = 1; v14 = (unsigned __int8 *)(*(_DWORD *)(v10 + 24) < 0x10u ? v10 + 4 : *(_DWORD *)v12); v15 = sub_40C0B0(v14, "-", v13); if ( v15 || v11 < 1 || (LOBYTE(v15) = v11 != 1, v15) ) { v16 = (unsigned __int8 *)v19; if ( v21 < 0x10 ) v16 = (unsigned __int8 *)&v19; if ( !sub_40C2F0((unsigned __int8 *)v12, 0, *(_DWORD *)(v12 + 16), v16, v20) ) break; } } } if ( !v9 ) goto LABEL_22; } *a3 = *(_WORD *)(v18 + 2); if ( v21 >= 0x10 ) operator delete(v19); return 1; } // ACDA74: using guessed type int dword_ACDA74; //----- (006CF680) -------------------------------------------------------- void __thiscall sub_6CF680(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // edi unsigned int v4; // ebx int v5; // edi _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *v8; // edi int v9; // ebx _DWORD **v10; // [esp+Ch] [ebp-8h] _DWORD *v11; // [esp+10h] [ebp-4h] v1 = this; v2 = sub_6CD770(); v3 = (_DWORD *)v2[1]; v10 = (_DWORD **)v2; v11 = (_DWORD *)v2[1]; v4 = 0; if ( (unsigned __int16)sub_53DA30(v3) > 0u ) { while ( 1 ) { v5 = sub_74E2E0(v3, v4); if ( sub_74BAB0(v10, *(_WORD *)(v5 + 4)) ) { v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v1 + 4))(v1); v6[2] = v5; *v6 = 0; v6[1] = v1[2]; v7 = (_DWORD *)v1[2]; if ( v7 ) *v7 = v6; else v1[1] = v6; ++v1[3]; v1[2] = v6; } if ( (signed int)++v4 >= (unsigned __int16)sub_53DA30(v11) ) break; v3 = v11; } } v8 = (_DWORD *)v1[1]; while ( v8 ) { v9 = v8[2]; v8 = (_DWORD *)*v8; sub_6CF060(v1, v9); sub_6CF2A0(v1, v9); } } //----- (006CF740) -------------------------------------------------------- void __thiscall sub_6CF740(_DWORD *this, __int16 a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi unsigned int v5; // ebx int v6; // eax int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ecx _DWORD *v10; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_6CD770(); v4 = (_DWORD *)v3[1]; v10 = (_DWORD *)v3[1]; v5 = 0; if ( (unsigned __int16)sub_53DA30((_DWORD *)v3[1]) > 0u ) { while ( 1 ) { v6 = sub_74E2E0(v4, v5); v7 = v6; if ( v6 ) { if ( *(_WORD *)(v6 + 4) == a2 ) break; } if ( (signed int)++v5 >= (unsigned __int16)sub_53DA30(v10) ) return; v4 = v10; } v8 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v8[2] = v7; *v8 = 0; v8[1] = v2[2]; v9 = (_DWORD *)v2[2]; if ( v9 ) *v9 = v8; else v2[1] = v8; ++v2[3]; v2[2] = v8; sub_6CF060(v2, v7); sub_6CF2A0(v2, v7); } } //----- (006CF7E0) -------------------------------------------------------- int __thiscall sub_6CF7E0(unsigned __int8 *this, int a2, unsigned __int8 *a3) { _DWORD **v3; // eax int v4; // eax char *v5; // eax unsigned __int8 *v6; // esi unsigned __int8 *v7; // ecx unsigned __int64 v8; // ST04_8 int result; // eax v6 = this + 16; v3 = (_DWORD **)sub_6CD770(); v4 = sub_74E810(v3[1], *(unsigned __int16 *)(a2 + 4)); v5 = sub_7549E0("{color,yellow,%s}", v4); sub_4018E0(v6, v5, strlen(v5)); if ( *((_DWORD *)v6 + 5) < 0x10u ) v7 = v6; else v7 = *(unsigned __int8 **)v6; HIDWORD(v8) = *((_DWORD *)v6 + 4); LODWORD(v8) = 0; result = sub_417B90(a3, v7, v8); if ( result == -1 ) result = sub_401C20(a3, (int)v6, 0, 0xFFFFFFFF); return result; } //----- (006CF860) -------------------------------------------------------- int __thiscall sub_6CF860(_DWORD *this, int a2, _DWORD *a3, __int16 a4, char a5) { _DWORD *v5; // eax int result; // eax unsigned __int16 *v7; // ebx int v8; // esi int v9; // edi int v10; // eax int v11; // edx int v12; // ST10_4 char *v13; // eax char *v14; // eax char *v15; // eax void *v16; // eax void *v17; // ecx int v18; // esi int v19; // edi int v20; // eax int v21; // edx int v22; // ST10_4 char *v23; // eax char *v24; // eax char *v25; // eax void *v26; // eax int v27; // esi int v28; // edi int v29; // eax int v30; // edx signed int v31; // esi char *v32; // eax int v33; // edi int v34; // ebx int v35; // edx int v36; // eax char v37; // cl char *v38; // eax char *v39; // eax void *v40; // eax int v41; // [esp+10h] [ebp-78h] int v42; // [esp+18h] [ebp-70h] int v43; // [esp+1Ch] [ebp-6Ch] _DWORD *v44; // [esp+20h] [ebp-68h] void *v45; // [esp+24h] [ebp-64h] unsigned int v46; // [esp+38h] [ebp-50h] void *v47; // [esp+40h] [ebp-48h] unsigned int v48; // [esp+54h] [ebp-34h] void *v49; // [esp+5Ch] [ebp-2Ch] unsigned int v50; // [esp+70h] [ebp-18h] int v51; // [esp+84h] [ebp-4h] v44 = this; v5 = sub_6CD770(); result = sub_74A800(v5, *(_WORD *)(a2 + 4)); v7 = (unsigned __int16 *)(a2 + 94); v41 = result; v42 = 0; v43 = a2 + 94; while ( *((_BYTE *)v7 - 2) ) { if ( *((_BYTE *)v7 + 2) != 1 ) { if ( *((_BYTE *)v7 + 2) == 2 ) { v18 = dword_ACDA48; v19 = *v7; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v19) ) { if ( (unsigned __int16)v19 <= *(_WORD *)(v18 + 200) ) { v21 = *(_DWORD *)(v18 + 196); if ( *(_DWORD *)(v21 + 4 * v19) ) v20 = *(_DWORD *)(v21 + 4 * v19); else v20 = 0; } else { v20 = 0; } } else { v20 = 0; } v22 = v20 + 34; v23 = (char *)sub_40C190(1011449494); v24 = sub_7549E0(v23, &unk_9F8E22, v22); v25 = sub_7549E0("- %s", v24); sub_4018E0(v44 + 4, v25, strlen(v25)); v26 = sub_6D0C10(&v47, "\n", (int)(v44 + 4)); v51 = 1; sub_401C20(a3, (int)v26, 0, 0xFFFFFFFF); v51 = -1; if ( v48 < 0x10 ) goto LABEL_54; v17 = v47; } else { if ( *((_BYTE *)v7 + 2) != 3 ) goto LABEL_54; v8 = dword_ACDA48; v9 = *v7; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) ) { v11 = *(_DWORD *)(v8 + 196); v10 = *(_DWORD *)(v11 + 4 * v9) ? *(_DWORD *)(v11 + 4 * v9) : 0; } else { v10 = 0; } } else { v10 = 0; } v12 = v10 + 34; v13 = (char *)sub_40C190(-1913854750); v14 = sub_7549E0(v13, &unk_9F8E23, v12); v15 = sub_7549E0("- %s", v14); sub_4018E0(v44 + 4, v15, strlen(v15)); v16 = sub_6D0C10(&v45, "\n", (int)(v44 + 4)); v51 = 2; sub_401C20(a3, (int)v16, 0, 0xFFFFFFFF); v51 = -1; if ( v46 < 0x10 ) goto LABEL_54; v17 = v45; } goto LABEL_53; } v27 = dword_ACDA48; v28 = *v7; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA48 + 16))(dword_ACDA48, v28) ) { if ( (unsigned __int16)v28 <= *(_WORD *)(v27 + 200) ) { v30 = *(_DWORD *)(v27 + 196); if ( *(_DWORD *)(v30 + 4 * v28) ) v29 = *(_DWORD *)(v30 + 4 * v28); else v29 = 0; } else { v29 = 0; } } else { v29 = 0; } v31 = 1; if ( a5 == 1 && *v7 != a4 ) goto LABEL_54; if ( v41 ) v31 = *(unsigned __int8 *)(v42 + v41 + 24); if ( !*((_BYTE *)v7 + 4) ) { v32 = sub_7549E0("- %d/%d %s", v31, *((unsigned __int8 *)v7 + 3), v29 + 34); sub_4018E0(v44 + 4, v32, strlen(v32)); goto LABEL_51; } v33 = dword_ACDA74; v34 = *v7; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA74 + 16))(dword_ACDA74, v34) ) { if ( (unsigned __int16)v34 <= *(_WORD *)(v33 + 200) ) { v35 = *(_DWORD *)(v33 + 196); if ( *(_DWORD *)(v35 + 4 * v34) ) { v36 = *(_DWORD *)(v35 + 4 * v34); if ( v36 ) { v37 = *(_BYTE *)(v43 + 4); switch ( v37 ) { case 1: v38 = sub_7549E0("- %d/%d %s", v31, *(unsigned __int8 *)(v43 + 3), v36 + 181); sub_4018E0(v44 + 4, v38, strlen(v38)); break; case 2: v39 = sub_7549E0("- %d/%d %s", v31, *(unsigned __int8 *)(v43 + 3), v36 + 213); LABEL_49: sub_40AC00(v44 + 4, v39); break; case 3: v39 = sub_7549E0("- %d/%d %s", v31, *(unsigned __int8 *)(v43 + 3), v36 + 245); goto LABEL_49; case 4: v39 = sub_7549E0("- %d/%d %s", v31, *(unsigned __int8 *)(v43 + 3), v36 + 277); goto LABEL_49; } } } } } v7 = (unsigned __int16 *)v43; LABEL_51: v40 = sub_6D0C10(&v49, "\n", (int)(v44 + 4)); v51 = 0; sub_401C20(a3, (int)v40, 0, 0xFFFFFFFF); v51 = -1; if ( v50 >= 0x10 ) { v17 = v49; LABEL_53: operator delete(v17); } LABEL_54: result = v42 + 1; v7 += 4; v42 = result; v43 = (int)v7; if ( result >= 5 ) return result; } return result; } // ACDA48: using guessed type int dword_ACDA48; // ACDA74: using guessed type int dword_ACDA74; //----- (006CFC80) -------------------------------------------------------- int __thiscall sub_6CFC80(_DWORD *this, int a2, _DWORD *a3, __int16 a4, char a5) { int result; // eax unsigned __int16 *v6; // ebx int v7; // esi int v8; // edi int v9; // esi int v10; // edx int v11; // eax char *v12; // eax void *v13; // eax _DWORD *v14; // [esp+14h] [ebp-34h] int v15; // [esp+18h] [ebp-30h] void *v16; // [esp+1Ch] [ebp-2Ch] int v17; // [esp+2Ch] [ebp-1Ch] unsigned int v18; // [esp+30h] [ebp-18h] int v19; // [esp+44h] [ebp-4h] result = (int)a3; v14 = this; v15 = 0; v6 = (unsigned __int16 *)(a2 + 134); do { if ( !*((_BYTE *)v6 - 2) ) break; if ( a5 != 1 || *v6 == a4 ) { v7 = dword_ACB230; v8 = *v6; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v8) ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v7 + 200) ) { v10 = *(_DWORD *)(v7 + 196); if ( *(_DWORD *)(v10 + 4 * v8) ) v9 = *(_DWORD *)(v10 + 4 * v8); else v9 = 0; } else { v9 = 0; } } else { v9 = 0; } v11 = sub_6854B0(&byte_ADA230, *v6); v12 = sub_7549E0("- %d/%d %s", v11, v6[1], v9 + 34); sub_4018E0(v14 + 4, v12, strlen(v12)); v13 = sub_6D0C10(&v16, "\n", (int)(v14 + 4)); v19 = 0; sub_401C20(a3, (int)v13, 0, 0xFFFFFFFF); v19 = -1; if ( v18 >= 0x10 ) operator delete(v16); v18 = 15; v17 = 0; LOBYTE(v16) = 0; } result = v15 + 1; v6 += 3; v15 = result; } while ( result < 5 ); return result; } // ACB230: using guessed type int dword_ACB230; // ADA230: using guessed type char byte_ADA230; //----- (006CFDF0) -------------------------------------------------------- void __thiscall sub_6CFDF0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // edi char *v4; // eax void *v5; // eax void *v6; // [esp+10h] [ebp-2Ch] unsigned int v7; // [esp+24h] [ebp-18h] int v8; // [esp+38h] [ebp-4h] v3 = this; if ( *(_BYTE *)(a2 + 89) ) { v4 = sub_7549E0("- Level : %d", *(unsigned __int8 *)(a2 + 90)); sub_4018E0(v3 + 4, v4, strlen(v4)); v5 = sub_6D0C10(&v6, "\n", (int)(v3 + 4)); v8 = 0; sub_401C20(a3, (int)v5, 0, 0xFFFFFFFF); if ( v7 >= 0x10 ) operator delete(v6); } } //----- (006CFEB0) -------------------------------------------------------- void __thiscall sub_6CFEB0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // edi char *v4; // eax char *v5; // eax char *v6; // eax void *v7; // eax void *v8; // [esp+10h] [ebp-2Ch] unsigned int v9; // [esp+24h] [ebp-18h] int v10; // [esp+38h] [ebp-4h] v3 = this; if ( *(_BYTE *)(a2 + 162) ) { v4 = (char *)sub_40C190(959593777); v5 = sub_7549E0(v4, &unk_9F8E2F); v6 = sub_7549E0("- %s", v5); sub_4018E0(v3 + 4, v6, strlen(v6)); v7 = sub_6D0C10(&v8, "\n", (int)(v3 + 4)); v10 = 0; sub_401C20(a3, (int)v7, 0, 0xFFFFFFFF); if ( v9 >= 0x10 ) operator delete(v8); } } //----- (006CFF90) -------------------------------------------------------- char __thiscall sub_6CFF90(unsigned __int8 *this, unsigned __int16 a2, int a3, int a4) { unsigned __int8 *v4; // ebx signed int v5; // ebx int v6; // edi signed int v7; // ebx _WORD *v8; // edi unsigned __int8 *v10; // [esp+8h] [ebp-4h] v4 = this; v10 = this; if ( !sub_6CE960(a3, a2) ) return 0; if ( *(_DWORD *)(a4 + 16) ) sub_401D10(a4, "\n", 1u); sub_6CF7E0(v4, a3, (unsigned __int8 *)a4); v5 = 0; if ( *(_BYTE *)(a3 + 192) ) { v6 = a3 + 200; do { if ( !*(_BYTE *)(v6 - 4) ) break; if ( *(_DWORD *)v6 == a2 ) sub_6CFC80(v10, a3, (_DWORD *)a4, *(_WORD *)(v6 + 8), 1); ++v5; v6 += 32; } while ( v5 < *(unsigned __int8 *)(a3 + 192) ); } v7 = 0; v8 = (_WORD *)(a3 + 94); do { if ( !*((_BYTE *)v8 - 2) ) break; if ( *v8 == a2 ) sub_6CF860(v10, a3, (_DWORD *)a4, a2, 1); ++v7; v8 += 4; } while ( v7 < 5 ); return 1; } //----- (006D0060) -------------------------------------------------------- const void **__thiscall sub_6D0060(unsigned __int8 *this, int a2, __int16 a3) { unsigned __int8 *v3; // esi const void **v4; // esi void *v6; // [esp+Ch] [ebp-2Ch] int v7; // [esp+1Ch] [ebp-1Ch] unsigned int v8; // [esp+20h] [ebp-18h] int v9; // [esp+34h] [ebp-4h] v3 = this; v8 = 15; v7 = 0; LOBYTE(v6) = 0; v9 = 0; sub_6CF7E0(this, a2, (unsigned __int8 *)&v6); sub_6CFDF0(v3, a2, &v6); sub_6CF860(v3, a2, &v6, a3, 1); sub_6CFC80(v3, a2, &v6, 0xFFFF, 0); sub_6CFEB0(v3, a2, &v6); v4 = (const void **)(v3 + 16); sub_4017F0(v4, (const void **)&v6, 0, (void *)0xFFFFFFFF); if ( (unsigned int)v4[5] >= 0x10 ) v4 = (const void **)*v4; if ( v8 >= 0x10 ) operator delete(v6); return v4; } //----- (006D0140) -------------------------------------------------------- void __thiscall sub_6D0140(unsigned __int8 *this, int a2) { unsigned __int8 *v2; // esi unsigned __int16 v3; // bx int v4; // eax bool v5; // cf int v6; // ecx unsigned __int8 *v7; // eax _DWORD *v8; // edi int *v9; // eax int v10; // esi char v11; // al int v12; // edx bool v13; // zf int v14; // [esp+10h] [ebp-48h] int v15; // [esp+14h] [ebp-44h] int v16; // [esp+18h] [ebp-40h] int v17; // [esp+1Ch] [ebp-3Ch] int v18; // [esp+20h] [ebp-38h] int v19; // [esp+24h] [ebp-34h] unsigned __int8 *v20; // [esp+28h] [ebp-30h] void *v21; // [esp+2Ch] [ebp-2Ch] int v22; // [esp+3Ch] [ebp-1Ch] unsigned int v23; // [esp+40h] [ebp-18h] int v24; // [esp+54h] [ebp-4h] v2 = this; v20 = this; if ( a2 ) { v3 = *(_WORD *)(a2 + 942); v4 = *(unsigned __int16 *)(a2 + 548); v17 = *(unsigned __int16 *)(a2 + 942); v15 = v4; if ( *((_WORD *)this + 30) != (_WORD)v4 ) { sub_5C1AD0((char *)dword_AD01E8); v5 = *((_DWORD *)v2 + 9) < 0x10u; v6 = (int)(v2 + 16); v16 = v6; *(_DWORD *)(v6 + 16) = 0; v7 = v5 ? v2 + 16 : *(_DWORD *)v6; *v7 = 0; if ( dword_AB76C0 ) { v18 = 0xFFFF; v19 = 0xFFFF; v23 = 15; v22 = 0; LOBYTE(v21) = 0; v24 = 0; v8 = (_DWORD *)dword_AB76B8; if ( dword_AB76B8 ) { do { v9 = (int *)v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) { v10 = *v9; v14 = v10; if ( v10 ) { if ( (v3 != (_WORD)v18 || *(_WORD *)(v10 + 4) != (_WORD)v19) && !*(_BYTE *)(v10 + 89) ) { v11 = sub_6CF4D0(v20, (int)&v14, &v17); v3 = v17; if ( v11 || sub_6CE820(v10, v17) ) { if ( sub_6CFF90(v20, v3, v10, (int)&v21) ) { v12 = *(unsigned __int16 *)(v10 + 4); v18 = v3; v19 = v12; } } } } } } while ( v8 ); v6 = v16; v2 = v20; } v13 = v22 == 0; *((_WORD *)v2 + 30) = v15; if ( !v13 ) sub_4017F0((const void **)v6, (const void **)&v21, 0, (void *)0xFFFFFFFF); if ( v23 >= 0x10 ) operator delete(v21); } } } } // AB76B8: using guessed type int dword_AB76B8; // AB76C0: using guessed type int dword_AB76C0; // AD01E8: using guessed type int dword_AD01E8; //----- (006D0300) -------------------------------------------------------- void *__thiscall sub_6D0300(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,QuestMC *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8EB8: using guessed type void *NiTListBase,QuestMC *>::`vftable'; //----- (006D0330) -------------------------------------------------------- void *__thiscall sub_6D0330(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,QUEST_DATA *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; //----- (006D0360) -------------------------------------------------------- void *__thiscall sub_6D0360(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8EF8: using guessed type void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; //----- (006D0390) -------------------------------------------------------- void *__thiscall sub_6D0390(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,unsigned short>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8F08: using guessed type void *NiTListBase,unsigned short>::`vftable'; //----- (006D03C0) -------------------------------------------------------- int __thiscall sub_6D03C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,QuestMC *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QuestMC *>::`vftable'; return result; } // 9F8EB8: using guessed type void *NiTListBase,QuestMC *>::`vftable'; // 9F8EC8: using guessed type void *NiTPointerListBase,QuestMC *>::`vftable'; //----- (006D0440) -------------------------------------------------------- _DWORD *__thiscall sub_6D0440(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,QuestMC *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestMC *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8EB8: using guessed type void *NiTListBase,QuestMC *>::`vftable'; // 9F8EC8: using guessed type void *NiTPointerListBase,QuestMC *>::`vftable'; //----- (006D04D0) -------------------------------------------------------- int __thiscall sub_6D04D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,QUEST_DATA *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QUEST_DATA *>::`vftable'; return result; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; // 9F8EE8: using guessed type void *NiTPointerListBase,QUEST_DATA *>::`vftable'; //----- (006D0550) -------------------------------------------------------- _DWORD *__thiscall sub_6D0550(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,QUEST_DATA *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QUEST_DATA *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; // 9F8EE8: using guessed type void *NiTPointerListBase,QUEST_DATA *>::`vftable'; //----- (006D05E0) -------------------------------------------------------- int __thiscall sub_6D05E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,unsigned short>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,unsigned short>::`vftable'; return result; } // 9F8F08: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9F8F18: using guessed type void *NiTPointerListBase,unsigned short>::`vftable'; //----- (006D0660) -------------------------------------------------------- _DWORD *__thiscall sub_6D0660(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,unsigned short>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,unsigned short>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8F08: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9F8F18: using guessed type void *NiTPointerListBase,unsigned short>::`vftable'; //----- (006D06F0) -------------------------------------------------------- void __stdcall sub_6D06F0(_DWORD *a1) { bool v1; // zf a1[2] = 0; EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; a1[1] = 0; *a1 = dword_BA46F4; v1 = dword_BA4714-- == 1; dword_BA46F4 = (int)a1; if ( v1 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (006D0760) -------------------------------------------------------- int __thiscall sub_6D0760(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QUEST_DATA *>::`vftable'; return result; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; // 9F8F48: using guessed type void *PgTList::`vftable'; //----- (006D07E0) -------------------------------------------------------- void __stdcall sub_6D07E0(int a1) { bool v1; // zf *(_WORD *)(a1 + 8) = 0; EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; *(_DWORD *)(a1 + 4) = 0; *(_DWORD *)a1 = dword_BA46F4; v1 = dword_BA4714-- == 1; dword_BA46F4 = a1; if ( v1 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (006D0840) -------------------------------------------------------- int __thiscall sub_6D0840(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,unsigned short>::`vftable'; return result; } // 9F8F08: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9F8F58: using guessed type void *PgTList::`vftable'; //----- (006D08C0) -------------------------------------------------------- _DWORD *__thiscall sub_6D08C0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestMC *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8EB8: using guessed type void *NiTListBase,QuestMC *>::`vftable'; // 9F8F38: using guessed type void *PgTList::`vftable'; //----- (006D0950) -------------------------------------------------------- _DWORD *__thiscall sub_6D0950(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QUEST_DATA *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8ED8: using guessed type void *NiTListBase,QUEST_DATA *>::`vftable'; // 9F8F48: using guessed type void *PgTList::`vftable'; //----- (006D09E0) -------------------------------------------------------- int __thiscall sub_6D09E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; return result; } // 9F8EF8: using guessed type void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; // 9F8F28: using guessed type void *NiTPointerListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; //----- (006D0A60) -------------------------------------------------------- _DWORD *__thiscall sub_6D0A60(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8EF8: using guessed type void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; // 9F8F28: using guessed type void *NiTPointerListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; //----- (006D0AF0) -------------------------------------------------------- _DWORD *__thiscall sub_6D0AF0(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,unsigned short>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8F08: using guessed type void *NiTListBase,unsigned short>::`vftable'; // 9F8F58: using guessed type void *PgTList::`vftable'; //----- (006D0B80) -------------------------------------------------------- _DWORD *__thiscall sub_6D0B80(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8EF8: using guessed type void *NiTListBase,QuestHelperMgr::ProgressQuestMobGroup *>::`vftable'; // 9F8F74: using guessed type void *PgTList::`vftable'; //----- (006D0C10) -------------------------------------------------------- void *__cdecl sub_6D0C10(void *a1, void *a2, int a3) { unsigned int v3; // edi void *v4; // eax bool v5; // cf _BYTE *v6; // eax *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; v3 = *((_DWORD *)a1 + 4); v4 = (void *)(*(_DWORD *)(a3 + 16) + strlen((const char *)a2)); if ( v3 <= (unsigned int)v4 && *((void **)a1 + 5) != v4 && (unsigned __int8)sub_401740(a1, v4, 1) ) { v5 = *((_DWORD *)a1 + 5) < 0x10u; *((_DWORD *)a1 + 4) = v3; if ( v5 ) v6 = a1; else v6 = *(_BYTE **)a1; v6[v3] = 0; } sub_401D10((int)a1, a2, strlen((const char *)a2)); sub_401C20(a1, a3, 0, 0xFFFFFFFF); return a1; } //----- (006D0D10) -------------------------------------------------------- int __thiscall sub_6D0D10(_DWORD *this, unsigned __int16 a2) { int result; // eax int v3; // ecx int v4; // ecx int v5; // ecx int v6; // ecx int v7; // ecx int v8; // ecx int v9; // ecx int v10; // ecx result = a2 - 1; switch ( a2 ) { case 1u: v3 = this[3]; result = 0; if ( v3 ) *(_BYTE *)(v3 + 38) = 0; break; case 2u: v4 = this[3]; result = 0; if ( v4 ) *(_BYTE *)(v4 + 34) = 0; break; case 3u: result = 0; if ( this[3] ) { *(_BYTE *)(this[3] + 30) = 0; *(_BYTE *)(this[3] + 26) = 0; } break; case 4u: v5 = this[3]; result = 0; if ( v5 ) *(_BYTE *)(v5 + 22) = 0; break; case 5u: v6 = this[3]; result = 0; if ( v6 ) *(_BYTE *)(v6 + 18) = 0; break; case 6u: v7 = this[3]; result = 0; if ( v7 ) *(_BYTE *)(v7 + 42) = 0; break; case 7u: v8 = this[3]; result = 0; if ( v8 ) *(_BYTE *)(v8 + 10) = 0; break; case 8u: v9 = this[3]; result = 0; if ( v9 ) *(_BYTE *)(v9 + 6) = 0; break; case 9u: v10 = this[3]; result = 0; if ( v10 ) *(_BYTE *)(v10 + 14) = 0; break; default: return result; } return result; } //----- (006D0E10) -------------------------------------------------------- char __thiscall sub_6D0E10(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 6) ) { v1 = *((_WORD *)this + 2); v2 = *((_BYTE *)this + 7); *((_BYTE *)this + 6) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0E30) -------------------------------------------------------- char __thiscall sub_6D0E30(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 14) ) { v1 = *((_WORD *)this + 6); v2 = *((_BYTE *)this + 15); *((_BYTE *)this + 14) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0E50) -------------------------------------------------------- char __thiscall sub_6D0E50(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 22) ) { v1 = *((_WORD *)this + 10); v2 = *((_BYTE *)this + 23); *((_BYTE *)this + 22) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0E70) -------------------------------------------------------- char __thiscall sub_6D0E70(_DWORD **this) { bool v1; // zf char result; // al if ( *((_BYTE *)this + 26) ) { v1 = *((_BYTE *)this + 30) == 0; *((_BYTE *)this + 26) = 0; if ( v1 ) result = sub_4A5800(*this, *((_WORD *)this + 12), *((_BYTE *)this + 27), 1); } return result; } //----- (006D0EA0) -------------------------------------------------------- char __thiscall sub_6D0EA0(_DWORD **this) { bool v1; // zf char result; // al if ( *((_BYTE *)this + 30) ) { v1 = *((_BYTE *)this + 26) == 0; *((_BYTE *)this + 30) = 0; if ( v1 ) result = sub_4A5800(*this, *((_WORD *)this + 14), *((_BYTE *)this + 31), 1); } return result; } //----- (006D0ED0) -------------------------------------------------------- char __thiscall sub_6D0ED0(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 34) ) { v1 = *((_WORD *)this + 16); v2 = *((_BYTE *)this + 35); *((_BYTE *)this + 34) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0EF0) -------------------------------------------------------- char __thiscall sub_6D0EF0(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 38) ) { v1 = *((_WORD *)this + 18); v2 = *((_BYTE *)this + 39); *((_BYTE *)this + 38) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0F10) -------------------------------------------------------- char __thiscall sub_6D0F10(_DWORD **this) { __int16 v1; // dx char v2; // ST04_1 char result; // al if ( *((_BYTE *)this + 42) ) { v1 = *((_WORD *)this + 20); v2 = *((_BYTE *)this + 43); *((_BYTE *)this + 42) = 0; result = sub_4A5800(*this, v1, v2, 1); } return result; } //----- (006D0F30) -------------------------------------------------------- void __thiscall sub_6D0F30(char **this, __int16 a2, __int16 a3, float a4) { char **v4; // esi char v5; // cl char *v6; // esi void *v7; // eax float v8; // eax v4 = this; switch ( a2 ) { case 1: if ( this[3] ) { this[3][38] = 1; *((_WORD *)this[3] + 18) = a3; this[3][39] = LOBYTE(a4); sub_4A5020(*(_DWORD ***)this[3]); } break; case 2: if ( this[3] ) { this[3][34] = 1; *((_WORD *)this[3] + 16) = a3; this[3][35] = LOBYTE(a4); sub_4A5050(*(_DWORD ****)this[3], 12); } break; case 3: if ( this[3] ) { this[3][30] = 1; *((_WORD *)this[3] + 14) = a3; v5 = LOBYTE(a4); v4[3][31] = LOBYTE(a4); v4[3][26] = 1; *((_WORD *)v4[3] + 12) = a3; v4[3][27] = v5; } break; case 4: if ( this[3] ) { this[3][22] = 1; *((_WORD *)this[3] + 10) = a3; this[3][23] = LOBYTE(a4); } break; case 5: v6 = this[3]; if ( v6 ) sub_4AA080(*(_BYTE ***)v6, 0); break; case 6: if ( this[3] ) { this[3][42] = 1; *((_WORD *)this[3] + 20) = a3; this[3][43] = LOBYTE(a4); } break; case 8: if ( this[3] ) { this[3][6] = 1; *((_WORD *)this[3] + 2) = a3; this[3][7] = LOBYTE(a4); } break; case 9: if ( this[3] ) { this[3][14] = 1; *((_WORD *)this[3] + 6) = a3; this[3][15] = LOBYTE(a4); } break; case 0xF: v7 = operator new(0x28u); if ( v7 ) v8 = COERCE_FLOAT(sub_6D1280((int)v7, *(_DWORD *)v4[3], a2, a3, a4)); else v8 = 0.0; a4 = v8; sub_67AFA0(v4, (int)&a4); break; default: return; } } //----- (006D11E0) -------------------------------------------------------- void __thiscall sub_6D11E0(_DWORD *this, float a2) { _DWORD *v2; // ecx _DWORD *v3; // ebx _DWORD **v4; // esi int v5; // edi _DWORD *v6; // [esp+10h] [ebp-8h] _DWORD *v7; // [esp+14h] [ebp-4h] v7 = this; v2 = (_DWORD *)*this; v3 = (_DWORD *)*v2; v6 = v2; while ( v3 != v6 ) { v4 = (_DWORD **)v3; v5 = v3[2]; v3 = (_DWORD *)*v3; if ( v5 && !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 4))(v5, LODWORD(a2)) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 8))(v5, 1); if ( v4 != (_DWORD **)*v7 ) { *v4[1] = *v4; (*v4)[1] = v4[1]; operator delete(v4); --v7[1]; } } } } //----- (006D1260) -------------------------------------------------------- char __thiscall sub_6D1260(int this, int a2) { sub_4A5800(*(_DWORD **)(this + 12), *(_WORD *)(this + 8), *(_BYTE *)(this + 6), 1); return 1; } //----- (006D1280) -------------------------------------------------------- int __thiscall sub_6D1280(int this, int a2, __int16 a3, __int16 a4, float a5) { int v5; // esi int result; // eax float v7; // [esp+38h] [ebp+14h] v5 = this; *(_DWORD *)(this + 12) = a2; *(_WORD *)(this + 4) = a3; *(_WORD *)(this + 8) = a4; *(_BYTE *)(this + 6) = LOBYTE(a5); *(_DWORD *)this = &Scenario_15::`vftable'; sub_8D06C0((float *)(this + 16)); *(float *)(v5 + 28) = 10.0; sub_8D06E0((float *)(v5 + 16), flt_ACCFCC, 1); flt_B7D1AC = flt_B7D1A4; flt_B7D1B0 = flt_B7D1A8; flt_B7D1B4 = flt_AB52A0; v7 = sub_6A17B0((int)&byte_B68508, flt_ACCFCC); result = v5; flt_AB52A0 = 1.0; flt_B7D1A4 = v7; flt_B7D1A8 = flt_ACCFCC; return result; } // 9F8F94: using guessed type void *Scenario_15::`vftable'; // AB52A0: using guessed type float flt_AB52A0; // ACCFCC: using guessed type float flt_ACCFCC; // B68508: using guessed type char byte_B68508; // B7D1A4: using guessed type float flt_B7D1A4; // B7D1A8: using guessed type float flt_B7D1A8; // B7D1AC: using guessed type float flt_B7D1AC; // B7D1B0: using guessed type float flt_B7D1B0; // B7D1B4: using guessed type float flt_B7D1B4; //----- (006D1370) -------------------------------------------------------- _DWORD *__thiscall sub_6D1370(void *this, int a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &Scenario_15::`vftable'; nullsub_6((char *)this + 16); *v2 = &Scenario::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8F84: using guessed type void *Scenario::`vftable'; // 9F8F94: using guessed type void *Scenario_15::`vftable'; //----- (006D13E0) -------------------------------------------------------- char __thiscall sub_6D13E0(void (__thiscall ***this)(_DWORD, _DWORD), float a2) { void (__thiscall ***v2)(_DWORD, _DWORD); // esi int v3; // eax char result; // al v2 = this; sub_8D0730((int)(this + 4), flt_ACCFCC); if ( v3 != 1 ) return 1; (**v2)(v2, LODWORD(a2)); flt_B7D1A4 = flt_B7D1AC; result = 0; flt_B7D1A8 = flt_B7D1B0; flt_AB52A0 = flt_B7D1B4; return result; } // AB52A0: using guessed type float flt_AB52A0; // ACCFCC: using guessed type float flt_ACCFCC; // B7D1A4: using guessed type float flt_B7D1A4; // B7D1A8: using guessed type float flt_B7D1A8; // B7D1AC: using guessed type float flt_B7D1AC; // B7D1B0: using guessed type float flt_B7D1B0; // B7D1B4: using guessed type float flt_B7D1B4; //----- (006D1440) -------------------------------------------------------- _DWORD *__thiscall sub_6D1440(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+8h] [ebp-20h] _DWORD *v5; // [esp+14h] [ebp-14h] char *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v1 = this; v5 = this; this[2] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[1] = v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)(v1[1] + 8) = v1[1]; *(_BYTE *)(v1[1] + 20) = 1; *(_BYTE *)(v1[1] + 21) = 1; v7 = 0; sub_668390(v1); return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006D14F0) -------------------------------------------------------- _DWORD *sub_6D14F0() { _DWORD *result; // eax _DWORD *v1; // eax result = dword_B9E154; if ( !dword_B9E154 ) { v1 = operator new(0x10u); if ( v1 ) { result = sub_6D1440(v1); dword_B9E154 = result; } else { result = 0; dword_B9E154 = 0; } } return result; } //----- (006D1570) -------------------------------------------------------- void sub_6D1570() { _DWORD *v0; // esi _DWORD *v1; // ST08_4 _DWORD *v2; // ST04_4 char v3; // [esp+8h] [ebp-14h] void *v4; // [esp+Ch] [ebp-10h] int v5; // [esp+18h] [ebp-4h] if ( dword_B9E154 ) { v0 = dword_B9E154; v4 = dword_B9E154; v5 = 0; sub_668390(dword_B9E154); v1 = (_DWORD *)v0[1]; v2 = *(_DWORD **)v0[1]; v5 = 1; sub_6CDE90(v0, (int *)&v3, v2, v1); operator delete((void *)v0[1]); operator delete(v0); dword_B9E154 = 0; } } //----- (006D1600) -------------------------------------------------------- int __thiscall sub_6D1600(char *this) { char *v1; // esi volatile LONG *v2; // eax int v3; // edx int v4; // eax v1 = this; v2 = sub_526B60(0); dword_B9E158 = (int)v2; if ( v1 ) v3 = (int)(v1 + 8); else v3 = 0; (**((void (__stdcall ***)(int))v2 + 58))(v3); if ( v1 ) v4 = (int)(v1 + 8); else v4 = 0; return (**(int (__thiscall ***)(int, int))(dword_B9E158 + 232))(dword_B9E158 + 232, v4); } // B9E158: using guessed type int dword_B9E158; //----- (006D1650) -------------------------------------------------------- char sub_6D1650() { return sub_6F36A0(&off_AB7F2C, 29, 3, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D1680) -------------------------------------------------------- char __thiscall sub_6D1680(_DWORD *this, int a2, int a3, int a4, int a5) { if ( a2 != 29 || a3 != 4 ) return 0; (*(void (__thiscall **)(_DWORD *, int))(this[16] + 4))(this + 16, a5); return 1; } //----- (006D16B0) -------------------------------------------------------- signed int __stdcall sub_6D16B0(int a1) { signed int v1; // edi int v2; // ebx if ( *(_WORD *)a1 == 3137 ) { if ( *(_BYTE *)(a1 + 2) & 1 ) sub_526C90((_DWORD *)dword_B9E158); v1 = 0; if ( *(_WORD *)(a1 + 5) > 0u ) { v2 = a1 + 7; do { sub_526D30((void *)dword_B9E158, v2, *(unsigned __int16 *)(a1 + 3)); ++v1; v2 += 46; } while ( v1 < *(unsigned __int16 *)(a1 + 5) ); } if ( *(_BYTE *)(a1 + 2) & 2 ) { sub_526660((_DWORD *)dword_B9E158, 0); return 1; } } else if ( *(_WORD *)a1 == 7216 ) { sub_527090(dword_B9E158); } return 1; } // B9E158: using guessed type int dword_B9E158; //----- (006D1740) -------------------------------------------------------- char sub_6D1740() { char result; // al result = (*(int (**)(void))(*(_DWORD *)dword_B9E158 + 260))(); if ( !result ) { sub_6F36A0(&off_AB7F2C, 29, 3, 0, 0); result = sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_B9E158); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // B9E158: using guessed type int dword_B9E158; //----- (006D1780) -------------------------------------------------------- int sub_6D1780() { return dword_B9E158; } // B9E158: using guessed type int dword_B9E158; //----- (006D1790) -------------------------------------------------------- void sub_6D1790() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E15C; if ( dword_B9E15C ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E15C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E15C = 0; } } // B9E15C: using guessed type int dword_B9E15C; //----- (006D18B0) -------------------------------------------------------- int __cdecl sub_6D18B0(int a1) { int v1; // eax void ***v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_B9E15C; if ( !dword_B9E15C ) { v2 = (void ***)operator new(0x4Cu); v3 = (int)v2; if ( v2 ) { sub_6C2E00(v2, 0); sub_754900((_DWORD *)(v3 + 64)); *(_DWORD *)(v3 + 64) = &CClientGuildList::`vftable'; *(_DWORD *)v3 = &GuildListTask::`vftable'; *(_DWORD *)(v3 + 8) = &GuildListTask::`vftable'; *(_DWORD *)(v3 + 64) = &GuildListTask::`vftable'; } else { v3 = 0; } v1 = dword_B9E15C; if ( dword_B9E15C != v3 ) { if ( dword_B9E15C ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E15C; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E15C + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = v3; dword_B9E15C = v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); v1 = dword_B9E15C; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // 9F8FA4: using guessed type void *CClientGuildList::`vftable'; // 9F8FB0: using guessed type void *GuildListTask::`vftable'; // 9F8FBC: using guessed type void *GuildListTask::`vftable'; // 9F8FD8: using guessed type void *GuildListTask::`vftable'; // B9E15C: using guessed type int dword_B9E15C; //----- (006D19A0) -------------------------------------------------------- _DWORD *__thiscall sub_6D19A0(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ST0C_4 _DWORD *v4; // ecx v2 = this; v3 = this; v4 = (char *)this + 64; *v3 = &GuildListTask::`vftable'; v2[2] = &GuildListTask::`vftable'; *v4 = &GuildListTask::`vftable'; sub_7549A0(v4); sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F8FB0: using guessed type void *GuildListTask::`vftable'; // 9F8FBC: using guessed type void *GuildListTask::`vftable'; // 9F8FD8: using guessed type void *GuildListTask::`vftable'; //----- (006D1A30) -------------------------------------------------------- int __thiscall sub_6D1A30(unsigned __int16 *this) { int v1; // edx int result; // eax _BYTE *v3; // ecx v1 = this[2]; result = 0; if ( this[2] ) { v3 = (char *)this + 97; do { if ( *v3 & 1 ) ++result; v3 += 110; --v1; } while ( v1 ); } return result; } //----- (006D1A50) -------------------------------------------------------- int __thiscall sub_6D1A50(unsigned __int16 *this) { int v1; // esi int v2; // eax _BYTE *v3; // edx v1 = this[2]; v2 = 0; if ( v1 <= 0 ) return 0; v3 = this + 13; while ( *v3 ) { ++v2; v3 += 110; if ( v2 >= v1 ) return 0; } return (int)&this[55 * v2 + 3]; } //----- (006D1A90) -------------------------------------------------------- int sub_6D1A90() { int result; // eax if ( dword_B9E160 ) result = dword_B9E160 + 64; else result = 0; return result; } // B9E160: using guessed type int dword_B9E160; //----- (006D1AA0) -------------------------------------------------------- BOOL __thiscall sub_6D1AA0(unsigned __int16 *this, _DWORD *a2) { return sub_751290(this, a2) != 0; } //----- (006D1AD0) -------------------------------------------------------- char *__thiscall sub_6D1AD0(unsigned __int16 *this, int *a2) { char *result; // eax int v3; // ST00_4 int v4; // ST04_4 int v5; // ST08_4 int v6; // ST0C_4 int v7; // ST10_4 _DWORD *v8; // eax int v9; // eax result = (char *)sub_7506B0(this + 32, a2); if ( result ) { v3 = *a2; v4 = a2[1]; v5 = a2[2]; v6 = a2[3]; v7 = a2[4]; v8 = (_DWORD *)sub_715490(); result = (char *)sub_715390(v8, v3, v4, v5, v6, v7); if ( (_BYTE)result ) { v9 = sub_715490() + 1152; *(_DWORD *)(v9 + 16) = 0; *(_DWORD *)(v9 + 12) = 0; *(_DWORD *)(v9 + 8) = 0; *(_DWORD *)(v9 + 4) = 0; *(_DWORD *)v9 = 0; result = strncpy((char *)v9, off_9F8FED, 0x14u); } } return result; } //----- (006D1B50) -------------------------------------------------------- char __thiscall sub_6D1B50(_DWORD **this, _DWORD *a2) { _DWORD **v2; // edi _DWORD *v3; // eax int v4; // ecx int v5; // eax int v6; // eax _DWORD *v7; // eax int v8; // eax v2 = this; v3 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v3) || (!dword_B9E160 ? (v4 = 0) : (v4 = dword_B9E160 + 64), (v5 = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v4 + 80))(a2)) != 0) ) { v6 = sub_713B50(); v5 = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)v6 + 44))(v6, a2); if ( v5 ) { v7 = (_DWORD *)sub_680810(byte_AD9238); if ( *v7 == a2[5] && v7[1] == a2[6] && v7[2] == a2[7] && v7[3] == a2[8] && v7[4] == a2[9] ) *(_DWORD *)(sub_715490() + 1948) = 0; if ( v2[3] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v2[3] + 4))(71, 0, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v2[3] + 20))(71, 0, v2 + 2); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))v2[2][5])(v2 + 2, 71, 0, v2 + 2); v8 = sub_714D70(); LOBYTE(v5) = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 260))(v8); if ( (_BYTE)v5 ) LOBYTE(v5) = sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); } } return v5; } // AB7F2C: using guessed type void **off_AB7F2C; // B9E160: using guessed type int dword_B9E160; //----- (006D1C50) -------------------------------------------------------- void sub_6D1C50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E160; if ( dword_B9E160 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E160 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E160 = 0; } } // B9E160: using guessed type int dword_B9E160; //----- (006D1C90) -------------------------------------------------------- void __thiscall sub_6D1C90(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // eax int v11; // ecx int v12; // edx int v13; // eax int v14; // eax int v15; // edx int v16; // eax int v17; // ecx int v18; // edx int v19; // eax int v20; // ecx int v21; // edx int v22; // eax int v23; // eax int v24; // ecx int v25; // edx int v26; // eax int v27; // ecx int v28; // edx int v29; // eax int v30; // ecx int v31; // [esp+4h] [ebp-40h] int v32; // [esp+8h] [ebp-3Ch] int v33; // [esp+Ch] [ebp-38h] int v34; // [esp+10h] [ebp-34h] int v35; // [esp+14h] [ebp-30h] int v36; // [esp+18h] [ebp-2Ch] int v37; // [esp+1Ch] [ebp-28h] int v38; // [esp+20h] [ebp-24h] int v39; // [esp+24h] [ebp-20h] char v40; // [esp+28h] [ebp-1Ch] int v41; // [esp+2Ch] [ebp-18h] int v42; // [esp+30h] [ebp-14h] int v43; // [esp+34h] [ebp-10h] int v44; // [esp+38h] [ebp-Ch] char v45; // [esp+3Ch] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[11017]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { if ( *a3 == 1 ) { v10 = this[11025]; v11 = this[11026]; v41 = v4[11024]; v12 = v4[11027]; v42 = v10; v43 = v11; v44 = v12; v45 = 0; sub_6F36A0(&off_AB7F2C, 29, 12, &v41, 0x11u); } } else { v7 = this[11025]; v8 = v4[11026]; v41 = v4[11024]; v9 = v4[11027]; v42 = v7; v43 = v8; v44 = v9; v45 = 1; sub_6F36A0(&off_AB7F2C, 29, 12, &v41, 0x11u); } v4[11017] = 0; } v13 = v4[11018]; if ( v13 ) v14 = v13 + 232; else v14 = 0; if ( a4 == v14 ) { if ( *a3 ) { if ( *a3 == 1 ) { v23 = v4[11025]; v24 = v4[11026]; v31 = v4[11024]; v25 = v4[11027]; v32 = v23; v26 = v4[11019]; v33 = v24; v27 = v4[11020]; v34 = v25; v28 = v4[11021]; v35 = v26; v29 = v4[11022]; v36 = v27; v30 = v4[11023]; v37 = v28; v38 = v29; v39 = v30; v40 = 0; sub_6F36A0(&off_AB7F2C, 38, 44, &v31, 0x25u); } } else { v15 = v4[11025]; v16 = v4[11026]; v31 = v4[11024]; v17 = v4[11027]; v32 = v15; v18 = v4[11019]; v33 = v16; v19 = v4[11020]; v34 = v17; v20 = v4[11021]; v35 = v18; v21 = v4[11022]; v36 = v19; v22 = v4[11023]; v37 = v20; v38 = v21; v39 = v22; v40 = 1; sub_6F36A0(&off_AB7F2C, 38, 44, &v31, 0x25u); } v4[11018] = 0; } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D1E60) -------------------------------------------------------- char __thiscall sub_6D1E60(_DWORD *this, int *a2) { int v2; // ebx _DWORD *v3; // edi _BYTE *v4; // ecx int v5; // eax int v6; // edx int v7; // eax char result; // al int v9; // eax int v10; // ecx int v11; // edx int v12; // eax int v13; // ecx int v14; // edx int v15; // eax int v16; // ecx int v17; // ecx char *v18; // eax char *v19; // eax volatile LONG *v20; // eax void (__stdcall ***v21)(_DWORD); // [esp+10h] [ebp-5Ch] void (__stdcall ***v22)(signed int); // [esp+14h] [ebp-58h] char v23; // [esp+1Bh] [ebp-51h] int v24; // [esp+1Ch] [ebp-50h] int v25; // [esp+20h] [ebp-4Ch] int v26; // [esp+24h] [ebp-48h] int v27; // [esp+28h] [ebp-44h] char v28; // [esp+2Ch] [ebp-40h] char v29[4]; // [esp+30h] [ebp-3Ch] int v30; // [esp+34h] [ebp-38h] int v31; // [esp+38h] [ebp-34h] int v32; // [esp+3Ch] [ebp-30h] int v33; // [esp+40h] [ebp-2Ch] char v34; // [esp+44h] [ebp-28h] int v35; // [esp+48h] [ebp-24h] int v36; // [esp+4Ch] [ebp-20h] int v37; // [esp+50h] [ebp-1Ch] int v38; // [esp+54h] [ebp-18h] char v39; // [esp+58h] [ebp-14h] int v40; // [esp+68h] [ebp-4h] v2 = 0; v3 = this; if ( byte_B9200B ) goto LABEL_13; v4 = (_BYTE *)*sub_4A3B80(&v21); v40 = 0; v23 = sub_6C4EE0(v4); v40 = -1; if ( v21 ) { v22 = v21; if ( !InterlockedDecrement((volatile LONG *)v21 + 1) ) { if ( v22 ) (**v22)(1); } } if ( v23 ) { LABEL_13: v5 = *a2; v6 = a2[2]; v25 = a2[1]; v24 = v5; v7 = a2[3]; v26 = v6; v27 = v7; v28 = 0; result = sub_6F36A0(&off_AB7F2C, 29, 12, &v24, 0x11u); } else { v9 = a2[5]; v10 = a2[6]; *(_DWORD *)v29 = a2[4]; v11 = a2[7]; v30 = v9; v12 = a2[8]; v31 = v10; v13 = a2[1]; v32 = v11; v14 = a2[2]; v33 = v12; v15 = *a2; v36 = v13; v16 = a2[3]; v3[11010] = v15; v37 = v14; v3[11011] = a2[1]; v35 = v15; v3[11012] = a2[2]; v38 = v16; v17 = a2[3]; v34 = 0; v39 = 0; v3[11013] = v17; v18 = (char *)sub_40C190(554434356); v19 = sub_7549E0(v18, v29, &v35); v20 = sub_462CA0(2, v19); v3[11003] = v20; if ( v3 != (_DWORD *)64 ) v2 = (int)(v3 - 14); result = (**((int (__thiscall ***)(int, int))v20 + 58))((int)(v20 + 58), v2); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // B9200B: using guessed type char byte_B9200B; //----- (006D1FE0) -------------------------------------------------------- void __stdcall sub_6D1FE0(int *a1) { signed int v1; // eax char *v2; // eax int v3; // eax int v4; // ecx char *v5; // eax char *v6; // eax int v7; // eax _DWORD *v8; // esi const CHAR *v9; // eax int v10; // eax int v11; // [esp-4h] [ebp-20h] char v12[4]; // [esp+4h] [ebp-18h] int v13; // [esp+8h] [ebp-14h] int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] char v16; // [esp+14h] [ebp-8h] v1 = *((unsigned __int16 *)a1 + 8); if ( v1 <= 3294 ) { if ( v1 != 3294 ) { if ( v1 < 3288 ) return; if ( v1 <= 3292 ) { v3 = *a1; v13 = a1[1]; *(_DWORD *)v12 = v3; v4 = a1[3]; v14 = a1[2]; v15 = v4; v16 = 0; v5 = (char *)sub_40C190(830623118); v6 = sub_7549E0(v5, v12); sub_462CA0(1, v6); return; } if ( v1 != 3293 ) return; v2 = (char *)sub_40A910(136443514); goto LABEL_14; } v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v11 = -1227573459; LABEL_9: v8 = (_DWORD *)v7; v9 = sub_40A910(v11); sub_492060(v8, (int)v9); return; } v10 = v1 - 7121; if ( v10 ) { if ( v10 != 2 ) return; v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v11 = 140082800; goto LABEL_9; } v2 = (char *)sub_40A910(1904563679); LABEL_14: sub_462CA0(1, v2); } //----- (006D2100) -------------------------------------------------------- signed int __thiscall sub_6D2100(unsigned __int16 *this, int *a2) { unsigned __int16 *v2; // ebx signed int result; // eax int v4; // ST00_4 int v5; // ST04_4 int v6; // ST08_4 int v7; // ST0C_4 int v8; // ST10_4 _DWORD *v9; // eax int v10; // ST08_4 _DWORD *v11; // eax _DWORD *v12; // eax char *v13; // eax unsigned __int16 *v14; // esi char *v15; // edi unsigned __int16 *v16; // esi char v17[4]; // [esp+Ch] [ebp-18h] int v18; // [esp+10h] [ebp-14h] int v19; // [esp+14h] [ebp-10h] int v20; // [esp+18h] [ebp-Ch] char v21; // [esp+1Ch] [ebp-8h] v2 = this; result = sub_7506B0(this, a2); if ( result ) { v4 = *a2; v5 = a2[1]; v6 = a2[2]; v7 = a2[3]; v8 = a2[4]; v9 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715390(v9, v4, v5, v6, v7, v8) ) { v10 = sub_715490() + 1152; *(_DWORD *)(v10 + 16) = 0; *(_DWORD *)(v10 + 12) = 0; *(_DWORD *)(v10 + 8) = 0; *(_DWORD *)(v10 + 4) = 0; *(_DWORD *)v10 = 0; strncpy((char *)v10, &byte_9F8FEC, 0x14u); } v11 = (_DWORD *)sub_680810(byte_AD9238); if ( *a2 == *v11 && a2[1] == v11[1] && a2[2] == v11[2] && a2[3] == v11[3] && a2[4] == v11[4] ) { *(_DWORD *)(sub_6D3800() + 8) = 0; v12 = (_DWORD *)sub_6D3800(); *(_DWORD *)v17 = v12[4]; v18 = v12[5]; v19 = v12[6]; v20 = v12[7]; v21 = 0; v13 = (char *)sub_40C190(-1981365277); v14 = v2 - 28; v15 = sub_7549E0(v13, v17); if ( *((_DWORD *)v2 - 13) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v14 + 1) + 4))(25, v15, v2 - 28); if ( *((_DWORD *)v14 + 1) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v14 + 1) + 20))( 25, v15, v2 - 28); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*(_DWORD *)v14 + 20))( v2 - 28, 25, v15, v2 - 28); v2[2] = 0; } v16 = v2 - 28; if ( *((_DWORD *)v2 - 13) ) { (*(void (__stdcall **)(signed int, _DWORD, unsigned __int16 *))(**((_DWORD **)v16 + 1) + 4))(41, 0, v2 - 28); if ( *((_DWORD *)v16 + 1) ) (*(void (__stdcall **)(signed int, _DWORD, unsigned __int16 *))(**((_DWORD **)v16 + 1) + 20))(41, 0, v2 - 28); } (*(void (__thiscall **)(unsigned __int16 *, signed int, _DWORD, unsigned __int16 *))(*(_DWORD *)v16 + 20))( v2 - 28, 41, 0, v2 - 28); if ( *((_DWORD *)v16 + 1) ) { (*(void (__stdcall **)(signed int, _DWORD, unsigned __int16 *))(**((_DWORD **)v16 + 1) + 4))(71, 0, v2 - 28); if ( *((_DWORD *)v16 + 1) ) (*(void (__stdcall **)(signed int, _DWORD, unsigned __int16 *))(**((_DWORD **)v16 + 1) + 20))(71, 0, v2 - 28); } (*(void (__thiscall **)(unsigned __int16 *, signed int, _DWORD, unsigned __int16 *))(*(_DWORD *)v16 + 20))( v2 - 28, 71, 0, v2 - 28); result = 1; } return result; } //----- (006D22E0) -------------------------------------------------------- int __thiscall sub_6D22E0(char *this, int a2) { int result; // eax char *v3; // esi const CHAR *v4; // edi result = 3287; if ( *(_WORD *)(a2 + 20) == 3287 ) { v3 = this - 56; v4 = sub_40C190(-1146111003); if ( *((_DWORD *)v3 + 1) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v3 + 1) + 4))(25, v4, v3); if ( *((_DWORD *)v3 + 1) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v3 + 1) + 20))(25, v4, v3); } result = (*(int (__thiscall **)(char *, signed int, const CHAR *, char *))(*(_DWORD *)v3 + 20))(v3, 25, v4, v3); } return result; } //----- (006D2350) -------------------------------------------------------- signed int __thiscall sub_6D2350(unsigned __int16 *this, _DWORD *a2) { signed int result; // eax const char *v3; // eax int v4; // ecx int v5; // edx int v6; // eax int v7; // eax char *v8; // eax unsigned __int16 *v9; // esi char *v10; // edi unsigned __int16 *v11; // [esp+4h] [ebp-20h] char v12[4]; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] char v17; // [esp+1Ch] [ebp-8h] v11 = this; result = sub_751250(this, a2); if ( result ) { if ( byte_B92027 ) { v3 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v16 = 0; v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; strncpy(v12, v3, 0x14u); if ( *a2 != *(_DWORD *)v12 || a2[1] != v13 || a2[2] != v14 || a2[3] != v15 || a2[4] != v16 ) { v4 = a2[2]; v5 = a2[3]; *(_DWORD *)v12 = *a2; v6 = a2[1]; v14 = v4; v13 = v6; v7 = a2[4]; v15 = v5; v16 = v7; v17 = 0; v8 = (char *)sub_40C190(-2037812252); v9 = v11 - 28; v10 = sub_7549E0(v8, v12); if ( *((_DWORD *)v11 - 13) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v9 + 1) + 4))(25, v10, v11 - 28); if ( *((_DWORD *)v9 + 1) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v9 + 1) + 20))(25, v10, v9); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*(_DWORD *)v9 + 20))( v9, 25, v10, v9); } } result = 1; } return result; } // B92027: using guessed type char byte_B92027; //----- (006D2470) -------------------------------------------------------- int __thiscall sub_6D2470(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi int v4; // ecx int v5; // edx const CHAR *v6; // eax char *v7; // eax char *v8; // ebx _DWORD **v9; // esi const CHAR *v10; // edi char v11[4]; // [esp+4h] [ebp-1Ch] int v12; // [esp+8h] [ebp-18h] int v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] char v16; // [esp+18h] [ebp-8h] result = a2; v3 = this; v4 = *(unsigned __int16 *)(a2 + 20); if ( (_WORD)v4 != 6016 ) { *(_DWORD *)v11 = *(_DWORD *)a2; v12 = *(_DWORD *)(a2 + 4); v13 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)(a2 + 12); v15 = *(_DWORD *)(a2 + 16); result = v4 - 6080; v14 = v5; v16 = 0; switch ( v4 ) { case 6080: v6 = sub_40C190(-1310998958); goto LABEL_17; case 6081: case 6082: case 6087: v6 = sub_40C190(2111682039); goto LABEL_17; case 6083: v6 = sub_40C190(-1146111003); goto LABEL_17; case 6084: v6 = sub_40C190(-2133472293); goto LABEL_17; case 6085: v6 = sub_40C190(-993400289); goto LABEL_17; case 6086: v6 = sub_40C190(592716873); goto LABEL_17; case 6088: v6 = sub_40C190(-1763514403); goto LABEL_17; case 6089: v7 = (char *)sub_40C190(-1111769578); v8 = sub_7549E0(v7, v11); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(25, v8, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(25, v8, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 25, v8, v3 + 2); goto LABEL_14; case 6090: LABEL_14: v6 = sub_40A910(1441837268); goto LABEL_17; case 6091: v6 = sub_40A910(1286371709); goto LABEL_17; case 6092: v6 = sub_40A910(-158644368); LABEL_17: v9 = v3 + 2; v10 = v6; if ( v9[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 4))(25, v6, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); break; default: return result; } } return result; } //----- (006D2630) -------------------------------------------------------- char __thiscall sub_6D2630(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // eax int v4; // edx int v5; // eax char result; // al _BYTE *v7; // ecx int v8; // eax int v9; // edx int v10; // eax int v11; // eax int v12; // ecx int v13; // edx int v14; // eax int v15; // ecx int v16; // edx int v17; // eax int v18; // ecx int v19; // eax char *v20; // eax char *v21; // eax volatile LONG *v22; // eax void (__stdcall ***v23)(signed int); // [esp+10h] [ebp-84h] int v24; // [esp+14h] [ebp-80h] char v25; // [esp+1Bh] [ebp-79h] int v26; // [esp+1Ch] [ebp-78h] int v27; // [esp+20h] [ebp-74h] int v28; // [esp+24h] [ebp-70h] int v29; // [esp+28h] [ebp-6Ch] int v30; // [esp+2Ch] [ebp-68h] int v31; // [esp+30h] [ebp-64h] int v32; // [esp+34h] [ebp-60h] int v33; // [esp+38h] [ebp-5Ch] int v34; // [esp+3Ch] [ebp-58h] char v35; // [esp+40h] [ebp-54h] int v36; // [esp+44h] [ebp-50h] int v37; // [esp+48h] [ebp-4Ch] int v38; // [esp+4Ch] [ebp-48h] int v39; // [esp+50h] [ebp-44h] char v40; // [esp+54h] [ebp-40h] char v41[4]; // [esp+58h] [ebp-3Ch] int v42; // [esp+5Ch] [ebp-38h] int v43; // [esp+60h] [ebp-34h] int v44; // [esp+64h] [ebp-30h] int v45; // [esp+68h] [ebp-2Ch] char v46; // [esp+6Ch] [ebp-28h] int v47; // [esp+70h] [ebp-24h] int v48; // [esp+74h] [ebp-20h] int v49; // [esp+78h] [ebp-1Ch] int v50; // [esp+7Ch] [ebp-18h] char v51; // [esp+80h] [ebp-14h] int v52; // [esp+90h] [ebp-4h] v2 = this; if ( byte_B9200B ) { v3 = *a2; v4 = a2[2]; v27 = a2[1]; v26 = v3; v5 = a2[3]; v34 = 0; v33 = 0; v32 = 0; v31 = 0; v30 = 0; v28 = v4; v29 = v5; v35 = 0; result = sub_6F36A0(&off_AB7F2C, 29, 12, &v26, 0x25u); } else { v7 = (_BYTE *)*sub_4A3B80(&v24); v52 = 0; v25 = sub_6C4EE0(v7); v52 = -1; if ( v24 ) { v23 = (void (__stdcall ***)(signed int))v24; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) { if ( v23 ) (**v23)(1); } } if ( v25 ) { v8 = *a2; v9 = a2[2]; v37 = a2[1]; v36 = v8; v10 = a2[3]; v38 = v9; v39 = v10; v40 = 0; result = sub_6F36A0(&off_AB7F2C, 29, 12, &v36, 0x11u); } else { v11 = a2[5]; v12 = a2[6]; *(_DWORD *)v41 = a2[4]; v13 = a2[7]; v42 = v11; v14 = a2[8]; v43 = v12; v15 = a2[1]; v44 = v13; v16 = a2[2]; v45 = v14; v17 = *a2; v48 = v15; v18 = a2[3]; v2[11026] = v17; v49 = v16; v2[11027] = a2[1]; v47 = v17; v2[11028] = a2[2]; v50 = v18; v2[11029] = a2[3]; v2[11021] = a2[4]; v2[11022] = a2[5]; v2[11023] = a2[6]; v2[11024] = a2[7]; v19 = a2[8]; v46 = 0; v51 = 0; v2[11025] = v19; v20 = (char *)sub_40C190(554434356); v21 = sub_7549E0(v20, v41, &v47); v22 = sub_462CA0(2, v21); v2[11020] = v22; result = (**((int (__stdcall ***)(int))v22 + 58))((int)(v2 + 2)); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // B9200B: using guessed type char byte_B9200B; //----- (006D2820) -------------------------------------------------------- int __thiscall sub_6D2820(char *this, int a2) { int v2; // edx char *v3; // esi int v4; // ecx int v5; // edx int result; // eax char *v7; // eax void *v8; // eax _DWORD **v9; // esi void *v10; // edi char v11[4]; // [esp+4h] [ebp-18h] int v12; // [esp+8h] [ebp-14h] int v13; // [esp+Ch] [ebp-10h] int v14; // [esp+10h] [ebp-Ch] char v15; // [esp+14h] [ebp-8h] v2 = *(_DWORD *)(a2 + 4); v3 = this; *(_DWORD *)v11 = *(_DWORD *)a2; v4 = *(_DWORD *)(a2 + 8); v12 = v2; v5 = *(_DWORD *)(a2 + 12); result = *(unsigned __int16 *)(a2 + 16) - 6096; v13 = v4; v14 = v5; v15 = 0; switch ( result ) { case 0: v7 = (char *)sub_40C190(-1111769578); goto LABEL_3; case 1: v7 = (char *)sub_40C190(1723912175); LABEL_3: v8 = sub_7549E0(v7, v11); goto LABEL_10; case 2: case 4: v8 = (void *)sub_40C190(-993400289); goto LABEL_10; case 3: v8 = (void *)sub_40C190(1723912175); goto LABEL_10; case 5: v8 = (void *)sub_40A910(1904563679); goto LABEL_10; case 6: v8 = (void *)sub_40A910(140082800); goto LABEL_10; case 7: v8 = (void *)sub_40A910(136443514); LABEL_10: v9 = (_DWORD **)(v3 + 8); v10 = v8; if ( v9[1] ) { (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v9[1] + 4))(25, v8, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } result = ((int (__thiscall *)(_DWORD **, signed int, void *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); break; default: return result; } return result; } //----- (006D2940) -------------------------------------------------------- char __thiscall sub_6D2940(int this, int a2, int a3, int a4, int *a5) { int v5; // esi char result; // al _DWORD **v7; // esi _DWORD **v8; // esi _DWORD **v9; // esi _DWORD **v10; // esi _DWORD **v11; // esi _DWORD **v12; // esi _DWORD **v13; // esi _DWORD **v14; // esi _DWORD **v15; // esi v5 = this; if ( a2 == 4 ) return 0; if ( a2 != 29 ) { if ( a2 == 38 ) { switch ( a3 ) { case 42: sub_6D2470((_DWORD **)this, (int)a5); result = 1; break; case 43: sub_6D2630((_DWORD *)this, a5); result = 1; break; case 45: sub_6D2820((char *)this, (int)a5); result = 1; break; case 46: sub_6D1B50((_DWORD **)this, a5); result = 1; break; default: return 0; } return result; } return 0; } switch ( a3 ) { case 10: (**(void (__thiscall ***)(int, int *))(this + 64))(this + 64, a5); result = 1; break; case 11: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 4))(this + 64, a5); result = 1; break; case 13: sub_6D1FE0(a5); result = 1; break; case 15: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 8))(this + 64, a5); result = 1; break; case 23: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 12))(this + 64, a5); result = 1; break; case 27: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 24))(this + 64, a5); v7 = (_DWORD **)(v5 + 8); if ( v7[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v7[1] + 4))(41, 0, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v7[1] + 20))(41, 0, v7); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v7)[5])(v7, 41, 0, v7); result = 1; break; case 29: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 16))(this + 64, a5); result = 1; break; case 33: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 20))(this + 64, a5); result = 1; break; case 54: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 28))(this + 64, a5); v8 = (_DWORD **)(v5 + 8); if ( v8[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 4))(41, 0, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 20))(41, 0, v8); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v8)[5])(v8, 41, 0, v8); result = 1; break; case 55: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 32))(this + 64, a5); result = 1; break; case 56: sub_6D1AD0((unsigned __int16 *)this, a5); v9 = (_DWORD **)(v5 + 8); if ( v9[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v9[1] + 4))(41, 0, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v9[1] + 20))(41, 0, v9); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v9)[5])(v9, 41, 0, v9); result = 1; break; case 57: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 40))(this + 64, a5); v10 = (_DWORD **)(v5 + 8); if ( v10[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v10[1] + 4))(41, 0, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v10[1] + 20))(41, 0, v10); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v10)[5])(v10, 41, 0, v10); result = 1; break; case 58: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 44))(this + 64, a5); result = 1; break; case 59: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 48))(this + 64, a5); v11 = (_DWORD **)(v5 + 8); if ( v11[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v11[1] + 4))(41, 0, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v11[1] + 20))(41, 0, v11); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v11)[5])(v11, 41, 0, v11); result = 1; break; case 60: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 52))(this + 64, a5); result = 1; break; case 61: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 56))(this + 64, a5); v12 = (_DWORD **)(v5 + 8); if ( v12[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 4))(41, 0, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 20))(41, 0, v12); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v12)[5])(v12, 41, 0, v12); result = 1; break; case 62: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 60))(this + 64, a5); v13 = (_DWORD **)(v5 + 8); if ( v13[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v13[1] + 4))(41, 0, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v13[1] + 20))(41, 0, v13); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v13)[5])(v13, 41, 0, v13); result = 1; break; case 63: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 64))(this + 64, a5); result = 1; break; case 64: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 68))(this + 64, a5); v14 = (_DWORD **)(v5 + 8); if ( v14[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v14[1] + 4))(41, 0, v14); if ( v14[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v14[1] + 20))(41, 0, v14); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v14)[5])(v14, 41, 0, v14); result = 1; break; case 65: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 72))(this + 64, a5); result = 1; break; case 66: (*(void (__thiscall **)(int, int *))(*(_DWORD *)(this + 64) + 76))(this + 64, a5); v15 = (_DWORD **)(v5 + 8); if ( v15[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v15[1] + 4))(41, 0, v15); if ( v15[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v15[1] + 20))(41, 0, v15); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v15)[5])(v15, 41, 0, v15); result = 1; break; default: return 0; } return result; } //----- (006D2E60) -------------------------------------------------------- int __thiscall sub_6D2E60(void ***this) { int v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // ebx int result; // eax v1 = (int)this; sub_6C2E00(this, 0); sub_750FA0((_DWORD *)(v1 + 64)); *(_DWORD *)(v1 + 64) = off_9F8FF4; *(_DWORD *)v1 = &GuildMemberTask::`vftable'; *(_DWORD *)(v1 + 8) = &GuildMemberTask::`vftable'; *(_DWORD *)(v1 + 64) = &GuildMemberTask::`vftable'; *(_DWORD *)(v1 + 44100) = 0; *(_DWORD *)(v1 + 44096) = 0; *(_DWORD *)(v1 + 44092) = 0; *(_DWORD *)(v1 + 44088) = 0; *(_DWORD *)(v1 + 44084) = 0; *(_DWORD *)(v1 + 44116) = 0; *(_DWORD *)(v1 + 44112) = 0; *(_DWORD *)(v1 + 44108) = 0; *(_DWORD *)(v1 + 44104) = 0; if ( dword_B9E160 != v1 ) { if ( dword_B9E160 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E160; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E160 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } dword_B9E160 = v1; InterlockedIncrement((volatile LONG *)(v1 + 4)); } result = v1; *(_DWORD *)(v1 + 44076) = 0; return result; } // 9F8FF4: using guessed type int (__stdcall *off_9F8FF4[21])(int); // 9F904C: using guessed type void *GuildMemberTask::`vftable'; // 9F90A4: using guessed type void *GuildMemberTask::`vftable'; // 9F90C0: using guessed type void *GuildMemberTask::`vftable'; // B9E160: using guessed type int dword_B9E160; //----- (006D2F60) -------------------------------------------------------- _DWORD *__thiscall sub_6D2F60(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_750570((_DWORD *)this + 16); sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006D3010) -------------------------------------------------------- BOOL __thiscall sub_6D3010(_DWORD *this) { return this[2] != 0; } //----- (006D3020) -------------------------------------------------------- bool __thiscall sub_6D3020(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax bool result; // al if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { result = *(_BYTE *)(v3 + 20) == 0; } else { result = 0; } return result; } //----- (006D3050) -------------------------------------------------------- bool __thiscall sub_6D3050(_DWORD *this) { _DWORD *v1; // eax int v2; // eax _DWORD *v3; // ST00_4 unsigned __int16 *v4; // eax int v5; // eax if ( !this[2] ) goto LABEL_6; v1 = (_DWORD *)sub_715490(); if ( !(unsigned __int8)sub_715330(v1) ) { v3 = (_DWORD *)sub_680810(byte_AD9238); v4 = (unsigned __int16 *)sub_6D1A90(); v5 = sub_751050(v4, v3); if ( v5 ) return sub_7508D0(v5) == 0; LABEL_6: LOBYTE(v2) = 0; return v2; } LOBYTE(v2) = 1; return v2; } //----- (006D30A0) -------------------------------------------------------- bool __thiscall sub_6D30A0(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax BOOL v4; // eax if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { v4 = sub_750900(v3) == 0; } else { LOBYTE(v4) = 0; } return v4; } //----- (006D30E0) -------------------------------------------------------- bool __thiscall sub_6D30E0(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax BOOL v4; // eax if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { v4 = sub_7508A0(v3) == 0; } else { LOBYTE(v4) = 0; } return v4; } //----- (006D3120) -------------------------------------------------------- bool __thiscall sub_6D3120(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax BOOL v4; // eax if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { v4 = sub_750870(v3) == 0; } else { LOBYTE(v4) = 0; } return v4; } //----- (006D3160) -------------------------------------------------------- bool __thiscall sub_6D3160(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax BOOL v4; // eax if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { v4 = sub_750840(v3) == 0; } else { LOBYTE(v4) = 0; } return v4; } //----- (006D31A0) -------------------------------------------------------- bool __thiscall sub_6D31A0(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax BOOL v4; // eax if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { v4 = sub_750930(v3) == 0; } else { LOBYTE(v4) = 0; } return v4; } //----- (006D31E0) -------------------------------------------------------- bool __thiscall sub_6D31E0(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax bool result; // al if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { result = sub_750960(v3); } else { result = 0; } return result; } //----- (006D3220) -------------------------------------------------------- bool __thiscall sub_6D3220(_DWORD *this) { _DWORD *v1; // ST00_4 unsigned __int16 *v2; // eax int v3; // eax bool result; // al if ( this[2] && (v1 = (_DWORD *)sub_680810(byte_AD9238), v2 = (unsigned __int16 *)sub_6D1A90(), (v3 = sub_751050(v2, v1)) != 0) ) { result = *(_BYTE *)(v3 + 20) < 4u; } else { result = 0; } return result; } //----- (006D3250) -------------------------------------------------------- char __thiscall sub_6D3250(_DWORD *this, int a2) { _DWORD *v2; // eax v2 = (_DWORD *)this[271]; if ( !v2 ) return 0; while ( *v2 != a2 ) { v2 = (_DWORD *)v2[60]; if ( !v2 ) return 0; } return 1; } //----- (006D3280) -------------------------------------------------------- char __thiscall sub_6D3280(_DWORD *this, int a2) { int v2; // eax v2 = this[271]; if ( !v2 ) return 0; while ( *(_DWORD *)v2 != a2 || *(_BYTE *)(v2 + 21) != 2 ) { v2 = *(_DWORD *)(v2 + 240); if ( !v2 ) return 0; } return 1; } //----- (006D32F0) -------------------------------------------------------- char __thiscall sub_6D32F0(_DWORD *this) { int v1; // eax if ( !this[270] ) return 0; v1 = this[271]; if ( !v1 ) return 0; while ( *(_BYTE *)(v1 + 21) != 2 ) { v1 = *(_DWORD *)(v1 + 240); if ( !v1 ) return 0; } return 1; } //----- (006D3340) -------------------------------------------------------- bool __thiscall sub_6D3340(_DWORD *this, int a2) { return this[666] == a2 && this[675] == 2; } //----- (006D3370) -------------------------------------------------------- bool __thiscall sub_6D3370(_DWORD *this) { return this[675] == 2; } //----- (006D3380) -------------------------------------------------------- void __thiscall sub_6D3380(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ST0C_4 unsigned __int16 *v3; // eax int v4; // eax v1 = this; if ( this[2] ) { if ( (v2 = (_DWORD *)sub_680810(byte_AD9238), v3 = (unsigned __int16 *)sub_6D1A90(), (v4 = sub_751050(v3, v2)) != 0) && !*(_BYTE *)(v4 + 20) || v1[2] ) { sub_6F36A0(&off_AB7F2C, 29, 253, 0, 0); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D33D0) -------------------------------------------------------- BOOL __thiscall sub_6D33D0(_DWORD *this, int *a2) { return sub_750C10(this, a2) != 0; } //----- (006D33F0) -------------------------------------------------------- signed int __thiscall sub_6D33F0(_DWORD *this, int a2) { _DWORD *v2; // esi signed int result; // eax v2 = this; result = sub_750C50((int)this, a2); if ( result ) { sub_751960(v2 + 270, v2[3]); result = 1; } return result; } //----- (006D3430) -------------------------------------------------------- int __thiscall sub_6D3430(_DWORD ***this, unsigned __int8 *a2) { unsigned __int8 v2; // al _DWORD ***v3; // esi int v4; // edi v2 = *a2; v3 = this; if ( *a2 != 11 ) { v4 = v2; if ( v2 == 1 ) sub_750D40((int)(this + 501)); sub_5F9390(v3[715], v4); } return 0; } //----- (006D3470) -------------------------------------------------------- signed int __thiscall sub_6D3470(_BYTE *this, _BYTE *a2) { this[41] = *a2; return 1; } //----- (006D3490) -------------------------------------------------------- int __thiscall sub_6D3490(int this, unsigned __int16 *a2) { int v2; // esi v2 = this; if ( a2 ) { if ( *(_DWORD *)(this + 2876) && !(*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 2872) + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 2876)); sub_5F08C0(*(_DWORD **)(v2 + 2872), *a2); sub_5F0A00(*(_DWORD **)(v2 + 2876), *a2); } return 0; } //----- (006D3500) -------------------------------------------------------- int __userpurge sub_6D3500@(int a1@, int a2@, int a3) { int v3; // esi int v4; // edi int v5; // ebx int v7; // eax unsigned int v8; // ebx int *v9; // [esp+10h] [ebp+8h] int *v10; // [esp+10h] [ebp+8h] v3 = a3; v4 = a1; if ( a3 ) { if ( *(_BYTE *)a3 == 1 ) { sub_5E99B0(*(_DWORD ***)(a1 + 2884)); sub_5EB840(*(_DWORD **)(v4 + 2880)); v5 = 0; if ( *(_DWORD *)(a3 + 13) > 0 ) { v9 = (int *)(a3 + 17); do { sub_5E9D80(*(_DWORD ***)(v4 + 2884), v5, v3); sub_5ECDA0(*(_DWORD **)(v4 + 2880), v9, *(_DWORD *)(v3 + 1)); sub_5E9A90(*(_DWORD ***)(v4 + 2880), v5, *(_DWORD *)(v3 + 1), *(_DWORD *)(v3 + 5)); v9 += 11; ++v5; } while ( v5 < *(_DWORD *)(v3 + 13) ); } if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 2880) + 260))() ) { sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 2884)); return 0; } } else if ( !*(_BYTE *)a3 ) { v7 = *(_DWORD *)(a3 + 13); if ( v7 ) { v8 = 0; if ( v7 ) { v10 = (int *)(a3 + 17); do { sub_5E9D80(*(_DWORD ***)(v4 + 2884), v8, v3); sub_5ECDA0(*(_DWORD **)(v4 + 2880), v10, *(_DWORD *)(v3 + 1)); sub_5E9A90(*(_DWORD ***)(v4 + 2880), v8, *(_DWORD *)(v3 + 1), *(_DWORD *)(v3 + 5)); v10 += 11; ++v8; } while ( v8 < *(_DWORD *)(v3 + 13) ); } } else { sub_5E9D80(*(_DWORD ***)(a1 + 2884), a2, a3); sub_5E9A90(*(_DWORD ***)(v4 + 2880), a2, *(_DWORD *)(a3 + 1), *(_DWORD *)(a3 + 5)); } if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v4 + 2880) + 260))() ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v4 + 2884)); } } return 0; } //----- (006D3660) -------------------------------------------------------- int __thiscall sub_6D3660(_BYTE **this, _DWORD *a2) { if ( a2 && *a2 == 5 ) sub_5EFA60(this[717], 1); return 0; } //----- (006D36C0) -------------------------------------------------------- int __thiscall sub_6D36C0(char *this, int a2) { char *v2; // esi unsigned int v3; // ecx int result; // eax _DWORD *v5; // edx int v6; // ecx int v7; // edx char *v8; // ecx int v9; // edx int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v2 = this; v3 = 0; result = (int)(v2 + 2704); *(_DWORD *)result = 0; *(_DWORD *)(result + 4) = 0; *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 12) = 0; *(_DWORD *)(result + 16) = 0; *(_DWORD *)(result + 20) = 0; *(_DWORD *)(result + 24) = 0; *(_DWORD *)(result + 28) = 0; if ( !a2 ) return 0; v5 = v2 + 1987; while ( *v5 != a2 ) { ++v3; v5 = (_DWORD *)((char *)v5 + 21); if ( v3 >= 0x1F ) return 0; } v6 = 21 * v3; v7 = *(_DWORD *)&v2[v6 + 1991]; v8 = &v2[v6 + 1991]; v10 = v7; v11 = *((_DWORD *)v8 + 1); v9 = *((_DWORD *)v8 + 2); v13 = *((_DWORD *)v8 + 3); v12 = v9; v14 = 0; strcpy((char *)result, (const char *)&v10); return result; } //----- (006D3770) -------------------------------------------------------- int __cdecl sub_6D3770(char a1) { int result; // eax result = dword_B9E164; if ( dword_B9E164 ) *(_BYTE *)(dword_B9E164 + 3008) = a1; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3790) -------------------------------------------------------- double sub_6D3790() { if ( !dword_B9E164 ) return 0.0; return (float)(flt_ACCFCC - *(float *)(dword_B9E164 + 3004)); } // ACCFCC: using guessed type float flt_ACCFCC; // B9E164: using guessed type int dword_B9E164; //----- (006D37C0) -------------------------------------------------------- void sub_6D37C0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E164; if ( dword_B9E164 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E164 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E164 = 0; } } // B9E164: using guessed type int dword_B9E164; //----- (006D3800) -------------------------------------------------------- int sub_6D3800() { int result; // eax if ( dword_B9E164 ) result = dword_B9E164 + 64; else result = 0; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3810) -------------------------------------------------------- int sub_6D3810() { int result; // eax result = dword_B9E164; if ( dword_B9E164 ) result = *(_DWORD *)(dword_B9E164 + 2844); return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3830) -------------------------------------------------------- int sub_6D3830() { return *(_DWORD *)(*(_DWORD *)(dword_B9E164 + 2848) + 348); } // B9E164: using guessed type int dword_B9E164; //----- (006D3840) -------------------------------------------------------- int sub_6D3840() { int result; // eax if ( dword_B9E164 ) result = *(_DWORD *)(dword_B9E164 + 2856); else result = 0; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3860) -------------------------------------------------------- int sub_6D3860() { return *(_DWORD *)(dword_B9E164 + 2860); } // B9E164: using guessed type int dword_B9E164; //----- (006D3870) -------------------------------------------------------- int sub_6D3870() { return *(_DWORD *)(dword_B9E164 + 2848); } // B9E164: using guessed type int dword_B9E164; //----- (006D3880) -------------------------------------------------------- int sub_6D3880() { return *(_DWORD *)(dword_B9E164 + 2852); } // B9E164: using guessed type int dword_B9E164; //----- (006D3890) -------------------------------------------------------- int sub_6D3890() { return *(_DWORD *)(dword_B9E164 + 2864); } // B9E164: using guessed type int dword_B9E164; //----- (006D38A0) -------------------------------------------------------- char __cdecl sub_6D38A0(char a1) { char result; // al result = a1; *(_BYTE *)(dword_B9E164 + 3009) = a1; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D38C0) -------------------------------------------------------- int sub_6D38C0() { return *(_DWORD *)(dword_B9E164 + 2868); } // B9E164: using guessed type int dword_B9E164; //----- (006D38D0) -------------------------------------------------------- int sub_6D38D0() { return *(_DWORD *)(dword_B9E164 + 2872); } // B9E164: using guessed type int dword_B9E164; //----- (006D38E0) -------------------------------------------------------- int sub_6D38E0() { return *(_DWORD *)(dword_B9E164 + 2876); } // B9E164: using guessed type int dword_B9E164; //----- (006D38F0) -------------------------------------------------------- int sub_6D38F0() { return dword_B9E164 + 2888; } // B9E164: using guessed type int dword_B9E164; //----- (006D3900) -------------------------------------------------------- int sub_6D3900() { int result; // eax if ( !dword_B9E164 || (result = *(_DWORD *)(dword_B9E164 + 2988)) == 0 ) result = 0; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3920) -------------------------------------------------------- int sub_6D3920() { int result; // eax if ( !dword_B9E164 || (result = *(_DWORD *)(dword_B9E164 + 2992)) == 0 ) result = 0; return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D3940) -------------------------------------------------------- LONG __thiscall sub_6D3940(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax volatile LONG *v3; // eax void (__stdcall ***v4)(int); // ecx _DWORD *v5; // eax _DWORD *v6; // ebx char *v7; // eax void **v8; // eax int v9; // ebx char *v10; // eax void **v11; // eax int v12; // ebx char *v13; // eax void **v14; // eax int v15; // ebx volatile LONG *v16; // eax int v17; // eax void ***v18; // eax _DWORD *v19; // eax void **v21; // [esp+10h] [ebp-10h] void **v22; // [esp+10h] [ebp-10h] void **v23; // [esp+10h] [ebp-10h] v1 = this; v2 = sub_5DE080(0); v1[711] = v2; (**((void (__stdcall ***)(int))v2 + 58))((int)(v1 + 2)); v1[714] = sub_5F2720(0); v1[715] = sub_5F96A0(0); v3 = sub_5FA590(0); v4 = (void (__stdcall ***)(int))(v1[714] + 232); v1[716] = v3; (**v4)((int)(v1 + 2)); (**(void (__thiscall ***)(int, int))(v1[715] + 232))(v1[715] + 232, (int)(v1 + 2)); (**(void (__thiscall ***)(int, int))(v1[716] + 232))(v1[716] + 232, (int)(v1 + 2)); v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = v5; if ( v5 ) { sub_4E36C0(v5, v1[714]); sub_4E36C0(v6, v1[715]); sub_4E36C0(v6, v1[716]); sub_4E36C0(v6, v1[711]); } v1[717] = sub_5F06D0(0); v1[718] = sub_5F1B00(0); v1[719] = sub_5F1C70(0); v1[720] = sub_5EB710(0); v1[721] = sub_5EAA60(0); if ( !byte_ACAD5C ) sub_420410(); v7 = (char *)sub_401410(byte_ACA838, "GuildTStart.nif"); v8 = sub_8D03E0(v7, 0); v9 = v1[743]; v21 = v8; if ( (void **)v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8 = v21; } v1[743] = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)v8 + 1); } if ( !byte_ACAD5C ) sub_420410(); v10 = (char *)sub_401410(byte_ACA838, "GuildTWin.nif"); v11 = sub_8D03E0(v10, 0); v12 = v1[744]; v22 = v11; if ( (void **)v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v11 = v22; } v1[744] = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); } if ( !byte_ACAD5C ) sub_420410(); v13 = (char *)sub_401410(byte_ACA838, "GuildTLose.nif"); v14 = sub_8D03E0(v13, 0); v15 = v1[745]; v23 = v14; if ( (void **)v15 != v14 ) { if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v14 = v23; } v1[745] = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)v14 + 1); } v1[747] = sub_5E8EB0(0, 0); v1[748] = sub_5E8EB0(0, 1); v16 = sub_5DB6E0(0); v1[712] = v16; (**((void (__stdcall ***)(int))v16 + 58))((int)(v1 + 2)); v17 = sub_52C200(0); v1[713] = v17; (**(void (__stdcall ***)(int))(v17 + 232))((int)(v1 + 2)); v1[710] = 0; v18 = (void ***)operator new(0xAC58u); if ( v18 ) v19 = (_DWORD *)sub_6D2E60(v18); else v19 = 0; return sub_6C2D50(v1, v19); } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006D3C80) -------------------------------------------------------- void __thiscall sub_6D3C80(int this, float a2) { int v2; // esi v2 = this; if ( *(_DWORD *)(this + 72) && *(_BYTE *)(this + 3008) && a2 - *(float *)(this + 3004) > 10.0 ) { sub_6F36A0(&off_AB7F2C, 29, 38, 0, 0); *(float *)(v2 + 3004) = a2; } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D3CD0) -------------------------------------------------------- char __thiscall sub_6D3CD0(int this, int a2, int *a3, int a4) { int v4; // eax int v5; // esi _DWORD *v6; // edi LOBYTE(v4) = a2; v5 = this; switch ( a2 ) { case 27: v6 = a3; if ( !*(_BYTE *)(this + 3002) || !a3 ) goto LABEL_20; v4 = *a3; if ( *a3 ) { if ( v4 != 1 ) goto LABEL_20; HIBYTE(a3) = 0; LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 29, 156, (char *)&a3 + 3, 1u); } else { HIBYTE(a3) = 1; LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 29, 156, (char *)&a3 + 3, 1u); } *(_BYTE *)(v5 + 3002) = 0; LABEL_20: if ( *(_BYTE *)(v5 + 2976) && v6 && !*v6 ) { LOBYTE(v4) = sub_6F3D10(&off_AB7F2C, 4, 185, 0, 0); *(_BYTE *)(v5 + 2976) = 0; } return v4; case 42: LOBYTE(v4) = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 2840)); return v4; case 43: LOBYTE(v4) = sub_5DB000(*(_DWORD *)(this + 2840)); return v4; case 44: LOBYTE(v4) = (_BYTE)a3; if ( *(_WORD *)a3 == 29 && *((_WORD *)a3 + 1) == 5 && !*(_DWORD *)(this + 2832) ) { LOBYTE(v4) = sub_6F36A0(&off_AB7F2C, 29, 5, (void *)a3[1], a3[2]); *(_DWORD *)(v5 + 2832) = 1; } return v4; case 45: if ( *(_DWORD *)(this + 4) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(this + 4) + 4))(45, 0, this); if ( *(_DWORD *)(v5 + 4) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 4) + 20))(45, 0, v5); } LOBYTE(v4) = (*(int (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)v5 + 20))(v5, 45, 0, v5); return v4; case 47: LOBYTE(v4) = sub_8F82A0(&unk_BA6B10, *(_DWORD **)(this + 2844)); return v4; default: return v4; } } // 5DB000: using guessed type int __thiscall sub_5DB000(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D3E70) -------------------------------------------------------- int sub_6D3E70() { _DWORD **v0; // esi v0 = (_DWORD **)(dword_B9E164 + 8); if ( *(_DWORD *)(dword_B9E164 + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(dword_B9E164 + 12) + 4))(41, 0, dword_B9E164 + 8); if ( v0[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v0[1] + 20))(41, 0, v0); } return ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v0)[5])(v0, 41, 0, v0); } // B9E164: using guessed type int dword_B9E164; //----- (006D3EC0) -------------------------------------------------------- BOOL __thiscall sub_6D3EC0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_5DE940(*(_DWORD ***)(v3 + 1064), 0.2, (int)&unk_9F90F3, (int)&unk_9F90F2); return sub_751B80(v2, a2) != 0; } //----- (006D3F10) -------------------------------------------------------- signed int __thiscall sub_6D3F10(_DWORD **this, int a2, unsigned __int16 *a3) { int v3; // eax _DWORD **v4; // esi _DWORD *v5; // ecx _DWORD *v6; // eax signed int v7; // edx int *v8; // ebx _DWORD **v10; // esi char *v11; // edi _DWORD **v12; // esi v3 = *a3; v4 = this; if ( (_WORD)v3 == 3392 ) { sub_750D40((int)(this + 501)); v4[501] = *(_DWORD **)(a3 + 1); v4[502] = *(_DWORD **)(a3 + 3); v4[503] = *(_DWORD **)(a3 + 5); v4[504] = *(_DWORD **)(a3 + 7); v4[505] = *(_DWORD **)(a3 + 9); v4[506] = *(_DWORD **)(a3 + 11); v4[507] = *(_DWORD **)(a3 + 13); v4[508] = *(_DWORD **)(a3 + 15); v4[509] = *(_DWORD **)(a3 + 17); v5 = (_DWORD **)((char *)v4 + 2063); v6 = a3 + 188; v7 = 31; do { *(v5 - 3) = *(v6 - 3); *((_BYTE *)v5 - 13) = *((_BYTE *)v6 - 13); *(v5 - 2) = *(v6 - 2); *(v5 - 1) = *(v6 - 1); *v5 = *v6; v8 = (int *)v6[1]; v5[1] = v8; v6 = (_DWORD *)((char *)v6 + 21); v5 = (_DWORD *)((char *)v5 + 21); --v7; } while ( v7 ); sub_5F7C70((char *)v4[715]); sub_5F9390((_DWORD **)v4[715], *((unsigned __int8 *)a3 + 362)); if ( sub_5F8A60((int)v4[715], v8, (int)a3) ) { if ( *((_BYTE *)v4 + 3009) ) { sub_8F82A0(&unk_BA6B10, v4[715]); *((_BYTE *)v4 + 3009) = 0; } return 1; } return 0; } if ( v3 == 3393 ) { v12 = this + 2; if ( this[3] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*this[3] + 4))(25, "DB Get Error", this + 2); if ( v12[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v12[1] + 20))(25, "DB Get Error", v12); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v12)[5])(v12, 25, "DB Get Error", v12); return 0; } v10 = this + 2; v11 = sub_7549E0("Error : %d\n", *a3); if ( v10[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v10[1] + 4))(25, v11, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v10[1] + 20))(25, v11, v10); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v10)[5])(v10, 25, v11, v10); return 0; } //----- (006D40D0) -------------------------------------------------------- int __thiscall sub_6D40D0(int this, int a2) { int v2; // esi _DWORD *v3; // esi v2 = this; *(_DWORD *)(this + 2764) = 1; *(_DWORD *)(this + 2728) = 0; *(_DWORD *)(this + 2732) = 0; *(_DWORD *)(this + 2736) = 0; *(_DWORD *)(this + 2740) = 0; *(_DWORD *)(this + 2744) = 0; *(_DWORD *)(this + 2748) = 0; *(_DWORD *)(this + 2752) = 0; *(_DWORD *)(this + 2756) = 0; *(_DWORD *)(this + 2760) = 0; if ( *(_DWORD *)(this + 2876) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(this + 2876)); if ( *(_DWORD *)(v2 + 2872) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 2872)); *(_DWORD *)(v2 + 2888) = -1; *(_DWORD *)(v2 + 2908) = 0; *(_WORD *)(v2 + 2912) = -1; *(_DWORD *)(v2 + 2892) = 0; *(_DWORD *)(v2 + 2896) = 0; *(_DWORD *)(v2 + 2936) = 0; *(_WORD *)(v2 + 2940) = -1; *(_DWORD *)(v2 + 2900) = 0; *(_DWORD *)(v2 + 2904) = 0; *(_DWORD *)(v2 + 2964) = 0; *(_DWORD *)(v2 + 2968) = 0; sub_5E98F0(*(_BYTE **)(v2 + 2880), 0); sub_5E9A40(*(_DWORD *)(v2 + 2884), 0); if ( *(_DWORD *)(v2 + 2988) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v2 + 2988)); v3 = *(_DWORD **)(v2 + 2992); if ( v3 ) sub_8F86A0(&unk_BA6B10, v3); return 0; } //----- (006D41E0) -------------------------------------------------------- signed int __thiscall sub_6D41E0(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v3; // esi const char *v4; // edi v2 = *a2; if ( (_WORD)v2 != 6720 ) { v3 = this + 2; v4 = sub_41A850(v2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return 1; } //----- (006D4250) -------------------------------------------------------- signed int __thiscall sub_6D4250(_DWORD **this, int a2) { int v2; // edx int v3; // eax _DWORD **v4; // esi if ( dword_B9E164 ) v2 = dword_B9E164 + 64; else v2 = 0; if ( *(_DWORD *)(v2 + 12) == *(_DWORD *)a2 ) { if ( dword_B9E164 ) v3 = dword_B9E164 + 64; else v3 = 0; v4 = this + 2; *(_BYTE *)(v3 + 40) = *(_BYTE *)(a2 + 4); if ( this[3] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*this[3] + 4))(41, 0, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v4[1] + 20))(41, 0, v4); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v4)[5])(v4, 41, 0, v4); } return 1; } // B9E164: using guessed type int dword_B9E164; //----- (006D42D0) -------------------------------------------------------- int __thiscall sub_6D42D0(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v4; // esi const char *v5; // edi if ( a2 ) { v2 = *a2; if ( (_WORD)v2 == 6976 ) { sub_5F0C50(this[718], a2[1]); return 0; } v4 = this + 2; v5 = sub_41A850(v2); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); } return 0; } //----- (006D4350) -------------------------------------------------------- int __thiscall sub_6D4350(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v3; // esi const char *v4; // edi if ( a2 ) { v2 = *a2; if ( (_WORD)v2 != 6976 ) { v3 = this + 2; v4 = sub_41A850(v2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } } return 0; } //----- (006D43C0) -------------------------------------------------------- signed int __thiscall sub_6D43C0(_DWORD *this, _DWORD *a2) { _BYTE *v2; // ecx if ( !a2 ) return 0; if ( this[727] == *a2 ) { this[723] = *a2; this[724] = a2[1]; } if ( this[734] == *a2 ) { this[725] = *a2; this[726] = a2[1]; } v2 = (_BYTE *)this[717]; if ( *((_DWORD *)dword_AD8EBC + 169) == *a2 ) sub_5EFCD0(v2, 0, 0); else sub_5EFCD0(v2, 1, 0); return 1; } //----- (006D4440) -------------------------------------------------------- int __thiscall sub_6D4440(char *this, unsigned __int16 *a2) { char *v2; // esi signed int v3; // ecx int v4; // eax _DWORD **v6; // esi const char *v7; // edi v2 = this; if ( a2 ) { v3 = *a2; if ( (_WORD)v3 == 6976 ) { v2[2812] = 1; *((_DWORD *)v2 + 702) = *((unsigned __int8 *)a2 + 2); *((_DWORD *)v2 + 741) = *(_DWORD *)((char *)a2 + 3); *((_DWORD *)v2 + 742) = *(_DWORD *)((char *)a2 + 7); v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { sub_569950(*(_DWORD ***)(v4 + 572), 1); return 0; } } else { v6 = (_DWORD **)(v2 + 8); v7 = sub_41A850(v3); if ( v6[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); } } return 0; } //----- (006D4500) -------------------------------------------------------- int __thiscall sub_6D4500(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v3; // esi const char *v4; // edi v2 = *a2; if ( (_WORD)v2 != 6976 ) { v3 = this + 2; v4 = sub_41A850(v2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return 0; } //----- (006D4570) -------------------------------------------------------- int __thiscall sub_6D4570(int this, unsigned __int16 *a2) { int result; // eax _DWORD **v3; // esi const char *v4; // edi if ( a2 && *a2 == 3137 ) { *(_DWORD *)(this + 2800) = *(_DWORD *)(a2 + 1); *(_DWORD *)(this + 2804) = *(_DWORD *)(a2 + 3); sub_5FA1B0(*(_DWORD ***)(this + 2864), *(_DWORD *)(a2 + 1), *(_DWORD *)(a2 + 3)); result = 0; } else { v3 = (_DWORD **)(this + 8); v4 = sub_41A850(*a2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); result = 0; } return result; } //----- (006D4610) -------------------------------------------------------- int __userpurge sub_6D4610@(int a1@, int a2@, int a3@, unsigned __int16 *a4) { signed int v4; // eax char *v5; // eax _DWORD **v7; // esi const char *v8; // edi int *v9; // eax if ( !a4 ) return 0; v4 = *a4; if ( (_WORD)v4 == 6976 ) { v9 = (int *)sub_664AB0(dword_AD8C90, a4[1]); if ( v9 ) sub_65D9A0(v9, a2, a3); return 0; } if ( (_WORD)v4 == 6993 ) { v5 = sub_664AB0(dword_AD8C90, a4[1]); if ( v5 ) { sub_65BA10(v5); return 0; } return 0; } v7 = (_DWORD **)(a1 + 8); v8 = sub_41A850(v4); if ( v7[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v7[1] + 4))(25, v8, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); return 0; } //----- (006D46D0) -------------------------------------------------------- int __thiscall sub_6D46D0(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v3; // esi const char *v4; // edi v2 = *a2; if ( (_WORD)v2 != 6976 ) { v3 = this + 2; v4 = sub_41A850(v2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return 0; } //----- (006D4740) -------------------------------------------------------- int __thiscall sub_6D4740(int *this, _DWORD *a2) { float *v2; // eax float v3; // ST08_4 if ( a2 && *a2 == 5 ) { v2 = (float *)this[743]; v3 = (double)((unsigned int)xRight >> 1); v2[22] = v3; v2[23] = -500.0; v2[24] = 0.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, this[743]); sub_6BA680(&dword_AB6520, (int)"GuildTStart"); } return 0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006D47D0) -------------------------------------------------------- int __thiscall sub_6D47D0(int this, int a2) { int v2; // edi v2 = this; if ( a2 ) { *(_DWORD *)(this + 2800) = *(_DWORD *)(a2 + 8); *(_DWORD *)(this + 2804) = *(_DWORD *)(a2 + 12); if ( *(_DWORD *)(this + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(this + 12) + 4))(41, 0, this + 8); if ( *(_DWORD *)(v2 + 12) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v2 + 12) + 20))(41, 0, v2 + 8); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v2 + 8) + 20))(v2 + 8, 41, 0, v2 + 8); sub_5FA1B0(*(_DWORD ***)(v2 + 2864), *(_DWORD *)(a2 + 8), *(_DWORD *)(a2 + 12)); } return 0; } //----- (006D4850) -------------------------------------------------------- int sub_6D4850() { return *(_DWORD *)(dword_B9E164 + 2880); } // B9E164: using guessed type int dword_B9E164; //----- (006D4860) -------------------------------------------------------- int sub_6D4860() { return *(_DWORD *)(dword_B9E164 + 2884); } // B9E164: using guessed type int dword_B9E164; //----- (006D4870) -------------------------------------------------------- int __thiscall sub_6D4870(_DWORD *this, unsigned __int16 *a2) { unsigned __int16 *v2; // edi _DWORD *v3; // esi signed int v4; // ebx int v5; // edx int result; // eax signed int v7; // ebx int v8; // ecx _DWORD **v9; // esi const char *v10; // edi int v11; // [esp+10h] [ebp+8h] int v12; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( *a2 == 7240 ) { if ( a2[1] & 1 ) { sub_5F40F0(*(_DWORD **)(this[714] + 344)); v4 = 0; if ( *(unsigned __int16 *)((char *)a2 + 7) > 0u ) { v11 = (int)a2 + 9; do { sub_5F4B60(*(_DWORD **)(v3[714] + 344), v11, 0); v11 += 46; ++v4; } while ( v4 < *(unsigned __int16 *)((char *)v2 + 7) ); } } else { v7 = 0; if ( *(unsigned __int16 *)((char *)a2 + 7) > 0u ) { v12 = (int)a2 + 9; do { sub_5F4B60(*(_DWORD **)(v3[714] + 344), v12, 0); v12 += 46; ++v7; } while ( v7 < *(unsigned __int16 *)((char *)v2 + 7) ); } } v5 = v3[714]; if ( *(_DWORD *)(v5 + 344) ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v5 + 344)); return 0; } if ( *a2 == 7243 ) { v8 = *(_DWORD *)(this[714] + 344); if ( !v8 ) return 0; sub_5F4D60(v8); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3[714] + 344)); result = 0; } else { v9 = (_DWORD **)(this + 2); v10 = sub_41A850(*a2); if ( v9[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v9[1] + 4))(25, v10, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); result = 0; } return result; } //----- (006D49D0) -------------------------------------------------------- int __stdcall sub_6D49D0(_WORD *a1) { _WORD *v1; // ebx int v2; // eax signed int v3; // esi int *v4; // edi int v6; // [esp+Ch] [ebp+8h] v1 = a1; if ( !*a1 ) return 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v6 = v2; if ( v2 ) sub_56C310(*(_DWORD ***)(v2 + 572)); v3 = 0; if ( *v1 <= 0u ) return 0; v4 = (int *)(v1 + 1); do { if ( v6 ) sub_56F6C0(*(int **)(v6 + 572), *v4, v4[1]); ++v3; v4 += 2; } while ( v3 < (unsigned __int16)*v1 ); return 0; } //----- (006D4A50) -------------------------------------------------------- signed int __stdcall sub_6D4A50(int a1) { int v2; // eax int v3; // ecx if ( !a1 ) return 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v2 ) return 0; v3 = *(_DWORD *)(v2 + 868); if ( !v3 ) return 0; sub_5E39F0(v3, (_WORD *)a1, *(unsigned __int8 *)(a1 + 2)); return 1; } //----- (006D4AA0) -------------------------------------------------------- signed int __thiscall sub_6D4AA0(void *this, int a2) { signed int result; // eax const char *v3; // eax int v4; // ecx int v5; // edx char *v6; // eax char v7; // [esp+4h] [ebp-38h] char v8[4]; // [esp+24h] [ebp-18h] int v9; // [esp+28h] [ebp-14h] int v10; // [esp+2Ch] [ebp-10h] int v11; // [esp+30h] [ebp-Ch] char v12; // [esp+34h] [ebp-8h] result = sub_750AB0((int)this, a2); if ( result ) { v3 = sub_40A910(1396722298); strftime(&v7, 0x1Fu, v3, (const struct tm *)(a2 + 21)); v4 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)a2; v9 = *(_DWORD *)(a2 + 4); v10 = v4; *(_DWORD *)v8 = v5; v11 = *(_DWORD *)(a2 + 12); v12 = 0; v6 = (char *)sub_40C190(53549465); sub_462C30(1, v6, v8, &v7); result = 1; } return result; } //----- (006D4B40) -------------------------------------------------------- signed int __thiscall sub_6D4B40(char *this, unsigned __int16 *a2) { signed int v2; // eax char *v3; // esi const CHAR *v4; // eax int v6; // ST08_4 const CHAR *v7; // eax char *v8; // eax const CHAR *v9; // eax char *v10; // esi const CHAR *v11; // edi v2 = *a2; v3 = this; if ( (_WORD)v2 == 3137 ) return 1; if ( v2 > 7104 ) { if ( v2 == 7105 ) { v9 = sub_40A910(1499684240); LABEL_15: v10 = v3 - 56; v11 = v9; if ( *((_DWORD *)v10 + 1) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v10 + 1) + 4))(25, v9, v10); if ( *((_DWORD *)v10 + 1) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v10 + 1) + 20))(25, v11, v10); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*(_DWORD *)v10 + 20))(v10, 25, v11, v10); } return 1; } if ( v2 == 7104 ) { v9 = sub_40A910(52170156); goto LABEL_15; } switch ( v2 ) { case 3360: case 3361: case 3365: case 3366: case 3367: v6 = *a2; v7 = sub_40C190(-263905212); v8 = sub_7549E0("%s(%d)", v7, v6); sub_431140((_DWORD **)v3 - 14, 25, (int)v8, 0); return 1; case 3362: v4 = sub_40C190(1803776455); break; case 3363: v4 = sub_40C190(-1394408389); break; case 3364: v4 = sub_40C190(-509712759); break; case 3368: v4 = sub_40C190(-313852025); break; case 3369: v4 = sub_40C190(-263905212); break; default: return 1; } sub_431140((_DWORD **)v3 - 14, 25, (int)v4, 0); return 1; } //----- (006D4C90) -------------------------------------------------------- signed int __thiscall sub_6D4C90(_DWORD *this, unsigned __int16 *a2) { unsigned __int16 *v2; // esi _DWORD *v3; // edi _DWORD *v4; // ebx const char *v5; // eax _DWORD *v6; // ebx const CHAR *v7; // eax signed int v8; // ebx int v9; // edi _DWORD *v11; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; if ( *a2 != 12696 && *a2 != 3137 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = sub_41A850(*a2); sub_492060(v4, (int)v5); } if ( *a2 == 3356 ) { v6 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v7 = sub_4090F0(53309289); sub_492060(v6, (int)v7); } v8 = 0; if ( a2[1] & 1 ) { v3[704] = 0; sub_751C50(v3 + 498); } v3[704] += *(unsigned __int16 *)((char *)a2 + 3); if ( *(unsigned __int16 *)((char *)a2 + 3) > 0u ) { v11 = v3 + 498; v9 = (int)v2 + 5; do { sub_7519E0(v11, v9); ++v8; v9 += 42; } while ( v8 < *(unsigned __int16 *)((char *)v2 + 3) ); } return 1; } //----- (006D4D70) -------------------------------------------------------- signed int __thiscall sub_6D4D70(char *this, int a2) { char *v2; // ebx int v3; // esi const CHAR *v4; // edi const CHAR *v5; // edi signed int result; // eax unsigned __int8 *v7; // eax signed int v8; // ecx const CHAR *v9; // edi const CHAR *v10; // edi const CHAR *v11; // edi const CHAR *v12; // edi const CHAR *v13; // edi const CHAR *v14; // edi const CHAR *v15; // edi unsigned int v16; // ebx signed __int64 v17; // rax int v18; // eax char v19; // cl const char *v20; // edx unsigned int v21; // eax char *v22; // edi char v23; // cl char *v24; // edi char v25; // al signed __int64 v26; // rax unsigned int v27; // eax char *v28; // edi char v29; // cl const char *v30; // ecx unsigned int v31; // eax const char *v32; // esi char *v33; // edi char v34; // cl char *v35; // edi char v36; // al signed __int64 v37; // rax unsigned int v38; // eax char *v39; // edi char v40; // cl const char *v41; // ecx unsigned int v42; // eax const char *v43; // esi char *v44; // edi char v45; // cl char *v46; // edi char v47; // al signed __int64 v48; // rax unsigned int v49; // eax char *v50; // edi char v51; // cl const char *v52; // ecx unsigned int v53; // eax const char *v54; // esi char *v55; // edi char v56; // cl char *v57; // edi char v58; // al char *v59; // eax void *v60; // eax _DWORD **v61; // esi int v62; // ST14_4 int v63; // ST10_4 char *v64; // eax void *v65; // edi char *v66; // [esp+Ch] [ebp-208h] char v67[256]; // [esp+10h] [ebp-204h] char v68[256]; // [esp+10Fh] [ebp-105h] char v69[256]; // [esp+110h] [ebp-104h] v2 = this; v66 = this; if ( *(_WORD *)(a2 + 6) == 7232 ) { v3 = (int)(this + 8); v4 = sub_40C190(-2083863858); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(46, v4, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(46, v4, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*(_DWORD *)v3 + 20))(v2 + 8, 46, v4, v2 + 8); v5 = sub_40C190(-2083863858); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v5, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v5, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*(_DWORD *)v3 + 20))(v2 + 8, 25, v5, v2 + 8); result = 1; } else { if ( sub_7474E0((_DWORD *)(dword_ACD998 + 4), 0) ) v7 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD998 + 4), 0); else v7 = 0; v8 = *(unsigned __int16 *)(a2 + 6); if ( v8 > 7233 ) { switch ( v8 ) { case 7234: v15 = sub_40C190(1988193177); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v15, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v15, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v15, v2 + 8); goto LABEL_100; case 7236: if ( v7 ) { v16 = *(_DWORD *)(v7 + 3); memset(v67, 0, 0x100u); memset(v69, 0, 0x100u); if ( v16 ) { if ( sub_680E90(v16) ) { v17 = sub_680E90(v16); sprintf(v67, "%I64d", v17); v18 = 0; do { v19 = v67[v18]; v69[v18++] = v19; } while ( v19 ); v20 = sub_40C190(1197446809); v21 = strlen(v20) + 1; v22 = v68; do v23 = (v22++)[1]; while ( v23 ); qmemcpy(v22, v20, v21); v24 = v68; do v25 = (v24++)[1]; while ( v25 ); *v24 = 0; } if ( sub_680EB0(v16) ) { v26 = sub_680EB0(v16); sprintf(v67, "%I64d", v26); v27 = strlen(v67) + 1; v28 = v68; do v29 = (v28++)[1]; while ( v29 ); qmemcpy(v28, v67, v27); v30 = sub_40C190(1201903011); v31 = strlen(v30) + 1; v32 = v30; v33 = v68; do v34 = (v33++)[1]; while ( v34 ); qmemcpy(v33, v32, v31); v35 = v68; do v36 = (v35++)[1]; while ( v36 ); *v35 = 0; } if ( sub_680F00(v16) ) { v37 = sub_680F00(v16); sprintf(v67, "%I64d", v37); v38 = strlen(v67) + 1; v39 = v68; do v40 = (v39++)[1]; while ( v40 ); qmemcpy(v39, v67, v38); v41 = sub_40C190(-1732930065); v42 = strlen(v41) + 1; v43 = v41; v44 = v68; do v45 = (v44++)[1]; while ( v45 ); qmemcpy(v44, v43, v42); v46 = v68; do v47 = (v46++)[1]; while ( v47 ); *v46 = 0; } if ( sub_680F60(v16) ) { v48 = sub_680F60(v16); sprintf(v67, "%I64d", v48); v49 = strlen(v67) + 1; v50 = v68; do v51 = (v50++)[1]; while ( v51 ); qmemcpy(v50, v67, v49); v52 = sub_40C190(-2001757707); v53 = strlen(v52) + 1; v54 = v52; v55 = v68; do v56 = (v55++)[1]; while ( v56 ); qmemcpy(v55, v54, v53); v57 = v68; do v58 = (v57++)[1]; while ( v58 ); *v57 = 0; } } v59 = (char *)sub_40A910(-940209656); v60 = sub_7549E0(v59, v69); v61 = (_DWORD **)(v66 + 8); break; } goto LABEL_100; case 7237: if ( v7 ) { v62 = *(unsigned __int16 *)(v7 + 1); v63 = *v7; v64 = (char *)sub_40A910(-990588172); v60 = sub_7549E0(v64, v63, v62); v61 = (_DWORD **)(v2 + 8); break; } goto LABEL_100; case 7238: v60 = (void *)sub_40C190(1420077985); v61 = (_DWORD **)(v2 + 8); break; case 7239: v60 = (void *)sub_40A910(-1545298996); v61 = (_DWORD **)(v2 + 8); break; default: LABEL_95: v60 = sub_7549E0("Error : %d\n", *(unsigned __int16 *)(a2 + 6)); v61 = (_DWORD **)(v2 + 8); break; } v65 = v60; if ( v61[1] ) { (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v61[1] + 4))(25, v60, v61); if ( v61[1] ) (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v61[1] + 20))(25, v65, v61); } ((void (__thiscall *)(_DWORD **, signed int, void *, _DWORD **))(*v61)[5])(v61, 25, v65, v61); } else if ( v8 != 7233 ) { switch ( v8 ) { case 3393: if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 4))( 25, "DB Get Error", v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 20))( 25, "DB Get Error", v2 + 8); } (*(void (__thiscall **)(char *, signed int, const char *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, "DB Get Error", v2 + 8); break; case 3394: if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 4))( 25, "DB Set Error", v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 20))( 25, "DB Set Error", v2 + 8); } (*(void (__thiscall **)(char *, signed int, const char *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, "DB Set Error", v2 + 8); break; case 3395: v9 = sub_40C190(-1194838733); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v9, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v9, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v9, v2 + 8); break; case 3396: v10 = sub_40C190(1420077985); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v10, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v10, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v10, v2 + 8); break; case 3397: if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 4))( 25, "Participation Recording Error", v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const char *, char *))(**((_DWORD **)v2 + 3) + 20))( 25, "Participation Recording Error", v2 + 8); } (*(void (__thiscall **)(char *, signed int, const char *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, "Participation Recording Error", v2 + 8); break; case 3399: v12 = sub_40C190(1988193177); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v12, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v12, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v12, v2 + 8); break; case 3400: v11 = sub_40C190(927810676); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v11, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v11, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v11, v2 + 8); break; case 3401: v13 = sub_40A910(-1665880280); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v13, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v13, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v13, v2 + 8); break; case 3402: v14 = sub_40A910(1567511759); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 4))(25, v14, v2 + 8); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, const CHAR *, char *))(**((_DWORD **)v2 + 3) + 20))(25, v14, v2 + 8); } (*(void (__thiscall **)(char *, signed int, const CHAR *, char *))(*((_DWORD *)v2 + 2) + 20))( v2 + 8, 25, v14, v2 + 8); break; default: goto LABEL_95; } } LABEL_100: result = 0; } return result; } // ACD998: using guessed type int dword_ACD998; // 6D4D70: using guessed type char var_104[256]; // 6D4D70: using guessed type char var_204[256]; //----- (006D55C0) -------------------------------------------------------- signed int __thiscall sub_6D55C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // zf char *v5; // ecx char *v6; // eax int v7; // edx char v8; // cl signed int result; // eax char *v10; // ecx char *v11; // eax int v12; // edx char v13; // cl _DWORD **v14; // esi const CHAR *v15; // edi v2 = this; if ( !dword_B9E164 ) return 0; this[722] = *(unsigned __int16 *)(a2 + 8); this[19] = *(_DWORD *)(a2 + 10); this[741] = *(_DWORD *)a2; this[742] = *(_DWORD *)(a2 + 4); if ( *(_DWORD *)a2 && *(_DWORD *)(a2 + 4) ) { if ( dword_B9E164 ) v3 = dword_B9E164 + 64; else v3 = 0; v4 = *(_DWORD *)(v3 + 12) == *(_DWORD *)a2; this[691] = 2; if ( v4 ) { if ( dword_B9E164 ) v5 = (char *)(dword_B9E164 + 64); else v5 = 0; v6 = (char *)sub_6D36C0(v5, *(_DWORD *)(a2 + 4)); if ( v6 ) { v7 = (char *)(v2 + 683) - v6; do { v8 = *v6; v6[v7] = *v6; ++v6; } while ( v8 ); } v2[682] = *(_DWORD *)(a2 + 4); result = 1; } else { if ( dword_B9E164 ) v10 = (char *)(dword_B9E164 + 64); else v10 = 0; v11 = (char *)sub_6D36C0(v10, *(_DWORD *)a2); if ( v11 ) { v12 = (char *)(v2 + 683) - v11; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); } v2[682] = *(_DWORD *)a2; result = 1; } } else { v14 = (_DWORD **)(this + 2); v15 = sub_40C190(942153611); if ( v14[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v14[1] + 4))(25, v15, v14); if ( v14[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v14[1] + 20))(25, v15, v14); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v14)[5])(v14, 25, v15, v14); result = 1; } return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D5710) -------------------------------------------------------- int __thiscall sub_6D5710(_DWORD **this, int a2) { int v2; // eax int v3; // ecx int v4; // edi int v5; // edx int v6; // ecx int v7; // edx int v8; // ebx int v9; // ecx int v10; // eax char v11; // cl int v12; // ST1C_4 int v13; // ST18_4 int v14; // ST14_4 char *v15; // eax char *v16; // ebx int v17; // ST1C_4 char *v18; // eax char *v19; // ebx int v20; // ST1C_4 int v21; // ST18_4 int v22; // ST14_4 char *v23; // eax char *v24; // eax int v25; // ST1C_4 char *v26; // eax char *v27; // ebx int v28; // eax int v29; // ecx int v30; // edi int v31; // edx int v32; // ecx int v33; // edx int v34; // ebx int v35; // ecx int v36; // eax char v37; // cl char *v38; // eax char *v39; // ebx int v40; // ecx int v41; // edx unsigned int v42; // eax int v43; // ecx int v44; // edx unsigned int v45; // esi unsigned int v46; // ebx unsigned int v47; // edi signed __int64 v48; // rax int v49; // eax char v50; // cl const char *v51; // edx unsigned int v52; // eax char *v53; // edi char v54; // cl char *v55; // edi char v56; // al signed __int64 v57; // rax unsigned int v58; // eax char *v59; // edi char v60; // cl const char *v61; // ecx unsigned int v62; // eax const char *v63; // esi char *v64; // edi char v65; // cl char *v66; // edi char v67; // al signed __int64 v68; // rax unsigned int v69; // eax char *v70; // edi char v71; // cl const char *v72; // ecx unsigned int v73; // eax const char *v74; // esi char *v75; // edi char v76; // cl char *v77; // edi char v78; // al signed __int64 v79; // rax unsigned int v80; // eax char *v81; // edi char v82; // cl const char *v83; // ecx unsigned int v84; // eax const char *v85; // esi char *v86; // edi char v87; // cl char *v88; // edi char v89; // al char *v90; // eax char *v91; // edi int v93; // [esp-Ch] [ebp-240h] int v94; // [esp-8h] [ebp-23Ch] int v95; // [esp-4h] [ebp-238h] unsigned int v96; // [esp+10h] [ebp-224h] _DWORD **v97; // [esp+14h] [ebp-220h] char v98[256]; // [esp+18h] [ebp-21Ch] char v99[256]; // [esp+117h] [ebp-11Dh] char v100[256]; // [esp+118h] [ebp-11Ch] char v101[4]; // [esp+218h] [ebp-1Ch] int v102; // [esp+21Ch] [ebp-18h] int v103; // [esp+220h] [ebp-14h] int v104; // [esp+224h] [ebp-10h] int v105; // [esp+228h] [ebp-Ch] char v106; // [esp+22Ch] [ebp-8h] v97 = this; if ( !*(_BYTE *)a2 ) { v2 = *(unsigned __int16 *)(a2 + 22); if ( (_WORD)v2 != -1 ) { v3 = *(_DWORD *)(a2 + 6); v4 = dword_ACB230; *(_DWORD *)v101 = *(_DWORD *)(a2 + 2); v5 = *(_DWORD *)(a2 + 10); v102 = v3; v6 = *(_DWORD *)(a2 + 14); v103 = v5; v7 = *(_DWORD *)(a2 + 18); v104 = v6; v105 = v7; v8 = v2; v106 = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v2) ) { if ( (unsigned __int16)v8 <= *(_WORD *)(v4 + 200) ) { v9 = *(_DWORD *)(v4 + 196); if ( *(_DWORD *)(v9 + 4 * v8) ) { v10 = *(_DWORD *)(v9 + 4 * v8); if ( v10 ) { v11 = *(_BYTE *)(a2 + 1); if ( v11 ) { if ( v11 == 1 ) { if ( *(_QWORD *)(a2 + 25) <= 1ui64 ) { v25 = v10 + 34; v26 = (char *)sub_40A910(-1802073970); v24 = sub_7549E0(v26, v101, v25); } else { v20 = *(_DWORD *)(a2 + 29); v21 = *(_DWORD *)(a2 + 25); v22 = v10 + 34; v23 = (char *)sub_40A910(-387590931); v24 = sub_7549E0(v23, v101, v22, v21, v20); } v27 = v24; if ( v97[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 4))(46, v24, v97 + 2); if ( v97[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 20))(46, v27, v97 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v97[2][5])(v97 + 2, 46, v27, v97 + 2); } } else if ( *(_QWORD *)(a2 + 25) <= 1ui64 ) { v17 = v10 + 34; v18 = (char *)sub_40C190(-591873842); v19 = sub_7549E0(v18, v101, v17); if ( v97[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 4))(46, v19, v97 + 2); if ( v97[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 20))(46, v19, v97 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v97[2][5])(v97 + 2, 46, v19, v97 + 2); sub_62F520(*(unsigned __int8 *)(a2 + 24)); sub_5F99A0(v97[716], (int *)*(unsigned __int8 *)(a2 + 24)); } else { v12 = v10 + 34; v13 = *(_DWORD *)(a2 + 29); v14 = *(_DWORD *)(a2 + 25); v15 = (char *)sub_40C190(805766189); v16 = sub_7549E0(v15, v101, v14, v13, v12); if ( v97[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 4))(46, v16, v97 + 2); if ( v97[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 20))(46, v16, v97 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v97[2][5])(v97 + 2, 46, v16, v97 + 2); } } } } } } } if ( *(_BYTE *)a2 == 1 ) { v28 = *(unsigned __int16 *)(a2 + 22); if ( (_WORD)v28 != -1 ) { v29 = *(_DWORD *)(a2 + 6); v30 = dword_ACB230; *(_DWORD *)v101 = *(_DWORD *)(a2 + 2); v31 = *(_DWORD *)(a2 + 10); v102 = v29; v32 = *(_DWORD *)(a2 + 14); v103 = v31; v33 = *(_DWORD *)(a2 + 18); v104 = v32; v105 = v33; v34 = v28; v106 = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v28) ) { if ( (unsigned __int16)v34 <= *(_WORD *)(v30 + 200) ) { v35 = *(_DWORD *)(v30 + 196); if ( *(_DWORD *)(v35 + 4 * v34) ) { v36 = *(_DWORD *)(v35 + 4 * v34); if ( v36 ) { v37 = *(_BYTE *)(a2 + 1); if ( v37 ) { if ( v37 != 1 ) goto LABEL_39; v95 = *(_DWORD *)(a2 + 29); v94 = *(_DWORD *)(a2 + 25); v93 = v36 + 34; v38 = (char *)sub_40A910(-387590931); } else { v95 = v36 + 34; v94 = *(_DWORD *)(a2 + 29); v93 = *(_DWORD *)(a2 + 25); v38 = (char *)sub_40C190(805766189); } v39 = sub_7549E0(v38, v101, v93, v94, v95); if ( v97[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 4))(46, v39, v97 + 2); if ( v97[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 20))(46, v39, v97 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v97[2][5])(v97 + 2, 46, v39, v97 + 2); } } } } } } LABEL_39: if ( *(_BYTE *)a2 == 2 ) { v40 = *(_DWORD *)(a2 + 2); v41 = *(_DWORD *)(a2 + 6); v103 = *(_DWORD *)(a2 + 10); v42 = *(_DWORD *)(a2 + 25); *(_DWORD *)v101 = v40; v43 = *(_DWORD *)(a2 + 14); v102 = v41; v44 = *(_DWORD *)(a2 + 18); v45 = *(_DWORD *)(a2 + 29); v46 = v42; v47 = v45; v104 = v43; v105 = v44; v106 = 0; v96 = v45; if ( v45 | v42 ) { memset(v98, 0, 0x100u); memset(v100, 0, 0x100u); if ( sub_680E90(__PAIR__(v45, v46)) ) { v48 = sub_680E90(__PAIR__(v45, v46)); sprintf(v98, "%I64d", v48); v49 = 0; do { v50 = v98[v49]; v100[v49++] = v50; } while ( v50 ); v51 = sub_40C190(1197446809); v52 = strlen(v51) + 1; v53 = v99; do v54 = (v53++)[1]; while ( v54 ); qmemcpy(v53, v51, v52); v55 = v99; do v56 = (v55++)[1]; while ( v56 ); *v55 = 0; v47 = v45; } if ( sub_680EB0(__PAIR__(v47, v46)) ) { v57 = sub_680EB0(__PAIR__(v47, v46)); sprintf(v98, "%I64d", v57); v58 = strlen(v98) + 1; v59 = v99; do v60 = (v59++)[1]; while ( v60 ); qmemcpy(v59, v98, v58); v61 = sub_40C190(1201903011); v62 = strlen(v61) + 1; v63 = v61; v64 = v99; do v65 = (v64++)[1]; while ( v65 ); qmemcpy(v64, v63, v62); v66 = v99; do v67 = (v66++)[1]; while ( v67 ); *v66 = 0; v47 = v96; } if ( sub_680F00(__PAIR__(v47, v46)) ) { v68 = sub_680F00(__PAIR__(v47, v46)); sprintf(v98, "%I64d", v68); v69 = strlen(v98) + 1; v70 = v99; do v71 = (v70++)[1]; while ( v71 ); qmemcpy(v70, v98, v69); v72 = sub_40C190(-1732930065); v73 = strlen(v72) + 1; v74 = v72; v75 = v99; do v76 = (v75++)[1]; while ( v76 ); qmemcpy(v75, v74, v73); v77 = v99; do v78 = (v77++)[1]; while ( v78 ); *v77 = 0; v47 = v96; } if ( sub_680F60(__PAIR__(v47, v46)) ) { v79 = sub_680F60(__PAIR__(v96, v46)); sprintf(v98, "%I64d", v79); v80 = strlen(v98) + 1; v81 = v99; do v82 = (v81++)[1]; while ( v82 ); qmemcpy(v81, v98, v80); v83 = sub_40C190(-2001757707); v84 = strlen(v83) + 1; v85 = v83; v86 = v99; do v87 = (v86++)[1]; while ( v87 ); qmemcpy(v86, v85, v84); v88 = v99; do v89 = (v88++)[1]; while ( v89 ); *v88 = 0; } v90 = (char *)sub_40C190(721287981); v91 = sub_7549E0(v90, v101, v100); if ( v97[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 4))(46, v91, v97 + 2); if ( v97[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v97[3] + 20))(46, v91, v97 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v97[2][5])(v97 + 2, 46, v91, v97 + 2); } } return 0; } // ACB230: using guessed type int dword_ACB230; // 6D5710: using guessed type char var_11C[256]; // 6D5710: using guessed type char var_21C[256]; //----- (006D5E20) -------------------------------------------------------- signed int __thiscall sub_6D5E20(char *this, int a2) { char *v2; // esi __int16 v3; // cx signed int result; // eax _DWORD **v5; // esi const CHAR *v6; // edi _DWORD **v7; // esi const CHAR *v8; // edi _DWORD **v9; // esi const CHAR *v10; // edi _DWORD **v11; // esi const CHAR *v12; // edi v2 = this; v3 = *(_WORD *)(a2 + 8); switch ( v3 ) { case 5248: sub_62F3E0(*(_QWORD *)a2); result = 1; break; case 5249: v5 = (_DWORD **)(v2 + 8); v6 = sub_40C190(102962815); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); result = 1; break; case 5250: v7 = (_DWORD **)(v2 + 8); v8 = sub_40C190(-1547716847); if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v8, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); result = 1; break; case 5251: v9 = (_DWORD **)(v2 + 8); v10 = sub_40C190(-970191309); if ( v9[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 4))(25, v10, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); result = 1; break; default: *(_WORD *)(a2 + 8) = 5252; v11 = (_DWORD **)(v2 + 8); v12 = sub_40C190(2110508257); if ( v11[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 4))(25, v12, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 20))(25, v12, v11); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v11)[5])(v11, 25, v12, v11); result = 1; break; } return result; } //----- (006D5FC0) -------------------------------------------------------- signed int __thiscall sub_6D5FC0(_BYTE *this, int a2) { _BYTE *v2; // esi char *v3; // eax volatile LONG *v4; // eax int v5; // edx signed int result; // eax v2 = this; v3 = (char *)sub_40C190(-841870531); v4 = sub_462CA0(2, v3); if ( v2 ) v5 = (int)(v2 + 8); else v5 = 0; (**((void (__stdcall ***)(int))v4 + 58))(v5); result = 1; v2[3010] = 1; return result; } //----- (006D6000) -------------------------------------------------------- signed int __thiscall sub_6D6000(char *this, unsigned __int16 *a2) { int v2; // eax char *v3; // esi void *v4; // eax _DWORD **v5; // esi void *v6; // edi v2 = *a2; v3 = this; if ( (_WORD)v2 != 5184 ) { if ( v2 == 5188 ) v4 = (void *)sub_40C190(-2134198827); else v4 = sub_7549E0("Error : %d\n", v2); v5 = (_DWORD **)(v3 + 8); v6 = v4; if ( v5[1] ) { (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v5[1] + 4))(25, v4, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, void *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } ((void (__thiscall *)(_DWORD **, signed int, void *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } return 1; } //----- (006D6080) -------------------------------------------------------- signed int __thiscall sub_6D6080(char *this, _WORD *a2) { char *v2; // esi const CHAR *v3; // eax _DWORD **v4; // esi const CHAR *v5; // edi v2 = this; if ( *a2 == 6744 ) v3 = sub_40A910(-952100061); else v3 = sub_41A850((unsigned __int16)*a2); v4 = (_DWORD **)(v2 + 8); v5 = v3; if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v3, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); return 1; } //----- (006D6100) -------------------------------------------------------- int __thiscall sub_6D6100(_DWORD **this, unsigned __int16 *a2) { int v2; // esi char v3; // al char v4; // al const char *v5; // eax _DWORD **v7; // esi const CHAR *v8; // eax unsigned __int8 v9; // al _DWORD **v10; // esi int v11; // ST0C_4 char *v12; // eax char *v13; // eax _DWORD **v14; // esi const char *v15; // edi int v16; // [esp-4h] [ebp-50h] char v17; // [esp+8h] [ebp-44h] if ( *a2 == 7016 ) { v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = *((_BYTE *)a2 + 2); if ( v3 ) { switch ( v3 ) { case 1: v4 = *((_BYTE *)a2 + 44); if ( v4 ) { if ( v4 == 1 && v2 ) { v16 = -1767246095; goto LABEL_18; } } else if ( v2 ) { v16 = -1970695548; goto LABEL_18; } break; case 2: memset(&v17, 0, 0x40u); v5 = sub_40A910(2057801379); strftime(&v17, 0x40u, v5, (const struct tm *)((char *)a2 + 7)); if ( v2 ) { sub_5E2390(*(_DWORD ***)(v2 + 868), (int)&v17); return 0; } break; case 3: if ( v2 ) { v16 = -352651715; goto LABEL_18; } break; case 4: v9 = *((_BYTE *)a2 + 43); if ( v9 ) { if ( v2 ) { v10 = *(_DWORD ***)(v2 + 868); v11 = v9; v12 = (char *)sub_40A910(-520225285); v13 = sub_7549E0(v12, v11); sub_5E2390(v10, (int)v13); return 0; } } break; } } else if ( v2 ) { v16 = 776245648; LABEL_18: v7 = *(_DWORD ***)(v2 + 868); v8 = sub_40A910(v16); sub_5E2390(v7, (int)v8); return 0; } } else { v14 = this + 2; v15 = sub_41A850(*a2); if ( v14[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v14[1] + 4))(25, v15, v14); if ( v14[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v14[1] + 20))(25, v15, v14); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v14)[5])(v14, 25, v15, v14); } return 0; } //----- (006D62D0) -------------------------------------------------------- int __userpurge sub_6D62D0@(int a1@, int a2@, int *a3) { int v3; // ebx int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx int v8; // eax int v9; // edx int v10; // ecx int v11; // eax int v12; // edx char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // edi char *v17; // eax char *v18; // edi char v20[4]; // [esp+8h] [ebp-34h] int v21; // [esp+Ch] [ebp-30h] int v22; // [esp+10h] [ebp-2Ch] int v23; // [esp+14h] [ebp-28h] int v24; // [esp+18h] [ebp-24h] char v25; // [esp+1Ch] [ebp-20h] char v26[4]; // [esp+20h] [ebp-1Ch] int v27; // [esp+24h] [ebp-18h] int v28; // [esp+28h] [ebp-14h] int v29; // [esp+2Ch] [ebp-10h] int v30; // [esp+30h] [ebp-Ch] char v31; // [esp+34h] [ebp-8h] v3 = a1; if ( !a3 ) return 0; v4 = a3[6]; v5 = a3[7]; *(_DWORD *)v26 = a3[5]; v6 = a3[8]; v27 = v4; v7 = a3[9]; v29 = v6; v8 = a3[1]; v28 = v5; v9 = *a3; v30 = v7; v10 = a3[2]; v21 = v8; v11 = a3[4]; *(_DWORD *)v20 = v9; v12 = a3[3]; v22 = v10; v24 = v11; v31 = 0; v23 = v12; v25 = 0; if ( !strcmp((const char *)(*(int (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 84))(a2), v20) ) { v13 = (char *)sub_40A910(-436868089); v14 = sub_7549E0(v13, v26); goto LABEL_10; } if ( a3[10] ) { v17 = (char *)sub_40A910(-1868322579); v14 = sub_7549E0(v17, v20, v26); LABEL_10: v18 = v14; if ( *(_DWORD *)(v3 + 12) ) { (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 4))(25, v14, v3 + 8); if ( *(_DWORD *)(v3 + 12) ) (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 20))(25, v18, v3 + 8); } (*(void (__thiscall **)(int, signed int, char *))(*(_DWORD *)(v3 + 8) + 20))(v3 + 8, 25, v18); return 0; } v15 = (char *)sub_40A910(1329432451); v16 = sub_7549E0(v15, v26, v20); if ( *(_DWORD *)(v3 + 12) ) { (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 4))(25, v16, v3 + 8); if ( *(_DWORD *)(v3 + 12) ) (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 20))(25, v16, v3 + 8); } (*(void (__thiscall **)(int, signed int, char *))(*(_DWORD *)(v3 + 8) + 20))(v3 + 8, 25, v16); return 0; } // 6D62D0: could not find valid save-restore pair for edi //----- (006D6460) -------------------------------------------------------- int __thiscall sub_6D6460(char *this, _DWORD *a2) { char *v2; // esi int v3; // edx int v4; // eax char *v5; // eax _DWORD **v6; // esi char *v7; // edi char v9[4]; // [esp+4h] [ebp-1Ch] int v10; // [esp+8h] [ebp-18h] int v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] char v14; // [esp+18h] [ebp-8h] v2 = this; if ( a2 ) { v3 = a2[1]; *(_DWORD *)v9 = *a2; v11 = a2[2]; v10 = v3; v4 = a2[4]; v12 = a2[3]; v13 = v4; v14 = 0; v5 = (char *)sub_40A910(-1853581672); v6 = (_DWORD **)(v2 + 8); v7 = sub_7549E0(v5, v9); if ( v6[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); } return 0; } //----- (006D6510) -------------------------------------------------------- int __thiscall sub_6D6510(char *this, int *a2) { char *v2; // esi int v3; // edx int v4; // ecx int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx char *v12; // eax _DWORD **v13; // esi char *v14; // edi char v16[4]; // [esp+4h] [ebp-34h] int v17; // [esp+8h] [ebp-30h] int v18; // [esp+Ch] [ebp-2Ch] int v19; // [esp+10h] [ebp-28h] int v20; // [esp+14h] [ebp-24h] char v21; // [esp+18h] [ebp-20h] int v22; // [esp+1Ch] [ebp-1Ch] int v23; // [esp+20h] [ebp-18h] int v24; // [esp+24h] [ebp-14h] int v25; // [esp+28h] [ebp-10h] int v26; // [esp+2Ch] [ebp-Ch] char v27; // [esp+30h] [ebp-8h] v2 = this; if ( a2 ) { v3 = a2[6]; *(_DWORD *)v16 = a2[5]; v4 = a2[7]; v17 = v3; v5 = a2[8]; v18 = v4; v6 = a2[9]; v19 = v5; v7 = *a2; v20 = v6; v8 = a2[1]; v22 = v7; v9 = a2[2]; v23 = v8; v10 = a2[3]; v24 = v9; v11 = a2[4]; v25 = v10; v21 = 0; v26 = v11; v27 = 0; v12 = (char *)sub_40A910(-586597561); v13 = (_DWORD **)(v2 + 8); v14 = sub_7549E0(v12, v16, &v22); if ( v13[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v13[1] + 4))(25, v14, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v13[1] + 20))(25, v14, v13); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v13)[5])(v13, 25, v14, v13); } return 0; } //----- (006D65E0) -------------------------------------------------------- signed int __thiscall sub_6D65E0(char *this, unsigned __int16 *a2) { char *v2; // esi int v3; // eax int v4; // ST08_4 char *v5; // eax _DWORD **v6; // esi char *v7; // edi v2 = this; v3 = sub_6DA1E0(*a2); if ( !v3 ) return 0; v4 = v3 + 34; v5 = (char *)sub_40A910(-446030769); v6 = (_DWORD **)(v2 + 8); v7 = sub_7549E0(v5, v4); if ( v6[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); return 1; } //----- (006D6660) -------------------------------------------------------- signed int __thiscall sub_6D6660(char *this, unsigned __int16 *a2) { char *v2; // esi int v3; // eax char v4; // cl char *v5; // eax _DWORD **v6; // esi char *v7; // edi int v9; // [esp-8h] [ebp-Ch] v2 = this; v3 = sub_6DA1E0(*a2); if ( v3 ) { v4 = *(_BYTE *)(v3 + 66); if ( v4 == 1 ) { v9 = v3 + 34; v5 = (char *)sub_40A910(1710344924); } else { if ( v4 != 2 ) return 1; v9 = v3 + 34; v5 = (char *)sub_40A910(-1376658999); } v6 = (_DWORD **)(v2 + 8); v7 = sub_7549E0(v5, v9); if ( v6[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); return 1; } return 0; } //----- (006D6700) -------------------------------------------------------- signed int __stdcall sub_6D6700(unsigned int *a1) { __int64 v1; // rdi unsigned int v2; // ebx unsigned int v3; // esi signed __int64 v4; // rax int v5; // eax char v6; // cl const char *v7; // edx unsigned int v8; // eax char *v9; // edi char v10; // cl char *v11; // edi char v12; // al signed __int64 v13; // rax unsigned int v14; // eax char *v15; // edi char v16; // cl const char *v17; // ecx unsigned int v18; // eax const char *v19; // esi char *v20; // edi char v21; // cl char *v22; // edi char v23; // al signed __int64 v24; // rax unsigned int v25; // eax char *v26; // edi char v27; // cl const char *v28; // ecx unsigned int v29; // eax const char *v30; // esi char *v31; // edi char v32; // cl char *v33; // edi char v34; // al signed __int64 v35; // rax unsigned int v36; // eax char *v37; // edi char v38; // cl const char *v39; // ecx unsigned int v40; // eax const char *v41; // esi char *v42; // edi char v43; // cl char *v44; // edi char v45; // al char *v46; // eax char *v47; // eax unsigned int v49; // [esp+10h] [ebp-208h] char v50[256]; // [esp+14h] [ebp-204h] char v51[256]; // [esp+113h] [ebp-105h] char v52[256]; // [esp+114h] [ebp-104h] HIDWORD(v1) = *a1; LODWORD(v1) = a1[1]; v2 = *a1; v49 = a1[1]; memset(v50, 0, 0x100u); memset(v52, 0, 0x100u); if ( v1 ) { v3 = v1; if ( sub_680E90(__PAIR__(v1, v2)) ) { v4 = sub_680E90(__PAIR__(v1, v2)); sprintf(v50, "%I64d", v4); v5 = 0; do { v6 = v50[v5]; v52[v5++] = v6; } while ( v6 ); v7 = sub_40C190(1197446809); v8 = strlen(v7) + 1; v9 = v51; do v10 = (v9++)[1]; while ( v10 ); qmemcpy(v9, v7, v8); v11 = v51; do v12 = (v11++)[1]; while ( v12 ); v3 = v49; *v11 = 0; } if ( sub_680EB0(__PAIR__(v3, v2)) ) { v13 = sub_680EB0(__PAIR__(v3, v2)); sprintf(v50, "%I64d", v13); v14 = strlen(v50) + 1; v15 = v51; do v16 = (v15++)[1]; while ( v16 ); qmemcpy(v15, v50, v14); v17 = sub_40C190(1201903011); v18 = strlen(v17) + 1; v19 = v17; v20 = v51; do v21 = (v20++)[1]; while ( v21 ); qmemcpy(v20, v19, v18); v22 = v51; do v23 = (v22++)[1]; while ( v23 ); v3 = v49; *v22 = 0; } if ( sub_680F00(__PAIR__(v3, v2)) ) { v24 = sub_680F00(__PAIR__(v3, v2)); sprintf(v50, "%I64d", v24); v25 = strlen(v50) + 1; v26 = v51; do v27 = (v26++)[1]; while ( v27 ); qmemcpy(v26, v50, v25); v28 = sub_40C190(-1732930065); v29 = strlen(v28) + 1; v30 = v28; v31 = v51; do v32 = (v31++)[1]; while ( v32 ); qmemcpy(v31, v30, v29); v33 = v51; do v34 = (v33++)[1]; while ( v34 ); v3 = v49; *v33 = 0; } if ( sub_680F60(__PAIR__(v3, v2)) ) { v35 = sub_680F60(__PAIR__(v3, v2)); sprintf(v50, "%I64d", v35); v36 = strlen(v50) + 1; v37 = v51; do v38 = (v37++)[1]; while ( v38 ); qmemcpy(v37, v50, v36); v39 = sub_40C190(-2001757707); v40 = strlen(v39) + 1; v41 = v39; v42 = v51; do v43 = (v42++)[1]; while ( v43 ); qmemcpy(v42, v41, v40); v44 = v51; do v45 = (v44++)[1]; while ( v45 ); *v44 = 0; } } v46 = (char *)sub_40A910(-788529682); v47 = sub_7549E0(v46, v52); sub_462CA0(1, v47); return 1; } // 6D6700: using guessed type char var_204[256]; // 6D6700: using guessed type char var_104[256]; //----- (006D6A70) -------------------------------------------------------- _DWORD *__thiscall sub_6D6A70(_DWORD **this, unsigned __int16 *a2) { _DWORD *result; // eax int v3; // eax _DWORD **v4; // esi const CHAR *v5; // edi _DWORD **v6; // esi const CHAR *v7; // edi _DWORD **v8; // esi const CHAR *v9; // edi _DWORD **v10; // esi const CHAR *v11; // edi result = a2; if ( a2 ) { v3 = *a2; if ( (_WORD)v3 == 14080 ) { result = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( result ) { sub_4A5F40(result, 1); LABEL_22: result = (_DWORD *)1; } } else { switch ( v3 ) { case 14081: v4 = this + 2; v5 = sub_4090F0(1940098523); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); result = (_DWORD *)1; break; case 14082: v6 = this + 2; v7 = sub_4090F0(-1058125271); if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); result = (_DWORD *)1; break; case 14083: v8 = this + 2; v9 = sub_4090F0(-1001449979); if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v9, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); result = (_DWORD *)1; break; case 14084: v10 = this + 2; v11 = sub_4090F0(1335994234); if ( v10[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v10[1] + 4))(25, v11, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v10[1] + 20))(25, v11, v10); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v10)[5])(v10, 25, v11, v10); result = (_DWORD *)1; break; default: goto LABEL_22; } } } return result; } //----- (006D6C30) -------------------------------------------------------- signed int __thiscall sub_6D6C30(char *this, unsigned __int16 *a2) { signed int result; // eax char *v3; // esi int v4; // eax const CHAR *v5; // eax int v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi result = (signed int)a2; v3 = this; if ( a2 ) { v4 = *a2; if ( (_WORD)v4 == 14080 ) { v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v6 || !*(_DWORD *)(v6 + 5172) ) return 0; sub_42AEA0(); v5 = sub_4090F0(1939927015); LABEL_12: v7 = (_DWORD **)(v3 + 8); v8 = v5; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v5, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); } else { switch ( v4 ) { case 14081: v5 = sub_4090F0(1940098523); goto LABEL_12; case 14082: v5 = sub_4090F0(-1058125271); goto LABEL_12; case 14083: v5 = sub_4090F0(-1001449979); goto LABEL_12; case 14084: v5 = sub_4090F0(1335994234); goto LABEL_12; default: break; } } result = 1; } return result; } //----- (006D6D10) -------------------------------------------------------- int __thiscall sub_6D6D10(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int v3; // ebx void *v4; // eax _DWORD *v5; // esi _DWORD *v6; // ST04_4 int result; // eax v1 = this; v2 = (_DWORD *)this[691]; if ( this[693] ) { v3 = this[693]; do { v4 = (void *)v2[2]; v2 = (_DWORD *)*v2; if ( v4 ) operator delete(v4); --v3; } while ( v3 ); } v5 = (_DWORD *)v1[691]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[690] + 8))(v1 + 690, v6); } result = 0; v1[693] = 0; v1[691] = 0; v1[692] = 0; return result; } //----- (006D6D80) -------------------------------------------------------- LONG __thiscall sub_6D6D80(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi v1 = this; *this = &GuildTask::`vftable'; this[2] = &GuildTask::`vftable'; this[16] = &GuildTask::`vftable'; v2 = this[750]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[750] = 0; } sub_6D6D10(v1 + 16); v3 = v1[750]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[749]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[745]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[744]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[743]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); sub_6DA230(v1 + 16); return sub_49FA00(v1); } // 9F92C4: using guessed type void *GuildTask::`vftable'; // 9F9318: using guessed type void *GuildTask::`vftable'; // 9F9334: using guessed type void *GuildTask::`vftable'; //----- (006D6F00) -------------------------------------------------------- int __thiscall sub_6D6F00(_DWORD **this, char *a2) { int result; // eax _DWORD **v3; // ebx int v4; // eax _DWORD **v5; // esi char *v6; // ecx int v7; // eax char *v8; // edx char v9; // cl char *v10; // ecx char *v11; // eax int v12; // edx char v13; // cl unsigned __int8 v14; // al char *v15; // eax char *v16; // eax char *v17; // edi char *v18; // eax char *v19; // edi char *v20; // edi char *v21; // eax char *v22; // edi char *v23; // eax char *v24; // edi char v25; // [esp+8h] [ebp-54h] int v26; // [esp+18h] [ebp-44h] int v27; // [esp+1Ch] [ebp-40h] int v28; // [esp+20h] [ebp-3Ch] int v29; // [esp+24h] [ebp-38h] int v30; // [esp+28h] [ebp-34h] int v31; // [esp+2Ch] [ebp-30h] int v32; // [esp+30h] [ebp-2Ch] int v33; // [esp+34h] [ebp-28h] char v34[4]; // [esp+38h] [ebp-24h] int v35; // [esp+3Ch] [ebp-20h] int v36; // [esp+40h] [ebp-1Ch] int v37; // [esp+44h] [ebp-18h] int v38; // [esp+48h] [ebp-14h] int v39; // [esp+4Ch] [ebp-10h] int v40; // [esp+50h] [ebp-Ch] int v41; // [esp+54h] [ebp-8h] result = 0; v3 = this; if ( !a2[3] ) { *(_DWORD *)v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v26 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = *(_DWORD ***)(v4 + 1148); sub_4B1B10((float *)&v25, 0); sub_5DE450(v5); } if ( dword_B9E164 ) v6 = (char *)(dword_B9E164 + 64); else v6 = 0; v7 = sub_6D36C0(v6, *((_DWORD *)a2 + 1)); if ( v7 ) { v8 = &v34[-v7]; do { v9 = *(_BYTE *)v7; v8[v7] = *(_BYTE *)v7; ++v7; } while ( v9 ); } if ( !*((_DWORD *)a2 + 2) ) { sub_6F36A0(&off_AB7F2C, 29, 126, 0, 0); v23 = (char *)sub_40C190(1600288165); v24 = sub_7549E0(v23, v34); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v24, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v24, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v24, v3 + 2); return 0; } if ( dword_B9E164 ) v10 = (char *)(dword_B9E164 + 64); else v10 = 0; v11 = (char *)sub_6D36C0(v10, *((_DWORD *)a2 + 2)); if ( v11 ) { v12 = (char *)&v26 - v11; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); } v14 = *a2; if ( (unsigned __int8)*a2 >= 8u ) { if ( v14 > 7u && v14 < 0x10u ) { v16 = (char *)sub_40C190(335305038); v17 = sub_7549E0(v16, v34, &v26); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v17, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v17, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v17, v3 + 2); goto LABEL_41; } if ( v14 <= 0xFu || v14 >= 0x18u ) { if ( v14 > 0x17u && v14 < 0x1Cu ) { v18 = (char *)sub_40C190(-674500048); v19 = sub_7549E0(v18, v34, &v26); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v19, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v19, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v19, v3 + 2); goto LABEL_41; } if ( v14 <= 0x1Bu || v14 >= 0x1Eu ) { LABEL_41: v21 = (char *)sub_40C190(-623043269); v22 = sub_7549E0(v21, v34, &v26); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v22, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v22, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v22, v3 + 2); sub_6F36A0(&off_AB7F2C, 29, 126, 0, 0); return 0; } v15 = (char *)sub_40C190(1719369604); } else { v15 = (char *)sub_40C190(472124271); } } else { v15 = (char *)sub_40C190(335239502); } v20 = sub_7549E0(v15, v34, &v26); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v20, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v20, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v20, v3 + 2); goto LABEL_41; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; // B9E164: using guessed type int dword_B9E164; //----- (006D7230) -------------------------------------------------------- signed int __thiscall sub_6D7230(int this, int a2) { int v2; // esi int v3; // eax _DWORD **v4; // edi const CHAR *v5; // ebx char v7; // [esp+4h] [ebp-10h] v2 = this; if ( !a2 ) return 0; *(_DWORD *)(this + 2908) = *(_DWORD *)a2; *(_WORD *)(this + 2912) = *(_WORD *)(a2 + 4); *(_DWORD *)(this + 2914) = *(_DWORD *)(a2 + 6); *(_DWORD *)(this + 2918) = *(_DWORD *)(a2 + 10); *(_DWORD *)(this + 2922) = *(_DWORD *)(a2 + 14); *(_DWORD *)(this + 2926) = *(_DWORD *)(a2 + 18); *(_DWORD *)(this + 2930) = *(_DWORD *)(a2 + 22); *(_DWORD *)(this + 2936) = *(_DWORD *)(a2 + 26); *(_WORD *)(this + 2940) = *(_WORD *)(a2 + 30); *(_DWORD *)(this + 2942) = *(_DWORD *)(a2 + 32); *(_DWORD *)(this + 2946) = *(_DWORD *)(a2 + 36); *(_DWORD *)(this + 2950) = *(_DWORD *)(a2 + 40); *(_DWORD *)(this + 2954) = *(_DWORD *)(a2 + 44); *(_DWORD *)(this + 2958) = *(_DWORD *)(a2 + 48); v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { v4 = *(_DWORD ***)(v3 + 1148); sub_4B1B10((float *)&v7, 0); sub_5DE450(v4); } v5 = sub_40A910(-1343223511); if ( *(_DWORD *)(v2 + 12) ) { (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v2 + 12) + 4))(46, v5, v2 + 8); if ( *(_DWORD *)(v2 + 12) ) (*(void (__stdcall **)(signed int, const CHAR *, int))(**(_DWORD **)(v2 + 12) + 20))(46, v5, v2 + 8); } (*(void (__thiscall **)(int, signed int, const CHAR *, int))(*(_DWORD *)(v2 + 8) + 20))(v2 + 8, 46, v5, v2 + 8); sub_5EF9F0(*(_DWORD ***)(v2 + 2868)); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 2868)); return 1; } //----- (006D7380) -------------------------------------------------------- int __thiscall sub_6D7380(_DWORD *this, int *a2) { _DWORD *v2; // edi int result; // eax char *v4; // ecx char *v5; // eax int v6; // edx char v7; // cl int v8; // eax int v9; // ecx _DWORD **v10; // edi int v11; // ecx int v12; // edx int v13; // eax int v14; // ecx int v15; // edx int v16; // eax int v17; // ecx int v18; // edx int v19; // eax int v20; // ecx char *v21; // eax int v22; // ecx int v23; // edx int v24; // eax int v25; // ecx int v26; // edx int v27; // eax int v28; // ecx char *v29; // edi char *v30; // [esp-Ch] [ebp-74h] char *v31; // [esp-4h] [ebp-6Ch] void *v32; // [esp+Ch] [ebp-5Ch] _DWORD **v33; // [esp+10h] [ebp-58h] int v34; // [esp+14h] [ebp-54h] int v35; // [esp+18h] [ebp-50h] int v36; // [esp+1Ch] [ebp-4Ch] int v37; // [esp+20h] [ebp-48h] int v38; // [esp+24h] [ebp-44h] int v39; // [esp+28h] [ebp-40h] int v40; // [esp+2Ch] [ebp-3Ch] int v41; // [esp+30h] [ebp-38h] int v42; // [esp+34h] [ebp-34h] int v43; // [esp+38h] [ebp-30h] int v44; // [esp+3Ch] [ebp-2Ch] int v45; // [esp+40h] [ebp-28h] int v46; // [esp+44h] [ebp-24h] char v47; // [esp+48h] [ebp-20h] char v48[4]; // [esp+4Ch] [ebp-1Ch] int v49; // [esp+50h] [ebp-18h] int v50; // [esp+54h] [ebp-14h] int v51; // [esp+58h] [ebp-10h] int v52; // [esp+5Ch] [ebp-Ch] char v53; // [esp+60h] [ebp-8h] v2 = this; result = 0; v33 = (_DWORD **)this; if ( a2 ) { v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; if ( dword_B9E164 ) v4 = (char *)(dword_B9E164 + 64); else v4 = 0; v5 = (char *)sub_6D36C0(v4, a2[10]); if ( v5 ) { v6 = (char *)&v34 - v5; do { v7 = *v5; v5[v6] = *v5; ++v5; } while ( v7 ); } v32 = (void *)sub_664630(dword_AD8C90, *a2, a2[1], a2[2], a2[3], a2[4]); if ( a2[10] ) { v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) { v9 = v2[742]; v10 = *(_DWORD ***)(v8 + 1148); if ( v9 == a2[10] ) sub_4B1B10((float *)&v49, 1u); else sub_4B1B10((float *)&v49, 0); sub_5DE450(v10); } v11 = *a2; v12 = a2[1]; v13 = a2[2]; v47 = 0; v53 = 0; if ( a2[11] ) { *(_DWORD *)v48 = v11; v22 = a2[3]; v49 = v12; v23 = a2[4]; v50 = v13; v24 = a2[5]; v51 = v22; v25 = a2[6]; v52 = v23; v26 = a2[7]; v42 = v24; v27 = a2[8]; v43 = v25; v28 = a2[9]; v44 = v26; v31 = (char *)&v42; v45 = v27; v46 = v28; v30 = v48; v21 = (char *)sub_40A910(542672007); } else { v42 = v11; v14 = a2[3]; v43 = v12; v15 = a2[4]; v44 = v13; v16 = a2[5]; v45 = v14; v17 = a2[6]; v46 = v15; v18 = a2[7]; *(_DWORD *)v48 = v16; v19 = a2[8]; v49 = v17; v20 = a2[9]; v50 = v18; v31 = v48; v51 = v19; v52 = v20; v30 = (char *)&v42; v21 = (char *)sub_40A910(341058918); } v29 = sub_7549E0(v21, v30, &v34, v31); if ( v33[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v33[3] + 4))(46, v29, v33 + 2); if ( v33[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v33[3] + 20))(46, v29, v33 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v33[2][5])(v33 + 2, 46, v29, v33 + 2); if ( v32 ) sub_65BA10(v32); } result = 0; } return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D7570) -------------------------------------------------------- int __thiscall sub_6D7570(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // ebx char *v4; // ecx int v5; // eax char *v6; // edx char v7; // cl int v8; // esi int v9; // eax _DWORD **v10; // edi char *v11; // eax char *v12; // edi char v13; // [esp+8h] [ebp-34h] char v14[4]; // [esp+18h] [ebp-24h] int v15; // [esp+1Ch] [ebp-20h] int v16; // [esp+20h] [ebp-1Ch] int v17; // [esp+24h] [ebp-18h] int v18; // [esp+28h] [ebp-14h] int v19; // [esp+2Ch] [ebp-10h] int v20; // [esp+30h] [ebp-Ch] int v21; // [esp+34h] [ebp-8h] result = 0; v3 = this; if ( a2 ) { *(_DWORD *)v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v21 = 0; if ( dword_B9E164 ) v4 = (char *)(dword_B9E164 + 64); else v4 = 0; v5 = sub_6D36C0(v4, *(_DWORD *)a2); if ( v5 ) { v6 = &v14[-v5]; do { v7 = *(_BYTE *)v5; v6[v5] = *(_BYTE *)v5; ++v5; } while ( v7 ); } v8 = sub_5ABC30(*(unsigned __int16 *)(a2 + 4)); if ( v8 ) { v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v9 ) { v10 = *(_DWORD ***)(v9 + 1148); sub_4B1B10((float *)&v13, 0x32u); sub_5DE450(v10); } v11 = (char *)sub_40A910(-1702322475); v12 = sub_7549E0(v11, v14, v8 + 40); if ( v3[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 4))(46, v12, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[3] + 20))(46, v12, v3 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v3[2][5])(v3 + 2, 46, v12, v3 + 2); } result = 0; } return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D7690) -------------------------------------------------------- int __userpurge sub_6D7690@(int a1@, int a2@, int a3) { int v3; // ebx int v4; // eax _DWORD **v5; // edi int v6; // eax float *v7; // eax char *v8; // ecx int v9; // eax char *v10; // edx char v11; // cl char *v12; // ecx int v13; // eax char *v14; // edx char v15; // cl int v16; // ST10_4 int v17; // ST0C_4 char *v18; // eax char *v19; // edi char *v20; // eax float *v21; // eax char *v22; // ecx int v23; // eax char *v24; // edx char v25; // cl char *v26; // ecx int v27; // eax char *v28; // edx char v29; // cl char *v30; // edi char *v31; // eax volatile LONG *v32; // eax char *v34; // [esp+0h] [ebp-70h] char *v35; // [esp+4h] [ebp-6Ch] int v36; // [esp+8h] [ebp-68h] int v37; // [esp+Ch] [ebp-64h] int v38; // [esp+Ch] [ebp-64h] char v39; // [esp+1Ch] [ebp-54h] float v40; // [esp+20h] [ebp-50h] float v41; // [esp+24h] [ebp-4Ch] float v42; // [esp+28h] [ebp-48h] char v43[4]; // [esp+2Ch] [ebp-44h] int v44; // [esp+30h] [ebp-40h] int v45; // [esp+34h] [ebp-3Ch] int v46; // [esp+38h] [ebp-38h] int v47; // [esp+3Ch] [ebp-34h] int v48; // [esp+40h] [ebp-30h] int v49; // [esp+44h] [ebp-2Ch] int v50; // [esp+48h] [ebp-28h] int v51; // [esp+4Ch] [ebp-24h] int v52; // [esp+50h] [ebp-20h] int v53; // [esp+54h] [ebp-1Ch] int v54; // [esp+58h] [ebp-18h] int v55; // [esp+5Ch] [ebp-14h] int v56; // [esp+60h] [ebp-10h] int v57; // [esp+64h] [ebp-Ch] int v58; // [esp+68h] [ebp-8h] v3 = a1; if ( a3 ) { v37 = a2; v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { v5 = *(_DWORD ***)(v4 + 1148); sub_4B1B10((float *)&v39, 0); sub_5DE450(v5); } sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 2868)); if ( (*(unsigned __int8 (__stdcall **)(int))(**(_DWORD **)(v3 + 2884) + 260))(v37) ) sub_8F86A0(&unk_BA6B10, *(_DWORD **)(v3 + 2884)); if ( *(_DWORD *)(v3 + 2880) ) sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 2880)); v6 = *((_DWORD *)dword_AD8EBC + 169); if ( v6 == *(_DWORD *)a3 ) { v7 = *(float **)(v3 + 2976); v40 = (double)((unsigned int)xRight >> 1); v41 = -500.0; v7[22] = v40; v42 = 0.0; v7[23] = -500.0; v7[24] = v42; sub_8FA270(&unk_BA6B10, flt_ACCFCC, *(_DWORD *)(v3 + 2976)); sub_6BA680(&dword_AB6520, (int)"GuildTWin"); *(_DWORD *)v43 = 0; v44 = 0; v45 = 0; v46 = 0; v47 = 0; v48 = 0; v49 = 0; v50 = 0; v51 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; v58 = 0; if ( dword_B9E164 ) v8 = (char *)(dword_B9E164 + 64); else v8 = 0; v9 = sub_6D36C0(v8, *(_DWORD *)(a3 + 8)); if ( v9 ) { v10 = &v43[-v9]; do { v11 = *(_BYTE *)v9; v10[v9] = *(_BYTE *)v9; ++v9; } while ( v11 ); } if ( dword_B9E164 ) v12 = (char *)(dword_B9E164 + 64); else v12 = 0; v13 = sub_6D36C0(v12, *(_DWORD *)(a3 + 14)); if ( v13 ) { v14 = (char *)&v51 - v13; do { v15 = *(_BYTE *)v13; v14[v13] = *(_BYTE *)v13; ++v13; } while ( v15 ); } if ( *((_DWORD *)dword_AD8EBC + 169) == *(_DWORD *)(a3 + 8) ) { v16 = *(unsigned __int16 *)(a3 + 18); v17 = *(unsigned __int16 *)(a3 + 12); v18 = (char *)sub_40A910(-486340803); v19 = sub_7549E0(v18, v43, &v51, v17, v16); if ( *(_DWORD *)(v3 + 12) ) { (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 4))(46, v19, v3 + 8); if ( *(_DWORD *)(v3 + 12) ) (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 20))(46, v19, v3 + 8); } (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)(v3 + 8) + 20))(v3 + 8, 46, v19, v3 + 8); goto LABEL_48; } v38 = *(unsigned __int16 *)(a3 + 12); v36 = *(unsigned __int16 *)(a3 + 18); v35 = v43; v34 = (char *)&v51; v20 = (char *)sub_40A910(-486340803); } else { if ( v6 != *(_DWORD *)(a3 + 4) ) { LABEL_48: v31 = (char *)sub_40A910(-2070550067); v32 = sub_462CA0(2, v31); (**((void (__cdecl ***)(int))v32 + 58))(v3 + 8); *(_BYTE *)(v3 + 2984) = 1; return 0; } v21 = *(float **)(v3 + 2980); v40 = (double)((unsigned int)xRight >> 1); v41 = -500.0; v21[22] = v40; v42 = 0.0; v21[23] = -500.0; v21[24] = v42; sub_8FA270(&unk_BA6B10, flt_ACCFCC, *(_DWORD *)(v3 + 2980)); sub_6BA680(&dword_AB6520, (int)"GuildTSLose"); v51 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; v58 = 0; *(_DWORD *)v43 = 0; v44 = 0; v45 = 0; v46 = 0; v47 = 0; v48 = 0; v49 = 0; v50 = 0; if ( dword_B9E164 ) v22 = (char *)(dword_B9E164 + 64); else v22 = 0; v23 = sub_6D36C0(v22, *(_DWORD *)(a3 + 8)); if ( v23 ) { v24 = (char *)&v51 - v23; do { v25 = *(_BYTE *)v23; v24[v23] = *(_BYTE *)v23; ++v23; } while ( v25 ); } if ( dword_B9E164 ) v26 = (char *)(dword_B9E164 + 64); else v26 = 0; v27 = sub_6D36C0(v26, *(_DWORD *)(a3 + 14)); if ( v27 ) { v28 = &v43[-v27]; do { v29 = *(_BYTE *)v27; v28[v27] = *(_BYTE *)v27; ++v27; } while ( v29 ); } if ( *((_DWORD *)dword_AD8EBC + 169) == *(_DWORD *)(a3 + 8) ) { v38 = *(unsigned __int16 *)(a3 + 18); v36 = *(unsigned __int16 *)(a3 + 12); v35 = v43; v34 = (char *)&v51; } else { v38 = *(unsigned __int16 *)(a3 + 12); v36 = *(unsigned __int16 *)(a3 + 18); v35 = (char *)&v51; v34 = v43; } v20 = (char *)sub_40A910(-485870514); } v30 = sub_7549E0(v20, v34, v35, v36, v38); if ( *(_DWORD *)(v3 + 12) ) { (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 4))(46, v30, v3 + 8); if ( *(_DWORD *)(v3 + 12) ) (*(void (__stdcall **)(signed int, char *, int))(**(_DWORD **)(v3 + 12) + 20))(46, v30, v3 + 8); } (*(void (__thiscall **)(int, signed int, char *, int))(*(_DWORD *)(v3 + 8) + 20))(v3 + 8, 46, v30, v3 + 8); goto LABEL_48; } return 0; } // 6D7690: could not find valid save-restore pair for edi // ACCFCC: using guessed type float flt_ACCFCC; // B9E164: using guessed type int dword_B9E164; //----- (006D7A90) -------------------------------------------------------- signed int __stdcall sub_6D7A90(int a1) { int v1; // edi int *v2; // eax int v3; // ST08_4 int v4; // ST0C_4 int v5; // ST10_4 int v6; // ST14_4 const CHAR *v7; // eax bool v9; // zf int v10; // edx int v11; // eax int v12; // ecx int *v13; // eax int v14; // ST08_4 int v15; // ST0C_4 int v16; // ST10_4 int v17; // ST14_4 char *v18; // eax char *v19; // eax char v20; // [esp+8h] [ebp-28h] char v21[4]; // [esp+18h] [ebp-18h] int v22; // [esp+1Ch] [ebp-14h] int v23; // [esp+20h] [ebp-10h] int v24; // [esp+24h] [ebp-Ch] char v25; // [esp+28h] [ebp-8h] if ( !a1 ) return 0; v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( *(_DWORD *)a1 == 1 ) { if ( v1 ) { v2 = (int *)sub_4B1B10((float *)&v20, 0x32u); v3 = *v2; v4 = v2[1]; v5 = v2[2]; v6 = v2[3]; v7 = sub_40A910(-2132421681); sub_492030(v1, v1, a1, (int)v7, v3, v4, v5, v6); } return 1; } if ( *(_DWORD *)a1 != 2 || !v1 ) return 0; v9 = *(_BYTE *)(a1 + 4) == 1; v10 = *(_DWORD *)(a1 + 9); v11 = *(_DWORD *)(a1 + 13); *(_DWORD *)v21 = *(_DWORD *)(a1 + 5); v12 = *(_DWORD *)(a1 + 17); v22 = v10; v23 = v11; v24 = v12; v25 = 0; if ( v9 ) { v13 = (int *)sub_4B1B10((float *)&v20, 0x32u); v14 = *v13; v15 = v13[1]; v16 = v13[2]; v17 = v13[3]; v18 = (char *)sub_40A910(-201248188); v19 = sub_7549E0(v18, v21); sub_492030(v1, v1, a1, (int)v19, v14, v15, v16, v17); } return 1; } //----- (006D7BD0) -------------------------------------------------------- int __thiscall sub_6D7BD0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // ecx int v5; // ebx _DWORD **v6; // edi int v7; // eax _DWORD *v8; // eax char *v9; // eax _DWORD **v10; // esi char *v11; // edi _DWORD *v13; // eax _DWORD *v14; // eax char *v15; // eax _DWORD *v16; // eax _DWORD **v17; // esi char *v18; // edi int v19; // [esp-4h] [ebp-20h] char v20; // [esp+Ch] [ebp-10h] int v21; // [esp+24h] [ebp+8h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( dword_B9E164 ) v4 = (char *)(dword_B9E164 + 64); else v4 = 0; v5 = a2; v21 = sub_6D36C0(v4, *(_DWORD *)(a2 + 1)); if ( v3 ) { v6 = *(_DWORD ***)(v3 + 1148); sub_4B1B10((float *)&v20, 0x32u); sub_5DE450(v6); } v7 = *(_DWORD *)(v5 + 1); if ( v7 != *((_DWORD *)dword_AD8EBC + 169) ) { if ( *(_BYTE *)v5 > 1u ) { if ( v2[742] == v7 ) { v14 = (_DWORD *)v2[747]; } else { if ( v2[741] != v7 ) { LABEL_32: v19 = v21; v15 = (char *)sub_40A910(556302468); goto LABEL_41; } v14 = (_DWORD *)v2[748]; } if ( v14 ) sub_8F82A0(&unk_BA6B10, v14); goto LABEL_32; } if ( v2[742] == v7 ) { v16 = (_DWORD *)v2[747]; } else { if ( v2[741] != v7 ) { LABEL_39: v19 = v21; goto LABEL_40; } v16 = (_DWORD *)v2[748]; } if ( v16 ) sub_8F86A0(&unk_BA6B10, v16); goto LABEL_39; } if ( *(_BYTE *)v5 > 1u ) { if ( v2[742] == v7 ) { v8 = (_DWORD *)v2[747]; } else { if ( v2[741] != v7 ) { LABEL_14: v9 = (char *)sub_40A910(556302468); v10 = (_DWORD **)(v2 + 2); v11 = sub_7549E0(v9, v21); if ( v10[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v10[1] + 4))(46, v11, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v10[1] + 20))(46, v11, v10); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v10)[5])(v10, 46, v11, v10); return 0; } v8 = (_DWORD *)v2[748]; } if ( v8 ) sub_8F82A0(&unk_BA6B10, v8); goto LABEL_14; } if ( v2[742] == v7 ) { v13 = (_DWORD *)v2[747]; goto LABEL_22; } if ( v2[741] == v7 ) { v13 = (_DWORD *)v2[748]; LABEL_22: if ( v13 ) sub_8F86A0(&unk_BA6B10, v13); } v19 = v21; LABEL_40: v15 = (char *)sub_40A910(606215730); LABEL_41: v17 = (_DWORD **)(v2 + 2); v18 = sub_7549E0(v15, v19); if ( v17[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v17[1] + 4))(46, v18, v17); if ( v17[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v17[1] + 20))(46, v18, v17); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v17)[5])(v17, 46, v18, v17); return 0; } // B9E164: using guessed type int dword_B9E164; //----- (006D7DE0) -------------------------------------------------------- signed int __thiscall sub_6D7DE0(_DWORD *this, unsigned __int16 *a2) { int v2; // eax _DWORD *v3; // ebx int v4; // eax int v5; // eax const CHAR *v6; // eax const CHAR *v7; // edi signed int result; // eax _DWORD *v9; // esi _DWORD *v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // ecx int v14; // [esp+14h] [ebp+8h] v2 = *a2; v3 = this; if ( (_WORD)v2 != 12672 ) { v4 = v2 - 12674; if ( !v4 ) { v6 = sub_40A910(796356721); goto LABEL_6; } v5 = v4 - 1; if ( !v5 ) { v6 = sub_40A910(-412124039); goto LABEL_6; } if ( v5 == 1 ) { v6 = sub_4090F0(57763735); LABEL_6: v7 = v6; if ( v3[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[3] + 4))(25, v6, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[3] + 20))(25, v7, v3 + 2); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v3[2] + 20))(v3 + 2, 25, v7, v3 + 2); } return 1; } sub_6D6D10(this + 16); v9 = 0; if ( !a2[2] ) return 1; v10 = a2 + 12; v14 = a2[2]; while ( 1 ) { v11 = operator new(0x20u); if ( v11 ) { v11[6] = 0; v11[5] = 0; v11[4] = 0; v11[3] = 0; v11[2] = 0; v9 = v11; } *v9 = *(v10 - 4); v9[1] = *(v10 - 3); v9[2] = *(v10 - 2); v9[3] = *(v10 - 1); v9[4] = *v10; v9[5] = v10[1]; v9[6] = v10[2]; v9[7] = v10[3]; v12 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[706] + 4))(v3 + 706); v12[2] = v9; *v12 = 0; v12[1] = v3[708]; v13 = (_DWORD *)v3[708]; if ( v13 ) *v13 = v12; else v3[707] = v12; v3[708] = v12; result = 1; ++v3[709]; v10 += 8; if ( !--v14 ) break; v9 = 0; } return result; } //----- (006D7F40) -------------------------------------------------------- signed int __stdcall sub_6D7F40(unsigned __int8 *a1) { int v2; // edi int *v3; // eax int v4; // ST0C_4 int v5; // ST10_4 int v6; // ST14_4 int v7; // ST18_4 int v8; // ST08_4 int v9; // ST04_4 char *v10; // eax char *v11; // eax char v12; // [esp+8h] [ebp-10h] if ( !a1 ) return 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v2 ) return 0; v3 = (int *)sub_4B1B10((float *)&v12, 0x32u); v4 = *v3; v5 = v3[1]; v6 = v3[2]; v7 = v3[3]; v8 = a1[1]; v9 = *a1; v10 = (char *)sub_4090F0(-923706344); v11 = sub_7549E0(v10, v9, v8); sub_492030(v2, v2, (int)a1, (int)v11, v4, v5, v6, v7); return 1; } //----- (006D7FD0) -------------------------------------------------------- char __thiscall sub_6D7FD0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // edi _DWORD *v7; // esi int *v8; // eax int v9; // eax v5 = this; if ( a2 != 29 || a3 != 119 ) return 0; v7 = a5; v8 = *sub_4DD710(this + 16, (int **)&a2, a5); if ( v8 != (int *)v5[17] ) { v9 = v8[4]; if ( !*(_DWORD *)(v9 + 16) ) { *(_DWORD *)v9 = v7[1]; *(_DWORD *)(v9 + 4) = v7[2]; *(_DWORD *)(v9 + 8) = v7[3]; *(_DWORD *)(v9 + 12) = v7[4]; *(_DWORD *)(v9 + 16) = 1; *(_WORD *)(v9 + 20) = *((_WORD *)v7 + 10); } } return 1; } //----- (006D8040) -------------------------------------------------------- LONG __fastcall sub_6D8040(_DWORD *a1) { int *v1; // eax int *v2; // esi int **v3; // eax int *j; // eax int *i; // eax int v6; // eax _BYTE *v7; // ebx int v8; // esi int *v9; // edi _DWORD *v10; // ST08_4 _DWORD *v11; // ST04_4 char v13; // [esp+10h] [ebp-18h] int v14; // [esp+14h] [ebp-14h] _DWORD *v15; // [esp+18h] [ebp-10h] int v16; // [esp+24h] [ebp-4h] v15 = a1; *a1 = &GuildNameCache::`vftable'; a1[2] = &GuildNameCache::`vftable'; v1 = (int *)a1[17]; v2 = (int *)*v1; v16 = 1; if ( v2 != v1 ) { do { if ( v2[4] ) { operator delete((void *)v2[4]); a1 = v15; } if ( !*((_BYTE *)v2 + 21) ) { v3 = (int **)v2[2]; if ( *((_BYTE *)v3 + 21) ) { for ( i = (int *)v2[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v2 != (int *)i[2] ) break; v2 = i; } v2 = i; } else { v2 = (int *)v2[2]; for ( j = *v3; !*((_BYTE *)j + 21); j = (int *)*j ) v2 = j; } } } while ( v2 != (int *)a1[17] ); } v6 = a1[17]; v7 = *(_BYTE **)(v6 + 4); v8 = (int)(a1 + 16); v9 = *(int **)(v6 + 4); if ( !v7[21] ) { do { sub_6DA320((void *)v9[2]); v9 = (int *)*v9; operator delete(v7); v7 = v9; } while ( !*((_BYTE *)v9 + 21) ); } *(_DWORD *)(*(_DWORD *)(v8 + 4) + 4) = *(_DWORD *)(v8 + 4); **(_DWORD **)(v8 + 4) = *(_DWORD *)(v8 + 4); *(_DWORD *)(*(_DWORD *)(v8 + 4) + 8) = *(_DWORD *)(v8 + 4); *(_DWORD *)(v8 + 8) = 0; v14 = v8; v10 = *(_DWORD **)(v8 + 4); v11 = **(_DWORD ***)(v8 + 4); LOBYTE(v16) = 2; sub_6CDE90((_DWORD *)v8, (int *)&v13, v11, v10); operator delete(*(void **)(v8 + 4)); v16 = -1; return sub_49FA00(v15); } // 9F934C: using guessed type void *GuildNameCache::`vftable'; // 9F9368: using guessed type void *GuildNameCache::`vftable'; //----- (006D8180) -------------------------------------------------------- signed int __stdcall sub_6D8180(unsigned __int16 *a1) { __int16 v1; // bx int v2; // edi _DWORD *v3; // esi _DWORD *v4; // eax char v6[2]; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] v1 = *a1; v2 = *(_DWORD *)(a1 + 1); a1 = (unsigned __int16 *)*a1; v3 = sub_6D14F0(); sub_4A3E20(v3, (int **)&v7, &a1); if ( v7 != v3[1] ) sub_6CDBF0(v3, (int *)&a1, v7); *(_WORD *)v6 = v1; v7 = v2; v4 = sub_67FF90(v3, v6); sub_6E19E0(v3, (int)v6, v4, 0); return 1; } //----- (006D81F0) -------------------------------------------------------- char *__thiscall sub_6D81F0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int *v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi int *v8; // eax int v9; // edx int v10; // edx int v11; // eax int v12; // [esp+8h] [ebp-1Ch] char v13[4]; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] char v17; // [esp+1Ch] [ebp-8h] v2 = this; v3 = this + 16; v4 = *sub_4DD710(this + 16, (int **)&v12, &a2); if ( v4 == (int *)v2[17] ) { v5 = operator new(0x18u); if ( v5 ) { v5[3] = 0; v5[2] = 0; v5[1] = 0; *v5 = 0; v6 = v5; } else { v6 = 0; } *(_DWORD *)sub_680000(v3, &a2) = v6; v6[4] = 0; *v6 = 0; v6[1] = 0; v6[2] = 0; v6[3] = 0; v12 = a2; sub_6F36A0(&off_AB7F2C, 29, 118, &v12, 4u); return 0; } v8 = (int *)v4[4]; if ( v8[4] != 1 ) return 0; v9 = *v8; v14 = v8[1]; *(_DWORD *)v13 = v9; v10 = v8[2]; v11 = v8[3]; v15 = v10; v16 = v11; v17 = 0; return sub_7549E0("%s", v13); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D82E0) -------------------------------------------------------- _DWORD *__thiscall sub_6D82E0(int this, char a2, _DWORD *a3) { _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *result; // eax _DWORD **v8; // eax _DWORD *v9; // ecx char v10; // [esp+8h] [ebp-4h] v3 = (_DWORD *)(this + 64); if ( *sub_4DD710((_DWORD *)(this + 64), (int **)&v10, &a2) == *(int **)(this + 68) ) { v4 = operator new(0x18u); v5 = 0; if ( v4 ) { v4[3] = 0; v4[2] = 0; v4[1] = 0; *v4 = 0; v5 = v4; } v6 = a3; v5[4] = 1; *v5 = *v6; v5[1] = v6[1]; v5[2] = v6[2]; v5[3] = v6[3]; result = (_DWORD *)sub_680000(v3, &a2); *result = v5; *((_WORD *)v5 + 10) = -1; } else { v8 = (_DWORD **)sub_680000(v3, &a2); v9 = a3; result = *v8; *result = *a3; result[1] = v9[1]; result[2] = v9[2]; result[3] = v9[3]; } return result; } //----- (006D8390) -------------------------------------------------------- int __thiscall sub_6D8390(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int *v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax int v8; // ecx int v10; // eax int v11; // [esp+8h] [ebp-4h] v2 = this; v3 = this + 16; v4 = *sub_4DD710(this + 16, (int **)&v11, &a2); if ( v4 == (int *)v2[17] ) { v5 = operator new(0x18u); if ( v5 ) { v5[3] = 0; v5[2] = 0; v5[1] = 0; *v5 = 0; v6 = v5; } else { v6 = 0; } v7 = (_DWORD *)sub_680000(v3, &a2); v8 = a2; *v7 = v6; v6[4] = 0; *v6 = 0; v6[1] = 0; v6[2] = 0; v6[3] = 0; *((_WORD *)v6 + 10) = -1; v11 = v8; sub_6F36A0(&off_AB7F2C, 29, 118, &v11, 4u); return 0; } v10 = v4[4]; if ( *(_DWORD *)(v10 + 16) != 1 ) return 0; return v10 + 20; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D8430) -------------------------------------------------------- char __thiscall sub_6D8430(int this, _WORD *a2, _WORD *a3) { _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // eax _WORD *v7; // edx int v8; // eax char v10; // [esp+8h] [ebp-4h] v3 = (_DWORD *)(this + 64); if ( *sub_4DD710((_DWORD *)(this + 64), (int **)&v10, &a2) == *(int **)(this + 68) ) { v4 = operator new(0x18u); if ( v4 ) { v4[3] = 0; v4[2] = 0; v4[1] = 0; *v4 = 0; v5 = v4; } else { v5 = 0; } v6 = (_DWORD *)sub_680000(v3, &a2); v7 = a2; *v6 = v5; v5[4] = 0; *v5 = 0; v5[1] = 0; v5[2] = 0; v5[3] = 0; *((_WORD *)v5 + 10) = -1; a3 = v7; LOBYTE(v8) = sub_6F36A0(&off_AB7F2C, 29, 118, &a3, 4u); } else { v8 = *(_DWORD *)sub_680000(v3, &a2); *(_WORD *)(v8 + 20) = *a3; } return v8; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006D84E0) -------------------------------------------------------- signed int __thiscall sub_6D84E0(int *this, _DWORD *a2) { int *v2; // ebx int v3; // ecx _DWORD *v4; // eax const CHAR *v5; // edi v2 = this; sub_6D82E0(this[750], *a2, a2 + 1); if ( dword_B9E164 ) v3 = dword_B9E164 + 64; else v3 = 0; if ( *(_DWORD *)(v3 + 12) == *a2 ) { if ( dword_B9E164 ) v4 = (_DWORD *)(dword_B9E164 + 64); else v4 = 0; v4[4] = a2[1]; v4[5] = a2[2]; v4[6] = a2[3]; v4[7] = a2[4]; } v5 = sub_40A910(-2133015104); if ( v2[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, int *))(*(_DWORD *)v2[3] + 4))(25, v5, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, const CHAR *, int *))(*(_DWORD *)v2[3] + 20))(25, v5, v2 + 2); } (*(void (__thiscall **)(int *, signed int, const CHAR *, int *))(v2[2] + 20))(v2 + 2, 25, v5, v2 + 2); return 1; } // B9E164: using guessed type int dword_B9E164; //----- (006D8590) -------------------------------------------------------- void ***__thiscall sub_6D8590(void ***this) { void ***v1; // esi void **v2; // edi void ***v3; // eax void ***v4; // eax void **v5; // edi void **v6; // edi void **v7; // edi void **v8; // edi void ***v10; // [esp+14h] [ebp-10h] v1 = this; sub_6C2E00(this, 0); sub_751F40(v1 + 16); v1[16] = &CClientGuild::`vftable'; unknown_libname_17(v1 + 498); sub_7514F0((int)(v1 + 501)); v1[709] = 0; v1[707] = 0; v1[708] = 0; v1[706] = &PgTList::`vftable'; *v1 = &GuildTask::`vftable'; v1[2] = &GuildTask::`vftable'; v1[16] = &GuildTask::`vftable'; v1[723] = 0; v1[724] = 0; v1[725] = 0; v1[726] = 0; *(void ***)((char *)v1 + 2930) = 0; *(void ***)((char *)v1 + 2926) = 0; *(void ***)((char *)v1 + 2922) = 0; *(void ***)((char *)v1 + 2918) = 0; *(void ***)((char *)v1 + 2914) = 0; *(void ***)((char *)v1 + 2958) = 0; *(void ***)((char *)v1 + 2954) = 0; *(void ***)((char *)v1 + 2950) = 0; *(void ***)((char *)v1 + 2946) = 0; *(void ***)((char *)v1 + 2942) = 0; v1[743] = 0; v1[744] = 0; v1[745] = 0; v1[749] = 0; v1[750] = 0; v2 = v1[749]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)v2 + 1) && v2 ) (*(void (__thiscall **)(void **, signed int))*v2)(v2, 1); v1[749] = 0; } v3 = (void ***)operator new(0x50u); if ( v3 ) { v4 = sub_6DA390(v3); v10 = v4; } else { v10 = 0; v4 = 0; } v5 = v1[750]; if ( v5 != (void **)v4 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)v5 + 1) && v5 ) (*(void (__thiscall **)(void **, signed int))*v5)(v5, 1); v4 = v10; } v1[750] = (void **)v4; if ( v4 ) InterlockedIncrement((volatile LONG *)v4 + 1); } v1[704] = 0; *((float *)v1 + 751) = 0.0; v1[705] = 0; v1[714] = 0; v1[715] = 0; v1[716] = 0; *((_WORD *)v1 + 1504) = 0; *((_BYTE *)v1 + 3010) = 0; v1[722] = (void **)-1; v1[727] = 0; *((_WORD *)v1 + 1456) = -1; v1[723] = 0; v1[724] = 0; v1[734] = 0; v1[725] = 0; v1[726] = 0; v1[741] = 0; v1[742] = 0; *((_WORD *)v1 + 1470) = -1; v1[700] = 0; v1[701] = 0; v1[702] = (void **)-1; v6 = v1[743]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) && v6 ) (*(void (__thiscall **)(void **, signed int))*v6)(v6, 1); v1[743] = 0; } v7 = v1[744]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)v7 + 1) && v7 ) (*(void (__thiscall **)(void **, signed int))*v7)(v7, 1); v1[744] = 0; } v8 = v1[745]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)v8 + 1) && v8 ) (*(void (__thiscall **)(void **, signed int))*v8)(v8, 1); v1[745] = 0; } *((_BYTE *)v1 + 2812) = 0; *((_BYTE *)v1 + 2984) = 0; return v1; } // 9F925C: using guessed type void *PgTList::`vftable'; // 9F926C: using guessed type void *CClientGuild::`vftable'; // 9F92C4: using guessed type void *GuildTask::`vftable'; // 9F9318: using guessed type void *GuildTask::`vftable'; // 9F9334: using guessed type void *GuildTask::`vftable'; //----- (006D8870) -------------------------------------------------------- int __cdecl sub_6D8870(int a1) { int v1; // eax void ***v2; // eax void ***v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_B9E164; if ( !dword_B9E164 ) { v2 = (void ***)operator new(0xBC8u); v3 = v2 ? sub_6D8590(v2) : 0; v1 = dword_B9E164; if ( (void ***)dword_B9E164 != v3 ) { if ( dword_B9E164 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E164; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E164 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = (int)v3; dword_B9E164 = (int)v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)v3 + 1); v1 = dword_B9E164; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // B9E164: using guessed type int dword_B9E164; //----- (006D8930) -------------------------------------------------------- signed int __thiscall sub_6D8930(_DWORD *this, unsigned __int16 *a2) { _DWORD *v2; // edi const CHAR *v3; // eax _DWORD **v4; // esi signed int v5; // eax char *v6; // eax signed int result; // eax char *v8; // eax char *v9; // ST0C_4 int v10; // eax _DWORD **v11; // esi int v12; // ecx int v13; // eax int v14; // ecx char *v15; // eax char *v16; // eax int v17; // eax const CHAR *v18; // [esp+Ch] [ebp-30h] char v19; // [esp+10h] [ebp-2Ch] char v20[4]; // [esp+24h] [ebp-18h] int v21; // [esp+28h] [ebp-14h] int v22; // [esp+2Ch] [ebp-10h] int v23; // [esp+30h] [ebp-Ch] char v24; // [esp+34h] [ebp-8h] v2 = this; this[694] = 0; if ( *a2 == 3272 ) { v3 = sub_40C190(-97904513); v4 = (_DWORD **)(v2 - 14); v18 = v3; if ( *(v2 - 13) ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*v4[1] + 4))(25, v3, v2 - 14); v3 = v18; if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*v4[1] + 20))(25, v18, v2 - 14); v3 = v18; } } ((void (__thiscall *)(_DWORD *, signed int, const CHAR *, _DWORD *))(*v4)[5])(v2 - 14, 25, v3, v2 - 14); } v5 = *a2; if ( v5 > 6696 ) { if ( (unsigned int)(v5 - 12677) > 1 ) goto LABEL_22; goto LABEL_20; } if ( v5 == 6696 ) { LABEL_20: v6 = (char *)sub_40C190(103959714); LABEL_21: sub_462C30(1, v6); goto LABEL_22; } switch ( v5 ) { case 3137: result = sub_751E90(v2, (int)a2); if ( !result ) return result; *((_DWORD *)dword_AD8EBC + 169) = v2[3]; sub_6D82E0(v2[734], v2[3], v2 + 4); v8 = (char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v9 = sub_416970(&v19, v8); v10 = sub_715490(); sub_750980(v10, v9); v11 = (_DWORD **)(v2 - 14); if ( *(v2 - 13) ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD *))(*v11[1] + 4))(71, 0, v2 - 14); if ( v11[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD *))(*v11[1] + 20))(71, 0, v2 - 14); } ((void (__thiscall *)(_DWORD *, signed int, _DWORD, _DWORD *))(*v11)[5])(v2 - 14, 71, 0, v2 - 14); nullsub_43(dword_AD8EBC); v12 = *(_DWORD *)(a2 + 3); v13 = *(_DWORD *)(a2 + 7); v21 = *(_DWORD *)(a2 + 5); *(_DWORD *)v20 = v12; v14 = *(_DWORD *)(a2 + 9); v22 = v13; v23 = v14; v24 = 0; v15 = (char *)sub_40C190(608115798); v16 = sub_7549E0(v15, v20); sub_462C30(1, v16); v17 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v17 ) sub_4A8140(v17, 99); break; case 3224: case 3227: case 3229: case 3230: case 3269: case 3270: goto LABEL_20; case 3225: v6 = (char *)sub_40C190(290388830); goto LABEL_21; case 3226: case 3268: v6 = (char *)sub_40C190(-1560220324); goto LABEL_21; case 3228: case 3267: v6 = (char *)sub_40C190(19721572); goto LABEL_21; case 3266: v6 = (char *)sub_40C190(-708785094); goto LABEL_21; default: break; } LABEL_22: sub_5DD440((_DWORD **)v2[695]); return 1; } // 715320: using guessed type int __cdecl nullsub_43(_DWORD); //----- (006D8C00) -------------------------------------------------------- signed int __thiscall sub_6D8C00(char *this, _WORD *a2) { char *v2; // esi signed int result; // eax v2 = this; result = sub_7514B0(this, a2); if ( result ) { *((_DWORD *)dword_AD8EBC + 169) = *((_DWORD *)v2 + 3); sub_6D82E0(*((_DWORD *)v2 + 734), *((_DWORD *)v2 + 3), (_DWORD *)v2 + 4); result = 1; } return result; } //----- (006D8C50) -------------------------------------------------------- char *__cdecl sub_6D8C50(int a1) { char *result; // eax result = (char *)dword_B9E164; if ( dword_B9E164 ) result = sub_6D81F0(*(_DWORD **)(dword_B9E164 + 3000), a1); return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D8C70) -------------------------------------------------------- int __cdecl sub_6D8C70(int a1) { int result; // eax result = dword_B9E164; if ( dword_B9E164 ) result = sub_6D8390(*(_DWORD **)(dword_B9E164 + 3000), a1); return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D8C90) -------------------------------------------------------- char __cdecl sub_6D8C90(_WORD *a1, _WORD *a2) { char result; // al result = dword_B9E164; if ( dword_B9E164 ) result = sub_6D8430(*(_DWORD *)(dword_B9E164 + 3000), a1, a2); return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D8CC0) -------------------------------------------------------- signed int __stdcall sub_6D8CC0(signed int a1) { signed int result; // eax result = a1; if ( a1 ) { if ( dword_B9E164 ) sub_6D8430(*(_DWORD *)(dword_B9E164 + 3000), *(_WORD **)a1, (_WORD *)(a1 + 4)); result = 1; } return result; } // B9E164: using guessed type int dword_B9E164; //----- (006D8D00) -------------------------------------------------------- char __thiscall sub_6D8D00(void *this, int a2, int a3, int a4, int a5) { int v5; // esi int v6; // ebx int v7; // eax _DWORD *v8; // eax int v9; // ecx _DWORD *v10; // eax char result; // al _DWORD **v12; // esi _DWORD *v13; // eax _DWORD *v14; // edi char *v15; // esi char *v16; // eax int *v17; // eax int v18; // ST00_4 int v19; // ST04_4 int v20; // ST08_4 int v21; // ST0C_4 int v22; // ST10_4 _DWORD *v23; // eax char v24; // al _DWORD **v25; // esi _DWORD **v26; // esi _DWORD **v27; // esi _DWORD **v28; // esi _DWORD **v29; // esi int v30; // ecx int v31; // eax int v32; // ecx char *v33; // eax char *v34; // edi _DWORD **v35; // esi int v36; // ecx int v37; // edx int v38; // eax char *v39; // eax char *v40; // edi _DWORD **v41; // esi int v42; // ecx int v43; // eax int v44; // edx int v45; // ecx char *v46; // eax char *v47; // ST20_4 char *v48; // ST0C_4 char *v49; // eax char *v50; // eax int v51; // [esp+Ch] [ebp-30h] char v52; // [esp+10h] [ebp-2Ch] char v53[4]; // [esp+24h] [ebp-18h] int v54; // [esp+28h] [ebp-14h] int v55; // [esp+2Ch] [ebp-10h] int v56; // [esp+30h] [ebp-Ch] char v57; // [esp+34h] [ebp-8h] v5 = (int)this; v51 = 0; v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); switch ( a2 ) { case 4: if ( a3 != 18 ) return 0; if ( !*(_DWORD *)a5 ) { *(_DWORD *)(v5 + 72) = 0; return 1; } *(_DWORD *)(v5 + 72) = 1; sub_6D9F10((char *)(v5 + 76), a5 + 4); *((_DWORD *)dword_AD8EBC + 169) = *(_DWORD *)(v5 + 76); sub_6D82E0(*(_DWORD *)(v5 + 3000), *(_DWORD *)(v5 + 76), (_DWORD *)(v5 + 80)); v12 = (_DWORD **)(v5 + 8); if ( v12[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 4))(41, 0, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 20))(41, 0, v12); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v12)[5])(v12, 41, 0, v12); dword_AD8EBC[680] = 0; v13 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v13) ) { nullsub_43(dword_AD8EBC); return 1; } v14 = (_DWORD *)dword_AD8CCC; if ( !dword_AD8CCC ) return 1; while ( 1 ) { v15 = (char *)v14[2]; v14 = (_DWORD *)*v14; if ( !v15 ) goto LABEL_143; if ( dword_AD8EBC == v15 ) goto LABEL_143; v51 |= 1u; v16 = (char *)(*(int (__thiscall **)(char *))(*(_DWORD *)v15 + 84))(v15); v17 = (int *)sub_416970(&v52, v16); v18 = *v17; v19 = v17[1]; v20 = v17[2]; v21 = v17[3]; v22 = v17[4]; v23 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715390(v23, v18, v19, v20, v21, v22) ) v24 = 1; else LABEL_143: v24 = 0; if ( v51 & 1 ) v51 &= 0xFFFFFFFE; if ( v24 ) break; if ( !v14 ) return 1; } nullsub_43(v15); return 1; case 12: if ( a3 != 39 ) return 0; sub_6D5E20((char *)v5, a5); return 1; case 15: if ( a3 != 12 ) return 0; sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); v7 = sub_7154A0(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 260))(v7) ) { v8 = (_DWORD *)sub_7154A0(); sub_8F86A0(&unk_BA6B10, v8); } if ( dword_B9E164 ) v9 = *(_DWORD *)(dword_B9E164 + 2844); else v9 = 0; if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v9 + 260))() ) { v10 = (_DWORD *)sub_6D3810(); sub_8F86A0(&unk_BA6B10, v10); } sub_8F82A0(&unk_BA6B10, *(_DWORD **)(dword_B9E164 + 2852)); return 1; case 29: switch ( a3 ) { case 6: (**(void (__thiscall ***)(int, int))(v5 + 64))(v5 + 64, a5); return 1; case 8: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 4))(v5 + 64, a5); return 1; case 17: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 8))(v5 + 64, a5); return 1; case 19: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 12))(v5 + 64, a5); return 1; case 21: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 16))(v5 + 64, a5); return 1; case 25: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 20))(v5 + 64, a5); return 1; case 31: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 24))(v5 + 64, a5); return 1; case 35: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 52))(v5 + 64, a5); return 1; case 37: sub_6D4C90((_DWORD *)v5, (unsigned __int16 *)a5); v26 = (_DWORD **)(v5 + 8); if ( v26[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v26[1] + 4))(51, 0, v26); if ( v26[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v26[1] + 20))(51, 0, v26); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v26)[5])(v26, 51, 0, v26); return 1; case 39: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 56))(v5 + 64, a5); v25 = (_DWORD **)(v5 + 8); if ( v25[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v25[1] + 4))(50, 0, v25); if ( v25[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v25[1] + 20))(50, 0, v25); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v25)[5])(v25, 50, 0, v25); return 1; case 43: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 36))(v5 + 64, a5); return 1; case 44: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 40))(v5 + 64, a5); return 1; case 45: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 44))(v5 + 64, a5); v28 = (_DWORD **)(v5 + 8); if ( v28[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v28[1] + 4))(41, 0, v28); if ( v28[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v28[1] + 20))(41, 0, v28); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v28)[5])(v28, 41, 0, v28); return 1; case 46: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 48))(v5 + 64, a5); return 1; case 47: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 28))(v5 + 64, a5); return 1; case 48: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 32))(v5 + 64, a5); v27 = (_DWORD **)(v5 + 8); *(_WORD *)(sub_6D1A90() + 4) = 0; if ( v27[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v27[1] + 4))(41, 0, v27); if ( v27[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v27[1] + 20))(41, 0, v27); ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v27)[5])(v27, 41, 0, v27); if ( v6 ) sub_5E23C0(*(_DWORD ***)(v6 + 868)); return 1; case 50: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 60))(v5 + 64, a5); *(float *)(v5 + 3004) = 0.0; v57 = 0; v42 = *(_DWORD *)(a5 + 4); v43 = *(_DWORD *)(a5 + 12); v54 = *(_DWORD *)(a5 + 8); v44 = *(_DWORD *)(a5 + 146); *(_DWORD *)v53 = v42; v45 = *(_DWORD *)(a5 + 16); v55 = v43; v56 = v45; if ( v44 == *(_DWORD *)(v5 + 76) ) v46 = (char *)sub_40C190(-1394816978); else v46 = (char *)sub_40C190(-1394865106); v47 = sub_7549E0(v46, v53); sub_431140((_DWORD **)(v5 + 8), 25, (int)v47, 0); sub_431140((_DWORD **)(v5 + 8), 46, (int)v47, 0); v48 = sub_5DF490(*(_DWORD *)(a5 + 22), 0); v49 = (char *)sub_40C190(223483002); v50 = sub_7549E0(v49, v48); sub_431140((_DWORD **)(v5 + 8), 25, (int)v50, 0); sub_7518B0((_DWORD *)(v5 + 1144), a5); if ( *(_DWORD *)(v5 + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 12) + 4))(50, 0, v5 + 8); if ( *(_DWORD *)(v5 + 12) ) (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(v5 + 12) + 20))(50, 0, v5 + 8); } (*(void (__thiscall **)(int, signed int, _DWORD, int))(*(_DWORD *)(v5 + 8) + 20))(v5 + 8, 50, 0, v5 + 8); return 1; case 51: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 64))(v5 + 64, a5); v29 = (_DWORD **)(v5 + 8); if ( v29[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v29[1] + 4))(50, 0, v29); if ( v29[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v29[1] + 20))(50, 0, v29); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v29)[5])(v29, 50, 0, v29); v30 = *(_DWORD *)a5; v31 = *(_DWORD *)(a5 + 8); v54 = *(_DWORD *)(a5 + 4); *(_DWORD *)v53 = v30; v32 = *(_DWORD *)(a5 + 12); v55 = v31; v56 = v32; v57 = 0; v33 = (char *)sub_40C190(1778306791); v34 = sub_7549E0(v33, v53); sub_431140(v29, 46, (int)v34, 0); sub_431140(v29, 25, (int)v34, 0); sub_6BA650(&dword_AB6520, 7); return 1; case 52: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 68))(v5 + 64, a5); *(float *)(v5 + 3004) = 0.0; v35 = (_DWORD **)(v5 + 8); if ( v35[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v35[1] + 4))(50, 0, v35); if ( v35[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v35[1] + 20))(50, 0, v35); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v35)[5])(v35, 50, 0, v35); v36 = *(_DWORD *)(a5 + 4); v37 = *(_DWORD *)(a5 + 8); *(_DWORD *)v53 = *(_DWORD *)a5; v38 = *(_DWORD *)(a5 + 12); v54 = v36; v55 = v37; v56 = v38; v57 = 0; sub_6BA650(&dword_AB6520, 8); if ( *(_BYTE *)(a5 + 32) ) { if ( *(_BYTE *)(a5 + 32) == 1 ) { v39 = (char *)sub_40C190(-1207779000); } else { if ( *(_BYTE *)(a5 + 32) != 2 ) return 1; v39 = (char *)sub_40C190(-1102960848); } } else { v39 = (char *)sub_40C190(-130210679); } v40 = sub_7549E0(v39, v53); sub_431140(v35, 25, (int)v40, 0); sub_431140(v35, 46, (int)v40, 0); result = 1; break; case 53: (*(void (__thiscall **)(int, int))(*(_DWORD *)(v5 + 64) + 72))(v5 + 64, a5); *(float *)(v5 + 3004) = 0.0; v41 = (_DWORD **)(v5 + 8); if ( v41[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v41[1] + 4))(50, 0, v41); if ( v41[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v41[1] + 20))(50, 0, v41); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v41)[5])(v41, 50, 0, v41); return 1; case 123: sub_6D4D70((char *)v5, a5); return 1; case 127: sub_6D3F10((_DWORD **)v5, a4, (unsigned __int16 *)a5); return 1; case 128: sub_6D3430((_DWORD ***)v5, (unsigned __int8 *)a5); return 1; case 131: sub_6D55C0((_DWORD *)v5, a5); return 1; case 132: sub_6D40D0(v5, a5); return 1; case 141: sub_6D8180((unsigned __int16 *)a5); return 1; case 144: sub_6D6F00((_DWORD **)v5, (char *)a5); return 1; case 148: sub_6D5710((_DWORD **)v5, a5); return 1; case 155: sub_6D5FC0((_BYTE *)v5, a5); return 1; case 157: sub_6D6000((char *)v5, (unsigned __int16 *)a5); return 1; case 173: sub_6D41E0((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 174: sub_6D84E0((int *)v5, (_DWORD *)a5); return 1; case 181: sub_6D6080((char *)v5, (_WORD *)a5); return 1; case 182: sub_6D4250((_DWORD **)v5, a5); return 1; case 191: sub_6D4570(v5, (unsigned __int16 *)a5); return 1; case 194: sub_6D47D0(v5, a5); return 1; case 196: sub_6D6100((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 203: sub_6D4500((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 204: sub_6D4610(v5, v6, a5, (unsigned __int16 *)a5); return 1; case 205: sub_6D7380((_DWORD *)v5, (int *)a5); return 1; case 206: sub_6D3490(v5, (unsigned __int16 *)a5); return 1; case 208: sub_6D42D0((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 209: sub_6D7570((_DWORD **)v5, a5); return 1; case 210: sub_6D7230(v5, a5); return 1; case 212: sub_6D4350((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 213: sub_6D43C0((_DWORD *)v5, (_DWORD *)a5); return 1; case 214: sub_6D3660((_BYTE **)v5, (_DWORD *)a5); return 1; case 216: sub_6D4440((char *)v5, (unsigned __int16 *)a5); return 1; case 220: sub_6D46D0((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 221: sub_6D3500(v5, v6, a5); return 1; case 222: sub_6D62D0(v5, a5, (int *)a5); return 1; case 223: sub_6D6510((char *)v5, (int *)a5); return 1; case 224: sub_6D4740((int *)v5, (_DWORD *)a5); return 1; case 225: sub_6D6460((char *)v5, (_DWORD *)a5); return 1; case 226: sub_6D7690(v5, a5, a5); return 1; case 234: sub_6D4870((_DWORD *)v5, (unsigned __int16 *)a5); return 1; case 237: sub_6D7A90(a5); return 1; case 240: sub_6D65E0((char *)v5, (unsigned __int16 *)a5); return 1; case 241: sub_6D6660((char *)v5, (unsigned __int16 *)a5); return 1; case 242: sub_6D7BD0((_DWORD *)v5, a5); return 1; case 243: sub_6D49D0((_WORD *)a5); return 1; case 248: sub_6D6700((unsigned int *)a5); return 1; case 254: sub_6D7DE0((_DWORD *)v5, (unsigned __int16 *)a5); return 1; case 258: sub_6D6A70((_DWORD **)v5, (unsigned __int16 *)a5); return 1; case 262: sub_6D6C30((char *)v5, (unsigned __int16 *)a5); return 1; case 265: sub_6D7F40((unsigned __int8 *)a5); return 1; case 266: sub_6D4A50(a5); return 1; case 267: sub_6D8CC0(a5); return 1; default: return 0; } return result; default: return 0; } } // 715320: using guessed type int __cdecl nullsub_43(_DWORD); // AB7F2C: using guessed type void **off_AB7F2C; // AD8CCC: using guessed type int dword_AD8CCC; // B9E164: using guessed type int dword_B9E164; //----- (006D9DD0) -------------------------------------------------------- void *__thiscall sub_6D9DD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,GUILD_HISTORY *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; //----- (006D9E00) -------------------------------------------------------- int __thiscall sub_6D9E00(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; *this = &NiTPointerListBase,GUILD_HISTORY *>::`vftable'; for ( i = (_DWORD *)this[1]; i; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = i; i = (_DWORD *)*i; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,GUILD_HISTORY *>::`vftable'; return result; } // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; // 9F924C: using guessed type void *NiTPointerListBase,GUILD_HISTORY *>::`vftable'; //----- (006D9E80) -------------------------------------------------------- _DWORD *__thiscall sub_6D9E80(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,GUILD_HISTORY *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GUILD_HISTORY *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; // 9F924C: using guessed type void *NiTPointerListBase,GUILD_HISTORY *>::`vftable'; //----- (006D9F10) -------------------------------------------------------- char *__thiscall sub_6D9F10(char *this, int a2) { char *result; // eax _BYTE *v3; // esi int v4; // ebx signed int v5; // edi _BYTE *v6; // ecx signed int v7; // esi result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); *((_DWORD *)this + 5) = *(_DWORD *)(a2 + 20); *((_DWORD *)this + 6) = *(_DWORD *)(a2 + 24); this[28] = *(_BYTE *)(a2 + 28); this[29] = *(_BYTE *)(a2 + 29); *(_DWORD *)(this + 30) = *(_DWORD *)(a2 + 30); *((_WORD *)this + 17) = *(_WORD *)(a2 + 34); *((_DWORD *)this + 9) = *(_DWORD *)(a2 + 36); *((_DWORD *)this + 10) = *(_DWORD *)(a2 + 40); *((_DWORD *)this + 11) = *(_DWORD *)(a2 + 44); qmemcpy(this + 48, (const void *)(a2 + 48), 0x35u); qmemcpy(this + 101, (const void *)(a2 + 101), 0x24u); qmemcpy(this + 137, (const void *)(a2 + 137), 0x24u); qmemcpy(this + 173, (const void *)(a2 + 173), 0x39u); qmemcpy(this + 230, (const void *)(a2 + 230), 0x2Au); qmemcpy(this + 272, (const void *)(a2 + 272), 0x3Bu); qmemcpy(this + 331, (const void *)(a2 + 331), 0x24u); v3 = this + 367; v4 = a2 - (_DWORD)this; v5 = 128; do { *v3 = v3[v4]; ++v3; --v5; } while ( v5 ); *(_DWORD *)(this + 495) = *(_DWORD *)(a2 + 495); qmemcpy(this + 499, (const void *)(a2 + 499), 0x38u); v6 = this + 555; v7 = 512; do { *v6 = v6[v4]; ++v6; --v7; } while ( v7 ); return result; } //----- (006DA130) -------------------------------------------------------- int sub_6DA130() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9B0 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9B0: using guessed type int dword_ACD9B0; //----- (006DA150) -------------------------------------------------------- _DWORD *__thiscall sub_6DA150(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &PgTList::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GUILD_HISTORY *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; // 9F925C: using guessed type void *PgTList::`vftable'; //----- (006DA1E0) -------------------------------------------------------- int __cdecl sub_6DA1E0(int a1) { unsigned int v1; // esi v1 = 0; if ( !sub_6DA130() ) return 0; while ( *(unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACD9B0 + 4), v1) != a1 ) { if ( ++v1 >= sub_6DA130() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD9B0 + 4), v1); } // ACD9B0: using guessed type int dword_ACD9B0; //----- (006DA230) -------------------------------------------------------- void __thiscall sub_6DA230(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // ebx _DWORD *v4; // ST00_4 v1 = this; v2 = this + 690; this[690] = &PgTList::`vftable'; v3 = (_DWORD *)this[691]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GUILD_HISTORY *>::`vftable'; v1[666] = 0; v1[667] = 0; v1[668] = 0; v1[669] = 0; v1[670] = 0; v1[671] = 0; v1[672] = 0; v1[673] = 0; v1[674] = 0; v1[675] = 1; sub_750D20((int)(v1 + 485)); sub_751F30(v1 + 482); sub_752040(v1); } // 751F30: using guessed type int __thiscall sub_751F30(_DWORD); // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; // 9F925C: using guessed type void *PgTList::`vftable'; //----- (006DA320) -------------------------------------------------------- void __stdcall sub_6DA320(void *a1) { void *v1; // edi void **v2; // esi v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 21) ) { do { sub_6DA320(v2[2]); v2 = (void **)*v2; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 21) ); } } //----- (006DA360) -------------------------------------------------------- void *__thiscall sub_6DA360(void *this, char a2) { void *v2; // esi v2 = this; sub_6D6D80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006DA390) -------------------------------------------------------- void ***__thiscall sub_6DA390(void ***this) { void ***v1; // esi void **v2; // eax void **v4; // [esp+8h] [ebp-20h] void ***v5; // [esp+14h] [ebp-14h] char *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v1 = this; v5 = this; sub_6C2E00(this, 0); *v1 = &GuildNameCache::`vftable'; v1[2] = &GuildNameCache::`vftable'; v7 = 0; v1[18] = 0; v2 = (void **)operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[17] = v2; *v2 = v2; v1[17][1] = v1[17]; v1[17][2] = v1[17]; *((_BYTE *)v1[17] + 20) = 1; *((_BYTE *)v1[17] + 21) = 1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F934C: using guessed type void *GuildNameCache::`vftable'; // 9F9368: using guessed type void *GuildNameCache::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006DA450) -------------------------------------------------------- void *__thiscall sub_6DA450(void *this, char a2) { void *v2; // esi v2 = this; sub_6D8040(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006DA480) -------------------------------------------------------- int __thiscall sub_6DA480(_DWORD *this, int a2, int a3) { int v3; // edx void (__thiscall ***v5)(_DWORD, signed int); // esi v3 = a2; if ( !a2 ) return a2 + 4; if ( a3 ) { if ( a3 == 1 ) { sub_8332F0(this, a2); } else { if ( a3 != 2 ) goto LABEL_10; sub_833220(this, a2); } } else { sub_833360(this, a2); } v3 = a2; LABEL_10: if ( v3 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } return 1; } //----- (006DA530) -------------------------------------------------------- signed int __thiscall sub_6DA530(_DWORD *this, _DWORD *a2) { if ( !a2 ) return 2; sub_833600(this, a2, (_DWORD *)1, -1, 1); dword_B9E1B0 = 0; dword_B9E1B4 = 0; dword_B9E1B8 = 0; memset(&dword_B9E170, 0, 0x40u); return 1; } // B9E170: using guessed type int dword_B9E170; // B9E1B0: using guessed type int dword_B9E1B0; // B9E1B4: using guessed type int dword_B9E1B4; // B9E1B8: using guessed type int dword_B9E1B8; //----- (006DA590) -------------------------------------------------------- int __thiscall sub_6DA590(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi v3 = this; if ( dword_B9E168 ) { dword_B9E168 = 0; dword_B9E1B0 = 0; dword_B9E1B4 = 0; dword_B9E1B8 = 0; memset(&dword_B9E170, 0, 0x40u); } sub_833490(v3, a2); return dword_B9E168; } // B9E168: using guessed type int dword_B9E168; // B9E170: using guessed type int dword_B9E170; // B9E1B0: using guessed type int dword_B9E1B0; // B9E1B4: using guessed type int dword_B9E1B4; // B9E1B8: using guessed type int dword_B9E1B8; //----- (006DA5E0) -------------------------------------------------------- int __cdecl sub_6DA5E0(int a1, _DWORD *a2, int a3, int a4) { int v4; // eax void *v5; // ecx const char *v6; // eax unsigned __int8 *v7; // eax char v8; // bl void *v9; // ecx const char *v10; // eax unsigned __int8 *v11; // eax const char *v12; // ecx const char *v13; // ecx void *v14; // ecx const char *v15; // eax unsigned __int8 *v16; // eax char v17; // bl unsigned __int8 *v18; // eax unsigned __int8 *v19; // ecx char v21; // [esp+17h] [ebp-81h] char v22; // [esp+17h] [ebp-81h] void *v23; // [esp+18h] [ebp-80h] int v24; // [esp+28h] [ebp-70h] unsigned int v25; // [esp+2Ch] [ebp-6Ch] void *v26; // [esp+34h] [ebp-64h] unsigned int v27; // [esp+44h] [ebp-54h] unsigned int v28; // [esp+48h] [ebp-50h] void *v29; // [esp+50h] [ebp-48h] unsigned int v30; // [esp+60h] [ebp-38h] unsigned int v31; // [esp+64h] [ebp-34h] void *v32; // [esp+6Ch] [ebp-2Ch] unsigned int v33; // [esp+7Ch] [ebp-1Ch] unsigned int v34; // [esp+80h] [ebp-18h] int v35; // [esp+94h] [ebp-4h] if ( a1 == 1 ) { if ( dword_B9E168 < 2 ) { dword_B9E168 = 1; return dword_B9E168; } dword_B9E168 = 3; v14 = *(void **)(*a2 + 8); v15 = *(const char **)(*a2 + 8); v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_4018E0(&v26, v14, strlen(v15)); v16 = (unsigned __int8 *)dword_AB7954; v35 = 0; v17 = 1; if ( (unsigned int)dword_AB7968 < 0x10 ) v16 = (unsigned __int8 *)&dword_AB7954; if ( !sub_40C2F0((unsigned __int8 *)&v26, 0, v27, v16, dword_AB7964) ) goto LABEL_55; v18 = (unsigned __int8 *)sub_4019E0(&v23, *(void **)(a2[1] + 8)); v19 = (unsigned __int8 *)dword_AB7954; v17 = 3; v35 = 1; if ( (unsigned int)dword_AB7968 < 0x10 ) v19 = (unsigned __int8 *)&dword_AB7954; v22 = 0; if ( !sub_40C2F0(v18, 0, *((_DWORD *)v18 + 4), v19, dword_AB7964) ) LABEL_55: v22 = 1; if ( v17 & 2 ) { v17 &= 0xFDu; if ( v25 >= 0x10 ) operator delete(v23); v25 = 15; v24 = 0; LOBYTE(v23) = 0; } if ( v17 & 1 && v28 >= 0x10 ) operator delete(v26); if ( !v22 ) goto LABEL_31; goto LABEL_29; } if ( a1 != 2 ) { dword_B9E168 = a1; return dword_B9E168; } v4 = dword_B9E168; if ( dword_B9E168 == 1 || (dword_B9E168 = 2, v4 == 3) ) dword_B9E168 = 3; v5 = *(void **)(*a2 + 8); v6 = *(const char **)(*a2 + 8); v31 = 15; v30 = 0; LOBYTE(v29) = 0; sub_4018E0(&v29, v5, strlen(v6)); v7 = (unsigned __int8 *)dword_AB7954; v8 = 4; v35 = 2; if ( (unsigned int)dword_AB7968 < 0x10 ) v7 = (unsigned __int8 *)&dword_AB7954; if ( !sub_40C2F0((unsigned __int8 *)&v29, 0, v30, v7, dword_AB7964) ) goto LABEL_56; v9 = *(void **)(a2[1] + 8); v10 = *(const char **)(a2[1] + 8); v34 = 15; v33 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, v9, strlen(v10)); v11 = (unsigned __int8 *)dword_AB7954; v8 = 12; v35 = 3; if ( (unsigned int)dword_AB7968 < 0x10 ) v11 = (unsigned __int8 *)&dword_AB7954; v21 = 0; if ( !sub_40C2F0((unsigned __int8 *)&v32, 0, v33, v11, dword_AB7964) ) LABEL_56: v21 = 1; if ( v8 & 8 ) { v8 &= 0xF7u; if ( v34 >= 0x10 ) operator delete(v32); v34 = 15; v33 = 0; LOBYTE(v32) = 0; } if ( v8 & 4 ) { if ( v31 >= 0x10 ) operator delete(v29); v31 = 15; v30 = 0; LOBYTE(v29) = 0; } if ( v21 ) { v12 = dword_AB7938; if ( (unsigned int)dword_AB794C < 0x10 ) v12 = (const char *)&dword_AB7938; if ( !strncmp(*(const char **)(a2[2] + 8), v12, dword_AB7948) ) goto LABEL_57; v13 = dword_AB7938; if ( (unsigned int)dword_AB794C < 0x10 ) v13 = (const char *)&dword_AB7938; if ( !strncmp(*(const char **)(a2[3] + 8), v13, dword_AB7948) ) { LABEL_57: dword_B9E1B8 = 1; dword_B9E1B4 = 1; return dword_B9E168; } LABEL_29: qmemcpy(&dword_B9E170, a2, 0x40u); if ( a3 != 2 ) dword_B9E1B4 = a3; } LABEL_31: if ( a4 != 2 ) dword_B9E1B0 = a4; return dword_B9E168; } // AB794C: using guessed type int dword_AB794C; // AB7964: using guessed type int dword_AB7964; // AB7968: using guessed type int dword_AB7968; // B9E168: using guessed type int dword_B9E168; // B9E170: using guessed type int dword_B9E170; // B9E1B0: using guessed type int dword_B9E1B0; // B9E1B4: using guessed type int dword_B9E1B4; // B9E1B8: using guessed type int dword_B9E1B8; //----- (006DA9A0) -------------------------------------------------------- int __cdecl sub_6DA9A0(int *a1) { int v1; // esi int v2; // edi const char *v3; // eax const char *v4; // ecx _DWORD *v5; // eax bool v6; // bl _DWORD *v7; // eax bool v8; // bl _DWORD *v9; // eax bool v10; // bl _DWORD *v11; // eax bool v12; // bl _DWORD *v13; // eax char v14; // bl _DWORD *v15; // eax _DWORD *v16; // eax char v17; // bl _DWORD *v18; // eax char v20; // [esp+1Bh] [ebp-81h] char v21; // [esp+1Bh] [ebp-81h] char v22; // [esp+1Bh] [ebp-81h] char v23; // [esp+1Ch] [ebp-80h] char v24; // [esp+38h] [ebp-64h] char v25; // [esp+54h] [ebp-48h] char v26; // [esp+70h] [ebp-2Ch] int v27; // [esp+98h] [ebp-4h] v1 = *a1; v2 = a1[1]; v20 = 0; if ( *a1 ) { if ( v2 ) { v3 = *(const char **)(v1 + 8); if ( v3 ) { v4 = *(const char **)(v2 + 8); if ( v4 ) { if ( strcmp(v3, v4) ) { v5 = sub_4019E0(&v26, *(void **)(v1 + 8)); v27 = 0; v6 = sub_425160((int)v5, (int)&dword_AB7954); v27 = -1; sub_636A10(&v26); if ( v6 ) { v7 = sub_4019E0(&v26, *(void **)(v2 + 8)); v27 = 1; v8 = sub_4B1EE0((int)v7, (int)&dword_AB7970); v27 = -1; sub_636A10(&v26); if ( v8 ) sub_6DA5E0(2, a1, 1, 2); v20 = 1; } v9 = sub_4019E0(&v26, *(void **)(v1 + 8)); v27 = 2; v10 = sub_425160((int)v9, (int)&dword_AB7970); v27 = -1; sub_636A10(&v26); if ( v10 ) { v11 = sub_4019E0(&v26, *(void **)(v2 + 8)); v27 = 3; v12 = sub_4B1EE0((int)v11, (int)&dword_AB7954); v27 = -1; sub_636A10(&v26); if ( v12 ) sub_6DA5E0(2, a1, 2, 1); } else if ( v20 != 1 ) { v13 = sub_4019E0(&v25, *(void **)(v1 + 8)); v14 = 1; v27 = 4; if ( (unsigned __int8)sub_425160((int)v13, (int)&dword_AB7954) || (v15 = sub_4019E0(&v26, *(void **)(v2 + 8)), v14 = 3, v27 = 5, v21 = 0, (unsigned __int8)sub_425160((int)v15, (int)&dword_AB7954)) ) { v21 = 1; } if ( v14 & 2 ) { v14 &= 0xFDu; sub_636A10(&v26); } v27 = -1; if ( v14 & 1 ) { v14 &= 0xFEu; sub_636A10(&v25); } if ( v21 ) { sub_6DA5E0(2, a1, 1, 2); } else { v16 = sub_4019E0(&v24, *(void **)(v1 + 8)); v17 = v14 | 4; v27 = 6; if ( (unsigned __int8)sub_425160((int)v16, (int)&dword_AB7970) || (v18 = sub_4019E0(&v23, *(void **)(v2 + 8)), v17 |= 8u, v27 = 7, v22 = 0, (unsigned __int8)sub_425160((int)v18, (int)&dword_AB7970)) ) { v22 = 1; } if ( v17 & 8 ) { v17 &= 0xF7u; sub_636A10(&v23); } v27 = -1; if ( v17 & 4 ) sub_636A10(&v24); if ( v22 ) sub_6DA5E0(2, a1, 2, 1); else sub_6DA5E0(1, a1, 2, 2); } } } } } } } return 0; } //----- (006DACE0) -------------------------------------------------------- signed int __thiscall sub_6DACE0(_DWORD *this, int a2, int a3) { signed int result; // eax int v4; // eax bool v5; // zf int v6; // ecx int v7; // eax unsigned int v8; // edi int v9; // eax int v10; // ecx int v11; // eax void *v12; // ecx int v13; // eax int v14; // ecx int v15; // eax int v16; // ecx int v17; // ecx _DWORD *v18; // eax signed int v19; // [esp+18h] [ebp-34h] _DWORD *v20; // [esp+1Ch] [ebp-30h] void *v21; // [esp+20h] [ebp-2Ch] int v22; // [esp+30h] [ebp-1Ch] unsigned int v23; // [esp+34h] [ebp-18h] int v24; // [esp+48h] [ebp-4h] v20 = this; if ( !a2 ) return 4; v23 = 15; v22 = 0; LOBYTE(v21) = 0; sub_4017F0((const void **)&v21, (const void **)&dword_AB791C, 0, (void *)0xFFFFFFFF); v4 = *(_DWORD *)(a2 + 64); v5 = *(_BYTE *)(v4 + 12) == 0; v24 = 0; if ( v5 || (v6 = *(_DWORD *)(v4 + 8)) == 0 ) v7 = *(_DWORD *)(v4 + 4); else v7 = *(_DWORD *)(v6 + 12); v19 = sub_6E5370(v7, (const void **)&v21); if ( v19 < 0 ) { LABEL_28: if ( v23 >= 0x10 ) operator delete(v21); result = 1; } else { v8 = 0; while ( 1 ) { sub_6E52A0(&v21, v8, 3); v9 = *(_DWORD *)(a2 + 64); if ( *(_BYTE *)(v9 + 12) && (v10 = *(_DWORD *)(v9 + 8)) != 0 ) v11 = *(_DWORD *)(v10 + 12); else v11 = *(_DWORD *)(v9 + 4); v12 = v21; if ( v23 < 0x10 ) v12 = &v21; v13 = (*(int (__thiscall **)(int, void *))(*(_DWORD *)v11 + 72))(v11, v12); if ( !v13 ) break; v14 = *(_DWORD *)(v13 + 172); if ( !v14 ) { if ( v23 >= 0x10 ) operator delete(v21); return 11; } *(_DWORD *)(v14 + 56) = sub_6DA9A0; sub_85BED0((_DWORD **)v13, 0.0, 1); v15 = *(_DWORD *)(a2 + 64); if ( a3 == 1 ) { if ( *(_BYTE *)(v15 + 12) && (v16 = *(_DWORD *)(v15 + 8)) != 0 ) sub_833600(v20, *(_DWORD **)(v16 + 12), 0, -1, 1); else sub_833600(v20, *(_DWORD **)(v15 + 4), 0, -1, 1); } else { if ( *(_BYTE *)(v15 + 12) && (v17 = *(_DWORD *)(v15 + 8)) != 0 ) v18 = *(_DWORD **)(v17 + 12); else v18 = *(_DWORD **)(v15 + 4); sub_833620(v20, v18, 0, -1, 1); } sub_6E5210(&v21, 3); if ( v19 < (signed int)++v8 ) goto LABEL_28; } if ( v23 >= 0x10 ) operator delete(v21); result = 10; } return result; } //----- (006DAED0) -------------------------------------------------------- signed int __thiscall sub_6DAED0(_DWORD *this, int a2, int a3) { int v4; // eax bool v5; // zf int v6; // ecx int v7; // eax signed int v8; // esi int v9; // esi int v10; // eax int v11; // ecx int v12; // eax int v13; // ecx int v14; // eax int v15; // ecx int v16; // eax _DWORD *v17; // [esp+10h] [ebp-30h] void *v18; // [esp+14h] [ebp-2Ch] int v19; // [esp+24h] [ebp-1Ch] unsigned int v20; // [esp+28h] [ebp-18h] int v21; // [esp+3Ch] [ebp-4h] v17 = this; if ( !a2 ) return 4; v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4017F0((const void **)&v18, (const void **)&dword_AB791C, 0, (void *)0xFFFFFFFF); v4 = *(_DWORD *)(a2 + 64); v5 = *(_BYTE *)(v4 + 12) == 0; v21 = 0; if ( v5 || (v6 = *(_DWORD *)(v4 + 8)) == 0 ) v7 = *(_DWORD *)(v4 + 4); else v7 = *(_DWORD *)(v6 + 12); v8 = sub_6E5370(v7, (const void **)&v18); v21 = -1; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v8 >= 0 ) { v9 = v8 + 1; do { if ( a3 ) { if ( a3 == 1 ) { v12 = *(_DWORD *)(a2 + 64); if ( *(_BYTE *)(v12 + 12) && (v13 = *(_DWORD *)(v12 + 8)) != 0 ) sub_8332F0(v17, *(_DWORD *)(v13 + 12)); else sub_8332F0(v17, *(_DWORD *)(v12 + 4)); } else if ( a3 == 2 ) { v10 = *(_DWORD *)(a2 + 64); if ( *(_BYTE *)(v10 + 12) && (v11 = *(_DWORD *)(v10 + 8)) != 0 ) sub_833220(v17, *(_DWORD *)(v11 + 12)); else sub_833220(v17, *(_DWORD *)(v10 + 4)); } } else { v14 = *(_DWORD *)(a2 + 64); if ( *(_BYTE *)(v14 + 12) && (v15 = *(_DWORD *)(v14 + 8)) != 0 ) v16 = *(_DWORD *)(v15 + 12); else v16 = *(_DWORD *)(v14 + 4); sub_833360(v17, v16); } --v9; } while ( v9 ); } return 1; } //----- (006DB040) -------------------------------------------------------- signed int __thiscall sub_6DB040(_DWORD *this, volatile LONG *a2, _DWORD *a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // eax signed int result; // eax int v8; // ecx v4 = this; if ( !a2 ) return 2; v5 = a3; if ( a3[5] >= 0x10u ) v5 = (_DWORD *)*a3; v6 = (*(int (__stdcall **)(_DWORD *))(*a2 + 72))(v5); if ( !v6 ) { if ( a2 && !InterlockedDecrement(a2 + 1) ) { if ( a2 ) (**(void (__thiscall ***)(volatile LONG *, signed int))a2)(a2, 1); } return 2; } v8 = *(_DWORD *)(v6 + 172); if ( v8 ) { *(_DWORD *)(v8 + 56) = sub_6DA9A0; sub_85BED0((_DWORD **)v6, 0.0, 1); if ( a4 == 1 ) sub_833600(v4, a2, 0, -1, 1); else sub_833620(v4, a2, 0, -1, 1); if ( a2 && !InterlockedDecrement(a2 + 1) && a2 ) (**(void (__thiscall ***)(volatile LONG *, signed int))a2)(a2, 1); result = 1; } else { if ( a2 && !InterlockedDecrement(a2 + 1) && a2 ) (**(void (__thiscall ***)(volatile LONG *, signed int))a2)(a2, 1); result = 11; } return result; } //----- (006DB2D0) -------------------------------------------------------- int __stdcall sub_6DB2D0(int a1, __time32_t Time) { int result; // eax __time32_t v3; // esi __time32_t v4; // eax int v5; // esi char v6; // [esp+0h] [ebp-B4h] unsigned int v7; // [esp+19h] [ebp-9Bh] struct tm v8; // [esp+68h] [ebp-4Ch] struct tm Tm; // [esp+8Ch] [ebp-28h] result = a1; if ( a1 ) { qmemcpy(&v6, (const void *)(a1 + 8), 0x67u); if ( (unsigned __int8)v7 == 255 ) { result = 100000; } else if ( (_BYTE)v7 ) { Tm.tm_min = v7 >> 25; Tm.tm_hour = (v7 >> 19) & 0x3F; Tm.tm_mon = ((v7 >> 8) & 0x1F) - 1; Tm.tm_sec = 0; Tm.tm_mday = (v7 >> 13) & 0x3F; Tm.tm_year = (unsigned __int8)v7 + 100; Tm.tm_isdst = 0; qmemcpy(&v8, _localtime32(&Time), sizeof(v8)); v3 = _mktime32(&Tm); if ( v3 != -1 && (!v8.tm_sec ? (v4 = Time) : (v8.tm_sec = 0, v4 = _mktime32(&v8)), v3 > v4 && (v5 = v3 - v4, v5 > 0)) ) { result = v5 / 3600; } else { result = 0; } } else { result = 200000; } } return result; } //----- (006DB490) -------------------------------------------------------- signed int __thiscall sub_6DB490(_DWORD *this, __int16 a2, int a3, __int16 a4, __int16 a5, int a6, int a7) { signed int result; // eax result = sub_6E2400(this + 8, a2); if ( result ) { sub_6E1B10(result, a4, a5); result = 1; } return result; } //----- (006DB4C0) -------------------------------------------------------- char __thiscall sub_6DB4C0(_DWORD *this) { char result; // al result = (char)this; if ( this[24] ) result = sub_6E1180(this[36]); return result; } //----- (006DB510) -------------------------------------------------------- signed int __thiscall sub_6DB510(_DWORD *this) { int v1; // eax signed int result; // eax v1 = sub_6E2D00(this + 8, this[41]); if ( v1 ) result = *(_DWORD *)(v1 + 4); else result = -1; return result; } //----- (006DB5A0) -------------------------------------------------------- int __thiscall sub_6DB5A0(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // esi int v4; // eax result = a2; if ( a2 ) { v3 = this + 8; v4 = sub_6E25A0(a2); result = sub_6E2D00(v3, v4); } return result; } //----- (006DB5D0) -------------------------------------------------------- char __thiscall sub_6DB5D0(_DWORD *this, int a2, float *a3) { _DWORD *v3; // edi int v4; // ecx char *v5; // eax int v6; // ecx char *v7; // eax int v8; // ecx char *v9; // eax char result; // al int v11; // ecx float v12; // ST10_4 float v13; // ST14_4 float v14; // ST18_4 char *v15; // eax int v16; // ecx char *v17; // eax int v18; // ecx char *v19; // eax int v20; // ecx int v21; // [esp+10h] [ebp-4h] v3 = this; v4 = this[24]; v5 = sub_6E11B0(); sub_65B8B0(v5, 0, (unsigned int *)&v21, 0); v6 = v3[24]; v7 = sub_6E11B0(); if ( sub_65B9D0(v7, 200000) || (v8 = v3[24], v9 = sub_6E11B0(), (result = sub_662E50((_DWORD *)v9 + 424)) != 0) || v21 == 100000 ) { v11 = v3[24]; v12 = *(float *)a2 - *a3; v13 = *(float *)(a2 + 4) - a3[1]; v14 = *(float *)(a2 + 8) - a3[2]; *(float *)a2 = *(float *)a2 + v12; *(float *)(a2 + 4) = *(float *)(a2 + 4) + v13; *(float *)(a2 + 8) = *(float *)(a2 + 8) + v14; v15 = sub_6E11B0(); sub_67B690(v15, 1); v16 = v3[24]; v17 = sub_6E11B0(); sub_67B590((int)v17, (_DWORD *)a2); v18 = v3[24]; v19 = sub_6E11B0(); sub_67D830((int)v19); v20 = v3[24]; result = sub_6E1250(); } return result; } //----- (006DB6E0) -------------------------------------------------------- #error "6DB7C8: positive sp value has been found (funcsize=93)" //----- (006DB7D0) -------------------------------------------------------- char __thiscall sub_6DB7D0(int this) { char result; // al result = *(_BYTE *)(this + 248); if ( result == 1 ) result = *(_DWORD *)(this + 252) != -1; return result; } //----- (006DB7F0) -------------------------------------------------------- char __thiscall sub_6DB7F0(int this, __int16 a2, char a3, int a4) { int v4; // esi char v6; // bl _DWORD *v7; // eax __int16 v8; // ax v4 = this; if ( a2 != -1 ) { v6 = a3; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) { if ( *(_WORD *)(v4 + 432) != a2 ) { v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); LABEL_10: sub_4BEB20(v7); goto LABEL_11; } if ( *(_BYTE *)(v4 + 436) != a3 ) { v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); goto LABEL_10; } } LABEL_11: v8 = *(_WORD *)(v4 + 432); *(_BYTE *)(v4 + 437) = *(_BYTE *)(v4 + 436); *(_WORD *)(v4 + 434) = v8; goto LABEL_12; } if ( *(_WORD *)(this + 432) == -1 ) return 0; v6 = a3; *(_BYTE *)(this + 437) = a3; *(_WORD *)(this + 434) = -1; LABEL_12: *(_WORD *)(v4 + 432) = a2; *(_BYTE *)(v4 + 436) = v6; *(_DWORD *)(v4 + 440) = a4; return 1; } //----- (006DB8B0) -------------------------------------------------------- int __thiscall sub_6DB8B0(_DWORD *this, int a2, unsigned __int16 a3, __int16 a4) { int result; // eax _DWORD *v5; // esi char *v6; // eax result = sub_6E2400(this + 8, a4); v5 = (_DWORD *)result; if ( result ) { v6 = sub_7549E0("Add---Object seats %d. char=%d. ActPos = %d\n", *(_DWORD *)(result + 4), a3, (unsigned __int8)a2); OutputDebugStringA(v6); result = sub_6E2C40(v5, a2, a3); } return result; } //----- (006DB900) -------------------------------------------------------- void __thiscall sub_6DB900(_DWORD *this, __int16 a2) { _DWORD *v2; // eax v2 = (_DWORD *)sub_6E24B0(this + 8, a2); if ( v2 ) sub_6E20B0(v2, a2); } //----- (006DB930) -------------------------------------------------------- void __stdcall sub_6DB930(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // eax unsigned int v5; // esi _DWORD *v6; // ebx int v7; // eax v2 = a1; if ( a1 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA455C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v5 = 0; if ( v2[48] ) { v6 = a2; do { if ( v2[47] > v5 ) v7 = *(_DWORD *)(v2[45] + 4 * v5); else v7 = 0; sub_6DB930(v7, v6); ++v5; } while ( v5 < v2[48] ); } } else { LABEL_5: v4 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v4 ) { while ( (char *)v4 != dword_BA4840 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return; } a1 = v2; sub_6B9900(a2, &a1); } } } } //----- (006DB9E0) -------------------------------------------------------- int __userpurge sub_6DB9E0@(int a1@, int a2@, int a3) { int v3; // edi int v4; // ebx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // eax int v12; // edx int v13; // eax int v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi v3 = a3; v4 = a1; if ( !a3 ) return a3 + 8; v6 = *(_DWORD *)(a3 + 64); v7 = *(_DWORD *)(a1 + 156); if ( *(_BYTE *)(v6 + 12) && (v8 = *(_DWORD *)(v6 + 8)) != 0 ) v9 = *(_DWORD *)(v8 + 12); else v9 = *(_DWORD *)(v6 + 4); (*(void (__stdcall **)(int *, int, int))(*(_DWORD *)v7 + 120))(&a3, v9, a2); if ( a3 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v11 = *(_DWORD *)(v3 + 64); if ( *(_BYTE *)(v11 + 12) && (v12 = *(_DWORD *)(v11 + 8)) != 0 ) v13 = *(_DWORD *)(v12 + 12); else v14 = *(_DWORD *)(v11 + 4); (*(void (__stdcall **)(int *))(**(_DWORD **)(v4 + 160) + 120))(&a3); if ( a3 ) { v15 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v15 ) (**v15)(v15, 1); } } sub_85BED0(*(_DWORD ***)(v4 + 156), 0.0, 1); sub_85BED0(*(_DWORD ***)(v4 + 160), 0.0, 1); return 1; } //----- (006DBAD0) -------------------------------------------------------- signed int __thiscall sub_6DBAD0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v7; // edx float v8; // ST1C_4 _DWORD *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi float v11; // [esp+1Ch] [ebp-10h] v4 = this; v5 = this[41]; if ( !v5 ) return 2; v7 = *(_DWORD *)(v5 + 92); v11 = *(float *)(v5 + 96); if ( a4 == 5 ) { *(_DWORD *)(v5 + 88) = *(_DWORD *)(v5 + 88); *(_DWORD *)(v5 + 92) = v7; v8 = v11 + 10.0; *(float *)(v5 + 96) = v8; sub_85BED0((_DWORD **)this[41], 0.0, 1); } v9 = sub_69C790(v4, &a4); sub_85BED0((_DWORD **)*v9, 0.0, 1); if ( a4 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))a4; if ( !InterlockedDecrement((volatile LONG *)(a4 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } return 1; } //----- (006DBBC0) -------------------------------------------------------- signed int __thiscall sub_6DBBC0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx long double v6; // st7 long double v7; // st7 float *v8; // eax _DWORD **v9; // ecx void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // [esp+18h] [ebp-84h] float v12; // [esp+1Ch] [ebp-80h] char v13; // [esp+20h] [ebp-7Ch] char v14; // [esp+44h] [ebp-58h] char v15; // [esp+68h] [ebp-34h] int v16; // [esp+98h] [ebp-4h] v4 = this; if ( !this[41] ) return 2; v12 = (double)(this[42] - a2); sub_85D510((float *)&v15); sub_85D510((float *)&v13); v6 = v12; if ( v12 <= 0.0 ) { v12 = fabs(v6); v7 = -(v12 / 40.0); } else { v7 = v6 / 40.0; } v12 = v7; v4[42] = a2; v4[43] = a3; if ( !a4 ) { sub_85D810((float *)&v15, v12); v8 = sub_85D940((float *)(v4[41] + 52), (float *)&v14, (float *)&v15); qmemcpy(&v15, v8, 0x24u); qmemcpy((void *)(v4[41] + 52), v8, 0x24u); v9 = (_DWORD **)*sub_69C790(v4, &v11); v16 = 0; sub_85BED0(v9, 0.0, 1); v16 = -1; if ( v11 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } } return 1; } //----- (006DBD30) -------------------------------------------------------- signed int __thiscall sub_6DBD30(int this, int a2, char a3) { int v3; // esi int v4; // eax int v5; // eax int v6; // ecx int v7; // eax v3 = this; sub_6E2990((_DWORD *)(this + 32), a2, *(_DWORD **)(this + 156)); if ( a3 == 1 ) { v4 = sub_6E2400((_DWORD *)(v3 + 32), a2); sub_6DACE0((_DWORD *)(v3 + 48), v4, 0); } v5 = *(_DWORD *)(sub_6E2400((_DWORD *)(v3 + 32), a2) + 64); if ( *(_BYTE *)(v5 + 12) && (v6 = *(_DWORD *)(v5 + 8)) != 0 ) v7 = *(_DWORD *)(v6 + 12); else v7 = *(_DWORD *)(v5 + 4); *(_WORD *)(v7 + 28) &= 0xFFFEu; sub_85BED0(*(_DWORD ***)(v3 + 156), 0.0, 1); sub_85C6F0(*(_DWORD **)(v3 + 156)); sub_85C4D0(*(_DWORD **)(v3 + 156)); return 1; } //----- (006DBDD0) -------------------------------------------------------- _DWORD *__thiscall sub_6DBDD0(void *this) { int v1; // esi int v2; // edi _DWORD *result; // eax int v4; // edi v1 = (int)this; sub_6C29C0(57, (int)this); sub_6C29C0(58, v1); sub_6C29C0(61, v1); sub_6C29C0(65, v1); sub_6C29C0(66, v1); sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v1 + 256)); v2 = *(_DWORD *)(v1 + 256); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(v1 + 256) = 0; } result = sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v1 + 400)); v4 = *(_DWORD *)(v1 + 400); if ( v4 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } *(_DWORD *)(v1 + 400) = 0; } return result; } //----- (006DBEB0) -------------------------------------------------------- signed int __thiscall sub_6DBEB0(_DWORD *this, volatile LONG *a2) { volatile LONG *v2; // esi void **v4; // eax volatile LONG v5; // edx int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // edi int v8; // [esp-8h] [ebp-20h] int v9; // [esp-4h] [ebp-1Ch] int *v10; // [esp+Ch] [ebp-Ch] _DWORD *v11; // [esp+10h] [ebp-8h] int v12; // [esp+14h] [ebp-4h] signed int v13; // [esp+20h] [ebp+8h] v2 = a2; v11 = this; if ( !a2 ) return 0; v13 = 2; do { v4 = (void **)dword_AB7AD8; if ( (unsigned int)dword_AB7AEC < 0x10 ) v4 = &dword_AB7AD8; v5 = *v2; v9 = (int)v4; v6 = (*(int (__thiscall **)(volatile LONG *, void **))(v5 + 72))(v2, v4); if ( v6 ) { (*(void (__thiscall **)(volatile LONG *, int *, int))(*v2 + 120))(v2, &v12, v6); if ( v12 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } v9 = 2; v8 = (int)v2; v10 = &v8; InterlockedIncrement(v2 + 1); sub_6DA480(v11 + 12, v8, v9); } --v13; } while ( v13 ); return 1; } // AB7AEC: using guessed type int dword_AB7AEC; //----- (006DBF60) -------------------------------------------------------- signed int __thiscall sub_6DBF60(_DWORD *this) { _DWORD *v1; // esi int v2; // eax const char *v3; // ecx const char *v5; // eax v1 = this; v2 = this[41]; if ( v2 ) { if ( this[36] == 3 ) { if ( !dword_B9E178 ) return 1; v3 = dword_AB7A4C; if ( (unsigned int)dword_AB7A60 < 0x10 ) v3 = (const char *)&dword_AB7A4C; if ( !strncmp(*(const char **)(dword_B9E178 + 8), v3, dword_AB7A5C) ) return 0; v5 = dword_AB7A4C; if ( (unsigned int)dword_AB7A60 < 0x10 ) v5 = (const char *)&dword_AB7A4C; if ( !strncmp(*(const char **)(dword_B9E17C + 8), v5, dword_AB7A5C) ) return 1; } else if ( dword_B9E170 ) { if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_B9E170 + 72))(*(_DWORD *)(v2 + 8)) && *(_DWORD *)(v1[41] + 8) ) return 0; if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_B9E174 + 72))(*(_DWORD *)(v1[41] + 8)) && *(_DWORD *)(v1[41] + 8) ) { return 1; } } } return -1; } // AB7A60: using guessed type int dword_AB7A60; // B9E170: using guessed type int dword_B9E170; // B9E174: using guessed type int dword_B9E174; // B9E178: using guessed type int dword_B9E178; // B9E17C: using guessed type int dword_B9E17C; //----- (006DC040) -------------------------------------------------------- int __stdcall sub_6DC040(int a1, __time32_t Time) { signed int v3; // ebx int v4; // edi int v5; // esi int v6; // edx int v7; // eax int v8; // eax _WORD *v9; // eax signed int v10; // eax float v11; // [esp+Ch] [ebp+8h] if ( !a1 ) return 0; v3 = sub_6DB2D0(a1, Time); if ( v3 == 100000 ) return 100; v4 = *(unsigned __int16 *)(a1 + 8); v5 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) return 0; if ( (unsigned __int16)v4 > *(_WORD *)(v5 + 200) ) return 0; v6 = *(_DWORD *)(v5 + 196); if ( !*(_DWORD *)(v6 + 4 * v4) ) return 0; v7 = *(_DWORD *)(v6 + 4 * v4); if ( !v7 ) return 0; v8 = sub_4A3DB0((unsigned __int8 *)(v7 + 2)); if ( !v8 ) return 0; v9 = sub_6E0820(*(_WORD *)(v8 + 143)); if ( !v9 ) return 0; if ( !v3 ) return 0; v10 = (unsigned __int16)v9[1]; if ( !(_WORD)v10 ) return 0; v11 = (double)v3 / (double)v10; return (signed int)(v11 * 100.0); } // ACB230: using guessed type int dword_ACB230; //----- (006DC170) -------------------------------------------------------- int __stdcall sub_6DC170(_DWORD *a1) { int result; // eax _DWORD *v2; // edi _DWORD *v3; // ecx int v4; // eax int v5; // esi void (__stdcall ***v6)(signed int); // ecx void **v7; // [esp+10h] [ebp-1Ch] _DWORD *v8; // [esp+14h] [ebp-18h] int v9; // [esp+18h] [ebp-14h] int v10; // [esp+1Ch] [ebp-10h] int v11; // [esp+28h] [ebp-4h] result = (int)a1; if ( a1 ) { v10 = 0; v8 = 0; v9 = 0; v7 = &PgTList::`vftable'; v11 = 0; sub_6DB930(a1, &v7); v2 = v8; while ( v2 ) { v3 = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; v4 = sub_85C050(v3, 8); v5 = v4; if ( v4 ) { v6 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v4 + 40) + 16); a1 = 0; if ( v6 ) { (**v6)(1); sub_823870((_DWORD *)(v5 + 36), 4u, &a1); } sub_863770(v5, 0); } } v11 = -1; result = sub_67AC30(&v7); } return result; } // 9F42B4: using guessed type void *PgTList::`vftable'; //----- (006DC230) -------------------------------------------------------- void __thiscall sub_6DC230(int this) { int v1; // ebx int v2; // eax int v3; // esi int v4; // edi int *v5; // eax int v6; // eax unsigned __int16 *v7; // eax int v8; // ecx v1 = this; if ( *(_DWORD *)(this + 96) ) { v2 = sub_6E2400((_DWORD *)(this + 32), *(_WORD *)(this + 404)); if ( v2 ) { v3 = dword_ACB230; v4 = *(_DWORD *)(v2 + 8); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v4) ) { if ( (unsigned __int16)v4 <= *(_WORD *)(v3 + 200) ) { v5 = (int *)(*(_DWORD *)(v3 + 196) + 4 * (unsigned __int16)v4); if ( *v5 ) { v6 = *v5; if ( v6 ) { v7 = (unsigned __int16 *)sub_6E07B0((unsigned __int8 *)(v6 + 2)); if ( v7 ) { v8 = *(_DWORD *)(v1 + 96); sub_6E10C0(*(_WORD *)(v1 + 404), *v7); } } } } } } } } // ACB230: using guessed type int dword_ACB230; //----- (006DC2B0) -------------------------------------------------------- signed int __thiscall sub_6DC2B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) { signed int result; // eax this[46] = a4; this[47] = a5; this[48] = a6; this[42] = a2; this[43] = a3; this[44] = a2; this[45] = a3; switch ( a7 ) { case 0: case 1: case 2: case 3: sub_6DBBC0(this, a2, a3, a7); result = 1; break; case 4: case 5: case 6: case 7: sub_6DBAD0(this, a2, a3, a7); goto LABEL_4; default: LABEL_4: result = 1; break; } return result; } //----- (006DC340) -------------------------------------------------------- void __thiscall sub_6DC340(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi int v4; // eax int v5; // edi int v6; // esi v1 = this; v2 = this[39]; if ( v2 ) { sub_8D8240((_DWORD *)(v2 + 176)); v3 = v1[39]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[39] = 0; } } v4 = v1[40]; if ( v4 ) { sub_8D8240((_DWORD *)(v4 + 176)); v5 = v1[40]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[40] = 0; } } sub_8333D0(v1 + 12); v6 = v1[38]; if ( v6 ) sub_8D8240((_DWORD *)(v6 + 176)); } //----- (006DC3F0) -------------------------------------------------------- void __thiscall sub_6DC3F0(int this, int a2, int a3, int a4) { int v4; // edi char *v5; // eax int v6; // ebx int v7; // eax int v8; // eax int v9; // esi int *v10; // eax int v11; // eax int v12; // esi int v13; // ebx int v14; // eax int v15; // eax char *v16; // eax int v17; // [esp+8h] [ebp-4h] int v18; // [esp+8h] [ebp-4h] v4 = this; v5 = sub_7549E0("--ACTPOS%d-- TARID %d\n", *(unsigned __int8 *)(this + 436), *(unsigned __int16 *)(this + 432)); OutputDebugStringA(v5); if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) { v6 = sub_6E2400((_DWORD *)(v4 + 32), *(_WORD *)(v4 + 432)); v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v8 = sub_6E2400(&unk_ADB488, *(_WORD *)(*(_DWORD *)(v7 + 1080) + 510)); if ( v8 && *(_DWORD *)(v6 + 4) != *(_DWORD *)(v8 + 4) ) v6 = v8; } else { v6 = *(_DWORD *)(v4 + 408); } if ( v6 ) { sub_67B660(dword_AD8EBC, 7); v9 = dword_ACB230; v17 = *(_DWORD *)(v6 + 8); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(v6 + 8)) ) { if ( (unsigned __int16)v17 <= *(_WORD *)(v9 + 200) ) { v10 = (int *)(*(_DWORD *)(v9 + 196) + 4 * (unsigned __int16)v17); if ( *v10 ) { v11 = *v10; if ( v11 ) { v18 = v11 + 2; v12 = sub_4A3DB0((unsigned __int8 *)(v11 + 2)); if ( v12 ) { v13 = *(_DWORD *)(v6 + 4); v14 = sub_6E0860(*(unsigned __int8 *)(v12 + 147), a4); sub_6DB7F0(v4, v13, a3, v14); v15 = sub_6E0860(*(unsigned __int8 *)(v12 + 147), a4); v16 = sub_7549E0(aSDD_27, v18, *(unsigned __int8 *)(v15 + 2), *(unsigned __int8 *)(v15 + 3), a3); OutputDebugStringA(v16); } } } } } } } // ACB230: using guessed type int dword_ACB230; //----- (006DC560) -------------------------------------------------------- char __thiscall sub_6DC560(_DWORD *this, __int16 a2, __int16 a3, char a4) { _DWORD *v4; // eax _DWORD *v5; // esi int v7; // eax int v8; // eax int v9; // edi char v10; // al int v11; // ebx v4 = (_DWORD *)sub_6E2400(this + 8, a2); v5 = v4; if ( !v4 ) return -1; if ( sub_6E2530(v4, a4) == 1 || sub_6E2560(v5, a4) == a3 ) return a4; v7 = sub_49F760(v5[2]); if ( !v7 ) return -1; v8 = sub_4A3DB0((unsigned __int8 *)(v7 + 2)); v9 = v8; if ( !v8 ) return -1; v10 = *(_BYTE *)(v8 + 146); if ( !v10 ) return -1; v11 = 0; if ( !v10 ) return -1; while ( sub_6E2530(v5, v11) != 1 ) { if ( ++v11 >= *(unsigned __int8 *)(v9 + 146) ) return -1; } return v11; } //----- (006DC610) -------------------------------------------------------- void __thiscall sub_6DC610(_DWORD **this, _DWORD *a2) { _DWORD **v2; // edi void (__stdcall ***v3)(signed int); // esi _DWORD *v4; // ebx _DWORD *v5; // ecx int v6; // edi _DWORD *v7; // eax void (__stdcall ***v8)(signed int); // ecx void **v9; // [esp+20h] [ebp-28h] _DWORD *v10; // [esp+24h] [ebp-24h] int v11; // [esp+28h] [ebp-20h] int v12; // [esp+2Ch] [ebp-1Ch] void *v13; // [esp+30h] [ebp-18h] int v14; // [esp+34h] [ebp-14h] _DWORD *v15; // [esp+38h] [ebp-10h] int v16; // [esp+44h] [ebp-4h] v2 = this; v3 = 0; if ( a2 ) { if ( sub_8F5CC0(this[104], &v15) ) { v14 = sub_85C050(v15, 8); if ( v14 ) { if ( (*(int (__stdcall **)(const char *))(*v2[104] + 72))("EffectNode") ) { v12 = 0; v10 = 0; v11 = 0; v9 = &PgTList::`vftable'; v16 = 0; sub_6DB930(a2, &v9); v4 = v10; while ( v4 ) { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; v6 = sub_85C050(v5, 8); if ( v6 ) { v7 = operator new(0x18u); v13 = v7; LOBYTE(v16) = 1; if ( v7 ) v3 = (void (__stdcall ***)(signed int))sub_8639B0(v7, *(_DWORD **)(*(_DWORD *)(v14 + 40) + 16)); v8 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v6 + 40) + 16); LOBYTE(v16) = 0; v13 = v3; if ( v3 != v8 ) { if ( v8 ) (**v8)(1); sub_823870((_DWORD *)(v6 + 36), 4u, &v13); } sub_863770(v6, (int)v3); v3 = 0; } } sub_85BED0((_DWORD **)a2, 0.0, 1); sub_85C4D0(a2); v16 = -1; sub_67AC30(&v9); } } } } } // 9F42B4: using guessed type void *PgTList::`vftable'; //----- (006DC770) -------------------------------------------------------- signed int __thiscall sub_6DC770(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax int v4; // edi int v5; // edi char v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (int *)this[54]; v3 = *v2; if ( (int *)*v2 != v2 ) { do v3 = *sub_6CDBF0(v1 + 53, (int *)&v7, v3); while ( v3 != v1[54] ); } if ( v1[64] ) { v4 = v1[64]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[64] = 0; } } if ( v1[100] ) { v5 = v1[100]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[100] = 0; } } OutputDebugStringA("CLEAR UImap OK\n"); return 1; } //----- (006DC830) -------------------------------------------------------- char __stdcall sub_6DC830(_DWORD *a1) { int v2; // eax if ( !a1 ) return 0; v2 = sub_85C050(a1, 0); if ( v2 ) { sub_4EAA40(a1, v2); sub_85C4D0(a1); } return 1; } //----- (006DC870) -------------------------------------------------------- void **__thiscall sub_6DC870(_DWORD *this, void **a2, char *a3, int a4, char a5) { _DWORD *v5; // ebx void **v6; // esi _DWORD *v8; // eax int *v9; // edi char *v10; // eax int v11; // ecx int v12; // eax v5 = this; v6 = a2; if ( !a2 ) return 0; v8 = operator new(0xE8u); if ( v8 ) sub_85A1C0(v8, 0); v9 = (int *)a3; if ( a5 == 1 ) { v6 = (void **)sub_85BD60(a2); if ( *((_DWORD *)a3 + 5) < 0x10u ) v10 = a3; else v10 = *(char **)a3; sub_85AB50(v6, v10); sub_8591D0(v6); sub_85C6F0(v6); } if ( !v6 ) return 0; if ( *((_DWORD *)a3 + 5) >= 0x10u ) v9 = *(int **)a3; (*((void (__thiscall **)(void **, int *))*v6 + 18))(v6, v9); if ( a4 == 1 ) v11 = v5[40]; else v11 = v5[39]; (*(void (__cdecl **)(void **, _DWORD))(*(_DWORD *)v11 + 116))(v6, 0); sub_85BED0((_DWORD **)v5[40], 0.0, 1); v12 = sub_85C050(v6, 0); if ( v12 ) { sub_4EAA40(v6, v12); sub_85C4D0(v6); } return v6; } //----- (006DC9E0) -------------------------------------------------------- char __stdcall sub_6DC9E0(_DWORD *a1) { int v2; // eax _DWORD *v3; // eax int v4; // esi if ( !a1 ) return 0; v2 = sub_85C050(a1, 0); if ( v2 ) { sub_4EAA40(a1, v2); sub_85C4D0(a1); } v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiAlphaProperty::`vftable'; *(_WORD *)(v4 + 28) = 236; *(_BYTE *)(v4 + 30) = 0; } else { v4 = 0; } *(_WORD *)(v4 + 28) = *(_WORD *)(v4 + 28) & 0xFA43 | 0x1A43; *(_BYTE *)(v4 + 30) = 9; sub_403700(a1, v4); sub_85C4D0(a1); return 1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (006DCAC0) -------------------------------------------------------- void __thiscall sub_6DCAC0(_DWORD *this, int a2, char a3) { _DWORD *v3; // edi int v4; // ecx int v5; // eax int v6; // eax int v7; // eax int v8; // esi _DWORD *v9; // eax v3 = this; if ( a2 ) { v4 = *(_DWORD *)(a2 + 64); if ( v4 ) { if ( *(_BYTE *)(v4 + 12) && (v5 = *(_DWORD *)(v4 + 8)) != 0 ) v6 = *(_DWORD *)(v5 + 12); else v6 = *(_DWORD *)(v4 + 4); if ( v6 ) { if ( a3 == 1 ) { if ( *(_BYTE *)(v4 + 12) && (v7 = *(_DWORD *)(v4 + 8)) != 0 ) sub_6DC9E0(*(_DWORD **)(v7 + 12)); else sub_6DC9E0(*(_DWORD **)(v4 + 4)); } else { if ( v3[41] ) { v8 = v3[63]; if ( sub_6DB510(v3) == v8 ) return; v4 = *(_DWORD *)(a2 + 64); } v9 = (_DWORD *)sub_4B12C0(v4); sub_6DC830(v9); } } } } } //----- (006DCB60) -------------------------------------------------------- void __thiscall sub_6DCB60(int this, char a2) { int v2; // esi int v3; // eax v2 = this; if ( *(_BYTE *)(this + 248) != a2 ) { *(_BYTE *)(this + 248) = a2; if ( *(_DWORD *)(this + 252) != -1 ) { v3 = sub_6E2400((_DWORD *)(this + 32), *(_DWORD *)(this + 252)); sub_6DCAC0((_DWORD *)v2, v3, *(_BYTE *)(v2 + 248)); } } } //----- (006DCBA0) -------------------------------------------------------- __int16 __thiscall sub_6DCBA0(int this, int a2) { int v2; // eax int v3; // esi int v4; // edi int v5; // ebx int v6; // eax int v7; // ecx void **v8; // eax int v9; // eax int v10; // ecx int v11; // eax void (__thiscall ***v12)(_DWORD, signed int); // edi LOWORD(v2) = a2; v3 = this; if ( *(_WORD *)(this + 428) != (_WORD)a2 ) { v4 = sub_6E2400((_DWORD *)(this + 32), a2); v2 = sub_6E2400((_DWORD *)(v3 + 32), *(_WORD *)(v3 + 428)); v5 = v2; *(_WORD *)(v3 + 428) = a2; if ( v4 ) { sub_6DB9E0(v3, v3, v4); v6 = *(_DWORD *)(v4 + 64); if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(void ***)(v7 + 12); else v8 = *(void ***)(v6 + 4); LOWORD(v2) = (unsigned int)sub_6DC870((_DWORD *)v3, v8, (char *)(v4 + 16), 1, 0); } if ( v5 ) { v9 = *(_DWORD *)(v5 + 64); if ( *(_BYTE *)(v9 + 12) && (v10 = *(_DWORD *)(v9 + 8)) != 0 ) v11 = *(_DWORD *)(v10 + 12); else v11 = *(_DWORD *)(v9 + 4); (*(void (__stdcall **)(int *, int))(**(_DWORD **)(v3 + 160) + 120))(&a2, v11); if ( a2 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } LOWORD(v2) = sub_6DBD30(v3, *(_DWORD *)(v5 + 4), 0); } } return v2; } //----- (006DCF60) -------------------------------------------------------- char *__thiscall sub_6DCF60(_DWORD *this, int a2) { __int16 v2; // bx _DWORD *v3; // esi char *result; // eax int v5; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; a2 = (unsigned __int16)a2; sub_6E0A50(this + 57, (int **)&v5, &a2); if ( v5 != v3[58] ) sub_4E6A70(v3 + 57, &a2, v5); result = sub_664AB0(dword_AD8C90, v2); if ( result ) result = (char *)sub_6DBEB0(v3, *((volatile LONG **)result + 175)); return result; } //----- (006DCFD0) -------------------------------------------------------- void __thiscall sub_6DCFD0(_DWORD *this, int a2) { __int16 v2; // ax char *v3; // eax unsigned __int16 *v4; // ebx int v5; // eax int v6; // edi int v7; // eax int v8; // eax unsigned int v9; // ecx int v10; // eax int *v11; // ecx int *v12; // esi int v13; // ecx void (__thiscall *v14)(unsigned __int16 *, int *, float *); // eax int v15; // ecx int v16; // eax float *v17; // eax int v18; // eax float *v19; // esi int v20; // eax char v21; // [esp+24h] [ebp-ECh] float v22; // [esp+30h] [ebp-E0h] float v23; // [esp+34h] [ebp-DCh] float v24; // [esp+38h] [ebp-D8h] float v25; // [esp+3Ch] [ebp-D4h] int v26; // [esp+40h] [ebp-D0h] int v27; // [esp+44h] [ebp-CCh] int v28; // [esp+48h] [ebp-C8h] _DWORD *v29; // [esp+4Ch] [ebp-C4h] float v30; // [esp+50h] [ebp-C0h] float v31; // [esp+54h] [ebp-BCh] int v32; // [esp+58h] [ebp-B8h] int v33; // [esp+5Ch] [ebp-B4h] float v34; // [esp+60h] [ebp-B0h] int v35; // [esp+64h] [ebp-ACh] float v36; // [esp+68h] [ebp-A8h] int v37; // [esp+6Ch] [ebp-A4h] float v38; // [esp+70h] [ebp-A0h] float v39; // [esp+74h] [ebp-9Ch] char v40; // [esp+78h] [ebp-98h] char v41; // [esp+9Ch] [ebp-74h] char v42; // [esp+C0h] [ebp-50h] int *v43; // [esp+E4h] [ebp-2Ch] unsigned int v44; // [esp+F8h] [ebp-18h] int v45; // [esp+10Ch] [ebp-4h] v2 = *(_WORD *)a2; v29 = this; v3 = sub_664AB0(dword_AD8C90, v2); v4 = (unsigned __int16 *)v3; if ( v3 ) { if ( *((_DWORD *)v3 + 175) ) { v5 = sub_6E2400(&unk_ADB488, *(_WORD *)(a2 + 2)); v6 = v5; v27 = v5; if ( v5 ) { v7 = sub_49F760(*(_DWORD *)(v5 + 8)); if ( v7 ) { v8 = sub_4A3DB0((unsigned __int8 *)(v7 + 2)); v28 = v8; if ( v8 ) { v32 = sub_6E0860(*(unsigned __int8 *)(v8 + 147), *(unsigned __int8 *)(a2 + 5)); if ( v32 ) { sub_4019E0(&v43, "ActPos"); v9 = *(unsigned __int8 *)(a2 + 4); v45 = 0; sub_6E52A0(&v43, v9, 2); v10 = sub_4B12C0(*(_DWORD *)(v6 + 64)); v11 = v43; if ( v44 < 0x10 ) v11 = (int *)&v43; v12 = (int *)(*(int (__thiscall **)(int, int *))(*(_DWORD *)v10 + 72))(v10, v11); if ( v12 ) { v26 = v4[274]; v13 = v29[24]; if ( (_WORD)v26 != *((_WORD *)sub_6E11B0() + 274) ) (*(void (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v4 + 324))(v4); v33 = v12[35]; v34 = *((float *)v12 + 36); v35 = v12[37]; if ( *(_BYTE *)(v28 + 135) ) sub_69AD10((float *)byte_ADB468, *(float *)&v33, v34, (int)&v33); v14 = *(void (__thiscall **)(unsigned __int16 *, int *, float *))(*(_DWORD *)v4 + 184); v22 = 1.0; v23 = 1.0; v24 = 1.0; v14(v4, &v33, &v22); v15 = *(_DWORD *)(v6 + 64); *(float *)&v37 = 1.0; v38 = -1.0; v39 = 1.0; v16 = sub_4B12C0(v15); v17 = sub_85DAF0((float *)&v21, (float *)&v37, (float *)(v16 + 52)); v37 = *(int *)v17; v38 = v17[1]; v39 = v17[2]; v18 = sub_4B12C0(*(_DWORD *)(v6 + 64)); sub_85DD50((float *)(v18 + 52), &v36, &v25, &v30, &v31); qmemcpy(&v41, v12 + 13, 0x24u); qmemcpy(&v42, (const void *)(sub_4B12C0(*(_DWORD *)(v27 + 64)) + 52), 0x24u); v36 = flt_BA45B4 + v36; *(float *)&v37 = *(float *)&v37 * v25; v38 = v38 * v30; v39 = v39 * v31; sub_404490((float *)&v42, v36, (int)&v37); v19 = sub_85D940((float *)&v42, (float *)&v40, (float *)&v41); v20 = v32; qmemcpy(&v42, v19, 0x24u); qmemcpy((void *)(*((_DWORD *)v4 + 175) + 52), &v42, 0x24u); sub_65D9D0(v4, *(_DWORD *)(v20 + 4), *(_DWORD *)(v20 + 8)); } sub_636A10(&v43); } } } } } } } // BA45B4: using guessed type float flt_BA45B4; //----- (006DD410) -------------------------------------------------------- char __stdcall sub_6DD410(int a1, float *a2) { int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx int v7; // eax float v8; // ST2C_4 float v9; // ST2C_4 _DWORD *v10; // edi int v11; // eax int v12; // ecx bool v13; // cf int v14; // esi float v15; // ST2C_4 float v16; // ST2C_4 float v17; // ST2C_4 void *v18; // ecx const char *v19; // eax int v20; // eax float v21; // [esp+10h] [ebp-7Ch] float v22; // [esp+14h] [ebp-78h] char v23; // [esp+18h] [ebp-74h] int v24; // [esp+1Ch] [ebp-70h] float v25; // [esp+20h] [ebp-6Ch] void *v26; // [esp+24h] [ebp-68h] int v27; // [esp+34h] [ebp-58h] unsigned int v28; // [esp+38h] [ebp-54h] void **v29; // [esp+40h] [ebp-4Ch] int v30; // [esp+44h] [ebp-48h] int v31; // [esp+48h] [ebp-44h] void *v32; // [esp+4Ch] [ebp-40h] int v33; // [esp+5Ch] [ebp-30h] unsigned int v34; // [esp+60h] [ebp-2Ch] void *v35; // [esp+68h] [ebp-24h] int v36; // [esp+6Ch] [ebp-20h] int v37; // [esp+70h] [ebp-1Ch] int v38; // [esp+88h] [ebp-4h] if ( !a1 ) return 0; v3 = *(_DWORD *)(a1 + 64); if ( *(_BYTE *)(v3 + 12) && (v4 = *(_DWORD *)(v3 + 8)) != 0 ) v5 = *(_DWORD *)(v4 + 12); else v5 = *(_DWORD *)(v3 + 4); if ( !v5 ) return 0; v30 = 0; v31 = -1; v29 = &NsFindObjectByName::`vftable'; v34 = 15; v33 = 0; LOBYTE(v32) = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; if ( *(_BYTE *)(v3 + 12) && (v6 = *(_DWORD *)(v3 + 8)) != 0 ) v7 = *(_DWORD *)(v6 + 12); else v7 = *(_DWORD *)(v3 + 4); sub_65B560(&v29, v7, "ActPos"); v22 = 1000000.0; v23 = 0; v8 = a2[1] * a2[1] + *a2 * *a2 + a2[2] * a2[2]; v9 = sqrt(v8); v10 = v35; v21 = v9; v11 = (v36 - (signed int)v35) >> 2; if ( v11 ) { v12 = 0; v24 = 0; if ( v11 > 0 ) { v13 = (unsigned int)v11 > 0; do { if ( v13 ) { v14 = v10[v12]; if ( v14 ) { v15 = *(float *)(v14 + 144) * *(float *)(v14 + 144) + *(float *)(v14 + 140) * *(float *)(v14 + 140) + *(float *)(v14 + 148) * *(float *)(v14 + 148); v16 = sqrt(v15); v17 = v16 - v21; v25 = fabs(v17); if ( v22 > (double)v25 ) { v18 = *(void **)(v14 + 8); v19 = *(const char **)(v14 + 8); v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_4018E0(&v26, v18, strlen(v19)); LOBYTE(v38) = 1; v23 = sub_6E5230((char *)&v26, 6); LOBYTE(v38) = 0; if ( v28 >= 0x10 ) operator delete(v26); v10 = v35; v22 = v25; } v12 = v24; } } ++v12; v20 = (v36 - (signed int)v10) >> 2; v24 = v12; v13 = v12 < (unsigned int)v20; } while ( v12 < v20 ); } } if ( v10 ) operator delete(v10); v35 = 0; v36 = 0; v37 = 0; if ( v34 >= 0x10 ) operator delete(v32); return v23; } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; //----- (006DD640) -------------------------------------------------------- char __thiscall sub_6DD640(_DWORD *this, __int16 a2, __int16 a3) { int v3; // eax int v4; // esi signed __int64 v6; // kr00_8 int v7; // ecx char *v8; // eax int v9; // eax int v10; // ST20_4 _DWORD *v11; // edi char *v12; // eax char *v13; // ST20_4 int v14; // ecx char *v15; // eax int v16; // eax int v17; // ST20_4 _DWORD *v18; // edi char *v19; // eax char *v20; // ST20_4 _DWORD *v21; // esi char *v22; // eax char *v23; // ST20_4 unsigned __int8 *v24; // esi const CHAR *v25; // eax unsigned __int8 *v26; // esi const CHAR *v27; // eax unsigned __int8 *v28; // esi const CHAR *v29; // eax unsigned __int8 *v30; // esi const CHAR *v31; // eax _DWORD *v32; // ecx _DWORD *v33; // [esp+4h] [ebp-11Ch] signed __int64 v34; // [esp+8h] [ebp-118h] signed __int64 v35; // [esp+10h] [ebp-110h] int v36; // [esp+18h] [ebp-108h] unsigned __int8 v37; // [esp+1Ch] [ebp-104h] v33 = this; v3 = sub_6E0750(a2); v4 = v3; if ( !v3 ) return 0; v36 = 0; if ( *(_BYTE *)(v3 + 110) != 45 ) { v36 = sub_40C8D0((void *)(v3 + 110)); if ( !v36 ) return 0; } v35 = sub_680F00(*(unsigned int *)(v4 + 142)); v34 = sub_680F60(*(unsigned int *)(v4 + 142)); v6 = sub_680F60(*(unsigned int *)(v4 + 142)); memset(&v37, 0, 0x100u); if ( a3 == 5831 ) { if ( v6 ) { v24 = _mbschr(&v37, 0); if ( v24 ) { v25 = sub_40C190(1201903011); sprintf((char *)v24, "%I64d%s", v6, v25); } } if ( v35 ) { v26 = _mbschr(&v37, 0); if ( v26 ) { v27 = sub_40C190(-1732930065); sprintf((char *)v26, " %I64d%s", v35, v27); } } if ( v34 ) { v28 = _mbschr(&v37, 0); if ( v28 ) { v29 = sub_40C190(-2001757707); sprintf((char *)v28, " %I64d%s ", v34, v29); } } v30 = _mbschr(&v37, 0); v31 = sub_40A910(-585620434); sprintf((char *)v30, "%s \n", v31); v32 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_492060(v32, (int)&v37); return 1; } if ( a3 == 5832 ) { v21 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v22 = (char *)sub_40A910(442383191); v23 = sub_7549E0(v22, v36 + 34); sub_492060(v21, (int)v23); return 1; } if ( a3 != 5839 ) return 0; v7 = v33[24]; v8 = sub_6E11B0(); if ( *(_DWORD *)(v4 + 102) <= (unsigned int)(*(int (__thiscall **)(char *))(*(_DWORD *)v8 + 164))(v8) ) { v14 = v33[24]; v15 = sub_6E11B0(); if ( *(_DWORD *)(v4 + 106) < (unsigned int)(*(int (__thiscall **)(char *))(*(_DWORD *)v15 + 164))(v15) ) { v16 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v17 = *(_DWORD *)(v4 + 106); v18 = (_DWORD *)v16; v19 = (char *)sub_40A910(-2066362401); v20 = sub_7549E0(v19, v17); sub_492060(v18, (int)v20); return 1; } return 0; } v9 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v10 = *(_DWORD *)(v4 + 102); v11 = (_DWORD *)v9; v12 = (char *)sub_40A910(-1850686762); v13 = sub_7549E0(v12, v10); sub_492060(v11, (int)v13); return 1; } //----- (006DD940) -------------------------------------------------------- char __thiscall sub_6DD940(_DWORD *this, char a2) { _DWORD *v2; // esi char result; // al int v4; // [esp+8h] [ebp-4h] v2 = this; sub_6E0A50(this + 57, (int **)&v4, &a2); if ( v4 == v2[58] ) result = 0; else result = *(_BYTE *)sub_6E0D80(v2 + 57, &a2); return result; } //----- (006DD990) -------------------------------------------------------- BOOL __thiscall sub_6DD990(_DWORD *this, int a2, char a3) { __int16 v3; // di _DWORD *v4; // esi _DWORD *v5; // eax int v7; // [esp+8h] [ebp-8h] v3 = a2; v4 = this + 57; BYTE2(a2) = a3; v5 = sub_6E0D10(this + 57, (char *)&a2); sub_6E0AC0(v4, (int)&v7, v5, 0); return sub_664AB0(dword_AD8C90, v3) != 0; } //----- (006DDA40) -------------------------------------------------------- char __thiscall sub_6DDA40(_DWORD *this, int a2) { _DWORD *v2; // ebx v2 = this; if ( !*(_DWORD *)(a2 + 142) || sub_680E60(byte_AD9238) >= *(unsigned int *)(a2 + 142) ) return 1; sub_6DD640(v2, *(_WORD *)a2, 5831); return 0; } //----- (006DDAA0) -------------------------------------------------------- void __thiscall sub_6DDAA0(_DWORD *this, char *a2, int a3, __int16 a4) { _DWORD *v4; // esi DWORD v5; // eax int v6; // edi int v7; // edx int *v8; // eax int v9; // eax int v10; // edi int v11; // ecx int v12; // ecx _DWORD *v13; // esi const char *v14; // eax volatile LONG *v15; // eax int v16; // eax char v17; // [esp+14h] [ebp-1D8h] char v18; // [esp+1C8h] [ebp-24h] int v19; // [esp+1D0h] [ebp-1Ch] int v20; // [esp+1E8h] [ebp-4h] v4 = this; v5 = timeGetTime(); if ( dword_B9E1C8 + 2000 <= v5 ) { v6 = dword_ACB230; v7 = *(_DWORD *)dword_ACB230; dword_B9E1C8 = v5; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v7 + 16))(dword_ACB230, a3) ) { if ( (unsigned __int16)a3 <= *(_WORD *)(v6 + 200) ) { v8 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)a3); if ( *v8 ) { v9 = *v8; if ( v9 ) { v10 = sub_6E07B0((unsigned __int8 *)(v9 + 2)); if ( v10 ) { v11 = v4[24]; sub_6E11B0(); if ( v4[37] == 2 ) { if ( sub_6DD640(v4, *(_WORD *)v10, 5839) != 1 && sub_6DDA40(v4, v10) ) { sub_6E06D0((_DWORD **)v4); v15 = sub_462C30(2, a2); sub_56FF80(v4 + 100, (int)v15); *((_WORD *)v4 + 202) = a4; sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v19 = 232; v16 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_461760((_DWORD *)v4[100], v16, &v18, 0); } } else if ( *(_DWORD *)(v10 + 90) == 1 ) { v12 = v4[24]; sub_6E0720(&v17); v20 = -1; sub_6C1130(&v17); } else { v13 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v14 = sub_41A850(5835); sub_492060(v13, (int)v14); } } } } } } } } // ACB230: using guessed type int dword_ACB230; // B9E1C8: using guessed type int dword_B9E1C8; //----- (006DDC70) -------------------------------------------------------- void __thiscall sub_6DDC70(_DWORD *this) { _DWORD *v1; // edi signed int v2; // ebx int v3; // ecx void *v4; // eax int v5; // edx void **v6; // esi void *v7; // eax char *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // [esp-Ch] [ebp-88h] char **v11; // [esp-8h] [ebp-84h] int v12; // [esp-4h] [ebp-80h] volatile LONG **v13; // [esp+10h] [ebp-6Ch] int v14; // [esp+14h] [ebp-68h] void *v15; // [esp+18h] [ebp-64h] unsigned int v16; // [esp+2Ch] [ebp-50h] void *v17; // [esp+34h] [ebp-48h] int v18; // [esp+44h] [ebp-38h] unsigned int v19; // [esp+48h] [ebp-34h] char *Src; // [esp+50h] [ebp-2Ch] int v21; // [esp+60h] [ebp-1Ch] unsigned int v22; // [esp+64h] [ebp-18h] int v23; // [esp+78h] [ebp-4h] v1 = this; v2 = 0; if ( this[41] ) { v19 = 15; v18 = 0; LOBYTE(v17) = 0; sub_4017F0((const void **)&v17, (const void **)&dword_AB7A30, 0, (void *)0xFFFFFFFF); v3 = v1[41]; v23 = 0; v14 = sub_6E5370(v3, (const void **)&v17); v22 = 15; v21 = 0; LOBYTE(Src) = 0; LOBYTE(v23) = 1; if ( v14 >= 0 ) { do { sub_6E52A0(&v17, v2, 3); v4 = v17; if ( v19 < 0x10 ) v4 = &v17; v5 = *(_DWORD *)v1[41]; v12 = (int)v4; v6 = (void **)(*(int (__stdcall **)(void *))(v5 + 72))(v4); if ( v6 ) { v7 = sub_4571E0(&v15, (int)&dword_AB7A4C, (int)&v17); LOBYTE(v23) = 2; sub_406450(&Src, v7); LOBYTE(v23) = 1; if ( v16 >= 0x10 ) operator delete(v15); v8 = Src; if ( v22 < 0x10 ) v8 = (char *)&Src; sub_85AB50(v6, v8); } v9 = (volatile LONG *)v1[41]; v12 = 1; v11 = &Src; v13 = &v10; v10 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); sub_6DB040(v1 + 12, v10, v11, v12); sub_6E5210(&v17, 3); ++v2; } while ( v2 <= v14 ); if ( v22 >= 0x10 ) operator delete(Src); } v22 = 15; v21 = 0; LOBYTE(Src) = 0; if ( v19 >= 0x10 ) operator delete(v17); } } //----- (006DDE10) -------------------------------------------------------- void __thiscall sub_6DDE10(_DWORD *this, int a2, int a3) { const void **v3; // eax signed int v4; // edi int v5; // edi int v6; // [esp-8h] [ebp-84h] int v7; // [esp-4h] [ebp-80h] int *v8; // [esp+10h] [ebp-6Ch] _DWORD *v9; // [esp+14h] [ebp-68h] char v10; // [esp+18h] [ebp-64h] int v11; // [esp+28h] [ebp-54h] int v12; // [esp+2Ch] [ebp-50h] void *v13; // [esp+34h] [ebp-48h] unsigned int v14; // [esp+48h] [ebp-34h] void *v15; // [esp+50h] [ebp-2Ch] int v16; // [esp+60h] [ebp-1Ch] unsigned int v17; // [esp+64h] [ebp-18h] int v18; // [esp+78h] [ebp-4h] v9 = this; v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4017F0((const void **)&v15, (const void **)&dword_AB7A30, 0, (void *)0xFFFFFFFF); v18 = 0; v12 = 15; v11 = 0; v10 = 0; LOBYTE(v18) = 1; v3 = (const void **)sub_4571E0(&v13, (int)&dword_AB7A4C, (int)&v15); LOBYTE(v18) = 2; v4 = sub_6E5370(a2, v3); LOBYTE(v18) = 1; if ( v14 >= 0x10 ) operator delete(v13); if ( v4 >= 0 ) { v9 += 12; v5 = v4 + 1; do { v7 = a3; v8 = &v6; v6 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_6DA480(v9, v6, v7); --v5; } while ( v5 ); } if ( v17 >= 0x10 ) operator delete(v15); } //----- (006DDF10) -------------------------------------------------------- void __thiscall sub_6DDF10(_DWORD **this, int a2) { int v2; // ebx int v3; // edi int v4; // edx int v5; // ecx int v6; // ST0C_4 int v7; // ST08_4 int v8; // ST04_4 char *v9; // eax char *v10; // eax __int16 *v11; // eax _DWORD **v12; // [esp+4h] [ebp-4h] v12 = this; if ( a2 ) { v2 = *(_DWORD *)(a2 + 8); v3 = dword_ACB230; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(a2 + 8)) ) { if ( (unsigned __int16)v2 <= *(_WORD *)(v3 + 200) ) { v5 = *(_DWORD *)(v3 + 196); if ( *(_DWORD *)(v5 + 4 * (unsigned __int16)v2) ) v4 = *(_DWORD *)(v5 + 4 * (unsigned __int16)v2); else v4 = 0; } else { v4 = 0; } } else { v4 = 0; } v6 = *(_DWORD *)(a2 + 4); v7 = *(_DWORD *)(a2 + 8); v8 = v4 + 34; v9 = (char *)sub_40A910(727851906); v10 = sub_7549E0(v9, v8); sub_6DDAA0(v12, v10, v7, v6); v11 = (__int16 *)sub_4A3D40(*(_DWORD *)(a2 + 8), 50000, 0); if ( v11 ) sub_6E1470(v12[24], *v11, *(_WORD *)(a2 + 4)); } } // ACB230: using guessed type int dword_ACB230; //----- (006DDFD0) -------------------------------------------------------- BOOL __thiscall sub_6DDFD0(_DWORD *this) { _DWORD *v1; // ebx int **v3; // eax int *v4; // esi int v5; // edi int **v6; // eax char v7; // [esp+4h] [ebp-4h] v1 = this; if ( !this[51] ) return 0; v3 = (int **)this[50]; v4 = *v3; if ( *v3 != (int *)v3 ) { do { if ( v4[10] ) { v5 = v4[10]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v4[10] = 0; } } v6 = sub_6FE8A0(v1 + 49, (int **)&v7, v4); v4 = *v6; } while ( *v6 != (int *)v1[50] ); } return v1[51] == 0; } //----- (006DE060) -------------------------------------------------------- void __thiscall sub_6DE060(_DWORD *this, _DWORD *a2, char a3) { _DWORD **v3; // edx _DWORD *v4; // esi _DWORD *v5; // ebx int v6; // eax int v7; // eax int v8; // ecx int v9; // eax _DWORD *v10; // eax int v11; // esi int v12; // eax _DWORD *v13; // eax int v14; // eax int v15; // ecx _DWORD *v16; // esi _DWORD *v17; // [esp+10h] [ebp-10h] v3 = (_DWORD **)this; v17 = this; v4 = (_DWORD *)this[102]; v5 = this + 102; if ( !a2 ) { sub_6E04F0(this + 102, 0); if ( v4 ) { v6 = v4[11]; if ( v6 ) { if ( v6 == 4 ) LOBYTE(v6) = 3; } else { LOBYTE(v6) = (_BYTE)a2 + 1; } v7 = sub_6E21D0(v4, v6); if ( v7 ) { if ( *(_BYTE *)(v7 + 12) && (v8 = *(_DWORD *)(v7 + 8)) != 0 ) sub_6DC170(*(_DWORD **)(v8 + 12)); else sub_6DC170(*(_DWORD **)(v7 + 4)); } } return; } if ( v4 ) { if ( v4[1] == a2[1] ) { if ( a3 == 1 ) { sub_6E04F0(this + 102, (int)a2); v9 = sub_49F760(a2[2]); if ( *(_DWORD *)(sub_4A3DB0((unsigned __int8 *)(v9 + 2)) + 98) == 1 ) { v10 = sub_4A3B80(&a3); sub_6C4F90((_BYTE *)*v10); sub_410C00(&a3); } if ( v17[103] == 2 ) sub_6DDF10((_DWORD **)v17, (int)a2); } return; } v11 = v4[16]; if ( v11 ) { if ( *(_BYTE *)(v11 + 12) && (v12 = *(_DWORD *)(v11 + 8)) != 0 ) v13 = *(_DWORD **)(v12 + 12); else v13 = *(_DWORD **)(v11 + 4); sub_6DC170(v13); v3 = (_DWORD **)v17; } } v14 = a2[16]; if ( *(_BYTE *)(v14 + 12) && (v15 = *(_DWORD *)(v14 + 8)) != 0 ) v16 = *(_DWORD **)(v15 + 12); else v16 = *(_DWORD **)(v14 + 4); sub_6DC610(v3, v16); if ( v16 ) sub_6E04F0(v5, (int)a2); } //----- (006DE220) -------------------------------------------------------- signed int __thiscall sub_6DE220(_DWORD *this) { _DWORD *v1; // edi int v2; // eax int v3; // ebx int v4; // eax int v5; // eax v1 = this; v2 = this[41]; if ( !v2 ) return 1; v3 = this[102]; v4 = sub_6E25A0(v2); v5 = sub_6E2D00(v1 + 8, v4); if ( v3 && v5 && *(_DWORD *)(v5 + 4) == *(_DWORD *)(v3 + 4) ) sub_6DE060(byte_ADB468, 0, 1); return sub_6DE500(v1, 1, 1); } //----- (006DE280) -------------------------------------------------------- int __thiscall sub_6DE280(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; if ( a2 == 3 ) sub_6DDC70(this); return sub_85BED0((_DWORD **)v2[41], 0.0, 1); } //----- (006DE2B0) -------------------------------------------------------- signed int __thiscall sub_6DE2B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST08_4 _DWORD *v4; // ST04_4 void *v5; // ST08_4 int v6; // esi int v7; // esi char v9; // [esp+10h] [ebp-14h] int v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v1 = this; if ( sub_6DDFD0(this) ) OutputDebugStringA("----------MiniHouse LightClear OK---------- \n"); else OutputDebugStringA("----------MiniHouse LightClear ERROR!!!!!!!!!!!---------- \n"); sub_6DC340(v1); sub_8333D0(v1 + 12); sub_6E3900(v1); sub_6E2010(v1 + 8); sub_6DC770(v1); v2 = (_DWORD *)v1[24]; if ( v2 ) { v10 = v1[24]; v11 = 0; sub_668390(v2); v3 = (_DWORD *)v2[1]; v4 = *(_DWORD **)v2[1]; v11 = 1; sub_6CDE90(v2, (int *)&v9, v4, v3); v5 = (void *)v2[1]; v11 = -1; operator delete(v5); operator delete(v2); v1[24] = 0; } v6 = v1[38]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[38] = 0; } v7 = v1[104]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[104] = 0; } return 1; } //----- (006DE3E0) -------------------------------------------------------- bool __thiscall sub_6DE3E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // edi bool result; // al int v7; // eax signed int v8; // eax char v9; // bl int v10; // [esp+Ch] [ebp-4h] v3 = this; v4 = sub_6E2400(this + 8, a3); v5 = (_DWORD *)v4; if ( !v4 ) return 0; v10 = *(_DWORD *)(v4 + 4); v7 = sub_6E2D00(v3 + 8, v3[41]); if ( v7 ) v8 = *(_DWORD *)(v7 + 4); else v8 = -1; if ( v10 == v8 ) { v3[105] = a2; *((_WORD *)v3 + 212) = a3; result = 1; } else { sub_6DE220(v3); sub_6DAED0(v3 + 12, (int)v5, 2); sub_6DB9E0((int)v3, (int)v3, (int)v5); v9 = sub_6E2210(v5, a2); sub_6DBD30((int)v3, a3, 1); result = v9 != 0; } return result; } //----- (006DE490) -------------------------------------------------------- char __thiscall sub_6DE490(_DWORD *this) { int v1; // esi __int16 v2; // ax v1 = (int)this; this[41] = 0; sub_46E3D0(0); sub_6C29C0(63, v1); sub_6C29C0(64, v1); v2 = *(_WORD *)(v1 + 424); if ( v2 != -1 ) { LOBYTE(v2) = sub_6DE3E0((_DWORD *)v1, *(_DWORD *)(v1 + 420), *(unsigned __int16 *)(v1 + 424)); if ( (_BYTE)v2 == 1 ) { *(_DWORD *)(v1 + 420) = 1; *(_WORD *)(v1 + 424) = -1; } } return v2; } //----- (006DE500) -------------------------------------------------------- signed int __thiscall sub_6DE500(_DWORD *this, char a2, char a3) { int v3; // esi int v4; // eax int v5; // ecx __int16 v6; // dx int v7; // eax int v8; // ecx signed int v10; // edi float v11; // eax float v12; // edi int v13; // edi _DWORD *v14; // edi int v15; // eax int v16; // edx float v17; // ecx float v18; // edi int v19; // edx _DWORD *v20; // eax float v21; // edi double v22; // st7 double v23; // st6 bool v24; // zf double v25; // st7 int v26; // ecx __int16 v27; // ST04_2 int v28; // ecx __int16 v29; // ST04_2 int v30; // ecx float v31; // [esp+0h] [ebp-38h] int *v32; // [esp+4h] [ebp-34h] int v33; // [esp+14h] [ebp-24h] int v34; // [esp+18h] [ebp-20h] int v35; // [esp+1Ch] [ebp-1Ch] float v36; // [esp+20h] [ebp-18h] float v37; // [esp+24h] [ebp-14h] float v38; // [esp+28h] [ebp-10h] float v39; // [esp+2Ch] [ebp-Ch] float v40; // [esp+30h] [ebp-8h] v3 = (int)this; v4 = this[41]; if ( v4 ) { if ( dword_B9E168 && !a2 ) return 0; v5 = this[36] - 3; if ( v5 ) { if ( v5 == 2 ) { if ( a3 ) { v10 = 2; do { v11 = *(float *)(v3 + 164); v32 = (int *)1; v36 = COERCE_FLOAT(&v31); v31 = v11; if ( v11 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v11) + 4)); sub_6DA480((_DWORD *)(v3 + 48), SLODWORD(v31), (int)v32); --v10; } while ( v10 ); (*(void (__stdcall **)(float *, _DWORD))(**(_DWORD **)(v3 + 160) + 120))(&v36, *(_DWORD *)(v3 + 164)); v12 = v36; if ( v36 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v36) + 4)) && v12 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v12))(LODWORD(v12), 1); *(_WORD *)(v3 + 244) = -1; sub_6DE490((_DWORD *)v3); v13 = *((_DWORD *)dword_AD8EBC + 1026); if ( v13 ) { sub_67D370(dword_AD8EBC, 0); v14 = *(_DWORD **)(v13 + 700); if ( v14 ) { v15 = sub_85C050(v14, 0); if ( v15 ) { sub_4EAA40(v14, v15); sub_85C4D0(v14); } } } *(_DWORD *)(v3 + 144) = 1; } else if ( !dword_B9E168 && !*(_BYTE *)(v3 + 247) ) { v33 = *(_DWORD *)(v4 + 88); v34 = *(_DWORD *)(v4 + 92); v6 = *(_WORD *)(v3 + 244); v7 = *(_DWORD *)(v4 + 96); v32 = &v33; v8 = *(_DWORD *)(v3 + 96); v35 = v7; if ( !sub_6E13C0(v6, (float *)&v33) ) return 13; } return 1; } return 0; } if ( a2 != 1 && dword_B9E168 ) return 0; v37 = 0.0; v38 = 0.0; v39 = 0.0; v40 = 0.0; v33 = *(_DWORD *)(v4 + 88); v34 = *(_DWORD *)(v4 + 92); v35 = *(_DWORD *)(v4 + 96); sub_85DD50((float *)(v4 + 52), &v37, &v38, &v39, &v40); v16 = sub_6E2D00((_DWORD *)(v3 + 32), *(_DWORD *)(v3 + 164)); if ( !v16 ) { (*(void (__stdcall **)(float *, _DWORD))(**(_DWORD **)(v3 + 160) + 120))(&v36, *(_DWORD *)(v3 + 164)); v18 = v36; if ( v36 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v36) + 4)) && v18 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v18))(LODWORD(v18), 1); sub_6DE490((_DWORD *)v3); *(_DWORD *)(v3 + 144) = 1; return 0; } if ( a3 == 1 ) { if ( !sub_6DB7D0(v3) ) { v20 = (_DWORD *)sub_4B12C0(*(_DWORD *)(v19 + 64)); sub_6DC830(v20); } sub_6DDE10((_DWORD *)v3, *(_DWORD *)(v3 + 164), 1); (*(void (__stdcall **)(float *, _DWORD))(**(_DWORD **)(v3 + 160) + 120))(&v36, *(_DWORD *)(v3 + 164)); if ( v36 != 0.0 ) { v21 = v36; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v36) + 4)) && v21 != 0.0 ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v21))(LODWORD(v21), 1); } sub_6DE490((_DWORD *)v3); *(_DWORD *)(v3 + 144) = 1; } else if ( !a3 && !*(_BYTE *)(v3 + 247) ) { v22 = v40; v23 = v37; if ( 0.0 == v40 * v37 ) { v40 = 0.001; v37 = 0.001; v22 = (float)0.001; v23 = (float)0.001; } v24 = *(_BYTE *)(v3 + 246) == 1; v25 = v22 * v23; v32 = &v33; v31 = v17; v26 = *(_DWORD *)(v16 + 4); if ( v24 ) { v36 = v25; v31 = v36; v27 = v26; v28 = *(_DWORD *)(v3 + 96); sub_6E10F0(v27, v36, (int)v32); *(_BYTE *)(v3 + 246) = 0; } else { v36 = v25; v31 = v36; v29 = v26; v30 = *(_DWORD *)(v3 + 96); sub_6E11C0(v29, v36, (int)v32); } } } return 1; } // B9E168: using guessed type int dword_B9E168; //----- (006DE850) -------------------------------------------------------- int __thiscall sub_6DE850(_DWORD *this, int a2, int a3, int a4, float a5, char a6, int a7) { _DWORD *v7; // ebx int v8; // edi unsigned __int8 (__stdcall *v9)(int); // eax int v10; // edx _BYTE *v11; // eax _DWORD *v12; // eax _DWORD *v13; // edi char v15; // dl int v16; // ecx int v17; // esi void *v18; // [esp-14h] [ebp-68h] int v19; // [esp-10h] [ebp-64h] int v20; // [esp-Ch] [ebp-60h] int v21; // [esp-8h] [ebp-5Ch] int v22; // [esp-4h] [ebp-58h] int v23; // [esp+0h] [ebp-54h] float v24; // [esp+4h] [ebp-50h] float *v25; // [esp+18h] [ebp-3Ch] _BYTE *v26; // [esp+1Ch] [ebp-38h] void *v27; // [esp+20h] [ebp-34h] _DWORD *v28; // [esp+24h] [ebp-30h] unsigned __int8 v29; // [esp+28h] [ebp-2Ch] int v30; // [esp+38h] [ebp-1Ch] int v31; // [esp+3Ch] [ebp-18h] int v32; // [esp+50h] [ebp-4h] v7 = this; v25 = (float *)a4; v8 = sub_6E3CF0(this, a3); v9 = *(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)dword_ACB230 + 16); v28 = (_DWORD *)dword_ACB230; if ( v9(a3) ) { if ( (unsigned __int16)a3 <= *((_WORD *)v28 + 100) ) { v10 = v28[49]; if ( *(_DWORD *)(v10 + 4 * (unsigned __int16)a3) ) v28 = *(_DWORD **)(v10 + 4 * (unsigned __int16)a3); else v28 = 0; } else { v28 = 0; } } else { v28 = 0; } v27 = (char *)v28 + 2; v11 = (_BYTE *)sub_4A3DB0((unsigned __int8 *)v28 + 2); v26 = v11; if ( !v11 || !v28 ) return 0; if ( !v8 ) { v12 = operator new(0x44u); if ( v12 ) { v13 = sub_6E09E0(v12); v28 = v13; } else { v28 = 0; v13 = 0; } v31 = 15; v30 = 0; v29 = 0; sub_4018E0(&v29, v27, strlen((const char *)v27)); v27 = &v18; v23 = 15; v22 = 0; v32 = 0; LOBYTE(v18) = 0; sub_4017F0((const void **)&v18, (const void **)&dword_AB79F8, 0, (void *)0xFFFFFFFF); sub_6E39F0(v13, &v29, a3, 0, 0, 10, 10000, 0, v18, v19, v20, v21, v22, v23, SLODWORD(v24)); sub_6E3D30(v7, (int)v13); v8 = sub_6E3CF0(v7, a3); if ( !v8 ) { if ( v28 ) (*(void (__stdcall **)(signed int))*v28)(1); sub_636A10(&v29); return 9; } v32 = -1; sub_636A10(&v29); v11 = v26; } v15 = v11[135]; BYTE1(v28) = v11[136]; v16 = (unsigned __int8)v11[137]; LOBYTE(v28) = v15; v23 = v16; LOWORD(v23) = (_WORD)v28; BYTE2(v23) = v16; v26 = (_BYTE *)sub_6E2DB0(v7 + 8, (const void **)a2, v8, -1, v23, (int)&dword_AB7A14); sub_6E2740(v7 + 8, a2, v25); sub_6E2430(v7 + 8, a2, a5); v17 = (int)v26; if ( v26 == (_BYTE *)1 ) sub_6DE3E0(v7, (unsigned __int8)a6, a2); return v17; } // ACB230: using guessed type int dword_ACB230; //----- (006DEA90) -------------------------------------------------------- int __thiscall sub_6DEA90(_DWORD *this, int a2, int a3, float a4) { _DWORD *v4; // ebx int result; // eax int v6; // eax int v7; // ecx _DWORD **v8; // ecx int v9; // [esp+20h] [ebp+Ch] v4 = this; v9 = sub_6E2740(this + 8, a2, (float *)a3); if ( 0.0 != a4 ) v9 = sub_6E2430(v4 + 8, a2, a4); result = sub_6E2400(v4 + 8, a2); if ( result ) { sub_6DE500(v4, 1, 1); v6 = *(_DWORD *)(sub_6E2400(v4 + 8, a2) + 64); if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD ***)(v7 + 12); else v8 = *(_DWORD ***)(v6 + 4); sub_85BED0(v8, 0.0, 1); result = v9; } return result; } //----- (006DEB30) -------------------------------------------------------- signed int __thiscall sub_6DEB30(_DWORD *this, char a2, char a3) { _DWORD *v3; // esi int v4; // edi signed int result; // eax int v6; // eax int v7; // [esp+18h] [ebp+Ch] v3 = this; v4 = sub_6E2400(this + 8, a2); if ( !v4 ) return 8; v6 = v3[102]; if ( v6 && *(_DWORD *)(v4 + 4) == *(_DWORD *)(v6 + 4) ) sub_6DE060(byte_ADB468, 0, 1); if ( v3[41] ) sub_6DE500(v3, 1, a3); sub_6DAED0(v3 + 12, v4, 2); v7 = *(_DWORD *)(v3[39] + 192); if ( !sub_6E1D70(v4) ) sub_6DB9E0((int)v3, (int)v3, v4); if ( sub_6E2380(v3 + 8, a2) == 14 ) result = 1; else result = v7 - 1 == *(_DWORD *)(v3[39] + 192); return result; } //----- (006DEC00) -------------------------------------------------------- int __thiscall sub_6DEC00(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7, int a8) { void *v8; // eax float *v9; // esi unsigned int v10; // edi unsigned __int8 *v11; // edx unsigned int v12; // ebx int v13; // ecx unsigned __int8 *v14; // eax int v15; // eax bool v16; // zf signed int v17; // eax char *v18; // eax int v19; // edx int v20; // ecx unsigned __int8 *v21; // edx unsigned int v22; // ebx unsigned int v23; // ecx unsigned __int8 *v24; // eax int v25; // eax bool v26; // zf signed int v27; // eax char *v28; // eax int v29; // edx int v30; // ecx unsigned __int8 *v31; // edx unsigned int v32; // ebx unsigned int v33; // ecx unsigned __int8 *v34; // eax int v35; // eax bool v36; // zf signed int v37; // eax char *v38; // eax int v39; // edx int v40; // ecx unsigned __int8 *v41; // edx unsigned int v42; // ebx unsigned int v43; // ecx unsigned __int8 *v44; // eax int v45; // eax bool v46; // zf signed int v47; // eax char *v48; // eax float *v49; // edi char *v50; // eax int result; // eax const CHAR *v52; // [esp-4h] [ebp-50h] int v53; // [esp+10h] [ebp-3Ch] _DWORD *v54; // [esp+14h] [ebp-38h] void *v55; // [esp+18h] [ebp-34h] const void *v56[4]; // [esp+1Ch] [ebp-30h] int v57; // [esp+2Ch] [ebp-20h] int v58; // [esp+30h] [ebp-1Ch] float *v59; // [esp+38h] [ebp-14h] int v60; // [esp+48h] [ebp-4h] v54 = this; v60 = 0; v8 = operator new(0x10Cu); v55 = v8; LOBYTE(v60) = 1; if ( v8 ) v9 = sub_861A00((float *)v8); else v9 = 0; v55 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)v9 + 1); v10 = a6; LOBYTE(v60) = 2; if ( !a6 ) { LOBYTE(v60) = 0; if ( v9 && !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); if ( (unsigned int)a7 >= 0x10 ) operator delete(Src); return 0; } v11 = (unsigned __int8 *)dword_AB7AA0; if ( (unsigned int)dword_AB7AB4 < 0x10 ) v11 = (unsigned __int8 *)&dword_AB7AA0; v12 = dword_AB7AB0; v13 = a6; if ( a6 >= (unsigned int)dword_AB7AB0 ) v13 = dword_AB7AB0; v14 = (unsigned __int8 *)Src; if ( (unsigned int)a7 < 0x10 ) v14 = (unsigned __int8 *)&Src; v15 = sub_40C0B0(v14, v11, v13); v16 = v15 == 0; if ( !v15 ) { if ( v10 >= v12 ) v17 = v10 != v12; else v17 = -1; v16 = v17 == 0; } if ( v16 ) { v18 = Src; if ( (unsigned int)a7 < 0x10 ) v18 = (char *)&Src; sub_85AB50((void **)v9, v18); *((_DWORD *)v9 + 57) = dword_AB79D4; *((_DWORD *)v9 + 58) = dword_AB79D8; *((_DWORD *)v9 + 59) = dword_AB79DC; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 60) = dword_AB79D4; *((_DWORD *)v9 + 61) = dword_AB79D8; v19 = dword_AB79DC; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 62) = v19; *((_DWORD *)v9 + 63) = dword_AB79D4; *((_DWORD *)v9 + 64) = dword_AB79D8; v20 = dword_AB79DC; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 65) = v20; ++*((_DWORD *)v9 + 47); v52 = "----------MiniHouse LightRED OK---------- \n"; } else { v21 = (unsigned __int8 *)dword_AB7A84; if ( (unsigned int)dword_AB7A98 < 0x10 ) v21 = (unsigned __int8 *)&dword_AB7A84; v22 = dword_AB7A94; v23 = v10; if ( v10 >= dword_AB7A94 ) v23 = dword_AB7A94; v24 = (unsigned __int8 *)Src; if ( (unsigned int)a7 < 0x10 ) v24 = (unsigned __int8 *)&Src; v25 = sub_40C0B0(v24, v21, v23); v26 = v25 == 0; if ( !v25 ) { if ( v10 >= v22 ) v27 = v10 != v22; else v27 = -1; v26 = v27 == 0; } if ( v26 ) { v28 = Src; if ( (unsigned int)a7 < 0x10 ) v28 = (char *)&Src; sub_85AB50((void **)v9, v28); *((_DWORD *)v9 + 57) = dword_AB79C8; *((_DWORD *)v9 + 58) = dword_AB79CC; *((_DWORD *)v9 + 59) = dword_AB79D0; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 60) = dword_AB79C8; *((_DWORD *)v9 + 61) = dword_AB79CC; v29 = dword_AB79D0; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 62) = v29; *((_DWORD *)v9 + 63) = dword_AB79C8; *((_DWORD *)v9 + 64) = dword_AB79CC; v30 = dword_AB79D0; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 65) = v30; ++*((_DWORD *)v9 + 47); v52 = "----------MiniHouse LightGREEN OK---------- \n"; } else { v31 = (unsigned __int8 *)dword_AB7A68; if ( (unsigned int)dword_AB7A7C < 0x10 ) v31 = (unsigned __int8 *)&dword_AB7A68; v32 = dword_AB7A78; v33 = v10; if ( v10 >= dword_AB7A78 ) v33 = dword_AB7A78; v34 = (unsigned __int8 *)Src; if ( (unsigned int)a7 < 0x10 ) v34 = (unsigned __int8 *)&Src; v35 = sub_40C0B0(v34, v31, v33); v36 = v35 == 0; if ( !v35 ) { if ( v10 >= v32 ) v37 = v10 != v32; else v37 = -1; v36 = v37 == 0; } if ( v36 ) { v38 = Src; if ( (unsigned int)a7 < 0x10 ) v38 = (char *)&Src; sub_85AB50((void **)v9, v38); *((_DWORD *)v9 + 57) = dword_AB79E0; *((_DWORD *)v9 + 58) = dword_AB79E4; *((_DWORD *)v9 + 59) = dword_AB79E8; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 60) = dword_AB79E0; *((_DWORD *)v9 + 61) = dword_AB79E4; v39 = dword_AB79E8; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 62) = v39; *((_DWORD *)v9 + 63) = dword_AB79E0; *((_DWORD *)v9 + 64) = dword_AB79E4; v40 = dword_AB79E8; ++*((_DWORD *)v9 + 47); *((_DWORD *)v9 + 65) = v40; ++*((_DWORD *)v9 + 47); v52 = "----------MiniHouse LightNORMAL OK---------- \n"; } else { v41 = (unsigned __int8 *)dword_AB7ABC; if ( (unsigned int)dword_AB7AD0 < 0x10 ) v41 = (unsigned __int8 *)&dword_AB7ABC; v42 = dword_AB7ACC; v43 = v10; if ( v10 >= dword_AB7ACC ) v43 = dword_AB7ACC; v44 = (unsigned __int8 *)Src; if ( (unsigned int)a7 < 0x10 ) v44 = (unsigned __int8 *)&Src; v45 = sub_40C0B0(v44, v41, v43); v46 = v45 == 0; if ( !v45 ) { if ( v10 >= v42 ) v47 = v10 != v42; else v47 = -1; v46 = v47 == 0; } if ( !v46 ) { if ( v9 ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); LOBYTE(v60) = 0; sub_410C00(&v55); sub_636A10(&Src); return 0; } v48 = Src; if ( (unsigned int)a7 < 0x10 ) v48 = (char *)&Src; sub_85AB50((void **)v9, v48); sub_40D930(v9, &unk_AB79EC); sub_40D960(v9, &unk_AB79EC); sub_40D990(v9, &unk_AB79EC); ++*((_DWORD *)v9 + 47); v52 = "----------MiniHouse LightYELLOW OK---------- \n"; } } } v9[56] = 1.0; OutputDebugStringA(v52); v58 = 15; v57 = 0; LOBYTE(v56[0]) = 0; v59 = 0; LOBYTE(v60) = 3; sub_4017F0(v56, (const void **)&Src, 0, (void *)0xFFFFFFFF); if ( v59 != v9 ) { if ( v59 ) { v49 = v59; if ( !InterlockedDecrement((volatile LONG *)v59 + 1) ) { if ( v49 ) (**(void (__thiscall ***)(float *, signed int))v49)(v49, 1); } } v59 = v9; InterlockedIncrement((volatile LONG *)v9 + 1); } v50 = sub_671760(v54 + 49, (char *)v56); sub_96BA80(v54 + 49, (int)&v53, v50, 0); if ( (_BYTE)v54 ) { LOBYTE(v60) = 2; sub_691DA0((void **)v56); LOBYTE(v60) = 0; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); if ( (unsigned int)a7 >= 0x10 ) operator delete(Src); result = 1; } else { (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); LOBYTE(v60) = 2; sub_691DA0((void **)v56); LOBYTE(v60) = 0; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) (**(void (__thiscall ***)(float *, signed int))v9)(v9, 1); if ( (unsigned int)a7 >= 0x10 ) operator delete(Src); result = 5; } return result; } // AB79C8: using guessed type int dword_AB79C8; // AB79CC: using guessed type int dword_AB79CC; // AB79D0: using guessed type int dword_AB79D0; // AB79D4: using guessed type int dword_AB79D4; // AB79D8: using guessed type int dword_AB79D8; // AB79DC: using guessed type int dword_AB79DC; // AB79E0: using guessed type int dword_AB79E0; // AB79E4: using guessed type int dword_AB79E4; // AB79E8: using guessed type int dword_AB79E8; // AB7A78: using guessed type int dword_AB7A78; // AB7A7C: using guessed type int dword_AB7A7C; // AB7A94: using guessed type int dword_AB7A94; // AB7A98: using guessed type int dword_AB7A98; // AB7AB0: using guessed type int dword_AB7AB0; // AB7AB4: using guessed type int dword_AB7AB4; // AB7ACC: using guessed type int dword_AB7ACC; // AB7AD0: using guessed type int dword_AB7AD0; //----- (006DF1B0) -------------------------------------------------------- _DWORD *__thiscall sub_6DF1B0(_DWORD *this, int a2, void *a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD *v9; // ebx _DWORD *v10; // esi int *v11; // eax int v12; // edi unsigned int v13; // ebx int v14; // eax int v15; // edx unsigned __int8 *v16; // ecx int v17; // eax bool v18; // sf int *v19; // eax bool v20; // cf int v21; // eax _DWORD *v23; // [esp+10h] [ebp-18h] int *v24; // [esp+14h] [ebp-14h] _DWORD *v25; // [esp+18h] [ebp-10h] int v26; // [esp+24h] [ebp-4h] v9 = (_DWORD *)a2; v23 = this; v25 = (_DWORD *)a2; v24 = 0; v26 = 0; v10 = this + 49; v11 = sub_4F1D20(this + 49, (int)&a3); v12 = v10[1]; v24 = v11; if ( v11 == (int *)v12 ) goto LABEL_14; v13 = v11[7]; v14 = (int)(v11 + 3); if ( *(_DWORD *)(v14 + 20) >= 0x10u ) v14 = *(_DWORD *)v14; v15 = a7; if ( a7 >= v13 ) v15 = v13; v16 = (unsigned __int8 *)a3; if ( (unsigned int)a8 < 0x10 ) v16 = (unsigned __int8 *)&a3; v17 = sub_40C0B0(v16, (unsigned __int8 *)v14, v15); v18 = v17 < 0; if ( v17 ) goto LABEL_11; if ( a7 >= v13 ) { v18 = (a7 != v13) < 0; LABEL_11: if ( !v18 ) { v9 = v25; v19 = (int *)&v24; goto LABEL_15; } } v9 = v25; LABEL_14: v25 = (_DWORD *)v12; v19 = (int *)&v25; LABEL_15: if ( *v19 == v23[50] ) { v20 = (unsigned int)a8 < 0x10; *v9 = 0; if ( !v20 ) operator delete(a3); } else { v21 = *(_DWORD *)sub_671910(v10, (int)&a3); *v9 = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); if ( (unsigned int)a8 >= 0x10 ) operator delete(a3); } return v9; } //----- (006DF2D0) -------------------------------------------------------- #error "6DF38D: positive sp value has been found (funcsize=67)" //----- (006DF580) -------------------------------------------------------- void __thiscall sub_6DF580(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi _DWORD *v5; // ST08_4 _DWORD *v6; // ST04_4 _DWORD *v7; // ST08_4 _DWORD *v8; // ST04_4 int *v9; // ST08_4 int *v10; // ST04_4 int v11; // edi int v12; // edi int v13; // edi _DWORD *v14; // [esp+10h] [ebp-18h] _DWORD *v15; // [esp+14h] [ebp-14h] _DWORD *v16; // [esp+18h] [ebp-10h] int v17; // [esp+24h] [ebp-4h] v1 = this; v16 = this; v2 = this[104]; v17 = 9; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[100]; LOBYTE(v17) = 8; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[64]; LOBYTE(v17) = 7; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v15 = v1 + 57; v5 = (_DWORD *)v1[58]; v6 = *(_DWORD **)v1[58]; LOBYTE(v17) = 10; sub_4E6DC0(v1 + 57, (int *)&v14, v6, v5); operator delete((void *)v1[58]); v14 = v1 + 53; v7 = (_DWORD *)v1[54]; v8 = *(_DWORD **)v1[54]; LOBYTE(v17) = 11; sub_6CDE90(v1 + 53, (int *)&v15, v8, v7); operator delete((void *)v1[54]); v14 = v1 + 49; v9 = (int *)v1[50]; v10 = *(int **)v1[50]; LOBYTE(v17) = 12; sub_6FEDB0(v1 + 49, &v15, v10, v9); operator delete((void *)v1[50]); v11 = v1[40]; LOBYTE(v17) = 3; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[39]; LOBYTE(v17) = 2; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = v1[38]; LOBYTE(v17) = 1; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); LOBYTE(v17) = 0; sub_6E47B0((int)(v1 + 25)); v17 = 13; v14 = v1 + 12; LOBYTE(v17) = 15; sub_8333D0(v1 + 12); LOBYTE(v17) = 14; sub_833170(v1 + 12); LOBYTE(v17) = 13; sub_6E2D40(v1 + 8); v17 = -1; sub_6E4030(v1); } //----- (006DF830) -------------------------------------------------------- void __thiscall sub_6DF830(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx _DWORD *v4; // eax int v5; // edi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // edi int v9; // eax int v10; // eax int v11; // [esp+0h] [ebp-40h] void *v12; // [esp+4h] [ebp-3Ch] int v13; // [esp+8h] [ebp-38h] int v14; // [esp+Ch] [ebp-34h] int v15; // [esp+10h] [ebp-30h] int v16; // [esp+14h] [ebp-2Ch] float v17; // [esp+18h] [ebp-28h] int v18; // [esp+1Ch] [ebp-24h] void *v19; // [esp+30h] [ebp-10h] int v20; // [esp+3Ch] [ebp-4h] v2 = this; v3 = 0; v20 = 0; if ( a2 ) { v4 = operator new(0xE8u); v19 = v4; LOBYTE(v20) = 1; if ( v4 ) v3 = sub_85A1C0(v4, 0); v5 = v2[39]; LOBYTE(v20) = 0; if ( (_DWORD *)v5 != v3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v2[39] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v6 = operator new(0xE8u); v19 = v6; LOBYTE(v20) = 2; if ( v6 ) v7 = sub_85A1C0(v6, 0); else v7 = 0; v8 = v2[40]; LOBYTE(v20) = 0; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v2[40] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)a2 + 116))(v2[40], 0); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)a2 + 116))(v2[39], 0); v19 = &v12; LODWORD(v17) = 15; v16 = 0; LOBYTE(v12) = 0; sub_4017F0((const void **)&v12, (const void **)&dword_AB7A68, 0, (void *)0xFFFFFFFF); v9 = v2[39]; v19 = &v11; v11 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); sub_6DF2D0(v11, v12, v13, v14, v15, v16, SLODWORD(v17), v18); v19 = &v12; LODWORD(v17) = 15; v16 = 0; LOBYTE(v12) = 0; sub_4017F0((const void **)&v12, (const void **)&dword_AB7A84, 0, (void *)0xFFFFFFFF); v10 = v2[40]; v19 = &v11; v11 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); sub_6DF2D0(v11, v12, v13, v14, v15, v16, SLODWORD(v17), v18); sub_6E1AC0(v2, (_DWORD *)v2[40]); sub_85BED0((_DWORD **)a2, 0.0, 1); sub_85C4D0((_DWORD *)a2); sub_85C6F0((_DWORD *)a2); v20 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); } } } //----- (006DFA50) -------------------------------------------------------- signed int __thiscall sub_6DFA50(_DWORD *this, int a2) { signed int result; // eax _DWORD *v3; // esi int v4; // eax _DWORD *v5; // eax int v6; // [esp-20h] [ebp-28h] char v7; // [esp-1Ch] [ebp-24h] int v8; // [esp-18h] [ebp-20h] int v9; // [esp-14h] [ebp-1Ch] int v10; // [esp-10h] [ebp-18h] int v11; // [esp-Ch] [ebp-14h] int v12; // [esp-8h] [ebp-10h] const CHAR *v13; // [esp-4h] [ebp-Ch] result = 1; v3 = this; if ( a2 == 1 ) { if ( this[37] == 1 ) { this[36] = 1; return result; } sub_67D370(dword_AD8EBC, 0); v13 = "mhSelectedObj::pkObj == NULL;\n"; v3[102] = 0; v3[103] = 0; OutputDebugStringA(v13); } else if ( a2 == 2 ) { sub_6DE220(this); v12 = 15; v11 = 0; v7 = 0; sub_4017F0((const void **)&v7, (const void **)&dword_AB7ABC, 0, (void *)0xFFFFFFFF); v4 = v3[40]; v6 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); sub_6DF2D0(v6, *(void **)&v7, v8, v9, v10, v11, v12, (int)v13); sub_46E3D0(11); } else if ( !a2 && this[36] == 2 ) { sub_46E3D0(0); v5 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4A5910(v5, 0); } if ( v3[37] == 2 && a2 == 1 ) { sub_6DE220(v3); if ( v3[36] == 2 ) sub_46E3D0(0); } v3[36] = a2; return 1; } //----- (006DFB70) -------------------------------------------------------- signed int __thiscall sub_6DFB70(_DWORD *this, void **a2, int a3, char a4) { int v4; // esi signed int result; // eax int v6; // eax int v7; // eax int v8; // edi int v9; // ebx int v10; // edi int *v11; // eax int v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax int v15; // ecx char *v16; // eax __int16 v17; // ax int v18; // [esp+4h] [ebp-8h] void **v19; // [esp+8h] [ebp-4h] v4 = (int)this; if ( !a2 ) { sub_6DE220(this); return 4; } v6 = sub_6E25A0((int)a2); v19 = (void **)v6; v7 = sub_6E2D00((_DWORD *)(v4 + 32), v6); v8 = dword_ACB230; v9 = *(_DWORD *)(v7 + 8); v18 = v7; if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(v7 + 8)) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v8 + 200) ) { v11 = (int *)(*(_DWORD *)(v8 + 196) + 4 * (unsigned __int16)v9); if ( *v11 ) v10 = *v11; else v10 = 0; } else { v10 = 0; } } else { v10 = 0; } v12 = sub_4A3DB0((unsigned __int8 *)(v10 + 2)); if ( !v12 || !v10 ) return 0; if ( !*(_BYTE *)(v12 + 145) ) { v13 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_492060(v13, (int)&unk_9F9428); return 0; } if ( *(_DWORD *)(v4 + 164) ) sub_6DE220((_DWORD *)v4); if ( sub_6DFA50((_DWORD *)v4, a3) != 1 ) return 0; *(_BYTE *)(v4 + 246) = a4; if ( a3 == 3 ) { *(_DWORD *)(v4 + 164) = v19; *(_DWORD *)(v4 + 164) = sub_6DC870((_DWORD *)v4, v19, (char *)(v18 + 16), 1, 1); if ( !sub_6DB7D0(v4) ) { v14 = (_DWORD *)sub_4B12C0(*(_DWORD *)(v18 + 64)); sub_6DC9E0(v14); } if ( *((_DWORD *)dword_AD8EBC + 1026) ) { v15 = *(_DWORD *)(v4 + 96); v16 = sub_6E11B0(); sub_67D370(v16, 0); } } else if ( a3 == 5 ) { v17 = *(_WORD *)(*((_DWORD *)dword_AD8EBC + 1026) + 548); *(_WORD *)(v4 + 244) = v17; if ( !v17 ) return 0; *(_DWORD *)(v4 + 164) = sub_6DC870((_DWORD *)v4, a2, (char *)&dword_AB7AF4, 1, 1); sub_6DC9E0(a2); } if ( *(_DWORD *)(v4 + 164) ) { sub_6DE280((_DWORD *)v4, a3); sub_46E3D0(3); result = 1; } else { *(_DWORD *)(v4 + 164) = 0; result = 8; } return result; } // ACB230: using guessed type int dword_ACB230; //----- (006DFD50) -------------------------------------------------------- signed int __userpurge sub_6DFD50@(int a1@, int a2@, int a3@, int a4@, int a5) { int v5; // esi int v6; // eax int v7; // eax int v8; // edi int v9; // ecx char *v10; // eax float v11; // ecx bool v12; // zf volatile LONG *v13; // eax void **v15; // [esp-1Ch] [ebp-34h] volatile LONG *v16; // [esp-14h] [ebp-2Ch] void *v17; // [esp-10h] [ebp-28h] int v18; // [esp-Ch] [ebp-24h] int v19; // [esp-8h] [ebp-20h] int v20; // [esp-4h] [ebp-1Ch] float v21; // [esp+0h] [ebp-18h] float v22; // [esp+4h] [ebp-14h] int v23; // [esp+8h] [ebp-10h] int v24; // [esp+Ch] [ebp-Ch] int v25; // [esp+10h] [ebp-8h] void **v26; // [esp+14h] [ebp-4h] v26 = (void **)a1; v25 = a2; v24 = a4; v5 = a1; v6 = *(_DWORD *)(a1 + 96); v23 = a3; sub_6DA590((_DWORD *)(a1 + 48), *(float *)&a5, v6); sub_6E4760(a5); if ( sub_6E1E70((_DWORD *)(v5 + 32), *(float *)&a5) == 14 ) { v7 = sub_6E1DA0((_DWORD *)(v5 + 32)); v8 = v7; if ( v7 ) { sub_6DB9E0(v5, v5, v7); sub_6E2320((_DWORD *)(v5 + 32), *(_DWORD *)(v8 + 4)); } } v9 = *(_DWORD *)(v5 + 96); v10 = sub_6E11B0(); (*(void (__thiscall **)(char *, int))(*(_DWORD *)v10 + 196))(v10, v23); if ( !*(_BYTE *)(v5 + 247) ) { if ( dword_B9E168 ) { if ( dword_B9E168 != 1 || !*(_DWORD *)(v5 + 164) ) goto LABEL_15; v26 = &v17; v16 = (volatile LONG *)-1; v15 = &dword_AB7AA0; } else { v12 = *(_DWORD *)(v5 + 144) == 2; v26 = &v17; v16 = (volatile LONG *)-1; if ( v12 ) v15 = &dword_AB7ABC; else v15 = &dword_AB7A84; } LODWORD(v22) = 15; v21 = 0.0; LOBYTE(v17) = 0; sub_4017F0((const void **)&v17, (const void **)v15, 0, (void *)v16); v13 = *(volatile LONG **)(v5 + 160); v26 = (void **)&v16; v16 = v13; if ( v13 ) InterlockedIncrement(v13 + 1); sub_6DF2D0((int)v16, v17, v18, v19, v20, SLODWORD(v21), SLODWORD(v22), v23); } LABEL_15: v23 = 1; v22 = v11; sub_85BED0(*(_DWORD ***)(v5 + 152), *(float *)&a5, 1); return 1; } // 6DFD50: could not find valid save-restore pair for ebx // 6DFD50: could not find valid save-restore pair for edi // 6DFD50: could not find valid save-restore pair for esi // B9E168: using guessed type int dword_B9E168; //----- (006DFF90) -------------------------------------------------------- signed int __thiscall sub_6DFF90(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // esi _DWORD *v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // edi _DWORD *v7; // eax _DWORD *v8; // ecx char *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // edi _DWORD *v12; // eax _DWORD *v13; // eax char *v14; // [esp-1Ch] [ebp-3Ch] int v15; // [esp-18h] [ebp-38h] int v16; // [esp-14h] [ebp-34h] int v17; // [esp-10h] [ebp-30h] int v18; // [esp-Ch] [ebp-2Ch] int v19; // [esp-8h] [ebp-28h] signed int v20; // [esp-4h] [ebp-24h] void *v21; // [esp+10h] [ebp-10h] int v22; // [esp+1Ch] [ebp-4h] v2 = this; v22 = 0; if ( sub_6E3900(this) == 1 && sub_6E2010(v2 + 8) == 1 ) sub_8333D0(v2 + 12); memset(v2 + 65, 0, 0x85u); if ( !a2 ) return 2; v4 = operator new(0xE8u); v21 = v4; LOBYTE(v22) = 1; if ( v4 ) { v5 = sub_85A1C0(v4, 0); v21 = (void *)v5; } else { v21 = 0; v5 = 0; } v6 = (volatile LONG *)v2[38]; LOBYTE(v22) = 0; if ( v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v5 = (volatile LONG *)v21; } v2[38] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD))(*a2 + 116))(v2[38], 0); v21 = &v14; v19 = 15; v18 = 0; LOBYTE(v14) = 0; sub_4017F0((const void **)&v14, (const void **)&dword_AB7A84, 0, (void *)0xFFFFFFFF); sub_6DEC00(v2, v14, v15, v16, v17, v18, v19, v20); v21 = &v14; v19 = 15; v18 = 0; LOBYTE(v14) = 0; sub_4017F0((const void **)&v14, (const void **)&dword_AB7AA0, 0, (void *)0xFFFFFFFF); sub_6DEC00(v2, v14, v15, v16, v17, v18, v19, v20); v21 = &v14; v19 = 15; v18 = 0; LOBYTE(v14) = 0; sub_4017F0((const void **)&v14, (const void **)&dword_AB7A68, 0, (void *)0xFFFFFFFF); sub_6DEC00(v2, v14, v15, v16, v17, v18, v19, v20); v21 = &v14; v19 = 15; v18 = 0; LOBYTE(v14) = 0; sub_4017F0((const void **)&v14, (const void **)&dword_AB7ABC, 0, (void *)0xFFFFFFFF); sub_6DEC00(v2, v14, v15, v16, v17, v18, v19, v20); if ( v2[36] == 2 ) { sub_46E3D0(0); v20 = 0; v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4A5910(v7, v20); } v8 = (_DWORD *)v2[38]; v2[36] = 0; sub_85C6F0(v8); sub_85C4D0((_DWORD *)v2[38]); if ( !byte_ACAD5C ) sub_420410(); v20 = 1; v19 = 0; v9 = (char *)sub_401410(byte_ACA838, "FurnitureSelectEffect.nif"); v10 = sub_8F63D0(v9, v19); v11 = (volatile LONG *)v2[104]; v21 = (void *)v10; if ( v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement(v11 + 1) && v11 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v11)(v11, 1); v10 = (volatile LONG *)v21; } v2[104] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v12 = operator new(0x10u); v21 = v12; LOBYTE(v22) = 2; if ( v12 ) v13 = sub_6E1030(v12); else v13 = 0; v2[24] = v13; v22 = -1; if ( a2 && !InterlockedDecrement(a2 + 1) ) { if ( a2 ) (**(void (__thiscall ***)(volatile LONG *, signed int))a2)(a2, 1); } return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006E0250) -------------------------------------------------------- signed int __thiscall sub_6E0250(int this, char a2) { int v2; // esi const CHAR *v3; // eax const CHAR *v5; // [esp+4h] [ebp-Ch] v2 = this; *(_WORD *)(this + 444) = -1; if ( a2 == 1 ) { *(_DWORD *)(this + 148) = 2; sub_67D370(dword_AD8EBC, 0); v5 = "mhSelectedObj::pkObj == NULL;\n"; *(_DWORD *)(v2 + 408) = 0; *(_DWORD *)(v2 + 412) = 0; OutputDebugStringA(v5); if ( *(_DWORD *)(v2 + 148) == 2 ) { sub_6DE220((_DWORD *)v2); if ( *(_DWORD *)(v2 + 144) == 2 ) sub_46E3D0(0); } *(_DWORD *)(v2 + 144) = 1; } else { *(_DWORD *)(this + 148) = 1; *(_DWORD *)(this + 144) = 1; } if ( sub_6E3900((_DWORD *)v2) == 1 && sub_6E2010((_DWORD *)(v2 + 32)) == 1 ) sub_8333D0((_DWORD *)(v2 + 48)); v3 = *(const CHAR **)(v2 + 152); v5 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); sub_6DF830((_DWORD *)v2, (int)v5); v5 = "mhSelectedObj::pkObj == NULL;\n"; *(_DWORD *)(v2 + 408) = 0; *(_DWORD *)(v2 + 412) = 0; OutputDebugStringA(v5); v5 = (const CHAR *)1; sub_85BED0(*(_DWORD ***)(v2 + 156), 0.0, 1); sub_85C6F0(*(_DWORD **)(v2 + 156)); sub_85C4D0(*(_DWORD **)(v2 + 156)); return 1; } //----- (006E0370) -------------------------------------------------------- signed int __thiscall sub_6E0370(char *this) { char *v1; // esi _DWORD ***v2; // eax _DWORD *v3; // eax int v4; // eax int v5; // eax int v6; // eax bool v7; // zf int v9; // [esp-20h] [ebp-2Ch] void *v10; // [esp-1Ch] [ebp-28h] int v11; // [esp-18h] [ebp-24h] int v12; // [esp-14h] [ebp-20h] int v13; // [esp-10h] [ebp-1Ch] int v14; // [esp-Ch] [ebp-18h] int v15; // [esp-8h] [ebp-14h] const CHAR *v16; // [esp-4h] [ebp-10h] void **v17; // [esp+8h] [ebp-4h] v1 = this; if ( (*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 440))() == 4 ) sub_67CD10(dword_AD8EBC); v2 = (_DWORD ***)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4E2C80(v2, 0); (*(void (**)(void))(*(_DWORD *)dword_AD8EBC + 340))(); sub_6DE220(v1); sub_6DC340(v1); if ( sub_6E3900(v1) == 1 && sub_6E2010((_DWORD *)v1 + 8) == 1 ) sub_8333D0((_DWORD *)v1 + 12); if ( *((_DWORD *)v1 + 36) == 2 ) { sub_46E3D0(0); v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4A5910(v3, 0); } *((_DWORD *)v1 + 36) = 0; sub_6DBDD0(v1); if ( v1[248] ) { v4 = *((_DWORD *)v1 + 63); v1[248] = 0; if ( v4 != -1 ) { v5 = sub_6E2400((_DWORD *)v1 + 8, v4); sub_6DCAC0(v1, v5, v1[248]); } } v17 = &v10; v15 = 15; v14 = 0; LOBYTE(v10) = 0; sub_4017F0((const void **)&v10, (const void **)&dword_AB7A84, 0, (void *)0xFFFFFFFF); v6 = *((_DWORD *)v1 + 40); v17 = (void **)&v9; v9 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); sub_6DF2D0(v9, v10, v11, v12, v13, v14, v15, (int)v16); v7 = *((_DWORD *)v1 + 63) == -1; v1[247] = 0; if ( !v7 ) *((_DWORD *)v1 + 63) = -1; sub_686010((int *)&byte_ADA230); sub_668390(*((_DWORD **)v1 + 24)); v16 = "mhSelectedObj::pkObj == NULL;\n"; *((_DWORD *)v1 + 102) = 0; *((_DWORD *)v1 + 103) = 0; OutputDebugStringA(v16); return 1; } // ADA230: using guessed type char byte_ADA230; //----- (006E04F0) -------------------------------------------------------- char __thiscall sub_6E04F0(_DWORD *this, int a2) { const CHAR *v3; // [esp-4h] [ebp-4h] if ( !a2 ) { *this = 0; this[1] = 0; OutputDebugStringA("mhSelectedObj::pkObj == NULL;\n"); return 0; } if ( *this ) { if ( *(_DWORD *)(a2 + 4) == *(_DWORD *)(*this + 4) ) { this[1] = 2; OutputDebugStringA("mhSelectedObj::pkObj = m_Object DBLClick;\n"); return 1; } v3 = "mhSelectedObj::pkObj Change = m_Object FirstClick;\n"; } else { v3 = "mhSelectedObj::pkObj NULL= m_Object FirstClick;\n"; } *this = a2; this[1] = 1; OutputDebugStringA(v3); return 1; } //----- (006E0560) -------------------------------------------------------- _DWORD *__thiscall sub_6E0560(_DWORD *this, int a2) { _DWORD *result; // eax result = this; *this = &Party::`vftable'; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); this[6] = *(_DWORD *)(a2 + 24); this[7] = *(_DWORD *)(a2 + 28); this[8] = *(_DWORD *)(a2 + 32); this[9] = *(_DWORD *)(a2 + 36); this[10] = *(_DWORD *)(a2 + 40); this[11] = *(_DWORD *)(a2 + 44); this[12] = *(_DWORD *)(a2 + 48); this[13] = *(_DWORD *)(a2 + 52); *((_BYTE *)this + 56) = *(_BYTE *)(a2 + 56); *(_DWORD *)((char *)this + 57) = *(_DWORD *)(a2 + 57); *(_DWORD *)((char *)this + 61) = *(_DWORD *)(a2 + 61); *(_DWORD *)((char *)this + 65) = *(_DWORD *)(a2 + 65); *(_DWORD *)((char *)this + 69) = *(_DWORD *)(a2 + 69); *(_DWORD *)((char *)this + 73) = *(_DWORD *)(a2 + 73); *((float *)this + 20) = *(float *)(a2 + 80); this[21] = *(_DWORD *)(a2 + 84); qmemcpy(this + 22, (const void *)(a2 + 88), 0x155u); this[108] = *(_DWORD *)(a2 + 432); return result; } // 9F88D4: using guessed type void *Party::`vftable'; //----- (006E0620) -------------------------------------------------------- int sub_6E0620() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD92C + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD92C: using guessed type int dword_ACD92C; //----- (006E0640) -------------------------------------------------------- void __thiscall sub_6E0640(int this) { int v1; // esi int v2; // edi _DWORD *v3; // ecx int v4; // edi v1 = this; if ( *(_BYTE *)(this + 12) && *(_DWORD *)(this + 8) ) { v2 = *(_DWORD *)(this + 8); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } *(_DWORD *)(v1 + 8) = 0; } *(_BYTE *)(v1 + 12) = 0; } else { v3 = *(_DWORD **)(this + 4); if ( v3 ) { sub_8591D0(v3); sub_6AA6F0(*(_DWORD **)(v1 + 4)); v4 = *(_DWORD *)(v1 + 4); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 4) = 0; } } } } //----- (006E06D0) -------------------------------------------------------- _DWORD *__thiscall sub_6E06D0(_DWORD **this) { _DWORD **v1; // edi _DWORD *result; // eax _DWORD *v3; // esi v1 = this; result = sub_8F9E00(&unk_BA6B10, this[100]); v3 = v1[100]; if ( v3 ) { result = (_DWORD *)InterlockedDecrement(v3 + 1); if ( !result ) { if ( v3 ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); } v1[100] = 0; } return result; } //----- (006E0720) -------------------------------------------------------- _DWORD *__stdcall sub_6E0720(_DWORD *a1) { sub_6E0560(a1, (int)&dword_B9DC70); return a1; } // B9DC70: using guessed type int dword_B9DC70; //----- (006E0750) -------------------------------------------------------- int __cdecl sub_6E0750(__int16 a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi v1 = *(_DWORD *)(dword_ACD924 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( *(_WORD *)sub_7474E0((_DWORD *)(dword_ACD924 + 4), v3) != a1 ) { if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD924 + 4), v3); } // ACD924: using guessed type int dword_ACD924; //----- (006E07B0) -------------------------------------------------------- int __cdecl sub_6E07B0(unsigned __int8 *a1) { int v1; // eax unsigned int v2; // edi unsigned int v3; // esi int v4; // eax v1 = *(_DWORD *)(dword_ACD924 + 56); if ( v1 ) v2 = *(_DWORD *)(v1 + 40); else v2 = 0; v3 = 0; if ( !v2 ) return 0; while ( 1 ) { v4 = sub_7474E0((_DWORD *)(dword_ACD924 + 4), v3); if ( !_mbscmp((const unsigned __int8 *)(v4 + 2), a1) ) break; if ( ++v3 >= v2 ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD924 + 4), v3); } // ACD924: using guessed type int dword_ACD924; //----- (006E0820) -------------------------------------------------------- _WORD *__cdecl sub_6E0820(__int16 a1) { unsigned int v1; // esi _WORD *result; // eax v1 = 0; if ( !sub_6E0620() ) return 0; while ( 1 ) { result = (_WORD *)sub_7474E0((_DWORD *)(dword_ACD92C + 4), v1); if ( *result == a1 ) break; if ( ++v1 >= sub_6E0620() ) return 0; } return result; } // ACD92C: using guessed type int dword_ACD92C; //----- (006E0860) -------------------------------------------------------- int __cdecl sub_6E0860(__int16 a1, int a2) { unsigned int v2; // esi int result; // eax v2 = 0; if ( !sub_4EA850() ) return 0; while ( 1 ) { result = sub_7474E0((_DWORD *)(dword_ACD934 + 4), v2); if ( *(_WORD *)result == a1 && *(unsigned __int8 *)(result + 3) == a2 ) break; if ( ++v2 >= sub_4EA850() ) return 0; } return result; } // ACD934: using guessed type int dword_ACD934; //----- (006E08B0) -------------------------------------------------------- void __thiscall sub_6E08B0(void *this) { *(_DWORD *)this = &ResElement::`vftable'; *((_DWORD *)this + 1) = 0; *((_DWORD *)this + 2) = 0; *((_BYTE *)this + 12) = 0; *((_DWORD *)this + 9) = 15; *((_DWORD *)this + 8) = 0; *((_BYTE *)this + 16) = 0; } // 9F974C: using guessed type void *ResElement::`vftable'; //----- (006E08E0) -------------------------------------------------------- void __thiscall sub_6E08E0(void *this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // esi v1 = (void **)this; *(_DWORD *)this = &ResElement::`vftable'; sub_6E0640((int)this); if ( (unsigned int)v1[9] >= 0x10 ) operator delete(v1[4]); v1[9] = (void *)15; v1[8] = 0; *((_BYTE *)v1 + 16) = 0; v2 = (volatile LONG *)v1[2]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); v3 = (volatile LONG *)v1[1]; if ( v3 && !InterlockedDecrement(v3 + 1) ) { if ( v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); } } // 9F974C: using guessed type void *ResElement::`vftable'; //----- (006E09B0) -------------------------------------------------------- void *__thiscall sub_6E09B0(void *this, char a2) { void *v2; // esi v2 = this; sub_6E08E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006E09E0) -------------------------------------------------------- _DWORD *__thiscall sub_6E09E0(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; this[2] = 0; *((_BYTE *)this + 12) = 0; this[8] = 0; this[9] = 15; *((_BYTE *)this + 16) = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; *this = &mhResTableElement::`vftable'; *((_WORD *)this + 30) = -1; this[16] = -1; return result; } // 9F9754: using guessed type void *mhResTableElement::`vftable'; //----- (006E0A20) -------------------------------------------------------- void *__thiscall sub_6E0A20(void *this, char a2) { void *v2; // esi v2 = this; sub_6E38F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006E0A50) -------------------------------------------------------- int **__thiscall sub_6E0A50(_DWORD *this, int **a2, _WORD *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 17) ) { if ( *((_WORD *)v4 + 6) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_WORD *)v3 + 6) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (006E0AC0) -------------------------------------------------------- int __thiscall sub_6E0AC0(_DWORD *this, int a2, void *a3, int a4) { _WORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned __int16 v10; // di int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 17) ) { v10 = *((_WORD *)a3 + 6); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v7 + 12) >= v10; else v9 = v10 < *(_WORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 17) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_8DDD00(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_67A6C0(&a4); v11 = a4; v4 = a3; } if ( *(_WORD *)(v11 + 12) >= v4[6] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_8DDD00(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006E0BA0) -------------------------------------------------------- int __thiscall sub_6E0BA0(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _WORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_8DDD00(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_WORD *)a4 + 6) < *(_WORD *)(a3 + 12) ) { sub_8DDD00(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_WORD *)(v8 + 12) < *((_WORD *)a4 + 6) ) { sub_8DDD00(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_WORD *)a4 + 6) >= *(_WORD *)(a3 + 12) || (a4 = (void *)a3, sub_67A6C0(&a4), *((_WORD *)a4 + 6) >= v6[6]) ) { if ( *(_WORD *)(a3 + 12) >= v6[6] || (a4 = (void *)a3, sub_8DDBD0(&a4), a4 != (void *)v4[1]) && v6[6] >= *((_WORD *)a4 + 6) ) { LABEL_22: v9 = *(_DWORD *)sub_6E0AC0(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 17) ) sub_8DDD00(v4, a2, 0, a3, v6); else sub_8DDD00(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 17) ) sub_8DDD00(v4, a2, 0, (int)a4, v6); else sub_8DDD00(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (006E0D10) -------------------------------------------------------- _DWORD *__thiscall sub_6E0D10(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // esi void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x14u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 8) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_WORD *)result + 6) = *(_WORD *)a2; *((_BYTE *)result + 14) = v4[2]; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006E0D80) -------------------------------------------------------- int __thiscall sub_6E0D80(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi _DWORD *v6; // eax v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 17) ) { if ( *(_WORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_WORD *)(v5 + 12) ) return v5 + 14; LOWORD(a2) = *a2; BYTE2(a2) = 0; v6 = sub_6E0D10(v2, (char *)&a2); sub_6E0BA0(v2, (int)&a2, v5, v6); return (int)(a2 + 7); } //----- (006E0E00) -------------------------------------------------------- int __thiscall sub_6E0E00(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x7FFFFFE ) { sub_671200((int)this + 13, (int)a5 + 12); operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 44) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 44) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 45) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 45) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v13 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 44) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 45) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 45) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 44) = 1; *(_BYTE *)(v22 + 44) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 44) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 44) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 44) = 1; return result; } //----- (006E1030) -------------------------------------------------------- _DWORD *__thiscall sub_6E1030(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+4h] [ebp-10h] char *v5; // [esp+10h] [ebp-4h] v1 = this; this[2] = 0; v2 = operator new(0x18u); if ( !v2 ) { v5 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v5); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[1] = v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; *(_DWORD *)(v1[1] + 8) = v1[1]; *(_BYTE *)(v1[1] + 20) = 1; *(_BYTE *)(v1[1] + 21) = 1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006E10C0) -------------------------------------------------------- char __stdcall sub_6E10C0(__int16 a1, int a2) { __int16 v2; // ax v2 = a2; LOWORD(a2) = a1; HIWORD(a2) = v2; return sub_6F3D10(&off_AB7F2C, 35, 64, &a2, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E10F0) -------------------------------------------------------- char __stdcall sub_6E10F0(__int16 a1, float a2, int a3) { char v4; // [esp+0h] [ebp-104h] __int16 v5; // [esp+1h] [ebp-103h] float v6; // [esp+3h] [ebp-101h] float v7; // [esp+7h] [ebp-FDh] float v8; // [esp+Bh] [ebp-F9h] float v9; // [esp+Fh] [ebp-F5h] memset(&v5, 0, 0xFFu); v9 = a2; v6 = *(float *)a3; v7 = *(float *)(a3 + 4); v8 = *(float *)(a3 + 8); v5 = a1; v4 = 1; return sub_6F3D10(&off_AB7F2C, 35, 34, &v4, 0x16u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E1180) -------------------------------------------------------- char __stdcall sub_6E1180(int a1) { char result; // al result = a1; if ( a1 ) { if ( a1 != 1 ) { HIBYTE(a1) = 0; result = sub_6F3D10(&off_AB7F2C, 35, 26, (char *)&a1 + 3, 1u); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E11B0) -------------------------------------------------------- char *sub_6E11B0() { return dword_AD8EBC; } //----- (006E11C0) -------------------------------------------------------- char __stdcall sub_6E11C0(__int16 a1, float a2, int a3) { char v4; // [esp+0h] [ebp-104h] __int16 v5; // [esp+1h] [ebp-103h] float v6; // [esp+3h] [ebp-101h] float v7; // [esp+7h] [ebp-FDh] float v8; // [esp+Bh] [ebp-F9h] float v9; // [esp+Fh] [ebp-F5h] memset(&v5, 0, 0xFFu); v6 = *(float *)a3; v7 = *(float *)(a3 + 4); v8 = *(float *)(a3 + 8); v5 = a1; v9 = a2; v4 = 1; return sub_6F3D10(&off_AB7F2C, 35, 31, &v4, 0x16u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E1250) -------------------------------------------------------- char sub_6E1250() { int v0; // eax float v1; // ST18_4 float v2; // ST1C_4 int v3; // ST20_4 int v4; // eax int v5; // ST14_4 float v6; // ST0C_4 float v7; // ST10_4 char result; // al int v9; // [esp+0h] [ebp-38h] int v10; // [esp+24h] [ebp-14h] int v11; // [esp+28h] [ebp-10h] int v12; // [esp+2Ch] [ebp-Ch] int v13; // [esp+30h] [ebp-8h] v0 = (*(int (__stdcall **)(int))(*(_DWORD *)dword_AD8EBC + 196))(v9); v1 = *(float *)v0; v2 = *(float *)(v0 + 4); v3 = *(_DWORD *)(v0 + 8); v4 = sub_67B5C0(dword_AD8EBC); v5 = *(_DWORD *)(v4 + 8); v6 = *(float *)v4; v7 = *(float *)(v4 + 4); v10 = (signed __int64)v1; v11 = (signed __int64)v2; v12 = (signed __int64)v6; v13 = (signed __int64)v7; if ( (*(int (__cdecl **)(float, int))(*(_DWORD *)dword_AD8EBC + 224))(COERCE_FLOAT(LODWORD(v7)), v5) ) result = sub_6F3D10(&off_AB7F2C, 8, 25, &v10, 0x10u); else result = sub_6F3D10(&off_AB7F2C, 8, 23, &v10, 0x10u); return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E1360) -------------------------------------------------------- char __stdcall sub_6E1360(__int16 a1) { char v2; // [esp+0h] [ebp-84h] __int16 v3; // [esp+1h] [ebp-83h] memset(&v3, 0, 0x7Fu); v3 = a1; v2 = 1; return sub_6F3D10(&off_AB7F2C, 35, 37, &v2, 6u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E13C0) -------------------------------------------------------- char __stdcall sub_6E13C0(__int16 a1, float *a2) { __int16 v3; // [esp+10h] [ebp-10h] int v4; // [esp+12h] [ebp-Eh] int v5; // [esp+16h] [ebp-Ah] v3 = a1; if ( !sub_664AB0(dword_AD8C90, a1) ) return 0; v4 = (signed __int64)*a2; v5 = (signed __int64)a2[1]; sub_6F3D10(&off_AB7F2C, 35, 40, &v3, 0xAu); return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E1470) -------------------------------------------------------- char __thiscall sub_6E1470(_DWORD *this, __int16 a2, __int16 a3) { _DWORD *v3; // esi DWORD v4; // edi char result; // al int v6; // ebx _DWORD *v7; // eax char v8[2]; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] __int16 v10; // [esp+14h] [ebp-4h] __int16 v11; // [esp+16h] [ebp-2h] v3 = this; v4 = timeGetTime(); result = (unsigned int)sub_4A3E20(v3, (int **)&v9, &a3); v6 = v9; if ( v9 == v3[1] ) { *(_WORD *)v8 = a3; v9 = v4; v7 = sub_67FF90(v3, v8); sub_6E19E0(v3, (int)v8, v7, 0); } else if ( v4 <= *(_DWORD *)(v9 + 16) + 1500 ) { return result; } v11 = a3; v10 = a2; result = sub_6F3D10(&off_AB7F2C, 35, 61, &v10, 4u); *(_DWORD *)(v6 + 16) = v4; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006E1500) -------------------------------------------------------- int __thiscall sub_6E1500(_DWORD *this) { int result; // eax *(_WORD *)this = -1; result = 0; this[9] = 0; *(_DWORD *)((char *)this + 2) = 0; *(_DWORD *)((char *)this + 6) = 0; *(_DWORD *)((char *)this + 10) = 0; *(_DWORD *)((char *)this + 14) = 0; *(_DWORD *)((char *)this + 18) = 0; *(_DWORD *)((char *)this + 22) = 0; *(_DWORD *)((char *)this + 26) = 0; *(_DWORD *)((char *)this + 30) = 0; this[10] = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; *((_BYTE *)this + 60) = 0; return result; } //----- (006E1550) -------------------------------------------------------- int __thiscall sub_6E1550(_DWORD *this, char a2) { _DWORD *v2; // ebx _DWORD *v3; // esi int *v4; // edi int **v5; // eax int *j; // eax int i; // eax _DWORD *v9; // [esp+8h] [ebp-4h] v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v9 = this; if ( (_DWORD *)*v2 != v2 ) { do { v4 = (int *)v3[4]; if ( a2 == 1 ) sub_69CB00((_DWORD **)byte_ADB468, v4[9]); if ( v4 ) operator delete(v4); if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != v2 ); this = v9; } return sub_668390(this); } //----- (006E15E0) -------------------------------------------------------- signed __int16 __thiscall sub_6E15E0(_DWORD *this, int a2) { _DWORD *v2; // edx _DWORD *v3; // ecx _DWORD *v4; // eax int **v5; // eax int *j; // eax int i; // eax v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 == v2 ) return -1; while ( 1 ) { v4 = (_DWORD *)v3[4]; if ( v4 ) { if ( v4[9] == a2 ) break; } if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } if ( v3 == v2 ) return -1; } return *(_WORD *)v4; } //----- (006E1670) -------------------------------------------------------- char __thiscall sub_6E1670(_DWORD *this, char a2) { _DWORD *v2; // edi int v3; // ebx int *v4; // esi int v6; // [esp+8h] [ebp-4h] v2 = this; sub_4A3E20(this, (int **)&v6, &a2); v3 = v6; if ( v6 == v2[1] ) return 0; v4 = *(int **)(v6 + 16); sub_69CB00((_DWORD **)byte_ADB468, v4[9]); operator delete(v4); sub_6CDBF0(v2, (int *)&a2, v3); return 1; } //----- (006E1730) -------------------------------------------------------- char __thiscall sub_6E1730(_DWORD *this, __int16 *a2) { _DWORD *v2; // edi int v4; // eax int v5; // ebx int *v6; // eax int *v7; // eax char *v8; // edi __int16 v9; // ax _DWORD *v10; // eax float v11; // ST04_4 float v12; // ST00_4 int v13; // [esp+8h] [ebp-50h] int v14; // [esp+18h] [ebp-40h] int v15; // [esp+1Ch] [ebp-3Ch] int v16; // [esp+20h] [ebp-38h] _DWORD *v17; // [esp+24h] [ebp-34h] char v18[2]; // [esp+28h] [ebp-30h] unsigned int v19; // [esp+2Ch] [ebp-2Ch] char v20; // [esp+30h] [ebp-28h] v2 = this; v17 = this; if ( *a2 == -1 ) return 0; v4 = sub_66C5D0(&unk_AD8D28, (unsigned __int16)a2[1]); v5 = v4; if ( !v4 ) return 0; v13 = v4; if ( byte_AB66DA ) { v6 = sub_661CD0(); sub_6615F0((char *)v6, v13); } else { v7 = sub_661CD0(); sub_661D40((int)v7, v13); } sub_4A3E20(v2, (int **)&v19, a2); if ( v19 != v2[1] ) sub_6E1670(v2, *a2); v8 = (char *)operator new(0x40u); if ( !v8 ) return 0; *(_DWORD *)(v8 + 30) = 0; *(_DWORD *)(v8 + 26) = 0; *(_DWORD *)(v8 + 22) = 0; *(_DWORD *)(v8 + 18) = 0; *(_DWORD *)(v8 + 14) = 0; sub_6E1500(v8); *(_WORD *)v8 = *a2; *(_DWORD *)(v8 + 14) = *(_DWORD *)(a2 + 7); *(_DWORD *)(v8 + 18) = *(_DWORD *)(a2 + 9); *(_DWORD *)(v8 + 22) = *(_DWORD *)(a2 + 11); *(_DWORD *)(v8 + 26) = *(_DWORD *)(a2 + 13); *(_DWORD *)(v8 + 30) = *(_DWORD *)(a2 + 15); *(_DWORD *)(v8 + 2) = *(_DWORD *)(a2 + 1); *(_DWORD *)(v8 + 6) = *(_DWORD *)(a2 + 3); *(_DWORD *)(v8 + 10) = *(_DWORD *)(a2 + 5); v19 = (unsigned int)(a2 + 22); strncpy(v8 + 40, (const char *)a2 + 43, strlen((const char *)a2 + 43)); sub_85AB50((void **)v5, (char *)v17[4]); *((_DWORD *)v8 + 9) = v5; v9 = *a2; v19 = (unsigned int)v8; *(_WORD *)v18 = v9; v10 = sub_67FF90(v17, v18); sub_6E19E0(v17, (int)v18, v10, 0); v11 = (double)*(unsigned int *)(a2 + 19); v12 = (double)*(unsigned int *)(a2 + 17); sub_69AD10((float *)byte_ADB468, v12, v11, (int)&v14); *(_DWORD *)(v5 + 88) = v14; *(_DWORD *)(v5 + 92) = v15; *(_DWORD *)(v5 + 96) = v16; v19 = ((unsigned int)*((unsigned __int8 *)a2 + 42) + 90) % 0xB4; *(float *)&v19 = (double)(signed int)v19 * (flt_BA45B4 + flt_BA45B4) / 180.0; sub_85D510((float *)&v20); sub_85D810((float *)&v20, *(float *)&v19); qmemcpy((void *)(v5 + 52), &v20, 0x24u); sub_69CAB0((_DWORD **)byte_ADB468, (_DWORD **)v5); return 1; } // AB66DA: using guessed type char byte_AB66DA; // BA45B4: using guessed type float flt_BA45B4; //----- (006E19E0) -------------------------------------------------------- int __thiscall sub_6E19E0(_DWORD *this, int a2, void *a3, int a4) { _WORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned __int16 v10; // di int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 21) ) { v10 = *((_WORD *)a3 + 6); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_WORD *)(v7 + 12) >= v10; else v9 = v10 < *(_WORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( *(_WORD *)(v11 + 12) >= v4[6] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_6A0F70(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006E1AC0) -------------------------------------------------------- signed int __thiscall sub_6E1AC0(_DWORD *this, _DWORD *a2) { sub_6DA530(this + 12, a2); return 1; } //----- (006E1B10) -------------------------------------------------------- BOOL __thiscall sub_6E1B10(int this, __int16 a2, __int16 a3) { int v3; // eax _DWORD *v4; // eax BOOL result; // eax v3 = *(_DWORD *)(this + 64); result = 0; if ( v3 && *(_BYTE *)(v3 + 12) && *(_DWORD *)(v3 + 8) ) { v4 = (_DWORD *)(*(_BYTE *)(v3 + 12) ? *(_DWORD *)(v3 + 8) : 0); if ( sub_6E3700((_WORD *)(this + 72), a2, a3, v4) ) result = 1; } return result; } //----- (006E1BC0) -------------------------------------------------------- int __thiscall sub_6E1BC0(_DWORD *this, float a2) { int v2; // eax int result; // eax v2 = this[16]; if ( *(_BYTE *)(v2 + 12) ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(this[18] + 4))(LODWORD(a2), *(_DWORD *)(v2 + 8)) != 10002 ? 1 : 10002; else result = 0; return result; } //----- (006E1C00) -------------------------------------------------------- int __thiscall sub_6E1C00(_DWORD *this, float a2) { _DWORD *v2; // ebx int v3; // eax int v4; // ecx int v5; // eax int v6; // eax int v7; // ecx _DWORD **v8; // ecx char v10; // [esp+10h] [ebp-28h] v2 = this; sub_85D510((float *)&v10); sub_85D810((float *)&v10, a2); v3 = v2[16]; if ( *(_BYTE *)(v3 + 12) && (v4 = *(_DWORD *)(v3 + 8)) != 0 ) v5 = *(_DWORD *)(v4 + 12); else v5 = *(_DWORD *)(v3 + 4); qmemcpy((void *)(v5 + 52), &v10, 0x24u); v6 = v2[16]; if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD ***)(v7 + 12); else v8 = *(_DWORD ***)(v6 + 4); sub_85BED0(v8, 0.0, 1); return 1; } //----- (006E1D70) -------------------------------------------------------- bool __stdcall sub_6E1D70(int a1) { return sub_4A3D40(*(_DWORD *)(a1 + 8), 10002, 0) != 0; } //----- (006E1DA0) -------------------------------------------------------- int __thiscall sub_6E1DA0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax _DWORD *v3; // esi int v4; // edi int v5; // eax int v6; // ecx int v7; // edx int v8; // ecx int *v9; // ecx int *v10; // eax int i; // eax v1 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 == v2 ) return 0; while ( 1 ) { v4 = v3[4]; if ( *(_BYTE *)(*(_DWORD *)(v4 + 64) + 12) == 1 ) { v5 = sub_4A3D40(*(_DWORD *)(v4 + 8), 10002, 0); if ( v5 ) { v6 = *(_DWORD *)(v4 + 64); v7 = *(_BYTE *)(v6 + 12) ? *(_DWORD *)(v6 + 8) : 0; if ( *(_DWORD *)(v5 + 7) == *(_DWORD *)(v7 + 28) ) { v8 = *(_BYTE *)(v6 + 12) ? *(_DWORD *)(v6 + 8) : 0; if ( !sub_6E36B0(10002, v8) ) break; } } } if ( !*((_BYTE *)v3 + 21) ) { v9 = (int *)v3[2]; if ( *((_BYTE *)v9 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v10 = (int *)*v9; if ( !*(_BYTE *)(*v9 + 21) ) { do { v9 = v10; v10 = (int *)*v10; } while ( !*((_BYTE *)v10 + 21) ); } v3 = v9; } } if ( v3 == (_DWORD *)v1[1] ) return 0; } return v3[4]; } //----- (006E1E70) -------------------------------------------------------- int __thiscall sub_6E1E70(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi signed int v5; // ebx int **v6; // eax int *j; // eax int i; // eax v2 = this; v3 = (_DWORD *)this[1]; v4 = (_DWORD *)*v3; v5 = 1; if ( (_DWORD *)*v3 != v3 ) { do { if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4[4] + 4))(LODWORD(a2)) == 10002 ) v5 = 14; if ( !*((_BYTE *)v4 + 21) ) { v6 = (int **)v4[2]; if ( *((_BYTE *)v6 + 21) ) { for ( i = v4[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v4 != *(_DWORD **)(i + 8) ) break; v4 = (_DWORD *)i; } v4 = (_DWORD *)i; } else { v4 = (_DWORD *)v4[2]; for ( j = *v6; !*((_BYTE *)j + 21); j = (int *)*j ) v4 = j; } } } while ( v4 != (_DWORD *)v2[1] ); } return v5; } //----- (006E1F00) -------------------------------------------------------- signed int __thiscall sub_6E1F00(_DWORD *this, int a2) { _DWORD *v2; // eax _DWORD *v3; // esi int v4; // eax const char *v5; // ecx int v6; // eax int v7; // edx int v8; // edx int v9; // edx int v10; // eax int *v12; // ecx int *v13; // eax int i; // eax _DWORD *v15; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v15 = this; if ( (_DWORD *)*v2 != v2 ) { do { v4 = v3[4]; if ( v4 ) { v5 = *(const char **)(a2 + 8); if ( v5 ) { v6 = *(_DWORD *)(v4 + 64); if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD *)(v7 + 12); else v8 = *(_DWORD *)(v6 + 4); if ( *(_DWORD *)(v8 + 8) ) { if ( *(_BYTE *)(v6 + 12) && (v9 = *(_DWORD *)(v6 + 8)) != 0 ) v10 = *(_DWORD *)(v9 + 12); else v10 = *(_DWORD *)(v6 + 4); if ( !strcmp(*(const char **)(v10 + 8), v5) ) return v3[3]; } } } else if ( *(_DWORD *)(a2 + 8) ) { OutputDebugStringA("itObj->GetName() Error !!- findObj\n"); } else { OutputDebugStringA("pRootName Error !!- findObj\n"); } if ( !*((_BYTE *)v3 + 21) ) { v12 = (int *)v3[2]; if ( *((_BYTE *)v12 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v13 = (int *)*v12; if ( !*(_BYTE *)(*v12 + 21) ) { do { v12 = v13; v13 = (int *)*v13; } while ( !*((_BYTE *)v13 + 21) ); } v3 = v12; } } } while ( v3 != (_DWORD *)v15[1] ); } return -1; } //----- (006E2010) -------------------------------------------------------- BOOL __thiscall sub_6E2010(_DWORD *this) { _DWORD *v1; // edi _DWORD *v3; // eax _DWORD *v4; // esi void (__stdcall ***v5)(signed int); // ecx int v6; // ecx int **v7; // eax int *j; // eax int i; // eax char v10; // [esp+4h] [ebp-4h] v1 = this; if ( !this[2] ) return 1; v3 = (_DWORD *)this[1]; v4 = (_DWORD *)*v3; if ( (_DWORD *)*v3 != v3 ) { do { v5 = (void (__stdcall ***)(signed int))v4[4]; if ( v5 ) (**v5)(1); v6 = (int)v4; if ( !*((_BYTE *)v4 + 21) ) { v7 = (int **)v4[2]; if ( *((_BYTE *)v7 + 21) ) { for ( i = v4[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v4 != *(_DWORD **)(i + 8) ) break; v4 = (_DWORD *)i; } v4 = (_DWORD *)i; } else { v4 = (_DWORD *)v4[2]; for ( j = *v7; !*((_BYTE *)j + 21); j = (int *)*j ) v4 = j; } } sub_6CDBF0(v1, (int *)&v10, v6); } while ( v4 != (_DWORD *)v1[1] ); } return v1[2] == 0; } //----- (006E20B0) -------------------------------------------------------- void __thiscall sub_6E20B0(_DWORD *this, __int16 a2) { int *v2; // esi int v3; // edx int v4; // eax int j; // eax int i; // eax v2 = (int *)this[22]; v3 = *v2; if ( (int *)*v2 != v2 ) { while ( *(_WORD *)(v3 + 14) != a2 ) { if ( !*(_BYTE *)(v3 + 17) ) { v4 = *(_DWORD *)(v3 + 8); if ( *(_BYTE *)(v4 + 17) ) { for ( i = *(_DWORD *)(v3 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD *)(i + 8) ) break; v3 = i; } v3 = i; } else { v3 = *(_DWORD *)(v3 + 8); for ( j = *(_DWORD *)v4; !*(_BYTE *)(j + 17); j = *(_DWORD *)j ) v3 = j; } } if ( (int *)v3 == v2 ) return; } sub_4E6A70(this + 21, (int *)&a2, v3); } } //----- (006E2160) -------------------------------------------------------- char __thiscall sub_6E2160(_DWORD *this, __int16 a2) { _DWORD *v2; // edx _DWORD *v3; // ecx int **v4; // eax int *j; // eax int i; // eax v2 = (_DWORD *)this[22]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 == v2 ) return -1; while ( *((_WORD *)v3 + 7) != a2 ) { if ( !*((_BYTE *)v3 + 17) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 17) ) { for ( i = v3[1]; !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 17); j = (int *)*j ) v3 = j; } } if ( v3 == v2 ) return -1; } return *((_BYTE *)v3 + 12); } //----- (006E21D0) -------------------------------------------------------- int __thiscall sub_6E21D0(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_67AF30(this + 12, (int **)&v4, &a2); if ( v4 == v2[13] ) result = 0; else result = *(_DWORD *)(v4 + 16); return result; } //----- (006E2210) -------------------------------------------------------- char __thiscall sub_6E2210(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx int v4; // eax int v5; // edx int v6; // eax int v7; // ecx _DWORD *v8; // eax int v9; // ecx _DWORD *v10; // ecx int v11; // eax int v12; // ecx int v13; // eax int v14; // ecx int v15; // ecx int v17; // [esp+8h] [ebp-8h] int v18; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; if ( a2 ) { if ( a2 == 4 ) v17 = 3; else v17 = a2; sub_67AF30(this + 12, (int **)&v18, &v17); v4 = v18; } else { v18 = 1; sub_67AF30(this + 12, (int **)&v17, &v18); v4 = v17; } if ( v4 == v3[13] ) return 0; v5 = *(_DWORD *)(v4 + 16); if ( !v5 ) return 0; v6 = v3[16]; if ( v6 ) { if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD **)(v7 + 12); else v8 = *(_DWORD **)(v6 + 4); if ( *(_BYTE *)(v5 + 12) && (v9 = *(_DWORD *)(v5 + 8)) != 0 ) v10 = *(_DWORD **)(v9 + 12); else v10 = *(_DWORD **)(v5 + 4); v10[22] = v8[22]; v10[23] = v8[23]; v10[24] = v8[24]; v11 = v3[16]; if ( *(_BYTE *)(v11 + 12) && (v12 = *(_DWORD *)(v11 + 8)) != 0 ) v13 = *(_DWORD *)(v12 + 12); else v13 = *(_DWORD *)(v11 + 4); if ( *(_BYTE *)(v5 + 12) && (v14 = *(_DWORD *)(v5 + 8)) != 0 ) v15 = *(_DWORD *)(v14 + 12); else v15 = *(_DWORD *)(v5 + 4); qmemcpy((void *)(v15 + 52), (const void *)(v13 + 52), 0x24u); v2 = a2; } v3[11] = v2; v3[16] = v5; return 1; } //----- (006E2320) -------------------------------------------------------- signed int __thiscall sub_6E2320(_DWORD *this, char a2) { _DWORD *v2; // edi int v3; // esi void (__stdcall ***v5)(signed int); // ecx int v6; // [esp+8h] [ebp-4h] v2 = this; sub_67AF30(this, (int **)&v6, &a2); v3 = v6; if ( v6 == v2[1] ) return 8; v5 = *(void (__stdcall ****)(signed int))(v6 + 16); if ( v5 ) { (**v5)(1); *(_DWORD *)(v3 + 16) = 0; } sub_6CDBF0(v2, (int *)&a2, v3); return 1; } //----- (006E2380) -------------------------------------------------------- signed int __thiscall sub_6E2380(_DWORD *this, char a2) { _DWORD *v2; // edi int v3; // esi int v5; // eax __int16 *v6; // eax int v7; // [esp+8h] [ebp-4h] v2 = this; sub_67AF30(this, (int **)&v7, &a2); v3 = v7; if ( v7 == v2[1] ) return 8; v5 = *(_DWORD *)(v7 + 16); if ( v5 ) { v6 = (__int16 *)sub_4A3D40(*(_DWORD *)(v5 + 8), 10002, 0); if ( v6 ) { sub_6E1B10(*(_DWORD *)(v3 + 16), *v6, *(__int16 *)((char *)v6 + 11)); return 14; } sub_6E2320(v2, a2); } return 1; } //----- (006E2400) -------------------------------------------------------- int __thiscall sub_6E2400(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_67AF30(this, (int **)&v4, &a2); if ( v4 == v2[1] ) result = 0; else result = *(_DWORD *)(v4 + 16); return result; } //----- (006E2430) -------------------------------------------------------- int __thiscall sub_6E2430(_DWORD *this, int a2, float a3) { _DWORD *v3; // esi _DWORD *v4; // ecx int v6; // eax int v7; // edx int v8; // eax int v9; // [esp+4h] [ebp-4h] v3 = this; sub_67AF30(this, (int **)&v9, &a2); if ( v9 == v3[1] ) return 8; v4 = *(_DWORD **)(v9 + 16); if ( !v4 ) return 8; v6 = v4[16]; if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD *)(v7 + 12); else v8 = *(_DWORD *)(v6 + 4); if ( !v8 ) return 2; sub_6E1C00(v4, a3); return 1; } //----- (006E24B0) -------------------------------------------------------- int __thiscall sub_6E24B0(_DWORD *this, __int16 a2) { _DWORD *v2; // edi _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 == v2 ) return 0; while ( sub_6E2160((_DWORD *)v3[4], a2) == -1 ) { if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } if ( v3 == v2 ) return 0; } return v3[4]; } //----- (006E2530) -------------------------------------------------------- bool __thiscall sub_6E2530(_DWORD *this, char a2) { _DWORD *v2; // esi int v4; // [esp+4h] [ebp-4h] v2 = this; sub_6E31F0(this + 21, (int **)&v4, &a2); return v4 == v2[22]; } //----- (006E2560) -------------------------------------------------------- signed __int16 __thiscall sub_6E2560(_DWORD *this, char a2) { _DWORD *v2; // esi signed __int16 result; // ax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_6E31F0(this + 21, (int **)&v4, &a2); if ( v4 == v2[22] ) result = -1; else result = *(_WORD *)(v4 + 14); return result; } //----- (006E25A0) -------------------------------------------------------- int __stdcall sub_6E25A0(int a1) { void *v1; // ecx unsigned int v2; // esi int result; // eax unsigned int v4; // edi unsigned __int8 *v5; // edx unsigned int v6; // ecx unsigned __int8 *v7; // eax int v8; // eax int v9; // eax int v10; // edx int v11; // [esp+Ch] [ebp-30h] void *v12; // [esp+10h] [ebp-2Ch] unsigned int v13; // [esp+20h] [ebp-1Ch] unsigned int v14; // [esp+24h] [ebp-18h] int v15; // [esp+38h] [ebp-4h] v1 = *(void **)(a1 + 8); v11 = a1; v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4018E0(&v12, v1, strlen((const char *)v1)); v2 = v13; v15 = 0; if ( v13 ) { v4 = dword_AB7B70; if ( dword_AB7B70 < v13 ) { sub_4014F0(&v12, dword_AB7B70, v13); v2 = v13; v4 = dword_AB7B70; } if ( v2 ) { while ( 1 ) { v5 = (unsigned __int8 *)dword_AB7B60; if ( (unsigned int)dword_AB7B74 < 0x10 ) v5 = (unsigned __int8 *)&dword_AB7B60; v6 = v2; if ( v2 >= v4 ) v6 = v4; v7 = (unsigned __int8 *)v12; if ( v14 < 0x10 ) v7 = (unsigned __int8 *)&v12; v8 = sub_40C0B0(v7, v5, v6); if ( !v8 && v2 >= v4 ) { LOBYTE(v8) = v2 != v4; if ( !v8 ) break; } v9 = *(_DWORD *)(v11 + 32); v11 = v9; if ( !v9 ) { if ( v14 < 0x10 ) goto LABEL_4; operator delete(v12); return 0; } v10 = *(_DWORD *)(v9 + 8); if ( v10 ) { sub_4018E0(&v12, *(void **)(v9 + 8), strlen(*(const char **)(v9 + 8))); v4 = dword_AB7B70; v2 = v13; if ( dword_AB7B70 < v13 ) { sub_4014F0(&v12, dword_AB7B70, v13); v2 = v13; v4 = dword_AB7B70; } } } } if ( v14 >= 0x10 ) operator delete(v12); result = v11; } else { if ( v14 >= 0x10 ) operator delete(v12); LABEL_4: result = 0; } return result; } // AB7B70: using guessed type int dword_AB7B70; // AB7B74: using guessed type int dword_AB7B74; //----- (006E2740) -------------------------------------------------------- signed int __thiscall sub_6E2740(_DWORD *this, int a2, float *a3) { _DWORD *v3; // esi int v4; // eax int v6; // eax int v7; // ecx int v8; // ecx int v9; // ecx float *v10; // eax float v11; // edx double v12; // st7 float v13; // ST14_4 int v14; // [esp+10h] [ebp-4h] v3 = this; sub_67AF30(this, (int **)&v14, &a2); if ( v14 == v3[1] ) return 8; v4 = *(_DWORD *)(v14 + 16); if ( !v4 ) return 8; v6 = *(_DWORD *)(v4 + 64); if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD *)(v7 + 12); else v8 = *(_DWORD *)(v6 + 4); if ( !v8 ) return 2; if ( *(_BYTE *)(v6 + 12) && (v9 = *(_DWORD *)(v6 + 8)) != 0 ) v10 = *(float **)(v9 + 12); else v10 = *(float **)(v6 + 4); v11 = a3[1]; v12 = a3[2]; v10[22] = *a3; v13 = v12; v10[23] = v11; v10[24] = v13; return 1; } //----- (006E2990) -------------------------------------------------------- signed int __thiscall sub_6E2990(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi int v4; // esi _DWORD *v5; // ebx int v6; // eax int v7; // ecx int v8; // ecx __int16 *v10; // eax int v11; // eax int v12; // edi int v13; // ecx int v14; // eax int v15; // [esp+8h] [ebp-4h] v3 = this; sub_67AF30(this, (int **)&v15, &a2); if ( v15 == v3[1] ) return 8; v4 = *(_DWORD *)(v15 + 16); if ( !v4 ) return 8; v5 = a3; if ( !a3 ) return 8; v6 = *(_DWORD *)(v4 + 64); if ( *(_BYTE *)(v6 + 12) && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) v8 = *(_DWORD *)(v7 + 12); else v8 = *(_DWORD *)(v6 + 4); if ( !v8 ) return 2; if ( v6 ) { if ( *(_BYTE *)(v6 + 12) == 1 ) { v10 = (__int16 *)sub_4A3D40(*(_DWORD *)(v4 + 8), 10001, 0); if ( v10 ) sub_6E1B10(v4, *v10, *(__int16 *)((char *)v10 + 11)); } } v11 = *(_DWORD *)(v4 + 64); v12 = v5[48]; if ( *(_BYTE *)(v11 + 12) && (v13 = *(_DWORD *)(v11 + 8)) != 0 ) v14 = *(_DWORD *)(v13 + 12); else v14 = *(_DWORD *)(v11 + 4); (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v5 + 116))(v5, v14, 0); return v12 + 1 == v5[48]; } //----- (006E2AD0) -------------------------------------------------------- int __thiscall sub_6E2AD0(const void **this, int a2, int a3, int a4, int a5, char *Src, int a7) { const void **v7; // esi int result; // eax int v9; // edi int v10; // ebx int *v11; // eax int v12; // eax unsigned __int16 *v13; // eax _DWORD *v14; // eax _BYTE *v15; // edi _DWORD *v16; // eax char v17[4]; // [esp+8h] [ebp-8h] _BYTE *v18; // [esp+Ch] [ebp-4h] v7 = this; if ( !a3 ) return 4; sub_4017F0(this + 4, (const void **)Src, 0, (void *)0xFFFFFFFF); v7[1] = (const void *)a2; *((_WORD *)v7 + 34) = a5; *((_BYTE *)v7 + 70) = BYTE2(a5); v7[3] = (const void *)a7; v7[2] = (const void *)*(unsigned __int16 *)(a3 + 60); v7[20] = (const void *)-1; sub_4A0060(v7 + 21); v9 = dword_ACB230; v10 = *((unsigned __int16 *)v7 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v10) ) { if ( (unsigned __int16)v10 <= *(_WORD *)(v9 + 200) ) { v11 = (int *)(*(_DWORD *)(v9 + 196) + 4 * v10); if ( *v11 ) { v12 = *v11; if ( v12 ) { v13 = (unsigned __int16 *)sub_4A3DB0((unsigned __int8 *)(v12 + 2)); if ( v13 ) v7[20] = (const void *)*v13; } } } } v14 = operator new(0x2Cu); if ( v14 ) { *v14 = &ResElement::`vftable'; v14[1] = 0; v14[2] = 0; *((_BYTE *)v14 + 12) = 0; v14[9] = 15; v14[8] = 0; *((_BYTE *)v14 + 16) = 0; v15 = v14; } else { v15 = 0; } if ( sub_6E5520(v15, a3, Src) ) { *(_DWORD *)v17 = 1; v18 = v15; v16 = sub_5E8850(v7 + 12, v17); sub_4B1DF0(v7 + 12, (int)v17, v16, 0); if ( (_BYTE)v18 ) { sub_6E2210(v7, 1); result = 1; } else { if ( v15 ) (**(void (__thiscall ***)(_BYTE *, signed int))v15)(v15, 1); result = 5; } } else { if ( v15 ) (**(void (__thiscall ***)(_BYTE *, signed int))v15)(v15, 1); result = 3; } return result; } // 9F974C: using guessed type void *ResElement::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (006E2C40) -------------------------------------------------------- int __thiscall sub_6E2C40(_DWORD *this, int a2, __int16 a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // eax int v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v3 = this; sub_6E31F0(this + 21, (int **)&v7, &a2); result = v7; if ( v7 == v3[22] || *(_WORD *)(v7 + 14) != a3 ) { HIWORD(a2) = a3; v5 = sub_6E3340(v3 + 21, (char *)&a2); result = sub_6E3260(v3 + 21, (int)&v6, v5, 0); } return result; } //----- (006E2D00) -------------------------------------------------------- int __thiscall sub_6E2D00(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int result; // eax v2 = this; if ( a2 && (v3 = sub_6E25A0(a2), a2 = sub_6E1F00(v2, v3), a2 != -1) ) result = *(_DWORD *)sub_4B2760(v2, &a2); else result = 0; return result; } //----- (006E2D40) -------------------------------------------------------- void __thiscall sub_6E2D40(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ST08_4 _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v6 = 0; sub_6E2010(this); v2 = (_DWORD *)v1[1]; v3 = *(_DWORD **)v1[1]; v6 = 1; sub_6CDE90(v1, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (006E2DB0) -------------------------------------------------------- signed int __thiscall sub_6E2DB0(_DWORD *this, const void **a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // ebx _DWORD *v7; // eax char *v8; // eax char v9; // ch^2 int v10; // ST0C_4 int v11; // edi int v12; // edx __int16 *v14; // eax signed int v15; // edi const CHAR *v16; // eax _DWORD *v17; // eax int v18; // esi char *v19; // eax const void **v20; // esi _DWORD *v21; // eax _DWORD *v22; // esi const void **v23; // edi _DWORD *v24; // eax int v25; // [esp+10h] [ebp-98h] _DWORD *v26; // [esp+18h] [ebp-90h] int v27; // [esp+1Ch] [ebp-8Ch] int v28; // [esp+20h] [ebp-88h] char v29[4]; // [esp+24h] [ebp-84h] const void **v30; // [esp+28h] [ebp-80h] __int16 *v31; // [esp+2Ch] [ebp-7Ch] void *v32; // [esp+30h] [ebp-78h] bool v33; // [esp+37h] [ebp-71h] const void **v34; // [esp+38h] [ebp-70h] void *v35; // [esp+3Ch] [ebp-6Ch] int v36; // [esp+4Ch] [ebp-5Ch] unsigned int v37; // [esp+50h] [ebp-58h] LPCSTR pszPath; // [esp+58h] [ebp-50h] int v39; // [esp+68h] [ebp-40h] unsigned int v40; // [esp+6Ch] [ebp-3Ch] char v41[4]; // [esp+74h] [ebp-34h] int v42; // [esp+78h] [ebp-30h] int v43; // [esp+7Ch] [ebp-2Ch] int v44; // [esp+80h] [ebp-28h] int v45; // [esp+84h] [ebp-24h] int v46; // [esp+88h] [ebp-20h] char v47; // [esp+8Ch] [ebp-1Ch] int v48; // [esp+8Dh] [ebp-1Bh] int v49; // [esp+91h] [ebp-17h] char v50; // [esp+95h] [ebp-13h] int v51; // [esp+A4h] [ebp-4h] v6 = this; v28 = (int)a2; v34 = a2; BYTE2(v31) = BYTE2(a5); v26 = this; v27 = a6; sub_67AF30(this, (int **)&v32, &v34); if ( v32 != (void *)v6[1] && *((_DWORD *)v32 + 4) ) return 1; v7 = operator new(0x64u); v32 = v7; v51 = 0; if ( v7 ) v34 = (const void **)sub_6E33B0(v7); else v34 = 0; *(_DWORD *)v41 = 0; v42 = 0; v43 = 0; v44 = 0; v45 = 0; v46 = 0; v51 = -1; sprintf(v41, "@%d", v28); v8 = (char *)sub_427A80(&v35, v27, v41); HIBYTE(v10) = v9; LOWORD(v10) = a5; BYTE2(v10) = BYTE2(v31); v51 = 1; sub_6E2AD0(v34, v28, a3, a4, v10, v8, -1); if ( v37 >= 0x10 ) operator delete(v35); v40 = 15; v39 = 0; LOBYTE(pszPath) = 0; v51 = 2; v31 = 0; if ( !*(_BYTE *)(a3 + 12) ) { LABEL_19: v15 = 2; v32 = (void *)(a3 + 16); do { sub_4017F0((const void **)&pszPath, (const void **)v32, 0, (void *)0xFFFFFFFF); v47 = 0; v48 = 0; v49 = 0; v50 = 0; sprintf(&v47, "_0%d", v15); v37 = 15; v36 = 0; LOBYTE(v35) = 0; sub_4018E0(&v35, &v47, strlen(&v47)); LOBYTE(v51) = 3; sub_6E5260((int)&pszPath, (int)&v35); LOBYTE(v51) = 2; if ( v37 >= 0x10 ) operator delete(v35); v16 = pszPath; if ( v40 < 0x10 ) v16 = (const CHAR *)&pszPath; if ( PathFileExistsA(v16) ) { v17 = operator new(0x2Cu); if ( v17 ) { *v17 = &ResElement::`vftable'; v17[1] = 0; v17[2] = 0; *((_BYTE *)v17 + 12) = 0; v17[9] = 15; v17[8] = 0; *((_BYTE *)v17 + 16) = 0; v18 = (int)v17; } else { v18 = 0; } v19 = (char *)sub_427A80(&v35, v27, v41); LOBYTE(v51) = 4; v33 = sub_6E5790((const void **)v18, (char *)&pszPath, v19) == 0; LOBYTE(v51) = 2; if ( v37 >= 0x10 ) operator delete(v35); if ( v33 ) { if ( v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); if ( v40 >= 0x10 ) operator delete((void *)pszPath); return 2; } if ( *(_BYTE *)(v18 + 12) && v31 ) sub_6E1B10((int)v34, *v31, *(__int16 *)((char *)v31 + 11)); if ( (unsigned int)v15 <= 5 ) { v30 = (const void **)v18; v20 = v34; *(_DWORD *)v29 = v15; v21 = sub_5E8850(v34 + 12, v29); sub_4B1DF0(v20 + 12, (int)&v25, v21, 0); } } ++v15; } while ( v15 < 4 ); v22 = v26; v23 = v34; *(_DWORD *)v29 = v28; v30 = v34; v24 = sub_5E8850(v26, v29); sub_4B1DF0(v22, (int)v29, v24, 0); if ( !(_BYTE)v30 ) { if ( v23 ) (*(void (__thiscall **)(const void **, signed int))*v23)(v23, 1); if ( v40 >= 0x10 ) operator delete((void *)pszPath); return 5; } if ( v40 >= 0x10 ) operator delete((void *)pszPath); return 1; } v11 = dword_ACB230; v12 = *(_DWORD *)dword_ACB230; v32 = (void *)*(unsigned __int16 *)(a3 + 60); if ( (*(unsigned __int8 (__thiscall **)(int, void *))(v12 + 16))(dword_ACB230, v32) && (unsigned __int16)v32 <= *(_WORD *)(v11 + 200) && *(_DWORD *)(*(_DWORD *)(v11 + 196) + 4 * (unsigned __int16)v32) ) { v14 = (__int16 *)sub_4A3D40(*(_WORD *)(a3 + 60), 10001, 0); v31 = v14; if ( v14 ) sub_6E1B10((int)v34, *v14, *(__int16 *)((char *)v14 + 11)); goto LABEL_19; } if ( v34 ) (*(void (__stdcall **)(signed int))*v34)(1); if ( v40 >= 0x10 ) operator delete((void *)pszPath); return 0; } // 9F974C: using guessed type void *ResElement::`vftable'; // ACB230: using guessed type int dword_ACB230; //----- (006E31C0) -------------------------------------------------------- void *__thiscall sub_6E31C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhObjActor::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F97D0: using guessed type void *mhObjActor::`vftable'; //----- (006E31F0) -------------------------------------------------------- int **__thiscall sub_6E31F0(_DWORD *this, int **a2, _BYTE *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 17) ) { if ( *((_BYTE *)v4 + 12) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_BYTE *)v3 + 12) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (006E3260) -------------------------------------------------------- int __thiscall sub_6E3260(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // ebx int v5; // ecx int v6; // eax int v7; // esi bool v8; // cl unsigned __int8 v9; // dl int v10; // edi int v11; // edx int result; // eax int v13; // ecx char v14; // [esp+Ch] [ebp-4h] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = 1; v14 = 1; if ( !*(_BYTE *)(v6 + 17) ) { v9 = *((_BYTE *)a3 + 12); do { v7 = v6; if ( (_BYTE)a4 ) v8 = *(_BYTE *)(v6 + 12) >= v9; else v8 = v9 < *(_BYTE *)(v6 + 12); v14 = v8; if ( v8 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 17) ); } v10 = v7; a4 = v7; if ( v8 ) { if ( v7 == *(_DWORD *)v4[1] ) { v11 = *(_DWORD *)sub_8DDD00(v4, (int)&a4, 1, v7, a3); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 1; return result; } sub_67A6C0(&a4); v10 = a4; } if ( *(_BYTE *)(v10 + 12) >= *((_BYTE *)a3 + 12) ) { operator delete(a3); result = a2; *(_DWORD *)a2 = v10; *(_BYTE *)(a2 + 4) = 0; } else { v13 = *(_DWORD *)sub_8DDD00(v4, (int)&a4, v14, v7, a3); result = a2; *(_DWORD *)a2 = v13; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006E3340) -------------------------------------------------------- _DWORD *__thiscall sub_6E3340(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // esi void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x14u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 8) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; *((_BYTE *)result + 12) = *a2; *((_WORD *)result + 7) = *((_WORD *)v4 + 1); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006E33B0) -------------------------------------------------------- _DWORD *__thiscall sub_6E33B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx _DWORD *v3; // eax _DWORD *v4; // eax void **v6; // [esp+Ch] [ebp-20h] _DWORD *v7; // [esp+18h] [ebp-14h] char *v8; // [esp+1Ch] [ebp-10h] int v9; // [esp+28h] [ebp-4h] v1 = this; v7 = this; v2 = (int)(this + 4); *v7 = &mhObject::`vftable'; v1[1] = -1; v1[2] = -1; v1[3] = -1; *(_DWORD *)(v2 + 20) = 15; *(_DWORD *)(v2 + 16) = 0; *(_BYTE *)v2 = 0; sub_4017F0((const void **)v2, (const void **)&dword_AB7B60, 0, (void *)0xFFFFFFFF); v1[11] = 0; v9 = 0; v1[14] = 0; v3 = operator new(0x18u); if ( !v3 ) { v8 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v8); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[13] = v3; *v3 = v3; *(_DWORD *)(v1[13] + 4) = v1[13]; *(_DWORD *)(v1[13] + 8) = v1[13]; *(_BYTE *)(v1[13] + 20) = 1; *(_BYTE *)(v1[13] + 21) = 1; v1[16] = 0; v1[18] = &mhObjAniActor::`vftable'; v1[19] = -1; LOBYTE(v9) = 2; v1[23] = 0; v4 = operator new(0x14u); if ( !v4 ) { v8 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v8); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[22] = v4; *v4 = v4; *(_DWORD *)(v1[22] + 4) = v1[22]; *(_DWORD *)(v1[22] + 8) = v1[22]; *(_BYTE *)(v1[22] + 16) = 1; *(_BYTE *)(v1[22] + 17) = 1; *((_WORD *)v1 + 34) = -1; *((_BYTE *)v1 + 70) = -1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F97E4: using guessed type void *mhObjAniActor::`vftable'; // 9F97F8: using guessed type void *mhObject::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006E3500) -------------------------------------------------------- void __thiscall sub_6E3500(_DWORD *this) { _DWORD *v1; // esi int v2; // eax signed int v3; // ebx int v4; // ecx int v5; // eax int v6; // eax int *v7; // eax int v8; // edi void (__stdcall ***v9)(signed int); // ecx int *v10; // ecx int v11; // eax _DWORD *v12; // ST08_4 _DWORD *v13; // ST04_4 _DWORD *v14; // ST08_4 _DWORD *v15; // ST04_4 _DWORD *v16; // [esp+10h] [ebp-1Ch] _DWORD *v17; // [esp+14h] [ebp-18h] int v18; // [esp+18h] [ebp-14h] int v19; // [esp+1Ch] [ebp-10h] int v20; // [esp+28h] [ebp-4h] v1 = this; v17 = this; *this = &mhObject::`vftable'; v2 = this[14]; v20 = 3; if ( v2 ) { v3 = 0; do { v4 = v1[13]; v5 = *(_DWORD *)(v4 + 4); while ( !*(_BYTE *)(v5 + 21) ) { if ( *(_DWORD *)(v5 + 12) >= v3 ) { v4 = v5; v5 = *(_DWORD *)v5; } else { v5 = *(_DWORD *)(v5 + 8); } } v6 = v1[13]; v19 = v4; if ( v4 == v6 || v3 < *(_DWORD *)(v4 + 12) ) { v18 = v6; v7 = &v18; } else { v7 = &v19; } v8 = *v7; if ( *v7 != v1[13] ) { v9 = *(void (__stdcall ****)(signed int))(v8 + 16); if ( v9 ) { (**v9)(1); *(_DWORD *)(v8 + 16) = 0; } sub_6CDBF0(v1 + 12, (int *)&v16, v8); } ++v3; } while ( v3 < 5 ); } v10 = (int *)v1[22]; v11 = *v10; if ( (int *)*v10 != v10 ) { do v11 = *sub_4E6A70(v1 + 21, (int *)&v16, v11); while ( v11 != v1[22] ); } v16 = v1 + 21; v12 = (_DWORD *)v1[22]; v13 = *(_DWORD **)v1[22]; LOBYTE(v20) = 4; sub_4E6DC0(v1 + 21, &v18, v13, v12); operator delete((void *)v1[22]); v1[18] = &mhObjActor::`vftable'; v16 = v1 + 12; v14 = (_DWORD *)v1[13]; v15 = *(_DWORD **)v1[13]; LOBYTE(v20) = 5; sub_6CDE90(v1 + 12, &v18, v15, v14); operator delete((void *)v1[13]); if ( v1[9] >= 0x10u ) operator delete((void *)v1[4]); v1[9] = 15; v1[8] = 0; *((_BYTE *)v1 + 16) = 0; } // 9F97D0: using guessed type void *mhObjActor::`vftable'; // 9F97F8: using guessed type void *mhObject::`vftable'; //----- (006E3660) -------------------------------------------------------- void *__thiscall sub_6E3660(void *this, char a2) { void *v2; // esi v2 = this; sub_6E3500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006E3690) -------------------------------------------------------- signed int __stdcall sub_6E3690(int a1) { return 1; } //----- (006E36A0) -------------------------------------------------------- signed int __stdcall sub_6E36A0(int a1) { return 1; } //----- (006E36B0) -------------------------------------------------------- signed int __stdcall sub_6E36B0(int a1, int a2) { signed int result; // eax if ( a2 && sub_8C4C90((_DWORD *)(a2 + 120), *(_DWORD *)(a2 + 28), &a2) && a2 ) result = *(float *)(a2 + 52) <= (double)*(float *)(a2 + 48); else result = -1; return result; } //----- (006E3700) -------------------------------------------------------- BOOL __thiscall sub_6E3700(_WORD *this, __int16 a2, __int16 a3, _DWORD *a4) { _WORD *v4; // esi BOOL result; // eax int v6; // eax v4 = this; if ( !a4 ) return 0; v6 = sub_4B1B80(a2); if ( v6 ) { v4[3] = a3; v4[2] = a2; result = sub_4106E0(a4, *(_DWORD *)(v6 + 7)) != 0; } else { sub_4106E0(a4, 101000); result = 0; } return result; } //----- (006E3770) -------------------------------------------------------- int __thiscall sub_6E3770(_WORD *this, float a2, int a3) { float *v3; // ebx _WORD *v4; // esi int result; // eax __int16 v6; // ax __int16 *v7; // edi int v8; // edi __int16 v9; // ax unsigned __int16 v10; // cx v3 = (float *)a3; v4 = this; if ( !sub_8C4C90((_DWORD *)(a3 + 120), *(_DWORD *)(a3 + 28), &a3) || !a3 ) return 0; if ( *(float *)(a3 + 52) <= (double)*(float *)(a3 + 48) ) goto LABEL_21; v6 = v4[3]; if ( v6 == -1 ) { v8 = sub_4B1B80(v4[2]); if ( !v8 ) goto LABEL_21; v9 = v4[2]; if ( *(_WORD *)(v8 + 5) == 10000 ) { v10 = *(_WORD *)(v8 + 11); if ( v9 == v10 || v10 > 0x2710u ) goto LABEL_21; if ( *(_WORD *)(sub_4B1B80(v9) + 5) != 10002 ) { sub_6E3700(v4, *(_WORD *)(v8 + 11), 0xFFFF, v3); v4[2] = *(_WORD *)(v8 + 11); goto LABEL_21; } } else if ( *(_WORD *)(sub_4B1B80(v9) + 5) != 10002 ) { sub_6E3700(v4, *(_WORD *)(v8 + 11), 0xFFFF, v3); goto LABEL_21; } return 10002; } v7 = (__int16 *)sub_4B1B80(v6); v4[3] = -1; if ( !v7 ) goto LABEL_21; result = sub_4B1B80(*(__int16 *)((char *)v7 + 11)); if ( !result ) return result; if ( v4[2] == *(__int16 *)((char *)v7 + 11) || *(_WORD *)(result + 5) > 0x2710u ) goto LABEL_21; if ( *(_WORD *)(sub_4B1B80(v4[2]) + 5) == 10002 ) return 10002; sub_6E3700(v4, *v7, *(__int16 *)((char *)v7 + 11), v3); LABEL_21: sub_803810(v3, a2); return 1; } //----- (006E38F0) -------------------------------------------------------- void __thiscall sub_6E38F0(_DWORD *this) { *this = &mhResTableElement::`vftable'; sub_6E08E0(this); } // 9F9754: using guessed type void *mhResTableElement::`vftable'; //----- (006E3900) -------------------------------------------------------- signed int __thiscall sub_6E3900(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // esi void (__stdcall ***v4)(signed int); // ecx int *v5; // eax int *v6; // eax int v7; // esi int v8; // edi int *v9; // eax char v11; // [esp+4h] [ebp-4h] v1 = this; if ( !this[2] ) return 1; v2 = (int *)this[1]; v3 = *v2; if ( (int *)*v2 != v2 ) { do { sub_6E0640(*(_DWORD *)(v3 + 16)); v4 = *(void (__stdcall ****)(signed int))(v3 + 16); if ( v4 ) (**v4)(1); v5 = sub_6CDBF0(v1, (int *)&v11, v3); v3 = *v5; } while ( *v5 != v1[1] ); } v6 = (int *)v1[5]; v7 = *v6; if ( (int *)*v6 != v6 ) { do { v8 = *(_DWORD *)(v7 + 16); if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v7 + 16) = 0; } v9 = sub_6A3E10(v1 + 4, (int *)&v11, v7); v7 = *v9; } while ( *v9 != v1[5] ); } if ( v1[2] ) { if ( off_AC0554 ) off_AC0554("m_mapResModels is not empty!", "error", 0); return 0; } if ( !v1[6] ) return 1; if ( !off_AC0554 ) return 0; off_AC0554("m_mapResTex is not empty!", "error", 0); return 0; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (006E39F0) -------------------------------------------------------- int __thiscall sub_6E39F0(_DWORD *this, unsigned __int8 *a2, __int16 a3, int a4, int a5, int a6, int a7, int a8, void *a9, int a10, int a11, int a12, int a13, int a14, int a15) { unsigned __int8 *v15; // esi int v16; // edi int result; // eax int v18; // eax int v19; // eax _DWORD *v20; // [esp+10h] [ebp-58h] void *v21; // [esp+14h] [ebp-54h] int v22; // [esp+24h] [ebp-44h] unsigned int v23; // [esp+28h] [ebp-40h] void *v24; // [esp+30h] [ebp-38h] int v25; // [esp+40h] [ebp-28h] unsigned int v26; // [esp+44h] [ebp-24h] char v27[4]; // [esp+4Ch] [ebp-1Ch] int v28; // [esp+50h] [ebp-18h] int v29; // [esp+54h] [ebp-14h] int v30; // [esp+64h] [ebp-4h] v15 = a2; v20 = this; *(_DWORD *)v27 = 0; v28 = 0; v29 = 0; v30 = 0; sprintf(v27, "%d", (unsigned __int16)a3); sub_6E4250((int)&a9, a13, v27, strlen(v27)); if ( *((_DWORD *)a2 + 5) >= 0x10u ) v15 = *(unsigned __int8 **)a2; v16 = sub_4A3DB0(v15); v26 = 15; v25 = 0; LOBYTE(v24) = 0; LOBYTE(v30) = 1; sub_4018E0(&v24, (void *)(v16 + 103), strlen((const char *)(v16 + 103))); if ( !v16 ) { if ( v26 >= 0x10 ) operator delete(v24); v26 = 15; v25 = 0; LOBYTE(v24) = 0; if ( (unsigned int)a14 >= 0x10 ) operator delete(a9); return 3; } if ( *(_BYTE *)(v16 + 138) == 1 ) sub_6E5460(&v24, 1); else sub_6E5460(&v24, 0); v23 = 15; v22 = 0; LOBYTE(v21) = 0; LOBYTE(v30) = 2; if ( !byte_ACAD5C ) sub_420410(); sub_4018E0(&v21, byte_ACA210, strlen(byte_ACA210)); sub_401D10((int)&v21, (void *)(v16 + 103), strlen((const char *)(v16 + 103))); sub_401D10((int)&v21, "\\", 1u); sub_401C20(&v21, (int)&v24, 0, 0xFFFFFFFF); if ( sub_6E5790((const void **)v20, (char *)&v21, (char *)&a9) ) { if ( *((_BYTE *)v20 + 12) && (v18 = v20[2]) != 0 ) v19 = *(_DWORD *)(v18 + 12); else v19 = v20[1]; if ( v19 ) { v20[11] = a4; v20[12] = a5; v20[13] = a6; *((_WORD *)v20 + 30) = a3; v20[14] = a7; v20[16] = a8; if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v26 >= 0x10 ) operator delete(v24); v26 = 15; v25 = 0; LOBYTE(v24) = 0; if ( (unsigned int)a14 >= 0x10 ) operator delete(a9); result = 1; } else { if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v26 >= 0x10 ) operator delete(v24); v26 = 15; v25 = 0; LOBYTE(v24) = 0; if ( (unsigned int)a14 >= 0x10 ) operator delete(a9); result = 2; } } else { if ( v23 >= 0x10 ) operator delete(v21); v23 = 15; v22 = 0; LOBYTE(v21) = 0; if ( v26 >= 0x10 ) operator delete(v24); v26 = 15; v25 = 0; LOBYTE(v24) = 0; if ( (unsigned int)a14 < 0x10 ) return 3; operator delete(a9); result = 3; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (006E3CF0) -------------------------------------------------------- int __thiscall sub_6E3CF0(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_67AF30(this, (int **)&v4, &a2); if ( v4 == v2[1] ) result = 0; else result = *(_DWORD *)sub_4B2760(v2, &a2); return result; } //----- (006E3D30) -------------------------------------------------------- int __thiscall sub_6E3D30(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi _DWORD *v5; // eax char v6[4]; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; if ( !a2 ) return a2 + 4; a2 = *(unsigned __int16 *)(a2 + 60); sub_67AF30(this, (int **)&v7, &a2); if ( v7 != v3[1] && *(_DWORD *)sub_4B2760(v3, &a2) ) return 1; *(_DWORD *)v6 = *(unsigned __int16 *)(v2 + 60); v7 = v2; v5 = sub_5E8850(v3, v6); sub_4B1DF0(v3, (int)v6, v5, 0); return 4 * ((_BYTE)v7 == 0) + 1; } //----- (006E4030) -------------------------------------------------------- void __thiscall sub_6E4030(_DWORD *this) { _DWORD *v1; // esi int v2; // ST08_4 int v3; // ST04_4 _DWORD *v4; // ST08_4 _DWORD *v5; // ST04_4 char v6; // [esp+Ch] [ebp-18h] _DWORD *v7; // [esp+10h] [ebp-14h] _DWORD *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = this; v8 = this; v9 = 1; sub_6E3900(this); v7 = v1 + 4; v2 = v1[5]; v3 = *(_DWORD *)v1[5]; LOBYTE(v9) = 2; sub_6A4190(v1 + 4, (int *)&v6, v3, v2); operator delete((void *)v1[5]); v4 = (_DWORD *)v1[1]; v5 = *(_DWORD **)v1[1]; v9 = 3; sub_6CDE90(v1, (int *)&v6, v5, v4); operator delete((void *)v1[1]); } //----- (006E40D0) -------------------------------------------------------- int __thiscall sub_6E40D0(_DWORD *this, int a2, int a3, int a4, size_t a5) { int v5; // esi size_t v6; // ecx unsigned int v7; // eax unsigned int v8; // edi size_t v9; // eax unsigned int v10; // ebx unsigned int v11; // eax unsigned int v12; // eax char *v13; // ecx int result; // eax char *v15; // eax int v16; // ecx int v17; // edx unsigned int v18; // eax char *v19; // ecx char *v20; // eax bool v21; // cf size_t v22; // [esp+1Ch] [ebp+14h] v5 = (int)this; v6 = this[4]; if ( v6 < a2 || (v7 = *(_DWORD *)(a3 + 16), v7 < a4) ) std::_Xout_of_range("invalid string position"); v8 = a5; v9 = v7 - a4; if ( v9 < a5 ) v8 = v9; if ( -1 - v6 <= v8 ) std::_Xlength_error("string too long"); if ( !v8 ) return v5; v10 = v6 + v8; v22 = v6 + v8; if ( v6 + v8 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v11 = *(_DWORD *)(v5 + 20); if ( v11 < v10 ) { sub_4015D0((const void **)v5, (void *)(v6 + v8), v6); if ( v10 ) { LABEL_12: v12 = *(_DWORD *)(v5 + 20); if ( v12 < 0x10 ) v13 = (char *)v5; else v13 = *(char **)v5; if ( v12 < 0x10 ) v15 = (char *)v5; else v15 = *(char **)v5; memcpy_0(&v15[a2 + v8], &v13[a2], *(_DWORD *)(v5 + 16) - a2); v16 = a3; if ( v5 == a3 ) { v17 = a4 + v8; if ( a2 >= (unsigned int)a4 ) v17 = a4; v18 = *(_DWORD *)(v5 + 20); if ( v18 < 0x10 ) v19 = (char *)v5; else v19 = *(char **)v5; if ( v18 < 0x10 ) memcpy_0((void *)(a2 + v5), &v19[v17], v8); else memcpy_0((void *)(a2 + *(_DWORD *)v5), &v19[v17], v8); } else { if ( *(_DWORD *)(a3 + 20) >= 0x10u ) v16 = *(_DWORD *)a3; if ( *(_DWORD *)(v5 + 20) < 0x10u ) v20 = (char *)v5; else v20 = *(char **)v5; memcpy(&v20[a2], (const void *)(a4 + v16), v8); } v21 = *(_DWORD *)(v5 + 20) < 0x10u; *(_DWORD *)(v5 + 16) = v22; if ( !v21 ) { *(_BYTE *)(*(_DWORD *)v5 + v22) = 0; return v5; } *(_BYTE *)(v5 + v22) = 0; } return v5; } if ( v10 ) goto LABEL_12; *(_DWORD *)(v5 + 16) = 0; if ( v11 < 0x10 ) { result = v5; *(_BYTE *)v5 = 0; } else { **(_BYTE **)v5 = 0; result = v5; } return result; } //----- (006E4250) -------------------------------------------------------- int __thiscall sub_6E4250(int this, int a2, void *a3, size_t a4) { int v4; // esi unsigned int v5; // edx char *v6; // ecx char *v7; // ecx int result; // eax size_t v9; // eax void *v10; // edi unsigned int v11; // ecx unsigned int v12; // eax char *v13; // ecx char *v14; // eax char *v15; // eax bool v16; // cf v4 = this; if ( !a3 ) goto LABEL_41; v5 = *(_DWORD *)(this + 20); if ( v5 >= 0x10 ) this = *(_DWORD *)this; if ( (unsigned int)a3 < this || (v5 < 0x10 ? (v6 = (char *)v4) : (v6 = *(char **)v4), &v6[*(_DWORD *)(v4 + 16)] <= a3) ) { LABEL_41: v9 = *(_DWORD *)(v4 + 16); if ( v9 < a2 ) std::_Xout_of_range("invalid string position"); if ( -1 - v9 <= a4 ) std::_Xlength_error("string too long"); if ( a4 ) { v10 = (void *)(v9 + a4); if ( v9 + a4 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v11 = *(_DWORD *)(v4 + 20); if ( v11 >= (unsigned int)v10 ) { if ( !v10 ) { *(_DWORD *)(v4 + 16) = 0; if ( v11 < 0x10 ) { result = v4; *(_BYTE *)v4 = 0; } else { **(_BYTE **)v4 = 0; result = v4; } return result; } goto LABEL_22; } sub_4015D0((const void **)v4, v10, v9); if ( v10 ) { LABEL_22: v12 = *(_DWORD *)(v4 + 20); if ( v12 < 0x10 ) v13 = (char *)v4; else v13 = *(char **)v4; if ( v12 < 0x10 ) v14 = (char *)v4; else v14 = *(char **)v4; memcpy_0(&v14[a2 + a4], &v13[a2], *(_DWORD *)(v4 + 16) - a2); if ( *(_DWORD *)(v4 + 20) < 0x10u ) v15 = (char *)v4; else v15 = *(char **)v4; memcpy(&v15[a2], a3, a4); v16 = *(_DWORD *)(v4 + 20) < 0x10u; *(_DWORD *)(v4 + 16) = v10; if ( !v16 ) { *((_BYTE *)v10 + *(_DWORD *)v4) = 0; return v4; } *((_BYTE *)v10 + v4) = 0; return v4; } } return v4; } if ( v5 < 0x10 ) v7 = (char *)v4; else v7 = *(char **)v4; return sub_6E40D0((_DWORD *)v4, a2, v4, (_BYTE *)a3 - v7, a4); } //----- (006E43A0) -------------------------------------------------------- _DWORD *__thiscall sub_6E43A0(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax char *v6; // ecx int v7; // ecx void **v9; // [esp+8h] [ebp-Ch] v2 = this; v3 = operator new(0x18u); v4 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a2); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v3[2] = v2[1]; v5 = v3 + 3; *((_WORD *)v4 + 10) = 0; if ( v4 != (_DWORD *)-12 ) { v6 = a2; *v5 = *(_DWORD *)a2; v7 = *((_DWORD *)v6 + 1); v4[4] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006E4430) -------------------------------------------------------- int __thiscall sub_6E4430(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // edi int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl int v10; // ebx int v11; // ebx int v12; // edx int result; // eax int v14; // ecx int v15; // esi char v16; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v16 = 1; if ( !*(_BYTE *)(v7 + 21) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v16 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_670930(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { v15 = v4[4]; if ( v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); } v4 = a3; } operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_670930(v5, (int)&a4, v16, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (006E4530) -------------------------------------------------------- int __thiscall sub_6E4530(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi int result; // eax int v8; // eax int v9; // ecx int v10; // [esp+8h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[1]; v6 = a4; if ( !this[2] ) { sub_670930(this, a2, 1, (int)v5, a4); return a2; } if ( a3 == *v5 ) { if ( *((_DWORD *)a4 + 3) < *(_DWORD *)(a3 + 12) ) { sub_670930(this, a2, 1, a3, a4); return a2; } goto LABEL_22; } if ( (_DWORD *)a3 == v5 ) { v8 = v5[2]; if ( *(_DWORD *)(v8 + 12) < *((_DWORD *)a4 + 3) ) { sub_670930(this, a2, 0, v8, a4); return a2; } goto LABEL_22; } if ( *((_DWORD *)a4 + 3) >= *(_DWORD *)(a3 + 12) || (a4 = (void *)a3, sub_4DC030(&a4), *((_DWORD *)a4 + 3) >= v6[3]) ) { if ( *(_DWORD *)(a3 + 12) >= v6[3] || (a4 = (void *)a3, sub_717D90(&a4), a4 != (void *)v4[1]) && v6[3] >= *((_DWORD *)a4 + 3) ) { LABEL_22: v9 = *(_DWORD *)sub_6E4430(v4, (int)&v10, v6, 0); result = a2; *(_DWORD *)a2 = v9; return result; } if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 21) ) sub_670930(v4, a2, 0, a3, v6); else sub_670930(v4, a2, 1, (int)a4, v6); result = a2; } else { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 21) ) sub_670930(v4, a2, 0, (int)a4, v6); else sub_670930(v4, a2, 1, a3, v6); result = a2; } return result; } //----- (006E4690) -------------------------------------------------------- int __thiscall sub_6E4690(_DWORD *this, int *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edi int v6; // ecx _DWORD *v7; // eax char v9[4]; // [esp+Ch] [ebp-18h] int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = this; v3 = this[1]; v4 = *(_DWORD *)(v3 + 4); v5 = v3; while ( !*(_BYTE *)(v4 + 21) ) { if ( *(_DWORD *)(v4 + 12) >= *a2 ) { v5 = v4; v4 = *(_DWORD *)v4; } else { v4 = *(_DWORD *)(v4 + 8); } } if ( v5 != v2[1] && *a2 >= *(_DWORD *)(v5 + 12) ) return v5 + 16; v11 = 0; v6 = *a2; v12 = 0; *(_DWORD *)v9 = v6; v10 = 0; LOBYTE(v12) = 1; v7 = sub_6E43A0(v2, v9); sub_6E4530(v2, (int)&a2, v5, v7); return (int)(a2 + 4); } //----- (006E4760) -------------------------------------------------------- signed int __stdcall sub_6E4760(int a1) { return 1; } //----- (006E47B0) -------------------------------------------------------- int __thiscall sub_6E47B0(int this) { int v1; // esi int result; // eax v1 = this; if ( *(_DWORD *)(this + 36) >= 0x10u ) operator delete(*(void **)(this + 16)); result = 0; *(_DWORD *)(v1 + 36) = 15; *(_DWORD *)(v1 + 32) = 0; *(_BYTE *)(v1 + 16) = 0; return result; } //----- (006E4830) -------------------------------------------------------- void __stdcall sub_6E4830(volatile LONG *a1, int a2, int a3) { void *v3; // eax signed int v4; // edi signed int i; // esi void *v6; // eax int v7; // eax void *v8; // [esp+Ch] [ebp-48h] int v9; // [esp+1Ch] [ebp-38h] unsigned int v10; // [esp+20h] [ebp-34h] void *v11; // [esp+28h] [ebp-2Ch] int v12; // [esp+38h] [ebp-1Ch] unsigned int v13; // [esp+3Ch] [ebp-18h] int v14; // [esp+50h] [ebp-4h] v14 = 0; v3 = sub_4571E0(&v8, (int)&dword_AB7B7C, a2); LOBYTE(v14) = 1; sub_6E5180(&v11, (int)v3, a3); LOBYTE(v14) = 3; if ( v10 >= 0x10 ) operator delete(v8); v10 = 15; v9 = 0; LOBYTE(v8) = 0; v4 = sub_6E5370((int)a1, (const void **)&v11); for ( i = 0; i <= v4; ++i ) { sub_6E52A0(&v11, i, 3); v6 = v11; if ( v13 < 0x10 ) v6 = &v11; v7 = (*(int (__stdcall **)(void *))(*a1 + 72))(v6); *(_WORD *)(v7 + 28) |= 1u; sub_6E5210(&v11, 3); } if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; v14 = -1; if ( a1 && !InterlockedDecrement(a1 + 1) ) { if ( a1 ) (**(void (__thiscall ***)(volatile LONG *, signed int))a1)(a1, 1); } } //----- (006E4970) -------------------------------------------------------- signed int __thiscall sub_6E4970(int *this, int a2, int *a3, int a4, int a5, int a6) { int v6; // eax int *v7; // esi int v8; // eax int v9; // eax void *v10; // eax void **v11; // esi void *v12; // eax void **v13; // esi void **v14; // eax void (__thiscall **v15)(_DWORD, _DWORD); // edx void **v16; // eax int v17; // edx int v18; // ebx void *v19; // eax bool v20; // cf int v21; // ecx int v22; // edx int v23; // eax long double v24; // st7 double v25; // st7 char *v26; // eax signed int v27; // ebx signed int v28; // esi void **v29; // eax void (__thiscall **v30)(_DWORD, _DWORD); // edx float v31; // eax int v32; // ecx int v33; // edx long double v34; // st7 int v35; // ecx double v36; // st7 int v37; // edx void **v39; // [esp+18h] [ebp-154h] float v40; // [esp+1Ch] [ebp-150h] void **v41; // [esp+20h] [ebp-14Ch] int *v42; // [esp+34h] [ebp-138h] int *v43; // [esp+38h] [ebp-134h] int v44; // [esp+3Ch] [ebp-130h] int j; // [esp+40h] [ebp-12Ch] int i; // [esp+44h] [ebp-128h] float v47; // [esp+48h] [ebp-124h] int v48; // [esp+4Ch] [ebp-120h] float v49; // [esp+50h] [ebp-11Ch] int v50; // [esp+54h] [ebp-118h] int v51; // [esp+58h] [ebp-114h] int v52; // [esp+5Ch] [ebp-110h] void *v53; // [esp+60h] [ebp-10Ch] int v54; // [esp+70h] [ebp-FCh] unsigned int v55; // [esp+74h] [ebp-F8h] char *Src; // [esp+7Ch] [ebp-F0h] unsigned int v57; // [esp+90h] [ebp-DCh] void *v58; // [esp+98h] [ebp-D4h] int v59; // [esp+A8h] [ebp-C4h] unsigned int v60; // [esp+ACh] [ebp-C0h] void *v61; // [esp+B4h] [ebp-B8h] int v62; // [esp+C4h] [ebp-A8h] unsigned int v63; // [esp+C8h] [ebp-A4h] void *v64; // [esp+D0h] [ebp-9Ch] int v65; // [esp+E0h] [ebp-8Ch] unsigned int v66; // [esp+E4h] [ebp-88h] void *v67; // [esp+ECh] [ebp-80h] void *v68; // [esp+FCh] [ebp-70h] unsigned int v69; // [esp+100h] [ebp-6Ch] void *v70; // [esp+108h] [ebp-64h] int v71; // [esp+118h] [ebp-54h] unsigned int v72; // [esp+11Ch] [ebp-50h] void *v73; // [esp+124h] [ebp-48h] int v74; // [esp+134h] [ebp-38h] unsigned int v75; // [esp+138h] [ebp-34h] void *v76; // [esp+140h] [ebp-2Ch] void *v77; // [esp+150h] [ebp-1Ch] unsigned int v78; // [esp+154h] [ebp-18h] int v79; // [esp+168h] [ebp-4h] v50 = a4; v43 = this; v51 = a5; v52 = a6; v79 = 0; this[3] = a2; v63 = 15; v62 = 0; LOBYTE(v61) = 0; v66 = 15; v65 = 0; LOBYTE(v64) = 0; v60 = 15; v59 = 0; LOBYTE(v58) = 0; v78 = 15; v77 = 0; LOBYTE(v76) = 0; v69 = 15; v68 = 0; LOBYTE(v67) = 0; LOBYTE(v79) = 6; v75 = 15; v74 = 0; LOBYTE(v73) = 0; sub_4017F0((const void **)&v73, (const void **)&dword_AB7C40, 0, (void *)0xFFFFFFFF); LOBYTE(v79) = 7; v48 = 0; do { v6 = v48; v7 = v43; v43[v48] = *(&v50 + v48); if ( v6 ) { v8 = v6 - 1; if ( v8 ) { if ( v8 != 1 ) goto LABEL_13; sub_4017F0((const void **)&v58, (const void **)&dword_AB7BD0, 0, (void *)0xFFFFFFFF); v9 = v7[2]; } else { sub_4017F0((const void **)&v58, (const void **)&dword_AB7B98, 0, (void *)0xFFFFFFFF); v9 = v7[1]; } } else { sub_4017F0((const void **)&v58, (const void **)&dword_AB7BB4, 0, (void *)0xFFFFFFFF); v9 = *v7; } if ( v9 ) { if ( v9 != 1 ) goto LABEL_13; sub_4017F0((const void **)&v61, (const void **)&dword_AB7C24, 0, (void *)0xFFFFFFFF); v41 = (void **)-1; v40 = 0.0; v39 = &dword_AB7C08; } else { sub_4017F0((const void **)&v61, (const void **)&dword_AB7C08, 0, (void *)0xFFFFFFFF); v41 = (void **)-1; v40 = 0.0; v39 = &dword_AB7C24; } sub_4017F0((const void **)&v64, (const void **)v39, LODWORD(v40), v41); LABEL_13: v10 = sub_4571E0(&Src, (int)&dword_AB7B7C, (int)&v58); LOBYTE(v79) = 8; v11 = (void **)sub_6E5180(&v70, (int)v10, (int)&v61); if ( &v76 != v11 ) { if ( v78 >= 0x10 ) operator delete(v76); v78 = 15; v77 = 0; LOBYTE(v76) = 0; if ( (unsigned int)v11[5] >= 0x10 ) { v76 = *v11; *v11 = 0; } else { memcpy_0(&v76, v11, (size_t)v11[4] + 1); } v77 = v11[4]; v78 = (unsigned int)v11[5]; v11[4] = 0; v11[5] = 0; } if ( v72 >= 0x10 ) operator delete(v70); v72 = 15; v71 = 0; LOBYTE(v70) = 0; LOBYTE(v79) = 7; if ( v57 >= 0x10 ) operator delete(Src); v12 = sub_4571E0(&Src, (int)&dword_AB7B7C, (int)&v58); LOBYTE(v79) = 10; v13 = (void **)sub_6E5180(&v70, (int)v12, (int)&v64); if ( &v67 != v13 ) { if ( v69 >= 0x10 ) operator delete(v67); v69 = 15; v68 = 0; LOBYTE(v67) = 0; if ( (unsigned int)v13[5] >= 0x10 ) { v67 = *v13; *v13 = 0; } else { memcpy_0(&v67, v13, (size_t)v13[4] + 1); } v68 = v13[4]; v69 = (unsigned int)v13[5]; v13[4] = 0; v13[5] = 0; } if ( v72 >= 0x10 ) operator delete(v70); v72 = 15; v71 = 0; LOBYTE(v70) = 0; LOBYTE(v79) = 7; if ( v57 >= 0x10 ) operator delete(Src); v44 = sub_6E5370(a2, (const void **)&v76); for ( i = 0; i <= v44; ++i ) { v41 = &v64; v40 = COERCE_FLOAT(&v58); v39 = (void **)a2; v49 = COERCE_FLOAT(&v39); if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_6E4830((volatile LONG *)v39, SLODWORD(v40), (int)v41); sub_6E52A0(&v76, i, 3); v14 = (void **)v76; if ( v78 < 0x10 ) v14 = &v76; v15 = *(void (__thiscall ***)(_DWORD, _DWORD))a2; v41 = v14; v42 = (int *)((int (__stdcall *)(void **))v15[18])(v14); if ( v42 ) { v49 = COERCE_FLOAT(sub_6E5370(a2, (const void **)&v73)); for ( j = 0; j <= SLODWORD(v49); ++j ) { sub_6E52A0(&v73, j, 3); v16 = (void **)v73; if ( v75 < 0x10 ) v16 = &v73; v17 = *v42; v41 = v16; v18 = (*(int (__stdcall **)(void **))(v17 + 72))(v16); if ( v18 ) { v19 = sub_4571E0(&v70, (int)&v58, (int)&v61); LOBYTE(v79) = 12; sub_6E5180(&Src, (int)v19, (int)&v73); LOBYTE(v79) = 14; if ( v72 >= 0x10 ) operator delete(v70); v20 = v57 < 0x10; v21 = *(_DWORD *)(v18 + 140); v47 = *(float *)(v18 + 152); v22 = *(_DWORD *)(v18 + 144); v23 = *(_DWORD *)(v18 + 148); v24 = fabs(v47); *(_DWORD *)(v18 + 88) = v21; v47 = v24; v25 = v47; *(_DWORD *)(v18 + 92) = v22; *(float *)(v18 + 100) = v25; *(_DWORD *)(v18 + 96) = v23; v26 = Src; v72 = 15; v71 = 0; LOBYTE(v70) = 0; qmemcpy((void *)(v18 + 52), (const void *)(v18 + 104), 0x24u); if ( v20 ) v26 = (char *)&Src; sub_85AB50((void **)v18, v26); *(_WORD *)(v18 + 28) &= 0xFFFEu; (*(void (__stdcall **)(int, signed int))(*a3 + 116))(v18, 1); LOBYTE(v79) = 7; if ( v57 >= 0x10 ) operator delete(Src); } sub_6E5210(&v73, 3); } } sub_6E5210(&v76, 3); } ++v48; } while ( v48 < 3 ); v27 = 0; v55 = 15; v54 = 0; LOBYTE(v53) = 0; LOBYTE(v79) = 15; sub_4017F0((const void **)&v53, (const void **)&dword_AB7BEC, 0, (void *)0xFFFFFFFF); v28 = sub_6E5370(a2, (const void **)&v53); v44 = v28; if ( v28 >= 0 ) { do { sub_6E52A0(&v73, v27, 3); v29 = (void **)v73; if ( v75 < 0x10 ) v29 = &v73; v30 = *(void (__thiscall ***)(_DWORD, _DWORD))a2; v41 = v29; v31 = COERCE_FLOAT(((int (__stdcall *)(void **))v30[18])(v29)); if ( v31 != 0.0 ) { v32 = *(_DWORD *)(LODWORD(v31) + 140); v33 = *(_DWORD *)(LODWORD(v31) + 144); v49 = *(float *)(LODWORD(v31) + 152); v34 = v49; *(_DWORD *)(LODWORD(v31) + 88) = v32; v35 = *(_DWORD *)(LODWORD(v31) + 148); *(_DWORD *)(LODWORD(v31) + 92) = v33; v49 = fabs(v34); v36 = v49; *(_DWORD *)(LODWORD(v31) + 96) = v35; *(float *)(LODWORD(v31) + 100) = v36; *(_WORD *)(LODWORD(v31) + 28) &= 0xFFFEu; qmemcpy((void *)(LODWORD(v31) + 52), (const void *)(LODWORD(v31) + 104), 0x24u); v37 = *a3; v41 = (void **)1; v40 = v31; (*(void (__stdcall **)(float, signed int))(v37 + 116))(COERCE_FLOAT(LODWORD(v31)), 1); v28 = v44; } sub_6E5210(&v73, 3); ++v27; } while ( v27 <= v28 ); } sub_85BED0((_DWORD **)a3, 0.0, 1); sub_85C4D0(a3); sub_85C6F0(a3); if ( v55 >= 0x10 ) operator delete(v53); v55 = 15; v54 = 0; LOBYTE(v53) = 0; if ( v75 >= 0x10 ) operator delete(v73); v75 = 15; v74 = 0; LOBYTE(v73) = 0; if ( v69 >= 0x10 ) operator delete(v67); v69 = 15; v68 = 0; LOBYTE(v67) = 0; if ( v78 >= 0x10 ) operator delete(v76); v78 = 15; v77 = 0; LOBYTE(v76) = 0; if ( v60 >= 0x10 ) operator delete(v58); v60 = 15; v59 = 0; LOBYTE(v58) = 0; if ( v66 >= 0x10 ) operator delete(v64); v66 = 15; v65 = 0; LOBYTE(v64) = 0; if ( v63 >= 0x10 ) operator delete(v61); v63 = 15; v62 = 0; LOBYTE(v61) = 0; LOBYTE(v79) = 0; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); v79 = -1; if ( a3 && !InterlockedDecrement(a3 + 1) && a3 ) (*(void (__thiscall **)(int *, signed int))*a3)(a3, 1); return 1; } //----- (006E5180) -------------------------------------------------------- void *__cdecl sub_6E5180(void *a1, int a2, int a3) { void *v3; // eax v3 = (void *)sub_401C20((_DWORD *)a2, a3, 0, 0xFFFFFFFF); *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; *(_BYTE *)a1 = 0; sub_406450(a1, v3); return a1; } //----- (006E5210) -------------------------------------------------------- _DWORD *__cdecl sub_6E5210(_DWORD *a1, signed int a2) { _DWORD *result; // eax result = (_DWORD *)a1[4]; if ( a2 <= (signed int)result ) result = sub_4014F0(a1, (unsigned int)result - a2, a2); return result; } //----- (006E5230) -------------------------------------------------------- int __cdecl sub_6E5230(char *a1, int a2) { char *v2; // esi v2 = a1; sub_4014F0(a1, 0, a2); if ( *((_DWORD *)a1 + 5) >= 0x10u ) v2 = *(char **)a1; return atoi(v2); } //----- (006E5260) -------------------------------------------------------- unsigned int __cdecl sub_6E5260(int a1, int a2) { unsigned int result; // eax char v3; // [esp+4h] [ebp-4h] v3 = 46; result = sub_417B90((unsigned __int8 *)a1, (unsigned __int8 *)&v3, 0x100000000ui64); if ( result ) { if ( result < *(_DWORD *)(a1 + 16) ) result = sub_6E40D0((_DWORD *)a1, result, a2, 0, 0xFFFFFFFF); } return result; } //----- (006E52A0) -------------------------------------------------------- void __cdecl sub_6E52A0(_DWORD *a1, unsigned int a2, signed int a3) { int i; // edi unsigned int v4; // ecx _DWORD *v5; // edx int v6; // eax _DWORD *v7; // ecx unsigned int v8; // edx _DWORD *v9; // ecx int v10; // eax _DWORD *v11; // ecx int v12; // [esp+8h] [ebp-10h] char v13[4]; // [esp+Ch] [ebp-Ch] if ( a3 <= 6 && a2 <= 0x2710 ) { qmemcpy(v13, "00000", 5); _itoa(a2, v13, 10); for ( i = a3 - 1; i >= 0; --i ) { if ( v13[i] ) { v4 = a1[5]; if ( v4 < 0x10 ) v5 = a1; else v5 = (_DWORD *)*a1; v6 = (int)v5 + a1[4]; if ( v4 < 0x10 ) v7 = a1; else v7 = (_DWORD *)*a1; if ( v6 ) v6 -= (signed int)v7; sub_4F9BA0(a1, v6, 1u, v12); } else { v8 = a1[5]; if ( v8 < 0x10 ) v9 = a1; else v9 = (_DWORD *)*a1; v10 = (int)v9 + a1[4]; if ( v8 < 0x10 ) v11 = a1; else v11 = (_DWORD *)*a1; if ( v10 ) v10 -= (signed int)v11; sub_4F9BA0(a1, v10, 1u, 48); } } } } //----- (006E5370) -------------------------------------------------------- signed int __cdecl sub_6E5370(int a1, const void **a2) { signed int result; // eax signed int v3; // esi void *v4; // eax signed int v5; // [esp+10h] [ebp-30h] void *v6; // [esp+14h] [ebp-2Ch] int v7; // [esp+24h] [ebp-1Ch] unsigned int v8; // [esp+28h] [ebp-18h] int v9; // [esp+3Ch] [ebp-4h] v5 = -1; v8 = 15; v7 = 0; LOBYTE(v6) = 0; sub_4017F0((const void **)&v6, a2, 0, (void *)0xFFFFFFFF); v9 = 0; if ( a1 ) { v3 = 0; do { sub_6E52A0(&v6, v3, 3); v4 = v6; if ( v8 < 0x10 ) v4 = &v6; if ( !(*(int (__thiscall **)(int, void *))(*(_DWORD *)a1 + 72))(a1, v4) ) break; v5 = v3; if ( v7 >= 3 ) sub_4014F0(&v6, v7 - 3, 3u); ++v3; } while ( v3 < 100 ); if ( v8 >= 0x10 ) operator delete(v6); result = v5; } else { if ( v8 >= 0x10 ) operator delete(v6); result = -1; } return result; } //----- (006E5460) -------------------------------------------------------- void __cdecl sub_6E5460(void *a1, int a2) { void *v2; // eax void *v3; // eax void *v4; // [esp+8h] [ebp-48h] unsigned int v5; // [esp+1Ch] [ebp-34h] void *v6; // [esp+24h] [ebp-2Ch] unsigned int v7; // [esp+38h] [ebp-18h] int v8; // [esp+4Ch] [ebp-4h] if ( a2 ) { if ( a2 == 1 ) { v2 = sub_427A80(&v6, (int)a1, ".kfm"); v8 = 1; sub_406450(a1, v2); if ( v7 >= 0x10 ) operator delete(v6); } } else { v3 = sub_427A80(&v4, (int)a1, ".nif"); v8 = 0; sub_406450(a1, v3); if ( v5 >= 0x10 ) operator delete(v4); } } //----- (006E5520) -------------------------------------------------------- char __thiscall sub_6E5520(_BYTE *this, int a2, char *Src) { int v3; // edx _DWORD *v5; // esi _DWORD *v6; // eax void **v7; // eax char *v8; // edx _DWORD *v9; // esi int v10; // eax char *v11; // eax if ( !a2 ) return 0; if ( *(_BYTE *)(a2 + 12) ) { v3 = *(_DWORD *)(a2 + 8); if ( !v3 || !*(_DWORD *)(v3 + 12) ) return 0; } else if ( !*(_DWORD *)(a2 + 4) ) { return 0; } this[12] = *(_BYTE *)(a2 + 12); if ( *(_BYTE *)(a2 + 12) ) { v5 = this + 8; v6 = sub_801640(*(char **)(a2 + 8)); sub_56FF80(v5, (int)v6); if ( *v5 ) { v7 = *(void ***)(*v5 + 12); if ( v7 ) { v8 = Src; if ( *((_DWORD *)Src + 5) >= 0x10u ) v8 = *(char **)Src; sub_85AB50(v7, v8); sub_85BED0(*(_DWORD ***)(*v5 + 12), 0.0, 1); sub_85C4D0(*(_DWORD **)(*v5 + 12)); OutputDebugStringA("----------MiniHouse ResNIFElementKFM CLONE Name is = "); OutputDebugStringA(*(LPCSTR *)(*(_DWORD *)(*v5 + 12) + 8)); OutputDebugStringA("\n"); return 1; } } return 0; } v9 = this + 4; v10 = sub_85BD60(*(void **)(a2 + 4)); sub_56FF80(v9, v10); if ( !*v9 ) return 0; v11 = Src; if ( *((_DWORD *)Src + 5) >= 0x10u ) v11 = *(char **)Src; sub_85AB50((void **)*v9, v11); sub_85BED0((_DWORD **)*v9, 0.0, 1); sub_85C4D0((_DWORD *)*v9); OutputDebugStringA("----------MiniHouse ResNIFElementNIF CLONE Name is = "); OutputDebugStringA(*(LPCSTR *)(*v9 + 8)); OutputDebugStringA("\n"); return 1; } //----- (006E5650) -------------------------------------------------------- char __thiscall sub_6E5650(void *this, char *a2, char *Src) { char *v3; // eax void *v4; // ebx _DWORD *v5; // eax int v6; // esi _DWORD *v7; // edi void **v8; // ecx char *v10; // eax v3 = a2; v4 = this; if ( *((_DWORD *)a2 + 5) >= 0x10u ) v3 = *(char **)a2; v5 = sub_8F63D0(v3, 0); v6 = *((_DWORD *)v4 + 1); v7 = v5; if ( (_DWORD *)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *((_DWORD *)v4 + 1) = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v8 = (void **)*((_DWORD *)v4 + 1); if ( !v8 ) return 0; v10 = Src; if ( *((_DWORD *)Src + 5) >= 0x10u ) v10 = *(char **)Src; sub_85AB50(v8, v10); OutputDebugStringA("----------MiniHouse ResNIFElement MAKE Name is = "); OutputDebugStringA(*(LPCSTR *)(*((_DWORD *)v4 + 1) + 8)); OutputDebugStringA("\n"); return 1; } //----- (006E56F0) -------------------------------------------------------- char __thiscall sub_6E56F0(_DWORD *this, char *a2, char *Src) { char *v3; // eax _DWORD *v4; // ebx _DWORD *v5; // eax int v6; // esi _DWORD *v7; // edi int v8; // eax void **v9; // eax char *v10; // edx v3 = a2; v4 = this; if ( *((_DWORD *)a2 + 5) >= 0x10u ) v3 = *(char **)a2; v5 = sub_803770(v3, 0, 1, 0); v6 = v4[2]; v7 = v5; if ( (_DWORD *)v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4[2] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v8 = v4[2]; if ( !v8 ) return 0; v9 = *(void ***)(v8 + 12); if ( v9 ) { v10 = Src; if ( *((_DWORD *)Src + 5) >= 0x10u ) v10 = *(char **)Src; sub_85AB50(v9, v10); } *((_BYTE *)v4 + 12) = 1; return 1; } //----- (006E5790) -------------------------------------------------------- char __thiscall sub_6E5790(const void **this, char *a2, char *Src) { const void **v3; // ebx char *v4; // eax int v5; // esi char v6; // al v3 = this; if ( *((_DWORD *)a2 + 5) < 0x10u ) v4 = a2; else v4 = *(char **)a2; v5 = (int)&v4[*((_DWORD *)a2 + 4)]; sub_4017F0(this + 4, (const void **)a2, 0, (void *)0xFFFFFFFF); v6 = *(_BYTE *)(v5 - 1); if ( v6 == 102 ) return sub_6E5650(v3, a2, Src); if ( v6 == 109 ) return sub_6E56F0(v3, a2, Src); return 0; } //----- (006E5810) -------------------------------------------------------- int __thiscall sub_6E5810(char *this, int a2) { int v2; // edi signed int v3; // ebx int v4; // edi signed int v5; // ebx int v6; // edi signed int v7; // ebx int v8; // edi signed int v9; // ebx char *v11; // [esp+Ch] [ebp-4h] v11 = this; v2 = (int)(this + 372); v3 = 392; do { (*(void (__stdcall **)(int))(**(_DWORD **)v2 + 256))(a2); v2 += 4; --v3; } while ( v3 ); v4 = (int)(v11 + 1940); v5 = 49; do { (*(void (__stdcall **)(int))(**(_DWORD **)v4 + 256))(a2); v4 += 4; --v5; } while ( v5 ); v6 = (int)(v11 + 3600); v7 = 4; do { (*(void (__stdcall **)(int))(**(_DWORD **)v6 + 256))(a2); v6 += 4; --v7; } while ( v7 ); v8 = (int)(v11 + 3624); v9 = 2; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v8 - 8) + 256))(a2); (*(void (__stdcall **)(int))(**(_DWORD **)v8 + 256))(a2); v8 += 4; --v9; } while ( v9 ); return (*(int (__stdcall **)(int))(**((_DWORD **)v11 + 908) + 256))(a2); } //----- (006E58E0) -------------------------------------------------------- BOOL __thiscall sub_6E58E0(int this) { HWND v1; // ecx BOOL result; // eax *(_BYTE *)(this + 3656) = 0; v1 = *(HWND *)(this + 3636); if ( v1 ) result = DestroyWindow(v1); return result; } //----- (006E5900) -------------------------------------------------------- int __thiscall sub_6E5900(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int result; // eax int v4; // ecx v1 = this; v1[910] = v1[915] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1) + v1[916] + 2; result = v1[917] - 8; v4 = v1[918] - 10; v1[911] = v2; v1[912] = result; v1[913] = v4; return result; } //----- (006E5960) -------------------------------------------------------- int __stdcall sub_6E5960(int a1, unsigned int a2) { int result; // eax switch ( a1 ) { case 3: result = a2 < 0x62 ? a2 : 0; break; case 13: result = a2 - 98 < 0x62 ? a2 - 98 : 0; break; case 14: result = a2 - 196 < 0x62 ? a2 - 196 : 0; break; case 16: result = a2 - 294 < 0x62 ? a2 - 294 : 0; break; default: result = 0; break; } return result; } //----- (006E59F0) -------------------------------------------------------- int __thiscall sub_6E59F0(char *this, unsigned int a2) { signed int v2; // edi int v3; // esi int result; // eax if ( a2 < 2 ) { v2 = 0; v3 = (int)(this + 3624); do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 - 8) + 256))(0); result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v3 + 256))(1); if ( v2 == a2 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 - 8) + 256))(1); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 256))(0); dword_B9E1E0 = v2; } ++v2; v3 += 4; } while ( v2 < 2 ); } return result; } // B9E1E0: using guessed type int dword_B9E1E0; //----- (006E5AF0) -------------------------------------------------------- int __thiscall sub_6E5AF0(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi int v4; // esi _DWORD *v5; // ecx v3 = this; v4 = a3; if ( a3 >= 0x62 ) { LABEL_6: v4 = 0; } else { switch ( dword_B9E1E4 ) { case 3: break; case 13: v4 = a3 + 98; break; case 14: v4 = a3 + 196; break; case 16: v4 = a3 + 294; break; default: goto LABEL_6; } } v5 = (_DWORD *)this[v4 + 93]; if ( !v5 ) return 0; sub_5D5470(v5); return v3[v4 + 93]; } // B9E1E4: using guessed type int dword_B9E1E4; //----- (006E5BA0) -------------------------------------------------------- char sub_6E5BA0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHomeEdit"); return (char)v0; } //----- (006E5CC0) -------------------------------------------------------- int __stdcall sub_6E5CC0(int a1) { return sub_685A90(&byte_ADA230, a1); } // ADA230: using guessed type char byte_ADA230; //----- (006E5CD0) -------------------------------------------------------- int __thiscall sub_6E5CD0(int this) { int result; // eax result = *(_DWORD *)(this + 296); if ( *(_DWORD *)(result + 1084) ) { if ( dword_ADB4FC == 2 ) result = sub_6E5810((char *)this, 1); } return result; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (006E5CF0) -------------------------------------------------------- BOOL __thiscall sub_6E5CF0(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[909]); if ( result ) { if ( *((_BYTE *)v1 + 3656) ) { sub_6E5900(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[909], (int)v1[910] + Rect.left, (int)v1[911] + Rect.top, (int)v1[912], (int)v1[913], 1); } } return result; } //----- (006E5D80) -------------------------------------------------------- char __thiscall sub_6E5D80(_DWORD **this, _DWORD *a2, __int16 a3) { _DWORD *v3; // esi _DWORD **v4; // ebx signed int v5; // edi int v6; // eax int v7; // ecx char result; // al __int16 v9; // [esp+Ch] [ebp-4h] v3 = a2; v4 = this; switch ( a2[2] ) { case 0xE: v5 = 3; goto LABEL_6; case 0xF: v5 = 13; goto LABEL_6; case 0x10: v5 = 14; goto LABEL_6; case 0x11: v5 = 16; LABEL_6: if ( v5 != dword_B9E1E4 ) goto LABEL_12; if ( !a2[4] ) { v6 = a2[5]; if ( v6 ) sub_6BA9B0(*(unsigned __int16 *)(v6 + 8)); } v7 = v3[3]; switch ( dword_B9E1E4 ) { case 3: case 13: case 14: case 16: v9 = ((_WORD)v5 << 10) | v7 & 0x3FF; LOWORD(a2) = ((_WORD)v5 << 10) | a3 & 0x3FF; sub_4B7B90(v4[74], &v9, (__int16 *)&a2); result = 1; break; default: goto LABEL_12; } break; default: LABEL_12: result = 0; break; } return result; } // B9E1E4: using guessed type int dword_B9E1E4; //----- (006E5F30) -------------------------------------------------------- unsigned int __thiscall sub_6E5F30(char *this, int a2) { char *v2; // edi unsigned int result; // eax int v4; // ecx signed int v5; // esi int v6; // [esp+8h] [ebp-8h] unsigned int v7; // [esp+Ch] [ebp-4h] v2 = this; result = 0; v4 = (int)(this + 3600); v7 = 0; v6 = v4; do { if ( a2 == result ) { *(_BYTE *)(*(_DWORD *)v4 + 380) = 1; v5 = 0; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&v2[4 * v5 + 3616] + 256))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)&v2[4 * v5 + 3624] + 256))(1); if ( !v5 ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 904) + 256))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 906) + 256))(0); dword_B9E1E0 = 0; } ++v5; } while ( v5 < 2 ); result = v7; v4 = v6; } else { *(_BYTE *)(*(_DWORD *)v4 + 380) = 0; } ++result; v4 += 4; v7 = result; v6 = v4; } while ( result < 4 ); return result; } // B9E1E0: using guessed type int dword_B9E1E0; //----- (006E5FF0) -------------------------------------------------------- int __thiscall sub_6E5FF0(char *this, int a2, unsigned int a3) { int result; // eax char *v4; // ebx int v5; // esi signed int v6; // edi int v7; // eax int v8; // ecx int v9; // esi int v10; // edi signed int v11; // [esp+1Ch] [ebp+8h] result = a2; v4 = this; switch ( a2 ) { case 3: v11 = 0; dword_B9E1E4 = 3; sub_6E5F30(this, 0); goto LABEL_6; case 13: v11 = 2; dword_B9E1E4 = 13; sub_6E5F30(this, 1); goto LABEL_6; case 14: v11 = 4; dword_B9E1E4 = 14; sub_6E5F30(this, 2); goto LABEL_6; case 16: v11 = 6; dword_B9E1E4 = 16; sub_6E5F30(this, 3); LABEL_6: v5 = (int)(v4 + 372); v6 = 392; do { *(_BYTE *)(*(_DWORD *)v5 + 456) = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 324))(0.0); v5 += 4; --v6; } while ( v6 ); v7 = 49 * v11; v8 = 49 * v11 + 49; if ( 49 * v11 < v8 ) { v9 = (int)&v4[4 * (v7 + 49 * a3) + 372]; v10 = v8 - v7; do { *(_BYTE *)(*(_DWORD *)v9 + 456) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v9 + 324))(0.0); v9 += 4; --v10; } while ( v10 ); } result = sub_6E59F0(v4, a3); break; default: return result; } return result; } // B9E1E4: using guessed type int dword_B9E1E4; //----- (006E6120) -------------------------------------------------------- char __thiscall sub_6E6120(HWND *this, int a2) { HWND *v2; // esi int v3; // edi char result; // al v2 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_8F3540(v2); if ( !result ) return result; *(_BYTE *)(v3 + 2659) = 0; sub_8EEE70((_DWORD *)v3, 224, 0, 0); MoveWindow(v2[909], -1000, -1000, -999, -999, 0); *((_BYTE *)v2 + 3656) = 0; } return sub_6E5CF0(v2); } // ACDC84: using guessed type int dword_ACDC84; //----- (006E61A0) -------------------------------------------------------- int __thiscall sub_6E61A0(_DWORD *this, int a2) { bool v2; // zf _DWORD **v3; // esi int v5; // [esp+4h] [ebp-4h] *(_BYTE *)(*(_DWORD *)(this[919] + 8) + 380) = 0; v2 = this[59] == 0; v3 = (_DWORD **)(this + 58); v5 = a2; if ( !v2 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*(_DWORD *)this[59] + 4))(62, &v5, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 20))(62, &v5, v3); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[5])(v3, 62, &v5, v3); } //----- (006E6210) -------------------------------------------------------- char __thiscall sub_6E6210(_DWORD *this, char a2, int a3) { _DWORD *v3; // esi int v4; // eax v3 = this; v4 = *(_DWORD *)(this[74] + 1124); if ( !v4 ) return 1; if ( *(_WORD *)(v4 + 346) == -1 ) { sub_6DCBA0((int)byte_ADB468, a3); sub_6F0090(*(_DWORD *)(v3[74] + 1124), a3); sub_4A7E60((_DWORD *)v3[74], a2, 1); OutputDebugStringA(&byte_9F9B70); return 1; } OutputDebugStringA(&byte_9F9B7C); return 0; } //----- (006E6290) -------------------------------------------------------- void __thiscall sub_6E6290(_DWORD *this, unsigned int a2) { int v2; // ebx _DWORD *v3; // ebx const CHAR *v4; // eax _DWORD *v5; // eax int v6; // eax __int16 v7; // dx int v8; // esi int v9; // edi char v10; // [esp+4h] [ebp-6Ch] unsigned __int16 v11; // [esp+7h] [ebp-69h] _DWORD *v12; // [esp+6Ch] [ebp-4h] v2 = (int)this; if ( !dword_BA6BCC ) { if ( dword_ADB4F8 && dword_ADB50C ) { v3 = (_DWORD *)this[74]; v4 = sub_40A910(19356529); sub_492060(v3, (int)v4); } else { if ( dword_ADB4F8 == 2 ) sub_492060((_DWORD *)this[74], (int)&unk_9F9AEC); *(_DWORD *)(v2 + 3592) = 0; v5 = (_DWORD *)sub_6E5AF0((_DWORD *)v2, dword_B9E1E4, a2); v12 = v5; if ( v5 ) { v6 = sub_5D5470(v5); if ( v6 ) { v7 = dword_B9E1E4; qmemcpy(&v10, (const void *)(v6 + 8), 0x67u); v8 = v11; v9 = (int)v12; *(_DWORD *)(v2 + 3592) = v12; *(_WORD *)(v2 + 3596) = (v7 << 10) | a2 & 0x3FF; if ( v8 != dword_ADB564 ) { sub_6DCB60((int)byte_ADB468, 0); sub_4AA990(*(_DWORD *)(v2 + 296), v2, v9, *(_BYTE *)(v9 + 457), v8); } } } } } } // ADB4F8: using guessed type int dword_ADB4F8; // ADB50C: using guessed type int dword_ADB50C; // ADB564: using guessed type int dword_ADB564; // B9E1E4: using guessed type int dword_B9E1E4; // BA6BCC: using guessed type int dword_BA6BCC; //----- (006E6390) -------------------------------------------------------- void __thiscall sub_6E6390(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // esi _DWORD *v4; // esi const CHAR *v5; // eax unsigned int v6; // ebx int v7; // ecx unsigned __int16 *v8; // edi int v9; // eax int v10; // edx v3 = this; if ( dword_ADB4F8 && dword_ADB50C ) { v4 = (_DWORD *)this[74]; v5 = sub_40A910(19356529); sub_492060(v4, (int)v5); } else { if ( dword_ADB4F8 == 2 ) sub_492060((_DWORD *)this[74], (int)&unk_9F9B00); v6 = a3; if ( a3 >= 0x62 ) { LABEL_11: v6 = 0; } else { switch ( dword_B9E1E4 ) { case 3: break; case 13: v6 = a3 + 98; break; case 14: v6 = a3 + 196; break; case 16: v6 = a3 + 294; break; default: goto LABEL_11; } } v7 = v3[v6 + 93]; if ( !*(_BYTE *)(v7 + 457) ) { v8 = (unsigned __int16 *)sub_5D5470((_DWORD *)v7); if ( v8 ) { switch ( a2 ) { case 3: v3[882] = 14; break; case 13: v3[882] = 15; break; case 14: v3[882] = 16; break; case 16: v3[882] = 17; break; default: break; } v9 = sub_6E5960(a2, v6); v3[884] = v10; v3[883] = v9; v3[885] = v8; v3[886] = v10; v3[896] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v8 + 12))(v8); v3[879] = v3; dword_BA6BCC = (int)(v3 + 877); sub_6BA9B0(v8[4]); } } } } // ADB4F8: using guessed type int dword_ADB4F8; // ADB50C: using guessed type int dword_ADB50C; // B9E1E4: using guessed type int dword_B9E1E4; // BA6BCC: using guessed type int dword_BA6BCC; //----- (006E6530) -------------------------------------------------------- void __thiscall sub_6E6530(int this, int a2, unsigned int a3) { int v3; // esi v3 = this; switch ( a2 ) { case 0: sub_6E61A0((_DWORD *)this, 0); break; case 1: sub_6E61A0((_DWORD *)this, 1); break; case 2: sub_6E61A0((_DWORD *)this, 2); break; case 3: sub_6E61A0((_DWORD *)this, 3); break; case 4: sub_6E61A0((_DWORD *)this, 4); break; case 5: sub_6E61A0((_DWORD *)this, 5); break; case 10: sub_4AC040(*(_DWORD **)(this + 296)); break; case 11: sub_6E6390((_DWORD *)this, dword_B9E1E4, a3); break; case 12: sub_6E6290((_DWORD *)this, a3); break; case 13: sub_6E5FF0((char *)this, 3, 0); break; case 14: sub_6E5FF0((char *)this, 13, 0); break; case 15: sub_6E5FF0((char *)this, 14, 0); break; case 16: sub_6E5FF0((char *)this, 16, 0); break; case 17: sub_6E5FF0((char *)this, dword_B9E1E4, 0); break; case 18: sub_6E5FF0((char *)this, dword_B9E1E4, 1u); break; case 19: sub_8EEE70(*(_DWORD **)(this + 296), 224, 0, 0); MoveWindow(*(HWND *)(v3 + 3636), -1000, -1000, -999, -999, 0); *(_BYTE *)(v3 + 3656) = 0; break; case 20: sub_6E5BA0(); break; default: return; } } // B9E1E4: using guessed type int dword_B9E1E4; //----- (006E66D0) -------------------------------------------------------- char __thiscall sub_6E66D0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (006E6700) -------------------------------------------------------- char __thiscall sub_6E6700(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // eax int *v4; // ecx v1 = this; (*(void (__stdcall **)(_DWORD))(*this + 324))(0.0); v2 = sub_5D5470(v1); v3 = (_DWORD *)sub_402BF0(v1); if ( v3 && v2 ) { if ( v1[77] == 1 && dword_ADB4F8 == 2 ) LOBYTE(v3) = sub_6E6210(v3, 1, *(unsigned __int16 *)(v2 + 11)); v4 = (int *)v1[68]; if ( v4 ) { sub_547C20(v4, v2); LOBYTE(v3) = sub_8F2F90((int)v1); } } return (char)v3; } // ADB4F8: using guessed type int dword_ADB4F8; //----- (006E6770) -------------------------------------------------------- void __thiscall sub_6E6770(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 457) ) { if ( dword_ADB4F8 == 2 ) { OutputDebugStringA(&byte_9F9B60); } else { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 296), *(_DWORD *)(v1 + 448)); } } } // ADB4F8: using guessed type int dword_ADB4F8; //----- (006E67C0) -------------------------------------------------------- char __thiscall sub_6E67C0(int this, int a2, int a3, int a4) { int v4; // edi char result; // al _DWORD *v6; // esi _DWORD **v7; // eax v4 = this; if ( *(_BYTE *)(this + 457) || !*(_DWORD *)a2 || !*(_BYTE *)(this + 456) ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 || v6[4] ) return 0; switch ( v6[2] ) { case 0xE: case 0xF: case 0x10: case 0x11: v7 = (_DWORD **)sub_402BF0((_DWORD *)this); result = sub_6E5D80(v7, v6, *(_DWORD *)(v4 + 448)); break; default: return 0; } return result; } //----- (006E6840) -------------------------------------------------------- char __thiscall sub_6E6840(int this, char a2) { int v2; // ebx char result; // al int v4; // edi _DWORD *v5; // eax int v6; // esi int v7; // esi float *v8; // eax float *v9; // eax double v10; // st7 float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 v2 = this; result = a2; if ( *(_BYTE *)(this + 457) != a2 ) { v4 = sub_85C050((_DWORD *)this, 9); if ( !v4 ) { v5 = operator new(0x28u); v6 = (int)v5; if ( v5 ) { sub_85B2B0(v5); *(_DWORD *)v6 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v6 + 28) = 0; *(_DWORD *)(v6 + 32) = 0; *(_DWORD *)(v6 + 36) = 1; } else { v6 = 0; } v4 = v6; sub_403700((_DWORD *)v2, v6); } v7 = sub_85C050((_DWORD *)v2, 3); if ( !v7 ) { v8 = (float *)operator new(0x60u); if ( v8 ) v9 = sub_85EBC0(v8); else v9 = 0; v7 = (int)v9; sub_403700((_DWORD *)v2, (int)v9); } *(_BYTE *)(v2 + 457) = a2; *(_DWORD *)(v4 + 32) = 0; *(_DWORD *)(v4 + 36) = 0; ++*(_DWORD *)(v7 + 88); if ( a2 ) v10 = 0.40000001; else v10 = 1.0; v11 = v10; v12 = v10; *(float *)(v7 + 68) = v11; v13 = v10; *(float *)(v7 + 72) = v12; *(float *)(v7 + 76) = v13; result = sub_85C4D0((_DWORD *)v2); } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (006E6970) -------------------------------------------------------- void __thiscall sub_6E6970(_DWORD *this, float a2) { int v2; // ebx int v3; // esi __int16 *v4; // esi void (__thiscall *v5)(int, signed int); // eax _BYTE v6[100]; // [esp+10h] [ebp-68h] __int16 v7; // [esp+74h] [ebp-4h] char v8; // [esp+76h] [ebp-2h] v2 = (int)this; switch ( this[113] ) { case 3: case 0xD: case 0xE: case 0x10: break; default: OutputDebugStringA("wrong inventype_infomation. minihouseiteminventory icons\n"); break; } v3 = sub_4DC7E0(&byte_ADA230, *(_DWORD *)(v2 + 452), *(_DWORD *)(v2 + 448)); if ( v3 != sub_5D5470((_DWORD *)v2) ) { sub_5D5B70((_WORD *)v2, v3, 1); if ( v3 ) { v4 = (__int16 *)(v3 + 8); qmemcpy(v6, v4, sizeof(v6)); v4 += 50; v7 = *v4; v8 = *((_BYTE *)v4 + 2); if ( v6[2] & 1 ) { if ( !*(_BYTE *)(v2 + 457) ) sub_6E6840(v2, 1); } else if ( *(_BYTE *)(v2 + 457) == 1 ) { sub_6E6840(v2, 0); } } } v5 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 256); if ( *(_BYTE *)(v2 + 456) ) { v5(v2, 1); *(_BYTE *)(v2 + 254) = 1; if ( !sub_5D5470((_DWORD *)v2) ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 256))(v2, 0); sub_534A60((_DWORD *)v2, a2); } else { v5(v2, 0); *(_BYTE *)(v2 + 254) = 0; } } // ADA230: using guessed type char byte_ADA230; //----- (006E6AC0) -------------------------------------------------------- LONG __thiscall sub_6E6AC0(void **this) { void **v1; // esi v1 = this; *this = &mhEditRoomWin::`vftable'; this[58] = &mhEditRoomWin::`vftable'; memset(this + 93, 0, 0x620u); this[906] = 0; this[905] = 0; this[907] = 0; this[904] = 0; if ( this[919] ) operator delete(this[919]); v1[919] = 0; v1[920] = 0; v1[921] = 0; v1[880] = &DropContents::`vftable'; v1[877] = &PgWinDrop::`vftable'; if ( (unsigned int)v1[91] >= 0x10 ) operator delete(v1[86]); v1[90] = 0; v1[91] = (void *)15; *((_BYTE *)v1 + 344) = 0; return sub_8F10F0(v1); } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9F9E28: using guessed type void *mhEditRoomWin::`vftable'; // 9F9E44: using guessed type void *mhEditRoomWin::`vftable'; //----- (006E6B70) -------------------------------------------------------- int __cdecl sub_6E6B70(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1D8u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_533B80((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = &mhItemInvIconWin::`vftable'; *(_DWORD *)(v5 + 232) = &mhItemInvIconWin::`vftable'; *(_DWORD *)(v5 + 380) = 0; *(_DWORD *)(v5 + 448) = -1; *(_DWORD *)(v5 + 452) = 9; sub_5D5B70((_WORD *)v5, 0, 1); *(_WORD *)(v5 + 456) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 620))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9F9B98: using guessed type void *mhItemInvIconWin::`vftable'; // 9F9BB4: using guessed type void *mhItemInvIconWin::`vftable'; //----- (006E6CF0) -------------------------------------------------------- _DWORD *__thiscall sub_6E6CF0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &mhEditRoomWin::`vftable'; v1[58] = &mhEditRoomWin::`vftable'; v1[91] = 15; v1[90] = 0; *((_BYTE *)v1 + 344) = 0; v1[877] = &PgWinDrop::`vftable'; v1[879] = 0; v1[880] = &DropContents::`vftable'; *((_WORD *)v1 + 1790) = -1; v1[896] = 0; v1[919] = 0; v1[920] = 0; v1[921] = 0; memset(v1 + 93, 0, 0x620u); v1[906] = 0; v1[905] = 0; v1[907] = 0; v1[904] = 0; dword_B9E1E4 = 0; dword_B9E1E0 = 0; v1[878] = v1 + 880; v1[909] = 0; v1[911] = 0; v1[910] = 0; v1[913] = 0; v1[912] = 0; *((_BYTE *)v1 + 3656) = 0; v1[916] = 0; v1[915] = 0; v1[918] = 0; v1[917] = 0; sub_4018E0(v1 + 86, &unk_9F9961, 0); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9F9E28: using guessed type void *mhEditRoomWin::`vftable'; // 9F9E44: using guessed type void *mhEditRoomWin::`vftable'; // B9E1E0: using guessed type int dword_B9E1E0; // B9E1E4: using guessed type int dword_B9E1E4; //----- (006E6E30) -------------------------------------------------------- volatile LONG *__cdecl sub_6E6E30(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0xE70u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6E6CF0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006E6F60) -------------------------------------------------------- void __thiscall sub_6E6F60(int *this, int a2) { int *v2; // esi int v3; // eax int v4; // edx int v5; // eax int v6; // edi int v7; // eax int v8; // ecx int v9; // ebx int v10; // edx void *v11; // eax int v12; // eax void (__thiscall *v13)(int *, int *); // edx int v14; // edi int v15; // [esp+10h] [ebp-4Ch] int v16; // [esp+14h] [ebp-48h] int v17; // [esp+18h] [ebp-44h] int v18; // [esp+1Ch] [ebp-40h] int v19; // [esp+20h] [ebp-3Ch] int v20; // [esp+24h] [ebp-38h] int v21; // [esp+28h] [ebp-34h] int v22; // [esp+2Ch] [ebp-30h] void *v23; // [esp+30h] [ebp-2Ch] int v24; // [esp+40h] [ebp-1Ch] unsigned int v25; // [esp+44h] [ebp-18h] int v26; // [esp+58h] [ebp-4h] v2 = this; if ( *((_BYTE *)this + 3656) == 1 ) DestroyWindow((HWND)this[909]); v3 = (*(int (__thiscall **)(int *))(*v2 + 164))(v2); v4 = *v2; v2[910] = v2[915] + v3; v5 = (*(int (__thiscall **)(int *))(v4 + 168))(v2); v6 = v2[910]; v7 = v5 + v2[916] + 2; v8 = v2[917] - 8; v9 = 0; v10 = v2[918] - 10; v2[912] = v8; v21 = v8; v2[911] = v7; v2[913] = v10; v19 = v6; v20 = v7; v22 = v10; v25 = 15; v24 = 0; LOBYTE(v23) = 0; sub_4018E0(&v23, &unk_9F9960, 0); v26 = 0; if ( a2 ) { v11 = v23; if ( v25 < 0x10 ) v11 = &v23; v12 = sub_427200((char)hWnd, dword_ACDC7C, v11, (int)&v19); v13 = *(void (__thiscall **)(int *, int *))(*v2 + 208); v2[909] = v12; *((_BYTE *)v2 + 3656) = 1; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v13(v2, &v15); v14 = 0; if ( xRight >= (unsigned int)(v16 - v15) && dword_AC2F78 >= (unsigned int)(v18 - v17) ) { v9 = (*(int (__thiscall **)(int *))(*v2 + 164))(v2); v14 = (*(int (__thiscall **)(int *))(*v2 + 168))(v2); } (*(void (__thiscall **)(int *, int))(*v2 + 172))(v2, v9); (*(void (__thiscall **)(int *, int))(*v2 + 176))(v2, v14); if ( v25 >= 0x10 ) operator delete(v23); } else if ( v25 >= 0x10 ) { operator delete(v23); } } //----- (006E7120) -------------------------------------------------------- char __thiscall sub_6E7120(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; sub_5D5420(v5, 1); a5 = v5; sub_5B3CF0(&dword_AD02C4, &a5); *((_BYTE *)v5 + 468) = 0; result = 1; } return result; } //----- (006E7180) -------------------------------------------------------- void __thiscall sub_6E7180(_WORD *this, int a2) { volatile LONG **v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // eax volatile LONG *v8; // edi volatile LONG v9; // ebx const CHAR *v10; // eax volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG *v16; // eax int v17; // ecx volatile LONG **v18; // eax CHAR *v19; // eax CHAR *v20; // eax CHAR *v21; // eax CHAR *v22; // eax CHAR *v23; // eax CHAR *v24; // eax int v25; // edi int *v26; // eax volatile LONG **v27; // ebx int *v28; // eax const char *v29; // eax volatile LONG v30; // edi volatile LONG **v31; // edi int v32; // [esp+10h] [ebp-148h] int v33; // [esp+14h] [ebp-144h] volatile LONG *v34; // [esp+18h] [ebp-140h] int v35; // [esp+1Ch] [ebp-13Ch] unsigned int v36; // [esp+20h] [ebp-138h] int v37; // [esp+24h] [ebp-134h] char *v38; // [esp+28h] [ebp-130h] int v39; // [esp+2Ch] [ebp-12Ch] int v40; // [esp+30h] [ebp-128h] int v41; // [esp+34h] [ebp-124h] int v42; // [esp+38h] [ebp-120h] int v43; // [esp+48h] [ebp-110h] unsigned int v44; // [esp+4Ch] [ebp-10Ch] char v45; // [esp+54h] [ebp-104h] char v46; // [esp+70h] [ebp-E8h] char v47; // [esp+8Ch] [ebp-CCh] char v48; // [esp+A8h] [ebp-B0h] char v49; // [esp+C4h] [ebp-94h] char v50; // [esp+E0h] [ebp-78h] char v51[2]; // [esp+13Ch] [ebp-1Ch] int v52; // [esp+13Eh] [ebp-1Ah] int v53; // [esp+142h] [ebp-16h] __int16 v54; // [esp+146h] [ebp-12h] int v55; // [esp+154h] [ebp-4h] int savedregs; // [esp+158h] [ebp+0h] v2 = (volatile LONG **)this; v39 = 0; this[1798] = 0; v3 = dword_BA6BA0; v55 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomeEdit.nif"); sub_8F66B0(v4, (int)&v39, v3); if ( !v39 ) LABEL_9: JUMPOUT(&loc_6E7FA5); v5 = sub_8FB140(v39, (int)"Frame", (int)&v37, (int)&v35, 0); if ( !sub_8F1440(v2, 0, 0, (int)v5, 0, a2, (int)"mhEditRoomWin", 0) || !sub_8F71E0(v39, (int)"WinTitle", &v40, &v41, &v32, &v33) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v39; v55 = -1; if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } goto LABEL_9; } v7 = sub_421050(7); v8 = sub_8F4A20(v40 - v37, v41 - v35 + 2, v32, v33, v7, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v8 + 488))(v8, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v8 + 468))(v8, &dword_AA8D98); v9 = *v8; v10 = sub_40A910(-420723676); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v9 + 472))(v8, v10); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v8 + 240))(v8, 0); v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v39, (int)"Theme", (int)&v40, (int)&v41, v11); else v12 = sub_8FB140(v39, (int)"Theme", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40 - v37, v41 - v35, (int)v12, (int)v2, 0, 0); v13 = sub_8FB140(v39, (int)"Panel01", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40 - v37, v41 - v37, (int)v13, (int)v2, 0, 0); if ( !sub_8F71E0(v39, (int)"Panel02", v2 + 915, v2 + 916, v2 + 917, v2 + 918) ) { v55 = -1; sub_410C00(&v39); JUMPOUT(&loc_6E7FA5); } v14 = sub_8FB140(v39, (int)"Panel02", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40 - v37, v41 - v37, (int)v14, (int)v2, 0, 0); v15 = sub_8FB140(v39, (int)"Panel03", (int)&v40, (int)&v41, 0); v16 = sub_8F3EB0(v40, v41, (int)v15, (int)v2, 0, 0); v17 = v39; v2[908] = v16; v18 = sub_8FB140(v17, (int)"Panel04", (int)&v40, (int)&v41, 0); sub_8F3EB0(v40, v41, (int)v18, (int)v2, 0, 0); v44 = 15; v43 = 0; LOBYTE(v42) = 0; LOBYTE(v55) = 1; strcpy(v51, "0"); v52 = 0; v53 = 0; v54 = 0; v19 = (CHAR *)sub_40A910(-1683425310); sub_4019E0(&v45, v19); LOBYTE(v55) = 2; v20 = (CHAR *)sub_40A910(1279871523); sub_4019E0(&v46, v20); LOBYTE(v55) = 3; v21 = (CHAR *)sub_40A910(-420723676); sub_4019E0(&v47, v21); LOBYTE(v55) = 4; v22 = (CHAR *)sub_40A910(-671989437); sub_4019E0(&v48, v22); LOBYTE(v55) = 5; v23 = (CHAR *)sub_40A910(-555208947); sub_4019E0(&v49, v23); LOBYTE(v55) = 6; v24 = (CHAR *)sub_40A910(-95796673); sub_4019E0(&v50, v24); LOBYTE(v55) = 7; v25 = 0; v38 = &v45; do { v36 = v25 + 1; _itoa(v25 + 1, v51, 10); sub_4018E0(&v42, "BtnNor0", 7u); sub_401D10((int)&v42, v51, strlen(v51)); v26 = (int *)v42; if ( v44 < 0x10 ) v26 = &v42; v27 = sub_8FB140(v39, (int)v26, (int)&v40, (int)&v41, 0); sub_4018E0(&v42, "BtnOver0", 8u); sub_401D10((int)&v42, v51, strlen(v51)); v28 = (int *)v42; if ( v44 < 0x10 ) v28 = &v42; sub_8FB650(v27, v39, (int)v28); v34 = sub_465940(v40, v41, (int)v27, (int)v2, v25, 0); sub_5B3CF0(v2 + 919, &v34); v29 = v38; if ( *((_DWORD *)v38 + 5) >= 0x10u ) v29 = *(const char **)v38; sub_8F2EA0((void **)v2[919][v25], v29); v30 = v2[919][v25]; v38 += 28; *(_DWORD *)(v30 + 272) = dword_AD01E8; v25 = v36; } while ( v36 < 6 ); v31 = sub_8FB140(v39, (int)"Tab01_Off", (int)&v40, (int)&v41, 0); sub_8FB650(v31, v39, (int)"Tab01_On"); sub_6E776F(v41, (int)&savedregs, (int)v31, (char *)v2, a2); } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006E776F) -------------------------------------------------------- void __userpurge sub_6E776F(int a1@, int a2@, int a3@, char *a4@, int a5) { volatile LONG *v5; // ST4C_4 volatile LONG *v6; // edi int v7; // ST48_4 int v8; // ST44_4 int v9; // eax volatile LONG *v10; // edi volatile LONG v11; // ebx const CHAR *v12; // eax volatile LONG v13; // ebx int v14; // eax volatile LONG **v15; // edi volatile LONG *v16; // ST4C_4 volatile LONG *v17; // edi int v18; // ST48_4 int v19; // ST44_4 int v20; // eax volatile LONG *v21; // edi volatile LONG v22; // ebx const CHAR *v23; // eax volatile LONG v24; // ebx int v25; // eax volatile LONG **v26; // edi volatile LONG *v27; // ST4C_4 volatile LONG *v28; // edi int v29; // ST48_4 int v30; // ST44_4 int v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ebx const CHAR *v34; // eax volatile LONG v35; // ebx int v36; // eax volatile LONG **v37; // edi volatile LONG *v38; // ST4C_4 volatile LONG *v39; // edi int v40; // ST48_4 int v41; // ST44_4 int v42; // eax volatile LONG *v43; // edi volatile LONG v44; // ebx const CHAR *v45; // eax volatile LONG v46; // ebx int v47; // eax signed int v48; // ebx volatile LONG **v49; // eax int v50; // eax int v51; // ecx volatile LONG **v52; // eax volatile LONG **v53; // eax int v54; // eax int v55; // edx volatile LONG **v56; // eax volatile LONG **v57; // edi volatile LONG *v58; // edi volatile LONG **v59; // edi int *v60; // edi volatile LONG **v61; // eax int *v62; // ebx int v63; // edx int v64; // eax int v65; // eax void (__thiscall *v66)(char *); // eax int v67; // esi int v68; // et1 int v69; // ecx v5 = sub_465940(*(_DWORD *)(a2 - 296), a1, a3, (int)a4, 13, 0); *((_DWORD *)a4 + 900) = v5; v6 = v5; v7 = sub_421050(0); v8 = (*(int (__thiscall **)(volatile LONG *))(*v6 + 148))(v6); v9 = (*(int (__thiscall **)(volatile LONG *))(*v6 + 144))(v6); v10 = sub_8F4A20(0, 3, v9, v8, v7, (int)v5, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v10 + 488))(v10, 5); v11 = *v10; v12 = sub_40A910(-1241100275); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v11 + 472))(v10, v12); v13 = *v10; v14 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v13 + 452))(v10, v14); sub_9074F0(*((_DWORD *)v10 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); *(_BYTE *)(*((_DWORD *)a4 + 900) + 380) = 1; v15 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"Tab02_Off", a2 - 296, a2 - 292, 0); sub_8FB650(v15, *(_DWORD *)(a2 - 300), (int)"Tab021_On"); v16 = sub_465940(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v15, (int)a4, 14, 0); *((_DWORD *)a4 + 901) = v16; v17 = v16; v18 = sub_421050(0); v19 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 148))(v17); v20 = (*(int (__thiscall **)(volatile LONG *))(*v17 + 144))(v17); v21 = sub_8F4A20(0, 3, v20, v19, v18, (int)v16, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); v22 = *v21; v23 = sub_40A910(-1558231048); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v22 + 472))(v21, v23); v24 = *v21; v25 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v24 + 452))(v21, v25); sub_9074F0(*((_DWORD *)v21 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); *(_BYTE *)(*((_DWORD *)a4 + 901) + 380) = 0; v26 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"Tab03_Off", a2 - 296, a2 - 292, 0); sub_8FB650(v26, *(_DWORD *)(a2 - 300), (int)"Tab03_On"); v27 = sub_465940(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v26, (int)a4, 15, 0); *((_DWORD *)a4 + 902) = v27; v28 = v27; v29 = sub_421050(0); v30 = (*(int (__thiscall **)(volatile LONG *))(*v28 + 148))(v28); v31 = (*(int (__thiscall **)(volatile LONG *))(*v28 + 144))(v28); v32 = sub_8F4A20(0, 3, v31, v30, v29, (int)v27, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v33 = *v32; v34 = sub_40A910(-1563953666); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); v35 = *v32; v36 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v35 + 452))(v32, v36); sub_9074F0(*((_DWORD *)v32 + 72), 1); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); *(_BYTE *)(*((_DWORD *)a4 + 902) + 380) = 0; v37 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"Tab04_Off", a2 - 296, a2 - 292, 0); sub_8FB650(v37, *(_DWORD *)(a2 - 300), (int)"Tab04_On"); v38 = sub_465940(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v37, (int)a4, 16, 0); *((_DWORD *)a4 + 903) = v38; v39 = v38; v40 = sub_421050(0); v41 = (*(int (__thiscall **)(volatile LONG *))(*v39 + 148))(v39); v42 = (*(int (__thiscall **)(volatile LONG *))(*v39 + 144))(v39); v43 = sub_8F4A20(0, 3, v42, v41, v40, (int)v38, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); v44 = *v43; v45 = sub_40A910(-386806300); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v43, v45); v46 = *v43; v47 = sub_421050(3); (*(void (__thiscall **)(volatile LONG *, int))(v46 + 452))(v43, v47); sub_9074F0(*((_DWORD *)v43 + 72), 1); v48 = 0; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); *(_BYTE *)(*((_DWORD *)a4 + 903) + 380) = 0; v49 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"InvFitTabOn", a2 - 296, a2 - 292, 0); v50 = sub_537DA0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v49, (int)a4, 0); v51 = *(_DWORD *)(a2 - 300); *((_DWORD *)a4 + 904) = v50; v52 = sub_8FB140(v51, (int)"InvFitTabDis", a2 - 296, a2 - 292, 0); *((_DWORD *)a4 + 906) = sub_537DA0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v52, (int)a4, 17); v53 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"InvSecTabOn", a2 - 296, a2 - 292, 0); v54 = sub_537DA0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v53, (int)a4, 0); v55 = *(_DWORD *)(a2 - 300); *((_DWORD *)a4 + 905) = v54; v56 = sub_8FB140(v55, (int)"InvSecTabDis", a2 - 296, a2 - 292, 0); *((_DWORD *)a4 + 907) = sub_537DA0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v56, (int)a4, 18); *(_DWORD *)(a2 - 304) = 0; v57 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"ClsNor", a2 - 296, a2 - 292, 0); sub_8FB650(v57, *(_DWORD *)(a2 - 300), (int)"ClsClick"); sub_8FB650(v57, *(_DWORD *)(a2 - 300), (int)"ClsOver"); sub_8FE0F0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v57, (int)a4, 19, 0, 0); v58 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(**(_DWORD **)(a2 - 300) + 72))("HelpLinkNor") ) { v59 = sub_8FB140(*(_DWORD *)(a2 - 300), (int)"HelpLinkNor", a2 - 296, a2 - 292, v58); sub_8FB650(v59, *(_DWORD *)(a2 - 300), (int)"HelpLinkClick"); sub_8FB650(v59, *(_DWORD *)(a2 - 300), (int)"HelpLinkOver"); sub_8FE0F0(*(_DWORD *)(a2 - 296), *(_DWORD *)(a2 - 292), (int)v59, (int)a4, 20, 0, 0); } *(_DWORD *)(a2 - 320) = 0; v60 = (int *)(a4 + 372); do { if ( v48 < 49 ) { sprintf((char *)(a2 - 92), "ItemSlot%02d", v48 + 1); sub_8F71E0( *(_DWORD *)(a2 - 300), a2 - 92, (_DWORD *)(a2 - 296), (_DWORD *)(a2 - 292), (_DWORD *)(a2 - 328), (_DWORD *)(a2 - 324)); v61 = sub_8FB140(*(_DWORD *)(a2 - 300), a2 - 92, a2 - 296, a2 - 292, 0); v60[392] = (int)sub_8F3EB0( *(_DWORD *)(a2 - 296) - *(_DWORD *)(a2 - 308), *(_DWORD *)(a2 - 292) - *(_DWORD *)(a2 - 316), (int)v61, (int)a4, 0, 0); *(_DWORD *)(a2 - 312) = 0; v62 = v60; do { v63 = *(_DWORD *)(a2 - 304); if ( *(_BYTE *)(a2 - 312) & 1 ) v63 += 49; *v62 = sub_6E6B70( *(_DWORD *)(a2 - 296) - *(_DWORD *)(a2 - 308) + 1, *(_DWORD *)(a2 - 292) - *(_DWORD *)(a2 - 316) + 1, v63, (int)a4); v64 = *(_DWORD *)(a2 - 312) + 1; v62 += 49; *(_DWORD *)(a2 - 312) = v64; } while ( v64 < 8 ); v48 = *(_DWORD *)(a2 - 320); } if ( *(_DWORD *)(a2 - 304) >= 0x62u ) *(_DWORD *)(a2 - 304) = 0; sub_5D5B70((_WORD *)*v60, 0, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v60 + 516))(11); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v60 + 560))(12); if ( v48 >= 0 ) { if ( v48 < 98 ) { sub_5332E0((_DWORD *)*v60, 3); goto LABEL_24; } LABEL_16: if ( v48 < 196 ) { sub_5332E0((_DWORD *)*v60, 13); goto LABEL_24; } goto LABEL_19; } if ( v48 >= 98 ) goto LABEL_16; if ( v48 < 196 ) { if ( v48 < 294 ) goto LABEL_24; goto LABEL_22; } LABEL_19: if ( v48 < 294 ) { sub_5332E0((_DWORD *)*v60, 14); goto LABEL_24; } LABEL_22: if ( v48 < 392 ) sub_5332E0((_DWORD *)*v60, 16); LABEL_24: sub_6E6840(*v60, 0); *(_DWORD *)(*v60 + 272) = dword_ACEC34; *(_DWORD *)(*v60 + 304) = 1; sub_5D3170(*v60, 1); v65 = *v60; ++*(_DWORD *)(a2 - 304); ++v48; ++v60; *(_BYTE *)(v65 + 254) = 0; *(_DWORD *)(a2 - 320) = v48; } while ( v48 < 392 ); v66 = *(void (__thiscall **)(char *))(*(_DWORD *)a4 + 520); *((_DWORD *)a4 + 898) = 0; v66(a4); sub_6E5FF0(a4, 3, 0); (*(void (__thiscall **)(char *, int, int, _DWORD, _DWORD))(*(_DWORD *)a4 + 236))(a4, xRight, dword_AC2F78, 0.0, 0.5); *(_BYTE *)(a2 - 4) = 1; `eh vector destructor iterator'((void *)(a2 - 260), 0x1Cu, 6, sub_636A10); if ( *(_DWORD *)(a2 - 268) >= 0x10u ) operator delete(*(void **)(a2 - 288)); v67 = *(_DWORD *)(a2 - 300); *(_DWORD *)(a2 - 268) = 15; *(_DWORD *)(a2 - 272) = 0; *(_BYTE *)(a2 - 288) = 0; *(_DWORD *)(a2 - 4) = -1; if ( v67 && !InterlockedDecrement((volatile LONG *)(v67 + 4)) && v67 ) (**(void (__thiscall ***)(int, signed int))v67)(v67, 1); v68 = *(_DWORD *)(a2 - 12); v69 = a2 ^ *(_DWORD *)(a2 - 16); sub_7D50D1(0); } // 6E776F: could not find valid save-restore pair for ebx // ACEC34: using guessed type int dword_ACEC34; //----- (006E7FD0) -------------------------------------------------------- void *__thiscall sub_6E7FD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhItemInvIconWin::`vftable'; *((_DWORD *)this + 58) = &mhItemInvIconWin::`vftable'; sub_533C20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9F9B98: using guessed type void *mhItemInvIconWin::`vftable'; // 9F9BB4: using guessed type void *mhItemInvIconWin::`vftable'; //----- (006E8010) -------------------------------------------------------- void *__thiscall sub_6E8010(void *this, char a2) { void *v2; // esi v2 = this; sub_6E6AC0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006E8040) -------------------------------------------------------- _DWORD *__thiscall sub_6E8040(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax signed int v3; // edx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &mhEmotionWin::`vftable'; v1[58] = &mhEmotionWin::`vftable'; v1[86] = 0; v2 = v1 + 102; v3 = 15; do { *(v2 - 15) = 0; *v2 = 0; ++v2; --v3; } while ( v3 ); v1[117] = 0; v1[122] = 0; v1[118] = 0; v1[123] = 0; v1[119] = 0; v1[124] = 0; v1[120] = 0; v1[125] = 0; v1[121] = 0; v1[126] = 0; v1[127] = -65536; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FA154: using guessed type void *mhEmotionWin::`vftable'; // 9FA174: using guessed type void *mhEmotionWin::`vftable'; //----- (006E8110) -------------------------------------------------------- char __thiscall sub_6E8110(void *this, int a2) { int v2; // edi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax volatile LONG **v9; // eax int v10; // esi int v11; // ebx volatile LONG *v12; // ST28_4 volatile LONG *v13; // eax volatile LONG *v14; // eax volatile LONG **v15; // eax int v16; // ebx volatile LONG **v17; // esi volatile LONG **v18; // ebx volatile LONG *v19; // eax bool v20; // sf unsigned __int8 v21; // of volatile LONG **v22; // ebx volatile LONG *v23; // ecx int v24; // ebx int v25; // eax volatile LONG *v26; // eax volatile LONG v27; // ebx volatile LONG *v28; // edx int v29; // ebx int v30; // eax volatile LONG *v31; // eax volatile LONG *v32; // edx int v33; // ebx int v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // edx int v37; // ebx int v38; // eax volatile LONG *v39; // eax volatile LONG v40; // ebx const CHAR *v41; // eax volatile LONG *v42; // eax volatile LONG *v43; // ecx int v44; // ebx int v45; // eax volatile LONG *v46; // eax void (__thiscall ***v47)(_DWORD, signed int); // esi const CHAR *v48; // [esp+2Ch] [ebp-58h] int v49; // [esp+2Ch] [ebp-58h] int v50; // [esp+3Ch] [ebp-48h] int v51; // [esp+40h] [ebp-44h] int v52; // [esp+44h] [ebp-40h] int v53; // [esp+48h] [ebp-3Ch] int v54; // [esp+4Ch] [ebp-38h] int v55; // [esp+50h] [ebp-34h] int v56; // [esp+54h] [ebp-30h] char v57; // [esp+58h] [ebp-2Ch] __int16 v58; // [esp+59h] [ebp-2Bh] int v59; // [esp+5Ch] [ebp-28h] int v60; // [esp+60h] [ebp-24h] char v61; // [esp+64h] [ebp-20h] int v62; // [esp+65h] [ebp-1Fh] int v63; // [esp+69h] [ebp-1Bh] int v64; // [esp+6Dh] [ebp-17h] __int16 v65; // [esp+71h] [ebp-13h] int v66; // [esp+80h] [ebp-4h] v2 = (int)this; v56 = 0; v3 = dword_BA6BA0; v66 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MyHomeMenu.nif"); sub_8F66B0(v4, (int)&v56, v3); v5 = v56; if ( !v56 ) { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeMenu.nif load fail", "LoadFail", v56); v5 = v56; } v66 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v9 = sub_8FB140(v56, (int)"Frame", (int)&v60, (int)&v59, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"mhEmotionWin", 0) ) { if ( off_AC0554 ) off_AC0554("Game\\MyHomeMenu.nif Create fail", "Node", 0); goto LABEL_15; } v10 = v60; v11 = v59; v55 = v60; v54 = v59; if ( !sub_8F71E0(v56, (int)"WinTitle", &v60, &v59, &v51, &v50) ) { LABEL_15: v6 = (void (__thiscall ***)(_DWORD, signed int))v56; v66 = -1; if ( !v56 ) return 0; v7 = (volatile LONG *)(v56 + 4); LABEL_8: if ( !InterlockedDecrement(v7) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v12 = (volatile LONG *)dword_AD01E8; v13 = (volatile LONG *)sub_421050(7); v14 = sub_90AEF0(v60 - v10, v59 - v11 + 1, v51, v50, v13, (_DWORD *)v2, 0, 0, 0, 1, v12, (volatile LONG *)0xC); *(_DWORD *)(v2 + 344) = v14; (*(void (__thiscall **)(volatile LONG *, signed int))(*v14 + 488))(v14, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 344) + 468))(&unk_AA8CC8); (*(void (__stdcall **)(const char *))(**(_DWORD **)(v2 + 344) + 472))("-"); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v15 = sub_8FB140(v56, (int)"Panel01", (int)&v60, (int)&v59, 0); sub_8F3EB0(v60, v59, (int)v15, v2, 0, 0); v16 = 1; v57 = 0; v58 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v52 = 1; v17 = (volatile LONG **)(v2 + 488); while ( 1 ) { _itoa(v16, &v57, 10); if ( v16 < 10 ) { LOBYTE(v58) = v57; v57 = 48; } sprintf(&v61, "Btn%sNor", &v57); v18 = sub_8FB140(v56, (int)&v61, (int)&v60, (int)&v59, 0); *(v17 - 20) = (volatile LONG *)v18; sprintf(&v61, "Btn%sClick", &v57); sub_8FB650(v18, v56, (int)&v61); sprintf(&v61, "Btn%sOver", &v57); sub_8FB650(v18, v56, (int)&v61); v19 = sub_8FE0F0(v60 - v55, v59 - v54, (int)v18, v2, v52 - 1, 0, 0); *(v17 - 35) = v19; v21 = __OFSUB__(v52, 6); v20 = v52 - 6 < 0; *((_DWORD *)v19 + 68) = dword_AD01E8; if ( v20 ^ v21 ) { sprintf(&v61, "MenuBtn%sNor", &v57); v22 = sub_8FB140(v56, (int)&v61, (int)&v60, (int)&v59, 0); sprintf(&v61, "MenuBtn%sClick", &v57); sub_8FB650(v22, v56, (int)&v61); sprintf(&v61, "MenuBtn%sOver", &v57); sub_8FB650(v22, v56, (int)&v61); if ( (unsigned int)(v52 - 1) > 3 ) { v42 = sub_8FE0F0(v60 - v55, v59 - v54, (int)v22, v2, 20, 0, 0); *(v17 - 5) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v43 = v22[9]; v44 = *(_DWORD *)(*v43 + 24); v53 = *(_DWORD *)(*v43 + 20); v45 = sub_421050(7); v46 = sub_8F4A20(v60 - v55, v59 - v54 + 1, v53, v44, v45, v2, 0, 0); *v17 = v46; (*(void (__thiscall **)(volatile LONG *, int *))(*v46 + 468))(v46, &dword_AA8C68); (*(void (__stdcall **)(void *))(**v17 + 472))(&unk_9FA081); } else { switch ( v52 ) { case 1: *(v17 - 5) = sub_8FE0F0(v60 - v55, v59 - v54, (int)v22, v2, 16, 0, 0); v23 = v22[9]; v24 = *(_DWORD *)(*v23 + 24); v53 = *(_DWORD *)(*v23 + 20); v25 = sub_421050(7); v26 = sub_8F4A20(v60 - v55, v59 - v54 + 1, v53, v24, v25, v2, 0, 0); *v17 = v26; (*(void (__thiscall **)(volatile LONG *, int *, const CHAR *))(*v26 + 468))(v26, &dword_AA8C68, v48); v49 = -454364479; goto LABEL_26; case 2: *(v17 - 5) = sub_8FE0F0(v60 - v55, v59 - v54, (int)v22, v2, 17, 0, 0); v28 = v22[9]; v29 = *(_DWORD *)(*v28 + 24); v53 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v60 - v55, v59 - v54 + 1, v53, v29, v30, v2, 0, 0); *v17 = v31; (*(void (__thiscall **)(volatile LONG *, int *, const CHAR *))(*v31 + 468))(v31, &dword_AA8C68, v48); v49 = 726287527; goto LABEL_26; case 3: *(v17 - 5) = sub_8FE0F0(v60 - v55, v59 - v54, (int)v22, v2, 18, 0, 0); v32 = v22[9]; v33 = *(_DWORD *)(*v32 + 24); v53 = *(_DWORD *)(*v32 + 20); v34 = sub_421050(7); v35 = sub_8F4A20(v60 - v55, v59 - v54 + 1, v53, v33, v34, v2, 0, 0); *v17 = v35; (*(void (__thiscall **)(volatile LONG *, int *, const CHAR *))(*v35 + 468))(v35, &dword_AA8C68, v48); v49 = 1436153803; LABEL_26: v27 = **v17; v48 = sub_40A910(v49); (*(void (__thiscall **)(volatile LONG *))(v27 + 472))(*v17); break; case 4: *(v17 - 5) = sub_8FE0F0(v60 - v55, v59 - v54, (int)v22, v2, 19, 0, 0); v36 = v22[9]; v37 = *(_DWORD *)(*v36 + 24); v53 = *(_DWORD *)(*v36 + 20); v38 = sub_421050(7); v39 = sub_8F4A20(v60 - v55, v59 - v54 + 1, v53, v37, v38, v2, 0, 0); *v17 = v39; (*(void (__thiscall **)(volatile LONG *, int *))(*v39 + 468))(v39, &dword_AA8C68); v40 = **v17; v41 = sub_40C190(-572003345); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(*v17, v41); break; } } (*(void (__stdcall **)(signed int))(**v17 + 488))(5); (*(void (__stdcall **)(_DWORD))(**v17 + 240))(0); } ++v17; if ( ++v52 > 15 ) break; v16 = v52; } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.2); v47 = (void (__thiscall ***)(_DWORD, signed int))v56; v66 = -1; if ( v56 && !InterlockedDecrement((volatile LONG *)(v56 + 4)) && v47 ) (**v47)(v47, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006E8800) -------------------------------------------------------- void __stdcall sub_6E8800(int a1, int a2, unsigned __int8 a3) { int v3; // esi _DWORD *v4; // edi unsigned int v5; // eax unsigned int v6; // ebx int (__thiscall *v7)(_DWORD *); // eax double v8; // st7 int v9; // edx double v10; // st7 int v11; // edx signed int v12; // ebx int v13; // eax int v14; // esi int v15; // ecx int v16; // ecx int v17; // ecx int v18; // ecx double v19; // [esp+4h] [ebp-24h] float v20; // [esp+Ch] [ebp-1Ch] float v21; // [esp+10h] [ebp-18h] float v22; // [esp+14h] [ebp-14h] float v23; // [esp+18h] [ebp-10h] float v24; // [esp+1Ch] [ebp-Ch] float v25; // [esp+20h] [ebp-8h] float v26; // [esp+24h] [ebp-4h] float v27; // [esp+30h] [ebp+8h] float v28; // [esp+30h] [ebp+8h] float v29; // [esp+34h] [ebp+Ch] float v30; // [esp+34h] [ebp+Ch] unsigned int v31; // [esp+38h] [ebp+10h] float v32; // [esp+38h] [ebp+10h] v3 = a2; if ( a2 ) { v4 = (_DWORD *)a1; if ( a1 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 60))(a2); v6 = 32 * (a3 % (v5 >> 5)); v31 = 32 * (a3 / (v5 >> 5)); sub_8FCC40(*(void **)(a1 + 288), a2); v29 = (double)v6; v30 = v29 / (double)(unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 60))(v3); v27 = (double)v31; v26 = COERCE_FLOAT((*(int (__thiscall **)(int))(*(_DWORD *)v3 + 64))(v3)); v7 = *(int (__thiscall **)(_DWORD *))(*v4 + 144); v26 = v27 / (double)LODWORD(v26); v8 = (double)(v6 + v7(v4)); v9 = *(_DWORD *)v3; v19 = v8; v28 = v8 / (double)(unsigned int)(*(int (__thiscall **)(int))(v9 + 60))(v3); v10 = (double)(v31 + (*(int (__thiscall **)(_DWORD *))(*v4 + 148))(v4)); v11 = *(_DWORD *)v3; v19 = v10; v12 = 0; v32 = v10 / (double)(unsigned int)(*(int (__thiscall **)(int))(v11 + 64))(v3); do { v13 = v4[72]; if ( (unsigned int)v12 < *(_DWORD *)(v13 + 24) ) { v14 = *(_DWORD *)(*(_DWORD *)(v13 + 16) + 4 * v12); if ( v14 ) { v15 = *(_DWORD *)(v14 + 184); v24 = v30; v25 = v26; sub_868090(v15, 0, 0, 0, &v24); v16 = *(_DWORD *)(v14 + 184); v22 = v30; v23 = v32; sub_868090(v16, 0, 1, 0, &v22); v20 = v28; v17 = *(_DWORD *)(v14 + 184); v21 = v32; sub_868090(v17, 0, 2, 0, &v20); v18 = *(_DWORD *)(v14 + 184); *(float *)&v19 = v28; *((float *)&v19 + 1) = v26; sub_868090(v18, 0, 3, 0, &v19); } } ++v12; } while ( v12 < 3 ); } } } //----- (006E89F0) -------------------------------------------------------- char __thiscall sub_6E89F0(char *this) { char *v1; // esi int v2; // edi signed int v3; // ebx int v4; // edi const CHAR *v5; // eax int v6; // edi signed int v7; // ebx int v8; // eax int v10; // edi int v11; // ebx int *v12; // eax int v13; // edi int *v14; // ebx int v15; // eax int v16; // edi int v17; // edi const CHAR *v18; // eax unsigned __int8 v19; // ST08_1 int v20; // eax int v21; // [esp+0h] [ebp-24h] _DWORD *v22; // [esp+Ch] [ebp-18h] __int16 v23; // [esp+10h] [ebp-14h] int v24; // [esp+14h] [ebp-10h] signed int v25; // [esp+18h] [ebp-Ch] unsigned int v26; // [esp+1Ch] [ebp-8h] int v27; // [esp+20h] [ebp-4h] v1 = this; v2 = (int)(this + 488); v3 = 5; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 - 20) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)v2 + 468))(&unk_AA8CE8); v2 += 4; --v3; } while ( v3 ); v4 = **((_DWORD **)v1 + 122); v5 = sub_40A910(-454364479); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*((_DWORD *)v1 + 122), v5); v6 = (int)(v1 + 348); v7 = 15; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0); v6 += 4; --v7; } while ( v7 ); v8 = sub_6E2400(&unk_ADB488, *((_WORD *)v1 + 255)); v22 = (_DWORD *)v8; if ( !v8 ) return sub_8F86A0(&unk_BA6B10, v1); v10 = dword_ACB230; v11 = *(_DWORD *)(v8 + 8); if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(v8 + 8)) ) return sub_8F86A0(&unk_BA6B10, v1); if ( (unsigned __int16)v11 > *(_WORD *)(v10 + 200) ) return sub_8F86A0(&unk_BA6B10, v1); v12 = (int *)(*(_DWORD *)(v10 + 196) + 4 * (unsigned __int16)v11); if ( !*v12 ) return sub_8F86A0(&unk_BA6B10, v1); v13 = *v12; if ( !*v12 ) return sub_8F86A0(&unk_BA6B10, v1); v24 = sub_4A3DB0((unsigned __int8 *)(v13 + 2)); if ( !v24 ) return sub_8F86A0(&unk_BA6B10, v1); (*(void (__stdcall **)(int))(**((_DWORD **)v1 + 86) + 472))(v13 + 34); v25 = 0; v14 = (int *)(v1 + 348); do { v23 = *(unsigned __int8 *)(v24 + 147); v27 = 0; v26 = 0; if ( !sub_4EA850() ) { LABEL_19: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v14 + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v14 + 256))(0); goto LABEL_20; } while ( 1 ) { v15 = sub_7474E0((_DWORD *)(dword_ACD934 + 4), v26); v16 = v15; if ( *(_WORD *)v15 != v23 || *(_BYTE *)(v15 + 2) != -1 ) goto LABEL_18; if ( v25 == v27 ) break; ++v27; LABEL_18: if ( ++v26 >= sub_4EA850() ) goto LABEL_19; } (*(void (__stdcall **)(signed int))(*(_DWORD *)*v14 + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v14 + 256))(1); v19 = *(_BYTE *)(v16 + 44); v20 = sub_42BF30(v16 + 45); sub_6E8800(*v14, v20, v19); sub_8F2EA0((void **)*v14, (const char *)(v16 + 12)); LABEL_20: ++v14; ++v25; } while ( v25 < 15 ); if ( *(_DWORD *)(v24 + 98) == 1 ) { (*(void (__stdcall **)(signed int, int))(**((_DWORD **)v1 + 117) + 240))(1, v21); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 117) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 122) + 256))(1); (*(void (__stdcall **)(int *))(**((_DWORD **)v1 + 122) + 468))(&dword_AA8C68); v17 = **((_DWORD **)v1 + 122); v18 = sub_40A910(2073386884); (*(void (__thiscall **)(_DWORD, const CHAR *))(v17 + 472))(*((_DWORD *)v1 + 122), v18); } else if ( v1[509] == 1 ) { (*(void (__stdcall **)(signed int, int))(**((_DWORD **)v1 + 117) + 240))(1, v21); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 117) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 122) + 256))(1); (*(void (__thiscall **)(_DWORD, int *))(**((_DWORD **)v1 + 122) + 468))(*((_DWORD *)v1 + 122), &dword_AA8C68); } sub_6DE060(byte_ADB468, v22, 0); if ( dword_ADB4FC == 2 && v1[508] == 1 ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 118) + 240))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 118) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 123) + 256))(1); (*(void (__stdcall **)(int *))(**((_DWORD **)v1 + 123) + 468))(&dword_AA8C68); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 119) + 240))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 119) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 124) + 256))(1); (*(void (__stdcall **)(int *))(**((_DWORD **)v1 + 124) + 468))(&dword_AA8C68); } (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 120) + 240))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 120) + 256))(1); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 125) + 256))(1); return (*(int (__thiscall **)(_DWORD, int *))(**((_DWORD **)v1 + 125) + 468))(*((_DWORD *)v1 + 125), &dword_AA8C68); } // AA8C68: using guessed type int dword_AA8C68; // ACB230: using guessed type int dword_ACB230; // ACD934: using guessed type int dword_ACD934; // ADB4FC: using guessed type int dword_ADB4FC; //----- (006E8DE0) -------------------------------------------------------- char __thiscall sub_6E8DE0(_WORD *this, int a2, int a3) { _DWORD *v3; // ebx int v4; // eax int v5; // eax int v6; // esi int v7; // edi int *v8; // eax int v9; // eax _DWORD *v10; // ecx v3 = this; v4 = sub_6E2400(&unk_ADB488, this[255]); if ( v4 ) { v6 = dword_ACB230; v7 = *(_DWORD *)(v4 + 8); if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)dword_ACB230 + 16))( dword_ACB230, *(_DWORD *)(v4 + 8)) && (unsigned __int16)v7 <= *(_WORD *)(v6 + 200) && (v8 = (int *)(*(_DWORD *)(v6 + 196) + 4 * (unsigned __int16)v7), *v8) && (v9 = *v8) != 0 && (v5 = sub_4A3DB0((unsigned __int8 *)(v9 + 2))) != 0 ) { switch ( a2 ) { case 16: v10 = (_DWORD *)v3[74]; if ( *(_DWORD *)(v5 + 98) == 1 ) LOBYTE(v5) = (unsigned int)sub_8EEE70(v10, 229, 0, 0); else LOBYTE(v5) = (unsigned int)sub_8EEE70(v10, 220, 0, 0); break; case 17: LOBYTE(v5) = (unsigned int)sub_8EEE70((_DWORD *)v3[74], 222, 0, 0); break; case 18: LOBYTE(v5) = (unsigned int)sub_8EEE70((_DWORD *)v3[74], 228, 0, 0); break; case 19: goto LABEL_14; default: return v5; } } else { LABEL_14: LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, v3); } } else { LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, v3); } return v5; } // ACB230: using guessed type int dword_ACB230; //----- (006E8F10) -------------------------------------------------------- char __thiscall sub_6E8F10(_WORD *this, unsigned int a2, int a3) { _WORD *v3; // esi int v4; // eax int v5; // eax int v6; // eax int v7; // eax v3 = this; if ( a2 > 0xE ) { sub_6E8DE0(this, a2, a3); } else { v4 = sub_6E2400(&unk_ADB488, this[255]); if ( v4 ) { v5 = sub_49F760(*(_DWORD *)(v4 + 8)); if ( v5 ) { v6 = sub_4A3DB0((unsigned __int8 *)(v5 + 2)); if ( v6 ) { v7 = sub_6E9150(*(unsigned __int8 *)(v6 + 147), a2); if ( v7 ) { sub_8EEE70(*((_DWORD **)v3 + 74), 221, *(unsigned __int8 *)(v7 + 3), 0); return sub_8F86A0(&unk_BA6B10, v3); } } } } } return sub_8F86A0(&unk_BA6B10, v3); } //----- (006E8FB0) -------------------------------------------------------- int __thiscall sub_6E8FB0(char *this) { char *v1; // esi v1 = this; sub_6E89F0(this); return sub_8F28C0(v1); } //----- (006E8FC0) -------------------------------------------------------- volatile LONG *__cdecl sub_6E8FC0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x200u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6E8040(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006E90F0) -------------------------------------------------------- void *__thiscall sub_6E90F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhEmotionWin::`vftable'; *((_DWORD *)this + 58) = &mhEmotionWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FA154: using guessed type void *mhEmotionWin::`vftable'; // 9FA174: using guessed type void *mhEmotionWin::`vftable'; //----- (006E9130) -------------------------------------------------------- int __thiscall sub_6E9130(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 < this[6] ) result = *(_DWORD *)(this[4] + 4 * a2); else result = 0; return result; } //----- (006E9150) -------------------------------------------------------- int __cdecl sub_6E9150(__int16 a1, int a2) { int v2; // edi unsigned int v3; // esi int result; // eax v2 = 0; v3 = 0; if ( sub_4EA850() ) { do { result = sub_7474E0((_DWORD *)(dword_ACD934 + 4), v3); if ( *(_WORD *)result == a1 && *(_BYTE *)(result + 2) == -1 ) { if ( a2 == v2 ) return result; ++v2; } ++v3; } while ( v3 < sub_4EA850() ); } return 0; } // ACD934: using guessed type int dword_ACD934; //----- (006E91B0) -------------------------------------------------------- _DWORD *__thiscall sub_6E91B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; *((_BYTE *)v1 + 364) = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; *v1 = &mhGuestBookWin::`vftable'; v1[58] = &mhGuestBookWin::`vftable'; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FA4D0: using guessed type void *mhGuestBookWin::`vftable'; // 9FA4EC: using guessed type void *mhGuestBookWin::`vftable'; //----- (006E9240) -------------------------------------------------------- BOOL __thiscall sub_6E9240(int this) { HWND v1; // ST00_4 v1 = *(HWND *)(this + 344); *(_BYTE *)(this + 364) = 0; return DestroyWindow(v1); } //----- (006E9260) -------------------------------------------------------- int __thiscall sub_6E9260(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int result; // eax int v4; // ecx v1 = this; v1[87] = v1[92] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1) + v1[93] + 2; result = v1[94]; v4 = v1[95]; v1[88] = v2; v1[89] = result; v1[90] = v4; return result; } //----- (006E92B0) -------------------------------------------------------- char sub_6E92B0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHomeGuestRecord"); return (char)v0; } //----- (006E92E0) -------------------------------------------------------- BOOL __thiscall sub_6E92E0(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { if ( *((_BYTE *)v1 + 364) ) { sub_6E9260(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[87] + Rect.left, (int)v1[88] + Rect.top, (int)v1[89], (int)v1[90], 1); } } return result; } //----- (006E9370) -------------------------------------------------------- int __thiscall sub_6E9370(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(62, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(62, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 62, &a2, v2); } //----- (006E93D0) -------------------------------------------------------- char __thiscall sub_6E93D0(_DWORD **this, int a2, int a3) { char result; // al _DWORD **v4; // esi result = a2; v4 = this; switch ( a2 ) { case 0: result = sub_6E9370(this, 0); break; case 1: result = sub_6E9370(this, 1); break; case 2: result = sub_6E9370(this, 2); break; case 3: result = sub_6E9370(this, 3); break; case 4: result = sub_6E9370(this, 4); break; case 5: result = sub_6E9370(this, 5); break; case 6: sub_8EEE70(this[74], 224, 0, 0); result = MoveWindow((HWND)v4[86], -1000, -1000, -999, -999, 0); *((_BYTE *)v4 + 364) = 0; break; case 7: result = sub_6E92B0(); break; default: return result; } return result; } //----- (006E94A0) -------------------------------------------------------- char __thiscall sub_6E94A0(HWND *this, int a2) { HWND *v2; // esi int v3; // edi char result; // al v2 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_8F3540(v2); if ( !result ) return result; *(_BYTE *)(v3 + 2659) = 0; sub_8EEE70((_DWORD *)v3, 224, 0, 0); MoveWindow(v2[86], -1000, -1000, -999, -999, 0); *((_BYTE *)v2 + 364) = 0; } return sub_6E92E0(v2); } // ACDC84: using guessed type int dword_ACDC84; //----- (006E9520) -------------------------------------------------------- volatile LONG *__cdecl sub_6E9520(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x180u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6E91B0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006E9650) -------------------------------------------------------- void __thiscall sub_6E9650(int this, int a2, int a3) { int v3; // esi int v4; // ecx int v5; // edx int v6; // ebx int v7; // eax void *v8; // eax int v9; // eax void (__thiscall *v10)(int, int *); // edx int v11; // edi int v12; // [esp+10h] [ebp-4Ch] int v13; // [esp+14h] [ebp-48h] int v14; // [esp+18h] [ebp-44h] int v15; // [esp+1Ch] [ebp-40h] int v16; // [esp+20h] [ebp-3Ch] int v17; // [esp+24h] [ebp-38h] int v18; // [esp+28h] [ebp-34h] int v19; // [esp+2Ch] [ebp-30h] void *v20; // [esp+30h] [ebp-2Ch] int v21; // [esp+40h] [ebp-1Ch] unsigned int v22; // [esp+44h] [ebp-18h] int v23; // [esp+58h] [ebp-4h] v3 = this; if ( *(_BYTE *)(this + 364) != 1 ) { sub_6E9260((_DWORD *)this); v4 = *(_DWORD *)(v3 + 352); v5 = *(_DWORD *)(v3 + 356); v6 = 0; v16 = *(_DWORD *)(v3 + 348); v7 = *(_DWORD *)(v3 + 360); v17 = v4; v18 = v5; v19 = v7; v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, &unk_9FA3B5, 0); v23 = 0; if ( a2 ) { v8 = v20; if ( v22 < 0x10 ) v8 = &v20; v9 = sub_427200((char)hWnd, dword_ACDC7C, v8, (int)&v16); v10 = *(void (__thiscall **)(int, int *))(*(_DWORD *)v3 + 208); *(_DWORD *)(v3 + 344) = v9; *(_BYTE *)(v3 + 364) = 1; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v10(v3, &v12); v11 = 0; if ( xRight >= (unsigned int)(v13 - v12) && dword_AC2F78 >= (unsigned int)(v15 - v14) ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 164))(v3); v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 168))(v3); } (*(void (__thiscall **)(int, int))(*(_DWORD *)v3 + 172))(v3, v6); (*(void (__thiscall **)(int, int))(*(_DWORD *)v3 + 176))(v3, v11); SetFocus(hWnd); if ( v22 >= 0x10 ) operator delete(v20); } else if ( v22 >= 0x10 ) { operator delete(v20); } } } //----- (006E97D0) -------------------------------------------------------- char __thiscall sub_6E97D0(void *this, int a2) { int v2; // ebx int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax char result; // al volatile LONG **v9; // eax int v10; // esi int v11; // edi volatile LONG *v12; // eax volatile LONG **v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // eax int v18; // eax volatile LONG *v19; // esi volatile LONG v20; // edi const CHAR *v21; // eax int v22; // edi volatile LONG **v23; // esi volatile LONG *v24; // esi volatile LONG **v25; // esi void *v26; // eax volatile LONG **v27; // esi void *v28; // eax void *v29; // eax volatile LONG *v30; // esi const char *v31; // eax void (__thiscall ***v32)(_DWORD, signed int); // esi int v33; // [esp+10h] [ebp-50h] int v34; // [esp+14h] [ebp-4Ch] int v35; // [esp+18h] [ebp-48h] int v36; // [esp+1Ch] [ebp-44h] int v37; // [esp+20h] [ebp-40h] int v38; // [esp+24h] [ebp-3Ch] void *v39; // [esp+28h] [ebp-38h] int v40; // [esp+38h] [ebp-28h] unsigned int v41; // [esp+3Ch] [ebp-24h] char v42[2]; // [esp+44h] [ebp-1Ch] int v43; // [esp+46h] [ebp-1Ah] int v44; // [esp+4Ah] [ebp-16h] __int16 v45; // [esp+4Eh] [ebp-12h] int v46; // [esp+5Ch] [ebp-4h] v2 = (int)this; v38 = 0; v3 = dword_BA6BA0; v46 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomeGuestRecord.nif"); sub_8F66B0(v4, (int)&v38, v3); v5 = v38; if ( !v38 ) { if ( off_AC0554 ) { off_AC0554("Game\\MiniHomeGuestRecord.nif load fail", "LoadFail", v38); v5 = v38; } v46 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v9 = sub_8FB140(v38, (int)"Frame", (int)&v37, (int)&v36, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"mhGuestBookWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v38; v46 = -1; if ( v38 ) { v7 = (volatile LONG *)(v38 + 4); LABEL_8: if ( !InterlockedDecrement(v7) ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v10 = v37; v11 = v36; v12 = (volatile LONG *)sub_43D0D0(0x13u); if ( v12 ) v13 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&v36, v12); else v13 = sub_8FB140(v38, (int)"Theme", (int)&v37, (int)&v36, 0); sub_8F3EB0(v37 - v10, v36 - v11, (int)v13, v2, 0, 0); if ( sub_8F71E0( v38, (int)"Panel02", (_DWORD *)(v2 + 368), (_DWORD *)(v2 + 372), (_DWORD *)(v2 + 376), (_DWORD *)(v2 + 380)) ) { v15 = sub_8FB140(v38, (int)"Panel01", (int)&v37, (int)&v36, 0); sub_8F3EB0(v37, v36, (int)v15, v2, 0, 0); v16 = sub_8FB140(v38, (int)"Panel02", (int)&v37, (int)&v36, 0); sub_8F3EB0(v37, v36, (int)v16, v2, 0, 0); v17 = sub_8FB140(v38, (int)"Panel04", (int)&v37, (int)&v36, 0); sub_8F3EB0(v37, v36, (int)v17, v2, 0, 0); if ( sub_8F71E0(v38, (int)"WinTitle", &v37, &v36, &v34, &v35) ) { v18 = sub_421050(7); v19 = sub_8F4A20(v37, v36, v34, v35, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v20 = *v19; v21 = sub_40A910(1279871523); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); v22 = 0; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v23 = sub_8FB140(v38, (int)"ClsNor", (int)&v37, (int)&v36, 0); sub_8FB650(v23, v38, (int)"ClsClick"); sub_8FB650(v23, v38, (int)"ClsOver"); sub_8FE0F0(v37, v36, (int)v23, v2, 6, 0, 0); v24 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v38 + 72))("HelpLinkNor") ) { v25 = sub_8FB140(v38, (int)"HelpLinkNor", (int)&v37, (int)&v36, v24); sub_8FB650(v25, v38, (int)"HelpLinkClick"); sub_8FB650(v25, v38, (int)"HelpLinkOver"); sub_8FE0F0(v37, v36, (int)v25, v2, 7, 0, 0); } v41 = 15; v40 = 0; LOBYTE(v39) = 0; LOBYTE(v46) = 1; strcpy(v42, "0"); v43 = 0; v44 = 0; v45 = 0; do { v33 = v22 + 1; _itoa(v22 + 1, v42, 10); sub_4018E0(&v39, "BtnNor0", 7u); sub_401D10((int)&v39, v42, strlen(v42)); v26 = v39; if ( v41 < 0x10 ) v26 = &v39; v27 = sub_8FB140(v38, (int)v26, (int)&v37, (int)&v36, 0); sub_4018E0(&v39, "BtnClick0", 9u); sub_401D10((int)&v39, v42, strlen(v42)); v28 = v39; if ( v41 < 0x10 ) v28 = &v39; sub_8FB650(v27, v38, (int)v28); sub_4018E0(&v39, "BtnOver0", 8u); sub_401D10((int)&v39, v42, strlen(v42)); v29 = v39; if ( v41 < 0x10 ) v29 = &v39; sub_8FB650(v27, v38, (int)v29); v30 = sub_8FE0F0(v37, v36, (int)v27, v2, v22, 0, 0); switch ( v22 ) { case 0: v31 = sub_40A910(-1683425310); goto LABEL_41; case 1: v31 = sub_40A910(1279871523); goto LABEL_41; case 2: v31 = sub_40A910(-420723676); goto LABEL_41; case 3: v31 = sub_40A910(-671989437); goto LABEL_41; case 4: v31 = sub_40A910(-555208947); goto LABEL_41; case 5: v31 = sub_40A910(-95796673); LABEL_41: sub_8F2EA0((void **)v30, v31); break; default: break; } ++v22; *((_DWORD *)v30 + 68) = dword_AD01E8; } while ( v33 < 6 ); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_6E9260((_DWORD *)v2); if ( v41 >= 0x10 ) operator delete(v39); v32 = (void (__thiscall ***)(_DWORD, signed int))v38; v41 = 15; v40 = 0; LOBYTE(v39) = 0; v46 = -1; if ( v38 && !InterlockedDecrement((volatile LONG *)(v38 + 4)) && v32 ) (**v32)(v32, 1); result = 1; } else { v46 = -1; sub_410C00(&v38); result = 0; } } else { v14 = (void (__thiscall ***)(_DWORD, signed int))v38; v46 = -1; if ( !v38 || InterlockedDecrement((volatile LONG *)(v38 + 4)) || !v14 ) return 0; (**v14)(v14, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006E9DC0) -------------------------------------------------------- void *__thiscall sub_6E9DC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhGuestBookWin::`vftable'; *((_DWORD *)this + 58) = &mhGuestBookWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FA4D0: using guessed type void *mhGuestBookWin::`vftable'; // 9FA4EC: using guessed type void *mhGuestBookWin::`vftable'; //----- (006E9E80) -------------------------------------------------------- int __thiscall sub_6E9E80(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int result; // eax int v4; // ecx v1 = this; v1[87] = v1[92] + (*(int (**)(void))(*this + 164))(); v2 = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1) + v1[93] + 2; result = v1[94] - 8; v4 = v1[95] - 10; v1[88] = v2; v1[89] = result; v1[90] = v4; return result; } //----- (006E9EF0) -------------------------------------------------------- BOOL __thiscall sub_6E9EF0(HWND *this) { HWND *v1; // esi BOOL result; // eax struct tagRECT Rect; // [esp+4h] [ebp-14h] v1 = this; result = IsWindow(this[86]); if ( result ) { if ( *((_BYTE *)v1 + 364) ) { sub_6E9E80(v1); GetWindowRect(hWnd, &Rect); result = MoveWindow(v1[86], (int)v1[87] + Rect.left, (int)v1[88] + Rect.top, (int)v1[89], (int)v1[90], 1); } } return result; } //----- (006E9FB0) -------------------------------------------------------- char __thiscall sub_6E9FB0(int this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax HWND v5; // ST00_4 v3 = (_DWORD *)this; if ( a2 ) { LOBYTE(v4) = a2 - 1; if ( a2 == 1 ) { v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) LOBYTE(v4) = sub_4A5170(v4, "HelpWin"); } } else { v5 = *(HWND *)(this + 344); *(_BYTE *)(this + 364) = 0; DestroyWindow(v5); LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v3); } return (char)v4; } //----- (006EA010) -------------------------------------------------------- BOOL __thiscall sub_6EA010(HWND *this, int a2) { return sub_6E9EF0(this); } //----- (006EA020) -------------------------------------------------------- char __thiscall sub_6EA020(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al int v12; // ebx void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // eax volatile LONG *v15; // edi volatile LONG v16; // ST3C_4 const CHAR *v17; // eax volatile LONG *v18; // edi volatile LONG **v19; // eax volatile LONG *v20; // eax volatile LONG **v21; // edi volatile LONG *v22; // edi volatile LONG **v23; // edi int v24; // [esp+38h] [ebp-28h] int v25; // [esp+3Ch] [ebp-24h] int v26; // [esp+40h] [ebp-20h] volatile LONG *v27; // [esp+44h] [ebp-1Ch] int v28; // [esp+48h] [ebp-18h] int v29; // [esp+4Ch] [ebp-14h] int v30; // [esp+50h] [ebp-10h] int v31; // [esp+5Ch] [ebp-4h] int v32; // [esp+68h] [ebp+8h] v2 = (int)this; v30 = 0; v3 = dword_BA6BA0; v31 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\HelpWin.nif"); sub_8F66B0(v4, (int)&v30, v3); if ( !v30 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v30 + 72))("Panel01"); v6 = sub_85C050(v5, 8); v7 = v6; v26 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v31) = 1; if ( v8 ) v27 = *(volatile LONG **)(v8 + 4); else v27 = 0; v9 = sub_8FB140(v30, (int)"Frame", (int)&v28, (int)&v29, v27); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"mhGuestBookWin2", 0) ) { LOBYTE(v31) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = v28; v32 = v29; if ( sub_8F71E0(v30, (int)"WinTitle", &v28, &v29, &v24, &v25) ) { v14 = sub_421050(0); v15 = sub_8F4A20(v28 - v12, v29 - v32, v24, v25, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v16 = *v15; v17 = sub_40A910(1279871523); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v16 + 472))(v15, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); if ( sub_8F71E0( v30, (int)"Panel01", (_DWORD *)(v2 + 368), (_DWORD *)(v2 + 372), (_DWORD *)(v2 + 376), (_DWORD *)(v2 + 380)) ) { v18 = v27; v19 = sub_8FB140(v30, (int)"Panel01", (int)&v28, (int)&v29, v27); v20 = sub_8F3EB0(v28 - v12, v29 - v32, (int)v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 240))(v20, 1); v21 = sub_8FB140(v30, (int)"ClsNor", (int)&v28, (int)&v29, v18); sub_8FB650(v21, v30, (int)"ClsClick"); sub_8FB650(v21, v30, (int)"ClsOver"); sub_8FE0F0(v28 - v12, v29 - v32, (int)v21, v2, 0, 0, 0); v22 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v30 + 72))("HelpLinkNor") ) { v23 = sub_8FB140(v30, (int)"HelpLinkNor", (int)&v28, (int)&v29, v22); sub_8FB650(v23, v30, (int)"HelpLinkClick"); sub_8FB650(v23, v30, (int)"HelpLinkOver"); sub_8FE0F0(v28 - v12, v29 - v32, (int)v23, v2, 1, 0, 0); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); sub_6E9E80((_DWORD *)v2); LOBYTE(v31) = 0; sub_410C00(&v26); v31 = -1; sub_410C00(&v30); result = 1; } else { LOBYTE(v31) = 0; sub_410C00(&v26); v31 = -1; sub_410C00(&v30); result = 0; } } else { LOBYTE(v31) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v30; v31 = -1; if ( !v30 || InterlockedDecrement((volatile LONG *)(v30 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006EA720) -------------------------------------------------------- void *__thiscall sub_6EA720(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhGuestBookWin2::`vftable'; *((_DWORD *)this + 58) = &mhGuestBookWin2::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FA7BC: using guessed type void *mhGuestBookWin2::`vftable'; // 9FA7DC: using guessed type void *mhGuestBookWin2::`vftable'; //----- (006EA780) -------------------------------------------------------- char sub_6EA780() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHomeInfo"); return (char)v0; } //----- (006EA7B0) -------------------------------------------------------- char __thiscall sub_6EA7B0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // edi int v4; // esi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_8F3540(v3); if ( result ) { *(_BYTE *)(v4 + 2659) = 0; result = (unsigned int)sub_8EEE70((_DWORD *)v4, 224, 0, 0); } } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (006EA800) -------------------------------------------------------- int __thiscall sub_6EA800(int this) { int v1; // esi v1 = this; sub_4638F0(*(_DWORD **)(this + 460), *(_DWORD *)(*(_DWORD *)(this + 464) + 336)); *(_DWORD *)(*(_DWORD *)(v1 + 464) + 344) = *(_DWORD *)(*(_DWORD *)(v1 + 460) + 300); return sub_465130(*(_DWORD **)(v1 + 464)); } //----- (006EA840) -------------------------------------------------------- int __thiscall sub_6EA840(int this, int a2) { bool v2; // zf _DWORD **v3; // esi int v5; // [esp+4h] [ebp-4h] *(_BYTE *)(**(_DWORD **)(this + 468) + 380) = 0; v2 = *(_DWORD *)(this + 236) == 0; v3 = (_DWORD **)(this + 232); v5 = a2; if ( !v2 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(**(_DWORD **)(this + 236) + 4))(62, &v5, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 20))(62, &v5, v3); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[5])(v3, 62, &v5, v3); } //----- (006EA8B0) -------------------------------------------------------- char __thiscall sub_6EA8B0(int this, int a2, int a3) { int v3; // eax int v4; // esi _DWORD *v5; // ecx unsigned int v6; // eax char *v7; // eax __int16 v8; // ax _DWORD *v9; // ecx int v11; // [esp-14h] [ebp-18h] int v12; // [esp-10h] [ebp-14h] int v13; // [esp-Ch] [ebp-10h] int v14; // [esp-8h] [ebp-Ch] int v15; // [esp-4h] [ebp-8h] LOBYTE(v3) = a2; v4 = this; switch ( a2 ) { case 0: LOBYTE(v3) = sub_6EA840(this, 0); break; case 1: LOBYTE(v3) = sub_6EA840(this, 1); break; case 2: LOBYTE(v3) = sub_6EA840(this, 2); break; case 3: LOBYTE(v3) = sub_6EA840(this, 3); break; case 4: LOBYTE(v3) = sub_6EA840(this, 4); break; case 5: LOBYTE(v3) = sub_6EA840(this, 5); break; case 6: LOBYTE(v3) = sub_6EA800(this); break; case 7: v5 = *(_DWORD **)(this + 464); v15 = 0; v6 = sub_464F50(v5); v7 = (char *)sub_4650C0(*(_DWORD **)(v4 + 464), v6, 0); sub_416970((char *)&v11, v7); v3 = sub_664630(dword_AD8C90, v11, v12, v13, v14, v15); if ( v3 ) { v8 = *(_WORD *)(v3 + 548); v9 = *(_DWORD **)(v4 + 296); v15 = 0; v14 = 0; v13 = 200; *(_WORD *)(v4 + 440) = v8; LOBYTE(v3) = (unsigned int)sub_8EEE70(v9, v13, v14, v15); } break; case 9: LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(this + 296), 224, 0, 0); break; case 10: LOBYTE(v3) = sub_6EA780(); break; default: return v3; } return v3; } //----- (006EA9D0) -------------------------------------------------------- char __thiscall sub_6EA9D0(_DWORD **this, int a2, void *a3, int a4) { int v4; // edi _DWORD **v5; // esi void *v6; // eax void *v7; // eax v4 = a2; v5 = this; if ( *(_DWORD *)(a2 + 20) < 0x10u ) v6 = (void *)a2; else v6 = *(void **)a2; if ( sub_4661A0(this[116], a4, 0, v6) != 1 ) { if ( *(_DWORD *)(a2 + 20) >= 0x10u ) v4 = *(_DWORD *)a2; ((void (__thiscall *)(_DWORD *, int))loc_466CA0)(v5[116], v4); } v7 = a3; if ( *((_DWORD *)a3 + 5) >= 0x10u ) v7 = *(void **)a3; sub_4661A0(v5[116], a4, 1, v7); sub_465130(v5[116]); return 1; } //----- (006EAA40) -------------------------------------------------------- _DWORD *__thiscall sub_6EAA40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &mhInfoWin::`vftable'; v1[58] = &mhInfoWin::`vftable'; v1[90] = 0; v1[91] = 15; *((_BYTE *)v1 + 344) = 0; v1[97] = 0; v1[98] = 15; *((_BYTE *)v1 + 372) = 0; v1[104] = 0; v1[105] = 15; *((_BYTE *)v1 + 400) = 0; *((_BYTE *)v1 + 428) = 0; v1[108] = 0; v1[109] = 0; v1[110] = -1; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[116] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FAC08: using guessed type void *mhInfoWin::`vftable'; // 9FAC24: using guessed type void *mhInfoWin::`vftable'; //----- (006EAAF0) -------------------------------------------------------- LONG __thiscall sub_6EAAF0(void **this) { void **v1; // esi v1 = this; *this = &mhInfoWin::`vftable'; this[58] = &mhInfoWin::`vftable'; if ( this[117] ) operator delete(this[117]); v1[117] = 0; v1[118] = 0; v1[119] = 0; if ( (unsigned int)v1[105] >= 0x10 ) operator delete(v1[100]); v1[105] = (void *)15; v1[104] = 0; *((_BYTE *)v1 + 400) = 0; if ( (unsigned int)v1[98] >= 0x10 ) operator delete(v1[93]); v1[98] = (void *)15; v1[97] = 0; *((_BYTE *)v1 + 372) = 0; if ( (unsigned int)v1[91] >= 0x10 ) operator delete(v1[86]); v1[90] = 0; v1[91] = (void *)15; *((_BYTE *)v1 + 344) = 0; return sub_8F10F0(v1); } // 9FAC08: using guessed type void *mhInfoWin::`vftable'; // 9FAC24: using guessed type void *mhInfoWin::`vftable'; //----- (006EABC0) -------------------------------------------------------- volatile LONG *__cdecl sub_6EABC0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1E4u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6EAA40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006EACF0) -------------------------------------------------------- int __thiscall sub_6EACF0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ecx int result; // eax _DWORD *v5; // ecx _WORD *v6; // edi unsigned __int8 v7; // al const char *v8; // eax int v9; // eax int (__thiscall *v10)(_WORD *); // eax void *v11; // eax _DWORD *v12; // [esp+10h] [ebp-94h] _DWORD *v13; // [esp+14h] [ebp-90h] int v14; // [esp+18h] [ebp-8Ch] int v15; // [esp+1Ch] [ebp-88h] char v16[2]; // [esp+20h] [ebp-84h] void *v17; // [esp+24h] [ebp-80h] int v18; // [esp+34h] [ebp-70h] unsigned int v19; // [esp+38h] [ebp-6Ch] void *v20; // [esp+40h] [ebp-64h] int v21; // [esp+50h] [ebp-54h] unsigned int v22; // [esp+54h] [ebp-50h] void *v23; // [esp+5Ch] [ebp-48h] int v24; // [esp+6Ch] [ebp-38h] unsigned int v25; // [esp+70h] [ebp-34h] void *v26; // [esp+78h] [ebp-2Ch] int v27; // [esp+88h] [ebp-1Ch] unsigned int v28; // [esp+8Ch] [ebp-18h] int v29; // [esp+A0h] [ebp-4h] v1 = (_DWORD *)dword_AD8CCC; v2 = this; v3 = (_DWORD *)this[116]; v13 = v2; qmemcpy(v16, "000", 3); sub_466A50(v3); result = sub_465130((_DWORD *)v2[116]); v15 = 0; v14 = 0; if ( dword_AD8CD4 > 0 ) { while ( 1 ) { v5 = (_DWORD *)*v1; v6 = (_WORD *)v1[2]; v12 = v5; if ( v6 ) { v7 = sub_6DD940(byte_ADB468, v6[274]); _itoa(v7, v16, 10); if ( !(*(int (**)(void))(*(_DWORD *)v2[111] + 484))() ) goto LABEL_24; if ( v2[97] ) { v8 = (const char *)(v2 + 93); if ( v2[98] >= 0x10u ) v8 = *(const char **)v8; } else { v8 = (const char *)(*(int (**)(void))(*(_DWORD *)v2[111] + 484))(); } v9 = strcmp((const char *)(*(int (__thiscall **)(_WORD *))(*(_DWORD *)v6 + 84))(v6), v8); v2 = v13; if ( v9 ) { LABEL_24: if ( (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v6 + 84))(v6) ) { v19 = 15; v18 = 0; LOBYTE(v17) = 0; sub_4018E0(&v17, v16, &v16[strlen(v16) + 1] - &v16[1]); v10 = *(int (__thiscall **)(_WORD *))(*(_DWORD *)v6 + 84); v29 = 0; v11 = (void *)v10(v6); v22 = 15; v21 = 0; LOBYTE(v20) = 0; sub_4018E0(&v20, v11, strlen((const char *)v11)); LOBYTE(v29) = 1; sub_6EA9D0((_DWORD **)v2, (int)&v20, &v17, v15++); if ( v22 >= 0x10 ) operator delete(v20); v22 = 15; v21 = 0; LOBYTE(v20) = 0; v29 = -1; if ( v19 >= 0x10 ) operator delete(v17); } else { v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_4018E0(&v26, v16, &v16[strlen(v16) + 1] - &v16[1]); v29 = 2; v25 = 15; v24 = 0; LOBYTE(v23) = 0; sub_4018E0(&v23, "UnKnown", 7u); LOBYTE(v29) = 3; sub_6EA9D0((_DWORD **)v2, (int)&v23, &v26, v15++); if ( v25 >= 0x10 ) operator delete(v23); v25 = 15; v24 = 0; LOBYTE(v23) = 0; v29 = -1; if ( v28 >= 0x10 ) operator delete(v26); v28 = 15; v27 = 0; LOBYTE(v26) = 0; } } } result = v14 + 1; v14 = result; if ( result >= dword_AD8CD4 ) break; v1 = v12; } } return result; } // AD8CCC: using guessed type int dword_AD8CCC; // AD8CD4: using guessed type int dword_AD8CD4; //----- (006EB000) -------------------------------------------------------- int __thiscall sub_6EB000(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx _BYTE *v3; // edi int v4; // ecx char v6[4]; // [esp+8h] [ebp-Ch] int v7; // [esp+Ch] [ebp-8h] v1 = (_DWORD *)dword_AD8CCC; v2 = this; this[109] = 0; while ( v1 ) { v3 = (_BYTE *)v1[2]; v1 = (_DWORD *)*v1; if ( !(*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v3 + 32))(v3) && !sub_651680((int)v3) && !sub_6516C0(v3) ) { ++v2[109]; } } v4 = v2[109]; *(_DWORD *)v6 = 0; v7 = 0; sprintf(v6, "%d/%d", v4, v2[108]); return (*(int (__thiscall **)(_DWORD, char *))(*(_DWORD *)v2[113] + 472))(v2[113], v6); } // AD8CCC: using guessed type int dword_AD8CCC; //----- (006EB0C0) -------------------------------------------------------- char __thiscall sub_6EB0C0(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax LONG v8; // eax volatile LONG **v10; // eax int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax int v19; // eax volatile LONG *v20; // edi volatile LONG v21; // ebx const CHAR *v22; // eax volatile LONG **v23; // edi volatile LONG *v24; // edi volatile LONG **v25; // edi volatile LONG *v26; // edx int v27; // edi int v28; // ebx int v29; // eax volatile LONG *v30; // edi volatile LONG v31; // ebx const CHAR *v32; // eax int v33; // eax int v34; // edi int v35; // ebx volatile LONG *v36; // ST3C_4 volatile LONG *v37; // eax volatile LONG *v38; // eax volatile LONG *v39; // ecx int v40; // edi int v41; // ebx int v42; // eax volatile LONG *v43; // edi volatile LONG v44; // ebx const CHAR *v45; // eax int v46; // eax int v47; // edi int v48; // ebx volatile LONG *v49; // ST3C_4 volatile LONG *v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // ecx int v53; // edi int v54; // ebx int v55; // eax volatile LONG *v56; // edi volatile LONG v57; // ebx const CHAR *v58; // eax int v59; // eax int v60; // edi int v61; // ebx int v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // ecx int v65; // edi int v66; // ebx int v67; // eax volatile LONG *v68; // edi volatile LONG v69; // ebx const CHAR *v70; // eax int v71; // eax int v72; // edi int v73; // ebx int v74; // eax volatile LONG *v75; // eax CHAR *v76; // eax CHAR *v77; // eax CHAR *v78; // eax CHAR *v79; // eax CHAR *v80; // eax CHAR *v81; // eax int v82; // ebx void *v83; // eax void *v84; // eax const char *v85; // eax int v86; // ebx _DWORD *v87; // ebx int *v88; // ebx int v89; // ebx _DWORD *v90; // ebx volatile LONG **v91; // eax volatile LONG *v92; // eax volatile LONG **v93; // eax int v94; // eax int v95; // ebx int v96; // eax int v97; // eax void (__thiscall ***v98)(_DWORD, signed int); // esi int v99; // [esp+10h] [ebp-140h] int v100; // [esp+14h] [ebp-13Ch] void *v101; // [esp+18h] [ebp-138h] int v102; // [esp+1Ch] [ebp-134h] int v103; // [esp+20h] [ebp-130h] char v104; // [esp+24h] [ebp-12Ch] char v105; // [esp+28h] [ebp-128h] int v106; // [esp+2Ch] [ebp-124h] int v107; // [esp+30h] [ebp-120h] int v108; // [esp+34h] [ebp-11Ch] int v109; // [esp+38h] [ebp-118h] char *v110; // [esp+3Ch] [ebp-114h] unsigned int v111; // [esp+40h] [ebp-110h] _DWORD *v112; // [esp+44h] [ebp-10Ch] int v113; // [esp+48h] [ebp-108h] int v114; // [esp+4Ch] [ebp-104h] int v115; // [esp+50h] [ebp-100h] void *v116; // [esp+54h] [ebp-FCh] int v117; // [esp+64h] [ebp-ECh] unsigned int v118; // [esp+68h] [ebp-E8h] void *v119; // [esp+70h] [ebp-E0h] int v120; // [esp+80h] [ebp-D0h] unsigned int v121; // [esp+84h] [ebp-CCh] char v122; // [esp+8Ch] [ebp-C4h] int v123; // [esp+9Ch] [ebp-B4h] int v124; // [esp+A0h] [ebp-B0h] char v125; // [esp+A8h] [ebp-A8h] int v126; // [esp+B8h] [ebp-98h] int v127; // [esp+BCh] [ebp-94h] char v128; // [esp+C4h] [ebp-8Ch] int v129; // [esp+D4h] [ebp-7Ch] int v130; // [esp+D8h] [ebp-78h] char v131; // [esp+E0h] [ebp-70h] int v132; // [esp+F0h] [ebp-60h] int v133; // [esp+F4h] [ebp-5Ch] char v134; // [esp+FCh] [ebp-54h] int v135; // [esp+10Ch] [ebp-44h] int v136; // [esp+110h] [ebp-40h] char v137; // [esp+118h] [ebp-38h] int v138; // [esp+128h] [ebp-28h] int v139; // [esp+12Ch] [ebp-24h] char v140[2]; // [esp+134h] [ebp-1Ch] int v141; // [esp+136h] [ebp-1Ah] int v142; // [esp+13Ah] [ebp-16h] __int16 v143; // [esp+13Eh] [ebp-12h] int v144; // [esp+14Ch] [ebp-4h] v2 = (int)this; v113 = 0; v3 = dword_BA6BA0; v144 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomeInfo.nif"); sub_8F66B0(v4, (int)&v113, v3); v5 = v113; if ( !v113 ) { if ( off_AC0554 ) { off_AC0554("Game\\MiniHomeInfo.nif load fail", "LoadFail", v113); v5 = v113; } v144 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v10 = sub_8FB140(v113, (int)"Frame", (int)&v114, (int)&v115, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, a2, (int)"mhInfoWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v113; v144 = -1; if ( v113 ) { v7 = (volatile LONG *)(v113 + 4); LABEL_8: v8 = InterlockedDecrement(v7); goto LABEL_9; } return 0; } v11 = v114; v12 = v115; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v113, (int)"Theme", (int)&v114, (int)&v115, v13); else v14 = sub_8FB140(v113, (int)"Theme", (int)&v114, (int)&v115, 0); sub_8F3EB0(v114 - v11, v115 - v12, (int)v14, v2, 0, 0); v15 = sub_8FB140(v113, (int)"Panel01", (int)&v114, (int)&v115, 0); sub_8F3EB0(v114, v115, (int)v15, v2, 0, 0); v16 = sub_8FB140(v113, (int)"Panel02", (int)&v114, (int)&v115, 0); sub_8F3EB0(v114, v115, (int)v16, v2, 0, 0); v17 = sub_8FB140(v113, (int)"Panel04", (int)&v114, (int)&v115, 0); sub_8F3EB0(v114, v115, (int)v17, v2, 0, 0); v18 = sub_8FB140(v113, (int)"Panel05", (int)&v114, (int)&v115, 0); sub_8F3EB0(v114, v115, (int)v18, v2, 0, 0); if ( !sub_8F71E0(v113, (int)"WinTitle", &v114, &v115, &v100, &v99) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v113; v144 = -1; if ( v113 ) { v8 = InterlockedDecrement((volatile LONG *)(v113 + 4)); LABEL_9: if ( !v8 ) { if ( v6 ) (**v6)(v6, 1); } return 0; } return 0; } v19 = sub_421050(7); v20 = sub_8F4A20(v114, v115, v100, v99, v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v20 + 468))(v20, &dword_AA8D98); v21 = *v20; v22 = sub_40A910(-1683425310); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v20, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v23 = sub_8FB140(v113, (int)"ClsNor", (int)&v114, (int)&v115, 0); sub_8FB650(v23, v113, (int)"ClsClick"); sub_8FB650(v23, v113, (int)"ClsOver"); sub_8FE0F0(v114, v115, (int)v23, v2, 9, 0, 0); v24 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v113 + 72))("HelpLinkNor") ) { v25 = sub_8FB140(v113, (int)"HelpLinkNor", (int)&v114, (int)&v115, v24); sub_8FB650(v25, v113, (int)"HelpLinkClick"); sub_8FB650(v25, v113, (int)"HelpLinkOver"); sub_8FE0F0(v114, v115, (int)v25, v2, 10, 0, 0); } v26 = sub_8FB140(v113, (int)"Text01", (int)&v114, (int)&v115, 0)[9]; v27 = *(_DWORD *)(*v26 + 24); v28 = *(_DWORD *)(*v26 + 20); v29 = sub_421050(7); v30 = sub_8F4A20(v114, v115, v28, v27, v29, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v30 + 488))(v30, 5); v31 = *v30; v32 = sub_40A910(-521011985); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v31 + 472))(v30, v32); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v30 + 240))(v30, 0); v33 = *sub_8FB140(v113, (int)"TextField01", (int)&v114, (int)&v115, 0)[9]; v34 = *(_DWORD *)(v33 + 24); v35 = *(_DWORD *)(v33 + 20); v36 = (volatile LONG *)dword_AD01E8; v37 = (volatile LONG *)sub_421050(7); v38 = sub_90AEF0(v114, v115, v35, v34, v37, (_DWORD *)v2, 0, 0, 0, 1, v36, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 444) = v38; (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 444) + 472))(&unk_9FAA12); v39 = sub_8FB140(v113, (int)"Text02", (int)&v114, (int)&v115, 0)[9]; v40 = *(_DWORD *)(*v39 + 24); v41 = *(_DWORD *)(*v39 + 20); v42 = sub_421050(7); v43 = sub_8F4A20(v114, v115, v41, v40, v42, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); v44 = *v43; v45 = sub_40A910(572028541); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v44 + 472))(v43, v45); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v46 = *sub_8FB140(v113, (int)"TextField02", (int)&v114, (int)&v115, 0)[9]; v47 = *(_DWORD *)(v46 + 24); v48 = *(_DWORD *)(v46 + 20); v49 = (volatile LONG *)dword_AD01E8; v50 = (volatile LONG *)sub_421050(7); v51 = sub_90AEF0(v114, v115, v48, v47, v50, (_DWORD *)v2, 0, 0, 0, 1, v49, (volatile LONG *)0x1E); *(_DWORD *)(v2 + 448) = v51; (*(void (__thiscall **)(volatile LONG *, signed int))(*v51 + 488))(v51, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 448) + 472))(&unk_9FAA13); v52 = sub_8FB140(v113, (int)"Text03", (int)&v114, (int)&v115, 0)[9]; v53 = *(_DWORD *)(*v52 + 24); v54 = *(_DWORD *)(*v52 + 20); v55 = sub_421050(7); v56 = sub_8F4A20(v114, v115, v54, v53, v55, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v56 + 488))(v56, 5); v57 = *v56; v58 = sub_40A910(-1560609823); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v57 + 472))(v56, v58); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v56 + 240))(v56, 0); v59 = *sub_8FB140(v113, (int)"TextField03", (int)&v114, (int)&v115, 0)[9]; v60 = *(_DWORD *)(v59 + 24); v61 = *(_DWORD *)(v59 + 20); v62 = sub_421050(7); v63 = sub_8F4A20(v114, v115, v61, v60, v62, v2, 0, 0); *(_DWORD *)(v2 + 452) = v63; (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 452) + 472))(&unk_9FAA1D); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 452) + 240))(0); v64 = sub_8FB140(v113, (int)"Text04", (int)&v114, (int)&v115, 0)[9]; v65 = *(_DWORD *)(*v64 + 24); v66 = *(_DWORD *)(*v64 + 20); v67 = sub_421050(7); v68 = sub_8F4A20(v114, v115, v66, v65, v67, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v68 + 488))(v68, 5); v69 = *v68; v70 = sub_40C190(-1751598159); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v69 + 472))(v68, v70); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v68 + 240))(v68, 0); v71 = *sub_8FB140(v113, (int)"TextField04", (int)&v114, (int)&v115, 0)[9]; v72 = *(_DWORD *)(v71 + 24); v73 = *(_DWORD *)(v71 + 20); v74 = sub_421050(7); v75 = sub_8F4A20(v114, v115, v73, v72, v74, v2, 0, 0); *(_DWORD *)(v2 + 456) = v75; (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 456) + 472))(&unk_9FAA1E); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 456) + 240))(0); *(_BYTE *)(*(_DWORD *)(*(_DWORD *)(v2 + 456) + 288) + 284) = 1; v118 = 15; v117 = 0; LOBYTE(v116) = 0; LOBYTE(v144) = 1; strcpy(v140, "0"); v141 = 0; v142 = 0; v143 = 0; v76 = (CHAR *)sub_40A910(-1683425310); v124 = 15; v123 = 0; v122 = 0; sub_4018E0(&v122, v76, strlen(v76)); LOBYTE(v144) = 2; v77 = (CHAR *)sub_40A910(1279871523); v127 = 15; v126 = 0; v125 = 0; sub_4018E0(&v125, v77, strlen(v77)); LOBYTE(v144) = 3; v78 = (CHAR *)sub_40A910(-420723676); v130 = 15; v129 = 0; v128 = 0; sub_4018E0(&v128, v78, strlen(v78)); LOBYTE(v144) = 4; v79 = (CHAR *)sub_40A910(-671989437); v133 = 15; v132 = 0; v131 = 0; sub_4018E0(&v131, v79, strlen(v79)); LOBYTE(v144) = 5; v80 = (CHAR *)sub_40A910(-555208947); v136 = 15; v135 = 0; v134 = 0; sub_4018E0(&v134, v80, strlen(v80)); LOBYTE(v144) = 6; v81 = (CHAR *)sub_40A910(-95796673); v139 = 15; v138 = 0; v137 = 0; sub_4018E0(&v137, v81, strlen(v81)); LOBYTE(v144) = 7; v82 = 0; v110 = &v122; do { v111 = v82 + 1; _itoa(v82 + 1, v140, 10); sub_4018E0(&v116, "BtnNor0", 7u); sub_401D10((int)&v116, v140, strlen(v140)); v83 = v116; if ( v118 < 0x10 ) v83 = &v116; v112 = sub_8FB140(v113, (int)v83, (int)&v114, (int)&v115, 0); sub_4018E0(&v116, "BtnOver0", 8u); sub_401D10((int)&v116, v140, strlen(v140)); v84 = v116; if ( v118 < 0x10 ) v84 = &v116; sub_8FB650(v112, v113, (int)v84); v112 = sub_465940(v114, v115, (int)v112, v2, v82, 0); sub_5B3CF0((_DWORD *)(v2 + 468), &v112); v85 = v110; if ( *((_DWORD *)v110 + 5) >= 0x10u ) v85 = *(const char **)v110; sub_8F2EA0(*(void ***)(*(_DWORD *)(v2 + 468) + 4 * v82), v85); v86 = *(_DWORD *)(*(_DWORD *)(v2 + 468) + 4 * v82); v110 += 28; *(_DWORD *)(v86 + 272) = dword_AD01E8; v82 = v111; } while ( v111 < 6 ); v101 = 0; v102 = 0; v103 = 0; v105 = 0; v106 = 0; v107 = 0; v108 = 0; v109 = 0; LOBYTE(v144) = 8; v87 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v101, 1); *v87 = 1; v87[1] = v113; v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_4018E0(&v119, "ColumnBarNor", 0xCu); v88 = v87 + 18; LOBYTE(v144) = 9; sub_40B060(v88, (const void **)&v119); LOBYTE(v144) = 8; if ( v121 >= 0x10 ) operator delete(v119); v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_4018E0(&v119, "ColumnBarClick", 0xEu); LOBYTE(v144) = 10; sub_40B060(v88, (const void **)&v119); LOBYTE(v144) = 8; if ( v121 >= 0x10 ) operator delete(v119); v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_4018E0(&v119, "ColumnBarOver", 0xDu); LOBYTE(v144) = 11; sub_40B060(v88, (const void **)&v119); LOBYTE(v144) = 8; if ( v121 >= 0x10 ) operator delete(v119); v89 = ((int (__thiscall *)(void **, signed int))loc_466F40)(&v101, 2); *(_DWORD *)v89 = 2; v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_4018E0(&v119, "Column01", 8u); LOBYTE(v144) = 12; sub_40B060((int *)(v89 + 72), (const void **)&v119); LOBYTE(v144) = 8; if ( v121 >= 0x10 ) operator delete(v119); *(_DWORD *)(v89 + 4) = v113; *(_BYTE *)(v89 + 88) = 1; v90 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v101, 2); *v90 = 2; v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_4018E0(&v119, "Column02", 8u); LOBYTE(v144) = 13; sub_40B060(v90 + 18, (const void **)&v119); LOBYTE(v144) = 8; if ( v121 >= 0x10 ) operator delete(v119); v90[1] = v113; v121 = 15; v120 = 0; LOBYTE(v119) = 0; sub_466680(&v101, 0); v91 = sub_8FB140(v113, (int)"ColumnBox", (int)&v114, (int)&v115, 0); v92 = sub_466330(v114, v115, (int)v91, *(float *)&v2, (int **)&v101, 1, 0); *(_DWORD *)(v2 + 464) = v92; *((_DWORD *)v92 + 89) = 7; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*(_DWORD *)(v2 + 464), &unk_9FAA1F); sub_464F90(*(_DWORD **)(v2 + 464), 0); *(_DWORD *)(*(_DWORD *)(v2 + 464) + 344) = 0; sub_465130(*(_DWORD **)(v2 + 464)); v93 = sub_8FB140(v113, (int)"SlideBar_SlideBtnMiddle", (int)&v114, (int)&v115, 0); v94 = sub_464310(v113, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v93, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 460) = v94; *(_DWORD *)(v94 + 312) = 6; *(_DWORD *)(*(_DWORD *)(v2 + 460) + 304) = 1; v95 = *(_DWORD *)(v2 + 460); v111 = **(_DWORD **)(v2 + 460); v96 = (*(int (__thiscall **)(int))(v111 + 168))(v95); v97 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v95 + 164))(v95, v96); (*(void (__thiscall **)(_DWORD, int))(v111 + 308))(*(_DWORD *)(v2 + 460), v97); sub_4638F0(*(_DWORD **)(v2 + 460), *(_DWORD *)(*(_DWORD *)(v2 + 464) + 336)); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); LOBYTE(v144) = 7; if ( v101 ) { ((void (__cdecl *)(void *, int, char *, unsigned int))loc_40ACF0)(v101, v102, &v104, v111); operator delete(v101); } v101 = 0; v102 = 0; v103 = 0; LOBYTE(v144) = 1; `eh vector destructor iterator'(&v122, 0x1Cu, 6, sub_636A10); if ( v118 >= 0x10 ) operator delete(v116); v98 = (void (__thiscall ***)(_DWORD, signed int))v113; v118 = 15; v117 = 0; LOBYTE(v116) = 0; v144 = -1; if ( v113 && !InterlockedDecrement((volatile LONG *)(v113 + 4)) && v98 ) (**v98)(v98, 1); return 1; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006EC130) -------------------------------------------------------- int __thiscall sub_6EC130(_DWORD **this) { _DWORD **v1; // esi v1 = this; sub_466A50(this[116]); return sub_465130(v1[116]); } //----- (006EC150) -------------------------------------------------------- void *__thiscall sub_6EC150(void *this, char a2) { void *v2; // esi v2 = this; sub_6EAAF0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006EC180) -------------------------------------------------------- int __thiscall sub_6EC180(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_6EACF0(this); return sub_6EB000(v1); } //----- (006EC1B0) -------------------------------------------------------- char __thiscall sub_6EC1B0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char result; // al v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 != 1 ) return result; sub_8EEE70(this[74], 205, 0, 0); } return sub_4A4BA0(v3[74]); } //----- (006EC2C0) -------------------------------------------------------- char __thiscall sub_6EC2C0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf volatile LONG **v9; // edi int v10; // ST08_4 volatile LONG *v11; // eax volatile LONG *v12; // edi volatile LONG *v13; // ebx int v14; // eax volatile LONG *v15; // edi volatile LONG v16; // ebx const CHAR *v17; // eax volatile LONG **v18; // edi volatile LONG *v19; // ecx int v20; // edi int v21; // ebx int v22; // eax volatile LONG *v23; // edi volatile LONG v24; // ebx const CHAR *v25; // eax volatile LONG **v26; // edi volatile LONG *v27; // ecx int v28; // edi int v29; // ebx int v30; // eax volatile LONG *v31; // edi volatile LONG v32; // ebx const CHAR *v33; // eax void (__thiscall ***v34)(_DWORD, signed int); // esi char v35; // [esp+44h] [ebp-28h] char v36; // [esp+48h] [ebp-24h] int v37; // [esp+4Ch] [ebp-20h] int v38; // [esp+50h] [ebp-1Ch] int v39; // [esp+54h] [ebp-18h] int v40; // [esp+58h] [ebp-14h] int v41; // [esp+5Ch] [ebp-10h] int v42; // [esp+68h] [ebp-4h] v2 = (int)this; v41 = 0; v3 = dword_BA6BA0; v42 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\InputPassword.nif"); sub_8F66B0(v4, (int)&v41, v3); if ( !v41 ) return 0; v5 = sub_8FB140(v41, (int)"Panel01", (int)&v35, (int)&v36, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"mhInputPassWordWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( !v41 || InterlockedDecrement((volatile LONG *)(v41 + 4)) ) return 0; v7 = v6 == 0; LABEL_8: if ( !v7 ) (**v6)(v6, 1); return 0; } v9 = sub_8FB140(v41, (int)"TextInput01", (int)&v39, (int)&v40, 0); sub_8F3EB0(v39 - 1, v40 - 2, (int)v9, v2, 0, 0); v10 = *(_DWORD *)(*v9[9] + 20); v11 = sub_45A900(v39, v40, v10, v10, v2, 1342177312, 8, 1, 1, 0, 1); v12 = *(volatile LONG **)(v2 + 344); v13 = v11; if ( v12 != v11 ) { if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); *(_DWORD *)(v2 + 344) = v13; if ( v13 ) InterlockedIncrement(v13 + 1); } sub_459B60(*(_DWORD **)(v2 + 344), 1); if ( !sub_8F71E0(v41, (int)"Text01", &v39, &v40, &v37, &v38) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v41; v42 = -1; if ( !v41 || InterlockedDecrement((volatile LONG *)(v41 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_8; } v14 = sub_421050(7); v15 = sub_8F4A20(v39, v40, v37, v38, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v16 = *v15; v17 = sub_40C190(-1476989212); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v16 + 472))(v15, v17); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v18 = sub_8FB140(v41, (int)"BtnNor01", (int)&v39, (int)&v40, 0); sub_8FB650(v18, v41, (int)"BtnClick01"); sub_8FB650(v18, v41, (int)"BtnOver01"); sub_8FE0F0(v39, v40, (int)v18, v2, 1, 0, 0); v19 = v18[9]; v20 = *(_DWORD *)(*v19 + 24); v21 = *(_DWORD *)(*v19 + 20); v22 = sub_421050(7); v23 = sub_8F4A20(v39, v40, v21, v20, v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 5); v24 = *v23; v25 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v24 + 472))(v23, v25); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v26 = sub_8FB140(v41, (int)"BtnNor02", (int)&v39, (int)&v40, 0); sub_8FB650(v26, v41, (int)"BtnClick02"); sub_8FB650(v26, v41, (int)"BtnOver02"); sub_8FE0F0(v39, v40, (int)v26, v2, 0, 0, 0); v27 = v26[9]; v28 = *(_DWORD *)(*v27 + 24); v29 = *(_DWORD *)(*v27 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v39, v40, v29, v28, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = *v31; v33 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v32 + 472))(v31, v33); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.5, 0.43000001); v42 = -1; if ( v41 ) { v34 = (void (__thiscall ***)(_DWORD, signed int))v41; if ( !InterlockedDecrement((volatile LONG *)(v41 + 4)) ) { if ( v34 ) (**v34)(v34, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006EC6F0) -------------------------------------------------------- int __cdecl sub_6EC6F0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhInputPassWordWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhInputPassWordWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_WORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FAED8: using guessed type void *mhInputPassWordWin::`vftable'; // 9FAEF4: using guessed type void *mhInputPassWordWin::`vftable'; //----- (006EC840) -------------------------------------------------------- _DWORD *__thiscall sub_6EC840(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &mhInputPassWordWin::`vftable'; *((_DWORD *)this + 58) = &mhInputPassWordWin::`vftable'; v3 = *((_DWORD *)this + 86); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FAED8: using guessed type void *mhInputPassWordWin::`vftable'; // 9FAEF4: using guessed type void *mhInputPassWordWin::`vftable'; //----- (006EC9B0) -------------------------------------------------------- char __thiscall sub_6EC9B0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf char result; // al volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // eax int v18; // eax volatile LONG *v19; // edi volatile LONG v20; // ebx const CHAR *v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // eax volatile LONG **v24; // edi volatile LONG *v25; // eax volatile LONG **v26; // edi volatile LONG *v27; // eax volatile LONG **v28; // edi volatile LONG *v29; // eax volatile LONG *v30; // edx int v31; // edi int v32; // ebx int v33; // eax volatile LONG *v34; // edi volatile LONG v35; // ebx const CHAR *v36; // eax int v37; // eax int v38; // edi int v39; // ebx int v40; // eax volatile LONG *v41; // edi volatile LONG v42; // ebx const CHAR *v43; // eax volatile LONG *v44; // ecx int v45; // edi int v46; // ebx int v47; // eax volatile LONG *v48; // edi volatile LONG v49; // ebx const CHAR *v50; // eax int v51; // eax int v52; // edi int v53; // ebx int v54; // eax volatile LONG *v55; // edi volatile LONG v56; // ebx const CHAR *v57; // eax volatile LONG *v58; // ecx int v59; // edi int v60; // ebx int v61; // eax volatile LONG *v62; // edi volatile LONG v63; // ebx const CHAR *v64; // eax int v65; // eax int v66; // edi int v67; // ebx int v68; // eax volatile LONG *v69; // edi volatile LONG v70; // ebx const CHAR *v71; // eax volatile LONG *v72; // ecx int v73; // edi int v74; // ebx int v75; // eax volatile LONG *v76; // edi volatile LONG v77; // ebx const CHAR *v78; // eax int v79; // eax int v80; // edi int v81; // ebx int v82; // eax volatile LONG *v83; // edi volatile LONG v84; // ebx const CHAR *v85; // eax volatile LONG **v86; // edi volatile LONG *v87; // edx int v88; // edi int v89; // ebx int v90; // eax volatile LONG *v91; // edi volatile LONG v92; // ebx const CHAR *v93; // eax volatile LONG **v94; // edi volatile LONG *v95; // ecx int v96; // edi int v97; // ebx int v98; // eax volatile LONG *v99; // edi volatile LONG v100; // ebx const CHAR *v101; // eax volatile LONG **v102; // edi volatile LONG *v103; // edi volatile LONG **v104; // edi volatile LONG **v105; // edi volatile LONG *v106; // eax int v107; // ecx volatile LONG **v108; // edi void (__thiscall ***v109)(_DWORD, signed int); // esi int v110; // [esp+A8h] [ebp-20h] int v111; // [esp+ACh] [ebp-1Ch] int v112; // [esp+B0h] [ebp-18h] int v113; // [esp+B4h] [ebp-14h] int v114; // [esp+B8h] [ebp-10h] int v115; // [esp+C4h] [ebp-4h] v2 = this; v112 = 0; v3 = dword_BA6BA0; v115 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomeEntrance.nif"); sub_8F66B0(v4, (int)&v112, v3); v5 = v112; if ( !v112 ) { if ( off_AC0554 ) { off_AC0554("Game\\MiniHomeGuestEntrance.nif load fail", "LoadFail", 0); v5 = v112; } v115 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( InterlockedDecrement((volatile LONG *)(v5 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_9; } v9 = sub_8FB140(v112, (int)"Frame", (int)&v113, (int)&v114, 0); if ( sub_8F1440(v2, -4, 0, (int)v9, 0, a2, (int)"mhJoinWin", 0) ) { v11 = v113; v12 = v114; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v112, (int)"Theme", (int)&v113, (int)&v114, v13); else v14 = sub_8FB140(v112, (int)"Theme", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113 - v11, v114 - v12, (int)v14, (int)v2, 0, 0); v15 = sub_8FB140(v112, (int)"Panel01", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v15, (int)v2, 0, 0); v16 = sub_8FB140(v112, (int)"Panel02", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v16, (int)v2, 0, 0); v17 = sub_8FB140(v112, (int)"Panel03", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v17, (int)v2, 0, 0); if ( !sub_8F71E0(v112, (int)"WinTitle", &v113, &v114, &v110, &v111) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v112; v115 = -1; if ( !v112 || InterlockedDecrement((volatile LONG *)(v112 + 4)) ) return 0; v7 = v6 == 0; LABEL_9: if ( !v7 ) (**v6)(v6, 1); return 0; } v18 = sub_421050(7); v19 = sub_8F4A20(v113, v114, v110, v111, v18, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v20 = *v19; v21 = sub_40C190(-84526279); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v20 + 472))(v19, v21); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v22 = sub_8FB140(v112, (int)"TextField01", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v22, (int)v2, 0, 0); v23 = sub_45A900( v113, v114, *(_DWORD *)(*v22[9] + 20), *(_DWORD *)(*v22[9] + 24), (int)v2, 1342177280, 20, 1, 1, 0, 1); sub_56FF80(v2 + 88, (int)v23); sub_459B60(v2[88], 1); v24 = sub_8FB140(v112, (int)"TextField04", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v24, (int)v2, 0, 0); v25 = sub_45A900( v113, v114, *(_DWORD *)(*v24[9] + 20), *(_DWORD *)(*v24[9] + 24), (int)v2, 1342185472, 2, 1, 1, 0, 1); sub_56FF80(v2 + 89, (int)v25); sub_459B60(v2[89], 1); v26 = sub_8FB140(v112, (int)"TextField03", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113 - 1, v114 - 2, (int)v26, (int)v2, 0, 0); v27 = sub_45A900( v113, v114, *(_DWORD *)(*v26[9] + 20), *(_DWORD *)(*v26[9] + 24), (int)v2, 1342177312, 8, 1, 1, 0, 1); sub_56FF80(v2 + 90, (int)v27); sub_459B60(v2[90], 1); v28 = sub_8FB140(v112, (int)"TextField06", (int)&v113, (int)&v114, 0); sub_8F3EB0(v113, v114, (int)v28, (int)v2, 0, 0); v29 = sub_45A900( v113, v114, *(_DWORD *)(*v28[9] + 20), *(_DWORD *)(*v28[9] + 24), (int)v2, 1342181380, 100, 1, 1, 0, 1); sub_56FF80(v2 + 91, (int)v29); sub_459B60(v2[91], 1); v30 = sub_8FB140(v112, (int)"Text01", (int)&v113, (int)&v114, 0)[9]; v31 = *(_DWORD *)(*v30 + 24); v32 = *(_DWORD *)(*v30 + 20); v33 = sub_421050(7); v34 = sub_8F4A20(v113, v114, v32, v31, v33, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v34 + 488))(v34, 5); v35 = *v34; v36 = sub_40A910(572028541); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v35 + 472))(v34, v36); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); v37 = *sub_8FB140(v112, (int)"Text02", (int)&v113, (int)&v114, 0)[9]; v38 = *(_DWORD *)(v37 + 24); v39 = *(_DWORD *)(v37 + 20); v40 = sub_421050(7); v41 = sub_8F4A20(v113, v114, v39, v38, v40, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v41 + 488))(v41, 5); v42 = *v41; v43 = sub_40A910(-1649477919); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v42 + 472))(v41, v43); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 240))(v41, 0); v44 = sub_8FB140(v112, (int)"Text03", (int)&v113, (int)&v114, 0)[9]; v45 = *(_DWORD *)(*v44 + 24); v46 = *(_DWORD *)(*v44 + 20); v47 = sub_421050(7); v48 = sub_8F4A20(v113, v114, v46, v45, v47, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v48 + 488))(v48, 5); v49 = *v48; v50 = sub_40C190(-1476989212); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v49 + 472))(v48, v50); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v48 + 240))(v48, 0); v51 = *sub_8FB140(v112, (int)"Text04", (int)&v113, (int)&v114, 0)[9]; v52 = *(_DWORD *)(v51 + 24); v53 = *(_DWORD *)(v51 + 20); v54 = sub_421050(7); v55 = sub_8F4A20(v113, v114, v53, v52, v54, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v55 + 488))(v55, 5); v56 = *v55; v57 = sub_40A910(2126560226); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v56 + 472))(v55, v57); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 240))(v55, 0); v58 = sub_8FB140(v112, (int)"Text05", (int)&v113, (int)&v114, 0)[9]; v59 = *(_DWORD *)(*v58 + 24); v60 = *(_DWORD *)(*v58 + 20); v61 = sub_421050(7); v62 = sub_8F4A20(v113, v114, v60, v59, v61, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v62 + 488))(v62, 5); v63 = *v62; v64 = sub_40A910(-363447505); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v63 + 472))(v62, v64); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v62 + 240))(v62, 0); v65 = *sub_8FB140(v112, (int)"Text02_1", (int)&v113, (int)&v114, 0)[9]; v66 = *(_DWORD *)(v65 + 24); v67 = *(_DWORD *)(v65 + 20); v68 = sub_421050(7); v69 = sub_8F4A20(v113, v114, v67, v66, v68, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 488))(v69, 5); v70 = *v69; v71 = sub_40A910(1918865787); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v70 + 472))(v69, v71); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v69 + 240))(v69, 0); v72 = sub_8FB140(v112, (int)"Text05_1", (int)&v113, (int)&v114, 0)[9]; v73 = *(_DWORD *)(*v72 + 24); v74 = *(_DWORD *)(*v72 + 20); v75 = sub_421050(7); v76 = sub_8F4A20(v113, v114, v74, v73, v75, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v76 + 488))(v76, 5); v77 = *v76; v78 = sub_40A910(1918865787); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v77 + 472))(v76, v78); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v76 + 240))(v76, 0); v79 = *sub_8FB140(v112, (int)"Text06", (int)&v113, (int)&v114, 0)[9]; v80 = *(_DWORD *)(v79 + 24); v81 = *(_DWORD *)(v79 + 20); v82 = sub_421050(7); v83 = sub_8F4A20(v113, v114, v81, v80, v82, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v83 + 488))(v83, 5); v84 = *v83; v85 = sub_40C190(-1751598159); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v84 + 472))(v83, v85); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v83 + 240))(v83, 0); v86 = sub_8FB140(v112, (int)"OKBtnNor", (int)&v113, (int)&v114, 0); sub_8FB650(v86, v112, (int)"OKBTNClick"); sub_8FB650(v86, v112, (int)"OKBtnOver"); sub_8FE0F0(v113, v114, (int)v86, (int)v2, 0, 0, 0); v87 = v86[9]; v88 = *(_DWORD *)(*v87 + 24); v89 = *(_DWORD *)(*v87 + 20); v90 = sub_421050(7); v91 = sub_8F4A20(v113, v114, v89, v88, v90, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v91 + 488))(v91, 5); v92 = *v91; v93 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v92 + 472))(v91, v93); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v91 + 240))(v91, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v91 + 256))(v91, 1); v94 = sub_8FB140(v112, (int)"CancelBtnNor", (int)&v113, (int)&v114, 0); sub_8FB650(v94, v112, (int)"CancelBTNClick"); sub_8FB650(v94, v112, (int)"CancelBtnOver"); sub_8FE0F0(v113, v114, (int)v94, (int)v2, 1, 0, 0); v95 = v94[9]; v96 = *(_DWORD *)(*v95 + 24); v97 = *(_DWORD *)(*v95 + 20); v98 = sub_421050(7); v99 = sub_8F4A20(v113, v114, v97, v96, v98, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 5); v100 = *v99; v101 = sub_40C190(-2001561440); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v100 + 472))(v99, v101); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v99 + 240))(v99, 0); v102 = sub_8FB140(v112, (int)"ClsNor", (int)&v113, (int)&v114, 0); sub_8FB650(v102, v112, (int)"ClsClick"); sub_8FB650(v102, v112, (int)"ClsOver"); sub_8FE0F0(v113, v114, (int)v102, (int)v2, 1, 0, 0); v103 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v112 + 72))("HelpLinkNor") ) { v104 = sub_8FB140(v112, (int)"HelpLinkNor", (int)&v113, (int)&v114, v103); sub_8FB650(v104, v112, (int)"HelpLinkClick"); sub_8FB650(v104, v112, (int)"HelpLinkOver"); sub_8FE0F0(v113, v114, (int)v104, (int)v2, 4, 0, 0); } v105 = sub_8FB140(v112, (int)"Text02Nor", (int)&v113, (int)&v114, 0); sub_8FB650(v105, v112, (int)"Text02Click"); v106 = sub_465940(v113, v114, (int)v105, (int)v2, 2, 0); v107 = v112; v2[86] = v106; v108 = sub_8FB140(v107, (int)"Text05Nor", (int)&v113, (int)&v114, 0); sub_8FB650(v108, v112, (int)"Text05Click"); v2[87] = sub_465940(v113, v114, (int)v108, (int)v2, 3, 0); *((_BYTE *)v2[86] + 380) = 0; *((_BYTE *)v2[87] + 380) = 0; (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); (*(void (__stdcall **)(const char *))(*v2[89] + 460))("2"); v115 = -1; if ( v112 ) { v109 = (void (__thiscall ***)(_DWORD, signed int))v112; if ( !InterlockedDecrement((volatile LONG *)(v112 + 4)) ) { if ( v109 ) (**v109)(v109, 1); } } result = 1; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))v112; v115 = -1; if ( v112 && !InterlockedDecrement((volatile LONG *)(v112 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (006ED5C0) -------------------------------------------------------- char __thiscall sub_6ED5C0(int this, int a2, int a3) { _DWORD *v3; // eax int v4; // esi int v5; // eax LOBYTE(v3) = a2; v4 = this; switch ( a2 ) { case 0: if ( *(_BYTE *)(*(_DWORD *)(this + 344) + 380) == 1 && !strlen((const char *)(*(int (**)(void))(**(_DWORD **)(this + 360) + 452))()) ) { sub_4B13F0((_DWORD **)v4, 0, *(_BYTE *)(*(_DWORD *)(v4 + 344) + 380) == 0); } LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(v4 + 296), 201, 0, 0); break; case 1: LOBYTE(v3) = sub_4ABFA0(*(_DWORD **)(this + 296)); break; case 2: (*(void (**)(void))(**(_DWORD **)(this + 360) + 468))(); v5 = *(_DWORD *)(v4 + 344); LOBYTE(a2) = *(_BYTE *)(v5 + 380) == 0; *(_BYTE *)(v5 + 380) = a2; if ( !(_BYTE)a2 ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v4 + 360) + 488))(1); (*(void (__stdcall **)(int))(**(_DWORD **)(v4 + 360) + 240))(a2); LOBYTE(v3) = (*(int (__stdcall **)(int))(**(_DWORD **)(v4 + 360) + 256))(a2); if ( *(_BYTE *)(*(_DWORD *)(v4 + 344) + 380) == 1 ) LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(v4 + 296), 223, 0, 0); break; case 3: *(_BYTE *)(*(_DWORD *)(this + 348) + 380) = *(_BYTE *)(*(_DWORD *)(this + 348) + 380) == 0; break; case 4: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "MiniHomeEntrance"); break; default: return (char)v3; } return (char)v3; } //----- (006ED740) -------------------------------------------------------- int __thiscall sub_6ED740(_DWORD **this) { _DWORD **v1; // esi const CHAR *v2; // eax v1 = this; v2 = sub_40A910(-319365932); return (*(int (__stdcall **)(const CHAR *))(*v1[91] + 460))(v2); } //----- (006ED7F0) -------------------------------------------------------- int __cdecl sub_6ED7F0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); LOBYTE(v6) = 1; *(_DWORD *)v2 = &mhJoinWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhJoinWin::`vftable'; `eh vector constructor iterator'( (void *)(v2 + 352), 4u, 4, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 2; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FB31C: using guessed type void *mhJoinWin::`vftable'; // 9FB33C: using guessed type void *mhJoinWin::`vftable'; //----- (006ED950) -------------------------------------------------------- _DWORD *__thiscall sub_6ED950(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &mhJoinWin::`vftable'; *((_DWORD *)this + 58) = &mhJoinWin::`vftable'; `eh vector destructor iterator'((char *)this + 352, 4u, 4, sub_410C00); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FB31C: using guessed type void *mhJoinWin::`vftable'; // 9FB33C: using guessed type void *mhJoinWin::`vftable'; //----- (006EDA30) -------------------------------------------------------- _DWORD *__thiscall sub_6EDA30(_DWORD **this, int a2, int a3) { _DWORD *result; // eax if ( !a2 ) result = sub_8EEE70(this[74], 225, 0, 0); return result; } //----- (006EDA60) -------------------------------------------------------- char __thiscall sub_6EDA60(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // edi volatile LONG *v9; // edi const char *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char v12; // [esp+14h] [ebp-18h] char v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MyHomeMinButton.nif"); sub_8F66B0(v4, (int)&v14, v3); v5 = v14; if ( v14 ) { v2[74] = a2; v8 = sub_8FB140(v5, (int)"MyHomeBtnNor", (int)&v12, (int)&v13, 0); sub_8FB650(v8, v14, (int)"MyHomeBtnClick"); sub_8FB650(v8, v14, (int)"MyHomeBtnOver"); v9 = sub_8FE0F0(0, 0, (int)v8, (int)v2, 0, 0, 0); *((_DWORD *)v9 + 68) = dword_AD01E8; v10 = sub_40A910(-671533490); sub_8F2EA0((void **)v9, v10); (*(void (__thiscall **)(_DWORD *, int, int, _DWORD, _DWORD))(*v2 + 236))( v2, xRight, dword_AC2F78, 0.89999998, 0.30000001); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeMinButton.nif load fail", "LoadFail", v14); v5 = v14; } v15 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006EDC20) -------------------------------------------------------- int __cdecl sub_6EDC20(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhMinimizeWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhMinimizeWin::`vftable'; *(_BYTE *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FB5DC: using guessed type void *mhMinimizeWin::`vftable'; // 9FB5FC: using guessed type void *mhMinimizeWin::`vftable'; //----- (006EDD70) -------------------------------------------------------- void *__thiscall sub_6EDD70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhMinimizeWin::`vftable'; *((_DWORD *)this + 58) = &mhMinimizeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FB5DC: using guessed type void *mhMinimizeWin::`vftable'; // 9FB5FC: using guessed type void *mhMinimizeWin::`vftable'; //----- (006EDE30) -------------------------------------------------------- int __userpurge sub_6EDE30@(int a1@, int a2@, int a3, int a4) { int result; // eax int v5; // esi int v6; // ecx int v7; // ecx result = a3; v5 = a1; while ( 2 ) { switch ( result ) { case 0: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 344) + 256))(a4, a2); v6 = *(_DWORD *)(v5 + 348); goto LABEL_10; case 1: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 348) + 256))(a4, a2); v7 = *(_DWORD *)(v5 + 344); goto LABEL_6; case 2: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 352) + 256))(a4, a2); v6 = *(_DWORD *)(v5 + 356); goto LABEL_10; case 3: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 356) + 256))(a4, a2); v7 = *(_DWORD *)(v5 + 352); goto LABEL_6; case 4: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 360) + 256))(a4, a2); v6 = *(_DWORD *)(v5 + 364); LABEL_10: result = (*(int (__cdecl **)(bool))(*(_DWORD *)v6 + 256))((_BYTE)a4 == 0); break; case 5: (*(void (__stdcall **)(int, int))(**(_DWORD **)(v5 + 364) + 256))(a4, a2); v7 = *(_DWORD *)(v5 + 360); LABEL_6: result = (*(int (__cdecl **)(bool))(*(_DWORD *)v7 + 256))((_BYTE)a4 == 0); break; case 7: (*(void (__stdcall **)(int))(**(_DWORD **)(v5 + 344) + 256))(a4); result = (*(int (__stdcall **)(int))(**(_DWORD **)(v5 + 348) + 256))(a4); break; case 8: (*(void (__stdcall **)(int))(**(_DWORD **)(v5 + 352) + 256))(a4); result = (*(int (__stdcall **)(int))(**(_DWORD **)(v5 + 356) + 256))(a4); break; case 9: (*(void (__stdcall **)(int))(**(_DWORD **)(v5 + 360) + 256))(a4); result = (*(int (__stdcall **)(int))(**(_DWORD **)(v5 + 364) + 256))(a4); break; case 10: sub_6EDE30(7, a4); sub_6EDE30(8, a4); result = 9; continue; default: return result; } return result; } } //----- (006EDFE0) -------------------------------------------------------- unsigned int __thiscall sub_6EDFE0(_DWORD *this) { _DWORD *v1; // esi char v3; // [esp+4h] [ebp-10h] char v4; // [esp+8h] [ebp-Ch] int v5; // [esp+Ch] [ebp-8h] unsigned int v6; // [esp+10h] [ebp-4h] v1 = this; if ( !this[86] ) return 1; (*(void (__stdcall **)(int *, char *))(*(_DWORD *)this[86] + 160))(&v5, &v4); (*(void (__stdcall **)(unsigned int *, char *))(*(_DWORD *)v1[90] + 160))(&v6, &v3); return (v6 >> 1) + v5 - 5; } //----- (006EE040) -------------------------------------------------------- unsigned int __thiscall sub_6EE040(_DWORD *this) { unsigned int result; // eax char v2; // [esp+0h] [ebp-8h] unsigned int v3; // [esp+4h] [ebp-4h] if ( this[86] && ((*(void (__stdcall **)(char *, unsigned int *))(*(_DWORD *)this[86] + 160))(&v2, &v3), v3) ) result = v3 >> 1; else result = 1; return result; } //----- (006EE080) -------------------------------------------------------- int __usercall sub_6EE080@(_BYTE *a1@, int a2@) { _BYTE *v2; // esi struct tagPOINT Point; // [esp+4h] [ebp-8h] v2 = a1; GetCursorPos(&Point); (*(void (__thiscall **)(_BYTE *, LONG))(*(_DWORD *)v2 + 172))(v2, Point.x); (*(void (__thiscall **)(_BYTE *, LONG))(*(_DWORD *)v2 + 176))(v2, Point.y); v2[368] = 0; sub_6EDE30((int)v2, a2, 7, 0); sub_6EDE30((int)v2, a2, 8, 0); return sub_6EDE30((int)v2, a2, 4, 1); } //----- (006EE0E0) -------------------------------------------------------- int __usercall sub_6EE0E0@(int a1@, int a2@) { return sub_6EDE30(a1, a2, 10, 0); } //----- (006EE0F0) -------------------------------------------------------- void __userpurge sub_6EE0F0(int a1@, int a2@, float a3) { int v3; // esi char v4; // al v3 = a1; if ( *(_BYTE *)(a1 + 368) ) { if ( a3 > flt_B9E1E8 + 0.300000011920929 ) { v4 = (*(int (**)(void))(**(_DWORD **)(a1 + 360) + 260))(); sub_6EDE30(v3, a2, 4, v4 == 0); flt_B9E1E8 = a3; } } } // B9E1E8: using guessed type float flt_B9E1E8; //----- (006EE150) -------------------------------------------------------- char __thiscall sub_6EE150(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax int v11; // edx volatile LONG **v12; // eax volatile LONG *v13; // eax int v14; // ecx volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG *v17; // eax int v18; // edx volatile LONG **v19; // eax void (__thiscall ***v20)(_DWORD, signed int); // esi int v21; // [esp+Ch] [ebp-18h] int v22; // [esp+10h] [ebp-14h] int v23; // [esp+14h] [ebp-10h] int v24; // [esp+20h] [ebp-4h] v2 = this; v21 = 0; v3 = dword_BA6BA0; v24 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MyHomeMouseControl.nif"); sub_8F66B0(v4, (int)&v21, v3); v5 = v21; if ( v21 ) { v2[74] = a2; v8 = sub_8FB140(v5, (int)"TurnL", (int)&v22, (int)&v23, 0); v2[86] = sub_8F3EB0(v22, v23, (int)v8, (int)v2, 0, 0); v9 = sub_8FB140(v21, (int)"TurnLClick", (int)&v22, (int)&v23, 0); v10 = sub_8F3EB0(v22, v23, (int)v9, (int)v2, 0, 0); v11 = v21; v2[87] = v10; v12 = sub_8FB140(v11, (int)"TurnR", (int)&v22, (int)&v23, 0); v13 = sub_8F3EB0(v22, v23, (int)v12, (int)v2, 0, 0); v14 = v21; v2[88] = v13; v15 = sub_8FB140(v14, (int)"TurnRClick", (int)&v22, (int)&v23, 0); v2[89] = sub_8F3EB0(v22, v23, (int)v15, (int)v2, 0, 0); v16 = sub_8FB140(v21, (int)"CtrlNor", (int)&v22, (int)&v23, 0); v17 = sub_8F3EB0(v22, v23, (int)v16, (int)v2, 0, 0); v18 = v21; v2[90] = v17; v19 = sub_8FB140(v18, (int)"CtrlClick", (int)&v22, (int)&v23, 0); v2[91] = sub_8F3EB0(v22, v23, (int)v19, (int)v2, 0, 0); v24 = -1; if ( v21 ) { v20 = (void (__thiscall ***)(_DWORD, signed int))v21; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v20 ) (**v20)(v20, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeMouseControl.nif load fail", "LoadFail", v21); v5 = v21; } v24 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (006EE3A0) -------------------------------------------------------- int __cdecl sub_6EE3A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x174u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhMouseControlWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhMouseControlWin::`vftable'; *(_BYTE *)(v2 + 368) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FB8AC: using guessed type void *mhMouseControlWin::`vftable'; // 9FB8CC: using guessed type void *mhMouseControlWin::`vftable'; //----- (006EE510) -------------------------------------------------------- void *__thiscall sub_6EE510(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhMouseControlWin::`vftable'; *((_DWORD *)this + 58) = &mhMouseControlWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FB8AC: using guessed type void *mhMouseControlWin::`vftable'; // 9FB8CC: using guessed type void *mhMouseControlWin::`vftable'; //----- (006EE550) -------------------------------------------------------- int __thiscall sub_6EE550(char *this, int a2) { int v2; // esi signed int v3; // ebx int result; // eax v2 = (int)(this + 360); v3 = 2; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v2 - 8) + 256))(a2); result = (*(int (__stdcall **)(int))(**(_DWORD **)v2 + 256))(a2); v2 += 4; --v3; } while ( v3 ); return result; } //----- (006EE5A0) -------------------------------------------------------- char sub_6EE5A0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHomePortalList"); return (char)v0; } //----- (006EE5E0) -------------------------------------------------------- char __thiscall sub_6EE5E0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // edi int v4; // esi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_8F3540(v3); if ( result ) { *(_BYTE *)(v4 + 2659) = 0; result = (unsigned int)sub_8EEE70((_DWORD *)v4, 224, 0, 0); } } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (006EE630) -------------------------------------------------------- int __thiscall sub_6EE630(char *this) { int result; // eax if ( dword_ADB4FC == 2 ) result = sub_6EE550(this, 1); else result = sub_6EE550(this, 0); return result; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (006EE650) -------------------------------------------------------- int __thiscall sub_6EE650(_DWORD *this, int a2) { bool v2; // zf _DWORD **v3; // esi int v5; // [esp+4h] [ebp-4h] *(_BYTE *)(*(_DWORD *)(this[96] + 12) + 380) = 0; v2 = this[59] == 0; v3 = (_DWORD **)(this + 58); v5 = a2; if ( !v2 ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*(_DWORD *)this[59] + 4))(62, &v5, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v3[1] + 20))(62, &v5, v3); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v3)[5])(v3, 62, &v5, v3); } //----- (006EE710) -------------------------------------------------------- signed __int16 __thiscall sub_6EE710(_DWORD **this, unsigned int a2) { _DWORD **v2; // esi int *v3; // ebx int v4; // esi int v5; // edi const char **v6; // eax const char *v7; // esi int **v8; // ecx int *j; // eax int *i; // eax _DWORD **v12; // [esp+Ch] [ebp-4h] const char *v13; // [esp+18h] [ebp+8h] v2 = this; v3 = (int *)*this[93]; v12 = this; v13 = (const char *)sub_4650C0(this[87], a2, 0); if ( !v13 || v3 == v2[93] ) return -1; while ( 1 ) { v4 = dword_ACB230; v5 = *((unsigned __int16 *)v3 + 6); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = (const char **)(*(_DWORD *)(v4 + 196) + 4 * v5); if ( *v6 ) { v7 = *v6; if ( *v6 ) { if ( !strcmp(v7 + 34, v13) ) break; } } } } if ( !*((_BYTE *)v3 + 21) ) { v8 = (int **)v3[2]; if ( *((_BYTE *)v8 + 21) ) { for ( i = (int *)v3[1]; !*((_BYTE *)i + 21); i = (int *)i[1] ) { if ( v3 != (int *)i[2] ) break; v3 = i; } v3 = i; } else { for ( j = *v8; !*((_BYTE *)j + 21); j = (int *)*j ) v8 = (int **)j; v3 = (int *)v8; } } if ( v3 == v12[93] ) return -1; } return *(_WORD *)v7; } // ACB230: using guessed type int dword_ACB230; //----- (006EE830) -------------------------------------------------------- void __thiscall sub_6EE830(_DWORD *this, int a2, int a3) { int v3; // ebx int *v4; // ecx int v5; // eax int v6; // edi int v7; // esi int *v8; // eax int v9; // eax unsigned int v10; // esi unsigned int v11; // edi unsigned int v12; // ecx unsigned __int8 *v13; // eax int v14; // eax bool v15; // zf signed int v16; // eax bool v17; // bl const char *v18; // ST1C_4 char *v19; // eax char *v20; // ST1C_4 char v21; // [esp+10h] [ebp-78h] int v22; // [esp+14h] [ebp-74h] int v23; // [esp+18h] [ebp-70h] int v24; // [esp+1Ch] [ebp-6Ch] int v25; // [esp+20h] [ebp-68h] int v26; // [esp+24h] [ebp-64h] int v27; // [esp+34h] [ebp-54h] _DWORD *v28; // [esp+38h] [ebp-50h] __time32_t Time; // [esp+3Ch] [ebp-4Ch] __int16 v30; // [esp+40h] [ebp-48h] int v31; // [esp+44h] [ebp-44h] void *v32; // [esp+48h] [ebp-40h] unsigned int v33; // [esp+58h] [ebp-30h] unsigned int v34; // [esp+5Ch] [ebp-2Ch] char v35; // [esp+64h] [ebp-24h] int v36; // [esp+65h] [ebp-23h] int v37; // [esp+69h] [ebp-1Fh] int v38; // [esp+6Dh] [ebp-1Bh] int v39; // [esp+71h] [ebp-17h] __int16 v40; // [esp+75h] [ebp-13h] char v41; // [esp+77h] [ebp-11h] int v42; // [esp+84h] [ebp-4h] v3 = a3; v15 = *(_DWORD *)(a3 + 16) == 0; v28 = this; v27 = a3; if ( !v15 ) { v4 = (int *)this[93]; Time = 0; v30 = 0; v5 = *v4; v31 = v5; if ( (int *)v5 == v4 ) { LABEL_24: if ( *(__time32_t *)((char *)&Time + 2) ) { qmemcpy(&v21, _localtime32((__time32_t *)((char *)&Time + 2)), 0x24u); v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v35 = 0; sprintf(&v35, "%04d.%02d.%02d %02d:%02d", v26 + 1900, v25 + 1, v24, v23, v22); v19 = (char *)sub_40C190(2060112345); v20 = sub_7549E0(v19, &v35); sub_464760((_DWORD *)v28[87], a2, v20); } else { v18 = sub_40A910(1062155834); sub_464760((_DWORD *)v28[87], a2, v18); } } else { while ( 1 ) { v6 = *(unsigned __int16 *)(v5 + 12); v7 = dword_ACB230; if ( !(*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v6) ) break; if ( (unsigned __int16)v6 > *(_WORD *)(v7 + 200) ) break; v8 = (int *)(*(_DWORD *)(v7 + 196) + 4 * v6); if ( !*v8 ) break; v9 = *v8; if ( !v9 ) break; v34 = 15; v33 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, (void *)(v9 + 34), strlen((const char *)(v9 + 34))); v10 = *(_DWORD *)(v3 + 16); if ( *(_DWORD *)(v3 + 20) >= 0x10u ) v3 = *(_DWORD *)v3; v11 = v33; v12 = v33; if ( v33 >= v10 ) v12 = v10; v13 = (unsigned __int8 *)v32; if ( v34 < 0x10 ) v13 = (unsigned __int8 *)&v32; v14 = sub_40C0B0(v13, (unsigned __int8 *)v3, v12); v15 = v14 == 0; if ( !v14 ) { if ( v11 >= v10 ) v16 = v11 != v10; else v16 = -1; v15 = v16 == 0; } v17 = v15; v42 = -1; if ( v34 >= 0x10 ) operator delete(v32); v34 = 15; v33 = 0; LOBYTE(v32) = 0; if ( v17 ) { *(__time32_t *)((char *)&Time + 2) = *(_DWORD *)(v31 + 16); LOWORD(Time) = *(_WORD *)(v31 + 12); goto LABEL_24; } sub_717D90(&v31); v5 = v31; if ( v31 == v28[93] ) goto LABEL_24; v3 = v27; } } } } // ACB230: using guessed type int dword_ACB230; //----- (006EEA80) -------------------------------------------------------- int __thiscall sub_6EEA80(int this) { _DWORD *v1; // esi int v2; // edi int v3; // ebx _DWORD *v4; // eax int v6; // [esp+10h] [ebp-30h] void *v7; // [esp+14h] [ebp-2Ch] int v8; // [esp+24h] [ebp-1Ch] unsigned int v9; // [esp+28h] [ebp-18h] int v10; // [esp+3Ch] [ebp-4h] v1 = (_DWORD *)this; sub_4638F0(*(_DWORD **)(this + 344), *(_DWORD *)(*(_DWORD *)(this + 348) + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[86] + 300); v2 = 0; v3 = (*(_DWORD *)(v1[87] + 300) - *(_DWORD *)(v1[87] + 296)) >> 2; v6 = v3; if ( v3 >= 0 ) { do { if ( sub_4650C0((_DWORD *)v1[87], v2 + *(_DWORD *)(v1[87] + 344), 0) ) { v4 = sub_4650C0((_DWORD *)v1[87], v2 + *(_DWORD *)(v1[87] + 344), 0); v9 = 15; v8 = 0; LOBYTE(v7) = 0; sub_4018E0(&v7, v4, strlen((const char *)v4)); v10 = 0; sub_6EE830(v1, v2, (int)&v7); v10 = -1; if ( v9 >= 0x10 ) operator delete(v7); v8 = 0; LOBYTE(v7) = 0; v3 = v6; v9 = 15; } ++v2; } while ( v2 <= v3 ); } return sub_465130((_DWORD *)v1[87]); } //----- (006EEBD0) -------------------------------------------------------- int __thiscall sub_6EEBD0(_DWORD **this) { int v1; // esi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // esi int v5; // edi int *v6; // eax int v7; // eax void *v8; // eax void *v9; // eax int *v10; // ecx int *v11; // eax int i; // eax int v14; // [esp+10h] [ebp-34h] _DWORD **v15; // [esp+14h] [ebp-30h] void *v16; // [esp+18h] [ebp-2Ch] int v17; // [esp+28h] [ebp-1Ch] unsigned int v18; // [esp+2Ch] [ebp-18h] int v19; // [esp+40h] [ebp-4h] v1 = (int)this; v15 = this; sub_466A50(this[87]); v2 = *(_DWORD **)(v1 + 372); v3 = (_DWORD *)*v2; v14 = 0; if ( (_DWORD *)*v2 != v2 ) { do { v4 = dword_ACB230; v5 = *((unsigned __int16 *)v3 + 6); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v5) ) { if ( (unsigned __int16)v5 <= *(_WORD *)(v4 + 200) ) { v6 = (int *)(*(_DWORD *)(v4 + 196) + 4 * v5); if ( *v6 ) { v7 = *v6; if ( v7 ) { v18 = 15; v17 = 0; LOBYTE(v16) = 0; sub_4018E0(&v16, (void *)(v7 + 34), strlen((const char *)(v7 + 34))); v8 = v16; v19 = 0; if ( v18 < 0x10 ) v8 = &v16; if ( sub_4661A0(v15[87], v14, 0, v8) != 1 ) { v9 = v16; if ( v18 < 0x10 ) v9 = &v16; ((void (__thiscall *)(_DWORD *, void *))loc_466CA0)(v15[87], v9); } v19 = -1; if ( v18 >= 0x10 ) operator delete(v16); ++v14; v18 = 15; v17 = 0; LOBYTE(v16) = 0; } } } } if ( !*((_BYTE *)v3 + 21) ) { v10 = (int *)v3[2]; if ( *((_BYTE *)v10 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v11 = (int *)*v10; if ( !*(_BYTE *)(*v10 + 21) ) { do { v10 = v11; v11 = (int *)*v11; } while ( !*((_BYTE *)v11 + 21) ); } v3 = v10; } } } while ( v3 != v15[93] ); v1 = (int)v15; } sub_465130(*(_DWORD **)(v1 + 348)); return sub_6EEA80(v1); } // ACB230: using guessed type int dword_ACB230; //----- (006EED90) -------------------------------------------------------- char __thiscall sub_6EED90(int this, int a2, int a3) { char result; // al _DWORD **v4; // esi int v5; // edi unsigned int v6; // eax __int16 v7; // ax int v8; // ecx int v9; // edi unsigned int v10; // eax __int16 v11; // ax result = a2; v4 = (_DWORD **)this; switch ( a2 ) { case 0: result = sub_6EE650((_DWORD *)this, 0); break; case 1: result = sub_6EE650((_DWORD *)this, 1); break; case 2: result = sub_6EE650((_DWORD *)this, 2); break; case 3: result = sub_6EE650((_DWORD *)this, 3); break; case 4: result = sub_6EE650((_DWORD *)this, 4); break; case 5: result = sub_6EE650((_DWORD *)this, 5); break; case 6: result = sub_6EEA80(this); break; case 9: v5 = *(_DWORD *)(this + 296); v6 = sub_464F50(*(_DWORD **)(this + 348)); v7 = sub_6EE710(v4, v6); result = sub_4BD680(v7); break; case 10: v8 = *(_DWORD *)(this + 296); result = sub_4B4B00(); break; case 11: v9 = *(_DWORD *)(this + 296); v10 = sub_464F50(*(_DWORD **)(this + 348)); v11 = sub_6EE710(v4, v10); result = sub_4B4AD0(v11); break; case 12: result = (unsigned int)sub_8EEE70(*(_DWORD **)(this + 296), 224, 0, 0); break; case 13: result = sub_6EE5A0(); break; default: return result; } return result; } //----- (006EEED0) -------------------------------------------------------- char __thiscall sub_6EEED0(_DWORD *this, __int64 a2) { _DWORD *v2; // edi _DWORD *v3; // eax char v5[2]; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v2 = this; v6 = *(_DWORD *)((char *)&a2 + 2); *(_WORD *)v5 = a2; v3 = sub_67FF90(this + 92, v5); sub_6E19E0(v2 + 92, (int)v5, v3, 0); if ( !(_BYTE)v6 ) return 0; sub_6EEBD0((_DWORD **)v2); return 1; } //----- (006EEF30) -------------------------------------------------------- char __thiscall sub_6EEF30(_DWORD *this, char a2) { _DWORD *v2; // esi int v4; // [esp+8h] [ebp-4h] v2 = this; sub_4A3E20(this + 92, (int **)&v4, &a2); if ( v4 == v2[93] ) return 0; sub_6CDBF0(v2 + 92, (int *)&a2, v4); sub_6EEBD0((_DWORD **)v2); return 1; } //----- (006EEF90) -------------------------------------------------------- LONG __thiscall sub_6EEF90(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax _DWORD *v3; // ST08_4 _DWORD *v4; // ST04_4 char v6; // [esp+Ch] [ebp-18h] _DWORD *v7; // [esp+10h] [ebp-14h] _DWORD *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = this; v8 = this; *this = &mhPortalListWin::`vftable'; this[58] = &mhPortalListWin::`vftable'; v2 = (void *)this[96]; v9 = 0; if ( v2 ) operator delete(v2); v1[96] = 0; v1[97] = 0; v1[98] = 0; v7 = v1 + 92; v3 = (_DWORD *)v1[93]; v4 = *(_DWORD **)v1[93]; LOBYTE(v9) = 1; sub_6CDE90(v1 + 92, (int *)&v6, v4, v3); operator delete((void *)v1[93]); v9 = -1; return sub_8F10F0(v1); } // 9FBD10: using guessed type void *mhPortalListWin::`vftable'; // 9FBD2C: using guessed type void *mhPortalListWin::`vftable'; //----- (006EF040) -------------------------------------------------------- _DWORD *__thiscall sub_6EF040(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &mhPortalListWin::`vftable'; v1[58] = &mhPortalListWin::`vftable'; v1[86] = 0; v1[87] = 0; v7 = 0; v1[94] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[93] = v2; *v2 = v2; *(_DWORD *)(v1[93] + 4) = v1[93]; *(_DWORD *)(v1[93] + 8) = v1[93]; *(_BYTE *)(v1[93] + 20) = 1; *(_BYTE *)(v1[93] + 21) = 1; v1[96] = 0; v1[97] = 0; v1[98] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9FBD10: using guessed type void *mhPortalListWin::`vftable'; // 9FBD2C: using guessed type void *mhPortalListWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006EF120) -------------------------------------------------------- volatile LONG *__cdecl sub_6EF120(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x190u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6EF040(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006EF250) -------------------------------------------------------- char __thiscall sub_6EF250(volatile LONG **this, int a2) { volatile LONG **v2; // esi char *v3; // eax int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi LONG v6; // eax char result; // al volatile LONG **v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // esi int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // edi const CHAR *v19; // eax CHAR *v20; // edi CHAR *v21; // edi CHAR *v22; // edi CHAR *v23; // edi CHAR *v24; // edi CHAR *v25; // edi int v26; // edi void *v27; // eax void *v28; // eax const char *v29; // eax volatile LONG v30; // edi _DWORD *v31; // edi int *v32; // edi _DWORD *v33; // edi volatile LONG **v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // eax int v37; // eax volatile LONG *v38; // edi int (__thiscall *v39)(volatile LONG *); // edx volatile LONG *v40; // ecx int v41; // eax int v42; // eax volatile LONG **v43; // edi volatile LONG *v44; // edx int v45; // edi int v46; // eax volatile LONG *v47; // eax int v48; // edi const CHAR *v49; // eax volatile LONG **v50; // edi volatile LONG *v51; // ecx int v52; // edi int v53; // eax volatile LONG *v54; // eax int v55; // edi const CHAR *v56; // eax volatile LONG **v57; // edi volatile LONG *v58; // edi volatile LONG **v59; // edi void (__thiscall ***v60)(_DWORD, signed int); // esi int v61; // [esp+10h] [ebp-140h] int v62; // [esp+14h] [ebp-13Ch] void *v63; // [esp+18h] [ebp-138h] int v64; // [esp+1Ch] [ebp-134h] int v65; // [esp+20h] [ebp-130h] char v66; // [esp+24h] [ebp-12Ch] char v67; // [esp+28h] [ebp-128h] int v68; // [esp+2Ch] [ebp-124h] int v69; // [esp+30h] [ebp-120h] int v70; // [esp+34h] [ebp-11Ch] int v71; // [esp+38h] [ebp-118h] char *v72; // [esp+3Ch] [ebp-114h] unsigned int v73; // [esp+40h] [ebp-110h] int v74; // [esp+44h] [ebp-10Ch] int v75; // [esp+48h] [ebp-108h] int v76; // [esp+4Ch] [ebp-104h] int v77; // [esp+50h] [ebp-100h] void *v78; // [esp+54h] [ebp-FCh] int v79; // [esp+64h] [ebp-ECh] unsigned int v80; // [esp+68h] [ebp-E8h] void *v81; // [esp+70h] [ebp-E0h] int v82; // [esp+80h] [ebp-D0h] unsigned int v83; // [esp+84h] [ebp-CCh] char v84; // [esp+8Ch] [ebp-C4h] int v85; // [esp+9Ch] [ebp-B4h] int v86; // [esp+A0h] [ebp-B0h] char v87; // [esp+A8h] [ebp-A8h] int v88; // [esp+B8h] [ebp-98h] int v89; // [esp+BCh] [ebp-94h] char v90; // [esp+C4h] [ebp-8Ch] int v91; // [esp+D4h] [ebp-7Ch] int v92; // [esp+D8h] [ebp-78h] char v93; // [esp+E0h] [ebp-70h] int v94; // [esp+F0h] [ebp-60h] int v95; // [esp+F4h] [ebp-5Ch] char v96; // [esp+FCh] [ebp-54h] int v97; // [esp+10Ch] [ebp-44h] int v98; // [esp+110h] [ebp-40h] char v99; // [esp+118h] [ebp-38h] int v100; // [esp+128h] [ebp-28h] int v101; // [esp+12Ch] [ebp-24h] char v102[2]; // [esp+134h] [ebp-1Ch] int v103; // [esp+136h] [ebp-1Ah] int v104; // [esp+13Ah] [ebp-16h] __int16 v105; // [esp+13Eh] [ebp-12h] int v106; // [esp+14Ch] [ebp-4h] v2 = this; v77 = 0; v106 = 0; v74 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomePortalList.nif"); sub_8F66B0(v3, (int)&v77, v74); v4 = v77; if ( !v77 ) { if ( off_AC0554 ) { off_AC0554("Game\\MiniHomePortalList.nif load fail", "LoadFail", 0); v4 = v77; } v106 = -1; if ( !v4 ) return 0; v5 = (void (__thiscall ***)(_DWORD, signed int))v4; v6 = InterlockedDecrement((volatile LONG *)(v4 + 4)); goto LABEL_8; } v8 = sub_8FB140(v77, (int)"Frame", (int)&v76, (int)&v75, 0); if ( sub_8F1440(v2, 0, 0, (int)v8, 0, a2, (int)"mhPortalListWin", 0) ) { v10 = v76; v74 = v75; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v77, (int)"Theme", (int)&v76, (int)&v75, v11); else v12 = sub_8FB140(v77, (int)"Theme", (int)&v76, (int)&v75, 0); sub_8F3EB0(v76 - v10, v75 - v74, (int)v12, (int)v2, 0, 0); v13 = sub_8FB140(v77, (int)"Panel01", (int)&v76, (int)&v75, 0); sub_8F3EB0(v76, v75, (int)v13, (int)v2, 0, 0); v14 = sub_8FB140(v77, (int)"Panel02", (int)&v76, (int)&v75, 0); sub_8F3EB0(v76, v75, (int)v14, (int)v2, 0, 0); v15 = sub_8FB140(v77, (int)"Panel03", (int)&v76, (int)&v75, 0); sub_8F3EB0(v76, v75, (int)v15, (int)v2, 0, 0); v16 = sub_8FB140(v77, (int)"Panel04", (int)&v76, (int)&v75, 0); sub_8F3EB0(v76, v75, (int)v16, (int)v2, 0, 0); if ( !sub_8F71E0(v77, (int)"WinTitle", &v76, &v75, &v62, &v61) ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v77; v106 = -1; if ( !v77 ) return 0; v6 = InterlockedDecrement((volatile LONG *)(v77 + 4)); LABEL_8: if ( !v6 ) { if ( v5 ) (**v5)(v5, 1); } return 0; } v17 = sub_421050(7); v18 = sub_8F4A20(v76, v75, v62, v61, v17, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v18 + 468))(v18, &dword_AA8D98); v74 = *v18 + 472; v19 = sub_40A910(-671989437); (*(void (__thiscall **)(volatile LONG *, const CHAR *))v74)(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v80 = 15; v79 = 0; LOBYTE(v78) = 0; LOBYTE(v106) = 1; strcpy(v102, "0"); v103 = 0; v104 = 0; v105 = 0; v20 = (CHAR *)sub_40A910(-1683425310); v86 = 15; v85 = 0; v84 = 0; sub_4018E0(&v84, v20, strlen(v20)); LOBYTE(v106) = 2; v21 = (CHAR *)sub_40A910(1279871523); v89 = 15; v88 = 0; v87 = 0; sub_4018E0(&v87, v21, strlen(v21)); LOBYTE(v106) = 3; v22 = (CHAR *)sub_40A910(-420723676); v92 = 15; v91 = 0; v90 = 0; sub_4018E0(&v90, v22, strlen(v22)); LOBYTE(v106) = 4; v23 = (CHAR *)sub_40A910(-671989437); v95 = 15; v94 = 0; v93 = 0; sub_4018E0(&v93, v23, strlen(v23)); LOBYTE(v106) = 5; v24 = (CHAR *)sub_40A910(-555208947); v98 = 15; v97 = 0; v96 = 0; sub_4018E0(&v96, v24, strlen(v24)); LOBYTE(v106) = 6; v25 = (CHAR *)sub_40A910(-95796673); v101 = 15; v100 = 0; v99 = 0; sub_4018E0(&v99, v25, strlen(v25)); LOBYTE(v106) = 7; v26 = 0; v72 = &v84; do { v73 = v26 + 1; _itoa(v26 + 1, v102, 10); sub_4018E0(&v78, "BtnNor0", 7u); sub_401D10((int)&v78, v102, strlen(v102)); v27 = v78; if ( v80 < 0x10 ) v27 = &v78; v74 = (int)sub_8FB140(v77, (int)v27, (int)&v76, (int)&v75, 0); sub_4018E0(&v78, "BtnOver0", 8u); sub_401D10((int)&v78, v102, strlen(v102)); v28 = v78; if ( v80 < 0x10 ) v28 = &v78; sub_8FB650((_DWORD *)v74, v77, (int)v28); v74 = (int)sub_465940(v76, v75, v74, (int)v2, v26, 0); sub_5B3CF0(v2 + 96, &v74); v29 = v72; if ( *((_DWORD *)v72 + 5) >= 0x10u ) v29 = *(const char **)v72; sub_8F2EA0((void **)v2[96][v26], v29); v30 = v2[96][v26]; v72 += 28; *(_DWORD *)(v30 + 272) = dword_AD01E8; v26 = v73; } while ( v73 < 6 ); v63 = 0; v64 = 0; v65 = 0; v67 = 0; v68 = 0; v69 = 0; v70 = 0; v71 = 0; LOBYTE(v106) = 8; v31 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v63, 1); *v31 = 1; v31[1] = v77; v83 = 15; v82 = 0; LOBYTE(v81) = 0; sub_4018E0(&v81, "ColumnBarNor", 0xCu); v32 = v31 + 18; LOBYTE(v106) = 9; sub_40B060(v32, (const void **)&v81); LOBYTE(v106) = 8; if ( v83 >= 0x10 ) operator delete(v81); v83 = 15; v82 = 0; LOBYTE(v81) = 0; sub_4018E0(&v81, "ColumnBarClick", 0xEu); LOBYTE(v106) = 10; sub_40B060(v32, (const void **)&v81); LOBYTE(v106) = 8; if ( v83 >= 0x10 ) operator delete(v81); v83 = 15; v82 = 0; LOBYTE(v81) = 0; sub_4018E0(&v81, "ColumnBarOver", 0xDu); LOBYTE(v106) = 11; sub_40B060(v32, (const void **)&v81); LOBYTE(v106) = 8; if ( v83 >= 0x10 ) operator delete(v81); v33 = (_DWORD *)((int (__thiscall *)(void **, signed int))loc_466F40)(&v63, 2); *v33 = 2; v83 = 15; v82 = 0; LOBYTE(v81) = 0; sub_4018E0(&v81, "Column01", 8u); LOBYTE(v106) = 12; sub_40B060(v33 + 18, (const void **)&v81); LOBYTE(v106) = 8; if ( v83 >= 0x10 ) operator delete(v81); v33[1] = v77; v83 = 15; v82 = 0; LOBYTE(v81) = 0; sub_466680(&v63, 0); v34 = sub_8FB140(v77, (int)"ColumnBox", (int)&v76, (int)&v75, 0); v35 = sub_466330(v76, v75, (int)v34, *(float *)&v2, (int **)&v63, 0, 0); v2[87] = v35; *((_DWORD *)v35 + 89) = 7; ((void (__thiscall *)(volatile LONG *, void *))loc_466CA0)(v2[87], &unk_9FBB11); sub_464F90(v2[87], 0); *((_DWORD *)v2[87] + 86) = 0; sub_464710(v2[87], dword_AD01E8); sub_465130(v2[87]); v36 = sub_8FB140(v77, (int)"SlideBar_SlideBtnMiddle", (int)&v76, (int)&v75, 0); v37 = sub_464310(v77, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v36, 0, v2); v2[86] = (volatile LONG *)v37; *(_DWORD *)(v37 + 312) = 6; *((_DWORD *)v2[86] + 76) = 1; v38 = v2[86]; v39 = *(int (__thiscall **)(volatile LONG *))(*v2[86] + 168); v40 = v2[86]; v73 = *v2[86]; v41 = v39(v40); v42 = (*(int (__thiscall **)(volatile LONG *, int))(*v38 + 164))(v38, v41); (*(void (__thiscall **)(volatile LONG *, int))(v73 + 308))(v2[86], v42); sub_4638F0(v2[86], *((_DWORD *)v2[87] + 84)); v43 = sub_8FB140(v77, (int)"OKBtnNor", (int)&v76, (int)&v75, 0); sub_8FB650(v43, v77, (int)"OKBTNClick"); sub_8FB650(v43, v77, (int)"OKBtnOver"); v2[88] = sub_8FE0F0(v76, v75, (int)v43, (int)v2, 9, 0, 0); v44 = v43[9]; v45 = *(_DWORD *)(*v44 + 24); v73 = *(_DWORD *)(*v44 + 20); v46 = sub_421050(7); v47 = sub_8F4A20(v76, v75, v73, v45, v46, (int)v2, 0, 0); v2[90] = v47; (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); v48 = *v2[90]; v49 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v48 + 472))(v2[90], v49); (*(void (__stdcall **)(_DWORD))(*v2[90] + 240))(0); v50 = sub_8FB140(v77, (int)"CancelBtnNor", (int)&v76, (int)&v75, 0); sub_8FB650(v50, v77, (int)"CancelBTNClick"); sub_8FB650(v50, v77, (int)"CancelBtnOver"); v2[89] = sub_8FE0F0(v76, v75, (int)v50, (int)v2, 10, 0, 0); v51 = v50[9]; v52 = *(_DWORD *)(*v51 + 24); v73 = *(_DWORD *)(*v51 + 20); v53 = sub_421050(7); v54 = sub_8F4A20(v76, v75, v73, v52, v53, (int)v2, 0, 0); v2[91] = v54; (*(void (__thiscall **)(volatile LONG *, signed int))(*v54 + 488))(v54, 5); v55 = *v2[91]; v56 = sub_40C190(-2001561440); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v55 + 472))(v2[91], v56); (*(void (__stdcall **)(_DWORD))(*v2[91] + 240))(0); v57 = sub_8FB140(v77, (int)"ClsNor", (int)&v76, (int)&v75, 0); sub_8FB650(v57, v77, (int)"ClsClick"); sub_8FB650(v57, v77, (int)"ClsOver"); sub_8FE0F0(v76, v75, (int)v57, (int)v2, 12, 0, 0); v58 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v77 + 72))("HelpLinkNor") ) { v59 = sub_8FB140(v77, (int)"HelpLinkNor", (int)&v76, (int)&v75, v58); sub_8FB650(v59, v77, (int)"HelpLinkClick"); sub_8FB650(v59, v77, (int)"HelpLinkOver"); sub_8FE0F0(v76, v75, (int)v59, (int)v2, 13, 0, 0); } (*((void (__thiscall **)(volatile LONG **, _DWORD))*v2 + 130))(v2, 0); LOBYTE(v106) = 7; if ( v63 ) { ((void (__cdecl *)(void *, int, char *, unsigned int))loc_40ACF0)(v63, v64, &v66, v73); operator delete(v63); } v63 = 0; v64 = 0; v65 = 0; LOBYTE(v106) = 1; `eh vector destructor iterator'(&v84, 0x1Cu, 6, sub_636A10); if ( v80 >= 0x10 ) operator delete(v78); v60 = (void (__thiscall ***)(_DWORD, signed int))v77; v80 = 15; v79 = 0; LOBYTE(v78) = 0; v106 = -1; if ( v77 && !InterlockedDecrement((volatile LONG *)(v77 + 4)) && v60 ) (**v60)(v60, 1); result = 1; } else { v9 = (void (__thiscall ***)(_DWORD, signed int))v77; v106 = -1; if ( v77 && !InterlockedDecrement((volatile LONG *)(v77 + 4)) && v9 ) (**v9)(v9, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006EFFD0) -------------------------------------------------------- void *__thiscall sub_6EFFD0(void *this, char a2) { void *v2; // esi v2 = this; sub_6EEF90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006F0060) -------------------------------------------------------- unsigned int __thiscall sub_6F0060(int this, unsigned int a2) { unsigned int result; // eax result = a2; if ( *(_DWORD *)(this + 364) + 60000 < a2 && *(_BYTE *)(this + 368) == 1 ) { *(_DWORD *)(this + 360) += 60; *(_DWORD *)(this + 364) = a2; } return result; } //----- (006F0090) -------------------------------------------------------- __int16 __thiscall sub_6F0090(int this, __int16 a2) { __int16 result; // ax if ( !*(_BYTE *)(this + 344) ) { result = a2; *(_WORD *)(this + 346) = a2; } return result; } //----- (006F00B0) -------------------------------------------------------- char __thiscall sub_6F00B0(_BYTE *this, char a2) { char result; // al if ( !this[344] ) { result = a2; this[345] = a2; } return result; } //----- (006F00D0) -------------------------------------------------------- signed int __thiscall sub_6F00D0(int this) { signed int result; // eax if ( !*(_BYTE *)(this + 344) ) { result = 0xFFFF; *(_BYTE *)(this + 345) = 0; *(_WORD *)(this + 346) = -1; } return result; } //----- (006F00F0) -------------------------------------------------------- void __thiscall sub_6F00F0(_BYTE *this) { this[344] = 0; } //----- (006F0130) -------------------------------------------------------- struct tm *__thiscall sub_6F0130(const __time32_t *this, _DWORD *a2) { const __time32_t *v2; // ST14_4 __time32_t *v3; // ebx struct tm Tm; // [esp+10h] [ebp-28h] v2 = this; v3 = (__time32_t *)(this + 90); *((_DWORD *)this + 90) = *a2; qmemcpy(&Tm, _localtime32(this + 90), sizeof(Tm)); *((_DWORD *)v2 + 91) = timeGetTime(); *((_BYTE *)v2 + 368) = 1; Tm.tm_sec = 0; *v3 = _mktime32(&Tm); return _localtime32(v3); } //----- (006F01B0) -------------------------------------------------------- char __thiscall sub_6F01B0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax char result; // al volatile LONG **v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi volatile LONG *v11; // eax volatile LONG **v12; // eax int v13; // eax volatile LONG *v14; // edi volatile LONG v15; // ebx const CHAR *v16; // eax volatile LONG *v17; // eax volatile LONG **v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // edi volatile LONG **v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // edx int v24; // edi int v25; // ebx int v26; // eax volatile LONG *v27; // eax int v28; // edi const CHAR *v29; // eax volatile LONG **v30; // edi volatile LONG *v31; // ecx int v32; // edi int v33; // ebx int v34; // eax volatile LONG *v35; // edi volatile LONG v36; // ebx const CHAR *v37; // eax int v38; // eax int v39; // edi int v40; // ebx int v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax volatile LONG *v45; // ecx int v46; // edi int v47; // ebx int v48; // eax volatile LONG *v49; // edi volatile LONG v50; // ebx const CHAR *v51; // eax int v52; // eax int v53; // edi int v54; // ebx int v55; // eax volatile LONG *v56; // eax volatile LONG *v57; // ecx int v58; // edi int v59; // ebx int v60; // eax volatile LONG *v61; // eax volatile LONG *v62; // ecx int v63; // edi int v64; // ebx int v65; // eax volatile LONG *v66; // eax void (__thiscall ***v67)(_DWORD, signed int); // esi int v68; // [esp+7Ch] [ebp-28h] int v69; // [esp+80h] [ebp-24h] int v70; // [esp+84h] [ebp-20h] int v71; // [esp+88h] [ebp-1Ch] int v72; // [esp+8Ch] [ebp-18h] int v73; // [esp+90h] [ebp-14h] int v74; // [esp+94h] [ebp-10h] int v75; // [esp+A0h] [ebp-4h] v2 = this; v72 = 0; v3 = dword_BA6BA0; v75 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MyHomeRepairKit.nif"); sub_8F66B0(v4, (int)&v72, v3); v5 = v72; if ( !v72 ) { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeRepairKit.nif load fail", "LoadFail", 0); v5 = v72; } v75 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = InterlockedDecrement((volatile LONG *)(v5 + 4)); goto LABEL_8; } v9 = sub_8FB140(v72, (int)"Frame", (int)&v70, (int)&v71, 0); if ( sub_8F1440(v2, 0, 0, (int)v9, 0, a2, (int)"mhRepairObjWin", 0) ) { v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v72, (int)"Theme", (int)&v73, (int)&v74, v11); else v12 = sub_8FB140(v72, (int)"Theme", (int)&v73, (int)&v74, 0); sub_8F3EB0(v73 - v70, v74 - v71, (int)v12, (int)v2, 0, 0); if ( !sub_8F71E0(v72, (int)"WinTitle", &v73, &v74, &v68, &v69) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v72; v75 = -1; if ( !v72 ) return 0; v7 = InterlockedDecrement((volatile LONG *)(v72 + 4)); LABEL_8: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v70 = 17; v71 = 0; v13 = sub_421050(7); v14 = sub_8F4A20(v73, v74, v68, v69, v13, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v14 + 488))(v14, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v14 + 468))(v14, &dword_AA8D98); v15 = *v14; v16 = sub_40A910(-1125306583); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v15 + 472))(v14, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v17 = (volatile LONG *)sub_43D0D0(4u); v18 = sub_8FB140(v72, (int)"IconSlot", (int)&v73, (int)&v74, v17); sub_8F3EB0(v73 - v70, v74 - v71, (int)v18, (int)v2, 0, 0); v19 = sub_8FB140(v72, (int)"Plane", (int)&v73, (int)&v74, 0); sub_8F3EB0(v73 - v70, v74 - v71, (int)v19, (int)v2, 0, 0); v20 = sub_8FB140(v72, (int)"ClsNor", (int)&v73, (int)&v74, 0); sub_8FB650(v20, v72, (int)"ClsClick"); sub_8FB650(v20, v72, (int)"ClsOver"); sub_8FE0F0(v73 - v70, v74 - v71, (int)v20, (int)v2, 1, 0, 0); v21 = sub_8FB140(v72, (int)"Panel01", (int)&v73, (int)&v74, 0); sub_8F3EB0(v73 - v70, v74 - v71, (int)v21, (int)v2, 0, 0); v22 = sub_8FB140(v72, (int)"Btn01Nor", (int)&v73, (int)&v74, 0); sub_8FB650(v22, v72, (int)"Btn01Click"); sub_8FB650(v22, v72, (int)"Btn01Over"); v2[94] = sub_8FE0F0(v73 - v70, v74 - v71, (int)v22, (int)v2, 0, 0, 0); v23 = v22[9]; v24 = *(_DWORD *)(*v23 + 24); v25 = *(_DWORD *)(*v23 + 20); v26 = sub_421050(7); v27 = sub_8F4A20(v73 - v70, v74 - v71, v25, v24, v26, (int)v2, 0, 0); v2[93] = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = *v2[93]; v29 = sub_40A910(1401869021); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v28 + 472))(v2[93], v29); (*(void (__stdcall **)(_DWORD))(*v2[93] + 240))(0); v30 = sub_8FB140(v72, (int)"Btn02Nor", (int)&v73, (int)&v74, 0); sub_8FB650(v30, v72, (int)"Btn02Click"); sub_8FB650(v30, v72, (int)"Btn02Over"); sub_8FE0F0(v73 - v70, v74 - v71, (int)v30, (int)v2, 1, 0, 0); v31 = v30[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(7); v35 = sub_8F4A20(v73 - v70, v74 - v71, v33, v32, v34, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); v36 = *v35; v37 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v38 = *sub_8FB140(v72, (int)"Text02", (int)&v73, (int)&v74, 0)[9]; v39 = *(_DWORD *)(v38 + 24); v40 = *(_DWORD *)(v38 + 20); v41 = sub_421050(7); v42 = sub_8F4A20(v73, v74, v40, v39, v41, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40A910(1468112500); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v45 = sub_8FB140(v72, (int)"Text03", (int)&v73, (int)&v74, 0)[9]; v46 = *(_DWORD *)(*v45 + 24); v47 = *(_DWORD *)(*v45 + 20); v48 = sub_421050(7); v49 = sub_8F4A20(v73, v74, v47, v46, v48, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 5); v50 = *v49; v51 = sub_40A910(-659088102); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v49, v51); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v52 = *sub_8FB140(v72, (int)"Text01", (int)&v73, (int)&v74, 0)[9]; v53 = *(_DWORD *)(v52 + 24); v54 = *(_DWORD *)(v52 + 20); v55 = sub_421050(7); v56 = sub_8F4A20(v73, v74, v54, v53, v55, (int)v2, 0, 0); v2[87] = v56; (*(void (__thiscall **)(volatile LONG *, signed int))(*v56 + 488))(v56, 5); (*(void (__stdcall **)(void *))(*v2[87] + 472))(&unk_9FBF65); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); v57 = sub_8FB140(v72, (int)"TextVal02", (int)&v73, (int)&v74, 0)[9]; v58 = *(_DWORD *)(*v57 + 24); v59 = *(_DWORD *)(*v57 + 20); v60 = sub_421050(7); v61 = sub_8F4A20(v73, v74, v59, v58, v60, (int)v2, 0, 0); v2[88] = v61; (*(void (__thiscall **)(volatile LONG *, signed int))(*v61 + 488))(v61, 5); (*(void (__stdcall **)(void *))(*v2[88] + 472))(&unk_9FBF66); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); v62 = sub_8FB140(v72, (int)"TextVal03", (int)&v73, (int)&v74, 0)[9]; v63 = *(_DWORD *)(*v62 + 24); v64 = *(_DWORD *)(*v62 + 20); v65 = sub_421050(7); v66 = sub_8F4A20(v73, v74, v64, v63, v65, (int)v2, 0, 0); v2[89] = v66; (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 488))(v66, 5); (*(void (__stdcall **)(void *))(*v2[89] + 472))(&unk_9FBF67); (*(void (__stdcall **)(_DWORD))(*v2[89] + 240))(0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))(v2, xRight, dword_AC2F78, 0.5, 0.5); v75 = -1; if ( v72 ) { v67 = (void (__thiscall ***)(_DWORD, signed int))v72; if ( !InterlockedDecrement((volatile LONG *)(v72 + 4)) ) { if ( v67 ) (**v67)(v67, 1); } } result = 1; } else { v10 = (void (__thiscall ***)(_DWORD, signed int))v72; v75 = -1; if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) && v10 ) (**v10)(v10, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (006F0980) -------------------------------------------------------- void __fastcall sub_6F0980(int a1) { int v1; // esi int v2; // eax int v3; // edx int v4; // ebx _WORD *v5; // edi _DWORD *v6; // eax int v7; // ebx int v8; // eax int v9; // edi int v10; // eax int v11; // eax int v12; // eax char *v13; // eax volatile LONG *v14; // eax int v15; // ST00_4 _DWORD *v16; // esi const CHAR *v17; // eax int v18; // [esp+4h] [ebp-1Ch] char v19; // [esp+8h] [ebp-18h] int v20; // [esp+10h] [ebp-10h] int v21; // [esp+18h] [ebp-8h] v1 = a1; LOBYTE(a1) = *(_BYTE *)(a1 + 345); if ( *(_WORD *)(v1 + 346) == -1 ) { sub_4A7E60(*(_DWORD **)(v1 + 296), 0, 0); return; } v2 = *(_DWORD *)(*(_DWORD *)(v1 + 296) + 716); v3 = 0; v4 = 0; v5 = 0; if ( v2 ) { a1 = (unsigned __int8)a1; if ( (unsigned __int8)a1 < 0xC0u ) { v6 = *(_DWORD **)(v2 + 4 * a1 + 348); if ( v6 ) { v7 = sub_5D5470(v6); v8 = sub_685A90(&byte_ADA230, *(unsigned __int16 *)(v1 + 346)); v18 = v8; if ( !v7 ) return; if ( !v8 ) return; v9 = sub_49F760(*(unsigned __int16 *)(v8 + 8)); v10 = sub_49F760(*(unsigned __int16 *)(v7 + 8)); if ( !v9 ) return; if ( !v10 ) return; v4 = sub_4507F0((const char *)(v10 + 2)); v11 = sub_4A3DB0((unsigned __int8 *)(v9 + 2)); if ( !v11 ) return; v5 = sub_6E0820(*(_WORD *)(v11 + 143)); if ( !v5 || !v4 ) return; v3 = v18; } } } v12 = sub_6DB2D0(v3, *(_DWORD *)(v1 + 360)); if ( v12 == 100000 || v12 == 200000 ) { v16 = *(_DWORD **)(v1 + 296); v17 = sub_40A910(136580154); sub_492060(v16, (int)v17); } else { if ( v12 + *(unsigned __int16 *)(v4 + 40) <= (unsigned __int16)v5[1] ) { sub_8EEE70(*(_DWORD **)(v1 + 296), 235, 0, 0); } else { v13 = (char *)sub_40A910(1988991469); v14 = sub_462C30(2, v13); v15 = *(_DWORD *)(v1 + 296); v20 = 235; v21 = 0; sub_461760(v14, v15, &v19, 0); } *(_BYTE *)(v1 + 344) = 1; } } // ADA230: using guessed type char byte_ADA230; //----- (006F0B80) -------------------------------------------------------- _WORD *__thiscall sub_6F0B80(_WORD *this) { _WORD *v1; // esi _WORD *result; // eax int v3; // edi int v4; // eax int v5; // ebx unsigned int v6; // ecx _DWORD *v7; // eax int v8; // edi int v9; // ebx int v10; // eax int v11; // edi int v12; // [esp-8h] [ebp-38h] int v13; // [esp+4h] [ebp-2Ch] _WORD *v14; // [esp+8h] [ebp-28h] int v15; // [esp+8h] [ebp-28h] char v16[9]; // [esp+Ch] [ebp-24h] __int64 v17; // [esp+15h] [ebp-1Bh] char v18[13]; // [esp+1Dh] [ebp-13h] v1 = this; result = (_WORD *)0xFFFF; if ( this[173] != -1 ) { (*(void (__thiscall **)(_WORD *, signed int, signed int))(*(_DWORD *)this + 308))( this, (signed int)(0.35 * (double)(unsigned int)xRight), (signed int)((double)(unsigned int)dword_AC2F78 * 0.35)); v3 = 0; (*(void (__cdecl **)(_DWORD))(**((_DWORD **)v1 + 94) + 256))(0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 93) + 256))(0); v4 = *(_DWORD *)(*((_DWORD *)v1 + 74) + 716); v5 = 0; v13 = 0; v14 = 0; if ( !v4 ) goto LABEL_20; v6 = *((unsigned __int8 *)v1 + 345); if ( v6 >= 0xC0 ) goto LABEL_20; v7 = *(_DWORD **)(v4 + 4 * v6 + 348); if ( !v7 ) goto LABEL_20; v8 = sub_5D5470(v7); result = (_WORD *)sub_685A90(&byte_ADA230, (unsigned __int16)v1[173]); v13 = (int)result; if ( v8 ) { if ( result ) { v5 = sub_49F760((unsigned __int16)result[4]); result = (_WORD *)sub_49F760(*(unsigned __int16 *)(v8 + 8)); if ( v5 ) { if ( result ) { v3 = sub_4507F0((const char *)result + 2); result = (_WORD *)sub_4A3DB0((unsigned __int8 *)(v5 + 2)); if ( result ) { result = sub_6E0820(*(_WORD *)((char *)result + 143)); v14 = result; if ( result ) { if ( v3 ) { LABEL_20: *((_BYTE *)v1 + 344) = 1; v16[0] = 0; *(_QWORD *)&v16[1] = 0i64; v17 = 0i64; *(_QWORD *)v18 = 0i64; *(_DWORD *)&v18[8] = 0; v18[12] = 0; sprintf(v16, "%d", *(unsigned __int16 *)(v3 + 40)); (*(void (__stdcall **)(char *, int))(**((_DWORD **)v1 + 88) + 472))(v16, v12); (*(void (__stdcall **)(int))(**((_DWORD **)v1 + 87) + 472))(v5 + 34); v9 = sub_6DB2D0(v13, *((_DWORD *)v1 + 90)); v10 = (unsigned __int16)v14[1]; v11 = 0; v15 = (unsigned __int16)v14[1]; if ( v9 ) { if ( v10 ) { v11 = sub_6DC040(v13, *((_DWORD *)v1 + 90)); if ( v11 > 100 ) v11 = 100; } } *(_DWORD *)v16 = 0; *(_QWORD *)&v16[4] = 0i64; *(__int64 *)((char *)&v17 + 3) = 0i64; *(_TBYTE *)&v18[3] = 0.0; sprintf(v16, "%d/%d (%d%%)", v9, v15, v11); result = (_WORD *)(*(int (__cdecl **)(char *))(**((_DWORD **)v1 + 89) + 472))(v16); if ( v11 < 100 ) { (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 94) + 256))(1); result = (_WORD *)(*(int (__thiscall **)(_DWORD, signed int))(**((_DWORD **)v1 + 93) + 256))( *((_DWORD *)v1 + 93), 1); } } } } } } } } } return result; } // 6F0B80: could not find valid save-restore pair for edi // ADA230: using guessed type char byte_ADA230; //----- (006F0EE0) -------------------------------------------------------- void __thiscall sub_6F0EE0(_DWORD **this, int a2, int a3) { if ( a2 ) { if ( a2 == 1 ) sub_4A7E60(this[74], 0, 0); } else { sub_6F0980((int)this); } } //----- (006F0F10) -------------------------------------------------------- int __cdecl sub_6F0F10(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x17Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhRepairObjWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhRepairObjWin::`vftable'; *(_DWORD *)(v2 + 344) = -65536; *(_DWORD *)(v2 + 364) = 0; *(_BYTE *)(v2 + 368) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FC094: using guessed type void *mhRepairObjWin::`vftable'; // 9FC0B4: using guessed type void *mhRepairObjWin::`vftable'; //----- (006F1070) -------------------------------------------------------- void *__thiscall sub_6F1070(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhRepairObjWin::`vftable'; *((_DWORD *)this + 58) = &mhRepairObjWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FC094: using guessed type void *mhRepairObjWin::`vftable'; // 9FC0B4: using guessed type void *mhRepairObjWin::`vftable'; //----- (006F10B0) -------------------------------------------------------- char sub_6F10B0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "MiniHomeSetting"); return (char)v0; } //----- (006F10E0) -------------------------------------------------------- char __thiscall sub_6F10E0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // esi int v4; // ebx int v5; // esi signed int v6; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { v4 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); result = sub_8F3540(v3); if ( result ) { v5 = (int)(v3 + 90); v6 = 4; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v5 + 488))(1); v5 += 4; --v6; } while ( v6 ); *(_BYTE *)(v4 + 2659) = 0; result = (unsigned int)sub_8EEE70((_DWORD *)v4, 224, 0, 0); } } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (006F1150) -------------------------------------------------------- int __thiscall sub_6F1150(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx _DWORD **v4; // esi int v6; // [esp+4h] [ebp-4h] v2 = this; *(_BYTE *)(*(_DWORD *)(this[94] + 16) + 380) = 0; v3 = this[92]; v6 = a2; (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 460))(&unk_9FC2FA); v4 = (_DWORD **)(v2 + 58); if ( v4[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 4))(62, &v6, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 20))(62, &v6, v4); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v4)[5])(v4, 62, &v6, v4); } //----- (006F11D0) -------------------------------------------------------- char __thiscall sub_6F11D0(int this, int a2, int a3) { int v3; // eax int v4; // esi char *v5; // eax volatile LONG *v6; // esi char v8; // [esp+8h] [ebp-18h] int v9; // [esp+10h] [ebp-10h] int v10; // [esp+18h] [ebp-8h] LOBYTE(v3) = a2; v4 = this; switch ( a2 ) { case 0: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 0); break; case 1: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 1); break; case 2: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 2); break; case 3: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 3); break; case 4: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 4); break; case 5: LOBYTE(v3) = sub_6F1150((_DWORD *)this, 5); break; case 7: if ( *(_BYTE *)(*(_DWORD *)(this + 352) + 380) == 1 && !strlen((const char *)(*(int (**)(void))(**(_DWORD **)(this + 368) + 452))()) ) { *(_BYTE *)(*(_DWORD *)(v4 + 352) + 380) = *(_BYTE *)(*(_DWORD *)(v4 + 352) + 380) == 0; } v5 = (char *)sub_40A910(-2087679570); v6 = sub_462C30(2, v5); v9 = 201; v10 = 1; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = (unsigned int)sub_461760(v6, v3, &v8, 0); break; case 8: (*(void (**)(void))(**(_DWORD **)(this + 368) + 468))(); sub_6F2A50((_DWORD *)v4, 0, dword_ADB4FC == 2, *(_BYTE *)(*(_DWORD *)(v4 + 352) + 380) == 0); v3 = *(_DWORD *)(v4 + 352); if ( *(_BYTE *)(v3 + 380) == 1 ) LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(v4 + 296), 223, 0, 0); break; case 9: *(_BYTE *)(*(_DWORD *)(this + 356) + 380) = *(_BYTE *)(*(_DWORD *)(this + 356) + 380) == 0; break; case 10: LOBYTE(v3) = (unsigned int)sub_8EEE70(*(_DWORD **)(this + 296), 224, 0, 0); break; case 11: LOBYTE(v3) = sub_6F10B0(); break; default: return v3; } return v3; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (006F1430) -------------------------------------------------------- int __thiscall sub_6F1430(_DWORD **this) { _DWORD **v1; // edi signed int v2; // esi _BYTE **v3; // esi signed int v4; // ebx int result; // eax v1 = this; if ( dword_ADB4FC != 2 ) { v2 = 0; do { *((_BYTE *)v1[v2 + 88] + 380) = *((_BYTE *)v1[v2 + 88] + 380); (*(void (__stdcall **)(_DWORD))(*v1[v2 + 88] + 240))(0); if ( !v2 ) (*(void (__stdcall **)(signed int))(*v1[92] + 488))(1); ++v2; } while ( v2 < 2 ); v3 = (_BYTE **)(v1 + 90); v4 = 4; do { (*(void (__stdcall **)(signed int))(*(_DWORD *)*v3 + 488))(1); sub_459960(*v3, 0); ++v3; --v4; } while ( v4 ); (*(void (__stdcall **)(_DWORD))(*v1[87] + 256))(0); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1[86] + 256))(v1[86], 0); } return result; } // ADB4FC: using guessed type int dword_ADB4FC; //----- (006F14F0) -------------------------------------------------------- int __thiscall sub_6F14F0(_DWORD **this) { _DWORD **v1; // edi signed int v2; // esi _DWORD *v3; // eax char v4; // cl _BYTE **v5; // esi signed int v6; // ebx int v8; // [esp+Ch] [ebp-4h] v1 = this; v2 = 0; do { v3 = v1[v2 + 88]; v4 = *((_BYTE *)v3 + 380); *((_BYTE *)v3 + 380) = v4; LOBYTE(v8) = v4; (*(void (__stdcall **)(signed int))(*v1[v2 + 88] + 240))(1); if ( !v2 ) { (*(void (__stdcall **)(signed int))(*v1[92] + 240))(1); (*(void (__stdcall **)(int))(*v1[92] + 256))(v8); } ++v2; } while ( v2 < 2 ); v5 = (_BYTE **)(v1 + 90); v6 = 4; do { sub_459960(*v5, 1); ++v5; --v6; } while ( v6 ); (*(void (__stdcall **)(signed int))(*v1[87] + 256))(1); return (*(int (__stdcall **)(signed int))(*v1[86] + 256))(1); } //----- (006F15A0) -------------------------------------------------------- _DWORD *__thiscall sub_6F15A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi signed int v5; // [esp+14h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &mhSettingWin::`vftable'; v1[58] = &mhSettingWin::`vftable'; v1[86] = 0; v1[87] = 0; `eh vector constructor iterator'( v1 + 90, 4u, 4, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[88] = 0; v1[89] = 0; v2 = v1 + 90; v5 = 4; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; --v5; } while ( v5 ); return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FC4C8: using guessed type void *mhSettingWin::`vftable'; // 9FC4E4: using guessed type void *mhSettingWin::`vftable'; //----- (006F1680) -------------------------------------------------------- LONG __thiscall sub_6F1680(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax v1 = this; *this = &mhSettingWin::`vftable'; this[58] = &mhSettingWin::`vftable'; v2 = (void *)this[94]; if ( v2 ) operator delete(v2); v1[94] = 0; v1[95] = 0; v1[96] = 0; `eh vector destructor iterator'(v1 + 90, 4u, 4, sub_410C00); return sub_8F10F0(v1); } // 9FC4C8: using guessed type void *mhSettingWin::`vftable'; // 9FC4E4: using guessed type void *mhSettingWin::`vftable'; //----- (006F1720) -------------------------------------------------------- volatile LONG *__cdecl sub_6F1720(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x188u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6F15A0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006F1850) -------------------------------------------------------- char __thiscall sub_6F1850(void *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi volatile LONG *v7; // eax LONG v8; // eax volatile LONG **v10; // eax int v11; // edi int v12; // ebx volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax volatile LONG **v16; // eax volatile LONG **v17; // eax volatile LONG **v18; // eax int v19; // eax volatile LONG *v20; // edi volatile LONG v21; // ebx const CHAR *v22; // eax volatile LONG **v23; // edi volatile LONG *v24; // eax volatile LONG **v25; // edi volatile LONG *v26; // eax volatile LONG **v27; // edi volatile LONG *v28; // eax volatile LONG **v29; // edi volatile LONG *v30; // eax volatile LONG *v31; // edx int v32; // edi int v33; // ebx int v34; // eax volatile LONG *v35; // edi volatile LONG v36; // ebx const CHAR *v37; // eax int v38; // eax int v39; // edi int v40; // ebx int v41; // eax volatile LONG *v42; // edi volatile LONG v43; // ebx const CHAR *v44; // eax volatile LONG *v45; // ecx int v46; // edi int v47; // ebx int v48; // eax volatile LONG *v49; // edi volatile LONG v50; // ebx const CHAR *v51; // eax int v52; // eax int v53; // edi int v54; // ebx int v55; // eax volatile LONG *v56; // edi volatile LONG v57; // ebx const CHAR *v58; // eax volatile LONG *v59; // ecx int v60; // edi int v61; // ebx int v62; // eax volatile LONG *v63; // edi volatile LONG v64; // ebx const CHAR *v65; // eax int v66; // eax int v67; // edi int v68; // ebx int v69; // eax volatile LONG *v70; // edi volatile LONG v71; // ebx const CHAR *v72; // eax volatile LONG *v73; // ecx int v74; // edi int v75; // ebx int v76; // eax volatile LONG *v77; // edi volatile LONG v78; // ebx const CHAR *v79; // eax int v80; // eax int v81; // edi int v82; // ebx int v83; // eax volatile LONG *v84; // edi volatile LONG v85; // ebx const CHAR *v86; // eax volatile LONG **v87; // edi volatile LONG *v88; // edx int v89; // edi int v90; // ebx int v91; // eax volatile LONG *v92; // eax int v93; // edi const CHAR *v94; // eax volatile LONG **v95; // edi volatile LONG *v96; // eax int v97; // edx volatile LONG **v98; // edi signed int v99; // edi int v100; // eax char v101; // cl int v102; // edi signed int v103; // ebx CHAR *v104; // eax CHAR *v105; // eax CHAR *v106; // eax CHAR *v107; // eax CHAR *v108; // eax CHAR *v109; // eax void *v110; // eax volatile LONG **v111; // ebx void *v112; // eax unsigned int v113; // eax unsigned int v114; // ebx int v115; // ecx int v116; // edx int v117; // eax unsigned int v118; // eax unsigned int v119; // ecx char *v120; // ecx _DWORD *v121; // edx _DWORD *v122; // eax int v123; // ecx int v124; // edx int v125; // eax unsigned int v126; // eax unsigned int v127; // ecx char *v128; // ecx volatile LONG **v129; // eax int v130; // eax int v131; // ebx int v132; // eax volatile LONG **v133; // edi volatile LONG *v134; // edi volatile LONG **v135; // edi void (__thiscall ***v136)(_DWORD, signed int); // esi unsigned int v137; // [esp+B0h] [ebp-108h] int v138; // [esp+B4h] [ebp-104h] int v139; // [esp+B8h] [ebp-100h] int v140; // [esp+BCh] [ebp-FCh] volatile LONG *v141; // [esp+C0h] [ebp-F8h] int v142; // [esp+C4h] [ebp-F4h] char *v143; // [esp+C8h] [ebp-F0h] int v144; // [esp+CCh] [ebp-ECh] int v145; // [esp+D0h] [ebp-E8h] int v146; // [esp+D4h] [ebp-E4h] void *v147; // [esp+D8h] [ebp-E0h] int v148; // [esp+E8h] [ebp-D0h] unsigned int v149; // [esp+ECh] [ebp-CCh] char v150; // [esp+F4h] [ebp-C4h] int v151; // [esp+104h] [ebp-B4h] int v152; // [esp+108h] [ebp-B0h] char v153; // [esp+110h] [ebp-A8h] int v154; // [esp+120h] [ebp-98h] int v155; // [esp+124h] [ebp-94h] char v156; // [esp+12Ch] [ebp-8Ch] int v157; // [esp+13Ch] [ebp-7Ch] int v158; // [esp+140h] [ebp-78h] char v159; // [esp+148h] [ebp-70h] int v160; // [esp+158h] [ebp-60h] int v161; // [esp+15Ch] [ebp-5Ch] char v162; // [esp+164h] [ebp-54h] int v163; // [esp+174h] [ebp-44h] int v164; // [esp+178h] [ebp-40h] char v165; // [esp+180h] [ebp-38h] int v166; // [esp+190h] [ebp-28h] int v167; // [esp+194h] [ebp-24h] char v168[2]; // [esp+19Ch] [ebp-1Ch] int v169; // [esp+19Eh] [ebp-1Ah] int v170; // [esp+1A2h] [ebp-16h] __int16 v171; // [esp+1A6h] [ebp-12h] int v172; // [esp+1B4h] [ebp-4h] v2 = (int)this; v144 = 0; v3 = dword_BA6BA0; v172 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\MiniHomeSetting.nif"); sub_8F66B0(v4, (int)&v144, v3); v5 = v144; if ( !v144 ) { if ( off_AC0554 ) { off_AC0554("Game\\MiniHomeSetting.nif load fail", "LoadFail", v144); v5 = v144; } v172 = -1; if ( !v5 ) return 0; v6 = (void (__thiscall ***)(_DWORD, signed int))v5; v7 = (volatile LONG *)(v5 + 4); goto LABEL_8; } v10 = sub_8FB140(v144, (int)"Frame", (int)&v145, (int)&v146, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, a2, (int)"mhInfoWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v144; v172 = -1; if ( v144 ) { v7 = (volatile LONG *)(v144 + 4); LABEL_8: v8 = InterlockedDecrement(v7); goto LABEL_9; } return 0; } v11 = v145; v12 = v146; v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v144, (int)"Theme", (int)&v145, (int)&v146, v13); else v14 = sub_8FB140(v144, (int)"Theme", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145 - v11, v146 - v12, (int)v14, v2, 0, 0); v15 = sub_8FB140(v144, (int)"Panel01", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v15, v2, 0, 0); v16 = sub_8FB140(v144, (int)"Panel02", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v16, v2, 0, 0); v17 = sub_8FB140(v144, (int)"Panel03", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v17, v2, 0, 0); v18 = sub_8FB140(v144, (int)"Panel04", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v18, v2, 0, 0); if ( !sub_8F71E0(v144, (int)"WinTitle", &v145, &v146, &v138, &v140) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v144; v172 = -1; if ( v144 ) { v8 = InterlockedDecrement((volatile LONG *)(v144 + 4)); LABEL_9: if ( !v8 ) { if ( v6 ) (**v6)(v6, 1); } return 0; } return 0; } v19 = sub_421050(7); v20 = sub_8F4A20(v145, v146, v138, v140, v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v20 + 468))(v20, &dword_AA8D98); v21 = *v20; v22 = sub_40A910(-555208947); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v20, v22); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v20 + 240))(v20, 0); v23 = sub_8FB140(v144, (int)"TextField01", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v23, v2, 0, 0); v24 = sub_45A900(v145, v146, *(_DWORD *)(*v23[9] + 20), *(_DWORD *)(*v23[9] + 24), v2, 1342177280, 20, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 360), (int)v24); sub_459B60(*(_DWORD **)(v2 + 360), 1); v25 = sub_8FB140(v144, (int)"TextField04", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v25, v2, 0, 0); v26 = sub_45A900(v145, v146, *(_DWORD *)(*v25[9] + 20), *(_DWORD *)(*v25[9] + 24), v2, 1342185472, 2, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 364), (int)v26); sub_459B60(*(_DWORD **)(v2 + 364), 1); v27 = sub_8FB140(v144, (int)"TextField03", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145 - 1, v146 - 2, (int)v27, v2, 0, 0); v28 = sub_45A900(v145, v146, *(_DWORD *)(*v27[9] + 20), *(_DWORD *)(*v27[9] + 24), v2, 1342177312, 8, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 368), (int)v28); sub_459B60(*(_DWORD **)(v2 + 368), 1); v29 = sub_8FB140(v144, (int)"TextField06", (int)&v145, (int)&v146, 0); sub_8F3EB0(v145, v146, (int)v29, v2, 0, 0); v30 = sub_45A900(v145, v146, *(_DWORD *)(*v29[9] + 20), *(_DWORD *)(*v29[9] + 24), v2, 1342181380, 100, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 372), (int)v30); sub_459B60(*(_DWORD **)(v2 + 372), 1); v31 = sub_8FB140(v144, (int)"Text01", (int)&v145, (int)&v146, 0)[9]; v32 = *(_DWORD *)(*v31 + 24); v33 = *(_DWORD *)(*v31 + 20); v34 = sub_421050(7); v35 = sub_8F4A20(v145, v146, v33, v32, v34, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); v36 = *v35; v37 = sub_40A910(572028541); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v36 + 472))(v35, v37); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v38 = *sub_8FB140(v144, (int)"Text02", (int)&v145, (int)&v146, 0)[9]; v39 = *(_DWORD *)(v38 + 24); v40 = *(_DWORD *)(v38 + 20); v41 = sub_421050(7); v42 = sub_8F4A20(v145, v146, v40, v39, v41, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); v43 = *v42; v44 = sub_40A910(-1649477919); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v43 + 472))(v42, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v45 = sub_8FB140(v144, (int)"Text03", (int)&v145, (int)&v146, 0)[9]; v46 = *(_DWORD *)(*v45 + 24); v47 = *(_DWORD *)(*v45 + 20); v48 = sub_421050(7); v49 = sub_8F4A20(v145, v146, v47, v46, v48, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 5); v50 = *v49; v51 = sub_40C190(-1476989212); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v50 + 472))(v49, v51); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v52 = *sub_8FB140(v144, (int)"Text04", (int)&v145, (int)&v146, 0)[9]; v53 = *(_DWORD *)(v52 + 24); v54 = *(_DWORD *)(v52 + 20); v55 = sub_421050(7); v56 = sub_8F4A20(v145, v146, v54, v53, v55, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v56 + 488))(v56, 5); v57 = *v56; v58 = sub_40A910(2126560226); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v57 + 472))(v56, v58); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v56 + 240))(v56, 0); v59 = sub_8FB140(v144, (int)"Text05", (int)&v145, (int)&v146, 0)[9]; v60 = *(_DWORD *)(*v59 + 24); v61 = *(_DWORD *)(*v59 + 20); v62 = sub_421050(7); v63 = sub_8F4A20(v145, v146, v61, v60, v62, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 5); v64 = *v63; v65 = sub_40A910(-363447505); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v64 + 472))(v63, v65); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v63 + 240))(v63, 0); v66 = *sub_8FB140(v144, (int)"Text02_1", (int)&v145, (int)&v146, 0)[9]; v67 = *(_DWORD *)(v66 + 24); v68 = *(_DWORD *)(v66 + 20); v69 = sub_421050(7); v70 = sub_8F4A20(v145, v146, v68, v67, v69, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v70 + 488))(v70, 5); v71 = *v70; v72 = sub_40A910(1918865787); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v71 + 472))(v70, v72); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v70 + 240))(v70, 0); v73 = sub_8FB140(v144, (int)"Text05_1", (int)&v145, (int)&v146, 0)[9]; v74 = *(_DWORD *)(*v73 + 24); v75 = *(_DWORD *)(*v73 + 20); v76 = sub_421050(7); v77 = sub_8F4A20(v145, v146, v75, v74, v76, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v77 + 488))(v77, 5); v78 = *v77; v79 = sub_40A910(1918865787); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v78 + 472))(v77, v79); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v77 + 240))(v77, 0); v80 = *sub_8FB140(v144, (int)"Text06", (int)&v145, (int)&v146, 0)[9]; v81 = *(_DWORD *)(v80 + 24); v82 = *(_DWORD *)(v80 + 20); v83 = sub_421050(7); v84 = sub_8F4A20(v145, v146, v82, v81, v83, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v84 + 488))(v84, 5); v85 = *v84; v86 = sub_40C190(-1751598159); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v85 + 472))(v84, v86); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v84 + 240))(v84, 0); v87 = sub_8FB140(v144, (int)"OKBtnNor", (int)&v145, (int)&v146, 0); sub_8FB650(v87, v144, (int)"OKBTNClick"); sub_8FB650(v87, v144, (int)"OKBtnOver"); *(_DWORD *)(v2 + 344) = sub_8FE0F0(v145, v146, (int)v87, v2, 7, 0, 0); v88 = v87[9]; v89 = *(_DWORD *)(*v88 + 24); v90 = *(_DWORD *)(*v88 + 20); v91 = sub_421050(7); v92 = sub_8F4A20(v145, v146, v90, v89, v91, v2, 0, 0); *(_DWORD *)(v2 + 348) = v92; (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 5); v93 = **(_DWORD **)(v2 + 348); v94 = sub_40C190(1331644831); (*(void (__thiscall **)(_DWORD, const CHAR *))(v93 + 472))(*(_DWORD *)(v2 + 348), v94); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); v95 = sub_8FB140(v144, (int)"Text02Nor", (int)&v145, (int)&v146, 0); sub_8FB650(v95, v144, (int)"Text02Click"); v96 = sub_465940(v145, v146, (int)v95, v2, 8, 0); v97 = v144; *(_DWORD *)(v2 + 352) = v96; v98 = sub_8FB140(v97, (int)"Text05Nor", (int)&v145, (int)&v146, 0); sub_8FB650(v98, v144, (int)"Text05Click"); *(_DWORD *)(v2 + 356) = sub_465940(v145, v146, (int)v98, v2, 9, 0); v99 = 0; do { v100 = *(_DWORD *)(v2 + 4 * v99 + 352); v101 = *(_BYTE *)(v100 + 380); *(_BYTE *)(v100 + 380) = v101; LOBYTE(v143) = v101; (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v99 + 352) + 240))(1); if ( !v99 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 240))(1); (*(void (__stdcall **)(char *))(**(_DWORD **)(v2 + 368) + 256))(v143); } ++v99; } while ( v99 < 2 ); v102 = v2 + 360; v103 = 4; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v102 + 240))(1); (*(void (__stdcall **)(void *))(**(_DWORD **)v102 + 460))(&unk_9FC2F9); v102 += 4; --v103; } while ( v103 ); v149 = 15; v148 = 0; LOBYTE(v147) = 0; LOBYTE(v172) = 1; strcpy(v168, "0"); v169 = 0; v170 = 0; v171 = 0; v104 = (CHAR *)sub_40A910(-1683425310); v152 = 15; v151 = 0; v150 = 0; sub_4018E0(&v150, v104, strlen(v104)); LOBYTE(v172) = 2; v105 = (CHAR *)sub_40A910(1279871523); v155 = 15; v154 = 0; v153 = 0; sub_4018E0(&v153, v105, strlen(v105)); LOBYTE(v172) = 3; v106 = (CHAR *)sub_40A910(-420723676); v158 = 15; v157 = 0; v156 = 0; sub_4018E0(&v156, v106, strlen(v106)); LOBYTE(v172) = 4; v107 = (CHAR *)sub_40A910(-671989437); v161 = 15; v160 = 0; v159 = 0; sub_4018E0(&v159, v107, strlen(v107)); LOBYTE(v172) = 5; v108 = (CHAR *)sub_40A910(-555208947); v164 = 15; v163 = 0; v162 = 0; sub_4018E0(&v162, v108, strlen(v108)); LOBYTE(v172) = 6; v109 = (CHAR *)sub_40A910(-95796673); v167 = 15; v166 = 0; v165 = 0; sub_4018E0(&v165, v109, strlen(v109)); LOBYTE(v172) = 7; v142 = 0; v143 = &v150; do { v137 = v142 + 1; _itoa(v142 + 1, v168, 10); sub_4018E0(&v147, "BtnNor0", 7u); sub_401D10((int)&v147, v168, strlen(v168)); v110 = v147; if ( v149 < 0x10 ) v110 = &v147; v111 = sub_8FB140(v144, (int)v110, (int)&v145, (int)&v146, 0); sub_4018E0(&v147, "BtnOver0", 8u); sub_401D10((int)&v147, v168, strlen(v168)); v112 = v147; if ( v149 < 0x10 ) v112 = &v147; sub_8FB650(v111, v144, (int)v112); v141 = sub_465940(v145, v146, (int)v111, v2, v142, 0); v113 = *(_DWORD *)(v2 + 380); if ( (unsigned int)&v141 >= v113 || (v114 = *(_DWORD *)(v2 + 376), v114 > (unsigned int)&v141) ) { v123 = *(_DWORD *)(v2 + 384); if ( v113 == v123 ) { v124 = *(_DWORD *)(v2 + 376); v125 = (signed int)(v113 - v124) >> 2; JUMPOUT(v125, 1073741822, std::vector>::_Xlen); v126 = v125 + 1; v127 = (v123 - v124) >> 2; if ( v126 > v127 ) { if ( 0x3FFFFFFF - (v127 >> 1) >= v127 ) v128 = (char *)((v127 >> 1) + v127); else v128 = 0; if ( (unsigned int)v128 < v126 ) v128 = (char *)v126; sub_74E360((const void **)(v2 + 376), v128); } } v129 = *(volatile LONG ***)(v2 + 380); if ( v129 ) *v129 = v141; } else { v115 = *(_DWORD *)(v2 + 384); v116 = (signed int)((signed int)&v141 - v114) >> 2; v139 = (signed int)((signed int)&v141 - v114) >> 2; if ( v113 == v115 ) { v117 = (signed int)(v113 - v114) >> 2; JUMPOUT(v117, 1073741822, std::vector>::_Xlen); v118 = v117 + 1; v119 = (signed int)(v115 - v114) >> 2; if ( v118 > v119 ) { if ( 0x3FFFFFFF - (v119 >> 1) >= v119 ) v120 = (char *)((v119 >> 1) + v119); else v120 = 0; if ( (unsigned int)v120 < v118 ) v120 = (char *)v118; sub_74E360((const void **)(v2 + 376), v120); v116 = v139; } } v121 = (_DWORD *)(*(_DWORD *)(v2 + 376) + 4 * v116); v122 = *(_DWORD **)(v2 + 380); if ( v122 ) *v122 = *v121; } v130 = (int)v143; *(_DWORD *)(v2 + 380) += 4; if ( *(_DWORD *)(v130 + 20) >= 0x10u ) v130 = *(_DWORD *)v130; v131 = v142; sub_8F2EA0(*(void ***)(*(_DWORD *)(v2 + 376) + 4 * v142), (const char *)v130); v132 = *(_DWORD *)(*(_DWORD *)(v2 + 376) + 4 * v131); v143 += 28; *(_DWORD *)(v132 + 272) = dword_AD01E8; v142 = v137; } while ( v137 < 6 ); v133 = sub_8FB140(v144, (int)"ClsNor", (int)&v145, (int)&v146, 0); sub_8FB650(v133, v144, (int)"ClsClick"); sub_8FB650(v133, v144, (int)"ClsOver"); sub_8FE0F0(v145, v146, (int)v133, v2, 10, 0, 0); v134 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v144 + 72))("HelpLinkNor") ) { v135 = sub_8FB140(v144, (int)"HelpLinkNor", (int)&v145, (int)&v146, v134); sub_8FB650(v135, v144, (int)"HelpLinkClick"); sub_8FB650(v135, v144, (int)"HelpLinkOver"); sub_8FE0F0(v145, v146, (int)v135, v2, 11, 0, 0); } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 520))(v2, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 1.0, 0.43000001); LOBYTE(v172) = 1; `eh vector destructor iterator'(&v150, 0x1Cu, 6, sub_636A10); if ( v149 >= 0x10 ) operator delete(v147); v136 = (void (__thiscall ***)(_DWORD, signed int))v144; v149 = 15; v148 = 0; LOBYTE(v147) = 0; v172 = -1; if ( v144 && !InterlockedDecrement((volatile LONG *)(v144 + 4)) && v136 ) (**v136)(v136, 1); return 1; } // 6F2A3B: using guessed type void __noreturn std::vector>::_Xlen(); // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (006F2A50) -------------------------------------------------------- int __thiscall sub_6F2A50(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax int v6; // edx v4 = this; *(_BYTE *)(this[a2 + 88] + 380) = a4; result = (*(int (__stdcall **)(int))(*(_DWORD *)this[a2 + 88] + 240))(a3); if ( !a2 ) { v6 = *(_DWORD *)v4[92]; if ( (_BYTE)a3 ) { (*(void (__stdcall **)(int))(v6 + 240))(a3); result = (*(int (__stdcall **)(int))(*(_DWORD *)v4[92] + 256))(a4); } else { result = (*(int (__stdcall **)(signed int))(v6 + 488))(1); } } return result; } //----- (006F2AD0) -------------------------------------------------------- void *__thiscall sub_6F2AD0(void *this, char a2) { void *v2; // esi v2 = this; sub_6F1680(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006F2B00) -------------------------------------------------------- int (__thiscall ***sub_6F2B00())(void *, char) { return &off_AB7EDC; } // AB7EDC: using guessed type int (__thiscall **off_AB7EDC)(void *, char); //----- (006F2B10) -------------------------------------------------------- void sub_6F2B10() { int v0; // eax int v1; // ecx void *v2; // esi while ( dword_AB7EE8 ) { v0 = dword_AB7EE0; v1 = *(_DWORD *)dword_AB7EE0; dword_AB7EE0 = v1; if ( v1 ) *(_DWORD *)(v1 + 4) = 0; else dword_AB7EE4 = 0; v2 = *(void **)(v0 + 8); off_AB7EDC[2](&off_AB7EDC, v0); --dword_AB7EE8; operator delete(v2); } } // AB7EDC: using guessed type int (__thiscall **off_AB7EDC)(void *, char); // AB7EE0: using guessed type int dword_AB7EE0; // AB7EE4: using guessed type int dword_AB7EE4; // AB7EE8: using guessed type int dword_AB7EE8; //----- (006F2BF0) -------------------------------------------------------- _DWORD *__cdecl sub_6F2BF0(int a1) { _DWORD *v1; // eax _DWORD *v2; // esi _DWORD *result; // eax v1 = operator new(0xEu); v2 = v1; *v1 = *(_DWORD *)a1; v1[1] = *(_DWORD *)(a1 + 4); v1[2] = *(_DWORD *)(a1 + 8); *((_WORD *)v1 + 6) = *(_WORD *)(a1 + 12); result = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AB7EDC[1])(&off_AB7EDC); result[2] = v2; *result = 0; result[1] = dword_AB7EE4; if ( dword_AB7EE4 ) { *(_DWORD *)dword_AB7EE4 = result; ++dword_AB7EE8; } else { ++dword_AB7EE8; dword_AB7EE0 = (int)result; } dword_AB7EE4 = (int)result; return result; } // AB7EDC: using guessed type int (__thiscall **off_AB7EDC)(void *, char); // AB7EE0: using guessed type int dword_AB7EE0; // AB7EE4: using guessed type int dword_AB7EE4; // AB7EE8: using guessed type int dword_AB7EE8; //----- (006F2C70) -------------------------------------------------------- void __cdecl sub_6F2C70(int a1) { int *v1; // ecx _DWORD *v2; // edi _DWORD *v3; // edx void **v4; // esi int *v5; // eax int v6; // ecx void *v7; // esi _DWORD *v8; // ecx _DWORD *v9; // ecx int v10; // edx v1 = (int *)dword_AB7EE0; v2 = (_DWORD *)dword_AB7EE0; if ( dword_AB7EE0 ) { do { v3 = (_DWORD *)v2[2]; v4 = (void **)(v2 + 2); v5 = v2; v2 = (_DWORD *)*v2; if ( *v3 == a1 ) { if ( v5 == v1 ) { v5 = v1; v6 = *v1; dword_AB7EE0 = v6; if ( v6 ) *(_DWORD *)(v6 + 4) = 0; else dword_AB7EE4 = 0; v7 = (void *)v5[2]; } else if ( v5 == (int *)dword_AB7EE4 ) { v5 = (int *)dword_AB7EE4; v8 = *(_DWORD **)(dword_AB7EE4 + 4); dword_AB7EE4 = (int)v8; if ( v8 ) *v8 = 0; else dword_AB7EE0 = 0; v7 = (void *)v5[2]; } else { v9 = (_DWORD *)v5[1]; v10 = *v5; if ( v9 ) *v9 = v10; if ( v10 ) *(_DWORD *)(v10 + 4) = v9; v7 = *v4; } off_AB7EDC[2](&off_AB7EDC, (char)v5); --dword_AB7EE8; operator delete(v7); v1 = (int *)dword_AB7EE0; } } while ( v2 ); } } // AB7EDC: using guessed type int (__thiscall **off_AB7EDC)(void *, char); // AB7EE0: using guessed type int dword_AB7EE0; // AB7EE4: using guessed type int dword_AB7EE4; // AB7EE8: using guessed type int dword_AB7EE8; //----- (006F2D60) -------------------------------------------------------- int sub_6F2D60() { int v0; // ebx int *v1; // edi _DWORD *v2; // esi v0 = 0; v1 = dword_ADA5AC; do { v2 = (_DWORD *)*v1; if ( *v1 && *(_DWORD *)(v2[28] + 118) == 4 && (*(int (__thiscall **)(_DWORD *))(*v2 + 44))((_DWORD *)*v1) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v2 + 44))(v2) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v2 + 44))(v2) != -1 ) { ++v0; } ++v1; } while ( (signed int)v1 < (signed int)dword_ADA8AC ); return v0; } //----- (006F2DC0) -------------------------------------------------------- int sub_6F2DC0() { int v0; // ebx int *v1; // edi _DWORD *v2; // esi v0 = 0; v1 = dword_ADA8AC; do { v2 = (_DWORD *)*v1; if ( *v1 && *(_DWORD *)(v2[28] + 118) == 4 && (*(int (__thiscall **)(_DWORD *))(*v2 + 44))((_DWORD *)*v1) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v2 + 44))(v2) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v2 + 44))(v2) != -1 ) { ++v0; } ++v1; } while ( (signed int)v1 < (signed int)dword_ADA8D8 ); return v0; } //----- (006F2E20) -------------------------------------------------------- int __cdecl sub_6F2E20(int a1) { int v1; // ebx int v2; // edi _DWORD *v3; // esi v1 = a1; v2 = 0; while ( 1 ) { v3 = (_DWORD *)dword_ADA5AC[v2]; if ( !v3 || *(_DWORD *)(v3[28] + 118) != 4 || !(*(int (__thiscall **)(int))(*v3 + 44))(dword_ADA5AC[v2]) || !*(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) || *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) == -1 ) { goto LABEL_9; } if ( !v1 ) return dword_ADA5AC[v2]; --v1; LABEL_9: if ( ++v2 >= 192 ) return 0; } } //----- (006F2E90) -------------------------------------------------------- int __cdecl sub_6F2E90(int a1) { int v1; // ebx int v2; // edi _DWORD *v3; // esi v1 = a1; v2 = 0; while ( 1 ) { v3 = (_DWORD *)dword_ADA8AC[v2]; if ( !v3 || *(_DWORD *)(v3[28] + 118) != 4 || !(*(int (__thiscall **)(int))(*v3 + 44))(dword_ADA8AC[v2]) || !*(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) || *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) == -1 ) { goto LABEL_9; } if ( !v1 ) return dword_ADA8AC[v2]; --v1; LABEL_9: if ( ++v2 >= 11 ) return 0; } } //----- (006F2F00) -------------------------------------------------------- int sub_6F2F00() { signed int v0; // edi int v1; // ebx bool v2; // cf _DWORD *v3; // esi v0 = 0; v1 = 0; v2 = 1; do { if ( v2 ) { v3 = (_DWORD *)dword_ADA234[v0]; if ( v3 ) { if ( *(_DWORD *)(v3[28] + 118) == 4 && (*(int (__thiscall **)(int))(*v3 + 44))(dword_ADA234[v0]) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) != -1 ) { ++v1; } } } v2 = (unsigned int)++v0 < 0xC0; } while ( v0 < 192 ); return v1; } //----- (006F2F60) -------------------------------------------------------- int sub_6F2F60() { signed int v0; // edi int v1; // ebx bool v2; // cf _DWORD *v3; // esi v0 = 0; v1 = 0; v2 = 1; do { if ( v2 ) { v3 = (_DWORD *)dword_ADA534[v0]; if ( v3 ) { if ( *(_DWORD *)(v3[28] + 118) == 4 && (*(int (__thiscall **)(int))(*v3 + 44))(dword_ADA534[v0]) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) && *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v3 + 44))(v3) != -1 ) { ++v1; } } } v2 = (unsigned int)++v0 < 0x1E; } while ( v0 < 30 ); return v1; } // ADA534: using guessed type int dword_ADA534[]; //----- (006F2FC0) -------------------------------------------------------- int sub_6F2FC0() { int v0; // esi v0 = sub_6F2F00(); return v0 + sub_6F2F60(); } //----- (006F2FE0) -------------------------------------------------------- int __cdecl sub_6F2FE0(int a1) { int v1; // ebx signed int v2; // edi bool v3; // cf _DWORD *v4; // esi v1 = a1; v2 = 0; v3 = 1; while ( 1 ) { if ( !v3 ) goto LABEL_10; v4 = (_DWORD *)dword_ADA234[v2]; if ( !v4 || *(_DWORD *)(v4[28] + 118) != 4 || !(*(int (__thiscall **)(int))(*v4 + 44))(dword_ADA234[v2]) || !*(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v4 + 44))(v4) || *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v4 + 44))(v4) == -1 ) { goto LABEL_10; } if ( !v1 ) return dword_ADA234[v2]; --v1; LABEL_10: v3 = (unsigned int)++v2 < 0xC0; if ( v2 >= 192 ) return 0; } } //----- (006F3060) -------------------------------------------------------- int __cdecl sub_6F3060(int a1) { int v1; // ebx signed int v2; // edi bool v3; // cf _DWORD *v4; // esi v1 = a1; v2 = 0; v3 = 1; while ( 1 ) { if ( !v3 ) goto LABEL_10; v4 = (_DWORD *)dword_ADA534[v2]; if ( !v4 || *(_DWORD *)(v4[28] + 118) != 4 || !(*(int (__thiscall **)(int))(*v4 + 44))(dword_ADA534[v2]) || !*(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v4 + 44))(v4) || *(_BYTE *)(*(int (__thiscall **)(_DWORD *))(*v4 + 44))(v4) == -1 ) { goto LABEL_10; } if ( !v1 ) return dword_ADA534[v2]; --v1; LABEL_10: v3 = (unsigned int)++v2 < 0x1E; if ( v2 >= 30 ) return 0; } } // ADA534: using guessed type int dword_ADA534[]; //----- (006F30D0) -------------------------------------------------------- int __cdecl sub_6F30D0(unsigned int a1) { unsigned int v1; // eax int result; // eax v1 = sub_6F2F60(); if ( a1 >= v1 ) result = sub_6F2FE0(a1 - v1); else result = sub_6F3060(a1); return result; } //----- (006F3100) -------------------------------------------------------- char __cdecl sub_6F3100(int a1) { _DWORD *v1; // edi int v2; // eax __int16 v3; // bx unsigned int v4; // esi int v5; // eax v1 = (_DWORD *)dword_AB7EE0; if ( !dword_AB7EE0 ) return 0; while ( 1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; v3 = *(_WORD *)(v2 + 4); v4 = 0; if ( sub_419A40() ) { while ( 1 ) { v5 = sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v4); if ( v5 ) { if ( *(_WORD *)v5 == v3 ) break; } if ( ++v4 >= sub_419A40() ) goto LABEL_8; } if ( *(_DWORD *)(v5 + 36) == a1 ) return 1; } LABEL_8: if ( !v1 ) return 0; } } // AB7EE0: using guessed type int dword_AB7EE0; // AC9CE0: using guessed type int dword_AC9CE0; //----- (006F3170) -------------------------------------------------------- char __cdecl sub_6F3170(int a1, _DWORD *a2) { _DWORD *v2; // edi char result; // al __int16 v4; // bx unsigned int v5; // esi int v6; // eax char v7; // [esp+7h] [ebp-1h] *a2 = 0; v2 = (_DWORD *)dword_AB7EE0; result = 0; v7 = 0; if ( dword_AB7EE0 ) { do { v4 = *(_WORD *)(v2[2] + 4); v2 = (_DWORD *)*v2; v5 = 0; if ( sub_419A40() ) { while ( 1 ) { v6 = sub_7474E0((_DWORD *)(dword_AC9CE0 + 4), v5); if ( v6 ) { if ( *(_WORD *)v6 == v4 ) break; } if ( ++v5 >= sub_419A40() ) goto LABEL_9; } if ( *(_DWORD *)(v6 + 36) == a1 ) { *a2 += *(unsigned __int16 *)(v6 + 40); v7 = 1; } } LABEL_9: ; } while ( v2 ); result = v7; } return result; } // AB7EE0: using guessed type int dword_AB7EE0; // AC9CE0: using guessed type int dword_AC9CE0; //----- (006F3220) -------------------------------------------------------- int __cdecl sub_6F3220(unsigned int a1) { unsigned int v1; // eax int result; // eax v1 = sub_6F2DC0(); if ( a1 >= v1 ) result = sub_6F2E20(a1 - v1); else result = sub_6F2E90(a1); return result; } //----- (006F3250) -------------------------------------------------------- int sub_6F3250() { int v0; // edi int v1; // edi int v2; // edi v0 = sub_6F2F00(); v1 = sub_6F2F60() + v0; v2 = sub_6F2D60() + v1; return v2 + sub_6F2DC0(); } //----- (006F3300) -------------------------------------------------------- void *__thiscall sub_6F3300(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9FC708: using guessed type void *NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; //----- (006F3330) -------------------------------------------------------- _DWORD *sub_6F3330() { _DWORD *result; // eax result = operator new(0xCu); result[2] = 0; return result; } //----- (006F3350) -------------------------------------------------------- _DWORD *__thiscall sub_6F3350(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiTPointerListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 1); while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // 9FC708: using guessed type void *NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; // 9FC718: using guessed type void *NiTPointerListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; //----- (006F3420) -------------------------------------------------------- char __thiscall sub_6F3420(void *this) { void *v1; // esi char v2; // bl v1 = this; v2 = sub_905E50((int)this); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v1 + 32))(v1, 0); return v2; } //----- (006F3440) -------------------------------------------------------- char __thiscall sub_6F3440(int this, char a2, char a3, char a4, char a5, u_short a6) { return sub_905ED0(this, a2, a3, a4, a5, a6); } //----- (006F3450) -------------------------------------------------------- float *__thiscall sub_6F3450(float *this, float a2) { return sub_906280(this, a2); } //----- (006F3470) -------------------------------------------------------- char __thiscall sub_6F3470(_BYTE *this, char a2) { char result; // al result = a2; this[65608] = a2; return result; } //----- (006F3480) -------------------------------------------------------- char __thiscall sub_6F3480(void *this) { void *v2; // [esp+0h] [ebp-4h] v2 = this; LOWORD(v2) = 2061; return sub_906000((int)this, &v2, 2u); } //----- (006F34A0) -------------------------------------------------------- bool __stdcall sub_6F34A0(int a1, const void *a2) { int v2; // eax int v4; // ecx char v5; // [esp+8h] [ebp-2D4h] qmemcpy(&v5, a2, 0x2D0u); v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD50); if ( !v2 ) return 0; v4 = *(_DWORD *)(v2 + 40); sub_458140(0, (int)&v5, 0); return a1 != 0; } // ACDD50: using guessed type int dword_ACDD50; //----- (006F3520) -------------------------------------------------------- __int16 __thiscall sub_6F3520(float *this, unsigned __int16 a2) { float *v2; // esi float v3; // eax __int16 result; // ax __int16 *v5; // ecx v2 = this; v3 = *this; this[16401] = flt_ACCFCC; result = (*(int (__stdcall **)(signed int))(LODWORD(v3) + 32))(1); v5 = (__int16 *)*((_DWORD *)v2 + 16398); if ( v5 ) result = sub_912750(v5, a2); return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006F3550) -------------------------------------------------------- bool __thiscall sub_6F3550(float *this) { return flt_ACCFCC - this[16401] >= 10.0; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006F35E0) -------------------------------------------------------- char __thiscall sub_6F35E0(_BYTE *this, int a2, int a3) { int v3; // esi __int16 v5; // [esp+4h] [ebp-4h] v3 = (int)this; if ( this[65608] ) { v5 = 2053; sub_906000((int)this, &v5, 2u); *(float *)(v3 + 65604) = flt_ACCFCC; sub_9060A0(v3); sub_9060A0(v3); } return 1; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006F3640) -------------------------------------------------------- void __thiscall sub_6F3640(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // esi __int16 v4; // [esp+4h] [ebp-4h] v1 = this; v2 = this[8]; if ( v2 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2 + 40))() ) { v3 = v1[8]; if ( *(_BYTE *)(v3 + 65608) ) { v4 = 2053; sub_906000(v3, &v4, 2u); *(float *)(v3 + 65604) = flt_ACCFCC; sub_9060A0(v3); } } } // ACCFCC: using guessed type float flt_ACCFCC; //----- (006F36A0) -------------------------------------------------------- char __thiscall sub_6F36A0(_DWORD *this, int a2, int a3, void *a4, size_t a5) { _DWORD *v5; // esi int v6; // ecx char result; // al v5 = this; v6 = this[8]; if ( v6 ) { LOWORD(a3) = ((_WORD)a2 << 10) | a3 & 0x3FF; sub_905F90(v6, &a3, 2u); result = sub_906000(v5[8], a4, a5); } return result; } //----- (006F36F0) -------------------------------------------------------- char __thiscall sub_6F36F0(_BYTE *this, int a2, int a3, int a4, const void *a5) { char result; // al result = 0; if ( a2 == 2 ) { switch ( a3 ) { case 4: result = sub_6F35E0(this, a4, (int)a5); break; case 14: sub_6A1740((int)&byte_B68508, (int)a5, flt_ACCFCC); result = 1; break; case 25: result = 1; break; } } else if ( a2 == 4 && a3 == 325 ) { result = sub_6F34A0(a4, a5); } return result; } // ACCFCC: using guessed type float flt_ACCFCC; // B68508: using guessed type char byte_B68508; //----- (006F3770) -------------------------------------------------------- void __thiscall sub_6F3770(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NetMgr::`vftable'; v2 = this[8]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[7]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); `eh vector destructor iterator'(v1 + 2, 4u, 5, sub_410C00); } // 9FC788: using guessed type void *NetMgr::`vftable'; //----- (006F3820) -------------------------------------------------------- char __thiscall sub_6F3820(char *this) { char *v1; // ebx float *v2; // eax float *v3; // esi float *v4; // edi int v5; // esi float *v6; // eax float *v7; // esi float *v8; // edi int v9; // esi int **v10; // ebx int *v11; // eax int *v12; // esi int *v13; // edi int *v14; // edi int v15; // esi char *v16; // eax char *v18; // [esp+14h] [ebp-10h] v1 = this; v2 = (float *)operator new(0x1006Cu); v3 = v2; v4 = 0; if ( v2 ) { sub_905BE0(v2); v3[16401] = -1.0; *(_DWORD *)v3 = &Net::`vftable'; *((_BYTE *)v3 + 65608) = 0; v4 = v3; } v5 = *((_DWORD *)v1 + 7); if ( (float *)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *((_DWORD *)v1 + 7) = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)v4 + 1); } (*(void (__stdcall **)(const char *))(**((_DWORD **)v1 + 7) + 36))("LogIn"); v6 = (float *)operator new(0x1006Cu); v7 = v6; if ( v6 ) { sub_905BE0(v6); v7[16401] = -1.0; *(_DWORD *)v7 = &Net::`vftable'; *((_BYTE *)v7 + 65608) = 0; v8 = v7; } else { v8 = 0; } v9 = *((_DWORD *)v1 + 8); if ( (float *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v1 + 8) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)v8 + 1); } (*(void (__stdcall **)(const char *))(**((_DWORD **)v1 + 8) + 36))("WorldMgr"); v18 = 0; v10 = (int **)(v1 + 8); do { v11 = (int *)operator new(0x1006Cu); v12 = v11; if ( v11 ) { sub_905BE0(v11); *((float *)v12 + 16401) = -1.0; *v12 = (int)&Net::`vftable'; *((_BYTE *)v12 + 65608) = 0; } else { v12 = 0; } v13 = *v10; if ( *v10 != v12 ) { if ( v13 && !InterlockedDecrement(v13 + 1) && v13 ) (*(void (__thiscall **)(int *, signed int))*v13)(v13, 1); *v10 = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } v14 = *v10; v15 = **v10; v16 = sub_7549E0("Zone%d", v18); (*(void (__thiscall **)(int *, char *))(v15 + 36))(v14, v16); ++v10; ++v18; } while ( (signed int)v18 < 5 ); return 1; } // 9FC758: using guessed type void *Net::`vftable'; //----- (006F3A40) -------------------------------------------------------- void __thiscall sub_6F3A40(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int *v4; // edi signed int v5; // ebx int v6; // esi v1 = this; v2 = this[7]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[7] = 0; } v3 = v1[8]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[8] = 0; } v4 = v1 + 2; v5 = 5; do { v6 = *v4; if ( *v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } *v4 = 0; } ++v4; --v5; } while ( v5 ); } //----- (006F3AE0) -------------------------------------------------------- int __thiscall sub_6F3AE0(_DWORD *this, float a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int result; // eax int v6; // ecx v2 = this; v3 = this[7]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 20))(LODWORD(a2)); v4 = v2[8]; if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 20))(LODWORD(a2)); result = v2[1]; v6 = v2[result + 2]; if ( v6 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 20))(LODWORD(a2)); return result; } //----- (006F3B30) -------------------------------------------------------- int __thiscall sub_6F3B30(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx int result; // eax int v5; // ecx v1 = this; v2 = this[7]; if ( v2 ) sub_905F40(v2); v3 = v1[8]; if ( v3 ) sub_905F40(v3); result = v1[1]; v5 = v1[result + 2]; if ( v5 ) result = sub_905F40(v5); return result; } //----- (006F3B60) -------------------------------------------------------- int __thiscall sub_6F3B60(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx DWORD v4; // ebx int v5; // ecx int result; // eax int v7; // esi __int16 v8; // [esp+4h] [ebp-8h] char v9; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[8]; v8 = 3096; v9 = 1; if ( v2 ) { sub_905F90(v2, &v8, 2u); sub_906000(v1[8], &v9, 1u); sub_9060A0(v1[8]); } v3 = v1[v1[1] + 2]; if ( v3 ) { sub_905F90(v3, &v8, 2u); sub_906000(v1[v1[1] + 2], &v9, 1u); sub_9060A0(v1[v1[1] + 2]); } Sleep(1u); v4 = timeGetTime(); while ( timeGetTime() - v4 < 0x3E8 ) ; v5 = v1[7]; if ( v5 ) sub_905F40(v5); result = v1[1]; v7 = v1[result + 2]; if ( v7 ) result = sub_905F40(v7); return result; } //----- (006F3C20) -------------------------------------------------------- int __thiscall sub_6F3C20(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx int v4; // ecx DWORD v5; // ebx int v6; // ecx int v7; // ecx int result; // eax int v9; // esi __int16 v10; // [esp+4h] [ebp-8h] char v11; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[7]; v10 = 3096; v11 = 0; if ( v2 ) { sub_905F90(v2, &v10, 2u); sub_906000(v1[7], &v11, 1u); sub_9060A0(v1[7]); } v3 = v1[8]; if ( v3 ) { sub_905F90(v3, &v10, 2u); sub_906000(v1[8], &v11, 1u); sub_9060A0(v1[8]); } v4 = v1[v1[1] + 2]; if ( v4 ) { sub_905F90(v4, &v10, 2u); sub_906000(v1[v1[1] + 2], &v11, 1u); sub_9060A0(v1[v1[1] + 2]); } Sleep(1u); v5 = timeGetTime(); while ( timeGetTime() - v5 < 0x3E8 ) ; v6 = v1[7]; if ( v6 ) sub_905F40(v6); v7 = v1[8]; if ( v7 ) sub_905F40(v7); result = v1[1]; v9 = v1[result + 2]; if ( v9 ) result = sub_905F40(v9); return result; } //----- (006F3D10) -------------------------------------------------------- char __thiscall sub_6F3D10(_DWORD *this, int a2, int a3, void *a4, size_t a5) { _DWORD *v5; // esi int v6; // eax bool v7; // zf int *v8; // eax v5 = this; v6 = this[1]; v7 = this[v6 + 2] == 0; v8 = &this[v6 + 2]; if ( !v7 ) { LOWORD(a3) = ((_WORD)a2 << 10) | a3 & 0x3FF; sub_905F90(*v8, &a3, 2u); LOBYTE(v8) = sub_906000(v5[v5[1] + 2], a4, a5); } return (char)v8; } //----- (006F3D60) -------------------------------------------------------- int __thiscall sub_6F3D60(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi v3 = this; ++v3[1]; if ( this[1] >= 5 ) this[1] = 0; sub_905DE0((char *)this[this[1] + 2], a2); sub_905E10((_DWORD *)v3[v3[1] + 2], a3); return v3[v3[1] + 2]; } //----- (006F3DE0) -------------------------------------------------------- __int16 __thiscall sub_6F3DE0(_DWORD *this, unsigned __int16 a2) { __int16 *v2; // ecx __int16 result; // ax v2 = (__int16 *)this[16398]; if ( v2 ) result = sub_912750(v2, a2); return result; } //----- (006F3E00) -------------------------------------------------------- char *__thiscall sub_6F3E00(char *this, char *a2) { char *result; // eax int v3; // edx char v4; // cl result = a2; if ( a2 ) { v3 = this + 65609 - a2; do { v4 = *result; result[v3] = *result; ++result; } while ( v4 ); } return result; } //----- (006F3E20) -------------------------------------------------------- void *__thiscall sub_6F3E20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &Net::`vftable'; sub_905D30(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FC758: using guessed type void *Net::`vftable'; //----- (006F3E50) -------------------------------------------------------- void *__thiscall sub_6F3E50(void *this, char a2) { void *v2; // esi v2 = this; sub_6F3770(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006F3EB0) -------------------------------------------------------- void *__thiscall sub_6F3EB0(void *this) { return this; } //----- (006F3EF0) -------------------------------------------------------- bool __thiscall sub_6F3EF0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax v2 = (_DWORD *)this[4621]; if ( v2 ) return sub_6F5F60(v2, (int)a2) && sub_6F8320(a2); sub_6F7F20((int)this, (int)"ColumnName without table"); return 0; } //----- (006F3F80) -------------------------------------------------------- char __thiscall sub_6F3F80(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // esi const char *v5; // eax _DWORD *v6; // eax int v7; // eax __int16 v9; // [esp-4h] [ebp-38h] const char *v10; // [esp-4h] [ebp-38h] int v11; // [esp+10h] [ebp-24h] char v12; // [esp+18h] [ebp-1Ch] char v13[4]; // [esp+1Ch] [ebp-18h] int v14; // [esp+20h] [ebp-14h] int v15; // [esp+24h] [ebp-10h] int v16; // [esp+28h] [ebp-Ch] int v17; // [esp+2Ch] [ebp-8h] v3 = a2; v4 = this; this[5] = 0; v11 = 0; v5 = (const char *)sub_6F83E0(a2); if ( v5 ) { while ( 1 ) { v17 = 0; v16 = 0; v15 = 0; v14 = 0; *(_DWORD *)v13 = 0; strncpy(v13, v5, 0x14u); sub_6F7BF0(v13); if ( *(_DWORD *)v13 != *(_DWORD *)dword_B9E2B4 || v14 != dword_B9E2B8 || v15 != dword_B9E2BC || v16 != dword_B9E2C0 || v17 != dword_B9E2C4 ) { if ( *(_DWORD *)v13 == *(_DWORD *)dword_B9E2C8 && v14 == dword_B9E2CC && v15 == dword_B9E2D0 && v16 == dword_B9E2D4 && v17 == dword_B9E2D8 ) { v6 = sub_6F5CA0(v4 + 6, (int)&v12, 2); goto LABEL_38; } if ( *(_DWORD *)v13 == *(_DWORD *)dword_B9E2DC && v14 == dword_B9E2E0 && v15 == dword_B9E2E4 && v16 == dword_B9E2E8 && v17 == dword_B9E2EC ) { v6 = sub_6F5CA0(v4 + 6, (int)&v12, 3); goto LABEL_38; } if ( *(_DWORD *)v13 != *(_DWORD *)dword_B9E2F0 || v14 != dword_B9E2F4 || v15 != dword_B9E2F8 || v16 != dword_B9E2FC || v17 != dword_B9E300 ) { if ( (*(_DWORD *)v13 != *(_DWORD *)dword_B9E304 || v14 != dword_B9E308 || v15 != dword_B9E30C || v16 != dword_B9E310 || v17 != dword_B9E314) && (*(_DWORD *)v13 != *(_DWORD *)dword_B9E318 || v14 != dword_B9E31C || v15 != dword_B9E320 || v16 != dword_B9E324 || v17 != dword_B9E328) ) { v10 = "Undefined column type"; LABEL_46: sub_6F8030(a2, (int)v10); return 0; } v9 = 5; } else { v9 = 4; } } else { v9 = 1; } v6 = sub_6F5CA0(v4 + 6, (int)&v12, v9); LABEL_38: if ( !v6 ) { v10 = "Too many columns or memory leak"; goto LABEL_46; } v3 = a2; v7 = (*(int (__thiscall **)(_DWORD *, _DWORD *, int))*v6)(v6, a2, a3); if ( v7 < 0 ) return 0; v4[5] += v7; ++v11; v5 = (const char *)sub_6F83E0(a2); if ( !v5 ) { if ( !v11 ) break; return 1; } } } sub_6F8030(v3, (int)"At least one column needed"); return 0; } // B9E2B8: using guessed type int dword_B9E2B8; // B9E2BC: using guessed type int dword_B9E2BC; // B9E2C0: using guessed type int dword_B9E2C0; // B9E2C4: using guessed type int dword_B9E2C4; // B9E2CC: using guessed type int dword_B9E2CC; // B9E2D0: using guessed type int dword_B9E2D0; // B9E2D4: using guessed type int dword_B9E2D4; // B9E2D8: using guessed type int dword_B9E2D8; // B9E2E0: using guessed type int dword_B9E2E0; // B9E2E4: using guessed type int dword_B9E2E4; // B9E2E8: using guessed type int dword_B9E2E8; // B9E2EC: using guessed type int dword_B9E2EC; // B9E2F4: using guessed type int dword_B9E2F4; // B9E2F8: using guessed type int dword_B9E2F8; // B9E2FC: using guessed type int dword_B9E2FC; // B9E300: using guessed type int dword_B9E300; // B9E308: using guessed type int dword_B9E308; // B9E30C: using guessed type int dword_B9E30C; // B9E310: using guessed type int dword_B9E310; // B9E314: using guessed type int dword_B9E314; // B9E31C: using guessed type int dword_B9E31C; // B9E320: using guessed type int dword_B9E320; // B9E324: using guessed type int dword_B9E324; // B9E328: using guessed type int dword_B9E328; //----- (006F41B0) -------------------------------------------------------- char __thiscall sub_6F41B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax v2 = (_DWORD *)this[4621]; if ( v2 ) return sub_6F3F80(v2, a2, (int)this); sub_6F7F20((int)this, (int)"ColumnHeader without table"); return 0; } //----- (006F41E0) -------------------------------------------------------- char __thiscall sub_6F41E0(unsigned __int16 *this, _DWORD *a2) { int v2; // edi int v3; // eax int v4; // ecx int v5; // esi const char *v7; // eax v2 = (int)this; v3 = this[84]; v4 = (int)(this + 78); if ( (_WORD)v3 == -1 ) v5 = 0; else v5 = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 4))(v3); *(_DWORD *)(v2 + 18484) = v5; if ( !v5 ) { sub_6F7F20(v2, (int)"Too many tables"); return 0; } v7 = (const char *)sub_6F83E0(a2); if ( !v7 ) return 0; *(_DWORD *)(v5 + 16) = 0; *(_DWORD *)(v5 + 12) = 0; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 4) = 0; *(_DWORD *)v5 = 0; strncpy((char *)v5, v7, 0x14u); return 1; } //----- (006F45C0) -------------------------------------------------------- void __thiscall sub_6F45C0(_DWORD *this) { _DWORD *v1; // esi void *v2; // edi void *v3; // eax char *v4; // eax char *v5; // edi v1 = this; v2 = (void *)this[142]; if ( v2 ) { sub_6F72D0(v2); operator delete(v2); } v3 = (void *)v1[138]; v1[136] = &List::`vftable'; if ( v3 ) operator delete[](v3); v4 = (char *)v1[134]; if ( v4 ) { v5 = v4 - 4; `eh vector destructor iterator'(v4, 0x208u, *((_DWORD *)v4 - 1), sub_6F7BA0); operator delete[](v5); } sub_6F6960(v1 + 6); } // 9FC8FC: using guessed type void *List::`vftable'; //----- (006F4750) -------------------------------------------------------- _DWORD *__thiscall sub_6F4750(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // ebx int v4; // eax v1 = this; this[4] = 0; this[3] = 0; this[2] = 0; this[1] = 0; *this = 0; sub_6F5460(this + 6); v1[135] = 32; v2 = operator new[](0x4104u); if ( v2 ) { v3 = (int)(v2 + 1); *v2 = 32; `eh vector constructor iterator'(v2 + 1, 0x208u, 32, sub_6F7860, sub_6F7BA0); v4 = v3; } else { v4 = 0; } v1[134] = v4; sub_6F51B0(v1 + 136, (int)(v1 + 134)); v1[142] = 0; return v1; } //----- (006F49D0) -------------------------------------------------------- int __thiscall sub_6F49D0(char *this) { char *v1; // esi v1 = this; nullsub_37(this + 120); nullsub_40(v1 + 117); nullsub_39(v1 + 116); nullsub_38(v1 + 48); nullsub_36(v1 + 12); return nullsub_41(v1); } // 6F7D80: using guessed type int __thiscall nullsub_36(_DWORD); // 6F7DE0: using guessed type int __thiscall nullsub_37(_DWORD); // 6F7E30: using guessed type int __thiscall nullsub_38(_DWORD); // 6F7E80: using guessed type int __thiscall nullsub_39(_DWORD); // 6F7EB0: using guessed type int __thiscall nullsub_40(_DWORD); // 6F7EF0: using guessed type int __thiscall nullsub_41(_DWORD); //----- (006F4A80) -------------------------------------------------------- char __thiscall sub_6F4A80(int this, unsigned __int16 a2) { int v2; // edx int v3; // eax __int16 v4; // dx char result; // al if ( a2 >= *(_WORD *)(this + 4) ) return 0; v2 = *(_DWORD *)(this + 8); v3 = 12 * a2; if ( !*(_BYTE *)(v2 + v3 + 8) || a2 == *(_WORD *)(this + 14) ) return 0; *(_WORD *)(v2 + 12 * *(unsigned __int16 *)(v2 + v3 + 6) + 4) = *(_WORD *)(v2 + v3 + 4); *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + v3 + 4) + 6) = *(_WORD *)(*(_DWORD *)(this + 8) + v3 + 6); v4 = *(_WORD *)(this + 12); if ( v4 == -1 ) { *(_WORD *)(*(_DWORD *)(this + 8) + v3 + 4) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + v3 + 6) = a2; *(_WORD *)(this + 12) = a2; } else { *(_WORD *)(*(_DWORD *)(this + 8) + v3 + 4) = v4; *(_WORD *)(*(_DWORD *)(this + 8) + v3 + 6) = *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 12) + 6); *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 12) + 6) + 4) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 12) + 6) = a2; } *(_BYTE *)(*(_DWORD *)(this + 8) + v3 + 8) = 0; result = 1; --*(_WORD *)(this + 20); return result; } //----- (006F4B90) -------------------------------------------------------- int __thiscall sub_6F4B90(int this, unsigned __int16 a2) { int v3; // esi int v4; // eax __int16 v5; // bx signed __int16 v6; // si int v7; // edi int v8; // esi if ( a2 >= *(_WORD *)(this + 4) ) return 0; v3 = *(_DWORD *)(this + 8); v4 = 12 * a2; if ( *(_BYTE *)(v3 + v4 + 8) ) return 0; v5 = *(_WORD *)(v3 + v4 + 4); if ( v5 == a2 ) { v6 = -1; LABEL_9: *(_WORD *)(this + 12) = v6; goto LABEL_10; } *(_WORD *)(v3 + 12 * *(unsigned __int16 *)(v3 + v4 + 6) + 4) = v5; *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + v4 + 4) + 6) = *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6); if ( *(_WORD *)(this + 12) == a2 ) { v6 = *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 4); goto LABEL_9; } LABEL_10: v7 = *(unsigned __int16 *)(this + 14); v8 = *(_DWORD *)(this + 8); if ( (_WORD)v7 == -1 ) { *(_WORD *)(v8 + v4 + 4) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6) = a2; *(_WORD *)(this + 14) = a2; } else { *(_WORD *)(v8 + v4 + 4) = *(_WORD *)(v8 + 12 * v7 + 4); *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6) = *(_WORD *)(this + 14); *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 4) + 6) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 4) = a2; } *(_BYTE *)(*(_DWORD *)(this + 8) + v4 + 8) = 1; ++*(_WORD *)(this + 20); return *(_DWORD *)(v4 + *(_DWORD *)(this + 8)); } //----- (006F4C90) -------------------------------------------------------- int __thiscall sub_6F4C90(int this, unsigned __int16 a2) { int v3; // esi int v4; // eax __int16 v5; // bx signed __int16 v6; // si __int16 v7; // si if ( a2 >= *(_WORD *)(this + 4) ) return 0; v3 = *(_DWORD *)(this + 8); v4 = 12 * a2; if ( *(_BYTE *)(v3 + v4 + 8) ) return 0; v5 = *(_WORD *)(v3 + v4 + 4); if ( v5 == a2 ) { v6 = -1; LABEL_9: *(_WORD *)(this + 12) = v6; goto LABEL_10; } *(_WORD *)(v3 + 12 * *(unsigned __int16 *)(v3 + v4 + 6) + 4) = v5; *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + v4 + 4) + 6) = *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6); if ( *(_WORD *)(this + 12) == a2 ) { v6 = *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 4); goto LABEL_9; } LABEL_10: v7 = *(_WORD *)(this + 14); if ( v7 == -1 ) { *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 4) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6) = a2; *(_WORD *)(this + 14) = a2; } else { *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 4) = v7; *(_WORD *)(*(_DWORD *)(this + 8) + v4 + 6) = *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 6); *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 6) + 4) = a2; *(_WORD *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 6) = a2; } *(_BYTE *)(*(_DWORD *)(this + 8) + v4 + 8) = 1; ++*(_WORD *)(this + 20); return *(_DWORD *)(v4 + *(_DWORD *)(this + 8)); } //----- (006F4D90) -------------------------------------------------------- char __thiscall sub_6F4D90(int this, unsigned __int8 (__thiscall ***a2)(_DWORD, _DWORD, int)) { int v2; // esi int v3; // ecx int v4; // edx int v5; // eax int v6; // edi v2 = this; v3 = *(unsigned __int16 *)(*(_DWORD *)(this + 8) + 12 * *(unsigned __int16 *)(this + 14) + 4); if ( (unsigned __int16)v3 >= *(_WORD *)(v2 + 4) ) return 1; while ( 1 ) { v4 = *(_DWORD *)(v2 + 8); v5 = 12 * (unsigned __int16)v3; if ( !*(_BYTE *)(v4 + v5 + 8) ) break; v6 = *(unsigned __int16 *)(v5 + v4 + 4); if ( !(**a2)(a2, *(_DWORD *)(v4 + v5), v3) ) break; v3 = v6; if ( (unsigned __int16)v6 >= *(_WORD *)(v2 + 4) ) return 1; } return 0; } //----- (006F4E00) -------------------------------------------------------- bool __thiscall sub_6F4E00(_DWORD *this, _DWORD *a2) { return *this == *a2 && this[1] == a2[1] && this[2] == a2[2] && this[3] == a2[3] && this[4] == a2[4]; } //----- (006F4E70) -------------------------------------------------------- char __thiscall sub_6F4E70(_DWORD **this, int a2, int a3) { (*(void (__stdcall **)(int))(*this[1] + 8))(a3); return 1; } //----- (006F4EB0) -------------------------------------------------------- char __thiscall sub_6F4EB0(int this, unsigned __int16 a2) { int v2; // esi void *v3; // eax int v4; // ecx signed int v5; // eax bool v6; // cf int v7; // eax signed int v8; // ecx int v9; // eax void **v11; // [esp+10h] [ebp-14h] int v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v2 = this; LOBYTE(v3) = a2; *(_WORD *)(this + 4) = a2; if ( a2 == -1 ) { *(_DWORD *)(this + 8) = 0; } else { v3 = operator new[](12 * (a2 + 1)); *(_DWORD *)(v2 + 8) = v3; if ( v3 ) { v4 = 0; v5 = 0; v6 = *(_WORD *)(v2 + 4) > 0u; do { *(_DWORD *)(v4 + *(_DWORD *)(v2 + 8)) = 0; ++v5; v4 += 12; } while ( v5 <= *(unsigned __int16 *)(v2 + 4) ); v7 = 0; v8 = 0; if ( *(_WORD *)(v2 + 4) > 0u ) { do { *(_WORD *)(v7 + *(_DWORD *)(v2 + 8) + 6) = v8 - 1; *(_WORD *)(v7 + *(_DWORD *)(v2 + 8) + 4) = v8 + 1; *(_BYTE *)(v7 + *(_DWORD *)(v2 + 8) + 8) = 0; ++v8; v7 += 12; } while ( v8 < *(unsigned __int16 *)(v2 + 4) ); } *(_WORD *)(*(_DWORD *)(v2 + 8) + 6) = *(_WORD *)(v2 + 4) - 1; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) - 8) = 0; v9 = *(unsigned __int16 *)(v2 + 4); *(_WORD *)(v2 + 14) = v9; *(_WORD *)(v2 + 12) = 0; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * v9 + 6) = v9; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 4) = *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 6); *(_DWORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4)) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 8) = 1; *(_WORD *)(v2 + 20) = 0; v11 = &ListEraser::`vftable'; v12 = v2; v13 = 0; LOBYTE(v3) = sub_6F4D90(v2, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v11); } } return (char)v3; } // 9FC92C: using guessed type void *ListEraser::`vftable'; //----- (006F5030) -------------------------------------------------------- char __thiscall sub_6F5030(int this, unsigned __int16 a2) { int v2; // esi void *v3; // eax int v4; // ecx signed int v5; // eax bool v6; // cf int v7; // eax signed int v8; // ecx int v9; // eax void **v11; // [esp+10h] [ebp-14h] int v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v2 = this; LOBYTE(v3) = a2; *(_WORD *)(this + 4) = a2; if ( a2 == -1 ) { *(_DWORD *)(this + 8) = 0; } else { v3 = operator new[](12 * (a2 + 1)); *(_DWORD *)(v2 + 8) = v3; if ( v3 ) { v4 = 0; v5 = 0; v6 = *(_WORD *)(v2 + 4) > 0u; do { *(_DWORD *)(v4 + *(_DWORD *)(v2 + 8)) = 0; ++v5; v4 += 12; } while ( v5 <= *(unsigned __int16 *)(v2 + 4) ); v7 = 0; v8 = 0; if ( *(_WORD *)(v2 + 4) > 0u ) { do { *(_WORD *)(v7 + *(_DWORD *)(v2 + 8) + 6) = v8 - 1; *(_WORD *)(v7 + *(_DWORD *)(v2 + 8) + 4) = v8 + 1; *(_BYTE *)(v7 + *(_DWORD *)(v2 + 8) + 8) = 0; ++v8; v7 += 12; } while ( v8 < *(unsigned __int16 *)(v2 + 4) ); } *(_WORD *)(*(_DWORD *)(v2 + 8) + 6) = *(_WORD *)(v2 + 4) - 1; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) - 8) = 0; v9 = *(unsigned __int16 *)(v2 + 4); *(_WORD *)(v2 + 14) = v9; *(_WORD *)(v2 + 12) = 0; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * v9 + 6) = v9; *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 4) = *(_WORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 6); *(_DWORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4)) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4) + 8) = 1; *(_WORD *)(v2 + 20) = 0; v11 = &ListEraser::`vftable'; v12 = v2; v13 = 0; LOBYTE(v3) = sub_6F4D90(v2, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v11); } } return (char)v3; } // 9FC934: using guessed type void *ListEraser::`vftable'; //----- (006F51B0) -------------------------------------------------------- _DWORD *__thiscall sub_6F51B0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // esi int v4; // edi _DWORD *result; // eax signed int v6; // eax int v7; // edx int v8; // ecx v2 = (_DWORD *)a2; v3 = this; v4 = 0; *this = &List::`vftable'; this[4] = a2; if ( *(_DWORD *)a2 ) { sub_6F4EB0((int)this, *(_WORD *)(a2 + 4)); if ( v3[2] ) { v6 = 0; if ( *((_WORD *)v3 + 2) > 0u ) { v7 = 0; do { if ( v6 < *((unsigned __int16 *)v3 + 2) ) { v8 = v3[2]; if ( !*(_DWORD *)(v8 + v7) ) { *(_DWORD *)(v8 + v7) = v4 + *v2; v2 = (_DWORD *)a2; } } ++v6; v4 += 520; v7 += 12; } while ( v6 < *((unsigned __int16 *)v3 + 2) ); } } result = v3; } else { this[2] = 0; result = this; } return result; } // 9FC8FC: using guessed type void *List::`vftable'; //----- (006F5240) -------------------------------------------------------- char __thiscall sub_6F5240(_DWORD *this, int a2, int a3) { int v3; // eax char result; // al v3 = this[1]; if ( v3 > 0 ) { this[1] = v3 - 1; result = 1; } else { this[2] = a2; result = 0; } return result; } //----- (006F52B0) -------------------------------------------------------- int __thiscall sub_6F52B0(_DWORD *this) { return this[1]; } //----- (006F52C0) -------------------------------------------------------- int __thiscall sub_6F52C0(_DWORD *this, int a2, int a3) { return this[1]; } //----- (006F5340) -------------------------------------------------------- signed int sub_6F5340() { return 1; } //----- (006F5350) -------------------------------------------------------- int __thiscall sub_6F5350(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi char v4; // al int v5; // edi int result; // eax int v7; // eax int v8; // ebx char v9; // al _DWORD *v10; // [esp+8h] [ebp-4h] v3 = a2; v10 = this; v4 = sub_6F8350(a2); v5 = a3; if ( sub_6F7EC0((char *)(a3 + 117), v4) ) { HIBYTE(a2) = 0; v7 = sub_6F82A0(v3, (_BYTE *)&a2 + 3); v8 = v7; if ( HIBYTE(a2) ) { if ( v7 > 0 ) { v9 = sub_6F8350(v3); if ( sub_6F7ED0((char *)(v5 + 117), v9) ) { v10[1] = v8; result = v8; } else { sub_6F8030(v3, (int)"Brace must be closed in same line"); result = 0; } } else { sub_6F8030(v3, (int)"String length must be bigger then 0"); result = 0; } } else { sub_6F8030(v3, (int)"Error in string length"); result = 0; } } else { sub_6F8030(v3, (int)"String need length"); result = 0; } return result; } //----- (006F5420) -------------------------------------------------------- signed int sub_6F5420() { return 2; } //----- (006F5430) -------------------------------------------------------- signed int sub_6F5430() { return 3; } //----- (006F5460) -------------------------------------------------------- void *__thiscall sub_6F5460(void *this) { memset(this, 0, 0x200u); return this; } //----- (006F5480) -------------------------------------------------------- char __thiscall sub_6F5480(_DWORD *this, unsigned __int8 (__thiscall ***a2)(_DWORD, int, int)) { _DWORD *v2; // ebx int v3; // esi int v4; // eax v2 = this; v3 = 0; while ( 1 ) { v4 = v2[v3]; if ( v4 ) { if ( !(**a2)(a2, v4, v3) ) break; } if ( ++v3 >= 128 ) return 1; } return 0; } //----- (006F5560) -------------------------------------------------------- char __thiscall sub_6F5560(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // ST04_4 _DWORD *v6; // eax v3 = this; v4 = (_DWORD *)sub_6F7490(a2); if ( *v4 != v3[1] || v4[1] != v3[2] || v4[2] != v3[3] || v4[3] != v3[4] || v4[4] != v3[5] ) return 1; if ( (*(int (__thiscall **)(_DWORD *))(*a2 + 16))(a2) == 1 ) { v5 = v3[6]; v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*a2 + 12))(a2); sub_6F72F0((_DWORD *)v3[7], v6, v5); } return 0; } //----- (006F5620) -------------------------------------------------------- char __thiscall sub_6F5620(_DWORD *this, _DWORD *a2, int a3) { int v3; // edx int v4; // esi int v5; // eax void **v7; // [esp+8h] [ebp-30h] int v8; // [esp+Ch] [ebp-2Ch] int v9; // [esp+10h] [ebp-28h] int v10; // [esp+14h] [ebp-24h] int v11; // [esp+18h] [ebp-20h] int v12; // [esp+1Ch] [ebp-1Ch] _DWORD *v13; // [esp+20h] [ebp-18h] int v14; // [esp+24h] [ebp-14h] int v15; // [esp+34h] [ebp-4h] v3 = this[6]; v8 = this[1]; v9 = this[2]; v10 = this[3]; v4 = this[4]; v5 = this[5]; v7 = &MakePrimaryKeyColumn::`vftable'; v11 = v4; v12 = v5; v13 = a2; v14 = v3; v15 = 0; sub_6F7A60(a2, (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v7); return 1; } // 9FCA94: using guessed type void *MakePrimaryKeyColumn::`vftable'; //----- (006F5740) -------------------------------------------------------- char __thiscall sub_6F5740(_DWORD *this, int a2, int a3) { int v3; // ebx _DWORD *v4; // edi __int16 v5; // ax _DWORD *v6; // esi char result; // al _DWORD *v8; // [esp+Ch] [ebp-4h] v3 = a2; v4 = (_DWORD *)this[2]; v8 = (_DWORD *)this[1]; v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); v6 = sub_6F7920(v4, (int)&a2, v5); if ( v6 ) { unknown_libname_15(v3); sub_6F78F0(v4, (int)v6); result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v6 + 8))(v6, v8); } else { sub_6F8030(v8, (int)"Cannot alloc field memory"); result = 0; } return result; } // 6F74A0: using guessed type _DWORD __stdcall unknown_libname_15(_DWORD); //----- (006F5810) -------------------------------------------------------- char __thiscall sub_6F5810(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v5; // eax v3 = this; v4 = (_DWORD *)this[1]; v5 = (_DWORD *)sub_6F7490(a2); if ( *v5 != *v4 || v5[1] != v4[1] || v5[2] != v4[2] || v5[3] != v4[3] || v5[4] != v4[4] ) return 1; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD, _DWORD *))*a2)(a2, v3[2], v3 + 3) ) *((_BYTE *)v3 + 32) = 1; return 0; } //----- (006F58D0) -------------------------------------------------------- char __thiscall sub_6F58D0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; v4 = (_DWORD *)sub_6F7490(a2); if ( *v4 != v3[1] || v4[1] != v3[2] || v4[2] != v3[3] || v4[3] != v3[4] || v4[4] != v3[5] ) return 1; v3[6] = (*(int (__thiscall **)(_DWORD *))(*a2 + 12))(a2); *(_DWORD *)v3[7] = (*(int (__thiscall **)(_DWORD *))(*a2 + 16))(a2); return 0; } //----- (006F59A0) -------------------------------------------------------- char __thiscall sub_6F59A0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi const char *v4; // ST04_4 int v5; // eax void **v7; // [esp+10h] [ebp-34h] _DWORD *v8; // [esp+14h] [ebp-30h] const char *v9; // [esp+18h] [ebp-2Ch] char v10[4]; // [esp+1Ch] [ebp-28h] int v11; // [esp+20h] [ebp-24h] int v12; // [esp+24h] [ebp-20h] int v13; // [esp+28h] [ebp-1Ch] int v14; // [esp+2Ch] [ebp-18h] char v15; // [esp+30h] [ebp-14h] int v16; // [esp+40h] [ebp-4h] v3 = this; v4 = (const char *)this[6]; v7 = &ColumnCheckArgument::`vftable'; v8 = this + 1; v9 = v4; v14 = 0; v13 = 0; v12 = 0; v11 = 0; *(_DWORD *)v10 = 0; strncpy(v10, v4, 0x14u); v15 = 0; v16 = 0; sub_6F7A60(a2, (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v7); if ( !v15 ) return 1; v5 = v3[8]; if ( v5 > 0 ) { v3[8] = v5 - 1; return 1; } v3[7] = a2; return 0; } // 9FCABC: using guessed type void *ColumnCheckArgument::`vftable'; //----- (006F5AB0) -------------------------------------------------------- char __thiscall sub_6F5AB0(_DWORD *this, void *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax v3 = this; v4 = sub_6F3EB0(a2); if ( v3[1] != *v4 || v3[2] != v4[1] || v3[3] != v4[2] || v3[4] != v4[3] || v3[5] != v4[4] ) return 1; v3[6] = a2; return 0; } //----- (006F5CA0) -------------------------------------------------------- _DWORD *__thiscall sub_6F5CA0(_DWORD *this, int a2, __int16 a3) { _DWORD *v3; // ebx int v4; // edi _DWORD *result; // eax v3 = this; v4 = 0; while ( this[v4] ) { if ( ++v4 >= 128 ) return 0; } switch ( a3 ) { case 1: result = operator new(0x1Cu); if ( !result ) goto LABEL_16; result[6] = 0; result[5] = 0; result[4] = 0; result[3] = 0; result[2] = 0; *result = &ORColumnHeaderIndex::`vftable'; result[1] = 20; v3[v4] = result; break; case 2: result = operator new(0x1Cu); if ( !result ) goto LABEL_16; result[6] = 0; result[5] = 0; result[4] = 0; result[3] = 0; result[2] = 0; *result = &ORColumnHeaderString::`vftable'; result[1] = -1; v3[v4] = result; break; case 3: result = operator new(0x1Cu); if ( !result ) goto LABEL_16; result[6] = 0; result[5] = 0; result[4] = 0; result[3] = 0; result[2] = 0; *result = &ORColumnHeaderByte::`vftable'; result[1] = 1; v3[v4] = result; break; case 4: result = operator new(0x1Cu); if ( !result ) goto LABEL_16; result[6] = 0; result[5] = 0; result[4] = 0; result[3] = 0; result[2] = 0; *result = &ORColumnHeaderWord::`vftable'; result[1] = 2; v3[v4] = result; break; case 5: result = operator new(0x1Cu); if ( !result ) { LABEL_16: v3[v4] = 0; goto LABEL_17; } result[6] = 0; result[5] = 0; result[4] = 0; result[3] = 0; result[2] = 0; *result = &ORColumnHeaderDwrd::`vftable'; result[1] = 4; v3[v4] = result; break; default: LABEL_17: result = (_DWORD *)v3[v4]; break; } return result; } // 9FCAE8: using guessed type void *ORColumnHeaderIndex::`vftable'; // 9FCAF4: using guessed type void *ORColumnHeaderString::`vftable'; // 9FCB00: using guessed type void *ORColumnHeaderByte::`vftable'; // 9FCB0C: using guessed type void *ORColumnHeaderWord::`vftable'; // 9FCB18: using guessed type void *ORColumnHeaderDwrd::`vftable'; //----- (006F5E40) -------------------------------------------------------- bool __thiscall sub_6F5E40(_DWORD *this, const char *a2) { _DWORD *v2; // esi void *v3; // edi _DWORD *v4; // eax _DWORD *v5; // edi void *v7; // edi void **v8; // [esp+18h] [ebp-2Ch] char v9[4]; // [esp+1Ch] [ebp-28h] int v10; // [esp+20h] [ebp-24h] int v11; // [esp+24h] [ebp-20h] int v12; // [esp+28h] [ebp-1Ch] int v13; // [esp+2Ch] [ebp-18h] _DWORD *v14; // [esp+30h] [ebp-14h] int v15; // [esp+40h] [ebp-4h] v2 = this; v3 = (void *)this[142]; if ( v3 ) { sub_6F72D0(v3); operator delete(v3); } v4 = operator new(0x6004u); v15 = 0; if ( v4 ) v5 = sub_6F7390(v4); else v5 = 0; v15 = -1; v2[142] = v5; if ( !v5 ) return 0; v8 = &MakePrimaryKey::`vftable'; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, a2, 0x14u); v14 = v5; v15 = 1; sub_6F4D90((int)(v2 + 136), (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v8); if ( !sub_6F73C0((void *)v2[142]) ) { v7 = (void *)v2[142]; if ( v7 ) { sub_6F72D0((void *)v2[142]); operator delete(v7); } v2[142] = 0; } return v2[142] != 0; } // 9FCA9C: using guessed type void *MakePrimaryKey::`vftable'; //----- (006F5F60) -------------------------------------------------------- char __thiscall sub_6F5F60(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi int v4; // eax void **v6; // [esp+Ch] [ebp-14h] int v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v2 = this; v6 = &ColumnNameArgument::`vftable'; v7 = a2; v8 = 0; v3 = 0; while ( 1 ) { v4 = v2[v3 + 6]; if ( v4 ) { if ( !((unsigned __int8 (__thiscall *)(void ***, int, int))*v6)(&v6, v4, v3) ) break; } if ( ++v3 >= 128 ) return 1; } return 0; } // 9FCAAC: using guessed type void *ColumnNameArgument::`vftable'; //----- (006F5FF0) -------------------------------------------------------- int __thiscall sub_6F5FF0(_DWORD *this, char *a2, int a3) { _DWORD *v3; // edi void **v5; // [esp+Ch] [ebp-30h] char v6[4]; // [esp+10h] [ebp-2Ch] int v7; // [esp+14h] [ebp-28h] int v8; // [esp+18h] [ebp-24h] int v9; // [esp+1Ch] [ebp-20h] int v10; // [esp+20h] [ebp-1Ch] int v11; // [esp+24h] [ebp-18h] int v12; // [esp+28h] [ebp-14h] int v13; // [esp+38h] [ebp-4h] v3 = this; v5 = &TargetColumnFindArgument::`vftable'; v10 = 0; v9 = 0; v8 = 0; v7 = 0; *(_DWORD *)v6 = 0; strncpy(v6, a2, 0x14u); v11 = 0; v12 = a3; v13 = 0; sub_6F7A60(v3, (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v5); return v11; } // 9FCAC4: using guessed type void *TargetColumnFindArgument::`vftable'; //----- (006F60D0) -------------------------------------------------------- int __thiscall sub_6F60D0(void *this, char *a2, int a3, char *a4, int a5, int a6) { int v6; // edi _DWORD *v7; // edi void **v9; // [esp+10h] [ebp-54h] char v10[4]; // [esp+14h] [ebp-50h] int v11; // [esp+18h] [ebp-4Ch] int v12; // [esp+1Ch] [ebp-48h] int v13; // [esp+20h] [ebp-44h] int v14; // [esp+24h] [ebp-40h] int v15; // [esp+28h] [ebp-3Ch] _DWORD *v16; // [esp+2Ch] [ebp-38h] int v17; // [esp+30h] [ebp-34h] void **v18; // [esp+34h] [ebp-30h] char v19[4]; // [esp+38h] [ebp-2Ch] int v20; // [esp+3Ch] [ebp-28h] int v21; // [esp+40h] [ebp-24h] int v22; // [esp+44h] [ebp-20h] int v23; // [esp+48h] [ebp-1Ch] int v24; // [esp+4Ch] [ebp-18h] int v25; // [esp+50h] [ebp-14h] int v26; // [esp+60h] [ebp-4h] v6 = (int)this; v9 = &RecordDataCompareArgument::`vftable'; v14 = 0; v13 = 0; v12 = 0; v11 = 0; *(_DWORD *)v10 = 0; strncpy(v10, a2, 0x14u); v15 = a3; v16 = 0; v17 = a5; v26 = 0; sub_6F4D90(v6 + 544, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v9); if ( !v16 ) return 0; v7 = v16; v18 = &TargetColumnFindArgument::`vftable'; v23 = 0; v22 = 0; v21 = 0; v20 = 0; *(_DWORD *)v19 = 0; strncpy(v19, a4, 0x14u); v24 = 0; v25 = a6; LOBYTE(v26) = 1; sub_6F7A60(v7, (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v18); return v24; } // 9FCAC4: using guessed type void *TargetColumnFindArgument::`vftable'; // 9FCACC: using guessed type void *RecordDataCompareArgument::`vftable'; //----- (006F6240) -------------------------------------------------------- int __thiscall sub_6F6240(void *this, char *a2, int a3, int a4) { int v4; // edi int result; // eax void **v6; // [esp+Ch] [ebp-34h] char v7[4]; // [esp+10h] [ebp-30h] int v8; // [esp+14h] [ebp-2Ch] int v9; // [esp+18h] [ebp-28h] int v10; // [esp+1Ch] [ebp-24h] int v11; // [esp+20h] [ebp-20h] int v12; // [esp+24h] [ebp-1Ch] _DWORD *v13; // [esp+28h] [ebp-18h] int v14; // [esp+2Ch] [ebp-14h] int v15; // [esp+3Ch] [ebp-4h] v4 = (int)this; v6 = &RecordDataCompareArgument::`vftable'; v11 = 0; v10 = 0; v9 = 0; v8 = 0; *(_DWORD *)v7 = 0; strncpy(v7, a2, 0x14u); v12 = a3; v13 = 0; v14 = a4; v15 = 0; sub_6F4D90(v4 + 544, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v6); if ( v13 ) result = sub_6F78B0(v13); else result = 0; return result; } // 9FCACC: using guessed type void *RecordDataCompareArgument::`vftable'; //----- (006F62F0) -------------------------------------------------------- int __thiscall sub_6F62F0(void *this, int a2, int a3, int a4, int a5, int a6, char *a7) { void *v8; // ecx _DWORD *v9; // eax void **v10; // [esp+8h] [ebp-2Ch] int v11; // [esp+Ch] [ebp-28h] int v12; // [esp+10h] [ebp-24h] int v13; // [esp+14h] [ebp-20h] int v14; // [esp+18h] [ebp-1Ch] int v15; // [esp+1Ch] [ebp-18h] int v16; // [esp+20h] [ebp-14h] int v17; // [esp+30h] [ebp-4h] v11 = a2; v12 = a3; v13 = a4; v10 = &TableNameCompareArgument::`vftable'; v14 = a5; v15 = a6; v16 = 0; v17 = 0; sub_6F4D90((int)this + 156, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v10); if ( !v16 ) return 0; v8 = *(void **)(v16 + 568); if ( !v8 ) return 0; v9 = (_DWORD *)sub_6F73F0(v8, a7); return sub_6F78B0(v9); } // 9FCAD4: using guessed type void *TableNameCompareArgument::`vftable'; //----- (006F6470) -------------------------------------------------------- int __thiscall sub_6F6470(void *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8, int a9) { void *v10; // ecx void **v11; // esi _DWORD *v12; // eax void **v13; // [esp+14h] [ebp-2Ch] int v14; // [esp+18h] [ebp-28h] int v15; // [esp+1Ch] [ebp-24h] int v16; // [esp+20h] [ebp-20h] int v17; // [esp+24h] [ebp-1Ch] int v18; // [esp+28h] [ebp-18h] int v19; // [esp+2Ch] [ebp-14h] int v20; // [esp+3Ch] [ebp-4h] v14 = a3; v15 = a4; v16 = a5; v13 = &TableNameCompareArgument::`vftable'; v17 = a6; v18 = a7; v19 = 0; v20 = 0; sub_6F4D90((int)this + 156, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v13); if ( !v19 ) return 0; v10 = *(void **)(v19 + 568); v11 = (void **)(v19 + 568); if ( !v10 || !sub_6F73F0(v10, a8) ) return 0; v12 = (_DWORD *)sub_6F73F0(*v11, a8); return sub_6F5FF0(v12, a2, a9); } // 9FCAD4: using guessed type void *TableNameCompareArgument::`vftable'; //----- (006F65F0) -------------------------------------------------------- int __thiscall sub_6F65F0(void *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8, int a9, int a10, int a11) { int result; // eax void **v12; // [esp+18h] [ebp-2Ch] int v13; // [esp+1Ch] [ebp-28h] int v14; // [esp+20h] [ebp-24h] int v15; // [esp+24h] [ebp-20h] int v16; // [esp+28h] [ebp-1Ch] int v17; // [esp+2Ch] [ebp-18h] void *v18; // [esp+30h] [ebp-14h] int v19; // [esp+40h] [ebp-4h] v13 = a3; v15 = a5; v14 = a4; v17 = a7; v12 = &TableNameCompareArgument::`vftable'; v16 = a6; v18 = 0; v19 = 0; sub_6F4D90((int)this + 156, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v12); if ( v18 ) result = sub_6F60D0(v18, a8, a9, a2, a10, a11); else result = 0; return result; } // 9FCAD4: using guessed type void *TableNameCompareArgument::`vftable'; //----- (006F67B0) -------------------------------------------------------- char __thiscall sub_6F67B0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi const char *v4; // ST04_4 char result; // al void **v6; // [esp+10h] [ebp-34h] _DWORD *v7; // [esp+14h] [ebp-30h] const char *v8; // [esp+18h] [ebp-2Ch] char v9[4]; // [esp+1Ch] [ebp-28h] int v10; // [esp+20h] [ebp-24h] int v11; // [esp+24h] [ebp-20h] int v12; // [esp+28h] [ebp-1Ch] int v13; // [esp+2Ch] [ebp-18h] char v14; // [esp+30h] [ebp-14h] int v15; // [esp+40h] [ebp-4h] v3 = this; v4 = (const char *)this[7]; v6 = &ColumnCheckArgument::`vftable'; v7 = this + 2; v8 = v4; v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v4, 0x14u); v14 = 0; v15 = 0; sub_6F7A60(a2, (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v6); if ( !v14 ) return 1; result = 1; ++v3[1]; return result; } // 9FCABC: using guessed type void *ColumnCheckArgument::`vftable'; //----- (006F6910) -------------------------------------------------------- char __thiscall sub_6F6910(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi const char *v4; // eax char result; // al _DWORD *v6; // ST00_4 v3 = this; v4 = (const char *)sub_6F83E0(this[1]); if ( v4 ) { v6 = (_DWORD *)(a2 + 8); v6[4] = 0; v6[3] = 0; v6[2] = 0; v6[1] = 0; *v6 = 0; strncpy((char *)(a2 + 8), v4, 0x14u); result = 1; } else { sub_6F8030(v3[1], (int)"Column type-name mismatch"); result = 0; } return result; } //----- (006F6960) -------------------------------------------------------- void __thiscall sub_6F6960(_DWORD *this) { _DWORD *v1; // edi signed int v2; // esi _DWORD *v3; // eax void *v4; // ST00_4 v1 = this; v2 = 0; do { v3 = (_DWORD *)v1[v2]; if ( v3 ) { v4 = (void *)v1[v2]; *v3 = &ORColumnHeader::`vftable'; operator delete(v4); } ++v2; } while ( v2 < 128 ); } // 9FCADC: using guessed type void *ORColumnHeader::`vftable'; //----- (006F6990) -------------------------------------------------------- char __thiscall sub_6F6990(int this, _DWORD *a2) { int v2; // ebx int v3; // eax _DWORD *v4; // edi char result; // al void **v6; // [esp+10h] [ebp-18h] _DWORD *v7; // [esp+14h] [ebp-14h] _DWORD *v8; // [esp+18h] [ebp-10h] int v9; // [esp+24h] [ebp-4h] v2 = this; v3 = *(unsigned __int16 *)(this + 556); if ( (_WORD)v3 != -1 ) { v4 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)(this + 544) + 4))(this + 544, v3); if ( v4 ) goto LABEL_11; } if ( !sub_6F7040(v2 + 544, (void *)8) ) { sub_6F8030(a2, (int)"Too many records"); return 0; } if ( *(_WORD *)(v2 + 556) != -1 && (v4 = (_DWORD *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)(v2 + 544) + 4))( v2 + 544, *(unsigned __int16 *)(v2 + 556))) != 0 ) { LABEL_11: sub_6F78C0(v4, *(_DWORD *)(v2 + 20)); v6 = &DataRecordArgument::`vftable'; v7 = a2; v8 = v4; v9 = 0; result = sub_6F5480((_DWORD *)(v2 + 24), (unsigned __int8 (__thiscall ***)(_DWORD, int, int))&v6); } else { sub_6F8030(a2, (int)"Record alloc error after list enlargement"); result = 0; } return result; } // 9FCAB4: using guessed type void *DataRecordArgument::`vftable'; //----- (006F6AB0) -------------------------------------------------------- char __thiscall sub_6F6AB0(void *this, _DWORD *a2) { int v2; // esi const char *v3; // eax void **v5; // [esp+10h] [ebp-40h] int v6; // [esp+14h] [ebp-3Ch] int v7; // [esp+18h] [ebp-38h] int v8; // [esp+1Ch] [ebp-34h] int v9; // [esp+20h] [ebp-30h] int v10; // [esp+24h] [ebp-2Ch] int v11; // [esp+28h] [ebp-28h] char v12[4]; // [esp+2Ch] [ebp-24h] int v13; // [esp+30h] [ebp-20h] int v14; // [esp+34h] [ebp-1Ch] int v15; // [esp+38h] [ebp-18h] int v16; // [esp+3Ch] [ebp-14h] int v17; // [esp+4Ch] [ebp-4h] v2 = (int)this; v3 = (const char *)sub_6F83E0(a2); if ( !v3 ) { sub_6F7F20(v2, (int)"#recordin has no table name"); return 0; } v16 = 0; v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; strncpy(v12, v3, 0x14u); v6 = *(_DWORD *)v12; v7 = v13; v5 = &TableNameCompareArgument::`vftable'; v8 = v14; v9 = v15; v10 = v16; v11 = 0; v17 = 0; sub_6F4D90(v2 + 156, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v5); if ( !v11 ) { sub_6F7F20(v2, (int)"Unknown table name"); return 0; } if ( !sub_6F6990(v11, a2) || !sub_6F8320(a2) ) return 0; return 1; } // 9FCAD4: using guessed type void *TableNameCompareArgument::`vftable'; //----- (006F6BB0) -------------------------------------------------------- bool __thiscall sub_6F6BB0(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[4621]; if ( v2 ) return sub_6F6990(v2, a2) && sub_6F8320(a2); sub_6F7F20((int)this, (int)"Record without table"); return 0; } //----- (006F6EE0) -------------------------------------------------------- int __thiscall sub_6F6EE0(void *this, int a2, int a3, int a4, int a5, int a6, char *a7, int a8) { int v9; // ebx void **v10; // [esp+10h] [ebp-4Ch] int v11; // [esp+14h] [ebp-48h] int v12; // [esp+18h] [ebp-44h] int v13; // [esp+1Ch] [ebp-40h] int v14; // [esp+20h] [ebp-3Ch] int v15; // [esp+24h] [ebp-38h] int v16; // [esp+28h] [ebp-34h] void **v17; // [esp+2Ch] [ebp-30h] int v18; // [esp+30h] [ebp-2Ch] char v19[4]; // [esp+34h] [ebp-28h] int v20; // [esp+38h] [ebp-24h] int v21; // [esp+3Ch] [ebp-20h] int v22; // [esp+40h] [ebp-1Ch] int v23; // [esp+44h] [ebp-18h] int v24; // [esp+48h] [ebp-14h] int v25; // [esp+58h] [ebp-4h] v11 = a2; v12 = a3; v13 = a4; v10 = &TableNameCompareArgument::`vftable'; v14 = a5; v15 = a6; v16 = 0; v25 = 0; sub_6F4D90((int)this + 156, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v10); if ( !v16 ) return -1; v9 = v16; v17 = &RecordNumber::`vftable'; v18 = 0; v23 = 0; v22 = 0; v21 = 0; v20 = 0; *(_DWORD *)v19 = 0; strncpy(v19, a7, 0x14u); v24 = a8; LOBYTE(v25) = 1; sub_6F4D90(v9 + 544, (unsigned __int8 (__thiscall ***)(_DWORD, _DWORD, int))&v17); return v18; } // 9FCAD4: using guessed type void *TableNameCompareArgument::`vftable'; // 9FCB24: using guessed type void *RecordNumber::`vftable'; //----- (006F7030) -------------------------------------------------------- char __stdcall sub_6F7030(int a1, int a2) { return 1; } //----- (006F7040) -------------------------------------------------------- char __thiscall sub_6F7040(int this, void *a2) { int v2; // esi int v3; // eax int v4; // ebx int v5; // edi signed __int64 v6; // rax int *v7; // eax char *v8; // ebx int v9; // eax char *v11; // eax _DWORD *v12; // ecx int v13; // edx int v14; // ecx int v15; // eax char *v16; // eax _DWORD *v17; // ecx void *v18; // ST10_4 void **v19; // ecx char *v20; // eax char *v21; // ebx int v22; // edx int v23; // [esp+10h] [ebp-14h] int i; // [esp+14h] [ebp-10h] char *v25; // [esp+2Ch] [ebp+8h] v2 = this; if ( *(_WORD *)(this + 12) != -1 ) return 0; v3 = *(_DWORD *)(this + 16); v4 = 0; if ( !v3 ) return 0; v5 = (int)a2 + *(_DWORD *)(v3 + 4); v6 = 520i64 * ((unsigned int)a2 + *(_DWORD *)(v3 + 4)); v7 = (int *)operator new[](((v6 | -(HIDWORD(v6) != 0)) + 4) | -__CFADD__(v6 | -(HIDWORD(v6) != 0), 4)); if ( v7 ) { v4 = (int)(v7 + 1); *v7 = v5; `eh vector constructor iterator'(v7 + 1, 0x208u, v5, sub_6F7860, sub_6F7BA0); } v25 = (char *)v4; if ( !v4 ) return 0; v8 = (char *)operator new[](12 * (v5 + 1)); v9 = 0; if ( !v8 ) { sub_6F7BA0(v25); operator delete(v25); return 0; } v23 = 0; if ( *(_DWORD *)(*(_DWORD *)(v2 + 16) + 4) > 0 ) { for ( i = 0; ; v9 = i ) { sub_6F7880(&v25[v9], (_DWORD *)(v9 + **(_DWORD **)(v2 + 16))); i += 520; if ( ++v23 >= *(_DWORD *)(*(_DWORD *)(v2 + 16) + 4) ) break; } } memcpy(v8, *(const void **)(v2 + 8), 12 * *(_DWORD *)(*(_DWORD *)(v2 + 16) + 4)); *(_WORD *)&v8[12 * *(unsigned __int16 *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 14) + 4) + 6] = v5; *(_WORD *)&v8[12 * *(unsigned __int16 *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 14) + 6) + 4] = v5; if ( v5 > 0 ) { v11 = v25; v12 = v8; v13 = v5; do { *v12 = v11; v11 += 520; v12 += 3; --v13; } while ( v13 ); } v14 = *(unsigned __int16 *)(v2 + 4); if ( v14 < v5 ) { v15 = (int)&v8[12 * v14 + 4]; do { *(_WORD *)v15 = v14 + 1; *(_BYTE *)(v15 + 4) = 0; *(_WORD *)(v15 + 2) = v14++ - 1; v15 += 12; } while ( v14 < v5 ); } *(_WORD *)&v8[12 * *(unsigned __int16 *)(v2 + 4) + 6] = v5 - 1; *(_WORD *)&v8[12 * v5 - 8] = *(_WORD *)(v2 + 4); v16 = &v8[12 * v5]; v17 = (_DWORD *)(*(_DWORD *)(v2 + 8) + 12 * *(unsigned __int16 *)(v2 + 4)); *(_DWORD *)v16 = *v17; *((_DWORD *)v16 + 1) = v17[1]; *((_DWORD *)v16 + 2) = v17[2]; v18 = *(void **)(v2 + 8); *(_WORD *)(v2 + 12) = *(_WORD *)(v2 + 4); operator delete[](v18); v19 = *(void ***)(v2 + 16); *(_DWORD *)(v2 + 8) = v8; v20 = (char *)*v19; if ( *v19 ) { v21 = v20 - 4; `eh vector destructor iterator'(v20, 0x208u, *((_DWORD *)v20 - 1), sub_6F7BA0); operator delete[](v21); } **(_DWORD **)(v2 + 16) = v25; v22 = *(_DWORD *)(v2 + 16); *(_WORD *)(v2 + 4) = v5; *(_DWORD *)(v22 + 4) = (unsigned __int16)v5; *(_WORD *)(v2 + 14) = v5; return 1; } //----- (006F72B0) -------------------------------------------------------- void __thiscall sub_6F72B0(void *this) { *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; } //----- (006F72D0) -------------------------------------------------------- void __thiscall sub_6F72D0(void *this) { `eh vector destructor iterator'(this, 0x18u, 1024, nullsub_6); } //----- (006F72F0) -------------------------------------------------------- int __thiscall sub_6F72F0(_DWORD *this, _DWORD *a2, int a3) { int result; // eax _DWORD *v4; // eax result = this[6144]; if ( result < 1024 ) { v4 = &this[6 * result]; *v4 = *a2; v4[1] = a2[1]; v4[2] = a2[2]; v4[3] = a2[3]; v4[4] = a2[4]; result = 3 * this[6144]; this[6 * this[6144]++ + 5] = a3; } return result; } //----- (006F7350) -------------------------------------------------------- int __cdecl sub_6F7350(const void *a1, const void *a2) { int v2; // edx int v3; // esi int result; // eax v2 = *(_DWORD *)a2; v3 = *(_DWORD *)a1; if ( *(_DWORD *)a2 != *(_DWORD *)a1 || (v2 = *((_DWORD *)a2 + 1), v3 = *((_DWORD *)a1 + 1), v2 != v3) || (v2 = *((_DWORD *)a2 + 2), v3 = *((_DWORD *)a1 + 2), v2 != v3) || (v2 = *((_DWORD *)a2 + 3), v3 = *((_DWORD *)a1 + 3), v2 != v3) ) { result = v2 - v3; } else { result = *((_DWORD *)a2 + 4) - *((_DWORD *)a1 + 4); } return result; } //----- (006F7390) -------------------------------------------------------- _DWORD *__thiscall sub_6F7390(_DWORD *this) { _DWORD *v1; // esi v1 = this; `eh vector constructor iterator'(this, 0x18u, 1024, sub_6F72B0, nullsub_6); v1[6144] = 0; return v1; } //----- (006F73C0) -------------------------------------------------------- char __thiscall sub_6F73C0(void *this) { signed int v1; // eax v1 = *((_DWORD *)this + 6144); if ( !v1 || v1 >= 1024 ) return 0; qsort(this, v1, 0x18u, sub_6F7350); return 1; } //----- (006F73F0) -------------------------------------------------------- int __thiscall sub_6F73F0(void *this, char *a2) { size_t *v2; // esi _DWORD *v3; // eax int result; // eax char v5[4]; // [esp+8h] [ebp-18h] int v6; // [esp+Ch] [ebp-14h] int v7; // [esp+10h] [ebp-10h] int v8; // [esp+14h] [ebp-Ch] int v9; // [esp+18h] [ebp-8h] v2 = (size_t *)this; v9 = 0; v8 = 0; v7 = 0; v6 = 0; *(_DWORD *)v5 = 0; strncpy(v5, a2, 0x14u); v3 = bsearch(v5, v2, v2[6144], 0x18u, sub_6F7350); if ( v3 ) result = v3[5]; else result = 0; return result; } //----- (006F7490) -------------------------------------------------------- int __thiscall sub_6F7490(_DWORD *this) { return this[1] + 8; } //----- (006F74D0) -------------------------------------------------------- int __thiscall sub_6F74D0(int this, int a2) { *(_DWORD *)(this + 8) = a2; return sub_6F52B0(*(_DWORD **)(this + 4)); } //----- (006F74F0) -------------------------------------------------------- int __thiscall sub_6F74F0(_DWORD *this) { return this[2]; } //----- (006F7500) -------------------------------------------------------- signed int sub_6F7500() { return 1; } //----- (006F7530) -------------------------------------------------------- int __thiscall sub_6F7530(int this, int a2) { *(_DWORD *)(this + 8) = a2; return sub_6F52B0(*(_DWORD **)(this + 4)); } //----- (006F7550) -------------------------------------------------------- bool __thiscall sub_6F7550(const char **this, const char *a2, int a3) { return strcmp(this[2], a2) == 0; } //----- (006F75A0) -------------------------------------------------------- int __thiscall sub_6F75A0(_DWORD *this) { return this[2]; } //----- (006F75B0) -------------------------------------------------------- signed int sub_6F75B0() { return 2; } //----- (006F75E0) -------------------------------------------------------- int __thiscall sub_6F75E0(int this, int a2) { *(_DWORD *)(this + 8) = a2; return sub_6F52B0(*(_DWORD **)(this + 4)); } //----- (006F7600) -------------------------------------------------------- char __thiscall sub_6F7600(_BYTE **this, _DWORD *a2) { _BYTE **v2; // esi int v3; // eax char result; // al char v5; // [esp+Bh] [ebp-1h] v2 = this; v5 = 0; v3 = sub_6F82A0(a2, &v5); if ( v5 && v3 < 256 ) { *v2[2] = v3; result = 1; } else { sub_6F8030(a2, (int)"Cannot read byte data"); result = 0; } return result; } //----- (006F7650) -------------------------------------------------------- bool __thiscall sub_6F7650(unsigned __int8 **this, char *a2, int a3) { unsigned __int8 **v3; // esi v3 = this; sscanf(a2, "%d", &a2); return a2 == (char *)*v3[2]; } //----- (006F7680) -------------------------------------------------------- int __thiscall sub_6F7680(_DWORD *this) { return this[2]; } //----- (006F7690) -------------------------------------------------------- signed int sub_6F7690() { return 3; } //----- (006F76C0) -------------------------------------------------------- int __thiscall sub_6F76C0(int this, int a2) { *(_DWORD *)(this + 8) = a2; return sub_6F52B0(*(_DWORD **)(this + 4)); } //----- (006F76E0) -------------------------------------------------------- char __thiscall sub_6F76E0(_WORD **this, _DWORD *a2) { _WORD **v2; // esi int v3; // eax char result; // al char v5; // [esp+Bh] [ebp-1h] v2 = this; v5 = 0; v3 = sub_6F82A0(a2, &v5); if ( v5 && v3 < 0x10000 ) { *v2[2] = v3; result = 1; } else { sub_6F8030(a2, (int)"Cannot read word data"); result = 0; } return result; } //----- (006F7730) -------------------------------------------------------- bool __thiscall sub_6F7730(unsigned __int16 **this, char *a2, int a3) { unsigned __int16 **v3; // esi v3 = this; sscanf(a2, "%d", &a2); return a2 == (char *)*v3[2]; } //----- (006F7760) -------------------------------------------------------- int __thiscall sub_6F7760(_DWORD *this) { return this[2]; } //----- (006F77A0) -------------------------------------------------------- int __thiscall sub_6F77A0(int this, int a2) { *(_DWORD *)(this + 8) = a2; return sub_6F52B0(*(_DWORD **)(this + 4)); } //----- (006F77C0) -------------------------------------------------------- char __thiscall sub_6F77C0(_DWORD **this, _DWORD *a2) { _DWORD **v2; // esi int v3; // eax char result; // al char v5; // [esp+Bh] [ebp-1h] v2 = this; v5 = 0; v3 = sub_6F82A0(a2, &v5); if ( v5 ) { *v2[2] = v3; result = 1; } else { sub_6F8030(a2, (int)"Cannot read dwrd data"); result = 0; } return result; } //----- (006F7810) -------------------------------------------------------- bool __thiscall sub_6F7810(char ***this, char *a2, int a3) { char ***v3; // esi v3 = this; sscanf(a2, "%d", &a2); return a2 == *v3[2]; } //----- (006F7840) -------------------------------------------------------- int __thiscall sub_6F7840(_DWORD *this) { return this[2]; } //----- (006F7860) -------------------------------------------------------- void __thiscall sub_6F7860(void *this) { *((_DWORD *)this + 128) = 0; memset(this, 0, 0x200u); } //----- (006F7880) -------------------------------------------------------- int __thiscall sub_6F7880(void *this, _DWORD *a2) { int result; // eax qmemcpy(this, a2, 0x208u); result = 0; memset(a2, 0, 0x200u); a2[128] = 0; return result; } //----- (006F78B0) -------------------------------------------------------- int __thiscall sub_6F78B0(_DWORD *this) { return this[128]; } //----- (006F78C0) -------------------------------------------------------- void *__thiscall sub_6F78C0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi void *result; // eax v2 = this; result = operator new[](a2); v2[128] = result; v2[129] = 0; return result; } //----- (006F78F0) -------------------------------------------------------- int __thiscall sub_6F78F0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 4))(this[129] + this[128]); v2[129] += result; return result; } //----- (006F7920) -------------------------------------------------------- _DWORD *__thiscall sub_6F7920(_DWORD *this, int a2, __int16 a3) { _DWORD *v3; // edi int v4; // esi _DWORD *result; // eax v3 = this; v4 = 0; while ( this[v4] ) { if ( ++v4 >= 128 ) return 0; } switch ( a3 ) { case 1: result = operator new(0xCu); if ( !result ) goto LABEL_16; result[2] = 0; *result = &ORFieldIndex::`vftable'; v3[v4] = result; break; case 2: result = operator new(0xCu); if ( !result ) goto LABEL_16; result[2] = 0; *result = &ORFieldString::`vftable'; v3[v4] = result; break; case 3: result = operator new(0xCu); if ( !result ) goto LABEL_16; result[2] = 0; *result = &ORFieldByte::`vftable'; v3[v4] = result; break; case 4: result = operator new(0xCu); if ( !result ) goto LABEL_16; result[2] = 0; *result = &ORFieldWord::`vftable'; v3[v4] = result; break; case 5: result = operator new(0xCu); if ( !result ) { LABEL_16: v3[v4] = 0; goto LABEL_17; } result[2] = 0; *result = &ORFieldDwrd::`vftable'; v3[v4] = result; break; default: LABEL_17: result = (_DWORD *)v3[v4]; break; } return result; } // 9FCBC8: using guessed type void *ORFieldIndex::`vftable'; // 9FCBE0: using guessed type void *ORFieldString::`vftable'; // 9FCBF8: using guessed type void *ORFieldByte::`vftable'; // 9FCC10: using guessed type void *ORFieldWord::`vftable'; // 9FCC28: using guessed type void *ORFieldDwrd::`vftable'; //----- (006F7A60) -------------------------------------------------------- char __thiscall sub_6F7A60(_DWORD *this, unsigned __int8 (__thiscall ***a2)(_DWORD, int, int)) { _DWORD *v2; // ebx int v3; // esi int v4; // eax v2 = this; v3 = 0; while ( 1 ) { v4 = v2[v3]; if ( v4 ) { if ( !(**a2)(a2, v4, v3) ) break; } if ( ++v3 >= 128 ) return 1; } return 0; } //----- (006F7AA0) -------------------------------------------------------- char __thiscall sub_6F7AA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi const char *v3; // eax char result; // al int v5; // ST00_4 v2 = this; v3 = (const char *)sub_6F83E0(a2); if ( v3 ) { v5 = v2[2]; *(_DWORD *)(v5 + 16) = 0; *(_DWORD *)(v5 + 12) = 0; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 4) = 0; *(_DWORD *)v5 = 0; strncpy((char *)v5, v3, 0x14u); result = 1; } else { sub_6F8030(a2, (int)"Cannot read index data"); result = 0; } return result; } //----- (006F7AF0) -------------------------------------------------------- bool __thiscall sub_6F7AF0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // eax v3 = (_DWORD *)this[2]; return *a3 == *v3 && a3[1] == v3[1] && a3[2] == v3[2] && a3[3] == v3[3] && a3[4] == v3[4]; } //----- (006F7B30) -------------------------------------------------------- char __thiscall sub_6F7B30(void *this, _DWORD *a2) { void *v2; // esi const char *v3; // edi char result; // al unsigned __int16 v5; // ax int v6; // eax v2 = this; v3 = (const char *)sub_6F83E0(a2); if ( v3 ) { v5 = sub_6F52B0(*((_DWORD **)v2 + 1)); memset(*((void **)v2 + 2), 0, v5); v6 = sub_6F52B0(*((_DWORD **)v2 + 1)); strncpy(*((char **)v2 + 2), v3, v6); result = 1; } else { sub_6F8030(a2, (int)"Cannot read string data"); result = 0; } return result; } //----- (006F7BA0) -------------------------------------------------------- void __thiscall sub_6F7BA0(void *this) { _DWORD *v1; // edi signed int v2; // esi _DWORD *v3; // eax void *v4; // ST00_4 v1 = this; if ( *((_DWORD *)this + 128) ) operator delete(*((void **)this + 128)); v2 = 0; do { v3 = (_DWORD *)v1[v2]; if ( v3 ) { v4 = (void *)v1[v2]; *v3 = &ORField::`vftable'; operator delete(v4); } ++v2; } while ( v2 < 128 ); } // 9FCBB0: using guessed type void *ORField::`vftable'; //----- (006F7BF0) -------------------------------------------------------- char *__thiscall sub_6F7BF0(char *this) { char *result; // eax unsigned __int8 *v2; // edx signed int v3; // esi unsigned __int8 v4; // bl unsigned __int8 v5; // bl unsigned __int8 v6; // bl unsigned __int8 v7; // bl unsigned __int8 v8; // bl result = this; v2 = (unsigned __int8 *)(this + 1); v3 = 4; do { v4 = *(v2 - 1); if ( v4 >= 0x41u && v4 <= 0x5Au ) *(v2 - 1) = v4 + 32; v5 = *v2; if ( *v2 >= 0x41u && v5 <= 0x5Au ) *v2 = v5 + 32; v6 = v2[1]; if ( v6 >= 0x41u && v6 <= 0x5Au ) v2[1] = v6 + 32; v7 = v2[2]; if ( v7 >= 0x41u && v7 <= 0x5Au ) v2[2] = v7 + 32; v8 = v2[3]; if ( v8 >= 0x41u && v8 <= 0x5Au ) v2[3] = v8 + 32; v2 += 5; --v3; } while ( v3 ); return result; } //----- (006F7D70) -------------------------------------------------------- _DWORD *__thiscall sub_6F7D70(_DWORD *this) { _DWORD *result; // eax result = this; this[8] = 0; return result; } //----- (006F7D90) -------------------------------------------------------- char __thiscall sub_6F7D90(_DWORD *this, signed int a2) { int v3; // edx int v4; // eax if ( a2 <= 32 ) return 1; v3 = this[8]; v4 = 0; if ( v3 <= 0 ) return 0; while ( *((char *)this + v4) != a2 ) { if ( ++v4 >= v3 ) return 0; } return 1; } //----- (006F7DD0) -------------------------------------------------------- _DWORD *__thiscall sub_6F7DD0(_DWORD *this) { _DWORD *result; // eax result = this; this[8] = 0; return result; } //----- (006F7E20) -------------------------------------------------------- _DWORD *__thiscall sub_6F7E20(_DWORD *this) { _DWORD *result; // eax result = this; this[16] = 0; return result; } //----- (006F7E40) -------------------------------------------------------- int __thiscall sub_6F7E40(_DWORD *this, int a2) { int result; // eax int v3; // esi int v4; // edx result = a2; v3 = this[16]; v4 = 0; if ( v3 > 0 ) { while ( *((char *)this + 2 * v4) != a2 ) { if ( ++v4 >= v3 ) return result; } result = *((char *)this + 2 * v4 + 1); } return result; } //----- (006F7E70) -------------------------------------------------------- _BYTE *__thiscall sub_6F7E70(_BYTE *this) { _BYTE *result; // eax result = this; *this = 59; return result; } //----- (006F7EA0) -------------------------------------------------------- _WORD *__thiscall sub_6F7EA0(_WORD *this) { _WORD *result; // eax result = this; *this = 23899; return result; } //----- (006F7EC0) -------------------------------------------------------- bool __thiscall sub_6F7EC0(char *this, int a2) { return *this == a2; } //----- (006F7ED0) -------------------------------------------------------- bool __thiscall sub_6F7ED0(char *this, int a2) { return this[1] == a2; } //----- (006F7F20) -------------------------------------------------------- int __thiscall sub_6F7F20(int this, int a2) { int result; // eax result = a2; *(_DWORD *)(this + 4) = a2; *(_BYTE *)(this + 8) = 1; return result; } //----- (006F7F70) -------------------------------------------------------- _DWORD *__thiscall sub_6F7F70(_DWORD *this, int a2, int a3) { _DWORD *result; // eax result = this; *this = a2; this[514] = 0; this[513] = -1; this[515] = a3; return result; } //----- (006F7FB0) -------------------------------------------------------- signed int __thiscall sub_6F7FB0(_DWORD *this) { int v1; // edx signed int result; // eax int v3; // esi int v4; // edi int v5; // edx while ( 1 ) { v1 = this[514]; if ( this[513] < v1 ) break; result = *((unsigned __int8 *)this + v1 + 4); this[514] = v1 + 1; if ( result == 999 ) break; v3 = this[515]; if ( result == *(char *)(v3 + 116) ) { this[514] = 0; this[513] = -1; } else if ( result > 32 ) { v4 = *(_DWORD *)(v3 + 44); v5 = 0; if ( v4 <= 0 ) return result; while ( *(char *)(v5 + v3 + 12) != result ) { if ( ++v5 >= v4 ) return result; } } } return 999; } //----- (006F8030) -------------------------------------------------------- int __thiscall sub_6F8030(_DWORD *this, int a2) { int result; // eax result = this[515]; *(_DWORD *)(result + 4) = a2; *(_BYTE *)(result + 8) = 1; return result; } //----- (006F8050) -------------------------------------------------------- int __thiscall sub_6F8050(_DWORD *this, _BYTE *a2) { int result; // eax int v3; // esi int v4; // edx int v5; // edx result = 0; while ( 1 ) { v3 = this[514]; if ( this[513] < v3 ) break; v4 = *((unsigned __int8 *)this + v3 + 4); this[514] = v3 + 1; if ( (unsigned int)(v4 - 48) > 7 ) break; result = v4 + 8 * result - 48; *a2 = 1; } v5 = this[514]; if ( v5 > 0 ) this[514] = v5 - 1; return result; } //----- (006F80B0) -------------------------------------------------------- int __thiscall sub_6F80B0(_DWORD *this, _BYTE *a2) { int result; // eax int v3; // esi int v4; // edx int v5; // edx result = 0; while ( 1 ) { v3 = this[514]; if ( this[513] < v3 ) break; v4 = *((unsigned __int8 *)this + v3 + 4); this[514] = v3 + 1; if ( (unsigned int)(v4 - 48) > 9 ) break; result = v4 + 10 * result - 48; *a2 = 1; } v5 = this[514]; if ( v5 > 0 ) this[514] = v5 - 1; return result; } //----- (006F8110) -------------------------------------------------------- int __thiscall sub_6F8110(_DWORD *this, _BYTE *a2) { int result; // eax int v3; // esi int v4; // edx int v5; // edx result = 0; while ( 1 ) { v3 = this[514]; if ( this[513] < v3 ) break; v4 = *((unsigned __int8 *)this + v3 + 4); this[514] = v3 + 1; if ( (unsigned int)(v4 - 48) > 9 ) { if ( (unsigned int)(v4 - 65) > 5 ) { if ( (unsigned int)(v4 - 97) > 5 ) break; result = v4 - 87 + 16 * result; *a2 = 1; } else { result = v4 - 55 + 16 * result; *a2 = 1; } } else { result = v4 - 48 + 16 * result; *a2 = 1; } } v5 = this[514]; if ( v5 > 0 ) this[514] = v5 - 1; return result; } //----- (006F8190) -------------------------------------------------------- int __thiscall sub_6F8190(_DWORD *this) { int v1; // ebx int result; // eax signed int v3; // edi int v4; // edx int v5; // esi v1 = this[513]; result = 0; v3 = 0; while ( 1 ) { v4 = this[514]; if ( v1 < v4 ) break; v5 = *((unsigned __int8 *)this + v4 + 4); this[514] = v4 + 1; if ( (unsigned int)(v5 - 48) > 7 ) break; ++v3; result = v5 + 8 * result - 48; if ( v3 >= 3 ) return result; } return 999; } //----- (006F81E0) -------------------------------------------------------- int __thiscall sub_6F81E0(_DWORD *this) { int v1; // ebx int result; // eax signed int v3; // edi int v4; // edx int v5; // esi v1 = this[513]; result = 0; v3 = 0; while ( 1 ) { v4 = this[514]; if ( v1 < v4 ) break; v5 = *((unsigned __int8 *)this + v4 + 4); this[514] = v4 + 1; if ( (unsigned int)(v5 - 48) > 9 ) break; ++v3; result = v5 + 10 * result - 48; if ( v3 >= 3 ) return result; } return 999; } //----- (006F8230) -------------------------------------------------------- int __thiscall sub_6F8230(_DWORD *this) { int v1; // ebx int result; // eax signed int v3; // edi int v4; // esi int v5; // edx int v6; // edx v1 = this[513]; result = 0; v3 = 0; while ( 1 ) { v4 = this[514]; if ( v1 < v4 ) break; v5 = *((unsigned __int8 *)this + v4 + 4); this[514] = v4 + 1; if ( (unsigned int)(v5 - 48) > 9 ) { if ( (unsigned int)(v5 - 65) > 5 ) { if ( (unsigned int)(v5 - 97) > 5 ) return 999; v6 = v5 - 87; } else { v6 = v5 - 55; } } else { v6 = v5 - 48; } ++v3; result = v6 + 16 * result; if ( v3 >= 2 ) return result; } return 999; } //----- (006F82A0) -------------------------------------------------------- int __thiscall sub_6F82A0(_DWORD *this, _BYTE *a2) { signed int v2; // eax _DWORD *v3; // ecx int result; // eax bool v5; // zf int v6; // eax int v7; // edx int v8; // eax v2 = sub_6F7FB0(this); if ( v2 == 45 ) return -sub_6F82A0(a2); v5 = v2 == 48; v6 = v3[514]; if ( v5 ) { if ( v3[513] >= v6 && (v7 = *((unsigned __int8 *)v3 + v6 + 4), v3[514] = v6 + 1, v7 == 120) ) { result = sub_6F8110(v3, a2); } else { v8 = v3[514]; if ( v8 > 0 ) v3[514] = v8 - 1; *a2 = 1; result = sub_6F8050(v3, a2); } } else { if ( v6 > 0 ) v3[514] = v6 - 1; result = sub_6F80B0(v3, a2); } return result; } //----- (006F8320) -------------------------------------------------------- char __thiscall sub_6F8320(_DWORD *this) { int v1; // ecx int v3; // eax if ( sub_6F7FB0(this) == 999 ) return 1; v3 = *(_DWORD *)(v1 + 2060); *(_DWORD *)(v3 + 4) = "Extra data exist"; *(_BYTE *)(v3 + 8) = 1; return 0; } //----- (006F8350) -------------------------------------------------------- signed int __thiscall sub_6F8350(_DWORD *this) { signed int result; // eax _DWORD *v2; // ecx int v3; // ecx int v4; // eax signed int v5; // edx int v6; // ecx result = sub_6F7FB0(this); if ( result == 999 ) { v3 = v2[515]; *(_DWORD *)(v3 + 4) = "Unexpected EOF"; *(_BYTE *)(v3 + 8) = 1; return result; } if ( result == 92 ) { v4 = v2[514]; if ( v2[513] >= v4 ) { v5 = *((unsigned __int8 *)v2 + v4 + 4); v2[514] = v4 + 1; } else { v5 = 999; } result = 999; switch ( v5 ) { case 100: result = sub_6F81E0(v2); break; case 111: result = sub_6F8190(v2); break; case 120: result = sub_6F8230(v2); break; default: LABEL_14: v6 = v2[515]; *(_DWORD *)(v6 + 4) = "Invalid character"; *(_BYTE *)(v6 + 8) = 1; return result; } if ( result < 256 ) return result; goto LABEL_14; } return result; } //----- (006F83E0) -------------------------------------------------------- int __thiscall sub_6F83E0(_DWORD *this) { _DWORD *v1; // esi signed int v2; // eax int v3; // ecx int v4; // edi int v5; // edx int v6; // ecx signed int v7; // eax int v8; // ebx int v9; // edx int v10; // edi int v11; // ecx int v12; // eax int v13; // eax signed int v14; // ebx int v15; // edi int v16; // esi int v18; // [esp+10h] [ebp-Ch] signed int v19; // [esp+18h] [ebp-4h] v1 = this; while ( 1 ) { v2 = sub_6F7FB0(v1); v3 = v1[515]; v4 = *(_DWORD *)(v3 + 152); v5 = 0; if ( v4 <= 0 ) break; while ( *(char *)(v5 + v3 + 120) != v2 ) { if ( ++v5 >= v4 ) goto LABEL_5; } } LABEL_5: if ( v2 == 999 ) return 0; *((_BYTE *)v1 + 2064) = v2; v19 = 1; do { v6 = v1[514]; if ( v1[513] < v6 ) break; v7 = *((unsigned __int8 *)v1 + v6 + 4); v8 = v6 + 1; v18 = v6 + 1; v1[514] = v6 + 1; if ( v7 == 999 ) break; v9 = v1[515]; v10 = *(_DWORD *)(v9 + 152); v11 = 0; if ( v10 <= 0 ) { LABEL_13: if ( *(char *)(v9 + 117) == v7 || *(char *)(v9 + 118) == v7 ) { if ( v8 > 0 ) v1[514] = v8 - 1; break; } if ( v7 == 92 ) { if ( v1[513] < v8 ) goto LABEL_31; v12 = *((unsigned __int8 *)v1 + v8 + 4); v1[514] = v8 + 1; switch ( v12 ) { case 100: v13 = sub_6F81E0(v1); break; case 111: v13 = sub_6F8190(v1); break; case 120: v13 = sub_6F8230(v1); break; default: goto LABEL_31; } if ( v13 >= 256 ) { LABEL_31: v16 = v1[515]; *(_DWORD *)(v16 + 4) = "Invalid character"; *(_BYTE *)(v16 + 8) = 1; return 0; } v14 = v13; } else { v14 = v7; } v15 = v1[515]; if ( sub_6F7D90((_DWORD *)(v15 + 12), v14) ) break; *((_BYTE *)v1 + v19 + 2064) = sub_6F7E40((_DWORD *)(v15 + 48), v14); } else { while ( *(char *)(v11 + v9 + 120) != v7 ) { if ( ++v11 >= v10 ) { v8 = v18; goto LABEL_13; } } --v19; } ++v19; } while ( v19 < 2048 ); *((_BYTE *)v1 + v19 + 2064) = 0; return (int)(v1 + 516); } //----- (006F85B0) -------------------------------------------------------- char __thiscall sub_6F85B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax char result; // al signed int v5; // eax v2 = this; if ( this[8] >= 32 ) { v3 = a2[515]; *(_DWORD *)(v3 + 4) = "Too many delimiters"; *(_BYTE *)(v3 + 8) = 1; return 0; } v5 = sub_6F8350(a2); if ( v5 >= 256 ) return 0; *((_BYTE *)v2 + v2[8]) = v5; result = 1; ++v2[8]; return result; } //----- (006F8600) -------------------------------------------------------- char __thiscall sub_6F8600(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax char result; // al signed int v5; // eax v2 = this; if ( this[8] >= 32 ) { v3 = a2[515]; *(_DWORD *)(v3 + 4) = "Too many delimiters"; *(_BYTE *)(v3 + 8) = 1; return 0; } v5 = sub_6F8350(a2); if ( v5 >= 256 ) return 0; *((_BYTE *)v2 + v2[8]) = v5; result = 1; ++v2[8]; return result; } //----- (006F8650) -------------------------------------------------------- char __thiscall sub_6F8650(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax char result; // al signed int v5; // eax signed int v6; // eax v2 = this; if ( this[16] < 32 ) { v5 = sub_6F8350(a2); if ( v5 < 256 && (*((_BYTE *)v2 + 2 * v2[16]) = v5, v6 = sub_6F8350(a2), v6 < 256) ) { *((_BYTE *)v2 + 2 * v2[16] + 1) = v6; result = 1; ++v2[16]; } else { result = 0; } } else { v3 = a2[515]; *(_DWORD *)(v3 + 4) = "Too many exchange"; *(_BYTE *)(v3 + 8) = 1; result = 0; } return result; } //----- (006F86C0) -------------------------------------------------------- char __thiscall sub_6F86C0(_BYTE *this, _DWORD *a2) { _BYTE *v2; // esi signed int v3; // eax v2 = this; v3 = sub_6F8350(a2); if ( v3 >= 256 ) return 0; *v2 = v3; return 1; } //----- (006F86F0) -------------------------------------------------------- char __thiscall sub_6F86F0(_BYTE *this, _DWORD *a2) { _BYTE *v2; // esi signed int v3; // eax signed int v5; // eax v2 = this; v3 = sub_6F8350(a2); if ( v3 >= 256 ) return 0; *v2 = v3; v5 = sub_6F8350(a2); if ( v5 >= 256 ) return 0; v2[1] = v5; return 1; } //----- (006F8730) -------------------------------------------------------- _DWORD *__thiscall sub_6F8730(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = "Noerr"; *((_BYTE *)this + 8) = 0; return result; } //----- (006F8750) -------------------------------------------------------- char *__thiscall sub_6F8750(char *this, char *a2) { char *v2; // esi char *v3; // edi _DWORD *v4; // eax signed int v5; // eax _DWORD *v6; // ecx int v7; // esi char *result; // eax int v9; // esi const char *v10; // eax v2 = this; v3 = this + 4; do { if ( !fgets(v3, 2048, *(FILE **)v2) ) { *((_DWORD *)v2 + 513) = -1; v9 = *((_DWORD *)v2 + 515); *(_DWORD *)(v9 + 4) = "Unexpected EOF"; *(_BYTE *)(v9 + 8) = 1; return 0; } *((_DWORD *)v2 + 513) = strlen(v3); v4 = (_DWORD *)*((_DWORD *)v2 + 515); *((_DWORD *)v2 + 514) = 0; ++*v4; v5 = sub_6F7FB0(v2); } while ( v5 == 999 ); if ( v5 == 35 ) { v10 = (const char *)sub_6F83E0(v6); *((_DWORD *)a2 + 4) = 0; *((_DWORD *)a2 + 3) = 0; *((_DWORD *)a2 + 2) = 0; *((_DWORD *)a2 + 1) = 0; *(_DWORD *)a2 = 0; strncpy(a2, v10, 0x14u); sub_6F7BF0(a2); result = a2; } else { v7 = *((_DWORD *)v2 + 515); *(_DWORD *)(v7 + 4) = "# comment expected"; *(_BYTE *)(v7 + 8) = 1; result = 0; } return result; } //----- (006F88B0) -------------------------------------------------------- char __thiscall sub_6F88B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char result; // al v3 = this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_8F86A0(&unk_BA6B10, this); } else { sub_6F3D10(&off_AB7F2C, 8, 88, 0, 0); result = sub_8F86A0(&unk_BA6B10, v3); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006F8900) -------------------------------------------------------- char __thiscall sub_6F8900(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG v16; // STD0_4 const CHAR *v17; // eax int v18; // eax int v19; // STD0_4 int v20; // eax volatile LONG v21; // STD0_4 const CHAR *v22; // eax int v23; // eax int v24; // STD0_4 int v25; // eax volatile LONG *v26; // eax volatile LONG *v27; // ecx int v28; // STD0_4 int v29; // eax volatile LONG v30; // STD0_4 const CHAR *v31; // eax int v32; // eax int v33; // STD0_4 int v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // ecx int v37; // STD0_4 int v38; // eax volatile LONG v39; // STD0_4 const CHAR *v40; // eax int v41; // eax int v42; // STD0_4 int v43; // eax volatile LONG *v44; // eax volatile LONG *v45; // ecx int v46; // STD0_4 int v47; // eax volatile LONG v48; // STD0_4 const CHAR *v49; // eax int v50; // eax int v51; // STD0_4 int v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // ecx int v55; // STD0_4 int v56; // eax volatile LONG *v57; // edi const CHAR *v58; // eax volatile LONG **v59; // edi volatile LONG *v60; // eax volatile LONG *v61; // edi int v62; // STB4_4 int v63; // STB0_4 int v64; // STAC_4 int v65; // eax volatile LONG *v66; // edi const CHAR *v67; // eax volatile LONG **v68; // edi volatile LONG *v69; // eax volatile LONG *v70; // edi int v71; // STB4_4 int v72; // STB0_4 int v73; // STAC_4 int v74; // eax volatile LONG *v75; // edi volatile LONG v76; // ebx const CHAR *v77; // eax int v78; // [esp+D4h] [ebp-24h] int v79; // [esp+D8h] [ebp-20h] int v80; // [esp+DCh] [ebp-1Ch] int v81; // [esp+E0h] [ebp-18h] int v82; // [esp+E4h] [ebp-14h] int v83; // [esp+E8h] [ebp-10h] int v84; // [esp+F4h] [ebp-4h] volatile LONG *v85; // [esp+100h] [ebp+8h] volatile LONG **v86; // [esp+100h] [ebp+8h] int v87; // [esp+100h] [ebp+8h] volatile LONG *v88; // [esp+100h] [ebp+8h] volatile LONG **v89; // [esp+100h] [ebp+8h] int v90; // [esp+100h] [ebp+8h] int v91; // [esp+100h] [ebp+8h] volatile LONG *v92; // [esp+100h] [ebp+8h] volatile LONG **v93; // [esp+100h] [ebp+8h] int v94; // [esp+100h] [ebp+8h] int v95; // [esp+100h] [ebp+8h] volatile LONG *v96; // [esp+100h] [ebp+8h] volatile LONG **v97; // [esp+100h] [ebp+8h] int v98; // [esp+100h] [ebp+8h] int v99; // [esp+100h] [ebp+8h] volatile LONG *v100; // [esp+100h] [ebp+8h] volatile LONG **v101; // [esp+100h] [ebp+8h] int v102; // [esp+100h] [ebp+8h] int v103; // [esp+100h] [ebp+8h] volatile LONG v104; // [esp+100h] [ebp+8h] volatile LONG v105; // [esp+100h] [ebp+8h] v2 = (int)this; v81 = 0; v84 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v81; v84 = -1; if ( !v81 || InterlockedDecrement((volatile LONG *)(v81 + 4)) ) return 0; v5 = v81 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\WeddingEntry.nif"); sub_8F66B0(v8, (int)&v81, v7); if ( !v81 ) return 0; v9 = sub_8FB140(v81, (int)"Frame", (int)&v82, (int)&v83, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"WeddingProposeInputWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v81; v84 = -1; if ( !v81 || InterlockedDecrement((volatile LONG *)(v81 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v82; v80 = v83; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v81, (int)"Theme", (int)&v82, (int)&v83, v11); else v12 = sub_8FB140(v81, (int)"Theme", (int)&v82, (int)&v83, 0); sub_8F3EB0(v82 - v10, v83 - v80, (int)v12, v2, 0, 0); v13 = sub_8FB140(v81, (int)"Panel01", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v13, v2, 0, 0); v14 = sub_8FB140(v81, (int)"Panel02", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v14, v2, 0, 0); if ( !sub_8F71E0(v81, (int)"WinTitle", &v82, &v83, &v78, &v79) ) { v84 = -1; sub_410C00(&v81); return 0; } v15 = sub_421050(0); v85 = sub_8F4A20(v82 - v10, v83, v78, v79, v15, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v85 + 488))(v85, 5); (*(void (__stdcall **)(int *))(*v85 + 468))(&dword_AA8D98); v16 = *v85; v17 = sub_40C190(-469828064); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v16 + 472))(v85, v17); (*(void (__stdcall **)(_DWORD))(*v85 + 240))(0); v86 = sub_8FB140(v81, (int)"ClsNor", (int)&v82, (int)&v83, v3); sub_8FB650(v86, v81, (int)"ClsClick"); sub_8FB650(v86, v81, (int)"ClsOver"); sub_90C8D0(v82 - v10, v83 - v80, (int)v86, v2); v18 = *sub_8FB140(v81, (int)"Text01", (int)&v82, (int)&v83, v3)[9]; v87 = *(_DWORD *)(v18 + 24); v19 = *(_DWORD *)(v18 + 20); v20 = sub_421050(0); v88 = sub_8F4A20(v82 - v10, v83, v19, v87, v20, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v88 + 488))(v88, 5); (*(void (__stdcall **)(int *))(*v88 + 468))(&dword_AA8C68); v21 = *v88; v22 = sub_40C190(760293503); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v21 + 472))(v88, v22); (*(void (__stdcall **)(_DWORD))(*v88 + 240))(0); v89 = sub_8FB140(v81, (int)"Text01_Field", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v89, v2, 0, 0); v23 = *v89[9]; v90 = *(_DWORD *)(v23 + 24); v24 = *(_DWORD *)(v23 + 20); v25 = sub_421050(0); v26 = sub_8F4A20(v82 - v10, v83 + 2, v24, v90, v25, v2, 0, 0); *(_DWORD *)(v2 + 344) = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 344) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 344) + 472))(&unk_9FCD07); v27 = sub_8FB140(v81, (int)"Text02", (int)&v82, (int)&v83, v3)[9]; v91 = *(_DWORD *)(*v27 + 24); v28 = *(_DWORD *)(*v27 + 20); v29 = sub_421050(0); v92 = sub_8F4A20(v82 - v10, v83, v28, v91, v29, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 5); (*(void (__stdcall **)(int *))(*v92 + 468))(&dword_AA8C68); v30 = *v92; v31 = sub_40C190(-570239253); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v30 + 472))(v92, v31); (*(void (__stdcall **)(_DWORD))(*v92 + 240))(0); v93 = sub_8FB140(v81, (int)"Text02_Field", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v93, v2, 0, 0); v32 = *v93[9]; v94 = *(_DWORD *)(v32 + 24); v33 = *(_DWORD *)(v32 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v82 - v10, v83 + 2, v33, v94, v34, v2, 0, 0); *(_DWORD *)(v2 + 348) = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 348) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 348) + 472))(&unk_9FCD0E); v36 = sub_8FB140(v81, (int)"Text03", (int)&v82, (int)&v83, v3)[9]; v95 = *(_DWORD *)(*v36 + 24); v37 = *(_DWORD *)(*v36 + 20); v38 = sub_421050(0); v96 = sub_8F4A20(v82 - v10, v83, v37, v95, v38, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v96 + 488))(v96, 5); (*(void (__stdcall **)(int *))(*v96 + 468))(&dword_AA8C68); v39 = *v96; v40 = sub_40C190(659251035); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v39 + 472))(v96, v40); (*(void (__stdcall **)(_DWORD))(*v96 + 240))(0); v97 = sub_8FB140(v81, (int)"Text03_Field", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v97, v2, 0, 0); v41 = *v97[9]; v98 = *(_DWORD *)(v41 + 24); v42 = *(_DWORD *)(v41 + 20); v43 = sub_421050(0); v44 = sub_8F4A20(v82 - v10, v83 + 2, v42, v98, v43, v2, 0, 0); *(_DWORD *)(v2 + 352) = v44; (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 352) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 352) + 472))(&unk_9FCD0F); v45 = sub_8FB140(v81, (int)"Text04", (int)&v82, (int)&v83, v3)[9]; v99 = *(_DWORD *)(*v45 + 24); v46 = *(_DWORD *)(*v45 + 20); v47 = sub_421050(0); v100 = sub_8F4A20(v82 - v10, v83, v46, v99, v47, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v100 + 488))(v100, 5); (*(void (__stdcall **)(int *))(*v100 + 468))(&dword_AA8C68); v48 = *v100; v49 = sub_40C190(-2031699776); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v48 + 472))(v100, v49); (*(void (__stdcall **)(_DWORD))(*v100 + 240))(0); v101 = sub_8FB140(v81, (int)"Text04_Field", (int)&v82, (int)&v83, v3); sub_8F3EB0(v82 - v10, v83, (int)v101, v2, 0, 0); v50 = *v101[9]; v102 = *(_DWORD *)(v50 + 24); v51 = *(_DWORD *)(v50 + 20); v52 = sub_421050(0); v53 = sub_8F4A20(v82 - v10, v83 + 2, v51, v102, v52, v2, 0, 0); *(_DWORD *)(v2 + 356) = v53; (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 356) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 356) + 240))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)(v2 + 356) + 472))(&unk_9FCD27); v54 = sub_8FB140(v81, (int)"Text05", (int)&v82, (int)&v83, v3)[9]; v103 = *(_DWORD *)(*v54 + 24); v55 = *(_DWORD *)(*v54 + 20); v56 = sub_421050(0); v57 = sub_8F4A20(v82 - v10, v83, v55, v103, v56, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v57 + 468))(v57, &dword_AA8C68); v104 = *v57; v58 = sub_40C190(1973414889); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v104 + 472))(v57, v58); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v57 + 240))(v57, 0); v59 = sub_8FB140(v81, (int)"Btn01Nor", (int)&v82, (int)&v83, v3); sub_8FB650(v59, v81, (int)"Btn01Click"); sub_8FB650(v59, v81, (int)"Btn01Over"); v60 = sub_8FE0F0(v82, v83, (int)v59, v2, 0, 0, 0); v61 = v60; v62 = (int)v60; v63 = sub_421050(0); v64 = (*(int (__thiscall **)(volatile LONG *))(*v61 + 148))(v61); v65 = (*(int (__thiscall **)(volatile LONG *))(*v61 + 144))(v61); v66 = sub_8F4A20(0, 1, v65, v64, v63, v62, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 488))(v66, 5); v105 = *v66; v67 = sub_40C190(-417472212); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v105 + 472))(v66, v67); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v66 + 240))(v66, 0); v68 = sub_8FB140(v81, (int)"Btn02Nor", (int)&v82, (int)&v83, v3); sub_8FB650(v68, v81, (int)"Btn02Click"); sub_8FB650(v68, v81, (int)"Btn02Over"); v69 = sub_8FE0F0(v82, v83, (int)v68, v2, 1, 0, 0); v70 = v69; v71 = (int)v69; v72 = sub_421050(0); v73 = (*(int (__thiscall **)(volatile LONG *))(*v70 + 148))(v70); v74 = (*(int (__thiscall **)(volatile LONG *))(*v70 + 144))(v70); v75 = sub_8F4A20(0, 1, v74, v73, v72, v71, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 5); v76 = *v75; v77 = sub_40C190(-553526490); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v75, v77); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v75 + 240))(v75, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v84 = -1; sub_410C00(&v81); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006F9420) -------------------------------------------------------- int __thiscall sub_6F9420(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // eax int v4; // edx int v5; // ecx int v6; // eax _DWORD *v7; // ecx int v8; // eax int v9; // edx int v10; // ecx int v11; // eax _DWORD *v12; // ecx const char *v13; // eax const char *v14; // eax char v16; // [esp+8h] [ebp-5Ch] char v17; // [esp+28h] [ebp-3Ch] int v18; // [esp+48h] [ebp-1Ch] int v19; // [esp+4Ch] [ebp-18h] int v20; // [esp+50h] [ebp-14h] int v21; // [esp+54h] [ebp-10h] int v22; // [esp+58h] [ebp-Ch] char v23; // [esp+5Ch] [ebp-8h] v2 = this; (*(void (__stdcall **)(void *))(*this[86] + 472))(&unk_9FCD2E); (*(void (__stdcall **)(void *))(*v2[87] + 472))(&unk_9FCD2F); (*(void (__stdcall **)(void *))(*v2[88] + 472))(&unk_9FCD36); (*(void (__stdcall **)(void *))(*v2[89] + 472))(&unk_9FCD37); v3 = *(_DWORD *)(a2 + 2); v4 = *(_DWORD *)(a2 + 10); v19 = *(_DWORD *)(a2 + 6); v5 = *(_DWORD *)(a2 + 18); v18 = v3; v6 = *(_DWORD *)(a2 + 14); v22 = v5; v7 = v2[86]; v20 = v4; v21 = v6; v23 = 0; (*(void (__stdcall **)(int *))(*v7 + 472))(&v18); v8 = *(_DWORD *)(a2 + 22); v9 = *(_DWORD *)(a2 + 30); v19 = *(_DWORD *)(a2 + 26); v10 = *(_DWORD *)(a2 + 38); v18 = v8; v11 = *(_DWORD *)(a2 + 34); v22 = v10; v12 = v2[87]; v20 = v9; v21 = v11; v23 = 0; (*(void (__stdcall **)(int *))(*v12 + 472))(&v18); if ( a2 != -66 ) { v13 = sub_40A910(-1768432428); strftime(&v17, 0x1Fu, v13, (const struct tm *)(a2 + 66)); } (*(void (__stdcall **)(char *))(*v2[88] + 472))(&v17); if ( a2 != -102 ) { v14 = sub_40A910(-1768432428); strftime(&v16, 0x1Fu, v14, (const struct tm *)(a2 + 102)); } return (*(int (__stdcall **)(char *))(*v2[89] + 472))(&v16); } //----- (006F9580) -------------------------------------------------------- int __cdecl sub_6F9580(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x168u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WeddingEntryWin::`vftable'; *(_DWORD *)(v2 + 232) = &WeddingEntryWin::`vftable'; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FCE24: using guessed type void *WeddingEntryWin::`vftable'; // 9FCE44: using guessed type void *WeddingEntryWin::`vftable'; //----- (006F96E0) -------------------------------------------------------- void *__thiscall sub_6F96E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WeddingEntryWin::`vftable'; *((_DWORD *)this + 58) = &WeddingEntryWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FCE24: using guessed type void *WeddingEntryWin::`vftable'; // 9FCE44: using guessed type void *WeddingEntryWin::`vftable'; //----- (006F9720) -------------------------------------------------------- _DWORD *__thiscall sub_6F9720(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &WeddingInfoWin::`vftable'; v1[58] = &WeddingInfoWin::`vftable'; sub_8D0610((_BYTE *)v1 + 344); v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FD2D0: using guessed type void *WeddingInfoWin::`vftable'; // 9FD2EC: using guessed type void *WeddingInfoWin::`vftable'; //----- (006F97D0) -------------------------------------------------------- char sub_6F97D0() { _BYTE *v0; // eax v0 = (_BYTE *)sub_6FD400(); if ( v0 && *v0 ) LOBYTE(v0) = sub_6F3D10(&off_AB7F2C, 4, 147, 0, 0); return (char)v0; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006F9800) -------------------------------------------------------- char sub_6F9800() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "WeddingInfo"); return (char)v0; } //----- (006F9830) -------------------------------------------------------- int __thiscall sub_6F9830(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (006F9890) -------------------------------------------------------- char __thiscall sub_6F9890(float *this, float a2) { float *v2; // esi _BYTE *v3; // eax v2 = this; v3 = (_BYTE *)sub_6FD400(); if ( v3 ) { if ( *v3 ) { if ( !((_BYTE)v2[7] & 1) ) { v3 = (_BYTE *)sub_8D0630(v2 + 86, a2); if ( v3 ) LOBYTE(v3) = sub_6F3D10(&off_AB7F2C, 4, 147, 0, 0); } } } return (char)v3; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006F98E0) -------------------------------------------------------- void __thiscall sub_6F98E0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(v1[74]); } // AD01E8: using guessed type int dword_AD01E8; //----- (006F9910) -------------------------------------------------------- int __thiscall sub_6F9910(_DWORD **this, _DWORD *a2) { _DWORD **v2; // esi int result; // eax v2 = this; result = sub_6FD400(); if ( result && *(_DWORD *)(result + 8) == *a2 && *(_DWORD *)(result + 12) == a2[1] && *(_DWORD *)(result + 16) == a2[2] && *(_DWORD *)(result + 20) == a2[3] && *(_DWORD *)(result + 24) == a2[4] ) { *(_BYTE *)result = 0; *(_DWORD *)(result + 4) = 0; *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 12) = 0; *(_DWORD *)(result + 16) = 0; *(_DWORD *)(result + 20) = 0; *(_DWORD *)(result + 24) = 0; *(_DWORD *)(result + 28) = -1; (*(void (__stdcall **)(void *))(*v2[93] + 472))(&unk_9FD0FA); (*(void (__stdcall **)(void *))(*v2[94] + 472))(&unk_9FD0FB); (*(void (__stdcall **)(void *))(*v2[95] + 472))(&unk_9FD109); (*(void (__stdcall **)(void *))(*v2[96] + 472))(&unk_9FD10A); (*(void (__stdcall **)(void *))(*v2[97] + 472))(&unk_9FD10B); result = (*(int (__stdcall **)(void *))(*v2[98] + 472))(&unk_9FD115); } return result; } //----- (006F9A10) -------------------------------------------------------- char __thiscall sub_6F9A10(void *this, int a2) { int v2; // esi void (__thiscall ***v3)(_DWORD, signed int); // esi char result; // al int v5; // edi char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax int v13; // eax const CHAR *v14; // eax volatile LONG **v15; // eax int v16; // eax const CHAR *v17; // eax int v18; // eax const CHAR *v19; // eax _DWORD *v20; // eax int v21; // eax volatile LONG **v22; // eax const char *v23; // eax const char *v24; // eax const char *v25; // eax const char *v26; // eax const char *v27; // eax const char *v28; // eax int v29; // eax int v30; // eax const CHAR *v31; // eax int v32; // eax int v33; // eax const CHAR *v34; // eax int v35; // eax int v36; // eax const CHAR *v37; // eax int v38; // eax int v39; // eax const CHAR *v40; // eax int v41; // eax int v42; // eax const CHAR *v43; // eax int v44; // eax int v45; // eax const CHAR *v46; // eax int v47; // eax int v48; // eax volatile LONG *v49; // eax const CHAR *v50; // eax int v51; // eax int v52; // edx int v53; // eax volatile LONG *v54; // STB8_4 volatile LONG *v55; // eax volatile LONG *v56; // ecx int v57; // eax int v58; // eax volatile LONG *v59; // eax int v60; // eax int v61; // edx int v62; // eax volatile LONG *v63; // eax int v64; // eax int v65; // eax volatile LONG *v66; // eax volatile LONG *v67; // ecx int v68; // eax volatile LONG *v69; // eax const CHAR *v70; // eax int v71; // eax int v72; // eax volatile LONG *v73; // eax volatile LONG *v74; // ecx int v75; // eax volatile LONG *v76; // eax const CHAR *v77; // eax int v78; // eax int v79; // eax volatile LONG *v80; // eax int v81; // [esp+D0h] [ebp-28h] int v82; // [esp+D4h] [ebp-24h] int v83; // [esp+D8h] [ebp-20h] int v84; // [esp+DCh] [ebp-1Ch] int v85; // [esp+E0h] [ebp-18h] int v86; // [esp+E4h] [ebp-14h] int v87; // [esp+E8h] [ebp-10h] int v88; // [esp+F4h] [ebp-4h] volatile LONG *v89; // [esp+100h] [ebp+8h] volatile LONG **v90; // [esp+100h] [ebp+8h] volatile LONG **v91; // [esp+100h] [ebp+8h] volatile LONG *v92; // [esp+100h] [ebp+8h] volatile LONG *v93; // [esp+100h] [ebp+8h] volatile LONG **v94; // [esp+100h] [ebp+8h] volatile LONG *v95; // [esp+100h] [ebp+8h] volatile LONG **v96; // [esp+100h] [ebp+8h] volatile LONG *v97; // [esp+100h] [ebp+8h] volatile LONG **v98; // [esp+100h] [ebp+8h] volatile LONG *v99; // [esp+100h] [ebp+8h] volatile LONG **v100; // [esp+100h] [ebp+8h] volatile LONG *v101; // [esp+100h] [ebp+8h] volatile LONG **v102; // [esp+100h] [ebp+8h] volatile LONG *v103; // [esp+100h] [ebp+8h] volatile LONG **v104; // [esp+100h] [ebp+8h] volatile LONG *v105; // [esp+100h] [ebp+8h] int v106; // [esp+100h] [ebp+8h] volatile LONG *v107; // [esp+100h] [ebp+8h] int v108; // [esp+100h] [ebp+8h] volatile LONG *v109; // [esp+100h] [ebp+8h] int v110; // [esp+100h] [ebp+8h] volatile LONG *v111; // [esp+100h] [ebp+8h] int v112; // [esp+100h] [ebp+8h] volatile LONG *v113; // [esp+100h] [ebp+8h] int v114; // [esp+100h] [ebp+8h] volatile LONG *v115; // [esp+100h] [ebp+8h] int v116; // [esp+100h] [ebp+8h] volatile LONG *v117; // [esp+100h] [ebp+8h] int v118; // [esp+100h] [ebp+8h] volatile LONG *v119; // [esp+100h] [ebp+8h] volatile LONG **v120; // [esp+100h] [ebp+8h] int v121; // [esp+100h] [ebp+8h] int v122; // [esp+100h] [ebp+8h] volatile LONG *v123; // [esp+100h] [ebp+8h] volatile LONG **v124; // [esp+100h] [ebp+8h] int v125; // [esp+100h] [ebp+8h] int v126; // [esp+100h] [ebp+8h] volatile LONG *v127; // [esp+100h] [ebp+8h] volatile LONG **v128; // [esp+100h] [ebp+8h] int v129; // [esp+100h] [ebp+8h] v2 = (int)this; v85 = 0; v88 = 0; if ( !sub_43D0D0(4u) ) goto LABEL_23; v5 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "\\Game\\WeddingInfo.nif"); sub_8F66B0(v6, (int)&v85, v5); if ( !v85 ) return 0; v7 = sub_8FB140(v85, (int)"Frame", (int)&v86, (int)&v87, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"WeddingInfoWin", 0) ) { LABEL_23: v3 = (void (__thiscall ***)(_DWORD, signed int))v85; v88 = -1; if ( v85 && !InterlockedDecrement((volatile LONG *)(v85 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } return 0; } v8 = v86; v9 = v87; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v85, (int)"Theme", (int)&v86, (int)&v87, v10); else v11 = sub_8FB140(v85, (int)"Theme", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87 - v9, (int)v11, v2, 0, 0); v12 = sub_8FB140(v85, (int)"Plane", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87, (int)v12, v2, 0, 0); if ( sub_8F71E0(v85, (int)"WinTitle", &v86, &v87, &v83, &v84) ) { v13 = sub_421050(0); v89 = sub_8F4A20(v86 - v8, v87, v83, v84, v13, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v89 + 488))(v89, 1); (*(void (__stdcall **)(int *))(*v89 + 468))(&dword_AA8D98); v82 = *v89; v14 = sub_40C190(-481277631); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v89, v14); (*(void (__stdcall **)(_DWORD))(*v89 + 240))(0); v90 = sub_8FB140(v85, (int)"ClsNor", (int)&v86, (int)&v87, 0); sub_8FB650(v90, v85, (int)"ClsClick"); sub_8FB650(v90, v85, (int)"ClsOver"); sub_8FE0F0(v86 - v8, v87 - v9, (int)v90, v2, 11, 0, 0); sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v85 + 72))("HelpLinkNor") ) { v91 = sub_8FB140(v85, (int)"HelpLinkNor", (int)&v86, (int)&v87, 0); sub_8FB650(v91, v85, (int)"HelpLinkClick"); sub_8FB650(v91, v85, (int)"HelpLinkOver"); sub_8FE0F0(v86 - v8, v87 - v9, (int)v91, v2, 17, 0, 0); } v15 = sub_8FB140(v85, (int)"IconSlot", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87, (int)v15, v2, 0, 0); sub_8FB140(v85, (int)"Text04", (int)&v86, (int)&v87, 0); v16 = sub_421050(9); v92 = sub_8F4A20(v86 - v8, v87 - v9, v83, v84, v16, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 5); v82 = *v92; v17 = sub_40C190(-923451580); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v92, v17); (*(void (__stdcall **)(_DWORD))(*v92 + 240))(0); sub_8FB140(v85, (int)"Category", (int)&v86, (int)&v87, 0); v18 = sub_421050(9); v93 = sub_8F4A20(v86 - v8, v87 - v9, v83, v84, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v93 + 488))(v93, 5); v82 = *v93; v19 = sub_4090F0(776608523); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v93, v19); (*(void (__stdcall **)(_DWORD))(*v93 + 240))(0); v20 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v85 + 72))("Base"); v21 = sub_85C050(v20, 8); v81 = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); LOBYTE(v88) = 1; v22 = sub_8FB140(v85, (int)"Base", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87 - v9, (int)v22, v2, 0, 0); v94 = sub_8FB140(v85, (int)"FriendNor", (int)&v86, (int)&v87, 0); sub_8FB650(v94, v85, (int)"FriendClick"); sub_8FB650(v94, v85, (int)"FriendOver"); v95 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v94, v2, 12, 0, 0); v23 = sub_40C190(-587993612); sub_8F2EA0((void **)v95, v23); *((_DWORD *)v95 + 68) = dword_AD01E8; v96 = sub_8FB140(v85, (int)"GuildNor", (int)&v86, (int)&v87, 0); sub_8FB650(v96, v85, (int)"GuildClick"); sub_8FB650(v96, v85, (int)"GuildOver"); v97 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v96, v2, 13, 0, 0); v24 = sub_40C190(-1679100684); sub_8F2EA0((void **)v97, v24); *((_DWORD *)v97 + 68) = dword_AD01E8; v98 = sub_8FB140(v85, (int)"MasterNor", (int)&v86, (int)&v87, 0); sub_8FB650(v98, v85, (int)"MasterClick"); sub_8FB650(v98, v85, (int)"MasterOver"); v99 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v98, v2, 15, 0, 0); v25 = sub_40C190(-196330948); sub_8F2EA0((void **)v99, v25); *((_DWORD *)v99 + 68) = dword_AD01E8; v100 = sub_8FB140(v85, (int)"WeddingNor", (int)&v86, (int)&v87, 0); sub_8FB650(v100, v85, (int)"WeddingClick"); sub_8FB650(v100, v85, (int)"WeddingOver"); v101 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v100, v2, 10, 0, 0); v26 = sub_40C190(-923451580); sub_8F2EA0((void **)v101, v26); *((_DWORD *)v101 + 68) = dword_AD01E8; v102 = sub_8FB140(v85, (int)"PartyMatchNor", (int)&v86, (int)&v87, 0); sub_8FB650(v102, v85, (int)"PartyMatchClick"); sub_8FB650(v102, v85, (int)"PartyMatchOver"); v103 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v102, v2, 14, 0, 0); v27 = sub_40C190(474697790); sub_8F2EA0((void **)v103, v27); *((_DWORD *)v103 + 68) = dword_AD01E8; v104 = sub_8FB140(v85, (int)"GuildAcademyNor", (int)&v86, (int)&v87, 0); sub_8FB650(v104, v85, (int)"GuildAcademyClick"); sub_8FB650(v104, v85, (int)"GuildAcademyOver"); v105 = sub_8FE0F0(v86 - v8, v87 - v9, (int)v104, v2, 16, 0, 0); v28 = sub_40C190(624629836); sub_8F2EA0((void **)v105, v28); *((_DWORD *)v105 + 68) = dword_AD01E8; v29 = *sub_8FB140(v85, (int)"Friend", (int)&v86, (int)&v87, 0)[9]; v106 = *(_DWORD *)(v29 + 24); v82 = *(_DWORD *)(v29 + 20); v30 = sub_421050(9); v107 = sub_8F4A20(v86, v87, v82, v106, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v107 + 488))(v107, 1); v82 = *v107; v31 = sub_40C190(-587993612); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v107, v31); (*(void (__stdcall **)(_DWORD))(*v107 + 240))(0); v32 = *sub_8FB140(v85, (int)"HolyPromise", (int)&v86, (int)&v87, 0)[9]; v108 = *(_DWORD *)(v32 + 24); v82 = *(_DWORD *)(v32 + 20); v33 = sub_421050(9); v109 = sub_8F4A20(v86, v87, v82, v108, v33, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v109 + 488))(v109, 1); v82 = *v109; v34 = sub_40C190(-196330948); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v109, v34); (*(void (__stdcall **)(_DWORD))(*v109 + 240))(0); v35 = *sub_8FB140(v85, (int)"Guild", (int)&v86, (int)&v87, 0)[9]; v110 = *(_DWORD *)(v35 + 24); v82 = *(_DWORD *)(v35 + 20); v36 = sub_421050(9); v111 = sub_8F4A20(v86, v87, v82, v110, v36, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v111 + 488))(v111, 1); v82 = *v111; v37 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v111, v37); (*(void (__stdcall **)(_DWORD))(*v111 + 240))(0); v38 = *sub_8FB140(v85, (int)"GuildAcademy", (int)&v86, (int)&v87, 0)[9]; v112 = *(_DWORD *)(v38 + 24); v82 = *(_DWORD *)(v38 + 20); v39 = sub_421050(9); v113 = sub_8F4A20(v86, v87, v82, v112, v39, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v113 + 488))(v113, 1); v82 = *v113; v40 = sub_40C190(-2036079644); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v113, v40); (*(void (__stdcall **)(_DWORD))(*v113 + 240))(0); v41 = *sub_8FB140(v85, (int)"Wedding", (int)&v86, (int)&v87, 0)[9]; v114 = *(_DWORD *)(v41 + 24); v82 = *(_DWORD *)(v41 + 20); v42 = sub_421050(9); v115 = sub_8F4A20(v86, v87, v82, v114, v42, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v115 + 488))(v115, 1); v82 = *v115; v43 = sub_40C190(-923451580); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v115, v43); (*(void (__stdcall **)(_DWORD))(*v115 + 240))(0); v44 = *sub_8FB140(v85, (int)"PartyMatch", (int)&v86, (int)&v87, 0)[9]; v116 = *(_DWORD *)(v44 + 24); v82 = *(_DWORD *)(v44 + 20); v45 = sub_421050(9); v117 = sub_8F4A20(v86, v87, v82, v116, v45, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v117 + 488))(v117, 1); v82 = *v117; v46 = sub_40C190(474697790); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v117, v46); (*(void (__stdcall **)(_DWORD))(*v117 + 240))(0); LOBYTE(v88) = 0; sub_410C00(&v81); v47 = *sub_8FB140(v85, (int)"Text01", (int)&v86, (int)&v87, 0)[9]; v118 = *(_DWORD *)(v47 + 24); v81 = *(_DWORD *)(v47 + 20); v48 = sub_421050(0); v49 = sub_8F4A20(v86 - v8, v87 - v9 + 1, v81, v118, v48, v2, 0, 0); v119 = v49; v81 = *v49; v50 = sub_40C190(1052800877); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v81 + 472))(v119, v50); (*(void (__stdcall **)(_DWORD))(*v119 + 240))(0); v120 = sub_8FB140(v85, (int)"Text01_Field", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87, (int)v120, v2, 0, 0); v51 = *v120[9]; v52 = *(_DWORD *)(v51 + 24); v53 = *(_DWORD *)(v51 + 20); v54 = (volatile LONG *)dword_AD01E8; v81 = v52; v82 = v53; v55 = (volatile LONG *)sub_421050(0); *(_DWORD *)(v2 + 372) = sub_90AEF0( v86 - v8 + 5, v87 - v9 + 5, v82, v81, v55, (_DWORD *)v2, 0, 0, 0, 1, v54, (volatile LONG *)0x1E); v56 = v120[9]; v57 = *(_DWORD *)(*v56 + 20); v81 = *(_DWORD *)(*v56 + 24); v82 = v57; v58 = sub_421050(0); v59 = sub_8F4A20(v86 - v8 + 5, v87 - v9 + 22, v82, v81, v58, v2, 0, 0); *(_DWORD *)(v2 + 376) = v59; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v59 + 240))(v59, 0); v60 = *v120[9]; v61 = *(_DWORD *)(v60 + 20); v81 = *(_DWORD *)(v60 + 24); v82 = v61; v62 = sub_421050(0); v63 = sub_8F4A20(v86 - v8 + 5, v87 - v9 + 35, v82, v81, v62, v2, 0, 0); *(_DWORD *)(v2 + 380) = v63; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v63 + 240))(v63, 0); v64 = *v120[9]; v121 = *(_DWORD *)(v64 + 24); v81 = *(_DWORD *)(v64 + 20); v65 = sub_421050(0); v66 = sub_8F4A20(v86 - v8 + 5, v87 - v9 + 47, v81, v121, v65, v2, 0, 0); *(_DWORD *)(v2 + 384) = v66; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v66 + 240))(v66, 0); v67 = sub_8FB140(v85, (int)"Text02", (int)&v86, (int)&v87, 0)[9]; v122 = *(_DWORD *)(*v67 + 24); v81 = *(_DWORD *)(*v67 + 20); v68 = sub_421050(0); v69 = sub_8F4A20(v86 - v8, v87 - v9 + 1, v81, v122, v68, v2, 0, 0); v123 = v69; v81 = *v69; v70 = sub_40C190(-653122257); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v81 + 472))(v123, v70); (*(void (__stdcall **)(_DWORD))(*v123 + 240))(0); v124 = sub_8FB140(v85, (int)"Text02_Field", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87, (int)v124, v2, 0, 0); v71 = *v124[9]; v125 = *(_DWORD *)(v71 + 24); v81 = *(_DWORD *)(v71 + 20); v72 = sub_421050(0); v73 = sub_8F4A20(v86 - v8, v87 - v9 + 1, v81, v125, v72, v2, 0, 0); *(_DWORD *)(v2 + 388) = v73; (*(void (__thiscall **)(volatile LONG *, signed int))(*v73 + 488))(v73, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 388) + 240))(0); v74 = sub_8FB140(v85, (int)"Text03", (int)&v86, (int)&v87, 0)[9]; v126 = *(_DWORD *)(*v74 + 24); v81 = *(_DWORD *)(*v74 + 20); v75 = sub_421050(0); v76 = sub_8F4A20(v86 - v8, v87 - v9 + 1, v81, v126, v75, v2, 0, 0); v127 = v76; v81 = *v76; v77 = sub_40C190(794461822); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v81 + 472))(v127, v77); (*(void (__stdcall **)(_DWORD))(*v127 + 240))(0); v128 = sub_8FB140(v85, (int)"Text03_Field", (int)&v86, (int)&v87, 0); sub_8F3EB0(v86 - v8, v87, (int)v128, v2, 0, 0); v78 = *v128[9]; v129 = *(_DWORD *)(v78 + 24); v81 = *(_DWORD *)(v78 + 20); v79 = sub_421050(0); v80 = sub_8F4A20(v86 - v8, v87 - v9 + 1, v81, v129, v79, v2, 0, 0); *(_DWORD *)(v2 + 392) = v80; (*(void (__thiscall **)(volatile LONG *, signed int))(*v80 + 488))(v80, 5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 392) + 240))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_8D06A0((float *)(v2 + 344), flt_ACCFCC); *(float *)(v2 + 364) = 5.0; v88 = -1; sub_410C00(&v85); result = 1; } else { v88 = -1; sub_410C00(&v85); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACCFCC: using guessed type float flt_ACCFCC; // AD01E8: using guessed type int dword_AD01E8; //----- (006FAA50) -------------------------------------------------------- void __thiscall sub_6FAA50(_DWORD **this, int a2, int a3) { switch ( a2 ) { case 11: sub_6F98E0(this); break; case 12: sub_6F9830(this, 0); break; case 13: sub_6F9830(this, 1); break; case 14: sub_6F9830(this, 2); break; case 15: sub_6F9830(this, 4); break; case 16: sub_6F9830(this, 5); break; case 17: sub_6F9800(); break; default: return; } } //----- (006FAAD0) -------------------------------------------------------- _BYTE *__thiscall sub_6FAAD0(_DWORD **this, int a2) { _DWORD **v2; // esi _BYTE *result; // eax _BYTE *v4; // edi char v5; // al int v6; // eax int v7; // edx int v8; // ecx int v9; // eax int *v10; // edx int v11; // ST1C_4 char *v12; // eax char *v13; // eax int v14; // ST0C_4 int v15; // ST1C_4 char *v16; // eax char *v17; // eax int v18; // ST1C_4 const CHAR *v19; // eax unsigned int v20; // eax int v21; // ecx const char *v22; // eax int v23; // edi const CHAR *v24; // ST0C_4 char *v25; // eax char *v26; // eax int v27; // edi int v28; // ST0C_4 char *v29; // eax char *v30; // eax unsigned int v31; // eax const char *v32; // eax int v33; // edi char *v34; // eax char *v35; // eax _DWORD *v36; // ecx int v37; // edi const CHAR *v38; // eax void *v39; // [esp-4h] [ebp-F8h] int v40; // [esp-4h] [ebp-F8h] struct tm v41; // [esp+10h] [ebp-E4h] struct tm v42; // [esp+34h] [ebp-C0h] char v43; // [esp+58h] [ebp-9Ch] char v44; // [esp+98h] [ebp-5Ch] char v45[4]; // [esp+D8h] [ebp-1Ch] int v46; // [esp+DCh] [ebp-18h] int v47; // [esp+E0h] [ebp-14h] int v48; // [esp+E4h] [ebp-10h] int v49; // [esp+E8h] [ebp-Ch] char v50; // [esp+ECh] [ebp-8h] v2 = this; result = (_BYTE *)sub_6FD400(); v4 = result; if ( !result ) return result; v5 = *result; if ( !*v4 ) { (*(void (__stdcall **)(void *))(*v2[93] + 472))(&unk_9FD07A); (*(void (__stdcall **)(void *))(*v2[94] + 472))(&unk_9FD07B); (*(void (__stdcall **)(void *))(*v2[95] + 472))(&unk_9FD082); (*(void (__stdcall **)(void *))(*v2[96] + 472))(&unk_9FD083); (*(void (__stdcall **)(void *))(*v2[97] + 472))(&unk_9FD093); v39 = &unk_9FD09A; LABEL_15: v36 = v2[98]; return (_BYTE *)(*(int (__thiscall **)(_DWORD *, void *))(*v36 + 472))(v36, v39); } if ( v5 != 2 ) { (*(void (__stdcall **)(void *))(*v2[93] + 472))(&unk_9FD0A2); (*(void (__stdcall **)(void *))(*v2[94] + 472))(&unk_9FD0A3); (*(void (__stdcall **)(void *))(*v2[95] + 472))(&unk_9FD0AA); (*(void (__stdcall **)(void *))(*v2[96] + 472))(&unk_9FD0AB); if ( *v4 == 1 ) { v40 = -166846146; } else { if ( *v4 != 3 ) { LABEL_14: v39 = &unk_9FD0B5; goto LABEL_15; } v40 = -317904859; } v37 = *v2[97]; v38 = sub_40C190(v40); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v37 + 472))(v2[97], v38); goto LABEL_14; } v6 = *((_DWORD *)v4 + 2); v7 = *((_DWORD *)v4 + 4); v46 = *((_DWORD *)v4 + 3); v8 = *((_DWORD *)v4 + 6); *(_DWORD *)v45 = v6; v9 = *((_DWORD *)v4 + 5); v49 = v8; v47 = v7; v10 = v2[93]; v48 = v9; v50 = 0; v11 = *v10; v12 = (char *)sub_40C190(-1526474022); v13 = sub_7549E0(v12, v45); (*(void (__thiscall **)(_DWORD *, char *))(v11 + 472))(v2[93], v13); v14 = *(unsigned __int8 *)(a2 + 6); v15 = *v2[94]; v16 = (char *)sub_40C190(-284957730); v17 = sub_7549E0(v16, v14); (*(void (__thiscall **)(_DWORD *, char *))(v15 + 472))(v2[94], v17); v18 = *v2[97]; v19 = sub_40C190(-49225766); (*(void (__thiscall **)(_DWORD *, const CHAR *))(v18 + 472))(v2[97], v19); v42.tm_min = 0; v42.tm_hour = 0; v42.tm_mday = 0; v42.tm_year = 0; v42.tm_sec = 0; v42.tm_mon = 0; v42.tm_wday = 0; v42.tm_yday = 0; v42.tm_isdst = 0; v20 = *((_DWORD *)v4 + 1); v21 = (*((_DWORD *)v4 + 1) >> 19) & 0x3F; v42.tm_year = (unsigned __int8)*((_DWORD *)v4 + 1) + 100; v42.tm_hour = v21; v42.tm_min = v20 >> 25; v42.tm_mday = (v20 >> 13) & 0x3F; v42.tm_mon = ((v20 >> 8) & 0x1F) - 1; v22 = sub_40A910(1296251015); strftime(&v43, 0x3Fu, v22, &v42); (*(void (__stdcall **)(char *))(*v2[98] + 472))(&v43); if ( !*(_BYTE *)(a2 + 7) ) { v41.tm_min = 0; v41.tm_hour = 0; v41.tm_mday = 0; v41.tm_mon = 0; v41.tm_year = 0; v41.tm_sec = 0; v41.tm_wday = 0; v41.tm_yday = 0; v41.tm_isdst = 0; v31 = *(_DWORD *)(a2 + 8); v41.tm_year = (unsigned __int8)*(_DWORD *)(a2 + 8) + 100; v41.tm_hour = (v31 >> 19) & 0x3F; v41.tm_mon = ((v31 >> 8) & 0x1F) - 1; v41.tm_min = v31 >> 25; v41.tm_mday = (v31 >> 13) & 0x3F; v32 = sub_40A910(1296251015); strftime(&v44, 0x40u, v32, &v41); v33 = *v2[95]; v34 = (char *)sub_40C190(997266748); v35 = sub_7549E0(v34, &v44); (*(void (__thiscall **)(_DWORD *, char *))(v33 + 472))(v2[95], v35); v36 = v2[96]; v39 = &unk_9FD09B; return (_BYTE *)(*(int (__thiscall **)(_DWORD *, void *))(*v36 + 472))(v36, v39); } v23 = *v2[95]; v24 = sub_40C190(-552849621); v25 = (char *)sub_40C190(997266748); v26 = sub_7549E0(v25, v24); (*(void (__thiscall **)(_DWORD *, char *))(v23 + 472))(v2[95], v26); result = (_BYTE *)sub_4A38A0(*(unsigned __int16 *)(a2 + 12)); if ( result ) { v27 = *v2[96]; v28 = (int)(result + 14); v29 = (char *)sub_40C190(1095246151); v30 = sub_7549E0(v29, v28); result = (_BYTE *)(*(int (__thiscall **)(_DWORD *, char *))(v27 + 472))(v2[96], v30); } return result; } //----- (006FAF30) -------------------------------------------------------- char *__thiscall sub_6FAF30(_DWORD **this) { _DWORD **v1; // esi char *result; // eax char *v3; // edi char v4; // al int v5; // edi const CHAR *v6; // eax int v7; // [esp-4h] [ebp-Ch] v1 = this; result = (char *)sub_6FD400(); v3 = result; if ( result ) { if ( *result != 2 ) { (*(void (__stdcall **)(void *))(*v1[98] + 472))(&unk_9FD0B6); (*(void (__stdcall **)(void *))(*v1[93] + 472))(&unk_9FD0B7); (*(void (__stdcall **)(void *))(*v1[94] + 472))(&unk_9FD0BF); (*(void (__stdcall **)(void *))(*v1[95] + 472))(&unk_9FD0C9); (*(void (__stdcall **)(void *))(*v1[96] + 472))(&unk_9FD0CA); } v4 = *v3; if ( *v3 == 1 ) { v7 = -166846146; LABEL_6: v5 = *v1[97]; v6 = sub_40C190(v7); return (char *)(*(int (__thiscall **)(_DWORD *, const CHAR *))(v5 + 472))(v1[97], v6); } if ( v4 == 3 ) { v7 = -317904859; goto LABEL_6; } if ( v4 == 2 ) { v7 = -49225766; goto LABEL_6; } result = (char *)(*(int (__stdcall **)(void *))(*v1[97] + 472))(&unk_9FD0CB); } return result; } //----- (006FB010) -------------------------------------------------------- char *__thiscall sub_6FB010(_DWORD **this, _DWORD *a2, _DWORD *a3) { _DWORD **v3; // esi char *result; // eax v3 = this; result = (char *)sub_6FD400(); if ( result && *((_DWORD *)result + 2) == *a2 && *((_DWORD *)result + 3) == a2[1] && *((_DWORD *)result + 4) == a2[2] && *((_DWORD *)result + 5) == a2[3] && *((_DWORD *)result + 6) == a2[4] ) { *((_DWORD *)result + 2) = *a3; *((_DWORD *)result + 3) = a3[1]; *((_DWORD *)result + 4) = a3[2]; *((_DWORD *)result + 5) = a3[3]; *((_DWORD *)result + 6) = a3[4]; result = sub_6FAF30(v3); } return result; } //----- (006FB090) -------------------------------------------------------- volatile LONG *__cdecl sub_6FB090(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x18Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6F9720(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006FB1C0) -------------------------------------------------------- void *__thiscall sub_6FB1C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WeddingInfoWin::`vftable'; *((_DWORD *)this + 58) = &WeddingInfoWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FD2D0: using guessed type void *WeddingInfoWin::`vftable'; // 9FD2EC: using guessed type void *WeddingInfoWin::`vftable'; //----- (006FB230) -------------------------------------------------------- int __thiscall sub_6FB230(_DWORD **this) { return (*(int (__stdcall **)(void *))(*this[88] + 460))(&unk_9FD52A); } //----- (006FB310) -------------------------------------------------------- char __thiscall sub_6FB310(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax int v16; // eax volatile LONG *v17; // eax const CHAR *v18; // eax int v19; // eax int v20; // eax volatile LONG *v21; // eax int v22; // edi const CHAR *v23; // eax volatile LONG *v24; // eax volatile LONG **v25; // edi volatile LONG *v26; // eax volatile LONG *v27; // edi int v28; // ST38_4 int v29; // ST34_4 int v30; // ST30_4 int v31; // eax volatile LONG *v32; // edi volatile LONG v33; // ebx const CHAR *v34; // eax int v35; // [esp+48h] [ebp-24h] int v36; // [esp+4Ch] [ebp-20h] int v37; // [esp+50h] [ebp-1Ch] int v38; // [esp+54h] [ebp-18h] int v39; // [esp+58h] [ebp-14h] int v40; // [esp+5Ch] [ebp-10h] int v41; // [esp+68h] [ebp-4h] int v42; // [esp+74h] [ebp+8h] volatile LONG **v43; // [esp+74h] [ebp+8h] volatile LONG *v44; // [esp+74h] [ebp+8h] volatile LONG **v45; // [esp+74h] [ebp+8h] volatile LONG **v46; // [esp+74h] [ebp+8h] int v47; // [esp+74h] [ebp+8h] v2 = (int)this; v40 = 0; v41 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v40; v41 = -1; if ( !v40 || InterlockedDecrement((volatile LONG *)(v40 + 4)) ) return 0; v5 = v40 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\WeddingProposeInput.nif"); sub_8F66B0(v8, (int)&v40, v7); if ( !v40 ) return 0; v9 = sub_8FB140(v40, (int)"Frame", (int)&v38, (int)&v39, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"WeddingProposeInputWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v40; v41 = -1; if ( !v40 || InterlockedDecrement((volatile LONG *)(v40 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v38; v37 = v39; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v40, (int)"Theme", (int)&v38, (int)&v39, v11); else v12 = sub_8FB140(v40, (int)"Theme", (int)&v38, (int)&v39, 0); sub_8F3EB0(v38 - v10, v39 - v37, (int)v12, v2, 0, 0); v13 = sub_8FB140(v40, (int)"Panel01", (int)&v38, (int)&v39, v3); sub_8F3EB0(v38 - v10, v39, (int)v13, v2, 0, 0); v14 = sub_8FB140(v40, (int)"Panel02", (int)&v38, (int)&v39, v3); sub_8F3EB0(v38 - v10, v39, (int)v14, v2, 0, 0); v15 = sub_8FB140(v40, (int)"Panel03", (int)&v38, (int)&v39, v3); sub_8F3EB0(v38 - v10, v39, (int)v15, v2, 0, 0); if ( !sub_8F71E0(v40, (int)"WinTitle", &v38, &v39, &v35, &v36) ) goto LABEL_26; v16 = sub_421050(0); v17 = sub_8F4A20(v38 - v10, v39, v35, v36, v16, v2, 0, 0); *(_DWORD *)(v2 + 344) = v17; (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 344) + 468))(&dword_AA8D98); v42 = **(_DWORD **)(v2 + 344); v18 = sub_40C190(-2067744310); (*(void (__thiscall **)(_DWORD, const CHAR *))(v42 + 472))(*(_DWORD *)(v2 + 344), v18); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); v43 = sub_8FB140(v40, (int)"ClsNor", (int)&v38, (int)&v39, v3); sub_8FB650(v43, v40, (int)"ClsClick"); sub_8FB650(v43, v40, (int)"ClsOver"); sub_90C8D0(v38 - v10, v39 - v37, (int)v43, v2); v44 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v40 + 72))("HelpLinkNor") ) { v45 = sub_8FB140(v40, (int)"HelpLinkNor", (int)&v38, (int)&v39, v44); sub_8FB650(v45, v40, (int)"HelpLinkClick"); sub_8FB650(v45, v40, (int)"HelpLinkOver"); sub_8FE0F0(v38 - v10, v39 - v37, (int)v45, v2, 1, 0, 0); } v46 = sub_8FB140(v40, (int)"Text01", (int)&v38, (int)&v39, v3); sub_8F3EB0(v38 - v10, v39 - v37, (int)v46, v2, 0, 0); v19 = *v46[9]; v47 = *(_DWORD *)(v19 + 24); v37 = *(_DWORD *)(v19 + 20); v20 = sub_421050(0); v21 = sub_8F4A20(v38 - v10, v39, v37, v47, v20, v2, 0, 0); *(_DWORD *)(v2 + 348) = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 348) + 468))(&dword_AA8C68); v22 = **(_DWORD **)(v2 + 348); v23 = sub_40C190(541329992); (*(void (__thiscall **)(_DWORD, const CHAR *))(v22 + 472))(*(_DWORD *)(v2 + 348), v23); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); if ( !sub_8F71E0(v40, (int)"Text01_Field", &v38, &v39, &v35, &v36) ) { LABEL_26: v41 = -1; sub_410C00(&v40); return 0; } v24 = sub_45A900(v38, v39 + 2, v35, v36, v2, 1342181380, 37, 0, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 352), (int)v24); sub_459B60(*(_DWORD **)(v2 + 352), 1); v25 = sub_8FB140(v40, (int)"Btn01Nor", (int)&v38, (int)&v39, v3); sub_8FB650(v25, v40, (int)"Btn01Click"); sub_8FB650(v25, v40, (int)"Btn01Over"); v26 = sub_8FE0F0(v38, v39, (int)v25, v2, 0, 0, 0); v27 = v26; v28 = (int)v26; v29 = sub_421050(0); v30 = (*(int (__thiscall **)(volatile LONG *))(*v27 + 148))(v27); v31 = (*(int (__thiscall **)(volatile LONG *))(*v27 + 144))(v27); v32 = sub_8F4A20(0, 1, v31, v30, v29, v28, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v32 + 488))(v32, 5); v33 = *v32; v34 = sub_40C190(-1497461276); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v33 + 472))(v32, v34); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v41 = -1; sub_410C00(&v40); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006FB900) -------------------------------------------------------- char __thiscall sub_6FB900(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx const char *v3; // eax const void *v4; // eax int v5; // eax const CHAR *v6; // edi __int16 v8; // [esp+4h] [ebp-2Ch] int v9; // [esp+6h] [ebp-2Ah] int v10; // [esp+Ah] [ebp-26h] int v11; // [esp+Eh] [ebp-22h] int v12; // [esp+12h] [ebp-1Eh] int v13; // [esp+16h] [ebp-1Ah] int v14; // [esp+1Ah] [ebp-16h] int v15; // [esp+1Eh] [ebp-12h] int v16; // [esp+22h] [ebp-Eh] int v17; // [esp+26h] [ebp-Ah] char v18; // [esp+2Ah] [ebp-6h] v1 = this; v2 = this[88]; v9 = 0; v10 = 0; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v3 = (const char *)(*(int (**)(void))(*(_DWORD *)v2 + 452))(); v4 = (const void *)sub_451700(v3); if ( v4 ) { qmemcpy(&v9, v4, 0x25u); v5 = *((_DWORD *)dword_AD8EBC + 1026); if ( v5 ) { v8 = *(_WORD *)(v5 + 548); sub_6F3D10(&off_AB7F2C, 8, 79, &v8, 0x27u); } else { v6 = sub_40C190(-386678815); if ( v1[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v1[59] + 4))(25, v6, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v1[59] + 20))(25, v6, v1 + 58); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v1[58] + 20))(v1 + 58, 25, v6, v1 + 58); } LOBYTE(v4) = sub_8F86A0(&unk_BA6B10, v1); } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006FBA00) -------------------------------------------------------- char __thiscall sub_6FBA00(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 ) { LOBYTE(v3) = a2 - 1; if ( a2 == 1 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "WeddingProposeInput"); } } else { LOBYTE(v3) = sub_6FB900(this); } return (char)v3; } //----- (006FBA40) -------------------------------------------------------- int __cdecl sub_6FBA40(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x164u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WeddingProposeInputWin::`vftable'; *(_DWORD *)(v2 + 232) = &WeddingProposeInputWin::`vftable'; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FD628: using guessed type void *WeddingProposeInputWin::`vftable'; // 9FD644: using guessed type void *WeddingProposeInputWin::`vftable'; //----- (006FBB90) -------------------------------------------------------- _DWORD *__thiscall sub_6FBB90(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &WeddingProposeInputWin::`vftable'; *((_DWORD *)this + 58) = &WeddingProposeInputWin::`vftable'; v3 = *((_DWORD *)this + 88); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FD628: using guessed type void *WeddingProposeInputWin::`vftable'; // 9FD644: using guessed type void *WeddingProposeInputWin::`vftable'; //----- (006FBC60) -------------------------------------------------------- char __thiscall sub_6FBC60(int this) { _DWORD *v1; // ebx __int16 v2; // ax int v3; // ecx const char *v4; // eax const void *v5; // eax __int16 v7; // [esp+4h] [ebp-2Ch] char v8; // [esp+6h] [ebp-2Ah] int v9; // [esp+7h] [ebp-29h] int v10; // [esp+Bh] [ebp-25h] int v11; // [esp+Fh] [ebp-21h] int v12; // [esp+13h] [ebp-1Dh] int v13; // [esp+17h] [ebp-19h] int v14; // [esp+1Bh] [ebp-15h] int v15; // [esp+1Fh] [ebp-11h] int v16; // [esp+23h] [ebp-Dh] int v17; // [esp+27h] [ebp-9h] char v18; // [esp+2Bh] [ebp-5h] v1 = (_DWORD *)this; v2 = *(_WORD *)(this + 344); v3 = *(_DWORD *)(this + 364); v7 = v2; v9 = 0; v10 = 0; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v8 = 1; v4 = (const char *)(*(int (**)(void))(*(_DWORD *)v3 + 452))(); v5 = (const void *)sub_451700(v4); if ( v5 ) { qmemcpy(&v9, v5, 0x25u); sub_6F3D10(&off_AB7F2C, 8, 81, &v7, 0x28u); LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, v1); } return (char)v5; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006FBD00) -------------------------------------------------------- char __thiscall sub_6FBD00(int this) { _DWORD *v1; // ebx __int16 v2; // ax int v3; // ecx const char *v4; // eax const void *v5; // eax __int16 v7; // [esp+4h] [ebp-2Ch] char v8; // [esp+6h] [ebp-2Ah] int v9; // [esp+7h] [ebp-29h] int v10; // [esp+Bh] [ebp-25h] int v11; // [esp+Fh] [ebp-21h] int v12; // [esp+13h] [ebp-1Dh] int v13; // [esp+17h] [ebp-19h] int v14; // [esp+1Bh] [ebp-15h] int v15; // [esp+1Fh] [ebp-11h] int v16; // [esp+23h] [ebp-Dh] int v17; // [esp+27h] [ebp-9h] char v18; // [esp+2Bh] [ebp-5h] v1 = (_DWORD *)this; v2 = *(_WORD *)(this + 344); v3 = *(_DWORD *)(this + 364); v7 = v2; v9 = 0; v10 = 0; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v8 = 0; v4 = (const char *)(*(int (**)(void))(*(_DWORD *)v3 + 452))(); v5 = (const void *)sub_451700(v4); if ( v5 ) { qmemcpy(&v9, v5, 0x25u); sub_6F3D10(&off_AB7F2C, 8, 81, &v7, 0x28u); LOBYTE(v5) = sub_8F86A0(&unk_BA6B10, v1); } return (char)v5; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006FBDE0) -------------------------------------------------------- LONG __thiscall sub_6FBDE0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &WeddingProposeOutputWin::`vftable'; this[58] = &WeddingProposeOutputWin::`vftable'; v2 = this[91]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[90]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_8F10F0(v1); } // 9FD9A4: using guessed type void *WeddingProposeOutputWin::`vftable'; // 9FD9C4: using guessed type void *WeddingProposeOutputWin::`vftable'; //----- (006FBE90) -------------------------------------------------------- char __thiscall sub_6FBE90(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax int v10; // edi volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax int v16; // eax volatile LONG v17; // ST5C_4 const CHAR *v18; // eax int v19; // eax int v20; // ST5C_4 int v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // ecx int v25; // ST5C_4 int v26; // eax volatile LONG *v27; // eax int v28; // edi const CHAR *v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // edi volatile LONG *v32; // eax volatile LONG *v33; // edi int v34; // ST40_4 int v35; // ST3C_4 int v36; // ST38_4 int v37; // eax volatile LONG *v38; // edi const CHAR *v39; // eax volatile LONG **v40; // edi volatile LONG *v41; // eax volatile LONG *v42; // edi int v43; // ST40_4 int v44; // ST3C_4 int v45; // ST38_4 int v46; // eax volatile LONG *v47; // edi volatile LONG v48; // ebx const CHAR *v49; // eax int v50; // [esp+60h] [ebp-24h] int v51; // [esp+64h] [ebp-20h] int v52; // [esp+68h] [ebp-1Ch] int v53; // [esp+6Ch] [ebp-18h] int v54; // [esp+70h] [ebp-14h] int v55; // [esp+74h] [ebp-10h] int v56; // [esp+80h] [ebp-4h] volatile LONG *v57; // [esp+8Ch] [ebp+8h] volatile LONG *v58; // [esp+8Ch] [ebp+8h] volatile LONG **v59; // [esp+8Ch] [ebp+8h] volatile LONG **v60; // [esp+8Ch] [ebp+8h] int v61; // [esp+8Ch] [ebp+8h] volatile LONG **v62; // [esp+8Ch] [ebp+8h] int v63; // [esp+8Ch] [ebp+8h] volatile LONG v64; // [esp+8Ch] [ebp+8h] v2 = (int)this; v53 = 0; v56 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v53; v56 = -1; if ( !v53 || InterlockedDecrement((volatile LONG *)(v53 + 4)) ) return 0; v5 = v53 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\WeddingProposeOutput.nif"); sub_8F66B0(v8, (int)&v53, v7); if ( !v53 ) return 0; v9 = sub_8FB140(v53, (int)"Frame", (int)&v54, (int)&v55, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"WeddingProposeOutputWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v53; v56 = -1; if ( !v53 || InterlockedDecrement((volatile LONG *)(v53 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v54; v50 = v55; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v53, (int)"Theme", (int)&v54, (int)&v55, v11); else v12 = sub_8FB140(v53, (int)"Theme", (int)&v54, (int)&v55, 0); sub_8F3EB0(v54 - v10, v55 - v50, (int)v12, v2, 0, 0); v13 = sub_8FB140(v53, (int)"Panel01", (int)&v54, (int)&v55, v3); sub_8F3EB0(v54 - v10, v55, (int)v13, v2, 0, 0); v14 = sub_8FB140(v53, (int)"Panel02", (int)&v54, (int)&v55, v3); sub_8F3EB0(v54 - v10, v55, (int)v14, v2, 0, 0); v15 = sub_8FB140(v53, (int)"Panel03", (int)&v54, (int)&v55, v3); sub_8F3EB0(v54 - v10, v55, (int)v15, v2, 0, 0); if ( !sub_8F71E0(v53, (int)"WinTitle", &v54, &v55, &v51, &v52) ) goto LABEL_27; v16 = sub_421050(0); v57 = sub_8F4A20(v54 - v10, v55, v51, v52, v16, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 5); (*(void (__stdcall **)(int *))(*v57 + 468))(&dword_AA8D98); v17 = *v57; v18 = sub_40C190(-2067744310); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v17 + 472))(v57, v18); (*(void (__stdcall **)(_DWORD))(*v57 + 240))(0); v58 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v53 + 72))("HelpLinkNor") ) { v59 = sub_8FB140(v53, (int)"HelpLinkNor", (int)&v54, (int)&v55, v58); sub_8FB650(v59, v53, (int)"HelpLinkClick"); sub_8FB650(v59, v53, (int)"HelpLinkOver"); sub_8FE0F0(v54 - v10, v55, (int)v59, v2, 2, 0, 0); } v60 = sub_8FB140(v53, (int)"Text01", (int)&v54, (int)&v55, v3); sub_8F3EB0(v54 - v10, v55 - v50, (int)v60, v2, 0, 0); v19 = *v60[9]; v61 = *(_DWORD *)(v19 + 24); v20 = *(_DWORD *)(v19 + 20); v21 = sub_421050(0); v22 = sub_8F4A20(v54 - v10, v55, v20, v61, v21, v2, 0, 0); *(_DWORD *)(v2 + 348) = v22; (*(void (__thiscall **)(volatile LONG *, signed int))(*v22 + 488))(v22, 5); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 348) + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 348) + 240))(0); if ( !sub_8F71E0(v53, (int)"Text01_Field", &v54, &v55, &v51, &v52) ) goto LABEL_27; v23 = sub_45A900(v54, v55 + 2, v51, v52, v2, 1342181380, 37, 0, 1, 0, 0); sub_56FF80((_DWORD *)(v2 + 360), (int)v23); sub_459B60(*(_DWORD **)(v2 + 360), 1); v62 = sub_8FB140(v53, (int)"Text02", (int)&v54, (int)&v55, v3); sub_8F3EB0(v54 - v10, v55 - v50, (int)v62, v2, 0, 0); v24 = v62[9]; v63 = *(_DWORD *)(*v24 + 24); v25 = *(_DWORD *)(*v24 + 20); v26 = sub_421050(0); v27 = sub_8F4A20(v54 - v10, v55, v25, v63, v26, v2, 0, 0); *(_DWORD *)(v2 + 352) = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 5); v28 = **(_DWORD **)(v2 + 352); v29 = sub_40C190(34266590); (*(void (__thiscall **)(_DWORD, const CHAR *))(v28 + 472))(*(_DWORD *)(v2 + 352), v29); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); if ( !sub_8F71E0(v53, (int)"Text02_Field", &v54, &v55, &v51, &v52) ) { LABEL_27: v56 = -1; sub_410C00(&v53); return 0; } v30 = sub_45A900(v54, v55 + 2, v51, v52, v2, 1342177280, 20, 1, 1, 0, 1); sub_56FF80((_DWORD *)(v2 + 364), (int)v30); sub_459B60(*(_DWORD **)(v2 + 364), 1); v31 = sub_8FB140(v53, (int)"Btn01Nor", (int)&v54, (int)&v55, v3); sub_8FB650(v31, v53, (int)"Btn01Click"); sub_8FB650(v31, v53, (int)"Btn01Over"); v32 = sub_8FE0F0(v54, v55, (int)v31, v2, 0, 0, 0); v33 = v32; v34 = (int)v32; v35 = sub_421050(0); v36 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 148))(v33); v37 = (*(int (__thiscall **)(volatile LONG *))(*v33 + 144))(v33); v38 = sub_8F4A20(0, 1, v37, v36, v35, v34, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v38 + 488))(v38, 5); v64 = *v38; v39 = sub_40C190(-586948640); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v64 + 472))(v38, v39); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); v40 = sub_8FB140(v53, (int)"Btn02Nor", (int)&v54, (int)&v55, v3); sub_8FB650(v40, v53, (int)"Btn02Click"); sub_8FB650(v40, v53, (int)"Btn02Over"); v41 = sub_8FE0F0(v54, v55, (int)v40, v2, 1, 0, 0); v42 = v41; v43 = (int)v41; v44 = sub_421050(0); v45 = (*(int (__thiscall **)(volatile LONG *))(*v42 + 148))(v42); v46 = (*(int (__thiscall **)(volatile LONG *))(*v42 + 144))(v42); v47 = sub_8F4A20(0, 1, v46, v45, v44, v43, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); v48 = *v47; v49 = sub_40C190(-65855713); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v48 + 472))(v47, v49); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v47 + 240))(v47, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v56 = -1; sub_410C00(&v53); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006FC5F0) -------------------------------------------------------- char __thiscall sub_6FC5F0(void *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 ) { if ( a2 == 1 ) { LOBYTE(v3) = sub_6FBD00((int)this); } else { LOBYTE(v3) = a2 - 2; if ( a2 == 2 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "WeddingProposeOutput"); } } } else { LOBYTE(v3) = sub_6FBC60((int)this); } return (char)v3; } //----- (006FC640) -------------------------------------------------------- int __thiscall sub_6FC640(_WORD *this, __int16 *a2) { __int16 v2; // ax _DWORD **v3; // esi char *v4; // eax int v5; // ebx int v6; // ST04_4 char *v7; // eax char *v8; // eax v2 = *a2; v3 = (_DWORD **)this; this[172] = *a2; v4 = sub_664AB0(dword_AD8C90, v2); v5 = *v3[87]; v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 84))(v4); v7 = (char *)sub_40C190(526667871); v8 = sub_7549E0(v7, v6); (*(void (__thiscall **)(_DWORD *, char *))(v5 + 472))(v3[87], v8); (*(void (__stdcall **)(__int16 *))(*v3[90] + 460))(a2 + 1); return (*(int (__stdcall **)(void *))(*v3[91] + 460))(&unk_9FD883); } //----- (006FC6D0) -------------------------------------------------------- int __cdecl sub_6FC6D0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &WeddingProposeOutputWin::`vftable'; *(_DWORD *)(v2 + 232) = &WeddingProposeOutputWin::`vftable'; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 356) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FD9A4: using guessed type void *WeddingProposeOutputWin::`vftable'; // 9FD9C4: using guessed type void *WeddingProposeOutputWin::`vftable'; //----- (006FC830) -------------------------------------------------------- void *__thiscall sub_6FC830(void *this, char a2) { void *v2; // esi v2 = this; sub_6FBDE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006FC890) -------------------------------------------------------- char __thiscall sub_6FC890(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax if ( a2 ) { LOBYTE(v3) = a2 - 1; if ( a2 == 1 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4A5170(v3, "WeddingProposeResult"); } } else { LOBYTE(v3) = sub_8F86A0(&unk_BA6B10, this); } return (char)v3; } //----- (006FC8E0) -------------------------------------------------------- _DWORD *__thiscall sub_6FC8E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &WeddingProposeResultWin::`vftable'; v1[58] = &WeddingProposeResultWin::`vftable'; v1[87] = 0; v1[86] = 0; v2 = v1[87]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[87] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FDD14: using guessed type void *WeddingProposeResultWin::`vftable'; // 9FDD34: using guessed type void *WeddingProposeResultWin::`vftable'; //----- (006FCA10) -------------------------------------------------------- char __thiscall sub_6FCA10(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // eax volatile LONG **v15; // eax int v16; // eax volatile LONG *v17; // edi volatile LONG v18; // ST54_4 const CHAR *v19; // eax volatile LONG **v20; // edi volatile LONG *v21; // edi volatile LONG **v22; // edi volatile LONG **v23; // edi volatile LONG *v24; // ecx int v25; // edi int v26; // ST54_4 int v27; // eax volatile LONG *v28; // edi volatile LONG v29; // ST54_4 const CHAR *v30; // eax volatile LONG **v31; // edi volatile LONG *v32; // ecx int v33; // edi int v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // edi volatile LONG *v38; // eax volatile LONG *v39; // edi int v40; // ST38_4 int v41; // ST34_4 int v42; // ST30_4 int v43; // eax volatile LONG *v44; // edi volatile LONG v45; // ebx const CHAR *v46; // eax int v47; // [esp+54h] [ebp-24h] int v48; // [esp+58h] [ebp-20h] volatile LONG *v49; // [esp+5Ch] [ebp-1Ch] int v50; // [esp+60h] [ebp-18h] int v51; // [esp+64h] [ebp-14h] int v52; // [esp+68h] [ebp-10h] int v53; // [esp+74h] [ebp-4h] int v54; // [esp+80h] [ebp+8h] int v55; // [esp+80h] [ebp+8h] v2 = (int)this; v50 = 0; v53 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v49 = v3; if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v50; v53 = -1; if ( !v50 || InterlockedDecrement((volatile LONG *)(v50 + 4)) ) return 0; v5 = v50 == 0; goto LABEL_5; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "\\Game\\WeddingProposeResult.nif"); sub_8F66B0(v8, (int)&v50, v7); if ( !v50 ) return 0; v9 = sub_8FB140(v50, (int)"Frame", (int)&v51, (int)&v52, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"WeddingProposeResultWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v50; v53 = -1; if ( !v50 || InterlockedDecrement((volatile LONG *)(v50 + 4)) ) return 0; v5 = v4 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v10 = v51; v54 = v52; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v50, (int)"Theme", (int)&v51, (int)&v52, v11); else v12 = sub_8FB140(v50, (int)"Theme", (int)&v51, (int)&v52, 0); sub_8F3EB0(v51 - v10, v52 - v54, (int)v12, v2, 0, 0); v13 = sub_8FB140(v50, (int)"Panel01", (int)&v51, (int)&v52, v3); sub_8F3EB0(v51 - v10, v52, (int)v13, v2, 0, 0); v14 = sub_8FB140(v50, (int)"Panel02", (int)&v51, (int)&v52, v3); sub_8F3EB0(v51 - v10, v52, (int)v14, v2, 0, 0); v15 = sub_8FB140(v50, (int)"Panel03", (int)&v51, (int)&v52, v3); sub_8F3EB0(v51 - v10, v52, (int)v15, v2, 0, 0); if ( !sub_8F71E0(v50, (int)"WinTitle", &v51, &v52, &v47, &v48) ) goto LABEL_26; v16 = sub_421050(0); v17 = sub_8F4A20(v51 - v10, v52, v47, v48, v16, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v17 + 468))(v17, &dword_AA8D98); v18 = *v17; v19 = sub_40C190(-1799195433); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v18 + 472))(v17, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v20 = sub_8FB140(v50, (int)"ClsNor", (int)&v51, (int)&v52, v49); sub_8FB650(v20, v50, (int)"ClsClick"); sub_8FB650(v20, v50, (int)"ClsOver"); sub_90C8D0(v51 - v10, v52 - v54, (int)v20, v2); v21 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v50 + 72))("HelpLinkNor") ) { v22 = sub_8FB140(v50, (int)"HelpLinkNor", (int)&v51, (int)&v52, v21); sub_8FB650(v22, v50, (int)"HelpLinkClick"); sub_8FB650(v22, v50, (int)"HelpLinkOver"); sub_8FE0F0(v51 - v10, v52 - v54, (int)v22, v2, 1, 0, 0); } v23 = sub_8FB140(v50, (int)"Text02", (int)&v51, (int)&v52, v49); sub_8F3EB0(v51 - v10, v52 - v54, (int)v23, v2, 0, 0); v24 = v23[9]; v25 = *(_DWORD *)(*v24 + 24); v26 = *(_DWORD *)(*v24 + 20); v27 = sub_421050(0); v28 = sub_8F4A20(v51 - v10, v52, v26, v25, v27, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v28 + 468))(v28, &dword_AA8C68); v29 = *v28; v30 = sub_40C190(34266590); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v29 + 472))(v28, v30); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v28 + 240))(v28, 0); v31 = sub_8FB140(v50, (int)"Text02_Field", (int)&v51, (int)&v52, v49); sub_8F3EB0(v51 - v10, v52 - v54, (int)v31, v2, 0, 0); v32 = v31[9]; v33 = *(_DWORD *)(*v32 + 24); v55 = *(_DWORD *)(*v32 + 20); v34 = sub_421050(0); v35 = sub_8F4A20(v51 - v10, v52, v55, v33, v34, v2, 0, 0); *(_DWORD *)(v2 + 344) = v35; (*(void (__thiscall **)(volatile LONG *, int *))(*v35 + 468))(v35, &dword_AA8C68); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 344) + 240))(0); if ( !sub_8F71E0(v50, (int)"Text01_Field", &v51, &v52, &v47, &v48) ) { LABEL_26: v53 = -1; sub_410C00(&v50); return 0; } v36 = sub_45A900(v51, v52 + 2, v47, v48, v2, 1342181380, 128, 0, 1, 0, 0); sub_56FF80((_DWORD *)(v2 + 348), (int)v36); sub_459B60(*(_DWORD **)(v2 + 348), 1); v37 = sub_8FB140(v50, (int)"Btn01Nor", (int)&v51, (int)&v52, v49); sub_8FB650(v37, v50, (int)"Btn01Click"); sub_8FB650(v37, v50, (int)"Btn01Over"); v38 = sub_8FE0F0(v51, v52, (int)v37, v2, 0, 0, 0); v39 = v38; v40 = (int)v38; v41 = sub_421050(0); v42 = (*(int (__thiscall **)(volatile LONG *))(*v39 + 148))(v39); v43 = (*(int (__thiscall **)(volatile LONG *))(*v39 + 144))(v39); v44 = sub_8F4A20(0, 1, v43, v42, v41, v40, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v44 + 488))(v44, 5); v45 = *v44; v46 = sub_40C190(-1497461276); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v45 + 472))(v44, v46); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v53 = -1; sub_410C00(&v50); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (006FD070) -------------------------------------------------------- int __thiscall sub_6FD070(_DWORD **this, __int16 *a2, char a3) { _DWORD **v3; // esi char *v4; // eax int *v5; // esi int v6; // edi char *v7; // eax char *v8; // eax int v10; // [esp-4h] [ebp-Ch] v3 = this; (*(void (__stdcall **)(void *))(*this[86] + 472))(&unk_9FDC03); (*(void (__stdcall **)(void *))(*v3[87] + 460))(&unk_9FDC0A); (*(void (__stdcall **)(__int16 *))(*v3[86] + 472))(a2 + 2); v4 = sub_664AB0(dword_AD8C90, *a2); v5 = v3[87]; v6 = *v5; if ( a3 ) { v10 = (*(int (**)(void))(*(_DWORD *)v4 + 84))(); v7 = (char *)sub_40C190(476204914); } else { v10 = (*(int (**)(void))(*(_DWORD *)v4 + 84))(); v7 = (char *)sub_40C190(-296618483); } v8 = sub_7549E0(v7, v10); return (*(int (__thiscall **)(int *, char *))(v6 + 460))(v5, v8); } //----- (006FD140) -------------------------------------------------------- volatile LONG *__cdecl sub_6FD140(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6FC8E0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006FD270) -------------------------------------------------------- _DWORD *__thiscall sub_6FD270(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &WeddingProposeResultWin::`vftable'; *((_DWORD *)this + 58) = &WeddingProposeResultWin::`vftable'; v3 = *((_DWORD *)this + 87); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FDD14: using guessed type void *WeddingProposeResultWin::`vftable'; // 9FDD34: using guessed type void *WeddingProposeResultWin::`vftable'; //----- (006FD310) -------------------------------------------------------- int __thiscall sub_6FD310(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; this[24] = sub_6FBA40(0); v1[25] = sub_6FC6D0(0); v1[26] = sub_6FD140(0); result = sub_6F9580(0); v1[27] = result; return result; } //----- (006FD340) -------------------------------------------------------- char __thiscall sub_6FD340(_BYTE *this, int a2, _DWORD *a3, int a4) { _BYTE *v4; // esi char result; // al v4 = this; if ( a2 == 27 ) { result = (char)a3; if ( a3 ) { if ( !*a3 ) { if ( this[104] ) { result = sub_6F3D10(&off_AB7F2C, 8, 94, 0, 0); v4[104] = 0; } } } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (006FD380) -------------------------------------------------------- signed int __thiscall sub_6FD380(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this[24] && !(*(unsigned __int8 (**)(void))(*(_DWORD *)this[24] + 260))() ) sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[24]); return 1; } //----- (006FD3B0) -------------------------------------------------------- signed int __thiscall sub_6FD3B0(_WORD **this, __int16 *a2) { _WORD **v2; // esi v2 = this; sub_6FC640(this[25], a2); sub_8F82A0(&unk_BA6B10, v2[25]); return 1; } //----- (006FD400) -------------------------------------------------------- int sub_6FD400() { return dword_B9E408 + 64; } // B9E408: using guessed type int dword_B9E408; //----- (006FD410) -------------------------------------------------------- signed int __thiscall sub_6FD410(_DWORD ***this, int a2) { _DWORD ***v2; // esi signed int v3; // eax signed int result; // eax _DWORD **v5; // esi const char *v6; // edi v2 = this; v3 = *(unsigned __int16 *)(a2 + 2); if ( (_WORD)v3 == 4800 ) { sub_6FD070(this[26], (__int16 *)a2, 1); sub_8F82A0(&unk_BA6B10, v2[26]); result = 1; } else if ( (_WORD)v3 == 4810 ) { sub_6FD070(this[26], (__int16 *)a2, 0); sub_8F82A0(&unk_BA6B10, v2[26]); result = 1; } else { v5 = this + 2; v6 = sub_41A850(v3); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); result = 1; } return result; } //----- (006FD4D0) -------------------------------------------------------- signed int __thiscall sub_6FD4D0(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax _DWORD **v3; // esi const char *v4; // edi v2 = *a2; if ( (_WORD)v2 != 4928 ) { v3 = this + 2; v4 = sub_41A850(v2); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return 1; } //----- (006FD570) -------------------------------------------------------- void sub_6FD570() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E408; if ( dword_B9E408 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E408 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E408 = 0; } } // B9E408: using guessed type int dword_B9E408; //----- (006FD5B0) -------------------------------------------------------- signed int __thiscall sub_6FD5B0(_DWORD **this, unsigned __int16 *a2) { signed int v2; // eax const char *v3; // eax char *v4; // eax char *v5; // eax const char *v6; // eax _DWORD **v7; // esi const char *v8; // edi char v10; // [esp+4h] [ebp-24h] v2 = *a2; if ( (_WORD)v2 == 4864 ) { if ( a2 != (unsigned __int16 *)-10 ) { v3 = sub_40A910(-1768432428); strftime(&v10, 0x1Fu, v3, (const struct tm *)(a2 + 5)); } v4 = (char *)sub_40C190(2063520462); LABEL_5: v5 = sub_7549E0(v4, &v10); sub_462CA0(1, v5); return 1; } if ( (_WORD)v2 == 4870 ) { if ( a2 != (unsigned __int16 *)-10 ) { v6 = sub_40A910(-1768432428); strftime(&v10, 0x1Fu, v6, (const struct tm *)(a2 + 5)); } v4 = (char *)sub_40C190(-1995915053); goto LABEL_5; } v7 = this + 2; v8 = sub_41A850(v2); if ( v7[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v7[1] + 4))(25, v8, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); return 1; } //----- (006FD6B0) -------------------------------------------------------- signed int __thiscall sub_6FD6B0(_DWORD **this, unsigned __int16 *a2) { _DWORD **v2; // esi _DWORD *v3; // ebx char *v4; // eax char *v5; // eax signed int result; // eax char *v7; // eax _DWORD **v8; // esi const char *v9; // edi v2 = this; if ( *a2 == 4928 ) { v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { if ( sub_453B20(a2 + 33) && sub_453B20(a2 + 51) && sub_453B20(a2 + 69) ) { sub_6F9420((_DWORD **)v2[27], (int)a2); sub_8F82A0(&unk_BA6B10, v2[27]); return 1; } v4 = (char *)sub_4090F0(-2140127907); v5 = sub_7549E0(v4); sub_492060(v3, (int)v5); } return 0; } if ( *a2 == 4930 ) { v7 = (char *)sub_40C190(-300031690); sub_462CA0(1, v7); result = 1; } else { v8 = this + 2; v9 = sub_41A850(*a2); if ( v8[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v8[1] + 4))(25, v9, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); result = 1; } return result; } //----- (006FD7E0) -------------------------------------------------------- signed int __thiscall sub_6FD7E0(_DWORD **this, unsigned __int16 *a2) { __int16 v2; // ax _DWORD **v3; // esi _DWORD **v4; // esi const CHAR *v5; // edi char *v6; // eax volatile LONG *v7; // eax int v8; // edx char *v9; // eax volatile LONG *v10; // eax _DWORD **v11; // esi const CHAR *v12; // edi _DWORD **v13; // esi const CHAR *v14; // edi char *v15; // eax _DWORD **v16; // esi const char *v17; // edi v2 = *a2; v3 = this; if ( *a2 == 4992 ) { v4 = this + 2; v5 = sub_40C190(1773448099); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); } else { switch ( v2 ) { case 4996: v6 = (char *)sub_40C190(-890381539); v7 = sub_462CA0(5, v6); if ( v3 ) v8 = (int)(v3 + 2); else v8 = 0; (**((void (__stdcall ***)(int))v7 + 58))(v8); *((_BYTE *)v3 + 112) = 1; break; case 4997: v9 = (char *)sub_40C190(175009361); v10 = sub_462CA0(1, v9); if ( v3 ) (**((void (__stdcall ***)(int))v10 + 58))((int)(v3 + 2)); else (**((void (__stdcall ***)(_DWORD))v10 + 58))(0); break; case 4998: v11 = this + 2; v12 = sub_40C190(2092746681); if ( v11[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 4))(25, v12, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v11[1] + 20))(25, v12, v11); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v11)[5])(v11, 25, v12, v11); break; case 4999: v13 = this + 2; v14 = sub_40C190(271639837); if ( v13[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 4))(25, v14, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v13[1] + 20))(25, v14, v13); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v13)[5])(v13, 25, v14, v13); break; case 5001: v15 = (char *)sub_40A910(-1983853127); sub_462CA0(1, v15); break; default: v16 = this + 2; v17 = sub_41A850(*a2); if ( v16[1] ) { (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v16[1] + 4))(25, v17, v16); if ( v16[1] ) (*(void (__stdcall **)(signed int, const char *, _DWORD **))(*v16[1] + 20))(25, v17, v16); } ((void (__thiscall *)(_DWORD **, signed int, const char *, _DWORD **))(*v16)[5])(v16, 25, v17, v16); break; } } return 1; } //----- (006FDA20) -------------------------------------------------------- char __thiscall sub_6FDA20(int this, int a2, int a3, int a4, int a5) { int v6; // eax int v7; // eax if ( a2 != 4 ) { if ( a2 == 8 ) { switch ( a3 ) { case 78: sub_6FD380((_DWORD *)this); return 1; case 80: sub_6FD3B0((_WORD **)this, (__int16 *)a5); return 1; case 82: sub_6FD410((_DWORD ***)this, a5); return 1; case 84: sub_6FD5B0((_DWORD **)this, (unsigned __int16 *)a5); return 1; case 87: sub_6FD6B0((_DWORD **)this, (unsigned __int16 *)a5); return 1; case 89: sub_6FD4D0((_DWORD **)this, (unsigned __int16 *)a5); return 1; case 90: return 1; case 93: sub_6FD7E0((_DWORD **)this, (unsigned __int16 *)a5); return 1; default: return 0; } } return 0; } if ( a3 == 129 ) { *(_BYTE *)(this + 64) = *(_BYTE *)(a5 + 8) & 0xF; *(_DWORD *)(this + 68) = *(_DWORD *)(a5 + 9); *(_DWORD *)(this + 72) = *(_DWORD *)(a5 + 17); *(_DWORD *)(this + 76) = *(_DWORD *)(a5 + 21); *(_DWORD *)(this + 80) = *(_DWORD *)(a5 + 25); *(_DWORD *)(this + 84) = *(_DWORD *)(a5 + 29); *(_DWORD *)(this + 88) = *(_DWORD *)(a5 + 33); *(_DWORD *)(this + 92) = *(_DWORD *)(a5 + 37); v7 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v7 ) sub_6FAF30(*(_DWORD ***)(v7 + 884)); } else { if ( a3 != 148 ) return 0; v6 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v6 ) { sub_6FAAD0(*(_DWORD ***)(v6 + 884), a5); return 1; } } return 1; } //----- (006FDB90) -------------------------------------------------------- void ***__thiscall sub_6FDB90(void ***this) { void ***v1; // esi v1 = this; sub_6C2E00(this, 0); v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[27] = 0; *v1 = &WeddingTask::`vftable'; v1[2] = &WeddingTask::`vftable'; *((_BYTE *)v1 + 64) = 0; v1[17] = 0; v1[18] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; v1[23] = (void **)-1; *((_BYTE *)v1 + 112) = 0; return v1; } // 9FDF58: using guessed type void *WeddingTask::`vftable'; // 9FDF74: using guessed type void *WeddingTask::`vftable'; //----- (006FDBE0) -------------------------------------------------------- int __cdecl sub_6FDBE0(int a1) { int v1; // eax void ***v2; // eax void ***v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_B9E408; if ( !dword_B9E408 ) { v2 = (void ***)operator new(0x74u); v3 = v2 ? sub_6FDB90(v2) : 0; v1 = dword_B9E408; if ( (void ***)dword_B9E408 != v3 ) { if ( dword_B9E408 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E408; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E408 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = (int)v3; dword_B9E408 = (int)v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)v3 + 1); v1 = dword_B9E408; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // B9E408: using guessed type int dword_B9E408; //----- (006FDCA0) -------------------------------------------------------- void *__thiscall sub_6FDCA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &WeddingTask::`vftable'; *((_DWORD *)this + 2) = &WeddingTask::`vftable'; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FDF58: using guessed type void *WeddingTask::`vftable'; // 9FDF74: using guessed type void *WeddingTask::`vftable'; //----- (006FDCD0) -------------------------------------------------------- bool __thiscall sub_6FDCD0(_DWORD *this) { return this[6] != 0; } //----- (006FDD70) -------------------------------------------------------- void __thiscall sub_6FDD70(_DWORD *this, float a2) { _DWORD *v2; // ebx int v3; // edi int i; // esi int v5; // edi _BYTE **v6; // esi int v7; // esi v2 = this; v3 = this[6]; if ( v3 ) { for ( i = *(_DWORD *)(v3 + 8); *(_DWORD *)(v3 + 12) != i; i += 4 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)i + 4))(LODWORD(a2)); v5 = v2[6]; v6 = *(_BYTE ***)(v5 + 8); if ( *(_BYTE ***)(v5 + 12) == v6 ) { LABEL_7: v7 = v2[6]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } v2[6] = 0; } } else { while ( !sub_6FF180(*v6) ) { ++v6; if ( *(_BYTE ***)(v5 + 12) == v6 ) goto LABEL_7; } } } } //----- (006FDE00) -------------------------------------------------------- char __thiscall sub_6FDE00(_DWORD *this, int a2) { _DWORD *v2; // edi int v4; // edi int *i; // esi v2 = this; if ( this[6] ) return 0; sub_96AAE0(this + 2, (int **)&a2, a2); if ( v2[3] == a2 ) return 0; sub_65AD50(v2 + 6, (int *)(a2 + 40)); v4 = v2[6]; for ( i = *(int **)(v4 + 8); *(int **)(v4 + 12) != i; ++i ) sub_6FF150(*i, 1); return 1; } //----- (006FDEE0) -------------------------------------------------------- char __thiscall sub_6FDEE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx int *v4; // eax unsigned int v5; // ecx int v6; // eax int *v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // esi char result; // al char *v10; // eax char *v11; // eax void (__thiscall ***v12)(_DWORD, signed int); // esi int v13; // [esp+10h] [ebp-3Ch] int v14; // [esp+14h] [ebp-38h] int *v15; // [esp+18h] [ebp-34h] char v16; // [esp+1Ch] [ebp-30h] int v17; // [esp+48h] [ebp-4h] v3 = this; v17 = 0; v4 = sub_4F1D20(this + 2, a2); v15 = v4; if ( v4 == (int *)v3[3] ) goto LABEL_20; v5 = v4[7]; v6 = (int)(v4 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; if ( sub_40C2F0((unsigned __int8 *)a2, 0, *(_DWORD *)(a2 + 16), (unsigned __int8 *)v6, v5) < 0 ) { LABEL_20: v14 = v3[3]; v7 = &v14; } else { v7 = (int *)&v15; } if ( v3[3] == *v7 ) { v10 = (char *)sub_6FEC60(&v16, a2, (int)&a3); LOBYTE(v17) = 1; v11 = sub_6FEE70(v3 + 2, v10); sub_96BA80(v3 + 2, (int)&v13, v11, 0); LOBYTE(v17) = 0; sub_691DA0((void **)&v16); v17 = -1; if ( a3 ) { v12 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v12 ) (**v12)(v12, 1); } } result = 1; } else { v8 = (void (__thiscall ***)(_DWORD, signed int))a3; v17 = -1; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } result = 0; } return result; } //----- (006FE020) -------------------------------------------------------- _DWORD **__cdecl sub_6FE020(_DWORD *a1, int a2) { char *v2; // eax _DWORD *v3; // eax volatile LONG *v4; // eax volatile LONG *v5; // esi char *v6; // eax volatile LONG *v7; // edi _DWORD *v8; // eax void **v9; // ecx unsigned int v10; // edx int v11; // ecx char *v12; // edx char *v13; // esi char *v14; // eax _DWORD *v15; // esi _DWORD *v16; // eax void *v17; // edx int v18; // ecx void **v19; // ecx unsigned int v20; // edx int v21; // ecx char *v22; // edx float v23; // esi float v24; // eax float v25; // esi _DWORD *v26; // eax volatile LONG *v27; // edi _DWORD *v28; // eax void **v29; // edx unsigned int v30; // ecx int v31; // edx char *v32; // ecx char *v33; // esi _DWORD *v34; // eax volatile LONG *v35; // esi _DWORD *v36; // eax void *v37; // edx void **v38; // ecx unsigned int v39; // edx int v40; // ecx char *v41; // edx float v42; // esi void *v44; // [esp-18h] [ebp-74h] int v45; // [esp-14h] [ebp-70h] int v46; // [esp-10h] [ebp-6Ch] int v47; // [esp-Ch] [ebp-68h] int v48; // [esp-8h] [ebp-64h] char *v49; // [esp-4h] [ebp-60h] float v50; // [esp+0h] [ebp-5Ch] float v51; // [esp+14h] [ebp-48h] int v52; // [esp+18h] [ebp-44h] void *v53; // [esp+1Ch] [ebp-40h] _DWORD **v54; // [esp+20h] [ebp-3Ch] void *v55; // [esp+24h] [ebp-38h] float v56; // [esp+28h] [ebp-34h] char *v57; // [esp+2Ch] [ebp-30h] void *v58; // [esp+30h] [ebp-2Ch] void *v59; // [esp+34h] [ebp-28h] int v60; // [esp+38h] [ebp-24h] void **v61; // [esp+40h] [ebp-1Ch] unsigned int v62; // [esp+44h] [ebp-18h] int v63; // [esp+48h] [ebp-14h] int v64; // [esp+58h] [ebp-4h] v54 = (_DWORD **)a1; v52 = 0; v2 = (char *)operator new(0x1Cu); v57 = v2; v64 = 1; if ( v2 ) v3 = sub_6FEF60(v2); else v3 = 0; *a1 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); v64 = 0; v52 = 1; v4 = (volatile LONG *)operator new(0x18u); v5 = v4; if ( v4 ) { v50 = COERCE_FLOAT(&Addend); *v4 = (volatile LONG)&NiRefObject::`vftable'; *((_DWORD *)v4 + 1) = 0; InterlockedIncrement((volatile LONG *)LODWORD(v50)); *v5 = (volatile LONG)&DirectionController::`vftable'; *((_DWORD *)v5 + 2) = 0; *((_DWORD *)v5 + 3) = 0; *((_DWORD *)v5 + 4) = 0; v56 = *(float *)&v5; } else { v56 = 0.0; *(float *)&v5 = 0.0; } v55 = (void *)v5; if ( *(float *)&v5 != 0.0 ) InterlockedIncrement(v5 + 1); v64 = 2; v6 = (char *)operator new(0x58u); v57 = v6; LOBYTE(v64) = 3; if ( v6 ) v7 = sub_6FF2E0(v6); else v7 = 0; v53 = (void *)v7; if ( v7 ) InterlockedIncrement(v7 + 1); v57 = (char *)&v44; v49 = (char *)15; v48 = 0; LOBYTE(v64) = 4; LOBYTE(v44) = 0; sub_4018E0(&v44, "Metamorphosis", 0xDu); sub_6FF470((const void **)v7, v44, v45, v46, v47, v48, (int)v49, SLODWORD(v50)); sub_6FF120((int)v7, 0.0); v57 = (char *)&v45; v60 = 0; v8 = operator new(0x20u); if ( !v8 ) goto LABEL_95; *v8 = &std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; v8[2] = sub_65EEB0; v8[3] = 0; v9 = v61; v8[4] = a2; v10 = v62; v8[5] = v9; v11 = v63; v8[6] = v10; v12 = v57; v8[7] = v11; *((_DWORD *)v12 + 4) = v8; sub_6FF390((int)v7, v45, v46, v47, v48, v49, SLODWORD(v50)); v57 = (char *)v7; if ( v7 ) InterlockedIncrement(v7 + 1); LOBYTE(v64) = 5; sub_4E7210((_DWORD *)(LODWORD(v56) + 8), (char *)&v57); v13 = v57; LOBYTE(v64) = 4; if ( v57 && !InterlockedDecrement((volatile LONG *)v57 + 1) ) (**(void (__thiscall ***)(char *, signed int))v13)(v13, 1); v14 = (char *)operator new(0x58u); v57 = v14; LOBYTE(v64) = 6; if ( v14 ) v15 = sub_6FF2E0(v14); else v15 = 0; v51 = *(float *)&v15; if ( v15 ) InterlockedIncrement(v15 + 1); LOBYTE(v64) = 7; sub_6FF120((int)v15, 2.0); v57 = (char *)&v44; v49 = (char *)15; v48 = 0; LOBYTE(v44) = 0; sub_4018E0(&v44, "bird_idle", 9u); sub_6FF470((const void **)v15, v44, v45, v46, v47, v48, (int)v49, SLODWORD(v50)); v57 = (char *)&v45; v59 = sub_65EEB0; v60 = 0; v16 = operator new(0x20u); if ( !v16 ) { v57 = 0; std::exception::exception((std::exception *)&v61, (const char *const *)&v57); v61 = &std::bad_alloc::`vftable'; _CxxThrowException(&v61, &_TI2_AVbad_alloc_std__); } v17 = v59; v18 = v60; *v16 = &std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; v16[2] = v17; v16[3] = v18; v19 = v61; v16[4] = a2; v20 = v62; v16[5] = v19; v21 = v63; v16[6] = v20; v22 = v57; v16[7] = v21; *((_DWORD *)v22 + 4) = v16; sub_6FF390((int)v15, v45, v46, v47, v48, v49, SLODWORD(v50)); v57 = (char *)v15; if ( v15 ) InterlockedIncrement(v15 + 1); LOBYTE(v64) = 8; sub_4E7210((_DWORD *)(LODWORD(v56) + 8), (char *)&v57); LOBYTE(v64) = 7; if ( v57 && !InterlockedDecrement((volatile LONG *)v57 + 1) ) (**(void (__stdcall ***)(signed int))v57)(1); v62 = 15; v61 = 0; LOBYTE(v58) = 0; sub_4018E0(&v58, "Metamorphosis", 0xDu); LOBYTE(v64) = 9; v57 = (char *)&v50; v50 = v56; if ( v56 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v56) + 4)); sub_6FDEE0(*v54, (int)&v58, SLODWORD(v50)); if ( v62 >= 0x10 ) operator delete(v58); LOBYTE(v64) = 4; if ( v15 && !InterlockedDecrement(v15 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v15)(v15, 1); LOBYTE(v64) = 2; if ( v7 && !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); v23 = v56; LOBYTE(v64) = 0; if ( v56 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v56) + 4)) ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v23))(LODWORD(v23), 1); v24 = COERCE_FLOAT(operator new(0x18u)); v25 = v24; if ( v24 == 0.0 ) { v56 = 0.0; v25 = 0.0; } else { v50 = COERCE_FLOAT(&Addend); *(_DWORD *)LODWORD(v24) = &NiRefObject::`vftable'; *(_DWORD *)(LODWORD(v24) + 4) = 0; InterlockedIncrement((volatile LONG *)LODWORD(v50)); *(_DWORD *)LODWORD(v25) = &DirectionController::`vftable'; *(_DWORD *)(LODWORD(v25) + 8) = 0; *(_DWORD *)(LODWORD(v25) + 12) = 0; *(_DWORD *)(LODWORD(v25) + 16) = 0; v56 = v25; } v51 = v25; if ( v25 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v25) + 4)); v64 = 10; v26 = operator new(0x58u); v53 = v26; LOBYTE(v64) = 11; if ( v26 ) v27 = sub_6FF2E0(v26); else v27 = 0; v53 = (void *)v27; if ( v27 ) InterlockedIncrement(v27 + 1); v55 = &v44; v49 = (char *)15; v48 = 0; LOBYTE(v64) = 12; LOBYTE(v44) = 0; sub_4018E0(&v44, "UnMetamorphosis", 0xFu); sub_6FF470((const void **)v27, v44, v45, v46, v47, v48, (int)v49, SLODWORD(v50)); sub_6FF120((int)v27, 0.0); v55 = &v45; v57 = (char *)&v45; v60 = 0; v28 = operator new(0x20u); if ( !v28 ) { v57 = 0; std::exception::exception((std::exception *)&v61, (const char *const *)&v57); v61 = &std::bad_alloc::`vftable'; _CxxThrowException(&v61, &_TI2_AVbad_alloc_std__); } *v28 = &std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; v28[2] = sub_65EEB0; v28[3] = 0; v29 = v61; v28[4] = a2; v30 = v62; v28[5] = v29; v31 = v63; v28[6] = v30; v32 = v57; v28[7] = v31; *((_DWORD *)v32 + 4) = v28; sub_6FF390((int)v27, v45, v46, v47, v48, v49, SLODWORD(v50)); v57 = (char *)v27; if ( v27 ) InterlockedIncrement(v27 + 1); LOBYTE(v64) = 13; sub_4E7210((_DWORD *)(LODWORD(v56) + 8), (char *)&v57); v33 = v57; LOBYTE(v64) = 12; if ( v57 && !InterlockedDecrement((volatile LONG *)v57 + 1) ) (**(void (__thiscall ***)(char *, signed int))v33)(v33, 1); v34 = operator new(0x58u); v55 = v34; LOBYTE(v64) = 14; if ( v34 ) v35 = sub_6FF2E0(v34); else v35 = 0; v55 = (void *)v35; if ( v35 ) InterlockedIncrement(v35 + 1); LOBYTE(v64) = 15; sub_6FF120((int)v35, 2.0); v57 = (char *)&v44; v49 = (char *)15; v48 = 0; LOBYTE(v44) = 0; sub_4018E0(&v44, "dummy", 5u); sub_6FF470((const void **)v35, v44, v45, v46, v47, v48, (int)v49, SLODWORD(v50)); v57 = (char *)&v45; v59 = sub_654B20; v60 = 0; v36 = operator new(0x20u); if ( !v36 ) { LABEL_95: v57 = 0; std::exception::exception((std::exception *)&v61, (const char *const *)&v57); v61 = &std::bad_alloc::`vftable'; _CxxThrowException(&v61, &_TI2_AVbad_alloc_std__); } v37 = v59; *v36 = &std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; v36[2] = v37; v36[3] = 0; v38 = v61; v36[4] = a2; v39 = v62; v36[5] = v38; v40 = v63; v36[6] = v39; v41 = v57; v36[7] = v40; *((_DWORD *)v41 + 4) = v36; sub_6FF390((int)v35, v45, v46, v47, v48, v49, SLODWORD(v50)); v57 = (char *)v35; if ( v35 ) InterlockedIncrement(v35 + 1); LOBYTE(v64) = 16; sub_4E7210((_DWORD *)(LODWORD(v56) + 8), (char *)&v57); LOBYTE(v64) = 15; if ( v57 && !InterlockedDecrement((volatile LONG *)v57 + 1) ) (**(void (__stdcall ***)(signed int))v57)(1); v62 = 15; v61 = 0; LOBYTE(v58) = 0; sub_4018E0(&v58, "UnMetamorphosis", 0xFu); LOBYTE(v64) = 17; v57 = (char *)&v50; v50 = v56; if ( v56 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v56) + 4)); sub_6FDEE0(*v54, (int)&v58, SLODWORD(v50)); if ( v62 >= 0x10 ) operator delete(v58); LOBYTE(v64) = 12; if ( v35 && !InterlockedDecrement(v35 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v35)(v35, 1); LOBYTE(v64) = 10; if ( v27 && !InterlockedDecrement(v27 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v27)(v27, 1); v42 = v56; LOBYTE(v64) = 0; if ( v56 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v56) + 4)) ) (**(void (__thiscall ***)(_DWORD, signed int))LODWORD(v42))(LODWORD(v42), 1); return v54; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9FDFE0: using guessed type void *std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; // 9FDFFC: using guessed type void *DirectionController::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006FE780) -------------------------------------------------------- void ***sub_6FE780() { return &std::tr1::_Bind,Char *,std::tr1::_Ph<1>>> `RTTI Type Descriptor'; } // AB8518: using guessed type void **std::tr1::_Bind,Char *,std::tr1::_Ph<1>>> `RTTI Type Descriptor'; //----- (006FE790) -------------------------------------------------------- void *__thiscall sub_6FE790(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::tr1::_Impl_base1::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9F8A4C: using guessed type void *std::tr1::_Impl_base1::`vftable'; //----- (006FE7C0) -------------------------------------------------------- int __thiscall sub_6FE7C0(char *this) { return (int)(this + 8); } //----- (006FE7D0) -------------------------------------------------------- char *__thiscall sub_6FE7D0(_DWORD *this, char *a2) { char *result; // eax _DWORD *v3; // esi void **v4; // [esp+4h] [ebp-Ch] result = a2; v3 = this; if ( !a2 ) { result = (char *)operator new(0x20u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&a2); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } } *(_DWORD *)result = &std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; *((_DWORD *)result + 2) = v3[2]; *((_DWORD *)result + 3) = v3[3]; *((_DWORD *)result + 4) = v3[4]; *((_DWORD *)result + 5) = v3[5]; *((_DWORD *)result + 6) = v3[6]; *((_DWORD *)result + 7) = v3[7]; return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9FDFE0: using guessed type void *std::tr1::_Impl_no_alloc1,Char *,std::tr1::_Ph<1>>>,0>,void,char const *>::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006FE850) -------------------------------------------------------- void __thiscall sub_6FE850(void *this, char a2) { void *v2; // esi v2 = this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 16))(0); if ( a2 ) operator delete(v2); } //----- (006FE880) -------------------------------------------------------- int __thiscall sub_6FE880(int this, int a2) { return (*(int (__thiscall **)(int, int))(this + 8))(*(_DWORD *)(this + 12) + *(_DWORD *)(this + 16), a2); } //----- (006FE8A0) -------------------------------------------------------- int **__thiscall sub_6FE8A0(_DWORD *this, int **a2, int *a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi int v7; // eax void **v8; // ebx _DWORD *v9; // eax int v10; // ebx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax void **v16; // esi int v17; // edi int v18; // eax int **result; // eax char *v20; // [esp+14h] [ebp-14h] _DWORD *v21; // [esp+18h] [ebp-10h] v21 = this; if ( *((_BYTE *)a3 + 45) ) std::_Xout_of_range("invalid map/set iterator"); v3 = a3; v20 = (char *)a3; sub_66FB80(&a3); if ( *(_BYTE *)(*v3 + 45) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; v7 = v21[1]; if ( *(int **)(v7 + 4) == v3 ) { *(_DWORD *)(v7 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } v8 = (void **)v21[1]; if ( *v8 == v20 ) { if ( *(_BYTE *)(v4 + 45) ) v9 = (_DWORD *)v6; else v9 = sub_5AB880((_DWORD *)v4); *v8 = v9; } v10 = v21[1]; if ( *(char **)(v10 + 8) == v20 ) { if ( *(_BYTE *)(v4 + 45) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6689E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 45) ) { v4 = *v3; goto LABEL_8; } v5 = (int)a3; v4 = a3[2]; if ( a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v21[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 44); *(_BYTE *)(v5 + 44) = *((_BYTE *)v3 + 44); *((_BYTE *)v3 + 44) = v13; LABEL_35: if ( v20[44] == 1 ) { for ( i = v21; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 44) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[44] ) { v15[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_467110(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v21; } if ( v15[45] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 44) = 1; v15[44] = 0; sub_747860(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v21; } v15[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) = 1; sub_467110(i, v6); break; } } else { if ( !v15[44] ) { v15[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_747860(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v21; } if ( v15[45] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 44) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) = 1; v15[44] = 0; sub_467110(i, (int)v15); v15 = *(_BYTE **)v6; i = v21; } v15[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*(_DWORD *)v15 + 44) = 1; sub_747860(i, (_DWORD *)v6); break; } } v15[44] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 44) = 1; } v16 = (void **)(v20 + 12); v17 = *((_DWORD *)v20 + 10); if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); if ( *((_DWORD *)v20 + 8) >= 0x10u ) operator delete(*v16); *((_DWORD *)v20 + 8) = 15; *((_DWORD *)v20 + 7) = 0; *(_BYTE *)v16 = 0; operator delete(v20); v18 = v21[2]; if ( v18 ) v21[2] = v18 - 1; result = a2; *a2 = a3; return result; } //----- (006FEB80) -------------------------------------------------------- void __stdcall sub_6FEB80(void *a1) { char *v1; // esi void **v2; // edi int v3; // esi int v4; // ebx v1 = (char *)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 45) ) { while ( 1 ) { sub_6FEB80(v2[2]); v2 = (void **)*v2; v3 = (int)(v1 + 12); v4 = *(_DWORD *)(v3 + 28); if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( *(_DWORD *)(v3 + 20) >= 0x10u ) operator delete(*(void **)v3); *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; operator delete(a1); a1 = v2; if ( *((_BYTE *)v2 + 45) ) break; v1 = (char *)v2; } } } //----- (006FEC60) -------------------------------------------------------- void *__cdecl sub_6FEC60(void *a1, int a2, int a3) { int v3; // eax void *v5; // [esp+10h] [ebp-2Ch] int v6; // [esp+20h] [ebp-1Ch] unsigned int v7; // [esp+24h] [ebp-18h] int v8; // [esp+38h] [ebp-4h] v7 = 15; v6 = 0; LOBYTE(v5) = 0; sub_4017F0((const void **)&v5, (const void **)a2, 0, (void *)0xFFFFFFFF); *((_DWORD *)a1 + 5) = 15; *((_DWORD *)a1 + 4) = 0; v8 = 0; *(_BYTE *)a1 = 0; sub_406450(a1, &v5); v3 = *(_DWORD *)a3; *((_DWORD *)a1 + 7) = *(_DWORD *)a3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); if ( v7 >= 0x10 ) operator delete(v5); return a1; } //----- (006FED10) -------------------------------------------------------- void **__thiscall sub_6FED10(void *this, int a2) { void **v2; // esi int *v3; // eax v2 = (void **)this; v3 = (int *)*((_DWORD *)this + 2); if ( v3 ) { sub_467720(v3, *((int **)this + 3)); operator delete(v2[2]); } v2[2] = 0; v2[3] = 0; v2[4] = 0; *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (006FEDB0) -------------------------------------------------------- int **__thiscall sub_6FEDB0(_DWORD *this, int **a2, int *a3, int *a4) { _DWORD *v4; // esi int v5; // eax int *v6; // ecx int **v7; // ecx int **result; // eax int *v9; // edx int **v10; // eax int *v11; // ecx int *j; // eax int *i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(int **)v5 || a4 != (int *)v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*((_BYTE *)v6 + 45) ) { v10 = (int **)v6[2]; if ( *((_BYTE *)v10 + 45) ) { for ( i = (int *)v6[1]; !*((_BYTE *)i + 45); i = (int *)i[1] ) { if ( v6 != (int *)i[2] ) break; v6 = i; } a3 = i; } else { v11 = (int *)v6[2]; for ( j = *v10; !*((_BYTE *)j + 45); j = (int *)*j ) v11 = j; a3 = v11; } } sub_6FE8A0(v4, (int **)&v14, v9); } result = a2; *a2 = v6; } else { sub_6FEB80(*(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int **)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (006FEE70) -------------------------------------------------------- char *__thiscall sub_6FEE70(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v5; // eax int v7; // [esp+0h] [ebp-38h] void **v8; // [esp+10h] [ebp-28h] void *v9; // [esp+1Ch] [ebp-1Ch] char *v10; // [esp+20h] [ebp-18h] void *v11; // [esp+24h] [ebp-14h] int *v12; // [esp+28h] [ebp-10h] int v13; // [esp+34h] [ebp-4h] v12 = &v7; v2 = this; v3 = (char *)operator new(0x30u); v11 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a2); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v13 = 0; v10 = v3 + 12; v9 = v3 + 12; LOBYTE(v13) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_406450(v3 + 12, v4); v5 = *((_DWORD *)v4 + 7); *((_DWORD *)v3 + 10) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006FEF60) -------------------------------------------------------- _DWORD *__thiscall sub_6FEF60(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &DirectionControllers::`vftable'; v7 = 0; v1[4] = 0; v2 = operator new(0x30u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[3] = v2; *v2 = v2; *(_DWORD *)(v1[3] + 4) = v1[3]; *(_DWORD *)(v1[3] + 8) = v1[3]; *(_BYTE *)(v1[3] + 44) = 1; *(_BYTE *)(v1[3] + 45) = 1; v1[6] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9FE004: using guessed type void *DirectionControllers::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (006FF020) -------------------------------------------------------- LONG __thiscall sub_6FF020(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int *v3; // ST08_4 int *v4; // ST04_4 char v6; // [esp+10h] [ebp-18h] _DWORD *v7; // [esp+14h] [ebp-14h] _DWORD *v8; // [esp+18h] [ebp-10h] int v9; // [esp+24h] [ebp-4h] v1 = this; v8 = this; v2 = this[6]; v9 = 1; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v7 = v1 + 2; v3 = (int *)v1[3]; v4 = *(int **)v1[3]; LOBYTE(v9) = 2; sub_6FEDB0(v1 + 2, (int **)&v6, v4, v3); operator delete((void *)v1[3]); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (006FF0C0) -------------------------------------------------------- void *__thiscall sub_6FF0C0(void *this, char a2) { void *v2; // esi v2 = this; sub_6FF020(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (006FF120) -------------------------------------------------------- void __thiscall sub_6FF120(int this, float a2) { *(_DWORD *)(this + 72) = 0; *(float *)(this + 64) = a2; *(float *)(this + 60) = a2; } //----- (006FF150) -------------------------------------------------------- char __thiscall sub_6FF150(int this, char a2) { int v2; // eax LOBYTE(v2) = a2; *(float *)(this + 68) = 0.0; *(_BYTE *)(this + 80) = a2; if ( a2 ) { v2 = *(_DWORD *)(this + 76); if ( v2 ) { *(_DWORD *)(this + 72) = v2; LOBYTE(v2) = *(_BYTE *)(this + 80); } else { *(_BYTE *)(this + 80) = 0; } } return v2; } //----- (006FF180) -------------------------------------------------------- char __thiscall sub_6FF180(_BYTE *this) { return this[80]; } //----- (006FF190) -------------------------------------------------------- char __thiscall sub_6FF190(_BYTE *this, float a2) { double v2; // st7 int v3; // eax double v4; // st6 bool v5; // sf unsigned __int8 v6; // of float *v7; // eax int v8; // eax _BYTE *v10; // [esp+0h] [ebp-4h] v10 = this; if ( !this[80] ) return 0; a2 = *((float *)this + 15) - a2; v2 = a2; *((float *)this + 15) = a2; if ( v2 > 0.0 ) return 0; v3 = *((_DWORD *)this + 18) - 1; v4 = v2 + *((float *)this + 16); v10 = (_BYTE *)v3; v6 = __OFSUB__(v3, -1); v5 = v3 + 1 < 0; *((float *)this + 15) = v4; a2 = -6.8056469e38/*NaN*/; v7 = &a2; if ( !(v5 ^ v6) ) v7 = (float *)&v10; v8 = *(_DWORD *)v7; *((_DWORD *)this + 18) = v8; if ( !v8 ) { this[80] = 0; *((float *)this + 17) = 0.0; } (*(void (__stdcall **)(_BYTE *))(*(_DWORD *)this + 8))(v10); return 1; } //----- (006FF220) -------------------------------------------------------- char __thiscall sub_6FF220(int this, float a2) { int v2; // esi float v3; // ST08_4 char result; // al v2 = this; if ( *(_BYTE *)(this + 80) ) { if ( 0.0 == *(float *)(this + 68) ) *(float *)(this + 68) = a2; v3 = a2 - *(float *)(this + 68); result = sub_6FF190((_BYTE *)this, v3); *(float *)(v2 + 68) = a2; } return result; } //----- (006FF260) -------------------------------------------------------- int __thiscall sub_6FF260(_DWORD *this) { bool v1; // cf _DWORD *v2; // eax std::tr1 *v4; // [esp+0h] [ebp-2Ch] std::tr1 **v5; // [esp+1Ch] [ebp-10h] int v6; // [esp+28h] [ebp-4h] v5 = &v4; v1 = this[13] < 0x10u; v2 = this + 8; v6 = 0; if ( !v1 ) v2 = (_DWORD *)*v2; if ( !this[6] ) std::tr1::_Xfunc(v4); return (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)this[6] + 4))(v2); } //----- (006FF2E0) -------------------------------------------------------- _DWORD *__thiscall sub_6FF2E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &TimerController::`vftable'; v1[6] = 0; v1[12] = 0; v1[13] = 15; *((_BYTE *)v1 + 32) = 0; *((float *)v1 + 15) = 0.0; *((float *)v1 + 16) = 0.0; v1[18] = 1; *((float *)v1 + 17) = 0.0; v1[19] = 1; *((_BYTE *)v1 + 80) = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9FE00C: using guessed type void *TimerController::`vftable'; //----- (006FF390) -------------------------------------------------------- char *__thiscall sub_6FF390(int this, char a2, int a3, int a4, int a5, char *a6, int a7) { int v7; // esi char *result; // eax int v9; // ecx char *v10; // ecx int (__stdcall *v11)(int); // eax v7 = this + 8; result = &a2; if ( (char *)(this + 8) != &a2 ) { v9 = *(_DWORD *)(this + 24); if ( v9 ) { result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v9 + 12))(v9 != v7); *(_DWORD *)(v7 + 16) = 0; } v10 = a6; if ( !a6 ) { *(_DWORD *)(v7 + 16) = a6; goto LABEL_11; } v11 = **(int (__stdcall ***)(int))a6; if ( a6 == &a2 ) result = (char *)v11(v7); else result = (char *)v11(0); *(_DWORD *)(v7 + 16) = result; } v10 = a6; LABEL_11: if ( v10 ) result = (char *)(*(int (__stdcall **)(bool))(*(_DWORD *)v10 + 12))(v10 != &a2); return result; } //----- (006FF470) -------------------------------------------------------- void __thiscall sub_6FF470(const void **this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8) { sub_4017F0(this + 8, (const void **)&a2, 0, (void *)0xFFFFFFFF); if ( (unsigned int)a7 >= 0x10 ) operator delete(a2); } //----- (006FF4D0) -------------------------------------------------------- _DWORD *__thiscall sub_6FF4D0(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; if ( *((_DWORD *)this + 13) >= 0x10u ) operator delete(*((void **)this + 8)); v2[13] = 15; v2[12] = 0; *((_BYTE *)v2 + 32) = 0; v3 = v2[6]; if ( v3 ) { (*(void (__stdcall **)(bool))(*(_DWORD *)v3 + 12))(v3 != (_DWORD)(v2 + 2)); v2[6] = 0; } *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (006FF590) -------------------------------------------------------- _DWORD *__thiscall sub_6FF590(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; *((_BYTE *)v1 + 376) = 0; *v1 = &GuildAcademyHallOfFameWin::`vftable'; v1[58] = &GuildAcademyHallOfFameWin::`vftable'; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FE2E8: using guessed type void *GuildAcademyHallOfFameWin::`vftable'; // 9FE304: using guessed type void *GuildAcademyHallOfFameWin::`vftable'; //----- (006FF640) -------------------------------------------------------- int __thiscall sub_6FF640(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[89]; if ( v2 ) { v3 = *((_BYTE *)v1 + 372) == 0; v1[92] = 0; *((_BYTE *)v1 + 372) = v3; sub_466AF0(v2, 0, v3, 0); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (006FF680) -------------------------------------------------------- int __thiscall sub_6FF680(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[89]; if ( v2 ) { v3 = *((_BYTE *)v1 + 373) == 0; v1[92] = 1; *((_BYTE *)v1 + 373) = v3; sub_466AF0(v2, 1, v3, 0); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (006FF6C0) -------------------------------------------------------- int __thiscall sub_6FF6C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[89]; if ( v2 ) { v3 = *((_BYTE *)v1 + 374) == 0; v1[92] = 2; *((_BYTE *)v1 + 374) = v3; sub_466AF0(v2, 2, v3, 1); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (006FF700) -------------------------------------------------------- int __thiscall sub_6FF700(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[89]; if ( v2 ) { v3 = *((_BYTE *)v1 + 375) == 0; v1[92] = 3; *((_BYTE *)v1 + 375) = v3; sub_466AF0(v2, 3, v3, 0); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (006FF740) -------------------------------------------------------- int __thiscall sub_6FF740(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[89]; if ( v2 ) { v3 = *((_BYTE *)v1 + 376) == 0; v1[92] = 4; *((_BYTE *)v1 + 376) = v3; sub_466AF0(v2, 4, v3, 0); result = sub_465130((_DWORD *)v1[89]); } return result; } //----- (006FF780) -------------------------------------------------------- char sub_6FF780() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildAcademyHonor"); return (char)v0; } //----- (006FF7B0) -------------------------------------------------------- char __thiscall sub_6FF7B0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[89], v2[90]); return v3; } //----- (006FF7E0) -------------------------------------------------------- char __thiscall sub_6FF7E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (006FF810) -------------------------------------------------------- char __thiscall sub_6FF810(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (006FF840) -------------------------------------------------------- void __thiscall sub_6FF840(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[90]; if ( v2 ) { v3 = v1[89]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[89] + 344) = *(_DWORD *)(v1[90] + 300); sub_465130((_DWORD *)v1[89]); } } } //----- (006FF890) -------------------------------------------------------- void __thiscall sub_6FF890(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 11: sub_6FF7E0(this); break; case 13: sub_6FF840(this); break; case 14: sub_6FF640(this); break; case 15: sub_6FF680(this); break; case 16: sub_6FF6C0(this); break; case 17: sub_6FF700(this); break; case 18: sub_6FF740(this); break; case 20: sub_6FF810(this); break; case 21: sub_6FF780(); break; default: return; } } //----- (006FF930) -------------------------------------------------------- void __thiscall sub_6FF930(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int v4; // edx int v5; // eax int v6; // edi int v7; // eax CHAR *v8; // eax char *v9; // eax const char *v10; // eax const char *v11; // eax char v12; // [esp+8h] [ebp-5Ch] char v13; // [esp+28h] [ebp-3Ch] int v14; // [esp+48h] [ebp-1Ch] int v15; // [esp+4Ch] [ebp-18h] int v16; // [esp+50h] [ebp-14h] int v17; // [esp+54h] [ebp-10h] int v18; // [esp+58h] [ebp-Ch] char v19; // [esp+5Ch] [ebp-8h] v2 = this; if ( this[89] ) { v3 = *(_DWORD *)a2; v15 = *(_DWORD *)(a2 + 4); v4 = *(_DWORD *)(a2 + 12); v14 = v3; v5 = *(_DWORD *)(a2 + 8); v17 = v4; v16 = v5; v18 = *(_DWORD *)(a2 + 16); v19 = 0; v6 = ((int (__stdcall *)(int *))loc_466CA0)(&v14); v7 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a2 + 20)); if ( v7 ) v8 = (CHAR *)(v7 + 21); else v8 = (CHAR *)&byte_9A8050; sub_4661A0((_DWORD *)v2[89], v6, 1, v8); v9 = sub_7549E0("%d", *(unsigned __int8 *)(a2 + 62)); sub_4661A0((_DWORD *)v2[89], v6, 2, v9); v10 = sub_40A910(1296251015); strftime(&v13, 0x20u, v10, (const struct tm *)(a2 + 26)); sub_4661A0((_DWORD *)v2[89], v6, 3, &v13); v11 = sub_40A910(1296251015); strftime(&v12, 0x20u, v11, (const struct tm *)(a2 + 67)); sub_4661A0((_DWORD *)v2[89], v6, 4, &v12); sub_464B20((_DWORD *)v2[89], v6, a2); sub_464BA0((_DWORD *)v2[89], v6, 1); sub_464BE0((_DWORD *)v2[89], v6, 255, 255, 255); } } // AC9C84: using guessed type int dword_AC9C84; //----- (006FFA80) -------------------------------------------------------- signed int __thiscall sub_6FFA80(_DWORD *this, int a2) { int v2; // edx _DWORD *v3; // esi int v4; // ecx int v5; // eax int v6; // ecx const char *v7; // eax int v8; // ebx char *v9; // eax signed int result; // eax _DWORD *v11; // ecx int v12; // ebx int v13; // eax int v14; // ebx int v15; // edi char v16; // [esp+Ch] [ebp-38h] int v17; // [esp+2Ch] [ebp-18h] int v18; // [esp+30h] [ebp-14h] int v19; // [esp+34h] [ebp-10h] int v20; // [esp+38h] [ebp-Ch] char v21; // [esp+3Ch] [ebp-8h] v2 = *(_DWORD *)(a2 + 15); v3 = this; v4 = *(_DWORD *)(a2 + 11); v17 = *(_DWORD *)(a2 + 7); v5 = *(_DWORD *)(a2 + 19); v18 = v4; v6 = v3[86]; v19 = v2; v20 = v5; v21 = 0; (*(void (__stdcall **)(int *))(*(_DWORD *)v6 + 472))(&v17); v7 = sub_40A910(1296251015); strftime(&v16, 0x20u, v7, (const struct tm *)(a2 + 27)); (*(void (__stdcall **)(char *))(*(_DWORD *)v3[87] + 472))(&v16); v8 = *(_DWORD *)v3[88]; v9 = sub_7549E0("%d", *(unsigned __int16 *)(a2 + 63)); result = (*(int (__thiscall **)(_DWORD, char *))(v8 + 472))(v3[88], v9); v11 = (_DWORD *)v3[89]; if ( v11 ) { if ( *(_BYTE *)(a2 + 2) & 1 ) { sub_466A50(v11); sub_4638F0((_DWORD *)v3[90], 0); v12 = v3[89]; *(float *)(v12 + 340) = 0.0; *(_DWORD *)(v12 + 344) = (signed int)((double)*(signed int *)(v12 + 336) * 0.0); *(_DWORD *)(v3[89] + 344) = 0; } v13 = *(unsigned __int16 *)(a2 + 65); v14 = 0; v3[91] = v13; if ( v13 > 0 ) { v15 = a2 + 67; do { sub_6FF930(v3, v15); ++v14; v15 += 103; } while ( v14 < v3[91] ); } sub_466AF0((_DWORD *)v3[89], v3[92], 0, 0); sub_464D00((_DWORD *)v3[89], 4); sub_464DA0((_DWORD *)v3[89], 0, 5); sub_464DA0((_DWORD *)v3[89], 1u, 5); sub_464DA0((_DWORD *)v3[89], 2u, 5); sub_464DA0((_DWORD *)v3[89], 3u, 5); sub_464DA0((_DWORD *)v3[89], 4u, 5); sub_465130((_DWORD *)v3[89]); result = sub_4638F0((_DWORD *)v3[90], *(_DWORD *)(v3[89] + 336)); } return result; } //----- (006FFC50) -------------------------------------------------------- volatile LONG *__cdecl sub_6FFC50(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x17Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_6FF590(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (006FFD80) -------------------------------------------------------- char __thiscall sub_6FFD80(volatile LONG **this, volatile LONG **a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax volatile LONG **v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // ecx volatile LONG **v27; // eax int v28; // eax volatile LONG *v29; // eax int v30; // edx const CHAR *v31; // eax int v32; // eax int v33; // edx volatile LONG **v34; // eax volatile LONG *v35; // STA8_4 volatile LONG *v36; // eax volatile LONG *v37; // eax int v38; // eax volatile LONG **v39; // edx int v40; // eax volatile LONG *v41; // eax int v42; // ecx const CHAR *v43; // eax int v44; // eax volatile LONG **v45; // edx int v46; // eax volatile LONG *v47; // eax int v48; // eax volatile LONG **v49; // edx int v50; // eax volatile LONG *v51; // eax int v52; // ecx const CHAR *v53; // eax int v54; // eax volatile LONG **v55; // edx int v56; // eax volatile LONG *v57; // eax volatile LONG **v58; // eax volatile LONG **v59; // eax volatile LONG **v60; // eax volatile LONG **v61; // eax volatile LONG **v62; // eax volatile LONG **v63; // eax volatile LONG **v64; // eax volatile LONG **v65; // eax volatile LONG *v66; // eax volatile LONG **v67; // eax int v68; // eax int v69; // eax volatile LONG **v70; // edx int v71; // eax volatile LONG *v72; // eax volatile LONG v73; // edx const CHAR *v74; // eax volatile LONG *v75; // ecx volatile LONG **v76; // eax int v77; // eax volatile LONG *v78; // eax volatile LONG v79; // edx const CHAR *v80; // eax volatile LONG *v81; // ecx volatile LONG **v82; // eax int v83; // eax volatile LONG *v84; // eax volatile LONG v85; // edx const CHAR *v86; // eax volatile LONG *v87; // ecx volatile LONG **v88; // eax int v89; // eax volatile LONG *v90; // eax volatile LONG v91; // edx const CHAR *v92; // eax volatile LONG *v93; // ecx volatile LONG **v94; // eax int v95; // eax volatile LONG *v96; // eax volatile LONG v97; // edx const CHAR *v98; // eax volatile LONG *v99; // ecx volatile LONG *v100; // eax int v101; // eax volatile LONG *v102; // edi volatile LONG v103; // ebx const CHAR *v104; // eax int v105; // [esp+C0h] [ebp-74h] int v106; // [esp+C4h] [ebp-70h] int v107; // [esp+C8h] [ebp-6Ch] char v108; // [esp+D0h] [ebp-64h] int v109; // [esp+D4h] [ebp-60h] int v110; // [esp+D8h] [ebp-5Ch] int v111; // [esp+DCh] [ebp-58h] int v112; // [esp+E0h] [ebp-54h] int v113; // [esp+E4h] [ebp-50h] int v114; // [esp+E8h] [ebp-4Ch] int v115; // [esp+ECh] [ebp-48h] volatile LONG *v116; // [esp+F0h] [ebp-44h] volatile LONG *v117; // [esp+F4h] [ebp-40h] int v118; // [esp+F8h] [ebp-3Ch] int v119; // [esp+FCh] [ebp-38h] int v120; // [esp+100h] [ebp-34h] volatile LONG **v121; // [esp+104h] [ebp-30h] const void *v122[7]; // [esp+108h] [ebp-2Ch] int v123; // [esp+130h] [ebp-4h] v2 = this; v121 = a2; v120 = 0; v3 = dword_BA6BA0; v123 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademyHonor.nif"); sub_8F66B0(v4, (int)&v120, v3); if ( !v120 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v120 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v115 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v123) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v116 = v9) == 0) ) { LOBYTE(v123) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v120; v123 = -1; if ( v120 && !InterlockedDecrement((volatile LONG *)(v120 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v120, (int)"Frame", (int)&v118, (int)&v119, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, (int)v121, (int)"GuildAcademyRanking", 0) ) { v14 = v118; v15 = v119; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v120, (int)"Theme", (int)&v118, (int)&v119, v16); else v17 = sub_8FB140(v120, (int)"Theme", (int)&v118, (int)&v119, 0); sub_8F3EB0(v118 - v14, v119 - v15, (int)v17, (int)v2, 0, 0); v18 = (volatile LONG *)sub_43D0D0(0x12u); v19 = sub_8FB140(v120, (int)"IconSlot", (int)&v118, (int)&v119, v18); sub_8F3EB0(v118 - v14, v119 - v15, (int)v19, (int)v2, 0, 0); if ( sub_8F71E0(v120, (int)"WinTitle", &v118, &v119, &v114, &v113) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v118 - v14, v119 - v15, v114, v113, v20, (int)v2, 0, 0); v22 = *v21; v121 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); (*((void (__stdcall **)(int *))*v121 + 117))(&dword_AA8D98); v117 = *v121; v23 = sub_40C190(1945289397); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v23); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"ClsNor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"ClsClick"); sub_8FB650(v121, v120, (int)"ClsOver"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 11, 0, 0); v117 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v120 + 72))("HelpLinkNor") ) { v121 = sub_8FB140(v120, (int)"HelpLinkNor", (int)&v118, (int)&v119, v117); sub_8FB650(v121, v120, (int)"HelpLinkClick"); sub_8FB650(v121, v120, (int)"HelpLinkOver"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 21, 0, 0); } v24 = sub_8FB140(v120, (int)"Panel01", (int)&v118, (int)&v119, v116); sub_8F3EB0(v118 - v14, v119 - v15, (int)v24, (int)v2, 0, 0); v25 = sub_8FB140(v120, (int)"Panel03", (int)&v118, (int)&v119, v116); sub_8F3EB0(v118 - v14, v119 - v15, (int)v25, (int)v2, 0, 0); v26 = sub_8FB140(v120, (int)"Guild01", (int)&v118, (int)&v119, v116)[9]; v27 = *(volatile LONG ***)(*v26 + 20); v117 = *(volatile LONG **)(*v26 + 24); v121 = v27; v28 = sub_421050(0); v29 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v28, (int)v2, 0, 0); v30 = *v29; v121 = (volatile LONG **)v29; v117 = (volatile LONG *)v30; v31 = sub_40C190(-655564723); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v31); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title1Desc", (int)&v118, (int)&v119, v116); sub_8F3EB0(v118 - v14, v119, (int)v121, (int)v2, 0, 0); v32 = *v121[9]; v33 = *(_DWORD *)(v32 + 24); v34 = *(volatile LONG ***)(v32 + 20); v35 = (volatile LONG *)dword_AD01E8; v117 = (volatile LONG *)v33; v121 = v34; v36 = (volatile LONG *)sub_421050(0); v37 = sub_90AEF0( v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v36, v2, 0, 0, 0, 1, v35, (volatile LONG *)0x1E); v2[86] = v37; (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); (*(void (__stdcall **)(const char *))(*v2[86] + 472))("-"); v38 = *sub_8FB140(v120, (int)"Guild02", (int)&v118, (int)&v119, v116)[9]; v39 = *(volatile LONG ***)(v38 + 20); v117 = *(volatile LONG **)(v38 + 24); v121 = v39; v40 = sub_421050(0); v41 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v40, (int)v2, 0, 0); v42 = *v41; v121 = (volatile LONG **)v41; v117 = (volatile LONG *)v42; v43 = sub_40C190(1871150070); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v43); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title2Desc", (int)&v118, (int)&v119, v116); sub_8F3EB0(v118 - v14, v119, (int)v121, (int)v2, 0, 0); v44 = *v121[9]; v45 = *(volatile LONG ***)(v44 + 20); v117 = *(volatile LONG **)(v44 + 24); v121 = v45; v46 = sub_421050(0); v47 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v46, (int)v2, 0, 0); v2[87] = v47; (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 5); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); v48 = *sub_8FB140(v120, (int)"Guild03", (int)&v118, (int)&v119, v116)[9]; v49 = *(volatile LONG ***)(v48 + 20); v117 = *(volatile LONG **)(v48 + 24); v121 = v49; v50 = sub_421050(0); v51 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v50, (int)v2, 0, 0); v52 = *v51; v121 = (volatile LONG **)v51; v117 = (volatile LONG *)v52; v53 = sub_40C190(892549515); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v53); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title3Desc", (int)&v118, (int)&v119, v116); sub_8F3EB0(v118 - v14, v119, (int)v121, (int)v2, 0, 0); v54 = *v121[9]; v55 = *(volatile LONG ***)(v54 + 20); v117 = *(volatile LONG **)(v54 + 24); v121 = v55; v56 = sub_421050(0); v57 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v56, (int)v2, 0, 0); v2[88] = v57; (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 5); (*(void (__stdcall **)(_DWORD))(*v2[88] + 240))(0); v105 = 0; v106 = 0; v107 = 0; v108 = 0; v109 = 0; v110 = 0; v111 = 0; v112 = 0; LOBYTE(v123) = 2; v58 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 1); *v58 = (volatile LONG *)1; v58[1] = (volatile LONG *)v120; v121 = v58; sub_4019E0(v122, "ColumnBarNor"); LOBYTE(v123) = 3; v121 += 18; sub_40B060((int *)v121, v122); LOBYTE(v123) = 2; sub_636A10(v122); sub_4019E0(v122, "ColumnBarClick"); LOBYTE(v123) = 4; sub_40B060((int *)v121, v122); LOBYTE(v123) = 2; sub_636A10(v122); sub_4019E0(v122, "ColumnBarOver"); LOBYTE(v123) = 5; sub_40B060((int *)v121, v122); LOBYTE(v123) = 2; sub_636A10(v122); v59 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 2); v121 = v59; *v59 = (volatile LONG *)2; sub_4019E0(v122, "Column01"); LOBYTE(v123) = 6; sub_40B060((int *)v121 + 18, v122); LOBYTE(v123) = 2; sub_636A10(v122); v60 = v121; v121[1] = (volatile LONG *)v120; *((_BYTE *)v60 + 88) = 1; v61 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 2); v121 = v61; *v61 = (volatile LONG *)2; sub_4019E0(v122, "Column02"); LOBYTE(v123) = 7; sub_40B060((int *)v121 + 18, v122); LOBYTE(v123) = 2; sub_636A10(v122); v121[1] = (volatile LONG *)v120; v62 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 2); v121 = v62; *v62 = (volatile LONG *)2; sub_4019E0(v122, "Column03"); LOBYTE(v123) = 8; sub_40B060((int *)v121 + 18, v122); LOBYTE(v123) = 2; sub_636A10(v122); v121[1] = (volatile LONG *)v120; v63 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 2); v121 = v63; *v63 = (volatile LONG *)2; sub_4019E0(v122, "Column04"); LOBYTE(v123) = 9; sub_40B060((int *)v121 + 18, v122); LOBYTE(v123) = 2; sub_636A10(v122); v121[1] = (volatile LONG *)v120; v64 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v105, 2); v121 = v64; *v64 = (volatile LONG *)2; sub_4019E0(v122, "Column05"); LOBYTE(v123) = 10; sub_40B060((int *)v121 + 18, v122); LOBYTE(v123) = 2; sub_636A10(v122); v121[1] = (volatile LONG *)v120; sub_466680(&v105, 0); v65 = sub_8FB140(v120, (int)"Panel02", (int)&v118, (int)&v119, v116); v66 = sub_466330(v118 - v14, v119 - v15, (int)v65, *(float *)&v2, (int **)&v105, 0, 0); v2[89] = v66; *((_DWORD *)v66 + 88) = 19; sub_465130(v2[89]); v67 = sub_8FB140(v120, (int)"SlideBar_SlideBtnMiddle", (int)&v118, (int)&v119, v116); v68 = sub_464310(v120, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v67, 0, v2); v2[90] = (volatile LONG *)v68; *(_DWORD *)(v68 + 312) = 13; *((_DWORD *)v2[90] + 76) = 1; sub_4638F0(v2[90], *((_DWORD *)v2[89] + 84)); v121 = sub_8FB140(v120, (int)"Title01Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Title01Click"); sub_8FB650(v121, v120, (int)"Title01Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 14, 0, 0); v69 = *v121[9]; v70 = *(volatile LONG ***)(v69 + 20); v117 = *(volatile LONG **)(v69 + 24); v121 = v70; v71 = sub_421050(7); v72 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v71, (int)v2, 0, 0); v73 = *v72; v121 = (volatile LONG **)v72; (*(void (__thiscall **)(volatile LONG *, signed int))(v73 + 488))(v72, 5); v117 = *v121; v74 = sub_40C190(1319409301); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v74); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title02Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Title02Click"); sub_8FB650(v121, v120, (int)"Title02Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 15, 0, 0); v75 = v121[9]; v76 = *(volatile LONG ***)(*v75 + 20); v117 = *(volatile LONG **)(*v75 + 24); v121 = v76; v77 = sub_421050(7); v78 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v77, (int)v2, 0, 0); v79 = *v78; v121 = (volatile LONG **)v78; (*(void (__thiscall **)(volatile LONG *, signed int))(v79 + 488))(v78, 5); v117 = *v121; v80 = sub_40C190(1247775651); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v80); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title03Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Title03Click"); sub_8FB650(v121, v120, (int)"Title03Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 16, 0, 0); v81 = v121[9]; v82 = *(volatile LONG ***)(*v81 + 20); v117 = *(volatile LONG **)(*v81 + 24); v121 = v82; v83 = sub_421050(7); v84 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v83, (int)v2, 0, 0); v85 = *v84; v121 = (volatile LONG **)v84; (*(void (__thiscall **)(volatile LONG *, signed int))(v85 + 488))(v84, 5); v117 = *v121; v86 = sub_40C190(1077814143); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v86); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title04Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Title04Click"); sub_8FB650(v121, v120, (int)"Title04Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 17, 0, 0); v87 = v121[9]; v88 = *(volatile LONG ***)(*v87 + 20); v117 = *(volatile LONG **)(*v87 + 24); v121 = v88; v89 = sub_421050(7); v90 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v89, (int)v2, 0, 0); v91 = *v90; v121 = (volatile LONG **)v90; (*(void (__thiscall **)(volatile LONG *, signed int))(v91 + 488))(v90, 5); v117 = *v121; v92 = sub_40C190(608536990); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v92); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Title05Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Title05Click"); sub_8FB650(v121, v120, (int)"Title05Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 18, 0, 0); v93 = v121[9]; v94 = *(volatile LONG ***)(*v93 + 20); v117 = *(volatile LONG **)(*v93 + 24); v121 = v94; v95 = sub_421050(7); v96 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v121, (int)v117, v95, (int)v2, 0, 0); v97 = *v96; v121 = (volatile LONG **)v96; (*(void (__thiscall **)(volatile LONG *, signed int))(v97 + 488))(v96, 5); v117 = *v121; v98 = sub_40C190(-958416453); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v117 + 118))(v121, v98); (*((void (__stdcall **)(_DWORD))*v121 + 60))(0); v121 = sub_8FB140(v120, (int)"Btn01Nor", (int)&v118, (int)&v119, v116); sub_8FB650(v121, v120, (int)"Btn01Click"); sub_8FB650(v121, v120, (int)"Btn01Over"); sub_8FE0F0(v118 - v14, v119 - v15, (int)v121, (int)v2, 20, 0, 0); v99 = v121[9]; v100 = *(volatile LONG **)(*v99 + 20); v117 = *(volatile LONG **)(*v99 + 24); v116 = v100; v101 = sub_421050(7); v102 = sub_8F4A20(v118 - v14, v119 - v15 + 1, (int)v116, (int)v117, v101, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v102 + 488))(v102, 5); v103 = *v102; v104 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v103 + 472))(v102, v104); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v102 + 240))(v102, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v123) = 1; sub_40AE10((void **)&v105); LOBYTE(v123) = 0; sub_410C00(&v115); v123 = -1; sub_410C00(&v120); result = 1; } else { LOBYTE(v123) = 0; sub_410C00(&v115); v123 = -1; sub_410C00(&v120); result = 0; } } else { LOBYTE(v123) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v120; v123 = -1; if ( !v120 || InterlockedDecrement((volatile LONG *)(v120 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00700DE0) -------------------------------------------------------- void *__thiscall sub_700DE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyHallOfFameWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyHallOfFameWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FE2E8: using guessed type void *GuildAcademyHallOfFameWin::`vftable'; // 9FE304: using guessed type void *GuildAcademyHallOfFameWin::`vftable'; //----- (00700EC0) -------------------------------------------------------- char __thiscall sub_700EC0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (00700F00) -------------------------------------------------------- int __thiscall sub_700F00(void *this) { int v1; // esi int result; // eax int *v3; // edi int v4; // eax v1 = (int)this; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 324))(0.0); result = sub_5D5470((_DWORD *)v1); if ( result && !*(_BYTE *)(v1 + 452) ) { v3 = *(int **)(v1 + 272); if ( v3 ) { v4 = sub_5D5470((_DWORD *)v1); sub_547C20(v3, v4); result = sub_8F2F90(v1); } } return result; } //----- (00700F50) -------------------------------------------------------- void __thiscall sub_700F50(_DWORD *this, int a2) { sub_5D5500(this, a2); } //----- (00700F70) -------------------------------------------------------- char __stdcall sub_700F70(int a1, _DWORD *a2, int a3) { char result; // al if ( a1 == 27 ) { result = (char)a2; if ( a2 ) { if ( !*a2 ) result = sub_6F36A0(&off_AB7F2C, 38, 69, 0, 0); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00700FA0) -------------------------------------------------------- char __thiscall sub_700FA0(_BYTE **this) { _BYTE **v1; // esi signed int v2; // edi char result; // al v1 = this + 165; v2 = 51; do { sub_5D5B70(*(v1 - 51), 0, 1); (*(void (__stdcall **)(void *))(*(_DWORD *)*v1 + 460))(&unk_9FE553); result = sub_459960(*v1, 0); ++v1; --v2; } while ( v2 ); return result; } //----- (00700FF0) -------------------------------------------------------- char __thiscall sub_700FF0(_WORD **this, int a2) { _WORD **v2; // esi v2 = this; sub_5D5B70(this[a2 + 114], 0, 1); (*(void (__stdcall **)(void *))(*(_DWORD *)v2[a2 + 165] + 460))(&unk_9FE571); return sub_459960(v2[a2 + 165], 0); } //----- (00701040) -------------------------------------------------------- char sub_701040() { char v1; // [esp+1h] [ebp-1h] v1 = 2; return sub_6F3D10(&off_AB7F2C, 38, 111, &v1, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00701060) -------------------------------------------------------- char sub_701060() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildAcademyItemGift"); return (char)v0; } //----- (00701090) -------------------------------------------------------- _DWORD *__thiscall sub_701090(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax signed int v4; // edx v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildAcademyItemRewardWin::`vftable'; v1[58] = &GuildAcademyItemRewardWin::`vftable'; v2 = (int)(v1 + 90); v1[86] = &PgWinDrop::`vftable'; v1[88] = 0; *(_WORD *)(v2 + 60) = -1; *(_DWORD *)v2 = &DropContents::`vftable'; *(_DWORD *)(v2 + 64) = 0; v1[87] = v1 + 90; v3 = v1 + 165; v4 = 51; do { *(v3 - 51) = 0; *v3 = 0; ++v3; --v4; } while ( v4 ); v1[113] = 0; v1[112] = 0; v1[111] = 0; v1[110] = 0; v1[108] = 0; v1[109] = 0; *((_BYTE *)v1 + 868) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9FE9DC: using guessed type void *GuildAcademyItemRewardWin::`vftable'; // 9FE9FC: using guessed type void *GuildAcademyItemRewardWin::`vftable'; //----- (00701150) -------------------------------------------------------- char __thiscall sub_701150(char *this, int a2) { char *v2; // ebx _BYTE *v3; // edi int v4; // esi _DWORD *v5; // eax _DWORD *v6; // edi _DWORD *v7; // eax int v8; // esi char result; // al _DWORD *v10; // [esp+8h] [ebp-3Ch] signed int v11; // [esp+10h] [ebp-34h] unsigned __int8 *v12; // [esp+14h] [ebp-30h] signed int v13; // [esp+18h] [ebp-2Ch] signed int v14; // [esp+18h] [ebp-2Ch] char v15; // [esp+1Fh] [ebp-25h] char v16; // [esp+20h] [ebp-24h] v2 = this; v11 = 0; if ( *(_BYTE *)(a2 + 2) ) { v3 = (_BYTE *)(a2 + 6); v12 = (unsigned __int8 *)(a2 + 6); do { v4 = (unsigned __int8)*(v3 - 3); v5 = sub_6899D0(*((_WORD *)v3 - 1)); v10 = v5; if ( v5 ) { sub_5D5B70(*(_WORD **)&v2[4 * v4 + 416], (int)v5, 1); sub_5D5420(*(_DWORD **)&v2[4 * v4 + 416], 0); v13 = 0; if ( *v3 ) { v6 = v3 + 5; do { switch ( *(v6 - 1) ) { case 2: (*(void (__stdcall **)(const char *))(**(_DWORD **)&v2[4 * v4 + 620] + 460))("1"); break; case 3: sprintf(&v16, "%I64d", *v6, v6[1]); (*(void (__stdcall **)(char *))(**(_DWORD **)&v2[4 * v4 + 620] + 460))(&v16); v7 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v7) ) sub_459960(*(_BYTE **)&v2[4 * v4 + 620], 1); break; case 4: (*(void (__stdcall **)(const char *))(**(_DWORD **)&v2[4 * v4 + 620] + 460))("1"); *((_BYTE *)v10 + 10) = *(_BYTE *)v6; break; } v6 += 3; ++v13; } while ( v13 < *v12 ); v3 = v12; } v8 = (int)(v2 + 660); v14 = 51; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v8 + 488))(1); v8 += 4; --v14; } while ( v14 ); } v3 += 16; ++v11; v12 = v3; } while ( v11 < *(unsigned __int8 *)(a2 + 2) ); } v15 = 2; result = sub_6F3D10(&off_AB7F2C, 38, 109, &v15, 1u); v2[868] = 1; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00701300) -------------------------------------------------------- char __thiscall sub_701300(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (00701330) -------------------------------------------------------- _DWORD *__thiscall sub_701330(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *result; // eax unsigned __int16 *v5; // edi v2 = this; v3 = (_DWORD *)sub_715490(); result = (_DWORD *)sub_715330(v3); if ( (_BYTE)result ) { v5 = (unsigned __int16 *)sub_5D5470((_DWORD *)v2[a2 + 114]); result = 0; if ( v5 ) { v2[92] = 20; v2[94] = 0; v2[95] = v5; v2[96] = 0; v2[93] = a2; v2[106] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v5 + 12))(v5); v2[88] = v2; dword_BA6BCC = (int)(v2 + 86); result = sub_6BA9B0(v5[4]); } } return result; } // BA6BCC: using guessed type int dword_BA6BCC; //----- (007013C0) -------------------------------------------------------- char __stdcall sub_7013C0(_WORD *a1) { unsigned int v1; // esi _WORD *v2; // eax int v3; // ebx v1 = 0; while ( 1 ) { v2 = (_WORD *)sub_718760(v1); if ( v2 ) { if ( a1[4] == v2[4] ) { v3 = (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 36))(v2); if ( (*(int (__thiscall **)(_WORD *))(*(_DWORD *)a1 + 36))(a1) == v3 ) break; } } if ( (signed int)++v1 >= 72 ) return 0; } return 1; } //----- (00701420) -------------------------------------------------------- void __thiscall sub_701420(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 452) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 296), *(_DWORD *)(v1 + 448)); } } //----- (00701450) -------------------------------------------------------- void __thiscall sub_701450(int this) { int v1; // esi volatile LONG *v2; // eax v1 = this; if ( !*(_BYTE *)(this + 452) ) { v2 = (volatile LONG *)sub_402BF0((_DWORD *)this); if ( v2 ) sub_8F2C80(v2, *(_DWORD *)(v1 + 324), *(_DWORD *)(v1 + 448)); } } //----- (00701480) -------------------------------------------------------- int __thiscall sub_701480(_DWORD **this) { _DWORD **v1; // esi int v2; // edi unsigned __int16 *v3; // ebx int v4; // ST24_4 int v5; // ST14_4 int v6; // ST10_4 int v7; // ST0C_4 int v8; // ST08_4 char *v9; // eax char *v10; // eax __int64 v11; // rax signed __int64 v12; // rax __int64 v13; // rax signed __int64 v14; // rax __int64 v15; // rax signed __int64 v16; // rax __int64 v17; // rax signed __int64 v18; // rax char v20; // [esp+10h] [ebp-84h] v1 = this; sub_6D3800(); v2 = sub_715490(); v3 = (unsigned __int16 *)sub_713B50(); (*(void (__stdcall **)(signed int))(*v1[108] + 256))(1); v4 = *v1[108]; v5 = *(_DWORD *)(v2 + 1176); v6 = *(_DWORD *)(v2 + 1180); v7 = v3[2]; v8 = sub_713AF0(v3); v9 = (char *)sub_40C190(-816764622); v10 = sub_7549E0(v9, v8, v7, v6, v5); (*(void (__thiscall **)(_DWORD *, char *))(v4 + 472))(v1[108], v10); (*(void (__stdcall **)(signed int))(*v1[109] + 256))(1); v11 = sub_7186B0(); v12 = sub_680E90(v11); sprintf(&v20, "%I64d", v12); (*(void (__stdcall **)(char *))(*v1[110] + 472))(&v20); v13 = sub_7186B0(); v14 = sub_680EB0(v13); sprintf(&v20, "%I64d", v14); (*(void (__stdcall **)(char *))(*v1[111] + 472))(&v20); v15 = sub_7186B0(); v16 = sub_680F00(v15); sprintf(&v20, "%I64d", v16); (*(void (__stdcall **)(char *))(*v1[112] + 472))(&v20); v17 = sub_7186B0(); v18 = sub_680F60(v17); sprintf(&v20, "%I64d", v18); return (*(int (__stdcall **)(char *))(*v1[113] + 472))(&v20); } //----- (00701620) -------------------------------------------------------- void __thiscall sub_701620(char *this) { char *v1; // ebx int v2; // esi signed int v3; // edi _DWORD *v4; // eax int v5; // eax size_t v6; // eax void *v7; // eax int *v8; // edi char *v9; // eax volatile LONG *v10; // eax int v11; // [esp+Ch] [ebp-10h] const CHAR *v12; // [esp+10h] [ebp-Ch] const CHAR *v13; // [esp+14h] [ebp-8h] const CHAR *v14; // [esp+18h] [ebp-4h] v1 = this; v2 = (int)(this + 660); v3 = 51; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 488))(1); v2 += 4; --v3; } while ( v3 ); v4 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v4) ) { v9 = (char *)sub_40C190(-1869310780); v10 = sub_462C30(2, v9); *((_DWORD *)v1 + 216) = v10; (**((void (__stdcall ***)(int))v10 + 58))((int)(v1 + 232)); } else { v12 = &byte_9A8050; v13 = &byte_9A8050; v14 = &byte_9A8050; v11 = -982641618; v5 = *(_DWORD *)(dword_AC9C90 + 56); if ( v5 ) v6 = *(_DWORD *)(v5 + 40); else v6 = 0; v7 = bsearch(&v11, dword_ACB3A0, v6, 0x10u, sub_4508B0); v8 = (int *)v7; if ( v7 ) { if ( strcmp(*((const char **)v7 + 2), "None") ) sub_6BA890(&dword_AB6520, v8[2]); if ( strcmp((const char *)v8[3], "None") ) sub_6BA680(&dword_AB6520, v8[3]); sub_492060(*((_DWORD **)v1 + 74), v8[1]); } else { sub_492060(*((_DWORD **)v1 + 74), (int)&byte_9A8050); } } } // AC9C90: using guessed type int dword_AC9C90; //----- (00701790) -------------------------------------------------------- void __thiscall sub_701790(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *v3; // eax const CHAR *v4; // eax char v5; // [esp+7h] [ebp-1h] v1 = this; v2 = sub_7154F0(); if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2) ) { v3 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v3) ) { v5 = 0; sub_6F3D10(&off_AB7F2C, 38, 109, &v5, 1u); } else { v4 = sub_40C190(1922102688); sub_492060(v1[74], (int)v4); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00701800) -------------------------------------------------------- char __thiscall sub_701800(int this, char a2) { int v2; // ebx char result; // al int v4; // edi _DWORD *v5; // eax int v6; // esi int v7; // esi float *v8; // eax float *v9; // eax double v10; // st7 float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 v2 = this; result = a2; if ( *(_BYTE *)(this + 452) != a2 ) { v4 = sub_85C050((_DWORD *)this, 9); if ( !v4 ) { v5 = operator new(0x28u); v6 = (int)v5; if ( v5 ) { sub_85B2B0(v5); *(_DWORD *)v6 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v6 + 28) = 0; *(_DWORD *)(v6 + 32) = 0; *(_DWORD *)(v6 + 36) = 1; } else { v6 = 0; } v4 = v6; sub_403700((_DWORD *)v2, v6); } v7 = sub_85C050((_DWORD *)v2, 3); if ( !v7 ) { v8 = (float *)operator new(0x60u); if ( v8 ) v9 = sub_85EBC0(v8); else v9 = 0; v7 = (int)v9; sub_403700((_DWORD *)v2, (int)v9); } *(_BYTE *)(v2 + 452) = a2; *(_DWORD *)(v4 + 32) = 0; *(_DWORD *)(v4 + 36) = 0; ++*(_DWORD *)(v7 + 88); if ( a2 ) v10 = 0.40000001; else v10 = 1.0; v11 = v10; v12 = v10; *(float *)(v7 + 68) = v11; v13 = v10; *(float *)(v7 + 72) = v12; *(float *)(v7 + 76) = v13; result = sub_85C4D0((_DWORD *)v2); } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00701930) -------------------------------------------------------- int __thiscall sub_701930(_DWORD **this, int a2) { return sub_701480(this); } //----- (00701940) -------------------------------------------------------- char __userpurge sub_701940@(int a1@, int a2@, int a3, int a4) { int v4; // edi _DWORD *v5; // eax const CHAR *v6; // eax char result; // al int v8; // eax const CHAR *v9; // eax unsigned __int16 *v10; // esi int v11; // eax const CHAR *v12; // eax int v13; // ebx const CHAR *v14; // eax _BYTE *v15; // ebx int v16; // esi char *v17; // eax char *v18; // eax int v19; // [esp-8h] [ebp-Ch] signed int v20; // [esp+Ch] [ebp+8h] void (__thiscall **v21)(_DWORD, char *); // [esp+10h] [ebp+Ch] int v22; // [esp+10h] [ebp+Ch] void (__thiscall **v23)(_DWORD, char *); // [esp+10h] [ebp+Ch] v4 = a1; v5 = (_DWORD *)sub_715490(); if ( !(unsigned __int8)sub_715330(v5) ) { v6 = sub_40C190(409888371); sub_492060(*(_DWORD **)(v4 + 296), (int)v6); return 0; } v8 = *(_DWORD *)(a3 + 8); if ( v8 != 19 && v8 != 20 ) { v9 = sub_40C190(493639808); sub_492060(*(_DWORD **)(v4 + 296), (int)v9); return 0; } v10 = *(unsigned __int16 **)(a3 + 20); if ( !v10 ) return 0; v11 = *((_DWORD *)v10 + 28); if ( !v11 ) return 0; if ( *(_DWORD *)(v11 + 118) == 4 && (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 44))(*(_DWORD *)(a3 + 20)) && !(*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v10 + 44))(v10) ) { v12 = sub_40C190(1620139252); sub_492060(*(_DWORD **)(v4 + 296), (int)v12); return 0; } v19 = a2; if ( (*(unsigned __int8 (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v10 + 4))(v10) != 24 || (v13 = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v10 + 16))(v10), (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v10 + 12))(v10) == v13) ) { v15 = sub_6899D0(v10[4]); if ( (*(int (__thiscall **)(_BYTE *, int))(*(_DWORD *)v15 + 12))(v15, v19) ) (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v15 + 8))(v15, 0); v15[10] = (*(int (__thiscall **)(unsigned __int16 *))(*(_DWORD *)v10 + 36))(v10); (*(void (__thiscall **)(_BYTE *))(*(_DWORD *)v15 + 36))(v15); if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v15 + 4))(v15) && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v15 + 4))(v15) != 1 && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v15 + 4))(v15) != 2 && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v15 + 4))(v15) != 14 ) { v16 = a4; sub_459960(*(_BYTE **)(v4 + 4 * a4 + 660), 0); v21 = (void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v4 + 4 * a4 + 660) + 460); v17 = sub_7549E0("%d", 1); (*v21)(*(_DWORD *)(v4 + 4 * v16 + 660), v17); v22 = v4 + 660; v20 = 51; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 488))(1); v22 += 4; --v20; } while ( v20 ); } else { v16 = a4; sub_459960(*(_BYTE **)(v4 + 4 * a4 + 660), 1); (*(void (**)(void))(**(_DWORD **)(v4 + 4 * a4 + 660) + 480))(); v23 = (void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v4 + 4 * a4 + 660) + 460); v18 = sub_7549E0("%d", 1); (*v23)(*(_DWORD *)(v4 + 4 * v16 + 660), v18); } sub_5D5B70(*(_WORD **)(v4 + 4 * v16 + 456), (int)v15, 1); sub_5D5420(*(_DWORD **)(v4 + 4 * v16 + 456), 0); sub_701800(*(_DWORD *)(v4 + 4 * v16 + 456), 0); result = 1; } else { v14 = sub_40C190(1620139252); sub_492060(*(_DWORD **)(v4 + 296), (int)v14); result = 0; } return result; } // 701940: could not find valid save-restore pair for ebx //----- (00701BB0) -------------------------------------------------------- char __thiscall sub_701BB0(char *this) { int v1; // esi signed int v2; // edi _WORD *v3; // eax char v4; // al int v5; // ecx v1 = (int)(this + 456); v2 = 51; do { v3 = (_WORD *)sub_5D5470(*(_DWORD **)v1); if ( v3 ) { v4 = sub_7013C0(v3); v5 = *(_DWORD *)v1; if ( v4 ) { LOBYTE(v3) = sub_701800(v5, 0); } else { sub_701800(v5, 1); LOBYTE(v3) = sub_459960(*(_BYTE **)(v1 + 204), 0); } } v1 += 4; --v2; } while ( v2 ); return (char)v3; } //----- (00701C00) -------------------------------------------------------- char __userpurge sub_701C00@(_DWORD *a1@, int a2@, int a3, int a4, int a5) { _DWORD *v5; // edi int v7; // esi int v8; // eax v5 = a1; if ( !*(_DWORD *)a3 ) return 0; v7 = *(_DWORD *)(*(_DWORD *)a3 + 4); if ( !v7 ) return 0; v8 = sub_402BF0(a1); return sub_701940(v8, a2, v7, v5[112]); } //----- (00701C40) -------------------------------------------------------- int __cdecl sub_701C40(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1C8u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_5D6D00((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = &GuildAcademyItemRewardInvWin::`vftable'; *(_DWORD *)(v5 + 232) = &GuildAcademyItemRewardInvWin::`vftable'; *(_DWORD *)(v5 + 448) = -1; sub_5D5B70((_WORD *)v5, 0, 1); *(_BYTE *)(v5 + 452) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // 9FE750: using guessed type void *GuildAcademyItemRewardInvWin::`vftable'; // 9FE76C: using guessed type void *GuildAcademyItemRewardInvWin::`vftable'; //----- (00701DB0) -------------------------------------------------------- volatile LONG *__cdecl sub_701DB0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x368u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_701090(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00701EE0) -------------------------------------------------------- char __thiscall sub_701EE0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax void (__thiscall **v21)(volatile LONG *, const CHAR *); // STC4_4 const CHAR *v22; // eax volatile LONG **v23; // eax volatile LONG **v24; // eax int v25; // eax volatile LONG *v26; // eax int v27; // eax volatile LONG *v28; // eax const CHAR *v29; // eax volatile LONG **v30; // eax int v31; // ST9C_4 int v32; // ST98_4 int v33; // eax volatile LONG *v34; // STA8_4 int v35; // edx volatile LONG **v36; // eax int v37; // ST9C_4 int v38; // ST98_4 int v39; // eax volatile LONG *v40; // STA8_4 int v41; // edx volatile LONG **v42; // eax int v43; // ST9C_4 int v44; // ST98_4 int v45; // eax volatile LONG *v46; // STA8_4 int v47; // edx volatile LONG **v48; // eax int v49; // ST9C_4 int v50; // ST98_4 int v51; // eax char *v52; // STBC_4 int v53; // eax int v54; // STC0_4 int v55; // eax int v56; // eax int v57; // STBC_4 char *v58; // eax volatile LONG **v59; // eax volatile LONG *v60; // eax int v61; // eax int v62; // STBC_4 int v63; // eax void (__thiscall **v64)(volatile LONG *, const CHAR *); // STBC_4 const CHAR *v65; // eax int v66; // eax int v67; // STBC_4 int v68; // eax int v69; // eax int v70; // STBC_4 int v71; // eax void (__thiscall **v72)(volatile LONG *, const CHAR *); // STBC_4 const CHAR *v73; // eax int v74; // eax int v75; // STBC_4 int v76; // eax void (__thiscall **v77)(volatile LONG *, const CHAR *); // STBC_4 const CHAR *v78; // eax int v79; // eax int v80; // STBC_4 int v81; // eax void (__thiscall **v82)(volatile LONG *, const CHAR *); // STBC_4 const CHAR *v83; // eax int v84; // STBC_4 char *v85; // eax volatile LONG **v86; // eax _WORD *v87; // eax void (__thiscall ***v88)(_DWORD, signed int); // esi signed int v89; // [esp+C4h] [ebp-30h] int v90; // [esp+C8h] [ebp-2Ch] char v91[4]; // [esp+CCh] [ebp-28h] int v92; // [esp+D0h] [ebp-24h] int v93; // [esp+D4h] [ebp-20h] volatile LONG *v94; // [esp+D8h] [ebp-1Ch] int v95; // [esp+DCh] [ebp-18h] int v96; // [esp+E0h] [ebp-14h] int v97; // [esp+E4h] [ebp-10h] int v98; // [esp+F0h] [ebp-4h] volatile LONG *v99; // [esp+FCh] [ebp+8h] volatile LONG **v100; // [esp+FCh] [ebp+8h] volatile LONG *v101; // [esp+FCh] [ebp+8h] volatile LONG **v102; // [esp+FCh] [ebp+8h] void (__thiscall **v103)(volatile LONG *, const CHAR *); // [esp+FCh] [ebp+8h] volatile LONG *v104; // [esp+FCh] [ebp+8h] volatile LONG *v105; // [esp+FCh] [ebp+8h] volatile LONG *v106; // [esp+FCh] [ebp+8h] volatile LONG *v107; // [esp+FCh] [ebp+8h] volatile LONG *v108; // [esp+FCh] [ebp+8h] volatile LONG *v109; // [esp+FCh] [ebp+8h] volatile LONG *v110; // [esp+FCh] [ebp+8h] volatile LONG *v111; // [esp+FCh] [ebp+8h] char *v112; // [esp+FCh] [ebp+8h] volatile LONG **v113; // [esp+FCh] [ebp+8h] int v114; // [esp+FCh] [ebp+8h] volatile LONG *v115; // [esp+FCh] [ebp+8h] volatile LONG **v116; // [esp+FCh] [ebp+8h] int v117; // [esp+FCh] [ebp+8h] volatile LONG *v118; // [esp+FCh] [ebp+8h] int v119; // [esp+FCh] [ebp+8h] volatile LONG *v120; // [esp+FCh] [ebp+8h] volatile LONG **v121; // [esp+FCh] [ebp+8h] int v122; // [esp+FCh] [ebp+8h] volatile LONG *v123; // [esp+FCh] [ebp+8h] volatile LONG **v124; // [esp+FCh] [ebp+8h] int v125; // [esp+FCh] [ebp+8h] volatile LONG *v126; // [esp+FCh] [ebp+8h] volatile LONG **v127; // [esp+FCh] [ebp+8h] int v128; // [esp+FCh] [ebp+8h] volatile LONG *v129; // [esp+FCh] [ebp+8h] int *v130; // [esp+FCh] [ebp+8h] v2 = this; v95 = 0; v3 = dword_BA6BA0; v98 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademyItemGift.nif"); sub_8F66B0(v4, (int)&v95, v3); if ( !v95 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v95 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v90 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v98) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v94 = v9) == 0) ) { LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v95; v98 = -1; if ( v95 && !InterlockedDecrement((volatile LONG *)(v95 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v95, (int)"Frame", (int)&v96, (int)&v97, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, a2, (int)"GuildAcademyItemCompensation", 0) ) { v14 = v96; v15 = v97; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v95, (int)"Theme", (int)&v96, (int)&v97, v16); else v17 = sub_8FB140(v95, (int)"Theme", (int)&v96, (int)&v97, 0); sub_8F3EB0(v96 - v14, v97 - v15, (int)v17, (int)v2, 0, 0); v18 = (volatile LONG *)sub_43D0D0(0x12u); v19 = sub_8FB140(v95, (int)"IconSlot", (int)&v96, (int)&v97, v18); sub_8F3EB0(v96 - v14, v97 - v15, (int)v19, (int)v2, 0, 0); if ( !sub_8F71E0(v95, (int)"WinTitle", &v96, &v97, &v92, &v93) ) goto LABEL_45; v20 = sub_421050(7); v99 = sub_8F4A20(v96 - v14, v97 - v15, v92, v93, v20, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v99 + 488))(v99, 1); (*(void (__stdcall **)(int *))(*v99 + 468))(&dword_AA8D98); v21 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v99 + 472); v22 = sub_40C190(-972685531); (*v21)(v99, v22); (*(void (__stdcall **)(_DWORD))(*v99 + 240))(0); v100 = sub_8FB140(v95, (int)"ClsNor", (int)&v96, (int)&v97, v94); sub_8FB650(v100, v95, (int)"ClsClick"); sub_8FB650(v100, v95, (int)"ClsOver"); sub_8FE0F0(v96 - v14, v97 - v15, (int)v100, (int)v2, 11, 0, 0); v101 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v95 + 72))("HelpLinkNor") ) { v102 = sub_8FB140(v95, (int)"HelpLinkNor", (int)&v96, (int)&v97, v101); sub_8FB650(v102, v95, (int)"HelpLinkClick"); sub_8FB650(v102, v95, (int)"HelpLinkOver"); sub_8FE0F0(v96 - v14, v97 - v15, (int)v102, (int)v2, 17, 0, 0); } v23 = sub_8FB140(v95, (int)"Panel01", (int)&v96, (int)&v97, v94); sub_8F3EB0(v96 - v14, v97 - v15, (int)v23, (int)v2, 0, 0); v24 = sub_8FB140(v95, (int)"Panel02", (int)&v96, (int)&v97, v94); sub_8F3EB0(v96 - v14, v97 - v15, (int)v24, (int)v2, 0, 0); if ( sub_8F71E0(v95, (int)"GuildInfoText", &v96, &v97, &v92, &v93) ) { v25 = sub_421050(7); v26 = sub_8F4A20(v96 - v14, v97 - v15 - 5, v92, v93, v25, (int)v2, 0, 0); v2[108] = v26; (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 4); (*(void (__stdcall **)(void *))(*v2[108] + 472))(&unk_9FE542); (*(void (__stdcall **)(_DWORD))(*v2[108] + 240))(0); v27 = sub_421050(7); v28 = sub_8F4A20(v96 - v14, v97 - v15 + 30, v92, v93 - 30, v27, (int)v2, 0, 0); v2[109] = v28; (*(void (__thiscall **)(volatile LONG *, signed int))(*v28 + 488))(v28, 4); v103 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v2[109] + 472); v29 = sub_40C190(-179932511); (*v103)(v2[109], v29); (*(void (__stdcall **)(_DWORD))(*v2[109] + 240))(0); v30 = sub_8FB140(v95, (int)"GemInput01", (int)&v96, (int)&v97, v94); v104 = sub_8F3EB0(v96 - v14, v97 - v15, (int)v30, (int)v2, 0, 0); v31 = sub_421050(0); v32 = (*(int (**)(void))(*v104 + 148))(); v33 = (*(int (**)(void))(*v104 + 144))(); v105 = sub_8F4A20(0, 1, v33, v32, v31, (int)v104, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v105 + 488))(v105, 6); (*(void (__stdcall **)(void *))(*v105 + 472))(&unk_9FE543); (*(void (__stdcall **)(_DWORD))(*v105 + 240))(0); v34 = v94; v35 = v95; v2[110] = v105; v36 = sub_8FB140(v35, (int)"GoldInput01", (int)&v96, (int)&v97, v34); v106 = sub_8F3EB0(v96 - v14, v97 - v15, (int)v36, (int)v2, 0, 0); v37 = sub_421050(0); v38 = (*(int (**)(void))(*v106 + 148))(); v39 = (*(int (**)(void))(*v106 + 144))(); v107 = sub_8F4A20(0, 1, v39, v38, v37, (int)v106, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v107 + 488))(v107, 6); (*(void (__stdcall **)(void *))(*v107 + 472))(&unk_9FE54A); (*(void (__stdcall **)(_DWORD))(*v107 + 240))(0); v40 = v94; v41 = v95; v2[111] = v107; v42 = sub_8FB140(v41, (int)"SilverInput01", (int)&v96, (int)&v97, v40); v108 = sub_8F3EB0(v96 - v14, v97 - v15, (int)v42, (int)v2, 0, 0); v43 = sub_421050(0); v44 = (*(int (**)(void))(*v108 + 148))(); v45 = (*(int (**)(void))(*v108 + 144))(); v109 = sub_8F4A20(0, 1, v45, v44, v43, (int)v108, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v109 + 488))(v109, 6); (*(void (__stdcall **)(void *))(*v109 + 472))(&unk_9FE54B); (*(void (__stdcall **)(_DWORD))(*v109 + 240))(0); v46 = v94; v47 = v95; v2[112] = v109; v48 = sub_8FB140(v47, (int)"CopperInput01", (int)&v96, (int)&v97, v46); v110 = sub_8F3EB0(v96 - v14, v97 - v15, (int)v48, (int)v2, 0, 0); v49 = sub_421050(0); v50 = (*(int (**)(void))(*v110 + 148))(); v51 = (*(int (**)(void))(*v110 + 144))(); v111 = sub_8F4A20(0, 1, v51, v50, v49, (int)v110, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v111 + 488))(v111, 6); (*(void (__stdcall **)(void *))(*v111 + 472))(&unk_9FE552); (*(void (__stdcall **)(_DWORD))(*v111 + 240))(0); v2[113] = v111; *(_DWORD *)v91 = 10; v89 = 50; do { v112 = sub_7549E0("Level%02d", *(_DWORD *)v91 - 9); v52 = sub_7549E0("%02dLv", *(_DWORD *)v91); v113 = sub_8FB140(v95, (int)v112, (int)&v96, (int)&v97, v94); sub_8F3EB0(v96 - v14, v97 - v15, (int)v113, (int)v2, 0, 0); v53 = *v113[9]; v114 = *(_DWORD *)(v53 + 24); v54 = *(_DWORD *)(v53 + 20); v55 = sub_421050(0); v115 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v54, v114, v55, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v115 + 488))(v115, 5); (*(void (__stdcall **)(char *))(*v115 + 472))(v52); (*(void (__stdcall **)(_DWORD))(*v115 + 240))(0); ++*(_DWORD *)v91; --v89; } while ( v89 ); v56 = 0; v116 = v2 + 165; do { v57 = v56 + 1; v58 = sub_7549E0("Count%02d", v56 + 1); v59 = sub_8FB140(v95, (int)v58, (int)&v96, (int)&v97, v94); sub_8F3EB0(v96 - v14, v97 - v15, (int)v59, (int)v2, 0, 0); v60 = sub_45A900(v96 - v14 + 2, v97 - v15 + 4, v92, v93, (int)v2, 1342185472, 3, 3, 0, 0, 1); *v116 = v60; sub_459960(v60, 0); v56 = v57; ++v116; } while ( v57 < 51 ); v61 = *sub_8FB140(v95, (int)"Count52", (int)&v96, (int)&v97, v94)[9]; v117 = *(_DWORD *)(v61 + 24); v62 = *(_DWORD *)(v61 + 20); v63 = sub_421050(0); v118 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v62, v117, v63, (int)v2, 0, 0); v64 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v118 + 472); v65 = sub_40C190(-707673666); (*v64)(v118, v65); (*(void (__stdcall **)(_DWORD))(*v118 + 240))(0); v66 = *sub_8FB140(v95, (int)"Count53", (int)&v96, (int)&v97, v94)[9]; v119 = *(_DWORD *)(v66 + 24); v67 = *(_DWORD *)(v66 + 20); v68 = sub_421050(0); v120 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v67, v119, v68, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, const char *))(*v120 + 472))(v120, "60 Lv"); (*(void (__stdcall **)(_DWORD))(*v120 + 240))(0); v121 = sub_8FB140(v95, (int)"Btn01Nor", (int)&v96, (int)&v97, v94); sub_8FB650(v121, v95, (int)"Btn01Click"); sub_8FB650(v121, v95, (int)"Btn01Over"); sub_8FE0F0(v96 - v14, v97 - v15, (int)v121, (int)v2, 14, 0, 0); v69 = *v121[9]; v122 = *(_DWORD *)(v69 + 24); v70 = *(_DWORD *)(v69 + 20); v71 = sub_421050(7); v123 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v70, v122, v71, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v123 + 488))(v123, 5); v72 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v123 + 472); v73 = sub_40C190(-1678117642); (*v72)(v123, v73); (*(void (__stdcall **)(_DWORD))(*v123 + 240))(0); v124 = sub_8FB140(v95, (int)"Btn02Nor", (int)&v96, (int)&v97, v94); sub_8FB650(v124, v95, (int)"Btn02Click"); sub_8FB650(v124, v95, (int)"Btn02Over"); sub_8FE0F0(v96 - v14, v97 - v15, (int)v124, (int)v2, 15, 0, 0); v74 = *v124[9]; v125 = *(_DWORD *)(v74 + 24); v75 = *(_DWORD *)(v74 + 20); v76 = sub_421050(7); v126 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v75, v125, v76, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v126 + 488))(v126, 5); v77 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v126 + 472); v78 = sub_40C190(-1878659591); (*v77)(v126, v78); (*(void (__stdcall **)(_DWORD))(*v126 + 240))(0); v127 = sub_8FB140(v95, (int)"Btn03Nor", (int)&v96, (int)&v97, v94); sub_8FB650(v127, v95, (int)"Btn03Click"); sub_8FB650(v127, v95, (int)"Btn03Over"); sub_8FE0F0(v96 - v14, v97 - v15, (int)v127, (int)v2, 16, 0, 0); v79 = *v127[9]; v128 = *(_DWORD *)(v79 + 24); v80 = *(_DWORD *)(v79 + 20); v81 = sub_421050(7); v129 = sub_8F4A20(v96 - v14, v97 - v15 + 1, v80, v128, v81, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v129 + 488))(v129, 5); v82 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v129 + 472); v83 = sub_40C190(-1786080061); (*v82)(v129, v83); (*(void (__stdcall **)(_DWORD))(*v129 + 240))(0); *(_DWORD *)v91 = 0; v130 = (int *)(v2 + 114); do { v84 = *(_DWORD *)v91 + 1; v85 = sub_7549E0("IconSlot%02d", *(_DWORD *)v91 + 1); v86 = sub_8FB140(v95, (int)v85, (int)&v96, (int)&v97, v94); sub_8F3EB0(v96 - v14, v97 - v15, (int)v86, (int)v2, 0, 0); v87 = (_WORD *)sub_701C40(v96 - v14 + 1, v97 - v15 + 1, *(int *)v91, (int)v2); *v130 = (int)v87; sub_5D5B70(v87, 0, 1); (*(void (__stdcall **)(signed int))(*(_DWORD *)*v130 + 516))(12); *(_DWORD *)(*v130 + 272) = dword_ACEC34; sub_5D3170(*v130, 1); ++v130; *(_DWORD *)v91 = v84; } while ( v84 < 51 ); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.30000001, 0.5); LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v90 + 4)) ) (**(void (__thiscall ***)(int, signed int))v90)(v90, 1); v88 = (void (__thiscall ***)(_DWORD, signed int))v95; v98 = -1; if ( v95 && !InterlockedDecrement((volatile LONG *)(v95 + 4)) && v88 ) (**v88)(v88, 1); result = 1; } else { LABEL_45: LOBYTE(v98) = 0; sub_410C00(&v90); v98 = -1; sub_410C00(&v95); result = 0; } } else { LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v95; v98 = -1; if ( !v95 || InterlockedDecrement((volatile LONG *)(v95 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; //----- (00702D60) -------------------------------------------------------- void __thiscall sub_702D60(char *this) { char *v1; // ebx int v2; // esi signed int v3; // edi _DWORD *v4; // eax const CHAR *v5; // eax char *v6; // edi int *v7; // ebx int v8; // esi _DWORD *v9; // esi int v10; // edx unsigned __int8 (__thiscall *v11)(_DWORD *); // eax int (__thiscall *v12)(_DWORD *); // eax int v13; // esi __int64 v14; // kr00_8 int (*v15)(void); // eax const char *v16; // eax unsigned int v17; // ebx int v18; // esi unsigned int v19; // eax unsigned int v20; // eax unsigned int v21; // ecx char *v22; // ecx _DWORD *v23; // esi int v24; // eax unsigned int v25; // eax unsigned int v26; // eax unsigned int v27; // ecx char *v28; // ecx int v29; // edx int v30; // esi int v31; // edi int v32; // ebx void *v33; // edi int v34; // edi int v35; // ST08_4 char *v36; // eax char *v37; // eax char *v38; // [esp+10h] [ebp-40h] void *v39; // [esp+14h] [ebp-3Ch] char *v40; // [esp+18h] [ebp-38h] char *v41; // [esp+1Ch] [ebp-34h] int v42; // [esp+24h] [ebp-2Ch] char *v43; // [esp+28h] [ebp-28h] char v44; // [esp+2Fh] [ebp-21h] int v45; // [esp+30h] [ebp-20h] int v46; // [esp+34h] [ebp-1Ch] int v47; // [esp+38h] [ebp-18h] int v48; // [esp+3Ch] [ebp-14h] int v49; // [esp+4Ch] [ebp-4h] v1 = this; v2 = (int)(this + 660); v38 = this; v43 = this + 660; v3 = 51; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 488))(1); v2 += 4; --v3; } while ( v3 ); v4 = (_DWORD *)sub_715490(); if ( !(unsigned __int8)sub_715330(v4) ) { v5 = sub_40C190(409888371); sub_492060(*((_DWORD **)v1 + 74), (int)v5); return; } v6 = 0; v7 = 0; v39 = 0; v40 = 0; v41 = 0; v8 = (int)v43; v49 = 0; v42 = 0; while ( !sub_5D5470(*(_DWORD **)(v8 - 204)) ) { LABEL_48: v8 = (int)(v43 + 4); ++v42; v43 += 4; if ( v42 >= 51 ) { v30 = dword_AB7F4C; v31 = (v6 - (char *)v7) >> 4; v32 = v31; if ( dword_AB7F4C ) { LOWORD(v42) = -26563; sub_905F90(dword_AB7F4C, &v42, 2u); v44 = v31; sub_905F90(v30, &v44, 1u); v33 = v39; sub_906000(v30, v39, 16 * v32); } else { v33 = v39; } if ( v33 ) operator delete(v33); return; } } v9 = (_DWORD *)sub_5D5470(*(_DWORD **)(v8 - 204)); v10 = *v9; *(_WORD *)((char *)&v45 + 1) = *((_WORD *)v9 + 4); v11 = *(unsigned __int8 (__thiscall **)(_DWORD *))(v10 + 4); LOBYTE(v45) = v42 + 10; HIBYTE(v45) = 1; if ( v11(v9) && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 1 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 2 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 14 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 22 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 14 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 19 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 20 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 25 && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 4))(v9) != 12 ) { if ( *(_BYTE *)(v9[28] + 240) ) { v12 = *(int (__thiscall **)(_DWORD *))(*v9 + 36); v46 = 4; v14 = v12(v9); v48 = HIDWORD(v14); v13 = v14; } else { v13 = 0; v46 = 2; v48 = 0; } LABEL_22: v47 = v13; if ( &v45 >= (int *)v6 || v7 > &v45 ) { if ( v6 == v41 ) { v25 = (v6 - (char *)v7) >> 4; if ( v25 > 0xFFFFFFE ) LABEL_53: std::_Xlength_error("vector too long"); v26 = v25 + 1; v27 = (v41 - (char *)v7) >> 4; if ( v26 > v27 ) { if ( 0xFFFFFFF - (v27 >> 1) >= v27 ) v28 = (char *)((v27 >> 1) + v27); else v28 = 0; if ( (unsigned int)v28 < v26 ) v28 = (char *)v26; sub_5093E0(&v39, v28); v6 = v40; v7 = (int *)v39; } } if ( !v6 ) goto LABEL_47; v29 = v46; v24 = v48; *(_DWORD *)v6 = v45; *((_DWORD *)v6 + 1) = v29; *((_DWORD *)v6 + 2) = v13; } else { v18 = (char *)&v45 - (char *)v7; if ( v6 == v41 ) { v19 = (v6 - (char *)v7) >> 4; if ( v19 > 0xFFFFFFE ) goto LABEL_53; v20 = v19 + 1; v21 = (v41 - (char *)v7) >> 4; if ( v20 > v21 ) { if ( 0xFFFFFFF - (v21 >> 1) >= v21 ) v22 = (char *)((v21 >> 1) + v21); else v22 = 0; if ( (unsigned int)v22 < v20 ) v22 = (char *)v20; sub_5093E0(&v39, v22); v6 = v40; v7 = (int *)v39; } } v23 = (int *)((char *)v7 + (v18 & 0xFFFFFFF0)); if ( !v6 ) goto LABEL_47; *(_DWORD *)v6 = *v23; *((_DWORD *)v6 + 1) = v23[1]; *((_DWORD *)v6 + 2) = v23[2]; v24 = v23[3]; } *((_DWORD *)v6 + 3) = v24; LABEL_47: v6 += 16; v40 = v6; goto LABEL_48; } v15 = *(int (**)(void))(**(_DWORD **)v43 + 452); v46 = 3; v16 = (const char *)v15(); v17 = atoi(v16); if ( v17 <= (*(int (__thiscall **)(_DWORD *))(*v9 + 16))(v9) ) { v13 = v17; v7 = (int *)v39; v48 = 0; goto LABEL_22; } v34 = v9[28] + 34; v35 = (*(int (__thiscall **)(_DWORD *))(*v9 + 16))(v9); v36 = (char *)sub_40C190(-1176025044); v37 = sub_7549E0(v36, v34, v35); sub_492060(*((_DWORD **)v38 + 74), (int)v37); if ( v39 ) operator delete(v39); } // AB7F4C: using guessed type int dword_AB7F4C; //----- (00703100) -------------------------------------------------------- void __thiscall sub_703100(char *this, int a2, int a3) { switch ( a2 ) { case 11: sub_701300(this); break; case 12: sub_701330(this, a3); break; case 14: sub_702D60(this); break; case 15: sub_701620(this); break; case 16: sub_701790((_DWORD **)this); break; case 17: sub_701060(); break; default: return; } } //----- (00703170) -------------------------------------------------------- void *__thiscall sub_703170(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyItemRewardInvWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyItemRewardInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FE750: using guessed type void *GuildAcademyItemRewardInvWin::`vftable'; // 9FE76C: using guessed type void *GuildAcademyItemRewardInvWin::`vftable'; //----- (007031B0) -------------------------------------------------------- void *__stdcall sub_7031B0(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0xFFFFFFF || (result = operator new(16 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00703210) -------------------------------------------------------- void *__thiscall sub_703210(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyItemRewardWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyItemRewardWin::`vftable'; *((_DWORD *)this + 90) = &DropContents::`vftable'; *((_DWORD *)this + 86) = &PgWinDrop::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // 9FE9DC: using guessed type void *GuildAcademyItemRewardWin::`vftable'; // 9FE9FC: using guessed type void *GuildAcademyItemRewardWin::`vftable'; //----- (007032E0) -------------------------------------------------------- char sub_7032E0() { int v1; // [esp+0h] [ebp-4h] v1 = 0; return sub_6F36A0(&off_AB7F2C, 38, 77, &v1, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00703350) -------------------------------------------------------- char __thiscall sub_703350(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // esi char result; // al int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v1 = this; sub_8F86A0(&unk_BA6B10, this); (*(void (__thiscall **)(_DWORD *, int *, int *))(*v1 + 180))(v1, &v5, &v4); v2 = (_DWORD *)sub_6D3880(); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 172))(v2, v5); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 176))(v2, v4); result = (*(int (__thiscall **)(_DWORD *))(*v2 + 260))(v2); if ( !result ) result = sub_8F82A0(&unk_BA6B10, v2); return result; } //----- (007033C0) -------------------------------------------------------- char sub_7033C0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildMenu"); return (char)v0; } //----- (007033F0) -------------------------------------------------------- char __thiscall sub_7033F0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // ebx int v9; // edi volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // ebx volatile LONG *v15; // ebx volatile LONG **v16; // ebx void (__thiscall ***v17)(_DWORD, signed int); // esi int v18; // eax volatile LONG *v19; // ebx const CHAR *v20; // eax volatile LONG **v21; // ebx volatile LONG *v22; // edx int v23; // ebx int v24; // eax volatile LONG *v25; // ebx const CHAR *v26; // eax volatile LONG **v27; // ebx volatile LONG *v28; // edx int v29; // ebx int v30; // eax volatile LONG *v31; // ebx const CHAR *v32; // eax volatile LONG **v33; // ebx volatile LONG *v34; // edx int v35; // ebx int v36; // eax volatile LONG *v37; // ebx const CHAR *v38; // eax volatile LONG **v39; // ebx volatile LONG *v40; // edx int v41; // ebx int v42; // eax volatile LONG *v43; // ebx const CHAR *v44; // eax volatile LONG **v45; // ebx volatile LONG *v46; // edx int v47; // ebx int v48; // eax volatile LONG *v49; // ebx const CHAR *v50; // eax volatile LONG **v51; // ebx volatile LONG *v52; // edx int v53; // ebx int v54; // eax volatile LONG *v55; // ebx const CHAR *v56; // eax volatile LONG **v57; // ebx volatile LONG *v58; // edx int v59; // ebx int v60; // eax volatile LONG *v61; // edi volatile LONG v62; // ebx const CHAR *v63; // eax void (__thiscall ***v64)(_DWORD, signed int); // esi int v65; // [esp+80h] [ebp-20h] int v66; // [esp+84h] [ebp-1Ch] int v67; // [esp+88h] [ebp-18h] int v68; // [esp+8Ch] [ebp-14h] int v69; // [esp+90h] [ebp-10h] int v70; // [esp+9Ch] [ebp-4h] int v71; // [esp+A8h] [ebp+8h] volatile LONG v72; // [esp+A8h] [ebp+8h] int v73; // [esp+A8h] [ebp+8h] volatile LONG v74; // [esp+A8h] [ebp+8h] int v75; // [esp+A8h] [ebp+8h] volatile LONG v76; // [esp+A8h] [ebp+8h] int v77; // [esp+A8h] [ebp+8h] volatile LONG v78; // [esp+A8h] [ebp+8h] int v79; // [esp+A8h] [ebp+8h] volatile LONG v80; // [esp+A8h] [ebp+8h] int v81; // [esp+A8h] [ebp+8h] volatile LONG v82; // [esp+A8h] [ebp+8h] int v83; // [esp+A8h] [ebp+8h] volatile LONG v84; // [esp+A8h] [ebp+8h] int v85; // [esp+A8h] [ebp+8h] v2 = (int)this; v69 = 0; v3 = dword_BA6BA0; v70 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildMenu.nif"); sub_8F66B0(v4, (int)&v69, v3); if ( !v69 ) return 0; v5 = sub_8FB140(v69, (int)"Frame", (int)&v67, (int)&v68, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildAcademyMenuWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v69; v70 = -1; if ( v69 && !InterlockedDecrement((volatile LONG *)(v69 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v68; v9 = v67; v71 = v68; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v69, (int)"Theme", (int)&v67, (int)&v68, v10); else v11 = sub_8FB140(v69, (int)"Theme", (int)&v67, (int)&v68, 0); sub_8F3EB0(v67 - v9, v68 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v69, (int)"Panel01", (int)&v67, (int)&v68, 0); sub_8F3EB0(v67 - v9, v68, (int)v12, v2, 0, 0); v13 = sub_8FB140(v69, (int)"Panel02", (int)&v67, (int)&v68, 0); sub_8F3EB0(v67 - v9, v68, (int)v13, v2, 0, 0); v14 = sub_8FB140(v69, (int)"ClsNor", (int)&v67, (int)&v68, 0); sub_8FB650(v14, v69, (int)"ClsClick"); sub_8FB650(v14, v69, (int)"ClsOver"); sub_90C8D0(v67 - v9, v68 - v71, (int)v14, v2); v15 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v69 + 72))("HelpLinkNor") ) { v16 = sub_8FB140(v69, (int)"HelpLinkNor", (int)&v67, (int)&v68, v15); sub_8FB650(v16, v69, (int)"HelpLinkClick"); sub_8FB650(v16, v69, (int)"HelpLinkOver"); sub_8FE0F0(v67 - v9, v68 - v71, (int)v16, v2, 21, 0, 0); } if ( sub_8F71E0(v69, (int)"WinTitle", &v67, &v68, &v65, &v66) ) { v18 = sub_421050(0); v19 = sub_8F4A20(v67 - v9, v68, v65, v66, v18, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v19 + 488))(v19, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v19 + 468))(v19, &dword_AA8D98); v72 = *v19; v20 = sub_40C190(624629836); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v72 + 472))(v19, v20); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v21 = sub_8FB140(v69, (int)"Btn01Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v21, v69, (int)"Btn01Click"); sub_8FB650(v21, v69, (int)"Btn01Over"); sub_8FE0F0(v67 - v9, v68, (int)v21, v2, 10, 0, 0); v22 = v21[9]; v23 = *(_DWORD *)(*v22 + 24); v73 = *(_DWORD *)(*v22 + 20); v24 = sub_421050(0); v25 = sub_8F4A20(v67 - v9, v68 + 1, v73, v23, v24, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 5); v74 = *v25; v26 = sub_40C190(1252889251); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v74 + 472))(v25, v26); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v27 = sub_8FB140(v69, (int)"Btn02Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v27, v69, (int)"Btn02Click"); sub_8FB650(v27, v69, (int)"Btn02Over"); sub_8FE0F0(v67 - v9, v68, (int)v27, v2, 11, 0, 0); v28 = v27[9]; v29 = *(_DWORD *)(*v28 + 24); v75 = *(_DWORD *)(*v28 + 20); v30 = sub_421050(0); v31 = sub_8F4A20(v67 - v9, v68 + 1, v75, v29, v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v76 = *v31; v32 = sub_40C190(590424390); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v31, v32); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v33 = sub_8FB140(v69, (int)"Btn03Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v33, v69, (int)"Btn03Click"); sub_8FB650(v33, v69, (int)"Btn03Over"); sub_8FE0F0(v67 - v9, v68, (int)v33, v2, 12, 0, 0); v34 = v33[9]; v35 = *(_DWORD *)(*v34 + 24); v77 = *(_DWORD *)(*v34 + 20); v36 = sub_421050(0); v37 = sub_8F4A20(v67 - v9, v68 + 1, v77, v35, v36, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v37 + 488))(v37, 5); v78 = *v37; v38 = sub_40C190(-313579483); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v78 + 472))(v37, v38); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v39 = sub_8FB140(v69, (int)"Btn04Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v39, v69, (int)"Btn04Click"); sub_8FB650(v39, v69, (int)"Btn04Over"); sub_8FE0F0(v67 - v9, v68, (int)v39, v2, 15, 0, 0); v40 = v39[9]; v41 = *(_DWORD *)(*v40 + 24); v79 = *(_DWORD *)(*v40 + 20); v42 = sub_421050(0); v43 = sub_8F4A20(v67 - v9, v68 + 1, v79, v41, v42, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v43 + 488))(v43, 5); v80 = *v43; v44 = sub_40C190(-47367357); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v80 + 472))(v43, v44); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); v45 = sub_8FB140(v69, (int)"Btn05Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v45, v69, (int)"Btn05Click"); sub_8FB650(v45, v69, (int)"Btn05Over"); sub_8FE0F0(v67 - v9, v68, (int)v45, v2, 16, 0, 0); v46 = v45[9]; v47 = *(_DWORD *)(*v46 + 24); v81 = *(_DWORD *)(*v46 + 20); v48 = sub_421050(0); v49 = sub_8F4A20(v67 - v9, v68 + 1, v81, v47, v48, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v49 + 488))(v49, 5); v82 = *v49; v50 = sub_40C190(-385673396); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v82 + 472))(v49, v50); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v49 + 240))(v49, 0); v51 = sub_8FB140(v69, (int)"Btn06Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v51, v69, (int)"Btn06Click"); sub_8FB650(v51, v69, (int)"Btn06Over"); sub_8FE0F0(v67 - v9, v68, (int)v51, v2, 17, 0, 0); v52 = v51[9]; v53 = *(_DWORD *)(*v52 + 24); v83 = *(_DWORD *)(*v52 + 20); v54 = sub_421050(0); v55 = sub_8F4A20(v67 - v9, v68 + 1, v83, v53, v54, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v55 + 488))(v55, 5); v84 = *v55; v56 = sub_40C190(-1850373479); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v84 + 472))(v55, v56); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 240))(v55, 0); v57 = sub_8FB140(v69, (int)"Btn07Nor", (int)&v67, (int)&v68, 0); sub_8FB650(v57, v69, (int)"Btn07Click"); sub_8FB650(v57, v69, (int)"Btn07Over"); sub_8FE0F0(v67 - v9, v68, (int)v57, v2, 18, 0, 0); v58 = v57[9]; v59 = *(_DWORD *)(*v58 + 24); v85 = *(_DWORD *)(*v58 + 20); v60 = sub_421050(0); v61 = sub_8F4A20(v67 - v9, v68 + 1, v85, v59, v60, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v61 + 488))(v61, 5); v62 = *v61; v63 = sub_40A910(1297492034); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v62 + 472))(v61, v63); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v61 + 240))(v61, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); (**(void (__thiscall ***)(int, int))(v2 + 232))(v2 + 232, v2 + 232); v70 = -1; if ( v69 ) { v64 = (void (__thiscall ***)(_DWORD, signed int))v69; if ( !InterlockedDecrement((volatile LONG *)(v69 + 4)) ) { if ( v64 ) (**v64)(v64, 1); } } result = 1; } else { v17 = (void (__thiscall ***)(_DWORD, signed int))v69; v70 = -1; if ( v69 && !InterlockedDecrement((volatile LONG *)(v69 + 4)) && v17 ) (**v17)(v17, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00703D30) -------------------------------------------------------- char __thiscall sub_703D30(char *this) { char *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD **v4; // esi const CHAR *v5; // edi char result; // al char *v7; // eax char v8[4]; // [esp+8h] [ebp-14h] int v9; // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] int v11; // [esp+14h] [ebp-8h] v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v2) || (v3 = (_DWORD *)sub_715490(), sub_715120(v3)) ) { v11 = 0; v10 = 0; v9 = 0; *(_DWORD *)v8 = 0; v7 = sub_6D8C50(*((_DWORD *)dword_AD8EBC + 169)); v11 = 0; v10 = 0; v9 = 0; *(_DWORD *)v8 = 0; strncpy(v8, v7, 0x10u); result = sub_6F36A0(&off_AB7F2C, 38, 73, v8, 0x10u); } else { v4 = (_DWORD **)(v1 + 232); v5 = sub_40C190(489651314); if ( v4[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 4))(25, v5, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v4[1] + 20))(25, v5, v4); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v4)[5])(v4, 25, v5, v4); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00703E20) -------------------------------------------------------- int __cdecl sub_703E20(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildAcademyMenuWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildAcademyMenuWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FEDD8: using guessed type void *GuildAcademyMenuWin::`vftable'; // 9FEDF4: using guessed type void *GuildAcademyMenuWin::`vftable'; //----- (00703F60) -------------------------------------------------------- int __thiscall sub_703F60(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax const CHAR *v3; // edi int result; // eax int v5; // eax void ***v6; // eax void ***v7; // esi v1 = this; v2 = (_DWORD *)sub_715490(); if ( sub_715120(v2) ) { v5 = dword_B9E410; if ( !dword_B9E410 ) { v6 = (void ***)operator new(0x48u); v7 = v6; if ( v6 ) { sub_6C2E00(v6, 0); *v7 = &GuildAcademyLeaveTask::`vftable'; v7[2] = &GuildAcademyLeaveTask::`vftable'; v5 = (int)v7; } else { v5 = 0; } dword_B9E410 = v5; } result = (**(int (__stdcall ***)(_DWORD))(v5 + 8))(v1[74]); } else { v3 = sub_40C190(40539004); if ( v1[59] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v1[59] + 4))(25, v3, v1 + 58); if ( v1[59] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v1[59] + 20))(25, v3, v1 + 58); } result = (*(int (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v1[58] + 20))( v1 + 58, 25, v3, v1 + 58); } return result; } // 9FF04C: using guessed type void *GuildAcademyLeaveTask::`vftable'; // 9FF068: using guessed type void *GuildAcademyLeaveTask::`vftable'; // B9E410: using guessed type int dword_B9E410; //----- (00704070) -------------------------------------------------------- char __thiscall sub_704070(char *this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 10: result = sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); break; case 11: result = sub_7032E0(); break; case 12: result = sub_703D30(this); break; case 15: result = sub_6F36A0(&off_AB7F2C, 38, 49, 0, 0); break; case 16: result = sub_6F36A0(&off_AB7F2C, 38, 53, 0, 0); break; case 17: result = sub_703F60(this); break; case 18: result = sub_703350(this); break; case 21: result = sub_7033C0(); break; default: return result; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00704130) -------------------------------------------------------- void *__thiscall sub_704130(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyMenuWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyMenuWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FEDD8: using guessed type void *GuildAcademyMenuWin::`vftable'; // 9FEDF4: using guessed type void *GuildAcademyMenuWin::`vftable'; //----- (00704170) -------------------------------------------------------- void *__thiscall sub_704170(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_B9E410 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FF018: using guessed type void *ISingletonTask::`vftable'; // 9FF034: using guessed type void *ISingletonTask::`vftable'; // B9E410: using guessed type int dword_B9E410; //----- (007041B0) -------------------------------------------------------- _DWORD *__thiscall sub_7041B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; *v1 = &GuildAcademyMoneyRewardWin::`vftable'; v1[58] = &GuildAcademyMoneyRewardWin::`vftable'; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[126] = 0; v1[127] = 0; v1[128] = 0; v1[129] = 0; v1[130] = 0; v1[131] = 0; v1[132] = 0; *((_BYTE *)v1 + 532) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FF2B4: using guessed type void *GuildAcademyMoneyRewardWin::`vftable'; // 9FF2D4: using guessed type void *GuildAcademyMoneyRewardWin::`vftable'; //----- (00704310) -------------------------------------------------------- char __stdcall sub_704310(int a1, _DWORD *a2, int a3) { char result; // al if ( a1 == 27 ) { result = (char)a2; if ( a2 ) { if ( !*a2 ) result = sub_6F36A0(&off_AB7F2C, 38, 65, 0, 0); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00704340) -------------------------------------------------------- int __thiscall sub_704340(char *this, int a2) { int v2; // esi signed int v3; // ebx signed int v4; // edi int result; // eax v2 = (int)(this + 372); v3 = 10; do { v4 = 4; do { result = (*(int (__stdcall **)(void *))(**(_DWORD **)v2 + 460))(&unk_9FF0A7); v2 += 4; --v4; } while ( v4 ); --v3; } while ( v3 ); return result; } //----- (00704380) -------------------------------------------------------- int __thiscall sub_704380(char *this, int a2, __int64 a3) { char *v3; // ebx char *v4; // ST24_4 signed __int64 v5; // rax void (__stdcall *v6)(char *); // eax int v7; // ebx signed __int64 v8; // rax signed __int64 v9; // rax signed __int64 v10; // rax char v12; // [esp+14h] [ebp-24h] v3 = this; v4 = this; v5 = sub_680E90(a3); sprintf(&v12, "%I64d", v5); v6 = *(void (__stdcall **)(char *))(**(_DWORD **)&v3[16 * a2 + 372] + 460); v7 = (int)&v3[16 * a2]; v6(&v12); v8 = sub_680EB0(a3); sprintf(&v12, "%I64d", v8); (*(void (__stdcall **)(char *))(**(_DWORD **)(v7 + 376) + 460))(&v12); v9 = sub_680F00(a3); sprintf(&v12, "%I64d", v9); (*(void (__thiscall **)(_DWORD, char *))(**(_DWORD **)(v7 + 380) + 460))(*(_DWORD *)(v7 + 380), &v12); v10 = sub_680F60(a3); sprintf(&v12, "%I64d", v10); return (*(int (__stdcall **)(char *))(**(_DWORD **)&v4[16 * (a2 + 24)] + 460))(&v12); } //----- (00704490) -------------------------------------------------------- char __thiscall sub_704490(_BYTE **this, char a2) { _BYTE **v2; // esi signed int v3; // edi char result; // al v2 = this + 93; v3 = 40; do { result = sub_459960(*v2, a2); ++v2; --v3; } while ( v3 ); return result; } //----- (007044C0) -------------------------------------------------------- char sub_7044C0() { char v1; // [esp+1h] [ebp-1h] v1 = 1; return sub_6F3D10(&off_AB7F2C, 38, 111, &v1, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00704510) -------------------------------------------------------- char __thiscall sub_704510(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (00704540) -------------------------------------------------------- char __thiscall sub_704540(char *this, int a2) { char *v2; // edi __int64 *v3; // esi int v4; // ebx char result; // al v2 = this; if ( (signed int)*(unsigned __int8 *)(a2 + 2) > 0 ) { v3 = (__int64 *)(a2 + 4); v4 = *(unsigned __int8 *)(a2 + 2); do { switch ( *((unsigned __int8 *)v3 - 1) ) { case 0xAu: sub_704380(v2, 0, *v3); break; case 0x10u: sub_704380(v2, 1, *v3); break; case 0x15u: sub_704380(v2, 2, *v3); break; case 0x1Au: sub_704380(v2, 3, *v3); break; case 0x1Fu: sub_704380(v2, 4, *v3); break; case 0x24u: sub_704380(v2, 5, *v3); break; case 0x29u: sub_704380(v2, 6, *v3); break; case 0x2Eu: sub_704380(v2, 7, *v3); break; case 0x33u: sub_704380(v2, 8, *v3); break; case 0x38u: sub_704380(v2, 9, *v3); break; default: break; } v3 = (__int64 *)((char *)v3 + 9); --v4; } while ( v4 ); } HIBYTE(a2) = 1; result = sub_6F3D10(&off_AB7F2C, 38, 109, (char *)&a2 + 3, 1u); v2[532] = 1; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00704680) -------------------------------------------------------- char __thiscall sub_704680(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax const CHAR *v21; // eax volatile LONG **v22; // eax volatile LONG **v23; // eax int v24; // eax volatile LONG *v25; // eax int v26; // eax volatile LONG *v27; // eax const CHAR *v28; // eax volatile LONG **v29; // eax int v30; // ST88_4 int v31; // ST84_4 int v32; // eax volatile LONG *v33; // ST94_4 int v34; // edx volatile LONG **v35; // eax int v36; // ST88_4 int v37; // ST84_4 int v38; // eax volatile LONG *v39; // ST94_4 int v40; // edx volatile LONG **v41; // eax int v42; // ST88_4 int v43; // ST84_4 int v44; // eax volatile LONG *v45; // ST94_4 int v46; // edx volatile LONG **v47; // eax int v48; // ST88_4 int v49; // ST84_4 int v50; // eax char *v51; // STAC_4 int v52; // eax int v53; // STB0_4 int v54; // eax int v55; // eax int v56; // ecx char *v57; // eax volatile LONG **v58; // eax volatile LONG *v59; // eax int v60; // ecx volatile LONG **v61; // STA8_4 volatile LONG *v62; // ecx int v63; // STA8_4 int v64; // eax void (__thiscall **v65)(volatile LONG *, const CHAR *); // STA8_4 const CHAR *v66; // eax int v67; // eax int v68; // STA8_4 int v69; // eax void (__thiscall **v70)(volatile LONG *, const CHAR *); // STA8_4 const CHAR *v71; // eax int v72; // eax int v73; // STA8_4 int v74; // eax volatile LONG *v75; // edi volatile LONG v76; // ebx const CHAR *v77; // eax void (__thiscall ***v78)(_DWORD, signed int); // esi int v79; // [esp+A8h] [ebp-44h] int v80; // [esp+B4h] [ebp-38h] void (__thiscall **v81)(volatile LONG *, const CHAR *); // [esp+B8h] [ebp-34h] int v82; // [esp+BCh] [ebp-30h] int v83; // [esp+C0h] [ebp-2Ch] int v84; // [esp+C4h] [ebp-28h] char v85[4]; // [esp+C8h] [ebp-24h] char v86[4]; // [esp+CCh] [ebp-20h] volatile LONG *v87; // [esp+D0h] [ebp-1Ch] int v88; // [esp+D4h] [ebp-18h] int v89; // [esp+D8h] [ebp-14h] int v90; // [esp+DCh] [ebp-10h] int v91; // [esp+E8h] [ebp-4h] volatile LONG *v92; // [esp+F4h] [ebp+8h] volatile LONG **v93; // [esp+F4h] [ebp+8h] volatile LONG *v94; // [esp+F4h] [ebp+8h] volatile LONG **v95; // [esp+F4h] [ebp+8h] void (__thiscall **v96)(volatile LONG *, const CHAR *); // [esp+F4h] [ebp+8h] volatile LONG *v97; // [esp+F4h] [ebp+8h] volatile LONG *v98; // [esp+F4h] [ebp+8h] volatile LONG *v99; // [esp+F4h] [ebp+8h] volatile LONG *v100; // [esp+F4h] [ebp+8h] volatile LONG *v101; // [esp+F4h] [ebp+8h] volatile LONG *v102; // [esp+F4h] [ebp+8h] volatile LONG *v103; // [esp+F4h] [ebp+8h] volatile LONG *v104; // [esp+F4h] [ebp+8h] int v105; // [esp+F4h] [ebp+8h] volatile LONG *v106; // [esp+F4h] [ebp+8h] int v107; // [esp+F4h] [ebp+8h] volatile LONG **v108; // [esp+F4h] [ebp+8h] int v109; // [esp+F4h] [ebp+8h] volatile LONG *v110; // [esp+F4h] [ebp+8h] volatile LONG **v111; // [esp+F4h] [ebp+8h] int v112; // [esp+F4h] [ebp+8h] volatile LONG *v113; // [esp+F4h] [ebp+8h] volatile LONG **v114; // [esp+F4h] [ebp+8h] int v115; // [esp+F4h] [ebp+8h] v2 = this; v88 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v91 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademyGift.nif"); sub_8F66B0(v4, (int)&v88, v3); if ( !v88 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v88 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v80 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v91) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v87 = v9) == 0) ) { LOBYTE(v91) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v88; v91 = -1; if ( v88 && !InterlockedDecrement((volatile LONG *)(v88 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v88, (int)"Frame", (int)&v89, (int)&v90, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, a2, (int)"GuildAcademyMoneyCompensation", 0) ) { v14 = v89; v15 = v90; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v88, (int)"Theme", (int)&v89, (int)&v90, v16); else v17 = sub_8FB140(v88, (int)"Theme", (int)&v89, (int)&v90, 0); sub_8F3EB0(v89 - v14, v90 - v15, (int)v17, (int)v2, 0, 0); v18 = (volatile LONG *)sub_43D0D0(0x12u); v19 = sub_8FB140(v88, (int)"IconSlot", (int)&v89, (int)&v90, v18); sub_8F3EB0(v89 - v14, v90 - v15, (int)v19, (int)v2, 0, 0); if ( !sub_8F71E0(v88, (int)"WinTitle", &v89, &v90, &v83, &v84) ) goto LABEL_54; v20 = sub_421050(7); v92 = sub_8F4A20(v89 - v14, v90 - v15, v83, v84, v20, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v92 + 488))(v92, 1); (*(void (__stdcall **)(int *))(*v92 + 468))(&dword_AA8D98); v81 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v92 + 472); v21 = sub_40C190(1939511739); (*v81)(v92, v21); (*(void (__stdcall **)(_DWORD))(*v92 + 240))(0); v93 = sub_8FB140(v88, (int)"ClsNor", (int)&v89, (int)&v90, v87); sub_8FB650(v93, v88, (int)"ClsClick"); sub_8FB650(v93, v88, (int)"ClsOver"); sub_8FE0F0(v89 - v14, v90 - v15, (int)v93, (int)v2, 11, 0, 0); v94 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v88 + 72))("HelpLinkNor") ) { v95 = sub_8FB140(v88, (int)"HelpLinkNor", (int)&v89, (int)&v90, v94); sub_8FB650(v95, v88, (int)"HelpLinkClick"); sub_8FB650(v95, v88, (int)"HelpLinkOver"); sub_8FE0F0(v89 - v14, v90 - v15, (int)v95, (int)v2, 15, 0, 0); } v22 = sub_8FB140(v88, (int)"Panel01", (int)&v89, (int)&v90, v87); sub_8F3EB0(v89 - v14, v90 - v15, (int)v22, (int)v2, 0, 0); v23 = sub_8FB140(v88, (int)"Panel02", (int)&v89, (int)&v90, v87); sub_8F3EB0(v89 - v14, v90 - v15, (int)v23, (int)v2, 0, 0); if ( sub_8F71E0(v88, (int)"GuildInfoText", &v89, &v90, &v83, &v84) ) { v24 = sub_421050(7); v25 = sub_8F4A20(v89 - v14, v90 - v15 - 5, v83, v84, v24, (int)v2, 0, 0); v2[86] = v25; (*(void (__thiscall **)(volatile LONG *, signed int))(*v25 + 488))(v25, 4); (*(void (__stdcall **)(void *))(*v2[86] + 472))(&unk_9FF096); (*(void (__stdcall **)(_DWORD))(*v2[86] + 240))(0); v26 = sub_421050(7); v27 = sub_8F4A20(v89 - v14, v90 - v15 + 30, v83, v84 - 30, v26, (int)v2, 0, 0); v2[87] = v27; (*(void (__thiscall **)(volatile LONG *, signed int))(*v27 + 488))(v27, 4); v96 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v2[87] + 472); v28 = sub_40C190(-179932511); (*v96)(v2[87], v28); (*(void (__stdcall **)(_DWORD))(*v2[87] + 240))(0); v29 = sub_8FB140(v88, (int)"GemInput11", (int)&v89, (int)&v90, v87); v97 = sub_8F3EB0(v89 - v14, v90 - v15, (int)v29, (int)v2, 0, 0); v30 = sub_421050(0); v31 = (*(int (**)(void))(*v97 + 148))(); v32 = (*(int (**)(void))(*v97 + 144))(); v98 = sub_8F4A20(0, 1, v32, v31, v30, (int)v97, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v98 + 488))(v98, 6); (*(void (__stdcall **)(void *))(*v98 + 472))(&unk_9FF097); (*(void (__stdcall **)(_DWORD))(*v98 + 240))(0); v33 = v87; v34 = v88; v2[88] = v98; v35 = sub_8FB140(v34, (int)"GoldInput11", (int)&v89, (int)&v90, v33); v99 = sub_8F3EB0(v89 - v14, v90 - v15, (int)v35, (int)v2, 0, 0); v36 = sub_421050(0); v37 = (*(int (**)(void))(*v99 + 148))(); v38 = (*(int (**)(void))(*v99 + 144))(); v100 = sub_8F4A20(0, 1, v38, v37, v36, (int)v99, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v100 + 488))(v100, 6); (*(void (__stdcall **)(void *))(*v100 + 472))(&unk_9FF09E); (*(void (__stdcall **)(_DWORD))(*v100 + 240))(0); v39 = v87; v40 = v88; v2[89] = v100; v41 = sub_8FB140(v40, (int)"SilverInput11", (int)&v89, (int)&v90, v39); v101 = sub_8F3EB0(v89 - v14, v90 - v15, (int)v41, (int)v2, 0, 0); v42 = sub_421050(0); v43 = (*(int (**)(void))(*v101 + 148))(); v44 = (*(int (**)(void))(*v101 + 144))(); v102 = sub_8F4A20(0, 1, v44, v43, v42, (int)v101, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v102 + 488))(v102, 6); (*(void (__stdcall **)(void *))(*v102 + 472))(&unk_9FF09F); (*(void (__stdcall **)(_DWORD))(*v102 + 240))(0); v45 = v87; v46 = v88; v2[90] = v102; v47 = sub_8FB140(v46, (int)"CopperInput11", (int)&v89, (int)&v90, v45); v103 = sub_8F3EB0(v89 - v14, v90 - v15, (int)v47, (int)v2, 0, 0); v48 = sub_421050(0); v49 = (*(int (**)(void))(*v103 + 148))(); v50 = (*(int (**)(void))(*v103 + 144))(); v104 = sub_8F4A20(0, 1, v50, v49, v48, (int)v103, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v104 + 488))(v104, 6); (*(void (__stdcall **)(void *))(*v104 + 472))(&unk_9FF0A6); (*(void (__stdcall **)(_DWORD))(*v104 + 240))(0); v2[91] = v104; *(_DWORD *)v85 = 10; v82 = 15; v81 = 0; do { v79 = (int)v81 + 1; *(_DWORD *)v86 = sub_7549E0("Level%02d", (char *)v81 + 1); v51 = sub_7549E0("%d ~ %dLv", *(_DWORD *)v85, v82); v52 = *sub_8FB140(v88, *(int *)v86, (int)&v89, (int)&v90, v87)[9]; v105 = *(_DWORD *)(v52 + 24); v53 = *(_DWORD *)(v52 + 20); v54 = sub_421050(0); v106 = sub_8F4A20(v89 - v14, v90 - v15 + 1, v53, v105, v54, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, char *))(*v106 + 472))(v106, v51); (*(void (__stdcall **)(_DWORD))(*v106 + 240))(0); if ( v81 ) *(_DWORD *)v85 += 5; else *(_DWORD *)v85 += 6; v82 += 5; v81 = (void (__thiscall **)(volatile LONG *, const CHAR *))((char *)v81 + 1); } while ( v79 < 10 ); v55 = 0; v81 = (void (__thiscall **)(volatile LONG *, const CHAR *))93; do { v56 = 0; v107 = 0; v82 = v55 + 1; while ( 1 ) { switch ( v56 ) { case 0: *(_DWORD *)v86 = "GemInput"; break; case 1: *(_DWORD *)v86 = "GoldInput"; break; case 2: *(_DWORD *)v86 = "SilverInput"; break; case 3: *(_DWORD *)v86 = "CopperInput"; break; default: break; } v57 = sub_7549E0("%s%02d", *(_DWORD *)v86, v82); v58 = sub_8FB140(v88, (int)v57, (int)&v89, (int)&v90, v87); sub_8F3EB0(v89 - v14, v90 - v15, (int)v58, (int)v2, 0, 0); v59 = sub_45A900(v89 - v14 + 2, v90 - v15 + 4, v83, v84, (int)v2, 1342185472, 3, 3, 0, 0, 1); v60 = (int)v81 + v107; v2[v60] = v59; v61 = &v2[v60]; (*(void (__thiscall **)(volatile LONG *, const char *))(*v59 + 460))(v59, "0"); sub_459960(*v61, 0); if ( ++v107 >= 4 ) break; v56 = v107; } v55 = v82; ++v81; } while ( (signed int)v81 < 133 ); v108 = sub_8FB140(v88, (int)"Btn01Nor", (int)&v89, (int)&v90, v87); sub_8FB650(v108, v88, (int)"Btn01Click"); sub_8FB650(v108, v88, (int)"Btn01Over"); sub_8FE0F0(v89 - v14, v90 - v15, (int)v108, (int)v2, 12, 0, 0); v62 = v108[9]; v109 = *(_DWORD *)(*v62 + 24); v63 = *(_DWORD *)(*v62 + 20); v64 = sub_421050(7); v110 = sub_8F4A20(v89 - v14, v90 - v15 + 1, v63, v109, v64, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v110 + 488))(v110, 5); v65 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v110 + 472); v66 = sub_40C190(-1678117642); (*v65)(v110, v66); (*(void (__stdcall **)(_DWORD))(*v110 + 240))(0); v111 = sub_8FB140(v88, (int)"Btn02Nor", (int)&v89, (int)&v90, v87); sub_8FB650(v111, v88, (int)"Btn02Click"); sub_8FB650(v111, v88, (int)"Btn02Over"); sub_8FE0F0(v89 - v14, v90 - v15, (int)v111, (int)v2, 13, 0, 0); v67 = *v111[9]; v112 = *(_DWORD *)(v67 + 24); v68 = *(_DWORD *)(v67 + 20); v69 = sub_421050(7); v113 = sub_8F4A20(v89 - v14, v90 - v15 + 1, v68, v112, v69, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v113 + 488))(v113, 5); v70 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v113 + 472); v71 = sub_40C190(-1878659591); (*v70)(v113, v71); (*(void (__stdcall **)(_DWORD))(*v113 + 240))(0); v114 = sub_8FB140(v88, (int)"Btn03Nor", (int)&v89, (int)&v90, v87); sub_8FB650(v114, v88, (int)"Btn03Click"); sub_8FB650(v114, v88, (int)"Btn03Over"); sub_8FE0F0(v89 - v14, v90 - v15, (int)v114, (int)v2, 14, 0, 0); v72 = *v114[9]; v115 = *(_DWORD *)(v72 + 24); v73 = *(_DWORD *)(v72 + 20); v74 = sub_421050(7); v75 = sub_8F4A20(v89 - v14, v90 - v15 + 1, v73, v115, v74, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 488))(v75, 5); v76 = *v75; v77 = sub_40C190(-1786080061); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v76 + 472))(v75, v77); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v75 + 240))(v75, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v91) = 0; if ( !InterlockedDecrement((volatile LONG *)(v80 + 4)) ) (**(void (__thiscall ***)(int, signed int))v80)(v80, 1); v78 = (void (__thiscall ***)(_DWORD, signed int))v88; v91 = -1; if ( v88 && !InterlockedDecrement((volatile LONG *)(v88 + 4)) && v78 ) (**v78)(v78, 1); result = 1; } else { LABEL_54: LOBYTE(v91) = 0; sub_410C00(&v80); v91 = -1; sub_410C00(&v88); result = 0; } } else { LOBYTE(v91) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v88; v91 = -1; if ( !v88 || InterlockedDecrement((volatile LONG *)(v88 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (007053B0) -------------------------------------------------------- void __thiscall sub_7053B0(char *this) { char *v1; // ebx _DWORD *v2; // eax int v3; // esi signed int v4; // edi int v5; // esi const char *v6; // eax int v7; // ebx const char *v8; // eax int v9; // eax int v10; // ecx const char *v11; // eax int v12; // ST30_4 const char *v13; // eax int v14; // eax signed __int64 v15; // rax int v16; // edi int v17; // edx signed int v18; // eax char *v19; // esi int v20; // ecx int v21; // ecx const CHAR *v22; // eax int v23; // [esp+8h] [ebp-B8h] char v24; // [esp+Fh] [ebp-B1h] char v25; // [esp+10h] [ebp-B0h] int v26; // [esp+11h] [ebp-AFh] int v27; // [esp+15h] [ebp-ABh] char v28; // [esp+1Ah] [ebp-A6h] int v29; // [esp+6Ch] [ebp-54h] int v30[19]; // [esp+70h] [ebp-50h] v1 = this; v2 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v2) ) { v3 = (int)(v1 + 372); v4 = 40; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v3 + 488))(1); v3 += 4; --v4; } while ( v4 ); v5 = (int)(v1 + 376); do { v6 = (const char *)(*(int (**)(void))(**(_DWORD **)(v5 - 4) + 452))(); v7 = atoi(v6); v8 = (const char *)(*(int (**)(void))(**(_DWORD **)v5 + 452))(); v9 = atoi(v8); v10 = *(_DWORD *)(v5 + 4); v23 = v9; v11 = (const char *)(*(int (**)(void))(*(_DWORD *)v10 + 452))(); v12 = atoi(v11); v13 = (const char *)(*(int (**)(void))(**(_DWORD **)(v5 + 8) + 452))(); v14 = atoi(v13); v15 = sub_680FA0(v14, v12, v23, v7); *(&v29 + 2 * v4) = v15; v30[2 * v4++] = HIDWORD(v15); v5 += 16; } while ( v4 < 10 ); v16 = dword_AB7F4C; if ( dword_AB7F4C ) { LOWORD(v23) = -26567; sub_905F90(dword_AB7F4C, &v23, 2u); v24 = 10; sub_905F90(v16, &v24, 1u); v26 = v29; v25 = 10; v27 = v30[0]; v18 = 1; v19 = &v28; do { LOBYTE(v17) = 4 * v18; v19 += 9; v20 = v17 + v18 + 11; v17 = *(&v29 + 2 * v18); *(v19 - 10) = v20; v21 = v30[2 * v18]; *(_DWORD *)(v19 - 9) = v17; *(_DWORD *)(v19 - 5) = v21; ++v18; } while ( v18 < 10 ); sub_906000(v16, &v25, 0x5Au); } } else { v22 = sub_40C190(409888371); sub_492060(*((_DWORD **)v1 + 74), (int)v22); } } // AB7F4C: using guessed type int dword_AB7F4C; // 7053B0: using guessed type int var_50[19]; //----- (00705580) -------------------------------------------------------- void __thiscall sub_705580(char *this) { char *v1; // ebx int v2; // esi signed int v3; // edi _DWORD *v4; // eax int v5; // eax size_t v6; // eax void *v7; // eax _DWORD *v8; // edi char *v9; // eax volatile LONG *v10; // eax const CHAR *v11; // eax int v12; // [esp+Ch] [ebp-10h] const CHAR *v13; // [esp+10h] [ebp-Ch] const CHAR *v14; // [esp+14h] [ebp-8h] const CHAR *v15; // [esp+18h] [ebp-4h] v1 = this; v2 = (int)(this + 372); v3 = 40; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v2 + 488))(1); v2 += 4; --v3; } while ( v3 ); v4 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v4) ) { v13 = &byte_9A8050; v14 = &byte_9A8050; v15 = &byte_9A8050; v12 = -1869310780; v5 = *(_DWORD *)(dword_AC9C90 + 56); if ( v5 ) v6 = *(_DWORD *)(v5 + 40); else v6 = 0; v7 = bsearch(&v12, dword_ACB3A0, v6, 0x10u, sub_4508B0); v8 = v7; if ( v7 ) { if ( strcmp(*((const char **)v7 + 2), "None") ) sub_6BA890(&dword_AB6520, v8[2]); if ( strcmp((const char *)v8[3], "None") ) sub_6BA680(&dword_AB6520, v8[3]); v9 = (char *)v8[1]; } else { v9 = (char *)&byte_9A8050; } v10 = sub_462C30(2, v9); *((_DWORD *)v1 + 92) = v10; (**((void (__stdcall ***)(int))v10 + 58))((int)(v1 + 232)); } else { v11 = sub_40C190(-982641618); sub_492060(*((_DWORD **)v1 + 74), (int)v11); } } // AC9C90: using guessed type int dword_AC9C90; //----- (007056E0) -------------------------------------------------------- void __thiscall sub_7056E0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *v3; // eax const CHAR *v4; // eax char v5; // [esp+7h] [ebp-1h] v1 = this; v2 = sub_7154F0(); if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 260))(v2) ) { v3 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v3) ) { v5 = 0; sub_6F3D10(&off_AB7F2C, 38, 109, &v5, 1u); } else { v4 = sub_40C190(1922102688); sub_492060(v1[74], (int)v4); } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00705750) -------------------------------------------------------- int __thiscall sub_705750(_DWORD **this) { _DWORD **v1; // esi int v2; // edi unsigned __int16 *v3; // ebx int v4; // ST24_4 int v5; // ST14_4 int v6; // ST10_4 int v7; // ST0C_4 int v8; // ST08_4 char *v9; // eax char *v10; // eax __int64 v11; // rax signed __int64 v12; // rax __int64 v13; // rax signed __int64 v14; // rax __int64 v15; // rax signed __int64 v16; // rax __int64 v17; // rax signed __int64 v18; // rax char v20; // [esp+10h] [ebp-84h] v1 = this; sub_6D3800(); v2 = sub_715490(); v3 = (unsigned __int16 *)sub_713B50(); (*(void (__stdcall **)(signed int))(*v1[86] + 256))(1); v4 = *v1[86]; v5 = *(_DWORD *)(v2 + 1176); v6 = *(_DWORD *)(v2 + 1180); v7 = v3[2]; v8 = sub_713AF0(v3); v9 = (char *)sub_40C190(-816764622); v10 = sub_7549E0(v9, v8, v7, v6, v5); (*(void (__thiscall **)(_DWORD *, char *))(v4 + 472))(v1[86], v10); (*(void (__stdcall **)(signed int))(*v1[87] + 256))(1); v11 = sub_7186B0(); v12 = sub_680E90(v11); sprintf(&v20, "%I64d", v12); (*(void (__stdcall **)(char *))(*v1[88] + 472))(&v20); v13 = sub_7186B0(); v14 = sub_680EB0(v13); sprintf(&v20, "%I64d", v14); (*(void (__stdcall **)(char *))(*v1[89] + 472))(&v20); v15 = sub_7186B0(); v16 = sub_680F00(v15); sprintf(&v20, "%I64d", v16); (*(void (__stdcall **)(char *))(*v1[90] + 472))(&v20); v17 = sub_7186B0(); v18 = sub_680F60(v17); sprintf(&v20, "%I64d", v18); return (*(int (__stdcall **)(char *))(*v1[91] + 472))(&v20); } //----- (007058F0) -------------------------------------------------------- void __thiscall sub_7058F0(char *this, int a2, int a3) { _DWORD *v3; // eax switch ( a2 ) { case 11: sub_704510(this); break; case 12: sub_7053B0(this); break; case 13: sub_705580(this); break; case 14: sub_7056E0((_DWORD **)this); break; case 15: v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) sub_4A5170(v3, "GuildAcademyGift"); break; default: return; } } //----- (00705970) -------------------------------------------------------- int __thiscall sub_705970(_DWORD **this, int a2) { return sub_705750(this); } //----- (00705980) -------------------------------------------------------- volatile LONG *__cdecl sub_705980(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x218u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_7041B0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00705AB0) -------------------------------------------------------- void *__thiscall sub_705AB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyMoneyRewardWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyMoneyRewardWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FF2B4: using guessed type void *GuildAcademyMoneyRewardWin::`vftable'; // 9FF2D4: using guessed type void *GuildAcademyMoneyRewardWin::`vftable'; //----- (00705B40) -------------------------------------------------------- int __thiscall sub_705B40(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (00705B60) -------------------------------------------------------- int __thiscall sub_705B60(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (**)(void))(*this[86] + 468))(); return (*(int (**)(void))(*v1[86] + 480))(); } //----- (00705B90) -------------------------------------------------------- char __thiscall sub_705B90(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax volatile LONG **v14; // edi void (__thiscall ***v15)(_DWORD, signed int); // esi int v16; // eax volatile LONG *v17; // edi const CHAR *v18; // eax volatile LONG **v19; // edi volatile LONG *v20; // edx int v21; // edi int v22; // eax volatile LONG *v23; // edi const CHAR *v24; // eax volatile LONG **v25; // edi volatile LONG *v26; // edx int v27; // edi int v28; // eax volatile LONG *v29; // edi volatile LONG v30; // ebx const CHAR *v31; // eax void (__thiscall ***v32)(_DWORD, signed int); // esi int v33; // [esp+40h] [ebp-20h] int v34; // [esp+44h] [ebp-1Ch] int v35; // [esp+48h] [ebp-18h] int v36; // [esp+4Ch] [ebp-14h] int v37; // [esp+50h] [ebp-10h] int v38; // [esp+5Ch] [ebp-4h] int v39; // [esp+68h] [ebp+8h] volatile LONG v40; // [esp+68h] [ebp+8h] int v41; // [esp+68h] [ebp+8h] volatile LONG v42; // [esp+68h] [ebp+8h] int v43; // [esp+68h] [ebp+8h] v2 = (int)this; v35 = 0; v3 = dword_BA6BA0; v38 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildEditor.nif"); sub_8F66B0(v4, (int)&v35, v3); if ( !v35 ) return 0; v5 = sub_8FB140(v35, (int)"Frame", (int)&v36, (int)&v37, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildAcademyNoticeEditorWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v35; v38 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } return 0; } v8 = v37; v9 = v36; v39 = v37; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v35, (int)"Theme", (int)&v36, (int)&v37, v10); else v11 = sub_8FB140(v35, (int)"Theme", (int)&v36, (int)&v37, 0); sub_8F3EB0(v36 - v9, v37 - v8, (int)v11, v2, 0, 0); v12 = sub_8FB140(v35, (int)"Panel01", (int)&v36, (int)&v37, 0); sub_8F3EB0(v36 - v9, v37, (int)v12, v2, 0, 0); v13 = sub_8FB140(v35, (int)"Panel02", (int)&v36, (int)&v37, 0); sub_8F3EB0(v36 - v9, v37, (int)v13, v2, 0, 0); v14 = sub_8FB140(v35, (int)"ClsNor", (int)&v36, (int)&v37, 0); sub_8FB650(v14, v35, (int)"ClsClick"); sub_8FB650(v14, v35, (int)"ClsOver"); sub_90C8D0(v36 - v9, v37 - v39, (int)v14, v2); if ( sub_8F71E0(v35, (int)"WinTitle", &v36, &v37, &v33, &v34) ) { v16 = sub_421050(0); v17 = sub_8F4A20(v36 - v9, v37, v33, v34, v16, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v17 + 488))(v17, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v17 + 468))(v17, &dword_AA8D98); v40 = *v17; v18 = sub_40C190(1025836430); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v40 + 472))(v17, v18); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v19 = sub_8FB140(v35, (int)"AddFrndNor", (int)&v36, (int)&v37, 0); sub_8FB650(v19, v35, (int)"AddFrndClick"); sub_8FB650(v19, v35, (int)"AddFrndOver"); sub_8FE0F0(v36 - v9, v37, (int)v19, v2, 0, 0, 0); v20 = v19[9]; v21 = *(_DWORD *)(*v20 + 24); v41 = *(_DWORD *)(*v20 + 20); v22 = sub_421050(0); v23 = sub_8F4A20(v36 - v9, v37 + 1, v41, v21, v22, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 5); v42 = *v23; v24 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v42 + 472))(v23, v24); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v23 + 240))(v23, 0); v25 = sub_8FB140(v35, (int)"AddFrndNor01", (int)&v36, (int)&v37, 0); sub_8FB650(v25, v35, (int)"AddFrndClick01"); sub_8FB650(v25, v35, (int)"AddFrndOver01"); sub_8FE0F0(v36 - v9, v37, (int)v25, v2, 1, 0, 0); v26 = v25[9]; v27 = *(_DWORD *)(*v26 + 24); v43 = *(_DWORD *)(*v26 + 20); v28 = sub_421050(0); v29 = sub_8F4A20(v36 - v9, v37 + 1, v43, v27, v28, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 5); v30 = *v29; v31 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v30 + 472))(v29, v31); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); sub_8F71E0(v35, (int)"Text01", &v36, &v37, &v33, &v34); *(_DWORD *)(v2 + 344) = sub_45A900(v36, v37, v33, v34, v2, 1342181380, 400, 4, 0, 0, 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); v38 = -1; if ( v35 ) { v32 = (void (__thiscall ***)(_DWORD, signed int))v35; if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) ) { if ( v32 ) (**v32)(v32, 1); } } result = 1; } else { v15 = (void (__thiscall ***)(_DWORD, signed int))v35; v38 = -1; if ( v35 && !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v15 ) (**v15)(v15, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (007060A0) -------------------------------------------------------- int __cdecl sub_7060A0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildAcademyNoticeEditorWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildAcademyNoticeEditorWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FF5DC: using guessed type void *GuildAcademyNoticeEditorWin::`vftable'; // 9FF5FC: using guessed type void *GuildAcademyNoticeEditorWin::`vftable'; //----- (007061E0) -------------------------------------------------------- char __thiscall sub_7061E0(int this, int a2, int a3) { _DWORD *v3; // edi char result; // al _BYTE *v5; // eax void *v6; // esi _DWORD *v7; // eax v3 = (_DWORD *)this; if ( a2 ) { result = a2 - 1; if ( a2 == 1 ) result = sub_8F86A0(&unk_BA6B10, (_DWORD *)this); } else { v5 = (_BYTE *)(*(int (**)(void))(**(_DWORD **)(this + 344) + 452))(); v6 = v5; if ( v5 && *v5 ) { v7 = (_DWORD *)sub_706300(); sub_714C80(v7, v6); } result = sub_8F86A0(&unk_BA6B10, v3); } return result; } //----- (00706280) -------------------------------------------------------- void *__thiscall sub_706280(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyNoticeEditorWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyNoticeEditorWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FF5DC: using guessed type void *GuildAcademyNoticeEditorWin::`vftable'; // 9FF5FC: using guessed type void *GuildAcademyNoticeEditorWin::`vftable'; //----- (007062C0) -------------------------------------------------------- void *__thiscall sub_7062C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_B9E414 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FF820: using guessed type void *ISingletonTask::`vftable'; // 9FF83C: using guessed type void *ISingletonTask::`vftable'; // B9E414: using guessed type int dword_B9E414; //----- (00706300) -------------------------------------------------------- int sub_706300() { int result; // eax void ***v1; // eax int v2; // esi result = dword_B9E414; if ( !dword_B9E414 ) { v1 = (void ***)operator new(0x5Cu); v2 = (int)v1; if ( v1 ) { sub_6C2E00(v1, 0); *(_DWORD *)v2 = &GuildAcademyNotifyTask::`vftable'; *(_DWORD *)(v2 + 8) = &GuildAcademyNotifyTask::`vftable'; *(_DWORD *)(v2 + 84) = 15; *(_DWORD *)(v2 + 80) = 0; *(_BYTE *)(v2 + 64) = 0; } else { v2 = 0; } result = v2; dword_B9E414 = v2; } return result; } // 9FF854: using guessed type void *GuildAcademyNotifyTask::`vftable'; // 9FF870: using guessed type void *GuildAcademyNotifyTask::`vftable'; // B9E414: using guessed type int dword_B9E414; //----- (00706390) -------------------------------------------------------- _DWORD *__thiscall sub_706390(void *this, char a2) { _DWORD *v2; // esi v2 = this; if ( *((_DWORD *)this + 21) >= 0x10u ) operator delete(*((void **)this + 16)); v2[21] = 15; v2[20] = 0; *((_BYTE *)v2 + 64) = 0; *v2 = &ISingletonTask::`vftable'; v2[2] = &ISingletonTask::`vftable'; dword_B9E414 = 0; sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FF820: using guessed type void *ISingletonTask::`vftable'; // 9FF83C: using guessed type void *ISingletonTask::`vftable'; // B9E414: using guessed type int dword_B9E414; //----- (007064A0) -------------------------------------------------------- int __thiscall sub_7064A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 364) == 0; v1[90] = 0; *((_BYTE *)v1 + 364) = v3; sub_466AF0(v2, 0, v3, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (007064E0) -------------------------------------------------------- int __thiscall sub_7064E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 365) == 0; v1[90] = 1; *((_BYTE *)v1 + 365) = v3; sub_466AF0(v2, 1, v3, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00706520) -------------------------------------------------------- int __thiscall sub_706520(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 366) == 0; v1[90] = 2; *((_BYTE *)v1 + 366) = v3; sub_466AF0(v2, 2, v3, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00706560) -------------------------------------------------------- int __thiscall sub_706560(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 367) == 0; v1[90] = 3; *((_BYTE *)v1 + 367) = v3; sub_466AF0(v2, 3, v3, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (007065A0) -------------------------------------------------------- char sub_7065A0() { int v1; // [esp+0h] [ebp-4h] v1 = 0; return sub_6F36A0(&off_AB7F2C, 38, 77, &v1, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007065D0) -------------------------------------------------------- char sub_7065D0() { int v1; // [esp+0h] [ebp-4h] v1 = 1; return sub_6F36A0(&off_AB7F2C, 38, 77, &v1, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00706610) -------------------------------------------------------- char sub_706610() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildAcademyRanking"); return (char)v0; } //----- (00706650) -------------------------------------------------------- char __thiscall sub_706650(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[87], v2[88]); return v3; } //----- (00706680) -------------------------------------------------------- void __thiscall sub_706680(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[88]; if ( v2 ) { v3 = v1[87]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[88] + 300); sub_465130((_DWORD *)v1[87]); } } } //----- (007066D0) -------------------------------------------------------- void __thiscall sub_7066D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // eax int v4; // eax int v5; // ecx unsigned int v6; // ebx int v7; // eax _DWORD *v8; // ecx int v9; // ecx int v10; // eax int v11; // ecx int v12; // eax _DWORD *v13; // ecx char *v14; // eax int v15; // [esp+8h] [ebp-30h] int v16; // [esp+Ch] [ebp-2Ch] int v17; // [esp+10h] [ebp-28h] int v18; // [esp+14h] [ebp-24h] int v19; // [esp+18h] [ebp-20h] char v20; // [esp+1Ch] [ebp-1Ch] int v21; // [esp+20h] [ebp-18h] int v22; // [esp+24h] [ebp-14h] int v23; // [esp+28h] [ebp-10h] int v24; // [esp+2Ch] [ebp-Ch] char v25; // [esp+30h] [ebp-8h] v2 = this; if ( this[87] ) { v3 = sub_7549E0("%d", *a2); v4 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v2[87], v3); v5 = a2[1]; v22 = a2[2]; v21 = v5; v6 = v4; v7 = a2[3]; v24 = a2[4]; v8 = (_DWORD *)v2[87]; v23 = v7; v25 = 0; sub_4661A0(v8, v6, 1, &v21); v9 = a2[6]; v10 = a2[5]; v17 = a2[7]; v16 = v9; v11 = a2[9]; v15 = v10; v12 = a2[8]; v19 = v11; v13 = (_DWORD *)v2[87]; v18 = v12; v20 = 0; sub_4661A0(v13, v6, 2, &v15); v14 = sub_7549E0("%d", a2[10]); sub_4661A0((_DWORD *)v2[87], v6, 3, v14); sub_464B20((_DWORD *)v2[87], v6, (int)a2); sub_464BA0((_DWORD *)v2[87], v6, 1); sub_464BE0((_DWORD *)v2[87], v6, 200, 255, 200); } } //----- (007067E0) -------------------------------------------------------- void __thiscall sub_7067E0(_DWORD *this, _DWORD *a2, int *a3) { _DWORD *v3; // edi _DWORD *v4; // ecx int v5; // eax int v6; // edx int v7; // eax unsigned int v8; // esi _DWORD *v9; // ecx char *v10; // [esp+8h] [ebp-38h] int v11; // [esp+Ch] [ebp-34h] int v12; // [esp+10h] [ebp-30h] int v13; // [esp+14h] [ebp-2Ch] int v14; // [esp+18h] [ebp-28h] int v15; // [esp+1Ch] [ebp-24h] char v16; // [esp+20h] [ebp-20h] char v17[4]; // [esp+24h] [ebp-1Ch] int v18; // [esp+28h] [ebp-18h] int v19; // [esp+2Ch] [ebp-14h] int v20; // [esp+30h] [ebp-10h] int v21; // [esp+34h] [ebp-Ch] char v22; // [esp+38h] [ebp-8h] v3 = this; v4 = (_DWORD *)this[87]; if ( v4 ) { v11 = *a3; v12 = a3[1]; v13 = a3[2]; v5 = a3[4]; v14 = a3[3]; v15 = v5; *(_DWORD *)v17 = *a2; v18 = a2[1]; v19 = a2[2]; v6 = a2[3]; v7 = a2[4]; v16 = 0; v20 = v6; v21 = v7; v22 = 0; if ( v17[0] ) { if ( (_BYTE)v11 ) { v8 = 0; if ( sub_464700(v4) ) { do { v9 = (_DWORD *)v3[87]; v10 = 0; sub_464B60(v9, v8, &v10); if ( v10 ) { if ( !_stricmp(v17, v10) ) sub_4661A0((_DWORD *)v3[87], v8, 2, &v11); } ++v8; } while ( v8 < sub_464700((_DWORD *)v3[87]) ); } } } } } //----- (007068C0) -------------------------------------------------------- void __thiscall sub_7068C0(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 11: case 21: sub_8F86A0(&unk_BA6B10, this); break; case 13: sub_706680(this); break; case 14: sub_7064A0(this); break; case 15: sub_7064E0(this); break; case 16: sub_706520(this); break; case 17: sub_706560(this); break; case 19: sub_7065A0(); break; case 20: sub_7065D0(); break; case 22: sub_706610(); break; default: return; } } //----- (00706960) -------------------------------------------------------- void __thiscall sub_706960(_DWORD **this, int a2) { _DWORD **v2; // esi struct tm *v3; // ST0C_4 const char *v4; // eax _DWORD *v5; // ecx int v6; // ebx _DWORD *v7; // [esp+8h] [ebp-28h] char v8; // [esp+Ch] [ebp-24h] v2 = this; if ( *(_DWORD *)(a2 + 47) ) { v3 = _localtime32((const __time32_t *)(a2 + 3)); v4 = sub_40A910(1296251015); strftime(&v8, 0x20u, v4, v3); (*(void (__stdcall **)(char *))(*v2[86] + 472))(&v8); } v5 = v2[87]; if ( v5 ) { if ( *(_BYTE *)(a2 + 2) & 1 ) sub_466A50(v5); v6 = 0; if ( *(_DWORD *)(a2 + 47) > 0 ) { v7 = (_DWORD *)(a2 + 51); do { sub_7066D0(v2, v7); v7 += 11; ++v6; } while ( v6 < *(_DWORD *)(a2 + 47) ); } sub_466AF0(v2[87], 0, 0, 1); sub_464D00(v2[87], 4); sub_464DA0(v2[87], 0, 5); sub_464DA0(v2[87], 1u, 5); sub_464DA0(v2[87], 2u, 5); sub_464DA0(v2[87], 3u, 5); sub_465130(v2[87]); sub_4638F0(v2[88], v2[87][84]); } } //----- (00706A90) -------------------------------------------------------- int __cdecl sub_706A90(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x170u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GuildAcademyRankingWin::`vftable'; *(_DWORD *)(v2 + 232) = &GuildAcademyRankingWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; *(_DWORD *)(v2 + 352) = 0; *(_DWORD *)(v2 + 356) = 0; *(_DWORD *)(v2 + 360) = 0; *(_DWORD *)(v2 + 364) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9FFB48: using guessed type void *GuildAcademyRankingWin::`vftable'; // 9FFB64: using guessed type void *GuildAcademyRankingWin::`vftable'; //----- (00706BF0) -------------------------------------------------------- char __thiscall sub_706BF0(volatile LONG **this, volatile LONG **a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax volatile LONG **v24; // eax volatile LONG **v25; // eax volatile LONG *v26; // ecx volatile LONG **v27; // eax int v28; // eax volatile LONG *v29; // eax int v30; // edx const CHAR *v31; // eax volatile LONG *v32; // ecx volatile LONG **v33; // eax int v34; // eax volatile LONG *v35; // eax volatile LONG **v36; // eax volatile LONG **v37; // eax volatile LONG **v38; // eax volatile LONG **v39; // eax volatile LONG **v40; // eax volatile LONG **v41; // eax volatile LONG **v42; // eax volatile LONG **v43; // eax volatile LONG *v44; // eax volatile LONG **v45; // eax int v46; // eax int v47; // eax volatile LONG **v48; // edx int v49; // eax volatile LONG *v50; // eax volatile LONG v51; // edx const CHAR *v52; // eax volatile LONG *v53; // ecx volatile LONG **v54; // eax int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edx const CHAR *v58; // eax volatile LONG *v59; // ecx volatile LONG **v60; // eax int v61; // eax volatile LONG *v62; // eax volatile LONG v63; // edx const CHAR *v64; // eax volatile LONG *v65; // ecx volatile LONG **v66; // eax int v67; // eax volatile LONG *v68; // eax volatile LONG v69; // edx const CHAR *v70; // eax volatile LONG *v71; // ecx volatile LONG **v72; // eax int v73; // eax volatile LONG *v74; // eax volatile LONG v75; // edx const CHAR *v76; // eax volatile LONG *v77; // ecx volatile LONG **v78; // eax int v79; // eax volatile LONG *v80; // eax volatile LONG v81; // edx const CHAR *v82; // eax volatile LONG *v83; // ecx volatile LONG *v84; // eax int v85; // eax volatile LONG *v86; // edi volatile LONG v87; // ebx const CHAR *v88; // eax int v89; // [esp+A8h] [ebp-74h] int v90; // [esp+ACh] [ebp-70h] int v91; // [esp+B0h] [ebp-6Ch] char v92; // [esp+B8h] [ebp-64h] int v93; // [esp+BCh] [ebp-60h] int v94; // [esp+C0h] [ebp-5Ch] int v95; // [esp+C4h] [ebp-58h] int v96; // [esp+C8h] [ebp-54h] int v97; // [esp+CCh] [ebp-50h] int v98; // [esp+D0h] [ebp-4Ch] int v99; // [esp+D4h] [ebp-48h] volatile LONG *v100; // [esp+D8h] [ebp-44h] volatile LONG *v101; // [esp+DCh] [ebp-40h] int v102; // [esp+E0h] [ebp-3Ch] int v103; // [esp+E4h] [ebp-38h] int v104; // [esp+E8h] [ebp-34h] volatile LONG **v105; // [esp+ECh] [ebp-30h] const void *v106[7]; // [esp+F0h] [ebp-2Ch] int v107; // [esp+118h] [ebp-4h] v2 = this; v105 = a2; v104 = 0; v3 = dword_BA6BA0; v107 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademyRanking.nif"); sub_8F66B0(v4, (int)&v104, v3); if ( !v104 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v104 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v99 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v107) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v100 = v9) == 0) ) { LOBYTE(v107) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v104; v107 = -1; if ( v104 && !InterlockedDecrement((volatile LONG *)(v104 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v104, (int)"Frame", (int)&v102, (int)&v103, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, (int)v105, (int)"GuildAcademyRanking", 0) ) { v14 = v102; v15 = v103; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v104, (int)"Theme", (int)&v102, (int)&v103, v16); else v17 = sub_8FB140(v104, (int)"Theme", (int)&v102, (int)&v103, 0); sub_8F3EB0(v102 - v14, v103 - v15, (int)v17, (int)v2, 0, 0); v18 = (volatile LONG *)sub_43D0D0(0x12u); v19 = sub_8FB140(v104, (int)"IconSlot", (int)&v102, (int)&v103, v18); sub_8F3EB0(v102 - v14, v103 - v15, (int)v19, (int)v2, 0, 0); if ( sub_8F71E0(v104, (int)"WinTitle", &v102, &v103, &v98, &v97) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v102 - v14, v103 - v15, v98, v97, v20, (int)v2, 0, 0); v22 = *v21; v105 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); (*((void (__stdcall **)(int *))*v105 + 117))(&dword_AA8D98); v101 = *v105; v23 = sub_40C190(2024588988); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v23); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"ClsNor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"ClsClick"); sub_8FB650(v105, v104, (int)"ClsOver"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 11, 0, 0); v101 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v104 + 72))("HelpLinkNor") ) { v105 = sub_8FB140(v104, (int)"HelpLinkNor", (int)&v102, (int)&v103, v101); sub_8FB650(v105, v104, (int)"HelpLinkClick"); sub_8FB650(v105, v104, (int)"HelpLinkOver"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 22, 0, 0); } v24 = sub_8FB140(v104, (int)"Panel01", (int)&v102, (int)&v103, v100); sub_8F3EB0(v102 - v14, v103 - v15, (int)v24, (int)v2, 0, 0); v25 = sub_8FB140(v104, (int)"Panel03", (int)&v102, (int)&v103, v100); sub_8F3EB0(v102 - v14, v103 - v15, (int)v25, (int)v2, 0, 0); v26 = sub_8FB140(v104, (int)"FinalRecruitDate", (int)&v102, (int)&v103, v100)[9]; v27 = *(volatile LONG ***)(*v26 + 20); v101 = *(volatile LONG **)(*v26 + 24); v105 = v27; v28 = sub_421050(0); v29 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v28, (int)v2, 0, 0); v30 = *v29; v105 = (volatile LONG **)v29; v101 = (volatile LONG *)v30; v31 = sub_40C190(329872242); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v31); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Date", (int)&v102, (int)&v103, v100); sub_8F3EB0(v102 - v14, v103, (int)v105, (int)v2, 0, 0); v32 = v105[9]; v33 = *(volatile LONG ***)(*v32 + 20); v101 = *(volatile LONG **)(*v32 + 24); v105 = v33; v34 = sub_421050(0); v35 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v34, (int)v2, 0, 0); v2[86] = v35; (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 5); (*(void (__stdcall **)(_DWORD))(*v2[86] + 240))(0); v89 = 0; v90 = 0; v91 = 0; v92 = 0; v93 = 0; v94 = 0; v95 = 0; v96 = 0; LOBYTE(v107) = 2; v36 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v89, 1); *v36 = (volatile LONG *)1; v36[1] = (volatile LONG *)v104; v105 = v36; sub_4019E0(v106, "ColumnBarNor"); LOBYTE(v107) = 3; v105 += 18; sub_40B060((int *)v105, v106); LOBYTE(v107) = 2; sub_636A10(v106); sub_4019E0(v106, "ColumnBarClick"); LOBYTE(v107) = 4; sub_40B060((int *)v105, v106); LOBYTE(v107) = 2; sub_636A10(v106); sub_4019E0(v106, "ColumnBarOver"); LOBYTE(v107) = 5; sub_40B060((int *)v105, v106); LOBYTE(v107) = 2; sub_636A10(v106); v37 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v89, 2); v105 = v37; *v37 = (volatile LONG *)2; sub_4019E0(v106, "Column01"); LOBYTE(v107) = 6; sub_40B060((int *)v105 + 18, v106); LOBYTE(v107) = 2; sub_636A10(v106); v105[1] = (volatile LONG *)v104; v38 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v89, 2); v105 = v38; *v38 = (volatile LONG *)2; sub_4019E0(v106, "Column02"); LOBYTE(v107) = 7; sub_40B060((int *)v105 + 18, v106); LOBYTE(v107) = 2; sub_636A10(v106); v39 = v105; v105[1] = (volatile LONG *)v104; *((_BYTE *)v39 + 88) = 1; v40 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v89, 2); v105 = v40; *v40 = (volatile LONG *)2; sub_4019E0(v106, "Column03"); LOBYTE(v107) = 8; sub_40B060((int *)v105 + 18, v106); LOBYTE(v107) = 2; sub_636A10(v106); v41 = v105; v105[1] = (volatile LONG *)v104; *((_BYTE *)v41 + 88) = 1; v42 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v89, 2); v105 = v42; *v42 = (volatile LONG *)2; sub_4019E0(v106, "Column04"); LOBYTE(v107) = 9; sub_40B060((int *)v105 + 18, v106); LOBYTE(v107) = 2; sub_636A10(v106); v105[1] = (volatile LONG *)v104; sub_466680(&v89, 0); v43 = sub_8FB140(v104, (int)"Panel02", (int)&v102, (int)&v103, v100); v44 = sub_466330(v102 - v14, v103 - v15, (int)v43, *(float *)&v2, (int **)&v89, 0, 0); v2[87] = v44; *((_DWORD *)v44 + 88) = 18; sub_465130(v2[87]); v45 = sub_8FB140(v104, (int)"SlideBar_SlideBtnMiddle", (int)&v102, (int)&v103, v100); v46 = sub_464310(v104, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v45, 0, v2); v2[88] = (volatile LONG *)v46; *(_DWORD *)(v46 + 312) = 13; *((_DWORD *)v2[88] + 76) = 1; sub_4638F0(v2[88], *((_DWORD *)v2[87] + 84)); v105 = sub_8FB140(v104, (int)"Title01Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Title01Click"); sub_8FB650(v105, v104, (int)"Title01Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 14, 0, 0); v47 = *v105[9]; v48 = *(volatile LONG ***)(v47 + 20); v101 = *(volatile LONG **)(v47 + 24); v105 = v48; v49 = sub_421050(7); v50 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v49, (int)v2, 0, 0); v51 = *v50; v105 = (volatile LONG **)v50; (*(void (__thiscall **)(volatile LONG *, signed int))(v51 + 488))(v50, 5); v101 = *v105; v52 = sub_40C190(-1683300637); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v52); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Title02Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Title02Click"); sub_8FB650(v105, v104, (int)"Title02Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 15, 0, 0); v53 = v105[9]; v54 = *(volatile LONG ***)(*v53 + 20); v101 = *(volatile LONG **)(*v53 + 24); v105 = v54; v55 = sub_421050(7); v56 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v55, (int)v2, 0, 0); v57 = *v56; v105 = (volatile LONG **)v56; (*(void (__thiscall **)(volatile LONG *, signed int))(v57 + 488))(v56, 5); v101 = *v105; v58 = sub_40C190(-655564723); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v58); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Title03Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Title03Click"); sub_8FB650(v105, v104, (int)"Title03Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 16, 0, 0); v59 = v105[9]; v60 = *(volatile LONG ***)(*v59 + 20); v101 = *(volatile LONG **)(*v59 + 24); v105 = v60; v61 = sub_421050(7); v62 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v61, (int)v2, 0, 0); v63 = *v62; v105 = (volatile LONG **)v62; (*(void (__thiscall **)(volatile LONG *, signed int))(v63 + 488))(v62, 5); v101 = *v105; v64 = sub_40C190(-1833722649); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v64); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Title04Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Title04Click"); sub_8FB650(v105, v104, (int)"Title04Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 17, 0, 0); v65 = v105[9]; v66 = *(volatile LONG ***)(*v65 + 20); v101 = *(volatile LONG **)(*v65 + 24); v105 = v66; v67 = sub_421050(7); v68 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v67, (int)v2, 0, 0); v69 = *v68; v105 = (volatile LONG **)v68; (*(void (__thiscall **)(volatile LONG *, signed int))(v69 + 488))(v68, 5); v101 = *v105; v70 = sub_40C190(-1532128605); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v70); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Btn01Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Btn01Click"); sub_8FB650(v105, v104, (int)"Btn01Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 19, 0, 0); v71 = v105[9]; v72 = *(volatile LONG ***)(*v71 + 20); v101 = *(volatile LONG **)(*v71 + 24); v105 = v72; v73 = sub_421050(7); v74 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v73, (int)v2, 0, 0); v75 = *v74; v105 = (volatile LONG **)v74; (*(void (__thiscall **)(volatile LONG *, signed int))(v75 + 488))(v74, 5); v101 = *v105; v76 = sub_40C190(1435657852); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v76); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Btn02Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Btn02Click"); sub_8FB650(v105, v104, (int)"Btn02Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 20, 0, 0); v77 = v105[9]; v78 = *(volatile LONG ***)(*v77 + 20); v101 = *(volatile LONG **)(*v77 + 24); v105 = v78; v79 = sub_421050(7); v80 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v105, (int)v101, v79, (int)v2, 0, 0); v81 = *v80; v105 = (volatile LONG **)v80; (*(void (__thiscall **)(volatile LONG *, signed int))(v81 + 488))(v80, 5); v101 = *v105; v82 = sub_40C190(1301508213); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v101 + 118))(v105, v82); (*((void (__stdcall **)(_DWORD))*v105 + 60))(0); v105 = sub_8FB140(v104, (int)"Btn03Nor", (int)&v102, (int)&v103, v100); sub_8FB650(v105, v104, (int)"Btn03Click"); sub_8FB650(v105, v104, (int)"Btn03Over"); sub_8FE0F0(v102 - v14, v103 - v15, (int)v105, (int)v2, 21, 0, 0); v83 = v105[9]; v84 = *(volatile LONG **)(*v83 + 20); v101 = *(volatile LONG **)(*v83 + 24); v100 = v84; v85 = sub_421050(7); v86 = sub_8F4A20(v102 - v14, v103 - v15 + 1, (int)v100, (int)v101, v85, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v86 + 488))(v86, 5); v87 = *v86; v88 = sub_40C190(1331644831); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v87 + 472))(v86, v88); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v86 + 240))(v86, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v107) = 1; sub_40AE10((void **)&v89); LOBYTE(v107) = 0; sub_410C00(&v99); v107 = -1; sub_410C00(&v104); result = 1; } else { LOBYTE(v107) = 0; sub_410C00(&v99); v107 = -1; sub_410C00(&v104); result = 0; } } else { LOBYTE(v107) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v104; v107 = -1; if ( !v104 || InterlockedDecrement((volatile LONG *)(v104 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00707A90) -------------------------------------------------------- void *__thiscall sub_707A90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyRankingWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyRankingWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // 9FFB48: using guessed type void *GuildAcademyRankingWin::`vftable'; // 9FFB64: using guessed type void *GuildAcademyRankingWin::`vftable'; //----- (00707AE0) -------------------------------------------------------- int __thiscall sub_707AE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 369) == 0; v1[91] = 0; *((_BYTE *)v1 + 369) = v3; sub_466AF0(v2, 0, v3, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00707B20) -------------------------------------------------------- int __thiscall sub_707B20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 370) == 0; v1[91] = 1; *((_BYTE *)v1 + 370) = v3; sub_466AF0(v2, 1, v3, 0); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00707B60) -------------------------------------------------------- int __thiscall sub_707B60(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 371) == 0; v1[91] = 2; *((_BYTE *)v1 + 371) = v3; sub_466AF0(v2, 2, v3, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00707BA0) -------------------------------------------------------- int __thiscall sub_707BA0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 372) == 0; v1[91] = 3; *((_BYTE *)v1 + 372) = v3; sub_466AF0(v2, 3, v3, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00707BE0) -------------------------------------------------------- int __thiscall sub_707BE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { v3 = *((_BYTE *)v1 + 373) == 0; v1[91] = 4; *((_BYTE *)v1 + 373) = v3; sub_466AF0(v2, 4, v3, 1); result = sub_465130((_DWORD *)v1[87]); } return result; } //----- (00707C20) -------------------------------------------------------- char sub_707C20() { int v1; // [esp+0h] [ebp-4h] v1 = 0; return sub_6F36A0(&off_AB7F2C, 38, 77, &v1, 4u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00707C80) -------------------------------------------------------- char sub_707C80() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildAcademySelect"); return (char)v0; } //----- (00707CB0) -------------------------------------------------------- int __thiscall sub_707CB0(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (00707D30) -------------------------------------------------------- void __thiscall sub_707D30(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int v3; // eax v1 = this; v2 = (_DWORD *)this[88]; if ( v2 ) { v3 = v1[87]; if ( v3 ) { sub_4638F0(v2, *(_DWORD *)(v3 + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[88] + 300); sub_465130((_DWORD *)v1[87]); } } } //----- (00707EB0) -------------------------------------------------------- void __thiscall sub_707EB0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // edi int v5; // eax int v6; // eax _DWORD *v7; // ecx unsigned int v8; // eax const char *v9; // eax char v10[4]; // [esp+4h] [ebp-14h] int v11; // [esp+8h] [ebp-10h] int v12; // [esp+Ch] [ebp-Ch] int v13; // [esp+10h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[31]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { v7 = (_DWORD *)this[29]; if ( v7 ) { if ( !*a3 ) { v13 = 0; v12 = 0; v11 = 0; *(_DWORD *)v10 = 0; v8 = sub_464F50(v7); v9 = (const char *)sub_4650C0((_DWORD *)v4[29], v8, 0); v13 = 0; v12 = 0; v11 = 0; *(_DWORD *)v10 = 0; strncpy(v10, v9, 0x10u); *((_BYTE *)v4 + 136) = 1; sub_70A890(); sub_6F36A0(&off_AB7F2C, 38, 17, v10, 0x10u); } } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00707F60) -------------------------------------------------------- int __thiscall sub_707F60(_DWORD **this) { _DWORD **v1; // esi char *v2; // eax _DWORD **v3; // esi char *v4; // edi int result; // eax _DWORD *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi _DWORD **v9; // esi const CHAR *v10; // edi unsigned int v11; // eax _DWORD *v12; // ST0C_4 char *v13; // eax char *v14; // eax volatile LONG *v15; // eax v1 = this; if ( (unsigned int)sub_680890((unsigned __int8 *)byte_AD9238) < 0x3C ) { v6 = (_DWORD *)sub_715490(); if ( sub_715120(v6) ) { v7 = v1 + 58; v8 = sub_40C190(-97904513); if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v8, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); } else if ( (sub_464F50(v1[87]) & 0x80000000) == 0 ) { v11 = sub_464F50(v1[87]); v12 = sub_4650C0(v1[87], v11, 0); v13 = (char *)sub_40C190(1939395019); v14 = sub_7549E0(v13, v12); v15 = sub_462C30(2, v14); v1[89] = v15; result = (**((int (__stdcall ***)(int))v15 + 58))((int)(v1 + 58)); } else { v9 = v1 + 58; v10 = sub_40C190(-1852537140); if ( v9[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 4))(25, v10, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v9[1] + 20))(25, v10, v9); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v9)[5])(v9, 25, v10, v9); } } else { v2 = (char *)sub_40C190(1854058688); v3 = v1 + 58; v4 = sub_7549E0(v2, 60); if ( v3[1] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } result = ((int (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return result; } //----- (007080E0) -------------------------------------------------------- char __thiscall sub_7080E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx _DWORD **v3; // esi const CHAR *v4; // edi char result; // al unsigned int v6; // eax const char *v7; // eax char v8[4]; // [esp+8h] [ebp-14h] int v9; // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] int v11; // [esp+14h] [ebp-8h] v1 = this; v2 = (_DWORD *)this[87]; v11 = 0; v10 = 0; v9 = 0; *(_DWORD *)v8 = 0; if ( (sub_464F50(v2) & 0x80000000) == 0 ) { v6 = sub_464F50((_DWORD *)v1[87]); v7 = (const char *)sub_4650C0((_DWORD *)v1[87], v6, 0); v11 = 0; v10 = 0; v9 = 0; *(_DWORD *)v8 = 0; strncpy(v8, v7, 0x10u); result = sub_6F36A0(&off_AB7F2C, 38, 73, v8, 0x10u); } else { v3 = (_DWORD **)(v1 + 58); v4 = sub_40C190(-1852537140); if ( v3[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 4))(25, v4, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v3[1] + 20))(25, v4, v3); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v3)[5])(v3, 25, v4, v3); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007081D0) -------------------------------------------------------- void __thiscall sub_7081D0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ecx int v4; // eax int v5; // esi int v6; // edx int v7; // eax int v8; // ecx int v9; // edx unsigned int v10; // ebx int v11; // ecx int v12; // edx _DWORD *v13; // ecx char *v14; // eax char *v15; // eax char *v16; // eax int v17; // [esp+8h] [ebp-34h] int v18; // [esp+Ch] [ebp-30h] int v19; // [esp+10h] [ebp-2Ch] int v20; // [esp+14h] [ebp-28h] int v21; // [esp+18h] [ebp-24h] int v22; // [esp+1Ch] [ebp-20h] char v23; // [esp+20h] [ebp-1Ch] int v24; // [esp+24h] [ebp-18h] int v25; // [esp+28h] [ebp-14h] int v26; // [esp+2Ch] [ebp-10h] int v27; // [esp+30h] [ebp-Ch] char v28; // [esp+34h] [ebp-8h] v2 = this; v3 = (_DWORD *)this[87]; if ( v3 ) { if ( *(_BYTE *)(a2 + 2) & 1 ) sub_466A50(v3); v4 = *(_DWORD *)(a2 + 7); v2[90] = v4; v17 = 0; if ( v4 > 0 ) { v5 = a2 + 35; do { if ( v2[87] ) { v6 = *(_DWORD *)(v5 - 20); v24 = *(_DWORD *)(v5 - 24); v26 = *(_DWORD *)(v5 - 16); v25 = v6; v27 = *(_DWORD *)(v5 - 12); v28 = 0; v7 = ((int (__stdcall *)(int *))loc_466CA0)(&v24); v8 = *(_DWORD *)(v5 - 8); v9 = *(_DWORD *)(v5 - 4); v10 = v7; v20 = *(_DWORD *)v5; v18 = v8; v11 = *(_DWORD *)(v5 + 4); v19 = v9; v12 = *(_DWORD *)(v5 + 8); v21 = v11; v13 = (_DWORD *)v2[87]; v22 = v12; v23 = 0; sub_4661A0(v13, v7, 1, &v18); v14 = sub_7549E0("%d", *(unsigned __int16 *)(v5 + 12)); sub_4661A0((_DWORD *)v2[87], v10, 2, v14); v15 = sub_7549E0("%d", *(unsigned __int16 *)(v5 + 14)); sub_4661A0((_DWORD *)v2[87], v10, 3, v15); v16 = sub_7549E0("%d", *(unsigned __int16 *)(v5 + 16)); sub_4661A0((_DWORD *)v2[87], v10, 4, v16); sub_464B20((_DWORD *)v2[87], v10, v5 - 24); sub_464BA0((_DWORD *)v2[87], v10, 1); sub_464BE0((_DWORD *)v2[87], v10, 200, 200, 255); } v5 += 42; ++v17; } while ( v17 < v2[90] ); } sub_466AF0((_DWORD *)v2[87], 3, 1, 1); sub_464D00((_DWORD *)v2[87], 4); sub_464DA0((_DWORD *)v2[87], 0, 5); sub_464DA0((_DWORD *)v2[87], 1u, 5); sub_464DA0((_DWORD *)v2[87], 2u, 5); sub_464DA0((_DWORD *)v2[87], 3u, 5); sub_464DA0((_DWORD *)v2[87], 4u, 5); sub_465130((_DWORD *)v2[87]); sub_4638F0((_DWORD *)v2[88], *(_DWORD *)(v2[87] + 336)); } } //----- (007083E0) -------------------------------------------------------- void __thiscall sub_7083E0(int this, float a2) { int v2; // esi double v3; // st7 void *v4; // [esp-1Ch] [ebp-24h] int v5; // [esp-18h] [ebp-20h] int v6; // [esp-14h] [ebp-1Ch] int v7; // [esp-10h] [ebp-18h] int v8; // [esp-Ch] [ebp-14h] int v9; // [esp-8h] [ebp-10h] int v10; // [esp-4h] [ebp-Ch] void **v11; // [esp+4h] [ebp-4h] float v12; // [esp+10h] [ebp+8h] v2 = this; if ( *(_BYTE *)(this + 412) != 1 ) { v3 = a2 - *(float *)(this + 416); v11 = &v4; v9 = 15; v12 = v3; v8 = 0; LOBYTE(v4) = 0; sub_4018E0(&v4, "SearchAcademy_ListCoolTime", 0x1Au); if ( (double)(unsigned __int16)sub_747F30(&unk_ACDC6C, v4, v5, v6, v7, v8, v9, v10) <= v12 ) *(_BYTE *)(v2 + 412) = 1; } } //----- (00708450) -------------------------------------------------------- void __thiscall sub_708450(void *this, float a2) { int v2; // esi v2 = (int)this; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4E3710(*(_DWORD **)(v2 + 348), *(_DWORD **)(v2 + 352)); sub_7083E0(v2, a2); } //----- (007084A0) -------------------------------------------------------- void __thiscall sub_7084A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // eax int v4; // edx _DWORD *v5; // eax int v6; // edx int v7; // ST08_4 _DWORD *v8; // eax int v9; // ecx int v10; // ST08_4 _DWORD *v11; // eax int v12; // eax int v13; // ST08_4 _DWORD *v14; // eax int v15; // edx int v16; // [esp+10h] [ebp-168h] void **v17; // [esp+14h] [ebp-164h] void **v18; // [esp+60h] [ebp-118h] int v19; // [esp+A8h] [ebp-D0h] void **v20; // [esp+ACh] [ebp-CCh] void **v21; // [esp+F8h] [ebp-80h] int v22; // [esp+140h] [ebp-38h] _DWORD **v23; // [esp+144h] [ebp-34h] void ***v24; // [esp+148h] [ebp-30h] void *v25; // [esp+14Ch] [ebp-2Ch] int v26; // [esp+15Ch] [ebp-1Ch] unsigned int v27; // [esp+160h] [ebp-18h] int v28; // [esp+174h] [ebp-4h] v2 = this; v23 = (_DWORD **)this; sub_529D40(&v19, 2u, 1); v28 = 0; sub_529AA0(&v19, a2); v3 = sub_52B2F0(&v19, &v25); LOBYTE(v28) = 1; if ( v3[5] >= 0x10u ) v3 = (_DWORD *)*v3; v22 = ((int (__thiscall *)(_DWORD, _DWORD *))loc_466CA0)(v2[87], v3); if ( v27 >= 0x10 ) operator delete(v25); v4 = *(_DWORD *)(v19 + 4); v24 = &v21; *(int *)((char *)&v19 + v4) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v28 = 2; v20 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v20); sub_423AE0(&v20); *(int *)((char *)&v19 + *(_DWORD *)(v19 + 4)) = (int)&std::basic_ostream>::`vftable'; v28 = -1; v21 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v21); sub_529D40(&v19, 2u, 1); v28 = 3; sub_529AA0(&v19, a2 + 7); v5 = sub_52B2F0(&v19, &v25); LOBYTE(v28) = 4; if ( v5[5] >= 0x10u ) v5 = (_DWORD *)*v5; sub_4661A0(v23[87], v22, 1, v5); if ( v27 >= 0x10 ) operator delete(v25); v6 = *(_DWORD *)(v19 + 4); v24 = &v21; *(int *)((char *)&v19 + v6) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v28 = 5; v20 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v20); sub_423AE0(&v20); *(int *)((char *)&v19 + *(_DWORD *)(v19 + 4)) = (int)&std::basic_ostream>::`vftable'; v28 = -1; v21 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v21); sub_529D40(&v19, 2u, 1); v7 = a2[14]; v28 = 6; sub_529500(&v19, v7); v8 = sub_52B2F0(&v19, &v25); LOBYTE(v28) = 7; if ( v8[5] >= 0x10u ) v8 = (_DWORD *)*v8; sub_4661A0(v23[87], v22, 2, v8); if ( v27 >= 0x10 ) operator delete(v25); v9 = *(_DWORD *)(v19 + 4); v24 = &v21; *(int *)((char *)&v19 + v9) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v28 = 8; v20 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v20); sub_423AE0(&v20); *(int *)((char *)&v19 + *(_DWORD *)(v19 + 4)) = (int)&std::basic_ostream>::`vftable'; v28 = -1; v21 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v21); sub_529D40(&v19, 2u, 1); v10 = a2[15]; v28 = 9; sub_529500(&v19, v10); v11 = sub_52B2F0(&v19, &v25); LOBYTE(v28) = 10; if ( v11[5] >= 0x10u ) v11 = (_DWORD *)*v11; sub_4661A0(v23[87], v22, 3, v11); if ( v27 >= 0x10 ) operator delete(v25); v12 = *(_DWORD *)(v19 + 4); v24 = &v21; *(int *)((char *)&v19 + v12) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v28 = 11; v20 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v20); sub_423AE0(&v20); *(int *)((char *)&v19 + *(_DWORD *)(v19 + 4)) = (int)&std::basic_ostream>::`vftable'; v28 = -1; v21 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v21); sub_529D40(&v16, 2u, 1); v13 = a2[16]; v28 = 12; sub_529500(&v16, v13); v14 = sub_52B2F0(&v16, &v25); LOBYTE(v28) = 13; if ( v14[5] >= 0x10u ) v14 = (_DWORD *)*v14; sub_4661A0(v23[87], v22, 4, v14); if ( v27 >= 0x10 ) operator delete(v25); v15 = *(_DWORD *)(v16 + 4); v27 = 15; v26 = 0; LOBYTE(v25) = 0; v24 = &v18; *(int *)((char *)&v16 + v15) = (int)&std::basic_ostringstream,std::allocator>::`vftable'; v28 = 14; v17 = &std::basic_stringbuf,std::allocator>::`vftable'; sub_5284F0((int)&v17); sub_423AE0(&v17); *(int *)((char *)&v16 + *(_DWORD *)(v16 + 4)) = (int)&std::basic_ostream>::`vftable'; v28 = -1; v18 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v18); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; //----- (00708930) -------------------------------------------------------- _DWORD *__thiscall sub_708930(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildAcademySelectWin::`vftable'; v1[58] = &GuildAcademySelectWin::`vftable'; v1[94] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[91] = 0; v1[88] = 0; v1[86] = 0; v1[87] = 0; v1[90] = 0; v1[92] = 0; *((_WORD *)v1 + 186) = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; *((float *)v1 + 104) = 0.0; *((_BYTE *)v1 + 412) = 1; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A000E4: using guessed type void *GuildAcademySelectWin::`vftable'; // A00104: using guessed type void *GuildAcademySelectWin::`vftable'; //----- (007089F0) -------------------------------------------------------- LONG __thiscall sub_7089F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax int v4; // edi v1 = this; *this = &GuildAcademySelectWin::`vftable'; this[58] = &GuildAcademySelectWin::`vftable'; v2 = (_DWORD *)this[109]; if ( v2 ) { sub_5F6400(v2, (_DWORD *)this[110]); operator delete((void *)v1[109]); } v1[109] = 0; v1[110] = 0; v1[111] = 0; v3 = (_DWORD *)v1[105]; if ( v3 ) { sub_5F6400(v3, (_DWORD *)v1[106]); operator delete((void *)v1[105]); } v1[105] = 0; v1[106] = 0; v1[107] = 0; v4 = v1[94]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_8F10F0(v1); } // A000E4: using guessed type void *GuildAcademySelectWin::`vftable'; // A00104: using guessed type void *GuildAcademySelectWin::`vftable'; //----- (00708B00) -------------------------------------------------------- volatile LONG *__cdecl sub_708B00(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1C8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_708930(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00708C30) -------------------------------------------------------- int __thiscall sub_708C30(_DWORD *this) { _DWORD *v1; // esi const void **v2; // eax int v3; // ecx _DWORD *v4; // edi const void **v5; // eax int v6; // ecx _DWORD *v7; // edi int v8; // edi v1 = this; v2 = (const void **)this[106]; v3 = this[105]; if ( (const void **)v3 != v2 ) { v4 = (_DWORD *)sub_70AC30(v2, v2, v3); sub_5F6400(v4, (_DWORD *)v1[106]); v1[106] = v4; } v5 = (const void **)v1[110]; v6 = v1[109]; if ( (const void **)v6 != v5 ) { v7 = (_DWORD *)sub_70AC30(v5, v5, v6); sub_5F6400(v7, (_DWORD *)v1[110]); v1[110] = v7; } sub_466A50((_DWORD *)v1[87]); *(_DWORD *)(v1[87] + 336) = 0; v8 = v1[87]; *(float *)(v8 + 340) = 0.0; *(_DWORD *)(v8 + 344) = (signed int)((double)*(signed int *)(v8 + 336) * 0.0); *(_DWORD *)(v1[87] + 344) = 0; sub_4638F0((_DWORD *)v1[88], 0); v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; return (*(int (__stdcall **)(void *))(*(_DWORD *)v1[94] + 460))(&unk_9FFDA6); } //----- (00708D60) -------------------------------------------------------- char __thiscall sub_708D60(_DWORD *this) { _DWORD *v1; // esi v1 = this; if ( this == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_708C30(v1); return sub_8F86A0(&unk_BA6B10, v1); } // AD01E8: using guessed type int dword_AD01E8; //----- (00708DA0) -------------------------------------------------------- void __thiscall sub_708DA0(int this) { _DWORD *v1; // esi const CHAR *v2; // eax if ( *(_BYTE *)(this + 412) ) { *(_BYTE *)(this + 412) = 0; *(float *)(this + 416) = flt_ACCFCC; sub_708C30((_DWORD *)this); sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); } else { v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) { v2 = sub_4090F0(53309289); sub_492060(v1, (int)v2); } } } // AB7F2C: using guessed type void **off_AB7F2C; // ACCFCC: using guessed type float flt_ACCFCC; //----- (00708E10) -------------------------------------------------------- void __thiscall sub_708E10(unsigned int *this, int a2) { unsigned int *v2; // edi int v3; // edx int v4; // ecx int v5; // edx int v6; // ecx int v7; // eax int v8; // edx int v9; // eax int v10; // ecx void *v11; // [esp+10h] [ebp-80h] int v12; // [esp+20h] [ebp-70h] unsigned int v13; // [esp+24h] [ebp-6Ch] void *v14; // [esp+2Ch] [ebp-64h] int v15; // [esp+3Ch] [ebp-54h] unsigned int v16; // [esp+40h] [ebp-50h] int v17; // [esp+48h] [ebp-48h] int v18; // [esp+4Ch] [ebp-44h] int v19; // [esp+50h] [ebp-40h] int v20; // [esp+54h] [ebp-3Ch] int v21; // [esp+58h] [ebp-38h] int v22; // [esp+5Ch] [ebp-34h] int v23; // [esp+60h] [ebp-30h] char v24; // [esp+64h] [ebp-2Ch] int v25; // [esp+68h] [ebp-28h] int v26; // [esp+6Ch] [ebp-24h] int v27; // [esp+70h] [ebp-20h] int v28; // [esp+74h] [ebp-1Ch] int v29; // [esp+78h] [ebp-18h] char v30; // [esp+7Ch] [ebp-14h] int v31; // [esp+8Ch] [ebp-4h] v2 = this; v13 = 15; v12 = 0; LOBYTE(v11) = 0; v16 = 15; v15 = 0; LOBYTE(v14) = 0; v31 = 0; sub_4018E0(&v11, (void *)&byte_9A8050, 0); sub_4018E0(&v14, (void *)&byte_9A8050, 0); if ( a2 ) { v3 = *(_DWORD *)(a2 + 8); v4 = *(_DWORD *)(a2 + 4); v20 = *(_DWORD *)a2; v23 = *(_DWORD *)(a2 + 12); v22 = v3; v21 = v4; v24 = 0; sub_4018E0(&v11, &v20, strlen((const char *)&v20)); v5 = *(_DWORD *)(a2 + 16); v6 = *(_DWORD *)(a2 + 24); v26 = *(_DWORD *)(a2 + 20); v7 = *(_DWORD *)(a2 + 32); v25 = v5; v8 = *(_DWORD *)(a2 + 28); v29 = v7; v28 = v8; v27 = v6; v30 = 0; LOBYTE(v29) = 0; sub_4018E0(&v14, &v25, strlen((const char *)&v25)); v9 = *(unsigned __int16 *)(a2 + 38); v10 = *(unsigned __int16 *)(a2 + 40); v17 = *(unsigned __int16 *)(a2 + 36); v18 = v9; v19 = v10; } sub_52BA90(v2 + 105, (unsigned int)&v11); if ( v16 >= 0x10 ) operator delete(v14); v16 = 15; v15 = 0; LOBYTE(v14) = 0; if ( v13 >= 0x10 ) operator delete(v11); } //----- (00708FC0) -------------------------------------------------------- char __thiscall sub_708FC0(volatile LONG **this, volatile LONG **a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax volatile LONG **v24; // eax volatile LONG **v25; // eax volatile LONG **v26; // eax volatile LONG **v27; // eax volatile LONG **v28; // eax volatile LONG **v29; // eax volatile LONG **v30; // eax volatile LONG **v31; // eax volatile LONG **v32; // eax volatile LONG **v33; // eax volatile LONG *v34; // eax volatile LONG **v35; // eax int v36; // eax volatile LONG **v37; // eax int v38; // ecx int (*v39)(void); // eax int v40; // eax int v41; // eax int v42; // eax volatile LONG **v43; // edx int v44; // eax volatile LONG *v45; // eax volatile LONG v46; // edx const CHAR *v47; // eax volatile LONG *v48; // ecx volatile LONG **v49; // eax int v50; // eax volatile LONG *v51; // eax volatile LONG v52; // edx const CHAR *v53; // eax volatile LONG *v54; // ecx volatile LONG **v55; // eax int v56; // eax volatile LONG *v57; // eax volatile LONG v58; // edx const CHAR *v59; // eax volatile LONG *v60; // ecx volatile LONG **v61; // eax int v62; // eax volatile LONG *v63; // eax volatile LONG v64; // edx const CHAR *v65; // eax volatile LONG *v66; // ecx volatile LONG **v67; // eax int v68; // eax volatile LONG *v69; // eax volatile LONG v70; // edx const CHAR *v71; // eax volatile LONG *v72; // ecx volatile LONG **v73; // eax int v74; // eax volatile LONG *v75; // eax volatile LONG v76; // edx const CHAR *v77; // eax volatile LONG *v78; // ecx volatile LONG **v79; // eax int v80; // eax volatile LONG *v81; // eax volatile LONG v82; // edx const CHAR *v83; // eax volatile LONG *v84; // ecx volatile LONG **v85; // eax int v86; // eax volatile LONG *v87; // eax volatile LONG v88; // edx const CHAR *v89; // eax volatile LONG *v90; // ecx volatile LONG *v91; // eax int v92; // eax volatile LONG *v93; // eax volatile LONG v94; // edx const CHAR *v95; // eax volatile LONG *v96; // eax volatile LONG *v97; // ecx volatile LONG *v98; // eax int v99; // eax volatile LONG *v100; // eax volatile LONG v101; // edx const CHAR *v102; // eax volatile LONG *v103; // ecx volatile LONG *v104; // eax int v105; // eax volatile LONG *v106; // edi volatile LONG v107; // ebx const CHAR *v108; // eax int v109; // [esp+D4h] [ebp-74h] int v110; // [esp+D8h] [ebp-70h] int v111; // [esp+DCh] [ebp-6Ch] int v112; // [esp+E0h] [ebp-68h] int v113; // [esp+E4h] [ebp-64h] char v114; // [esp+ECh] [ebp-5Ch] int v115; // [esp+F0h] [ebp-58h] int v116; // [esp+F4h] [ebp-54h] int v117; // [esp+F8h] [ebp-50h] int v118; // [esp+FCh] [ebp-4Ch] int v119; // [esp+100h] [ebp-48h] volatile LONG *v120; // [esp+104h] [ebp-44h] volatile LONG *v121; // [esp+108h] [ebp-40h] int v122; // [esp+10Ch] [ebp-3Ch] int v123; // [esp+110h] [ebp-38h] int v124; // [esp+114h] [ebp-34h] volatile LONG **v125; // [esp+118h] [ebp-30h] const void *v126[7]; // [esp+11Ch] [ebp-2Ch] int v127; // [esp+144h] [ebp-4h] v2 = this; v125 = a2; v124 = 0; v3 = dword_BA6BA0; v127 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademySelect.nif"); sub_8F66B0(v4, (int)&v124, v3); if ( !v124 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v124 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v119 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v127) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v120 = v9) == 0) ) { LOBYTE(v127) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v124; v127 = -1; if ( v124 && !InterlockedDecrement((volatile LONG *)(v124 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v124, (int)"Frame", (int)&v122, (int)&v123, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, (int)v125, (int)"GuildAcademySelect", 0) ) { v14 = v122; v15 = v123; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v124, (int)"Theme", (int)&v122, (int)&v123, v16); else v17 = sub_8FB140(v124, (int)"Theme", (int)&v122, (int)&v123, 0); sub_8F3EB0(v122 - v14, v123 - v15, (int)v17, (int)v2, 0, 0); v18 = (volatile LONG *)sub_43D0D0(0x12u); v19 = sub_8FB140(v124, (int)"IconSlot", (int)&v122, (int)&v123, v18); sub_8F3EB0(v122 - v14, v123 - v15, (int)v19, (int)v2, 0, 0); if ( sub_8F71E0(v124, (int)"WinTitle", &v122, &v123, &v110, &v109) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v122 - v14, v123 - v15, v110, v109, v20, (int)v2, 0, 0); v22 = *v21; v125 = (volatile LONG **)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); (*((void (__stdcall **)(int *))*v125 + 117))(&dword_AA8D98); v121 = *v125; v23 = sub_40C190(915567012); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v23); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"ClsNor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"ClsClick"); sub_8FB650(v125, v124, (int)"ClsOver"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 11, 0, 0); v121 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v124 + 72))("HelpLinkNor") ) { v125 = sub_8FB140(v124, (int)"HelpLinkNor", (int)&v122, (int)&v123, v121); sub_8FB650(v125, v124, (int)"HelpLinkClick"); sub_8FB650(v125, v124, (int)"HelpLinkOver"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 25, 0, 0); } v24 = sub_8FB140(v124, (int)"Plane", (int)&v122, (int)&v123, v120); sub_8F3EB0(v122 - v14, v123 - v15, (int)v24, (int)v2, 0, 0); v111 = 0; v112 = 0; v113 = 0; v114 = 0; v115 = 0; v116 = 0; v117 = 0; v118 = 0; LOBYTE(v127) = 2; v25 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 1); *v25 = (volatile LONG *)1; v25[1] = (volatile LONG *)v124; v125 = v25; sub_4019E0(v126, "ColumnBarNor"); LOBYTE(v127) = 3; v125 += 18; sub_40B060((int *)v125, v126); LOBYTE(v127) = 2; sub_636A10(v126); sub_4019E0(v126, "ColumnBarClick"); LOBYTE(v127) = 4; sub_40B060((int *)v125, v126); LOBYTE(v127) = 2; sub_636A10(v126); sub_4019E0(v126, "ColumnBarOver"); LOBYTE(v127) = 5; sub_40B060((int *)v125, v126); LOBYTE(v127) = 2; sub_636A10(v126); v26 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 2); v125 = v26; *v26 = (volatile LONG *)2; sub_4019E0(v126, "Column01"); LOBYTE(v127) = 6; sub_40B060((int *)v125 + 18, v126); LOBYTE(v127) = 2; sub_636A10(v126); v27 = v125; v125[1] = (volatile LONG *)v124; *((_BYTE *)v27 + 88) = 1; v28 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 2); v125 = v28; *v28 = (volatile LONG *)2; sub_4019E0(v126, "Column02"); LOBYTE(v127) = 7; sub_40B060((int *)v125 + 18, v126); LOBYTE(v127) = 2; sub_636A10(v126); v29 = v125; v125[1] = (volatile LONG *)v124; *((_BYTE *)v29 + 88) = 1; v30 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 2); v125 = v30; *v30 = (volatile LONG *)2; sub_4019E0(v126, "Column03"); LOBYTE(v127) = 8; sub_40B060((int *)v125 + 18, v126); LOBYTE(v127) = 2; sub_636A10(v126); v125[1] = (volatile LONG *)v124; v31 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 2); v125 = v31; *v31 = (volatile LONG *)2; sub_4019E0(v126, "Column04"); LOBYTE(v127) = 9; sub_40B060((int *)v125 + 18, v126); LOBYTE(v127) = 2; sub_636A10(v126); v125[1] = (volatile LONG *)v124; v32 = (volatile LONG **)((int (__thiscall *)(int *, signed int))loc_466F40)(&v111, 2); v125 = v32; *v32 = (volatile LONG *)2; sub_4019E0(v126, "Column05"); LOBYTE(v127) = 10; sub_40B060((int *)v125 + 18, v126); LOBYTE(v127) = 2; sub_636A10(v126); v125[1] = (volatile LONG *)v124; v115 = 5; v116 = 0; sub_466680(&v111, 0); v33 = sub_8FB140(v124, (int)"Plane01", (int)&v122, (int)&v123, v120); v34 = sub_466330(v122 - v14, v123 - v15, (int)v33, *(float *)&v2, (int **)&v111, 0, 0); v2[87] = v34; *((_DWORD *)v34 + 89) = 23; *((_DWORD *)v2[87] + 88) = 24; sub_465130(v2[87]); sub_40AE60(&v111); sub_466680(&v111, 0); v35 = sub_8FB140(v124, (int)"SlideBar_SlideBtnMiddle", (int)&v122, (int)&v123, v120); v36 = sub_464310(v124, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v35, 0, v2); v2[88] = (volatile LONG *)v36; *(_DWORD *)(v36 + 312) = 17; *((_DWORD *)v2[88] + 76) = 1; v37 = (volatile LONG **)*v2[88]; v38 = (int)v2[88]; v125 = v37; v39 = (int (*)(void))v37[42]; v121 = (volatile LONG *)v38; v40 = v39(); v41 = (*(int (__stdcall **)(int))(*v121 + 164))(v40); ((void (__thiscall *)(volatile LONG *, int))v125[77])(v2[88], v41); v125 = sub_8FB140(v124, (int)"Title01Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Title01Click"); sub_8FB650(v125, v124, (int)"Title01Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 18, 0, 0); v42 = *v125[9]; v43 = *(volatile LONG ***)(v42 + 20); v121 = *(volatile LONG **)(v42 + 24); v125 = v43; v44 = sub_421050(7); v45 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v44, (int)v2, 0, 0); v46 = *v45; v125 = (volatile LONG **)v45; (*(void (__thiscall **)(volatile LONG *, signed int))(v46 + 488))(v45, 5); v121 = *v125; v47 = sub_40C190(1319409301); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v47); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Title02Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Title02Click"); sub_8FB650(v125, v124, (int)"Title02Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 19, 0, 0); v48 = v125[9]; v49 = *(volatile LONG ***)(*v48 + 20); v121 = *(volatile LONG **)(*v48 + 24); v125 = v49; v50 = sub_421050(7); v51 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v50, (int)v2, 0, 0); v52 = *v51; v125 = (volatile LONG **)v51; (*(void (__thiscall **)(volatile LONG *, signed int))(v52 + 488))(v51, 5); v121 = *v125; v53 = sub_40C190(-1833722649); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v53); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Title03Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Title03Click"); sub_8FB650(v125, v124, (int)"Title03Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 20, 0, 0); v54 = v125[9]; v55 = *(volatile LONG ***)(*v54 + 20); v121 = *(volatile LONG **)(*v54 + 24); v125 = v55; v56 = sub_421050(7); v57 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v56, (int)v2, 0, 0); v58 = *v57; v125 = (volatile LONG **)v57; (*(void (__thiscall **)(volatile LONG *, signed int))(v58 + 488))(v57, 5); v121 = *v125; v59 = sub_40C190(1971748777); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v59); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Title04Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Title04Click"); sub_8FB650(v125, v124, (int)"Title04Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 21, 0, 0); v60 = v125[9]; v61 = *(volatile LONG ***)(*v60 + 20); v121 = *(volatile LONG **)(*v60 + 24); v125 = v61; v62 = sub_421050(7); v63 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v62, (int)v2, 0, 0); v64 = *v63; v125 = (volatile LONG **)v63; (*(void (__thiscall **)(volatile LONG *, signed int))(v64 + 488))(v63, 5); v121 = *v125; v65 = sub_40C190(-2036079644); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v65); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Title05Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Title05Click"); sub_8FB650(v125, v124, (int)"Title05Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 22, 0, 0); v66 = v125[9]; v67 = *(volatile LONG ***)(*v66 + 20); v121 = *(volatile LONG **)(*v66 + 24); v125 = v67; v68 = sub_421050(7); v69 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v68, (int)v2, 0, 0); v70 = *v69; v125 = (volatile LONG **)v69; (*(void (__thiscall **)(volatile LONG *, signed int))(v70 + 488))(v69, 5); v121 = *v125; v71 = sub_40C190(-364434628); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v71); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Btn01Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Btn01Click"); sub_8FB650(v125, v124, (int)"Btn01Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 12, 0, 0); v72 = v125[9]; v73 = *(volatile LONG ***)(*v72 + 20); v121 = *(volatile LONG **)(*v72 + 24); v125 = v73; v74 = sub_421050(7); v75 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v74, (int)v2, 0, 0); v76 = *v75; v125 = (volatile LONG **)v75; (*(void (__thiscall **)(volatile LONG *, signed int))(v76 + 488))(v75, 5); v121 = *v125; v77 = sub_40C190(-800052173); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v77); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Btn02Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Btn02Click"); sub_8FB650(v125, v124, (int)"Btn02Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 13, 0, 0); v78 = v125[9]; v79 = *(volatile LONG ***)(*v78 + 20); v121 = *(volatile LONG **)(*v78 + 24); v125 = v79; v80 = sub_421050(7); v81 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v80, (int)v2, 0, 0); v82 = *v81; v125 = (volatile LONG **)v81; (*(void (__thiscall **)(volatile LONG *, signed int))(v82 + 488))(v81, 5); v121 = *v125; v83 = sub_40C190(1945289397); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v83); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Btn03Nor", (int)&v122, (int)&v123, v120); sub_8FB650(v125, v124, (int)"Btn03Click"); sub_8FB650(v125, v124, (int)"Btn03Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 14, 0, 0); v84 = v125[9]; v85 = *(volatile LONG ***)(*v84 + 20); v121 = *(volatile LONG **)(*v84 + 24); v125 = v85; v86 = sub_421050(7); v87 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v125, (int)v121, v86, (int)v2, 0, 0); v88 = *v87; v125 = (volatile LONG **)v87; (*(void (__thiscall **)(volatile LONG *, signed int))(v88 + 488))(v87, 5); v121 = *v125; v89 = sub_40C190(590424390); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v89); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v90 = sub_8FB140(v124, (int)"Text01", (int)&v122, (int)&v123, v120)[9]; v91 = *(volatile LONG **)(*v90 + 20); v121 = *(volatile LONG **)(*v90 + 24); v120 = v91; v92 = sub_421050(0); v93 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v120, (int)v121, v92, (int)v2, 0, 0); v94 = *v93; v125 = (volatile LONG **)v93; (*(void (__thiscall **)(volatile LONG *, signed int))(v94 + 488))(v93, 5); v121 = *v125; v95 = sub_4090F0(187721062); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v95); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Search_Input", (int)&v122, (int)&v123, 0); sub_8F3EB0(v122, v123, (int)v125, (int)v2, 0, 0); v96 = sub_45A900( v122, v123 + 2, *(_DWORD *)(*v125[9] + 20), *(_DWORD *)(*v125[9] + 24), (int)v2, 1342177280, 20, 1, 1, 0, 1); sub_56FF80(v2 + 94, (int)v96); sub_459B60(v2[94], 1); v125 = sub_8FB140(v124, (int)"SearchBtnNor", (int)&v122, (int)&v123, 0); sub_8FB650(v125, v124, (int)"SearchBtnClick"); sub_8FB650(v125, v124, (int)"SearchBtnOver"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 26, 0, 0); v97 = v125[9]; v98 = *(volatile LONG **)(*v97 + 20); v121 = *(volatile LONG **)(*v97 + 24); v120 = v98; v99 = sub_421050(0); v100 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v120, (int)v121, v99, (int)v2, 0, 0); v101 = *v100; v125 = (volatile LONG **)v100; (*(void (__thiscall **)(volatile LONG *, signed int))(v101 + 488))(v100, 5); v121 = *v125; v102 = sub_4090F0(1735876473); (*((void (__thiscall **)(volatile LONG **, const CHAR *))v121 + 118))(v125, v102); (*((void (__stdcall **)(_DWORD))*v125 + 60))(0); v125 = sub_8FB140(v124, (int)"Btn04Nor", (int)&v122, (int)&v123, 0); sub_8FB650(v125, v124, (int)"Btn04Click"); sub_8FB650(v125, v124, (int)"Btn04Over"); sub_8FE0F0(v122 - v14, v123 - v15, (int)v125, (int)v2, 27, 0, 0); v103 = v125[9]; v104 = *(volatile LONG **)(*v103 + 20); v121 = *(volatile LONG **)(*v103 + 24); v120 = v104; v105 = sub_421050(0); v106 = sub_8F4A20(v122 - v14, v123 - v15 + 1, (int)v120, (int)v121, v105, (int)v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v106 + 488))(v106, 5); v107 = *v106; v108 = sub_4090F0(1920115437); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v107 + 472))(v106, v108); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v106 + 240))(v106, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v127) = 1; sub_40AE10((void **)&v111); LOBYTE(v127) = 0; sub_410C00(&v119); v127 = -1; sub_410C00(&v124); result = 1; } else { LOBYTE(v127) = 0; sub_410C00(&v119); v127 = -1; sub_410C00(&v124); result = 0; } } else { LOBYTE(v127) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v124; v127 = -1; if ( !v124 || InterlockedDecrement((volatile LONG *)(v124 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0070A160) -------------------------------------------------------- int __thiscall sub_70A160(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // ecx char *v4; // ebx _DWORD *v5; // eax int v6; // esi unsigned int v7; // eax int v8; // esi void (__thiscall ***v9)(_DWORD, signed int); // esi _BYTE *v10; // eax char *v11; // eax char *v12; // edx char v13; // cl unsigned __int8 *v14; // esi int v15; // eax char *v16; // edx char v17; // cl int v18; // ebx unsigned int v19; // eax int v20; // esi void (__thiscall ***v21)(_DWORD, signed int); // esi int v22; // ecx int v23; // esi unsigned __int8 *v24; // ebx unsigned int v25; // edx int v26; // esi int v27; // ebx _DWORD *v28; // esi const CHAR *v29; // eax _DWORD *v31; // [esp+1Ch] [ebp-108h] void **v32; // [esp+20h] [ebp-104h] char v33; // [esp+24h] [ebp-100h] void **v34; // [esp+30h] [ebp-F4h] _DWORD *v35; // [esp+34h] [ebp-F0h] _DWORD *v36; // [esp+40h] [ebp-E4h] _DWORD *v37; // [esp+44h] [ebp-E0h] _DWORD *v38; // [esp+50h] [ebp-D4h] _DWORD *v39; // [esp+54h] [ebp-D0h] int *v40; // [esp+58h] [ebp-CCh] int v41; // [esp+5Ch] [ebp-C8h] int v42; // [esp+60h] [ebp-C4h] void **v43; // [esp+6Ch] [ebp-B8h] int v44; // [esp+78h] [ebp-ACh] int *v45; // [esp+A4h] [ebp-80h] int v46; // [esp+A8h] [ebp-7Ch] char v47; // [esp+ACh] [ebp-78h] int v48; // [esp+B4h] [ebp-70h] char v49; // [esp+B8h] [ebp-6Ch] int v50; // [esp+BCh] [ebp-68h] char v51; // [esp+C0h] [ebp-64h] int v52; // [esp+C4h] [ebp-60h] unsigned int v53; // [esp+C8h] [ebp-5Ch] int v54; // [esp+CCh] [ebp-58h] void *v55; // [esp+D0h] [ebp-54h] char v56[32]; // [esp+D4h] [ebp-50h] char v57[32]; // [esp+F4h] [ebp-30h] int v58; // [esp+120h] [ebp-4h] v1 = this; v52 = 0; v2 = this[105]; v3 = this[106] - v2; v53 = 0; if ( v3 / 68 ) { v54 = 0; do { v4 = (char *)(v2 + v54); v31 = &unk_9C6DA8; v52 |= 1u; v58 = 0; v43 = &std::basic_ostream>::`vftable'; sub_423A10(&v43); v45 = (int *)&v32; v46 = 0; v5 = sub_422FF0(&v43, &v50); v58 = 2; v55 = (void *)sub_4248C0((int)v5); LOBYTE(v58) = 1; if ( v50 ) { v6 = v50; v48 = v50; std::_Lockit::_Lockit((std::_Lockit *)&v49, 0); v7 = *(_DWORD *)(v6 + 4); if ( v7 && v7 < 0xFFFFFFFF ) *(_DWORD *)(v6 + 4) = v7 - 1; v8 = -(*(_DWORD *)(v6 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v49); v9 = (void (__thiscall ***)(_DWORD, signed int))(v48 & v8); if ( v9 ) (**v9)(v9, 1); } v47 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v55 + 24))(32); if ( !v45 ) sub_405C10(&v43, v44 | 4, 0); *(_DWORD **)((char *)&v31 + v31[1]) = &std::basic_ostringstream,std::allocator>::`vftable'; v58 = 3; sub_423F50(&v32); v32 = &std::basic_stringbuf,std::allocator>::`vftable'; v41 = 0; v42 = 4; v58 = 5; v10 = sub_406190(&v31, " "); sub_529AA0(v10, v4); if ( *((_DWORD *)v4 + 5) < 0x10u ) v11 = v4; else v11 = *(char **)v4; v12 = (char *)(v56 - v11); do { v13 = *v11; v11[(_DWORD)v12] = *v11; ++v11; } while ( v13 ); _strlwr(v56); _strlwr((char *)v1 + 380); v14 = _mbsstr((const unsigned __int8 *)v56, (const unsigned __int8 *)v1 + 380); v15 = (int)(v4 + 28); if ( *((_DWORD *)v4 + 12) >= 0x10u ) v15 = *(_DWORD *)v15; v16 = &v57[-v15]; do { v17 = *(_BYTE *)v15; v16[v15] = *(_BYTE *)v15; ++v15; } while ( v17 ); _strlwr(v57); if ( v14 || _mbsstr((const unsigned __int8 *)v57, (const unsigned __int8 *)v1 + 380) ) sub_52BA90(v1 + 109, (unsigned int)v4); *(_DWORD **)((char *)&v31 + v31[1]) = &std::basic_ostringstream,std::allocator>::`vftable'; v58 = 6; v32 = &std::basic_stringbuf,std::allocator>::`vftable'; if ( v42 & 1 ) operator delete(*v34); *v34 = 0; *v36 = 0; *v38 = 0; *v35 = 0; *v37 = 0; *v39 = 0; v42 &= 0xFFFFFFFE; v41 = 0; v32 = &std::basic_streambuf>::`vftable'; LOBYTE(v58) = 7; v55 = v40; if ( v40 ) { v18 = *v40; if ( *v40 ) { std::_Lockit::_Lockit((std::_Lockit *)&v51, 0); v19 = *(_DWORD *)(v18 + 4); if ( v19 && v19 < 0xFFFFFFFF ) *(_DWORD *)(v18 + 4) = v19 - 1; v20 = -(*(_DWORD *)(v18 + 4) == 0); std::_Lockit::~_Lockit((std::_Lockit *)&v51); v21 = (void (__thiscall ***)(_DWORD, signed int))(v18 & v20); if ( v21 ) (**v21)(v21, 1); } operator delete(v55); } LOBYTE(v58) = 6; std::_Mutex::~_Mutex((std::_Mutex *)&v33); *(_DWORD **)((char *)&v31 + v31[1]) = &std::basic_ostream>::`vftable'; v58 = -1; v43 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v43); v2 = v1[105]; v22 = v1[106]; v54 += 68; ++v53; } while ( v53 < (v22 - v2) / 68 ); } v23 = v1[110]; v24 = (unsigned __int8 *)v1[109]; LOBYTE(v55) = *((_BYTE *)v1 + 452); sub_70BCB0(v24, v23, (v23 - (signed int)v24) / 68, (int)v55); v25 = (signed int)((unsigned __int64)(2021161081i64 * (v1[110] - v1[109])) >> 32) >> 5; v26 = v25 + (v25 >> 31); if ( v26 ) { sub_466A50((_DWORD *)v1[87]); if ( v26 ) { v27 = 0; do { sub_7084A0(v1, (_DWORD *)(v27 + v1[109])); v27 += 68; --v26; } while ( v26 ); } } else { v28 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v28 ) { v29 = sub_4090F0(-1244540504); sub_492060(v28, (int)v29); } } return sub_465130((_DWORD *)v1[87]); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9AB514: using guessed type void *std::basic_streambuf>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9C6CEC: using guessed type void *std::basic_stringbuf,std::allocator>::`vftable'; // 9C6D9C: using guessed type void *std::basic_ostringstream,std::allocator>::`vftable'; // 70A160: using guessed type char var_50[32]; // 70A160: using guessed type char var_30[32]; //----- (0070A5F0) -------------------------------------------------------- void __thiscall sub_70A5F0(_DWORD **this) { _DWORD **v1; // edi const char *v2; // ebx WPARAM v3; // esi _DWORD *v4; // ebx const CHAR *v5; // eax const CHAR *v6; // eax const void **v7; // eax int v8; // ecx _DWORD *v9; // esi _DWORD *v10; // esi char *v11; // eax int v12; // esi char v13; // cl float *v14; // esi BYTE TestChar; // [esp+Ch] [ebp-4h] v1 = this; v2 = (const char *)(*(int (**)(void))(*this[94] + 452))(); v3 = strlen(v2); sub_90E410((HWND *)v1[94][75], v3); TestChar = *v2; v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v4 ) { if ( IsDBCSLeadByte(TestChar) ) { if ( v3 < 2 ) { v5 = sub_4090F0(-1764700746); sub_492060(v4, (int)v5); return; } } else if ( v3 < 1 ) { v6 = sub_4090F0(-1764700746); sub_492060(v4, (int)v6); return; } v7 = (const void **)v1[110]; v8 = (int)v1[109]; if ( (const void **)v8 != v7 ) { v9 = (_DWORD *)sub_70AC30(v7, v7, v8); sub_5F6400(v9, v1[110]); v1[110] = v9; } v10 = v1 + 95; *v10 = 0; v10[1] = 0; v10[2] = 0; v10[3] = 0; v10[4] = 0; v10[5] = 0; v10[6] = 0; v10[7] = 0; v11 = (char *)(*(int (**)(void))(*v1[94] + 452))(); v12 = (char *)(v1 + 95) - v11; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); sub_4638F0(v1[88], 0); v1[87][84] = 0; v14 = (float *)v1[87]; v14[85] = 0.0; *((_DWORD *)v14 + 86) = (signed int)((double)*((signed int *)v14 + 84) * 0.0); v1[87][86] = 0; sub_70A160(v1); } } //----- (0070A780) -------------------------------------------------------- void __thiscall sub_70A780(_DWORD *this, int a2, int a3) { switch ( a2 ) { case 11: sub_708D60(this); break; case 12: sub_707F60((_DWORD **)this); break; case 13: sub_7080E0(this); break; case 14: sub_707C20(); break; case 17: sub_707D30(this); break; case 18: sub_707AE0(this); break; case 19: sub_707B20(this); break; case 20: sub_707B60(this); break; case 21: sub_707BA0(this); break; case 22: sub_707BE0(this); break; case 25: sub_707C80(); break; case 26: sub_70A5F0((_DWORD **)this); break; case 27: sub_708DA0((int)this); break; default: return; } } //----- (0070A850) -------------------------------------------------------- void __thiscall sub_70A850(_DWORD *this, int a2, int a3) { _DWORD **v3; // esi int *v4; // edi int v5; // ebx int v6; // eax v3 = (_DWORD **)this; v4 = (int *)this[94]; v5 = *v4; v6 = (*(int (__thiscall **)(_DWORD))(*v4 + 456))(this[94]); (*(void (__thiscall **)(int *, int))(v5 + 460))(v4, v6); (*(void (**)(void))(*v3[94] + 480))(); sub_70A5F0(v3); } //----- (0070A890) -------------------------------------------------------- void ***sub_70A890() { void ***result; // eax void ***v1; // eax result = (void ***)dword_B9E418; if ( !dword_B9E418 ) { v1 = (void ***)operator new(0x5Cu); if ( v1 ) { result = sub_713180(v1); dword_B9E418 = (int)result; } else { result = 0; dword_B9E418 = 0; } } return result; } // B9E418: using guessed type int dword_B9E418; //----- (0070A910) -------------------------------------------------------- bool __stdcall sub_70A910(int a1, _DWORD *a2) { unsigned int v2; // ecx unsigned int v3; // eax unsigned int v5; // eax unsigned int v6; // ecx bool v7; // cf unsigned __int8 *v8; // eax v2 = a2[15]; v3 = *(_DWORD *)(a1 + 60); if ( v3 < v2 ) return 0; if ( v3 != v2 ) return 1; v5 = *(_DWORD *)(a1 + 56); v6 = a2[14]; v7 = v6 < v5; if ( v6 == v5 ) { if ( *(_DWORD *)(a1 + 64) == a2[16] ) { v8 = (unsigned __int8 *)(a2[5] < 0x10u ? a2 : *a2); if ( sub_40C2F0((unsigned __int8 *)a1, 0, *(_DWORD *)(a1 + 16), v8, a2[4]) < 0 ) return sub_40C420(a1, (int)a2) != 0; } v7 = a2[16] < *(_DWORD *)(a1 + 64); } return v7; } //----- (0070A990) -------------------------------------------------------- void __cdecl sub_70A990(int a1, int a2) { int v2; // eax int v3; // ecx void *v4; // [esp+10h] [ebp-54h] unsigned int v5; // [esp+24h] [ebp-40h] void *v6; // [esp+2Ch] [ebp-38h] int v7; // [esp+3Ch] [ebp-28h] unsigned int v8; // [esp+40h] [ebp-24h] int v9; // [esp+48h] [ebp-1Ch] int v10; // [esp+4Ch] [ebp-18h] int v11; // [esp+50h] [ebp-14h] int v12; // [esp+60h] [ebp-4h] sub_5F6310((int)&v4, a1); v12 = 0; sub_4017F0((const void **)a1, (const void **)a2, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(a1 + 28), (const void **)(a2 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(a1 + 56) = *(_DWORD *)(a2 + 56); *(_DWORD *)(a1 + 60) = *(_DWORD *)(a2 + 60); *(_DWORD *)(a1 + 64) = *(_DWORD *)(a2 + 64); sub_4017F0((const void **)a2, (const void **)&v4, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(a2 + 28), (const void **)&v6, 0, (void *)0xFFFFFFFF); v2 = v10; v3 = v11; *(_DWORD *)(a2 + 56) = v9; *(_DWORD *)(a2 + 60) = v2; *(_DWORD *)(a2 + 64) = v3; if ( v8 >= 0x10 ) operator delete(v6); v8 = 15; v7 = 0; LOBYTE(v6) = 0; if ( v5 >= 0x10 ) operator delete(v4); } //----- (0070AA90) -------------------------------------------------------- int __cdecl sub_70AA90(int a1, int a2, int a3, int a4) { int v4; // edi int v5; // eax int v6; // ecx unsigned int v7; // eax int v8; // esi unsigned int v9; // ecx unsigned int v10; // eax unsigned int v11; // ecx bool v12; // cf unsigned __int8 *v13; // eax unsigned __int8 *v14; // eax bool v15; // al int v16; // edi int v17; // esi int result; // eax int v19; // [esp+18h] [ebp+Ch] v4 = a2; v5 = (a2 - 1) / 2; v19 = (a2 - 1) / 2; if ( a3 < v4 ) { while ( 1 ) { v6 = 17 * v5; v7 = *(_DWORD *)(a1 + 68 * v5 + 60); v8 = a1 + 4 * v6; v9 = *(_DWORD *)(a4 + 60); if ( v7 < v9 ) goto LABEL_20; if ( v7 == v9 ) break; LABEL_19: v16 = a1 + 68 * v4; sub_4017F0((const void **)v16, (const void **)v8, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v16 + 28), (const void **)(v8 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v16 + 56) = *(_DWORD *)(v8 + 56); *(_DWORD *)(v16 + 60) = *(_DWORD *)(v8 + 60); *(_DWORD *)(v16 + 64) = *(_DWORD *)(v8 + 64); v4 = v19; v19 = (v19 - 1) / 2; if ( a3 >= v4 ) goto LABEL_20; v5 = v19; } v10 = *(_DWORD *)(v8 + 56); v11 = *(_DWORD *)(a4 + 56); v12 = v11 < v10; if ( v11 == v10 ) { if ( *(_DWORD *)(v8 + 64) == *(_DWORD *)(a4 + 64) ) { v13 = (unsigned __int8 *)(*(_DWORD *)(a4 + 20) < 0x10u ? a4 : *(_DWORD *)a4); if ( sub_40C2F0((unsigned __int8 *)v8, 0, *(_DWORD *)(v8 + 16), v13, *(_DWORD *)(a4 + 16)) < 0 ) { if ( *(_DWORD *)(a4 + 20) < 0x10u ) v14 = (unsigned __int8 *)a4; else v14 = *(unsigned __int8 **)a4; v15 = sub_40C2F0((unsigned __int8 *)v8, 0, *(_DWORD *)(v8 + 16), v14, *(_DWORD *)(a4 + 16)) != 0; LABEL_18: if ( !v15 ) goto LABEL_20; goto LABEL_19; } } v12 = *(_DWORD *)(a4 + 64) < *(_DWORD *)(v8 + 64); } v15 = v12; goto LABEL_18; } LABEL_20: v17 = a1 + 68 * v4; sub_4017F0((const void **)(a1 + 68 * v4), (const void **)a4, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v17 + 28), (const void **)(a4 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v17 + 56) = *(_DWORD *)(a4 + 56); *(_DWORD *)(v17 + 60) = *(_DWORD *)(a4 + 60); result = *(_DWORD *)(a4 + 64); *(_DWORD *)(v17 + 64) = result; return result; } //----- (0070ABD0) -------------------------------------------------------- int __cdecl sub_70ABD0(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi if ( a1 == a2 ) return a3; v3 = a3; v4 = a2 + 14; do { v4 -= 17; v3 -= 68; sub_4017F0((const void **)v3, v4 - 14, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v3 + 28), v4 - 7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 56) = *v4; *(_DWORD *)(v3 + 60) = v4[1]; *(_DWORD *)(v3 + 64) = v4[2]; } while ( v4 - 14 != a1 ); return v3; } //----- (0070AC30) -------------------------------------------------------- int __cdecl sub_70AC30(const void **a1, const void **a2, int a3) { int v3; // edi const void **v4; // esi const void *v5; // ecx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 14; do { sub_4017F0((const void **)v3, v4 - 14, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v3 + 28), v4 - 7, 0, (void *)0xFFFFFFFF); *(_DWORD *)(v3 + 56) = *v4; *(_DWORD *)(v3 + 60) = v4[1]; v5 = v4[2]; v4 += 17; *(_DWORD *)(v3 + 64) = v5; v3 += 68; } while ( v4 - 14 != a2 ); return v3; } //----- (0070AC90) -------------------------------------------------------- void __cdecl sub_70AC90(_DWORD *a1, _DWORD *a2, int a3) { if ( sub_70A910((int)a2, a1) ) sub_70A990((int)a2, (int)a1); if ( sub_70A910(a3, a2) ) sub_70A990(a3, (int)a2); if ( sub_70A910((int)a2, a1) ) sub_70A990((int)a2, (int)a1); } //----- (0070ACF0) -------------------------------------------------------- int __cdecl sub_70ACF0(int a1, int a2, int a3, int a4) { int v4; // ebx int v5; // esi bool v6; // zf int v7; // ebx unsigned int v8; // eax unsigned int v9; // ecx int v10; // edi unsigned int v11; // eax unsigned int v12; // ecx bool v13; // cf unsigned __int8 *v14; // eax unsigned int v15; // eax bool v16; // al int v17; // edi int v18; // ebx int v19; // esi int v20; // edi int v22; // [esp+Ch] [ebp-4h] v4 = a3; v5 = 2 * a2 + 2; v22 = a2; v6 = v5 == a3; if ( v5 < a3 ) { while ( 1 ) { v7 = a1 + 68 * v5; v8 = *(_DWORD *)(v7 + 60); v9 = *(_DWORD *)(v7 - 8); v10 = v7 - 68; if ( v8 < v9 ) goto LABEL_17; if ( v8 != v9 ) goto LABEL_16; v11 = *(_DWORD *)(v7 + 56); v12 = *(_DWORD *)(v10 + 56); v13 = v12 < v11; if ( v12 != v11 ) goto LABEL_14; if ( *(_DWORD *)(v7 + 64) != *(_DWORD *)(v10 + 64) ) break; v14 = (unsigned __int8 *)(*(_DWORD *)(v10 + 20) < 0x10u ? v7 - 68 : *(_DWORD *)v10); if ( sub_40C2F0((unsigned __int8 *)(a1 + 68 * v5), 0, *(_DWORD *)(v7 + 16), v14, *(_DWORD *)(v10 + 16)) >= 0 ) break; v15 = *(_DWORD *)(v10 + 16); if ( *(_DWORD *)(v10 + 20) >= 0x10u ) v10 = *(_DWORD *)v10; v16 = sub_40C2F0((unsigned __int8 *)v7, 0, *(_DWORD *)(v7 + 16), (unsigned __int8 *)v10, v15) != 0; LABEL_15: if ( v16 ) LABEL_16: --v5; LABEL_17: v17 = a1 + 68 * v5; v18 = a1 + 68 * a2; sub_4017F0((const void **)(a1 + 68 * a2), (const void **)(a1 + 68 * v5), 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v18 + 28), (const void **)(v17 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v18 + 56) = *(_DWORD *)(v17 + 56); a2 = v5; *(_DWORD *)(v18 + 60) = *(_DWORD *)(v17 + 60); v5 = 2 * v5 + 2; *(_DWORD *)(v18 + 64) = *(_DWORD *)(v17 + 64); if ( v5 >= a3 ) { v4 = a3; v6 = v5 == a3; goto LABEL_19; } } v13 = *(_DWORD *)(v10 + 64) < *(_DWORD *)(v7 + 64); LABEL_14: v16 = v13; goto LABEL_15; } LABEL_19: if ( v6 ) { v19 = a1 + 68 * v4 - 68; v20 = a1 + 68 * a2; sub_4017F0((const void **)(a1 + 68 * a2), (const void **)v19, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v20 + 28), (const void **)(v19 + 28), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v20 + 56) = *(_DWORD *)(v19 + 56); *(_DWORD *)(v20 + 60) = *(_DWORD *)(v19 + 60); *(_DWORD *)(v20 + 64) = *(_DWORD *)(v19 + 64); a2 = v4 - 1; } return sub_70AA90(a1, a2, v22, a4); } //----- (0070AE60) -------------------------------------------------------- void __cdecl sub_70AE60(_DWORD *a1, _DWORD *a2, int a3) { int v3; // eax int v4; // eax int v5; // ebx int v6; // edx int v7; // esi _DWORD *v8; // ST30_4 _DWORD *v9; // [esp+Ch] [ebp+8h] v3 = (a3 - (signed int)a1) / 68; if ( v3 <= 40 ) { sub_70AC90(a1, a2, a3); } else { v4 = (v3 + 1) / 8; v5 = 136 * v4; v6 = (int)&a1[34 * v4]; v7 = 68 * v4; v8 = a1; v9 = &a1[17 * v4]; sub_70AC90(v8, v9, v6); sub_70AC90(&a2[v7 / 0xFFFFFFFC], a2, (int)&a2[v7 / 4u]); sub_70AC90((_DWORD *)(a3 - v5), (_DWORD *)(a3 - v7), a3); sub_70AC90(v9, a2, a3 - v7); } } //----- (0070AF20) -------------------------------------------------------- void __cdecl sub_70AF20(int a1, int a2) { int v2; // edi int *v3; // esi int v4; // ecx int v5; // edx int v6; // [esp+10h] [ebp-5Ch] void *v7; // [esp+18h] [ebp-54h] int v8; // [esp+28h] [ebp-44h] unsigned int v9; // [esp+2Ch] [ebp-40h] void *v10; // [esp+34h] [ebp-38h] int v11; // [esp+44h] [ebp-28h] unsigned int v12; // [esp+48h] [ebp-24h] int v13; // [esp+50h] [ebp-1Ch] int v14; // [esp+54h] [ebp-18h] int v15; // [esp+58h] [ebp-14h] int v16; // [esp+68h] [ebp-4h] v6 = (a2 - a1) / 68; v2 = v6 / 2; if ( v6 / 2 > 0 ) { v3 = (int *)(a1 + 68 * v2 + 56); do { v3 -= 17; --v2; v9 = 15; v8 = 0; LOBYTE(v7) = 0; sub_4017F0((const void **)&v7, (const void **)v3 - 14, 0, (void *)0xFFFFFFFF); v16 = 0; v12 = 15; v11 = 0; LOBYTE(v10) = 0; sub_4017F0((const void **)&v10, (const void **)v3 - 7, 0, (void *)0xFFFFFFFF); v4 = v3[1]; v5 = v3[2]; v13 = *v3; v14 = v4; v15 = v5; v16 = 1; sub_70ACF0(a1, v2, v6, (int)&v7); v16 = -1; if ( v12 >= 0x10 ) operator delete(v10); v12 = 15; v11 = 0; LOBYTE(v10) = 0; if ( v9 >= 0x10 ) operator delete(v7); } while ( v2 > 0 ); } } //----- (0070B060) -------------------------------------------------------- void __cdecl sub_70B060(int a1, int a2) { int v2; // esi int v3; // edi int v4; // ebx unsigned int v5; // edx unsigned int v6; // ecx unsigned int v7; // eax unsigned int v8; // eax unsigned int v9; // eax bool v10; // cf unsigned int v11; // ecx unsigned __int8 *v12; // edx unsigned __int8 *v13; // eax int v14; // eax unsigned int v15; // ecx bool v16; // sf unsigned int v17; // eax unsigned __int8 *v18; // edx unsigned __int8 *v19; // eax int v20; // eax bool v21; // zf unsigned int v22; // eax bool v23; // al int v24; // edx unsigned int v25; // eax int v26; // esi unsigned int v27; // eax unsigned int v28; // eax bool v29; // cf unsigned __int8 **v30; // edi unsigned __int8 *v31; // edx unsigned int v32; // ecx unsigned __int8 *v33; // eax int v34; // eax unsigned int v35; // ecx bool v36; // sf unsigned int v37; // eax unsigned __int8 *v38; // edx unsigned __int8 *v39; // eax int v40; // eax bool v41; // zf unsigned int v42; // eax bool v43; // al int v44; // ecx unsigned int v45; // edx int v46; // [esp+14h] [ebp-58h] void *v47; // [esp+18h] [ebp-54h] unsigned int v48; // [esp+28h] [ebp-44h] unsigned int v49; // [esp+2Ch] [ebp-40h] void *v50; // [esp+34h] [ebp-38h] int v51; // [esp+44h] [ebp-28h] unsigned int v52; // [esp+48h] [ebp-24h] unsigned int v53; // [esp+50h] [ebp-1Ch] unsigned int v54; // [esp+54h] [ebp-18h] unsigned int v55; // [esp+58h] [ebp-14h] int v56; // [esp+68h] [ebp-4h] v2 = a1; if ( a1 == a2 ) return; v3 = a1 + 68; v46 = a1 + 68; if ( a1 + 68 == a2 ) return; do { v4 = v3; v49 = 15; v48 = 0; LOBYTE(v47) = 0; sub_4017F0((const void **)&v47, (const void **)v3, 0, (void *)0xFFFFFFFF); v56 = 0; v51 = 0; LOBYTE(v50) = 0; v52 = 15; sub_4017F0((const void **)&v50, (const void **)(v3 + 28), 0, (void *)0xFFFFFFFF); v5 = *(_DWORD *)(v3 + 56); v6 = *(_DWORD *)(v3 + 60); v7 = *(_DWORD *)(v3 + 64); v53 = *(_DWORD *)(v3 + 56); v54 = v6; v55 = v7; v8 = *(_DWORD *)(v2 + 60); v56 = 1; if ( v6 >= v8 ) { if ( v6 != v8 ) goto LABEL_34; v9 = *(_DWORD *)(v2 + 56); v10 = v9 < v5; if ( v9 == v5 ) { if ( v55 == *(_DWORD *)(v2 + 64) ) { v11 = *(_DWORD *)(v2 + 16); if ( *(_DWORD *)(v2 + 20) < 0x10u ) v12 = (unsigned __int8 *)v2; else v12 = *(unsigned __int8 **)v2; if ( v48 < v11 ) v11 = v48; v13 = (unsigned __int8 *)v47; if ( v49 < 0x10 ) v13 = (unsigned __int8 *)&v47; v14 = sub_40C0B0(v13, v12, v11); v15 = v48; v16 = v14 < 0; if ( !v14 ) { v17 = *(_DWORD *)(v2 + 16); if ( v48 < v17 ) { LABEL_18: if ( *(_DWORD *)(v2 + 20) < 0x10u ) v18 = (unsigned __int8 *)v2; else v18 = *(unsigned __int8 **)v2; if ( v48 >= *(_DWORD *)(v2 + 16) ) v15 = *(_DWORD *)(v2 + 16); v19 = (unsigned __int8 *)v47; if ( v49 < 0x10 ) v19 = (unsigned __int8 *)&v47; v20 = sub_40C0B0(v19, v18, v15); v21 = v20 == 0; if ( !v20 ) { v22 = *(_DWORD *)(v2 + 16); if ( v48 < v22 ) { v6 = v54; v5 = v53; v23 = 1; goto LABEL_33; } v21 = v48 == v22; } v6 = v54; v5 = v53; v23 = !v21; LABEL_33: if ( v23 ) { LABEL_34: sub_70ABD0((const void **)v2, (const void **)v3, v3 + 68); sub_4017F0((const void **)v2, (const void **)&v47, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v2 + 28), (const void **)&v50, 0, (void *)0xFFFFFFFF); v24 = v54; v25 = v55; *(_DWORD *)(v2 + 56) = v53; *(_DWORD *)(v2 + 60) = v24; *(_DWORD *)(v2 + 64) = v25; goto LABEL_69; } goto LABEL_35; } v16 = (v48 != v17) < 0; } if ( v16 ) goto LABEL_18; v6 = v54; v5 = v53; } v10 = *(_DWORD *)(v2 + 64) < v55; } v23 = v10; goto LABEL_33; } LABEL_35: v26 = v3 + 20; while ( 1 ) { v27 = *(_DWORD *)(v26 - 28); v26 -= 68; if ( v6 < v27 ) break; if ( v6 != v27 ) goto LABEL_67; v28 = *(_DWORD *)(v26 + 36); v29 = v28 < v5; if ( v28 != v5 ) goto LABEL_65; if ( v55 != *(_DWORD *)(v26 + 44) ) goto LABEL_64; v30 = (unsigned __int8 **)(v26 - 20); if ( *(_DWORD *)v26 < 0x10u ) v31 = (unsigned __int8 *)(v26 - 20); else v31 = *v30; v32 = v48; if ( v48 >= *(_DWORD *)(v26 - 4) ) v32 = *(_DWORD *)(v26 - 4); v33 = (unsigned __int8 *)v47; if ( v49 < 0x10 ) v33 = (unsigned __int8 *)&v47; v34 = sub_40C0B0(v33, v31, v32); v35 = v48; v36 = v34 < 0; if ( !v34 ) { v37 = *(_DWORD *)(v26 - 4); if ( v48 < v37 ) goto LABEL_51; v36 = (v48 != v37) < 0; } if ( !v36 ) { v3 = v46; LABEL_64: v29 = *(_DWORD *)(v26 + 44) < v55; LABEL_65: v43 = v29; goto LABEL_66; } LABEL_51: if ( *(_DWORD *)v26 < 0x10u ) v38 = (unsigned __int8 *)(v26 - 20); else v38 = *v30; if ( v48 >= *(_DWORD *)(v26 - 4) ) v35 = *(_DWORD *)(v26 - 4); v39 = (unsigned __int8 *)v47; if ( v49 < 0x10 ) v39 = (unsigned __int8 *)&v47; v40 = sub_40C0B0(v39, v38, v35); v41 = v40 == 0; if ( !v40 ) { v42 = *(_DWORD *)(v26 - 4); if ( v48 < v42 ) { v3 = v46; v43 = 1; goto LABEL_66; } v41 = v48 == v42; } v3 = v46; v43 = !v41; LABEL_66: if ( !v43 ) break; LABEL_67: sub_4017F0((const void **)v4, (const void **)(v26 - 20), 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v4 + 28), (const void **)(v26 + 8), 0, (void *)0xFFFFFFFF); *(_DWORD *)(v4 + 56) = *(_DWORD *)(v26 + 36); v6 = v54; *(_DWORD *)(v4 + 60) = *(_DWORD *)(v26 + 40); v5 = v53; *(_DWORD *)(v4 + 64) = *(_DWORD *)(v26 + 44); v4 = v26 - 20; v3 = v46; } sub_4017F0((const void **)v4, (const void **)&v47, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v4 + 28), (const void **)&v50, 0, (void *)0xFFFFFFFF); v44 = v54; v45 = v55; v2 = a1; *(_DWORD *)(v4 + 56) = v53; *(_DWORD *)(v4 + 60) = v44; *(_DWORD *)(v4 + 64) = v45; LABEL_69: v56 = -1; if ( v52 >= 0x10 ) operator delete(v50); v52 = 15; v51 = 0; LOBYTE(v50) = 0; if ( v49 >= 0x10 ) operator delete(v47); v3 += 68; v46 = v3; } while ( v3 != a2 ); } //----- (0070B400) -------------------------------------------------------- void __cdecl sub_70B400(int a1, int a2) { _DWORD *v2; // edi void *v3; // [esp+10h] [ebp-54h] unsigned int v4; // [esp+24h] [ebp-40h] void *v5; // [esp+2Ch] [ebp-38h] int v6; // [esp+3Ch] [ebp-28h] unsigned int v7; // [esp+40h] [ebp-24h] int v8; // [esp+60h] [ebp-4h] v2 = (_DWORD *)(a2 - 68); sub_5F6310((int)&v3, a2 - 68); v8 = 0; sub_4017F0((const void **)(a2 - 68), (const void **)a1, 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(a2 - 68 + 28), (const void **)(a1 + 28), 0, (void *)0xFFFFFFFF); v2[14] = *(_DWORD *)(a1 + 56); v2[15] = *(_DWORD *)(a1 + 60); v2[16] = *(_DWORD *)(a1 + 64); sub_70ACF0(a1, 0, (a2 - a1 - 68) / 68, (int)&v3); if ( v7 >= 0x10 ) operator delete(v5); v7 = 15; v6 = 0; LOBYTE(v5) = 0; if ( v4 >= 0x10 ) operator delete(v3); } //----- (0070B500) -------------------------------------------------------- unsigned int *__cdecl sub_70B500(unsigned int *a1, unsigned __int8 *a2, unsigned int a3) { int v3; // eax unsigned int v4; // esi unsigned int v5; // ebx unsigned int v6; // edi unsigned int *v7; // esi unsigned int v8; // eax unsigned int v9; // ecx unsigned int v10; // eax unsigned int v11; // ecx bool v12; // cf unsigned __int8 *v13; // eax unsigned __int8 *v14; // eax bool v15; // al unsigned int v16; // eax unsigned int v17; // ecx unsigned int v18; // eax unsigned int v19; // ecx bool v20; // cf unsigned __int8 *v21; // edi unsigned __int8 *v22; // eax signed int v23; // eax bool v24; // al unsigned int v25; // eax unsigned int v26; // ecx unsigned int v27; // eax unsigned int v28; // ecx bool v29; // cf unsigned __int8 *v30; // eax unsigned __int8 *v31; // eax bool v32; // al unsigned int v33; // eax unsigned int v34; // ecx unsigned int v35; // eax unsigned int v36; // ecx bool v37; // cf unsigned __int8 *v38; // ecx unsigned __int8 *v39; // ecx bool v40; // al unsigned int v41; // eax unsigned int v42; // ecx unsigned __int8 *v43; // edx unsigned int v44; // eax unsigned int v45; // ecx bool v46; // cf unsigned int v47; // edi unsigned int v48; // esi unsigned int v49; // ecx unsigned __int8 *v50; // eax int v51; // eax bool v52; // sf unsigned __int8 *v53; // edx unsigned int v54; // ecx unsigned __int8 *v55; // eax int v56; // eax bool v57; // zf bool v58; // al unsigned int v59; // eax unsigned int v60; // ecx bool v61; // cf unsigned __int8 *v62; // edx unsigned int v63; // ebx unsigned int v64; // edi unsigned int v65; // esi unsigned int v66; // ecx unsigned __int8 *v67; // eax int v68; // eax bool v69; // sf unsigned __int8 *v70; // eax bool v71; // al int v72; // ST08_4 unsigned __int8 *v73; // edi bool v74; // zf unsigned int v75; // eax unsigned int v76; // ecx unsigned int v77; // eax unsigned int v78; // ecx bool v79; // cf unsigned int v80; // edx unsigned __int8 *v81; // ecx unsigned __int8 *v82; // esi int v83; // eax int v84; // eax bool v85; // sf unsigned int v86; // esi unsigned int v87; // eax unsigned __int8 *v88; // edx unsigned int v89; // ecx unsigned int v90; // esi unsigned __int8 *v91; // eax int v92; // eax bool v93; // zf unsigned int v94; // eax bool v95; // al unsigned int v96; // ecx unsigned int v97; // eax unsigned int v98; // eax unsigned int v99; // ecx bool v100; // cf unsigned __int8 *v101; // edx unsigned int v102; // edi unsigned int v103; // esi unsigned int v104; // ecx unsigned __int8 *v105; // eax int v106; // eax bool v107; // sf unsigned __int8 *v108; // edx unsigned int v109; // ecx unsigned __int8 *v110; // eax int v111; // eax bool v112; // zf bool v113; // al int v114; // esi int v115; // ST08_4 int v116; // edi unsigned int *result; // eax unsigned __int8 *v118; // [esp+Ch] [ebp-10h] int v119; // [esp+10h] [ebp-Ch] unsigned int v120; // [esp+14h] [ebp-8h] unsigned __int8 *v121; // [esp+14h] [ebp-8h] unsigned int v122; // [esp+18h] [ebp-4h] v3 = (signed int)(a3 - (_DWORD)a2) / 68 / 2; v4 = (unsigned int)&a2[68 * v3]; sub_70AE60(a2, &a2[68 * v3], a3 - 68); v5 = v4; v6 = v4 + 68; v120 = v4; v119 = v4 + 68; if ( (unsigned int)a2 < v4 ) { v7 = (unsigned int *)(v4 - 52); while ( 1 ) { v8 = v7[11]; v9 = v7[28]; if ( v8 < v9 ) goto LABEL_19; if ( v8 != v9 ) goto LABEL_35; v10 = v7[10]; v11 = v7[27]; v12 = v11 < v10; if ( v11 != v10 ) goto LABEL_17; if ( v7[12] != v7[29] ) goto LABEL_16; v13 = (unsigned __int8 *)(v7[18] < 0x10 ? v5 : *(_DWORD *)v5); if ( sub_40C2F0((unsigned __int8 *)v7 - 16, 0, *v7, v13, v7[17]) >= 0 ) break; if ( v7[18] < 0x10 ) v14 = (unsigned __int8 *)v5; else v14 = *(unsigned __int8 **)v5; v6 = v119; v15 = sub_40C2F0((unsigned __int8 *)v7 - 16, 0, *v7, v14, v7[17]) != 0; LABEL_18: if ( v15 ) goto LABEL_35; LABEL_19: v16 = v7[28]; v17 = v7[11]; if ( v16 >= v17 ) { if ( v16 != v17 ) goto LABEL_35; v18 = v7[27]; v19 = v7[10]; v20 = v19 < v18; if ( v19 == v18 ) { if ( v7[29] == v7[12] ) { v21 = (unsigned __int8 *)(v7 - 4); if ( v7[1] < 0x10 ) v22 = (unsigned __int8 *)(v7 - 4); else v22 = *(unsigned __int8 **)v21; if ( sub_40C2F0((unsigned __int8 *)v5, 0, v7[17], v22, *v7) < 0 ) { if ( v7[1] >= 0x10 ) v21 = *(unsigned __int8 **)v21; v23 = sub_40C2F0((unsigned __int8 *)v5, 0, v7[17], v21, *v7); v6 = v119; v24 = v23 != 0; LABEL_33: if ( v24 ) goto LABEL_35; goto LABEL_34; } v6 = v119; } v20 = v7[12] < v7[29]; } v24 = v20; goto LABEL_33; } LABEL_34: v5 -= 68; v7 -= 17; if ( (unsigned int)a2 >= v5 ) { LABEL_35: v120 = v5; goto LABEL_36; } } v6 = v119; LABEL_16: v12 = v7[29] < v7[12]; LABEL_17: v15 = v12; goto LABEL_18; } LABEL_36: if ( v6 < a3 ) { while ( 1 ) { v25 = *(_DWORD *)(v6 + 60); v26 = *(_DWORD *)(v5 + 60); if ( v25 < v26 ) goto LABEL_52; if ( v25 != v26 ) goto LABEL_68; v27 = *(_DWORD *)(v6 + 56); v28 = *(_DWORD *)(v5 + 56); v29 = v28 < v27; if ( v28 != v27 ) goto LABEL_50; if ( *(_DWORD *)(v6 + 64) != *(_DWORD *)(v5 + 64) ) break; v30 = (unsigned __int8 *)(*(_DWORD *)(v5 + 20) < 0x10u ? v5 : *(_DWORD *)v5); if ( sub_40C2F0((unsigned __int8 *)v6, 0, *(_DWORD *)(v6 + 16), v30, *(_DWORD *)(v5 + 16)) >= 0 ) break; if ( *(_DWORD *)(v5 + 20) < 0x10u ) v31 = (unsigned __int8 *)v5; else v31 = *(unsigned __int8 **)v5; v32 = sub_40C2F0((unsigned __int8 *)v6, 0, *(_DWORD *)(v6 + 16), v31, *(_DWORD *)(v5 + 16)) != 0; LABEL_51: if ( v32 ) goto LABEL_68; LABEL_52: v33 = *(_DWORD *)(v5 + 60); v34 = *(_DWORD *)(v6 + 60); if ( v33 >= v34 ) { if ( v33 != v34 ) goto LABEL_68; v35 = *(_DWORD *)(v5 + 56); v36 = *(_DWORD *)(v6 + 56); v37 = v36 < v35; if ( v36 == v35 ) { if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(v6 + 64) ) { v38 = (unsigned __int8 *)(*(_DWORD *)(v6 + 20) < 0x10u ? v6 : *(_DWORD *)v6); if ( sub_40C2F0((unsigned __int8 *)v5, 0, *(_DWORD *)(v5 + 16), v38, *(_DWORD *)(v6 + 16)) < 0 ) { if ( *(_DWORD *)(v6 + 20) < 0x10u ) v39 = (unsigned __int8 *)v6; else v39 = *(unsigned __int8 **)v6; v40 = sub_40C2F0((unsigned __int8 *)v5, 0, *(_DWORD *)(v5 + 16), v39, *(_DWORD *)(v6 + 16)) != 0; LABEL_66: if ( v40 ) goto LABEL_68; goto LABEL_67; } } v37 = *(_DWORD *)(v6 + 64) < *(_DWORD *)(v5 + 64); } v40 = v37; goto LABEL_66; } LABEL_67: v6 += 68; if ( v6 >= a3 ) { LABEL_68: v119 = v6; goto LABEL_69; } } v29 = *(_DWORD *)(v5 + 64) < *(_DWORD *)(v6 + 64); LABEL_50: v32 = v29; goto LABEL_51; } LABEL_69: v122 = v6; v118 = (unsigned __int8 *)v5; while ( 2 ) { while ( 2 ) { if ( v122 < a3 ) { while ( 1 ) { v41 = *(_DWORD *)(v5 + 60); v42 = *(_DWORD *)(v122 + 60); if ( v41 < v42 ) { LABEL_101: if ( *(_DWORD *)(v122 + 60) < *(_DWORD *)(v5 + 60) ) goto LABEL_122; if ( *(_DWORD *)(v122 + 60) != *(_DWORD *)(v5 + 60) ) goto LABEL_124; v59 = *(_DWORD *)(v122 + 56); v60 = *(_DWORD *)(v5 + 56); v61 = v60 < v59; if ( v60 == v59 ) { if ( *(_DWORD *)(v122 + 64) == *(_DWORD *)(v5 + 64) ) { v62 = (unsigned __int8 *)v120; v63 = *(_DWORD *)(v120 + 20); v64 = *(_DWORD *)(v120 + 16); if ( v63 >= 0x10 ) v62 = *(unsigned __int8 **)v120; v65 = *(_DWORD *)(v122 + 16); v66 = v65; if ( v65 >= v64 ) v66 = *(_DWORD *)(v120 + 16); v67 = (unsigned __int8 *)v122; if ( *(_DWORD *)(v122 + 20) >= 0x10u ) v67 = *(unsigned __int8 **)v122; v68 = sub_40C0B0(v67, v62, v66); v69 = v68 < 0; if ( !v68 ) { if ( v65 >= v64 ) { LOBYTE(v68) = v65 != v64; v69 = v68 < 0; goto LABEL_114; } LABEL_115: if ( v63 < 0x10 ) v70 = (unsigned __int8 *)v120; else v70 = *(unsigned __int8 **)v120; v71 = sub_40C2F0((unsigned __int8 *)v122, 0, v65, v70, v64) != 0; LABEL_121: v5 = v120; if ( v71 ) goto LABEL_124; LABEL_122: v72 = v119; v119 += 68; sub_70A990(v72, v122); goto LABEL_123; } LABEL_114: if ( v69 ) goto LABEL_115; } v61 = *(_DWORD *)(v120 + 64) < *(_DWORD *)(v122 + 64); } v71 = v61; goto LABEL_121; } if ( v41 == v42 ) break; LABEL_123: v122 += 68; if ( v122 >= a3 ) goto LABEL_124; } v43 = (unsigned __int8 *)v122; v44 = *(_DWORD *)(v5 + 56); v45 = *(_DWORD *)(v122 + 56); v46 = v45 < v44; if ( v45 == v44 ) { if ( *(_DWORD *)(v5 + 64) == *(_DWORD *)(v122 + 64) ) { v47 = *(_DWORD *)(v122 + 16); if ( *(_DWORD *)(v122 + 20) >= 0x10u ) v43 = *(unsigned __int8 **)v122; v48 = *(_DWORD *)(v5 + 16); v49 = v48; if ( v48 >= v47 ) v49 = *(_DWORD *)(v122 + 16); if ( *(_DWORD *)(v5 + 20) < 0x10u ) v50 = (unsigned __int8 *)v5; else v50 = *(unsigned __int8 **)v5; v51 = sub_40C0B0(v50, v43, v49); v52 = v51 < 0; if ( !v51 ) { if ( v48 < v47 ) { LABEL_86: v53 = (unsigned __int8 *)v122; if ( *(_DWORD *)(v122 + 20) >= 0x10u ) v53 = *(unsigned __int8 **)v122; v54 = v48; if ( v48 >= v47 ) v54 = v47; if ( *(_DWORD *)(v5 + 20) < 0x10u ) v55 = (unsigned __int8 *)v5; else v55 = *(unsigned __int8 **)v5; v56 = sub_40C0B0(v55, v53, v54); v57 = v56 == 0; if ( !v56 ) { if ( v48 < v47 ) { v58 = 1; goto LABEL_100; } v57 = v48 == v47; } v58 = !v57; LABEL_100: if ( !v58 ) goto LABEL_101; goto LABEL_123; } LOBYTE(v51) = v48 != v47; v52 = v51 < 0; } if ( v52 ) goto LABEL_86; } v46 = *(_DWORD *)(v122 + 64) < *(_DWORD *)(v5 + 64); } v58 = v46; goto LABEL_100; } LABEL_124: v73 = v118; v74 = v118 == a2; if ( v118 <= a2 ) goto LABEL_204; do { v75 = *((_DWORD *)v73 - 2); v76 = *(_DWORD *)(v5 + 60); v73 -= 68; v121 = v73; if ( v75 < v76 ) goto LABEL_170; if ( v75 != v76 ) goto LABEL_202; v77 = *((_DWORD *)v73 + 14); v78 = *(_DWORD *)(v5 + 56); v79 = v78 < v77; if ( v78 != v77 ) goto LABEL_168; if ( *((_DWORD *)v73 + 16) != *(_DWORD *)(v5 + 64) ) goto LABEL_167; v80 = *(_DWORD *)(v5 + 16); if ( *(_DWORD *)(v5 + 20) < 0x10u ) v81 = (unsigned __int8 *)v5; else v81 = *(unsigned __int8 **)v5; if ( *((_DWORD *)v73 + 4) < v80 ) v80 = *((_DWORD *)v73 + 4); if ( *((_DWORD *)v73 + 5) < 0x10u ) v82 = v73; else v82 = *(unsigned __int8 **)v73; if ( v80 < 4 ) { LABEL_140: if ( !v80 ) goto LABEL_149; } else { while ( *(_DWORD *)v82 == *(_DWORD *)v81 ) { v80 -= 4; v81 += 4; v82 += 4; if ( v80 < 4 ) goto LABEL_140; } } v83 = *v82 - *v81; if ( *v82 != *v81 ) goto LABEL_148; if ( v80 > 1 ) { v83 = v82[1] - v81[1]; if ( v82[1] != v81[1] ) goto LABEL_148; if ( v80 > 2 ) { v83 = v82[2] - v81[2]; if ( v82[2] != v81[2] ) goto LABEL_148; if ( v80 > 3 ) { v83 = v82[3] - v81[3]; LABEL_148: v84 = (v83 >> 31) | 1; goto LABEL_150; } } } LABEL_149: v84 = 0; LABEL_150: v85 = v84 < 0; if ( !v84 ) { v86 = *(_DWORD *)(v5 + 16); v87 = *((_DWORD *)v73 + 4); if ( v87 < v86 ) goto LABEL_154; v85 = (v87 != v86) < 0; } if ( !v85 ) { LABEL_167: v79 = *(_DWORD *)(v5 + 64) < *((_DWORD *)v73 + 16); LABEL_168: v95 = v79; goto LABEL_169; } LABEL_154: if ( *(_DWORD *)(v5 + 20) < 0x10u ) v88 = (unsigned __int8 *)v5; else v88 = *(unsigned __int8 **)v5; v89 = *(_DWORD *)(v5 + 16); v90 = *((_DWORD *)v73 + 4); if ( v90 < v89 ) v89 = *((_DWORD *)v73 + 4); if ( *((_DWORD *)v73 + 5) < 0x10u ) v91 = v73; else v91 = *(unsigned __int8 **)v73; v92 = sub_40C0B0(v91, v88, v89); v93 = v92 == 0; if ( !v92 ) { v94 = *(_DWORD *)(v5 + 16); if ( v90 < v94 ) { v95 = 1; goto LABEL_169; } v93 = v90 == v94; } v95 = !v93; LABEL_169: if ( v95 ) goto LABEL_202; LABEL_170: v96 = *(_DWORD *)(v5 + 60); v97 = *((_DWORD *)v73 + 15); if ( v96 >= v97 ) { if ( v96 != v97 ) break; v98 = *(_DWORD *)(v5 + 56); v99 = *((_DWORD *)v73 + 14); v100 = v99 < v98; if ( v99 == v98 ) { if ( *(_DWORD *)(v5 + 64) == *((_DWORD *)v73 + 16) ) { v101 = v73; v102 = *((_DWORD *)v73 + 4); if ( *((_DWORD *)v121 + 5) >= 0x10u ) v101 = *(unsigned __int8 **)v121; v103 = *(_DWORD *)(v5 + 16); v104 = v103; if ( v103 >= v102 ) v104 = *((_DWORD *)v121 + 4); if ( *(_DWORD *)(v5 + 20) < 0x10u ) v105 = (unsigned __int8 *)v5; else v105 = *(unsigned __int8 **)v5; v106 = sub_40C0B0(v105, v101, v104); v107 = v106 < 0; if ( !v106 ) { if ( v103 < v102 ) goto LABEL_185; LOBYTE(v106) = v103 != v102; v107 = v106 < 0; } if ( v107 ) { LABEL_185: v108 = v121; if ( *((_DWORD *)v121 + 5) >= 0x10u ) v108 = *(unsigned __int8 **)v121; v109 = v103; if ( v103 >= v102 ) v109 = v102; if ( *(_DWORD *)(v5 + 20) < 0x10u ) v110 = (unsigned __int8 *)v5; else v110 = *(unsigned __int8 **)v5; v111 = sub_40C0B0(v110, v108, v109); v112 = v111 == 0; if ( !v111 ) { if ( v103 < v102 ) { v113 = 1; LABEL_199: if ( v113 ) break; v73 = v121; goto LABEL_201; } v112 = v103 == v102; } v113 = !v112; goto LABEL_199; } } v100 = *((_DWORD *)v121 + 16) < *(_DWORD *)(v5 + 64); } v113 = v100; goto LABEL_199; } LABEL_201: v5 -= 68; sub_70A990(v5, (int)v73); LABEL_202: v118 = v73; } while ( a2 < v73 ); v73 = v118; v74 = v118 == a2; v120 = v5; LABEL_204: v114 = v122; if ( !v74 ) { v116 = (int)(v73 - 68); v118 = (unsigned __int8 *)v116; if ( v122 == a3 ) { v5 -= 68; v120 = v5; if ( v116 != v5 ) sub_70A990(v116, v5); v119 -= 68; sub_70A990(v5, v119); } else { sub_70A990(v122, v116); v122 += 68; } continue; } break; } if ( v122 != a3 ) { if ( v119 != v122 ) sub_70A990(v5, v119); v115 = v5; v5 += 68; v119 += 68; v120 = v5; v122 += 68; sub_70A990(v115, v114); continue; } break; } result = a1; *a1 = v5; a1[1] = v119; return result; } //----- (0070BC20) -------------------------------------------------------- int __cdecl sub_70BC20(int a1, int a2) { int v2; // esi int v3; // edi int result; // eax v2 = a2; v3 = a2 - a1; result = (a2 - a1) / 68; if ( result > 1 ) { do { sub_70B400(a1, v2); v3 -= 68; result = v3 / 68; v2 -= 68; } while ( v3 / 68 > 1 ); } return result; } //----- (0070BC80) -------------------------------------------------------- void *__thiscall sub_70BC80(void *this, char a2) { void *v2; // esi v2 = this; sub_7089F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0070BCB0) -------------------------------------------------------- void __cdecl sub_70BCB0(unsigned __int8 *a1, int a2, int a3, int a4) { unsigned __int8 *v4; // ebx int v5; // edi int v6; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] unsigned __int8 *v9; // [esp+10h] [ebp-4h] v4 = a1; v5 = a2; v6 = (a2 - (signed int)a1) / 68; if ( v6 <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_70B500((unsigned int *)&v8, v4, v5); v7 = v7 / 2 / 2 + v7 / 2; if ( (v8 - (signed int)v4) / 68 >= (v5 - (signed int)v9) / 68 ) { sub_70BCB0(v9, v5, v7, a4); v5 = v8; } else { sub_70BCB0(v4, v8, v7, a4); v4 = v9; } v6 = (v5 - (signed int)v4) / 68; if ( v6 <= 32 ) goto LABEL_8; } if ( v6 <= 32 ) { LABEL_8: if ( v6 > 1 ) sub_70B060((int)v4, v5); } else { if ( (v5 - (signed int)v4) / 68 > 1 ) sub_70AF20((int)v4, v5); sub_70BC20((int)v4, v5); } } //----- (0070BE40) -------------------------------------------------------- bool __thiscall sub_70BE40(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6) { return sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) != 0; } //----- (0070BF00) -------------------------------------------------------- char __thiscall sub_70BF00(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { _DWORD *v5; // esi char result; // al v5 = this; result = sub_5D5860(this, a2, a3, a5); if ( result ) { v5[112] = a4; result = 1; } return result; } //----- (0070BF40) -------------------------------------------------------- int __thiscall sub_70BF40(_DWORD *this) { _DWORD *v1; // esi int result; // eax int *v3; // edi int v4; // eax v1 = this; result = sub_5D5470(this); if ( result ) { v3 = (int *)v1[68]; if ( v3 ) { v4 = sub_5D5470(v1); sub_547C20(v3, v4); result = sub_8F2F90((int)v1); } } return result; } //----- (0070BFB0) -------------------------------------------------------- char sub_70BFB0() { sub_8EF6C0(&unk_BA6A18, dword_ACDD68); return sub_4A7E40(); } //----- (0070BFD0) -------------------------------------------------------- char sub_70BFD0() { sub_8EF6C0(&unk_BA6A18, dword_ACDD68); return sub_4A7E40(); } //----- (0070C000) -------------------------------------------------------- char __stdcall sub_70C000(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 12, 47, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0070C030) -------------------------------------------------------- char __stdcall sub_70C030(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 12, 49, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0070C060) -------------------------------------------------------- void __thiscall sub_70C060(_DWORD *this) { _DWORD *v1; // ebx _WORD **v2; // esi signed int v3; // edi unsigned int v4; // esi _WORD **v5; // edi int v6; // eax v1 = this; v2 = (_WORD **)(this + 88); if ( this[88] ) { v3 = 36; do { sub_5D5B70(*v2, 0, 1); ++v2; --v3; } while ( v3 ); v4 = 0; v5 = (_WORD **)(v1 + 88); do { v6 = sub_718760(v4 + 36 * v1[86]); sub_5D5B70(*v5, v6, 1); ++v4; ++v5; } while ( v4 < 0x24 ); } } //----- (0070C0F0) -------------------------------------------------------- char sub_70C0F0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "NPCBank"); return (char)v0; } //----- (0070C120) -------------------------------------------------------- char __thiscall sub_70C120(void *this, int a2, int a3, int a4) { byte_BA6BD0 = 1; (*(void (**)(void))(*(_DWORD *)this + 528))(); return 1; } // BA6BD0: using guessed type char byte_BA6BD0; //----- (0070C140) -------------------------------------------------------- _DWORD *__thiscall sub_70C140(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildAcademyStorageWin::`vftable'; v1[58] = &GuildAcademyStorageWin::`vftable'; v1[133] = 0; v1[131] = &PgWinDrop::`vftable'; v1[150] = 0; v1[134] = &DropContents::`vftable'; *((_WORD *)v1 + 298) = -1; v1[86] = 0; v1[87] = 0; v1[130] = 0; v1[132] = v1 + 134; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[152] = 0; v1[153] = 0; v1[154] = 0; v1[155] = 0; *((_BYTE *)v1 + 624) = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // A00A34: using guessed type void *GuildAcademyStorageWin::`vftable'; // A00A54: using guessed type void *GuildAcademyStorageWin::`vftable'; //----- (0070C340) -------------------------------------------------------- void __thiscall sub_70C340(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(signed int))(*this[126] + 256))(1); (*(void (__stdcall **)(_DWORD))(*v1[127] + 256))(0); v1[86] = 0; sub_70C060(v1); } //----- (0070C380) -------------------------------------------------------- void __thiscall sub_70C380(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[126] + 256))(0); (*(void (__stdcall **)(signed int))(*v1[127] + 256))(1); v1[86] = (_DWORD *)1; sub_70C060(v1); } //----- (0070C3C0) -------------------------------------------------------- void __thiscall sub_70C3C0(_BYTE *this) { _BYTE *v1; // esi v1 = this; sub_8F28C0(this); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 126) + 256))(1); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v1 + 127) + 256))(0); *((_DWORD *)v1 + 86) = 0; sub_70C060(v1); } //----- (0070C400) -------------------------------------------------------- char sub_70C400() { char result; // al char v1; // [esp+1h] [ebp-1h] v1 = 0; result = sub_6F3D10(&off_AB7F2C, 38, 111, &v1, 1u); dword_ACEC24 = 0; return result; } // AB7F2C: using guessed type void **off_AB7F2C; // ACEC24: using guessed type int dword_ACEC24; //----- (0070C430) -------------------------------------------------------- char __thiscall sub_70C430(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], v1[112]); return (char)v2; } //----- (0070C460) -------------------------------------------------------- char __thiscall sub_70C460(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[81], v1[112]); return (char)v2; } //----- (0070C490) -------------------------------------------------------- unsigned int __thiscall sub_70C490(_DWORD **this, int a2) { _DWORD *v2; // esi unsigned int result; // eax unsigned int v4; // edi int **v5; // ebx const CHAR *v6; // ST0C_4 int v7; // eax v2 = this; result = sub_5D5470(this[a2 + 88]); v4 = result; if ( result ) { *((_BYTE *)v2 + 624) = 0; result = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)result + 12))(result); if ( result > 1 ) { *((_BYTE *)v2 + 624) = 1; LOWORD(dword_B9E41C) = dword_B9E41C & 0x3FF; LOWORD(dword_B9E41C) = (dword_B9E41C ^ (a2 + 36 * *((_WORD *)v2 + 172))) & 0x3FF ^ dword_B9E41C; v5 = (int **)v2[74]; v6 = sub_40C190(-68075218); v7 = (*(int (__thiscall **)(unsigned int))(*(_DWORD *)v4 + 12))(v4); result = sub_4A4E90(v5, v2, (_DWORD *)0x17, (_DWORD *)(v7 - 1), (int)v6, 2); } } return result; } // B9E41C: using guessed type int dword_B9E41C; //----- (0070C550) -------------------------------------------------------- void __thiscall sub_70C550(_DWORD **this, int a2) { _DWORD **v2; // edi _DWORD *v3; // eax int v4; // eax int v5; // esi unsigned int v6; // eax const CHAR *v7; // eax __int16 v8; // cx _DWORD **v9; // esi int v10; // [esp+4h] [ebp-8h] __int16 v11; // [esp+8h] [ebp-4h] v2 = this; v3 = (_DWORD *)sub_6D3800(); if ( sub_6D31E0(v3) ) { v4 = sub_5D5470(v2[a2 + 88]); v5 = v4; if ( v4 ) { if ( !dword_BA6BCC && sub_49F760(*(unsigned __int16 *)(v4 + 8)) ) { v6 = sub_6859E0(&byte_ADA230, v5); if ( v6 == -1 ) { v7 = sub_40C190(-1851208242); sub_492060(v2[74], (int)v7); } else { v8 = 36 * *((_WORD *)v2 + 172); LOWORD(v10) = v6 & 0x3FF | 0x2400; v11 = (a2 + v8) & 0x3FF; if ( (v10 & 0x3FF) != -1 ) { sub_4B7B90(v2[74], &v11, (__int16 *)&v10); sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); v9 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !(*(unsigned __int8 (**)(void))(*v9[179] + 260))() ) sub_4A6BA0(v9); } } } } } } // ADA230: using guessed type char byte_ADA230; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0070C680) -------------------------------------------------------- int __thiscall sub_70C680(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int result; // eax volatile LONG *v4; // ecx const CHAR *v5; // eax const CHAR *v6; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); result = sub_6D3010(v2); if ( (_BYTE)result ) { v4 = (volatile LONG *)v1[130]; if ( v4 ) { sub_572750(v4, v1, (_DWORD *)0x14, 0, (int)&unk_A0033F); v5 = sub_40C190(750293376); sub_5729A0((_DWORD **)v1[130], (int)v5); v6 = sub_40C190(942424637); result = sub_5729D0((_DWORD **)v1[130], (int)v6); } } return result; } //----- (0070C6E0) -------------------------------------------------------- void __thiscall sub_70C6E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax volatile LONG *v3; // ecx const CHAR *v4; // eax const CHAR *v5; // eax const CHAR *v6; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D31E0(v2) ) { v3 = (volatile LONG *)v1[130]; if ( v3 ) { sub_572750(v3, v1, (_DWORD *)0x15, 0, (int)&unk_A0034B); v4 = sub_40C190(-1984524408); sub_5729A0((_DWORD **)v1[130], (int)v4); v5 = sub_40C190(-705630395); sub_5729D0((_DWORD **)v1[130], (int)v5); } } else { v6 = sub_40C190(1808582883); sub_492060((_DWORD *)v1[74], (int)v6); } } //----- (0070C760) -------------------------------------------------------- char __thiscall sub_70C760(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // eax int v4; // edx unsigned int v6; // edi int v7; // eax int v8; // ebx unsigned __int16 v9; // si int v10; // ecx _DWORD *v11; // eax int v12; // eax _DWORD *v13; // ecx int v14; // eax _DWORD *v15; // ecx unsigned __int16 v16; // ax int v17; // ebx unsigned __int16 v18; // ST0C_2 int v19; // eax _DWORD *v20; // esi const CHAR *v21; // eax _DWORD *v22; // eax int v23; // eax int v24; // edi int v25; // eax int v26; // esi int v27; // eax int v28; // [esp-10h] [ebp-28h] int v29; // [esp+0h] [ebp-18h] int v30; // [esp+4h] [ebp-14h] int v31; // [esp+8h] [ebp-10h] int v32; // [esp+Ch] [ebp-Ch] _DWORD *v33; // [esp+10h] [ebp-8h] int v34; // [esp+14h] [ebp-4h] int v35; // [esp+20h] [ebp+8h] v33 = this; v3 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v3) ) return 0; v4 = a2[2]; v30 = v4; if ( v4 ) { if ( v4 != 19 ) return 0; LOWORD(v34) = v34 & 0x3FF; } else { LOWORD(v34) = v34 & 0x3FF | 0x2400; } v6 = a2[3]; v7 = v33[74]; v8 = a2[3] & 0x3FF; v9 = v8 | v34 & 0xFC00; LOWORD(v34) = v8 | v34 & 0xFC00; v10 = *(_DWORD *)(v7 + 744); v29 = v10; if ( v10 && *(_DWORD *)(v10 + 348) ) { if ( (v34 & 0xFC00) == 9216 ) { v11 = *(_DWORD **)(v7 + 716); if ( !v11 ) goto LABEL_19; v12 = sub_433AF0(v11, v6); if ( !v12 ) goto LABEL_18; v13 = (_DWORD *)v12; } else { v13 = (_DWORD *)v33[v6 % 0x24 + 88]; } v14 = sub_5D5470(v13); v9 = v8 | v34 & 0xFC00; LOWORD(v34) = v8 | v34 & 0xFC00; v31 = v14; if ( v14 ) { if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v14 + 12))(v14) > 1 ) { v15 = (_DWORD *)v33[74]; LOWORD(a3) = (a3 + 36 * *((_WORD *)v33 + 172)) & 0x3FF; sub_4B88F0(v15, (__int16 *)&v34, (__int16 *)&a3, *(_DWORD *)(v29 + 348)); sub_6BA9B0(*(unsigned __int16 *)(v31 + 8)); return 1; } v9 = v34; } LABEL_18: v4 = v30; } LABEL_19: v16 = (a3 + 36 * *((_WORD *)v33 + 172)) & 0x3FF; LOWORD(v32) = (a3 + 36 * *((_WORD *)v33 + 172)) & 0x3FF; if ( v4 ) { if ( v4 == 19 ) { v25 = sub_5D5470((_DWORD *)v33[v6 % 0x24 + 88]); if ( v25 ) sub_6BA9B0(*(unsigned __int16 *)(v25 + 8)); v26 = (int)v33; if ( *((_BYTE *)v33 + 624) ) { *((_BYTE *)v33 + 624) = 0; if ( !v29 ) return 0; v27 = sub_718760(v34 & 0x3FF); if ( v27 ) { if ( (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v27 + 12))(v27) > 1 ) { sub_4B88F0(*(_DWORD **)(v26 + 296), (__int16 *)&v34, (__int16 *)&v32, *(_DWORD *)(v29 + 348)); return 1; } } } } } else { v17 = a2[5]; if ( v17 ) { v35 = *(_DWORD *)(v17 + 112); if ( v35 ) { v18 = v16 >> 10; a3 = 0; v19 = sub_6869F0((char *)v17); if ( !sub_74E030((char *)&dword_AD9E70, *(_DWORD *)(v35 + 274), v19, v9 >> 10, v18, &a3) ) { v20 = (_DWORD *)v33[74]; v21 = sub_40C190(-2102363671); LABEL_32: sub_492060(v20, (int)v21); return 0; } if ( sub_74DF70(&dword_AD9E70, *(_DWORD *)(v35 + 274)) && sub_6869F0((char *)v17) == 1 ) { v28 = -857857511; LABEL_31: v20 = (_DWORD *)v33[74]; v21 = sub_40C190(v28); goto LABEL_32; } } v22 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v17 + 44))(v17); if ( v22 ) { v23 = *v22 & 0xFF; if ( v23 ) { if ( v23 != 255 ) { v28 = -1634432127; goto LABEL_31; } } } } if ( v6 < 0xC0 ) { v24 = dword_ADA234[v6]; if ( v24 ) sub_6BA9B0(*(unsigned __int16 *)(v24 + 8)); } } if ( !((v34 ^ v32) & 0xFC00) && !((v34 ^ v32) & 0x3FF) ) return 0; sub_4B7B90((_DWORD *)v33[74], (__int16 *)&v34, (__int16 *)&v32); return 1; } // AD9E70: using guessed type int dword_AD9E70; //----- (0070CB00) -------------------------------------------------------- void __thiscall sub_70CB00(char *this, int a2) { char *v2; // ebx __int64 v3; // rax signed __int64 v4; // rax __int64 v5; // rax signed __int64 v6; // rax __int64 v7; // rax signed __int64 v8; // rax __int64 v9; // rax signed __int64 v10; // rax signed int v11; // esi int v12; // edi const char *v13; // eax int v14; // [esp+Ch] [ebp-8Ch] int v15; // [esp+10h] [ebp-88h] char v16; // [esp+14h] [ebp-84h] v2 = this; v3 = sub_7186B0(); v4 = sub_680E90(v3); sprintf(&v16, "%I64d", v4); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 155) + 472))(&v16); v5 = sub_7186B0(); v6 = sub_680EB0(v5); sprintf(&v16, "%I64d", v6); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 154) + 472))(&v16); v7 = sub_7186B0(); v8 = sub_680F00(v7); sprintf(&v16, "%I64d", v8); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 153) + 472))(&v16); v9 = sub_7186B0(); v10 = sub_680F60(v9); sprintf(&v16, "%I64d", v10); (*(void (__stdcall **)(char *))(**((_DWORD **)v2 + 152) + 472))(&v16); sub_6F3170(3, &v14); v15 = v14 + 2; v11 = 0; v12 = (int)(v2 + 496); do { (*(void (__stdcall **)(bool))(**(_DWORD **)(v12 + 16) + 256))(v11 >= v15); if ( v11 < v15 ) { if ( v11 == *((_DWORD *)v2 + 86) ) { if ( v11 < 2 ) v13 = sub_40C190(1094882428); else v13 = sub_40C190(844332920); } else if ( v11 < 2 ) { v13 = sub_40C190(-453449421); } else { v13 = sub_40C190(-521536994); } } else { v13 = sub_40C190(-470466502); } sub_8F2EA0(*(void ***)v12, v13); ++v11; v12 += 4; } while ( v11 < 2 ); } //----- (0070CCB0) -------------------------------------------------------- char __thiscall sub_70CCB0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi _DWORD *v6; // esi _DWORD *v7; // eax v4 = this; if ( !*(_DWORD *)a2 ) return 0; v6 = *(_DWORD **)(*(_DWORD *)a2 + 4); if ( !v6 ) return 0; v7 = (_DWORD *)sub_402BF0(this); return sub_70C760(v7, v6, v4[112]); } //----- (0070CCF0) -------------------------------------------------------- char __thiscall sub_70CCF0(char *this, int a2) { char *v2; // esi _DWORD *v3; // eax int v4; // eax int v5; // edi int v6; // edx v2 = this; v3 = (_DWORD *)sub_6D3800(); LOBYTE(v4) = sub_6D31E0(v3); if ( (_BYTE)v4 ) { if ( *(_BYTE *)(dword_ACDC84 + 38) & 4 ) { LOBYTE(v4) = sub_70C490((_DWORD **)v2, a2); } else { v4 = sub_5D5470(*(_DWORD **)&v2[4 * a2 + 352]); v5 = v4; if ( v4 ) { v6 = 9 * *((_DWORD *)v2 + 86); *((_DWORD *)v2 + 138) = 0; *((_DWORD *)v2 + 136) = 19; *((_DWORD *)v2 + 140) = 0; *((_DWORD *)v2 + 139) = v4; *((_DWORD *)v2 + 137) = a2 + 4 * v6; *((_DWORD *)v2 + 150) = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); *((_DWORD *)v2 + 133) = v2; dword_BA6BCC = (int)(v2 + 524); LOBYTE(v4) = (unsigned int)sub_6BA9B0(*(unsigned __int16 *)(v5 + 8)); } } } return v4; } // ACDC84: using guessed type int dword_ACDC84; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0070CDB0) -------------------------------------------------------- void __thiscall sub_70CDB0(char *this, int a2, int *a3) { char *v3; // esi int v4; // eax int v5; // ecx v3 = this; switch ( a2 ) { case 10: sub_70CCF0(this, (int)a3); break; case 11: sub_70C550((_DWORD **)this, (int)a3); break; case 14: sub_70BFB0(); break; case 15: sub_70BFD0(); break; case 16: sub_70C340((_DWORD **)this); break; case 17: sub_70C380((_DWORD **)this); break; case 18: sub_70C680(this); break; case 19: sub_70C6E0(this); break; case 20: sub_70C030(*a3, a3[1]); break; case 21: sub_70C000(*a3, a3[1]); break; case 23: if ( a3 ) { v4 = sub_5D5470(*(_DWORD **)&this[4 * ((dword_B9E41C & 0x3FF) % 36) + 352]); if ( v4 ) { *((_DWORD *)v3 + 136) = 19; *((_DWORD *)v3 + 138) = 0; v5 = dword_B9E41C & 0x3FF; *((_DWORD *)v3 + 139) = v4; *((_DWORD *)v3 + 137) = v5; *((_DWORD *)v3 + 140) = 0; (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 12))(v4); *((_DWORD *)v3 + 150) = a3; *((_DWORD *)v3 + 133) = v3; dword_BA6BCC = (int)(v3 + 524); } } break; case 24: sub_70C0F0(); break; default: return; } } // B9E41C: using guessed type int dword_B9E41C; // BA6BCC: using guessed type int dword_BA6BCC; //----- (0070CF20) -------------------------------------------------------- int __cdecl sub_70CF20(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int v6; // esi void (__thiscall ***v7)(void *, signed int); // edi int result; // eax void *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v5 = operator new(0x144u); v6 = (int)v5; v9 = v5; v10 = 0; if ( v5 ) { sub_8FE000(v5); *(_DWORD *)v6 = &GuildAcademyStorageTabWin::`vftable'; *(_DWORD *)(v6 + 232) = &GuildAcademyStorageTabWin::`vftable'; *(_BYTE *)(v6 + 254) = 1; } else { v6 = 0; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v10 = 1; sub_403790(&unk_BA6B10, v6); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v6 + 560))(v6, a1, a2, a3, a4, a5) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v6 + 356))(v6); v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = v6; } else { sub_403A70(&unk_BA6B10, &v9, (_DWORD *)v6); if ( v9 ) { v7 = (void (__thiscall ***)(void *, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)v9 + 1) ) { if ( v7 ) (**v7)(v7, 1); } } v10 = -1; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = 0; } return result; } // A00550: using guessed type void *GuildAcademyStorageTabWin::`vftable'; // A0056C: using guessed type void *GuildAcademyStorageTabWin::`vftable'; //----- (0070D080) -------------------------------------------------------- int __cdecl sub_70D080(int a1, int a2, int a3, int a4) { void *v4; // eax int v5; // esi void (__thiscall ***v6)(void *, signed int); // edi int result; // eax void *v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v4 = operator new(0x1C4u); v5 = (int)v4; v8 = v4; v9 = 0; if ( v4 ) { sub_5D6D00((void **)v4); LOBYTE(v9) = 1; *(_DWORD *)v5 = &GuildAcademyStorageInvWin::`vftable'; *(_DWORD *)(v5 + 232) = &GuildAcademyStorageInvWin::`vftable'; *(_DWORD *)(v5 + 448) = -1; sub_5D5B70((_WORD *)v5, 0, 1); } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v9 = 2; sub_403790(&unk_BA6B10, v5); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int))(*(_DWORD *)v5 + 616))(v5, a1, a2, a3, a4) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 356))(v5); v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v5; } else { sub_403A70(&unk_BA6B10, &v8, (_DWORD *)v5); if ( v8 ) { v6 = (void (__thiscall ***)(void *, signed int))v8; if ( !InterlockedDecrement((volatile LONG *)v8 + 1) ) { if ( v6 ) (**v6)(v6, 1); } } v9 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 0; } return result; } // A007A4: using guessed type void *GuildAcademyStorageInvWin::`vftable'; // A007C4: using guessed type void *GuildAcademyStorageInvWin::`vftable'; //----- (0070D1E0) -------------------------------------------------------- volatile LONG *__cdecl sub_70D1E0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x278u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_70C140(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (0070D310) -------------------------------------------------------- char __thiscall sub_70D310(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi char result; // al char *v6; // eax volatile LONG **v7; // eax int v8; // edi int v9; // ebx volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG **v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // eax volatile LONG *v16; // eax volatile LONG v17; // edx const CHAR *v18; // eax volatile LONG **v19; // eax volatile LONG **v20; // eax volatile LONG *v21; // eax int *v22; // ecx volatile LONG **v23; // eax int v24; // eax volatile LONG *v25; // edx volatile LONG **v26; // eax volatile LONG *v27; // eax volatile LONG **v28; // eax volatile LONG *v29; // eax volatile LONG **v30; // eax volatile LONG *v31; // eax volatile LONG **v32; // eax int v33; // eax volatile LONG *v34; // edx volatile LONG **v35; // eax volatile LONG *v36; // eax volatile LONG **v37; // eax volatile LONG *v38; // eax volatile LONG **v39; // eax volatile LONG *v40; // eax volatile LONG *v41; // ST94_4 int v42; // ST90_4 int v43; // ST8C_4 int v44; // eax volatile LONG *v45; // eax volatile LONG v46; // edx const CHAR *v47; // eax volatile LONG *v48; // ST94_4 int v49; // ST90_4 int v50; // ST8C_4 int v51; // eax volatile LONG *v52; // eax volatile LONG v53; // edx const CHAR *v54; // eax volatile LONG **v55; // eax volatile LONG *v56; // ST94_4 int v57; // ST90_4 int v58; // ST8C_4 int v59; // eax volatile LONG *v60; // eax volatile LONG v61; // edx volatile LONG *v62; // ST9C_4 int v63; // edx volatile LONG **v64; // eax volatile LONG *v65; // ST94_4 int v66; // ST90_4 int v67; // ST8C_4 int v68; // eax volatile LONG *v69; // eax volatile LONG v70; // edx volatile LONG *v71; // ST9C_4 volatile LONG **v72; // eax volatile LONG *v73; // ST94_4 int v74; // ST90_4 int v75; // ST8C_4 int v76; // eax volatile LONG *v77; // eax volatile LONG v78; // edx volatile LONG *v79; // ST9C_4 int v80; // edx volatile LONG **v81; // eax volatile LONG *v82; // ST94_4 int v83; // ST90_4 int v84; // ST8C_4 int v85; // eax volatile LONG *v86; // eax volatile LONG v87; // edx volatile LONG *v88; // ST9C_4 int v89; // edx void (__thiscall ***v90)(_DWORD, signed int); // esi int v91; // [esp+B0h] [ebp-5Ch] int v92; // [esp+B4h] [ebp-58h] int v93; // [esp+B8h] [ebp-54h] void (__thiscall **v94)(volatile LONG **, const CHAR *); // [esp+BCh] [ebp-50h] int v95; // [esp+C0h] [ebp-4Ch] volatile LONG *v96; // [esp+C4h] [ebp-48h] int v97; // [esp+C8h] [ebp-44h] int v98; // [esp+CCh] [ebp-40h] int v99; // [esp+D0h] [ebp-3Ch] volatile LONG **v100; // [esp+D4h] [ebp-38h] char v101; // [esp+D8h] [ebp-34h] int v102; // [esp+108h] [ebp-4h] v2 = (int)this; v93 = a2; v97 = 0; v102 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); v96 = v3; if ( !v3 ) goto LABEL_27; v95 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\NPCBank.nif"); sub_8F66B0(v6, (int)&v97, v95); if ( !v97 ) return 0; v7 = sub_8FB140(v97, (int)"Frame", (int)&v99, (int)&v98, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v7, 0, a2, (int)"StorageWin", 0) ) { LABEL_27: v4 = (void (__thiscall ***)(_DWORD, signed int))v97; v102 = -1; if ( v97 && !InterlockedDecrement((volatile LONG *)(v97 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } return 0; } v8 = v99; v9 = v98; v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v97, (int)"Theme", (int)&v99, (int)&v98, v10); else v11 = sub_8FB140(v97, (int)"Theme", (int)&v99, (int)&v98, 0); sub_8F3EB0(v99 - v8, v98 - v9, (int)v11, v2, 0, 0); v100 = sub_8FB140(v97, (int)"ClsNor", (int)&v99, (int)&v98, v96); sub_8FB650(v100, v97, (int)"ClsClick"); sub_8FB650(v100, v97, (int)"ClsOver"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 15, 0, 0); v95 = sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v97 + 72))("HelpLinkNor") ) { v100 = sub_8FB140(v97, (int)"HelpLinkNor", (int)&v99, (int)&v98, (volatile LONG *)v95); sub_8FB650(v100, v97, (int)"HelpLinkClick"); sub_8FB650(v100, v97, (int)"HelpLinkOver"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 24, 0, 0); } v12 = sub_8FB140(v97, (int)"Panel01", (int)&v99, (int)&v98, v96); v13 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v12, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_8FB140(v97, (int)"Panel02", (int)&v99, (int)&v98, v96); sub_8F3EB0(v99 - v8, v98 - v9, (int)v14, v2, 0, 0); if ( sub_8F71E0(v97, (int)"WinTitle", &v99, &v98, &v92, &v91) ) { v15 = sub_421050(0); v16 = sub_8F4A20(v99 - v8, v98 - v9 + 2, v92, v91, v15, v2, 0, 0); v17 = *v16; v100 = (volatile LONG **)v16; (*(void (__thiscall **)(volatile LONG *, signed int))(v17 + 488))(v16, 5); (*((void (__stdcall **)(int *))*v100 + 117))(&dword_AA8D98); v95 = (int)(*v100 + 118); v18 = sub_40C190(524691034); (*(void (__thiscall **)(volatile LONG **, const CHAR *))v95)(v100, v18); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v19 = sub_8FB140(v97, (int)"IconSlot", (int)&v99, (int)&v98, v96); sub_8F3EB0(v99 - v8, v98 - v9, (int)v19, v2, 0, 0); v95 = 0; v100 = (volatile LONG **)(v2 + 352); do { v94 = (void (__thiscall **)(volatile LONG **, const CHAR *))(v95 + 1); sprintf(&v101, "IconSlot%03d", v95 + 1); v20 = sub_8FB140(v97, (int)&v101, (int)&v99, (int)&v98, v96); sub_8F3EB0(v99 - v8, v98 - v9, (int)v20, v2, 0, 0); v21 = (volatile LONG *)sub_70D080(v99 - v8 + 1, v98 - v9 + 1, v95, v2); *v100 = v21; sub_5D5B70(v21, 0, 1); (*(void (__stdcall **)(signed int))(**v100 + 516))(10); (*(void (__stdcall **)(signed int))(**v100 + 560))(11); v22 = (int *)v100; *((_DWORD *)*v100 + 68) = dword_ACEC34; sub_5D3170(*v22, 1); ++v100; v95 = (int)v94; } while ( (signed int)v94 < 36 ); v23 = sub_8FB140(v97, (int)"Tab01_Off", (int)&v99, (int)&v98, v96); v24 = sub_70CF20(v99 - v8, v98 - v9, (int)v23, v2, 16); v25 = v96; *(_DWORD *)(v2 + 496) = v24; *(_DWORD *)(v24 + 272) = dword_AD01E8; v26 = sub_8FB140(v97, (int)"Tab01_Dis", (int)&v99, (int)&v98, v25); v27 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v26, v2, 0, 0); *(_DWORD *)(v2 + 512) = v27; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v27 + 240))(v27, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 512) + 256))(0); v28 = sub_8FB140(v97, (int)"Tab01_On", (int)&v99, (int)&v98, v96); v29 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v28, v2, 0, 0); *(_DWORD *)(v2 + 504) = v29; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v29 + 240))(v29, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 504) + 256))(0); v30 = sub_8FB140(v97, (int)"Num01", (int)&v99, (int)&v98, 0); v31 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v30, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v31 + 240))(v31, 0); v32 = sub_8FB140(v97, (int)"Tab02_Off", (int)&v99, (int)&v98, v96); v33 = sub_70CF20(v99 - v8, v98 - v9, (int)v32, v2, 17); v34 = v96; *(_DWORD *)(v2 + 500) = v33; *(_DWORD *)(v33 + 272) = dword_AD01E8; v35 = sub_8FB140(v97, (int)"Tab02_Dis", (int)&v99, (int)&v98, v34); v36 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v35, v2, 0, 0); *(_DWORD *)(v2 + 516) = v36; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 516) + 256))(0); v37 = sub_8FB140(v97, (int)"Tab02_On", (int)&v99, (int)&v98, v96); v38 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v37, v2, 0, 0); *(_DWORD *)(v2 + 508) = v38; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 508) + 256))(0); v39 = sub_8FB140(v97, (int)"Num02", (int)&v99, (int)&v98, 0); v40 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v39, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 504) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 516) + 256))(1); v100 = sub_8FB140(v97, (int)"DrawNor", (int)&v99, (int)&v98, v96); sub_8FB650(v100, v97, (int)"DrawClick"); sub_8FB650(v100, v97, (int)"DrawOver"); v41 = sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 19, 0, 0); v100 = (volatile LONG **)v41; v42 = sub_421050(0); v43 = (*((int (**)(void))*v100 + 37))(); v44 = (*((int (**)(void))*v100 + 36))(); v45 = sub_8F4A20(0, 1, v44, v43, v42, (int)v41, 0, 0); v46 = *v45; v100 = (volatile LONG **)v45; (*(void (__thiscall **)(volatile LONG *, signed int))(v46 + 488))(v45, 5); v94 = (void (__thiscall **)(volatile LONG **, const CHAR *))(*v100 + 118); v47 = sub_40C190(-1984524408); (*v94)(v100, v47); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v100 = sub_8FB140(v97, (int)"PayNor", (int)&v99, (int)&v98, v96); sub_8FB650(v100, v97, (int)"PayClick"); sub_8FB650(v100, v97, (int)"PayOver"); v48 = sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 18, 0, 0); v100 = (volatile LONG **)v48; v49 = sub_421050(0); v50 = (*((int (**)(void))*v100 + 37))(); v51 = (*((int (**)(void))*v100 + 36))(); v52 = sub_8F4A20(0, 1, v51, v50, v49, (int)v48, 0, 0); v53 = *v52; v100 = (volatile LONG **)v52; (*(void (__thiscall **)(volatile LONG *, signed int))(v53 + 488))(v52, 5); v94 = (void (__thiscall **)(volatile LONG **, const CHAR *))(*v100 + 118); v54 = sub_40C190(750293376); (*v94)(v100, v54); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v55 = sub_8FB140(v97, (int)"GemInput", (int)&v99, (int)&v98, v96); v56 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v55, v2, 0, 0); v100 = (volatile LONG **)v56; v57 = sub_421050(0); v58 = (*((int (**)(void))*v100 + 37))(); v59 = (*((int (**)(void))*v100 + 36))(); v60 = sub_8F4A20(0, 1, v59, v58, v57, (int)v56, 0, 0); v61 = *v60; v100 = (volatile LONG **)v60; (*(void (__thiscall **)(volatile LONG *, signed int))(v61 + 488))(v60, 6); (*((void (__stdcall **)(void *))*v100 + 118))(&unk_A00335); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v62 = v96; v63 = v97; *(_DWORD *)(v2 + 620) = v100; v100 = sub_8FB140(v63, (int)"GemBtn", (int)&v99, (int)&v98, v62); sub_8FB650(v100, v97, (int)"GemBtn"); sub_8FB650(v100, v97, (int)"GemBtn"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 0, 0, 0); v64 = sub_8FB140(v97, (int)"GoldInput", (int)&v99, (int)&v98, v96); v65 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v64, v2, 0, 0); v100 = (volatile LONG **)v65; v66 = sub_421050(0); v67 = (*((int (**)(void))*v100 + 37))(); v68 = (*((int (**)(void))*v100 + 36))(); v69 = sub_8F4A20(0, 1, v68, v67, v66, (int)v65, 0, 0); v70 = *v69; v100 = (volatile LONG **)v69; (*(void (__thiscall **)(volatile LONG *, signed int))(v70 + 488))(v69, 6); (*((void (__stdcall **)(void *))*v100 + 118))(&unk_A00336); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v71 = v96; *(_DWORD *)(v2 + 616) = v100; v100 = sub_8FB140(v97, (int)"GoldBtn", (int)&v99, (int)&v98, v71); sub_8FB650(v100, v97, (int)"GoldBtn"); sub_8FB650(v100, v97, (int)"GoldBtn"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 0, 0, 0); v72 = sub_8FB140(v97, (int)"SilverInput", (int)&v99, (int)&v98, v96); v73 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v72, v2, 0, 0); v100 = (volatile LONG **)v73; v74 = sub_421050(0); v75 = (*((int (**)(void))*v100 + 37))(); v76 = (*((int (**)(void))*v100 + 36))(); v77 = sub_8F4A20(0, 1, v76, v75, v74, (int)v73, 0, 0); v78 = *v77; v100 = (volatile LONG **)v77; (*(void (__thiscall **)(volatile LONG *, signed int))(v78 + 488))(v77, 6); (*((void (__stdcall **)(void *))*v100 + 118))(&unk_A00337); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v79 = v96; v80 = v97; *(_DWORD *)(v2 + 612) = v100; v100 = sub_8FB140(v80, (int)"SilverBtn", (int)&v99, (int)&v98, v79); sub_8FB650(v100, v97, (int)"SilverBtn"); sub_8FB650(v100, v97, (int)"SilverBtn"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 0, 0, 0); v81 = sub_8FB140(v97, (int)"CopperInput", (int)&v99, (int)&v98, v96); v82 = sub_8F3EB0(v99 - v8, v98 - v9, (int)v81, v2, 0, 0); v100 = (volatile LONG **)v82; v83 = sub_421050(0); v84 = (*((int (**)(void))*v100 + 37))(); v85 = (*((int (**)(void))*v100 + 36))(); v86 = sub_8F4A20(0, 1, v85, v84, v83, (int)v82, 0, 0); v87 = *v86; v100 = (volatile LONG **)v86; (*(void (__thiscall **)(volatile LONG *, signed int))(v87 + 488))(v86, 6); (*((void (__stdcall **)(void *))*v100 + 118))(&unk_A0033E); (*((void (__stdcall **)(_DWORD))*v100 + 60))(0); v88 = v96; v89 = v97; *(_DWORD *)(v2 + 608) = v100; v100 = sub_8FB140(v89, (int)"CopperBtn", (int)&v99, (int)&v98, v88); sub_8FB650(v100, v97, (int)"CopperBtn"); sub_8FB650(v100, v97, (int)"CopperBtn"); sub_8FE0F0(v99 - v8, v98 - v9, (int)v100, v2, 0, 0, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); *(_DWORD *)(v2 + 520) = sub_573FD0(v93); v102 = -1; if ( v97 ) { v90 = (void (__thiscall ***)(_DWORD, signed int))v97; if ( !InterlockedDecrement((volatile LONG *)(v97 + 4)) ) { if ( v90 ) (**v90)(v90, 1); } } result = 1; } else { v102 = -1; sub_410C00(&v97); result = 0; } return result; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // ACEC34: using guessed type int dword_ACEC34; // AD01E8: using guessed type int dword_AD01E8; //----- (0070E060) -------------------------------------------------------- void *__thiscall sub_70E060(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyStorageTabWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyStorageTabWin::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A00550: using guessed type void *GuildAcademyStorageTabWin::`vftable'; // A0056C: using guessed type void *GuildAcademyStorageTabWin::`vftable'; //----- (0070E0A0) -------------------------------------------------------- void *__thiscall sub_70E0A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GuildAcademyStorageInvWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyStorageInvWin::`vftable'; sub_5D5650(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A007A4: using guessed type void *GuildAcademyStorageInvWin::`vftable'; // A007C4: using guessed type void *GuildAcademyStorageInvWin::`vftable'; //----- (0070E0E0) -------------------------------------------------------- _DWORD *__thiscall sub_70E0E0(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; *(_DWORD *)this = &GuildAcademyStorageWin::`vftable'; *((_DWORD *)this + 58) = &GuildAcademyStorageWin::`vftable'; v3 = (_DWORD *)*((_DWORD *)this + 130); if ( v3 ) sub_8F9E00(&unk_BA6B10, v3); v2[134] = &DropContents::`vftable'; v2[131] = &PgWinDrop::`vftable'; sub_8F10F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; // 9ACB60: using guessed type void *DropContents::`vftable'; // A00A34: using guessed type void *GuildAcademyStorageWin::`vftable'; // A00A54: using guessed type void *GuildAcademyStorageWin::`vftable'; //----- (0070E1A0) -------------------------------------------------------- int __thiscall sub_70E1A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 0; sub_466AF0(v2, 0, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (0070E1D0) -------------------------------------------------------- int __thiscall sub_70E1D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 1; sub_466AF0(v2, 1, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (0070E200) -------------------------------------------------------- int __thiscall sub_70E200(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // al int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v3 = *((_BYTE *)v1 + 410) == 0; v1[86] = 2; *((_BYTE *)v1 + 410) = v3; sub_466AF0(v2, 2, v3, 1); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (0070E240) -------------------------------------------------------- int __thiscall sub_70E240(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 3; sub_466AF0(v2, 3, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (0070E270) -------------------------------------------------------- int __thiscall sub_70E270(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[96]; if ( v2 ) { v1[86] = 4; sub_466AF0(v2, 4, 0, 0); result = sub_465130((_DWORD *)v1[96]); } return result; } //----- (0070E2A0) -------------------------------------------------------- char sub_70E2A0() { return sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0070E310) -------------------------------------------------------- char sub_70E310() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "GuildAcademyWin"); return (char)v0; } //----- (0070E340) -------------------------------------------------------- void __thiscall sub_70E340(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this == *(_DWORD ***)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); sub_4A54D0(v1[74]); } // AD01E8: using guessed type int dword_AD01E8; //----- (0070E370) -------------------------------------------------------- char __thiscall sub_70E370(_DWORD *this) { int v1; // eax int v2; // ecx v2 = this[74]; v1 = *(_DWORD *)(v2 + 908); if ( v1 ) LOBYTE(v1) = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 908)); return v1; } //----- (0070E380) -------------------------------------------------------- int __thiscall sub_70E380(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (0070E400) -------------------------------------------------------- char __thiscall sub_70E400(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) { sub_4E3710(v2[97], v2[99]); sub_4E3710(v2[96], v2[98]); LOBYTE(v3) = sub_4E3710(v2[100], v2[101]); } return v3; } //----- (0070E460) -------------------------------------------------------- int __thiscall sub_70E460(void *this, int a2) { int result; // eax result = (int)this; if ( this == *(void **)(dword_AD01E8 + 276) ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0070E480) -------------------------------------------------------- char __thiscall sub_70E480(void *this, int a2) { void *v2; // esi int v3; // edi LONG v4; // ebx unsigned int v5; // eax char result; // al _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // ecx _DWORD *v12; // [esp+Ch] [ebp-4h] v2 = this; if ( this == *(void **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); v3 = pt.x; v4 = pt.y; v5 = sub_464F50(*((_DWORD **)v2 + 96)); result = sub_464B60(*((_DWORD **)v2 + 96), v5, &v12); if ( v12 ) { v7 = (_DWORD *)sub_680810(byte_AD9238); if ( *v12 != *v7 || v12[1] != v7[1] || v12[2] != v7[2] || v12[3] != v7[3] || v12[4] != v7[4] ) { (*(void (__stdcall **)(int, LONG))(**((_DWORD **)v2 + 113) + 308))(v3, v4); sub_58DFD0(*((_DWORD **)v2 + 113)); sub_58E080(*((_DWORD **)v2 + 113), v3, *((_DWORD *)v2 + 114)); v8 = (_DWORD *)sub_6D3800(); if ( sub_6D3220(v8) ) { sub_58E080(*((_DWORD **)v2 + 113), v3, *((_DWORD *)v2 + 116)); sub_58E080(*((_DWORD **)v2 + 113), v3, *((_DWORD *)v2 + 117)); } v9 = (_DWORD *)sub_6D3800(); if ( sub_6D30E0(v9) ) sub_58E080(*((_DWORD **)v2 + 113), v3, *((_DWORD *)v2 + 115)); v10 = (_DWORD *)sub_6D3800(); if ( sub_6D3050(v10) ) sub_58E080(*((_DWORD **)v2 + 113), v3, *((_DWORD *)v2 + 118)); v11 = (_DWORD *)*((_DWORD *)v2 + 113); if ( v11[104] ) { sub_58D930(v11, 0); sub_8FA050(&unk_BA6B10, 0, *((_DWORD **)v2 + 113)); result = (*(int (__stdcall **)(signed int))(**((_DWORD **)v2 + 113) + 240))(1); } else { result = sub_58DFD0(v11); } } else { sub_58DFD0(*((_DWORD **)v2 + 113)); result = sub_8FA190(&unk_BA6B10, *((_DWORD *)v2 + 113)); } } return result; } // AD01E8: using guessed type int dword_AD01E8; //----- (0070E630) -------------------------------------------------------- int __thiscall sub_70E630(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this + 58; if ( this[59] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*this[59] + 4))(40, &a2, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v2[1] + 20))(40, &a2, v2); } return ((int (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v2)[5])(v2, 40, &a2, v2); } //----- (0070E6D0) -------------------------------------------------------- char __thiscall sub_70E6D0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax char *v3; // eax v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v2) ) return sub_8F82A0(&unk_BA6B10, v1[111]); v3 = (char *)sub_40C190(71048826); return (unsigned int)sub_462C30(1, v3); } //----- (0070E710) -------------------------------------------------------- char __thiscall sub_70E710(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // eax unsigned int v3; // eax char result; // al _DWORD **v5; // esi const CHAR *v6; // edi _DWORD *v7; // [esp+8h] [ebp-34h] char v8[4]; // [esp+Ch] [ebp-30h] int v9; // [esp+10h] [ebp-2Ch] int v10; // [esp+14h] [ebp-28h] int v11; // [esp+18h] [ebp-24h] int v12; // [esp+1Ch] [ebp-20h] char v13[4]; // [esp+20h] [ebp-1Ch] int v14; // [esp+24h] [ebp-18h] int v15; // [esp+28h] [ebp-14h] int v16; // [esp+2Ch] [ebp-10h] int v17; // [esp+30h] [ebp-Ch] char v18; // [esp+34h] [ebp-8h] v1 = this; v2 = (_DWORD *)sub_715490(); if ( (unsigned __int8)sub_715330(v2) ) { v3 = sub_464F50(v1[96]); result = sub_464B60(v1[96], v3, &v7); if ( result ) { *(_DWORD *)v13 = *v7; v14 = v7[1]; v15 = v7[2]; v16 = v7[3]; v17 = v7[4]; v18 = 0; v12 = 0; v11 = 0; v10 = 0; v9 = 0; *(_DWORD *)v8 = 0; strncpy(v8, v13, 0x14u); result = sub_6F36A0(&off_AB7F2C, 38, 31, v8, 0x14u); } } else { v5 = v1 + 58; v6 = sub_40C190(1029917518); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } result = ((int (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0070E840) -------------------------------------------------------- void __thiscall sub_70E840(_DWORD **this) { _DWORD **v1; // esi _DWORD **v2; // esi const CHAR *v3; // edi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD **v6; // esi const CHAR *v7; // edi unsigned int v8; // eax _DWORD *v9; // ecx _DWORD *v10; // [esp+8h] [ebp-20h] char v11[4]; // [esp+Ch] [ebp-1Ch] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int v14; // [esp+18h] [ebp-10h] int v15; // [esp+1Ch] [ebp-Ch] char v16; // [esp+20h] [ebp-8h] v1 = this; if ( (sub_464F50(this[96]) & 0x80000000) == 0 ) { v4 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v4) || (v5 = (_DWORD *)sub_715490(), sub_715120(v5)) ) { v8 = sub_464F50(v1[96]); if ( sub_464B60(v1[96], v8, &v10) ) { *(_DWORD *)v11 = *v10; v12 = v10[1]; v13 = v10[2]; v14 = v10[3]; v9 = v1[74]; v15 = v10[4]; v16 = 0; sub_4C1490(v9, v11); } } else { v6 = v1 + 58; v7 = sub_40C190(489651314); if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v7, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); } } else { v2 = v1 + 58; v3 = sub_40C190(-1968863276); if ( v2[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v2[1] + 4))(25, v3, v2); if ( v2[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v2[1] + 20))(25, v3, v2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v2)[5])(v2, 25, v3, v2); } } //----- (0070E9A0) -------------------------------------------------------- int __thiscall sub_70E9A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[96]; v2 = (_DWORD *)this[98]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (0070E9E0) -------------------------------------------------------- int __thiscall sub_70E9E0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[97]; v2 = (_DWORD *)this[99]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (0070EA20) -------------------------------------------------------- int __thiscall sub_70EA20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int result; // eax v1 = (_DWORD *)this[100]; v2 = (_DWORD *)this[101]; if ( v2 ) { if ( v1 ) { sub_4638F0(v2, v1[84]); v1[86] = v2[75]; result = sub_465130(v1); } } return result; } //----- (0070EAD0) -------------------------------------------------------- void __thiscall sub_70EAD0(int this, int a2) { int v2; // edi int v3; // eax int v4; // edx int v5; // eax int v6; // ebx int v7; // eax CHAR *v8; // eax char *v9; // eax unsigned int v10; // eax int v11; // ST28_4 int v12; // ST24_4 int v13; // ST20_4 const char *v14; // eax unsigned int v15; // eax int v16; // ST20_4 int v17; // ST24_4 int v18; // ST28_4 const char *v19; // eax _DWORD *v20; // ecx int v21; // [esp+14h] [ebp-3Ch] int v22; // [esp+18h] [ebp-38h] int v23; // [esp+1Ch] [ebp-34h] int v24; // [esp+20h] [ebp-30h] int v25; // [esp+24h] [ebp-2Ch] char v26; // [esp+28h] [ebp-28h] char v27[4]; // [esp+2Ch] [ebp-24h] int v28; // [esp+30h] [ebp-20h] int v29; // [esp+34h] [ebp-1Ch] int v30; // [esp+38h] [ebp-18h] int v31; // [esp+3Ch] [ebp-14h] int v32; // [esp+40h] [ebp-10h] int v33; // [esp+44h] [ebp-Ch] int v34; // [esp+48h] [ebp-8h] v2 = this; if ( *(_DWORD *)(this + 384) && (!*(_BYTE *)(this + 408) || *(_BYTE *)(a2 + 85) & 1) ) { v3 = *(_DWORD *)a2; v22 = *(_DWORD *)(a2 + 4); v4 = *(_DWORD *)(a2 + 12); v21 = v3; v5 = *(_DWORD *)(a2 + 8); v24 = v4; v23 = v5; v25 = *(_DWORD *)(a2 + 16); v26 = 0; v6 = ((int (__stdcall *)(int *))loc_466CA0)(&v21); v7 = sub_7474E0((_DWORD *)(dword_AC9C84 + 4), *(unsigned __int8 *)(a2 + 89)); if ( v7 ) v8 = (CHAR *)(v7 + 21); else v8 = (CHAR *)&byte_9A8050; sub_4661A0(*(_DWORD **)(v2 + 384), v6, 1, v8); v9 = sub_7549E0("%d", *(unsigned __int8 *)(a2 + 90)); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 2, v9); v10 = *(_DWORD *)(a2 + 85); v11 = (*(_DWORD *)(a2 + 85) >> 16) & 0x1F; v12 = (unsigned __int16)v10 >> 12; v13 = (v10 >> 1) & 0x7FF; v14 = sub_40A910(1296251015); stru_ACEBE4.tm_year = v13 - 1900; stru_ACEBE4.tm_mon = v12 - 1; stru_ACEBE4.tm_mday = v11; strftime(v27, 0x20u, v14, &stru_ACEBE4); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 3, v27); *(_DWORD *)v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v15 = *(_DWORD *)(a2 + 104); v16 = (*(_DWORD *)(a2 + 104) >> 16) & 0x1F; v17 = (unsigned __int16)v15 >> 12; v18 = (v15 >> 1) & 0x7FF; v19 = sub_40A910(1296251015); stru_ACEBE4.tm_year = v18 - 1900; stru_ACEBE4.tm_mon = v17 - 1; stru_ACEBE4.tm_mday = v16; strftime(v27, 0x20u, v19, &stru_ACEBE4); sub_4661A0(*(_DWORD **)(v2 + 384), v6, 4, v27); sub_464B20(*(_DWORD **)(v2 + 384), v6, a2); sub_464BA0(*(_DWORD **)(v2 + 384), v6, 1); v20 = *(_DWORD **)(v2 + 384); if ( *(_BYTE *)(a2 + 85) & 1 ) sub_464BE0(v20, v6, 255, 255, 0); else sub_464BE0(v20, v6, 200, 200, 200); } } // AC9C84: using guessed type int dword_AC9C84; //----- (0070EFE0) -------------------------------------------------------- void __thiscall sub_70EFE0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx int v3; // eax _DWORD *v4; // ecx int v5; // eax int v6; // esi _DWORD *v7; // ecx const CHAR *v8; // eax int v9; // ebx int v10; // ST20_4 int v11; // ST28_4 const char *v12; // eax int v13; // ebx _DWORD *v14; // [esp+8h] [ebp-4Ch] int v15; // [esp+10h] [ebp-44h] CHAR *v16; // [esp+14h] [ebp-40h] char v17; // [esp+18h] [ebp-3Ch] int v18; // [esp+38h] [ebp-1Ch] int v19; // [esp+3Ch] [ebp-18h] int v20; // [esp+40h] [ebp-14h] int v21; // [esp+44h] [ebp-10h] int v22; // [esp+48h] [ebp-Ch] char v23; // [esp+4Ch] [ebp-8h] v1 = this; v2 = (_DWORD *)this[100]; if ( v2 ) { sub_466A50(v2); v3 = sub_715490(); if ( v3 ) { v4 = *(_DWORD **)(v3 + 1956); v5 = *(_DWORD *)(v3 + 1964); if ( v5 ) { v15 = v5; while ( 1 ) { v6 = v4[2]; v7 = (_DWORD *)*v4; v18 = *(_DWORD *)(v6 + 8); v19 = *(_DWORD *)(v6 + 12); v14 = v7; v20 = *(_DWORD *)(v6 + 16); v21 = *(_DWORD *)(v6 + 20); v22 = *(_DWORD *)(v6 + 24); v23 = 0; switch ( *(_DWORD *)(v6 + 28) ) { case 0x64: v8 = sub_4090F0(1284329033); goto LABEL_11; case 0x65: v8 = sub_4090F0(1279068425); goto LABEL_11; case 0x66: v8 = sub_4090F0(1412824912); goto LABEL_11; case 0x67: v8 = sub_4090F0(1233868889); LABEL_11: v16 = (CHAR *)v8; if ( v8 ) { v9 = *(unsigned __int8 *)(v6 + 7); v10 = *(unsigned __int8 *)(v6 + 6); v11 = *(unsigned __int16 *)(v6 + 4); v12 = sub_40A910(1296251015); stru_ACEBE4.tm_year = v11 - 1900; stru_ACEBE4.tm_mon = v10 - 1; stru_ACEBE4.tm_mday = v9; strftime(&v17, 0x20u, v12, &stru_ACEBE4); v13 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[100], &v17); sub_4661A0((_DWORD *)v1[100], v13, 1, &v18); sub_4661A0((_DWORD *)v1[100], v13, 2, v16); sub_464B20((_DWORD *)v1[100], v13, v6); sub_464BA0((_DWORD *)v1[100], v13, 1); } break; default: break; } if ( !--v15 ) break; v4 = v14; } } sub_464D00((_DWORD *)v1[100], 4); sub_464DA0((_DWORD *)v1[100], 0, 5); sub_464DA0((_DWORD *)v1[100], 1u, 4); sub_464DA0((_DWORD *)v1[100], 2u, 4); sub_465130((_DWORD *)v1[100]); } } } //----- (0070F1C0) -------------------------------------------------------- void __thiscall sub_70F1C0(_DWORD *this) { int v1; // esi int v2; // ebx signed int v3; // edi int v4; // [esp+4h] [ebp-4h] v1 = (int)this; if ( this[96] && (*(unsigned __int8 (**)(void))(*(_DWORD *)this[96] + 260))() ) { sub_466A50(*(_DWORD **)(v1 + 384)); v2 = sub_713B50(); v3 = 0; if ( *(_WORD *)(v2 + 4) > 0u ) { v4 = v2 + 6; do { if ( *(_BYTE *)(v1 + 409) ) sub_70EAD0(v1, v4); v4 += 109; ++v3; } while ( v3 < *(unsigned __int16 *)(v2 + 4) ); } sub_466AF0(*(_DWORD **)(v1 + 384), *(_DWORD *)(v1 + 344), 0, 0); sub_464D00(*(_DWORD **)(v1 + 384), 4); sub_464DA0(*(_DWORD **)(v1 + 384), 0, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 1u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 2u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 3u, 5); sub_464DA0(*(_DWORD **)(v1 + 384), 4u, 5); sub_465130(*(_DWORD **)(v1 + 384)); sub_4638F0(*(_DWORD **)(v1 + 392), *(_DWORD *)(*(_DWORD *)(v1 + 384) + 336)); } } //----- (0070F2D0) -------------------------------------------------------- void __thiscall sub_70F2D0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // ebx _DWORD *v12; // ecx _DWORD *v13; // esi int v14; // edi _DWORD *v15; // eax int v16; // edx int v17; // eax _DWORD *v18; // ecx int v19; // esi char *v20; // eax _DWORD *v21; // eax char v22[4]; // [esp+8h] [ebp-1Ch] int v23; // [esp+Ch] [ebp-18h] int v24; // [esp+10h] [ebp-14h] int v25; // [esp+14h] [ebp-10h] int v26; // [esp+18h] [ebp-Ch] char v27; // [esp+1Ch] [ebp-8h] v11 = this; v12 = (_DWORD *)this[96]; if ( v12 ) { sub_466A50(v12); v13 = (_DWORD *)sub_715490(); v14 = sub_713B50(); v15 = (_DWORD *)sub_7154B0(); sub_7067E0(v15, &a2, &a7); v16 = *(unsigned __int16 *)(v14 + 4); v17 = 0; if ( v16 <= 0 ) { LABEL_10: v23 = a8; v24 = a9; *(_DWORD *)v22 = a7; v25 = a10; v26 = a11; v27 = 0; if ( (_BYTE)a7 && v13[288] == a2 && v13[289] == a3 && v13[290] == a4 && v13[291] == a5 && v13[292] == a6 ) { v13[288] = a7; v13[289] = a8; v13[290] = a9; v13[291] = a10; v13[292] = a11; v19 = *(_DWORD *)v11[106]; v20 = sub_7549E0(&byte_A012B4, v22); (*(void (__thiscall **)(_DWORD, char *))(v19 + 472))(v11[106], v20); } } else { v18 = (_DWORD *)(v14 + 14); while ( *(v18 - 2) != a2 || *(v18 - 1) != a3 || *v18 != a4 || v18[1] != a5 || v18[2] != a6 ) { ++v17; v18 = (_DWORD *)((char *)v18 + 109); if ( v17 >= v16 ) goto LABEL_10; } v21 = (_DWORD *)(109 * v17 + v14 + 6); *v21 = a7; v21[1] = a8; v21[2] = a9; v21[3] = a10; v21[4] = a11; sub_70F1C0(v11); } } } //----- (0070F470) -------------------------------------------------------- void __thiscall sub_70F470(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx int v3; // edi _DWORD *v4; // eax bool v5; // al void (__stdcall *v6)(signed int); // edx int v7; // ebx int v8; // ecx int v9; // edx int v10; // ecx int *v11; // edx int v12; // ebx char *v13; // eax char *v14; // eax int v15; // ebx int v16; // ST28_4 int v17; // ST24_4 char *v18; // eax char *v19; // eax int v20; // ebx int v21; // ST28_4 char *v22; // eax char *v23; // eax int v24; // ebx int v25; // ST28_4 char *v26; // eax char *v27; // eax int v28; // ecx unsigned int v29; // edx int v30; // ST28_4 int v31; // ST24_4 char *v32; // eax char *v33; // eax int v34; // ecx int v35; // edx int v36; // ecx int v37; // edx const CHAR *v38; // eax const CHAR *v39; // eax const CHAR *v40; // eax char *v41; // eax const CHAR *v42; // eax char *v43; // eax const CHAR *v44; // eax char *v45; // eax int v46; // eax int v47; // edx int v48; // eax const CHAR *v49; // edi int v50; // eax rsize_t v51; // edi unsigned int v52; // eax int v53; // ebx const void *v54; // eax int v55; // ecx void *v56; // eax HDC hdc; // [esp+10h] [ebp-490h] unsigned int v58; // [esp+14h] [ebp-48Ch] char v59; // [esp+18h] [ebp-488h] rsize_t MaxCount; // [esp+1Ch] [ebp-484h] int v61; // [esp+20h] [ebp-480h] void *Src; // [esp+24h] [ebp-47Ch] rsize_t v63; // [esp+34h] [ebp-46Ch] unsigned int v64; // [esp+38h] [ebp-468h] char v65; // [esp+40h] [ebp-460h] char v66; // [esp+41h] [ebp-45Fh] _BYTE v67[256]; // [esp+240h] [ebp-260h] char Dst; // [esp+340h] [ebp-160h] char v69; // [esp+341h] [ebp-15Fh] char v70; // [esp+440h] [ebp-60h] int v71; // [esp+460h] [ebp-40h] int v72; // [esp+464h] [ebp-3Ch] int v73; // [esp+468h] [ebp-38h] int v74; // [esp+46Ch] [ebp-34h] int v75; // [esp+470h] [ebp-30h] char v76; // [esp+474h] [ebp-2Ch] char v77[4]; // [esp+478h] [ebp-28h] int v78; // [esp+47Ch] [ebp-24h] int v79; // [esp+480h] [ebp-20h] int v80; // [esp+484h] [ebp-1Ch] int v81; // [esp+488h] [ebp-18h] char v82; // [esp+48Ch] [ebp-14h] int v83; // [esp+49Ch] [ebp-4h] v1 = this; sub_70F1C0(this); if ( !v1[90] ) { v2 = (_DWORD *)sub_6D3800(); MaxCount = (rsize_t)v2; v3 = sub_715490(); v61 = sub_713B50(); v4 = (_DWORD *)sub_6D3800(); v5 = sub_6D3020(v4); v6 = *(void (__stdcall **)(signed int))(*(_DWORD *)v1[112] + 256); if ( v5 ) v6(1); else v6(0); if ( sub_715120((_DWORD *)v3) || (unsigned __int8)sub_6D3010(v2) ) { v8 = *(_DWORD *)(v3 + 1156); v9 = *(_DWORD *)(v3 + 1160); *(_DWORD *)v77 = *(_DWORD *)(v3 + 1152); v80 = *(_DWORD *)(v3 + 1164); v78 = v8; v10 = *(_DWORD *)(v3 + 1168); v79 = v9; v11 = (int *)v1[106]; v81 = v10; v82 = 0; v12 = *v11; v13 = (char *)sub_4090F0(1890895818); v14 = sub_7549E0(v13, v77); (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(v1[106], v14); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[106] + 256))(1); v15 = *(_DWORD *)v1[107]; v16 = *(unsigned __int16 *)(v61 + 4); v17 = sub_713AF0((unsigned __int16 *)v61); v18 = (char *)sub_4090F0(-1650147933); v19 = sub_7549E0(v18, v17, v16); (*(void (__thiscall **)(_DWORD, char *))(v15 + 472))(v1[107], v19); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[107] + 256))(1); v20 = *(_DWORD *)v1[108]; v21 = *(_DWORD *)(v3 + 1176); v22 = (char *)sub_4090F0(24423); v23 = sub_7549E0(v22, v21); (*(void (__thiscall **)(_DWORD, char *))(v20 + 472))(v1[108], v23); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[108] + 256))(1); v24 = *(_DWORD *)v1[109]; v25 = *(_DWORD *)(v3 + 1180); v26 = (char *)sub_4090F0(2089168380); v27 = sub_7549E0(v26, v25); (*(void (__thiscall **)(_DWORD, char *))(v24 + 472))(v1[109], v27); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[109] + 256))(1); v28 = *(_DWORD *)(v3 + 1184); v29 = v28 % 3600 + ((unsigned __int64)(-2004318071i64 * (v28 % 3600)) >> 32); v30 = ((signed int)v29 >> 5) + (v29 >> 31); v31 = v28 / 3600; v61 = *(_DWORD *)v1[110] + 472; v32 = (char *)sub_40A910(-271590143); v33 = sub_7549E0(v32, v31, v30); (*(void (__thiscall **)(_DWORD, char *))v61)(v1[110], v33); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[110] + 256))(1); } else { v7 = (int)(v1 + 106); v61 = 5; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); v7 += 4; --v61; } while ( v61 ); } sub_466A50((_DWORD *)v1[97]); if ( (unsigned __int8)sub_6D3010((_DWORD *)MaxCount) || sub_715120((_DWORD *)v3) ) { if ( *(_BYTE *)(v3 + 1376) ) { v34 = *(_DWORD *)(v3 + 1356); v35 = *(_DWORD *)(v3 + 1360); v73 = *(_DWORD *)(v3 + 1364); v71 = v34; v36 = *(_DWORD *)(v3 + 1368); v72 = v35; v37 = *(_DWORD *)(v3 + 1372); v74 = v36; v75 = v37; v76 = 0; v65 = 0; memset(&v66, 0, 0x1FFu); v38 = sub_40A910(439042339); sprintf(&v65, "%s", v38); strftime(&v70, 0x1Fu, &v65, (const struct tm *)(v3 + 1320)); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[97], &unk_A00C8F); v39 = sub_4090F0(189090914); ((void (__thiscall *)(_DWORD, const CHAR *))loc_466CA0)(v1[97], v39); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[97], &unk_A00C96); v40 = sub_40C190(-2037134623); v41 = sub_7549E0("%s : %s", v40, &v71); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[97], v41); v42 = sub_40C190(-2087492459); v43 = sub_7549E0("%s : %s", v42, &v70); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[97], v43); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[97], &unk_A00C97); v44 = sub_40C190(-438189863); v45 = sub_7549E0("%s :", v44); ((void (__thiscall *)(_DWORD, char *))loc_466CA0)(v1[97], v45); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[97], &unk_A00CAE); strcpy(&v65, (const char *)(v3 + 1376)); v46 = v1[97]; if ( (*(_DWORD *)(v46 + 300) - *(_DWORD *)(v46 + 296)) >> 2 ) { v47 = *(_DWORD *)(v46 + 296); if ( (*(_DWORD *)(*(_DWORD *)v47 + 336) - *(_DWORD *)(*(_DWORD *)v47 + 332)) >> 2 ) v48 = **(_DWORD **)(*(_DWORD *)v47 + 332); else v48 = 0; v61 = v48; } else { v61 = 0; } hdc = *(HDC *)(*(_DWORD *)(*(_DWORD *)(v61 + 288) + 312) + 192); v67[0] = 0; memset(&v67[1], 0, 0xFFu); v64 = 15; v63 = 0; LOBYTE(Src) = 0; sub_4018E0(&Src, &v65, strlen(&v65)); v83 = 0; v59 = 10; while ( 1 ) { memset(v67, 0, 0x100u); v49 = (const CHAR *)Src; if ( v64 < 0x10 ) v49 = (const CHAR *)&Src; v50 = (*(int (**)(void))(*(_DWORD *)v61 + 144))(); v51 = sub_8F5700((int)v67, v49, hdc, v50 - 10); v52 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v59, 0x100000000ui64); v58 = v52; if ( !v51 ) break; if ( v52 > v51 || (MaxCount = v52, v52 == -1) ) MaxCount = v51; Dst = 0; memset(&v69, 0, 0xFFu); v53 = MaxCount; if ( v63 < MaxCount ) v53 = v63; v54 = Src; if ( v64 < 0x10 ) v54 = &Src; memcpy_s(&Dst, 0x100u, v54, v53); v55 = v1[97]; *(&Dst + v53) = 0; ((void (__thiscall *)(int, char *))loc_466CA0)(v55, &Dst); if ( v58 > v51 ) sub_4014F0(&Src, 0, MaxCount); else sub_4014F0(&Src, 0, MaxCount + 1); } v56 = Src; if ( v64 < 0x10 ) v56 = &Src; ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(v1[97], v56); sub_464D00((_DWORD *)v1[97], 4); sub_465130((_DWORD *)v1[97]); sub_4638F0((_DWORD *)v1[99], *(_DWORD *)(v1[96] + 336)); v83 = -1; if ( v64 >= 0x10 ) operator delete(Src); v64 = 15; v63 = 0; LOBYTE(Src) = 0; } } } sub_70EFE0(v1); } //----- (0070FB80) -------------------------------------------------------- void __thiscall sub_70FB80(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi int v7; // eax int v8; // [esp+4h] [ebp-18h] int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] v6 = this; if ( this[96] ) { v7 = sub_713B50(); v8 = a2; v9 = a3; v10 = a4; v11 = a5; v12 = a6; if ( !v7 || (*(int (__thiscall **)(int, int *))(*(_DWORD *)v7 + 12))(v7, &v8) ) sub_70F470(v6); } } //----- (0070FBF0) -------------------------------------------------------- void __thiscall sub_70FBF0(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // edi _DWORD *v5; // ecx signed int v6; // eax _DWORD *v7; // esi int v8; // edx _DWORD *v9; // eax int v10; // [esp-Ch] [ebp-34h] _DWORD *v11; // [esp+8h] [ebp-20h] char v12[4]; // [esp+Ch] [ebp-1Ch] int v13; // [esp+10h] [ebp-18h] int v14; // [esp+14h] [ebp-14h] int v15; // [esp+18h] [ebp-10h] int v16; // [esp+1Ch] [ebp-Ch] char v17; // [esp+20h] [ebp-8h] v4 = this; v5 = (_DWORD *)this[38]; if ( v5 ) { v6 = sub_464F50(v5); if ( v6 >= 0 ) { switch ( a2 ) { case 9: case 12: if ( v4 - 58 == *(_DWORD **)(dword_AD01E8 + 276) ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_AD01E8 + 256))(0); break; case 15: sub_464B60((_DWORD *)v4[38], v6, &v11); switch ( *a3 ) { case 0x3EE: v7 = v11; sub_4169E0(v11, (int)v12); v17 = 0; *(_DWORD *)dword_ACEB0C = *v7; dword_ACEB10 = v7[1]; dword_ACEB14 = v7[2]; dword_ACEB18 = v7[3]; dword_ACEB1C = v7[4]; sub_4A7840((_DWORD **)v4[16], v12); break; case 0x3EF: v16 = 0; v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; *(_DWORD *)v12 = *v11; v13 = v11[1]; v14 = v11[2]; v15 = v11[3]; v16 = v11[4]; sub_6F36A0(&off_AB7F2C, 38, 41, v12, 0x14u); break; case 0x3F0: v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; v16 = 0; *(_DWORD *)v12 = *v11; v13 = v11[1]; v14 = v11[2]; v15 = v11[3]; v8 = v11[4]; v10 = 33; goto LABEL_13; case 0x3F1: v15 = 0; v14 = 0; v13 = 0; *(_DWORD *)v12 = 0; v16 = 0; *(_DWORD *)v12 = *v11; v13 = v11[1]; v14 = v11[2]; v15 = v11[3]; v8 = v11[4]; v10 = 138; LABEL_13: v16 = v8; sub_6F36A0(&off_AB7F2C, 38, v10, v12, 0x14u); break; case 0x3F2: v9 = (_DWORD *)sub_712F20(); sub_718170(v9, v11); break; default: return; } break; case 71: sub_70F470(v4 - 58); break; default: return; } } } } // AB7F2C: using guessed type void **off_AB7F2C; // ACEB10: using guessed type int dword_ACEB10; // ACEB14: using guessed type int dword_ACEB14; // ACEB18: using guessed type int dword_ACEB18; // ACEB1C: using guessed type int dword_ACEB1C; // AD01E8: using guessed type int dword_AD01E8; //----- (0070FE70) -------------------------------------------------------- int __thiscall sub_70FE70(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ecx int **v5; // eax int *j; // eax int i; // eax int result; // eax v1 = this; v2 = (_DWORD *)this[92]; this[90] = 0; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { v4 = v3[3]; if ( v4 ) (*(void (__stdcall **)(bool))(*(_DWORD *)v4 + 256))(v3[4] == 0); if ( !*((_BYTE *)v3 + 21) ) { v5 = (int **)v3[2]; if ( *((_BYTE *)v5 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v5; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != (_DWORD *)v1[92] ); } sub_70F470(v1); result = v1[87]; *(_BYTE *)(result + 380) = 1; *(_BYTE *)(v1[88] + 380) = 0; *(_BYTE *)(v1[89] + 380) = 0; return result; } //----- (0070FF30) -------------------------------------------------------- int __thiscall sub_70FF30(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax int result; // eax v1 = this; v2 = (_DWORD *)this[92]; this[90] = 1; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { (*(void (__stdcall **)(bool))(*(_DWORD *)v3[3] + 256))(v3[4] == 1); if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != (_DWORD *)v1[92] ); } sub_70F470(v1); result = v1[87]; *(_BYTE *)(result + 380) = 0; *(_BYTE *)(v1[88] + 380) = 1; *(_BYTE *)(v1[89] + 380) = 0; return result; } //----- (0070FFF0) -------------------------------------------------------- int __thiscall sub_70FFF0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax int result; // eax v1 = this; v2 = (_DWORD *)this[92]; this[90] = 2; v3 = (_DWORD *)*v2; if ( (_DWORD *)*v2 != v2 ) { do { (*(void (__stdcall **)(bool))(*(_DWORD *)v3[3] + 256))(v3[4] == 2); if ( !*((_BYTE *)v3 + 21) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 21) ) { for ( i = v3[1]; !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = j; } } } while ( v3 != (_DWORD *)v1[92] ); } sub_70F470(v1); result = v1[87]; *(_BYTE *)(result + 380) = 0; *(_BYTE *)(v1[88] + 380) = 0; *(_BYTE *)(v1[89] + 380) = 1; return result; } //----- (007100B0) -------------------------------------------------------- LONG __thiscall sub_7100B0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi _DWORD *v7; // ST08_4 _DWORD *v8; // ST04_4 char v10; // [esp+10h] [ebp-18h] _DWORD *v11; // [esp+14h] [ebp-14h] _DWORD *v12; // [esp+18h] [ebp-10h] int v13; // [esp+24h] [ebp-4h] v1 = this; v12 = this; *this = &GuildAcademyWin::`vftable'; this[58] = &GuildAcademyWin::`vftable'; v2 = this[118]; v13 = 5; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[117]; LOBYTE(v13) = 4; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[116]; LOBYTE(v13) = 3; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[115]; LOBYTE(v13) = 2; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[114]; LOBYTE(v13) = 1; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v11 = v1 + 91; v7 = (_DWORD *)v1[92]; v8 = *(_DWORD **)v1[92]; LOBYTE(v13) = 6; sub_6CDE90(v1 + 91, (int *)&v10, v8, v7); operator delete((void *)v1[92]); v13 = -1; return sub_8F10F0(v1); } // A01348: using guessed type void *GuildAcademyWin::`vftable'; // A01364: using guessed type void *GuildAcademyWin::`vftable'; //----- (00710200) -------------------------------------------------------- void __thiscall sub_710200(_DWORD **this, int a2, int a3) { switch ( a2 ) { case 11: sub_70E340(this); break; case 12: sub_70E6D0(this); break; case 13: sub_70E2A0(); break; case 14: sub_70E710(this); break; case 15: sub_70E840(this); break; case 18: sub_70E9A0(this); break; case 19: sub_70E9E0(this); break; case 20: sub_70E1A0(this); break; case 21: sub_70E1D0(this); break; case 22: sub_70E200(this); break; case 23: sub_70E240(this); break; case 24: sub_70E270(this); break; case 25: sub_70E480(this, a3); break; case 26: sub_70E460(this, a3); break; case 27: sub_70E630(this, 0); break; case 28: sub_70E630(this, 1); break; case 29: sub_70E630(this, 3); break; case 30: sub_70E630(this, 2); break; case 31: sub_70E630(this, 4); break; case 32: sub_70E310(); break; case 33: sub_70FE70(this); break; case 34: sub_70FF30(this); break; case 35: sub_70FFF0(this); break; case 39: sub_70EA20(this); break; default: return; } } //----- (00710380) -------------------------------------------------------- int __thiscall sub_710380(_DWORD *this) { int v1; // eax int v2; // eax int result; // eax v1 = this[90]; if ( !v1 ) return sub_70FE70(this); v2 = v1 - 1; if ( !v2 ) return sub_70FF30(this); result = v2 - 1; if ( !result ) result = sub_70FFF0(this); return result; } //----- (007103B0) -------------------------------------------------------- _DWORD *__thiscall sub_7103B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] void *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &GuildAcademyWin::`vftable'; v1[58] = &GuildAcademyWin::`vftable'; v7 = 0; v1[93] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[92] = v2; *v2 = v2; *(_DWORD *)(v1[92] + 4) = v1[92]; *(_DWORD *)(v1[92] + 8) = v1[92]; *(_BYTE *)(v1[92] + 20) = 1; *(_BYTE *)(v1[92] + 21) = 1; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; *((_WORD *)v1 + 204) = 256; v1[86] = 0; v1[98] = 0; v1[99] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[103] = 0; v1[104] = 0; v1[105] = 0; v1[90] = 0; v1[106] = 0; v1[107] = 0; v1[108] = 0; v1[109] = 0; v1[110] = 0; v1[113] = 0; *((_BYTE *)v1 + 410) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A01348: using guessed type void *GuildAcademyWin::`vftable'; // A01364: using guessed type void *GuildAcademyWin::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00710510) -------------------------------------------------------- volatile LONG *__cdecl sub_710510(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1DCu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_7103B0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00710640) -------------------------------------------------------- char __thiscall sub_710640(_DWORD *this, int a2) { int v2; // esi int v3; // ebx char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax int v9; // edi int v10; // ebx volatile LONG *v11; // eax volatile LONG **v12; // eax volatile LONG **v13; // eax int v14; // eax volatile LONG *v15; // edi const CHAR *v16; // eax volatile LONG **v17; // edi int v18; // ST160_4 int v19; // edi volatile LONG **v20; // eax volatile LONG **v21; // eax _DWORD *v22; // eax volatile LONG **v23; // eax _DWORD *v24; // eax volatile LONG **v25; // eax _DWORD *v26; // eax int v27; // eax volatile LONG *v28; // eax volatile LONG v29; // edx const CHAR *v30; // eax int v31; // eax volatile LONG *v32; // eax volatile LONG v33; // edx const CHAR *v34; // eax _DWORD *v35; // eax int v36; // eax volatile LONG **v37; // eax volatile LONG *v38; // eax _DWORD *v39; // eax _DWORD *v40; // eax volatile LONG **v41; // eax volatile LONG *v42; // eax _DWORD *v43; // eax _DWORD *v44; // eax int v45; // eax int v46; // eax int v47; // eax volatile LONG **v48; // eax volatile LONG *v49; // eax _DWORD *v50; // eax volatile LONG **v51; // eax int v52; // eax int v53; // edx _DWORD *v54; // eax int v55; // eax _DWORD *v56; // eax int v57; // eax _DWORD *v58; // eax volatile LONG *v59; // eax int v60; // edx int v61; // eax volatile LONG *v62; // edx int v63; // eax volatile LONG *v64; // eax volatile LONG v65; // edx const CHAR *v66; // eax volatile LONG *v67; // eax int v68; // edx int v69; // eax volatile LONG *v70; // edx int v71; // eax volatile LONG *v72; // eax volatile LONG v73; // edx const CHAR *v74; // eax volatile LONG *v75; // eax int v76; // edx int v77; // eax volatile LONG *v78; // edx int v79; // eax volatile LONG *v80; // eax volatile LONG v81; // edx const CHAR *v82; // eax int v83; // ecx int v84; // eax int v85; // eax volatile LONG *v86; // eax volatile LONG v87; // edx const CHAR *v88; // eax _DWORD *v89; // eax _DWORD *v90; // eax int v91; // ecx int v92; // eax int v93; // eax const CHAR *v94; // eax _DWORD *v95; // eax _DWORD *v96; // eax int v97; // ecx int v98; // eax int v99; // eax volatile LONG *v100; // eax volatile LONG v101; // edx const CHAR *v102; // eax _DWORD *v103; // eax _DWORD *v104; // eax int v105; // ecx int v106; // eax int v107; // eax volatile LONG *v108; // eax volatile LONG v109; // edx const CHAR *v110; // eax _DWORD *v111; // eax _DWORD *v112; // eax int v113; // ecx int v114; // eax int v115; // eax volatile LONG *v116; // eax volatile LONG v117; // edx const CHAR *v118; // eax _DWORD *v119; // eax _DWORD *v120; // eax int v121; // ecx int v122; // eax int v123; // eax volatile LONG *v124; // eax volatile LONG v125; // edx const CHAR *v126; // eax _DWORD *v127; // eax _DWORD *v128; // eax int v129; // ecx int v130; // eax int v131; // eax volatile LONG *v132; // eax volatile LONG v133; // edx const CHAR *v134; // eax _DWORD *v135; // eax _DWORD *v136; // eax int v137; // ecx int v138; // eax int v139; // eax volatile LONG *v140; // eax volatile LONG v141; // edx const CHAR *v142; // eax _DWORD *v143; // eax _DWORD *v144; // eax int v145; // eax volatile LONG *v146; // eax _DWORD *v147; // eax int v148; // ecx void (__thiscall **v149)(volatile LONG *, const CHAR *); // eax int v150; // eax volatile LONG *v151; // eax volatile LONG v152; // edx const CHAR *v153; // eax int v154; // ecx void (__thiscall **v155)(volatile LONG *, const CHAR *); // eax int v156; // eax volatile LONG *v157; // eax volatile LONG v158; // edx const CHAR *v159; // eax int v160; // ecx void (__thiscall **v161)(volatile LONG *, const CHAR *); // eax int v162; // eax volatile LONG *v163; // eax volatile LONG v164; // edx const CHAR *v165; // eax volatile LONG *v166; // eax int v167; // ecx int v168; // ecx int v169; // edx void (__thiscall **v170)(volatile LONG *, const CHAR *); // ecx int v171; // ST168_4 int v172; // eax volatile LONG *v173; // eax volatile LONG v174; // edx const CHAR *v175; // eax _DWORD *v176; // eax _DWORD *v177; // eax volatile LONG **v178; // eax int v179; // edi const char *v180; // eax const char *v181; // eax const char *v182; // eax const char *v183; // eax const char *v184; // eax volatile LONG *v185; // edi const char *v186; // eax volatile LONG *v187; // edx int v188; // edi int v189; // ebx int v190; // eax volatile LONG *v191; // edi volatile LONG v192; // ebx const CHAR *v193; // eax int v194; // eax int v195; // edi int v196; // ebx int v197; // eax volatile LONG *v198; // edi volatile LONG v199; // ebx const CHAR *v200; // eax volatile LONG *v201; // ecx int v202; // edi int v203; // ebx int v204; // eax volatile LONG *v205; // edi volatile LONG v206; // ebx const CHAR *v207; // eax int v208; // eax int v209; // edi int v210; // ebx int v211; // eax volatile LONG *v212; // edi volatile LONG v213; // ebx const CHAR *v214; // eax volatile LONG *v215; // ecx int v216; // edi int v217; // ebx int v218; // eax volatile LONG *v219; // edi volatile LONG v220; // ebx const CHAR *v221; // eax int v222; // eax int v223; // edi int v224; // ebx int v225; // eax volatile LONG *v226; // edi volatile LONG v227; // ebx const CHAR *v228; // eax int v229; // eax volatile LONG *v230; // eax const CHAR *v231; // eax volatile LONG *v232; // eax const CHAR *v233; // eax volatile LONG *v234; // eax const CHAR *v235; // eax volatile LONG *v236; // eax const CHAR *v237; // eax volatile LONG *v238; // eax const CHAR *v239; // eax volatile LONG *v240; // eax void (__thiscall ***v241)(_DWORD, signed int); // esi int v242; // [esp+184h] [ebp-8Ch] int v243; // [esp+18Ch] [ebp-84h] int v244; // [esp+190h] [ebp-80h] int v245; // [esp+194h] [ebp-7Ch] char v246; // [esp+19Ch] [ebp-74h] int v247; // [esp+1A0h] [ebp-70h] int v248; // [esp+1A4h] [ebp-6Ch] int v249; // [esp+1A8h] [ebp-68h] int v250; // [esp+1ACh] [ebp-64h] int v251; // [esp+1B0h] [ebp-60h] int v252; // [esp+1B4h] [ebp-5Ch] char v253[4]; // [esp+1B8h] [ebp-58h] int v254; // [esp+1BCh] [ebp-54h] int v255; // [esp+1C0h] [ebp-50h] char v256[4]; // [esp+1C4h] [ebp-4Ch] int v257; // [esp+1C8h] [ebp-48h] volatile LONG *v258; // [esp+1CCh] [ebp-44h] void (__thiscall **v259)(volatile LONG *, const CHAR *); // [esp+1D0h] [ebp-40h] int v260; // [esp+1D4h] [ebp-3Ch] int v261; // [esp+1D8h] [ebp-38h] int v262; // [esp+1DCh] [ebp-34h] int v263; // [esp+1E0h] [ebp-30h] void *v264; // [esp+1E4h] [ebp-2Ch] int v265; // [esp+1F4h] [ebp-1Ch] unsigned int v266; // [esp+1F8h] [ebp-18h] int v267; // [esp+20Ch] [ebp-4h] v2 = (int)this; v262 = 0; this[74] = a2; v3 = dword_BA6BA0; v267 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GuildAcademyWin.nif"); sub_8F66B0(v4, (int)&v262, v3); if ( !v262 ) return 0; v5 = sub_8FB140(v262, (int)"Frame", (int)&v260, (int)&v261, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"GuildAcademyWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v262; v267 = -1; if ( v262 ) { v7 = InterlockedDecrement((volatile LONG *)(v262 + 4)); goto LABEL_7; } return 0; } v9 = v260; v10 = v261; v255 = v260; v11 = (volatile LONG *)sub_43D0D0(0x13u); if ( v11 ) v12 = sub_8FB140(v262, (int)"Theme", (int)&v260, (int)&v261, v11); else v12 = sub_8FB140(v262, (int)"Theme", (int)&v260, (int)&v261, 0); sub_8F3EB0(v260 - v9, v261 - v10, (int)v12, v2, 0, 0); v13 = sub_8FB140(v262, (int)"IconSlot", (int)&v260, (int)&v261, 0); sub_8F3EB0(v260 - v9, v261 - v10, (int)v13, v2, 0, 0); if ( !sub_8F71E0(v262, (int)"WinTitle", &v260, &v261, &v251, &v252) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v262; v267 = -1; if ( v262 ) { v7 = InterlockedDecrement((volatile LONG *)(v262 + 4)); LABEL_7: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v14 = sub_421050(7); v15 = sub_8F4A20(v260 - v9, v261 - v10, v251, v252, v14, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v15 + 488))(v15, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v15 + 468))(v15, &dword_AA8D98); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*v15 + 472); v16 = sub_40C190(-481277631); (*v259)(v15, v16); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v17 = sub_8FB140(v262, (int)"ClsNor", (int)&v260, (int)&v261, 0); sub_8FB650(v17, v262, (int)"ClsClick"); sub_8FB650(v17, v262, (int)"ClsOver"); v18 = (int)v17; v19 = v255; sub_8FE0F0(v260 - v255, v261 - v10, v18, v2, 11, 0, 0); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v262 + 72))("HelpLinkNor") ) { v263 = (int)sub_8FB140(v262, (int)"HelpLinkNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"HelpLinkClick"); sub_8FB650((_DWORD *)v263, v262, (int)"HelpLinkOver"); sub_8FE0F0(v260 - v19, v261 - v10, v263, v2, 32, 0, 0); } v20 = sub_8FB140(v262, (int)"Panel01", (int)&v260, (int)&v261, 0); sub_8F3EB0(v260 - v19, v261 - v10, (int)v20, v2, 0, 0); v21 = sub_8FB140(v262, (int)"Panel02", (int)&v260, (int)&v261, 0); *(_DWORD *)v256 = sub_8F3EB0(v260 - v19, v261 - v10, (int)v21, v2, 0, 0); v257 = 1; v22 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v22, 0); v23 = sub_8FB140(v262, (int)"Panel03", (int)&v260, (int)&v261, 0); *(_DWORD *)v256 = sub_8F3EB0(v260 - v19, v261 - v10, (int)v23, v2, 0, 0); v257 = 2; v24 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v24, 0); v25 = sub_8FB140(v262, (int)"Panel04", (int)&v260, (int)&v261, 0); *(_DWORD *)v256 = sub_8F3EB0(v260 - v19, v261 - v10, (int)v25, v2, 0, 0); v257 = 0; v26 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v26, 0); sub_8FB140(v262, (int)"Text03", (int)&v260, (int)&v261, 0); v27 = sub_421050(9); v28 = sub_8F4A20(v260 - v19, v261 - v10, v251, v252, v27, v2, 0, 0); v29 = *v28; v263 = (int)v28; (*(void (__thiscall **)(volatile LONG *, signed int))(v29 + 488))(v28, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v30 = sub_40C190(624629836); (*v259)((volatile LONG *)v263, v30); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); sub_8FB140(v262, (int)"Category", (int)&v260, (int)&v261, 0); v31 = sub_421050(9); v32 = sub_8F4A20(v260 - v19, v261 - v10, v251, v252, v31, v2, 0, 0); v33 = *v32; v263 = (int)v32; (*(void (__thiscall **)(volatile LONG *, signed int))(v33 + 488))(v32, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v34 = sub_4090F0(776608523); (*v259)((volatile LONG *)v263, v34); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v243 = 0; v244 = 0; v245 = 0; v246 = 0; v247 = 0; v248 = 0; v249 = 0; v250 = 0; LOBYTE(v267) = 1; v35 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 1); *v35 = 1; v263 = (int)v35; v35[1] = v262; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBarNor", 0xCu); LOBYTE(v267) = 2; v258 = (volatile LONG *)(v263 + 72); sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBarClick", 0xEu); LOBYTE(v267) = 3; sub_40B060((int *)v258, (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBarOver", 0xDu); LOBYTE(v267) = 4; sub_40B060((int *)v258, (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column01", 8u); LOBYTE(v267) = 5; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v36 = v263; *(_DWORD *)(v263 + 4) = v262; *(_BYTE *)(v36 + 88) = 1; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column02", 8u); LOBYTE(v267) = 6; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); *(_DWORD *)(v263 + 4) = v262; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column03", 8u); LOBYTE(v267) = 7; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); *(_DWORD *)(v263 + 4) = v262; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column04", 8u); LOBYTE(v267) = 8; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); *(_DWORD *)(v263 + 4) = v262; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column05", 8u); LOBYTE(v267) = 9; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); *(_DWORD *)(v263 + 4) = v262; sub_466680(&v243, 0); v37 = sub_8FB140(v262, (int)"SubText01", (int)&v260, (int)&v261, 0); v38 = sub_466330(v260 - v255, v261 - v10, (int)v37, *(float *)&v2, (int **)&v243, 0, 0); *(_DWORD *)(v2 + 384) = v38; *((_DWORD *)v38 + 88) = 26; *(_DWORD *)(*(_DWORD *)(v2 + 384) + 356) = 25; sub_465130(*(_DWORD **)(v2 + 384)); *(_DWORD *)v256 = *(_DWORD *)(v2 + 384); v257 = 1; v39 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v39, 0); sub_40AE60(&v243); v40 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 1); *v40 = 1; v40[1] = v262; v263 = (int)v40; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBarNor01", 0xEu); LOBYTE(v267) = 10; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "Column06", 8u); LOBYTE(v267) = 11; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); *(_DWORD *)(v263 + 4) = v262; sub_466680(&v243, 0); v41 = sub_8FB140(v262, (int)"SubText02", (int)&v260, (int)&v261, 0); v42 = sub_466330(v260 - v255, v261 - v10, (int)v41, *(float *)&v2, (int **)&v243, 0, 0); *(_DWORD *)(v2 + 388) = v42; *((_BYTE *)v42 + 348) = 0; sub_465130(*(_DWORD **)(v2 + 388)); *(_DWORD *)v256 = *(_DWORD *)(v2 + 388); v257 = 0; v43 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v43, 0); sub_40AE60(&v243); v44 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 1); *v44 = 1; v263 = (int)v44; v44[1] = v262; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBar01Nor", 0xEu); LOBYTE(v267) = 12; v258 = (volatile LONG *)(v263 + 72); sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBar01Click", 0x10u); LOBYTE(v267) = 13; sub_40B060((int *)v258, (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnBar01Over", 0xFu); LOBYTE(v267) = 14; sub_40B060((int *)v258, (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnHis01", 0xBu); LOBYTE(v267) = 15; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v45 = v263; *(_DWORD *)(v263 + 4) = v262; *(_BYTE *)(v45 + 88) = 1; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnHis02", 0xBu); LOBYTE(v267) = 16; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v46 = v263; *(_DWORD *)(v263 + 4) = v262; *(_BYTE *)(v46 + 88) = 1; v263 = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v243, 2); *(_DWORD *)v263 = 2; v266 = 15; v265 = 0; LOBYTE(v264) = 0; sub_4018E0(&v264, "ColumnHis03", 0xBu); LOBYTE(v267) = 17; sub_40B060((int *)(v263 + 72), (const void **)&v264); LOBYTE(v267) = 1; if ( v266 >= 0x10 ) operator delete(v264); v47 = v263; *(_DWORD *)(v263 + 4) = v262; *(_BYTE *)(v47 + 88) = 1; sub_466680(&v243, 0); v48 = sub_8FB140(v262, (int)"SubText03", (int)&v260, (int)&v261, 0); v49 = sub_466330(v260, v261, (int)v48, *(float *)&v2, (int **)&v243, 0, 0); *(_DWORD *)(v2 + 400) = v49; *(_DWORD *)v256 = v49; v257 = 2; v50 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v50, 0); v51 = sub_8FB140(v262, (int)"SlideBar_SlideBtnMiddle", (int)&v260, (int)&v261, 0); v263 = (int)v51; v52 = sub_464310(v262, (int)"SlideBar02", "SlideBar_UpBtn02", "SlideBar_DnBtn02", (int)v51, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 392) = v52; *(_DWORD *)(v52 + 312) = 18; *(_DWORD *)(*(_DWORD *)(v2 + 392) + 304) = 1; v53 = *(_DWORD *)(v2 + 392); v257 = 1; *(_DWORD *)v256 = v53; v54 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v54, 0); v55 = sub_464310(v262, (int)"SlideBar01", "SlideBar_UpBtn01", "SlideBar_DnBtn01", v263, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 396) = v55; *(_DWORD *)(v55 + 312) = 19; *(_DWORD *)(*(_DWORD *)(v2 + 396) + 304) = 1; *(_DWORD *)v256 = *(_DWORD *)(v2 + 396); v257 = 0; v56 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v56, 0); v57 = sub_464310(v262, (int)"SlideBar03", "SlideBar_UpBtn03", "SlideBar_DnBtn03", v263, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 404) = v57; *(_DWORD *)(v57 + 312) = 39; *(_DWORD *)(*(_DWORD *)(v2 + 404) + 304) = 1; *(_DWORD *)v256 = *(_DWORD *)(v2 + 404); v257 = 2; v58 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v58, 0); v263 = (int)sub_8FB140(v262, (int)"Tab01_Off", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Tab01_On"); v59 = sub_465940(v260 - v255, v261 - v10, v263, v2, 33, 0); v60 = v263; *(_DWORD *)(v2 + 348) = v59; v61 = **(_DWORD **)(v60 + 36); v62 = *(volatile LONG **)(v61 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(v61 + 24); v258 = v62; v63 = sub_421050(7); v64 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v258, (int)v259, v63, v2, 0, 0); v65 = *v64; v263 = (int)v64; (*(void (__thiscall **)(volatile LONG *, signed int))(v65 + 488))(v64, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v66 = sub_4090F0(626531736); (*v259)((volatile LONG *)v263, v66); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v263 = (int)sub_8FB140(v262, (int)"Tab02_Off", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Tab02_On"); v67 = sub_465940(v260 - v255, v261 - v10, v263, v2, 34, 0); v68 = v263; *(_DWORD *)(v2 + 352) = v67; v69 = **(_DWORD **)(v68 + 36); v70 = *(volatile LONG **)(v69 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(v69 + 24); v258 = v70; v71 = sub_421050(7); v72 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v258, (int)v259, v71, v2, 0, 0); v73 = *v72; v263 = (int)v72; (*(void (__thiscall **)(volatile LONG *, signed int))(v73 + 488))(v72, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v74 = sub_4090F0(748775051); (*v259)((volatile LONG *)v263, v74); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v263 = (int)sub_8FB140(v262, (int)"Tab03_Off", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Tab03_On"); v75 = sub_465940(v260 - v255, v261 - v10, v263, v2, 35, 0); v76 = v263; *(_DWORD *)(v2 + 356) = v75; v77 = **(_DWORD **)(v76 + 36); v78 = *(volatile LONG **)(v77 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(v77 + 24); v258 = v78; v79 = sub_421050(7); v80 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v258, (int)v259, v79, v2, 0, 0); v81 = *v80; v263 = (int)v80; (*(void (__thiscall **)(volatile LONG *, signed int))(v81 + 488))(v80, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v82 = sub_4090F0(-1952093283); (*v259)((volatile LONG *)v263, v82); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_BYTE *)(*(_DWORD *)(v2 + 348) + 380) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 352) + 380) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 356) + 380) = 0; sub_4638F0(*(_DWORD **)(v2 + 392), *(_DWORD *)(*(_DWORD *)(v2 + 384) + 336)); sub_4638F0(*(_DWORD **)(v2 + 396), *(_DWORD *)(*(_DWORD *)(v2 + 388) + 336)); v263 = (int)sub_8FB140(v262, (int)"Title01Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Title01Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Title01Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 20, 0, 0); v83 = *(_DWORD *)(v263 + 36); v84 = *(_DWORD *)(*(_DWORD *)v83 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v83 + 24); v263 = v84; v85 = sub_421050(7); v86 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v85, v2, 0, 0); v87 = *v86; v263 = (int)v86; (*(void (__thiscall **)(volatile LONG *, signed int))(v87 + 488))(v86, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v88 = sub_40C190(1319409301); (*v259)((volatile LONG *)v263, v88); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v258; v257 = 1; v89 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v89, 0); *(_DWORD *)v256 = v263; v257 = 1; v90 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v90, 0); v263 = (int)sub_8FB140(v262, (int)"Title02Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Title02Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Title02Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 21, 0, 0); v91 = *(_DWORD *)(v263 + 36); v92 = *(_DWORD *)(*(_DWORD *)v91 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v91 + 24); v263 = v92; v93 = sub_421050(7); v263 = (int)sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v93, v2, 0, 0); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v263 + 488))(v263, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v94 = sub_40C190(1247775651); (*v259)((volatile LONG *)v263, v94); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v258; v257 = 1; v95 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v95, 0); *(_DWORD *)v256 = v263; v257 = 1; v96 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v96, 0); v263 = (int)sub_8FB140(v262, (int)"Title03Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Title03Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Title03Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 22, 0, 0); v97 = *(_DWORD *)(v263 + 36); v98 = *(_DWORD *)(*(_DWORD *)v97 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v97 + 24); v263 = v98; v99 = sub_421050(7); v100 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v99, v2, 0, 0); v101 = *v100; v263 = (int)v100; (*(void (__thiscall **)(volatile LONG *, signed int))(v101 + 488))(v100, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v102 = sub_40C190(-1946686207); (*v259)((volatile LONG *)v263, v102); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v258; v257 = 1; v103 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v103, 0); *(_DWORD *)v256 = v263; v257 = 1; v104 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v104, 0); v263 = (int)sub_8FB140(v262, (int)"Title04Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Title04Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Title04Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 23, 0, 0); v105 = *(_DWORD *)(v263 + 36); v106 = *(_DWORD *)(*(_DWORD *)v105 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v105 + 24); v263 = v106; v107 = sub_421050(7); v108 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v107, v2, 0, 0); v109 = *v108; v263 = (int)v108; (*(void (__thiscall **)(volatile LONG *, signed int))(v109 + 488))(v108, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v110 = sub_40C190(-414625737); (*v259)((volatile LONG *)v263, v110); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v258; v257 = 1; v111 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v111, 0); *(_DWORD *)v256 = v263; v257 = 1; v112 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v112, 0); v263 = (int)sub_8FB140(v262, (int)"Title05Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Title05Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Title05Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 24, 0, 0); v113 = *(_DWORD *)(v263 + 36); v114 = *(_DWORD *)(*(_DWORD *)v113 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v113 + 24); v263 = v114; v115 = sub_421050(7); v116 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v115, v2, 0, 0); v117 = *v116; v263 = (int)v116; (*(void (__thiscall **)(volatile LONG *, signed int))(v117 + 488))(v116, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v118 = sub_40C190(-301870105); (*v259)((volatile LONG *)v263, v118); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v258; v257 = 1; v119 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v119, 0); *(_DWORD *)v256 = v263; v257 = 1; v120 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v120, 0); v263 = (int)sub_8FB140(v262, (int)"TitleHis01Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"TitleHis01Click"); sub_8FB650((_DWORD *)v263, v262, (int)"TitelHis01Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 0, 0, 0); v121 = *(_DWORD *)(v263 + 36); v122 = *(_DWORD *)(*(_DWORD *)v121 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v121 + 24); v263 = v122; v123 = sub_421050(7); v124 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v123, v2, 0, 0); v125 = *v124; v263 = (int)v124; (*(void (__thiscall **)(volatile LONG *, signed int))(v125 + 488))(v124, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v126 = sub_4090F0(-1919781000); (*v259)((volatile LONG *)v263, v126); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v263; v257 = 2; v127 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v127, 0); *(_DWORD *)v256 = v258; v257 = 2; v128 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v128, 0); v263 = (int)sub_8FB140(v262, (int)"TitleHis02Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"TitleHis02Click"); sub_8FB650((_DWORD *)v263, v262, (int)"TitelHis02Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 0, 0, 0); v129 = *(_DWORD *)(v263 + 36); v130 = *(_DWORD *)(*(_DWORD *)v129 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v129 + 24); v263 = v130; v131 = sub_421050(7); v132 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v131, v2, 0, 0); v133 = *v132; v263 = (int)v132; (*(void (__thiscall **)(volatile LONG *, signed int))(v133 + 488))(v132, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v134 = sub_4090F0(-406795237); (*v259)((volatile LONG *)v263, v134); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v263; v257 = 2; v135 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v135, 0); *(_DWORD *)v256 = v258; v257 = 2; v136 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v136, 0); v263 = (int)sub_8FB140(v262, (int)"TitleHis03Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"TitleHis03Click"); sub_8FB650((_DWORD *)v263, v262, (int)"TitelHis03Over"); v258 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 0, 0, 0); v137 = *(_DWORD *)(v263 + 36); v138 = *(_DWORD *)(*(_DWORD *)v137 + 20); v259 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v137 + 24); v263 = v138; v139 = sub_421050(7); v140 = sub_8F4A20(v260 - v255, v261 - v10 + 1, v263, (int)v259, v139, v2, 0, 0); v141 = *v140; v263 = (int)v140; (*(void (__thiscall **)(volatile LONG *, signed int))(v141 + 488))(v140, 5); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))(*(_DWORD *)v263 + 472); v142 = sub_4090F0(-1684702334); (*v259)((volatile LONG *)v263, v142); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); *(_DWORD *)v256 = v263; v257 = 2; v143 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v143, 0); *(_DWORD *)v256 = v258; v257 = 2; v144 = sub_5E8850((_DWORD *)(v2 + 364), v256); sub_62DDE0((_DWORD *)(v2 + 364), (int)v253, v144, 0); sub_8F71E0(v262, (int)"Text01", &v260, &v261, &v251, &v252); v257 = (signed int)((double)(unsigned int)v252 * 0.2000000029802322); v254 = 0; v263 = -v10; v258 = (volatile LONG *)(v2 + 424); v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))5; do { v145 = sub_421050(7); v146 = sub_8F4A20(v260 - v255, v261 + v263, v251, v252, v145, v2, 0, 0); *v258 = (volatile LONG)v146; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v146 + 488))(v146, 0); (*(void (__stdcall **)(void *))(**(_DWORD **)v258 + 472))(&unk_A00C8D); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v258 + 240))(0); *(_DWORD *)v253 = *v258; v147 = sub_5E8850((_DWORD *)(v2 + 364), v253); sub_62DDE0((_DWORD *)(v2 + 364), (int)&v242, v147, 0); ++v258; v263 += v257; v259 = (void (__thiscall **)(volatile LONG *, const CHAR *))((char *)v259 - 1); } while ( v259 ); v263 = (int)sub_8FB140(v262, (int)"Btn01Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Btn01Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Btn01Over"); sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 13, 0, 0); v148 = *(_DWORD *)(v263 + 36); v149 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v148 + 20); v257 = *(_DWORD *)(*(_DWORD *)v148 + 24); v259 = v149; v150 = sub_421050(7); v151 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v259, v257, v150, v2, 0, 0); v152 = *v151; v263 = (int)v151; (*(void (__thiscall **)(volatile LONG *, signed int))(v152 + 488))(v151, 5); v257 = *(_DWORD *)v263 + 472; v153 = sub_40C190(-800052173); (*(void (__thiscall **)(int, const CHAR *))v257)(v263, v153); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v263 = (int)sub_8FB140(v262, (int)"Btn02Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Btn02Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Btn02Over"); sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 14, 0, 0); v154 = *(_DWORD *)(v263 + 36); v155 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v154 + 20); v257 = *(_DWORD *)(*(_DWORD *)v154 + 24); v259 = v155; v156 = sub_421050(7); v157 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v259, v257, v156, v2, 0, 0); v158 = *v157; v263 = (int)v157; (*(void (__thiscall **)(volatile LONG *, signed int))(v158 + 488))(v157, 5); v257 = *(_DWORD *)v263 + 472; v159 = sub_40C190(643273861); (*(void (__thiscall **)(int, const CHAR *))v257)(v263, v159); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v263 = (int)sub_8FB140(v262, (int)"Btn03Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Btn03Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Btn03Over"); sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 15, 0, 0); v160 = *(_DWORD *)(v263 + 36); v161 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(*(_DWORD *)v160 + 20); v257 = *(_DWORD *)(*(_DWORD *)v160 + 24); v259 = v161; v162 = sub_421050(7); v163 = sub_8F4A20(v260 - v255, v261 - v10 + 1, (int)v259, v257, v162, v2, 0, 0); v164 = *v163; v263 = (int)v163; (*(void (__thiscall **)(volatile LONG *, signed int))(v164 + 488))(v163, 5); v257 = *(_DWORD *)v263 + 472; v165 = sub_40C190(725457588); (*(void (__thiscall **)(int, const CHAR *))v257)(v263, v165); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); v263 = (int)sub_8FB140(v262, (int)"Btn05Nor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"Btn05Click"); sub_8FB650((_DWORD *)v263, v262, (int)"Btn05Over"); v166 = sub_8FE0F0(v260 - v255, v261 - v10, v263, v2, 12, 0, 0); v167 = v263; *(_DWORD *)(v2 + 448) = v166; v168 = **(_DWORD **)(v167 + 36); v169 = *(_DWORD *)(v168 + 24); v170 = *(void (__thiscall ***)(volatile LONG *, const CHAR *))(v168 + 20); v171 = (int)v166; v257 = v169; v259 = v170; v172 = sub_421050(7); v173 = sub_8F4A20(0, 0, (int)v259, v257, v172, v171, 0, 0); v174 = *v173; v263 = (int)v173; (*(void (__thiscall **)(volatile LONG *, signed int))(v174 + 488))(v173, 5); v257 = *(_DWORD *)v263 + 472; v175 = sub_40C190(-1831748363); (*(void (__thiscall **)(int, const CHAR *))v257)(v263, v175); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v263 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 448) + 256))(0); *(_DWORD *)v253 = *(_DWORD *)(v2 + 448); v254 = 0; v176 = sub_5E8850((_DWORD *)(v2 + 364), v253); sub_62DDE0((_DWORD *)(v2 + 364), (int)&v242, v176, 0); *(_DWORD *)v253 = v263; v254 = 0; v177 = sub_5E8850((_DWORD *)(v2 + 364), v253); sub_62DDE0((_DWORD *)(v2 + 364), (int)&v242, v177, 0); v178 = sub_8FB140(v262, (int)"Base", (int)&v260, (int)&v261, 0); v179 = v255; sub_8F3EB0(v260 - v255, v261 - v10, (int)v178, v2, 0, 0); v263 = (int)sub_8FB140(v262, (int)"FriendNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"FriendClick"); sub_8FB650((_DWORD *)v263, v262, (int)"FriendOver"); v258 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 27, 0, 0); v180 = sub_40C190(-587993612); sub_8F2EA0((void **)v258, v180); *((_DWORD *)v258 + 68) = dword_AD01E8; v263 = (int)sub_8FB140(v262, (int)"GuildNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"GuildClick"); sub_8FB650((_DWORD *)v263, v262, (int)"GuildOver"); v258 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 28, 0, 0); v181 = sub_40C190(-1679100684); sub_8F2EA0((void **)v258, v181); *((_DWORD *)v258 + 68) = dword_AD01E8; v263 = (int)sub_8FB140(v262, (int)"GuildAcademyNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"GuildAcademyClick"); sub_8FB650((_DWORD *)v263, v262, (int)"GuildAcademyOver"); v258 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 10, 0, 0); v182 = sub_40C190(624629836); sub_8F2EA0((void **)v258, v182); *((_DWORD *)v258 + 68) = dword_AD01E8; v263 = (int)sub_8FB140(v262, (int)"MasterNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"MasterClick"); sub_8FB650((_DWORD *)v263, v262, (int)"MasterOver"); v258 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 31, 0, 0); v183 = sub_40C190(-196330948); sub_8F2EA0((void **)v258, v183); *((_DWORD *)v258 + 68) = dword_AD01E8; v263 = (int)sub_8FB140(v262, (int)"WeddingNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"WeddingClick"); sub_8FB650((_DWORD *)v263, v262, (int)"WeddingOver"); v258 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 29, 0, 0); v184 = sub_40C190(-923451580); sub_8F2EA0((void **)v258, v184); *((_DWORD *)v258 + 68) = dword_AD01E8; v263 = (int)sub_8FB140(v262, (int)"PartyMatchNor", (int)&v260, (int)&v261, 0); sub_8FB650((_DWORD *)v263, v262, (int)"PartyMatchClick"); sub_8FB650((_DWORD *)v263, v262, (int)"PartyMatchOver"); v185 = sub_8FE0F0(v260 - v179, v261 - v10, v263, v2, 30, 0, 0); v186 = sub_40C190(474697790); sub_8F2EA0((void **)v185, v186); *((_DWORD *)v185 + 68) = dword_AD01E8; v187 = sub_8FB140(v262, (int)"Friend", (int)&v260, (int)&v261, 0)[9]; v188 = *(_DWORD *)(*v187 + 24); v189 = *(_DWORD *)(*v187 + 20); v190 = sub_421050(9); v191 = sub_8F4A20(v260, v261, v189, v188, v190, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v191 + 488))(v191, 1); v192 = *v191; v193 = sub_40C190(-587993612); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v192 + 472))(v191, v193); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v191 + 240))(v191, 0); v194 = *sub_8FB140(v262, (int)"Guild", (int)&v260, (int)&v261, 0)[9]; v195 = *(_DWORD *)(v194 + 24); v196 = *(_DWORD *)(v194 + 20); v197 = sub_421050(9); v198 = sub_8F4A20(v260, v261, v196, v195, v197, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v198 + 488))(v198, 1); v199 = *v198; v200 = sub_40C190(-1679100684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v199 + 472))(v198, v200); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v198 + 240))(v198, 0); v201 = sub_8FB140(v262, (int)"GuildAcademy", (int)&v260, (int)&v261, 0)[9]; v202 = *(_DWORD *)(*v201 + 24); v203 = *(_DWORD *)(*v201 + 20); v204 = sub_421050(9); v205 = sub_8F4A20(v260, v261, v203, v202, v204, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v205 + 488))(v205, 1); v206 = *v205; v207 = sub_40C190(-2036079644); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v206 + 472))(v205, v207); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v205 + 240))(v205, 0); v208 = *sub_8FB140(v262, (int)"HolyPromise", (int)&v260, (int)&v261, 0)[9]; v209 = *(_DWORD *)(v208 + 24); v210 = *(_DWORD *)(v208 + 20); v211 = sub_421050(9); v212 = sub_8F4A20(v260, v261, v210, v209, v211, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v212 + 488))(v212, 1); v213 = *v212; v214 = sub_40C190(-196330948); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v213 + 472))(v212, v214); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v212 + 240))(v212, 0); v215 = sub_8FB140(v262, (int)"Wedding", (int)&v260, (int)&v261, 0)[9]; v216 = *(_DWORD *)(*v215 + 24); v217 = *(_DWORD *)(*v215 + 20); v218 = sub_421050(9); v219 = sub_8F4A20(v260, v261, v217, v216, v218, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v219 + 488))(v219, 1); v220 = *v219; v221 = sub_40C190(-923451580); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v220 + 472))(v219, v221); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v219 + 240))(v219, 0); v222 = *sub_8FB140(v262, (int)"PartyMatch", (int)&v260, (int)&v261, 0)[9]; v223 = *(_DWORD *)(v222 + 24); v224 = *(_DWORD *)(v222 + 20); v225 = sub_421050(9); v226 = sub_8F4A20(v260, v261, v224, v223, v225, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v226 + 488))(v226, 1); v227 = *v226; v228 = sub_40C190(474697790); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v227 + 472))(v226, v228); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v226 + 240))(v226, 0); v229 = sub_43D0D0(1u); v230 = sub_58E5D0(v229, 4, 4, 0); *(_DWORD *)(v2 + 452) = v230; (**((void (__stdcall ***)(int))v230 + 58))(v2 + 232); v231 = sub_40C190(-1091633134); v232 = sub_58E290(v231, 0, 0, 0, 0, 0, 0); *((_DWORD *)v232 + 83) = 1006; sub_56FF80((_DWORD *)(v2 + 456), (int)v232); v233 = sub_40C190(743537826); v234 = sub_58E290(v233, 0, 0, 0, 0, 0, 0); *((_DWORD *)v234 + 83) = 1007; sub_56FF80((_DWORD *)(v2 + 460), (int)v234); v235 = sub_40C190(-672903640); v236 = sub_58E290(v235, 0, 0, 0, 0, 0, 0); *((_DWORD *)v236 + 83) = 1008; sub_56FF80((_DWORD *)(v2 + 464), (int)v236); v237 = sub_4090F0(255690582); v238 = sub_58E290(v237, 0, 0, 0, 0, 0, 0); *((_DWORD *)v238 + 83) = 1009; sub_56FF80((_DWORD *)(v2 + 468), (int)v238); v239 = sub_40C190(-1448568867); v240 = sub_58E290(v239, 0, 0, 0, 0, 0, 0); *((_DWORD *)v240 + 83) = 1010; sub_56FF80((_DWORD *)(v2 + 472), (int)v240); *(_DWORD *)(v2 + 444) = sub_7060A0(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v267) = 0; sub_40AE10((void **)&v243); v267 = -1; if ( v262 ) { v241 = (void (__thiscall ***)(_DWORD, signed int))v262; if ( !InterlockedDecrement((volatile LONG *)(v262 + 4)) ) { if ( v241 ) (**v241)(v241, 1); } } return 1; } // AA8D98: using guessed type int dword_AA8D98; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00712F20) -------------------------------------------------------- int sub_712F20() { int result; // eax void ***v1; // eax void ***v2; // esi result = dword_B9E420; if ( !dword_B9E420 ) { v1 = (void ***)operator new(0x5Cu); v2 = v1; if ( v1 ) { sub_6C2E00(v1, 0); *v2 = &GuildAcademyMemberVanishTask::`vftable'; v2[2] = &GuildAcademyMemberVanishTask::`vftable'; v2[21] = 0; v2[20] = 0; v2[19] = 0; v2[18] = 0; v2[17] = 0; } else { v2 = 0; } result = (int)v2; dword_B9E420 = (int)v2; } return result; } // A01314: using guessed type void *GuildAcademyMemberVanishTask::`vftable'; // A01330: using guessed type void *GuildAcademyMemberVanishTask::`vftable'; // B9E420: using guessed type int dword_B9E420; //----- (00712FB0) -------------------------------------------------------- void *__thiscall sub_712FB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_B9E420 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A012E0: using guessed type void *ISingletonTask::`vftable'; // A012FC: using guessed type void *ISingletonTask::`vftable'; // B9E420: using guessed type int dword_B9E420; //----- (00712FF0) -------------------------------------------------------- void *__thiscall sub_712FF0(void *this, char a2) { void *v2; // esi v2 = this; sub_7100B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00713050) -------------------------------------------------------- char __thiscall sub_713050(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = sub_714D70(); if ( !*(_BYTE *)(v2 + 368) ) { v1[17] = sub_45EB80(); sub_40C190(941367612); sub_45E560((_DWORD **)v1[17]); (**(void (__thiscall ***)(int, int))(v1[17] + 232))(v1[17] + 232, (int)(v1 + 2)); (*(void (__stdcall **)(int, int, _DWORD, _DWORD))(*(_DWORD *)v1[17] + 236))(xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v2) = sub_8F82A0(&unk_BA6B10, (_DWORD *)v1[17]); } return v2; } //----- (007130D0) -------------------------------------------------------- char __thiscall sub_7130D0(_DWORD *this, int a2, _DWORD *a3, int a4) { char result; // al int v5; // eax char *v6; // esi _BYTE *v7; // edi char v8; // dl char v9[4]; // [esp+0h] [ebp-14h] int v10; // [esp+4h] [ebp-10h] int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] result = (char)this; if ( a2 == 28 ) { if ( *a3 ) { this[3] = 2; } else { v5 = (int)(this + 16); *(_DWORD *)v5 = 0; *(_DWORD *)(v5 + 4) = 0; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 12) = 0; v6 = (char *)a3[1]; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; v7 = this + 16; do { v8 = *v6; *v7++ = *v6++; } while ( v8 ); v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, (const char *)v5, 0x10u); result = sub_6F36A0(&off_AB7F2C, 38, 17, v9, 0x10u); } } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713180) -------------------------------------------------------- void ***__thiscall sub_713180(void ***this) { void ***v1; // esi v1 = this; sub_6C2E00(this, 0); *v1 = &GuildAcademyJoinReqTask::`vftable'; v1[2] = &GuildAcademyJoinReqTask::`vftable'; *((_BYTE *)v1 + 72) = 0; return v1; } // A015E4: using guessed type void *GuildAcademyJoinReqTask::`vftable'; // A01600: using guessed type void *GuildAcademyJoinReqTask::`vftable'; //----- (007131A0) -------------------------------------------------------- void __stdcall sub_7131A0(int *a1) { int v1; // ecx int v2; // eax int v3; // ecx char *v4; // eax char *v5; // eax int v6; // eax int v7; // edx int v8; // eax _DWORD *v9; // edi signed int v10; // eax void *v11; // eax char *v12; // eax void *v13; // [esp-1Ch] [ebp-44h] int v14; // [esp-18h] [ebp-40h] int v15; // [esp-14h] [ebp-3Ch] int v16; // [esp-10h] [ebp-38h] int v17; // [esp-Ch] [ebp-34h] void *v18; // [esp-8h] [ebp-30h] size_t v19; // [esp-4h] [ebp-2Ch] void **v20; // [esp+Ch] [ebp-1Ch] char v21[4]; // [esp+10h] [ebp-18h] int v22; // [esp+14h] [ebp-14h] int v23; // [esp+18h] [ebp-10h] int v24; // [esp+1Ch] [ebp-Ch] char v25; // [esp+20h] [ebp-8h] if ( *(_BYTE *)(sub_714D70() + 368) ) { v19 = 0; v18 = 0; v17 = 11; v16 = 38; *(_BYTE *)(sub_714D70() + 368) = 0; sub_6F36A0(&off_AB7F2C, v16, v17, v18, v19); } if ( *((_WORD *)a1 + 8) == 6024 ) { sub_6F36A0(&off_AB7F2C, 38, 7, 0, 0); v1 = *a1; v2 = a1[2]; v22 = a1[1]; *(_DWORD *)v21 = v1; v3 = a1[3]; v23 = v2; v24 = v3; v25 = 0; v4 = (char *)sub_40C190(798715764); v5 = sub_7549E0(v4, v21); sub_462CA0(1, v5); } else { v6 = *a1; v7 = a1[2]; v22 = a1[1]; *(_DWORD *)v21 = v6; v8 = a1[3]; v23 = v7; v24 = v8; v25 = 0; v9 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v10 = *((unsigned __int16 *)a1 + 8); if ( v10 <= 12728 ) { if ( v10 == 12728 ) { v20 = &v13; v18 = (void *)15; v17 = 0; LOBYTE(v13) = 0; sub_4018E0(&v13, "Academy_CannotJoinNotTime", 0x19u); v19 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v13, v14, v15, v16, v17, (int)v18, v19); v12 = (char *)sub_4090F0(1325191596); LABEL_14: v11 = sub_7549E0(v12); LABEL_15: sub_492060(v9, (int)v11); } else { switch ( v10 ) { case 6025: case 6026: v11 = (void *)sub_40C190(1853375888); goto LABEL_15; case 6027: v19 = (size_t)v21; v12 = (char *)sub_40C190(1723912175); goto LABEL_14; case 6028: v19 = (size_t)v21; v12 = (char *)sub_40C190(1366193007); goto LABEL_14; case 6029: v11 = (void *)sub_40C190(1970600139); goto LABEL_15; case 6030: v19 = (size_t)v21; v12 = (char *)sub_40C190(1366193007); goto LABEL_14; default: return; } } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713370) -------------------------------------------------------- char __thiscall sub_713370(_DWORD *this, int a2, int a3, int a4, int *a5) { _DWORD *v5; // esi v5 = this; if ( a2 != 38 || a3 != 18 ) return 0; if ( *(_BYTE *)(sub_714D70() + 368) ) { *(_BYTE *)(sub_714D70() + 368) = 0; sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); } sub_7131A0(a5); v5[5] = 2; return 1; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007133D0) -------------------------------------------------------- void *__thiscall sub_7133D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ISingletonTask::`vftable'; *((_DWORD *)this + 2) = &ISingletonTask::`vftable'; dword_B9E418 = 0; sub_49FA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A015B0: using guessed type void *ISingletonTask::`vftable'; // A015CC: using guessed type void *ISingletonTask::`vftable'; // B9E418: using guessed type int dword_B9E418; //----- (00713410) -------------------------------------------------------- void __thiscall sub_713410(_DWORD *this, int a2, _DWORD *a3, int a4) { int v4; // eax int v5; // eax if ( a2 == 27 ) { v4 = this[15]; if ( v4 ) v5 = v4 + 232; else v5 = 0; if ( a4 == v5 ) { if ( *a3 ) { this[3] = 2; } else { this[14] = 1; sub_6F36A0(&off_AB7F2C, 38, 27, 0, 0); } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713460) -------------------------------------------------------- int __thiscall sub_713460(_DWORD *this) { _DWORD *v1; // esi char *v2; // ST0C_4 char *v3; // eax char *v4; // eax volatile LONG *v5; // eax v1 = this; this[16] = 0; v2 = sub_6D8C50(*((_DWORD *)dword_AD8EBC + 169)); v3 = (char *)sub_40C190(-2032742471); v4 = sub_7549E0(v3, v2); v5 = sub_462CA0(2, v4); v1[17] = v5; return (**((int (__stdcall ***)(int))v5 + 58))((int)(v1 + 2)); } //----- (007134C0) -------------------------------------------------------- void __stdcall sub_7134C0(unsigned __int16 *a1) { int v1; // esi int v2; // eax int v3; // eax _DWORD *v4; // eax char *v5; // eax char *v6; // eax _DWORD *v7; // eax void *v8; // eax char *v9; // eax void *v10; // [esp-1Ch] [ebp-3Ch] int v11; // [esp-18h] [ebp-38h] int v12; // [esp-14h] [ebp-34h] int v13; // [esp-10h] [ebp-30h] int v14; // [esp-Ch] [ebp-2Ch] int v15; // [esp-8h] [ebp-28h] int v16; // [esp-4h] [ebp-24h] void **v17; // [esp+4h] [ebp-1Ch] char v18[4]; // [esp+8h] [ebp-18h] int v19; // [esp+Ch] [ebp-14h] int v20; // [esp+10h] [ebp-10h] int v21; // [esp+14h] [ebp-Ch] char v22; // [esp+18h] [ebp-8h] v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = *a1; if ( (_WORD)v2 == 6016 ) { *(_DWORD *)(sub_715490() + 1948) = 0; *(_WORD *)(sub_713B50() + 4) = 0; sub_70F470(*(_DWORD **)(v1 + 900)); v3 = sub_714D70(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3) ) sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); v4 = (_DWORD *)sub_6D3800(); *(_DWORD *)v18 = v4[4]; v19 = v4[5]; v20 = v4[6]; v21 = v4[7]; v22 = 0; v5 = (char *)sub_40C190(1654351240); v6 = sub_7549E0(v5, v18); sub_462CA0(1, v6); v7 = (_DWORD *)sub_715490(); sub_7173C0(v7); sub_715440(); } else { switch ( v2 ) { case 6036: case 6050: v8 = (void *)sub_40C190(1807417539); goto LABEL_11; case 6048: v8 = (void *)sub_40C190(40539004); goto LABEL_11; case 6049: v8 = (void *)sub_40C190(-1964515657); goto LABEL_11; case 6051: v8 = (void *)sub_40C190(-822552364); goto LABEL_11; case 6052: v17 = &v10; sub_4019E0(&v10, "Guild_CannotLeaveTime"); v16 = (unsigned __int16)sub_747F30(&unk_ACDC6C, v10, v11, v12, v13, v14, v15, v16); v9 = (char *)sub_40A910(-45148034); v8 = sub_7549E0(v9); LABEL_11: sub_492060((_DWORD *)v1, (int)v8); break; default: return; } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713680) -------------------------------------------------------- char __thiscall sub_713680(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // esi v5 = this; if ( a2 != 38 || a3 != 28 ) return 0; sub_7134C0(a5); v5[5] = 2; return 1; } //----- (007136B0) -------------------------------------------------------- int __thiscall sub_7136B0(_DWORD *this, _DWORD *a2) { int result; // eax this[17] = *a2; this[18] = a2[1]; this[19] = a2[2]; this[20] = a2[3]; result = a2[4]; this[21] = result; return result; } //----- (007136E0) -------------------------------------------------------- int __thiscall sub_7136E0(_DWORD *this, _DWORD *a2) { int result; // eax this[17] = *a2; this[18] = a2[1]; this[19] = a2[2]; this[20] = a2[3]; result = a2[4]; this[21] = result; return result; } //----- (00713710) -------------------------------------------------------- char __thiscall sub_713710(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // eax int v5; // ecx int v6; // ecx int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx int v12; // [esp+0h] [ebp-18h] int v13; // [esp+4h] [ebp-14h] int v14; // [esp+8h] [ebp-10h] int v15; // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[20]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { v4[3] = 2; } else { v4[14] = 1; v7 = v4[16]; v12 = v4[15]; v8 = v4[17]; v13 = v7; v9 = v4[18]; v14 = v8; v10 = v4[19]; v15 = v9; v16 = v10; LOBYTE(v4) = sub_6F36A0(&off_AB7F2C, 38, 89, &v12, 0x14u); } } } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007137B0) -------------------------------------------------------- int __thiscall sub_7137B0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edx int v4; // ecx int v5; // eax int v6; // ecx char *v7; // eax char *v8; // eax volatile LONG *v9; // eax char v11[4]; // [esp+4h] [ebp-1Ch] int v12; // [esp+8h] [ebp-18h] int v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] char v16; // [esp+18h] [ebp-8h] v1 = this; v2 = this[17]; v3 = this[19]; v4 = this[18]; *(_DWORD *)v11 = v2; v5 = v1[20]; v13 = v3; v12 = v4; v6 = v1[21]; v14 = v5; v15 = v6; v16 = 0; v1[16] = 0; v7 = (char *)sub_40C190(1598918275); v8 = sub_7549E0(v7, v11); v9 = sub_462C30(2, v8); v1[22] = v9; return (**((int (__stdcall ***)(int))v9 + 58))((int)(v1 + 2)); } //----- (00713830) -------------------------------------------------------- void __thiscall sub_713830(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax int v7; // eax int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx int v12; // [esp+4h] [ebp-18h] int v13; // [esp+8h] [ebp-14h] int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] int v16; // [esp+14h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[20]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { this[3] = 2; } else { v7 = this[17]; v8 = this[15]; v9 = v4[16]; v14 = v7; v12 = v8; v10 = v4[18]; v13 = v9; v11 = v4[19]; v15 = v10; v16 = v11; sub_6F36A0(&off_AB7F2C, 38, 89, &v12, 0x14u); v4[14] = 1; } } } } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007138D0) -------------------------------------------------------- char __thiscall sub_7138D0(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // edi _DWORD *v7; // esi const CHAR *v8; // eax v5 = this; if ( a2 != 38 || a3 != 90 ) return 0; v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v7 ) return 0; switch ( *a5 ) { case 0x17F0u: v8 = sub_4090F0(-1028153776); goto LABEL_15; case 0x17F1u: v8 = sub_4090F0(119595846); goto LABEL_15; case 0x17F2u: v8 = sub_4090F0(-1298033450); goto LABEL_15; case 0x17F3u: v8 = sub_4090F0(1519628516); goto LABEL_15; case 0x17F4u: v8 = sub_4090F0(-1330088484); goto LABEL_15; case 0x17F5u: v8 = sub_4090F0(-580578418); goto LABEL_15; case 0x17F6u: v8 = sub_4090F0(-1882157593); goto LABEL_15; case 0x17FFu: v8 = sub_40C190(1723173574); LABEL_15: sub_492060(v7, (int)v8); break; default: break; } v5[5] = 2; return 1; } //----- (007139C0) -------------------------------------------------------- int __thiscall sub_7139C0(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax volatile LONG *v3; // eax v1 = this; this[16] = 0; v2 = (char *)sub_40C190(71969374); v3 = sub_462C30(2, v2); v1[22] = v3; return (**((int (__stdcall ***)(int))v3 + 58))((int)(v1 + 2)); } //----- (00713A00) -------------------------------------------------------- char __thiscall sub_713A00(_DWORD *this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD *v5; // edi _DWORD *v7; // esi const CHAR *v8; // eax v5 = this; if ( a2 != 38 || a3 != 90 ) return 0; v7 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v7 ) return 0; switch ( *a5 ) { case 0x17F0u: v8 = sub_4090F0(-1028153776); goto LABEL_15; case 0x17F1u: v8 = sub_4090F0(119595846); goto LABEL_15; case 0x17F2u: v8 = sub_4090F0(-1298033450); goto LABEL_15; case 0x17F3u: v8 = sub_4090F0(1519628516); goto LABEL_15; case 0x17F4u: v8 = sub_4090F0(-1330088484); goto LABEL_15; case 0x17F5u: v8 = sub_4090F0(-580578418); goto LABEL_15; case 0x17F6u: v8 = sub_4090F0(-1882157593); goto LABEL_15; case 0x17FFu: v8 = sub_40C190(1723173574); LABEL_15: sub_492060(v7, (int)v8); break; default: break; } v5[5] = 2; return 1; } //----- (00713AF0) -------------------------------------------------------- int __thiscall sub_713AF0(unsigned __int16 *this) { int v1; // edx int result; // eax _BYTE *v3; // ecx v1 = this[2]; result = 0; if ( this[2] ) { v3 = (char *)this + 91; do { if ( *v3 & 1 ) ++result; v3 += 109; --v1; } while ( v1 ); } return result; } //----- (00713B50) -------------------------------------------------------- int sub_713B50() { int result; // eax if ( dword_B9E424 ) result = dword_B9E424 + 64; else result = 0; return result; } // B9E424: using guessed type int dword_B9E424; //----- (00713B90) -------------------------------------------------------- void sub_713B90() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E424; if ( dword_B9E424 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E424 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E424 = 0; } } // B9E424: using guessed type int dword_B9E424; //----- (00713BD0) -------------------------------------------------------- signed int __thiscall sub_713BD0(unsigned __int16 *this, int *a2) { unsigned __int16 *v2; // ebx signed int result; // eax int v4; // eax int v5; // ecx int v6; // edx int v7; // ecx int v8; // edx char *v9; // eax char *v10; // edi char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v2 = this; result = sub_750EB0(this + 32, (int)a2); if ( result ) { v4 = sub_714D70(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 260))(v4) ) sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); v5 = *a2; v6 = a2[1]; v13 = a2[2]; *(_DWORD *)v11 = v5; v7 = a2[3]; v12 = v6; v8 = a2[4]; v14 = v7; v15 = v8; v16 = 0; v9 = (char *)sub_40C190(-1427300079); v10 = sub_7549E0(v9, v11); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 4))(25, v10, v2 + 4); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 20))(25, v10, v2 + 4); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*((_DWORD *)v2 + 2) + 20))( v2 + 4, 25, v10, v2 + 4); result = 1; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713CC0) -------------------------------------------------------- signed int __thiscall sub_713CC0(unsigned __int16 *this, int *a2) { unsigned __int16 *v2; // ebx signed int result; // eax int v4; // eax int v5; // ecx int v6; // edx int v7; // ecx int v8; // edx char *v9; // eax char *v10; // edi char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v2 = this; result = sub_750EF0(this + 32, a2); if ( result ) { v4 = sub_714D70(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 260))(v4) ) sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); v5 = *a2; v6 = a2[1]; v13 = a2[2]; *(_DWORD *)v11 = v5; v7 = a2[3]; v12 = v6; v8 = a2[4]; v14 = v7; v15 = v8; v16 = 0; v9 = (char *)sub_40C190(-1139199233); v10 = sub_7549E0(v9, v11); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 4))(25, v10, v2 + 4); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 20))(25, v10, v2 + 4); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*((_DWORD *)v2 + 2) + 20))( v2 + 4, 25, v10, v2 + 4); result = 1; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713DB0) -------------------------------------------------------- signed int __thiscall sub_713DB0(unsigned __int16 *this, int *a2) { unsigned __int16 *v2; // ebx signed int result; // eax int v4; // eax _DWORD *v5; // eax int v6; // ecx _DWORD *v7; // eax char *v8; // eax char *v9; // edi _DWORD *v10; // eax int v11; // edx int v12; // ecx int v13; // edx char *v14; // eax char *v15; // edi char v16[4]; // [esp+8h] [ebp-1Ch] char v17[4]; // [esp+Ch] [ebp-18h] int v18; // [esp+10h] [ebp-14h] int v19; // [esp+14h] [ebp-10h] int v20; // [esp+18h] [ebp-Ch] char v21; // [esp+1Ch] [ebp-8h] v2 = this; result = sub_750EF0(this + 32, a2); if ( result ) { v4 = sub_714D70(); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 260))(v4) ) sub_6F36A0(&off_AB7F2C, 38, 11, 0, 0); v5 = (_DWORD *)sub_680810(byte_AD9238); v6 = *a2; if ( *a2 != *v5 || a2[1] != v5[1] || a2[2] != v5[2] || a2[3] != v5[3] || a2[4] != v5[4] ) { v11 = a2[1]; v18 = a2[2]; *(_DWORD *)v16 = v6; v12 = a2[3]; *(_DWORD *)v17 = v11; v13 = a2[4]; v19 = v12; v20 = v13; v21 = 0; v14 = (char *)sub_40C190(-856828417); v15 = sub_7549E0(v14, v16); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 4))(25, v15, v2 + 4); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 20))(25, v15, v2 + 4); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*((_DWORD *)v2 + 2) + 20))( v2 + 4, 25, v15, v2 + 4); } else { *(_DWORD *)(sub_715490() + 1948) = 0; v7 = (_DWORD *)sub_715490(); *(_DWORD *)v17 = v7[4]; v18 = v7[5]; v19 = v7[6]; v20 = v7[7]; v21 = 0; v8 = (char *)sub_40C190(1956155501); v9 = sub_7549E0(v8, v17); if ( *((_DWORD *)v2 + 3) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 4))(25, v9, v2 + 4); if ( *((_DWORD *)v2 + 3) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v2 + 3) + 20))(25, v9, v2 + 4); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*((_DWORD *)v2 + 2) + 20))( v2 + 4, 25, v9, v2 + 4); v2[34] = 0; v10 = (_DWORD *)sub_715490(); sub_7173C0(v10); sub_715440(); } result = 1; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00713F80) -------------------------------------------------------- signed int __thiscall sub_713F80(unsigned __int16 *this, _DWORD *a2) { signed int result; // eax const char *v3; // eax int v4; // ecx int v5; // edx int v6; // eax int v7; // eax char *v8; // eax char *v9; // edi unsigned __int16 *v10; // [esp+4h] [ebp-20h] char v11[4]; // [esp+8h] [ebp-1Ch] int v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] char v16; // [esp+1Ch] [ebp-8h] v10 = this; result = sub_7516A0(this + 32, a2); if ( result ) { if ( byte_B92027 ) { v3 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v15 = 0; v14 = 0; v13 = 0; v12 = 0; *(_DWORD *)v11 = 0; strncpy(v11, v3, 0x14u); if ( *a2 != *(_DWORD *)v11 || a2[1] != v12 || a2[2] != v13 || a2[3] != v14 || a2[4] != v15 ) { v4 = a2[2]; v5 = a2[3]; *(_DWORD *)v11 = *a2; v6 = a2[1]; v13 = v4; v12 = v6; v7 = a2[4]; v14 = v5; v15 = v7; v16 = 0; v8 = (char *)sub_40C190(1742659266); v9 = sub_7549E0(v8, v11); if ( *((_DWORD *)v10 + 3) ) { (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v10 + 3) + 4))(25, v9, v10 + 4); if ( *((_DWORD *)v10 + 3) ) (*(void (__stdcall **)(signed int, char *, unsigned __int16 *))(**((_DWORD **)v10 + 3) + 20))( 25, v9, v10 + 4); } (*(void (__thiscall **)(unsigned __int16 *, signed int, char *, unsigned __int16 *))(*((_DWORD *)v10 + 2) + 20))( v10 + 4, 25, v9, v10 + 4); } } result = 1; } return result; } // B92027: using guessed type char byte_B92027; //----- (007140B0) -------------------------------------------------------- signed int __thiscall sub_7140B0(char *this, int a2, unsigned __int16 *a3) { int v3; // eax char *v4; // esi const CHAR *v5; // eax _DWORD **v6; // esi const CHAR *v7; // edi v3 = *a3; v4 = this; if ( (_WORD)v3 != 6064 ) { switch ( v3 ) { case 6065: v5 = sub_40C190(2109134283); goto LABEL_10; case 6066: v5 = sub_40C190(489651314); goto LABEL_10; case 6067: v5 = sub_40C190(252460580); goto LABEL_10; case 6068: v5 = sub_40C190(662462590); goto LABEL_10; case 6069: v5 = sub_40C190(-822552364); goto LABEL_10; case 6070: v5 = sub_40C190(946227955); goto LABEL_10; case 6071: v5 = sub_40C190(592716873); LABEL_10: v6 = (_DWORD **)(v4 + 8); v7 = v5; if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v5, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); break; default: return 1; } } return 1; } //----- (00714180) -------------------------------------------------------- signed int __thiscall sub_714180(_DWORD **this, int a2, _DWORD *a3) { int v3; // edx _DWORD **v4; // ebx int v5; // ecx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // edx int v12; // eax _DWORD *v13; // eax char *v14; // eax char *v15; // edi char *v16; // eax char *v17; // edi int v19; // [esp+Ch] [ebp-34h] int v20; // [esp+10h] [ebp-30h] int v21; // [esp+14h] [ebp-2Ch] int v22; // [esp+18h] [ebp-28h] int v23; // [esp+1Ch] [ebp-24h] char v24; // [esp+20h] [ebp-20h] char v25[4]; // [esp+24h] [ebp-1Ch] int v26; // [esp+28h] [ebp-18h] int v27; // [esp+2Ch] [ebp-14h] int v28; // [esp+30h] [ebp-10h] int v29; // [esp+34h] [ebp-Ch] char v30; // [esp+38h] [ebp-8h] v3 = a3[2]; v4 = this; v5 = a3[1]; *(_DWORD *)v25 = *a3; v6 = a3[3]; v26 = v5; v7 = a3[4]; v27 = v3; v8 = a3[5]; v28 = v6; v9 = a3[6]; v29 = v7; v10 = a3[7]; v19 = v8; v11 = a3[8]; v20 = v9; v12 = a3[9]; v21 = v10; v30 = 0; v22 = v11; v23 = v12; v24 = 0; v13 = (_DWORD *)sub_680810(byte_AD9238); if ( a3[5] != *v13 || a3[6] != v13[1] || a3[7] != v13[2] || a3[8] != v13[3] || a3[9] != v13[4] ) { v16 = (char *)sub_40C190(151946079); v17 = sub_7549E0(v16, v25, &v19); if ( v4[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 4))(25, v17, v4 + 2); if ( v4[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 20))(25, v17, v4 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v4[2][5])(v4 + 2, 25, v17, v4 + 2); } else { v14 = (char *)sub_40C190(-1195464643); v15 = sub_7549E0(v14, v25); if ( v4[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 4))(25, v15, v4 + 2); if ( v4[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 20))(25, v15, v4 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v4[2][5])(v4 + 2, 25, v15, v4 + 2); } return 1; } //----- (007142E0) -------------------------------------------------------- signed int __thiscall sub_7142E0(char *this, int a2, unsigned __int16 *a3) { int v3; // eax char *v4; // esi const CHAR *v5; // eax _DWORD **v6; // esi const CHAR *v7; // edi v3 = *a3; v4 = this; if ( (_WORD)v3 != 12712 ) { switch ( v3 ) { case 12713: v5 = sub_40C190(2109134283); goto LABEL_12; case 12714: v5 = sub_40C190(489651314); goto LABEL_12; case 12715: v5 = sub_40C190(252460580); goto LABEL_12; case 12716: v5 = sub_40C190(662462590); goto LABEL_12; case 12717: v5 = sub_40C190(-822552364); goto LABEL_12; case 12718: v5 = sub_4090F0(316858968); goto LABEL_12; case 12719: v5 = sub_40C190(592716873); goto LABEL_12; case 12720: v5 = sub_4090F0(1549616082); goto LABEL_12; case 12721: v5 = sub_4090F0(1752181446); LABEL_12: v6 = (_DWORD **)(v4 + 8); v7 = v5; if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v5, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); break; default: return 1; } } return 1; } //----- (007143E0) -------------------------------------------------------- signed int __thiscall sub_7143E0(_DWORD **this, int a2, _DWORD *a3) { int v3; // edx _DWORD **v4; // ebx int v5; // ecx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // edx int v12; // eax _DWORD *v13; // eax char *v14; // eax char *v15; // edi char *v16; // eax char *v17; // edi int v19; // [esp+Ch] [ebp-34h] int v20; // [esp+10h] [ebp-30h] int v21; // [esp+14h] [ebp-2Ch] int v22; // [esp+18h] [ebp-28h] int v23; // [esp+1Ch] [ebp-24h] char v24; // [esp+20h] [ebp-20h] char v25[4]; // [esp+24h] [ebp-1Ch] int v26; // [esp+28h] [ebp-18h] int v27; // [esp+2Ch] [ebp-14h] int v28; // [esp+30h] [ebp-10h] int v29; // [esp+34h] [ebp-Ch] char v30; // [esp+38h] [ebp-8h] v3 = a3[2]; v4 = this; v5 = a3[1]; *(_DWORD *)v25 = *a3; v6 = a3[3]; v26 = v5; v7 = a3[4]; v27 = v3; v8 = a3[5]; v28 = v6; v9 = a3[6]; v29 = v7; v10 = a3[7]; v19 = v8; v11 = a3[8]; v20 = v9; v12 = a3[9]; v21 = v10; v30 = 0; v22 = v11; v23 = v12; v24 = 0; v13 = (_DWORD *)sub_680810(byte_AD9238); if ( a3[5] != *v13 || a3[6] != v13[1] || a3[7] != v13[2] || a3[8] != v13[3] || a3[9] != v13[4] ) { v16 = (char *)sub_4090F0(1660018606); v17 = sub_7549E0(v16, v25, &v19); if ( v4[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 4))(25, v17, v4 + 2); if ( v4[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 20))(25, v17, v4 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v4[2][5])(v4 + 2, 25, v17, v4 + 2); } else { v14 = (char *)sub_4090F0(1402837606); v15 = sub_7549E0(v14, v25); if ( v4[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 4))(25, v15, v4 + 2); if ( v4[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v4[3] + 20))(25, v15, v4 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v4[2][5])(v4 + 2, 25, v15, v4 + 2); } return 1; } //----- (00714540) -------------------------------------------------------- char __thiscall sub_714540(unsigned __int16 *this, int a2, int a3, int a4, int *a5) { unsigned __int16 *v5; // esi _DWORD **v6; // esi char result; // al _DWORD **v8; // esi _DWORD **v9; // esi _DWORD **v10; // esi _DWORD **v11; // esi _DWORD **v12; // esi _DWORD **v13; // esi _DWORD **v14; // esi v5 = this; if ( a2 == 4 ) { if ( a3 == 151 && *a5 ) sub_6F36A0(&off_AB7F2C, 38, 13, 0, 0); return 0; } if ( a2 != 38 ) return 0; switch ( a3 ) { case 14: sub_751550(this + 32, (int)a5); v6 = (_DWORD **)(v5 + 4); if ( v6[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v6[1] + 4))(71, 0, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v6[1] + 20))(71, 0, v6); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v6)[5])(v6, 71, 0, v6); result = 1; break; case 19: sub_713BD0(this, a5); v8 = (_DWORD **)(v5 + 4); if ( v8[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 4))(71, 0, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 20))(71, 0, v8); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v8)[5])(v8, 71, 0, v8); result = 1; break; case 24: sub_713DB0(this, a5); v9 = (_DWORD **)(v5 + 4); if ( v9[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v9[1] + 4))(71, 0, v9); if ( v9[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v9[1] + 20))(71, 0, v9); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v9)[5])(v9, 71, 0, v9); result = 1; break; case 34: sub_7140B0((char *)this, a4, (unsigned __int16 *)a5); result = 1; break; case 35: sub_714180((_DWORD **)this, a4, a5); result = 1; break; case 96: sub_713CC0(this, a5); v10 = (_DWORD **)(v5 + 4); if ( v10[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v10[1] + 4))(71, 0, v10); if ( v10[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v10[1] + 20))(71, 0, v10); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v10)[5])(v10, 71, 0, v10); result = 1; break; case 97: sub_713F80(this, a5); v11 = (_DWORD **)(v5 + 4); if ( v11[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v11[1] + 4))(71, 0, v11); if ( v11[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v11[1] + 20))(71, 0, v11); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v11)[5])(v11, 71, 0, v11); result = 1; break; case 98: sub_7516E0(this + 32, a5); v12 = (_DWORD **)(v5 + 4); if ( v12[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 4))(71, 0, v12); if ( v12[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v12[1] + 20))(71, 0, v12); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v12)[5])(v12, 71, 0, v12); result = 1; break; case 99: (*(void (__thiscall **)(unsigned __int16 *, int *))(*((_DWORD *)this + 16) + 36))(this + 32, a5); result = 1; break; case 100: (*(void (__thiscall **)(unsigned __int16 *, int *))(*((_DWORD *)this + 16) + 16))(this + 32, a5); result = 1; break; case 101: (*(void (__thiscall **)(unsigned __int16 *, int *))(*((_DWORD *)this + 16) + 28))(this + 32, a5); result = 1; break; case 102: (*(void (__thiscall **)(unsigned __int16 *, int *))(*((_DWORD *)this + 16) + 32))(this + 32, a5); v13 = (_DWORD **)(v5 + 4); if ( v13[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v13[1] + 4))(71, 0, v13); if ( v13[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v13[1] + 20))(71, 0, v13); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v13)[5])(v13, 71, 0, v13); result = 1; break; case 103: (*(void (__thiscall **)(unsigned __int16 *, int *))(*((_DWORD *)this + 16) + 40))(this + 32, a5); v14 = (_DWORD **)(v5 + 4); if ( v14[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v14[1] + 4))(71, 0, v14); if ( v14[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v14[1] + 20))(71, 0, v14); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v14)[5])(v14, 71, 0, v14); result = 1; break; case 139: sub_7142E0((char *)this, a4, (unsigned __int16 *)a5); result = 1; break; case 140: sub_7143E0((_DWORD **)this, a4, a5); result = 1; break; default: return 0; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00714A10) -------------------------------------------------------- int __thiscall sub_714A10(void ***this) { int v1; // esi void (__thiscall ***v2)(_DWORD, signed int); // edi int result; // eax v1 = (int)this; sub_6C2E00(this, 0); sub_751520((_DWORD *)(v1 + 64)); *(_DWORD *)(v1 + 64) = &CClientGuildAcademyMember::`vftable'; *(_DWORD *)v1 = &GuildAcademyMemberTask::`vftable'; *(_DWORD *)(v1 + 8) = &GuildAcademyMemberTask::`vftable'; *(_DWORD *)(v1 + 64) = &GuildAcademyMemberTask::`vftable'; *(_DWORD *)(v1 + 10992) = 0; *(_DWORD *)(v1 + 10988) = 0; *(_DWORD *)(v1 + 10984) = 0; *(_DWORD *)(v1 + 10980) = 0; if ( dword_B9E424 != v1 ) { if ( dword_B9E424 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E424; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E424 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } dword_B9E424 = v1; InterlockedIncrement((volatile LONG *)(v1 + 4)); } result = v1; *(_DWORD *)(v1 + 10976) = 0; return result; } // A01630: using guessed type void *CClientGuildAcademyMember::`vftable'; // A01664: using guessed type void *GuildAcademyMemberTask::`vftable'; // A01698: using guessed type void *GuildAcademyMemberTask::`vftable'; // A016B4: using guessed type void *GuildAcademyMemberTask::`vftable'; // B9E424: using guessed type int dword_B9E424; //----- (00714AF0) -------------------------------------------------------- _DWORD *__thiscall sub_714AF0(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_750DB0((_DWORD *)this + 16); sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00714B60) -------------------------------------------------------- void __thiscall sub_714B60(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi _WORD *v3; // eax _BYTE *v4; // ebx _DWORD *v5; // eax int v6; // edx char v7; // cl v1 = this; v2 = this[20] + 3; v3 = operator new[](v2); v4 = v3; *v3 = *((_WORD *)v1 + 40) + 1; v5 = v1 + 16; if ( v1[21] >= 0x10u ) v5 = (_DWORD *)*v5; v6 = v4 + 2 - (_BYTE *)v5; do { v7 = *(_BYTE *)v5; *((_BYTE *)v5 + v6) = *(_BYTE *)v5; v5 = (_DWORD *)((char *)v5 + 1); } while ( v7 ); sub_6F36A0(&off_AB7F2C, 38, 36, v4, v2); operator delete[](v4); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00714BC0) -------------------------------------------------------- char __thiscall sub_714BC0(_DWORD **this, int a2, int a3, int a4, unsigned __int16 *a5) { _DWORD **v5; // ebx const CHAR *v7; // eax const CHAR *v8; // edi v5 = this; if ( a2 != 38 || a3 != 37 ) return 0; switch ( *a5 ) { case 0x17B8u: v7 = sub_40C190(-1018169760); goto LABEL_10; case 0x17B9u: v7 = sub_40C190(1988193177); goto LABEL_10; case 0x17BAu: v7 = sub_40C190(71048826); goto LABEL_10; case 0x17BBu: v7 = sub_40C190(-723960768); goto LABEL_10; case 0x17BCu: v7 = sub_40C190(-822552364); LABEL_10: v8 = v7; if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v7, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v8, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v8, v5 + 2); break; default: break; } v5[5] = (_DWORD *)2; return 1; } //----- (00714C80) -------------------------------------------------------- const void **__thiscall sub_714C80(_DWORD *this, void *a2) { return sub_4018E0(this + 16, a2, strlen((const char *)a2)); } //----- (00714CB0) -------------------------------------------------------- _DWORD *__thiscall sub_714CB0(char *this) { char *v1; // esi _DWORD *v2; // edi volatile LONG *v3; // eax int v4; // edx _DWORD *result; // eax v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = sub_708B00(0); dword_B9E428 = (int)v3; if ( v1 ) v4 = (int)(v1 + 8); else v4 = 0; result = (_DWORD *)(**((int (__stdcall ***)(int))v3 + 58))(v4); if ( v2 ) result = sub_4E36C0(v2, dword_B9E428); return result; } // B9E428: using guessed type int dword_B9E428; //----- (00714D70) -------------------------------------------------------- int sub_714D70() { return dword_B9E428; } // B9E428: using guessed type int dword_B9E428; //----- (00714D80) -------------------------------------------------------- void sub_714D80() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E42C; if ( dword_B9E42C ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E42C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E42C = 0; } } // B9E42C: using guessed type int dword_B9E42C; //----- (00714DC0) -------------------------------------------------------- signed int __thiscall sub_714DC0(_DWORD **this, int a2) { int v2; // esi int v3; // edi _DWORD **v5; // esi const CHAR *v6; // edi if ( *(_WORD *)a2 == 6312 ) { v2 = 0; if ( *(_DWORD *)(a2 + 7) > 0 ) { v3 = a2 + 11; do { sub_708E10((unsigned int *)dword_B9E428, v3); ++v2; v3 += 42; } while ( v2 < *(_DWORD *)(a2 + 7) ); } sub_7081D0((_DWORD *)dword_B9E428, a2); if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)dword_B9E428 + 260))() ) { sub_8F82A0(&unk_BA6B10, (_DWORD *)dword_B9E428); return 1; } } else if ( *(_WORD *)a2 == 6313 ) { v5 = this + 2; v6 = sub_40C190(-822552364); if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v6, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } return 1; } // B9E428: using guessed type int dword_B9E428; //----- (00714F10) -------------------------------------------------------- char __thiscall sub_714F10(_DWORD **this, int a2, int a3, int a4, int a5) { if ( a2 != 38 || a3 != 12 ) return 0; sub_714DC0(this, a5); return 1; } //----- (00714FB0) -------------------------------------------------------- int __cdecl sub_714FB0(int a1) { int v1; // eax void ***v2; // eax int v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_B9E42C; if ( !dword_B9E42C ) { v2 = (void ***)operator new(0x4Cu); v3 = (int)v2; if ( v2 ) { sub_6C2E00(v2, 0); sub_754900((_DWORD *)(v3 + 64)); *(_DWORD *)(v3 + 64) = &CClientGuildAcademySelectList::`vftable'; *(_DWORD *)v3 = &GuildAcademySelectTask::`vftable'; *(_DWORD *)(v3 + 8) = &GuildAcademySelectTask::`vftable'; *(_DWORD *)(v3 + 64) = &GuildAcademySelectTask::`vftable'; } else { v3 = 0; } v1 = dword_B9E42C; if ( dword_B9E42C != v3 ) { if ( dword_B9E42C ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E42C; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E42C + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = v3; dword_B9E42C = v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); v1 = dword_B9E42C; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // A016CC: using guessed type void *CClientGuildAcademySelectList::`vftable'; // A016D8: using guessed type void *GuildAcademySelectTask::`vftable'; // A016E4: using guessed type void *GuildAcademySelectTask::`vftable'; // A01700: using guessed type void *GuildAcademySelectTask::`vftable'; // B9E42C: using guessed type int dword_B9E42C; //----- (007150A0) -------------------------------------------------------- _DWORD *__thiscall sub_7150A0(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ST0C_4 _DWORD *v4; // ecx v2 = this; v3 = this; v4 = (char *)this + 64; *v3 = &GuildAcademySelectTask::`vftable'; v2[2] = &GuildAcademySelectTask::`vftable'; *v4 = &GuildAcademySelectTask::`vftable'; sub_7549A0(v4); sub_49FA00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A016D8: using guessed type void *GuildAcademySelectTask::`vftable'; // A016E4: using guessed type void *GuildAcademySelectTask::`vftable'; // A01700: using guessed type void *GuildAcademySelectTask::`vftable'; //----- (00715120) -------------------------------------------------------- bool __thiscall sub_715120(_DWORD *this) { return this[487] != 0; } //----- (00715130) -------------------------------------------------------- bool __thiscall sub_715130(_BYTE *this) { return this[1928] != 0; } //----- (00715140) -------------------------------------------------------- LONG __thiscall sub_715140(int *this) { int *v1; // esi _DWORD *v2; // edi int v3; // eax int v4; // eax volatile LONG *v5; // eax volatile LONG *v6; // eax volatile LONG *v7; // eax volatile LONG *v8; // eax void ***v9; // eax _DWORD *v10; // eax v1 = this; v2 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = sub_703E20(0); v1[509] = v3; (**(void (__stdcall ***)(int))(v3 + 232))((int)(v1 + 2)); v4 = sub_706A90((int)v2); v1[510] = v4; (**(void (__stdcall ***)(int))(v4 + 232))((int)(v1 + 2)); v5 = sub_6FFC50((int)v2); v1[511] = (int)v5; (**((void (__stdcall ***)(int))v5 + 58))((int)(v1 + 2)); v6 = sub_705980((int)v2); v1[512] = (int)v6; (**((void (__stdcall ***)(int))v6 + 58))((int)(v1 + 2)); v7 = sub_701DB0((int)v2); v1[513] = (int)v7; (**((void (__stdcall ***)(int))v7 + 58))((int)(v1 + 2)); v8 = sub_70D1E0((int)v2); v1[514] = (int)v8; (**((void (__stdcall ***)(int))v8 + 58))((int)(v1 + 2)); if ( v2 ) { sub_4E36C0(v2, v1[509]); sub_4E36C0(v2, v1[510]); sub_4E36C0(v2, v1[511]); sub_4E36C0(v2, v1[512]); sub_4E36C0(v2, v1[513]); sub_4E36C0(v2, v1[514]); } v9 = (void ***)operator new(0x2AF4u); if ( v9 ) v10 = (_DWORD *)sub_714A10(v9); else v10 = 0; return sub_6C2D50(v1, v10); } //----- (007152E0) -------------------------------------------------------- signed int __thiscall sub_7152E0(_DWORD *this, int a2) { signed int result; // eax result = 0; if ( this[303] ) { this[303] = 0; this[503] = 0; result = 1; } return result; } //----- (00715330) -------------------------------------------------------- BOOL __thiscall sub_715330(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; v2 = (_DWORD *)sub_680810(byte_AD9238); return *v2 == v1[288] && v2[1] == v1[289] && v2[2] == v1[290] && v2[3] == v1[291] && v2[4] == v1[292]; } //----- (00715390) -------------------------------------------------------- BOOL __thiscall sub_715390(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { return a2 == this[288] && a3 == this[289] && a4 == this[290] && a5 == this[291] && a6 == this[292]; } //----- (007153F0) -------------------------------------------------------- char __thiscall sub_7153F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax char result; // al v1 = this; v2 = (_DWORD *)sub_6D3800(); if ( sub_6D3020(v2) || (v3 = (_DWORD *)sub_6D3800(), (unsigned __int8)sub_6D3010(v3)) || (result = sub_715330(v1)) != 0 || v1[487] ) { result = sub_6F36A0(&off_AB7F2C, 38, 143, 0, 0); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00715440) -------------------------------------------------------- int sub_715440() { _DWORD **v0; // esi v0 = (_DWORD **)(dword_B9E430 + 8); if ( *(_DWORD *)(dword_B9E430 + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(dword_B9E430 + 12) + 4))(71, 0, dword_B9E430 + 8); if ( v0[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v0[1] + 20))(71, 0, v0); } return ((int (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v0)[5])(v0, 71, 0, v0); } // B9E430: using guessed type int dword_B9E430; //----- (00715490) -------------------------------------------------------- int sub_715490() { int result; // eax if ( dword_B9E430 ) result = dword_B9E430 + 64; else result = 0; return result; } // B9E430: using guessed type int dword_B9E430; //----- (007154A0) -------------------------------------------------------- int sub_7154A0() { return *(_DWORD *)(dword_B9E430 + 2036); } // B9E430: using guessed type int dword_B9E430; //----- (007154B0) -------------------------------------------------------- int sub_7154B0() { return *(_DWORD *)(dword_B9E430 + 2040); } // B9E430: using guessed type int dword_B9E430; //----- (007154C0) -------------------------------------------------------- int sub_7154C0() { return *(_DWORD *)(dword_B9E430 + 2044); } // B9E430: using guessed type int dword_B9E430; //----- (007154D0) -------------------------------------------------------- int sub_7154D0() { return *(_DWORD *)(dword_B9E430 + 2048); } // B9E430: using guessed type int dword_B9E430; //----- (007154E0) -------------------------------------------------------- int sub_7154E0() { return *(_DWORD *)(dword_B9E430 + 2052); } // B9E430: using guessed type int dword_B9E430; //----- (007154F0) -------------------------------------------------------- int sub_7154F0() { return *(_DWORD *)(dword_B9E430 + 2056); } // B9E430: using guessed type int dword_B9E430; //----- (00715510) -------------------------------------------------------- signed int __thiscall sub_715510(_DWORD *this, int a2) { _DWORD *v2; // ebx char *v4; // eax char v5; // cl v2 = this; if ( !*(_DWORD *)(sub_6D3800() + 8) && !v2[503] ) return 0; qmemcpy(v2 + 346, (const void *)(a2 + 4), 0x34u); v4 = (char *)(a2 + 62); v2[359] = *(_DWORD *)(a2 + 56); do { v5 = *v4; v4[(_DWORD)((char *)v2 - a2 + 1378)] = *v4; ++v4; } while ( v5 ); return 1; } //----- (007155A0) -------------------------------------------------------- signed int __userpurge sub_7155A0@(int a1@, int a2@, int a3) { _DWORD **v3; // esi int v5; // [esp-4h] [ebp-4h] if ( *(_WORD *)a3 == 6584 ) { *(_DWORD *)(a1 + 1248) = *(_DWORD *)(a3 + 34); *(_DWORD *)(a1 + 1240) = *(_DWORD *)(a3 + 26); v5 = a2; v3 = (_DWORD **)(a1 + 8); *(_DWORD *)(a1 + 1244) = *(_DWORD *)(a3 + 30); if ( *(_DWORD *)(a1 + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(**(_DWORD **)(a1 + 12) + 4))(71, 0, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v3[1] + 20))(71, 0, v3); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **, int))(*v3)[5])(v3, 71, 0, v3, v5); if ( v3[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v3[1] + 4))(41, 0, v3); if ( v3[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v3[1] + 20))(41, 0, v3); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD))(*v3)[5])(v3, 41, 0); } return 1; } // 7155A0: could not find valid save-restore pair for esi //----- (00715650) -------------------------------------------------------- signed int __thiscall sub_715650(_DWORD *this, int *a2) { _DWORD **v2; // esi this[304] = *a2; this[305] = a2[1]; this[306] = a2[2]; this[307] = a2[3]; this[308] = a2[4]; sub_664630(dword_AD8C90, *a2, a2[1], a2[2], a2[3], a2[4]); v2 = (_DWORD **)(dword_B9E430 + 8); if ( *(_DWORD *)(dword_B9E430 + 12) ) { (*(void (__stdcall **)(signed int, _DWORD, int))(**(_DWORD **)(dword_B9E430 + 12) + 4))(71, 0, dword_B9E430 + 8); if ( v2[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v2[1] + 20))(71, 0, v2); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v2)[5])(v2, 71, 0, v2); return 1; } // B9E430: using guessed type int dword_B9E430; //----- (00715700) -------------------------------------------------------- void sub_715700() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E430; if ( dword_B9E430 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_B9E430 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_B9E430 = 0; } } // B9E430: using guessed type int dword_B9E430; //----- (00715740) -------------------------------------------------------- signed int __thiscall sub_715740(int this, int a2) { int v2; // esi _DWORD *v3; // edi char *v4; // ecx const char *v5; // eax _DWORD *v6; // eax char v7; // al _DWORD **v8; // esi int v10; // [esp+Ch] [ebp-1Ch] char v11[4]; // [esp+10h] [ebp-18h] int v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] int v14; // [esp+1Ch] [ebp-Ch] int v15; // [esp+20h] [ebp-8h] v2 = this; v10 = 0; if ( *(_DWORD *)a2 ) { sub_717DE0((char *)(this + 1216), a2 + 5); *((_DWORD *)dword_AD8EBC + 169) = *(_DWORD *)a2; if ( *(_BYTE *)(a2 + 4) ) { *(_DWORD *)(v2 + 2012) = 1; dword_AD8EBC[680] = 1; v3 = (_DWORD *)dword_AD8CCC; if ( dword_AD8CCC ) { do { v4 = (char *)v3[2]; v3 = (_DWORD *)*v3; if ( dword_AD8EBC == v4 ) goto LABEL_24; v10 |= 1u; v5 = (const char *)(*(int (**)(void))(*(_DWORD *)v4 + 84))(); v15 = 0; v14 = 0; v13 = 0; v12 = 0; *(_DWORD *)v11 = 0; strncpy(v11, v5, 0x14u); v6 = (_DWORD *)(sub_715490() + 1152); if ( *(_DWORD *)v11 != *v6 || v12 != v6[1] || v13 != v6[2] || v14 != v6[3] || v15 != v6[4] ) LABEL_24: v7 = 0; else v7 = 1; if ( v10 & 1 ) v10 &= 0xFFFFFFFE; } while ( !v7 && v3 ); } } v8 = (_DWORD **)(v2 + 8); if ( v8[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 4))(71, 0, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 20))(71, 0, v8); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v8)[5])(v8, 71, 0, v8); } else { *(_DWORD *)(this + 2012) = 0; } return 1; } // AD8CCC: using guessed type int dword_AD8CCC; //----- (00715890) -------------------------------------------------------- signed int __thiscall sub_715890(_DWORD **this, int a2) { __int64 v2; // rdi int v3; // eax int v4; // ecx int v5; // edx int v6; // eax signed __int64 v7; // rax int v8; // eax char v9; // cl const char *v10; // edx unsigned int v11; // eax char *v12; // edi char v13; // cl signed __int64 v14; // rax unsigned int v15; // eax char *v16; // edi char v17; // cl const char *v18; // esi unsigned int v19; // eax char *v20; // edi char v21; // cl signed __int64 v22; // rax unsigned int v23; // eax char *v24; // edi char v25; // cl const char *v26; // esi unsigned int v27; // eax char *v28; // edi char v29; // cl signed __int64 v30; // rax unsigned int v31; // eax char *v32; // edi char v33; // cl const char *v34; // esi unsigned int v35; // eax char *v36; // edi char v37; // cl char *v38; // eax char *v39; // edi _DWORD *v40; // eax char *v41; // eax int v42; // ecx int v43; // edx int v44; // eax int v45; // ecx int v46; // edx int v47; // eax int v48; // esi char *v49; // eax char *v50; // eax _DWORD *v51; // eax int v52; // edx int v53; // eax int v54; // esi int v55; // edi int v56; // ecx int v57; // edx int v58; // esi int *v59; // eax char *v60; // eax char *v61; // eax char *v62; // edi _DWORD *v63; // eax char *v64; // edi int v66; // [esp-Ch] [ebp-240h] int v67; // [esp-8h] [ebp-23Ch] char *v68; // [esp-4h] [ebp-238h] int v69; // [esp-4h] [ebp-238h] __int64 v70; // [esp+Ch] [ebp-228h] _DWORD **v71; // [esp+14h] [ebp-220h] char v72[256]; // [esp+18h] [ebp-21Ch] char v73[256]; // [esp+117h] [ebp-11Dh] char v74[256]; // [esp+118h] [ebp-11Ch] char v75[4]; // [esp+218h] [ebp-1Ch] int v76; // [esp+21Ch] [ebp-18h] int v77; // [esp+220h] [ebp-14h] int v78; // [esp+224h] [ebp-10h] int v79; // [esp+228h] [ebp-Ch] char v80; // [esp+22Ch] [ebp-8h] v71 = this; if ( *(_BYTE *)(a2 + 1) ) { if ( *(_BYTE *)(a2 + 1) == 1 ) { if ( !*(_DWORD *)(a2 + 29) && !*(_DWORD *)(a2 + 25) ) return 1; v42 = *(_DWORD *)(a2 + 2); v43 = *(_DWORD *)(a2 + 6); v77 = *(_DWORD *)(a2 + 10); v44 = *(unsigned __int16 *)(a2 + 22); *(_DWORD *)v75 = v42; v45 = *(_DWORD *)(a2 + 14); v76 = v43; v46 = *(_DWORD *)(a2 + 18); v78 = v45; v79 = v46; v80 = 0; v47 = sub_49F760(v44); v48 = v47; if ( *(_BYTE *)a2 == 3 ) { v69 = v47 + 34; v67 = *(_DWORD *)(a2 + 29); v66 = *(_DWORD *)(a2 + 25); v49 = (char *)sub_40C190(1194699638); } else { v51 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v51) ) return 1; v69 = v48 + 34; v67 = *(_DWORD *)(a2 + 29); v66 = *(_DWORD *)(a2 + 25); v49 = (char *)sub_40C190(-1530873404); } v50 = sub_7549E0(v49, v75, v66, v67, v69); goto LABEL_60; } if ( *(_BYTE *)(a2 + 1) != 2 ) return 1; v2 = *(_QWORD *)(a2 + 25); v70 = *(_QWORD *)(a2 + 25); sub_7186C0(*(_QWORD *)(a2 + 33)); v3 = *(_DWORD *)(a2 + 6); v4 = *(_DWORD *)(a2 + 10); *(_DWORD *)v75 = *(_DWORD *)(a2 + 2); v5 = *(_DWORD *)(a2 + 14); v76 = v3; v6 = *(_DWORD *)(a2 + 18); v77 = v4; v78 = v5; v79 = v6; v80 = 0; if ( v2 < 0 || SHIDWORD(v2) <= 0 && !(_DWORD)v2 ) return 1; memset(v72, 0, 0x100u); memset(v74, 0, 0x100u); if ( sub_680E90(v2) ) { v7 = sub_680E90(v2); sprintf(v72, "%I64d", v7); v8 = 0; do { v9 = v72[v8]; v74[v8++] = v9; } while ( v9 ); v10 = sub_40C190(1197446809); v11 = strlen(v10) + 1; v12 = v73; do v13 = (v12++)[1]; while ( v13 ); qmemcpy(v12, v10, v11); v2 = v70; } if ( sub_680EB0(v2) ) { v14 = sub_680EB0(v2); sprintf(v72, "%I64d", v14); v15 = strlen(v72) + 1; v16 = v73; do v17 = (v16++)[1]; while ( v17 ); qmemcpy(v16, v72, v15); v18 = sub_40C190(1201903011); v19 = strlen(v18) + 1; v20 = v73; do v21 = (v20++)[1]; while ( v21 ); qmemcpy(v20, v18, v19); v2 = v70; } if ( sub_680F00(v2) ) { v22 = sub_680F00(v2); sprintf(v72, "%I64d", v22); v23 = strlen(v72) + 1; v24 = v73; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, v72, v23); v26 = sub_40C190(-1732930065); v27 = strlen(v26) + 1; v28 = v73; do v29 = (v28++)[1]; while ( v29 ); qmemcpy(v28, v26, v27); v2 = v70; } if ( sub_680F60(v2) ) { v30 = sub_680F60(v2); sprintf(v72, "%I64d", v30); v31 = strlen(v72) + 1; v32 = v73; do v33 = (v32++)[1]; while ( v33 ); qmemcpy(v32, v72, v31); v34 = sub_40C190(-2001757707); v35 = strlen(v34) + 1; v36 = v73; do v37 = (v36++)[1]; while ( v37 ); qmemcpy(v36, v34, v35); } if ( *(_BYTE *)a2 == 3 ) { v38 = (char *)sub_40C190(-213498837); v39 = sub_7549E0(v38, v75, v74); if ( v71[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 4))(25, v39, v71 + 2); if ( v71[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 20))(25, v39, v71 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v71[2][5])(v71 + 2, 25, v39, v71 + 2); return 1; } v40 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v40) ) return 1; v68 = v74; v41 = (char *)sub_40C190(1502634657); LABEL_59: v50 = sub_7549E0(v41, v75, v68); LABEL_60: v64 = v50; if ( v71[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 4))(25, v50, v71 + 2); if ( v71[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 20))(25, v64, v71 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v71[2][5])(v71 + 2, 25, v64, v71 + 2); return 1; } v52 = *(_DWORD *)(a2 + 6); v53 = *(_DWORD *)(a2 + 10); v54 = dword_ACB230; v55 = *(unsigned __int16 *)(a2 + 22); *(_DWORD *)v75 = *(_DWORD *)(a2 + 2); v56 = *(_DWORD *)(a2 + 14); v76 = v52; v57 = *(_DWORD *)(a2 + 18); v78 = v56; v79 = v57; v77 = v53; v80 = 0; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v55) ) { if ( (unsigned __int16)v55 <= *(_WORD *)(v54 + 200) ) { v59 = (int *)(*(_DWORD *)(v54 + 196) + 4 * v55); if ( *v59 ) v58 = *v59; else v58 = 0; } else { v58 = 0; } } else { v58 = 0; } if ( *(_BYTE *)a2 != 3 ) { v63 = (_DWORD *)sub_6D3800(); if ( !(unsigned __int8)sub_6D3010(v63) ) return 1; v68 = (char *)(v58 + 34); v41 = (char *)sub_40C190(1164733048); goto LABEL_59; } v60 = (char *)sub_40C190(-1769796924); v61 = sub_7549E0(v60, v75, v58 + 34); v62 = v61; if ( v71[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 4))(25, v61, v71 + 2); if ( v71[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v71[3] + 20))(25, v62, v71 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v71[2][5])(v71 + 2, 25, v62, v71 + 2); return 1; } // ACB230: using guessed type int dword_ACB230; // 715890: using guessed type char var_11C[256]; // 715890: using guessed type char var_21C[256]; //----- (00715E30) -------------------------------------------------------- signed int __thiscall sub_715E30(_DWORD **this, int a2) { _DWORD **v2; // ebx _DWORD *v3; // eax unsigned int v4; // edi signed int v5; // ebx int v6; // eax int v7; // ecx int v8; // edx int v9; // eax signed __int64 v10; // rax int v11; // eax char v12; // cl const char *v13; // edx unsigned int v14; // eax char *v15; // edi char v16; // cl signed __int64 v17; // rax unsigned int v18; // eax char *v19; // edi char v20; // cl const char *v21; // ecx unsigned int v22; // eax const char *v23; // esi char *v24; // edi char v25; // cl signed __int64 v26; // rax unsigned int v27; // eax char *v28; // edi char v29; // cl const char *v30; // ecx unsigned int v31; // eax const char *v32; // esi char *v33; // edi char v34; // cl signed __int64 v35; // rax unsigned int v36; // eax char *v37; // edi char v38; // cl const char *v39; // ecx unsigned int v40; // eax const char *v41; // esi char *v42; // edi char v43; // cl char *v44; // eax char *v45; // edi int v46; // eax int v47; // ecx int v48; // edx int v49; // ecx int v50; // edx int v51; // ST1C_4 int v52; // ST18_4 int v53; // ST14_4 char *v54; // eax char *v55; // edi int v56; // eax int v57; // ecx int v58; // edx int v59; // ecx int v60; // edx int v61; // ST1C_4 char *v62; // eax char *v63; // edi unsigned int v65; // [esp+8h] [ebp-228h] _DWORD **v66; // [esp+10h] [ebp-220h] char v67[256]; // [esp+14h] [ebp-21Ch] char v68[256]; // [esp+113h] [ebp-11Dh] char v69[256]; // [esp+114h] [ebp-11Ch] char v70[4]; // [esp+214h] [ebp-1Ch] int v71; // [esp+218h] [ebp-18h] int v72; // [esp+21Ch] [ebp-14h] int v73; // [esp+220h] [ebp-10h] int v74; // [esp+224h] [ebp-Ch] char v75; // [esp+228h] [ebp-8h] v2 = this; v66 = this; v3 = (_DWORD *)sub_6D3800(); if ( (unsigned __int8)sub_6D3010(v3) ) { if ( *(_BYTE *)(a2 + 1) ) { if ( *(_BYTE *)(a2 + 1) == 1 ) { v46 = *(unsigned __int16 *)(a2 + 22); if ( (_WORD)v46 != -1 ) { v47 = *(_DWORD *)(a2 + 6); *(_DWORD *)v70 = *(_DWORD *)(a2 + 2); v48 = *(_DWORD *)(a2 + 10); v71 = v47; v49 = *(_DWORD *)(a2 + 14); v72 = v48; v50 = *(_DWORD *)(a2 + 18); v73 = v49; v74 = v50; v75 = 0; v51 = sub_49F760(v46) + 34; v52 = *(_DWORD *)(a2 + 29); v53 = *(_DWORD *)(a2 + 25); v54 = (char *)sub_40C190(-1426083105); v55 = sub_7549E0(v54, v70, v53, v52, v51); if ( v2[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v2[3] + 4))(25, v55, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v2[3] + 20))(25, v55, v2 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v2[2][5])(v2 + 2, 25, v55, v2 + 2); } } else if ( *(_BYTE *)(a2 + 1) == 2 ) { v4 = *(_DWORD *)(a2 + 25); v5 = *(_DWORD *)(a2 + 29); v65 = *(_DWORD *)(a2 + 25); sub_7186C0(*(_QWORD *)(a2 + 33)); v6 = *(_DWORD *)(a2 + 6); v7 = *(_DWORD *)(a2 + 10); *(_DWORD *)v70 = *(_DWORD *)(a2 + 2); v8 = *(_DWORD *)(a2 + 14); v71 = v6; v9 = *(_DWORD *)(a2 + 18); v72 = v7; v73 = v8; v74 = v9; v75 = 0; if ( v5 >= 0 && (v5 > 0 || v4) ) { memset(v67, 0, 0x100u); memset(v69, 0, 0x100u); if ( sub_680E90(__PAIR__(v5, v4)) ) { v10 = sub_680E90(__PAIR__(v5, v4)); sprintf(v67, "%I64d", v10); v11 = 0; do { v12 = v67[v11]; v69[v11++] = v12; } while ( v12 ); v13 = sub_40C190(1197446809); v14 = strlen(v13) + 1; v15 = v68; do v16 = (v15++)[1]; while ( v16 ); qmemcpy(v15, v13, v14); v4 = v65; } if ( sub_680EB0(__PAIR__(v5, v4)) ) { v17 = sub_680EB0(__PAIR__(v5, v4)); sprintf(v67, "%I64d", v17); v18 = strlen(v67) + 1; v19 = v68; do v20 = (v19++)[1]; while ( v20 ); qmemcpy(v19, v67, v18); v21 = sub_40C190(1201903011); v22 = strlen(v21) + 1; v23 = v21; v24 = v68; do v25 = (v24++)[1]; while ( v25 ); qmemcpy(v24, v23, v22); v4 = v65; } if ( sub_680F00(__PAIR__(v5, v4)) ) { v26 = sub_680F00(__PAIR__(v5, v4)); sprintf(v67, "%I64d", v26); v27 = strlen(v67) + 1; v28 = v68; do v29 = (v28++)[1]; while ( v29 ); qmemcpy(v28, v67, v27); v30 = sub_40C190(-1732930065); v31 = strlen(v30) + 1; v32 = v30; v33 = v68; do v34 = (v33++)[1]; while ( v34 ); qmemcpy(v33, v32, v31); v4 = v65; } if ( sub_680F60(__PAIR__(v5, v4)) ) { v35 = sub_680F60(__PAIR__(v5, v4)); sprintf(v67, "%I64d", v35); v36 = strlen(v67) + 1; v37 = v68; do v38 = (v37++)[1]; while ( v38 ); qmemcpy(v37, v67, v36); v39 = sub_40C190(-2001757707); v40 = strlen(v39) + 1; v41 = v39; v42 = v68; do v43 = (v42++)[1]; while ( v43 ); qmemcpy(v42, v41, v40); } v44 = (char *)sub_40C190(-2088856145); v45 = sub_7549E0(v44, v70, v69); if ( v66[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v66[3] + 4))(25, v45, v66 + 2); if ( v66[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v66[3] + 20))(25, v45, v66 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v66[2][5])(v66 + 2, 25, v45, v66 + 2); } } } else { v56 = *(unsigned __int16 *)(a2 + 22); if ( (_WORD)v56 != -1 ) { v57 = *(_DWORD *)(a2 + 6); *(_DWORD *)v70 = *(_DWORD *)(a2 + 2); v58 = *(_DWORD *)(a2 + 10); v71 = v57; v59 = *(_DWORD *)(a2 + 14); v72 = v58; v60 = *(_DWORD *)(a2 + 18); v73 = v59; v74 = v60; v75 = 0; v61 = sub_49F760(v56) + 34; v62 = (char *)sub_40C190(1587568272); v63 = sub_7549E0(v62, v70, v61); if ( v2[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v2[3] + 4))(25, v63, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v2[3] + 20))(25, v63, v2 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v2[2][5])(v2 + 2, 25, v63, v2 + 2); } } } return 1; } // 715E30: using guessed type char var_11C[256]; // 715E30: using guessed type char var_21C[256]; //----- (00716330) -------------------------------------------------------- signed int __thiscall sub_716330(char *this, int a2, int a3) { signed int v3; // eax char *v4; // esi _DWORD **v5; // esi const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi v3 = *(unsigned __int16 *)(a3 + 8); v4 = this; if ( (_WORD)v3 != 6560 ) { if ( v3 > 6561 ) { switch ( v3 ) { case 6562: v7 = sub_40C190(-1023072970); goto LABEL_15; case 6564: v7 = sub_40C190(-584508371); goto LABEL_15; case 6565: v7 = sub_40C190(-1018169760); goto LABEL_15; case 6566: v7 = sub_40C190(1988193177); goto LABEL_15; case 6567: v7 = sub_40C190(-723960768); goto LABEL_15; default: return 1; } return 1; } if ( v3 == 6561 ) { v7 = sub_40C190(-2004191329); } else { if ( v3 != 6115 ) return 1; v7 = sub_40C190(-1547716847); } LABEL_15: v8 = (_DWORD **)(v4 + 8); v9 = v7; if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v7, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); return 1; } v5 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !(*(unsigned __int8 (**)(void))(*v5[179] + 260))() ) { sub_4A6BA0(v5); return 1; } return 1; } //----- (00716440) -------------------------------------------------------- signed int __thiscall sub_716440(char *this, int a2, int a3) { int v3; // eax char *v4; // esi _DWORD **v5; // esi const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi v3 = *(unsigned __int16 *)(a3 + 8); v4 = this; if ( (_WORD)v3 == 6112 ) { v5 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !(*(unsigned __int8 (**)(void))(*v5[179] + 260))() ) { sub_4A6BA0(v5); return 1; } } else { switch ( v3 ) { case 6113: v7 = sub_40C190(-2004191329); goto LABEL_13; case 6114: v7 = sub_40C190(-2114199841); goto LABEL_13; case 6115: v7 = sub_40C190(-1547716847); goto LABEL_13; case 6116: v7 = sub_40C190(756689201); goto LABEL_13; case 6117: v7 = sub_40C190(1808582883); goto LABEL_13; case 6118: v7 = sub_40C190(-1018169760); goto LABEL_13; case 6119: v7 = sub_40C190(1988193177); goto LABEL_13; case 6120: v7 = sub_40C190(-723960768); LABEL_13: v8 = (_DWORD **)(v4 + 8); v9 = v7; if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v7, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); break; default: return 1; } } return 1; } //----- (00716550) -------------------------------------------------------- signed int __thiscall sub_716550(_DWORD **this, unsigned __int16 *a2) { int v2; // eax _DWORD **v3; // esi _DWORD *v4; // ecx char v5; // al const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi v2 = *a2; v3 = this; if ( (_WORD)v2 != 6272 ) { switch ( v2 ) { case 6273: v7 = sub_40C190(-822552364); goto LABEL_12; case 6274: case 6276: v7 = sub_40C190(489651314); goto LABEL_12; case 6275: v7 = sub_40C190(-1018169760); goto LABEL_12; case 6277: v7 = sub_40C190(-723960768); LABEL_12: v8 = v3 + 2; v9 = v7; if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v7, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); break; default: return 1; } return 1; } if ( (*(unsigned __int8 (**)(void))(*this[512] + 260))() ) return 1; sub_704540((char *)v3[512], (int)a2); sub_705750((_DWORD **)v3[512]); sub_8F82A0(&unk_BA6B10, v3[512]); if ( dword_B9E430 ) v4 = (_DWORD *)(dword_B9E430 + 64); else v4 = 0; v5 = sub_715330(v4); sub_704490((_BYTE **)v3[512], v5); return 1; } // B9E430: using guessed type int dword_B9E430; //----- (00716670) -------------------------------------------------------- signed int __thiscall sub_716670(char *this, int a2, _WORD *a3) { char *v3; // esi char *v4; // eax signed int result; // eax const CHAR *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi v3 = this; if ( *a3 == 6336 ) { v4 = (char *)sub_40C190(-872542689); sub_462CA0(1, v4); result = 1; } else { sub_6F36A0(&off_AB7F2C, 38, 49, 0, 0); switch ( *a3 ) { case 0x1881: v6 = sub_40C190(-822552364); goto LABEL_8; case 0x1882: case 0x1884: v6 = sub_40C190(489651314); goto LABEL_8; case 0x1883: v6 = sub_40C190(-1018169760); goto LABEL_8; case 0x1885: v6 = sub_40C190(-723960768); LABEL_8: v7 = (_DWORD **)(v3 + 8); v8 = v6; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v6, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); break; default: break; } result = 1; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00716750) -------------------------------------------------------- signed int __thiscall sub_716750(char **this, int a2, unsigned __int16 *a3) { char **v3; // esi char *v4; // eax const CHAR *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi v3 = this; switch ( *a3 ) { case 0x1950u: sub_704340(this[512], (int)a3); v4 = (char *)sub_40C190(860397161); sub_462CA0(1, v4); return 1; case 0x1951u: v6 = sub_40C190(-822552364); goto LABEL_7; case 0x1952u: case 0x1954u: v6 = sub_40C190(1988193177); goto LABEL_7; case 0x1953u: v6 = sub_40C190(-1018169760); goto LABEL_7; case 0x1955u: v6 = sub_40C190(-723960768); LABEL_7: v7 = (_DWORD **)(v3 + 2); v8 = v6; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v6, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); break; default: return 1; } return 1; } //----- (00716820) -------------------------------------------------------- signed int __thiscall sub_716820(_DWORD **this, unsigned __int16 *a2) { int v2; // eax _DWORD **v3; // esi const CHAR *v5; // eax _DWORD **v6; // esi const CHAR *v7; // edi v2 = *a2; v3 = this; if ( (_WORD)v2 == 6280 ) { if ( !(*(unsigned __int8 (**)(void))(*this[513] + 260))() ) { sub_701150((char *)v3[513], (int)a2); sub_701480((_DWORD **)v3[513]); sub_8F82A0(&unk_BA6B10, v3[513]); return 1; } } else { switch ( v2 ) { case 6281: v5 = sub_40C190(-822552364); goto LABEL_9; case 6282: case 6285: v5 = sub_40C190(489651314); goto LABEL_9; case 6283: v5 = sub_40C190(-1018169760); goto LABEL_9; case 6284: v5 = sub_40C190(1988193177); LABEL_9: v6 = v3 + 2; v7 = v5; if ( v6[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 4))(25, v5, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v6[1] + 20))(25, v7, v6); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v6)[5])(v6, 25, v7, v6); break; default: return 1; } } return 1; } //----- (00716910) -------------------------------------------------------- signed int __thiscall sub_716910(char *this, int a2, _WORD *a3) { char *v3; // esi char *v4; // eax signed int result; // eax const CHAR *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi v3 = this; if ( *a3 == 6408 ) { v4 = (char *)sub_40C190(-872542689); sub_462CA0(1, v4); result = 1; } else { sub_6F36A0(&off_AB7F2C, 38, 53, 0, 0); switch ( *a3 ) { case 0x1909: v6 = sub_40C190(-822552364); goto LABEL_8; case 0x190A: case 0x190C: v6 = sub_40C190(1988193177); goto LABEL_8; case 0x190B: v6 = sub_40C190(-1018169760); goto LABEL_8; case 0x190D: v6 = sub_40C190(489651314); LABEL_8: v7 = (_DWORD **)(v3 + 8); v8 = v6; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v6, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); break; default: break; } result = 1; } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007169F0) -------------------------------------------------------- signed int __thiscall sub_7169F0(_BYTE ***this, int a2, unsigned __int16 *a3) { _BYTE ***v3; // esi char *v4; // eax const CHAR *v6; // eax _DWORD **v7; // esi const CHAR *v8; // edi v3 = this; switch ( *a3 ) { case 0x1998u: sub_700FA0(this[513]); v4 = (char *)sub_40C190(860397161); sub_462CA0(1, v4); return 1; case 0x1999u: v6 = sub_40C190(-822552364); goto LABEL_7; case 0x199Au: case 0x199Cu: v6 = sub_40C190(1988193177); goto LABEL_7; case 0x199Bu: v6 = sub_40C190(-1018169760); goto LABEL_7; case 0x199Du: v6 = sub_40C190(-723960768); LABEL_7: v7 = v3 + 2; v8 = v6; if ( v7[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 4))(25, v6, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v7[1] + 20))(25, v8, v7); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v7)[5])(v7, 25, v8, v7); break; default: return 1; } return 1; } //----- (00716AC0) -------------------------------------------------------- signed int __thiscall sub_716AC0(_DWORD **this, unsigned __int16 *a2) { _DWORD **v2; // esi int v3; // eax int v5; // eax int v6; // eax const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi v2 = this; v3 = *a2; if ( (_WORD)v3 != 6568 ) { v5 = v3 - 6569; if ( v5 ) { v6 = v5 - 1; if ( v6 ) { if ( v6 != 1 ) return 1; v7 = sub_40C190(-723960768); } else { v7 = sub_40C190(-1018169760); } } else { v7 = sub_40C190(-822552364); } v8 = v2 + 2; v9 = v7; if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v7, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); return 1; } sub_6FFA80(this[511], (int)a2); if ( !(*(unsigned __int8 (**)(void))(*v2[511] + 260))() ) { sub_8F82A0(&unk_BA6B10, v2[511]); return 1; } return 1; } //----- (00716B80) -------------------------------------------------------- signed int __thiscall sub_716B80(_DWORD ***this, unsigned __int16 *a2) { _DWORD ***v2; // esi int v3; // eax int v5; // eax int v6; // eax const CHAR *v7; // eax _DWORD **v8; // esi const CHAR *v9; // edi v2 = this; v3 = *a2; if ( (_WORD)v3 != 6576 ) { v5 = v3 - 6577; if ( v5 ) { v6 = v5 - 1; if ( v6 ) { if ( v6 != 1 ) return 1; v7 = sub_40C190(-723960768); } else { v7 = sub_40C190(-1018169760); } } else { v7 = sub_40C190(-822552364); } v8 = v2 + 2; v9 = v7; if ( v8[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 4))(25, v7, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v8[1] + 20))(25, v9, v8); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v8)[5])(v8, 25, v9, v8); return 1; } sub_706960(this[510], (int)a2); if ( !((unsigned __int8 (*)(void))(*v2[510])[65])() ) { sub_8F82A0(&unk_BA6B10, v2[510]); return 1; } return 1; } //----- (00716C40) -------------------------------------------------------- signed int __thiscall sub_716C40(char *this, unsigned __int16 *a2) { signed int v2; // eax char *v3; // esi const CHAR *v4; // eax _DWORD **v5; // esi const CHAR *v6; // edi v2 = *a2; v3 = this; if ( v2 <= 15872 ) { if ( v2 == 15872 ) { v4 = sub_4090F0(357845070); LABEL_10: v5 = (_DWORD **)(v3 + 8); v6 = v4; if ( v5[1] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 4))(25, v4, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[1] + 20))(25, v6, v5); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))(*v5)[5])(v5, 25, v6, v5); } else { switch ( v2 ) { case 6056: case 6057: v4 = sub_40C190(-822552364); goto LABEL_10; case 6058: v4 = sub_40C190(-1018169760); goto LABEL_10; case 6059: v4 = sub_40C190(252460580); goto LABEL_10; case 6061: v4 = sub_40C190(-1763514403); goto LABEL_10; case 6062: v4 = sub_40C190(1029917518); goto LABEL_10; default: return 1; } } } return 1; } //----- (00716D20) -------------------------------------------------------- signed int __thiscall sub_716D20(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // eax int v4; // ecx int v5; // eax int v6; // ecx char *v7; // eax char *v8; // ebx char v10[4]; // [esp+Ch] [ebp-1Ch] int v11; // [esp+10h] [ebp-18h] int v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] int v14; // [esp+1Ch] [ebp-Ch] char v15; // [esp+20h] [ebp-8h] v2 = this; this[304] = *a2; this[305] = a2[1]; this[306] = a2[2]; this[307] = a2[3]; this[308] = a2[4]; sub_664630(dword_AD8C90, *a2, a2[1], a2[2], a2[3], a2[4]); v3 = *a2; v4 = a2[1]; v12 = a2[2]; *(_DWORD *)v10 = v3; v5 = a2[3]; v11 = v4; v6 = a2[4]; v13 = v5; v14 = v6; v15 = 0; v7 = (char *)sub_40C190(52642655); v8 = sub_7549E0(v7, v10); if ( v2[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD *))(*(_DWORD *)v2[3] + 4))(25, v8, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD *))(*(_DWORD *)v2[3] + 20))(25, v8, v2 + 2); } (*(void (__thiscall **)(_DWORD *, signed int, char *, _DWORD *))(v2[2] + 20))(v2 + 2, 25, v8, v2 + 2); return 1; } //----- (00716E20) -------------------------------------------------------- signed int __thiscall sub_716E20(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // eax int v4; // ecx int v5; // eax int v6; // ecx char *v7; // eax char *v8; // ebx char v10[4]; // [esp+Ch] [ebp-1Ch] int v11; // [esp+10h] [ebp-18h] int v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] int v14; // [esp+1Ch] [ebp-Ch] char v15; // [esp+20h] [ebp-8h] v2 = this; this[304] = a2[5]; this[305] = a2[6]; this[306] = a2[7]; this[307] = a2[8]; this[308] = a2[9]; sub_664630(dword_AD8C90, a2[5], a2[6], a2[7], a2[8], a2[9]); v3 = a2[5]; v4 = a2[6]; v12 = a2[7]; *(_DWORD *)v10 = v3; v5 = a2[8]; v11 = v4; v6 = a2[9]; v13 = v5; v14 = v6; v15 = 0; v7 = (char *)sub_40C190(52642655); v8 = sub_7549E0(v7, v10); if ( v2[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD *))(*(_DWORD *)v2[3] + 4))(25, v8, v2 + 2); if ( v2[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD *))(*(_DWORD *)v2[3] + 20))(25, v8, v2 + 2); } (*(void (__thiscall **)(_DWORD *, signed int, char *, _DWORD *))(v2[2] + 20))(v2 + 2, 25, v8, v2 + 2); return 1; } //----- (00716F20) -------------------------------------------------------- signed int __thiscall sub_716F20(_DWORD **this, unsigned int *a2) { __int64 v2; // rdi unsigned int v3; // ebx unsigned int v4; // esi signed __int64 v5; // rax int v6; // eax char v7; // cl const char *v8; // edx unsigned int v9; // eax char *v10; // edi char v11; // cl char *v12; // edi char v13; // al signed __int64 v14; // rax unsigned int v15; // eax char *v16; // edi char v17; // cl const char *v18; // ecx unsigned int v19; // eax const char *v20; // esi char *v21; // edi char v22; // cl char *v23; // edi char v24; // al signed __int64 v25; // rax unsigned int v26; // eax char *v27; // edi char v28; // cl const char *v29; // ecx unsigned int v30; // eax const char *v31; // esi char *v32; // edi char v33; // cl char *v34; // edi char v35; // al signed __int64 v36; // rax unsigned int v37; // eax char *v38; // edi char v39; // cl const char *v40; // ecx unsigned int v41; // eax const char *v42; // esi char *v43; // edi char v44; // cl char *v45; // edi char v46; // al char *v47; // eax _DWORD **v48; // ebx char *v49; // edi int v50; // esi int v51; // edi int v52; // edx int v53; // eax int v54; // eax int v55; // ST14_4 int v56; // ST10_4 char *v57; // eax char *v58; // eax int v59; // ST14_4 char *v60; // eax char *v61; // edi _DWORD **v63; // [esp+0h] [ebp-214h] unsigned int v64; // [esp+8h] [ebp-20Ch] char v65[256]; // [esp+10h] [ebp-204h] char v66[256]; // [esp+10Fh] [ebp-105h] char v67[256]; // [esp+110h] [ebp-104h] v63 = this; if ( a2 ) { HIDWORD(v2) = *a2; LODWORD(v2) = a2[1]; v3 = *a2; v64 = a2[1]; memset(v65, 0, 0x100u); memset(v67, 0, 0x100u); if ( v2 ) { v4 = v2; if ( sub_680E90(__PAIR__(v2, v3)) ) { v5 = sub_680E90(__PAIR__(v2, v3)); sprintf(v65, "%I64d", v5); v6 = 0; do { v7 = v65[v6]; v67[v6++] = v7; } while ( v7 ); v8 = sub_40C190(1197446809); v9 = strlen(v8) + 1; v10 = v66; do v11 = (v10++)[1]; while ( v11 ); qmemcpy(v10, v8, v9); v12 = v66; do v13 = (v12++)[1]; while ( v13 ); v4 = v64; *v12 = 0; } if ( sub_680EB0(__PAIR__(v4, v3)) ) { v14 = sub_680EB0(__PAIR__(v4, v3)); sprintf(v65, "%I64d", v14); v15 = strlen(v65) + 1; v16 = v66; do v17 = (v16++)[1]; while ( v17 ); qmemcpy(v16, v65, v15); v18 = sub_40C190(1201903011); v19 = strlen(v18) + 1; v20 = v18; v21 = v66; do v22 = (v21++)[1]; while ( v22 ); qmemcpy(v21, v20, v19); v23 = v66; do v24 = (v23++)[1]; while ( v24 ); v4 = v64; *v23 = 0; } if ( sub_680F00(__PAIR__(v4, v3)) ) { v25 = sub_680F00(__PAIR__(v4, v3)); sprintf(v65, "%I64d", v25); v26 = strlen(v65) + 1; v27 = v66; do v28 = (v27++)[1]; while ( v28 ); qmemcpy(v27, v65, v26); v29 = sub_40C190(-1732930065); v30 = strlen(v29) + 1; v31 = v29; v32 = v66; do v33 = (v32++)[1]; while ( v33 ); qmemcpy(v32, v31, v30); v34 = v66; do v35 = (v34++)[1]; while ( v35 ); v4 = v64; *v34 = 0; } if ( sub_680F60(__PAIR__(v4, v3)) ) { v36 = sub_680F60(__PAIR__(v64, v3)); sprintf(v65, "%I64d", v36); v37 = strlen(v65) + 1; v38 = v66; do v39 = (v38++)[1]; while ( v39 ); qmemcpy(v38, v65, v37); v40 = sub_40C190(-2001757707); v41 = strlen(v40) + 1; v42 = v40; v43 = v66; do v44 = (v43++)[1]; while ( v44 ); qmemcpy(v43, v42, v41); v45 = v66; do v46 = (v45++)[1]; while ( v46 ); *v45 = 0; } v47 = (char *)sub_40C190(-770980627); v48 = v63; v49 = sub_7549E0(v47, v67); if ( v63[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v63[3] + 4))(25, v49, v63 + 2); if ( v63[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v63[3] + 20))(25, v49, v63 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v63[2][5])(v63 + 2, 25, v49, v63 + 2); } else { v48 = v63; } if ( *((_WORD *)a2 + 4) != -1 ) { v50 = dword_ACB230; v51 = *((unsigned __int16 *)a2 + 4); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACB230 + 16))(dword_ACB230, v51) ) { if ( (unsigned __int16)v51 <= *(_WORD *)(v50 + 200) ) { v52 = *(_DWORD *)(v50 + 196); if ( *(_DWORD *)(v52 + 4 * v51) ) { v53 = *(_DWORD *)(v52 + 4 * v51); if ( v53 ) { v54 = v53 + 34; if ( *(unsigned int *)((char *)a2 + 10) ) { v55 = *(unsigned int *)((char *)a2 + 10); v56 = v54; v57 = (char *)sub_40C190(-764540109); v58 = sub_7549E0(v57, v56, v55); } else { v59 = v54; v60 = (char *)sub_40C190(1931132135); v58 = sub_7549E0(v60, v59); } v61 = v58; if ( v48[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v48[3] + 4))(25, v58, v48 + 2); if ( v48[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v48[3] + 20))(25, v61, v48 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v48[2][5])(v48 + 2, 25, v61, v48 + 2); } } } } } } return 1; } // ACB230: using guessed type int dword_ACB230; // 716F20: using guessed type char var_104[256]; // 716F20: using guessed type char var_204[256]; //----- (007173C0) -------------------------------------------------------- int __thiscall sub_7173C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi int v3; // ebx void *v4; // eax _DWORD *v5; // esi _DWORD *v6; // ST04_4 int result; // eax v1 = this; v2 = (_DWORD *)this[489]; if ( this[491] ) { v3 = this[491]; do { v4 = (void *)v2[2]; v2 = (_DWORD *)*v2; if ( v4 ) operator delete(v4); --v3; } while ( v3 ); } v5 = (_DWORD *)v1[489]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[488] + 8))(v1 + 488, v6); } result = 0; v1[491] = 0; v1[489] = 0; v1[490] = 0; return result; } //----- (00717430) -------------------------------------------------------- signed int __thiscall sub_717430(_DWORD *this, unsigned __int16 *a2) { int v2; // eax _DWORD *v3; // ebx int v4; // eax int v5; // eax const CHAR *v6; // eax const CHAR *v7; // edi signed int result; // eax _DWORD *v9; // esi _DWORD *v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // ecx int v14; // [esp+14h] [ebp+8h] v2 = *a2; v3 = this; if ( (_WORD)v2 != 12680 ) { v4 = v2 - 12682; if ( !v4 ) { v6 = sub_4090F0(-1222909615); goto LABEL_6; } v5 = v4 - 1; if ( !v5 ) { v6 = sub_4090F0(-1076635299); goto LABEL_6; } if ( v5 == 1 ) { v6 = sub_4090F0(-1660818118); LABEL_6: v7 = v6; if ( v3[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[3] + 4))(25, v6, v3 + 2); if ( v3[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD *))(*(_DWORD *)v3[3] + 20))(25, v7, v3 + 2); } (*(void (__thiscall **)(_DWORD *, signed int, const CHAR *, _DWORD *))(v3[2] + 20))(v3 + 2, 25, v7, v3 + 2); } return 1; } sub_7173C0(this + 16); v9 = 0; if ( !a2[2] ) return 1; v10 = a2 + 12; v14 = a2[2]; while ( 1 ) { v11 = operator new(0x20u); if ( v11 ) { v11[6] = 0; v11[5] = 0; v11[4] = 0; v11[3] = 0; v11[2] = 0; v9 = v11; } *v9 = *(v10 - 4); v9[1] = *(v10 - 3); v9[2] = *(v10 - 2); v9[3] = *(v10 - 1); v9[4] = *v10; v9[5] = v10[1]; v9[6] = v10[2]; v9[7] = v10[3]; v12 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[504] + 4))(v3 + 504); v12[2] = v9; *v12 = 0; v12[1] = v3[506]; v13 = (_DWORD *)v3[506]; if ( v13 ) *v13 = v12; else v3[505] = v12; v3[506] = v12; result = 1; ++v3[507]; v10 += 8; if ( !--v14 ) break; v9 = 0; } return result; } //----- (00717580) -------------------------------------------------------- char __thiscall sub_717580(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int *v4; // esi int v6; // edi int *v7; // [esp+8h] [ebp-4h] v2 = this; v3 = *sub_4DD710(this + 483, &v7, &a2); v4 = (int *)v2[484]; v7 = v3; if ( v3 == v4 ) return 0; if ( *((_BYTE *)v3 + 16) != 2 ) { v6 = a2; while ( v3[3] != v6 || *((_BYTE *)v3 + 16) != 2 ) { sub_717D90(&v7); v3 = v7; if ( v7 == v4 ) return 0; } } return 1; } //----- (007175F0) -------------------------------------------------------- signed int __thiscall sub_7175F0(int this, _DWORD *a2) { _DWORD *v2; // edi int v3; // esi _DWORD *v4; // ST04_4 int *v5; // eax v2 = a2; v3 = this; if ( a2 ) { v4 = a2; *(_BYTE *)(this + 1992) = 0; v5 = *sub_4DD710((_DWORD *)(this + 1996), &a2, v4); if ( v5 != *(int **)(v3 + 2000) ) *((_BYTE *)v5 + 16) = *((_BYTE *)v2 + 4); } return 1; } //----- (00717630) -------------------------------------------------------- LONG __thiscall sub_717630(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax int v4; // edi char v6; // [esp+10h] [ebp-14h] _DWORD *v7; // [esp+14h] [ebp-10h] int v8; // [esp+20h] [ebp-4h] v1 = this; v7 = this; *this = &GuildAcademyTask::`vftable'; this[2] = &GuildAcademyTask::`vftable'; this[16] = &GuildAcademyTask::`vftable'; v2 = (int *)this[500]; v3 = *v2; v8 = 2; if ( (int *)v3 != v2 ) { do v3 = *sub_6CDBF0(v1 + 499, (int *)&v6, v3); while ( v3 != v1[500] ); } sub_668390(v1 + 499); *((_BYTE *)v1 + 1992) = 0; sub_7173C0(v1 + 16); v4 = v1[508]; LOBYTE(v8) = 1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); LOBYTE(v8) = 0; sub_717FA0(v1 + 16); v8 = -1; return sub_49FA00(v1); } // A0178C: using guessed type void *GuildAcademyTask::`vftable'; // A017E0: using guessed type void *GuildAcademyTask::`vftable'; // A017FC: using guessed type void *GuildAcademyTask::`vftable'; //----- (00717710) -------------------------------------------------------- void ***__thiscall sub_717710(void ***this) { void ***v1; // esi void **v2; // edi v1 = this; sub_6C2E00(this, 0); sub_718060(v1 + 16); *v1 = &GuildAcademyTask::`vftable'; v1[2] = &GuildAcademyTask::`vftable'; v1[16] = &GuildAcademyTask::`vftable'; v1[508] = 0; v1[503] = 0; v2 = v1[508]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)v2 + 1) && v2 ) (*(void (__thiscall **)(void **, signed int))*v2)(v2, 1); v1[508] = 0; } v1[509] = 0; v1[510] = 0; v1[511] = 0; v1[512] = 0; v1[513] = 0; v1[514] = 0; return v1; } // A0178C: using guessed type void *GuildAcademyTask::`vftable'; // A017E0: using guessed type void *GuildAcademyTask::`vftable'; // A017FC: using guessed type void *GuildAcademyTask::`vftable'; //----- (007177E0) -------------------------------------------------------- int __cdecl sub_7177E0(int a1) { int v1; // eax void ***v2; // eax void ***v3; // esi void (__thiscall ***v4)(_DWORD, signed int); // edi v1 = dword_B9E430; if ( !dword_B9E430 ) { v2 = (void ***)operator new(0x810u); v3 = v2 ? sub_717710(v2) : 0; v1 = dword_B9E430; if ( (void ***)dword_B9E430 != v3 ) { if ( dword_B9E430 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E430; if ( !InterlockedDecrement((volatile LONG *)(dword_B9E430 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } v1 = (int)v3; dword_B9E430 = (int)v3; if ( v3 ) { InterlockedIncrement((volatile LONG *)v3 + 1); v1 = dword_B9E430; } } } return (**(int (__stdcall ***)(int))(v1 + 8))(a1); } // B9E430: using guessed type int dword_B9E430; //----- (007178A0) -------------------------------------------------------- signed int __thiscall sub_7178A0(_DWORD *this, _WORD *a2) { signed int result; // eax signed int v3; // edi char *v4; // esi char v5; // dl int v6; // [esp+4h] [ebp-14h] char v7[4]; // [esp+Ch] [ebp-Ch] char v8; // [esp+10h] [ebp-8h] _DWORD *v9; // [esp+14h] [ebp-4h] result = 0; v9 = this; if ( a2 ) { v3 = 0; if ( *a2 > 0u ) { v4 = (char *)(a2 + 3); do { v5 = *v4; *(_DWORD *)v7 = *((_DWORD *)v4 - 1); v8 = v5; sub_717F30(v9 + 499, (int)&v6, v7); if ( *v4 == 2 ) *((_BYTE *)v9 + 1992) = 1; ++v3; v4 += 5; } while ( v3 < (unsigned __int16)*a2 ); } result = 1; } return result; } //----- (00717910) -------------------------------------------------------- signed int __thiscall sub_717910(int this, _DWORD *a2) { _DWORD *v2; // edi int v3; // esi _DWORD *v4; // ST04_4 int *v5; // eax char v7; // al int v8; // [esp+8h] [ebp-10h] char v9[4]; // [esp+10h] [ebp-8h] char v10; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; if ( !a2 ) return 0; v4 = a2; *(_BYTE *)(this + 1992) = 1; v5 = *sub_4DD710((_DWORD *)(this + 1996), &a2, v4); if ( v5 == *(int **)(v3 + 2000) ) { v7 = *((_BYTE *)v2 + 4); *(_DWORD *)v9 = *v2; v10 = v7; sub_717F30((_DWORD *)(v3 + 1996), (int)&v8, v9); } else { *((_BYTE *)v5 + 16) = *((_BYTE *)v2 + 4); } *(_BYTE *)(v3 + 1992) = 1; return 1; } //----- (007179A0) -------------------------------------------------------- char __thiscall sub_7179A0(char *this, int a2, int a3, int a4, unsigned __int16 *a5) { char *v5; // esi char result; // al _DWORD **v7; // esi _DWORD **v8; // esi v5 = this; switch ( a2 ) { case 4: if ( a3 != 151 ) goto LABEL_40; sub_715740((int)this, (int)a5); return 1; case 12: if ( a3 == 48 ) { sub_716440(this, a4, (int)a5); result = 1; } else { if ( a3 != 50 ) goto LABEL_40; sub_716330(this, a4, (int)a5); result = 1; } return result; case 38: switch ( a3 ) { case 8: sub_7155A0((int)this, (int)this, (int)a5); return 1; case 18: case 28: case 47: goto LABEL_4; case 32: sub_716C40(this, a5); return 1; case 38: sub_715510(this, (int)a5); v8 = (_DWORD **)(v5 + 8); if ( v8[1] ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 4))(71, 0, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v8[1] + 20))(71, 0, v8); } ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v8)[5])(v8, 71, 0, v8); return 1; case 50: sub_716550((_DWORD **)this, a5); return 1; case 54: sub_716820((_DWORD **)this, a5); return 1; case 58: sub_716670(this, a4, a5); return 1; case 62: sub_716910(this, a4, a5); return 1; case 66: sub_716750((char **)this, a4, a5); return 1; case 70: sub_7169F0((_BYTE ***)this, a4, a5); return 1; case 74: sub_716AC0((_DWORD **)this, a5); return 1; case 78: sub_716B80((_DWORD ***)this, a5); return 1; case 91: sub_716D20(this, (int *)a5); return 1; case 95: sub_7152E0(this, (int)a5); v7 = (_DWORD **)(v5 + 8); *(_WORD *)(sub_713B50() + 4) = 0; if ( v7[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v7[1] + 4))(41, 0, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, _DWORD, _DWORD **))(*v7[1] + 20))(41, 0, v7); ((void (__thiscall *)(_DWORD **, signed int, _DWORD, _DWORD **))(*v7)[5])(v7, 41, 0, v7); return 1; case 115: sub_715890((_DWORD **)this, (int)a5); return 1; case 117: sub_715E30((_DWORD **)this, (int)a5); return 1; case 124: sub_7178A0(this, a5); return 1; case 125: sub_717910((int)this, a5); return 1; case 126: sub_7175F0((int)this, a5); return 1; case 129: sub_716E20(this, (int *)a5); return 1; case 131: sub_716F20((_DWORD **)this, (unsigned int *)a5); return 1; case 144: sub_717430(this, a5); return 1; default: goto LABEL_40; } goto LABEL_40; case 45: if ( a3 != 14 ) goto LABEL_40; sub_715650(this, (int *)a5); LABEL_4: result = 1; break; default: LABEL_40: result = 0; break; } return result; } //----- (00717D90) -------------------------------------------------------- _DWORD *__thiscall sub_717D90(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 21) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 21) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 21); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (00717DE0) -------------------------------------------------------- char *__thiscall sub_717DE0(char *this, int a2) { char *result; // eax _BYTE *v3; // esi int v4; // ebx signed int v5; // edi _BYTE *v6; // ecx signed int v7; // esi result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); *((_WORD *)this + 10) = *(_WORD *)(a2 + 20); *((_WORD *)this + 11) = *(_WORD *)(a2 + 22); *((_DWORD *)this + 6) = *(_DWORD *)(a2 + 24); *((_DWORD *)this + 7) = *(_DWORD *)(a2 + 28); *((_DWORD *)this + 8) = *(_DWORD *)(a2 + 32); v3 = this + 36; v4 = a2 - (_DWORD)this; v5 = 128; do { *v3 = v3[v4]; ++v3; --v5; } while ( v5 ); *((_DWORD *)this + 41) = *(_DWORD *)(a2 + 164); qmemcpy(this + 168, (const void *)(a2 + 168), 0x38u); v6 = this + 224; v7 = 512; do { *v6 = v6[v4]; ++v6; --v7; } while ( v7 ); return result; } //----- (00717EC0) -------------------------------------------------------- _DWORD *__thiscall sub_717EC0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *result; // eax char *v4; // esi void **v5; // [esp+4h] [ebp-Ch] v2 = this; result = operator new(0x18u); if ( !result ) { a2 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&a2); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } *result = v2[1]; result[1] = v2[1]; result[2] = v2[1]; *((_WORD *)result + 10) = 0; if ( result != (_DWORD *)-12 ) { v4 = a2; result[3] = *(_DWORD *)a2; *((_BYTE *)result + 16) = v4[4]; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00717F30) -------------------------------------------------------- int __thiscall sub_717F30(_DWORD *this, int a2, char *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // edx int v6; // ecx bool v7; // zf unsigned int v8; // edi int v9; // ecx int result; // eax v3 = this; v4 = sub_717EC0(this, a3); v5 = v3[1]; v6 = *(_DWORD *)(v5 + 4); v7 = *(_BYTE *)(v6 + 21) == 0; LOBYTE(a3) = 1; if ( v7 ) { v8 = v4[3]; do { v5 = v6; LOBYTE(a3) = v8 < *(_DWORD *)(v6 + 12); if ( (_BYTE)a3 ) v6 = *(_DWORD *)v6; else v6 = *(_DWORD *)(v6 + 8); } while ( !*(_BYTE *)(v6 + 21) ); } v9 = *(_DWORD *)sub_6A0F70(v3, (int)&a3, (char)a3, v5, v4); result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (00717FA0) -------------------------------------------------------- void __thiscall sub_717FA0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *v4; // ST08_4 _DWORD *v5; // ST08_4 _DWORD *v6; // ST04_4 char v7; // [esp+10h] [ebp-18h] _DWORD *v8; // [esp+14h] [ebp-14h] _DWORD *v9; // [esp+18h] [ebp-10h] int v10; // [esp+24h] [ebp-4h] v1 = this; v9 = this; v10 = 0; v2 = this + 488; v8 = v2; *v2 = &PgTList::`vftable'; v3 = (_DWORD *)this[489]; LOBYTE(v10) = 2; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 8))(v2, v4); } v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTListBase,GUILD_HISTORY *>::`vftable'; v8 = v1 + 483; v5 = (_DWORD *)v1[484]; v6 = *(_DWORD **)v1[484]; LOBYTE(v10) = 4; sub_6CDE90(v1 + 483, (int *)&v7, v6, v5); operator delete((void *)v1[484]); v10 = -1; sub_752040(v1); } // 9F923C: using guessed type void *NiTListBase,GUILD_HISTORY *>::`vftable'; // 9F925C: using guessed type void *PgTList::`vftable'; //----- (00718060) -------------------------------------------------------- _DWORD *__thiscall sub_718060(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; sub_751F40(this); *v1 = &CClientGuildAcademy::`vftable'; v7 = 0; v1[485] = 0; v2 = operator new(0x18u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[484] = v2; *v2 = v2; *(_DWORD *)(v1[484] + 4) = v1[484]; *(_DWORD *)(v1[484] + 8) = v1[484]; *(_BYTE *)(v1[484] + 20) = 1; *(_BYTE *)(v1[484] + 21) = 1; v1[491] = 0; v1[489] = 0; v1[490] = 0; v1[488] = &PgTList::`vftable'; *((_BYTE *)v1 + 1928) = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9F925C: using guessed type void *PgTList::`vftable'; // A01814: using guessed type void *CClientGuildAcademy::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00718140) -------------------------------------------------------- void *__thiscall sub_718140(void *this, char a2) { void *v2; // esi v2 = this; sub_717630(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00718170) -------------------------------------------------------- int __thiscall sub_718170(_DWORD *this, _DWORD *a2) { int result; // eax this[17] = *a2; this[18] = a2[1]; this[19] = a2[2]; this[20] = a2[3]; result = a2[4]; this[21] = result; return result; } //----- (007181A0) -------------------------------------------------------- int __thiscall sub_7181A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edx int v4; // ecx int v5; // eax int v6; // ecx char *v7; // eax char *v8; // eax volatile LONG *v9; // eax char v11[4]; // [esp+4h] [ebp-1Ch] int v12; // [esp+8h] [ebp-18h] int v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] int v15; // [esp+14h] [ebp-Ch] char v16; // [esp+18h] [ebp-8h] v1 = this; v2 = this[17]; v3 = this[19]; v4 = this[18]; *(_DWORD *)v11 = v2; v5 = v1[20]; v13 = v3; v12 = v4; v6 = v1[21]; v14 = v5; v15 = v6; v16 = 0; v1[16] = 0; v7 = (char *)sub_40C190(-1041975069); v8 = sub_7549E0(v7, v11); v9 = sub_462CA0(2, v8); v1[22] = v9; return (**((int (__stdcall ***)(int))v9 + 58))((int)(v1 + 2)); } //----- (00718220) -------------------------------------------------------- char __thiscall sub_718220(_DWORD *this, int a2, _DWORD *a3, int a4) { _DWORD *v4; // eax int v5; // ecx int v6; // ecx int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx int v12; // [esp+0h] [ebp-18h] int v13; // [esp+4h] [ebp-14h] int v14; // [esp+8h] [ebp-10h] int v15; // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] v4 = this; if ( a2 == 27 ) { v5 = this[20]; if ( v5 ) v6 = v5 + 232; else v6 = 0; if ( a4 == v6 ) { if ( *a3 ) { v4[3] = 2; } else { v4[14] = 1; v7 = v4[16]; v12 = v4[15]; v8 = v4[17]; v13 = v7; v9 = v4[18]; v14 = v8; v10 = v4[19]; v15 = v9; v16 = v10; LOBYTE(v4) = sub_6F36A0(&off_AB7F2C, 38, 22, &v12, 0x14u); } } } return (char)v4; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007182C0) -------------------------------------------------------- char __thiscall sub_7182C0(_DWORD **this, int a2, int a3, int a4, int a5) { _DWORD **v5; // ebx int v7; // edx int v8; // ecx int v9; // edx int v10; // ecx signed int v11; // eax const CHAR *v12; // edi const CHAR *v13; // edi const CHAR *v14; // edi const CHAR *v15; // edi const CHAR *v16; // edi const CHAR *v17; // edi const CHAR *v18; // edi const CHAR *v19; // edi const CHAR *v20; // edi char *v21; // eax char *v22; // edi char v23[4]; // [esp+4h] [ebp-1Ch] int v24; // [esp+8h] [ebp-18h] int v25; // [esp+Ch] [ebp-14h] int v26; // [esp+10h] [ebp-10h] int v27; // [esp+14h] [ebp-Ch] char v28; // [esp+18h] [ebp-8h] v5 = this; if ( a2 != 38 || a3 != 23 ) return 0; v7 = *(_DWORD *)(a5 + 4); *(_DWORD *)v23 = *(_DWORD *)a5; v8 = *(_DWORD *)(a5 + 8); v24 = v7; v9 = *(_DWORD *)(a5 + 12); v25 = v8; v10 = *(_DWORD *)(a5 + 16); v11 = *(unsigned __int16 *)(a5 + 20); v26 = v9; v27 = v10; v28 = 0; if ( (_WORD)v11 == 6016 ) { v21 = (char *)sub_40C190(-856828417); v22 = sub_7549E0(v21, v23); if ( v5[3] ) { (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v5[3] + 4))(25, v22, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, char *, _DWORD **))(*v5[3] + 20))(25, v22, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, char *, _DWORD **))v5[2][5])(v5 + 2, 25, v22, v5 + 2); } else if ( v11 <= 12729 ) { if ( v11 == 12729 ) { v20 = sub_4090F0(-1361726946); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v20, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v20, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v20, v5 + 2); } else { switch ( v11 ) { case 6040: v12 = sub_40C190(-1018169760); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v12, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v12, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v12, v5 + 2); break; case 6041: v13 = sub_40C190(1988193177); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v13, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v13, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v13, v5 + 2); break; case 6042: v14 = sub_40C190(252460580); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v14, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v14, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v14, v5 + 2); break; case 6043: v15 = sub_40C190(-2068657179); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v15, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v15, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v15, v5 + 2); break; case 6044: v16 = sub_40C190(-2003067974); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v16, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v16, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v16, v5 + 2); break; case 6045: v17 = sub_40C190(-723960768); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v17, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v17, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v17, v5 + 2); break; case 6046: v18 = sub_40C190(-723960768); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v18, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v18, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v18, v5 + 2); break; case 6047: v19 = sub_40C190(-822552364); if ( v5[3] ) { (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 4))(25, v19, v5 + 2); if ( v5[3] ) (*(void (__stdcall **)(signed int, const CHAR *, _DWORD **))(*v5[3] + 20))(25, v19, v5 + 2); } ((void (__thiscall *)(_DWORD **, signed int, const CHAR *, _DWORD **))v5[2][5])(v5 + 2, 25, v19, v5 + 2); break; default: break; } } } v5[5] = (_DWORD *)2; return 1; } //----- (007186B0) -------------------------------------------------------- __int64 sub_7186B0() { return qword_B9E438; } // B9E438: using guessed type __int64 qword_B9E438; //----- (007186C0) -------------------------------------------------------- int __cdecl sub_7186C0(__int64 a1) { int result; // eax result = a1; qword_B9E438 = a1; return result; } // B9E438: using guessed type __int64 qword_B9E438; //----- (007186E0) -------------------------------------------------------- void sub_7186E0() { unsigned int v0; // edi int v1; // esi v0 = 0; do { v1 = dword_B9E440[v0]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) && v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); dword_B9E440[v0] = 0; } ++v0; } while ( v0 < 72 ); qword_B9E438 = 0i64; } // B9E438: using guessed type __int64 qword_B9E438; //----- (00718760) -------------------------------------------------------- int __cdecl sub_718760(unsigned int a1) { int result; // eax if ( a1 < 0x48 ) result = dword_B9E440[a1]; else result = 0; return result; } //----- (00718780) -------------------------------------------------------- void __cdecl sub_718780(int a1, unsigned int a2) { int v2; // esi if ( a2 < 0x48 ) { v2 = dword_B9E440[a2]; if ( v2 != a1 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); dword_B9E440[a2] = a1; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); } } } //----- (00718850) -------------------------------------------------------- signed int __cdecl sub_718850(int a1) { unsigned int v1; // edi _WORD *v2; // esi unsigned int v3; // ST0C_4 signed int result; // eax v1 = 0; do { v2 = (_WORD *)dword_B9E440[v1]; if ( v2 ) { if ( v2[4] == *(_WORD *)(a1 + 8) ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 16))(dword_B9E440[v1]); if ( v3 > (*(int (__thiscall **)(_WORD *))(*(_DWORD *)v2 + 12))(v2) ) return v1; } } ++v1; } while ( v1 < 0x48 ); result = 0; while ( dword_B9E440[result] ) { if ( (unsigned int)++result >= 0x48 ) return -1; } return result; } //----- (007188D0) -------------------------------------------------------- char __cdecl sub_7188D0(int a1) { int v1; // ecx int v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // edi int *v6; // ebx int v8; // [esp+14h] [ebp-18h] int v9; // [esp+18h] [ebp-14h] int v10; // [esp+1Ch] [ebp-10h] int v11; // [esp+28h] [ebp-4h] sub_7186E0(); qword_B9E438 = *(_QWORD *)(a1 + 2); v1 = *(unsigned __int8 *)(a1 + 10); v2 = a1 + 11; v10 = a1 + 11; if ( v1 ) { v9 = v1; do { v3 = sub_688E00(v2, &a1, &v8); v4 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); v11 = 0; if ( a1 & 0xFC00 || (a1 & 0x3FFu) >= 0x48 ) { if ( v4 ) { if ( !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); v4 = 0; } } else { v5 = dword_B9E440[a1 & 0x3FF]; v6 = &dword_B9E440[a1 & 0x3FF]; if ( (_DWORD *)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v6 = (int)v4; if ( v4 ) InterlockedIncrement(v4 + 1); } } v2 = v8 + v10; v11 = -1; v10 += v8; if ( v4 && !InterlockedDecrement(v4 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); --v9; } while ( v9 ); } return 1; } // B9E438: using guessed type __int64 qword_B9E438; //----- (00718A20) -------------------------------------------------------- char __thiscall sub_718A20(_DWORD *this, unsigned __int8 a2, unsigned __int8 a3) { if ( a3 >= 4u || a2 >= 4u ) return 0; this[25] = a2; this[24] = a3; return 1; } //----- (00718A50) -------------------------------------------------------- bool __thiscall sub_718A50(_DWORD *this) { return this[26] != 0; } //----- (00718A80) -------------------------------------------------------- char *__thiscall sub_718A80(_DWORD *this, unsigned int a2) { unsigned int v2; // edx unsigned int v3; // edi int *v4; // esi unsigned int v5; // edx int *v6; // eax int v7; // ecx int v8; // edx int v9; // ecx int v10; // edx int v11; // ecx int *v12; // esi char *result; // eax int v14; // [esp+8h] [ebp-14h] int v15; // [esp+Ch] [ebp-10h] int v16; // [esp+10h] [ebp-Ch] int v17; // [esp+14h] [ebp-8h] int v18; // [esp+18h] [ebp-4h] v2 = a2 / 5; v3 = a2 % 5; if ( a2 / 5 >= 4 ) return 0; if ( v3 >= 5 ) return 0; v4 = &this[4 * v2 + 33]; v5 = (signed int)((unsigned __int64)(2021161081i64 * (this[4 * v2 + 34] - *v4)) >> 32) >> 5; if ( v3 >= v5 + (v5 >> 31) ) return 0; v6 = (int *)sub_680810(byte_AD9238); v7 = v6[1]; v14 = *v6; v8 = v6[2]; v15 = v7; v9 = v6[3]; v16 = v8; v10 = v6[4]; v17 = v9; v11 = *v4; v18 = v10; v12 = (int *)(v11 + 68 * v3); if ( sub_4169A0((_DWORD *)(v11 + 68 * v3), &v14) ) result = dword_AD8EBC; else result = (char *)sub_664630(dword_AD8C90, *v12, v12[1], v12[2], v12[3], v12[4]); return result; } //----- (00718B60) -------------------------------------------------------- char __thiscall sub_718B60(_DWORD *this, int a2) { unsigned int v2; // eax unsigned int v3; // esi int v4; // eax int v5; // edx _DWORD *v6; // ecx int v7; // eax v2 = *(unsigned __int8 *)(a2 + 2); v3 = *(unsigned __int8 *)(a2 + 3); if ( v2 > 4 ) return 0; if ( v3 > 5 ) return 0; v4 = 2 * v2; v5 = this[2 * v4 + 34] - this[2 * v4 + 33]; v6 = &this[2 * v4 + 33]; if ( v5 / 68 <= v3 ) return 0; v7 = 68 * v3; *(_DWORD *)(v7 + *v6 + 28) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v7 + *v6 + 32) = *(_DWORD *)(a2 + 8); *(_BYTE *)(v7 + *v6 + 64) = 1; *(_DWORD *)(v7 + *v6 + 44) = *(_DWORD *)(a2 + 12); return 1; } //----- (00718BF0) -------------------------------------------------------- int __thiscall sub_718BF0(_BYTE *this, int a2, int a3, int a4, int a5, int a6) { _BYTE *v6; // esi _DWORD *v7; // eax int result; // eax v6 = this; v7 = (_DWORD *)sub_680810(byte_AD9238); v6[110] = a2 == *v7 && a3 == v7[1] && a4 == v7[2] && a5 == v7[3] && a6 == v7[4]; result = a3; *((_DWORD *)v6 + 12) = a2; *((_DWORD *)v6 + 15) = a5; *((_DWORD *)v6 + 13) = a3; *((_DWORD *)v6 + 14) = a4; *((_DWORD *)v6 + 16) = a6; return result; } //----- (00718C50) -------------------------------------------------------- int __thiscall sub_718C50(_BYTE *this, int a2, int a3, int a4, int a5, int a6) { _BYTE *v6; // esi _DWORD *v7; // eax int result; // eax v6 = this; v7 = (_DWORD *)sub_680810(byte_AD9238); v6[108] = a2 == *v7 && a3 == v7[1] && a4 == v7[2] && a5 == v7[3] && a6 == v7[4]; result = a3; *((_DWORD *)v6 + 3) = a2; *((_DWORD *)v6 + 6) = a5; *((_DWORD *)v6 + 4) = a3; *((_DWORD *)v6 + 5) = a4; *((_DWORD *)v6 + 7) = a6; return result; } //----- (00718CB0) -------------------------------------------------------- char *__stdcall sub_718CB0(char *a1) { char *result; // eax *((_DWORD *)a1 + 4) = 0; *((_DWORD *)a1 + 3) = 0; *((_DWORD *)a1 + 2) = 0; *((_DWORD *)a1 + 1) = 0; *(_DWORD *)a1 = 0; result = strncpy(a1, &byte_A01868, 0x14u); *((float *)a1 + 14) = 0.0; a1[52] = 0; *((float *)a1 + 15) = 0.0; *((_DWORD *)a1 + 6) = 0; *((_DWORD *)a1 + 7) = 0; *((_DWORD *)a1 + 8) = 0; *((_DWORD *)a1 + 9) = 0; *((_DWORD *)a1 + 10) = 0; a1[64] = 0; *((_DWORD *)a1 + 11) = 0; *((_DWORD *)a1 + 12) = 0; return result; } //----- (00718D10) -------------------------------------------------------- int __thiscall sub_718D10(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { signed int v7; // ebx _DWORD *v8; // edi unsigned int v9; // edx bool v10; // zf unsigned int v11; // esi unsigned int v12; // edx _DWORD *v13; // eax if ( !this[26] ) return 0; v7 = 0; v8 = this + 33; while ( 1 ) { v9 = (signed int)((unsigned __int64)(2021161081i64 * (v8[1] - *v8)) >> 32) >> 5; v10 = v9 + (v9 >> 31) == 0; v11 = v9 + (v9 >> 31); v12 = 0; if ( !v10 ) break; LABEL_12: ++v7; v8 += 4; if ( v7 >= 4 ) return 0; } v13 = (_DWORD *)*v8; while ( *v13 != a2 || v13[1] != a3 || v13[2] != a4 || v13[3] != a5 || v13[4] != a6 ) { ++v12; v13 += 17; if ( v12 >= v11 ) goto LABEL_12; } return this[4 * v7 + 33] + 68 * v12; } //----- (00718DC0) -------------------------------------------------------- char __thiscall sub_718DC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, unsigned int a8, char a9) { _DWORD *v9; // esi int v11; // eax v9 = &this[4 * a7 + 33]; if ( (this[4 * a7 + 34] - *v9) / 68 <= a8 ) return 0; v11 = *v9 + 68 * a8; if ( *(_DWORD *)v11 != a2 || *(_DWORD *)(v11 + 4) != a3 || *(_DWORD *)(v11 + 8) != a4 || *(_DWORD *)(v11 + 12) != a5 || *(_DWORD *)(v11 + 16) != a6 ) { return 0; } *(_BYTE *)(v11 + 20) = a9 != 0; return 1; } //----- (00718E40) -------------------------------------------------------- int __thiscall sub_718E40(_DWORD *this, unsigned int a2) { unsigned int v2; // edx unsigned int v3; // edi _DWORD *v4; // esi unsigned int v5; // edx int result; // eax v2 = a2 / 5; v3 = a2 % 5; if ( a2 / 5 >= 4 || v3 >= 5 || (v4 = &this[4 * v2 + 33], v5 = (signed int)((unsigned __int64)(2021161081i64 * (this[4 * v2 + 34] - *v4)) >> 32) >> 5, v3 >= v5 + (v5 >> 31)) ) { result = 0; } else { result = *v4 + 68 * v3; } return result; } //----- (00718EA0) -------------------------------------------------------- unsigned int __thiscall sub_718EA0(_DWORD *this, const char *a2, unsigned int *a3, int *a4) { unsigned int v4; // ecx unsigned int v5; // edx unsigned int result; // eax unsigned int v7; // esi _DWORD *v8; // edi unsigned int v9; // edx int v10; // edx int v11; // eax _DWORD *v12; // [esp+Ch] [ebp-28h] int v13; // [esp+18h] [ebp-1Ch] int v14; // [esp+1Ch] [ebp-18h] int v15; // [esp+20h] [ebp-14h] int v16; // [esp+24h] [ebp-10h] int v17; // [esp+28h] [ebp-Ch] char v18; // [esp+2Ch] [ebp-8h] v12 = this; v4 = 0; while ( 1 ) { v5 = v4 / 5; result = 5 * (v4 / 5); v7 = v4 % 5; if ( v4 / 5 < 4 && v7 < 5 ) { v8 = &v12[4 * v5 + 33]; v9 = (signed int)((unsigned __int64)(2021161081i64 * (v12[4 * v5 + 34] - *v8)) >> 32) >> 5; result = v9 + (v9 >> 31); if ( v7 < result ) { result = *v8 + 68 * v7; if ( result ) { v13 = *(_DWORD *)result; v14 = *(_DWORD *)(result + 4); v15 = *(_DWORD *)(result + 8); v10 = *(_DWORD *)(result + 12); v11 = *(_DWORD *)(result + 16); v16 = v10; v17 = v11; v18 = 0; result = strcmp((const char *)&v13, a2); if ( !result ) break; } } } if ( ++v4 >= 0x14 ) return result; } *a3 = v4 / 5; result = (unsigned int)a4; *a4 = v4 % 5; return result; } //----- (00718FC0) -------------------------------------------------------- bool __thiscall sub_718FC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { return this[3] == a2 && this[4] == a3 && this[5] == a4 && this[6] == a5 && this[7] == a6; } //----- (00719000) -------------------------------------------------------- bool __thiscall sub_719000(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { return this[12] == a2 && this[13] == a3 && this[14] == a4 && this[15] == a5 && this[16] == a6; } //----- (00719040) -------------------------------------------------------- char __thiscall sub_719040(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { unsigned int v6; // edx unsigned int v7; // edi unsigned int v8; // esi _DWORD *v9; // eax v6 = (signed int)((unsigned __int64)(1717986919i64 * (this[9] - this[8])) >> 32) >> 3; v7 = 0; v8 = v6 + (v6 >> 31); if ( !v8 ) return 0; v9 = (_DWORD *)this[8]; while ( *v9 != a2 || v9[1] != a3 || v9[2] != a4 || v9[3] != a5 || v9[4] != a6 ) { ++v7; v9 += 5; if ( v7 >= v8 ) return 0; } return 1; } //----- (007190B0) -------------------------------------------------------- int __thiscall sub_7190B0(_DWORD *this, int *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // eax int result; // eax v3 = this; v4 = (_DWORD *)sub_718D10(this, *a2, a2[1], a2[2], a2[3], a2[4]); if ( v4 ) { *v4 = *a3; v4[1] = a3[1]; v4[2] = a3[2]; v4[3] = a3[3]; v4[4] = a3[4]; } if ( v3[12] == *a2 && v3[13] == a2[1] && v3[14] == a2[2] && v3[15] == a2[3] && v3[16] == a2[4] ) { v3[12] = *a3; v3[13] = a3[1]; v3[14] = a3[2]; v3[15] = a3[3]; v3[16] = a3[4]; } result = *(_DWORD *)((char *)v3 + 69); if ( result == *a2 && *(_DWORD *)((char *)v3 + 73) == a2[1] ) { result = *(_DWORD *)((char *)v3 + 77); if ( result == a2[2] && *(_DWORD *)((char *)v3 + 81) == a2[3] ) { result = *(_DWORD *)((char *)v3 + 85); if ( result == a2[4] ) { *(_DWORD *)((char *)v3 + 69) = *a3; *(_DWORD *)((char *)v3 + 73) = a3[1]; *(_DWORD *)((char *)v3 + 77) = a3[2]; result = a3[3]; *(_DWORD *)((char *)v3 + 81) = result; *(_DWORD *)((char *)v3 + 85) = a3[4]; } } } return result; } //----- (007191A0) -------------------------------------------------------- char __thiscall sub_7191A0(_WORD *this, int a2) { int v3; // eax unsigned __int8 v4; // dl __int16 v5; // di unsigned int *v6; // edi int v7; // eax int v8; // ecx int v9; // edx int v10; // eax _DWORD *v11; // eax int v12; // esi char *v13; // ebx _DWORD *v14; // ebx _DWORD *v15; // eax _WORD *v16; // [esp+8h] [ebp-4Ch] char v17[4]; // [esp+Ch] [ebp-48h] int v18; // [esp+10h] [ebp-44h] int v19; // [esp+14h] [ebp-40h] int v20; // [esp+18h] [ebp-3Ch] int v21; // [esp+1Ch] [ebp-38h] char v22; // [esp+20h] [ebp-34h] char v23; // [esp+4Ch] [ebp-8h] v16 = this; if ( !a2 ) return 0; LOBYTE(v3) = *(_BYTE *)(a2 + 2); v4 = *(_BYTE *)(a2 + 3); if ( (unsigned __int8)v3 > 5u || v4 > 5u ) return 0; v3 = (unsigned __int8)v3; v5 = this[2 * (unsigned __int8)v3 + 58]; if ( v5 != -1 ) { if ( v5 == *(_WORD *)a2 ) goto LABEL_8; return 0; } if ( v4 ) return 0; this[2 * v3 + 58] = *(_WORD *)a2; LABEL_8: LOBYTE(this[2 * v3 + 59]) = *(_BYTE *)(a2 + 2); v6 = (unsigned int *)&this[8 * v3 + 66]; if ( (signed int)(*(_DWORD *)&this[8 * v3 + 68] - *v6) / 68 > (unsigned int)v4 ) { v12 = 68 * v4; v13 = (char *)(68 * v4 + *v6); if ( sub_4DBFF0(v13, (_DWORD *)(a2 + 4)) ) { sub_718CB0(v13); sub_40FA00((_DWORD *)(v12 + *v6), (_DWORD *)(a2 + 4)); v14 = (_DWORD *)(v12 + *v6); v15 = (_DWORD *)sub_680810(byte_AD9238); if ( sub_4169A0(v14, v15) ) *(_BYTE *)(v12 + *v6 + 64) = 1; *(_BYTE *)(v12 + *v6 + 20) = 1; } } else { v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; sub_718CB0(v17); v7 = *(_DWORD *)(a2 + 8); v8 = *(_DWORD *)(a2 + 12); *(_DWORD *)v17 = *(_DWORD *)(a2 + 4); v9 = *(_DWORD *)(a2 + 16); v18 = v7; v10 = *(_DWORD *)(a2 + 20); v19 = v8; v20 = v9; v21 = v10; v11 = (_DWORD *)sub_680810(byte_AD9238); if ( sub_4169A0(v17, v11) ) v23 = 1; v22 = 1; sub_71AB80(v6, v17); } ++*((_DWORD *)v16 + 26); return 1; } //----- (00719340) -------------------------------------------------------- char __thiscall sub_719340(_DWORD *this, unsigned __int8 *a2) { unsigned int v2; // ebx unsigned int v3; // esi unsigned int v4; // edi _DWORD *v5; // edx unsigned int v6; // ecx int v7; // edi int *v8; // ebx unsigned int v9; // edx unsigned int v10; // edi int v11; // eax int v12; // ebx int v13; // edi int *v14; // eax int v15; // ecx unsigned int v16; // ecx _DWORD *v17; // ebx unsigned int v18; // eax int v19; // eax _DWORD *v20; // edi int *v21; // ebx int v22; // eax int v23; // edi int v24; // edx int v25; // eax const char *v26; // eax _DWORD *v27; // esi char v29; // [esp+Ch] [ebp-A0h] _DWORD *v30; // [esp+50h] [ebp-5Ch] unsigned int v31; // [esp+54h] [ebp-58h] int *v32; // [esp+58h] [ebp-54h] _DWORD *v33; // [esp+5Ch] [ebp-50h] unsigned int v34; // [esp+60h] [ebp-4Ch] int v35; // [esp+64h] [ebp-48h] int v36; // [esp+68h] [ebp-44h] int v37; // [esp+6Ch] [ebp-40h] int v38; // [esp+70h] [ebp-3Ch] int v39; // [esp+74h] [ebp-38h] v2 = a2[26]; v3 = a2[23]; v4 = a2[22]; v5 = this; v6 = a2[27]; v30 = v5; v33 = (_DWORD *)v2; v31 = v6; if ( v4 > 4 || v3 > 5 || v2 > 4 || v6 > 5 ) return 0; if ( v4 != v2 ) { v14 = &v5[4 * v4 + 33]; v15 = v5[4 * v4 + 34]; v32 = v14; v16 = (v15 - *v14) / 68; v17 = &v30[4 * v2 + 33]; v18 = (v17[1] - *v17) / 68; if ( v3 >= v16 ) { v3 = v31; if ( v31 >= v18 ) return 0; v34 = v4; v4 = (unsigned int)v33; } else { if ( v31 < v18 ) { v39 = 0; v38 = 0; v37 = 0; v36 = 0; v35 = 0; v19 = v32[1]; if ( *v32 == v19 ) goto LABEL_38; if ( *v17 != v17[1] ) { v20 = (_DWORD *)(*v32 + 68 * v3); sub_71A4D0(&v35, (int)v20); sub_71A4D0(v20, 68 * v31 + *v17); sub_71A4D0((_DWORD *)(68 * v31 + *v17), (int)&v35); LABEL_34: v26 = (const char *)(*(int (**)(void))(*(_DWORD *)dword_AD8EBC + 84))(); v27 = v30; sub_718EA0(v30, v26, &v34, (int *)&v33); v27[2] = v34; return 1; } if ( *v32 != v19 ) { v34 = (unsigned int)v33; } else { LABEL_38: v3 = v31; v34 = v4; v4 = (unsigned int)v33; } v21 = &v30[4 * v4 + 33]; sub_71A4D0(&v35, 68 * v3 + *v21); v22 = *v32; if ( v3 ) v22 += 68 * v3; sub_71A910(v21, (int *)&v33, v22); sub_71AB80(&v30[4 * v34 + 33], &v35); goto LABEL_34; } v34 = (unsigned int)v33; } v23 = 2 * v4; v24 = v30[2 * v23 + 33]; v39 = 0; v38 = 0; v37 = 0; v36 = 0; v35 = 0; sub_71A4D0(&v35, 68 * v3 + v24); v25 = *v32; if ( v3 ) v25 += 68 * v3; sub_71A910(&v30[2 * v23 + 33], (int *)&v33, v25); sub_71AB80(&v30[4 * v34 + 33], &v35); goto LABEL_34; } v7 = (int)&v5[4 * v4]; v8 = (int *)(v7 + 132); v9 = (signed int)((unsigned __int64)(2021161081i64 * (*(_DWORD *)(v7 + 136) - *(_DWORD *)(v7 + 132))) >> 32) >> 5; v34 = v7; v10 = v9 + (v9 >> 31); v32 = v8; if ( v3 < v10 ) { v39 = 0; v38 = 0; v37 = 0; v36 = 0; v35 = 0; v33 = (_DWORD *)(68 * v3 + *v8); sub_71A4D0(&v35, (int)v33); if ( v31 < v10 ) { v12 = 68 * v31; qmemcpy(&v29, (const void *)(68 * v31 + *v32), 0x44u); sub_71A4D0(v33, (int)&v29); sub_71A4D0((_DWORD *)(v12 + *v32), (int)&v35); } else { v11 = *v32; if ( v3 ) v11 += 68 * v3; if ( v11 != *(_DWORD *)(v34 + 136) ) { sub_71A910(v32, (int *)&v34, v11); sub_71AB80((unsigned int *)v32, &v35); } } goto LABEL_34; } if ( v6 < v10 ) { v13 = *v8; v39 = 0; v38 = 0; v37 = 0; v36 = 0; v35 = 0; sub_71A4D0(&v35, v13 + 68 * v3); if ( v31 ) v13 += 68 * v31; sub_71A910(v8, (int *)&v34, v13); sub_71AB80((unsigned int *)v8, &v35); goto LABEL_34; } return 0; } //----- (007196E0) -------------------------------------------------------- char __thiscall sub_7196E0(char *this, int a2) { _DWORD *v2; // esi signed int v3; // eax _BYTE *v4; // ecx __int16 *v5; // edx __int16 v6; // bx int *v8; // edi unsigned int *v9; // ebx int v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax int *v13; // eax int v14; // ecx int v15; // edx int v16; // ecx int v17; // edx int v18; // eax unsigned int v19; // ecx bool v20; // cf unsigned int v21; // edx int v22; // esi int *v23; // esi int *v24; // eax int v25; // eax char v26; // cl char v27; // dl double v28; // st7 int v29; // ecx int v30; // edx int v31; // ecx int v32; // edx int v33; // ecx int v34; // edx int v35; // ecx int v36; // edx int v37; // ecx int v38; // edx int v39; // edx int v40; // eax unsigned int v41; // [esp+Ch] [ebp-58h] _DWORD *v42; // [esp+10h] [ebp-54h] int v43; // [esp+14h] [ebp-50h] int v44; // [esp+18h] [ebp-4Ch] int v45; // [esp+1Ch] [ebp-48h] int v46; // [esp+20h] [ebp-44h] int v47; // [esp+24h] [ebp-40h] int v48; // [esp+28h] [ebp-3Ch] int v49; // [esp+2Ch] [ebp-38h] char v50; // [esp+30h] [ebp-34h] int v51; // [esp+34h] [ebp-30h] int v52; // [esp+38h] [ebp-2Ch] int v53; // [esp+3Ch] [ebp-28h] int v54; // [esp+40h] [ebp-24h] int v55; // [esp+44h] [ebp-20h] int v56; // [esp+48h] [ebp-1Ch] int v57; // [esp+4Ch] [ebp-18h] char v58; // [esp+50h] [ebp-14h] float v59; // [esp+54h] [ebp-10h] float v60; // [esp+58h] [ebp-Ch] char v61; // [esp+5Ch] [ebp-8h] v2 = this; v42 = this; v3 = 0; v4 = this + 118; v5 = (__int16 *)(a2 + 2); do { v6 = *v5; *v4 = v3; *((_WORD *)v4 - 1) = v6; ++v3; ++v5; v4 += 4; } while ( v3 < 4 ); if ( !dword_B9DCC4 ) return 0; sub_6C11C0(&dword_B9DC70, v2[3], v2[4], v2[5], v2[6], v2[7]); v49 = 0; v48 = 0; v47 = 0; v46 = 0; v45 = 0; v41 = 0; if ( dword_B9DCC4 != -1 ) { v8 = (int *)(a2 + 18); v9 = v2 + 33; v43 = 0; v44 = a2 + 18; do { if ( (signed int)(v9[1] - *v9) / 68 > v41 ) { v10 = sub_6C11C0(&dword_B9DC70, *(v8 - 2), *(v8 - 1), *v8, v8[1], v8[2]); if ( v10 ) { *(_BYTE *)(*v9 + v43 + 20) = *(_BYTE *)(v10 + 20); if ( !*(_BYTE *)(v43 + *v9 + 20) ) *(_BYTE *)(v43 + *v9 + 64) = 0; } else { v11 = (_DWORD *)sub_680810(byte_AD9238); if ( *(v8 - 2) == *v11 && *(v8 - 1) == v11[1] && *v8 == v11[2] && v8[1] == v11[3] && v8[2] == v11[4] ) *(_BYTE *)(*v9 + v43 + 20) = 1; } goto LABEL_38; } v12 = (_DWORD *)sub_680810(byte_AD9238); if ( *(v8 - 2) != *v12 || *(v8 - 1) != v12[1] || *v8 != v12[2] || v8[1] != v12[3] || v8[2] != v12[4] ) { v25 = sub_6C11C0(&dword_B9DC70, *(v8 - 2), *(v8 - 1), *v8, v8[1], v8[2]); if ( !v25 ) return 0; v26 = *(_BYTE *)(v25 + 52); v27 = *(_BYTE *)(v25 + 20); v59 = *(float *)(v25 + 56); v28 = *(float *)(v25 + 60); v58 = v26; v29 = *(_DWORD *)(v25 + 24); v60 = v28; v50 = v27; v30 = *(_DWORD *)(v25 + 28); v51 = v29; v31 = *(_DWORD *)(v25 + 32); v52 = v30; v32 = *(_DWORD *)(v25 + 36); v53 = v31; v33 = *(_DWORD *)(v25 + 40); v54 = v32; v34 = *(_DWORD *)v25; v55 = v33; v35 = *(_DWORD *)(v25 + 4); v45 = v34; v36 = *(_DWORD *)(v25 + 8); v46 = v35; v37 = *(_DWORD *)(v25 + 12); v47 = v36; v38 = *(_DWORD *)(v25 + 16); v48 = v37; LOBYTE(v37) = *(_BYTE *)(v25 + 64); v49 = v38; v39 = *(_DWORD *)(v25 + 44); v40 = *(_DWORD *)(v25 + 48); v61 = v37; v19 = v9[1]; v56 = v39; v57 = v40; v20 = (unsigned int)&v45 < v19; } else { v13 = (int *)sub_680810(byte_AD9238); v14 = v13[1]; v45 = *v13; v15 = v13[2]; v46 = v14; v16 = v13[3]; v47 = v15; v17 = v13[4]; v48 = v16; v49 = v17; v58 = sub_6807E0(byte_AD9238); v51 = sub_680890((unsigned __int8 *)byte_AD9238); v52 = sub_680BE0((int)byte_AD9238); v53 = sub_680BF0((int)byte_AD9238); v54 = sub_680CC0((int)byte_AD9238); v55 = sub_680CD0((int)byte_AD9238); v61 = 1; v50 = 1; v56 = sub_680C10((int)byte_AD9238); v18 = sub_680CF0((int)byte_AD9238); v19 = v9[1]; v57 = v18; v20 = (unsigned int)&v45 < v19; } if ( v20 && *v9 <= (unsigned int)&v45 ) { v21 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)((signed int)&v45 - *v9)) >> 32) >> 5; v22 = v21 + (v21 >> 31); if ( v19 == v9[2] ) sub_71A9C0(v9, 1); v23 = (int *)(*v9 + 68 * v22); v24 = (int *)v9[1]; if ( !v24 ) goto LABEL_36; } else { if ( v19 == v9[2] ) sub_71A9C0(v9, 1); v24 = (int *)v9[1]; if ( !v24 ) goto LABEL_37; v23 = &v45; } qmemcpy(v24, v23, 0x44u); v8 = (int *)v44; LABEL_36: v2 = v42; LABEL_37: v9[1] += 68; ++v2[26]; LABEL_38: v43 += 68; v8 += 5; ++v41; v44 = (int)v8; } while ( v41 < dword_B9DCC4 + 1 ); } v2[2] = 0; return 1; } // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; //----- (00719AA0) -------------------------------------------------------- char __thiscall sub_719AA0(_WORD *this, _BYTE *a2) { _WORD *v2; // edi int v3; // esi unsigned int v4; // ecx int v5; // edx int v6; // eax int v7; // edx int v8; // eax int v9; // ecx int v10; // edx unsigned int *v11; // ebx double v12; // st7 int v13; // ecx int v14; // eax int v15; // edx int v16; // eax int v17; // edx int v18; // ecx int v19; // eax int v20; // edx int v21; // eax _DWORD *v22; // eax int v23; // edx int v24; // eax unsigned int v25; // eax int v26; // edi int v27; // eax _DWORD *v28; // ST20_4 _DWORD *v29; // eax _DWORD *v30; // eax _WORD *v32; // [esp+10h] [ebp-70h] unsigned int v33; // [esp+14h] [ebp-6Ch] int v34; // [esp+18h] [ebp-68h] unsigned int v35; // [esp+1Ch] [ebp-64h] char v36[4]; // [esp+20h] [ebp-60h] int v37; // [esp+24h] [ebp-5Ch] int v38; // [esp+28h] [ebp-58h] int v39; // [esp+2Ch] [ebp-54h] int v40; // [esp+30h] [ebp-50h] char v41; // [esp+34h] [ebp-4Ch] int v42; // [esp+38h] [ebp-48h] int v43; // [esp+3Ch] [ebp-44h] int v44; // [esp+40h] [ebp-40h] int v45; // [esp+44h] [ebp-3Ch] int v46; // [esp+48h] [ebp-38h] int v47; // [esp+4Ch] [ebp-34h] int v48; // [esp+50h] [ebp-30h] char v49; // [esp+54h] [ebp-2Ch] float v50; // [esp+58h] [ebp-28h] float v51; // [esp+5Ch] [ebp-24h] char v52; // [esp+60h] [ebp-20h] int v53; // [esp+64h] [ebp-1Ch] int v54; // [esp+68h] [ebp-18h] int v55; // [esp+6Ch] [ebp-14h] int v56; // [esp+70h] [ebp-10h] int v57; // [esp+74h] [ebp-Ch] char v58; // [esp+78h] [ebp-8h] v2 = this; v32 = this; v34 = 0; if ( !*a2 ) return 1; v3 = (int)(a2 + 13); while ( 1 ) { v4 = *(unsigned __int8 *)(v3 - 10); v33 = v4; v35 = *(unsigned __int8 *)(v3 - 9); if ( v4 > 4 || *(unsigned __int8 *)(v3 - 9) > 5u ) break; v2[2 * v4 + 58] = *(_WORD *)(v3 - 12); LOBYTE(v2[2 * v4 + 59]) = v4; v5 = *(_DWORD *)(v3 - 4); v53 = *(_DWORD *)(v3 - 8); v6 = *(_DWORD *)v3; v54 = v5; v7 = *(_DWORD *)(v3 + 4); v55 = v6; v8 = *(_DWORD *)(v3 + 8); v56 = v7; v57 = v8; v58 = 0; if ( strcmp((const char *)&v53, (const char *)&unk_A01864) ) { v9 = 2 * v4; v10 = *(_DWORD *)&v2[4 * v9 + 68] - *(_DWORD *)&v2[4 * v9 + 66]; v11 = (unsigned int *)&v2[4 * v9 + 66]; if ( v10 / 68 == v35 ) { v40 = 0; v39 = 0; v38 = 0; v37 = 0; *(_DWORD *)v36 = 0; sub_718CB0(v36); v12 = (double)*(unsigned int *)(v3 + 38); v13 = *(_DWORD *)v3; v14 = *(_DWORD *)(v3 - 4); *(_DWORD *)v36 = *(_DWORD *)(v3 - 8); v15 = *(_DWORD *)(v3 + 4); v38 = v13; LOBYTE(v13) = *(_BYTE *)(v3 + 12); v37 = v14; v16 = *(_DWORD *)(v3 + 8); v39 = v15; v17 = *(unsigned __int8 *)(v3 + 13); v49 = v13; v18 = *(_DWORD *)(v3 + 18); v40 = v16; v19 = *(_DWORD *)(v3 + 14); v46 = v18; v42 = v17; v20 = *(_DWORD *)(v3 + 26); v45 = v19; v21 = *(_DWORD *)(v3 + 30); v43 = v20; v44 = v21; v50 = v12; v51 = (double)*(unsigned int *)(v3 + 42); v22 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)v36 == *v22 && v37 == v22[1] && v38 == v22[2] && v39 == v22[3] && v40 == v22[4] ) v52 = 1; v23 = *(_DWORD *)(v3 + 34); v24 = *(_DWORD *)(v3 + 22); v41 = 1; v47 = v23; v48 = v24; sub_71AB80(v11, v36); ++*((_DWORD *)v2 + 26); } else if ( v10 / 68 > v35 ) { v25 = *v11; v26 = 68 * v35; *(_DWORD *)(v25 + v26) = *(_DWORD *)(v3 - 8); *(_DWORD *)(v25 + v26 + 4) = *(_DWORD *)(v3 - 4); *(_DWORD *)(v25 + v26 + 8) = *(_DWORD *)v3; v27 = 68 * v35 + v25; *(_DWORD *)(v27 + 12) = *(_DWORD *)(v3 + 4); *(_DWORD *)(v27 + 16) = *(_DWORD *)(v3 + 8); *(_BYTE *)(v26 + *v11 + 52) = *(_BYTE *)(v3 + 12); *(_DWORD *)(v26 + *v11 + 24) = *(unsigned __int8 *)(v3 + 13); *(_DWORD *)(v26 + *v11 + 36) = *(_DWORD *)(v3 + 14); *(_DWORD *)(v26 + *v11 + 40) = *(_DWORD *)(v3 + 18); *(_DWORD *)(v26 + *v11 + 28) = *(_DWORD *)(v3 + 26); *(_DWORD *)(v26 + *v11 + 32) = *(_DWORD *)(v3 + 30); *(float *)(v26 + *v11 + 56) = (double)*(unsigned int *)(v3 + 38); *(float *)(v26 + *v11 + 60) = (double)*(unsigned int *)(v3 + 42); v28 = (_DWORD *)(68 * v35 + *v11); v29 = (_DWORD *)sub_680810(byte_AD9238); if ( sub_4DBFF0(v28, v29) ) *(_BYTE *)(v26 + *v11 + 64) = 0; *(_DWORD *)(v26 + *v11 + 44) = *(_DWORD *)(v3 + 34); *(_DWORD *)(v26 + *v11 + 48) = *(_DWORD *)(v3 + 22); v2 = v32; } v30 = (_DWORD *)sub_680810(byte_AD9238); if ( *(_DWORD *)(v3 - 8) == *v30 && *(_DWORD *)(v3 - 4) == v30[1] && *(_DWORD *)v3 == v30[2] && *(_DWORD *)(v3 + 4) == v30[3] && *(_DWORD *)(v3 + 8) == v30[4] ) { *((_DWORD *)v2 + 2) = v33; } } v3 += 58; if ( ++v34 >= (unsigned __int8)*a2 ) return 1; } return 0; } //----- (00719DB0) -------------------------------------------------------- int __thiscall sub_719DB0(unsigned int *this, int a2, int a3, int a4, int a5, int a6, char a7) { unsigned int *v7; // edi unsigned int *v8; // ecx signed __int64 v9; // rax unsigned int v10; // esi unsigned int *v11; // esi unsigned int *v13; // [esp+Ch] [ebp-4h] v7 = this; v13 = this; if ( a7 ) { v8 = this + 8; v9 = 1717986919i64 * (signed int)(v7[9] - v7[8]); v10 = (SHIDWORD(v9) >> 3) + (HIDWORD(v9) >> 31); if ( v10 != 4 ) { HIDWORD(v9) = 0; if ( v10 ) { LODWORD(v9) = *v8; while ( *(_DWORD *)v9 != a2 || *(_DWORD *)(v9 + 4) != a3 || *(_DWORD *)(v9 + 8) != a4 || *(_DWORD *)(v9 + 12) != a5 || *(_DWORD *)(v9 + 16) != a6 ) { ++HIDWORD(v9); LODWORD(v9) = v9 + 20; if ( HIDWORD(v9) >= v10 ) { v7 = v13; goto LABEL_12; } } } else { LABEL_12: sub_71AAD0(v8, &a2); LODWORD(v9) = sub_680810(byte_AD9238); if ( a2 == *(_DWORD *)v9 && a3 == *(_DWORD *)(v9 + 4) && a4 == *(_DWORD *)(v9 + 8) && a5 == *(_DWORD *)(v9 + 12) && a6 == *(_DWORD *)(v9 + 16) ) { *((_BYTE *)v7 + 109) = 1; } } } } else { LODWORD(v9) = this[8]; if ( (_DWORD)v9 != this[9] ) { while ( *(_DWORD *)v9 != a2 || *(_DWORD *)(v9 + 4) != a3 || *(_DWORD *)(v9 + 8) != a4 || *(_DWORD *)(v9 + 12) != a5 || *(_DWORD *)(v9 + 16) != a6 ) { LODWORD(v9) = v9 + 20; if ( (_DWORD)v9 == this[9] ) return v9; } v11 = this; sub_71A5B0((_DWORD *)(v9 + 20), (_DWORD *)this[9], (_DWORD *)v9); v11[9] -= 20; LODWORD(v9) = sub_680810(byte_AD9238); if ( a2 == *(_DWORD *)v9 && a3 == *(_DWORD *)(v9 + 4) && a4 == *(_DWORD *)(v9 + 8) && a5 == *(_DWORD *)(v9 + 12) && a6 == *(_DWORD *)(v9 + 16) ) { *((_BYTE *)v13 + 109) = 0; } } } return v9; } //----- (00719F30) -------------------------------------------------------- char *__thiscall sub_719F30(char *this) { char *v1; // esi _BYTE *v2; // ecx int *v3; // edi int v4; // edx int v5; // eax bool v6; // zf int v7; // eax _DWORD *v12; // ST18_4 _DWORD *v13; // ST0C_4 _DWORD *v14; // eax char *result; // eax signed int v16; // [esp+Ch] [ebp-8h] _BYTE *v17; // [esp+10h] [ebp-4h] v1 = this; v2 = this + 118; v17 = v2; v3 = (int *)(v1 + 136); v16 = 4; do { *((_WORD *)v2 - 1) = -1; *v2 = 0; v4 = *(v3 - 1); if ( v4 != *v3 ) { v5 = sub_71A600(*v3, *v3, v4); v2 = v17; *v3 = v5; } v2 += 4; v3 += 4; v6 = v16-- == 1; v17 = v2; } while ( !v6 ); v7 = *((_DWORD *)v1 + 8); if ( v7 != *((_DWORD *)v1 + 9) ) *((_DWORD *)v1 + 9) = v7; v1[110] = 0; *((_WORD *)v1 + 54) = 0; *((_DWORD *)v1 + 26) = 0; v12 = v1 + 12; v12[4] = 0; v12[3] = 0; v12[2] = 0; v12[1] = 0; *v12 = 0; strncpy(v1 + 12, &byte_A01865, 0x14u); v13 = v1 + 48; v13[4] = 0; v13[3] = 0; v13[2] = 0; v13[1] = 0; *v13 = 0; strncpy(v1 + 48, &byte_A01866, 0x14u); v14 = v1 + 69; *((_DWORD *)v1 + 24) = 0; *((_DWORD *)v1 + 25) = 0; v1[68] = 0; v14[4] = 0; v14[3] = 0; v14[2] = 0; v14[1] = 0; *v14 = 0; result = strncpy(v1 + 69, &byte_A01867, 0x14u); v1[4] = 1; *((_DWORD *)v1 + 2) = 4; return result; } //----- (0071A060) -------------------------------------------------------- char *__thiscall sub_71A060(char *this) { char *v1; // esi v1 = this; *(_DWORD *)this = &RaidInfo::`vftable'; *((_DWORD *)this + 7) = 0; *((_DWORD *)this + 6) = 0; *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 8) = 0; *((_DWORD *)this + 9) = 0; *((_DWORD *)this + 10) = 0; *((_DWORD *)this + 16) = 0; *((_DWORD *)this + 15) = 0; *((_DWORD *)this + 14) = 0; *((_DWORD *)this + 13) = 0; *((_DWORD *)this + 12) = 0; *(_DWORD *)(this + 85) = 0; *(_DWORD *)(this + 81) = 0; *(_DWORD *)(this + 77) = 0; *(_DWORD *)(this + 73) = 0; *(_DWORD *)(this + 69) = 0; this[118] = 0; this[122] = 0; this[126] = 0; this[130] = 0; *((_WORD *)this + 58) = -1; *((_WORD *)this + 60) = -1; *((_WORD *)this + 62) = -1; *((_WORD *)this + 64) = -1; `eh vector constructor iterator'(this + 132, 0x10u, 4, unknown_libname_17, sub_467570); sub_719F30(v1); return v1; } // A01870: using guessed type void *RaidInfo::`vftable'; //----- (0071A130) -------------------------------------------------------- char __thiscall sub_71A130(_DWORD *this, int a2) { unsigned int v2; // edi int v3; // esi int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx unsigned int v8; // ecx int v9; // ebx unsigned int *v10; // edi int v11; // edx int v12; // ecx char v13; // al int v14; // edx int v15; // ecx int v16; // edx _DWORD *v17; // eax _DWORD *v19; // [esp+Ch] [ebp-68h] unsigned int v20; // [esp+10h] [ebp-64h] char v21[4]; // [esp+14h] [ebp-60h] int v22; // [esp+18h] [ebp-5Ch] int v23; // [esp+1Ch] [ebp-58h] int v24; // [esp+20h] [ebp-54h] int v25; // [esp+24h] [ebp-50h] char v26; // [esp+28h] [ebp-4Ch] int v27; // [esp+2Ch] [ebp-48h] int v28; // [esp+30h] [ebp-44h] int v29; // [esp+34h] [ebp-40h] int v30; // [esp+38h] [ebp-3Ch] int v31; // [esp+3Ch] [ebp-38h] int v32; // [esp+40h] [ebp-34h] int v33; // [esp+44h] [ebp-30h] char v34; // [esp+48h] [ebp-2Ch] float v35; // [esp+4Ch] [ebp-28h] float v36; // [esp+50h] [ebp-24h] char v37; // [esp+54h] [ebp-20h] int v38; // [esp+58h] [ebp-1Ch] int v39; // [esp+5Ch] [ebp-18h] int v40; // [esp+60h] [ebp-14h] int v41; // [esp+64h] [ebp-10h] int v42; // [esp+68h] [ebp-Ch] char v43; // [esp+6Ch] [ebp-8h] v2 = 0; v19 = this; v20 = 0; v3 = a2 + 130; do { v4 = *(_DWORD *)(v3 - 4); v5 = *(_DWORD *)v3; v38 = *(_DWORD *)(v3 - 8); v6 = *(_DWORD *)(v3 + 4); v39 = v4; v7 = *(_DWORD *)(v3 + 8); v41 = v6; v42 = v7; v40 = v5; v43 = 0; if ( strcmp((const char *)&v38, (const char *)&unk_A01869) ) { v8 = v2 % 5; v9 = v19[4 * (v2 / 5) + 33]; v10 = &v19[4 * (v2 / 5) + 33]; if ( v8 < (signed int)(v10[1] - v9) / 68 ) { if ( !*(_BYTE *)(v3 + 12) ) *(_BYTE *)(v9 + 68 * v8 + 64) = 0; *(_BYTE *)(68 * v8 + *v10 + 20) = *(_BYTE *)(v3 + 12); v17 = (_DWORD *)(68 * v8 + *v10); *v17 = *(_DWORD *)(v3 - 8); v17[1] = *(_DWORD *)(v3 - 4); v17[2] = *(_DWORD *)v3; v17[3] = *(_DWORD *)(v3 + 4); v17[4] = *(_DWORD *)(v3 + 8); } else { v25 = 0; v24 = 0; v23 = 0; v22 = 0; *(_DWORD *)v21 = 0; strncpy(v21, &byte_A01868, 0x14u); v11 = *(_DWORD *)(v3 - 8); v35 = 0.0; v12 = *(_DWORD *)(v3 - 4); v36 = 0.0; v13 = *(_BYTE *)(v3 + 12); *(_DWORD *)v21 = v11; v14 = *(_DWORD *)v3; v22 = v12; v15 = *(_DWORD *)(v3 + 4); v23 = v14; v16 = *(_DWORD *)(v3 + 8); v34 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v37 = 0; v32 = 0; v33 = 0; v26 = v13; v24 = v15; v25 = v16; if ( !v13 ) v37 = 0; sub_71AB80(v10, v21); ++v19[26]; } v2 = v20; } ++v2; v3 += 21; v20 = v2; } while ( (signed int)v2 < 20 ); return 1; } //----- (0071A2F0) -------------------------------------------------------- char __thiscall sub_71A2F0(unsigned int *this, int a2, int a3, int a4, int a5, int a6, int a7, unsigned __int8 a8) { unsigned int *v8; // esi int *v9; // ecx int v10; // edx int v11; // eax int v12; // ebx int v13; // edi v8 = this; if ( (unsigned __int8)a7 > 4u ) return 0; if ( a8 > 5u ) return 0; v9 = (int *)&this[4 * (unsigned __int8)a7 + 33]; if ( (signed int)(v8[4 * (unsigned __int8)a7 + 34] - v8[4 * (unsigned __int8)a7 + 33]) / 68 <= (unsigned int)a8 ) return 0; v10 = *v9; v11 = a8; if ( a8 ) { do { --v11; if ( v10 == v8[4 * (unsigned __int8)a7 + 34] ) break; v10 += 68; } while ( v11 ); } if ( v10 != v8[4 * (unsigned __int8)a7 + 34] ) { sub_71A910(v9, &a7, v10); --v8[26]; } v12 = a5; v13 = a6; if ( sub_719040(v8, a2, a3, a4, a5, a6) ) { sub_719DB0(v8, a2, a3, a4, a5, a6, 0); v13 = a6; v12 = a5; } if ( sub_719000(v8, a2, a3, a4, v12, v13) ) sub_718BF0(v8, v8[3], v8[4], v8[5], v8[6], v8[7]); return 1; } //----- (0071A430) -------------------------------------------------------- char __thiscall sub_71A430(unsigned int *this, int a2, int a3, int a4, int a5, int a6) { char result; // al unsigned int *v7; // esi int v8; // [esp+4h] [ebp-24h] int v9; // [esp+8h] [ebp-20h] int v10; // [esp+Ch] [ebp-1Ch] int v11; // [esp+10h] [ebp-18h] int v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] int v14; // [esp+1Ch] [ebp-Ch] char v15; // [esp+20h] [ebp-8h] result = a2; v7 = this; v11 = a3; v12 = a4; v10 = a2; v13 = a5; v14 = a6; v15 = 0; if ( (_BYTE)a2 ) { sub_718EA0(this, (const char *)&v10, (unsigned int *)&v9, &v8); result = sub_71A2F0(v7, a2, a3, a4, a5, a6, v9, v8); } return result; } //----- (0071A4D0) -------------------------------------------------------- _DWORD *__thiscall sub_71A4D0(_DWORD *this, int a2) { _DWORD *result; // eax result = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); *((_BYTE *)this + 20) = *(_BYTE *)(a2 + 20); this[6] = *(_DWORD *)(a2 + 24); this[7] = *(_DWORD *)(a2 + 28); this[8] = *(_DWORD *)(a2 + 32); this[9] = *(_DWORD *)(a2 + 36); this[10] = *(_DWORD *)(a2 + 40); this[11] = *(_DWORD *)(a2 + 44); this[12] = *(_DWORD *)(a2 + 48); *((_BYTE *)this + 52) = *(_BYTE *)(a2 + 52); *((_BYTE *)this + 53) = *(_BYTE *)(a2 + 53); *((float *)this + 14) = *(float *)(a2 + 56); *((float *)this + 15) = *(float *)(a2 + 60); *((_BYTE *)this + 64) = *(_BYTE *)(a2 + 64); return result; } //----- (0071A550) -------------------------------------------------------- void *__stdcall sub_71A550(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0xCCCCCCC || (result = operator new(20 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0071A5B0) -------------------------------------------------------- _DWORD *__cdecl sub_71A5B0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax int v5; // esi if ( a1 == a2 ) return a3; v3 = a1 + 2; result = a3; do { *result = *(v3 - 2); result[1] = *(v3 - 1); result[2] = *v3; result[3] = v3[1]; v5 = v3[2]; v3 += 5; result[4] = v5; result += 5; } while ( v3 - 2 != a2 ); return result; } //----- (0071A600) -------------------------------------------------------- int __cdecl sub_71A600(int a1, int a2, int a3) { int v3; // ecx int result; // eax if ( a1 == a2 ) return a3; v3 = a1 + 8; result = a3; do { *(_DWORD *)result = *(_DWORD *)(v3 - 8); *(_DWORD *)(result + 4) = *(_DWORD *)(v3 - 4); *(_DWORD *)(result + 8) = *(_DWORD *)v3; *(_DWORD *)(result + 12) = *(_DWORD *)(v3 + 4); *(_DWORD *)(result + 16) = *(_DWORD *)(v3 + 8); *(_BYTE *)(result + 20) = *(_BYTE *)(v3 + 12); *(_DWORD *)(result + 24) = *(_DWORD *)(v3 + 16); *(_DWORD *)(result + 28) = *(_DWORD *)(v3 + 20); *(_DWORD *)(result + 32) = *(_DWORD *)(v3 + 24); *(_DWORD *)(result + 36) = *(_DWORD *)(v3 + 28); *(_DWORD *)(result + 40) = *(_DWORD *)(v3 + 32); *(_DWORD *)(result + 44) = *(_DWORD *)(v3 + 36); *(_DWORD *)(result + 48) = *(_DWORD *)(v3 + 40); *(_BYTE *)(result + 52) = *(_BYTE *)(v3 + 44); *(_BYTE *)(result + 53) = *(_BYTE *)(v3 + 45); v3 += 68; result += 68; *(float *)(result - 12) = *(float *)(v3 - 20); *(float *)(result - 8) = *(float *)(v3 - 16); *(_BYTE *)(result - 4) = *(_BYTE *)(v3 - 12); } while ( v3 - 8 != a2 ); return result; } //----- (0071A6B0) -------------------------------------------------------- char *__cdecl sub_71A6B0(char *a1, char *a2, char *a3) { char *v3; // edx char *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 68 ) { if ( result ) qmemcpy(result, v3, 0x44u); v3 += 68; } return result; } //----- (0071A6F0) -------------------------------------------------------- unsigned int __thiscall sub_71A6F0(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 _DWORD *v7; // ebx unsigned int v8; // edx int v9; // edi _DWORD *i; // eax int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; if ( (unsigned int)a2 > 0xCCCCCCC ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 20; if ( result < (unsigned int)a2 ) { v4 = sub_71A550(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v12 = v4; v14 = 0; sub_5038A0(v6, v5, v4); v7 = (_DWORD *)*v2; v8 = (signed int)((unsigned __int64)(1717986919i64 * (signed int)(v2[1] - *v2)) >> 32) >> 3; v9 = v8 + (v8 >> 31); if ( *v2 ) { for ( i = (_DWORD *)v2[1]; v7 != i; v7 += 5 ) ; operator delete((void *)*v2); } result = (unsigned int)v12; v2[2] = (unsigned int)v12 + 20 * (_DWORD)a2; v2[1] = result + 20 * v9; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0071A800) -------------------------------------------------------- unsigned int __thiscall sub_71A800(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax void *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 char *v7; // ebx unsigned int v8; // edx int v9; // edi char *i; // eax int v11; // [esp+0h] [ebp-24h] void *v12; // [esp+10h] [ebp-14h] int *v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v13 = &v11; v2 = this; if ( (unsigned int)a2 > 0x3C3C3C3 ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 68; if ( result < (unsigned int)a2 ) { v4 = sub_442A60(a2); v5 = (char *)v2[1]; v6 = (char *)*v2; v12 = v4; v14 = 0; sub_71A6B0(v6, v5, (char *)v4); v7 = (char *)*v2; v8 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)(v2[1] - *v2)) >> 32) >> 5; v9 = v8 + (v8 >> 31); if ( *v2 ) { for ( i = (char *)v2[1]; v7 != i; v7 += 68 ) ; operator delete((void *)*v2); } result = (unsigned int)v12; v2[2] = (unsigned int)v12 + 68 * (_DWORD)a2; v2[1] = result + 68 * v9; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (0071A910) -------------------------------------------------------- int *__thiscall sub_71A910(int *this, int *a2, int a3) { int *v3; // esi int *result; // eax v3 = this; sub_71A600(a3 + 68, this[1], a3); result = a2; v3[1] -= 68; *a2 = a3; return result; } //----- (0071A940) -------------------------------------------------------- unsigned int __thiscall sub_71A940(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 20; if ( 214748364 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 20; if ( v3 > result ) { if ( 214748364 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_71A6F0(this, v5); } return result; } //----- (0071A9C0) -------------------------------------------------------- unsigned int __thiscall sub_71A9C0(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 68; if ( 63161283 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 68; if ( v3 > result ) { if ( 63161283 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_71A800(this, v5); } return result; } //----- (0071AA40) -------------------------------------------------------- void **__thiscall sub_71AA40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &RaidInfo::`vftable'; `eh vector destructor iterator'((char *)this + 132, 0x10u, 4, sub_467570); if ( v2[8] ) operator delete(v2[8]); v2[8] = 0; v2[9] = 0; v2[10] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A01870: using guessed type void *RaidInfo::`vftable'; //----- (0071AAD0) -------------------------------------------------------- _DWORD *__thiscall sub_71AAD0(unsigned int *this, _DWORD *a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx _DWORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_71A940(v2, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *a2; result[1] = a2[1]; result[2] = a2[2]; result[3] = a2[3]; result[4] = a2[4]; } } else { v4 = (signed int)((unsigned __int64)(1717986919i64 * (signed int)((signed int)a2 - *v2)) >> 32) >> 3; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_71A940(v2, 1); v6 = (_DWORD *)(*v2 + 20 * v5); result = (_DWORD *)v2[1]; if ( result ) { *result = *v6; result[1] = v6[1]; result[2] = v6[2]; result[3] = v6[3]; result[4] = v6[4]; v2[1] += 20; return result; } } v2[1] += 20; return result; } //----- (0071AB80) -------------------------------------------------------- void __thiscall sub_71AB80(unsigned int *this, const void *a2) { const void *v2; // esi unsigned int *v3; // ebx unsigned int v4; // ecx unsigned int v5; // edx int v6; // esi void *v7; // edi v2 = a2; v3 = this; v4 = this[1]; if ( (unsigned int)a2 >= v4 || *v3 > (unsigned int)a2 ) { if ( v4 == v3[2] ) sub_71A9C0(v3, 1); } else { v5 = (signed int)((unsigned __int64)(2021161081i64 * (signed int)((signed int)a2 - *v3)) >> 32) >> 5; v6 = v5 + (v5 >> 31); if ( v4 == v3[2] ) sub_71A9C0(v3, 1); v2 = (const void *)(*v3 + 68 * v6); } v7 = (void *)v3[1]; if ( v7 ) qmemcpy(v7, v2, 0x44u); v3[1] += 68; } //----- (0071AC80) -------------------------------------------------------- int __thiscall sub_71AC80(_DWORD **this) { return (*(int (__stdcall **)(signed int))(*this[86] + 488))(1); } //----- (0071ACA0) -------------------------------------------------------- int __thiscall sub_71ACA0(_DWORD **this) { return (*(int (**)(void))(*this[86] + 480))(); } //----- (0071ACB0) -------------------------------------------------------- char sub_71ACB0() { _DWORD *v0; // eax v0 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4A5170(v0, "RaidWin"); return (char)v0; } //----- (0071ACE0) -------------------------------------------------------- int __thiscall sub_71ACE0(_BYTE *this, int a2) { _BYTE *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 260))(); if ( (_BYTE)result ) { if ( !v2[876] ) { result = a2; v2[876] = 1; *((_DWORD *)v2 + 213) = a2; } } return result; } //----- (0071ADB0) -------------------------------------------------------- LONG __thiscall sub_71ADB0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int *v9; // ebx int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi int v18; // edi int v19; // edi int v20; // edi int v21; // edi int v22; // edi signed int v24; // [esp+14h] [ebp-10h] v1 = this; *this = &EntryIconWin::`vftable'; this[58] = &EntryIconWin::`vftable'; v2 = this[90]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[90] = 0; } v3 = v1[91]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[91] = 0; } v4 = v1[92]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[92] = 0; } v5 = v1[93]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[93] = 0; } v6 = v1[102]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[102] = 0; } v7 = v1[86]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[86] = 0; } v8 = v1[87]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[87] = 0; } v9 = v1 + 79; v24 = 6; do { v10 = *v9; if ( *v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *v9 = 0; } ++v9; --v24; } while ( v24 ); v11 = v1[88]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[88] = 0; } v12 = v1[102]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); sub_85B2F0(v1 + 94); v13 = v1[93]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[92]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = v1[91]; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v16 = v1[90]; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = v1[88]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v1[87]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = v1[86]; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = v1[85]; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); `eh vector destructor iterator'(v1 + 79, 4u, 6, sub_410C00); v21 = v1[78]; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = v1[77]; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); return sub_8F29C0((void **)v1); } // A02738: using guessed type void *EntryIconWin::`vftable'; // A02754: using guessed type void *EntryIconWin::`vftable'; //----- (0071B190) -------------------------------------------------------- int __thiscall sub_71B190(_DWORD **this) { _DWORD **v1; // esi v1 = this; (*(void (__stdcall **)(_DWORD))(*this[86] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v1[86] + 240))(0); (*(void (__stdcall **)(_DWORD))(*v1[87] + 256))(0); return (*(int (__stdcall **)(_DWORD))(*v1[87] + 240))(0); } //----- (0071B1E0) -------------------------------------------------------- char __thiscall sub_71B1E0(_DWORD **this) { _DWORD **v1; // edi const char *v2; // eax char v4[4]; // [esp+Ch] [ebp-2Ch] int v5; // [esp+10h] [ebp-28h] int v6; // [esp+14h] [ebp-24h] int v7; // [esp+18h] [ebp-20h] int v8; // [esp+1Ch] [ebp-1Ch] char v9[4]; // [esp+20h] [ebp-18h] int v10; // [esp+24h] [ebp-14h] int v11; // [esp+28h] [ebp-10h] int v12; // [esp+2Ch] [ebp-Ch] int v13; // [esp+30h] [ebp-8h] v1 = this; v2 = (const char *)(*(int (**)(void))(*this[86] + 452))(); v13 = 0; v12 = 0; v11 = 0; v10 = 0; *(_DWORD *)v9 = 0; strncpy(v9, v2, 0x14u); v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, &byte_A018AE, 0x14u); if ( *(_DWORD *)v9 != *(_DWORD *)v4 || v10 != v5 || v11 != v6 || v12 != v7 || v13 != v8 ) sub_4CB290(v1[74], *(int *)v9, v10, v11, v12, v13); (*(void (__stdcall **)(void *))(*v1[86] + 460))(&unk_A018AF); return sub_4A5390(v1[74]); } //----- (0071B2F0) -------------------------------------------------------- char __thiscall sub_71B2F0(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char result; // al v3 = this; if ( !a2 ) return sub_71B1E0(this); result = a2 - 1; if ( a2 == 1 ) { (*(void (__stdcall **)(void *))(*this[86] + 460))(&unk_A018E1); sub_4A5390(v3[74]); result = sub_8F86A0(&unk_BA6B10, v3); } return result; } //----- (0071B340) -------------------------------------------------------- char __thiscall sub_71B340(_DWORD **this, int a2, int a3) { return sub_71B1E0(this); } //----- (0071B350) -------------------------------------------------------- LONG __thiscall sub_71B350(_DWORD *this) { _DWORD *v1; // esi int *v2; // ebx int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi int v18; // edi int v19; // edi int v20; // edi int v21; // edi int v22; // edi int v23; // edi int v24; // edi int v25; // edi int v26; // edi signed int v28; // [esp+14h] [ebp-10h] v1 = this; *this = &ExpeditionWin::`vftable'; this[58] = &ExpeditionWin::`vftable'; v2 = this + 90; v28 = 20; do { v3 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = 0; } ++v2; --v28; } while ( v28 ); v4 = v1[117]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[117] = 0; } v5 = v1[118]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[118] = 0; } v6 = v1[119]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[119] = 0; } v7 = v1[120]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[120] = 0; } v8 = v1[111]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[111] = 0; } v9 = v1[112]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v1[112] = 0; } v10 = v1[113]; if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[113] = 0; } v11 = v1[114]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[114] = 0; } v12 = v1[115]; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v1[115] = 0; } v13 = v1[130]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[129]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = v1[126]; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); `eh vector destructor iterator'(v1 + 124, 4u, 2, sub_410C00); `eh vector destructor iterator'(v1 + 122, 4u, 2, sub_410C00); v16 = v1[121]; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = v1[120]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v1[119]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = v1[118]; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = v1[117]; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = v1[116]; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = v1[115]; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v23 = v1[114]; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v24 = v1[113]; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = v1[112]; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); v26 = v1[111]; if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); `eh vector destructor iterator'(v1 + 90, 4u, 20, sub_410C00); return sub_8F10F0(v1); } // A02920: using guessed type void *ExpeditionWin::`vftable'; // A0293C: using guessed type void *ExpeditionWin::`vftable'; //----- (0071B810) -------------------------------------------------------- int __thiscall sub_71B810(int this) { _DWORD *v1; // esi int v2; // eax int result; // eax v1 = (_DWORD *)this; if ( *(_BYTE *)(this + 440) ) { v2 = *(_DWORD *)(this + 348); *(_BYTE *)(this + 440) = 0; *(_BYTE *)(*(_DWORD *)(this + 4 * v2 + 356) + 412) = 0; result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 468) + 256))(0); } v1[88] = 0; v1[87] = 0; v1[89] = 4; return result; } //----- (0071B870) -------------------------------------------------------- void __thiscall sub_71B870(int this, int a2, _DWORD *a3, int a4) { if ( a2 == 15 ) { switch ( *a3 ) { case 0x404: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 280), 0); break; case 0x405: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 280), 1); break; case 0x406: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 280), 2); break; case 0x408: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 280), 3); break; case 0x40E: sub_4BE110(*(_DWORD **)(this + 64), 0, *(unsigned __int8 *)(this + 276)); break; case 0x40F: sub_4BE110(*(_DWORD **)(this + 64), 1, *(unsigned __int8 *)(this + 276)); break; case 0x410: sub_4BE110(*(_DWORD **)(this + 64), 2, *(unsigned __int8 *)(this + 276)); break; case 0x411: sub_4BE110(*(_DWORD **)(this + 64), 3, *(unsigned __int8 *)(this + 276)); break; default: return; } } } //----- (0071B980) -------------------------------------------------------- LONG __thiscall sub_71B980(_DWORD *this) { int *v1; // edi int v2; // ebx int v3; // esi int v4; // esi int v5; // esi int v6; // esi int v7; // esi int v8; // esi int v9; // esi int v10; // esi int v11; // esi int v12; // esi int v13; // esi int v14; // esi _DWORD *v16; // [esp+10h] [ebp-18h] signed int v17; // [esp+14h] [ebp-14h] signed int v18; // [esp+18h] [ebp-10h] v16 = this; *this = &ExpeditionPartyWin::`vftable'; this[58] = &ExpeditionPartyWin::`vftable'; v1 = this + 156; v2 = (int)(this + 96); v17 = 5; do { v3 = *(_DWORD *)(v2 - 20); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v2 - 20) = 0; } v4 = *(_DWORD *)v2; if ( *(_DWORD *)v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)v2 = 0; } v5 = *(_DWORD *)(v2 + 20); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v2 + 20) = 0; } v18 = 10; do { v6 = *(v1 - 50); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(v1 - 50) = 0; } v7 = *v1; if ( *v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *v1 = 0; } ++v1; --v18; } while ( v18 ); v8 = *(_DWORD *)(v2 - 40); if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v2 - 40) = 0; } sub_8F9E00(&unk_BA6B10, *(_DWORD **)(v2 + 472)); v2 += 4; --v17; } while ( v17 ); v9 = v16[206]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v16[206] = 0; } v10 = v16[208]; if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v16[208] = 0; } v11 = v16[207]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v16[207] = 0; } `eh vector destructor iterator'(v16 + 214, 4u, 5, sub_410C00); v12 = v16[208]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = v16[207]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v16[206]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); `eh vector destructor iterator'(v16 + 156, 4u, 50, sub_410C00); `eh vector destructor iterator'(v16 + 106, 4u, 50, sub_410C00); `eh vector destructor iterator'(v16 + 101, 4u, 5, sub_410C00); `eh vector destructor iterator'(v16 + 96, 4u, 5, sub_410C00); `eh vector destructor iterator'(v16 + 91, 4u, 5, sub_410C00); `eh vector destructor iterator'(v16 + 86, 4u, 5, sub_410C00); return sub_8F10F0(v16); } // A02B60: using guessed type void *ExpeditionPartyWin::`vftable'; // A02B7C: using guessed type void *ExpeditionPartyWin::`vftable'; //----- (0071BCE0) -------------------------------------------------------- int __thiscall sub_71BCE0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi int result; // eax int v6; // ecx int (__thiscall *v7)(_DWORD *, LONG *, LONG *); // edx int v8; // ecx LONG v9; // [esp+8h] [ebp-8h] LONG v10; // [esp+Ch] [ebp-4h] v4 = this; result = (*(int (__thiscall **)(char *))(*(this - 58) + 260))((char *)this - 232); if ( (_BYTE)result ) { if ( a2 == 15 ) { result = 0; switch ( *(_DWORD *)a3 ) { case 0x3F7: result = 1; break; case 0x3F8: result = 2; break; case 0x3F9: result = 4; break; case 0x3FA: result = 8; break; case 0x3FB: result = 16; break; default: break; } v6 = v4[155]; if ( *(_BYTE *)(a3 + 4) ) { v4[v6 + 162] |= result; } else { result = ~result; v4[v6 + 162] &= result; } } if ( a4 ) { v7 = *(int (__thiscall **)(_DWORD *, LONG *, LONG *))(*(v4 - 58) + 224); v10 = pt.x; v9 = pt.y; result = v7(v4 - 58, &v10, &v9); if ( v10 >= 0 ) { result = (*(int (__thiscall **)(_DWORD *))(*(v4 - 58) + 144))(v4 - 58); if ( v10 < result && v9 >= 0 ) { result = (*(int (__thiscall **)(_DWORD *))(*(v4 - 58) + 148))(v4 - 58); if ( v9 < result && a2 == 4 ) { result = v4[16]; v8 = *(_DWORD *)(result + 1240); if ( v8 ) { if ( *(_BYTE *)(v8 + 344) ) { *(_BYTE *)(v8 + 344) = 0; result = sub_71B810(v8); } } } } } } } return result; } //----- (0071BE20) -------------------------------------------------------- _DWORD *__thiscall sub_71BE20(_DWORD **this, _DWORD *a2, int a3) { int **v3; // esi signed int v4; // edi int v5; // ebx int v6; // ST20_4 int v7; // eax int v8; // ebx int v9; // ST20_4 int v10; // eax int v11; // ebx int *v12; // ST20_4 int v13; // eax int v14; // ebx int *v15; // ST20_4 int v16; // eax _DWORD *result; // eax signed int v18; // [esp+Ch] [ebp-14h] int v19; // [esp+10h] [ebp-10h] _DWORD **v20; // [esp+14h] [ebp-Ch] int v21; // [esp+18h] [ebp-8h] int v22; // [esp+2Ch] [ebp+Ch] v20 = this; v3 = this + 156; v19 = (int)&this[a3 + 96]; v21 = (int)(this + 96); v22 = (int)&this[a3 + 96]; v18 = 5; do { (*(void (**)(void))(**(_DWORD **)v21 + 168))(); v4 = 0; do { v5 = **(v3 - 50); v6 = (int)*(v3 - 50); v7 = (*(int (**)(void))(**(_DWORD **)v19 + 164))(); (*(void (__thiscall **)(int, int))(v5 + 172))(v6, (int)&v20[211][v4] + v7 + 1); v8 = **(v3 - 50); v9 = (int)*(v3 - 50); v10 = (*(int (**)(void))(**(_DWORD **)v22 + 168))(); (*(void (__thiscall **)(int, int))(v8 + 176))(v9, v10); v11 = **v3; v12 = *v3; v13 = (*(int (**)(void))(**(_DWORD **)v19 + 164))(); (*(void (__thiscall **)(int *, int))(v11 + 172))(v12, (int)&v20[211][v4] + v13 + 3); v14 = **v3; v15 = *v3; v16 = (*(int (**)(void))(**(_DWORD **)v22 + 168))(); (*(void (__thiscall **)(int *, int))(v14 + 176))(v15, v16 + 2); v4 += 5; ++v3; } while ( v4 < 50 ); v21 += 4; v22 += 4; --v18; } while ( v18 ); result = a2; v20[210] = a2; return result; } //----- (0071BF50) -------------------------------------------------------- int __thiscall sub_71BF50(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi _DWORD **v4; // esi _DWORD **v5; // esi _DWORD **v6; // esi _DWORD **v7; // esi _DWORD **v8; // esi int result; // eax int v10; // [esp+Ch] [ebp-8h] char v11; // [esp+10h] [ebp-4h] v3 = this; v4 = (_DWORD **)(this[a2 + 214] + 232); v10 = 1015; v11 = a3 & 1; if ( v4[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 4))(16, &v10, v4); if ( v4[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v4[1] + 16))(16, &v10, v4); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v4)[4])(v4, 16, &v10, v4); v5 = (_DWORD **)(v3[a2 + 214] + 232); v10 = 1016; v11 = (a3 >> 1) & 1; if ( v5[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 4))(16, &v10, v5); if ( v5[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v5[1] + 16))(16, &v10, v5); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v5)[4])(v5, 16, &v10, v5); v6 = (_DWORD **)(v3[a2 + 214] + 232); v10 = 1017; v11 = (a3 >> 2) & 1; if ( v6[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 4))(16, &v10, v6); if ( v6[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v6[1] + 16))(16, &v10, v6); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v6)[4])(v6, 16, &v10, v6); v7 = (_DWORD **)(v3[a2 + 214] + 232); v10 = 1018; v11 = (a3 >> 3) & 1; if ( v7[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 4))(16, &v10, v7); if ( v7[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v7[1] + 16))(16, &v10, v7); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v7)[4])(v7, 16, &v10, v7); v8 = (_DWORD **)(v3[a2 + 214] + 232); v10 = 1019; v11 = (a3 >> 4) & 1; if ( v8[1] ) { (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 4))(16, &v10, v8); if ( v8[1] ) (*(void (__stdcall **)(signed int, int *, _DWORD **))(*v8[1] + 16))(16, &v10, v8); } ((void (__thiscall *)(_DWORD **, signed int, int *, _DWORD **))(*v8)[4])(v8, 16, &v10, v8); result = a2; v3[a2 + 220] = a3; return result; } //----- (0071C150) -------------------------------------------------------- int __thiscall sub_71C150(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[87]; if ( result ) { v3 = (_DWORD *)this[86]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[87] + 344) = *(_DWORD *)(v1[86] + 300); result = sub_465130((_DWORD *)v1[87]); } } return result; } //----- (0071C1A0) -------------------------------------------------------- _DWORD *__thiscall sub_71C1A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ExpeditionLootOptionWin::`vftable'; v1[58] = &ExpeditionLootOptionWin::`vftable'; v1[86] = 0; `eh vector constructor iterator'( v1 + 88, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 93, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[103] = 0; v1[104] = 0; v2 = v1[86]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[86] = 0; } v3 = v1[103]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[103] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A02DA0: using guessed type void *ExpeditionLootOptionWin::`vftable'; // A02DBC: using guessed type void *ExpeditionLootOptionWin::`vftable'; //----- (0071C2B0) -------------------------------------------------------- LONG __thiscall sub_71C2B0(_DWORD *this) { _DWORD *v1; // ebx int *v2; // edi int v3; // esi int v4; // esi int v5; // esi int v6; // esi int v7; // esi int v8; // esi int v9; // esi int v10; // esi signed int v12; // [esp+14h] [ebp-10h] v1 = this; *this = &ExpeditionLootOptionWin::`vftable'; this[58] = &ExpeditionLootOptionWin::`vftable'; sub_8F9E00(&unk_BA6B10, (_DWORD *)this[86]); v2 = v1 + 93; v12 = 5; do { v3 = *(v2 - 5); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(v2 - 5) = 0; } v4 = *v2; if ( *v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = 0; } ++v2; --v12; } while ( v12 ); v5 = v1[104]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[104] = 0; } v6 = v1[93]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[93] = 0; } v7 = v1[98]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[98] = 0; } v8 = v1[104]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[103]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); `eh vector destructor iterator'(v1 + 93, 4u, 5, sub_410C00); `eh vector destructor iterator'(v1 + 88, 4u, 5, sub_410C00); v10 = v1[86]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); return sub_8F10F0(v1); } // A02DA0: using guessed type void *ExpeditionLootOptionWin::`vftable'; // A02DBC: using guessed type void *ExpeditionLootOptionWin::`vftable'; //----- (0071C4C0) -------------------------------------------------------- void __thiscall sub_71C4C0(int this, int a2, _DWORD *a3, int a4) { if ( a2 == 15 ) { switch ( *a3 ) { case 0x404: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 116), 0); break; case 0x405: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 116), 1); break; case 0x406: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 116), 2); break; case 0x408: sub_4BE110(*(_DWORD **)(this + 64), *(unsigned __int8 *)(this + 116), 3); break; default: return; } } } //----- (0071C560) -------------------------------------------------------- _DWORD *__thiscall sub_71C560(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8F2740(this); *v1 = &EntryIconWin::`vftable'; v1[58] = &EntryIconWin::`vftable'; v1[77] = 0; v1[78] = 0; `eh vector constructor iterator'( v1 + 79, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[85] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; sub_85B2B0(v1 + 94); v1[94] = &NiAlphaProperty::`vftable'; *((_BYTE *)v1 + 406) = 0; *((_WORD *)v1 + 202) = 236; v1[102] = 0; *((float *)v1 + 75) = 1.0; *((_BYTE *)v1 + 412) = 0; *((float *)v1 + 76) = 0.0; return v1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // A02738: using guessed type void *EntryIconWin::`vftable'; // A02754: using guessed type void *EntryIconWin::`vftable'; //----- (0071C660) -------------------------------------------------------- char __thiscall sub_71C660(_DWORD *this, int a2, int a3) { volatile LONG *v3; // eax _DWORD *v4; // esi int v5; // edx LOBYTE(v3) = a2; v4 = this; if ( a2 == this[72] ) { v3 = (volatile LONG *)sub_402BF0(this); if ( v3 ) { v5 = v4[72]; LABEL_7: LOBYTE(v3) = sub_8F2C80(v3, v5, v4[74]); return (char)v3; } } else if ( a2 == this[73] ) { v3 = (volatile LONG *)sub_402BF0(this); if ( v3 ) { v5 = v4[73]; goto LABEL_7; } } return (char)v3; } //----- (0071C6B0) -------------------------------------------------------- int __thiscall sub_71C6B0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int *v3; // edi void **v4; // ebx const char *v5; // eax void (__stdcall *v6)(_DWORD); // eax void **v7; // ebx const char *v8; // eax void **v9; // edi const char *v10; // eax v1 = this; v2 = (int *)sub_718E40(&dword_B9E560, this[74] - 1); v3 = v2; if ( !v2 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[86] + 256))(0); return (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v1[87] + 256))(v1[87], 0); } if ( sub_718FC0(&dword_B9E560, *v2, v2[1], v2[2], v2[3], v2[4]) ) { v4 = (void **)v1[86]; v5 = sub_40A910(-2070713666); sub_8F2EA0(v4, v5); *(_DWORD *)(v1[86] + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 248))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 256))(1); v6 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[86] + 492); } else { if ( sub_719040(&dword_B9E560, *v3, v3[1], v3[2], v3[3], v3[4]) ) { v7 = (void **)v1[86]; v8 = sub_40A910(-572477507); sub_8F2EA0(v7, v8); *(_DWORD *)(v1[86] + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 248))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[86] + 492))(1); goto LABEL_8; } v6 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[86] + 256); } v6(0); LABEL_8: if ( sub_719000(&dword_B9E560, *v3, v3[1], v3[2], v3[3], v3[4]) && dword_B9E5C0 == 2 ) { v9 = (void **)v1[87]; v10 = sub_40A910(2040035508); sub_8F2EA0(v9, v10); *(_DWORD *)(v1[87] + 272) = dword_AD01E8; (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[87] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[87] + 248))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[87] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[87] + 276))(1.0); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[87] + 256))(0); } return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[86] + 276))(1.0); } // AD01E8: using guessed type int dword_AD01E8; // B9E560: using guessed type int dword_B9E560; // B9E5C0: using guessed type int dword_B9E5C0; //----- (0071C940) -------------------------------------------------------- char __thiscall sub_71C940(_DWORD *this, int a2) { int v2; // esi volatile LONG *v3; // ebx int v4; // edi char *v5; // eax _DWORD *v6; // eax int v7; // eax int v8; // edi int v9; // eax volatile LONG **v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi volatile LONG *v13; // eax volatile LONG **v14; // eax volatile LONG *v15; // eax int v16; // eax int v17; // edi int v18; // ST14_4 int v19; // eax volatile LONG *v20; // edi const CHAR *v21; // eax volatile LONG **v22; // edi volatile LONG *v23; // edx int v24; // edi int v25; // eax volatile LONG *v26; // edi const CHAR *v27; // eax volatile LONG **v28; // edi volatile LONG *v29; // edx int v30; // edi int v31; // ebx int v32; // eax volatile LONG *v33; // edi volatile LONG v34; // ebx const CHAR *v35; // eax volatile LONG *v36; // eax void (__thiscall ***v37)(_DWORD, signed int); // edi void (__thiscall ***v38)(_DWORD, signed int); // edi int v39[5]; // [esp+44h] [ebp-30h] int v40; // [esp+58h] [ebp-1Ch] int v41; // [esp+5Ch] [ebp-18h] int v42; // [esp+60h] [ebp-14h] int v43; // [esp+64h] [ebp-10h] int v44; // [esp+70h] [ebp-4h] volatile LONG v45; // [esp+7Ch] [ebp+8h] int v46; // [esp+7Ch] [ebp+8h] volatile LONG v47; // [esp+7Ch] [ebp+8h] v2 = (int)this; v3 = 0; v43 = 0; this[74] = a2; v4 = dword_BA6BA0; v44 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\MessageWin.nif"); sub_8F66B0(v5, (int)&v43, v4); if ( !v43 ) return 0; v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v43 + 72))("Panel01"); v7 = sub_85C050(v6, 8); v8 = v7; v40 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v44) = 1; if ( v9 ) v3 = *(volatile LONG **)(v9 + 4); v10 = sub_8FB140(v43, (int)"Panel01", (int)&v41, (int)&v42, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v10, 0, a2, (int)"ExpeditionMemberAddWin", 0) ) { LOBYTE(v44) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v43; v44 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v13 = (volatile LONG *)sub_43D0D0(0x13u); if ( v13 ) v14 = sub_8FB140(v43, (int)"Theme", (int)&v41, (int)&v42, v13); else v14 = sub_8FB140(v43, (int)"Theme", (int)&v41, (int)&v42, 0); v15 = sub_8F3EB0(v41, v42, (int)v14, v2, 0, 0); if ( v15 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_421050(0); v17 = *(_DWORD *)(v16 + 384); v18 = *(_DWORD *)(v16 + 384); v19 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 144))(v2); v20 = sub_45A900(8, v17 + 3, v19 - 16, v18, v2, 1342181380, 100, 1, 1, 0, 1); sub_459B60(v20, 1); v45 = *v20; v21 = sub_40A910(-1989588106); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v45 + 460))(v20, v21); sub_459960(v20, 0); v22 = sub_8FB140(v43, (int)"BtnNor02", (int)&v41, (int)&v42, v3); sub_8FB650(v22, v43, (int)"BtnClick02"); sub_8FB650(v22, v43, (int)"BtnOver02"); sub_8FE0F0(v41, v42, (int)v22, v2, 0, 0, 0); v23 = v22[9]; v24 = *(_DWORD *)(*v23 + 24); v46 = *(_DWORD *)(*v23 + 20); v25 = sub_421050(0); v26 = sub_8F4A20(v41, v42 + 1, v46, v24, v25, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v26 + 488))(v26, 5); v47 = *v26; v27 = sub_40C190(1131439703); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v47 + 472))(v26, v27); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v28 = sub_8FB140(v43, (int)"BtnNor03", (int)&v41, (int)&v42, v3); sub_8FB650(v28, v43, (int)"BtnClick03"); sub_8FB650(v28, v43, (int)"BtnOver03"); sub_8FE0F0(v41, v42, (int)v28, v2, 1, 0, 0); v29 = v28[9]; v30 = *(_DWORD *)(*v29 + 24); v31 = *(_DWORD *)(*v29 + 20); v32 = sub_421050(0); v33 = sub_8F4A20(v41, v42 + 1, v31, v30, v32, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v33 + 488))(v33, 5); v34 = *v33; v35 = sub_40C190(-2002610207); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v34 + 472))(v33, v35); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); sub_456260(v39); LOBYTE(v44) = 2; sub_456000(v39, 0, 0); sub_455FF0(v39, v2); sub_456380(v39, v43); v36 = sub_4565F0(v39, (int)"LotInput", 16, 1342177280, 0, 1); *(_DWORD *)(v2 + 344) = v36; (*(void (__thiscall **)(volatile LONG *, void *))(*v36 + 460))(v36, &unk_A018AD); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v2 + 344) + 300) + 60))(0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v44) = 1; sub_4562E0(v39); v37 = (void (__thiscall ***)(_DWORD, signed int))v40; LOBYTE(v44) = 0; if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) ) (**v37)(v37, 1); v38 = (void (__thiscall ***)(_DWORD, signed int))v43; v44 = -1; if ( v43 && !InterlockedDecrement((volatile LONG *)(v43 + 4)) && v38 ) (**v38)(v38, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (0071CDE0) -------------------------------------------------------- _DWORD *__thiscall sub_71CDE0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ExpeditionWin::`vftable'; v1[58] = &ExpeditionWin::`vftable'; `eh vector constructor iterator'( v1 + 90, 4u, 20, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[111] = 0; v1[112] = 0; v1[113] = 0; v1[114] = 0; v1[115] = 0; v1[116] = 0; v1[117] = 0; v1[118] = 0; v1[119] = 0; v1[120] = 0; v1[121] = 0; `eh vector constructor iterator'( v1 + 122, 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 124, 4u, 2, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[126] = 0; v1[129] = 0; v1[130] = 0; *((_BYTE *)v1 + 344) = 0; *((_BYTE *)v1 + 440) = 0; v1[88] = 0; v1[87] = 0; v1[89] = 4; v2 = v1[111]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[111] = 0; } v3 = v1[112]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[112] = 0; } v4 = v1[113]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[113] = 0; } v5 = v1[114]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[114] = 0; } v6 = v1[115]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[115] = 0; } return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A02920: using guessed type void *ExpeditionWin::`vftable'; // A0293C: using guessed type void *ExpeditionWin::`vftable'; //----- (0071CFF0) -------------------------------------------------------- void __thiscall sub_71CFF0(int this, int a2, int a3) { int v3; // esi _DWORD *v4; // esi _DWORD *v5; // esi const CHAR *v6; // eax unsigned int v7; // edi _DWORD *v8; // ebx char *v9; // eax int *v10; // eax int *v11; // edi void (__stdcall *v12)(signed int); // eax bool v13; // zf void (__stdcall *v14)(int *, int); // edx int *v15; // ebx int v16; // edi int v17; // eax int *v18; // ebx int v19; // edi int v20; // eax int v21; // eax int v22; // ecx const char *v23; // eax int v24; // edi int v25; // edi int v26; // ebx int v27; // ebx int v28; // eax int v29; // edi int v30; // eax int v31; // edi int v32; // eax int v33; // esi int v34; // edi int v35; // ebx int v36; // ebx int v37; // eax int v38; // edi int v39; // eax int v40; // edi int v41; // eax int v42; // [esp+Ch] [ebp-10h] int v43; // [esp+10h] [ebp-Ch] void (__thiscall **v44)(_DWORD *, int); // [esp+24h] [ebp+8h] void (__thiscall **v45)(_DWORD *, int); // [esp+24h] [ebp+8h] _DWORD *v46; // [esp+28h] [ebp+Ch] _DWORD *v47; // [esp+28h] [ebp+Ch] v3 = this; switch ( a2 ) { case 1: case 6: sub_8F86A0(&unk_BA6B10, (_DWORD *)this); sub_8F28E0((_BYTE *)v3); return; case 2: v4 = *(_DWORD **)(*(_DWORD *)(this + 296) + 1244); if ( v4 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 260))(v4) ) sub_8F82A0(&unk_BA6B10, v4); } return; case 3: if ( dword_B9E5C8 ) { v42 = 826544367; goto LABEL_11; } if ( dword_B9DCC4 && (unsigned __int8)sub_6C1560(&dword_B9DC70) ) sub_4BDE40(*(_DWORD **)(v3 + 296)); return; case 4: if ( dword_B9E5C8 ) sub_4BE160(*(_DWORD **)(this + 296)); return; case 5: if ( byte_B9E5CC || byte_B9E5CD ) { sub_4A5330(*(_DWORD **)(this + 296)); } else { v42 = 69861649; LABEL_11: v5 = *(_DWORD **)(this + 296); v6 = sub_40A910(v42); sub_492060(v5, (int)v6); } return; case 7: case 8: case 9: case 10: if ( !*(_BYTE *)(this + 440) ) { v7 = a2 - 7; if ( (unsigned int)(a2 - 7) < 4 ) { v8 = (_DWORD *)sub_4DC2A0(*(_DWORD **)(this + 296), v7); if ( dword_B9E5E4[4 * v7] != dword_B9E5E4[4 * v7 + 1] && v8 && !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v8 + 260))(v8) ) { sub_8F82A0(&unk_BA6B10, v8); *(_BYTE *)(v3 + 344) = 1; *(_DWORD *)(v3 + 356) = v7; } } } return; case 16: if ( !a3 ) return; if ( a3 <= 0 ) goto LABEL_29; if ( (unsigned int)(a3 - 1) >= 0x14 ) return; v9 = sub_718A80(&dword_B9E560, a3 - 1); if ( v9 ) sub_4A7770(*(_DWORD **)(v3 + 296), (int)v9); LABEL_29: if ( !byte_B9E5CC ) return; if ( !*(_DWORD *)(v3 + 348) ) { if ( (dword_B9E5E4[4 * ((a3 - 1) / 5) + 1] - dword_B9E5E4[4 * ((a3 - 1) / 5)]) / 68 <= (unsigned int)((a3 - 1) % 5) ) return; *(_DWORD *)(v3 + 348) = a3; *(_BYTE *)(*(_DWORD *)(v3 + 4 * a3 + 356) + 412) = 1; v10 = (int *)sub_718E40(&dword_B9E560, a3 - 1); v11 = v10; if ( !v10 ) { (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v3 + 456) + 256))(0, v43); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v3 + 460) + 256))(0); LABEL_54: v15 = *(int **)(v3 + 448); v16 = *v15; v17 = (*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(v3 + 4 * a3 + 356) + 312) + 484))(); (*(void (__thiscall **)(int *, int))(v16 + 472))(v15, v17); v18 = *(int **)(v3 + 444); v19 = *v18; v20 = (*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(v3 + 4 * a3 + 356) + 308) + 484))(); (*(void (__thiscall **)(int *, int))(v19 + 472))(v18, v20); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 468) + 256))(1); goto LABEL_56; } if ( sub_718FC0(&dword_B9E560, *v10, v10[1], v10[2], v10[3], v10[4]) ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 456) + 256))(1); v12 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 456) + 492); } else { v13 = sub_719040(&dword_B9E560, *v11, v11[1], v11[2], v11[3], v11[4]) == 0; v12 = *(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 456) + 256); if ( !v13 ) { v12(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 456) + 492))(1); LABEL_36: if ( sub_719000(&dword_B9E560, *v11, v11[1], v11[2], v11[3], v11[4]) && dword_B9E5C0 == 2 ) { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 460) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 460) + 276))(1.0); } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 460) + 256))(0); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 456) + 276))(1.0); switch ( sub_40A760(*((_BYTE *)v11 + 52)) ) { case 1: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 464) + 492))(0); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; case 6: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 492))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; case 0xB: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 492))(2); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; case 0x10: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 492))(3); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; case 0x15: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 492))(4); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; case 0x1A: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 492))(5); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 464) + 256))(1); break; default: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 464) + 256))(0); break; } v14 = *(void (__stdcall **)(int *, int))(**(_DWORD **)(v3 + 448) + 468); if ( *((_BYTE *)v11 + 20) ) { v14(&dword_AA8C68, v43); (*(void (__cdecl **)(int *))(**(_DWORD **)(v3 + 444) + 468))(&dword_AA8C68); } else { v14((int *)&unk_AA8CE8, v43); (*(void (__cdecl **)(void *))(**(_DWORD **)(v3 + 444) + 468))(&unk_AA8CE8); } goto LABEL_54; } } v12(0); goto LABEL_36; } *(_DWORD *)(v3 + 352) = a3; LABEL_56: if ( *(_BYTE *)(v3 + 440) ) { v21 = *(_DWORD *)(v3 + 348); v22 = *(_DWORD *)(v3 + 352); *(_BYTE *)(v3 + 440) = 0; if ( v21 == v22 ) { *(_BYTE *)(*(_DWORD *)(v3 + 4 * v21 + 356) + 412) = 0; } else if ( v21 && v22 ) { *(_BYTE *)(*(_DWORD *)(v3 + 4 * v21 + 356) + 412) = 0; *(_BYTE *)(*(_DWORD *)(v3 + 4 * *(_DWORD *)(v3 + 352) + 356) + 412) = 0; sub_4CBCA0(*(_DWORD **)(v3 + 296), *(_DWORD *)(v3 + 348) - 1, *(_BYTE *)(v3 + 352) - 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 468) + 256))(0); *(_DWORD *)(v3 + 352) = 0; *(_DWORD *)(v3 + 348) = 0; } else { *(_BYTE *)(v3 + 440) = 1; } return; case 17: if ( (unsigned int)(a3 - 1) < 0x14 ) { v23 = (const char *)(*(int (**)(void))(**(_DWORD **)(*(_DWORD *)(this + 4 * (a3 - 1) + 360) + 308) + 484))(); v24 = (int)v23; if ( v23 ) { if ( strcmp(v23, (const char *)&unk_A018E2) && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3) ) { sub_8EEE70(*(_DWORD **)(v3 + 296), 129, v24, 0); } } } return; case 18: sub_71ACB0(); return; case 19: if ( byte_B9E5CC ) { if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 516) + 260))() ) { v25 = *(_DWORD *)(v3 + 488); v46 = *(_DWORD **)(v3 + 516); v44 = (void (__thiscall **)(_DWORD *, int))(*v46 + 308); v26 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v25 + 168))(*(_DWORD *)(v3 + 488)); v27 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 168))(v3) + v26; v28 = (*(int (__thiscall **)(int))(*(_DWORD *)v25 + 148))(v25); v29 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v25 + 164))(v25, v27 + v28); v30 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 164))(v3); (*v44)(v46, v30 + v29); v31 = (*(int (**)(void))(**(_DWORD **)(v3 + 488) + 144))(); v32 = (*(int (**)(void))(**(_DWORD **)(v3 + 516) + 148))(); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v3 + 516) + 540))(v31 - 22, v32); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 516)); v33 = *(_DWORD *)(v3 + 516); goto LABEL_78; } sub_8FA190(&unk_BA6B10, *(_DWORD *)(v3 + 516)); } return; case 20: if ( byte_B9E5CC ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 520) + 260))() ) { sub_8FA190(&unk_BA6B10, *(_DWORD *)(v3 + 520)); } else { v34 = *(_DWORD *)(v3 + 492); v47 = *(_DWORD **)(v3 + 520); v45 = (void (__thiscall **)(_DWORD *, int))(*v47 + 308); v35 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v34 + 168))(*(_DWORD *)(v3 + 492)); v36 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 168))(v3) + v35; v37 = (*(int (__thiscall **)(int))(*(_DWORD *)v34 + 148))(v34); v38 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v34 + 164))(v34, v36 + v37); v39 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 164))(v3); (*v45)(v47, v39 + v38); v40 = (*(int (**)(void))(**(_DWORD **)(v3 + 492) + 144))(); v41 = (*(int (**)(void))(**(_DWORD **)(v3 + 520) + 148))(); (*(void (__stdcall **)(int, int))(**(_DWORD **)(v3 + 520) + 540))(v40 - 22, v41); sub_8FA050(&unk_BA6B10, 0, *(_DWORD **)(v3 + 520)); v33 = *(_DWORD *)(v3 + 520); LABEL_78: (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v33 + 520))(v33, 0); } } return; default: return; } } // AA8C68: using guessed type int dword_AA8C68; // B9DC70: using guessed type int dword_B9DC70; // B9DCC4: using guessed type int dword_B9DCC4; // B9E560: using guessed type int dword_B9E560; // B9E5C0: using guessed type int dword_B9E5C0; // B9E5C8: using guessed type int dword_B9E5C8; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (0071D8F0) -------------------------------------------------------- int __thiscall sub_71D8F0(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int *v3; // ebx int v4; // edi const CHAR *v5; // eax int result; // eax int *v7; // ebx int v8; // edi const CHAR *v9; // eax int *v10; // ebx int v11; // edi const CHAR *v12; // eax v2 = this; switch ( a2 ) { case 0u: v3 = (int *)this[124]; v4 = *v3; v5 = sub_40C190(-447790782); (*(void (__thiscall **)(int *, const CHAR *))(v4 + 472))(v3, v5); result = a2; v2[127] = a2; return result; case 1u: v7 = (int *)this[124]; v8 = *v7; v9 = sub_40C190(2024317391); goto LABEL_6; case 2u: v10 = (int *)this[124]; v11 = *v10; v12 = sub_40A910(2040035508); (*(void (__thiscall **)(int *, const CHAR *))(v11 + 472))(v10, v12); result = a2; v2[127] = a2; return result; case 3u: v7 = (int *)this[124]; v8 = *v7; v9 = sub_40A910(743542120); LABEL_6: (*(void (__thiscall **)(int *, const CHAR *))(v8 + 472))(v7, v9); break; default: break; } result = a2; v2[127] = a2; return result; } //----- (0071D9D0) -------------------------------------------------------- int __thiscall sub_71D9D0(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // esi int *v3; // ebx int v4; // edi const CHAR *v5; // eax int result; // eax int *v7; // ebx int v8; // edi const CHAR *v9; // eax int v10; // [esp-Ch] [ebp-10h] int v11; // [esp-Ch] [ebp-10h] v2 = this; switch ( a2 ) { case 0u: v10 = 225928826; goto LABEL_5; case 1u: v11 = 225994362; goto LABEL_7; case 2u: v10 = 226059898; LABEL_5: v3 = (int *)this[125]; v4 = *v3; v5 = sub_4090F0(v10); (*(void (__thiscall **)(int *, const CHAR *))(v4 + 472))(v3, v5); result = a2; v2[128] = a2; return result; case 3u: v11 = 226125434; LABEL_7: v7 = (int *)this[125]; v8 = *v7; v9 = sub_4090F0(v11); (*(void (__thiscall **)(int *, const CHAR *))(v8 + 472))(v7, v9); break; default: break; } result = a2; v2[128] = a2; return result; } //----- (0071DA70) -------------------------------------------------------- _DWORD *__thiscall sub_71DA70(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &ExpeditionPartyWin::`vftable'; v1[58] = &ExpeditionPartyWin::`vftable'; `eh vector constructor iterator'( v1 + 86, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 91, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 96, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 101, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 106, 4u, 50, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 156, 4u, 50, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[206] = 0; v1[207] = 0; v1[208] = 0; `eh vector constructor iterator'( v1 + 214, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); *((_BYTE *)v1 + 836) = 1; v1[212] = 0; v1[220] = 0; v1[221] = 0; v1[222] = 0; v1[223] = 0; v1[224] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A02B60: using guessed type void *ExpeditionPartyWin::`vftable'; // A02B7C: using guessed type void *ExpeditionPartyWin::`vftable'; //----- (0071DBE0) -------------------------------------------------------- char __thiscall sub_71DBE0(_DWORD *this, int a2, int a3) { int v3; // edi int v4; // esi char *v5; // eax _DWORD *v6; // eax int v7; // eax int v8; // esi int v9; // eax volatile LONG *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char result; // al volatile LONG **v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi int v15; // esi int v16; // ebx volatile LONG *v17; // eax volatile LONG *v18; // eax const char *v19; // eax int v20; // eax volatile LONG *v21; // esi volatile LONG *v22; // eax volatile LONG *v23; // eax _DWORD *v24; // eax int v25; // eax int v26; // eax int v27; // ebx volatile LONG **v28; // esi volatile LONG *v29; // eax volatile LONG *v30; // esi int v31; // eax volatile LONG *v32; // ST60_4 volatile LONG *v33; // eax volatile LONG *v34; // eax volatile LONG *v35; // esi int v36; // eax int v37; // esi volatile LONG *v38; // eax volatile LONG *v39; // esi int v40; // eax int v41; // esi bool v42; // zf void (__thiscall ***v43)(_DWORD, signed int); // esi void (__thiscall ***v44)(_DWORD, signed int); // esi int v45; // esi char *v46; // eax void (__thiscall ***v47)(_DWORD, signed int); // esi void (__thiscall ***v48)(_DWORD, signed int); // esi int v49; // esi volatile LONG **v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // ebx volatile LONG *v53; // eax volatile LONG *v54; // ebx int v55; // eax int v56; // ebx volatile LONG **v57; // esi int v58; // eax volatile LONG *v59; // eax volatile LONG *v60; // ecx int v61; // eax const CHAR *v62; // eax int v63; // eax const CHAR *v64; // eax int v65; // eax const CHAR *v66; // eax int v67; // eax const CHAR *v68; // eax int v69; // eax const CHAR *v70; // eax int v71; // eax void (__thiscall ***v72)(_DWORD, signed int); // esi void (__thiscall ***v73)(_DWORD, signed int); // esi int v74; // [esp+78h] [ebp-25Ch] int v75; // [esp+7Ch] [ebp-258h] int v76[5]; // [esp+80h] [ebp-254h] volatile LONG *v77; // [esp+94h] [ebp-240h] volatile LONG *v78; // [esp+98h] [ebp-23Ch] int v79; // [esp+9Ch] [ebp-238h] int v80; // [esp+A0h] [ebp-234h] int v81; // [esp+A4h] [ebp-230h] int v82; // [esp+A8h] [ebp-22Ch] void (__stdcall ***v83)(signed int); // [esp+ACh] [ebp-228h] volatile LONG *v84; // [esp+B0h] [ebp-224h] void (__stdcall ***v85)(signed int); // [esp+B4h] [ebp-220h] volatile LONG *v86; // [esp+B8h] [ebp-21Ch] volatile LONG *v87; // [esp+BCh] [ebp-218h] int v88; // [esp+C0h] [ebp-214h] char v89; // [esp+C4h] [ebp-210h] char v90; // [esp+C5h] [ebp-20Fh] char v91; // [esp+1C4h] [ebp-110h] char v92; // [esp+1C5h] [ebp-10Fh] char v93; // [esp+244h] [ebp-90h] char v94; // [esp+245h] [ebp-8Fh] int v95; // [esp+2D0h] [ebp-4h] v3 = (int)this; v88 = 0; this[74] = a2; v4 = dword_BA6BA0; v95 = 0; if ( !byte_ACAD5C ) sub_420410(); v5 = (char *)sub_401410(byte_ACAB50, "Game\\RaidPartyWin.nif"); sub_8F66B0(v5, (int)&v88, v4); if ( !v88 ) return 0; v6 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v88 + 72))("Panel01"); v7 = sub_85C050(v6, 8); v8 = v7; v79 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v95) = 1; if ( !v9 || (v10 = *(volatile LONG **)(v9 + 4)) == 0 ) { LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v88; v95 = -1; if ( v88 && !InterlockedDecrement((volatile LONG *)(v88 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } return 0; } v13 = sub_8FB140(v88, (int)"Party01Member01NameText", (int)&v85, (int)&v84, v10); if ( sub_8F1440((volatile LONG **)v3, 0, 0, (int)v13, 0, a2, (int)"ExpedtionPartyWin", 0) ) { v15 = (int)v85; v16 = (int)v84; v83 = v85; v77 = v84; sub_456260(v76); LOBYTE(v95) = 2; sub_455FF0(v76, v3); sub_456000(v76, v15, v16); sub_456380(v76, v88); v17 = sub_456820(v76, (int)"Panel01", 0); sub_56FF80((_DWORD *)(v3 + 824), (int)v17); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 824) + 240))(0); v18 = sub_4563D0(v76, 0, (int)"Party01Nor", (int)"Party01Click", (int)"Party01Over", 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v89 = 0; memset(&v90, 0, 0xFFu); v19 = sub_40A910(99996478); sprintf(&v89, v19, a3 + 1); if ( sub_8F71E0(v88, (int)"Party01Member01NameText", &v85, &v84, &v81, &v80) ) { v20 = sub_421050(1); v21 = sub_8F4A20((int)v85, (int)v84, v81, v80, v20, v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v21 + 488))(v21, 5); (*(void (__thiscall **)(volatile LONG *, int *))(*v21 + 468))(v21, &dword_AA8C68); (*(void (__thiscall **)(volatile LONG *, char *))(*v21 + 472))(v21, &v89); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v21 + 240))(v21, 0); sub_4563D0(v76, 1, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v22 = sub_4563D0(v76, 2, (int)"MaxNor", (int)"MaxClick", (int)"MaxOver", 0, 0); sub_56FF80((_DWORD *)(v3 + 832), (int)v22); v23 = sub_4563D0(v76, 3, (int)"MinNor", (int)"MinClick", (int)"MinOver", 0, 0); sub_56FF80((_DWORD *)(v3 + 828), (int)v23); v24 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v88 + 72))("HP_Fighter"); v25 = sub_85C050(v24, 8); sub_56FF80(&v79, v25); v26 = **(_DWORD **)(v79 + 40); if ( v26 ) v78 = *(volatile LONG **)(v26 + 4); else v78 = 0; v82 = 1; v27 = v3 + 404; v86 = (volatile LONG *)5; do { v28 = sub_8FB140(v88, (int)"HP_Fighter", (int)&v85, (int)&v84, v78); sub_8FB650(v28, v88, (int)"HP_Cleric"); sub_8FB650(v28, v88, (int)"HP_Archer"); sub_8FB650(v28, v88, (int)"HP_Mage"); sub_8FB650(v28, v88, (int)"HP_Joker"); sub_8FB650(v28, v88, (int)"HP_Sentinel"); v91 = 0; memset(&v92, 0, 0x7Fu); sprintf(&v91, "%s%.2dName", "Party01Member", v82); v93 = 0; memset(&v94, 0, 0x7Fu); sprintf(&v93, "Party01Member%.2d", v82); sub_8F71E0(v88, (int)&v93, &v85, &v84, &v81, &v80); v29 = sub_8F3EB0((char *)v85 - (char *)v83, (char *)v84 - (char *)v77, (int)v28, v3, 0, 0); v30 = *(volatile LONG **)(v27 - 20); v87 = v29; if ( v30 != v29 ) { if ( v30 && !InterlockedDecrement(v30 + 1) && v30 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v30)(v30, 1); v31 = (int)v87; *(_DWORD *)(v27 - 20) = v87; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); } sub_8F71E0(v88, (int)&v91, &v85, &v84, &v81, &v80); v32 = (volatile LONG *)dword_AD01E8; v33 = (volatile LONG *)sub_421050(1); v34 = sub_90AEF0( (char *)v85 - (char *)v83, (char *)v84 - (char *)v77, v81, v80, v33, (_DWORD *)v3, (int)"2", 0, 0, 1, v32, (volatile LONG *)0x14); v35 = *(volatile LONG **)v27; v87 = v34; if ( v35 != v34 ) { if ( v35 && !InterlockedDecrement(v35 + 1) && v35 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v35)(v35, 1); v36 = (int)v87; *(_DWORD *)v27 = v87; if ( v36 ) InterlockedIncrement((volatile LONG *)(v36 + 4)); } (*(void (__stdcall **)(signed int))(**(_DWORD **)v27 + 488))(4); v37 = (int)v85; v87 = v84; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v27 + 240))(0); v38 = sub_907B30(v37 - 4, (int)(v87 - 3), v81, v80 + 12, v3, 4, 5); v39 = *(volatile LONG **)(v27 - 60); v87 = v38; if ( v39 != v38 ) { if ( v39 && !InterlockedDecrement(v39 + 1) && v39 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v39)(v39, 1); v40 = (int)v87; *(_DWORD *)(v27 - 60) = v87; if ( v40 ) InterlockedIncrement((volatile LONG *)(v40 + 4)); } v41 = v82; (*(void (__stdcall **)(int))(**(_DWORD **)(v27 - 60) + 520))(v82); (*(void (__stdcall **)(int))(**(_DWORD **)(v27 - 60) + 564))(v41); v27 += 4; v42 = v86 == (volatile LONG *)1; v86 = (volatile LONG *)((char *)v86 - 1); v82 = v41 + 1; } while ( !v42 ); *(_DWORD *)(v3 + 844) = (*(int (**)(void))(**(_DWORD **)(v3 + 384) + 144))(); if ( sub_43D0D0(4u) ) { v45 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v46 = (char *)sub_401410(byte_ACAB50, "Game\\BuffDeBuffWin.nif"); sub_8F66B0(v46, (int)&v88, v45); if ( v88 ) { v49 = v3 + 624; v78 = (volatile LONG *)5; do { v82 = 1; v87 = (volatile LONG *)10; do { sub_8F71E0(v88, (int)"CharBuffBox00", &v75, &v74, &v81, &v80); v50 = sub_8FB140(v88, (int)"CharBuffBox00", (int)&v85, (int)&v84, 0); v51 = sub_8F3EB0((int)v85 + v81 * v82 - (_DWORD)v83, (char *)v84 - (char *)v77, (int)v50, v3, 0, 0); v52 = *(volatile LONG **)(v49 - 200); v86 = v51; if ( v52 != v51 ) { if ( v52 ) { if ( !InterlockedDecrement(v52 + 1) && v52 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v52)(v52, 1); v51 = v86; } *(_DWORD *)(v49 - 200) = v51; if ( v51 ) InterlockedIncrement(v51 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v49 - 200) + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v49 - 200) + 256))(0); v53 = sub_5D1B00(v81 * v82 - (_DWORD)v83 + v75 + 2, v74 - (_DWORD)v77 + 2, v81 - 4, v80 - 4, v3, 0); v54 = *(volatile LONG **)v49; v86 = v53; if ( v54 != v53 ) { if ( v54 && !InterlockedDecrement(v54 + 1) && v54 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v54)(v54, 1); v55 = (int)v86; *(_DWORD *)v49 = v86; if ( v55 ) InterlockedIncrement((volatile LONG *)(v55 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v49 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v49 + 256))(0); ++v82; v49 += 4; v87 = (volatile LONG *)((char *)v87 - 1); } while ( v87 ); v78 = (volatile LONG *)((char *)v78 - 1); } while ( v78 ); sub_71BE20((_DWORD **)v3, (_DWORD *)0xA, 0); *(_DWORD *)(v3 + 848) = a3; *(_BYTE *)(v3 + 876) = 0; v56 = 0; v57 = (volatile LONG **)(v3 + 856); do { v58 = sub_43D0D0(1u); v59 = sub_58E5D0(v58, 4, 4, 0); v60 = *v57; v86 = v59; v83 = (void (__stdcall ***)(signed int))v60; if ( v60 != v59 ) { if ( v60 && !InterlockedDecrement(v60 + 1) && v83 ) (**v83)(1); v61 = (int)v86; *v57 = v86; if ( v61 ) InterlockedIncrement((volatile LONG *)(v61 + 4)); } (**((void (__thiscall ***)(_DWORD *, int))*v57 + 58))((_DWORD *)*v57 + 58, v3 + 232); sub_58DFD0(*v57); v62 = sub_40A910(896084029); v63 = sub_58E450((int)v62, 0, 0, 0, 0, 0); *(_DWORD *)(v63 + 332) = 1015; sub_58E080(*v57, v3, v63); v64 = sub_40A910(896283009); v65 = sub_58E450((int)v64, 0, 0, 0, 0, 0); *(_DWORD *)(v65 + 332) = 1016; sub_58E080(*v57, v3, v65); v66 = sub_40A910(895890319); v67 = sub_58E450((int)v66, 0, 0, 0, 0, 0); *(_DWORD *)(v67 + 332) = 1017; sub_58E080(*v57, v3, v67); v68 = sub_40A910(-618847674); v69 = sub_58E450((int)v68, 0, 0, 0, 0, 0); *(_DWORD *)(v69 + 332) = 1018; sub_58E080(*v57, v3, v69); v70 = sub_40A910(-569123870); v71 = sub_58E450((int)v70, 0, 0, 0, 0, 0); *(_DWORD *)(v71 + 332) = 1019; sub_58E080(*v57, v3, v71); sub_58D930(*v57, 0); (*(void (__stdcall **)(_DWORD))(**v57 + 256))(0); sub_71BF50((_DWORD *)v3, v56++, 0); ++v57; } while ( v56 < 5 ); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))( v3, xRight, dword_AC2F78, 0.40000001, 0.5); LOBYTE(v95) = 1; sub_4562E0(v76); v72 = (void (__thiscall ***)(_DWORD, signed int))v79; LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v79 + 4)) ) (**v72)(v72, 1); v73 = (void (__thiscall ***)(_DWORD, signed int))v88; v95 = -1; if ( v88 && !InterlockedDecrement((volatile LONG *)(v88 + 4)) && v73 ) (**v73)(v73, 1); result = 1; } else { LOBYTE(v95) = 1; sub_4562E0(v76); v47 = (void (__thiscall ***)(_DWORD, signed int))v79; LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v79 + 4)) ) (**v47)(v47, 1); v48 = (void (__thiscall ***)(_DWORD, signed int))v88; v95 = -1; if ( !v88 || InterlockedDecrement((volatile LONG *)(v88 + 4)) || !v48 ) return 0; (**v48)(v48, 1); result = 0; } } else { LOBYTE(v95) = 1; sub_4562E0(v76); v43 = (void (__thiscall ***)(_DWORD, signed int))v79; LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v79 + 4)) ) (**v43)(v43, 1); v44 = (void (__thiscall ***)(_DWORD, signed int))v88; v95 = -1; if ( !v88 || InterlockedDecrement((volatile LONG *)(v88 + 4)) || !v44 ) return 0; (**v44)(v44, 1); result = 0; } } else { LOBYTE(v95) = 1; sub_4562E0(v76); LOBYTE(v95) = 0; sub_410C00(&v79); v95 = -1; sub_410C00(&v88); result = 0; } } else { LOBYTE(v95) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v14 = (void (__thiscall ***)(_DWORD, signed int))v88; v95 = -1; if ( !v88 || InterlockedDecrement((volatile LONG *)(v88 + 4)) || !v14 ) return 0; (**v14)(v14, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0071E900) -------------------------------------------------------- _DWORD *__thiscall sub_71E900(char *this, char *a2, int a3, unsigned int *a4, int a5) { _DWORD *result; // eax unsigned int v6; // edi int v7; // esi int v8; // eax int v9; // ebx int v10; // edx void ***v11; // esi double v12; // st7 signed int v13; // eax unsigned int v14; // edx char *v15; // eax char *v16; // ST0C_4 void **v17; // ST18_4 char *v18; // eax char *v19; // eax int v20; // [esp-4h] [ebp-14h] _DWORD *v21; // [esp+4h] [ebp-Ch] int v22; // [esp+8h] [ebp-8h] char *v23; // [esp+Ch] [ebp-4h] int v24; // [esp+18h] [ebp+8h] v23 = this; result = *(_DWORD **)(sub_64F860(a2) + 4); v6 = *a4; if ( !result ) { *a4 = v6; return result; } while ( v6 < 0xA ) { v7 = dword_ACDA80; v21 = (_DWORD *)*result; v8 = result[2]; v9 = *(unsigned __int16 *)(v8 + 20); v22 = v8; if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)dword_ACDA80 + 16))(dword_ACDA80, v9) ) { if ( (unsigned __int16)v9 <= *(_WORD *)(v7 + 200) ) { v10 = *(_DWORD *)(v7 + 196); if ( *(_DWORD *)(v10 + 4 * v9) ) v24 = *(_DWORD *)(v10 + 4 * v9); else v24 = 0; } else { v24 = 0; } } else { v24 = 0; } result = (_DWORD *)v24; if ( *(_BYTE *)(v24 + 526) ) { if ( *((_DWORD *)v23 + 210) - 1 >= v6 ) { if ( *(_DWORD *)(v24 + 522) != a3 ) goto LABEL_24; v11 = (void ***)&v23[4 * (10 * a5 + v6) + 624]; sub_5D0FB0(*v11, *(unsigned __int16 *)(v22 + 20)); v12 = *(float *)(v22 + 36); v13 = (signed int)v12; if ( (unsigned int)(signed int)v12 > 0x927C0 ) { sub_8F2EA0(*v11, (const char *)(v24 + 70)); } else { if ( v13 < 60 ) { v20 = (signed int)v12; v15 = (char *)sub_40C190(-1733121819); } else { v14 = (signed int)((signed int)v12 + ((unsigned __int64)(-2004318071i64 * v13) >> 32)) >> 5; v20 = v14 + (v14 >> 31); v15 = (char *)sub_40C190(-1666406160); } v16 = sub_7549E0(v15, v20); v17 = *v11; v18 = (char *)sub_40C190(-330414800); v19 = sub_7549E0(v18, v24 + 70, "\n\n", v16); sub_8F2EA0(v17, v19); } (*v11)[68] = (void *)dword_AD01E8; (*((void (__cdecl **)(signed int))**v11 + 64))(1); (*((void (__cdecl **)(signed int))**v11 + 60))(1); (*((void (__thiscall **)(void **, signed int))**v11 + 62))(*v11, 1); result = (_DWORD *)(*(int (__stdcall **)(signed int))(**(_DWORD **)&v23[4 * (v6 + 10 * a5) + 424] + 256))(1); } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)&v23[4 * (10 * a5 + v6) + 424] + 256))(0); result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)&v23[4 * (v6 + 10 * a5) + 624] + 256))(0); } ++v6; } LABEL_24: if ( !v21 ) { *a4 = v6; return result; } result = v21; } *a4 = v6; return result; } // 71E900: could not find valid save-restore pair for ebx // 71E900: could not find valid save-restore pair for esi // ACDA80: using guessed type int dword_ACDA80; // AD01E8: using guessed type int dword_AD01E8; //----- (0071EB30) -------------------------------------------------------- void __thiscall sub_71EB30(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // esi signed int v6; // edi int v7; // ecx int v8; // esi signed int v9; // edi const char *v10; // eax int v11; // edi const char *v12; // eax int v13; // eax const CHAR *v14; // eax v3 = this; switch ( a2 ) { case 1: sub_8F86A0(&unk_BA6B10, this); sub_8F28E0(v3); break; case 2: v4 = this[208]; *((_BYTE *)v3 + 836) = 1; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[208] + 256))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[207] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[207] + 256))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[206] + 256))(1); v5 = (int)(v3 + 101); v6 = 5; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)(v5 - 20) + 256))(1); (*(void (__stdcall **)(signed int))(**(_DWORD **)v5 + 256))(1); v5 += 4; --v6; } while ( v6 ); break; case 3: v7 = this[208]; *((_BYTE *)v3 + 836) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v7 + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[208] + 256))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[207] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[207] + 256))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[206] + 256))(0); v8 = (int)(v3 + 101); v9 = 5; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v8 - 20) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0); v8 += 4; --v9; } while ( v9 ); break; case 4: if ( a3 >= 0 && (unsigned int)(a3 - 1) < 0x14 ) { v12 = (const char *)(*(int (**)(void))(*(_DWORD *)this[(a3 - 1) % 5u + 101] + 484))(); if ( v12 ) { if ( strcmp(v12, (const char *)&unk_A019AE) ) { v13 = sub_6645B0(dword_AD8C90, v12); if ( v13 ) { sub_4A7770((_DWORD *)v3[74], v13); } else { v14 = sub_40A910(810253395); sub_492060((_DWORD *)v3[74], (int)v14); } } } } break; case 5: if ( a3 >= 0 && (unsigned int)(a3 - 1) < 5 ) { v10 = (const char *)(*(int (**)(void))(*(_DWORD *)this[(a3 - 1) % 5u + 101] + 484))(); v11 = (int)v10; if ( v10 ) { if ( strcmp(v10, (const char *)&unk_A0198F) && (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 260))(v3) ) sub_8EEE70((_DWORD *)v3[74], 129, v11, 0); } } break; default: return; } } //----- (0071EDF0) -------------------------------------------------------- char __thiscall sub_71EDF0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax char v18; // ST2C_1 int v19; // ST30_4 int v20; // ST34_4 int v21; // ST38_4 const CHAR *v22; // eax volatile LONG *v23; // eax char v24; // ST2C_1 int v25; // ST30_4 int v26; // ST34_4 int v27; // ST38_4 const CHAR *v28; // eax volatile LONG *v29; // eax char v30; // ST2C_1 int v31; // ST30_4 int v32; // ST34_4 int v33; // ST38_4 const CHAR *v34; // eax volatile LONG *v35; // eax char v36; // ST2C_1 int v37; // ST30_4 int v38; // ST34_4 int v39; // ST38_4 const CHAR *v40; // eax volatile LONG *v41; // eax char v42; // ST2C_1 int v43; // ST30_4 int v44; // ST34_4 int v45; // ST38_4 const CHAR *v46; // eax volatile LONG *v47; // eax char v48; // ST2C_1 int v49; // ST30_4 int v50; // ST34_4 int v51; // ST38_4 const CHAR *v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // edi char v55; // ST2C_1 int v56; // ST30_4 int v57; // ST34_4 int v58; // ST38_4 const CHAR *v59; // eax volatile LONG *v60; // eax volatile LONG *v61; // eax volatile LONG *v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // eax volatile LONG **v65; // edi int v66; // ebx char v67; // ST2C_1 int v68; // ST30_4 int v69; // ST34_4 int v70; // ST38_4 const CHAR *v71; // eax volatile LONG *v72; // eax volatile LONG *v73; // ebx volatile LONG *v74; // edi int v75; // eax volatile LONG *v76; // eax int v77; // edi volatile LONG *v78; // ebx const CHAR *v79; // eax volatile LONG *v80; // eax const CHAR *v81; // eax volatile LONG *v82; // eax const CHAR *v83; // eax volatile LONG *v84; // eax const CHAR *v85; // eax volatile LONG *v86; // eax volatile LONG *v87; // eax volatile LONG *v88; // edi volatile LONG *v89; // ebx void (__thiscall ***v90)(_DWORD, signed int); // esi void (__thiscall ***v91)(_DWORD, signed int); // esi int v92[5]; // [esp+50h] [ebp-34h] int v93; // [esp+64h] [ebp-20h] int v94; // [esp+68h] [ebp-1Ch] int v95; // [esp+6Ch] [ebp-18h] int v96; // [esp+70h] [ebp-14h] int v97; // [esp+74h] [ebp-10h] int v98; // [esp+80h] [ebp-4h] volatile LONG *v99; // [esp+8Ch] [ebp+8h] v2 = this; v97 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v98 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\RaidRootOption.nif"); sub_8F66B0(v4, (int)&v97, v3); if ( !v97 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v97 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v93 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v98) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4)) == 0 ) { LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v97; v98 = -1; if ( v97 && !InterlockedDecrement((volatile LONG *)(v97 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v97, (int)"Frame", (int)&v95, (int)&v96, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, a2, (int)"ExpeditionRootOptionWin", 0) ) { v14 = v95; v15 = v96; v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v97, (int)"Theme", (int)&v95, (int)&v96, v16); else v17 = sub_8FB140(v97, (int)"Theme", (int)&v95, (int)&v96, 0); sub_8F3EB0(v95 - v14, v96 - v15, (int)v17, (int)v2, 0, 0); sub_456260(v92); LOBYTE(v98) = 2; sub_455FF0(v92, (int)v2); sub_456000(v92, v14, v15); sub_456380(v92, v97); sub_456820(v92, (int)"Panel01", 0); sub_456820(v92, (int)"Panel02", 0); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = sub_40A910(-1131384712); v23 = sub_456760(v92, (int)"WinTitle", (int)v22, v18, v19, v20, v21, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 1); v24 = dword_AA8C68; v25 = dword_AA8C6C; v26 = dword_AA8C70; v27 = dword_AA8C74; v28 = sub_40A910(1565094507); v29 = sub_456760(v92, (int)"RootItemText01", (int)v28, v24, v25, v26, v27, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v29 + 488))(v29, 1); v30 = dword_AA8C68; v31 = dword_AA8C6C; v32 = dword_AA8C70; v33 = dword_AA8C74; v34 = sub_40A910(1430526062); v35 = sub_456760(v92, (int)"RootItemText02", (int)v34, v30, v31, v32, v33, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v35 + 488))(v35, 1); v36 = dword_AA8C68; v37 = dword_AA8C6C; v38 = dword_AA8C70; v39 = dword_AA8C74; v40 = sub_40A910(1430853678); v41 = sub_456760(v92, (int)"RootItemText03", (int)v40, v36, v37, v38, v39, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v41 + 488))(v41, 1); v42 = dword_AA8C68; v43 = dword_AA8C6C; v44 = dword_AA8C70; v45 = dword_AA8C74; v46 = sub_40A910(1631611526); v47 = sub_456760(v92, (int)"RootItemText04", (int)v46, v42, v43, v44, v45, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v47 + 488))(v47, 1); v48 = dword_AA8C68; v49 = dword_AA8C6C; v50 = dword_AA8C70; v51 = dword_AA8C74; v52 = sub_40A910(1503158659); v53 = sub_456760(v92, (int)"RootItemText05", (int)v52, v48, v49, v50, v51, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v53 + 488))(v53, 1); sub_4563D0(v92, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v54 = sub_4563D0(v92, 7, (int)"BtnNor", (int)"BtnClick", (int)"BtnOver", 0, 0); v55 = dword_AA8C68; v56 = dword_AA8C6C; v57 = dword_AA8C70; v58 = dword_AA8C74; v59 = sub_40A910(1682318900); sub_456040((int)v54, (int)v59, v55, v56, v57, v58, 5); v60 = sub_4563D0(v92, 1, (int)"RootItem01Nor", (int)"RootItem01Click", (int)"RootItem01Over", 0, 0); sub_56FF80(v2 + 88, (int)v60); v61 = sub_4563D0(v92, 2, (int)"RootItem02Nor", (int)"RootItem02Click", (int)"RootItem02Over", 0, 0); sub_56FF80(v2 + 89, (int)v61); v62 = sub_4563D0(v92, 3, (int)"RootItem03Nor", (int)"RootItem03Click", (int)"RootItem03Over", 0, 0); sub_56FF80(v2 + 90, (int)v62); v63 = sub_4563D0(v92, 4, (int)"RootItem04Nor", (int)"RootItem04Click", (int)"RootItem04Over", 0, 0); sub_56FF80(v2 + 91, (int)v63); v64 = sub_4563D0(v92, 5, (int)"RootItem05Nor", (int)"RootItem05Click", (int)"RootItem05Over", 0, 0); sub_56FF80(v2 + 92, (int)v64); v65 = v2 + 93; v94 = 4; do { v66 = (int)*(v65 - 5); v67 = dword_AA8C68; v68 = dword_AA8C6C; v69 = dword_AA8C70; v70 = dword_AA8C74; v71 = sub_40C190(-447790782); v72 = sub_456040(v66, (int)v71, v67, v68, v69, v70, 5); v73 = *v65; v99 = v72; if ( *v65 != v72 ) { if ( v73 ) { if ( !InterlockedDecrement(v73 + 1) && v73 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v73)(v73, 1); v72 = v99; } *v65 = v72; if ( v72 ) InterlockedIncrement(v72 + 1); } v65[5] = 0; ++v65; --v94; } while ( v94 ); v74 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v97 + 72))("HelpLinkNor") ) sub_4563D0(v92, 8, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v74); v75 = sub_43D0D0(1u); v76 = sub_58E5D0(v75, 4, 4, 0); v77 = (int)v2[86]; v78 = v76; if ( (volatile LONG *)v77 != v76 ) { if ( v77 && !InterlockedDecrement((volatile LONG *)(v77 + 4)) && v77 ) (**(void (__thiscall ***)(int, signed int))v77)(v77, 1); v2[86] = v78; if ( v78 ) InterlockedIncrement(v78 + 1); } (**((void (__thiscall ***)(int, int))v2[86] + 58))((int)(v2[86] + 58), (int)(v2 + 58)); sub_58DFD0(v2[86]); v79 = sub_40C190(-447790782); v80 = sub_58E290(v79, 0, 0, 0, 0, 0, 0); *((_DWORD *)v80 + 83) = 1028; sub_58E080(v2[86], v77, (int)v80); v81 = sub_40C190(2024317391); v82 = sub_58E290(v81, 0, 0, 0, 0, 0, 0); *((_DWORD *)v82 + 83) = 1029; sub_58E080(v2[86], v77, (int)v82); v83 = sub_40A910(2040035508); v84 = sub_58E290(v83, 0, 0, 0, 0, 0, 0); *((_DWORD *)v84 + 83) = 1030; sub_58E080(v2[86], v77, (int)v84); v85 = sub_40A910(743542120); v86 = sub_58E290(v85, 0, 0, 0, 0, 0, 0); *((_DWORD *)v86 + 83) = 1032; sub_58E080(v2[86], v77, (int)v86); sub_58D930(v2[86], 0); (*(void (__stdcall **)(_DWORD))(*v2[86] + 256))(0); v87 = sub_456760(v92, (int)"RootName", (int)&unk_A019AF, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); v88 = v2[104]; v89 = v87; if ( v88 != v87 ) { if ( v88 && !InterlockedDecrement(v88 + 1) && v88 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v88)(v88, 1); v2[104] = v89; if ( v89 ) InterlockedIncrement(v89 + 1); } (*(void (__stdcall **)(signed int))(*v2[104] + 488))(1); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.1, 0.30000001); LOBYTE(v98) = 1; sub_4562E0(v92); v90 = (void (__thiscall ***)(_DWORD, signed int))v93; LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v93 + 4)) ) (**v90)(v90, 1); v91 = (void (__thiscall ***)(_DWORD, signed int))v97; v98 = -1; if ( v97 && !InterlockedDecrement((volatile LONG *)(v97 + 4)) && v91 ) (**v91)(v91, 1); result = 1; } else { LOBYTE(v98) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v97; v98 = -1; if ( !v97 || InterlockedDecrement((volatile LONG *)(v97 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0071F6F0) -------------------------------------------------------- void __thiscall sub_71F6F0(int this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // edi _DWORD *v5; // edi int v6; // ebx int v7; // eax int v8; // eax _DWORD *v9; // esi const CHAR *v10; // eax int v11; // ST04_4 int v12; // edi void (__thiscall **v13)(_DWORD *, int); // ST14_4 int v14; // ebx int v15; // ebx int v16; // eax int v17; // ebx int v18; // eax _DWORD *v19; // eax _DWORD *v20; // [esp+14h] [ebp+8h] v3 = (_DWORD *)this; switch ( a2 ) { case 0: v4 = *(_DWORD **)(*(_DWORD *)(this + 296) + 1248); if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v4 + 260))(*(_DWORD *)(*(_DWORD *)(this + 296) + 1248)) ) sub_8F86A0(&unk_BA6B10, v4); sub_8F86A0(&unk_BA6B10, v3); sub_8F28E0(v3); break; case 1: case 2: case 3: case 4: case 5: if ( byte_B9E5CC && !(*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 344) + 260))() ) { v11 = v3[86]; v3[87] = a2 - 1; sub_8FA190(&unk_BA6B10, v11); v12 = v3[v3[87] + 88]; v20 = (_DWORD *)v3[86]; v13 = (void (__thiscall **)(_DWORD *, int))(*v20 + 308); v14 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v12 + 168))(v3[v3[87] + 88]); v15 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 148))(v12) + v14; v16 = (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); v17 = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 164))(v3, v15 + v16); v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 164))(v12); (*v13)(v20, v18 + v17); sub_8FA050(&unk_BA6B10, 0, (_DWORD *)v3[86]); } break; case 7: if ( byte_B9E5CC ) { v5 = *(_DWORD **)(*(_DWORD *)(this + 296) + 1248); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD))(*v5 + 260))(*(_DWORD *)(*(_DWORD *)(this + 296) + 1248)) ) { sub_8F82A0(&unk_BA6B10, v5); v6 = *v5; v7 = (*(int (__thiscall **)(_DWORD *))(*v3 + 168))(v3); v8 = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 164))(v3, v7 + 150); (*(void (__thiscall **)(_DWORD *, int))(v6 + 308))(v5, v8); } } else { v9 = *(_DWORD **)(this + 296); v10 = sub_40A910(-705447408); sub_492060(v9, (int)v10); } break; case 8: v19 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v19 ) sub_4A5170(v19, "RaidRootOption"); break; default: return; } } // B9E5CC: using guessed type char byte_B9E5CC; //----- (0071F9B0) -------------------------------------------------------- char __thiscall sub_71F9B0(_DWORD *this, int a2, int a3, void *a4, int a5, void *a6, void *a7) { _DWORD *v7; // esi _DWORD *v8; // eax int v9; // eax int v10; // edi int v11; // eax void (__thiscall **v12)(_DWORD, signed int); // edx void (__thiscall ***v13)(_DWORD, signed int); // ecx char *v15; // edi char *v16; // ST4C_4 int v17; // ebx char *v18; // eax volatile LONG *v19; // eax int v20; // ecx int v21; // eax char *v22; // eax volatile LONG *v23; // eax int v24; // ecx int v25; // eax char *v26; // eax volatile LONG *v27; // eax int v28; // ecx int v29; // eax char *v30; // eax volatile LONG *v31; // eax int v32; // ecx int v33; // eax char *v34; // eax volatile LONG *v35; // eax int v36; // ecx int v37; // eax char *v38; // eax volatile LONG *v39; // eax int v40; // ecx int v41; // eax char *v42; // eax volatile LONG *v43; // eax volatile LONG *v44; // edi volatile LONG *v45; // ebx int v46; // edi signed int v47; // ebx int (*v48)(void); // edx void *v49; // edi int (*v50)(void); // edx int v51; // ebx int (*v52)(void); // edx int v53; // eax int v54; // ecx int v55; // eax volatile LONG *v56; // eax volatile LONG *v57; // edi volatile LONG *v58; // ebx void *v59; // edx _DWORD *v60; // edi _DWORD *v61; // eax _DWORD *v62; // eax _DWORD *v63; // ebx int v64; // edi float v65; // ST4C_4 float v66; // ST48_4 float v67; // ST44_4 float v68; // ST40_4 int v69; // eax _DWORD *v70; // edi _DWORD *v71; // eax _DWORD *v72; // eax _DWORD *v73; // ebx int v74; // edi int v75; // eax float v76; // ST4C_4 float v77; // ST48_4 float v78; // ST44_4 float v79; // ST40_4 int v80; // eax void *v81; // eax float *v82; // ebx int v83; // edi int v84; // eax float v85; // edx float *v86; // eax float v87; // ecx float v88; // edx float v89; // ecx float *v90; // eax float v91; // edx float v92; // ecx int v93; // eax volatile LONG *v94; // edi volatile LONG *v95; // eax volatile LONG *v96; // edi volatile LONG *v97; // eax int v98; // ecx volatile LONG **v99; // edi volatile LONG *v100; // eax volatile LONG *v101; // edi volatile LONG *v102; // eax void (__thiscall ***v103)(_DWORD, signed int); // esi int v104; // eax volatile LONG *v105; // eax volatile LONG *v106; // edi volatile LONG *v107; // eax volatile LONG *v108; // ST48_4 volatile LONG *v109; // eax volatile LONG *v110; // eax volatile LONG *v111; // edi volatile LONG *v112; // eax volatile LONG **v113; // edi volatile LONG *v114; // eax volatile LONG *v115; // ebx volatile LONG *v116; // edi void (__thiscall ***v117)(_DWORD, signed int); // esi int v118[5]; // [esp+68h] [ebp-260h] int v119; // [esp+7Ch] [ebp-24Ch] void *v120; // [esp+80h] [ebp-248h] int v121; // [esp+84h] [ebp-244h] int v122; // [esp+88h] [ebp-240h] float v123; // [esp+8Ch] [ebp-23Ch] float v124; // [esp+90h] [ebp-238h] float v125; // [esp+94h] [ebp-234h] float v126; // [esp+98h] [ebp-230h] void *v127; // [esp+9Ch] [ebp-22Ch] int v128; // [esp+A0h] [ebp-228h] int v129; // [esp+A4h] [ebp-224h] int v130; // [esp+A8h] [ebp-220h] volatile LONG *v131; // [esp+ACh] [ebp-21Ch] void *v132; // [esp+B0h] [ebp-218h] volatile LONG *v133; // [esp+B4h] [ebp-214h] char v134; // [esp+B8h] [ebp-210h] char v135; // [esp+B9h] [ebp-20Fh] char v136; // [esp+138h] [ebp-190h] char v137; // [esp+139h] [ebp-18Fh] char v138; // [esp+1B8h] [ebp-110h] char v139; // [esp+1B9h] [ebp-10Fh] char v140; // [esp+238h] [ebp-90h] char v141; // [esp+239h] [ebp-8Fh] int v142; // [esp+2C4h] [ebp-4h] v7 = this; v120 = a6; v132 = a4; v127 = a7; if ( !sub_8F2900(this, 0, 0, 1, 1, 0, (int)"EntryIconWin", 0) ) return 0; sub_456260(v118); v142 = 0; sub_455FF0(v118, (int)v7); sub_456380(v118, a2); v136 = 0; memset(&v137, 0, 0x7Fu); v140 = 0; memset(&v141, 0, 0x7Fu); v134 = 0; memset(&v135, 0, 0x7Fu); v138 = 0; memset(&v139, 0, 0x7Fu); v8 = (_DWORD *)(*(int (__thiscall **)(int, const char *))(*(_DWORD *)a2 + 72))(a2, "Frame"); v9 = sub_85C050(v8, 8); v10 = v9; v119 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = **(_DWORD **)(v10 + 40); LOBYTE(v142) = 1; if ( !v11 || !*(_DWORD *)(v11 + 4) ) { LOBYTE(v142) = 0; if ( InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { LABEL_9: v142 = -1; sub_4562E0(v118); return 0; } v12 = *(void (__thiscall ***)(_DWORD, signed int))v10; v13 = (void (__thiscall ***)(_DWORD, signed int))v10; LABEL_8: (*v12)(v13, 1); goto LABEL_9; } v15 = (char *)v132 + 1; v16 = (char *)v132 + 1; v17 = a3 + 1; v7[74] = (char *)v132 + 4 * a3 + a3 + 1; sprintf(&v136, "Party%.2dMember%.2dChief", a3 + 1, v16); sprintf(&v140, "Party%.2dMember%.2dRoot", a3 + 1, v15); sprintf(&v134, "Party%.2dMember%.2dLevel", a3 + 1, v15); sprintf(&v138, "Party%.2dMember%.2dName", a3 + 1, v15); v18 = sub_7549E0("Party%.2dMember%.2d", a3 + 1, v15); v19 = sub_456820(v118, (int)v18, 0); v20 = v7[88]; v131 = v19; v133 = (volatile LONG *)v20; if ( (volatile LONG *)v20 != v19 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v21 = (int)v131; v7[88] = v131; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[88] + 276))(1.0); v22 = sub_7549E0("Party%.2dMember%.2dClassFighter", v17, v15); v23 = sub_456820(v118, (int)v22, 0); v24 = v7[79]; v131 = v23; v133 = (volatile LONG *)v24; if ( (volatile LONG *)v24 != v23 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v25 = (int)v131; v7[79] = v131; if ( v25 ) InterlockedIncrement((volatile LONG *)(v25 + 4)); } v26 = sub_7549E0("Party%.2dMember%.2dClassCleric", v17, v15); v27 = sub_456820(v118, (int)v26, 0); v28 = v7[80]; v131 = v27; v133 = (volatile LONG *)v28; if ( (volatile LONG *)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v29 = (int)v131; v7[80] = v131; if ( v29 ) InterlockedIncrement((volatile LONG *)(v29 + 4)); } v30 = sub_7549E0("Party%.2dMember%.2dClassArcher", v17, v15); v31 = sub_456820(v118, (int)v30, 0); v32 = v7[81]; v131 = v31; v133 = (volatile LONG *)v32; if ( (volatile LONG *)v32 != v31 ) { if ( v32 && !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v33 = (int)v131; v7[81] = v131; if ( v33 ) InterlockedIncrement((volatile LONG *)(v33 + 4)); } v34 = sub_7549E0("Party%.2dMember%.2dClassMage", v17, v15); v35 = sub_456820(v118, (int)v34, 0); v36 = v7[82]; v131 = v35; v133 = (volatile LONG *)v36; if ( (volatile LONG *)v36 != v35 ) { if ( v36 && !InterlockedDecrement((volatile LONG *)(v36 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v37 = (int)v131; v7[82] = v131; if ( v37 ) InterlockedIncrement((volatile LONG *)(v37 + 4)); } v38 = sub_7549E0("Party%.2dMember%.2dClassJoker", v17, v15); v39 = sub_456820(v118, (int)v38, 0); v40 = v7[83]; v131 = v39; v133 = (volatile LONG *)v40; if ( (volatile LONG *)v40 != v39 ) { if ( v40 && !InterlockedDecrement((volatile LONG *)(v40 + 4)) && v133 ) (**(void (__stdcall ***)(signed int))v133)(1); v41 = (int)v131; v7[83] = v131; if ( v41 ) InterlockedIncrement((volatile LONG *)(v41 + 4)); } v42 = sub_7549E0("Party%.2dMember%.2dClassSentinel", v17, v15); v43 = sub_456820(v118, (int)v42, 0); v44 = (volatile LONG *)v7[84]; v45 = v43; if ( v44 != v43 ) { if ( v44 && !InterlockedDecrement(v44 + 1) && v44 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v44)(v44, 1); v7[84] = v45; if ( v45 ) InterlockedIncrement(v45 + 1); } v46 = (int)(v7 + 79); v47 = 6; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v46 + 256))(0); v46 += 4; --v47; } while ( v47 ); v48 = *(int (**)(void))(*(_DWORD *)v7[88] + 164); LOBYTE(v142) = 2; v49 = (void *)v48(); v50 = *(int (**)(void))(*(_DWORD *)v7[88] + 168); v132 = v49; v51 = v50(); v52 = *(int (**)(void))(*(_DWORD *)v7[88] + 144); v130 = v51; v53 = v52(); v54 = v7[88]; v133 = (volatile LONG *)v53; v55 = (*(int (**)(void))(*(_DWORD *)v54 + 148))(); v131 = (volatile LONG *)v55; v56 = sub_907B30((int)v49, v51, (int)v133, v55, (int)v7, (int)v120, (int)v127); v57 = (volatile LONG *)v7[102]; v58 = v56; if ( v57 != v56 ) { if ( v57 && !InterlockedDecrement(v57 + 1) && v57 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v57)(v57, 1); v7[102] = v58; if ( v58 ) InterlockedIncrement(v58 + 1); } v59 = v127; v7[72] = v120; v7[73] = v59; v60 = operator new(0xC4u); v127 = v60; LOBYTE(v142) = 3; if ( v60 ) { v61 = operator new(0x70u); v120 = v61; LOBYTE(v142) = 4; if ( v61 ) { v62 = sub_868440(v61, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v142) = 3; v63 = sub_868C00(v60, (int)v62); } else { LOBYTE(v142) = 3; v63 = sub_868C00(v60, 0); } } else { v63 = 0; } v64 = v7[91]; LOBYTE(v142) = 2; if ( (_DWORD *)v64 != v63 ) { if ( v64 && !InterlockedDecrement((volatile LONG *)(v64 + 4)) && v64 ) (**(void (__thiscall ***)(int, signed int))v64)(v64, 1); v7[91] = v63; if ( v63 ) InterlockedIncrement(v63 + 1); } sub_867880(*(_WORD **)(v7[91] + 184), 4, 0, 0); v65 = (double)(signed int)v131; v66 = (double)(signed int)v133; v67 = (double)v130; v68 = (double)(signed int)v132; sub_867E60(*(_DWORD *)(v7[91] + 184), 0, v68, v67, v66, v65); v69 = v7[91]; v123 = 0.0; v124 = 0.0; v125 = 0.0; v126 = 0.0; sub_867FF0(*(_DWORD *)(v69 + 184), 0, &v123); v70 = operator new(0xC4u); v127 = v70; LOBYTE(v142) = 5; if ( v70 ) { v71 = operator new(0x70u); v120 = v71; LOBYTE(v142) = 6; if ( v71 ) { v72 = sub_868440(v71, 0, 1, 0, 1, 1, 4, 1, 2, 1); LOBYTE(v142) = 5; v73 = sub_868C00(v70, (int)v72); } else { LOBYTE(v142) = 5; v73 = sub_868C00(v70, 0); } } else { v73 = 0; } v74 = v7[90]; LOBYTE(v142) = 2; if ( (_DWORD *)v74 != v73 ) { if ( v74 && !InterlockedDecrement((volatile LONG *)(v74 + 4)) && v74 ) (**(void (__thiscall ***)(int, signed int))v74)(v74, 1); v7[90] = v73; if ( v73 ) InterlockedIncrement(v73 + 1); } sub_867880(*(_WORD **)(v7[90] + 184), 4, 0, 0); v75 = *(_DWORD *)(v7[90] + 184); v76 = (double)((signed int)v131 + 6); v127 = (char *)v133 + 6; v77 = (double)((signed int)v133 + 6); v130 -= 4; v132 = (char *)v132 - 4; v78 = (double)v130; v79 = (double)(signed int)v132; sub_867E60(v75, 0, v79, v78, v77, v76); v80 = v7[90]; v123 = 0.0; v124 = 0.0; v125 = 0.0; v126 = 0.0; sub_867FF0(*(_DWORD *)(v80 + 184), 0, &v123); v81 = operator new(0x60u); v132 = v81; LOBYTE(v142) = 7; if ( v81 ) v82 = sub_85EBC0((float *)v81); else v82 = 0; v83 = v7[93]; LOBYTE(v142) = 2; if ( (float *)v83 != v82 ) { if ( v83 && !InterlockedDecrement((volatile LONG *)(v83 + 4)) && v83 ) (**(void (__thiscall ***)(int, signed int))v83)(v83, 1); v7[93] = v82; if ( v82 ) InterlockedIncrement((volatile LONG *)v82 + 1); } v84 = v7[93]; v124 = 255.0; *(float *)(v84 + 32) = 255.0; v125 = 0.0; ++*(_DWORD *)(v84 + 88); v124 = 255.0; *(float *)(v84 + 36) = v125; v85 = v124; v125 = 0.0; *(float *)(v84 + 40) = 0.0; v126 = 0.0; v86 = (float *)v7[93]; ++*((_DWORD *)v86 + 22); v124 = 255.0; v87 = v125; v86[11] = v85; v88 = v126; v125 = 0.0; v86[12] = v87; v126 = 0.0; v89 = v124; v86[13] = v88; v90 = (float *)v7[93]; ++*((_DWORD *)v90 + 22); v91 = v125; v90[17] = v89; v92 = v126; v90[18] = v91; v90[19] = v92; v93 = v7[93]; ++*(_DWORD *)(v93 + 88); *(float *)(v93 + 84) = 0.0; v94 = (volatile LONG *)v7[93]; v130 = v7[91]; v132 = (void *)v94; if ( v94 ) InterlockedIncrement(v94 + 1); LOBYTE(v142) = 8; sub_8A6330((_DWORD *)(v130 + 156), (int *)&v132); LOBYTE(v142) = 2; if ( v94 && !InterlockedDecrement(v94 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v94)(v94, 1); v95 = (volatile LONG *)operator new(0x20u); v96 = v95; v132 = (void *)v95; LOBYTE(v142) = 9; if ( v95 ) { sub_85B2B0(v95); *v96 = (volatile LONG)&NiAlphaProperty::`vftable'; *((_WORD *)v96 + 14) = 236; *((_BYTE *)v96 + 30) = 0; } else { v96 = 0; } *((_WORD *)v96 + 14) |= 1u; v130 = v7[91]; v132 = (void *)v96; InterlockedIncrement(v96 + 1); LOBYTE(v142) = 10; sub_8A6330((_DWORD *)(v130 + 156), (int *)&v132); LOBYTE(v142) = 2; if ( !InterlockedDecrement(v96 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v96)(v96, 1); v97 = (volatile LONG *)v7[93]; v98 = v7[90]; v133 = v97; v130 = v98; v132 = (void *)v97; if ( v97 ) InterlockedIncrement(v97 + 1); LOBYTE(v142) = 11; sub_8A6330((_DWORD *)(v130 + 156), (int *)&v132); LOBYTE(v142) = 2; if ( v133 && !InterlockedDecrement(v133 + 1) ) (**(void (__stdcall ***)(signed int))v133)(1); v130 = v7[90]; v132 = (void *)v96; InterlockedIncrement(v96 + 1); LOBYTE(v142) = 12; sub_8A6330((_DWORD *)(v130 + 156), (int *)&v132); LOBYTE(v142) = 2; if ( !InterlockedDecrement(v96 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v96)(v96, 1); sub_85C4D0((_DWORD *)v7[90]); sub_85BED0((_DWORD **)v7[90], 0.0, 1); sub_867680(*(_DWORD *)(v7[91] + 184)); sub_85C4D0((_DWORD *)v7[91]); sub_85BED0((_DWORD **)v7[91], 0.0, 1); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v7 + 116))(v7, v7[91], 0); sub_85C4D0(v7); v99 = sub_8FB140(a2, (int)"Chief01", (int)&v128, (int)&v129, 0); sub_8FB650(v99, a2, (int)"Chief02"); sub_8FB650(v99, a2, (int)"Rooter"); sub_8F71E0(a2, (int)&v136, &v128, &v129, &v122, &v121); v100 = sub_8F3EB0(v128, v129, (int)v99, (int)v7, 0, 0); v101 = (volatile LONG *)v7[86]; v132 = (void *)v100; if ( v101 != v100 ) { if ( v101 && !InterlockedDecrement(v101 + 1) && v101 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v101)(v101, 1); v102 = (volatile LONG *)v132; v7[86] = v132; if ( v102 ) InterlockedIncrement(v102 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[86] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[86] + 492))(0); if ( !sub_8F71E0(a2, (int)&v134, &v128, &v129, &v122, &v121) ) goto LABEL_157; v104 = sub_421050(2); v105 = sub_8F4A20(v128, v129, v122, v121, v104, (int)v7, 0, 0); v106 = (volatile LONG *)v7[78]; v132 = (void *)v105; if ( v106 != v105 ) { if ( v106 && !InterlockedDecrement(v106 + 1) && v106 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v106)(v106, 1); v107 = (volatile LONG *)v132; v7[78] = v132; if ( v107 ) InterlockedIncrement(v107 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[78] + 488))(6); (*(void (__stdcall **)(int *))(*(_DWORD *)v7[78] + 468))(&dword_AA8C68); (*(void (__stdcall **)(void *))(*(_DWORD *)v7[78] + 472))(&unk_A01892); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[78] + 240))(0); if ( !sub_8F71E0(a2, (int)&v138, &v128, &v129, &v122, &v121) ) { LABEL_157: v103 = (void (__thiscall ***)(_DWORD, signed int))v119; LOBYTE(v142) = 0; if ( InterlockedDecrement((volatile LONG *)(v119 + 4)) ) goto LABEL_9; v12 = *v103; v13 = v103; goto LABEL_8; } v108 = (volatile LONG *)dword_AD01E8; v109 = (volatile LONG *)sub_421050(2); v110 = sub_90AEF0(v128, v129, v122, v121, v109, v7, 0, 0, 0, 1, v108, (volatile LONG *)0xA); v111 = (volatile LONG *)v7[77]; v132 = (void *)v110; if ( v111 != v110 ) { if ( v111 && !InterlockedDecrement(v111 + 1) && v111 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v111)(v111, 1); v112 = (volatile LONG *)v132; v7[77] = v132; if ( v112 ) InterlockedIncrement(v112 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v7[77] + 488))(4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[77] + 240))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)v7[77] + 472))(&unk_A01893); v113 = sub_8FB140(a2, (int)"Rooter", (int)&v128, (int)&v129, 0); sub_8F71E0(a2, (int)&v140, &v128, &v129, &v122, &v121); v114 = sub_8F3EB0(v128, v129, (int)v113, (int)v7, 0, 0); v115 = (volatile LONG *)v7[87]; v116 = v114; if ( v115 != v114 ) { if ( v115 && !InterlockedDecrement(v115 + 1) && v115 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v115)(v115, 1); v7[87] = v116; if ( v116 ) InterlockedIncrement(v116 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[87] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[87] + 492))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7[86] + 256))(0); (*(void (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v7[87] + 256))(v7[87], 0); v117 = (void (__thiscall ***)(_DWORD, signed int))v119; LOBYTE(v142) = 0; if ( !InterlockedDecrement((volatile LONG *)(v119 + 4)) ) (**v117)(v117, 1); v142 = -1; sub_4562E0(v118); return 1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // AA8C68: using guessed type int dword_AA8C68; // AD01E8: using guessed type int dword_AD01E8; //----- (00720A10) -------------------------------------------------------- int __thiscall sub_720A10(float *this, int a2) { float *v2; // esi int result; // eax char v4; // bl double v5; // st7 float v6; // ST24_4 double v7; // st7 float v8; // ST24_4 float v9; // ST24_4 float v10; // ST24_4 double v11; // st7 float v12; // ST24_4 _DWORD *v13; // ecx float v14; // ST24_4 float v15; // ST24_4 float v16; // ST24_4 float *v17; // eax float v18; // ST24_4 int v19; // edi signed int v20; // ebx float v21; // ST24_4 v2 = this; result = (*(int (__stdcall **)(LONG, LONG))(**((_DWORD **)this + 102) + 332))(pt.x, pt.y); v4 = result; if ( !*((_BYTE *)v2 + 412) ) { sub_71C6B0(v2); v5 = 0.0; if ( v4 ) { if ( v2[75] > 0.0 ) v2[75] = v2[75] - flt_ACCFD0 * 10.0; if ( v2[75] > 0.0 ) goto LABEL_20; (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 102) + 256))(1); if ( v2[76] >= 1.0 ) goto LABEL_20; v6 = flt_ACCFD0 + flt_ACCFD0 + v2[76]; v2[76] = v6; v7 = 0.69999999; if ( v6 > 0.69999999 ) v2[76] = 0.69999999; if ( v2[76] < 0.69999999 ) { v8 = flt_BA45B8 * v2[76]; v9 = sin(v8); v7 = v9; } v10 = v7; v11 = v10; } else if ( v2[76] <= 0.0 ) { (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 102) + 256))(0); v11 = 0.0; } else { v12 = v2[76] - (flt_ACCFD0 + flt_ACCFD0); v2[76] = v12; if ( v12 <= 0.0 ) { v13 = (_DWORD *)*((_DWORD *)v2 + 102); v2[76] = 0.0; v2[75] = 1.0; (*(void (__stdcall **)(_DWORD))(*v13 + 256))(0); v5 = 0.0; } if ( v5 < v2[76] ) { v14 = flt_BA45B8 * v2[76]; v15 = sin(v14); v5 = v15; } v16 = v5; v11 = v16; } v17 = (float *)*((_DWORD *)v2 + 93); ++*((_DWORD *)v17 + 22); v17[21] = v11; LABEL_20: sub_867680(*(_DWORD *)(*((_DWORD *)v2 + 90) + 184)); sub_85C4D0(*((_DWORD **)v2 + 90)); sub_85BED0(*((_DWORD ***)v2 + 90), 0.0, 1); sub_867680(*(_DWORD *)(*((_DWORD *)v2 + 91) + 184)); sub_85C4D0(*((_DWORD **)v2 + 91)); sub_85BED0(*((_DWORD ***)v2 + 91), 0.0, 1); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v2 + 276))(v2, *(float *)(*((_DWORD *)v2 + 93) + 84)); v18 = 1.0 - *(float *)(*((_DWORD *)v2 + 93) + 84); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 88) + 276))(LODWORD(v18)); v19 = (int)(v2 + 79); v20 = 6; do { v21 = 1.0 - *(float *)(*((_DWORD *)v2 + 93) + 84); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v19 + 276))(LODWORD(v21)); v19 += 4; --v20; } while ( v20 ); } return result; } // ACCFD0: using guessed type float flt_ACCFD0; // BA45B8: using guessed type float flt_BA45B8; //----- (00720CB0) -------------------------------------------------------- char __thiscall sub_720CB0(int this, int a2) { char result; // al int v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(*(_DWORD *)(this + 296) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, (volatile LONG *)this); if ( result ) result = sub_517DE0(&unk_BA6B54, v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00720D10) -------------------------------------------------------- volatile LONG *__cdecl sub_720D10(int a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax volatile LONG *v7; // esi void (__thiscall ***v8)(void *, signed int); // edi volatile LONG *result; // eax void *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v6 = operator new(0x1A0u); v10 = v6; v11 = 0; if ( v6 ) v7 = sub_71C560(v6); else v7 = 0; if ( v7 ) InterlockedIncrement(v7 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v7); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v7 + 452))( v7, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v7 + 356))(v7); v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = v7; } else { sub_403A70(&unk_BA6B10, &v10, v7); if ( v10 ) { v8 = (void (__thiscall ***)(void *, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)v10 + 1) ) { if ( v8 ) (**v8)(v8, 1); } } v11 = -1; if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); result = 0; } return result; } //----- (00720E50) -------------------------------------------------------- int __cdecl sub_720E50(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &ExpeditionMemberAddWin::`vftable'; *(_DWORD *)(v2 + 232) = &ExpeditionMemberAddWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A022B8: using guessed type void *ExpeditionMemberAddWin::`vftable'; // A022D4: using guessed type void *ExpeditionMemberAddWin::`vftable'; //----- (00720F90) -------------------------------------------------------- volatile LONG *__cdecl sub_720F90(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x20Cu); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_71CDE0(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (007210C0) -------------------------------------------------------- char __thiscall sub_7210C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // edi int v15; // ebx volatile LONG *v16; // eax volatile LONG **v17; // eax char v18; // ST9C_1 int v19; // STA0_4 int v20; // STA4_4 int v21; // STA8_4 const CHAR *v22; // eax volatile LONG *v23; // eax volatile LONG *v24; // eax int v25; // edi char v26; // ST9C_1 int v27; // STA0_4 int v28; // STA4_4 int v29; // STA8_4 const CHAR *v30; // eax volatile LONG *v31; // eax int v32; // ebx char v33; // ST9C_1 int v34; // STA0_4 int v35; // STA4_4 int v36; // STA8_4 const CHAR *v37; // eax volatile LONG *v38; // eax int v39; // ebx char v40; // ST9C_1 int v41; // STA0_4 int v42; // STA4_4 int v43; // STA8_4 const CHAR *v44; // eax void **v45; // ebx const char *v46; // eax int v47; // edi volatile LONG *v48; // eax void **v49; // ebx const char *v50; // eax volatile LONG *v51; // edi char v52; // ST9C_1 int v53; // STA0_4 int v54; // STA4_4 int v55; // STA8_4 const CHAR *v56; // eax volatile LONG *v57; // eax char v58; // ST9C_1 int v59; // STA0_4 int v60; // STA4_4 int v61; // STA8_4 const CHAR *v62; // eax volatile LONG *v63; // eax volatile LONG *v64; // eax volatile LONG *v65; // eax char v66; // ST9C_1 int v67; // STA0_4 int v68; // STA4_4 int v69; // edi int v70; // STA8_4 const CHAR *v71; // eax volatile LONG *v72; // eax char v73; // ST9C_1 int v74; // STA0_4 int v75; // STA4_4 int v76; // STA8_4 const CHAR *v77; // eax volatile LONG *v78; // eax signed int v79; // ebx int v80; // eax volatile LONG *v81; // eax volatile LONG *v82; // edi volatile LONG *v83; // ebx int v84; // edi const CHAR *v85; // eax volatile LONG *v86; // eax const CHAR *v87; // eax volatile LONG *v88; // eax const CHAR *v89; // eax volatile LONG *v90; // eax const CHAR *v91; // eax volatile LONG *v92; // eax int v93; // eax volatile LONG *v94; // eax volatile LONG *v95; // ebx const CHAR *v96; // eax volatile LONG *v97; // eax const CHAR *v98; // eax volatile LONG *v99; // eax const CHAR *v100; // eax volatile LONG *v101; // eax const CHAR *v102; // eax volatile LONG *v103; // eax signed int v104; // edi char *v105; // STA4_4 char *v106; // STA0_4 char *v107; // eax volatile LONG *v108; // ebx char v109; // ST9C_1 int v110; // STA0_4 int v111; // STA4_4 int v112; // STA8_4 char *v113; // eax char *v114; // eax int v115; // eax volatile LONG *v116; // eax volatile LONG *v117; // edi volatile LONG *v118; // ebx volatile LONG *v119; // edi int v120; // eax volatile LONG *v121; // eax volatile LONG *v122; // edi volatile LONG *v123; // ebx volatile LONG **v124; // edi volatile LONG *v125; // eax volatile LONG *v126; // edi volatile LONG *v127; // ebx volatile LONG **v128; // edi volatile LONG *v129; // eax volatile LONG *v130; // edi volatile LONG *v131; // ebx volatile LONG **v132; // edi volatile LONG *v133; // eax volatile LONG *v134; // edi volatile LONG *v135; // ebx int v136; // STA4_4 int v137; // eax volatile LONG *v138; // eax volatile LONG *v139; // edi volatile LONG *v140; // ebx _DWORD *v141; // ST94_4 volatile LONG *v142; // eax volatile LONG *v143; // eax volatile LONG *v144; // edi volatile LONG *v145; // ebx void (__thiscall ***v146)(_DWORD, signed int); // esi void (__thiscall ***v147)(_DWORD, signed int); // esi int v148[5]; // [esp+C0h] [ebp-50h] int v149; // [esp+D4h] [ebp-3Ch] int v150; // [esp+D8h] [ebp-38h] int v151; // [esp+DCh] [ebp-34h] int v152; // [esp+E0h] [ebp-30h] int v153; // [esp+E4h] [ebp-2Ch] int v154; // [esp+E8h] [ebp-28h] int v155; // [esp+ECh] [ebp-24h] int v156; // [esp+F0h] [ebp-20h] int v157; // [esp+F4h] [ebp-1Ch] int v158; // [esp+F8h] [ebp-18h] int v159; // [esp+FCh] [ebp-14h] int v160; // [esp+100h] [ebp-10h] int v161; // [esp+10Ch] [ebp-4h] volatile LONG *v162; // [esp+118h] [ebp+8h] signed int v163; // [esp+118h] [ebp+8h] volatile LONG **v164; // [esp+118h] [ebp+8h] v2 = this; v160 = 0; this[74] = a2; v3 = dword_BA6BA0; v161 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\RaidWin.nif"); sub_8F66B0(v4, (int)&v160, v3); if ( !v160 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v160 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v149 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v161) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4)) == 0 ) { LOBYTE(v161) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v160; v161 = -1; if ( v160 && !InterlockedDecrement((volatile LONG *)(v160 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v160, (int)"Frame", (int)&v158, (int)&v159, v9); if ( sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, a2, (int)"RaidWin", 0) ) { v14 = v158; v15 = v159; sub_456260(v148); LOBYTE(v161) = 2; sub_455FF0(v148, (int)v2); sub_456000(v148, v14, v15); sub_456380(v148, v160); v16 = (volatile LONG *)sub_43D0D0(0x13u); if ( v16 ) v17 = sub_8FB140(v160, (int)"Theme", (int)&v158, (int)&v159, v16); else v17 = sub_8FB140(v160, (int)"Theme", (int)&v158, (int)&v159, 0); sub_8F3EB0(v158 - v14, v159 - v15, (int)v17, (int)v2, 0, 0); sub_456820(v148, (int)"Plane", 0); sub_456820(v148, (int)"Plane01", 0); v18 = dword_AA8C68; v19 = dword_AA8C6C; v20 = dword_AA8C70; v21 = dword_AA8C74; v22 = sub_40A910(-34088146); v23 = sub_456760(v148, (int)"WinTitle", (int)v22, v18, v19, v20, v21, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v23 + 488))(v23, 1); sub_4563D0(v148, 1, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v24 = sub_4563D0(v148, 5, (int)"OKNor03", (int)"OKClick03", (int)"OKOver03", (int)"OKDisable03", 0); sub_56FF80(v2 + 120, (int)v24); v25 = v2[120]; v26 = dword_AA8C68; v27 = dword_AA8C6C; v28 = dword_AA8C70; v29 = dword_AA8C74; v30 = sub_40A910(-84335310); sub_456040(v25, (int)v30, v26, v27, v28, v29, 5); v31 = sub_4563D0(v148, 3, (int)"OKNor01", (int)"OKClick01", (int)"OKOver01", (int)"OKDisable01", 0); sub_56FF80(v2 + 118, (int)v31); v32 = v2[118]; v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = dword_AA8C70; v36 = dword_AA8C74; v37 = sub_40A910(-219666132); sub_456040(v32, (int)v37, v33, v34, v35, v36, 5); v38 = sub_4563D0(v148, 4, (int)"OKNor02", (int)"OKClick02", (int)"OKOver02", (int)"OKDisable02", 0); sub_56FF80(v2 + 119, (int)v38); v39 = v2[119]; v40 = dword_AA8C68; v41 = dword_AA8C6C; v42 = dword_AA8C70; v43 = dword_AA8C74; v44 = sub_40A910(132437798); sub_456040(v39, (int)v44, v40, v41, v42, v43, 5); *(_DWORD *)(v2[118] + 272) = dword_AD01E8; v45 = (void **)v2[118]; v46 = sub_40A910(-1467626500); sub_8F2EA0(v45, v46); v47 = v2[118]; v150 = 0; v151 = 0; (*(void (__thiscall **)(int, int *, int *))(*(_DWORD *)v47 + 180))(v47, &v150, &v151); v48 = sub_456820(v148, (int)"OKNor01", 0); sub_56FF80(v2 + 121, (int)v48); (*(void (__stdcall **)(int, int))(*(_DWORD *)v2[121] + 308))(v150, v151); *(_DWORD *)(v2[121] + 272) = dword_AD01E8; v49 = (void **)v2[121]; v50 = sub_40A910(-1467626500); sub_8F2EA0(v49, v50); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[121] + 276))(0.0); (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v2[121] + 256))(v2[121], 1); v51 = (volatile LONG *)sub_43D0D0(4u); if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v160 + 72))("HelpLinkNor") ) sub_4563D0(v148, 18, (int)"HelpLinkNor", (int)"HelpLinkOver", (int)"HelpLinkClick", 0, v51); v52 = dword_AA8C68; v53 = dword_AA8C6C; v54 = dword_AA8C70; v55 = dword_AA8C74; v56 = sub_4090F0(-1802407183); v57 = sub_456760(v148, (int)"GainMethod", (int)v56, v52, v53, v54, v55, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v57 + 488))(v57, 4); v58 = dword_AA8C68; v59 = dword_AA8C6C; v60 = dword_AA8C70; v61 = dword_AA8C74; v62 = sub_4090F0(-817367251); v63 = sub_456760(v148, (int)"ItemGrade", (int)v62, v58, v59, v60, v61, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v63 + 488))(v63, 4); v64 = sub_4563D0(v148, 19, (int)"GainMethodNor", (int)"GainMethodClick", (int)"GainMethodOver", 0, 0); sub_56FF80(v2 + 122, (int)v64); v65 = sub_4563D0(v148, 20, (int)"ItemGradeNor", (int)"ItemGradeClick", (int)"ItemGradeOver", 0, 0); sub_56FF80(v2 + 123, (int)v65); v66 = dword_AA8C68; v67 = dword_AA8C6C; v68 = dword_AA8C70; v69 = (int)(v2 + 124); v70 = dword_AA8C74; v71 = sub_40C190(-447790782); v72 = sub_456760(v148, (int)"GainMethod_Text", (int)v71, v66, v67, v68, v70, 5); sub_56FF80(v2 + 124, (int)v72); v73 = dword_AA8C68; v74 = dword_AA8C6C; v75 = dword_AA8C70; v76 = dword_AA8C74; v77 = sub_4090F0(225928826); v78 = sub_456760(v148, (int)"ItemGrade_Text", (int)v77, v73, v74, v75, v76, 5); sub_56FF80(v2 + 125, (int)v78); v79 = 2; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v69 + 488))(4); v69 += 4; --v79; } while ( v79 ); v2[127] = 0; v2[128] = 0; v80 = sub_43D0D0(1u); v81 = sub_58E5D0(v80, 4, 4, 0); v82 = (volatile LONG *)v2[129]; v83 = v81; if ( v82 != v81 ) { if ( v82 && !InterlockedDecrement(v82 + 1) && v82 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v82)(v82, 1); v2[129] = v83; if ( v83 ) InterlockedIncrement(v83 + 1); } v84 = (int)(v2 + 58); (**(void (__thiscall ***)(int, int))(v2[129] + 232))(v2[129] + 232, (int)(v2 + 58)); sub_58DFD0((_DWORD *)v2[129]); v85 = sub_40C190(-447790782); v86 = sub_58E290(v85, 0, 0, 0, 0, 0, 0); *((_DWORD *)v86 + 83) = 1028; sub_58E080((_DWORD *)v2[129], (int)(v2 + 58), (int)v86); v87 = sub_40C190(2024317391); v88 = sub_58E290(v87, 0, 0, 0, 0, 0, 0); *((_DWORD *)v88 + 83) = 1029; sub_58E080((_DWORD *)v2[129], (int)(v2 + 58), (int)v88); v89 = sub_40A910(2040035508); v90 = sub_58E290(v89, 0, 0, 0, 0, 0, 0); *((_DWORD *)v90 + 83) = 1030; sub_58E080((_DWORD *)v2[129], (int)(v2 + 58), (int)v90); v91 = sub_40A910(743542120); v92 = sub_58E290(v91, 0, 0, 0, 0, 0, 0); *((_DWORD *)v92 + 83) = 1032; sub_58E080((_DWORD *)v2[129], (int)(v2 + 58), (int)v92); sub_58D930((_DWORD *)v2[129], 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[129] + 256))(0); v93 = sub_43D0D0(1u); v94 = sub_58E5D0(v93, 4, 4, 0); v95 = (volatile LONG *)v2[130]; v162 = v94; if ( v95 != v94 ) { if ( v95 && !InterlockedDecrement(v95 + 1) && v95 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v95)(v95, 1); v2[130] = v162; if ( v162 ) InterlockedIncrement(v162 + 1); } (**(void (__thiscall ***)(int, int))(v2[130] + 232))(v2[130] + 232, (int)(v2 + 58)); sub_58DFD0((_DWORD *)v2[130]); v96 = sub_4090F0(225928826); v97 = sub_58E290(v96, 0, 0, 0, 0, 0, 0); *((_DWORD *)v97 + 83) = 1038; sub_58E080((_DWORD *)v2[130], v84, (int)v97); v98 = sub_4090F0(225994362); v99 = sub_58E290(v98, 0, 0, 0, 0, 0, 0); *((_DWORD *)v99 + 83) = 1039; sub_58E080((_DWORD *)v2[130], v84, (int)v99); v100 = sub_4090F0(226059898); v101 = sub_58E290(v100, 0, 0, 0, 0, 0, 0); *((_DWORD *)v101 + 83) = 1040; sub_58E080((_DWORD *)v2[130], v84, (int)v101); v102 = sub_4090F0(226125434); v103 = sub_58E290(v102, 0, 0, 0, 0, 0, 0); *((_DWORD *)v103 + 83) = 1041; sub_58E080((_DWORD *)v2[130], v84, (int)v103); sub_58D930((_DWORD *)v2[130], 0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[130] + 256))(0); v104 = 1; v163 = 4; do { v105 = sub_7549E0("Party%.2dOver", v104); v106 = sub_7549E0("Party%.2dClick", v104); v107 = sub_7549E0("Party%.2dNor", v104); v108 = sub_4563D0(v148, v104 + 6, (int)v107, (int)v106, (int)v105, 0, 0); v109 = dword_AA8C68; v110 = dword_AA8C6C; v111 = dword_AA8C70; v112 = dword_AA8C74; v113 = (char *)sub_40A910(99996478); v114 = sub_7549E0(v113, v104); sub_456040((int)v108, (int)v114, v109, v110, v111, v112, 5); ++v104; --v163; } while ( v163 ); v152 = 0; v115 = (int)(v2 + 90); do { v153 = 0; v164 = (volatile LONG **)v115; do { v116 = sub_720D10(v160, v152, v153, (int)v2, 16, 17); v117 = *v164; v118 = v116; if ( *v164 != v116 ) { if ( v117 && !InterlockedDecrement(v117 + 1) && v117 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v117)(v117, 1); *v164 = v118; if ( v118 ) InterlockedIncrement(v118 + 1); } v119 = *v164; if ( *v164 ) { v120 = (*(int (__thiscall **)(volatile LONG *))(*v119 + 4))(*v164); if ( v120 ) { while ( (_UNKNOWN *)v120 != &unk_BA6A8C ) { v120 = *(_DWORD *)(v120 + 4); if ( !v120 ) goto LABEL_60; } (*(void (__thiscall **)(_DWORD *, volatile LONG *, _DWORD))(*v2 + 116))(v2, v119, 0); sub_85C4D0(v2); sub_85BED0((_DWORD **)v2, 0.0, 1); } } LABEL_60: ++v164; ++v153; } while ( v153 < 5 ); v115 = (int)v164; ++v152; } while ( v152 < 4 ); v121 = sub_456820(v148, (int)"Party01Member01", 0); v122 = (volatile LONG *)v2[117]; v123 = v121; if ( v122 != v121 ) { if ( v122 && !InterlockedDecrement(v122 + 1) && v122 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v122)(v122, 1); v2[117] = v123; if ( v123 ) InterlockedIncrement(v123 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[117] + 256))(0); sub_8F71E0(v160, (int)"Party01Member01", &v158, &v159, &v156, &v157); v124 = sub_8FB140(v160, (int)"Chief01", (int)&v158, (int)&v159, 0); sub_8FB650(v124, v160, (int)"Chief02"); sub_8F71E0(v160, (int)"Party01Member01Chief", &v154, &v155, &v156, &v157); v125 = sub_8F3EB0(v158, v159, (int)v124, v2[117], 0, 0); v126 = (volatile LONG *)v2[114]; v127 = v125; if ( v126 != v125 ) { if ( v126 && !InterlockedDecrement(v126 + 1) && v126 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v126)(v126, 1); v2[114] = v127; if ( v127 ) InterlockedIncrement(v127 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[114] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[114] + 492))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[114] + 256))(0); v128 = sub_8FB140(v160, (int)"Rooter", (int)&v158, (int)&v159, 0); sub_8F71E0(v160, (int)"Party01Member01Root", &v158, &v159, &v156, &v157); v129 = sub_8F3EB0(v158 - v154, v159 - v155, (int)v128, v2[117], 0, 0); v130 = (volatile LONG *)v2[115]; v131 = v129; if ( v130 != v129 ) { if ( v130 && !InterlockedDecrement(v130 + 1) && v130 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v130)(v130, 1); v2[115] = v131; if ( v131 ) InterlockedIncrement(v131 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[115] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[115] + 492))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[115] + 256))(0); v132 = sub_8FB140(v160, (int)"Party01Member01ClassFighter", (int)&v158, (int)&v159, 0); sub_8FB650(v132, v160, (int)"Party01Member01ClassCleric"); sub_8FB650(v132, v160, (int)"Party01Member01ClassArcher"); sub_8FB650(v132, v160, (int)"Party01Member01ClassMage"); sub_8FB650(v132, v160, (int)"Party01Member01ClassJoker"); sub_8FB650(v132, v160, (int)"Party01Member01ClassSentinel"); sub_8F71E0(v160, (int)"Party01Member01Level", &v158, &v159, &v156, &v157); v133 = sub_8F3EB0(v158 - v154, v159 - v155, (int)v132, v2[117], 0, 0); v134 = (volatile LONG *)v2[116]; v135 = v133; if ( v134 != v133 ) { if ( v134 && !InterlockedDecrement(v134 + 1) && v134 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v134)(v134, 1); v2[116] = v135; if ( v135 ) InterlockedIncrement(v135 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[116] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[116] + 492))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[116] + 256))(0); v136 = v2[117]; v137 = sub_421050(2); v138 = sub_8F4A20(v158 - v154, v159 - v155, v156, v157, v137, v136, 0, 0); v139 = (volatile LONG *)v2[112]; v140 = v138; if ( v139 != v138 ) { if ( v139 && !InterlockedDecrement(v139 + 1) && v139 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v139)(v139, 1); v2[112] = v140; if ( v140 ) InterlockedIncrement(v140 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[112] + 488))(6); (*(void (__stdcall **)(int *))(*(_DWORD *)v2[112] + 468))(&dword_AA8C68); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[112] + 240))(0); sub_8F71E0(v160, (int)"Party01Member01Name", &v158, &v159, &v156, &v157); v141 = (_DWORD *)v2[117]; v142 = (volatile LONG *)sub_421050(2); v143 = sub_90AEF0(v158 - v154, v159 - v155, v156, v157, v142, v141, 0, 0, 0, 1, 0, (volatile LONG *)0xA); v144 = (volatile LONG *)v2[111]; v145 = v143; if ( v144 != v143 ) { if ( v144 && !InterlockedDecrement(v144 + 1) && v144 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v144)(v144, 1); v2[111] = v145; if ( v145 ) InterlockedIncrement(v145 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[111] + 488))(4); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[111] + 240))(0); (*(void (__thiscall **)(_DWORD *, int, int, _DWORD, _DWORD))(*v2 + 236))(v2, xRight, dword_AC2F78, 0.1, 0.40000001); LOBYTE(v161) = 1; sub_4562E0(v148); v146 = (void (__thiscall ***)(_DWORD, signed int))v149; LOBYTE(v161) = 0; if ( !InterlockedDecrement((volatile LONG *)(v149 + 4)) ) (**v146)(v146, 1); v147 = (void (__thiscall ***)(_DWORD, signed int))v160; v161 = -1; if ( v160 && !InterlockedDecrement((volatile LONG *)(v160 + 4)) && v147 ) (**v147)(v147, 1); result = 1; } else { LOBYTE(v161) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v160; v161 = -1; if ( !v160 || InterlockedDecrement((volatile LONG *)(v160 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00722180) -------------------------------------------------------- volatile LONG *__cdecl sub_722180(int a1, int a2) { _DWORD *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x384u); v6 = v2; v7 = 0; if ( v2 ) v3 = sub_71DA70(v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (00722520) -------------------------------------------------------- void __thiscall sub_722520(int this, int a2, int a3) { int v3; // esi signed int v4; // eax _DWORD *v5; // edi const char *v6; // eax char *v7; // [esp+10h] [ebp-40h] int v8; // [esp+20h] [ebp-30h] unsigned int v9; // [esp+24h] [ebp-2Ch] char v10[4]; // [esp+2Ch] [ebp-24h] int v11; // [esp+30h] [ebp-20h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+38h] [ebp-18h] int v14; // [esp+3Ch] [ebp-14h] int v15; // [esp+4Ch] [ebp-4h] v3 = this; if ( a2 ) { if ( a2 == 3 ) { sub_71C150((_DWORD *)this); } else if ( a2 == 4 ) { v4 = sub_464F50(*(_DWORD **)(this + 348)); if ( v4 >= 0 ) { v5 = sub_4650C0(*(_DWORD **)(v3 + 348), v4, 0); v9 = 15; v8 = 0; LOBYTE(v7) = 0; sub_4018E0(&v7, v5, strlen((const char *)v5)); v6 = v7; v15 = 0; if ( v9 < 0x10 ) v6 = (const char *)&v7; v14 = 0; v13 = 0; v12 = 0; v11 = 0; *(_DWORD *)v10 = 0; strncpy(v10, v6, 0x14u); sub_4CC200(*(_DWORD **)(v3 + 296), *(int *)v10, v11, v12, v13, v14); sub_8F86A0(&unk_BA6B10, (_DWORD *)v3); sub_8F28E0((_BYTE *)v3); if ( v9 >= 0x10 ) operator delete(v7); } } } else { sub_8F86A0(&unk_BA6B10, (_DWORD *)this); sub_8F28E0((_BYTE *)v3); } } //----- (00722670) -------------------------------------------------------- void __thiscall sub_722670(char *this, int a2) { char *v2; // esi int *v3; // ebx int v4; // edi char v5; // al bool v6; // al void (__stdcall *v7)(signed int); // edx unsigned int v8; // eax int v9; // edi int v10; // eax int v11; // eax int v12; // ebx int v13; // edi _DWORD *v14; // edx int v15; // eax int v16; // eax int v17; // edi signed int v18; // ebx signed int v19; // esi int *v20; // esi void *v21; // ebx int v22; // esi char *v23; // edi void (__stdcall *v24)(int *, int *); // edx int v25; // ecx int v26; // eax int *v27; // ebx int v28; // edi char *v29; // eax int v30; // eax char v31; // al int v32; // ecx bool v33; // zf int *v34; // [esp+0h] [ebp-58h] void *v35; // [esp+10h] [ebp-48h] int v36; // [esp+14h] [ebp-44h] int v37; // [esp+18h] [ebp-40h] char *v38; // [esp+20h] [ebp-38h] int *v39; // [esp+24h] [ebp-34h] int v40; // [esp+28h] [ebp-30h] int v41; // [esp+2Ch] [ebp-2Ch] int v42; // [esp+30h] [ebp-28h] int v43; // [esp+34h] [ebp-24h] int v44; // [esp+38h] [ebp-20h] int v45; // [esp+3Ch] [ebp-1Ch] int v46; // [esp+40h] [ebp-18h] char v47; // [esp+44h] [ebp-14h] int v48; // [esp+54h] [ebp-4h] v2 = this; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)this + 260))() ) goto LABEL_14; if ( !v2[344] ) { if ( sub_718A50(&dword_B9E560) || !(unsigned __int8)sub_6C1560(&dword_B9DC70) ) (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 118) + 240))(0); else (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 118) + 240))(1); v3 = (int *)*((_DWORD *)v2 + 121); v4 = *v3; v5 = (*(int (**)(void))(**((_DWORD **)v2 + 118) + 244))(); (*(void (__thiscall **)(int *, bool))(v4 + 240))(v3, v5 == 0); if ( byte_B9E5CC || byte_B9E5CD ) (*(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 120) + 240))(1); else (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 120) + 240))(0); v6 = sub_718A50(&dword_B9E560); v7 = *(void (__stdcall **)(signed int))(**((_DWORD **)v2 + 119) + 240); if ( v6 ) v7(1); else v7(0); LABEL_14: if ( !v2[344] ) goto LABEL_19; } v8 = *((_DWORD *)v2 + 89); if ( v8 < 4 ) { v9 = *(_DWORD *)(*((_DWORD *)v2 + 74) + 4 * v8 + 1224); if ( v9 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v9 + 260))(v9) ) { v10 = sub_46D800(); (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v9 + 308))( v9, *(_DWORD *)(v10 + 52), *(_DWORD *)(v10 + 56)); } } } LABEL_19: if ( v2[440] ) { v11 = sub_46D800(); v12 = *(_DWORD *)(v11 + 52); v13 = *(_DWORD *)(v11 + 56); v14 = *(_DWORD **)v2; v39 = (int *)*((_DWORD *)v2 + 117); v41 = *v39 + 308; v15 = ((int (__thiscall *)(char *))v14[42])(v2); v16 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v2 + 164))(v2, v13 - v15 + 5); (*(void (__thiscall **)(int *, int))v41)(v39, v12 - v16); } v41 = (int)(v2 + 360); v17 = (int)(v2 + 360); v40 = 4; do { v18 = 5; do { (*(void (__stdcall **)(void *))(**(_DWORD **)(*(_DWORD *)v17 + 308) + 472))(&unk_A018E3); (*(void (__stdcall **)(void *))(**(_DWORD **)(*(_DWORD *)v17 + 312) + 472))(&unk_A0194F); v19 = 316; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v19 + *(_DWORD *)v17) + 256))(0); v19 += 4; } while ( v19 < 340 ); v17 += 4; --v18; } while ( v18 ); --v40; } while ( v40 ); v20 = dword_B9E5E4; v39 = dword_B9E5E4; v40 = v41; do { if ( *v20 != v20[1] ) { sub_442B90((char **)&v35, (char **)v20); v21 = v35; v48 = 0; if ( (v36 - (signed int)v35) / 68 ) { v22 = v40; v23 = (char *)v35 + 24; v38 = (char *)v35 + 24; v41 = (v36 - (signed int)v35) / 68; do { v24 = *(void (__stdcall **)(int *, int *))(**(_DWORD **)(*(_DWORD *)v22 + 312) + 468); if ( *(v23 - 4) ) { v24(&dword_AA8C68, v34); v34 = &dword_AA8C68; } else { v24((int *)&unk_AA8CE8, v34); v34 = (int *)&unk_AA8CE8; } (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)v22 + 308) + 468))(); v25 = *(_DWORD *)v23; v26 = *(_DWORD *)v22; if ( *(_DWORD *)v23 ) { v27 = *(int **)(v26 + 312); v28 = *v27; v29 = sub_7549E0("%d", v25); (*(void (__thiscall **)(int *, char *))(v28 + 472))(v27, v29); v23 = v38; v21 = v35; } else { (*(void (__stdcall **)(const char *))(**(_DWORD **)(v26 + 312) + 472))("?"); } v42 = *((_DWORD *)v23 - 6); v43 = *((_DWORD *)v23 - 5); v44 = *((_DWORD *)v23 - 4); v30 = *(_DWORD *)v22; v45 = *((_DWORD *)v23 - 3); v46 = *((_DWORD *)v23 - 2); v47 = 0; (*(void (__stdcall **)(int *))(**(_DWORD **)(v30 + 308) + 472))(&v42); switch ( v23[28] ) { case 1: case 2: case 3: case 4: case 5: v31 = 1; break; case 6: case 7: case 8: case 9: case 0xA: v31 = 6; break; case 0xB: case 0xC: case 0xD: case 0xE: case 0xF: v31 = 11; break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: v31 = 16; break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: v31 = 21; break; case 0x1A: case 0x1B: v31 = 26; break; default: v31 = 0; break; } switch ( v31 ) { case 1: v32 = *(_DWORD *)(*(_DWORD *)v22 + 316); goto LABEL_52; case 6: v32 = *(_DWORD *)(*(_DWORD *)v22 + 320); goto LABEL_52; case 0xB: v32 = *(_DWORD *)(*(_DWORD *)v22 + 324); goto LABEL_52; case 0x10: v32 = *(_DWORD *)(*(_DWORD *)v22 + 328); goto LABEL_52; case 0x15: v32 = *(_DWORD *)(*(_DWORD *)v22 + 332); goto LABEL_52; case 0x1A: v32 = *(_DWORD *)(*(_DWORD *)v22 + 336); LABEL_52: (*(void (__stdcall **)(signed int))(*(_DWORD *)v32 + 256))(1); break; default: break; } v23 += 68; v22 += 4; v33 = v41-- == 1; v38 = v23; } while ( !v33 ); v20 = v39; } v48 = -1; if ( v21 ) operator delete(v21); v35 = 0; v36 = 0; v37 = 0; } v40 += 20; v20 += 4; v39 = v20; } while ( (signed int)v20 < (signed int)&unk_B9E624 ); } // AA8C68: using guessed type int dword_AA8C68; // B9DC70: using guessed type int dword_B9DC70; // B9E560: using guessed type int dword_B9E560; // B9E5CC: using guessed type char byte_B9E5CC; // B9E5CD: using guessed type char byte_B9E5CD; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (00722B30) -------------------------------------------------------- void __thiscall sub_722B30(char *this, int a2) { int v2; // ebx _DWORD **v3; // esi signed int v4; // edi _DWORD *v5; // eax char *v6; // edi int v7; // edi signed int *v8; // esi unsigned int v9; // eax int v10; // ecx void (__stdcall *v11)(int *); // edx double v12; // st7 char v13; // al int *v14; // eax int v15; // ecx int v16; // edx int v17; // eax signed int v18; // edx char *v19; // eax int *v20; // eax int v21; // eax int v22; // esi int v23; // edx int v24; // eax int v25; // edx int v26; // eax bool v27; // zf int v28; // esi int v29; // eax int v30; // ecx unsigned int v31; // eax int **v32; // esi signed int v33; // edx int v34; // eax int v35; // edx int v36; // edx int v37; // ebx int v38; // eax int v39; // edx int v40; // ebx int v41; // eax char *v42; // esi void *v43; // [esp+10h] [ebp-78h] int v44; // [esp+14h] [ebp-74h] int v45; // [esp+24h] [ebp-64h] int v46; // [esp+28h] [ebp-60h] int v47; // [esp+2Ch] [ebp-5Ch] int v48; // [esp+30h] [ebp-58h] int v49; // [esp+34h] [ebp-54h] unsigned int v50; // [esp+38h] [ebp-50h] int v51; // [esp+3Ch] [ebp-4Ch] __int64 v52; // [esp+40h] [ebp-48h] char *v53; // [esp+48h] [ebp-40h] int v54; // [esp+4Ch] [ebp-3Ch] char *v55; // [esp+50h] [ebp-38h] int v56; // [esp+54h] [ebp-34h] int *v57; // [esp+58h] [ebp-30h] unsigned int v58; // [esp+5Ch] [ebp-2Ch] int v59; // [esp+60h] [ebp-28h] int v60; // [esp+64h] [ebp-24h] int v61; // [esp+68h] [ebp-20h] int v62; // [esp+6Ch] [ebp-1Ch] int v63; // [esp+70h] [ebp-18h] char v64; // [esp+74h] [ebp-14h] int v65; // [esp+84h] [ebp-4h] v2 = (int)this; v27 = this[876] == 0; v53 = this; if ( !v27 && *((_DWORD *)this + 213) != 5 ) { (*(void (__stdcall **)(char **, int *))(*(_DWORD *)this + 180))(&v55, &v56); if ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 852) + 856) + 260))() ) { (*(void (__stdcall **)(char *, int))(**(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 852) + 856) + 308))(v55 + 100, v56); sub_8FA050(&unk_BA6B10, v2, *(_DWORD **)(v2 + 4 * *(_DWORD *)(v2 + 852) + 856)); } *(_BYTE *)(v2 + 876) = 0; } v55 = (char *)(v2 + 404); v3 = (_DWORD **)(v2 + 424); v57 = (int *)5; do { v4 = 10; do { (*(void (__stdcall **)(_DWORD))(**v3 + 256))(0); (*(void (__stdcall **)(_DWORD))(**v3 + 240))(0); (*(void (__stdcall **)(_DWORD))(**v3 + 248))(0); (*(void (__stdcall **)(_DWORD))(*v3[50] + 256))(0); v5 = v3[50]; ++v3; --v4; *((_BYTE *)v5 + 382) = 0; } while ( v4 ); v6 = v55; (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v55 - 5) + 256))(0); (*(void (__stdcall **)(void *))(**(_DWORD **)v6 + 472))(&unk_A0198E); v27 = v57 == (int *)1; v57 = (int *)((char *)v57 - 1); v55 = v6 + 4; } while ( !v27 ); if ( *(_BYTE *)(v2 + 836) ) { sub_442B90((char **)&v43, (char **)&dword_B9E5E4[4 * *(_DWORD *)(v2 + 848)]); v7 = 0; v65 = 0; v50 = (v44 - (signed int)v43) / 68; if ( v50 ) { while ( 1 ) { v8 = (signed int *)((char *)v43 + 68 * v7); if ( !*((_DWORD *)v43 + 17 * v7 + 7) ) break; v12 = (double)v8[7] / (double)v8[9] * (double)*(unsigned int *)(v2 + 844); v56 = HIWORD(v58) | 0xC00; v52 = (signed __int64)v12; v9 = (signed __int64)v12; if ( v9 >= 1 ) goto LABEL_14; v9 = 1; LABEL_16: (*(void (__stdcall **)(unsigned int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 468))(v9); v59 = *v8; v60 = v8[1]; v61 = v8[2]; v62 = v8[3]; v10 = *(_DWORD *)(v2 + 4 * v7 + 404); v63 = v8[4]; v64 = 0; v11 = *(void (__stdcall **)(int *))(*(_DWORD *)v10 + 468); if ( *((_BYTE *)v8 + 20) ) v11(&dword_AA8C68); else v11((int *)&unk_AA8CE8); (*(void (__stdcall **)(int *))(**(_DWORD **)(v2 + 4 * v7 + 404) + 472))(&v59); switch ( *((unsigned __int8 *)v8 + 52) ) { case 1u: case 2u: case 3u: case 4u: case 5u: v13 = 1; break; case 6u: case 7u: case 8u: case 9u: case 0xAu: v13 = 6; break; case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: v13 = 11; break; case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x14u: v13 = 16; break; case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x19u: v13 = 21; break; case 0x1Au: case 0x1Bu: v13 = 26; break; default: v13 = 0; break; } switch ( v13 ) { case 1: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(0); break; case 6: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(1); break; case 0xB: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(2); break; case 0x10: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(3); break; case 0x15: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(4); break; case 0x1A: (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 492))(5); break; default: break; } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 4 * v7 + 384) + 256))(1); v54 = 0; v14 = (int *)sub_680810(byte_AD9238); v15 = *v14; v45 = v14[1]; v46 = v14[2]; v16 = v14[3]; v17 = v14[4]; v47 = v16; v18 = v8[4]; v48 = v17; if ( *v8 != v15 || v8[1] != v45 || v8[2] != v46 || v8[3] != v47 || v18 != v48 ) { v19 = (char *)sub_664630(dword_AD8C90, *v8, v8[1], v8[2], v8[3], v8[4]); } else { v19 = dword_AD8EBC; *(_BYTE *)(*(_DWORD *)(v2 + 40 * v7 + 624) + 382) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 40 * v7 + 628) + 382) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 40 * v7 + 632) + 382) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 40 * v7 + 636) + 382) = 1; *(_BYTE *)(*(_DWORD *)(v2 + 8 * (5 * v7 + 80)) + 382) = 1; } v55 = v19; if ( v19 ) { v20 = *(int **)(sub_64F860(v19) + 4); v58 = 0; v57 = v20; while ( v57 ) { v21 = *(unsigned __int16 *)(v57[2] + 20); v22 = dword_ACDA80; v57 = (int *)*v57; v23 = *(_DWORD *)dword_ACDA80; v56 = v21; if ( (*(unsigned __int8 (__thiscall **)(int, int))(v23 + 16))(dword_ACDA80, v21) ) { if ( (unsigned __int16)v56 <= *(_WORD *)(v22 + 200) ) { v25 = *(_DWORD *)(v22 + 196); if ( *(_DWORD *)(v25 + 4 * (unsigned __int16)v56) ) v24 = *(_DWORD *)(v25 + 4 * (unsigned __int16)v56); else v24 = 0; } else { v24 = 0; } } else { v24 = 0; } if ( *(_BYTE *)(v24 + 526) ) { v26 = *(_DWORD *)(v24 + 522); switch ( v26 ) { case 1: v27 = (*(_BYTE *)(v2 + 4 * v7 + 880) & 1) == 0; goto LABEL_61; case 2: v27 = (*(_BYTE *)(v2 + 4 * v7 + 880) & 2) == 0; goto LABEL_61; case 3: v27 = (*(_BYTE *)(v2 + 4 * v7 + 880) & 4) == 0; goto LABEL_61; case 0: v27 = (*(_BYTE *)(v2 + 4 * v7 + 880) & 8) == 0; LABEL_61: if ( !v27 ) ++v58; break; } } } v28 = *(_DWORD *)(v2 + 824); v56 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v28 + 144))(*(_DWORD *)(v2 + 824)); v29 = (*(int (__thiscall **)(int))(*(_DWORD *)v28 + 164))(v28); v30 = v29 + v56; v31 = 0; v51 = v30; v57 = 0; v56 = 0; v32 = (int **)(v2 + 40 * v7 + 624); do { v33 = 0; if ( (unsigned int)v57 >= v58 && v58 ) v33 = 16; v34 = v33 + v31; v35 = **(v32 - 50); HIDWORD(v52) = v51 + v34; (*(void (__stdcall **)(int))(v35 + 172))(v51 + v34); v36 = **(_DWORD **)(v2 + 4 * v7 + 384); v37 = **(v32 - 50); v49 = (int)*(v32 - 50); v38 = (*(int (**)(void))(v36 + 168))(); (*(void (__thiscall **)(int, int))(v37 + 176))(v49, v38); (*(void (__stdcall **)(int))(**v32 + 172))(HIDWORD(v52) + 2); v39 = **(_DWORD **)&v53[4 * v7 + 384]; v40 = **v32; HIDWORD(v52) = *v32; v41 = (*(int (**)(void))(v39 + 168))(); (*(void (__thiscall **)(_DWORD, int))(v40 + 176))(HIDWORD(v52), v41 + 2); v57 = (int *)((char *)v57 + 1); v2 = (int)v53; v31 = v56 + 20; ++v32; v56 = v31; } while ( v31 < 0xC8 ); v42 = v55; if ( v53[4 * v7 + 880] & 1 ) sub_71E900(v53, v55, 1, (unsigned int *)&v54, v7); if ( *(_BYTE *)(v2 + 4 * v7 + 880) & 2 ) sub_71E900((char *)v2, v42, 2, (unsigned int *)&v54, v7); if ( *(_BYTE *)(v2 + 4 * v7 + 880) & 4 ) sub_71E900((char *)v2, v42, 3, (unsigned int *)&v54, v7); if ( *(_BYTE *)(v2 + 4 * v7 + 880) & 8 ) sub_71E900((char *)v2, v42, 0, (unsigned int *)&v54, v7); if ( *(_BYTE *)(v2 + 4 * v7 + 880) & 0x10 ) sub_71E900((char *)v2, v42, 4, (unsigned int *)&v54, v7); } if ( ++v7 >= v50 ) goto LABEL_80; } v9 = 1; LABEL_14: if ( v9 > *(_DWORD *)(v2 + 844) ) v9 = *(_DWORD *)(v2 + 844); goto LABEL_16; } LABEL_80: if ( v43 ) operator delete(v43); } } // AA8C68: using guessed type int dword_AA8C68; // ACDA80: using guessed type int dword_ACDA80; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (00723220) -------------------------------------------------------- char __thiscall sub_723220(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // ecx int *v4; // ebx int *v5; // esi int v6; // ecx int v7; // edx int v8; // edi int v9; // ebx unsigned int v10; // eax int v11; // eax void *v13; // [esp+10h] [ebp-60h] int v14; // [esp+14h] [ebp-5Ch] int v15; // [esp+18h] [ebp-58h] _DWORD *v16; // [esp+20h] [ebp-50h] int v17; // [esp+24h] [ebp-4Ch] int *v18; // [esp+28h] [ebp-48h] char v19; // [esp+2Ch] [ebp-44h] int v20; // [esp+3Ch] [ebp-34h] int v21; // [esp+40h] [ebp-30h] int v22; // [esp+48h] [ebp-28h] int v23; // [esp+4Ch] [ebp-24h] int v24; // [esp+50h] [ebp-20h] int v25; // [esp+54h] [ebp-1Ch] int v26; // [esp+58h] [ebp-18h] char v27; // [esp+5Ch] [ebp-14h] int v28; // [esp+6Ch] [ebp-4h] v2 = (int)this; v16 = this; v21 = 15; v20 = 0; v19 = 0; v3 = (_DWORD *)this[87]; v28 = 0; sub_466A50(v3); v4 = dword_B9E5E4; v18 = dword_B9E5E4; do { sub_442B90((char **)&v13, (char **)v4); v5 = (int *)v13; LOBYTE(v28) = 1; if ( (v14 - (signed int)v13) / 68 ) { v17 = (v14 - (signed int)v13) / 68; do { v6 = v5[1]; v7 = v5[2]; v8 = v5[3]; v9 = v5[4]; v22 = *v5; v23 = v6; v24 = v7; v25 = v8; v26 = v9; v27 = 0; if ( v22 != dword_B9E590 || v6 != dword_B9E594 || v7 != dword_B9E598 || v8 != dword_B9E59C || v9 != dword_B9E5A0 ) { v2 = (int)v16; ((void (__thiscall *)(_DWORD, int *))loc_466CA0)(v16[87], &v22); } else { v2 = (int)v16; v10 = ((int (__thiscall *)(_DWORD, int *))loc_466CA0)(v16[87], &v22); sub_464C80(*(_DWORD **)(v2 + 348), v10, 0, 255, 255, 0); } v5 += 17; --v17; } while ( v17 ); v5 = (int *)v13; v4 = v18; } LOBYTE(v28) = 0; if ( v5 ) operator delete(v5); v4 += 4; v13 = 0; v14 = 0; v15 = 0; v18 = v4; } while ( (signed int)v4 < (signed int)&unk_B9E624 ); sub_465130(*(_DWORD **)(v2 + 348)); v11 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v11 ) LOBYTE(v11) = sub_4E3710(*(_DWORD **)(v2 + 348), *(_DWORD **)(v2 + 344)); return v11; } // B9E590: using guessed type int dword_B9E590; // B9E594: using guessed type int dword_B9E594; // B9E598: using guessed type int dword_B9E598; // B9E59C: using guessed type int dword_B9E59C; // B9E5A0: using guessed type int dword_B9E5A0; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (007233D0) -------------------------------------------------------- char __thiscall sub_7233D0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi char result; // al volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // edi char v15; // ST1C_1 int v16; // ST20_4 int v17; // ST24_4 int v18; // ST28_4 const CHAR *v19; // eax volatile LONG *v20; // eax _DWORD *v21; // edi int *v22; // edi _DWORD *v23; // edi volatile LONG *v24; // edi volatile LONG **v25; // eax volatile LONG *v26; // eax volatile LONG **v27; // eax int v28; // eax volatile LONG *v29; // edi int v30; // eax int v31; // eax void (__thiscall ***v32)(_DWORD, signed int); // esi void (__thiscall ***v33)(_DWORD, signed int); // esi int v34[5]; // [esp+30h] [ebp-80h] int v35; // [esp+44h] [ebp-6Ch] int v36; // [esp+48h] [ebp-68h] int v37; // [esp+4Ch] [ebp-64h] char v38; // [esp+54h] [ebp-5Ch] int v39; // [esp+58h] [ebp-58h] int v40; // [esp+5Ch] [ebp-54h] int v41; // [esp+60h] [ebp-50h] int v42; // [esp+64h] [ebp-4Ch] int v43; // [esp+68h] [ebp-48h] volatile LONG *v44; // [esp+6Ch] [ebp-44h] int v45; // [esp+70h] [ebp-40h] int v46; // [esp+74h] [ebp-3Ch] int v47; // [esp+78h] [ebp-38h] int v48; // [esp+7Ch] [ebp-34h] int v49; // [esp+80h] [ebp-30h] void *v50; // [esp+84h] [ebp-2Ch] int v51; // [esp+94h] [ebp-1Ch] unsigned int v52; // [esp+98h] [ebp-18h] int v53; // [esp+ACh] [ebp-4h] v2 = this; v46 = a2; v49 = 0; this[74] = (volatile LONG *)a2; v3 = dword_BA6BA0; v53 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\RaidRootSelect.nif"); sub_8F66B0(v4, (int)&v49, v3); if ( !v49 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v49 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v43 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v53) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v44 = v9) == 0) ) { LOBYTE(v53) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v49; v53 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v49, (int)"Frame", (int)&v48, (int)&v47, v9); if ( sub_8F1440(v2, 0, 0, (int)v12, 0, v46, (int)"ExpeditionRootSelectWin", 0) ) { v14 = v48; v46 = v47; v45 = v48; sub_456260(v34); LOBYTE(v53) = 2; sub_455FF0(v34, (int)v2); sub_456000(v34, v14, v46); sub_456380(v34, v49); sub_456820(v34, (int)"Panel01", 0); v15 = dword_AA8C68; v16 = dword_AA8C6C; v17 = dword_AA8C70; v18 = dword_AA8C74; v19 = sub_40A910(1682318900); v20 = sub_456760(v34, (int)"WinTitle", (int)v19, v15, v16, v17, v18, 5); (*(void (__thiscall **)(volatile LONG *, signed int))(*v20 + 488))(v20, 1); v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; LOBYTE(v53) = 3; v21 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v35, 1); *v21 = 1; v21[1] = v49; v52 = 15; v51 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "ColumnBarNor", 0xCu); v22 = v21 + 18; LOBYTE(v53) = 4; sub_40B060(v22, (const void **)&v50); LOBYTE(v53) = 3; if ( v52 >= 0x10 ) operator delete(v50); v52 = 15; v51 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "ColumnBarOver", 0xDu); LOBYTE(v53) = 5; sub_40B060(v22, (const void **)&v50); LOBYTE(v53) = 3; if ( v52 >= 0x10 ) operator delete(v50); v52 = 15; v51 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "ColumnBarClick", 0xEu); LOBYTE(v53) = 6; sub_40B060(v22, (const void **)&v50); LOBYTE(v53) = 3; if ( v52 >= 0x10 ) operator delete(v50); v23 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v35, 2); *v23 = 2; v52 = 15; v51 = 0; LOBYTE(v50) = 0; sub_4018E0(&v50, "Column", 6u); LOBYTE(v53) = 7; sub_40B060(v23 + 18, (const void **)&v50); LOBYTE(v53) = 3; if ( v52 >= 0x10 ) operator delete(v50); v23[1] = v49; v52 = 15; v51 = 0; LOBYTE(v50) = 0; v39 = 3; v40 = 0; sub_466680(&v35, 0); v24 = v44; v25 = sub_8FB140(v49, (int)"Textbox", (int)&v48, (int)&v47, v44); v26 = sub_466330(v48 - v45, v47 - v46, (int)v25, *(float *)&v2, (int **)&v35, 0, 0); v2[87] = v26; *((_DWORD *)v26 + 88) = 4; sub_464D00(v2[87], 0); sub_465130(v2[87]); v27 = sub_8FB140(v49, (int)"SlideBar_SlideBtnMiddle", (int)&v48, (int)&v47, v24); v28 = sub_464310(v49, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v27, 0, v2); v2[86] = (volatile LONG *)v28; *(_DWORD *)(v28 + 312) = 3; *((_DWORD *)v2[86] + 76) = 1; v29 = v2[86]; v45 = *v2[86]; v30 = (*(int (__thiscall **)(volatile LONG *))(v45 + 168))(v29); v31 = (*(int (__thiscall **)(volatile LONG *, int))(*v29 + 164))(v29, v30); (*(void (__thiscall **)(volatile LONG *, int))(v45 + 308))(v2[86], v31); sub_4638F0(v2[86], *((_DWORD *)v2[87] + 84)); sub_4563D0(v34, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); (*((void (__thiscall **)(volatile LONG **, int, int, _DWORD, _DWORD))*v2 + 59))( v2, xRight, dword_AC2F78, 0.69999999, 0.1); LOBYTE(v53) = 2; sub_40AE10((void **)&v35); LOBYTE(v53) = 1; sub_4562E0(v34); v32 = (void (__thiscall ***)(_DWORD, signed int))v43; LOBYTE(v53) = 0; if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) (**v32)(v32, 1); v33 = (void (__thiscall ***)(_DWORD, signed int))v49; v53 = -1; if ( v49 && !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v33 ) (**v33)(v33, 1); result = 1; } else { LOBYTE(v53) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v49; v53 = -1; if ( !v49 || InterlockedDecrement((volatile LONG *)(v49 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00723940) -------------------------------------------------------- void *__thiscall sub_723940(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ExpeditionMemberAddWin::`vftable'; *((_DWORD *)this + 58) = &ExpeditionMemberAddWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A022B8: using guessed type void *ExpeditionMemberAddWin::`vftable'; // A022D4: using guessed type void *ExpeditionMemberAddWin::`vftable'; //----- (00723980) -------------------------------------------------------- void *__thiscall sub_723980(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ExpeditionLootSelectWin::`vftable'; *((_DWORD *)this + 58) = &ExpeditionLootSelectWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A024F8: using guessed type void *ExpeditionLootSelectWin::`vftable'; // A02514: using guessed type void *ExpeditionLootSelectWin::`vftable'; //----- (007239C0) -------------------------------------------------------- void *__thiscall sub_7239C0(void *this, char a2) { void *v2; // esi v2 = this; sub_71ADB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (007239F0) -------------------------------------------------------- void *__thiscall sub_7239F0(void *this, char a2) { void *v2; // esi v2 = this; sub_71B350(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00723A20) -------------------------------------------------------- void *__thiscall sub_723A20(void *this, char a2) { void *v2; // esi v2 = this; sub_71B980(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00723A50) -------------------------------------------------------- void *__thiscall sub_723A50(void *this, char a2) { void *v2; // esi v2 = this; sub_71C2B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00723A80) -------------------------------------------------------- int __cdecl sub_723A80(int a1, int a2, char *a3) { int result; // eax char v4; // dl char v5; // dl char v6; // dl char v7; // al char v8; // dl char v9; // dl char v10; // al char v11; // dl unsigned __int8 v12; // al char v13[6]; // [esp+Ch] [ebp-Ch] char v14; // [esp+12h] [ebp-6h] char v15; // [esp+13h] [ebp-5h] char v16; // [esp+14h] [ebp-4h] __int16 v17; // [esp+15h] [ebp-3h] char v18; // [esp+17h] [ebp-1h] sprintf(a3, "%I64d", a1, a2); *(_DWORD *)v13 = a3 + 1; result = strlen(a3); if ( result <= 9 ) { if ( result <= 6 ) { if ( result > 3 ) { *(_WORD *)&v13[1] = 0; *(_DWORD *)&v13[4] = 0; *(_WORD *)v13 = (unsigned __int8)a3[result - 3]; v11 = a3[result - 2]; v12 = a3[result - 1]; v13[1] = v11; *(_DWORD *)&v13[2] = v12; v13[3] = 0; result = sprintf(a3, "%I64d,%s", __PAIR__(a2, a1) / 1000, v13); } } else { v13[0] = a3[result - 3]; v8 = a3[result - 2]; *(_WORD *)&v13[1] = 0; v13[1] = v8; v13[2] = a3[result - 1]; v13[4] = a3[result - 6]; v9 = a3[result - 5]; v10 = a3[result - 4]; v13[5] = v9; v14 = v10; v13[3] = 0; v15 = 0; result = sprintf(a3, "%I64d,%s,%s", __PAIR__(a2, a1) / 1000000, &v13[4], v13); } } else { v16 = a3[result - 3]; v4 = a3[result - 2]; v17 = 0; LOBYTE(v17) = v4; HIBYTE(v17) = a3[result - 1]; v13[4] = a3[result - 6]; v5 = a3[result - 5]; *(_WORD *)&v13[5] = 0; v13[5] = v5; v14 = a3[result - 4]; v13[0] = a3[result - 9]; v6 = a3[result - 8]; v7 = a3[result - 7]; v13[1] = v6; v13[2] = v7; v18 = 0; v15 = 0; v13[3] = 0; result = sprintf(a3, "%I64d,%s,%s,%s", __PAIR__(a2, a1) / 1000000000, v13, &v13[4], &v16); } return result; } //----- (00723C80) -------------------------------------------------------- int __thiscall sub_723C80(void *this) { void *v1; // esi char v3; // [esp+4h] [ebp-44h] char v4; // [esp+5h] [ebp-43h] v1 = this; v3 = 0; memset(&v4, 0, 0x3Fu); (*(void (__thiscall **)(void *, void *))(*(_DWORD *)v1 + 460))(v1, &unk_A0300D); (*(void (__stdcall **)(signed int))(**((_DWORD **)v1 + 84) + 256))(1); if ( !*((_QWORD *)v1 + 41) ) return (*(int (__stdcall **)(void *))(**((_DWORD **)v1 + 84) + 472))(&unk_A0300E); sub_723A80(*((_DWORD *)v1 + 82), *((_DWORD *)v1 + 83), &v3); return (*(int (__stdcall **)(char *))(**((_DWORD **)v1 + 84) + 472))(&v3); } //----- (00723D40) -------------------------------------------------------- _DWORD *__thiscall sub_723D40(_DWORD *this) { _DWORD *v1; // esi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[100] = 0; v1[101] = 0; v1[102] = 0; v1[90] = 0; v1[103] = 0; v1[104] = 0; v1[86] = 0; v1[88] = 0; v1[89] = 0; *v1 = &CoinExchangeWin::`vftable'; v1[58] = &CoinExchangeWin::`vftable'; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A0367C: using guessed type void *CoinExchangeWin::`vftable'; // A0369C: using guessed type void *CoinExchangeWin::`vftable'; //----- (00723E20) -------------------------------------------------------- int __thiscall sub_723E20(_DWORD **this, int a2, int a3) { _DWORD **v3; // esi char v5; // [esp+4h] [ebp-44h] char v6; // [esp+5h] [ebp-43h] v3 = this; v5 = 0; memset(&v6, 0, 0x3Fu); sub_723A80(a2, a3, &v5); return (*(int (__stdcall **)(char *))(*v3[101] + 472))(&v5); } //----- (00723F00) -------------------------------------------------------- void __stdcall sub_723F00(int a1, int a2) { _DWORD **v2; // eax if ( !a1 ) { v2 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); sub_4E1F20(v2, 0); } } //----- (00723F80) -------------------------------------------------------- char __thiscall sub_723F80(volatile LONG *this, int a2, int a3) { char result; // al if ( !a2 ) result = sub_8F2BC0(this, 1, 0, 0); return result; } //----- (00723FA0) -------------------------------------------------------- void __usercall sub_723FA0(int a1@, int a2@) { int v2; // esi int v3; // ecx int v4; // ST0C_4 int v5; // edi char *v6; // eax v2 = a1; if ( *(_BYTE *)(a1 + 288) ) { dword_ACD0B0 = a1; (*(void (**)(void))(**(_DWORD **)(a1 + 300) + 12))(); v3 = *(_DWORD *)(v2 + 304); *(_DWORD *)(v2 + 320) = 0; *(_DWORD *)(v2 + 316) = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 256))(1); if ( *(_QWORD *)(v2 + 328) ) { v4 = a2; v5 = *(_DWORD *)v2; v6 = sub_7549E0("%I64d", *(_DWORD *)(v2 + 328), *(_DWORD *)(v2 + 332)); (*(void (__thiscall **)(int, char *, int))(v5 + 460))(v2, v6, v4); (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v2 + 336) + 256))(0); } else { (*(void (__thiscall **)(int, void *))(*(_DWORD *)v2 + 460))(v2, &unk_A0300F); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 336) + 256))(0); } } } // 723FA0: could not find valid save-restore pair for edi // ACD0B0: using guessed type int dword_ACD0B0; //----- (00724060) -------------------------------------------------------- int __thiscall sub_724060(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx v1 = this; sub_6F3D10(&off_AB7F2C, 8, 11, 0, 0); v2 = v1[90]; if ( v2 ) { v1[86] = 0; (*(void (__stdcall **)(signed int))(*(_DWORD *)v2 + 488))(1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[96] + 240))(0); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[94] + 472))(&unk_A03012); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[93] + 472))(&unk_A03013); (*(void (__stdcall **)(void *))(*(_DWORD *)v1[92] + 472))(&unk_A0301A); return (*(int (__stdcall **)(void *))(*(_DWORD *)v1[91] + 472))(&unk_A0301B); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00724100) -------------------------------------------------------- char __thiscall sub_724100(_BYTE *this) { _BYTE *v1; // esi int v2; // ecx int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // edi __int64 v5; // rax int v6; // edi __int64 v7; // kr00_8 int v8; // eax int v10; // [esp+Ch] [ebp-50h] int v11; // [esp+14h] [ebp-48h] char v12; // [esp+18h] [ebp-44h] char v13; // [esp+19h] [ebp-43h] v1 = this; sub_8F28C0(this); v2 = *((_DWORD *)v1 + 90); if ( v2 ) { *((_DWORD *)v1 + 86) = 1; (*(void (**)(void))(*(_DWORD *)v2 + 480))(); } v3 = *((_DWORD *)v1 + 90); *((_DWORD *)v1 + 88) = 0; *((_DWORD *)v1 + 89) = 0; *(_DWORD *)(v3 + 328) = 0; *(_DWORD *)(v3 + 332) = 0; sub_723C80(*((void **)v1 + 90)); v11 = *sub_4A3B80(&v10); if ( v10 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } if ( v11 ) { if ( *(_BYTE *)(*((_DWORD *)v1 + 97) + 380) ) { v5 = sub_681600(byte_AD9238); v11 = HIDWORD(v5); v6 = v5; } else { v7 = sub_6815F0(byte_AD9238); v11 = HIDWORD(v7); v6 = v7; } v12 = 0; memset(&v13, 0, 0x3Fu); sub_723A80(v6, v11, &v12); (*(void (__stdcall **)(char *))(**((_DWORD **)v1 + 101) + 472))(&v12); } v8 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v8 ) LOBYTE(v8) = sub_4A8140(v8, 196); return v8; } //----- (00724270) -------------------------------------------------------- int __thiscall sub_724270(int this, int a2, int a3) { int v3; // esi int result; // eax const char *v5; // eax __int64 v6; // rax int v7; // ecx unsigned int *v8; // eax __int64 v9; // rax unsigned int v10; // ebx unsigned int v11; // edi int v12; // ST20_4 signed __int64 v13; // rax char *v14; // eax int v15; // ST20_4 signed __int64 v16; // rax char *v17; // eax int v18; // ST20_4 signed __int64 v19; // rax char *v20; // eax int v21; // ST20_4 signed __int64 v22; // rax char *v23; // eax unsigned int *v24; // eax __int64 v25; // rax unsigned int v26; // ebx unsigned int v27; // edi unsigned __int64 v28; // rax __int64 v29; // kr00_8 int v30; // ST20_4 signed __int64 v31; // rax char *v32; // eax int v33; // ST20_4 signed __int64 v34; // rax char *v35; // eax int v36; // ST20_4 signed __int64 v37; // rax char *v38; // eax int v39; // ST20_4 signed __int64 v40; // rax char *v41; // eax unsigned int *v42; // [esp+4h] [ebp-4h] v3 = this; result = *(_DWORD *)(this + 344) - 1; if ( *(_DWORD *)(this + 344) == 1 ) { v5 = (const char *)(*(int (**)(void))(**(_DWORD **)(this + 360) + 452))(); v6 = _atoi64(v5); *(_DWORD *)(v3 + 352) = v6; v7 = *(_DWORD *)(v3 + 352); LODWORD(v6) = *(_DWORD *)(v3 + 360); *(_DWORD *)(v3 + 356) = HIDWORD(v6); *(_DWORD *)(v6 + 328) = v7; *(_DWORD *)(v6 + 332) = *(_DWORD *)(v3 + 356); sub_723C80(*(void **)(v3 + 360)); if ( *(_BYTE *)(*(_DWORD *)(v3 + 388) + 380) ) { v8 = (unsigned int *)sub_727080(0); if ( v8 ) { v9 = *v8 * *(_QWORD *)(v3 + 352); v10 = HIDWORD(v9); v11 = v9; v12 = **(_DWORD **)(v3 + 376); v13 = sub_680E90(v9); v14 = sub_7549E0("%I64d", v13); (*(void (__thiscall **)(_DWORD, char *))(v12 + 472))(*(_DWORD *)(v3 + 376), v14); v15 = **(_DWORD **)(v3 + 372); v16 = sub_680EB0(__PAIR__(v10, v11)); v17 = sub_7549E0("%I64d", v16); (*(void (__thiscall **)(_DWORD, char *))(v15 + 472))(*(_DWORD *)(v3 + 372), v17); v18 = **(_DWORD **)(v3 + 368); v19 = sub_680F00(__PAIR__(v10, v11)); v20 = sub_7549E0("%I64d", v19); (*(void (__thiscall **)(_DWORD, char *))(v18 + 472))(*(_DWORD *)(v3 + 368), v20); v21 = **(_DWORD **)(v3 + 364); v22 = sub_680F60(__PAIR__(v10, v11)); v23 = sub_7549E0("%I64d", v22); (*(void (__thiscall **)(_DWORD, char *))(v21 + 472))(*(_DWORD *)(v3 + 364), v23); } } else { v24 = (unsigned int *)sub_727080(0); v42 = v24; if ( v24 ) { v25 = *v24 * *(_QWORD *)(v3 + 352); v26 = HIDWORD(v25); v27 = v25; v28 = (unsigned __int64)v42[1] * v25 / 0x3E8; if ( v26 | v27 && !v28 ) v28 = 1i64; v29 = __PAIR__(v26, v27) - v28; v30 = **(_DWORD **)(v3 + 376); v31 = sub_680E90(__PAIR__(v26, v27) - v28); v32 = sub_7549E0("%I64d", v31); (*(void (__thiscall **)(_DWORD, char *))(v30 + 472))(*(_DWORD *)(v3 + 376), v32); v33 = **(_DWORD **)(v3 + 372); v34 = sub_680EB0(v29); v35 = sub_7549E0("%I64d", v34); (*(void (__thiscall **)(_DWORD, char *))(v33 + 472))(*(_DWORD *)(v3 + 372), v35); v36 = **(_DWORD **)(v3 + 368); v37 = sub_680F00(v29); v38 = sub_7549E0("%I64d", v37); (*(void (__thiscall **)(_DWORD, char *))(v36 + 472))(*(_DWORD *)(v3 + 368), v38); v39 = **(_DWORD **)(v3 + 364); v40 = sub_680F60(v29); v41 = sub_7549E0("%I64d", v40); (*(void (__thiscall **)(_DWORD, char *))(v39 + 472))(*(_DWORD *)(v3 + 364), v41); } } if ( *(_DWORD *)(v3 + 356) >= 0 && (*(_DWORD *)(v3 + 356) > 0 || *(_DWORD *)(v3 + 352)) ) result = (*(int (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v3 + 384) + 240))(*(_DWORD *)(v3 + 384), 1); else result = (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 384) + 240))(*(_DWORD *)(v3 + 384), 0); } return result; } //----- (00724550) -------------------------------------------------------- char __thiscall sub_724550(volatile LONG *this) { volatile LONG *v1; // esi const char *v2; // eax __int64 v3; // rax _DWORD *v4; // ecx _DWORD *v5; // eax int v6; // ebx int v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // ebx char result; // al char *v10; // eax int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v1 = this; if ( (*(unsigned __int8 (**)(void))(**((_DWORD **)this + 90) + 492))() ) { v2 = (const char *)(*(int (**)(void))(**((_DWORD **)v1 + 90) + 452))(); v3 = _atoi64(v2); *((_DWORD *)v1 + 88) = v3; v4 = (_DWORD *)*((_DWORD *)v1 + 88); LODWORD(v3) = *((_DWORD *)v1 + 90); *((_DWORD *)v1 + 89) = HIDWORD(v3); *(_DWORD *)(v3 + 328) = v4; *(_DWORD *)(v3 + 332) = *((_DWORD *)v1 + 89); sub_723C80(*((void **)v1 + 90)); } v5 = (_DWORD *)*((_DWORD *)v1 + 90); v6 = v5[83]; v11 = v5[82]; v12 = v6; if ( v6 || v5[82] ) { v7 = *sub_4A3B80(&v13); if ( v13 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } v6 = v12; } if ( v7 ) { if ( *(_BYTE *)(*((_DWORD *)v1 + 97) + 380) ) { sub_7271A0(v11, v6); return sub_8F2BC0(v1, 1, 0, 0); } sub_7271D0(v11, v6); } result = sub_8F2BC0(v1, 1, 0, 0); } else { v10 = (char *)sub_40C190(1001365645); result = (unsigned int)sub_462C30(1, v10); } return result; } //----- (00724690) -------------------------------------------------------- LONG __thiscall sub_724690(int this) { int v1; // esi int v2; // edi const CHAR *v3; // eax int v4; // edi const CHAR *v5; // eax int v6; // edi const CHAR *v7; // eax int v8; // eax int v9; // edi LONG result; // eax __int64 v11; // kr00_8 LONG v12; // [esp+Ch] [ebp-50h] int v13; // [esp+14h] [ebp-48h] char v14; // [esp+18h] [ebp-44h] char v15; // [esp+19h] [ebp-43h] v1 = this; *(_BYTE *)(*(_DWORD *)(this + 388) + 380) = 1; *(_BYTE *)(*(_DWORD *)(this + 392) + 380) = 0; v2 = **(_DWORD **)(this + 412); v3 = sub_40A910(-1027785705); (*(void (__thiscall **)(_DWORD, const CHAR *))(v2 + 472))(*(_DWORD *)(v1 + 412), v3); v4 = **(_DWORD **)(v1 + 416); v5 = sub_40A910(1080048514); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v1 + 416), v5); v6 = **(_DWORD **)(v1 + 408); v7 = sub_40A910(-883673541); (*(void (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(*(_DWORD *)(v1 + 408), v7); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 376) + 472))(&unk_A03033); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 372) + 472))(&unk_A0303A); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 368) + 472))(&unk_A0303B); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 364) + 472))(&unk_A03052); v8 = *(_DWORD *)(v1 + 360); *(_DWORD *)(v8 + 328) = 0; *(_DWORD *)(v8 + 332) = 0; sub_723C80(*(void **)(v1 + 360)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 384) + 240))(0); v9 = *sub_4A3B80(&v12); result = v12; if ( v12 ) { v13 = v12; result = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !result ) { if ( v13 ) result = (**(int (__stdcall ***)(signed int))v13)(1); } } if ( v9 ) { v11 = sub_681600(byte_AD9238); v13 = HIDWORD(v11); v14 = 0; memset(&v15, 0, 0x3Fu); sub_723A80(v11, SHIDWORD(v11), &v14); result = (*(int (__stdcall **)(char *))(**(_DWORD **)(v1 + 404) + 472))(&v14); } return result; } //----- (00724840) -------------------------------------------------------- LONG __thiscall sub_724840(int this) { int v1; // esi int v2; // edi const CHAR *v3; // eax int v4; // edi const CHAR *v5; // eax int v6; // edi const CHAR *v7; // eax int v8; // eax int v9; // edi LONG result; // eax __int64 v11; // kr00_8 LONG v12; // [esp+Ch] [ebp-50h] int v13; // [esp+14h] [ebp-48h] char v14; // [esp+18h] [ebp-44h] char v15; // [esp+19h] [ebp-43h] v1 = this; *(_BYTE *)(*(_DWORD *)(this + 388) + 380) = 0; *(_BYTE *)(*(_DWORD *)(this + 392) + 380) = 1; v2 = **(_DWORD **)(this + 412); v3 = sub_40A910(893667627); (*(void (__thiscall **)(_DWORD, const CHAR *))(v2 + 472))(*(_DWORD *)(v1 + 412), v3); v4 = **(_DWORD **)(v1 + 416); v5 = sub_40A910(-2104651909); (*(void (__thiscall **)(_DWORD, const CHAR *))(v4 + 472))(*(_DWORD *)(v1 + 416), v5); v6 = **(_DWORD **)(v1 + 408); v7 = sub_40A910(740969014); (*(void (__thiscall **)(_DWORD, const CHAR *))(v6 + 472))(*(_DWORD *)(v1 + 408), v7); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 376) + 472))(&unk_A03053); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 372) + 472))(&unk_A0305A); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 368) + 472))(&unk_A0305B); (*(void (__stdcall **)(void *))(**(_DWORD **)(v1 + 364) + 472))(&unk_A0306D); v8 = *(_DWORD *)(v1 + 360); *(_DWORD *)(v8 + 328) = 0; *(_DWORD *)(v8 + 332) = 0; sub_723C80(*(void **)(v1 + 360)); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 384) + 240))(0); v9 = *sub_4A3B80(&v12); result = v12; if ( v12 ) { v13 = v12; result = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !result ) { if ( v13 ) result = (**(int (__stdcall ***)(signed int))v13)(1); } } if ( v9 ) { v11 = sub_6815F0(byte_AD9238); v13 = HIDWORD(v11); v14 = 0; memset(&v15, 0, 0x3Fu); sub_723A80(v11, SHIDWORD(v11), &v14); result = (*(int (__stdcall **)(char *))(**(_DWORD **)(v1 + 404) + 472))(&v14); } return result; } //----- (007249F0) -------------------------------------------------------- int __userpurge sub_7249F0@(int a1@, int a2@, int a3@, int a4) { int v4; // esi int result; // eax const char *v6; // eax int v7; // ebx int v8; // edi __int64 v9; // kr00_8 unsigned int *v10; // eax __int64 v11; // rax unsigned int v12; // ebx unsigned int v13; // edi int v14; // ST24_4 signed __int64 v15; // rax char *v16; // eax int v17; // ST24_4 signed __int64 v18; // rax char *v19; // eax int v20; // ST24_4 signed __int64 v21; // rax char *v22; // eax int v23; // ST24_4 signed __int64 v24; // rax int v25; // eax unsigned int *v26; // eax __int64 v27; // rax unsigned int v28; // ebx unsigned int v29; // edi unsigned __int64 v30; // rax __int64 v31; // kr08_8 int v32; // ST24_4 signed __int64 v33; // rax char *v34; // eax int v35; // ST24_4 signed __int64 v36; // rax char *v37; // eax int v38; // ST24_4 signed __int64 v39; // rax char *v40; // eax int v41; // ST24_4 signed __int64 v42; // rax int v43; // [esp-4h] [ebp-14h] unsigned int *v44; // [esp+Ch] [ebp-4h] v4 = a1; result = (*(int (**)(void))(**(_DWORD **)(a1 + 360) + 492))(); if ( !(_BYTE)result ) return result; v43 = a2; v6 = (const char *)(*(int (__stdcall **)(int))(**(_DWORD **)(v4 + 360) + 452))(a3); v9 = _atoi64(v6); v8 = HIDWORD(v9); v7 = v9; if ( *(_BYTE *)(*(_DWORD *)(v4 + 388) + 380) ) { v10 = (unsigned int *)sub_727080(0); if ( v10 ) { v11 = *v10 * v9; v12 = HIDWORD(v11); v13 = v11; v14 = **(_DWORD **)(v4 + 376); v15 = sub_680E90(v11); v16 = sub_7549E0("%I64d", v15); (*(void (__thiscall **)(_DWORD, char *, int))(v14 + 472))(*(_DWORD *)(v4 + 376), v16, v43); v17 = **(_DWORD **)(v4 + 372); v18 = sub_680EB0(__PAIR__(v12, v13)); v19 = sub_7549E0("%I64d", v18); (*(void (__thiscall **)(_DWORD, char *))(v17 + 472))(*(_DWORD *)(v4 + 372), v19); v20 = **(_DWORD **)(v4 + 368); v21 = sub_680F00(__PAIR__(v12, v13)); v22 = sub_7549E0("%I64d", v21); (*(void (__thiscall **)(_DWORD, char *))(v20 + 472))(*(_DWORD *)(v4 + 368), v22); v23 = **(_DWORD **)(v4 + 364); v24 = sub_680F60(__PAIR__(v12, v13)); sub_7549E0("%I64d", v24); v25 = v23; LABEL_10: (*(void (__thiscall **)(_DWORD))(v25 + 472))(*(_DWORD *)(v4 + 364)); v8 = HIDWORD(v9); v7 = v9; goto LABEL_11; } } else { v26 = (unsigned int *)sub_727080(0); v44 = v26; if ( v26 ) { v27 = *v26 * v9; v28 = HIDWORD(v27); v29 = v27; v30 = (unsigned __int64)v44[1] * v27 / 0x3E8; if ( v28 | v29 && !v30 ) v30 = 1i64; v31 = __PAIR__(v28, v29) - v30; v32 = **(_DWORD **)(v4 + 376); v33 = sub_680E90(__PAIR__(v28, v29) - v30); v34 = sub_7549E0("%I64d", v33); (*(void (__thiscall **)(_DWORD, char *, int))(v32 + 472))(*(_DWORD *)(v4 + 376), v34, v43); v35 = **(_DWORD **)(v4 + 372); v36 = sub_680EB0(v31); v37 = sub_7549E0("%I64d", v36); (*(void (__thiscall **)(_DWORD, char *))(v35 + 472))(*(_DWORD *)(v4 + 372), v37); v38 = **(_DWORD **)(v4 + 368); v39 = sub_680F00(v31); v40 = sub_7549E0("%I64d", v39); (*(void (__thiscall **)(_DWORD, char *))(v38 + 472))(*(_DWORD *)(v4 + 368), v40); v41 = **(_DWORD **)(v4 + 364); v42 = sub_680F60(v31); sub_7549E0("%I64d", v42); v25 = v41; goto LABEL_10; } } LABEL_11: if ( v8 || v7 ) result = (*(int (__cdecl **)(signed int))(**(_DWORD **)(v4 + 384) + 240))(1); else result = (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v4 + 384) + 240))(*(_DWORD *)(v4 + 384), 0); return result; } // 7249F0: could not find valid save-restore pair for ebx //----- (00724CA0) -------------------------------------------------------- char __thiscall sub_724CA0(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // edi char v14; // ST1C_1 int v15; // ST20_4 int v16; // ST24_4 int v17; // ST28_4 const CHAR *v18; // eax volatile LONG *v19; // eax char v20; // ST1C_1 int v21; // ST20_4 int v22; // ST24_4 int v23; // ST28_4 const CHAR *v24; // eax volatile LONG *v25; // edi volatile LONG v26; // ebx int v27; // eax char v28; // ST1C_1 int v29; // ST20_4 int v30; // ST24_4 int v31; // ST28_4 const CHAR *v32; // eax volatile LONG *v33; // eax char v34; // ST1C_1 int v35; // ST20_4 int v36; // ST24_4 int v37; // ST28_4 const CHAR *v38; // eax volatile LONG *v39; // eax volatile LONG *v40; // eax volatile LONG *v41; // eax volatile LONG *v42; // eax volatile LONG *v43; // eax void (__thiscall ***v44)(_DWORD, signed int); // esi int v45[5]; // [esp+40h] [ebp-2Ch] int v46; // [esp+54h] [ebp-18h] int v47; // [esp+58h] [ebp-14h] int v48; // [esp+5Ch] [ebp-10h] int v49; // [esp+68h] [ebp-4h] v2 = (int)this; v48 = 0; v49 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v48; v49 = -1; if ( !v48 || InterlockedDecrement((volatile LONG *)(v48 + 4)) ) return 0; v5 = v48 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\GB_MoneyInfoMax.nif"); sub_8F66B0(v8, (int)&v48, v7); if ( !v48 ) return 0; v9 = sub_8FB140(v48, (int)"Frame", (int)&v46, (int)&v47, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"GambleWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v48; v49 = -1; if ( !v48 || InterlockedDecrement((volatile LONG *)(v48 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v48, (int)"Theme", (int)&v46, (int)&v47, v10); else v11 = sub_8FB140(v48, (int)"Theme", (int)&v46, (int)&v47, 0); sub_8F3EB0(v46, v47, (int)v11, v2, 0, 0); sub_456260(v45); LOBYTE(v49) = 1; sub_455FF0(v45, v2); sub_456000(v45, 0, 0); sub_456380(v45, v48); v12 = sub_456820(v45, (int)"Panel01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); sub_4563D0(v45, 1, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v13 = sub_4563D0(v45, 0, (int)"BtnNor", (int)"BtnClick", (int)"BtnOver", 0, 0); v14 = dword_AA8C68; v15 = dword_AA8C6C; v16 = dword_AA8C70; v17 = dword_AA8C74; v18 = sub_40A910(827478423); v19 = sub_456040((int)v13, (int)v18, v14, v15, v16, v17, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = dword_AA8C68; v21 = dword_AA8C6C; v22 = dword_AA8C70; v23 = dword_AA8C74; v24 = sub_40A910(726962047); v25 = sub_456760(v45, (int)"WinTitle", (int)v24, v20, v21, v22, v23, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v25 + 240))(v25, 0); v26 = *v25; v27 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v26 + 452))(v25, v27); v28 = dword_AA8C68; v29 = dword_AA8C6C; v30 = dword_AA8C70; v31 = dword_AA8C74; v32 = sub_40A910(893667627); v33 = sub_456760(v45, (int)"Text01", (int)v32, v28, v29, v30, v31, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v33 + 240))(v33, 0); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_40A910(-1027785705); v39 = sub_456760(v45, (int)"Text02", (int)v38, v34, v35, v36, v37, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v40 = sub_456760(v45, (int)"TextCoin01", (int)"Coin", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); v41 = sub_456760(v45, (int)"TextCoin02", (int)"Coin", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v41 + 240))(v41, 0); v42 = sub_456980( v45, (int)"Text03", (int)"000,000,000", 0, dword_AA8CA8, dword_AA8CAC, dword_AA8CB0, dword_AA8CB4, 5, 0, 0); *(_DWORD *)(v2 + 344) = v42; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v42 + 240))(v42, 0); v43 = sub_456980( v45, (int)"Text04", (int)"000,000,000", 0, dword_AA8CA8, dword_AA8CAC, dword_AA8CB0, dword_AA8CB4, 5, 0, 0); *(_DWORD *)(v2 + 348) = v43; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v43 + 240))(v43, 0); sub_49F5F0((void *)v2, xRight, dword_AC2F78, 1.0, 0.30000001); LOBYTE(v49) = 0; sub_4562E0(v45); v49 = -1; if ( v48 ) { v44 = (void (__thiscall ***)(_DWORD, signed int))v48; if ( !InterlockedDecrement((volatile LONG *)(v48 + 4)) ) { if ( v44 ) (**v44)(v44, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CA8: using guessed type int dword_AA8CA8; // AA8CAC: using guessed type int dword_AA8CAC; // AA8CB0: using guessed type int dword_AA8CB0; // AA8CB4: using guessed type int dword_AA8CB4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (007251B0) -------------------------------------------------------- char __stdcall sub_7251B0(int a1, int a2) { LONG v2; // eax _DWORD **v3; // eax int v4; // edi int (__thiscall ***v5)(_DWORD, signed int); // esi if ( a1 ) { LOBYTE(v2) = a1 - 1; if ( a1 == 1 ) { v3 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); LOBYTE(v2) = sub_4E1F20(v3, 0); } } else { v4 = *sub_4A3B80(&a1); LOBYTE(v2) = a1; if ( a1 ) { v5 = (int (__thiscall ***)(_DWORD, signed int))a1; v2 = InterlockedDecrement((volatile LONG *)(a1 + 4)); if ( !v2 ) { if ( v5 ) LOBYTE(v2) = (**v5)(v5, 1); } } if ( v4 ) LOBYTE(v2) = sub_727150(); } return v2; } //----- (00725230) -------------------------------------------------------- LONG __thiscall sub_725230(_DWORD **this) { _DWORD **v1; // esi int v2; // ecx LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // edi __int64 v5; // kr00_8 LONG v6; // [esp+Ch] [ebp-90h] __int64 v7; // [esp+10h] [ebp-8Ch] char v8; // [esp+18h] [ebp-84h] char v9; // [esp+19h] [ebp-83h] char v10; // [esp+58h] [ebp-44h] char v11; // [esp+59h] [ebp-43h] v1 = this; v2 = *sub_4A3B80(&v6); result = v6; HIDWORD(v7) = v2; if ( v6 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v6; result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } if ( HIDWORD(v7) ) { v8 = 0; memset(&v9, 0, 0x3Fu); v10 = 0; memset(&v11, 0, 0x3Fu); v5 = sub_6815F0(byte_AD9238); v7 = sub_681600(byte_AD9238); sub_723A80(v5, SHIDWORD(v5), &v8); sub_723A80(v7, SHIDWORD(v7), &v10); (*(void (__stdcall **)(char *))(*v1[86] + 472))(&v8); result = (*(int (__stdcall **)(char *))(*v1[87] + 472))(&v10); } return result; } //----- (00725350) -------------------------------------------------------- char __thiscall sub_725350(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // esi volatile LONG *v9; // esi const char *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char v12; // [esp+14h] [ebp-18h] char v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GB_MoneyInfoMin.nif"); sub_8F66B0(v4, (int)&v14, v3); v5 = v14; if ( v14 ) { v2[74] = a2; v8 = sub_8FB140(v5, (int)"MinimumNor", (int)&v12, (int)&v13, 0); sub_8FB650(v8, v14, (int)"MinimumClick"); sub_8FB650(v8, v14, (int)"MinimumOver"); v9 = sub_8FE0F0(0, 0, (int)v8, (int)v2, 0, 0, 0); *((_DWORD *)v9 + 68) = dword_AD01E8; v10 = sub_40A910(-671533490); sub_8F2EA0((void **)v9, v10); sub_49F5F0(v2, xRight, dword_AC2F78, 0.98000002, 0.30000001); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("Game\\GB_MoneyInfoMin.nif load fail", "LoadFail", v14); v5 = v14; } v15 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (00725500) -------------------------------------------------------- char __thiscall sub_725500(void *this, int a2) { int v2; // esi volatile LONG *v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // ebx char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax char v13; // ST18_1 int v14; // ST1C_4 int v15; // ST20_4 int v16; // ST24_4 const CHAR *v17; // eax volatile LONG *v18; // edi volatile LONG v19; // ebx int v20; // eax char v21; // ST18_1 int v22; // ST1C_4 int v23; // ST20_4 int v24; // ST24_4 const CHAR *v25; // eax volatile LONG *v26; // eax char v27; // ST18_1 int v28; // ST1C_4 int v29; // ST20_4 int v30; // ST24_4 const CHAR *v31; // eax volatile LONG *v32; // eax char v33; // ST18_1 int v34; // ST1C_4 int v35; // ST20_4 int v36; // ST24_4 const CHAR *v37; // eax volatile LONG *v38; // eax char v39; // ST18_1 int v40; // ST1C_4 int v41; // ST20_4 int v42; // ST24_4 const CHAR *v43; // eax volatile LONG *v44; // eax volatile LONG *v45; // eax volatile LONG *v46; // eax void (__thiscall ***v47)(_DWORD, signed int); // esi int v48[5]; // [esp+3Ch] [ebp-2Ch] int v49; // [esp+50h] [ebp-18h] int v50; // [esp+54h] [ebp-14h] int v51; // [esp+58h] [ebp-10h] int v52; // [esp+64h] [ebp-4h] v2 = (int)this; v51 = 0; v52 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v51; v52 = -1; if ( !v51 || InterlockedDecrement((volatile LONG *)(v51 + 4)) ) return 0; v5 = v51 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\GB_MoneyCard.nif"); sub_8F66B0(v8, (int)&v51, v7); if ( !v51 ) return 0; v9 = sub_8FB140(v51, (int)"Frame", (int)&v49, (int)&v50, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"GambleHouseCardWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v51; v52 = -1; if ( !v51 || InterlockedDecrement((volatile LONG *)(v51 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v51, (int)"Theme", (int)&v49, (int)&v50, v10); else v11 = sub_8FB140(v51, (int)"Theme", (int)&v49, (int)&v50, 0); sub_8F3EB0(v49, v50, (int)v11, v2, 0, 0); sub_456260(v48); LOBYTE(v52) = 1; sub_455FF0(v48, v2); sub_456000(v48, 0, 0); sub_456380(v48, v51); v12 = sub_456820(v48, (int)"Panel01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); sub_4563D0(v48, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v13 = dword_AA8C68; v14 = dword_AA8C6C; v15 = dword_AA8C70; v16 = dword_AA8C74; v17 = sub_40A910(-772256968); v18 = sub_456760(v48, (int)"WinTitle", (int)v17, v13, v14, v15, v16, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v19 = *v18; v20 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v19 + 452))(v18, v20); v21 = dword_AA8C68; v22 = dword_AA8C6C; v23 = dword_AA8C70; v24 = dword_AA8C74; v25 = sub_40A910(893667627); v26 = sub_456760(v48, (int)"Text01", (int)v25, v21, v22, v23, v24, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v26 + 240))(v26, 0); v27 = dword_AA8C68; v28 = dword_AA8C6C; v29 = dword_AA8C70; v30 = dword_AA8C74; v31 = sub_40A910(-1027785705); v32 = sub_456760(v48, (int)"Text02", (int)v31, v27, v28, v29, v30, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v32 + 240))(v32, 0); v33 = dword_AA8C68; v34 = dword_AA8C6C; v35 = dword_AA8C70; v36 = dword_AA8C74; v37 = sub_40A910(-1767704865); v38 = sub_456760(v48, (int)"TextCoin01", (int)v37, v33, v34, v35, v36, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v38 + 240))(v38, 0); v39 = dword_AA8C68; v40 = dword_AA8C6C; v41 = dword_AA8C70; v42 = dword_AA8C74; v43 = sub_40A910(-1767704865); v44 = sub_456760(v48, (int)"TextCoin02", (int)v43, v39, v40, v41, v42, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v44 + 240))(v44, 0); v45 = sub_456980( v48, (int)"Text03", (int)"000,000,000", 0, dword_AA8CA8, dword_AA8CAC, dword_AA8CB0, dword_AA8CB4, 5, 0, 0); *(_DWORD *)(v2 + 344) = v45; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); v46 = sub_456980( v48, (int)"Text04", (int)"000,000,000", 0, dword_AA8CA8, dword_AA8CAC, dword_AA8CB0, dword_AA8CB4, 5, 0, 0); *(_DWORD *)(v2 + 348) = v46; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v46 + 240))(v46, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v52) = 0; sub_4562E0(v48); v52 = -1; if ( v51 ) { v47 = (void (__thiscall ***)(_DWORD, signed int))v51; if ( !InterlockedDecrement((volatile LONG *)(v51 + 4)) ) { if ( v47 ) (**v47)(v47, 1); } } return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8CA8: using guessed type int dword_AA8CA8; // AA8CAC: using guessed type int dword_AA8CAC; // AA8CB0: using guessed type int dword_AA8CB0; // AA8CB4: using guessed type int dword_AA8CB4; // ACAD5C: using guessed type char byte_ACAD5C; //----- (007259B0) -------------------------------------------------------- LONG __thiscall sub_7259B0(_DWORD **this) { _DWORD **v1; // esi int v2; // ecx LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // edi __int64 v5; // kr00_8 LONG v6; // [esp+Ch] [ebp-90h] __int64 v7; // [esp+10h] [ebp-8Ch] char v8; // [esp+18h] [ebp-84h] char v9; // [esp+19h] [ebp-83h] char v10; // [esp+58h] [ebp-44h] char v11; // [esp+59h] [ebp-43h] v1 = this; v2 = *sub_4A3B80(&v6); result = v6; HIDWORD(v7) = v2; if ( v6 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v6; result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } if ( HIDWORD(v7) ) { v8 = 0; memset(&v9, 0, 0x3Fu); v10 = 0; memset(&v11, 0, 0x3Fu); v5 = sub_6815F0(byte_AD9238); v7 = sub_681600(byte_AD9238); sub_723A80(v5, SHIDWORD(v5), &v8); sub_723A80(v7, SHIDWORD(v7), &v10); (*(void (__stdcall **)(char *))(*v1[86] + 472))(&v8); result = (*(int (__stdcall **)(char *))(*v1[87] + 472))(&v10); } return result; } //----- (00725AD0) -------------------------------------------------------- char __thiscall sub_725AD0(void *this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, int a9, char a10, int a11, char a12) { int v12; // esi int v13; // eax int v14; // edi int v15; // ebx int v17; // edi _DWORD *v18; // eax int v19; // eax bool v20; // zf int *v21; // edi volatile LONG *v22; // eax volatile LONG *v23; // eax int v24; // edx _WORD *v25; // edi _DWORD *v26; // eax _DWORD *v27; // ebx int v28; // edi void *v29; // eax float *v30; // eax float v31; // ecx _DWORD *v32; // ecx _DWORD *v33; // eax _WORD *v34; // edi int v35; // eax _DWORD *v36; // ecx float *v37; // eax int v38; // edx int v39; // ecx int v40; // edx int v41; // eax volatile LONG *v42; // eax struct tagSIZE psizl; // [esp+2Ch] [ebp-50h] float v44; // [esp+34h] [ebp-48h] float v45; // [esp+38h] [ebp-44h] float v46; // [esp+3Ch] [ebp-40h] int v47; // [esp+40h] [ebp-3Ch] int v48; // [esp+44h] [ebp-38h] int v49; // [esp+48h] [ebp-34h] int v50; // [esp+4Ch] [ebp-30h] void *v51; // [esp+50h] [ebp-2Ch] int v52; // [esp+54h] [ebp-28h] int v53; // [esp+58h] [ebp-24h] int v54; // [esp+5Ch] [ebp-20h] int v55; // [esp+60h] [ebp-1Ch] int v56; // [esp+64h] [ebp-18h] int v57; // [esp+68h] [ebp-14h] int v58; // [esp+78h] [ebp-4h] v53 = a4; v48 = a7; v12 = (int)this; LOBYTE(v47) = a10; v52 = a5; v51 = a6; v49 = a8; v50 = a9; v13 = sub_421050(a11); v14 = *(_DWORD *)(v12 + 296); v15 = v13; if ( v14 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *(_DWORD *)(v12 + 296) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } if ( !*(_DWORD *)(v12 + 296) || !sub_8F2900((void *)v12, a2, a3, v53, v52, v51, 0, 0) ) return 0; v55 = a3; v17 = v48; v54 = a2; v56 = a2 + v53; v57 = a3 + v52; if ( v48 == 1342181380 ) v18 = sub_90D360( dword_ACDC7C, (int)hWnd, 1342181380, v50, v49, v47, (int)&v54, *(_DWORD *)(*(_DWORD *)(v12 + 296) + 184)); else v18 = sub_90D360(dword_ACDC7C, (int)hWnd, v48, v50, v49, v47, 0, 0); sub_56FF80((_DWORD *)(v12 + 300), (int)v18); v19 = *(_DWORD *)(v12 + 296); *(_DWORD *)(v12 + 292) = v48; v20 = v17 == 1342177312; v21 = (int *)(v12 + 304); if ( v20 ) { v22 = sub_90EBD0(0, 0, v53, v52, v19, v12, 0, 0); sub_56FF80((_DWORD *)(v12 + 304), (int)v22); } else { v23 = sub_90CE90(0, 0, v53, v52, v19, v12, 0, 0); sub_56FF80((_DWORD *)(v12 + 304), (int)v23); if ( v48 == 1342181380 ) { *(_BYTE *)(*(_DWORD *)(*v21 + 288) + 284) = 1; sub_90D230(*v21, v24, 0); } } (*(void (__stdcall **)(int))(**(_DWORD **)(v12 + 300) + 88))(*v21); *(_BYTE *)(v12 + 312) = a12; if ( a12 ) sub_8FE250(0, 0, v53, v52, v12, 0, 0, 0); SelectObject(*(HDC *)(*(_DWORD *)(v12 + 296) + 192), *(HGDIOBJ *)(*(_DWORD *)(v12 + 296) + 184)); sub_4593C0(*(_DWORD **)(v12 + 296), "|", 1, &psizl); v25 = sub_8F61B0(2u, psizl.cy + 2); v26 = operator new(0xC4u); v51 = v26; v27 = 0; v58 = 0; if ( v26 ) v27 = sub_868C00(v26, (int)v25); v28 = *(_DWORD *)(v12 + 308); v58 = -1; if ( (_DWORD *)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *(_DWORD *)(v12 + 308) = v27; if ( v27 ) InterlockedIncrement(v27 + 1); } v29 = operator new(0x60u); v51 = v29; v58 = 1; if ( v29 ) v30 = sub_85EBC0((float *)v29); else v30 = 0; ++*((_DWORD *)v30 + 22); v44 = 1.0; v45 = 1.0; v46 = 1.0; v30[17] = 1.0; v31 = v46; v30[18] = 1.0; v30[19] = v31; v32 = *(_DWORD **)(v12 + 308); v58 = -1; sub_403700(v32, (int)v30); v33 = operator new(0x28u); v34 = v33; v51 = v33; v58 = 2; if ( v33 ) { sub_85B2B0(v33); *(_DWORD *)v34 = &NiVertexColorProperty::`vftable'; v34[14] = 0; *((_DWORD *)v34 + 8) = 0; *((_DWORD *)v34 + 9) = 1; v35 = (int)v34; } else { v35 = 0; } *(_DWORD *)(v35 + 32) = 0; *(_DWORD *)(v35 + 36) = 0; v36 = *(_DWORD **)(v12 + 308); v58 = -1; sub_403700(v36, v35); v37 = *(float **)(v12 + 308); v38 = *((_DWORD *)v37 + 23); v39 = *((_DWORD *)v37 + 22); v45 = -2.0; v40 = *((_DWORD *)v37 + 24); *((_DWORD *)v37 + 22) = v39; v37[23] = v45; *((_DWORD *)v37 + 24) = v40; (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v12 + 116))(v12, *(_DWORD *)(v12 + 308), 0); sub_85C4D0((_DWORD *)v12); sub_85BED0((_DWORD **)v12, 0.0, 0); v41 = sub_421050(7); v42 = sub_8F4A20(-2, -3, v53, v52, v41, v12, 0, 0); *(_DWORD *)(v12 + 336) = v42; (*(void (__thiscall **)(volatile LONG *, signed int))(*v42 + 488))(v42, 5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v12 + 336) + 472))(&unk_A02FF7); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v12 + 336) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v12 + 336) + 240))(0); return 1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (00725F10) -------------------------------------------------------- char __thiscall sub_725F10(volatile LONG *this, int a2, int a3) { char result; // al result = a2; switch ( a2 ) { case 0: result = sub_724840((int)this); break; case 1: result = sub_724690((int)this); break; case 2: result = sub_8F2BC0(this, 1, 0, 0); break; case 4: result = sub_724550(this); break; default: return result; } return result; } //----- (00725F70) -------------------------------------------------------- int __thiscall sub_725F70(_DWORD **this) { _BYTE *v1; // esi v1 = this; sub_725230(this); return sub_8F28C0(v1); } //----- (00725F80) -------------------------------------------------------- int __thiscall sub_725F80(_DWORD **this) { _BYTE *v1; // esi v1 = this; sub_7259B0(this); return sub_8F28C0(v1); } //----- (00725F90) -------------------------------------------------------- int __cdecl sub_725F90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // eax int v12; // esi void (__thiscall ***v13)(void *, signed int); // edi int result; // eax void *v15; // [esp+14h] [ebp-10h] int v16; // [esp+20h] [ebp-4h] v11 = operator new(0x158u); v12 = (int)v11; v15 = v11; v16 = 0; if ( v11 ) { sub_459CC0(v11); *(_DWORD *)v12 = &CoinEditWin::`vftable'; *(_DWORD *)(v12 + 232) = &CoinEditWin::`vftable'; *(_DWORD *)(v12 + 328) = 0; *(_DWORD *)(v12 + 332) = 0; *(_DWORD *)(v12 + 336) = 0; } else { v12 = 0; } if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v16 = 1; sub_403790(&unk_BA6B10, v12); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int, int, int, int, int))(*(_DWORD *)v12 + 496))( v12, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v12 + 356))(v12); v16 = -1; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); result = v12; } else { sub_403A70(&unk_BA6B10, &v15, (_DWORD *)v12); if ( v15 ) { v13 = (void (__thiscall ***)(void *, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)v15 + 1) ) { if ( v13 ) (**v13)(v13, 1); } } v16 = -1; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); result = 0; } return result; } // A03464: using guessed type void *CoinEditWin::`vftable'; // A03484: using guessed type void *CoinEditWin::`vftable'; //----- (00726110) -------------------------------------------------------- volatile LONG *__cdecl sub_726110(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x1A8u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_723D40(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00726240) -------------------------------------------------------- char __thiscall sub_726240(void *this, int a2) { int v2; // esi volatile LONG *v3; // ebx void (__thiscall ***v4)(_DWORD, signed int); // esi bool v5; // zf int v7; // edi char *v8; // eax volatile LONG **v9; // eax volatile LONG *v10; // eax volatile LONG **v11; // eax volatile LONG *v12; // eax char v13; // ST48_1 int v14; // ST4C_4 int v15; // ST50_4 int v16; // ST54_4 const CHAR *v17; // eax volatile LONG *v18; // edi int v19; // eax volatile LONG **v20; // edi volatile LONG *v21; // ecx int v22; // edi int v23; // eax volatile LONG *v24; // eax int v25; // edi const CHAR *v26; // eax volatile LONG **v27; // edi int v28; // eax int v29; // edi int v30; // eax volatile LONG *v31; // eax int v32; // edi const CHAR *v33; // eax char v34; // ST48_1 int v35; // ST4C_4 int v36; // ST50_4 int v37; // ST54_4 const CHAR *v38; // eax volatile LONG *v39; // eax char v40; // ST48_1 int v41; // ST4C_4 int v42; // ST50_4 int v43; // ST54_4 const CHAR *v44; // eax volatile LONG *v45; // eax char v46; // ST48_1 int v47; // ST4C_4 int v48; // ST50_4 int v49; // ST54_4 const CHAR *v50; // eax volatile LONG *v51; // eax volatile LONG *v52; // eax volatile LONG *v53; // eax volatile LONG *v54; // eax int v55; // edi int v56; // eax char v57; // ST48_1 int v58; // ST4C_4 int v59; // ST50_4 int v60; // ST54_4 const CHAR *v61; // eax volatile LONG *v62; // eax volatile LONG v63; // edi int v64; // eax volatile LONG *v65; // eax char v66; // ST48_1 int v67; // ST4C_4 int v68; // ST50_4 int v69; // ST54_4 const CHAR *v70; // eax volatile LONG *v71; // eax volatile LONG **v72; // eax void (__thiscall ***v73)(_DWORD, signed int); // esi int v74[5]; // [esp+6Ch] [ebp-34h] int v75; // [esp+80h] [ebp-20h] int v76; // [esp+84h] [ebp-1Ch] int v77; // [esp+88h] [ebp-18h] int v78; // [esp+8Ch] [ebp-14h] int v79; // [esp+90h] [ebp-10h] int v80; // [esp+9Ch] [ebp-4h] volatile LONG v81; // [esp+A8h] [ebp+8h] int v82; // [esp+A8h] [ebp+8h] int v83; // [esp+A8h] [ebp+8h] v2 = (int)this; v79 = 0; v80 = 0; v3 = (volatile LONG *)sub_43D0D0(4u); if ( !v3 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v79; v80 = -1; if ( !v79 || InterlockedDecrement((volatile LONG *)(v79 + 4)) ) return 0; v5 = v79 == 0; LABEL_5: if ( !v5 ) (**v4)(v4, 1); return 0; } v7 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v8 = (char *)sub_401410(byte_ACAB50, "Game\\GB_ChangeCoin.nif"); sub_8F66B0(v8, (int)&v79, v7); if ( !v79 ) return 0; v9 = sub_8FB140(v79, (int)"Frame", (int)&v77, (int)&v78, v3); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v9, 0, a2, (int)"CoinExchangeWin", 0) ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v79; v80 = -1; if ( !v79 || InterlockedDecrement((volatile LONG *)(v79 + 4)) ) return 0; v5 = v4 == 0; goto LABEL_5; } v10 = (volatile LONG *)sub_43D0D0(0x13u); if ( v10 ) v11 = sub_8FB140(v79, (int)"Theme", (int)&v77, (int)&v78, v10); else v11 = sub_8FB140(v79, (int)"Theme", (int)&v77, (int)&v78, 0); sub_8F3EB0(v77, v78, (int)v11, v2, 0, 0); sub_456260(v74); LOBYTE(v80) = 1; sub_455FF0(v74, v2); sub_456000(v74, 0, 0); sub_456380(v74, v79); v12 = sub_456820(v74, (int)"Panel01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = dword_AA8C68; v14 = dword_AA8C6C; v15 = dword_AA8C70; v16 = dword_AA8C74; v17 = sub_40A910(743013998); v18 = sub_456760(v74, (int)"WinTitle", (int)v17, v13, v14, v15, v16, 5); v81 = *v18; v19 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v81 + 452))(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v20 = sub_8FB140(v79, (int)"CoinChangeOff", (int)&v77, (int)&v78, v3); sub_8FB650(v20, v79, (int)"CoinChangeOn"); *(_DWORD *)(v2 + 388) = sub_465940(v77, v78, (int)v20, v2, 1, 0); v21 = v20[9]; v22 = *(_DWORD *)(*v21 + 24); v82 = *(_DWORD *)(*v21 + 20); v23 = sub_421050(7); v24 = sub_8F4A20(v77, v78, v82, v22, v23, v2, 0, 0); *(_DWORD *)(v2 + 396) = v24; (*(void (__thiscall **)(volatile LONG *, signed int))(*v24 + 488))(v24, 5); v25 = **(_DWORD **)(v2 + 396); v26 = sub_40A910(490224004); (*(void (__thiscall **)(_DWORD, const CHAR *))(v25 + 472))(*(_DWORD *)(v2 + 396), v26); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 396) + 240))(0); v27 = sub_8FB140(v79, (int)"MoneyChangeOff", (int)&v77, (int)&v78, v3); sub_8FB650(v27, v79, (int)"MoneyChangeOn"); *(_DWORD *)(v2 + 392) = sub_465940(v77, v78, (int)v27, v2, 0, 0); v28 = *v27[9]; v29 = *(_DWORD *)(v28 + 24); v83 = *(_DWORD *)(v28 + 20); v30 = sub_421050(7); v31 = sub_8F4A20(v77, v78, v83, v29, v30, v2, 0, 0); *(_DWORD *)(v2 + 400) = v31; (*(void (__thiscall **)(volatile LONG *, signed int))(*v31 + 488))(v31, 5); v32 = **(_DWORD **)(v2 + 400); v33 = sub_40A910(1892737481); (*(void (__thiscall **)(_DWORD, const CHAR *))(v32 + 472))(*(_DWORD *)(v2 + 400), v33); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 400) + 240))(0); v34 = dword_AA8C68; v35 = dword_AA8C6C; v36 = dword_AA8C70; v37 = dword_AA8C74; v38 = sub_40A910(-1027785705); v39 = sub_456760(v74, (int)"Text01", (int)v38, v34, v35, v36, v37, 5); *(_DWORD *)(v2 + 412) = v39; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v39 + 240))(v39, 0); v40 = dword_AA8C68; v41 = dword_AA8C6C; v42 = dword_AA8C70; v43 = dword_AA8C74; v44 = sub_40A910(542062444); v45 = sub_456760(v74, (int)"Text02", (int)v44, v40, v41, v42, v43, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v45 + 240))(v45, 0); v46 = dword_AA8C68; v47 = dword_AA8C6C; v48 = dword_AA8C70; v49 = dword_AA8C74; v50 = sub_40A910(1080048514); v51 = sub_456760(v74, (int)"Text03", (int)v50, v46, v47, v48, v49, 5); *(_DWORD *)(v2 + 416) = v51; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v51 + 240))(v51, 0); v52 = sub_456760(v74, (int)"TextCoin01", (int)"Coin", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v52 + 240))(v52, 0); v53 = sub_456760(v74, (int)"TextCoin02", (int)"Coin", dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v53 + 240))(v53, 0); v54 = sub_456980( v74, (int)"Text04", (int)"000,000,000,000", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 404) = v54; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); v55 = **(_DWORD **)(v2 + 404); v56 = sub_421050(7); (*(void (__thiscall **)(_DWORD, int))(v55 + 452))(*(_DWORD *)(v2 + 404), v56); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 404) + 488))(5); v57 = dword_AA8C68; v58 = dword_AA8C6C; v59 = dword_AA8C70; v60 = dword_AA8C74; v61 = sub_40A910(-883673541); v62 = sub_456760(v74, (int)"Text06", (int)v61, v57, v58, v59, v60, 5); *(_DWORD *)(v2 + 408) = v62; v63 = *v62; v64 = sub_421050(7); (*(void (__thiscall **)(_DWORD, int))(v63 + 452))(*(_DWORD *)(v2 + 408), v64); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 408) + 240))(0); v65 = sub_4563D0(v74, 4, (int)"ChangeBtnNor", (int)"ChangeBtnClick", (int)"ChangeBtnOver", (int)"ChangeBtnOff", 0); *(_DWORD *)(v2 + 384) = v65; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v65 + 240))(v65, 0); v66 = dword_AA8C68; v67 = dword_AA8C6C; v68 = dword_AA8C70; v69 = dword_AA8C74; v70 = sub_40C190(-1476858647); v71 = sub_456040(*(_DWORD *)(v2 + 384), (int)v70, v66, v67, v68, v69, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v71 + 240))(v71, 0); sub_4563D0(v74, 2, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); *(_DWORD *)(v2 + 364) = sub_456980( v74, (int)"CopperInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 368) = sub_456980( v74, (int)"SilverInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 372) = sub_456980( v74, (int)"GoldInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); *(_DWORD *)(v2 + 376) = sub_456980( v74, (int)"GemInput", (int)"0", 0, dword_AA8C68, dword_AA8C6C, dword_AA8C70, dword_AA8C74, 5, 0, 0); HIBYTE(v83) = sub_8F71E0(v79, (int)"Text05", &v77, &v78, &v75, &v76); v72 = sub_8FB140(v79, (int)"Text05", (int)&v77, (int)&v78, v3); sub_8F3EB0(v77, v78, (int)v72, v2, 0, 0); if ( HIBYTE(v83) ) *(_DWORD *)(v2 + 360) = sub_725F90(v77 + 2, v78 + 4, v75, v76, v2, 1342185472, 12, 3, 0, 0, 1); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))(v2, xRight, dword_AC2F78, 0.5, 0.5); sub_724690(v2); LOBYTE(v80) = 0; sub_4562E0(v74); v73 = (void (__thiscall ***)(_DWORD, signed int))v79; v80 = -1; if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) && v73 ) (**v73)(v73, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // ACAD5C: using guessed type char byte_ACAD5C; //----- (00726B50) -------------------------------------------------------- int __cdecl sub_726B50(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GambleWin::`vftable'; *(_DWORD *)(v2 + 232) = &GambleWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A038C0: using guessed type void *GambleWin::`vftable'; // A038DC: using guessed type void *GambleWin::`vftable'; //----- (00726C90) -------------------------------------------------------- int __cdecl sub_726C90(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GambleMiniWin::`vftable'; *(_DWORD *)(v2 + 232) = &GambleMiniWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A03B00: using guessed type void *GambleMiniWin::`vftable'; // A03B1C: using guessed type void *GambleMiniWin::`vftable'; //----- (00726DD0) -------------------------------------------------------- int __cdecl sub_726DD0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GambleHouseCardWin::`vftable'; *(_DWORD *)(v2 + 232) = &GambleHouseCardWin::`vftable'; *(_DWORD *)(v2 + 344) = 0; *(_DWORD *)(v2 + 348) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A03D40: using guessed type void *GambleHouseCardWin::`vftable'; // A03D5C: using guessed type void *GambleHouseCardWin::`vftable'; //----- (00726F20) -------------------------------------------------------- int __thiscall sub_726F20(void *this, int a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CoinEditWin::`vftable'; *((_DWORD *)this + 58) = &CoinEditWin::`vftable'; sub_459D30((void **)this); if ( a2 & 1 ) operator delete(v2); return nullsub_46(a2); } // 726F4E: using guessed type int __stdcall nullsub_46(int); // A03464: using guessed type void *CoinEditWin::`vftable'; // A03484: using guessed type void *CoinEditWin::`vftable'; //----- (00726F60) -------------------------------------------------------- void *__thiscall sub_726F60(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CoinExchangeWin::`vftable'; *((_DWORD *)this + 58) = &CoinExchangeWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A0367C: using guessed type void *CoinExchangeWin::`vftable'; // A0369C: using guessed type void *CoinExchangeWin::`vftable'; //----- (00726FA0) -------------------------------------------------------- void *__thiscall sub_726FA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GambleWin::`vftable'; *((_DWORD *)this + 58) = &GambleWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A038C0: using guessed type void *GambleWin::`vftable'; // A038DC: using guessed type void *GambleWin::`vftable'; //----- (00726FE0) -------------------------------------------------------- void *__thiscall sub_726FE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GambleMiniWin::`vftable'; *((_DWORD *)this + 58) = &GambleMiniWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A03B00: using guessed type void *GambleMiniWin::`vftable'; // A03B1C: using guessed type void *GambleMiniWin::`vftable'; //----- (00727020) -------------------------------------------------------- void *__thiscall sub_727020(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GambleHouseCardWin::`vftable'; *((_DWORD *)this + 58) = &GambleHouseCardWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A03D40: using guessed type void *GambleHouseCardWin::`vftable'; // A03D5C: using guessed type void *GambleHouseCardWin::`vftable'; //----- (00727060) -------------------------------------------------------- int sub_727060() { int v0; // eax int result; // eax v0 = *(_DWORD *)(dword_ACD9A4 + 56); if ( v0 ) result = *(_DWORD *)(v0 + 40); else result = 0; return result; } // ACD9A4: using guessed type int dword_ACD9A4; //----- (00727080) -------------------------------------------------------- int __cdecl sub_727080(unsigned int a1) { unsigned int v1; // esi v1 = a1; if ( a1 >= sub_727060() ) return 0; while ( !sub_7474E0((_DWORD *)(dword_ACD9A4 + 4), v1) ) { if ( ++v1 >= sub_727060() ) return 0; } return sub_7474E0((_DWORD *)(dword_ACD9A4 + 4), v1); } // ACD9A4: using guessed type int dword_ACD9A4; //----- (007270D0) -------------------------------------------------------- _DWORD *__stdcall sub_7270D0(int a1) { _DWORD *result; // eax if ( a1 ) { result = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !result ) return result; sub_4E1FC0(result); } return (_DWORD *)1; } //----- (00727110) -------------------------------------------------------- signed int __stdcall sub_727110(_WORD *a1) { _DWORD **v1; // eax if ( a1 ) { v1 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( *a1 == 10264 ) { if ( v1 ) sub_4E1FE0(v1); } } return 1; } //----- (00727150) -------------------------------------------------------- char sub_727150() { return sub_6F3D10(&off_AB7F2C, 47, 2, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00727170) -------------------------------------------------------- char __stdcall sub_727170(int a1) { HIBYTE(a1) = a1; return sub_6F3D10(&off_AB7F2C, 47, 13, (char *)&a1 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007271A0) -------------------------------------------------------- char __stdcall sub_7271A0(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 47, 15, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (007271D0) -------------------------------------------------------- char __stdcall sub_7271D0(int a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v4 = a2; v3 = a1; return sub_6F3D10(&off_AB7F2C, 47, 19, &v3, 8u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00727200) -------------------------------------------------------- char __stdcall sub_727200(__int16 a1) { return sub_6F3D10(&off_AB7F2C, 47, 23, &a1, 2u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00727230) -------------------------------------------------------- signed int __thiscall sub_727230(void *this, _WORD *a2) { if ( *a2 == 9760 ) sub_6C8610((int)this); return 1; } //----- (00727250) -------------------------------------------------------- char sub_727250() { return sub_6F3D10(&off_AB7F2C, 47, 107, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00727270) -------------------------------------------------------- char sub_727270() { return sub_6F3D10(&off_AB7F2C, 47, 111, 0, 0); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00727290) -------------------------------------------------------- signed int __thiscall sub_727290(int *this, int a2) { int *v2; // esi float *v3; // ecx v2 = this; if ( *(_WORD *)a2 == 9840 ) { this[33] = 3; sub_753C30((unsigned __int8 *)(a2 + 2), this + 1304); v2[1293] = 100 * *(unsigned __int8 *)(a2 + 2); v2[1294] = 100 * *(unsigned __int8 *)(a2 + 3); v3 = (float *)v2[16]; v2[1295] = 100 * *(unsigned __int8 *)(a2 + 4); sub_72F160(v3, (float *)v2 + 1293); } return 1; } //----- (00727310) -------------------------------------------------------- signed int __stdcall sub_727310(int a1) { return 1; } //----- (00727350) -------------------------------------------------------- signed int __thiscall sub_727350(_DWORD *this, _WORD *a2) { signed int result; // eax result = 1; if ( *a2 == 9824 ) this[33] = 2; return result; } //----- (00727380) -------------------------------------------------------- _DWORD **__thiscall sub_727380(_DWORD *this, _WORD *a2) { _DWORD *v2; // ebx _DWORD **result; // eax _DWORD **v4; // esi _DWORD *v5; // esi int v6; // eax v2 = this; if ( a2 ) { result = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = result; if ( !result ) return result; if ( *a2 == 10240 ) { sub_4E1F20(result, 1); v5 = v4[205]; if ( v5 ) sub_8F86A0(&unk_BA6B10, v5); v6 = v2[1322]; if ( v6 == 2 ) { sub_6C8610((int)v2); return (_DWORD **)1; } if ( v6 == 4 ) sub_73C550(v2); } } return (_DWORD **)1; } //----- (00727410) -------------------------------------------------------- int __stdcall sub_727410(int *a1) { int result; // eax int v2; // esi _DWORD **v3; // ecx _DWORD **v4; // ecx if ( a1 ) { result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = result; if ( !result ) return result; sub_6815B0(byte_AD9238, *a1, a1[1]); v3 = *(_DWORD ***)(v2 + 816); if ( v3 ) sub_7259B0(v3); v4 = *(_DWORD ***)(v2 + 824); if ( v4 ) sub_725230(v4); } return 1; } //----- (00727480) -------------------------------------------------------- int __stdcall sub_727480(int *a1) { int result; // eax _DWORD *v2; // esi _DWORD **v3; // ecx _DWORD **v4; // ecx _DWORD **v5; // esi __int64 v6; // rax if ( a1 ) { result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = (_DWORD *)result; if ( !result ) return result; sub_6815D0(byte_AD9238, *a1, a1[1]); v3 = (_DWORD **)v2[204]; if ( v3 ) sub_7259B0(v3); v4 = (_DWORD **)v2[206]; if ( v4 ) sub_725230(v4); v5 = (_DWORD **)v2[205]; if ( v5 ) { v6 = sub_681600(byte_AD9238); sub_723E20(v5, v6, SHIDWORD(v6)); } } return 1; } //----- (00727500) -------------------------------------------------------- void __thiscall sub_727500(int this, void *a2) { _BYTE *v2; // edi char *v3; // eax int *v4; // eax float v5; // ecx int v6; // edx double v7; // st6 unsigned __int8 v8; // al float v9[3]; // [esp+Ch] [ebp-54h] char v10; // [esp+18h] [ebp-48h] float v11; // [esp+20h] [ebp-40h] float v12; // [esp+24h] [ebp-3Ch] float v13; // [esp+28h] [ebp-38h] float v14; // [esp+2Ch] [ebp-34h] float v15; // [esp+30h] [ebp-30h] float v16; // [esp+34h] [ebp-2Ch] char v17; // [esp+38h] [ebp-28h] v2 = (_BYTE *)this; if ( a2 && *(_BYTE *)(this + 73) ) { v3 = sub_664AB0(dword_AD8C90, *(_WORD *)(this + 5304)); if ( v3 ) { v4 = (int *)sub_4A3910(dword_AD8EBC, (float *)&v10, (int)v3); v5 = *((float *)v4 + 1); v12 = *(float *)v4; v6 = v4[2]; v13 = v5; v14 = 0.0; sub_4430B0(&v12); v11 = v13 * 0.0 - v12; v16 = v13 + v12 * 0.0 + 0.0 * v14; v16 = sub_61E870(v16) * 57.2957763671875; v7 = v16 * 0.5; if ( v11 > 0.0 ) v7 = 180.0 - v7; v16 = v7; v8 = (signed int)v16; *((_BYTE *)a2 + 3) = v8; v15 = (flt_BA45B4 + flt_BA45B4) * (double)v8 / 180.0; sub_85D810((float *)&v17, v15); sub_85DA90((float *)&v17, v9, (float *)&dword_AB4FE8); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 192))(v9); } if ( !sub_6C4EE0(v2) ) sub_6F3D10(&off_AB7F2C, 47, 100, a2, 4u); } } // AB4FE8: using guessed type int dword_AB4FE8; // AB7F2C: using guessed type void **off_AB7F2C; // BA45B4: using guessed type float flt_BA45B4; //----- (00727670) -------------------------------------------------------- signed int __thiscall sub_727670(int this, int a2) { int v2; // esi int v3; // eax float *v4; // ebx int v5; // edi float v6; // ST10_4 int v7; // eax float v8; // ST14_4 int v9; // eax int v10; // edi float *v11; // ebx float v12; // ST10_4 float v13; // ST14_4 int v14; // esi int *v15; // edi int (*v16)(void); // edx int v17; // esi int v18; // eax signed int v20; // [esp+18h] [ebp+8h] v2 = this; if ( *(_BYTE *)a2 ) { *(_WORD *)(this + 136) = *(unsigned __int16 *)(a2 + 1) / 10; } else { *(_BYTE *)(this + 5225) = 0; *(_BYTE *)(this + 5226) = 0; *(float *)(this + 5220) = 0.0; v3 = *(_DWORD *)(this + 64); *(float *)(this + 5232) = 0.0; v4 = *(float **)(v3 + 344); v5 = *(_DWORD *)(v3 + 348); v6 = (double)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v5 + 164))(*(_DWORD *)(v3 + 348)) - 8.0; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 168))(v5) - 10; v4[22] = v6; v8 = (double)v7; v4[23] = v8; v4[24] = 1.0; v9 = *(_DWORD *)(v2 + 64); v10 = *(_DWORD *)(v9 + 348); v11 = *(float **)(v9 + 352); v12 = (double)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 164))(*(_DWORD *)(v9 + 348)); v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 168))(v10); v11[22] = v12; v13 = (double)v20; v11[23] = v13; v11[24] = 1.0; v14 = *(_DWORD *)(v2 + 64); v15 = *(int **)(v14 + 352); v16 = *(int (**)(void))(**(_DWORD **)(v14 + 348) + 144); v17 = *v15; v18 = v16(); (*(void (__thiscall **)(int *, int))(v17 + 468))(v15, v18); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); } return 1; } // AB6534: using guessed type int dword_AB6534; //----- (007277C0) -------------------------------------------------------- signed int __stdcall sub_7277C0(int *a1) { int v1; // eax int v2; // esi _DWORD **v3; // ecx _DWORD **v4; // ecx _DWORD **v5; // esi __int64 v6; // rax if ( a1 ) { sub_6815B0(byte_AD9238, *a1, a1[1]); sub_6815D0(byte_AD9238, a1[2], a1[3]); v1 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = v1; if ( v1 ) { v3 = *(_DWORD ***)(v1 + 816); if ( v3 ) sub_7259B0(v3); v4 = *(_DWORD ***)(v2 + 824); if ( v4 ) sub_725230(v4); v5 = *(_DWORD ***)(v2 + 820); if ( v5 ) { v6 = sub_681600(byte_AD9238); sub_723E20(v5, v6, SHIDWORD(v6)); } } } return 1; } //----- (00727850) -------------------------------------------------------- signed int __stdcall sub_727850(int a1) { char *v1; // esi float v3[3]; // [esp+Ch] [ebp-38h] float v4; // [esp+18h] [ebp-2Ch] char v5; // [esp+1Ch] [ebp-28h] if ( !a1 ) return 1; v1 = sub_664AB0(dword_AD8C90, *(_WORD *)a1); if ( v1 ) { v4 = (flt_BA45B4 + flt_BA45B4) * (double)*(unsigned __int8 *)(a1 + 2) / 180.0; sub_85D810((float *)&v5, v4); sub_85DA90((float *)&v5, v3, (float *)&dword_AB4FE8); (*(void (__thiscall **)(char *, float *))(*(_DWORD *)v1 + 192))(v1, v3); } return 1; } // AB4FE8: using guessed type int dword_AB4FE8; // BA45B4: using guessed type float flt_BA45B4; //----- (00727900) -------------------------------------------------------- int __stdcall sub_727900(_WORD *a1) { int result; // eax _DWORD *v2; // esi const CHAR *v3; // eax if ( !a1 ) return 1; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = (_DWORD *)result; if ( !result ) return result; if ( *a1 == 10253 ) { v3 = sub_40A910(-976467685); LABEL_7: sub_492060(v2, (int)v3); return 1; } if ( *a1 == 10252 ) { v3 = sub_40A910(102344819); goto LABEL_7; } return 1; } //----- (00727970) -------------------------------------------------------- int __stdcall sub_727970(_WORD *a1) { int result; // eax _DWORD *v2; // esi const CHAR *v3; // eax if ( a1 ) { result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v2 = (_DWORD *)result; if ( !result ) return result; if ( *a1 == 10260 ) { v3 = sub_40A910(1988523430); sub_492060(v2, (int)v3); } } return 1; } //----- (007279D0) -------------------------------------------------------- signed int __thiscall sub_7279D0(_DWORD *this, int a2) { char *v2; // eax char *v3; // edi float *v4; // esi float v5; // ST14_4 char *v6; // eax int v7; // eax float *v8; // eax float v9; // ecx float v10; // edx float v11; // eax float v12; // edx float v13; // eax float v14; // ecx void (__thiscall *v15)(char *, float *); // edx int *v16; // eax int v17; // eax int v18; // eax int v19; // edx float v20; // ecx float v21; // edx float v23; // [esp+8h] [ebp-50h] float v24; // [esp+Ch] [ebp-4Ch] float v25; // [esp+10h] [ebp-48h] float v26; // [esp+14h] [ebp-44h] float v27; // [esp+18h] [ebp-40h] float v28; // [esp+1Ch] [ebp-3Ch] float v29; // [esp+20h] [ebp-38h] float v30; // [esp+24h] [ebp-34h] float v31; // [esp+28h] [ebp-30h] _DWORD *v32; // [esp+2Ch] [ebp-2Ch] char v33; // [esp+30h] [ebp-28h] v32 = this; if ( *(_WORD *)a2 != 9728 ) return 1; v2 = sub_664AB0(dword_AD8C90, *(_WORD *)(a2 + 2)); v3 = v2; if ( !v2 ) return 1; v4 = (float *)*((_DWORD *)v2 + 175); if ( v4 ) { v5 = *v4; v6 = sub_7549E0("Avatar%.2d", *(unsigned __int8 *)(a2 + 8) + 1); v7 = (*(int (__thiscall **)(float *, char *))(LODWORD(v5) + 72))(v4, v6); v8 = (float *)sub_402BA0((int)dword_BA455C, v7); if ( v8 ) { v9 = v8[22]; v10 = v8[23]; v11 = v8[24]; v27 = v10; v12 = v4[23]; v28 = v11; v13 = v4[24]; v26 = v9; v14 = v4[22]; v30 = v12; v15 = *(void (__thiscall **)(char *, float *))(*(_DWORD *)v3 + 200); v31 = v13; v29 = v14; v15(v3, &v29); qmemcpy(&v33, v4 + 26, 0x24u); v16 = (int *)sub_85DA90((float *)&v33, &v23, &v26); v26 = *(float *)v16; v27 = *((float *)v16 + 1); v28 = *((float *)v16 + 2); v23 = v26 * 1.5; v24 = v27 * 1.5; v25 = 1.5 * v28; v29 = v23 + v29; v30 = v30 + v24; v31 = v31 + v25; *((_DWORD *)dword_AD8EBC + 1027) = 0; sub_67B690(dword_AD8EBC, 1); sub_67B590((int)dword_AD8EBC, &v29); sub_67D830((int)dword_AD8EBC); v17 = *(_DWORD *)(a2 + 4); if ( v17 == 2 ) { v18 = (int)v32; v32[1322] = 5; } else if ( v17 == 1 ) { v19 = (int)v32; v32[1322] = 3; v18 = v19; } else { v18 = (int)v32; } *(_BYTE *)(v18 + 5306) = *(_BYTE *)(a2 + 8); v20 = v29; *(_WORD *)(v18 + 5304) = *(_WORD *)(a2 + 2); v21 = v30; *(float *)(v18 + 5292) = v20; *(float *)(v18 + 5296) = v21; *(float *)(v18 + 5300) = 0.0; } } return 1; } //----- (00727BD0) -------------------------------------------------------- signed int __stdcall sub_727BD0(_BYTE *a1) { _DWORD *v1; // ebx int v2; // edi unsigned int v3; // esi unsigned __int8 *v4; // eax char *v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] if ( !a1 ) return 1; v7 = 0; if ( !*a1 ) return 1; v1 = a1 + 3; while ( 1 ) { v6 = sub_664AB0(dword_AD8C90, *((_WORD *)v1 - 1)); if ( !v6 ) return 0; v2 = *v1; v3 = 0; if ( sub_452120() ) { while ( *(_DWORD *)(sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v3) + 105) != v2 ) { if ( ++v3 >= sub_452120() ) goto LABEL_11; } v4 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACB6C4 + 4), v3); if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 456))(*v4); } LABEL_11: v1 = (_DWORD *)((char *)v1 + 6); if ( ++v7 >= (unsigned __int8)*a1 ) return 1; } } // ACB6C4: using guessed type int dword_ACB6C4; //----- (00727C90) -------------------------------------------------------- signed int __stdcall sub_727C90(int *a1) { _DWORD *v1; // esi int v2; // ST08_4 int v3; // ST04_4 char *v4; // eax char *v5; // eax if ( !a1 ) return 1; v1 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v1 ) { v2 = a1[1]; v3 = *a1; v4 = (char *)sub_40A910(-605465293); v5 = sub_7549E0(v4, v3, v2); sub_492060(v1, (int)v5); } return 1; } //----- (00727CF0) -------------------------------------------------------- signed int __thiscall sub_727CF0(_DWORD *this, _BYTE *a2) { int v2; // eax bool v3; // zf int v4; // ebx int *v5; // edi char *v6; // esi int *v7; // eax bool v8; // cf int v9; // edi int *v10; // eax int v11; // ST0C_4 int v12; // ST10_4 int v13; // ST14_4 int v14; // ST18_4 int v15; // ST04_4 char *v16; // eax char *v17; // eax _DWORD *v18; // ST18_4 int v19; // edx char v21; // [esp+10h] [ebp-4Ch] unsigned __int8 *v22; // [esp+20h] [ebp-3Ch] _DWORD *v23; // [esp+24h] [ebp-38h] int v24; // [esp+28h] [ebp-34h] int *v25; // [esp+2Ch] [ebp-30h] void *v26; // [esp+30h] [ebp-2Ch] int v27; // [esp+40h] [ebp-1Ch] unsigned int v28; // [esp+44h] [ebp-18h] int v29; // [esp+58h] [ebp-4h] v23 = this; v22 = a2; if ( !a2 ) return 0; v2 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v3 = *a2 == 0; v4 = v2; v24 = 0; if ( !v3 ) { v5 = (int *)(a2 + 3); v25 = (int *)(a2 + 3); do { v6 = sub_664AB0(dword_AD8C90, *((_WORD *)v5 - 1)); if ( v6 && *v5 ) { v7 = sub_6C81E0(v23, &v26, *v5); v8 = (unsigned int)v7[5] < 0x10; v29 = 0; if ( v8 ) v9 = (int)v7; else v9 = *v7; v10 = (int *)sub_4B1B10((float *)&v21, 0x32u); v11 = *v10; v12 = v10[1]; v13 = v10[2]; v14 = v10[3]; v15 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v6 + 84))(v6, v9); v16 = (char *)sub_40A910(1195778186); v17 = sub_7549E0(v16, v15); sub_492030(v4, v9, (int)v6, (int)v17, v11, v12, v13, v14); v29 = -1; if ( v28 >= 0x10 ) operator delete(v26); v18 = *(_DWORD **)(v4 + 1040); v28 = 15; v27 = 0; LOBYTE(v26) = 0; sub_8F81A0(&unk_BA6B10, v18); v5 = v25; } v19 = *v22; v5 = (int *)((char *)v5 + 6); ++v24; v25 = v5; } while ( v24 < v19 ); } return 1; } //----- (00727E70) -------------------------------------------------------- signed int __thiscall sub_727E70(_DWORD *this, _BYTE *a2) { _BYTE *v2; // ebx _DWORD *v3; // edi int *v4; // esi int *v5; // eax int v6; // ecx signed int result; // eax int *v8; // esi int *v9; // eax int v10; // ecx char v11; // [esp+Ch] [ebp-4h] signed int v12; // [esp+18h] [ebp+8h] signed int v13; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; if ( !(*a2 & 1) || this[36] ) { result = 1; if ( *a2 & 2 && this[36] == 1 ) { v13 = 0; if ( *(_WORD *)(v2 + 1) > 0u ) { v8 = (int *)(v2 + 5); do { v9 = *sub_6CA9F0(v3 + 24, (int **)&v11, (_WORD *)v8 - 1); if ( v9 != (int *)v3[25] ) { v10 = v8[1]; if ( v10 ) v9[*v8 + 4] += v10; sub_6C55B0((int)v3, *v8, 0); } v8 = (int *)((char *)v8 + 10); ++v13; } while ( v13 < *(unsigned __int16 *)(v2 + 1) ); } result = 1; if ( *v2 & 2 ) v3[36] = 0; } } else { v12 = 0; if ( *(_WORD *)(v2 + 1) > 0u ) { v4 = (int *)(v2 + 5); do { v5 = *sub_6CA9F0(v3 + 24, (int **)&v11, (_WORD *)v4 - 1); if ( v5 != (int *)v3[25] ) { v6 = v4[1]; if ( v6 ) v5[*v4 + 4] += v6; sub_6C55B0((int)v3, *v4, 0); } v4 = (int *)((char *)v4 + 10); ++v12; } while ( v12 < *(unsigned __int16 *)(v2 + 1) ); } result = 1; if ( !(*v2 & 2) ) v3[36] = 1; } return result; } //----- (00727F90) -------------------------------------------------------- char __usercall sub_727F90@(int a1@, int a2@) { int v2; // esi int *v3; // edx int v4; // ebx signed int v5; // eax _DWORD *v6; // ecx _DWORD *v7; // esi char result; // al char *v9; // eax volatile LONG *v10; // eax int v11; // esi const CHAR *v12; // eax int *v13; // eax int v14; // ST04_4 int v15; // ST08_4 int v16; // ST0C_4 int v17; // ST10_4 const CHAR *v18; // eax char v19; // [esp+Ch] [ebp-18h] char v20; // [esp+1Ch] [ebp-8h] int v21; // [esp+20h] [ebp-4h] v2 = a1; v21 = *((unsigned __int16 *)dword_AD8EBC + 274); v3 = *sub_6CA9F0((_DWORD *)(a1 + 96), (int **)&v20, &v21); v4 = *(_DWORD *)(v2 + 132); v5 = 0; v6 = v3 + 4; while ( !*v6 ) { ++v5; ++v6; if ( v5 >= 52 ) goto LABEL_4; } if ( !*(_DWORD *)(v2 + 5208) && v4 == 1 && !*(_BYTE *)(v2 + 5236) ) { v9 = (char *)sub_40A910(-856420867); v10 = sub_462CA0(2, v9); sub_56FF80((_DWORD *)(v2 + 5208), (int)v10); return (**(int (__thiscall ***)(int, int))(*(_DWORD *)(v2 + 5208) + 232))(*(_DWORD *)(v2 + 5208) + 232, v2 + 8); } LABEL_4: if ( v4 == 2 || v4 == 3 ) { *((_BYTE *)v3 + 228) = 1; v11 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v12 = sub_40A910(-539967539); sub_492060((_DWORD *)v11, (int)v12); v13 = (int *)sub_4B1B10((float *)&v19, 0x32u); v14 = *v13; v15 = v13[1]; v16 = v13[2]; v17 = v13[3]; v18 = sub_40A910(-539967539); sub_492030(v11, a2, v11, (int)v18, v14, v15, v16, v17); result = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v11 + 1040)); } else { v7 = *(_DWORD **)(v2 + 5208); if ( v7 ) result = sub_8F81A0(&unk_BA6B10, v7); else result = sub_6F3D10(&off_AB7F2C, 47, 104, 0, 0); } return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00728100) -------------------------------------------------------- signed int __thiscall sub_728100(_DWORD *this, unsigned __int16 *a2) { unsigned __int16 *v2; // ebx _DWORD *v3; // esi int **v4; // eax int v5; // edi unsigned __int16 v7; // ax int **v8; // eax int *v9; // ebx int v10; // ecx int v11; // eax int v12; // ST0C_4 _DWORD *v13; // ecx int v14; // ST08_4 int v15; // eax int v16; // esi const char *v17; // eax int *v18; // eax int v19; // ST04_4 int v20; // ST08_4 int v21; // ST0C_4 int v22; // ST10_4 const char *v23; // eax _DWORD *v24; // esi char *v25; // eax char v26; // [esp+Ch] [ebp-1Ch] char v27; // [esp+1Ch] [ebp-Ch] char v28; // [esp+20h] [ebp-8h] _DWORD *v29; // [esp+24h] [ebp-4h] v2 = a2; v3 = this; v29 = this + 28; v4 = sub_6CAAC0(this + 28, (int **)&v28, a2 + 1); v5 = (int)*v4; if ( *v4 == (int *)v3[29] ) return 0; v7 = *v2; if ( *v2 == 9776 ) { a2 = (unsigned __int16 *)*((unsigned __int16 *)dword_AD8EBC + 274); v8 = sub_6CA9F0(v3 + 24, (int **)&v27, &a2); v9 = *v8; if ( *v8 != (int *)v3[25] ) { v10 = *(_DWORD *)(v5 + 20); if ( v10 ) v9[*(_DWORD *)(v5 + 16) + 4] += v10; } v11 = *(_DWORD *)(v5 + 16); if ( v9[v11 + 4] ) sub_72F260((_DWORD ***)v3[16], v11, 1, 0); v12 = v3[38]; v13 = (_DWORD *)v3[16]; v14 = *(_DWORD *)(v5 + 16); v3[33] = 1; sub_72AFE0(v13, v14, v12, 0); v15 = sub_6C4CC0(v9 + 4); sub_729B90((_DWORD *)v3[16], v15, 0); } else if ( v7 == 9787 ) { v16 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v17 = sub_41A850(*v2); sub_492060((_DWORD *)v16, (int)v17); v18 = (int *)sub_4B1B10((float *)&v26, 0x32u); v19 = *v18; v20 = v18[1]; v21 = v18[2]; v22 = v18[3]; v23 = sub_41A850(*v2); sub_492030(v16, v5, v16, (int)v23, v19, v20, v21, v22); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v16 + 1040)); } else if ( v7 == 9783 || v7 == 9786 || v7 == 9782 ) { v24 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v24 ) { v25 = sub_7549E0("%d", *v2); sub_492060(v24, (int)v25); } } sub_6CA6C0(v29, (int *)&a2, v5); return 1; } //----- (007282C0) -------------------------------------------------------- signed int __thiscall sub_7282C0(_DWORD *this, _WORD *a2) { _WORD *v2; // esi int v3; // edi int *v4; // eax int v5; // ecx v2 = a2; v3 = (int)this; if ( *a2 == *((_WORD *)dword_AD8EBC + 274) ) return 1; v4 = *sub_6CA9F0(this + 24, (int **)&a2, a2); if ( v4 != *(int **)(v3 + 100) ) { v5 = *(_DWORD *)(v2 + 3); if ( v5 ) v4[*(_DWORD *)(v2 + 1) + 4] += v5; *(_DWORD *)(v3 + 132) = 1; sub_6C55B0(v3, *(_DWORD *)(v2 + 1), 0); return 1; } return 0; } //----- (00728330) -------------------------------------------------------- signed int __thiscall sub_728330(_DWORD *this, unsigned __int16 *a2) { unsigned __int16 *v2; // edi int v3; // esi int *v4; // ebx unsigned __int16 v6; // ax int **v7; // eax int *v8; // edi int v9; // eax int v10; // eax unsigned __int16 *v11; // eax unsigned __int16 *v12; // ecx char v13; // bl unsigned __int16 *v14; // edi signed int v15; // eax _DWORD *v16; // ecx int v17; // edi const CHAR *v18; // eax int *v19; // eax int v20; // ST04_4 int v21; // ST08_4 int v22; // ST0C_4 int v23; // ST10_4 const CHAR *v24; // eax __int16 v25; // dx _DWORD **v26; // ecx int v27; // esi int *v28; // eax int v29; // ST04_4 int v30; // ST08_4 int v31; // ST0C_4 int v32; // ST10_4 const char *v33; // eax _DWORD *v34; // esi char *v35; // eax char v36; // [esp+Ch] [ebp-20h] char v37; // [esp+1Ch] [ebp-10h] _DWORD *v38; // [esp+20h] [ebp-Ch] int *v39; // [esp+24h] [ebp-8h] int v40; // [esp+28h] [ebp-4h] v2 = a2; v3 = (int)this; v38 = this + 28; v4 = *sub_6CAAC0(this + 28, (int **)&v40, a2 + 1); v39 = v4; if ( v4 == *(int **)(v3 + 116) ) return 0; v6 = *v2; if ( *v2 == 9792 ) { a2 = (unsigned __int16 *)*((unsigned __int16 *)dword_AD8EBC + 274); v7 = sub_6CA9F0((_DWORD *)(v3 + 96), (int **)&v37, &a2); v8 = *v7; if ( *v7 != *(int **)(v3 + 100) ) v8[v4[4] + 4] -= v4[5]; v9 = v4[4]; if ( !v8[v9 + 4] ) sub_72F260(*(_DWORD ****)(v3 + 64), v9, 0, 0); v40 = v4[4]; v10 = sub_6C4CC0(v8 + 4); sub_729B90(*(_DWORD **)(v3 + 64), v10, 0); v11 = *(unsigned __int16 **)(v3 + 100); v12 = *(unsigned __int16 **)v11; v13 = 0; a2 = v12; if ( v12 == v11 ) goto LABEL_28; v14 = v11; do { v15 = 0; v16 = v12 + 8; while ( !*v16 ) { ++v15; ++v16; if ( v15 >= 52 ) goto LABEL_15; } v13 = 1; LABEL_15: sub_6CA3E0(&a2); v12 = a2; } while ( a2 != v14 ); if ( !v13 ) { LABEL_28: v17 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v18 = sub_40A910(-1968853831); sub_492060((_DWORD *)v17, (int)v18); v19 = (int *)sub_4B1B10((float *)&v36, 0x32u); v20 = *v19; v21 = v19[1]; v22 = v19[2]; v23 = v19[3]; v24 = sub_40A910(-1968853831); sub_492030(v17, v17, v3, (int)v24, v20, v21, v22, v23); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v17 + 1040)); v25 = *(_WORD *)(v3 + 104); v26 = *(_DWORD ***)(v3 + 64); *(_DWORD *)(v3 + 132) = 0; *(_WORD *)(v3 + 5168) = v25; sub_72B300(v26, 1, 0, 0); } sub_6C55B0(v3, v40, 0); v4 = v39; } else if ( v6 == 9802 ) { v27 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v28 = (int *)sub_4B1B10((float *)&v36, 0x32u); v29 = *v28; v30 = v28[1]; v31 = v28[2]; v32 = v28[3]; v33 = sub_41A850(*v2); sub_492030(v27, (int)v2, v27, (int)v33, v29, v30, v31, v32); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v27 + 1040)); } else if ( v6 == 9800 || v6 == 9799 ) { v34 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v34 ) { v35 = sub_7549E0("%d", *v2); sub_492060(v34, (int)v35); } } sub_6CA6C0(v38, (int *)&a2, (int)v4); return 1; } //----- (007285A0) -------------------------------------------------------- signed int __thiscall sub_7285A0(_DWORD *this, _WORD *a2) { _WORD *v2; // ebx int v3; // esi _WORD *v4; // ST10_4 int *v5; // eax int *v6; // eax int v7; // ecx int *v8; // edi signed int v9; // eax _DWORD *v10; // ecx int v11; // edi const CHAR *v12; // eax int *v13; // eax int v14; // ST04_4 int v15; // ST08_4 int v16; // ST0C_4 int v17; // ST10_4 const CHAR *v18; // eax __int16 v19; // dx _DWORD **v20; // ecx char v22; // [esp+Ch] [ebp-14h] int *v23; // [esp+1Ch] [ebp-4h] char v24; // [esp+2Bh] [ebp+Bh] v2 = a2; v3 = (int)this; if ( *a2 == *((_WORD *)dword_AD8EBC + 274) ) return 1; v4 = a2; v24 = 0; v5 = *sub_6CA9F0(this + 24, &v23, v4); if ( v5 != *(int **)(v3 + 100) ) { v5[*(_DWORD *)(v2 + 1) + 4] -= *(_DWORD *)(v2 + 3); v6 = *(int **)(v3 + 100); v7 = *v6; v23 = (int *)v7; if ( (int *)v7 == v6 ) goto LABEL_18; v8 = v6; do { v9 = 0; v10 = (_DWORD *)(v7 + 16); while ( !*v10 ) { ++v9; ++v10; if ( v9 >= 52 ) goto LABEL_10; } v24 = 1; LABEL_10: sub_6CA3E0(&v23); v7 = (int)v23; } while ( v23 != v8 ); if ( !v24 ) { LABEL_18: v11 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v12 = sub_40A910(-1968853831); sub_492060((_DWORD *)v11, (int)v12); v13 = (int *)sub_4B1B10((float *)&v22, 0x32u); v14 = *v13; v15 = v13[1]; v16 = v13[2]; v17 = v13[3]; v18 = sub_40A910(-1968853831); sub_492030(v11, v11, v3, (int)v18, v14, v15, v16, v17); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v11 + 1040)); v19 = *(_WORD *)(v3 + 104); v20 = *(_DWORD ***)(v3 + 64); *(_DWORD *)(v3 + 132) = 0; *(_WORD *)(v3 + 5168) = v19; sub_72B300(v20, 1, 0, 0); } sub_6C55B0(v3, *(_DWORD *)(v2 + 1), 0); return 1; } return 0; } //----- (007286F0) -------------------------------------------------------- signed int __thiscall sub_7286F0(_DWORD *this, int a2) { _BYTE *v2; // esi _DWORD *v3; // ebx int **v4; // eax int v5; // edi int v6; // ecx int v8; // esi int v9; // eax int v10; // ebx _DWORD *v11; // eax _DWORD *v12; // ecx signed int v13; // eax _DWORD *v14; // edx int **v15; // eax int *j; // eax int i; // eax int v18; // esi char *v19; // eax int v20; // edi int *v21; // eax int v22; // ST08_4 int v23; // ST0C_4 int v24; // ST10_4 int v25; // ST14_4 char *v26; // eax char *v27; // eax __int16 v28; // dx char v29; // [esp+Ch] [ebp-18h] int *v30; // [esp+1Ch] [ebp-8h] _DWORD *v31; // [esp+20h] [ebp-4h] __int16 *v32; // [esp+2Ch] [ebp+8h] v2 = (_BYTE *)a2; v32 = (__int16 *)(a2 + 1); v3 = this + 24; v31 = this; v4 = sub_6CA9F0(this + 24, &v30, v32); v5 = (int)*v4; v6 = (int)v31; if ( *v4 == (int *)v31[25] ) return 0; if ( *v2 ) { *(_BYTE *)(v5 + 228) = 1; return 1; } if ( v31[33] == 1 ) { v8 = 0; do { v9 = *(_DWORD *)(v5 + 4 * v8 + 16); if ( v9 ) { *(_DWORD *)(v5 + 4 * v8 + 16) -= v9; sub_6C55B0(v6, v8, 0); v6 = (int)v31; } ++v8; } while ( v8 < 52 ); } sub_6CAEE0(v3, (int *)&v30, v5); v10 = (int)v31; v11 = (_DWORD *)v31[25]; v12 = (_DWORD *)*v11; if ( (_DWORD *)*v11 != v11 ) { LABEL_10: v13 = 0; v14 = v12 + 4; while ( !*v14 ) { ++v13; ++v14; if ( v13 >= 52 ) { if ( !*((_BYTE *)v12 + 233) ) { v15 = (int **)v12[2]; if ( *((_BYTE *)v15 + 233) ) { for ( i = v12[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v12 != *(_DWORD **)(i + 8) ) break; v12 = (_DWORD *)i; } v12 = (_DWORD *)i; } else { v12 = (_DWORD *)v12[2]; for ( j = *v15; !*((_BYTE *)j + 233); j = (int *)*j ) v12 = j; } } if ( v12 != (_DWORD *)v31[25] ) goto LABEL_10; goto LABEL_23; } } return 1; } LABEL_23: v18 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v18 ) { v19 = sub_664AB0(dword_AD8C90, *v32); if ( v19 ) { v20 = (*(int (__thiscall **)(char *))(*(_DWORD *)v19 + 84))(v19); v21 = (int *)sub_4B1B10((float *)&v29, 0x32u); v22 = *v21; v23 = v21[1]; v24 = v21[2]; v25 = v21[3]; v26 = (char *)sub_40A910(927277203); v27 = sub_7549E0(v26, v20); sub_492030(v18, v20, v18, (int)v27, v22, v23, v24, v25); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v18 + 1040)); } } v28 = *(_WORD *)(v10 + 104); *(_DWORD *)(v10 + 132) = 0; *(_WORD *)(v10 + 5168) = v28; return 1; } //----- (007288B0) -------------------------------------------------------- char __thiscall sub_7288B0(int this, void *a2) { void *v2; // esi __int16 v3; // dx __int16 v4; // ax int *v5; // edx int *v6; // eax int v7; // eax void **v8; // eax int v9; // edx _DWORD *v10; // edi int v11; // eax _DWORD *v12; // eax char v14[2]; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] int v16; // [esp+10h] [ebp-4h] v2 = a2; if ( *(_DWORD *)(this + 120) ) { if ( **(_DWORD **)(this + 116) != *(_DWORD *)(this + 116) ) { do { v4 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v4 + 1; *((_WORD *)v2 + 4) = v4; v5 = *(int **)(this + 116); v6 = (int *)v5[1]; while ( !*((_BYTE *)v6 + 25) ) { if ( *((_WORD *)v6 + 6) >= *((_WORD *)v2 + 4) ) { v5 = v6; v6 = (int *)*v6; } else { v6 = (int *)v6[2]; } } v7 = *(_DWORD *)(this + 116); a2 = v5; if ( v5 == (int *)v7 || *((_WORD *)v2 + 4) < *((_WORD *)v5 + 6) ) { v16 = v7; v8 = (void **)&v16; } else { v8 = &a2; } } while ( *v8 != *(void **)(this + 116) ); } } else { v3 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v3 + 1; *((_WORD *)v2 + 4) = v3; } v9 = *(_DWORD *)v2; v10 = (_DWORD *)(this + 112); *(_WORD *)v14 = *((_WORD *)v2 + 4); v11 = *((_DWORD *)v2 + 1); v15 = v9; v16 = v11; v12 = sub_6CAE60((_DWORD *)(this + 112), v14); sub_6CA910(v10, (int)&v15, v12, 0); return sub_6F3D10(&off_AB7F2C, 47, 113, v2, 0xAu); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00728990) -------------------------------------------------------- char __thiscall sub_728990(int this, void *a2) { void *v2; // esi __int16 v3; // dx __int16 v4; // ax int *v5; // edx int *v6; // eax int v7; // eax void **v8; // eax int v9; // edx _DWORD *v10; // edi int v11; // eax _DWORD *v12; // eax char v14[2]; // [esp+8h] [ebp-Ch] int v15; // [esp+Ch] [ebp-8h] int v16; // [esp+10h] [ebp-4h] v2 = a2; if ( *(_DWORD *)(this + 120) ) { if ( **(_DWORD **)(this + 116) != *(_DWORD *)(this + 116) ) { do { v4 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v4 + 1; *((_WORD *)v2 + 4) = v4; v5 = *(int **)(this + 116); v6 = (int *)v5[1]; while ( !*((_BYTE *)v6 + 25) ) { if ( *((_WORD *)v6 + 6) >= *((_WORD *)v2 + 4) ) { v5 = v6; v6 = (int *)*v6; } else { v6 = (int *)v6[2]; } } v7 = *(_DWORD *)(this + 116); a2 = v5; if ( v5 == (int *)v7 || *((_WORD *)v2 + 4) < *((_WORD *)v5 + 6) ) { v16 = v7; v8 = (void **)&v16; } else { v8 = &a2; } } while ( *v8 != *(void **)(this + 116) ); } } else { v3 = *(_WORD *)(this + 148); *(_WORD *)(this + 148) = v3 + 1; *((_WORD *)v2 + 4) = v3; } v9 = *(_DWORD *)v2; v10 = (_DWORD *)(this + 112); *(_WORD *)v14 = *((_WORD *)v2 + 4); v11 = *((_DWORD *)v2 + 1); v15 = v9; v16 = v11; v12 = sub_6CAE60((_DWORD *)(this + 112), v14); sub_6CA910(v10, (int)&v15, v12, 0); return sub_6F3D10(&off_AB7F2C, 47, 116, v2, 0xAu); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (00728A70) -------------------------------------------------------- signed int __userpurge sub_728A70@(int a1@, int a2@, int a3) { int v3; // esi _DWORD *v4; // eax _DWORD *v5; // edx int **v6; // eax int *j; // eax int i; // eax int *v9; // ecx int v10; // eax const CHAR *v11; // eax char v13; // [esp+8h] [ebp-10Ch] int v14; // [esp+Ch] [ebp-108h] CHAR String; // [esp+10h] [ebp-104h] v3 = a1; if ( a3 ) { *(_DWORD *)(a1 + 128) = *(_DWORD *)a3; sub_730C70(*(_DWORD **)(a1 + 64), (unsigned __int8 *)(a3 + 4), 0); v4 = *(_DWORD **)(v3 + 100); v5 = (_DWORD *)*v4; if ( (_DWORD *)*v4 != v4 ) { do { memset(v5 + 4, 0, 0xD0u); if ( !*((_BYTE *)v5 + 233) ) { v6 = (int **)v5[2]; if ( *((_BYTE *)v6 + 233) ) { for ( i = v5[1]; !*(_BYTE *)(i + 233); i = *(_DWORD *)(i + 4) ) { if ( v5 != *(_DWORD **)(i + 8) ) break; v5 = (_DWORD *)i; } v5 = (_DWORD *)i; } else { v5 = (_DWORD *)v5[2]; for ( j = *v6; !*((_BYTE *)j + 233); j = (int *)*j ) v5 = j; } } } while ( v5 != *(_DWORD **)(v3 + 100) ); } sub_72EC50(*(char **)(v3 + 64)); v9 = *(int **)(v3 + 100); *(_DWORD *)(v3 + 132) = 0; v10 = *v9; v14 = v10; if ( (int *)v10 != v9 ) { do { if ( *(_BYTE *)(v10 + 228) == 1 ) { if ( *(_WORD *)(v10 + 12) == *((_WORD *)dword_AD8EBC + 274) ) { sub_727F90(v3, a2); return 1; } v10 = *sub_6CAEE0((_DWORD *)(v3 + 96), (int *)&v13, v10); v14 = v10; } else { sub_6CA3E0(&v14); v10 = v14; } } while ( v10 != *(_DWORD *)(v3 + 100) ); } *(_WORD *)(v3 + 5568) = 8669; memset(&String, 0, 0x100u); v11 = sub_40A910(914247794); sprintf(&String, "%s", v11); sub_6177C0(*(_DWORD **)(v3 + 92), *(unsigned __int16 *)(v3 + 5568), &String, 0); sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v3 + 92)); *(_WORD *)(v3 + 5168) = *(_WORD *)(v3 + 104); sub_6CAA70((_DWORD *)(v3 + 112)); *(float *)(v3 + 5232) = 0.0; *(float *)(v3 + 5228) = 0.0; *(_BYTE *)(v3 + 5188) = 0; *(_WORD *)(v3 + 5225) = 0; *(_BYTE *)(v3 + 5224) = 0; *(_BYTE *)(v3 + 5261) = 0; *(_BYTE *)(v3 + 72) = 0; *(_WORD *)(v3 + 5237) = 0; *(_BYTE *)(v3 + 5239) = 0; *(float *)(v3 + 5248) = 0.0; *(float *)(v3 + 5256) = 0.0; *(_WORD *)(v3 + 5252) = 0; } return 1; } //----- (00728C70) -------------------------------------------------------- signed int __thiscall sub_728C70(unsigned __int8 *this, unsigned __int16 *a2) { unsigned __int8 *v2; // ebx int v3; // esi unsigned __int16 v4; // ax int *v5; // eax int v6; // ST04_4 int v7; // ST08_4 int v8; // ST0C_4 int v9; // ST10_4 const char *v10; // eax int v12; // ST10_4 char *v13; // eax char *v14; // eax volatile LONG *v15; // eax char *v16; // eax int v17; // edx int v18; // ecx unsigned __int8 *v19; // esi bool v20; // zf _DWORD *v21; // eax int v22; // edx __int16 v23; // dx _DWORD *v24; // eax _DWORD *v25; // eax int v26; // eax int *v27; // esi float *v28; // edi signed int v29; // eax int v30; // edx double v31; // st7 int (__thiscall *v32)(int *); // eax int v33; // eax int v34; // eax int v35; // eax int v36; // ecx int v37; // esi double v38; // st6 int v39; // eax int *v40; // edi int v41; // edx signed int v42; // eax int v43; // edx double v44; // st7 int (__thiscall *v45)(int *); // eax double v46; // st7 int v47; // eax void (__stdcall *v48)(_DWORD); // edx int v49; // eax int v50; // esi int v51; // edi int (__thiscall *v52)(int); // edx int v53; // eax int v54; // eax int v55; // esi int v56; // ecx int v57; // eax int v58; // eax int v59; // ST10_4 char *v60; // eax char *v61; // eax int v62; // ecx char v63[2]; // [esp+10h] [ebp-1D4h] char v64; // [esp+14h] [ebp-1D0h] char v65; // [esp+ECh] [ebp-F8h] float v66; // [esp+F0h] [ebp-F4h] int v67; // [esp+F4h] [ebp-F0h] float v68; // [esp+F8h] [ebp-ECh] __int64 v69; // [esp+FCh] [ebp-E8h] int v70; // [esp+104h] [ebp-E0h] char v71; // [esp+108h] [ebp-DCh] char v72; // [esp+1DCh] [ebp-8h] v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v3 ) return 0; v4 = *a2; if ( *a2 != 9744 ) { switch ( v4 ) { case 0x261Bu: v5 = (int *)sub_4B1B10((float *)&v65, 0x32u); v6 = *v5; v7 = v5[1]; v8 = v5[2]; v9 = v5[3]; v10 = sub_41A850(*a2); sub_492030(v3, (int)a2, v3, (int)v10, v6, v7, v8, v9); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v3 + 1040)); break; case 0x261Au: if ( !*((_DWORD *)v2 + 1303) ) { v12 = *(unsigned __int16 *)((char *)a2 + 47); v13 = (char *)sub_40A910(594415481); v14 = sub_7549E0(v13, v12); v15 = sub_462C30(1, v14); sub_56FF80((_DWORD *)v2 + 1303, (int)v15); (**(void (__thiscall ***)(int, int))(*((_DWORD *)v2 + 1303) + 232))( *((_DWORD *)v2 + 1303) + 232, (int)(v2 + 8)); } break; case 0x2617u: case 0x2615u: v16 = sub_7549E0("%d", *a2); sub_492060((_DWORD *)v3, (int)v16); break; } return 0; } sub_6CB2E0((_DWORD *)v2 + 24); sub_6CAA70((_DWORD *)v2 + 28); *((float *)v2 + 1310) = 0.0; *((_DWORD *)v2 + 32) = 0; *((_DWORD *)v2 + 33) = *(_DWORD *)((char *)a2 + 23); *((_WORD *)v2 + 68) = ((signed int)(1717986919 * (unsigned __int64)*(unsigned __int16 *)((char *)a2 + 31) >> 32) >> 2) + ((unsigned int)(1717986919 * (unsigned __int64)*(unsigned __int16 *)((char *)a2 + 31) >> 32) >> 31); *((_WORD *)v2 + 69) = *(unsigned __int16 *)((char *)a2 + 33) / 10; v2[140] = *((_BYTE *)a2 + 49); *((_WORD *)v2 + 2622) = *(unsigned __int16 *)((char *)a2 + 37); v17 = *(_DWORD *)((char *)a2 + 39); *((_DWORD *)v2 + 38) = 0; v2[5236] = 0; *((_DWORD *)v2 + 1291) = v17; v2[5204] = 1; *((_QWORD *)v2 + 660) = sub_6815F0(byte_AD9238); *((_DWORD *)v2 + 16) = *(_DWORD *)(v3 + 832); *((_DWORD *)v2 + 19) = *(_DWORD *)(v3 + 796); *((_DWORD *)v2 + 20) = *(_DWORD *)(v3 + 800); *((_DWORD *)v2 + 21) = *(_DWORD *)(v3 + 804); *((_DWORD *)v2 + 22) = *(_DWORD *)(v3 + 808); v18 = *((_DWORD *)v2 + 16); *((_DWORD *)v2 + 23) = *(_DWORD *)(v3 + 812); if ( !v18 ) return 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 276))(*((float *)v2 + 1310)); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 16) + 240))(0); sub_730C70(*((_DWORD **)v2 + 16), 0, 1); *((_WORD *)v2 + 2584) = v2[140]; v70 = 6; v19 = (unsigned __int8 *)(a2 + 10); do { if ( v19 ) sub_730C70(*((_DWORD **)v2 + 16), v19, 0); v19 -= 3; --v70; } while ( v70 >= 0 ); v20 = v2[140] == 0; HIDWORD(v69) = 0; if ( !v20 ) { v70 = (int)(a2 + 25); do { v72 = 0; memset(&v71, 0, 0xD0u); *(_WORD *)v63 = *(_WORD *)v70; qmemcpy(&v64, &v71, 0xD8u); v21 = sub_6CADE0((_DWORD *)v2 + 24, v63); sub_6CB200((_DWORD *)v2 + 24, (int)&v67, v21, 0); v22 = v2[140]; v70 += 2; ++HIDWORD(v69); } while ( SHIDWORD(v69) < v22 ); } v23 = *((_WORD *)dword_AD8EBC + 274); v72 = 0; memset(&v71, 0, 0xD0u); *(_WORD *)v63 = v23; qmemcpy(&v64, &v71, 0xD8u); v24 = sub_6CADE0((_DWORD *)v2 + 24, v63); sub_6CB200((_DWORD *)v2 + 24, (int)&v67, v24, 0); v25 = (_DWORD *)*((_DWORD *)v2 + 16); ++*((_WORD *)v2 + 2584); sub_8F82A0(&unk_BA6B10, v25); sub_729B90(*((_DWORD **)v2 + 16), 0, 0); v26 = *((_DWORD *)v2 + 16); v27 = *(int **)(v26 + 348); v28 = *(float **)(v26 + 344); v29 = (*(int (__thiscall **)(int *))(*v27 + 164))(v27); v30 = *v27; v29 -= 8; HIDWORD(v69) = v29; v31 = (double)v29; v32 = *(int (__thiscall **)(int *))(v30 + 168); v66 = v31; v33 = v32(v27) - 10; HIDWORD(v69) = v33; v28[22] = v66; *(float *)&v67 = (double)v33; v28[23] = *(float *)&v67; v68 = 1.0; v28[24] = 1.0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(*((_DWORD *)v2 + 16) + 348) + 256))(1); sub_72ADD0(*((_DWORD **)v2 + 16), 0, *((_DWORD *)v2 + 38)); v34 = *((_DWORD *)v2 + 33); *((float *)v2 + 1307) = 0.0; *((float *)v2 + 1305) = 0.0; v2[5188] = 0; *(_WORD *)(v2 + 5225) = 0; v2[5224] = 0; v2[5261] = 0; *((_WORD *)v2 + 2626) = 0; if ( v34 == 1 ) { HIDWORD(v69) = *((unsigned __int16 *)v2 + 68) - *((unsigned __int16 *)v2 + 69); *((float *)v2 + 1308) = (double)SHIDWORD(v69); } else { *((float *)v2 + 1308) = 0.0; } if ( v34 == 1 ) { v35 = (*(int (**)(void))(**(_DWORD **)(*((_DWORD *)v2 + 16) + 348) + 144))(); v36 = *((unsigned __int16 *)v2 + 69); v37 = v35 - 25; v70 = *((unsigned __int16 *)v2 + 68); HIDWORD(v69) = v35 - 25; v38 = (double)(unsigned int)(v35 - 25) / (double)v70; v39 = *((_DWORD *)v2 + 16); *((float *)v2 + 1305) = (double)(v70 - v36) * v38 + *((float *)v2 + 1305); v40 = *(int **)(v39 + 348); v41 = *v40; v70 = *(_DWORD *)(v39 + 344); v42 = (*(int (__thiscall **)(int *))(v41 + 164))(v40); v43 = *v40; HIDWORD(v69) = v42; v44 = (double)v42; v45 = *(int (__thiscall **)(int *))(v43 + 168); v66 = v44 + *((float *)v2 + 1305); HIDWORD(v69) = v45(v40) - 10; v46 = (double)SHIDWORD(v69); v47 = v70; *(float *)(v70 + 88) = v66; *(float *)&v67 = v46; *(float *)(v47 + 92) = *(float *)&v67; v68 = 1.0; *(float *)(v47 + 96) = 1.0; v48 = *(void (__stdcall **)(_DWORD))(**(_DWORD **)(*((_DWORD *)v2 + 16) + 352) + 468); v69 = (signed __int64)*((float *)v2 + 1305); v48(v37 - v69); } else { v53 = *((_DWORD *)v2 + 16); *((float *)v2 + 1305) = 0.0; v54 = (*(int (**)(void))(**(_DWORD **)(v53 + 348) + 144))(); v55 = **(_DWORD **)(*((_DWORD *)v2 + 16) + 352); v69 = (signed __int64)*((float *)v2 + 1305); (*(void (__stdcall **)(_DWORD))(v55 + 468))(v54 - 7 - v69); } v49 = *((_DWORD *)v2 + 16); v50 = *(_DWORD *)(v49 + 348); v51 = *(_DWORD *)(v49 + 352); HIDWORD(v69) = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v50 + 164))(*(_DWORD *)(v49 + 348)); v52 = *(int (__thiscall **)(int))(*(_DWORD *)v50 + 168); v66 = (double)SHIDWORD(v69) + *((float *)v2 + 1305) + 8.0; HIDWORD(v69) = v52(v50); *(float *)&v67 = (double)SHIDWORD(v69); v56 = v67; *(float *)(v51 + 88) = v66; v68 = 1.0; *(_DWORD *)(v51 + 92) = v56; *(float *)(v51 + 96) = 1.0; v57 = *((_DWORD *)v2 + 33); v2[72] = v57 == 2 || v57 == 3; *(_WORD *)(v2 + 5237) = 0; v2[5239] = 0; sub_72B300(*((_DWORD ***)v2 + 16), 1, 0, 0); sub_72B560(*((char **)v2 + 16), *((_DWORD *)v2 + 1291)); sub_6BA650(&dword_AB6520, 32); unknown_libname_12(&dword_AB6520); v58 = *((_DWORD *)v2 + 1291); v2[5260] = 1; *((_DWORD *)v2 + 1322) = 2; if ( v58 ) { v59 = v58; v60 = (char *)sub_40A910(1645142702); v61 = sub_7549E0(v60, v59); v62 = *(_DWORD *)(*((_DWORD *)v2 + 16) + 360); if ( v62 ) (*(void (__stdcall **)(char *))(*(_DWORD *)v62 + 472))(v61); } *((_WORD *)v2 + 2784) = -1; return 1; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); //----- (00729460) -------------------------------------------------------- signed int __thiscall sub_729460(_DWORD *this, __int16 *a2) { _DWORD *v2; // esi _DWORD *v3; // eax char *v4; // edi int v5; // esi int v6; // edi char *v7; // eax char *v8; // eax int *v9; // eax int v10; // ST08_4 int v11; // ST0C_4 int v12; // ST10_4 int v13; // ST14_4 char *v14; // eax char *v15; // eax char v17[2]; // [esp+Ch] [ebp-1CCh] char v18; // [esp+10h] [ebp-1C8h] char v19; // [esp+E8h] [ebp-F0h] int v20; // [esp+F0h] [ebp-E8h] _DWORD *v21; // [esp+F8h] [ebp-E0h] char v22; // [esp+FCh] [ebp-DCh] char v23; // [esp+1D0h] [ebp-8h] v23 = 0; memset(&v22, 0, 0xD0u); *(_WORD *)v17 = *a2; qmemcpy(&v18, &v22, 0xD8u); v2 = this + 24; v21 = this; v3 = sub_6CADE0(this + 24, v17); sub_6CB200(v2, (int)&v20, v3, 0); v4 = sub_664AB0(dword_AD8C90, *a2); v5 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !v5 ) return 0; if ( v4 ) { v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v4 + 84))(v4); v7 = (char *)sub_40A910(2140193749); v8 = sub_7549E0(v7, v6); sub_492060((_DWORD *)v5, (int)v8); v9 = (int *)sub_4B1B10((float *)&v19, 0x32u); v10 = *v9; v11 = v9[1]; v12 = v9[2]; v13 = v9[3]; v14 = (char *)sub_40A910(2140193749); v15 = sub_7549E0(v14, v6); sub_492030(v5, v6, v5, (int)v15, v10, v11, v12, v13); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v5 + 1040)); } if ( !v21[33] ) *((_WORD *)v21 + 2584) = *((_WORD *)v21 + 52); return 1; } //----- (007295D0) -------------------------------------------------------- signed int __thiscall sub_7295D0(int this, _WORD *a2) { int v2; // esi _DWORD *v3; // ecx v2 = this; if ( *a2 == 9872 && *(_DWORD *)(this + 64) ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 84) + 260))() ) sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); else sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); v3 = *(_DWORD **)(v2 + 84); if ( v3[154] != 1 ) sub_7296D0(v3); sub_729770(*(_DWORD **)(v2 + 84), (int)a2); sub_739ED0(*(_DWORD **)(v2 + 84)); } return 1; } //----- (00729650) -------------------------------------------------------- signed int __thiscall sub_729650(int this, _WORD *a2) { int v2; // esi _DWORD *v3; // ecx v2 = this; if ( *a2 == 9888 && *(_DWORD *)(this + 64) ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 84) + 260))() ) sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); else sub_8F82A0(&unk_BA6B10, *(_DWORD **)(v2 + 84)); v3 = *(_DWORD **)(v2 + 84); if ( v3[154] == 1 ) sub_729720(v3); sub_729820(*(_DWORD **)(v2 + 84), (int)a2); sub_739ED0(*(_DWORD **)(v2 + 84)); } return 1; } //----- (007296D0) -------------------------------------------------------- signed int __thiscall sub_7296D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *(_BYTE *)(this[86] + 380) = 1; *(_BYTE *)(this[87] + 380) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[87] + 492))(0); v1[154] = 1; return sub_739ED0(v1); } //----- (00729720) -------------------------------------------------------- signed int __thiscall sub_729720(_DWORD *this) { _DWORD *v1; // esi v1 = this; *(_BYTE *)(this[86] + 380) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[86] + 492))(0); *(_BYTE *)(v1[87] + 380) = 1; v1[154] = 2; return sub_739ED0(v1); } //----- (00729770) -------------------------------------------------------- void __thiscall sub_729770(_DWORD *this, int a2) { _DWORD *v2; // eax int v3; // edi _DWORD *v4; // ecx signed int v5; // edi int *v6; // esi int v7; // ecx int v8; // edx int v9; // ebx unsigned int *v10; // [esp+4h] [ebp-24h] int v11; // [esp+Ch] [ebp-1Ch] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int v14; // [esp+18h] [ebp-10h] int v15; // [esp+1Ch] [ebp-Ch] int v16; // [esp+20h] [ebp-8h] if ( a2 ) { v2 = (_DWORD *)this[156]; v3 = (int)(this + 155); v4 = (_DWORD *)this[155]; v10 = (unsigned int *)v3; if ( v4 != v2 ) *(_DWORD *)(v3 + 4) = sub_6CA670(v2, v2, v4); v5 = 0; if ( *(_BYTE *)(a2 + 2) ) { v6 = (int *)(a2 + 3); do { v7 = v6[1]; v8 = v6[2]; v9 = v6[5]; v11 = *v6; v14 = v6[3]; v15 = v6[4]; v12 = v7; v16 = v9; v13 = v8; sub_6CB620(v10, &v11); ++v5; v6 += 6; } while ( v5 < *(unsigned __int8 *)(a2 + 2) ); } } } //----- (00729820) -------------------------------------------------------- void __thiscall sub_729820(_DWORD *this, int a2) { _DWORD *v2; // eax int v3; // edi _DWORD *v4; // ecx signed int v5; // edi int *v6; // esi int v7; // ecx int v8; // edx int v9; // ebx unsigned int *v10; // [esp+4h] [ebp-24h] int v11; // [esp+Ch] [ebp-1Ch] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] int v14; // [esp+18h] [ebp-10h] int v15; // [esp+1Ch] [ebp-Ch] int v16; // [esp+20h] [ebp-8h] if ( a2 ) { v2 = (_DWORD *)this[160]; v3 = (int)(this + 159); v4 = (_DWORD *)this[159]; v10 = (unsigned int *)v3; if ( v4 != v2 ) *(_DWORD *)(v3 + 4) = sub_6CA670(v2, v2, v4); v5 = 0; if ( *(_BYTE *)(a2 + 2) ) { v6 = (int *)(a2 + 3); do { v7 = v6[1]; v8 = v6[2]; v9 = v6[5]; v11 = *v6; v14 = v6[3]; v15 = v6[4]; v12 = v7; v16 = v9; v13 = v8; sub_6CB620(v10, &v11); ++v5; v6 += 6; } while ( v5 < *(unsigned __int8 *)(a2 + 2) ); } } } //----- (00729900) -------------------------------------------------------- int __thiscall sub_729900(_DWORD *this, float a2) { _DWORD *v2; // esi v2 = this; if ( *((float *)this + 85) <= 0.1000000014901161 ) { (*(void (__stdcall **)(_DWORD))(*this + 492))(this[88]); *((_BYTE *)v2 + 349) = 1; } else { *((float *)this + 85) = *((float *)this + 85) - a2; } return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 276))(v2, *((float *)v2 + 85)); } //----- (007299A0) -------------------------------------------------------- int __fastcall sub_7299A0(_BYTE *a1) { _BYTE *v1; // esi int (__stdcall *v2)(signed int); // edx int result; // eax v1 = a1; if ( a1[321] ) goto LABEL_7; v2 = *(int (__stdcall **)(signed int))(*(_DWORD *)a1 + 552); if ( a1[312] ) result = v2(2); else result = v2(0); if ( v1[324] ) { a1 = v1; LABEL_7: result = (*(int (__thiscall **)(_BYTE *, signed int))(*(_DWORD *)v1 + 552))(a1, 1); } return result; } //----- (00729A30) -------------------------------------------------------- int __thiscall sub_729A30(_DWORD *this, int a2) { int result; // eax result = a2; this[417] = a2; return result; } //----- (00729AD0) -------------------------------------------------------- char __thiscall sub_729AD0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[86], v2[87]); return v3; } //----- (00729B00) -------------------------------------------------------- void __thiscall sub_729B00(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ecx v4 = this; v5 = (_DWORD *)this[94]; if ( v5 ) v4[95] = sub_464F50(v5); } //----- (00729B90) -------------------------------------------------------- int __thiscall sub_729B90(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[414] = a2; this[415] = a3; return result; } //----- (00729BF0) -------------------------------------------------------- int __thiscall sub_729BF0(void *this, _BYTE *a2) { int v2; // esi int result; // eax void (__thiscall *v4)(int, signed int); // edx int v5; // ecx v2 = (int)this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( !(_BYTE)result ) return result; if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; sub_8F1EF0((_DWORD *)v2, a2); byte_BA6AA4 = 0; byte_BA6AB0 = 0; if ( dword_BA6AA8 >= 1 && *a2 ) { if ( *(_DWORD *)(v2 + 304) ) { dword_BA6A7C = v2; *(_BYTE *)(v2 + 312) = 1; byte_BA6AA4 = 1; } else { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 528))(v2); if ( *(_BYTE *)(v2 + 320) ) sub_4444B0(); *(_BYTE *)(v2 + 312) = 0; byte_BA6AA4 = 1; } } else if ( dword_BA6AB4 >= 1 ) { *(_BYTE *)(v2 + 312) = 0; if ( dword_BA6A7C == v2 ) { dword_BA6A7C = 0; byte_BA6AB0 = 1; } if ( *a2 ) { if ( *(_DWORD *)(v2 + 304) == 1 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 528))(v2); if ( *(_BYTE *)(v2 + 320) ) sub_4444B0(); } byte_BA6AB0 = 1; } } if ( *(_BYTE *)(v2 + 321) ) { LABEL_29: v4 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 552); v5 = v2; goto LABEL_30; } v4 = *(void (__thiscall **)(int, signed int))(*(_DWORD *)v2 + 552); v5 = v2; if ( !*a2 ) { if ( *(_BYTE *)(v2 + 312) ) v4(v2, 2); else v4(v2, 0); if ( !*(_BYTE *)(v2 + 324) ) goto LABEL_31; goto LABEL_29; } if ( !*(_BYTE *)(v2 + 312) ) { v4(v2, 2); goto LABEL_31; } LABEL_30: v4(v5, 1); LABEL_31: result = 1; if ( byte_BA6AA4 && dword_BA6AA8 ) --dword_BA6AA8; byte_BA6AA4 = 0; if ( byte_BA6AB0 && dword_BA6AB4 ) --dword_BA6AB4; byte_BA6AB0 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; if ( dword_BA6AB4 ) --dword_BA6AB4; return result; } // BA6A7C: using guessed type int dword_BA6A7C; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; //----- (00729D90) -------------------------------------------------------- int __thiscall sub_729D90(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int (__thiscall *v4)(_DWORD *, signed int); // edx _DWORD *v5; // ecx v2 = this; if ( this[77] != a2 ) { result = (*(int (__stdcall **)(int))(*this + 556))(a2); v2[77] = a2; switch ( a2 ) { case 0: goto LABEL_3; case 1: v4 = *(int (__thiscall **)(_DWORD *, signed int))(*v2 + 492); v5 = v2; if ( v2[79] <= 1u ) goto LABEL_5; result = v4(v2, 1); break; case 2: v4 = *(int (__thiscall **)(_DWORD *, signed int))(*v2 + 492); v5 = v2; if ( v2[79] <= 2u ) LABEL_5: result = v4(v5, 0); else result = v4(v2, 2); break; case 3: if ( v2[79] <= 3u ) LABEL_3: result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 492))(v2, 0); else result = (*(int (__thiscall **)(_DWORD *, signed int))(*v2 + 492))(v2, 3); break; default: return result; } } return result; } //----- (00729E50) -------------------------------------------------------- LONG __stdcall sub_729E50(int a1, LONG a2) { int v2; // esi LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // edi void (__thiscall ***v5)(_DWORD, signed int); // esi _DWORD *v6; // ecx int (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v8; // ecx int (__thiscall ***v9)(_DWORD, signed int); // esi LONG v10; // [esp+10h] [ebp-14h] LONG v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = *(_DWORD *)(*sub_4A3B80(&v11) + 132); result = v11; if ( v11 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v11; result = InterlockedDecrement((volatile LONG *)(v11 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } if ( !(_BYTE)a2 || v2 && v2 != 1 ) { if ( !v2 || v2 == 1 ) { v8 = (_DWORD *)*sub_4A3B80(&v10); v12 = 1; sub_6C7B80(v8, a1); result = v10; v12 = -1; if ( v10 ) { v9 = (int (__thiscall ***)(_DWORD, signed int))v10; result = InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !result ) { if ( v9 ) result = (**v9)(v9, 1); } } } } else { sub_4A3B80(&a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v5 ) (**v5)(v5, 1); v6 = (_DWORD *)*sub_4A3B80(&a2); v12 = 0; sub_6C7A90(v6, a1); result = a2; v12 = -1; if ( a2 ) { v7 = (int (__thiscall ***)(_DWORD, signed int))a2; result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v7 ) result = (**v7)(v7, 1); } } } return result; } //----- (00729FC0) -------------------------------------------------------- LONG __thiscall sub_729FC0(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx _BYTE *v5; // esi bool v6; // zf unsigned __int8 (__thiscall *v7)(_BYTE *); // eax signed int v8; // edi int v9; // ebx _BYTE *v10; // esi unsigned __int8 (__thiscall *v11)(_BYTE *); // eax int v12; // edx int (__thiscall ***v13)(_DWORD, signed int); // esi _DWORD *v14; // [esp+8h] [ebp-4h] result = a3; v4 = this; v5 = (_BYTE *)this[a3 + 420]; v6 = v5[324] == 0; v14 = this; if ( !v6 ) { v7 = *(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v5 + 312); v5[324] = 0; if ( v7(v5) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v5 + 552))(v5, v5[324] != 0); v8 = 0; v9 = (int)(v4 + 420); do { if ( v8 != a3 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v14[a3 + 420] + 244))() ) { v10 = *(_BYTE **)v9; v11 = *(unsigned __int8 (__thiscall **)(_BYTE *))(**(_DWORD **)v9 + 312); v10[324] = 1; if ( v11(v10) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v10 + 552))(v10, v10[324] != 0); } } ++v8; v9 += 4; } while ( v8 < 6 ); sub_6BA650(&dword_AB6520, 41); v12 = *sub_4A3B80(&v14); result = a3; *(_DWORD *)(v12 + 152) = a3; v13 = (int (__thiscall ***)(_DWORD, signed int))v14; if ( v14 ) { result = InterlockedDecrement(v14 + 1); if ( !result ) { if ( v13 ) result = (**v13)(v13, 1); } } } return result; } //----- (0072A0D0) -------------------------------------------------------- LONG sub_72A0D0() { int v0; // ecx LONG result; // eax int (__thiscall ***v2)(_DWORD, signed int); // esi LONG v3; // [esp+8h] [ebp-10h] int v4; // [esp+14h] [ebp-4h] v0 = *sub_4A3B80(&v3); v4 = 0; sub_6C4D00(); result = v3; v4 = -1; if ( v3 ) { v2 = (int (__thiscall ***)(_DWORD, signed int))v3; result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v2 ) result = (**v2)(v2, 1); } } return result; } //----- (0072A1D0) -------------------------------------------------------- int __thiscall sub_72A1D0(_DWORD **this, int a2, char a3, signed int a4, char a5) { _DWORD **v5; // esi int result; // eax v5 = this; if ( !a3 ) return (*(int (__stdcall **)(_DWORD))(*this[a2 + 255] + 256))(0); (*(void (__stdcall **)(signed int))(*this[a2 + 255] + 256))(1); result = (*(int (__stdcall **)(signed int))(*v5[a2 + 255] + 492))(a4); if ( a5 ) { if ( a4 <= 3 ) result = sub_6BA650(&dword_AB6520, 37); else result = sub_6BA650(&dword_AB6520, 36); } return result; } //----- (0072A250) -------------------------------------------------------- _WORD *__thiscall sub_72A250(_DWORD **this, int a2, char a3, int a4) { _DWORD **v4; // edi int v5; // esi signed int v6; // ebx _WORD *result; // eax int v8; // esi signed int v9; // ebx _WORD *v10; // esi signed int v11; // ecx signed int v12; // ebx v4 = this; if ( (_BYTE)a4 ) { if ( (*(unsigned __int8 (**)(void))(*this[91] + 260))() ) { LOBYTE(a4) = 0; LOBYTE(a2) = 1; } else { LOBYTE(a4) = 1; LOBYTE(a2) = 0; } v5 = (int)(v4 + 92); v6 = 16; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v5 - 4) + 256))(a4); result = (_WORD *)(*(int (__stdcall **)(int))(**(_DWORD **)v5 + 256))(a2); v5 += 8; --v6; } while ( v6 ); v4[123] = (_DWORD *)983047; v4[124] = (_DWORD *)2031639; } else { v8 = (int)(this + 91); v9 = 32; if ( (_BYTE)a2 ) { do { result = (_WORD *)(*(int (__stdcall **)(signed int))(**(_DWORD **)v8 + 256))(1); v8 += 4; --v9; } while ( v9 ); v10 = v4 + 123; *((_WORD *)v4 + 246) = 7; *(_DWORD **)((char *)v4 + 494) = (_DWORD *)1507343; *((_WORD *)v4 + 249) = 31; } else { do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0); v8 += 4; --v9; } while ( v9 ); v10 = v4 + 123; result = v4 + 123; v11 = 4; do { if ( *result >= 0x20u ) *result = 0; ++result; --v11; } while ( v11 ); } if ( a3 ) { v12 = 4; do { (*(void (__stdcall **)(_DWORD))(*v4[(unsigned __int16)*v10 + 91] + 256))(0); if ( ++*v10 >= 0x20u ) *v10 = 0; result = (_WORD *)(*(int (__stdcall **)(signed int))(*v4[(unsigned __int16)*v10 + 91] + 256))(1); ++v10; --v12; } while ( v12 ); } } return result; } //----- (0072A3B0) -------------------------------------------------------- void __thiscall sub_72A3B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi float *v4; // eax float v5; // ST14_4 unsigned int v6; // [esp+20h] [ebp-4h] v1 = this; if ( this[89] ) { v2 = *(_DWORD *)(*sub_4A3B80(&v6) + 132); if ( v6 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } if ( !v2 || v2 == 1 ) { v6 = (unsigned int)xRight >> 1; v4 = (float *)v1[89]; v5 = (double)((unsigned int)xRight >> 1); v4[22] = v5; v4[23] = -500.0; v4[24] = 0.0; *(_WORD *)(v1[89] + 28) &= 0xFFFEu; sub_8FA270(&unk_BA6B10, flt_ACCFCC, v1[89]); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); sub_6BA650(&dword_AB6520, 34); } } } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072A4B0) -------------------------------------------------------- int __thiscall sub_72A4B0(char *this, unsigned int a2) { _DWORD **v2; // ebx int v3; // esi signed int v4; // edi int result; // eax v2 = (_DWORD **)this; v3 = (int)(this + 1680); v4 = 6; do { result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v3 + 240))(1); v3 += 4; --v4; } while ( v4 ); if ( a2 < 0xF4240 ) result = (*(int (__stdcall **)(_DWORD))(*v2[424] + 240))(0); if ( a2 < 0x186A0 ) result = (*(int (__stdcall **)(_DWORD))(*v2[423] + 240))(0); if ( a2 < 0x2710 ) result = (*(int (__stdcall **)(_DWORD))(*v2[422] + 240))(0); return result; } //----- (0072A530) -------------------------------------------------------- void __stdcall sub_72A530(int a1, int a2) { int v2; // ecx void (__thiscall ***v3)(_DWORD, signed int); // esi if ( !a1 ) { v2 = *sub_4A3B80(&a1); sub_6C4D00(); if ( a1 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))a1; if ( !InterlockedDecrement((volatile LONG *)(a1 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } } } //----- (0072A5C0) -------------------------------------------------------- LONG __stdcall sub_72A5C0(float a1) { int v1; // edi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // esi LONG v4; // [esp+Ch] [ebp-4h] v1 = *sub_4A3B80(&v4); result = v4; if ( v4 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))v4; result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } if ( v1 ) result = sub_6C5310(v1, a1); return result; } //----- (0072A620) -------------------------------------------------------- LONG __thiscall sub_72A620(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // esi LONG v5; // [esp+8h] [ebp-10h] int v6; // [esp+14h] [ebp-4h] v1 = this; v2 = *sub_4A3B80(&v5); v6 = 0; sub_6C4DA0(v1); result = v5; v6 = -1; if ( v5 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v5; result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } return result; } //----- (0072A6A0) -------------------------------------------------------- int __thiscall sub_72A6A0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { sub_4638F0(v2, *(_DWORD *)(v1[86] + 336)); *(_DWORD *)(v1[86] + 344) = *(_DWORD *)(v1[87] + 300); result = sub_465130((_DWORD *)v1[86]); } return result; } //----- (0072A6F0) -------------------------------------------------------- _DWORD *__thiscall sub_72A6F0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi _DWORD *result; // eax v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &MHDiceRewardMoneyWin::`vftable'; v1[58] = &MHDiceRewardMoneyWin::`vftable'; v1[88] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[92] = 0; v1[93] = 0; v1[94] = 0; v2 = v1[92]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[92] = 0; } v3 = v1[93]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[93] = 0; } v4 = v1[94]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[94] = 0; } result = v1; *((_BYTE *)v1 + 392) = 1; return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A0688C: using guessed type void *MHDiceRewardMoneyWin::`vftable'; // A068AC: using guessed type void *MHDiceRewardMoneyWin::`vftable'; //----- (0072A810) -------------------------------------------------------- LONG __thiscall sub_72A810(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi v1 = this; *this = &MHDiceRewardMoneyWin::`vftable'; this[58] = &MHDiceRewardMoneyWin::`vftable'; v2 = this[94]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[93]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[92]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[91]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[90]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[89]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[88]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return sub_8F10F0(v1); } // A0688C: using guessed type void *MHDiceRewardMoneyWin::`vftable'; // A068AC: using guessed type void *MHDiceRewardMoneyWin::`vftable'; //----- (0072A980) -------------------------------------------------------- LONG __thiscall sub_72A980(int this) { int v1; // ecx LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // esi LONG v4; // [esp+8h] [ebp-14h] __int16 v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v5 = *(_WORD *)(this + 393); v1 = *sub_4A3B80(&v4); v6 = 0; sub_6C4EC0(&v5); result = v4; v6 = -1; if ( v4 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))v4; result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } return result; } //----- (0072AA10) -------------------------------------------------------- int __thiscall sub_72AA10(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[92]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 472))(a2); return result; } //----- (0072AA30) -------------------------------------------------------- int __thiscall sub_72AA30(_DWORD *this, int a2) { int v2; // ecx int result; // eax v2 = this[93]; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 472))(a2); return result; } //----- (0072AA50) -------------------------------------------------------- LONG __thiscall sub_72AA50(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi LONG result; // eax int v5; // ecx void (__thiscall ***v6)(_DWORD, signed int); // esi _DWORD **v7; // ecx int (__thiscall ***v8)(_DWORD, signed int); // esi int v9; // ecx LONG v10; // [esp+Ch] [ebp-14h] LONG v11; // [esp+10h] [ebp-10h] int v12; // [esp+1Ch] [ebp-4h] v3 = this; if ( !a2 ) { v9 = *sub_4A3B80(&v10); v12 = 0; sub_6C4DA0(v3); result = v10; v12 = -1; if ( !v10 ) return result; v8 = (int (__thiscall ***)(_DWORD, signed int))v10; result = InterlockedDecrement((volatile LONG *)(v10 + 4)); goto LABEL_11; } result = a2 - 1; if ( a2 == 1 ) { v5 = *sub_4A3B80(&a2); sub_6C4DA0(v3); v12 = -1; if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } v7 = (_DWORD **)*sub_4A3B80(&v11); v12 = 2; sub_6C4D20(v7); result = v11; v12 = -1; if ( v11 ) { v8 = (int (__thiscall ***)(_DWORD, signed int))v11; result = InterlockedDecrement((volatile LONG *)(v11 + 4)); LABEL_11: if ( !result ) { if ( v8 ) result = (**v8)(v8, 1); } return result; } } return result; } //----- (0072AB70) -------------------------------------------------------- int __thiscall sub_72AB70(float *this, _DWORD *a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9) { float *v9; // esi _DWORD *v10; // esi int result; // eax v9 = this; (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*a2 + 116))(a2, *(_DWORD *)this, 0); sub_8D4A70((_DWORD *)v9 + 7, *(_DWORD **)v9); sub_8D4750((_DWORD *)v9 + 7, flt_ACCFCC); v9[4] = v9[10]; sub_8D06E0(v9 + 1, flt_ACCFCC, 1); *((_BYTE *)v9 + 64) = 1; sub_85C4D0(a2); sub_85C6F0(a2); sub_694FD0((float *)&a3, (float *)(*(_DWORD *)v9 + 52)); v10 = *(_DWORD **)v9; v10[22] = a7; result = a8; v10[23] = a8; v10[24] = a9; return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072AC00) -------------------------------------------------------- char __thiscall sub_72AC00(_BYTE *this, float a2) { _BYTE *v2; // esi int v3; // eax int v4; // ecx v2 = this; if ( this[64] ) { if ( !this[65] ) { sub_8D0730((int)(this + 4), a2); if ( v3 == 1 ) { if ( *(_DWORD *)v2 ) { v4 = *(_DWORD *)(*(_DWORD *)v2 + 32); if ( v4 ) { (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v4 + 120))(&a2, *(_DWORD *)v2); sub_410C00(&a2); } v2[64] = 0; } } } } return v2[64]; } //----- (0072AC60) -------------------------------------------------------- LONG __stdcall sub_72AC60(int a1, LONG a2) { int v2; // esi LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // edi void (__thiscall ***v5)(_DWORD, signed int); // esi _DWORD *v6; // ecx int (__thiscall ***v7)(_DWORD, signed int); // esi _DWORD *v8; // ecx int (__thiscall ***v9)(_DWORD, signed int); // esi LONG v10; // [esp+10h] [ebp-14h] LONG v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v2 = *(_DWORD *)(*sub_4A3B80(&v11) + 132); result = v11; if ( v11 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v11; result = InterlockedDecrement((volatile LONG *)(v11 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } if ( !(_BYTE)a2 || v2 && v2 != 1 ) { if ( !v2 || v2 == 1 ) { v8 = (_DWORD *)*sub_4A3B80(&v10); v12 = 1; sub_6C7B80(v8, a1); result = v10; v12 = -1; if ( v10 ) { v9 = (int (__thiscall ***)(_DWORD, signed int))v10; result = InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !result ) { if ( v9 ) result = (**v9)(v9, 1); } } } } else { sub_4A3B80(&a2); v5 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v5 ) (**v5)(v5, 1); v6 = (_DWORD *)*sub_4A3B80(&a2); v12 = 0; sub_6C7A90(v6, a1); result = a2; v12 = -1; if ( a2 ) { v7 = (int (__thiscall ***)(_DWORD, signed int))a2; result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v7 ) result = (**v7)(v7, 1); } } } return result; } //----- (0072ADD0) -------------------------------------------------------- LONG __thiscall sub_72ADD0(_DWORD *this, int a2, LONG a3) { LONG result; // eax _DWORD *v4; // ebx _BYTE *v5; // esi bool v6; // zf unsigned __int8 (__thiscall *v7)(_BYTE *); // eax signed int v8; // edi int v9; // ebx _BYTE *v10; // esi unsigned __int8 (__thiscall *v11)(_BYTE *); // eax int v12; // edx int (__thiscall ***v13)(_DWORD, signed int); // esi _DWORD *v14; // [esp+8h] [ebp-4h] result = a3; v4 = this; v5 = (_BYTE *)this[a3 + 420]; v6 = v5[324] == 0; v14 = this; if ( !v6 ) { v7 = *(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v5 + 312); v5[324] = 0; if ( v7(v5) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v5 + 552))(v5, v5[324] != 0); v8 = 0; v9 = (int)(v4 + 420); do { if ( v8 != a3 ) { if ( (*(unsigned __int8 (**)(void))(*(_DWORD *)v14[a3 + 420] + 244))() ) { v10 = *(_BYTE **)v9; v11 = *(unsigned __int8 (__thiscall **)(_BYTE *))(**(_DWORD **)v9 + 312); v10[324] = 1; if ( v11(v10) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v10 + 552))(v10, v10[324] != 0); } } ++v8; v9 += 4; } while ( v8 < 5 ); sub_6BA650(&dword_AB6520, 41); v12 = *sub_4A3B80(&v14); result = a3; *(_DWORD *)(v12 + 152) = a3; v13 = (int (__thiscall ***)(_DWORD, signed int))v14; if ( v14 ) { result = InterlockedDecrement(v14 + 1); if ( !result ) { if ( v13 ) result = (**v13)(v13, 1); } } } return result; } //----- (0072AEE0) -------------------------------------------------------- LONG sub_72AEE0() { int v0; // ecx LONG result; // eax int (__thiscall ***v2)(_DWORD, signed int); // esi LONG v3; // [esp+8h] [ebp-10h] int v4; // [esp+14h] [ebp-4h] v0 = *sub_4A3B80(&v3); v4 = 0; sub_6C4D00(); result = v3; v4 = -1; if ( v3 ) { v2 = (int (__thiscall ***)(_DWORD, signed int))v3; result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v2 ) result = (**v2)(v2, 1); } } return result; } //----- (0072AFE0) -------------------------------------------------------- int __thiscall sub_72AFE0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi float *v5; // eax float v6; // ecx float v7; // edx float *v8; // eax float v9; // edx float v10; // eax long double v11; // st7 double v12; // st7 double v13; // st6 double v14; // st7 int v15; // edi int v16; // ebx float *v17; // eax int v18; // eax void (__thiscall ***v19)(_DWORD, signed int); // esi char v21; // [esp+18h] [ebp-50h] int v22; // [esp+20h] [ebp-48h] int v23; // [esp+24h] [ebp-44h] int v24; // [esp+28h] [ebp-40h] float v25; // [esp+2Ch] [ebp-3Ch] char v26; // [esp+30h] [ebp-38h] float v27; // [esp+34h] [ebp-34h] float v28; // [esp+38h] [ebp-30h] float v29; // [esp+3Ch] [ebp-2Ch] float v30; // [esp+40h] [ebp-28h] float v31; // [esp+44h] [ebp-24h] float v32; // [esp+48h] [ebp-20h] int v33; // [esp+4Ch] [ebp-1Ch] float v34; // [esp+50h] [ebp-18h] float v35; // [esp+54h] [ebp-14h] float v36; // [esp+58h] [ebp-10h] int v37; // [esp+64h] [ebp-4h] v4 = this; v33 = this[170]; if ( v33 ) { v5 = (float *)this[a2 + 203]; v6 = v5[22]; v7 = v5[23]; v29 = v5[24]; v8 = (float *)v4[97]; v27 = v6; v30 = v8[22]; v28 = v7; v9 = v8[23]; v10 = v8[24]; v36 = v6 - v30; v35 = v28 - v9; v34 = v29 - v10; v30 = v36; v31 = v35; v32 = v34; *(float *)&v23 = 0.0; *(float *)&v24 = 1.0; v27 = 0.0; v28 = 1.0; v25 = 0.0; v29 = 0.0; sub_4430B0(&v30); sub_4430B0(&v27); v36 = v28 * v31 + v30 * v27 + v29 * v32; sub_443140(&v27, (float *)&v21, &v30); v11 = v36; if ( v36 < 0.0 ) { v36 = v11 * -1.0; v11 = v36; } v34 = acos(v11); v12 = v34; v34 = flt_BA45B4 / 7.0; if ( v34 >= v12 ) { v36 = flt_BA45B4; *(float *)&v23 = -400.0; *(float *)&v24 = 200.0; v14 = 0.0; v25 = 0.0; *(float *)&v22 = 0.0; } else { v13 = flt_BA45B4; v14 = 0.0; if ( *(float *)&v22 <= 0.0 ) { v36 = v13 + 0.4000000059604645; *(float *)&v23 = -200.0; } else { v36 = v13 - 0.4000000059604645; *(float *)&v23 = -600.0; } *(float *)&v24 = 200.0; v25 = 0.0; *(float *)&v22 = 0.0; } v15 = v23; *(float *)&v23 = v14; v16 = v24; *(float *)&v24 = v14; v25 = 1.0; v17 = sub_875260((float *)&v26, v36, (int)&v23); sub_72AB70( (float *)v4[167], (_DWORD *)v33, *(_DWORD *)v17, *((_DWORD *)v17 + 1), *((_DWORD *)v17 + 2), *((_DWORD *)v17 + 3), v15, v16, v22); } v18 = *sub_4A3B80(&v33); v37 = 0; sub_6C55B0(v18, a2, 1); v37 = -1; if ( v33 ) { v19 = (void (__thiscall ***)(_DWORD, signed int))v33; if ( !InterlockedDecrement((volatile LONG *)(v33 + 4)) ) { if ( v19 ) (**v19)(v19, 1); } } return sub_6BA650(&dword_AB6520, 35); } // BA45B4: using guessed type float flt_BA45B4; //----- (0072B280) -------------------------------------------------------- int __thiscall sub_72B280(_DWORD **this, int a2, char a3, signed int a4, char a5) { _DWORD **v5; // esi int result; // eax v5 = this; if ( !a3 ) return (*(int (__stdcall **)(_DWORD))(*this[a2 + 255] + 256))(0); (*(void (__stdcall **)(signed int))(*this[a2 + 255] + 256))(1); result = (*(int (__stdcall **)(signed int))(*v5[a2 + 255] + 492))(a4); if ( a5 ) { if ( a4 <= 3 ) result = sub_6BA650(&dword_AB6520, 37); else result = sub_6BA650(&dword_AB6520, 36); } return result; } //----- (0072B300) -------------------------------------------------------- _WORD *__thiscall sub_72B300(_DWORD **this, int a2, char a3, int a4) { _DWORD **v4; // edi int v5; // esi signed int v6; // ebx _WORD *result; // eax int v8; // esi signed int v9; // ebx _WORD *v10; // esi signed int v11; // ecx signed int v12; // ebx v4 = this; if ( (_BYTE)a4 ) { if ( (*(unsigned __int8 (**)(void))(*this[91] + 260))() ) { LOBYTE(a4) = 0; LOBYTE(a2) = 1; } else { LOBYTE(a4) = 1; LOBYTE(a2) = 0; } v5 = (int)(v4 + 92); v6 = 16; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v5 - 4) + 256))(a4); result = (_WORD *)(*(int (__stdcall **)(int))(**(_DWORD **)v5 + 256))(a2); v5 += 8; --v6; } while ( v6 ); v4[123] = (_DWORD *)983047; v4[124] = (_DWORD *)2031639; } else { v8 = (int)(this + 91); v9 = 32; if ( (_BYTE)a2 ) { do { result = (_WORD *)(*(int (__stdcall **)(signed int))(**(_DWORD **)v8 + 256))(1); v8 += 4; --v9; } while ( v9 ); v10 = v4 + 123; *((_WORD *)v4 + 246) = 7; *(_DWORD **)((char *)v4 + 494) = (_DWORD *)1507343; *((_WORD *)v4 + 249) = 31; } else { do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v8 + 256))(0); v8 += 4; --v9; } while ( v9 ); v10 = v4 + 123; result = v4 + 123; v11 = 4; do { if ( *result >= 0x20u ) *result = 0; ++result; --v11; } while ( v11 ); } if ( a3 ) { v12 = 4; do { (*(void (__stdcall **)(_DWORD))(*v4[(unsigned __int16)*v10 + 91] + 256))(0); if ( ++*v10 >= 0x20u ) *v10 = 0; result = (_WORD *)(*(int (__stdcall **)(signed int))(*v4[(unsigned __int16)*v10 + 91] + 256))(1); ++v10; --v12; } while ( v12 ); } } return result; } //----- (0072B460) -------------------------------------------------------- void __thiscall sub_72B460(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi float *v4; // eax float v5; // ST14_4 unsigned int v6; // [esp+20h] [ebp-4h] v1 = this; if ( this[89] ) { v2 = *(_DWORD *)(*sub_4A3B80(&v6) + 132); if ( v6 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } if ( !v2 || v2 == 1 ) { v6 = (unsigned int)xRight >> 1; v4 = (float *)v1[89]; v5 = (double)((unsigned int)xRight >> 1); v4[22] = v5; v4[23] = -500.0; v4[24] = 0.0; *(_WORD *)(v1[89] + 28) &= 0xFFFEu; sub_8FA270(&unk_BA6B10, flt_ACCFCC, v1[89]); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); sub_6BA650(&dword_AB6520, 34); } } } // AB6534: using guessed type int dword_AB6534; // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072B560) -------------------------------------------------------- int __thiscall sub_72B560(char *this, unsigned int a2) { _DWORD **v2; // ebx int v3; // esi signed int v4; // edi int result; // eax v2 = (_DWORD **)this; v3 = (int)(this + 1680); v4 = 6; do { result = (*(int (__stdcall **)(signed int))(**(_DWORD **)v3 + 240))(1); v3 += 4; --v4; } while ( v4 ); if ( a2 < 0x2710 ) result = (*(int (__stdcall **)(_DWORD))(*v2[423] + 240))(0); if ( a2 < 0x3E8 ) result = (*(int (__stdcall **)(_DWORD))(*v2[422] + 240))(0); if ( a2 < 0x1F4 ) result = (*(int (__stdcall **)(_DWORD))(*v2[421] + 240))(0); return result; } //----- (0072B5E0) -------------------------------------------------------- char __thiscall sub_72B5E0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, volatile LONG *a7, int a8, int a9) { volatile LONG **v9; // esi char result; // al void (__thiscall *v11)(volatile LONG **, int); // edx v9 = this; result = sub_8F43D0(this, a2, a3, a4, a5, a8, a9); if ( result ) { (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 138))(v9, 0); v11 = (void (__thiscall *)(volatile LONG **, int))*((_DWORD *)*v9 + 129); v9[79] = *(volatile LONG **)(a4 + 20); v11(v9, a6); *((float *)v9 + 85) = 1.0; v9[81] = a7; *((float *)v9 + 86) = 0.0; v9[83] = 0; *((_WORD *)v9 + 174) = 256; *((_BYTE *)v9 + 368) = 0; result = 1; } return result; } //----- (0072B680) -------------------------------------------------------- char __thiscall sub_72B680(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], 1); return (char)v2; } //----- (0072B6A0) -------------------------------------------------------- LONG __thiscall sub_72B6A0(_DWORD *this, LONG a2) { int v2; // esi LONG result; // eax _BYTE *v4; // edi int v5; // edx int v6; // ecx int v7; // eax int v8; // ecx int v9; // eax int v10; // ecx int (__thiscall ***v11)(_DWORD, signed int); // esi v2 = (int)this; result = this[83]; if ( result == 2 ) { LABEL_50: if ( result != 3 && result != 4 ) return result; goto LABEL_52; } if ( result != 3 ) { if ( result != 4 ) { result = (*(int (**)(void))(*this + 312))(); if ( !(_BYTE)result ) return result; if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; if ( dword_BA6ACC ) ++dword_BA6ACC; if ( dword_BA6AD8 ) ++dword_BA6AD8; v4 = (_BYTE *)a2; sub_8FE5D0((void *)v2, (_BYTE *)a2); result = 1; if ( dword_BA6AA8 >= 1 || dword_BA6AB4 >= 1 ) goto LABEL_42; byte_BA6AC8 = 0; byte_BA6AD4 = 0; if ( dword_BA6ACC >= 1 && *v4 ) { if ( *(_DWORD *)(v2 + 304) ) { dword_BA6A7C = v2; *(_BYTE *)(v2 + 312) = 1; } else { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 560))(v2); *(_BYTE *)(v2 + 312) = 0; } byte_BA6AC8 = 1; } else if ( dword_BA6AD8 >= 1 ) { *(_BYTE *)(v2 + 312) = 0; if ( dword_BA6A7C == v2 ) { dword_BA6A7C = 0; byte_BA6AD4 = 1; } if ( !*v4 ) goto LABEL_31; if ( *(_DWORD *)(v2 + 304) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 560))(v2); byte_BA6AD4 = 1; } if ( *v4 ) { v5 = *(_DWORD *)v2; v6 = v2; if ( *(_BYTE *)(v2 + 312) ) { (*(void (__thiscall **)(int, signed int))(v5 + 552))(v2, 1); LABEL_34: v7 = *(_DWORD *)(v2 + 288); if ( *(_BYTE *)(v2 + 328) ) { if ( *(_DWORD *)(v7 + 24) > 3u ) { v9 = *(_DWORD *)(*(_DWORD *)(v7 + 16) + 12); if ( v9 ) (*(void (__thiscall **)(int, int, signed int))(*(_DWORD *)v2 + 116))(v2, v9, 1); } } else if ( *(_DWORD *)(v7 + 24) > 3u ) { v8 = *(_DWORD *)(v7 + 16); if ( *(_DWORD *)(v8 + 12) ) { (*(void (__thiscall **)(int, LONG *, _DWORD))(*(_DWORD *)v2 + 120))(v2, &a2, *(_DWORD *)(v8 + 12)); sub_410C00(&a2); } } sub_45C700((int)&dword_BA6AC4); sub_45C700((int)&dword_BA6AD0); result = 1; LABEL_42: if ( dword_BA6AA8 ) --dword_BA6AA8; if ( dword_BA6AB4 ) --dword_BA6AB4; if ( dword_BA6ACC ) --dword_BA6ACC; if ( dword_BA6AD8 ) --dword_BA6AD8; return result; } goto LABEL_33; } LABEL_31: v5 = *(_DWORD *)v2; v6 = v2; if ( *(_BYTE *)(v2 + 312) ) { (*(void (__thiscall **)(int, signed int))(v5 + 552))(v2, 2); goto LABEL_34; } LABEL_33: (*(void (__thiscall **)(int, _DWORD))(v5 + 552))(v6, 0); goto LABEL_34; } goto LABEL_50; } LABEL_52: result = this[72]; if ( *(_DWORD *)(result + 24) > 3u ) { v10 = *(_DWORD *)(result + 16); result = *(_DWORD *)(v10 + 12); if ( result ) { (*(void (__thiscall **)(int, LONG *, _DWORD))(*(_DWORD *)v2 + 120))(v2, &a2, *(_DWORD *)(v10 + 12)); result = a2; if ( a2 ) { v11 = (int (__thiscall ***)(_DWORD, signed int))a2; result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v11 ) result = (**v11)(v11, 1); } } } } return result; } // BA6A7C: using guessed type int dword_BA6A7C; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; // BA6AC4: using guessed type int dword_BA6AC4; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; // BA6AD0: using guessed type int dword_BA6AD0; // BA6AD4: using guessed type char byte_BA6AD4; // BA6AD8: using guessed type int dword_BA6AD8; //----- (0072B910) -------------------------------------------------------- void __thiscall sub_72B910(int this, float a2) { int v2; // esi float v3; // ST0C_4 double v4; // st7 double v5; // st7 int v6; // eax int v7; // eax int v8; // eax v2 = this; if ( *(_BYTE *)(this + 368) ) { v3 = *(float *)(this + 360); a2 = a2 - *(float *)(this + 356); v4 = a2; *(float *)(this + 360) = a2; *(float *)(this + 364) = v4 - v3; } else { *(float *)(this + 356) = a2; *(float *)(this + 360) = 0.0; *(float *)(this + 364) = 0.0; *(_BYTE *)(this + 368) = 1; } if ( *(_BYTE *)(this + 349) ) { if ( *(float *)(this + 340) < 1.0 ) *(float *)(this + 340) = *(float *)(this + 364) + *(float *)(this + 340); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 276))(*(float *)(this + 340)); if ( *(_DWORD *)(v2 + 332) == 2 ) { a2 = *(float *)(v2 + 364) + *(float *)(v2 + 344); v5 = a2; *(float *)(v2 + 344) = a2; if ( v5 > 0.800000011920929 ) { v6 = *(_DWORD *)(v2 + 288); if ( *(_BYTE *)(v2 + 348) ) { if ( *(_DWORD *)(v6 + 24) > 3u ) { v7 = *(_DWORD *)(*(_DWORD *)(v6 + 16) + 12); if ( v7 ) { (*(void (__thiscall **)(int, float *, int))(*(_DWORD *)v2 + 120))(v2, &a2, v7); sub_410C00(&a2); } } *(_BYTE *)(v2 + 348) = 0; *(float *)(v2 + 344) = 0.0; } else { if ( *(_DWORD *)(v6 + 24) > 3u ) { v8 = *(_DWORD *)(*(_DWORD *)(v6 + 16) + 12); if ( v8 ) (*(void (__thiscall **)(int, int, signed int))(*(_DWORD *)v2 + 116))(v2, v8, 1); } *(_BYTE *)(v2 + 348) = 1; *(float *)(v2 + 344) = 0.0; } } } } else { sub_729900((_DWORD *)this, *(float *)(this + 364)); } } //----- (0072BA80) -------------------------------------------------------- LONG __thiscall sub_72BA80(_DWORD *this, LONG a2) { _DWORD *v2; // esi LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // esi v2 = this; (*(void (__thiscall **)(_DWORD *, LONG))(*this + 492))(this, a2); result = v2[72]; if ( *((_BYTE *)v2 + 328) ) { if ( *(_DWORD *)(result + 24) > 3u ) { result = *(_DWORD *)(*(_DWORD *)(result + 16) + 12); if ( result ) result = (*(int (__thiscall **)(_DWORD *, LONG, signed int))(*v2 + 116))(v2, result, 1); } } else if ( *(_DWORD *)(result + 24) > 3u ) { result = *(_DWORD *)(*(_DWORD *)(result + 16) + 12); if ( result ) { (*(void (__thiscall **)(_DWORD *, LONG *, LONG))(*v2 + 120))(v2, &a2, result); result = a2; if ( a2 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))a2; result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } } } return result; } //----- (0072BB10) -------------------------------------------------------- LONG __thiscall sub_72BB10(_DWORD **this, LONG a2) { LONG result; // eax _DWORD **v3; // esi _DWORD *v4; // eax result = a2; v3 = this; this[83] = (_DWORD *)a2; if ( a2 == 3 ) { v4 = this[72]; *((_BYTE *)this + 349) = 0; this[88] = (_DWORD *)2; if ( v4[6] <= 2u || (result = v4[4], !*(_DWORD *)(result + 8)) ) { ((void (__thiscall *)(_DWORD **, _DWORD, signed int))(*this)[29])(this, 0, 1); sub_85BED0(v3, 0.0, 0); result = sub_85C4D0(v3); } } else if ( a2 == 2 ) { result = 1; *((_BYTE *)this + 349) = 1; this[88] = (_DWORD *)1; } return result; } //----- (0072BB90) -------------------------------------------------------- char __thiscall sub_72BB90(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8, int a9) { volatile LONG **v9; // esi char result; // al void (__thiscall *v11)(volatile LONG **, int); // edx v9 = this; result = sub_8F43D0(this, a2, a3, a4, a5, a8, a9); if ( result ) { (*((void (__thiscall **)(volatile LONG **, signed int))*v9 + 138))(v9, 1); v11 = (void (__thiscall *)(volatile LONG **, int))*((_DWORD *)*v9 + 129); v9[79] = *(volatile LONG **)(a4 + 20); v11(v9, a6); *((_BYTE *)v9 + 324) = 0; *((_BYTE *)v9 + 320) = 0; result = 1; } return result; } //----- (0072BC00) -------------------------------------------------------- void __userpurge sub_72BC00(_DWORD *a1@, int a2@, int a3, int a4) { _DWORD *v4; // esi int v5; // ecx int v6; // ecx _DWORD **v7; // ecx char v8; // [esp+8h] [ebp-10h] int v9; // [esp+14h] [ebp-4h] v4 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 244))() ) { switch ( a3 ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: sub_729E50(a3, a4 != 0); break; case 52: sub_729FC0(v4, 52, 0); break; case 53: sub_729FC0(v4, 53, 1); break; case 54: sub_729FC0(v4, 54, 2); break; case 55: sub_729FC0(v4, 55, 3); break; case 56: sub_729FC0(v4, 56, 4); break; case 57: sub_729FC0(v4, 57, 5); break; case 58: v5 = *sub_4A3B80(&a3); sub_6C5DA0(v5, a2); v9 = -1; sub_410C00(&a3); break; case 59: sub_72A0D0(); break; case 60: v6 = *sub_4A3B80(&a4); sub_6C4E60(0); v9 = -1; sub_410C00(&a4); break; case 61: v7 = (_DWORD **)*sub_4A3B80(&v8); v9 = 2; sub_6C4D20(v7); v9 = -1; sub_410C00(&v8); break; default: return; } } } //----- (0072BE60) -------------------------------------------------------- int __thiscall sub_72BE60(_DWORD **this) { _DWORD **v1; // edi _DWORD **v2; // esi signed int v3; // ebx int v4; // esi signed int v5; // ebx __int64 v6; // rax unsigned int v7; // esi unsigned int v8; // ebx int v9; // edi signed __int64 v10; // kr00_8 int result; // eax _DWORD **v12; // ebx int v13; // esi int v14; // edi _DWORD **v15; // [esp+10h] [ebp-Ch] signed int v16; // [esp+14h] [ebp-8h] int v17; // [esp+18h] [ebp-4h] v1 = this; v15 = this; v2 = this + 203; v3 = 52; do { (*v2)[83] = 0; *((_BYTE *)*v2 + 328) = 0; sub_72BA80(*v2, 0); (*(void (__stdcall **)(_DWORD))(**v2 + 276))(1.0); (*(void (__stdcall **)(_DWORD))(*v2[52] + 256))(0); sub_8F3330(v2[52]); ++v2; --v3; } while ( v3 ); v1[417] = 0; v4 = (int)(v1 + 331); v5 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 64) + 492))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 492))(0); v4 += 4; --v5; } while ( v5 ); v6 = sub_680E60(byte_AD9238); v7 = v6; v1[419] = (_DWORD *)v6; v8 = HIDWORD(v6); v16 = 10; v17 = (int)(v1 + 361); while ( 1 ) { v9 = (signed __int64)__PAIR__(v8, v7) % 10; v10 = (signed __int64)__PAIR__(v8, v7) / 10; v8 = (unsigned __int64)((signed __int64)__PAIR__(v8, v7) / 10) >> 32; v7 = v10; if ( v9 < 0 ) v9 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v17 + 492))(v9); result = v8 | v10; if ( !(v8 | (unsigned int)v10) ) break; v17 -= 4; result = v16 - 1; v16 = result; if ( result < 0 ) goto LABEL_10; } v13 = v16 - 1; if ( v16 - 1 < 0 ) { LABEL_10: v12 = v15; goto LABEL_11; } v12 = v15; v14 = (int)&v15[v13 + 351]; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v14 + 492))(0); v14 -= 4; --v13; } while ( v13 >= 0 ); LABEL_11: *((float *)v12 + 443) = 0.0; *((float *)v12 + 444) = 0.0; v12[416] = 0; *((float *)v12 + 445) = 0.0; *(_DWORD **)((char *)v12 + 1761) = 0; return result; } //----- (0072BFD0) -------------------------------------------------------- int __thiscall sub_72BFD0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi float *v5; // eax float v6; // ecx float v7; // edx float *v8; // eax float v9; // edx float v10; // eax long double v11; // st7 double v12; // st7 double v13; // st6 double v14; // st7 int v15; // edi int v16; // ebx float *v17; // eax int v18; // eax void (__thiscall ***v19)(_DWORD, signed int); // esi char v21; // [esp+18h] [ebp-50h] int v22; // [esp+20h] [ebp-48h] int v23; // [esp+24h] [ebp-44h] int v24; // [esp+28h] [ebp-40h] float v25; // [esp+2Ch] [ebp-3Ch] char v26; // [esp+30h] [ebp-38h] float v27; // [esp+34h] [ebp-34h] float v28; // [esp+38h] [ebp-30h] float v29; // [esp+3Ch] [ebp-2Ch] float v30; // [esp+40h] [ebp-28h] float v31; // [esp+44h] [ebp-24h] float v32; // [esp+48h] [ebp-20h] int v33; // [esp+4Ch] [ebp-1Ch] float v34; // [esp+50h] [ebp-18h] float v35; // [esp+54h] [ebp-14h] float v36; // [esp+58h] [ebp-10h] int v37; // [esp+64h] [ebp-4h] v4 = this; v33 = this[170]; if ( v33 ) { v5 = (float *)this[a2 + 203]; v6 = v5[22]; v7 = v5[23]; v29 = v5[24]; v8 = (float *)v4[97]; v27 = v6; v30 = v8[22]; v28 = v7; v9 = v8[23]; v10 = v8[24]; v36 = v6 - v30; v35 = v28 - v9; v34 = v29 - v10; v30 = v36; v31 = v35; v32 = v34; *(float *)&v23 = 0.0; *(float *)&v24 = 1.0; v27 = 0.0; v28 = 1.0; v25 = 0.0; v29 = 0.0; sub_4430B0(&v30); sub_4430B0(&v27); v36 = v28 * v31 + v30 * v27 + v29 * v32; sub_443140(&v27, (float *)&v21, &v30); v11 = v36; if ( v36 < 0.0 ) { v36 = v11 * -1.0; v11 = v36; } v34 = acos(v11); v12 = v34; v34 = flt_BA45B4 / 7.0; if ( v34 >= v12 ) { v36 = flt_BA45B4; *(float *)&v23 = -400.0; *(float *)&v24 = 200.0; v14 = 0.0; v25 = 0.0; *(float *)&v22 = 0.0; } else { v13 = flt_BA45B4; v14 = 0.0; if ( *(float *)&v22 <= 0.0 ) { v36 = v13 + 0.4000000059604645; *(float *)&v23 = -200.0; } else { v36 = v13 - 0.4000000059604645; *(float *)&v23 = -600.0; } *(float *)&v24 = 200.0; v25 = 0.0; *(float *)&v22 = 0.0; } v15 = v23; *(float *)&v23 = v14; v16 = v24; *(float *)&v24 = v14; v25 = 1.0; v17 = sub_875260((float *)&v26, v36, (int)&v23); sub_72AB70( (float *)v4[167], (_DWORD *)v33, *(_DWORD *)v17, *((_DWORD *)v17 + 1), *((_DWORD *)v17 + 2), *((_DWORD *)v17 + 3), v15, v16, v22); } v18 = *sub_4A3B80(&v33); v37 = 0; sub_6C55B0(v18, a2, 1); v37 = -1; if ( v33 ) { v19 = (void (__thiscall ***)(_DWORD, signed int))v33; if ( !InterlockedDecrement((volatile LONG *)(v33 + 4)) ) { if ( v19 ) (**v19)(v19, 1); } } return sub_6BA650(&dword_AB6520, 35); } // BA45B4: using guessed type float flt_BA45B4; //----- (0072C270) -------------------------------------------------------- LONG __thiscall sub_72C270(_DWORD *this, signed int a2, char a3, char a4) { _DWORD *v4; // esi LONG result; // eax int v6; // eax int v7; // eax float v8; // ST24_4 int v9; // ebx float v10; // ST28_4 int v11; // ST2C_4 float v12; // ST18_4 unsigned int v13; // eax float v14; // ST1C_4 _DWORD **v15; // esi int v16; // [esp+40h] [ebp+10h] v4 = this; if ( a4 ) { *(_BYTE *)(this[a2 + 203] + 328) = 0; result = sub_72BA80((_DWORD *)this[a2 + 203], 2); *(_DWORD *)(v4[a2 + 203] + 332) = 4; } else if ( a3 ) { *(_BYTE *)(this[a2 + 203] + 328) = 1; v6 = this[a2 + 203]; *(_DWORD *)(v6 + 332) = 2; *(_BYTE *)(v6 + 349) = 1; *(_DWORD *)(v6 + 352) = 1; sub_72BA80((_DWORD *)this[a2 + 203], 1); v7 = v4[a2 + 203]; v8 = *(float *)(v7 + 88); v9 = v4[a2 + 203]; v10 = *(float *)(v7 + 92); v11 = *(_DWORD *)(v7 + 96); v16 = *(_DWORD *)v4[v4[416] + 406]; v12 = (double)((unsigned int)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 144))(v4[a2 + 203]) >> 1) + v8; v13 = (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 148))(v9) >> 1; *(float *)(v16 + 88) = v12; v14 = (double)v13 + v10; *(float *)(v16 + 92) = v14; *(_DWORD *)(v16 + 96) = v11; result = sub_6B0B40((float *)v4[v4[416] + 406], (_DWORD *)v4[171]); if ( (a2 > 9 && a2 < 19 || a2 == 29 || a2 == 30) && !*((_BYTE *)v4 + 1764) ) *((_BYTE *)v4 + 1764) = 1; ++v4[416]; } else { *(_BYTE *)(this[a2 + 203] + 328) = 0; v15 = (_DWORD **)this[a2 + 203]; result = (LONG)v15[72]; v15[83] = (_DWORD *)3; *((_BYTE *)v15 + 349) = 0; v15[88] = (_DWORD *)2; if ( *(_DWORD *)(result + 24) <= 2u || !*(_DWORD *)(*(_DWORD *)(result + 16) + 8) ) { ((void (__thiscall *)(_DWORD **, _DWORD, signed int))(*v15)[29])(v15, 0, 1); sub_85BED0(v15, 0.0, 0); result = sub_85C4D0(v15); } } return result; } //----- (0072C450) -------------------------------------------------------- void __userpurge sub_72C450(int a1@, int a2@, float a3, char a4) { int v4; // esi int v5; // ecx void (__cdecl *v6)(int *); // eax int *v7; // esi int v8; // ST08_4 int v9; // edi char *v10; // eax char *v11; // eax int v12; // ecx signed int v13; // [esp+Ch] [ebp+8h] v4 = a1; if ( a4 ) { if ( a3 < 0.0 ) a3 = 0.0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(a1 + 1740) + 256))(1); v13 = (signed int)a3; if ( (_WORD)v13 != *(_WORD *)(v4 + 1744) ) { v5 = *(_DWORD *)(v4 + 1740); *(_WORD *)(v4 + 1744) = v13; v6 = *(void (__cdecl **)(int *))(*(_DWORD *)v5 + 468); if ( (unsigned __int16)v13 <= 0xAu ) v6(&dword_AA8C88); else v6(&dword_AA8C68); v7 = *(int **)(v4 + 1740); v8 = a2; v9 = *v7; v10 = (char *)sub_40A910(-219736770); v11 = sub_7549E0(v10, (unsigned __int16)v13); (*(void (__thiscall **)(int *, char *, int))(v9 + 472))(v7, v11, v8); } } else { v12 = *(_DWORD *)(a1 + 1740); if ( v12 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 256))(0); } } // 72C450: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; //----- (0072C530) -------------------------------------------------------- int __thiscall sub_72C530(float *this, float *a2) { float *v2; // esi float v3; // eax float v4; // ST14_4 double v5; // st7 float *v6; // eax float v7; // ST18_4 float v8; // ST20_4 float v9; // ST24_4 signed int v10; // edi int v11; // esi int result; // eax v2 = this; v3 = *this; this[445] = 0.1; v4 = (double)(*(int (**)(void))(LODWORD(v3) + 164))(); v5 = (double)(*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 168))(v2); v6 = (float *)**((_DWORD **)v2 + 168); v7 = v5; v8 = v4 + 540.0; v6[22] = v8; v9 = v7 - 420.0; v6[23] = v9; v6[24] = 1000.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, **((_DWORD **)v2 + 168)); sub_6BA650(&dword_AB6520, 42); v2[160] = *a2; v2[163] = a2[1]; v2[166] = a2[2]; v10 = 0; v11 = (int)(v2 + 429); do { result = (*(int (__stdcall **)(unsigned int))(**(_DWORD **)v11 + 492))(LODWORD(a2[v10++]) / 0x64 - 1); v11 += 4; } while ( v10 < 3 ); return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072C630) -------------------------------------------------------- LONG __thiscall sub_72C630(_DWORD ***this, int a2, LONG a3, char a4) { _DWORD ***v4; // esi LONG result; // eax v4 = this; sub_72BB10(this[a2 + 203], a3); result = (LONG)v4[a2 + 203]; *(_BYTE *)(result + 328) = a4; if ( !a3 ) result = sub_72BA80(v4[a2 + 203], 0); return result; } //----- (0072C680) -------------------------------------------------------- char __thiscall sub_72C680(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // edi volatile LONG *v9; // edi const char *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char v12; // [esp+14h] [ebp-18h] char v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameMainMin.nif"); sub_8F66B0(v4, (int)&v14, v3); v5 = v14; if ( v14 ) { v2[74] = a2; v8 = sub_8FB140(v5, (int)"100CopperNor", (int)&v12, (int)&v13, 0); sub_8FB650(v8, v14, (int)"100CopperClick"); sub_8FB650(v8, v14, (int)"100CopperOver"); v9 = sub_8FE0F0(0, 0, (int)v8, (int)v2, 0, 0, 0); *((_DWORD *)v9 + 68) = dword_AD01E8; v10 = sub_40A910(-671533490); sub_8F2EA0((void **)v9, v10); (*(void (__thiscall **)(_DWORD *, int, int, _DWORD, _DWORD))(*v2 + 236))(v2, xRight, dword_AC2F78, 0.1, 0.30000001); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeMinButton.nif load fail", "LoadFail", v14); v5 = v14; } v15 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (0072C840) -------------------------------------------------------- LONG __thiscall sub_72C840(_DWORD *this, LONG a2, int a3) { _DWORD *v3; // edi LONG result; // eax _DWORD *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi v3 = this; result = a2; switch ( a2 ) { case 0: case 1: result = sub_72A620(this); break; case 2: v5 = sub_4A3B80(&a2); sub_6C4D60((_DWORD **)*v5); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = sub_72A620(v3); break; case 3: result = sub_72A6A0(this); break; default: return result; } return result; } //----- (0072C920) -------------------------------------------------------- LONG __thiscall sub_72C920(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx bool v3; // bl LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi int v6; // ebx _DWORD **v7; // esi signed int v8; // edi _DWORD *v9; // ecx int v10; // edx _DWORD **v11; // esi int v12; // eax _DWORD *v13; // edi int v14; // ebx int v15; // eax int v16; // eax int v17; // edi int v18; // eax _DWORD *v19; // edi int v20; // eax _DWORD *v21; // ebx int v22; // ecx int v23; // edi int v24; // eax int v25; // ebx int v26; // eax _DWORD *v27; // ebx _DWORD *v28; // ecx int v29; // [esp+10h] [ebp-28h] LONG v30; // [esp+18h] [ebp-20h] int v31; // [esp+1Ch] [ebp-1Ch] int v32; // [esp+20h] [ebp-18h] _DWORD *v33; // [esp+24h] [ebp-14h] int v34; // [esp+28h] [ebp-10h] int v35; // [esp+34h] [ebp-4h] v1 = this; v33 = this; v2 = (_DWORD *)*sub_4A3B80(&v30); v35 = 0; v3 = sub_6C4F30(v2); result = v30; v35 = -1; if ( v30 ) { v5 = (int (__thiscall ***)(_DWORD, signed int))v30; result = InterlockedDecrement((volatile LONG *)(v30 + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } if ( !v3 ) { v6 = (int)(v1 + 108); v7 = (_DWORD **)(v1 + 108); v8 = 20; do { (*(void (__stdcall **)(_DWORD))(**(v7 - 20) + 256))(0); (*(void (__stdcall **)(_DWORD))(**(v7 - 20) + 240))(0); (*(void (__stdcall **)(_DWORD))(**v7 + 256))(0); (*(void (__stdcall **)(_DWORD))(**v7 + 240))(0); (*(void (__stdcall **)(_DWORD))(*v7[20] + 256))(0); (*(void (__stdcall **)(_DWORD))(*v7[20] + 240))(0); ++v7; --v8; } while ( v8 ); v9 = (_DWORD *)v33[152]; result = v9[75] - v9[74]; v29 = v9[86]; v10 = 0; v34 = 0; if ( (signed int)(result & 0xFFFFFFFC) > 0 ) { v11 = (_DWORD **)v6; v31 = -432 - (_DWORD)v33; while ( 1 ) { v12 = (v9[75] - v9[74]) >> 2; if ( v10 < (unsigned int)v12 && (v13 = *(_DWORD **)((char *)v11 + v31 + v9[74]), (v13[84] - v13[83]) >> 2) && (v14 = *(_DWORD *)v13[83]) != 0 ) { if ( v10 < v12 && v13 ) { v16 = (*(int (**)(void))(*v9 + 164))(); v17 = (*(int (__thiscall **)(_DWORD *))(*v13 + 164))(v13) + v16; v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 164))(v14); v10 = v34; v15 = v17 + v18; } else { v15 = 0; } } else { v15 = 0; } v32 = v15 + 10; v19 = (_DWORD *)v33[152]; v20 = (v19[75] - v19[74]) >> 2; if ( v10 < (unsigned int)v20 && (v21 = *(_DWORD **)((char *)v11 + v31 + v19[74]), (v21[84] - v21[83]) >> 2) && (v22 = *(_DWORD *)v21[83]) != 0 ) { if ( v10 < v20 && v21 ) { v24 = (*(int (**)(void))(*(_DWORD *)v22 + 168))(); v25 = (*(int (__thiscall **)(_DWORD *))(*v21 + 168))(v21) + v24; v26 = (*(int (__thiscall **)(_DWORD *))(*v19 + 168))(v19); v10 = v34; v23 = v25 + v26; } else { v23 = 0; } } else { v23 = 0; } v27 = v33; if ( v10 < v33[148] - v29 ) break; if ( v10 < v33[149] - v29 ) { (*(void (__stdcall **)(signed int))(**v11 + 256))(1); (*(void (__stdcall **)(int))(**v11 + 172))(v32); v28 = *v11; goto LABEL_32; } if ( v10 < v33[150] - v29 ) { (*(void (__stdcall **)(signed int))(*v11[20] + 256))(1); (*(void (__stdcall **)(int))(*v11[20] + 172))(v32); v28 = v11[20]; goto LABEL_32; } LABEL_33: v9 = (_DWORD *)v27[152]; ++v10; result = (v9[75] - v9[74]) >> 2; ++v11; v34 = v10; if ( v10 >= result ) return result; } (*(void (__stdcall **)(signed int))(**(v11 - 20) + 256))(1); (*(void (__stdcall **)(int))(**(v11 - 20) + 172))(v32); v28 = *(v11 - 20); LABEL_32: (*(void (__stdcall **)(int))(*v28 + 176))(v23); v10 = v34; goto LABEL_33; } } return result; } //----- (0072CC30) -------------------------------------------------------- char __thiscall sub_72CC30(volatile LONG *this, unsigned int a2, int a3) { char result; // al result = a2; if ( !a2 ) return sub_72A980((int)this); if ( a2 <= 2 ) result = sub_8F2BC0(this, 1, 0, 0); return result; } //----- (0072CCD0) -------------------------------------------------------- char __thiscall sub_72CCD0(void *this, int a2) { int v2; // esi int v3; // edi char *v4; // eax volatile LONG *v5; // ecx volatile LONG *v6; // esi bool v7; // zf _DWORD *v9; // eax int v10; // eax int v11; // edi int v12; // eax volatile LONG *v13; // eax volatile LONG **v14; // eax int v15; // edi int v16; // ebx volatile LONG *v17; // eax volatile LONG **v18; // eax int v19; // eax const CHAR *v20; // eax char v21; // ST234_1 int v22; // ST238_4 int v23; // ST23C_4 int v24; // ST240_4 const CHAR *v25; // eax volatile LONG **v26; // eax int v27; // ST238_4 int v28; // ST234_4 int v29; // eax const CHAR *v30; // eax volatile LONG **v31; // eax int v32; // ST238_4 int v33; // ST234_4 int v34; // eax const CHAR *v35; // eax volatile LONG **v36; // eax int v37; // ST238_4 int v38; // ST234_4 int v39; // eax const CHAR *v40; // eax volatile LONG **v41; // eax int v42; // ST238_4 int v43; // ST234_4 int v44; // eax const CHAR *v45; // eax int v46; // eax const CHAR *v47; // eax int v48; // eax const CHAR *v49; // eax int v50; // eax const CHAR *v51; // eax int v52; // eax const CHAR *v53; // eax int v54; // eax const CHAR *v55; // eax int v56; // eax const CHAR *v57; // eax int v58; // eax const CHAR *v59; // eax int v60; // eax const CHAR *v61; // eax int v62; // eax const CHAR *v63; // eax int v64; // eax const CHAR *v65; // eax int v66; // eax const CHAR *v67; // eax int v68; // eax const CHAR *v69; // eax int v70; // eax const CHAR *v71; // eax int v72; // eax const CHAR *v73; // eax int v74; // eax const CHAR *v75; // eax int v76; // eax const CHAR *v77; // eax int v78; // eax const CHAR *v79; // eax int v80; // eax const CHAR *v81; // eax int v82; // eax const CHAR *v83; // eax int v84; // eax const CHAR *v85; // eax int v86; // eax const CHAR *v87; // eax int v88; // eax const CHAR *v89; // eax int v90; // eax const CHAR *v91; // eax int v92; // eax const CHAR *v93; // eax int v94; // eax const CHAR *v95; // eax int v96; // eax const CHAR *v97; // eax int v98; // eax const CHAR *v99; // eax int v100; // eax const CHAR *v101; // eax int v102; // eax const CHAR *v103; // eax int v104; // eax const CHAR *v105; // eax int v106; // eax volatile LONG *v107; // edi volatile LONG v108; // ebx const CHAR *v109; // eax int v110[5]; // [esp+258h] [ebp-40h] volatile LONG v111; // [esp+26Ch] [ebp-2Ch] volatile LONG *v112; // [esp+270h] [ebp-28h] int v113; // [esp+274h] [ebp-24h] int v114; // [esp+278h] [ebp-20h] int v115; // [esp+27Ch] [ebp-1Ch] int v116; // [esp+280h] [ebp-18h] int v117; // [esp+284h] [ebp-14h] int v118; // [esp+288h] [ebp-10h] int v119; // [esp+294h] [ebp-4h] volatile LONG *v120; // [esp+2A0h] [ebp+8h] volatile LONG *v121; // [esp+2A0h] [ebp+8h] volatile LONG *v122; // [esp+2A0h] [ebp+8h] volatile LONG *v123; // [esp+2A0h] [ebp+8h] volatile LONG *v124; // [esp+2A0h] [ebp+8h] volatile LONG *v125; // [esp+2A0h] [ebp+8h] volatile LONG *v126; // [esp+2A0h] [ebp+8h] volatile LONG *v127; // [esp+2A0h] [ebp+8h] volatile LONG *v128; // [esp+2A0h] [ebp+8h] volatile LONG *v129; // [esp+2A0h] [ebp+8h] volatile LONG *v130; // [esp+2A0h] [ebp+8h] volatile LONG *v131; // [esp+2A0h] [ebp+8h] volatile LONG *v132; // [esp+2A0h] [ebp+8h] volatile LONG *v133; // [esp+2A0h] [ebp+8h] volatile LONG *v134; // [esp+2A0h] [ebp+8h] volatile LONG *v135; // [esp+2A0h] [ebp+8h] volatile LONG *v136; // [esp+2A0h] [ebp+8h] volatile LONG *v137; // [esp+2A0h] [ebp+8h] volatile LONG *v138; // [esp+2A0h] [ebp+8h] volatile LONG *v139; // [esp+2A0h] [ebp+8h] volatile LONG *v140; // [esp+2A0h] [ebp+8h] volatile LONG *v141; // [esp+2A0h] [ebp+8h] volatile LONG *v142; // [esp+2A0h] [ebp+8h] volatile LONG *v143; // [esp+2A0h] [ebp+8h] volatile LONG *v144; // [esp+2A0h] [ebp+8h] volatile LONG *v145; // [esp+2A0h] [ebp+8h] volatile LONG *v146; // [esp+2A0h] [ebp+8h] volatile LONG *v147; // [esp+2A0h] [ebp+8h] volatile LONG *v148; // [esp+2A0h] [ebp+8h] volatile LONG *v149; // [esp+2A0h] [ebp+8h] volatile LONG *v150; // [esp+2A0h] [ebp+8h] volatile LONG *v151; // [esp+2A0h] [ebp+8h] volatile LONG *v152; // [esp+2A0h] [ebp+8h] volatile LONG *v153; // [esp+2A0h] [ebp+8h] volatile LONG *v154; // [esp+2A0h] [ebp+8h] volatile LONG *v155; // [esp+2A0h] [ebp+8h] volatile LONG *v156; // [esp+2A0h] [ebp+8h] volatile LONG *v157; // [esp+2A0h] [ebp+8h] volatile LONG *v158; // [esp+2A0h] [ebp+8h] volatile LONG *v159; // [esp+2A0h] [ebp+8h] v2 = (int)this; v118 = 0; v3 = dword_BA6BA0; v119 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameRateSheet.nif"); sub_8F66B0(v4, (int)&v118, v3); v5 = (volatile LONG *)v118; if ( !v118 ) { if ( off_AC0554 ) { off_AC0554("Game\\DiceGaemRateSheet.nif load fail", "LoadFail", 0); v5 = (volatile LONG *)v118; } v119 = -1; if ( !v5 ) return 0; v6 = v5; if ( InterlockedDecrement(v5 + 1) ) return 0; v7 = v6 == 0; goto LABEL_9; } *(_DWORD *)(v2 + 296) = a2; v9 = (_DWORD *)(*(int (__stdcall **)(const char *))(*v5 + 72))("Frame"); v10 = sub_85C050(v9, 8); v11 = v10; v113 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v12 = **(_DWORD **)(v11 + 40); LOBYTE(v119) = 1; if ( !v12 || (v13 = *(volatile LONG **)(v12 + 4), (v112 = v13) == 0) ) { LOBYTE(v119) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v6 = (volatile LONG *)v118; v119 = -1; if ( !v118 || InterlockedDecrement((volatile LONG *)(v118 + 4)) ) return 0; v7 = v6 == 0; goto LABEL_9; } v14 = sub_8FB140(v118, (int)"Frame", (int)&v116, (int)&v117, v13); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v14, 0, a2, (int)"DiceGaemRateSheet", 0) ) { LOBYTE(v119) = 0; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v6 = (volatile LONG *)v118; v119 = -1; if ( !v118 || InterlockedDecrement((volatile LONG *)(v118 + 4)) ) return 0; v7 = v6 == 0; LABEL_9: if ( !v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); return 0; } v15 = v116; v16 = v117; sub_456260(v110); LOBYTE(v119) = 2; sub_455FF0(v110, v2); sub_456000(v110, v15, v16); sub_456380(v110, v118); v17 = (volatile LONG *)sub_43D0D0(0x13u); if ( v17 ) v18 = sub_8FB140(v118, (int)"Theme", (int)&v116, (int)&v117, v17); else v18 = sub_8FB140(v118, (int)"Theme", (int)&v116, (int)&v117, 0); sub_8F3EB0(v116 - v15, v117 - v16, (int)v18, v2, 0, 0); sub_456820(v110, (int)"Panel01", 0); sub_456820(v110, (int)"Plane02", 0); if ( !sub_8F71E0(v118, (int)"WinTitle", &v116, &v117, &v114, &v115) ) goto LABEL_66; v19 = sub_421050(7); v120 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v19, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v120 + 488))(v120, 1); v111 = *v120; v20 = sub_40A910(372323684); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v120, v20); (*(void (__stdcall **)(_DWORD))(*v120 + 240))(0); sub_4563D0(v110, 0, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v121 = sub_4563D0(v110, 1, (int)"Btn01Nor", (int)"Btn01Click", (int)"Btn01Over", 0, 0); v21 = dword_AA8C68; v22 = dword_AA8C6C; v23 = dword_AA8C70; v24 = dword_AA8C74; v25 = sub_40A910(875959699); sub_456040((int)v121, (int)v25, v21, v22, v23, v24, 5); v26 = sub_8FB140(v118, (int)"Text_menu01", (int)&v116, (int)&v117, v112); v122 = sub_8F3EB0(v116 - v15, v117 - v16, (int)v26, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v122 + 240))(v122, 0); v27 = sub_421050(0); v28 = (*(int (**)(void))(*v122 + 148))(); v29 = (*(int (**)(void))(*v122 + 144))(); v123 = sub_8F4A20(0, 1, v29, v28, v27, (int)v122, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v123 + 488))(v123, 5); v111 = *v123; v30 = sub_40A910(-1433246604); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v123, v30); (*(void (__stdcall **)(_DWORD))(*v123 + 240))(0); v31 = sub_8FB140(v118, (int)"Text_menu02", (int)&v116, (int)&v117, v112); v124 = sub_8F3EB0(v116 - v15, v117 - v16, (int)v31, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v124 + 240))(v124, 0); v32 = sub_421050(0); v33 = (*(int (**)(void))(*v124 + 148))(); v34 = (*(int (**)(void))(*v124 + 144))(); v125 = sub_8F4A20(0, 1, v34, v33, v32, (int)v124, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v125 + 488))(v125, 5); v111 = *v125; v35 = sub_40A910(-539967767); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v125, v35); (*(void (__stdcall **)(_DWORD))(*v125 + 240))(0); v36 = sub_8FB140(v118, (int)"Text_menu03", (int)&v116, (int)&v117, v112); v126 = sub_8F3EB0(v116 - v15, v117 - v16, (int)v36, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v126 + 240))(v126, 0); v37 = sub_421050(0); v38 = (*(int (**)(void))(*v126 + 148))(); v39 = (*(int (**)(void))(*v126 + 144))(); v127 = sub_8F4A20(0, 1, v39, v38, v37, (int)v126, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v127 + 488))(v127, 5); v111 = *v127; v40 = sub_40A910(-1914002745); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v127, v40); (*(void (__stdcall **)(_DWORD))(*v127 + 240))(0); v41 = sub_8FB140(v118, (int)"Text_menu04", (int)&v116, (int)&v117, v112); v128 = sub_8F3EB0(v116 - v15, v117 - v16, (int)v41, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v128 + 240))(v128, 0); v42 = sub_421050(0); v43 = (*(int (**)(void))(*v128 + 148))(); v44 = (*(int (**)(void))(*v128 + 144))(); v129 = sub_8F4A20(0, 1, v44, v43, v42, (int)v128, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v129 + 488))(v129, 5); v111 = *v129; v45 = sub_40A910(2123874505); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v129, v45); (*(void (__stdcall **)(_DWORD))(*v129 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case01", &v116, &v117, &v114, &v115) ) goto LABEL_66; v46 = sub_421050(7); v130 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v46, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v130 + 488))(v130, 1); (*(void (__stdcall **)(int *))(*v130 + 468))(&dword_AA8D98); v111 = *v130; v47 = sub_40A910(1955976654); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v130, v47); (*(void (__stdcall **)(_DWORD))(*v130 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate01", &v116, &v117, &v114, &v115) ) goto LABEL_66; v48 = sub_421050(7); v131 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v48, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v131 + 488))(v131, 1); (*(void (__stdcall **)(int *))(*v131 + 468))(&dword_AA8D98); v111 = *v131; v49 = sub_40A910(-218620883); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v131, v49); (*(void (__stdcall **)(_DWORD))(*v131 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case02", &v116, &v117, &v114, &v115) ) goto LABEL_66; v50 = sub_421050(7); v132 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v50, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v132 + 488))(v132, 1); (*(void (__stdcall **)(int *))(*v132 + 468))(&dword_AA8D98); v111 = *v132; v51 = sub_40A910(-1888583214); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v132, v51); (*(void (__stdcall **)(_DWORD))(*v132 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate02", &v116, &v117, &v114, &v115) ) goto LABEL_66; v52 = sub_421050(7); v133 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v52, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v133 + 488))(v133, 1); (*(void (__stdcall **)(int *))(*v133 + 468))(&dword_AA8D98); v111 = *v133; v53 = sub_40A910(-218620883); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v133, v53); (*(void (__stdcall **)(_DWORD))(*v133 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case03", &v116, &v117, &v114, &v115) ) goto LABEL_66; v54 = sub_421050(7); v134 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v54, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v134 + 488))(v134, 1); (*(void (__stdcall **)(int *))(*v134 + 468))(&dword_AA8D98); v111 = *v134; v55 = sub_40A910(2105045221); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v134, v55); (*(void (__stdcall **)(_DWORD))(*v134 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate03", &v116, &v117, &v114, &v115) ) goto LABEL_66; v56 = sub_421050(7); v135 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v56, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v135 + 488))(v135, 1); (*(void (__stdcall **)(int *))(*v135 + 468))(&dword_AA8D98); v111 = *v135; v57 = sub_40A910(-218619091); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v135, v57); (*(void (__stdcall **)(_DWORD))(*v135 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case04", &v116, &v117, &v114, &v115) ) goto LABEL_66; v58 = sub_421050(7); v136 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v58, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v136 + 488))(v136, 1); (*(void (__stdcall **)(int *))(*v136 + 468))(&dword_AA8D98); v111 = *v136; v59 = sub_40A910(894205563); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v136, v59); (*(void (__stdcall **)(_DWORD))(*v136 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate04", &v116, &v117, &v114, &v115) ) goto LABEL_66; v60 = sub_421050(7); v137 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v60, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v137 + 488))(v137, 1); (*(void (__stdcall **)(int *))(*v137 + 468))(&dword_AA8D98); v111 = *v137; v61 = sub_40A910(573381677); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v137, v61); (*(void (__stdcall **)(_DWORD))(*v137 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case05", &v116, &v117, &v114, &v115) ) goto LABEL_66; v62 = sub_421050(7); v138 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v62, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v138 + 488))(v138, 1); (*(void (__stdcall **)(int *))(*v138 + 468))(&dword_AA8D98); v111 = *v138; v63 = sub_40A910(-1801075261); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v138, v63); (*(void (__stdcall **)(_DWORD))(*v138 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate05", &v116, &v117, &v114, &v115) ) goto LABEL_66; v64 = sub_421050(7); v139 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v64, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v139 + 488))(v139, 1); (*(void (__stdcall **)(int *))(*v139 + 468))(&dword_AA8D98); v111 = *v139; v65 = sub_40A910(-231989971); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v139, v65); (*(void (__stdcall **)(_DWORD))(*v139 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case06", &v116, &v117, &v114, &v115) ) goto LABEL_66; v66 = sub_421050(7); v140 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v66, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v140 + 488))(v140, 1); (*(void (__stdcall **)(int *))(*v140 + 468))(&dword_AA8D98); v111 = *v140; v67 = sub_40A910(672549397); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v140, v67); (*(void (__stdcall **)(_DWORD))(*v140 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate06", &v116, &v117, &v114, &v115) ) goto LABEL_66; v68 = sub_421050(7); v141 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v68, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v141 + 488))(v141, 1); (*(void (__stdcall **)(int *))(*v141 + 468))(&dword_AA8D98); v111 = *v141; v69 = sub_40A910(-232251347); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v141, v69); (*(void (__stdcall **)(_DWORD))(*v141 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case07", &v116, &v117, &v114, &v115) ) goto LABEL_66; v70 = sub_421050(7); v142 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v70, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v142 + 488))(v142, 1); (*(void (__stdcall **)(int *))(*v142 + 468))(&dword_AA8D98); v111 = *v142; v71 = sub_40A910(655772182); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v142, v71); (*(void (__stdcall **)(_DWORD))(*v142 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate07", &v116, &v117, &v114, &v115) ) goto LABEL_66; v72 = sub_421050(7); v143 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v72, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v143 + 488))(v143, 1); (*(void (__stdcall **)(int *))(*v143 + 468))(&dword_AA8D98); v111 = *v143; v73 = sub_40A910(-232251859); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v143, v73); (*(void (__stdcall **)(_DWORD))(*v143 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case08", &v116, &v117, &v114, &v115) ) goto LABEL_66; v74 = sub_421050(7); v144 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v74, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v144 + 488))(v144, 1); (*(void (__stdcall **)(int *))(*v144 + 468))(&dword_AA8D98); v111 = *v144; v75 = sub_40A910(638994967); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v144, v75); (*(void (__stdcall **)(_DWORD))(*v144 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate08", &v116, &v117, &v114, &v115) ) goto LABEL_66; v76 = sub_421050(7); v145 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v76, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v145 + 488))(v145, 1); (*(void (__stdcall **)(int *))(*v145 + 468))(&dword_AA8D98); v111 = *v145; v77 = sub_40A910(-231728083); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v145, v77); (*(void (__stdcall **)(_DWORD))(*v145 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case09", &v116, &v117, &v114, &v115) ) goto LABEL_66; v78 = sub_421050(7); v146 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v78, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v146 + 488))(v146, 1); (*(void (__stdcall **)(int *))(*v146 + 468))(&dword_AA8D98); v111 = *v146; v79 = sub_40A910(622217752); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v146, v79); (*(void (__stdcall **)(_DWORD))(*v146 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate09", &v116, &v117, &v114, &v115) ) goto LABEL_66; v80 = sub_421050(7); v147 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v80, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v147 + 488))(v147, 1); (*(void (__stdcall **)(int *))(*v147 + 468))(&dword_AA8D98); v111 = *v147; v81 = sub_40A910(-232121299); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v147, v81); (*(void (__stdcall **)(_DWORD))(*v147 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case10", &v116, &v117, &v114, &v115) ) goto LABEL_66; v82 = sub_421050(7); v148 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v82, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v148 + 488))(v148, 1); (*(void (__stdcall **)(int *))(*v148 + 468))(&dword_AA8D98); v111 = *v148; v83 = sub_40A910(605440537); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v148, v83); (*(void (__stdcall **)(_DWORD))(*v148 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate10", &v116, &v117, &v114, &v115) ) goto LABEL_66; v84 = sub_421050(7); v149 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v84, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v149 + 488))(v149, 1); (*(void (__stdcall **)(int *))(*v149 + 468))(&dword_AA8D98); v111 = *v149; v85 = sub_40A910(-218619091); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v149, v85); (*(void (__stdcall **)(_DWORD))(*v149 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case11", &v116, &v117, &v114, &v115) ) goto LABEL_66; v86 = sub_421050(7); v150 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v86, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v150 + 488))(v150, 1); (*(void (__stdcall **)(int *))(*v150 + 468))(&dword_AA8D98); v111 = *v150; v87 = sub_40A910(839274086); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v150, v87); (*(void (__stdcall **)(_DWORD))(*v150 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate11", &v116, &v117, &v114, &v115) ) goto LABEL_66; v88 = sub_421050(7); v151 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v88, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v151 + 488))(v151, 1); (*(void (__stdcall **)(int *))(*v151 + 468))(&dword_AA8D98); v111 = *v151; v89 = sub_40A910(-218619603); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v151, v89); (*(void (__stdcall **)(_DWORD))(*v151 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case12", &v116, &v117, &v114, &v115) ) goto LABEL_66; v90 = sub_421050(7); v152 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v90, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v152 + 488))(v152, 1); (*(void (__stdcall **)(int *))(*v152 + 468))(&dword_AA8D98); v111 = *v152; v91 = sub_40A910(777027188); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v152, v91); (*(void (__stdcall **)(_DWORD))(*v152 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate12", &v116, &v117, &v114, &v115) ) goto LABEL_66; v92 = sub_421050(7); v153 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v92, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v153 + 488))(v153, 1); (*(void (__stdcall **)(int *))(*v153 + 468))(&dword_AA8D98); v111 = *v153; v93 = sub_40A910(-218619859); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v153, v93); (*(void (__stdcall **)(_DWORD))(*v153 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case13", &v116, &v117, &v114, &v115) ) goto LABEL_66; v94 = sub_421050(7); v154 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v94, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v154 + 488))(v154, 1); (*(void (__stdcall **)(int *))(*v154 + 468))(&dword_AA8D98); v111 = *v154; v95 = sub_40A910(-1762607651); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v154, v95); (*(void (__stdcall **)(_DWORD))(*v154 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate13", &v116, &v117, &v114, &v115) ) goto LABEL_66; v96 = sub_421050(7); v155 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v96, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v155 + 488))(v155, 1); (*(void (__stdcall **)(int *))(*v155 + 468))(&dword_AA8D98); v111 = *v155; v97 = sub_40A910(-218620883); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v155, v97); (*(void (__stdcall **)(_DWORD))(*v155 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case14", &v116, &v117, &v114, &v115) ) goto LABEL_66; v98 = sub_421050(7); v156 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v98, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v156 + 488))(v156, 1); (*(void (__stdcall **)(int *))(*v156 + 468))(&dword_AA8D98); v111 = *v156; v99 = sub_40A910(-1678719002); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v156, v99); (*(void (__stdcall **)(_DWORD))(*v156 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate14", &v116, &v117, &v114, &v115) ) goto LABEL_66; v100 = sub_421050(7); v157 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v100, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v157 + 488))(v157, 1); (*(void (__stdcall **)(int *))(*v157 + 468))(&dword_AA8D98); v111 = *v157; v101 = sub_40A910(-218620627); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v157, v101); (*(void (__stdcall **)(_DWORD))(*v157 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_case15", &v116, &v117, &v114, &v115) ) goto LABEL_66; v102 = sub_421050(7); v158 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v102, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v158 + 488))(v158, 1); (*(void (__stdcall **)(int *))(*v158 + 468))(&dword_AA8D98); v111 = *v158; v103 = sub_40A910(-1997486885); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v158, v103); (*(void (__stdcall **)(_DWORD))(*v158 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_rate15", &v116, &v117, &v114, &v115) ) goto LABEL_66; v104 = sub_421050(7); v159 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v104, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v159 + 488))(v159, 1); (*(void (__stdcall **)(int *))(*v159 + 468))(&dword_AA8D98); v111 = *v159; v105 = sub_40A910(-218620371); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v111 + 472))(v159, v105); (*(void (__stdcall **)(_DWORD))(*v159 + 240))(0); if ( !sub_8F71E0(v118, (int)"Text_caseNum", &v116, &v117, &v114, &v115) ) { LABEL_66: LOBYTE(v119) = 1; sub_4562E0(v110); LOBYTE(v119) = 0; sub_410C00(&v113); v119 = -1; sub_410C00(&v118); return 0; } v106 = sub_421050(7); v107 = sub_8F4A20(v116 - v15, v117 - v16, v114, v115, v106, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v107 + 488))(v107, 1); (*(void (__thiscall **)(volatile LONG *, int *))(*v107 + 468))(v107, &dword_AA8D98); v108 = *v107; v109 = sub_40A910(-403515928); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v108 + 472))(v107, v109); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v107 + 240))(v107, 0); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, xRight, dword_AC2F78, 0.1, 0.30000001); LOBYTE(v119) = 1; sub_4562E0(v110); LOBYTE(v119) = 0; sub_410C00(&v113); v119 = -1; sub_410C00(&v118); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type int dword_AA8C6C; // AA8C70: using guessed type int dword_AA8C70; // AA8C74: using guessed type int dword_AA8C74; // AA8D98: using guessed type int dword_AA8D98; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0072E9A0) -------------------------------------------------------- int __thiscall sub_72E9A0(_WORD *this, float a2, int a3) { int v4; // esi if ( this[2] == 999 ) return 0; v4 = a3; if ( !sub_8C4C90((_DWORD *)(a3 + 120), *(_DWORD *)(a3 + 28), &a3) || !a3 ) return 0; sub_803810((float *)v4, a2); sub_85BED0(*(_DWORD ***)(v4 + 12), a2, 1); return 1; } //----- (0072EA10) -------------------------------------------------------- void __userpurge sub_72EA10(_DWORD *a1@, int a2@, int a3, int a4) { _DWORD *v4; // esi int v5; // ecx int v6; // ecx _DWORD **v7; // ecx char v8; // [esp+8h] [ebp-10h] int v9; // [esp+14h] [ebp-4h] v4 = a1; if ( (*(unsigned __int8 (**)(void))(*a1 + 244))() ) { switch ( a3 ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: sub_72AC60(a3, a4 != 0); break; case 52: sub_72ADD0(v4, 52, 0); break; case 53: sub_72ADD0(v4, 53, 1); break; case 54: sub_72ADD0(v4, 54, 2); break; case 55: sub_72ADD0(v4, 55, 3); break; case 56: sub_72ADD0(v4, 56, 4); break; case 57: v5 = *sub_4A3B80(&a3); sub_727F90(v5, a2); v9 = -1; sub_410C00(&a3); break; case 58: sub_72AEE0(); break; case 59: v6 = *sub_4A3B80(&a4); sub_727250(); v9 = -1; sub_410C00(&a4); break; case 60: v7 = (_DWORD **)*sub_4A3B80(&v8); v9 = 2; sub_6C4D20(v7); v9 = -1; sub_410C00(&v8); break; default: return; } } } //----- (0072EC50) -------------------------------------------------------- volatile LONG *__thiscall sub_72EC50(char *this) { _DWORD *v1; // ebx _DWORD **v2; // esi signed int v3; // edi int v4; // esi signed int v5; // edi unsigned int v6; // ebx unsigned int v7; // edi __int64 v8; // kr00_8 void (__thiscall ***v9)(_DWORD, signed int); // esi int v10; // eax int v11; // esi signed __int64 v12; // kr08_8 int v13; // ebx int v14; // edi volatile LONG *result; // eax volatile LONG *v16; // esi int v17; // esi int v18; // edi int v19; // [esp+14h] [ebp-18h] volatile LONG *v20; // [esp+18h] [ebp-14h] _DWORD *v21; // [esp+1Ch] [ebp-10h] int v22; // [esp+28h] [ebp-4h] v1 = this; v21 = this; v2 = (_DWORD **)(this + 812); v3 = 52; do { (*v2)[83] = 0; *((_BYTE *)*v2 + 328) = 0; sub_72BA80(*v2, 0); (*(void (__stdcall **)(_DWORD))(**v2 + 276))(1.0); (*(void (__stdcall **)(_DWORD))(*v2[52] + 256))(0); sub_8F3330(v2[52]); ++v2; --v3; } while ( v3 ); v1[414] = 0; v1[415] = 0; v1[416] = 0; v1[417] = 0; v4 = (int)(v1 + 328); v5 = 7; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 56) + 492))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 492))(0); v4 += 4; --v5; } while ( v5 ); sub_4A3B80(&v19); v22 = 0; v8 = sub_6815F0(byte_AD9238); v6 = HIDWORD(v8); v7 = v8; v22 = -1; if ( v19 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v19; if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } v10 = (int)v21; v21[418] = v8; *(_DWORD *)(v10 + 1676) = HIDWORD(v8); v19 = 11; v20 = (volatile LONG *)(v10 + 1432); while ( 1 ) { v11 = (signed __int64)__PAIR__(v6, v7) % 10; v12 = (signed __int64)__PAIR__(v6, v7) / 10; v6 = (unsigned __int64)((signed __int64)__PAIR__(v6, v7) / 10) >> 32; v7 = v12; if ( v11 < 0 ) v11 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v20 + 492))(v11); if ( !(v6 | (unsigned int)v12) ) break; --v20; if ( --v19 < 0 ) goto LABEL_14; } v17 = v19 - 1; if ( v19 - 1 < 0 ) { LABEL_14: v13 = (int)v21; goto LABEL_15; } v13 = (int)v21; v18 = (int)&v21[v17 + 347]; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v18 + 492))(0); v18 -= 4; --v17; } while ( v17 >= 0 ); LABEL_15: v14 = *sub_4A3B80(&v20); result = v20; if ( v20 ) { v16 = v20; result = (volatile LONG *)InterlockedDecrement(v20 + 1); if ( !result ) { if ( v16 ) result = (volatile LONG *)(**(int (__thiscall ***)(volatile LONG *, signed int))v16)(v16, 1); } } if ( v14 ) { *(_DWORD *)(v14 + 5280) = *(_DWORD *)(v13 + 1672); *(_DWORD *)(v14 + 5284) = *(_DWORD *)(v13 + 1676); } *(_DWORD *)(v13 + 1648) = 0; *(float *)(v13 + 1768) = 0.0; *(_DWORD *)(v13 + 1757) = 0; *(float *)(v13 + 1772) = 0.0; *(float *)(v13 + 1776) = 0.0; return result; } //----- (0072EEA0) -------------------------------------------------------- LONG __thiscall sub_72EEA0(_DWORD *this, signed int a2, char a3, char a4) { _DWORD *v4; // esi LONG result; // eax int v6; // eax int v7; // eax float v8; // ST24_4 int v9; // ebx float v10; // ST28_4 int v11; // ST2C_4 float v12; // ST18_4 unsigned int v13; // eax float v14; // ST1C_4 _DWORD **v15; // esi int v16; // [esp+40h] [ebp+10h] v4 = this; if ( a4 ) { *(_BYTE *)(this[a2 + 203] + 328) = 0; result = sub_72BA80((_DWORD *)this[a2 + 203], 2); *(_DWORD *)(v4[a2 + 203] + 332) = 4; } else if ( a3 ) { *(_BYTE *)(this[a2 + 203] + 328) = 1; v6 = this[a2 + 203]; *(_DWORD *)(v6 + 332) = 2; *(_BYTE *)(v6 + 349) = 1; *(_DWORD *)(v6 + 352) = 1; sub_72BA80((_DWORD *)this[a2 + 203], 1); v7 = v4[a2 + 203]; v8 = *(float *)(v7 + 88); v9 = v4[a2 + 203]; v10 = *(float *)(v7 + 92); v11 = *(_DWORD *)(v7 + 96); v16 = *(_DWORD *)v4[v4[412] + 402]; v12 = (double)((unsigned int)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 144))(v4[a2 + 203]) >> 1) + v8; v13 = (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 148))(v9) >> 1; *(float *)(v16 + 88) = v12; v14 = (double)v13 + v10; *(float *)(v16 + 92) = v14; *(_DWORD *)(v16 + 96) = v11; result = sub_6B0B40((float *)v4[v4[412] + 402], (_DWORD *)v4[171]); if ( (a2 > 9 && a2 < 19 || a2 == 29 || a2 == 30) && !*((_BYTE *)v4 + 1760) ) *((_BYTE *)v4 + 1760) = 1; ++v4[412]; } else { *(_BYTE *)(this[a2 + 203] + 328) = 0; v15 = (_DWORD **)this[a2 + 203]; result = (LONG)v15[72]; v15[83] = (_DWORD *)3; *((_BYTE *)v15 + 349) = 0; v15[88] = (_DWORD *)2; if ( *(_DWORD *)(result + 24) <= 2u || !*(_DWORD *)(*(_DWORD *)(result + 16) + 8) ) { ((void (__thiscall *)(_DWORD **, _DWORD, signed int))(*v15)[29])(v15, 0, 1); sub_85BED0(v15, 0.0, 0); result = sub_85C4D0(v15); } } return result; } //----- (0072F080) -------------------------------------------------------- void __userpurge sub_72F080(int a1@, int a2@, float a3, char a4) { int v4; // esi int v5; // ecx void (__cdecl *v6)(int *); // eax int *v7; // esi int v8; // ST08_4 int v9; // edi char *v10; // eax char *v11; // eax int v12; // ecx signed int v13; // [esp+Ch] [ebp+8h] v4 = a1; if ( a4 ) { if ( a3 < 0.0 ) a3 = 0.0; (*(void (__stdcall **)(signed int))(**(_DWORD **)(a1 + 1736) + 256))(1); v13 = (signed int)a3; if ( (_WORD)v13 != *(_WORD *)(v4 + 1740) ) { v5 = *(_DWORD *)(v4 + 1736); *(_WORD *)(v4 + 1740) = v13; v6 = *(void (__cdecl **)(int *))(*(_DWORD *)v5 + 468); if ( (unsigned __int16)v13 <= 0xAu ) v6(&dword_AA8C88); else v6(&dword_AA8C68); v7 = *(int **)(v4 + 1736); v8 = a2; v9 = *v7; v10 = (char *)sub_40A910(-219736770); v11 = sub_7549E0(v10, (unsigned __int16)v13); (*(void (__thiscall **)(int *, char *, int))(v9 + 472))(v7, v11, v8); } } else { v12 = *(_DWORD *)(a1 + 1736); if ( v12 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 256))(0); } } // 72F080: could not find valid save-restore pair for edi // AA8C68: using guessed type int dword_AA8C68; // AA8C88: using guessed type int dword_AA8C88; //----- (0072F160) -------------------------------------------------------- int __thiscall sub_72F160(float *this, float *a2) { float *v2; // esi float v3; // eax float v4; // ST14_4 double v5; // st7 float *v6; // eax float v7; // ST18_4 float v8; // ST20_4 float v9; // ST24_4 signed int v10; // edi int v11; // esi int result; // eax v2 = this; v3 = *this; this[444] = 0.1; v4 = (double)(*(int (**)(void))(LODWORD(v3) + 164))(); v5 = (double)(*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 168))(v2); v6 = (float *)**((_DWORD **)v2 + 168); v7 = v5; v8 = v4 + 540.0; v6[22] = v8; v9 = v7 - 420.0; v6[23] = v9; v6[24] = 1000.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, **((_DWORD **)v2 + 168)); sub_6BA650(&dword_AB6520, 42); v2[160] = *a2; v2[163] = a2[1]; v2[166] = a2[2]; v10 = 0; v11 = (int)(v2 + 428); do { result = (*(int (__stdcall **)(unsigned int))(**(_DWORD **)v11 + 492))(LODWORD(a2[v10++]) / 0x64 - 1); v11 += 4; } while ( v10 < 3 ); return result; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072F260) -------------------------------------------------------- LONG __thiscall sub_72F260(_DWORD ***this, int a2, LONG a3, char a4) { _DWORD ***v4; // esi LONG result; // eax v4 = this; sub_72BB10(this[a2 + 203], a3); result = (LONG)v4[a2 + 203]; *(_BYTE *)(result + 328) = a4; if ( !a3 ) result = sub_72BA80(v4[a2 + 203], 0); return result; } //----- (0072F2B0) -------------------------------------------------------- void __thiscall sub_72F2B0(int this, float a2) { int v2; // ebx bool v3; // zf double v4; // st7 int v5; // esi float v6; // edi _BYTE **v7; // esi signed int v8; // edi float v9; // esi int v10; // esi signed int v11; // edi float v12; // eax _DWORD *v13; // edx double v14; // st7 int (__thiscall *v15)(int); // eax float *v16; // eax double v17; // st7 int v18; // eax int v19; // eax int v20; // eax int v21; // eax int v22; // eax int v23; // eax int **v24; // edi float v25; // ecx int *v26; // esi float v27; // eax int v28; // edx int (__thiscall *v29)(int *); // eax _DWORD *v30; // ebx int *v31; // eax int v32; // ecx float *v33; // esi int v34; // edx int v35; // eax void (__thiscall *v36)(_DWORD *, _DWORD *, _DWORD); // edx _DWORD *v37; // eax float v38; // esi float v39; // eax int v40; // ecx int v41; // esi unsigned int v42; // ecx unsigned int v43; // edi signed int v44; // eax int v45; // ecx unsigned int v46; // ebx signed int v47; // edi int v48; // esi signed __int64 v49; // kr00_8 int v50; // esi int v51; // edi int v52; // ebx _BYTE *v53; // esi int v54; // eax int v55; // ecx float v56; // edi int v57; // esi signed int v58; // edi int v59; // edi void ***v60; // esi void (*v61)(void); // eax _DWORD *v62; // ecx float v63; // ebx const char *v64; // eax int v65; // edi unsigned int v66; // ecx unsigned int v67; // esi int v68; // eax int v69; // ecx int v70; // eax signed int v71; // edi unsigned int v72; // ebx int v73; // esi signed __int64 v74; // kr08_8 int v75; // esi int v76; // edi __int64 v77; // rax unsigned int v78; // esi bool v79; // cf int v80; // esi int v81; // ebx int v82; // edi signed __int64 v83; // kr10_8 int v84; // esi int v85; // edi int v86; // esi double v87; // st7 float v88; // ecx int v89; // eax int v90; // esi float v91; // edi int v92; // ebx _DWORD *v93; // edi int v94; // ecx int v95; // esi int v96; // edi signed int v97; // ebx int v98; // eax int v99; // ebx _BYTE *v100; // esi int v101; // eax int v102; // ecx float v103; // edi _BYTE *v104; // ecx float v105; // [esp+4Ch] [ebp-74h] int v106; // [esp+5Ch] [ebp-64h] int v107; // [esp+60h] [ebp-60h] int v108; // [esp+64h] [ebp-5Ch] int v109; // [esp+68h] [ebp-58h] float v110; // [esp+6Ch] [ebp-54h] float v111; // [esp+70h] [ebp-50h] int v112; // [esp+74h] [ebp-4Ch] char v113; // [esp+7Bh] [ebp-45h] float v114; // [esp+7Ch] [ebp-44h] float v115; // [esp+80h] [ebp-40h] int v116; // [esp+84h] [ebp-3Ch] int v117; // [esp+88h] [ebp-38h] signed int v118; // [esp+8Ch] [ebp-34h] int v119; // [esp+90h] [ebp-30h] void *v120; // [esp+94h] [ebp-2Ch] char v121; // [esp+A0h] [ebp-20h] unsigned int v122; // [esp+A8h] [ebp-18h] int v123; // [esp+BCh] [ebp-4h] v2 = this; v3 = *(_BYTE *)(this + 1760) == 0; v117 = this; if ( v3 ) { *(float *)(this + 1748) = a2; *(float *)(this + 1752) = 0.0; *(float *)(this + 1756) = 0.0; *(_BYTE *)(this + 1760) = 1; } else { v119 = *(int *)(this + 1752); *(float *)&v118 = a2 - *(float *)(this + 1748); v4 = *(float *)&v118; *(float *)(this + 1752) = *(float *)&v118; *(float *)(this + 1756) = v4 - *(float *)&v119; } v5 = *(_DWORD *)(*sub_4A3B80(&v118) + 132); if ( *(float *)&v118 != 0.0 ) { v6 = *(float *)&v118; if ( !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v6 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v6))(COERCE_FLOAT(LODWORD(v6)), 1); } if ( v5 != 1 ) { if ( v5 ) { if ( v5 == 2 ) { *(_DWORD *)(v2 + 1672) = 0; *(_DWORD *)(v2 + 1668) = 0; } else if ( v5 == 3 ) { if ( 0.0 != *(float *)(v2 + 1780) ) *(float *)(v2 + 1780) = *(float *)(v2 + 1756) + *(float *)(v2 + 1780); v7 = (_BYTE **)(v2 + 1624); v8 = 10; do { if ( (*v7)[64] ) sub_6B0C00(*v7, a2); ++v7; --v8; } while ( v8 ); v113 = *(_BYTE *)(*sub_4A3B80(&v118) + 72); if ( *(float *)&v118 != 0.0 ) { v9 = *(float *)&v118; if ( !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v9 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v9))(COERCE_FLOAT(LODWORD(v9)), 1); } if ( v113 ) { sub_72BE60((_DWORD **)v2); } else { v10 = v2 + 812; v11 = 52; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v10 + 324))(LODWORD(a2)); v10 += 4; --v11; } while ( v11 ); } if ( *(_BYTE *)(v2 + 1761) ) *(float *)(v2 + 1776) = *(float *)(v2 + 1756) + *(float *)(v2 + 1776); if ( *(float *)(v2 + 1776) > 2.5 && !*(_BYTE *)(v2 + 1762) ) { v3 = *(_DWORD *)(v2 + 1668) == 0; *(_BYTE *)(v2 + 1762) = 1; if ( !v3 ) { if ( *(_BYTE *)(v2 + 1764) ) { v12 = COERCE_FLOAT((*(int (**)(void))(*(_DWORD *)v2 + 164))()); v13 = *(_DWORD **)v2; *(float *)&v118 = v12; v14 = (double)SLODWORD(v12); v15 = (int (__thiscall *)(int))v13[42]; v115 = v14; *(float *)&v118 = COERCE_FLOAT(v15(v2)); v16 = *(float **)(v2 + 1768); *(float *)&v116 = (double)v118; v110 = v115 + 540.0; v17 = *(float *)&v116; v16[22] = v110; v111 = v17 - 420.0; v16[23] = v111; *(float *)&v112 = 1000.0; v16[24] = 1000.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, *(_DWORD *)(v2 + 1768)); sub_6BA650(&dword_AB6520, 45); } else { sub_6B0B40(*(float **)(v2 + 676), *(_DWORD **)(v2 + 684)); } } if ( *(_BYTE *)(v2 + 512) && (v18 = *(_DWORD *)(v2 + 508)) != 0 ) v19 = *(_DWORD *)(v18 + 12); else v19 = *(_DWORD *)(v2 + 504); *(_WORD *)(v19 + 28) |= 1u; if ( *(_BYTE *)(v2 + 556) && (v20 = *(_DWORD *)(v2 + 552)) != 0 ) v21 = *(_DWORD *)(v20 + 12); else v21 = *(_DWORD *)(v2 + 548); *(_WORD *)(v21 + 28) |= 1u; if ( *(_BYTE *)(v2 + 600) && (v22 = *(_DWORD *)(v2 + 596)) != 0 ) v23 = *(_DWORD *)(v22 + 12); else v23 = *(_DWORD *)(v2 + 592); *(_WORD *)(v23 + 28) |= 1u; v24 = (int **)(v2 + 1704); v119 = 3; do { (*(void (__stdcall **)(signed int))(**v24 + 256))(1); v25 = *((float *)*v24 + 22); v26 = *v24; v27 = *((float *)*v24 + 24); v111 = *((float *)*v24 + 23); v28 = *v26; v110 = v25; *(float *)&v112 = v27; v118 = (unsigned int)(*(int (__thiscall **)(int *))(v28 + 144))(v26) >> 1; v29 = *(int (__thiscall **)(int *))(*v26 + 148); v114 = (double)(unsigned int)v118 + v110; v118 = (unsigned int)v29(v26) >> 1; v30 = *(_DWORD **)(v117 + 684); v115 = (double)(unsigned int)v118 + v111; v116 = v112; v31 = (int *)sub_874B00((float *)&v121, 0.0, 0.0, 0.0, 0.0); v32 = v31[1]; v33 = (float *)v24[6]; v106 = *v31; v34 = v31[2]; v35 = v31[3]; v108 = v34; v36 = *(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v30 + 116); v109 = v35; v37 = *(_DWORD **)v33; v107 = v32; v36(v30, v37, 0); sub_8D4A70((_DWORD *)v33 + 7, *(_DWORD **)v33); sub_8D4750((_DWORD *)v33 + 7, flt_ACCFCC); v33[4] = v33[10]; sub_8D06E0(v33 + 1, flt_ACCFCC, 1); *((_BYTE *)v33 + 64) = 1; sub_85C4D0(v30); sub_85C6F0(v30); sub_694FD0((float *)&v106, (float *)(*(_DWORD *)v33 + 52)); v38 = *v33; v39 = v115; v40 = v116; *(float *)(LODWORD(v38) + 88) = v114; ++v24; v3 = v119-- == 1; *(float *)(LODWORD(v38) + 92) = v39; *(_DWORD *)(LODWORD(v38) + 96) = v40; } while ( !v3 ); if ( !*(_BYTE *)(v117 + 1764) ) sub_6BA650(&dword_AB6520, 44); } if ( *(_BYTE *)(v117 + 1762) && *(float *)(v117 + 1776) > 4.0 ) { v41 = v117; v42 = *(_DWORD *)(v117 + 1672); v43 = *(_DWORD *)(v117 + 1668); if ( v43 != v42 && !*(_BYTE *)(v117 + 1763) ) { v44 = abs(v43 - v42); if ( v44 <= 100000 ) { if ( v44 <= 10000 ) { if ( v44 <= 1000 ) { if ( v44 <= 100 ) { if ( v44 > 10 ) v44 = 10; } else { v44 = 100; } } else { v44 = 1000; } } else { v44 = 10000; } } else { v44 = 100000; } if ( v42 >= v43 ) v45 = v42 - v44; else v45 = v44 + v42; *(_DWORD *)(v117 + 1672) = v45; v46 = 0; v47 = v45; v116 = 7; v119 = v41 + 1352; while ( 1 ) { v48 = v47 % 10; v49 = (signed __int64)__PAIR__(v46, v47) / 10; v46 = (unsigned __int64)((signed __int64)__PAIR__(v46, v47) / 10) >> 32; v47 = v49; if ( v48 < 0 ) v48 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v119 + 492))(v48); if ( !(v46 | (unsigned int)v49) ) break; v119 -= 4; if ( --v116 < 0 ) goto LABEL_77; } v50 = v116 - 1; if ( v116 - 1 >= 0 ) { v51 = v117 + 4 * v50 + 1324; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v51 + 492))(0); v51 -= 4; --v50; } while ( v50 >= 0 ); } LABEL_77: if ( *(_DWORD *)(v117 + 1668) == *(_DWORD *)(v117 + 1672) ) *(_BYTE *)(v117 + 1763) = 1; } v52 = v117 + 1728; v119 = 3; do { v53 = *(_BYTE **)v52; if ( *(_BYTE *)(*(_DWORD *)v52 + 64) ) { if ( !v53[65] ) { sub_8D0730((int)(v53 + 4), a2); if ( v54 == 1 ) { if ( *(_DWORD *)v53 ) { v55 = *(_DWORD *)(*(_DWORD *)v53 + 32); if ( v55 ) { (*(void (__stdcall **)(signed int *, _DWORD))(*(_DWORD *)v55 + 120))(&v118, *(_DWORD *)v53); if ( *(float *)&v118 != 0.0 ) { v56 = *(float *)&v118; if ( !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v56 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v56))(COERCE_FLOAT(LODWORD(v56)), 1); } } v53[64] = 0; } } } } v52 += 4; --v119; } while ( *(float *)&v119 != 0.0 ); } } goto LABEL_128; } v57 = v2 + 1704; v58 = 3; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v57 + 256))(0); v57 += 4; --v58; } while ( v58 ); } v59 = 0; v60 = (void ***)(v2 + 812); do { v3 = (*((unsigned __int8 (__stdcall **)(LONG, LONG, float))**v60 + 83))(pt.x, pt.y, COERCE_FLOAT(LODWORD(v105))) == 0; v61 = (void (*)(void))*((_DWORD *)*v60[52] + 69); if ( v3 ) { v105 = 1.0; v61(); *((_BYTE *)*v60 + 328) = 0; (*((void (__stdcall **)(signed int))**v60 + 138))(4); } else { v105 = 0.30000001; v61(); *((_BYTE *)*v60 + 328) = 1; v62 = (_DWORD *)*sub_4A3B80(&v118); v123 = 0; sub_6C9050(v62, &v120, v59); LOBYTE(v123) = 2; if ( *(float *)&v118 != 0.0 ) { v63 = *(float *)&v118; if ( !InterlockedDecrement((volatile LONG *)(v118 + 4)) && v63 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v63))(COERCE_FLOAT(LODWORD(v63)), 1); } v64 = (const char *)v120; if ( v122 < 0x10 ) v64 = (const char *)&v120; sub_8F2EA0(*v60, v64); v123 = -1; if ( v122 >= 0x10 ) operator delete(v120); } ++v59; ++v60; } while ( v59 < 52 ); v65 = v117; v66 = *(_DWORD *)(v117 + 1672); v67 = *(_DWORD *)(v117 + 1668); if ( v67 != v66 ) { v68 = abs(v67 - v66); if ( v66 >= v67 ) v69 = v66 - v68; else v69 = v68 + v66; v70 = v117; *(_DWORD *)(v117 + 1672) = v69; v71 = *(_DWORD *)(v65 + 1672); v72 = 0; v116 = 7; v119 = v70 + 1288; while ( 1 ) { v73 = v71 % 10; v74 = (signed __int64)__PAIR__(v72, v71) / 10; v72 = (unsigned __int64)((signed __int64)__PAIR__(v72, v71) / 10) >> 32; v71 = v74; if ( v73 < 0 ) v73 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v119 + 492))(v73); if ( !(v72 | (unsigned int)v74) ) break; v119 -= 4; if ( --v116 < 0 ) goto LABEL_119; } v75 = v116 - 1; if ( v116 - 1 >= 0 ) { v76 = v117 + 4 * v75 + 1260; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v76 + 492))(0); v76 -= 4; --v75; } while ( v75 >= 0 ); } LABEL_119: v77 = sub_680E60(byte_AD9238); v78 = v77; LODWORD(v77) = v117; v79 = v78 < *(_DWORD *)(v117 + 1672); v80 = v78 - *(_DWORD *)(v117 + 1672); v116 = 10; v81 = HIDWORD(v77) - v79; *(_DWORD *)(v117 + 1676) = v80; v119 = v77 + 1444; while ( 1 ) { v82 = __PAIR__(v81, v80) % 10; v83 = __PAIR__(v81, v80) / 10; v81 = (unsigned __int64)(__PAIR__(v81, v80) / 10) >> 32; v80 = v83; if ( v82 < 0 ) v82 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v119 + 492))(v82); if ( !(v81 | (unsigned int)v83) ) break; v119 -= 4; if ( --v116 < 0 ) goto LABEL_128; } v84 = v116 - 1; if ( v116 - 1 >= 0 ) { v85 = v117 + 4 * v84 + 1404; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v85 + 492))(0); v85 -= 4; --v84; } while ( v84 >= 0 ); } } LABEL_128: v86 = v117; if ( *(float *)(v117 + 1780) > 0.1000000014901161 ) { sub_6B0C00(*(_BYTE **)(v117 + 672), a2); *(float *)&v118 = *(float *)(v86 + 1756) + *(float *)(v86 + 1772); v87 = *(float *)&v118; *(float *)(v86 + 1772) = *(float *)&v118; if ( v87 > 1.659999966621399 && !*(_BYTE *)(v86 + 1761) ) { *(_BYTE *)(v86 + 1761) = 1; v119 = v86 + 636; v116 = v86 + 508; v118 = 3; do { v88 = *(float *)&v116; if ( *(_BYTE *)(v116 + 4) && *(_DWORD *)v116 ) v89 = *(_DWORD *)(*(_DWORD *)v116 + 12); else v89 = *(_DWORD *)(v116 - 4); *(_WORD *)(v89 + 28) &= 0xFFFEu; if ( *(_BYTE *)(LODWORD(v88) + 4) ) { v90 = *(_DWORD *)v116; if ( *(_DWORD *)v116 ) { v91 = *(float *)&v119; *(_WORD *)v119 = *(_WORD *)(v119 + 2) + *(_WORD *)(v119 + 4); sub_4DC550((float *)v90); sub_803810((float *)v90, 0.0); if ( sub_4106E0((_DWORD *)v90, (unsigned __int16)*(_WORD *)LODWORD(v91)) ) { v92 = (unsigned __int16)*(_WORD *)LODWORD(v91); v93 = *(_DWORD **)(*(_DWORD *)(v90 + 128) + 4 * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v90 + 120) + 4))(v90 + 120, v92)); if ( v93 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v90 + 120) + 8))( v90 + 120, v92, v93[1]) ) { v93 = (_DWORD *)*v93; if ( !v93 ) goto LABEL_145; } v94 = v93[2]; if ( v94 ) { *(float *)(v94 + 72) = -3.4028235e38; sub_80EE70((_DWORD *)v94, a2, COERCE_FLOAT(1)); } } } } } LABEL_145: v116 += 44; v119 += 12; --v118; } while ( *(float *)&v118 != 0.0 ); sub_6BA650(&dword_AB6520, 43); } } v95 = v117 + 632; v96 = v117 + 508; v97 = 3; do { if ( *(_BYTE *)(v96 + 4) ) v98 = *(_DWORD *)v96; else v98 = 0; (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v95 + 4))(v95, LODWORD(a2), v98); v96 += 44; v95 += 12; --v97; } while ( v97 ); v99 = v117; v100 = *(_BYTE **)(v117 + 668); if ( v100[64] ) { if ( !v100[65] ) { sub_8D0730((int)(v100 + 4), a2); if ( v101 == 1 ) { if ( *(_DWORD *)v100 ) { v102 = *(_DWORD *)(*(_DWORD *)v100 + 32); if ( v102 ) { (*(void (__stdcall **)(int *, _DWORD))(*(_DWORD *)v102 + 120))(&v119, *(_DWORD *)v100); if ( *(float *)&v119 != 0.0 ) { v103 = *(float *)&v119; if ( !InterlockedDecrement((volatile LONG *)(v119 + 4)) && v103 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v103))(COERCE_FLOAT(LODWORD(v103)), 1); } } v100[64] = 0; } } } } v104 = *(_BYTE **)(v99 + 676); if ( v104[64] ) sub_6B0C00(v104, a2); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (0072FDB0) -------------------------------------------------------- unsigned __int8 __thiscall sub_72FDB0(_DWORD *this, unsigned __int8 *a2, signed int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // ecx unsigned __int8 result; // al signed int v7; // eax _DWORD *v8; // ebx int v9; // edx _DWORD *v10; // eax _DWORD *v11; // ecx int v12; // edi _DWORD *v13; // edi _DWORD **v14; // ebx int v15; // eax volatile LONG *v16; // eax _DWORD *v17; // ecx volatile LONG *v18; // eax _DWORD *v19; // ecx volatile LONG *v20; // eax _DWORD *v21; // ecx int v22; // [esp+4h] [ebp-4h] v3 = this; if ( (_BYTE)a3 ) { v4 = (_DWORD *)this[403]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) *(_DWORD *)(v5 + 32) = 0; } return sub_521E30(v3 + 402); } v7 = this[405]; if ( v7 == 21 ) { v8 = (_DWORD *)this[403]; a3 = 3; do { v9 = v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) *(_DWORD *)(v9 + 32) = 0; v10 = (_DWORD *)v3[403]; if ( v10 ) { while ( 1 ) { v11 = v10 + 2; v12 = (int)v10; v10 = (_DWORD *)*v10; if ( v9 == *v11 ) break; if ( !v10 ) goto LABEL_14; } } else { LABEL_14: v12 = 0; } v22 = v12; if ( v12 ) sub_403620(v3 + 402, (_DWORD **)&v22); --a3; } while ( a3 ); v7 = 18; goto LABEL_20; } if ( v7 > 0 ) { LABEL_20: v13 = (_DWORD *)v3[403]; if ( v13 ) { v14 = (_DWORD **)&v3[v7 + 371]; do { v15 = v13[2]; v13 = (_DWORD *)*v13; if ( v15 ) { *(_DWORD *)(v15 + 32) = 0; sub_442AC0(*v14, v15); --v14; } } while ( v13 ); } } result = *a2; if ( *a2 && a2[1] && a2[2] ) { v16 = sub_8F3EB0(0, 0, v3[result + 389], 0, 0, 0); v17 = (_DWORD *)v3[371]; a3 = (signed int)v16; sub_442AC0(v17, (int)v16); sub_6B9900(v3 + 402, &a3); v18 = sub_8F3EB0(0, 0, v3[a2[1] + 389], 0, 0, 0); v19 = (_DWORD *)v3[370]; a3 = (signed int)v18; sub_442AC0(v19, (int)v18); sub_6B9900(v3 + 402, &a3); v20 = sub_8F3EB0(0, 0, v3[a2[2] + 389], 0, 0, 0); v21 = (_DWORD *)v3[369]; a3 = (signed int)v20; sub_442AC0(v21, (int)v20); result = (unsigned int)sub_6B9900(v3 + 402, &a3); } return result; } //----- (0072FF80) -------------------------------------------------------- LONG __thiscall sub_72FF80(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; if ( sub_8EF6C0(&unk_BA6A18, dword_ACDD68) ) sub_4E3710(v2[152], v2[151]); return sub_72C920(v2); } //----- (0072FFC0) -------------------------------------------------------- char __thiscall sub_72FFC0(volatile LONG *this, int a2) { char result; // al volatile LONG *v3; // edi result = dword_ACDC84; v3 = this; if ( *(_BYTE *)(dword_ACDC84 + 33) & 2 ) { *(_BYTE *)(sub_8EF6C0(&unk_BA6A18, dword_ACDD68) + 2659) = 0; result = sub_8FA3D0(&unk_BA6B10, v3); if ( result ) result = sub_517DE0(&unk_BA6B54, (int)v3, 1, 0, 0); } return result; } // ACDC84: using guessed type int dword_ACDC84; //----- (00730020) -------------------------------------------------------- void __thiscall sub_730020(int this, float a2) { int v2; // edi bool v3; // zf double v4; // st7 int v5; // esi float v6; // ebx _BYTE **v7; // esi signed int v8; // ebx char v9; // bl float v10; // esi int v11; // esi signed int v12; // ebx float v13; // eax int v14; // edx double v15; // st7 int (__thiscall *v16)(int); // eax float *v17; // eax double v18; // st7 int v19; // eax int v20; // eax int v21; // eax int v22; // eax int v23; // eax int v24; // eax int **v25; // edi float v26; // ecx int *v27; // esi float v28; // eax int v29; // edx int (__thiscall *v30)(int *); // eax _DWORD *v31; // ebx int *v32; // eax int v33; // ecx float *v34; // esi int v35; // edx int v36; // eax void (__thiscall *v37)(_DWORD *, _DWORD *, _DWORD); // edx _DWORD *v38; // eax float v39; // esi float v40; // eax int v41; // ecx int v42; // ecx unsigned int v43; // esi unsigned int v44; // ebx unsigned int v45; // edi signed int v46; // eax signed int v47; // edi unsigned int v48; // ebx int v49; // esi signed __int64 v50; // kr00_8 int v51; // esi int v52; // edi int v53; // ebx _BYTE *v54; // esi int v55; // eax int v56; // ecx float v57; // edi int v58; // esi signed int v59; // ebx int v60; // ebx void ***v61; // esi void (*v62)(void); // eax _DWORD *v63; // ecx const char *v64; // eax unsigned int v65; // esi int v66; // eax unsigned int v67; // ecx unsigned int v68; // ebx int v69; // eax signed int v70; // edi unsigned int v71; // ebx int v72; // esi signed __int64 v73; // kr08_8 int v74; // esi int v75; // edi __int64 v76; // rax int v77; // esi bool v78; // cf unsigned int v79; // edi int v80; // ebx int v81; // esi signed __int64 v82; // kr10_8 int v83; // esi int v84; // edi int v85; // edi float v86; // esi int v87; // eax int v88; // esi double v89; // st7 float v90; // ecx int v91; // eax int v92; // esi float v93; // edi int v94; // ebx _DWORD *v95; // edi int v96; // ecx int v97; // esi int v98; // edi signed int v99; // ebx int v100; // eax int v101; // ebx _BYTE *v102; // esi int v103; // eax int v104; // ecx float v105; // edi _BYTE *v106; // ecx float v107; // [esp+54h] [ebp-70h] int v108; // [esp+64h] [ebp-60h] int v109; // [esp+68h] [ebp-5Ch] int v110; // [esp+6Ch] [ebp-58h] int v111; // [esp+70h] [ebp-54h] float v112; // [esp+74h] [ebp-50h] float v113; // [esp+78h] [ebp-4Ch] int v114; // [esp+7Ch] [ebp-48h] float v115; // [esp+80h] [ebp-44h] float v116; // [esp+84h] [ebp-40h] int v117; // [esp+88h] [ebp-3Ch] int v118; // [esp+8Ch] [ebp-38h] float v119; // [esp+90h] [ebp-34h] int v120; // [esp+94h] [ebp-30h] void *v121; // [esp+98h] [ebp-2Ch] char v122; // [esp+A4h] [ebp-20h] unsigned int v123; // [esp+ACh] [ebp-18h] int v124; // [esp+C0h] [ebp-4h] v2 = this; v3 = *(_BYTE *)(this + 1756) == 0; v118 = this; if ( v3 ) { *(float *)(this + 1744) = a2; *(float *)(this + 1748) = 0.0; *(float *)(this + 1752) = 0.0; *(_BYTE *)(this + 1756) = 1; } else { v120 = *(int *)(this + 1748); v119 = a2 - *(float *)(this + 1744); v4 = v119; *(float *)(this + 1748) = v119; *(float *)(this + 1752) = v4 - *(float *)&v120; } v5 = *(_DWORD *)(*sub_4A3B80(&v119) + 132); if ( v119 != 0.0 ) { v6 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && v6 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v6))(COERCE_FLOAT(LODWORD(v6)), 1); } if ( v5 != 1 ) { if ( v5 ) { if ( v5 == 2 ) { *(_DWORD *)(v2 + 1664) = 0; *(_DWORD *)(v2 + 1668) = 0; *(_DWORD *)(v2 + 1656) = 0; *(_DWORD *)(v2 + 1660) = 0; } else if ( v5 == 3 ) { if ( 0.0 != *(float *)(v2 + 1776) ) *(float *)(v2 + 1776) = *(float *)(v2 + 1752) + *(float *)(v2 + 1776); v7 = (_BYTE **)(v2 + 1608); v8 = 10; do { if ( (*v7)[64] ) sub_6B0C00(*v7, a2); ++v7; --v8; } while ( v8 ); if ( *(_DWORD *)(v2 + 1656) != *(_DWORD *)(v2 + 1664) || *(_DWORD *)(v2 + 1660) != *(_DWORD *)(v2 + 1668) ) OutputDebugStringA(&byte_A05CF4); v9 = *(_BYTE *)(*sub_4A3B80(&v119) + 72); if ( v119 != 0.0 ) { v10 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && v10 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v10))(COERCE_FLOAT(LODWORD(v10)), 1); } if ( v9 ) { sub_72EC50((char *)v2); } else { v11 = v2 + 812; v12 = 52; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v11 + 324))(LODWORD(a2)); v11 += 4; --v12; } while ( v12 ); } if ( *(_BYTE *)(v2 + 1757) ) *(float *)(v2 + 1772) = *(float *)(v2 + 1752) + *(float *)(v2 + 1772); if ( *(float *)(v2 + 1772) > 2.5 && !*(_BYTE *)(v2 + 1758) ) { v3 = *(_DWORD *)(v2 + 1660) == 0; *(_BYTE *)(v2 + 1758) = 1; if ( !v3 || *(_DWORD *)(v2 + 1656) ) { if ( *(_BYTE *)(v2 + 1760) ) { v13 = COERCE_FLOAT((*(int (**)(void))(*(_DWORD *)v2 + 164))()); v14 = *(_DWORD *)v2; v119 = v13; v15 = (double)SLODWORD(v13); v16 = *(int (__thiscall **)(int))(v14 + 168); v116 = v15; v119 = COERCE_FLOAT(v16(v2)); v17 = *(float **)(v2 + 1764); *(float *)&v117 = (double)SLODWORD(v119); v112 = v116 + 540.0; v18 = *(float *)&v117; v17[22] = v112; v113 = v18 - 420.0; v17[23] = v113; *(float *)&v114 = 1000.0; v17[24] = 1000.0; sub_8FA270(&unk_BA6B10, flt_ACCFCC, *(_DWORD *)(v2 + 1764)); sub_6BA650(&dword_AB6520, 45); } else { sub_6B0B40(*(float **)(v2 + 676), *(_DWORD **)(v2 + 684)); } } if ( *(_BYTE *)(v2 + 512) && (v19 = *(_DWORD *)(v2 + 508)) != 0 ) v20 = *(_DWORD *)(v19 + 12); else v20 = *(_DWORD *)(v2 + 504); *(_WORD *)(v20 + 28) |= 1u; if ( *(_BYTE *)(v2 + 556) && (v21 = *(_DWORD *)(v2 + 552)) != 0 ) v22 = *(_DWORD *)(v21 + 12); else v22 = *(_DWORD *)(v2 + 548); *(_WORD *)(v22 + 28) |= 1u; if ( *(_BYTE *)(v2 + 600) && (v23 = *(_DWORD *)(v2 + 596)) != 0 ) v24 = *(_DWORD *)(v23 + 12); else v24 = *(_DWORD *)(v2 + 592); *(_WORD *)(v24 + 28) |= 1u; v25 = (int **)(v2 + 1700); v120 = 3; do { (*(void (__stdcall **)(signed int))(**v25 + 256))(1); v26 = *((float *)*v25 + 22); v27 = *v25; v28 = *((float *)*v25 + 24); v113 = *((float *)*v25 + 23); v29 = *v27; v112 = v26; *(float *)&v114 = v28; LODWORD(v119) = (unsigned int)(*(int (__thiscall **)(int *))(v29 + 144))(v27) >> 1; v30 = *(int (__thiscall **)(int *))(*v27 + 148); v115 = (double)LODWORD(v119) + v112; LODWORD(v119) = (unsigned int)v30(v27) >> 1; v31 = *(_DWORD **)(v118 + 684); v116 = (double)LODWORD(v119) + v113; v117 = v114; v32 = (int *)sub_874B00((float *)&v122, 0.0, 0.0, 0.0, 0.0); v33 = v32[1]; v34 = (float *)v25[6]; v108 = *v32; v35 = v32[2]; v36 = v32[3]; v110 = v35; v37 = *(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v31 + 116); v111 = v36; v38 = *(_DWORD **)v34; v109 = v33; v37(v31, v38, 0); sub_8D4A70((_DWORD *)v34 + 7, *(_DWORD **)v34); sub_8D4750((_DWORD *)v34 + 7, flt_ACCFCC); v34[4] = v34[10]; sub_8D06E0(v34 + 1, flt_ACCFCC, 1); *((_BYTE *)v34 + 64) = 1; sub_85C4D0(v31); sub_85C6F0(v31); sub_694FD0((float *)&v108, (float *)(*(_DWORD *)v34 + 52)); v39 = *v34; v40 = v116; v41 = v117; *(float *)(LODWORD(v39) + 88) = v115; ++v25; v3 = v120-- == 1; *(float *)(LODWORD(v39) + 92) = v40; *(_DWORD *)(LODWORD(v39) + 96) = v41; } while ( !v3 ); if ( !*(_BYTE *)(v118 + 1760) ) sub_6BA650(&dword_AB6520, 44); } if ( *(_BYTE *)(v118 + 1758) ) { v42 = v118; if ( *(float *)(v118 + 1772) > 4.0 ) { v43 = *(_DWORD *)(v118 + 1664); v44 = *(_DWORD *)(v118 + 1656); v45 = *(_DWORD *)(v118 + 1668); if ( (v44 != v43 || *(_DWORD *)(v118 + 1660) != v45) && !*(_BYTE *)(v118 + 1759) ) { v46 = abs(v44 - v43); if ( v46 <= 100000 ) { if ( v46 <= 10000 ) { if ( v46 <= 1000 ) { if ( v46 <= 100 ) { if ( v46 > 10 ) v46 = 10; } else { v46 = 100; } } else { v46 = 1000; } } else { v46 = 10000; } } else { v46 = 100000; } if ( v45 > *(_DWORD *)(v118 + 1660) || v45 >= *(_DWORD *)(v118 + 1660) && v43 >= v44 ) *(_QWORD *)(v118 + 1664) = __PAIR__(v45, v43) - v46; else *(_QWORD *)(v118 + 1664) = __PAIR__(v45, v43) + v46; v47 = *(_DWORD *)(v42 + 1664); v48 = *(_DWORD *)(v42 + 1668); v117 = 6; v120 = v42 + 1336; while ( 1 ) { v49 = v47 % 10; v50 = (signed __int64)__PAIR__(v48, v47) / 10; v48 = (unsigned __int64)((signed __int64)__PAIR__(v48, v47) / 10) >> 32; v47 = v50; if ( v49 < 0 ) v49 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v120 + 492))(v49); if ( !(v48 | (unsigned int)v50) ) break; v120 -= 4; if ( --v117 < 0 ) goto LABEL_84; } v51 = v117 - 1; if ( v117 - 1 >= 0 ) { v52 = v118 + 4 * v51 + 1312; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v52 + 492))(0); v52 -= 4; --v51; } while ( v51 >= 0 ); } LABEL_84: if ( *(_DWORD *)(v118 + 1656) == *(_DWORD *)(v118 + 1664) && *(_DWORD *)(v118 + 1660) == *(_DWORD *)(v118 + 1668) ) { *(_BYTE *)(v118 + 1759) = 1; } } v53 = v118 + 1724; v120 = 3; do { v54 = *(_BYTE **)v53; if ( *(_BYTE *)(*(_DWORD *)v53 + 64) ) { if ( !v54[65] ) { sub_8D0730((int)(v54 + 4), a2); if ( v55 == 1 ) { if ( *(_DWORD *)v54 ) { v56 = *(_DWORD *)(*(_DWORD *)v54 + 32); if ( v56 ) { (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v56 + 120))(&v119, *(_DWORD *)v54); if ( v119 != 0.0 ) { v57 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && v57 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v57))(COERCE_FLOAT(LODWORD(v57)), 1); } } v54[64] = 0; } } } } v53 += 4; --v120; } while ( *(float *)&v120 != 0.0 ); } } } goto LABEL_149; } v58 = v2 + 1700; v59 = 3; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v58 + 256))(0); v58 += 4; --v59; } while ( v59 ); } v60 = 0; v61 = (void ***)(v2 + 812); do { v3 = (*((unsigned __int8 (__stdcall **)(LONG, LONG, float))**v61 + 83))(pt.x, pt.y, COERCE_FLOAT(LODWORD(v107))) == 0; v62 = (void (*)(void))*((_DWORD *)*v61[52] + 69); if ( v3 ) { v107 = 1.0; v62(); *((_BYTE *)*v61 + 328) = 0; (*((void (__stdcall **)(signed int))**v61 + 138))(4); } else { v107 = 0.30000001; v62(); *((_BYTE *)*v61 + 328) = 1; v63 = (_DWORD *)*sub_4A3B80(&v119); v124 = 0; sub_6C9050(v63, &v121, v60); LOBYTE(v124) = 2; if ( v119 != 0.0 ) { *(float *)&v120 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && *(float *)&v120 != 0.0 ) (**(void (__stdcall ***)(signed int))v120)(1); } v64 = (const char *)v121; if ( v123 < 0x10 ) v64 = (const char *)&v121; sub_8F2EA0(*v61, v64); v124 = -1; if ( v123 >= 0x10 ) operator delete(v121); } ++v60; ++v61; } while ( v60 < 52 ); v65 = *(_DWORD *)(v2 + 1664); v66 = *(_DWORD *)(v2 + 1656); v67 = *(_DWORD *)(v2 + 1668); v68 = *(_DWORD *)(v2 + 1660); if ( v66 != v65 || v68 != v67 ) { v69 = abs(v66 - v65); if ( v67 > v68 || v67 >= v68 && v65 >= *(_DWORD *)(v2 + 1656) ) *(_QWORD *)(v2 + 1664) = __PAIR__(v67, v65) - v69; else *(_QWORD *)(v2 + 1664) = __PAIR__(v67, v65) + v69; v70 = *(_DWORD *)(v118 + 1664); v71 = *(_DWORD *)(v118 + 1668); v117 = 6; v120 = v118 + 1280; while ( 1 ) { v72 = v70 % 10; v73 = (signed __int64)__PAIR__(v71, v70) / 10; v71 = (unsigned __int64)((signed __int64)__PAIR__(v71, v70) / 10) >> 32; v70 = v73; if ( v72 < 0 ) v72 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v120 + 492))(v72); if ( !(v71 | (unsigned int)v73) ) break; v120 -= 4; if ( --v117 < 0 ) goto LABEL_130; } v74 = v117 - 1; if ( v117 - 1 >= 0 ) { v75 = v118 + 4 * v74 + 1256; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v75 + 492))(0); v75 -= 4; --v74; } while ( v74 >= 0 ); } LABEL_130: sub_4A3B80(&v119); v124 = 3; v76 = sub_6815F0(byte_AD9238); v77 = v118; v78 = (unsigned int)v76 < *(_DWORD *)(v118 + 1664); LODWORD(v76) = v76 - *(_DWORD *)(v118 + 1664); v124 = -1; v79 = v76; v80 = HIDWORD(v76) - (v78 + *(_DWORD *)(v118 + 1668)); if ( v119 != 0.0 ) { *(float *)&v120 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && *(float *)&v120 != 0.0 ) (**(void (__stdcall ***)(signed int))v120)(1); } *(_DWORD *)(v118 + 1672) = v79; *(_DWORD *)(v77 + 1676) = v80; v117 = 11; v120 = v77 + 1432; while ( 1 ) { v81 = __PAIR__(v80, v79) % 10; v82 = __PAIR__(v80, v79) / 10; v80 = (unsigned __int64)(__PAIR__(v80, v79) / 10) >> 32; v79 = v82; if ( v81 < 0 ) v81 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v120 + 492))(v81); if ( !(v80 | (unsigned int)v82) ) break; v120 -= 4; if ( --v117 < 0 ) goto LABEL_143; } v83 = v117 - 1; if ( v117 - 1 >= 0 ) { v84 = v118 + 4 * v83 + 1388; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v84 + 492))(0); v84 -= 4; --v83; } while ( v83 >= 0 ); } LABEL_143: v85 = *sub_4A3B80(&v119); if ( v119 != 0.0 ) { v86 = v119; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v119) + 4)) && v86 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v86))(COERCE_FLOAT(LODWORD(v86)), 1); } if ( v85 ) { v87 = v118; *(_DWORD *)(v85 + 5280) = *(_DWORD *)(v118 + 1672); *(_DWORD *)(v85 + 5284) = *(_DWORD *)(v87 + 1676); } } LABEL_149: v88 = v118; if ( *(float *)(v118 + 1776) > 0.1000000014901161 ) { sub_6B0C00(*(_BYTE **)(v118 + 672), a2); v119 = *(float *)(v88 + 1752) + *(float *)(v88 + 1768); v89 = v119; *(float *)(v88 + 1768) = v119; if ( v89 > 1.659999966621399 && !*(_BYTE *)(v88 + 1757) ) { *(_BYTE *)(v88 + 1757) = 1; v120 = v88 + 636; v117 = v88 + 508; LODWORD(v119) = 3; do { v90 = *(float *)&v117; if ( *(_BYTE *)(v117 + 4) && *(_DWORD *)v117 ) v91 = *(_DWORD *)(*(_DWORD *)v117 + 12); else v91 = *(_DWORD *)(v117 - 4); *(_WORD *)(v91 + 28) &= 0xFFFEu; if ( *(_BYTE *)(LODWORD(v90) + 4) ) { v92 = *(_DWORD *)v117; if ( *(_DWORD *)v117 ) { v93 = *(float *)&v120; *(_WORD *)v120 = *(_WORD *)(v120 + 2) + *(_WORD *)(v120 + 4); sub_4DC550((float *)v92); sub_803810((float *)v92, 0.0); if ( sub_4106E0((_DWORD *)v92, (unsigned __int16)*(_WORD *)LODWORD(v93)) ) { v94 = (unsigned __int16)*(_WORD *)LODWORD(v93); v95 = *(_DWORD **)(*(_DWORD *)(v92 + 128) + 4 * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v92 + 120) + 4))(v92 + 120, v94)); if ( v95 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v92 + 120) + 8))( v92 + 120, v94, v95[1]) ) { v95 = (_DWORD *)*v95; if ( !v95 ) goto LABEL_166; } v96 = v95[2]; if ( v96 ) { *(float *)(v96 + 72) = -3.4028235e38; sub_80EE70((_DWORD *)v96, a2, COERCE_FLOAT(1)); } } } } } LABEL_166: v117 += 44; v120 += 12; --LODWORD(v119); } while ( v119 != 0.0 ); sub_6BA650(&dword_AB6520, 43); } } v97 = v118 + 632; v98 = v118 + 508; v99 = 3; do { if ( *(_BYTE *)(v98 + 4) ) v100 = *(_DWORD *)v98; else v100 = 0; (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v97 + 4))(v97, LODWORD(a2), v100); v98 += 44; v97 += 12; --v99; } while ( v99 ); v101 = v118; v102 = *(_BYTE **)(v118 + 668); if ( v102[64] ) { if ( !v102[65] ) { sub_8D0730((int)(v102 + 4), a2); if ( v103 == 1 ) { if ( *(_DWORD *)v102 ) { v104 = *(_DWORD *)(*(_DWORD *)v102 + 32); if ( v104 ) { (*(void (__stdcall **)(int *, _DWORD))(*(_DWORD *)v104 + 120))(&v120, *(_DWORD *)v102); if ( *(float *)&v120 != 0.0 ) { v105 = *(float *)&v120; if ( !InterlockedDecrement((volatile LONG *)(v120 + 4)) && v105 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v105))(COERCE_FLOAT(LODWORD(v105)), 1); } } v102[64] = 0; } } } } v106 = *(_BYTE **)(v101 + 676); if ( v106[64] ) sub_6B0C00(v106, a2); } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00730C70) -------------------------------------------------------- unsigned __int8 __thiscall sub_730C70(_DWORD *this, unsigned __int8 *a2, signed int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v5; // ecx unsigned __int8 result; // al signed int v7; // eax _DWORD *v8; // ebx int v9; // edx _DWORD *v10; // eax _DWORD *v11; // ecx int v12; // edi _DWORD *v13; // edi _DWORD **v14; // ebx int v15; // eax volatile LONG *v16; // eax _DWORD *v17; // ecx volatile LONG *v18; // eax _DWORD *v19; // ecx volatile LONG *v20; // eax _DWORD *v21; // ecx int v22; // [esp+4h] [ebp-4h] v3 = this; if ( (_BYTE)a3 ) { v4 = (_DWORD *)this[399]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) *(_DWORD *)(v5 + 32) = 0; } return sub_521E30(v3 + 398); } v7 = this[401]; if ( v7 == 21 ) { v8 = (_DWORD *)this[399]; a3 = 3; do { v9 = v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) *(_DWORD *)(v9 + 32) = 0; v10 = (_DWORD *)v3[399]; if ( v10 ) { while ( 1 ) { v11 = v10 + 2; v12 = (int)v10; v10 = (_DWORD *)*v10; if ( v9 == *v11 ) break; if ( !v10 ) goto LABEL_14; } } else { LABEL_14: v12 = 0; } v22 = v12; if ( v12 ) sub_403620(v3 + 398, (_DWORD **)&v22); --a3; } while ( a3 ); v7 = 18; goto LABEL_20; } if ( v7 > 0 ) { LABEL_20: v13 = (_DWORD *)v3[399]; if ( v13 ) { v14 = (_DWORD **)&v3[v7 + 367]; do { v15 = v13[2]; v13 = (_DWORD *)*v13; if ( v15 ) { *(_DWORD *)(v15 + 32) = 0; sub_442AC0(*v14, v15); --v14; } } while ( v13 ); } } result = *a2; if ( *a2 && a2[1] && a2[2] ) { v16 = sub_8F3EB0(0, 0, v3[result + 385], 0, 0, 0); v17 = (_DWORD *)v3[367]; a3 = (signed int)v16; sub_442AC0(v17, (int)v16); sub_6B9900(v3 + 398, &a3); v18 = sub_8F3EB0(0, 0, v3[a2[1] + 385], 0, 0, 0); v19 = (_DWORD *)v3[366]; a3 = (signed int)v18; sub_442AC0(v19, (int)v18); sub_6B9900(v3 + 398, &a3); v20 = sub_8F3EB0(0, 0, v3[a2[2] + 385], 0, 0, 0); v21 = (_DWORD *)v3[365]; a3 = (signed int)v20; sub_442AC0(v21, (int)v20); result = (unsigned int)sub_6B9900(v3 + 398, &a3); } return result; } //----- (00730E40) -------------------------------------------------------- float *__thiscall sub_730E40(float *this) { float *v1; // esi int v2; // ebx int v3; // ebx int v4; // ebx void (__stdcall ***v6)(signed int); // [esp+14h] [ebp-14h] signed int v7; // [esp+18h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &MiniHouseDiceGameWin::`vftable'; *((_DWORD *)v1 + 58) = &MiniHouseDiceGameWin::`vftable'; v1[86] = 0.0; v1[87] = 0.0; v1[88] = 0.0; v1[89] = 0.0; v1[90] = 0.0; `eh vector constructor iterator'( v1 + 91, 4u, 32, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'(v1 + 125, 0x2Cu, 3, sub_6E08B0, sub_6E08E0); `eh vector constructor iterator'(v1 + 158, 0xCu, 3, sub_73B710, sub_73B730); v1[170] = 0.0; v1[171] = 0.0; v2 = (int)(v1 + 172); `eh vector constructor iterator'( v1 + 172, 4u, 10, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 182, 4u, 21, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 203, 4u, 52, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 255, 4u, 52, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 307, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 315, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 323, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 331, 4u, 8, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 339, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 351, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[363] = 0.0; v1[364] = 0.0; v1[365] = 0.0; v1[366] = 0.0; v1[367] = 0.0; v1[368] = 0.0; `eh vector constructor iterator'( v1 + 369, 4u, 21, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 390, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 396, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[405] = 0.0; v1[403] = 0.0; v1[404] = 0.0; *((_DWORD *)v1 + 402) = &PgTList::`vftable'; `eh vector constructor iterator'( v1 + 420, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 426, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 429, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[435] = 0.0; v1[437] = 0.0; v1[438] = 0.0; v1[439] = 0.0; v1[442] = 0.0; v7 = 10; do { v6 = *(void (__stdcall ****)(signed int))v2; if ( *(_DWORD *)v2 ) { if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v2 + 4)) && v6 ) (**v6)(1); *(_DWORD *)v2 = 0; } v2 += 4; --v7; } while ( v7 ); v3 = *((_DWORD *)v1 + 89); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[89] = 0.0; } v4 = *((_DWORD *)v1 + 171); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[171] = 0.0; } v1[123] = 0.0; v1[124] = 0.0; v1[168] = 0.0; v1[167] = 0.0; v1[169] = 0.0; v1[432] = 0.0; v1[433] = 0.0; v1[434] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C6124: using guessed type void *PgTList::`vftable'; // A06B00: using guessed type void *MiniHouseDiceGameWin::`vftable'; // A06B1C: using guessed type void *MiniHouseDiceGameWin::`vftable'; //----- (00731240) -------------------------------------------------------- LONG __thiscall sub_731240(int **this) { int **v1; // esi int *v2; // edi int *v3; // edi int *v4; // edi int v5; // ebx int *v6; // edi int *v7; // edi int v8; // ebx int *v9; // edi int v10; // ebx int *v11; // edi int v12; // ebx int v13; // ebx int *v14; // edi int *v15; // edi int v16; // edi int *v17; // ebx int *v18; // ST0C_4 int *v19; // edi int *v20; // edi int *v21; // edi int *v22; // edi int *v23; // edi int *v24; // edi int *v25; // edi int *v26; // edi int *v27; // edi int *v28; // edi int *v29; // edi int *v30; // edi int *v31; // edi signed int v33; // [esp+18h] [ebp-14h] signed int v34; // [esp+18h] [ebp-14h] int **v35; // [esp+1Ch] [ebp-10h] int **v36; // [esp+1Ch] [ebp-10h] v1 = this; *this = (int *)&MiniHouseDiceGameWin::`vftable'; this[58] = (int *)&MiniHouseDiceGameWin::`vftable'; v2 = this[89]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (*(void (__thiscall **)(int *, signed int))*v2)(v2, 1); v1[89] = 0; } v3 = v1[171]; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) && v3 ) (*(void (__thiscall **)(int *, signed int))*v3)(v3, 1); v1[171] = 0; } v4 = v1[168]; if ( v4 ) { sub_8D47C0(v4 + 7); nullsub_6(v4 + 1); v5 = *v4; if ( *v4 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); operator delete(v4); } v6 = v1[167]; if ( v6 ) { sub_73B740(v1[167]); operator delete(v6); } v7 = v1[169]; if ( v7 ) { sub_8D47C0(v7 + 7); nullsub_6(v7 + 1); v8 = *v7; if ( *v7 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); operator delete(v7); } v35 = v1 + 406; v33 = 10; do { v9 = *v35; if ( *v35 ) { sub_8D47C0(v9 + 7); nullsub_6(v9 + 1); v10 = *v9; if ( *v9 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); operator delete(v9); } ++v35; --v33; } while ( v33 ); v36 = v1 + 432; v34 = 3; do { v11 = *v36; if ( *v36 ) { v12 = *v11; if ( *v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *v11 = 0; } sub_8D47C0(v11 + 7); nullsub_6(v11 + 1); v13 = *v11; if ( *v11 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); operator delete(v11); } ++v36; --v34; } while ( v34 ); v14 = v1[442]; if ( v14 && !InterlockedDecrement(v14 + 1) && v14 ) (*(void (__thiscall **)(int *, signed int))*v14)(v14, 1); v15 = v1[435]; if ( v15 && !InterlockedDecrement(v15 + 1) && v15 ) (*(void (__thiscall **)(int *, signed int))*v15)(v15, 1); `eh vector destructor iterator'(v1 + 429, 4u, 3, sub_410C00); `eh vector destructor iterator'(v1 + 426, 4u, 3, sub_410C00); `eh vector destructor iterator'(v1 + 420, 4u, 6, sub_410C00); v16 = (int)(v1 + 402); v1[402] = (int *)&PgTList::`vftable'; v17 = v1[403]; while ( v17 ) { v18 = v17; v17 = (int *)*v17; (*(void (__thiscall **)(int **, int *))(*(_DWORD *)v16 + 8))(v1 + 402, v18); } v1[405] = 0; v1[403] = 0; v1[404] = 0; *(_DWORD *)v16 = &NiTListBase,PgWinSpr *>::`vftable'; `eh vector destructor iterator'(v1 + 396, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 390, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 369, 4u, 21, sub_410C00); v19 = v1[368]; if ( v19 && !InterlockedDecrement(v19 + 1) && v19 ) (*(void (__thiscall **)(int *, signed int))*v19)(v19, 1); v20 = v1[367]; if ( v20 && !InterlockedDecrement(v20 + 1) && v20 ) (*(void (__thiscall **)(int *, signed int))*v20)(v20, 1); v21 = v1[366]; if ( v21 && !InterlockedDecrement(v21 + 1) && v21 ) (*(void (__thiscall **)(int *, signed int))*v21)(v21, 1); v22 = v1[365]; if ( v22 && !InterlockedDecrement(v22 + 1) && v22 ) (*(void (__thiscall **)(int *, signed int))*v22)(v22, 1); v23 = v1[364]; if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (*(void (__thiscall **)(int *, signed int))*v23)(v23, 1); v24 = v1[363]; if ( v24 && !InterlockedDecrement(v24 + 1) && v24 ) (*(void (__thiscall **)(int *, signed int))*v24)(v24, 1); `eh vector destructor iterator'(v1 + 351, 4u, 12, sub_410C00); `eh vector destructor iterator'(v1 + 339, 4u, 12, sub_410C00); `eh vector destructor iterator'(v1 + 331, 4u, 8, sub_410C00); `eh vector destructor iterator'(v1 + 323, 4u, 8, sub_410C00); `eh vector destructor iterator'(v1 + 315, 4u, 8, sub_410C00); `eh vector destructor iterator'(v1 + 307, 4u, 8, sub_410C00); `eh vector destructor iterator'(v1 + 255, 4u, 52, sub_410C00); `eh vector destructor iterator'(v1 + 203, 4u, 52, sub_410C00); `eh vector destructor iterator'(v1 + 182, 4u, 21, sub_410C00); `eh vector destructor iterator'(v1 + 172, 4u, 10, sub_410C00); v25 = v1[171]; if ( v25 && !InterlockedDecrement(v25 + 1) && v25 ) (*(void (__thiscall **)(int *, signed int))*v25)(v25, 1); v26 = v1[170]; if ( v26 && !InterlockedDecrement(v26 + 1) && v26 ) (*(void (__thiscall **)(int *, signed int))*v26)(v26, 1); `eh vector destructor iterator'(v1 + 158, 0xCu, 3, sub_73B730); `eh vector destructor iterator'(v1 + 125, 0x2Cu, 3, sub_6E08E0); `eh vector destructor iterator'(v1 + 91, 4u, 32, sub_410C00); v27 = v1[90]; if ( v27 && !InterlockedDecrement(v27 + 1) && v27 ) (*(void (__thiscall **)(int *, signed int))*v27)(v27, 1); v28 = v1[89]; if ( v28 && !InterlockedDecrement(v28 + 1) && v28 ) (*(void (__thiscall **)(int *, signed int))*v28)(v28, 1); v29 = v1[88]; if ( v29 && !InterlockedDecrement(v29 + 1) && v29 ) (*(void (__thiscall **)(int *, signed int))*v29)(v29, 1); v30 = v1[87]; if ( v30 && !InterlockedDecrement(v30 + 1) && v30 ) (*(void (__thiscall **)(int *, signed int))*v30)(v30, 1); v31 = v1[86]; if ( v31 && !InterlockedDecrement(v31 + 1) && v31 ) (*(void (__thiscall **)(int *, signed int))*v31)(v31, 1); return sub_8F10F0(v1); } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; // A06B00: using guessed type void *MiniHouseDiceGameWin::`vftable'; // A06B1C: using guessed type void *MiniHouseDiceGameWin::`vftable'; //----- (00731960) -------------------------------------------------------- float *__thiscall sub_731960(float *this) { float *v1; // esi int v2; // ebx int v3; // ebx int v4; // ebx void (__stdcall ***v6)(signed int); // [esp+14h] [ebp-14h] signed int v7; // [esp+18h] [ebp-10h] v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *(_DWORD *)v1 = &GambleDiceGameWin::`vftable'; *((_DWORD *)v1 + 58) = &GambleDiceGameWin::`vftable'; v1[86] = 0.0; v1[87] = 0.0; v1[88] = 0.0; v1[89] = 0.0; v1[90] = 0.0; `eh vector constructor iterator'( v1 + 91, 4u, 32, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'(v1 + 125, 0x2Cu, 3, sub_6E08B0, sub_6E08E0); `eh vector constructor iterator'(v1 + 158, 0xCu, 3, sub_73B710, sub_73B730); v1[170] = 0.0; v1[171] = 0.0; v2 = (int)(v1 + 172); `eh vector constructor iterator'( v1 + 172, 4u, 10, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 182, 4u, 21, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 203, 4u, 52, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 255, 4u, 52, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 307, 4u, 7, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 314, 4u, 7, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 321, 4u, 7, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 328, 4u, 7, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 335, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 347, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[359] = 0.0; v1[360] = 0.0; v1[361] = 0.0; v1[362] = 0.0; v1[363] = 0.0; v1[364] = 0.0; `eh vector constructor iterator'( v1 + 365, 4u, 21, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 386, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 392, 4u, 6, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[401] = 0.0; v1[399] = 0.0; v1[400] = 0.0; *((_DWORD *)v1 + 398) = &PgTList::`vftable'; `eh vector constructor iterator'( v1 + 420, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 425, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); `eh vector constructor iterator'( v1 + 428, 4u, 3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v1[434] = 0.0; v1[436] = 0.0; v1[437] = 0.0; v1[438] = 0.0; v1[441] = 0.0; v7 = 10; do { v6 = *(void (__stdcall ****)(signed int))v2; if ( *(_DWORD *)v2 ) { if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v2 + 4)) && v6 ) (**v6)(1); *(_DWORD *)v2 = 0; } v2 += 4; --v7; } while ( v7 ); v3 = *((_DWORD *)v1 + 89); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[89] = 0.0; } v4 = *((_DWORD *)v1 + 171); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[171] = 0.0; } v1[123] = 0.0; v1[124] = 0.0; v1[168] = 0.0; v1[167] = 0.0; v1[169] = 0.0; v1[431] = 0.0; v1[432] = 0.0; v1[433] = 0.0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // 9C6124: using guessed type void *PgTList::`vftable'; // A06D40: using guessed type void *GambleDiceGameWin::`vftable'; // A06D5C: using guessed type void *GambleDiceGameWin::`vftable'; //----- (00731D60) -------------------------------------------------------- LONG __thiscall sub_731D60(int **this) { int **v1; // esi int *v2; // edi int *v3; // edi int *v4; // edi int v5; // ebx int *v6; // edi int *v7; // edi int v8; // ebx int *v9; // edi int v10; // ebx int *v11; // edi int v12; // ebx int v13; // ebx int *v14; // edi int *v15; // edi int v16; // edi int *v17; // ebx int *v18; // ST0C_4 int *v19; // edi int *v20; // edi int *v21; // edi int *v22; // edi int *v23; // edi int *v24; // edi int *v25; // edi int *v26; // edi int *v27; // edi int *v28; // edi int *v29; // edi int *v30; // edi int *v31; // edi signed int v33; // [esp+18h] [ebp-14h] signed int v34; // [esp+18h] [ebp-14h] int **v35; // [esp+1Ch] [ebp-10h] int **v36; // [esp+1Ch] [ebp-10h] v1 = this; *this = (int *)&GambleDiceGameWin::`vftable'; this[58] = (int *)&GambleDiceGameWin::`vftable'; v2 = this[89]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (*(void (__thiscall **)(int *, signed int))*v2)(v2, 1); v1[89] = 0; } v3 = v1[171]; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) && v3 ) (*(void (__thiscall **)(int *, signed int))*v3)(v3, 1); v1[171] = 0; } v4 = v1[168]; if ( v4 ) { sub_8D47C0(v4 + 7); nullsub_6(v4 + 1); v5 = *v4; if ( *v4 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); operator delete(v4); } v6 = v1[167]; if ( v6 ) { sub_73B740(v1[167]); operator delete(v6); } v7 = v1[169]; if ( v7 ) { sub_8D47C0(v7 + 7); nullsub_6(v7 + 1); v8 = *v7; if ( *v7 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); operator delete(v7); } v35 = v1 + 402; v33 = 10; do { v9 = *v35; if ( *v35 ) { sub_8D47C0(v9 + 7); nullsub_6(v9 + 1); v10 = *v9; if ( *v9 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); operator delete(v9); } ++v35; --v33; } while ( v33 ); v36 = v1 + 431; v34 = 3; do { v11 = *v36; if ( *v36 ) { v12 = *v11; if ( *v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *v11 = 0; } sub_8D47C0(v11 + 7); nullsub_6(v11 + 1); v13 = *v11; if ( *v11 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); operator delete(v11); } ++v36; --v34; } while ( v34 ); v14 = v1[441]; if ( v14 && !InterlockedDecrement(v14 + 1) && v14 ) (*(void (__thiscall **)(int *, signed int))*v14)(v14, 1); v15 = v1[434]; if ( v15 && !InterlockedDecrement(v15 + 1) && v15 ) (*(void (__thiscall **)(int *, signed int))*v15)(v15, 1); `eh vector destructor iterator'(v1 + 428, 4u, 3, sub_410C00); `eh vector destructor iterator'(v1 + 425, 4u, 3, sub_410C00); `eh vector destructor iterator'(v1 + 420, 4u, 5, sub_410C00); v16 = (int)(v1 + 398); v1[398] = (int *)&PgTList::`vftable'; v17 = v1[399]; while ( v17 ) { v18 = v17; v17 = (int *)*v17; (*(void (__thiscall **)(int **, int *))(*(_DWORD *)v16 + 8))(v1 + 398, v18); } v1[401] = 0; v1[399] = 0; v1[400] = 0; *(_DWORD *)v16 = &NiTListBase,PgWinSpr *>::`vftable'; `eh vector destructor iterator'(v1 + 392, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 386, 4u, 6, sub_410C00); `eh vector destructor iterator'(v1 + 365, 4u, 21, sub_410C00); v19 = v1[364]; if ( v19 && !InterlockedDecrement(v19 + 1) && v19 ) (*(void (__thiscall **)(int *, signed int))*v19)(v19, 1); v20 = v1[363]; if ( v20 && !InterlockedDecrement(v20 + 1) && v20 ) (*(void (__thiscall **)(int *, signed int))*v20)(v20, 1); v21 = v1[362]; if ( v21 && !InterlockedDecrement(v21 + 1) && v21 ) (*(void (__thiscall **)(int *, signed int))*v21)(v21, 1); v22 = v1[361]; if ( v22 && !InterlockedDecrement(v22 + 1) && v22 ) (*(void (__thiscall **)(int *, signed int))*v22)(v22, 1); v23 = v1[360]; if ( v23 && !InterlockedDecrement(v23 + 1) && v23 ) (*(void (__thiscall **)(int *, signed int))*v23)(v23, 1); v24 = v1[359]; if ( v24 && !InterlockedDecrement(v24 + 1) && v24 ) (*(void (__thiscall **)(int *, signed int))*v24)(v24, 1); `eh vector destructor iterator'(v1 + 347, 4u, 12, sub_410C00); `eh vector destructor iterator'(v1 + 335, 4u, 12, sub_410C00); `eh vector destructor iterator'(v1 + 328, 4u, 7, sub_410C00); `eh vector destructor iterator'(v1 + 321, 4u, 7, sub_410C00); `eh vector destructor iterator'(v1 + 314, 4u, 7, sub_410C00); `eh vector destructor iterator'(v1 + 307, 4u, 7, sub_410C00); `eh vector destructor iterator'(v1 + 255, 4u, 52, sub_410C00); `eh vector destructor iterator'(v1 + 203, 4u, 52, sub_410C00); `eh vector destructor iterator'(v1 + 182, 4u, 21, sub_410C00); `eh vector destructor iterator'(v1 + 172, 4u, 10, sub_410C00); v25 = v1[171]; if ( v25 && !InterlockedDecrement(v25 + 1) && v25 ) (*(void (__thiscall **)(int *, signed int))*v25)(v25, 1); v26 = v1[170]; if ( v26 && !InterlockedDecrement(v26 + 1) && v26 ) (*(void (__thiscall **)(int *, signed int))*v26)(v26, 1); `eh vector destructor iterator'(v1 + 158, 0xCu, 3, sub_73B730); `eh vector destructor iterator'(v1 + 125, 0x2Cu, 3, sub_6E08E0); `eh vector destructor iterator'(v1 + 91, 4u, 32, sub_410C00); v27 = v1[90]; if ( v27 && !InterlockedDecrement(v27 + 1) && v27 ) (*(void (__thiscall **)(int *, signed int))*v27)(v27, 1); v28 = v1[89]; if ( v28 && !InterlockedDecrement(v28 + 1) && v28 ) (*(void (__thiscall **)(int *, signed int))*v28)(v28, 1); v29 = v1[88]; if ( v29 && !InterlockedDecrement(v29 + 1) && v29 ) (*(void (__thiscall **)(int *, signed int))*v29)(v29, 1); v30 = v1[87]; if ( v30 && !InterlockedDecrement(v30 + 1) && v30 ) (*(void (__thiscall **)(int *, signed int))*v30)(v30, 1); v31 = v1[86]; if ( v31 && !InterlockedDecrement(v31 + 1) && v31 ) (*(void (__thiscall **)(int *, signed int))*v31)(v31, 1); return sub_8F10F0(v1); } // 9C5FAC: using guessed type void *NiTListBase,PgWinSpr *>::`vftable'; // 9C6124: using guessed type void *PgTList::`vftable'; // A06D40: using guessed type void *GambleDiceGameWin::`vftable'; // A06D5C: using guessed type void *GambleDiceGameWin::`vftable'; //----- (007325F0) -------------------------------------------------------- int __cdecl sub_7325F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // eax int v9; // esi void (__thiscall ***v10)(void *, signed int); // edi int result; // eax void *v12; // [esp+14h] [ebp-10h] int v13; // [esp+20h] [ebp-4h] v8 = operator new(0x148u); v9 = (int)v8; v12 = v8; v13 = 0; if ( v8 ) { sub_8FE000(v8); *(_DWORD *)v9 = &ToggleBut::`vftable'; *(_DWORD *)(v9 + 232) = &ToggleBut::`vftable'; } else { v9 = 0; } if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v13 = 1; sub_403790(&unk_BA6B10, v9); if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int, int))(*(_DWORD *)v9 + 560))( v9, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 356))(v9); v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v12, (_DWORD *)v9); if ( v12 ) { v10 = (void (__thiscall ***)(void *, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)v12 + 1) ) { if ( v10 ) (**v10)(v10, 1); } } v13 = -1; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); result = 0; } return result; } // A05F60: using guessed type void *ToggleBut::`vftable'; // A05F7C: using guessed type void *ToggleBut::`vftable'; //----- (00732750) -------------------------------------------------------- volatile LONG *__cdecl sub_732750(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x6F8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_730E40((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00732880) -------------------------------------------------------- volatile LONG *__thiscall sub_732880(void *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7) { signed int v7; // esi volatile LONG *v8; // eax volatile LONG *v9; // esi LONG (__stdcall *v10)(volatile LONG *); // ebx void (__thiscall ***v11)(void *, signed int); // edi volatile LONG *result; // eax int v13; // [esp+14h] [ebp-B0h] int v14; // [esp+18h] [ebp-ACh] void *v15; // [esp+1Ch] [ebp-A8h] int v16; // [esp+20h] [ebp-A4h] int v17; // [esp+24h] [ebp-A0h] int v18; // [esp+28h] [ebp-9Ch] volatile LONG **v19; // [esp+2Ch] [ebp-98h] void *v20; // [esp+30h] [ebp-94h] char v21; // [esp+34h] [ebp-90h] int v22; // [esp+C0h] [ebp-4h] v18 = a6; v15 = this; v19 = sub_8FB140(a2, a3, (int)&v13, (int)&v14, a7); v7 = 2; do { memset(&v21, 0, 0x80u); sprintf(&v21, "%s%.2d", a3, v7); sub_8FB650(v19, a2, (int)&v21); ++v7; } while ( v7 < 5 ); v17 = v14; v16 = v13; v8 = (volatile LONG *)operator new(0x174u); v9 = v8; v20 = (void *)v8; v22 = 0; if ( v8 ) { sub_8FE000(v8); *v9 = (volatile LONG)&BettingBut::`vftable'; *((_DWORD *)v9 + 58) = &BettingBut::`vftable'; *((float *)v9 + 89) = 0.0; *((float *)v9 + 90) = 0.0; *((float *)v9 + 91) = 0.0; *((_DWORD *)v9 + 81) = 0; } else { v9 = 0; } if ( v9 ) InterlockedIncrement(v9 + 1); v22 = 1; if ( v9 ) { v20 = (void *)v9; InterlockedIncrement(v9 + 1); LOBYTE(v22) = 2; sub_8B8EC0(&unk_BA6B34, (int *)&v20); v10 = InterlockedDecrement; LOBYTE(v22) = 1; if ( !InterlockedDecrement(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); } else { v10 = InterlockedDecrement; } if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, volatile LONG **, void *, int, _DWORD, _DWORD, _DWORD))(*v9 + 564))( v9, v16, v17, v19, v15, v18, 0, 0, 0) ) { (*(void (__thiscall **)(volatile LONG *))(*v9 + 356))(v9); v22 = -1; if ( !v10(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v20, v9); v11 = (void (__thiscall ***)(void *, signed int))v20; if ( v20 && !v10((volatile LONG *)v20 + 1) && v11 ) (**v11)(v11, 1); v22 = -1; if ( !v10(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); result = 0; } return result; } // A05D08: using guessed type void *BettingBut::`vftable'; // A05D24: using guessed type void *BettingBut::`vftable'; //----- (00732AE0) -------------------------------------------------------- int __cdecl sub_732AE0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhMinimizeDiceGameWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhMinimizeDiceGameWin::`vftable'; *(_BYTE *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A061B4: using guessed type void *mhMinimizeDiceGameWin::`vftable'; // A061D4: using guessed type void *mhMinimizeDiceGameWin::`vftable'; //----- (00732C30) -------------------------------------------------------- int __cdecl sub_732C30(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhDiceHelpWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhDiceHelpWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A063F8: using guessed type void *mhDiceHelpWin::`vftable'; // A06414: using guessed type void *mhDiceHelpWin::`vftable'; //----- (00732D70) -------------------------------------------------------- volatile LONG *__cdecl sub_732D70(int a1, int a2) { _DWORD *v2; // eax volatile LONG *v3; // esi void (__thiscall ***v4)(void *, signed int); // edi volatile LONG *result; // eax void *v6; // [esp+14h] [ebp-10h] int v7; // [esp+20h] [ebp-4h] v2 = operator new(0x190u); v6 = v2; v7 = 0; if ( v2 ) v3 = sub_72A6F0(v2); else v3 = 0; if ( v3 ) InterlockedIncrement(v3 + 1); v7 = 1; sub_403790(&unk_BA6B10, (int)v3); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int))(*v3 + 540))(v3, a1, a2) ) { (*(void (__thiscall **)(volatile LONG *))(*v3 + 356))(v3); v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = v3; } else { sub_403A70(&unk_BA6B10, &v6, v3); if ( v6 ) { v4 = (void (__thiscall ***)(void *, signed int))v6; if ( !InterlockedDecrement((volatile LONG *)v6 + 1) ) { if ( v4 ) (**v4)(v4, 1); } } v7 = -1; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); result = 0; } return result; } //----- (00732EA0) -------------------------------------------------------- int __cdecl sub_732EA0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x158u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhDiceRateSheetWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhDiceRateSheetWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A06638: using guessed type void *mhDiceRateSheetWin::`vftable'; // A06654: using guessed type void *mhDiceRateSheetWin::`vftable'; //----- (00732FE0) -------------------------------------------------------- volatile LONG *__cdecl sub_732FE0(int a1) { void *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x6F8u); v5 = v1; v6 = 0; if ( v1 ) v2 = (volatile LONG *)sub_731960((float *)v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00733110) -------------------------------------------------------- volatile LONG *__thiscall sub_733110(void *this, int a2, int a3, int a4, int a5, int a6, volatile LONG *a7) { signed int v7; // esi volatile LONG *v8; // eax volatile LONG *v9; // esi LONG (__stdcall *v10)(volatile LONG *); // ebx void (__thiscall ***v11)(void *, signed int); // edi volatile LONG *result; // eax int v13; // [esp+14h] [ebp-B0h] int v14; // [esp+18h] [ebp-ACh] void *v15; // [esp+1Ch] [ebp-A8h] int v16; // [esp+20h] [ebp-A4h] int v17; // [esp+24h] [ebp-A0h] int v18; // [esp+28h] [ebp-9Ch] volatile LONG **v19; // [esp+2Ch] [ebp-98h] void *v20; // [esp+30h] [ebp-94h] char v21; // [esp+34h] [ebp-90h] int v22; // [esp+C0h] [ebp-4h] v18 = a6; v15 = this; v19 = sub_8FB140(a2, a3, (int)&v13, (int)&v14, a7); v7 = 2; do { memset(&v21, 0, 0x80u); sprintf(&v21, "%s%.2d", a3, v7); sub_8FB650(v19, a2, (int)&v21); ++v7; } while ( v7 < 5 ); v17 = v14; v16 = v13; v8 = (volatile LONG *)operator new(0x174u); v9 = v8; v20 = (void *)v8; v22 = 0; if ( v8 ) { sub_8FE000(v8); *v9 = (volatile LONG)&BettingBut::`vftable'; *((_DWORD *)v9 + 58) = &BettingBut::`vftable'; *((float *)v9 + 89) = 0.0; *((float *)v9 + 90) = 0.0; *((float *)v9 + 91) = 0.0; *((_DWORD *)v9 + 81) = 0; } else { v9 = 0; } if ( v9 ) InterlockedIncrement(v9 + 1); v22 = 1; if ( v9 ) { v20 = (void *)v9; InterlockedIncrement(v9 + 1); LOBYTE(v22) = 2; sub_8B8EC0(&unk_BA6B34, (int *)&v20); v10 = InterlockedDecrement; LOBYTE(v22) = 1; if ( !InterlockedDecrement(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); } else { v10 = InterlockedDecrement; } if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, volatile LONG **, void *, int, _DWORD, _DWORD, _DWORD))(*v9 + 564))( v9, v16, v17, v19, v15, v18, 0, 0, 0) ) { (*(void (__thiscall **)(volatile LONG *))(*v9 + 356))(v9); v22 = -1; if ( !v10(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); result = v9; } else { sub_403A70(&unk_BA6B10, &v20, v9); v11 = (void (__thiscall ***)(void *, signed int))v20; if ( v20 && !v10((volatile LONG *)v20 + 1) && v11 ) (**v11)(v11, 1); v22 = -1; if ( !v10(v9 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); result = 0; } return result; } // A05D08: using guessed type void *BettingBut::`vftable'; // A05D24: using guessed type void *BettingBut::`vftable'; //----- (00733370) -------------------------------------------------------- char __thiscall sub_733370(void *this, int a2, int a3) { int v3; // esi volatile LONG *v4; // edi char *v6; // eax volatile LONG **v7; // eax volatile LONG **v8; // ebx volatile LONG *v9; // eax int v10; // ebx int v11; // ST64_4 int v12; // ST60_4 int v13; // ST5C_4 int v14; // eax int *v15; // ebx const CHAR *v16; // eax volatile LONG **v17; // ebx volatile LONG *v18; // eax volatile LONG *v19; // ebx int v20; // ST68_4 int v21; // ST64_4 int v22; // ST60_4 int v23; // eax int *v24; // ebx const CHAR *v25; // eax int v26; // edx volatile LONG **v27; // ebx volatile LONG *v28; // eax int v29; // ebx int v30; // ST64_4 int v31; // ST60_4 int v32; // ST5C_4 int v33; // eax volatile LONG *v34; // eax volatile LONG *v35; // eax volatile LONG *v36; // eax volatile LONG *v37; // eax char v38; // bl volatile LONG **v39; // eax int v40; // eax volatile LONG *v41; // eax char v42; // bl volatile LONG **v43; // eax int v44; // eax volatile LONG *v45; // eax char v46; // bl volatile LONG **v47; // eax int v48; // eax volatile LONG *v49; // eax char v50; // bl volatile LONG **v51; // eax int v52; // eax volatile LONG *v53; // eax volatile LONG **v54; // eax volatile LONG *v55; // ebx int v56; // ST60_4 int v57; // ST5C_4 int v58; // eax volatile LONG *v59; // eax CHAR *v60; // eax CHAR *v61; // eax CHAR *v62; // eax int *v63; // eax volatile LONG **v64; // eax volatile LONG *v65; // ST64_4 int v66; // ST60_4 int v67; // ST5C_4 int v68; // eax volatile LONG *v69; // eax int v70; // edi const CHAR *v71; // eax void (__thiscall ***v72)(_DWORD, signed int); // esi int v73[5]; // [esp+80h] [ebp-58h] int v74; // [esp+94h] [ebp-44h] int v75; // [esp+98h] [ebp-40h] int v76; // [esp+9Ch] [ebp-3Ch] int v77; // [esp+A0h] [ebp-38h] int v78; // [esp+A4h] [ebp-34h] int v79; // [esp+A8h] [ebp-30h] int v80; // [esp+ACh] [ebp-2Ch] unsigned int v81; // [esp+C0h] [ebp-18h] int v82; // [esp+D4h] [ebp-4h] v3 = (int)this; v79 = 0; v82 = 0; v4 = (volatile LONG *)sub_43D0D0(4u); if ( !v4 ) { v82 = -1; if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) ) { if ( v79 ) (**(void (__thiscall ***)(int, signed int))v79)(v79, 1); } return 0; } v76 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v6 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameReport.nif"); sub_8F66B0(v6, (int)&v79, v76); if ( !v79 ) return 0; v7 = sub_8FB140(v79, (int)"Plane01", (int)&v77, (int)&v78, v4); *(_BYTE *)(v3 + 392) = a3 != 0; if ( a3 ) { if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v7, 0, a2, (int)"MHDiceRewardMoneyWin", 0) ) { LABEL_12: v82 = -1; sub_410C00(&v79); return 0; } v8 = sub_8FB140(v79, (int)"Btn01Nor", (int)&v77, (int)&v78, v4); sub_8FB650(v8, v79, (int)"Btn01Click"); sub_8FB650(v8, v79, (int)"Btn01Over"); v9 = sub_8FE0F0(v77, v78, (int)v8, v3, 0, 0, 0); sub_56FF80((_DWORD *)(v3 + 376), (int)v9); v10 = *(_DWORD *)(v3 + 376); v11 = *(_DWORD *)(v3 + 376); v12 = sub_421050(0); v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 148))(v10); v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 144))(v10); v15 = (int *)sub_8F4A20(0, 1, v14, v13, v12, v11, 0, 0); (*(void (__thiscall **)(int *, signed int))(*v15 + 488))(v15, 5); v76 = *v15; v16 = sub_40A910(-1768652831); (*(void (__thiscall **)(int *, const CHAR *))(v76 + 472))(v15, v16); (*(void (__thiscall **)(int *, _DWORD))(*v15 + 240))(v15, 0); v17 = sub_8FB140(v79, (int)"Btn02Nor", (int)&v77, (int)&v78, v4); sub_8FB650(v17, v79, (int)"Btn02Click"); sub_8FB650(v17, v79, (int)"Btn02Over"); v18 = sub_8FE0F0(v77, v78, (int)v17, v3, 1, 0, 0); v19 = v18; v20 = (int)v18; v21 = sub_421050(0); v22 = (*(int (__thiscall **)(volatile LONG *))(*v19 + 148))(v19); v23 = (*(int (__thiscall **)(volatile LONG *))(*v19 + 144))(v19); v24 = (int *)sub_8F4A20(0, 1, v23, v22, v21, v20, 0, 0); (*(void (__thiscall **)(int *, signed int))(*v24 + 488))(v24, 5); v76 = *v24; v25 = sub_40A910(-1936403486); v26 = v76; } else { if ( !sub_8F1440((volatile LONG **)v3, 0, 0, (int)v7, 0, a2, (int)"MHDiceExpectMoneyWin", 0) ) goto LABEL_12; v27 = sub_8FB140(v79, (int)"OKNor", (int)&v77, (int)&v78, v4); sub_8FB650(v27, v79, (int)"OKClick"); sub_8FB650(v27, v79, (int)"OKOver"); v28 = sub_8FE0F0(v77, v78, (int)v27, v3, 2, 0, 0); sub_56FF80((_DWORD *)(v3 + 376), (int)v28); v29 = *(_DWORD *)(v3 + 376); v30 = *(_DWORD *)(v3 + 376); v31 = sub_421050(0); v32 = (*(int (__thiscall **)(int))(*(_DWORD *)v29 + 148))(v29); v33 = (*(int (__thiscall **)(int))(*(_DWORD *)v29 + 144))(v29); v24 = (int *)sub_8F4A20(0, 1, v33, v32, v31, v30, 0, 0); (*(void (__thiscall **)(int *, signed int))(*v24 + 488))(v24, 5); v76 = *v24; v25 = sub_40C190(1331644831); v26 = v76; } (*(void (__thiscall **)(int *, const CHAR *))(v26 + 472))(v24, v25); (*(void (__thiscall **)(int *, _DWORD))(*v24 + 240))(v24, 0); sub_456260(v73); LOBYTE(v82) = 1; sub_456000(v73, 0, 0); sub_455FF0(v73, v3); sub_456380(v73, v79); v34 = sub_4563D0(v73, 0, (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", (int)"MyCopperBtn", v4); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v34 + 240))(v34, 0); v35 = sub_4563D0(v73, 0, (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", (int)"MySilverBtn", v4); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v35 + 240))(v35, 0); v36 = sub_4563D0(v73, 0, (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", (int)"MyGoldBtn", v4); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v36 + 240))(v36, 0); v37 = sub_4563D0(v73, 0, (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", (int)"MyGemBtn", v4); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v37 + 240))(v37, 0); v38 = sub_8F71E0(v79, (int)"MyCopperInput", &v77, &v78, &v74, &v75); v39 = sub_8FB140(v79, (int)"MyCopperInput", (int)&v77, (int)&v78, v4); sub_8F3EB0(v77, v78, (int)v39, v3, 0, 0); if ( v38 ) { v40 = sub_421050(0); v41 = sub_8F4A20(v77 + 2, v78 + 4, v74, v75, v40, v3, 0, 0); sub_56FF80((_DWORD *)(v3 + 352), (int)v41); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 352) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 352) + 472))(&unk_A03FCA); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 352) + 240))(*(_DWORD *)(v3 + 352), 0); } v42 = sub_8F71E0(v79, (int)"MySilverInput", &v77, &v78, &v74, &v75); v43 = sub_8FB140(v79, (int)"MySilverInput", (int)&v77, (int)&v78, v4); sub_8F3EB0(v77, v78, (int)v43, v3, 0, 0); if ( v42 ) { v44 = sub_421050(0); v45 = sub_8F4A20(v77 + 2, v78 + 4, v74, v75, v44, v3, 0, 0); sub_56FF80((_DWORD *)(v3 + 356), (int)v45); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 356) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 356) + 472))(&unk_A03FCB); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 356) + 240))(*(_DWORD *)(v3 + 356), 0); } v46 = sub_8F71E0(v79, (int)"MyGoldInput", &v77, &v78, &v74, &v75); v47 = sub_8FB140(v79, (int)"MyGoldInput", (int)&v77, (int)&v78, v4); sub_8F3EB0(v77, v78, (int)v47, v3, 0, 0); if ( v46 ) { v48 = sub_421050(0); v49 = sub_8F4A20(v77 + 2, v78 + 4, v74, v75, v48, v3, 0, 0); sub_56FF80((_DWORD *)(v3 + 360), (int)v49); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 360) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 360) + 472))(&unk_A03FD7); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 360) + 240))(*(_DWORD *)(v3 + 360), 0); } v50 = sub_8F71E0(v79, (int)"MyGemInput", &v77, &v78, &v74, &v75); v51 = sub_8FB140(v79, (int)"MyGemInput", (int)&v77, (int)&v78, v4); sub_8F3EB0(v77, v78, (int)v51, v3, 0, 0); if ( v50 ) { v52 = sub_421050(0); v53 = sub_8F4A20(v77 + 2, v78 + 4, v74, v75, v52, v3, 0, 0); sub_56FF80((_DWORD *)(v3 + 364), (int)v53); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 364) + 488))(5); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 364) + 472))(&unk_A03FE7); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 364) + 240))(*(_DWORD *)(v3 + 364), 0); } v54 = sub_8FB140(v79, (int)"TextBox", (int)&v77, (int)&v78, v4); v55 = sub_8F3EB0(v77, v78, (int)v54, v3, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v55 + 240))(v55, 0); v56 = sub_421050(0); v57 = (*(int (__thiscall **)(volatile LONG *))(*v55 + 148))(v55); v58 = (*(int (__thiscall **)(volatile LONG *))(*v55 + 144))(v55); v59 = sub_8F4A20(0, 1, v58, v57, v56, (int)v55, 0, 0); sub_56FF80((_DWORD *)(v3 + 368), (int)v59); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 368) + 488))(4); (*(void (__stdcall **)(void *))(**(_DWORD **)(v3 + 368) + 472))(&unk_A0400F); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 368) + 240))(*(_DWORD *)(v3 + 368), 0); if ( a3 ) { v60 = (CHAR *)sub_40A910(-1763262242); sub_4019E0(&v80, v60); LOBYTE(v82) = 2; sub_401D10((int)&v80, "\n", 1u); v61 = (CHAR *)sub_40A910(-2003129395); sub_401D10((int)&v80, v61, strlen(v61)); sub_401D10((int)&v80, "\n", 1u); v62 = (CHAR *)sub_40A910(-1586267419); sub_401D10((int)&v80, v62, strlen(v62)); v63 = (int *)v80; if ( v81 < 0x10 ) v63 = &v80; (*(void (__stdcall **)(int *))(**(_DWORD **)(v3 + 368) + 472))(v63); LOBYTE(v82) = 1; sub_636A10(&v80); } else { v64 = sub_8FB140(v79, (int)"TextBox01", (int)&v77, (int)&v78, v4); v65 = sub_8F3EB0(v77, v78, (int)v64, v3, 0, 0); v66 = sub_421050(0); v67 = (*(int (__thiscall **)(volatile LONG *))(*v65 + 148))(v65); v68 = (*(int (__thiscall **)(volatile LONG *))(*v65 + 144))(v65); v69 = sub_8F4A20(0, 1, v68, v67, v66, (int)v65, 0, 0); sub_56FF80((_DWORD *)(v3 + 372), (int)v69); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v3 + 372) + 488))(5); v70 = **(_DWORD **)(v3 + 372); v76 = *(_DWORD *)(v3 + 372); v71 = sub_40C190(996184969); (*(void (__thiscall **)(int, const CHAR *))(v70 + 472))(v76, v71); (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v3 + 372) + 240))(*(_DWORD *)(v3 + 372), 0); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD))(*(_DWORD *)v3 + 236))(v3, xRight, dword_AC2F78, 0.5, 0.5); LOBYTE(v82) = 0; sub_4562E0(v73); v72 = (void (__thiscall ***)(_DWORD, signed int))v79; v82 = -1; if ( v79 && !InterlockedDecrement((volatile LONG *)(v79 + 4)) && v72 ) (**v72)(v72, 1); return 1; } // ACAD5C: using guessed type char byte_ACAD5C; //----- (00733DB0) -------------------------------------------------------- char __thiscall sub_733DB0(void *this, int a2) { int v2; // ebx int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi char result; // al volatile LONG **v12; // esi int v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi int v15; // edi int v16; // esi volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax int v21; // esi int v22; // ebx volatile LONG *v23; // eax int v24; // edi volatile LONG *v25; // esi signed int v26; // ebx volatile LONG **v27; // edi volatile LONG **v28; // esi int v29; // edi int v30; // esi volatile LONG *v31; // eax volatile LONG *v32; // ebx unsigned int v33; // eax volatile LONG *v34; // eax unsigned int v35; // esi unsigned int v36; // ebx volatile LONG *v37; // eax volatile LONG **v38; // esi volatile LONG *v39; // edi volatile LONG *v40; // eax void **v41; // esi const char *v42; // eax void **v43; // esi const char *v44; // eax void **v45; // esi const char *v46; // eax volatile LONG **v47; // eax _DWORD *v48; // ebx volatile LONG **v49; // edi int v50; // esi volatile LONG **v51; // eax int v52; // esi volatile LONG **v53; // edi volatile LONG **v54; // eax int v55; // esi volatile LONG **v56; // edi volatile LONG **v57; // eax int v58; // esi volatile LONG **v59; // edi volatile LONG **v60; // eax int v61; // esi volatile LONG **v62; // edi volatile LONG **v63; // eax int v64; // esi volatile LONG **v65; // edi int v66; // ebx volatile LONG **v67; // edi signed int v68; // esi volatile LONG *v69; // eax int *v70; // esi unsigned int v71; // edx int v72; // ecx int v73; // eax int v74; // eax int v75; // eax int v76; // edx int v77; // eax int v78; // eax int v79; // eax int *v80; // esi int v81; // eax int v82; // eax int v83; // edx int v84; // eax volatile LONG *v85; // eax int v86; // esi volatile LONG *v87; // edi volatile LONG **v88; // esi int v89; // edi float *v90; // esi volatile LONG *v91; // eax volatile LONG *v92; // ebx volatile LONG *v93; // eax float v94; // ebx int v95; // eax float *v96; // esi volatile LONG *v97; // eax volatile LONG *v98; // ebx volatile LONG *v99; // eax float v100; // ebx int v101; // eax volatile LONG **v102; // esi float *v103; // esi volatile LONG *v104; // eax volatile LONG *v105; // ebx volatile LONG *v106; // eax float v107; // ebx int v108; // eax signed int v109; // ebx __int64 v110; // kr00_8 int v111; // esi signed __int64 v112; // kr08_8 int v113; // esi int v114; // ebx volatile LONG *v115; // esi const char *v116; // eax volatile LONG *v117; // esi const char *v118; // eax volatile LONG **v119; // esi int v120; // eax int v121; // esi int v122; // ebx void **v123; // esi const CHAR *v124; // eax char *v125; // eax volatile LONG **v126; // esi int v127; // eax int v128; // esi int v129; // ebx void **v130; // esi const CHAR *v131; // eax char *v132; // eax volatile LONG **v133; // esi int v134; // eax int v135; // esi int v136; // ebx void **v137; // esi const CHAR *v138; // eax char *v139; // eax volatile LONG **v140; // esi int v141; // eax int v142; // esi int v143; // ebx void **v144; // esi const CHAR *v145; // eax char *v146; // eax volatile LONG **v147; // esi int v148; // eax int v149; // esi int v150; // ebx void **v151; // esi const CHAR *v152; // eax char *v153; // eax volatile LONG **v154; // esi int v155; // eax int v156; // esi int v157; // ebx void **v158; // esi const char *v159; // eax int v160; // ebx _BYTE *v161; // esi unsigned __int8 (__thiscall *v162)(_BYTE *); // eax _BYTE *v163; // esi unsigned __int8 (__thiscall *v164)(int); // eax int v165; // ecx volatile LONG *v166; // eax volatile LONG *v167; // esi volatile LONG *v168; // ebx volatile LONG *v169; // esi const char *v170; // eax volatile LONG **v171; // esi unsigned int v172; // ebx float *v173; // esi volatile LONG *v174; // eax volatile LONG *v175; // ebx int v176; // eax volatile LONG *v177; // eax float v178; // ebx int v179; // eax void (__thiscall ***v180)(_DWORD, signed int); // esi void (__thiscall ***v181)(_DWORD, signed int); // esi int v182; // eax volatile LONG *v183; // eax volatile LONG *v184; // esi volatile LONG *v185; // ebx void (__thiscall ***v186)(_DWORD, signed int); // esi void (__thiscall ***v187)(_DWORD, signed int); // esi int v188; // eax volatile LONG *v189; // eax volatile LONG *v190; // esi volatile LONG *v191; // ebx void (__thiscall ***v192)(_DWORD, signed int); // esi void (__thiscall ***v193)(_DWORD, signed int); // esi int v194; // eax volatile LONG *v195; // esi volatile LONG *v196; // ebx int v197; // eax char v198; // cl char *v199; // eax void **v200; // ebx void *v201; // esi int v202; // eax float *v203; // eax int v204; // ecx int v205; // eax char v206; // cl char *v207; // eax void **v208; // eax int v209; // esi void **v210; // ebx int v211; // eax char v212; // cl char *v213; // eax void **v214; // ebx float *v215; // esi int v216; // ebx void **v217; // eax int v218; // esi int v219; // eax char v220; // cl char *v221; // eax void **v222; // ebx void *v223; // esi int v224; // eax float *v225; // eax float *v226; // eax float *v227; // ecx int v228; // eax char v229; // cl char *v230; // eax void **v231; // eax int v232; // esi void **v233; // ebx int v234; // eax char v235; // cl char *v236; // eax float **v237; // esi void *v238; // ebx int v239; // eax float *v240; // eax bool v241; // zf int v242; // eax char v243; // cl char *v244; // eax float *v245; // esi int v246; // ebx int v247; // eax int v248; // eax void *v249; // eax void **v250; // esi void *v251; // eax void *v252; // eax void **v253; // esi void *v254; // eax void *v255; // eax void **v256; // esi void *v257; // eax unsigned int v258; // ebx _BYTE *v259; // ebx int v260; // eax int v261; // eax float v262; // edx void *v263; // ecx unsigned int v264; // edx int v265; // eax int v266; // ecx int v267; // eax unsigned int v268; // ecx int v269; // edx void (__stdcall *v270)(int, _DWORD, _DWORD, _DWORD); // edx void (__thiscall ***v271)(_DWORD, signed int); // esi void (__thiscall ***v272)(_DWORD, signed int); // esi int v273; // [esp+124h] [ebp-270h] signed __int64 v274; // [esp+128h] [ebp-26Ch] char v275; // [esp+148h] [ebp-24Ch] int v276; // [esp+14Ch] [ebp-248h] int v277[5]; // [esp+150h] [ebp-244h] int v278; // [esp+164h] [ebp-230h] int v279; // [esp+168h] [ebp-22Ch] float v280; // [esp+16Ch] [ebp-228h] float v281; // [esp+170h] [ebp-224h] void *v282; // [esp+174h] [ebp-220h] int v283; // [esp+178h] [ebp-21Ch] volatile LONG *v284; // [esp+17Ch] [ebp-218h] unsigned int v285; // [esp+180h] [ebp-214h] void **v286; // [esp+184h] [ebp-210h] _DWORD *v287; // [esp+188h] [ebp-20Ch] unsigned int v288; // [esp+18Ch] [ebp-208h] int v289; // [esp+190h] [ebp-204h] void **v290; // [esp+194h] [ebp-200h] int v291; // [esp+198h] [ebp-1FCh] int v292; // [esp+19Ch] [ebp-1F8h] char v293; // [esp+1A0h] [ebp-1F4h] void *v294; // [esp+1C4h] [ebp-1D0h] int v295; // [esp+1D4h] [ebp-1C0h] unsigned int v296; // [esp+1D8h] [ebp-1BCh] void *v297; // [esp+1E0h] [ebp-1B4h] int v298; // [esp+1F0h] [ebp-1A4h] unsigned int v299; // [esp+1F4h] [ebp-1A0h] void *v300; // [esp+1FCh] [ebp-198h] int v301; // [esp+20Ch] [ebp-188h] unsigned int v302; // [esp+210h] [ebp-184h] void *v303; // [esp+218h] [ebp-17Ch] void *v304; // [esp+228h] [ebp-16Ch] unsigned int v305; // [esp+22Ch] [ebp-168h] char v306; // [esp+234h] [ebp-160h] const char *v307; // [esp+2B4h] [ebp-E0h] const char *v308; // [esp+2B8h] [ebp-DCh] const char *v309; // [esp+2BCh] [ebp-D8h] const char *v310; // [esp+2C0h] [ebp-D4h] const char *v311; // [esp+2C4h] [ebp-D0h] const char *v312; // [esp+2C8h] [ebp-CCh] const char *v313; // [esp+2CCh] [ebp-C8h] const char *v314; // [esp+2D0h] [ebp-C4h] const char *v315; // [esp+2D4h] [ebp-C0h] const char *v316; // [esp+2D8h] [ebp-BCh] const char *v317; // [esp+2DCh] [ebp-B8h] const char *v318; // [esp+2E0h] [ebp-B4h] const char *v319; // [esp+2E4h] [ebp-B0h] const char *v320; // [esp+2E8h] [ebp-ACh] const char *v321; // [esp+2ECh] [ebp-A8h] const char *v322; // [esp+2F0h] [ebp-A4h] const char *v323; // [esp+2F4h] [ebp-A0h] const char *v324; // [esp+2F8h] [ebp-9Ch] const char *v325; // [esp+2FCh] [ebp-98h] const char *v326; // [esp+300h] [ebp-94h] char v327[4]; // [esp+304h] [ebp-90h] const char *v328; // [esp+308h] [ebp-8Ch] const char *v329; // [esp+30Ch] [ebp-88h] const char *v330; // [esp+310h] [ebp-84h] const char *v331; // [esp+314h] [ebp-80h] const char *v332; // [esp+318h] [ebp-7Ch] const char *v333; // [esp+31Ch] [ebp-78h] const char *v334; // [esp+320h] [ebp-74h] const char *v335; // [esp+324h] [ebp-70h] const char *v336; // [esp+328h] [ebp-6Ch] const char *v337; // [esp+32Ch] [ebp-68h] const char *v338; // [esp+330h] [ebp-64h] const char *v339; // [esp+334h] [ebp-60h] const char *v340; // [esp+338h] [ebp-5Ch] const char *v341; // [esp+33Ch] [ebp-58h] const char *v342; // [esp+340h] [ebp-54h] const char *v343; // [esp+344h] [ebp-50h] const char *v344; // [esp+348h] [ebp-4Ch] const char *v345; // [esp+34Ch] [ebp-48h] const char *v346; // [esp+350h] [ebp-44h] const char *v347; // [esp+354h] [ebp-40h] const char *v348; // [esp+358h] [ebp-3Ch] const char *v349; // [esp+35Ch] [ebp-38h] const char *v350; // [esp+360h] [ebp-34h] const char *v351; // [esp+364h] [ebp-30h] void *v352; // [esp+368h] [ebp-2Ch] const char *v353; // [esp+36Ch] [ebp-28h] const char *v354; // [esp+370h] [ebp-24h] const char *v355; // [esp+374h] [ebp-20h] const char *v356; // [esp+378h] [ebp-1Ch] const char *v357; // [esp+37Ch] [ebp-18h] const char *v358; // [esp+380h] [ebp-14h] int v359; // [esp+390h] [ebp-4h] v2 = (int)this; v285 = (unsigned int)this; v292 = 0; v3 = dword_BA6BA0; v359 = 0; v278 = 0; v279 = 0; v290 = 0; v289 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameMain.nif"); sub_8F66B0(v4, (int)&v292, v3); if ( !v292 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v292 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v276 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v359) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v284 = v9) == 0) ) { LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( v292 && !InterlockedDecrement((volatile LONG *)(v292 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v292, (int)"Frame", (int)&v290, (int)&v289, v9); v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, v13, (int)"DiceGame", 0) ) { LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v14 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( v292 && !InterlockedDecrement((volatile LONG *)(v292 + 4)) && v14 ) (**v14)(v14, 1); return 0; } v15 = (int)v290; v16 = v289; v286 = v290; v283 = v289; sub_456260(v277); LOBYTE(v359) = 2; sub_455FF0(v277, v2); sub_456000(v277, v15, v16); sub_456380(v277, v292); v17 = sub_456820(v277, (int)"TimmerFill", 0); sub_56FF80((_DWORD *)(v2 + 348), (int)v17); v18 = sub_456820(v277, (int)"TimmerFillBack", 0); sub_56FF80((_DWORD *)(v2 + 352), (int)v18); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 352) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); v19 = sub_456820(v277, (int)"Panel01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); sub_456820(v277, (int)"Panel02", 0); sub_456820(v277, (int)"Panel03", 0); sub_456820(v277, (int)"Panel04", 0); v20 = sub_456820(v277, (int)"Timmer", 0); sub_56FF80((_DWORD *)(v2 + 344), (int)v20); v21 = 0; v22 = v2 + 364; do { memset(v327, 0, 0x80u); v291 = v21 + 1; sprintf(v327, "ResultLight%.2d", v21 + 1); v23 = sub_456820(v277, (int)v327, 0); v24 = *(_DWORD *)v22; v25 = v23; if ( *(volatile LONG **)v22 != v23 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); *(_DWORD *)v22 = v25; if ( v25 ) InterlockedIncrement(v25 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1); v21 = v291; v22 += 4; } while ( v291 < 32 ); v26 = 0; v287 = (_DWORD *)(v285 + 688); do { memset(&v306, 0, 0x80u); sprintf(&v306, "Num%.2d", v26); v27 = sub_8FB140(v292, (int)&v306, (int)&v290, (int)&v289, v284); v28 = (volatile LONG **)*v287; if ( (volatile LONG **)*v287 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)v28 + 1) && v28 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v28)(v28, 1); *v287 = v27; if ( v27 ) InterlockedIncrement((volatile LONG *)v27 + 1); } ++v287; ++v26; } while ( v26 < 10 ); v29 = 0; v307 = "bet_EVENNor"; v308 = "bet_ODDNor"; v309 = "bet_BIGNor"; v310 = "bet_SMALLNor"; v311 = "bet_Dice11Nor"; v312 = "bet_Dice22Nor"; v313 = "bet_Dice33Nor"; v314 = "bet_Dice44Nor"; v315 = "bet_Dice55Nor"; v316 = "bet_Dice66Nor"; v317 = "bet_Dice111Nor"; v318 = "bet_Dice222Nor"; v319 = "bet_Dice333Nor"; v320 = "bet_Dice444Nor"; v321 = "bet_Dice555Nor"; v322 = "bet_Dice666Nor"; v323 = "bet_AnyTripleNor"; v324 = "bet_Num4Nor"; v325 = "bet_Num5Nor"; v326 = "bet_Num6Nor"; *(_DWORD *)v327 = "bet_Num7Nor"; v328 = "bet_Num8Nor"; v329 = "bet_Num9Nor"; v330 = "bet_Num10Nor"; v331 = "bet_Num11Nor"; v332 = "bet_Num12Nor"; v333 = "bet_Num13Nor"; v334 = "bet_Num14Nor"; v335 = "bet_Num15Nor"; v336 = "bet_Num16Nor"; v337 = "bet_Num17Nor"; v338 = "bet_Dice12Nor"; v339 = "bet_Dice13Nor"; v340 = "bet_Dice14Nor"; v341 = "bet_Dice15Nor"; v342 = "bet_Dice16Nor"; v343 = "bet_Dice23Nor"; v344 = "bet_Dice24Nor"; v345 = "bet_Dice25Nor"; v346 = "bet_Dice26Nor"; v347 = "bet_Dice34Nor"; v348 = "bet_Dice35Nor"; v349 = "bet_Dice36Nor"; v350 = "bet_Dice45Nor"; v351 = "bet_Dice46Nor"; v352 = "bet_Dice56Nor"; v353 = "bet_ONENor"; v354 = "bet_TWONor"; v355 = "bet_THREENor"; v356 = "bet_FOURNor"; v357 = "bet_FIVENor"; v358 = "bet_SIXNor"; v30 = v285 + 812; do { v31 = sub_732880((void *)v285, v292, (int)(&v307)[v29], (int)&v290, (int)&v289, v29, v284); v32 = *(volatile LONG **)v30; v288 = (unsigned int)v31; if ( v32 != v31 ) { if ( v32 && !InterlockedDecrement(v32 + 1) && v32 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v32)(v32, 1); v33 = v288; *(_DWORD *)v30 = v288; if ( v33 ) InterlockedIncrement((volatile LONG *)(v33 + 4)); } *(_BYTE *)(*(_DWORD *)v30 + 328) = 0; *(_DWORD *)(*(_DWORD *)v30 + 272) = dword_AD01E8; v34 = *(volatile LONG **)v30; ++v29; v30 += 4; *((_BYTE *)v34 + 320) = 0; } while ( v29 < 52 ); v35 = v285; (*(void (__thiscall **)(unsigned int, signed int))(*(_DWORD *)v285 + 520))(v285, 1); v36 = 0; v338 = "History1_1"; v339 = "History1_2"; v340 = "History1_3"; v341 = "History2_1"; v342 = "History2_2"; v343 = "History2_3"; v344 = "History3_1"; v345 = "History3_2"; v346 = "History3_3"; v347 = "History4_1"; v348 = "History4_2"; v349 = "History4_3"; v350 = "History5_1"; v351 = "History5_2"; v352 = "History5_3"; v353 = "History6_1"; v354 = "History6_2"; v355 = "History6_3"; v356 = "History7_1"; v357 = "History7_2"; v358 = "History7_3"; v287 = (_DWORD *)(v35 + 1476); do { v37 = sub_456820(v277, (int)(&v338)[v36], 0); v38 = (volatile LONG **)*v287; v39 = v37; if ( (volatile LONG *)*v287 != v37 ) { if ( v38 && !InterlockedDecrement((volatile LONG *)v38 + 1) && v38 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v38)(v38, 1); *v287 = v39; if ( v39 ) InterlockedIncrement(v39 + 1); } ++v287; ++v36; } while ( v36 < 0x15 ); v40 = sub_456820(v277, (int)"Panel_dice", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); v41 = (void **)sub_456820(v277, (int)"Tip_Betting", 0); (*((void (__thiscall **)(void **, _DWORD))*v41 + 69))(v41, 0.0); v41[68] = (void *)dword_AD01E8; v42 = sub_40A910(-85673700); sub_8F2EA0(v41, v42); v43 = (void **)sub_456820(v277, (int)"Tip_Share", 0); (*((void (__thiscall **)(void **, _DWORD))*v43 + 69))(v43, 0.0); v43[68] = (void *)dword_AD01E8; v44 = sub_40A910(2123874505); sub_8F2EA0(v43, v44); v45 = (void **)sub_456820(v277, (int)"Tip_InvenMoney", 0); (*((void (__thiscall **)(void **, _DWORD))*v45 + 69))(v45, 0.0); v45[68] = (void *)dword_AD01E8; v46 = sub_40A910(1145379102); sub_8F2EA0(v45, v46); v47 = sub_8FB140(v292, (int)"History_dice01", (int)&v290, (int)&v289, 0); v48 = (_DWORD *)v285; v49 = v47; v50 = *(_DWORD *)(v285 + 1560); if ( (volatile LONG **)v50 != v47 ) { if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v50 ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); v48[390] = v49; if ( v49 ) InterlockedIncrement((volatile LONG *)v49 + 1); } v51 = sub_8FB140(v292, (int)"History_dice02", (int)&v290, (int)&v289, 0); v52 = v48[391]; v53 = v51; if ( (volatile LONG **)v52 != v51 ) { if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 ) (**(void (__thiscall ***)(int, signed int))v52)(v52, 1); v48[391] = v53; if ( v53 ) InterlockedIncrement((volatile LONG *)v53 + 1); } v54 = sub_8FB140(v292, (int)"History_dice03", (int)&v290, (int)&v289, 0); v55 = v48[392]; v56 = v54; if ( (volatile LONG **)v55 != v54 ) { if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) && v55 ) (**(void (__thiscall ***)(int, signed int))v55)(v55, 1); v48[392] = v56; if ( v56 ) InterlockedIncrement((volatile LONG *)v56 + 1); } v57 = sub_8FB140(v292, (int)"History_dice04", (int)&v290, (int)&v289, 0); v58 = v48[393]; v59 = v57; if ( (volatile LONG **)v58 != v57 ) { if ( v58 && !InterlockedDecrement((volatile LONG *)(v58 + 4)) && v58 ) (**(void (__thiscall ***)(int, signed int))v58)(v58, 1); v48[393] = v59; if ( v59 ) InterlockedIncrement((volatile LONG *)v59 + 1); } v60 = sub_8FB140(v292, (int)"History_dice05", (int)&v290, (int)&v289, 0); v61 = v48[394]; v62 = v60; if ( (volatile LONG **)v61 != v60 ) { if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v61 ) (**(void (__thiscall ***)(int, signed int))v61)(v61, 1); v48[394] = v62; if ( v62 ) InterlockedIncrement((volatile LONG *)v62 + 1); } v63 = sub_8FB140(v292, (int)"History_dice06", (int)&v290, (int)&v289, 0); v64 = v48[395]; v65 = v63; if ( (volatile LONG **)v64 != v63 ) { if ( v64 && !InterlockedDecrement((volatile LONG *)(v64 + 4)) && v64 ) (**(void (__thiscall ***)(int, signed int))v64)(v64, 1); v48[395] = v65; if ( v65 ) InterlockedIncrement((volatile LONG *)v65 + 1); } v287 = 0; v66 = (int)(v48 + 255); do { v327[0] = 0; memset(&v327[1], 0, 0x7Fu); sprintf(v327, "%s01", "ChipPatternA"); v67 = sub_8FB140(v292, (int)v327, (int)&v282, (int)&v275, v284); v68 = 2; do { memset(v327, 0, 0x80u); sprintf(v327, "%s%.2d", "ChipPatternA", v68); sub_8FB650(v67, v292, (int)v327); ++v68; } while ( v68 <= 5 ); if ( ((signed int)v287 <= 2 || (signed int)v287 >= 7) && v287 != (_DWORD *)1 ) { v80 = *(int **)(v66 - 208); v81 = *v80; v291 = *(int *)(*((_DWORD *)v67[9] + 4) + 24); v82 = (*(int (__thiscall **)(int *))(v81 + 168))(v80); v83 = *v80; v291 = v82 - v291; v274 = __PAIR__(v285, (unsigned int)v67); v84 = (*(int (__thiscall **)(int *))(v83 + 148))(v80); v273 = v291 + v84; v79 = (*(int (__thiscall **)(int *))(*v80 + 164))(v80); } else { v69 = v67[9]; v70 = *(int **)(v66 - 208); v71 = *(_DWORD *)(*v69 + 20); v72 = *(int *)(*((_DWORD *)v69 + 4) + 24); v73 = *v70; v291 = v72; v288 = v71; v74 = (*(int (__thiscall **)(int *))(v73 + 168))(v70); v291 = v74 - v291; v75 = (*(int (__thiscall **)(int *))(*v70 + 164))(v70); v76 = *v70; v288 = v75 - v288; v274 = __PAIR__(v285, (unsigned int)v67); v77 = (*(int (__thiscall **)(int *))(v76 + 148))(v70); v273 = v291 + v77; v78 = (*(int (__thiscall **)(int *))(*v70 + 144))(v70); v79 = v288 + v78; } v85 = sub_8F3EB0(v79, v273, v274, SHIDWORD(v274), 0, 0); v86 = *(_DWORD *)v66; v87 = v85; if ( *(volatile LONG **)v66 != v85 ) { if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v86 ) (**(void (__thiscall ***)(int, signed int))v86)(v86, 1); *(_DWORD *)v66 = v87; if ( v87 ) InterlockedIncrement(v87 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 256))(0); v66 += 4; v287 = (_DWORD *)((char *)v287 + 1); } while ( (signed int)v287 < 52 ); v88 = sub_8FB140(v292, (int)"BetMoneyNum00", (int)&v290, (int)&v289, v284); v287 = v88; sub_8FB650(v88, v292, (int)"BetMoneyNum01"); sub_8FB650(v88, v292, (int)"BetMoneyNum02"); sub_8FB650(v88, v292, (int)"BetMoneyNum03"); sub_8FB650(v88, v292, (int)"BetMoneyNum04"); sub_8FB650(v88, v292, (int)"BetMoneyNum05"); sub_8FB650(v88, v292, (int)"BetMoneyNum06"); sub_8FB650(v88, v292, (int)"BetMoneyNum07"); sub_8FB650(v88, v292, (int)"BetMoneyNum08"); sub_8FB650(v88, v292, (int)"BetMoneyNum09"); v89 = v285; v351 = "bet_Gold02"; v352 = "bet_Gold01"; v353 = "bet_Silver03"; v354 = "bet_Silver02"; v355 = "bet_Silver01"; v356 = "bet_Cooper03"; v357 = "bet_Cooper02"; v358 = "bet_Cooper01"; v288 = 0; v90 = (float *)(v285 + 1260); do { *(float *)&v91 = COERCE_FLOAT(sub_456820(v277, (int)(&v351)[v288], 0)); v92 = (volatile LONG *)*((_DWORD *)v90 - 8); v291 = (int)v91; if ( v92 != v91 ) { if ( v92 ) { if ( !InterlockedDecrement(v92 + 1) && v92 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v92)(v92, 1); v91 = (volatile LONG *)v291; } *(v90 - 8) = *(float *)&v91; if ( *(float *)&v91 != 0.0 ) InterlockedIncrement(v91 + 1); } (*(void (__stdcall **)(signed int))(**((_DWORD **)v90 - 8) + 256))(1); *(float *)&v93 = COERCE_FLOAT(sub_8F3EB0((int)v290, v289, (int)v287, v89, 0, 0)); v94 = *v90; v291 = (int)v93; if ( (volatile LONG *)LODWORD(v94) != v93 ) { if ( v94 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v94) + 4)) && v94 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v94))(COERCE_FLOAT(LODWORD(v94)), 1); v95 = v291; *v90 = *(float *)&v291; if ( v95 ) InterlockedIncrement((volatile LONG *)(v95 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v90 + 240))(0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v90 - 8) + 116))(*(_DWORD *)v90, 0); ++v90; ++v288; } while ( v288 < 8 ); v351 = "Share_Gold02"; v352 = "Share_Gold01"; v353 = "Share_Silver03"; v354 = "Share_Silver02"; v355 = "Share_Silver01"; v356 = "Share_Cooper03"; v357 = "Share_Cooper02"; v358 = "Share_Cooper01"; v288 = 0; v96 = (float *)(v89 + 1324); do { *(float *)&v97 = COERCE_FLOAT(sub_456820(v277, (int)(&v351)[v288], 0)); v98 = (volatile LONG *)*((_DWORD *)v96 - 8); v291 = (int)v97; if ( v98 != v97 ) { if ( v98 ) { if ( !InterlockedDecrement(v98 + 1) && v98 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v98)(v98, 1); v97 = (volatile LONG *)v291; } *(v96 - 8) = *(float *)&v97; if ( *(float *)&v97 != 0.0 ) InterlockedIncrement(v97 + 1); } (*(void (__stdcall **)(signed int))(**((_DWORD **)v96 - 8) + 256))(1); *(float *)&v99 = COERCE_FLOAT(sub_8F3EB0((int)v290, v289, (int)v287, v89, 0, 0)); v100 = *v96; v291 = (int)v99; if ( (volatile LONG *)LODWORD(v100) != v99 ) { if ( v100 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v100) + 4)) && v100 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v100))(COERCE_FLOAT(LODWORD(v100)), 1); v101 = v291; *v96 = *(float *)&v291; if ( v101 ) InterlockedIncrement((volatile LONG *)(v101 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v96 + 240))(0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v96 - 8) + 116))(*(_DWORD *)v96, 0); ++v96; ++v288; } while ( v288 < 8 ); v102 = sub_8FB140(v292, (int)"Num00", (int)&v290, (int)&v289, v284); v287 = v102; sub_8FB650(v102, v292, (int)"Num01"); sub_8FB650(v102, v292, (int)"Num02"); sub_8FB650(v102, v292, (int)"Num03"); sub_8FB650(v102, v292, (int)"Num04"); sub_8FB650(v102, v292, (int)"Num05"); sub_8FB650(v102, v292, (int)"Num06"); sub_8FB650(v102, v292, (int)"Num07"); sub_8FB650(v102, v292, (int)"Num08"); sub_8FB650(v102, v292, (int)"Num09"); v348 = "MyMoney_Gem03"; v349 = "MyMoney_Gem02"; v350 = "MyMoney_Gem01"; v351 = "MyMoney_Gold02"; v352 = "MyMoney_Gold01"; v353 = "MyMoney_Silver03"; v354 = "MyMoney_Silver02"; v355 = "MyMoney_Silver01"; v356 = "MyMoney_Cooper03"; v357 = "MyMoney_Cooper02"; v358 = "MyMoney_Cooper01"; v288 = 0; v103 = (float *)(v89 + 1404); do { *(float *)&v104 = COERCE_FLOAT(sub_456820(v277, (int)(&v348)[v288], 0)); v105 = (volatile LONG *)*((_DWORD *)v103 - 12); v291 = (int)v104; if ( v105 != v104 ) { if ( v105 ) { if ( !InterlockedDecrement(v105 + 1) && v105 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v105)(v105, 1); v104 = (volatile LONG *)v291; } *(v103 - 12) = *(float *)&v104; if ( *(float *)&v104 != 0.0 ) InterlockedIncrement(v104 + 1); } (*(void (__stdcall **)(signed int))(**((_DWORD **)v103 - 12) + 256))(1); *(float *)&v106 = COERCE_FLOAT(sub_8F3EB0((int)v290, v289, (int)v287, v89, 0, 0)); v107 = *v103; v291 = (int)v106; if ( (volatile LONG *)LODWORD(v107) != v106 ) { if ( v107 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v107) + 4)) && v107 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v107))(COERCE_FLOAT(LODWORD(v107)), 1); v108 = v291; *v103 = *(float *)&v291; if ( v108 ) InterlockedIncrement((volatile LONG *)(v108 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v103 + 240))(0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v103 - 12) + 116))(*(_DWORD *)v103, 0); (*(void (__stdcall **)(signed int))(**(_DWORD **)v103 + 492))(1); ++v103; ++v288; } while ( v288 < 0xB ); v110 = sub_680E60(byte_AD9238); v282 = (void *)HIDWORD(v110); v109 = v110; v287 = (_DWORD *)10; v288 = v89 + 1444; while ( 1 ) { v111 = v109 % 10; v112 = (signed __int64)__PAIR__((unsigned int)v282, v109) / 10; v282 = (void *)((unsigned __int64)((signed __int64)__PAIR__((unsigned int)v282, v109) / 10) >> 32); v109 = v112; if ( v111 < 0 ) v111 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v288 + 492))(v111); if ( !((unsigned int)v282 | (unsigned int)v112) ) break; v288 -= 4; v287 = (_DWORD *)((char *)v287 - 1); if ( (signed int)v287 < 0 ) goto LABEL_177; } v113 = (int)v287 - 1; if ( (signed int)v287 - 1 >= 0 ) { v114 = v89 + 4 * v113 + 1404; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v114 + 492))(0); v114 -= 4; --v113; } while ( v113 >= 0 ); } LABEL_177: *(_DWORD *)(v89 + 1672) = 0; *(_DWORD *)(v89 + 1668) = 0; v115 = sub_4563D0(v277, 60, (int)"RankingNor", (int)"RankingClick", (int)"RankingOver", 0, 0); *((_DWORD *)v115 + 68) = dword_AD01E8; v116 = sub_40A910(-640956456); sub_8F2EA0((void **)v115, v116); v117 = sub_4563D0(v277, 61, (int)"HelpNor", (int)"HelpClick", (int)"HelpOver", 0, 0); *((_DWORD *)v117 + 68) = dword_AD01E8; v118 = sub_40A910(875959699); sub_8F2EA0((void **)v117, v118); v119 = sub_8FB140(v292, (int)"100CopperNor", (int)&v290, (int)&v289, v284); sub_8FB650(v119, v292, (int)"100CopperClick"); sub_8FB650(v119, v292, (int)"100CopperOver"); v120 = sub_7325F0((int)v290, v289, (int)v119, v89, 52, 0, 0, 0); v121 = *(_DWORD *)(v89 + 1680); v122 = v120; if ( v121 != v120 ) { if ( v121 && !InterlockedDecrement((volatile LONG *)(v121 + 4)) && v121 ) (**(void (__thiscall ***)(int, signed int))v121)(v121, 1); *(_DWORD *)(v89 + 1680) = v122; if ( v122 ) InterlockedIncrement((volatile LONG *)(v122 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1680) + 272) = dword_AD01E8; v123 = *(void ***)(v89 + 1680); v124 = sub_40C190(-2001757707); v125 = sub_7549E0("100 %s", v124); sub_8F2EA0(v123, v125); v126 = sub_8FB140(v292, (int)"1SiverNor", (int)&v290, (int)&v289, v284); sub_8FB650(v126, v292, (int)"1SiverClick"); sub_8FB650(v126, v292, (int)"1SiverOver"); v127 = sub_7325F0((int)v290, v289, (int)v126, v89, 53, 0, 0, 0); v128 = *(_DWORD *)(v89 + 1684); v129 = v127; if ( v128 != v127 ) { if ( v128 && !InterlockedDecrement((volatile LONG *)(v128 + 4)) && v128 ) (**(void (__thiscall ***)(int, signed int))v128)(v128, 1); *(_DWORD *)(v89 + 1684) = v129; if ( v129 ) InterlockedIncrement((volatile LONG *)(v129 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1684) + 272) = dword_AD01E8; v130 = *(void ***)(v89 + 1684); v131 = sub_40C190(-1732930065); v132 = sub_7549E0("1 %s", v131); sub_8F2EA0(v130, v132); v133 = sub_8FB140(v292, (int)"10SiverNor", (int)&v290, (int)&v289, v284); sub_8FB650(v133, v292, (int)"10SiverClick"); sub_8FB650(v133, v292, (int)"10SiverOver"); sub_8FB650(v133, v292, (int)"10SiverDisable"); v134 = sub_7325F0((int)v290, v289, (int)v133, v89, 54, 0, 0, 0); v135 = *(_DWORD *)(v89 + 1688); v136 = v134; if ( v135 != v134 ) { if ( v135 && !InterlockedDecrement((volatile LONG *)(v135 + 4)) && v135 ) (**(void (__thiscall ***)(int, signed int))v135)(v135, 1); *(_DWORD *)(v89 + 1688) = v136; if ( v136 ) InterlockedIncrement((volatile LONG *)(v136 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1688) + 272) = dword_AD01E8; v137 = *(void ***)(v89 + 1688); v138 = sub_40C190(-1732930065); v139 = sub_7549E0("10 %s", v138); sub_8F2EA0(v137, v139); v140 = sub_8FB140(v292, (int)"100SiverNor", (int)&v290, (int)&v289, v284); sub_8FB650(v140, v292, (int)"100SiverClick"); sub_8FB650(v140, v292, (int)"100SiverOver"); sub_8FB650(v140, v292, (int)"100SiverDisable"); v141 = sub_7325F0((int)v290, v289, (int)v140, v89, 55, 0, 0, 0); v142 = *(_DWORD *)(v89 + 1692); v143 = v141; if ( v142 != v141 ) { if ( v142 && !InterlockedDecrement((volatile LONG *)(v142 + 4)) && v142 ) (**(void (__thiscall ***)(int, signed int))v142)(v142, 1); *(_DWORD *)(v89 + 1692) = v143; if ( v143 ) InterlockedIncrement((volatile LONG *)(v143 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1692) + 272) = dword_AD01E8; v144 = *(void ***)(v89 + 1692); v145 = sub_40C190(-1732930065); v146 = sub_7549E0("100 %s", v145); sub_8F2EA0(v144, v146); v147 = sub_8FB140(v292, (int)"GoldNor", (int)&v290, (int)&v289, v284); sub_8FB650(v147, v292, (int)"GoldClick"); sub_8FB650(v147, v292, (int)"GoldOver"); sub_8FB650(v147, v292, (int)"GoldDisable"); v148 = sub_7325F0((int)v290, v289, (int)v147, v89, 56, 0, 0, 0); v149 = *(_DWORD *)(v89 + 1696); v150 = v148; if ( v149 != v148 ) { if ( v149 && !InterlockedDecrement((volatile LONG *)(v149 + 4)) && v149 ) (**(void (__thiscall ***)(int, signed int))v149)(v149, 1); *(_DWORD *)(v89 + 1696) = v150; if ( v150 ) InterlockedIncrement((volatile LONG *)(v150 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1696) + 272) = dword_AD01E8; v151 = *(void ***)(v89 + 1696); v152 = sub_40C190(1201903011); v153 = sub_7549E0("1 %s", v152); sub_8F2EA0(v151, v153); v154 = sub_8FB140(v292, (int)"MaxNor", (int)&v290, (int)&v289, v284); sub_8FB650(v154, v292, (int)"MaxClick"); sub_8FB650(v154, v292, (int)"MaxOver"); v155 = sub_7325F0((int)v290, v289, (int)v154, v89, 57, 0, 0, 0); v156 = *(_DWORD *)(v89 + 1700); v157 = v155; if ( v156 != v155 ) { if ( v156 && !InterlockedDecrement((volatile LONG *)(v156 + 4)) && v156 ) (**(void (__thiscall ***)(int, signed int))v156)(v156, 1); *(_DWORD *)(v89 + 1700) = v157; if ( v157 ) InterlockedIncrement((volatile LONG *)(v157 + 4)); } *(_DWORD *)(*(_DWORD *)(v89 + 1700) + 272) = dword_AD01E8; v158 = *(void ***)(v89 + 1700); v159 = sub_40A910(-1685230898); sub_8F2EA0(v158, v159); v160 = v89 + 1684; v291 = 5; do { v161 = *(_BYTE **)v160; v162 = *(unsigned __int8 (__thiscall **)(_BYTE *))(**(_DWORD **)v160 + 312); v161[324] = 1; if ( v162(v161) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v161 + 552))(v161, v161[324] != 0); v160 += 4; --v291; } while ( *(float *)&v291 != 0.0 ); v163 = *(_BYTE **)(v89 + 1680); v164 = *(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v163 + 312); v165 = *(_DWORD *)(v89 + 1680); v163[324] = 0; if ( v164(v165) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v163 + 552))(v163, v163[324] != 0); v166 = sub_4563D0(v277, 59, (int)"MinNor", (int)"MinClick", (int)"MinOver", 0, 0); v167 = *(volatile LONG **)(v89 + 680); v168 = v166; if ( v167 != v166 ) { if ( v167 && !InterlockedDecrement(v167 + 1) && v167 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v167)(v167, 1); *(_DWORD *)(v89 + 680) = v168; if ( v168 ) InterlockedIncrement(v168 + 1); } sub_4563D0(v277, 58, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v169 = sub_4563D0(v277, 58, (int)"ExitNor", (int)"ExitClick", (int)"ExitOver", 0, 0); *((_DWORD *)v169 + 68) = dword_AD01E8; v170 = sub_40A910(-95796673); sub_8F2EA0((void **)v169, v170); v171 = sub_8FB140(v292, (int)"ResultDiceNum01", (int)&v290, (int)&v289, 0); v287 = v171; sub_8FB650(v171, v292, (int)"ResultDiceNum02"); sub_8FB650(v171, v292, (int)"ResultDiceNum03"); sub_8FB650(v171, v292, (int)"ResultDiceNum04"); sub_8FB650(v171, v292, (int)"ResultDiceNum05"); sub_8FB650(v171, v292, (int)"ResultDiceNum06"); v172 = 0; v173 = (float *)(v89 + 1716); do { memset(v327, 0, 0x80u); v288 = v172 + 1; sprintf(v327, "ResultDice%.2d", v172 + 1); *(float *)&v174 = COERCE_FLOAT(sub_456820(v277, (int)v327, 0)); v175 = (volatile LONG *)*((_DWORD *)v173 - 3); v291 = (int)v174; if ( v175 != v174 ) { if ( v175 && !InterlockedDecrement(v175 + 1) && v175 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v175)(v175, 1); v176 = v291; *(v173 - 3) = *(float *)&v291; if ( v176 ) InterlockedIncrement((volatile LONG *)(v176 + 4)); } (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v173 - 3) + 256))(0); *(float *)&v177 = COERCE_FLOAT(sub_8F3EB0((int)v290, v289, (int)v287, v89, 0, 0)); v178 = *v173; v291 = (int)v177; if ( (volatile LONG *)LODWORD(v178) != v177 ) { if ( v178 != 0.0 && !InterlockedDecrement((volatile LONG *)(LODWORD(v178) + 4)) && v178 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v178))(COERCE_FLOAT(LODWORD(v178)), 1); v179 = v291; *v173 = *(float *)&v291; if ( v179 ) InterlockedIncrement((volatile LONG *)(v179 + 4)); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v173 + 240))(0); (*(void (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v173 - 3) + 116))(*(_DWORD *)v173, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v173 + 492))(0); v172 = v288; ++v173; } while ( (signed int)v288 < 3 ); if ( sub_8F71E0(v292, (int)"Title", &v290, &v289, &v279, &v278) ) { v182 = sub_421050(7); v183 = sub_8F4A20((char *)v290 - (char *)v286, v289 - v283, v279, v278, v182, v89, 0, 0); v184 = *(volatile LONG **)(v89 + 360); v185 = v183; if ( v184 != v183 ) { if ( v184 && !InterlockedDecrement(v184 + 1) && v184 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v184)(v184, 1); *(_DWORD *)(v89 + 360) = v185; if ( v185 ) InterlockedIncrement(v185 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v89 + 360) + 488))(5); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int))(**(_DWORD **)(v89 + 360) + 464))(0, 0, 0, 255); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v89 + 360) + 240))(0); if ( sub_8F71E0(v292, (int)"TextBox_DiceResult", &v290, &v289, &v279, &v278) ) { v188 = sub_421050(5); v189 = sub_8F4A20((char *)v290 - (char *)v286, v289 - v283, v279, v278, v188, v89, 0, 0); v190 = *(volatile LONG **)(v89 + 1740); v191 = v189; if ( v190 != v189 ) { if ( v190 && !InterlockedDecrement(v190 + 1) && v190 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v190)(v190, 1); *(_DWORD *)(v89 + 1740) = v191; if ( v191 ) InterlockedIncrement(v191 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)(v89 + 1740) + 488))(5); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v89 + 1740) + 240))(0); if ( sub_8F71E0(v292, (int)"Frame", &v290, &v289, &v279, &v278) ) { v194 = sub_421050(1); v195 = sub_8F4A20((char *)v290 - (char *)v286, v289 - v283, v279, v278, v194, v89, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v195 + 240))(v195, 0); v196 = *(volatile LONG **)(v89 + 684); if ( v196 != v195 ) { if ( v196 && !InterlockedDecrement(v196 + 1) && v196 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v196)(v196, 1); *(_DWORD *)(v89 + 684) = v195; InterlockedIncrement(v195 + 1); } if ( !byte_ACAD5C ) sub_420410(); v197 = 0; do { v198 = byte_ACA838[v197]; name[v197++] = v198; } while ( v198 ); v199 = &name[strlen(name)]; *(_DWORD *)v199 = 1701013828; *((_DWORD *)v199 + 1) = 1869768788; *((_DWORD *)v199 + 2) = 1768828535; *((_WORD *)v199 + 6) = 102; v200 = sub_8D03E0(name, 0); v201 = operator new(0x44u); v282 = v201; LOBYTE(v359) = 3; if ( v201 ) { v202 = sub_85BD60(v200); v203 = sub_6B0A90((float *)v201, v202); } else { v203 = 0; } *(_DWORD *)(v89 + 672) = v203; v204 = *(_DWORD *)v203; LOBYTE(v359) = 2; sub_85D860((float *)(v204 + 52), flt_BA45B4, 0.0, 1.0, 0.0); if ( !byte_ACAD5C ) sub_420410(); v205 = 0; do { v206 = byte_ACA838[v205]; name[v205++] = v206; } while ( v206 ); v207 = &name[strlen(name)]; *(_DWORD *)v207 = 1701013828; *((_DWORD *)v207 + 1) = 1953785154; *((_DWORD *)v207 + 2) = 1399287401; *((_DWORD *)v207 + 3) = 1953653108; *((_DWORD *)v207 + 4) = 1718185518; v207[20] = 0; v208 = sub_8D03E0(name, 0); v209 = *(_DWORD *)(v89 + 356); v210 = v208; if ( (void **)v209 != v208 ) { if ( v209 && !InterlockedDecrement((volatile LONG *)(v209 + 4)) && v209 ) (**(void (__thiscall ***)(int, signed int))v209)(v209, 1); *(_DWORD *)(v89 + 356) = v210; if ( v210 ) InterlockedIncrement((volatile LONG *)v210 + 1); } if ( !byte_ACAD5C ) sub_420410(); v211 = 0; do { v212 = byte_ACA838[v211]; name[v211++] = v212; } while ( v212 ); v213 = &name[strlen(name)]; *(_DWORD *)v213 = 1852403523; *((_DWORD *)v213 + 1) = 1414808898; *((_DWORD *)v213 + 2) = 776425033; *((_DWORD *)v213 + 3) = 6711662; v214 = sub_8D03E0(name, 0); v215 = (float *)operator new(0x60u); v282 = v215; LOBYTE(v359) = 4; if ( v215 ) { v286 = (void **)sub_85BD60(v214); *v215 = 0.0; LOBYTE(v359) = 5; sub_8D06C0(v215 + 1); LOBYTE(v359) = 6; sub_8D4790((_DWORD *)v215 + 7); v216 = *(_DWORD *)v215; LOBYTE(v359) = 7; if ( (void **)v216 != v286 ) { if ( v216 && !InterlockedDecrement((volatile LONG *)(v216 + 4)) && v216 ) (**(void (__thiscall ***)(int, signed int))v216)(v216, 1); v217 = v286; *(_DWORD *)v215 = v286; if ( v217 ) InterlockedIncrement((volatile LONG *)v217 + 1); } *((_WORD *)v215 + 32) = 0; } else { v215 = 0; } *(_DWORD *)(v89 + 668) = v215; v218 = *(_DWORD *)v215; *(float *)&v291 = fabs(0.6000000238418579); LOBYTE(v359) = 2; *(float *)(v218 + 100) = *(float *)&v291; if ( !byte_ACAD5C ) sub_420410(); v219 = 0; do { v220 = byte_ACA838[v219]; name[v219++] = v220; } while ( v220 ); v221 = &name[strlen(name)]; *(_DWORD *)v221 = 1467245890; *((_DWORD *)v221 + 1) = 1848536681; *((_WORD *)v221 + 4) = 26217; v221[10] = 0; v222 = sub_8D03E0(name, 0); v223 = operator new(0x44u); v282 = v223; LOBYTE(v359) = 8; if ( v223 ) { v224 = sub_85BD60(v222); v225 = sub_6B0A90((float *)v223, v224); } else { v225 = 0; } *(_DWORD *)(v89 + 676) = v225; v226 = *(float **)v225; v280 = 500.0; v281 = 340.0; v226[22] = 500.0; *(float *)&v282 = 1000.0; v226[23] = 340.0; v226[24] = 1000.0; v227 = (float *)(**(_DWORD **)(v89 + 676) + 52); LOBYTE(v359) = 2; sub_85D860(v227, flt_BA45B4, 0.0, 0.0, 0.1); if ( !byte_ACAD5C ) sub_420410(); v228 = 0; do { v229 = byte_ACA838[v228]; name[v228++] = v229; } while ( v229 ); v230 = &name[strlen(name)]; *(_DWORD *)v230 = 1701013828; *((_DWORD *)v230 + 1) = 1801675082; *((_DWORD *)v230 + 2) = 779382640; *((_DWORD *)v230 + 3) = 6711662; v231 = sub_8D03E0(name, 0); v232 = *(_DWORD *)(v89 + 1768); v233 = v231; if ( (void **)v232 != v231 ) { if ( v232 && !InterlockedDecrement((volatile LONG *)(v232 + 4)) && v232 ) (**(void (__thiscall ***)(int, signed int))v232)(v232, 1); *(_DWORD *)(v89 + 1768) = v233; if ( v233 ) InterlockedIncrement((volatile LONG *)v233 + 1); } if ( !byte_ACAD5C ) sub_420410(); v234 = 0; do { v235 = byte_ACA838[v234]; name[v234++] = v235; } while ( v235 ); v236 = &name[strlen(name)]; *(_DWORD *)v236 = 1701013828; *((_DWORD *)v236 + 1) = 1701667143; *((_DWORD *)v236 + 2) = 776885314; *((_DWORD *)v236 + 3) = 6711662; v286 = sub_8D03E0(name, 0); v237 = (float **)(v89 + 1624); v291 = 10; do { v238 = operator new(0x44u); v282 = v238; LOBYTE(v359) = 9; if ( v238 ) { v239 = sub_85BD60(v286); v240 = sub_6B0A90((float *)v238, v239); } else { v240 = 0; } *v237 = v240; ++v237; v241 = v291-- == 1; LOBYTE(v359) = 2; } while ( !v241 ); if ( !byte_ACAD5C ) sub_420410(); v242 = 0; do { v243 = byte_ACA838[v242]; name[v242++] = v243; } while ( v243 ); v244 = &name[strlen(name)]; *(_DWORD *)v244 = 1701013828; *((_DWORD *)v244 + 1) = 1701667143; *((_DWORD *)v244 + 2) = 1667843167; *((_DWORD *)v244 + 3) = 1936020069; *((_DWORD *)v244 + 4) = 779381877; *((_DWORD *)v244 + 5) = 6711662; v286 = sub_8D03E0(name, 0); v291 = v89 + 1728; v288 = 3; do { v245 = (float *)operator new(0x60u); v282 = v245; LOBYTE(v359) = 10; if ( v245 ) { v283 = sub_85BD60(v286); *v245 = 0.0; LOBYTE(v359) = 11; sub_8D06C0(v245 + 1); LOBYTE(v359) = 12; sub_8D4790((_DWORD *)v245 + 7); v246 = *(_DWORD *)v245; LOBYTE(v359) = 13; if ( v246 != v283 ) { if ( v246 && !InterlockedDecrement((volatile LONG *)(v246 + 4)) && v246 ) (**(void (__thiscall ***)(int, signed int))v246)(v246, 1); v247 = v283; *(_DWORD *)v245 = v283; if ( v247 ) InterlockedIncrement((volatile LONG *)(v247 + 4)); } *((_WORD *)v245 + 32) = 0; } else { v245 = 0; } v248 = v291; *(_DWORD *)v291 = v245; v241 = v288-- == 1; LOBYTE(v359) = 2; v291 = v248 + 4; } while ( !v241 ); v305 = 15; v304 = 0; LOBYTE(v303) = 0; v296 = 15; v295 = 0; LOBYTE(v294) = 0; v299 = 15; v298 = 0; LOBYTE(v297) = 0; LOBYTE(v359) = 16; sub_4018E0(&v294, "MiniGame01_Dice", 0xFu); sub_4018E0(&v297, "MiniGame01_DiceA", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v249 = sub_6D0C10(&v352, byte_ACA628, (int)&v294); LOBYTE(v359) = 17; v250 = (void **)sub_4064D0(&v300, (int)v249, "\\"); if ( &v303 != v250 ) { if ( v305 >= 0x10 ) operator delete(v303); v305 = 15; v304 = 0; LOBYTE(v303) = 0; if ( (unsigned int)v250[5] >= 0x10 ) { v303 = *v250; *v250 = 0; } else { memcpy_0(&v303, v250, (size_t)v250[4] + 1); } v304 = v250[4]; v305 = (unsigned int)v250[5]; v250[4] = 0; v250[5] = 0; } if ( v302 >= 0x10 ) operator delete(v300); v302 = 15; v301 = 0; LOBYTE(v300) = 0; LOBYTE(v359) = 16; if ( (unsigned int)v357 >= 0x10 ) operator delete(v352); v251 = sub_427A80(&v352, (int)&v297, ".kfm"); LOBYTE(v359) = 19; sub_401C20(&v303, (int)v251, 0, 0xFFFFFFFF); LOBYTE(v359) = 16; if ( (unsigned int)v357 >= 0x10 ) operator delete(v352); sub_6E5790((const void **)(v89 + 500), (char *)&v303, (char *)&v297); sub_4018E0(&v294, "MiniGame02_Dice", 0xFu); sub_4018E0(&v297, "MiniGame01_DiceB", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v252 = sub_6D0C10(&v352, byte_ACA628, (int)&v294); LOBYTE(v359) = 20; v253 = (void **)sub_4064D0(&v300, (int)v252, "\\"); if ( &v303 != v253 ) { if ( v305 >= 0x10 ) operator delete(v303); v305 = 15; v304 = 0; LOBYTE(v303) = 0; if ( (unsigned int)v253[5] >= 0x10 ) { v303 = *v253; *v253 = 0; } else { memcpy_0(&v303, v253, (size_t)v253[4] + 1); } v304 = v253[4]; v305 = (unsigned int)v253[5]; v253[4] = 0; v253[5] = 0; } if ( v302 >= 0x10 ) operator delete(v300); v302 = 15; v301 = 0; LOBYTE(v300) = 0; LOBYTE(v359) = 16; if ( (unsigned int)v357 >= 0x10 ) operator delete(v352); v254 = sub_427A80(&v352, (int)&v297, ".kfm"); LOBYTE(v359) = 22; sub_401C20(&v303, (int)v254, 0, 0xFFFFFFFF); LOBYTE(v359) = 16; if ( (unsigned int)v357 >= 0x10 ) operator delete(v352); sub_6E5790((const void **)(v89 + 544), (char *)&v303, (char *)&v297); sub_4018E0(&v294, "MiniGame03_Dice", 0xFu); sub_4018E0(&v297, "MiniGame01_DiceC", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v255 = sub_6D0C10(&v352, byte_ACA628, (int)&v294); LOBYTE(v359) = 23; v256 = (void **)sub_4064D0(&v300, (int)v255, "\\"); if ( &v303 != v256 ) { if ( v305 >= 0x10 ) operator delete(v303); v305 = 15; v304 = 0; LOBYTE(v303) = 0; if ( (unsigned int)v256[5] >= 0x10 ) { v303 = *v256; *v256 = 0; } else { memcpy_0(&v303, v256, (size_t)v256[4] + 1); } v304 = v256[4]; v305 = (unsigned int)v256[5]; v256[4] = 0; v256[5] = 0; } if ( v302 >= 0x10 ) operator delete(v300); v302 = 15; v301 = 0; LOBYTE(v300) = 0; LOBYTE(v359) = 16; if ( (unsigned int)v357 >= 0x10 ) operator delete(v352); v257 = sub_427A80(&v300, (int)&v297, ".kfm"); LOBYTE(v359) = 25; sub_401C20(&v303, (int)v257, 0, 0xFFFFFFFF); LOBYTE(v359) = 16; if ( v302 >= 0x10 ) operator delete(v300); v258 = v285; v302 = 15; v301 = 0; LOBYTE(v300) = 0; sub_6E5790((const void **)(v285 + 588), (char *)&v303, (char *)&v297); sub_85D860((float *)&v293, flt_BA45B4, 1.0, 0.0, 0.0); v280 = 500.0; v281 = 350.0; *(float *)&v282 = 1000.0; qmemcpy(&v350, &v293, 0x24u); *(float *)&v291 = 0.0; v286 = (void **)(v258 + 638); v259 = (_BYTE *)(v258 + 508); do { if ( v259[4] && *(_DWORD *)v259 ) v260 = *(_DWORD *)(*(_DWORD *)v259 + 12); else v260 = *((_DWORD *)v259 - 1); qmemcpy((void *)(v260 + 52), &v350, 0x24u); if ( v259[4] && *(_DWORD *)v259 ) v261 = *(_DWORD *)(*(_DWORD *)v259 + 12); else v261 = *((_DWORD *)v259 - 1); v262 = v281; *(float *)(v261 + 88) = v280; v263 = v282; *(float *)(v261 + 92) = v262; v264 = v285; *(_DWORD *)(v261 + 96) = v263; if ( v259[4] && *(_DWORD *)v259 ) v265 = *(_DWORD *)(*(_DWORD *)v259 + 12); else v265 = *((_DWORD *)v259 - 1); (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(v264 + 684) + 116))(v265, 0); v266 = v291; *(_WORD *)v286 = v291 + 1; if ( v259[4] && *(_DWORD *)v259 ) v267 = *(_DWORD *)(*(_DWORD *)v259 + 12); else v267 = *((_DWORD *)v259 - 1); *(_WORD *)(v267 + 28) |= 1u; v286 += 3; v259 += 44; v291 = v266 + 1; } while ( v266 + 1 < 3 ); v268 = v285; v269 = *(_DWORD *)v285; *(float *)(v285 + 1772) = 0.0; v270 = *(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD))(v269 + 236); *(float *)(v268 + 1776) = 0.0; *(float *)(v268 + 1780) = 0.0; *(_DWORD *)(v268 + 1664) = 0; *(_DWORD *)(v268 + 1760) = 0; *(_BYTE *)(v268 + 1764) = 0; v270(qword_AC2F74, *(&qword_AC2F74 + 1), 0.5, 0.5); if ( v299 >= 0x10 ) operator delete(v297); v299 = 15; v298 = 0; LOBYTE(v297) = 0; if ( v296 >= 0x10 ) operator delete(v294); v296 = 15; v295 = 0; LOBYTE(v294) = 0; if ( v305 >= 0x10 ) operator delete(v303); v305 = 15; v304 = 0; LOBYTE(v303) = 0; LOBYTE(v359) = 1; sub_4562E0(v277); v271 = (void (__thiscall ***)(_DWORD, signed int))v276; LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v276 + 4)) ) (**v271)(v271, 1); v272 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( v292 && !InterlockedDecrement((volatile LONG *)(v292 + 4)) && v272 ) (**v272)(v272, 1); result = 1; } else { LOBYTE(v359) = 1; sub_4562E0(v277); v192 = (void (__thiscall ***)(_DWORD, signed int))v276; LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v276 + 4)) ) (**v192)(v192, 1); v193 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( !v292 || InterlockedDecrement((volatile LONG *)(v292 + 4)) || !v193 ) return 0; (**v193)(v193, 1); result = 0; } } else { LOBYTE(v359) = 1; sub_4562E0(v277); v186 = (void (__thiscall ***)(_DWORD, signed int))v276; LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v276 + 4)) ) (**v186)(v186, 1); v187 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( !v292 || InterlockedDecrement((volatile LONG *)(v292 + 4)) || !v187 ) return 0; (**v187)(v187, 1); result = 0; } } else { LOBYTE(v359) = 1; sub_4562E0(v277); v180 = (void (__thiscall ***)(_DWORD, signed int))v276; LOBYTE(v359) = 0; if ( !InterlockedDecrement((volatile LONG *)(v276 + 4)) ) (**v180)(v180, 1); v181 = (void (__thiscall ***)(_DWORD, signed int))v292; v359 = -1; if ( !v292 || InterlockedDecrement((volatile LONG *)(v292 + 4)) || !v181 ) return 0; (**v181)(v181, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // BA45B4: using guessed type float flt_BA45B4; //----- (00736C80) -------------------------------------------------------- char __thiscall sub_736C80(void *this, int a2) { int v2; // ebx int v3; // edi char *v4; // eax _DWORD *v5; // eax int v6; // eax int v7; // edi int v8; // eax volatile LONG *v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // edi char result; // al volatile LONG **v12; // esi int v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // esi int v15; // edi int v16; // esi volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // eax volatile LONG *v20; // eax int v21; // esi int v22; // ebx volatile LONG *v23; // eax int v24; // edi volatile LONG *v25; // esi signed int v26; // ebx volatile LONG **v27; // edi volatile LONG **v28; // esi int v29; // edi int v30; // esi volatile LONG *v31; // eax volatile LONG *v32; // ebx int v33; // eax volatile LONG *v34; // eax unsigned int v35; // esi unsigned int v36; // ebx volatile LONG *v37; // eax volatile LONG *v38; // esi volatile LONG *v39; // edi volatile LONG *v40; // eax void **v41; // esi const char *v42; // eax void **v43; // esi const char *v44; // eax void **v45; // esi const char *v46; // eax volatile LONG **v47; // eax _DWORD *v48; // ebx volatile LONG **v49; // edi int v50; // esi volatile LONG **v51; // eax int v52; // esi volatile LONG **v53; // edi volatile LONG **v54; // eax int v55; // esi volatile LONG **v56; // edi volatile LONG **v57; // eax int v58; // esi volatile LONG **v59; // edi volatile LONG **v60; // eax int v61; // esi volatile LONG **v62; // edi volatile LONG **v63; // eax int v64; // esi volatile LONG **v65; // edi int v66; // ebx volatile LONG **v67; // edi signed int v68; // esi volatile LONG *v69; // eax int *v70; // esi int v71; // edx int v72; // ecx int v73; // eax int v74; // eax int v75; // eax int v76; // edx int v77; // eax int v78; // eax int v79; // eax int *v80; // esi int v81; // eax int v82; // eax int v83; // edx int v84; // eax volatile LONG *v85; // eax int v86; // esi volatile LONG *v87; // edi volatile LONG **v88; // esi _DWORD *v89; // edi int v90; // ebx volatile LONG **v91; // esi volatile LONG *v92; // eax volatile LONG *v93; // ebx int v94; // eax volatile LONG *v95; // eax volatile LONG *v96; // ebx int v97; // eax int v98; // ebx volatile LONG **v99; // esi volatile LONG *v100; // eax volatile LONG *v101; // ebx int v102; // eax volatile LONG *v103; // eax volatile LONG *v104; // ebx int v105; // eax volatile LONG **v106; // esi int v107; // ebx volatile LONG **v108; // esi volatile LONG *v109; // eax volatile LONG *v110; // ebx int v111; // eax volatile LONG *v112; // eax volatile LONG *v113; // ebx int v114; // eax signed int v115; // ebx __int64 v116; // kr00_8 void (__thiscall ***v117)(_DWORD, signed int); // esi int v118; // esi signed __int64 v119; // kr08_8 int v120; // esi int v121; // ebx volatile LONG *v122; // esi const char *v123; // eax volatile LONG *v124; // esi const char *v125; // eax volatile LONG **v126; // esi int v127; // eax int v128; // esi int v129; // ebx void **v130; // esi const char *v131; // eax volatile LONG **v132; // esi int v133; // eax int v134; // esi int v135; // ebx void **v136; // esi const char *v137; // eax volatile LONG **v138; // esi int v139; // eax int v140; // esi int v141; // ebx void **v142; // esi const char *v143; // eax volatile LONG **v144; // esi int v145; // eax int v146; // esi int v147; // ebx void **v148; // esi const char *v149; // eax volatile LONG **v150; // esi int v151; // eax int v152; // esi int v153; // ebx void **v154; // esi const char *v155; // eax int v156; // ebx _BYTE *v157; // esi unsigned __int8 (__thiscall *v158)(_BYTE *); // eax _BYTE *v159; // esi unsigned __int8 (__thiscall *v160)(int); // eax int v161; // ecx volatile LONG *v162; // eax volatile LONG *v163; // esi volatile LONG *v164; // ebx volatile LONG *v165; // esi const char *v166; // eax volatile LONG **v167; // esi int v168; // ebx volatile LONG **v169; // esi volatile LONG *v170; // eax volatile LONG *v171; // ebx int v172; // eax volatile LONG *v173; // eax volatile LONG *v174; // ebx int v175; // eax void (__thiscall ***v176)(_DWORD, signed int); // esi void (__thiscall ***v177)(_DWORD, signed int); // esi int v178; // eax volatile LONG *v179; // eax volatile LONG *v180; // esi volatile LONG *v181; // ebx void (__thiscall ***v182)(_DWORD, signed int); // esi void (__thiscall ***v183)(_DWORD, signed int); // esi int v184; // eax volatile LONG *v185; // eax volatile LONG *v186; // esi volatile LONG *v187; // ebx void (__thiscall ***v188)(_DWORD, signed int); // esi void (__thiscall ***v189)(_DWORD, signed int); // esi int v190; // eax volatile LONG *v191; // esi volatile LONG *v192; // ebx int v193; // eax char v194; // cl char *v195; // eax void **v196; // ebx void *v197; // esi int v198; // eax float *v199; // eax int v200; // ecx int v201; // eax char v202; // cl char *v203; // eax void **v204; // eax int v205; // esi void **v206; // ebx int v207; // eax char v208; // cl char *v209; // eax void **v210; // ebx float *v211; // esi int v212; // ebx void **v213; // eax int v214; // esi int v215; // eax char v216; // cl char *v217; // eax void **v218; // ebx void *v219; // esi int v220; // eax float *v221; // eax float *v222; // eax float *v223; // ecx int v224; // eax char v225; // cl char *v226; // eax void **v227; // eax int v228; // esi void **v229; // ebx int v230; // eax char v231; // cl char *v232; // eax float **v233; // esi void *v234; // ebx int v235; // eax float *v236; // eax bool v237; // zf int v238; // eax char v239; // cl char *v240; // eax float *v241; // esi int v242; // edi int v243; // ebx char *v244; // eax void *v245; // eax void **v246; // esi void *v247; // eax void *v248; // eax void **v249; // esi void *v250; // eax void *v251; // eax void **v252; // esi void *v253; // eax unsigned int v254; // ebx _BYTE *v255; // ebx int v256; // eax int v257; // eax float v258; // ecx void *v259; // edx int v260; // eax _DWORD *v261; // ecx int v262; // eax unsigned int v263; // ecx int v264; // edx void (__stdcall *v265)(int, _DWORD, _DWORD, _DWORD); // edx void (__thiscall ***v266)(_DWORD, signed int); // esi void (__thiscall ***v267)(_DWORD, signed int); // esi int v268; // [esp+124h] [ebp-294h] signed __int64 v269; // [esp+128h] [ebp-290h] char v270; // [esp+148h] [ebp-270h] int v271; // [esp+14Ch] [ebp-26Ch] int v272[5]; // [esp+150h] [ebp-268h] int v273; // [esp+164h] [ebp-254h] int v274; // [esp+168h] [ebp-250h] float v275; // [esp+16Ch] [ebp-24Ch] float v276; // [esp+170h] [ebp-248h] void *v277; // [esp+174h] [ebp-244h] volatile LONG *v278; // [esp+178h] [ebp-240h] char *v279; // [esp+17Ch] [ebp-23Ch] unsigned int v280; // [esp+180h] [ebp-238h] void **v281; // [esp+184h] [ebp-234h] int v282; // [esp+188h] [ebp-230h] volatile LONG **v283; // [esp+18Ch] [ebp-22Ch] char *v284; // [esp+190h] [ebp-228h] void **v285; // [esp+194h] [ebp-224h] volatile LONG *v286; // [esp+198h] [ebp-220h] int v287; // [esp+19Ch] [ebp-21Ch] char v288; // [esp+1A0h] [ebp-218h] char v289; // [esp+1C4h] [ebp-1F4h] void *v290; // [esp+1CCh] [ebp-1ECh] unsigned int v291; // [esp+1E0h] [ebp-1D8h] void *v292; // [esp+1E8h] [ebp-1D0h] int v293; // [esp+1F8h] [ebp-1C0h] unsigned int v294; // [esp+1FCh] [ebp-1BCh] void *v295; // [esp+204h] [ebp-1B4h] int v296; // [esp+214h] [ebp-1A4h] unsigned int v297; // [esp+218h] [ebp-1A0h] void *v298; // [esp+220h] [ebp-198h] int v299; // [esp+230h] [ebp-188h] unsigned int v300; // [esp+234h] [ebp-184h] void *v301; // [esp+23Ch] [ebp-17Ch] void *v302; // [esp+24Ch] [ebp-16Ch] unsigned int v303; // [esp+250h] [ebp-168h] char v304; // [esp+258h] [ebp-160h] const char *v305; // [esp+2D8h] [ebp-E0h] const char *v306; // [esp+2DCh] [ebp-DCh] const char *v307; // [esp+2E0h] [ebp-D8h] const char *v308; // [esp+2E4h] [ebp-D4h] const char *v309; // [esp+2E8h] [ebp-D0h] const char *v310; // [esp+2ECh] [ebp-CCh] const char *v311; // [esp+2F0h] [ebp-C8h] const char *v312; // [esp+2F4h] [ebp-C4h] const char *v313; // [esp+2F8h] [ebp-C0h] const char *v314; // [esp+2FCh] [ebp-BCh] const char *v315; // [esp+300h] [ebp-B8h] const char *v316; // [esp+304h] [ebp-B4h] const char *v317; // [esp+308h] [ebp-B0h] const char *v318; // [esp+30Ch] [ebp-ACh] const char *v319; // [esp+310h] [ebp-A8h] const char *v320; // [esp+314h] [ebp-A4h] const char *v321; // [esp+318h] [ebp-A0h] const char *v322; // [esp+31Ch] [ebp-9Ch] const char *v323; // [esp+320h] [ebp-98h] const char *v324; // [esp+324h] [ebp-94h] char v325[4]; // [esp+328h] [ebp-90h] const char *v326; // [esp+32Ch] [ebp-8Ch] const char *v327; // [esp+330h] [ebp-88h] const char *v328; // [esp+334h] [ebp-84h] const char *v329; // [esp+338h] [ebp-80h] const char *v330; // [esp+33Ch] [ebp-7Ch] const char *v331; // [esp+340h] [ebp-78h] const char *v332; // [esp+344h] [ebp-74h] const char *v333; // [esp+348h] [ebp-70h] const char *v334; // [esp+34Ch] [ebp-6Ch] const char *v335; // [esp+350h] [ebp-68h] const char *v336; // [esp+354h] [ebp-64h] const char *v337; // [esp+358h] [ebp-60h] const char *v338; // [esp+35Ch] [ebp-5Ch] const char *v339; // [esp+360h] [ebp-58h] const char *v340; // [esp+364h] [ebp-54h] const char *v341; // [esp+368h] [ebp-50h] const char *v342; // [esp+36Ch] [ebp-4Ch] const char *v343; // [esp+370h] [ebp-48h] const char *v344; // [esp+374h] [ebp-44h] const char *v345; // [esp+378h] [ebp-40h] const char *v346; // [esp+37Ch] [ebp-3Ch] const char *v347; // [esp+380h] [ebp-38h] const char *v348; // [esp+384h] [ebp-34h] const char *v349; // [esp+388h] [ebp-30h] const char *v350; // [esp+38Ch] [ebp-2Ch] const char *v351; // [esp+390h] [ebp-28h] const char *v352; // [esp+394h] [ebp-24h] const char *v353; // [esp+398h] [ebp-20h] const char *v354; // [esp+39Ch] [ebp-1Ch] const char *v355; // [esp+3A0h] [ebp-18h] const char *v356; // [esp+3A4h] [ebp-14h] int v357; // [esp+3B4h] [ebp-4h] v2 = (int)this; v280 = (unsigned int)this; v287 = 0; v3 = dword_BA6BA0; v357 = 0; v273 = 0; v274 = 0; v285 = 0; v284 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GB_DiceGameMain.nif"); sub_8F66B0(v4, (int)&v287, v3); if ( !v287 ) return 0; v5 = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v287 + 72))("Frame"); v6 = sub_85C050(v5, 8); v7 = v6; v271 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v8 = **(_DWORD **)(v7 + 40); LOBYTE(v357) = 1; if ( !v8 || (v9 = *(volatile LONG **)(v8 + 4), (v278 = v9) == 0) ) { LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v10 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( v287 && !InterlockedDecrement((volatile LONG *)(v287 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } return 0; } v12 = sub_8FB140(v287, (int)"Frame", (int)&v285, (int)&v284, v9); v13 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, v13, (int)"GambleDiceGame", 0) ) { LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v14 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( v287 && !InterlockedDecrement((volatile LONG *)(v287 + 4)) && v14 ) (**v14)(v14, 1); return 0; } v15 = (int)v285; v16 = (int)v284; v281 = v285; v279 = v284; sub_456260(v272); LOBYTE(v357) = 2; sub_455FF0(v272, v2); sub_456000(v272, v15, v16); sub_456380(v272, v287); v17 = sub_456820(v272, (int)"TimmerFill", 0); sub_56FF80((_DWORD *)(v2 + 348), (int)v17); v18 = sub_456820(v272, (int)"TimmerFillBack", 0); sub_56FF80((_DWORD *)(v2 + 352), (int)v18); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 352) + 256))(1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 352) + 240))(0); v19 = sub_456820(v272, (int)"Panel01", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); sub_456820(v272, (int)"Panel02", 0); sub_456820(v272, (int)"Panel03", 0); sub_456820(v272, (int)"Panel04", 0); v20 = sub_456820(v272, (int)"Timmer", 0); sub_56FF80((_DWORD *)(v2 + 344), (int)v20); v21 = 0; v22 = v2 + 364; do { memset(v325, 0, 0x80u); v286 = (volatile LONG *)(v21 + 1); sprintf(v325, "ResultLight%.2d", v21 + 1); v23 = sub_456820(v272, (int)v325, 0); v24 = *(_DWORD *)v22; v25 = v23; if ( *(volatile LONG **)v22 != v23 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); *(_DWORD *)v22 = v25; if ( v25 ) InterlockedIncrement(v25 + 1); } (*(void (__stdcall **)(signed int))(**(_DWORD **)v22 + 256))(1); v21 = (int)v286; v22 += 4; } while ( (signed int)v286 < 32 ); v26 = 0; v283 = (volatile LONG **)(v280 + 688); do { memset(&v304, 0, 0x80u); sprintf(&v304, "Num%.2d", v26); v27 = sub_8FB140(v287, (int)&v304, (int)&v285, (int)&v284, v278); v28 = (volatile LONG **)*v283; if ( *v283 != (volatile LONG *)v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)v28 + 1) && v28 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v28)(v28, 1); *v283 = (volatile LONG *)v27; if ( v27 ) InterlockedIncrement((volatile LONG *)v27 + 1); } ++v283; ++v26; } while ( v26 < 10 ); v29 = 0; v305 = "bet_EVENNor"; v306 = "bet_ODDNor"; v307 = "bet_BIGNor"; v308 = "bet_SMALLNor"; v309 = "bet_Dice11Nor"; v310 = "bet_Dice22Nor"; v311 = "bet_Dice33Nor"; v312 = "bet_Dice44Nor"; v313 = "bet_Dice55Nor"; v314 = "bet_Dice66Nor"; v315 = "bet_Dice111Nor"; v316 = "bet_Dice222Nor"; v317 = "bet_Dice333Nor"; v318 = "bet_Dice444Nor"; v319 = "bet_Dice555Nor"; v320 = "bet_Dice666Nor"; v321 = "bet_AnyTripleNor"; v322 = "bet_Num4Nor"; v323 = "bet_Num5Nor"; v324 = "bet_Num6Nor"; *(_DWORD *)v325 = "bet_Num7Nor"; v326 = "bet_Num8Nor"; v327 = "bet_Num9Nor"; v328 = "bet_Num10Nor"; v329 = "bet_Num11Nor"; v330 = "bet_Num12Nor"; v331 = "bet_Num13Nor"; v332 = "bet_Num14Nor"; v333 = "bet_Num15Nor"; v334 = "bet_Num16Nor"; v335 = "bet_Num17Nor"; v336 = "bet_Dice12Nor"; v337 = "bet_Dice13Nor"; v338 = "bet_Dice14Nor"; v339 = "bet_Dice15Nor"; v340 = "bet_Dice16Nor"; v341 = "bet_Dice23Nor"; v342 = "bet_Dice24Nor"; v343 = "bet_Dice25Nor"; v344 = "bet_Dice26Nor"; v345 = "bet_Dice34Nor"; v346 = "bet_Dice35Nor"; v347 = "bet_Dice36Nor"; v348 = "bet_Dice45Nor"; v349 = "bet_Dice46Nor"; v350 = "bet_Dice56Nor"; v351 = "bet_ONENor"; v352 = "bet_TWONor"; v353 = "bet_THREENor"; v354 = "bet_FOURNor"; v355 = "bet_FIVENor"; v356 = "bet_SIXNor"; v30 = v280 + 812; do { v31 = sub_733110((void *)v280, v287, (int)(&v305)[v29], (int)&v285, (int)&v284, v29, v278); v32 = *(volatile LONG **)v30; v286 = v31; if ( v32 != v31 ) { if ( v32 && !InterlockedDecrement(v32 + 1) && v32 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v32)(v32, 1); v33 = (int)v286; *(_DWORD *)v30 = v286; if ( v33 ) InterlockedIncrement((volatile LONG *)(v33 + 4)); } *(_BYTE *)(*(_DWORD *)v30 + 328) = 0; *(_DWORD *)(*(_DWORD *)v30 + 272) = dword_AD01E8; v34 = *(volatile LONG **)v30; ++v29; v30 += 4; *((_BYTE *)v34 + 320) = 0; } while ( v29 < 52 ); v35 = v280; (*(void (__thiscall **)(unsigned int, signed int))(*(_DWORD *)v280 + 520))(v280, 1); v36 = 0; v336 = "History1_1"; v337 = "History1_2"; v338 = "History1_3"; v339 = "History2_1"; v340 = "History2_2"; v341 = "History2_3"; v342 = "History3_1"; v343 = "History3_2"; v344 = "History3_3"; v345 = "History4_1"; v346 = "History4_2"; v347 = "History4_3"; v348 = "History5_1"; v349 = "History5_2"; v350 = "History5_3"; v351 = "History6_1"; v352 = "History6_2"; v353 = "History6_3"; v354 = "History7_1"; v355 = "History7_2"; v356 = "History7_3"; v283 = (volatile LONG **)(v35 + 1460); do { v37 = sub_456820(v272, (int)(&v336)[v36], 0); v38 = *v283; v39 = v37; if ( *v283 != v37 ) { if ( v38 && !InterlockedDecrement(v38 + 1) && v38 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v38)(v38, 1); *v283 = v39; if ( v39 ) InterlockedIncrement(v39 + 1); } ++v283; ++v36; } while ( v36 < 0x15 ); v40 = sub_456820(v272, (int)"Panel_dice", 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v40 + 240))(v40, 0); v41 = (void **)sub_456820(v272, (int)"Tip_Betting", 0); (*((void (__thiscall **)(void **, _DWORD))*v41 + 69))(v41, 0.0); v41[68] = (void *)dword_AD01E8; v42 = sub_40A910(-85673700); sub_8F2EA0(v41, v42); v43 = (void **)sub_456820(v272, (int)"Tip_Share", 0); (*((void (__thiscall **)(void **, _DWORD))*v43 + 69))(v43, 0.0); v43[68] = (void *)dword_AD01E8; v44 = sub_40A910(2123874505); sub_8F2EA0(v43, v44); v45 = (void **)sub_456820(v272, (int)"Tip_InvenMoney", 0); (*((void (__thiscall **)(void **, _DWORD))*v45 + 69))(v45, 0.0); v45[68] = (void *)dword_AD01E8; v46 = sub_40A910(1145379102); sub_8F2EA0(v45, v46); v47 = sub_8FB140(v287, (int)"History_dice01", (int)&v285, (int)&v284, 0); v48 = (_DWORD *)v280; v49 = v47; v50 = *(_DWORD *)(v280 + 1544); if ( (volatile LONG **)v50 != v47 ) { if ( v50 && !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v50 ) (**(void (__thiscall ***)(int, signed int))v50)(v50, 1); v48[386] = v49; if ( v49 ) InterlockedIncrement((volatile LONG *)v49 + 1); } v51 = sub_8FB140(v287, (int)"History_dice02", (int)&v285, (int)&v284, 0); v52 = v48[387]; v53 = v51; if ( (volatile LONG **)v52 != v51 ) { if ( v52 && !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v52 ) (**(void (__thiscall ***)(int, signed int))v52)(v52, 1); v48[387] = v53; if ( v53 ) InterlockedIncrement((volatile LONG *)v53 + 1); } v54 = sub_8FB140(v287, (int)"History_dice03", (int)&v285, (int)&v284, 0); v55 = v48[388]; v56 = v54; if ( (volatile LONG **)v55 != v54 ) { if ( v55 && !InterlockedDecrement((volatile LONG *)(v55 + 4)) && v55 ) (**(void (__thiscall ***)(int, signed int))v55)(v55, 1); v48[388] = v56; if ( v56 ) InterlockedIncrement((volatile LONG *)v56 + 1); } v57 = sub_8FB140(v287, (int)"History_dice04", (int)&v285, (int)&v284, 0); v58 = v48[389]; v59 = v57; if ( (volatile LONG **)v58 != v57 ) { if ( v58 && !InterlockedDecrement((volatile LONG *)(v58 + 4)) && v58 ) (**(void (__thiscall ***)(int, signed int))v58)(v58, 1); v48[389] = v59; if ( v59 ) InterlockedIncrement((volatile LONG *)v59 + 1); } v60 = sub_8FB140(v287, (int)"History_dice05", (int)&v285, (int)&v284, 0); v61 = v48[390]; v62 = v60; if ( (volatile LONG **)v61 != v60 ) { if ( v61 && !InterlockedDecrement((volatile LONG *)(v61 + 4)) && v61 ) (**(void (__thiscall ***)(int, signed int))v61)(v61, 1); v48[390] = v62; if ( v62 ) InterlockedIncrement((volatile LONG *)v62 + 1); } v63 = sub_8FB140(v287, (int)"History_dice06", (int)&v285, (int)&v284, 0); v64 = v48[391]; v65 = v63; if ( (volatile LONG **)v64 != v63 ) { if ( v64 && !InterlockedDecrement((volatile LONG *)(v64 + 4)) && v64 ) (**(void (__thiscall ***)(int, signed int))v64)(v64, 1); v48[391] = v65; if ( v65 ) InterlockedIncrement((volatile LONG *)v65 + 1); } v283 = 0; v66 = (int)(v48 + 255); do { v325[0] = 0; memset(&v325[1], 0, 0x7Fu); sprintf(v325, "%s01", "ChipPatternA"); v67 = sub_8FB140(v287, (int)v325, (int)&v277, (int)&v270, v278); v68 = 2; do { memset(v325, 0, 0x80u); sprintf(v325, "%s%.2d", "ChipPatternA", v68); sub_8FB650(v67, v287, (int)v325); ++v68; } while ( v68 <= 5 ); if ( ((signed int)v283 <= 2 || (signed int)v283 >= 7) && v283 != (volatile LONG **)1 ) { v80 = *(int **)(v66 - 208); v81 = *v80; v282 = *(int *)(*((_DWORD *)v67[9] + 4) + 24); v82 = (*(int (__thiscall **)(int *))(v81 + 168))(v80); v83 = *v80; v282 = v82 - v282; v269 = __PAIR__(v280, (unsigned int)v67); v84 = (*(int (__thiscall **)(int *))(v83 + 148))(v80); v268 = v282 + v84; v79 = (*(int (__thiscall **)(int *))(*v80 + 164))(v80); } else { v69 = v67[9]; v70 = *(int **)(v66 - 208); v71 = *(int *)(*v69 + 20); v72 = *(_DWORD *)(*((_DWORD *)v69 + 4) + 24); v73 = *v70; v286 = (volatile LONG *)v72; v282 = v71; v74 = (*(int (__thiscall **)(int *))(v73 + 168))(v70); v286 = (volatile LONG *)(v74 - (_DWORD)v286); v75 = (*(int (__thiscall **)(int *))(*v70 + 164))(v70); v76 = *v70; v282 = v75 - v282; v269 = __PAIR__(v280, (unsigned int)v67); v77 = (*(int (__thiscall **)(int *))(v76 + 148))(v70); v268 = (int)v286 + v77; v78 = (*(int (__thiscall **)(int *))(*v70 + 144))(v70); v79 = v282 + v78; } v85 = sub_8F3EB0(v79, v268, v269, SHIDWORD(v269), 0, 0); v86 = *(_DWORD *)v66; v87 = v85; if ( *(volatile LONG **)v66 != v85 ) { if ( v86 && !InterlockedDecrement((volatile LONG *)(v86 + 4)) && v86 ) (**(void (__thiscall ***)(int, signed int))v86)(v86, 1); *(_DWORD *)v66 = v87; if ( v87 ) InterlockedIncrement(v87 + 1); } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 240))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v66 + 256))(0); v66 += 4; v283 = (volatile LONG **)((char *)v283 + 1); } while ( (signed int)v283 < 52 ); v88 = sub_8FB140(v287, (int)"BetMoneyNum00", (int)&v285, (int)&v284, v278); v283 = v88; sub_8FB650(v88, v287, (int)"BetMoneyNum01"); sub_8FB650(v88, v287, (int)"BetMoneyNum02"); sub_8FB650(v88, v287, (int)"BetMoneyNum03"); sub_8FB650(v88, v287, (int)"BetMoneyNum04"); sub_8FB650(v88, v287, (int)"BetMoneyNum05"); sub_8FB650(v88, v287, (int)"BetMoneyNum06"); sub_8FB650(v88, v287, (int)"BetMoneyNum07"); sub_8FB650(v88, v287, (int)"BetMoneyNum08"); sub_8FB650(v88, v287, (int)"BetMoneyNum09"); v89 = (_DWORD *)v280; v90 = 0; v91 = (volatile LONG **)(v280 + 1256); do { memset(v325, 0, 0x80u); v282 = v90 + 1; sprintf(v325, "BetCoin%.2d", v90 + 1); v92 = sub_456820(v272, (int)v325, 0); v93 = *(v91 - 7); v286 = v92; if ( v93 != v92 ) { if ( v93 && !InterlockedDecrement(v93 + 1) && v93 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v93)(v93, 1); v94 = (int)v286; *(v91 - 7) = v286; if ( v94 ) InterlockedIncrement((volatile LONG *)(v94 + 4)); } (*(void (__stdcall **)(signed int))(**(v91 - 7) + 256))(1); v95 = sub_8F3EB0((int)v285, (int)v284, (int)v283, (int)v89, 0, 0); v96 = *v91; v286 = v95; if ( v96 != v95 ) { if ( v96 && !InterlockedDecrement(v96 + 1) && v96 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v96)(v96, 1); v97 = (int)v286; *v91 = v286; if ( v97 ) InterlockedIncrement((volatile LONG *)(v97 + 4)); } (*(void (__stdcall **)(_DWORD))(**v91 + 240))(0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(v91 - 7) + 116))(*v91, 0); v90 = v282; ++v91; } while ( v282 < 7 ); v98 = 0; v99 = (volatile LONG **)(v89 + 328); do { memset(v325, 0, 0x80u); v282 = v98 + 1; sprintf(v325, "ShareCoin%.2d", v98 + 1); v100 = sub_456820(v272, (int)v325, 0); v101 = *(v99 - 7); v286 = v100; if ( v101 != v100 ) { if ( v101 && !InterlockedDecrement(v101 + 1) && v101 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v101)(v101, 1); v102 = (int)v286; *(v99 - 7) = v286; if ( v102 ) InterlockedIncrement((volatile LONG *)(v102 + 4)); } (*(void (__stdcall **)(signed int))(**(v99 - 7) + 256))(1); v103 = sub_8F3EB0((int)v285, (int)v284, (int)v283, (int)v89, 0, 0); v104 = *v99; v286 = v103; if ( v104 != v103 ) { if ( v104 && !InterlockedDecrement(v104 + 1) && v104 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v104)(v104, 1); v105 = (int)v286; *v99 = v286; if ( v105 ) InterlockedIncrement((volatile LONG *)(v105 + 4)); } (*(void (__stdcall **)(_DWORD))(**v99 + 240))(0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(v99 - 7) + 116))(*v99, 0); v98 = v282; ++v99; } while ( v282 < 7 ); v106 = sub_8FB140(v287, (int)"Num00", (int)&v285, (int)&v284, v278); v283 = v106; sub_8FB650(v106, v287, (int)"Num01"); sub_8FB650(v106, v287, (int)"Num02"); sub_8FB650(v106, v287, (int)"Num03"); sub_8FB650(v106, v287, (int)"Num04"); sub_8FB650(v106, v287, (int)"Num05"); sub_8FB650(v106, v287, (int)"Num06"); sub_8FB650(v106, v287, (int)"Num07"); sub_8FB650(v106, v287, (int)"Num08"); sub_8FB650(v106, v287, (int)"Num09"); v107 = 0; v108 = (volatile LONG **)(v89 + 347); do { memset(v325, 0, 0x80u); v282 = v107 + 1; sprintf(v325, "MyMoney%.2d", v107 + 1); v109 = sub_456820(v272, (int)v325, 0); v110 = *(v108 - 12); v286 = v109; if ( v110 != v109 ) { if ( v110 && !InterlockedDecrement(v110 + 1) && v110 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v110)(v110, 1); v111 = (int)v286; *(v108 - 12) = v286; if ( v111 ) InterlockedIncrement((volatile LONG *)(v111 + 4)); } (*(void (__stdcall **)(signed int))(**(v108 - 12) + 256))(1); v112 = sub_8F3EB0((int)v285, (int)v284, (int)v283, (int)v89, 0, 0); v113 = *v108; v286 = v112; if ( v113 != v112 ) { if ( v113 && !InterlockedDecrement(v113 + 1) && v113 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v113)(v113, 1); v114 = (int)v286; *v108 = v286; if ( v114 ) InterlockedIncrement((volatile LONG *)(v114 + 4)); } (*(void (__stdcall **)(_DWORD))(**v108 + 240))(0); (*(void (__stdcall **)(signed int))(**v108 + 492))(1); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(v108 - 12) + 116))(*v108, 0); v107 = v282; ++v108; } while ( v282 < 12 ); sub_4A3B80(&v282); LOBYTE(v357) = 3; v116 = sub_6815F0(byte_AD9238); v277 = (void *)HIDWORD(v116); v115 = v116; LOBYTE(v357) = 2; if ( *(float *)&v282 != 0.0 ) { v117 = (void (__thiscall ***)(_DWORD, signed int))v282; if ( !InterlockedDecrement((volatile LONG *)(v282 + 4)) ) { if ( v117 ) (**v117)(v117, 1); } } v286 = (volatile LONG *)11; v283 = (volatile LONG **)(v89 + 358); while ( 1 ) { v118 = v115 % 10; v119 = (signed __int64)__PAIR__((unsigned int)v277, v115) / 10; v277 = (void *)((unsigned __int64)((signed __int64)__PAIR__((unsigned int)v277, v115) / 10) >> 32); v115 = v119; if ( v118 < 0 ) v118 = 0; (*(void (__stdcall **)(int))(**v283 + 492))(v118); if ( !((unsigned int)v277 | (unsigned int)v119) ) break; --v283; v286 = (volatile LONG *)((char *)v286 - 1); if ( (signed int)v286 < 0 ) goto LABEL_178; } v120 = (int)v286 - 1; if ( (signed int)v286 - 1 >= 0 ) { v121 = (int)&v89[v120 + 347]; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v121 + 492))(0); v121 -= 4; --v120; } while ( v120 >= 0 ); } LABEL_178: v89[416] = 0; v89[417] = 0; v89[414] = 0; v89[415] = 0; v122 = sub_4563D0(v272, 59, (int)"RankingNor", (int)"RankingClick", (int)"RankingOver", 0, 0); *((_DWORD *)v122 + 68) = dword_AD01E8; v123 = sub_40A910(-640956456); sub_8F2EA0((void **)v122, v123); v124 = sub_4563D0(v272, 60, (int)"HelpNor", (int)"HelpClick", (int)"HelpOver", 0, 0); *((_DWORD *)v124 + 68) = dword_AD01E8; v125 = sub_40A910(875959699); sub_8F2EA0((void **)v124, v125); v126 = sub_8FB140(v287, (int)"Coin01Nor", (int)&v285, (int)&v284, v278); sub_8FB650(v126, v287, (int)"Coin01Click"); sub_8FB650(v126, v287, (int)"Coin01Over"); v127 = sub_7325F0((int)v285, (int)v284, (int)v126, (int)v89, 52, 0, 0, 0); v128 = v89[420]; v129 = v127; if ( v128 != v127 ) { if ( v128 && !InterlockedDecrement((volatile LONG *)(v128 + 4)) && v128 ) (**(void (__thiscall ***)(int, signed int))v128)(v128, 1); v89[420] = v129; if ( v129 ) InterlockedIncrement((volatile LONG *)(v129 + 4)); } *(_DWORD *)(v89[420] + 272) = dword_AD01E8; v130 = (void **)v89[420]; v131 = sub_40A910(1326908656); sub_8F2EA0(v130, v131); v132 = sub_8FB140(v287, (int)"Coin02Nor", (int)&v285, (int)&v284, v278); sub_8FB650(v132, v287, (int)"Coin02Click"); sub_8FB650(v132, v287, (int)"Coin02Over"); v133 = sub_7325F0((int)v285, (int)v284, (int)v132, (int)v89, 53, 0, 0, 0); v134 = v89[421]; v135 = v133; if ( v134 != v133 ) { if ( v134 && !InterlockedDecrement((volatile LONG *)(v134 + 4)) && v134 ) (**(void (__thiscall ***)(int, signed int))v134)(v134, 1); v89[421] = v135; if ( v135 ) InterlockedIncrement((volatile LONG *)(v135 + 4)); } *(_DWORD *)(v89[421] + 272) = dword_AD01E8; v136 = (void **)v89[421]; v137 = sub_40A910(1326908660); sub_8F2EA0(v136, v137); v138 = sub_8FB140(v287, (int)"Coin03Nor", (int)&v285, (int)&v284, v278); sub_8FB650(v138, v287, (int)"Coin03Click"); sub_8FB650(v138, v287, (int)"Coin03Over"); sub_8FB650(v138, v287, (int)"Coin03Disable"); v139 = sub_7325F0((int)v285, (int)v284, (int)v138, (int)v89, 54, 0, 0, 0); v140 = v89[422]; v141 = v139; if ( v140 != v139 ) { if ( v140 && !InterlockedDecrement((volatile LONG *)(v140 + 4)) && v140 ) (**(void (__thiscall ***)(int, signed int))v140)(v140, 1); v89[422] = v141; if ( v141 ) InterlockedIncrement((volatile LONG *)(v141 + 4)); } *(_DWORD *)(v89[422] + 272) = dword_AD01E8; v142 = (void **)v89[422]; v143 = sub_40A910(454948954); sub_8F2EA0(v142, v143); v144 = sub_8FB140(v287, (int)"Coin04Nor", (int)&v285, (int)&v284, v278); sub_8FB650(v144, v287, (int)"Coin04Click"); sub_8FB650(v144, v287, (int)"Coin04Over"); sub_8FB650(v144, v287, (int)"Coin04Disable"); v145 = sub_7325F0((int)v285, (int)v284, (int)v144, (int)v89, 55, 0, 0, 0); v146 = v89[423]; v147 = v145; if ( v146 != v145 ) { if ( v146 && !InterlockedDecrement((volatile LONG *)(v146 + 4)) && v146 ) (**(void (__thiscall ***)(int, signed int))v146)(v146, 1); v89[423] = v147; if ( v147 ) InterlockedIncrement((volatile LONG *)(v147 + 4)); } *(_DWORD *)(v89[423] + 272) = dword_AD01E8; v148 = (void **)v89[423]; v149 = sub_40A910(554787366); sub_8F2EA0(v148, v149); v150 = sub_8FB140(v287, (int)"CoinMaxNor", (int)&v285, (int)&v284, v278); sub_8FB650(v150, v287, (int)"CoinMaxClick"); sub_8FB650(v150, v287, (int)"CoinMaxOver"); v151 = sub_7325F0((int)v285, (int)v284, (int)v150, (int)v89, 56, 0, 0, 0); v152 = v89[424]; v153 = v151; if ( v152 != v151 ) { if ( v152 && !InterlockedDecrement((volatile LONG *)(v152 + 4)) && v152 ) (**(void (__thiscall ***)(int, signed int))v152)(v152, 1); v89[424] = v153; if ( v153 ) InterlockedIncrement((volatile LONG *)(v153 + 4)); } *(_DWORD *)(v89[424] + 272) = dword_AD01E8; v154 = (void **)v89[424]; v155 = sub_40A910(-1685230898); sub_8F2EA0(v154, v155); v156 = (int)(v89 + 421); v286 = (volatile LONG *)4; do { v157 = *(_BYTE **)v156; v158 = *(unsigned __int8 (__thiscall **)(_BYTE *))(**(_DWORD **)v156 + 312); v157[324] = 1; if ( v158(v157) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v157 + 552))(v157, v157[324] != 0); v156 += 4; v286 = (volatile LONG *)((char *)v286 - 1); } while ( v286 ); v159 = (_BYTE *)v89[420]; v160 = *(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v159 + 312); v161 = v89[420]; v159[324] = 0; if ( v160(v161) ) (*(void (__thiscall **)(_BYTE *, bool))(*(_DWORD *)v159 + 552))(v159, v159[324] != 0); v162 = sub_4563D0(v272, 58, (int)"MinNor", (int)"MinClick", (int)"MinOver", 0, 0); v163 = (volatile LONG *)v89[170]; v164 = v162; if ( v163 != v162 ) { if ( v163 && !InterlockedDecrement(v163 + 1) && v163 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v163)(v163, 1); v89[170] = v164; if ( v164 ) InterlockedIncrement(v164 + 1); } sub_4563D0(v272, 57, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v165 = sub_4563D0(v272, 57, (int)"ExitNor", (int)"ExitClick", (int)"ExitOver", 0, 0); *((_DWORD *)v165 + 68) = dword_AD01E8; v166 = sub_40A910(-95796673); sub_8F2EA0((void **)v165, v166); v167 = sub_8FB140(v287, (int)"ResultDiceNum01", (int)&v285, (int)&v284, 0); v283 = v167; sub_8FB650(v167, v287, (int)"ResultDiceNum02"); sub_8FB650(v167, v287, (int)"ResultDiceNum03"); sub_8FB650(v167, v287, (int)"ResultDiceNum04"); sub_8FB650(v167, v287, (int)"ResultDiceNum05"); sub_8FB650(v167, v287, (int)"ResultDiceNum06"); v168 = 0; v169 = (volatile LONG **)(v89 + 428); do { memset(v325, 0, 0x80u); v282 = v168 + 1; sprintf(v325, "ResultDice%.2d", v168 + 1); v170 = sub_456820(v272, (int)v325, 0); v171 = *(v169 - 3); v286 = v170; if ( v171 != v170 ) { if ( v171 && !InterlockedDecrement(v171 + 1) && v171 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v171)(v171, 1); v172 = (int)v286; *(v169 - 3) = v286; if ( v172 ) InterlockedIncrement((volatile LONG *)(v172 + 4)); } (*(void (__stdcall **)(_DWORD))(**(v169 - 3) + 256))(0); v173 = sub_8F3EB0((int)v285, (int)v284, (int)v283, (int)v89, 0, 0); v174 = *v169; v286 = v173; if ( v174 != v173 ) { if ( v174 && !InterlockedDecrement(v174 + 1) && v174 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v174)(v174, 1); v175 = (int)v286; *v169 = v286; if ( v175 ) InterlockedIncrement((volatile LONG *)(v175 + 4)); } (*(void (__stdcall **)(_DWORD))(**v169 + 240))(0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(v169 - 3) + 116))(*v169, 0); (*(void (__stdcall **)(_DWORD))(**v169 + 492))(0); v168 = v282; ++v169; } while ( v282 < 3 ); if ( sub_8F71E0(v287, (int)"Title", &v285, &v284, &v274, &v273) ) { v178 = sub_421050(1); v179 = sub_8F4A20((char *)v285 - (char *)v281, v284 - v279, v274, v273, v178, (int)v89, 0, 0); v180 = (volatile LONG *)v89[90]; v181 = v179; if ( v180 != v179 ) { if ( v180 && !InterlockedDecrement(v180 + 1) && v180 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v180)(v180, 1); v89[90] = v181; if ( v181 ) InterlockedIncrement(v181 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v89[90] + 488))(5); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int))(*(_DWORD *)v89[90] + 464))(0, 0, 0, 255); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v89[90] + 240))(0); if ( sub_8F71E0(v287, (int)"TextBox_DiceResult", &v285, &v284, &v274, &v273) ) { v184 = sub_421050(5); v185 = sub_8F4A20((char *)v285 - (char *)v281, v284 - v279, v274, v273, v184, (int)v89, 0, 0); v186 = (volatile LONG *)v89[434]; v187 = v185; if ( v186 != v185 ) { if ( v186 && !InterlockedDecrement(v186 + 1) && v186 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v186)(v186, 1); v89[434] = v187; if ( v187 ) InterlockedIncrement(v187 + 1); } (*(void (__stdcall **)(signed int))(*(_DWORD *)v89[434] + 488))(5); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v89[434] + 240))(0); if ( sub_8F71E0(v287, (int)"Frame", &v285, &v284, &v274, &v273) ) { v190 = sub_421050(1); v191 = sub_8F4A20((char *)v285 - (char *)v281, v284 - v279, v274, v273, v190, (int)v89, 0, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v191 + 240))(v191, 0); v192 = (volatile LONG *)v89[171]; if ( v192 != v191 ) { if ( v192 && !InterlockedDecrement(v192 + 1) && v192 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v192)(v192, 1); v89[171] = v191; InterlockedIncrement(v191 + 1); } if ( !byte_ACAD5C ) sub_420410(); v193 = 0; do { v194 = byte_ACA838[v193]; name[v193++] = v194; } while ( v194 ); v195 = &name[strlen(name)]; *(_DWORD *)v195 = 1701013828; *((_DWORD *)v195 + 1) = 1869768788; *((_DWORD *)v195 + 2) = 1768828535; *((_WORD *)v195 + 6) = 102; v196 = sub_8D03E0(name, 0); v197 = operator new(0x44u); v277 = v197; LOBYTE(v357) = 4; if ( v197 ) { v198 = sub_85BD60(v196); v199 = sub_6B0A90((float *)v197, v198); } else { v199 = 0; } v89[168] = v199; v200 = *(_DWORD *)v199; LOBYTE(v357) = 2; sub_85D860((float *)(v200 + 52), flt_BA45B4, 0.0, 1.0, 0.0); if ( !byte_ACAD5C ) sub_420410(); v201 = 0; do { v202 = byte_ACA838[v201]; name[v201++] = v202; } while ( v202 ); v203 = &name[strlen(name)]; *(_DWORD *)v203 = 1701013828; *((_DWORD *)v203 + 1) = 1953785154; *((_DWORD *)v203 + 2) = 1399287401; *((_DWORD *)v203 + 3) = 1953653108; *((_DWORD *)v203 + 4) = 1718185518; v203[20] = 0; v204 = sub_8D03E0(name, 0); v205 = v89[89]; v206 = v204; if ( (void **)v205 != v204 ) { if ( v205 && !InterlockedDecrement((volatile LONG *)(v205 + 4)) && v205 ) (**(void (__thiscall ***)(int, signed int))v205)(v205, 1); v89[89] = v206; if ( v206 ) InterlockedIncrement((volatile LONG *)v206 + 1); } if ( !byte_ACAD5C ) sub_420410(); v207 = 0; do { v208 = byte_ACA838[v207]; name[v207++] = v208; } while ( v208 ); v209 = &name[strlen(name)]; *(_DWORD *)v209 = 1852403523; *((_DWORD *)v209 + 1) = 1414808898; *((_DWORD *)v209 + 2) = 776425033; *((_DWORD *)v209 + 3) = 6711662; v210 = sub_8D03E0(name, 0); v211 = (float *)operator new(0x60u); v277 = v211; LOBYTE(v357) = 5; if ( v211 ) { v281 = (void **)sub_85BD60(v210); *v211 = 0.0; LOBYTE(v357) = 6; sub_8D06C0(v211 + 1); LOBYTE(v357) = 7; sub_8D4790((_DWORD *)v211 + 7); v212 = *(_DWORD *)v211; LOBYTE(v357) = 8; if ( (void **)v212 != v281 ) { if ( v212 && !InterlockedDecrement((volatile LONG *)(v212 + 4)) && v212 ) (**(void (__thiscall ***)(int, signed int))v212)(v212, 1); v213 = v281; *(_DWORD *)v211 = v281; if ( v213 ) InterlockedIncrement((volatile LONG *)v213 + 1); } *((_WORD *)v211 + 32) = 0; } else { v211 = 0; } v89[167] = v211; v214 = *(_DWORD *)v211; *(float *)&v282 = fabs(0.6000000238418579); LOBYTE(v357) = 2; *(float *)(v214 + 100) = *(float *)&v282; if ( !byte_ACAD5C ) sub_420410(); v215 = 0; do { v216 = byte_ACA838[v215]; name[v215++] = v216; } while ( v216 ); v217 = &name[strlen(name)]; *(_DWORD *)v217 = 1467245890; *((_DWORD *)v217 + 1) = 1848536681; *((_WORD *)v217 + 4) = 26217; v217[10] = 0; v218 = sub_8D03E0(name, 0); v219 = operator new(0x44u); v277 = v219; LOBYTE(v357) = 9; if ( v219 ) { v220 = sub_85BD60(v218); v221 = sub_6B0A90((float *)v219, v220); } else { v221 = 0; } v89[169] = v221; v222 = *(float **)v221; v275 = 500.0; v276 = 340.0; v222[22] = 500.0; *(float *)&v277 = 1000.0; v222[23] = 340.0; v222[24] = 1000.0; v223 = (float *)(*(_DWORD *)v89[169] + 52); LOBYTE(v357) = 2; sub_85D860(v223, flt_BA45B4, 0.0, 0.0, 0.1); if ( !byte_ACAD5C ) sub_420410(); v224 = 0; do { v225 = byte_ACA838[v224]; name[v224++] = v225; } while ( v225 ); v226 = &name[strlen(name)]; *(_DWORD *)v226 = 1701013828; *((_DWORD *)v226 + 1) = 1801675082; *((_DWORD *)v226 + 2) = 779382640; *((_DWORD *)v226 + 3) = 6711662; v227 = sub_8D03E0(name, 0); v228 = v89[441]; v229 = v227; if ( (void **)v228 != v227 ) { if ( v228 && !InterlockedDecrement((volatile LONG *)(v228 + 4)) && v228 ) (**(void (__thiscall ***)(int, signed int))v228)(v228, 1); v89[441] = v229; if ( v229 ) InterlockedIncrement((volatile LONG *)v229 + 1); } if ( !byte_ACAD5C ) sub_420410(); v230 = 0; do { v231 = byte_ACA838[v230]; name[v230++] = v231; } while ( v231 ); v232 = &name[strlen(name)]; *(_DWORD *)v232 = 1701013828; *((_DWORD *)v232 + 1) = 1701667143; *((_DWORD *)v232 + 2) = 776885314; *((_DWORD *)v232 + 3) = 6711662; v281 = sub_8D03E0(name, 0); v233 = (float **)(v89 + 402); v279 = (char *)10; do { v234 = operator new(0x44u); v277 = v234; LOBYTE(v357) = 10; if ( v234 ) { v235 = sub_85BD60(v281); v236 = sub_6B0A90((float *)v234, v235); } else { v236 = 0; } *v233 = v236; ++v233; v237 = v279-- == (char *)1; LOBYTE(v357) = 2; } while ( !v237 ); if ( !byte_ACAD5C ) sub_420410(); v238 = 0; do { v239 = byte_ACA838[v238]; name[v238++] = v239; } while ( v239 ); v240 = &name[strlen(name)]; *(_DWORD *)v240 = 1701013828; *((_DWORD *)v240 + 1) = 1701667143; *((_DWORD *)v240 + 2) = 1667843167; *((_DWORD *)v240 + 3) = 1936020069; *((_DWORD *)v240 + 4) = 779381877; *((_DWORD *)v240 + 5) = 6711662; v281 = sub_8D03E0(name, 0); v279 = (char *)(v89 + 431); v286 = (volatile LONG *)3; do { v241 = (float *)operator new(0x60u); v277 = v241; LOBYTE(v357) = 11; if ( v241 ) { v242 = sub_85BD60(v281); *v241 = 0.0; LOBYTE(v357) = 12; sub_8D06C0(v241 + 1); LOBYTE(v357) = 13; sub_8D4790((_DWORD *)v241 + 7); v243 = *(_DWORD *)v241; LOBYTE(v357) = 14; if ( v243 != v242 ) { if ( v243 && !InterlockedDecrement((volatile LONG *)(v243 + 4)) && v243 ) (**(void (__thiscall ***)(int, signed int))v243)(v243, 1); *(_DWORD *)v241 = v242; if ( v242 ) InterlockedIncrement((volatile LONG *)(v242 + 4)); } *((_WORD *)v241 + 32) = 0; } else { v241 = 0; } v244 = v279; *(_DWORD *)v279 = v241; v237 = v286 == (volatile LONG *)1; v286 = (volatile LONG *)((char *)v286 - 1); LOBYTE(v357) = 2; v279 = v244 + 4; } while ( !v237 ); v303 = 15; v302 = 0; LOBYTE(v301) = 0; v294 = 15; v293 = 0; LOBYTE(v292) = 0; v297 = 15; v296 = 0; LOBYTE(v295) = 0; LOBYTE(v357) = 17; sub_4018E0(&v292, "MiniGame01_Dice", 0xFu); sub_4018E0(&v295, "MiniGame01_DiceA", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v245 = sub_6D0C10(&v290, byte_ACA628, (int)&v292); LOBYTE(v357) = 18; v246 = (void **)sub_4064D0(&v298, (int)v245, "\\"); if ( &v301 != v246 ) { if ( v303 >= 0x10 ) operator delete(v301); v303 = 15; v302 = 0; LOBYTE(v301) = 0; if ( (unsigned int)v246[5] >= 0x10 ) { v301 = *v246; *v246 = 0; } else { memcpy_0(&v301, v246, (size_t)v246[4] + 1); } v302 = v246[4]; v303 = (unsigned int)v246[5]; v246[4] = 0; v246[5] = 0; } if ( v300 >= 0x10 ) operator delete(v298); v300 = 15; v299 = 0; LOBYTE(v298) = 0; LOBYTE(v357) = 17; if ( v291 >= 0x10 ) operator delete(v290); v247 = sub_427A80(&v290, (int)&v295, ".kfm"); LOBYTE(v357) = 20; sub_401C20(&v301, (int)v247, 0, 0xFFFFFFFF); LOBYTE(v357) = 17; if ( v291 >= 0x10 ) operator delete(v290); sub_6E5790((const void **)(v280 + 500), (char *)&v301, (char *)&v295); sub_4018E0(&v292, "MiniGame02_Dice", 0xFu); sub_4018E0(&v295, "MiniGame01_DiceB", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v248 = sub_6D0C10(&v290, byte_ACA628, (int)&v292); LOBYTE(v357) = 21; v249 = (void **)sub_4064D0(&v298, (int)v248, "\\"); if ( &v301 != v249 ) { if ( v303 >= 0x10 ) operator delete(v301); v303 = 15; v302 = 0; LOBYTE(v301) = 0; if ( (unsigned int)v249[5] >= 0x10 ) { v301 = *v249; *v249 = 0; } else { memcpy_0(&v301, v249, (size_t)v249[4] + 1); } v302 = v249[4]; v303 = (unsigned int)v249[5]; v249[4] = 0; v249[5] = 0; } if ( v300 >= 0x10 ) operator delete(v298); v300 = 15; v299 = 0; LOBYTE(v298) = 0; LOBYTE(v357) = 17; if ( v291 >= 0x10 ) operator delete(v290); v250 = sub_427A80(&v290, (int)&v295, ".kfm"); LOBYTE(v357) = 23; sub_401C20(&v301, (int)v250, 0, 0xFFFFFFFF); LOBYTE(v357) = 17; if ( v291 >= 0x10 ) operator delete(v290); sub_6E5790((const void **)(v280 + 544), (char *)&v301, (char *)&v295); sub_4018E0(&v292, "MiniGame03_Dice", 0xFu); sub_4018E0(&v295, "MiniGame01_DiceC", 0x10u); if ( !byte_ACAD5C ) sub_420410(); v251 = sub_6D0C10(&v290, byte_ACA628, (int)&v292); LOBYTE(v357) = 24; v252 = (void **)sub_4064D0(&v298, (int)v251, "\\"); if ( &v301 != v252 ) { if ( v303 >= 0x10 ) operator delete(v301); v303 = 15; v302 = 0; LOBYTE(v301) = 0; if ( (unsigned int)v252[5] >= 0x10 ) { v301 = *v252; *v252 = 0; } else { memcpy_0(&v301, v252, (size_t)v252[4] + 1); } v302 = v252[4]; v303 = (unsigned int)v252[5]; v252[4] = 0; v252[5] = 0; } if ( v300 >= 0x10 ) operator delete(v298); v300 = 15; v299 = 0; LOBYTE(v298) = 0; LOBYTE(v357) = 17; if ( v291 >= 0x10 ) operator delete(v290); v253 = sub_427A80(&v298, (int)&v295, ".kfm"); LOBYTE(v357) = 26; sub_401C20(&v301, (int)v253, 0, 0xFFFFFFFF); LOBYTE(v357) = 17; if ( v300 >= 0x10 ) operator delete(v298); v254 = v280; v300 = 15; v299 = 0; LOBYTE(v298) = 0; sub_6E5790((const void **)(v280 + 588), (char *)&v301, (char *)&v295); sub_85D860((float *)&v288, flt_BA45B4, 1.0, 0.0, 0.0); v275 = 500.0; v276 = 350.0; qmemcpy(&v289, &v288, 0x24u); *(float *)&v277 = 1000.0; v279 = 0; v281 = (void **)(v254 + 638); v255 = (_BYTE *)(v254 + 508); do { if ( v255[4] && *(_DWORD *)v255 ) v256 = *(_DWORD *)(*(_DWORD *)v255 + 12); else v256 = *((_DWORD *)v255 - 1); qmemcpy((void *)(v256 + 52), &v289, 0x24u); if ( v255[4] && *(_DWORD *)v255 ) v257 = *(_DWORD *)(*(_DWORD *)v255 + 12); else v257 = *((_DWORD *)v255 - 1); v258 = v276; *(float *)(v257 + 88) = v275; v259 = v277; *(float *)(v257 + 92) = v258; *(_DWORD *)(v257 + 96) = v259; if ( v255[4] && *(_DWORD *)v255 ) v260 = *(_DWORD *)(*(_DWORD *)v255 + 12); else v260 = *((_DWORD *)v255 - 1); (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(v280 + 684) + 116))(v260, 0); v261 = v279; *(_WORD *)v281 = (_WORD)v279 + 1; if ( v255[4] && *(_DWORD *)v255 ) v262 = *(_DWORD *)(*(_DWORD *)v255 + 12); else v262 = *((_DWORD *)v255 - 1); *(_WORD *)(v262 + 28) |= 1u; v281 += 3; v255 += 44; v279 = (char *)v261 + 1; } while ( (signed int)v261 + 1 < 3 ); v263 = v280; v264 = *(_DWORD *)v280; *(float *)(v280 + 1768) = 0.0; v265 = *(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD))(v264 + 236); *(float *)(v263 + 1772) = 0.0; *(float *)(v263 + 1776) = 0.0; *(_DWORD *)(v263 + 1648) = 0; *(_DWORD *)(v263 + 1756) = 0; *(_BYTE *)(v263 + 1760) = 0; v265(qword_AC2F74, *(&qword_AC2F74 + 1), 0.5, 0.5); if ( v297 >= 0x10 ) operator delete(v295); v297 = 15; v296 = 0; LOBYTE(v295) = 0; if ( v294 >= 0x10 ) operator delete(v292); v294 = 15; v293 = 0; LOBYTE(v292) = 0; if ( v303 >= 0x10 ) operator delete(v301); v303 = 15; v302 = 0; LOBYTE(v301) = 0; LOBYTE(v357) = 1; sub_4562E0(v272); v266 = (void (__thiscall ***)(_DWORD, signed int))v271; LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v271 + 4)) ) (**v266)(v266, 1); v267 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( v287 && !InterlockedDecrement((volatile LONG *)(v287 + 4)) && v267 ) (**v267)(v267, 1); result = 1; } else { LOBYTE(v357) = 1; sub_4562E0(v272); v188 = (void (__thiscall ***)(_DWORD, signed int))v271; LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v271 + 4)) ) (**v188)(v188, 1); v189 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( !v287 || InterlockedDecrement((volatile LONG *)(v287 + 4)) || !v189 ) return 0; (**v189)(v189, 1); result = 0; } } else { LOBYTE(v357) = 1; sub_4562E0(v272); v182 = (void (__thiscall ***)(_DWORD, signed int))v271; LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v271 + 4)) ) (**v182)(v182, 1); v183 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( !v287 || InterlockedDecrement((volatile LONG *)(v287 + 4)) || !v183 ) return 0; (**v183)(v183, 1); result = 0; } } else { LOBYTE(v357) = 1; sub_4562E0(v272); v176 = (void (__thiscall ***)(_DWORD, signed int))v271; LOBYTE(v357) = 0; if ( !InterlockedDecrement((volatile LONG *)(v271 + 4)) ) (**v176)(v176, 1); v177 = (void (__thiscall ***)(_DWORD, signed int))v287; v357 = -1; if ( !v287 || InterlockedDecrement((volatile LONG *)(v287 + 4)) || !v177 ) return 0; (**v177)(v177, 1); result = 0; } return result; } // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // BA45B4: using guessed type float flt_BA45B4; //----- (00739A80) -------------------------------------------------------- LONG __thiscall sub_739A80(void **this) { void **v1; // esi v1 = this; *this = &mhDiceRankWin::`vftable'; this[58] = &mhDiceRankWin::`vftable'; if ( this[159] ) operator delete(this[159]); v1[159] = 0; v1[160] = 0; v1[161] = 0; if ( v1[155] ) operator delete(v1[155]); v1[155] = 0; v1[156] = 0; v1[157] = 0; return sub_8F10F0(v1); } // A06F88: using guessed type void *mhDiceRankWin::`vftable'; // A06FA4: using guessed type void *mhDiceRankWin::`vftable'; //----- (00739AF0) -------------------------------------------------------- int __cdecl sub_739AF0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x28Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &mhDiceRankWin::`vftable'; *(_DWORD *)(v2 + 232) = &mhDiceRankWin::`vftable'; *(_DWORD *)(v2 + 620) = 0; *(_DWORD *)(v2 + 624) = 0; *(_DWORD *)(v2 + 628) = 0; *(_DWORD *)(v2 + 636) = 0; *(_DWORD *)(v2 + 640) = 0; *(_DWORD *)(v2 + 644) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A06F88: using guessed type void *mhDiceRankWin::`vftable'; // A06FA4: using guessed type void *mhDiceRankWin::`vftable'; //----- (00739C50) -------------------------------------------------------- void __thiscall sub_739C50(_DWORD *this, void *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int v6; // esi char *v7; // ebx int v8; // ecx unsigned int v9; // edx unsigned int v10; // eax unsigned int v11; // edx _DWORD *v12; // ecx void (__thiscall ***v13)(_DWORD, signed int); // ebx int v14; // ebx _DWORD *v15; // ecx unsigned int v16; // eax unsigned int v17; // edx int v18; // [esp+14h] [ebp-BCh] _DWORD *v19; // [esp+18h] [ebp-B8h] int v20; // [esp+1Ch] [ebp-B4h] unsigned int v21; // [esp+20h] [ebp-B0h] bool v22; // [esp+27h] [ebp-A9h] char v23; // [esp+28h] [ebp-A8h] char v24; // [esp+29h] [ebp-A7h] int v25; // [esp+A8h] [ebp-28h] int v26; // [esp+ACh] [ebp-24h] int v27; // [esp+B0h] [ebp-20h] int v28; // [esp+B4h] [ebp-1Ch] int v29; // [esp+B8h] [ebp-18h] char v30; // [esp+BCh] [ebp-14h] int v31; // [esp+CCh] [ebp-4h] v5 = this; v6 = 0; v31 = 0; v23 = 0; memset(&v24, 0, 0x7Fu); v7 = (char *)a2; v5[148] = 0; v8 = (int)(v5 + 148); *(_DWORD *)(v8 + 4) = 0; *(_DWORD *)(v8 + 8) = 0; v9 = (signed int)((unsigned __int64)(715827883i64 * (a3 - (signed int)a2)) >> 32) >> 2; v10 = v9 + (v9 >> 31); if ( v10 ) { v11 = *((_DWORD *)a2 + 5); v21 = 0; if ( v10 > 0 ) { v20 = 1; v19 = v5 + 148; while ( 1 ) { if ( *(_DWORD *)&v7[v6 + 20] < v11 ) { ++v19; ++v20; } v12 = (_DWORD *)*sub_4A3B80(&v18); LOBYTE(v31) = 1; v22 = sub_6C4F30(v12); LOBYTE(v31) = 0; if ( v18 ) { v13 = (void (__thiscall ***)(_DWORD, signed int))v18; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) { if ( v13 ) (**v13)(v13, 1); } } if ( v22 ) { sprintf(&v23, "%d%s", v20, " "); } else if ( v20 - 1 >= 3 ) { sprintf(&v23, "%d%s", v20, " "); } else { *v19 = v21 + 1; sprintf(&v23, "%s", &unk_A03FC9); } v14 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v5[152], &v23); v25 = *(_DWORD *)((char *)a2 + v6); v26 = *(_DWORD *)((char *)a2 + v6 + 4); v27 = *(_DWORD *)((char *)a2 + v6 + 8); v15 = (_DWORD *)v5[152]; v28 = *(_DWORD *)((char *)a2 + v6 + 12); v29 = *(_DWORD *)((char *)a2 + v6 + 16); v30 = 0; sub_4661A0(v15, v14, 1, &v25); sub_464DA0((_DWORD *)v5[152], 1u, 4); sprintf(&v23, "%d", *(_DWORD *)((char *)a2 + v6 + 20)); sub_4661A0((_DWORD *)v5[152], v14, 2, &v23); v7 = (char *)a2; v16 = *(_DWORD *)((char *)a2 + v6 + 20); ++v21; v17 = (signed int)((unsigned __int64)(715827883i64 * (a3 - (signed int)a2)) >> 32) >> 2; v6 += 24; if ( v21 >= v17 + (v17 >> 31) ) break; v11 = v16; } } } sub_465130((_DWORD *)v5[152]); if ( a2 ) operator delete(a2); } //----- (00739ED0) -------------------------------------------------------- signed int __thiscall sub_739ED0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // zf signed int result; // eax void *v5; // [esp-10h] [ebp-18h] int v6; // [esp-Ch] [ebp-14h] int v7; // [esp-8h] [ebp-10h] int v8; // [esp-4h] [ebp-Ch] void **v9; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[152]; if ( v2 ) { sub_466A50(v2); v3 = v1[154] == 1; v9 = &v5; if ( v3 ) sub_743E70(&v5, v1 + 155); else sub_743E70(&v5, v1 + 159); sub_739C50(v1, v5, v6, v7, v8); result = sub_4638F0((_DWORD *)v1[151], 0); } return result; } //----- (00739F30) -------------------------------------------------------- char __thiscall sub_739F30(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx LONG v4; // eax _DWORD *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi _DWORD *v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi int v9; // ecx int (__thiscall ***v10)(_DWORD, signed int); // esi int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v3 = this; LOBYTE(v4) = a2; switch ( a2 ) { case 0: v5 = (_DWORD *)*sub_4A3B80(&a2); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } if ( v5 && sub_6C4F30(v5) ) LOBYTE(v4) = sub_727250(); else LOBYTE(v4) = sub_7296D0(v3); break; case 1: v7 = (_DWORD *)*sub_4A3B80(&v13); if ( v13 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v7 && sub_6C4F30(v7) ) LOBYTE(v4) = sub_727270(); else LOBYTE(v4) = sub_729720(v3); break; case 2: LOBYTE(v4) = sub_73B7F0(this); break; case 4: case 5: v9 = *sub_4A3B80(&v12); v14 = 0; sub_6C4DA0(v3); LOBYTE(v4) = v12; v14 = -1; if ( v12 ) { v10 = (int (__thiscall ***)(_DWORD, signed int))v12; v4 = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !v4 ) { if ( v10 ) LOBYTE(v4) = (**v10)(v10, 1); } } break; default: return v4; } return v4; } //----- (0073A0F0) -------------------------------------------------------- char __thiscall sub_73A0F0(void *this, unsigned int a2) { int v2; // esi char *v3; // eax volatile LONG *v4; // ecx volatile LONG *v5; // esi char result; // al _DWORD *v7; // eax int v8; // edi int v9; // eax HDC v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // edi volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // edi const CHAR *v19; // eax _DWORD *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax CHAR *v23; // eax CHAR *v24; // eax CHAR *v25; // eax CHAR *v26; // eax CHAR *v27; // eax CHAR *v28; // eax CHAR *v29; // eax CHAR *v30; // eax CHAR *v31; // eax CHAR *v32; // eax int v33; // eax volatile LONG v34; // edx const CHAR *v35; // edi int v36; // eax int v37; // eax rsize_t v38; // edi unsigned int v39; // eax int v40; // edi const void *v41; // eax int v42; // ecx volatile LONG **v43; // eax int v44; // eax volatile LONG *v45; // edi char v46; // ST1C_1 __int64 v47; // ST20_8 int v48; // ST28_4 const CHAR *v49; // eax int v50; // [esp+30h] [ebp-294h] int v51; // [esp+34h] [ebp-290h] int v52; // [esp+38h] [ebp-28Ch] char v53; // [esp+40h] [ebp-284h] int v54; // [esp+44h] [ebp-280h] int v55; // [esp+48h] [ebp-27Ch] int v56; // [esp+4Ch] [ebp-278h] int v57; // [esp+50h] [ebp-274h] unsigned int v58; // [esp+54h] [ebp-270h] int v59; // [esp+58h] [ebp-26Ch] int v60; // [esp+5Ch] [ebp-268h] int v61[5]; // [esp+60h] [ebp-264h] int v62; // [esp+74h] [ebp-250h] HDC hdc; // [esp+78h] [ebp-24Ch] int v64; // [esp+7Ch] [ebp-248h] char v65; // [esp+80h] [ebp-244h] unsigned int v66; // [esp+84h] [ebp-240h] unsigned int v67; // [esp+88h] [ebp-23Ch] int v68; // [esp+8Ch] [ebp-238h] rsize_t MaxCount; // [esp+90h] [ebp-234h] int v70; // [esp+94h] [ebp-230h] void *Src; // [esp+98h] [ebp-22Ch] rsize_t v72; // [esp+A8h] [ebp-21Ch] unsigned int v73; // [esp+ACh] [ebp-218h] _BYTE v74[256]; // [esp+B4h] [ebp-210h] char Dst; // [esp+1B4h] [ebp-110h] char v76; // [esp+1B5h] [ebp-10Fh] int v77; // [esp+2C0h] [ebp-4h] v2 = (int)this; v66 = a2; v70 = 0; v77 = 0; v64 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameHelp.nif"); sub_8F66B0(v3, (int)&v70, v64); v4 = (volatile LONG *)v70; if ( !v70 ) { if ( off_AC0554 ) { off_AC0554("Game\\DiceGameHelp.nif load fail", "LoadFail", 0); v4 = (volatile LONG *)v70; } v77 = -1; if ( v4 ) { v5 = v4; if ( !InterlockedDecrement(v4 + 1) ) { if ( v5 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } } return 0; } *(_DWORD *)(v2 + 296) = a2; v7 = (_DWORD *)(*(int (__stdcall **)(const char *))(*v4 + 72))("Frame"); v8 = sub_85C050(v7, 8); v64 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v77) = 1; if ( !v9 || (v10 = *(HDC *)(v9 + 4), (hdc = v10) == 0) ) { LOBYTE(v77) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v70; v77 = -1; if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) && v11 ) (**v11)(v11, 1); return 0; } v12 = sub_8FB140(v70, (int)"Frame", (int)&v68, (int)&v67, (volatile LONG *)v10); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, v66, (int)"DiceHelp", 0) ) { LOBYTE(v77) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v70; v77 = -1; if ( v70 && !InterlockedDecrement((volatile LONG *)(v70 + 4)) && v13 ) { (**v13)(v13, 1); return 0; } return 0; } v14 = v68; v66 = v67; v62 = v68; sub_456260(v61); LOBYTE(v77) = 2; sub_455FF0(v61, v2); sub_456000(v61, v14, v66); sub_456380(v61, v70); v15 = (volatile LONG *)sub_43D0D0(0x13u); if ( v15 ) v16 = sub_8FB140(v70, (int)"Theme", (int)&v68, (int)&v67, v15); else v16 = sub_8FB140(v70, (int)"Theme", (int)&v68, (int)&v67, 0); sub_8F3EB0(v68 - v14, v67 - v66, (int)v16, v2, 0, 0); sub_456820(v61, (int)"Panel01", 0); sub_456820(v61, (int)"Panel02", 0); if ( sub_8F71E0(v70, (int)"WinTitle", &v68, &v67, &v60, &v59) ) { v17 = sub_421050(7); v18 = sub_8F4A20(v68 - v14, v67 - v66, v60, v59, v17, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 1); MaxCount = *v18 + 472; v19 = sub_40A910(875959699); (*(void (__thiscall **)(volatile LONG *, const CHAR *))MaxCount)(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); v50 = 0; v51 = 0; v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; LOBYTE(v77) = 3; sub_40AE60(&v50); v20 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v50, 1); *v20 = 1; v20[1] = v70; MaxCount = (rsize_t)v20; sub_4019E0(&Src, "Column01"); LOBYTE(v77) = 4; sub_40B060((int *)(MaxCount + 72), (const void **)&Src); LOBYTE(v77) = 3; sub_636A10(&Src); MaxCount = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v50, 2); *(_DWORD *)MaxCount = 2; sub_4019E0(&Src, "Column01"); LOBYTE(v77) = 5; sub_40B060((int *)(MaxCount + 72), (const void **)&Src); LOBYTE(v77) = 3; sub_636A10(&Src); *(_DWORD *)(MaxCount + 4) = v70; sub_466680(&v50, 0); v21 = sub_8FB140(v70, (int)"Plane01", (int)&v68, (int)&v67, (volatile LONG *)hdc); v22 = sub_466330(v68 - v62 + 20, v67 - v66 + 50, (int)v21, *(float *)&v2, (int **)&v50, 0, 0); *(_DWORD *)(v2 + 344) = v22; if ( v22 ) { v73 = 15; v72 = 0; LOBYTE(Src) = 0; LOBYTE(v77) = 6; v23 = (CHAR *)sub_40A910(1076959369); sub_40AC00(&Src, v23); sub_401D10((int)&Src, "\n", 1u); v24 = (CHAR *)sub_40A910(1194398532); sub_401E30(&Src, v24); sub_401D10((int)&Src, "\n", 1u); v25 = (CHAR *)sub_40A910(1261774232); sub_401E30(&Src, v25); sub_401D10((int)&Src, "\n", 1u); v26 = (CHAR *)sub_40A910(-2138602787); sub_401E30(&Src, v26); sub_401D10((int)&Src, "\n", 1u); v27 = (CHAR *)sub_40A910(1064731273); sub_401E30(&Src, v27); sub_401D10((int)&Src, "\n", 1u); v28 = (CHAR *)sub_40A910(1064796809); sub_401E30(&Src, v28); sub_401D10((int)&Src, "\n", 1u); v29 = (CHAR *)sub_40A910(1064862345); sub_401E30(&Src, v29); sub_401D10((int)&Src, "\n", 1u); v30 = (CHAR *)sub_40A910(1064927881); sub_401E30(&Src, v30); sub_401D10((int)&Src, "\n", 1u); v31 = (CHAR *)sub_40A910(1064993417); sub_401E30(&Src, v31); sub_401D10((int)&Src, "\n", 1u); v32 = (CHAR *)sub_40A910(1756617379); sub_401E30(&Src, v32); sub_401D10((int)&Src, &unk_A04C60, 0); v74[0] = 0; memset(&v74[1], 0, 0xFFu); v33 = sub_40A8C0(*(_DWORD **)(v2 + 344), 0, 0); v34 = *v18; v62 = v33; hdc = *(HDC *)((*(int (__thiscall **)(volatile LONG *))(v34 + 456))(v18) + 192); v65 = 10; while ( 1 ) { memset(v74, 0, 0x100u); v35 = (const CHAR *)Src; if ( v73 < 0x10 ) v35 = (const CHAR *)&Src; v36 = (*(int (**)(void))(*(_DWORD *)v62 + 144))(); v37 = sub_8F5700((int)v74, v35, hdc, v36); v38 = v37; v66 = v37; v39 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v65, 0x100000000ui64); v58 = v39; if ( !v38 ) break; if ( v39 >= v38 || (MaxCount = v39, v39 == -1) ) MaxCount = v38; Dst = 0; memset(&v76, 0, 0xFFu); v40 = MaxCount; if ( v72 < MaxCount ) v40 = v72; v41 = Src; if ( v73 < 0x10 ) v41 = &Src; memcpy_s(&Dst, 0xFFu, v41, v40); v42 = *(_DWORD *)(v2 + 344); *(&Dst + v40) = 0; ((void (__thiscall *)(int, char *))loc_466CA0)(v42, &Dst); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*(_DWORD *)(v2 + 344), &unk_A03FBF); if ( v58 > v66 ) sub_4014F0(&Src, 0, MaxCount); else sub_4014F0(&Src, 0, MaxCount + 1); } *(_BYTE *)(*(_DWORD *)(v2 + 344) + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 344), 4); sub_465130(*(_DWORD **)(v2 + 344)); LOBYTE(v77) = 3; sub_636A10(&Src); } v43 = sub_8FB140(v70, (int)"SlideBar_SlideBtnMiddle", (int)&v68, (int)&v67, 0); v44 = sub_464310(v70, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v43, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 348) = v44; *(_DWORD *)(v44 + 312) = 3; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; sub_4638F0(*(_DWORD **)(v2 + 348), *(_DWORD *)(*(_DWORD *)(v2 + 344) + 336)); sub_4563D0(v61, 1, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v45 = sub_4563D0(v61, 2, (int)"Btn02Nor", (int)"Btn02Click", (int)"Btn02Over", 0, 0); v46 = dword_AA8C68; v47 = qword_AA8C6C; v48 = dword_AA8C74; v49 = sub_40A910(-487744810); sub_456040((int)v45, (int)v49, v46, v47, SHIDWORD(v47), v48, 5); (*(void (__thiscall **)(int, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.1, 0.30000001); LOBYTE(v77) = 2; sub_40AE10((void **)&v50); LOBYTE(v77) = 1; sub_4562E0(v61); LOBYTE(v77) = 0; sub_410C00(&v64); v77 = -1; sub_410C00(&v70); result = 1; } else { LOBYTE(v77) = 1; sub_4562E0(v61); LOBYTE(v77) = 0; sub_410C00(&v64); v77 = -1; sub_410C00(&v70); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type __int64 qword_AA8C6C; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0073AB50) -------------------------------------------------------- char __thiscall sub_73AB50(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG *v5; // ecx volatile LONG *v6; // esi char result; // al _DWORD *v8; // eax int v9; // eax int v10; // edi int v11; // eax volatile LONG *v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi volatile LONG **v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi int v16; // edi int v17; // ebx volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax char v24; // ST70_1 __int64 v25; // ST74_8 int v26; // ST7C_4 const CHAR *v27; // eax int *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax int v32; // eax int *v33; // ecx int (*v34)(void); // edx int v35; // eax int v36; // eax int v37; // ecx int *v38; // eax int v39; // eax volatile LONG *v40; // eax volatile LONG v41; // edx const CHAR *v42; // eax int v43; // ecx int *v44; // eax int v45; // eax volatile LONG *v46; // eax volatile LONG v47; // edx const CHAR *v48; // eax int v49; // eax const CHAR *v50; // eax int v51; // eax const CHAR *v52; // eax int v53; // eax volatile LONG *v54; // edi volatile LONG v55; // ebx const CHAR *v56; // eax volatile LONG **v57; // edi signed int v58; // ebx volatile LONG **v59; // ST184_4 volatile LONG *v60; // eax volatile LONG *v61; // eax volatile LONG *v62; // eax int v63; // [esp+188h] [ebp-88h] int v64; // [esp+18Ch] [ebp-84h] int v65; // [esp+190h] [ebp-80h] char v66; // [esp+198h] [ebp-78h] int v67; // [esp+19Ch] [ebp-74h] int v68; // [esp+1A0h] [ebp-70h] int v69; // [esp+1A4h] [ebp-6Ch] int v70; // [esp+1A8h] [ebp-68h] int v71[5]; // [esp+1ACh] [ebp-64h] int v72; // [esp+1C0h] [ebp-50h] volatile LONG *v73; // [esp+1C4h] [ebp-4Ch] int v74; // [esp+1C8h] [ebp-48h] int v75; // [esp+1CCh] [ebp-44h] int *v76; // [esp+1D0h] [ebp-40h] int v77; // [esp+1D4h] [ebp-3Ch] int v78; // [esp+1D8h] [ebp-38h] int v79; // [esp+1DCh] [ebp-34h] int *v80; // [esp+1E0h] [ebp-30h] const void *v81[7]; // [esp+1E4h] [ebp-2Ch] int v82; // [esp+20Ch] [ebp-4h] v2 = this; v79 = 0; v3 = dword_BA6BA0; v82 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameHallOfFame.nif"); sub_8F66B0(v4, (int)&v79, v3); v5 = (volatile LONG *)v79; if ( !v79 ) { if ( off_AC0554 ) { off_AC0554("Game\\DiceGameHallOfFame.nif load fail", "LoadFail", v79); v5 = (volatile LONG *)v79; } v82 = -1; if ( v5 ) { v6 = v5; if ( !InterlockedDecrement(v5 + 1) ) { if ( v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } } return 0; } v2[74] = (volatile LONG *)a2; v8 = (_DWORD *)(*(int (__stdcall **)(const char *))(*v5 + 72))("Frame"); v9 = sub_85C050(v8, 8); v10 = v9; v72 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = **(_DWORD **)(v10 + 40); LOBYTE(v82) = 1; if ( v11 && (v12 = *(volatile LONG **)(v11 + 4), (v73 = v12) != 0) ) { v14 = sub_8FB140(v79, (int)"Frame", (int)&v78, (int)&v77, v12); if ( sub_8F1440(v2, 0, 0, (int)v14, 0, a2, (int)"DiceRank", 0) ) { v16 = v78; v17 = v77; sub_456260(v71); LOBYTE(v82) = 2; sub_455FF0(v71, (int)v2); sub_456000(v71, v16, v17); sub_456380(v71, v79); v18 = (volatile LONG *)sub_43D0D0(0x13u); if ( v18 ) v19 = sub_8FB140(v79, (int)"Theme", (int)&v78, (int)&v77, v18); else v19 = sub_8FB140(v79, (int)"Theme", (int)&v78, (int)&v77, 0); sub_8F3EB0(v78 - v16, v77 - v17, (int)v19, (int)v2, 0, 0); sub_456820(v71, (int)"Panel01", 0); sub_456820(v71, (int)"Panel02", 0); sub_456820(v71, (int)"Panel03", 0); sub_456820(v71, (int)"Plane01", 0); if ( sub_8F71E0(v79, (int)"WinTitle", &v78, &v77, &v74, &v75) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v78 - v16, v77 - v17, v74, v75, v20, (int)v2, 0, 0); v22 = *v21; v80 = (int *)v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); v76 = (int *)(*v80 + 472); v23 = sub_40A910(949315223); ((void (__thiscall *)(int *, const CHAR *))*v76)(v80, v23); (*(void (__stdcall **)(_DWORD))(*v80 + 240))(0); v76 = (int *)sub_4563D0(v71, 5, (int)"Btn01Nor", (int)"Btn01Click", (int)"Btn01Over", 0, 0); v24 = dword_AA8C68; v25 = qword_AA8C6C; v26 = dword_AA8C74; v27 = sub_40C190(1331644831); sub_456040((int)v76, (int)v27, v24, v25, SHIDWORD(v25), v26, 5); sub_4563D0(v71, 4, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v63 = 0; v64 = 0; v65 = 0; v66 = 0; v67 = 0; v68 = 0; v69 = 0; v70 = 0; LOBYTE(v82) = 3; v28 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v63, 1); *v28 = 1; v28[1] = v79; v80 = v28; sub_4019E0(v81, "ColumnBarNor"); LOBYTE(v82) = 4; v76 = v80 + 18; sub_40B060(v80 + 18, v81); LOBYTE(v82) = 3; sub_636A10(v81); sub_4019E0(v81, "ColumnBarOver"); LOBYTE(v82) = 5; sub_40B060(v76, v81); LOBYTE(v82) = 3; sub_636A10(v81); v80 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v63, 2); *v80 = 2; sub_4019E0(v81, "Column01"); LOBYTE(v82) = 6; sub_40B060(v80 + 18, v81); LOBYTE(v82) = 3; sub_636A10(v81); v80[1] = v79; v80 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v63, 2); *v80 = 2; sub_4019E0(v81, "Column02"); LOBYTE(v82) = 7; sub_40B060(v80 + 18, v81); LOBYTE(v82) = 3; sub_636A10(v81); v80[1] = v79; v80 = (int *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v63, 2); *v80 = 2; sub_4019E0(v81, "Column03"); LOBYTE(v82) = 8; sub_40B060(v80 + 18, v81); LOBYTE(v82) = 3; sub_636A10(v81); v80[1] = v79; v67 = 3; v68 = 0; sub_466680(&v63, 0); v29 = sub_8FB140(v79, (int)"TextBox", (int)&v78, (int)&v77, v73); v30 = sub_466330(v78 - v16, v77 - v17, (int)v29, *(float *)&v2, (int **)&v63, 0, 0); v2[152] = v30; *((_DWORD *)v30 + 88) = 3; sub_464D00(v2[152], 0); sub_465130(v2[152]); v31 = sub_8FB140(v79, (int)"SlideBar_SlideBtnMiddle", (int)&v78, (int)&v77, v73); v32 = sub_464310(v79, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v31, 0, v2); v2[151] = (volatile LONG *)v32; *(_DWORD *)(v32 + 312) = 2; *((_DWORD *)v2[151] + 76) = 1; v33 = (int *)v2[151]; v34 = *(int (**)(void))(*v2[151] + 168); v80 = (int *)*v2[151]; v76 = v33; v35 = v34(); v36 = (*(int (__stdcall **)(int))(*v76 + 164))(v35); ((void (__thiscall *)(volatile LONG *, int))v80[77])(v2[151], v36); sub_4638F0(v2[151], *((_DWORD *)v2[152] + 84)); v80 = (int *)sub_8FB140(v79, (int)"JobTabOff01", (int)&v78, (int)&v77, v73); sub_8FB650(v80, v79, (int)"JobTabOn01"); v2[86] = sub_465940(v78 - v16, v77 - v17, (int)v80, (int)v2, 0, 0); v37 = v80[9]; v38 = *(int **)(*(_DWORD *)v37 + 20); v76 = *(int **)(*(_DWORD *)v37 + 24); v80 = v38; v39 = sub_421050(7); v40 = sub_8F4A20(v78 - v16, v77 - v17 + 1, (int)v80, (int)v76, v39, (int)v2, 0, 0); v41 = *v40; v80 = (int *)v40; (*(void (__thiscall **)(volatile LONG *, signed int))(v41 + 488))(v40, 5); v76 = (int *)(*v80 + 472); v42 = sub_40A910(-1433377408); ((void (__thiscall *)(int *, const CHAR *))*v76)(v80, v42); (*(void (__stdcall **)(_DWORD))(*v80 + 240))(0); v80 = (int *)sub_8FB140(v79, (int)"JobTabOff02", (int)&v78, (int)&v77, v73); sub_8FB650(v80, v79, (int)"JobTabOn02"); v2[87] = sub_465940(v78 - v16, v77 - v17, (int)v80, (int)v2, 1, 0); v43 = v80[9]; v44 = *(int **)(*(_DWORD *)v43 + 20); v76 = *(int **)(*(_DWORD *)v43 + 24); v80 = v44; v45 = sub_421050(7); v46 = sub_8F4A20(v78 - v16, v77 - v17 + 1, (int)v80, (int)v76, v45, (int)v2, 0, 0); v47 = *v46; v80 = (int *)v46; (*(void (__thiscall **)(volatile LONG *, signed int))(v47 + 488))(v46, 5); v76 = (int *)(*v80 + 472); v48 = sub_40A910(1094200734); ((void (__thiscall *)(int *, const CHAR *))*v76)(v80, v48); (*(void (__stdcall **)(_DWORD))(*v80 + 240))(0); if ( sub_8F71E0(v79, (int)"Text01", &v78, &v77, &v74, &v75) ) { v49 = sub_421050(2); v80 = (int *)sub_8F4A20(v78 - v16, v77 - v17, v74, v75, v49, (int)v2, 0, 0); v76 = (int *)(*v80 + 472); v50 = sub_40C190(-1850608659); ((void (__thiscall *)(int *, const CHAR *))*v76)(v80, v50); (*(void (__stdcall **)(signed int))(*v80 + 488))(5); (*(void (__stdcall **)(_DWORD))(*v80 + 240))(0); if ( sub_8F71E0(v79, (int)"Text02", &v78, &v77, &v74, &v75) ) { v51 = sub_421050(2); v80 = (int *)sub_8F4A20(v78 - v16, v77 - v17, v74, v75, v51, (int)v2, 0, 0); v76 = (int *)(*v80 + 472); v52 = sub_40C190(524452521); ((void (__thiscall *)(int *, const CHAR *))*v76)(v80, v52); (*(void (__stdcall **)(signed int))(*v80 + 488))(5); (*(void (__stdcall **)(_DWORD))(*v80 + 240))(0); if ( sub_8F71E0(v79, (int)"Text03", &v78, &v77, &v74, &v75) ) { v53 = sub_421050(2); v54 = sub_8F4A20(v78 - v16, v77 - v17, v74, v75, v53, (int)v2, 0, 0); v55 = *v54; v56 = sub_40A910(-146790590); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v55 + 472))(v54, v56); (*(void (__thiscall **)(volatile LONG *, signed int))(*v54 + 488))(v54, 5); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v54 + 240))(v54, 0); v57 = v2 + 108; v58 = 0; do { v76 = (int *)sub_8FB140(v79, (int)"Rank_Gold", (int)&v78, (int)&v77, v73); v80 = (int *)sub_8FB140(v79, (int)"Rank_Silver", (int)&v78, (int)&v77, v73); v59 = sub_8FB140(v79, (int)"Rank_Bronze", (int)&v78, (int)&v77, v73); v60 = sub_8F3EB0(0, 0, (int)v76, (int)v2, 0, 0); *(v57 - 20) = v60; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v60 + 240))(v60, 0); (*(void (__stdcall **)(_DWORD))(**(v57 - 20) + 256))(0); v61 = sub_8F3EB0(0, 0, (int)v80, (int)v2, 0, 0); *v57 = v61; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v61 + 240))(v61, 0); (*(void (__stdcall **)(_DWORD))(**v57 + 256))(0); v62 = sub_8F3EB0(0, 0, (int)v59, (int)v2, 0, 0); v57[20] = v62; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v62 + 240))(v62, 0); (*(void (__stdcall **)(_DWORD))(*v57[20] + 256))(0); v58 += 4; ++v57; } while ( v58 < 80 ); (*((void (__thiscall **)(volatile LONG **, int, _DWORD, _DWORD, _DWORD))*v2 + 59))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.40000001, 0.5); *((_BYTE *)v2[86] + 380) = 1; *((_BYTE *)v2[87] + 380) = 0; v2[154] = (volatile LONG *)1; LOBYTE(v82) = 2; sub_40AE10((void **)&v63); LOBYTE(v82) = 1; sub_4562E0(v71); LOBYTE(v82) = 0; sub_410C00(&v72); v82 = -1; sub_410C00(&v79); return 1; } } } LOBYTE(v82) = 2; sub_40AE10((void **)&v63); } LOBYTE(v82) = 1; sub_4562E0(v71); LOBYTE(v82) = 0; sub_410C00(&v72); v82 = -1; sub_410C00(&v79); return 0; } LOBYTE(v82) = 0; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v15 = (void (__thiscall ***)(_DWORD, signed int))v79; v82 = -1; if ( !v79 || InterlockedDecrement((volatile LONG *)(v79 + 4)) || !v15 ) return 0; (**v15)(v15, 1); result = 0; } else { LOBYTE(v82) = 0; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v79; v82 = -1; if ( !v79 || InterlockedDecrement((volatile LONG *)(v79 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type __int64 qword_AA8C6C; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (0073B710) -------------------------------------------------------- void __thiscall sub_73B710(void *this) { *(_DWORD *)this = &MHDiceAniActor::`vftable'; *((_WORD *)this + 2) = 999; } // A06878: using guessed type void *MHDiceAniActor::`vftable'; //----- (0073B730) -------------------------------------------------------- void __thiscall sub_73B730(void *this) { *(_DWORD *)this = &mhObjActor::`vftable'; } // 9F97D0: using guessed type void *mhObjActor::`vftable'; //----- (0073B740) -------------------------------------------------------- void __thiscall sub_73B740(int *this) { int *v1; // esi int v2; // edi int v3; // esi v1 = this; v2 = *this; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *v1 = 0; } sub_8D47C0(v1 + 7); nullsub_6(v1 + 1); v3 = *v1; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (0073B7F0) -------------------------------------------------------- int __thiscall sub_73B7F0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[152]; if ( result ) { v3 = (_DWORD *)this[151]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[152] + 344) = *(_DWORD *)(v1[151] + 300); result = sub_465130((_DWORD *)v1[152]); } } return result; } //----- (0073B840) -------------------------------------------------------- void *__thiscall sub_73B840(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &BettingBut::`vftable'; *((_DWORD *)this + 58) = &BettingBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A05D08: using guessed type void *BettingBut::`vftable'; // A05D24: using guessed type void *BettingBut::`vftable'; //----- (0073B880) -------------------------------------------------------- void *__thiscall sub_73B880(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &ToggleBut::`vftable'; *((_DWORD *)this + 58) = &ToggleBut::`vftable'; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A05F60: using guessed type void *ToggleBut::`vftable'; // A05F7C: using guessed type void *ToggleBut::`vftable'; //----- (0073B8D0) -------------------------------------------------------- void *__thiscall sub_73B8D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhMinimizeDiceGameWin::`vftable'; *((_DWORD *)this + 58) = &mhMinimizeDiceGameWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A061B4: using guessed type void *mhMinimizeDiceGameWin::`vftable'; // A061D4: using guessed type void *mhMinimizeDiceGameWin::`vftable'; //----- (0073B910) -------------------------------------------------------- void *__thiscall sub_73B910(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhDiceHelpWin::`vftable'; *((_DWORD *)this + 58) = &mhDiceHelpWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A063F8: using guessed type void *mhDiceHelpWin::`vftable'; // A06414: using guessed type void *mhDiceHelpWin::`vftable'; //----- (0073B950) -------------------------------------------------------- void *__thiscall sub_73B950(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &mhDiceRateSheetWin::`vftable'; *((_DWORD *)this + 58) = &mhDiceRateSheetWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A06638: using guessed type void *mhDiceRateSheetWin::`vftable'; // A06654: using guessed type void *mhDiceRateSheetWin::`vftable'; //----- (0073B990) -------------------------------------------------------- char __thiscall sub_73B990(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], 0); return (char)v2; } //----- (0073B9B0) -------------------------------------------------------- char __thiscall sub_73B9B0(_DWORD *this) { _DWORD *v1; // esi volatile LONG *v2; // eax v1 = this; v2 = (volatile LONG *)sub_402BF0(this); if ( v2 ) LOBYTE(v2) = sub_8F2C80(v2, v1[74], 1); return (char)v2; } //----- (0073B9D0) -------------------------------------------------------- LONG __thiscall sub_73B9D0(LONG *this, LONG a2) { LONG *v2; // esi LONG result; // eax LONG v4; // edi bool v5; // zf LONG v6; // eax int v7; // eax LONG v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax LONG v13; // eax int v14; // eax int (__thiscall *v15)(LONG *, signed int); // eax LONG *v16; // ecx char v17; // [esp+34h] [ebp-4h] v2 = this; result = this[83]; if ( result != 2 && result != 3 && result != 4 ) { v4 = a2; if ( this[77] != a2 ) { (*(void (__stdcall **)(LONG))(*this + 556))(a2); v5 = *((_BYTE *)v2 + 328) == 0; v2[77] = v4; if ( v5 ) { v6 = v2[72]; if ( *(_DWORD *)(v6 + 24) > 3u ) { v7 = *(_DWORD *)(*(_DWORD *)(v6 + 16) + 12); if ( v7 ) { (*(void (__thiscall **)(LONG *, LONG *, int))(*v2 + 120))(v2, &a2, v7); sub_410C00(&a2); } } } v8 = v2[83]; if ( v8 ) { v9 = v8 - 1; if ( v9 ) { v10 = v9 - 1; if ( v10 ) { result = v10 - 1; if ( !result ) { if ( (unsigned int)v2[79] > 3 ) { v11 = sub_6E9130((_DWORD *)v2[72], v2[73]); if ( v11 ) { (*(void (__thiscall **)(LONG *, LONG *, int))(*v2 + 120))(v2, &a2, v11); sub_410C00(&a2); } result = v2[72]; if ( *(_DWORD *)(result + 24) > 2u ) { result = *(_DWORD *)(*(_DWORD *)(result + 16) + 8); if ( result ) { (*(void (__thiscall **)(LONG *, LONG, signed int))(*v2 + 116))(v2, result, 1); sub_85BED0((_DWORD **)v2, 0.0, 0); result = sub_85C4D0(v2); } } } else { result = (*(int (__thiscall **)(LONG *, _DWORD))(*v2 + 492))(v2, 0); } } } else if ( (unsigned int)v2[79] <= 3 ) { LABEL_33: result = (*(int (__thiscall **)(LONG *, _DWORD))(*v2 + 492))(v2, 0); } else { v12 = sub_6E9130((_DWORD *)v2[72], v2[73]); if ( v12 ) { (*(void (__thiscall **)(LONG *, char *, int))(*v2 + 120))(v2, &v17, v12); sub_410C00(&v17); } result = v2[72]; if ( *(_DWORD *)(result + 24) > 1u ) { result = *(_DWORD *)(*(_DWORD *)(result + 16) + 4); if ( result ) { (*(void (__thiscall **)(LONG *, LONG, signed int))(*v2 + 116))(v2, result, 1); if ( *((_BYTE *)v2 + 328) == 1 ) { v13 = v2[72]; if ( *(_DWORD *)(v13 + 24) > 3u ) { v14 = *(_DWORD *)(*(_DWORD *)(v13 + 16) + 12); if ( v14 ) (*(void (__thiscall **)(LONG *, int, signed int))(*v2 + 116))(v2, v14, 1); } } sub_85BED0((_DWORD **)v2, 0.0, 0); result = sub_85C4D0(v2); } } } } else { v15 = *(int (__thiscall **)(LONG *, signed int))(*v2 + 492); v16 = v2; if ( (unsigned int)v2[79] >= 4 ) LABEL_35: result = v15(v16, 1); else result = v15(v2, 0); } } else { switch ( v4 ) { case 0: case 1: goto LABEL_33; case 2: v15 = *(int (__thiscall **)(LONG *, signed int))(*v2 + 492); v16 = v2; if ( (unsigned int)v2[79] > 2 ) goto LABEL_35; goto LABEL_37; case 3: v15 = *(int (__thiscall **)(LONG *, signed int))(*v2 + 492); v16 = v2; if ( (unsigned int)v2[79] > 3 ) result = v15(v2, 2); else LABEL_37: result = v15(v16, 0); break; default: result = (*(int (__thiscall **)(LONG *, _DWORD))(*v2 + 492))(v2, 0); v2[77] = 0; break; } } } } return result; } //----- (0073BC70) -------------------------------------------------------- void *__thiscall sub_73BC70(void *this, char a2) { void *v2; // esi v2 = this; sub_72A810(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0073BCA0) -------------------------------------------------------- void *__thiscall sub_73BCA0(void *this, char a2) { void *v2; // esi v2 = this; sub_731240((int **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0073BCD0) -------------------------------------------------------- void *__thiscall sub_73BCD0(void *this, char a2) { void *v2; // esi v2 = this; sub_731D60((int **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0073BD00) -------------------------------------------------------- _DWORD *__cdecl sub_73BD00(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 6 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; result[4] = v3[4]; result[5] = v3[5]; } v3 += 6; } return result; } //----- (0073BD50) -------------------------------------------------------- int __thiscall sub_73BD50(void *this, _BYTE *a2) { void *v2; // esi int result; // eax v2 = this; result = (*(int (**)(void))(*(_DWORD *)this + 312))(); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6ACC ) ++dword_BA6ACC; result = sub_8F1140(v2, a2); byte_BA6AC8 = 0; if ( dword_BA6ACC ) --dword_BA6ACC; byte_BA6AA4 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; } return result; } // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (0073BDD0) -------------------------------------------------------- void *__thiscall sub_73BDD0(void *this, char a2) { void *v2; // esi v2 = this; sub_739A80((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0073BE00) -------------------------------------------------------- char __thiscall sub_73BE00(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx char result; // al char v4; // [esp+7h] [ebp-1h] v1 = this; v2 = (_DWORD *)this[1393]; if ( !v2 || sub_73D030(v2) ) return sub_6F3D10(&off_AB7F2C, 47, 202, &v4, 1u); result = *((_BYTE *)v1 + 5570) == 0; *((_BYTE *)v1 + 5570) = result; return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073BE50) -------------------------------------------------------- char __stdcall sub_73BE50(void *a1) { char result; // al result = (char)a1; if ( a1 ) result = sub_6F3D10(&off_AB7F2C, 47, 204, a1, 4u); return result; } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073BE80) -------------------------------------------------------- char __thiscall sub_73BE80(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; return sub_6F3D10(&off_AB7F2C, 47, 206, (char *)&v2 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073BEA0) -------------------------------------------------------- char __thiscall sub_73BEA0(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; return sub_6F3D10(&off_AB7F2C, 47, 208, (char *)&v2 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073BEC0) -------------------------------------------------------- signed int __thiscall sub_73BEC0(_DWORD *this, _WORD *a2) { _DWORD *v2; // ecx v2 = (_DWORD *)this[1393]; if ( *a2 == 10447 ) { if ( v2 ) { sub_73CCC0(v2, 1); return 1; } } else if ( v2 ) { sub_73CCC0(v2, 0); } return 1; } //----- (0073BF00) -------------------------------------------------------- signed int __thiscall sub_73BF00(_DWORD *this, _WORD *a2) { _DWORD *v2; // esi signed int v3; // edx char *v4; // eax unsigned __int8 *v5; // ecx int v6; // ecx char v8; // [esp+4h] [ebp-28h] char v9; // [esp+8h] [ebp-24h] v2 = this; if ( *a2 == 10450 ) { v3 = 2; v4 = &v9; v5 = (unsigned __int8 *)a2 + 9; do { *((_DWORD *)v4 - 1) = *(v5 - 1); *(_DWORD *)v4 = *v5; *((_DWORD *)v4 + 1) = v5[1]; v4 += 12; v5 -= 3; --v3; } while ( v3 >= 0 ); v6 = v2[1393]; if ( v6 ) sub_73CDA0(v6, &v8); } return 1; } //----- (0073BF80) -------------------------------------------------------- signed int __thiscall sub_73BF80(_DWORD *this, _WORD *a2) { int v2; // ecx if ( *a2 == 10452 ) { v2 = this[1393]; if ( v2 ) sub_73D130(v2, (int)a2); } return 1; } //----- (0073BFB0) -------------------------------------------------------- signed int __stdcall sub_73BFB0(int a1) { return 1; } //----- (0073BFC0) -------------------------------------------------------- signed int __thiscall sub_73BFC0(_DWORD *this, _BYTE *a2) { _DWORD **v2; // ecx if ( a2 ) { v2 = (_DWORD **)this[1393]; if ( v2 ) sub_73D070(v2, a2); } return 1; } //----- (0073BFF0) -------------------------------------------------------- char __thiscall sub_73BFF0(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; return sub_6F3D10(&off_AB7F2C, 47, 217, (char *)&v2 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073C010) -------------------------------------------------------- char __thiscall sub_73C010(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; return sub_6F3D10(&off_AB7F2C, 47, 219, (char *)&v2 + 3, 1u); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (0073C030) -------------------------------------------------------- void __thiscall sub_73C030(int this, float a2) { int v2; // esi v2 = this; if ( *(_DWORD *)(this + 5288) == 4 && !(*(unsigned __int8 (**)(void))(**(_DWORD **)(this + 5572) + 260))() ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 5572) + 324))(LODWORD(a2)); } //----- (0073C070) -------------------------------------------------------- char sub_73C070() { _DWORD **v0; // eax v0 = (_DWORD **)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v0 ) LOBYTE(v0) = sub_4E2BC0(v0); return (char)v0; } //----- (0073C090) -------------------------------------------------------- void __thiscall sub_73C090(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[1394] ) { if ( (*(unsigned __int8 (**)(void))(*this[1394] + 260))() ) sub_8F81A0(&unk_BA6B10, v1[1394]); else sub_8F82A0(&unk_BA6B10, v1[1394]); } } //----- (0073C0E0) -------------------------------------------------------- char __stdcall sub_73C0E0(void *a1) { char *v1; // eax int *v2; // eax float v3; // ecx int v4; // edx long double v5; // st7 double v6; // st7 double v7; // st6 unsigned __int8 v8; // al char v10; // [esp+8h] [ebp-54h] float v11[3]; // [esp+14h] [ebp-48h] float v12; // [esp+20h] [ebp-3Ch] float v13; // [esp+24h] [ebp-38h] float v14; // [esp+28h] [ebp-34h] float v15; // [esp+2Ch] [ebp-30h] float v16; // [esp+30h] [ebp-2Ch] char v17; // [esp+34h] [ebp-28h] v1 = sub_664AB0(dword_AD8C90, *(_WORD *)a1); if ( v1 ) { v2 = (int *)sub_4A3910(dword_AD8EBC, (float *)&v10, (int)v1); v3 = *((float *)v2 + 1); v12 = *(float *)v2; v4 = v2[2]; v13 = v3; v14 = 0.0; sub_4430B0(&v12); v16 = v12 * 0.0 + v13 + v14 * 0.0; v14 = v13 * 0.0 - v12; v5 = v16; if ( v16 <= -1.0 ) { v6 = flt_BA45B4; } else if ( v5 >= 1.0 ) { v6 = 0.0; } else { v16 = acos(v5); v6 = v16; } v16 = v6; v16 = v16 * 57.2957763671875; v7 = v16 * 0.5; if ( v14 > 0.0 ) v7 = 180.0 - v7; v16 = v7; v8 = (signed int)v16; *((_BYTE *)a1 + 3) = v8; v15 = (flt_BA45B4 + flt_BA45B4) * (double)v8 / 180.0; sub_85D810((float *)&v17, v15); sub_85DA90((float *)&v17, v11, (float *)&dword_AB4FE8); (*(void (__stdcall **)(float *))(*(_DWORD *)dword_AD8EBC + 192))(v11); } return sub_6F3D10(&off_AB7F2C, 47, 200, a1, 4u); } // AB4FE8: using guessed type int dword_AB4FE8; // AB7F2C: using guessed type void **off_AB7F2C; // BA45B4: using guessed type float flt_BA45B4; //----- (0073C260) -------------------------------------------------------- int __thiscall sub_73C260(void *this, unsigned __int16 *a2) { void *v2; // esi int result; // eax _DWORD *v4; // edi __int64 v5; // rax int v6; // ecx __int64 v7; // rax v2 = this; result = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = (_DWORD *)result; if ( result ) { if ( a2[1] == 10432 ) { v5 = sub_6815F0(byte_AD9238); *((float *)v2 + 1310) = 0.0; *((_QWORD *)v2 + 660) = v5; *((_DWORD *)v2 + 1393) = v4[209]; *((_DWORD *)v2 + 1395) = v4[210]; *((_DWORD *)v2 + 1394) = v4[211]; v6 = *((_DWORD *)v2 + 1393); *((_DWORD *)v2 + 1396) = v4[212]; if ( v6 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 276))(0.0); (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 1393) + 240))(0); sub_8F82A0(&unk_BA6B10, *((_DWORD **)v2 + 1393)); *(_DWORD *)(*((_DWORD *)v2 + 1393) + 796) = *a2; sub_740080(*((int **)v2 + 1393)); v7 = sub_6815F0(byte_AD9238); sub_73D050(*((_DWORD **)v2 + 1393), v7, SHIDWORD(v7)); *((_BYTE *)v2 + 5570) = 0; *((_BYTE *)v2 + 5260) = 1; *((_DWORD *)v2 + 1322) = 4; *((_WORD *)v2 + 2784) = -1; sub_6BA650(&dword_AB6520, 54); unknown_libname_12(&dword_AB6520); sub_6BA1D0(&dword_AB6520, "GB_SlotMachine.mp3"); } result = 1; } else { result = 0; } } return result; } // 6BA230: using guessed type int __thiscall unknown_libname_12(_DWORD); //----- (0073C3C0) -------------------------------------------------------- char *__stdcall sub_73C3C0(int a1) { char *result; // eax char *v2; // esi unsigned __int8 *v3; // eax if ( a1 ) { result = sub_664AB0(dword_AD8C90, *(_WORD *)a1); v2 = result; if ( !result ) return result; v3 = (unsigned __int8 *)sub_4B1560(*(_DWORD *)(a1 + 2)); if ( v3 ) (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v2 + 456))(v2, *v3); } return (char *)1; } //----- (0073C420) -------------------------------------------------------- void __stdcall sub_73C420(int a1, char a2, char a3) { _DWORD *v3; // eax int v4; // esi int *v5; // eax char v6; // [esp+8h] [ebp-10h] v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v4 = (int)v3; if ( v3 ) { if ( a2 ) sub_492060(v3, a1); if ( a3 ) { v5 = (int *)sub_4B1B10((float *)&v6, 0x32u); sub_492030(v4, a1, v4, a1, *v5, v5[1], v5[2], v5[3]); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v4 + 1040)); } } } //----- (0073C4A0) -------------------------------------------------------- signed int __stdcall sub_73C4A0(_DWORD *a1) { int v1; // edx int v2; // ecx int v3; // edx int v4; // ecx int v5; // eax int v6; // ST0C_4 int v7; // ST08_4 char *v8; // eax char *v9; // esi _DWORD *v10; // eax char v12[4]; // [esp+0h] [ebp-1Ch] int v13; // [esp+4h] [ebp-18h] int v14; // [esp+8h] [ebp-14h] int v15; // [esp+Ch] [ebp-10h] int v16; // [esp+10h] [ebp-Ch] char v17; // [esp+14h] [ebp-8h] if ( !a1 ) return 0; v1 = a1[1]; *(_DWORD *)v12 = *a1; v2 = a1[2]; v13 = v1; v3 = a1[3]; v14 = v2; v4 = a1[4]; v15 = v3; v5 = a1[5]; v6 = a1[6]; v16 = v4; v7 = v5; v17 = 0; v8 = (char *)sub_40A910(120866617); v9 = sub_7549E0(v8, v12, v7, v6); v10 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v10 ) sub_492060(v10, (int)v9); return 1; } //----- (0073C550) -------------------------------------------------------- char __thiscall sub_73C550(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx const CHAR *v3; // edi _DWORD *v4; // eax int v5; // esi int *v6; // eax char v8; // [esp+Ch] [ebp-10h] v1 = this; v2 = (int *)this[1393]; if ( v2 ) sub_740080(v2); sub_6C4DA0((_DWORD *)v1[1393]); sub_6C4DA0((_DWORD *)v1[1394]); sub_6C4DA0((_DWORD *)v1[1395]); sub_6C4DA0((_DWORD *)v1[1396]); v1[1393] = 0; v1[1394] = 0; v1[1395] = 0; v1[1396] = 0; *((_BYTE *)v1 + 5260) = 0; v1[1322] = 0; (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); (*(void (**)(void))(*(_DWORD *)dword_AB6524 + 60))(); sub_6984E0(byte_ADB468); v3 = sub_40A910(-653971140); v4 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); v5 = (int)v4; if ( v4 ) { sub_492060(v4, (int)v3); v6 = (int *)sub_4B1B10((float *)&v8, 0x32u); sub_492030(v5, (int)v3, v5, (int)v3, *v6, v6[1], v6[2], v6[3]); LOBYTE(v4) = sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v5 + 1040)); } return (char)v4; } // AB6524: using guessed type int dword_AB6524; // AB6534: using guessed type int dword_AB6534; //----- (0073C660) -------------------------------------------------------- signed int __thiscall sub_73C660(_DWORD *this, _WORD *a2) { if ( *a2 == 10440 ) sub_73C550(this); return 1; } //----- (0073C680) -------------------------------------------------------- signed int __thiscall sub_73C680(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi _DWORD *v3; // ecx v2 = this; if ( a2 && this[1395] ) { if ( (*(unsigned __int8 (**)(void))(*this[1395] + 260))() ) sub_8F81A0(&unk_BA6B10, v2[1395]); else sub_8F82A0(&unk_BA6B10, v2[1395]); v3 = v2[1395]; if ( v3[92] == 1 ) sub_73C810((_DWORD **)v3); sub_73C9D0(v2[1395], a2); sub_7424C0(v2[1395]); } return 1; } //----- (0073C710) -------------------------------------------------------- signed int __thiscall sub_73C710(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi _DWORD *v3; // ecx v2 = this; if ( a2 && this[1395] ) { if ( (*(unsigned __int8 (**)(void))(*this[1395] + 260))() ) sub_8F81A0(&unk_BA6B10, v2[1395]); else sub_8F82A0(&unk_BA6B10, v2[1395]); v3 = v2[1395]; if ( v3[92] != 1 ) sub_73C7A0((_DWORD **)v3); sub_73C930(v2[1395], a2); sub_7424C0(v2[1395]); } return 1; } //----- (0073C7A0) -------------------------------------------------------- signed int __thiscall sub_73C7A0(_DWORD **this) { _DWORD *v1; // esi int v2; // edi const CHAR *v3; // eax v1 = this; v2 = *this[86]; v3 = sub_40A910(-681690050); (*(void (__thiscall **)(_DWORD, const CHAR *))(v2 + 472))(v1[86], v3); *(_BYTE *)(v1[87] + 380) = 1; *(_BYTE *)(v1[88] + 380) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[88] + 492))(0); v1[92] = 1; return sub_7424C0(v1); } //----- (0073C810) -------------------------------------------------------- signed int __thiscall sub_73C810(_DWORD **this) { _DWORD *v1; // esi int v2; // edi const CHAR *v3; // eax v1 = this; v2 = *this[86]; v3 = sub_40A910(-146790590); (*(void (__thiscall **)(_DWORD, const CHAR *))(v2 + 472))(v1[86], v3); *(_BYTE *)(v1[87] + 380) = 0; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[87] + 492))(0); *(_BYTE *)(v1[88] + 380) = 1; v1[92] = 2; return sub_7424C0(v1); } //----- (0073C880) -------------------------------------------------------- _DWORD *__cdecl sub_73C880(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax int v5; // esi if ( a1 == a2 ) return a3; v3 = a1 + 2; result = a3; do { *result = *(v3 - 2); result[1] = *(v3 - 1); result[2] = *v3; result[3] = v3[1]; result[4] = v3[2]; result[5] = v3[3]; v5 = v3[3]; v3 += 6; result[5] = v5; result += 6; } while ( v3 - 2 != a2 ); return result; } //----- (0073C8E0) -------------------------------------------------------- _DWORD *__cdecl sub_73C8E0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 6 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; result[3] = v3[3]; result[4] = v3[4]; result[5] = v3[5]; } v3 += 6; } return result; } //----- (0073C930) -------------------------------------------------------- void __thiscall sub_73C930(unsigned int *this, _BYTE *a2) { _DWORD *v2; // eax unsigned int *v3; // ebx _DWORD *v4; // ecx signed int v5; // edi int *v6; // esi int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // edx int v12; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] int v17; // [esp+1Ch] [ebp-8h] if ( a2 ) { v2 = (_DWORD *)this[94]; v3 = this + 93; v4 = (_DWORD *)this[93]; if ( v4 != v2 ) v3[1] = (unsigned int)sub_73C880(v2, v2, v4); v5 = 0; if ( *a2 ) { v6 = (int *)(a2 + 9); do { v7 = *(v6 - 2); v8 = *(v6 - 1); v17 = v6[3]; v9 = *v6; v12 = v7; v10 = v6[1]; v14 = v9; v13 = v8; v11 = v6[2]; v15 = v10; v16 = v11; sub_6CB620(v3, &v12); ++v5; v6 += 6; } while ( v5 < (unsigned __int8)*a2 ); } } } //----- (0073C9D0) -------------------------------------------------------- void __thiscall sub_73C9D0(unsigned int *this, _BYTE *a2) { _DWORD *v2; // eax unsigned int *v3; // ebx _DWORD *v4; // ecx signed int v5; // edi int *v6; // esi int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // edx int v12; // [esp+8h] [ebp-1Ch] int v13; // [esp+Ch] [ebp-18h] int v14; // [esp+10h] [ebp-14h] int v15; // [esp+14h] [ebp-10h] int v16; // [esp+18h] [ebp-Ch] int v17; // [esp+1Ch] [ebp-8h] if ( a2 ) { v2 = (_DWORD *)this[98]; v3 = this + 97; v4 = (_DWORD *)this[97]; if ( v4 != v2 ) v3[1] = (unsigned int)sub_73C880(v2, v2, v4); v5 = 0; if ( *a2 ) { v6 = (int *)(a2 + 9); do { v7 = *(v6 - 2); v8 = *(v6 - 1); v17 = v6[3]; v9 = *v6; v12 = v7; v10 = v6[1]; v14 = v9; v13 = v8; v11 = v6[2]; v15 = v10; v16 = v11; sub_6CB620(v3, &v12); ++v5; v6 += 6; } while ( v5 < (unsigned __int8)*a2 ); } } } //----- (0073CA70) -------------------------------------------------------- char __thiscall sub_73CA70(float *this, float a2, float a3, float a4) { char result; // al if ( a4 <= 0.0 ) return 0; result = 1; *this = a2; this[1] = a3; this[4] = 0.0; this[5] = (a3 - a2) / (a4 * a4 * 0.25); this[3] = a4; this[2] = a4; return result; } //----- (0073CAC0) -------------------------------------------------------- BOOL __thiscall sub_73CAC0(float *this, float a2) { double v2; // st7 double v3; // st5 float v5; // [esp+8h] [ebp+8h] v2 = a2; v5 = this[2] - a2; this[2] = v5; if ( this[3] * 0.5 <= v5 ) v3 = this[5] * v2 + this[4]; else v3 = this[4] - this[5] * v2; this[4] = v3; *this = v2 * this[4] + *this; return v5 <= 0.0; } //----- (0073CB30) -------------------------------------------------------- char __thiscall sub_73CB30(float *this, float a2, float a3, float a4) { char result; // al double v5; // st6 double v6; // st7 if ( a2 <= 0.0 ) return 0; result = 1; *this = 0.0; this[1] = 0.0; this[4] = a4; this[5] = a4 / (a3 * a3); v5 = a2; v6 = a3; this[7] = *(float *)&v5; this[6] = *(float *)&v5; this[3] = *(float *)&v6; this[2] = *(float *)&v6; return result; } //----- (0073CB80) -------------------------------------------------------- bool __thiscall sub_73CB80(float *this, float a2) { bool result; // al double v3; // st6 float v4; // [esp+8h] [ebp+8h] float v5; // [esp+8h] [ebp+8h] float v6; // [esp+8h] [ebp+8h] if ( 0.0 == this[6] ) return 1; v3 = a2; v4 = this[2] - a2; this[2] = v4; if ( this[3] > (double)v4 ) this[4] = this[4] - v3 * this[4] * 0.5; v5 = v3 * this[4]; *this = v5; if ( this[6] >= (double)v5 ) { v6 = this[6] - v5; this[6] = v6; result = v6 <= 0.0; } else { result = 0; *this = this[6]; this[6] = 0.0; } return result; } //----- (0073CC50) -------------------------------------------------------- void __thiscall sub_73CC50(int this) { double v1; // st6 double v2; // st7 float v3; // [esp+0h] [ebp-8h] float v4; // [esp+4h] [ebp-4h] *(float *)(this + 100) = 0.0; *(_DWORD *)(this + 84) = 0; v1 = *(float *)(this + 4); *(_BYTE *)(this + 68) = 0; v3 = v1; v4 = *(float *)(this + 8); if ( v4 > 0.0 ) { v2 = v4; *(float *)(this + 24) = 0.0; *(float *)(this + 28) = v3; *(float *)(this + 40) = 0.0; *(float *)(this + 44) = (v3 - 0.0) / (v2 * v2 * 0.25); *(float *)(this + 36) = *(float *)&v2; *(float *)(this + 32) = *(float *)&v2; } } //----- (0073CCC0) -------------------------------------------------------- int __thiscall sub_73CCC0(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = this[251]; if ( result == 2 ) { if ( a2 ) { v4 = this[94]; v2[251] = 3; *((_BYTE *)v2 + 625) = 1; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[95] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 240))(0); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[99] + 240))(1); result = sub_6BA650(&dword_AB6520, 59); } else { this[251] = 1; } } return result; } //----- (0073CDA0) -------------------------------------------------------- int __thiscall sub_73CDA0(int this, _DWORD *a2) { int result; // eax if ( *(_DWORD *)(this + 1004) == 4 ) { *(_DWORD *)(this + 1004) = 5; *(_DWORD *)(this + 632) = *a2; *(_DWORD *)(this + 636) = a2[1]; *(_DWORD *)(this + 640) = a2[2]; *(_DWORD *)(this + 644) = a2[3]; *(_DWORD *)(this + 648) = a2[4]; *(_DWORD *)(this + 652) = a2[5]; *(_DWORD *)(this + 656) = a2[6]; *(_DWORD *)(this + 660) = a2[7]; *(_DWORD *)(this + 664) = a2[8]; *(_BYTE *)(this + 625) = 1; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 396) + 240))(0); result = sub_6BA650(&dword_AB6520, 60); } return result; } //----- (0073CE40) -------------------------------------------------------- int __thiscall sub_73CE40(_DWORD *this) { int v1; // esi signed int v2; // edi int result; // eax this[157] = -1; v1 = (int)(this + 167); v2 = 32; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 256))(0); v1 += 4; --v2; } while ( v2 ); return result; } //----- (0073CE80) -------------------------------------------------------- int __thiscall sub_73CE80(char *this, int *a2, int *a3, int a4, char a5) { int result; // eax int v6; // edx signed int v7; // eax __int64 v8; // rdi bool v9; // zf unsigned int v10; // edi int v11; // ecx char *v12; // ebx int v13; // esi int v14; // ecx int v15; // edi char *v16; // esi int v17; // ecx int v18; // [esp+8h] [ebp-8h] char *v19; // [esp+Ch] [ebp-4h] signed int v20; // [esp+24h] [ebp+14h] result = *a3; v6 = a3[1]; v19 = this; if ( *a3 == *a2 && v6 == a2[1] ) return result; if ( a5 ) { *a2 = result; a2[1] = v6; } v7 = abs(*a3 - *a2); if ( v7 <= 1000000 ) { if ( v7 <= 100000 ) { if ( v7 <= 10000 ) { if ( v7 <= 1000 ) { if ( v7 <= 100 ) { if ( v7 > 10 ) v7 = 10; } else { v7 = 100; } } else { v7 = 1000; } } else { v7 = 10000; } } else { v7 = 100000; } } else { v7 = 1000000; } v8 = *(_QWORD *)a2; if ( *(_QWORD *)a2 >= *(_QWORD *)a3 ) *(_QWORD *)a2 = v8 - v7; else *(_QWORD *)a2 = v8 + v7; if ( a2[1] <= 0 ) { if ( a2[1] < 0 ) { *a2 = 0; a2[1] = 0; } else { v9 = *a2 == 0; } } v10 = *a2; v11 = a2[1]; v20 = 7; if ( !a4 ) v20 = 11; v12 = &v19[4 * v20 + 432]; while ( 1 ) { v13 = __PAIR__(v11, v10) % 10; v18 = (unsigned __int64)(__PAIR__(v11, v10) / 10) >> 32; v10 = __PAIR__(v11, v10) / 10; if ( v13 < 0 ) v13 = 0; result = a4; if ( a4 ) { if ( a4 == 1 ) { v14 = *(_DWORD *)v12; } else { if ( a4 != 2 ) goto LABEL_37; v14 = *((_DWORD *)v12 + 16); } } else { v14 = *((_DWORD *)v12 + 36); } result = (*(int (__stdcall **)(int))(*(_DWORD *)v14 + 492))(v13); LABEL_37: if ( !(v18 | v10) ) break; result = v20 - 1; v12 -= 4; v20 = result; if ( result < 0 ) return result; v11 = v18; } v15 = v20 - 1; if ( v20 - 1 >= 0 ) { v16 = &v19[4 * v15 + 432]; while ( 1 ) { result = a4; if ( !a4 ) break; if ( a4 == 1 ) { v17 = *(_DWORD *)v16; goto LABEL_48; } if ( a4 == 2 ) { v17 = *((_DWORD *)v16 + 16); goto LABEL_48; } LABEL_49: v16 -= 4; if ( --v15 < 0 ) return result; } v17 = *((_DWORD *)v16 + 36); LABEL_48: result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v17 + 492))(0); goto LABEL_49; } return result; } //----- (0073D030) -------------------------------------------------------- bool __thiscall sub_73D030(_DWORD *this) { int v1; // eax v1 = this[251]; return !v1 || v1 == 1; } //----- (0073D050) -------------------------------------------------------- int __thiscall sub_73D050(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[510] = a2; this[511] = a3; return result; } //----- (0073D070) -------------------------------------------------------- void __thiscall sub_73D070(_DWORD **this, _BYTE *a2) { _DWORD **v2; // esi _DWORD *v3; // ebx int v4; // eax int v5; // edi char *v6; // eax _DWORD *v7; // ecx int v8; // [esp+8h] [ebp-4h] v2 = this; v8 = 0; if ( *a2 ) { v3 = a2 + 3; while ( 1 ) { v4 = *((unsigned __int16 *)v3 - 1); if ( v4 == 10 ) break; if ( v4 == 100 ) { v5 = *v2[90]; v6 = sub_7549E0("%d", *v3); v7 = v2[90]; goto LABEL_9; } if ( (_WORD)v4 == 500 ) { v5 = *v2[89]; v6 = sub_7549E0("%d", *v3); v7 = v2[89]; goto LABEL_9; } LABEL_10: v3 = (_DWORD *)((char *)v3 + 6); if ( ++v8 >= (unsigned __int8)*a2 ) return; } v5 = *v2[91]; v6 = sub_7549E0("%d", *v3); v7 = v2[91]; LABEL_9: (*(void (__thiscall **)(_DWORD *, char *))(v5 + 472))(v7, v6); goto LABEL_10; } } //----- (0073D130) -------------------------------------------------------- int __thiscall sub_73D130(int this, int a2) { _DWORD *v2; // eax *(_BYTE *)(this + 809) = 1; *(_WORD *)(this + 810) = *(_WORD *)(a2 + 8); v2 = (_DWORD *)(this + 2072); *v2 = *(_DWORD *)(a2 + 4); v2[1] = 0; return sub_73CE80((char *)this, (int *)(this + 2064), (int *)(this + 2072), 2, 1); } //----- (0073D170) -------------------------------------------------------- void __thiscall sub_73D170(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ecx v4 = this; v5 = (_DWORD *)this[32]; if ( v5 ) v4[33] = sub_464F50(v5); } //----- (0073D220) -------------------------------------------------------- char __thiscall sub_73D220(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[86], v2[87]); return v3; } //----- (0073D270) -------------------------------------------------------- _DWORD *__thiscall sub_73D270(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax signed int v3; // ecx int v4; // edi v1 = this; Concurrency::overwrite_buffer::overwrite_buffer(this); *v1 = &SlotMachineWin::`vftable'; v1[58] = &SlotMachineWin::`vftable'; *((float *)v1 + 252) = 0.0; *((float *)v1 + 253) = 0.0; *((float *)v1 + 254) = 0.0; *((float *)v1 + 255) = 0.0; *((float *)v1 + 256) = 0.0; *((float *)v1 + 257) = 0.0; `eh vector constructor iterator'(v1 + 259, 0x68u, 9, sub_743D00, sub_743D90); v1[530] = 0; v1[495] = 0; v1[496] = 0; v1[497] = 0; v1[498] = 0; v1[493] = 0; v1[494] = 0; v1[100] = 0; v1[108] = 0; v1[116] = 0; v1[124] = 0; v1[101] = 0; v1[109] = 0; v1[117] = 0; v1[125] = 0; v1[102] = 0; v1[110] = 0; v1[118] = 0; v1[126] = 0; v1[103] = 0; v1[111] = 0; v1[119] = 0; v1[127] = 0; v1[104] = 0; v1[112] = 0; v1[120] = 0; v1[128] = 0; v1[105] = 0; v1[113] = 0; v1[121] = 0; v1[129] = 0; v1[106] = 0; v1[114] = 0; v1[122] = 0; v1[130] = 0; v1[107] = 0; v1[115] = 0; v1[123] = 0; v1[131] = 0; v2 = v1 + 144; v3 = 12; do { *(v2 - 12) = 0; *v2 = 0; ++v2; --v3; } while ( v3 ); v1[167] = 0; v1[168] = 0; v1[169] = 0; v1[170] = 0; v1[171] = 0; v1[172] = 0; v1[173] = 0; v1[174] = 0; v1[175] = 0; v1[176] = 0; v1[177] = 0; v1[178] = 0; v1[179] = 0; v1[180] = 0; v1[181] = 0; v1[182] = 0; v1[183] = 0; v1[184] = 0; v1[185] = 0; v1[186] = 0; v1[187] = 0; v1[188] = 0; v1[189] = 0; v1[190] = 0; v1[191] = 0; v1[192] = 0; v1[193] = 0; v1[194] = 0; v1[195] = 0; v1[196] = 0; v1[197] = 0; v1[198] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[522] = 0; v1[523] = 0; v1[524] = 0; v1[525] = 0; v1[526] = 0; v1[527] = 0; v1[528] = 0; v1[529] = 0; v1[499] = 0; v1[500] = 0; v1[501] = 0; v1[502] = 0; v1[503] = 0; v1[504] = 0; v1[505] = 0; v1[506] = 0; v1[507] = 0; v1[92] = 0; v1[93] = 0; *((float *)v1 + 201) = 0.0; *((_BYTE *)v1 + 808) = 1; *((_BYTE *)v1 + 626) = 0; v4 = v1[530]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[530] = 0; } v1[251] = 0; v1[258] = 0; v1[199] = 10; v1[510] = 0; v1[511] = 0; v1[512] = 0; v1[513] = 0; v1[514] = 0; v1[515] = 0; v1[516] = 0; v1[517] = 0; v1[518] = 0; v1[519] = 0; v1[508] = 0; v1[509] = 0; return v1; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A07F64: using guessed type void *SlotMachineWin::`vftable'; // A07F84: using guessed type void *SlotMachineWin::`vftable'; //----- (0073D620) -------------------------------------------------------- char __thiscall sub_73D620(_DWORD *this) { _DWORD *v1; // edi void (__thiscall ***v3)(_DWORD, signed int); // esi int v4; // ebx char v5; // al char v6; // cl char v7; // dl int v8; // esi int v9; // eax int v10; // [esp+4h] [ebp-30h] int v11; // [esp+8h] [ebp-2Ch] char v12; // [esp+Ch] [ebp-28h] char v13; // [esp+Dh] [ebp-27h] char v14; // [esp+Eh] [ebp-26h] char v15; // [esp+Fh] [ebp-25h] int v16; // [esp+10h] [ebp-24h] int v17; // [esp+14h] [ebp-20h] int v18; // [esp+18h] [ebp-1Ch] int v19; // [esp+1Ch] [ebp-18h] int v20; // [esp+20h] [ebp-14h] int v21; // [esp+24h] [ebp-10h] int v22; // [esp+28h] [ebp-Ch] int v23; // [esp+2Ch] [ebp-8h] v1 = this; if ( this[251] != 1 ) return 0; this[251] = 2; v11 = *sub_4A3B80(&v10); if ( v10 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } v4 = v1[157]; if ( v4 == -1 ) return 0; v5 = 0; if ( !v11 ) return 0; v6 = 0; v7 = 0; v8 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v21 = 0; v22 = 0; v23 = 0; if ( v4 >= 0 ) { v9 = v4 + 1; do { ++*(&v16 + v8++); if ( v8 == 8 ) v8 = 0; --v9; } while ( v9 ); v7 = v23; v5 = v22; v6 = v17; } v12 = v18 & 7 | v12 & 0xC0 | 8 * (v6 & 7); v13 ^= (v16 ^ v13) & 7; v13 ^= (v13 ^ 8 * v20) & 0x38; v14 = v21 & 7 | v14 & 0xC0 | 8 * (v5 & 7); v15 ^= ((v15 ^ 8 * v7) & 0x38 ^ v15 ^ v19) & 7 ^ (v15 ^ 8 * v7) & 0x38; sub_73BE50(&v12); return 1; } //----- (0073D7A0) -------------------------------------------------------- char __thiscall sub_73D7A0(_DWORD **this, int a2) { _DWORD **v2; // esi int v3; // eax v2 = this; v3 = sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 ) LOBYTE(v3) = sub_4E3710(v2[90], v2[89]); return v3; } //----- (0073D7D0) -------------------------------------------------------- void __stdcall sub_73D7D0(int a1, int a2) { int v2; // ecx void (__thiscall ***v3)(_DWORD, signed int); // esi if ( !a1 ) { v2 = *sub_4A3B80(&a1); sub_73C070(); if ( a1 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))a1; if ( !InterlockedDecrement((volatile LONG *)(a1 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } } } //----- (0073D860) -------------------------------------------------------- void __stdcall sub_73D860(float a1) { int v1; // edi void (__thiscall ***v2)(_DWORD, signed int); // esi int v3; // [esp+Ch] [ebp-4h] v1 = *sub_4A3B80(&v3); if ( v3 ) { v2 = (void (__thiscall ***)(_DWORD, signed int))v3; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v2 ) (**v2)(v2, 1); } } if ( v1 ) sub_73C030(v1, a1); } //----- (0073D8C0) -------------------------------------------------------- LONG __thiscall sub_73D8C0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // esi LONG v5; // [esp+8h] [ebp-10h] int v6; // [esp+14h] [ebp-4h] v1 = this; v2 = *sub_4A3B80(&v5); v6 = 0; sub_6C4DA0(v1); result = v5; v6 = -1; if ( v5 ) { v4 = (int (__thiscall ***)(_DWORD, signed int))v5; result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } return result; } //----- (0073D940) -------------------------------------------------------- int __thiscall sub_73D940(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx int result; // eax v1 = this; v2 = (_DWORD *)this[87]; if ( v2 ) { sub_4638F0(v2, *(_DWORD *)(v1[86] + 336)); *(_DWORD *)(v1[86] + 344) = *(_DWORD *)(v1[87] + 300); result = sub_465130((_DWORD *)v1[86]); } return result; } //----- (0073D990) -------------------------------------------------------- void __thiscall sub_73D990(int this) { int v1; // esi double v2; // st7 double v3; // st7 double v4; // st5 double v5; // st6 int v6; // eax int v7; // eax int v8; // eax int v9; // edi float v10; // [esp+4h] [ebp-Ch] float v11; // [esp+8h] [ebp-8h] float v12; // [esp+Ch] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 80) ) { v11 = *(float *)(this + 4); v12 = *(float *)(this + 8); v2 = 0.0; if ( v12 > 0.0 ) { v3 = v12; *(float *)(this + 24) = 0.0; v4 = v11; *(float *)(this + 28) = v11; *(float *)(this + 40) = 0.0; *(float *)(this + 44) = (v4 - 0.0) / (v3 * v3 * 0.25); v5 = v3; v2 = 0.0; *(float *)(this + 36) = v5; *(float *)(this + 32) = v5; } v6 = *(_DWORD *)(this + 80); *(float *)(this + 72) = v2; *(float *)(this + 96) = v2; *(_BYTE *)(this + 68) = 0; *(_DWORD *)(this + 84) = 3; *(_BYTE *)(this + 92) = 0; v7 = *(_DWORD *)(v6 + 288); if ( v7 ) v8 = *(_DWORD *)(v7 + 8); else v8 = 0; v9 = **(_DWORD **)(v8 + 12); if ( v9 ) { v10 = v2; v11 = v2; sub_868090(v9, 0, 0, 0, &v10); v10 = 0.0; v11 = *(float *)(v1 + 88); sub_868090(v9, 0, 1, 0, &v10); v10 = 1.0; v11 = *(float *)(v1 + 88); sub_868090(v9, 0, 2, 0, &v10); v10 = 1.0; v11 = 0.0; sub_868090(v9, 0, 3, 0, &v10); } } } //----- (0073DAB0) -------------------------------------------------------- void __thiscall sub_73DAB0(void *this, int a2, int a3, int a4, float a5, float a6) { int v6; // esi volatile LONG *v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // edi volatile LONG *v10; // ebx int v11; // eax _DWORD *v12; // ecx _DWORD **v13; // eax int v14[5]; // [esp+10h] [ebp-20h] int v15; // [esp+2Ch] [ebp-4h] v6 = (int)this; sub_456260(v14); v15 = 0; sub_455FF0(v14, a4); sub_456000(v14, 0, 0); sub_456380(v14, a2); v7 = (volatile LONG *)sub_43D0D0(0x19u); v8 = sub_456820(v14, a3, v7); v9 = *(volatile LONG **)(v6 + 80); v10 = v8; if ( v9 != v8 ) { if ( v9 && !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); *(_DWORD *)(v6 + 80) = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v11 = *(_DWORD *)(*(_DWORD *)(v6 + 80) + 288); if ( *(_DWORD *)(v11 + 24) ) v12 = **(_DWORD ***)(v11 + 16); else v12 = 0; v13 = (_DWORD **)sub_85C050(v12, 8); sub_470EE0(v13, 3); *(float *)(v6 + 4) = a5; *(float *)(v6 + 8) = a6; sub_73D990(v6); v15 = -1; sub_4562E0(v14); } //----- (0073DBC0) -------------------------------------------------------- void __thiscall sub_73DBC0(int this, float a2) { int v2; // esi int v3; // eax int v4; // eax double v5; // st7 double v6; // st7 double v7; // st7 double v8; // st7 int v9; // eax int v10; // eax int v11; // edi float v12; // [esp+14h] [ebp-10h] float v13; // [esp+18h] [ebp-Ch] char v14; // [esp+1Ch] [ebp-8h] float v15; // [esp+20h] [ebp-4h] float v16; // [esp+2Ch] [ebp+8h] float v17; // [esp+2Ch] [ebp+8h] float v18; // [esp+2Ch] [ebp+8h] v2 = this; if ( *(_DWORD *)(this + 84) == 3 ) return; if ( !*(_BYTE *)(this + 68) ) { *(float *)(this + 56) = a2; *(float *)(this + 60) = 0.0; *(float *)(this + 64) = 0.0; *(_BYTE *)(this + 68) = 1; return; } v15 = *(float *)(this + 60); v16 = a2 - *(float *)(this + 56); *(float *)(this + 60) = v16; *(float *)(this + 64) = v16 - v15; v3 = *(_DWORD *)(this + 84); if ( !v3 ) { if ( (unsigned __int8)sub_73CAC0((float *)(this + 24), *(float *)(this + 64)) ) v7 = *(float *)(v2 + 4); else v7 = *(float *)(v2 + 24); v17 = v7; if ( *(float *)(v2 + 100) <= 5.0 ) { v8 = *(float *)(v2 + 64) + *(float *)(v2 + 100); } else { sub_6BA650(&dword_AB6520, 56); v8 = 0.0; } *(float *)(v2 + 100) = v8; v6 = *(float *)(v2 + 64) * v17; LABEL_22: v16 = v6; goto LABEL_23; } v4 = v3 - 1; if ( !v4 ) { if ( sub_73CB80((float *)(this + 24), *(float *)(this + 64)) ) { *(_DWORD *)(v2 + 84) = 2; *(_BYTE *)(v2 + 92) = 1; sub_73CB30((float *)(v2 + 24), *(float *)(v2 + 96), 0.2, 50.0); return; } v16 = *(float *)(v2 + 24); if ( 0.0 == v16 ) return; goto LABEL_23; } if ( v4 == 1 ) { if ( sub_73CB80((float *)(this + 24), *(float *)(this + 64)) ) { *(_DWORD *)(v2 + 84) = 3; return; } v5 = *(float *)(v2 + 24); if ( 0.0 == v5 ) return; v6 = -v5; goto LABEL_22; } LABEL_23: if ( *(_DWORD *)(v2 + 84) != 3 ) { v9 = *(_DWORD *)(*(_DWORD *)(v2 + 80) + 288); if ( v9 ) v10 = *(_DWORD *)(v9 + 8); else v10 = 0; v11 = **(_DWORD **)(v10 + 12); if ( v11 ) { sub_868120(v11, 0, 0, 0, &v14); v18 = v16 * 0.001953125; v12 = 0.0; v13 = v15 - v18; sub_868090(v11, 0, 0, 0, &v12); v12 = 0.0; v13 = v15 - v18 + *(float *)(v2 + 88); sub_868090(v11, 0, 1, 0, &v12); v12 = 1.0; v13 = v15 - v18 + *(float *)(v2 + 88); sub_868090(v11, 0, 2, 0, &v12); v12 = 1.0; v13 = v15 - v18; sub_868090(v11, 0, 3, 0, &v12); } } } //----- (0073DE10) -------------------------------------------------------- int *__thiscall sub_73DE10(int this, int a2) { float *v2; // esi int v3; // eax int v4; // eax int v5; // eax int *result; // eax int v7; // edi double v8; // st7 double v9; // st6 double v10; // st6 float v11; // [esp+8h] [ebp-Ch] float v12; // [esp+Ch] [ebp-8h] float v13; // [esp+10h] [ebp-4h] float v14; // [esp+1Ch] [ebp+8h] float v15; // [esp+1Ch] [ebp+8h] float v16; // [esp+1Ch] [ebp+8h] float v17; // [esp+1Ch] [ebp+8h] v2 = (float *)this; v3 = *(_DWORD *)(this + 80); *(_DWORD *)(this + 84) = 1; *(_BYTE *)(this + 68) = 0; v4 = *(_DWORD *)(v3 + 288); if ( v4 ) v5 = *(_DWORD *)(v4 + 8); else v5 = 0; result = *(int **)(v5 + 12); v7 = *result; if ( *result ) { v13 = (double)(a2 + 13); v14 = v13 / 9.0; v11 = 0.0; v12 = v14; sub_868090(v7, 0, 0, 0, &v11); v11 = 0.0; v12 = v2[22] + v14; sub_868090(v7, 0, 1, 0, &v11); v11 = 1.0; v12 = v2[22] + v14; sub_868090(v7, 0, 2, 0, &v11); v11 = 1.0; v12 = v14; sub_868090(v7, 0, 3, 0, &v11); v12 = (double)(rand() % 57 / 4); v8 = v12; v2[24] = v12; v9 = v14; v15 = v13 * v2[22]; v16 = (v9 - v15) * 512.0; v17 = v8 + v16 + 739.5555610656738; v12 = v2[1]; if ( v17 > 0.0 ) { v2[6] = 0.0; v2[7] = 0.0; v10 = v12; v2[10] = v12; v2[11] = v10 / 9.0; v2[13] = v17; v2[12] = v17; v2[9] = 3.0; v2[8] = 3.0; } result = (int *)sub_6BA680(&dword_AB6520, (int)"GB_SM_ReelEnd"); } return result; } //----- (0073DF80) -------------------------------------------------------- LONG __thiscall sub_73DF80(_DWORD *this) { _DWORD *v1; // esi int **v2; // edi char *v3; // edi _DWORD *v4; // eax signed int v5; // ecx int v6; // edi int v7; // edi int *v9; // [esp+18h] [ebp-18h] char *v10; // [esp+18h] [ebp-18h] signed int v11; // [esp+1Ch] [ebp-14h] void **v12; // [esp+1Ch] [ebp-14h] void (__stdcall ***v13)(signed int); // [esp+20h] [ebp-10h] void (__stdcall ***v14)(signed int); // [esp+20h] [ebp-10h] v1 = this; *this = &SlotMachineWin::`vftable'; this[58] = &SlotMachineWin::`vftable'; v2 = (int **)(this + 495); v11 = 4; do { v9 = *v2; if ( *v2 ) { sub_73B740(*v2); operator delete(v9); } ++v2; --v11; } while ( v11 ); v12 = (void **)(v1 + 493); v10 = (char *)2; do { v3 = (char *)*v12; if ( *v12 ) { v13 = *(void (__stdcall ****)(signed int))v3; if ( *(_DWORD *)v3 ) { if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v3 + 4)) && v13 ) (**v13)(1); *(_DWORD *)v3 = 0; } sub_8D47C0(v3 + 28); nullsub_6(v3 + 4); v14 = *(void (__stdcall ****)(signed int))v3; if ( *(_DWORD *)v3 && !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v3 + 4)) && v14 ) (**v14)(1); operator delete(v3); } ++v12; --v10; } while ( v10 ); v1[100] = 0; v1[108] = 0; v1[116] = 0; v1[124] = 0; v1[101] = 0; v1[109] = 0; v1[117] = 0; v1[125] = 0; v1[102] = 0; v1[110] = 0; v1[118] = 0; v1[126] = 0; v1[103] = 0; v1[111] = 0; v1[119] = 0; v1[127] = 0; v1[104] = 0; v1[112] = 0; v1[120] = 0; v1[128] = 0; v1[105] = 0; v1[113] = 0; v1[121] = 0; v1[129] = 0; v1[106] = 0; v1[114] = 0; v1[122] = 0; v1[130] = 0; v1[107] = 0; v1[115] = 0; v1[123] = 0; v1[131] = 0; v4 = v1 + 144; v5 = 12; do { *(v4 - 12) = 0; *v4 = 0; ++v4; --v5; } while ( v5 ); v1[167] = 0; v1[168] = 0; v1[169] = 0; v1[170] = 0; v1[171] = 0; v1[172] = 0; v1[173] = 0; v1[174] = 0; v1[175] = 0; v1[176] = 0; v1[177] = 0; v1[178] = 0; v1[179] = 0; v1[180] = 0; v1[181] = 0; v1[182] = 0; v1[183] = 0; v1[184] = 0; v1[185] = 0; v1[186] = 0; v1[187] = 0; v1[188] = 0; v1[189] = 0; v1[190] = 0; v1[191] = 0; v1[192] = 0; v1[193] = 0; v1[194] = 0; v1[195] = 0; v1[196] = 0; v1[197] = 0; v1[198] = 0; v1[89] = 0; v1[90] = 0; v1[91] = 0; v1[94] = 0; v1[95] = 0; v1[96] = 0; v1[97] = 0; v1[98] = 0; v1[99] = 0; v1[522] = 0; v1[523] = 0; v1[524] = 0; v1[525] = 0; v1[526] = 0; v1[527] = 0; v1[528] = 0; v1[529] = 0; v1[499] = 0; v1[500] = 0; v1[501] = 0; v1[502] = 0; v1[503] = 0; v1[504] = 0; v1[505] = 0; v1[506] = 0; v1[507] = 0; v6 = v1[530]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[530] = 0; } v7 = v1[530]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); `eh vector destructor iterator'(v1 + 259, 0x68u, 9, sub_743D90); return sub_8F10F0(v1); } // A07F64: using guessed type void *SlotMachineWin::`vftable'; // A07F84: using guessed type void *SlotMachineWin::`vftable'; //----- (0073E360) -------------------------------------------------------- char __thiscall sub_73E360(int this, int a2) { int v2; // ebx int v3; // edi char *v4; // eax volatile LONG **v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi LONG v7; // eax volatile LONG *v9; // eax volatile LONG *v10; // eax volatile LONG *v11; // eax volatile LONG *v12; // eax volatile LONG *v13; // eax volatile LONG *v14; // eax volatile LONG *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // eax volatile LONG *v19; // esi char v20; // STA0_1 __int64 v21; // STA4_8 int v22; // STAC_4 const CHAR *v23; // eax volatile LONG *v24; // eax volatile LONG v25; // esi int v26; // eax volatile LONG *v27; // eax volatile LONG v28; // esi int v29; // eax volatile LONG *v30; // esi const char *v31; // eax volatile LONG *v32; // esi const char *v33; // eax volatile LONG *v34; // esi const char *v35; // eax volatile LONG *v36; // esi const char *v37; // eax volatile LONG *v38; // esi const char *v39; // eax volatile LONG *v40; // esi const char *v41; // eax volatile LONG *v42; // esi const char *v43; // eax volatile LONG *v44; // esi const char *v45; // eax volatile LONG *v46; // esi const char *v47; // eax volatile LONG *v48; // eax const char *v49; // eax volatile LONG *v50; // eax const char *v51; // eax volatile LONG *v52; // eax const char *v53; // eax volatile LONG *v54; // eax const char *v55; // eax volatile LONG *v56; // eax const char *v57; // eax volatile LONG *v58; // eax const char *v59; // eax int v60; // esi volatile LONG **v61; // edi volatile LONG *v62; // eax volatile LONG v63; // esi int v64; // eax signed int v65; // esi volatile LONG *v66; // eax signed int v67; // esi int v68; // edi volatile LONG *v69; // eax volatile LONG *v70; // eax signed int v71; // esi char *v72; // edi signed int v73; // esi int v74; // edi volatile LONG *v75; // eax signed int v76; // esi volatile LONG **v77; // edi volatile LONG *v78; // eax int v79; // esi int v80; // eax char v81; // cl char *v82; // eax volatile LONG **v83; // edi signed int v84; // esi unsigned int v85; // edi volatile LONG **v86; // esi volatile LONG *v87; // eax volatile LONG *v88; // eax unsigned int v89; // edi volatile LONG **v90; // esi volatile LONG *v91; // eax volatile LONG *v92; // eax volatile LONG **v93; // edi signed int v94; // esi unsigned int v95; // edi volatile LONG **v96; // esi volatile LONG *v97; // eax volatile LONG *v98; // eax int v99; // eax char v100; // cl char *v101; // eax void **v102; // edi float *v103; // esi int v104; // edi int v105; // eax int v106; // ecx int v107; // eax char v108; // cl char *v109; // eax void **v110; // edi float *v111; // esi int v112; // edi int v113; // eax int v114; // eax char v115; // cl char *v116; // eax void **v117; // edi float *v118; // esi int v119; // edi int v120; // eax int v121; // eax char v122; // cl char *v123; // eax void **v124; // edi float *v125; // esi int v126; // edi int v127; // eax int v128; // eax char v129; // cl char *v130; // eax void **v131; // edi float *v132; // esi int v133; // edi int v134; // eax int v135; // eax char v136; // cl void **v137; // edi float *v138; // esi int v139; // edi int v140; // eax volatile LONG *v141; // esi volatile LONG v142; // edi int v143; // eax volatile LONG *v144; // edi _DWORD *v145; // esi float *v146; // eax _DWORD *v147; // eax _DWORD *v148; // ecx void (__thiscall ***v149)(_DWORD, signed int); // esi void (__thiscall ***v150)(_DWORD, signed int); // esi const char *v151; // [esp+D0h] [ebp-ECh] const char *v152; // [esp+D4h] [ebp-E8h] const char *v153; // [esp+D8h] [ebp-E4h] const char *v154; // [esp+DCh] [ebp-E0h] const char *v155; // [esp+E0h] [ebp-DCh] const char *v156; // [esp+E4h] [ebp-D8h] const char *v157; // [esp+E8h] [ebp-D4h] const char *v158; // [esp+ECh] [ebp-D0h] const char *v159; // [esp+F0h] [ebp-CCh] const char *v160; // [esp+F4h] [ebp-C8h] const char *v161; // [esp+F8h] [ebp-C4h] const char *v162; // [esp+FCh] [ebp-C0h] int v163; // [esp+100h] [ebp-BCh] int v164; // [esp+104h] [ebp-B8h] void *v165; // [esp+108h] [ebp-B4h] int v166; // [esp+10Ch] [ebp-B0h] int v167; // [esp+110h] [ebp-ACh] int v168[5]; // [esp+114h] [ebp-A8h] volatile LONG **v169; // [esp+128h] [ebp-94h] char v170; // [esp+12Ch] [ebp-90h] int v171; // [esp+1B8h] [ebp-4h] v2 = this; v167 = 0; v3 = dword_BA6BA0; v171 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GB_SlotMachineMain.nif"); sub_8F66B0(v4, (int)&v167, v3); if ( !v167 ) return 0; v5 = sub_8FB140(v167, (int)"Frame", (int)&v163, (int)&v164, 0); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v5, 0, a2, (int)"SlotMachineWin", 0) ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v167; v171 = -1; if ( v167 ) { v7 = InterlockedDecrement((volatile LONG *)(v167 + 4)); goto LABEL_7; } return 0; } sub_456260(v168); LOBYTE(v171) = 1; sub_455FF0(v168, v2); sub_456000(v168, 0, 0); sub_456380(v168, v167); v9 = sub_456820(v168, (int)"Panel01", 0); if ( v9 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v9 + 240))(v9, 0); v10 = sub_456820(v168, (int)"Panel02", 0); if ( v10 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v10 + 240))(v10, 0); v11 = sub_456820(v168, (int)"Panel03", 0); if ( v11 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v11 + 240))(v11, 0); v12 = sub_456820(v168, (int)"Panel04", 0); if ( v12 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v12 + 240))(v12, 0); v13 = sub_456820(v168, (int)"Panel05", 0); if ( v13 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v13 + 240))(v13, 0); v14 = sub_456820(v168, (int)"Panel06", 0); if ( v14 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v14 + 240))(v14, 0); v15 = sub_456820(v168, (int)"Panel07", 0); if ( v15 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v15 + 240))(v15, 0); v16 = sub_456820(v168, (int)"Panel08", 0); if ( v16 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v16 + 240))(v16, 0); v17 = sub_456820(v168, (int)"Panel09", 0); if ( v17 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v17 + 240))(v17, 0); v18 = sub_456820(v168, (int)"Coin", 0); v19 = v18; if ( v18 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); *(_DWORD *)(v2 + 344) = sub_456820(v168, (int)"Cooper", 0); if ( v19 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); *(_DWORD *)(v2 + 348) = sub_456820(v168, (int)"Silver", 0); if ( v19 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); *(_DWORD *)(v2 + 352) = sub_456820(v168, (int)"Gold", 0); if ( v19 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v19 + 240))(v19, 0); v20 = dword_AA8C68; v21 = qword_AA8C6C; v22 = dword_AA8C74; v23 = sub_40A910(-1662072631); v24 = sub_456760(v168, (int)"Title01", (int)v23, v20, v21, SHIDWORD(v21), v22, 5); *(_DWORD *)(v2 + 368) = v24; v25 = *v24; v26 = sub_421050(7); (*(void (__thiscall **)(_DWORD, int))(v25 + 452))(*(_DWORD *)(v2 + 368), v26); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 368) + 488))(5); v27 = sub_456760( v168, (int)"Title02", (int)&unk_A071E6, dword_AA8C68, qword_AA8C6C, SHIDWORD(qword_AA8C6C), dword_AA8C74, 5); *(_DWORD *)(v2 + 372) = v27; v28 = *v27; v29 = sub_421050(7); (*(void (__thiscall **)(_DWORD, int))(v28 + 452))(*(_DWORD *)(v2 + 372), v29); (*(void (__stdcall **)(signed int))(**(_DWORD **)(v2 + 372) + 488))(5); v30 = sub_456820(v168, (int)"Button1", 0); *((_DWORD *)v30 + 68) = dword_AD01E8; v31 = sub_40A910(-1157441998); sub_8F2EA0((void **)v30, v31); v32 = sub_456820(v168, (int)"Button2", 0); *((_DWORD *)v32 + 68) = dword_AD01E8; v33 = sub_40A910(2090761069); sub_8F2EA0((void **)v32, v33); v34 = sub_456820(v168, (int)"Button3", 0); *((_DWORD *)v34 + 68) = dword_AD01E8; v35 = sub_40A910(1840153041); sub_8F2EA0((void **)v34, v35); v36 = sub_456820(v168, (int)"ButtonAll", 0); *((_DWORD *)v36 + 68) = dword_AD01E8; v37 = sub_40A910(811868439); sub_8F2EA0((void **)v36, v37); v38 = sub_456820(v168, (int)"ButtonCenter", 0); *((_DWORD *)v38 + 68) = dword_AD01E8; v39 = sub_40A910(2057931111); sub_8F2EA0((void **)v38, v39); v40 = sub_456820(v168, (int)"ButtonJackpot", 0); *((_DWORD *)v40 + 68) = dword_AD01E8; v41 = sub_40A910(-647419380); sub_8F2EA0((void **)v40, v41); sub_4563D0(v168, 0, (int)"MinNor", (int)"MinClick", (int)"MinOver", 0, 0); v42 = sub_4563D0(v168, 1, (int)"ExitNor", (int)"ExitClick", (int)"ExitOver", 0, 0); *((_DWORD *)v42 + 68) = dword_AD01E8; v43 = sub_40A910(-95796673); sub_8F2EA0((void **)v42, v43); v44 = sub_4563D0(v168, 9, (int)"RankingNor", (int)"RankingClick", (int)"RankingOver", 0, 0); *((_DWORD *)v44 + 68) = dword_AD01E8; v45 = sub_40A910(-640956456); sub_8F2EA0((void **)v44, v45); v46 = sub_4563D0(v168, 8, (int)"HelpNor", (int)"HelpClick", (int)"HelpOver", 0, 0); *((_DWORD *)v46 + 68) = dword_AD01E8; v47 = sub_40A910(875959699); sub_8F2EA0((void **)v46, v47); sub_4563D0(v168, 1, (int)"CloseNor", (int)"CloseClick", (int)"CloseOver", 0, 0); v48 = sub_4563D0(v168, 3, (int)"BetOneNor", (int)"BetOneClick", (int)"BetOneOver", (int)"BetOneDisable", 0); *(_DWORD *)(v2 + 376) = v48; *((_DWORD *)v48 + 68) = dword_AD01E8; v49 = sub_40A910(411251055); sub_8F2EA0(*(void ***)(v2 + 376), v49); *(_BYTE *)(*(_DWORD *)(v2 + 376) + 320) = 0; v50 = sub_4563D0(v168, 5, (int)"BetEightNor", (int)"BetEightClick", (int)"BetEightOver", (int)"BetEightDisable", 0); *(_DWORD *)(v2 + 380) = v50; *((_DWORD *)v50 + 68) = dword_AD01E8; v51 = sub_40A910(633041018); sub_8F2EA0(*(void ***)(v2 + 380), v51); *(_BYTE *)(*(_DWORD *)(v2 + 380) + 320) = 0; v52 = sub_4563D0( v168, 4, (int)"CancelOneBetNor", (int)"CancelOneBetClick", (int)"CancelOneBetOver", (int)"CancelOneBetDisable", 0); *(_DWORD *)(v2 + 384) = v52; *((_DWORD *)v52 + 68) = dword_AD01E8; v53 = sub_40A910(-1261042765); sub_8F2EA0(*(void ***)(v2 + 384), v53); *(_BYTE *)(*(_DWORD *)(v2 + 384) + 320) = 0; v54 = sub_4563D0(v168, 2, (int)"SpinNor", (int)"SpinClick", (int)"SpinOver", (int)"SpinDisable", 0); *(_DWORD *)(v2 + 392) = v54; *((_DWORD *)v54 + 68) = dword_AD01E8; v55 = sub_40A910(-65851366); sub_8F2EA0(*(void ***)(v2 + 392), v55); *(_BYTE *)(*(_DWORD *)(v2 + 392) + 320) = 0; v56 = sub_4563D0(v168, 7, (int)"StopNor", (int)"StopClick", (int)"StopOver", (int)"StopDisable", 0); *(_DWORD *)(v2 + 396) = v56; *((_DWORD *)v56 + 68) = dword_AD01E8; v57 = sub_40A910(-65718754); sub_8F2EA0(*(void ***)(v2 + 396), v57); *(_BYTE *)(*(_DWORD *)(v2 + 396) + 320) = 0; v58 = sub_4563D0(v168, 6, (int)"ResetNor", (int)"ResetClick", (int)"ResetOver", (int)"ResetDisable", 0); *(_DWORD *)(v2 + 388) = v58; *((_DWORD *)v58 + 68) = dword_AD01E8; v59 = sub_40A910(-262592463); sub_8F2EA0(*(void ***)(v2 + 388), v59); *(_BYTE *)(*(_DWORD *)(v2 + 388) + 320) = 0; v60 = 0; v61 = (volatile LONG **)(v2 + 356); do { memset(&v170, 0, 0x80u); v169 = (volatile LONG **)(v60 + 1); sprintf(&v170, "Coin%.2d", v60 + 1); v62 = sub_456760( v168, (int)&v170, (int)&unk_A0720A, dword_AA8C68, qword_AA8C6C, SHIDWORD(qword_AA8C6C), dword_AA8C74, 5); *v61 = v62; v63 = *v62; v64 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v63 + 452))(*v61, v64); v60 = (int)v169; ++v61; } while ( (signed int)v169 < 3 ); v65 = 0; do { memset(&v170, 0, 0x80u); sprintf(&v170, "LineDarkLight%.2d", ++v65); v66 = sub_456820(v168, (int)&v170, 0); if ( v66 ) (*(void (__thiscall **)(volatile LONG *, signed int))(*v66 + 256))(v66, 1); } while ( v65 < 8 ); v67 = 0; v68 = v2 + 2088; do { memset(&v170, 0, 0x80u); sprintf(&v170, "LineHighLight%.2d", ++v67); v69 = sub_456820(v168, (int)&v170, 0); *(_DWORD *)v68 = v69; if ( v69 ) { (*(void (__thiscall **)(volatile LONG *, signed int))(*v69 + 256))(v69, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v68 + 276))(1.0); } v68 += 4; } while ( v67 < 8 ); v70 = sub_456820(v168, (int)"BaseSlot", 0); if ( v70 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v70 + 240))(v70, 0); v71 = 0; v72 = (char *)(v2 + 1036); do { memset(&v170, 0, 0x80u); sprintf(&v170, "Slot%.2d", ++v71); sub_73DAB0(v72, v167, (int)&v170, v2, flt_AB8D5C, flt_AB8D60); v72 += 104; } while ( v71 < 9 ); v73 = 0; v74 = v2 + 1996; do { memset(&v170, 0, 0x80u); sprintf(&v170, "SlotHighLight%.2d", ++v73); v75 = sub_456820(v168, (int)&v170, 0); *(_DWORD *)v74 = v75; if ( v75 ) { (*(void (__thiscall **)(volatile LONG *, signed int))(*v75 + 256))(v75, 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v74 + 276))(*(float *)(v2 + 804)); } v74 += 4; } while ( v73 < 9 ); v76 = 0; v77 = (volatile LONG **)(v2 + 668); do { memset(&v170, 0, 0x80u); sprintf(&v170, "Bet%.2d", ++v76); v78 = sub_456820(v168, (int)&v170, 0); *v77 = v78; if ( v78 ) (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v78 + 256))(v78, 0); ++v77; } while ( v76 < 32 ); *(_DWORD *)(v2 + 628) = -1; v166 = 0; v79 = dword_BA6BA0; LOBYTE(v171) = 2; if ( !byte_ACAD5C ) sub_420410(); v80 = 0; do { v81 = byte_ACAB50[v80]; name[v80++] = v81; } while ( v81 ); v82 = &name[strlen(name)]; *(_DWORD *)v82 = 1701667143; *((_DWORD *)v82 + 1) = 1667843164; *((_DWORD *)v82 + 2) = 1835091813; *((_DWORD *)v82 + 3) = 1767984485; *((_DWORD *)v82 + 4) = 1768828526; *((_WORD *)v82 + 10) = 102; sub_8F66B0(name, (int)&v166, v79); if ( !v166 ) { LOBYTE(v171) = 0; sub_4562E0(v168); v6 = (void (__thiscall ***)(_DWORD, signed int))v167; v171 = -1; if ( v167 ) { v7 = InterlockedDecrement((volatile LONG *)(v167 + 4)); LABEL_7: if ( !v7 ) { if ( v6 ) (**v6)(v6, 1); } } return 0; } v83 = sub_8FB140(v166, (int)"BetMoneyNum00", (int)&v163, (int)&v164, 0); v169 = v83; v84 = 0; do { memset(&v170, 0, 0x80u); sprintf(&v170, "BetMoneyNum%.2d", ++v84); sub_8FB650(v83, v166, (int)&v170); } while ( v84 < 9 ); v155 = "BetCoin08"; v156 = "BetCoin01"; v157 = "BetCoin02"; v158 = "BetCoin03"; v159 = "BetCoin04"; v160 = "BetCoin05"; v161 = "BetCoin06"; v162 = "BetCoin07"; v85 = 0; v86 = (volatile LONG **)(v2 + 400); do { v87 = sub_456820(v168, (int)(&v155)[v85], 0); *v86 = v87; (*(void (__thiscall **)(volatile LONG *, signed int))(*v87 + 256))(v87, 1); v88 = sub_8F3EB0(v163, v164, (int)v169, v2, 0, 0); v86[8] = v88; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v88 + 240))(v88, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**v86 + 116))(v86[8], 0); ++v85; ++v86; } while ( v85 < 8 ); v155 = "ShareCoin08"; v156 = "ShareCoin01"; v157 = "ShareCoin02"; v158 = "ShareCoin03"; v159 = "ShareCoin04"; v160 = "ShareCoin05"; v161 = "ShareCoin06"; v162 = "ShareCoin07"; v89 = 0; v90 = (volatile LONG **)(v2 + 464); do { v91 = sub_456820(v168, (int)(&v155)[v89], 0); *v90 = v91; (*(void (__thiscall **)(volatile LONG *, signed int))(*v91 + 256))(v91, 1); v92 = sub_8F3EB0(v163, v164, (int)v169, v2, 0, 0); v90[8] = v92; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v92 + 240))(v92, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**v90 + 116))(v90[8], 0); ++v89; ++v90; } while ( v89 < 8 ); v93 = sub_8FB140(v166, (int)"Num00", (int)&v163, (int)&v164, 0); v169 = v93; v94 = 0; do { memset(&v170, 0, 0x80u); sprintf(&v170, "Num%.2d", ++v94); sub_8FB650(v93, v166, (int)&v170); } while ( v94 < 9 ); v151 = "MyMoney01"; v152 = "MyMoney02"; v153 = "MyMoney03"; v154 = "MyMoney04"; v155 = "MyMoney05"; v156 = "MyMoney06"; v157 = "MyMoney07"; v158 = "MyMoney08"; v159 = "MyMoney09"; v160 = "MyMoney10"; v161 = "MyMoney11"; v162 = "MyMoney12"; v95 = 0; v96 = (volatile LONG **)(v2 + 576); do { v97 = sub_456820(v168, (int)(&v151)[v95], 0); *(v96 - 12) = v97; (*(void (__thiscall **)(volatile LONG *, signed int))(*v97 + 256))(v97, 1); v98 = sub_8F3EB0(v163, v164, (int)v169, v2, 0, 0); *v96 = v98; (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v98 + 240))(v98, 0); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(v96 - 12) + 116))(*v96, 0); (*(void (__stdcall **)(_DWORD))(**v96 + 492))(0); ++v95; ++v96; } while ( v95 < 0xC ); if ( !byte_ACAD5C ) sub_420410(); v99 = 0; do { v100 = byte_ACA838[v99]; name[v99++] = v100; } while ( v100 ); v101 = &name[strlen(name)]; *(_DWORD *)v101 = 1398751815; *((_DWORD *)v101 + 1) = 1333030764; *((_DWORD *)v101 + 2) = 1768711534; *((_DWORD *)v101 + 3) = 1848534382; *((_WORD *)v101 + 8) = 26217; v101[18] = 0; v102 = sub_8D03E0(name, 0); v103 = (float *)operator new(0x60u); v165 = v103; LOBYTE(v171) = 3; if ( v103 ) { v169 = (volatile LONG **)sub_85BD60(v102); *v103 = 0.0; LOBYTE(v171) = 4; sub_8D06C0(v103 + 1); LOBYTE(v171) = 5; sub_8D4790((_DWORD *)v103 + 7); v104 = *(_DWORD *)v103; LOBYTE(v171) = 6; if ( (volatile LONG **)v104 != v169 ) { if ( v104 && !InterlockedDecrement((volatile LONG *)(v104 + 4)) && v104 ) (**(void (__thiscall ***)(int, signed int))v104)(v104, 1); v105 = (int)v169; *(_DWORD *)v103 = v169; if ( v105 ) InterlockedIncrement((volatile LONG *)(v105 + 4)); } *((_WORD *)v103 + 32) = 0; } else { v103 = 0; } *(_DWORD *)(v2 + 1980) = v103; v106 = *(_DWORD *)v103; LOBYTE(v171) = 2; sub_85D860((float *)(v106 + 52), flt_BA45B8, 0.0, 0.5, 0.0); if ( !byte_ACAD5C ) sub_420410(); v107 = 0; do { v108 = byte_ACA838[v107]; name[v107++] = v108; } while ( v108 ); v109 = &name[strlen(name)]; *(_DWORD *)v109 = 1398751815; *((_DWORD *)v109 + 1) = 1098149740; *((_DWORD *)v109 + 2) = 1766616172; *((_DWORD *)v109 + 3) = 1848534382; *((_WORD *)v109 + 8) = 26217; v109[18] = 0; v110 = sub_8D03E0(name, 0); v111 = (float *)operator new(0x60u); v165 = v111; LOBYTE(v171) = 7; if ( v111 ) { v169 = (volatile LONG **)sub_85BD60(v110); *v111 = 0.0; LOBYTE(v171) = 8; sub_8D06C0(v111 + 1); LOBYTE(v171) = 9; sub_8D4790((_DWORD *)v111 + 7); v112 = *(_DWORD *)v111; LOBYTE(v171) = 10; if ( (volatile LONG **)v112 != v169 ) { if ( v112 && !InterlockedDecrement((volatile LONG *)(v112 + 4)) && v112 ) (**(void (__thiscall ***)(int, signed int))v112)(v112, 1); v113 = (int)v169; *(_DWORD *)v111 = v169; if ( v113 ) InterlockedIncrement((volatile LONG *)(v113 + 4)); } *((_WORD *)v111 + 32) = 0; } else { v111 = 0; } *(_DWORD *)(v2 + 1984) = v111; LOBYTE(v171) = 2; if ( !byte_ACAD5C ) sub_420410(); v114 = 0; do { v115 = byte_ACA838[v114]; name[v114++] = v115; } while ( v115 ); v116 = &name[strlen(name)]; *(_DWORD *)v116 = 1398751815; *((_DWORD *)v116 + 1) = 1131704172; *((_DWORD *)v116 + 2) = 1702129253; *((_DWORD *)v116 + 3) = 1768828530; *((_WORD *)v116 + 8) = 102; v117 = sub_8D03E0(name, 0); v118 = (float *)operator new(0x60u); v165 = v118; LOBYTE(v171) = 11; if ( v118 ) { v169 = (volatile LONG **)sub_85BD60(v117); *v118 = 0.0; LOBYTE(v171) = 12; sub_8D06C0(v118 + 1); LOBYTE(v171) = 13; sub_8D4790((_DWORD *)v118 + 7); v119 = *(_DWORD *)v118; LOBYTE(v171) = 14; if ( (volatile LONG **)v119 != v169 ) { if ( v119 && !InterlockedDecrement((volatile LONG *)(v119 + 4)) && v119 ) (**(void (__thiscall ***)(int, signed int))v119)(v119, 1); v120 = (int)v169; *(_DWORD *)v118 = v169; if ( v120 ) InterlockedIncrement((volatile LONG *)(v120 + 4)); } *((_WORD *)v118 + 32) = 0; } else { v118 = 0; } *(_DWORD *)(v2 + 1988) = v118; LOBYTE(v171) = 2; if ( !byte_ACAD5C ) sub_420410(); v121 = 0; do { v122 = byte_ACA838[v121]; name[v121++] = v122; } while ( v122 ); v123 = &name[strlen(name)]; *(_DWORD *)v123 = 1398751815; *((_DWORD *)v123 + 1) = 1249144684; *((_DWORD *)v123 + 2) = 1349215073; *((_DWORD *)v123 + 3) = 1848538223; *((_WORD *)v123 + 8) = 26217; v123[18] = 0; v124 = sub_8D03E0(name, 0); v125 = (float *)operator new(0x60u); v165 = v125; LOBYTE(v171) = 15; if ( v125 ) { v169 = (volatile LONG **)sub_85BD60(v124); *v125 = 0.0; LOBYTE(v171) = 16; sub_8D06C0(v125 + 1); LOBYTE(v171) = 17; sub_8D4790((_DWORD *)v125 + 7); v126 = *(_DWORD *)v125; LOBYTE(v171) = 18; if ( (volatile LONG **)v126 != v169 ) { if ( v126 && !InterlockedDecrement((volatile LONG *)(v126 + 4)) && v126 ) (**(void (__thiscall ***)(int, signed int))v126)(v126, 1); v127 = (int)v169; *(_DWORD *)v125 = v169; if ( v127 ) InterlockedIncrement((volatile LONG *)(v127 + 4)); } *((_WORD *)v125 + 32) = 0; } else { v125 = 0; } *(_DWORD *)(v2 + 1992) = v125; LOBYTE(v171) = 2; if ( !byte_ACAD5C ) sub_420410(); v128 = 0; do { v129 = byte_ACA838[v128]; name[v128++] = v129; } while ( v129 ); v130 = &name[strlen(name)]; *(_DWORD *)v130 = 1398751815; *((_DWORD *)v130 + 1) = 1282699116; *((_DWORD *)v130 + 2) = 1919252069; *((_DWORD *)v130 + 3) = 1701602377; *((_DWORD *)v130 + 4) = 1718185518; v130[20] = 0; v131 = sub_8D03E0(name, 0); v132 = (float *)operator new(0x60u); v165 = v132; LOBYTE(v171) = 19; if ( v132 ) { v169 = (volatile LONG **)sub_85BD60(v131); *v132 = 0.0; LOBYTE(v171) = 20; sub_8D06C0(v132 + 1); LOBYTE(v171) = 21; sub_8D4790((_DWORD *)v132 + 7); v133 = *(_DWORD *)v132; LOBYTE(v171) = 22; if ( (volatile LONG **)v133 != v169 ) { if ( v133 && !InterlockedDecrement((volatile LONG *)(v133 + 4)) && v133 ) (**(void (__thiscall ***)(int, signed int))v133)(v133, 1); v134 = (int)v169; *(_DWORD *)v132 = v169; if ( v134 ) InterlockedIncrement((volatile LONG *)(v134 + 4)); } *((_WORD *)v132 + 32) = 0; } else { v132 = 0; } *(_DWORD *)(v2 + 1972) = v132; LOBYTE(v171) = 2; if ( !byte_ACAD5C ) sub_420410(); v135 = 0; do { v136 = byte_ACA838[v135]; name[v135++] = v136; } while ( v136 ); strcat(name, "GB_SlotLeverAction.nif"); v137 = sub_8D03E0(name, 0); v138 = (float *)operator new(0x60u); v165 = v138; LOBYTE(v171) = 23; if ( v138 ) { v169 = (volatile LONG **)sub_85BD60(v137); *v138 = 0.0; LOBYTE(v171) = 24; sub_8D06C0(v138 + 1); LOBYTE(v171) = 25; sub_8D4790((_DWORD *)v138 + 7); v139 = *(_DWORD *)v138; v140 = (int)v169; LOBYTE(v171) = 26; if ( (volatile LONG **)v139 != v169 ) { if ( v139 ) { if ( !InterlockedDecrement((volatile LONG *)(v139 + 4)) && v139 ) (**(void (__thiscall ***)(int, signed int))v139)(v139, 1); v140 = (int)v169; } *(_DWORD *)v138 = v140; if ( v140 ) InterlockedIncrement((volatile LONG *)(v140 + 4)); } *((_WORD *)v138 + 32) = 0; } else { v138 = 0; } *(_DWORD *)(v2 + 1976) = v138; LOBYTE(v171) = 2; v141 = sub_456760( v168, (int)"Panel01", (int)&unk_A07281, dword_AA8C68, qword_AA8C6C, SHIDWORD(qword_AA8C6C), dword_AA8C74, 5); v142 = *v141; v143 = sub_421050(7); (*(void (__thiscall **)(volatile LONG *, int))(v142 + 452))(v141, v143); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v141 + 240))(v141, 0); v144 = *(volatile LONG **)(v2 + 2120); if ( v144 != v141 ) { if ( v144 && !InterlockedDecrement(v144 + 1) && v144 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v144)(v144, 1); *(_DWORD *)(v2 + 2120) = v141; InterlockedIncrement(v141 + 1); } v145 = *(_DWORD **)(v2 + 2120); v146 = sub_874B00((float *)&v159, 0.0, 0.0, 0.0, 0.0); sub_72AB70( *(float **)(v2 + 1972), v145, *(_DWORD *)v146, *((_DWORD *)v146 + 1), *((_DWORD *)v146 + 2), *((_DWORD *)v146 + 3), COERCE_INT(856.0), COERCE_INT(225.0), COERCE_INT(0.0)); v147 = (_DWORD *)(v2 + 2040); v148 = (_DWORD *)(v2 + 2032); *v148 = 0; v148[1] = 0; *v147 = 0; v147[1] = 0; sub_73CE80((char *)v2, (int *)(v2 + 2032), (int *)(v2 + 2040), 0, 1); (*(void (__thiscall **)(int, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.5, 0.5); LOBYTE(v171) = 1; if ( v166 ) { v149 = (void (__thiscall ***)(_DWORD, signed int))v166; if ( !InterlockedDecrement((volatile LONG *)(v166 + 4)) ) { if ( v149 ) (**v149)(v149, 1); } } LOBYTE(v171) = 0; sub_4562E0(v168); v150 = (void (__thiscall ***)(_DWORD, signed int))v167; v171 = -1; if ( v167 && !InterlockedDecrement((volatile LONG *)(v167 + 4)) && v150 ) (**v150)(v150, 1); return 1; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type __int64 qword_AA8C6C; // AA8C74: using guessed type int dword_AA8C74; // AB8D5C: using guessed type float flt_AB8D5C; // AB8D60: using guessed type float flt_AB8D60; // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; // BA45B8: using guessed type float flt_BA45B8; //----- (0073FB80) -------------------------------------------------------- void __thiscall sub_73FB80(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // ebx int v7; // edi signed int v8; // ebx int v9; // ebx unsigned int v10; // edi int v11; // ecx signed int v12; // edi __int64 v13; // rcx __int64 v14; // ST00_8 unsigned __int64 v15; // rax unsigned __int64 v16; // rcx int v17; // ebx int v18; // edx bool v19; // cf int v20; // eax unsigned int v21; // ecx unsigned int v22; // edi signed __int64 v23; // rax int v24; // ebx int v25; // ebx int v26; // ecx __int64 v27; // rax int v28; // eax const CHAR *v29; // eax int v30; // edi signed __int64 v31; // rcx signed __int64 v32; // rax __int64 v33; // rax const CHAR *v34; // eax int v35; // eax int v36; // ebx void (__stdcall *v37)(signed int); // eax int v38; // [esp-Ch] [ebp-28h] unsigned int v39; // [esp+4h] [ebp-18h] int v40; // [esp+4h] [ebp-18h] unsigned int v41; // [esp+Ch] [ebp-10h] int v42; // [esp+10h] [ebp-Ch] __int64 v43; // [esp+14h] [ebp-8h] int v44; // [esp+24h] [ebp+8h] int v45; // [esp+24h] [ebp+8h] v2 = this; v3 = this[251]; if ( !v3 || v3 == 1 ) { v4 = sub_4A3B80(&v42); v5 = (void (__thiscall ***)(_DWORD, signed int))v42; v6 = *v4; HIDWORD(v43) = *v4; if ( v42 && !InterlockedDecrement((volatile LONG *)(v42 + 4)) && v5 ) (**v5)(v5, 1); if ( v6 ) { switch ( a2 ) { case 0: v21 = v2[511]; v22 = v2[510]; v23 = (signed int)v2[199]; if ( (signed __int64)__PAIR__(v21, v22) < v23 ) goto LABEL_48; v24 = v2[157]; if ( v24 == 31 ) goto LABEL_42; v25 = v24 + 1; v19 = __CFADD__((_DWORD)v23, v2[514]); v2[514] += v23; v2[157] = v25; v2[515] += HIDWORD(v23) + v19; *((_QWORD *)v2 + 255) = __PAIR__(v21, v22) - v23; (*(void (__thiscall **)(_DWORD, signed int))(*(_DWORD *)v2[v25 + 167] + 256))(v2[v25 + 167], 1); v38 = 50; goto LABEL_47; case 1: v26 = v2[157]; if ( v26 == -1 ) return; v27 = (signed int)v2[199]; v19 = v2[514] < (unsigned int)v27; v2[514] -= v27; v2[515] -= v19 + HIDWORD(v27); *((_QWORD *)v2 + 255) += v27; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[v26 + 167] + 256))(0); --v2[157]; sub_6BA650(&dword_AB6520, 51); goto LABEL_48; case 2: v28 = v2[157]; if ( v28 == 31 ) { v29 = sub_40A910(1821814246); sub_73C420((int)v29, 1, 1); return; } v30 = 8; if ( v28 + 8 >= 32 ) v30 = 31 - v28; v31 = *((_QWORD *)v2 + 255); if ( v31 < v30 * v2[199] ) { v32 = v31 / (signed int)v2[199]; LODWORD(v31) = v2[510]; v30 = v32; } v40 = v30 * v2[199]; v33 = v40; if ( v31 < v40 ) goto LABEL_48; if ( v2[157] == 32 ) { LABEL_42: v34 = sub_40A910(1821814246); sub_73C420((int)v34, 1, 1); return; } LODWORD(v33) = v30 * v2[199]; *((_QWORD *)v2 + 257) += v33; v35 = v2[157]; v2[511] = (unsigned __int64)(v31 - v40) >> 32; v36 = v2[157] + 1; v2[510] = v31 - v40; if ( v36 <= v30 + v35 ) { v45 = (int)&v2[v36 + 167]; do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v45 + 256))(1); v45 += 4; ++v36; } while ( v36 <= v30 + v2[157] ); } v2[157] += v30; v38 = 52; LABEL_47: *((_BYTE *)v2 + 624) = 1; sub_6BA650(&dword_AB6520, v38); goto LABEL_48; case 3: v18 = v2[514]; v19 = __CFADD__(v18, v2[510]); v2[510] += v18; v20 = v2[515]; v2[514] = 0; v2[511] += v20 + v19; v2[515] = 0; sub_73CE40(v2); sub_6BA650(&dword_AB6520, 58); goto LABEL_48; case 4: v7 = (int)(v2 + 167); v8 = 32; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v7 + 256))(0); v7 += 4; --v8; } while ( v8 ); v9 = v2[157]; v10 = v2[157] >> 31; v11 = v2[157]; if ( (signed int)v2[157] >= 32i64 ) { v10 = (31 - v9) >> 31; v11 = 31 - v9; } v12 = (__PAIR__(v10, v11) + 1) >> 32; v39 = v2[510]; HIDWORD(v13) = v2[511]; v14 = (signed int)v2[199]; v41 = v11 + 1; v43 = (signed int)v2[199]; if ( (signed __int64)__PAIR__(HIDWORD(v13), v39) < v14 * __PAIR__(v12, v11 + 1) ) { v12 = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(v13), v39) / v43) >> 32; v41 = (signed __int64)__PAIR__(HIDWORD(v13), v39) / v43; } v15 = v43 * __PAIR__(v12, v41); if ( SHIDWORD(v13) < (signed int)(v43 * __PAIR__((unsigned int)v12, v41) >> 32) || (LODWORD(v13) = v39, SHIDWORD(v13) <= SHIDWORD(v15)) && v39 < (unsigned int)v15 ) { v2[157] = 0; LABEL_48: v37 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[94] + 240); if ( v2[157] == -1 ) { v37(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[99] + 240))(0); v2[251] = 0; *(_WORD *)((char *)v2 + 625) = 1; *((_BYTE *)v2 + 624) = 0; } else { v37(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[97] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[98] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[96] + 240))(1); *((_BYTE *)v2 + 625) = 1; v2[251] = 1; } return; } if ( v12 <= 0 && (v12 < 0 || v41 <= 0x20) ) { v16 = v13 - v15; v2[511] = HIDWORD(v16); v17 = 0; *((_QWORD *)v2 + 257) = v15; v2[510] = v16; if ( v12 >= 0 && (v12 > 0 || v41 > 0) ) { v44 = (int)(v2 + 167); do { (*(void (__stdcall **)(signed int))(**(_DWORD **)v44 + 256))(1); v44 += 4; ++v17; } while ( v17 < __PAIR__(v12, v41) ); } v2[157] = v41 - 1; goto LABEL_48; } break; default: goto LABEL_48; } } } } //----- (00740080) -------------------------------------------------------- int __thiscall sub_740080(int *this) { int *v1; // esi int *v2; // eax int *v3; // ecx int v4; // edi int v5; // edi int v6; // edi int v7; // eax int v8; // ecx int *v9; // edi int v10; // ebx int v11; // ST0C_4 char *v12; // eax char *v13; // eax int v14; // edi signed int v15; // ebx int v16; // esi signed int v17; // edi int result; // eax signed int v19; // [esp+Ch] [ebp-4h] signed int v20; // [esp+Ch] [ebp-4h] signed int v21; // [esp+Ch] [ebp-4h] v1 = this; v2 = this + 510; v3 = this + 508; *v3 = 0; v3[1] = 0; v1[157] = -1; *((_BYTE *)v1 + 626) = 0; *((_BYTE *)v1 + 624) = 0; *v2 = 0; v2[1] = 0; v1[512] = 0; v1[513] = 0; v1[514] = 0; v1[515] = 0; v1[516] = 0; v1[517] = 0; v1[518] = 0; v1[519] = 0; sub_73CE80((char *)v1, v3, v2, 0, 1); *((float *)v1 + 200) = 1.0; v1[251] = 0; v4 = (int)(v1 + 124); v19 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v4 - 64) + 492))(0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v4 + 492))(0); v4 += 4; --v19; } while ( v19 ); v5 = (int)(v1 + 144); v20 = 12; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 492))(0); v5 += 4; --v20; } while ( v20 ); v6 = (int)(v1 + 86); v21 = 3; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 256))(0); v6 += 4; --v21; } while ( v21 ); v7 = v1[199]; switch ( v7 ) { case 10: v8 = v1[86]; LABEL_13: (*(void (__stdcall **)(signed int))(*(_DWORD *)v8 + 256))(1); break; case 100: v8 = v1[87]; goto LABEL_13; case 500: v8 = v1[88]; goto LABEL_13; } v9 = (int *)v1[93]; v10 = *v9; v11 = v1[199]; v12 = (char *)sub_40A910(-1883400062); v13 = sub_7549E0(v12, v11); (*(void (__thiscall **)(int *, char *))(v10 + 472))(v9, v13); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[94] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v1[95] + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[96] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[97] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[98] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[99] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[96] + 240))(0); *((float *)v1 + 203) = 0.99000001; *((float *)v1 + 204) = 1.0; *((float *)v1 + 207) = 0.0; *((float *)v1 + 208) = 3.9999962; *((float *)v1 + 206) = 0.1; *((float *)v1 + 205) = 0.1; *((float *)v1 + 211) = 0.99000001; *((float *)v1 + 212) = 1.0; *((float *)v1 + 215) = 0.0; *((float *)v1 + 216) = 3.9999962; *((float *)v1 + 214) = 0.1; *((float *)v1 + 213) = 0.1; *((float *)v1 + 219) = 0.99000001; *((float *)v1 + 220) = 1.0; *((float *)v1 + 223) = 0.0; *((float *)v1 + 224) = 3.9999962; *((float *)v1 + 222) = 0.1; *((float *)v1 + 221) = 0.1; v14 = (int)(v1 + 259); v15 = 9; *((float *)v1 + 227) = 0.99000001; *((float *)v1 + 228) = 1.0; *((float *)v1 + 231) = 0.0; *((float *)v1 + 232) = 3.9999962; *((float *)v1 + 230) = 0.1; *((float *)v1 + 229) = 0.1; *((float *)v1 + 235) = 0.99000001; *((float *)v1 + 236) = 1.0; *((float *)v1 + 239) = 0.0; *((float *)v1 + 240) = 3.9999962; *((float *)v1 + 238) = 0.1; *((float *)v1 + 237) = 0.1; *((float *)v1 + 243) = 0.99000001; *((float *)v1 + 244) = 1.0; *((float *)v1 + 247) = 0.0; *((float *)v1 + 248) = 3.9999962; *((float *)v1 + 246) = 0.1; *((float *)v1 + 245) = 0.1; do { sub_73D990(v14); v14 += 104; --v15; } while ( v15 ); v1[157] = -1; v16 = (int)(v1 + 167); v17 = 32; do { result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v16 + 256))(0); v16 += 4; --v17; } while ( v17 ); return result; } //----- (007403C0) -------------------------------------------------------- void __thiscall sub_7403C0(int this, float a2) { int v2; // esi int v3; // edi signed int v4; // ebx int v5; // edi int v6; // ebx int v7; // eax unsigned __int8 v8; // cf int v9; // ecx signed int v10; // edi double v11; // st7 double v12; // st6 double v13; // st6 bool v14; // zf int v15; // edi signed int v16; // ebx int v17; // edi signed int v18; // ebx int v19; // ebx char v20; // al _DWORD *v21; // edi float v22; // ST2C_4 float v23; // ST28_4 float v24; // ST24_4 float v25; // ST20_4 float *v26; // eax _DWORD *v27; // edi float v28; // ST2C_4 float v29; // ST28_4 float v30; // ST24_4 float v31; // ST20_4 float *v32; // eax _DWORD *v33; // edi float v34; // ST2C_4 float v35; // ST28_4 float v36; // ST24_4 float v37; // ST20_4 float *v38; // eax _DWORD *v39; // edi float v40; // ST2C_4 float v41; // ST28_4 float v42; // ST24_4 float v43; // ST20_4 float *v44; // eax char v45; // al double v46; // st6 double v47; // st7 char v48; // [esp+3Ch] [ebp-50h] float v49; // [esp+4Ch] [ebp-40h] int v50; // [esp+50h] [ebp-3Ch] int v51; // [esp+54h] [ebp-38h] int v52; // [esp+58h] [ebp-34h] float v53; // [esp+5Ch] [ebp-30h] char v54; // [esp+63h] [ebp-29h] int v55; // [esp+64h] [ebp-28h] int v56; // [esp+68h] [ebp-24h] int v57; // [esp+6Ch] [ebp-20h] int v58; // [esp+70h] [ebp-1Ch] int v59; // [esp+74h] [ebp-18h] int v60; // [esp+78h] [ebp-14h] int v61; // [esp+7Ch] [ebp-10h] int v62; // [esp+80h] [ebp-Ch] int v63; // [esp+84h] [ebp-8h] v2 = this; if ( *(float *)(this + 1024) <= 6.5 ) { if ( *(float *)(this + 1024) <= 5.0 || *(_BYTE *)(this + 626) ) { v10 = 0; } else { v7 = *(_DWORD *)(this + 2072); v8 = __CFADD__(v7, *(_DWORD *)(this + 2040)); *(_DWORD *)(this + 2040) += v7; v9 = *(_DWORD *)(this + 2076); *(_BYTE *)(v2 + 626) = 1; *(_DWORD *)(v2 + 2044) += v9 + v8; v10 = 0; *(_DWORD *)(v2 + 2072) = 0; *(_DWORD *)(v2 + 2076) = 0; } v11 = 0.0; if ( *(_BYTE *)(v2 + 808) ) { v53 = *(float *)(v2 + 1028) + *(float *)(v2 + 1028) + *(float *)(v2 + 804); v12 = v53; *(float *)(v2 + 804) = v53; if ( v12 > 1.0 ) *(_BYTE *)(v2 + 808) = 0; } else { v53 = *(float *)(v2 + 804) - (*(float *)(v2 + 1028) + *(float *)(v2 + 1028)); v13 = v53; *(float *)(v2 + 804) = v53; if ( v13 < 0.0 ) *(_BYTE *)(v2 + 808) = 1; } if ( !*(_BYTE *)(v2 + 809) ) goto LABEL_74; if ( *(float *)(v2 + 1024) > 1.5 ) { v14 = (*(_BYTE *)(v2 + 811) & 1) == 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; v58 = 0; v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; if ( v14 ) { if ( *(_BYTE *)(v2 + 810) & 1 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2088) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v57 = 1; v56 = 1; v55 = 1; } if ( *(_BYTE *)(v2 + 810) & 2 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2116) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v60 = 1; v59 = 1; v58 = 1; } if ( *(_BYTE *)(v2 + 810) & 4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2096) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v63 = 1; v62 = 1; v61 = 1; } if ( *(_BYTE *)(v2 + 810) & 8 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2092) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v61 = 1; v58 = 1; v55 = 1; } if ( *(_BYTE *)(v2 + 810) & 0x10 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2112) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v62 = 1; v59 = 1; v56 = 1; } if ( *(_BYTE *)(v2 + 810) & 0x20 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2100) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v63 = 1; v60 = 1; v57 = 1; } if ( *(_BYTE *)(v2 + 810) & 0x40 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2108) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v63 = 1; v59 = 1; v55 = 1; } if ( *(_BYTE *)(v2 + 810) < 0 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 2104) + 276))(*(float *)(v2 + 804)); v11 = 0.0; v61 = 1; v59 = 1; v57 = 1; } if ( *(_BYTE *)(v2 + 811) & 2 ) v59 = 1; v19 = v2 + 1996; LODWORD(v53) = v2 + 1116; do { if ( *(&v55 + v10) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v19 + 276))(*(float *)(v2 + 804)); v11 = 0.0; if ( v10 != 4 ) v54 = 1; } else if ( *(_DWORD *)LODWORD(v53) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)LODWORD(v53) + 276))(*(float *)(v2 + 800)); v11 = 0.0; } LODWORD(v53) += 104; ++v10; v19 += 4; } while ( v10 < 9 ); } else { v15 = v2 + 2088; v16 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 276))(*(float *)(v2 + 804)); v15 += 4; --v16; } while ( v16 ); v17 = v2 + 1996; v18 = 9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v17 + 276))(*(float *)(v2 + 804)); v17 += 4; --v18; } while ( v18 ); v11 = 0.0; } if ( *(_BYTE *)(v2 + 625) ) { v20 = *(_BYTE *)(v2 + 811); if ( v20 & 4 ) { v21 = *(_DWORD **)(v2 + 2120); *(float *)&v50 = v11; *(float *)&v51 = v11; *(float *)&v52 = 1.0; v22 = v11; v23 = v11; v24 = v11; v25 = v11; v26 = sub_874B00((float *)&v48, v25, v24, v23, v22); sub_72AB70( *(float **)(v2 + 1992), v21, *(_DWORD *)v26, *((_DWORD *)v26 + 1), *((_DWORD *)v26 + 2), *((_DWORD *)v26 + 3), v50, v51, v52); } else if ( v20 & 1 ) { v27 = *(_DWORD **)(v2 + 2120); *(float *)&v50 = v11; *(float *)&v51 = v11; *(float *)&v52 = 1.0; v28 = v11; v29 = v11; v30 = v11; v31 = v11; v32 = sub_874B00((float *)&v48, v31, v30, v29, v28); sub_72AB70( *(float **)(v2 + 1984), v27, *(_DWORD *)v32, *((_DWORD *)v32 + 1), *((_DWORD *)v32 + 2), *((_DWORD *)v32 + 3), v50, v51, v52); } else if ( v54 ) { v33 = *(_DWORD **)(v2 + 2120); *(float *)&v50 = v11; *(float *)&v51 = v11; *(float *)&v52 = 1.0; v34 = v11; v35 = v11; v36 = v11; v37 = v11; v38 = sub_874B00((float *)&v48, v37, v36, v35, v34); sub_72AB70( *(float **)(v2 + 1980), v33, *(_DWORD *)v38, *((_DWORD *)v38 + 1), *((_DWORD *)v38 + 2), *((_DWORD *)v38 + 3), v50, v51, v52); } else if ( v20 & 2 ) { v39 = *(_DWORD **)(v2 + 2120); *(float *)&v50 = v11; *(float *)&v51 = v11; *(float *)&v52 = 1.0; v40 = v11; v41 = v11; v42 = v11; v43 = v11; v44 = sub_874B00((float *)&v48, v43, v42, v41, v40); sub_72AB70( *(float **)(v2 + 1988), v39, *(_DWORD *)v44, *((_DWORD *)v44 + 1), *((_DWORD *)v44 + 2), *((_DWORD *)v44 + 3), v50, v51, v52); } v45 = *(_BYTE *)(v2 + 811); if ( v45 & 5 || v54 || v45 & 2 ) sub_6BA650(&dword_AB6520, 61); else sub_6BA650(&dword_AB6520, 53); *(float *)(v2 + 800) = 1.0; *(_BYTE *)(v2 + 625) = 0; v11 = 0.0; } else { v53 = *(float *)(v2 + 800) - *(float *)(v2 + 1028); v46 = v53; *(float *)(v2 + 800) = v53; if ( v46 < 0.30000001 ) *(float *)(v2 + 800) = 0.30000001; } } if ( *(_BYTE *)(v2 + 809) ) { v49 = *(float *)(v2 + 1024); v53 = a2 - *(float *)(v2 + 1020); v47 = v53; *(float *)(v2 + 1024) = v53; v11 = v47 - v49; } else { LABEL_74: *(float *)(v2 + 1020) = a2; *(float *)(v2 + 1024) = v11; } *(float *)(v2 + 1028) = v11; } else { *(float *)(this + 800) = 1.0; *(_DWORD *)(this + 1032) = 0; *(_DWORD *)(this + 1004) = 0; *(_WORD *)(this + 625) = 257; *(_BYTE *)(this + 624) = 0; v3 = this + 2088; v4 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 276))(0.0); v3 += 4; --v4; } while ( v4 ); v5 = v2 + 1996; v6 = v2 + 1116; LODWORD(v53) = 9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v5 + 276))(0.0); if ( *(_DWORD *)v6 ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v6 + 276))(1.0); v5 += 4; v6 += 104; --LODWORD(v53); } while ( v53 != 0.0 ); *(_DWORD *)(v2 + 2056) = 0; *(_DWORD *)(v2 + 2060) = 0; sub_73FB80((_DWORD *)v2, 4); } } //----- (00740AB0) -------------------------------------------------------- void __thiscall sub_740AB0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax int v4; // eax _BYTE *v5; // eax int v6; // eax int *v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // ebx int v10; // eax unsigned __int8 v11; // cf void (__stdcall *v12)(signed int); // eax int v13; // eax int v14; // ecx void *v15; // edi v2 = this; sub_8F1140(this, (_BYTE *)a2); v3 = (_DWORD *)sub_8EF6C0(&unk_BA6A18, dword_ACDD68); if ( v3 && sub_4E2150(v3) ) return; v4 = v2[251]; if ( v4 && v4 != 1 ) goto LABEL_31; v5 = (_BYTE *)dword_ACDC84; if ( *(_BYTE *)(dword_ACDC84 + 48) & 2 && !(*(_BYTE *)(dword_ACDC84 + 80) & 2) ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[94] + 244))() ) return; sub_73FB80(v2, 0); sub_73CA70((float *)v2 + 203, 0.30000001, 1.0, 0.30000001); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[94] + 276))(0.30000001); v5 = (_BYTE *)dword_ACDC84; } if ( v5[48] & 0x40 && !(v5[80] & 0x40) ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[96] + 244))() ) return; sub_73FB80(v2, 1); sub_73CA70((float *)v2 + 219, 0.30000001, 1.0, 0.30000001); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 276))(0.30000001); v5 = (_BYTE *)dword_ACDC84; } if ( v5[48] & 8 && !(v5[80] & 8) ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[97] + 244))() ) return; v6 = v2[251]; if ( !v6 || v6 == 1 ) { v7 = sub_4A3B80(&a2); v8 = (void (__thiscall ***)(_DWORD, signed int))a2; v9 = *v7; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v8 ) (**v8)(v8, 1); if ( v9 ) { v10 = v2[514]; v11 = __CFADD__(v10, v2[510]); v2[510] += v10; v2[511] += v2[515] + v11; v2[514] = 0; v2[515] = 0; sub_73CE40(v2); sub_6BA650(&dword_AB6520, 58); v12 = *(void (__stdcall **)(signed int))(*(_DWORD *)v2[94] + 240); if ( v2[157] == -1 ) { v12(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[96] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[98] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[99] + 240))(0); v2[251] = 0; *(_WORD *)((char *)v2 + 625) = 1; *((_BYTE *)v2 + 624) = 0; } else { v12(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[95] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[97] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[98] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[96] + 240))(1); *((_BYTE *)v2 + 625) = 1; v2[251] = 1; } } } sub_73CA70((float *)v2 + 227, 0.30000001, 1.0, 0.30000001); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[97] + 276))(0.30000001); v5 = (_BYTE *)dword_ACDC84; } if ( v5[48] & 0x10 && !(v5[80] & 0x10) ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[95] + 244))() ) return; sub_73FB80(v2, 2); sub_73CA70((float *)v2 + 211, 0.30000001, 1.0, 0.30000001); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[95] + 276))(0.30000001); LABEL_31: v5 = (_BYTE *)dword_ACDC84; } if ( v5[40] & 2 && !(v5[72] & 2) ) { v13 = v2[251]; if ( v13 == 1 ) { if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v2[98] + 244))() ) return; sub_73D620(v2); sub_73CA70((float *)v2 + 235, 0.30000001, 1.0, 0.30000001); v14 = v2[98]; goto LABEL_43; } if ( v13 == 4 && (*(unsigned __int8 (**)(void))(*(_DWORD *)v2[99] + 244))() && *((float *)v2 + 256) > 2.0 ) { v15 = (void *)*sub_4A3B80(&a2); sub_410C00(&a2); if ( v15 ) sub_73BE80(v15); sub_73CA70((float *)v2 + 243, 0.30000001, 1.0, 0.30000001); v14 = v2[99]; LABEL_43: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v14 + 276))(0.30000001); return; } } } // ACDC84: using guessed type int dword_ACDC84; //----- (00740F20) -------------------------------------------------------- char __thiscall sub_740F20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi char *v4; // eax int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char result; // al volatile LONG **v8; // eax volatile LONG *v9; // edi const char *v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi char v12; // [esp+14h] [ebp-18h] char v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+28h] [ebp-4h] v2 = this; v14 = 0; v3 = dword_BA6BA0; v15 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\GB_SlotMachineMin.nif"); sub_8F66B0(v4, (int)&v14, v3); v5 = v14; if ( v14 ) { v2[74] = a2; v8 = sub_8FB140(v5, (int)"GB_SlotMachineMin", (int)&v12, (int)&v13, 0); v9 = sub_8FE0F0(0, 0, (int)v8, (int)v2, 0, 0, 0); *((_DWORD *)v9 + 68) = dword_AD01E8; v10 = sub_40A910(-671533490); sub_8F2EA0((void **)v9, v10); (*(void (__thiscall **)(_DWORD *, int, _DWORD, _DWORD, _DWORD))(*v2 + 236))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.1, 0.30000001); v15 = -1; if ( v14 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } result = 1; } else { if ( off_AC0554 ) { off_AC0554("Game\\MyHomeMinButton.nif load fail", "LoadFail", v14); v5 = v14; } v15 = -1; if ( v5 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; // AD01E8: using guessed type int dword_AD01E8; //----- (007410B0) -------------------------------------------------------- int __thiscall sub_7410B0(_DWORD *this, unsigned int a2, int a3) { int result; // eax result = a2; if ( a2 <= 1 ) return sub_73D8C0(this); if ( a2 == 2 ) result = sub_73D940(this); return result; } //----- (007410E0) -------------------------------------------------------- void __thiscall sub_7410E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // ebx void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // eax int v7; // ebx void (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // ecx unsigned __int8 v10; // cf void (__stdcall *v11)(signed int); // edx int v12; // [esp+Ch] [ebp-4h] v3 = this; v4 = (_DWORD *)*sub_4A3B80(&v12); if ( v12 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v12; if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } if ( v4 ) { switch ( a2 ) { case 0: sub_73C070(); break; case 1: sub_73BE00(v4); break; case 2: sub_73D620(v3); break; case 3: sub_73FB80(v3, 0); break; case 4: sub_73FB80(v3, 1); break; case 5: sub_73FB80(v3, 2); break; case 6: v6 = v3[251]; if ( !v6 || v6 == 1 ) { v7 = *sub_4A3B80(&a2); if ( a2 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v7 ) { v9 = v3[514]; v10 = __CFADD__(v9, v3[510]); v3[510] += v9; v3[511] += v3[515] + v10; v3[514] = 0; v3[515] = 0; sub_73CE40(v3); sub_6BA650(&dword_AB6520, 58); v11 = *(void (__stdcall **)(signed int))(*(_DWORD *)v3[94] + 240); if ( v3[157] == -1 ) { v11(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[95] + 240))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[96] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[97] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[98] + 240))(0); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3[99] + 240))(0); v3[251] = 0; *(_WORD *)((char *)v3 + 625) = 1; *((_BYTE *)v3 + 624) = 0; } else { v11(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[95] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[97] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[98] + 240))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v3[96] + 240))(1); *((_BYTE *)v3 + 625) = 1; v3[251] = 1; } } } break; case 7: if ( v3[251] == 4 && *((float *)v3 + 256) > 2.0 ) sub_73BE80(v4); break; case 8: sub_73C090((_DWORD **)v4); break; case 9: sub_73BFF0(v4); break; default: return; } } } //----- (00741390) -------------------------------------------------------- char __thiscall sub_741390(void *this, float a2) { int v2; // esi int v3; // edi LONG v4; // eax volatile LONG *v5; // ebx int v6; // ebx bool v7; // zf const CHAR *v8; // eax const CHAR *v9; // eax double v10; // st7 double v11; // st7 double v12; // st7 int v13; // ebx signed int v14; // edi int v15; // ebx signed int v16; // edi int v17; // ebx signed int v18; // edi int v19; // ebx signed int v20; // edi const CHAR *v21; // eax double v22; // st7 double v23; // st7 int v24; // ecx int v25; // ecx int v26; // edx _DWORD *v27; // ebx float *v28; // eax int v29; // eax double v30; // st7 _BYTE *v31; // ecx int v32; // eax int v33; // eax int v34; // ebx int v35; // edi double v36; // st7 int v37; // edi float *v38; // ebx double v39; // st7 double v40; // st6 double v41; // st6 double v42; // st7 float v43; // ST1C_4 unsigned int v44; // ebx unsigned int v45; // ecx signed int v46; // edi signed int v47; // eax unsigned int v48; // ebx int v49; // edi signed __int64 v50; // kr00_8 int v51; // edi int v52; // esi char v54; // [esp+20h] [ebp-70h] int v55; // [esp+30h] [ebp-60h] __int64 v56; // [esp+34h] [ebp-5Ch] volatile LONG *v57; // [esp+3Ch] [ebp-54h] float v58; // [esp+40h] [ebp-50h] int v59; // [esp+44h] [ebp-4Ch] int v60; // [esp+48h] [ebp-48h] int v61; // [esp+4Ch] [ebp-44h] int v62; // [esp+50h] [ebp-40h] int v63; // [esp+54h] [ebp-3Ch] int v64; // [esp+58h] [ebp-38h] int v65; // [esp+5Ch] [ebp-34h] int v66; // [esp+60h] [ebp-30h] int v67; // [esp+64h] [ebp-2Ch] int v68; // [esp+68h] [ebp-28h] int v69; // [esp+6Ch] [ebp-24h] int v70; // [esp+70h] [ebp-20h] int v71; // [esp+74h] [ebp-1Ch] int v72; // [esp+78h] [ebp-18h] int v73; // [esp+7Ch] [ebp-14h] int v74; // [esp+80h] [ebp-10h] int v75; // [esp+84h] [ebp-Ch] int v76; // [esp+88h] [ebp-8h] v2 = (int)this; v3 = *sub_4A3B80(&v57); LOBYTE(v4) = (_BYTE)v57; if ( *(float *)&v57 != 0.0 ) { v5 = v57; v4 = InterlockedDecrement(v57 + 1); if ( !v4 ) { if ( v5 ) LOBYTE(v4) = (**(int (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } } if ( v3 ) { v6 = v2 + 1036; LODWORD(v58) = 9; do { sub_73DBC0(v6, a2); v6 += 104; --LODWORD(v58); } while ( v58 != 0.0 ); switch ( *(_DWORD *)(v2 + 1004) ) { case 0: if ( *(_BYTE *)(v3 + 5570) ) sub_73BE00((_DWORD *)v3); if ( *(_BYTE *)(v2 + 626) ) { if ( *(float *)(v2 + 1012) > 300.0 && !*(_BYTE *)(v2 + 624) ) { v9 = sub_40A910(-1948523582); sub_73C420((int)v9, 1, 1); sub_73BE00((_DWORD *)v3); *(_BYTE *)(v2 + 626) = 0; } v57 = *(volatile LONG **)(v2 + 1012); v58 = a2 - *(float *)(v2 + 1008); v10 = v58; *(float *)(v2 + 1012) = v58; *(float *)(v2 + 1016) = v10 - *(float *)&v57; if ( *(_BYTE *)(v2 + 808) ) { v58 = *(float *)(v2 + 1016) + *(float *)(v2 + 1016) + *(float *)(v2 + 804); v11 = v58; *(float *)(v2 + 804) = v58; if ( v11 > 1.0 ) *(_BYTE *)(v2 + 808) = 0; } else { v58 = *(float *)(v2 + 804) - (*(float *)(v2 + 1016) + *(float *)(v2 + 1016)); v12 = v58; *(float *)(v2 + 804) = v58; if ( v12 < 0.0 ) *(_BYTE *)(v2 + 808) = 1; } v13 = v2 + 2088; v14 = 8; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v13 + 276))(*(float *)(v2 + 804)); v13 += 4; --v14; } while ( v14 ); v15 = v2 + 1996; v16 = 9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v15 + 276))(*(float *)(v2 + 804)); v15 += 4; --v16; } while ( v16 ); } else { *(float *)(v2 + 1008) = a2; *(float *)(v2 + 1012) = 0.0; *(float *)(v2 + 1016) = 0.0; v7 = *(_DWORD *)(v2 + 628) == -1; *(_BYTE *)(v2 + 809) = 0; *(_WORD *)(v2 + 625) = 257; if ( v7 && !*(_BYTE *)(v3 + 5570) ) { v8 = sub_40A910(-2103474778); sub_73C420((int)v8, 1, 1); } } goto LABEL_68; case 1: if ( *(_BYTE *)(v2 + 625) ) { v17 = v2 + 2088; *(float *)(v2 + 1020) = a2; v18 = 8; *(float *)(v2 + 1024) = 0.0; *(float *)(v2 + 1028) = 0.0; *(_BYTE *)(v2 + 625) = 0; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v17 + 276))(0.0); v17 += 4; --v18; } while ( v18 ); v19 = v2 + 1996; v20 = 9; do { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v19 + 276))(0.0); v19 += 4; --v20; } while ( v20 ); } else { if ( *(_BYTE *)(v2 + 626) ) { *(float *)(v2 + 1008) = a2; *(float *)(v2 + 1012) = 0.0; *(float *)(v2 + 1016) = 0.0; *(_BYTE *)(v2 + 626) = 0; if ( *(_BYTE *)(v3 + 5570) ) sub_73BE00((_DWORD *)v3); } else { if ( *(float *)(v2 + 1012) > 300.0 && !*(_BYTE *)(v2 + 624) ) { v21 = sub_40A910(-1948523582); sub_73C420((int)v21, 1, 1); sub_73BE00((_DWORD *)v3); *(_BYTE *)(v2 + 626) = 1; } v57 = *(volatile LONG **)(v2 + 1012); v58 = a2 - *(float *)(v2 + 1008); v22 = v58; *(float *)(v2 + 1012) = v58; *(float *)(v2 + 1016) = v22 - *(float *)&v57; } if ( *(float *)(v2 + 1024) > 30.0 && *(_BYTE *)(v2 + 624) ) { sub_73D620((_DWORD *)v2); *(float *)(v2 + 1020) = a2; *(float *)(v2 + 1024) = 0.0; *(float *)(v2 + 1028) = 0.0; } v57 = *(volatile LONG **)(v2 + 1024); v58 = a2 - *(float *)(v2 + 1020); v23 = v58; *(float *)(v2 + 1024) = v58; *(float *)(v2 + 1028) = v23 - *(float *)&v57; } goto LABEL_68; case 3: v24 = v2 + 1036; do { sub_73CC50(v24); v24 = v25 + 104; } while ( v26 != 1 ); *(_DWORD *)(v2 + 1004) = 4; *(float *)(v2 + 1020) = a2; *(float *)(v2 + 1024) = 0.0; *(float *)(v2 + 1028) = 0.0; v27 = *(_DWORD **)(v2 + 2120); *(float *)&v55 = 856.0; *(float *)&v56 = 225.0; *((float *)&v56 + 1) = 1.0; v28 = sub_874B00((float *)&v54, 0.0, 0.0, 0.0, 0.0); sub_72AB70( *(float **)(v2 + 1976), v27, *(_DWORD *)v28, *((_DWORD *)v28 + 1), *((_DWORD *)v28 + 2), *((_DWORD *)v28 + 3), v55, v56, SHIDWORD(v56)); v29 = **(_DWORD **)(v2 + 1972); if ( v29 ) *(_WORD *)(v29 + 28) |= 1u; sub_6BA650(&dword_AB6520, 57); goto LABEL_68; case 4: if ( *(float *)(v2 + 1024) <= 10.0 ) { v57 = *(volatile LONG **)(v2 + 1024); v58 = a2 - *(float *)(v2 + 1020); v30 = v58; *(float *)(v2 + 1024) = v58; *(float *)(v2 + 1028) = v30 - *(float *)&v57; } else if ( *(_BYTE *)(v2 + 625) ) { *(_BYTE *)(v2 + 625) = 0; sub_73BE80((void *)v3); } v31 = *(_BYTE **)(v2 + 1976); if ( v31[64] ) { if ( !sub_72AC00(v31, a2) ) { v32 = **(_DWORD **)(v2 + 1972); if ( v32 ) *(_WORD *)(v32 + 28) &= 0xFFFEu; } } goto LABEL_68; case 5: if ( *(_BYTE *)(v2 + 625) ) { *(float *)(v2 + 1020) = a2; *(float *)(v2 + 1024) = 0.0; *(float *)(v2 + 1028) = 0.0; sub_73DE10(v2 + 1036, *(_DWORD *)(v2 + 656)); ++*(_DWORD *)(v2 + 1032); *(_BYTE *)(v2 + 625) = 0; } else if ( *(float *)(v2 + 1024) <= 1.0 ) { v57 = *(volatile LONG **)(v2 + 1024); v58 = a2 - *(float *)(v2 + 1020); v36 = v58; *(float *)(v2 + 1024) = v58; *(float *)(v2 + 1028) = v36 - *(float *)&v57; } else { *(float *)(v2 + 1020) = a2; *(float *)(v2 + 1024) = 0.0; *(float *)(v2 + 1028) = 0.0; v33 = *(_DWORD *)(v2 + 1032); if ( v33 == 9 ) { *(_DWORD *)(v2 + 1032) = 0; *(_DWORD *)(v2 + 1004) = 7; *(_BYTE *)(v2 + 625) = 1; *(_BYTE *)(v2 + 809) = 0; LOBYTE(v4) = sub_73BEA0((void *)v3); return v4; } v72 = 4; v65 = 0; v68 = 0; v69 = 3; v70 = 6; v71 = 1; v73 = 7; v74 = 2; v75 = 5; v76 = 8; v34 = *(&v68 + v33); v59 = 6; v60 = 7; v61 = 8; v62 = 3; v63 = 4; v64 = 5; v66 = 1; v67 = 2; v35 = *(&v59 + v34); if ( v33 == 8 ) { (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 36))(); (*(void (**)(void))(*(_DWORD *)dword_AB6534 + 60))(); } sub_73DE10(104 * v34 + v2 + 1036, *(_DWORD *)(v2 + 4 * v35 + 632)); ++*(_DWORD *)(v2 + 1032); } LABEL_68: v37 = v2 + 376; v38 = (float *)(v2 + 828); LODWORD(v58) = 6; do { v57 = *(volatile LONG **)(v2 + 1028); v39 = *(float *)&v57; *(float *)&v57 = *(v38 - 2) - *(float *)&v57; v40 = *(float *)&v57; *(float *)&v57 = v40; *(v38 - 2) = v40; if ( *(v38 - 1) * 0.5 <= v40 ) v41 = v38[1] * v39 + *v38; else v41 = *v38 - v38[1] * v39; *v38 = v41; *(v38 - 4) = v39 * *v38 + *(v38 - 4); if ( *(float *)&v57 <= 0.0 ) v42 = 1.0; else v42 = *(v38 - 4); v43 = v42; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)v37 + 276))(LODWORD(v43)); v37 += 4; v38 += 8; --LODWORD(v58); } while ( v58 != 0.0 ); sub_73CE80((char *)v2, (int *)(v2 + 2032), (int *)(v2 + 2040), 0, 0); sub_73CE80((char *)v2, (int *)(v2 + 2048), (int *)(v2 + 2056), 1, 0); v44 = *(_DWORD *)(v2 + 2072); v45 = *(_DWORD *)(v2 + 2064); v4 = *(_DWORD *)(v2 + 2076); v46 = *(_DWORD *)(v2 + 2068); if ( v44 == v45 && v4 == v46 ) return v4; v47 = abs(*(_DWORD *)(v2 + 2072) - *(_DWORD *)(v2 + 2064)); if ( v47 <= 1000000 ) { if ( v47 <= 100000 ) { if ( v47 <= 10000 ) { if ( v47 <= 1000 ) { if ( v47 <= 100 ) { if ( v47 > 10 ) v47 = 10; } else { v47 = 100; } } else { v47 = 1000; } } else { v47 = 10000; } } else { v47 = 100000; } } else { v47 = 1000000; } if ( v46 > *(_DWORD *)(v2 + 2076) || v46 >= *(_DWORD *)(v2 + 2076) && v45 >= v44 ) *(_QWORD *)(v2 + 2064) = __PAIR__(v46, v45) - v47; else *(_QWORD *)(v2 + 2064) = __PAIR__(v46, v45) + v47; if ( *(_DWORD *)(v2 + 2068) <= 0 ) { if ( *(_DWORD *)(v2 + 2068) < 0 ) { *(_DWORD *)(v2 + 2064) = 0; *(_DWORD *)(v2 + 2068) = 0; } else { v7 = *(_DWORD *)(v2 + 2064) == 0; } } v48 = *(_DWORD *)(v2 + 2064); HIDWORD(v56) = *(_DWORD *)(v2 + 2068); LODWORD(v58) = 7; v57 = (volatile LONG *)(v2 + 524); break; case 7: *(_BYTE *)(v2 + 626) = 0; sub_7403C0(v2, a2); goto LABEL_68; default: goto LABEL_68; } while ( 1 ) { v49 = (signed __int64)__PAIR__(HIDWORD(v56), v48) % 10; v50 = (signed __int64)__PAIR__(HIDWORD(v56), v48) / 10; HIDWORD(v56) = (unsigned __int64)((signed __int64)__PAIR__(HIDWORD(v56), v48) / 10) >> 32; v48 = v50; if ( v49 < 0 ) v49 = 0; (*(void (__stdcall **)(int))(**(_DWORD **)v57 + 492))(v49); LOBYTE(v4) = BYTE4(v56) | v50; if ( !(HIDWORD(v56) | (unsigned int)v50) ) break; --v57; v4 = LODWORD(v58) - 1; v58 = *(float *)&v4; if ( v4 < 0 ) return v4; } v51 = LODWORD(v58) - 1; if ( LODWORD(v58) - 1 >= 0 ) { v52 = v2 + 4 * v51 + 496; do { LOBYTE(v4) = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)v52 + 492))(0); v52 -= 4; --v51; } while ( v51 >= 0 ); } } return v4; } // AB6534: using guessed type int dword_AB6534; //----- (00741CC0) -------------------------------------------------------- volatile LONG *__cdecl sub_741CC0(int a1) { _DWORD *v1; // eax volatile LONG *v2; // esi void (__thiscall ***v3)(void *, signed int); // edi volatile LONG *result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x850u); v5 = v1; v6 = 0; if ( v1 ) v2 = sub_73D270(v1); else v2 = 0; if ( v2 ) InterlockedIncrement(v2 + 1); v6 = 1; sub_403790(&unk_BA6B10, (int)v2); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int))(*v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); result = 0; } return result; } //----- (00741DF0) -------------------------------------------------------- int __cdecl sub_741DF0(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x15Cu); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &MiniSlotMachineWin::`vftable'; *(_DWORD *)(v2 + 232) = &MiniSlotMachineWin::`vftable'; *(_BYTE *)(v2 + 344) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A07AE0: using guessed type void *MiniSlotMachineWin::`vftable'; // A07AFC: using guessed type void *MiniSlotMachineWin::`vftable'; //----- (00741F40) -------------------------------------------------------- int __cdecl sub_741F40(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x160u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GBSlotHelpWin::`vftable'; *(_DWORD *)(v2 + 232) = &GBSlotHelpWin::`vftable'; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A07D20: using guessed type void *GBSlotHelpWin::`vftable'; // A07D3C: using guessed type void *GBSlotHelpWin::`vftable'; //----- (007420D0) -------------------------------------------------------- LONG __thiscall sub_7420D0(void **this) { void **v1; // esi v1 = this; *this = &GBSlotRankWin::`vftable'; this[58] = &GBSlotRankWin::`vftable'; if ( this[97] ) operator delete(this[97]); v1[97] = 0; v1[98] = 0; v1[99] = 0; if ( v1[93] ) operator delete(v1[93]); v1[93] = 0; v1[94] = 0; v1[95] = 0; return sub_8F10F0(v1); } // A081D4: using guessed type void *GBSlotRankWin::`vftable'; // A081F4: using guessed type void *GBSlotRankWin::`vftable'; //----- (00742140) -------------------------------------------------------- int __cdecl sub_742140(int a1) { void *v1; // eax int v2; // esi void (__thiscall ***v3)(void *, signed int); // edi int result; // eax void *v5; // [esp+14h] [ebp-10h] int v6; // [esp+20h] [ebp-4h] v1 = operator new(0x194u); v2 = (int)v1; v5 = v1; v6 = 0; if ( v1 ) { Concurrency::overwrite_buffer::overwrite_buffer(v1); *(_DWORD *)v2 = &GBSlotRankWin::`vftable'; *(_DWORD *)(v2 + 232) = &GBSlotRankWin::`vftable'; *(_DWORD *)(v2 + 372) = 0; *(_DWORD *)(v2 + 376) = 0; *(_DWORD *)(v2 + 380) = 0; *(_DWORD *)(v2 + 388) = 0; *(_DWORD *)(v2 + 392) = 0; *(_DWORD *)(v2 + 396) = 0; } else { v2 = 0; } if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v6 = 1; sub_403790(&unk_BA6B10, v2); if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v2 + 540))(v2, a1) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 356))(v2); v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = v2; } else { sub_403A70(&unk_BA6B10, &v5, (_DWORD *)v2); if ( v5 ) { v3 = (void (__thiscall ***)(void *, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)v5 + 1) ) { if ( v3 ) (**v3)(v3, 1); } } v6 = -1; if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); result = 0; } return result; } // 8F0FA0: using guessed type int __thiscall Concurrency::overwrite_buffer::overwrite_buffer(_DWORD); // A081D4: using guessed type void *GBSlotRankWin::`vftable'; // A081F4: using guessed type void *GBSlotRankWin::`vftable'; //----- (007422A0) -------------------------------------------------------- void __thiscall sub_7422A0(_DWORD *this, void *a2, int a3, int a4, int a5) { _DWORD *v5; // edi int v6; // esi char *v7; // ebx unsigned int v8; // eax unsigned int v9; // ecx _DWORD *v10; // ecx void (__thiscall ***v11)(_DWORD, signed int); // ebx int v12; // ebx _DWORD *v13; // ecx unsigned int v14; // eax unsigned int v15; // edx int v16; // [esp+14h] [ebp-B8h] int v17; // [esp+18h] [ebp-B4h] unsigned int v18; // [esp+1Ch] [ebp-B0h] bool v19; // [esp+23h] [ebp-A9h] char v20; // [esp+24h] [ebp-A8h] char v21; // [esp+25h] [ebp-A7h] int v22; // [esp+A4h] [ebp-28h] int v23; // [esp+A8h] [ebp-24h] int v24; // [esp+ACh] [ebp-20h] int v25; // [esp+B0h] [ebp-1Ch] int v26; // [esp+B4h] [ebp-18h] char v27; // [esp+B8h] [ebp-14h] int v28; // [esp+C8h] [ebp-4h] v5 = this; v6 = 0; v28 = 0; v20 = 0; memset(&v21, 0, 0x7Fu); v7 = (char *)a2; v8 = (a3 - (signed int)a2) / 24; if ( v8 ) { v9 = *((_DWORD *)a2 + 5); v18 = 0; if ( v8 > 0 ) { v17 = 1; while ( 1 ) { if ( *(_DWORD *)&v7[v6 + 20] < v9 ) ++v17; v10 = (_DWORD *)*sub_4A3B80(&v16); LOBYTE(v28) = 1; v19 = sub_6C4F30(v10); LOBYTE(v28) = 0; if ( v16 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } if ( v19 ) sprintf(&v20, "%d%s", v17, " "); v12 = ((int (__thiscall *)(_DWORD, char *))loc_466CA0)(v5[90], &v20); v22 = *(_DWORD *)((char *)a2 + v6); v23 = *(_DWORD *)((char *)a2 + v6 + 4); v24 = *(_DWORD *)((char *)a2 + v6 + 8); v13 = (_DWORD *)v5[90]; v25 = *(_DWORD *)((char *)a2 + v6 + 12); v26 = *(_DWORD *)((char *)a2 + v6 + 16); v27 = 0; sub_4661A0(v13, v12, 1, &v22); sub_464DA0((_DWORD *)v5[90], 1u, 4); sprintf(&v20, "%d", *(_DWORD *)((char *)a2 + v6 + 20)); sub_4661A0((_DWORD *)v5[90], v12, 2, &v20); v7 = (char *)a2; v14 = *(_DWORD *)((char *)a2 + v6 + 20); ++v18; v15 = (signed int)((unsigned __int64)(715827883i64 * (a3 - (signed int)a2)) >> 32) >> 2; v6 += 24; if ( v18 >= v15 + (v15 >> 31) ) break; v9 = v14; } } } sub_465130((_DWORD *)v5[90]); if ( a2 ) operator delete(a2); } //----- (007424C0) -------------------------------------------------------- signed int __thiscall sub_7424C0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx bool v3; // zf signed int result; // eax void *v5; // [esp-10h] [ebp-18h] int v6; // [esp-Ch] [ebp-14h] int v7; // [esp-8h] [ebp-10h] int v8; // [esp-4h] [ebp-Ch] void **v9; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[90]; if ( v2 ) { sub_466A50(v2); v3 = v1[92] == 1; v9 = &v5; if ( v3 ) sub_743E70(&v5, v1 + 93); else sub_743E70(&v5, v1 + 97); sub_7422A0(v1, v5, v6, v7, v8); result = sub_4638F0((_DWORD *)v1[89], 0); } return result; } //----- (00742520) -------------------------------------------------------- char __thiscall sub_742520(_DWORD *this, int a2, int a3) { _DWORD **v3; // ebx LONG v4; // eax _DWORD *v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi _DWORD *v7; // edi void (__thiscall ***v8)(_DWORD, signed int); // esi int v9; // ecx int (__thiscall ***v10)(_DWORD, signed int); // esi int v12; // [esp+10h] [ebp-14h] int v13; // [esp+14h] [ebp-10h] int v14; // [esp+20h] [ebp-4h] v3 = (_DWORD **)this; LOBYTE(v4) = a2; switch ( a2 ) { case 0: v5 = (_DWORD *)*sub_4A3B80(&a2); if ( a2 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } if ( v5 && sub_6C4F30(v5) ) LOBYTE(v4) = sub_73BFF0(v5); else LOBYTE(v4) = sub_73C7A0(v3); break; case 1: v7 = (_DWORD *)*sub_4A3B80(&v13); if ( v13 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } if ( v7 && sub_6C4F30(v7) ) LOBYTE(v4) = sub_73C010(v7); else LOBYTE(v4) = sub_73C810(v3); break; case 2: LOBYTE(v4) = sub_743CB0(this); break; case 4: case 5: v9 = *sub_4A3B80(&v12); v14 = 0; sub_6C4DA0(v3); LOBYTE(v4) = v12; v14 = -1; if ( v12 ) { v10 = (int (__thiscall ***)(_DWORD, signed int))v12; v4 = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !v4 ) { if ( v10 ) LOBYTE(v4) = (**v10)(v10, 1); } } break; default: return v4; } return v4; } //----- (007426E0) -------------------------------------------------------- char __thiscall sub_7426E0(volatile LONG **this, int a2) { volatile LONG **v2; // esi int v3; // edi char *v4; // eax volatile LONG *v5; // ecx volatile LONG *v6; // esi char result; // al _DWORD *v8; // eax int v9; // eax int v10; // edi int v11; // eax volatile LONG *v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // esi volatile LONG **v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // esi int v16; // edi int v17; // ebx volatile LONG *v18; // eax volatile LONG **v19; // eax int v20; // eax volatile LONG *v21; // eax volatile LONG v22; // edx const CHAR *v23; // eax char v24; // ST58_1 __int64 v25; // ST5C_8 int v26; // ST64_4 const CHAR *v27; // eax _DWORD *v28; // eax volatile LONG **v29; // eax volatile LONG *v30; // eax volatile LONG **v31; // eax int v32; // eax volatile LONG *v33; // ecx int (*v34)(void); // edx int v35; // eax int v36; // eax int v37; // ecx _DWORD *v38; // eax int v39; // eax volatile LONG *v40; // eax volatile LONG v41; // edx const CHAR *v42; // eax volatile LONG *v43; // eax _DWORD *v44; // edx int v45; // eax volatile LONG *v46; // edx int v47; // eax const CHAR *v48; // eax int v49; // eax const CHAR *v50; // eax int v51; // eax volatile LONG *v52; // eax volatile LONG *v53; // ecx const CHAR *v54; // eax int v55; // eax volatile LONG *v56; // eax volatile LONG v57; // edi const CHAR *v58; // eax int v59; // [esp+7Ch] [ebp-88h] int v60; // [esp+80h] [ebp-84h] int v61; // [esp+84h] [ebp-80h] char v62; // [esp+8Ch] [ebp-78h] int v63; // [esp+90h] [ebp-74h] int v64; // [esp+94h] [ebp-70h] int v65; // [esp+98h] [ebp-6Ch] int v66; // [esp+9Ch] [ebp-68h] int v67[5]; // [esp+A0h] [ebp-64h] int v68; // [esp+B4h] [ebp-50h] volatile LONG *v69; // [esp+B8h] [ebp-4Ch] int v70; // [esp+BCh] [ebp-48h] int v71; // [esp+C0h] [ebp-44h] volatile LONG *v72; // [esp+C4h] [ebp-40h] int v73; // [esp+C8h] [ebp-3Ch] int v74; // [esp+CCh] [ebp-38h] int v75; // [esp+D0h] [ebp-34h] _DWORD *v76; // [esp+D4h] [ebp-30h] const void *v77[7]; // [esp+D8h] [ebp-2Ch] int v78; // [esp+100h] [ebp-4h] v2 = this; v75 = 0; v3 = dword_BA6BA0; v78 = 0; if ( !byte_ACAD5C ) sub_420410(); v4 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameHallOfFame.nif"); sub_8F66B0(v4, (int)&v75, v3); v5 = (volatile LONG *)v75; if ( !v75 ) { if ( off_AC0554 ) { off_AC0554("Game\\DiceGameHallOfFame.nif load fail", "LoadFail", v75); v5 = (volatile LONG *)v75; } v78 = -1; if ( v5 ) { v6 = v5; if ( !InterlockedDecrement(v5 + 1) ) { if ( v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } } return 0; } v2[74] = (volatile LONG *)a2; v8 = (_DWORD *)(*(int (__stdcall **)(const char *))(*v5 + 72))("Frame"); v9 = sub_85C050(v8, 8); v10 = v9; v68 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = **(_DWORD **)(v10 + 40); LOBYTE(v78) = 1; if ( v11 && (v12 = *(volatile LONG **)(v11 + 4), (v69 = v12) != 0) ) { v14 = sub_8FB140(v75, (int)"Frame", (int)&v74, (int)&v73, v12); if ( sub_8F1440(v2, 0, 0, (int)v14, 0, a2, (int)"SlotRank", 0) ) { v16 = v74; v17 = v73; sub_456260(v67); LOBYTE(v78) = 2; sub_455FF0(v67, (int)v2); sub_456000(v67, v16, v17); sub_456380(v67, v75); v18 = (volatile LONG *)sub_43D0D0(0x13u); if ( v18 ) v19 = sub_8FB140(v75, (int)"Theme", (int)&v74, (int)&v73, v18); else v19 = sub_8FB140(v75, (int)"Theme", (int)&v74, (int)&v73, 0); sub_8F3EB0(v74 - v16, v73 - v17, (int)v19, (int)v2, 0, 0); sub_456820(v67, (int)"Panel01", 0); sub_456820(v67, (int)"Panel02", 0); sub_456820(v67, (int)"Panel03", 0); sub_456820(v67, (int)"Plane01", 0); if ( sub_8F71E0(v75, (int)"WinTitle", &v74, &v73, &v71, &v70) ) { v20 = sub_421050(7); v21 = sub_8F4A20(v74 - v16, v73 - v17, v71, v70, v20, (int)v2, 0, 0); v22 = *v21; v76 = v21; (*(void (__thiscall **)(volatile LONG *, signed int))(v22 + 488))(v21, 1); v72 = (volatile LONG *)*v76; v23 = sub_40A910(949315223); (*((void (__thiscall **)(_DWORD *, const CHAR *))v72 + 118))(v76, v23); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); v72 = sub_4563D0(v67, 5, (int)"Btn01Nor", (int)"Btn01Click", (int)"Btn01Over", 0, 0); v24 = dword_AA8C68; v25 = qword_AA8C6C; v26 = dword_AA8C74; v27 = sub_40C190(1331644831); sub_456040((int)v72, (int)v27, v24, v25, SHIDWORD(v25), v26, 5); sub_4563D0(v67, 4, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v59 = 0; v60 = 0; v61 = 0; v62 = 0; v63 = 0; v64 = 0; v65 = 0; v66 = 0; LOBYTE(v78) = 3; v28 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v59, 1); *v28 = 1; v28[1] = v75; v76 = v28; sub_4019E0(v77, "ColumnBarNor"); LOBYTE(v78) = 4; v72 = v76 + 18; sub_40B060(v76 + 18, v77); LOBYTE(v78) = 3; sub_636A10(v77); sub_4019E0(v77, "ColumnBarOver"); LOBYTE(v78) = 5; sub_40B060((int *)v72, v77); LOBYTE(v78) = 3; sub_636A10(v77); v76 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v59, 2); *v76 = 2; sub_4019E0(v77, "Column01"); LOBYTE(v78) = 6; sub_40B060(v76 + 18, v77); LOBYTE(v78) = 3; sub_636A10(v77); v76[1] = v75; v76 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v59, 2); *v76 = 2; sub_4019E0(v77, "Column02"); LOBYTE(v78) = 7; sub_40B060(v76 + 18, v77); LOBYTE(v78) = 3; sub_636A10(v77); v76[1] = v75; v76 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v59, 2); *v76 = 2; sub_4019E0(v77, "Column03"); LOBYTE(v78) = 8; sub_40B060(v76 + 18, v77); LOBYTE(v78) = 3; sub_636A10(v77); v76[1] = v75; v63 = 3; v64 = 0; sub_466680(&v59, 0); v29 = sub_8FB140(v75, (int)"TextBox", (int)&v74, (int)&v73, v69); v30 = sub_466330(v74 - v16, v73 - v17, (int)v29, *(float *)&v2, (int **)&v59, 0, 0); v2[90] = v30; *((_DWORD *)v30 + 88) = 3; sub_464D00(v2[90], 0); sub_465130(v2[90]); v31 = sub_8FB140(v75, (int)"SlideBar_SlideBtnMiddle", (int)&v74, (int)&v73, v69); v32 = sub_464310(v75, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v31, 0, v2); v2[89] = (volatile LONG *)v32; *(_DWORD *)(v32 + 312) = 2; *((_DWORD *)v2[89] + 76) = 1; v33 = v2[89]; v34 = *(int (**)(void))(*v2[89] + 168); v76 = (_DWORD *)*v2[89]; v72 = v33; v35 = v34(); v36 = (*(int (__stdcall **)(int))(*v72 + 164))(v35); ((void (__thiscall *)(volatile LONG *, int))v76[77])(v2[89], v36); sub_4638F0(v2[89], *((_DWORD *)v2[90] + 84)); v76 = sub_8FB140(v75, (int)"JobTabOff01", (int)&v74, (int)&v73, v69); sub_8FB650(v76, v75, (int)"JobTabOn01"); v2[87] = sub_465940(v74 - v16, v73 - v17, (int)v76, (int)v2, 0, 0); v37 = v76[9]; v38 = *(_DWORD **)(*(_DWORD *)v37 + 20); v72 = *(volatile LONG **)(*(_DWORD *)v37 + 24); v76 = v38; v39 = sub_421050(7); v40 = sub_8F4A20(v74 - v16, v73 - v17 + 1, (int)v76, (int)v72, v39, (int)v2, 0, 0); v41 = *v40; v76 = v40; (*(void (__thiscall **)(volatile LONG *, signed int))(v41 + 488))(v40, 5); v72 = (volatile LONG *)*v76; v42 = sub_40A910(-2130979122); (*((void (__thiscall **)(_DWORD *, const CHAR *))v72 + 118))(v76, v42); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); v76 = sub_8FB140(v75, (int)"JobTabOff02", (int)&v74, (int)&v73, v69); sub_8FB650(v76, v75, (int)"JobTabOn02"); v43 = sub_465940(v74 - v16, v73 - v17, (int)v76, (int)v2, 1, 0); v44 = v76; v2[88] = v43; v45 = *(_DWORD *)v44[9]; v46 = *(volatile LONG **)(v45 + 20); v72 = *(volatile LONG **)(v45 + 24); v69 = v46; v47 = sub_421050(7); v76 = sub_8F4A20(v74 - v16, v73 - v17 + 1, (int)v69, (int)v72, v47, (int)v2, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v76 + 488))(v76, 5); v72 = (volatile LONG *)*v76; v48 = sub_40A910(1094200734); (*((void (__thiscall **)(_DWORD *, const CHAR *))v72 + 118))(v76, v48); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); if ( sub_8F71E0(v75, (int)"Text01", &v74, &v73, &v71, &v70) ) { v49 = sub_421050(2); v76 = sub_8F4A20(v74 - v16, v73 - v17, v71, v70, v49, (int)v2, 0, 0); v72 = (volatile LONG *)*v76; v50 = sub_40C190(-1850608659); (*((void (__thiscall **)(_DWORD *, const CHAR *))v72 + 118))(v76, v50); (*(void (__stdcall **)(signed int))(*v76 + 488))(5); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); if ( sub_8F71E0(v75, (int)"Text02", &v74, &v73, &v71, &v70) ) { v51 = sub_421050(2); v52 = sub_8F4A20(v74 - v16, v73 - v17, v71, v70, v51, (int)v2, 0, 0); v53 = (volatile LONG *)*v52; v76 = v52; v72 = v53; v54 = sub_40C190(524452521); (*((void (__thiscall **)(_DWORD *, const CHAR *))v72 + 118))(v76, v54); (*(void (__stdcall **)(signed int))(*v76 + 488))(5); (*(void (__stdcall **)(_DWORD))(*v76 + 240))(0); if ( sub_8F71E0(v75, (int)"Text03", &v74, &v73, &v71, &v70) ) { v55 = sub_421050(2); v56 = sub_8F4A20(v74 - v16, v73 - v17, v71, v70, v55, (int)v2, 0, 0); v2[86] = v56; v57 = *v56; v58 = sub_40A910(-681690050); (*(void (__thiscall **)(volatile LONG *, const CHAR *))(v57 + 472))(v2[86], v58); (*(void (__stdcall **)(signed int))(*v2[86] + 488))(5); (*(void (__stdcall **)(_DWORD))(*v2[86] + 240))(0); (*((void (__thiscall **)(volatile LONG **, int, _DWORD, _DWORD, _DWORD))*v2 + 59))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.40000001, 0.5); *((_BYTE *)v2[87] + 380) = 1; *((_BYTE *)v2[88] + 380) = 0; v2[92] = (volatile LONG *)1; LOBYTE(v78) = 2; sub_40AE10((void **)&v59); LOBYTE(v78) = 1; sub_4562E0(v67); LOBYTE(v78) = 0; sub_410C00(&v68); v78 = -1; sub_410C00(&v75); return 1; } } } LOBYTE(v78) = 2; sub_40AE10((void **)&v59); } LOBYTE(v78) = 1; sub_4562E0(v67); LOBYTE(v78) = 0; sub_410C00(&v68); v78 = -1; sub_410C00(&v75); return 0; } LOBYTE(v78) = 0; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v15 = (void (__thiscall ***)(_DWORD, signed int))v75; v78 = -1; if ( !v75 || InterlockedDecrement((volatile LONG *)(v75 + 4)) || !v15 ) return 0; (**v15)(v15, 1); result = 0; } else { LOBYTE(v78) = 0; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v75; v78 = -1; if ( !v75 || InterlockedDecrement((volatile LONG *)(v75 + 4)) || !v13 ) return 0; (**v13)(v13, 1); result = 0; } return result; } // AA8C68: using guessed type int dword_AA8C68; // AA8C6C: using guessed type __int64 qword_AA8C6C; // AA8C74: using guessed type int dword_AA8C74; // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00743190) -------------------------------------------------------- char __thiscall sub_743190(void *this, unsigned int a2) { int v2; // esi char *v3; // eax volatile LONG *v4; // ecx volatile LONG *v5; // esi char result; // al _DWORD *v7; // eax int v8; // edi int v9; // eax HDC v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // edi volatile LONG **v12; // eax void (__thiscall ***v13)(_DWORD, signed int); // edi int v14; // edi volatile LONG *v15; // eax volatile LONG **v16; // eax int v17; // eax volatile LONG *v18; // edi const CHAR *v19; // eax _DWORD *v20; // eax volatile LONG **v21; // eax volatile LONG *v22; // eax CHAR *v23; // eax CHAR *v24; // eax CHAR *v25; // eax CHAR *v26; // eax CHAR *v27; // eax CHAR *v28; // eax CHAR *v29; // eax CHAR *v30; // eax CHAR *v31; // eax CHAR *v32; // eax CHAR *v33; // eax CHAR *v34; // eax CHAR *v35; // eax CHAR *v36; // eax CHAR *v37; // eax CHAR *v38; // eax CHAR *v39; // eax int v40; // eax volatile LONG v41; // edx const CHAR *v42; // edi int v43; // eax int v44; // eax rsize_t v45; // edi unsigned int v46; // eax int v47; // edi const void *v48; // eax int v49; // ecx volatile LONG **v50; // eax int v51; // eax int v52; // [esp+30h] [ebp-294h] int v53; // [esp+34h] [ebp-290h] int v54; // [esp+38h] [ebp-28Ch] char v55; // [esp+40h] [ebp-284h] int v56; // [esp+44h] [ebp-280h] int v57; // [esp+48h] [ebp-27Ch] int v58; // [esp+4Ch] [ebp-278h] int v59; // [esp+50h] [ebp-274h] int v60[5]; // [esp+54h] [ebp-270h] unsigned int v61; // [esp+68h] [ebp-25Ch] int v62; // [esp+6Ch] [ebp-258h] int v63; // [esp+70h] [ebp-254h] HDC hdc; // [esp+74h] [ebp-250h] int v65; // [esp+78h] [ebp-24Ch] int v66; // [esp+7Ch] [ebp-248h] char v67; // [esp+80h] [ebp-244h] unsigned int v68; // [esp+84h] [ebp-240h] unsigned int v69; // [esp+88h] [ebp-23Ch] int v70; // [esp+8Ch] [ebp-238h] rsize_t MaxCount; // [esp+90h] [ebp-234h] int v72; // [esp+94h] [ebp-230h] void *Src; // [esp+98h] [ebp-22Ch] rsize_t v74; // [esp+A8h] [ebp-21Ch] unsigned int v75; // [esp+ACh] [ebp-218h] _BYTE v76[256]; // [esp+B4h] [ebp-210h] char Dst; // [esp+1B4h] [ebp-110h] char v78; // [esp+1B5h] [ebp-10Fh] int v79; // [esp+2C0h] [ebp-4h] v2 = (int)this; v68 = a2; v72 = 0; v79 = 0; v66 = dword_BA6BA0; if ( !byte_ACAD5C ) sub_420410(); v3 = (char *)sub_401410(byte_ACAB50, "Game\\DiceGameHelp.nif"); sub_8F66B0(v3, (int)&v72, v66); v4 = (volatile LONG *)v72; if ( !v72 ) { if ( off_AC0554 ) { off_AC0554("Game\\DiceGameHelp.nif load fail", "LoadFail", 0); v4 = (volatile LONG *)v72; } v79 = -1; if ( v4 ) { v5 = v4; if ( !InterlockedDecrement(v4 + 1) ) { if ( v5 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } } return 0; } *(_DWORD *)(v2 + 296) = a2; v7 = (_DWORD *)(*(int (__stdcall **)(const char *))(*v4 + 72))("Frame"); v8 = sub_85C050(v7, 8); v66 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); v9 = **(_DWORD **)(v8 + 40); LOBYTE(v79) = 1; if ( !v9 || (v10 = *(HDC *)(v9 + 4), (hdc = v10) == 0) ) { LOBYTE(v79) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11 = (void (__thiscall ***)(_DWORD, signed int))v72; v79 = -1; if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) && v11 ) (**v11)(v11, 1); return 0; } v12 = sub_8FB140(v72, (int)"Frame", (int)&v70, (int)&v69, (volatile LONG *)v10); if ( !sub_8F1440((volatile LONG **)v2, 0, 0, (int)v12, 0, v68, (int)"SlotHelp", 0) ) { LOBYTE(v79) = 0; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v13 = (void (__thiscall ***)(_DWORD, signed int))v72; v79 = -1; if ( v72 && !InterlockedDecrement((volatile LONG *)(v72 + 4)) && v13 ) { (**v13)(v13, 1); return 0; } return 0; } v14 = v70; v68 = v69; v65 = v70; sub_456260(v60); LOBYTE(v79) = 2; sub_455FF0(v60, v2); sub_456000(v60, v14, v68); sub_456380(v60, v72); v15 = (volatile LONG *)sub_43D0D0(0x13u); if ( v15 ) v16 = sub_8FB140(v72, (int)"Theme", (int)&v70, (int)&v69, v15); else v16 = sub_8FB140(v72, (int)"Theme", (int)&v70, (int)&v69, 0); sub_8F3EB0(v70 - v14, v69 - v68, (int)v16, v2, 0, 0); sub_456820(v60, (int)"Panel01", 0); sub_456820(v60, (int)"Panel02", 0); if ( sub_8F71E0(v72, (int)"WinTitle", &v70, &v69, &v63, &v62) ) { v17 = sub_421050(7); v18 = sub_8F4A20(v70 - v14, v69 - v68, v63, v62, v17, v2, 0, 0); (*(void (__thiscall **)(volatile LONG *, signed int))(*v18 + 488))(v18, 5); MaxCount = *v18 + 472; v19 = sub_40A910(875959699); (*(void (__thiscall **)(volatile LONG *, const CHAR *))MaxCount)(v18, v19); (*(void (__thiscall **)(volatile LONG *, _DWORD))(*v18 + 240))(v18, 0); sub_4563D0(v60, 1, (int)"ClsNor", (int)"ClsClick", (int)"ClsOver", 0, 0); v52 = 0; v53 = 0; v54 = 0; v55 = 0; v56 = 0; v57 = 0; v58 = 0; v59 = 0; LOBYTE(v79) = 3; sub_40AE60(&v52); v20 = (_DWORD *)((int (__thiscall *)(int *, signed int))loc_466F40)(&v52, 1); *v20 = 1; v20[1] = v72; MaxCount = (rsize_t)v20; sub_4019E0(&Src, "Column01"); LOBYTE(v79) = 4; sub_40B060((int *)(MaxCount + 72), (const void **)&Src); LOBYTE(v79) = 3; sub_636A10(&Src); MaxCount = ((int (__thiscall *)(int *, signed int))loc_466F40)(&v52, 2); *(_DWORD *)MaxCount = 2; sub_4019E0(&Src, "Column01"); LOBYTE(v79) = 5; sub_40B060((int *)(MaxCount + 72), (const void **)&Src); LOBYTE(v79) = 3; sub_636A10(&Src); *(_DWORD *)(MaxCount + 4) = v72; sub_466680(&v52, 0); v21 = sub_8FB140(v72, (int)"Plane01", (int)&v70, (int)&v69, (volatile LONG *)hdc); v22 = sub_466330(v70 - v65 + 20, v69 - v68 + 50, (int)v21, *(float *)&v2, (int **)&v52, 0, 0); *(_DWORD *)(v2 + 344) = v22; if ( v22 ) { v75 = 15; v74 = 0; LOBYTE(Src) = 0; LOBYTE(v79) = 6; v23 = (CHAR *)sub_40A910(-2133672220); sub_40AC00(&Src, v23); sub_401D10((int)&Src, "\n", 1u); v24 = (CHAR *)sub_40A910(-2133606684); sub_401E30(&Src, v24); sub_401D10((int)&Src, "\n", 1u); v25 = (CHAR *)sub_40A910(-2133541148); sub_401E30(&Src, v25); sub_401D10((int)&Src, "\n", 1u); v26 = (CHAR *)sub_40A910(-2133475612); sub_401E30(&Src, v26); sub_401D10((int)&Src, "\n", 1u); v27 = (CHAR *)sub_40A910(-2133410076); sub_401E30(&Src, v27); sub_401D10((int)&Src, "\n", 1u); v28 = (CHAR *)sub_40A910(-2133344540); sub_401E30(&Src, v28); sub_401D10((int)&Src, "\n", 1u); v29 = (CHAR *)sub_40A910(-2133279004); sub_401E30(&Src, v29); sub_401D10((int)&Src, "\n", 1u); v30 = (CHAR *)sub_40A910(-2133213468); sub_401E30(&Src, v30); sub_401D10((int)&Src, "\n", 1u); v31 = (CHAR *)sub_40A910(-2133147932); sub_401E30(&Src, v31); sub_401D10((int)&Src, "\n", 1u); v32 = (CHAR *)sub_40A910(-2133737500); sub_401E30(&Src, v32); sub_401D10((int)&Src, "\n", 1u); v33 = (CHAR *)sub_40A910(-2133671964); sub_401E30(&Src, v33); sub_401D10((int)&Src, "\n", 1u); v34 = (CHAR *)sub_40A910(-2133606428); sub_401E30(&Src, v34); sub_401D10((int)&Src, "\n", 1u); v35 = (CHAR *)sub_40A910(-2133540892); sub_401E30(&Src, v35); sub_401D10((int)&Src, "\n", 1u); v36 = (CHAR *)sub_40A910(-2133475356); sub_401E30(&Src, v36); sub_401D10((int)&Src, "\n", 1u); v37 = (CHAR *)sub_40A910(-2133409820); sub_401E30(&Src, v37); sub_401D10((int)&Src, "\n", 1u); v38 = (CHAR *)sub_40A910(-2133344284); sub_401E30(&Src, v38); sub_401D10((int)&Src, "\n", 1u); v39 = (CHAR *)sub_40A910(-2133278748); sub_401E30(&Src, v39); sub_401D10((int)&Src, &unk_A07A94, 0); v76[0] = 0; memset(&v76[1], 0, 0xFFu); v40 = sub_40A8C0(*(_DWORD **)(v2 + 344), 0, 0); v41 = *v18; v65 = v40; hdc = *(HDC *)((*(int (__thiscall **)(volatile LONG *))(v41 + 456))(v18) + 192); v67 = 10; while ( 1 ) { memset(v76, 0, 0x100u); v42 = (const CHAR *)Src; if ( v75 < 0x10 ) v42 = (const CHAR *)&Src; v43 = (*(int (**)(void))(*(_DWORD *)v65 + 144))(); v44 = sub_8F5700((int)v76, v42, hdc, v43); v45 = v44; v68 = v44; v46 = sub_417B90((unsigned __int8 *)&Src, (unsigned __int8 *)&v67, 0x100000000ui64); v61 = v46; if ( !v45 ) break; if ( v46 >= v45 || (MaxCount = v46, v46 == -1) ) MaxCount = v45; Dst = 0; memset(&v78, 0, 0xFFu); v47 = MaxCount; if ( v74 < MaxCount ) v47 = v74; v48 = Src; if ( v75 < 0x10 ) v48 = &Src; memcpy_s(&Dst, 0xFFu, v48, v47); v49 = *(_DWORD *)(v2 + 344); *(&Dst + v47) = 0; ((void (__thiscall *)(int, char *))loc_466CA0)(v49, &Dst); ((void (__thiscall *)(_DWORD, void *))loc_466CA0)(*(_DWORD *)(v2 + 344), &unk_A07282); if ( v61 > v68 ) sub_4014F0(&Src, 0, MaxCount); else sub_4014F0(&Src, 0, MaxCount + 1); } *(_BYTE *)(*(_DWORD *)(v2 + 344) + 348) = 0; sub_464D00(*(_DWORD **)(v2 + 344), 4); sub_465130(*(_DWORD **)(v2 + 344)); LOBYTE(v79) = 3; sub_636A10(&Src); } v50 = sub_8FB140(v72, (int)"SlideBar_SlideBtnMiddle", (int)&v70, (int)&v69, 0); v51 = sub_464310(v72, (int)"SlideBar", "SlideBar_UpBtn", "SlideBar_DnBtn", (int)v50, 0, (_DWORD *)v2); *(_DWORD *)(v2 + 348) = v51; *(_DWORD *)(v51 + 312) = 2; *(_DWORD *)(*(_DWORD *)(v2 + 348) + 304) = 1; sub_4638F0(*(_DWORD **)(v2 + 348), *(_DWORD *)(*(_DWORD *)(v2 + 344) + 336)); (*(void (__thiscall **)(int, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 236))( v2, qword_AC2F74, *(&qword_AC2F74 + 1), 0.1, 0.30000001); LOBYTE(v79) = 2; sub_40AE10((void **)&v52); LOBYTE(v79) = 1; sub_4562E0(v60); LOBYTE(v79) = 0; sub_410C00(&v66); v79 = -1; sub_410C00(&v72); result = 1; } else { LOBYTE(v79) = 1; sub_4562E0(v60); LOBYTE(v79) = 0; sub_410C00(&v66); v79 = -1; sub_410C00(&v72); result = 0; } return result; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); // ACAD5C: using guessed type char byte_ACAD5C; //----- (00743CB0) -------------------------------------------------------- int __thiscall sub_743CB0(_DWORD *this) { _DWORD *v1; // esi int result; // eax _DWORD *v3; // ecx v1 = this; result = this[90]; if ( result ) { v3 = (_DWORD *)this[89]; if ( v3 ) { sub_4638F0(v3, *(_DWORD *)(result + 336)); *(_DWORD *)(v1[90] + 344) = *(_DWORD *)(v1[89] + 300); result = sub_465130((_DWORD *)v1[90]); } } return result; } //----- (00743D00) -------------------------------------------------------- void __thiscall sub_743D00(void *this) { _DWORD *v1; // esi int v2; // edi v1 = this; *((float *)this + 14) = 0.0; *((float *)this + 15) = 0.0; *((float *)this + 16) = 0.0; *((_DWORD *)this + 20) = 0; *((float *)this + 22) = 0.11111111; v2 = *((_DWORD *)this + 20); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[20] = 0; } *v1 = 1; } //----- (00743D90) -------------------------------------------------------- void __thiscall sub_743D90(void *this) { int v1; // esi v1 = *((_DWORD *)this + 20); if ( v1 && !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } } //----- (00743DC0) -------------------------------------------------------- void *__thiscall sub_743DC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &MiniSlotMachineWin::`vftable'; *((_DWORD *)this + 58) = &MiniSlotMachineWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A07AE0: using guessed type void *MiniSlotMachineWin::`vftable'; // A07AFC: using guessed type void *MiniSlotMachineWin::`vftable'; //----- (00743E00) -------------------------------------------------------- void *__thiscall sub_743E00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &GBSlotHelpWin::`vftable'; *((_DWORD *)this + 58) = &GBSlotHelpWin::`vftable'; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A07D20: using guessed type void *GBSlotHelpWin::`vftable'; // A07D3C: using guessed type void *GBSlotHelpWin::`vftable'; //----- (00743E40) -------------------------------------------------------- void *__thiscall sub_743E40(void *this, char a2) { void *v2; // esi v2 = this; sub_73DF80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00743E70) -------------------------------------------------------- _DWORD *__thiscall sub_743E70(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // edi _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; v9 = this; *this = 0; this[1] = 0; this[2] = 0; v3 = (a2[1] - *a2) / 24; *this = 0; this[1] = 0; this[2] = 0; if ( v3 ) { if ( v3 > 0xAAAAAAA ) std::_Xlength_error("vector too long"); v4 = sub_6CA520((char *)v3); v2[2] = &v4[6 * v3]; *v2 = v4; v2[1] = v4; v5 = (_DWORD *)a2[1]; v6 = (_DWORD *)*a2; v11 = 0; v2[1] = sub_73BD00(v6, v5, v4); } return v2; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00743F50) -------------------------------------------------------- void *__thiscall sub_743F50(void *this, char a2) { void *v2; // esi v2 = this; sub_7420D0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00743FA0) -------------------------------------------------------- void __thiscall sub_743FA0(_DWORD *this, int a2, char *a3) { if ( *((_BYTE *)this + 2977) ) sub_655EE0(this, a2, a3); } //----- (00743FF0) -------------------------------------------------------- char __thiscall sub_743FF0(_BYTE *this) { return this[2976]; } //----- (00744000) -------------------------------------------------------- char __thiscall sub_744000(_BYTE *this) { return this[2977]; } //----- (00744110) -------------------------------------------------------- LONG __thiscall sub_744110(_DWORD *this) { _DWORD *v1; // edi LONG result; // eax LONG v3; // esi int v4; // eax v1 = this; result = this[9]; if ( result ) { result = (**(int (***)(void))(result + 84))(); v3 = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); if ( v3 ) { v4 = v1[7]; if ( v4 ) { sub_800630((_DWORD *)v3, v4, 0.0); v1[7] = 0; } result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(LONG, signed int))v3)(v3, 1); } } return result; } //----- (007441C0) -------------------------------------------------------- int __thiscall sub_7441C0(_DWORD *this, unsigned int a2) { int v2; // eax int result; // eax if ( a2 < (this[740] - this[739]) >> 2 && (v2 = *(_DWORD *)(this[739] + 4 * a2)) != 0 ) result = *(_DWORD *)(v2 + 36); else result = 0; return result; } //----- (00744200) -------------------------------------------------------- _DWORD *__thiscall sub_744200(_DWORD *this, _DWORD *a2, unsigned int a3) { _DWORD *v3; // ecx _DWORD *result; // eax if ( a3 < (this[740] - this[739]) >> 2 && (v3 = *(_DWORD **)(this[739] + 4 * a3)) != 0 ) { sub_745770(v3, a2); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00744250) -------------------------------------------------------- unsigned int __thiscall sub_744250(_DWORD *this, int a2) { unsigned int result; // eax unsigned int v3; // ebx _DWORD *v4; // esi int v5; // ecx int v6; // eax int v7; // eax int v8; // edi int *v9; // ebx int v10; // eax _DWORD *v11; // [esp+24h] [ebp-1Ch] unsigned int v12; // [esp+28h] [ebp-18h] unsigned int v13; // [esp+2Ch] [ebp-14h] int *v14; // [esp+30h] [ebp-10h] int v15; // [esp+3Ch] [ebp-4h] v11 = this; result = 0; v3 = (this[740] - this[739]) >> 2; v13 = v3; v12 = 0; if ( v3 ) { while ( 1 ) { v4 = *(_DWORD **)(this[739] + 4 * result); if ( v4 ) { v5 = v4[9]; if ( v5 ) { v6 = v4[8]; if ( v6 ) { if ( *(_BYTE *)(v6 + 33) ) { v7 = (**(int (__thiscall ***)(int))(v5 + 84))(v5 + 84); v8 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v15 = 0; if ( v8 ) { v14 = 0; sub_8C4C90(v4 + 3, a2, &v14); v9 = v14; if ( v14 ) { (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)v4[9] + 328))(v14[1], 0, 0); v10 = *v9; if ( *v9 ) { if ( v4[7] != v10 ) (*(void (__stdcall **)(int, signed int))(*(_DWORD *)v4[9] + 332))(v10, 1); } else { sub_800630((_DWORD *)v8, v4[7], 0.0); } v4[7] = *v9; } v15 = -1; if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v3 = v13; } else { v15 = -1; } } } } } result = v12 + 1; v12 = result; if ( result >= v3 ) break; this = v11; } } return result; } //----- (007443B0) -------------------------------------------------------- unsigned int __thiscall sub_7443B0(_DWORD *this, int a2, volatile LONG **a3) { int v3; // esi volatile LONG **v4; // edi unsigned int result; // eax _BYTE *v6; // ebx int v7; // eax bool v8; // zf int v9; // edi int v10; // eax _DWORD *v11; // edi volatile LONG **v12; // eax int v13; // edi volatile LONG *v14; // eax int v15; // edi volatile LONG *v16; // [esp-Ch] [ebp-28h] volatile LONG **v17; // [esp-8h] [ebp-24h] unsigned int v18; // [esp-4h] [ebp-20h] int v19; // [esp+18h] [ebp-4h] v3 = (int)this; v4 = a3; result = (this[740] - this[739]) >> 2; if ( (unsigned int)a3 < result ) { v6 = (_BYTE *)a2; if ( a2 ) { if ( !a3 ) { v7 = sub_65CBB0((_DWORD *)a2); v8 = *(_BYTE *)(v3 + 2977) == 0; *(_DWORD *)(v3 + 2980) = v7; if ( !v8 ) { v9 = *(_DWORD *)v3; v10 = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v6 + 84))(v6); (*(void (__thiscall **)(int, int))(v9 + 88))(v3, v10); v4 = a3; } } v11 = *(_DWORD **)(*(_DWORD *)(v3 + 2956) + 4 * (_DWORD)v4); if ( v11 ) { sub_745850(v11, &a2); v19 = 0; if ( a2 ) *(_WORD *)(a2 + 28) &= 0xFFFEu; v12 = a3; v11[9] = v6; v13 = v11[8]; v18 = (unsigned int)v12; if ( v13 ) LOBYTE(a3) = *(_BYTE *)(v13 + 33) != 0; else LOBYTE(a3) = 0; v14 = *(volatile LONG **)(v3 + 704); v17 = a3; a3 = &v16; v16 = v14; if ( v14 ) InterlockedIncrement(v14 + 1); sub_6602A0(v6, v3, v16, (char)v17, v18); v15 = *(_DWORD *)v3; v18 = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v6 + 84))(v6); (*(void (__thiscall **)(int, unsigned int))(v15 + 88))(v3, v18); v19 = -1; sub_410C00(&a2); } result = (*(int (**)(void))(*(_DWORD *)v3 + 340))(); } } return result; } //----- (007444F0) -------------------------------------------------------- char __thiscall sub_7444F0(_DWORD *this, unsigned int a2) { LONG v2; // eax _DWORD *v3; // esi unsigned int v4; // edi float *v5; // ecx LOBYTE(v2) = a2; if ( a2 < (this[740] - this[739]) >> 2 ) { v3 = *(_DWORD **)(this[739] + 4 * a2); if ( v3 ) { sub_745850(v3, &a2); v4 = a2; if ( a2 ) *(_WORD *)(a2 + 28) |= 1u; LOBYTE(v2) = sub_744110(v3); v5 = (float *)v3[9]; if ( v5 ) LOBYTE(v2) = sub_660580(v5); v3[9] = 0; if ( v4 ) { v2 = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !v2 ) LOBYTE(v2) = (**(int (__thiscall ***)(unsigned int, signed int))v4)(v4, 1); } } } return v2; } //----- (007445B0) -------------------------------------------------------- unsigned int __fastcall sub_7445B0(int a1) { unsigned int v1; // ebx unsigned int result; // eax _DWORD *v3; // esi int v4; // edi float *v5; // ecx int v6; // [esp+10h] [ebp-18h] unsigned int v7; // [esp+14h] [ebp-14h] int v8; // [esp+18h] [ebp-10h] int v9; // [esp+24h] [ebp-4h] v8 = a1; v1 = 0; result = (*(_DWORD *)(a1 + 2960) - *(_DWORD *)(a1 + 2956)) >> 2; v7 = result; if ( result ) { do { if ( v1 < (*(_DWORD *)(a1 + 2960) - *(_DWORD *)(a1 + 2956)) >> 2 ) { v3 = *(_DWORD **)(*(_DWORD *)(a1 + 2956) + 4 * v1); if ( v3 ) { sub_745850(v3, &v6); v4 = v6; v9 = 0; if ( v6 ) *(_WORD *)(v6 + 28) |= 1u; sub_744110(v3); v5 = (float *)v3[9]; if ( v5 ) sub_660580(v5); v3[9] = 0; v9 = -1; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } result = v7; a1 = v8; } } ++v1; } while ( v1 < result ); } return result; } //----- (007446A0) -------------------------------------------------------- _DWORD *__thiscall sub_7446A0(int this, _DWORD *a2) { int v2; // ebx _DWORD *result; // eax unsigned int v4; // esi int v5; // edx unsigned int v6; // edi int v7; // eax int v8; // ecx char v9; // [esp+4h] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 2977) ) { result = a2; *a2 = *(_DWORD *)(this + 56); } else { v4 = (*(_DWORD *)(this + 2960) - *(_DWORD *)(this + 2956)) >> 2; v5 = 0; v6 = 0; if ( v4 ) { do { v7 = *(_DWORD *)(*(_DWORD *)(v2 + 2956) + 4 * v6); if ( v7 ) { v8 = *(_DWORD *)(v7 + 36); if ( v8 ) { v5 = *(_DWORD *)(*(int (__stdcall **)(char *))(*(_DWORD *)v8 + 24))(&v9); if ( v5 ) break; } } ++v6; } while ( v6 < v4 ); } result = a2; *a2 = v5; } return result; } //----- (00744720) -------------------------------------------------------- char __thiscall sub_744720(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // esi v1 = 0; v2 = (this[740] - this[739]) >> 2; if ( !v2 ) return 0; v3 = this[739]; while ( !*(_DWORD *)v3 || *(_DWORD *)(*(_DWORD *)v3 + 36) ) { ++v1; v3 += 4; if ( v1 >= v2 ) return 0; } return 1; } //----- (00744760) -------------------------------------------------------- bool __thiscall sub_744760(_DWORD *this, unsigned int a2, char a3) { int v3; // eax bool result; // al int v5; // eax if ( a2 >= (this[740] - this[739]) >> 2 ) goto LABEL_11; v3 = *(_DWORD *)(this[739] + 4 * a2); if ( !v3 ) goto LABEL_11; if ( !a3 && !a2 ) return 1; v5 = *(_DWORD *)(v3 + 32); if ( v5 ) result = *(_BYTE *)(v5 + 33) != 0; else LABEL_11: result = 0; return result; } //----- (007447B0) -------------------------------------------------------- char __thiscall sub_7447B0(_DWORD *this, unsigned int *a2) { unsigned int v2; // edx unsigned int v3; // eax int v4; // esi v2 = 0; v3 = (this[740] - this[739]) >> 2; if ( !v3 ) return 0; v4 = this[739]; while ( !*(_DWORD *)v4 || *(_DWORD *)(*(_DWORD *)v4 + 36) ) { ++v2; v4 += 4; if ( v2 >= v3 ) return 0; } *a2 = v2; return 1; } //----- (00744800) -------------------------------------------------------- void __thiscall sub_744800(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi int v4; // edi v1 = this; v2 = (int)(this + 3); *(_DWORD *)v2 = &NiTMap::`vftable'; sub_940360(this + 3); *(_DWORD *)v2 = &NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); v3 = v1[2]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[1]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } // A0845C: using guessed type void *NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; // A0847C: using guessed type void *NiTMap::`vftable'; //----- (007448D0) -------------------------------------------------------- unsigned int __thiscall sub_7448D0(_DWORD *this, float a2) { double v2; // st7 _DWORD *v3; // edi unsigned int v4; // ecx unsigned int result; // eax _DWORD *v6; // esi int *v7; // ebx int v8; // esi float v9; // ST00_4 void (__thiscall ***v10)(_DWORD, signed int); // esi float v11; // edx int v12; // eax int v13; // esi float v14; // [esp+1Ch] [ebp-18h] float v15; // [esp+20h] [ebp-14h] int v16; // [esp+24h] [ebp-10h] int v17; // [esp+28h] [ebp-Ch] _DWORD *v18; // [esp+2Ch] [ebp-8h] unsigned int v19; // [esp+30h] [ebp-4h] unsigned int v20; // [esp+3Ch] [ebp+8h] v2 = a2; v3 = this; sub_657DC0((int)this, a2); v4 = 0; result = (v3[740] - v3[739]) >> 2; v20 = result; v19 = 0; if ( result ) { do { v6 = *(_DWORD **)(v3[739] + 4 * v4); v18 = v6; if ( v6 ) { v7 = (int *)v6[9]; if ( v7 ) { if ( !v4 && *((_WORD *)v7 + 274) == *((_WORD *)dword_AD8EBC + 274) ) { v8 = *v7; (*(void (__thiscall **)(_DWORD *))(*v3 + 272))(v3); v9 = v2; (*(void (__thiscall **)(int *, _DWORD))(v8 + 264))(v7, LODWORD(v9)); v6 = v18; } (*(void (__thiscall **)(_DWORD *, float *))(*v3 + 200))(v3, &v14); if ( v19 ) { sub_745770(v6, &v17); v10 = (void (__thiscall ***)(_DWORD, signed int))v17; if ( v17 ) { v11 = *(float *)(v17 + 144); v12 = *(_DWORD *)(v17 + 148); v14 = *(float *)(v17 + 140); v2 = v11; v15 = v11; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**v10)(v10, 1); } } v13 = v7[175]; if ( v13 ) { InterlockedIncrement((volatile LONG *)(v13 + 4)); *(float *)(v13 + 88) = v14; *(float *)(v13 + 92) = v15; *(_DWORD *)(v13 + 96) = v16; if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); } result = v20; } } v4 = v19 + 1; v19 = v4; } while ( v4 < result ); } return result; } //----- (00744A30) -------------------------------------------------------- char __usercall sub_744A30@(_DWORD *a1@, int a2@, int a3@) { int v3; // esi int v4; // eax v3 = (int)a1; sub_744250(a1, 1); v4 = *(_DWORD *)(v3 + 696); if ( *(_DWORD *)(v4 + 28) != 101000 ) LOBYTE(v4) = sub_65F070(v3, a2, a3, 100000, 1000); return v4; } //----- (00744A60) -------------------------------------------------------- int __usercall sub_744A60@(int *a1@, int a2@, int a3@, double a4@) { int *v4; // esi int result; // eax v4 = a1; sub_744250(a1, 2); result = v4[174]; if ( *(_DWORD *)(result + 28) != 201000 ) result = sub_65FC10(v4, a2, a3, a4); return result; } //----- (00744A90) -------------------------------------------------------- int __usercall sub_744A90@(int *a1@, int a2@, int a3@, double a4@) { int *v4; // esi int result; // eax v4 = a1; sub_744250(a1, 3); result = v4[174]; if ( *(_DWORD *)(result + 28) != 202000 ) result = sub_65FCA0(v4, a2, a3, a4); return result; } //----- (00744AC0) -------------------------------------------------------- char __thiscall sub_744AC0(_DWORD *this) { _DWORD *v1; // esi FILE *v3; // eax int v4; // edi int v5; // edx int v6; // esi v1 = this; sub_744250(this, 4); if ( v1[745] == *(_DWORD *)(v1[174] + 28) || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 248))(v1) ) return 0; (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD, _DWORD))(*v1 + 328))(v1, v1[745], 0, 0); v3 = sub_64C960(v1[743]); v4 = sub_64B9E0(v3, v1[745]); if ( !v4 ) return 0; v5 = v1[539]; v6 = (int)(v1 + 536); *(_DWORD *)(v6 + 24) = 0; nullsub_22(v5, 0); *(_WORD *)(v6 + 80) = 0; *(_BYTE *)(v6 + 82) = 0; *(_WORD *)(v6 + 83) = 0; sub_443300((_DWORD *)v6, v4); sub_6643D0((float *)v6, flt_ACCFCC); return 1; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); // ACCFCC: using guessed type float flt_ACCFCC; //----- (00744B80) -------------------------------------------------------- char __usercall sub_744B80@(_DWORD *a1@, int a2@, int a3@) { int v3; // esi v3 = (int)a1; sub_744250(a1, 7); return sub_65FD60(v3, a2, a3); } //----- (00744BA0) -------------------------------------------------------- char __usercall sub_744BA0@(_DWORD *a1@, int a2@, int a3@) { int v3; // esi v3 = (int)a1; sub_744250(a1, 6); return sub_65FD30(v3, a2, a3); } //----- (00744BC0) -------------------------------------------------------- char __thiscall sub_744BC0(int **this, char a2, int a3, unsigned __int8 a4) { int v4; // eax int **v5; // esi int v6; // ecx int v7; // edi int v8; // eax char *v9; // ebx int v10; // edx const char *v11; // esi int **v13; // [esp+18h] [ebp-90h] float v14; // [esp+1Ch] [ebp-8Ch] int v15; // [esp+20h] [ebp-88h] char v16; // [esp+24h] [ebp-84h] char v17; // [esp+25h] [ebp-83h] LOBYTE(v4) = a3; v5 = this; v13 = this; LOBYTE(v15) = a4; if ( a2 ) { if ( a3 ) { if ( a4 ) { v6 = *(_DWORD *)(a3 + 700); if ( v6 ) { v4 = (*(int (__stdcall **)(const char *))(*(_DWORD *)v6 + 72))("EFNODE"); v7 = v4; if ( v4 ) { if ( a4 < 0x14u ) { v8 = sub_50EEE0(v15); v9 = (char *)(v8 + 10); v4 = strcmp((const char *)(v8 + 10), "-"); if ( v4 ) { v10 = **(_DWORD **)(v7 + 16); v14 = 0.0; v11 = *(const char **)(v10 + 12); if ( v11 ) { v16 = 0; memset(&v17, 0, 0x7Fu); sscanf(v11, "%s", &v16); if ( !_strnicmp(&v16, "Scale", 5u) ) { v14 = 0.0; sscanf(v11, "%s %d ", &v16, &v14); v14 = (double)LODWORD(v14) * 0.009999999776482582; } } v15 = 0; LOBYTE(v4) = sub_6AF580(&unk_B91250, (int)&v15, v9, v7, v14, flt_ACCFCC); v13[749] = (int *)v15; } } } } } } } else { v4 = (int)this[749]; if ( v4 ) { LOBYTE(v4) = (unsigned int)sub_6ACDF0(&unk_B91250, this[749]); v5[749] = 0; } } return v4; } // ACCFCC: using guessed type float flt_ACCFCC; //----- (00744DB0) -------------------------------------------------------- _DWORD *__thiscall sub_744DB0(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST08_4 v2 = this; *this = a2; this[1] = 0; this[2] = 0; this[4] = 37; this[3] = &NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; this[6] = 0; v3 = operator new[](0x94u); v4 = 4 * v2[4]; v2[5] = v3; memset(v3, 0, v4); v2[3] = &NiTMap::`vftable'; v2[7] = 0; v2[8] = 0; v2[9] = 0; return v2; } // A0845C: using guessed type void *NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; // A0847C: using guessed type void *NiTMap::`vftable'; //----- (00744E50) -------------------------------------------------------- _DWORD *__thiscall sub_744E50(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_658E20(this); *v1 = &Mover::`vftable'; v1[15] = &Mover::`vftable'; v1[21] = &Mover::`vftable'; v1[739] = 0; v1[740] = 0; v1[741] = 0; *((_WORD *)v1 + 1488) = 0; v1[745] = 0; v1[746] = 0; v1[747] = 0; *((_BYTE *)v1 + 2992) = 0; v1[749] = 0; v1[743] = -1; return v1; } // A0849C: using guessed type void *Mover::`vftable'; // A084BC: using guessed type void *Mover::`vftable'; // A084C4: using guessed type void *Mover::`vftable'; //----- (00744F60) -------------------------------------------------------- void *__cdecl sub_744F60(LONG a1, LONG a2, int a3, char *a4, char *a5) { _DWORD *v5; // eax unsigned __int8 *v6; // eax _DWORD *v7; // edi void *result; // eax int v9; // eax unsigned int v10; // eax unsigned __int8 *v11; // eax unsigned __int8 *v12; // ebx unsigned int v13; // eax unsigned int v14; // edi unsigned int v15; // esi unsigned int v16; // ecx unsigned __int8 *v17; // eax int v18; // eax bool v19; // bl _DWORD *v20; // eax int v21; // edx int v22; // ecx LONG v23; // [esp-4h] [ebp-68h] int v24; // [esp+10h] [ebp-54h] char *v25; // [esp+14h] [ebp-50h] unsigned int i; // [esp+18h] [ebp-4Ch] char *v27; // [esp+1Ch] [ebp-48h] unsigned int v28; // [esp+20h] [ebp-44h] int v29; // [esp+24h] [ebp-40h] unsigned int v30; // [esp+28h] [ebp-3Ch] void *v31; // [esp+2Ch] [ebp-38h] int v32; // [esp+30h] [ebp-34h] void *v33; // [esp+34h] [ebp-30h] void *v34; // [esp+38h] [ebp-2Ch] unsigned int v35; // [esp+48h] [ebp-1Ch] unsigned int v36; // [esp+4Ch] [ebp-18h] int v37; // [esp+60h] [ebp-4h] v27 = a5; v32 = 0; v37 = 1; v5 = operator new(0x28u); v31 = v5; LOBYTE(v37) = 2; if ( v5 ) v33 = sub_744DB0(v5, a3); else v33 = 0; LOBYTE(v37) = 1; v24 = a3 + 1; v6 = sub_745990(a4, a3 + 1); v7 = v33; *((_DWORD *)v33 + 8) = v6; if ( v6 ) { if ( a2 ) *(_WORD *)(a2 + 28) |= 1u; v23 = a1; v31 = &v23; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); sub_7456C0(v33, v23); v23 = a2; v31 = &v23; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_7457A0(v33, v23); v23 = a3 + 1; v31 = (void *)sub_745B00(a5); v28 = 0; if ( v31 ) { do { v9 = *(_DWORD *)(dword_ACDA08 + 56); v29 = 0; if ( v9 ) v30 = *(_DWORD *)(v9 + 40); else v30 = 0; v10 = 0; for ( i = 0; v10 < v30; i = v10 ) { v11 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACDA08 + 4), v10); v12 = v11; v25 = (char *)v11; if ( v11 ) { v36 = 15; v35 = 0; LOBYTE(v34) = 0; sub_4018E0(&v34, v11, strlen((const char *)v11)); v32 |= 1u; v13 = strlen(v27); v14 = v35; v15 = v13; v16 = v35; if ( v35 >= v13 ) v16 = v13; v17 = (unsigned __int8 *)v34; if ( v36 < 0x10 ) v17 = (unsigned __int8 *)&v34; v18 = sub_40C0B0(v17, (unsigned __int8 *)v27, v16); v19 = 0; if ( !v18 && v14 >= v15 ) { LOBYTE(v18) = v14 != v15; if ( !v18 && v12[16] == v24 ) v19 = 1; } v37 = 1; if ( v32 & 1 ) { v32 &= 0xFFFFFFFE; if ( v36 >= 0x10 ) operator delete(v34); v36 = 15; v35 = 0; LOBYTE(v34) = 0; } if ( v19 ) { if ( v29 == v28 ) { v20 = operator new(8u); v21 = (int)v25; if ( v20 ) { v22 = *(_DWORD *)(v25 + 25); *v20 = *(_DWORD *)(v25 + 21); v20[1] = v22; } else { v20 = 0; } v23 = (LONG)v20; sub_815C70((_DWORD *)v33 + 3, *(_DWORD *)(v21 + 17), (int)v20); break; } ++v29; } } v10 = i + 1; } ++v28; } while ( v28 < (unsigned int)v31 ); } LOBYTE(v37) = 0; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) && a1 ) (**(void (__thiscall ***)(LONG, signed int))a1)(a1, 1); v37 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && a2 ) (**(void (__thiscall ***)(LONG, signed int))a2)(a2, 1); result = v33; } else { sub_744800(v7); operator delete(v7); LOBYTE(v37) = 0; if ( a1 && !InterlockedDecrement((volatile LONG *)(a1 + 4)) && a1 ) (**(void (__thiscall ***)(LONG, signed int))a1)(a1, 1); v37 = -1; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( a2 ) (**(void (__thiscall ***)(LONG, signed int))a2)(a2, 1); } result = 0; } return result; } // ACDA08: using guessed type int dword_ACDA08; //----- (007452A0) -------------------------------------------------------- char __thiscall sub_7452A0(_WORD *this, int a2, __int16 a3, int a4) { _WORD *v4; // esi int v5; // edx char v6; // bl unsigned __int8 (__thiscall *v7)(_WORD *); // eax unsigned int v8; // edi void (__thiscall *v9)(_WORD *); // eax _DWORD *v10; // eax int v11; // eax int v12; // eax unsigned int v13; // ebx int v14; // eax void *v16; // eax void *v17; // eax char *v18; // ST00_4 char *v19; // edi void (__thiscall *v20)(_WORD *, int); // edx char v21; // [esp+Ch] [ebp-Ch] v4 = this; v5 = *(_DWORD *)this; this[274] = a3; v6 = (*(int (**)(void))(v5 + 48))(); v7 = *(unsigned __int8 (__thiscall **)(_WORD *))(*(_DWORD *)v4 + 48); v8 = 0; *((_BYTE *)v4 + 1924) = 1; *((_DWORD *)v4 + 482) = 0; if ( v6 != v7(v4) ) *((_BYTE *)v4 + 1925) = 1; v9 = *(void (__thiscall **)(_WORD *))(*((_DWORD *)v4 + 397) + 32); *((_DWORD *)v4 + 743) = a2; *((_BYTE *)v4 + 944) = 0; *((_BYTE *)v4 + 2680) = 0; v9(v4 + 794); *((_BYTE *)v4 + 1482) = 1; v10 = sub_439D70(byte_ADB468, &v21); v11 = sub_4316B0(v10); if ( v11 ) *((float *)v4 + 374) = (double)*(unsigned int *)(v11 + 72); v12 = *(_DWORD *)(dword_ACB374 + 56); if ( v12 ) v13 = *(_DWORD *)(v12 + 40); else v13 = 0; if ( v13 ) { while ( 1 ) { v14 = sub_7474E0((_DWORD *)(dword_ACB374 + 4), v8); if ( v14 ) { if ( *(_DWORD *)v14 == a2 ) break; } if ( ++v8 >= v13 ) goto LABEL_12; } } else { LABEL_12: v14 = 0; } *((_DWORD *)v4 + 746) = v14; if ( !v14 ) return 0; v16 = sub_50EFA0((char *)(v14 + 4)); *((_DWORD *)v4 + 747) = v16; if ( !v16 ) return 0; v17 = sub_440720((char *)(*((_DWORD *)v4 + 746) + 4)); v18 = (char *)(*((_DWORD *)v4 + 746) + 4); *((_BYTE *)v4 + 2976) = v17 != 0; v19 = (char *)sub_745C60(v18); if ( v19 ) { v20 = *(void (__thiscall **)(_WORD *, int))(*(_DWORD *)v4 + 128); *((_BYTE *)v4 + 2977) = 1; v20(v4, a4); (*(void (__thiscall **)(_WORD *, _DWORD))(*(_DWORD *)v4 + 136))(v4, *(_DWORD *)(v19 + 33)); } return 1; } // ACB374: using guessed type int dword_ACB374; //----- (00745410) -------------------------------------------------------- char __thiscall sub_745410(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // esi _DWORD *v5; // eax int v6; // edi _DWORD *v7; // ebx _DWORD *v8; // edi FILE *v9; // eax int v10; // edx int v11; // edi unsigned int v12; // esi int v14; // ebx char *v15; // eax void (__thiscall **v16)(_DWORD, _DWORD); // edx int v17; // eax int v18; // edi void (__thiscall **v19)(_DWORD, _DWORD); // esi _DWORD *v20; // ebx char *v21; // eax LONG v22; // [esp-14h] [ebp-48h] LONG v23; // [esp-10h] [ebp-44h] int v24; // [esp-Ch] [ebp-40h] char *v25; // [esp-8h] [ebp-3Ch] char *v26; // [esp-4h] [ebp-38h] unsigned int v27; // [esp+10h] [ebp-24h] int v28; // [esp+14h] [ebp-20h] LONG *v29; // [esp+18h] [ebp-1Ch] int v30; // [esp+1Ch] [ebp-18h] _DWORD *v31; // [esp+20h] [ebp-14h] unsigned int v32; // [esp+24h] [ebp-10h] int v33; // [esp+30h] [ebp-4h] char v34; // [esp+3Fh] [ebp+Bh] v3 = this; v31 = this; v4 = (int)(this + 536); *(float *)(v4 + 92) = 0.0; v26 = 0; *(float *)(v4 + 96) = 0.0; v25 = 0; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 20) = 0; *(_DWORD *)(v4 + 28) = 0; *(_DWORD *)(v4 + 88) = 0; *(_DWORD *)(v4 + 100) = 0; *(_BYTE *)(v4 + 108) = 0; *(_DWORD *)(v4 + 24) = 0; nullsub_22(v25, v26); *(_WORD *)(v4 + 80) = 0; *(_BYTE *)(v4 + 82) = 0; *(_WORD *)(v4 + 83) = 0; *(float *)(v4 + 104) = 0.0; v5 = sub_66BEB0(&unk_AD8D28, v3[743]); v6 = v3[174]; v7 = v5; if ( (_DWORD *)v6 == v5 ) { v8 = v31; } else { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v8 = v31; v31[174] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = sub_64C960(v8[743]); v10 = *(_DWORD *)v4; v8[540] = v9; (*(void (__thiscall **)(int, _DWORD *))(v10 + 24))(v4, v8); v11 = v8[174]; v12 = 0; if ( !v11 ) return 0; v14 = *(_DWORD *)(v11 + 12); v30 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); v33 = 0; if ( !v14 ) return 0; v32 = 0; do { if ( v12 ) { v26 = (char *)(v12 + 1); v15 = sub_7549E0("#Chair%02d", v12 + 1); } else { v15 = "#Chair"; } v16 = *(void (__thiscall ***)(_DWORD, _DWORD))v14; v26 = v15; v17 = ((int (__thiscall *)(int, char *))v16[18])(v14, v15); v18 = v17; v28 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); LOBYTE(v33) = 1; if ( v18 ) { if ( v12 ) { v19 = *(void (__thiscall ***)(_DWORD, _DWORD))v14; v26 = (char *)(v32 + 1); v26 = sub_7549E0("HideSlot%02d", v32 + 1); v12 = ((int (__thiscall *)(int, char *))v19[18])(v14, v26); } v27 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v20 = v31; v21 = (char *)v31[747]; LOBYTE(v33) = 2; if ( v21 ) { v26 = v21 + 224; v25 = v21; v24 = v32; v29 = &v23; v23 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v29 = &v22; v22 = v18; InterlockedIncrement((volatile LONG *)(v18 + 4)); v29 = (LONG *)sub_744F60(v22, v23, v24, v25, v26); sub_5B3CF0(v20 + 739, &v29); } LOBYTE(v33) = 1; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(unsigned int, signed int))v12)(v12, 1); LOBYTE(v33) = 0; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v12 = v32; v14 = v30; } else { LOBYTE(v33) = 0; } v32 = ++v12; } while ( v12 < 0xA ); v34 = (*(int (__stdcall **)(int))(*v31 + 604))(a2); v33 = -1; if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); return v34; } // 64CB50: using guessed type _DWORD __stdcall nullsub_22(_DWORD, _DWORD); //----- (007456C0) -------------------------------------------------------- LONG __thiscall sub_7456C0(_DWORD *this, LONG a2) { _DWORD *v2; // edi int v3; // esi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi v2 = this; v3 = this[1]; result = a2; if ( v3 != a2 ) { if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = a2; } v2[1] = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a2; } } if ( result ) { v5 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } return result; } //----- (00745770) -------------------------------------------------------- _DWORD *__thiscall sub_745770(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[1]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (007457A0) -------------------------------------------------------- LONG __thiscall sub_7457A0(_DWORD *this, LONG a2) { _DWORD *v2; // edi int v3; // esi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi v2 = this; v3 = this[2]; result = a2; if ( v3 != a2 ) { if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = a2; } v2[2] = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a2; } } if ( result ) { v5 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } return result; } //----- (00745850) -------------------------------------------------------- _DWORD *__thiscall sub_745850(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[2]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (007458A0) -------------------------------------------------------- void **__thiscall sub_7458A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A0845C: using guessed type void *NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; //----- (007458E0) -------------------------------------------------------- void **__thiscall sub_7458E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A0845C: using guessed type void *NiTMapBase,enum CharAniType,MoverSlot::sSlotAniCode *>::`vftable'; // A0847C: using guessed type void *NiTMap::`vftable'; //----- (00745960) -------------------------------------------------------- BOOL __thiscall sub_745960(_BYTE *this) { return this[2992] == 0; } //----- (00745970) -------------------------------------------------------- _DWORD *__thiscall sub_745970(char *this, char a2) { return sub_745DB0(this - 84, a2); } //----- (00745980) -------------------------------------------------------- _DWORD *__thiscall sub_745980(char *this, char a2) { return sub_745DB0(this - 60, a2); } //----- (00745990) -------------------------------------------------------- unsigned __int8 *__cdecl sub_745990(char *a1, int a2) { int v2; // eax unsigned int v3; // esi unsigned __int8 *v4; // eax unsigned __int8 *v5; // ebx unsigned int v6; // eax unsigned int v7; // edi unsigned int v8; // esi unsigned int v9; // ecx unsigned __int8 *v10; // eax int v11; // eax bool v12; // bl unsigned __int8 *v14; // [esp+10h] [ebp-40h] unsigned int v15; // [esp+14h] [ebp-3Ch] unsigned int v16; // [esp+1Ch] [ebp-34h] int v17; // [esp+20h] [ebp-30h] void *v18; // [esp+24h] [ebp-2Ch] unsigned int v19; // [esp+34h] [ebp-1Ch] unsigned int v20; // [esp+38h] [ebp-18h] int v21; // [esp+4Ch] [ebp-4h] v17 = 0; v2 = *(_DWORD *)(dword_ACDA04 + 56); if ( v2 ) v16 = *(_DWORD *)(v2 + 40); else v16 = 0; v3 = 0; v15 = 0; if ( v16 <= 0 ) return 0; while ( 1 ) { v4 = (unsigned __int8 *)sub_7474E0((_DWORD *)(dword_ACDA04 + 4), v3); v5 = v4; v14 = v4; if ( v4 ) break; LABEL_22: v15 = ++v3; if ( v3 >= v16 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v4, strlen((const char *)v4)); v17 |= 1u; v6 = strlen(a1); v7 = v19; v8 = v6; v9 = v19; if ( v19 >= v6 ) v9 = v6; v10 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v10 = (unsigned __int8 *)&v18; v11 = sub_40C0B0(v10, (unsigned __int8 *)a1, v9); v12 = 0; if ( !v11 && v7 >= v8 ) { LOBYTE(v11) = v7 != v8; if ( !v11 && v5[32] == a2 ) v12 = 1; } v21 = -1; if ( v17 & 1 ) { v17 &= 0xFFFFFFFE; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; } if ( !v12 ) { v3 = v15; goto LABEL_22; } return v14; } // ACDA04: using guessed type int dword_ACDA04; //----- (00745B00) -------------------------------------------------------- unsigned int __cdecl sub_745B00(char *a1) { int v1; // eax unsigned int result; // eax void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl unsigned int v14; // [esp+10h] [ebp-3Ch] unsigned int v15; // [esp+18h] [ebp-34h] unsigned int v16; // [esp+1Ch] [ebp-30h] void *v17; // [esp+20h] [ebp-2Ch] unsigned int v18; // [esp+30h] [ebp-1Ch] unsigned int v19; // [esp+34h] [ebp-18h] int v20; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACDA08 + 56); v16 = 0; if ( v1 ) v15 = *(_DWORD *)(v1 + 40); else v15 = 0; result = 0; v14 = 0; if ( v15 > 0 ) { do { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACDA08 + 4), result); if ( v3 ) { v19 = 15; v18 = 0; LOBYTE(v17) = 0; sub_4018E0(&v17, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v18; v6 = v4; v7 = v18; if ( v18 >= v4 ) v7 = v4; v8 = v19; v9 = (unsigned __int8 *)v17; if ( v19 < 0x10 ) v9 = (unsigned __int8 *)&v17; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v20 = -1; if ( v8 >= 0x10 ) operator delete(v17); v19 = 15; v18 = 0; LOBYTE(v17) = 0; if ( v13 ) ++v16; } result = v14 + 1; v14 = result; } while ( result < v15 ); result = v16; } return result; } // ACDA08: using guessed type int dword_ACDA08; //----- (00745C60) -------------------------------------------------------- void *__cdecl sub_745C60(char *a1) { int v1; // eax unsigned int v2; // edi void *v3; // eax unsigned int v4; // eax unsigned int v5; // ebx unsigned int v6; // esi unsigned int v7; // ecx unsigned int v8; // edi unsigned __int8 *v9; // eax int v10; // eax bool v11; // zf signed int v12; // eax bool v13; // bl void *v15; // [esp+10h] [ebp-3Ch] unsigned int v16; // [esp+18h] [ebp-34h] unsigned int v17; // [esp+1Ch] [ebp-30h] void *v18; // [esp+20h] [ebp-2Ch] unsigned int v19; // [esp+30h] [ebp-1Ch] unsigned int v20; // [esp+34h] [ebp-18h] int v21; // [esp+48h] [ebp-4h] v1 = *(_DWORD *)(dword_ACDA0C + 56); v2 = 0; if ( v1 ) v17 = *(_DWORD *)(v1 + 40); else v17 = 0; v16 = 0; if ( v17 <= 0 ) return 0; while ( 1 ) { v3 = (void *)sub_7474E0((_DWORD *)(dword_ACDA0C + 4), v2); v15 = v3; if ( v3 ) break; LABEL_19: v16 = ++v2; if ( v2 >= v17 ) return 0; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v3, strlen((const char *)v3)); v4 = strlen(a1); v5 = v19; v6 = v4; v7 = v19; if ( v19 >= v4 ) v7 = v4; v8 = v20; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)a1, v7); v11 = v10 == 0; if ( !v10 ) { if ( v5 >= v6 ) v12 = v5 != v6; else v12 = -1; v11 = v12 == 0; } v13 = v11; v21 = -1; if ( v8 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( !v13 ) { v2 = v16; goto LABEL_19; } return v15; } // ACDA0C: using guessed type int dword_ACDA0C; //----- (00745DB0) -------------------------------------------------------- _DWORD *__thiscall sub_745DB0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &Mover::`vftable'; *((_DWORD *)this + 15) = &Mover::`vftable'; *((_DWORD *)this + 21) = &Mover::`vftable'; *((_DWORD *)this + 749) = 0; if ( *((_DWORD *)this + 739) ) operator delete(*((void **)this + 739)); v2[739] = 0; v2[740] = 0; v2[741] = 0; sub_657580(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A0849C: using guessed type void *Mover::`vftable'; // A084BC: using guessed type void *Mover::`vftable'; // A084C4: using guessed type void *Mover::`vftable'; //----- (007461F0) -------------------------------------------------------- int sub_7461F0(wchar_t *a1, int a2, wchar_t *a3, ...) { unsigned int v3; // ecx int result; // eax unsigned int v5; // esi signed int v6; // ebx int v7; // eax va_list va; // [esp+14h] [ebp+14h] va_start(va, a3); v3 = (unsigned int)a2 >> 1; result = 0; if ( !((unsigned int)a2 >> 1) || v3 > 0x7FFFFFFF ) result = -2147024809; if ( result >= 0 ) { v5 = v3 - 1; v6 = 0; v7 = _vsnwprintf(a1, v3 - 1, a3, va); if ( v7 < 0 || v7 > v5 ) { a1[v5] = 0; v6 = -2147024774; } else if ( v7 == v5 ) { a1[v5] = 0; return 0; } result = v6; } return result; } //----- (00746260) -------------------------------------------------------- int __fastcall sub_746260(int *a1, int a2, int a3, unsigned int a4, unsigned __int16 a5) { int result; // eax char *v6; // edi char *v7; // edi int i; // ecx result = (int)a1; if ( a4 == 1 ) { if ( (unsigned int)a1[5] >= 8 ) result = *a1; *(_WORD *)(result + 2 * a3) = a5; } else { if ( (unsigned int)a1[5] >= 8 ) result = *a1; v6 = (char *)(result + 2 * a3); if ( a4 ) { result = (a5 << 16) | a5; memset32(v6, result, a4 >> 1); v7 = &v6[4 * (a4 >> 1)]; for ( i = a4 & 1; i; --i ) { *(_WORD *)v7 = a5; v7 += 2; } } } return result; } //----- (007462C0) -------------------------------------------------------- _DWORD *__thiscall sub_7462C0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *v3; // esi unsigned int v4; // eax unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // edx _DWORD *v8; // ebx _DWORD *v9; // edx int v10; // eax bool v11; // cf v3 = this; v4 = this[4]; if ( v4 < a2 ) std::_Xout_of_range("invalid string position"); v5 = a3; v6 = v4 - a2; if ( v6 < a3 ) v5 = v6; if ( v5 ) { v7 = this[5]; if ( v7 < 8 ) v8 = this; else v8 = (_DWORD *)*this; if ( v7 < 8 ) v9 = this; else v9 = (_DWORD *)*this; memcpy_0((char *)v9 + 2 * a2, (char *)v8 + 2 * (a2 + v5), 2 * (v6 - v5)); v10 = v3[4] - v5; v11 = v3[5] < 8u; v3[4] = v10; if ( !v11 ) { *(_WORD *)(*v3 + 2 * v10) = 0; return v3; } *((_WORD *)v3 + v10) = 0; } return v3; } //----- (00746350) -------------------------------------------------------- void __thiscall sub_746350(const void **this, unsigned int a2, const void *a3) { const void **v3; // edi unsigned int v4; // esi unsigned int v5; // ebx unsigned int v6; // ecx void *v7; // eax unsigned int v8; // ecx void *v9; // ebx const void *v10; // ecx const void *v11; // eax int v12; // [esp+0h] [ebp-34h] void **v13; // [esp+10h] [ebp-24h] char *v14; // [esp+1Ch] [ebp-18h] const void **v15; // [esp+20h] [ebp-14h] int *v16; // [esp+24h] [ebp-10h] int v17; // [esp+30h] [ebp-4h] v16 = &v12; v3 = this; v15 = this; v4 = a2 | 7; if ( (a2 | 7) <= 0x7FFFFFFE ) { v5 = (unsigned int)this[5]; v6 = (unsigned int)this[5] >> 1; if ( v6 > v4 / 3 ) { v4 = v6 + v5; if ( v5 > 2147483646 - v6 ) v4 = 2147483646; } } else { v4 = a2; } v7 = 0; v8 = v4 + 1; v17 = 0; if ( v4 + 1 > 0 ) { if ( v8 > 0x7FFFFFFF || (v7 = operator new(2 * v8)) == 0 ) { v14 = 0; std::exception::exception((std::exception *)&v13, (const char *const *)&v14); v13 = &std::bad_alloc::`vftable'; _CxxThrowException(&v13, &_TI2_AVbad_alloc_std__); } } v9 = v7; v10 = a3; if ( a3 ) { if ( (unsigned int)v3[5] < 8 ) v11 = v3; else v11 = *v3; memcpy(v9, v11, 2 * (_DWORD)a3); v10 = a3; } if ( (unsigned int)v3[5] >= 8 ) { operator delete((void *)*v3); v10 = a3; } *v3 = v9; v3[5] = (const void *)v4; v3[4] = v10; if ( v4 >= 8 ) v3 = (const void **)v9; *((_WORD *)v3 + (_DWORD)v10) = 0; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00746500) -------------------------------------------------------- int __fastcall sub_746500(int a1, int a2, unsigned int a3, unsigned __int16 a4) { int v4; // esi char *v5; // eax unsigned int v6; // edi unsigned int v7; // ecx bool v8; // cf int result; // eax v4 = a1; v5 = *(char **)(a1 + 16); if ( -1 - (signed int)v5 <= a3 ) std::_Xlength_error("string too long"); if ( !a3 ) return v4; v6 = (unsigned int)&v5[a3]; if ( (unsigned int)&v5[a3] > 0x7FFFFFFE ) std::_Xlength_error("string too long"); v7 = *(_DWORD *)(a1 + 20); if ( v7 < v6 ) { sub_746350((const void **)v4, (unsigned int)&v5[a3], v5); if ( v6 ) { LABEL_8: sub_746260((int *)v4, a2, *(_DWORD *)(v4 + 16), a3, a4); v8 = *(_DWORD *)(v4 + 20) < 8u; *(_DWORD *)(v4 + 16) = v6; if ( !v8 ) { *(_WORD *)(*(_DWORD *)v4 + 2 * v6) = 0; return v4; } *(_WORD *)(v4 + 2 * v6) = 0; } return v4; } if ( v6 ) goto LABEL_8; *(_DWORD *)(v4 + 16) = 0; if ( v7 < 8 ) { result = v4; *(_WORD *)v4 = 0; } else { **(_WORD **)v4 = 0; result = v4; } return result; } //----- (007465C0) -------------------------------------------------------- const void **__thiscall sub_7465C0(const void **this, _DWORD *a2, unsigned int a3, unsigned int a4) { _DWORD *v4; // edx unsigned int v5; // eax const void **v6; // esi unsigned int v7; // ebx unsigned int v8; // eax char *v9; // eax unsigned int v10; // edi unsigned int v11; // ecx _DWORD *v12; // ecx const void **result; // eax char *v14; // eax bool v15; // cf v4 = a2; v5 = a2[4]; v6 = this; if ( v5 < a3 ) std::_Xout_of_range("invalid string position"); v7 = a4; v8 = v5 - a3; if ( v8 < a4 ) v7 = v8; v9 = (char *)this[4]; if ( -1 - (signed int)v9 <= v7 ) std::_Xlength_error("string too long"); if ( !v7 ) return v6; v10 = (unsigned int)&v9[v7]; if ( (unsigned int)&v9[v7] > 0x7FFFFFFE ) std::_Xlength_error("string too long"); v11 = (unsigned int)this[5]; if ( v11 < v10 ) { sub_746350(v6, (unsigned int)&v9[v7], v9); v4 = a2; if ( v10 ) { LABEL_12: if ( v4[5] < 8u ) v12 = v4; else v12 = (_DWORD *)*v4; if ( (unsigned int)v6[5] < 8 ) v14 = (char *)v6; else v14 = (char *)*v6; memcpy(&v14[2 * (_DWORD)v6[4]], (char *)v12 + 2 * a3, 2 * v7); v15 = (unsigned int)v6[5] < 8; v6[4] = (const void *)v10; if ( !v15 ) { *((_WORD *)*v6 + v10) = 0; return v6; } *((_WORD *)v6 + v10) = 0; } return v6; } if ( v10 ) goto LABEL_12; v6[4] = 0; if ( v11 < 8 ) { result = v6; *(_WORD *)v6 = 0; } else { *(_WORD *)*v6 = 0; result = v6; } return result; } //----- (007466D0) -------------------------------------------------------- const void **__thiscall sub_7466D0(const void **this, const void **a2, unsigned int a3, unsigned int a4) { const void **v4; // esi const void **v5; // ecx unsigned int v6; // edi unsigned int v7; // edi const void **result; // eax unsigned int v9; // eax void *v10; // eax int v11; // ebx bool v12; // cf v4 = this; v5 = a2; v6 = (unsigned int)a2[4]; if ( v6 < a3 ) std::_Xout_of_range("invalid string position"); v7 = v6 - a3; if ( a4 < v7 ) v7 = a4; if ( v4 == a2 ) { sub_7462C0(v4, a3 + v7, 0xFFFFFFFF); sub_7462C0(v4, 0, a3); return v4; } if ( v7 > 0x7FFFFFFE ) std::_Xlength_error("string too long"); v9 = (unsigned int)v4[5]; if ( v9 < v7 ) { sub_746350(v4, v7, v4[4]); v5 = a2; if ( !v7 ) return v4; LABEL_11: if ( (unsigned int)v5[5] >= 8 ) v5 = (const void **)*v5; if ( (unsigned int)v4[5] < 8 ) v10 = v4; else v10 = (void *)*v4; v11 = 2 * v7; memcpy(v10, (char *)v5 + 2 * a3, 2 * v7); v12 = (unsigned int)v4[5] < 8; v4[4] = (const void *)v7; if ( !v12 ) { *(_WORD *)((char *)*v4 + v11) = 0; return v4; } *(_WORD *)((char *)v4 + v11) = 0; return v4; } if ( v7 ) goto LABEL_11; v4[4] = 0; if ( v9 < 8 ) { result = v4; *(_WORD *)v4 = 0; } else { *(_WORD *)*v4 = 0; result = v4; } return result; } //----- (007467D0) -------------------------------------------------------- const void **__fastcall sub_7467D0(_DWORD *a1, int a2, void *a3, int a4) { int v4; // esi unsigned int v5; // edx char *v6; // ecx char *v7; // ecx const void **result; // eax unsigned int v9; // eax char *v10; // eax int v11; // ebx bool v12; // cf v4 = (int)a1; if ( !a3 ) goto LABEL_30; v5 = a1[5]; if ( v5 >= 8 ) a1 = (_DWORD *)*a1; if ( a3 < a1 || (v5 < 8 ? (v6 = (char *)v4) : (v6 = *(char **)v4), &v6[2 * *(_DWORD *)(v4 + 16)] <= a3) ) { LABEL_30: if ( (unsigned int)a4 > 0x7FFFFFFE ) std::_Xlength_error("string too long"); v9 = *(_DWORD *)(v4 + 20); if ( v9 >= a4 ) { if ( !a4 ) { *(_DWORD *)(v4 + 16) = 0; if ( v9 < 8 ) { result = (const void **)v4; *(_WORD *)v4 = 0; } else { **(_WORD **)v4 = 0; result = (const void **)v4; } return result; } } else { sub_746350((const void **)v4, a4, *(const void **)(v4 + 16)); if ( !a4 ) return (const void **)v4; } if ( *(_DWORD *)(v4 + 20) < 8u ) v10 = (char *)v4; else v10 = *(char **)v4; v11 = 2 * a4; memcpy(v10, a3, 2 * a4); v12 = *(_DWORD *)(v4 + 20) < 8u; *(_DWORD *)(v4 + 16) = a4; if ( !v12 ) { *(_WORD *)(v11 + *(_DWORD *)v4) = 0; return (const void **)v4; } *(_WORD *)(v11 + v4) = 0; return (const void **)v4; } if ( v5 < 8 ) v7 = (char *)v4; else v7 = *(char **)v4; return sub_7466D0((const void **)v4, (const void **)v4, ((_BYTE *)a3 - v7) >> 1, a4); } //----- (007468C0) -------------------------------------------------------- const void **__thiscall sub_7468C0(_DWORD *this, void *a2, int a3) { void *v3; // edx int v4; // esi unsigned int v5; // ecx char *v6; // eax char *v7; // eax char *v8; // eax const void **result; // eax char *v10; // eax unsigned int v11; // edi unsigned int v12; // ecx char *v13; // eax bool v14; // cf v3 = a2; v4 = (int)this; if ( !a2 || ((v5 = this[5], v5 < 8) ? (v6 = (char *)v4) : (v6 = *(char **)v4), a2 < v6 || (v5 < 8 ? (v7 = (char *)v4) : (v7 = *(char **)v4), &v7[2 * *(_DWORD *)(v4 + 16)] <= a2)) ) { v10 = *(char **)(v4 + 16); if ( -1 - (signed int)v10 <= (unsigned int)a3 ) std::_Xlength_error("string too long"); if ( a3 ) { v11 = (unsigned int)&v10[a3]; if ( (unsigned int)&v10[a3] > 0x7FFFFFFE ) std::_Xlength_error("string too long"); v12 = *(_DWORD *)(v4 + 20); if ( v12 >= v11 ) { if ( !v11 ) { *(_DWORD *)(v4 + 16) = 0; if ( v12 < 8 ) { result = (const void **)v4; *(_WORD *)v4 = 0; } else { **(_WORD **)v4 = 0; result = (const void **)v4; } return result; } goto LABEL_21; } sub_746350((const void **)v4, (unsigned int)&v10[a3], v10); v3 = a2; if ( v11 ) { LABEL_21: if ( *(_DWORD *)(v4 + 20) < 8u ) v13 = (char *)v4; else v13 = *(char **)v4; memcpy(&v13[2 * *(_DWORD *)(v4 + 16)], v3, 2 * a3); v14 = *(_DWORD *)(v4 + 20) < 8u; *(_DWORD *)(v4 + 16) = v11; if ( !v14 ) { *(_WORD *)(*(_DWORD *)v4 + 2 * v11) = 0; return (const void **)v4; } *(_WORD *)(v4 + 2 * v11) = 0; return (const void **)v4; } } return (const void **)v4; } if ( v5 < 8 ) v8 = (char *)v4; else v8 = *(char **)v4; return sub_7465C0((const void **)v4, (_DWORD *)v4, ((_BYTE *)a2 - v8) >> 1, a3); } //----- (00746A00) -------------------------------------------------------- void *__thiscall sub_746A00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CMD5Checksum::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A089E8: using guessed type void *CMD5Checksum::`vftable'; //----- (00746A30) -------------------------------------------------------- int __thiscall sub_746A30(_DWORD *this, int a2) { _DWORD *v2; // eax unsigned __int16 *v3; // ecx int *v4; // edx signed int v5; // esi int v6; // esi int v7; // edx int v8; // ecx int v9; // eax int v10; // ecx int v11; // edx int v12; // esi int v13; // eax int v14; // ecx int v15; // edx int v16; // esi int v17; // eax int v18; // ecx int v19; // edx int v20; // esi int v21; // eax int v22; // ecx int v23; // edx int v24; // esi int v25; // eax int v26; // ecx int v27; // edx int v28; // esi int v29; // ST14_4 int v30; // ecx int v31; // edx int v32; // esi int v33; // ST14_4 int v34; // ecx int v35; // edx int v36; // esi int v37; // ST14_4 int v38; // ecx int v39; // edx int v40; // esi int v41; // eax int v42; // ecx int v43; // edx int v44; // esi int v45; // eax int v46; // edi int v47; // edx int v48; // ecx int v49; // eax int v50; // esi int v51; // edi int v52; // ecx int v53; // eax int v54; // edx int v55; // esi int v56; // ecx int v57; // eax int v58; // edx int v59; // esi int v60; // ecx int v61; // eax int v62; // edx int v63; // esi int v64; // ecx int v65; // eax int v66; // edx int v67; // esi int v68; // edi int v69; // eax int v70; // edx _DWORD *v71; // ecx int v72; // esi int result; // eax _DWORD *v74; // [esp+Ch] [ebp-50h] int v75; // [esp+18h] [ebp-44h] int v76; // [esp+1Ch] [ebp-40h] int v77; // [esp+20h] [ebp-3Ch] int v78; // [esp+24h] [ebp-38h] int v79; // [esp+28h] [ebp-34h] int v80; // [esp+2Ch] [ebp-30h] int v81; // [esp+30h] [ebp-2Ch] int v82; // [esp+34h] [ebp-28h] int v83; // [esp+38h] [ebp-24h] int v84; // [esp+3Ch] [ebp-20h] int v85; // [esp+40h] [ebp-1Ch] int v86; // [esp+44h] [ebp-18h] int v87; // [esp+48h] [ebp-14h] int v88; // [esp+4Ch] [ebp-10h] int v89; // [esp+50h] [ebp-Ch] int v90; // [esp+54h] [ebp-8h] v2 = this; v74 = this; v3 = (unsigned __int16 *)(a2 + 2); v4 = &v75; v5 = 16; do { *v4 = *((unsigned __int8 *)v3 - 2) | ((*((unsigned __int8 *)v3 - 1) | (*v3 << 8)) << 8); ++v4; v3 += 2; --v5; } while ( v5 ); v6 = v2[20]; v7 = v2[21]; v8 = v2[22]; v9 = v6 + __ROL4__(v75 + (v6 & v7 | v8 & ~v6) + v2[19] - 680876936, 7); v10 = v9 + __ROL4__(v76 + (v9 & v6 | v7 & ~v9) + v8 - 389564586, 12); v11 = v10 + __ROR4__(v77 + (v9 & v10 | v6 & ~v10) + v7 + 606105819, 15); v12 = v11 + __ROR4__(v78 + (v11 & v10 | v9 & ~v11) + v6 - 1044525330, 10); v13 = v12 + __ROL4__(v79 + (v12 & v11 | v10 & ~v12) + v9 - 176418897, 7); v14 = v13 + __ROL4__(v80 + (v13 & v12 | v11 & ~v13) + v10 + 1200080426, 12); v15 = v14 + __ROR4__(v81 + (v13 & v14 | v12 & ~v14) + v11 - 1473231341, 15); v16 = v15 + __ROR4__(v82 + (v15 & v14 | v13 & ~v15) + v12 - 45705983, 10); v17 = v16 + __ROL4__(v83 + (v16 & v15 | v14 & ~v16) + v13 + 1770035416, 7); v18 = v17 + __ROL4__(v84 + (v17 & v16 | v15 & ~v17) + v14 - 1958414417, 12); v19 = v18 + __ROR4__(v85 + (v17 & v18 | v16 & ~v18) + v15 - 42063, 15); v20 = v19 + __ROR4__(v86 + (v19 & v18 | v17 & ~v19) + v16 - 1990404162, 10); v21 = v20 + __ROL4__(v87 + (v20 & v19 | v18 & ~v20) + v17 + 1804603682, 7); v22 = v21 + __ROL4__(v88 + (v21 & v20 | v19 & ~v21) + v18 - 40341101, 12); v23 = v22 + __ROR4__(v89 + (v21 & v22 | v20 & ~v22) + v19 - 1502002290, 15); v24 = v23 + __ROR4__(v90 + (v23 & v22 | v21 & ~v23) + v20 + 1236535329, 10); v25 = v24 + __ROL4__(v76 + (v24 & v22 | v23 & ~v22) + v21 - 165796510, 5); v26 = v25 + __ROL4__(v81 + (v25 & v23 | v24 & ~v23) + v22 - 1069501632, 9); v27 = v26 + __ROL4__(v86 + (v24 & v26 | v25 & ~v24) + v23 + 643717713, 14); v28 = v27 + __ROR4__(v75 + (v25 & v27 | v26 & ~v25) + v24 - 373897302, 12); v29 = v28 + __ROL4__(v80 + (v28 & v26 | v27 & ~v26) + v25 - 701558691, 5); v30 = v29 + __ROL4__(v85 + (v29 & v27 | v28 & ~v27) + v26 + 38016083, 9); v31 = v30 + __ROL4__(v90 + (v28 & v30 | v29 & ~v28) + v27 - 660478335, 14); v32 = v31 + __ROR4__(v79 + (v29 & v31 | v30 & ~v29) + v28 - 405537848, 12); v33 = v32 + __ROL4__(v84 + (v32 & v30 | v31 & ~v30) + v29 + 568446438, 5); v34 = v33 + __ROL4__(v89 + (v33 & v31 | v32 & ~v31) + v30 - 1019803690, 9); v35 = v34 + __ROL4__(v78 + (v32 & v34 | v33 & ~v32) + v31 - 187363961, 14); v36 = v35 + __ROR4__(v83 + (v33 & v35 | v34 & ~v33) + v32 + 1163531501, 12); v37 = v36 + __ROL4__(v88 + (v36 & v34 | v35 & ~v34) + v33 - 1444681467, 5); v38 = v37 + __ROL4__(v77 + (v37 & v35 | v36 & ~v35) + v34 - 51403784, 9); v39 = v38 + __ROL4__(v82 + (v36 & v38 | v37 & ~v36) + v35 + 1735328473, 14); v40 = v39 + __ROR4__(v87 + (v37 & v39 | v38 & ~v37) + v36 - 1926607734, 12); v41 = v40 + __ROL4__(v80 + (v40 ^ v39 ^ v38) + v37 - 378558, 4); v42 = v41 + __ROL4__(v83 + (v41 ^ v40 ^ v39) + v38 - 2022574463, 11); v43 = v42 + __ROL4__(v86 + (v41 ^ v40 ^ v42) + v39 + 1839030562, 16); v44 = v43 + __ROR4__(v89 + (v41 ^ v43 ^ v42) + v40 - 35309556, 9); v45 = v44 + __ROL4__(v76 + (v44 ^ v43 ^ v42) + v41 - 1530992060, 4); v46 = v45 + __ROL4__(v79 + (v45 ^ v44 ^ v43) + v42 + 1272893353, 11); v47 = v46 + __ROL4__( v82 + (v45 ^ v44 ^ (v45 + __ROL4__(v79 + (v45 ^ v44 ^ v43) + v42 + 1272893353, 11))) + v43 - 155497632, 16); v48 = v47 + __ROR4__(v85 + (v45 ^ v47 ^ v46) + v44 - 1094730640, 9); v49 = v48 + __ROL4__(v88 + (v48 ^ v47 ^ v46) + v45 + 681279174, 4); v50 = v49 + __ROL4__(v75 + (v49 ^ v48 ^ v47) + v46 - 358537222, 11); v51 = v50 + __ROL4__( v78 + (v49 ^ v48 ^ (v49 + __ROL4__(v75 + (v49 ^ v48 ^ v47) + v46 - 358537222, 11))) + v47 - 722521979, 16); v52 = v51 + __ROR4__(v81 + (v49 ^ v51 ^ v50) + v48 + 76029189, 9); v53 = v52 + __ROL4__(v84 + (v52 ^ v51 ^ v50) + v49 - 640364487, 4); v54 = v53 + __ROL4__(v87 + (v53 ^ v52 ^ v51) + v50 - 421815835, 11); v55 = v54 + __ROL4__( v90 + (v53 ^ v52 ^ (v53 + __ROL4__(v87 + (v53 ^ v52 ^ v51) + v50 - 421815835, 11))) + v51 + 530742520, 16); v56 = v55 + __ROR4__(v77 + (v53 ^ v55 ^ v54) + v52 - 995338651, 9); v57 = v56 + __ROL4__(v75 + (v55 ^ (v56 | ~v54)) + v53 - 198630844, 6); v58 = v57 + __ROL4__(v82 + (v56 ^ (v57 | ~v55)) + v54 + 1126891415, 10); v59 = v58 + __ROL4__(v89 + (v57 ^ (v58 | ~v56)) + v55 - 1416354905, 15); v60 = v59 + __ROR4__(v80 + (v58 ^ (v59 | ~v57)) + v56 - 57434055, 11); v61 = v60 + __ROL4__(v87 + (v59 ^ (v60 | ~v58)) + v57 + 1700485571, 6); v62 = v61 + __ROL4__(v78 + (v60 ^ (v61 | ~v59)) + v58 - 1894986606, 10); v63 = v62 + __ROL4__(v85 + (v61 ^ (v62 | ~v60)) + v59 - 1051523, 15); v64 = v63 + __ROR4__(v76 + (v62 ^ (v63 | ~v61)) + v60 - 2054922799, 11); v65 = v64 + __ROL4__(v83 + (v63 ^ (v64 | ~v62)) + v61 + 1873313359, 6); v66 = v65 + __ROL4__(v90 + (v64 ^ (v65 | ~v63)) + v62 - 30611744, 10); v67 = v66 + __ROL4__(v81 + (v65 ^ (v66 | ~v64)) + v63 - 1560198380, 15); v68 = v67 + __ROR4__(v88 + (v66 ^ (v67 | ~v65)) + v64 + 1309151649, 11); v69 = v68 + __ROL4__(v79 + (v67 ^ (v68 | ~v66)) + v65 - 145523070, 6); v70 = v69 + __ROL4__(v86 + (v68 ^ (v69 | ~v67)) + v66 - 1120210379, 10); v71 = v74; v72 = v70 + __ROL4__(v77 + (v69 ^ (v70 | ~v68)) + v67 + 718787259, 15); v74[19] += v69; v71[20] += v72 + __ROR4__(v84 + (v70 ^ (v72 | ~v69)) + v68 - 343485551, 11); v71[21] += v72; result = v70 + v74[22]; v74[22] = result; return result; } //----- (00747110) -------------------------------------------------------- void *__thiscall sub_747110(_DWORD *this, void *a2, int a3) { _DWORD *v3; // esi unsigned int v4; // ecx unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // ecx int v8; // eax int v9; // ebx unsigned int i; // ebx int v12; // [esp+18h] [ebp+Ch] v3 = this; v4 = this[17]; v5 = a3; v6 = v4 >> 3; v7 = v4 + 8 * a3; v8 = v6 & 0x3F; v3[17] = v7; if ( v7 < 8 * a3 ) ++v3[18]; v3[18] += (unsigned int)a3 >> 29; v9 = 64 - v8; if ( a3 < (unsigned int)(64 - v8) ) { v12 = 0; } else { memcpy((char *)v3 + v8 + 4, a2, 64 - v8); sub_746A30(v3, (int)(v3 + 1)); v12 = v9; for ( i = v9 + 63; i < v5; i += 64 ) { sub_746A30(v3, (int)a2 + i - 63); v12 += 64; } v8 = 0; } return memcpy((char *)v3 + v8 + 4, (char *)a2 + v12, v5 - v12); } //----- (007471C0) -------------------------------------------------------- _DWORD *__thiscall sub_7471C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // ecx char *v4; // eax unsigned int v5; // ecx signed int v6; // eax unsigned int v7; // ecx char *v8; // eax signed int v9; // edi unsigned __int8 v10; // al void *v12; // [esp+14h] [ebp-64h] int v13; // [esp+24h] [ebp-54h] unsigned int v14; // [esp+28h] [ebp-50h] char v15; // [esp+30h] [ebp-48h] char v16; // [esp+50h] [ebp-28h] char v17; // [esp+51h] [ebp-27h] char v18; // [esp+52h] [ebp-26h] char v19[13]; // [esp+53h] [ebp-25h] char v20; // [esp+60h] [ebp-18h] char v21; // [esp+61h] [ebp-17h] char v22; // [esp+62h] [ebp-16h] char v23; // [esp+63h] [ebp-15h] int v24; // [esp+64h] [ebp-14h] int v25; // [esp+74h] [ebp-4h] v2 = this; v24 = 0; v3 = 0; v4 = (char *)(v2 + 17); do { *(&v20 + v3) = *v4; *(&v21 + v3) = v4[1]; *(&v22 + v3) = v4[2]; *(&v23 + v3) = v4[3]; v3 += 4; v4 += 4; } while ( v3 < 8 ); v5 = (v2[17] >> 3) & 0x3F; v6 = 56; if ( v5 >= 0x38 ) v6 = 120; sub_747110(v2, asc_AB8EA8, v6 - v5); sub_747110(v2, &v20, 8); v7 = 0; v8 = (char *)v2 + 78; do { *(&v16 + v7) = *(v8 - 2); *(&v17 + v7) = *(v8 - 1); *(&v18 + v7) = *v8; v19[v7] = v8[1]; v7 += 4; v8 += 4; } while ( v7 < 0x10 ); a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; v25 = 0; v24 = 1; v9 = 0; do { v10 = *(&v16 + v9); if ( v10 ) { if ( v10 > 0xFu ) sprintf(&v15, "%x", v10); else sprintf(&v15, "0%x", v10); } else { sprintf(&v15, "00"); } v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4018E0(&v12, &v15, strlen(&v15)); v25 = 1; sub_401C20(a2, (int)&v12, 0, 0xFFFFFFFF); LOBYTE(v25) = 0; if ( v14 >= 0x10 ) operator delete(v12); ++v9; } while ( v9 < 16 ); return a2; } // 7471C0: using guessed type char var_25[13]; //----- (00747370) -------------------------------------------------------- int __cdecl sub_747370(int a1, void *a2, int a3) { void **v4; // [esp+14h] [ebp-6Ch] char v5; // [esp+18h] [ebp-68h] int v6; // [esp+58h] [ebp-28h] int v7; // [esp+5Ch] [ebp-24h] int v8; // [esp+60h] [ebp-20h] int v9; // [esp+64h] [ebp-1Ch] int v10; // [esp+68h] [ebp-18h] int v11; // [esp+6Ch] [ebp-14h] int v12; // [esp+7Ch] [ebp-4h] v4 = &CMD5Checksum::`vftable'; memset(&v5, 0, 0x40u); v7 = 0; v6 = 0; v8 = 1732584193; v9 = -271733879; v10 = -1732584194; v11 = 271733878; v12 = 0; sub_747110(&v4, a2, a3); sub_7471C0(&v4, (_DWORD *)a1); return a1; } // A089E8: using guessed type void *CMD5Checksum::`vftable'; //----- (00747420) -------------------------------------------------------- _DWORD *__thiscall sub_747420(_DWORD *this) { _DWORD *result; // eax result = this; *this = &CDataReader::`vftable'; this[12] = 0; this[11] = 0; this[10] = 0; this[9] = 0; this[8] = 0; this[7] = 0; this[6] = 0; this[5] = 0; this[13] = 0; this[2] = 0; this[3] = 0; this[4] = 0; return result; } // A089FC: using guessed type void *CDataReader::`vftable'; //----- (00747450) -------------------------------------------------------- void __thiscall sub_747450(int this) { _DWORD *v1; // esi v1 = (_DWORD *)this; if ( *(_DWORD *)(this + 8) ) { operator delete(*(void **)(this + 52)); v1[13] = 0; v1[14] = 0; } v1[4] = 0; v1[2] = 0; } //----- (00747480) -------------------------------------------------------- void __thiscall sub_747480(int this) { int v1; // esi v1 = this; if ( *(_DWORD *)(this + 12) ) operator delete[](*(void **)(this + 60)); *(_DWORD *)(v1 + 12) = 0; } //----- (007474A0) -------------------------------------------------------- char __cdecl sub_7474A0(int a1, int a2) { char result; // al int v3; // ecx char i; // [esp+Fh] [ebp+Fh] result = a2; v3 = a2 - 1; for ( i = a2; v3 >= 0; i = result ) { *(_BYTE *)(v3 + a1) ^= result; result = i ^ ((v3 & 0xF) + 85) ^ 11 * v3 ^ 0xAA; --v3; } return result; } //----- (007474E0) -------------------------------------------------------- int __thiscall sub_7474E0(_DWORD *this, unsigned int a2) { int v2; // eax int result; // eax v2 = this[13]; if ( v2 && a2 < *(_DWORD *)(v2 + 40) ) result = *(_DWORD *)(this[15] + 4 * a2); else result = 0; return result; } //----- (00747510) -------------------------------------------------------- void __thiscall sub_747510(void **this) { void **v1; // esi v1 = this; *this = &CDataReader::`vftable'; if ( this[2] ) { operator delete(this[13]); v1[13] = 0; v1[14] = 0; } v1[2] = 0; v1[4] = 0; if ( v1[3] ) operator delete[](v1[15]); v1[3] = 0; } // A089FC: using guessed type void *CDataReader::`vftable'; //----- (00747550) -------------------------------------------------------- void *__thiscall sub_747550(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CDataReader::`vftable'; if ( *((_DWORD *)this + 2) ) { operator delete(*((void **)this + 13)); *((_DWORD *)v2 + 13) = 0; *((_DWORD *)v2 + 14) = 0; } *((_DWORD *)v2 + 2) = 0; *((_DWORD *)v2 + 4) = 0; if ( *((_DWORD *)v2 + 3) ) operator delete[](*((void **)v2 + 15)); *((_DWORD *)v2 + 3) = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A089FC: using guessed type void *CDataReader::`vftable'; //----- (007475B0) -------------------------------------------------------- int __thiscall sub_7475B0(void *this, char *a2) { int v2; // esi FILE *v3; // eax FILE *v4; // edi int v5; // eax unsigned int v6; // eax unsigned int v7; // ecx void *v8; // eax int v9; // ecx int v11; // eax int v12; // eax unsigned int v13; // edi unsigned __int16 *v14; // eax unsigned int i; // ecx unsigned int v16; // eax int v17; // edx int v18; // ecx const char *v19; // eax char *v20; // esi int v21; // [esp-20h] [ebp-68h] int v22; // [esp-1Ch] [ebp-64h] int v23; // [esp-18h] [ebp-60h] int v24; // [esp-14h] [ebp-5Ch] int v25; // [esp-10h] [ebp-58h] char *v26; // [esp-Ch] [ebp-54h] const char *v27; // [esp-8h] [ebp-50h] signed int v28; // [esp-4h] [ebp-4Ch] int v29; // [esp+0h] [ebp-48h] size_t v30; // [esp+10h] [ebp-38h] char *v31; // [esp+14h] [ebp-34h] char *v32; // [esp+18h] [ebp-30h] unsigned int v33; // [esp+2Ch] [ebp-1Ch] int *v34; // [esp+38h] [ebp-10h] int v35; // [esp+44h] [ebp-4h] v34 = &v29; v2 = (int)this; v31 = a2; v3 = fopen(a2, "rb"); v4 = v3; if ( !v3 ) return 0; v5 = _fileno(v3); v6 = _filelength(v5); v7 = *(_DWORD *)(v2 + 8); *(_DWORD *)(v2 + 4) = v6; if ( v7 < v6 ) { if ( v7 ) { operator delete(*(void **)(v2 + 52)); *(_DWORD *)(v2 + 52) = 0; *(_DWORD *)(v2 + 56) = 0; } v28 = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 8) = 0; *(_DWORD *)(v2 + 16) = 0; v8 = operator new[](v28); v9 = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 52) = v8; *(_DWORD *)(v2 + 56) = 0; *(_DWORD *)(v2 + 8) = v9; } v30 = fread(*(void **)(v2 + 52), *(_DWORD *)(v2 + 4), 1u, v4); fclose(v4); if ( v30 != 1 ) { if ( *(_DWORD *)(v2 + 8) ) { operator delete(*(void **)(v2 + 52)); *(_DWORD *)(v2 + 52) = 0; *(_DWORD *)(v2 + 56) = 0; } *(_DWORD *)(v2 + 8) = 0; *(_DWORD *)(v2 + 16) = 0; return 0; } v11 = *(_DWORD *)(v2 + 52); if ( v11 && *(_DWORD *)(v11 + 28) ) sub_7474A0(v11 + 36, *(_DWORD *)(v2 + 4) - 36); v12 = *(_DWORD *)(v2 + 52); *(_DWORD *)(v2 + 56) = v12 + 56 * *(_DWORD *)(v12 + 48) + 52; if ( v12 ) { v13 = *(_DWORD *)(v12 + 40); if ( v13 <= 0x40000000 ) goto LABEL_17; return 0; } v13 = 0; LABEL_17: if ( *(_DWORD *)(v2 + 12) < v13 ) { sub_747480(v2); v35 = 0; *(_DWORD *)(v2 + 60) = operator new[](4 * v13); v35 = -1; *(_DWORD *)(v2 + 12) = v13; } v14 = *(unsigned __int16 **)(v2 + 56); for ( i = 0; i < v13; v14 = (unsigned __int16 *)((char *)v14 + *v14) ) *(_DWORD *)(*(_DWORD *)(v2 + 60) + 4 * i++) = v14 + 1; v16 = 0; *(_DWORD *)(v2 + 16) = 0; if ( *(_DWORD *)(v2 + 8) > 0u ) { v17 = *(_DWORD *)(v2 + 52); v18 = 0; do { v18 += v16 * *(unsigned __int8 *)(v17 + v16); ++v16; *(_DWORD *)(v2 + 16) = v18; } while ( v16 < *(_DWORD *)(v2 + 8) ); } sub_747370((int)&v32, *(void **)(v2 + 52), *(_DWORD *)(v2 + 8)); v19 = v32; v35 = 2; if ( v33 < 0x10 ) v19 = (const char *)&v32; v20 = (char *)(v2 + 20); v28 = 32; v27 = v19; v26 = v20; *((_DWORD *)v20 + 7) = 0; *((_DWORD *)v20 + 6) = 0; *((_DWORD *)v20 + 5) = 0; *((_DWORD *)v20 + 4) = 0; *((_DWORD *)v20 + 3) = 0; *((_DWORD *)v20 + 2) = 0; *((_DWORD *)v20 + 1) = 0; *(_DWORD *)v20 = 0; strncpy(v26, v27, v28); qmemcpy(&v21, v20, 0x20u); if ( !sub_74CD90(&unk_BA0610, (int)v31, v31, v21, v22, v23, v24, v25, (int)v26, (int)v27, v28) ) { if ( v33 >= 0x10 ) operator delete(v32); return 0; } if ( v33 >= 0x10 ) operator delete(v32); return 1; } //----- (00747820) -------------------------------------------------------- BOOL __thiscall sub_747820(_DWORD *this, char *a2, int a3, int a4) { _DWORD *v4; // esi BOOL result; // eax _DWORD *v6; // eax v4 = this; if ( sub_7475B0(this, a2) && (v6 = (_DWORD *)v4[13], *v6 == a3) ) result = v6[11] - 2 == a4; else result = 0; return result; } //----- (00747860) -------------------------------------------------------- int __thiscall sub_747860(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 45) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (007478C0) -------------------------------------------------------- int __thiscall sub_7478C0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx int v5; // eax int v6; // ecx int v7; // edi void **v8; // ebx bool v9; // al int v10; // eax unsigned __int8 *v11; // edx unsigned int v12; // esi unsigned int v13; // edi unsigned int v14; // ecx int v15; // eax bool v16; // sf unsigned int v17; // edi unsigned int v18; // esi unsigned int v19; // edx unsigned __int8 *v20; // ecx int v21; // eax bool v22; // sf signed int v23; // eax int v24; // edx int v25; // esi int *v26; // eax int v27; // ecx int result; // eax unsigned __int8 *v29; // eax int v30; // [esp+Ch] [ebp-10h] _DWORD *v31; // [esp+10h] [ebp-Ch] char v32; // [esp+14h] [ebp-8h] int *v33; // [esp+18h] [ebp-4h] v4 = this; v5 = this[1]; v6 = *(_DWORD *)(v5 + 4); v7 = v5; v8 = (void **)((char *)a3 + 12); v9 = 1; v31 = v4; v33 = (int *)v6; v32 = 1; if ( !*(_BYTE *)(v6 + 45) ) { while ( 1 ) { v30 = v6; v10 = v6 + 12; if ( (_BYTE)a4 ) { if ( *((_DWORD *)a3 + 8) < 0x10u ) v11 = (unsigned __int8 *)a3 + 12; else v11 = (unsigned __int8 *)*v8; v13 = *((_DWORD *)a3 + 7); v14 = *(_DWORD *)(v6 + 28); v12 = v14; if ( v14 >= v13 ) v14 = *((_DWORD *)a3 + 7); if ( *(_DWORD *)(v10 + 20) >= 0x10u ) v10 = *(_DWORD *)v10; v15 = sub_40C0B0((unsigned __int8 *)v10, v11, v14); v16 = v15 < 0; if ( !v15 ) { if ( v12 < v13 ) { v9 = 0; goto LABEL_30; } v16 = (v12 != v13) < 0; } v9 = !v16; } else { v17 = *(_DWORD *)(v6 + 28); if ( *(_DWORD *)(v6 + 32) >= 0x10u ) v10 = *(_DWORD *)v10; v18 = *((_DWORD *)a3 + 7); v19 = *((_DWORD *)a3 + 7); if ( v18 >= v17 ) v19 = *(_DWORD *)(v6 + 28); if ( *((_DWORD *)a3 + 8) < 0x10u ) v20 = (unsigned __int8 *)a3 + 12; else v20 = (unsigned __int8 *)*v8; v21 = sub_40C0B0(v20, (unsigned __int8 *)v10, v19); v22 = v21 < 0; if ( !v21 ) { if ( v18 >= v17 ) v23 = v18 != v17; else v23 = -1; v22 = v23 < 0; } v9 = v22; } LABEL_30: v32 = v9; if ( v9 ) v24 = *v33; else v24 = v33[2]; v33 = (int *)v24; if ( *(_BYTE *)(v24 + 45) ) { v7 = v30; v4 = v31; break; } v6 = v24; } } v25 = v7; a4 = v7; if ( v9 ) { if ( v7 == *(_DWORD *)v4[1] ) { v26 = (int *)sub_4F1DB0(v4, (int)&a4, 1, v7, a3); LABEL_38: v27 = *v26; result = a2; *(_DWORD *)a2 = v27; *(_BYTE *)(a2 + 4) = 1; return result; } sub_49F3C0(&a4); v25 = a4; } if ( *((_DWORD *)a3 + 8) < 0x10u ) v29 = (unsigned __int8 *)a3 + 12; else v29 = (unsigned __int8 *)*v8; if ( sub_40C2F0((unsigned __int8 *)(v25 + 12), 0, *(_DWORD *)(v25 + 28), v29, *((_DWORD *)a3 + 7)) < 0 ) { v26 = (int *)sub_4F1DB0(v31, (int)&a4, v32, v7, a3); goto LABEL_38; } if ( *((_DWORD *)a3 + 8) >= 0x10u ) operator delete(*v8); *((_DWORD *)a3 + 8) = 15; *((_DWORD *)a3 + 7) = 0; *(_BYTE *)v8 = 0; operator delete(a3); result = a2; *(_DWORD *)a2 = v25; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (00747A80) -------------------------------------------------------- char *__thiscall sub_747A80(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v6; // [esp+0h] [ebp-38h] void **v7; // [esp+10h] [ebp-28h] void *v8; // [esp+1Ch] [ebp-1Ch] char *v9; // [esp+20h] [ebp-18h] void *v10; // [esp+24h] [ebp-14h] int *v11; // [esp+28h] [ebp-10h] int v12; // [esp+34h] [ebp-4h] v11 = &v6; v2 = this; v3 = (char *)operator new(0x30u); v10 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a2); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v12 = 0; v9 = v3 + 12; v8 = v3 + 12; LOBYTE(v12) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_4017F0((const void **)v3 + 3, (const void **)v4, 0, (void *)0xFFFFFFFF); *((_WORD *)v3 + 20) = *((_WORD *)v4 + 14); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00747B60) -------------------------------------------------------- int __thiscall sub_747B60(_DWORD *this, int a2, int a3, void *a4) { void *v4; // ebx _DWORD *v5; // esi _DWORD *v6; // eax char *v7; // edi int result; // eax unsigned __int8 *v9; // eax void *v10; // eax int v11; // ecx int v12; // [esp+Ch] [ebp-8h] v4 = a4; v5 = this; v6 = (_DWORD *)this[1]; v7 = (char *)a4 + 12; if ( !this[2] ) { sub_4F1DB0(this, a2, 1, (int)v6, a4); return a2; } if ( a3 == *v6 ) { v9 = (unsigned __int8 *)(a3 + 12); if ( *(_DWORD *)(a3 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; if ( sub_40C2F0((unsigned __int8 *)a4 + 12, 0, *((_DWORD *)a4 + 7), v9, *(_DWORD *)(a3 + 28)) < 0 ) { sub_4F1DB0(v5, a2, 1, a3, v4); return a2; } goto LABEL_25; } if ( (_DWORD *)a3 == v6 ) { if ( sub_40C4B0(v6[2] + 12, (int)a4 + 12) ) { sub_4F1DB0(v5, a2, 0, *(_DWORD *)(v5[1] + 8), v4); return a2; } goto LABEL_25; } if ( sub_40C4B0((int)a4 + 12, a3 + 12) ) { a4 = (void *)a3; sub_49F3C0(&a4); if ( sub_40C4B0((int)a4 + 12, (int)v7) ) { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 45) ) sub_4F1DB0(v5, a2, 0, (int)a4, v4); else sub_4F1DB0(v5, a2, 1, a3, v4); return a2; } } if ( !sub_40C4B0(a3 + 12, (int)v7) ) goto LABEL_25; a4 = (void *)a3; sub_66FB80(&a4); v10 = a4; if ( a4 != (void *)v5[1] ) { if ( sub_40C4B0((int)v7, (int)a4 + 12) ) { v10 = a4; goto LABEL_21; } LABEL_25: v11 = *(_DWORD *)sub_7478C0(v5, (int)&v12, v4, 0); result = a2; *(_DWORD *)a2 = v11; return result; } LABEL_21: if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 45) ) sub_4F1DB0(v5, a2, 0, a3, v4); else sub_4F1DB0(v5, a2, 1, (int)v10, v4); return a2; } //----- (00747D20) -------------------------------------------------------- int __thiscall sub_747D20(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ebx unsigned __int8 *v5; // eax char *v6; // eax int v7; // esi int v9; // [esp+10h] [ebp-34h] void *v10; // [esp+14h] [ebp-30h] int v11; // [esp+24h] [ebp-20h] unsigned int v12; // [esp+28h] [ebp-1Ch] __int16 v13; // [esp+30h] [ebp-14h] int v14; // [esp+40h] [ebp-4h] v2 = this; v3 = sub_4F1D20(this, a2); v4 = (int)v3; if ( v3 != (int *)v2[1] ) { v5 = (unsigned __int8 *)(v3 + 3); if ( *(_DWORD *)(v4 + 32) >= 0x10u ) v5 = *(unsigned __int8 **)v5; if ( sub_40C2F0((unsigned __int8 *)a2, 0, *(_DWORD *)(a2 + 16), v5, *(_DWORD *)(v4 + 28)) >= 0 ) return v4 + 40; } v12 = 15; v11 = 0; LOBYTE(v10) = 0; sub_4017F0((const void **)&v10, (const void **)a2, 0, (void *)0xFFFFFFFF); v13 = 0; v14 = 0; v6 = sub_747A80(v2, (char *)&v10); sub_747B60(v2, (int)&v9, v4, v6); v7 = v9; if ( v12 >= 0x10 ) operator delete(v10); return v7 + 40; } //----- (00747E00) -------------------------------------------------------- int __thiscall sub_747E00(_DWORD *this, char *a2, int a3, int a4) { unsigned int v5; // edi _WORD *v6; // eax _WORD *v7; // esi __int16 v8; // si void *v9; // [esp+10h] [ebp-74h] int v10; // [esp+20h] [ebp-64h] unsigned int v11; // [esp+24h] [ebp-60h] _DWORD *v12; // [esp+2Ch] [ebp-58h] unsigned int v13; // [esp+30h] [ebp-54h] void *v14[13]; // [esp+34h] [ebp-50h] int v15; // [esp+68h] [ebp-1Ch] int v16; // [esp+80h] [ebp-4h] v12 = this; sub_747420(v14); v16 = 0; if ( !sub_747820(v14, a2, a3, a4) ) { LABEL_2: v16 = -1; sub_747510(v14); return 0; } if ( v15 ) v13 = *(_DWORD *)(v15 + 40); else v13 = 0; v5 = 0; if ( v13 > 0 ) { do { v6 = (_WORD *)sub_7474E0(v14, v5); v7 = v6; if ( !v6 ) goto LABEL_2; v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, v6, strlen((const char *)v6)); v8 = v7[16]; LOBYTE(v16) = 1; *(_WORD *)sub_747D20(v12, (int)&v9) = v8; LOBYTE(v16) = 0; if ( v11 >= 0x10 ) operator delete(v9); ++v5; v11 = 15; v10 = 0; LOBYTE(v9) = 0; } while ( v5 < v13 ); } v16 = -1; sub_747510(v14); return 1; } //----- (00747F30) -------------------------------------------------------- __int16 __thiscall sub_747F30(_DWORD *this, void *a2, int a3, int a4, int a5, int a6, int a7, int a8) { __int16 v8; // si v8 = *(_WORD *)sub_747D20(this, (int)&a2); if ( (unsigned int)a7 >= 0x10 ) operator delete(a2); return v8; } //----- (00747F90) -------------------------------------------------------- int __thiscall sub_747F90(_DWORD *this) { return (this[2] - this[1]) / 152; } //----- (00747FB0) -------------------------------------------------------- int __thiscall sub_747FB0(_DWORD *this, int a2, _DWORD *a3) { int result; // eax int v4; // edx int v5; // ecx result = a2; v4 = this[1] + 152 * *a3; *(_DWORD *)a2 = *(_DWORD *)v4; *(_DWORD *)(a2 + 4) = *(_DWORD *)(v4 + 4); v5 = *(_DWORD *)(v4 + 8); LOBYTE(v4) = *(_BYTE *)(v4 + 12); *(_DWORD *)(a2 + 8) = v5; *(_BYTE *)(a2 + 12) = v4; return result; } //----- (00747FE0) -------------------------------------------------------- int __thiscall sub_747FE0(_DWORD *this, int a2) { return this[1] + 152 * a2; } //----- (00748000) -------------------------------------------------------- void *__stdcall sub_748000(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x1AF286B || (result = operator new(152 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (00748060) -------------------------------------------------------- _DWORD *__cdecl sub_748060(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 2 ) { *result = *v3; result[1] = v3[1]; v3 += 2; } return result; } //----- (00748090) -------------------------------------------------------- char __thiscall sub_748090(_DWORD *this, int *a2) { int v2; // eax int v3; // edi signed int v4; // ebx int v5; // esi int v6; // ebx int v7; // ecx int v8; // esi int v10; // [esp+0h] [ebp-14h] int v11; // [esp+4h] [ebp-10h] int v12; // [esp+8h] [ebp-Ch] _DWORD *v13; // [esp+Ch] [ebp-8h] int i; // [esp+10h] [ebp-4h] v2 = this[1]; v13 = this; for ( i = v2; v2 != v13[2]; i = v2 ) { v3 = *a2; v4 = 0; if ( (signed int)*(unsigned __int16 *)(*a2 + 2) > 0 ) { v5 = v3 + 13; while ( *(_DWORD *)v2 != *(_DWORD *)(v5 - 8) || *(_DWORD *)(v2 + 4) != *(_DWORD *)(v5 - 4) || *(_DWORD *)(v2 + 8) != *(_DWORD *)v5 || *(_BYTE *)(v2 + 12) != *(_BYTE *)(v5 + 4) ) { ++v4; v5 += 52; if ( v4 >= *(unsigned __int16 *)(v3 + 2) ) goto LABEL_11; } v6 = 52 * v4; qmemcpy((void *)(v2 + 120), (const void *)(v6 + v3 + 20), 0x20u); *(_DWORD *)(v2 + 116) = *(unsigned __int16 *)(v6 + *a2 + 18); v7 = *(_DWORD *)(v6 + *a2 + 52); v10 = v7 % 60; v8 = i; v11 = v7 / 60 % 60; v12 = v7 / 3600; sub_7491D0((__time32_t *)(i + 36), (int)&v10); *(_BYTE *)(v8 + 112) = *(_BYTE *)(v6 + *a2 + 4); v2 = v8; } LABEL_11: v2 += 152; } return 1; } //----- (007481A0) -------------------------------------------------------- _DWORD *__cdecl sub_7481A0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 2 ) { if ( result ) { *result = *v3; result[1] = v3[1]; } v3 += 2; } return result; } //----- (007481D0) -------------------------------------------------------- _DWORD *__stdcall sub_7481D0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { return sub_7481A0(a1, a2, a3); } //----- (00748200) -------------------------------------------------------- char __thiscall sub_748200(_DWORD *this, _DWORD *a2, int a3) { int v3; // eax int v4; // edx _DWORD *v5; // ecx int v6; // eax _DWORD *v7; // esi _DWORD *v9; // eax _DWORD *v10; // ecx int v11; // [esp+Ch] [ebp-8h] v3 = this[2]; v4 = this[1]; v11 = v3; if ( v4 == v3 ) return 0; v5 = a2; while ( 1 ) { if ( *(_DWORD *)v4 != *a2 || *(_DWORD *)(v4 + 4) != v5[1] || *(_DWORD *)(v4 + 8) != v5[2] ) goto LABEL_13; if ( *(_BYTE *)(v4 + 12) == *((_BYTE *)v5 + 12) ) { v6 = *(_DWORD *)(v4 + 56); v7 = *(_DWORD **)(v4 + 60); if ( (_DWORD *)v6 != v7 ) break; } LABEL_12: v3 = v11; LABEL_13: v4 += 152; if ( v4 == v3 ) return 0; } while ( 1 ) { if ( *(_DWORD *)v6 != *(_DWORD *)a3 ) goto LABEL_11; if ( *(_BYTE *)(v6 + 4) == *(_BYTE *)(a3 + 4) ) break; v5 = a2; LABEL_11: v6 += 8; if ( (_DWORD *)v6 == v7 ) goto LABEL_12; } v9 = (_DWORD *)(v6 + 8); if ( v9 != v7 ) { v10 = v9 - 2; do { *v10 = *v9; v10[1] = v9[1]; v9 += 2; v10 += 2; } while ( v9 != v7 ); } *(_DWORD *)(v4 + 60) -= 8; --*(_BYTE *)(*(unsigned __int8 *)(a3 + 4) + v4 + 120); return 1; } //----- (007482C0) -------------------------------------------------------- char __thiscall sub_7482C0(_DWORD *this, int a2) { int v2; // edx int v3; // ecx int v4; // eax _DWORD *v5; // esi _DWORD *v7; // eax _DWORD *v8; // ecx int v9; // [esp+Ch] [ebp-4h] v2 = this[1]; v3 = this[2]; v9 = v3; if ( v2 == v3 ) return 0; while ( 1 ) { v4 = *(_DWORD *)(v2 + 56); v5 = *(_DWORD **)(v2 + 60); if ( (_DWORD *)v4 != v5 ) break; LABEL_7: v2 += 152; if ( v2 == v3 ) return 0; } while ( *(_DWORD *)v4 != *(_DWORD *)a2 || *(_BYTE *)(v4 + 4) != *(_BYTE *)(a2 + 4) ) { v4 += 8; if ( (_DWORD *)v4 == v5 ) { v3 = v9; goto LABEL_7; } } v7 = (_DWORD *)(v4 + 8); if ( v7 != v5 ) { v8 = v7 - 2; do { *v8 = *v7; v8[1] = v7[1]; v7 += 2; v8 += 2; } while ( v7 != v5 ); } *(_DWORD *)(v2 + 60) -= 8; --*(_BYTE *)(*(unsigned __int8 *)(a2 + 4) + v2 + 120); return 1; } //----- (00748350) -------------------------------------------------------- char __thiscall sub_748350(_DWORD *this, int a2, int a3) { int v3; // edx int v4; // ecx int v5; // eax _DWORD *v6; // esi _DWORD *v8; // eax _DWORD *v9; // ecx int v10; // [esp+Ch] [ebp-4h] v3 = this[1]; v4 = this[2]; v10 = v4; if ( v3 == v4 ) return 0; while ( 1 ) { v5 = *(_DWORD *)(v3 + 56); v6 = *(_DWORD **)(v3 + 60); if ( (_DWORD *)v5 != v6 ) break; LABEL_7: v3 += 152; if ( v3 == v4 ) return 0; } while ( *(_DWORD *)v5 != *(_DWORD *)a2 || *(_BYTE *)(v5 + 4) != *(_BYTE *)(a2 + 4) ) { v5 += 8; if ( (_DWORD *)v5 == v6 ) { v4 = v10; goto LABEL_7; } } v8 = (_DWORD *)(v5 + 8); if ( v8 != v6 ) { v9 = v8 - 2; do { *v9 = *v8; v9[1] = v8[1]; v8 += 2; v9 += 2; } while ( v8 != v6 ); } *(_DWORD *)(v3 + 60) -= 8; --*(_BYTE *)(*(unsigned __int8 *)(a2 + 4) + v3 + 120); *(_DWORD *)a3 = *(_DWORD *)v3; *(_DWORD *)(a3 + 4) = *(_DWORD *)(v3 + 4); *(_DWORD *)(a3 + 8) = *(_DWORD *)(v3 + 8); *(_BYTE *)(a3 + 12) = *(_BYTE *)(v3 + 12); return 1; } //----- (007483F0) -------------------------------------------------------- void __thiscall sub_7483F0(int *this) { int v1; // edx v1 = *this; if ( *this != this[1] ) this[1] = v1; } // 7483F0: could not find valid save-restore pair for edi //----- (00748420) -------------------------------------------------------- _DWORD *__thiscall sub_748420(_DWORD *this) { _DWORD *result; // eax int v2; // esi for ( result = (_DWORD *)this[1]; result != (_DWORD *)this[2]; result += 38 ) { v2 = result[14]; if ( v2 != result[15] ) result[15] = v2; result[30] = 0; result[31] = 0; result[32] = 0; result[33] = 0; result[34] = 0; result[35] = 0; result[36] = 0; result[37] = 0; } return result; } //----- (007484A0) -------------------------------------------------------- int *__thiscall sub_7484A0(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // ecx int *result; // eax int v6; // [esp+10h] [ebp-10h] v2 = (this[2] - this[1]) / 152; v3 = 0; if ( v2 <= 0 ) { LABEL_8: if ( !(dword_BA0608 & 1) ) { dword_BA0608 |= 1u; dword_BA0578 = 0; dword_BA0574 = 0; dword_BA0570 = 0; dword_BA0580 = 0; dword_BA0584 = 0; dword_BA0588 = 0; dword_BA058C = 0; sub_749180(&unk_BA0594); dword_BA05A8 = 0; dword_BA05AC = 0; dword_BA05B0 = 0; sub_749180(&unk_BA05B8); sub_749180(&unk_BA05CC); atexit(sub_9A4570); } result = &dword_BA0570; } else { v4 = this[1]; v6 = v4; while ( *(_BYTE *)(a2 + 12) != *(_BYTE *)(v4 + 12) || *(_DWORD *)a2 != *(_DWORD *)v4 || *(_DWORD *)(a2 + 4) != *(_DWORD *)(v4 + 4) || *(_DWORD *)(a2 + 8) != *(_DWORD *)(v4 + 8) ) { ++v3; v4 += 152; if ( v3 >= v2 ) goto LABEL_8; } result = (int *)(v6 + 152 * v3); } return result; } // BA0570: using guessed type int dword_BA0570; // BA0574: using guessed type int dword_BA0574; // BA0578: using guessed type int dword_BA0578; // BA0580: using guessed type int dword_BA0580; // BA0584: using guessed type int dword_BA0584; // BA0588: using guessed type int dword_BA0588; // BA058C: using guessed type int dword_BA058C; // BA05AC: using guessed type int dword_BA05AC; // BA05B0: using guessed type int dword_BA05B0; // BA0608: using guessed type int dword_BA0608; //----- (007485E0) -------------------------------------------------------- char __thiscall sub_7485E0(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // ebx _DWORD *v4; // esi int v5; // edi char result; // al int v7; // eax _DWORD *v8; // ecx v3 = a3; v4 = this; v5 = *a3; if ( *a3 == (this[2] - this[1]) / 152 ) return 0; v7 = this[1] + 152 * v5; if ( *(_DWORD *)v7 != *(_DWORD *)a2 || *(_DWORD *)(v7 + 4) != *(_DWORD *)(a2 + 4) || *(_DWORD *)(v7 + 8) != *(_DWORD *)(a2 + 8) || *(_BYTE *)(v7 + 12) != *(_BYTE *)(a2 + 12) ) { a3 = (_DWORD *)(v5 + 1); result = sub_7485E0(a2, &a3); } else { sub_7483F0((int *)(v7 + 56)); result = 1; v8 = (_DWORD *)(152 * *v3 + v4[1] + 120); *v8 = 0; v8[1] = 0; v8[2] = 0; v8[3] = 0; v8[4] = 0; v8[5] = 0; v8[6] = 0; v8[7] = 0; } return result; } //----- (00748690) -------------------------------------------------------- _DWORD *__thiscall sub_748690(_DWORD *this, int a2) { char **v2; // edi _DWORD *v3; // esi char *v4; // ecx unsigned int v5; // eax _DWORD *v6; // ecx _DWORD *v10; // edx char *v11; // ebx unsigned int v12; // [esp+10h] [ebp+8h] v2 = (char **)a2; v3 = this; if ( this != (_DWORD *)a2 ) { v4 = *(char **)a2; v5 = (*(_DWORD *)(a2 + 4) - *(_DWORD *)a2) >> 3; if ( v5 ) { v10 = (_DWORD *)*v3; v12 = (v3[1] - *v3) >> 3; if ( v5 <= v12 ) { sub_748060(v4, v2[1], v10); v3[1] = *v3 + 8 * ((v2[1] - *v2) >> 3); return v3; } if ( v5 <= (v3[2] - (signed int)v10) >> 3 ) { v11 = &v4[8 * v12]; sub_748060(v4, &v4[8 * v12], v10); v3[1] = sub_7481A0(v11, v2[1], (_DWORD *)v3[1]); return v3; } if ( v10 ) operator delete(v10); if ( sub_431710(v3, (char *)((v2[1] - *v2) >> 3)) ) v3[1] = sub_7481D0(*v2, v2[1], (_DWORD *)*v3); } else { v6 = (_DWORD *)*v3; if ( *v3 != v3[1] ) { v3[1] = v6; return v3; } } } return v3; } //----- (007487A0) -------------------------------------------------------- _DWORD *__thiscall sub_7487A0(_DWORD *this, int a2) { _DWORD *v2; // esi _BYTE *v3; // eax signed int v4; // ecx v2 = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); *((_BYTE *)this + 12) = *(_BYTE *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); this[6] = *(_DWORD *)(a2 + 24); this[7] = *(_DWORD *)(a2 + 28); *((_WORD *)this + 16) = *(_WORD *)(a2 + 32); this[9] = *(_DWORD *)(a2 + 36); this[10] = *(_DWORD *)(a2 + 40); this[11] = *(_DWORD *)(a2 + 44); this[12] = *(_DWORD *)(a2 + 48); this[13] = *(_DWORD *)(a2 + 52); sub_748690(this + 14, a2 + 56); v2[18] = *(_DWORD *)(a2 + 72); v2[19] = *(_DWORD *)(a2 + 76); v2[20] = *(_DWORD *)(a2 + 80); v2[21] = *(_DWORD *)(a2 + 84); v2[22] = *(_DWORD *)(a2 + 88); v2[23] = *(_DWORD *)(a2 + 92); v2[24] = *(_DWORD *)(a2 + 96); v2[25] = *(_DWORD *)(a2 + 100); v2[26] = *(_DWORD *)(a2 + 104); v2[27] = *(_DWORD *)(a2 + 108); *((_BYTE *)v2 + 112) = *(_BYTE *)(a2 + 112); v2[29] = *(_DWORD *)(a2 + 116); v3 = v2 + 30; v4 = 32; do { *v3 = v3[a2 - (_DWORD)v2]; ++v3; --v4; } while ( v4 ); return v2; } //----- (00748880) -------------------------------------------------------- char __thiscall sub_748880(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // ecx v3 = this[1]; v4 = this[2]; if ( v3 == v4 ) return 0; while ( *(_DWORD *)v3 != *(_DWORD *)a2 || *(_DWORD *)(v3 + 4) != *(_DWORD *)(a2 + 4) || *(_DWORD *)(v3 + 8) != *(_DWORD *)(a2 + 8) || *(_BYTE *)(v3 + 12) != *(_BYTE *)(a2 + 12) ) { v3 += 152; if ( v3 == v4 ) return 0; } sub_8D70F0((int *)(v3 + 56), (char *)a3); ++*(_BYTE *)(*(unsigned __int8 *)(a3 + 4) + v3 + 120); return 1; } //----- (007488F0) -------------------------------------------------------- char __thiscall sub_7488F0(_DWORD *this, int a2) { int v3; // [esp+0h] [ebp-4h] v3 = 0; return sub_7485E0(this, a2, &v3); } //----- (00748910) -------------------------------------------------------- int __cdecl sub_748910(int a1, int a2, int a3) { int v3; // esi int v4; // edi _BYTE *v5; // eax signed int v6; // ecx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 8; do { *(_DWORD *)v3 = *(_DWORD *)(v4 - 8); *(_DWORD *)(v3 + 4) = *(_DWORD *)(v4 - 4); *(_DWORD *)(v3 + 8) = *(_DWORD *)v4; *(_BYTE *)(v3 + 12) = *(_BYTE *)(v4 + 4); *(_DWORD *)(v3 + 16) = *(_DWORD *)(v4 + 8); *(_DWORD *)(v3 + 20) = *(_DWORD *)(v4 + 12); *(_DWORD *)(v3 + 24) = *(_DWORD *)(v4 + 16); *(_DWORD *)(v3 + 28) = *(_DWORD *)(v4 + 20); *(_WORD *)(v3 + 32) = *(_WORD *)(v4 + 24); *(_DWORD *)(v3 + 36) = *(_DWORD *)(v4 + 28); *(_DWORD *)(v3 + 40) = *(_DWORD *)(v4 + 32); *(_DWORD *)(v3 + 44) = *(_DWORD *)(v4 + 36); *(_DWORD *)(v3 + 48) = *(_DWORD *)(v4 + 40); *(_DWORD *)(v3 + 52) = *(_DWORD *)(v4 + 44); sub_748690((_DWORD *)(v3 + 56), v4 + 48); *(_DWORD *)(v3 + 72) = *(_DWORD *)(v4 + 64); *(_DWORD *)(v3 + 76) = *(_DWORD *)(v4 + 68); *(_DWORD *)(v3 + 80) = *(_DWORD *)(v4 + 72); *(_DWORD *)(v3 + 84) = *(_DWORD *)(v4 + 76); *(_DWORD *)(v3 + 88) = *(_DWORD *)(v4 + 80); *(_DWORD *)(v3 + 92) = *(_DWORD *)(v4 + 84); *(_DWORD *)(v3 + 96) = *(_DWORD *)(v4 + 88); *(_DWORD *)(v3 + 100) = *(_DWORD *)(v4 + 92); *(_DWORD *)(v3 + 104) = *(_DWORD *)(v4 + 96); *(_DWORD *)(v3 + 108) = *(_DWORD *)(v4 + 100); *(_BYTE *)(v3 + 112) = *(_BYTE *)(v4 + 104); *(_DWORD *)(v3 + 116) = *(_DWORD *)(v4 + 108); v5 = (_BYTE *)(v3 + 120); v6 = 32; do { *v5 = v5[v4 - 8 - v3]; ++v5; --v6; } while ( v6 ); v4 += 152; v3 += 152; } while ( v4 - 8 != a2 ); return v3; } //----- (00748A10) -------------------------------------------------------- void __cdecl sub_748A10(int a1, int a2) { nullsub_6((void *)(a2 + 92)); nullsub_6((void *)(a2 + 72)); if ( *(_DWORD *)(a2 + 56) ) operator delete(*(void **)(a2 + 56)); *(_DWORD *)(a2 + 56) = 0; *(_DWORD *)(a2 + 60) = 0; *(_DWORD *)(a2 + 64) = 0; nullsub_6((void *)(a2 + 36)); } //----- (00748AA0) -------------------------------------------------------- void __cdecl sub_748AA0(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 152 ) { nullsub_6((void *)(i + 92)); nullsub_6((void *)(i + 72)); if ( *(_DWORD *)(i + 56) ) operator delete(*(void **)(i + 56)); *(_DWORD *)(i + 56) = 0; *(_DWORD *)(i + 60) = 0; *(_DWORD *)(i + 64) = 0; nullsub_6((void *)(i + 36)); } } //----- (00748B40) -------------------------------------------------------- _DWORD *__cdecl sub_748B40(char *a1, char *a2, int a3) { _DWORD *v3; // esi char *v4; // edi int v9; // [esp+0h] [ebp-24h] int v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v3 = (_DWORD *)a3; v4 = a1; v10 = a3; v12 = 0; while ( v4 != a2 ) { LOBYTE(v12) = 1; if ( v3 ) sub_431AE0(v3, (int)v4); v3 += 38; LOBYTE(v12) = 0; v4 += 152; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00748C00) -------------------------------------------------------- void __thiscall sub_748C00(int *this) { int *v1; // esi v1 = this; if ( *this ) { sub_748AA0(*this, this[1]); operator delete((void *)*v1); } *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (00748C50) -------------------------------------------------------- unsigned int __thiscall sub_748C50(char **this, char *a2) { char **v2; // esi unsigned int result; // eax void *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 int v7; // ebx unsigned int v8; // edx int v9; // edi char *v10; // ecx char *v11; // edi int v12; // [esp+0h] [ebp-24h] void *v13; // [esp+10h] [ebp-14h] int *v14; // [esp+14h] [ebp-10h] int v15; // [esp+20h] [ebp-4h] v14 = &v12; v2 = this; if ( (unsigned int)a2 > 0x1AF286B ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 152; if ( result < (unsigned int)a2 ) { v4 = sub_748000(a2); v5 = v2[1]; v6 = *v2; v13 = v4; v15 = 0; sub_748B40(v6, v5, (int)v4); v7 = (int)*v2; v8 = (signed int)((unsigned __int64)(1808407283i64 * (v2[1] - *v2)) >> 32) >> 6; v9 = v8 + (v8 >> 31); v15 = -1; if ( v7 ) { sub_748AA0(v7, (int)v2[1]); operator delete(*v2); } v10 = (char *)v13; result = (unsigned int)v13 + 152 * (_DWORD)a2; v11 = (char *)v13 + 152 * v9; v2[2] = (char *)result; v2[1] = v11; *v2 = v10; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (00748D70) -------------------------------------------------------- unsigned int __thiscall sub_748D70(int this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) / 152; if ( 28256363 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (*(_DWORD *)(this + 8) - *(_DWORD *)this) / 152; if ( v3 > result ) { if ( 28256363 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_748C50((char **)this, v5); } return result; } //----- (00748DF0) -------------------------------------------------------- _DWORD *__thiscall sub_748DF0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &InstancePartyFinder::`vftable'; this[1] = 0; this[2] = 0; this[3] = 0; return result; } // A08A0C: using guessed type void *InstancePartyFinder::`vftable'; //----- (00748E10) -------------------------------------------------------- void __thiscall sub_748E10(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx int v4; // esi unsigned int v5; // edx int v6; // esi _DWORD *v7; // ecx v2 = this; v3 = this[1]; v4 = a2; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_748D70((int)v2, 1); v7 = (_DWORD *)v2[1]; } else { v5 = (signed int)((unsigned __int64)(1808407283i64 * (signed int)(a2 - *v2)) >> 32) >> 6; v6 = v5 + (v5 >> 31); if ( v3 == v2[2] ) sub_748D70((int)v2, 1); v7 = (_DWORD *)v2[1]; v4 = *v2 + 152 * v6; } if ( v7 ) sub_431AE0(v7, v4); v2[1] += 152; } //----- (00748ED0) -------------------------------------------------------- void __thiscall sub_748ED0(int *this) { int *v1; // esi int v2; // eax int v3; // ecx int v4; // edi int v5; // eax v1 = this; *this = (int)&InstancePartyFinder::`vftable'; v2 = this[2]; v3 = this[1]; if ( v3 != v2 ) { v4 = sub_748910(v2, v2, v3); sub_748AA0(v4, v1[2]); v1[2] = v4; } v5 = v1[1]; if ( v5 ) { sub_748AA0(v5, v1[2]); operator delete((void *)v1[1]); } v1[1] = 0; v1[2] = 0; v1[3] = 0; } // A08A0C: using guessed type void *InstancePartyFinder::`vftable'; //----- (00748F80) -------------------------------------------------------- char __thiscall sub_748F80(_DWORD *this, _DWORD *a2, char **a3) { int v3; // esi int v4; // ecx int v5; // eax int v6; // edi signed int v7; // ebx __time32_t *v8; // eax __time32_t Time; // [esp+10h] [ebp-D4h] int v11; // [esp+24h] [ebp-C0h] int v12; // [esp+28h] [ebp-BCh] int v13; // [esp+2Ch] [ebp-B8h] char **v14; // [esp+30h] [ebp-B4h] int v15; // [esp+34h] [ebp-B0h] _DWORD *v16; // [esp+38h] [ebp-ACh] int v17; // [esp+3Ch] [ebp-A8h] int v18; // [esp+40h] [ebp-A4h] int v19; // [esp+44h] [ebp-A0h] int v20; // [esp+4Ch] [ebp-98h] int v21; // [esp+50h] [ebp-94h] int v22; // [esp+54h] [ebp-90h] int v23; // [esp+58h] [ebp-8Ch] __time32_t v24; // [esp+60h] [ebp-84h] __time32_t v25; // [esp+64h] [ebp-80h] __time32_t v26; // [esp+68h] [ebp-7Ch] __time32_t v27; // [esp+6Ch] [ebp-78h] __time32_t v28; // [esp+70h] [ebp-74h] void *v29; // [esp+74h] [ebp-70h] int v30; // [esp+78h] [ebp-6Ch] int v31; // [esp+7Ch] [ebp-68h] char v32; // [esp+84h] [ebp-60h] char v33; // [esp+98h] [ebp-4Ch] int v34; // [esp+E0h] [ebp-4h] v3 = (int)(this + 1); v4 = this[1]; v16 = a2; v5 = *(_DWORD *)(v3 + 4); v14 = a3; if ( v4 != v5 ) { v6 = sub_748910(v5, v5, v4); sub_748AA0(v6, *(_DWORD *)(v3 + 4)); *(_DWORD *)(v3 + 4) = v6; } sub_748C50((char **)v3, *a3); v19 = 0; v18 = 0; v17 = 0; v20 = 0; v21 = 0; v22 = 0; v23 = 0; sub_749180(&v24); v34 = 0; v29 = 0; v30 = 0; v31 = 0; LOBYTE(v34) = 1; sub_749180(&v32); LOBYTE(v34) = 2; sub_749180(&v33); v7 = 0; v34 = 3; if ( (signed int)*v14 > 0 ) { v15 = 0; do { sub_7487A0(&v17, v15 + *v16); v11 = 0; v12 = 20; v13 = 0; v8 = sub_749220(&Time, (int)&v11); v24 = *v8; v25 = v8[1]; v26 = v8[2]; v27 = v8[3]; v28 = v8[4]; nullsub_6(&Time); sub_748E10((unsigned int *)v3, (unsigned int)&v17); v15 += 152; ++v7; } while ( v7 < (signed int)*v14 ); } v34 = 6; nullsub_6(&v33); LOBYTE(v34) = 5; nullsub_6(&v32); if ( v29 ) operator delete(v29); v29 = 0; v30 = 0; v31 = 0; v34 = -1; nullsub_6(&v24); return 1; } //----- (00749180) -------------------------------------------------------- _DWORD *__thiscall sub_749180(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; return result; } //----- (007491A0) -------------------------------------------------------- int __thiscall sub_7491A0(__time32_t *Time) { __time32_t *v1; // esi int result; // eax v1 = Time; _time32(Time); result = *v1 + v1[2] + 60 * (v1[3] + 60 * v1[4]); v1[1] = result; return result; } //----- (007491D0) -------------------------------------------------------- int __thiscall sub_7491D0(__time32_t *Time, int a2) { __time32_t *v2; // esi int result; // eax v2 = Time; Time[2] = *(_DWORD *)a2; Time[3] = *(_DWORD *)(a2 + 4); Time[4] = *(_DWORD *)(a2 + 8); _time32(Time); result = *v2 + v2[2] + 60 * (v2[3] + 60 * v2[4]); v2[1] = result; return result; } //----- (00749220) -------------------------------------------------------- __time32_t *__thiscall sub_749220(__time32_t *Time, int a2) { __time32_t *v2; // esi v2 = Time; Time[2] = 0; Time[3] = 0; Time[4] = 0; Time[2] = *(_DWORD *)a2; Time[3] = *(_DWORD *)(a2 + 4); Time[4] = *(_DWORD *)(a2 + 8); _time32(Time); v2[1] = v2[2] + *v2 + 60 * (v2[3] + 60 * v2[4]); return v2; } //----- (00749280) -------------------------------------------------------- _DWORD *__cdecl sub_749280(_DWORD *a1, signed int a2) { const char *v2; // eax char v4; // [esp+8h] [ebp-14h] v2 = &byte_9A8050; if ( a2 <= 9 ) v2 = "0"; sprintf(&v4, "%s%i", v2, a2); a1[5] = 15; a1[4] = 0; *(_BYTE *)a1 = 0; sub_4018E0(a1, &v4, strlen(&v4)); return a1; } //----- (00749300) -------------------------------------------------------- _DWORD *__thiscall sub_749300(signed int *this, _DWORD *a2) { signed int *v2; // edi _DWORD *v3; // eax void *v5; // [esp+Ch] [ebp-60h] unsigned int v6; // [esp+20h] [ebp-4Ch] char v7; // [esp+28h] [ebp-44h] v2 = this; v3 = sub_749280(&v5, *this); if ( v3[5] >= 0x10u ) v3 = (_DWORD *)*v3; sprintf(&v7, "%i:%s", v2[1] + 60 * v2[2], v3); if ( v6 >= 0x10 ) operator delete(v5); a2[5] = 15; a2[4] = 0; *(_BYTE *)a2 = 0; sub_4018E0(a2, &v7, strlen(&v7)); return a2; } //----- (007493B0) -------------------------------------------------------- _DWORD *__cdecl sub_7493B0(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 69) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 69) ); } return result; } //----- (007493D0) -------------------------------------------------------- _DWORD *__thiscall sub_7493D0(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 69) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 69) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 69); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (00749420) -------------------------------------------------------- _DWORD *__thiscall sub_749420(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 69) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 69) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 69) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 69) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 69) ) goto LABEL_11; return result; } //----- (00749480) -------------------------------------------------------- int __thiscall sub_749480(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 69) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (007494E0) -------------------------------------------------------- int *__thiscall sub_7494E0(_DWORD *this, int a2) { int *result; // eax int *v3; // edi unsigned __int8 *v4; // edx unsigned int v5; // ebx unsigned __int8 *v6; // eax unsigned int v7; // esi unsigned int v8; // ecx int v9; // eax bool v10; // sf unsigned int v11; // [esp+4h] [ebp-8h] int *v12; // [esp+8h] [ebp-4h] result = (int *)this[1]; v3 = (int *)result[1]; v12 = (int *)this[1]; if ( !*((_BYTE *)v3 + 69) ) { v4 = (unsigned __int8 *)a2; v5 = *(_DWORD *)(a2 + 16); v11 = *(_DWORD *)(a2 + 20); while ( 1 ) { v6 = (unsigned __int8 *)(v3 + 3); if ( v11 >= 0x10 ) v4 = *(unsigned __int8 **)v4; v7 = v3[7]; v8 = v3[7]; if ( v7 >= v5 ) v8 = v5; if ( (unsigned int)v3[8] >= 0x10 ) v6 = *(unsigned __int8 **)v6; v9 = sub_40C0B0(v6, v4, v8); v10 = v9 < 0; if ( !v9 ) { if ( v7 < v5 ) goto LABEL_14; LOBYTE(v9) = v7 != v5; v10 = v9 < 0; } if ( v10 ) { LABEL_14: v3 = (int *)v3[2]; goto LABEL_16; } v12 = v3; v3 = (int *)*v3; LABEL_16: if ( *((_BYTE *)v3 + 69) ) return v12; v4 = (unsigned __int8 *)a2; } } return result; } //----- (00749570) -------------------------------------------------------- int __thiscall sub_749570(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi _DWORD *v22; // edx int v23; // esi int v24; // esi _DWORD *v25; // esi int v26; // edi _DWORD *v27; // edi int v28; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x4924923 ) { if ( *((_DWORD *)a5 + 15) >= 0x10u ) operator delete(*((void **)a5 + 10)); *((_DWORD *)a5 + 15) = 15; *((_DWORD *)a5 + 14) = 0; *((_BYTE *)a5 + 40) = 0; if ( *((_DWORD *)a5 + 8) >= 0x10u ) operator delete(*((void **)a5 + 3)); *((_DWORD *)a5 + 8) = 15; *((_DWORD *)a5 + 7) = 0; *((_BYTE *)a5 + 12) = 0; operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 68) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 68) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 69) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 69) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_54: v6 = a5; v17[1] = v18; continue; } } else { v13 = *v12; if ( *(_BYTE *)(v13 + 68) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v22 = *(_DWORD **)v11; *v10 = v22[2]; v23 = v22[2]; if ( !*(_BYTE *)(v23 + 69) ) *(_DWORD *)(v23 + 4) = v10; v22[1] = v10[1]; v24 = this[1]; if ( v10 == *(_DWORD **)(v24 + 4) ) { *(_DWORD *)(v24 + 4) = v22; } else { v25 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v25[2] ) v25[2] = v22; else *v25 = v22; } v22[2] = v10; v10[1] = v22; } *(_BYTE *)(v10[1] + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 69) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v26 = this[1]; if ( v17 == *(_DWORD **)(v26 + 4) ) { *(_DWORD *)(v26 + 4) = v18; } else { v27 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v27 ) *v27 = v18; else v27[2] = v18; } *v18 = v17; goto LABEL_54; } } *(_BYTE *)(v11 + 68) = 1; *(_BYTE *)(v13 + 68) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 68) = 0; v10 = *(_DWORD **)(v10[1] + 4); } while ( !*(_BYTE *)(v10[1] + 68) ); } v28 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v28 + 68) = 1; return result; } //----- (007497D0) -------------------------------------------------------- void __stdcall sub_7497D0(void *a1) { void **v1; // esi void **v2; // edi v1 = (void **)a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 69) ) { do { sub_7497D0(v2[2]); v2 = (void **)*v2; if ( (unsigned int)v1[15] >= 0x10 ) operator delete(v1[10]); v1[15] = (void *)15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; if ( (unsigned int)v1[8] >= 0x10 ) operator delete(v1[3]); v1[8] = (void *)15; v1[7] = 0; *((_BYTE *)v1 + 12) = 0; operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 69) ); } } //----- (00749850) -------------------------------------------------------- int __thiscall sub_749850(_DWORD *this, int a2, void *a3) { int *v3; // edi int v4; // ebx int *v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // eax int v11; // ecx int **v12; // ecx char v13; // cl _BYTE *v14; // eax unsigned int v15; // eax int result; // eax _DWORD *v17; // [esp+Ch] [ebp-4h] v3 = (int *)a3; v17 = this; if ( *((_BYTE *)a3 + 69) ) std::_Xout_of_range("invalid map/set iterator"); sub_7493D0(&a3); if ( *(_BYTE *)(*v3 + 69) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 69) ) *(_DWORD *)(v4 + 4) = v6; v7 = v17; v8 = v17[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v17[1] == v3 ) { if ( *(_BYTE *)(v4 + 69) ) { v9 = (_DWORD *)v6; } else { v9 = sub_7493B0((_DWORD *)v4); v7 = v17; } *(_DWORD *)v7[1] = v9; } if ( *(int **)(v7[1] + 8) == v3 ) { if ( *(_BYTE *)(v4 + 69) ) { *(_DWORD *)(v7[1] + 8) = v6; } else { v10 = sub_62AED0(v4); v7 = v17; *(_DWORD *)(v17[1] + 8) = v10; } } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 69) ) { v4 = *v3; goto LABEL_8; } v5 = (int *)a3; v4 = *((_DWORD *)a3 + 2); if ( a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *v5 = *v3; if ( v5 == (int *)v3[2] ) { v6 = (int)v5; } else { v6 = v5[1]; if ( !*(_BYTE *)(v4 + 69) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; v5[2] = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v17[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int **)v3[1]; if ( *v12 == v3 ) *v12 = v5; else v12[2] = v5; } v5[1] = v3[1]; v13 = *((_BYTE *)v5 + 68); *((_BYTE *)v5 + 68) = *((_BYTE *)v3 + 68); *((_BYTE *)v3 + 68) = v13; v7 = v17; LABEL_35: if ( *((_BYTE *)v3 + 68) == 1 ) { for ( ; v4 != *(_DWORD *)(v7[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 68) != 1 ) break; v14 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v14 = *(_BYTE **)(v6 + 8); if ( !v14[68] ) { v14[68] = 1; *(_BYTE *)(v6 + 68) = 0; sub_62B0F0(v7, v6); v14 = *(_BYTE **)(v6 + 8); v7 = v17; } if ( v14[69] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v14 + 68) != 1 || *(_BYTE *)(*((_DWORD *)v14 + 2) + 68) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 68) == 1 ) { *(_BYTE *)(*(_DWORD *)v14 + 68) = 1; v14[68] = 0; sub_749480(v7, v14); v14 = *(_BYTE **)(v6 + 8); v7 = v17; } v14[68] = *(_BYTE *)(v6 + 68); *(_BYTE *)(v6 + 68) = 1; *(_BYTE *)(*((_DWORD *)v14 + 2) + 68) = 1; sub_62B0F0(v7, v6); break; } } else { if ( !v14[68] ) { v14[68] = 1; *(_BYTE *)(v6 + 68) = 0; sub_749480(v7, (_DWORD *)v6); v14 = *(_BYTE **)v6; v7 = v17; } if ( v14[69] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 68) != 1 || *(_BYTE *)(*(_DWORD *)v14 + 68) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v14 + 68) == 1 ) { *(_BYTE *)(*((_DWORD *)v14 + 2) + 68) = 1; v14[68] = 0; sub_62B0F0(v7, (int)v14); v14 = *(_BYTE **)v6; v7 = v17; } v14[68] = *(_BYTE *)(v6 + 68); *(_BYTE *)(v6 + 68) = 1; *(_BYTE *)(*(_DWORD *)v14 + 68) = 1; sub_749480(v7, (_DWORD *)v6); break; } } v14[68] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 68) = 1; } if ( (unsigned int)v3[15] >= 0x10 ) operator delete((void *)v3[10]); v3[15] = 15; v3[14] = 0; *((_BYTE *)v3 + 40) = 0; if ( (unsigned int)v3[8] >= 0x10 ) operator delete((void *)v3[3]); v3[8] = 15; v3[7] = 0; *((_BYTE *)v3 + 12) = 0; operator delete(v3); v15 = v17[2]; if ( v15 > 0 ) v17[2] = v15 - 1; result = a2; *(_DWORD *)a2 = a3; return result; } //----- (00749AF0) -------------------------------------------------------- int __thiscall sub_749AF0(_DWORD *this, int a2, void *a3, int a4) { unsigned __int8 *v4; // edx int v5; // ebx int v6; // edi bool v7; // al unsigned int v8; // ecx unsigned __int8 *v9; // eax unsigned __int8 *v10; // edx unsigned int v11; // esi unsigned int v12; // ecx int v13; // eax bool v14; // sf unsigned int v15; // edi unsigned int v16; // esi unsigned int v17; // edx unsigned __int8 *v18; // ecx int v19; // eax bool v20; // sf signed int v21; // eax int v22; // esi int *v23; // eax int v24; // ecx int result; // eax bool v26; // cf unsigned __int8 *v27; // ebx unsigned int v28; // edx unsigned __int8 *v29; // eax int v30; // [esp+Ch] [ebp-14h] unsigned int v31; // [esp+10h] [ebp-10h] unsigned int v32; // [esp+14h] [ebp-Ch] _DWORD *v33; // [esp+18h] [ebp-8h] char v34; // [esp+1Ch] [ebp-4h] v4 = (unsigned __int8 *)a3; v5 = *(_DWORD *)(this[1] + 4); v6 = this[1]; v7 = 1; v33 = this; v34 = 1; if ( !*(_BYTE *)(v5 + 69) ) { v8 = *((_DWORD *)a3 + 7); v32 = *((_DWORD *)a3 + 7); v31 = *((_DWORD *)a3 + 8); while ( 1 ) { v30 = v5; v9 = (unsigned __int8 *)(v5 + 12); if ( (_BYTE)a4 ) { if ( v31 < 0x10 ) v10 = v4 + 12; else v10 = (unsigned __int8 *)*((_DWORD *)v4 + 3); v11 = *(_DWORD *)(v5 + 28); v12 = *(_DWORD *)(v5 + 28); if ( v11 >= v32 ) v12 = v32; if ( *(_DWORD *)(v5 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; v13 = sub_40C0B0(v9, v10, v12); v14 = v13 < 0; if ( !v13 ) { if ( v11 < v32 ) { v7 = 0; goto LABEL_32; } v14 = (v11 != v32) < 0; } v7 = !v14; } else { v15 = *(_DWORD *)(v5 + 28); if ( *(_DWORD *)(v5 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; v16 = *((_DWORD *)a3 + 7); if ( v8 < v16 ) v16 = v8; v17 = v16; if ( v16 >= v15 ) v17 = *(_DWORD *)(v5 + 28); if ( v31 < 0x10 ) v18 = (unsigned __int8 *)a3 + 12; else v18 = (unsigned __int8 *)*((_DWORD *)a3 + 3); v19 = sub_40C0B0(v18, v9, v17); v20 = v19 < 0; if ( !v19 ) { if ( v16 >= v15 ) v21 = v16 != v15; else v21 = -1; v20 = v21 < 0; } v7 = v20; } LABEL_32: v34 = v7; if ( v7 ) v5 = *(_DWORD *)v5; else v5 = *(_DWORD *)(v5 + 8); v4 = (unsigned __int8 *)a3; if ( *(_BYTE *)(v5 + 69) ) { v6 = v30; this = v33; break; } v8 = v32; } } v22 = v6; a4 = v6; if ( v7 ) { if ( v6 == *(_DWORD *)this[1] ) { v23 = (int *)sub_749570(this, (int)&a4, 1, v6, v4); LABEL_40: v24 = *v23; result = a2; *(_DWORD *)a2 = v24; *(_BYTE *)(a2 + 4) = 1; return result; } sub_749420(&a4); v22 = a4; v4 = (unsigned __int8 *)a3; } v26 = *((_DWORD *)v4 + 8) < 0x10u; v27 = v4 + 12; v28 = *((_DWORD *)v4 + 7); if ( v26 ) v29 = v27; else v29 = *(unsigned __int8 **)v27; if ( sub_40C2F0((unsigned __int8 *)(v22 + 12), 0, *(_DWORD *)(v22 + 28), v29, v28) < 0 ) { v23 = (int *)sub_749570(v33, (int)&a4, v34, v6, a3); goto LABEL_40; } sub_5F63B0((int)v33 + 13, (int)v27); operator delete(a3); result = a2; *(_DWORD *)a2 = v22; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (00749CA0) -------------------------------------------------------- int __thiscall sub_749CA0(_DWORD *this, int a2, int a3, void *a4) { void *v4; // ebx _DWORD *v5; // esi _DWORD *v6; // eax char *v7; // edi int result; // eax unsigned __int8 *v9; // eax void *v10; // eax int v11; // ecx int v12; // [esp+Ch] [ebp-8h] v4 = a4; v5 = this; v6 = (_DWORD *)this[1]; v7 = (char *)a4 + 12; if ( !this[2] ) { sub_749570(this, a2, 1, (int)v6, a4); return a2; } if ( a3 == *v6 ) { v9 = (unsigned __int8 *)(a3 + 12); if ( *(_DWORD *)(a3 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; if ( sub_40C2F0((unsigned __int8 *)a4 + 12, 0, *((_DWORD *)a4 + 7), v9, *(_DWORD *)(a3 + 28)) < 0 ) { sub_749570(v5, a2, 1, a3, v4); return a2; } goto LABEL_25; } if ( (_DWORD *)a3 == v6 ) { if ( sub_40C4B0(v6[2] + 12, (int)a4 + 12) ) { sub_749570(v5, a2, 0, *(_DWORD *)(v5[1] + 8), v4); return a2; } goto LABEL_25; } if ( sub_40C4B0((int)a4 + 12, a3 + 12) ) { a4 = (void *)a3; sub_749420(&a4); if ( sub_40C4B0((int)a4 + 12, (int)v7) ) { if ( *(_BYTE *)(*((_DWORD *)a4 + 2) + 69) ) sub_749570(v5, a2, 0, (int)a4, v4); else sub_749570(v5, a2, 1, a3, v4); return a2; } } if ( !sub_40C4B0(a3 + 12, (int)v7) ) goto LABEL_25; a4 = (void *)a3; sub_7493D0(&a4); v10 = a4; if ( a4 != (void *)v5[1] ) { if ( sub_40C4B0((int)v7, (int)a4 + 12) ) { v10 = a4; goto LABEL_21; } LABEL_25: v11 = *(_DWORD *)sub_749AF0(v5, (int)&v12, v4, 0); result = a2; *(_DWORD *)a2 = v11; return result; } LABEL_21: if ( *(_BYTE *)(*(_DWORD *)(a3 + 8) + 69) ) sub_749570(v5, a2, 0, a3, v4); else sub_749570(v5, a2, 1, (int)v10, v4); return a2; } //----- (00749E60) -------------------------------------------------------- int __thiscall sub_749E60(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // esi void **v5; // eax void *v6; // ecx _DWORD *v7; // ecx int result; // eax void *v9; // edx int v10; // eax void *v11; // ecx _BYTE *j; // eax int i; // eax int v14; // [esp+4h] [ebp-4h] v4 = this; v5 = (void **)this[1]; v6 = a3; if ( a3 != *v5 || (void **)a4 != v5 ) { for ( ; a3 != (void *)a4; v6 = a3 ) { v9 = v6; if ( !*((_BYTE *)v6 + 69) ) { v10 = *((_DWORD *)v6 + 2); if ( *(_BYTE *)(v10 + 69) ) { for ( i = *((_DWORD *)v6 + 1); !*(_BYTE *)(i + 69); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(void **)(i + 8) ) break; v6 = (void *)i; } a3 = (void *)i; } else { v11 = (void *)*((_DWORD *)v6 + 2); for ( j = *(_BYTE **)v10; !j[69]; j = *(_BYTE **)j ) v11 = j; a3 = v11; } } sub_749850(v4, (int)&v14, v9); } result = a2; *(_DWORD *)a2 = v6; } else { sub_7497D0(v5[1]); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (_DWORD *)v4[1]; result = a2; v4[2] = 0; *(_DWORD *)a2 = *v7; } return result; } //----- (00749F20) -------------------------------------------------------- void __thiscall sub_749F20(_DWORD *this) { _DWORD *v1; // esi void **v2; // eax void *v3; // ST04_4 int v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (void **)this[1]; v3 = *v2; v6 = 0; sub_749E60(this, (int)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (00749F80) -------------------------------------------------------- void __thiscall sub_749F80(void **this) { void **v1; // edi int v2; // esi void *v3; // ST08_4 int v4; // ST08_4 void *v5; // ST04_4 int v6; // [esp+Ch] [ebp-18h] int v7; // [esp+10h] [ebp-14h] void **v8; // [esp+14h] [ebp-10h] int v9; // [esp+20h] [ebp-4h] v1 = this; v8 = this; v2 = (int)(this + 16); v3 = (void *)*((_DWORD *)this[17] + 1); v9 = 1; sub_7497D0(v3); *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) = *(_DWORD *)(v2 + 4); **(_DWORD **)(v2 + 4) = *(_DWORD *)(v2 + 4); *(_DWORD *)(*(_DWORD *)(v2 + 4) + 8) = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 8) = 0; v7 = v2; v4 = *(_DWORD *)(v2 + 4); v5 = **(void ***)(v2 + 4); LOBYTE(v9) = 2; sub_749E60((_DWORD *)v2, (int)&v6, v5, v4); operator delete(*(void **)(v2 + 4)); v9 = -1; sub_747510(v1); } //----- (0074A020) -------------------------------------------------------- char *__thiscall sub_74A020(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // eax int v5; // ecx char *v6; // edx int v8; // [esp+0h] [ebp-38h] void **v9; // [esp+10h] [ebp-28h] void *v10; // [esp+1Ch] [ebp-1Ch] char *v11; // [esp+20h] [ebp-18h] void *v12; // [esp+24h] [ebp-14h] int *v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v13 = &v8; v2 = this; v3 = (char *)operator new(0x48u); v12 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a2); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 34) = 0; v14 = 0; v11 = v3 + 12; v10 = v3 + 12; LOBYTE(v14) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_406450(v3 + 12, v4); v5 = (int)(v3 + 40); v6 = a2 + 28; *(_DWORD *)(v5 + 20) = 15; *(_DWORD *)(v5 + 16) = 0; LOBYTE(v14) = 2; *(_BYTE *)v5 = 0; sub_406450(v3 + 40, v6); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0074A120) -------------------------------------------------------- char *__thiscall sub_74A120(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // eax int v5; // ecx char *v6; // edx int v8; // [esp+0h] [ebp-38h] void **v9; // [esp+10h] [ebp-28h] void *v10; // [esp+1Ch] [ebp-1Ch] char *v11; // [esp+20h] [ebp-18h] void *v12; // [esp+24h] [ebp-14h] int *v13; // [esp+28h] [ebp-10h] int v14; // [esp+34h] [ebp-4h] v13 = &v8; v2 = this; v3 = (char *)operator new(0x48u); v12 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v9, (const char *const *)&a2); v9 = &std::bad_alloc::`vftable'; _CxxThrowException(&v9, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 34) = 0; v14 = 0; v11 = v3 + 12; v10 = v3 + 12; LOBYTE(v14) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_4017F0((const void **)v3 + 3, (const void **)v4, 0, (void *)0xFFFFFFFF); v5 = (int)(v3 + 40); v6 = a2 + 28; *(_DWORD *)(v5 + 20) = 15; *(_DWORD *)(v5 + 16) = 0; LOBYTE(v14) = 2; *(_BYTE *)v5 = 0; sub_406450(v3 + 40, v6); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0074A220) -------------------------------------------------------- _DWORD *__thiscall sub_74A220(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+8h] [ebp-20h] _DWORD *v5; // [esp+14h] [ebp-14h] char *v6; // [esp+18h] [ebp-10h] int v7; // [esp+24h] [ebp-4h] v1 = this; v5 = this; sub_747420(this); v7 = 0; v1[18] = 0; v2 = operator new(0x48u); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[17] = v2; *v2 = v2; *(_DWORD *)(v1[17] + 4) = v1[17]; *(_DWORD *)(v1[17] + 8) = v1[17]; *(_BYTE *)(v1[17] + 68) = 1; *(_BYTE *)(v1[17] + 69) = 1; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0074A2D0) -------------------------------------------------------- signed int __thiscall sub_74A2D0(_DWORD *this, char *a2, int a3, int a4) { _DWORD *v4; // esi void *v5; // ST08_4 int v7; // eax int v8; // edi int v9; // edx int *v10; // eax int v11; // esi unsigned int v12; // edx int v13; // eax bool v14; // cf unsigned __int8 *v15; // ecx int v16; // eax bool v17; // sf signed int v18; // eax int *v19; // eax bool v20; // zf int v21; // esi char *v22; // eax int v23; // [esp+10h] [ebp-8Ch] unsigned int v24; // [esp+18h] [ebp-84h] int v25; // [esp+1Ch] [ebp-80h] int v26; // [esp+20h] [ebp-7Ch] int *v27; // [esp+24h] [ebp-78h] _DWORD *v28; // [esp+28h] [ebp-74h] unsigned int v29; // [esp+2Ch] [ebp-70h] char *v30; // [esp+30h] [ebp-6Ch] bool v31; // [esp+37h] [ebp-65h] void *v32; // [esp+38h] [ebp-64h] int v33; // [esp+48h] [ebp-54h] unsigned int v34; // [esp+4Ch] [ebp-50h] void *v35; // [esp+54h] [ebp-48h] int v36; // [esp+64h] [ebp-38h] unsigned int v37; // [esp+68h] [ebp-34h] void *v38; // [esp+70h] [ebp-2Ch] unsigned int v39; // [esp+80h] [ebp-1Ch] unsigned int v40; // [esp+84h] [ebp-18h] int v41; // [esp+98h] [ebp-4h] v4 = this; v5 = *(void **)(this[17] + 4); v28 = this; v30 = a2; sub_7497D0(v5); *(_DWORD *)(v4[17] + 4) = v4[17]; *(_DWORD *)v4[17] = v4[17]; *(_DWORD *)(v4[17] + 8) = v4[17]; v4[18] = 0; if ( !sub_747820(v4, a2, a3, a4) ) return 0; v7 = v4[13]; if ( v7 ) v30 = *(char **)(v7 + 40); else v30 = 0; v29 = 0; if ( (unsigned int)v30 > 0 ) { while ( 1 ) { v8 = sub_7474E0(v4, v29); v40 = 15; v39 = 0; LOBYTE(v38) = 0; sub_4018E0(&v38, (void *)v8, strlen((const char *)v8)); v9 = v4[17]; v41 = 0; v26 = v9; v10 = sub_7494E0(v4 + 16, (int)&v38); v11 = v4[17]; v27 = v10; if ( v10 == (int *)v11 ) goto LABEL_35; v12 = v10[7]; v13 = (int)(v10 + 3); v14 = *(_DWORD *)(v13 + 20) < 0x10u; v24 = v12; if ( !v14 ) v13 = *(_DWORD *)v13; if ( v39 < v12 ) v12 = v39; v15 = (unsigned __int8 *)v38; if ( v40 < 0x10 ) v15 = (unsigned __int8 *)&v38; v16 = sub_40C0B0(v15, (unsigned __int8 *)v13, v12); v17 = v16 < 0; if ( !v16 ) { if ( v39 >= v24 ) v18 = v39 != v24; else v18 = -1; v17 = v18 < 0; } if ( v17 ) { LABEL_35: v25 = v11; v19 = &v25; } else { v19 = (int *)&v27; } v20 = *v19 == v26; v41 = -1; v31 = !v20; if ( v40 >= 0x10 ) operator delete(v38); if ( v31 ) return 0; v34 = 15; v33 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, (void *)v8, strlen((const char *)v8)); v41 = 1; v37 = 15; v36 = 0; LOBYTE(v35) = 0; sub_4018E0(&v35, (void *)(v8 + 32), strlen((const char *)(v8 + 32))); v21 = (int)v28; v41 = 2; v22 = sub_74A020(v28 + 16, (char *)&v32); sub_749AF0((_DWORD *)(v21 + 64), (int)&v23, v22, 0); v41 = -1; if ( v37 >= 0x10 ) operator delete(v35); v37 = 15; v36 = 0; LOBYTE(v35) = 0; if ( v34 >= 0x10 ) operator delete(v32); v34 = 15; v33 = 0; LOBYTE(v32) = 0; if ( ++v29 >= (unsigned int)v30 ) return 1; v4 = v28; } } return 1; } //----- (0074A560) -------------------------------------------------------- int __thiscall sub_74A560(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax unsigned int v4; // ecx int v5; // eax char *v6; // eax int v8; // [esp+10h] [ebp-68h] void *v9; // [esp+14h] [ebp-64h] int v10; // [esp+24h] [ebp-54h] unsigned int v11; // [esp+28h] [ebp-50h] void *v12; // [esp+30h] [ebp-48h] int v13; // [esp+40h] [ebp-38h] unsigned int v14; // [esp+44h] [ebp-34h] void *v15; // [esp+4Ch] [ebp-2Ch] int v16; // [esp+5Ch] [ebp-1Ch] unsigned int v17; // [esp+60h] [ebp-18h] int v18; // [esp+74h] [ebp-4h] v2 = this; v3 = sub_7494E0(this, a2); v8 = (int)v3; if ( v3 == (int *)v2[1] ) goto LABEL_14; v4 = v3[7]; v5 = (int)(v3 + 3); if ( *(_DWORD *)(v5 + 20) >= 0x10u ) v5 = *(_DWORD *)v5; if ( sub_40C2F0((unsigned __int8 *)a2, 0, *(_DWORD *)(a2 + 16), (unsigned __int8 *)v5, v4) < 0 ) { LABEL_14: v11 = 15; v10 = 0; LOBYTE(v9) = 0; v18 = 0; v14 = 15; v13 = 0; LOBYTE(v12) = 0; sub_4017F0((const void **)&v12, (const void **)a2, 0, (void *)0xFFFFFFFF); LOBYTE(v18) = 1; v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_406450(&v15, &v9); LOBYTE(v18) = 2; v6 = sub_74A120(v2, (char *)&v12); sub_749CA0(v2, (int)&v8, v8, v6); if ( v17 >= 0x10 ) operator delete(v15); v17 = 15; v16 = 0; LOBYTE(v15) = 0; if ( v14 >= 0x10 ) operator delete(v12); v14 = 15; v13 = 0; LOBYTE(v12) = 0; if ( v11 >= 0x10 ) operator delete(v9); } return v8 + 40; } //----- (0074A6A0) -------------------------------------------------------- _DWORD *__thiscall sub_74A6A0(_DWORD *this, int a2) { int v2; // ebx int v3; // edi _DWORD *v4; // esi int *v5; // eax unsigned int v6; // ecx int v7; // eax int *v8; // eax _DWORD *result; // eax int v10; // [esp+Ch] [ebp-4h] v2 = this[17]; v3 = a2; v4 = this + 16; v5 = sub_7494E0(this + 16, a2); a2 = (int)v5; if ( v5 == (int *)v4[1] ) goto LABEL_13; v6 = v5[7]; v7 = (int)(v5 + 3); if ( *(_DWORD *)(v7 + 20) >= 0x10u ) v7 = *(_DWORD *)v7; if ( sub_40C2F0((unsigned __int8 *)v3, 0, *(_DWORD *)(v3 + 16), (unsigned __int8 *)v7, v6) < 0 ) { LABEL_13: v10 = v4[1]; v8 = &v10; } else { v8 = &a2; } if ( *v8 == v2 ) return 0; result = (_DWORD *)sub_74A560(v4, v3); if ( result[5] >= 0x10u ) result = (_DWORD *)*result; return result; } //----- (0074A720) -------------------------------------------------------- void __thiscall sub_74A720(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax void *v3; // eax v1 = this; v2 = (void *)this[4]; *this = &CQuest::`vftable'; if ( v2 ) { free(v2); v1[4] = 0; } v3 = (void *)v1[8]; v1[3] = 0; v1[2] = 0; if ( v3 ) operator delete[](v3); v1[7] = 0; v1[6] = 0; } // A08A44: using guessed type void *CQuest::`vftable'; //----- (0074A760) -------------------------------------------------------- void *__thiscall sub_74A760(int this, int a2) { _DWORD *v2; // esi void *result; // eax bool v4; // zf v2 = (_DWORD *)this; if ( *(_DWORD *)(this + 12) < a2 ) { if ( *(_DWORD *)(this + 16) ) { free(*(void **)(this + 16)); v2[4] = 0; } v2[3] = 0; } if ( !v2[4] ) { result = malloc(32 * a2); v2[4] = result; if ( !result ) { v2[2] = 0; return result; } memset(result, 0, 32 * a2); v2[3] = a2; } v4 = v2[4] == 0; v2[2] = 0; return (void *)!v4; } //----- (0074A7E0) -------------------------------------------------------- __time32_t __thiscall sub_74A7E0(_DWORD *this) { _DWORD *v1; // esi __time32_t result; // eax v1 = this; this[2] = 0; result = _time32(0); v1[5] = result; return result; } //----- (0074A800) -------------------------------------------------------- int __thiscall sub_74A800(_DWORD *this, __int16 a2) { int v2; // edx int v3; // eax int v4; // edi _WORD *v5; // ecx int result; // eax if ( !this[3] ) goto LABEL_12; v2 = this[2]; v3 = 0; if ( v2 <= 0 ) goto LABEL_12; v4 = this[4]; v5 = (_WORD *)this[4]; while ( *v5 != a2 ) { ++v3; v5 += 16; if ( v3 >= v2 ) return 0; } if ( v3 != -1 ) result = v4 + 32 * v3; else LABEL_12: result = 0; return result; } //----- (0074A850) -------------------------------------------------------- signed int __thiscall sub_74A850(_DWORD *this, _WORD *a2) { int v2; // edx int v3; // eax int v4; // edi _WORD *v5; // ecx void *v7; // eax if ( !this[3] ) return 0; v2 = this[2]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this[4]; v5 = (_WORD *)this[4]; while ( *v5 != *a2 ) { ++v3; v5 += 16; if ( v3 >= v2 ) return 0; } if ( v3 == -1 ) return 0; v7 = (void *)(v4 + 32 * v3); if ( !v7 ) return 0; qmemcpy(v7, a2, 0x20u); return 1; } //----- (0074A8B0) -------------------------------------------------------- signed int __thiscall sub_74A8B0(_DWORD *this, _WORD *a2) { _DWORD *v2; // ebx signed int result; // eax int v4; // edi v2 = this; result = sub_74A850(this, a2); if ( !result ) { v4 = v2[2]; if ( v4 >= v2[3] ) return result; qmemcpy((void *)(v2[4] + 32 * v4), a2, 0x20u); ++v2[2]; } return 1; } //----- (0074A8F0) -------------------------------------------------------- void __thiscall sub_74A8F0(_DWORD *this, __int16 a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax _WORD *v5; // edx v2 = this; if ( this[3] ) { v3 = this[2]; v4 = 0; if ( v3 > 0 ) { v5 = (_WORD *)v2[4]; while ( *v5 != a2 ) { ++v4; v5 += 16; if ( v4 >= v3 ) return; } if ( v4 != -1 ) { memcpy((void *)(v2[4] + 32 * v4), (const void *)(v2[4] + 32 * v4 + 32), 32 * (v3 - v4 - 1)); --v2[2]; } } } } //----- (0074A950) -------------------------------------------------------- int __thiscall sub_74A950(_DWORD **this, __int16 a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi bool v5; // zf __time64_t v6; // rax __int16 *v7; // edi __int16 v8; // [esp+8h] [ebp-20h] char v9; // [esp+Ah] [ebp-1Eh] __time64_t v10; // [esp+Bh] [ebp-1Dh] int v11; // [esp+13h] [ebp-15h] int v12; // [esp+17h] [ebp-11h] int v13; // [esp+1Bh] [ebp-Dh] int v14; // [esp+1Fh] [ebp-9h] int v15; // [esp+23h] [ebp-5h] char v16; // [esp+27h] [ebp-1h] v2 = this; result = sub_74E7D0(this[1], a2); if ( result ) { v4 = sub_74A800(v2, a2); if ( v4 ) { v5 = *(_BYTE *)(v4 + 2) == 20; *(_BYTE *)(v4 + 2) = 6; if ( v5 ) { *(_DWORD *)(v4 + 3) = 0; *(_DWORD *)(v4 + 7) = 0; *(_DWORD *)(v4 + 11) = 0; *(_DWORD *)(v4 + 15) = 0; *(_DWORD *)(v4 + 19) = 0; *(_DWORD *)(v4 + 23) = 0; *(_DWORD *)(v4 + 27) = 0; *(_BYTE *)(v4 + 31) = 0; *(_QWORD *)(v4 + 3) = _time64(0); } else { *(_BYTE *)(v4 + 23) = 0; *(_DWORD *)(v4 + 24) = 0; *(_BYTE *)(v4 + 28) = 0; *(_BYTE *)(v4 + 29) &= 0xFCu; *(_WORD *)(v4 + 30) = 0; } result = 1; } else if ( v2[2] < v2[3] ) { v8 = a2; v9 = 6; v10 = 0i64; v11 = 0; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v6 = _time64(0); v7 = (__int16 *)(v2[4] + 32 * v2[2]); v10 = v6; qmemcpy(v7, &v8, 0x20u); result = 1; ++v2[2]; } else { result = 0; } } return result; } //----- (0074AA50) -------------------------------------------------------- signed int __thiscall sub_74AA50(_DWORD *this, __int16 a2) { _DWORD *v2; // edi int v3; // edx int v4; // eax int v5; // esi _WORD *v6; // ecx int v7; // esi int v8; // eax v2 = this; if ( !this[3] ) goto LABEL_19; v3 = this[2]; v4 = 0; if ( v3 <= 0 ) goto LABEL_19; v5 = this[4]; v6 = (_WORD *)this[4]; while ( *v6 != a2 ) { ++v4; v6 += 16; if ( v4 >= v3 ) { v7 = 0; goto LABEL_10; } } if ( v4 != -1 ) v7 = 32 * v4 + v5; else LABEL_19: v7 = 0; LABEL_10: v8 = sub_74E7D0((_DWORD *)v2[1], a2); if ( !v7 || !v8 ) return 0; if ( *(_BYTE *)(v8 + 18) ) { *(_BYTE *)(v7 + 2) = 4; *(_BYTE *)(v7 + 23) = 0; *(_DWORD *)(v7 + 24) = 0; *(_BYTE *)(v7 + 28) = 0; *(_BYTE *)(v7 + 29) &= 0xFCu; *(_WORD *)(v7 + 30) = 0; } else { sub_74A8F0(v2, a2); } return 1; } //----- (0074AAF0) -------------------------------------------------------- signed int __thiscall sub_74AAF0(_DWORD *this, __int16 a2, char a3) { int v3; // edx int v4; // eax int v5; // esi _WORD *v6; // ecx int v8; // eax if ( !this[3] ) return 0; v3 = this[2]; v4 = 0; if ( v3 <= 0 ) return 0; v5 = this[4]; v6 = (_WORD *)this[4]; while ( *v6 != a2 ) { ++v4; v6 += 16; if ( v4 >= v3 ) return 0; } if ( v4 == -1 ) return 0; v8 = v5 + 32 * v4; if ( !v8 ) return 0; *(_BYTE *)(v8 + 23) = a3; return 1; } //----- (0074AB50) -------------------------------------------------------- signed int __thiscall sub_74AB50(_DWORD *this, __int16 a2) { int v2; // edx int v3; // eax int v4; // esi _WORD *v5; // ecx int v7; // eax if ( !this[3] ) return 0; v2 = this[2]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this[4]; v5 = (_WORD *)this[4]; while ( *v5 != a2 ) { ++v3; v5 += 16; if ( v3 >= v2 ) return 0; } if ( v3 == -1 ) return 0; v7 = v4 + 32 * v3; if ( !v7 ) return 0; *(_BYTE *)(v7 + 2) = 7; return 1; } //----- (0074ABB0) -------------------------------------------------------- int __thiscall sub_74ABB0(_DWORD **this, int a2) { _DWORD **v2; // ebx int result; // eax int v4; // edi __time64_t v5; // rax v2 = this; if ( !a2 ) return 0; result = sub_74E7D0(this[1], *(_WORD *)a2); v4 = result; if ( result ) { *(_BYTE *)(a2 + 2) = 2 * (*(_BYTE *)(result + 18) != 0) + 2; v5 = _time64(0); ++*(_DWORD *)(a2 + 19); *(_QWORD *)(a2 + 11) = v5; ((void (__thiscall *)(_DWORD **, int, int))(*v2)[23])(v2, a2, v4); result = 1; } return result; } //----- (0074AC20) -------------------------------------------------------- signed int __thiscall sub_74AC20(_DWORD *this, __int16 a2) { int v2; // edx int v3; // eax int v4; // esi _WORD *v5; // ecx int v7; // eax if ( !this[3] ) return 0; v2 = this[2]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this[4]; v5 = (_WORD *)this[4]; while ( *v5 != a2 ) { ++v3; v5 += 16; if ( v3 >= v2 ) return 0; } if ( v3 == -1 ) return 0; v7 = v4 + 32 * v3; if ( !v7 ) return 0; *(_BYTE *)(v7 + 2) = 1; return 1; } //----- (0074AC80) -------------------------------------------------------- BOOL __thiscall sub_74AC80(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx unsigned __int8 v4; // al _WORD *v5; // esi int v6; // eax _WORD *v7; // ecx int v8; // edi signed int v9; // eax void *v10; // eax BOOL v11; // ecx int v13; // [esp+8h] [ebp-8h] unsigned __int8 v14; // [esp+Fh] [ebp-1h] v2 = a2; v3 = this; if ( *(_BYTE *)(a2 + 4) ) { this[2] = 0; this[5] = _time32(0); } v4 = 0; v13 = 0; v14 = 0; if ( *(_BYTE *)(a2 + 5) ) { while ( 1 ) { v5 = (_WORD *)(32 * v4 + v2 + 6); if ( !v3[3] ) goto LABEL_11; v6 = 0; if ( v3[2] <= 0 ) goto LABEL_11; v7 = (_WORD *)v3[4]; while ( *v7 != *v5 ) { ++v6; v7 += 16; if ( v6 >= v3[2] ) goto LABEL_11; } if ( v6 != -1 && (v10 = (void *)(v3[4] + 32 * v6)) != 0 ) { qmemcpy(v10, v5, 0x20u); } else { LABEL_11: v8 = v3[2]; if ( v8 >= v3[3] ) { v9 = 0; goto LABEL_18; } qmemcpy((void *)(v3[4] + 32 * v8), v5, 0x20u); ++v3[2]; } v9 = 1; LABEL_18: v11 = v9 == 0; v4 = v14 + 1; v14 = v4; v13 |= v11; if ( v4 >= *(_BYTE *)(a2 + 5) ) return v13 == 0; v2 = a2; } } return v13 == 0; } //----- (0074AD60) -------------------------------------------------------- BOOL __thiscall sub_74AD60(_DWORD *this, int a2) { _DWORD *v2; // edx unsigned __int16 v3; // bx int v4; // esi __int16 v5; // di int v6; // eax int v7; // ecx int v8; // eax int v9; // eax _WORD *v10; // ecx int v11; // edi signed int v12; // eax __int16 *v13; // eax __int16 v15; // [esp+4h] [ebp-24h] char v16; // [esp+6h] [ebp-22h] int v17; // [esp+Fh] [ebp-19h] int v18; // [esp+13h] [ebp-15h] int v19; // [esp+24h] [ebp-4h] v2 = this; v3 = 0; v19 = 0; v16 = 2; if ( *(_WORD *)(a2 + 8) > 0u ) { while ( 1 ) { v4 = v2[3]; v5 = *(_WORD *)(a2 + 10 * v3 + 12); v6 = a2 + 10 * v3; v7 = *(_DWORD *)(v6 + 14); v8 = *(_DWORD *)(v6 + 18); v15 = *(_WORD *)(a2 + 10 * v3 + 12); v17 = v7; v18 = v8; if ( v4 ) { v9 = 0; if ( v2[2] > 0 ) { v10 = (_WORD *)v2[4]; while ( *v10 != v5 ) { ++v9; v10 += 16; if ( v9 >= v2[2] ) goto LABEL_7; } if ( v9 != -1 ) { v13 = (__int16 *)(v2[4] + 32 * v9); if ( v13 ) break; } } } LABEL_7: v11 = v2[2]; if ( v11 < v4 ) { qmemcpy((void *)(v2[4] + 32 * v11), &v15, 0x20u); ++v2[2]; goto LABEL_13; } v12 = 0; LABEL_14: ++v3; v19 |= v12 == 0; if ( v3 >= *(_WORD *)(a2 + 8) ) return v19 == 0; } qmemcpy(v13, &v15, 0x20u); LABEL_13: v12 = 1; goto LABEL_14; } return v19 == 0; } //----- (0074AE30) -------------------------------------------------------- signed int __thiscall sub_74AE30(_DWORD *this, __int16 *a2) { signed int result; // eax if ( a2[1] == 2881 ) result = sub_74AA50(this, *a2); else result = 0; return result; } //----- (0074AE60) -------------------------------------------------------- BOOL __thiscall sub_74AE60(_DWORD *this, int a2) { _DWORD *v2; // edx int v3; // ecx int v4; // eax int v5; // esi __int16 v6; // di int v7; // eax _WORD *v8; // ecx int v9; // edi signed int v10; // eax __int16 *v11; // eax bool v12; // zf __int16 v14; // [esp+4h] [ebp-28h] char v15; // [esp+6h] [ebp-26h] int v16; // [esp+24h] [ebp-8h] int v17; // [esp+28h] [ebp-4h] v2 = this; v3 = a2; LOWORD(v4) = 0; v17 = 0; v15 = 20; v16 = 0; if ( *(_WORD *)(a2 + 4) > 0u ) { while ( 1 ) { v5 = v2[3]; v6 = *(_WORD *)(v3 + 2 * (unsigned __int16)v4 + 6); v14 = *(_WORD *)(v3 + 2 * (unsigned __int16)v4 + 6); if ( v5 ) { v7 = 0; if ( v2[2] > 0 ) { v8 = (_WORD *)v2[4]; while ( *v8 != v6 ) { ++v7; v8 += 16; if ( v7 >= v2[2] ) goto LABEL_7; } if ( v7 != -1 ) { v11 = (__int16 *)(v2[4] + 32 * v7); if ( v11 ) break; } } } LABEL_7: v9 = v2[2]; if ( v9 < v5 ) { qmemcpy((void *)(v2[4] + 32 * v9), &v14, 0x20u); ++v2[2]; goto LABEL_13; } v10 = 0; LABEL_14: v12 = v10 == 0; v4 = v16 + 1; v16 = v4; v17 |= v12; v3 = a2; if ( (unsigned __int16)v4 >= *(_WORD *)(a2 + 4) ) return v17 == 0; } qmemcpy(v11, &v14, 0x20u); LABEL_13: v10 = 1; goto LABEL_14; } return v17 == 0; } //----- (0074AF30) -------------------------------------------------------- BOOL __thiscall sub_74AF30(_DWORD *this, int a2) { _DWORD *v2; // edx int v3; // ecx int v4; // eax _WORD *v5; // esi int v6; // eax _WORD *v7; // ecx int v8; // edi signed int v9; // eax void *v10; // eax bool v11; // zf int v13; // [esp+4h] [ebp-8h] int v14; // [esp+8h] [ebp-4h] v2 = this; v3 = a2; LOWORD(v4) = 0; v14 = 0; v13 = 0; if ( *(_WORD *)(a2 + 4) > 0u ) { while ( 1 ) { v5 = (_WORD *)(32 * (unsigned __int16)v4 + v3 + 6); if ( v2[3] ) { v6 = 0; if ( v2[2] > 0 ) { v7 = (_WORD *)v2[4]; while ( *v7 != *v5 ) { ++v6; v7 += 16; if ( v6 >= v2[2] ) goto LABEL_7; } if ( v6 != -1 ) { v10 = (void *)(v2[4] + 32 * v6); if ( v10 ) break; } } } LABEL_7: v8 = v2[2]; if ( v8 < v2[3] ) { qmemcpy((void *)(v2[4] + 32 * v8), v5, 0x20u); ++v2[2]; goto LABEL_13; } v9 = 0; LABEL_14: v11 = v9 == 0; v4 = v13 + 1; v13 = v4; v14 |= v11; v3 = a2; if ( (unsigned __int16)v4 >= *(_WORD *)(a2 + 4) ) return v14 == 0; } qmemcpy(v10, v5, 0x20u); LABEL_13: v9 = 1; goto LABEL_14; } return v14 == 0; } //----- (0074AFF0) -------------------------------------------------------- signed int __thiscall sub_74AFF0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ebx int v4; // esi int v5; // eax signed int result; // eax signed int v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v2 = this; v3 = 0; v7 = 0; if ( this[2] <= 0 ) return 0; v8 = 0; do { if ( v3 >= 0 ) { v4 = v8 + v2[4]; if ( v4 ) { if ( *(_BYTE *)(v4 + 2) == 6 ) { v5 = sub_74E7D0((_DWORD *)v2[1], *(_WORD *)v4); if ( v5 ) { if ( *(_BYTE *)(v5 + 180) == 1 && *(_WORD *)(v5 + 182) == (_WORD)a2 && !(*(_BYTE *)(v4 + 29) & 2) ) v7 = 1; } } } } v8 += 32; ++v3; } while ( v3 < v2[2] ); result = v7; if ( v7 ) { (*(void (__thiscall **)(_DWORD *, int))*v2)(v2, a2); result = v7; } return result; } //----- (0074B090) -------------------------------------------------------- int __thiscall sub_74B090(void *this, unsigned __int16 *a2) { return (*(int (__stdcall **)(_DWORD))(*(_DWORD *)this + 24))(*a2); } //----- (0074B0B0) -------------------------------------------------------- int __thiscall sub_74B0B0(void *this, _BYTE *a2) { unsigned int v2; // edi void *v3; // ebx unsigned __int16 *v4; // esi int result; // eax v2 = 0; v3 = this; if ( *a2 ) { v4 = (unsigned __int16 *)(a2 + 1); do { result = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v3 + 8))(v3, *v4, v4[1]); ++v2; v4 += 2; } while ( v2 < (unsigned __int8)*a2 ); } return result; } //----- (0074B0F0) -------------------------------------------------------- signed int __thiscall sub_74B0F0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ebx unsigned __int16 *v4; // esi int v5; // eax int v6; // eax signed int v8; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = 0; v8 = 0; if ( this[2] <= 0 ) return 0; v9 = 0; do { if ( v3 >= 0 ) { v4 = (unsigned __int16 *)(v9 + v2[4]); if ( v4 ) { if ( *((_BYTE *)v4 + 2) == 6 ) { v5 = sub_74E7D0((_DWORD *)v2[1], *v4); if ( v5 ) { if ( *(_BYTE *)(v5 + 89) == 1 ) { v6 = *(unsigned __int8 *)(v5 + 90); if ( (unsigned __int8)v6 <= (unsigned __int8)a2 ) { v8 = 1; (*(void (__thiscall **)(_DWORD *, _DWORD, int, int))(*v2 + 48))(v2, *v4, a2, v6); } } } } } } v9 += 32; ++v3; } while ( v3 < v2[2] ); return v8; } //----- (0074B180) -------------------------------------------------------- BOOL __stdcall sub_74B180(int a1, int a2, int a3, int a4, unsigned int a5) { return a5 >= (unsigned int)(signed __int64)sqrt((double)(abs(a2 - a4) + abs(a1 - a4))); } //----- (0074B1E0) -------------------------------------------------------- signed int __stdcall sub_74B1E0(signed int a1, __int16 a2) { signed int result; // eax signed int v3; // edx _BYTE *v4; // eax result = a1; if ( a1 ) { if ( !*(_BYTE *)(a1 + 29) || *(_WORD *)(a1 + 30) != a2 ) { v3 = 0; v4 = (_BYTE *)(a1 + 96); while ( !*(v4 - 4) || *v4 && *v4 != 3 || *((_WORD *)v4 - 1) != a2 ) { ++v3; v4 += 8; if ( v3 >= 5 ) return 0; } } result = 1; } return result; } //----- (0074B240) -------------------------------------------------------- signed int __stdcall sub_74B240(int a1, __int16 a2) { signed int v2; // ecx _BYTE *v3; // eax if ( !a1 ) return 0; v2 = 0; v3 = (_BYTE *)(a1 + 96); while ( !*(v3 - 4) || *v3 != 3 || *((_WORD *)v3 - 1) != a2 ) { ++v2; v3 += 8; if ( v2 >= 5 ) return 0; } return 1; } //----- (0074B280) -------------------------------------------------------- signed __int16 __stdcall sub_74B280(int a1) { signed int v1; // eax _BYTE *v2; // ecx if ( !a1 ) return -1; v1 = 0; v2 = (_BYTE *)(a1 + 96); while ( !*(v2 - 4) || *v2 ) { ++v1; v2 += 8; if ( v1 >= 5 ) return -1; } return *(_WORD *)(a1 + 8 * v1 + 94); } //----- (0074B2C0) -------------------------------------------------------- signed int __thiscall sub_74B2C0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi unsigned __int8 v4; // al int v5; // eax char v6; // cl struct tm *v7; // esi int v8; // eax char v10; // [esp+8h] [ebp-78h] int v11; // [esp+14h] [ebp-6Ch] int v12; // [esp+18h] [ebp-68h] int v13; // [esp+1Ch] [ebp-64h] char v14; // [esp+2Ch] [ebp-54h] int v15; // [esp+38h] [ebp-48h] int v16; // [esp+3Ch] [ebp-44h] int v17; // [esp+40h] [ebp-40h] char v18; // [esp+50h] [ebp-30h] int v19; // [esp+5Ch] [ebp-24h] int v20; // [esp+60h] [ebp-20h] int v21; // [esp+64h] [ebp-1Ch] _DWORD *v22; // [esp+74h] [ebp-Ch] __time64_t Time; // [esp+78h] [ebp-8h] v2 = a2; v3 = this; if ( *(_BYTE *)(a2 + 26) ) { v4 = (*(int (**)(void))(*this + 100))(); if ( (unsigned __int8)(v4 + 5) < *(_BYTE *)(v2 + 27) || v4 > *(_BYTE *)(v2 + 28) ) return 0; } if ( *(_BYTE *)(v2 + 32) && (*(unsigned __int16 (__thiscall **)(_DWORD *, _DWORD))(*v3 + 104))(v3, *(unsigned __int16 *)(v2 + 34)) < *(_WORD *)(v2 + 36) ) { return 0; } if ( *(_BYTE *)(v2 + 38) ) { (*(void (__thiscall **)(_DWORD *, int *, _DWORD **, char *))(*v3 + 96))(v3, &a2, &v22, (char *)&Time + 4); if ( *(_WORD *)(v2 + 40) != (_WORD)a2 || !(*(int (__thiscall **)(_DWORD *, _DWORD *, _DWORD, _DWORD, _DWORD, _DWORD))(*v3 + 40))( v3, v22, HIDWORD(Time), *(_DWORD *)(v2 + 44), *(_DWORD *)(v2 + 48), *(_DWORD *)(v2 + 52)) ) { return 0; } } if ( *(_BYTE *)(v2 + 56) ) { v5 = sub_74A800(v3, *(_WORD *)(v2 + 58)); if ( v5 ) { v6 = *(_BYTE *)(v5 + 2); if ( v6 == 2 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v3 + 128))(v3, v5) != 1 ) goto LABEL_15; } else if ( v6 == 4 ) { goto LABEL_15; } } return 0; } LABEL_15: if ( *(_BYTE *)(v2 + 60) && *(_BYTE *)(v2 + 61) != (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 108))(v3) || *(_BYTE *)(v2 + 62) && *(_BYTE *)(v2 + 63) != (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 112))(v3) || *(_BYTE *)(v2 + 64) && *(_BYTE *)(v2 + 65) != (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 116))(v3) ) { return 0; } if ( *(_BYTE *)(v2 + 66) ) { _time64(&Time); qmemcpy(&v18, _localtime64(&Time), 0x24u); a2 = v2 + 72; qmemcpy(&v14, _localtime64((const __time64_t *)(v2 + 72)), 0x24u); v22 = (_DWORD *)(v2 + 80); v7 = _localtime64((const __time64_t *)(v2 + 80)); v8 = *(unsigned __int8 *)(v2 + 67); qmemcpy(&v10, v7, 0x24u); switch ( v8 ) { case 0: if ( v21 < v17 || v21 > v13 ) return 0; return 1; case 1: if ( v20 >= v16 && v20 <= v12 ) return 1; return 0; case 2: if ( v19 >= v15 && v19 <= v11 ) return 1; return 0; case 3: if ( Time >= *(_QWORD *)a2 && (SHIDWORD(Time) < v22[1] || SHIDWORD(Time) <= v22[1] && (unsigned int)Time <= *v22) ) { return 1; } return 0; default: return 1; } } return 1; } //----- (0074B4E0) -------------------------------------------------------- BOOL __thiscall sub_74B4E0(_DWORD *this, _BYTE *a2) { _DWORD *v2; // esi BOOL result; // eax unsigned __int8 v4; // al v2 = this; result = 0; if ( sub_74B2C0(this, (int)a2) ) { if ( !a2[26] || (v4 = (*(int (__thiscall **)(_DWORD *))(*v2 + 100))(v2), v4 >= a2[27]) && v4 <= a2[28] ) result = 1; } return result; } //----- (0074B520) -------------------------------------------------------- BOOL __thiscall sub_74B520(_DWORD **this, char a2) { _DWORD *v2; // edi int v3; // eax _BYTE *v4; // esi BOOL result; // eax unsigned __int8 v6; // al v2 = this; v3 = sub_74E7D0(this[1], a2); v4 = (_BYTE *)v3; result = 0; if ( v3 ) { if ( sub_74B2C0(v2, v3) ) { if ( !v4[26] || (v6 = (*(int (__thiscall **)(_DWORD *))(*v2 + 100))(v2), v6 >= v4[27]) && v6 <= v4[28] ) result = 1; } } return result; } //----- (0074B580) -------------------------------------------------------- signed int __thiscall sub_74B580(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // eax int v4; // ebx signed int v6; // edx _BYTE *v7; // ecx unsigned __int16 *v8; // esi int v9; // [esp+8h] [ebp-Ch] int v10; // [esp+Ch] [ebp-8h] int v11; // [esp+10h] [ebp-4h] v2 = this; v3 = sub_74E7D0(this[1], *(_WORD *)a2); v4 = v3; if ( v3 && (!*(_BYTE *)(v3 + 89) || ((unsigned __int8 (__thiscall *)(_DWORD **))(*v2)[25])(v2) >= *(_BYTE *)(v3 + 90)) ) { v6 = 0; v7 = (_BYTE *)(v4 + 96); while ( !*(v7 - 4) || (unsigned __int8)(*v7 - 1) > 2u || *(_BYTE *)(v6 + a2 + 24) >= v7[1] ) { ++v6; v7 += 8; if ( v6 >= 5 ) { v11 = 0; v8 = (unsigned __int16 *)(v4 + 134); do { if ( *((_BYTE *)v8 - 2) && (((unsigned __int8 (__thiscall *)(_DWORD **, _DWORD))(*v2)[31])(v2, *v8) == 1 || ((unsigned __int16 (__thiscall *)(_DWORD **, _DWORD))(*v2)[26])(v2, *v8) < v8[1]) ) { return 0; } v8 += 3; ++v11; } while ( v11 < 5 ); if ( *(_BYTE *)(v4 + 162) ) { ((void (__thiscall *)(_DWORD **, int *, int *, int *))(*v2)[24])(v2, &v11, &v9, &v10); if ( *(_WORD *)(v4 + 164) != (_WORD)v11 || !((int (__thiscall *)(_DWORD **, int, int, _DWORD, _DWORD, _DWORD))(*v2)[10])( v2, v9, v10, *(_DWORD *)(v4 + 168), *(_DWORD *)(v4 + 172), *(_DWORD *)(v4 + 176)) ) { return 0; } } if ( *(_BYTE *)(v4 + 180) && !(*(_BYTE *)(a2 + 29) & 2) || *(_BYTE *)(v4 + 184) && *(_BYTE *)(v4 + 185) != ((unsigned __int8 (__thiscall *)(_DWORD **))(*v2)[27])(v2) || *(_BYTE *)(v4 + 186) && *(_BYTE *)(v4 + 187) != ((unsigned __int8 (__thiscall *)(_DWORD **))(*v2)[28])(v2) || *(_BYTE *)(v4 + 188) && *(_WORD *)(v4 + 190) <= *(_WORD *)(a2 + 30) ) { return 0; } return 1; } } } return 0; } //----- (0074B710) -------------------------------------------------------- char __thiscall sub_74B710(_DWORD **this, _WORD *a2) { _WORD *v2; // esi _DWORD *v3; // edi char result; // al int v5; // eax int v6; // eax char v7; // [esp+13h] [ebp+Bh] v2 = a2; v3 = this; if ( !a2 ) return 0; v5 = sub_74E7D0(this[1], *a2); if ( !v5 || *(_BYTE *)(v5 + 17) != 10 ) return 0; v7 = 0; switch ( *(unsigned __int8 *)(v5 + 19) ) { case 1u: v6 = v3[44]; goto LABEL_7; case 2u: v6 = v3[43]; goto LABEL_7; case 3u: v6 = v3[42]; goto LABEL_7; case 4u: v6 = v3[41]; LABEL_7: if ( *(_QWORD *)((char *)v2 + 11) >= (signed __int64)v6 ) goto LABEL_13; result = 1; break; default: v7 = 0; LABEL_13: result = v7; break; } return result; } //----- (0074B7B0) -------------------------------------------------------- _DWORD *__thiscall sub_74B7B0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = &CQuest::`vftable'; this[1] = a2; this[2] = 0; this[5] = _time32(0); v2[3] = 0; v2[4] = 0; v2[6] = 0; v2[7] = 0; v2[8] = 0; v2[10] = 21; v2[11] = 21; v2[12] = 21; v2[13] = 21; v2[18] = 21; v2[19] = 21; v2[20] = 21; v2[21] = 21; v2[22] = 21; v2[23] = 21; v2[24] = 21; v2[25] = 21; v2[26] = 21; v2[27] = 21; v2[28] = 21; v2[17] = 0; v2[15] = 1; v2[29] = 2; v2[14] = 2; v2[16] = 2; v2[9] = 22; v2[31] = 11; v2[34] = 11; v2[40] = 11; v2[33] = 0; v2[32] = 1; v2[36] = 2; v2[37] = 2; v2[38] = 2; v2[35] = 3; v2[39] = 4; v2[30] = 5; return v2; } // A08A44: using guessed type void *CQuest::`vftable'; //----- (0074B890) -------------------------------------------------------- int __thiscall sub_74B890(int this, __int16 a2) { int v2; // esi int v3; // eax _WORD *v4; // edx int result; // eax if ( !*(_DWORD *)(this + 12) ) goto LABEL_12; v2 = *(_DWORD *)(this + 8); v3 = 0; if ( v2 <= 0 ) goto LABEL_12; v4 = *(_WORD **)(this + 16); while ( *v4 != a2 ) { ++v3; v4 += 16; if ( v3 >= v2 ) return sub_74ABB0((_DWORD **)this, 0); } if ( v3 != -1 ) result = sub_74ABB0((_DWORD **)this, *(_DWORD *)(this + 16) + 32 * v3); else LABEL_12: result = sub_74ABB0((_DWORD **)this, 0); return result; } //----- (0074B900) -------------------------------------------------------- int __thiscall sub_74B900(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx int v4; // eax _WORD *v5; // ecx unsigned __int8 v6; // al int result; // eax int v8; // eax bool v9; // zf int v10; // eax int v11; // ecx v2 = this; if ( !this[3] ) goto LABEL_6; v3 = this[2]; v4 = 0; if ( v3 <= 0 ) goto LABEL_6; v5 = (_WORD *)this[4]; while ( *v5 != *(_WORD *)(a2 + 4) ) { ++v4; v5 += 16; if ( v4 >= v3 ) goto LABEL_6; } if ( v4 == -1 || (v8 = 32 * v4, v9 = v2[4] + v8 == 0, v10 = v2[4] + v8, v11 = v10, v9) ) { LABEL_6: if ( sub_74B2C0(v2, a2) && (!*(_BYTE *)(a2 + 26) || (v6 = (*(int (__thiscall **)(_DWORD *))(*v2 + 100))(v2), v6 >= *(_BYTE *)(a2 + 27)) && v6 <= *(_BYTE *)(a2 + 28)) ) { LABEL_22: result = 5; } else { LABEL_10: result = sub_74B2C0(v2, a2) != 0 ? 3 : 0; } } else { result = *(unsigned __int8 *)(v10 + 2); switch ( result ) { case 2: if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v2 + 128))(v2, v11) == 1 && sub_74B4E0(v2, (_BYTE *)a2) == 1 ) { goto LABEL_22; } result = 2; break; case 3: if ( !sub_74B4E0(v2, (_BYTE *)a2) ) goto LABEL_10; result = 5; break; case 4: result = sub_74B4E0(v2, (_BYTE *)a2) != 0 ? 4 : 0; break; case 5: result = sub_74B4E0(v2, (_BYTE *)a2) != 0 ? 5 : 0; break; case 6: case 8: result = sub_74B580((_DWORD **)v2, v11) != 0 ? 8 : 6; break; case 20: result = sub_74B4E0(v2, (_BYTE *)a2) != 0 ? 0x14 : 0; break; default: return result; } } return result; } //----- (0074BA80) -------------------------------------------------------- int __thiscall sub_74BA80(_DWORD **this, char a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = sub_74E7D0(this[1], a2); if ( result ) result = sub_74B900(v2, result); return result; } //----- (0074BAB0) -------------------------------------------------------- BOOL __thiscall sub_74BAB0(_DWORD **this, char a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax BOOL result; // eax v2 = this; v3 = sub_74E7D0(this[1], a2); result = 0; if ( v3 ) { v4 = sub_74B900(v2, v3); if ( v4 == 6 || v4 == 7 || v4 == 8 ) result = 1; } return result; } //----- (0074BAF0) -------------------------------------------------------- int __thiscall sub_74BAF0(int this, int a2) { _DWORD *v2; // esi int v3; // edi int result; // eax int v5; // eax v2 = (_DWORD *)this; if ( a2 >= *(_DWORD *)(this + 8) ) return 0; if ( a2 < 0 ) return 0; v3 = *(_DWORD *)(this + 16) + 32 * a2; if ( !v3 ) return 0; v5 = sub_74E7D0(*(_DWORD **)(this + 4), *(_WORD *)v3); if ( v5 ) { LOBYTE(result) = sub_74B900(v2, v5); *(_BYTE *)(v3 + 2) = result; result = (unsigned __int8)result; } else { *(_BYTE *)(v3 + 2) = 0; result = 0; } return result; } //----- (0074BB50) -------------------------------------------------------- BOOL __thiscall sub_74BB50(_DWORD *this, int a2, signed int a3, unsigned int a4, char a5, int a6) { int v6; // ebx __int16 v7; // ST04_2 _DWORD *v8; // edi int v9; // eax signed int v11; // [esp+14h] [ebp+8h] v6 = a2; v7 = *(_WORD *)a2; v8 = this; *(_DWORD *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = a3; if ( !sub_74B1E0(a3, v7) ) return 0; v9 = sub_74B900(v8, a3); v11 = v9; switch ( v9 ) { case 0: case 1: case 2: case 3: return 0; case 4: case 7: if ( a3 && *(_BYTE *)(a3 + 29) && *(_WORD *)(a3 + 30) == *(_WORD *)v6 ) break; return 0; case 5: case 20: if ( a3 && *(_BYTE *)(a3 + 29) && *(_WORD *)(a3 + 30) == *(_WORD *)v6 ) break; return 0; case 6: if ( sub_74B240(a3, *(_WORD *)v6) || a3 && *(_BYTE *)(a3 + 29) && *(_WORD *)(a3 + 30) == *(_WORD *)v6 ) goto LABEL_22; return 0; case 8: if ( *(_WORD *)v6 == sub_74B280(a3) ) goto LABEL_22; if ( !a3 || !*(_BYTE *)(a3 + 29) || *(_WORD *)(a3 + 30) != *(_WORD *)v6 ) return 0; v11 = 6; LABEL_22: v9 = v11; break; default: break; } if ( a5 == 1 && (v9 == 5 || v9 == 20) && (unsigned int)*(unsigned __int8 *)(a3 + 27) + 5 < a4 ) v9 = 9; *(_DWORD *)(v6 + 8) = v9; *(_DWORD *)(v6 + 12) = *(unsigned __int8 *)(a3 + 27); return v9 != 0; } //----- (0074BCB0) -------------------------------------------------------- signed int __thiscall sub_74BCB0(_DWORD *this, int a2, __int16 a3) { int v3; // edi int v4; // ebx unsigned __int16 *v5; // esi int v6; // eax int v7; // ebx int v8; // eax signed int v9; // ecx unsigned __int8 v10; // al unsigned __int8 v11; // al int v12; // ebx int v13; // eax signed int v15; // [esp+8h] [ebp-18h] int v16; // [esp+Ch] [ebp-14h] int v17; // [esp+10h] [ebp-10h] int v18; // [esp+14h] [ebp-Ch] int v19; // [esp+18h] [ebp-8h] int v20; // [esp+1Ch] [ebp-4h] v3 = (int)this; v4 = 0; v15 = 0; v19 = 0; if ( this[2] <= 0 ) return 0; v18 = 0; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v18 + *(_DWORD *)(v3 + 16)); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 && a3 == *v5 ) { v6 = sub_74E7D0(*(_DWORD **)(v3 + 4), *v5); v17 = v6; if ( v6 ) { v7 = 0; v8 = v6 + 94; v20 = 0; v16 = v8; do { if ( *(_BYTE *)(v8 - 2) == 1 && *(_WORD *)v8 == (_WORD)a2 && *(_BYTE *)(v8 + 2) == 1 ) { v9 = *(unsigned __int8 *)(v8 + 3); v10 = *((_BYTE *)v5 + v7 + 24); if ( v10 < v9 ) { v11 = v10 + 1; *((_BYTE *)v5 + v20 + 24) = v11; v15 = 1; (*(void (__thiscall **)(int, _DWORD, int, _DWORD, signed int))(*(_DWORD *)v3 + 44))( v3, *v5, a2, v11, v9); v12 = *((unsigned __int8 *)v5 + 2); v13 = sub_74BAF0(v3, v19); if ( v12 == 6 ) { if ( v13 == 8 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v3 + 80))(v3, v5, v17); } else if ( v13 == 7 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v3 + 84))(v3, v5, v17); } } } } v7 = v20 + 1; v8 = v16 + 8; v20 = v7; v16 += 8; } while ( v7 < 5 ); v4 = v19; } } } } v18 += 32; v19 = ++v4; } while ( v4 < *(_DWORD *)(v3 + 8) ); return v15; } //----- (0074BDF0) -------------------------------------------------------- signed int __thiscall sub_74BDF0(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // ebx unsigned __int16 *v5; // edi int v6; // eax _WORD *v7; // ecx signed int v8; // ebx int v9; // ebx int v10; // eax bool v11; // zf signed int v13; // [esp+8h] [ebp-18h] signed int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] int v16; // [esp+14h] [ebp-Ch] int v17; // [esp+18h] [ebp-8h] int v18; // [esp+1Ch] [ebp-4h] v3 = (int)this; v4 = 0; v13 = 0; v18 = 0; if ( this[2] <= 0 ) return 0; v17 = 0; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v17 + *(_DWORD *)(v3 + 16)); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 ) { v6 = sub_74E7D0(*(_DWORD **)(v3 + 4), *v5); v16 = v6; if ( v6 ) { v7 = (_WORD *)(v6 + 134); v15 = v6 + 134; v14 = 5; do { if ( *((_BYTE *)v7 - 2) == 1 && *v7 == (_WORD)a2 ) { v8 = (unsigned __int16)v7[1]; (*(void (__thiscall **)(int, _DWORD, int, int, signed int))(*(_DWORD *)v3 + 52))(v3, *v5, a2, a3, v8); if ( (unsigned __int16)a3 <= v8 ) { v9 = *((unsigned __int8 *)v5 + 2); v13 = 1; v10 = sub_74BAF0(v3, v18); if ( v9 == 6 ) { if ( v10 == 8 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v3 + 80))(v3, v5, v16); } else if ( v10 == 7 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v3 + 84))(v3, v5, v16); } } } } v7 = (_WORD *)(v15 + 6); v11 = v14-- == 1; v15 += 6; } while ( !v11 ); v4 = v18; } } } } v17 += 32; v18 = ++v4; } while ( v4 < *(_DWORD *)(v3 + 8) ); return v13; } //----- (0074BF00) -------------------------------------------------------- signed int __thiscall sub_74BF00(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // edi unsigned __int16 *v5; // ebx int v6; // eax _WORD *v7; // ecx signed int v8; // edi int v9; // edi int v10; // eax void (__thiscall *v11)(_DWORD *, unsigned __int16 *, int); // edx bool v12; // zf int v14; // [esp+8h] [ebp-1Ch] signed int v15; // [esp+Ch] [ebp-18h] signed int v16; // [esp+10h] [ebp-14h] int v17; // [esp+14h] [ebp-10h] int v18; // [esp+18h] [ebp-Ch] int v19; // [esp+1Ch] [ebp-8h] int v20; // [esp+20h] [ebp-4h] v3 = this; v4 = 0; v15 = 0; v19 = 0; if ( this[2] > 0 ) { v20 = 0; while ( 1 ) { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v20 + v3[4]); if ( v5 ) { v6 = sub_74E7D0((_DWORD *)v3[1], *v5); v18 = v6; if ( v6 ) break; } } LABEL_24: v20 += 32; v19 = ++v4; if ( v4 >= v3[2] ) return v15; } v7 = (_WORD *)(v6 + 134); v17 = v6 + 134; v16 = 5; while ( 1 ) { if ( *((_BYTE *)v7 - 2) != 1 ) goto LABEL_22; if ( *v7 != (_WORD)a2 ) goto LABEL_22; v8 = (unsigned __int16)v7[1]; (*(void (__thiscall **)(_DWORD *, _DWORD, int, int, signed int))(*v3 + 56))(v3, *v5, a2, a3, v8); if ( (unsigned __int16)a3 >= v8 ) goto LABEL_22; v15 = 1; v14 = *((unsigned __int8 *)v5 + 2); if ( v19 < v3[2] && (v9 = v20 + v3[4]) != 0 ) { v10 = sub_74E7D0((_DWORD *)v3[1], *(_WORD *)v9); if ( v10 ) LOBYTE(v10) = sub_74B900(v3, v10); *(_BYTE *)(v9 + 2) = v10; v10 = (unsigned __int8)v10; } else { v10 = 0; } if ( v14 != 8 ) goto LABEL_22; if ( v10 == 6 ) break; if ( v10 == 7 ) { v11 = *(void (__thiscall **)(_DWORD *, unsigned __int16 *, int))(*v3 + 84); goto LABEL_21; } LABEL_22: v7 = (_WORD *)(v17 + 6); v12 = v16-- == 1; v17 += 6; if ( v12 ) { v4 = v19; goto LABEL_24; } } v11 = *(void (__thiscall **)(_DWORD *, unsigned __int16 *, int))(*v3 + 88); LABEL_21: v11(v3, v5, v18); goto LABEL_22; } return 0; } //----- (0074C040) -------------------------------------------------------- int __thiscall sub_74C040(_DWORD *this) { _DWORD *v1; // edi void (__thiscall *v2)(_DWORD *, int *, int *, int *); // edx int v3; // eax int v4; // ecx unsigned __int16 *v5; // esi int v6; // eax void (__thiscall *v7)(_DWORD *, int, int); // eax int v8; // ST0C_4 int v9; // ebx int v10; // eax int v11; // eax int v13; // [esp+8h] [ebp-1Ch] int v14; // [esp+Ch] [ebp-18h] int v15; // [esp+10h] [ebp-14h] int v16; // [esp+14h] [ebp-10h] int v17; // [esp+18h] [ebp-Ch] int v18; // [esp+1Ch] [ebp-8h] int v19; // [esp+20h] [ebp-4h] v1 = this; v2 = *(void (__thiscall **)(_DWORD *, int *, int *, int *))(*this + 96); v15 = 0; v2(this, &v17, &v13, &v14); v3 = v1[2]; v4 = 0; v19 = 0; if ( v3 <= 0 ) return 0; v18 = 0; if ( v3 <= 0 ) goto LABEL_16; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v18 + v1[4]); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 ) { v6 = sub_74E7D0((_DWORD *)v1[1], *v5); v16 = v6; if ( v6 ) { if ( *(_BYTE *)(v6 + 162) == 1 && *(_WORD *)(v6 + 164) == (_WORD)v17 && !(*((_BYTE *)v5 + 29) & 1) ) { if ( (*(int (__thiscall **)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD))(*v1 + 40))( v1, v13, v14, *(_DWORD *)(v6 + 168), *(_DWORD *)(v6 + 172), *(_DWORD *)(v6 + 176)) ) { *((_BYTE *)v5 + 29) |= 1u; v7 = *(void (__thiscall **)(_DWORD *, int, int))(*v1 + 60); v8 = *v5; v15 = 1; v7(v1, v8, v17); v9 = *((unsigned __int8 *)v5 + 2); v10 = sub_74BAF0((int)v1, v19); if ( v9 == 6 ) { if ( v10 == 8 ) { (*(void (__thiscall **)(_DWORD *, unsigned __int16 *, int))(*v1 + 80))(v1, v5, v16); } else if ( v10 == 7 ) { (*(void (__thiscall **)(_DWORD *, unsigned __int16 *, int))(*v1 + 84))(v1, v5, v16); } } } } } } } } LABEL_16: v11 = v1[2]; v18 += 32; v4 = v19 + 1; v19 = v4; } while ( v4 < v11 ); return v15; } //----- (0074C180) -------------------------------------------------------- signed int __thiscall sub_74C180(_DWORD *this, int a2) { int v2; // edi int v3; // eax int v4; // ecx unsigned __int16 *v5; // esi int v6; // eax char v7; // al int v8; // ebx int v9; // eax signed int v11; // [esp+4h] [ebp-10h] int v12; // [esp+8h] [ebp-Ch] int v13; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] v2 = (int)this; v3 = this[2]; v4 = 0; v11 = 0; v14 = 0; if ( v3 <= 0 ) return 0; v13 = 0; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v13 + *(_DWORD *)(v2 + 16)); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 ) { v6 = sub_74E7D0(*(_DWORD **)(v2 + 4), *v5); v12 = v6; if ( v6 ) { if ( *(_BYTE *)(v6 + 180) == 1 && *(_WORD *)(v6 + 182) == (_WORD)a2 ) { v7 = *((_BYTE *)v5 + 29); if ( !(v7 & 2) ) { *((_BYTE *)v5 + 29) = v7 | 2; v11 = 1; (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v2 + 64))(v2, *v5, a2); v8 = *((unsigned __int8 *)v5 + 2); v9 = sub_74BAF0(v2, v14); if ( v8 == 6 ) { if ( v9 == 8 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 80))(v2, v5, v12); } else if ( v9 == 7 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 84))(v2, v5, v12); } } } } } } } } v13 += 32; v4 = v14 + 1; v14 = v4; } while ( v4 < *(_DWORD *)(v2 + 8) ); return v11; } //----- (0074C270) -------------------------------------------------------- signed int __thiscall sub_74C270(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // ecx unsigned __int16 *v5; // edi int v6; // eax int v7; // ebx int v8; // eax signed int v10; // [esp+4h] [ebp-10h] int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v2 = (int)this; v3 = this[2]; v4 = 0; v10 = 0; v13 = 0; if ( v3 <= 0 ) return 0; v12 = 0; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v12 + *(_DWORD *)(v2 + 16)); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 ) { v6 = sub_74E7D0(*(_DWORD **)(v2 + 4), *v5); v11 = v6; if ( v6 ) { if ( *(_BYTE *)(v6 + 184) == 1 && *(_BYTE *)(v6 + 185) == (_BYTE)a2 ) { v10 = 1; (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v2 + 68))(v2, *v5, a2); v7 = *((unsigned __int8 *)v5 + 2); v8 = sub_74BAF0(v2, v13); if ( v7 == 6 ) { if ( v8 == 8 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 80))(v2, v5, v11); } else if ( v8 == 7 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 84))(v2, v5, v11); } } } } } } } v12 += 32; v4 = v13 + 1; v13 = v4; } while ( v4 < *(_DWORD *)(v2 + 8) ); return v10; } //----- (0074C350) -------------------------------------------------------- signed int __thiscall sub_74C350(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // ecx unsigned __int16 *v5; // edi int v6; // eax int v7; // ebx int v8; // eax signed int v10; // [esp+4h] [ebp-10h] int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v2 = (int)this; v3 = this[2]; v4 = 0; v10 = 0; v13 = 0; if ( v3 <= 0 ) return 0; v12 = 0; do { if ( v4 >= 0 ) { v5 = (unsigned __int16 *)(v12 + *(_DWORD *)(v2 + 16)); if ( v5 ) { if ( *((_BYTE *)v5 + 2) == 6 ) { v6 = sub_74E7D0(*(_DWORD **)(v2 + 4), *v5); v11 = v6; if ( v6 ) { if ( *(_BYTE *)(v6 + 186) == 1 && *(_BYTE *)(v6 + 187) == (_BYTE)a2 ) { v10 = 1; (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v2 + 72))(v2, *v5, a2); v7 = *((unsigned __int8 *)v5 + 2); v8 = sub_74BAF0(v2, v13); if ( v7 == 6 ) { if ( v8 == 8 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 80))(v2, v5, v11); } else if ( v8 == 7 ) { (*(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v2 + 84))(v2, v5, v11); } } } } } } } v12 += 32; v4 = v13 + 1; v13 = v4; } while ( v4 < *(_DWORD *)(v2 + 8) ); return v10; } //----- (0074C430) -------------------------------------------------------- signed int __thiscall sub_74C430(void *this) { int v1; // esi __time32_t v2; // eax unsigned __int16 v4; // cx int v5; // eax unsigned __int16 *v6; // edi int v7; // eax int v8; // ebx int v9; // eax int v10; // eax int v11; // ST18_4 int v12; // eax void (__thiscall *v13)(int, unsigned __int16 *, int); // eax int v14; // [esp+Ch] [ebp-10h] signed int v15; // [esp+10h] [ebp-Ch] int v16; // [esp+14h] [ebp-8h] int v17; // [esp+18h] [ebp-4h] v1 = (int)this; v15 = 0; v2 = _time32(0); if ( v2 == *(_DWORD *)(v1 + 20) ) return 0; v4 = *(_WORD *)(v1 + 20) - v2; *(_DWORD *)(v1 + 20) = v2; v5 = 0; v14 = v4; v17 = 0; if ( *(_DWORD *)(v1 + 8) > 0 ) { v16 = 0; if ( *(_DWORD *)(v1 + 8) <= 0 ) goto LABEL_17; while ( 1 ) { if ( v5 < 0 ) goto LABEL_17; v6 = (unsigned __int16 *)(v16 + *(_DWORD *)(v1 + 16)); if ( !v6 ) goto LABEL_17; if ( *((_BYTE *)v6 + 2) != 6 ) goto LABEL_17; v7 = sub_74E7D0(*(_DWORD **)(v1 + 4), *v6); v8 = v7; if ( !v7 ) goto LABEL_17; if ( *(_BYTE *)(v7 + 188) != 1 ) goto LABEL_17; v9 = v6[15]; if ( *(_WORD *)(v8 + 190) < (unsigned __int16)v9 ) goto LABEL_17; v10 = v14 + v9; v15 = 1; v6[15] = v10; (*(void (__thiscall **)(int, _DWORD, int, _DWORD))(*(_DWORD *)v1 + 76))( v1, *v6, v10, *(unsigned __int16 *)(v8 + 190)); v11 = *((unsigned __int8 *)v6 + 2); v12 = sub_74BAF0(v1, v17); if ( v11 != 6 ) goto LABEL_17; if ( v12 == 8 ) break; if ( v12 == 7 ) { v13 = *(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v1 + 84); goto LABEL_16; } LABEL_17: v16 += 32; v5 = v17 + 1; v17 = v5; if ( v5 >= *(_DWORD *)(v1 + 8) ) return v15; } v13 = *(void (__thiscall **)(int, unsigned __int16 *, int))(*(_DWORD *)v1 + 80); LABEL_16: v13(v1, v6, v8); goto LABEL_17; } return v15; } //----- (0074C540) -------------------------------------------------------- int __thiscall sub_74C540(_DWORD *this) { _DWORD *v1; // edi int result; // eax int v3; // ebx int v4; // esi int v5; // eax int v6; // [esp+8h] [ebp-4h] v1 = this; result = this[2]; v3 = 0; if ( result > 0 ) { v6 = 0; do { if ( v3 >= 0 ) { v4 = v6 + v1[4]; if ( v4 ) { v5 = sub_74E7D0((_DWORD *)v1[1], *(_WORD *)v4); if ( v5 ) LOBYTE(v5) = sub_74B900(v1, v5); *(_BYTE *)(v4 + 2) = v5; } } result = v1[2]; v6 += 32; ++v3; } while ( v3 < result ); } return result; } //----- (0074C590) -------------------------------------------------------- BOOL __thiscall sub_74C590(_DWORD *this, __int16 a2) { _DWORD *v2; // esi signed int i; // edi _DWORD *v4; // ecx int v5; // eax unsigned __int16 v6; // ax int v7; // eax void *v8; // eax signed int v10; // edx int v11; // edi _DWORD *v12; // ecx int v13; // eax unsigned __int16 v14; // ax int v15; // eax int v16; // ebx int v17; // eax int v18; // eax __int16 v19; // [esp+Ch] [ebp-18h] int v20; // [esp+14h] [ebp-10h] int v21; // [esp+1Ch] [ebp-8h] int v22; // [esp+20h] [ebp-4h] v2 = this; this[7] = 0; this[6] = 0; v19 = a2; for ( i = 0; ; ++i ) { v4 = (_DWORD *)v2[1]; v5 = v4[4]; v6 = v5 ? *(_WORD *)(v5 + 2) : 0; if ( i >= v6 ) break; v7 = sub_74E2E0(v4, i); if ( v7 ) { if ( sub_74BB50(v2, (int)&v19, v7, 0, 0, 0) ) ++v2[7]; } } if ( v2[7] > v2[6] && v2[8] ) { operator delete[]((void *)v2[8]); v2[8] = 0; } if ( !v2[8] ) { v8 = operator new[](16 * v2[7]); v2[8] = v8; if ( !v8 ) { v2[7] = 0; v2[6] = 0; return 0; } v2[6] = v2[7]; } v10 = 0; v21 = 0; v22 = 0; v11 = 0; while ( 1 ) { v12 = (_DWORD *)v2[1]; v13 = v12[4]; v14 = v13 ? *(_WORD *)(v13 + 2) : 0; if ( v10 >= v14 ) break; v15 = sub_74E2E0(v12, v10); v16 = v15; if ( v15 ) { if ( sub_74BB50(v2, (int)&v19, v15, 0, 0, 0) ) { *(_WORD *)(v11 + v2[8]) = a2; v17 = v20; *(_DWORD *)(v2[8] + v11 + 4) = v16; *(_DWORD *)(v2[8] + v11 + 8) = v17; v18 = v21; *(_DWORD *)(v2[8] + v11 + 12) = *(unsigned __int8 *)(v16 + 27); v11 += 16; v21 = v18 + 1; if ( v18 + 1 >= v2[6] ) break; } } v10 = ++v22; } return v21 != 0; } //----- (0074C6E0) -------------------------------------------------------- void __thiscall sub_74C6E0(_DWORD *this, _WORD *a2, int a3, unsigned int a4, int a5) { _DWORD *v5; // ebx _DWORD *v6; // esi __int16 v7; // ax int v8; // edi _DWORD *v9; // ecx _DWORD *v10; // ecx int v11; // edx int v12; // eax int v13; // eax int v14; // edx int v15; // esi bool v16; // zf unsigned int v17; // ecx unsigned int v18; // edx signed int v19; // ecx int *v20; // [esp+10h] [ebp-3Ch] int v21; // [esp+18h] [ebp-34h] void *v22; // [esp+20h] [ebp-2Ch] int v23; // [esp+24h] [ebp-28h] int v24; // [esp+28h] [ebp-24h] int v25; // [esp+30h] [ebp-1Ch] _DWORD *v26; // [esp+34h] [ebp-18h] int v27; // [esp+38h] [ebp-14h] int v28; // [esp+3Ch] [ebp-10h] int v29; // [esp+48h] [ebp-4h] v5 = this; v26 = this; v6 = a2; v7 = *a2; v8 = 0; v27 = 0; v28 = -1; LOWORD(v20) = v7; v22 = 0; v23 = 0; v24 = 0; v9 = (_DWORD *)this[1]; v29 = 0; sub_74E5C0(v9, v20, (const void **)&v22); v10 = v22; v11 = 0; v12 = (v23 - (signed int)v22) >> 2; v25 = 0; if ( v12 <= 0 ) goto LABEL_2; while ( 1 ) { if ( v12 <= (unsigned int)v11 ) std::_Xout_of_range("invalid vector subscript"); v15 = v10[v11]; if ( sub_74BB50(v5, (int)&v20, v10[v11], a4, 1, a5) ) { if ( v21 == a3 ) { if ( v27 ) goto LABEL_28; v16 = *(_BYTE *)(v15 + 26) == 0; v27 = v15; v8 = v21; if ( !v16 ) { v28 = *(unsigned __int8 *)(v15 + 27); goto LABEL_28; } LABEL_27: v28 = -1; goto LABEL_28; } v17 = v26[v21 + 9]; v18 = v26[v8 + 9]; if ( v17 < v18 || v8 == a3 ) { v16 = *(_BYTE *)(v15 + 26) == 0; v27 = v15; v8 = v21; if ( !v16 ) { v28 = *(unsigned __int8 *)(v15 + 27); goto LABEL_28; } goto LABEL_27; } if ( v17 == v18 ) { if ( *(_BYTE *)(v15 + 26) ) v19 = *(unsigned __int8 *)(v15 + 27); else v19 = -1; if ( v19 < v28 ) { v27 = v15; v8 = v21; v28 = v19; } } else if ( v17 > v18 && (v8 == 9 || v8 == 20) ) { v16 = *(_BYTE *)(v15 + 26) == 0; v27 = v15; v8 = v21; if ( !v16 ) { v28 = *(unsigned __int8 *)(v15 + 27); goto LABEL_28; } goto LABEL_27; } } LABEL_28: v10 = v22; v11 = v25 + 1; v12 = (v23 - (signed int)v22) >> 2; v25 = v11; if ( v11 >= v12 ) break; v5 = v26; } v6 = a2; LABEL_2: v13 = v27; v14 = v28; v6[2] = v8; v6[1] = v13; v6[3] = v14; if ( v10 ) operator delete(v10); } //----- (0074C880) -------------------------------------------------------- char __thiscall sub_74C880(unsigned __int16 *this, unsigned __int16 *a2) { unsigned __int16 v2; // ax char result; // al v2 = *this; if ( *this >= 0x1F40u ) { if ( v2 >= 0x251Cu ) { if ( v2 < 0x251Cu || v2 >= 0x2904u ) { if ( v2 < 0x2904u || v2 >= 0x34BCu ) { if ( v2 < 0x34BCu || v2 >= 0x42BCu ) { if ( v2 < 0x42BCu || v2 >= 0x43BCu ) { if ( v2 < 0x43BCu || v2 >= 0x4BBCu ) { if ( v2 < 0x4BBCu || v2 >= 0x4FA4u ) { if ( v2 < 0x4FA4u || v2 >= 0x509Eu ) { if ( v2 < 0x509Eu || v2 >= 0x5486u ) { if ( v2 < 0x5486u || v2 >= 0x567Au ) { if ( v2 < 0x567Au || v2 >= 0x5A62u ) { if ( v2 < 0x5C56u || v2 >= 0x6232u ) { result = -1; *a2 = -1; } else { *a2 = v2 - 23638; result = 12; } } else { *a2 = v2 - 22138; result = 11; } } else { *a2 = v2 - 21638; result = 10; } } else { *a2 = v2 - 20638; result = 7; } } else { *a2 = v2 - 20388; result = 6; } } else { *a2 = v2 - 19388; result = 9; } } else { *a2 = v2 - 17340; result = 8; } } else { *a2 = v2 - 17084; result = 4; } } else { *a2 = v2 - 13500; result = 0; } } else { *a2 = v2 - 10500; result = 1; } } else { *a2 = v2 - 9500; result = 3; } } else { *a2 = v2 - 8000; result = 2; } } else { *a2 = v2; result = 5; } return result; } //----- (0074CA60) -------------------------------------------------------- _DWORD *__thiscall sub_74CA60(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_747420(this); v1[16] = 0; v1[17] = 0; return v1; } //----- (0074CA80) -------------------------------------------------------- BOOL __thiscall sub_74CA80(void **this, char *a2, int a3, int a4) { void **v4; // esi unsigned int v5; // edi BOOL result; // eax _DWORD *v7; // eax unsigned int v8; // ebx unsigned __int16 *v9; // eax unsigned __int8 v10; // cl unsigned int v11; // eax void *v12; // edi void *v13; // eax size_t v14; // ST08_4 unsigned int v15; // edi unsigned __int16 *v16; // eax v4 = this; v5 = 0; if ( this[16] ) { operator delete[](this[16]); v4[16] = 0; } v4[17] = 0; result = sub_747820(v4, a2, a3, a4); if ( result ) { v7 = v4[13]; if ( v7 ) v8 = v7[10]; else v8 = 0; if ( v8 ) { while ( 1 ) { v9 = (unsigned __int16 *)sub_7474E0(v4, v5); v10 = *((_BYTE *)v9 + 2); if ( v10 >= 0xAu ) break; v11 = v10 + 10 * *v9; if ( (unsigned int)v4[17] <= v11 ) v4[17] = (void *)(v11 + 1); if ( ++v5 >= v8 ) goto LABEL_12; } result = 0; } else { LABEL_12: v12 = v4[17]; if ( v12 ) { v13 = operator new[](4 * (_DWORD)v12); v14 = 4 * (_DWORD)v4[17]; v4[16] = v13; memset(v13, 0, v14); v15 = 0; if ( v8 ) { do { v16 = (unsigned __int16 *)sub_7474E0(v4, v15++); *((_DWORD *)v4[16] + *((unsigned __int8 *)v16 + 2) + 10 * *v16) = v16; } while ( v15 < v8 ); } } result = 1; } } return result; } //----- (0074CB80) -------------------------------------------------------- int __thiscall sub_74CB80(_DWORD *this, unsigned __int16 a2) { unsigned int v2; // edi unsigned int v3; // edx unsigned int v5; // eax int v6; // esi v2 = this[17]; v3 = 10 * a2; if ( v3 >= v2 ) return -1; v5 = 0; v6 = 40 * a2; do { if ( v5 + v3 >= v2 ) break; if ( !*(_DWORD *)(v6 + this[16]) ) break; ++v5; v6 += 4; } while ( v5 < 0xA ); return v5 - 1; } //----- (0074CBD0) -------------------------------------------------------- unsigned int __thiscall sub_74CBD0(_DWORD *this, unsigned __int16 a2, unsigned int a3) { unsigned int v3; // edi unsigned int result; // eax int v5; // esi int v6; // edx v3 = 10 * a2; if ( v3 >= this[17] ) return -1; result = 0; v5 = 40 * a2; do { if ( result + v3 >= this[17] ) break; v6 = *(_DWORD *)(v5 + this[16]); if ( !v6 ) break; if ( a3 < *(_DWORD *)(v6 + 35) ) return result; ++result; v5 += 4; } while ( result < 0xA ); --result; return result; } //----- (0074CC20) -------------------------------------------------------- int __thiscall sub_74CC20(_DWORD *this, unsigned __int16 a2, unsigned int a3, unsigned int *a4) { unsigned int v4; // eax int v5; // ecx int result; // eax unsigned int v7; // eax v4 = sub_74CBD0(this, a2, a3); *a4 = v4; if ( v4 == -1 || (v7 = v4 + 10 * a2, v7 >= *(_DWORD *)(v5 + 68)) ) result = 0; else result = *(_DWORD *)(*(_DWORD *)(v5 + 64) + 4 * v7); return result; } //----- (0074CC60) -------------------------------------------------------- int __thiscall sub_74CC60(_DWORD *this, unsigned __int16 a2, int a3) { unsigned int v3; // eax int result; // eax if ( (unsigned int)(a3 - 1) > 9 || (v3 = a3 + 10 * a2 - 1, v3 >= this[17]) ) result = 0; else result = *(_DWORD *)(this[16] + 4 * v3); return result; } //----- (0074CC90) -------------------------------------------------------- int __thiscall sub_74CC90(_DWORD *this, unsigned __int16 a2, int a3) { unsigned int v3; // eax int result; // eax v3 = a3 + 10 * a2; if ( v3 < this[17] ) result = *(_DWORD *)(this[16] + 4 * v3); else result = 0; return result; } //----- (0074CCF0) -------------------------------------------------------- BOOL __thiscall sub_74CCF0(_DWORD *this, char *a2, int a3, int a4) { return sub_747820(this, a2, a3, a4); } //----- (0074CD00) -------------------------------------------------------- void *__thiscall sub_74CD00(_DWORD *this, unsigned __int8 a2, char a3) { int v3; // eax int v4; // eax void *result; // eax v3 = this[13]; if ( !v3 ) return &unk_BA060C; if ( (unsigned int)a2 >= *(_DWORD *)(v3 + 40) ) return &unk_BA060C; v4 = sub_7474E0(this, a2); if ( !v4 ) return &unk_BA060C; switch ( a3 ) { case 0: result = (void *)(v4 + 12); break; case 1: result = (void *)(v4 + 52); break; case 2: result = (void *)(v4 + 92); break; case 3: result = (void *)(v4 + 132); break; default: return &unk_BA060C; } return result; } //----- (0074CD70) -------------------------------------------------------- void __thiscall sub_74CD70(void *this) { *(_DWORD *)((char *)this + 29) = 0; *(_DWORD *)((char *)this + 25) = 0; *(_DWORD *)((char *)this + 21) = 0; *(_DWORD *)((char *)this + 17) = 0; *(_DWORD *)((char *)this + 13) = 0; *(_DWORD *)((char *)this + 9) = 0; *(_DWORD *)((char *)this + 5) = 0; *(_DWORD *)((char *)this + 1) = 0; } //----- (0074CD90) -------------------------------------------------------- char __fastcall sub_74CD90(_DWORD *a1, int a2, const char *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { signed int v11; // kr00_4 signed int i; // esi char *v13; // edi signed int v14; // esi const char *v15; // eax bool v16; // cf bool v17; // zf int v19; // eax _DWORD *v20; // [esp+0h] [ebp-8Ch] char v21[2]; // [esp+4h] [ebp-88h] char v22; // [esp+7h] [ebp-85h] char v23[128]; // [esp+8h] [ebp-84h] v20 = a1; strcpy(v21, "/\\"); v22 = 0; strcpy(v23, a3); v11 = strlen(v23); for ( i = 0; i < v11; ++i ) v23[i] = tolower(v23[i]); v13 = strtok(v23, v21); if ( v13 ) { while ( 1 ) { v14 = 0; v15 = (char *)v20 + 37; do { if ( !strcmp(v15, v13) ) break; ++v14; v15 += 65; } while ( v14 < 51 ); v16 = (unsigned int)v14 < 0x33; v17 = v14 == 51; if ( v14 != 51 ) break; v13 = strtok(0, v21); if ( !v13 ) return 1; } } else { v14 = (signed int)v20; v16 = (unsigned int)v20 < 0x33; v17 = v20 == (_DWORD *)51; if ( v20 == (_DWORD *)51 ) return 1; } if ( (v16 || v17) && *v20 <= 51 ) { v19 = (int)&v20[16 * v14] + v14; *(_DWORD *)(v19 + 5) = a4; *(_DWORD *)(v19 + 9) = a5; *(_DWORD *)(v19 + 13) = a6; *(_DWORD *)(v19 + 17) = a7; *(_DWORD *)(v19 + 21) = a8; *(_DWORD *)(v19 + 25) = a9; *(_DWORD *)(v19 + 29) = a10; *(_DWORD *)(v19 + 33) = a11; *(_BYTE *)(v19 + 4) = 1; ++*v20; return 1; } return 0; } // 74CD90: using guessed type char var_84[128]; //----- (0074CF40) -------------------------------------------------------- int __thiscall sub_74CF40(char *this, unsigned int a2) { int result; // eax if ( a2 > 0x32 ) result = 0; else result = (int)&this[64 * a2 + 5 + a2]; return result; } //----- (0074CF60) -------------------------------------------------------- int __thiscall sub_74CF60(char *this, unsigned int a2) { int result; // eax if ( a2 > 0x32 ) result = 0; else result = (int)&this[64 * a2 + 37 + a2]; return result; } //----- (0074CF80) -------------------------------------------------------- int __thiscall sub_74CF80(int this) { int v1; // ebx int v2; // esi _BYTE *v3; // eax signed int v4; // ecx const char *v5; // edi signed int i; // esi signed int v8; // [esp+Ch] [ebp-8h] signed int v9; // [esp+10h] [ebp-4h] v1 = this; v2 = this + 4; `eh vector constructor iterator'((void *)(this + 4), 0x41u, 51, sub_74CD70, nullsub_6); *(_DWORD *)v1 = 0; v3 = (_BYTE *)v2; v4 = 51; do { *v3 = 0; v3 += 65; --v4; } while ( v4 ); *(_DWORD *)(v1 + 37) = 1953718849; *(_DWORD *)(v1 + 41) = 778400865; *(_DWORD *)(v1 + 45) = 7235699; *(_DWORD *)(v1 + 102) = 1769235265; *(_DWORD *)(v1 + 106) = 1800627574; *(_DWORD *)(v1 + 110) = 778857577; *(_DWORD *)(v1 + 114) = 7235699; strcpy((void *)(v1 + 167), "CharacterTitleData.shn"); *(_DWORD *)(v1 + 232) = 1918986307; *(_DWORD *)(v1 + 236) = 1164207463; *(_DWORD *)(v1 + 240) = 1667589734; *(_DWORD *)(v1 + 244) = 1752378996; *(_WORD *)(v1 + 248) = 110; *(_DWORD *)(v1 + 297) = 1935764547; *(_DWORD *)(v1 + 301) = 1835093619; *(_DWORD *)(v1 + 305) = 1752378981; *(_WORD *)(v1 + 309) = 110; *(_DWORD *)(v1 + 362) = 1752457543; *(_DWORD *)(v1 + 366) = 1932423781; *(_WORD *)(v1 + 370) = 28264; *(_BYTE *)(v1 + 372) = 0; *(_DWORD *)(v1 + 427) = 1684107847; *(_DWORD *)(v1 + 431) = 1702119781; *(_DWORD *)(v1 + 435) = 1953517421; *(_DWORD *)(v1 + 439) = 778989417; *(_DWORD *)(v1 + 443) = 7235699; *(_DWORD *)(v1 + 492) = 1835365449; *(_DWORD *)(v1 + 496) = 1836280132; *(_DWORD *)(v1 + 500) = 1819569761; *(_DWORD *)(v1 + 504) = 1752378981; *(_WORD *)(v1 + 508) = 110; *(_DWORD *)(v1 + 557) = 1835365449; *(_DWORD *)(v1 + 561) = 1868983881; *(_DWORD *)(v1 + 565) = 1852338990; *(_BYTE *)(v1 + 569) = 0; *(_DWORD *)(v1 + 622) = 1232101709; *(_DWORD *)(v1 + 626) = 779052654; *(_DWORD *)(v1 + 630) = 7235699; *(_DWORD *)(v1 + 687) = 1768843597; *(_DWORD *)(v1 + 691) = 1937076040; *(_DWORD *)(v1 + 695) = 1752378981; *(_WORD *)(v1 + 699) = 110; strcpy((void *)(v1 + 752), "MiniHouseFurniture.shn"); *(_DWORD *)(v1 + 817) = 1768843597; *(_DWORD *)(v1 + 821) = 1937076040; *(_DWORD *)(v1 + 825) = 1784827749; *(_DWORD *)(v1 + 829) = 778661441; *(_DWORD *)(v1 + 833) = 7235699; *(_DWORD *)(v1 + 882) = 1231187789; *(_DWORD *)(v1 + 886) = 779052654; *(_DWORD *)(v1 + 890) = 7235699; *(_DWORD *)(v1 + 947) = 1936941392; *(_DWORD *)(v1 + 951) = 1399158377; *(_DWORD *)(v1 + 955) = 1819044203; *(_DWORD *)(v1 + 959) = 1852338990; *(_BYTE *)(v1 + 963) = 0; *(_DWORD *)(v1 + 1012) = 1768188242; *(_DWORD *)(v1 + 1016) = 1932420974; *(_WORD *)(v1 + 1020) = 28264; *(_BYTE *)(v1 + 1022) = 0; *(_DWORD *)(v1 + 1077) = 1096971603; *(_DWORD *)(v1 + 1081) = 1635021666; *(_DWORD *)(v1 + 1085) = 1932420468; *(_WORD *)(v1 + 1089) = 28264; *(_BYTE *)(v1 + 1091) = 0; *(_DWORD *)(v1 + 1142) = 1919381589; *(_DWORD *)(v1 + 1146) = 1231381601; *(_DWORD *)(v1 + 1150) = 779052654; *(_DWORD *)(v1 + 1154) = 7235699; *(_DWORD *)(v1 + 1207) = 1885431127; *(_DWORD *)(v1 + 1211) = 1950445167; *(_DWORD *)(v1 + 1215) = 1651077748; *(_DWORD *)(v1 + 1219) = 1852338990; *(_BYTE *)(v1 + 1223) = 0; *(_DWORD *)(v1 + 1272) = 1885431127; *(_DWORD *)(v1 + 1276) = 1767140975; *(_DWORD *)(v1 + 1280) = 1147497588; *(_DWORD *)(v1 + 1284) = 778138721; *(_DWORD *)(v1 + 1288) = 7235699; strcpy((void *)(v1 + 1337), "MiniHouseFurnitureObjEffect.shn"); *(_DWORD *)(v1 + 1402) = 1768843597; *(_DWORD *)(v1 + 1406) = 1937076040; *(_DWORD *)(v1 + 1410) = 1684948325; *(_DWORD *)(v1 + 1414) = 778400373; *(_DWORD *)(v1 + 1418) = 7235699; *(_DWORD *)(v1 + 1467) = 1701013828; *(_DWORD *)(v1 + 1471) = 1769367876; *(_DWORD *)(v1 + 1475) = 1684957540; *(_DWORD *)(v1 + 1479) = 1852338990; *(_BYTE *)(v1 + 1483) = 0; *(_DWORD *)(v1 + 1532) = 1769235265; *(_DWORD *)(v1 + 1536) = 1767272047; *(_DWORD *)(v1 + 1540) = 1850308453; *(_DWORD *)(v1 + 1544) = 1932423014; *(_WORD *)(v1 + 1548) = 28264; *(_BYTE *)(v1 + 1550) = 0; *(_DWORD *)(v1 + 1597) = 1282433357; *(_DWORD *)(v1 + 1601) = 1349217897; *(_DWORD *)(v1 + 1605) = 1953393007; *(_DWORD *)(v1 + 1609) = 1852338990; *(_BYTE *)(v1 + 1613) = 0; *(_DWORD *)(v1 + 1662) = 1466982733; *(_DWORD *)(v1 + 1666) = 1867544929; *(_DWORD *)(v1 + 1670) = 779382377; *(_DWORD *)(v1 + 1674) = 7235699; *(_DWORD *)(v1 + 1727) = 1951621697; *(_DWORD *)(v1 + 1731) = 1449489505; *(_DWORD *)(v1 + 1735) = 779576681; *(_DWORD *)(v1 + 1739) = 7235699; *(_DWORD *)(v1 + 1792) = 1769235265; *(_DWORD *)(v1 + 1796) = 1800627574; *(_DWORD *)(v1 + 1800) = 1449946217; *(_DWORD *)(v1 + 1804) = 779576681; *(_DWORD *)(v1 + 1808) = 7235699; strcpy((void *)(v1 + 1857), "CharacterTitleStateView.shn"); *(_DWORD *)(v1 + 1922) = 1701209669; *(_DWORD *)(v1 + 1926) = 1767273571; *(_DWORD *)(v1 + 1930) = 1850308453; *(_DWORD *)(v1 + 1934) = 1932423014; *(_WORD *)(v1 + 1938) = 28264; *(_BYTE *)(v1 + 1940) = 0; *(_DWORD *)(v1 + 1987) = 1835365449; *(_DWORD *)(v1 + 1991) = 1886349395; *(_DWORD *)(v1 + 1995) = 2003134806; *(_DWORD *)(v1 + 1999) = 1852338990; *(_BYTE *)(v1 + 2003) = 0; *(_DWORD *)(v1 + 2052) = 1835365449; *(_DWORD *)(v1 + 2056) = 2003134806; *(_DWORD *)(v1 + 2060) = 1868983881; *(_DWORD *)(v1 + 2064) = 1852338990; *(_BYTE *)(v1 + 2068) = 0; *(_DWORD *)(v1 + 2117) = 1450205517; *(_DWORD *)(v1 + 2121) = 1232561513; *(_DWORD *)(v1 + 2125) = 779052654; *(_DWORD *)(v1 + 2129) = 7235699; *(_DWORD *)(v1 + 2182) = 1449291597; *(_DWORD *)(v1 + 2186) = 1232561513; *(_DWORD *)(v1 + 2190) = 779052654; *(_DWORD *)(v1 + 2194) = 7235699; *(_DWORD *)(v1 + 2247) = 1447252046; *(_DWORD *)(v1 + 2251) = 1232561513; *(_DWORD *)(v1 + 2255) = 779052654; *(_DWORD *)(v1 + 2259) = 7235699; *(_DWORD *)(v1 + 2312) = 1936941392; *(_DWORD *)(v1 + 2316) = 1399158377; *(_DWORD *)(v1 + 2320) = 1819044203; *(_DWORD *)(v1 + 2324) = 2003134806; *(_DWORD *)(v1 + 2328) = 1852338990; *(_BYTE *)(v1 + 2332) = 0; *(_DWORD *)(v1 + 2377) = 1685025360; *(_DWORD *)(v1 + 2381) = 1449485173; *(_DWORD *)(v1 + 2385) = 779576681; *(_DWORD *)(v1 + 2389) = 7235699; *(_DWORD *)(v1 + 2442) = 1819045699; *(_DWORD *)(v1 + 2446) = 1131701093; *(_DWORD *)(v1 + 2450) = 1449423457; *(_DWORD *)(v1 + 2454) = 779576681; *(_DWORD *)(v1 + 2458) = 7235699; *(_DWORD *)(v1 + 2507) = 1447646279; *(_DWORD *)(v1 + 2511) = 779576681; *(_DWORD *)(v1 + 2515) = 7235699; strcpy((void *)(v1 + 2572), "ItemViewEquipTypeInfo.shn"); *(_DWORD *)(v1 + 2637) = 1735289171; *(_DWORD *)(v1 + 2641) = 1631872364; *(_DWORD *)(v1 + 2645) = 1932419444; *(_WORD *)(v1 + 2649) = 28264; *(_BYTE *)(v1 + 2651) = 0; *(_DWORD *)(v1 + 2702) = 1802658125; *(_DWORD *)(v1 + 2706) = 1699968101; *(_DWORD *)(v1 + 2710) = 1751347809; *(_DWORD *)(v1 + 2714) = 1868983881; *(_DWORD *)(v1 + 2718) = 1852338990; *(_BYTE *)(v1 + 2722) = 0; *(_DWORD *)(v1 + 2767) = 1835365449; *(_DWORD *)(v1 + 2771) = 1701736269; *(_DWORD *)(v1 + 2775) = 1752379001; *(_WORD *)(v1 + 2779) = 110; *(_DWORD *)(v1 + 2832) = 1299215696; *(_DWORD *)(v1 + 2836) = 778987873; *(_DWORD *)(v1 + 2840) = 7235699; *(_DWORD *)(v1 + 2897) = 1952540739; *(_DWORD *)(v1 + 2901) = 1869377347; *(_DWORD *)(v1 + 2905) = 1752378994; *(_WORD *)(v1 + 2909) = 110; *(_DWORD *)(v1 + 2962) = 1836213588; *(_DWORD *)(v1 + 2966) = 1702131781; *(_DWORD *)(v1 + 2970) = 1632461934; *(_DWORD *)(v1 + 2974) = 778593140; *(_DWORD *)(v1 + 2978) = 7235699; *(_DWORD *)(v1 + 3027) = 1768843597; *(_DWORD *)(v1 + 3031) = 1231974253; *(_DWORD *)(v1 + 3035) = 779052654; *(_DWORD *)(v1 + 3039) = 7235699; strcpy((void *)(v1 + 3092), "MinimonAutoUseItem.shn"); strcpy((void *)(v1 + 3157), "ChargedDeletableBuff.shn"); *(_DWORD *)(v1 + 3222) = 1851878483; *(_DWORD *)(v1 + 3226) = 1181902180; *(_DWORD *)(v1 + 3230) = 1702128745; *(_DWORD *)(v1 + 3234) = 1752378994; *(_WORD *)(v1 + 3238) = 110; *(_DWORD *)(v1 + 3287) = 1919968580; *(_DWORD *)(v1 + 3291) = 1952539493; *(_DWORD *)(v1 + 3295) = 1766220901; *(_DWORD *)(v1 + 3299) = 779314540; *(_DWORD *)(v1 + 3303) = 7235699; v5 = (const char *)(v1 + 37); v9 = 51; do { v8 = strlen(v5); for ( i = 0; i < v8; ++i ) v5[i] = tolower(v5[i]); v5 += 65; --v9; } while ( v9 ); return v1; } //----- (0074DA00) -------------------------------------------------------- signed int __thiscall sub_74DA00(int *this, _DWORD *a2) { int v2; // edi int v3; // edx _DWORD *v4; // eax v2 = *this; v3 = 0; if ( *this <= 0 ) return 0; v4 = this + 3; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++v3; v4 = (_DWORD *)((char *)v4 + 22); if ( v3 >= v2 ) return 0; } *this = v2 - 1; memcpy((char *)this + 22 * v3 + 4, (char *)this + 22 * v3 + 26, 22 * (v2 - 1 - v3)); return 1; } //----- (0074DA80) -------------------------------------------------------- int __thiscall sub_74DA80(_DWORD *this, _DWORD *a2) { int v2; // edx _DWORD *v3; // eax v2 = 0; if ( *this <= 0 ) return 0; v3 = this + 3; while ( *(v3 - 2) != *a2 || *(v3 - 1) != a2[1] || *v3 != a2[2] || v3[1] != a2[3] || v3[2] != a2[4] ) { ++v2; v3 = (_DWORD *)((char *)v3 + 22); if ( v2 >= *this ) return 0; } return (int)this + 22 * v2 + 4; } //----- (0074DAE0) -------------------------------------------------------- _DWORD *__thiscall sub_74DAE0(_DWORD *this) { _DWORD *v1; // esi v1 = this; `eh vector constructor iterator'(this + 1, 0x16u, 200, sub_6F72B0, nullsub_6); *v1 = 0; return v1; } //----- (0074DB10) -------------------------------------------------------- void __thiscall sub_74DB10(_DWORD *this) { *this = 0; `eh vector destructor iterator'(this + 1, 0x16u, 200, nullsub_6); } //----- (0074DB30) -------------------------------------------------------- signed int __thiscall sub_74DB30(_DWORD *this, int a2) { _DWORD *v2; // edi signed int v3; // ecx signed int result; // eax signed int v5; // esi _DWORD *v6; // edx int v7; // ecx int v8; // edx v2 = this; v3 = *this; if ( v3 > 200 ) return 0; v5 = 0; if ( v3 <= 0 ) { LABEL_11: if ( v3 < 200 ) { v8 = (int)v2 + 22 * v3 + 4; *(_DWORD *)v8 = *(_DWORD *)a2; *(_DWORD *)(v8 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v8 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(v8 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(v8 + 16) = *(_DWORD *)(a2 + 16); *(_BYTE *)(v8 + 20) = *(_BYTE *)(a2 + 20); *(_BYTE *)(v8 + 21) = *(_BYTE *)(a2 + 21); ++*v2; result = 1; } else { result = 0; } } else { v6 = v2 + 3; while ( *(v6 - 2) != *(_DWORD *)a2 || *(v6 - 1) != *(_DWORD *)(a2 + 4) || *v6 != *(_DWORD *)(a2 + 8) || v6[1] != *(_DWORD *)(a2 + 12) || v6[2] != *(_DWORD *)(a2 + 16) ) { ++v5; v6 = (_DWORD *)((char *)v6 + 22); if ( v5 >= v3 ) goto LABEL_11; } v7 = (int)v2 + 22 * v5 + 4; *(_DWORD *)v7 = *(_DWORD *)a2; *(_DWORD *)(v7 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v7 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(v7 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(v7 + 16) = *(_DWORD *)(a2 + 16); *(_BYTE *)(v7 + 20) = *(_BYTE *)(a2 + 20); *(_BYTE *)(v7 + 21) = *(_BYTE *)(a2 + 21); result = 2; } return result; } //----- (0074DC10) -------------------------------------------------------- _DWORD *__thiscall sub_74DC10(_DWORD *this) { _DWORD *result; // eax signed int v2; // edi int v3; // esi signed int v4; // ecx result = this; v2 = 17; *this = &CItemAuthorityBase::`vftable'; v3 = (int)this + 293; do { v4 = 0; do { *(_BYTE *)(v3 + v4 + 289) = 0; *(_BYTE *)(v3 + v4) = 0; *(_BYTE *)(v3 + v4++ - 289) = 0; } while ( v4 < 17 ); v3 += 17; --v2; } while ( v2 ); *((_BYTE *)result + 149) = 1; *(_WORD *)((char *)result + 165) = 257; *((_BYTE *)result + 160) = 1; *(_WORD *)((char *)result + 169) = 257; *((_BYTE *)result + 171) = 1; *((_WORD *)result + 86) = 257; *((_BYTE *)result + 157) = 1; *((_BYTE *)result + 163) = 1; *((_BYTE *)result + 220) = 1; *((_BYTE *)result + 58) = 1; *((_BYTE *)result + 238) = 1; *((_BYTE *)result + 256) = 1; *((_BYTE *)result + 274) = 1; *((_BYTE *)result + 4) = 1; *((_BYTE *)result + 13) = 1; *((_BYTE *)result + 112) = 1; *((_BYTE *)result + 115) = 1; *((_BYTE *)result + 47) = 1; *((_BYTE *)result + 81) = 1; *((_BYTE *)result + 98) = 1; *((_BYTE *)result + 438) = 1; *((_WORD *)result + 227) = 257; *((_BYTE *)result + 449) = 1; *((_WORD *)result + 229) = 257; *((_BYTE *)result + 460) = 1; *(_WORD *)((char *)result + 461) = 257; *((_BYTE *)result + 509) = 1; *((_BYTE *)result + 347) = 1; *((_BYTE *)result + 527) = 1; *((_BYTE *)result + 545) = 1; *((_BYTE *)result + 563) = 1; *((_WORD *)result + 146) = 257; *((_BYTE *)result + 302) = 1; *((_BYTE *)result + 401) = 1; *((_BYTE *)result + 404) = 1; *((_BYTE *)result + 336) = 1; *((_BYTE *)result + 370) = 1; *((_BYTE *)result + 387) = 1; *((_BYTE *)result + 727) = 1; *(_WORD *)((char *)result + 743) = 257; *((_BYTE *)result + 738) = 1; *(_WORD *)((char *)result + 747) = 257; *((_BYTE *)result + 749) = 1; *((_WORD *)result + 375) = 257; *((_BYTE *)result + 741) = 1; *((_BYTE *)result + 798) = 1; *((_BYTE *)result + 636) = 1; *((_BYTE *)result + 816) = 1; *((_BYTE *)result + 834) = 1; *((_BYTE *)result + 870) = 1; *((_BYTE *)result + 852) = 1; *(_WORD *)((char *)result + 581) = 257; *((_BYTE *)result + 591) = 1; *((_BYTE *)result + 690) = 1; *((_BYTE *)result + 693) = 1; *((_BYTE *)result + 625) = 1; *((_BYTE *)result + 659) = 1; *((_BYTE *)result + 676) = 1; return result; } // A0909C: using guessed type void *CItemAuthorityBase::`vftable'; //----- (0074DDC0) -------------------------------------------------------- void __thiscall sub_74DDC0(_DWORD *this) { *this = &CItemAuthorityBase::`vftable'; } // A0909C: using guessed type void *CItemAuthorityBase::`vftable'; //----- (0074DDD0) -------------------------------------------------------- int __thiscall sub_74DDD0(void *this, int a2, int a3) { void *v3; // esi int result; // eax v3 = this; result = (*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 4))(this, a2); if ( result ) { if ( *(_BYTE *)(result + 4) ) { if ( !a3 ) result = (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v3 + 4))(v3, 0); } result = *(_BYTE *)(result + 8) == 0; } return result; } //----- (0074DE20) -------------------------------------------------------- int __thiscall sub_74DE20(void *this, int a2) { int result; // eax result = (*(int (__stdcall **)(int))(*(_DWORD *)this + 4))(a2); if ( result ) result = *(_BYTE *)(result + 6) == 0; return result; } //----- (0074DE50) -------------------------------------------------------- signed int __thiscall sub_74DE50(void *this, int a2, int a3, __int16 a4, __int16 a5) { void *v5; // esi int v6; // eax signed int result; // eax v5 = this; v6 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 4))(this, a2); if ( !v6 ) goto LABEL_14; if ( *(_BYTE *)(v6 + 4) && !a3 ) v6 = (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 4))(v5, 0); if ( !*(_BYTE *)(v6 + 7) || a4 != 6 && a4 && a5 != 6 && a5 ) result = 1; else LABEL_14: result = 0; return result; } //----- (0074DEC0) -------------------------------------------------------- signed int __thiscall sub_74DEC0(void *this, int a2, int a3) { void *v3; // esi _BYTE *v4; // eax signed int result; // eax v3 = this; v4 = (_BYTE *)(*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 4))(this, a2); if ( !v4 ) goto LABEL_12; if ( v4[4] && !a3 ) v4 = (_BYTE *)(*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v3 + 4))(v3, 0); if ( v4[5] && v4[7] && v4[8] ) result = 1; else LABEL_12: result = 0; return result; } //----- (0074DF20) -------------------------------------------------------- signed int __thiscall sub_74DF20(void *this, int a2, int a3) { void *v3; // esi _BYTE *v4; // eax signed int result; // eax v3 = this; v4 = (_BYTE *)(*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 4))(this, a2); if ( !v4 ) goto LABEL_11; if ( v4[4] && !a3 ) v4 = (_BYTE *)(*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v3 + 4))(v3, 0); if ( v4[5] && v4[8] ) result = 1; else LABEL_11: result = 0; return result; } //----- (0074DF70) -------------------------------------------------------- int __thiscall sub_74DF70(void *this, int a2) { int result; // eax result = (*(int (__stdcall **)(int))(*(_DWORD *)this + 4))(a2); if ( result ) result = *(unsigned __int8 *)(result + 4); return result; } //----- (0074DF90) -------------------------------------------------------- BOOL __thiscall sub_74DF90(void *this, int a2) { _BYTE *v2; // eax v2 = (_BYTE *)(*(int (__stdcall **)(int))(*(_DWORD *)this + 4))(a2); return v2 && v2[5] && v2[7] && v2[8]; } //----- (0074DFD0) -------------------------------------------------------- BOOL __thiscall sub_74DFD0(void *this, int a2) { int v2; // eax v2 = (*(int (__stdcall **)(int))(*(_DWORD *)this + 4))(a2); return v2 && *(_BYTE *)(v2 + 5) && *(_BYTE *)(v2 + 8); } //----- (0074E000) -------------------------------------------------------- void *__thiscall sub_74E000(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CItemAuthorityBase::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A0909C: using guessed type void *CItemAuthorityBase::`vftable'; //----- (0074E030) -------------------------------------------------------- _DWORD *__thiscall sub_74E030(char *this, int a2, int a3, unsigned __int16 a4, unsigned __int16 a5, _DWORD *a6) { _DWORD *result; // eax char *v7; // esi char *v8; // eax result = a6; v7 = this; if ( a6 ) { if ( a4 >= 0x11u ) return 0; if ( a5 < 0x11u ) { *a6 = 0; if ( sub_74DEC0(this, a2, a3) ) { v8 = &v7[16 * a4 + 293 + a4 + a5]; if ( !*v8 ) { *a6 = 1; return (_DWORD *)(unsigned __int8)*v8; } return (_DWORD *)(unsigned __int8)*v8; } if ( sub_74DF20(v7, a2, a3) ) { v8 = &v7[16 * a4 + 582 + a4 + a5]; if ( !*v8 ) { *a6 = 2; return (_DWORD *)(unsigned __int8)*v8; } return (_DWORD *)(unsigned __int8)*v8; } if ( sub_74DE50(v7, a2, a3, a4, a5) ) { v8 = &v7[16 * a4 + 4 + a4 + a5]; if ( !*v8 ) *a6 = 3; return (_DWORD *)(unsigned __int8)*v8; } } result = 0; } return result; } //----- (0074E150) -------------------------------------------------------- _DWORD *__thiscall sub_74E150(_DWORD *this) { _DWORD *result; // eax result = this; this[96] = 0; return result; } //----- (0074E160) -------------------------------------------------------- signed int __thiscall sub_74E160(_DWORD *this, _DWORD *a2) { signed int v2; // eax signed int result; // eax int v4; // eax _DWORD *v5; // eax v2 = this[96]; if ( v2 >= 24 ) return 0; v4 = 4 * v2; this[v4] = *a2; v5 = &this[v4]; v5[1] = a2[1]; v5[2] = a2[2]; v5[3] = a2[3]; result = 1; ++this[96]; return result; } //----- (0074E1B0) -------------------------------------------------------- signed int __thiscall sub_74E1B0(_DWORD *this, _DWORD *a2) { int v2; // esi int v3; // edx _DWORD *v4; // eax v2 = this[96]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this; while ( *v4 != *a2 ) { ++v3; v4 += 4; if ( v3 >= v2 ) return 0; } this[96] = v2 - 1; memcpy(&this[4 * v3], &this[4 * v3 + 4], 16 * (v2 - 1 - v3)); return 1; } //----- (0074E210) -------------------------------------------------------- int __thiscall sub_74E210(_DWORD *this, int a2) { int v2; // esi int v3; // eax _DWORD *v4; // edx v2 = this[96]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this; while ( *v4 != a2 ) { ++v3; v4 += 4; if ( v3 >= v2 ) return 0; } return (int)&this[4 * v3]; } //----- (0074E250) -------------------------------------------------------- int __thiscall sub_74E250(_DWORD *this, int a2) { int result; // eax if ( a2 < this[96] ) result = (int)&this[4 * a2]; else result = 0; return result; } //----- (0074E270) -------------------------------------------------------- void __thiscall sub_74E270(_DWORD *this) { this[96] = 0; } //----- (0074E280) -------------------------------------------------------- int __thiscall sub_74E280(_DWORD *this, int a2) { _DWORD *v2; // ebx int v4; // eax unsigned int v5; // edi unsigned int v6; // esi _DWORD *v7; // eax v2 = this; if ( !*this ) return this[1]; v4 = *(_DWORD *)(*this + 52); if ( v4 ) v5 = *(_DWORD *)(v4 + 40); else v5 = 0; v6 = 0; if ( !v5 ) return v2[1]; while ( 1 ) { v7 = (_DWORD *)sub_7474E0((_DWORD *)*v2, v6); if ( v7 ) { if ( *v7 == a2 ) break; } if ( ++v6 >= v5 ) return v2[1]; } return (int)(v7 + 1); } //----- (0074E2E0) -------------------------------------------------------- int __thiscall sub_74E2E0(_DWORD *this, unsigned int a2) { int v2; // eax unsigned __int16 v3; // ax int result; // eax v2 = this[4]; if ( v2 ) v3 = *(_WORD *)(v2 + 2); else v3 = 0; if ( a2 < v3 ) result = *(_DWORD *)(this[5] + 4 * a2); else result = 0; return result; } //----- (0074E310) -------------------------------------------------------- _DWORD *__cdecl sub_74E310(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax for ( result = a1; result != a2; ++result ) *result = *a3; return result; } //----- (0074E330) -------------------------------------------------------- _DWORD *__cdecl sub_74E330(int a1, int a2, _DWORD *a3) { int v3; // ecx _DWORD *result; // eax int v5; // esi v3 = a2; for ( result = a3; v3 != a1; *result = v5 ) { v5 = *(_DWORD *)(v3 - 4); v3 -= 4; --result; } return result; } //----- (0074E360) -------------------------------------------------------- char *__thiscall sub_74E360(const void **this, char *a2) { char *result; // eax const void **v3; // esi char *v4; // ebx int v5; // edi result = a2; v3 = this; if ( (unsigned int)a2 > 0x3FFFFFFF ) std::_Xlength_error("vector too long"); if ( ((_BYTE *)this[2] - (_BYTE *)*this) >> 2 < (unsigned int)a2 ) { v4 = (char *)sub_68B040(a2); memcpy_0(v4, *v3, 4 * (((_BYTE *)v3[1] - (_BYTE *)*v3) >> 2)); v5 = ((_BYTE *)v3[1] - (_BYTE *)*v3) >> 2; if ( *v3 ) operator delete((void *)*v3); result = a2; *v3 = v4; v3[2] = &v4[4 * (_DWORD)a2]; v3[1] = &v4[4 * v5]; } return result; } //----- (0074E3E0) -------------------------------------------------------- int __thiscall sub_74E3E0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, unsigned int a6) { int v6; // edx int v7; // ecx int result; // eax if ( this != a3 ) { v6 = this[1]; if ( 536870910 - v6 < a6 ) std::_Xlength_error("list too long"); this[1] = a6 + v6; a3[1] -= a6; } **(_DWORD **)(a4 + 4) = a5; **(_DWORD **)(a5 + 4) = a2; **(_DWORD **)(a2 + 4) = a4; v7 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a5 + 4); result = a5; *(_DWORD *)(a5 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a4 + 4) = v7; return result; } //----- (0074E460) -------------------------------------------------------- void __cdecl sub_74E460(_DWORD *a1, int a2, _DWORD *a3) { int v3; // ecx _DWORD *v4; // eax v3 = a2; if ( a2 ) { v4 = a1; do { if ( v4 ) *v4 = *a3; ++v4; --v3; } while ( v3 ); } } //----- (0074E490) -------------------------------------------------------- int **__thiscall sub_74E490(_DWORD *this, int **a2, unsigned __int16 *a3) { _DWORD *v3; // esi div_t v4; // rax unsigned int v5; // eax int v6; // ecx int *v7; // esi int v8; // eax int *v9; // ecx int *v10; // eax unsigned __int16 v11; // dx int **result; // eax int *v13; // [esp+14h] [ebp+Ch] v3 = this; v4 = div((*a3 ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773); v5 = (16807 * v4.rem - 2836 * v4.quot + ((char)-(16807 * v4.rem - 2836 * v4.quot < 0) & 0x7FFFFFFF)) & v3[8]; if ( v3[9] <= v5 ) v5 += -1 - (v3[8] >> 1); v6 = v3[4]; v7 = (int *)v3[1]; v8 = v6 + 8 * v5; v9 = *(int **)v8; if ( *(int **)v8 == v7 ) v10 = v7; else v10 = **(int ***)(v8 + 4); if ( v10 == v9 ) { LABEL_10: result = a2; *a2 = v7; } else { v11 = *a3; while ( 1 ) { v10 = (int *)v10[1]; if ( *((_WORD *)v10 + 4) <= v11 ) break; if ( v10 == v9 ) goto LABEL_10; } if ( *((_WORD *)v10 + 4) >= v11 ) { v13 = (int *)*v10; result = a2; *a2 = v13; } else { result = a2; *a2 = v7; } } return result; } //----- (0074E550) -------------------------------------------------------- char **__stdcall sub_74E550(char *a1, int a2, int a3) { char **result; // eax int v4; // edx int v5; // edx void **v6; // [esp+0h] [ebp-Ch] result = (char **)operator new(0x10u); if ( !result ) { a1 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&a1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v4 = a2; *result = a1; result[1] = (char *)v4; if ( result != (char **)-8 ) { v5 = a3; *((_WORD *)result + 4) = *(_WORD *)a3; result[3] = *(char **)(v5 + 4); } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0074E5C0) -------------------------------------------------------- char __thiscall sub_74E5C0(_DWORD *this, int *a2, const void **a3) { _DWORD *v3; // esi int *v4; // ebx const void **v6; // edi unsigned int v7; // eax char *v8; // esi _BYTE *v9; // edx _BYTE *v10; // ecx int v11; // esi unsigned int v12; // eax unsigned int v13; // eax unsigned int v14; // ecx char *v15; // ecx _DWORD *v16; // eax _BYTE *v17; // ecx unsigned int v18; // eax unsigned int v19; // eax unsigned int v20; // ecx char *v21; // ecx _DWORD *v22; // eax char v23; // [esp+8h] [ebp-Ch] char v24; // [esp+Ch] [ebp-8h] int *v25; // [esp+10h] [ebp-4h] v3 = this + 18; v25 = *sub_74E700(this + 18, (int **)&v24, (unsigned __int16 *)&a2); v4 = v25; a2 = *sub_74E490(v3, (int **)&v23, (unsigned __int16 *)&a2); if ( a2 == v4 ) return 0; v6 = a3; sub_74E360(a3, (char *)0x32); do { v7 = (unsigned int)v6[1]; v8 = (char *)(v4 + 3); if ( (unsigned int)(v4 + 3) >= v7 || (v9 = *v6, *v6 > v8) ) { v17 = v6[2]; if ( (_BYTE *)v7 == v17 ) { v18 = (signed int)(v7 - (_DWORD)*v6) >> 2; if ( v18 > 0x3FFFFFFE ) LABEL_30: std::_Xlength_error("vector too long"); v19 = v18 + 1; v20 = (v17 - (_BYTE *)*v6) >> 2; if ( v19 > v20 ) { if ( 0x3FFFFFFF - (v20 >> 1) >= v20 ) v21 = (char *)((v20 >> 1) + v20); else v21 = 0; if ( (unsigned int)v21 < v19 ) v21 = (char *)v19; sub_74E360(v6, v21); v4 = v25; } } v22 = v6[1]; if ( v22 ) *v22 = *(_DWORD *)v8; } else { v10 = v6[2]; v11 = (v8 - v9) >> 2; if ( (_BYTE *)v7 == v10 ) { v12 = (signed int)(v7 - (_DWORD)v9) >> 2; if ( v12 > 0x3FFFFFFE ) goto LABEL_30; v13 = v12 + 1; v14 = (v10 - v9) >> 2; if ( v13 > v14 ) { if ( 0x3FFFFFFF - (v14 >> 1) >= v14 ) v15 = (char *)((v14 >> 1) + v14); else v15 = 0; if ( (unsigned int)v15 < v13 ) v15 = (char *)v13; sub_74E360(v6, v15); v4 = v25; } } v16 = v6[1]; if ( v16 ) *v16 = *((_DWORD *)*v6 + v11); } v6[1] = (char *)v6[1] + 4; v4 = (int *)*v4; v25 = v4; } while ( v4 != a2 ); return 1; } //----- (0074E700) -------------------------------------------------------- int **__thiscall sub_74E700(_DWORD *this, int **a2, unsigned __int16 *a3) { unsigned __int16 *v3; // ebx _DWORD *v4; // esi div_t v5; // rax unsigned int v6; // eax int v7; // ecx int *v8; // edi int *v9; // esi int v10; // edx int *i; // eax int *v12; // ecx unsigned __int16 v13; // cx int **result; // eax int *v15; // [esp+1Ch] [ebp+Ch] v3 = a3; v4 = this; v5 = div((*a3 ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773); v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4[8]; if ( v4[9] <= v6 ) v6 += -1 - (v4[8] >> 1); v7 = v4[4]; v8 = *(int **)(v7 + 8 * v6); v9 = (int *)v4[1]; v10 = v7 + 8 * v6; for ( i = *(int **)(v7 + 8 * v6); ; i = (int *)*i ) { if ( v8 == v9 ) v12 = v9; else v12 = **(int ***)(v10 + 4); if ( i == v12 ) { result = a2; *a2 = v9; return result; } v13 = *((_WORD *)i + 4); if ( v13 >= *a3 ) break; } v15 = i; if ( *v3 >= v13 ) { result = a2; *a2 = v15; } else { result = a2; *a2 = v9; } return result; } //----- (0074E7D0) -------------------------------------------------------- int __thiscall sub_74E7D0(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax int v4; // [esp+4h] [ebp-4h] v2 = this; sub_74E700(this + 7, (int **)&v4, (unsigned __int16 *)&a2); if ( v4 == v2[8] ) result = 0; else result = *(_DWORD *)(v4 + 12); return result; } //----- (0074E810) -------------------------------------------------------- int __thiscall sub_74E810(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int result; // eax int v5; // [esp+4h] [ebp-4h] v2 = this; a2 = (unsigned __int16)a2; sub_74E700(this + 7, (int **)&v5, (unsigned __int16 *)&a2); if ( v5 != v2[8] && (v3 = *(_DWORD *)(v5 + 12)) != 0 ) result = sub_74E280(v2, *(_DWORD *)(v3 + 8)); else result = v2[1]; return result; } //----- (0074E860) -------------------------------------------------------- void __thiscall sub_74E860(void **this) { void **v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi v1 = this; if ( this[4] ) operator delete(this[4]); v1[4] = 0; v1[5] = 0; v1[6] = 0; v2 = (_DWORD **)v1[1]; v3 = *v2; *v2 = v2; *((_DWORD *)v1[1] + 1) = v1[1]; v1[2] = 0; if ( v3 != v1[1] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != v1[1] ); } operator delete(v1[1]); } //----- (0074E8D0) -------------------------------------------------------- void __thiscall sub_74E8D0(int this) { int v1; // ebx double v2; // st7 unsigned int v3; // esi signed int v4; // eax int *v5; // ecx int v6; // edi int v9; // ST08_4 int v10; // [esp+8h] [ebp-4h] v1 = this; v2 = *(float *)(this + 40); v3 = *(_DWORD *)(this + 36); *(float *)&v10 = (double)*(unsigned int *)(this + 8) / (double)v3; if ( *(float *)&v10 > v2 ) { v4 = 0; do { if ( v3 >= 0x1FFFFFFF ) break; ++v4; v3 *= 2; } while ( v4 < 3 ); v5 = (int *)(this + 16); v6 = *(_DWORD *)(v1 + 16); v10 = *(int *)(v1 + 4); if ( v6 != *(_DWORD *)(v1 + 20) ) { v5 = (int *)(v1 + 16); *(_DWORD *)(v1 + 20) = v6; } sub_433D40(v5, *v5, (char *)(2 * v3), (int)&v10); *(_DWORD *)(v1 + 32) = v3 - 1; v9 = *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 36) = v3; sub_74ED00((_DWORD **)v1, v9); } } //----- (0074E980) -------------------------------------------------------- void __thiscall sub_74E980(int this) { int v1; // ebx double v2; // st7 unsigned int v3; // esi signed int v4; // eax int *v5; // ecx int v6; // edi int v9; // ST08_4 int v10; // [esp+8h] [ebp-4h] v1 = this; v2 = *(float *)(this + 40); v3 = *(_DWORD *)(this + 36); *(float *)&v10 = (double)*(unsigned int *)(this + 8) / (double)v3; if ( *(float *)&v10 > v2 ) { v4 = 0; do { if ( v3 >= 0x1FFFFFFF ) break; ++v4; v3 *= 2; } while ( v4 < 3 ); v5 = (int *)(this + 16); v6 = *(_DWORD *)(v1 + 16); v10 = *(int *)(v1 + 4); if ( v6 != *(_DWORD *)(v1 + 20) ) { v5 = (int *)(v1 + 16); *(_DWORD *)(v1 + 20) = v6; } sub_433D40(v5, *v5, (char *)(2 * v3), (int)&v10); *(_DWORD *)(v1 + 32) = v3 - 1; v9 = *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 36) = v3; sub_74EE50((_DWORD **)v1, v9); } } //----- (0074EA30) -------------------------------------------------------- void __thiscall sub_74EA30(int *this) { int *v1; // esi _DWORD **v2; // ecx _DWORD *v3; // eax _DWORD *v4; // edi int v5; // edi int v6; // edx int v9; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD **)this[1]; v3 = *v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; v1[2] = 0; if ( v3 != (_DWORD *)v1[1] ) { do { v4 = (_DWORD *)*v3; operator delete(v3); v3 = v4; } while ( v4 != (_DWORD *)v1[1] ); } v5 = v1[4]; v6 = v1[5]; v9 = v1[1]; if ( v5 != v6 ) v1[5] = v5; sub_433D40(v1 + 4, v1[4], (char *)0x10, (int)&v9); v1[8] = 7; v1[9] = 8; } // 74EA30: could not find valid save-restore pair for ebx //----- (0074EAC0) -------------------------------------------------------- _DWORD *__thiscall sub_74EAC0(_DWORD *this, char *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int *v5; // ecx char *v6; // edx int v7; // edi int v8; // eax void **v12; // [esp+10h] [ebp-1Ch] _DWORD *v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+28h] [ebp-4h] v3 = this; v13 = this; *(_BYTE *)this = *a2; this[2] = 0; v4 = operator new(0x10u); if ( !v4 ) { a2 = 0; std::exception::exception((std::exception *)&v12, (const char *const *)&a2); v12 = &std::bad_alloc::`vftable'; _CxxThrowException(&v12, &_TI2_AVbad_alloc_std__); } v3[1] = v4; *v4 = v4; *(_DWORD *)(v3[1] + 4) = v3[1]; v5 = v3 + 4; v14 = 0; *v5 = 0; v5[1] = 0; v5[2] = 0; v6 = (char *)v3[1]; *((float *)v3 + 10) = 1.0; v7 = v3[4]; v8 = v3[5]; LOBYTE(v14) = 1; a2 = v6; if ( v7 != v8 ) v3[5] = v7; sub_433D40(v5, *v5, (char *)0x10, (int)&a2); v3[8] = 7; v3[9] = 8; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0074EBB0) -------------------------------------------------------- int __thiscall sub_74EBB0(_DWORD *this, int a2, int a3, void *a4) { _DWORD *v4; // edi div_t v5; // rax unsigned int v6; // ebx int v7; // eax int v8; // ecx int v9; // esi void **v10; // edi int v11; // eax unsigned __int16 v12; // ax void *v13; // edx void **v14; // eax int result; // eax void **v16; // edx void *v17; // ecx int v18; // [esp+Ch] [ebp-4h] int v19; // [esp+1Ch] [ebp+Ch] v4 = this; v18 = (int)this; v5 = div((*(unsigned __int16 *)a3 ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773); v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4[8]; if ( v4[9] <= v6 ) v6 += -1 - (v4[8] >> 1); v7 = v4[4]; v8 = *(_DWORD *)(v7 + 8 * v6); v9 = v4[1]; v10 = (void **)(v4 + 1); v11 = v7 + 8 * v6; if ( v9 == v8 ) goto LABEL_8; v9 = **(_DWORD **)(v11 + 4); if ( v9 == v8 ) goto LABEL_8; v12 = *(_WORD *)a3; while ( 1 ) { v9 = *(_DWORD *)(v9 + 4); if ( *(_WORD *)(v9 + 8) <= v12 ) break; if ( v9 == v8 ) goto LABEL_8; } if ( *(_WORD *)(v9 + 8) < v12 ) { v9 = *(_DWORD *)v9; LABEL_8: v13 = a4; if ( v9 != *(_DWORD *)a4 ) { sub_74E3E0(v10, v9, v10, (int)a4, *(_DWORD *)a4, 1u); v13 = a4; } v14 = (void **)(*(_DWORD *)(v18 + 16) + 8 * v6); v19 = (int)v13; if ( *v14 == *v10 ) { *v14 = v13; *(_DWORD *)(*(_DWORD *)(v18 + 16) + 8 * v6 + 4) = v13; } else if ( *v14 == (void *)v9 ) { *v14 = v13; } else { v16 = (void **)v14[1]; v17 = *v16; v14[1] = *v16; if ( v17 != (void *)v19 ) *(_DWORD *)(*(_DWORD *)(v18 + 16) + 8 * v6 + 4) = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v18 + 16) + 8 * v6 + 4) + 4); } sub_74E8D0(v18); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; return result; } if ( a4 != *v10 ) { **((_DWORD **)a4 + 1) = *(_DWORD *)a4; *(_DWORD *)(*(_DWORD *)a4 + 4) = *((_DWORD *)a4 + 1); operator delete(a4); v10[1] = (char *)v10[1] - 1; } result = a2; *(_DWORD *)a2 = v9; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (0074ED00) -------------------------------------------------------- int __thiscall sub_74ED00(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi void *v4; // ST08_4 bool v5; // bl int v6; // [esp+4h] [ebp-8h] void *v7; // [esp+14h] [ebp+8h] result = a2; v3 = this; if ( *this[1] != a2 ) { v7 = *(void **)(a2 + 4); do { v4 = (void *)*v3[1]; v5 = v4 == v7; result = sub_74EBB0(v3, (int)&v6, (int)v4 + 8, v4); } while ( !v5 ); } return result; } //----- (0074ED50) -------------------------------------------------------- int __thiscall sub_74ED50(_DWORD *this, int a2, _WORD *a3, int *a4) { _DWORD *v4; // edi div_t v5; // rax unsigned int v6; // ebx int v7; // eax int v8; // ecx int v9; // esi int v10; // eax int *v11; // eax int **v12; // eax int *v13; // edx int *v14; // ecx int result; // eax int *v16; // [esp+18h] [ebp+Ch] v4 = this; v5 = div(((unsigned __int16)*a3 ^ 0xDEADBEEF) & 0x7FFFFFFF, 127773); v6 = (16807 * v5.rem - 2836 * v5.quot + ((char)-(16807 * v5.rem - 2836 * v5.quot < 0) & 0x7FFFFFFF)) & v4[8]; if ( v4[9] <= v6 ) v6 += -1 - (v4[8] >> 1); v7 = v4[4]; v8 = *(_DWORD *)(v7 + 8 * v6); v9 = v4[1]; v10 = v7 + 8 * v6; if ( v9 != v8 ) { v9 = **(_DWORD **)(v10 + 4); if ( v9 != v8 ) { while ( 1 ) { v9 = *(_DWORD *)(v9 + 4); if ( *a3 >= *(_WORD *)(v9 + 8) ) break; if ( v9 == v8 ) goto LABEL_9; } v9 = *(_DWORD *)v9; } } LABEL_9: v11 = a4; if ( v9 != *a4 ) { sub_74E3E0(v4 + 1, v9, v4 + 1, (int)a4, *a4, 1u); v11 = a4; } v16 = v11; v12 = (int **)(v4[4] + 8 * v6); if ( *v12 != (int *)v4[1] ) { if ( *v12 == (int *)v9 ) { v13 = a4; } else { v14 = (int *)*v12[1]; v12[1] = v14; if ( v14 == v16 ) goto LABEL_18; v12 = (int **)(v4[4] + 8 * v6 + 4); v13 = (int *)(*v12)[1]; } *v12 = v13; goto LABEL_18; } *v12 = a4; *(_DWORD *)(v4[4] + 8 * v6 + 4) = v16; LABEL_18: sub_74E980((int)v4); result = a2; *(_DWORD *)a2 = a4; *(_BYTE *)(a2 + 4) = 1; return result; } //----- (0074EE50) -------------------------------------------------------- int __thiscall sub_74EE50(_DWORD **this, int a2) { int result; // eax _DWORD **v3; // esi int v4; // ST08_4 bool v5; // bl char v6; // [esp+4h] [ebp-8h] int v7; // [esp+14h] [ebp+8h] result = a2; v3 = this; if ( *this[1] != a2 ) { v7 = *(_DWORD *)(a2 + 4); do { v4 = *v3[1]; v5 = v4 == v7; result = sub_74ED50(v3, (int)&v6, (_WORD *)(v4 + 8), (int *)v4); } while ( !v5 ); } return result; } //----- (0074EEA0) -------------------------------------------------------- void __thiscall sub_74EEA0(void **this) { void **v1; // esi _WORD *v2; // eax unsigned int v3; // edi _DWORD *v4; // edx int v5; // edx int v6; // ecx v1 = this; if ( this[3] ) { operator delete(this[3]); v1[3] = 0; } if ( v1[5] ) { if ( !v1[2] ) { v2 = v1[4]; if ( v2 ) { v3 = 0; if ( v2[1] > 0u ) { do { v4 = v1[5]; if ( v4[v3] ) { if ( *(_DWORD *)(v4[v3] + 668) ) operator delete[](*(void **)(v4[v3] + 668)); v5 = *((_DWORD *)v1[5] + v3); if ( *(_DWORD *)(v5 + 672) ) operator delete[](*(void **)(v5 + 672)); v6 = *((_DWORD *)v1[5] + v3); if ( *(_DWORD *)(v6 + 676) ) operator delete[](*(void **)(v6 + 676)); operator delete(*((void **)v1[5] + v3)); } ++v3; } while ( v3 < *((unsigned __int16 *)v1[4] + 1) ); } } } operator delete[](v1[5]); v1[5] = 0; } if ( v1[4] ) { operator delete(v1[4]); v1[4] = 0; } sub_74EA30((int *)v1 + 7); } //----- (0074EF90) -------------------------------------------------------- _DWORD *__thiscall sub_74EF90(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = a2; sub_74EAC0(this + 7, (char *)&a2 + 3, (int)&a2 + 3); sub_74EAC0(v2 + 18, (char *)&a2 + 3, (int)&a2 + 3); v2[1] = &unk_BA1308; v2[6] = 1; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; return v2; } //----- (0074F020) -------------------------------------------------------- void __thiscall sub_74F020(void **this) { void **v1; // esi v1 = this; sub_74EEA0(this); sub_74E860(v1 + 18); sub_74E860(v1 + 7); } //----- (0074F080) -------------------------------------------------------- void __thiscall sub_74F080(_DWORD *this) { _DWORD *v1; // edi int v2; // eax unsigned __int16 v3; // ax int v4; // ebx void ***v5; // esi __int16 v6; // dx void *v7; // ebx char **v8; // eax void **v9; // ecx int v10; // ebx int v11; // edx int v12; // eax signed __int16 v13; // ax int v14; // edx int *v15; // ecx int ***v16; // esi int v17; // eax int v18; // ebx char **v19; // eax int v20; // ecx _BYTE *v21; // ebx int v22; // edx int *v23; // edi char **v24; // eax int **v25; // ecx char v26; // [esp+Ch] [ebp-4Ch] char v27; // [esp+14h] [ebp-44h] int v28; // [esp+1Ch] [ebp-3Ch] int v29; // [esp+24h] [ebp-34h] int v30; // [esp+28h] [ebp-30h] int v31; // [esp+2Ch] [ebp-2Ch] int v32; // [esp+30h] [ebp-28h] int v33; // [esp+34h] [ebp-24h] int v34; // [esp+38h] [ebp-20h] unsigned int v35; // [esp+3Ch] [ebp-1Ch] int v36; // [esp+40h] [ebp-18h] int v37; // [esp+44h] [ebp-14h] void ***i; // [esp+48h] [ebp-10h] int v39; // [esp+4Ch] [ebp-Ch] _DWORD *v40; // [esp+50h] [ebp-8h] int v41; // [esp+54h] [ebp-4h] v1 = this; v2 = this[4]; v40 = this; if ( v2 ) v3 = *(_WORD *)(v2 + 2); else v3 = 0; v4 = v3; v35 = v3; sub_74EA30(this + 7); sub_74EA30(v1 + 18); v41 = 0; if ( v4 ) { v5 = (void ***)(v1 + 8); for ( i = (void ***)(v1 + 8); ; v5 = i ) { v6 = *(_WORD *)(*(_DWORD *)(v1[5] + 4 * v41) + 4); v34 = *(_DWORD *)(v1[5] + 4 * v41); v7 = **v5; LOWORD(v33) = v6; v8 = sub_74E550((char *)v7, *((_DWORD *)v7 + 1), (int)&v33); v9 = v5[1]; if ( (unsigned int)(536870910 - (_DWORD)v9) < 1 ) goto LABEL_23; v5[1] = (void **)((char *)v9 + 1); *((_DWORD *)v7 + 1) = v8; *(_DWORD *)v8[1] = v8; sub_74EBB0(v1 + 7, (int)&v28, (int)**v5 + 8, **v5); v10 = v41; v11 = *(unsigned __int16 *)(*(_DWORD *)(v1[5] + 4 * v41) + 4); v36 = *(_DWORD *)(v1[5] + 4 * v41); v39 = v11; sub_74E700(v1 + 7, (int **)&v37, (unsigned __int16 *)&v39); if ( v37 == v1[8] ) goto LABEL_26; v12 = *(_DWORD *)(v37 + 12); if ( v12 && *(_BYTE *)(v12 + 29) ) v13 = *(_WORD *)(v12 + 30); else LABEL_26: v13 = -1; v14 = v1[5]; v15 = (int *)v1[19]; v16 = (int ***)(v1 + 19); LOWORD(v31) = v13; v17 = *(_DWORD *)(v14 + 4 * v10); v18 = *v15; v32 = v17; v19 = sub_74E550((char *)v18, *(_DWORD *)(v18 + 4), (int)&v31); v20 = v1[20]; if ( (unsigned int)(536870910 - v20) < 1 ) LABEL_23: std::_Xlength_error("list too long"); v1[20] = v20 + 1; *(_DWORD *)(v18 + 4) = v19; *(_DWORD *)v19[1] = v19; sub_74ED50(v1 + 18, (int)&v27, (_WORD *)**v16 + 4, **v16); v39 = 0; v21 = (_BYTE *)(v36 + 96); do { if ( *(v21 - 4) && (!*v21 || *v21 == 3) ) { v22 = v1[5]; LOWORD(v29) = *((_WORD *)v21 - 1); v23 = **v16; v30 = *(_DWORD *)(v22 + 4 * v41); v24 = sub_74E550((char *)v23, v23[1], (int)&v29); v25 = v16[1]; if ( (unsigned int)(536870910 - (_DWORD)v25) < 1 ) goto LABEL_23; v16[1] = (int **)((char *)v25 + 1); v23[1] = (int)v24; *(_DWORD *)v24[1] = v24; sub_74ED50(v40 + 18, (int)&v26, (_WORD *)**v16 + 4, **v16); v1 = v40; } v21 += 8; ++v39; } while ( v39 < 5 ); if ( ++v41 >= v35 ) break; } } } //----- (0074F280) -------------------------------------------------------- FILE *__thiscall sub_74F280(void **this, char *a2) { void **v2; // esi FILE *result; // eax FILE *v4; // edi int v5; // eax int v6; // ebx void *v7; // eax unsigned int v8; // ebx void *v9; // eax void *v10; // eax unsigned __int16 *v11; // ecx char *v12; // eax unsigned int v13; // edx int v14; // ecx int v15; // edi char *v16; // [esp+10h] [ebp+8h] v2 = this; sub_74EEA0(this); result = fopen(a2, "rb"); v4 = result; v16 = (char *)result; if ( !result ) { v2[6] = (void *)1; return result; } v5 = _fileno(result); v6 = _filelength(v5); v7 = operator new(4u); v2[4] = v7; if ( fread(v7, 4u, 1u, v4) != 1 ) { v2[6] = (void *)2; LABEL_9: sub_74EEA0(v2); fclose(v4); return 0; } if ( *(_WORD *)v2[4] != 6 ) { v2[6] = (void *)3; goto LABEL_9; } v8 = v6 - 4; v9 = operator new[](v8); v2[3] = v9; if ( fread(v9, v8, 1u, v4) != 1 ) { v2[6] = (void *)4; goto LABEL_9; } v10 = operator new[](4 * *((unsigned __int16 *)v2[4] + 1)); v11 = (unsigned __int16 *)v2[4]; v2[5] = v10; memset(v10, 0, 4 * v11[1]); v12 = (char *)v2[3]; v13 = 0; if ( *((_WORD *)v2[4] + 1) > 0u ) { do { *((_DWORD *)v2[5] + v13) = v12; *((_DWORD *)v12 + 167) = v12 + 684; v14 = *((unsigned __int16 *)v12 + 330); *((_DWORD *)v12 + 168) = &v12[v14 + 684]; v15 = *((unsigned __int16 *)v12 + 332); *((_DWORD *)v12 + 169) = &v12[v15 + 684 + v14]; ++v13; v12 += v14 + v15 + *((unsigned __int16 *)v12 + 331) + 680; } while ( v13 < *((unsigned __int16 *)v2[4] + 1) ); v4 = (FILE *)v16; } fclose(v4); v2[6] = 0; sub_74F080(v2); return (FILE *)1; } //----- (0074F410) -------------------------------------------------------- FILE *__thiscall sub_74F410(void **this, char *a2) { void **v2; // edi FILE *result; // eax FILE *v4; // ebx int v5; // eax void *v6; // eax _WORD *v7; // eax _WORD *v8; // eax _DWORD *v9; // esi void *v10; // eax unsigned int v11; // ST18_4 void *v12; // eax size_t v13; // ST08_4 void *v14; // ST04_4 char *v15; // [esp+10h] [ebp+8h] v2 = this; sub_74EEA0(this); result = fopen(a2, "rb"); v4 = result; if ( !result ) { v2[6] = (void *)1; return result; } v5 = _fileno(result); _filelength(v5); v6 = operator new(4u); v2[4] = v6; if ( fread(v6, 4u, 1u, v4) != 1 ) { v2[6] = (void *)2; LABEL_5: sub_74EEA0(v2); fclose(v4); return 0; } v7 = v2[4]; if ( *v7 != 6 ) { v2[6] = (void *)3; goto LABEL_5; } v2[5] = operator new[](4 * (unsigned __int16)v7[1]); v8 = v2[4]; v2[6] = (void *)4; v15 = 0; if ( v8[1] > 0u ) { do { v9 = operator new(0x2A8u); memset(v9, 0, 0x2A8u); *((_DWORD *)v2[5] + (_DWORD)v15) = v9; if ( fread(v9, 0x2A8u, 1u, v4) != 1 ) goto LABEL_5; v10 = operator new[](*((unsigned __int16 *)v9 + 330)); v11 = *((unsigned __int16 *)v9 + 332); v9[167] = v10; v9[168] = operator new[](v11); v12 = operator new[](*((unsigned __int16 *)v9 + 331)); v13 = *((unsigned __int16 *)v9 + 330); v14 = (void *)v9[167]; v9[169] = v12; if ( fread(v14, v13, 1u, v4) != 1 || fread((void *)v9[168], *((unsigned __int16 *)v9 + 332), 1u, v4) != 1 || fread((void *)v9[169], *((unsigned __int16 *)v9 + 331), 1u, v4) != 1 ) { goto LABEL_5; } *v9 = *((unsigned __int16 *)v9 + 330) + *((unsigned __int16 *)v9 + 331) + *((unsigned __int16 *)v9 + 332) + 680; } while ( (unsigned int)++v15 < *((unsigned __int16 *)v2[4] + 1) ); } fclose(v4); v2[6] = 0; sub_74F080(v2); return (FILE *)1; } //----- (0074F620) -------------------------------------------------------- FILE *__thiscall sub_74F620(int this, char *a2, int a3) { FILE *result; // eax *(_DWORD *)(this + 8) = a3; if ( a3 ) result = sub_74F280((void **)this, a2); else result = sub_74F410((void **)this, a2); return result; } //----- (0074F650) -------------------------------------------------------- void __thiscall sub_74F650(void *this) { *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *((_DWORD *)this + 9) = 0; *((_DWORD *)this + 8) = 0; *((_DWORD *)this + 7) = 0; } //----- (0074F670) -------------------------------------------------------- char *__thiscall sub_74F670(char *this, int a2) { char *result; // eax _BYTE *v3; // edx signed int v4; // edi result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); *((_DWORD *)this + 5) = *(_DWORD *)(a2 + 20); this[24] = *(_BYTE *)(a2 + 24); this[25] = *(_BYTE *)(a2 + 25); this[26] = *(_BYTE *)(a2 + 26); this[27] = *(_BYTE *)(a2 + 27); *((_DWORD *)this + 7) = *(_DWORD *)(a2 + 28); *((_DWORD *)this + 8) = *(_DWORD *)(a2 + 32); *((_DWORD *)this + 9) = *(_DWORD *)(a2 + 36); v3 = this + 40; v4 = 32; do { *v3 = v3[a2 - (_DWORD)this]; ++v3; --v4; } while ( v4 ); return result; } //----- (0074F6F0) -------------------------------------------------------- signed int __thiscall sub_74F6F0(int *this, _DWORD *a2) { int v2; // edi int v3; // edx _DWORD *v4; // eax v2 = *this; v3 = 0; if ( *this <= 0 ) return 0; v4 = this + 4; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++v3; v4 += 18; if ( v3 >= v2 ) return 0; } *this = v2 - 1; memcpy(&this[18 * v3 + 1], &this[18 * v3 + 19], 72 * (v2 - 1 - v3)); return 1; } //----- (0074F770) -------------------------------------------------------- int __thiscall sub_74F770(_DWORD *this, _DWORD *a2) { int v2; // edx _DWORD *v3; // eax v2 = 0; if ( *this <= 0 ) return 0; v3 = this + 4; while ( *(v3 - 2) != *a2 || *(v3 - 1) != a2[1] || *v3 != a2[2] || v3[1] != a2[3] || v3[2] != a2[4] ) { ++v2; v3 += 18; if ( v2 >= *this ) return 0; } return (int)&this[18 * v2 + 1]; } //----- (0074F7D0) -------------------------------------------------------- signed int __thiscall sub_74F7D0(_DWORD *this, _DWORD *a2) { int v2; // edx _DWORD *v3; // eax v2 = 0; if ( *this <= 0 ) return 0; v3 = this + 4; while ( *(v3 - 2) != *a2 || *(v3 - 1) != a2[1] || *v3 != a2[2] || v3[1] != a2[3] || v3[2] != a2[4] ) { ++v2; v3 += 18; if ( v2 >= *this ) return 0; } this[18 * v2 + 1] |= 1u; return 1; } //----- (0074F840) -------------------------------------------------------- signed int __thiscall sub_74F840(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7) { int v7; // edx _DWORD *v8; // eax _DWORD *v10; // eax v7 = 0; if ( *this <= 0 ) return 0; v8 = this + 4; while ( *(v8 - 2) != a2 || *(v8 - 1) != a3 || *v8 != a4 || v8[1] != a5 || v8[2] != a6 ) { ++v7; v8 += 18; if ( v7 >= *this ) return 0; } v10 = &this[18 * v7 + 8]; *v10 = *a7; v10[1] = a7[1]; v10[2] = a7[2]; return 1; } //----- (0074F8B0) -------------------------------------------------------- signed int __thiscall sub_74F8B0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { int v7; // edx _DWORD *v8; // eax v7 = 0; if ( *this <= 0 ) return 0; v8 = this + 4; while ( *(v8 - 2) != a2 || *(v8 - 1) != a3 || *v8 != a4 || v8[1] != a5 || v8[2] != a6 ) { ++v7; v8 += 18; if ( v7 >= *this ) return 0; } BYTE2(this[18 * v7 + 7]) = a7; return 1; } //----- (0074F910) -------------------------------------------------------- signed int __thiscall sub_74F910(_DWORD *this, int a2, int a3, int a4, int a5, int a6, char a7) { int v7; // edx _DWORD *v8; // eax v7 = 0; if ( *this <= 0 ) return 0; v8 = this + 4; while ( *(v8 - 2) != a2 || *(v8 - 1) != a3 || *v8 != a4 || v8[1] != a5 || v8[2] != a6 ) { ++v7; v8 += 18; if ( v7 >= *this ) return 0; } BYTE1(this[18 * v7 + 7]) = a7; return 1; } //----- (0074F970) -------------------------------------------------------- _DWORD *__thiscall sub_74F970(_DWORD *this) { _DWORD *v1; // esi v1 = this; `eh vector constructor iterator'(this + 1, 0x48u, 150, sub_74F650, nullsub_6); *v1 = 0; return v1; } //----- (0074F9A0) -------------------------------------------------------- void __thiscall sub_74F9A0(_DWORD *this) { *this = 0; `eh vector destructor iterator'(this + 1, 0x48u, 150, nullsub_6); } //----- (0074F9C0) -------------------------------------------------------- signed int __thiscall sub_74F9C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi signed int v3; // edi signed int result; // eax signed int v5; // ecx _DWORD *v6; // eax v2 = this; v3 = *this; if ( *this > 150 ) return 0; v5 = 0; if ( v3 <= 0 ) { LABEL_11: if ( v3 < 150 ) { sub_74F670((char *)&v2[18 * v3 + 1], (int)a2); ++*v2; result = 1; } else { result = 0; } } else { v6 = v2 + 4; while ( *(v6 - 2) != a2[1] || *(v6 - 1) != a2[2] || *v6 != a2[3] || v6[1] != a2[4] || v6[2] != a2[5] ) { ++v5; v6 += 18; if ( v5 >= v3 ) goto LABEL_11; } sub_74F670((char *)&v2[18 * v5 + 1], (int)a2); result = 2; } return result; } //----- (0074FA60) -------------------------------------------------------- signed int __thiscall sub_74FA60(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // edx int v4; // esi _DWORD *v5; // eax struct _SYSTEMTIME SystemTime; // [esp+Ch] [ebp-14h] v2 = this; v3 = *this; v4 = 0; if ( *this <= 0 ) return 0; v5 = this + 4; while ( *(v5 - 2) != *a2 || *(v5 - 1) != a2[1] || *v5 != a2[2] || v5[1] != a2[3] || v5[2] != a2[4] ) { ++v4; v5 += 18; if ( v4 >= v3 ) return 0; } if ( v4 >= v3 ) return 0; GetLocalTime(&SystemTime); v2[18 * v4 + 1] = v2[18 * v4 + 1] & 0xFC000000 | 2 * (SystemTime.wYear & 0x7FF | ((SystemTime.wMonth & 0xF | 16 * (SystemTime.wDay & 0x1F | 32 * (SystemTime.wHour & 0x1F))) << 11)); return 1; } //----- (0074FB30) -------------------------------------------------------- unsigned int __thiscall sub_74FB30(char *this) { char *v1; // ebx unsigned int result; // eax char v3; // [esp+Ch] [ebp-28h] int v4; // [esp+14h] [ebp-20h] int v5; // [esp+18h] [ebp-1Ch] int v6; // [esp+1Ch] [ebp-18h] int v7; // [esp+20h] [ebp-14h] __time32_t Time; // [esp+30h] [ebp-4h] v1 = this; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; strncpy(this, &byte_9A8050, 0x14u); Time = _time32(0); qmemcpy(&v3, _localtime32(&Time), 0x24u); result = *((_DWORD *)v1 + 5) & 0xFC000000; *((_DWORD *)v1 + 5) = result | 2 * (v7 & 0x7FF | ((v6 & 0xF | 16 * (v5 & 0x1F | 32 * (v4 & 0x1F))) << 11)); return result; } //----- (0074FBD0) -------------------------------------------------------- BOOL __stdcall sub_74FBD0(unsigned int *a1) { unsigned int v1; // ecx __time32_t v3; // esi struct tm Tm; // [esp+0h] [ebp-28h] v1 = *a1; if ( *a1 & 1 ) return 1; Tm.tm_sec = 0; Tm.tm_min = 0; Tm.tm_wday = 0; Tm.tm_yday = 0; Tm.tm_isdst = 0; Tm.tm_year = ((v1 >> 1) & 0x7FF) - 1900; Tm.tm_hour = ((v1 >> 21) & 0x1F) + 120; Tm.tm_mon = ((unsigned __int16)v1 >> 12) - 1; Tm.tm_mday = (v1 >> 16) & 0x1F; v3 = _mktime32(&Tm); return v3 > _time32(0); } //----- (0074FC90) -------------------------------------------------------- signed int __thiscall sub_74FC90(_DWORD *this, int a2) { _DWORD *v2; // edi signed int v3; // ecx signed int result; // eax signed int v5; // esi _DWORD *v6; // edx int v7; // ecx int v8; // edx v2 = this; v3 = this[7]; if ( v3 > 20 ) return 0; v5 = 0; if ( v3 <= 0 ) { LABEL_11: if ( v3 < 20 ) { v8 = (int)v2 + 26 * v3 + 32; *(_DWORD *)v8 = *(_DWORD *)a2; *(_DWORD *)(v8 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v8 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(v8 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(v8 + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(v8 + 20) = *(_DWORD *)(a2 + 20); *(_BYTE *)(v8 + 24) = *(_BYTE *)(a2 + 24); *(_BYTE *)(v8 + 25) = *(_BYTE *)(a2 + 25); ++v2[7]; result = 1; } else { result = 0; } } else { v6 = v2 + 10; while ( *(v6 - 2) != *(_DWORD *)a2 || *(v6 - 1) != *(_DWORD *)(a2 + 4) || *v6 != *(_DWORD *)(a2 + 8) || v6[1] != *(_DWORD *)(a2 + 12) || v6[2] != *(_DWORD *)(a2 + 16) ) { ++v5; v6 = (_DWORD *)((char *)v6 + 26); if ( v5 >= v3 ) goto LABEL_11; } v7 = (int)v2 + 26 * v5 + 32; *(_DWORD *)v7 = *(_DWORD *)a2; *(_DWORD *)(v7 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(v7 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(v7 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(v7 + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(v7 + 20) = *(_DWORD *)(a2 + 20); *(_BYTE *)(v7 + 24) = *(_BYTE *)(a2 + 24); *(_BYTE *)(v7 + 25) = *(_BYTE *)(a2 + 25); result = 2; } return result; } //----- (0074FD80) -------------------------------------------------------- signed int __thiscall sub_74FD80(_DWORD *this, _DWORD *a2) { int v2; // edi int v3; // edx _DWORD *v4; // eax v2 = this[7]; v3 = 0; if ( v2 <= 0 ) return 0; v4 = this + 10; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++v3; v4 = (_DWORD *)((char *)v4 + 26); if ( v3 >= v2 ) return 0; } this[7] = v2 - 1; memcpy((char *)this + 26 * v3 + 32, (char *)this + 26 * v3 + 58, 26 * (v2 - 1 - v3)); return 1; } //----- (0074FE00) -------------------------------------------------------- _DWORD *__thiscall sub_74FE00(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax int v4; // ecx int v5; // esi _DWORD *v6; // edx result = this; if ( *this != *a2 || this[1] != a2[1] || this[2] != a2[2] || this[3] != a2[3] || this[4] != a2[4] ) { v4 = this[7]; v5 = 0; if ( v4 <= 0 ) { LABEL_15: result = 0; } else { v6 = result + 10; while ( *(v6 - 2) != *a2 || *(v6 - 1) != a2[1] || *v6 != a2[2] || v6[1] != a2[3] || v6[2] != a2[4] ) { ++v5; v6 = (_DWORD *)((char *)v6 + 26); if ( v5 >= v4 ) goto LABEL_15; } *a3 = v5; result = (_DWORD *)((char *)result + 26 * v5 + 32); } } else { *a3 = -1; } return result; } //----- (0074FEA0) -------------------------------------------------------- signed int __thiscall sub_74FEA0(char *this, _DWORD *a2) { if ( *(_DWORD *)this != *a2 || *((_DWORD *)this + 1) != a2[1] || *((_DWORD *)this + 2) != a2[2] || *((_DWORD *)this + 3) != a2[3] || *((_DWORD *)this + 4) != a2[4] ) { return sub_74FD80(this, a2); } sub_74FB30(this); return 1; } //----- (0074FEF0) -------------------------------------------------------- signed int __stdcall sub_74FEF0(int a1) { struct _SYSTEMTIME SystemTime; // [esp+4h] [ebp-14h] if ( !a1 ) return 0; GetLocalTime(&SystemTime); *(_DWORD *)(a1 + 20) = *(_DWORD *)(a1 + 20) & 0xFC000000 | 2 * (SystemTime.wYear & 0x7FF | ((SystemTime.wMonth & 0xF | 16 * (SystemTime.wDay & 0x1F | 32 * (SystemTime.wHour & 0x1F))) << 11)); return 1; } //----- (0074FF80) -------------------------------------------------------- char __thiscall sub_74FF80(_DWORD *this, int a2) { char result; // al *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); *((_BYTE *)this + 24) = *(_BYTE *)(a2 + 24); result = *(_BYTE *)(a2 + 25); *((_BYTE *)this + 25) = result; return result; } //----- (0074FFC0) -------------------------------------------------------- BOOL __thiscall sub_74FFC0(int this, int a2) { if ( *(_DWORD *)this != *(_DWORD *)a2 || *(_DWORD *)(this + 4) != *(_DWORD *)(a2 + 4) || *(_DWORD *)(this + 8) != *(_DWORD *)(a2 + 8) || *(_DWORD *)(this + 12) != *(_DWORD *)(a2 + 12) || *(_DWORD *)(this + 16) != *(_DWORD *)(a2 + 16) ) { return sub_74FC90((_DWORD *)this, a2) != 0; } *(_DWORD *)this = *(_DWORD *)a2; *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(this + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(this + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(this + 20) = *(_DWORD *)(a2 + 20); *(_BYTE *)(this + 24) = *(_BYTE *)(a2 + 24); *(_BYTE *)(this + 25) = *(_BYTE *)(a2 + 25); return 1; } //----- (00750040) -------------------------------------------------------- signed int __thiscall sub_750040(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi signed int v4; // ebx int v6; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); this[5] = *(_DWORD *)(a2 + 20); *((_BYTE *)this + 24) = *(_BYTE *)(a2 + 24); *((_BYTE *)this + 25) = *(_BYTE *)(a2 + 25); v4 = 0; if ( *(_BYTE *)(a2 + 26) & 1 ) this[7] = 0; if ( *(_WORD *)(a2 + 27) > 0u ) { v6 = a2 + 29; do { if ( !sub_74FC90(v3, v6) ) break; v6 += 26; ++v4; } while ( v4 < *(unsigned __int16 *)(v2 + 27) ); } return 1; } //----- (007500C0) -------------------------------------------------------- signed int __thiscall sub_7500C0(_DWORD *this, _DWORD *a2) { signed int result; // eax int v3; // edx _DWORD *v4; // eax int v5; // edx if ( *this != *a2 || this[1] != a2[1] || this[2] != a2[2] || this[3] != a2[3] || this[4] != a2[4] ) { v3 = 0; if ( this[7] <= 0 ) goto LABEL_15; v4 = this + 10; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++v3; v4 = (_DWORD *)((char *)v4 + 26); if ( v3 >= this[7] ) goto LABEL_15; } v5 = 26 * v3; if ( (_DWORD *)((char *)this + v5) == (_DWORD *)-32 ) { LABEL_15: result = 0; } else { *(_DWORD *)((char *)this + v5 + 52) |= 1u; result = 1; } } else { result = 1; this[5] |= 1u; } return result; } //----- (00750160) -------------------------------------------------------- signed int __thiscall sub_750160(_DWORD *this, _DWORD *a2) { int v3; // edi int v4; // edx _DWORD *v5; // eax if ( *this == *a2 && this[1] == a2[1] && this[2] == a2[2] && this[3] == a2[3] && this[4] == a2[4] ) return sub_74FEF0((int)this); v3 = this[7]; v4 = 0; if ( v3 <= 0 ) return 0; v5 = this + 10; while ( *(v5 - 2) != *a2 || *(v5 - 1) != a2[1] || *v5 != a2[2] || v5[1] != a2[3] || v5[2] != a2[4] ) { ++v4; v5 = (_DWORD *)((char *)v5 + 26); if ( v4 >= v3 ) return 0; } return sub_74FEF0((int)this + 26 * v4 + 32); } //----- (00750200) -------------------------------------------------------- signed int __thiscall sub_750200(_DWORD *this, _DWORD *a2, char a3) { signed int result; // eax int v4; // edx _DWORD *v5; // eax int v6; // edx if ( *this != *a2 || this[1] != a2[1] || this[2] != a2[2] || this[3] != a2[3] || this[4] != a2[4] ) { v4 = 0; if ( this[7] <= 0 ) goto LABEL_15; v5 = this + 10; while ( *(v5 - 2) != *a2 || *(v5 - 1) != a2[1] || *v5 != a2[2] || v5[1] != a2[3] || v5[2] != a2[4] ) { ++v4; v5 = (_DWORD *)((char *)v5 + 26); if ( v4 >= this[7] ) goto LABEL_15; } v6 = 26 * v4; if ( (_DWORD *)((char *)this + v6) == (_DWORD *)-32 ) { LABEL_15: result = 0; } else { *((_BYTE *)this + v6 + 56) = a3; result = 1; } } else { *((_BYTE *)this + 24) = a3; result = 1; } return result; } //----- (007502B0) -------------------------------------------------------- char *__thiscall sub_7502B0(char *this) { char *v1; // esi v1 = this; *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; `eh vector constructor iterator'(this + 32, 0x1Au, 20, sub_6F72B0, nullsub_6); sub_74FB30(v1); *((_DWORD *)v1 + 7) = 0; return v1; } //----- (007502F0) -------------------------------------------------------- void __thiscall sub_7502F0(char *this) { char *v1; // esi v1 = this; sub_74FB30(this); *((_DWORD *)v1 + 7) = 0; `eh vector destructor iterator'(v1 + 32, 0x1Au, 20, nullsub_6); } //----- (00750320) -------------------------------------------------------- char *__thiscall sub_750320(char *this, int a2) { char *result; // eax _BYTE *v3; // edx signed int v4; // edi result = this; *(_WORD *)this = *(_WORD *)a2; *(_DWORD *)(this + 2) = *(_DWORD *)(a2 + 2); *(_DWORD *)(this + 6) = *(_DWORD *)(a2 + 6); *(_DWORD *)(this + 10) = *(_DWORD *)(a2 + 10); *(_DWORD *)(this + 14) = *(_DWORD *)(a2 + 14); *(_DWORD *)(this + 18) = *(_DWORD *)(a2 + 18); *(_DWORD *)(this + 22) = *(_DWORD *)(a2 + 22); v3 = this + 26; v4 = 128; do { *v3 = v3[a2 - (_DWORD)this]; ++v3; --v4; } while ( v4 ); return result; } //----- (00750370) -------------------------------------------------------- _DWORD *__thiscall sub_750370(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = (_DWORD *)this[1]; if ( !result ) return 0; while ( *(_DWORD *)((char *)result + 6) != *a2 || *(_DWORD *)((char *)result + 10) != a2[1] || *(_DWORD *)((char *)result + 14) != a2[2] || *(_DWORD *)((char *)result + 18) != a2[3] || *(_DWORD *)((char *)result + 22) != a2[4] ) { result = (_DWORD *)result[40]; if ( !result ) return 0; } return result; } //----- (007503C0) -------------------------------------------------------- void __thiscall sub_7503C0(_DWORD *this, void *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx v2 = this; if ( a2 ) { v3 = *((_DWORD *)a2 + 39); if ( v3 ) *(_DWORD *)(v3 + 160) = *((_DWORD *)a2 + 40); else v2[1] = *((_DWORD *)a2 + 40); v4 = *((_DWORD *)a2 + 40); if ( v4 ) *(_DWORD *)(v4 + 156) = *((_DWORD *)a2 + 39); else v2[2] = *((_DWORD *)a2 + 39); operator delete(a2); --*v2; } } //----- (00750430) -------------------------------------------------------- signed int __thiscall sub_750430(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // eax signed int result; // eax char *v5; // eax char *v6; // edi int v7; // eax v2 = this; v3 = (char *)sub_750370(this, (_DWORD *)(a2 + 6)); if ( v3 ) { sub_750320(v3, a2); result = 1; } else { v5 = (char *)operator new(0xA4u); if ( v5 ) { *(_DWORD *)(v5 + 22) = 0; *(_DWORD *)(v5 + 18) = 0; *(_DWORD *)(v5 + 14) = 0; *(_DWORD *)(v5 + 10) = 0; *(_DWORD *)(v5 + 6) = 0; v6 = v5; } else { v6 = 0; } *((_DWORD *)v6 + 40) = 0; *((_DWORD *)v6 + 39) = v2[2]; sub_750320(v6, a2); if ( !v2[1] ) v2[1] = v6; v7 = v2[2]; if ( v7 ) *(_DWORD *)(v7 + 160) = v6; ++*v2; v2[2] = v6; result = 1; } return result; } //----- (007504D0) -------------------------------------------------------- _DWORD *__thiscall sub_7504D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *result; // eax v2 = this; result = sub_750370(this, a2); if ( result ) { sub_7503C0(v2, result); result = (_DWORD *)1; } return result; } //----- (00750500) -------------------------------------------------------- void __thiscall sub_750500(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; while ( v1[1] ) { v2 = (_DWORD *)v1[1]; v1[1] = v2[40]; if ( v2 ) operator delete(v2); } *v1 = 0; v1[2] = 0; } //----- (00750550) -------------------------------------------------------- void __thiscall sub_750550(void *this) { *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; *(_DWORD *)((char *)this + 106) = 0; *(_DWORD *)((char *)this + 102) = 0; *(_DWORD *)((char *)this + 98) = 0; } //----- (00750570) -------------------------------------------------------- void __thiscall sub_750570(_DWORD *this) { *this = &CGuildMember::`vftable'; `eh vector destructor iterator'((char *)this + 6, 0x6Eu, 400, nullsub_6); } // A090AC: using guessed type void *CGuildMember::`vftable'; //----- (00750590) -------------------------------------------------------- signed int __thiscall sub_750590(unsigned __int16 *this, _DWORD *a2) { signed int v2; // esi signed int result; // eax _DWORD *v4; // ecx v2 = this[2]; result = 0; if ( v2 <= 0 ) return -1; v4 = this + 7; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++result; v4 = (_DWORD *)((char *)v4 + 110); if ( result >= v2 ) return -1; } return result; } //----- (007505E0) -------------------------------------------------------- char *__thiscall sub_7505E0(char *this, int a2) { char *result; // eax _BYTE *v3; // esi signed int v4; // edx result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); this[20] = *(_BYTE *)(a2 + 20); *(_DWORD *)(this + 21) = *(_DWORD *)(a2 + 21); *(_WORD *)(this + 25) = *(_WORD *)(a2 + 25); v3 = this + 27; v4 = 64; do { *v3 = v3[a2 - (_DWORD)this]; ++v3; --v4; } while ( v4 ); *(_DWORD *)(this + 91) = *(_DWORD *)(a2 + 91); this[95] = *(_BYTE *)(a2 + 95); this[96] = *(_BYTE *)(a2 + 96); this[97] = *(_BYTE *)(a2 + 97); *(_DWORD *)(this + 98) = *(_DWORD *)(a2 + 98); *(_DWORD *)(this + 102) = *(_DWORD *)(a2 + 102); *(_DWORD *)(this + 106) = *(_DWORD *)(a2 + 106); return result; } //----- (00750670) -------------------------------------------------------- signed int __thiscall sub_750670(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi int v3; // eax signed int result; // eax v2 = this; v3 = this[2]; if ( (unsigned __int16)v3 >= 0x190u ) return 0; sub_7505E0((char *)&this[55 * v3 + 3], a2); result = 1; ++v2[2]; return result; } //----- (007506B0) -------------------------------------------------------- signed int __thiscall sub_7506B0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; memcpy(&v2[55 * v3 + 3], &v2[55 * v3 + 58], 110 * (--v2[2] - v3)); return 1; } //----- (00750700) -------------------------------------------------------- signed int __thiscall sub_750700(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi int v3; // eax signed int result; // eax v2 = this; v3 = this[2]; if ( (unsigned __int16)v3 >= 0x190u ) return 0; sub_7505E0((char *)&this[55 * v3 + 3], a2 + 20); result = 1; ++v2[2]; return result; } //----- (00750740) -------------------------------------------------------- _DWORD *__thiscall sub_750740(_DWORD *this, int a2) { _DWORD *result; // eax result = this; *this = *(_DWORD *)a2; this[1] = *(_DWORD *)(a2 + 4); this[2] = *(_DWORD *)(a2 + 8); this[3] = *(_DWORD *)(a2 + 12); this[4] = *(_DWORD *)(a2 + 16); *((_BYTE *)this + 20) = *(_BYTE *)(a2 + 20); *((_BYTE *)this + 21) = *(_BYTE *)(a2 + 21); *(_DWORD *)((char *)this + 22) = *(_DWORD *)(a2 + 22); *(_DWORD *)((char *)this + 26) = *(_DWORD *)(a2 + 26); *(_DWORD *)((char *)this + 30) = *(_DWORD *)(a2 + 30); *(_DWORD *)((char *)this + 34) = *(_DWORD *)(a2 + 34); qmemcpy((char *)this + 38, (const void *)(a2 + 38), 0x24u); qmemcpy((char *)this + 74, (const void *)(a2 + 74), 0x24u); qmemcpy((char *)this + 110, (const void *)(a2 + 110), 0x28u); qmemcpy((char *)this + 150, (const void *)(a2 + 150), 0x2Au); qmemcpy(this + 48, (const void *)(a2 + 192), 0x2Au); return result; } //----- (007507F0) -------------------------------------------------------- signed int __thiscall sub_7507F0(_DWORD *this, int a2, char a3, _DWORD *a4, const void *a5) { int v5; // eax v5 = this[1]; if ( !v5 ) return 0; while ( *(_DWORD *)(v5 + 146) != a2 ) { v5 = *(_DWORD *)(v5 + 240); if ( !v5 ) return 0; } *(_BYTE *)(v5 + 21) = a3; *(_DWORD *)(v5 + 34) = *a4; qmemcpy((void *)(v5 + 110), a5, 0x24u); return 1; } //----- (00750840) -------------------------------------------------------- int __stdcall sub_750840(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 0u ? 0xD02 : 0; else result = 3329; return result; } //----- (00750870) -------------------------------------------------------- int __stdcall sub_750870(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 2u ? 0xD12 : 0; else result = 3345; return result; } //----- (007508A0) -------------------------------------------------------- int __stdcall sub_7508A0(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 1u ? 0xCD3 : 0; else result = 3280; return result; } //----- (007508D0) -------------------------------------------------------- int __stdcall sub_7508D0(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 1u ? 0xCF3 : 0; else result = 3313; return result; } //----- (00750900) -------------------------------------------------------- int __stdcall sub_750900(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 0u ? 0xCEB : 0; else result = 3305; return result; } //----- (00750930) -------------------------------------------------------- int __stdcall sub_750930(int a1) { int result; // eax if ( a1 ) result = *(_BYTE *)(a1 + 20) > 1u ? 0xD22 : 0; else result = 3361; return result; } //----- (00750960) -------------------------------------------------------- bool __stdcall sub_750960(int a1) { bool result; // al if ( a1 ) result = *(_BYTE *)(a1 + 20) == 0; else result = 0; return result; } //----- (00750980) -------------------------------------------------------- char *__thiscall sub_750980(int this, char *a2) { int v2; // esi char *result; // eax char v4[4]; // [esp+Ch] [ebp-18h] int v5; // [esp+10h] [ebp-14h] int v6; // [esp+14h] [ebp-10h] int v7; // [esp+18h] [ebp-Ch] int v8; // [esp+1Ch] [ebp-8h] v2 = this; *(_WORD *)(this + 1896) = 0; result = a2; *(_DWORD *)(this + 1148) = 1; *(_DWORD *)(this + 1888) = 0; *(_DWORD *)(this + 1892) = 0; *(_DWORD *)(this + 1900) = 0; *(_DWORD *)(this + 1904) = 0; if ( !a2 ) { v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, "Unknown", 0x14u); result = v4; } *(_DWORD *)(v2 + 1152) = *(_DWORD *)result; *(_DWORD *)(v2 + 1156) = *((_DWORD *)result + 1); *(_DWORD *)(v2 + 1160) = *((_DWORD *)result + 2); *(_DWORD *)(v2 + 1164) = *((_DWORD *)result + 3); *(_DWORD *)(v2 + 1168) = *((_DWORD *)result + 4); *(_DWORD *)(v2 + 1176) = 0; *(_DWORD *)(v2 + 1180) = 0; *(_DWORD *)(v2 + 1184) = 0; *(_BYTE *)(v2 + 1188) = 0; *(_BYTE *)(v2 + 1376) = 0; *(_DWORD *)(v2 + 1172) = 6553600; return result; } //----- (00750A60) -------------------------------------------------------- signed int __stdcall sub_750A60(int a1) { return 1; } //----- (00750A70) -------------------------------------------------------- BOOL __stdcall sub_750A70(int a1) { return *(_WORD *)(a1 + 8) == 3137; } //----- (00750A90) -------------------------------------------------------- BOOL __stdcall sub_750A90(_WORD *a1) { return *a1 == 3137; } //----- (00750AB0) -------------------------------------------------------- signed int __thiscall sub_750AB0(int this, int a2) { if ( !*(_DWORD *)(this + 8) ) return 0; *(_BYTE *)(this + 338) = *(_BYTE *)(a2 + 16); *(_DWORD *)(this + 339) = *(_DWORD *)(a2 + 17); qmemcpy((void *)(this + 343), (const void *)(a2 + 21), 0x24u); return 1; } //----- (00750B00) -------------------------------------------------------- signed int __thiscall sub_750B00(int this, int a2) { signed int result; // eax result = 0; if ( *(_DWORD *)(this + 8) ) { *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 1148) = 0; *(_DWORD *)(this + 1904) = 0; *(_DWORD *)(this + 1900) = 0; *(_DWORD *)(this + 1888) = 0; *(_DWORD *)(this + 1892) = 0; *(_WORD *)(this + 1896) = 0; result = 1; } return result; } //----- (00750B40) -------------------------------------------------------- signed int __thiscall sub_750B40(_DWORD *this, int a2) { if ( !this[2] ) return 0; this[8] = *(_DWORD *)(a2 + 28); this[9] = *(_DWORD *)(a2 + 32); return 1; } //----- (00750B70) -------------------------------------------------------- signed int __thiscall sub_750B70(_DWORD *this, _DWORD *a2) { char *v3; // eax int v4; // edx char v5; // cl if ( !this[2] ) return 0; *(_DWORD *)((char *)this + 507) = *a2; qmemcpy((char *)this + 511, a2 + 1, 0x38u); v3 = (char *)a2 + 62; v4 = (char *)this + 567 - ((char *)a2 + 62); do { v5 = *v3; v3[v4] = *v3; ++v3; } while ( v5 ); return 1; } //----- (00750BF0) -------------------------------------------------------- signed int __thiscall sub_750BF0(int this, _BYTE *a2) { if ( !*(_DWORD *)(this + 8) ) return 0; *(_BYTE *)(this + 41) = *a2; return 1; } //----- (00750C10) -------------------------------------------------------- signed int __thiscall sub_750C10(_DWORD *this, int *a2) { if ( !this[2] ) return 0; sub_7507F0(this + 270, a2[4], 2, a2 + 5, a2 + 6); return 1; } //----- (00750C50) -------------------------------------------------------- signed int __thiscall sub_750C50(int this, int a2) { signed int result; // eax result = 0; if ( *(_DWORD *)(this + 8) ) { *(_DWORD *)(this + 221) = 0; *(_BYTE *)(this + 100) = 0; result = 1; } return result; } //----- (00750C70) -------------------------------------------------------- signed int __thiscall sub_750C70(char *this, _DWORD *a2) { char *v3; // eax int v4; // edx char v5; // cl if ( !*((_DWORD *)this + 287) || !a2 ) return 0; *((_DWORD *)this + 329) = *a2; qmemcpy(this + 1320, a2 + 1, 0x38u); v3 = (char *)a2 + 62; v4 = this + 1376 - ((char *)a2 + 62); do { v5 = *v3; v3[v4] = *v3; ++v3; } while ( v5 ); return 1; } //----- (00750D00) -------------------------------------------------------- void __thiscall sub_750D00(void *this) { *(_DWORD *)((char *)this + 17) = 0; *(_DWORD *)((char *)this + 13) = 0; *(_DWORD *)((char *)this + 9) = 0; *(_DWORD *)((char *)this + 5) = 0; } //----- (00750D20) -------------------------------------------------------- void __thiscall sub_750D20(int this) { `eh vector destructor iterator'((void *)(this + 46), 0x15u, 31, nullsub_6); } //----- (00750D40) -------------------------------------------------------- char *__thiscall sub_750D40(int this) { _DWORD *v1; // esi signed int v2; // edi char *result; // eax *(_DWORD *)(this + 40) = 0; *(_WORD *)(this + 44) = 0; v1 = (_DWORD *)(this + 59); v2 = 31; do { *(v1 - 3) = 0; *((_BYTE *)v1 - 13) = 0; v1[1] = 0; *v1 = 0; *(v1 - 1) = 0; *(v1 - 2) = 0; result = strncpy((char *)v1 - 8, &byte_9A8050, 0x10u); v1 = (_DWORD *)((char *)v1 + 21); --v2; } while ( v2 ); return result; } //----- (00750D90) -------------------------------------------------------- void __thiscall sub_750D90(void *this) { *((_DWORD *)this + 4) = 0; *((_DWORD *)this + 3) = 0; *((_DWORD *)this + 2) = 0; *((_DWORD *)this + 1) = 0; *(_DWORD *)this = 0; *((_DWORD *)this + 25) = 0; *((_DWORD *)this + 24) = 0; *((_DWORD *)this + 23) = 0; } //----- (00750DB0) -------------------------------------------------------- void __thiscall sub_750DB0(_DWORD *this) { *this = &CGuildAcademyMember::`vftable'; `eh vector destructor iterator'((char *)this + 6, 0x6Du, 100, nullsub_6); } // A0910C: using guessed type void *CGuildAcademyMember::`vftable'; //----- (00750DD0) -------------------------------------------------------- signed int __thiscall sub_750DD0(unsigned __int16 *this, _DWORD *a2) { signed int v2; // esi signed int result; // eax _DWORD *v4; // ecx v2 = this[2]; result = 0; if ( v2 <= 0 ) return -1; v4 = this + 7; while ( *(v4 - 2) != *a2 || *(v4 - 1) != a2[1] || *v4 != a2[2] || v4[1] != a2[3] || v4[2] != a2[4] ) { ++result; v4 = (_DWORD *)((char *)v4 + 109); if ( result >= v2 ) return -1; } return result; } //----- (00750E20) -------------------------------------------------------- char *__thiscall sub_750E20(char *this, int a2) { char *result; // eax _BYTE *v3; // esi signed int v4; // edx result = this; *(_DWORD *)this = *(_DWORD *)a2; *((_DWORD *)this + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)this + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)this + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)this + 4) = *(_DWORD *)(a2 + 16); this[20] = *(_BYTE *)(a2 + 20); v3 = this + 21; v4 = 64; do { *v3 = v3[a2 - (_DWORD)this]; ++v3; --v4; } while ( v4 ); *(_DWORD *)(this + 85) = *(_DWORD *)(a2 + 85); this[89] = *(_BYTE *)(a2 + 89); this[90] = *(_BYTE *)(a2 + 90); this[91] = *(_BYTE *)(a2 + 91); *((_DWORD *)this + 23) = *(_DWORD *)(a2 + 92); *((_DWORD *)this + 24) = *(_DWORD *)(a2 + 96); *((_DWORD *)this + 25) = *(_DWORD *)(a2 + 100); *((_DWORD *)this + 26) = *(_DWORD *)(a2 + 104); this[108] = *(_BYTE *)(a2 + 108); return result; } //----- (00750EB0) -------------------------------------------------------- signed int __thiscall sub_750EB0(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi unsigned int v3; // eax signed int result; // eax v2 = this; v3 = this[2]; if ( v3 >= 0x64 ) return 0; sub_750E20((char *)this + 109 * v3 + 6, a2); result = 1; ++v2[2]; return result; } //----- (00750EF0) -------------------------------------------------------- signed int __thiscall sub_750EF0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax v2 = this; v3 = sub_750DD0(this, a2); if ( v3 == -1 ) return 0; memcpy((char *)v2 + 109 * v3 + 6, (char *)v2 + 109 * v3 + 115, 109 * (--v2[2] - v3)); return 1; } //----- (00750F40) -------------------------------------------------------- signed int __thiscall sub_750F40(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax v2 = this; v3 = sub_750DD0(this, (_DWORD *)(a2 + 20)); if ( v3 == -1 ) return 0; memcpy((char *)v2 + 109 * v3 + 6, (char *)v2 + 109 * v3 + 115, 109 * (--v2[2] - v3)); return 1; } //----- (00750FA0) -------------------------------------------------------- _DWORD *__thiscall sub_750FA0(_DWORD *this) { _DWORD *v1; // esi int v2; // esi signed int v3; // edi _DWORD *v5; // [esp+Ch] [ebp-4h] v1 = this; v5 = this; *this = &CGuildMember::`vftable'; `eh vector constructor iterator'((char *)this + 6, 0x6Eu, 400, sub_750550, nullsub_6); *((_WORD *)v1 + 2) = 0; v2 = (int)v1 + 18; v3 = 400; do { *(_DWORD *)(v2 + 4) = 0; *(_DWORD *)v2 = 0; *(_DWORD *)(v2 - 4) = 0; *(_DWORD *)(v2 - 8) = 0; *(_DWORD *)(v2 - 12) = 0; strncpy((char *)(v2 - 12), &byte_9A8050, 0x14u); *(_DWORD *)(v2 + 79) &= 0xFC000000; *(_BYTE *)(v2 + 8) = 0; *(_DWORD *)(v2 + 9) = 0; *(_WORD *)(v2 + 13) = 0; *(_BYTE *)(v2 + 15) = 0; *(_WORD *)(v2 + 83) = 0; *(_BYTE *)(v2 + 85) = 0; *(_DWORD *)(v2 + 94) = 0; *(_DWORD *)(v2 + 90) = 0; *(_DWORD *)(v2 + 86) = 0; strncpy((char *)(v2 + 86), &byte_9A8050, 0xCu); v2 += 110; --v3; } while ( v3 ); return v5; } // A090AC: using guessed type void *CGuildMember::`vftable'; //----- (00751050) -------------------------------------------------------- int __thiscall sub_751050(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int result; // eax v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) result = 0; else result = (int)&v2[55 * v3 + 3]; return result; } //----- (00751080) -------------------------------------------------------- signed int __thiscall sub_751080(_WORD *this, int a2) { int v2; // edi int v3; // edx int v5; // eax int v6; // edx int v7; // eax _BYTE *v8; // edi int v9; // ecx bool v10; // sf unsigned __int8 v11; // of int v12; // eax _WORD *v13; // [esp+4h] [ebp-Ch] int v14; // [esp+8h] [ebp-8h] signed int v15; // [esp+Ch] [ebp-4h] v2 = a2; v3 = *(unsigned __int16 *)(a2 + 4); v13 = this; if ( v3 + *(unsigned __int16 *)(a2 + 2) > 400 ) return 0; v5 = 0; v14 = 0; if ( v3 > 0 ) { v6 = a2 + 14; do { v7 = (int)&this[55 * (v5 + *(unsigned __int16 *)(v2 + 2)) + 3]; *(_DWORD *)v7 = *(_DWORD *)(v6 - 8); *(_DWORD *)(v7 + 4) = *(_DWORD *)(v6 - 4); *(_DWORD *)(v7 + 8) = *(_DWORD *)v6; *(_DWORD *)(v7 + 12) = *(_DWORD *)(v6 + 4); *(_DWORD *)(v7 + 16) = *(_DWORD *)(v6 + 8); *(_BYTE *)(v7 + 20) = *(_BYTE *)(v6 + 12); *(_DWORD *)(v7 + 21) = *(_DWORD *)(v6 + 13); *(_WORD *)(v7 + 25) = *(_WORD *)(v6 + 17); v8 = (_BYTE *)(v7 + 27); v15 = 64; do { *v8 = v8[v6 - 8 - v7]; ++v8; --v15; } while ( v15 ); *(_DWORD *)(v7 + 91) = *(_DWORD *)(v6 + 83); v2 = a2; *(_BYTE *)(v7 + 95) = *(_BYTE *)(v6 + 87); *(_BYTE *)(v7 + 96) = *(_BYTE *)(v6 + 88); *(_BYTE *)(v7 + 97) = *(_BYTE *)(v6 + 89); *(_DWORD *)(v7 + 98) = *(_DWORD *)(v6 + 90); *(_DWORD *)(v7 + 102) = *(_DWORD *)(v6 + 94); *(_DWORD *)(v7 + 106) = *(_DWORD *)(v6 + 98); v9 = *(unsigned __int16 *)(a2 + 4); v5 = v14 + 1; v6 += 110; v11 = __OFSUB__(v14 + 1, v9); v10 = v14 + 1 - v9 < 0; this = v13; ++v14; } while ( v10 ^ v11 ); } v12 = *(unsigned __int16 *)(v2 + 2) + *(unsigned __int16 *)(v2 + 4); if ( (unsigned __int16)this[2] < v12 ) this[2] = v12; return 1; } //----- (00751190) -------------------------------------------------------- signed int __thiscall sub_751190(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_BYTE *)(v4 + 20) = *(_BYTE *)(a2 + 20); return 1; } //----- (007511D0) -------------------------------------------------------- signed int __thiscall sub_7511D0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_DWORD *)(v4 + 21) = a2[5]; return 1; } //----- (00751210) -------------------------------------------------------- signed int __thiscall sub_751210(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_WORD *)(v4 + 25) = *(_WORD *)(a2 + 20); return 1; } //----- (00751250) -------------------------------------------------------- signed int __thiscall sub_751250(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_DWORD *)(v4 + 91) |= 1u; return 1; } //----- (00751290) -------------------------------------------------------- signed int __thiscall sub_751290(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // esi int v6; // eax int v7; // ecx int v8; // eax struct _SYSTEMTIME SystemTime; // [esp+4h] [ebp-14h] v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; GetLocalTime(&SystemTime); *(_DWORD *)(v4 + 91) &= 0xFFFFFFFE; v6 = *(_DWORD *)(v4 + 91) ^ ((unsigned __int16)*(_DWORD *)(v4 + 91) ^ (unsigned __int16)(2 * SystemTime.wYear)) & 0xFFE; *(_DWORD *)(v4 + 91) = v6; v7 = v6 ^ (unsigned __int16)((v6 ^ (SystemTime.wMonth << 12)) & 0xF000); *(_DWORD *)(v4 + 91) = v7; v8 = v7 ^ (v7 ^ (SystemTime.wDay << 16)) & 0x1F0000; *(_DWORD *)(v4 + 91) = v8; *(_DWORD *)(v4 + 91) = v8 ^ (v8 ^ (SystemTime.wHour << 21)) & 0x3E00000; return 1; } //----- (00751350) -------------------------------------------------------- signed int __thiscall sub_751350(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_BYTE *)(v4 + 97) = *(_BYTE *)(a2 + 20); return 1; } //----- (00751390) -------------------------------------------------------- signed int __thiscall sub_751390(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_BYTE *)(v4 + 96) = *(_BYTE *)(a2 + 20); return 1; } //----- (007513D0) -------------------------------------------------------- signed int __thiscall sub_7513D0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_DWORD *)(v4 + 98) = a2[5]; *(_DWORD *)(v4 + 102) = a2[6]; *(_DWORD *)(v4 + 106) = a2[7]; return 1; } //----- (00751420) -------------------------------------------------------- signed int __thiscall sub_751420(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax int v5; // ecx char *v7; // eax int v8; // edx char v9; // cl v2 = this; v3 = sub_750590(this, a2); if ( v3 == -1 ) return 0; v4 = 55 * v3; v5 = (int)&v2[v4 + 3]; if ( &v2[v4] == (unsigned __int16 *)-6 ) return 0; v7 = (char *)a2 + 22; v8 = v5 + 27 - ((_DWORD)a2 + 22); do { v9 = *v7; v7[v8] = *v7; ++v7; } while ( v9 ); return 1; } //----- (00751470) -------------------------------------------------------- signed int __thiscall sub_751470(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750590(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)&v2[55 * v3 + 3]; if ( !v4 ) return 0; *(_BYTE *)(v4 + 95) = *(_BYTE *)(a2 + 20); return 1; } //----- (007514B0) -------------------------------------------------------- signed int __thiscall sub_7514B0(char *this, _WORD *a2) { char *v2; // esi signed int result; // eax v2 = this; if ( *a2 != 3137 ) return 0; sub_6D9F10(this + 12, (int)(a2 + 1)); result = 1; *((_DWORD *)v2 + 2) = 1; return result; } //----- (007514F0) -------------------------------------------------------- int __thiscall sub_7514F0(int this) { int v1; // esi v1 = this; `eh vector constructor iterator'((void *)(this + 46), 0x15u, 31, sub_750D00, nullsub_6); *(_DWORD *)(v1 + 704) = 0; sub_750D40(v1); return v1; } //----- (00751520) -------------------------------------------------------- _DWORD *__thiscall sub_751520(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &CGuildAcademyMember::`vftable'; `eh vector constructor iterator'((char *)this + 6, 0x6Du, 100, sub_750D90, nullsub_6); *((_WORD *)v1 + 2) = 0; return v1; } // A0910C: using guessed type void *CGuildAcademyMember::`vftable'; //----- (00751550) -------------------------------------------------------- signed int __thiscall sub_751550(_WORD *this, int a2) { int v2; // edi int v3; // edx int v5; // eax int v6; // esi int v7; // eax _BYTE *v8; // edi int v9; // ecx bool v10; // sf unsigned __int8 v11; // of int v12; // eax _WORD *v13; // [esp+4h] [ebp-Ch] int v14; // [esp+8h] [ebp-8h] signed int v15; // [esp+Ch] [ebp-4h] v2 = a2; v3 = *(unsigned __int16 *)(a2 + 4); v13 = this; if ( v3 + *(unsigned __int16 *)(a2 + 2) > 100 ) return 0; v5 = 0; v14 = 0; if ( v3 > 0 ) { v6 = a2 + 14; do { v7 = (int)this + 109 * (v5 + *(unsigned __int16 *)(v2 + 2)) + 6; *(_DWORD *)v7 = *(_DWORD *)(v6 - 8); *(_DWORD *)(v7 + 4) = *(_DWORD *)(v6 - 4); *(_DWORD *)(v7 + 8) = *(_DWORD *)v6; *(_DWORD *)(v7 + 12) = *(_DWORD *)(v6 + 4); *(_DWORD *)(v7 + 16) = *(_DWORD *)(v6 + 8); *(_BYTE *)(v7 + 20) = *(_BYTE *)(v6 + 12); v8 = (_BYTE *)(v7 + 21); v15 = 64; do { *v8 = v8[v6 - 8 - v7]; ++v8; --v15; } while ( v15 ); *(_DWORD *)(v7 + 85) = *(_DWORD *)(v6 + 77); *(_BYTE *)(v7 + 89) = *(_BYTE *)(v6 + 81); v2 = a2; *(_BYTE *)(v7 + 90) = *(_BYTE *)(v6 + 82); *(_BYTE *)(v7 + 91) = *(_BYTE *)(v6 + 83); *(_DWORD *)(v7 + 92) = *(_DWORD *)(v6 + 84); *(_DWORD *)(v7 + 96) = *(_DWORD *)(v6 + 88); *(_DWORD *)(v7 + 100) = *(_DWORD *)(v6 + 92); *(_DWORD *)(v7 + 104) = *(_DWORD *)(v6 + 96); *(_BYTE *)(v7 + 108) = *(_BYTE *)(v6 + 100); v9 = *(unsigned __int16 *)(a2 + 4); v5 = v14 + 1; v6 += 109; v11 = __OFSUB__(v14 + 1, v9); v10 = v14 + 1 - v9 < 0; this = v13; ++v14; } while ( v10 ^ v11 ); } v12 = *(unsigned __int16 *)(v2 + 2) + *(unsigned __int16 *)(v2 + 4); if ( (unsigned __int16)this[2] < v12 ) this[2] = v12; return 1; } //----- (00751650) -------------------------------------------------------- signed int __thiscall sub_751650(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax int v5; // ecx char *v7; // eax int v8; // edx char v9; // cl v2 = this; v3 = sub_750DD0(this, a2); if ( v3 == -1 ) return 0; v4 = 109 * v3; v5 = (int)v2 + v4 + 6; if ( (unsigned __int16 *)((char *)v2 + v4) == (unsigned __int16 *)-6 ) return 0; v7 = (char *)a2 + 22; v8 = v5 + 21 - ((_DWORD)a2 + 22); do { v9 = *v7; v7[v8] = *v7; ++v7; } while ( v9 ); return 1; } //----- (007516A0) -------------------------------------------------------- signed int __thiscall sub_7516A0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750DD0(this, a2); if ( v3 == -1 ) return 0; v4 = (int)v2 + 109 * v3 + 6; if ( !v4 ) return 0; *(_DWORD *)(v4 + 85) |= 1u; return 1; } //----- (007516E0) -------------------------------------------------------- signed int __thiscall sub_7516E0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // esi int v6; // eax int v7; // ecx int v8; // eax struct _SYSTEMTIME SystemTime; // [esp+4h] [ebp-14h] v2 = this; v3 = sub_750DD0(this, a2); if ( v3 == -1 ) return 0; v4 = (int)v2 + 109 * v3 + 6; if ( !v4 ) return 0; GetLocalTime(&SystemTime); *(_DWORD *)(v4 + 85) &= 0xFFFFFFFE; v6 = *(_DWORD *)(v4 + 85) ^ ((unsigned __int16)*(_DWORD *)(v4 + 85) ^ (unsigned __int16)(2 * SystemTime.wYear)) & 0xFFE; *(_DWORD *)(v4 + 85) = v6; v7 = v6 ^ (unsigned __int16)((v6 ^ (SystemTime.wMonth << 12)) & 0xF000); *(_DWORD *)(v4 + 85) = v7; v8 = v7 ^ (v7 ^ (SystemTime.wDay << 16)) & 0x1F0000; *(_DWORD *)(v4 + 85) = v8; *(_DWORD *)(v4 + 85) = v8 ^ (v8 ^ (SystemTime.wHour << 21)) & 0x3E00000; return 1; } //----- (007517A0) -------------------------------------------------------- signed int __thiscall sub_7517A0(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750DD0(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)v2 + 109 * v3 + 6; if ( !v4 ) return 0; *(_BYTE *)(v4 + 91) = *(_BYTE *)(a2 + 20); return 1; } //----- (007517E0) -------------------------------------------------------- signed int __thiscall sub_7517E0(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750DD0(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)v2 + 109 * v3 + 6; if ( !v4 ) return 0; *(_BYTE *)(v4 + 90) = *(_BYTE *)(a2 + 20); return 1; } //----- (00751820) -------------------------------------------------------- signed int __thiscall sub_751820(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // esi signed int v3; // eax _DWORD *v4; // eax v2 = this; v3 = sub_750DD0(this, a2); if ( v3 == -1 ) return 0; v4 = (_DWORD *)((char *)v2 + 109 * v3 + 6); if ( !v4 ) return 0; v4[23] = a2[5]; v4[24] = a2[6]; v4[25] = a2[7]; return 1; } //----- (00751870) -------------------------------------------------------- signed int __thiscall sub_751870(unsigned __int16 *this, int a2) { unsigned __int16 *v2; // esi signed int v3; // eax int v4; // eax v2 = this; v3 = sub_750DD0(this, (_DWORD *)a2); if ( v3 == -1 ) return 0; v4 = (int)v2 + 109 * v3 + 6; if ( !v4 ) return 0; *(_BYTE *)(v4 + 89) = *(_BYTE *)(a2 + 20); return 1; } //----- (007518B0) -------------------------------------------------------- signed int __thiscall sub_7518B0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD *v4; // eax _DWORD *v5; // esi signed int result; // eax int v7; // eax v2 = this; v3 = (_DWORD *)this[1]; if ( v3 ) { while ( *(_DWORD *)((char *)v3 + 146) != *(_DWORD *)(a2 + 146) ) { v3 = (_DWORD *)v3[60]; if ( !v3 ) goto LABEL_4; } sub_750740(v3, a2); result = 1; } else { LABEL_4: v4 = operator new(0xF4u); if ( v4 ) { v4[4] = 0; v4[3] = 0; v4[2] = 0; v4[1] = 0; v5 = v4; } else { v5 = 0; } v5[60] = 0; v5[59] = v2[2]; sub_750740(v5, a2); if ( !v2[1] ) v2[1] = v5; v7 = v2[2]; if ( v7 ) *(_DWORD *)(v7 + 240) = v5; ++*v2; v2[2] = v5; result = 1; } return result; } //----- (00751960) -------------------------------------------------------- signed int __thiscall sub_751960(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax int v5; // ecx int v6; // ecx v2 = this; v3 = (_DWORD *)this[1]; if ( !v3 ) return 0; while ( *(_DWORD *)((char *)v3 + 146) != a2 ) { v3 = (_DWORD *)v3[60]; if ( !v3 ) return 0; } v5 = v3[59]; if ( v5 ) *(_DWORD *)(v5 + 240) = v3[60]; else v2[1] = v3[60]; v6 = v3[60]; if ( v6 ) *(_DWORD *)(v6 + 236) = v3[59]; else v2[2] = v3[59]; operator delete(v3); --*v2; return 1; } //----- (007519E0) -------------------------------------------------------- signed int __thiscall sub_7519E0(_DWORD *this, int a2) { _DWORD *v2; // esi char *v3; // eax int v4; // ecx v2 = this; v3 = (char *)operator new(0x34u); if ( v3 ) { *((_DWORD *)v3 + 4) = 0; *((_DWORD *)v3 + 3) = 0; *((_DWORD *)v3 + 2) = 0; *((_DWORD *)v3 + 1) = 0; *(_DWORD *)(v3 + 38) = 0; *(_DWORD *)(v3 + 34) = 0; *(_DWORD *)(v3 + 30) = 0; *(_DWORD *)(v3 + 26) = 0; } else { v3 = 0; } *((_DWORD *)v3 + 12) = 0; *((_DWORD *)v3 + 11) = v2[2]; *(_DWORD *)v3 = *(_DWORD *)a2; *((_DWORD *)v3 + 1) = *(_DWORD *)(a2 + 4); *((_DWORD *)v3 + 2) = *(_DWORD *)(a2 + 8); *((_DWORD *)v3 + 3) = *(_DWORD *)(a2 + 12); *((_DWORD *)v3 + 4) = *(_DWORD *)(a2 + 16); v3[20] = *(_BYTE *)(a2 + 20); v3[21] = *(_BYTE *)(a2 + 21); v3[22] = *(_BYTE *)(a2 + 22); *(_WORD *)(v3 + 23) = *(_WORD *)(a2 + 23); v3[25] = *(_BYTE *)(a2 + 25); *(_DWORD *)(v3 + 26) = *(_DWORD *)(a2 + 26); *(_DWORD *)(v3 + 30) = *(_DWORD *)(a2 + 30); *(_DWORD *)(v3 + 34) = *(_DWORD *)(a2 + 34); *(_DWORD *)(v3 + 38) = *(_DWORD *)(a2 + 38); if ( !v2[1] ) v2[1] = v3; v4 = v2[2]; if ( v4 ) *(_DWORD *)(v4 + 48) = v3; ++*v2; v2[2] = v3; return 1; } //----- (00751AA0) -------------------------------------------------------- signed int __thiscall sub_751AA0(int this, int a2) { if ( !*(_DWORD *)(this + 8) ) return 0; if ( *(_DWORD *)(a2 + 146) == *(_DWORD *)(this + 12) ) { *(_DWORD *)(this + 221) = *(_DWORD *)a2; *(_DWORD *)(this + 225) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 229) = *(_DWORD *)(a2 + 8); *(_DWORD *)(this + 233) = *(_DWORD *)(a2 + 12); *(_DWORD *)(this + 237) = *(_DWORD *)(a2 + 16); *(_BYTE *)(this + 241) = *(_BYTE *)(a2 + 20); *(_BYTE *)(this + 100) = *(_BYTE *)(a2 + 21); *(_DWORD *)(this + 101) = *(_DWORD *)(a2 + 26); *(_DWORD *)(this + 105) = *(_DWORD *)(a2 + 30); *(_DWORD *)(this + 109) = *(_DWORD *)(a2 + 34); qmemcpy((void *)(this + 113), (const void *)(a2 + 38), 0x24u); qmemcpy((void *)(this + 149), (const void *)(a2 + 74), 0x24u); qmemcpy((void *)(this + 185), (const void *)(a2 + 110), 0x24u); qmemcpy((void *)(this + 242), (const void *)(a2 + 150), 0x2Au); qmemcpy((void *)(this + 284), (const void *)(a2 + 192), 0x2Au); } return sub_7518B0((_DWORD *)(this + 1080), a2); } //----- (00751B80) -------------------------------------------------------- signed int __thiscall sub_751B80(_DWORD *this, int a2) { _DWORD *v2; // esi signed int result; // eax int v4; // eax v2 = this; if ( !this[2] ) return 0; v4 = *(_DWORD *)(a2 + 16); if ( this[3] == v4 ) sub_7507F0(this + 270, v4, 3, (_DWORD *)((char *)this + 109), (char *)this + 185); else sub_751960(this + 270, *(_DWORD *)(a2 + 16)); *(_DWORD *)((char *)v2 + 42) = *(_DWORD *)(a2 + 28); result = 1; if ( *(_BYTE *)(a2 + 32) ) { if ( *(_BYTE *)(a2 + 32) == 1 ) { ++*(_DWORD *)((char *)v2 + 330); } else if ( *(_BYTE *)(a2 + 32) == 2 ) { ++*(_DWORD *)((char *)v2 + 334); } } else { ++*(_DWORD *)((char *)v2 + 326); } return result; } //----- (00751C10) -------------------------------------------------------- void __thiscall sub_751C10(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; while ( v1[1] ) { v2 = (_DWORD *)v1[1]; v1[1] = v2[60]; if ( v2 ) operator delete(v2); } *v1 = 0; v1[2] = 0; } //----- (00751C50) -------------------------------------------------------- void __thiscall sub_751C50(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax v1 = this; while ( v1[1] ) { v2 = (_DWORD *)v1[1]; v1[1] = v2[12]; if ( v2 ) operator delete(v2); } *v1 = 0; v1[2] = 0; } //----- (00751C90) -------------------------------------------------------- struct tm *__thiscall sub_751C90(_DWORD *this, int a2, _DWORD *a3, char a4, int a5) { _DWORD *v5; // ebx _DWORD *v6; // esi struct tm *result; // eax v5 = this; v6 = this + 3; memset(this + 3, 0, 0x42Bu); *v6 = a2; v5[4] = *a3; v5[5] = a3[1]; v5[6] = a3[2]; v5[7] = a3[3]; *((_WORD *)v5 + 23) = 0; *((_BYTE *)v5 + 100) = 0; *((_BYTE *)v5 + 40) = a4; v5[8] = 0; v5[9] = 0; *((_BYTE *)v5 + 41) = 1; *(_DWORD *)((char *)v5 + 42) = 0; v5[12] = 0; v5[13] = 0; v5[24] = 13107201; v5[14] = a5; *(_DWORD *)((char *)v5 + 101) = a5; *(_DWORD *)((char *)v5 + 105) = a5; *(_DWORD *)((char *)v5 + 109) = a5; qmemcpy(v5 + 15, _localtime32(v5 + 14), 0x24u); qmemcpy((char *)v5 + 113, _localtime32((_DWORD *)((char *)v5 + 101)), 0x24u); qmemcpy((char *)v5 + 149, _localtime32((_DWORD *)((char *)v5 + 105)), 0x24u); qmemcpy((char *)v5 + 185, _localtime32((_DWORD *)((char *)v5 + 109)), 0x24u); *(_DWORD *)((char *)v5 + 221) = 0; *(_DWORD *)((char *)v5 + 237) = 0; *(_DWORD *)((char *)v5 + 233) = 0; *(_DWORD *)((char *)v5 + 229) = 0; *(_DWORD *)((char *)v5 + 225) = 0; strncpy((char *)v5 + 225, &byte_9A8050, 0x10u); *((_BYTE *)v5 + 241) = 0; *(_DWORD *)((char *)v5 + 326) = 0; *(_DWORD *)((char *)v5 + 330) = 0; *(_DWORD *)((char *)v5 + 334) = 0; *((_BYTE *)v5 + 338) = 0; *(_DWORD *)((char *)v5 + 339) = a5; qmemcpy((char *)v5 + 343, _localtime32((_DWORD *)((char *)v5 + 339)), 0x24u); *((_BYTE *)v5 + 379) = 0; *(_DWORD *)((char *)v5 + 507) = a5; qmemcpy((char *)v5 + 343, _localtime32((_DWORD *)((char *)v5 + 339)), 0x24u); *(_DWORD *)((char *)v5 + 563) = 0; *(_DWORD *)((char *)v5 + 559) = 0; *(_DWORD *)((char *)v5 + 555) = 0; *(_DWORD *)((char *)v5 + 551) = 0; *(_DWORD *)((char *)v5 + 547) = 0; strncpy((char *)v5 + 547, &byte_9A8050, 0x14u); *((_BYTE *)v5 + 567) = 0; *((_WORD *)v5 + 954) = -1; v5[478] = 255; v5[479] = 0; v5[480] = 0; v5[2] = 1; sub_751C10(v5 + 270); v5[274] = 0; v5[275] = 0; *(_WORD *)((char *)v5 + 1145) = 0; *(_DWORD *)((char *)v5 + 1105) = a5; *((_BYTE *)v5 + 1104) = 0; result = _localtime32((_DWORD *)((char *)v5 + 1105)); qmemcpy((char *)v5 + 1109, result, 0x24u); return result; } //----- (00751E90) -------------------------------------------------------- signed int __thiscall sub_751E90(_DWORD *this, int a2) { sub_751C90(this, *(_DWORD *)(a2 + 2), (_DWORD *)(a2 + 6), *(_BYTE *)(a2 + 22), *(_DWORD *)(a2 + 23)); return 1; } //----- (00751EC0) -------------------------------------------------------- signed int __thiscall sub_751EC0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi signed int v5; // edi int v6; // esi _DWORD *v7; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( *(_WORD *)a2 != 3137 ) return 0; if ( *(_BYTE *)(a2 + 2) & 1 ) sub_751C10(this + 270); v5 = 0; if ( *(_WORD *)(a2 + 3) > 0u ) { v7 = v3 + 270; v6 = v2 + 5; do { sub_7518B0(v7, v6); ++v5; v6 += 234; } while ( v5 < *(unsigned __int16 *)(v2 + 3) ); } return 1; } //----- (00751F40) -------------------------------------------------------- _DWORD *__thiscall sub_751F40(_DWORD *this) { _DWORD *result; // eax result = this; *this = &CGuild::`vftable'; this[7] = 0; this[6] = 0; this[5] = 0; this[4] = 0; *(_DWORD *)((char *)this + 237) = 0; *(_DWORD *)((char *)this + 233) = 0; *(_DWORD *)((char *)this + 229) = 0; *(_DWORD *)((char *)this + 225) = 0; *(_DWORD *)((char *)this + 563) = 0; *(_DWORD *)((char *)this + 559) = 0; *(_DWORD *)((char *)this + 555) = 0; *(_DWORD *)((char *)this + 551) = 0; *(_DWORD *)((char *)this + 547) = 0; this[270] = 0; this[271] = 0; this[272] = 0; this[292] = 0; this[291] = 0; this[290] = 0; this[289] = 0; this[288] = 0; this[343] = 0; this[342] = 0; this[341] = 0; this[340] = 0; this[339] = 0; *((_WORD *)this + 948) = 0; this[2] = 0; this[274] = 0; this[275] = 0; this[287] = 0; this[476] = 0; this[475] = 0; this[472] = 0; this[473] = 0; *((_WORD *)this + 954) = -1; this[478] = 255; this[479] = 0; this[480] = 0; return result; } // A09144: using guessed type void *CGuild::`vftable'; //----- (00752040) -------------------------------------------------------- void __thiscall sub_752040(_DWORD *this) { *this = &CGuild::`vftable'; sub_751C10(this + 270); } // A09144: using guessed type void *CGuild::`vftable'; //----- (00752060) -------------------------------------------------------- void __thiscall sub_752060(void *this) { *(_DWORD *)((char *)this + 9) = 0; *(_DWORD *)((char *)this + 5) = 0; *(_DWORD *)((char *)this + 1) = 0; *(_DWORD *)((char *)this + 21) = 0; *(_DWORD *)((char *)this + 17) = 0; *(_DWORD *)((char *)this + 13) = 0; } //----- (007520A0) -------------------------------------------------------- signed int __thiscall sub_7520A0(int *this, int a2) { int v2; // edx int v3; // esi _DWORD *v4; // eax v2 = *this; v3 = 0; if ( *this <= 0 ) return -1; v4 = this + 1; while ( *v4 != a2 ) { ++v3; v4 = (_DWORD *)((char *)v4 + 377); if ( v3 >= v2 ) return -1; } if ( v3 != -1 ) { *this = v2 - 1; memcpy((char *)this + 377 * v3 + 4, (char *)this + 377 * v3 + 381, 377 * (v2 - 1 - v3)); } return v3; } //----- (00752110) -------------------------------------------------------- int __thiscall sub_752110(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // edx int result; // eax v2 = 0; if ( *this <= 0 ) goto LABEL_5; v3 = this + 1; while ( *v3 != a2 ) { ++v2; v3 = (_DWORD *)((char *)v3 + 377); if ( v2 >= *this ) goto LABEL_5; } if ( v2 == -1 ) LABEL_5: result = 0; else result = (int)this + 377 * v2 + 4; return result; } //----- (00752150) -------------------------------------------------------- int __thiscall sub_752150(int *this, _WORD *a2) { int result; // eax int *v3; // edx _DWORD *v4; // ebx int v5; // esi int v6; // eax _DWORD *v7; // ecx int v8; // [esp+4h] [ebp-4h] result = 0; v3 = this; v8 = 0; if ( *a2 > 0u ) { v4 = a2 + 1; do { v5 = *v3; if ( *v3 < 300 ) { v6 = 0; if ( v5 <= 0 ) goto LABEL_8; v7 = v3 + 1; while ( *v7 != *v4 ) { ++v6; v7 = (_DWORD *)((char *)v7 + 377); if ( v6 >= v5 ) goto LABEL_8; } if ( v6 == -1 ) { LABEL_8: qmemcpy((char *)v3 + 377 * v5 + 4, v4, 0x8Du); ++*v3; } else { qmemcpy((char *)v3 + 377 * v6 + 4, v4, 0x8Du); } } result = v8 + 1; v4 = (_DWORD *)((char *)v4 + 141); v8 = result; } while ( result < (unsigned __int16)*a2 ); } return result; } //----- (007521F0) -------------------------------------------------------- signed int __thiscall sub_7521F0(_DWORD *this, _WORD *a2) { int v2; // ebx int v3; // edx _DWORD *v4; // esi int v6; // edx signed int v7; // [esp+4h] [ebp-8h] signed int v8; // [esp+8h] [ebp-4h] v7 = 1; v8 = 0; if ( *a2 <= 0u ) return 1; v2 = (int)(a2 + 3); do { v3 = 0; if ( *this <= 0 ) goto LABEL_7; v4 = this + 1; while ( *v4 != *(_DWORD *)(v2 - 4) ) { ++v3; v4 = (_DWORD *)((char *)v4 + 377); if ( v3 >= *this ) goto LABEL_7; } if ( v3 == -1 ) { LABEL_7: v7 = 0; } else { v6 = 377 * v3; *((_BYTE *)this + v6 + 8) = *(_BYTE *)v2; *(_WORD *)((char *)this + v6 + 9) = *(_WORD *)(v2 + 1); } v2 += 7; ++v8; } while ( v8 < (unsigned __int16)*a2 ); return v7; } //----- (00752280) -------------------------------------------------------- void __thiscall sub_752280(void *this) { `eh vector constructor iterator'((char *)this + 192, 0x1Au, 4, sub_752060, nullsub_6); } //----- (007522B0) -------------------------------------------------------- void __thiscall sub_7522B0(void *this) { `eh vector destructor iterator'((char *)this + 192, 0x1Au, 4, nullsub_6); } //----- (007522D0) -------------------------------------------------------- void __thiscall sub_7522D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; this[28276] = _time32(0); *v1 = 0; `eh vector destructor iterator'(v1 + 1, 0x179u, 300, sub_7522B0); } //----- (00752310) -------------------------------------------------------- _DWORD *__thiscall sub_752310(_DWORD *this) { _DWORD *v1; // esi v1 = this; `eh vector constructor iterator'(this + 1, 0x179u, 300, sub_752280, sub_7522B0); v1[28276] = _time32(0); *v1 = 0; return v1; } //----- (00752350) -------------------------------------------------------- char __thiscall sub_752350(_DWORD *this, char *a2) { _DWORD *v2; // esi FILE *v3; // eax FILE *v4; // edi _DWORD *v6; // ebx void *v7; // eax void *v8; // eax size_t v9; // ST04_4 int v10; // edx v2 = this; v3 = fopen(a2, "rb"); v4 = v3; if ( !v3 || fread(v2 + 3, 4u, 1u, v3) != 1 ) return 0; v6 = v2 + 2; if ( fread(v2 + 2, 4u, 1u, v4) != 1 ) return 0; v7 = (void *)v2[4]; v2[1] = v2[3] * *v6; if ( v7 ) { operator delete(v7); v2[4] = 0; } v8 = operator new[](v2[1]); v9 = v2[1]; v2[4] = v8; if ( fread(v8, v9, 1u, v4) != 1 ) return 0; fclose(v4); v10 = 8 * v2[3]; v2[6] = *v6; v2[5] = v10; *v2 = 1; return 1; } //----- (00752420) -------------------------------------------------------- bool __thiscall sub_752420(_DWORD *this, unsigned int a2, unsigned int a3) { unsigned int v3; // eax bool result; // al v3 = this[2]; if ( a2 >= v3 || a3 >= v3 ) result = 1; else result = ((unsigned __int8)(1 << (a2 - 8 * (a2 >> 3))) & *(_BYTE *)(this[4] + a3 * this[3] + (a2 >> 3))) != 0; return result; } //----- (00752470) -------------------------------------------------------- bool __thiscall sub_752470(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi unsigned int v4; // ecx unsigned int v5; // eax unsigned int v6; // edi bool result; // al v3 = this; v4 = (signed __int64)(a2 / 6.25); v5 = v3[2]; v6 = (signed __int64)(a3 / 6.25); if ( v4 >= v5 || v6 >= v5 ) result = 1; else result = ((unsigned __int8)(1 << (v4 - 8 * (v4 >> 3))) & *(_BYTE *)(v3[4] + v6 * v3[3] + (v4 >> 3))) != 0; return result; } //----- (00752500) -------------------------------------------------------- void __thiscall sub_752500(void **this) { void **v1; // esi v1 = this; if ( this[4] && *this == (void *)1 ) { operator delete(this[4]); v1[4] = 0; *v1 = 0; } if ( v1[3003] ) { operator delete(v1[3003]); v1[3003] = 0; } } //----- (00752550) -------------------------------------------------------- signed int __thiscall sub_752550(_DWORD *this) { _DWORD *v1; // edi int v2; // eax unsigned int v3; // ebx unsigned int v4; // ecx unsigned int v5; // esi unsigned int v6; // eax signed int v7; // edx unsigned int v8; // edx signed int v10; // [esp+10h] [ebp-1Ch] unsigned int v11; // [esp+14h] [ebp-18h] signed int v12; // [esp+18h] [ebp-14h] unsigned int v13; // [esp+1Ch] [ebp-10h] unsigned int v14; // [esp+20h] [ebp-Ch] unsigned int v15; // [esp+24h] [ebp-8h] v1 = this; v2 = this[1942] - this[1931]; v3 = this[1943]; v4 = this[1942]; v5 = abs(v2); v11 = v4; v6 = abs(v3 - v1[1932]); v15 = v3; v12 = v1[1931] < v4 ? -1 : 1; v7 = v1[1932] < v3 ? -1 : 1; v10 = v1[1932] < v3 ? -1 : 1; if ( !v5 ) v12 = 0; if ( !v6 ) { v7 = 0; v10 = 0; } v13 = v5; v14 = v6; while ( v4 != v1[1931] || v15 != v1[1932] ) { if ( v6 < v5 == 1 ) { v4 += v12; v14 += v6; v11 = v4; if ( v14 > v5 ) { v15 += v7; v14 -= v5; } } else { v15 += v7; v13 += v5; if ( v13 > v6 ) { v4 += v12; v13 -= v6; v11 = v4; } } v8 = v1[2]; if ( v4 >= v8 || v15 >= v8 || (unsigned __int8)(1 << (v4 - 8 * (v4 >> 3))) & *(_BYTE *)(v1[4] + v15 * v1[3] + (v4 >> 3)) ) { return 1; } v4 = v11; v7 = v10; } return 0; } //----- (00752670) -------------------------------------------------------- void __thiscall sub_752670(int this, int a2, int a3) { _DWORD *v3; // esi v3 = (_DWORD *)this; if ( *(_DWORD *)(this + 12012) && (*(_DWORD *)(this + 12004) != a2 || *(_DWORD *)(this + 12008) != a3) ) { operator delete(*(void **)(this + 12012)); v3[3003] = 0; } if ( !v3[3003] ) { v3[3003] = operator new[](2 * a3 * a2); v3[3001] = a2; v3[3002] = a3; } } //----- (007526F0) -------------------------------------------------------- int __thiscall sub_7526F0(int this) { _DWORD *v1; // esi int v2; // ecx int v3; // ebx int v4; // edi int result; // eax int v6; // edx int v7; // edx int v8; // [esp+Ch] [ebp-10h] int v9; // [esp+10h] [ebp-Ch] int v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] v1 = (_DWORD *)this; memset(*(void **)(this + 12012), -1, 2 * *(_DWORD *)(this + 12008) * *(_DWORD *)(this + 12004)); v2 = v1[3005]; v3 = (v1[3007] - v2) / 2 - v1[3001] / 2 + v2; v11 = v1[3002] / 2; v8 = v1[3001] / 2; v4 = v1[3006]; result = v4 + (v1[3008] - v4) / 2 - v11; v1[2999] = v3; v1[3000] = result; if ( v2 < v3 || (v10 = v3 + v1[3001], v2 >= v10) || v4 < result || (v9 = result + v1[3002], v4 >= v9) || (v6 = v1[3007], v6 < v3) || v6 >= v10 || (v7 = v1[3008], v7 < result) || v7 >= v9 ) { v1[2999] = v2 - v8; v1[3000] = v4 - v11; v1[3004] = 0; } else { v1[3004] = 1; } return result; } //----- (007527F0) -------------------------------------------------------- signed int __thiscall sub_7527F0(_DWORD *this, int a2, int a3, __int16 a4) { int v4; // esi int v6; // edx int v7; // edi v4 = this[2999]; if ( v4 > a2 ) return 0; v6 = this[3000]; if ( v6 > a3 ) return 0; v7 = this[3001]; if ( v7 + v4 <= a2 || v6 + this[3002] <= a3 ) return 0; *(_WORD *)(this[3003] + 2 * (a2 + v7 * (a3 - v6) - v4)) = a4; return 1; } //----- (00752860) -------------------------------------------------------- signed int __thiscall sub_752860(_DWORD *this) { unsigned __int16 v1; // bx _DWORD *v2; // esi int v3; // ecx int v4; // eax unsigned int v5; // edx unsigned int v6; // edi unsigned int v7; // eax int v8; // ecx __int16 v9; // bx __int16 v10; // ax int v11; // ecx __int16 v12; // bx __int16 v13; // ax unsigned int v14; // edi unsigned int v15; // eax int v16; // ecx __int16 v17; // bx __int16 v18; // ax unsigned int v19; // eax int v20; // ecx __int16 v21; // bx __int16 v22; // ax unsigned int v23; // eax unsigned int v24; // eax unsigned int v25; // ecx unsigned int v26; // eax int v28; // [esp+Ch] [ebp-20h] unsigned int v29; // [esp+10h] [ebp-1Ch] unsigned int v30; // [esp+14h] [ebp-18h] unsigned int v31; // [esp+18h] [ebp-14h] unsigned __int16 v32; // [esp+1Ch] [ebp-10h] signed int v33; // [esp+20h] [ebp-Ch] signed int v34; // [esp+24h] [ebp-8h] signed int v35; // [esp+28h] [ebp-4h] v1 = v32; v2 = this; v3 = this[3008]; v4 = v2[3007]; v5 = v4 - 1; v31 = v3 + 1; v29 = v3 - 1; v35 = 0; v28 = v4 - 1; v30 = v4 + 1; v34 = v3; v33 = v3; while ( 2 ) { v6 = v5; if ( (signed int)v5 >= (signed int)v30 ) goto LABEL_20; do { v7 = v2[2]; if ( v6 >= v7 ) goto LABEL_18; if ( v29 < v7 && !((unsigned __int8)(1 << (v6 - 8 * (v6 >> 3))) & *(_BYTE *)(v2[4] + v29 * v2[3] + (v6 >> 3))) ) { if ( !v35 ) { v9 = abs(v6 - v2[3005]); v10 = abs(v29 - v2[3006]); v2[1934] = v29; v1 = v10 + v9; v35 = 1; goto LABEL_10; } v8 = abs(v29 - v2[3006]) + abs(v6 - v2[3005]); if ( v1 > (unsigned __int16)v8 ) { v2[1934] = v29; v1 = v8; LABEL_10: v2[1933] = v6; goto LABEL_11; } } LABEL_11: if ( v31 < v2[2] && !((unsigned __int8)(1 << (v6 - 8 * (v6 >> 3))) & *(_BYTE *)(v2[4] + v31 * v2[3] + (v6 >> 3))) ) { if ( v35 ) { v11 = abs(v31 - v2[3006]) + abs(v6 - v2[3005]); if ( v1 <= (unsigned __int16)v11 ) goto LABEL_18; v2[1934] = v31; v1 = v11; } else { v12 = abs(v6 - v2[3005]); v13 = abs(v31 - v2[3006]); v2[1934] = v31; v1 = v13 + v12; v35 = 1; } v2[1933] = v6; } LABEL_18: ++v6; } while ( (signed int)v6 < (signed int)v30 ); v5 = v28; LABEL_20: v14 = v33; if ( v33 < v34 ) { while ( 2 ) { v15 = v2[2]; if ( v5 < v15 && v14 < v15 && !((unsigned __int8)(1 << (v5 - 8 * (v5 >> 3))) & *(_BYTE *)(v2[4] + v14 * v2[3] + (v5 >> 3))) ) { if ( v35 ) { v16 = abs(v28 - v2[3005]) + abs(v14 - v2[3006]); if ( v1 > (unsigned __int16)v16 ) { v2[1933] = v28; v1 = v16; goto LABEL_28; } } else { v17 = abs(v14 - v2[3006]); v18 = abs(v28 - v2[3005]); v2[1933] = v28; v1 = v18 + v17; v35 = 1; LABEL_28: v2[1934] = v14; } } v19 = v2[2]; if ( v30 < v19 && v14 < v19 && !((unsigned __int8)(1 << (v30 - 8 * (v30 >> 3))) & *(_BYTE *)(v2[4] + v14 * v2[3] + (v30 >> 3))) ) { if ( v35 ) { v20 = abs(v30 - v2[3005]) + abs(v14 - v2[3006]); if ( v1 > (unsigned __int16)v20 ) { v2[1933] = v30; v1 = v20; goto LABEL_36; } } else { v21 = abs(v14 - v2[3006]); v22 = abs(v30 - v2[3005]); v2[1933] = v30; v1 = v22 + v21; v35 = 1; LABEL_36: v2[1934] = v14; } } v5 = v28; if ( (signed int)++v14 >= v34 ) break; continue; } } if ( !v35 ) { v23 = v2[3005]; if ( v23 >= v5 && v23 <= v30 ) { v24 = v2[3006]; if ( v24 >= v29 && v24 <= v31 ) return 0; } if ( v5 ) v28 = --v5; if ( v29 ) { --v29; --v33; } v25 = v2[5]; if ( v30 < v25 ) ++v30; v26 = v2[6]; if ( v31 < v26 ) { ++v31; ++v34; } if ( !(v5 + v29) && v30 + v31 == v26 + v25 - 2 ) return 0; continue; } return 1; } } //----- (00752BF0) -------------------------------------------------------- signed int __thiscall sub_752BF0(_DWORD *this) { int v1; // esi unsigned int v2; // ecx unsigned int v3; // eax unsigned int v4; // edi int v5; // ecx int v6; // eax int v7; // edx int v8; // eax signed int v9; // ecx int v10; // edx signed int result; // eax int v12; // ecx int v13; // edx int v14; // ecx int v15; // edx int v16; // eax int v17; // ecx int v18; // edx int v19; // eax int v20; // ebx int v21; // ecx int v22; // edi int v23; // eax int v24; // ecx int v25; // eax int v26; // ecx int v27; // edi int v28; // edx unsigned int v29; // eax int v30; // ecx int v31; // edx int v32; // ecx int v33; // edx int v34; // eax int v35; // edi int v36; // eax int v37; // edx int v38; // edi int v39; // ecx int v40; // eax int v41; // edx unsigned int v42; // ecx int v43; // edx int v44; // ecx int v45; // eax int v46; // eax int v47; // ecx __int16 v48; // di int v49; // eax int v50; // ecx signed int v51; // edx int v52; // eax unsigned int v53; // eax int v54; // ecx int v55; // edx int v56; // ecx int v57; // edx int v58; // edi int v59; // ecx int v60; // eax int v61; // edx int v62; // ebx int v63; // eax int v64; // ecx int v65; // edx int v66; // ebx int v67; // eax int v68; // ecx int v69; // edx int v70; // ebx int v71; // eax int v72; // ecx int v73; // edx int v74; // ebx bool v75; // zf int v76; // ecx int v77; // edx int v78; // eax int v79; // edx int v80; // ebx signed int v81; // edi __int16 v82; // [esp+10h] [ebp-14h] int v83; // [esp+10h] [ebp-14h] int v84; // [esp+14h] [ebp-10h] int v85; // [esp+18h] [ebp-Ch] signed int v86; // [esp+18h] [ebp-Ch] signed int v87; // [esp+18h] [ebp-Ch] int v88; // [esp+1Ch] [ebp-8h] unsigned __int16 v89; // [esp+1Ch] [ebp-8h] unsigned __int8 v90; // [esp+23h] [ebp-1h] unsigned __int8 v91; // [esp+23h] [ebp-1h] unsigned __int8 v92; // [esp+23h] [ebp-1h] unsigned __int8 v93; // [esp+23h] [ebp-1h] v1 = (int)this; v2 = this[3007]; v3 = *(_DWORD *)(v1 + 8); v4 = *(_DWORD *)(v1 + 12032); *(_DWORD *)(v1 + 7896) = 0; *(_DWORD *)(v1 + 12040) = 0; if ( v2 >= v3 || v4 >= v3 || (unsigned __int8)(1 << (v2 - 8 * (v2 >> 3))) & *(_BYTE *)(*(_DWORD *)(v1 + 16) + v4 * *(_DWORD *)(v1 + 12) + (v2 >> 3)) ) { v5 = *(_DWORD *)(v1 + 12020); v6 = *(_DWORD *)(v1 + 12032); *(_DWORD *)(v1 + 7768) = *(_DWORD *)(v1 + 12028); v7 = *(_DWORD *)(v1 + 12024); *(_DWORD *)(v1 + 7724) = v5; *(_DWORD *)(v1 + 7772) = v6; *(_DWORD *)(v1 + 7728) = v7; if ( !sub_752860((_DWORD *)v1) ) { v12 = *(_DWORD *)(v1 + 12020); v13 = *(_DWORD *)(v1 + 12024); result = 1; *(_DWORD *)(v1 + 12036) = 0; *(_DWORD *)(v1 + 12040) = 1; *(_DWORD *)(v1 + 12028) = v12; *(_DWORD *)(v1 + 12032) = v13; *(_DWORD *)(v1 + 12048) = v12; *(_DWORD *)(v1 + 12052) = v13; *(_DWORD *)(v1 + 12044) = 1; return result; } v8 = *(_DWORD *)(v1 + 7732); v9 = *(_DWORD *)(v1 + 7736); v10 = v8; *(_DWORD *)(v1 + 12028) = v8; result = v9; *(_DWORD *)(v1 + 12032) = v9; *(_DWORD *)(v1 + 12048) = v10; *(_DWORD *)(v1 + 12052) = v9; *(_DWORD *)(v1 + 12040) = 1; if ( v10 == *(_DWORD *)(v1 + 12020) && v9 == *(_DWORD *)(v1 + 12024) ) { *(_DWORD *)(v1 + 12044) = 1; *(_DWORD *)(v1 + 12036) = 0; return result; } } v14 = *(_DWORD *)(v1 + 12024); v15 = *(_DWORD *)(v1 + 12028); *(_DWORD *)(v1 + 7768) = *(_DWORD *)(v1 + 12020); v16 = *(_DWORD *)(v1 + 12032); *(_DWORD *)(v1 + 7772) = v14; *(_DWORD *)(v1 + 7724) = v15; *(_DWORD *)(v1 + 7728) = v16; result = sub_752550((_DWORD *)v1); if ( result ) { sub_7526F0(v1); v19 = *(_DWORD *)(v1 + 12020); v20 = *(_DWORD *)(v1 + 12024); v21 = *(_DWORD *)(v1 + 12024); *(_DWORD *)(v1 + 28) = v19; *(_DWORD *)(v1 + 7708) = 1; v22 = v19; v23 = v20 - *(_DWORD *)(v1 + 12032); *(_DWORD *)(v1 + 32) = v21; *(_DWORD *)(v1 + 7760) = v23; v24 = v22 - *(_DWORD *)(v1 + 12028); *(_DWORD *)(v1 + 7756) = v24; *(_WORD *)(v1 + 6172) = abs(v24) + abs(v23); sub_7527F0((_DWORD *)v1, v22, v20, 1); v25 = *(_DWORD *)(v1 + 12024); v26 = *(_DWORD *)(v1 + 12020); *(_DWORD *)(v1 + 7724) = v26; *(_DWORD *)(v1 + 7728) = v25; *(_DWORD *)(v1 + 7732) = v26; *(_DWORD *)(v1 + 7736) = v25; *(_WORD *)(v1 + 7742) = 1; *(_DWORD *)(v1 + 12036) = 0; *(_WORD *)(v1 + 7720) = -1; do { v27 = *(_DWORD *)(v1 + 7708); v28 = 0; v29 = 0; *(_DWORD *)(v1 + 7752) = 0; if ( v27 ) { do { if ( *(_WORD *)(v1 + 2 * v29 + 6172) < *(_WORD *)(v28 + v1 + 6172) ) { v28 = 2 * v29; *(_DWORD *)(v1 + 7752) = v29; } ++v29; } while ( v29 < *(_DWORD *)(v1 + 7708) ); } v30 = *(_DWORD *)(v1 + 7752); *(_DWORD *)(v1 + 7724) = *(_DWORD *)(v1 + 8 * v30 + 28); *(_DWORD *)(v1 + 7728) = *(_DWORD *)(v1 + 8 * v30 + 32); if ( *(_WORD *)(v1 + 2 * v30 + 6172) < *(_WORD *)(v1 + 7720) ) { v31 = *(_DWORD *)(v1 + 7728); *(_DWORD *)(v1 + 7712) = *(_DWORD *)(v1 + 7724); *(_DWORD *)(v1 + 7716) = v31; *(_WORD *)(v1 + 7720) = *(_WORD *)(v1 + 2 * v30 + 6172); } *(_DWORD *)(v1 + 7708) = v27 - 1; *(_DWORD *)(v1 + 8 * v30 + 28) = *(_DWORD *)(v1 + 8 * (v27 - 1) + 28); *(_DWORD *)(v1 + 8 * v30 + 32) = *(_DWORD *)(v1 + 8 * (v27 - 1) + 32); *(_WORD *)(v1 + 2 * *(_DWORD *)(v1 + 7752) + 6172) = *(_WORD *)(v1 + 2 * *(_DWORD *)(v1 + 7708) + 6172); v32 = *(_DWORD *)(v1 + 7724); v33 = *(_DWORD *)(v1 + 11996); v34 = *(_DWORD *)(v1 + 7728); if ( v33 <= v32 ) { v35 = *(_DWORD *)(v1 + 12000); if ( v35 <= v34 && v33 + *(_DWORD *)(v1 + 12004) > v32 && v35 + *(_DWORD *)(v1 + 12008) > v34 ) { v36 = *(_DWORD *)(v1 + 12004) * (v34 - v35) - v33; v37 = *(_DWORD *)(v1 + 7724); v82 = *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * (v32 + v36)) + 1; *(_DWORD *)(v1 + 7736) = *(_DWORD *)(v1 + 7728); --*(_DWORD *)(v1 + 7736); *(_DWORD *)(v1 + 7732) = v37; *(_BYTE *)(v1 + 7740) = 2; v88 = 0; do { v38 = *(_DWORD *)(v1 + 7732); v39 = *(_DWORD *)(v1 + 11996); v40 = *(_DWORD *)(v1 + 7736); if ( v39 <= v38 ) { v41 = *(_DWORD *)(v1 + 12000); if ( v41 <= v40 ) { v85 = v39 + *(_DWORD *)(v1 + 12004); if ( v85 > v38 ) { v84 = v41 + *(_DWORD *)(v1 + 12008); if ( v84 > v40 && *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * (v38 + *(_DWORD *)(v1 + 12004) * (v40 - v41) - v39)) == -1 ) { v42 = *(_DWORD *)(v1 + 8); if ( v38 < v42 && v40 < v42 && !((unsigned __int8)(1 << (v38 - 8 * ((unsigned int)v38 >> 3))) & *(_BYTE *)(*(_DWORD *)(v1 + 16) + v40 * *(_DWORD *)(v1 + 12) + ((unsigned int)v38 >> 3))) ) { v43 = *(_DWORD *)(v1 + 11996); if ( v43 <= v38 ) { v44 = *(_DWORD *)(v1 + 12000); if ( v44 <= v40 && v85 > v38 && v84 > v40 ) { *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * (v38 + *(_DWORD *)(v1 + 12004) * (v40 - v44) - v43)) = v82; v45 = *(_DWORD *)(v1 + 7708); *(_DWORD *)(v1 + 8 * v45 + 28) = *(_DWORD *)(v1 + 7732); *(_DWORD *)(v1 + 8 * v45 + 32) = *(_DWORD *)(v1 + 7736); v46 = *(_DWORD *)(v1 + 7736) - *(_DWORD *)(v1 + 12032); v47 = *(_DWORD *)(v1 + 7732) - *(_DWORD *)(v1 + 12028); *(_DWORD *)(v1 + 7760) = v46; v48 = abs(v46); v49 = *(_DWORD *)(v1 + 7708); *(_DWORD *)(v1 + 7756) = v47; *(_WORD *)(v1 + 2 * v49 + 6172) = abs(v47) + v48; if ( ++*(_DWORD *)(v1 + 7708) >= 0x300u ) break; } } } } } } } v50 = *(_DWORD *)(v1 + 7732); if ( v50 != *(_DWORD *)(v1 + 12028) || *(_DWORD *)(v1 + 7736) != *(_DWORD *)(v1 + 12032) ) { v51 = v88; } else { *(_DWORD *)(v1 + 12036) = 1; v51 = 7; } v52 = *(unsigned __int8 *)(v1 + 7740); *(_DWORD *)(v1 + 7732) = v50 + *(_DWORD *)(v1 + 4 * v52 + 7792); *(_DWORD *)(v1 + 7736) += *(_DWORD *)(v1 + 4 * v52 + 7844); *(_BYTE *)(v1 + 7740) = *(_BYTE *)(v52 + v1 + 7776); v88 = v51 + 1; } while ( (unsigned int)(v51 + 1) < 8 ); } } v53 = *(_DWORD *)(v1 + 7708); if ( v53 >= 0x300 ) break; if ( *(_DWORD *)(v1 + 12036) ) goto LABEL_46; } while ( v53 ); if ( !*(_DWORD *)(v1 + 12036) ) { v54 = *(_DWORD *)(v1 + 7712); v55 = *(_DWORD *)(v1 + 7716); *(_DWORD *)(v1 + 12040) = 1; *(_DWORD *)(v1 + 12028) = v54; *(_DWORD *)(v1 + 12032) = v55; } LABEL_46: v56 = *(_DWORD *)(v1 + 12032); v57 = *(_DWORD *)(v1 + 12028); *(_DWORD *)(v1 + 7732) = v57; *(_DWORD *)(v1 + 7736) = v56; *(_DWORD *)(v1 + 7900) = v57; *(_DWORD *)(v1 + 7904) = v56; v89 = -1; *(_DWORD *)(v1 + 7896) = 1; while ( *(_DWORD *)(v1 + 7732) != *(_DWORD *)(v1 + 12020) || *(_DWORD *)(v1 + 7736) != *(_DWORD *)(v1 + 12024) ) { --*(_DWORD *)(v1 + 7736); *(_BYTE *)(v1 + 7740) = 2; v58 = *(_DWORD *)(v1 + 11996); v59 = *(_DWORD *)(v1 + 7736); v60 = *(_DWORD *)(v1 + 7732); v90 = 2; v86 = 2; do { if ( v58 <= v60 ) { v61 = *(_DWORD *)(v1 + 12000); if ( v61 <= v59 && v58 + *(_DWORD *)(v1 + 12004) > v60 && v61 + *(_DWORD *)(v1 + 12008) > v59 ) { v62 = v60 + *(_DWORD *)(v1 + 12004) * (v59 - v61) - v58; if ( *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v62) < v89 && (unsigned int)v60 < *(_DWORD *)(v1 + 20) && (unsigned int)v59 < *(_DWORD *)(v1 + 24) ) { v89 = *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v62); *(_DWORD *)(v1 + 7744) = *(_DWORD *)(v1 + 7732); *(_DWORD *)(v1 + 7748) = *(_DWORD *)(v1 + 7736); } } } v63 = *(_DWORD *)(v1 + 4 * v90 + 7792) + v60; *(_DWORD *)(v1 + 7732) = v63; v64 = *(_DWORD *)(v1 + 4 * v90 + 7844) + v59; *(_DWORD *)(v1 + 7736) = v64; v91 = *(_BYTE *)(v90 + v1 + 7776); *(_BYTE *)(v1 + 7740) = v91; if ( v58 <= v63 ) { v65 = *(_DWORD *)(v1 + 12000); if ( v65 <= v64 && v58 + *(_DWORD *)(v1 + 12004) > v63 && v65 + *(_DWORD *)(v1 + 12008) > v64 ) { v66 = v63 + *(_DWORD *)(v1 + 12004) * (v64 - v65) - v58; if ( *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v66) < v89 && (unsigned int)v63 < *(_DWORD *)(v1 + 20) && (unsigned int)v64 < *(_DWORD *)(v1 + 24) ) { v89 = *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v66); *(_DWORD *)(v1 + 7744) = v63; *(_DWORD *)(v1 + 7748) = v64; } } } v67 = *(_DWORD *)(v1 + 4 * v91 + 7792) + v63; *(_DWORD *)(v1 + 7732) = v67; v68 = *(_DWORD *)(v1 + 4 * v91 + 7844) + v64; *(_DWORD *)(v1 + 7736) = v68; v92 = *(_BYTE *)(v91 + v1 + 7776); *(_BYTE *)(v1 + 7740) = v92; if ( v58 <= v67 ) { v69 = *(_DWORD *)(v1 + 12000); if ( v69 <= v68 && v58 + *(_DWORD *)(v1 + 12004) > v67 && v69 + *(_DWORD *)(v1 + 12008) > v68 ) { v70 = v67 + *(_DWORD *)(v1 + 12004) * (v68 - v69) - v58; if ( *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v70) < v89 && (unsigned int)v67 < *(_DWORD *)(v1 + 20) && (unsigned int)v68 < *(_DWORD *)(v1 + 24) ) { v89 = *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v70); *(_DWORD *)(v1 + 7744) = v67; *(_DWORD *)(v1 + 7748) = v68; } } } v71 = *(_DWORD *)(v1 + 4 * v92 + 7792) + v67; *(_DWORD *)(v1 + 7732) = v71; v72 = *(_DWORD *)(v1 + 4 * v92 + 7844) + v68; *(_DWORD *)(v1 + 7736) = v72; v93 = *(_BYTE *)(v92 + v1 + 7776); *(_BYTE *)(v1 + 7740) = v93; if ( v58 <= v71 ) { v73 = *(_DWORD *)(v1 + 12000); if ( v73 <= v72 && v58 + *(_DWORD *)(v1 + 12004) > v71 && v73 + *(_DWORD *)(v1 + 12008) > v72 ) { v74 = v71 + *(_DWORD *)(v1 + 12004) * (v72 - v73) - v58; if ( *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v74) < v89 && (unsigned int)v71 < *(_DWORD *)(v1 + 20) && (unsigned int)v72 < *(_DWORD *)(v1 + 24) ) { v89 = *(_WORD *)(*(_DWORD *)(v1 + 12012) + 2 * v74); *(_DWORD *)(v1 + 7744) = v71; *(_DWORD *)(v1 + 7748) = v72; } } } v60 = *(_DWORD *)(v1 + 4 * v93 + 7792) + v71; *(_DWORD *)(v1 + 7732) = v60; v59 = *(_DWORD *)(v1 + 4 * v93 + 7844) + v72; v75 = v86-- == 1; *(_DWORD *)(v1 + 7736) = v59; v90 = *(_BYTE *)(v93 + v1 + 7776); *(_BYTE *)(v1 + 7740) = v90; } while ( !v75 ); v76 = *(_DWORD *)(v1 + 7748); v77 = *(_DWORD *)(v1 + 7744); *(_DWORD *)(v1 + 7732) = *(_DWORD *)(v1 + 7744); v78 = *(_DWORD *)(v1 + 7896); *(_DWORD *)(v1 + 7736) = v76; *(_DWORD *)(v1 + 8 * v78 + 7900) = v77; *(_DWORD *)(v1 + 8 * v78 + 7904) = *(_DWORD *)(v1 + 7748); if ( ++*(_DWORD *)(v1 + 7896) >= 512 ) { *(_DWORD *)(v1 + 12036) = 0; break; } } result = *(_DWORD *)(v1 + 7896); v79 = *(_DWORD *)(v1 + 12024); v80 = *(_DWORD *)(v1 + 12020); v81 = 0; *(_DWORD *)(v1 + 12044) = 0; v83 = v79; v87 = result; while ( v81 < v87 ) { *(_DWORD *)(v1 + 7768) = v80; *(_DWORD *)(v1 + 7772) = v83; *(_DWORD *)(v1 + 7724) = *(_DWORD *)(v1 + 8 * v81 + 7900); *(_DWORD *)(v1 + 7728) = *(_DWORD *)(v1 + 8 * v81 + 7904); result = sub_752550((_DWORD *)v1); if ( result ) { ++v81; } else { v80 = *(_DWORD *)(v1 + 8 * v81 + 7900); v83 = *(_DWORD *)(v1 + 8 * v81 + 7904); result = *(_DWORD *)(v1 + 12044); *(_DWORD *)(v1 + 8 * result + 12048) = v80; *(_DWORD *)(v1 + 8 * result + 12052) = *(_DWORD *)(v1 + 8 * v81 + 7904); ++*(_DWORD *)(v1 + 12044); v87 = v81; v81 = 0; } } } else { v17 = *(_DWORD *)(v1 + 12028); v18 = *(_DWORD *)(v1 + 12032); *(_DWORD *)(v1 + 12036) = 1; *(_DWORD *)(v1 + 12044) = 1; *(_DWORD *)(v1 + 12048) = v17; *(_DWORD *)(v1 + 12052) = v18; } return result; } //----- (00753590) -------------------------------------------------------- char __thiscall sub_753590(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx int v3; // edx char result; // al int v5; // [esp+Ch] [ebp-78h] int v6; // [esp+10h] [ebp-74h] int v7; // [esp+14h] [ebp-70h] int v8; // [esp+18h] [ebp-6Ch] int v9; // [esp+1Ch] [ebp-68h] int v10; // [esp+20h] [ebp-64h] int v11; // [esp+24h] [ebp-60h] int v12; // [esp+28h] [ebp-5Ch] int v13; // [esp+2Ch] [ebp-58h] int v14; // [esp+30h] [ebp-54h] int v15; // [esp+34h] [ebp-50h] int v16; // [esp+38h] [ebp-4Ch] int v17; // [esp+3Ch] [ebp-48h] int v18; // [esp+40h] [ebp-44h] int v19; // [esp+44h] [ebp-40h] int v20; // [esp+48h] [ebp-3Ch] int v21; // [esp+4Ch] [ebp-38h] int v22; // [esp+50h] [ebp-34h] int v23; // [esp+54h] [ebp-30h] int v24; // [esp+58h] [ebp-2Ch] int v25; // [esp+5Ch] [ebp-28h] int v26; // [esp+60h] [ebp-24h] int v27; // [esp+64h] [ebp-20h] int v28; // [esp+68h] [ebp-1Ch] int v29; // [esp+6Ch] [ebp-18h] int v30; // [esp+70h] [ebp-14h] int v31; // [esp+74h] [ebp-10h] int v32; // [esp+78h] [ebp-Ch] int v33; // [esp+7Ch] [ebp-8h] v1 = this; v20 = 1; v27 = 1; v7 = 1; v9 = 1; v31 = 100926208; v32 = 786440; v33 = 513; v18 = 0; v19 = 0; v21 = 2; v22 = -1; v23 = 0; v24 = 0; v25 = 0; v26 = -1; v28 = 0; v29 = 0; v30 = -2; v5 = 0; v6 = -1; v8 = 0; v10 = 0; v11 = 2; v12 = 0; v13 = -1; v14 = -2; v15 = 0; v16 = 0; v17 = 0; this[1974] = 0; this[3011] = 0; this[3003] = 0; sub_752670((int)this, 256, 256); v2 = v32; v3 = v33; v1[1944] = v31; v1[1945] = v2; qmemcpy(v1 + 1948, &v18, 0x34u); qmemcpy(v1 + 1961, &v5, 0x34u); v1[1946] = v3; result = 9; *((_BYTE *)v1 + 7788) = 9; return result; } //----- (00753680) -------------------------------------------------------- _DWORD *__thiscall sub_753680(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = 0; this[4] = 0; sub_753590(this); return v1; } //----- (007536A0) -------------------------------------------------------- bool __thiscall sub_7536A0(float *this, float a2, float a3) { float v3; // ST00_4 double v4; // st7 float v6; // [esp+Ch] [ebp+8h] float v7; // [esp+Ch] [ebp+8h] float v8; // [esp+Ch] [ebp+8h] v3 = a2 - this[10]; v6 = a3 - this[11]; v7 = v6 * v6 + v3 * v3; v4 = v7; v8 = this[12] * this[12]; return v8 > v4; } //----- (00753700) -------------------------------------------------------- bool __thiscall sub_753700(float *this, float a2, float a3) { float v3; // ST04_4 float v4; // ST08_4 double v5; // st4 float v7; // [esp+10h] [ebp+8h] float v8; // [esp+10h] [ebp+8h] float v9; // [esp+10h] [ebp+8h] float v10; // [esp+14h] [ebp+Ch] float v11; // [esp+14h] [ebp+Ch] v3 = a2 - this[10]; v4 = a3 - this[11]; v7 = -this[14]; v10 = cos(v7); v8 = sin(v7); v5 = v10; v11 = v10 * v3 + v8 * v4; v9 = v4 * v5 - v3 * v8; return v9 >= -this[13] && this[13] >= (double)v9 && v11 >= -this[12] && this[12] >= (double)v11; } // 753700: could not find valid save-restore pair for esi //----- (007537D0) -------------------------------------------------------- _DWORD *__thiscall sub_7537D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &AreaInfoData::`vftable'; this[257] = 0; memset(this + 1, 0, 0x400u); return v1; } // A09198: using guessed type void *AreaInfoData::`vftable'; //----- (00753800) -------------------------------------------------------- _DWORD *__thiscall sub_753800(_DWORD *this, _DWORD *a2) { unsigned int v2; // edi unsigned int v3; // edx _DWORD *v4; // esi _DWORD *result; // eax v2 = this[257]; v3 = 0; if ( v2 ) { v4 = this + 1; do { result = (_DWORD *)*v4; if ( !*v4 ) break; if ( *a2 == result[1] && a2[1] == result[2] && a2[2] == result[3] && a2[3] == result[4] && a2[4] == result[5] && a2[5] == result[6] && a2[6] == result[7] && a2[7] == result[8] ) { return result; } ++v3; ++v4; } while ( v3 < v2 ); } return 0; } //----- (00753870) -------------------------------------------------------- _DWORD *__thiscall sub_753870(_DWORD *this, char *a2) { _DWORD *v2; // esi char v4[4]; // [esp+4h] [ebp-24h] int v5; // [esp+8h] [ebp-20h] int v6; // [esp+Ch] [ebp-1Ch] int v7; // [esp+10h] [ebp-18h] int v8; // [esp+14h] [ebp-14h] int v9; // [esp+18h] [ebp-10h] int v10; // [esp+1Ch] [ebp-Ch] int v11; // [esp+20h] [ebp-8h] v2 = this; v11 = 0; v10 = 0; v9 = 0; v8 = 0; v7 = 0; v6 = 0; v5 = 0; *(_DWORD *)v4 = 0; strncpy(v4, a2, 0x20u); return sub_753800(v2, v4); } //----- (007538D0) -------------------------------------------------------- void __thiscall sub_7538D0(void **this) { void **v1; // esi signed int v2; // edi this[257] = 0; v1 = this + 1; v2 = 256; do { if ( *v1 ) operator delete(*v1); *v1 = 0; ++v1; --v2; } while ( v2 ); } //----- (00753910) -------------------------------------------------------- void __thiscall sub_753910(void **this) { void **v1; // esi signed int v2; // edi *this = &AreaInfoData::`vftable'; this[257] = 0; v1 = this + 1; v2 = 256; do { if ( *v1 ) operator delete(*v1); *v1 = 0; ++v1; --v2; } while ( v2 ); } // A09198: using guessed type void *AreaInfoData::`vftable'; //----- (00753950) -------------------------------------------------------- char __thiscall sub_753950(void **this, char *a2) { void **v2; // esi FILE *v3; // ebx float *v5; // eax float *v6; // esi int v7; // eax float *v8; // eax float *v9; // esi int v10; // eax float *v11; // esi unsigned int *v12; // [esp+Ch] [ebp-58h] int v13; // [esp+10h] [ebp-54h] float v14; // [esp+14h] [ebp-50h] unsigned int v15; // [esp+18h] [ebp-4Ch] float **v16; // [esp+1Ch] [ebp-48h] char v17[4]; // [esp+20h] [ebp-44h] int v18; // [esp+24h] [ebp-40h] int v19; // [esp+28h] [ebp-3Ch] int v20; // [esp+2Ch] [ebp-38h] int v21; // [esp+30h] [ebp-34h] int v22; // [esp+34h] [ebp-30h] int v23; // [esp+38h] [ebp-2Ch] int v24; // [esp+3Ch] [ebp-28h] char v25; // [esp+40h] [ebp-24h] v2 = this; v3 = fopen(a2, "rb"); if ( !v3 ) return 0; sub_7538D0(v2); v12 = (unsigned int *)(v2 + 257); fread(v2 + 257, 4u, 1u, v3); v15 = 0; if ( (unsigned int)v2[257] > 0 ) { v16 = (float **)(v2 + 1); do { if ( v15 >= 0x100 ) break; v24 = 0; v23 = 0; v22 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; fread(&v25, 1u, 0x20u, v3); v24 = 0; v23 = 0; v22 = 0; v21 = 0; v20 = 0; v19 = 0; v18 = 0; *(_DWORD *)v17 = 0; strncpy(v17, &v25, 0x20u); fread(&v13, 4u, 1u, v3); if ( v13 ) { if ( v13 == 1 ) { v8 = (float *)operator new(0x3Cu); if ( v8 ) { v8[8] = 0.0; v8[7] = 0.0; v8[6] = 0.0; v8[5] = 0.0; v8[4] = 0.0; v8[3] = 0.0; v8[2] = 0.0; v8[1] = 0.0; *(_DWORD *)v8 = &AreaInfoData::AE_Square::`vftable'; v9 = v8; } else { v9 = 0; } v10 = *(_DWORD *)v17; *v16 = v9; *((_DWORD *)v9 + 1) = v10; *((_DWORD *)v9 + 2) = v18; *((_DWORD *)v9 + 3) = v19; *((_DWORD *)v9 + 4) = v20; *((_DWORD *)v9 + 5) = v21; *((_DWORD *)v9 + 6) = v22; *((_DWORD *)v9 + 7) = v23; *((_DWORD *)v9 + 8) = v24; *((_DWORD *)v9 + 9) = v13; fread(v9 + 10, 4u, 1u, v3); fread(v9 + 11, 4u, 1u, v3); fread(v9 + 12, 4u, 1u, v3); fread(v9 + 13, 4u, 1u, v3); v11 = v9 + 14; fread(v11, 4u, 1u, v3); v14 = atan(1.0); v14 = v14 * 4.0; *v11 = v14 * *v11 / 180.0; } } else { v5 = (float *)operator new(0x34u); if ( v5 ) { v5[8] = 0.0; v5[7] = 0.0; v5[6] = 0.0; v5[5] = 0.0; v5[4] = 0.0; v5[3] = 0.0; v5[2] = 0.0; v5[1] = 0.0; *(_DWORD *)v5 = &AreaInfoData::AE_Circle::`vftable'; v6 = v5; } else { v6 = 0; } v7 = *(_DWORD *)v17; *v16 = v6; *((_DWORD *)v6 + 1) = v7; *((_DWORD *)v6 + 2) = v18; *((_DWORD *)v6 + 3) = v19; *((_DWORD *)v6 + 4) = v20; *((_DWORD *)v6 + 5) = v21; *((_DWORD *)v6 + 6) = v22; *((_DWORD *)v6 + 7) = v23; *((_DWORD *)v6 + 8) = v24; *((_DWORD *)v6 + 9) = v13; fread(v6 + 10, 4u, 1u, v3); fread(v6 + 11, 4u, 1u, v3); fread(v6 + 12, 4u, 1u, v3); } ++v16; ++v15; } while ( v15 < *v12 ); } fclose(v3); return 1; } // A091A0: using guessed type void *AreaInfoData::AE_Square::`vftable'; // A091A8: using guessed type void *AreaInfoData::AE_Circle::`vftable'; //----- (00753C00) -------------------------------------------------------- void *__thiscall sub_753C00(void *this, char a2) { void *v2; // esi v2 = this; sub_753910((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00753C30) -------------------------------------------------------- char __stdcall sub_753C30(unsigned __int8 *a1, int *a2) { int v3; // edx unsigned __int8 v4; // cl int v5; // ecx int v6; // edx int v7; // ecx if ( a1 && a2 ) { v3 = 0; while ( 1 ) { v4 = a1[v3]; if ( v4 < 1u || v4 > 6u ) break; if ( ++v3 >= 3 ) { *a2 = 0; v5 = 6 * *a2; *a2 = v5; v6 = 6 * (v5 + *a1) - 6; *a2 = v6; v7 = 6 * (v6 + a1[1]) - 6; *a2 = v7; *a2 = a1[2] + v7 - 1; return 1; } } } return 0; } //----- (00753CA0) -------------------------------------------------------- char __stdcall sub_753CA0(signed int a1, _BYTE *a2) { if ( !a2 || (unsigned int)a1 > 0xD7 ) return 0; a2[2] = a1 % 6 + 1; a2[1] = a1 / 6 % 6 + 1; *a2 = a1 / 6 / 6 % 6 + 1; return 1; } //----- (00753D20) -------------------------------------------------------- char __thiscall sub_753D20(char *this, unsigned int a2, int a3) { signed int v4; // eax char *v5; // eax unsigned __int8 v6; // bl int v7; // ecx int v8; // edi int v9; // ecx int v10; // edi int v11; // ecx int v12; // ecx int v13; // edi signed int v14; // esi int v15; // ecx int v16; // edi signed int v17; // esi int v18; // ecx int v19; // edi signed int v20; // esi int v21; // ecx int v22; // edi signed int v23; // esi int v24; // ecx int v25; // edi signed int v26; // esi int v27; // ecx int v28; // edi signed int v29; // esi int v30; // ecx int v31; // edi signed int v32; // esi int v33; // ecx int v34; // edi signed int v35; // esi int v36; // ecx int v37; // edi signed int v38; // esi int v39; // ecx int v40; // edi signed int v41; // esi int v42; // ecx int v43; // edi signed int v44; // esi int v45; // ecx int v46; // edi signed int v47; // esi int v48; // ecx int v49; // edi signed int v50; // esi int v51; // ecx int v52; // edi signed int v53; // esi int v54; // ecx int v55; // edi signed int v56; // esi int v57; // ecx unsigned __int8 v58; // bl signed int v59; // edx int v60; // ecx signed int v61; // edx int v62; // ecx signed int v63; // edx int v64; // ecx signed int v65; // edx int v66; // ecx signed int v67; // edx int v68; // ecx signed int v69; // edx int v70; // ecx int v71; // [esp+0h] [ebp-8h] int v72; // [esp+4h] [ebp-4h] unsigned __int8 v73; // [esp+13h] [ebp+Bh] if ( a2 > 0xD7 ) return 0; if ( !a3 ) return 0; v4 = 0; do { *(_BYTE *)a3 = 0; *(_BYTE *)(v4 + a3 + 4) = 0; v4 += 8; } while ( v4 < 96 ); v5 = &this[22 * a2]; v6 = 0; v73 = 0; if ( v5[3] == 1 ) { *(_DWORD *)(a3 + 8) = 0; } else { if ( v5[3] != 2 ) goto LABEL_11; *(_DWORD *)(a3 + 8) = 1; } v6 = 1; v73 = 1; LABEL_11: if ( v5[4] == 1 ) { *(_DWORD *)(a3 + 8 * v6 + 8) = 2; } else { if ( v5[4] != 2 ) goto LABEL_16; *(_DWORD *)(a3 + 8 * v6 + 8) = 3; } v73 = ++v6; LABEL_16: v7 = v5[5]; if ( v7 > 0 ) { v8 = v6++; *(_DWORD *)(a3 + 8 * v8 + 8) = v7 + 3; v73 = v6; } v9 = v5[6]; if ( v9 > 0 ) { v10 = v6++; *(_DWORD *)(a3 + 8 * v10 + 8) = v9 + 9; v73 = v6; } if ( 2 * (v5[6] > 0) - 1 > 0 ) { v11 = v6++; *(_DWORD *)(a3 + 8 * v11 + 8) = 16; v73 = v6; } v12 = v5[7]; if ( v12 > 0 ) { *(_DWORD *)(a3 + 8 * v6 + 8) = v12 + 13; v73 = v6 + 1; } v13 = 0; v71 = 1; v72 = 2; v14 = 0; do { v15 = 0; while ( (unsigned __int8)v5[v15] != *(&v71 + v14) ) { if ( ++v15 >= 3 ) goto LABEL_30; } ++v13; LABEL_30: ++v14; } while ( v14 < 2 ); if ( v13 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 31; v16 = 0; v71 = 1; v72 = 3; v17 = 0; do { v18 = 0; while ( (unsigned __int8)v5[v18] != *(&v71 + v17) ) { if ( ++v18 >= 3 ) goto LABEL_39; } ++v16; LABEL_39: ++v17; } while ( v17 < 2 ); if ( v16 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 32; v19 = 0; v71 = 1; v72 = 4; v20 = 0; do { v21 = 0; while ( (unsigned __int8)v5[v21] != *(&v71 + v20) ) { if ( ++v21 >= 3 ) goto LABEL_48; } ++v19; LABEL_48: ++v20; } while ( v20 < 2 ); if ( v19 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 33; v22 = 0; v71 = 1; v72 = 5; v23 = 0; do { v24 = 0; while ( (unsigned __int8)v5[v24] != *(&v71 + v23) ) { if ( ++v24 >= 3 ) goto LABEL_57; } ++v22; LABEL_57: ++v23; } while ( v23 < 2 ); if ( v22 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 34; v25 = 0; v71 = 1; v72 = 6; v26 = 0; do { v27 = 0; while ( (unsigned __int8)v5[v27] != *(&v71 + v26) ) { if ( ++v27 >= 3 ) goto LABEL_66; } ++v25; LABEL_66: ++v26; } while ( v26 < 2 ); if ( v25 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 35; v28 = 0; v71 = 2; v72 = 3; v29 = 0; do { v30 = 0; while ( (unsigned __int8)v5[v30] != *(&v71 + v29) ) { if ( ++v30 >= 3 ) goto LABEL_75; } ++v28; LABEL_75: ++v29; } while ( v29 < 2 ); if ( v28 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 36; v31 = 0; v71 = 2; v72 = 4; v32 = 0; do { v33 = 0; while ( (unsigned __int8)v5[v33] != *(&v71 + v32) ) { if ( ++v33 >= 3 ) goto LABEL_84; } ++v31; LABEL_84: ++v32; } while ( v32 < 2 ); if ( v31 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 37; v34 = 0; v71 = 2; v72 = 5; v35 = 0; do { v36 = 0; while ( (unsigned __int8)v5[v36] != *(&v71 + v35) ) { if ( ++v36 >= 3 ) goto LABEL_93; } ++v34; LABEL_93: ++v35; } while ( v35 < 2 ); if ( v34 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 38; v37 = 0; v71 = 2; v72 = 6; v38 = 0; do { v39 = 0; while ( (unsigned __int8)v5[v39] != *(&v71 + v38) ) { if ( ++v39 >= 3 ) goto LABEL_102; } ++v37; LABEL_102: ++v38; } while ( v38 < 2 ); if ( v37 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 39; v40 = 0; v71 = 3; v72 = 4; v41 = 0; do { v42 = 0; while ( (unsigned __int8)v5[v42] != *(&v71 + v41) ) { if ( ++v42 >= 3 ) goto LABEL_111; } ++v40; LABEL_111: ++v41; } while ( v41 < 2 ); if ( v40 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 40; v43 = 0; v71 = 3; v72 = 5; v44 = 0; do { v45 = 0; while ( (unsigned __int8)v5[v45] != *(&v71 + v44) ) { if ( ++v45 >= 3 ) goto LABEL_120; } ++v43; LABEL_120: ++v44; } while ( v44 < 2 ); if ( v43 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 41; v46 = 0; v71 = 3; v72 = 6; v47 = 0; do { v48 = 0; while ( (unsigned __int8)v5[v48] != *(&v71 + v47) ) { if ( ++v48 >= 3 ) goto LABEL_129; } ++v46; LABEL_129: ++v47; } while ( v47 < 2 ); if ( v46 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 42; v49 = 0; v71 = 4; v72 = 5; v50 = 0; do { v51 = 0; while ( (unsigned __int8)v5[v51] != *(&v71 + v50) ) { if ( ++v51 >= 3 ) goto LABEL_138; } ++v49; LABEL_138: ++v50; } while ( v50 < 2 ); if ( v49 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 43; v52 = 0; v71 = 4; v72 = 6; v53 = 0; do { v54 = 0; while ( (unsigned __int8)v5[v54] != *(&v71 + v53) ) { if ( ++v54 >= 3 ) goto LABEL_147; } ++v52; LABEL_147: ++v53; } while ( v53 < 2 ); if ( v52 == 2 ) *(_DWORD *)(a3 + 8 * v73++ + 8) = 44; v55 = 0; v71 = 5; v72 = 6; v56 = 0; do { v57 = 0; while ( (unsigned __int8)v5[v57] != *(&v71 + v56) ) { if ( ++v57 >= 3 ) goto LABEL_156; } ++v55; LABEL_156: ++v56; } while ( v56 < 2 ); v58 = v73; if ( v55 == 2 ) { *(_DWORD *)(a3 + 8 * v73 + 8) = 45; v58 = v73 + 1; } v59 = 0; if ( *v5 == 1 ) v59 = 1; if ( v5[1] == 1 ) ++v59; if ( v5[2] == 1 ) ++v59; if ( v59 > 0 ) { v60 = a3 + 8 * v58; *(_BYTE *)(v60 + 4) = v59; *(_DWORD *)(v60 + 8) = 46; ++v58; } v61 = 0; if ( *v5 == 2 ) v61 = 1; if ( v5[1] == 2 ) ++v61; if ( v5[2] == 2 ) ++v61; if ( v61 > 0 ) { v62 = a3 + 8 * v58; *(_BYTE *)(v62 + 4) = v61; *(_DWORD *)(v62 + 8) = 47; ++v58; } v63 = 0; if ( *v5 == 3 ) v63 = 1; if ( v5[1] == 3 ) ++v63; if ( v5[2] == 3 ) ++v63; if ( v63 > 0 ) { v64 = a3 + 8 * v58; *(_BYTE *)(v64 + 4) = v63; *(_DWORD *)(v64 + 8) = 48; ++v58; } v65 = 0; if ( *v5 == 4 ) v65 = 1; if ( v5[1] == 4 ) ++v65; if ( v5[2] == 4 ) ++v65; if ( v65 > 0 ) { v66 = a3 + 8 * v58; *(_BYTE *)(v66 + 4) = v65; *(_DWORD *)(v66 + 8) = 49; ++v58; } v67 = 0; if ( *v5 == 5 ) v67 = 1; if ( v5[1] == 5 ) ++v67; if ( v5[2] == 5 ) ++v67; if ( v67 > 0 ) { v68 = a3 + 8 * v58; *(_BYTE *)(v68 + 4) = v67; *(_DWORD *)(v68 + 8) = 50; ++v58; } v69 = 0; if ( *v5 == 6 ) v69 = 1; if ( v5[1] == 6 ) ++v69; if ( v5[2] == 6 ) ++v69; if ( v69 > 0 ) { v70 = a3 + 8 * v58; *(_BYTE *)(v70 + 4) = v69; *(_DWORD *)(v70 + 8) = 51; ++v58; } *(_BYTE *)a3 = v58; return 1; } //----- (00754400) -------------------------------------------------------- _DWORD *__thiscall sub_754400(_DWORD *this) { _DWORD *result; // eax signed int v2; // ecx result = this; v2 = 0; do { *((_WORD *)result + v2) = 0; *((_BYTE *)result + v2++ + 30) = 0; } while ( v2 < 15 ); result[16] = 2; result[17] = 2; result[18] = 2; result[19] = 2; result[20] = 2; result[21] = 2; result[22] = 3; result[23] = 3; result[24] = 3; result[25] = 3; result[26] = 3; result[27] = 3; result[34] = 10; result[35] = 10; result[36] = 10; result[37] = 10; result[12] = 0; result[13] = 0; result[43] = 11; result[44] = 11; result[45] = 11; result[46] = 11; result[47] = 11; result[48] = 11; result[49] = 11; result[50] = 11; result[51] = 11; result[52] = 11; result[53] = 11; result[54] = 11; result[55] = 11; result[56] = 11; result[57] = 11; result[31] = 7; result[40] = 7; result[14] = 1; result[15] = 1; result[28] = 4; result[29] = 5; result[30] = 6; result[32] = 8; result[33] = 9; result[38] = 9; result[39] = 8; result[41] = 6; result[42] = 5; result[58] = 14; result[59] = 14; result[60] = 14; result[61] = 14; result[62] = 14; result[63] = 14; return result; } //----- (00754570) -------------------------------------------------------- char __thiscall sub_754570(_BYTE *this) { int v1; // eax v1 = 0; while ( this[v1 + 30] ) { if ( ++v1 >= 15 ) return 1; } return 0; } //----- (00754590) -------------------------------------------------------- char __thiscall sub_754590(_WORD *this, signed int a2, __int16 a3) { int v4; // eax if ( a2 < 15 ) { this[a2] = a3; *((_BYTE *)this + a2 + 30) = 1; v4 = 0; while ( *((_BYTE *)this + v4 + 30) ) { if ( ++v4 >= 15 ) return 1; } } return 0; } //----- (007545D0) -------------------------------------------------------- unsigned int __thiscall sub_7545D0(_DWORD *this, signed int a2, int a3) { unsigned int result; // eax signed int v4; // eax if ( a2 < 52 && (v4 = this[a2 + 12], v4 < 15) && *((_BYTE *)this + v4 + 30) ) result = 100 * a3 / (unsigned int)*((unsigned __int16 *)this + v4); else result = 0; return result; } //----- (00754610) -------------------------------------------------------- int __thiscall sub_754610(_DWORD *this, signed int a2, int a3, unsigned int a4) { signed int v5; // eax if ( a2 >= 52 ) return 0; v5 = this[a2 + 12]; if ( (unsigned int)(a2 - 46) <= 5 ) { switch ( a3 ) { case 1: v5 = 12; goto LABEL_11; case 2: v5 = 13; goto LABEL_11; case 3: v5 = 14; goto LABEL_11; } return 0; } if ( v5 >= 15 ) return 0; LABEL_11: if ( !*((_BYTE *)this + v5 + 30) ) return 0; return (signed __int64)((double)*((unsigned __int16 *)this + v5) / 100.0 * (double)a4); } //----- (007546B0) -------------------------------------------------------- _BYTE *__thiscall sub_7546B0(char *this, int a2) { signed int v2; // edi int v3; // esi _BYTE *result; // eax unsigned __int8 *v5; // esi unsigned __int8 v6; // cl signed int v7; // edi unsigned __int8 v8; // dl unsigned __int8 v9; // bl char v10; // cl char v11; // dl char v12; // cl char v13; // cl unsigned __int8 v14; // dl unsigned __int8 v15; // cl unsigned __int8 v16; // cl unsigned __int8 v17; // cl unsigned __int8 v18; // dl unsigned __int8 v19; // cl unsigned __int8 v20; // cl unsigned __int8 v21; // cl unsigned __int8 v22; // dl unsigned __int8 v23; // cl unsigned __int8 v24; // cl char v25; // cl char v26; // dl char v27; // cl char v28; // bl char v29; // cl char v30; // cl signed int v31; // [esp+Ch] [ebp-Ch] char *v32; // [esp+10h] [ebp-8h] int v33; // [esp+10h] [ebp-8h] v2 = 0; v32 = this; v3 = (int)(this + 4); do { sub_753CA0(v2, (_BYTE *)(v3 - 4)); *(_BYTE *)(v3 - 1) = -1; *(_BYTE *)v3 = -1; *(_BYTE *)(v3 + 1) = -1; *(_BYTE *)(v3 + 2) = -1; *(_BYTE *)(v3 + 3) = -1; *(_DWORD *)(v3 + 4) = 3; *(_DWORD *)(v3 + 8) = 50331648; *(_DWORD *)(v3 + 12) = 0; *(_WORD *)(v3 + 16) = 0; ++v2; v3 += 22; } while ( v2 < 216 ); result = v32 + 8; v5 = (unsigned __int8 *)(v32 + 9); v31 = 216; do { v6 = *(result - 8); v7 = 0; v33 = 0; if ( v6 == *(result - 7) ) { v33 = v6; v7 = 1; } v8 = *(result - 7); v9 = *(result - 6); if ( v8 == v9 ) { v33 = v8; ++v7; } if ( v9 == v6 ) { v33 = v9; ++v7; } if ( v7 == 1 ) { *(result - 3) = v33; result[7] = 2; *result = 1; LABEL_15: v10 = *(result - 8); v11 = *(result - 7); result[1] = v10; if ( v10 == v11 ) v11 = *(result - 6); goto LABEL_19; } if ( v7 == 3 ) { *(result - 2) = v33; result[7] = 1; *result = 0; goto LABEL_20; } if ( *result == 1 ) goto LABEL_15; if ( *result != 3 ) goto LABEL_20; v12 = *(result - 8); v11 = *(result - 7); result[1] = v12; result[3] = v12; v13 = *(result - 6); result[4] = v13; result[5] = v11; result[6] = v13; LABEL_19: result[2] = v11; LABEL_20: v14 = v5[1]; if ( *v5 > v14 ) { v15 = v14 ^ *v5; *v5 = v15; v16 = v14 ^ v15; *v5 ^= v16; v5[1] = v16; } v17 = v5[2]; v18 = v5[3]; if ( v17 > v18 ) { v19 = v18 ^ v17; v5[2] = v19; v20 = v18 ^ v19; v5[2] ^= v20; v5[3] = v20; } v21 = v5[4]; v22 = v5[5]; if ( v21 > v22 ) { v23 = v22 ^ v21; v5[4] = v23; v24 = v22 ^ v23; v5[4] ^= v24; v5[5] = v24; } v25 = result[7]; switch ( v25 ) { case 1: result[8] = *(result - 8); result[9] = 3; goto LABEL_39; case 2: v26 = *(result - 7); v27 = *(result - 8); if ( v27 == v26 ) { v26 = *(result - 6); result[8] = v27; result[9] = 2; } else { v28 = *(result - 6); if ( v27 != v28 ) { if ( v26 != v28 ) goto LABEL_39; result[8] = v26; result[9] = 2; result[10] = v27; goto LABEL_38; } result[8] = v27; result[9] = 2; } break; case 3: v26 = *(result - 7); result[8] = *(result - 8); v29 = *(result - 6); result[9] = 1; result[12] = v29; result[13] = 1; break; default: goto LABEL_39; } result[10] = v26; LABEL_38: result[11] = 1; LABEL_39: if ( !a2 ) { if ( *(result - 2) > 0 ) goto LABEL_42; LABEL_41: v30 = *(result - 6) + *(result - 7) + *(result - 8); *(result - 1) = v30; *(result - 5) = (v30 % 2 != 0) + 1; *(result - 4) = ((unsigned __int8)(v30 - 11) > 6u) + 1; goto LABEL_42; } if ( *(result - 2) <= 0 ) goto LABEL_41; if ( v33 != 1 && v33 != 6 ) *(result - 1) = *(result - 6) + *(result - 7) + *(result - 8); LABEL_42: v5 += 22; result += 22; --v31; } while ( v31 ); return result; } //----- (00754900) -------------------------------------------------------- _DWORD *__thiscall sub_754900(_DWORD *this) { _DWORD *result; // eax result = this; *this = &CGuildList::`vftable'; this[2] = 0; return result; } // A091B0: using guessed type void *CGuildList::`vftable'; //----- (00754910) -------------------------------------------------------- int __thiscall sub_754910(int this, void *a2) { int v2; // edi int v4; // esi size_t v5; // esi v2 = this; if ( *(_WORD *)a2 != 3137 ) return 0; v4 = *(_DWORD *)(this + 8); if ( v4 && *(_WORD *)(this + 4) < *(_WORD *)((char *)a2 + 5) ) { `eh vector destructor iterator'((void *)(v4 + 7), 0x2Eu, 0, nullsub_6); operator delete((void *)v4); *(_DWORD *)(v2 + 8) = 0; } v5 = 46 * *(unsigned __int16 *)((char *)a2 + 5) + 7; if ( !*(_DWORD *)(v2 + 8) ) { *(_DWORD *)(v2 + 8) = operator new[](46 * *(unsigned __int16 *)((char *)a2 + 5) + 7); *(_WORD *)(v2 + 4) = *(_WORD *)((char *)a2 + 5); } memcpy(*(void **)(v2 + 8), a2, v5); return 1; } //----- (007549A0) -------------------------------------------------------- void __thiscall sub_7549A0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; v2 = this[2]; *this = &CGuildList::`vftable'; if ( v2 ) { `eh vector destructor iterator'((void *)(v2 + 7), 0x2Eu, 0, nullsub_6); operator delete((void *)v2); v1[2] = 0; } } // A091B0: using guessed type void *CGuildList::`vftable'; //----- (007549E0) -------------------------------------------------------- char *sub_7549E0(char *a1, ...) { char v2; // si char *v3; // esi va_list va; // [esp+Ch] [ebp+Ch] va_start(va, a1); if ( !a1 ) return (char *)&unk_BA1310 + 512 * (dword_BA2310++ & 1); v2 = dword_BA2310++; v3 = (char *)&unk_BA1310 + 512 * (v2 & 7); vsprintf(v3, a1, va); return v3; } // BA2310: using guessed type int dword_BA2310; //----- (00754A40) -------------------------------------------------------- char __thiscall sub_754A40(void **this, size_t a2) { void **v2; // esi void *v3; // eax v2 = this; operator delete(this[1]); v3 = operator new(a2); v2[2] = (void *)a2; v2[1] = v3; return 1; } //----- (00754A70) -------------------------------------------------------- _DWORD *__thiscall sub_754A70(_DWORD *this) { _DWORD *result; // eax result = this; *this = &Encrypt::Stream::`vftable'; this[1] = 0; this[2] = 0; return result; } // A091BC: using guessed type void *Encrypt::Stream::`vftable'; //----- (00754A90) -------------------------------------------------------- void __thiscall sub_754A90(_DWORD *this) { void *v1; // ST00_4 v1 = (void *)this[1]; *this = &Encrypt::Stream::`vftable'; operator delete(v1); } // A091BC: using guessed type void *Encrypt::Stream::`vftable'; //----- (00754AB0) -------------------------------------------------------- bool __thiscall sub_754AB0(void **this, char *a2) { void **v2; // ebx FILE *v3; // eax FILE *v4; // esi int v6; // edi void *v7; // eax size_t v8; // ebx v2 = this; v3 = fopen(a2, "rb"); v4 = v3; if ( !v3 ) return 0; fseek(v3, 0, 2); v6 = ftell(v4); fseek(v4, 0, 0); operator delete(v2[1]); v7 = operator new(v6); v2[1] = v7; v2[2] = (void *)v6; v8 = fread(v7, 1u, v6, v4); fclose(v4); return v6 == v8; } //----- (00754B30) -------------------------------------------------------- bool __thiscall sub_754B30(_DWORD *this, char *a2) { _DWORD *v2; // esi FILE *v3; // eax FILE *v4; // edi size_t v6; // ebx v2 = this; if ( !this[2] || !this[1] ) return 0; v3 = fopen(a2, "wb"); v4 = v3; if ( !v3 ) return 0; v6 = fwrite((const void *)v2[1], 1u, v2[2], v3); fclose(v4); return v2[2] == v6; } //----- (00754BA0) -------------------------------------------------------- unsigned int __cdecl sub_754BA0(int a1, int a2, int a3, unsigned int a4, const char *a5) { unsigned int result; // eax unsigned int v6; // ecx int v7; // edx _BYTE *v8; // esi unsigned int v9; // [esp+0h] [ebp-4h] result = strlen(a5); v9 = result; if ( result ) { v6 = 0; if ( a4 ) { do { v7 = v6 % v9; result = (unsigned int)a5; v8 = (_BYTE *)(v6++ + a1); *v8 = v8[a3 - a1] ^ a5[v7]; } while ( v6 < a4 ); } } return result; } //----- (00754C00) -------------------------------------------------------- char __thiscall sub_754C00(const char *this, int a2, int a3) { int v3; // edi char v4; // bl int v5; // edi void *v6; // eax char *v7; // ecx int v8; // esi char *v9; // eax unsigned int v10; // edi char v11; // dl char v12; // dl const char *v14; // [esp+8h] [ebp-8h] char v15; // [esp+Fh] [ebp-1h] v3 = *(_DWORD *)(a3 + 8); v4 = 0; if ( !v3 ) return 0; if ( !*(_DWORD *)(a3 + 4) ) return 0; v14 = this + 4; if ( !this[4] ) return 0; v15 = 0; v5 = v3 + 1; operator delete(*(void **)(a2 + 4)); v6 = operator new(v5); *(_DWORD *)(a2 + 4) = v6; *(_DWORD *)(a2 + 8) = v5; sub_754BA0((int)v6, v5, *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 8), v14); v7 = *(char **)(a2 + 4); v8 = *(_DWORD *)(a2 + 8); v9 = v7; v10 = (unsigned int)&v7[v8 - 1]; v11 = 0; if ( (unsigned int)v7 < v10 ) { if ( v8 - 1 < 2 ) { v12 = 0; } else { do { v15 += *v9; v4 += v9[1]; v9 += 2; } while ( (signed int)v9 < (signed int)&v7[v8 - 2] ); v12 = 0; } if ( (unsigned int)v9 < v10 ) v12 = *v9; v11 = v15 + v4 + v12; } v7[v8 - 1] = v11; return 1; } //----- (00754CC0) -------------------------------------------------------- char __thiscall sub_754CC0(const char *this, int a2, int a3) { int v3; // edi int v4; // esi _BYTE *v5; // eax unsigned int v6; // esi char v7; // bl char v8; // dl char v9; // cl char v10; // bl int v11; // eax const char *v13; // [esp+8h] [ebp-Ch] _BYTE *v14; // [esp+Ch] [ebp-8h] v3 = a3; v4 = *(_DWORD *)(a3 + 8); if ( !v4 ) return 0; v5 = *(_BYTE **)(a3 + 4); v14 = v5; if ( !v5 ) return 0; v13 = this + 4; if ( !this[4] ) return 0; v6 = (unsigned int)&v5[v4 - 1]; v7 = 0; v8 = 0; v9 = 0; if ( (unsigned int)v5 < v6 ) { if ( (signed int)(v6 - (_DWORD)v5) >= 2 ) { do { v8 += *v5; v9 += v5[1]; v5 += 2; } while ( (signed int)v5 < (signed int)(v6 - 1) ); } if ( (unsigned int)v5 >= v6 ) v10 = 0; else v10 = *v5; v3 = a3; v7 = v8 + v9 + v10; } v11 = *(_DWORD *)(v3 + 8); if ( v7 != v14[v11 - 1] ) return 0; sub_754A40((void **)a2, v11 - 1); sub_754BA0(*(_DWORD *)(a2 + 4), *(_DWORD *)(a2 + 8) - 1, *(_DWORD *)(v3 + 4), *(_DWORD *)(v3 + 8) - 1, v13); return 1; } //----- (00754D80) -------------------------------------------------------- char __stdcall sub_754D80(char *a1, int a2) { char result; // al void **v3; // [esp+8h] [ebp-18h] void *v4; // [esp+Ch] [ebp-14h] int v5; // [esp+10h] [ebp-10h] int v6; // [esp+1Ch] [ebp-4h] v4 = 0; v5 = 0; v3 = &Encrypt::FileStream::`vftable'; v6 = 0; if ( (**(unsigned __int8 (__stdcall ***)(void ***))a2)(&v3) && sub_754B30(&v3, a1) ) { v6 = -1; v3 = &Encrypt::Stream::`vftable'; operator delete(v4); result = 1; } else { v6 = -1; v3 = &Encrypt::Stream::`vftable'; operator delete(v4); result = 0; } return result; } // 9AB0BC: using guessed type void *Encrypt::FileStream::`vftable'; // A091BC: using guessed type void *Encrypt::Stream::`vftable'; //----- (00754E40) -------------------------------------------------------- bool __thiscall sub_754E40(void **this, char *a2) { return sub_754AB0(this, a2) != 0; } //----- (00754E60) -------------------------------------------------------- bool __thiscall sub_754E60(_DWORD *this, char *a2) { return sub_754B30(this, a2) != 0; } //----- (00754E80) -------------------------------------------------------- void *__thiscall sub_754E80(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &Encrypt::Stream::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A091BC: using guessed type void *Encrypt::Stream::`vftable'; //----- (00754EB0) -------------------------------------------------------- int __thiscall sub_754EB0(_DWORD *this, char *a2) { char *v2; // eax int v3; // esi int result; // eax char v5; // cl v2 = a2; v3 = (int)this; *this = &Encrypt::EncryptMethodXor::`vftable'; if ( strlen(a2) < 0x1F ) { do { v5 = *v2; v2[v3 + 4 - (_DWORD)a2] = *v2; ++v2; } while ( v5 ); result = v3; } else { strncpy((char *)(v3 + 4), a2, 0x1Fu); *(_BYTE *)(v3 + 35) = 0; result = v3; } return result; } // A091C4: using guessed type void *Encrypt::EncryptMethodXor::`vftable'; //----- (00754F10) -------------------------------------------------------- char __thiscall sub_754F10(void *this, char *a2, int a3) { void *v3; // esi char result; // al void **v5; // [esp+8h] [ebp-18h] void *v6; // [esp+Ch] [ebp-14h] int v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v3 = this; v6 = 0; v7 = 0; v5 = &Encrypt::FileStream::`vftable'; v8 = 0; if ( sub_754AB0((void **)&v5, a2) && (*(unsigned __int8 (__stdcall **)(void *, void ***))(*(_DWORD *)a3 + 4))(v3, &v5) ) { v8 = -1; v5 = &Encrypt::Stream::`vftable'; operator delete(v6); result = 1; } else { v8 = -1; v5 = &Encrypt::Stream::`vftable'; operator delete(v6); result = 0; } return result; } // 9AB0BC: using guessed type void *Encrypt::FileStream::`vftable'; // A091BC: using guessed type void *Encrypt::Stream::`vftable'; //----- (00754FD0) -------------------------------------------------------- char __cdecl sub_754FD0(char a1) { char result; // al result = a1; byte_BA2718 = a1; return result; } // BA2718: using guessed type char byte_BA2718; //----- (00754FE0) -------------------------------------------------------- char __cdecl sub_754FE0(char a1) { char result; // al result = a1; byte_BA2719 = a1; return result; } // BA2719: using guessed type char byte_BA2719; //----- (00754FF0) -------------------------------------------------------- char __thiscall sub_754FF0(_DWORD *this, int a2, int a3, int a4) { _BYTE *v4; // eax unsigned int v5; // edx char *v6; // eax int v7; // esi char v8; // dl v4 = *(_BYTE **)(a2 + 76); v5 = this[45] + this[44]; this[46] = v4; if ( (unsigned int)v4 < v5 ) { do { if ( *v4 == 34 ) break; ++v4; } while ( (unsigned int)v4 < this[45] + this[44] ); } v6 = v4 + 1; v7 = 0; if ( (unsigned int)v6 < v5 ) { while ( v7 < a4 ) { v8 = *v6++; if ( v8 == 92 ) { v8 = *v6++; if ( (unsigned int)v6 >= this[45] + this[44] ) return 0; if ( v8 == 110 ) v8 = 10; } else if ( v8 == 34 ) { *(_BYTE *)(v7 + a3) = 0; return 1; } *(_BYTE *)(v7++ + a3) = v8; if ( (unsigned int)v6 >= this[45] + this[44] ) return 1; } } return 1; } //----- (007550A0) -------------------------------------------------------- int __thiscall sub_7550A0(_DWORD *this, const char *a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = (_DWORD *)this[1]; v4 = (_DWORD *)*v3; if ( (_DWORD *)*v3 == v3 ) return 0; while ( (**(int (***)(void))v4[2])() != 1 || strcmp(a2, (const char *)(v4[2] + 16)) ) { v4 = (_DWORD *)*v4; if ( v4 == (_DWORD *)v2[1] ) return 0; } return v4[2]; } //----- (00755140) -------------------------------------------------------- int __usercall sub_755140@(int result@, __int16 a2@) { int v2; // edi *(_BYTE *)(*(_DWORD *)(result + 8) + *(_DWORD *)(result + 20)) = HIBYTE(a2); v2 = *(_DWORD *)(result + 8); *(_BYTE *)(++*(_DWORD *)(result + 20) + v2) = a2; ++*(_DWORD *)(result + 20); return result; } //----- (00755170) -------------------------------------------------------- int __usercall sub_755170@(int a1@) { int v1; // esi int result; // eax size_t v3; // edi int v4; // eax _DWORD *v5; // esi v1 = a1; result = *(_DWORD *)(a1 + 28); v3 = *(_DWORD *)(result + 20); if ( v3 > *(_DWORD *)(v1 + 16) ) v3 = *(_DWORD *)(v1 + 16); if ( v3 ) { memcpy(*(void **)(v1 + 12), *(const void **)(result + 16), v3); v4 = *(_DWORD *)(v1 + 28); *(_DWORD *)(v1 + 12) += v3; *(_DWORD *)(v4 + 16) += v3; *(_DWORD *)(v1 + 20) += v3; *(_DWORD *)(v1 + 16) -= v3; result = *(_DWORD *)(v1 + 28); *(_DWORD *)(result + 20) -= v3; v5 = *(_DWORD **)(v1 + 28); if ( !v5[5] ) v5[4] = v5[2]; } return result; } //----- (007551C0) -------------------------------------------------------- signed int __cdecl sub_7551C0(_DWORD *a1, unsigned int a2) { int v2; // edi int v3; // esi int v4; // ecx int v5; // eax int v7; // edx signed int v8; // eax char v9; // al int v10; // eax signed int v11; // eax int v12; // eax unsigned int v13; // ecx int v14; // eax int v15; // eax int v16; // eax int v17; // eax int v18; // eax int v19; // eax int v20; // eax int v21; // [esp+10h] [ebp+8h] v2 = (int)a1; if ( !a1 ) return -2; v3 = a1[7]; if ( !v3 ) return -2; v4 = a2; if ( a2 > 4 ) return -2; if ( !a1[3] || !*a1 && a1[1] || (v5 = *(_DWORD *)(v3 + 4), v5 == 666) && a2 != 4 ) { a1[6] = "stream error"; return -2; } if ( !a1[4] ) { a1[6] = "buffer error"; return -5; } v7 = *(_DWORD *)(v3 + 32); *(_DWORD *)v3 = a1; v21 = v7; *(_DWORD *)(v3 + 32) = a2; if ( v5 == 42 ) { if ( *(_DWORD *)(v3 + 24) == 2 ) { *(_BYTE *)(*(_DWORD *)(v3 + 8) + (*(_DWORD *)(v3 + 20))++) = 31; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = -117; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 8; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 0; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 0; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 0; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 0; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = 0; v8 = *(_DWORD *)(v3 + 124); if ( v8 == 9 ) { v9 = 2; } else if ( *(_DWORD *)(v3 + 128) >= 2 || v8 < 2 ) { v9 = 4; } else { v9 = 0; } *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = v9; *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = -1; *(_DWORD *)(v3 + 4) = 113; v10 = sub_759C50(0, 0, 0); } else { if ( *(_DWORD *)(v3 + 128) >= 2 || (v11 = *(_DWORD *)(v3 + 124), v11 < 2) ) { v12 = 0; } else if ( v11 >= 6 ) { v12 = (v11 != 6) + 2; } else { v12 = 1; } v13 = (v12 << 6) | (((*(_DWORD *)(v3 + 40) - 8) << 12) + 2048); if ( *(_DWORD *)(v3 + 100) ) v13 |= 0x20u; *(_DWORD *)(v3 + 4) = 113; v14 = sub_755140(v3, 31 * (v13 / 0x1F + 1)); if ( *(_DWORD *)(v3 + 100) ) { v15 = sub_755140(v14, *(_WORD *)(v2 + 50)); sub_755140(v15, *(_WORD *)(v2 + 48)); } v10 = sub_757D40(0, 0, 0); } v4 = a2; *(_DWORD *)(v2 + 48) = v10; } if ( *(_DWORD *)(v3 + 20) ) { sub_755170(v2); if ( !*(_DWORD *)(v2 + 16) ) { LABEL_34: *(_DWORD *)(v3 + 32) = -1; return 0; } v4 = a2; } else if ( !*(_DWORD *)(v2 + 4) && v4 <= v21 && v4 != 4 ) { *(_DWORD *)(v2 + 24) = "buffer error"; return -5; } v16 = *(_DWORD *)(v3 + 4); if ( v16 == 666 ) { if ( *(_DWORD *)(v2 + 4) ) { *(_DWORD *)(v2 + 24) = "buffer error"; return -5; } LABEL_45: if ( !*(_DWORD *)(v3 + 108) && (!v4 || v16 == 666) ) goto LABEL_60; goto LABEL_48; } if ( !*(_DWORD *)(v2 + 4) ) goto LABEL_45; LABEL_48: v17 = off_A09228[3 * *(_DWORD *)(v3 + 124)](v3, v4); if ( v17 == 2 || v17 == 3 ) *(_DWORD *)(v3 + 4) = 666; if ( !v17 || v17 == 2 ) { if ( *(_DWORD *)(v2 + 16) ) return 0; *(_DWORD *)(v3 + 32) = -1; return 0; } if ( v17 == 1 ) { if ( a2 == 1 ) { sub_7595A0(v3); } else { sub_7594F0(v3, 0, 0, 0); if ( a2 == 3 ) { *(_WORD *)(*(_DWORD *)(v3 + 60) + 2 * *(_DWORD *)(v3 + 68) - 2) = 0; memset(*(void **)(v3 + 60), 0, 2 * *(_DWORD *)(v3 + 68) - 2); } } sub_755170(v2); if ( !*(_DWORD *)(v2 + 16) ) goto LABEL_34; } v4 = a2; LABEL_60: if ( v4 != 4 ) return 0; v18 = *(_DWORD *)(v3 + 24); if ( v18 <= 0 ) return 1; if ( v18 == 2 ) { *(_BYTE *)(*(_DWORD *)(v3 + 8) + (*(_DWORD *)(v3 + 20))++) = *(_BYTE *)(v2 + 48); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 49); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 50); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 51); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 8); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 9); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 10); *(_BYTE *)((*(_DWORD *)(v3 + 20))++ + *(_DWORD *)(v3 + 8)) = *(_BYTE *)(v2 + 11); } else { v19 = sub_755140(v3, *(_WORD *)(v2 + 50)); sub_755140(v19, *(_WORD *)(v2 + 48)); } sub_755170(v2); v20 = *(_DWORD *)(v3 + 24); if ( v20 > 0 ) *(_DWORD *)(v3 + 24) = -v20; return *(_DWORD *)(v3 + 20) == 0; } //----- (007555C0) -------------------------------------------------------- signed int __cdecl sub_7555C0(int a1) { int v1; // eax int v2; // edi int v4; // eax int v5; // edx int v6; // edx int v7; // edx if ( !a1 ) return -2; v1 = *(_DWORD *)(a1 + 28); if ( !v1 ) return -2; v2 = *(_DWORD *)(v1 + 4); if ( v2 != 42 && v2 != 113 && v2 != 666 ) return -2; v4 = *(_DWORD *)(v1 + 8); if ( v4 ) (*(void (__cdecl **)(_DWORD, int))(a1 + 36))(*(_DWORD *)(a1 + 40), v4); v5 = *(_DWORD *)(a1 + 28); if ( *(_DWORD *)(v5 + 60) ) (*(void (__cdecl **)(_DWORD, _DWORD))(a1 + 36))(*(_DWORD *)(a1 + 40), *(_DWORD *)(v5 + 60)); v6 = *(_DWORD *)(a1 + 28); if ( *(_DWORD *)(v6 + 56) ) (*(void (__cdecl **)(_DWORD, _DWORD))(a1 + 36))(*(_DWORD *)(a1 + 40), *(_DWORD *)(v6 + 56)); v7 = *(_DWORD *)(a1 + 28); if ( *(_DWORD *)(v7 + 48) ) (*(void (__cdecl **)(_DWORD, _DWORD))(a1 + 36))(*(_DWORD *)(a1 + 40), *(_DWORD *)(v7 + 48)); (*(void (__cdecl **)(_DWORD, _DWORD))(a1 + 36))(*(_DWORD *)(a1 + 40), *(_DWORD *)(a1 + 28)); *(_DWORD *)(a1 + 28) = 0; return v2 != 113 ? 0 : 0xFFFFFFFD; } //----- (00755690) -------------------------------------------------------- signed int __usercall sub_755690@(int a1@) { int v1; // ecx int v2; // edx int v3; // eax int v4; // edx signed int result; // eax v1 = *(_DWORD *)(a1 + 68); v2 = *(_DWORD *)(a1 + 60); *(_DWORD *)(a1 + 52) = 2 * *(_DWORD *)(a1 + 36); *(_WORD *)(v2 + 2 * v1 - 2) = 0; memset(*(void **)(a1 + 60), 0, 2 * *(_DWORD *)(a1 + 68) - 2); v3 = 6 * *(_DWORD *)(a1 + 124); *(_DWORD *)(a1 + 120) = (unsigned __int16)word_A09222[6 * *(_DWORD *)(a1 + 124)]; *(_DWORD *)(a1 + 132) = (unsigned __int16)word_A09220[v3]; *(_DWORD *)(a1 + 136) = (unsigned __int16)word_A09224[v3]; v4 = (unsigned __int16)word_A09226[v3]; result = 2; *(_DWORD *)(a1 + 100) = 0; *(_DWORD *)(a1 + 84) = 0; *(_DWORD *)(a1 + 108) = 0; *(_DWORD *)(a1 + 96) = 0; *(_DWORD *)(a1 + 64) = 0; *(_DWORD *)(a1 + 116) = v4; *(_DWORD *)(a1 + 112) = 2; *(_DWORD *)(a1 + 88) = 2; return result; } // A09220: using guessed type __int16 word_A09220[]; // A09222: using guessed type __int16 word_A09222[]; // A09224: using guessed type __int16 word_A09224[]; // A09226: using guessed type __int16 word_A09226[]; //----- (00755720) -------------------------------------------------------- unsigned int __usercall sub_755720@(_DWORD *a1@, unsigned int a2) { unsigned int v2; // edx int v3; // esi _BYTE *v4; // ecx unsigned int result; // eax unsigned int v6; // esi unsigned int v7; // ebx _BYTE *v8; // edx unsigned int v9; // ecx _BYTE *v10; // edx char v11; // bl char v12; // bl char v13; // bl char v14; // bl char v15; // bl char v16; // bl char v17; // bl char v18; // bl int v19; // edx unsigned int v20; // [esp+Ch] [ebp-10h] int v21; // [esp+10h] [ebp-Ch] unsigned int v22; // [esp+14h] [ebp-8h] char v23; // [esp+1Ah] [ebp-2h] char v24; // [esp+1Bh] [ebp-1h] v2 = a1[25]; v21 = a1[34]; v3 = a1[9]; v4 = (_BYTE *)(v2 + a1[12]); v22 = a1[29]; result = a1[28]; if ( v2 <= v3 - 262 ) v20 = 0; else v20 = v2 - v3 + 262; v24 = v4[result - 1]; v6 = (unsigned int)(v4 + 258); v23 = v4[result]; if ( result >= a1[33] ) v22 >>= 2; if ( (unsigned int)v21 > a1[27] ) v21 = a1[27]; v7 = a2; do { v8 = (_BYTE *)(v7 + a1[12]); if ( v8[result] == v23 && v8[result - 1] == v24 && *v8 == *v4 && v8[1] == v4[1] ) { v9 = (unsigned int)(v4 + 2); v10 = v8 + 2; do { v11 = *(_BYTE *)(v9++ + 1); if ( v11 != v10[1] ) break; v12 = *(_BYTE *)(v9++ + 1); if ( v12 != v10[2] ) break; v13 = *(_BYTE *)(v9++ + 1); if ( v13 != v10[3] ) break; v14 = *(_BYTE *)(v9++ + 1); if ( v14 != v10[4] ) break; v15 = *(_BYTE *)(v9++ + 1); if ( v15 != v10[5] ) break; v16 = *(_BYTE *)(v9++ + 1); if ( v16 != v10[6] ) break; v17 = *(_BYTE *)(v9++ + 1); if ( v17 != v10[7] ) break; v18 = *(_BYTE *)(v9++ + 1); v10 += 8; if ( v18 != *v10 ) break; } while ( v9 < v6 ); v19 = v9 - v6 + 258; v4 = (_BYTE *)(v6 - 258); if ( v19 > (signed int)result ) { a1[26] = a2; result = v19; if ( v19 >= v21 ) break; v24 = v4[v19 - 1]; v23 = v4[v19]; } } v7 = *(unsigned __int16 *)(a1[14] + 2 * (a2 & a1[11])); a2 = v7; if ( v7 <= v20 ) break; --v22; } while ( v22 ); if ( result > a1[27] ) result = a1[27]; return result; } //----- (00755880) -------------------------------------------------------- int __usercall sub_755880@(int a1@, _DWORD *a2@) { int v2; // ecx _BYTE *v3; // eax _BYTE *v4; // ecx unsigned int v5; // edi unsigned int v6; // eax _BYTE *v7; // ecx char v8; // bl char v9; // bl char v10; // bl char v11; // bl char v12; // bl char v13; // bl char v14; // bl char v15; // bl int result; // eax unsigned int v17; // ecx v2 = a2[12]; v3 = (_BYTE *)(v2 + a2[25]); v4 = (_BYTE *)(a1 + v2); v5 = (unsigned int)(v3 + 258); if ( *v4 != *v3 || v4[1] != v3[1] ) return 2; v6 = (unsigned int)(v3 + 2); v7 = v4 + 2; do { v8 = *(_BYTE *)(v6++ + 1); if ( v8 != v7[1] ) break; v9 = *(_BYTE *)(v6++ + 1); if ( v9 != v7[2] ) break; v10 = *(_BYTE *)(v6++ + 1); if ( v10 != v7[3] ) break; v11 = *(_BYTE *)(v6++ + 1); if ( v11 != v7[4] ) break; v12 = *(_BYTE *)(v6++ + 1); if ( v12 != v7[5] ) break; v13 = *(_BYTE *)(v6++ + 1); if ( v13 != v7[6] ) break; v14 = *(_BYTE *)(v6++ + 1); if ( v14 != v7[7] ) break; v15 = *(_BYTE *)(v6++ + 1); v7 += 8; if ( v15 != *v7 ) break; } while ( v6 < v5 ); result = v6 - v5 + 258; if ( result < 3 ) return 2; v17 = a2[27]; a2[26] = a1; if ( result > v17 ) result = v17; return result; } //----- (00755920) -------------------------------------------------------- void *__usercall sub_755920@(int a1@) { size_t v1; // edi void *result; // eax int v3; // ebx int v4; // edx int v5; // eax _WORD *v6; // ecx unsigned int v7; // eax __int16 v8; // ax size_t v9; // edx _WORD *v10; // ecx unsigned int v11; // eax const void **v12; // edi unsigned int v13; // ebx _DWORD *v14; // edx int v15; // ecx int v16; // eax unsigned int v17; // edi unsigned __int8 *v18; // edx int v19; // ecx int v20; // eax size_t i; // [esp+8h] [ebp-Ch] int v22; // [esp+Ch] [ebp-8h] unsigned int v23; // [esp+10h] [ebp-4h] v1 = *(_DWORD *)(a1 + 36); for ( i = *(_DWORD *)(a1 + 36); ; v1 = i ) { result = *(void **)(a1 + 100); v3 = *(_DWORD *)(a1 + 52) - *(_DWORD *)(a1 + 108) - (_DWORD)result; v23 = *(_DWORD *)(a1 + 52) - *(_DWORD *)(a1 + 108) - (_DWORD)result; if ( (unsigned int)result >= v1 + *(_DWORD *)(a1 + 36) - 262 ) { memcpy(*(void **)(a1 + 48), (const void *)(*(_DWORD *)(a1 + 48) + v1), v1); v4 = *(_DWORD *)(a1 + 68); v5 = *(_DWORD *)(a1 + 60); *(_DWORD *)(a1 + 104) -= v1; *(_DWORD *)(a1 + 100) -= v1; *(_DWORD *)(a1 + 84) -= v1; v6 = (_WORD *)(v5 + 2 * v4); do { v7 = (unsigned __int16)*(v6 - 1); --v6; if ( v7 < v1 ) v8 = 0; else v8 = v7 - v1; --v4; *v6 = v8; } while ( v4 ); v9 = v1; v10 = (_WORD *)(*(_DWORD *)(a1 + 56) + 2 * v1); do { v11 = (unsigned __int16)*(v10 - 1); --v10; if ( v11 < v1 ) result = 0; else result = (void *)(v11 - v1); --v9; *v10 = (_WORD)result; } while ( v9 ); v23 = v1 + v3; } v12 = *(const void ***)a1; if ( !*(_DWORD *)(*(_DWORD *)a1 + 4) ) break; result = (void *)(*(_DWORD *)(a1 + 48) + *(_DWORD *)(a1 + 100) + *(_DWORD *)(a1 + 108)); v13 = (unsigned int)v12[1]; v22 = *(_DWORD *)(a1 + 48) + *(_DWORD *)(a1 + 100) + *(_DWORD *)(a1 + 108); if ( v13 > v23 ) v13 = v23; if ( v13 ) { v14 = v12[7]; v12[1] = (char *)v12[1] - v13; v15 = v14[6]; if ( v15 == 1 ) { v16 = sub_757D40((unsigned int)v12[12], (unsigned __int8 *)*v12, v13); goto LABEL_23; } if ( v15 == 2 ) { v16 = sub_759C50((int)v12[12], *v12, v13); LABEL_23: v12[12] = (const void *)v16; result = (void *)v22; } result = memcpy(result, *v12, v13); *v12 = (char *)*v12 + v13; v12[2] = (char *)v12[2] + v13; } *(_DWORD *)(a1 + 108) += v13; v17 = *(_DWORD *)(a1 + 108); if ( v17 >= 3 ) { v18 = (unsigned __int8 *)(*(_DWORD *)(a1 + 48) + *(_DWORD *)(a1 + 100)); v19 = *(_DWORD *)(a1 + 80); v20 = *v18; *(_DWORD *)(a1 + 64) = v20; result = (void *)(*(_DWORD *)(a1 + 76) & (v18[1] ^ (v20 << v19))); *(_DWORD *)(a1 + 64) = result; } if ( v17 >= 0x106 || !*(_DWORD *)(*(_DWORD *)a1 + 4) ) return result; } return result; } //----- (00755A70) -------------------------------------------------------- signed int __cdecl sub_755A70(int *a1, int a2) { unsigned int v2; // eax bool v3; // zf int v4; // ecx unsigned int v5; // edx unsigned int v6; // eax char *v7; // edx int v8; // edi int v9; // eax size_t v10; // ebx int v11; // eax _DWORD *v12; // edi int v13; // edx unsigned int v14; // ecx char *v15; // eax int v16; // edi int v17; // eax size_t v18; // ebx int v19; // eax _DWORD *v20; // edi int v22; // ecx char *v23; // eax int v24; // eax int v25; // [esp+Ch] [ebp-4h] v25 = 0xFFFF; if ( (unsigned int)(a1[3] - 5) < 0xFFFF ) v25 = a1[3] - 5; while ( 1 ) { v2 = a1[27]; if ( v2 <= 1 ) { sub_755920((int)a1); v2 = a1[27]; if ( !v2 ) break; } v3 = v2 + a1[25] == 0; a1[25] += v2; v4 = a1[21]; v5 = a1[25]; a1[27] = 0; v6 = v4 + v25; if ( !v3 && v5 < v6 ) goto LABEL_36; a1[27] = v5 - v6; a1[25] = v6; if ( v4 < 0 ) v7 = 0; else v7 = (char *)(v4 + a1[12]); sub_7597A0((int)a1, v7, v25, 0); v8 = *a1; a1[21] = a1[25]; v9 = *(_DWORD *)(v8 + 28); v10 = *(_DWORD *)(v9 + 20); if ( v10 > *(_DWORD *)(v8 + 16) ) v10 = *(_DWORD *)(v8 + 16); if ( v10 ) { memcpy(*(void **)(v8 + 12), *(const void **)(v9 + 16), v10); v11 = *(_DWORD *)(v8 + 28); *(_DWORD *)(v8 + 12) += v10; *(_DWORD *)(v11 + 16) += v10; *(_DWORD *)(v8 + 20) += v10; *(_DWORD *)(v8 + 16) -= v10; *(_DWORD *)(*(_DWORD *)(v8 + 28) + 20) -= v10; v12 = *(_DWORD **)(v8 + 28); if ( !v12[5] ) v12[4] = v12[2]; } if ( *(_DWORD *)(*a1 + 16) ) { LABEL_36: v13 = a1[21]; v14 = a1[25] - v13; if ( v14 < a1[9] - 262 ) continue; if ( v13 < 0 ) v15 = 0; else v15 = (char *)(v13 + a1[12]); sub_7597A0((int)a1, v15, v14, 0); v16 = *a1; a1[21] = a1[25]; v17 = *(_DWORD *)(v16 + 28); v18 = *(_DWORD *)(v17 + 20); if ( v18 > *(_DWORD *)(v16 + 16) ) v18 = *(_DWORD *)(v16 + 16); if ( v18 ) { memcpy(*(void **)(v16 + 12), *(const void **)(v17 + 16), v18); v19 = *(_DWORD *)(v16 + 28); *(_DWORD *)(v16 + 12) += v18; *(_DWORD *)(v19 + 16) += v18; *(_DWORD *)(v16 + 20) += v18; *(_DWORD *)(v16 + 16) -= v18; *(_DWORD *)(*(_DWORD *)(v16 + 28) + 20) -= v18; v20 = *(_DWORD **)(v16 + 28); if ( !v20[5] ) v20[4] = v20[2]; } if ( *(_DWORD *)(*a1 + 16) ) continue; } return 0; } if ( !a2 ) return 0; v22 = a1[21]; if ( v22 < 0 ) v23 = 0; else v23 = (char *)(v22 + a1[12]); sub_7597A0((int)a1, v23, a1[25] - v22, a2 == 4); a1[21] = a1[25]; sub_755170(*a1); v24 = 0; if ( !*(_DWORD *)(*a1 + 16) ) return a2 != 4 ? 0 : 2; LOBYTE(v24) = a2 == 4; return 2 * v24 + 1; } //----- (00755C50) -------------------------------------------------------- signed int __cdecl sub_755C50(int a1, int a2) { int v2; // esi unsigned int v3; // ebx unsigned int v4; // eax int v5; // edx int v6; // edi int v7; // eax int v8; // ecx unsigned int v9; // eax signed int v10; // ecx unsigned __int8 v11; // al __int16 v12; // cx unsigned __int16 v13; // cx int v14; // eax unsigned int v15; // eax BOOL v16; // ebx int v17; // edx int v18; // ecx int v19; // eax int v20; // ebx unsigned __int8 *v22; // edx int v23; // ecx int v24; // eax unsigned __int8 v25; // al int v26; // ecx char *v27; // eax int v28; // edi int v29; // eax size_t v30; // ebx int v31; // eax _DWORD *v32; // edi int v34; // ecx char *v35; // eax int v36; // eax unsigned int i; // [esp+Ch] [ebp-4h] BOOL v38; // [esp+18h] [ebp+8h] v2 = a1; v3 = 0; for ( i = 0; ; v3 = i ) { v4 = *(_DWORD *)(v2 + 108); if ( v4 < 0x106 ) { sub_755920(v2); v4 = *(_DWORD *)(v2 + 108); if ( v4 < 0x106 && !a2 ) return 0; if ( !v4 ) break; } if ( v4 >= 3 ) { v5 = *(_DWORD *)(v2 + 100); v6 = *(_DWORD *)(v2 + 44); v7 = *(_DWORD *)(v2 + 76) & (*(unsigned __int8 *)(*(_DWORD *)(v2 + 48) + v5 + 2) ^ (*(_DWORD *)(v2 + 64) << *(_DWORD *)(v2 + 80))); v8 = *(_DWORD *)(v2 + 60); *(_DWORD *)(v2 + 64) = v7; *(_WORD *)(*(_DWORD *)(v2 + 56) + 2 * (v5 & v6)) = *(_WORD *)(v8 + 2 * v7); i = *(unsigned __int16 *)(*(_DWORD *)(v2 + 56) + 2 * (*(_DWORD *)(v2 + 44) & *(_DWORD *)(v2 + 100))); v3 = *(unsigned __int16 *)(*(_DWORD *)(v2 + 56) + 2 * (*(_DWORD *)(v2 + 44) & *(_DWORD *)(v2 + 100))); *(_WORD *)(*(_DWORD *)(v2 + 60) + 2 * *(_DWORD *)(v2 + 64)) = *(_WORD *)(v2 + 100); } if ( v3 ) { v9 = *(_DWORD *)(v2 + 100) - v3; if ( v9 <= *(_DWORD *)(v2 + 36) - 262 ) { v10 = *(_DWORD *)(v2 + 128); if ( v10 >= 2 ) { if ( v10 == 3 && v9 == 1 ) *(_DWORD *)(v2 + 88) = sub_755880(v3, (_DWORD *)v2); } else { *(_DWORD *)(v2 + 88) = sub_755720((_DWORD *)v2, v3); } } } if ( *(_DWORD *)(v2 + 88) < 3u ) { v25 = *(_BYTE *)(*(_DWORD *)(v2 + 100) + *(_DWORD *)(v2 + 48)); *(_WORD *)(*(_DWORD *)(v2 + 5788) + 2 * *(_DWORD *)(v2 + 5784)) = 0; *(_BYTE *)(*(_DWORD *)(v2 + 5776) + (*(_DWORD *)(v2 + 5784))++) = v25; ++*(_WORD *)(v2 + 4 * v25 + 140); v16 = *(_DWORD *)(v2 + 5784) == *(_DWORD *)(v2 + 5780) - 1; --*(_DWORD *)(v2 + 108); LABEL_27: ++*(_DWORD *)(v2 + 100); goto LABEL_28; } v11 = *(_BYTE *)(v2 + 88); v12 = *(_WORD *)(v2 + 100) - *(_WORD *)(v2 + 104); *(_WORD *)(*(_DWORD *)(v2 + 5788) + 2 * *(_DWORD *)(v2 + 5784)) = v12; v11 -= 3; *(_BYTE *)(*(_DWORD *)(v2 + 5776) + (*(_DWORD *)(v2 + 5784))++) = v11; ++*(_WORD *)(v2 + 4 * (unsigned __int8)byte_A0A558[v11] + 1168); v13 = v12 - 1; if ( v13 >= 0x100u ) v14 = (unsigned __int8)byte_A0A458[(unsigned int)v13 >> 7]; else v14 = (unsigned __int8)byte_A0A358[v13]; ++*(_WORD *)(v2 + 4 * v14 + 2432); v15 = *(_DWORD *)(v2 + 88); v16 = *(_DWORD *)(v2 + 5784) == *(_DWORD *)(v2 + 5780) - 1; *(_DWORD *)(v2 + 108) -= v15; v38 = v16; if ( v15 <= *(_DWORD *)(v2 + 120) && *(_DWORD *)(v2 + 108) >= 3u ) { *(_DWORD *)(v2 + 88) = v15 - 1; do { v17 = ++*(_DWORD *)(v2 + 100); v18 = *(_DWORD *)(v2 + 60); v19 = *(_DWORD *)(v2 + 76) & ((*(_DWORD *)(v2 + 64) << *(_DWORD *)(v2 + 80)) ^ *(unsigned __int8 *)(v17 + *(_DWORD *)(v2 + 48) + 2)); v20 = *(_DWORD *)(v2 + 44); *(_DWORD *)(v2 + 64) = v19; *(_WORD *)(*(_DWORD *)(v2 + 56) + 2 * (v17 & v20)) = *(_WORD *)(v18 + 2 * v19); i = *(unsigned __int16 *)(*(_DWORD *)(v2 + 56) + 2 * (*(_DWORD *)(v2 + 44) & *(_DWORD *)(v2 + 100))); *(_WORD *)(*(_DWORD *)(v2 + 60) + 2 * *(_DWORD *)(v2 + 64)) = *(_WORD *)(v2 + 100); } while ( (*(_DWORD *)(v2 + 88))-- != 1 ); v16 = v38; goto LABEL_27; } *(_DWORD *)(v2 + 100) += v15; v22 = (unsigned __int8 *)(*(_DWORD *)(v2 + 100) + *(_DWORD *)(v2 + 48)); v23 = *(_DWORD *)(v2 + 80); *(_DWORD *)(v2 + 88) = 0; v24 = *v22; *(_DWORD *)(v2 + 64) = v24; *(_DWORD *)(v2 + 64) = *(_DWORD *)(v2 + 76) & (v22[1] ^ (v24 << v23)); LABEL_28: if ( v16 ) { v26 = *(_DWORD *)(v2 + 84); if ( v26 < 0 ) v27 = 0; else v27 = (char *)(v26 + *(_DWORD *)(v2 + 48)); sub_7597A0(v2, v27, *(_DWORD *)(v2 + 100) - v26, 0); v28 = *(_DWORD *)v2; *(_DWORD *)(v2 + 84) = *(_DWORD *)(v2 + 100); v29 = *(_DWORD *)(v28 + 28); v30 = *(_DWORD *)(v29 + 20); if ( v30 > *(_DWORD *)(v28 + 16) ) v30 = *(_DWORD *)(v28 + 16); if ( v30 ) { memcpy(*(void **)(v28 + 12), *(const void **)(v29 + 16), v30); v31 = *(_DWORD *)(v28 + 28); *(_DWORD *)(v28 + 12) += v30; *(_DWORD *)(v31 + 16) += v30; *(_DWORD *)(v28 + 20) += v30; *(_DWORD *)(v28 + 16) -= v30; *(_DWORD *)(*(_DWORD *)(v28 + 28) + 20) -= v30; v32 = *(_DWORD **)(v28 + 28); if ( !v32[5] ) v32[4] = v32[2]; } if ( !*(_DWORD *)(*(_DWORD *)v2 + 16) ) return 0; } } v34 = *(_DWORD *)(v2 + 84); if ( v34 < 0 ) v35 = 0; else v35 = (char *)(v34 + *(_DWORD *)(v2 + 48)); sub_7597A0(v2, v35, *(_DWORD *)(v2 + 100) - v34, a2 == 4); *(_DWORD *)(v2 + 84) = *(_DWORD *)(v2 + 100); sub_755170(*(_DWORD *)v2); v36 = 0; if ( !*(_DWORD *)(*(_DWORD *)v2 + 16) ) return a2 != 4 ? 0 : 2; LOBYTE(v36) = a2 == 4; return 2 * v36 + 1; } //----- (00755FD0) -------------------------------------------------------- signed int __cdecl sub_755FD0(_DWORD *a1, int a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // edx int v5; // edi int v6; // eax int v7; // ecx unsigned int v8; // ecx unsigned int v9; // eax signed int v10; // ecx unsigned int v11; // eax unsigned int v12; // eax unsigned int v13; // eax unsigned int v14; // edi unsigned __int8 v15; // al __int16 v16; // cx unsigned __int16 v17; // cx int v18; // eax int v19; // eax BOOL v20; // ecx unsigned int v21; // edx int v22; // ebx int v23; // ecx int v24; // edx int v25; // eax int v26; // ecx int v27; // eax int v28; // edx char *v29; // ecx int v30; // edi int v31; // eax size_t v32; // ebx int v33; // eax _DWORD *v34; // edi bool v35; // zf unsigned __int8 v37; // al int v38; // ecx char *v39; // eax int v40; // edi int v41; // eax size_t v42; // ebx int v43; // eax _DWORD *v44; // edi int v45; // ecx unsigned __int8 v46; // al int v47; // ecx char *v48; // eax int v49; // eax unsigned int v50; // [esp+Ch] [ebp-4h] BOOL v51; // [esp+18h] [ebp+8h] v2 = a1; v50 = 0; while ( 1 ) { v3 = v2[27]; if ( v3 < 0x106 ) { sub_755920((int)v2); v3 = v2[27]; if ( v3 < 0x106 && !a2 ) return 0; if ( !v3 ) break; } if ( v3 >= 3 ) { v4 = v2[25]; v5 = v2[11]; v6 = v2[19] & (*(unsigned __int8 *)(v2[12] + v4 + 2) ^ (v2[16] << v2[20])); v7 = v2[15]; v2[16] = v6; *(_WORD *)(v2[14] + 2 * (v4 & v5)) = *(_WORD *)(v7 + 2 * v6); v50 = *(unsigned __int16 *)(v2[14] + 2 * (v2[11] & v2[25])); *(_WORD *)(v2[15] + 2 * v2[16]) = *((_WORD *)v2 + 50); } v8 = v2[22]; v2[23] = v2[26]; v2[28] = v8; v2[22] = 2; if ( !v50 ) goto LABEL_22; if ( v8 >= v2[30] ) goto LABEL_22; v9 = v2[25] - v50; if ( v9 > v2[9] - 262 ) goto LABEL_22; v10 = v2[32]; if ( v10 < 2 ) { v11 = sub_755720(v2, v50); LABEL_16: v2[22] = v11; goto LABEL_17; } if ( v10 == 3 && v9 == 1 ) { v11 = sub_755880(v50, v2); goto LABEL_16; } LABEL_17: v12 = v2[22]; if ( v12 <= 5 && (v2[32] == 1 || v12 == 3 && (unsigned int)(v2[25] - v2[26]) > 0x1000) ) v2[22] = 2; LABEL_22: v13 = v2[28]; if ( v13 < 3 || v2[22] > v13 ) { if ( v2[24] ) { v37 = *(_BYTE *)(v2[25] + v2[12] - 1); *(_WORD *)(v2[1447] + 2 * v2[1446]) = 0; *(_BYTE *)(v2[1444] + v2[1446]++) = v37; ++LOWORD(v2[v37 + 35]); if ( v2[1446] == v2[1445] - 1 ) { v38 = v2[21]; if ( v38 < 0 ) v39 = 0; else v39 = (char *)(v38 + v2[12]); sub_7597A0((int)v2, v39, v2[25] - v38, 0); v40 = *v2; v2[21] = v2[25]; v41 = *(_DWORD *)(v40 + 28); v42 = *(_DWORD *)(v41 + 20); if ( v42 > *(_DWORD *)(v40 + 16) ) v42 = *(_DWORD *)(v40 + 16); if ( v42 ) { memcpy(*(void **)(v40 + 12), *(const void **)(v41 + 16), v42); v43 = *(_DWORD *)(v40 + 28); *(_DWORD *)(v40 + 12) += v42; *(_DWORD *)(v43 + 16) += v42; *(_DWORD *)(v40 + 20) += v42; *(_DWORD *)(v40 + 16) -= v42; *(_DWORD *)(*(_DWORD *)(v40 + 28) + 20) -= v42; v44 = *(_DWORD **)(v40 + 28); if ( !v44[5] ) v44[4] = v44[2]; } } v45 = *v2; ++v2[25]; --v2[27]; v35 = *(_DWORD *)(v45 + 16) == 0; goto LABEL_41; } ++v2[25]; --v2[27]; v2[24] = 1; } else { v14 = v2[25] + v2[27] - 3; v15 = *((_BYTE *)v2 + 112); v16 = *((_WORD *)v2 + 50) - *((_WORD *)v2 + 46) - 1; *(_WORD *)(v2[1447] + 2 * v2[1446]) = v16; v15 -= 3; *(_BYTE *)(v2[1444] + v2[1446]++) = v15; ++LOWORD(v2[(unsigned __int8)byte_A0A558[v15] + 292]); v17 = v16 - 1; if ( v17 >= 0x100u ) v18 = (unsigned __int8)byte_A0A458[(unsigned int)v17 >> 7]; else v18 = (unsigned __int8)byte_A0A358[v17]; ++LOWORD(v2[v18 + 608]); v19 = v2[28]; v20 = v2[1446] == v2[1445] - 1; v2[27] += 1 - v19; v2[28] = v19 - 2; v51 = v20; do { v21 = ++v2[25]; if ( v21 <= v14 ) { v22 = v2[14]; v23 = *(unsigned __int8 *)(v2[12] + v21 + 2); v24 = v2[11] & v21; v25 = v2[19] & (v23 ^ (v2[16] << v2[20])); v26 = v2[15]; v2[16] = v25; *(_WORD *)(v22 + 2 * v24) = *(_WORD *)(v26 + 2 * v25); v50 = *(unsigned __int16 *)(v2[14] + 2 * (v2[11] & v2[25])); *(_WORD *)(v2[15] + 2 * v2[16]) = *((_WORD *)v2 + 50); } v35 = v2[28]-- == 1; } while ( !v35 ); v27 = ++v2[25]; v2[24] = 0; v2[22] = 2; if ( v51 ) { v28 = v2[21]; if ( v28 < 0 ) v29 = 0; else v29 = (char *)(v28 + v2[12]); sub_7597A0((int)v2, v29, v27 - v28, 0); v30 = *v2; v2[21] = v2[25]; v31 = *(_DWORD *)(v30 + 28); v32 = *(_DWORD *)(v31 + 20); if ( v32 > *(_DWORD *)(v30 + 16) ) v32 = *(_DWORD *)(v30 + 16); if ( v32 ) { memcpy(*(void **)(v30 + 12), *(const void **)(v31 + 16), v32); v33 = *(_DWORD *)(v30 + 28); *(_DWORD *)(v30 + 12) += v32; *(_DWORD *)(v33 + 16) += v32; *(_DWORD *)(v30 + 20) += v32; *(_DWORD *)(v30 + 16) -= v32; *(_DWORD *)(*(_DWORD *)(v30 + 28) + 20) -= v32; v34 = *(_DWORD **)(v30 + 28); if ( !v34[5] ) v34[4] = v34[2]; } v35 = *(_DWORD *)(*v2 + 16) == 0; LABEL_41: if ( v35 ) return 0; } } } if ( v2[24] ) { v46 = *(_BYTE *)(v2[25] + v2[12] - 1); *(_WORD *)(v2[1447] + 2 * v2[1446]) = 0; *(_BYTE *)(v2[1444] + v2[1446]++) = v46; ++LOWORD(v2[v46 + 35]); v2[24] = 0; } v47 = v2[21]; if ( v47 < 0 ) v48 = 0; else v48 = (char *)(v47 + v2[12]); sub_7597A0((int)v2, v48, v2[25] - v47, a2 == 4); v2[21] = v2[25]; sub_755170(*v2); v49 = 0; if ( !*(_DWORD *)(*v2 + 16) ) return a2 != 4 ? 0 : 2; LOBYTE(v49) = a2 == 4; return 2 * v49 + 1; } //----- (00756450) -------------------------------------------------------- signed int __cdecl sub_756450(_DWORD *a1) { _DWORD *v1; // esi int v2; // eax int v3; // eax int v4; // eax if ( !a1 ) return -2; v1 = (_DWORD *)a1[7]; if ( !v1 || !a1[8] || !a1[9] ) return -2; a1[5] = 0; a1[2] = 0; a1[6] = 0; a1[11] = 2; v1[4] = v1[2]; v2 = v1[6]; v1[5] = 0; if ( v2 < 0 ) v1[6] = -v2; v3 = v1[6]; v1[1] = v1[6] != 0 ? 42 : 113; if ( v3 == 2 ) v4 = sub_759C50(0, 0, 0); else v4 = sub_757D40(0, 0, 0); a1[12] = v4; v1[8] = 0; sub_759120((int)v1); sub_755690((int)v1); return 0; } //----- (007564F0) -------------------------------------------------------- signed int __cdecl sub_7564F0(_DWORD *a1, unsigned int a2, int a3, signed int a4, int a5, unsigned int a6, _BYTE *a7, int a8) { int v9; // ebx int v10; // eax int v11; // esi signed int v12; // eax int v13; // eax int v14; // edx int v15; // eax int v16; // edx int v17; // eax unsigned int v18; // ecx bool v19; // zf signed int v20; // [esp+0h] [ebp-4h] v20 = 1; if ( !a7 || *a7 != 49 || a8 != 56 ) return -6; if ( !a1 ) return -2; a1[6] = 0; if ( !a1[8] ) { a1[8] = sub_759C70; a1[10] = 0; } if ( !a1[9] ) a1[9] = sub_759C90; if ( a2 == -1 ) a2 = 6; v9 = a4; if ( a4 < 0 ) { v20 = 0; v9 = -a4; LABEL_16: a4 = v9; goto LABEL_17; } if ( a4 > 15 ) { v20 = 2; v9 = a4 - 16; goto LABEL_16; } LABEL_17: if ( (unsigned int)(a5 - 1) > 8 || a3 != 8 || (unsigned int)(v9 - 8) > 7 || a2 > 9 || a6 > 3 ) return -2; if ( v9 == 8 ) { a4 = 9; v9 = 9; } v10 = ((int (__stdcall *)(_DWORD))a1[8])(a1[10]); v11 = v10; if ( v10 ) { a1[7] = v10; *(_DWORD *)(v10 + 24) = v20; *(_DWORD *)(v10 + 40) = v9; v12 = 1 << (a5 + 7); *(_DWORD *)(v11 + 72) = a5 + 7; *(_DWORD *)(v11 + 44) = (1 << a4) - 1; *(_DWORD *)(v11 + 68) = v12; *(_DWORD *)(v11 + 76) = v12 - 1; *(_DWORD *)v11 = a1; *(_DWORD *)(v11 + 36) = 1 << a4; *(_DWORD *)(v11 + 80) = (a5 + 9) / 3u; v13 = ((int (__cdecl *)(_DWORD, signed int, signed int))a1[8])(a1[10], 1 << a4, 2); v14 = *(_DWORD *)(v11 + 36); *(_DWORD *)(v11 + 48) = v13; v15 = ((int (__cdecl *)(_DWORD, int, signed int))a1[8])(a1[10], v14, 2); v16 = *(_DWORD *)(v11 + 68); *(_DWORD *)(v11 + 56) = v15; *(_DWORD *)(v11 + 60) = ((int (__cdecl *)(_DWORD, int, signed int))a1[8])(a1[10], v16, 2); *(_DWORD *)(v11 + 5780) = 1 << (a5 + 6); v17 = ((int (__cdecl *)(_DWORD, signed int, signed int))a1[8])(a1[10], 1 << (a5 + 6), 4); v18 = *(_DWORD *)(v11 + 5780); v19 = *(_DWORD *)(v11 + 48) == 0; *(_DWORD *)(v11 + 8) = v17; *(_DWORD *)(v11 + 12) = 4 * v18; if ( !v19 && *(_DWORD *)(v11 + 56) && *(_DWORD *)(v11 + 60) && v17 ) { *(_DWORD *)(v11 + 5788) = v17 + 2 * (v18 >> 1); *(_DWORD *)(v11 + 5776) = v18 + v17 + 2 * v18; *(_DWORD *)(v11 + 124) = a2; *(_DWORD *)(v11 + 128) = a6; *(_BYTE *)(v11 + 28) = 8; return sub_756450(a1); } *(_DWORD *)(v11 + 4) = 666; a1[6] = "insufficient memory"; sub_7555C0((int)a1); } return -4; } // 7564F0: could not find valid save-restore pair for esi //----- (00756720) -------------------------------------------------------- signed int __cdecl sub_756720(_DWORD *a1, unsigned int a2, _BYTE *a3, int a4) { return sub_7564F0(a1, a2, 8, 15, 8, 0, a3, a4); } //----- (00756750) -------------------------------------------------------- signed int __cdecl sub_756750(_DWORD *a1) { _DWORD *v1; // eax if ( !a1 ) return -2; v1 = (_DWORD *)a1[7]; if ( !v1 ) return -2; v1[6] = 0; a1[5] = 0; a1[2] = 0; a1[6] = 0; a1[12] = 1; *v1 = 0; v1[1] = 0; v1[3] = 0; v1[8] = 0; v1[9] = 0; v1[12] = 0; v1[13] = 0; v1[25] = v1 + 330; v1[18] = v1 + 330; v1[17] = v1 + 330; return 0; } //----- (007567B0) -------------------------------------------------------- signed int __cdecl sub_7567B0(_DWORD *a1, signed int a2, _BYTE *a3, int a4) { _DWORD *v4; // eax int v6; // ecx if ( !a3 || *a3 != 49 || a4 != 56 ) return -6; if ( a1 ) { a1[6] = 0; if ( !a1[8] ) { a1[8] = sub_759C70; a1[10] = 0; } if ( !a1[9] ) a1[9] = sub_759C90; v4 = (_DWORD *)((int (__cdecl *)(_DWORD, signed int, signed int))a1[8])(a1[10], 1, 7080); if ( !v4 ) return -4; v6 = a2; a1[7] = v4; if ( a2 >= 0 ) { v4[2] = (a2 >> 4) + 1; if ( a2 < 48 ) v6 = a2 & 0xF; } else { v4[2] = 0; v6 = -a2; } if ( (unsigned int)(v6 - 8) <= 7 ) { v4[7] = v6; v4[11] = 0; return sub_756750(a1); } ((void (__cdecl *)(_DWORD, _DWORD *))a1[9])(a1[10], v4); a1[7] = 0; } return -2; } //----- (00756880) -------------------------------------------------------- signed int __cdecl sub_756880(_DWORD *a1, _BYTE *a2, int a3) { return sub_7567B0(a1, 15, a2, a3); } //----- (007568A0) -------------------------------------------------------- signed int __usercall sub_7568A0@(int a1@, int a2@) { int v2; // esi int v3; // edi int v4; // eax signed int result; // eax int v6; // ecx unsigned int v7; // edi unsigned int v8; // eax size_t v9; // eax size_t v10; // edi int v11; // edx unsigned int v12; // eax unsigned int v13; // edx size_t v14; // [esp+8h] [ebp-4h] v2 = *(_DWORD *)(a2 + 28); v3 = a1; if ( !*(_DWORD *)(v2 + 44) ) { v4 = (*(int (__cdecl **)(_DWORD, signed int, signed int))(a2 + 32))( *(_DWORD *)(a2 + 40), 1 << *(_DWORD *)(v2 + 28), 1); *(_DWORD *)(v2 + 44) = v4; if ( !v4 ) return 1; } if ( !*(_DWORD *)(v2 + 32) ) { v6 = *(_DWORD *)(v2 + 28); *(_DWORD *)(v2 + 40) = 0; *(_DWORD *)(v2 + 36) = 0; *(_DWORD *)(v2 + 32) = 1 << v6; } v7 = v3 - *(_DWORD *)(a2 + 16); v8 = *(_DWORD *)(v2 + 32); if ( v7 < v8 ) { v9 = v8 - *(_DWORD *)(v2 + 40); v14 = v9; if ( v9 > v7 ) { v14 = v7; v9 = v7; } memcpy((void *)(*(_DWORD *)(v2 + 40) + *(_DWORD *)(v2 + 44)), (const void *)(*(_DWORD *)(a2 + 12) - v7), v9); v10 = v7 - v14; if ( v10 ) { memcpy(*(void **)(v2 + 44), (const void *)(*(_DWORD *)(a2 + 12) - v10), v10); v11 = *(_DWORD *)(v2 + 32); *(_DWORD *)(v2 + 40) = v10; *(_DWORD *)(v2 + 36) = v11; result = 0; } else { v12 = *(_DWORD *)(v2 + 32); *(_DWORD *)(v2 + 40) += v14; if ( *(_DWORD *)(v2 + 40) == v12 ) *(_DWORD *)(v2 + 40) = 0; v13 = *(_DWORD *)(v2 + 36); if ( v13 < v12 ) *(_DWORD *)(v2 + 36) = v14 + v13; result = 0; } } else { memcpy(*(void **)(v2 + 44), (const void *)(*(_DWORD *)(a2 + 12) - v8), *(_DWORD *)(v2 + 32)); *(_DWORD *)(v2 + 36) = *(_DWORD *)(v2 + 32); *(_DWORD *)(v2 + 40) = 0; result = 0; } return result; } //----- (007569A0) -------------------------------------------------------- signed int __cdecl sub_7569A0(int a1, int a2) { _DWORD *v2; // edx int v3; // edi _BYTE *v4; // eax size_t v5; // ecx unsigned int v6; // ebx unsigned int v7; // ecx unsigned __int8 *v8; // eax unsigned int v9; // esi signed int result; // eax int v11; // edx int v12; // edx int v13; // eax int v14; // eax int v15; // edx int v16; // edx int v17; // edx int v18; // edx int v19; // edx int v20; // edx int v21; // edx int v22; // edx bool v23; // zf unsigned int v24; // ecx int v25; // eax unsigned int v26; // ecx int v27; // edx int v28; // eax unsigned int v29; // ecx int v30; // edx int v31; // eax int v32; // edx int v33; // edx int v34; // eax int v35; // edx int v36; // edx int v37; // ecx int v38; // eax int v39; // ecx int v40; // edx int v41; // edx int v42; // ecx unsigned int v43; // ebx int v44; // ecx int v45; // edx int v46; // edx int v47; // ecx size_t v48; // ecx int v49; // edx int v50; // edx int v51; // ecx unsigned int v52; // ebx char v53; // dl unsigned int v54; // edx int v55; // ecx bool v56; // cf int v57; // edx int v58; // edx signed int v59; // eax size_t v60; // ecx unsigned int v61; // edx int v62; // edx int v63; // edx signed int v64; // edx int v65; // ecx int v66; // edx int v67; // edx int v68; // ecx int v69; // ecx int v70; // edx int v71; // edx int v72; // ecx int v73; // ecx int v74; // edx int v75; // edx unsigned int v76; // ebx signed int v77; // edx int v78; // edx int v79; // edx unsigned int v80; // ebx int v81; // edx int v82; // edx unsigned int v83; // edx int v84; // ecx size_t v85; // edx size_t v86; // ecx unsigned __int8 *v87; // edx size_t v88; // edx unsigned int v89; // ecx int v90; // edx int v91; // edx signed int v92; // edx int v93; // ecx int v94; // edx unsigned int v95; // ecx int v96; // edx int v97; // edx int v98; // ecx size_t v99; // edx unsigned int v100; // ecx int v101; // edx int v102; // edx signed int v103; // edx int v104; // ecx int v105; // edx unsigned int v106; // ecx int v107; // edx int v108; // edx int v109; // ecx unsigned int v110; // ecx size_t v111; // ecx unsigned int v112; // edx unsigned int v113; // ecx int v114; // edx int v115; // edx int v116; // edx int v117; // edx int v118; // ecx int v119; // edx int v120; // edx unsigned int v121; // ecx int v122; // eax int v123; // ecx int v124; // edx int v125; // edx size_t v126; // eax size_t v127; // ecx size_t v128; // edx size_t v129; // eax int v130; // esi int v131; // eax unsigned int v132; // ebx int v133; // eax unsigned int v134; // [esp-14h] [ebp-48h] unsigned __int8 *v135; // [esp-10h] [ebp-44h] size_t v136; // [esp+4h] [ebp-30h] int v137; // [esp+4h] [ebp-30h] int v138; // [esp+8h] [ebp-2Ch] int i; // [esp+8h] [ebp-2Ch] signed int v140; // [esp+Ch] [ebp-28h] int v141; // [esp+10h] [ebp-24h] size_t v142; // [esp+10h] [ebp-24h] size_t v143; // [esp+10h] [ebp-24h] unsigned int v144; // [esp+10h] [ebp-24h] int v145; // [esp+14h] [ebp-20h] int v146; // [esp+14h] [ebp-20h] __int16 v147; // [esp+14h] [ebp-20h] int v148; // [esp+18h] [ebp-1Ch] _BYTE *v149; // [esp+1Ch] [ebp-18h] __int16 v150; // [esp+20h] [ebp-14h] char v151; // [esp+22h] [ebp-12h] char v152; // [esp+23h] [ebp-11h] size_t v153; // [esp+24h] [ebp-10h] size_t v154; // [esp+28h] [ebp-Ch] void *v155; // [esp+2Ch] [ebp-8h] size_t v156; // [esp+30h] [ebp-4h] v2 = (_DWORD *)a1; if ( !a1 ) return -2; v3 = *(_DWORD *)(a1 + 28); if ( !v3 || !*(_DWORD *)(a1 + 12) || !*(_DWORD *)a1 && *(_DWORD *)(a1 + 4) ) return -2; if ( *(_DWORD *)v3 == 11 ) *(_DWORD *)v3 = 12; v4 = *(_BYTE **)(a1 + 12); v153 = *(_DWORD *)(a1 + 16); v5 = *(_DWORD *)(a1 + 4); v156 = v5; v136 = v5; v6 = *(_DWORD *)(v3 + 48); v148 = v153; v7 = *(_DWORD *)v3; v149 = v4; v8 = *(unsigned __int8 **)a1; v9 = *(_DWORD *)(v3 + 52); v155 = *(void **)a1; v140 = 0; if ( v7 > 0x1C ) return -2; while ( 2 ) { switch ( v7 ) { case 0u: if ( *(_DWORD *)(v3 + 8) ) { if ( v9 < 0x10 ) { while ( v156 ) { v11 = *v8; --v156; v12 = v11 << v9; ++v8; v9 += 8; v155 = v8; v6 += v12; if ( v9 >= 0x10 ) goto LABEL_18; } goto LABEL_271; } LABEL_18: v13 = *(_DWORD *)(v3 + 8); if ( v13 & 2 && v6 == 35615 ) { *(_DWORD *)(v3 + 20) = sub_759C50(0, 0, 0); v150 = -29921; *(_DWORD *)(v3 + 20) = sub_759C50(*(_DWORD *)(v3 + 20), &v150, 2u); v8 = (unsigned __int8 *)v155; v6 = 0; v9 = 0; *(_DWORD *)v3 = 1; } else { *(_DWORD *)(v3 + 16) = 0; if ( !(v13 & 1) || ((v6 >> 8) + ((unsigned __int8)v6 << 8)) % 0x1F ) { v8 = (unsigned __int8 *)v155; *(_DWORD *)(a1 + 24) = "incorrect header check"; goto LABEL_263; } if ( (v6 & 0xF) != 8 ) { *(_DWORD *)(a1 + 24) = "unknown compression method"; v8 = (unsigned __int8 *)v155; goto LABEL_263; } v6 >>= 4; v9 -= 4; if ( (v6 & 0xF) + 8 > *(_DWORD *)(v3 + 28) ) { v8 = (unsigned __int8 *)v155; *(_DWORD *)(a1 + 24) = "invalid window size"; goto LABEL_263; } v14 = sub_757D40(0, 0, 0); *(_DWORD *)(v3 + 20) = v14; *(_DWORD *)(a1 + 48) = v14; v8 = (unsigned __int8 *)v155; *(_DWORD *)v3 = ~BYTE1(v6) & 2 | 9; v6 = 0; v9 = 0; } } else { *(_DWORD *)v3 = 12; } goto LABEL_264; case 1u: if ( v9 >= 0x10 ) goto LABEL_32; do { if ( !v156 ) goto LABEL_271; v15 = *v8; --v156; v16 = v15 << v9; ++v8; v9 += 8; v155 = v8; v6 += v16; } while ( v9 < 0x10 ); LABEL_32: *(_DWORD *)(v3 + 16) = v6; if ( (_BYTE)v6 != 8 ) { *(_DWORD *)(a1 + 24) = "unknown compression method"; goto LABEL_263; } if ( v6 & 0xE000 ) { *(_DWORD *)(a1 + 24) = "unknown header flags set"; goto LABEL_263; } if ( v6 & 0x200 ) { v150 = v6; *(_DWORD *)(v3 + 20) = sub_759C50(*(_DWORD *)(v3 + 20), &v150, 2u); v8 = (unsigned __int8 *)v155; } v6 = 0; v9 = 0; *(_DWORD *)v3 = 2; do { LABEL_40: if ( !v156 ) goto LABEL_271; v17 = *v8; --v156; v18 = v17 << v9; ++v8; v9 += 8; v155 = v8; v6 += v18; } while ( v9 < 0x20 ); LABEL_42: if ( *(_DWORD *)(v3 + 16) & 0x200 ) { v150 = v6; v151 = BYTE2(v6); v152 = HIBYTE(v6); *(_DWORD *)(v3 + 20) = sub_759C50(*(_DWORD *)(v3 + 20), &v150, 4u); v8 = (unsigned __int8 *)v155; } v6 = 0; v9 = 0; *(_DWORD *)v3 = 3; do { LABEL_46: if ( !v156 ) goto LABEL_271; v19 = *v8; --v156; v20 = v19 << v9; ++v8; v9 += 8; v155 = v8; v6 += v20; } while ( v9 < 0x10 ); LABEL_48: if ( *(_DWORD *)(v3 + 16) & 0x200 ) { v150 = v6; *(_DWORD *)(v3 + 20) = sub_759C50(*(_DWORD *)(v3 + 20), &v150, 2u); v8 = (unsigned __int8 *)v155; } v6 = 0; v9 = 0; *(_DWORD *)v3 = 4; LABEL_51: if ( !(*(_DWORD *)(v3 + 16) & 0x400) ) goto LABEL_58; if ( v9 < 0x10 ) { while ( v156 ) { v21 = *v8; --v156; v22 = v21 << v9; ++v8; v9 += 8; v155 = v8; v6 += v22; if ( v9 >= 0x10 ) goto LABEL_55; } goto LABEL_271; } LABEL_55: v23 = (*(_DWORD *)(v3 + 16) & 0x200) == 0; *(_DWORD *)(v3 + 56) = v6; if ( !v23 ) { v150 = v6; *(_DWORD *)(v3 + 20) = sub_759C50(*(_DWORD *)(v3 + 20), &v150, 2u); v8 = (unsigned __int8 *)v155; } v6 = 0; v9 = 0; LABEL_58: *(_DWORD *)v3 = 5; LABEL_59: if ( *(_DWORD *)(v3 + 16) & 0x400 ) { v24 = *(_DWORD *)(v3 + 56); v154 = v24; if ( v24 > v156 ) { v24 = v156; v154 = v156; } if ( v24 ) { if ( *(_DWORD *)(v3 + 16) & 0x200 ) { v25 = sub_759C50(*(_DWORD *)(v3 + 20), v155, v154); v24 = v154; *(_DWORD *)(v3 + 20) = v25; v8 = (unsigned __int8 *)v155; } v156 -= v24; v8 += v24; *(_DWORD *)(v3 + 56) -= v24; v155 = v8; } if ( *(_DWORD *)(v3 + 56) ) goto LABEL_271; } *(_DWORD *)v3 = 6; LABEL_68: if ( *(_DWORD *)(v3 + 16) & 0x800 ) { if ( !v156 ) goto LABEL_271; v26 = 0; do { v27 = v8[v26++]; v145 = v27; } while ( v27 && v26 < v156 ); v23 = (*(_DWORD *)(v3 + 16) & 0x2000) == 0; v154 = v26; if ( !v23 ) { v28 = sub_759C50(*(_DWORD *)(v3 + 20), v155, v26); v26 = v154; *(_DWORD *)(v3 + 20) = v28; v8 = (unsigned __int8 *)v155; } v156 -= v26; v8 += v26; v155 = v8; if ( v145 ) goto LABEL_271; } *(_DWORD *)v3 = 7; LABEL_77: if ( *(_DWORD *)(v3 + 16) & 0x1000 ) { if ( !v156 ) goto LABEL_271; v29 = 0; do { v30 = v8[v29++]; v146 = v30; } while ( v30 && v29 < v156 ); v23 = (*(_DWORD *)(v3 + 16) & 0x2000) == 0; v154 = v29; if ( !v23 ) { v31 = sub_759C50(*(_DWORD *)(v3 + 20), v155, v29); v29 = v154; *(_DWORD *)(v3 + 20) = v31; v8 = (unsigned __int8 *)v155; } v156 -= v29; v8 += v29; v155 = v8; if ( v146 ) goto LABEL_271; } *(_DWORD *)v3 = 8; LABEL_86: if ( *(_DWORD *)(v3 + 16) & 0x200 ) { if ( v9 < 0x10 ) { while ( v156 ) { v32 = *v8; --v156; v33 = v32 << v9; ++v8; v9 += 8; v155 = v8; v6 += v33; if ( v9 >= 0x10 ) goto LABEL_90; } goto LABEL_271; } LABEL_90: if ( v6 != *(unsigned __int16 *)(v3 + 20) ) { *(_DWORD *)(a1 + 24) = "header crc mismatch"; goto LABEL_263; } v6 = 0; v9 = 0; } v34 = sub_759C50(0, 0, 0); *(_DWORD *)(v3 + 20) = v34; *(_DWORD *)(a1 + 48) = v34; v8 = (unsigned __int8 *)v155; *(_DWORD *)v3 = 11; goto LABEL_264; case 2u: if ( v9 < 0x20 ) goto LABEL_40; goto LABEL_42; case 3u: if ( v9 < 0x10 ) goto LABEL_46; goto LABEL_48; case 4u: goto LABEL_51; case 5u: goto LABEL_59; case 6u: goto LABEL_68; case 7u: goto LABEL_77; case 8u: goto LABEL_86; case 9u: if ( v9 >= 0x20 ) goto LABEL_97; do { if ( !v156 ) goto LABEL_271; v35 = *v8; --v156; v36 = v35 << v9; ++v8; v9 += 8; v155 = v8; v6 += v36; } while ( v9 < 0x20 ); LABEL_97: v2 = (_DWORD *)a1; v37 = (v6 >> 24) + ((v6 >> 8) & 0xFF00) + (((v6 << 16) + (v6 & 0xFF00)) << 8); *(_DWORD *)(v3 + 20) = v37; *(_DWORD *)(a1 + 48) = v37; v6 = 0; v9 = 0; *(_DWORD *)v3 = 10; LABEL_98: if ( !*(_DWORD *)(v3 + 12) ) { *v2 = v8; v126 = v156; v2[3] = v149; v127 = v153; v2[1] = v126; v2[4] = v127; *(_DWORD *)(v3 + 52) = v9; *(_DWORD *)(v3 + 48) = v6; return 2; } v38 = sub_757D40(0, 0, 0); *(_DWORD *)(v3 + 20) = v38; *(_DWORD *)(a1 + 48) = v38; v8 = (unsigned __int8 *)v155; *(_DWORD *)v3 = 11; LABEL_100: if ( a2 == 5 ) goto LABEL_271; LABEL_101: if ( *(_DWORD *)(v3 + 4) ) { v39 = v9 & 7; v6 >>= v39; v9 -= v39; *(_DWORD *)v3 = 24; } else { if ( v9 < 3 ) { while ( v156 ) { v40 = *v8; --v156; v41 = v40 << v9; ++v8; v9 += 8; v155 = v8; v6 += v41; if ( v9 >= 3 ) goto LABEL_106; } goto LABEL_271; } LABEL_106: v42 = v6 & 1; v43 = v6 >> 1; *(_DWORD *)(v3 + 4) = v42; switch ( v43 & 3 ) { case 0u: v6 = v43 >> 2; *(_DWORD *)v3 = 13; v9 -= 3; break; case 1u: v6 = v43 >> 2; *(_DWORD *)(v3 + 68) = "`\a"; *(_DWORD *)(v3 + 76) = 9; *(_DWORD *)(v3 + 72) = &unk_A09AA0; *(_DWORD *)(v3 + 80) = 5; *(_DWORD *)v3 = 18; v9 -= 3; break; case 2u: v6 = v43 >> 2; *(_DWORD *)v3 = 15; v9 -= 3; break; case 3u: *(_DWORD *)(a1 + 24) = "invalid block type"; *(_DWORD *)v3 = 27; goto LABEL_111; default: LABEL_111: v6 = v43 >> 2; v9 -= 3; break; } } goto LABEL_264; case 0xAu: goto LABEL_98; case 0xBu: goto LABEL_100; case 0xCu: goto LABEL_101; case 0xDu: v44 = v9 & 7; v9 -= v44; v6 >>= v44; if ( v9 >= 0x20 ) goto LABEL_115; do { if ( !v156 ) goto LABEL_271; v45 = *v8; --v156; v46 = v45 << v9; ++v8; v9 += 8; v155 = v8; v6 += v46; } while ( v9 < 0x20 ); LABEL_115: v47 = (unsigned __int16)v6; if ( (unsigned __int16)v6 != ~v6 >> 16 ) { *(_DWORD *)(a1 + 24) = "invalid stored block lengths"; goto LABEL_263; } v6 = 0; *(_DWORD *)(v3 + 56) = v47; v9 = 0; *(_DWORD *)v3 = 14; LABEL_118: v48 = *(_DWORD *)(v3 + 56); v154 = v48; if ( !v48 ) goto LABEL_194; if ( v48 > v156 ) { v48 = v156; v154 = v156; } if ( v48 > v153 ) { v48 = v153; v154 = v153; } if ( !v48 ) goto LABEL_271; memcpy(v149, v155, v154); v156 -= v154; v155 = (char *)v155 + v154; v153 -= v154; v149 += v154; *(_DWORD *)(v3 + 56) -= v154; v8 = (unsigned __int8 *)v155; goto LABEL_264; case 0xEu: goto LABEL_118; case 0xFu: if ( v9 >= 0xE ) goto LABEL_128; do { if ( !v156 ) goto LABEL_271; v49 = *v8; --v156; v50 = v49 << v9; ++v8; v9 += 8; v155 = v8; v6 += v50; } while ( v9 < 0xE ); LABEL_128: v51 = v6 & 0x1F; v52 = v6 >> 5; v53 = v52; *(_DWORD *)(v3 + 88) = v51 + 257; v52 >>= 5; v54 = (v53 & 0x1F) + 1; v55 = (v52 & 0xF) + 4; v6 = v52 >> 4; v9 -= 14; v56 = *(_DWORD *)(v3 + 88) < 0x11Eu; v23 = *(_DWORD *)(v3 + 88) == 286; *(_DWORD *)(v3 + 92) = v54; *(_DWORD *)(v3 + 84) = v55; if ( !v56 && !v23 || v54 > 0x1E ) { *(_DWORD *)(a1 + 24) = "too many length or distance symbols"; goto LABEL_263; } *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)v3 = 16; LABEL_131: if ( *(_DWORD *)(v3 + 96) < *(_DWORD *)(v3 + 84) ) { while ( v9 >= 3 ) { LABEL_135: *(_WORD *)(v3 + 2 * (unsigned __int16)word_A09B20[(*(_DWORD *)(v3 + 96))++] + 104) = v6 & 7; v6 >>= 3; v9 -= 3; if ( *(_DWORD *)(v3 + 96) >= *(_DWORD *)(v3 + 84) ) goto LABEL_136; } while ( v156 ) { v57 = *v8; --v156; v58 = v57 << v9; ++v8; v9 += 8; v155 = v8; v6 += v58; if ( v9 >= 3 ) goto LABEL_135; } goto LABEL_271; } LABEL_136: while ( *(_DWORD *)(v3 + 96) < 0x13u ) *(_WORD *)(v3 + 2 * (unsigned __int16)word_A09B20[(*(_DWORD *)(v3 + 96))++] + 104) = 0; *(_DWORD *)(v3 + 100) = v3 + 1320; *(_DWORD *)(v3 + 68) = v3 + 1320; *(_DWORD *)(v3 + 76) = 7; v59 = sub_75A0C0(0, v3 + 104, 0x13u, (_DWORD **)(v3 + 100), (unsigned int *)(v3 + 76), (char *)(v3 + 744)); v140 = v59; v23 = v59 == 0; v8 = (unsigned __int8 *)v155; if ( !v23 ) { *(_DWORD *)(a1 + 24) = "invalid code lengths set"; goto LABEL_263; } *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)v3 = 17; LABEL_142: if ( *(_DWORD *)(v3 + 96) < (unsigned int)(*(_DWORD *)(v3 + 88) + *(_DWORD *)(v3 + 92)) ) { while ( 1 ) { v60 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))); v61 = (unsigned __int8)(*(_WORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))) >> 8); v154 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))); if ( v61 > v9 ) break; LABEL_146: if ( v60 >> 16 >= 0x10 ) { v69 = BYTE1(v60); v141 = v69; if ( HIWORD(v154) == 16 ) { if ( v9 < v69 + 2 ) { while ( v156 ) { v70 = *v8; --v156; v71 = v70 << v9; v69 = v141; ++v8; v9 += 8; v6 += v71; v155 = v8; if ( v9 >= v141 + 2 ) goto LABEL_155; } goto LABEL_271; } LABEL_155: v6 >>= v69; v9 -= v69; v72 = *(_DWORD *)(v3 + 96); if ( !v72 ) { *(_DWORD *)(a1 + 24) = "invalid bit length repeat"; goto LABEL_263; } v147 = *(_WORD *)(v3 + 2 * v72 + 102); v73 = (v6 & 3) + 3; v6 >>= 2; v154 = v73; v9 -= 2; } else { if ( HIWORD(v154) == 17 ) { if ( v9 < v69 + 3 ) { while ( v156 ) { v74 = *v8; --v156; v75 = v74 << v9; v69 = v141; ++v8; v9 += 8; v6 += v75; v155 = v8; if ( v9 >= v141 + 3 ) goto LABEL_161; } goto LABEL_271; } LABEL_161: v76 = v6 >> v69; v154 = (v76 & 7) + 3; v6 = v76 >> 3; v77 = -3; } else { if ( v9 < v69 + 7 ) { while ( v156 ) { v78 = *v8; --v156; v79 = v78 << v9; v69 = v141; ++v8; v9 += 8; v6 += v79; v155 = v8; if ( v9 >= v141 + 7 ) goto LABEL_165; } goto LABEL_271; } LABEL_165: v80 = v6 >> v69; v154 = (v80 & 0x7F) + 11; v6 = v80 >> 7; v77 = -7; } v81 = v77 - v69; v73 = v154; v9 += v81; v147 = 0; } if ( v73 + *(_DWORD *)(v3 + 96) > (unsigned int)(*(_DWORD *)(v3 + 88) + *(_DWORD *)(v3 + 92)) ) { *(_DWORD *)(a1 + 24) = "invalid bit length repeat"; goto LABEL_263; } for ( ; v154; ++*(_DWORD *)(v3 + 96) ) { v82 = *(_DWORD *)(v3 + 96); --v154; *(_WORD *)(v3 + 2 * v82 + 104) = v147; } } else { if ( v9 < BYTE1(v60) ) { while ( v156 ) { v66 = *v8; --v156; v67 = v66 << v9; BYTE1(v60) = BYTE1(v154); ++v8; v9 += 8; v6 += v67; v155 = v8; if ( v9 >= BYTE1(v154) ) goto LABEL_150; } goto LABEL_271; } LABEL_150: v68 = BYTE1(v60); v6 >>= v68; v9 -= v68; *(_WORD *)(v3 + 2 * (*(_DWORD *)(v3 + 96))++ + 104) = HIWORD(v154); } if ( *(_DWORD *)(v3 + 96) >= (unsigned int)(*(_DWORD *)(v3 + 88) + *(_DWORD *)(v3 + 92)) ) goto LABEL_171; } while ( v156 ) { v62 = *v8; --v156; v63 = v62 << v9; ++v8; v9 += 8; v6 += v63; v64 = 1 << *(_DWORD *)(v3 + 76); v65 = *(_DWORD *)(v3 + 68); v155 = v8; v60 = *(_DWORD *)(v65 + 4 * (v6 & (v64 - 1))); v154 = v60; if ( BYTE1(v60) <= v9 ) goto LABEL_146; } goto LABEL_271; } LABEL_171: if ( *(_DWORD *)v3 == 27 ) goto LABEL_264; *(_DWORD *)(v3 + 100) = v3 + 1320; *(_DWORD *)(v3 + 68) = v3 + 1320; v83 = *(_DWORD *)(v3 + 88); *(_DWORD *)(v3 + 76) = 9; v140 = sub_75A0C0(1, v3 + 104, v83, (_DWORD **)(v3 + 100), (unsigned int *)(v3 + 76), (char *)(v3 + 744)); if ( v140 ) { v8 = (unsigned __int8 *)v155; *(_DWORD *)(a1 + 24) = "invalid literal/lengths set"; goto LABEL_263; } *(_DWORD *)(v3 + 72) = *(_DWORD *)(v3 + 100); v84 = *(_DWORD *)(v3 + 88); *(_DWORD *)(v3 + 80) = 6; v140 = sub_75A0C0( 2, v3 + 2 * v84 + 104, *(_DWORD *)(v3 + 92), (_DWORD **)(v3 + 100), (unsigned int *)(v3 + 80), (char *)(v3 + 744)); if ( v140 ) { *(_DWORD *)(a1 + 24) = "invalid distances set"; v8 = (unsigned __int8 *)v155; goto LABEL_263; } v8 = (unsigned __int8 *)v155; *(_DWORD *)v3 = 18; LABEL_179: if ( v156 >= 6 && v153 >= 0x102 ) { v85 = v153; *(_DWORD *)(a1 + 12) = v149; *(_DWORD *)a1 = v155; *(_DWORD *)(a1 + 16) = v85; *(_DWORD *)(a1 + 4) = v156; *(_DWORD *)(v3 + 48) = v6; *(_DWORD *)(v3 + 52) = v9; sub_759CB0((_DWORD *)a1, v148); v86 = *(_DWORD *)(a1 + 16); v6 = *(_DWORD *)(v3 + 48); v9 = *(_DWORD *)(v3 + 52); v149 = *(_BYTE **)(a1 + 12); v87 = *(unsigned __int8 **)a1; v156 = *(_DWORD *)(a1 + 4); v153 = v86; v155 = v87; v8 = v87; goto LABEL_264; } v88 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))); v89 = (unsigned __int8)(*(_WORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))) >> 8); v154 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 76)) - 1))); if ( v89 > v9 ) { while ( v156 ) { v90 = *v8; --v156; v91 = v90 << v9; ++v8; v9 += 8; v6 += v91; v92 = 1 << *(_DWORD *)(v3 + 76); v93 = *(_DWORD *)(v3 + 68); v155 = v8; v88 = *(_DWORD *)(v93 + 4 * (v6 & (v92 - 1))); v154 = v88; if ( BYTE1(v88) <= v9 ) goto LABEL_185; } goto LABEL_271; } LABEL_185: if ( (_BYTE)v88 && !(v88 & 0xF0) ) { v142 = v88; v154 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * ((v154 >> 16) + ((v6 & ((1 << (BYTE1(v88) + v88)) - 1)) >> SBYTE1(v88)))); if ( BYTE1(v88) + (unsigned int)BYTE1(v154) > v9 ) { while ( v156 ) { v94 = *v8 << v9; --v156; ++v8; v6 += v94; v9 += 8; v155 = v8; v154 = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 4 * (HIWORD(v142) + ((v6 & ((1 << (BYTE1(v142) + v142)) - 1)) >> SBYTE1(v142)))); if ( BYTE1(v142) + (unsigned int)BYTE1(v154) <= v9 ) goto LABEL_190; } goto LABEL_271; } LABEL_190: v88 = v154; v6 >>= SBYTE1(v142); v9 -= BYTE1(v142); } v6 >>= SBYTE1(v88); v9 -= BYTE1(v88); *(_DWORD *)(v3 + 56) = v88 >> 16; if ( !(_BYTE)v88 ) { *(_DWORD *)v3 = 23; goto LABEL_264; } if ( v88 & 0x20 ) { LABEL_194: *(_DWORD *)v3 = 11; goto LABEL_264; } if ( v88 & 0x40 ) { *(_DWORD *)(a1 + 24) = "invalid literal/length code"; goto LABEL_263; } *(_DWORD *)(v3 + 64) = v88 & 0xF; *(_DWORD *)v3 = 19; LABEL_198: v95 = *(_DWORD *)(v3 + 64); if ( v95 ) { if ( v9 < v95 ) { while ( v156 ) { v96 = *v8; --v156; v97 = v96 << v9; ++v8; v9 += 8; v155 = v8; v6 += v97; if ( v9 >= *(_DWORD *)(v3 + 64) ) goto LABEL_202; } goto LABEL_271; } LABEL_202: v98 = *(_DWORD *)(v3 + 64); *(_DWORD *)(v3 + 56) += v6 & ((1 << v98) - 1); v6 >>= v98; v9 -= v98; } *(_DWORD *)v3 = 20; LABEL_204: v99 = *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 80)) - 1))); v100 = (unsigned __int8)(*(_WORD *)(*(_DWORD *)(v3 + 72) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 80)) - 1))) >> 8); v154 = *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * (v6 & ((1 << *(_DWORD *)(v3 + 80)) - 1))); if ( v100 > v9 ) { while ( v156 ) { v101 = *v8; --v156; v102 = v101 << v9; ++v8; v9 += 8; v6 += v102; v103 = 1 << *(_DWORD *)(v3 + 80); v104 = *(_DWORD *)(v3 + 72); v155 = v8; v99 = *(_DWORD *)(v104 + 4 * (v6 & (v103 - 1))); v154 = v99; if ( BYTE1(v99) <= v9 ) goto LABEL_207; } goto LABEL_271; } LABEL_207: if ( !(v99 & 0xF0) ) { v143 = v99; v154 = *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * ((v154 >> 16) + ((v6 & ((1 << (BYTE1(v99) + v99)) - 1)) >> SBYTE1(v99)))); if ( BYTE1(v99) + (unsigned int)BYTE1(v154) > v9 ) { while ( v156 ) { v105 = *v8 << v9; --v156; ++v8; v6 += v105; v9 += 8; v155 = v8; v154 = *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * (HIWORD(v143) + ((v6 & ((1 << (BYTE1(v143) + v143)) - 1)) >> SBYTE1(v143)))); if ( BYTE1(v143) + (unsigned int)BYTE1(v154) <= v9 ) goto LABEL_211; } goto LABEL_271; } LABEL_211: v99 = v154; v6 >>= SBYTE1(v143); v9 -= BYTE1(v143); } v6 >>= SBYTE1(v99); v9 -= BYTE1(v99); if ( v99 & 0x40 ) { *(_DWORD *)(a1 + 24) = "invalid distance code"; goto LABEL_263; } *(_DWORD *)(v3 + 60) = v99 >> 16; *(_DWORD *)(v3 + 64) = v99 & 0xF; *(_DWORD *)v3 = 21; LABEL_215: v106 = *(_DWORD *)(v3 + 64); if ( v106 ) { if ( v9 < v106 ) { while ( v156 ) { v107 = *v8; --v156; v108 = v107 << v9; ++v8; v9 += 8; v155 = v8; v6 += v108; if ( v9 >= *(_DWORD *)(v3 + 64) ) goto LABEL_219; } goto LABEL_271; } LABEL_219: v109 = *(_DWORD *)(v3 + 64); *(_DWORD *)(v3 + 60) += v6 & ((1 << v109) - 1); v6 >>= v109; v9 -= v109; } if ( *(_DWORD *)(v3 + 60) > v148 + *(_DWORD *)(v3 + 36) - v153 ) { *(_DWORD *)(a1 + 24) = "invalid distance too far back"; goto LABEL_263; } *(_DWORD *)v3 = 22; LABEL_223: if ( !v153 ) goto LABEL_271; v110 = *(_DWORD *)(v3 + 60); if ( v110 <= v148 - v153 ) { v116 = (int)&v149[-v110]; v113 = *(_DWORD *)(v3 + 56); v138 = v116; v144 = *(_DWORD *)(v3 + 56); goto LABEL_231; } v111 = v110 - (v148 - v153); v112 = *(_DWORD *)(v3 + 40); v154 = v111; if ( v111 <= v112 ) { v115 = *(_DWORD *)(v3 + 40) + *(_DWORD *)(v3 + 44) - v111; v113 = v154; } else { v113 = v111 - v112; v114 = *(_DWORD *)(v3 + 32) + *(_DWORD *)(v3 + 44); v154 = v113; v115 = v114 - v113; } v138 = v115; v144 = *(_DWORD *)(v3 + 56); if ( v113 > v144 ) { v113 = *(_DWORD *)(v3 + 56); LABEL_231: v154 = v113; } if ( v113 > v153 ) { v113 = v153; v154 = v153; } v153 -= v113; v117 = v144 - v113; v118 = v138 - (_DWORD)v149; *(_DWORD *)(v3 + 56) = v117; for ( i = v138 - (_DWORD)v149; ; v118 = i ) { *v149 = v149[v118]; v23 = v154-- == 1; ++v149; if ( v23 ) break; } if ( !*(_DWORD *)(v3 + 56) ) *(_DWORD *)v3 = 18; goto LABEL_264; case 0x10u: goto LABEL_131; case 0x11u: goto LABEL_142; case 0x12u: goto LABEL_179; case 0x13u: goto LABEL_198; case 0x14u: goto LABEL_204; case 0x15u: goto LABEL_215; case 0x16u: goto LABEL_223; case 0x17u: if ( !v153 ) goto LABEL_271; *v149 = *(_BYTE *)(v3 + 56); --v153; ++v149; *(_DWORD *)v3 = 18; goto LABEL_264; case 0x18u: if ( !*(_DWORD *)(v3 + 8) ) goto LABEL_255; if ( v9 >= 0x20 ) goto LABEL_245; do { if ( !v156 ) goto LABEL_271; v119 = *v8; --v156; v120 = v119 << v9; ++v8; v9 += 8; v155 = v8; v6 += v120; } while ( v9 < 0x20 ); LABEL_245: v121 = v148 - v153; *(_DWORD *)(a1 + 20) += v148 - v153; *(_DWORD *)(v3 + 24) += v121; if ( v121 ) { v135 = &v149[-v121]; v134 = *(_DWORD *)(v3 + 20); if ( *(_DWORD *)(v3 + 16) ) v122 = sub_759C50(v134, v135, v121); else v122 = sub_757D40(v134, v135, v121); *(_DWORD *)(v3 + 20) = v122; *(_DWORD *)(a1 + 48) = v122; v8 = (unsigned __int8 *)v155; } v148 = v153; v123 = v6; if ( !*(_DWORD *)(v3 + 16) ) v123 = (v6 >> 24) + ((v6 >> 8) & 0xFF00) + (((v6 << 16) + (v6 & 0xFF00)) << 8); if ( v123 != *(_DWORD *)(v3 + 20) ) { *(_DWORD *)(a1 + 24) = "incorrect data check"; LABEL_263: *(_DWORD *)v3 = 27; LABEL_264: v7 = *(_DWORD *)v3; if ( *(_DWORD *)v3 > 0x1Cu ) return -2; v2 = (_DWORD *)a1; continue; } v6 = 0; v9 = 0; LABEL_255: *(_DWORD *)v3 = 25; LABEL_256: if ( !*(_DWORD *)(v3 + 8) || !*(_DWORD *)(v3 + 16) ) goto LABEL_268; if ( v9 < 0x20 ) { while ( v156 ) { v124 = *v8; --v156; v125 = v124 << v9; ++v8; v9 += 8; v155 = v8; v6 += v125; if ( v9 >= 0x20 ) goto LABEL_261; } goto LABEL_271; } LABEL_261: if ( v6 != *(_DWORD *)(v3 + 24) ) { *(_DWORD *)(a1 + 24) = "incorrect length check"; goto LABEL_263; } v6 = 0; v9 = 0; LABEL_268: *(_DWORD *)v3 = 26; LABEL_269: v140 = 1; LABEL_271: *(_DWORD *)(a1 + 12) = v149; v128 = v153; *(_DWORD *)a1 = v8; v129 = v156; *(_DWORD *)(a1 + 16) = v128; *(_DWORD *)(a1 + 4) = v129; v23 = *(_DWORD *)(v3 + 32) == 0; *(_DWORD *)(v3 + 48) = v6; *(_DWORD *)(v3 + 52) = v9; if ( v23 && (*(_DWORD *)v3 >= 24 || v148 == *(_DWORD *)(a1 + 16)) || !sub_7568A0(v148, a1) ) { v130 = a1; v131 = v136 - *(_DWORD *)(a1 + 4); v132 = v148 - *(_DWORD *)(a1 + 16); *(_DWORD *)(v130 + 8) += v131; *(_DWORD *)(v130 + 20) += v132; *(_DWORD *)(v3 + 24) += v132; v137 = v131; if ( *(_DWORD *)(v3 + 8) && v132 ) { if ( *(_DWORD *)(v3 + 16) ) v133 = sub_759C50(*(_DWORD *)(v3 + 20), (_DWORD *)(*(_DWORD *)(a1 + 12) - v132), v132); else v133 = sub_757D40(*(_DWORD *)(v3 + 20), (unsigned __int8 *)(*(_DWORD *)(a1 + 12) - v132), v132); *(_DWORD *)(v3 + 20) = v133; *(_DWORD *)(a1 + 48) = v133; v131 = v137; } *(_DWORD *)(a1 + 44) = *(_DWORD *)(v3 + 52) + (*(_DWORD *)v3 != 11 ? 0 : 0x80) + (*(_DWORD *)(v3 + 4) != 0 ? 0x40 : 0); if ( (v131 || v132) && a2 != 4 ) { result = v140; } else { result = v140; if ( !v140 ) result = -5; } } else { *(_DWORD *)v3 = 28; LABEL_276: result = -4; } return result; case 0x19u: goto LABEL_256; case 0x1Au: goto LABEL_269; case 0x1Bu: v140 = -3; goto LABEL_271; case 0x1Cu: goto LABEL_276; default: return -2; } } } //----- (00757CF0) -------------------------------------------------------- signed int __cdecl sub_757CF0(_DWORD *a1) { int v1; // eax void (__cdecl *v2)(_DWORD, int); // ecx int v3; // eax if ( !a1 ) return -2; v1 = a1[7]; if ( !v1 ) return -2; v2 = (void (__cdecl *)(_DWORD, int))a1[9]; if ( !v2 ) return -2; v3 = *(_DWORD *)(v1 + 44); if ( v3 ) v2(a1[10], v3); ((void (__cdecl *)(_DWORD, _DWORD))a1[9])(a1[10], a1[7]); a1[7] = 0; return 0; } //----- (00757D40) -------------------------------------------------------- int __cdecl sub_757D40(unsigned int a1, unsigned __int8 *a2, unsigned int a3) { unsigned __int8 *v3; // esi unsigned int v4; // ecx unsigned int v5; // edi unsigned int i; // ebx unsigned int v8; // eax unsigned int v9; // edx int v10; // ecx int v11; // edi int v12; // ecx int v13; // edi int v14; // ecx int v15; // edi int v16; // ecx int v17; // edi int v18; // ecx int v19; // edi int v20; // ecx int v21; // edi int v22; // ecx int v23; // edi int v24; // ecx int v25; // edi int v26; // ecx int v27; // edi int v28; // ecx int v29; // edi int v30; // ecx int v31; // edi int v32; // ecx int v33; // edi int v34; // ecx int v35; // edi int v36; // ecx int v37; // edi int v38; // ecx int v39; // edi v3 = a2; v4 = (unsigned __int16)a1; v5 = a1 >> 16; if ( !a2 ) return (int)(a2 + 1); for ( i = a3; i; v5 %= 0xFFF1u ) { v8 = i; if ( i >= 0x15B0 ) v8 = 5552; i -= v8; if ( (signed int)v8 >= 16 ) { v9 = v8 >> 4; v8 += -16 * (v8 >> 4); do { v10 = *v3 + v4; v11 = v10 + v5; v12 = v3[1] + v10; v13 = v12 + v11; v14 = v3[2] + v12; v15 = v14 + v13; v16 = v3[3] + v14; v17 = v16 + v15; v18 = v3[4] + v16; v19 = v18 + v17; v20 = v3[5] + v18; v21 = v20 + v19; v22 = v3[6] + v20; v23 = v22 + v21; v24 = v3[7] + v22; v25 = v24 + v23; v26 = v3[8] + v24; v27 = v26 + v25; v28 = v3[9] + v26; v29 = v28 + v27; v30 = v3[10] + v28; v31 = v30 + v29; v32 = v3[11] + v30; v33 = v32 + v31; v34 = v3[12] + v32; v35 = v34 + v33; v36 = v3[13] + v34; v37 = v36 + v35; v38 = v3[14] + v36; v39 = v38 + v37; v4 = v3[15] + v38; v5 = v4 + v39; v3 += 16; --v9; } while ( v9 ); } for ( ; v8; --v8 ) { v4 += *v3++; v5 += v4; } v4 %= 0xFFF1u; } return v4 | (v5 << 16); } //----- (00757E80) -------------------------------------------------------- int __fastcall sub_757E80(int a1, int a2) { _WORD *v2; // eax signed int v3; // ecx _WORD *v4; // eax signed int v5; // ecx _WORD *v6; // eax signed int v7; // ecx int result; // eax v2 = (_WORD *)(a2 + 140); v3 = 286; do { *v2 = 0; v2 += 2; --v3; } while ( v3 ); v4 = (_WORD *)(a2 + 2432); v5 = 30; do { *v4 = 0; v4 += 2; --v5; } while ( v5 ); v6 = (_WORD *)(a2 + 2676); v7 = 19; do { *v6 = 0; v6 += 2; --v7; } while ( v7 ); *(_WORD *)(a2 + 1164) = 1; result = 0; *(_DWORD *)(a2 + 5796) = 0; *(_DWORD *)(a2 + 5792) = 0; *(_DWORD *)(a2 + 5800) = 0; *(_DWORD *)(a2 + 5784) = 0; return result; } //----- (00757F00) -------------------------------------------------------- int __usercall sub_757F00@(int result@, int a2@, int a3) { int v3; // edx int v4; // ecx bool v5; // sf unsigned __int8 v6; // of int v7; // esi unsigned __int16 v8; // dx unsigned __int16 v9; // bx int v10; // esi unsigned __int16 v11; // dx unsigned __int16 v12; // bx int v13; // edx int v14; // edx int v15; // esi int v16; // [esp+8h] [ebp-4h] v3 = *(_DWORD *)(result + 5192); v4 = 2 * a3; v16 = *(_DWORD *)(result + 4 * a3 + 2900); v6 = __OFSUB__(2 * a3, v3); v5 = 2 * a3 - v3 < 0; if ( 2 * a3 > v3 ) { *(_DWORD *)(result + 4 * a3 + 2900) = *(_DWORD *)(result + 4 * a3 + 2900); } else { while ( 1 ) { if ( v5 ^ v6 ) { v7 = *(_DWORD *)(result + 4 * v4 + 2904); v8 = *(_WORD *)(a2 + 4 * v7); v9 = *(_WORD *)(a2 + 4 * *(_DWORD *)(result + 4 * v4 + 2900)); if ( v8 < v9 || v8 == v9 && *(_BYTE *)(v7 + result + 5200) <= *(_BYTE *)(*(_DWORD *)(result + 4 * v4 + 2900) + result + 5200) ) { ++v4; } } v10 = *(_DWORD *)(result + 4 * v4 + 2900); v11 = *(_WORD *)(a2 + 4 * v16); v12 = *(_WORD *)(a2 + 4 * v10); if ( v11 < v12 ) break; if ( v11 == v12 ) { v13 = v16; if ( *(_BYTE *)(v16 + result + 5200) <= *(_BYTE *)(v10 + result + 5200) ) goto LABEL_13; } *(_DWORD *)(result + 4 * a3 + 2900) = v10; v14 = *(_DWORD *)(result + 5192); v15 = v4; v4 *= 2; a3 = v15; v6 = __OFSUB__(v4, v14); v5 = v4 - v14 < 0; if ( v4 > v14 ) { *(_DWORD *)(result + 4 * v15 + 2900) = v16; return result; } } v13 = v16; LABEL_13: *(_DWORD *)(result + 4 * a3 + 2900) = v13; } return result; } //----- (00757FE0) -------------------------------------------------------- _DWORD *__usercall sub_757FE0@(_DWORD *result@, int *a2@) { int v2; // edx int v3; // ebx int *v4; // ecx int v5; // edi int v6; // esi int v7; // ecx int v8; // edx int v9; // ecx int v10; // esi int v11; // edi _WORD *v12; // edi int v13; // ecx _WORD *i; // edx int v15; // edx int v16; // edi int v17; // esi int v18; // ecx int v19; // edi _WORD *v20; // esi int v21; // [esp+Ch] [ebp-28h] int v22; // [esp+10h] [ebp-24h] int v23; // [esp+14h] [ebp-20h] int v24; // [esp+14h] [ebp-20h] int v25; // [esp+18h] [ebp-1Ch] int v26; // [esp+1Ch] [ebp-18h] int v27; // [esp+20h] [ebp-14h] _WORD *v28; // [esp+20h] [ebp-14h] signed int v29; // [esp+24h] [ebp-10h] int *v30; // [esp+28h] [ebp-Ch] int v31; // [esp+28h] [ebp-Ch] int v32; // [esp+2Ch] [ebp-8h] int v33; // [esp+30h] [ebp-4h] v2 = a2[1]; v3 = *a2; v4 = (int *)a2[2]; v26 = v2; v22 = *v4; v23 = v4[1]; v5 = v4[4]; v25 = v4[2]; result[717] = 0; result[718] = 0; result[719] = 0; result[720] = 0; result[721] = 0; result[722] = 0; result[723] = 0; result[724] = 0; *(_WORD *)(v3 + 4 * result[result[1299] + 725] + 2) = 0; v6 = 0; v7 = result[1299] + 1; v21 = v3; v33 = v5; v32 = 0; if ( v7 < 573 ) { v30 = &result[v7 + 725]; v27 = 573 - v7; v29 = 573; do { v8 = *v30; v9 = *(unsigned __int16 *)(v3 + 4 * *(unsigned __int16 *)(v3 + 4 * *v30 + 2) + 2) + 1; if ( v9 > v5 ) { ++v6; v9 = v5; v32 = v6; } *(_WORD *)(v3 + 4 * v8 + 2) = v9; if ( v8 <= v26 ) { ++*((_WORD *)result + v9 + 1434); v10 = 0; if ( v8 >= v25 ) v10 = *(_DWORD *)(v23 + 4 * (v8 - v25)); v11 = *(unsigned __int16 *)(v3 + 4 * v8); result[1448] += v11 * (v10 + v9); if ( v22 ) result[1449] += v11 * (v10 + *(unsigned __int16 *)(v22 + 4 * v8 + 2)); v5 = v33; v6 = v32; } ++v30; --v27; } while ( v27 ); if ( v6 ) { v12 = (_WORD *)((char *)result + 2 * v5 + 2868); do { v13 = v33 - 1; for ( i = (_WORD *)((char *)result + 2 * (v33 - 1) + 2868); !*i; --v13 ) --i; *((_WORD *)result + v13 + 1435) += 2; --*((_WORD *)result + v13 + 1434); --*v12; v6 -= 2; } while ( v6 > 0 ); v15 = v33; if ( v33 ) { v28 = v12; do { v16 = (unsigned __int16)*v12; v31 = v16; if ( v16 ) { v17 = (int)&result[v29 + 725]; do { v18 = *(_DWORD *)(v17 - 4); --v29; v17 -= 4; v24 = v17; if ( v18 <= v26 ) { v19 = *(unsigned __int16 *)(v3 + 4 * v18 + 2); v20 = (_WORD *)(v3 + 4 * v18 + 2); if ( v19 != v15 ) { v3 = v21; result[1448] += *(unsigned __int16 *)(v21 + 4 * v18) * (v15 - v19); *v20 = v15; } v16 = --v31; v17 = v24; } } while ( v16 ); } v12 = v28 - 1; --v15; --v28; } while ( v15 ); } } } return result; } //----- (007581E0) -------------------------------------------------------- signed int __usercall sub_7581E0@(int a1@, int a2@, _WORD *a3) { int v3; // edi int v4; // ebx signed int v5; // edx signed int v6; // ecx signed int v7; // esi signed int result; // eax signed int v9; // ebx signed int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] signed int v12; // [esp+14h] [ebp-8h] unsigned __int16 *v13; // [esp+18h] [ebp-4h] v3 = a2; v4 = a1; v5 = 0; v12 = -1; v10 = *(unsigned __int16 *)(a2 + 2); v6 = 7; v7 = 4; if ( !v10 ) { v6 = 138; v7 = 3; } result = 0xFFFF; *(_WORD *)(v3 + 4 * v4 + 6) = -1; if ( v4 >= 0 ) { v13 = (unsigned __int16 *)(v3 + 6); v11 = v4 + 1; v9 = v10; do { result = v9; v9 = *v13; if ( ++v5 >= v6 || result != v9 ) { if ( v5 >= v7 ) { if ( result ) { if ( result != v12 ) ++a3[2 * result + 1338]; ++a3[1370]; } else if ( v5 > 10 ) { ++a3[1374]; } else { ++a3[1372]; } } else { a3[2 * result + 1338] += v5; } v5 = 0; v12 = result; if ( v9 ) { if ( result == v9 ) { v6 = 6; v7 = 3; } else { v6 = 7; v7 = 4; } } else { v6 = 138; v7 = 3; } } v13 += 2; --v11; } while ( v11 ); } return result; } //----- (007582C0) -------------------------------------------------------- int __usercall sub_7582C0@(int result@, int a2@, int a3@) { int v3; // esi signed int v4; // ebx signed int v5; // edx int v6; // edi signed int v7; // ecx signed int v8; // esi int v9; // edi int v10; // ecx unsigned __int16 v11; // si __int16 v12; // dx int v13; // ecx int v14; // edx int v15; // ecx bool v16; // zf int v17; // ecx unsigned __int16 v18; // dx unsigned __int16 v19; // ST14_2 __int16 v20; // dx int v21; // ecx __int16 v22; // di __int16 v23; // di int v24; // ecx int v25; // ecx unsigned __int16 v26; // dx unsigned __int16 v27; // ST14_2 __int16 v28; // dx int v29; // ecx __int16 v30; // di signed int v31; // ecx unsigned __int16 v32; // dx unsigned __int16 v33; // ST14_2 __int16 v34; // dx int v35; // ecx int v36; // edx int v37; // ecx int v38; // ecx unsigned __int16 v39; // dx unsigned __int16 v40; // ST14_2 __int16 v41; // dx int v42; // ecx __int16 v43; // di __int16 v44; // di int v45; // ecx signed int v46; // ecx unsigned __int16 v47; // dx unsigned __int16 v48; // ST14_2 __int16 v49; // dx int v50; // ecx int v51; // edx int v52; // ecx unsigned __int16 v53; // dx unsigned __int16 v54; // ST14_2 __int16 v55; // dx int v56; // ecx __int16 v57; // di __int16 v58; // di int v59; // ecx signed int v60; // ecx unsigned __int16 v61; // dx unsigned __int16 v62; // ST14_2 __int16 v63; // dx int v64; // ecx int v65; // edx signed int v66; // [esp+Ch] [ebp-1Ch] int v67; // [esp+10h] [ebp-18h] signed int v68; // [esp+14h] [ebp-14h] unsigned __int16 *v69; // [esp+18h] [ebp-10h] signed int v70; // [esp+1Ch] [ebp-Ch] signed int v71; // [esp+20h] [ebp-8h] int v72; // [esp+20h] [ebp-8h] int v73; // [esp+20h] [ebp-8h] int v74; // [esp+20h] [ebp-8h] int v75; // [esp+20h] [ebp-8h] signed int v76; // [esp+24h] [ebp-4h] v3 = a2; v4 = *(unsigned __int16 *)(a2 + 2); v5 = 0; v6 = a3; v68 = -1; v70 = v4; v7 = 7; v71 = 4; if ( !v4 ) { v7 = 138; v71 = 3; } if ( v6 >= 0 ) { v69 = (unsigned __int16 *)(v3 + 6); v67 = v6 + 1; do { v8 = v70; ++v5; v66 = v70; v70 = *v69; v76 = v5; if ( v5 < v7 && v8 == *v69 ) goto LABEL_44; if ( v5 < v71 ) { do { v9 = *(unsigned __int16 *)(result + 4 * v8 + 2678); v10 = *(_DWORD *)(result + 5812); if ( v10 <= 16 - v9 ) { *(_WORD *)(result + 5808) |= *(_WORD *)(result + 4 * v8 + 2676) << v10; v15 = v9 + v10; } else { v11 = *(_WORD *)(result + 4 * v8 + 2676); v12 = v11 << v10; v13 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v12; *(_BYTE *)(v13 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v14 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v15 = v14 + v9 - 16; *(_WORD *)(result + 5808) = v11 >> (16 - v14); v8 = v66; } v16 = v76-- == 1; *(_DWORD *)(result + 5812) = v15; } while ( !v16 ); goto LABEL_39; } if ( v8 ) { if ( v8 != v68 ) { v72 = *(unsigned __int16 *)(result + 4 * v8 + 2678); v17 = *(_DWORD *)(result + 5812); if ( v17 <= 16 - v72 ) { v23 = *(_WORD *)(result + 4 * v8 + 2676) << v17; v24 = *(_DWORD *)(result + 5812); *(_WORD *)(result + 5808) |= v23; *(_DWORD *)(result + 5812) = v72 + v24; } else { v18 = *(_WORD *)(result + 4 * v8 + 2676); v19 = v18; v20 = v18 << v17; v21 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v20; *(_BYTE *)(v21 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v5 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v22 = v19 >> (16 - v5); *(_DWORD *)(result + 5812) = v5 + v72 - 16; LOWORD(v5) = v76; *(_WORD *)(result + 5808) = v22; } LOWORD(v5) = v5 - 1; LOWORD(v76) = v5; } v73 = *(unsigned __int16 *)(result + 2742); v25 = *(_DWORD *)(result + 5812); if ( v25 <= 16 - v73 ) { *(_WORD *)(result + 5808) |= *(_WORD *)(result + 2740) << v25; *(_DWORD *)(result + 5812) = v73 + v25; } else { v26 = *(_WORD *)(result + 2740); v27 = v26; v28 = v26 << v25; v29 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v28; *(_BYTE *)(v29 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v5 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v30 = v27 >> (16 - v5); *(_DWORD *)(result + 5812) = v5 + v73 - 16; LOWORD(v5) = v76; *(_WORD *)(result + 5808) = v30; } v31 = *(_DWORD *)(result + 5812); v32 = v5 - 3; if ( v31 > 14 ) { v33 = v32; v34 = v32 << v31; v35 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v34; *(_BYTE *)(v35 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v36 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v36 - 14; *(_WORD *)(result + 5808) = v33 >> (16 - v36); goto LABEL_39; } *(_WORD *)(result + 5808) |= v32 << v31; v37 = v31 + 2; } else if ( v5 > 10 ) { v75 = *(unsigned __int16 *)(result + 2750); v52 = *(_DWORD *)(result + 5812); if ( v52 <= 16 - v75 ) { v58 = *(_WORD *)(result + 2748) << v52; v59 = *(_DWORD *)(result + 5812); *(_WORD *)(result + 5808) |= v58; *(_DWORD *)(result + 5812) = v75 + v59; } else { v53 = *(_WORD *)(result + 2748); v54 = v53; v55 = v53 << v52; v56 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v55; *(_BYTE *)(v56 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v5 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v57 = v54 >> (16 - v5); *(_DWORD *)(result + 5812) = v5 + v75 - 16; LOWORD(v5) = v76; *(_WORD *)(result + 5808) = v57; } v60 = *(_DWORD *)(result + 5812); v61 = v5 - 11; if ( v60 > 9 ) { v62 = v61; v63 = v61 << v60; v64 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v63; *(_BYTE *)(v64 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v65 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v65 - 9; *(_WORD *)(result + 5808) = v62 >> (16 - v65); goto LABEL_39; } *(_WORD *)(result + 5808) |= v61 << v60; v37 = v60 + 7; } else { v74 = *(unsigned __int16 *)(result + 2746); v38 = *(_DWORD *)(result + 5812); if ( v38 <= 16 - v74 ) { v44 = *(_WORD *)(result + 2744) << v38; v45 = *(_DWORD *)(result + 5812); *(_WORD *)(result + 5808) |= v44; *(_DWORD *)(result + 5812) = v74 + v45; } else { v39 = *(_WORD *)(result + 2744); v40 = v39; v41 = v39 << v38; v42 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v41; *(_BYTE *)(v42 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v5 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v43 = v40 >> (16 - v5); *(_DWORD *)(result + 5812) = v5 + v74 - 16; LOWORD(v5) = v76; *(_WORD *)(result + 5808) = v43; } v46 = *(_DWORD *)(result + 5812); v47 = v5 - 3; if ( v46 > 13 ) { v48 = v47; v49 = v47 << v46; v50 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v49; *(_BYTE *)(v50 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v51 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v51 - 13; *(_WORD *)(result + 5808) = v48 >> (16 - v51); goto LABEL_39; } *(_WORD *)(result + 5808) |= v47 << v46; v37 = v46 + 3; } *(_DWORD *)(result + 5812) = v37; LABEL_39: v5 = 0; v68 = v8; if ( v70 ) { if ( v8 == v70 ) { v7 = 6; v71 = 3; } else { v7 = 7; v71 = 4; } } else { v7 = 138; v71 = 3; } LABEL_44: v69 += 2; --v67; } while ( v67 ); } return result; } //----- (00758840) -------------------------------------------------------- int __usercall sub_758840@(int a1@, int a2, int a3, int a4) { signed int v4; // ecx __int16 v5; // ax __int16 v6; // dx int v7; // ecx int v8; // edx signed int v9; // ecx __int16 v10; // ax __int16 v11; // dx int v12; // ecx int v13; // edx signed int v14; // ecx __int16 v15; // ax __int16 v16; // dx int v17; // ecx int v18; // edx int i; // edi signed int v20; // ecx unsigned __int16 v21; // ax __int16 v22; // dx int v23; // ecx int v24; // edx v4 = *(_DWORD *)(a1 + 5812); v5 = a2 - 257; if ( v4 <= 11 ) { *(_WORD *)(a1 + 5808) |= v5 << v4; *(_DWORD *)(a1 + 5812) = v4 + 5; } else { v6 = v5 << v4; v7 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v6; *(_BYTE *)(v7 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v8 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v8 - 11; *(_WORD *)(a1 + 5808) = (unsigned __int16)(a2 - 257) >> (16 - v8); } v9 = *(_DWORD *)(a1 + 5812); v10 = a3 - 1; if ( v9 <= 11 ) { *(_WORD *)(a1 + 5808) |= v10 << v9; *(_DWORD *)(a1 + 5812) = v9 + 5; } else { v11 = v10 << v9; v12 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v11; *(_BYTE *)(v12 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v13 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v13 - 11; *(_WORD *)(a1 + 5808) = (unsigned __int16)(a3 - 1) >> (16 - v13); } v14 = *(_DWORD *)(a1 + 5812); v15 = a4 - 4; if ( v14 <= 12 ) { *(_WORD *)(a1 + 5808) |= v15 << v14; *(_DWORD *)(a1 + 5812) = v14 + 4; } else { v16 = v15 << v14; v17 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v16; *(_BYTE *)(v17 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v18 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v18 - 12; *(_WORD *)(a1 + 5808) = (unsigned __int16)(a4 - 4) >> (16 - v18); } for ( i = 0; i < a4; ++i ) { v20 = *(_DWORD *)(a1 + 5812); if ( v20 <= 13 ) { *(_WORD *)(a1 + 5808) |= *(_WORD *)(a1 + 4 * (unsigned __int8)byte_A09D84[i] + 2678) << v20; *(_DWORD *)(a1 + 5812) = v20 + 3; } else { v21 = *(_WORD *)(a1 + 4 * (unsigned __int8)byte_A09D84[i] + 2678); v22 = *(_WORD *)(a1 + 4 * (unsigned __int8)byte_A09D84[i] + 2678) << v20; v23 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v22; *(_BYTE *)(v23 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v24 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) = v21 >> (16 - v24); *(_DWORD *)(a1 + 5812) = v24 - 13; } } sub_7582C0(a1, a1 + 140, a2 - 1); return sub_7582C0(a1, a1 + 2432, a3 - 1); } //----- (00758A90) -------------------------------------------------------- int __usercall sub_758A90@(int result@, int a2, int a3) { int v3; // ebx unsigned int v4; // edx int v5; // ecx int v6; // esi bool v7; // zf int v8; // ecx int v9; // edx unsigned __int16 v10; // si __int16 v11; // dx int v12; // ecx int v13; // edx int v14; // ecx int v15; // edi unsigned __int16 v16; // dx unsigned __int16 v17; // ST0C_2 __int16 v18; // dx int v19; // ecx int v20; // edx int v21; // ebx int v22; // esi int v23; // ecx __int16 v24; // di int v25; // ecx int v26; // ebx int v27; // ecx unsigned int v28; // edx int v29; // esi int v30; // edi int v31; // ecx unsigned __int16 v32; // di __int16 v33; // dx int v34; // ecx int v35; // edx __int16 v36; // di int v37; // edi int v38; // edx int v39; // ecx __int16 v40; // si int v41; // ecx int v42; // ebx int v43; // edx int v44; // edx int v45; // ecx unsigned __int16 v46; // si __int16 v47; // dx int v48; // ecx int v49; // edx int v50; // [esp+Ch] [ebp-10h] int v51; // [esp+Ch] [ebp-10h] unsigned int v52; // [esp+10h] [ebp-Ch] int v53; // [esp+14h] [ebp-8h] int v54; // [esp+14h] [ebp-8h] int v55; // [esp+18h] [ebp-4h] unsigned int v56; // [esp+18h] [ebp-4h] int v57; // [esp+24h] [ebp+8h] v3 = a2; v4 = 0; if ( *(_DWORD *)(result + 5784) ) { while ( 1 ) { v5 = *(unsigned __int16 *)(*(_DWORD *)(result + 5788) + 2 * v4); v6 = *(unsigned __int8 *)(v4 + *(_DWORD *)(result + 5776)); v55 = v5; v7 = v5 == 0; v8 = *(_DWORD *)(result + 5812); v52 = v4 + 1; if ( v7 ) break; v15 = (unsigned __int8)byte_A0A558[v6]; v54 = *(unsigned __int16 *)(v3 + 4 * v15 + 1030); if ( v8 <= 16 - v54 ) { *(_WORD *)(result + 5808) |= *(_WORD *)(a2 + 4 * v15 + 1028) << v8; *(_DWORD *)(result + 5812) = v54 + v8; } else { v16 = *(_WORD *)(a2 + 4 * v15 + 1028); v17 = v16; v18 = v16 << v8; v19 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v18; *(_BYTE *)(v19 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v20 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v20 + v54 - 16; *(_WORD *)(result + 5808) = v17 >> (16 - v20); } v21 = dword_A09D10[v15]; v50 = v21; if ( v21 ) { v22 = v6 - dword_A0A658[v15]; v23 = *(_DWORD *)(result + 5812); if ( v23 <= 16 - v21 ) { *(_WORD *)(result + 5808) |= (_WORD)v22 << v23; v27 = v21 + v23; } else { v24 = (_WORD)v22 << v23; v25 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v24; *(_BYTE *)(v25 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v26 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v27 = v26 + v50 - 16; *(_WORD *)(result + 5808) = (unsigned __int16)v22 >> (16 - v26); } *(_DWORD *)(result + 5812) = v27; } v28 = v55 - 1; v56 = v28; if ( v28 >= 0x100 ) v29 = (unsigned __int8)byte_A0A458[v28 >> 7]; else v29 = (unsigned __int8)byte_A0A358[v28]; v30 = *(unsigned __int16 *)(a3 + 4 * v29 + 2); v31 = *(_DWORD *)(result + 5812); v51 = *(unsigned __int16 *)(a3 + 4 * v29 + 2); if ( v31 <= 16 - v30 ) { *(_WORD *)(result + 5808) |= *(_WORD *)(a3 + 4 * v29) << v31; *(_DWORD *)(result + 5812) = v30 + v31; } else { v32 = *(_WORD *)(a3 + 4 * v29); v33 = *(_WORD *)(a3 + 4 * v29) << v31; v34 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v33; *(_BYTE *)(v34 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v35 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); v36 = v32 >> (16 - v35); *(_DWORD *)(result + 5812) = v35 + v51 - 16; v28 = v56; *(_WORD *)(result + 5808) = v36; } v37 = dword_A09D98[v29]; v3 = a2; if ( v37 ) { v38 = v28 - dword_A0A6D0[v29]; v39 = *(_DWORD *)(result + 5812); if ( v39 > 16 - v37 ) { v40 = (_WORD)v38 << v39; v41 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v40; *(_BYTE *)(v41 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v42 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_WORD *)(result + 5808) = (unsigned __int16)v38 >> (16 - v42); v43 = v42 + v37 - 16; v3 = a2; *(_DWORD *)(result + 5812) = v43; goto LABEL_27; } *(_WORD *)(result + 5808) |= (_WORD)v38 << v39; v14 = v37 + v39; goto LABEL_26; } LABEL_27: if ( v52 >= *(_DWORD *)(result + 5784) ) goto LABEL_28; v4 = v52; } v9 = *(unsigned __int16 *)(v3 + 4 * v6 + 2); v53 = *(unsigned __int16 *)(v3 + 4 * v6 + 2); if ( v8 > 16 - v9 ) { v10 = *(_WORD *)(v3 + 4 * v6); v11 = v10 << v8; v12 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v11; *(_BYTE *)(v12 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v13 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v13 + v53 - 16; *(_WORD *)(result + 5808) = v10 >> (16 - v13); goto LABEL_27; } *(_WORD *)(result + 5808) |= *(_WORD *)(v3 + 4 * v6) << v8; v14 = v9 + v8; LABEL_26: *(_DWORD *)(result + 5812) = v14; goto LABEL_27; } LABEL_28: v44 = *(unsigned __int16 *)(v3 + 1026); v45 = *(_DWORD *)(result + 5812); v57 = *(unsigned __int16 *)(v3 + 1026); if ( v45 <= 16 - v44 ) { *(_WORD *)(result + 5808) |= *(_WORD *)(v3 + 1024) << v45; *(_DWORD *)(result + 5812) = v44 + v45; } else { v46 = *(_WORD *)(v3 + 1024); v47 = *(_WORD *)(v3 + 1024) << v45; v48 = *(_DWORD *)(result + 8); *(_WORD *)(result + 5808) |= v47; *(_BYTE *)(v48 + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v49 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v49 + v57 - 16; *(_WORD *)(result + 5808) = v46 >> (16 - v49); } *(_DWORD *)(result + 5804) = *(unsigned __int16 *)(v3 + 1026); return result; } //----- (00758EA0) -------------------------------------------------------- unsigned __int16 *__usercall sub_758EA0@(unsigned __int16 *result@) { int v1; // edi int v2; // ebx unsigned __int16 *v3; // edx unsigned __int16 *v4; // edx signed int v5; // [esp+Ch] [ebp-Ch] signed int v6; // [esp+10h] [ebp-8h] int v7; // [esp+10h] [ebp-8h] int v8; // [esp+14h] [ebp-4h] v1 = 0; v2 = 0; v3 = result + 86; v6 = 60; do { v1 += *(v3 - 2); v2 += *v3; v3 += 4; --v6; } while ( v6 ); v8 = 0; v7 = 0; v4 = result + 328; v5 = 64; do { v8 += *(v4 - 2); v7 += *v4; v4 += 4; --v5; } while ( v5 ); *(_DWORD *)(*(_DWORD *)result + 44) = (v1 + v2 + (unsigned int)result[324]) >> 2 >= v8 + v7 + result[70] + result[72] + result[74] + result[76] + result[78] + result[80] + (unsigned int)result[82]; return result; } //----- (00758F70) -------------------------------------------------------- int __usercall sub_758F70@(int result@) { signed int v1; // ecx __int16 v2; // dx v1 = *(_DWORD *)(result + 5812); if ( v1 == 16 ) { *(_BYTE *)(*(_DWORD *)(result + 8) + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); *(_WORD *)(result + 5808) = 0; *(_DWORD *)(result + 5812) = 0; } else if ( v1 >= 8 ) { *(_BYTE *)(*(_DWORD *)(result + 8) + *(_DWORD *)(result + 20)) = *(_BYTE *)(result + 5808); v2 = *(unsigned __int8 *)(result + 5809); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) -= 8; *(_WORD *)(result + 5808) = v2; } return result; } //----- (00758FF0) -------------------------------------------------------- int __usercall sub_758FF0@(int result@) { signed int v1; // ecx int v2; // ecx int v3; // edx char v4; // bl v1 = *(_DWORD *)(result + 5812); if ( v1 > 8 ) { *(_BYTE *)(*(_DWORD *)(result + 8) + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); v2 = *(_DWORD *)(result + 20); v3 = *(_DWORD *)(result + 8); v4 = *(_BYTE *)(result + 5809); LABEL_5: *(_BYTE *)(v2 + v3) = v4; ++*(_DWORD *)(result + 20); goto LABEL_6; } if ( v1 > 0 ) { v2 = *(_DWORD *)(result + 8); v3 = *(_DWORD *)(result + 20); v4 = *(_BYTE *)(result + 5808); goto LABEL_5; } LABEL_6: *(_WORD *)(result + 5808) = 0; *(_DWORD *)(result + 5812) = 0; return result; } //----- (00759050) -------------------------------------------------------- int __usercall sub_759050@(int result@, int a2@, char *a3, int a4) { signed int v4; // edx char v5; // bl v4 = *(_DWORD *)(result + 5812); if ( v4 <= 8 ) { if ( v4 <= 0 ) goto LABEL_6; *(_BYTE *)(*(_DWORD *)(result + 8) + *(_DWORD *)(result + 20)) = *(_BYTE *)(result + 5808); } else { *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); } ++*(_DWORD *)(result + 20); LABEL_6: *(_WORD *)(result + 5808) = 0; *(_DWORD *)(result + 5812) = 0; *(_DWORD *)(result + 5804) = 8; if ( a4 ) { *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = a2; *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = BYTE1(a2); *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = ~(_BYTE)a2; *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = (unsigned __int16)~(_WORD)a2 >> 8; } for ( ; a2; --a2 ) { v5 = *a3++; *(_BYTE *)((*(_DWORD *)(result + 20))++ + *(_DWORD *)(result + 8)) = v5; } return result; } //----- (00759120) -------------------------------------------------------- int __cdecl sub_759120(int a1) { *(_DWORD *)(a1 + 2832) = a1 + 140; *(_DWORD *)(a1 + 2844) = a1 + 2432; *(_DWORD *)(a1 + 2840) = &off_AB90F8; *(_DWORD *)(a1 + 2852) = &off_AB910C; *(_DWORD *)(a1 + 2856) = a1 + 2676; *(_DWORD *)(a1 + 2864) = &unk_AB9120; *(_WORD *)(a1 + 5808) = 0; *(_DWORD *)(a1 + 5812) = 0; *(_DWORD *)(a1 + 5804) = 8; return sub_757E80(0, a1); } // AB90F8: using guessed type void *off_AB90F8; // AB910C: using guessed type void *off_AB910C; //----- (00759190) -------------------------------------------------------- signed int __usercall sub_759190@(int a1@, int a2@, int a3) { __int16 v3; // cx signed int result; // eax int v5; // edx int i; // esi int v7; // edx unsigned int v8; // eax unsigned int v9; // ecx unsigned int v10; // eax int v11; // ebx __int16 v12; // [esp+4h] [ebp-24h] char v13; // [esp+6h] [ebp-22h] v3 = 0; result = 1; v5 = a1 - (_DWORD)&v13; do { v3 = 2 * (v3 + *(__int16 *)((char *)&v12 + 2 * result + v5)); *(&v12 + result++) = v3; } while ( result <= 15 ); for ( i = 0; i <= a3; ++i ) { v7 = *(unsigned __int16 *)(a2 + 4 * i + 2); if ( *(_WORD *)(a2 + 4 * i + 2) ) { v8 = (unsigned __int16)*(&v12 + v7); v9 = v8; *(&v12 + v7) = v8 + 1; v10 = 0; do { v11 = v9 & 1; --v7; v9 >>= 1; v10 = 2 * (v11 | v10); } while ( v7 > 0 ); result = v10 >> 1; *(_WORD *)(a2 + 4 * i) = result; } } return result; } //----- (00759220) -------------------------------------------------------- signed int __usercall sub_759220@(_DWORD *a1@, int *a2) { int v2; // edi int *v3; // eax int v4; // edx int v5; // ebx signed int v6; // ecx int v7; // eax signed int v8; // eax signed int i; // ebx int v10; // eax int v11; // ecx int v12; // ebx int v13; // eax unsigned __int8 v14; // dl int v16; // [esp+8h] [ebp-8h] int v17; // [esp+Ch] [ebp-4h] v2 = *a2; v3 = (int *)a2[2]; v4 = v3[3]; v5 = *v3; v6 = -1; v7 = 0; v16 = v4; v17 = -1; a1[1298] = 0; for ( a1[1299] = 573; v7 < v4; ++v7 ) { if ( *(_WORD *)(v2 + 4 * v7) ) { a1[++a1[1298] + 725] = v7; v17 = v7; *((_BYTE *)a1 + v7 + 5200) = 0; v6 = v7; } else { *(_WORD *)(v2 + 4 * v7 + 2) = 0; } } if ( a1[1298] < 2 ) { do { if ( v6 >= 2 ) v8 = 0; else v8 = ++v6; a1[++a1[1298] + 725] = v8; *(_WORD *)(v2 + 4 * v8) = 1; *((_BYTE *)a1 + v8 + 5200) = 0; --a1[1448]; if ( v5 ) a1[1449] -= *(unsigned __int16 *)(v5 + 4 * v8 + 2); } while ( a1[1298] < 2 ); v17 = v6; } a2[1] = v6; for ( i = a1[1298] / 2; i >= 1; --i ) sub_757F00((int)a1, v2, i); do { v10 = a1[1298]; v11 = a1[v10 + 725]; v12 = a1[726]; a1[1298] = v10 - 1; a1[726] = v11; sub_757F00((int)a1, v2, 1); v13 = a1[726]; a1[--a1[1299] + 725] = v12; a1[--a1[1299] + 725] = v13; *(_WORD *)(v2 + 4 * v16) = *(_WORD *)(v2 + 4 * v12) + *(_WORD *)(v2 + 4 * v13); v14 = *((_BYTE *)a1 + v12 + 5200); if ( v14 < *((_BYTE *)a1 + v13 + 5200) ) v14 = *((_BYTE *)a1 + v13 + 5200); *((_BYTE *)a1 + v16 + 5200) = v14 + 1; *(_WORD *)(v2 + 4 * v13 + 2) = v16; *(_WORD *)(v2 + 4 * v12 + 2) = v16; a1[726] = v16++; sub_757F00((int)a1, v2, 1); } while ( a1[1298] >= 2 ); a1[--a1[1299] + 725] = a1[726]; sub_757FE0(a1, a2); return sub_759190((int)(a1 + 717), v2, v17); } //----- (00759420) -------------------------------------------------------- signed int __usercall sub_759420@(int a1@) { int v1; // esi signed int result; // eax v1 = a1; sub_7581E0(*(_DWORD *)(a1 + 2836), v1 + 140, (_WORD *)v1); sub_7581E0(*(_DWORD *)(v1 + 2848), v1 + 2432, (_WORD *)v1); sub_759220((_DWORD *)v1, (int *)(v1 + 2856)); result = 18; while ( !*(_WORD *)(v1 + 4 * (unsigned __int8)byte_A09D84[result] + 2678) ) { if ( *(_WORD *)(v1 + 4 * (unsigned __int8)byte_A09D83[result] + 2678) ) { *(_DWORD *)(v1 + 5792) += 3 * --result + 17; return result; } if ( *(_WORD *)(v1 + 4 * (unsigned __int8)byte_A09D82[result] + 2678) ) { result -= 2; *(_DWORD *)(v1 + 5792) += 3 * result + 17; return result; } if ( *(_WORD *)(v1 + 4 * (unsigned __int8)byte_A09D81[result] + 2678) ) { result -= 3; break; } result -= 4; if ( result < 3 ) { *(_DWORD *)(v1 + 5792) += 3 * result + 17; return result; } } *(_DWORD *)(v1 + 5792) += 3 * result + 17; return result; } //----- (007594F0) -------------------------------------------------------- int __cdecl sub_7594F0(int a1, char *a2, int a3, unsigned __int16 a4) { signed int v4; // ecx __int16 v5; // dx int v6; // ecx char v7; // bl int v8; // edx v4 = *(_DWORD *)(a1 + 5812); if ( v4 <= 13 ) { *(_DWORD *)(a1 + 5812) = v4 + 3; *(_WORD *)(a1 + 5808) |= a4 << v4; } else { v5 = a4 << v4; v6 = *(_DWORD *)(a1 + 8); *(_WORD *)(a1 + 5808) |= v5; *(_BYTE *)(v6 + *(_DWORD *)(a1 + 20)) = *(_BYTE *)(a1 + 5808); v7 = *(_BYTE *)(a1 + 5809); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = v7; v8 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v8 - 13; *(_WORD *)(a1 + 5808) = a4 >> (16 - v8); } return sub_759050(a1, a3, a2, 1); } //----- (007595A0) -------------------------------------------------------- int __cdecl sub_7595A0(int a1) { signed int v1; // ecx int v2; // edx signed int v3; // ecx int v4; // edx int result; // eax signed int v6; // ecx int v7; // edx signed int v8; // ecx int v9; // edx v1 = *(_DWORD *)(a1 + 5812); *(_WORD *)(a1 + 5808) |= 2 << v1; if ( v1 <= 13 ) { *(_DWORD *)(a1 + 5812) = v1 + 3; } else { *(_BYTE *)(*(_DWORD *)(a1 + 8) + (*(_DWORD *)(a1 + 20))++) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v2 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v2 - 13; *(_WORD *)(a1 + 5808) = 2u >> (16 - v2); } v3 = *(_DWORD *)(a1 + 5812); *(_WORD *)(a1 + 5808) = *(_WORD *)(a1 + 5808); if ( v3 <= 9 ) { *(_DWORD *)(a1 + 5812) = v3 + 7; } else { *(_BYTE *)(*(_DWORD *)(a1 + 8) + (*(_DWORD *)(a1 + 20))++) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v4 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v4 - 9; *(_WORD *)(a1 + 5808) = 0; } result = sub_758F70(a1); v6 = *(_DWORD *)(result + 5812); if ( *(_DWORD *)(result + 5804) - v6 + 11 < 9 ) { *(_WORD *)(result + 5808) |= 2 << v6; if ( v6 <= 13 ) { *(_DWORD *)(result + 5812) = v6 + 3; } else { *(_BYTE *)(*(_DWORD *)(result + 8) + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v7 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v7 - 13; *(_WORD *)(result + 5808) = 2u >> (16 - v7); } v8 = *(_DWORD *)(result + 5812); *(_WORD *)(result + 5808) = *(_WORD *)(result + 5808); if ( v8 > 9 ) { *(_BYTE *)(*(_DWORD *)(result + 8) + (*(_DWORD *)(result + 20))++) = *(_BYTE *)(result + 5808); *(_BYTE *)(*(_DWORD *)(result + 20) + *(_DWORD *)(result + 8)) = *(_BYTE *)(result + 5809); v9 = *(_DWORD *)(result + 5812); ++*(_DWORD *)(result + 20); *(_DWORD *)(result + 5812) = v9 - 9; *(_WORD *)(result + 5808) = 0; result = sub_758F70(result); *(_DWORD *)(result + 5804) = 7; return result; } *(_DWORD *)(result + 5812) = v8 + 7; result = sub_758F70(result); } *(_DWORD *)(result + 5804) = 7; return result; } //----- (007597A0) -------------------------------------------------------- int __cdecl sub_7597A0(int a1, char *a2, int a3, int a4) { signed int v4; // eax unsigned int v5; // edx unsigned int v6; // ecx int v7; // edi int v8; // ecx bool v9; // zf signed int v10; // ecx unsigned __int16 v11; // ax __int16 v12; // dx int v13; // ecx int v14; // edx unsigned __int16 v15; // dx __int16 v16; // ax int v17; // ecx int v18; // eax int result; // eax signed int v20; // [esp+Ch] [ebp-4h] v20 = 0; if ( *(_DWORD *)(a1 + 124) <= 0 ) { v6 = a3 + 5; LABEL_7: v5 = v6; goto LABEL_8; } if ( *(_DWORD *)(*(_DWORD *)a1 + 44) == 2 ) sub_758EA0((unsigned __int16 *)a1); sub_759220((_DWORD *)a1, (int *)(a1 + 2832)); sub_759220((_DWORD *)a1, (int *)(a1 + 2844)); v4 = sub_759420(a1); v5 = (unsigned int)(*(_DWORD *)(a1 + 5792) + 10) >> 3; v6 = (unsigned int)(*(_DWORD *)(a1 + 5796) + 10) >> 3; v20 = v4; if ( v6 <= v5 ) goto LABEL_7; LABEL_8: if ( a3 + 4 <= v5 && a2 ) { v7 = a4; sub_7594F0(a1, a2, a3, a4); } else { v7 = a4; v9 = v6 == v5; v10 = *(_DWORD *)(a1 + 5812); if ( v9 ) { v11 = a4 + 2; if ( v10 <= 13 ) { *(_WORD *)(a1 + 5808) |= v11 << v10; *(_DWORD *)(a1 + 5812) = v10 + 3; } else { v12 = v11 << v10; v13 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v12; *(_BYTE *)(v13 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v14 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v14 - 13; *(_WORD *)(a1 + 5808) = v11 >> (16 - v14); } sub_758A90(a1, (int)&unk_A09E60, (int)&unk_A0A2E0); } else { v15 = a4 + 4; if ( v10 <= 13 ) { *(_WORD *)(a1 + 5808) |= v15 << v10; *(_DWORD *)(a1 + 5812) = v10 + 3; } else { v16 = v15 << v10; v17 = *(_DWORD *)(a1 + 20); *(_WORD *)(a1 + 5808) |= v16; *(_BYTE *)(v17 + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5808); *(_BYTE *)(++*(_DWORD *)(a1 + 20) + *(_DWORD *)(a1 + 8)) = *(_BYTE *)(a1 + 5809); v18 = *(_DWORD *)(a1 + 5812); ++*(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 5812) = v18 - 13; *(_WORD *)(a1 + 5808) = v15 >> (16 - v18); } sub_758840(a1, *(_DWORD *)(a1 + 2836) + 1, *(_DWORD *)(a1 + 2848) + 1, v20 + 1); sub_758A90(a1, a1 + 140, a1 + 2432); } } result = sub_757E80(v8, a1); if ( v7 ) result = sub_758FF0(a1); return result; } //----- (00759C50) -------------------------------------------------------- int __cdecl sub_759C50(int a1, _DWORD *a2, unsigned int a3) { unsigned int v3; // esi unsigned int i; // eax unsigned int v5; // edi unsigned int v6; // edx unsigned int v7; // eax unsigned int v8; // edx unsigned int v9; // eax unsigned int v10; // edx unsigned int v11; // eax unsigned int v12; // edx unsigned int v13; // edx unsigned int v14; // eax _DWORD *v15; // ecx v15 = a2; if ( !a2 ) return 0; v3 = a3; for ( i = ~a1; v3; --v3 ) { if ( !((unsigned __int8)v15 & 3) ) break; i = dword_A0A748[(unsigned __int8)(i ^ *(_BYTE *)v15)] ^ (i >> 8); v15 = (_DWORD *)((char *)v15 + 1); } if ( v3 >= 0x20 ) { v5 = v3 >> 5; do { v6 = v15[1] ^ dword_A0B348[(*v15 ^ i) & 0xFF] ^ dword_A0A748[(*v15 ^ i) >> 24] ^ dword_A0AF48[(unsigned __int16)(*(_WORD *)v15 ^ i) >> 8] ^ dword_A0AB48[((*v15 ^ i) >> 16) & 0xFF]; v7 = v15[2] ^ dword_A0B348[(unsigned __int8)v6] ^ dword_A0A748[v6 >> 24] ^ dword_A0AF48[(unsigned __int16)v6 >> 8] ^ dword_A0AB48[(v6 >> 16) & 0xFF]; v8 = v15[3] ^ dword_A0B348[(unsigned __int8)v7] ^ dword_A0A748[v7 >> 24] ^ dword_A0AF48[(unsigned __int16)v7 >> 8] ^ dword_A0AB48[(v7 >> 16) & 0xFF]; v9 = v15[4] ^ dword_A0B348[(unsigned __int8)v8] ^ dword_A0A748[v8 >> 24] ^ dword_A0AF48[(unsigned __int16)v8 >> 8] ^ dword_A0AB48[(v8 >> 16) & 0xFF]; v10 = v15[5] ^ dword_A0B348[(unsigned __int8)v9] ^ dword_A0A748[v9 >> 24] ^ dword_A0AF48[(unsigned __int16)v9 >> 8] ^ dword_A0AB48[(v9 >> 16) & 0xFF]; v15 += 8; v11 = *(v15 - 2) ^ dword_A0B348[(unsigned __int8)v10] ^ dword_A0A748[v10 >> 24] ^ dword_A0AF48[(unsigned __int16)v10 >> 8] ^ dword_A0AB48[(v10 >> 16) & 0xFF]; v3 -= 32; v12 = *(v15 - 1) ^ dword_A0B348[(unsigned __int8)v11] ^ dword_A0A748[v11 >> 24] ^ dword_A0AF48[(unsigned __int16)v11 >> 8] ^ dword_A0AB48[(v11 >> 16) & 0xFF]; i = dword_A0B348[(unsigned __int8)v12] ^ dword_A0A748[v12 >> 24] ^ dword_A0AF48[(unsigned __int16)v12 >> 8] ^ dword_A0AB48[(v12 >> 16) & 0xFF]; --v5; } while ( v5 ); } if ( v3 >= 4 ) { v13 = v3 >> 2; do { v14 = *v15 ^ i; ++v15; v3 -= 4; --v13; i = dword_A0B348[(unsigned __int8)v14] ^ dword_A0A748[v14 >> 24] ^ dword_A0AF48[(unsigned __int16)v14 >> 8] ^ dword_A0AB48[(v14 >> 16) & 0xFF]; } while ( v13 ); } for ( ; v3; --v3 ) { i = dword_A0A748[(unsigned __int8)(i ^ *(_BYTE *)v15)] ^ (i >> 8); v15 = (_DWORD *)((char *)v15 + 1); } return ~i; } //----- (00759C70) -------------------------------------------------------- void *__cdecl sub_759C70(int a1, int a2, int a3) { return malloc(a3 * a2); } //----- (00759C90) -------------------------------------------------------- void __cdecl sub_759C90(int a1, void *a2) { free(a2); } //----- (00759CB0) -------------------------------------------------------- _DWORD *__cdecl sub_759CB0(_DWORD *a1, int a2) { _DWORD *v2; // eax int v3; // edx unsigned int v4; // ebx int v5; // ecx _BYTE *v6; // esi unsigned int v7; // edi int v8; // edx int v9; // ebx unsigned int v10; // eax int v11; // ecx char v12; // dl _BYTE *v13; // eax unsigned int v14; // edx int v15; // edx unsigned int v16; // edx int v17; // ecx char v18; // al int v19; // ecx unsigned int v20; // eax int v21; // edx int v22; // edx int v23; // edx int v24; // edx unsigned int v25; // edx int v26; // ecx unsigned int v27; // eax int v28; // ecx _BYTE *v29; // ecx char v30; // dl int v31; // edx int v32; // eax int v33; // ecx char v34; // dl unsigned int v35; // eax char v36; // dl char v37; // dl unsigned int v38; // edx char v39; // al char v40; // cl unsigned int v41; // ecx unsigned int v42; // edx int v43; // ST44_4 int v44; // edi _DWORD *result; // eax int v46; // [esp+Ch] [ebp-3Ch] unsigned int v47; // [esp+10h] [ebp-38h] int v48; // [esp+14h] [ebp-34h] int v49; // [esp+18h] [ebp-30h] unsigned int v50; // [esp+1Ch] [ebp-2Ch] int v51; // [esp+20h] [ebp-28h] int v52; // [esp+24h] [ebp-24h] int v53; // [esp+28h] [ebp-20h] int v54; // [esp+2Ch] [ebp-1Ch] int v55; // [esp+30h] [ebp-18h] unsigned __int16 v56; // [esp+32h] [ebp-16h] unsigned int v57; // [esp+34h] [ebp-14h] _DWORD *v58; // [esp+38h] [ebp-10h] unsigned int v59; // [esp+3Ch] [ebp-Ch] unsigned int v60; // [esp+40h] [ebp-8h] unsigned int v61; // [esp+40h] [ebp-8h] unsigned __int8 *v62; // [esp+44h] [ebp-4h] unsigned int v63; // [esp+54h] [ebp+Ch] v2 = (_DWORD *)a1[7]; v3 = *a1 - 1; v62 = (unsigned __int8 *)v3; v4 = v2[12]; v5 = a1[4]; v59 = a1[1] + v3 - 5; v6 = (_BYTE *)(a1[3] - 1); v48 = (int)&v6[v5 - a2]; v50 = (unsigned int)&v6[v5 - 257]; v52 = v2[8]; v47 = v2[9]; v57 = v2[10]; v51 = v2[11]; v54 = v2[17]; v53 = v2[18]; v58 = (_DWORD *)a1[7]; v7 = v2[13]; v8 = (1 << v2[19]) - 1; v46 = (1 << v2[19]) - 1; v49 = (1 << v2[20]) - 1; while ( 1 ) { if ( v7 < 0xF ) { v9 = (v62[1] << v7) + v4; v62 += 2; v4 = (*v62 << (v7 + 8)) + v9; v7 += 16; } v10 = *(_DWORD *)(v54 + 4 * (v4 & v8)); v11 = (unsigned __int8)(*(_WORD *)(v54 + 4 * (v4 & v8)) >> 8); v4 >>= v11; v7 -= v11; v12 = v10; if ( (_BYTE)v10 ) break; LABEL_8: ++v6; v13 = (_BYTE *)(v10 >> 16); LABEL_52: *v6 = (_BYTE)v13; LABEL_53: v42 = v59; if ( (unsigned int)v62 >= v59 || (unsigned int)v6 >= v50 ) goto LABEL_63; v8 = v46; } while ( 1 ) { if ( v12 & 0x10 ) { v14 = v12 & 0xF; v63 = v10 >> 16; if ( v14 ) { if ( v7 < v14 ) { v4 += *++v62 << v7; v7 += 8; } v63 += v4 & ((1 << v14) - 1); v4 >>= v14; v7 -= v14; } if ( v7 < 0xF ) { v15 = v62[1]; v62 += 2; v4 += (*v62 << (v7 + 8)) + (v15 << v7); v7 += 16; } v16 = *(_DWORD *)(v53 + 4 * (v4 & v49)); v17 = (unsigned __int8)(*(_WORD *)(v53 + 4 * (v4 & v49)) >> 8); v18 = *(_DWORD *)(v53 + 4 * (v4 & v49)); v4 >>= v17; v7 -= v17; v56 = HIWORD(v16); if ( !(v16 & 0x10) ) { while ( !(v18 & 0x40) ) { v16 = *(_DWORD *)(v53 + 4 * (v56 + (v4 & ((1 << v18) - 1)))); v19 = (unsigned __int8)(*(_WORD *)(v53 + 4 * (v56 + (v4 & ((1 << v18) - 1)))) >> 8); v18 = *(_DWORD *)(v53 + 4 * (v56 + (v4 & ((1 << v18) - 1)))); v4 >>= v19; v7 -= v19; v56 = HIWORD(v16); if ( v16 & 0x10 ) goto LABEL_18; } a1[6] = "invalid distance code"; goto LABEL_61; } LABEL_18: v20 = v18 & 0xF; v60 = v16 >> 16; if ( v7 < v20 ) { v21 = (v62++)[1]; v22 = v21 << v7; v7 += 8; v4 += v22; if ( v7 < v20 ) { v23 = (v62++)[1]; v4 += v23 << v7; v7 += 8; } } v7 -= v20; v24 = v4 & ((1 << v20) - 1); v4 >>= v20; v25 = v24 + v60; v26 = (int)&v6[-v48]; v61 = v25; if ( v25 > (unsigned int)&v6[-v48] ) { v27 = v25 - v26; v55 = v25 - v26; if ( v25 - v26 > v47 ) { a1[6] = "invalid distance too far back"; *v58 = 27; goto LABEL_62; } v28 = v51 - 1; if ( !v57 ) { v29 = (_BYTE *)(v52 - v27 + v28); if ( v27 < v63 ) { v63 -= v27; do { v30 = (v29++)[1]; ++v6; --v27; *v6 = v30; } while ( v27 ); goto LABEL_39; } LABEL_40: if ( v63 > 2 ) { v38 = (v63 - 3) / 3 + 1; do { v63 -= 3; v6[1] = v29[1]; v6[2] = v29[2]; v39 = v29[3]; v29 += 3; v6 += 3; --v38; *v6 = v39; } while ( v38 ); } if ( v63 ) { *++v6 = v29[1]; if ( v63 > 1 ) { LOBYTE(v13) = v29[2]; LABEL_51: ++v6; goto LABEL_52; } } goto LABEL_53; } if ( v57 >= v27 ) { v29 = (_BYTE *)(v57 - v27 + v28); if ( v27 >= v63 ) goto LABEL_40; v63 -= v27; do { v37 = (v29++)[1]; ++v6; --v27; *v6 = v37; } while ( v27 ); } else { v31 = v52 + v57 - v27; v32 = v55 - v57; v29 = (_BYTE *)(v31 + v28); if ( v55 - v57 >= v63 ) goto LABEL_40; v63 -= v32; v33 = v29 - v6; do { v34 = (v6++)[v33 + 1]; --v32; *v6 = v34; } while ( v32 ); v35 = v57; v29 = (_BYTE *)(v51 - 1); if ( v57 >= v63 ) goto LABEL_40; v63 -= v57; do { v36 = (v29++)[1]; ++v6; --v35; *v6 = v36; } while ( v35 ); } LABEL_39: v29 = &v6[-v61]; goto LABEL_40; } v13 = &v6[-v25]; do { v6[1] = v13[1]; v6[2] = v13[2]; v40 = v13[3]; v13 += 3; v6 += 3; *v6 = v40; v41 = v63 - 3; v63 = v41; } while ( v41 > 2 ); if ( v41 ) { *++v6 = v13[1]; if ( v41 > 1 ) { LOBYTE(v13) = v13[2]; goto LABEL_51; } } goto LABEL_53; } if ( v12 & 0x40 ) break; v10 = *(_DWORD *)(v54 + 4 * ((v10 >> 16) + (v4 & ((1 << v12) - 1)))); v4 >>= SBYTE1(v10); v7 -= BYTE1(v10); v12 = v10; if ( !(_BYTE)v10 ) goto LABEL_8; } if ( v12 & 0x20 ) { *v58 = 11; goto LABEL_62; } a1[6] = "invalid literal/length code"; LABEL_61: *v58 = 27; LABEL_62: v42 = v59; LABEL_63: v43 = (int)&v62[-(v7 >> 3)]; v44 = v7 - 8 * (v7 >> 3); *a1 = v43 + 1; a1[3] = v6 + 1; a1[4] = v50 - (_DWORD)v6 + 257; result = v58; a1[1] = v42 - v43 + 5; v58[13] = v44; v58[12] = ((1 << v44) - 1) & v4; return result; } //----- (0075A0C0) -------------------------------------------------------- signed int __cdecl sub_75A0C0(int a1, int a2, unsigned int a3, _DWORD **a4, unsigned int *a5, char *a6) { unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // eax signed int result; // eax unsigned int v10; // edi int v11; // esi unsigned int v12; // eax unsigned int v13; // eax __int16 v14; // cx unsigned int v15; // eax unsigned int v16; // esi unsigned int v17; // ebx signed int v18; // edi unsigned __int16 *v19; // edx __int16 v20; // ax signed int v21; // ecx int v22; // eax signed int v23; // eax signed int v24; // edx _DWORD *v25; // ecx unsigned int i; // eax int v27; // edx unsigned int v28; // eax bool v29; // zf char v30; // cl unsigned int v31; // edx signed int v32; // eax unsigned __int16 *v33; // esi int v34; // eax _DWORD *v35; // edx unsigned int j; // eax int v37; // [esp+10h] [ebp-88h] int v38; // [esp+18h] [ebp-80h] signed int v39; // [esp+1Ch] [ebp-7Ch] char *v40; // [esp+20h] [ebp-78h] unsigned __int16 *v41; // [esp+24h] [ebp-74h] int v42; // [esp+28h] [ebp-70h] signed int v43; // [esp+2Ch] [ebp-6Ch] char *v44; // [esp+30h] [ebp-68h] signed int v45; // [esp+34h] [ebp-64h] unsigned int v46; // [esp+38h] [ebp-60h] _DWORD *v47; // [esp+3Ch] [ebp-5Ch] unsigned int v48; // [esp+40h] [ebp-58h] unsigned int v49; // [esp+48h] [ebp-50h] unsigned int v50; // [esp+4Ch] [ebp-4Ch] int v51; // [esp+50h] [ebp-48h] int v52; // [esp+50h] [ebp-48h] __int16 v53; // [esp+54h] [ebp-44h] __int16 v54; // [esp+56h] [ebp-42h] int v55; // [esp+74h] [ebp-24h] int v56; // [esp+78h] [ebp-20h] int v57; // [esp+7Ch] [ebp-1Ch] int v58; // [esp+80h] [ebp-18h] int v59; // [esp+84h] [ebp-14h] int v60; // [esp+88h] [ebp-10h] int v61; // [esp+8Ch] [ebp-Ch] int v62; // [esp+90h] [ebp-8h] v55 = 0; v56 = 0; v57 = 0; v58 = 0; v59 = 0; v60 = 0; v61 = 0; v62 = 0; v6 = 0; if ( a3 ) { do ++*((_WORD *)&v55 + *(unsigned __int16 *)(a2 + 2 * v6++)); while ( v6 < a3 ); } v7 = *a5; v49 = *a5; v8 = 15; do { if ( *((_WORD *)&v55 + v8) ) break; --v8; } while ( v8 >= 1 ); v48 = v8; if ( v7 > v8 ) { v49 = v8; v7 = v8; } if ( !v8 ) { **a4 = 320; ++*a4; **a4 = 320; ++*a4; *a5 = 1; return 0; } v10 = 1; while ( !*((_WORD *)&v55 + v10) ) { if ( *((_WORD *)&v55 + v10 + 1) ) { ++v10; break; } if ( *((_WORD *)&v56 + v10) ) { v10 += 2; break; } if ( *((_WORD *)&v56 + v10 + 1) ) { v10 += 3; break; } if ( *((_WORD *)&v57 + v10) ) { v10 += 4; break; } v10 += 5; if ( v10 > 0xF ) break; } if ( v7 < v10 ) v49 = v10; v11 = 1; v12 = 1; do { v11 = 2 * v11 - *((unsigned __int16 *)&v55 + v12); if ( v11 < 0 ) return -1; ++v12; } while ( v12 <= 0xF ); if ( v11 > 0 && (!a1 || a3 - (unsigned __int16)v55 != 1) ) return -1; v54 = 0; v13 = 2; do { v14 = *(_WORD *)((char *)&v55 + v13) + *(__int16 *)((char *)&v53 + v13); v13 += 2; *(__int16 *)((char *)&v53 + v13) = v14; } while ( v13 < 0x1E ); v15 = 0; if ( a3 ) { do { if ( *(_WORD *)(a2 + 2 * v15) ) *(_WORD *)&a6[2 * (unsigned __int16)(*(&v53 + *(unsigned __int16 *)(a2 + 2 * v15)))++] = v15; ++v15; } while ( v15 < a3 ); } if ( a1 ) { if ( a1 == 1 ) { v44 = (char *)&unk_A0C820 - 514; v40 = (char *)&unk_A0C860 - 514; v45 = 256; } else { v44 = (char *)&unk_A0C8A0; v40 = (char *)&unk_A0C8E0; v45 = -1; } } else { v40 = a6; v44 = a6; v45 = 19; } v47 = *a4; v50 = v10; v16 = 0; v17 = 0; v18 = 1 << v49; v43 = -1; v39 = 1 << v49; v46 = 1 << v49; v38 = (1 << v49) - 1; if ( a1 == 1 && (unsigned int)(1 << v49) >= 0x506 ) return 1; v19 = (unsigned __int16 *)a6; v41 = (unsigned __int16 *)a6; while ( 1 ) { v20 = *v19; v21 = *v19; if ( v21 < v45 ) { LOBYTE(v51) = 0; LABEL_52: HIWORD(v51) = v20; goto LABEL_53; } if ( v21 <= v45 ) { LOBYTE(v51) = 96; v20 = 0; goto LABEL_52; } v22 = 2 * *v19; LOBYTE(v51) = v40[v22]; HIWORD(v51) = *(_WORD *)&v44[v22]; LABEL_53: v23 = 1 << (v50 - v17); v24 = v18; v25 = &v47[v18 + (v16 >> v17)]; do { v25 -= v23; v24 -= v23; BYTE1(v51) = v50 - v17; *v25 = v51; } while ( v24 ); for ( i = 1 << (v50 - 1); i & v16; i >>= 1 ) ; if ( i ) { v27 = v16 & (i - 1); v16 = i + v27; v42 = i + v27; } else { v16 = 0; v42 = 0; } v28 = v50; v19 = v41 + 1; v29 = *((_WORD *)&v55 + v50) == 1; --*((_WORD *)&v55 + v28); ++v41; if ( !v29 ) goto LABEL_63; if ( v50 == v48 ) break; v28 = *(unsigned __int16 *)(a2 + 2 * *v19); v50 = *(unsigned __int16 *)(a2 + 2 * *v19); LABEL_63: if ( v28 <= v49 || (v37 = v16 & v38, (v16 & v38) == v43) ) { v18 = v39; } else { if ( !v17 ) v17 = v49; v30 = v50 - v17; v47 += v39; v31 = v50; v32 = 1 << (v50 - v17); if ( v50 < v48 ) { v33 = (unsigned __int16 *)((char *)&v55 + 2 * v50); do { v34 = v32 - *v33; if ( v34 <= 0 ) break; ++v31; ++v30; ++v33; v32 = 2 * v34; } while ( v31 < v48 ); v16 = v42; } result = 1; v18 = 1 << v30; v46 += 1 << v30; v39 = 1 << v30; if ( a1 == 1 && v46 >= 0x506 ) return result; LOBYTE((*a4)[v37]) = v30; BYTE1((*a4)[v37]) = v49; HIWORD((*a4)[v37]) = v47 - *a4; v19 = v41; v43 = v37; } } LOBYTE(v52) = 64; BYTE1(v52) = v50 - v17; HIWORD(v52) = 0; if ( v16 ) { v35 = v47; while ( 1 ) { if ( v17 && (v16 & v38) != v43 ) { LOBYTE(v28) = v49; v35 = *a4; v17 = 0; LOBYTE(v50) = v49; BYTE1(v52) = v49; } v35[v16 >> v17] = v52; for ( j = 1 << (v28 - 1); j & v16; j >>= 1 ) ; if ( !j ) break; v16 = j + ((j - 1) & v16); if ( !v16 ) break; LOBYTE(v28) = v50; } } *a4 += v46; *a5 = v49; return 0; } //----- (0075A550) -------------------------------------------------------- char __thiscall sub_75A550(_DWORD *this, int a2) { int v2; // edx int v3; // eax signed int v5; // edi _BYTE *v6; // edx int v7; // eax if ( *(_DWORD *)(a2 + 4) != this[1] ) return 0; if ( *(_BYTE *)a2 != *(_BYTE *)this ) return 0; if ( *(_DWORD *)(a2 + 8) != this[2] ) return 0; if ( *(_BYTE *)(a2 + 1) != *((_BYTE *)this + 1) ) return 0; v2 = *(_DWORD *)(a2 + 12); v3 = this[3]; if ( v2 != v3 && v3 != -1 && v2 != -1 ) return 0; v5 = 0; v6 = (_BYTE *)(a2 + 28); v7 = (int)(this + 5); while ( *(_DWORD *)(a2 - (_DWORD)this + v7) == *(_DWORD *)v7 && *((_DWORD *)v6 - 1) == *(_DWORD *)(v7 + 4) && *v6 == *(_BYTE *)(v7 + 8) && v6[1] == *(_BYTE *)(v7 + 9) ) { ++v5; v6 += 12; v7 += 12; if ( v5 >= 4 ) return 1; } return 0; } //----- (0075A5E0) -------------------------------------------------------- unsigned int __thiscall sub_75A5E0(int this, int a2, _BYTE *a3) { unsigned int result; // eax unsigned int v4; // esi result = *(unsigned __int16 *)(this + 76); v4 = 0; if ( result & 0xFFFFFFFE ) { result = (unsigned int)a3; do { ++v4; *(_BYTE *)result = *(_BYTE *)(a2 - (_DWORD)a3 + result) - *(_BYTE *)(this + 66); ++result; } while ( v4 < (unsigned int)*(unsigned __int16 *)(this + 76) >> 1 ); } return result; } //----- (0075A620) -------------------------------------------------------- _BYTE *__thiscall sub_75A620(int this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi result = 0; v4 = 0; if ( *(_WORD *)(this + 76) > 0u ) { result = a3; do { ++v4; *result = result[a2 - (_DWORD)a3] - *(_BYTE *)(this + 66); ++result; } while ( v4 < *(unsigned __int16 *)(this + 76) ); } return result; } //----- (0075A650) -------------------------------------------------------- _BYTE *__thiscall sub_75A650(unsigned __int16 *this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi _BYTE *v5; // edx result = 0; v4 = 0; if ( this[38] > 0u ) { result = a3; v5 = (_BYTE *)(a2 + 2); do { *result = *(v5 - 2); result[1] = *(v5 - 1); result[2] = *v5; result[3] = -1; ++v4; result += 4; v5 += 3; } while ( v4 < this[38] ); } return result; } //----- (0075A6A0) -------------------------------------------------------- _BYTE *__thiscall sub_75A6A0(unsigned __int16 *this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi _BYTE *v5; // edx result = 0; v4 = 0; if ( this[38] > 0u ) { result = a3; v5 = (_BYTE *)(a2 + 2); do { *result = *(v5 - 2); result[1] = *(v5 - 1); result[2] = *v5; result[3] = v5[1]; ++v4; result += 4; v5 += 4; } while ( v4 < this[38] ); } return result; } //----- (0075A6F0) -------------------------------------------------------- bool __stdcall sub_75A6F0(const char *a1) { return sub_96C4B0(a1, ".png") == 0; } //----- (0075A710) -------------------------------------------------------- int __thiscall sub_75A710(_DWORD *this, int a2, int a3) { _DWORD *v3; // ST00_4 int (__cdecl *v4)(_DWORD *, int, int, _DWORD **, signed int); // ecx _DWORD *v6; // [esp+0h] [ebp-4h] v6 = this; v3 = this; v4 = (int (__cdecl *)(_DWORD *, int, int, _DWORD **, signed int))this[1]; v6 = (_DWORD *)1; return v4(v3, a2, a3, &v6, 1); } //----- (0075A740) -------------------------------------------------------- void __thiscall sub_75A740(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[19]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[19] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0075A790) -------------------------------------------------------- char *__thiscall sub_75A790(char *this) { char *v1; // ebx int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *(_DWORD *)v1 = &NiPNGReader::`vftable'; sub_86A420((_DWORD *)v1 + 22); *((_WORD *)v1 + 34) = 0; v1[70] = 0; *((_DWORD *)v1 + 19) = 0; *((_DWORD *)v1 + 20) = 0; *((_WORD *)v1 + 42) = 0; *((_DWORD *)v1 + 16) = 0; *((_DWORD *)v1 + 18) = 0; qmemcpy(v1 + 88, &unk_ABDB18, 0x44u); *((_DWORD *)v1 + 39) = 0; *((_DWORD *)v1 + 40) = 0; *((_DWORD *)v1 + 41) = 0; *((_DWORD *)v1 + 42) = 0; *((_DWORD *)v1 + 43) = 0; return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A0C938: using guessed type void *NiPNGReader::`vftable'; //----- (0075A810) -------------------------------------------------------- char *__thiscall sub_75A810(void *this, char a2) { char *v2; // esi void *v3; // ST04_4 v2 = (char *)this; v3 = (void *)*((_DWORD *)this + 40); *(_DWORD *)this = &NiPNGReader::`vftable'; operator delete(v3); operator delete(*((void **)v2 + 42)); *(_DWORD *)v2 = &NiImageReader::`vftable'; DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 4)); if ( a2 & 1 ) operator delete(v2); return v2; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A0C938: using guessed type void *NiPNGReader::`vftable'; //----- (0075A860) -------------------------------------------------------- int __cdecl sub_75A860(int a1, int a2, int a3) { int v3; // ecx int v4; // eax int (__cdecl *v5)(int, int, int, int *, signed int); // edx int v7; // [esp+0h] [ebp-4h] v7 = v3; v4 = sub_944FF0(a1); v5 = *(int (__cdecl **)(int, int, int, int *, signed int))(v4 + 4); v7 = 1; return v5(v4, a2, a3, &v7, 1); } //----- (0075A890) -------------------------------------------------------- _DWORD *__thiscall sub_75A890(_BYTE *this, int a2, int a3) { char *v3; // eax _DWORD *result; // eax int v5; // edi int v6; // esi void *v7; // ST20_4 void *v8; // eax _BYTE *v9; // eax int v10; // ecx unsigned int i; // edx unsigned int v12; // eax _BYTE *v13; // ecx int v14; // ebx _DWORD *v15; // eax _DWORD *v16; // eax volatile LONG *v17; // eax volatile LONG *v18; // edi int v19; // ecx unsigned int *v20; // edx unsigned int v21; // eax int v22; // ebx int v23; // eax unsigned int v24; // ecx char v25; // [esp+Ch] [ebp-1Ch] _BYTE *v26; // [esp+10h] [ebp-18h] int v27; // [esp+14h] [ebp-14h] volatile LONG *v28; // [esp+18h] [ebp-10h] _DWORD *v29; // [esp+1Ch] [ebp-Ch] char *v30; // [esp+20h] [ebp-8h] int v31; // [esp+24h] [ebp-4h] v26 = this; (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)a2 + 12))(0, 0); v30 = 0; v31 = 0; v3 = (char *)sub_946120("1.2.8", (int)&v25, (int)nullsub_6, (int)nullsub_6); v30 = v3; if ( !v3 ) return 0; v31 = (int)sub_945070((int)v3); if ( !v31 ) { sub_946150((_DWORD **)&v30, 0, 0); return 0; } if ( _setjmp3(v30, 0) ) { sub_946150((_DWORD **)&v30, (void **)&v31, 0); result = 0; } else { sub_946280(v30, a2, (int)sub_75A860); sub_944980((int)v30, 0); sub_945F70(v30, v31, 0); v5 = v31; v6 = (int)v26; if ( *(_DWORD *)(v31 + 16) ) { v26[84] = 1; *(_WORD *)(v6 + 68) = *(_WORD *)(v5 + 20); if ( *(_DWORD *)(v6 + 164) < (unsigned int)*(unsigned __int16 *)(v5 + 20) ) { v7 = *(void **)(v6 + 168); *(_DWORD *)(v6 + 164) = *(unsigned __int16 *)(v5 + 20); operator delete(v7); v8 = operator new(4 * *(unsigned __int16 *)(v6 + 68)); v5 = v31; *(_DWORD *)(v6 + 168) = v8; } v9 = *(_BYTE **)(v6 + 168); v10 = 0; for ( i = 0; i < *(unsigned __int16 *)(v6 + 68); v5 = v31 ) { v9[2] = *(_BYTE *)(*(_DWORD *)(v5 + 16) + v10 + 2); v9[1] = *(_BYTE *)(*(_DWORD *)(v31 + 16) + v10 + 1); *v9 = *(_BYTE *)(v10 + *(_DWORD *)(v31 + 16)); v9[3] = -1; ++i; v9 += 4; v10 += 3; } if ( *(_DWORD *)(v5 + 76) ) { v12 = 0; if ( *(_WORD *)(v5 + 22) > 0u ) { v13 = (_BYTE *)(*(_DWORD *)(v6 + 168) + 3); do { *v13 = *(_BYTE *)(v12 + *(_DWORD *)(v5 + 76)); v5 = v31; ++v12; v13 += 4; } while ( v12 < *(unsigned __int16 *)(v31 + 22) ); } } } v14 = a3; if ( a3 && **(_DWORD **)(a3 + 84) == *(unsigned __int16 *)(v6 + 76) && **(_DWORD **)(a3 + 88) == *(unsigned __int16 *)(v6 + 78) && sub_75A550((_DWORD *)(a3 + 8), v6 + 88) ) { v29 = (_DWORD *)a3; } else { v15 = operator new(0x70u); if ( v15 ) v29 = sub_8698C0( v15, *(unsigned __int16 *)(v6 + 76), *(unsigned __int16 *)(v6 + 78), (_DWORD *)(v6 + 88), 1u, 1); else v29 = 0; v14 = (int)v29; v5 = v31; } if ( *(_BYTE *)(v6 + 84) ) { v16 = operator new(0x24u); if ( v16 ) { v17 = (volatile LONG *)sub_875720( v16, *(_BYTE *)(v6 + 83), *(unsigned __int16 *)(v6 + 68), *(void **)(v6 + 168)); v28 = v17; } else { v28 = 0; v17 = 0; } v18 = *(volatile LONG **)(v14 + 76); if ( v18 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement(v18 + 1) && v18 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v18)(v18, 1); v17 = v28; } *(_DWORD *)(v14 + 76) = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } v5 = v31; } v19 = *(_DWORD *)(v14 + 80) + **(_DWORD **)(v14 + 92); v20 = *(unsigned int **)(v14 + 84); v21 = *v20; v22 = *v20 * *(_DWORD *)(v14 + 100); v28 = (volatile LONG *)v19; if ( !v22 ) v22 = v21 >> 1; if ( *(_BYTE *)(v6 + 85) ) { v19 += v22 * (*(unsigned __int16 *)(v6 + 78) - 1); v28 = (volatile LONG *)v19; v22 = -v22; } v27 = 0; if ( *(_WORD *)(v6 + 78) > 0u ) { while ( 1 ) { v23 = *(_DWORD *)(*(_DWORD *)(v5 + 248) + 4 * v27); *(_DWORD *)(v6 + 160) = v23; (*(void (__thiscall **)(int, int, int))(v6 + 172))(v6, v23, v19); v24 = *(unsigned __int16 *)(v6 + 78); v28 = (volatile LONG *)((char *)v28 + v22); if ( ++v27 >= v24 ) break; v5 = v31; v19 = (int)v28; } } *(_DWORD *)(v6 + 160) = 0; sub_946150((_DWORD **)&v30, (void **)&v31, 0); result = v29; } return result; } //----- (0075ABD0) -------------------------------------------------------- int __cdecl sub_75ABD0(int a1, int a2) { int v2; // ecx int (__cdecl *v3)(int, int, signed int, int *, signed int); // edx int v5; // [esp+0h] [ebp-4h] v5 = v2; v3 = *(int (__cdecl **)(int, int, signed int, int *, signed int))(a1 + 4); v5 = 4; return v3(a1, a2, 4, &v5, 1); } //----- (0075AC00) -------------------------------------------------------- char __thiscall sub_75AC00(char *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, void *a5, _BYTE *a6, _DWORD *a7) { int v7; // esi char *v8; // ebx void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v11)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v13)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v14)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v15)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v16)(int, char *, signed int, int *, signed int); // edx void (__cdecl *v17)(int, char *, signed int, int *, signed int); // eax int v18; // ecx int v19; // eax unsigned __int8 *v20; // edi void (__cdecl *v21)(int, unsigned __int8 *, signed int, int *, signed int); // ecx unsigned __int8 *v22; // edi void (__cdecl *v23)(int, unsigned __int8 *, signed int, int *, signed int); // edx void (__cdecl *v24)(int, char *, signed int, int *, signed int); // ecx void (__cdecl *v25)(int, char *, signed int, int *, signed int); // ecx void (__cdecl *v26)(int, char *, signed int, int *, signed int); // ecx void (__cdecl *v27)(int, char *, signed int, int *, signed int); // ecx void (__cdecl *v28)(int, char *, signed int, int *, signed int); // ecx char v29; // al char v30; // dl char v31; // cl bool v32; // zf int v33; // eax void *v34; // edi const void *v35; // esi unsigned __int8 *v36; // ecx void *v37; // edi const void *v38; // esi _BYTE *v39; // eax char v41; // [esp+Ch] [ebp-Ch] int v42; // [esp+10h] [ebp-8h] char v43; // [esp+16h] [ebp-2h] char v44; // [esp+17h] [ebp-1h] v7 = a2; v8 = this; *a7 = 1; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v9(v7, this + 36, 1, &v42, 1); v10 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v10(v7, v8 + 37, 1, &v42, 1); v11 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v11(v7, v8 + 38, 1, &v42, 1); v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v12(v7, v8 + 39, 1, &v42, 1); v13 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v13(v7, v8 + 40, 1, &v42, 1); v14 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v14(v7, v8 + 41, 1, &v42, 1); v15 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v15(v7, v8 + 42, 1, &v42, 1); v42 = 1; (*(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4))(v7, v8 + 43, 1, &v42, 1); v16 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 4; v16(v7, v8 + 44, 4, &v42, 1); *((_DWORD *)v8 + 11) = (unsigned __int8)v8[47] + (((unsigned __int8)v8[46] + (((unsigned __int8)v8[45] + ((unsigned __int8)v8[44] << 8)) << 8)) << 8); v17 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 4; v17(v7, v8 + 48, 4, &v42, 1); v18 = *((_DWORD *)v8 + 12); v19 = (int)(v8 + 52); *(_WORD *)v19 = *((_WORD *)v8 + 24); *(_BYTE *)(v19 + 2) = BYTE2(v18); *(_WORD *)(v19 + 3) = HIBYTE(v18); if ( !strcmp(v8 + 52, "IHDR") ) { v20 = a3; v21 = *(void (__cdecl **)(int, unsigned __int8 *, signed int, int *, signed int))(v7 + 4); v42 = 4; v21(v7, a3, 4, &v42, 1); *(_DWORD *)v20 = v20[3] + ((v20[2] + ((v20[1] + (*v20 << 8)) << 8)) << 8); v22 = a4; v23 = *(void (__cdecl **)(int, unsigned __int8 *, signed int, int *, signed int))(v7 + 4); v42 = 4; v23(v7, a4, 4, &v42, 1); *(_DWORD *)v22 = v22[3] + ((v22[2] + ((v22[1] + (*v22 << 8)) << 8)) << 8); v24 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v24(v7, (char *)&a7 + 3, 1, &v42, 1); v25 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v25(v7, v8 + 65, 1, &v42, 1); v26 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v26(v7, (char *)&a2 + 3, 1, &v42, 1); v42 = 1; (*(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4))(v7, &v44, 1, &v42, 1); v27 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 1; v27(v7, &v43, 1, &v42, 1); v28 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v42 = 4; v28(v7, &v41, 4, &v42, 1); } v29 = HIBYTE(a7); switch ( v8[65] ) { case 0: case 2: v30 = 2 * HIBYTE(a7); v8[84] = 0; v31 = v30 + v29; goto LABEL_8; case 3: v8[80] = HIBYTE(a7); v8[84] = 1; break; case 4: v8[80] = 4 * HIBYTE(a7); v8[84] = 0; break; case 6: v31 = 4 * HIBYTE(a7); *(_WORD *)(v8 + 83) = 1; LABEL_8: v8[80] = v31; break; default: break; } switch ( v8[80] ) { case 4: v8[82] = 0; *((_DWORD *)v8 + 43) = sub_75A5E0; break; case 8: v8[82] = 1; *((_DWORD *)v8 + 43) = sub_75A620; break; case 0xF: case 0x10: v8[82] = 2; break; case 0x18: v8[82] = 3; *((_DWORD *)v8 + 43) = sub_75A650; break; case 0x20: v8[82] = 4; *((_DWORD *)v8 + 43) = sub_75A6A0; break; default: break; } v32 = v8[84] == 0; v8[83] = 1; if ( v32 ) { v33 = (int)(v8 + 88); v35 = &unk_ABDAD0; v34 = v8 + 88; } else { v32 = v29 == 4; v33 = (int)(v8 + 88); v34 = v8 + 88; if ( v32 ) v35 = &unk_ABD9F8; else v35 = &unk_ABDA88; } qmemcpy(v34, v35, 0x44u); v36 = a4; v37 = a5; *((_WORD *)v8 + 38) = *(_WORD *)a3; v38 = (const void *)v33; v39 = a6; *((_WORD *)v8 + 39) = *(_WORD *)v36; qmemcpy(v37, v38, 0x44u); *v39 = 0; return 1; } //----- (0075AFB0) -------------------------------------------------------- _DWORD *__thiscall sub_75AFB0(_BYTE *this, int a2, int a3) { _BYTE *v3; // esi _DWORD *result; // eax char v5; // [esp+Ch] [ebp-58h] char v6; // [esp+10h] [ebp-54h] char v7; // [esp+14h] [ebp-50h] char v8; // [esp+1Bh] [ebp-49h] char v9; // [esp+1Ch] [ebp-48h] v3 = this; sub_86A420(&v9); if ( (*(unsigned __int8 (__thiscall **)(_BYTE *, int, char *, char *, char *, char *, char *))(*(_DWORD *)v3 + 12))( v3, a2, &v6, &v7, &v9, &v8, &v5) ) { result = sub_75A890(v3, a2, a3); } else { result = 0; } return result; } //----- (0075B030) -------------------------------------------------------- int *__usercall sub_75B030@(signed int a1@, _DWORD *a2@) { int **v2; // edx int *result; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of v2 = (int **)a2[4]; if ( a1 > 0 ) { result = &(*v2)[2 * a1]; if ( (unsigned int)result < a2[2] ) return result; return (int *)&unk_A0CDD0; } if ( a1 > -1001000 ) return (int *)(a2[2] + 8 * a1); if ( a1 == -1001000 ) return (int *)(a2[3] + 40); v4 = -1001000 - a1; if ( (*v2)[1] == 2146936086 ) return (int *)&unk_A0CDD0; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; result = (int *)(v5 + 8 * v4 + 8); if ( !((unsigned __int8)(v8 ^ v9) | v7) ) return (int *)&unk_A0CDD0; return result; } //----- (0075B080) -------------------------------------------------------- int __cdecl sub_75B080(_DWORD *a1, int *a2) { return sub_7600D0(a1, *a2); } //----- (0075B0A0) -------------------------------------------------------- BOOL __cdecl sub_75B0A0(_DWORD *a1, int a2) { int v2; // ecx int v3; // eax int v4; // edi BOOL result; // eax unsigned int v6; // ecx v2 = a2; v3 = a1[2]; v4 = a1[4]; if ( (a1[6] - v3) >> 3 > a2 ) { result = 1; goto LABEL_7; } if ( ((v3 - a1[7]) >> 3) + 5 > 1000000 - a2 ) return 0; result = sub_75FF60((int)a1, (void (__cdecl *)(int, int))sub_75B080, (int)&a2) == 0; if ( result ) { v2 = a2; LABEL_7: v6 = a1[2] + 8 * v2; if ( *(_DWORD *)(v4 + 4) < v6 ) *(_DWORD *)(v4 + 4) = v6; } return result; } //----- (0075B110) -------------------------------------------------------- _DWORD *__cdecl sub_75B110(int a1, int a2, signed int a3) { _DWORD *result; // eax signed int i; // ecx _DWORD *v5; // edx if ( a1 != a2 ) { result = (_DWORD *)a3; *(_DWORD *)(a1 + 8) += -8 * a3; for ( i = 0; i < a3; result[1] = v5[1] ) { result = *(_DWORD **)(a2 + 8); v5 = (_DWORD *)(*(_DWORD *)(a1 + 8) + 8 * i); *(_DWORD *)(a2 + 8) = result + 2; *result = *v5; ++i; } } return result; } //----- (0075B160) -------------------------------------------------------- int __cdecl sub_75B160(int a1, int a2) { int v2; // ecx int result; // eax v2 = *(_DWORD *)(a1 + 12); result = *(_DWORD *)(v2 + 152); *(_DWORD *)(v2 + 152) = a2; return result; } //----- (0075B180) -------------------------------------------------------- void *__cdecl sub_75B180(int a1) { void *result; // eax if ( a1 ) result = *(void **)(*(_DWORD *)(a1 + 12) + 160); else result = &unk_A0C9E8; return result; } //----- (0075B1A0) -------------------------------------------------------- int __cdecl sub_75B1A0(int a1, unsigned int a2) { int result; // eax if ( a2 >= 0xFFF0B9D9 || a2 == 0 ) result = a2 + ((*(_DWORD *)(a1 + 8) - **(_DWORD **)(a1 + 16)) >> 3); else result = a2; return result; } //----- (0075B1D0) -------------------------------------------------------- int __cdecl sub_75B1D0(int a1) { return (*(_DWORD *)(a1 + 8) - **(_DWORD **)(a1 + 16) - 8) >> 3; } //----- (0075B1F0) -------------------------------------------------------- int __cdecl sub_75B1F0(int a1, int a2) { int result; // eax unsigned int i; // ecx result = a1; if ( a2 < 0 ) { *(_DWORD *)(a1 + 8) += 8 * a2 + 8; } else { for ( i = **(_DWORD **)(a1 + 16) + 8 * a2 + 8; *(_DWORD *)(a1 + 8) < i; *(_DWORD *)(a1 + 8) += 8 ) *(_DWORD *)(*(_DWORD *)(a1 + 8) + 4) = 2146936064; *(_DWORD *)(a1 + 8) = i; } return result; } //----- (0075B240) -------------------------------------------------------- _DWORD *__cdecl sub_75B240(_DWORD *a1, signed int a2) { int **v2; // esi char *v3; // eax int v4; // eax int v5; // ecx int v6; // esi bool v7; // zf bool v8; // sf unsigned __int8 v9; // of _DWORD *result; // eax _DWORD *v11; // ecx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = (char *)&(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (char *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (char *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (char *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (char *)(v5 + 8 * v4 + 8); if ( !((unsigned __int8)(v8 ^ v9) | v7) ) goto LABEL_10; LABEL_11: result = v3 + 8; if ( (unsigned int)result < a1[2] ) { v11 = result - 2; do { *v11 = *result; v11[1] = result[1]; result += 2; v11 += 2; } while ( (unsigned int)result < a1[2] ); } a1[2] -= 8; return result; } //----- (0075B2D0) -------------------------------------------------------- int __cdecl sub_75B2D0(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // ecx int v4; // eax int v5; // ecx int v6; // edx int *v7; // eax int *v8; // edx int *v9; // eax int result; // eax v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v3 = (int *)(v5 + 8 * v4 + 8); if ( v4 > v6 ) goto LABEL_10; LABEL_11: v7 = (int *)a1[2]; if ( v7 > v3 ) { v8 = v7 - 2; do { *v7 = *v8; v7[1] = v8[1]; v7 -= 2; v8 -= 2; } while ( v7 > v3 ); } v9 = (int *)a1[2]; *v3 = *v9; result = v9[1]; v3[1] = result; return result; } //----- (0075B360) -------------------------------------------------------- char __usercall sub_75B360@(signed int a1@, int *a2@, _DWORD *a3@) { int **v3; // edx unsigned int v4; // eax int *v5; // edx int v6; // eax int v7; // edx int v8; // ebx bool v9; // zf bool v10; // sf unsigned __int8 v11; // of int v12; // ecx v3 = (int **)a3[4]; if ( a1 > 0 ) { v4 = (unsigned int)&(*v3)[2 * a1]; if ( v4 < a3[2] ) goto LABEL_11; LABEL_10: v4 = (unsigned int)&unk_A0CDD0; goto LABEL_11; } if ( a1 > -1001000 ) { v4 = a3[2] + 8 * a1; goto LABEL_11; } if ( a1 == -1001000 ) { v4 = a3[3] + 40; goto LABEL_11; } v5 = *v3; v6 = -1001000 - a1; if ( v5[1] == 2146936086 ) goto LABEL_10; v7 = *v5; v8 = *(unsigned __int8 *)(v7 + 6); v11 = __OFSUB__(v6, v8); v9 = v6 == v8; v10 = v6 - v8 < 0; v4 = v7 + 8 * v6 + 8; if ( !((unsigned __int8)(v10 ^ v11) | v9) ) goto LABEL_10; LABEL_11: *(_DWORD *)v4 = *a2; *(_DWORD *)(v4 + 4) = a2[1]; if ( a1 < -1001000 ) { v4 = a2[1]; if ( (a2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v4 & 0x40 ) { v4 = *a2; if ( *(_BYTE *)(*a2 + 5) & 3 ) { v12 = **(_DWORD **)a3[4]; if ( *(_BYTE *)(v12 + 5) & 4 ) LOBYTE(v4) = sub_761FB0((int)a3, v12, *a2); } } } return v4; } //----- (0075B410) -------------------------------------------------------- char __cdecl sub_75B410(_DWORD *a1, signed int a2) { char result; // al result = sub_75B360(a2, (int *)(a1[2] - 8), a1); a1[2] -= 8; return result; } //----- (0075B430) -------------------------------------------------------- char __cdecl sub_75B430(_DWORD *a1, signed int a2, signed int a3) { int **v3; // edx int *v4; // edi int v6; // eax int v7; // ecx int *v8; // edi v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) return sub_75B360(a3, v4, a1); LABEL_10: v8 = (int *)&unk_A0CDD0; return sub_75B360(a3, v8, a1); } if ( a2 > -1001000 ) return sub_75B360(a3, (int *)(a1[2] + 8 * a2), a1); if ( a2 == -1001000 ) return sub_75B360(a3, (int *)(a1[3] + 40), a1); v6 = -1001000 - a2; if ( (*v3)[1] == 2146936086 ) goto LABEL_10; v7 = **v3; v8 = (int *)(v7 + 8 * v6 + 8); if ( v6 > *(unsigned __int8 *)(v7 + 6) ) goto LABEL_10; return sub_75B360(a3, v8, a1); } //----- (0075B4C0) -------------------------------------------------------- int __cdecl sub_75B4C0(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int *v4; // ecx int result; // eax int v6; // eax _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // ecx int v10; // eax int v11; // ecx int v12; // esi bool v13; // zf bool v14; // sf unsigned __int8 v15; // of _DWORD *v16; // eax _DWORD *v17; // ecx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) { v4 = (int *)a1[2]; *v4 = *v3; result = v3[1]; v4[1] = result; a1[2] += 8; return result; } LABEL_10: v16 = &unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v6 = a1[2]; v7 = (_DWORD *)a1[2]; *v7 = *(_DWORD *)(v6 + 8 * a2); result = *(_DWORD *)(v6 + 8 * a2 + 4); v7[1] = result; a1[2] += 8; return result; } if ( a2 == -1001000 ) { v8 = a1[3]; v9 = (_DWORD *)a1[2]; *v9 = *(_DWORD *)(v8 + 40); result = *(_DWORD *)(v8 + 44); v9[1] = result; a1[2] += 8; return result; } v10 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v11 = **v2; v12 = *(unsigned __int8 *)(v11 + 6); v15 = __OFSUB__(v10, v12); v13 = v10 == v12; v14 = v10 - v12 < 0; v16 = (_DWORD *)(v11 + 8 * v10 + 8); if ( !((unsigned __int8)(v14 ^ v15) | v13) ) goto LABEL_10; LABEL_11: v17 = (_DWORD *)a1[2]; *v17 = *v16; result = v16[1]; v17[1] = result; a1[2] += 8; return result; } //----- (0075B570) -------------------------------------------------------- int __cdecl sub_75B570(_DWORD *a1, signed int a2) { int **v2; // esi unsigned int v3; // eax int result; // eax int v5; // eax int v6; // ecx int v7; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = a1[3] + 40; } else { v5 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) return -1; v6 = **v2; if ( v5 > *(unsigned __int8 *)(v6 + 6) ) return -1; v3 = v6 + 8 * v5 + 8; } } else { v3 = a1[2] + 8 * a2; } } else { v3 = (unsigned int)&(*v2)[2 * a2]; if ( v3 >= a1[2] ) return -1; } if ( (_UNKNOWN *)v3 == &unk_A0CDD0 ) return -1; v7 = *(_DWORD *)(v3 + 4); if ( (v7 & 0x7FFFFF00) == 2146936064 ) result = v7 & 0xF; else result = 3; return result; } //----- (0075B600) -------------------------------------------------------- int __cdecl sub_75B600(int a1, int a2) { return *(&off_A0D148 + a2); } //----- (0075B610) -------------------------------------------------------- BOOL __cdecl sub_75B610(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // eax v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (int *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v3 = (int *)(a1[2] + 8 * a2); } LABEL_11: v10 = v3[1]; return v10 == 2146936086 || v10 == 2146936166; } //----- (0075B690) -------------------------------------------------------- double *__cdecl sub_75B690(_DWORD *a1, signed int a2) { int **v2; // esi double *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of double *result; // eax char v11; // [esp+4h] [ebp-8h] v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = (double *)&(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (double *)(a1[3] + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (double *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (double *)&unk_A0CDD0; goto LABEL_11; } } } else { v3 = (double *)(a1[2] + 8 * a2); } LABEL_11: if ( (*((_DWORD *)v3 + 1) & 0x7FFFFF00) != 2146936064 || (result = sub_763240(v3, (double *)&v11)) != 0 ) result = (double *)1; return result; } //----- (0075B720) -------------------------------------------------------- BOOL __cdecl sub_75B720(_DWORD *a1, signed int a2) { int v2; // eax v2 = sub_75B570(a1, a2); return v2 == 4 || v2 == 3; } //----- (0075B750) -------------------------------------------------------- BOOL __cdecl sub_75B750(_DWORD *a1, signed int a2, signed int a3) { int **v3; // esi int *v4; // edi int v5; // ecx int v6; // eax int v7; // edi bool v8; // zf bool v9; // sf unsigned __int8 v10; // of int *v11; // eax int v12; // eax int v13; // ecx int v14; // edx int v15; // edx BOOL result; // eax v3 = (int **)a1[4]; if ( a2 > 0 ) { if ( (unsigned int)&(*v3)[2 * a2] < a1[2] ) { v4 = &(*v3)[2 * a2]; goto LABEL_11; } LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 ) goto LABEL_10; v6 = **v3; v7 = *(unsigned __int8 *)(v6 + 6); v10 = __OFSUB__(v5, v7); v8 = v5 == v7; v9 = v5 - v7 < 0; v4 = (int *)(v6 + 8 * v5 + 8); if ( !((unsigned __int8)(v9 ^ v10) | v8) ) goto LABEL_10; LABEL_11: if ( a3 <= 0 ) { if ( a3 > -1001000 ) { v11 = (int *)(a1[2] + 8 * a3); goto LABEL_21; } if ( a3 == -1001000 ) { v11 = (int *)(a1[3] + 40); goto LABEL_21; } v12 = -1001000 - a3; if ( (*v3)[1] != 2146936086 ) { v13 = **v3; v14 = *(unsigned __int8 *)(v13 + 6); v10 = __OFSUB__(v12, v14); v8 = v12 == v14; v9 = v12 - v14 < 0; v11 = (int *)(v13 + 8 * v12 + 8); if ( (unsigned __int8)(v9 ^ v10) | v8 ) goto LABEL_21; } goto LABEL_20; } v11 = &(*v3)[2 * a3]; if ( (unsigned int)v11 >= a1[2] ) LABEL_20: v11 = (int *)&unk_A0CDD0; LABEL_21: result = 0; if ( v4 != (int *)&unk_A0CDD0 && v11 != (int *)&unk_A0CDD0 ) { v15 = (v4[1] & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v4[1] == v11[1]) : (unsigned __int8)((v11[1] & 0x7FFFFF00) != 2146936064); if ( v15 && sub_763AD0(0, v4, v11) ) result = 1; } return result; } //----- (0075B870) -------------------------------------------------------- BOOL __cdecl sub_75B870(_DWORD *a1, signed int a2, signed int a3, int a4) { int **v4; // esi int *v5; // edi int v6; // edx int v7; // ecx int v8; // edi bool v9; // zf bool v10; // sf unsigned __int8 v11; // of int *v12; // ecx int v13; // ecx int v14; // edx int v15; // eax BOOL v17; // edx v4 = (int **)a1[4]; if ( a2 > 0 ) { v5 = &(*v4)[2 * a2]; if ( (unsigned int)v5 < a1[2] ) goto LABEL_11; LABEL_10: v5 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v5 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v5 = (int *)(a1[3] + 40); goto LABEL_11; } v6 = -1001000 - a2; if ( (*v4)[1] == 2146936086 ) goto LABEL_10; v7 = **v4; v8 = *(unsigned __int8 *)(v7 + 6); v11 = __OFSUB__(v6, v8); v9 = v6 == v8; v10 = v6 - v8 < 0; v5 = (int *)(v7 + 8 * v6 + 8); if ( !((unsigned __int8)(v10 ^ v11) | v9) ) goto LABEL_10; LABEL_11: if ( a3 > 0 ) { v12 = &(*v4)[2 * a3]; if ( (unsigned int)v12 < a1[2] ) goto LABEL_21; goto LABEL_20; } if ( a3 <= -1001000 ) { if ( a3 == -1001000 ) { v12 = (int *)(a1[3] + 40); } else { v13 = -1001000 - a3; if ( (*v4)[1] == 2146936086 || (v14 = **v4, v15 = *(unsigned __int8 *)(v14 + 6), v11 = __OFSUB__(v13, v15), v9 = v13 == v15, v10 = v13 - v15 < 0, v12 = (int *)(v14 + 8 * v13 + 8), !((unsigned __int8)(v10 ^ v11) | v9)) ) { LABEL_20: v12 = (int *)&unk_A0CDD0; goto LABEL_21; } } } else { v12 = (int *)(a1[2] + 8 * a3); } LABEL_21: if ( v5 != (int *)&unk_A0CDD0 && v12 != (int *)&unk_A0CDD0 ) { if ( a4 ) { if ( a4 == 1 ) return sub_7638E0((int)a1, v5, v12); if ( a4 == 2 ) return sub_7639B0((int)a1, v5, v12); } else { if ( (v5[1] & 0x7FFFFF00) == 2146936064 ) v17 = v5[1] == v12[1]; else v17 = (v12[1] & 0x7FFFFF00) != 2146936064; if ( v17 && sub_763AD0((int)a1, v5, v12) ) return 1; } } return 0; } //----- (0075B9C0) -------------------------------------------------------- double __cdecl sub_75B9C0(_DWORD *a1, signed int a2, _DWORD *a3) { int **v3; // esi double *v4; // eax int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of double result; // st7 char v12; // [esp+4h] [ebp-8h] v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = (double *)&(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (double *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v7 = *(unsigned __int8 *)(v6 + 6), v10 = __OFSUB__(v5, v7), v8 = v5 == v7, v9 = v5 - v7 < 0, v4 = (double *)(v6 + 8 * v5 + 8), !((unsigned __int8)(v9 ^ v10) | v8)) ) { LABEL_10: v4 = (double *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (double *)(a1[2] + 8 * a2); } LABEL_11: if ( (*((_DWORD *)v4 + 1) & 0x7FFFFF00) != 2146936064 || (v4 = sub_763240(v4, (double *)&v12)) != 0 ) { if ( a3 ) *a3 = 1; result = *v4; } else { if ( a3 ) *a3 = 0; result = 0.0; } return result; } //----- (0075BA70) -------------------------------------------------------- signed int __cdecl sub_75BA70(_DWORD *a1, signed int a2, _DWORD *a3) { int **v3; // esi double *v4; // eax int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of signed int result; // eax char v12; // [esp+Ch] [ebp-8h] signed int v13; // [esp+1Ch] [ebp+8h] v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = (double *)&(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (double *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v7 = *(unsigned __int8 *)(v6 + 6), v10 = __OFSUB__(v5, v7), v8 = v5 == v7, v9 = v5 - v7 < 0, v4 = (double *)(v6 + 8 * v5 + 8), !((unsigned __int8)(v9 ^ v10) | v8)) ) { LABEL_10: v4 = (double *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (double *)(a1[2] + 8 * a2); } LABEL_11: if ( (*((_DWORD *)v4 + 1) & 0x7FFFFF00) != 2146936064 || (v4 = sub_763240(v4, (double *)&v12)) != 0 ) { v13 = (signed int)*v4; if ( a3 ) *a3 = 1; result = v13; } else { if ( a3 ) *a3 = 0; result = 0; } return result; } //----- (0075BB30) -------------------------------------------------------- int __cdecl sub_75BB30(_DWORD *a1, signed int a2, _DWORD *a3) { int **v3; // esi double *v4; // eax int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of int result; // eax signed __int64 v12; // [esp+Ch] [ebp-10h] char v13; // [esp+14h] [ebp-8h] v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = (double *)&(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (double *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v7 = *(unsigned __int8 *)(v6 + 6), v10 = __OFSUB__(v5, v7), v8 = v5 == v7, v9 = v5 - v7 < 0, v4 = (double *)(v6 + 8 * v5 + 8), !((unsigned __int8)(v9 ^ v10) | v8)) ) { LABEL_10: v4 = (double *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (double *)(a1[2] + 8 * a2); } LABEL_11: if ( (*((_DWORD *)v4 + 1) & 0x7FFFFF00) != 2146936064 || (v4 = sub_763240(v4, (double *)&v13)) != 0 ) { v12 = (signed __int64)*v4; if ( a3 ) *a3 = 1; result = v12; } else { if ( a3 ) *a3 = 0; result = 0; } return result; } //----- (0075BBF0) -------------------------------------------------------- BOOL __cdecl sub_75BBF0(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // ecx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (int *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v3 = (int *)(a1[2] + 8 * a2); } LABEL_11: v10 = v3[1]; return v10 != 2146936064 && (v10 != 2146936065 || *v3); } //----- (0075BC70) -------------------------------------------------------- int __cdecl sub_75BC70(_DWORD *a1, signed int a2, _DWORD *a3) { int **v3; // ecx int *v4; // eax int *v5; // ecx int v6; // eax int v7; // ecx int v8; // edx bool v9; // zf bool v10; // sf unsigned __int8 v11; // of v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = *v3; v6 = -1001000 - a2; if ( v5[1] == 2146936086 ) goto LABEL_10; v7 = *v5; v8 = *(unsigned __int8 *)(v7 + 6); v11 = __OFSUB__(v6, v8); v9 = v6 == v8; v10 = v6 - v8 < 0; v4 = (int *)(v7 + 8 * v6 + 8); if ( !((unsigned __int8)(v10 ^ v11) | v9) ) goto LABEL_10; LABEL_11: if ( (v4[1] | 0x70) != 2146936180 ) { if ( !sub_7632A0((int)a1, (int)v4) ) { if ( a3 ) *a3 = 0; return 0; } if ( *(_DWORD *)(a1[3] + 12) > 0 ) sub_7630F0((int)a1); v4 = sub_75B030(a2, a1); } if ( a3 ) *a3 = *(_DWORD *)(*v4 + 12); return *v4 + 16; } //----- (0075BD30) -------------------------------------------------------- unsigned int __cdecl sub_75BD30(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // ecx int v11; // ecx int v12; // ecx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( !((unsigned __int8)(v8 ^ v9) | v7) ) goto LABEL_10; LABEL_11: v10 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v10) = 3; v11 = (v10 & 0xF) - 4; if ( !v11 ) return *(_DWORD *)(*v3 + 12); v12 = v11 - 1; if ( !v12 ) return sub_766020(*v3); if ( v12 == 2 ) return *(_DWORD *)(*v3 + 16); return 0; } //----- (0075BDE0) -------------------------------------------------------- int __cdecl sub_75BDE0(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // ecx int v11; // ecx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( !((unsigned __int8)(v8 ^ v9) | v7) ) goto LABEL_10; LABEL_11: v10 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v10) = 3; v11 = (v10 & 0xF) - 2; if ( !v11 ) return *v3; if ( v11 == 5 ) return *v3 + 24; return 0; } //----- (0075BE80) -------------------------------------------------------- int __cdecl sub_75BE80(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int result; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( (unsigned __int8)(v8 ^ v9) | v7 ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: if ( v3[1] == 2146936136 ) result = *v3; else result = 0; return result; } //----- (0075BEF0) -------------------------------------------------------- int __cdecl sub_75BEF0(_DWORD *a1, signed int a2) { int **v2; // ecx int *v3; // eax int *v4; // ecx int v5; // eax int v6; // ecx int v7; // edi bool v8; // zf bool v9; // sf unsigned __int8 v10; // of int v11; // ecx int result; // eax v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = *v2; v5 = -1001000 - a2; if ( v4[1] == 2146936086 ) goto LABEL_10; v6 = *v4; v7 = *(unsigned __int8 *)(v6 + 6); v10 = __OFSUB__(v5, v7); v8 = v5 == v7; v9 = v5 - v7 < 0; v3 = (int *)(v6 + 8 * v5 + 8); if ( !((unsigned __int8)(v9 ^ v10) | v8) ) goto LABEL_10; LABEL_11: v11 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v11) = 3; switch ( v11 & 0x3F ) { case 2: case 7: result = sub_75BDE0(a1, a2); break; case 5: case 6: case 8: case 0x16: case 0x26: result = *v3; break; default: result = 0; break; } return result; } //----- (0075BFE0) -------------------------------------------------------- int __cdecl sub_75BFE0(int a1) { int result; // eax result = a1; *(_DWORD *)(*(_DWORD *)(a1 + 8) + 4) = 2146936064; *(_DWORD *)(result + 8) += 8; return result; } //----- (0075C000) -------------------------------------------------------- int __cdecl sub_75C000(int a1, double a2) { int v2; // eax int result; // eax int savedregs; // [esp+0h] [ebp+0h] v2 = *(_DWORD *)(a1 + 8); *(double *)v2 = a2; if ( (*(_DWORD *)(v2 + 4) & 0x7FFFFF00) == 2146936064 ) sub_766EB0(a1, "C API - attempt to push a signaling NaN", savedregs); result = v2 + 8; *(_DWORD *)(a1 + 8) = result; return result; } //----- (0075C040) -------------------------------------------------------- int __cdecl sub_75C040(int a1, signed int a2) { int result; // eax result = *(_DWORD *)(a1 + 8) + 8; *(double *)(result - 8) = (double)a2; *(_DWORD *)(a1 + 8) = result; return result; } //----- (0075C060) -------------------------------------------------------- int __cdecl sub_75C060(int a1, signed int a2) { int result; // eax double *v3; // eax if ( (unsigned int)a2 > 0x7FFFFFFF ) { v3 = *(double **)(a1 + 8); *v3 = (double)(unsigned int)a2; result = (int)(v3 + 1); } else { result = *(_DWORD *)(a1 + 8) + 8; *(double *)*(_DWORD *)(a1 + 8) = (double)a2; } *(_DWORD *)(a1 + 8) = result; return result; } //----- (0075C0B0) -------------------------------------------------------- int __cdecl sub_75C0B0(int a1, void *a2, size_t a3) { int v3; // eax int *v4; // ecx if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); v3 = sub_767620(a1, a2, a3); v4 = *(int **)(a1 + 8); *v4 = v3; v4[1] = *(unsigned __int8 *)(v3 + 4) | 0x7FF7A540; *(_DWORD *)(a1 + 8) += 8; return v3 + 16; } //----- (0075C100) -------------------------------------------------------- int __cdecl sub_75C100(int a1, void *a2) { int result; // eax int v3; // eax int *v4; // ecx if ( a2 ) { if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); v3 = sub_7676A0(a1, a2); v4 = *(int **)(a1 + 8); *v4 = v3; v4[1] = *(unsigned __int8 *)(v3 + 4) | 0x7FF7A540; *(_DWORD *)(a1 + 8) += 8; result = v3 + 16; } else { *(_DWORD *)(*(_DWORD *)(a1 + 8) + 4) = 2146936064; *(_DWORD *)(a1 + 8) += 8; result = 0; } return result; } //----- (0075C160) -------------------------------------------------------- int __cdecl sub_75C160(int a1, char *a2, int a3) { if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); return sub_75FA20(a1, a2, a3); } //----- (0075C190) -------------------------------------------------------- int __cdecl sub_75C190(int a1, char *a2, int a3) { if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); return sub_75FA20(a1, a2, (int)&a3); } //----- (0075C1C0) -------------------------------------------------------- int __cdecl sub_75C1C0(int a1, int a2, int a3) { int v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // ecx int v7; // edx int *v8; // ecx v3 = a3; if ( a3 ) { if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); result = sub_767710(a1, a3); *(_DWORD *)(result + 12) = a2; *(_DWORD *)(a1 + 8) += -8 * a3; do { v6 = *(_DWORD *)(a1 + 8); v7 = *(_DWORD *)(v6 + 8 * v3-- - 8); *(_DWORD *)(result + 8 * v3 + 16) = v7; *(_DWORD *)(result + 8 * v3 + 20) = *(_DWORD *)(v6 + 8 * v3 + 4); } while ( v3 ); v8 = *(int **)(a1 + 8); *v8 = result; v8[1] = 2146936166; *(_DWORD *)(a1 + 8) += 8; } else { result = a1; v5 = *(_DWORD **)(a1 + 8); *v5 = a2; v5[1] = 2146936086; *(_DWORD *)(result + 8) += 8; } return result; } //----- (0075C250) -------------------------------------------------------- __int64 __cdecl sub_75C250(int a1, int a2) { _DWORD *v2; // ecx __int64 result; // rax LODWORD(result) = a1; v2 = *(_DWORD **)(a1 + 8); v2[1] = 2146936065; HIDWORD(result) = a2 != 0; *v2 = HIDWORD(result); *(_DWORD *)(result + 8) += 8; return result; } //----- (0075C270) -------------------------------------------------------- int __cdecl sub_75C270(int a1, int a2) { int result; // eax _DWORD *v3; // ecx result = a1; v3 = *(_DWORD **)(a1 + 8); *v3 = a2; v3[1] = 2146936066; *(_DWORD *)(result + 8) += 8; return result; } //----- (0075C290) -------------------------------------------------------- BOOL __cdecl sub_75C290(int a1) { _DWORD *v1; // ecx int v2; // ecx v1 = *(_DWORD **)(a1 + 8); *v1 = a1; v1[1] = 2146936136; v2 = *(_DWORD *)(a1 + 12); *(_DWORD *)(a1 + 8) += 8; return *(_DWORD *)(v2 + 156) == a1; } //----- (0075C2C0) -------------------------------------------------------- int __cdecl sub_75C2C0(_DWORD *a1, void *a2) { int *v2; // eax int *v3; // edi int *v4; // ebx int v5; // eax v2 = (int *)sub_765CE0(*(_DWORD *)(a1[3] + 40), 2); v3 = (int *)a1[2]; v4 = v2; a1[2] = v3 + 2; v5 = sub_7676A0((int)a1, a2); *v3 = v5; v3[1] = *(unsigned __int8 *)(v5 + 4) | 0x7FF7A540; return sub_7633D0(a1, v4, (int *)(a1[2] - 8), (int *)(a1[2] - 8)); } //----- (0075C320) -------------------------------------------------------- int __cdecl sub_75C320(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // esi bool v7; // zf bool v8; // sf unsigned __int8 v9; // of v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) return sub_7633D0(a1, v3, (int *)(a1[2] - 8), (int *)(a1[2] - 8)); goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (int *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (int *)&unk_A0CDD0; return sub_7633D0(a1, v3, (int *)(a1[2] - 8), (int *)(a1[2] - 8)); } } } else { v3 = (int *)(a1[2] + 8 * a2); } return sub_7633D0(a1, v3, (int *)(a1[2] - 8), (int *)(a1[2] - 8)); } //----- (0075C3A0) -------------------------------------------------------- int __cdecl sub_75C3A0(_DWORD *a1, signed int a2, void *a3) { int **v3; // edx int *v4; // edi int v5; // eax int v6; // ecx int *v7; // ebx int v8; // eax v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v4 = (int *)(v6 + 8 * v5 + 8), v5 > *(unsigned __int8 *)(v6 + 6)) ) { LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (int *)(a1[2] + 8 * a2); } LABEL_11: v7 = (int *)a1[2]; v8 = sub_7676A0((int)a1, a3); *v7 = v8; v7[1] = *(unsigned __int8 *)(v8 + 4) | 0x7FF7A540; a1[2] += 8; return sub_7633D0(a1, v4, (int *)(a1[2] - 8), (int *)(a1[2] - 8)); } //----- (0075C440) -------------------------------------------------------- int __cdecl sub_75C440(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int *v10; // eax int v11; // ecx int result; // eax v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (int *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v3 = (int *)(a1[2] + 8 * a2); } LABEL_11: v10 = sub_765DA0(*v3, (int *)(a1[2] - 8)); v11 = a1[2]; *(_DWORD *)(v11 - 8) = *v10; result = v10[1]; *(_DWORD *)(v11 - 4) = result; return result; } //----- (0075C4C0) -------------------------------------------------------- int __cdecl sub_75C4C0(_DWORD *a1, signed int a2, signed int a3) { int **v3; // edx int *v4; // eax int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of _DWORD *v11; // eax _DWORD *v12; // ecx int result; // eax v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v7 = *(unsigned __int8 *)(v6 + 6), v10 = __OFSUB__(v5, v7), v8 = v5 == v7, v9 = v5 - v7 < 0, v4 = (int *)(v6 + 8 * v5 + 8), !((unsigned __int8)(v9 ^ v10) | v8)) ) { LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (int *)(a1[2] + 8 * a2); } LABEL_11: v11 = sub_765CE0(*v4, a3); v12 = (_DWORD *)a1[2]; *v12 = *v11; result = v11[1]; v12[1] = result; a1[2] += 8; return result; } //----- (0075C540) -------------------------------------------------------- int __cdecl sub_75C540(int a1, int a2, int a3) { int result; // eax int *v4; // ecx if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); result = sub_765C40(a1); v4 = *(int **)(a1 + 8); *v4 = result; v4[1] = 2146936133; *(_DWORD *)(a1 + 8) += 8; if ( a2 > 0 || a3 > 0 ) result = sub_766080(a1, result, a2, a3); return result; } //----- (0075C590) -------------------------------------------------------- signed int __cdecl sub_75C590(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // edx char v11; // cl int v12; // ecx int v13; // edx _DWORD *v15; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( (unsigned __int8)(v8 ^ v9) | v7 ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: v10 = v3[1]; if ( (v10 & 0x7FFFFF00) == 2146936064 ) v11 = v3[1]; else v11 = 3; v12 = (v11 & 0xF) - 5; if ( v12 ) { if ( v12 == 2 ) { v13 = *(_DWORD *)(*v3 + 8); } else if ( (v10 & 0x7FFFFF00) == 2146936064 ) { v13 = *(_DWORD *)(a1[3] + 4 * (v3[1] & 0xF) + 236); } else { v13 = *(_DWORD *)(a1[3] + 248); } } else { v13 = *(_DWORD *)(*v3 + 8); } if ( !v13 ) return 0; v15 = (_DWORD *)a1[2]; *v15 = v13; v15[1] = 2146936133; a1[2] += 8; return 1; } //----- (0075C680) -------------------------------------------------------- _DWORD *__cdecl sub_75C680(_DWORD *a1, signed int a2) { int **v2; // esi int *v3; // eax int v4; // eax int v5; // ecx int v6; // esi bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // ecx _DWORD *result; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( (unsigned __int8)(v8 ^ v9) | v7 ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: v10 = *(_DWORD *)(*v3 + 12); result = (_DWORD *)a1[2]; if ( v10 ) { *result = v10; result[1] = 2146936133; } else { result[1] = 2146936064; } a1[2] += 8; return result; } //----- (0075C710) -------------------------------------------------------- int *__cdecl sub_75C710(int a1, void *a2) { _DWORD *v2; // esi int *v3; // eax int *v4; // edi int *v5; // ebx int v6; // eax int *result; // eax v2 = (_DWORD *)a1; v3 = (int *)sub_765CE0(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 40), 2); v4 = *(int **)(a1 + 8); v5 = v3; *(_DWORD *)(a1 + 8) = v4 + 2; v6 = sub_7676A0(a1, a2); *v4 = v6; v4[1] = *(unsigned __int8 *)(v6 + 4) | 0x7FF7A540; result = sub_763520(v2, v5, (int *)(v2[2] - 8), (int *)(v2[2] - 16)); v2[2] -= 16; return result; } //----- (0075C770) -------------------------------------------------------- int *__cdecl sub_75C770(_DWORD *a1, signed int a2, void *a3) { int **v3; // edx int *v4; // edi int v5; // eax int v6; // ecx int *v7; // ebx int v8; // eax int *result; // eax v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); } else { v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 || (v6 = **v3, v4 = (int *)(v6 + 8 * v5 + 8), v5 > *(unsigned __int8 *)(v6 + 6)) ) { LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v4 = (int *)(a1[2] + 8 * a2); } LABEL_11: v7 = (int *)a1[2]; a1[2] = v7 + 2; v8 = sub_7676A0((int)a1, a3); *v7 = v8; v7[1] = *(unsigned __int8 *)(v8 + 4) | 0x7FF7A540; result = sub_763520(a1, v4, (int *)(a1[2] - 8), (int *)(a1[2] - 16)); a1[2] -= 16; return result; } //----- (0075C810) -------------------------------------------------------- int __cdecl sub_75C810(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // ebx int v4; // eax int v5; // ecx int v6; // edi int *v7; // eax int v8; // ecx int result; // eax int v10; // ebx v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v3 = (int *)(v5 + 8 * v4 + 8); if ( v4 <= *(unsigned __int8 *)(v5 + 6) ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: v6 = a1[2]; v7 = sub_765EA0((int)a1, *v3, (int *)(v6 - 16)); *v7 = *(_DWORD *)(v6 - 8); v7[1] = *(_DWORD *)(v6 - 4); *(_BYTE *)(*v3 + 6) = 0; v8 = a1[2]; if ( (*(_DWORD *)(v8 - 4) & 0x7FFFFF00) == 2146936064 ) result = *(_DWORD *)(v8 - 4) & 0xFF; else result = 3; if ( result & 0x40 ) { result = *(_DWORD *)(v8 - 8); if ( *(_BYTE *)(result + 5) & 3 ) { v10 = *v3; if ( *(_BYTE *)(v10 + 5) & 4 ) result = sub_760C70((int)a1, v10); } } a1[2] -= 16; return result; } //----- (0075C8E0) -------------------------------------------------------- int __cdecl sub_75C8E0(_DWORD *a1, signed int a2, signed int a3) { int **v3; // edx int *v4; // edi int v5; // eax int v6; // ecx int v7; // ecx int result; // eax int v9; // edi v3 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = -1001000 - a2; if ( (*v3)[1] != 2146936086 ) { v6 = **v3; v4 = (int *)(v6 + 8 * v5 + 8); if ( v5 <= *(unsigned __int8 *)(v6 + 6) ) goto LABEL_11; } goto LABEL_10; } v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 >= a1[2] ) LABEL_10: v4 = (int *)&unk_A0CDD0; LABEL_11: sub_766520((int)a1, *v4, a3, (_DWORD *)(a1[2] - 8)); v7 = a1[2]; if ( (*(_DWORD *)(v7 - 4) & 0x7FFFFF00) == 2146936064 ) result = *(_DWORD *)(v7 - 4) & 0xFF; else result = 3; if ( result & 0x40 ) { result = *(_DWORD *)(v7 - 8); if ( *(_BYTE *)(result + 5) & 3 ) { v9 = *v4; if ( *(_BYTE *)(v9 + 5) & 4 ) result = sub_760C70((int)a1, v9); } } a1[2] -= 8; return result; } //----- (0075C9A0) -------------------------------------------------------- signed int __cdecl sub_75C9A0(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // esi int v4; // eax int v5; // ecx int v6; // eax int v7; // edi int v8; // edx char v9; // al int v10; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v3 = (int *)(v5 + 8 * v4 + 8); if ( v4 <= *(unsigned __int8 *)(v5 + 6) ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: v6 = a1[2]; if ( *(_DWORD *)(v6 - 4) == 2146936064 ) v7 = 0; else v7 = *(_DWORD *)(v6 - 8); v8 = v3[1] & 0x7FFFFF00; if ( v8 == 2146936064 ) v9 = v3[1]; else v9 = 3; v10 = (v9 & 0xF) - 5; if ( !v10 ) { *(_DWORD *)(*v3 + 8) = v7; if ( v7 ) { if ( *(_BYTE *)(v7 + 5) & 3 && *(_BYTE *)(*v3 + 5) & 4 ) sub_760C70((int)a1, *v3); sub_761D00((int)a1, *v3, v7); } goto LABEL_33; } if ( v10 == 2 ) { *(_DWORD *)(*v3 + 8) = v7; if ( v7 ) { if ( *(_BYTE *)(v7 + 5) & 3 && *(_BYTE *)(*v3 + 5) & 4 ) sub_761FB0((int)a1, *v3, v7); sub_761D00((int)a1, *v3, v7); } LABEL_33: a1[2] -= 8; return 1; } if ( v8 == 2146936064 ) *(_DWORD *)(a1[3] + 4 * (v3[1] & 0xF) + 236) = v7; else *(_DWORD *)(a1[3] + 248) = v7; a1[2] -= 8; return 1; } //----- (0075CAF0) -------------------------------------------------------- char __cdecl sub_75CAF0(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // ecx int v11; // edx v2 = (int **)a1[4]; if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < a1[2] ) goto LABEL_11; LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 ) goto LABEL_10; v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( !((unsigned __int8)(v8 ^ v9) | v7) ) goto LABEL_10; LABEL_11: v10 = a1[2]; if ( *(_DWORD *)(v10 - 4) == 2146936064 ) { v3 = (int *)*v3; v3[3] = 0; a1[2] -= 8; } else { *(_DWORD *)(*v3 + 12) = *(_DWORD *)(v10 - 8); v11 = a1[2]; if ( *(_BYTE *)(*(_DWORD *)(v11 - 8) + 5) & 3 ) { v3 = (int *)*v3; if ( *((_BYTE *)v3 + 5) & 4 ) LOBYTE(v3) = sub_761FB0((int)a1, (int)v3, *(_DWORD *)(v11 - 8)); } a1[2] -= 8; } return (char)v3; } //----- (0075CBA0) -------------------------------------------------------- int __cdecl sub_75CBA0(int a1, _DWORD *a2) { int v2; // eax v2 = *(_DWORD *)(a1 + 16); if ( !(*(_BYTE *)(v2 + 18) & 8) ) return 0; if ( a2 ) *a2 = *(_DWORD *)(v2 + 24); return *(unsigned __int8 *)(*(_DWORD *)(a1 + 16) + 37); } //----- (0075CBD0) -------------------------------------------------------- signed int __cdecl sub_75CBD0(int a1, int a2, int a3, int a4, int a5) { int (__cdecl **v5)(int); // eax signed int result; // eax unsigned int v7; // esi int v8; // [esp-4h] [ebp-Ch] v5 = (int (__cdecl **)(int))(*(_DWORD *)(a1 + 8) - (8 * a2 + 8)); if ( !a5 || *(_WORD *)(a1 + 36) ) { v8 = 0; } else { *(_DWORD *)(*(_DWORD *)(a1 + 16) + 28) = a5; *(_DWORD *)(*(_DWORD *)(a1 + 16) + 24) = a4; v8 = 1; } result = sub_760A50(a1, v5, a3, v8); if ( a3 == -1 ) { result = *(_DWORD *)(a1 + 16); v7 = *(_DWORD *)(a1 + 8); if ( *(_DWORD *)(result + 4) < v7 ) *(_DWORD *)(result + 4) = v7; } return result; } //----- (0075CC30) -------------------------------------------------------- signed int __cdecl sub_75CC30(int a1, int a2) { return sub_760A50(a1, *(int (__cdecl ***)(int))a2, *(_DWORD *)(a2 + 4), 0); } //----- (0075CC50) -------------------------------------------------------- int __cdecl sub_75CC50(int a1, int a2, int a3, signed int a4, int a5, int a6) { char *v6; // eax int v7; // ecx int v8; // ebx int v9; // edi int result; // eax int v11; // ST0C_4 int v12; // ecx unsigned int v13; // esi int (__cdecl **v14)(int); // [esp+4h] [ebp-8h] int v15; // [esp+8h] [ebp-4h] if ( a4 ) v6 = (char *)sub_75B030(a4, (_DWORD *)a1) - *(_DWORD *)(a1 + 28); else v6 = 0; v7 = *(_DWORD *)(a1 + 8) - (8 * a2 + 8); v14 = (int (__cdecl **)(int))(*(_DWORD *)(a1 + 8) - (8 * a2 + 8)); if ( !a6 || *(_WORD *)(a1 + 36) ) { v8 = a3; v11 = v7 - *(_DWORD *)(a1 + 28); v15 = a3; result = sub_7605A0(a1, (void (__cdecl *)(int, int))sub_75CC30, (int)&v14, v11, (int)v6); } else { v8 = a3; v9 = *(_DWORD *)(a1 + 16); *(_DWORD *)(v9 + 28) = a6; *(_DWORD *)(v9 + 24) = a5; *(_DWORD *)(v9 + 20) = (char *)v14 - *(_DWORD *)(a1 + 28); *(_BYTE *)(v9 + 36) = *(_BYTE *)(a1 + 41); *(_DWORD *)(v9 + 32) = *(_DWORD *)(a1 + 68); *(_DWORD *)(a1 + 68) = v6; *(_BYTE *)(v9 + 18) |= 0x10u; sub_760A50(a1, v14, a3, 1); *(_BYTE *)(v9 + 18) &= 0xEFu; *(_DWORD *)(a1 + 68) = *(_DWORD *)(v9 + 32); result = 0; } if ( v8 == -1 ) { v12 = *(_DWORD *)(a1 + 16); v13 = *(_DWORD *)(a1 + 8); if ( *(_DWORD *)(v12 + 4) < v13 ) *(_DWORD *)(v12 + 4) = v13; } return result; } //----- (0075CD10) -------------------------------------------------------- int __cdecl sub_75CD10(int a1, int a2, int a3, const char *a4, int a5) { const char *v5; // edi int v6; // ebx int v7; // edi int *v8; // eax int *v9; // ecx int v10; // ecx int v11; // eax int v12; // edi char v14; // [esp+Ch] [ebp-14h] v5 = a4; if ( !a4 ) v5 = "?"; sub_767AA0(a1, &v14, a2, a3); v6 = sub_760750(a1, (int)&v14, (int)v5, a5); if ( !v6 ) { v7 = *(_DWORD *)(*(_DWORD *)(a1 + 8) - 8); if ( *(_BYTE *)(v7 + 6) == 1 ) { v8 = (int *)sub_765CE0(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 40), 2); v9 = *(int **)(*(_DWORD *)(v7 + 16) + 8); *v9 = *v8; v9[1] = v8[1]; v10 = v8[1]; if ( (v8[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v10) = 3; if ( v10 & 0x40 ) { v11 = *v8; if ( *(_BYTE *)(v11 + 5) & 3 ) { v12 = *(_DWORD *)(v7 + 16); if ( *(_BYTE *)(v12 + 5) & 4 ) sub_761FB0(a1, v12, v11); } } } } return v6; } //----- (0075CDD0) -------------------------------------------------------- int __cdecl sub_75CDD0(int a1, int (__cdecl *a2)(int, char *, signed int, int), int a3) { int v3; // eax int result; // eax v3 = *(_DWORD *)(a1 + 8); if ( *(_DWORD *)(v3 - 4) == 2146936134 ) result = sub_768180(a1, *(_DWORD *)(*(_DWORD *)(v3 - 8) + 12), a2, a3, 0); else result = 1; return result; } //----- (0075CE10) -------------------------------------------------------- int __cdecl sub_75CE10(int a1) { return *(unsigned __int8 *)(a1 + 6); } //----- (0075CE20) -------------------------------------------------------- signed int __cdecl sub_75CE20(int a1, int a2, int a3) { int v3; // esi signed int v4; // edi signed int result; // eax BOOL v6; // edi int v7; // eax signed int v8; // edi v3 = *(_DWORD *)(a1 + 12); v4 = 0; switch ( a2 ) { case 0: result = 0; *(_BYTE *)(v3 + 55) = 0; break; case 1: sub_75F180(v3, 0); result = 0; *(_BYTE *)(v3 + 55) = 1; break; case 2: sub_762E70(a1, 0); result = 0; break; case 3: result = (unsigned int)(*(_DWORD *)(v3 + 8) + *(_DWORD *)(v3 + 12)) >> 10; break; case 4: result = (*(_DWORD *)(v3 + 8) + *(_DWORD *)(v3 + 12)) & 0x3FF; break; case 5: if ( *(_BYTE *)(v3 + 54) == 2 ) { v6 = *(_DWORD *)(v3 + 20) == 0; sub_763090(a1); result = v6; } else { v7 = (a3 << 10) - 1600; if ( *(_BYTE *)(v3 + 55) ) v7 += *(_DWORD *)(v3 + 12); sub_75F180(v3, v7); sub_763090(a1); if ( *(_BYTE *)(v3 + 53) != 5 ) goto LABEL_20; result = 1; } break; case 6: result = *(_DWORD *)(v3 + 140); *(_DWORD *)(v3 + 140) = a3; break; case 7: v8 = *(_DWORD *)(v3 + 148); *(_DWORD *)(v3 + 148) = a3; result = v8; break; case 8: result = *(_DWORD *)(v3 + 144); *(_DWORD *)(v3 + 144) = a3; break; case 9: result = *(unsigned __int8 *)(v3 + 55); break; case 10: sub_762F70(a1, 2); result = 0; break; case 11: sub_762F70(a1, 0); result = 0; break; default: v4 = -1; LABEL_20: result = v4; break; } return result; } //----- (0075CFA0) -------------------------------------------------------- void __cdecl __noreturn sub_75CFA0(_DWORD *a1) { sub_766E40(a1); } //----- (0075CFB0) -------------------------------------------------------- signed int __cdecl sub_75CFB0(_DWORD *a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of signed int result; // eax v2 = (int **)a1[4]; if ( a2 <= 0 ) { if ( a2 > -1001000 ) { v3 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v3 = (int *)(a1[3] + 40); goto LABEL_11; } v4 = -1001000 - a2; if ( (*v2)[1] != 2146936086 ) { v5 = **v2; v6 = *(unsigned __int8 *)(v5 + 6); v9 = __OFSUB__(v4, v6); v7 = v4 == v6; v8 = v4 - v6 < 0; v3 = (int *)(v5 + 8 * v4 + 8); if ( (unsigned __int8)(v8 ^ v9) | v7 ) goto LABEL_11; } goto LABEL_10; } v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 >= a1[2] ) LABEL_10: v3 = (int *)&unk_A0CDD0; LABEL_11: result = sub_7658B0((int)a1, *v3, (int *)(a1[2] - 8)); if ( result ) a1[2] += 8; else a1[2] -= 8; return result; } //----- (0075D040) -------------------------------------------------------- void __cdecl sub_75D040(int a1, signed int a2) { int *v2; // edi int v3; // eax if ( a2 < 2 ) { if ( !a2 ) { v2 = *(int **)(a1 + 8); v3 = sub_767620(a1, (void *)&byte_9A8050, 0); *v2 = v3; v2[1] = *(unsigned __int8 *)(v3 + 4) | 0x7FF7A540; *(_DWORD *)(a1 + 8) += 8; } } else { if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); sub_763C10(a1, a2); } } //----- (0075D0B0) -------------------------------------------------------- double *__cdecl sub_75D0B0(int a1, signed int a2) { int **v2; // edx int *v3; // eax int v4; // eax int v5; // ecx int v6; // edx bool v7; // zf bool v8; // sf unsigned __int8 v9; // of double *result; // eax v2 = *(int ***)(a1 + 16); if ( a2 > 0 ) { v3 = &(*v2)[2 * a2]; if ( (unsigned int)v3 < *(_DWORD *)(a1 + 8) ) goto LABEL_11; goto LABEL_10; } if ( a2 <= -1001000 ) { if ( a2 == -1001000 ) { v3 = (int *)(*(_DWORD *)(a1 + 12) + 40); } else { v4 = -1001000 - a2; if ( (*v2)[1] == 2146936086 || (v5 = **v2, v6 = *(unsigned __int8 *)(v5 + 6), v9 = __OFSUB__(v4, v6), v7 = v4 == v6, v8 = v4 - v6 < 0, v3 = (int *)(v5 + 8 * v4 + 8), !((unsigned __int8)(v8 ^ v9) | v7)) ) { LABEL_10: v3 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v3 = (int *)(*(_DWORD *)(a1 + 8) + 8 * a2); } LABEL_11: result = sub_763EE0(a1, *(double **)(a1 + 8), v3); *(_DWORD *)(a1 + 8) += 8; return result; } //----- (0075D130) -------------------------------------------------------- int __cdecl sub_75D130(int a1, unsigned int a2) { _DWORD *v2; // eax _DWORD *v3; // ecx if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); v2 = sub_7676D0(a1, a2, 0); v3 = *(_DWORD **)(a1 + 8); *v3 = v2; v3[1] = 2146936135; *(_DWORD *)(a1 + 8) += 8; return (int)(v2 + 6); } //----- (0075D170) -------------------------------------------------------- const CHAR *__usercall sub_75D170@(signed int a1@, _DWORD *a2@, _DWORD *a3@, _DWORD *a4@) { int v4; // ecx int v5; // ecx int v6; // ecx int v8; // ecx int v9; // edx int v10; // eax v4 = a2[1]; if ( (a2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; v5 = v4 & 0x3F; if ( v5 != 6 ) { if ( v5 == 38 ) { v6 = *a2; if ( a1 >= 1 && a1 <= *(unsigned __int8 *)(v6 + 6) ) { *a3 = v6 + 8 * a1 + 8; if ( a4 ) *a4 = v6; return &byte_9A8050; } } return 0; } v8 = *a2; v9 = *(_DWORD *)(*a2 + 12); if ( a1 < 1 || a1 > *(_DWORD *)(v9 + 40) ) return 0; *a3 = *(_DWORD *)(*(_DWORD *)(v8 + 4 * a1 + 12) + 8); if ( a4 ) *a4 = *(_DWORD *)(v8 + 4 * a1 + 12); v10 = *(_DWORD *)(*(_DWORD *)(v9 + 28) + 8 * a1 - 8); if ( !v10 ) return &byte_9A8050; return (const CHAR *)(v10 + 16); } //----- (0075D200) -------------------------------------------------------- const CHAR *__cdecl sub_75D200(_DWORD *a1, signed int a2, signed int a3) { int **v3; // edx int *v4; // eax int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of int v11; // ecx int v12; // ecx const CHAR *result; // eax int v14; // eax _DWORD *v15; // edx int v16; // eax int v17; // esi int v18; // ecx _DWORD *v19; // ecx v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 ) goto LABEL_10; v6 = **v3; v7 = *(unsigned __int8 *)(v6 + 6); v10 = __OFSUB__(v5, v7); v8 = v5 == v7; v9 = v5 - v7 < 0; v4 = (int *)(v6 + 8 * v5 + 8); if ( !((unsigned __int8)(v9 ^ v10) | v8) ) goto LABEL_10; LABEL_11: v11 = v4[1]; if ( (v4[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v11) = 3; v12 = v11 & 0x3F; if ( v12 != 6 ) { if ( v12 == 38 ) { v14 = *v4; if ( a3 >= 1 && a3 <= *(unsigned __int8 *)(v14 + 6) ) { v15 = (_DWORD *)(v14 + 8 * a3 + 8); goto LABEL_19; } } return 0; } v16 = *v4; v17 = *(_DWORD *)(v16 + 12); if ( a3 < 1 || a3 > *(_DWORD *)(v17 + 40) ) return 0; v15 = *(_DWORD **)(*(_DWORD *)(v16 + 4 * a3 + 12) + 8); v18 = *(_DWORD *)(*(_DWORD *)(v17 + 28) + 8 * a3 - 8); if ( v18 ) { result = (const CHAR *)(v18 + 16); if ( v18 == -16 ) return result; goto LABEL_24; } LABEL_19: result = &byte_9A8050; LABEL_24: v19 = (_DWORD *)a1[2]; *v19 = *v15; v19[1] = v15[1]; a1[2] += 8; return result; } //----- (0075D2F0) -------------------------------------------------------- const CHAR *__cdecl sub_75D2F0(_DWORD *a1, signed int a2, signed int a3) { int **v3; // edx int *v4; // edx int v5; // eax int v6; // ecx int v7; // edx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of const CHAR *v11; // esi _DWORD *v12; // eax _DWORD *v13; // ecx int *v14; // ecx int v15; // eax int v16; // ecx int v18; // [esp+8h] [ebp-8h] _DWORD *v19; // [esp+Ch] [ebp-4h] v3 = (int **)a1[4]; v19 = 0; v18 = 0; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 ) goto LABEL_10; v6 = **v3; v7 = *(unsigned __int8 *)(v6 + 6); v10 = __OFSUB__(v5, v7); v8 = v5 == v7; v9 = v5 - v7 < 0; v4 = (int *)(v6 + 8 * v5 + 8); if ( !((unsigned __int8)(v9 ^ v10) | v8) ) goto LABEL_10; LABEL_11: v11 = sub_75D170(a3, v4, &v19, &v18); if ( v11 ) { a1[2] -= 8; v12 = (_DWORD *)a1[2]; v13 = v19; *v19 = *v12; v13[1] = v12[1]; v14 = (int *)a1[2]; v15 = v14[1]; if ( (v14[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v15) = 3; if ( v15 & 0x40 ) { v16 = *v14; if ( *(_BYTE *)(v16 + 5) & 3 ) { if ( *(_BYTE *)(v18 + 5) & 4 ) sub_761FB0((int)a1, v18, v16); } } } return v11; } //----- (0075D3D0) -------------------------------------------------------- int __usercall sub_75D3D0@(signed int a1@, _DWORD *a2@, int a3@, _DWORD *a4@) { int **v4; // edx int *v5; // eax int v6; // ecx int v7; // eax int v8; // edx int v9; // eax v4 = (int **)a2[4]; if ( a1 > 0 ) { v5 = &(*v4)[2 * a1]; if ( (unsigned int)v5 < a2[2] ) goto LABEL_11; LABEL_10: v5 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a1 > -1001000 ) { v5 = (int *)(a2[2] + 8 * a1); goto LABEL_11; } if ( a1 == -1001000 ) { v5 = (int *)(a2[3] + 40); goto LABEL_11; } v6 = -1001000 - a1; if ( (*v4)[1] == 2146936086 ) goto LABEL_10; v7 = **v4; v8 = *(unsigned __int8 *)(v7 + 6); v5 = (int *)(v7 + 8 * v6 + 8); if ( v6 > v8 ) goto LABEL_10; LABEL_11: v9 = *v5; if ( a4 ) *a4 = v9; return v9 + 4 * a3 + 12; } //----- (0075D430) -------------------------------------------------------- int __cdecl sub_75D430(_DWORD *a1, signed int a2, int a3) { int **v3; // edi int *v4; // ecx int v5; // ecx int v6; // edx int v7; // ebx bool v8; // zf bool v9; // sf unsigned __int8 v10; // of int v11; // edx int v12; // edx int result; // eax int *v14; // eax int v15; // ecx int v16; // eax int v17; // edx _DWORD *v18; // eax v3 = (int **)a1[4]; if ( a2 > 0 ) { v4 = &(*v3)[2 * a2]; if ( (unsigned int)v4 < a1[2] ) goto LABEL_11; LABEL_10: v4 = (int *)&unk_A0CDD0; goto LABEL_11; } if ( a2 > -1001000 ) { v4 = (int *)(a1[2] + 8 * a2); goto LABEL_11; } if ( a2 == -1001000 ) { v4 = (int *)(a1[3] + 40); goto LABEL_11; } v5 = -1001000 - a2; if ( (*v3)[1] == 2146936086 ) goto LABEL_10; v6 = **v3; v7 = *(unsigned __int8 *)(v6 + 6); v10 = __OFSUB__(v5, v7); v8 = v5 == v7; v9 = v5 - v7 < 0; v4 = (int *)(v6 + 8 * v5 + 8); if ( !((unsigned __int8)(v9 ^ v10) | v8) ) goto LABEL_10; LABEL_11: v11 = v4[1]; if ( (v4[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v11) = 3; v12 = v11 & 0x3F; if ( v12 == 6 ) { if ( a2 <= 0 ) { if ( a2 > -1001000 ) return *(_DWORD *)(*(_DWORD *)(a1[2] + 8 * a2) + 4 * a3 + 12); if ( a2 == -1001000 ) return *(_DWORD *)(*(_DWORD *)(a1[3] + 40) + 4 * a3 + 12); v15 = -1001000 - a2; if ( (*v3)[1] != 2146936086 ) { v16 = **v3; v17 = *(unsigned __int8 *)(v16 + 6); v18 = (_DWORD *)(v16 + 8 * v15 + 8); if ( v15 <= v17 ) return *(_DWORD *)(*v18 + 4 * a3 + 12); } } else { v14 = &(*v3)[2 * a2]; if ( (unsigned int)v14 < a1[2] ) return *(_DWORD *)(*v14 + 4 * a3 + 12); } v18 = &unk_A0CDD0; return *(_DWORD *)(*v18 + 4 * a3 + 12); } if ( v12 == 38 ) result = *v4 + 8 * a3 + 8; else result = 0; return result; } //----- (0075D550) -------------------------------------------------------- char __cdecl sub_75D550(int a1, signed int a2, int a3, signed int a4, int a5) { _DWORD *v5; // ebx int *v6; // eax int **v7; // esi int *v8; // ecx int v9; // ecx int v10; // edx int v11; // esi bool v12; // zf bool v13; // sf unsigned __int8 v14; // of int *v15; // ecx int v16; // ecx v5 = (_DWORD *)a1; v6 = (int *)sub_75D3D0(a2, (_DWORD *)a1, a3, &a1); v7 = (int **)v5[4]; if ( a4 > 0 ) { v8 = &(*v7)[2 * a4]; if ( (unsigned int)v8 < v5[2] ) goto LABEL_11; goto LABEL_10; } if ( a4 <= -1001000 ) { if ( a4 == -1001000 ) { v8 = (int *)(v5[3] + 40); } else { v9 = -1001000 - a4; if ( (*v7)[1] == 2146936086 || (v10 = **v7, v11 = *(unsigned __int8 *)(v10 + 6), v14 = __OFSUB__(v9, v11), v12 = v9 == v11, v13 = v9 - v11 < 0, v8 = (int *)(v10 + 8 * v9 + 8), !((unsigned __int8)(v13 ^ v14) | v12)) ) { LABEL_10: v8 = (int *)&unk_A0CDD0; goto LABEL_11; } } } else { v8 = (int *)(v5[2] + 8 * a4); } LABEL_11: v15 = (int *)(*v8 + 4 * a5 + 12); *v6 = *v15; v16 = *v15; if ( *(_BYTE *)(v16 + 5) & 3 ) { LOBYTE(v6) = a1; if ( *(_BYTE *)(a1 + 5) & 4 ) LOBYTE(v6) = sub_761FB0((int)v5, a1, v16); } return (char)v6; } //----- (0075D5F0) -------------------------------------------------------- signed int __cdecl sub_75D5F0(_DWORD *a1, signed int a2, int a3) { if ( !a3 || sub_75B570(a1, -1) != 5 ) return 0; sub_75BFE0((int)a1); if ( !sub_75CFB0(a1, -2) ) return 0; while ( 1 ) { if ( sub_75B570(a1, -2) == 4 ) { if ( sub_75B750(a1, a2, -1) ) { sub_75B1F0((int)a1, -2); return 1; } if ( sub_75D5F0(a1, a2, a3 - 1) ) break; } sub_75B1F0((int)a1, -2); if ( !sub_75CFB0(a1, -2) ) return 0; } sub_75B240(a1, -2); sub_75C0B0((int)a1, ".", 1u); sub_75B2D0(a1, -2); sub_75D040((int)a1, 3); return 1; } //----- (0075D6D0) -------------------------------------------------------- signed int __usercall sub_75D6D0@(_DWORD *a1@, int a2) { int v2; // edi signed int result; // eax int v4; // [esp+0h] [ebp-Ch] v2 = sub_75B1D0(v4); sub_767060((int)a1, "f", a2); sub_75C4C0(a1, -1001000, 2); if ( sub_75D5F0(a1, v2 + 1, 2) ) { sub_75B430(a1, -1, v2 + 1); sub_75B1F0((int)a1, -3); result = 1; } else { sub_75B1F0((int)a1, v2); result = 0; } return result; } //----- (0075D740) -------------------------------------------------------- _DWORD *__usercall sub_75D740@(int a1@, int a2@) { _DWORD *v2; // esi _DWORD *result; // eax char v4; // cl int v5; // eax int v6; // ST1C_4 v2 = (_DWORD *)a2; if ( **(_BYTE **)(a1 + 8) ) return (_DWORD *)sub_75C190(a2, "function '%s'", *(_DWORD *)(a1 + 4)); v4 = **(_BYTE **)(a1 + 12); if ( v4 == 109 ) return (_DWORD *)sub_75C0B0((int)v2, "main chunk", 0xAu); if ( v4 == 67 ) { if ( sub_75D6D0(v2, a1) ) { v5 = sub_75BC70(v2, -1, 0); sub_75C190((int)v2, "function '%s'", v5); result = sub_75B240(v2, -2); } else { result = (_DWORD *)sub_75C0B0((int)v2, "?", 1u); } } else { v6 = *(_DWORD *)(a1 + 24); result = (_DWORD *)sub_75C190((int)v2, "function <%s:%d>", a1 + 36); } return result; } //----- (0075D7E0) -------------------------------------------------------- int __thiscall sub_75D7E0(void *this) { int v1; // edi signed int v2; // esi int v3; // ebx int v5; // [esp+8h] [ebp-6Ch] char v6; // [esp+Ch] [ebp-68h] v1 = (int)this; v2 = 1; v5 = (int)this; if ( !sub_766610((int)this, 1, (int)&v6) ) return 0; do { v3 = v2; v2 *= 2; } while ( sub_766610(v1, v2, (int)&v6) ); while ( v3 < v2 ) { if ( sub_766610(v5, (v2 + v3) / 2, (int)&v6) ) v3 = (v2 + v3) / 2 + 1; else v2 = (v2 + v3) / 2; } return v2 - 1; } //----- (0075D890) -------------------------------------------------------- void __cdecl sub_75D890(int a1, void *a2, int a3, int a4) { int v4; // edi int v5; // eax int v6; // eax int v7; // [esp+Ch] [ebp-74h] int v8; // [esp+14h] [ebp-6Ch] int v9; // [esp+18h] [ebp-68h] int v10; // [esp+2Ch] [ebp-54h] char v11; // [esp+3Bh] [ebp-45h] char v12; // [esp+3Ch] [ebp-44h] v8 = sub_75B1D0(a1); v7 = sub_75D7E0(a2); if ( a3 ) sub_75C190(a1, "%s\n", a3); sub_75C0B0(a1, "stack traceback:", 0x10u); v4 = a4; while ( sub_766610((int)a2, v4, (int)&v9) ) { if ( ++v4 == (v7 <= 22 ? 0 : 0xC) ) { sub_75C0B0(a1, "\n\t...", 5u); v4 = v7 - 10; } else { sub_767060((int)a2, "Slnt", (int)&v9); sub_75C190(a1, "\n\t%s:", (int)&v12); if ( v10 > 0 ) sub_75C190(a1, "%d:", v10); sub_75C0B0(a1, " in ", 4u); sub_75D740((int)&v9, a1); if ( v11 ) sub_75C0B0(a1, "\n\t(...tail calls...)", 0x14u); v5 = sub_75B1D0(a1); sub_75D040(a1, v5 - v8); } } v6 = sub_75B1D0(a1); sub_75D040(a1, v6 - v8); } //----- (0075D9F0) -------------------------------------------------------- int __cdecl sub_75D9F0(int a1, int a2) { int result; // eax int v3; // [esp+4h] [ebp-68h] int v4; // [esp+18h] [ebp-54h] char v5; // [esp+28h] [ebp-44h] if ( sub_766610(a1, a2, (int)&v3) && (sub_767060(a1, "Sl", (int)&v3), v4 > 0) ) result = sub_75C190(a1, "%s:%d: ", (int)&v5); else result = sub_75C0B0(a1, (void *)&byte_9A8050, 0); return result; } //----- (0075DA80) -------------------------------------------------------- void __noreturn sub_75DA80(_DWORD *a1, char *a2, ...) { va_list va; // [esp+14h] [ebp+10h] va_start(va, a2); sub_75D9F0((int)a1, 1); sub_75C160((int)a1, a2, (int)va); sub_75D040((int)a1, 2); sub_75CFA0(a1); } //----- (0075DAC0) -------------------------------------------------------- signed int __cdecl sub_75DAC0(int a1, int a2, int a3) { int v3; // edi signed int result; // eax char *v5; // [esp-10h] [ebp-14h] v3 = *_errno(); if ( a2 ) { sub_75C250(a1, 1); result = 1; } else { sub_75BFE0(a1); v5 = strerror(v3); if ( a3 ) sub_75C190(a1, "%s: %s", a3); else sub_75C100(a1, v5); sub_75C040(a1, v3); result = 3; } return result; } //----- (0075DB50) -------------------------------------------------------- signed int __cdecl sub_75DB50(int a1, signed int a2) { int v2; // esi char *v3; // eax signed int result; // eax if ( a2 == -1 ) { v2 = *_errno(); sub_75BFE0(a1); v3 = strerror(v2); sub_75C100(a1, v3); sub_75C040(a1, v2); result = 3; } else { if ( a2 ) sub_75BFE0(a1); else sub_75C250(a1, 1); sub_75C100(a1, "exit"); sub_75C040(a1, a2); result = 3; } return result; } //----- (0075DBD0) -------------------------------------------------------- signed int __cdecl sub_75DBD0(_DWORD *a1, void *a2) { sub_75C3A0(a1, -1001000, a2); if ( sub_75B570(a1, -1) ) return 0; sub_75B1F0((int)a1, -2); sub_75C540((int)a1, 0, 0); sub_75B4C0(a1, -1); sub_75C770(a1, -1001000, a2); return 1; } //----- (0075DC30) -------------------------------------------------------- signed int __cdecl sub_75DC30(_DWORD *a1, void *a2) { sub_75C3A0(a1, -1001000, a2); return sub_75C9A0(a1, -2); } //----- (0075DC60) -------------------------------------------------------- int __cdecl sub_75DC60(_DWORD *a1, signed int a2, void *a3) { int v3; // esi v3 = sub_75BDE0(a1, a2); if ( !v3 || !sub_75C590(a1, a2) ) return 0; sub_75C3A0(a1, -1001000, a3); if ( !sub_75B750(a1, -1, -2) ) v3 = 0; sub_75B1F0((int)a1, -3); return v3; } //----- (0075DCD0) -------------------------------------------------------- BOOL __cdecl sub_75DCD0(_DWORD *a1, int a2, int a3) { BOOL result; // eax result = sub_75B0A0(a1, a2 + 20); if ( !result ) { if ( a3 ) sub_75DA80(a1, "stack overflow (%s)", a3); sub_75DA80(a1, "stack overflow"); } return result; } //----- (0075DD20) -------------------------------------------------------- int __cdecl sub_75DD20(const void **a1, unsigned int a2) { const void **v2; // esi const void *v3; // ecx unsigned int v4; // eax _DWORD *v5; // ebx unsigned int v6; // edi unsigned int v7; // edi void *v8; // ebx _DWORD *v10; // [esp+14h] [ebp+8h] v2 = a1; v3 = a1[1]; v4 = (unsigned int)a1[2]; v5 = a1[3]; v6 = (unsigned int)a1[1] - v4; v10 = a1[3]; if ( v6 < a2 ) { v7 = 2 * (_DWORD)v3; if ( 2 * (_DWORD)v3 - v4 < a2 ) v7 = v4 + a2; if ( v7 < v4 || v7 - v4 < a2 ) sub_75DA80(v5, "buffer too large"); v8 = (void *)sub_75D130((int)v5, v7); memcpy(v8, *v2, (size_t)v2[2]); if ( *v2 != v2 + 4 ) sub_75B240(v10, -2); *v2 = v8; v2[1] = (const void *)v7; } return (int)v2[2] + (_DWORD)*v2; } //----- (0075DDB0) -------------------------------------------------------- void *__cdecl sub_75DDB0(int a1, void *a2, size_t a3) { void *v3; // eax void *result; // eax v3 = (void *)sub_75DD20((const void **)a1, a3); result = memcpy(v3, a2, a3); *(_DWORD *)(a1 + 8) += a3; return result; } //----- (0075DDE0) -------------------------------------------------------- void *__cdecl sub_75DDE0(int a1, void *a2) { unsigned int v2; // esi void *v3; // eax void *result; // eax v2 = strlen((const char *)a2); v3 = (void *)sub_75DD20((const void **)a1, v2); result = memcpy(v3, a2, v2); *(_DWORD *)(a1 + 8) += v2; return result; } //----- (0075DE20) -------------------------------------------------------- _DWORD *__cdecl sub_75DE20(int a1) { _DWORD *v1; // edi _DWORD *result; // eax v1 = *(_DWORD **)(a1 + 12); result = (_DWORD *)sub_75C0B0(*(_DWORD *)(a1 + 12), *(void **)a1, *(_DWORD *)(a1 + 8)); if ( *(_DWORD *)a1 != a1 + 16 ) result = sub_75B240(v1, -2); return result; } //----- (0075DE60) -------------------------------------------------------- _DWORD *__cdecl sub_75DE60(_DWORD *a1, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *result; // eax v2 = a1; v2[2] += a2; v3 = (_DWORD *)a1[3]; result = (_DWORD *)sub_75C0B0(a1[3], (void *)*a1, a1[2]); if ( (_DWORD *)*v2 != v2 + 4 ) result = sub_75B240(v3, -2); return result; } //----- (0075DEA0) -------------------------------------------------------- _DWORD *__cdecl sub_75DEA0(size_t a1) { size_t v1; // esi _DWORD *v2; // ebx size_t v3; // edi void *v4; // eax void *v6; // [esp+Ch] [ebp-4h] v1 = a1; v2 = *(_DWORD **)(a1 + 12); v6 = (void *)sub_75BC70(*(_DWORD **)(a1 + 12), -1, &a1); if ( *(_DWORD *)v1 != v1 + 16 ) sub_75B2D0(v2, -2); v3 = a1; v4 = (void *)sub_75DD20((const void **)v1, a1); memcpy(v4, v6, v3); *(_DWORD *)(v1 + 8) += v3; return sub_75B240(v2, (*(_DWORD *)v1 == v1 + 16) - 2); } //----- (0075DF10) -------------------------------------------------------- _DWORD *__cdecl sub_75DF10(int a1, _DWORD *a2) { _DWORD *result; // eax result = a2; a2[3] = a1; *a2 = a2 + 4; a2[2] = 0; a2[1] = 512; return result; } //----- (0075DF40) -------------------------------------------------------- int __cdecl sub_75DF40(int a1, int a2, unsigned int a3) { *(_DWORD *)(a2 + 12) = a1; *(_DWORD *)a2 = a2 + 16; *(_DWORD *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 512; return sub_75DD20((const void **)a2, a3); } //----- (0075DF70) -------------------------------------------------------- int __cdecl sub_75DF70(int a1, int a2, size_t *a3) { int result; // eax if ( *(_DWORD *)a2 <= 0 ) { if ( feof(*(FILE **)(a2 + 4)) ) { result = 0; } else { *a3 = fread((void *)(a2 + 8), 1u, 0x200u, *(FILE **)(a2 + 4)); result = a2 + 8; } } else { *a3 = *(_DWORD *)a2; *(_DWORD *)a2 = 0; result = a2 + 8; } return result; } //----- (0075DFD0) -------------------------------------------------------- signed int __usercall sub_75DFD0@(signed int a1@, _DWORD *a2@, int a3) { int *v3; // eax int v4; // ST14_4 v3 = _errno(); strerror(*v3); v4 = sub_75BC70(a2, a1, 0) + 1; sub_75C190((int)a2, "cannot %s %s: %s", a3); sub_75B240(a2, a1); return 7; } //----- (0075E010) -------------------------------------------------------- int __usercall sub_75E010@(int a1@) { _BYTE *v1; // edi int result; // eax int v3; // ecx FILE *v4; // ST00_4 v1 = &unk_A0CB10; *(_DWORD *)a1 = 0; while ( 1 ) { result = fgetc(*(FILE **)(a1 + 4)); if ( result == -1 ) break; v3 = (unsigned __int8)*v1++; if ( result != v3 ) break; *(_BYTE *)((*(_DWORD *)a1)++ + a1 + 8) = result; if ( !*v1 ) { v4 = *(FILE **)(a1 + 4); *(_DWORD *)a1 = 0; return fgetc(v4); } } return result; } //----- (0075E060) -------------------------------------------------------- signed int __usercall sub_75E060@(int a1@, int *a2@) { int v2; // esi int v3; // eax int v4; // eax v2 = a1; v3 = sub_75E010(a1); *a2 = v3; if ( v3 != 35 ) return 0; do v4 = fgetc(*(FILE **)(v2 + 4)); while ( v4 != -1 && v4 != 10 ); *a2 = fgetc(*(FILE **)(v2 + 4)); return 1; } //----- (0075E0A0) -------------------------------------------------------- int __cdecl sub_75E0A0(int a1, char *a2, int a3) { int v3; // eax signed int v4; // edi int v5; // eax int v6; // eax int result; // eax int *v8; // eax int v9; // ST1C_4 int v10; // ST30_4 const char *v11; // eax int v12; // esi int *v13; // eax int v14; // ST14_4 int v15; // [esp+Ch] [ebp-21Ch] int v16; // [esp+14h] [ebp-214h] int v17; // [esp+18h] [ebp-210h] int v18; // [esp+1Ch] [ebp-20Ch] FILE *v19; // [esp+20h] [ebp-208h] char v20[512]; // [esp+24h] [ebp-204h] v17 = a3; v3 = sub_75B1D0(a1); v4 = v3 + 1; v15 = v3 + 1; if ( a2 ) { sub_75C190(a1, "@%s", (int)a2); v19 = fopen(a2, "r"); if ( !v19 ) { v8 = _errno(); strerror(*v8); v9 = sub_75BC70((_DWORD *)a1, v4, 0) + 1; sub_75C190(a1, "cannot %s %s: %s", (int)"open"); sub_75B240((_DWORD *)a1, v4); return 7; } } else { sub_75C0B0(a1, "=stdin", 6u); v19 = (FILE *)sub_7D6CEE(); } v5 = sub_75E010((int)&v18); v16 = v5; if ( v5 == 35 ) { do v6 = fgetc(v19); while ( v6 != -1 && v6 != 10 ); v5 = fgetc(v19); v20[v18++] = 10; v16 = v5; } if ( v5 == 27 ) { if ( !a2 ) { LABEL_15: v20[v18++] = v5; goto LABEL_16; } v19 = freopen(a2, "rb", v19); if ( !v19 ) return sub_75DFD0(v4, (_DWORD *)a1, (int)"reopen"); sub_75E060((int)&v18, &v16); v5 = v16; v4 = v15; } if ( v5 != -1 ) goto LABEL_15; LABEL_16: v10 = v17; v11 = (const char *)sub_75BC70((_DWORD *)a1, -1, 0); v12 = sub_75CD10(a1, (int)sub_75DF70, (int)&v18, v11, v10); v17 = ferror(v19); if ( a2 ) fclose(v19); if ( v17 ) { sub_75B1F0(a1, v4); v13 = _errno(); strerror(*v13); v14 = sub_75BC70((_DWORD *)a1, v4, 0) + 1; sub_75C190(a1, "cannot %s %s: %s", (int)"read"); sub_75B240((_DWORD *)a1, v4); result = 7; } else { sub_75B240((_DWORD *)a1, v4); result = v12; } return result; } // 75E0A0: using guessed type char var_204[512]; //----- (0075E330) -------------------------------------------------------- int __cdecl sub_75E330(int a1, _DWORD *a2, _DWORD *a3) { int v3; // ecx v3 = a2[1]; if ( !v3 ) return 0; *a3 = v3; a2[1] = 0; return *a2; } //----- (0075E360) -------------------------------------------------------- int __cdecl sub_75E360(int a1, int a2, int a3, const char *a4, int a5) { int v6; // [esp+0h] [ebp-8h] int v7; // [esp+4h] [ebp-4h] v6 = a2; v7 = a3; return sub_75CD10(a1, (int)sub_75E330, (int)&v6, a4, a5); } //----- (0075E3A0) -------------------------------------------------------- signed int __cdecl sub_75E3A0(_DWORD *a1, signed int a2, void *a3) { if ( !sub_75C590(a1, a2) ) return 0; sub_75C100((int)a1, a3); sub_75C440(a1, -2); if ( !sub_75B570(a1, -1) ) { sub_75B1F0((int)a1, -3); return 0; } sub_75B240(a1, -2); return 1; } //----- (0075E400) -------------------------------------------------------- signed int __cdecl sub_75E400(_DWORD *a1, unsigned int a2, void *a3) { int v3; // edi v3 = sub_75B1A0((int)a1, a2); if ( !sub_75C590(a1, v3) ) return 0; sub_75C100((int)a1, a3); sub_75C440(a1, -2); if ( !sub_75B570(a1, -1) ) { sub_75B1F0((int)a1, -3); return 0; } sub_75B240(a1, -2); sub_75B4C0(a1, v3); sub_75CBD0((int)a1, 1, 1, 0, 0); return 1; } //----- (0075E480) -------------------------------------------------------- signed int __cdecl sub_75E480(_DWORD *a1, signed int a2) { signed int v2; // edi int v4; // [esp+8h] [ebp-4h] sub_75D0B0((int)a1, a2); v2 = sub_75BA70(a1, -1, &v4); if ( !v4 ) sub_75DA80(a1, "object length is not a number"); sub_75B1F0((int)a1, -2); return v2; } //----- (0075E4D0) -------------------------------------------------------- int __cdecl sub_75E4D0(_DWORD *a1, unsigned int a2, _DWORD *a3) { int result; // eax bool v4; // zf char *v5; // eax int v6; // eax int v7; // eax if ( sub_75E400(a1, a2, "__tostring") ) return sub_75BC70(a1, -1, a3); switch ( sub_75B570(a1, a2) ) { case 0: sub_75C0B0((int)a1, "nil", 3u); result = sub_75BC70(a1, -1, a3); break; case 1: v4 = sub_75BBF0(a1, a2) == 0; v5 = "true"; if ( v4 ) v5 = "false"; sub_75C100((int)a1, v5); result = sub_75BC70(a1, -1, a3); break; case 3: case 4: sub_75B4C0(a1, a2); result = sub_75BC70(a1, -1, a3); break; default: sub_75BEF0(a1, a2); v6 = sub_75B570(a1, a2); v7 = sub_75B600((int)a1, v6); sub_75C190((int)a1, "%s: %p", v7); return sub_75BC70(a1, -1, a3); } return result; } //----- (0075E5D0) -------------------------------------------------------- signed int __cdecl sub_75E5D0(_DWORD *a1, unsigned int a2, void *a3) { int v4; // edi sub_75C3A0(a1, a2, a3); if ( sub_75B570(a1, -1) == 5 ) return 1; sub_75B1F0((int)a1, -2); v4 = sub_75B1A0((int)a1, a2); sub_75C540((int)a1, 0, 0); sub_75B4C0(a1, -1); sub_75C770(a1, v4, a3); return 0; } //----- (0075E640) -------------------------------------------------------- int *__cdecl sub_75E640(_DWORD *a1, void *a2, int a3, int a4) { int v4; // edi int *result; // eax sub_75C1C0((int)a1, a3, 0); sub_75C100((int)a1, a2); sub_75CBD0((int)a1, 1, 1, 0, 0); sub_75C3A0(a1, -1001000, "_LOADED"); if ( sub_75B570(a1, -1) != 5 ) { sub_75B1F0((int)a1, -2); v4 = sub_75B1A0((int)a1, 0xFFF0B9D8); sub_75C540((int)a1, 0, 0); sub_75B4C0(a1, -1); sub_75C770(a1, v4, "_LOADED"); } sub_75B4C0(a1, -2); sub_75C770(a1, -2, a2); result = (int *)sub_75B1F0((int)a1, -2); if ( a4 ) { sub_75B4C0(a1, -1); result = sub_75C710((int)a1, a2); } return result; } //----- (0075E700) -------------------------------------------------------- int __cdecl sub_75E700(int a1, char *a2, char *a3, int a4) { _DWORD *v4; // ebx char *v5; // edi char *v6; // eax char *v7; // esi size_t v8; // eax unsigned int v9; // esi unsigned int v10; // ebx size_t v11; // ecx size_t v12; // esi unsigned int v13; // edi void *v14; // ebx unsigned int v15; // esi void *v16; // eax _DWORD *v17; // esi unsigned int v19; // [esp+14h] [ebp-228h] char *v20; // [esp+20h] [ebp-21Ch] void *v21; // [esp+24h] [ebp-218h] void *v22; // [esp+28h] [ebp-214h] unsigned int v23; // [esp+2Ch] [ebp-210h] size_t v24; // [esp+30h] [ebp-20Ch] _DWORD *v25; // [esp+34h] [ebp-208h] char v26; // [esp+38h] [ebp-204h] v4 = (_DWORD *)a1; v5 = a2; v19 = strlen(a3); v25 = (_DWORD *)a1; v22 = &v26; v24 = 0; v23 = 512; v6 = strstr(a2, a3); v20 = v6; if ( v6 ) { while ( 1 ) { v7 = v6; v8 = v24; v9 = v7 - v5; if ( v23 - v24 < v9 ) { v10 = 2 * v23; if ( 2 * v23 - v24 < v9 ) v10 = v24 + v9; if ( v10 < v24 || v10 - v24 < v9 ) sub_75DA80(v25, "buffer too large"); v21 = (void *)sub_75D130((int)v25, v10); memcpy(v21, v22, v24); if ( v22 != &v26 ) sub_75B240(v25, -2); v8 = v24; v22 = v21; v23 = v10; } memcpy((char *)v22 + v8, v5, v9); v24 += v9; v11 = v24; v12 = strlen((const char *)a4); if ( v23 - v24 < v12 ) { v13 = 2 * v23; if ( 2 * v23 - v24 < v12 ) v13 = v12 + v24; if ( v13 < v24 || v13 - v24 < v12 ) sub_75DA80(v25, "buffer too large"); v14 = (void *)sub_75D130((int)v25, v13); memcpy(v14, v22, v24); if ( v22 != &v26 ) sub_75B240(v25, -2); v11 = v24; v22 = v14; v23 = v13; } memcpy((char *)v22 + v11, (const void *)a4, v12); v5 = &v20[v19]; v24 += v12; v20 = strstr(&v20[v19], a3); if ( !v20 ) break; v6 = v20; } v4 = (_DWORD *)a1; } v15 = strlen(v5); v16 = (void *)sub_75DD20((const void **)&v22, v15); memcpy(v16, v5, v15); v24 += v15; v17 = v25; sub_75C0B0((int)v25, v22, v24); if ( v22 != &v26 ) sub_75B240(v17, -2); return sub_75BC70(v4, -1, 0); } //----- (0075E9E0) -------------------------------------------------------- void *__cdecl sub_75E9E0(int a1, void *a2, int a3, size_t a4) { if ( a4 ) return realloc(a2, a4); free(a2); return 0; } //----- (0075EA10) -------------------------------------------------------- int __cdecl sub_75EA10(_DWORD *a1) { int v1; // ST0C_4 FILE *v2; // eax FILE *v3; // eax v1 = sub_75BC70(a1, -1, 0); v2 = (FILE *)sub_7D6CEE(); fprintf(v2 + 2, "PANIC: unprotected error in call to Lua API (%s)\n", v1); v3 = (FILE *)sub_7D6CEE(); fflush(v3 + 2); return 0; } //----- (0075EA50) -------------------------------------------------------- int sub_75EA50() { int result; // eax int v1; // esi result = sub_75F4E0((int (__cdecl *)(int, _DWORD, signed int, signed int))sub_75E9E0, 0); v1 = result; if ( result ) { sub_75B160(result, (int)sub_75EA10); result = v1; } return result; } //----- (0075EA80) -------------------------------------------------------- int __cdecl sub_75EA80(int a1, double a2) { double *v2; // edi v2 = (double *)sub_75B180(a1); if ( v2 != sub_75B180(0) ) sub_75DA80((_DWORD *)a1, "multiple Lua VMs detected"); if ( a2 != *v2 ) sub_75DA80((_DWORD *)a1, "version mismatch: app. needs %f, Lua core provides %f", a2, *v2); sub_75C000(a1, -4660.0); if ( sub_75BA70((_DWORD *)a1, -1, 0) != -4660 || sub_75BB30((_DWORD *)a1, -1, 0) != -4660 ) sub_75DA80((_DWORD *)a1, "bad conversion number->int; must recompile Lua with proper settings"); return sub_75B1F0(a1, -2); } //----- (0075EB40) -------------------------------------------------------- void __cdecl __noreturn sub_75EB40(_DWORD *a1, int a2, int a3) { const char *v3; // eax int v4; // [esp+8h] [ebp-68h] const char *v5; // [esp+Ch] [ebp-64h] const char *v6; // [esp+10h] [ebp-60h] if ( !sub_766610((int)a1, 0, (int)&v4) ) sub_75DA80(a1, "bad argument #%d (%s)", a2, a3); sub_767060((int)a1, "n", (int)&v4); if ( !strcmp(v6, "method") && !--a2 ) sub_75DA80(a1, "calling '%s' on bad self (%s)", v5, a3); v3 = v5; if ( !v5 ) { if ( sub_75D6D0(a1, (int)&v4) ) v3 = (const char *)sub_75BC70(a1, -1, 0); else v3 = "?"; v5 = v3; } sub_75DA80(a1, "bad argument #%d to '%s' (%s)", a2, v3, a3); } //----- (0075EC50) -------------------------------------------------------- int __cdecl sub_75EC50(_DWORD *a1, signed int a2, void *a3) { int result; // eax int v4; // eax int v5; // eax result = sub_75DC60(a1, a2, a3); if ( !result ) { v4 = sub_75B570(a1, a2); sub_75B600((int)a1, v4); v5 = sub_75C190((int)a1, "%s expected, got %s", (int)a3); sub_75EB40(a1, a2, v5); } return result; } //----- (0075ECA0) -------------------------------------------------------- int __cdecl sub_75ECA0(_DWORD *a1, signed int a2, int a3) { int result; // eax int v4; // ebx int v5; // eax int v6; // eax result = sub_75B570(a1, a2); if ( result != a3 ) { v4 = sub_75B600((int)a1, a3); v5 = sub_75B570(a1, a2); sub_75B600((int)a1, v5); v6 = sub_75C190((int)a1, "%s expected, got %s", v4); sub_75EB40(a1, a2, v6); } return result; } //----- (0075ED00) -------------------------------------------------------- int __cdecl sub_75ED00(_DWORD *a1, signed int a2) { int result; // eax result = sub_75B570(a1, a2); if ( result == -1 ) sub_75EB40(a1, a2, (int)"value expected"); return result; } //----- (0075ED30) -------------------------------------------------------- int __cdecl sub_75ED30(_DWORD *a1, signed int a2, _DWORD *a3) { int result; // eax int v4; // eax int v5; // eax int v6; // [esp+Ch] [ebp-4h] result = sub_75BC70(a1, a2, a3); if ( !result ) { v6 = sub_75B600((int)a1, 4); v4 = sub_75B570(a1, a2); sub_75B600((int)a1, v4); v5 = sub_75C190((int)a1, "%s expected, got %s", v6); sub_75EB40(a1, a2, v5); } return result; } //----- (0075ED90) -------------------------------------------------------- int __cdecl sub_75ED90(_DWORD *a1, signed int a2, const char *a3, _DWORD *a4) { int result; // eax if ( sub_75B570(a1, a2) > 0 ) return sub_75ED30(a1, a2, a4); result = (int)a3; if ( a4 ) { if ( a3 ) *a4 = strlen(a3); else *a4 = 0; } return result; } //----- (0075EDF0) -------------------------------------------------------- double __cdecl sub_75EDF0(_DWORD *a1, signed int a2) { double result; // st7 int v3; // ebx int v4; // eax int v5; // eax int v6; // [esp+10h] [ebp-4h] result = sub_75B9C0(a1, a2, &v6); if ( !v6 ) { v3 = sub_75B600((int)a1, 3); v4 = sub_75B570(a1, a2); sub_75B600((int)a1, v4); v5 = sub_75C190((int)a1, "%s expected, got %s", v3); sub_75EB40(a1, a2, v5); } return result; } //----- (0075EE60) -------------------------------------------------------- double __cdecl sub_75EE60(int a1, int a2, double a3) { double result; // st7 if ( sub_75B570((_DWORD *)a1, a2) > 0 ) result = sub_75EDF0((_DWORD *)a1, a2); else result = a3; return result; } //----- (0075EE90) -------------------------------------------------------- signed int __cdecl sub_75EE90(_DWORD *a1, signed int a2) { signed int result; // eax int v3; // ebx int v4; // eax int v5; // eax int v6; // [esp+Ch] [ebp-4h] result = sub_75BA70(a1, a2, &v6); if ( !v6 ) { v3 = sub_75B600((int)a1, 3); v4 = sub_75B570(a1, a2); sub_75B600((int)a1, v4); v5 = sub_75C190((int)a1, "%s expected, got %s", v3); sub_75EB40(a1, a2, v5); } return result; } //----- (0075EEF0) -------------------------------------------------------- int __cdecl sub_75EEF0(_DWORD *a1, signed int a2) { int result; // eax int v3; // ebx int v4; // eax int v5; // eax int v6; // [esp+Ch] [ebp-4h] result = sub_75BB30(a1, a2, &v6); if ( !v6 ) { v3 = sub_75B600((int)a1, 3); v4 = sub_75B570(a1, a2); sub_75B600((int)a1, v4); v5 = sub_75C190((int)a1, "%s expected, got %s", v3); sub_75EB40(a1, a2, v5); } return result; } //----- (0075EF50) -------------------------------------------------------- signed int __cdecl sub_75EF50(_DWORD *a1, signed int a2, signed int a3) { signed int result; // eax if ( sub_75B570(a1, a2) > 0 ) result = sub_75EE90(a1, a2); else result = a3; return result; } //----- (0075EF80) -------------------------------------------------------- int __cdecl sub_75EF80(_DWORD *a1, int a2, int a3) { int v3; // ebx int i; // edi signed int v5; // ebx int v7; // [esp+24h] [ebp+Ch] sub_75EA80((int)a1, 502.0); v3 = a3; if ( !sub_75B0A0(a1, a3 + 20) ) sub_75DA80(a1, "stack overflow (%s)", "too many upvalues"); for ( i = a2; *(_DWORD *)i; i += 8 ) { if ( v3 > 0 ) { v5 = -v3; v7 = a3; do { sub_75B4C0(a1, v5); --v7; } while ( v7 ); v3 = a3; } sub_75C1C0((int)a1, *(_DWORD *)(i + 4), v3); sub_75C770(a1, -2 - a3, *(void **)i); } return sub_75B1F0((int)a1, -1 - v3); } //----- (0075F030) -------------------------------------------------------- int __cdecl sub_75F030(_DWORD *a1, signed int a2, const char *a3, const char **a4) { const char *v4; // esi int v5; // eax int v6; // esi int v7; // eax int v8; // eax const char *v9; // ecx int result; // eax int v11; // eax v4 = a3; if ( a3 ) { if ( sub_75B570(a1, a2) > 0 ) v4 = (const char *)sub_75ED30(a1, a2, 0); } else { v5 = sub_75BC70(a1, a2, 0); if ( !v5 ) { v6 = sub_75B600((int)a1, 4); v7 = sub_75B570(a1, a2); sub_75B600((int)a1, v7); v8 = sub_75C190((int)a1, "%s expected, got %s", v6); sub_75EB40(a1, a2, v8); } v4 = (const char *)v5; } v9 = *a4; result = 0; if ( !*a4 ) { LABEL_11: v11 = sub_75C190((int)a1, "invalid option '%s'", (int)v4); sub_75EB40(a1, a2, v11); } while ( strcmp(v9, v4) ) { v9 = a4[result++ + 1]; if ( !v9 ) goto LABEL_11; } return result; } //----- (0075F120) -------------------------------------------------------- int __cdecl sub_75F120(_DWORD *a1) { char *v1; // eax char **v2; // esi v1 = (char *)sub_76FD60; v2 = &off_A0CD50; if ( sub_76FD60 ) { do { sub_75E640(a1, *v2, (int)v1, 1); sub_75B1F0((int)a1, -2); v1 = v2[3]; v2 += 2; } while ( v1 ); } sub_75E5D0(a1, 0xFFF0B9D8, "_PRELOAD"); return sub_75B1F0((int)a1, -2); } // A0CD50: using guessed type char *off_A0CD50; //----- (0075F180) -------------------------------------------------------- int __cdecl sub_75F180(int a1, int a2) { int result; // eax result = a1; *(_DWORD *)(result + 8) += *(_DWORD *)(a1 + 12) - a2; *(_DWORD *)(a1 + 12) = a2; return result; } //----- (0075F1A0) -------------------------------------------------------- int __cdecl sub_75F1A0(int a1) { int result; // eax result = sub_76FDE0(a1, 0, 0, 40); *(_DWORD *)(*(_DWORD *)(a1 + 16) + 12) = result; *(_DWORD *)(result + 8) = *(_DWORD *)(a1 + 16); *(_DWORD *)(result + 12) = 0; return result; } //----- (0075F1D0) -------------------------------------------------------- int __cdecl sub_75F1D0(int a1) { int v1; // eax int v2; // esi int result; // eax v1 = *(_DWORD *)(a1 + 16); v2 = *(_DWORD *)(v1 + 12); *(_DWORD *)(v1 + 12) = 0; for ( result = v2; v2; result = v2 ) { v2 = *(_DWORD *)(v2 + 12); sub_76FDE0(a1, result, 40, 0); } return result; } //----- (0075F210) -------------------------------------------------------- int __usercall sub_75F210@(int a1@, _DWORD *a2@) { signed int v2; // eax int v3; // eax int v4; // edx int result; // eax a2[7] = sub_76FDE0(a1, 0, 0, 320); a2[8] = 40; v2 = 0; do { *(_DWORD *)(v2 + a2[7] + 4) = 2146936064; v2 += 8; } while ( v2 < 320 ); v3 = a2[7]; v4 = a2[8]; a2[2] = v3; a2[6] = v3 + 8 * v4 - 40; result = (int)(a2 + 18); *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 12) = 0; *(_BYTE *)(result + 18) = 0; *(_DWORD *)result = a2[2]; *(_DWORD *)(a2[2] + 4) = 2146936064; a2[2] += 8; *(_DWORD *)(result + 4) = a2[2] + 160; a2[4] = a2 + 18; return result; } //----- (0075F290) -------------------------------------------------------- _DWORD *__usercall sub_75F290@(int a1@, int a2@) { int v2; // eax int v3; // edi int v5; // [esp+0h] [ebp-10h] int v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v2 = sub_765C40(v5); v3 = v2; *(_DWORD *)(a1 + 40) = v2; *(_DWORD *)(a1 + 44) = 2146936133; sub_766080(a2, v2, 2, 0); v6 = a2; v7 = 2146936136; sub_766520(a2, v3, 1, &v6); v6 = sub_765C40(a2); v7 = 2146936133; return sub_766520(a2, v3, 2, &v6); } //----- (0075F2F0) -------------------------------------------------------- int __cdecl sub_75F2F0(_DWORD *a1) { int v1; // ebx int result; // eax v1 = a1[3]; sub_75F210((int)a1, a1); sub_75F290(v1, (int)a1); sub_7673E0((int)a1, 32); sub_763120((int)a1); sub_76FF40((int)a1); result = sub_767620((int)a1, "not enough memory", 0x11u); *(_DWORD *)(v1 + 164) = result; *(_BYTE *)(result + 5) |= 0x20u; *(_BYTE *)(v1 + 55) = 1; return result; } //----- (0075F340) -------------------------------------------------------- int __usercall sub_75F340@(_DWORD *a1@) { int v1; // edi v1 = a1[3]; sub_767870((int)a1, a1[7]); sub_761F20((int)a1); sub_76FDE0((int)a1, *(_DWORD *)(a1[3] + 24), 4 * *(_DWORD *)(a1[3] + 32), 0); *(_DWORD *)(v1 + 128) = sub_76FDE0((int)a1, *(_DWORD *)(v1 + 128), *(_DWORD *)(v1 + 136), 0); *(_DWORD *)(v1 + 136) = 0; if ( a1[7] ) { a1[4] = a1 + 18; sub_75F1D0((int)a1); sub_76FDE0((int)a1, a1[7], 8 * a1[8], 0); } return (*(int (__cdecl **)(_DWORD, _DWORD *, signed int, _DWORD))v1)(*(_DWORD *)(v1 + 4), a1, 384, 0); } //----- (0075F3E0) -------------------------------------------------------- int __cdecl sub_75F3E0(int a1) { int v1; // esi int *v2; // eax int v3; // ecx int v4; // edx if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); v1 = sub_760C90(a1, 8, 112, 0, 0); v2 = *(int **)(a1 + 8); *v2 = v1; v2[1] = 2146936136; v3 = *(_DWORD *)(a1 + 12); *(_DWORD *)(a1 + 8) += 8; *(_DWORD *)(v1 + 12) = v3; *(_DWORD *)(v1 + 52) = 0; *(_DWORD *)(v1 + 44) = 0; *(_DWORD *)(v1 + 38) = 0x1000000; *(_DWORD *)(v1 + 48) = 0; *(_DWORD *)(v1 + 28) = 0; *(_DWORD *)(v1 + 16) = 0; *(_DWORD *)(v1 + 32) = 0; *(_DWORD *)(v1 + 64) = 0; *(_DWORD *)(v1 + 56) = 0; *(_WORD *)(v1 + 36) = 1; *(_BYTE *)(v1 + 6) = 0; *(_DWORD *)(v1 + 68) = 0; *(_BYTE *)(v1 + 40) = *(_BYTE *)(a1 + 40); v4 = *(_DWORD *)(a1 + 44); *(_DWORD *)(v1 + 44) = v4; *(_DWORD *)(v1 + 52) = *(_DWORD *)(a1 + 52); *(_DWORD *)(v1 + 48) = v4; sub_75F210(a1, (_DWORD *)v1); return v1; } //----- (0075F480) -------------------------------------------------------- int __cdecl sub_75F480(int a1, _DWORD *a2) { sub_767870((int)a2, a2[7]); if ( a2[7] ) { a2[4] = a2 + 18; sub_75F1D0((int)a2); sub_76FDE0((int)a2, a2[7], 8 * a2[8], 0); } return sub_76FDE0(a1, (int)a2, 112, 0); } //----- (0075F4E0) -------------------------------------------------------- int __cdecl sub_75F4E0(int (__cdecl *a1)(int, _DWORD, signed int, signed int), int a2) { int v2; // eax int v3; // esi int v4; // edi int v5; // eax int v7; // [esp+10h] [ebp-18h] int v8; // [esp+14h] [ebp-14h] int *v9; // [esp+18h] [ebp-10h] void *v10; // [esp+1Ch] [ebp-Ch] int (__cdecl *v11)(int, int); // [esp+20h] [ebp-8h] v7 = a2; v2 = a1(a2, 0, 8, 384); v3 = v2; if ( !v2 ) return 0; *(_DWORD *)v2 = 0; *(_BYTE *)(v2 + 4) = 8; *(_BYTE *)(v2 + 164) = 33; v4 = v2 + 112; *(_BYTE *)(v2 + 5) = 1; *(_BYTE *)(v4 + 54) = 0; *(_WORD *)(v2 + 36) = 1; v5 = v7; *(_DWORD *)(v3 + 12) = v3 + 112; *(_DWORD *)(v3 + 28) = 0; *(_DWORD *)(v3 + 16) = 0; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 64) = 0; *(_DWORD *)(v3 + 52) = 0; *(_DWORD *)(v3 + 44) = 0; *(_DWORD *)(v3 + 38) = 0x1000000; *(_DWORD *)(v3 + 48) = 0; *(_DWORD *)(v3 + 56) = 0; *(_BYTE *)(v3 + 6) = 0; *(_DWORD *)(v3 + 68) = 0; *(_DWORD *)v4 = a1; *(_DWORD *)(v4 + 4) = v5; *(_DWORD *)(v4 + 156) = v3; v7 = _time64(0); v8 = v3; v9 = &v7; v10 = &unk_A0CDD0; v11 = sub_75F4E0; *(_DWORD *)(v3 + 160) = sub_7673A0((int)&v8, 0x10u, v7); *(_DWORD *)(v3 + 232) = v3 + 216; *(_DWORD *)(v3 + 236) = v3 + 216; *(_BYTE *)(v3 + 167) = 0; *(_DWORD *)(v3 + 132) = 0; *(_DWORD *)(v3 + 144) = 0; *(_DWORD *)(v3 + 140) = 0; *(_DWORD *)(v3 + 136) = 0; *(_DWORD *)(v3 + 156) = 2146936064; *(_DWORD *)(v3 + 240) = 0; *(_DWORD *)(v3 + 248) = 0; *(_DWORD *)(v3 + 264) = 0; *(_DWORD *)(v3 + 272) = sub_75B180(0); *(_BYTE *)(v3 + 165) = 5; *(_DWORD *)(v3 + 172) = 0; *(_DWORD *)(v3 + 176) = 0; *(_DWORD *)(v3 + 208) = 0; *(_DWORD *)(v3 + 184) = 0; *(_DWORD *)(v3 + 180) = 0; *(_DWORD *)(v3 + 192) = 0; *(_DWORD *)(v3 + 188) = 0; *(_DWORD *)(v3 + 204) = 0; *(_DWORD *)(v3 + 200) = 0; *(_DWORD *)(v3 + 196) = 0; *(_DWORD *)(v3 + 120) = 384; *(_DWORD *)(v3 + 124) = 0; *(_DWORD *)(v3 + 252) = 200; *(_DWORD *)(v3 + 256) = 200; *(_DWORD *)(v3 + 260) = 200; *(_DWORD *)(v3 + 348) = 0; *(_DWORD *)(v3 + 352) = 0; *(_DWORD *)(v3 + 356) = 0; *(_DWORD *)(v3 + 360) = 0; *(_DWORD *)(v3 + 364) = 0; *(_DWORD *)(v3 + 368) = 0; *(_DWORD *)(v3 + 372) = 0; *(_DWORD *)(v3 + 376) = 0; *(_DWORD *)(v3 + 380) = 0; if ( sub_75FF60(v3, (void (__cdecl *)(int, int))sub_75F2F0, 0) ) { sub_75F340((_DWORD *)v3); return 0; } return v3; } //----- (0075F6A0) -------------------------------------------------------- int __cdecl sub_75F6A0(int a1) { return sub_75F340(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 156)); } //----- (0075F6C0) -------------------------------------------------------- int __cdecl sub_75F6C0(unsigned int a1) { unsigned int v1; // ecx int v2; // eax v1 = a1; v2 = 0; if ( a1 < 8 ) return a1; if ( a1 >= 0x10 ) { do { v1 = (v1 + 1) >> 1; ++v2; } while ( v1 >= 0x10 ); } return (v1 - 8) | (8 * v2 + 8); } //----- (0075F6F0) -------------------------------------------------------- int __cdecl sub_75F6F0(int a1) { int result; // eax result = a1; if ( (a1 >> 3) & 0x1F ) result = ((a1 & 7) + 8) << (((a1 >> 3) & 0x1F) - 1); return result; } //----- (0075F710) -------------------------------------------------------- int __cdecl sub_75F710(int a1) { unsigned int v1; // eax int i; // ecx v1 = a1 - 1; for ( i = 0; v1 >= 0x100; i += 8 ) v1 >>= 8; return i + (unsigned __int8)byte_A0CDD8[v1]; } //----- (0075F7D0) -------------------------------------------------------- int __cdecl sub_75F7D0(int a1) { int result; // eax if ( byte_A0ED31[a1] & 2 ) result = a1 - 48; else result = (a1 | 0x20) - 87; return result; } //----- (0075F7F0) -------------------------------------------------------- double __usercall sub_75F7F0@(_DWORD *a1@, _DWORD *a2@, double a3) { double v3; // st6 int v4; // eax int v5; // eax if ( !(byte_A0ED31[*(unsigned __int8 *)*a2] & 0x10) ) return a3; v3 = a3; do { v4 = *(unsigned __int8 *)*a2; if ( byte_A0ED31[v4] & 2 ) v5 = v4 - 48; else v5 = (v4 | 0x20) - 87; ++*a1; ++*a2; v3 = v3 * 16.0 + (double)v5; } while ( byte_A0ED31[*(unsigned __int8 *)*a2] & 0x10 ); return v3; } //----- (0075F850) -------------------------------------------------------- double __cdecl sub_75F850(unsigned __int8 *a1, unsigned __int8 **a2) { unsigned __int8 *v2; // eax unsigned __int8 **v3; // edi int v4; // edx int v5; // esi int v6; // edx unsigned __int8 v7; // cl _DWORD *v8; // ecx double v9; // st7 unsigned __int8 *v10; // eax unsigned __int8 v12; // cl unsigned __int8 v13; // cl int v14; // edx signed int v15; // edi unsigned __int8 v16; // cl signed int v17; // [esp+14h] [ebp-Ch] int v18; // [esp+18h] [ebp-8h] int v19; // [esp+1Ch] [ebp-4h] v2 = a1; v3 = a2; *a2 = a1; v4 = *v2; v5 = 0; v19 = 0; v18 = 0; if ( byte_A0ED31[v4] & 8 ) { do v6 = (v2++)[1]; while ( byte_A0ED31[v6] & 8 ); } if ( *v2 == 45 ) { ++v2; v17 = 1; } else { if ( *v2 == 43 ) ++v2; v17 = 0; } if ( *v2 != 48 ) return 0.0; v7 = v2[1]; if ( v7 != 120 && v7 != 88 ) return 0.0; a1 = v2 + 2; v9 = sub_75F7F0(&v18, &a1, 0.0); v10 = a1; if ( *a1 == 46 ) { ++a1; v9 = sub_75F7F0(&v19, v8, v9); v10 = a1; v5 = v19; } if ( !v18 && !v5 ) return 0.0; *v3 = v10; v12 = *v10; v19 = -4 * v5; if ( v12 == 112 || v12 == 80 ) { v13 = (v10++)[1]; v14 = 0; if ( v13 == 45 ) { ++v10; v15 = 1; } else { if ( v13 == 43 ) ++v10; v15 = 0; } v16 = *v10; if ( !(byte_A0ED31[*v10] & 2) ) goto LABEL_29; do { ++v10; v14 = (char)v16 + 10 * v14 - 48; v16 = *v10; } while ( byte_A0ED31[*v10] & 2 ); if ( v15 ) v14 = -v14; v19 += v14; v3 = a2; } *v3 = v10; LABEL_29: if ( v17 ) v9 = -v9; return ldexp(v9, v19); } //----- (0075F990) -------------------------------------------------------- BOOL __cdecl sub_75F990(char *a1, int a2, int a3) { double v4; // st7 char *v5; // eax char *v6; // [esp+4h] [ebp-4h] if ( strpbrk(a1, "nN") ) return 0; v4 = strpbrk(a1, "xX") ? sub_75F850((unsigned __int8 *)a1, (unsigned __int8 **)&v6) : strtod(a1, &v6); *(double *)a3 = v4; v5 = v6; if ( v6 == a1 ) return 0; if ( byte_A0ED31[(unsigned __int8)*v6] & 8 ) { do v6 = ++v5; while ( byte_A0ED31[(unsigned __int8)*v5] & 8 ); } return v5 == &a1[a2]; } //----- (0075FA20) -------------------------------------------------------- int __cdecl sub_75FA20(int a1, char *a2, int a3) { char *v3; // edi int v4; // ebx int *v5; // ST24_4 int v6; // eax char *v7; // ecx size_t v8; // eax int *v9; // edi int v10; // eax int *v11; // edi char v12; // cl int v13; // eax double *v14; // eax double v15; // st7 double *v16; // eax int v17; // ecx int v18; // edx int v19; // eax int *v20; // edi int v21; // eax int *v22; // edi int v23; // eax int *v24; // ebx int v25; // eax int result; // eax int v27; // [esp+10h] [ebp-2Ch] char *v28; // [esp+14h] [ebp-28h] char v29; // [esp+1Bh] [ebp-21h] int v30; // [esp+1Ch] [ebp-20h] char v31; // [esp+20h] [ebp-1Ch] v3 = a2; v30 = a3; v27 = 0; v28 = strchr(a2, 37); if ( v28 ) { v4 = a3 - 4; v30 -= 8; do { if ( (signed int)((*(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 8)) & 0xFFFFFFF8) <= 16 ) sub_7600D0((_DWORD *)a1, 2); v5 = *(int **)(a1 + 8); *(_DWORD *)(a1 + 8) = v5 + 2; v6 = sub_767620(a1, v3, v28 - v3); *v5 = v6; v5[1] = *(unsigned __int8 *)(v6 + 4) | 0x7FF7A540; switch ( v28[1] ) { case 37: v22 = *(int **)(a1 + 8); *(_DWORD *)(a1 + 8) = v22 + 2; v23 = sub_767620(a1, "%", 1u); *v22 = v23; v22[1] = *(unsigned __int8 *)(v23 + 4) | 0x7FF7A540; break; case 99: v11 = *(int **)(a1 + 8); v12 = *(_BYTE *)(v4 + 4); v30 += 4; v4 += 4; v29 = v12; *(_DWORD *)(a1 + 8) = v11 + 2; v13 = sub_767620(a1, &v29, 1u); *v11 = v13; v11[1] = *(unsigned __int8 *)(v13 + 4) | 0x7FF7A540; break; case 100: v14 = *(double **)(a1 + 8); v30 += 4; *(_DWORD *)(a1 + 8) = v14 + 1; v15 = (double)*(signed int *)(v4 + 4); v4 += 4; *v14 = v15; break; case 102: v16 = *(double **)(a1 + 8); *(_DWORD *)(a1 + 8) = v16 + 1; v17 = v30 + 8; *v16 = *(double *)(v30 + 8); v30 = v17; v4 += 8; break; case 112: v18 = *(_DWORD *)(v4 + 4); v30 += 4; v4 += 4; v19 = sprintf(&v31, "%p", v18); v20 = *(int **)(a1 + 8); *(_DWORD *)(a1 + 8) = v20 + 2; v21 = sub_767620(a1, &v31, v19); *v20 = v21; v20[1] = *(unsigned __int8 *)(v21 + 4) | 0x7FF7A540; break; case 115: v7 = *(char **)(v4 + 4); v30 += 4; v4 += 4; if ( !v7 ) v7 = "(null)"; v8 = strlen(v7); v9 = *(int **)(a1 + 8); *(_DWORD *)(a1 + 8) = v9 + 2; v10 = sub_767620(a1, v7, v8); *v9 = v10; v9[1] = *(unsigned __int8 *)(v10 + 4) | 0x7FF7A540; break; default: sub_766EB0(a1, "invalid option '%%%c' to 'lua_pushfstring'", v28[1]); return result; } v27 += 2; v3 = v28 + 2; v28 = strchr(v28 + 2, 37); } while ( v28 ); } if ( (signed int)((*(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 8)) & 0xFFFFFFF8) <= 8 ) sub_7600D0((_DWORD *)a1, 1); v24 = *(int **)(a1 + 8); *(_DWORD *)(a1 + 8) = v24 + 2; v25 = sub_767620(a1, v3, strlen(v3)); *v24 = v25; v24[1] = *(unsigned __int8 *)(v25 + 4) | 0x7FF7A540; if ( v27 > 0 ) sub_763C10(a1, v27 + 1); return *(_DWORD *)(*(_DWORD *)(a1 + 8) - 8) + 16; } //----- (0075FD10) -------------------------------------------------------- int __cdecl sub_75FD10(int a1, char *a2, int a3) { return sub_75FA20(a1, a2, (int)&a3); } //----- (0075FD30) -------------------------------------------------------- char __cdecl sub_75FD30(void *a1, char *a2, int a3) { size_t v3; // esi char *v4; // ebx char result; // al char *v6; // eax char *v7; // edi int v8; // edi int v9; // edi v3 = strlen(a2); if ( *a2 == 61 ) { v4 = a2 + 1; if ( v3 <= a3 ) return (unsigned int)memcpy(a1, v4, v3); result = (unsigned int)memcpy(a1, v4, a3 - 1); *((char *)a1 + a3 - 1) = 0; return result; } if ( *a2 != 64 ) { v6 = strchr(a2, 10); *(_DWORD *)a1 = 1920234331; *((_DWORD *)a1 + 1) = 543649385; *((_BYTE *)a1 + 8) = 34; v7 = (char *)a1 + 9; if ( v3 >= a3 - 15 ) { if ( !v6 ) { LABEL_14: if ( v3 > a3 - 15 ) v3 = a3 - 15; memcpy(v7, a2, v3); v9 = (int)&v7[v3]; *(_WORD *)v9 = dword_9EBBB0; result = BYTE2(dword_9EBBB0); *(_BYTE *)(v9 + 2) = BYTE2(dword_9EBBB0); v8 = v9 + 3; goto LABEL_17; } } else if ( !v6 ) { result = (unsigned int)memcpy(v7, a2, v3); v8 = (int)&v7[v3]; LABEL_17: *(_WORD *)v8 = 23842; *(_BYTE *)(v8 + 2) = 0; return result; } v3 = v6 - a2; goto LABEL_14; } if ( v3 <= a3 ) return (unsigned int)memcpy(a1, a2 + 1, v3); *(_WORD *)a1 = dword_9EBBB0; *((_BYTE *)a1 + 2) = BYTE2(dword_9EBBB0); return (unsigned int)memcpy((char *)a1 + 3, &a2[v3 - (a3 - 3) + 1], a3 - 3); } // 9EBBB0: using guessed type int dword_9EBBB0; //----- (0075FE70) -------------------------------------------------------- int __usercall sub_75FE70@(int a1@, int *a2@, int a3@) { int v3; // eax int *v4; // esi int result; // eax int v6; // eax v3 = a1 - 4; v4 = a2; if ( v3 ) { if ( v3 == 2 ) { v6 = sub_767620(a3, "error in error handling", 0x17u); *v4 = v6; result = *(unsigned __int8 *)(v6 + 4) | 0x7FF7A540; v4[1] = result; } else { result = *(_DWORD *)(a3 + 8); *a2 = *(_DWORD *)(result - 8); a2[1] = *(_DWORD *)(result - 4); } *(_DWORD *)(a3 + 8) = v4 + 2; } else { result = *(_DWORD *)(*(_DWORD *)(a3 + 12) + 164); *a2 = result; a2[1] = *(unsigned __int8 *)(result + 4) | 0x7FF7A540; *(_DWORD *)(a3 + 8) = a2 + 2; } return result; } //----- (0075FEE0) -------------------------------------------------------- void __cdecl __noreturn sub_75FEE0(int a1, int a2) { int i; // eax int v3; // edx int v4; // esi _DWORD *v5; // edx int v6; // ecx void (__cdecl *v7)(int); // ecx for ( i = a1; !*(_DWORD *)(i + 64); i = *(_DWORD *)(*(_DWORD *)(i + 12) + 156) ) { v3 = *(_DWORD *)(i + 12); *(_BYTE *)(i + 6) = a2; if ( !*(_DWORD *)(*(_DWORD *)(v3 + 156) + 64) ) { v7 = *(void (__cdecl **)(int))(v3 + 152); if ( v7 ) v7(i); abort(); } v4 = *(_DWORD *)(v3 + 156); v5 = *(_DWORD **)(v4 + 8); v6 = *(_DWORD *)(i + 8); *(_DWORD *)(v4 + 8) = v5 + 2; *v5 = *(_DWORD *)(v6 - 8); v5[1] = *(_DWORD *)(v6 - 4); } *(_DWORD *)(*(_DWORD *)(i + 64) + 68) = a2; longjmp((int *)(*(_DWORD *)(i + 64) + 4), 1); } //----- (0075FF60) -------------------------------------------------------- int __cdecl sub_75FF60(int a1, void (__cdecl *a2)(int, int), int a3) { __int16 v4; // [esp+Ch] [ebp-54h] int v5; // [esp+14h] [ebp-4Ch] char v6; // [esp+18h] [ebp-48h] int v7; // [esp+58h] [ebp-8h] v4 = *(_WORD *)(a1 + 38); v7 = 0; v5 = *(_DWORD *)(a1 + 64); *(_DWORD *)(a1 + 64) = &v5; if ( !_setjmp3(&v6, 0) ) a2(a1, a3); *(_DWORD *)(a1 + 64) = v5; *(_WORD *)(a1 + 38) = v4; return v7; } //----- (0075FFE0) -------------------------------------------------------- int __cdecl sub_75FFE0(_DWORD *a1, int a2) { _DWORD *v2; // esi int v3; // eax int v4; // edi int v5; // eax int v6; // edi _DWORD *v7; // eax int result; // eax int v9; // [esp+14h] [ebp+8h] v2 = a1; v3 = a1[7]; v4 = a1[8]; v9 = a1[7]; if ( (unsigned int)(a2 + 1) > 0x1FFFFFFF ) sub_76FDC0((int)v2); for ( v2[7] = sub_76FDE0((int)v2, v3, 8 * v4, 8 * a2); v4 < a2; ++v4 ) *(_DWORD *)(v2[7] + 8 * v4 + 4) = 2146936064; v5 = v2[7]; v6 = v2[2]; v2[6] = v5 + 8 * a2 - 40; v2[2] = v5 + 8 * ((v6 - v9) >> 3); v7 = (_DWORD *)v2[14]; for ( v2[8] = a2; v7; v7 = (_DWORD *)*v7 ) v7[2] = v2[7] + 8 * ((v7[2] - v9) >> 3); for ( result = v2[4]; result; result = *(_DWORD *)(result + 8) ) { *(_DWORD *)(result + 4) = v2[7] + 8 * ((*(_DWORD *)(result + 4) - v9) >> 3); *(_DWORD *)result = v2[7] + 8 * ((*(_DWORD *)result - v9) >> 3); if ( *(_BYTE *)(result + 18) & 1 ) *(_DWORD *)(result + 24) = v2[7] + 8 * ((*(_DWORD *)(result + 24) - v9) >> 3); } return result; } //----- (007600D0) -------------------------------------------------------- int __cdecl sub_7600D0(_DWORD *a1, int a2) { signed int v2; // eax int v3; // eax int v5; // [esp+0h] [ebp-4h] v2 = a1[8]; if ( v2 > 1000000 ) sub_75FEE0((int)a1, 6); v3 = 2 * v2; if ( v3 > 1000000 ) v3 = 1000000; if ( v3 < ((a1[2] - a1[7]) >> 3) + a2 + 5 ) v3 = ((a1[2] - a1[7]) >> 3) + a2 + 5; if ( v3 > 1000000 ) { sub_75FFE0(a1, 1000200); sub_766EB0((int)a1, "stack overflow", v5); } return sub_75FFE0(a1, v3); } //----- (00760140) -------------------------------------------------------- int __cdecl sub_760140(_DWORD *a1) { int v1; // ecx unsigned int i; // eax int v3; // ecx int result; // eax v1 = a1[4]; for ( i = a1[2]; v1; v1 = *(_DWORD *)(v1 + 8) ) { if ( i < *(_DWORD *)(v1 + 4) ) i = *(_DWORD *)(v1 + 4); } v3 = ((signed int)(i - a1[7]) >> 3) + 1; result = v3 / 8 + v3 + 10; if ( result > 1000000 ) result = 1000000; if ( v3 <= 1000000 && result < a1[8] ) result = sub_75FFE0(a1, result); return result; } //----- (007601A0) -------------------------------------------------------- int __cdecl sub_7601A0(int a1, int a2, int a3) { int result; // eax int v4; // eax int v5; // ecx int v6; // edi int v7; // edx int v8; // ebx signed int v9; // ecx int v10; // ecx int (__cdecl *v11)(int, int *); // [esp+4h] [ebp-70h] int v12; // [esp+8h] [ebp-6Ch] int v13; // [esp+Ch] [ebp-68h] int v14; // [esp+20h] [ebp-54h] int v15; // [esp+6Ch] [ebp-8h] result = *(_DWORD *)(a1 + 52); v11 = (int (__cdecl *)(int, int *))result; if ( result && *(_BYTE *)(a1 + 41) ) { v4 = *(_DWORD *)(a1 + 8); v5 = *(_DWORD *)(a1 + 28); v6 = *(_DWORD *)(a1 + 16); v7 = *(_DWORD *)(v6 + 4) - v5; v8 = v4 - v5; v13 = a2; v12 = v7; v9 = (*(_DWORD *)(a1 + 24) - v4) & 0xFFFFFFF8; v14 = a3; v15 = v6; if ( v9 <= 160 ) sub_7600D0((_DWORD *)a1, 20); *(_DWORD *)(v6 + 4) = *(_DWORD *)(a1 + 8) + 160; *(_BYTE *)(a1 + 41) = 0; *(_BYTE *)(v6 + 18) |= 2u; result = v11(a1, &v13); v10 = v12 + *(_DWORD *)(a1 + 28); *(_BYTE *)(a1 + 41) = 1; *(_DWORD *)(v6 + 4) = v10; *(_DWORD *)(a1 + 8) = v8 + *(_DWORD *)(a1 + 28); *(_BYTE *)(v6 + 18) &= 0xFDu; } return result; } //----- (00760260) -------------------------------------------------------- _DWORD *__usercall sub_760260@(_DWORD *a1@, _DWORD *a2@) { _DWORD *v2; // ebx int v3; // ecx _DWORD *v4; // eax _DWORD *v5; // ecx int v6; // eax signed int v7; // ecx int v8; // ecx int v9; // eax _DWORD *result; // eax int v11; // [esp+0h] [ebp-8h] int v12; // [esp+4h] [ebp-4h] v2 = sub_7631A0((int)a2, a1, 16); v3 = (int)a1 - a2[7]; v12 = (int)a1 - a2[7]; if ( (v2[1] | 0x70) != 2146936182 ) sub_767130((int)a2, (int)a1, (int)"call"); v4 = (_DWORD *)a2[2]; if ( v4 > a1 ) { v5 = v4 - 2; do { *v4 = *v5; v4[1] = v5[1]; v4 -= 2; v5 -= 2; } while ( v4 > a1 ); v3 = v12; } a2[2] += 8; v6 = a2[2]; if ( (signed int)((a2[6] - v6) & 0xFFFFFFF8) <= 0 ) { v7 = a2[8]; if ( v7 > 1000000 ) sub_75FEE0((int)a2, 6); v8 = 2 * v7; v9 = ((v6 - a2[7]) >> 3) + 5; if ( v8 > 1000000 ) v8 = 1000000; if ( v8 < v9 ) v8 = v9; if ( v8 > 1000000 ) { sub_75FFE0(a2, 1000200); sub_766EB0((int)a2, "stack overflow", v11); } sub_75FFE0(a2, v8); v3 = v12; } result = (_DWORD *)(v3 + a2[7]); *result = *v2; result[1] = v2[1]; return result; } //----- (00760340) -------------------------------------------------------- int __cdecl sub_760340(int a1, int a2) { int v2; // esi char v3; // al int v4; // ebx int v5; // edi int v6; // edx int v7; // edi _DWORD *v8; // eax int v9; // ecx _DWORD *v10; // edi _DWORD *v11; // esi int v12; // edx int v14; // [esp+Ch] [ebp-4h] v2 = a1; v3 = *(_BYTE *)(a1 + 40); v4 = *(_DWORD *)(a1 + 16); if ( v3 & 6 ) { if ( v3 & 2 ) { v5 = a2 - *(_DWORD *)(a1 + 28); sub_7601A0(a1, 1, -1); v6 = v5 + *(_DWORD *)(a1 + 28); } else { v6 = a2; } *(_DWORD *)(a1 + 20) = *(_DWORD *)(*(_DWORD *)(v4 + 8) + 28); } else { v6 = a2; } v7 = *(signed __int16 *)(v4 + 16); v8 = *(_DWORD **)v4; *(_DWORD *)(a1 + 16) = *(_DWORD *)(v4 + 8); v14 = v7; v9 = v7; if ( v7 ) { v10 = (_DWORD *)v6; do { if ( (unsigned int)v10 >= *(_DWORD *)(v2 + 8) ) break; v11 = v8; *v8 = *v10; v12 = v10[1]; v8 += 2; v10 += 2; --v9; v11[1] = v12; v2 = a1; } while ( v9 ); v7 = v14; } for ( ; v9 > 0; v8 += 2 ) { --v9; v8[1] = 2146936064; } *(_DWORD *)(v2 + 8) = v8; return v7 + 1; } //----- (007603F0) -------------------------------------------------------- void __cdecl sub_7603F0(_DWORD *a1) { int v1; // eax char v2; // cl int v3; // ecx unsigned int v4; // edx char v5; // cl int (__cdecl *v6)(_DWORD *); // edx int v7; // eax while ( (_DWORD *)a1[4] != a1 + 18 ) { v1 = a1[4]; if ( *(_BYTE *)(v1 + 18) & 1 ) { sub_764220((int)a1); sub_7643C0((int)a1); } else { v2 = *(_BYTE *)(v1 + 18); if ( v2 & 0x10 ) { *(_BYTE *)(v1 + 18) = v2 & 0xEF; a1[17] = *(_DWORD *)(v1 + 32); } if ( *(_WORD *)(v1 + 16) == -1 ) { v3 = a1[4]; v4 = a1[2]; if ( *(_DWORD *)(v3 + 4) < v4 ) *(_DWORD *)(v3 + 4) = v4; } v5 = *(_BYTE *)(v1 + 18); if ( !(v5 & 0x20) ) *(_BYTE *)(v1 + 37) = 1; v6 = *(int (__cdecl **)(_DWORD *))(v1 + 28); *(_BYTE *)(v1 + 18) = v5 & 0xCF | 8; v7 = v6(a1); sub_760340((int)a1, a1[2] - 8 * v7); } } } //----- (00760480) -------------------------------------------------------- signed int __usercall sub_760480@(int a1@, int a2) { int v2; // edi int v3; // esi int *v5; // ebx v2 = a1; v3 = *(_DWORD *)(a1 + 16); if ( !v3 ) return 0; while ( !(*(_BYTE *)(v3 + 18) & 0x10) ) { v3 = *(_DWORD *)(v3 + 8); if ( !v3 ) return 0; } v5 = (int *)(*(_DWORD *)(a1 + 28) + *(_DWORD *)(v3 + 20)); sub_767870(a1, (unsigned int)v5); sub_75FE70(a2, v5, v2); *(_DWORD *)(v2 + 16) = v3; *(_BYTE *)(v2 + 41) = *(_BYTE *)(v3 + 36); *(_WORD *)(v2 + 36) = 0; sub_760140((_DWORD *)v2); *(_DWORD *)(v2 + 68) = *(_DWORD *)(v3 + 32); *(_BYTE *)(v3 + 18) |= 0x20u; *(_BYTE *)(v3 + 37) = a2; return 1; } //----- (007604F0) -------------------------------------------------------- void __usercall __noreturn sub_7604F0(int *a1@, int a2@) { int v2; // eax int v3; // [esp+0h] [ebp-8h] void *v4; // [esp+4h] [ebp-4h] *(_DWORD *)(a2 + 8) = a1; v2 = sub_7676A0(v3, v4); *a1 = v2; a1[1] = *(unsigned __int8 *)(v2 + 4) | 0x7FF7A540; *(_DWORD *)(a2 + 8) += 8; sub_75FEE0(a2, -1); } //----- (00760520) -------------------------------------------------------- int __cdecl sub_760520(int a1, int a2, int a3, int a4) { int v4; // ecx bool v5; // zf int savedregs; // [esp+0h] [ebp+0h] v4 = *(_DWORD *)(a1 + 16); if ( *(_WORD *)(a1 + 36) ) { if ( a1 != *(_DWORD *)(*(_DWORD *)(a1 + 12) + 156) ) sub_766EB0(a1, "attempt to yield across a C-call boundary", savedregs); sub_766EB0(a1, "attempt to yield from outside a coroutine", savedregs); } *(_BYTE *)(a1 + 6) = 1; v5 = (*(_BYTE *)(v4 + 18) & 1) == 0; *(_DWORD *)(v4 + 20) = *(_DWORD *)v4 - *(_DWORD *)(a1 + 28); if ( v5 ) { *(_DWORD *)(v4 + 28) = a4; if ( a4 ) *(_DWORD *)(v4 + 24) = a3; *(_DWORD *)v4 = *(_DWORD *)(a1 + 8) - (8 * a2 + 8); sub_75FEE0(a1, 1); } return 0; } //----- (007605A0) -------------------------------------------------------- int __cdecl sub_7605A0(int a1, void (__cdecl *a2)(int, int), int a3, int a4, int a5) { int v5; // edi __int16 v6; // dx int v7; // eax int v8; // esi int result; // eax int v10; // ebx int *v11; // esi int v12; // [esp+Ch] [ebp-Ch] __int16 v13; // [esp+10h] [ebp-8h] int v14; // [esp+14h] [ebp-4h] char v15; // [esp+23h] [ebp+Bh] v5 = a1; v6 = *(_WORD *)(a1 + 36); v7 = *(_DWORD *)(a1 + 16); v8 = *(_DWORD *)(a1 + 68); v15 = *(_BYTE *)(a1 + 41); v13 = v6; v14 = v7; v12 = v8; *(_DWORD *)(v5 + 68) = a5; result = sub_75FF60(v5, a2, a3); v10 = result; if ( result ) { v11 = (int *)(a4 + *(_DWORD *)(v5 + 28)); sub_767870(v5, a4 + *(_DWORD *)(v5 + 28)); sub_75FE70(v10, v11, v5); *(_DWORD *)(v5 + 16) = v14; *(_BYTE *)(v5 + 41) = v15; *(_WORD *)(v5 + 36) = v13; sub_760140((_DWORD *)v5); *(_DWORD *)(v5 + 68) = v12; result = v10; } else { *(_DWORD *)(v5 + 68) = v8; } return result; } //----- (00760630) -------------------------------------------------------- int __cdecl sub_760630(_DWORD *a1, int **a2) { int v2; // ecx int *v3; // eax unsigned __int8 *v4; // ecx int v5; // ebx const char *v6; // edi int result; // eax int v8; // esi int v9; // ebx int *v10; // edi int v11; // eax v2 = **a2; **a2 = v2 - 1; v3 = *a2; if ( v2 ) { v4 = (unsigned __int8 *)v3[1]; v5 = *v4; v3[1] = (int)(v4 + 1); } else { v5 = sub_767A60((int)*a2); } v6 = (const char *)a2[13]; if ( v5 == 27 ) { if ( v6 && !strchr(v6, 98) ) { sub_75FD10((int)a1, "attempt to load a %s chunk (mode is '%s')", (int)"binary"); sub_75FEE0((int)a1, 3); } result = sub_775780(a1, (int)*a2, (int)(a2 + 1), (const char *)a2[14]); } else { if ( v6 && !strchr(v6, 116) ) { sub_75FD10((int)a1, "attempt to load a %s chunk (mode is '%s')", (int)"text"); sub_75FEE0((int)a1, 3); } result = sub_774DB0((int)a1, (int)*a2, (int)(a2 + 1), (int)(a2 + 4), a2[14], v5); } v8 = result; v9 = 0; if ( *(_BYTE *)(result + 6) ) { v10 = (int *)(result + 16); do { v11 = sub_767790((int)a1); *v10 = v11; if ( *(_BYTE *)(v11 + 5) & 3 && *(_BYTE *)(v8 + 5) & 4 ) sub_761FB0((int)a1, v8, v11); result = *(unsigned __int8 *)(v8 + 6); ++v9; ++v10; } while ( v9 < result ); } return result; } //----- (00760750) -------------------------------------------------------- int __cdecl sub_760750(int a1, int a2, int a3, int a4) { int v4; // esi int v5; // ecx int v6; // ST40_4 int v7; // ebx int v9; // [esp+Ch] [ebp-3Ch] int v10; // [esp+10h] [ebp-38h] int v11; // [esp+18h] [ebp-30h] int v12; // [esp+1Ch] [ebp-2Ch] int v13; // [esp+24h] [ebp-24h] int v14; // [esp+28h] [ebp-20h] int v15; // [esp+30h] [ebp-18h] int v16; // [esp+34h] [ebp-14h] int v17; // [esp+3Ch] [ebp-Ch] int v18; // [esp+40h] [ebp-8h] int v19; // [esp+44h] [ebp-4h] v4 = a1; ++*(_WORD *)(v4 + 36); v19 = a3; v5 = *(_DWORD *)(v4 + 8) - *(_DWORD *)(v4 + 28); v9 = a2; v6 = *(_DWORD *)(a1 + 68); v18 = a4; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v10 = 0; v11 = 0; v7 = sub_7605A0(a1, (void (__cdecl *)(int, int))sub_760630, (int)&v9, v5, v6); v10 = sub_76FDE0(a1, v10, v11, 0); v11 = 0; sub_76FDE0(a1, v12, 2 * v13, 0); sub_76FDE0(a1, v14, 16 * v15, 0); sub_76FDE0(a1, v16, 16 * v17, 0); --*(_WORD *)(v4 + 36); return v7; } //----- (00760810) -------------------------------------------------------- signed int __cdecl sub_760810(int a1, int (__cdecl **a2)(int), __int16 a3) { int (__cdecl **v3)(int); // eax int v4; // esi int (__cdecl *v5)(int); // ecx int v6; // edi int v7; // ecx int (__cdecl *v8)(int); // ebx int v9; // eax int v10; // eax int v12; // ebx int v13; // ecx int v14; // eax int v15; // edi _DWORD *v16; // eax _DWORD *v17; // ecx int v18; // edi int v19; // eax int v20; // edx int v21; // ecx int v22; // edx int v23; // eax int v24; // ecx int v25; // [esp+14h] [ebp+8h] int i; // [esp+18h] [ebp+Ch] v3 = a2; v4 = a1; while ( 1 ) { v5 = v3[1]; v6 = (int)v3 - *(_DWORD *)(a1 + 28); if ( ((unsigned int)v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v5) = 3; v7 = (unsigned __int8)v5 & 0x3F; if ( v7 == 6 ) break; if ( v7 == 22 ) { v8 = *v3; goto LABEL_10; } if ( v7 == 38 ) { v8 = (int (__cdecl *)(int))*((_DWORD *)*v3 + 3); LABEL_10: if ( (signed int)((*(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 8)) & 0xFFFFFFF8) <= 160 ) sub_7600D0((_DWORD *)a1, 20); v9 = *(_DWORD *)(*(_DWORD *)(a1 + 16) + 12); if ( !v9 ) v9 = sub_75F1A0(a1); *(_DWORD *)(a1 + 16) = v9; *(_WORD *)(v9 + 16) = a3; *(_DWORD *)v9 = v6 + *(_DWORD *)(a1 + 28); *(_DWORD *)(v9 + 4) = *(_DWORD *)(a1 + 8) + 160; *(_BYTE *)(v9 + 18) = 0; if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) sub_7630F0(a1); if ( *(_BYTE *)(a1 + 40) & 1 ) sub_7601A0(a1, 0, -1); v10 = v8(a1); sub_760340(a1, *(_DWORD *)(a1 + 8) - 8 * v10); return 1; } v3 = (int (__cdecl **)(int))sub_760260(v3, (_DWORD *)a1); } v12 = *((_DWORD *)*v3 + 3); if ( (*(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 8)) >> 3 <= *(unsigned __int8 *)(v12 + 78) ) sub_7600D0((_DWORD *)a1, *(unsigned __int8 *)(v12 + 78)); v13 = v6 + *(_DWORD *)(a1 + 28); v14 = ((*(_DWORD *)(a1 + 8) - v13) >> 3) - 1; for ( i = v6 + *(_DWORD *)(a1 + 28); v14 < *(unsigned __int8 *)(v12 + 76); ++v14 ) { *(_DWORD *)(*(_DWORD *)(a1 + 8) + 4) = 2146936064; *(_DWORD *)(a1 + 8) += 8; } if ( *(_BYTE *)(v12 + 77) ) { v15 = *(unsigned __int8 *)(v12 + 76); v16 = (_DWORD *)(*(_DWORD *)(a1 + 8) - 8 * v14); v25 = *(_DWORD *)(a1 + 8); if ( v15 > 0 ) { do { v17 = *(_DWORD **)(v4 + 8); *(_DWORD *)(v4 + 8) = v17 + 2; *v17 = *v16; v17[1] = v16[1]; v16[1] = 2146936064; v16 += 2; --v15; } while ( v15 ); } v13 = i; } else { v25 = v13 + 8; } v18 = *(_DWORD *)(*(_DWORD *)(v4 + 16) + 12); if ( !v18 ) { v19 = sub_75F1A0(v4); v13 = i; v18 = v19; } *(_DWORD *)(v4 + 16) = v18; *(_WORD *)(v18 + 16) = a3; *(_DWORD *)v18 = v13; *(_DWORD *)(v18 + 24) = v25; v20 = v25 + 8 * *(unsigned __int8 *)(v12 + 78); *(_DWORD *)(v18 + 4) = v20; *(_DWORD *)(v18 + 28) = *(_DWORD *)(v12 + 12); *(_BYTE *)(v18 + 18) = 1; v21 = v20; v22 = *(_DWORD *)(v4 + 12); *(_DWORD *)(v4 + 8) = v21; if ( *(_DWORD *)(v22 + 12) > 0 ) sub_7630F0(v4); if ( *(_BYTE *)(v4 + 40) & 1 ) { v23 = *(_DWORD *)(v18 + 8); *(_DWORD *)(v18 + 28) += 4; v24 = 0; if ( *(_BYTE *)(v23 + 18) & 1 && (*(_BYTE *)(*(_DWORD *)(v23 + 28) - 4) & 0x3F) == 30 ) { *(_BYTE *)(v18 + 18) |= 0x40u; v24 = 4; } sub_7601A0(v4, v24, -1); *(_DWORD *)(v18 + 28) -= 4; } return 0; } //----- (00760A50) -------------------------------------------------------- signed int __cdecl sub_760A50(int a1, int (__cdecl **a2)(int), __int16 a3, int a4) { unsigned __int16 v4; // ax signed int result; // eax int v6; // [esp+0h] [ebp-4h] v4 = ++*(_WORD *)(a1 + 38); if ( v4 >= 0xC8u ) { if ( v4 == 200 ) sub_766EB0(a1, "C stack overflow", v6); if ( v4 >= 0xE1u ) sub_75FEE0(a1, 6); } if ( !a4 ) ++*(_WORD *)(a1 + 36); if ( !sub_760810(a1, a2, a3) ) sub_7643C0(a1); if ( !a4 ) --*(_WORD *)(a1 + 36); result = 0xFFFF; --*(_WORD *)(a1 + 38); return result; } //----- (00760AE0) -------------------------------------------------------- void __cdecl sub_760AE0(int a1, int *a2) { int v2; // eax int v3; // edx char v4; // cl int v5; // ecx int (__fastcall *v6)(int, int *, int); // edi v2 = *(_DWORD *)(a1 + 16); v3 = (int)a2; if ( *(_WORD *)(a1 + 38) >= 0xC8u ) sub_7604F0(a2, a1); v4 = *(_BYTE *)(a1 + 6); if ( v4 ) { if ( v4 != 1 ) sub_7604F0(a2, a1); *(_BYTE *)(a1 + 6) = 0; v5 = *(_DWORD *)(a1 + 28) + *(_DWORD *)(v2 + 20); *(_DWORD *)v2 = v5; LOBYTE(v5) = *(_BYTE *)(v2 + 18); if ( v5 & 1 ) { sub_7643C0(a1); sub_7603F0((_DWORD *)a1); } else { v6 = *(int (__fastcall **)(int, int *, int))(v2 + 28); if ( v6 ) { LOBYTE(v5) = v5 | 8; *(_BYTE *)(v2 + 37) = 1; *(_BYTE *)(v2 + 18) = v5; v3 = *(_DWORD *)(a1 + 8) - 8 * v6(v5, a2, a1); } sub_760340(a1, v3); sub_7603F0((_DWORD *)a1); } } else { if ( v2 != a1 + 72 ) sub_7604F0(a2, a1); if ( !sub_760810(a1, (int (__cdecl **)(int))a2 - 2, -1) ) sub_7643C0(a1); } } //----- (00760BC0) -------------------------------------------------------- signed int __cdecl sub_760BC0(int a1, int a2, int a3) { signed __int16 v3; // ax int v4; // eax signed int v5; // ebx int *v6; // ecx if ( a2 ) v3 = *(_WORD *)(a2 + 38) + 1; else v3 = 1; *(_WORD *)(a1 + 38) = v3; *(_WORD *)(a1 + 36) = 0; v4 = sub_75FF60(a1, (void (__cdecl *)(int, int))sub_760AE0, *(_DWORD *)(a1 + 8) - 8 * a3); v5 = v4; if ( v4 == -1 ) { v5 = 2; } else if ( v4 ) { while ( v5 != 1 ) { if ( !sub_760480(a1, v5) ) { v6 = *(int **)(a1 + 8); *(_BYTE *)(a1 + 6) = v5; sub_75FE70(v5, v6, a1); *(_DWORD *)(*(_DWORD *)(a1 + 16) + 4) = *(_DWORD *)(a1 + 8); break; } v5 = sub_75FF60(a1, (void (__cdecl *)(int, int))sub_7603F0, 0); if ( !v5 ) break; } } --*(_WORD *)(a1 + 38); *(_WORD *)(a1 + 36) = 1; return v5; } //----- (00760C70) -------------------------------------------------------- int __cdecl sub_760C70(int a1, int a2) { int v2; // ecx int result; // eax v2 = *(_DWORD *)(a1 + 12); result = a2; *(_BYTE *)(result + 5) &= 0xFBu; *(_DWORD *)(a2 + 24) = *(_DWORD *)(v2 + 80); *(_DWORD *)(v2 + 80) = a2; return result; } //----- (00760C90) -------------------------------------------------------- int __cdecl sub_760C90(int a1, char a2, int a3, int *a4, int a5) { int v5; // esi int v6; // eax int *v7; // ecx int result; // eax char v9; // dl v5 = *(_DWORD *)(a1 + 12); v6 = sub_76FDE0(a1, 0, a2 & 0xF, a3); v7 = a4; result = a5 + v6; if ( !a4 ) v7 = (int *)(v5 + 60); v9 = *(_BYTE *)(v5 + 52) & 3; *(_BYTE *)(result + 4) = a2; *(_BYTE *)(result + 5) = v9; *(_DWORD *)result = *v7; *v7 = result; return result; } //----- (00760CE0) -------------------------------------------------------- int __cdecl sub_760CE0(int a1, int a2) { int result; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int *v7; // ecx int v8; // eax int v9; // ecx result = *(unsigned __int8 *)(a2 + 4); *(_BYTE *)(a2 + 5) &= 0xFCu; switch ( result ) { case 4: case 20: v3 = *(_DWORD *)(a2 + 12); *(_BYTE *)(a2 + 5) |= 4u; result = v3 + 17; *(_DWORD *)(a1 + 16) += result; break; case 5: result = a1; *(_DWORD *)(a2 + 24) = *(_DWORD *)(a1 + 76); *(_DWORD *)(a1 + 76) = a2; break; case 6: result = a1; *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 76); *(_DWORD *)(a1 + 76) = a2; break; case 7: v4 = *(_DWORD *)(a2 + 8); if ( v4 && *(_BYTE *)(v4 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(a2 + 8)); v5 = *(_DWORD *)(a2 + 12); if ( v5 ) { if ( *(_BYTE *)(v5 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(a2 + 12)); } v6 = *(_DWORD *)(a2 + 16); *(_BYTE *)(a2 + 5) |= 4u; result = v6 + 24; *(_DWORD *)(a1 + 16) += result; break; case 8: result = a1; *(_DWORD *)(a2 + 60) = *(_DWORD *)(a1 + 76); *(_DWORD *)(a1 + 76) = a2; break; case 9: result = a1; *(_DWORD *)(a2 + 72) = *(_DWORD *)(a1 + 76); *(_DWORD *)(a1 + 76) = a2; break; case 10: v7 = *(int **)(a2 + 8); v8 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v8) = 3; if ( v8 & 0x40 ) { v9 = *v7; if ( *(_BYTE *)(v9 + 5) & 3 ) sub_760CE0(a1, v9); } result = a2 + 16; if ( *(_DWORD *)(a2 + 8) == a2 + 16 ) { *(_BYTE *)(a2 + 5) |= 4u; result = 24; *(_DWORD *)(a1 + 16) += 24; } break; case 38: result = a1; *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 76); *(_DWORD *)(a1 + 76) = a2; break; default: return result; } return result; } //----- (00760E40) -------------------------------------------------------- int __usercall sub_760E40@(int a1@) { int result; // eax int v2; // esi int v3; // eax int v4; // eax int v5; // eax int v6; // eax int *v7; // ecx int v8; // eax int v9; // ecx signed int v10; // [esp+8h] [ebp-8h] int *v11; // [esp+Ch] [ebp-4h] result = a1 + 236; v11 = (int *)(a1 + 236); v10 = 9; do { v2 = *v11; if ( *v11 && *(_BYTE *)(v2 + 5) & 3 ) { result = *(unsigned __int8 *)(v2 + 4); *(_BYTE *)(v2 + 5) &= 0xFCu; switch ( result ) { case 4: case 20: v3 = *(_DWORD *)(v2 + 12); *(_BYTE *)(v2 + 5) |= 4u; result = v3 + 17; *(_DWORD *)(a1 + 16) += result; break; case 5: result = *(_DWORD *)(a1 + 76); *(_DWORD *)(v2 + 24) = result; goto LABEL_25; case 6: *(_DWORD *)(v2 + 8) = *(_DWORD *)(a1 + 76); goto LABEL_25; case 7: v4 = *(_DWORD *)(v2 + 8); if ( v4 && *(_BYTE *)(v4 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v2 + 8)); v5 = *(_DWORD *)(v2 + 12); if ( v5 ) { if ( *(_BYTE *)(v5 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v2 + 12)); } v6 = *(_DWORD *)(v2 + 16); *(_BYTE *)(v2 + 5) |= 4u; result = v6 + 24; *(_DWORD *)(a1 + 16) += result; break; case 8: *(_DWORD *)(v2 + 60) = *(_DWORD *)(a1 + 76); goto LABEL_25; case 9: *(_DWORD *)(v2 + 72) = *(_DWORD *)(a1 + 76); goto LABEL_25; case 10: v7 = *(int **)(v2 + 8); v8 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v8) = 3; if ( v8 & 0x40 ) { v9 = *v7; if ( *(_BYTE *)(v9 + 5) & 3 ) sub_760CE0(a1, v9); } result = v2 + 16; if ( *(_DWORD *)(v2 + 8) == v2 + 16 ) { *(_BYTE *)(v2 + 5) |= 4u; result = 24; *(_DWORD *)(a1 + 16) += 24; } break; case 38: *(_DWORD *)(v2 + 8) = *(_DWORD *)(a1 + 76); LABEL_25: *(_DWORD *)(a1 + 76) = v2; break; default: break; } } ++v11; --v10; } while ( v10 ); return result; } //----- (00760FD0) -------------------------------------------------------- void __usercall sub_760FD0(_DWORD *a1@) { int *i; // esi int v2; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int *v7; // ecx int v8; // eax int v9; // ecx for ( i = (int *)a1[24]; i; i = (int *)*i ) { v2 = *((unsigned __int8 *)i + 4); *((_BYTE *)i + 5) &= 0xB8u; switch ( v2 ) { case 4: case 20: v3 = i[3]; *((_BYTE *)i + 5) |= 4u; a1[4] += v3 + 17; continue; case 5: i[6] = a1[19]; goto LABEL_23; case 6: i[2] = a1[19]; goto LABEL_23; case 7: v4 = i[2]; if ( v4 && *(_BYTE *)(v4 + 5) & 3 ) sub_760CE0((int)a1, i[2]); v5 = i[3]; if ( v5 ) { if ( *(_BYTE *)(v5 + 5) & 3 ) sub_760CE0((int)a1, i[3]); } v6 = i[4]; *((_BYTE *)i + 5) |= 4u; a1[4] += v6 + 24; continue; case 8: i[15] = a1[19]; goto LABEL_23; case 9: i[18] = a1[19]; goto LABEL_23; case 10: v7 = (int *)i[2]; v8 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v8) = 3; if ( v8 & 0x40 ) { v9 = *v7; if ( *(_BYTE *)(v9 + 5) & 3 ) sub_760CE0((int)a1, v9); } if ( (int *)i[2] == i + 4 ) { *((_BYTE *)i + 5) |= 4u; a1[4] += 24; } break; case 38: i[2] = a1[19]; LABEL_23: a1[19] = i; break; default: continue; } } } //----- (00761130) -------------------------------------------------------- void __usercall sub_761130(int a1@) { int i; // esi int *v2; // ecx int v3; // eax int v4; // ecx for ( i = *(_DWORD *)(a1 + 124); i != a1 + 104; i = *(_DWORD *)(i + 20) ) { if ( !(*(_BYTE *)(i + 5) & 7) ) { v2 = *(int **)(i + 8); v3 = v2[1]; if ( (v2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; if ( v3 & 0x40 ) { v4 = *v2; if ( *(_BYTE *)(v4 + 5) & 3 ) sub_760CE0(a1, v4); } } } } //----- (00761190) -------------------------------------------------------- void __usercall sub_761190(_DWORD *a1@) { _DWORD *v1; // edi int v2; // eax int v3; // eax v1 = a1; v2 = a1[39]; v1[20] = 0; v1[19] = 0; v1[22] = 0; v1[23] = 0; v1[21] = 0; if ( v2 && *(_BYTE *)(v2 + 5) & 3 ) sub_760CE0((int)v1, v2); v3 = v1[11]; if ( (v1[11] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; if ( v3 & 0x40 && *(_BYTE *)(v1[10] + 5) & 3 ) sub_760CE0((int)v1, v1[10]); sub_760E40((int)v1); sub_760FD0(v1); } //----- (00761200) -------------------------------------------------------- int __usercall sub_761200@(int a1@, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edi int result; // eax int *v6; // ecx int v7; // ecx int *j; // esi int v9; // ecx unsigned int i; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a1; v3 = *(_DWORD *)(a1 + 16); v4 = 0; result = 3 * (1 << *(_BYTE *)(a1 + 7)); for ( i = v3 + 8 * result; v4 < v2[7]; ++v4 ) { v6 = (int *)(v2[3] + 8 * v4); result = v6[1]; if ( (v6[1] & 0x7FFFFF00) == 2146936064 ) result = (unsigned __int8)result; else result = 3; if ( result & 0x40 ) { v7 = *v6; if ( *(_BYTE *)(v7 + 5) & 3 ) result = sub_760CE0(a2, v7); } } for ( j = (int *)v2[4]; (unsigned int)j < i; j += 6 ) { result = j[3]; v9 = j[3] & 0x7FFFFF00; if ( j[1] == 2146936064 ) { if ( v9 == 2146936064 ) result = (unsigned __int8)result; else result = 3; if ( result & 0x40 ) { if ( *(_BYTE *)(j[2] + 5) & 3 ) j[3] = 2146936075; } } else { if ( v9 != 2146936064 ) LOBYTE(result) = 3; if ( result & 0x40 && *(_BYTE *)(j[2] + 5) & 3 ) sub_760CE0(a2, j[2]); result = j[1]; if ( (j[1] & 0x7FFFFF00) == 2146936064 ) result = (unsigned __int8)result; else result = 3; if ( result & 0x40 ) { result = *j; if ( *(_BYTE *)(*j + 5) & 3 ) result = sub_760CE0(a2, *j); } } } return result; } //----- (00761330) -------------------------------------------------------- int __usercall sub_761330@(_DWORD *a1@, int a2) { int v2; // eax int v3; // eax int v4; // ebx int i; // edi int *v6; // ecx int v7; // eax int v8; // ecx int j; // edi int v10; // eax int k; // edi int v12; // ecx int v13; // ebx int v14; // edi int v15; // edx int v16; // eax v2 = a1[8]; if ( v2 && *(_BYTE *)(v2 + 5) & 3 ) a1[8] = 0; v3 = a1[9]; if ( v3 && *(_BYTE *)(v3 + 5) & 3 ) { v4 = a2; sub_760CE0(a2, v3); } else { v4 = a2; } for ( i = 0; i < a1[11]; ++i ) { v6 = (int *)(a1[2] + 8 * i); v7 = v6[1]; if ( (v6[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v7) = 3; if ( v7 & 0x40 ) { v8 = *v6; if ( *(_BYTE *)(v8 + 5) & 3 ) sub_760CE0(v4, v8); } } for ( j = 0; j < a1[10]; ++j ) { v10 = *(_DWORD *)(a1[7] + 8 * j); if ( v10 && *(_BYTE *)(v10 + 5) & 3 ) sub_760CE0(v4, *(_DWORD *)(a1[7] + 8 * j)); } for ( k = 0; k < a1[14]; ++k ) { v12 = a1[4]; if ( *(_DWORD *)(v12 + 4 * k) && *(_BYTE *)(*(_DWORD *)(v12 + 4 * k) + 5) & 3 ) sub_760CE0(v4, *(_DWORD *)(v12 + 4 * k)); } v13 = 0; if ( a1[15] > 0 ) { v14 = 0; do { v15 = a1[6]; v16 = *(_DWORD *)(v14 + v15); if ( v16 && *(_BYTE *)(v16 + 5) & 3 ) sub_760CE0(a2, *(_DWORD *)(v14 + v15)); ++v13; v14 += 12; } while ( v13 < a1[15] ); } return 4 * (a1[14] + a1[12] + a1[13] + 3 * a1[15] + 2 * (a1[10] + a1[11]) + 20); } //----- (00761460) -------------------------------------------------------- int __usercall sub_761460@(int a1@, int a2) { int v2; // eax _DWORD *v3; // ebx int v4; // eax int v5; // esi int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int *v11; // ecx int v12; // eax int v13; // ecx signed int v15; // [esp+0h] [ebp-4h] v2 = a2; v15 = 0; if ( *(_BYTE *)(a2 + 6) ) { v3 = (_DWORD *)(a2 + 16); do { v4 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v4 & 0x40 ) { v5 = *v3; if ( *(_BYTE *)(*v3 + 5) & 3 ) { v6 = *(unsigned __int8 *)(v5 + 4); *(_BYTE *)(v5 + 5) &= 0xFCu; switch ( v6 ) { case 4: case 20: v7 = *(_DWORD *)(v5 + 12); *(_BYTE *)(v5 + 5) |= 4u; *(_DWORD *)(a1 + 16) += v7 + 17; break; case 5: *(_DWORD *)(v5 + 24) = *(_DWORD *)(a1 + 76); goto LABEL_28; case 6: *(_DWORD *)(v5 + 8) = *(_DWORD *)(a1 + 76); goto LABEL_28; case 7: v8 = *(_DWORD *)(v5 + 8); if ( v8 && *(_BYTE *)(v8 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v5 + 8)); v9 = *(_DWORD *)(v5 + 12); if ( v9 && *(_BYTE *)(v9 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v5 + 12)); v10 = *(_DWORD *)(v5 + 16); *(_BYTE *)(v5 + 5) |= 4u; *(_DWORD *)(a1 + 16) += v10 + 24; break; case 8: *(_DWORD *)(v5 + 60) = *(_DWORD *)(a1 + 76); goto LABEL_28; case 9: *(_DWORD *)(v5 + 72) = *(_DWORD *)(a1 + 76); goto LABEL_28; case 10: v11 = *(int **)(v5 + 8); v12 = v11[1]; if ( (v11[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v12) = 3; if ( v12 & 0x40 ) { v13 = *v11; if ( *(_BYTE *)(v13 + 5) & 3 ) sub_760CE0(a1, v13); } if ( *(_DWORD *)(v5 + 8) == v5 + 16 ) { *(_BYTE *)(v5 + 5) |= 4u; *(_DWORD *)(a1 + 16) += 24; } break; case 38: *(_DWORD *)(v5 + 8) = *(_DWORD *)(a1 + 76); LABEL_28: *(_DWORD *)(a1 + 76) = v5; break; default: break; } } } v2 = a2; v3 += 2; ++v15; } while ( v15 < *(unsigned __int8 *)(a2 + 6) ); } return 8 * *(unsigned __int8 *)(v2 + 6) + 16; } //----- (00761610) -------------------------------------------------------- int __usercall sub_761610@(int a1@, int a2) { int v2; // esi int v3; // eax signed int v4; // ebx int *v5; // esi int v6; // esi int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int *v12; // ecx int v13; // eax int v14; // ecx int v16; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(_DWORD *)(a2 + 12); if ( v3 && *(_BYTE *)(v3 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(a2 + 12)); v4 = 0; if ( *(_BYTE *)(a2 + 6) ) { v5 = (int *)(a2 + 16); v16 = a2 + 16; do { v6 = *v5; if ( v6 && *(_BYTE *)(v6 + 5) & 3 ) { v7 = *(unsigned __int8 *)(v6 + 4); *(_BYTE *)(v6 + 5) &= 0xFCu; switch ( v7 ) { case 4: case 20: v8 = *(_DWORD *)(v6 + 12); *(_BYTE *)(v6 + 5) |= 4u; *(_DWORD *)(a1 + 16) += v8 + 17; break; case 5: *(_DWORD *)(v6 + 24) = *(_DWORD *)(a1 + 76); goto LABEL_29; case 6: *(_DWORD *)(v6 + 8) = *(_DWORD *)(a1 + 76); goto LABEL_29; case 7: v9 = *(_DWORD *)(v6 + 8); if ( v9 && *(_BYTE *)(v9 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v6 + 8)); v10 = *(_DWORD *)(v6 + 12); if ( v10 && *(_BYTE *)(v10 + 5) & 3 ) sub_760CE0(a1, *(_DWORD *)(v6 + 12)); v11 = *(_DWORD *)(v6 + 16); *(_BYTE *)(v6 + 5) |= 4u; *(_DWORD *)(a1 + 16) += v11 + 24; break; case 8: *(_DWORD *)(v6 + 60) = *(_DWORD *)(a1 + 76); goto LABEL_29; case 9: *(_DWORD *)(v6 + 72) = *(_DWORD *)(a1 + 76); goto LABEL_29; case 10: v12 = *(int **)(v6 + 8); v13 = v12[1]; if ( (v12[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v13) = 3; if ( v13 & 0x40 ) { v14 = *v12; if ( *(_BYTE *)(v14 + 5) & 3 ) sub_760CE0(a1, v14); } if ( *(_DWORD *)(v6 + 8) == v6 + 16 ) { *(_BYTE *)(v6 + 5) |= 4u; *(_DWORD *)(a1 + 16) += 24; } break; case 38: *(_DWORD *)(v6 + 8) = *(_DWORD *)(a1 + 76); LABEL_29: *(_DWORD *)(a1 + 76) = v6; break; default: break; } } ++v4; v5 = (int *)(v16 + 4); v16 += 4; } while ( v4 < *(unsigned __int8 *)(a2 + 6) ); v2 = a2; } return 4 * *(unsigned __int8 *)(v2 + 6) + 16; } //----- (007617C0) -------------------------------------------------------- int __usercall sub_7617C0@(_DWORD *a1@, int a2) { int *v2; // esi int v4; // eax unsigned int i; // eax v2 = (int *)a1[7]; if ( !v2 ) return 1; for ( ; (unsigned int)v2 < a1[2]; v2 += 2 ) { v4 = v2[1]; if ( (v2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v4 & 0x40 && *(_BYTE *)(*v2 + 5) & 3 ) sub_760CE0(a2, *v2); } if ( *(_BYTE *)(a2 + 53) == 1 ) { for ( i = a1[7] + 8 * a1[8]; (unsigned int)v2 < i; v2 += 2 ) v2[1] = 2146936064; } return 8 * a1[8] + 112; } //----- (00761860) -------------------------------------------------------- int __usercall sub_761860@(int result@, int a2@) { switch ( *(unsigned __int8 *)(result + 4) ) { case 4u: --*(_DWORD *)(*(_DWORD *)(a2 + 12) + 28); goto LABEL_10; case 5u: result = sub_765C80(a2, result); break; case 6u: result = sub_76FDE0(a2, result, 4 * *(unsigned __int8 *)(result + 6) + 16, 0); break; case 7u: result = sub_76FDE0(a2, result, *(_DWORD *)(result + 16) + 24, 0); break; case 8u: result = sub_75F480(a2, (_DWORD *)result); break; case 9u: result = sub_767970(a2, (_DWORD *)result); break; case 0xAu: result = sub_767830(a2, result); break; case 0x14u: LABEL_10: result = sub_76FDE0(a2, result, *(_DWORD *)(result + 12) + 17, 0); break; case 0x26u: result = sub_76FDE0(a2, result, 8 * *(unsigned __int8 *)(result + 6) + 16, 0); break; default: return result; } return result; } //----- (00761960) -------------------------------------------------------- unsigned int __cdecl sub_761960(int a1, int *a2, int a3) { int v3; // ecx int v4; // edx char v5; // al int *v6; // edi int v8; // ecx int v9; // esi int v10; // ebx int v11; // [esp+0h] [ebp-10h] char v12; // [esp+4h] [ebp-Ch] char v13; // [esp+8h] [ebp-8h] signed int v14; // [esp+Ch] [ebp-4h] v3 = *(_DWORD *)(a1 + 12); v4 = *(unsigned __int8 *)(v3 + 52) ^ 3; v11 = *(unsigned __int8 *)(v3 + 52) ^ 3; if ( *(_BYTE *)(v3 + 54) == 2 ) { v5 = 64; v13 = -1; v14 = 64; } else { v13 = -72; v5 = *(_BYTE *)(v3 + 52) & 3; v14 = 0; } v6 = a2; v12 = v5; if ( *a2 ) { while ( 1 ) { v8 = a3--; if ( !v8 ) break; v9 = *v6; v10 = *(unsigned __int8 *)(*v6 + 5); if ( (v10 ^ 3) & v4 ) { if ( v10 & v14 ) return 0; if ( *(_BYTE *)(v9 + 4) == 8 && *(_DWORD *)(v9 + 28) ) { sub_761960(a1, (int *)(v9 + 56), -3); sub_75F1D0(v9); if ( *(_BYTE *)(*(_DWORD *)(a1 + 12) + 54) != 1 ) sub_760140((_DWORD *)v9); } v6 = (int *)v9; *(_BYTE *)(v9 + 5) = v12 | v10 & v13; } else { *v6 = *(_DWORD *)v9; sub_761860(v9, a1); } if ( !*v6 ) return *v6 != 0 ? (unsigned int)v6 : 0; v4 = v11; } } return *v6 != 0 ? (unsigned int)v6 : 0; } //----- (00761A60) -------------------------------------------------------- _DWORD *__usercall sub_761A60@(_DWORD *result@, int a2, _DWORD *a3) { int v3; // edx int v4; // ecx signed int v5; // ebx int *v6; // edi char v7; // cl int v8; // esi int v9; // ebx int v10; // eax _DWORD *v11; // [esp+Ch] [ebp-1Ch] int v12; // [esp+10h] [ebp-18h] int v13; // [esp+14h] [ebp-14h] char v14; // [esp+18h] [ebp-10h] char v15; // [esp+1Ch] [ebp-Ch] signed int v16; // [esp+20h] [ebp-8h] int v17; // [esp+24h] [ebp-4h] v11 = result; v17 = 0; do { v3 = *(_DWORD *)(a2 + 12); v4 = *(unsigned __int8 *)(v3 + 52); v5 = 1; ++v17; v6 = result; v12 = v4 ^ 3; if ( *(_BYTE *)(v3 + 54) == 2 ) { v7 = 64; v15 = -1; v16 = 64; } else { v15 = -72; v7 = v4 & 3; v16 = 0; } v14 = v7; if ( *result ) { while ( 1 ) { v13 = v5 - 1; if ( !v5 ) break; v8 = *v6; v9 = *(unsigned __int8 *)(*v6 + 5); if ( (v9 ^ 3) & v12 ) { if ( v9 & v16 ) { result = 0; goto LABEL_7; } if ( *(_BYTE *)(v8 + 4) == 8 ) { if ( *(_DWORD *)(v8 + 28) ) { sub_761960(a2, (int *)(v8 + 56), -3); sub_75F1D0(v8); if ( *(_BYTE *)(*(_DWORD *)(a2 + 12) + 54) != 1 ) sub_760140((_DWORD *)v8); } } v6 = (int *)v8; *(_BYTE *)(v8 + 5) = v14 | v9 & v15; } else { v10 = *v6; *v6 = *(_DWORD *)v8; sub_761860(v10, a2); } if ( !*v6 ) break; v5 = v13; } } result = (_DWORD *)(*v6 != 0 ? (unsigned int)v6 : 0); LABEL_7: ; } while ( result == v11 ); if ( a3 ) *a3 += v17; return result; } //----- (00761B70) -------------------------------------------------------- void __usercall sub_761B70(int a1@) { int v1; // esi int v2; // kr00_4 v1 = *(_DWORD *)(a1 + 12); if ( *(_BYTE *)(v1 + 54) != 1 ) { v2 = *(_DWORD *)(v1 + 32); if ( *(_DWORD *)(v1 + 28) < (unsigned int)(v2 / 2) ) sub_7673E0(a1, v2 / 2); *(_DWORD *)(v1 + 128) = sub_76FDE0(a1, *(_DWORD *)(v1 + 128), *(_DWORD *)(v1 + 136), 0); *(_DWORD *)(v1 + 136) = 0; } } //----- (00761BC0) -------------------------------------------------------- int __cdecl sub_761BC0(int a1) { return sub_760A50(a1, (int (__cdecl **)(int))(*(_DWORD *)(a1 + 8) - 16), 0, 0); } //----- (00761BE0) -------------------------------------------------------- int *__usercall sub_761BE0@(int a1@, int a2) { int v2; // edi int v3; // eax int v4; // edx int *result; // eax int v6; // ecx char v7; // bl int v8; // edx _DWORD *v9; // ecx int v10; // eax char v11; // cl int v12; // eax const char *v13; // eax int v14; // [esp+4h] [ebp-Ch] int v15; // [esp+8h] [ebp-8h] int v16; // [esp+Ch] [ebp-4h] v2 = *(_DWORD *)(a1 + 12); v3 = *(_DWORD *)(v2 + 96); v4 = *(_DWORD *)(v2 + 60); *(_DWORD *)(v2 + 96) = *(_DWORD *)v3; *(_DWORD *)v3 = v4; *(_DWORD *)(v2 + 60) = v3; *(_BYTE *)(v3 + 5) &= 0xEFu; if ( *(_BYTE *)(v2 + 53) > 1u ) *(_BYTE *)(v3 + 5) = *(_BYTE *)(v3 + 5) & 0xB8 | *(_BYTE *)(v2 + 52) & 3; v14 = v3; v15 = *(unsigned __int8 *)(v3 + 4) | 0x7FF7A540; result = sub_7631A0(a1, &v14, 2); if ( result ) { if ( (result[1] | 0x70) == 2146936182 ) { v6 = *(unsigned __int8 *)(v2 + 55); v7 = *(_BYTE *)(a1 + 41); *(_BYTE *)(a1 + 41) = 0; *(_BYTE *)(v2 + 55) = 0; v8 = *result; v16 = v6; v9 = *(_DWORD **)(a1 + 8); *v9 = v8; v9[1] = result[1]; v10 = *(_DWORD *)(a1 + 8); *(_DWORD *)(v10 + 8) = v14; *(_DWORD *)(v10 + 12) = v15; *(_DWORD *)(a1 + 8) += 16; result = (int *)sub_7605A0( a1, (void (__cdecl *)(int, int))sub_761BC0, 0, *(_DWORD *)(a1 + 8) - *(_DWORD *)(a1 + 28) - 16, 0); v11 = v16; *(_BYTE *)(a1 + 41) = v7; *(_BYTE *)(v2 + 55) = v11; if ( result ) { if ( a2 ) { if ( result == (int *)2 ) { v12 = *(_DWORD *)(a1 + 8); if ( (*(_DWORD *)(v12 - 4) | 0x70) == 2146936180 ) v13 = (const char *)(*(_DWORD *)(v12 - 8) + 16); else v13 = "no message"; sub_75FD10(a1, "error in __gc metamethod (%s)", (int)v13); result = (int *)5; } sub_75FEE0(a1, (int)result); } } } } return result; } //----- (00761D00) -------------------------------------------------------- void __cdecl sub_761D00(int a1, int a2, int a3) { int v3; // edi _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *i; // ecx char v7; // al v3 = *(_DWORD *)(a1 + 12); if ( !(*(_BYTE *)(a2 + 5) & 0x18) && a3 && !(*(_BYTE *)(a3 + 6) & 4) && sub_763170(a3, 2, *(_DWORD *)(v3 + 176)) ) { v4 = *(_DWORD **)(v3 + 68); if ( v4 == (_DWORD *)a2 ) *(_DWORD *)(v3 + 68) = sub_761A60(v4, a1, 0); v5 = *(_DWORD **)(v3 + 60); for ( i = (_DWORD *)(v3 + 60); v5 != (_DWORD *)a2; v5 = (_DWORD *)*v5 ) i = v5; *i = *(_DWORD *)a2; *(_DWORD *)a2 = *(_DWORD *)(v3 + 64); *(_DWORD *)(v3 + 64) = a2; v7 = *(_BYTE *)(a2 + 5) | 0x10; *(_BYTE *)(a2 + 5) = v7; if ( *(_BYTE *)(v3 + 53) <= 1u ) *(_BYTE *)(a2 + 5) = v7 & 0xBF; else *(_BYTE *)(a2 + 5) = v7 & 0xB8 | *(_BYTE *)(v3 + 52) & 3; } } //----- (00761DA0) -------------------------------------------------------- int __usercall sub_761DA0@(int a1@) { int v1; // esi int v3; // [esp+4h] [ebp-4h] v1 = *(_DWORD *)(a1 + 12); v3 = 0; *(_DWORD *)(v1 + 56) = 0; *(_BYTE *)(v1 + 53) = 2; *(_DWORD *)(v1 + 72) = sub_761A60((_DWORD *)(v1 + 64), a1, &v3); *(_DWORD *)(v1 + 68) = sub_761A60((_DWORD *)(v1 + 60), a1, &v3); return v3; } //----- (00761DE0) -------------------------------------------------------- void __usercall sub_761DE0(int a1@, int a2) { int v2; // ebx bool v3; // zf int v4; // edi int v5; // eax int v6; // edx int *v7; // eax int v8; // ecx char v9; // bl int v10; // edx _DWORD *v11; // ecx int v12; // eax signed int v13; // eax char v14; // cl int v15; // eax const char *v16; // eax int v17; // [esp+8h] [ebp-10h] int v18; // [esp+Ch] [ebp-Ch] int v19; // [esp+10h] [ebp-8h] int v20; // [esp+14h] [ebp-4h] v2 = *(_DWORD *)(a1 + 12); v3 = *(_DWORD *)(v2 + 96) == 0; v19 = *(_DWORD *)(a1 + 12); if ( !v3 ) { do { *(_BYTE *)(*(_DWORD *)(v2 + 96) + 5) &= 0xBFu; v4 = *(_DWORD *)(a1 + 12); v5 = *(_DWORD *)(v4 + 96); v6 = *(_DWORD *)(v4 + 60); *(_DWORD *)(v4 + 96) = *(_DWORD *)v5; *(_DWORD *)v5 = v6; *(_DWORD *)(v4 + 60) = v5; *(_BYTE *)(v5 + 5) &= 0xEFu; if ( *(_BYTE *)(v4 + 53) > 1u ) *(_BYTE *)(v5 + 5) = *(_BYTE *)(v5 + 5) & 0xB8 | *(_BYTE *)(v4 + 52) & 3; v17 = v5; v18 = *(unsigned __int8 *)(v5 + 4) | 0x7FF7A540; v7 = sub_7631A0(a1, &v17, 2); if ( v7 && (v7[1] | 0x70) == 2146936182 ) { v8 = *(unsigned __int8 *)(v4 + 55); v9 = *(_BYTE *)(a1 + 41); *(_BYTE *)(a1 + 41) = 0; *(_BYTE *)(v4 + 55) = 0; v10 = *v7; v20 = v8; v11 = *(_DWORD **)(a1 + 8); *v11 = v10; v11[1] = v7[1]; v12 = *(_DWORD *)(a1 + 8); *(_DWORD *)(v12 + 8) = v17; *(_DWORD *)(v12 + 12) = v18; *(_DWORD *)(a1 + 8) += 16; v13 = sub_7605A0( a1, (void (__cdecl *)(int, int))sub_761BC0, 0, *(_DWORD *)(a1 + 8) - *(_DWORD *)(a1 + 28) - 16, 0); v14 = v20; *(_BYTE *)(a1 + 41) = v9; *(_BYTE *)(v4 + 55) = v14; if ( v13 && a2 ) { if ( v13 == 2 ) { v15 = *(_DWORD *)(a1 + 8); if ( (*(_DWORD *)(v15 - 4) | 0x70) == 2146936180 ) v16 = (const char *)(*(_DWORD *)(v15 - 8) + 16); else v16 = "no message"; sub_75FD10(a1, "error in __gc metamethod (%s)", (int)v16); v13 = 5; } sub_75FEE0(a1, v13); } v2 = v19; } } while ( *(_DWORD *)(v2 + 96) ); } } //----- (00761F20) -------------------------------------------------------- unsigned int __cdecl sub_761F20(int a1) { int v1; // edi int *v2; // eax int *i; // ecx int *j; // eax int v5; // ebx unsigned int result; // eax int k; // ebx v1 = *(_DWORD *)(a1 + 12); v2 = *(int **)(v1 + 96); for ( i = (int *)(v1 + 96); v2; v2 = (int *)*v2 ) i = v2; for ( j = *(int **)(v1 + 64); j; j = *(int **)(v1 + 64) ) { v5 = *j; *((_BYTE *)j + 5) |= 8u; *(_DWORD *)(v1 + 64) = v5; *j = *i; *i = (int)j; i = j; } sub_761DE0(a1, 0); *(_BYTE *)(v1 + 52) = 3; *(_BYTE *)(v1 + 54) = 0; sub_761960(a1, (int *)(v1 + 64), -3); result = sub_761960(a1, (int *)(v1 + 60), -3); for ( k = 0; k < *(_DWORD *)(v1 + 32); ++k ) result = sub_761960(a1, (int *)(*(_DWORD *)(v1 + 24) + 4 * k), -3); return result; } //----- (00761FB0) -------------------------------------------------------- char __cdecl sub_761FB0(int a1, int a2, int a3) { int v3; // eax char result; // al char v5; // dl v3 = *(_DWORD *)(a1 + 12); if ( *(_BYTE *)(v3 + 53) <= 1u ) return sub_760CE0(v3, a3); v5 = *(_BYTE *)(v3 + 52); result = *(_BYTE *)(a2 + 5) & 0xB8; *(_BYTE *)(a2 + 5) = result | v5 & 3; return result; } //----- (00761FF0) -------------------------------------------------------- char __cdecl sub_761FF0(int a1, int a2, int a3) { int v3; // eax int v4; // esi LOBYTE(v3) = a1; v4 = *(_DWORD *)(a1 + 12); if ( *(_DWORD *)(a2 + 32) ) { *(_BYTE *)(a2 + 5) &= 0xFBu; v3 = *(_DWORD *)(v4 + 80); *(_DWORD *)(a2 + 72) = v3; *(_DWORD *)(v4 + 80) = a2; } else if ( *(_BYTE *)(a3 + 5) & 3 ) { LOBYTE(v3) = *(_BYTE *)(a2 + 5); if ( v3 & 4 ) { if ( *(_BYTE *)(v4 + 53) > 1u ) { LOBYTE(v3) = v3 & 0xB8; *(_BYTE *)(a2 + 5) = v3 | *(_BYTE *)(v4 + 52) & 3; } else { LOBYTE(v3) = sub_760CE0(v4, a3); } } } return v3; } //----- (00762050) -------------------------------------------------------- char __cdecl sub_762050(_BYTE *a1, int a2) { int v2; // eax int *v3; // ecx int v4; // ecx LOBYTE(v2) = *(_BYTE *)(a2 + 5); if ( !(v2 & 7) ) { if ( a1[54] == 2 || a1[53] <= 1u ) { *(_BYTE *)(a2 + 5) = v2 & 0xBF | 4; v3 = *(int **)(a2 + 8); v2 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v2) = 3; if ( v2 & 0x40 ) { v4 = *v3; if ( *(_BYTE *)(v4 + 5) & 3 ) LOBYTE(v2) = sub_760CE0((int)a1, v4); } } else { LOBYTE(v2) = v2 & 0xB8; *(_BYTE *)(a2 + 5) = v2 | a1[52] & 3; } } return v2; } //----- (007620C0) -------------------------------------------------------- int __usercall sub_7620C0@(int a1@, int a2) { int *v2; // esi unsigned int v3; // ebx int v4; // eax int v5; // eax char v6; // cl bool v7; // zf int v8; // eax int result; // eax BOOL i; // [esp+Ch] [ebp-4h] v2 = *(int **)(a1 + 16); v3 = (unsigned int)&v2[6 * (1 << *(_BYTE *)(a1 + 7))]; for ( i = *(_DWORD *)(a1 + 28) > 0; (unsigned int)v2 < v3; v2 += 6 ) { v4 = v2[3]; if ( v2[1] == 2146936064 ) { if ( (v4 & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v4 & 0x40 && *(_BYTE *)(v2[2] + 5) & 3 ) v2[3] = 2146936075; } else { if ( (v4 & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v4 & 0x40 && *(_BYTE *)(v2[2] + 5) & 3 ) sub_760CE0(a2, v2[2]); if ( !i ) { v5 = v2[1]; v6 = (v2[1] & 0x7FFFFF00) == 2146936064 ? (_BYTE)v5 : 3; if ( v6 & 0x40 ) { v7 = (v5 | 0x70) == 2146936180; v8 = *v2; if ( v7 ) { if ( v8 && *(_BYTE *)(v8 + 5) & 3 ) sub_760CE0(a2, *v2); } else if ( *(_BYTE *)(v8 + 5) & 3 ) { i = 1; } } } } } result = a2; if ( i ) { *(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 84); *(_DWORD *)(a2 + 84) = a1; } else { *(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 80); *(_DWORD *)(a2 + 80) = a1; } return result; } //----- (00762210) -------------------------------------------------------- signed int __usercall sub_762210@(int a1@, _DWORD *a2) { int v2; // esi signed int v3; // ebx int *v4; // ecx int v5; // eax int v6; // ecx int *v7; // esi int v8; // eax int v9; // edx int v10; // ecx char v11; // cl bool v12; // zf int v13; // eax int v14; // eax signed int v16; // [esp+Ch] [ebp-Ch] signed int v17; // [esp+10h] [ebp-8h] unsigned int i; // [esp+14h] [ebp-4h] v2 = 0; v3 = 0; v16 = 0; v17 = 0; for ( i = *(_DWORD *)(a1 + 16) + 24 * (1 << *(_BYTE *)(a1 + 7)); v2 < *(_DWORD *)(a1 + 28); ++v2 ) { v4 = (int *)(*(_DWORD *)(a1 + 12) + 8 * v2); v5 = v4[1]; if ( (v4[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v5) = 3; if ( v5 & 0x40 ) { v6 = *v4; if ( *(_BYTE *)(v6 + 5) & 3 ) { v3 = 1; sub_760CE0((int)a2, v6); } } } v7 = *(int **)(a1 + 16); if ( (unsigned int)v7 >= i ) goto LABEL_39; do { v8 = v7[3]; v9 = v7[1]; v10 = v7[3] & 0x7FFFFF00; if ( v9 == 2146936064 ) { if ( v10 != 2146936064 ) LOBYTE(v8) = 3; if ( v8 & 0x40 ) { if ( *(_BYTE *)(v7[2] + 5) & 3 ) v7[3] = 2146936075; } goto LABEL_34; } if ( v10 == 2146936064 ) v11 = v8; else v11 = 3; if ( !(v11 & 0x40) ) goto LABEL_23; v12 = (v8 | 0x70) == 2146936180; v13 = v7[2]; if ( v12 ) { if ( v13 && *(_BYTE *)(v13 + 5) & 3 ) sub_760CE0((int)a2, v7[2]); LABEL_23: v14 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v14) = 3; if ( v14 & 0x40 && *(_BYTE *)(*v7 + 5) & 3 ) { v3 = 1; sub_760CE0((int)a2, *v7); } goto LABEL_34; } if ( !(*(_BYTE *)(v13 + 5) & 3) ) goto LABEL_23; v16 = 1; if ( (v9 & 0x7FFFFF00) != 2146936064 ) LOBYTE(v9) = 3; if ( v9 & 0x40 && *(_BYTE *)(*v7 + 5) & 3 ) v17 = 1; LABEL_34: v7 += 6; } while ( (unsigned int)v7 < i ); if ( v17 ) { *(_DWORD *)(a1 + 24) = a2[22]; a2[22] = a1; return v3; } if ( v16 ) { *(_DWORD *)(a1 + 24) = a2[23]; a2[23] = a1; return v3; } LABEL_39: *(_DWORD *)(a1 + 24) = a2[20]; a2[20] = a1; return v3; } //----- (007623F0) -------------------------------------------------------- int __usercall sub_7623F0@(int a1@, _DWORD *a2) { int v2; // edi int v3; // eax _DWORD *v4; // esi int v5; // eax char *v6; // ebx char *v7; // eax v2 = a1; v3 = *(_DWORD *)(a1 + 8); if ( v3 ) { if ( *(_BYTE *)(v3 + 6) & 8 ) v4 = 0; else v4 = sub_763170(v3, 3, a2[45]); } else { v4 = 0; } v5 = *(_DWORD *)(v2 + 8); if ( v5 && *(_BYTE *)(v5 + 5) & 3 ) sub_760CE0((int)a2, *(_DWORD *)(v2 + 8)); if ( v4 && (v4[1] | 0x70) == 2146936180 && ((v6 = strchr((const char *)(*v4 + 16), 107), v7 = strchr((const char *)(*v4 + 16), 118), v6) || v7) ) { *(_BYTE *)(v2 + 5) &= 0xFBu; if ( v6 ) { if ( v7 ) { *(_DWORD *)(v2 + 24) = a2[23]; a2[23] = v2; } else { sub_762210(v2, a2); } } else { sub_7620C0(v2, (int)a2); } } else { sub_761200(v2, (int)a2); } return 8 * (*(_DWORD *)(v2 + 28) + 3 * (1 << *(_BYTE *)(v2 + 7))) + 32; } //----- (007624E0) -------------------------------------------------------- int __usercall sub_7624E0@(_DWORD *a1@) { int result; // eax int v2; // ecx int v3; // edx result = a1[19]; v2 = *(unsigned __int8 *)(result + 4); *(_BYTE *)(result + 5) |= 4u; switch ( v2 ) { case 5: a1[19] = *(_DWORD *)(result + 24); result = sub_7623F0(result, a1); a1[4] += result; break; case 6: a1[19] = *(_DWORD *)(result + 8); result = sub_761610((int)a1, result); a1[4] += result; break; case 8: v3 = a1[20]; a1[19] = *(_DWORD *)(result + 60); *(_DWORD *)(result + 60) = v3; a1[20] = result; *(_BYTE *)(result + 5) &= 0xFBu; result = sub_7617C0((_DWORD *)result, (int)a1); a1[4] += result; break; case 9: a1[19] = *(_DWORD *)(result + 72); result = sub_761330((_DWORD *)result, (int)a1); a1[4] += result; break; case 38: a1[19] = *(_DWORD *)(result + 8); result = sub_761460((int)a1, result); a1[4] += result; break; default: return result; } return result; } //----- (007625C0) -------------------------------------------------------- void __usercall sub_7625C0(_DWORD *a1@) { int v1; // eax int v2; // ecx int v3; // eax int v4; // edx while ( a1[19] ) { v1 = a1[19]; v2 = *(unsigned __int8 *)(v1 + 4); *(_BYTE *)(v1 + 5) |= 4u; switch ( v2 ) { case 5: a1[19] = *(_DWORD *)(v1 + 24); v3 = sub_7623F0(v1, a1); goto LABEL_8; case 6: a1[19] = *(_DWORD *)(v1 + 8); v3 = sub_761610((int)a1, v1); goto LABEL_8; case 8: v4 = a1[20]; a1[19] = *(_DWORD *)(v1 + 60); *(_DWORD *)(v1 + 60) = v4; a1[20] = v1; *(_BYTE *)(v1 + 5) &= 0xFBu; v3 = sub_7617C0((_DWORD *)v1, (int)a1); goto LABEL_8; case 9: a1[19] = *(_DWORD *)(v1 + 72); v3 = sub_761330((_DWORD *)v1, (int)a1); goto LABEL_8; case 38: a1[19] = *(_DWORD *)(v1 + 8); v3 = sub_761460((int)a1, v1); LABEL_8: a1[4] += v3; break; default: break; } } } //----- (007626A0) -------------------------------------------------------- void __usercall sub_7626A0(_DWORD *a1@) { _DWORD *v1; // ebx int v2; // esi int v3; // edi signed int v4; // [esp+Ch] [ebp-4h] v1 = a1; do { v2 = v1[22]; v1[22] = 0; v4 = 0; v3 = v2; if ( !v2 ) break; do { v2 = *(_DWORD *)(v2 + 24); if ( sub_762210(v3, v1) ) { sub_7625C0(v1); v4 = 1; } v3 = v2; } while ( v2 ); } while ( v4 ); } //----- (007626F0) -------------------------------------------------------- int __usercall sub_7626F0@(int result@, int a2, int a3) { int i; // ebx char v4; // cl _DWORD *v5; // esi unsigned int j; // edi unsigned __int8 v7; // cl bool v8; // zf int v9; // ecx for ( i = result; i != a3; i = *(_DWORD *)(i + 24) ) { v4 = *(_BYTE *)(i + 7); v5 = *(_DWORD **)(i + 16); result = 3 * (1 << v4); for ( j = (unsigned int)&v5[6 * (1 << v4)]; (unsigned int)v5 < j; v5 += 6 ) { if ( v5[1] != 2146936064 ) { result = v5[3]; v7 = (v5[3] & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)v5[3] : 3; if ( v7 & 0x40 ) { v8 = (result | 0x70) == 2146936180; result = v5[2]; if ( v8 ) { if ( result ) { if ( *(_BYTE *)(result + 5) & 3 ) result = sub_760CE0(a2, v5[2]); } } else if ( *(_BYTE *)(result + 5) & 3 ) { result = v5[3]; v9 = v5[3] & 0x7FFFFF00; v5[1] = 2146936064; result = v9 == 2146936064 ? (unsigned __int8)result : 3; if ( result & 0x40 && *(_BYTE *)(v5[2] + 5) & 3 ) v5[3] = 2146936075; } } } } } return result; } //----- (007627D0) -------------------------------------------------------- int __usercall sub_7627D0@(int result@, int a2, int a3) { int i; // edi int v4; // esi int *v5; // ecx char v6; // dl int v7; // ecx int *k; // esi unsigned __int8 v9; // cl bool v10; // zf int v11; // edx unsigned int j; // [esp+8h] [ebp-4h] for ( i = result; i != a3; i = *(_DWORD *)(i + 24) ) { v4 = 0; result = 3 * (1 << *(_BYTE *)(i + 7)); for ( j = *(_DWORD *)(i + 16) + 24 * (1 << *(_BYTE *)(i + 7)); v4 < *(_DWORD *)(i + 28); ++v4 ) { v5 = (int *)(*(_DWORD *)(i + 12) + 8 * v4); result = v5[1]; if ( (v5[1] & 0x7FFFFF00) == 2146936064 ) v6 = v5[1]; else v6 = 3; if ( v6 & 0x40 ) { result |= 0x70u; if ( result == 2146936180 ) { v7 = *v5; if ( v7 && *(_BYTE *)(v7 + 5) & 3 ) result = sub_760CE0(a2, v7); } else { result = *(_BYTE *)(*v5 + 5) & 3; if ( *(_BYTE *)(*v5 + 5) & 3 ) v5[1] = 2146936064; } } } for ( k = *(int **)(i + 16); (unsigned int)k < j; k += 6 ) { result = k[1]; if ( result != 2146936064 ) { v9 = (result & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)k[1] : 3; if ( v9 & 0x40 ) { v10 = (result | 0x70) == 2146936180; result = *k; if ( v10 ) { if ( result ) { if ( *(_BYTE *)(result + 5) & 3 ) result = sub_760CE0(a2, *k); } } else if ( *(_BYTE *)(result + 5) & 3 ) { result = k[3]; v11 = k[3] & 0x7FFFFF00; k[1] = 2146936064; result = v11 == 2146936064 ? (unsigned __int8)result : 3; if ( result & 0x40 ) { result = k[2]; if ( *(_BYTE *)(result + 5) & 3 ) k[3] = 2146936075; } } } } } } return result; } //----- (00762930) -------------------------------------------------------- int __cdecl sub_762930(int a1) { int v1; // edi int v2; // esi int v3; // eax int v4; // esi int v5; // ST34_4 int v6; // ST30_4 int v7; // ST2C_4 int v8; // esi int v9; // ecx int v10; // esi int *v11; // ebx _DWORD **v12; // ecx _DWORD *v13; // eax int j; // eax char v15; // dl int v16; // esi int i; // [esp+Ch] [ebp-Ch] int v19; // [esp+10h] [ebp-8h] v1 = *(_DWORD *)(a1 + 12); v2 = -*(_DWORD *)(v1 + 16); if ( *(_BYTE *)(a1 + 5) & 3 ) sub_760CE0(v1, a1); v3 = *(_DWORD *)(v1 + 44); if ( (*(_DWORD *)(v1 + 44) & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; if ( v3 & 0x40 && *(_BYTE *)(*(_DWORD *)(v1 + 40) + 5) & 3 ) sub_760CE0(v1, *(_DWORD *)(v1 + 40)); sub_760E40(v1); sub_761130(v1); sub_7625C0((_DWORD *)v1); v4 = *(_DWORD *)(v1 + 16) + v2; v5 = *(_DWORD *)(v1 + 80); v6 = *(_DWORD *)(v1 + 84); v7 = *(_DWORD *)(v1 + 88); *(_DWORD *)(v1 + 88) = 0; *(_DWORD *)(v1 + 80) = 0; *(_DWORD *)(v1 + 84) = 0; sub_7625C0((_DWORD *)v1); *(_DWORD *)(v1 + 76) = v5; sub_7625C0((_DWORD *)v1); *(_DWORD *)(v1 + 76) = v6; sub_7625C0((_DWORD *)v1); *(_DWORD *)(v1 + 76) = v7; sub_7625C0((_DWORD *)v1); v8 = v4 - *(_DWORD *)(v1 + 16); sub_7626A0((_DWORD *)v1); sub_7627D0(*(_DWORD *)(v1 + 84), v1, 0); sub_7627D0(*(_DWORD *)(v1 + 92), v1, 0); v9 = *(_DWORD *)(a1 + 12); v10 = *(_DWORD *)(v1 + 16) + v8; v11 = (int *)(v9 + 64); v12 = (_DWORD **)(v9 + 96); v19 = *(_DWORD *)(v1 + 92); v13 = *v12; for ( i = *(_DWORD *)(v1 + 84); v13; v13 = (_DWORD *)*v13 ) v12 = (_DWORD **)v13; for ( j = *v11; *v11; j = *v11 ) { v15 = *(_BYTE *)(j + 5); if ( v15 & 3 ) { *(_BYTE *)(j + 5) = v15 | 8; *v11 = *(_DWORD *)j; *(_DWORD *)j = *v12; *v12 = (_DWORD *)j; v12 = (_DWORD **)j; } else { v11 = (int *)j; } } sub_760FD0((_DWORD *)v1); sub_7625C0((_DWORD *)v1); v16 = v10 - *(_DWORD *)(v1 + 16); sub_7626A0((_DWORD *)v1); sub_7626F0(*(_DWORD *)(v1 + 88), v1, 0); sub_7626F0(*(_DWORD *)(v1 + 92), v1, 0); sub_7627D0(*(_DWORD *)(v1 + 84), v1, i); sub_7627D0(*(_DWORD *)(v1 + 92), v1, v19); *(_BYTE *)(v1 + 52) ^= 3u; return v16 + *(_DWORD *)(v1 + 16); } //----- (00762AB0) -------------------------------------------------------- int __usercall sub_762AB0@(int a1@) { int v1; // edi int v2; // ebx int result; // eax int v4; // esi int v5; // ecx int v6; // eax int v7; // esi int v8; // eax signed int v9; // esi int v10; // eax int *v11; // eax int *v12; // eax int v13; // [esp+Ch] [ebp-4h] v1 = a1; v2 = *(_DWORD *)(a1 + 12); switch ( *(unsigned __int8 *)(v2 + 53) ) { case 0u: if ( *(_DWORD *)(v2 + 76) ) { v4 = *(_DWORD *)(v2 + 16); sub_7624E0((_DWORD *)v2); result = *(_DWORD *)(v2 + 16) - v4; } else { v5 = *(_DWORD *)(v2 + 16); *(_BYTE *)(v2 + 53) = 1; *(_DWORD *)(v2 + 20) = v5; v6 = sub_762930(a1); v7 = v6; *(_DWORD *)(v2 + 20) += v6; v8 = sub_761DA0(v1); result = v8 + v7 + 4 * v8; } break; case 2u: v9 = 0; do { v10 = v9 + *(_DWORD *)(v2 + 56); if ( v10 >= *(_DWORD *)(v2 + 32) ) break; sub_761960(v1, (int *)(*(_DWORD *)(v2 + 24) + 4 * v10), -3); ++v9; } while ( v9 < 80 ); *(_DWORD *)(v2 + 56) += v9; if ( *(_DWORD *)(v2 + 56) >= *(_DWORD *)(v2 + 32) ) *(_BYTE *)(v2 + 53) = 3; result = 5 * v9; break; case 3u: v11 = *(int **)(v2 + 72); if ( !v11 ) { *(_BYTE *)(v2 + 53) = 4; goto LABEL_15; } *(_DWORD *)(v2 + 72) = sub_761960(v1, v11, 80); result = 400; break; case 4u: v12 = *(int **)(v2 + 68); if ( v12 ) { *(_DWORD *)(v2 + 68) = sub_761960(v1, v12, 80); result = 400; } else { v13 = *(_DWORD *)(v2 + 156); sub_761960(v1, &v13, 1); sub_761B70(v1); *(_BYTE *)(v2 + 53) = 5; result = 5; } break; case 5u: *(_DWORD *)(v2 + 16) = 4 * *(_DWORD *)(v2 + 32); sub_761190((_DWORD *)v2); result = *(_DWORD *)(v2 + 16); *(_BYTE *)(v2 + 53) = 0; break; default: LABEL_15: result = 0; break; } return result; } //----- (00762C10) -------------------------------------------------------- signed int __cdecl sub_762C10(int a1, int a2) { int v2; // edi signed int result; // eax int v4; // ebx int v5; // ecx int v6; // ebx signed int v7; // esi int v8; // eax int *v9; // eax int *v10; // eax int v11; // [esp+4h] [ebp-4h] v2 = a1; result = *(_DWORD *)(a1 + 12); v11 = *(_DWORD *)(a1 + 12); if ( !((1 << *(_BYTE *)(result + 53)) & a2) ) { do { v4 = *(_DWORD *)(v2 + 12); switch ( *(unsigned __int8 *)(v4 + 53) ) { case 0u: if ( *(_DWORD *)(v4 + 76) ) { sub_7624E0((_DWORD *)v4); } else { v5 = *(_DWORD *)(v4 + 16); *(_BYTE *)(v4 + 53) = 1; *(_DWORD *)(v4 + 20) = v5; *(_DWORD *)(v4 + 20) += sub_762930(v2); v6 = *(_DWORD *)(v2 + 12); a1 = 0; *(_BYTE *)(v6 + 53) = 2; *(_DWORD *)(v6 + 56) = 0; *(_DWORD *)(v6 + 72) = sub_761A60((_DWORD *)(v6 + 64), v2, &a1); *(_DWORD *)(v6 + 68) = sub_761A60((_DWORD *)(v6 + 60), v2, &a1); } break; case 2u: v7 = 0; do { v8 = v7 + *(_DWORD *)(v4 + 56); if ( v8 >= *(_DWORD *)(v4 + 32) ) break; sub_761960(v2, (int *)(*(_DWORD *)(v4 + 24) + 4 * v8), -3); ++v7; } while ( v7 < 80 ); *(_DWORD *)(v4 + 56) += v7; if ( *(_DWORD *)(v4 + 56) >= *(_DWORD *)(v4 + 32) ) *(_BYTE *)(v4 + 53) = 3; break; case 3u: v9 = *(int **)(v4 + 72); if ( v9 ) *(_DWORD *)(v4 + 72) = sub_761960(v2, v9, 80); else *(_BYTE *)(v4 + 53) = 4; break; case 4u: v10 = *(int **)(v4 + 68); if ( v10 ) { *(_DWORD *)(v4 + 68) = sub_761960(v2, v10, 80); } else { a1 = *(_DWORD *)(v4 + 156); sub_761960(v2, &a1, 1); sub_761B70(v2); *(_BYTE *)(v4 + 53) = 5; } break; case 5u: *(_DWORD *)(v4 + 16) = 4 * *(_DWORD *)(v4 + 32); sub_761190((_DWORD *)v4); *(_BYTE *)(v4 + 53) = 0; break; default: break; } result = 1 << *(_BYTE *)(v11 + 53); } while ( !(result & a2) ); } return result; } //----- (00762D80) -------------------------------------------------------- int __cdecl sub_762D80(int a1) { int v1; // esi signed int v2; // ebx int v3; // ecx int v4; // edi int v5; // ecx int v6; // edi int result; // eax v1 = *(_DWORD *)(a1 + 12); v2 = *(_DWORD *)(v1 + 148); if ( v2 < 40 ) v2 = 40; v3 = *(_DWORD *)(v1 + 12) / 200 + 1; if ( v3 >= 2147483644 / v2 ) v4 = 2147483644; else v4 = v3 * v2; do v4 -= sub_762AB0(a1); while ( v4 > -1600 && *(_BYTE *)(v1 + 53) != 5 ); if ( *(_BYTE *)(v1 + 53) != 5 ) return sub_75F180(v1, 200 * (v4 / v2)); v5 = *(_DWORD *)(v1 + 20) / 100; v6 = *(_DWORD *)(v1 + 140); if ( v6 >= 2147483644 / v5 ) result = sub_75F180(v1, *(_DWORD *)(v1 + 12) + *(_DWORD *)(v1 + 8) - 2147483644); else result = sub_75F180(v1, *(_DWORD *)(v1 + 12) + *(_DWORD *)(v1 + 8) - v5 * v6); return result; } //----- (00762E70) -------------------------------------------------------- void __cdecl sub_762E70(int a1, int a2) { int v2; // ebx int v3; // edi int v4; // esi int v5; // esi int v6; // esi int v7; // edx int v8; // edx int v9; // [esp+Ch] [ebp-4h] v2 = a1; v3 = *(_DWORD *)(a1 + 12); v9 = *(unsigned __int8 *)(v3 + 54); if ( a2 ) { *(_BYTE *)(v3 + 54) = 1; } else { v4 = a1; *(_BYTE *)(v3 + 54) = 0; sub_761DE0(v4, 1); } if ( *(_BYTE *)(v3 + 54) == 2 || *(_BYTE *)(v3 + 53) <= 1u ) { v5 = *(_DWORD *)(v2 + 12); a1 = 0; *(_DWORD *)(v5 + 56) = 0; *(_BYTE *)(v5 + 53) = 2; *(_DWORD *)(v5 + 72) = sub_761A60((_DWORD *)(v5 + 64), v2, &a1); *(_DWORD *)(v5 + 68) = sub_761A60((_DWORD *)(v5 + 60), v2, &a1); } sub_762C10(v2, 32); sub_762C10(v2, -33); sub_762C10(v2, 32); if ( v9 == 2 ) sub_762C10(v2, 1); v6 = *(_DWORD *)(v3 + 8) + *(_DWORD *)(v3 + 12); *(_BYTE *)(v3 + 54) = v9; v7 = *(_DWORD *)(v3 + 140); if ( v7 >= 2147483644 / (v6 / 100) ) v8 = 2147483644; else v8 = v6 / 100 * v7; sub_75F180(v3, v6 - v8); if ( !a2 ) sub_761DE0(v2, 1); } //----- (00762F70) -------------------------------------------------------- signed int __cdecl sub_762F70(int a1, signed int a2) { signed int result; // eax int v3; // edi int v4; // esi int v5; // esi result = a2; v3 = a1; v4 = *(_DWORD *)(a1 + 12); if ( a2 != *(unsigned __int8 *)(v4 + 54) ) { if ( a2 == 2 ) { result = sub_762C10(a1, 1); *(_DWORD *)(v4 + 20) = *(_DWORD *)(v4 + 8) + *(_DWORD *)(v4 + 12); *(_BYTE *)(v4 + 54) = 2; } else { *(_BYTE *)(v4 + 54) = 0; v5 = *(_DWORD *)(v3 + 12); a1 = 0; *(_DWORD *)(v5 + 56) = 0; *(_BYTE *)(v5 + 53) = 2; *(_DWORD *)(v5 + 72) = sub_761A60((_DWORD *)(v5 + 64), v3, &a1); *(_DWORD *)(v5 + 68) = sub_761A60((_DWORD *)(v5 + 60), v3, &a1); result = sub_762C10(v3, -29); } } return result; } //----- (00762FF0) -------------------------------------------------------- int __usercall sub_762FF0@(int a1@) { int v1; // esi unsigned int v2; // ebx int v3; // edi int v4; // ecx int v5; // ebx int result; // eax v1 = *(_DWORD *)(a1 + 12); v2 = *(_DWORD *)(v1 + 20); if ( v2 ) { sub_762C10(a1, 32); v3 = *(_DWORD *)(v1 + 8) + *(_DWORD *)(v1 + 12); v4 = *(_DWORD *)(v1 + 144) * (v2 / 0x64) >= v3 ? v2 : 0; *(_BYTE *)(v1 + 53) = 0; *(_DWORD *)(v1 + 20) = v4; } else { sub_762E70(a1, 0); v3 = *(_DWORD *)(v1 + 8) + *(_DWORD *)(v1 + 12); *(_DWORD *)(v1 + 20) = v3; } v5 = *(_DWORD *)(v1 + 140); if ( v5 >= 2147483644 / (v3 / 100) ) result = sub_75F180(v1, v3 - 2147483644); else result = sub_75F180(v1, v3 - v3 / 100 * v5); return result; } //----- (00763090) -------------------------------------------------------- int *__cdecl sub_763090(int a1) { int v1; // edi int *result; // eax signed int i; // ebx v1 = *(_DWORD *)(a1 + 12); if ( *(_BYTE *)(v1 + 54) == 2 ) result = (int *)sub_762FF0(a1); else result = (int *)sub_762D80(a1); for ( i = 0; *(_DWORD *)(v1 + 96); ++i ) { if ( i >= 4 && *(_BYTE *)(v1 + 53) != 5 ) break; result = sub_761BE0(a1, 1); } return result; } //----- (007630F0) -------------------------------------------------------- int *__cdecl sub_7630F0(int a1) { int v1; // eax int *result; // eax v1 = *(_DWORD *)(a1 + 12); if ( *(_BYTE *)(v1 + 55) ) result = sub_763090(a1); else result = (int *)sub_75F180(v1, -1600); return result; } //----- (00763120) -------------------------------------------------------- int __cdecl sub_763120(int a1) { signed int v1; // esi int result; // eax v1 = 42; do { *(_DWORD *)(v1 * 4 + *(_DWORD *)(a1 + 12)) = sub_7676A0(a1, off_A0D178[v1 - 42]); result = *(_DWORD *)(*(_DWORD *)(a1 + 12) + v1 * 4); *(_BYTE *)(result + 5) |= 0x20u; ++v1; } while ( v1 < 59 ); return result; } // A0D178: using guessed type char *off_A0D178[17]; //----- (00763170) -------------------------------------------------------- _DWORD *__cdecl sub_763170(int a1, char a2, int a3) { _DWORD *result; // eax result = sub_765D60(a1, a3); if ( result[1] == 2146936064 ) { *(_BYTE *)(a1 + 6) |= 1 << a2; result = 0; } return result; } //----- (007631A0) -------------------------------------------------------- _DWORD *__cdecl sub_7631A0(int a1, _DWORD *a2, int a3) { int v3; // edx char v4; // al int v5; // eax int v6; // ecx _DWORD *result; // eax v3 = a2[1] & 0x7FFFFF00; if ( v3 == 2146936064 ) v4 = a2[1]; else v4 = 3; v5 = (v4 & 0xF) - 5; if ( v5 ) { if ( v5 == 2 ) { v6 = *(_DWORD *)(*a2 + 8); } else if ( v3 == 2146936064 ) { v6 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * (a2[1] & 0xF) + 236); } else { v6 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 248); } } else { v6 = *(_DWORD *)(*a2 + 8); } if ( v6 ) result = sub_765D60(v6, *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * a3 + 168)); else result = &unk_A0CDD0; return result; } //----- (00763240) -------------------------------------------------------- double *__cdecl sub_763240(double *a1, double *a2) { double *result; // eax int v3[2]; // [esp+0h] [ebp-8h] result = a1; if ( (*((_DWORD *)a1 + 1) & 0x7FFFFF00) == 2146936064 ) { if ( (*((_DWORD *)a1 + 1) | 0x70) == 2146936180 && sub_75F990((char *)(*(_DWORD *)a1 + 16), *(_DWORD *)(*(_DWORD *)a1 + 12), (int)v3) ) { result = a2; *a2 = *(double *)v3; } else { result = 0; } } return result; } //----- (007632A0) -------------------------------------------------------- signed int __cdecl sub_7632A0(int a1, int a2) { int v3; // eax int v4; // eax char v5; // [esp+10h] [ebp-24h] if ( (*(_DWORD *)(a2 + 4) & 0x7FFFFF00) == 2146936064 ) return 0; v3 = sprintf(&v5, "%.14g", *(double *)a2); v4 = sub_767620(a1, &v5, v3); *(_DWORD *)a2 = v4; *(_DWORD *)(a2 + 4) = *(unsigned __int8 *)(v4 + 4) | 0x7FF7A540; return 1; } //----- (00763320) -------------------------------------------------------- _DWORD *__usercall sub_763320@(_DWORD *a1@, _DWORD *a2@, _DWORD *a3@, _DWORD *a4, _DWORD *a5, int a6) { _DWORD *v6; // esi _DWORD *v7; // eax char *v8; // edi _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *result; // eax int v13; // esi v6 = a1; v7 = (_DWORD *)a1[2]; v6[2] = v7 + 2; v8 = (char *)a5 - v6[7]; *v7 = *a4; v7[1] = a4[1]; v9 = (_DWORD *)v6[2]; v6[2] = v9 + 2; *v9 = *a2; v9[1] = a2[1]; v10 = (_DWORD *)v6[2]; v6[2] = v10 + 2; *v10 = *a3; v10[1] = a3[1]; if ( !a6 ) { v11 = (_DWORD *)v6[2]; v6[2] = v11 + 2; *v11 = *a5; v11[1] = a5[1]; } result = (_DWORD *)sub_760A50((int)v6, (int (__cdecl **)(int))(v6[2] + 8 * a6 - 32), a6, *(_BYTE *)(v6[4] + 18) & 1); if ( a6 ) { result = (_DWORD *)(v6[2] - 8); v6[2] = result; v13 = v6[7]; *(_DWORD *)&v8[v13] = *result; *(_DWORD *)&v8[v13 + 4] = result[1]; } return result; } //----- (007633D0) -------------------------------------------------------- int __cdecl sub_7633D0(_DWORD *a1, int *a2, int *a3, int *a4) { int *v4; // ebx int v5; // edi int *v6; // eax int v7; // edi int *v8; // eax int result; // eax int *v10; // ecx char *v11; // edi int *v12; // eax int *v13; // eax _DWORD *v14; // eax int v15; // esi int v16; // [esp+0h] [ebp-14h] int *v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v4 = a2; v18 = 0; while ( 1 ) { if ( v4[1] == 2146936133 ) { v5 = *v4; v6 = sub_765DA0(*v4, a3); v17 = v6; if ( v6[1] != 2146936064 ) goto LABEL_8; v7 = *(_DWORD *)(v5 + 8); if ( !v7 || *(_BYTE *)(v7 + 6) & 1 ) goto LABEL_8; v8 = sub_763170(v7, 0, *(_DWORD *)(a1[3] + 168)); if ( !v8 ) { v6 = v17; LABEL_8: *a4 = *v6; result = v6[1]; a4[1] = result; return result; } } else { v8 = sub_7631A0((int)a1, v4, 0); if ( v8[1] == 2146936064 ) sub_767130((int)a1, (int)v4, (int)"index"); } if ( (v8[1] | 0x70) == 2146936182 ) break; v4 = v8; if ( ++v18 >= 100 ) sub_766EB0((int)a1, "loop in gettable", v16); } v10 = (int *)a1[2]; v11 = (char *)a4 - a1[7]; a1[2] = v10 + 2; *v10 = *v8; v10[1] = v8[1]; v12 = (int *)a1[2]; a1[2] = v12 + 2; *v12 = *v4; v12[1] = v4[1]; v13 = (int *)a1[2]; a1[2] = v13 + 2; *v13 = *a3; v13[1] = a3[1]; sub_760A50((int)a1, (int (__cdecl **)(int))(a1[2] - 24), 1, *(_BYTE *)(a1[4] + 18) & 1); v14 = (_DWORD *)(a1[2] - 8); a1[2] = v14; v15 = a1[7]; *(_DWORD *)&v11[v15] = *v14; result = v14[1]; *(_DWORD *)&v11[v15 + 4] = result; return result; } //----- (00763520) -------------------------------------------------------- int *__cdecl sub_763520(_DWORD *a1, int *a2, int *a3, int *a4) { int *v4; // edi int *v5; // eax int v6; // edx int *v7; // ebx int v8; // eax int *v9; // eax int *v10; // eax int *result; // eax int v12; // ecx int *v13; // ecx int *v14; // eax int *v15; // eax int *v16; // eax int v17; // [esp+0h] [ebp-14h] int v18; // [esp+Ch] [ebp-8h] int v19; // [esp+10h] [ebp-4h] v4 = a2; v18 = 0; while ( 1 ) { if ( v4[1] != 2146936133 ) { v9 = sub_7631A0((int)a1, v4, 1); if ( v9[1] == 2146936064 ) sub_767130((int)a1, (int)v4, (int)"index"); goto LABEL_13; } v19 = *v4; v5 = sub_765DA0(*v4, a3); v6 = v19; v7 = v5; if ( v5[1] != 2146936064 ) goto LABEL_10; v8 = *(_DWORD *)(v19 + 8); if ( !v8 || *(_BYTE *)(v8 + 6) & 2 ) goto LABEL_8; v9 = sub_763170(v8, 1, *(_DWORD *)(a1[3] + 172)); if ( !v9 ) break; LABEL_13: if ( (v9[1] | 0x70) == 2146936182 ) { v13 = (int *)a1[2]; a1[2] = v13 + 2; *v13 = *v9; v13[1] = v9[1]; v14 = (int *)a1[2]; a1[2] = v14 + 2; *v14 = *v4; v14[1] = v4[1]; v15 = (int *)a1[2]; a1[2] = v15 + 2; *v15 = *a3; v15[1] = a3[1]; v16 = (int *)a1[2]; a1[2] = v16 + 2; *v16 = *a4; v16[1] = a4[1]; return (int *)sub_760A50((int)a1, (int (__cdecl **)(int))(a1[2] - 32), 0, *(_BYTE *)(a1[4] + 18) & 1); } v4 = v9; if ( ++v18 >= 100 ) sub_766EB0((int)a1, "loop in settable", v17); } v6 = v19; LABEL_8: if ( v7 == (int *)&unk_A0CDD0 ) { v10 = sub_766390((int)a1, v6, a3); v6 = v19; v7 = v10; } LABEL_10: result = a4; *v7 = *a4; v7[1] = a4[1]; *(_BYTE *)(v6 + 6) = 0; v12 = a4[1]; if ( (v12 & 0x7FFFFF00) != 2146936064 ) LOBYTE(v12) = 3; if ( v12 & 0x40 ) { result = (int *)*a4; if ( *(_BYTE *)(*a4 + 5) & 3 ) { if ( *(_BYTE *)(v6 + 5) & 4 ) result = (int *)sub_760C70((int)a1, v6); } } return result; } //----- (007636D0) -------------------------------------------------------- signed int __usercall sub_7636D0@(int a1@, int a2@, _DWORD *a3@, _DWORD *a4, int a5) { int v5; // edi _DWORD *v6; // esi _DWORD *v7; // eax _DWORD *v9; // ecx int v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax int v14; // esi v5 = a1; v6 = (_DWORD *)a2; v7 = sub_7631A0(a2, a3, a5); if ( v7[1] == 2146936064 ) { v7 = sub_7631A0((int)v6, a4, a5); if ( v7[1] == 2146936064 ) return 0; } v9 = (_DWORD *)v6[2]; v10 = v5 - v6[7]; v6[2] = v9 + 2; *v9 = *v7; v9[1] = v7[1]; v11 = (_DWORD *)v6[2]; v6[2] = v11 + 2; *v11 = *a3; v11[1] = a3[1]; v12 = (_DWORD *)v6[2]; v6[2] = v12 + 2; *v12 = *a4; v12[1] = a4[1]; sub_760A50((int)v6, (int (__cdecl **)(int))(v6[2] - 24), 1, *(_BYTE *)(v6[4] + 18) & 1); v13 = (_DWORD *)(v6[2] - 8); v6[2] = v13; v14 = v6[7]; *(_DWORD *)(v10 + v14) = *v13; *(_DWORD *)(v10 + v14 + 4) = v13[1]; return 1; } //----- (00763790) -------------------------------------------------------- _DWORD *__usercall sub_763790@(int a1@, int a2@, int a3, int a4) { _DWORD *v4; // ebx _DWORD *result; // eax int *v6; // eax BOOL v7; // edx signed int v8; // [esp+4h] [ebp-4h] if ( a1 && (v8 = 1 << a2, !((unsigned __int8)(1 << a2) & *(_BYTE *)(a1 + 6))) && (v4 = sub_763170(a1, a2, *(_DWORD *)(*(_DWORD *)(a3 + 12) + 4 * a2 + 168))) != 0 && (a1 == a4 || a4 && !((unsigned __int8)v8 & *(_BYTE *)(a4 + 6)) && (v6 = sub_763170(a4, a2, *(_DWORD *)(*(_DWORD *)(a3 + 12) + 4 * a2 + 168))) != 0 && ((v4[1] & 0x7FFFFF00) == 2146936064 ? (v7 = v4[1] == v6[1]) : (v7 = (v6[1] & 0x7FFFFF00) != 2146936064), v7 && sub_763AD0(0, v4, v6))) ) { result = v4; } else { result = 0; } return result; } //----- (00763860) -------------------------------------------------------- int __usercall sub_763860@(int a1@, int a2@) { int v2; // ebx const char *v3; // edi const char *v4; // esi int result; // eax unsigned int v6; // eax int v7; // eax int v8; // [esp+Ch] [ebp-4h] v2 = *(_DWORD *)(a1 + 12); v3 = (const char *)(a1 + 16); v4 = (const char *)(a2 + 16); v8 = *(_DWORD *)(a2 + 12); result = strcoll((const char *)(a2 + 16), (const char *)(a1 + 16)); if ( !result ) { while ( 1 ) { v6 = strlen(v4); if ( v6 == v2 ) return v6 != v8; if ( v6 == v8 ) break; v7 = v6 + 1; v8 -= v7; v3 += v7; v4 += v7; v2 -= v7; result = strcoll(v4, v3); if ( result ) return result; } result = -1; } return result; } //----- (007638E0) -------------------------------------------------------- BOOL __cdecl sub_7638E0(int a1, int *a2, int *a3) { _DWORD *v4; // edi int v5; // eax if ( (a2[1] & 0x7FFFFF00) != 2146936064 && (a3[1] & 0x7FFFFF00) != 2146936064 ) return *(double *)a3 > *(double *)a2; if ( (a2[1] | 0x70) == 2146936180 && (a3[1] | 0x70) == 2146936180 ) return sub_763860(*a3, *a2) < 0; if ( !sub_7636D0(*(_DWORD *)(a1 + 8), a1, a2, a3, 13) ) sub_767270(a1, (int)a2, (int)a3); v4 = *(_DWORD **)(a1 + 8); v5 = v4[1]; return v5 != 2146936064 && (v5 != 2146936065 || *v4); } //----- (007639B0) -------------------------------------------------------- BOOL __cdecl sub_7639B0(int a1, int *a2, int *a3) { BOOL result; // eax _DWORD *v4; // esi int v5; // eax _DWORD *v6; // esi int v7; // eax if ( (a2[1] & 0x7FFFFF00) != 2146936064 && (a3[1] & 0x7FFFFF00) != 2146936064 ) return *(double *)a3 >= *(double *)a2; if ( (a2[1] | 0x70) == 2146936180 && (a3[1] | 0x70) == 2146936180 ) return sub_763860(*a3, *a2) <= 0; if ( sub_7636D0(*(_DWORD *)(a1 + 8), a1, a2, a3, 14) ) { v4 = *(_DWORD **)(a1 + 8); v5 = v4[1]; result = v5 != 2146936064 && (v5 != 2146936065 || *v4); } else { if ( !sub_7636D0(*(_DWORD *)(a1 + 8), a1, a3, a2, 13) ) sub_767270(a1, (int)a2, (int)a3); v6 = *(_DWORD **)(a1 + 8); v7 = v6[1]; result = v7 == 2146936064 || v7 == 2146936065 && !*v6; } return result; } //----- (00763AD0) -------------------------------------------------------- signed int __cdecl sub_763AD0(int a1, int *a2, int *a3) { int v3; // ecx signed int result; // eax _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // eax v3 = a2[1]; if ( (a2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; switch ( v3 & 0x3F ) { case 0: goto LABEL_4; case 1: case 2: case 4: case 0x16: return *a2 == *a3; case 3: if ( *(double *)a3 != *(double *)a2 ) goto LABEL_6; goto LABEL_4; case 5: case 7: if ( *a2 == *a3 ) goto LABEL_4; if ( !a1 ) goto LABEL_6; v5 = sub_763790(*(_DWORD *)(*a2 + 8), 5, a1, *(_DWORD *)(*a3 + 8)); if ( !v5 ) goto LABEL_6; sub_763320((_DWORD *)a1, a2, a3, v5, *(_DWORD **)(a1 + 8), 1); v6 = *(_DWORD **)(a1 + 8); v7 = v6[1]; if ( v7 == 2146936064 ) goto LABEL_6; if ( v7 == 2146936065 ) { if ( *v6 ) result = 1; else LABEL_6: result = 0; } else { LABEL_4: result = 1; } break; case 0x14: result = sub_7672F0(*a2, *a3); break; default: result = *a2 == *a3; break; } return result; } //----- (00763C10) -------------------------------------------------------- int __cdecl sub_763C10(int a1, signed int a2) { int v2; // edi int v3; // esi int v4; // eax int v5; // eax unsigned int v6; // ecx int v7; // edx int v8; // eax int v9; // eax signed int v10; // ebx int v11; // edi int v12; // eax int v13; // eax unsigned int v14; // eax int v15; // edi size_t v16; // ST28_4 int *v17; // esi int v18; // eax int result; // eax int v20; // [esp+8h] [ebp-48h] int v21; // [esp+18h] [ebp-38h] char *v22; // [esp+1Ch] [ebp-34h] signed int v23; // [esp+20h] [ebp-30h] size_t v24; // [esp+28h] [ebp-28h] size_t v25; // [esp+28h] [ebp-28h] char v26; // [esp+2Ch] [ebp-24h] v2 = a1; do { v3 = *(_DWORD *)(v2 + 8); v23 = 2; if ( (*(_DWORD *)(v3 - 12) | 0x70) != 2146936180 && (*(_DWORD *)(v3 - 12) & 0x7FFFFF00) == 2146936064 ) { LABEL_11: if ( !sub_7636D0(v3 - 16, v2, (_DWORD *)(v3 - 16), (_DWORD *)(v3 - 8), 15) ) sub_767200(v2, v3 - 16, v3 - 8); goto LABEL_27; } if ( (*(_DWORD *)(v3 - 4) | 0x70) != 2146936180 ) { if ( (*(_DWORD *)(v3 - 4) & 0x7FFFFF00) == 2146936064 ) goto LABEL_11; v4 = sprintf(&v26, "%.14g", *(double *)(v3 - 8)); v5 = sub_767620(v2, &v26, v4); *(_DWORD *)(v3 - 8) = v5; *(_DWORD *)(v3 - 4) = *(unsigned __int8 *)(v5 + 4) | 0x7FF7A540; } v6 = *(_DWORD *)(*(_DWORD *)(v3 - 8) + 12); v7 = *(_DWORD *)(v3 - 12) | 0x70; if ( v6 ) { if ( v7 != 2146936180 || *(_DWORD *)(*(_DWORD *)(v3 - 16) + 12) ) { v10 = 1; v24 = *(_DWORD *)(*(_DWORD *)(v3 - 8) + 12); if ( a2 > 1 ) { v11 = v3 - 16; do { if ( (*(_DWORD *)(v11 + 4) | 0x70) != 2146936180 ) { if ( (*(_DWORD *)(v11 + 4) & 0x7FFFFF00) == 2146936064 ) break; v12 = sprintf(&v26, "%.14g", *(double *)v11); v13 = sub_767620(a1, &v26, v12); v6 = v24; *(_DWORD *)v11 = v13; *(_DWORD *)(v11 + 4) = *(unsigned __int8 *)(v13 + 4) | 0x7FF7A540; } v14 = *(_DWORD *)(*(_DWORD *)v11 + 12); if ( v14 >= -3 - v6 ) sub_766EB0(a1, "string length overflow", v20); v6 += v14; ++v10; v11 -= 8; v24 = v6; } while ( v10 < a2 ); v2 = a1; } v22 = (char *)sub_767B60(v2, (_DWORD *)(*(_DWORD *)(v2 + 12) + 128), v6); v25 = 0; v23 = v10; v21 = 8 * v10; v15 = v3 - 8 * v10; do { v16 = *(_DWORD *)(*(_DWORD *)v15 + 12); memcpy(&v22[v25], (const void *)(*(_DWORD *)v15 + 16), v16); v25 += v16; --v10; v15 += 8; } while ( v10 > 0 ); v17 = (int *)(v3 - v21); v18 = sub_767620(a1, v22, v25); v2 = a1; *v17 = v18; v17[1] = *(unsigned __int8 *)(v18 + 4) | 0x7FF7A540; } else { *(_DWORD *)(v3 - 16) = *(_DWORD *)(v3 - 8); *(_DWORD *)(v3 - 12) = *(_DWORD *)(v3 - 4); } } else if ( v7 != 2146936180 && (*(_DWORD *)(v3 - 12) & 0x7FFFFF00) != 2146936064 ) { v8 = sprintf(&v26, "%.14g", *(double *)(v3 - 16)); v9 = sub_767620(v2, &v26, v8); *(_DWORD *)(v3 - 16) = v9; *(_DWORD *)(v3 - 12) = *(unsigned __int8 *)(v9 + 4) | 0x7FF7A540; } LABEL_27: result = 1 - v23 + a2; *(_DWORD *)(v2 + 8) += 8 - 8 * v23; a2 = result; } while ( result > 1 ); return result; } //----- (00763EE0) -------------------------------------------------------- double *__cdecl sub_763EE0(int a1, double *a2, int *a3) { int v3; // eax int v4; // eax _DWORD *v5; // esi _DWORD *v6; // eax int v7; // edi int v8; // eax _DWORD *v9; // ecx char *v10; // edi int *v11; // eax int *v12; // eax double *result; // eax int v14; // esi double v15; // st7 v3 = a3[1]; if ( (a3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; v4 = (v3 & 0xF) - 4; if ( v4 ) { if ( v4 != 1 ) { v5 = (_DWORD *)a1; v6 = sub_7631A0(a1, a3, 4); if ( v6[1] == 2146936064 ) sub_767130(a1, (int)a3, (int)"get length of"); LABEL_10: v9 = (_DWORD *)v5[2]; v10 = (char *)a2 - v5[7]; v5[2] = v9 + 2; *v9 = *v6; v9[1] = v6[1]; v11 = (int *)v5[2]; v5[2] = v11 + 2; *v11 = *a3; v11[1] = a3[1]; v12 = (int *)v5[2]; v5[2] = v12 + 2; *v12 = *a3; v12[1] = a3[1]; sub_760A50((int)v5, (int (__cdecl **)(int))(v5[2] - 24), 1, *(_BYTE *)(v5[4] + 18) & 1); result = (double *)(v5[2] - 8); v5[2] = result; v14 = v5[7]; *(_DWORD *)&v10[v14] = *(_DWORD *)result; *(_DWORD *)&v10[v14 + 4] = *((_DWORD *)result + 1); return result; } v7 = *a3; v8 = *(_DWORD *)(*a3 + 8); if ( v8 ) { if ( !(*(_BYTE *)(v8 + 6) & 0x10) ) { v5 = (_DWORD *)a1; v6 = sub_763170(v8, 4, *(_DWORD *)(*(_DWORD *)(a1 + 12) + 184)); if ( v6 ) goto LABEL_10; } } v15 = (double)(signed int)sub_766020(v7); result = a2; *a2 = v15; } else { result = a2; *a2 = (double)*(unsigned int *)(*a3 + 12); } return result; } //----- (00764020) -------------------------------------------------------- signed int __cdecl sub_764020(int a1, double *a2, int *a3, int *a4, int a5) { int *v5; // esi int *v6; // edi double v7; // st7 signed int result; // eax int v9[2]; // [esp+1Ch] [ebp-10h] int v10[2]; // [esp+24h] [ebp-8h] v5 = a4; if ( (a3[1] & 0x7FFFFF00) == 2146936064 ) { if ( (a3[1] | 0x70) != 2146936180 || !sub_75F990((char *)(*a3 + 16), *(_DWORD *)(*a3 + 12), (int)v10) ) goto LABEL_12; v6 = v10; } else { v6 = a3; } if ( (a4[1] & 0x7FFFFF00) != 2146936064 ) { LABEL_10: v7 = *(double *)v6; result = sub_75F740(a5 - 6, v7, *(double *)v5); *a2 = v7; return result; } if ( (a4[1] | 0x70) == 2146936180 && sub_75F990((char *)(*a4 + 16), *(_DWORD *)(*a4 + 12), (int)v9) ) { v5 = v9; goto LABEL_10; } LABEL_12: result = sub_7636D0((int)a2, a1, a3, a4, a5); if ( !result ) sub_767240(a1, (double *)a3, (int)a4); return result; } //----- (00764110) -------------------------------------------------------- int __cdecl sub_764110(int a1, int a2) { _DWORD *v2; // ecx int result; // eax int v4; // ebx int v5; // ecx int v6; // edx int v7; // edi unsigned __int8 *v8; // ecx int v9; // eax int v10; // esi int v11; // [esp+Ch] [ebp-4h] result = v2[8]; v11 = result; if ( result ) { v4 = v2[10]; v5 = v2[7]; v6 = 0; if ( v4 > 0 ) { v7 = result + 16; v8 = (unsigned __int8 *)(v5 + 5); while ( 1 ) { v9 = *v8; v10 = *(v8 - 1) ? a2 + 8 * v9 : *(_DWORD *)(*(_DWORD *)(a1 + 4 * v9) + 8); if ( *(_DWORD *)(*(_DWORD *)v7 + 8) != v10 ) break; ++v6; v7 += 4; v8 += 8; if ( v6 >= v4 ) return v11; } result = 0; } } return result; } //----- (00764180) -------------------------------------------------------- int __usercall sub_764180@(int *a1@, int a2, int a3, int a4, int a5) { int v5; // ebx int v6; // esi int *v7; // edi int result; // eax int *v9; // ebx unsigned __int8 *v10; // edi int v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v5 = a3; v6 = *(_DWORD *)(a3 + 40); v7 = a1; v11 = *(_DWORD *)(a3 + 28); result = sub_767740(a2, *(_DWORD *)(a3 + 40)); *(_DWORD *)(result + 12) = a3; v12 = result; *v7 = result; v7[1] = 2146936134; if ( v6 > 0 ) { v9 = (int *)(result + 16); v10 = (unsigned __int8 *)(v11 + 5); do { if ( *(v10 - 1) ) { *v9 = sub_7677C0(a2, a5 + 8 * *v10); result = v12; } else { *v9 = *(_DWORD *)(a4 + 4 * *v10); } ++v9; v10 += 8; --v6; } while ( v6 ); v5 = a3; } if ( *(_BYTE *)(v5 + 5) & 4 ) { sub_761FF0(a2, v5, result); result = v12; } *(_DWORD *)(v5 + 32) = result; return result; } //----- (00764220) -------------------------------------------------------- _DWORD *__cdecl sub_764220(int a1) { int v1; // edi _DWORD *v2; // ebx unsigned int v3; // esi int v4; // ecx _DWORD *result; // eax _DWORD *v6; // eax int v7; // esi int v8; // ecx int v9; // edx int v10; // eax int v11; // ecx int v12; // eax int v13; // ecx int v14; // esi int v15; // [esp+Ch] [ebp-4h] BOOL v16; // [esp+18h] [ebp+8h] v1 = a1; v2 = *(_DWORD **)(a1 + 16); v3 = *(_DWORD *)(v2[7] - 4); v4 = v2[6]; result = (_DWORD *)(*(_DWORD *)(v2[7] - 4) & 0x3F); v15 = v2[6]; switch ( (unsigned int)result ) { case 6u: case 7u: case 0xCu: case 0xDu: case 0xEu: case 0xFu: case 0x10u: case 0x11u: case 0x12u: case 0x13u: case 0x15u: v6 = (_DWORD *)(*(_DWORD *)(a1 + 8) - 8); *(_DWORD *)(a1 + 8) = v6; v7 = (v3 >> 6) & 0xFF; *(_DWORD *)(v4 + 8 * v7) = *v6; result = (_DWORD *)v6[1]; *(_DWORD *)(v4 + 8 * v7 + 4) = result; break; case 0x16u: v10 = *(_DWORD *)(a1 + 8); v11 = (signed int)(v10 - 8 - (8 * (v3 >> 23) + 8) - v15) >> 3; *(_DWORD *)(v10 - 24) = *(_DWORD *)(v10 - 8); *(_DWORD *)(v10 - 20) = *(_DWORD *)(v10 - 4); if ( v11 > 1 ) { *(_DWORD *)(a1 + 8) = v10 - 16; sub_763C10(a1, v11); } v12 = *(_DWORD *)(a1 + 8); v13 = v2[6]; v14 = (v3 >> 6) & 0xFF; *(_DWORD *)(v13 + 8 * v14) = *(_DWORD *)(v12 - 8); result = *(_DWORD **)(v12 - 4); *(_DWORD *)(v13 + 8 * v14 + 4) = result; *(_DWORD *)(a1 + 8) = v2[1]; break; case 0x18u: case 0x19u: case 0x1Au: v8 = *(_DWORD *)(a1 + 8); v9 = *(_DWORD *)(v8 - 4); v16 = v9 != 2146936064 && (v9 != 2146936065 || *(_DWORD *)(v8 - 8)); *(_DWORD *)(v1 + 8) = v8 - 8; if ( result == (_DWORD *)26 ) { result = sub_7631A0(v1, (_DWORD *)(v15 + 8 * (v3 >> 23)), 14); if ( result[1] == 2146936064 ) v16 = v16 == 0; } if ( v16 != ((v3 >> 6) & 0xFF) ) v2[7] += 4; break; case 0x1Du: if ( (signed int)(((v3 >> 14) & 0x1FF) - 1) >= 0 ) { result = (_DWORD *)v2[1]; *(_DWORD *)(a1 + 8) = result; } break; case 0x22u: *(_DWORD *)(a1 + 8) = v2[1]; break; default: return result; } return result; } //----- (007643C0) -------------------------------------------------------- int __cdecl sub_7643C0(int a1) { unsigned int v1; // ebx unsigned int *v2; // eax unsigned int v3; // esi int v4; // edi char v5; // cl bool v6; // zf int v7; // ebx int v8; // eax signed int v9; // edx char v10; // al int v11; // ecx int v12; // edi unsigned int v13; // edx int v14; // ecx int v15; // eax unsigned int v16; // eax int v17; // eax int v18; // edi unsigned int v19; // esi int v20; // eax unsigned int v21; // esi _DWORD *v22; // eax int v23; // esi int v24; // ecx unsigned int v25; // esi _DWORD *v26; // eax unsigned int v27; // edx _DWORD *v28; // eax unsigned int v29; // ecx unsigned int v30; // esi unsigned int v31; // ecx int *v32; // eax unsigned int v33; // eax int *v34; // eax unsigned int v35; // eax int *v36; // ecx unsigned int v37; // esi int *v38; // eax int v39; // esi _DWORD *v40; // eax int v41; // eax int v42; // edi unsigned int v43; // eax int *v44; // ecx unsigned int v45; // esi int *v46; // eax int v47; // ebx int v48; // esi int v49; // ST10_4 int v50; // eax int *v51; // eax unsigned int v52; // esi unsigned int v53; // eax int *v54; // ecx unsigned int v55; // esi int *v56; // eax unsigned int v57; // eax int *v58; // ecx unsigned int v59; // esi int *v60; // eax unsigned int v61; // eax int *v62; // ecx unsigned int v63; // esi int *v64; // eax unsigned int v65; // eax int *v66; // ecx unsigned int v67; // esi int *v68; // eax unsigned int v69; // eax int *v70; // ecx unsigned int v71; // esi int *v72; // eax double v73; // st7 unsigned int v74; // eax int *v75; // ecx unsigned int v76; // esi int *v77; // eax int *v78; // eax unsigned int v79; // esi int v80; // eax unsigned int v81; // edi int v82; // esi int v83; // ecx _DWORD *v84; // eax _DWORD *v85; // edi int v86; // eax unsigned int v87; // eax int *v88; // edi unsigned int v89; // esi int *v90; // eax BOOL v91; // edx BOOL v92; // eax int v93; // esi unsigned int v94; // edi unsigned int v95; // eax int *v96; // ecx unsigned int v97; // esi int *v98; // eax int v99; // ebx BOOL v100; // eax int v101; // esi unsigned int v102; // edi unsigned int v103; // eax int *v104; // ecx unsigned int v105; // esi int *v106; // eax int v107; // eax int v108; // ecx unsigned int v109; // esi int v110; // ecx _DWORD *v111; // eax unsigned int v112; // eax int v113; // esi int v114; // ecx unsigned int v115; // esi double v116; // st7 double v117; // st6 double v118; // st5 double v119; // st7 int v120; // eax int v121; // ecx int v122; // eax _DWORD *v123; // eax int v124; // ecx unsigned int *v125; // eax int v126; // eax int v127; // esi int v128; // ecx _DWORD *v129; // edx int v130; // edx int v131; // esi _DWORD *v132; // edi int v133; // eax int v134; // esi int v135; // eax int v136; // ST08_4 int v137; // esi int v138; // ecx int v139; // esi int v140; // eax int v141; // esi int v142; // ecx int v143; // edx int v144; // ecx _DWORD *v145; // eax int v146; // edi unsigned int *v147; // eax unsigned int v148; // edi int v149; // ecx unsigned int v150; // edx int v151; // esi int v152; // ebx int v153; // eax int v154; // edx bool v155; // sf _DWORD *v156; // ecx int v157; // eax int v158; // eax int v159; // ecx int v160; // ebx int v161; // ecx unsigned int v162; // esi int result; // eax int v164; // ecx int *v165; // [esp+0h] [ebp-50h] int *v166; // [esp+4h] [ebp-4Ch] int v167; // [esp+8h] [ebp-48h] int v168[2]; // [esp+14h] [ebp-3Ch] int v169[2]; // [esp+1Ch] [ebp-34h] int v170[2]; // [esp+24h] [ebp-2Ch] double v171; // [esp+2Ch] [ebp-24h] double v172; // [esp+34h] [ebp-1Ch] int v173; // [esp+3Ch] [ebp-14h] unsigned int v174; // [esp+40h] [ebp-10h] int v175; // [esp+44h] [ebp-Ch] int v176; // [esp+48h] [ebp-8h] char v177; // [esp+4Fh] [ebp-1h] v176 = *(_DWORD *)(a1 + 16); LABEL_2: v1 = *(_DWORD *)(v176 + 24); v173 = **(_DWORD **)v176; v175 = *(_DWORD *)(*(_DWORD *)(v173 + 12) + 8); while ( 2 ) { v2 = *(unsigned int **)(v176 + 28); v3 = *v2; v4 = a1; *(_DWORD *)(v176 + 28) = v2 + 1; v5 = *(_BYTE *)(a1 + 40); v177 = v5; if ( v5 & 0xC ) { v6 = (*(_DWORD *)(a1 + 48))-- == 1; if ( v6 || v5 & 4 ) { v7 = *(_DWORD *)(a1 + 16); if ( !(v5 & 8) || *(_DWORD *)(a1 + 48) ) { v9 = 0; v174 = 0; } else { v8 = *(_DWORD *)(a1 + 44); v9 = 1; v174 = 1; *(_DWORD *)(a1 + 48) = v8; } v10 = *(_BYTE *)(v7 + 18); if ( v10 >= 0 ) { if ( v9 ) { sub_7601A0(a1, 3, -1); v5 = v177; } if ( v5 & 4 ) { v11 = *(_DWORD *)(**(_DWORD **)v7 + 12); v12 = *(_DWORD *)(v11 + 12); v13 = *(_DWORD *)(v7 + 28); v14 = *(_DWORD *)(v11 + 20); v15 = ((*(_DWORD *)(v7 + 28) - v12) >> 2) - 1; HIDWORD(v171) = v12; HIDWORD(v172) = v14 ? *(_DWORD *)(v14 + 4 * v15) : 0; if ( (v4 = a1, !v15) || (v16 = *(_DWORD *)(a1 + 20), v13 <= v16) || (!v14 ? (v17 = 0) : (v17 = *(_DWORD *)(v14 + 4 * ((signed int)(v16 - HIDWORD(v171)) >> 2) - 4)), HIDWORD(v172) != v17) ) { sub_7601A0(a1, 2, SHIDWORD(v172)); } } v6 = *(_BYTE *)(v4 + 6) == 1; *(_DWORD *)(v4 + 20) = *(_DWORD *)(v7 + 28); if ( v6 ) { if ( v174 ) *(_DWORD *)(v4 + 48) = 1; *(_DWORD *)(v7 + 28) -= 4; *(_BYTE *)(v7 + 18) |= 0x80u; *(_DWORD *)v7 = *(_DWORD *)(v4 + 8) - 8; sub_75FEE0(v4, 1); } } else { *(_BYTE *)(v7 + 18) = v10 & 0x7F; } v1 = *(_DWORD *)(v176 + 24); } } v174 = (v3 >> 6) & 0xFF; v18 = v1 + 8 * v174; switch ( v3 & 0x3F ) { case 0u: v19 = v3 >> 23; *(_DWORD *)v18 = *(_DWORD *)(v1 + 8 * v19); *(_DWORD *)(v18 + 4) = *(_DWORD *)(v1 + 8 * v19 + 4); continue; case 1u: v20 = v175; v21 = v3 >> 14; *(_DWORD *)v18 = *(_DWORD *)(v175 + 8 * v21); *(_DWORD *)(v18 + 4) = *(_DWORD *)(v20 + 8 * v21 + 4); continue; case 2u: v22 = *(_DWORD **)(v176 + 28); v23 = v175; v24 = *v22 >> 6; *(_DWORD *)(v176 + 28) = v22 + 1; *(_DWORD *)v18 = *(_DWORD *)(v23 + 8 * v24); *(_DWORD *)(v18 + 4) = *(_DWORD *)(v23 + 8 * v24 + 4); continue; case 3u: *(_DWORD *)v18 = v3 >> 23; *(_DWORD *)(v18 + 4) = 2146936065; if ( ((unsigned int)&loc_7FBFFE + 2) & v3 ) *(_DWORD *)(v176 + 28) += 4; continue; case 4u: v25 = v3 >> 23; v26 = (_DWORD *)(v18 + 4); do { v27 = v25; *v26 = 2146936064; v26 += 2; --v25; } while ( v27 ); continue; case 5u: v28 = *(_DWORD **)(*(_DWORD *)(v173 + 4 * (v3 >> 23) + 16) + 8); *(_DWORD *)v18 = *v28; *(_DWORD *)(v18 + 4) = v28[1]; continue; case 6u: v29 = v3; v30 = v3 >> 14; v31 = v29 >> 23; if ( v30 & 0x100 ) v32 = (int *)(v175 + 8 * (unsigned __int8)v30); else v32 = (int *)(v1 + 8 * (v30 & 0x1FF)); sub_7633D0((_DWORD *)a1, *(int **)(*(_DWORD *)(v173 + 4 * v31 + 16) + 8), v32, (int *)v18); goto LABEL_41; case 7u: v33 = v3 >> 14; if ( (v3 >> 14) & 0x100 ) v34 = (int *)(v175 + 8 * (unsigned __int8)v33); else v34 = (int *)(v1 + 8 * ((v3 >> 14) & 0x1FF)); sub_7633D0((_DWORD *)a1, (int *)(v1 + 8 * (v3 >> 23)), v34, (int *)v18); v1 = *(_DWORD *)(v176 + 24); continue; case 8u: v35 = v3 >> 14; if ( (v3 >> 14) & 0x100 ) v36 = (int *)(v175 + 8 * (unsigned __int8)v35); else v36 = (int *)(v1 + 8 * ((v3 >> 14) & 0x1FF)); v37 = v3 >> 23; if ( v37 & 0x100 ) v38 = (int *)(v175 + 8 * (unsigned __int8)v37); else v38 = (int *)(v1 + 8 * v37); sub_763520((_DWORD *)a1, *(int **)(*(_DWORD *)(v173 + 4 * v174 + 16) + 8), v38, v36); v1 = *(_DWORD *)(v176 + 24); continue; case 9u: v39 = *(_DWORD *)(v173 + 4 * (v3 >> 23) + 16); v40 = *(_DWORD **)(v39 + 8); *v40 = *(_DWORD *)v18; v40[1] = *(_DWORD *)(v18 + 4); v41 = *(_DWORD *)(v18 + 4); if ( (*(_DWORD *)(v18 + 4) & 0x7FFFFF00) != 2146936064 ) LOBYTE(v41) = 3; if ( v41 & 0x40 ) { v42 = *(_DWORD *)v18; if ( *(_BYTE *)(v42 + 5) & 3 ) { if ( *(_BYTE *)(v39 + 5) & 4 ) sub_761FB0(a1, v39, v42); } } continue; case 0xAu: v43 = v3 >> 14; if ( (v3 >> 14) & 0x100 ) v44 = (int *)(v175 + 8 * (unsigned __int8)v43); else v44 = (int *)(v1 + 8 * ((v3 >> 14) & 0x1FF)); v45 = v3 >> 23; if ( v45 & 0x100 ) v46 = (int *)(v175 + 8 * (unsigned __int8)v45); else v46 = (int *)(v1 + 8 * v45); sub_763520((_DWORD *)a1, (int *)v18, v46, v44); v1 = *(_DWORD *)(v176 + 24); continue; case 0xBu: v47 = v3 >> 23; HIDWORD(v172) = (v3 >> 14) & 0x1FF; v48 = sub_765C40(a1); *(_DWORD *)v18 = v48; *(_DWORD *)(v18 + 4) = 2146936133; if ( v47 || HIDWORD(v172) ) { v49 = sub_75F6F0(SHIDWORD(v172)); v50 = sub_75F6F0(v47); sub_766080(a1, v48, v50, v49); } if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) > 0 ) { *(_DWORD *)(a1 + 8) = v18 + 8; sub_7630F0(a1); *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); } v1 = *(_DWORD *)(v176 + 24); continue; case 0xCu: v51 = (int *)(v1 + 8 * (v3 >> 23)); *(_DWORD *)(v18 + 8) = *(_DWORD *)(v1 + 8 * (v3 >> 23)); v52 = v3 >> 14; *(_DWORD *)(v18 + 12) = v51[1]; if ( v52 & 0x100 ) { v166 = (int *)v18; v165 = (int *)(v175 + 8 * (unsigned __int8)v52); } else { v166 = (int *)v18; v165 = (int *)(v1 + 8 * (v52 & 0x1FF)); } sub_7633D0((_DWORD *)a1, v51, v165, v166); goto LABEL_41; case 0xDu: v53 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v54 = (int *)(v175 + 8 * (unsigned __int8)v53); else v54 = (int *)(v1 + 8 * v53); v55 = v3 >> 14; if ( v55 & 0x100 ) v56 = (int *)(v175 + 8 * (unsigned __int8)v55); else v56 = (int *)(v1 + 8 * (v55 & 0x1FF)); if ( (v54[1] & 0x7FFFFF00) == 2146936064 || (v56[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v54, v56, 6); v1 = *(_DWORD *)(v176 + 24); } else { *(double *)v18 = *(double *)v56 + *(double *)v54; } continue; case 0xEu: v57 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v58 = (int *)(v175 + 8 * (unsigned __int8)v57); else v58 = (int *)(v1 + 8 * v57); v59 = v3 >> 14; if ( v59 & 0x100 ) v60 = (int *)(v175 + 8 * (unsigned __int8)v59); else v60 = (int *)(v1 + 8 * (v59 & 0x1FF)); if ( (v58[1] & 0x7FFFFF00) == 2146936064 || (v60[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v58, v60, 7); v1 = *(_DWORD *)(v176 + 24); } else { *(double *)v18 = *(double *)v58 - *(double *)v60; } continue; case 0xFu: v61 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v62 = (int *)(v175 + 8 * (unsigned __int8)v61); else v62 = (int *)(v1 + 8 * v61); v63 = v3 >> 14; if ( v63 & 0x100 ) v64 = (int *)(v175 + 8 * (unsigned __int8)v63); else v64 = (int *)(v1 + 8 * (v63 & 0x1FF)); if ( (v62[1] & 0x7FFFFF00) == 2146936064 || (v64[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v62, v64, 8); v1 = *(_DWORD *)(v176 + 24); } else { *(double *)v18 = *(double *)v64 * *(double *)v62; } continue; case 0x10u: v65 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v66 = (int *)(v175 + 8 * (unsigned __int8)v65); else v66 = (int *)(v1 + 8 * v65); v67 = v3 >> 14; if ( v67 & 0x100 ) v68 = (int *)(v175 + 8 * (unsigned __int8)v67); else v68 = (int *)(v1 + 8 * (v67 & 0x1FF)); if ( (v66[1] & 0x7FFFFF00) == 2146936064 || (v68[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v66, v68, 9); v1 = *(_DWORD *)(v176 + 24); } else { *(double *)v18 = *(double *)v66 / *(double *)v68; } continue; case 0x11u: v69 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v70 = (int *)(v175 + 8 * (unsigned __int8)v69); else v70 = (int *)(v1 + 8 * v69); v71 = v3 >> 14; if ( v71 & 0x100 ) v72 = (int *)(v175 + 8 * (unsigned __int8)v71); else v72 = (int *)(v1 + 8 * (v71 & 0x1FF)); if ( (v70[1] & 0x7FFFFF00) == 2146936064 || (v72[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v70, v72, 10); v1 = *(_DWORD *)(v176 + 24); } else { v172 = *(double *)v70; v171 = *(double *)v72; v73 = floor(v172 / v171); *(double *)v18 = v172 - v73 * v171; } continue; case 0x12u: v74 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v75 = (int *)(v175 + 8 * (unsigned __int8)v74); else v75 = (int *)(v1 + 8 * v74); v76 = v3 >> 14; if ( v76 & 0x100 ) v77 = (int *)(v175 + 8 * (unsigned __int8)v76); else v77 = (int *)(v1 + 8 * (v76 & 0x1FF)); if ( (v75[1] & 0x7FFFFF00) == 2146936064 || (v77[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v75, v77, 11); v1 = *(_DWORD *)(v176 + 24); } else { *(long double *)v18 = pow(*(double *)v75, *(double *)v77); } continue; case 0x13u: v78 = (int *)(v1 + 8 * (v3 >> 23)); if ( (v78[1] & 0x7FFFFF00) == 2146936064 ) { sub_764020(a1, (double *)v18, v78, v78, 12); v1 = *(_DWORD *)(v176 + 24); } else { *(double *)v18 = -*(double *)v78; } continue; case 0x14u: v79 = v3 >> 23; v80 = *(_DWORD *)(v1 + 8 * v79 + 4); if ( v80 != 2146936064 && (v80 != 2146936065 || *(_DWORD *)(v1 + 8 * v79)) ) { *(_DWORD *)v18 = 0; *(_DWORD *)(v18 + 4) = 2146936065; } else { *(_DWORD *)v18 = 1; *(_DWORD *)(v18 + 4) = 2146936065; } continue; case 0x15u: sub_763EE0(a1, (double *)v18, (int *)(v1 + 8 * (v3 >> 23))); v1 = *(_DWORD *)(v176 + 24); continue; case 0x16u: v81 = v3; v82 = (v3 >> 14) & 0x1FF; v81 >>= 23; *(_DWORD *)(a1 + 8) = v1 + 8 * v82 + 8; sub_763C10(a1, v82 - v81 + 1); v83 = *(_DWORD *)(v176 + 24); v84 = (_DWORD *)(v83 + 8 * v174); v85 = (_DWORD *)(v83 + 8 * v81); *v84 = *v85; v84[1] = v85[1]; if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 12) <= 0 ) { v1 = *(_DWORD *)(v176 + 24); *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); } else { if ( v84 >= v85 ) v85 = v84 + 2; *(_DWORD *)(a1 + 8) = v85; sub_7630F0(a1); v86 = v176; *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); v1 = *(_DWORD *)(v86 + 24); *(_DWORD *)(a1 + 8) = *(_DWORD *)(v86 + 4); } continue; case 0x17u: if ( (signed int)v174 > 0 ) sub_767870(a1, *(_DWORD *)(v176 + 24) + 8 * v174 - 8); *(_DWORD *)(v176 + 28) += 4 * (v3 >> 14) - 524284; continue; case 0x18u: v87 = v3 >> 23; if ( (v3 >> 23) & 0x100 ) v88 = (int *)(v175 + 8 * (unsigned __int8)v87); else v88 = (int *)(v1 + 8 * v87); v89 = v3 >> 14; if ( v89 & 0x100 ) v90 = (int *)(v175 + 8 * (unsigned __int8)v89); else v90 = (int *)(v1 + 8 * (v89 & 0x1FF)); if ( (v88[1] & 0x7FFFFF00) == 2146936064 ) v91 = v88[1] == v90[1]; else v91 = (v90[1] & 0x7FFFFF00) != 2146936064; v92 = v91 && sub_763AD0(a1, v88, v90); v93 = v176; if ( v92 == v174 ) { v94 = **(_DWORD **)(v176 + 28); if ( (signed int)((v94 >> 6) & 0xFF) > 0 ) sub_767870(a1, *(_DWORD *)(v176 + 24) + 8 * ((v94 >> 6) & 0xFF) - 8); v1 = *(_DWORD *)(v93 + 24); *(_DWORD *)(v93 + 28) += 4 * (v94 >> 14) - 524280; } else { *(_DWORD *)(v176 + 28) += 4; v1 = *(_DWORD *)(v93 + 24); } continue; case 0x19u: v95 = v3 >> 14; if ( (v3 >> 14) & 0x100 ) v96 = (int *)(v175 + 8 * (unsigned __int8)v95); else v96 = (int *)(v1 + 8 * ((v3 >> 14) & 0x1FF)); v97 = v3 >> 23; if ( v97 & 0x100 ) v98 = (int *)(v175 + 8 * (unsigned __int8)v97); else v98 = (int *)(v1 + 8 * v97); v99 = a1; v100 = sub_7638E0(a1, v98, v96); goto LABEL_178; case 0x1Au: v103 = v3 >> 14; if ( (v3 >> 14) & 0x100 ) v104 = (int *)(v175 + 8 * (unsigned __int8)v103); else v104 = (int *)(v1 + 8 * ((v3 >> 14) & 0x1FF)); v105 = v3 >> 23; if ( v105 & 0x100 ) { v99 = a1; v100 = sub_7639B0(a1, (int *)(v175 + 8 * (unsigned __int8)v105), v104); } else { v106 = (int *)(v1 + 8 * v105); v99 = a1; v100 = sub_7639B0(a1, v106, v104); } LABEL_178: v101 = v176; if ( v100 == v174 ) { v102 = **(_DWORD **)(v176 + 28); if ( ((**(_DWORD **)(v176 + 28) >> 6) & 0xFF) > 0 ) sub_767870(v99, *(_DWORD *)(v176 + 24) + 8 * ((**(_DWORD **)(v176 + 28) >> 6) & 0xFF) - 8); v1 = *(_DWORD *)(v101 + 24); *(_DWORD *)(v101 + 28) += 4 * (v102 >> 14) - 524280; } else { *(_DWORD *)(v176 + 28) += 4; v1 = *(_DWORD *)(v101 + 24); } continue; case 0x1Bu: v107 = *(_DWORD *)(v18 + 4); if ( ((unsigned int)&loc_7FBFFE + 2) & v3 ) { if ( v107 != 2146936064 && (v107 != 2146936065 || *(_DWORD *)v18) ) goto LABEL_193; } else if ( v107 == 2146936064 || v107 == 2146936065 && !*(_DWORD *)v18 ) { LABEL_193: v108 = v176; v109 = **(_DWORD **)(v176 + 28); goto LABEL_194; } *(_DWORD *)(v176 + 28) += 4; continue; case 0x1Cu: v110 = *(_DWORD *)(v1 + 8 * (v3 >> 23) + 4); v111 = (_DWORD *)(v1 + 8 * (v3 >> 23)); if ( ((unsigned int)&loc_7FBFFE + 2) & v3 ) { if ( v110 == 2146936064 || v110 == 2146936065 && !*v111 ) goto LABEL_209; } else if ( v110 != 2146936064 && (v110 != 2146936065 || *v111) ) { LABEL_209: *(_DWORD *)(v176 + 28) += 4; continue; } *(_DWORD *)v18 = *v111; v108 = v176; *(_DWORD *)(v18 + 4) = v111[1]; v109 = **(_DWORD **)(v108 + 28); LABEL_194: if ( (signed int)((v109 >> 6) & 0xFF) > 0 ) { sub_767870(a1, *(_DWORD *)(v176 + 24) + 8 * ((v109 >> 6) & 0xFF) - 8); v108 = v176; } *(_DWORD *)(v108 + 28) += 4 * (v109 >> 14) - 524280; continue; case 0x1Du: v112 = v3 >> 23; v113 = ((v3 >> 14) & 0x1FF) - 1; if ( v112 ) *(_DWORD *)(a1 + 8) = v18 + 8 * v112; if ( !sub_760810(a1, (int (__cdecl **)(int))v18, v113) ) { v146 = *(_DWORD *)(a1 + 16); *(_BYTE *)(v146 + 18) |= 4u; v176 = v146; goto LABEL_2; } if ( v113 < 0 ) { LABEL_41: v1 = *(_DWORD *)(v176 + 24); } else { v114 = v176; *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); v1 = *(_DWORD *)(v114 + 24); } continue; case 0x1Eu: v115 = v3 >> 23; if ( v115 ) *(_DWORD *)(a1 + 8) = v18 + 8 * v115; if ( sub_760810(a1, (int (__cdecl **)(int))v18, -1) ) { v1 = *(_DWORD *)(v176 + 24); continue; } v147 = *(unsigned int **)(a1 + 16); v148 = *v147; v149 = *(unsigned __int8 *)(*(_DWORD *)(*(_DWORD *)*v147 + 12) + 76); v150 = v147[6]; v151 = v147[2]; v152 = *(_DWORD *)v151; HIDWORD(v171) = *(_DWORD *)(a1 + 16); v153 = v150 + 8 * v149; v154 = *(_DWORD *)(v173 + 12); v6 = *(_DWORD *)(v154 + 56) == 0; v155 = *(_DWORD *)(v154 + 56) < 0; v174 = v153; if ( !v155 && !v6 ) sub_767870(a1, *(_DWORD *)(v151 + 24)); HIDWORD(v172) = 0; if ( v148 < v174 ) { v156 = (_DWORD *)v148; v157 = 0; do { *(_DWORD *)(v157 + v152) = *v156; *(_DWORD *)(v157 + v152 + 4) = v156[1]; v158 = HIDWORD(v172) + 1; HIDWORD(v172) = v158; v157 = 8 * v158; v156 = (_DWORD *)(v157 + v148); } while ( v157 + v148 < v174 ); } v159 = HIDWORD(v171); *(_DWORD *)(v151 + 24) = v152 + 8 * ((signed int)(*(_DWORD *)(HIDWORD(v171) + 24) - v148) >> 3); v160 = v152 + 8 * ((signed int)(*(_DWORD *)(a1 + 8) - v148) >> 3); *(_DWORD *)(a1 + 8) = v160; *(_DWORD *)(v151 + 4) = v160; v161 = *(_DWORD *)(v159 + 28); *(_BYTE *)(v151 + 18) |= 0x40u; *(_DWORD *)(v151 + 28) = v161; *(_DWORD *)(a1 + 16) = v151; v176 = v151; goto LABEL_2; case 0x1Fu: v162 = v3 >> 23; if ( v162 ) *(_DWORD *)(a1 + 8) = v18 + 8 * v162 - 8; if ( *(_DWORD *)(*(_DWORD *)(v173 + 12) + 56) > 0 ) sub_767870(a1, v1); result = sub_760340(a1, v18); if ( *(_BYTE *)(v176 + 18) & 4 ) { v164 = *(_DWORD *)(a1 + 16); v176 = *(_DWORD *)(a1 + 16); if ( result ) *(_DWORD *)(a1 + 8) = *(_DWORD *)(v164 + 4); goto LABEL_2; } return result; case 0x20u: v116 = *(double *)(v18 + 16); v117 = *(double *)v18 + v116; v118 = v116; v119 = *(double *)(v18 + 8); if ( v118 <= 0.0 ) { if ( v117 < v119 ) continue; } else if ( v117 > v119 ) { continue; } *(_DWORD *)(v176 + 28) += 4 * (v3 >> 14) - 524284; *(double *)v18 = v117; *(double *)(v18 + 24) = v117; continue; case 0x21u: v120 = *(_DWORD *)(v18 + 4); v121 = *(_DWORD *)(v18 + 4) & 0x7FFFFF00; v174 = v18 + 16; if ( v121 == 2146936064 ) { if ( (v120 | 0x70) != 2146936180 || !sub_75F990((char *)(*(_DWORD *)v18 + 16), *(_DWORD *)(*(_DWORD *)v18 + 12), (int)v170) ) { sub_766EB0(a1, "'for' initial value must be a number", v167); } *(double *)v18 = *(double *)v170; } if ( (*(_DWORD *)(v18 + 12) & 0x7FFFFF00) == 2146936064 ) { if ( (*(_DWORD *)(v18 + 12) | 0x70) != 2146936180 || !sub_75F990((char *)(*(_DWORD *)(v18 + 8) + 16), *(_DWORD *)(*(_DWORD *)(v18 + 8) + 12), (int)v169) || (*(double *)(v18 + 8) = *(double *)v169, v18 == -8) ) { sub_766EB0(a1, "'for' limit must be a number", v167); } } if ( (*(_DWORD *)(v174 + 4) & 0x7FFFFF00) == 2146936064 ) { if ( (*(_DWORD *)(v174 + 4) | 0x70) != 2146936180 || !sub_75F990((char *)(*(_DWORD *)v174 + 16), *(_DWORD *)(*(_DWORD *)v174 + 12), (int)v168) || (v122 = v174, *(double *)v174 = *(double *)v168, (v174 = v122) == 0) ) { sub_766EB0(a1, "'for' step must be a number", v167); } } *(double *)v18 = *(double *)v18 - *(double *)v174; goto LABEL_237; case 0x22u: *(_DWORD *)(v18 + 40) = *(_DWORD *)(v18 + 16); v123 = (_DWORD *)(v18 + 24); v123[5] = *(_DWORD *)(v18 + 20); v123[2] = *(_DWORD *)(v18 + 8); v123[3] = *(_DWORD *)(v18 + 12); *v123 = *(_DWORD *)v18; v123[1] = *(_DWORD *)(v18 + 4); *(_DWORD *)(a1 + 8) = v18 + 48; sub_760A50(a1, (int (__cdecl **)(int))(v18 + 24), (v3 >> 14) & 0x1FF, 1); v1 = *(_DWORD *)(v176 + 24); v124 = v176; *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); v125 = *(unsigned int **)(v124 + 28); v3 = *v125; *(_DWORD *)(v124 + 28) = v125 + 1; v18 = v1 + 8 * ((v3 >> 6) & 0xFF); goto LABEL_239; case 0x23u: LABEL_239: if ( *(_DWORD *)(v18 + 12) != 2146936064 ) { *(_DWORD *)v18 = *(_DWORD *)(v18 + 8); *(_DWORD *)(v18 + 4) = *(_DWORD *)(v18 + 12); LABEL_237: *(_DWORD *)(v176 + 28) += 4 * (v3 >> 14) - 524284; } continue; case 0x24u: v126 = v3 >> 23; v127 = (v3 >> 14) & 0x1FF; v174 = v126; v128 = v127; if ( !v126 ) { v126 = ((*(_DWORD *)(a1 + 8) - v18) >> 3) - 1; v174 = ((*(_DWORD *)(a1 + 8) - v18) >> 3) - 1; } if ( !v127 ) { v129 = *(_DWORD **)(v176 + 28); v128 = *v129 >> 6; *(_DWORD *)(v176 + 28) = v129 + 1; } v130 = *(_DWORD *)v18; v131 = 50 * v128 + v126 - 50; HIDWORD(v172) = v130; if ( v131 > *(_DWORD *)(v130 + 28) ) { sub_7661F0(a1, v130, v131); v126 = v174; } if ( v126 > 0 ) { v132 = (_DWORD *)(v18 + 8 * v174); do { sub_766520(a1, SHIDWORD(v172), v131, v132); v133 = v132[1]; --v131; if ( (v132[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v133) = 3; if ( v133 & 0x40 && *(_BYTE *)(*v132 + 5) & 3 && *(_BYTE *)(HIDWORD(v172) + 5) & 4 ) sub_760C70(a1, SHIDWORD(v172)); v132 -= 2; --v174; } while ( (signed int)v174 > 0 ); } *(_DWORD *)(a1 + 8) = *(_DWORD *)(v176 + 4); continue; case 0x25u: v134 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v173 + 12) + 16) + 4 * (v3 >> 14)); HIDWORD(v171) = v173 + 16; v135 = sub_764110(v173 + 16, v1); if ( v135 ) { v137 = a1; *(_DWORD *)v18 = v135; *(_DWORD *)(v18 + 4) = 2146936134; } else { v136 = v134; v137 = a1; sub_764180((int *)v18, a1, v136, SHIDWORD(v171), v1); } if ( *(_DWORD *)(*(_DWORD *)(v137 + 12) + 12) <= 0 ) goto LABEL_41; *(_DWORD *)(v137 + 8) = v18 + 8; sub_7630F0(v137); v138 = v176; *(_DWORD *)(v137 + 8) = *(_DWORD *)(v176 + 4); v1 = *(_DWORD *)(v138 + 24); continue; case 0x26u: v139 = (v3 >> 23) - 1; v140 = v139; HIDWORD(v172) = v139; v141 = ((signed int)(v1 - *(_DWORD *)v176) >> 3) - *(unsigned __int8 *)(*(_DWORD *)(v173 + 12) + 76) - 1; if ( v140 < 0 ) { v142 = a1; v140 = ((signed int)(v1 - *(_DWORD *)v176) >> 3) - *(unsigned __int8 *)(*(_DWORD *)(v173 + 12) + 76) - 1; v143 = (*(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 8)) >> 3; HIDWORD(v172) = ((signed int)(v1 - *(_DWORD *)v176) >> 3) - *(unsigned __int8 *)(*(_DWORD *)(v173 + 12) + 76) - 1; if ( v143 <= v141 ) { sub_7600D0((_DWORD *)a1, v141); v142 = a1; v140 = v141; } v1 = *(_DWORD *)(v176 + 24); v18 = v1 + 8 * v174; *(_DWORD *)(v142 + 8) = v18 + 8 * v141; } v144 = 0; if ( v140 > 0 ) { v145 = (_DWORD *)(v1 - 8 * v141); do { if ( v144 >= v141 ) { *(_DWORD *)(v18 + 4) = 2146936064; } else { *(_DWORD *)v18 = *v145; *(_DWORD *)(v18 + 4) = v145[1]; } ++v144; v145 += 2; v18 += 8; } while ( v144 < SHIDWORD(v172) ); } continue; default: continue; } } } //----- (007655F0) -------------------------------------------------------- int __usercall sub_7655F0@(int a1@, double a2) { double v2; // st7 int v3; // eax int v5; // [esp+10h] [ebp-4h] v2 = frexp(a2, &v5); v3 = v5 + (signed int)(v2 * 2147482623.0); if ( v3 < 0 ) { if ( v3 == -v3 ) v3 = 0; v3 = -v3; } return *(_DWORD *)(a1 + 16) + 24 * (v3 % (((1 << *(_BYTE *)(a1 + 7)) - 1) | 1)); } //----- (00765650) -------------------------------------------------------- int __usercall sub_765650@(int a1@, int *a2@) { int v2; // esi int v3; // eax int result; // eax int v5; // ebx v2 = a1; v3 = a2[1]; if ( (a2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; switch ( v3 & 0x3F ) { case 1: result = *(_DWORD *)(v2 + 16) + 24 * (*a2 & ((1 << *(_BYTE *)(v2 + 7)) - 1)); break; case 2: result = *(_DWORD *)(v2 + 16) + 24 * (*a2 % (((1 << *(_BYTE *)(v2 + 7)) - 1) | 1u)); break; case 3: result = sub_7655F0(v2, *(double *)a2); break; case 4: goto LABEL_7; case 0x14: v5 = *a2; if ( !*(_BYTE *)(*a2 + 6) ) { *(_DWORD *)(v5 + 8) = sub_7673A0(v5 + 16, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 8)); *(_BYTE *)(v5 + 6) = 1; } LABEL_7: result = *(_DWORD *)(v2 + 16) + 24 * (*(_DWORD *)(*a2 + 8) & ((1 << *(_BYTE *)(v2 + 7)) - 1)); break; case 0x16: result = *(_DWORD *)(v2 + 16) + 24 * (*a2 % (((1 << *(_BYTE *)(v2 + 7)) - 1) | 1u)); break; default: result = *(_DWORD *)(v2 + 16) + 24 * (*a2 % (((1 << *(_BYTE *)(v2 + 7)) - 1) | 1u)); break; } return result; } //----- (00765790) -------------------------------------------------------- int __usercall sub_765790@(int *a1@, int a2@, int a3) { int *v3; // edi int v4; // eax double v6; // ST14_8 int *v7; // esi int v8; // eax int v9; // eax int v10; // [esp-4h] [ebp-14h] signed int v11; // [esp+Ch] [ebp-4h] v3 = a1; v4 = a1[1]; if ( v4 == 2146936064 ) return -1; if ( (v4 & 0x7FFFFF00) != 2146936064 ) { v6 = *(double *)v3; v11 = (signed int)v6; if ( v6 == (double)(signed int)v6 && v11 > 0 && v11 <= *(_DWORD *)(a2 + 28) ) return v11 - 1; } v7 = (int *)sub_765650(a2, v3); while ( 1 ) { v8 = (v7[3] & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v7[3] == v3[1]) : (unsigned __int8)((v3[1] & 0x7FFFFF00) != 2146936064); if ( v8 && sub_763AD0(0, v7 + 2, v3) ) break; if ( v7[3] == 2146936075 ) { v9 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v9) = 3; if ( v9 & 0x40 && v7[2] == *v3 ) break; } v7 = (int *)v7[4]; if ( !v7 ) sub_766EB0(a3, "invalid key to 'next'", v10); } return *(_DWORD *)(a2 + 28) + ((signed int)v7 - *(_DWORD *)(a2 + 16)) / 24; } //----- (007658B0) -------------------------------------------------------- signed int __cdecl sub_7658B0(int a1, int a2, int *a3) { int v3; // eax int v4; // ecx int v5; // eax _DWORD *v6; // edx int v7; // eax signed int v8; // edx int v9; // edi _DWORD *v10; // ecx signed int result; // eax int v12; // ebx int v13; // eax int v14; // ecx v3 = sub_765790(a3, a2, a1); v4 = *(_DWORD *)(a2 + 28); v5 = v3 + 1; if ( v5 >= v4 ) { LABEL_5: v7 = v5 - v4; v8 = 1 << *(_BYTE *)(a2 + 7); if ( v7 >= v8 ) { LABEL_9: result = 0; } else { v9 = *(_DWORD *)(a2 + 16); v10 = (_DWORD *)(v9 + 24 * v7 + 4); while ( *v10 == 2146936064 ) { ++v7; v10 += 6; if ( v7 >= v8 ) goto LABEL_9; } v13 = 24 * v7; *a3 = *(_DWORD *)(v9 + v13 + 8); a3[1] = *(_DWORD *)(v9 + v13 + 12); v14 = *(_DWORD *)(a2 + 16); a3[2] = *(_DWORD *)(v14 + v13); a3[3] = *(_DWORD *)(v14 + v13 + 4); result = 1; } } else { v6 = (_DWORD *)(*(_DWORD *)(a2 + 12) + 8 * v5 + 4); while ( *v6 == 2146936064 ) { ++v5; v6 += 2; if ( v5 >= v4 ) goto LABEL_5; } *(double *)a3 = (double)(v5 + 1); v12 = *(_DWORD *)(a2 + 12); a3[2] = *(_DWORD *)(v12 + 8 * v5); a3[3] = *(_DWORD *)(v12 + 8 * v5 + 4); result = 1; } return result; } //----- (00765970) -------------------------------------------------------- int __cdecl sub_765970(_DWORD *a1, int *a2) { int v2; // esi int v3; // ebx signed int v4; // edi signed int v5; // ecx int result; // eax _DWORD *v7; // [esp+10h] [ebp-4h] v2 = 0; v3 = 0; v4 = 0; v5 = 1; if ( *a2 <= 0 ) { *a2 = 0; result = 0; } else { v7 = a1; while ( 1 ) { if ( *v7 > 0 ) { v2 += *v7; if ( v2 > v5 / 2 ) { v4 = v5; v3 = v2; } } if ( v2 == *a2 ) break; ++v7; v5 *= 2; if ( v5 / 2 >= *a2 ) { *a2 = v4; return v3; } } *a2 = v4; result = v3; } return result; } //----- (007659F0) -------------------------------------------------------- int __cdecl sub_7659F0(int a1, int a2) { signed int v2; // edi signed int v3; // eax signed int v4; // edx signed int v5; // esi int v6; // ebx signed int v7; // ecx int v8; // ecx _DWORD *v9; // esi int v11; // [esp+Ch] [ebp-4h] v2 = 0; v3 = 1; v11 = 0; v4 = 1; do { v5 = *(_DWORD *)(a1 + 28); v6 = 0; v7 = v4; if ( v4 <= v5 ) { if ( v3 > v4 ) goto LABEL_10; } else { v7 = *(_DWORD *)(a1 + 28); if ( v3 > v5 ) return v11; } v8 = v7 - v3 + 1; v9 = (_DWORD *)(*(_DWORD *)(a1 + 12) + 8 * v3 - 4); v3 += v8; do { if ( *v9 != 2146936064 ) ++v6; v9 += 2; --v8; } while ( v8 ); LABEL_10: *(_DWORD *)(a2 + 4 * v2) += v6; v11 += v6; ++v2; v4 *= 2; } while ( v2 <= 30 ); return v11; } //----- (00765A60) -------------------------------------------------------- int __usercall sub_765A60@(int a1@, int a2, _DWORD *a3) { signed int v3; // esi int v4; // edi int v5; // eax double v6; // ST0C_8 int v7; // eax signed int v8; // eax int result; // eax int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] int v12; // [esp+14h] [ebp-4h] v3 = 1 << *(_BYTE *)(a1 + 7); v11 = 0; v12 = 0; if ( v3 ) { v4 = 24 * v3; do { v5 = *(_DWORD *)(a1 + 16); v4 -= 24; --v3; if ( *(_DWORD *)(v5 + v4 + 4) != 2146936064 ) { if ( (*(_DWORD *)(v5 + v4 + 12) & 0x7FFFFF00) == 2146936064 || (v6 = *(double *)(v5 + v4 + 8), v10 = (signed int)v6, v6 != (double)(signed int)v6) || (unsigned int)(v10 - 1) > 0x3FFFFFFF ) { v8 = 0; } else { v7 = sub_75F710(v10); ++*(_DWORD *)(a2 + 4 * v7); v8 = 1; } v12 += v8; ++v11; } } while ( v3 ); *a3 += v12; result = v11; } else { *a3 = *a3; result = 0; } return result; } //----- (00765B30) -------------------------------------------------------- int __usercall sub_765B30@(int a1@, int a2@, int a3@) { int result; // eax if ( (unsigned int)(a2 + 1) > 0x1FFFFFFF ) sub_76FDC0(a1); *(_DWORD *)(a3 + 12) = sub_76FDE0(a1, *(_DWORD *)(a3 + 12), 8 * *(_DWORD *)(a3 + 28), 8 * a2); for ( result = *(_DWORD *)(a3 + 28); result < a2; ++result ) *(_DWORD *)(*(_DWORD *)(a3 + 12) + 8 * result + 4) = 2146936064; *(_DWORD *)(a3 + 28) = a2; return result; } //----- (00765B80) -------------------------------------------------------- int __usercall sub_765B80@(int a1@, int a2@, int a3@) { signed int v3; // esi int v4; // ebx int v5; // eax int v6; // ecx signed int v7; // edx int v8; // eax int v9; // ecx int result; // eax int v11; // [esp+0h] [ebp-Ch] char v12; // [esp+8h] [ebp-4h] v3 = a2; v4 = a1; if ( a2 ) { v5 = sub_75F710(a2); v12 = v5; if ( v5 > 30 ) sub_766EB0(v4, "table overflow", v11); v3 = 1 << v5; if ( (unsigned int)((1 << v5) + 1) > 0xAAAAAAA ) sub_76FDC0(v4); *(_DWORD *)(a3 + 16) = sub_76FDE0(v4, 0, 0, 24 * v3); if ( v3 > 0 ) { v6 = 0; v7 = v3; do { v8 = *(_DWORD *)(a3 + 16); *(_DWORD *)(v8 + v6 + 16) = 0; *(_DWORD *)(v8 + v6 + 12) = 2146936064; *(_DWORD *)(v8 + v6 + 4) = 2146936064; v6 += 24; --v7; } while ( v7 ); } } else { *(_DWORD *)(a3 + 16) = &unk_A0D280; v12 = 0; } v9 = *(_DWORD *)(a3 + 16); result = 3 * v3; *(_BYTE *)(a3 + 7) = v12; *(_DWORD *)(a3 + 20) = v9 + 24 * v3; return result; } //----- (00765C40) -------------------------------------------------------- int __cdecl sub_765C40(int a1) { int result; // eax result = sub_760C90(a1, 5, 32, 0, 0); *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 12) = 0; *(_DWORD *)(result + 28) = 0; *(_DWORD *)(result + 16) = &unk_A0D280; *(_WORD *)(result + 6) = 255; *(_DWORD *)(result + 20) = &unk_A0D280; return result; } //----- (00765C80) -------------------------------------------------------- int __cdecl sub_765C80(int a1, int a2) { void *v2; // edx v2 = *(void **)(a2 + 16); if ( v2 != &unk_A0D280 ) sub_76FDE0(a1, (int)v2, 24 * (1 << *(_BYTE *)(a2 + 7)), 0); sub_76FDE0(a1, *(_DWORD *)(a2 + 12), 8 * *(_DWORD *)(a2 + 28), 0); return sub_76FDE0(a1, a2, 32, 0); } //----- (00765CE0) -------------------------------------------------------- void *__cdecl sub_765CE0(int a1, signed int a2) { int v3; // ecx double v4; // [esp+Ch] [ebp-8h] if ( (unsigned int)(a2 - 1) < *(_DWORD *)(a1 + 28) ) return (void *)(*(_DWORD *)(a1 + 12) + 8 * a2 - 8); v4 = (double)a2; v3 = sub_7655F0(a1, v4); while ( (*(_DWORD *)(v3 + 12) & 0x7FFFFF00) == 2146936064 || v4 != *(double *)(v3 + 8) ) { v3 = *(_DWORD *)(v3 + 16); if ( !v3 ) return &unk_A0CDD0; } return (void *)v3; } //----- (00765D60) -------------------------------------------------------- _DWORD *__cdecl sub_765D60(int a1, int a2) { _DWORD *result; // eax result = (_DWORD *)(*(_DWORD *)(a1 + 16) + 24 * (*(_DWORD *)(a2 + 8) & ((1 << *(_BYTE *)(a1 + 7)) - 1))); while ( result[3] != 2146936132 || result[2] != a2 ) { result = (_DWORD *)result[4]; if ( !result ) return &unk_A0CDD0; } return result; } //----- (00765DA0) -------------------------------------------------------- int *__cdecl sub_765DA0(int a1, int *a2) { int v2; // eax int v3; // eax int v4; // eax int *v6; // esi int v7; // eax double v8; // [esp+4h] [ebp-8h] v2 = a2[1]; if ( (a2[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v2) = 3; v3 = v2 & 0x3F; if ( !v3 ) return (int *)&unk_A0CDD0; v4 = v3 - 3; if ( v4 ) { if ( v4 == 1 ) return sub_765D60(a1, *a2); } else { v8 = *(double *)a2; if ( v8 == (double)(signed int)v8 ) return (int *)sub_765CE0(a1, (signed int)v8); } v6 = (int *)sub_765650(a1, a2); while ( 1 ) { v7 = (v6[3] & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v6[3] == a2[1]) : (unsigned __int8)((a2[1] & 0x7FFFFF00) != 2146936064); if ( v7 && sub_763AD0(0, v6 + 2, a2) ) break; v6 = (int *)v6[4]; if ( !v6 ) return (int *)&unk_A0CDD0; } return v6; } //----- (00765EA0) -------------------------------------------------------- int *__cdecl sub_765EA0(int a1, int a2, int *a3) { int *result; // eax result = sub_765DA0(a2, a3); if ( result == (int *)&unk_A0CDD0 ) result = sub_766390(a1, a2, a3); return result; } //----- (00765ED0) -------------------------------------------------------- int __usercall sub_765ED0@(int a1@, int a2) { unsigned int v2; // edi double *v3; // ecx double v4; // ST1C_8 int v5; // eax signed int i; // esi signed int v8; // esi double v9; // [esp+14h] [ebp-1Ch] int v10; // [esp+24h] [ebp-Ch] int v11; // [esp+28h] [ebp-8h] unsigned int v12; // [esp+2Ch] [ebp-4h] int v13; // [esp+38h] [ebp+8h] v12 = a2; v2 = a2 + 1; v13 = a2 + 1; while ( 1 ) { if ( v2 - 1 >= *(_DWORD *)(a1 + 28) ) { v9 = (double)v13; v4 = frexp(v9, &v10) * 2147482623.0; v5 = v10 + (signed int)v4; v11 = v10 + (signed int)v4; if ( v10 + (signed int)v4 < 0 ) { if ( v5 == -v5 ) v5 = 0; v5 = -v5; v11 = v5; } v3 = (double *)(*(_DWORD *)(a1 + 16) + 24 * (v5 % (((1 << *(_BYTE *)(a1 + 7)) - 1) | 1))); while ( (*((_DWORD *)v3 + 3) & 0x7FFFFF00) == 2146936064 || v9 != v3[1] ) { v3 = (double *)*((_DWORD *)v3 + 4); if ( !v3 ) { v3 = (double *)&unk_A0CDD0; break; } } } else { v3 = (double *)(*(_DWORD *)(a1 + 12) + 8 * v2 - 8); } if ( *((_DWORD *)v3 + 1) == 2146936064 ) break; v12 = v2; v2 *= 2; v13 = v2; if ( v2 > 0x7FFFFFFD ) { for ( i = 1; *((_DWORD *)sub_765CE0(a1, i) + 1) != 2146936064; ++i ) ; return i - 1; } } while ( v2 - v12 > 1 ) { v8 = (v12 + v2) >> 1; if ( *((_DWORD *)sub_765CE0(a1, v8) + 1) == 2146936064 ) v2 = v8; else v12 = v8; } return v12; } //----- (00766020) -------------------------------------------------------- unsigned int __cdecl sub_766020(int a1) { unsigned int result; // eax int v2; // esi unsigned int v3; // edx result = *(_DWORD *)(a1 + 28); if ( result && (v2 = *(_DWORD *)(a1 + 12), *(_DWORD *)(v2 + 8 * result - 4) == 2146936064) ) { v3 = 0; if ( result > 1 ) { do { if ( *(_DWORD *)(v2 + 8 * ((v3 + result) >> 1) - 4) == 2146936064 ) result = (v3 + result) >> 1; else v3 = (v3 + result) >> 1; } while ( result - v3 > 1 ); } result = v3; } else if ( *(_UNKNOWN **)(a1 + 16) != &unk_A0D280 ) { result = sub_765ED0(a1, *(_DWORD *)(a1 + 28)); } return result; } //----- (00766080) -------------------------------------------------------- int __cdecl sub_766080(int a1, int a2, int a3, int a4) { int v4; // ebx int v5; // esi int v6; // ecx char *v7; // edx int v8; // edi int v9; // edi _DWORD *v10; // ebx _DWORD *v11; // eax int result; // eax int v13; // edi int *v14; // ebx int *v15; // eax double v16; // [esp+Ch] [ebp-1Ch] int v17; // [esp+14h] [ebp-14h] int v18; // [esp+18h] [ebp-10h] unsigned int v19; // [esp+1Ch] [ebp-Ch] char *v20; // [esp+20h] [ebp-8h] int v21; // [esp+24h] [ebp-4h] signed int v22; // [esp+34h] [ebp+Ch] signed int v23; // [esp+34h] [ebp+Ch] int v24; // [esp+38h] [ebp+10h] v4 = a3; v5 = a2; v6 = *(unsigned __int8 *)(a2 + 7); v7 = *(char **)(a2 + 16); v21 = *(_DWORD *)(a2 + 28); v17 = v6; v20 = v7; if ( a3 > v21 ) sub_765B30(a1, a3, a2); sub_765B80(a1, a4, a2); v8 = v21; if ( a3 < v21 ) { v19 = a3 + 1; v22 = a3 + 1; *(_DWORD *)(v5 + 28) = a3; v18 = 8 * a3; v24 = 8 * a3; v9 = v8 - v4; do { v10 = (_DWORD *)(v24 + *(_DWORD *)(v5 + 12)); if ( v10[1] != 2146936064 ) { v11 = sub_765CE0(v5, v22); if ( v11 == (_DWORD *)&unk_A0CDD0 ) { v16 = (double)v22; v11 = sub_766390(a1, v5, (int *)&v16); } *v11 = *v10; v11[1] = v10[1]; } v24 += 8; ++v22; --v9; } while ( v9 ); if ( v19 > 0x1FFFFFFF ) sub_76FDC0(a1); *(_DWORD *)(v5 + 12) = sub_76FDE0(a1, *(_DWORD *)(v5 + 12), 8 * v21, v18); } result = 1 << v17; v13 = (1 << v17) - 1; v23 = 1 << v17; if ( v13 >= 0 ) { v14 = (int *)&v20[24 * v13 + 8]; do { if ( *(v14 - 1) != 2146936064 ) { v15 = sub_765DA0(v5, v14); if ( v15 == (int *)&unk_A0CDD0 ) v15 = sub_766390(a1, v5, v14); *v15 = *(v14 - 2); v15[1] = *(v14 - 1); result = v23; } v14 -= 6; --v13; } while ( v13 >= 0 ); } if ( v20 != (char *)&unk_A0D280 ) result = sub_76FDE0(a1, (int)v20, 24 * result, 0); return result; } //----- (007661F0) -------------------------------------------------------- int __cdecl sub_7661F0(int a1, int a2, int a3) { int result; // eax if ( *(_UNKNOWN **)(a2 + 16) == &unk_A0D280 ) result = sub_766080(a1, a2, a3, 0); else result = sub_766080(a1, a2, a3, 1 << *(_BYTE *)(a2 + 7)); return result; } //----- (00766240) -------------------------------------------------------- int __usercall sub_766240@(int a1@, int a2@, int a3) { int v3; // ebx int v4; // esi int v5; // esi double v6; // ST20_8 int v7; // eax signed int v8; // eax int v9; // eax int v11; // [esp+14h] [ebp-88h] int v12; // [esp+18h] [ebp-84h] int v13; // [esp+1Ch] [ebp-80h] int v14; // [esp+20h] [ebp-7Ch] int v15; // [esp+24h] [ebp-78h] int v16; // [esp+28h] [ebp-74h] int v17; // [esp+2Ch] [ebp-70h] int v18; // [esp+30h] [ebp-6Ch] int v19; // [esp+34h] [ebp-68h] int v20; // [esp+38h] [ebp-64h] int v21; // [esp+3Ch] [ebp-60h] int v22; // [esp+40h] [ebp-5Ch] int v23; // [esp+44h] [ebp-58h] int v24; // [esp+48h] [ebp-54h] int v25; // [esp+4Ch] [ebp-50h] int v26; // [esp+50h] [ebp-4Ch] int v27; // [esp+54h] [ebp-48h] int v28; // [esp+58h] [ebp-44h] int v29; // [esp+5Ch] [ebp-40h] int v30; // [esp+60h] [ebp-3Ch] int v31; // [esp+64h] [ebp-38h] int v32; // [esp+68h] [ebp-34h] int v33; // [esp+6Ch] [ebp-30h] int v34; // [esp+70h] [ebp-2Ch] int v35; // [esp+74h] [ebp-28h] int v36; // [esp+78h] [ebp-24h] int v37; // [esp+7Ch] [ebp-20h] int v38; // [esp+80h] [ebp-1Ch] int v39; // [esp+84h] [ebp-18h] int v40; // [esp+88h] [ebp-14h] int v41; // [esp+8Ch] [ebp-10h] int v42; // [esp+90h] [ebp-Ch] int v43; // [esp+94h] [ebp-8h] v3 = a1; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v21 = 0; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; v39 = 0; v40 = 0; v41 = 0; v42 = 0; v43 = 0; v12 = sub_7659F0(a1, (int)&v13); v4 = v12; v5 = sub_765A60(v3, (int)&v13, &v12) + v4; if ( (*(_DWORD *)(a2 + 4) & 0x7FFFFF00) == 2146936064 || (v6 = *(double *)a2, v11 = (signed int)v6, v6 != (double)(signed int)v6) || v11 <= 0 || v11 > 0x40000000 ) { v8 = 0; } else { v7 = sub_75F710(v11); ++*(&v13 + v7); v8 = 1; } v12 += v8; v9 = sub_765970(&v13, &v12); return sub_766080(a3, v3, v12, v5 - v9 + 1); } //----- (00766390) -------------------------------------------------------- int *__cdecl sub_766390(int a1, int a2, int *a3) { int *v3; // edi int v4; // eax double v5; // st7 int v6; // ebx int v7; // eax _DWORD *v8; // esi _DWORD *v9; // ebx int *result; // eax int v11; // eax int v12; // eax int v13; // [esp+0h] [ebp-Ch] v3 = a3; v4 = a3[1]; if ( v4 == 2146936064 ) sub_766EB0(a1, "table index is nil", v13); if ( (v4 & 0x7FFFFF00) != 2146936064 ) v5 = *(double *)a3; v6 = a2; v7 = sub_765650(a2, a3); v8 = (_DWORD *)v7; if ( *(_DWORD *)(v7 + 4) != 2146936064 || (_UNKNOWN *)v7 == &unk_A0D280 ) { if ( *(_DWORD *)(a2 + 20) <= *(_DWORD *)(a2 + 16) ) goto LABEL_13; while ( 1 ) { *(_DWORD *)(v6 + 20) -= 24; v9 = *(_DWORD **)(v6 + 20); if ( v9[3] == 2146936064 ) break; v6 = a2; if ( *(_DWORD *)(a2 + 20) <= *(_DWORD *)(a2 + 16) ) goto LABEL_13; } if ( !v9 ) { v6 = a2; LABEL_13: sub_766240(v6, (int)a3, a1); result = sub_765DA0(v6, a3); if ( result == (int *)&unk_A0CDD0 ) result = (int *)sub_766390(a1, v6, a3); return result; } v11 = sub_765650(a2, (int *)(v7 + 8)); if ( (_DWORD *)v11 == v8 ) { v9[4] = v8[4]; v8[4] = v9; v8 = v9; } else { for ( ; *(_DWORD **)(v11 + 16) != v8; v11 = *(_DWORD *)(v11 + 16) ) ; *(_DWORD *)(v11 + 16) = v9; *v9 = *v8; v9[1] = v8[1]; v9[2] = v8[2]; v9[3] = v8[3]; v9[4] = v8[4]; v9[5] = v8[5]; v8[4] = 0; v8[1] = 2146936064; } v6 = a2; v3 = a3; } v8[2] = *v3; v8[3] = v3[1]; v12 = v3[1]; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v12) = 3; if ( v12 & 0x40 && *(_BYTE *)(*v3 + 5) & 3 && *(_BYTE *)(v6 + 5) & 4 ) sub_760C70(a1, v6); return v8; } //----- (00766520) -------------------------------------------------------- _DWORD *__cdecl sub_766520(int a1, int a2, signed int a3, _DWORD *a4) { _DWORD *result; // eax double v5; // [esp+4h] [ebp-8h] result = sub_765CE0(a2, a3); if ( result == (_DWORD *)&unk_A0CDD0 ) { v5 = (double)a3; result = sub_766390(a1, a2, (int *)&v5); } *result = *a4; result[1] = a4[1]; return result; } //----- (00766570) -------------------------------------------------------- int __thiscall sub_766570(_DWORD *this) { int result; // eax if ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)*this + 12) + 20) ) result = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)*this + 12) + 20) + 4 * ((this[7] - *(_DWORD *)(*(_DWORD *)(*(_DWORD *)*this + 12) + 12)) >> 2) - 4); else result = 0; return result; } //----- (007665A0) -------------------------------------------------------- signed int __cdecl sub_7665A0(int a1, int a2, int a3, int a4) { int v4; // esi char v5; // dl int v6; // ecx v4 = a2; if ( !a2 || (v5 = a3, !a3) ) { v5 = 0; v4 = 0; } v6 = *(_DWORD *)(a1 + 16); if ( *(_BYTE *)(v6 + 18) & 1 ) *(_DWORD *)(a1 + 20) = *(_DWORD *)(v6 + 28); *(_DWORD *)(a1 + 52) = v4; *(_DWORD *)(a1 + 44) = a4; *(_DWORD *)(a1 + 48) = a4; *(_BYTE *)(a1 + 40) = v5; return 1; } //----- (007665E0) -------------------------------------------------------- int __cdecl sub_7665E0(int a1) { return *(_DWORD *)(a1 + 52); } //----- (007665F0) -------------------------------------------------------- int __cdecl sub_7665F0(int a1) { return *(unsigned __int8 *)(a1 + 40); } //----- (00766600) -------------------------------------------------------- int __cdecl sub_766600(int a1) { return *(_DWORD *)(a1 + 44); } //----- (00766610) -------------------------------------------------------- signed int __cdecl sub_766610(int a1, int a2, int a3) { int v3; // eax signed int result; // eax int v5; // ecx bool v6; // zf v3 = a2; if ( a2 < 0 ) return 0; v5 = *(_DWORD *)(a1 + 16); v6 = a2 == 0; if ( a2 > 0 ) { do { if ( v5 == a1 + 72 ) break; v5 = *(_DWORD *)(v5 + 8); --v3; } while ( v3 > 0 ); v6 = v3 == 0; } if ( !v6 || v5 == a1 + 72 ) return 0; result = 1; *(_DWORD *)(a3 + 96) = v5; return result; } //----- (00766660) -------------------------------------------------------- const char *__usercall sub_766660@(int a1@, _DWORD *a2@, int a3, _DWORD *a4) { int v4; // edi int v5; // ecx const char *result; // eax int v7; // ebx int v8; // eax v4 = a1; if ( *((_BYTE *)a2 + 18) & 1 ) { if ( a1 < 0 ) { v5 = *(unsigned __int8 *)(*(_DWORD *)(*(_DWORD *)*a2 + 12) + 76); if ( -a1 < ((a2[6] - *a2) >> 3) - v5 ) { *a4 = *a2 + 8 * (v5 - a1); return "(*vararg)"; } return 0; } v7 = a2[6]; result = (const char *)sub_767A10( *(_DWORD *)(*(_DWORD *)*a2 + 12), a1, ((a2[7] - *(_DWORD *)(*(_DWORD *)(*(_DWORD *)*a2 + 12) + 12)) >> 2) - 1); if ( result ) { LABEL_13: *a4 = v7 + 8 * v4 - 8; return result; } } else { v7 = *a2 + 8; } if ( a2 == *(_DWORD **)(a3 + 16) ) v8 = *(_DWORD *)(a3 + 8); else v8 = *(_DWORD *)a2[3]; if ( (v8 - v7) >> 3 >= v4 && v4 > 0 ) { result = "(*temporary)"; goto LABEL_13; } return 0; } //----- (00766700) -------------------------------------------------------- const char *__cdecl sub_766700(int a1, _DWORD *a2, int a3) { int v3; // eax const char *result; // eax _DWORD *v5; // esi _DWORD *v6; // edx _DWORD *v7; // ecx if ( a2 ) { v5 = (_DWORD *)a2[24]; a2 = 0; result = sub_766660(a3, v5, a1, &a2); if ( result ) { v6 = a2; v7 = *(_DWORD **)(a1 + 8); *v7 = *a2; v7[1] = v6[1]; *(_DWORD *)(a1 + 8) += 8; } } else { v3 = *(_DWORD *)(a1 + 8); if ( *(_DWORD *)(v3 - 4) == 2146936134 ) result = (const char *)sub_767A10(*(_DWORD *)(*(_DWORD *)(v3 - 8) + 12), a3, 0); else result = 0; } return result; } //----- (00766770) -------------------------------------------------------- const char *__cdecl sub_766770(int a1, int a2, int a3) { _DWORD *v3; // esi const char *result; // eax int v5; // ecx _DWORD *v6; // edx _DWORD *v7; // [esp+8h] [ebp-4h] v3 = *(_DWORD **)(a2 + 96); v7 = 0; result = sub_766660(a3, v3, a1, &v7); if ( result ) { v5 = *(_DWORD *)(a1 + 8); v6 = v7; *v7 = *(_DWORD *)(v5 - 8); v6[1] = *(_DWORD *)(v5 - 4); } *(_DWORD *)(a1 + 8) -= 8; return result; } //----- (007667C0) -------------------------------------------------------- char __usercall sub_7667C0@(_DWORD *a1@, int a2@) { _DWORD *v2; // ecx int v3; // edx const char *v4; // edx int v5; // edx const char *v6; // ecx char *v7; // edx char result; // al char *v9; // edx if ( a2 && *(_BYTE *)(a2 + 4) != 38 ) { v2 = *(_DWORD **)(a2 + 12); v3 = v2[9]; if ( v3 ) v4 = (const char *)(v3 + 16); else v4 = "=?"; a1[4] = v4; v5 = v2[16]; a1[6] = v5; a1[7] = v2[17]; v6 = "main"; if ( v5 ) v6 = "Lua"; v7 = (char *)a1[4]; a1[3] = v6; result = sub_75FD30(a1 + 9, v7, 60); } else { a1[4] = "=[C]"; v9 = (char *)a1[4]; a1[6] = -1; a1[7] = -1; a1[3] = "C"; result = sub_75FD30(a1 + 9, v9, 60); } return result; } //----- (00766840) -------------------------------------------------------- _DWORD *__usercall sub_766840@(int a1@, int a2@) { _DWORD *result; // eax _DWORD *v3; // ecx int v4; // edx int v5; // edi int v6; // [esp+0h] [ebp-10h] int v7; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] _DWORD *v9; // [esp+Ch] [ebp-4h] if ( a1 && *(_BYTE *)(a1 + 4) != 38 ) { v8 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 20); result = (_DWORD *)sub_765C40(a2); v3 = *(_DWORD **)(a2 + 8); *v3 = result; v3[1] = 2146936133; *(_DWORD *)(a2 + 8) += 8; v4 = *(_DWORD *)(a1 + 12); v5 = 0; v6 = 1; v7 = 2146936065; v9 = result; if ( *(_DWORD *)(v4 + 52) > 0 ) { while ( 1 ) { result = sub_766520(a2, (int)result, *(_DWORD *)(v8 + 4 * v5++), &v6); if ( v5 >= *(_DWORD *)(*(_DWORD *)(a1 + 12) + 52) ) break; result = v9; } } } else { result = *(_DWORD **)(a2 + 8); result[1] = 2146936064; *(_DWORD *)(a2 + 8) += 8; } return result; } //----- (007668D0) -------------------------------------------------------- const char *__usercall sub_7668D0@(int a1@, int a2@, _DWORD *a3@, int a4) { int v4; // ecx unsigned int v5; // eax int v6; // edx const char *result; // eax if ( a1 & 0x100 ) { v4 = *(_DWORD *)(a2 + 8); v5 = a1 & 0xFFFFFEFF; v6 = *(_DWORD *)(v4 + 8 * v5 + 4); result = (const char *)(v4 + 8 * v5); if ( (v6 | 0x70) == 2146936180 ) { result = (const char *)(*(_DWORD *)result + 16); *a3 = result; return result; } goto LABEL_6; } result = sub_766A00((_DWORD *)a2, a4, a1, a3); if ( !result || *result != 99 ) LABEL_6: *a3 = "?"; return result; } //----- (00766920) -------------------------------------------------------- signed int __usercall sub_766920@(int a1@, int a2, int a3) { int v3; // edi unsigned int v4; // ecx int v5; // esi int v6; // edx int v7; // ecx int v8; // edx int v10; // [esp+4h] [ebp-8h] signed int v11; // [esp+8h] [ebp-4h] v3 = 0; v11 = -1; if ( a3 <= 0 ) return -1; v10 = *(_DWORD *)(a2 + 12); do { v4 = *(_DWORD *)(v10 + 4 * v3); v5 = *(_DWORD *)(v10 + 4 * v3) & 0x3F; v6 = (*(_DWORD *)(v10 + 4 * v3) >> 6) & 0xFF; switch ( v5 ) { case 4: if ( v6 <= a1 && a1 <= (signed int)(v6 + (v4 >> 23)) ) goto LABEL_15; break; case 23: v7 = (v4 >> 14) - 0x1FFFF; v8 = v7 + v3 + 1; if ( v3 < v8 && v8 <= a3 ) v3 += v7; break; case 27: goto LABEL_14; case 29: case 30: goto LABEL_8; case 34: v6 += 2; LABEL_8: if ( a1 >= v6 ) goto LABEL_15; break; default: if ( byte_A0F32C[v5] & 0x40 ) { LABEL_14: if ( a1 == v6 ) LABEL_15: v11 = v3; } break; } ++v3; } while ( v3 < a3 ); return v11; } //----- (00766A00) -------------------------------------------------------- const char *__cdecl sub_766A00(_DWORD *a1, int a2, int a3, int *a4) { int v4; // esi int v5; // edi int v6; // eax signed int v7; // eax int v8; // edx unsigned int v9; // eax int v10; // ecx int v11; // eax const char *result; // eax int v13; // edx unsigned int v14; // eax int v15; // eax int v16; // eax bool v17; // zf int v18; // eax unsigned int v19; // eax int v20; // ecx int v21; // edx _DWORD *v22; // eax int v23; // [esp+Ch] [ebp-4h] const char *v24; // [esp+20h] [ebp+10h] v4 = a3; v5 = a2; v6 = sub_767A10((int)a1, a3 + 1, a2); *a4 = v6; if ( v6 ) return "local"; while ( 2 ) { v7 = sub_766920(v4, (int)a1, v5); v5 = v7; if ( v7 == -1 ) return 0; v8 = a1[3]; v9 = *(_DWORD *)(v8 + 4 * v7); v10 = *(_DWORD *)(v8 + 4 * v5) & 0x3F; switch ( v10 ) { case 0: if ( (signed int)(v9 >> 23) >= (signed int)((v9 >> 6) & 0xFF) ) return 0; v4 = v9 >> 23; v11 = sub_767A10((int)a1, (v9 >> 23) + 1, v5); *a4 = v11; if ( v11 ) return "local"; continue; case 1: case 2: if ( v10 == 1 ) v19 = v9 >> 14; else v19 = *(_DWORD *)(a1[3] + 4 * v5 + 4) >> 6; v20 = a1[2]; v21 = *(_DWORD *)(v20 + 8 * v19 + 4); v22 = (_DWORD *)(v20 + 8 * v19); if ( (v21 | 0x70) != 2146936180 ) return 0; *a4 = *v22 + 16; return "constant"; case 5: v18 = *(_DWORD *)(a1[7] + 8 * (v9 >> 23)); if ( v18 ) *a4 = v18 + 16; else *a4 = (int)"?"; return "upvalue"; case 6: case 7: v13 = (v9 >> 14) & 0x1FF; v14 = v9 >> 23; v23 = v13; if ( v10 == 7 ) { v15 = sub_767A10((int)a1, v14 + 1, v5); } else { v16 = *(_DWORD *)(a1[7] + 8 * v14); if ( !v16 ) { v24 = "?"; goto LABEL_13; } v15 = v16 + 16; } v24 = (const char *)v15; LABEL_13: sub_7668D0(v23, (int)a1, a4, v5); if ( !v24 || (v17 = strcmp(v24, "_ENV") == 0, result = "global", !v17) ) result = "field"; break; case 12: sub_7668D0((v9 >> 14) & 0x1FF, (int)a1, a4, v5); return "method"; default: return 0; } return result; } } //----- (00766C00) -------------------------------------------------------- const char *__usercall sub_766C00@(_DWORD *a1@, int *a2@, int a3) { _DWORD *v3; // edx int v4; // eax unsigned int v5; // ecx int v6; // eax const char *result; // eax signed int v8; // eax v3 = *(_DWORD **)(*(_DWORD *)*a1 + 12); v4 = (a1[7] - v3[3]) >> 2; v5 = *(_DWORD *)(v3[3] + 4 * v4 - 4); v6 = v4 - 1; switch ( v5 & 0x3F ) { case 6u: case 7u: case 0xCu: v8 = 0; goto LABEL_18; case 8u: case 0xAu: v8 = 1; goto LABEL_18; case 0xDu: v8 = 6; goto LABEL_18; case 0xEu: v8 = 7; goto LABEL_18; case 0xFu: v8 = 8; goto LABEL_18; case 0x10u: v8 = 9; goto LABEL_18; case 0x11u: v8 = 10; goto LABEL_18; case 0x12u: v8 = 11; goto LABEL_18; case 0x13u: v8 = 12; goto LABEL_18; case 0x15u: v8 = 4; goto LABEL_18; case 0x16u: v8 = 15; goto LABEL_18; case 0x18u: v8 = 5; goto LABEL_18; case 0x19u: v8 = 13; goto LABEL_18; case 0x1Au: v8 = 14; LABEL_18: *a2 = *(_DWORD *)(*(_DWORD *)(a3 + 12) + 4 * v8 + 168) + 16; result = "metamethod"; break; case 0x1Du: case 0x1Eu: result = sub_766A00(v3, v6, (v5 >> 6) & 0xFF, a2); break; case 0x22u: *a2 = (int)"for iterator"; result = "for iterator"; break; default: result = 0; break; } return result; } //----- (00766D50) -------------------------------------------------------- const char *__usercall sub_766D50@(int **a1@, int a2@, _DWORD *a3) { int v3; // esi int v4; // ecx int v5; // eax int v6; // edx int v8; // eax v3 = **a1; v4 = *(unsigned __int8 *)(v3 + 6); v5 = 0; if ( v4 <= 0 ) return 0; v6 = v3 + 16; while ( *(_DWORD *)(*(_DWORD *)v6 + 8) != a2 ) { ++v5; v6 += 4; if ( v5 >= v4 ) return 0; } v8 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 28) + 8 * v5); if ( v8 ) *a3 = v8 + 16; else *a3 = "?"; return "upvalue"; } //----- (00766DB0) -------------------------------------------------------- int __usercall sub_766DB0@(int a1@) { int result; // eax int v2; // edx int v3; // esi int v4; // edx int v5; // [esp+0h] [ebp-40h] result = *(_DWORD *)(a1 + 16); if ( *(_BYTE *)(result + 18) & 1 ) { v2 = *(_DWORD *)(**(_DWORD **)result + 12); if ( *(_DWORD *)(v2 + 20) ) v3 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(**(_DWORD **)result + 12) + 20) + 4 * ((*(_DWORD *)(result + 28) - *(_DWORD *)(*(_DWORD *)(**(_DWORD **)result + 12) + 12)) >> 2) - 4); v4 = *(_DWORD *)(v2 + 36); if ( v4 ) sub_75FD30(&v5, (char *)(v4 + 16), 60); else LOWORD(v5) = 63; result = sub_75FD10(a1, "%s:%d: %s", (int)&v5); } return result; } //----- (00766E40) -------------------------------------------------------- void __cdecl __noreturn sub_766E40(_DWORD *a1) { int v1; // eax _DWORD *v2; // ecx _DWORD *v3; // eax int v4; // eax v1 = a1[17]; if ( v1 ) { v2 = (_DWORD *)(v1 + a1[7]); if ( (v2[1] | 0x70) != 2146936182 ) sub_75FEE0((int)a1, 6); v3 = (_DWORD *)a1[2]; *v3 = *(v3 - 2); v3[1] = *(v3 - 1); v4 = a1[2]; *(_DWORD *)(v4 - 8) = *v2; *(_DWORD *)(v4 - 4) = v2[1]; a1[2] += 8; sub_760A50((int)a1, (int (__cdecl **)(int))(a1[2] - 16), 1, 0); } sub_75FEE0((int)a1, 2); } //----- (00766EB0) -------------------------------------------------------- void __cdecl __noreturn sub_766EB0(int a1, char *a2, int a3) { sub_75FA20(a1, a2, (int)&a3); sub_766DB0(a1); sub_766E40((_DWORD *)a1); } //----- (00766EE0) -------------------------------------------------------- signed int __usercall sub_766EE0@(int a1@, int a2@, int a3, char *a4, int a5) { char v5; // al char v6; // al int v7; // eax char *v8; // eax signed int v10; // [esp+0h] [ebp-4h] v5 = *a4; v10 = 1; if ( !*a4 ) return 1; do { switch ( v5 ) { case 76: case 102: break; case 83: sub_7667C0((_DWORD *)a2, a5); break; case 108: if ( a1 && *(_BYTE *)(a1 + 18) & 1 ) *(_DWORD *)(a2 + 20) = sub_766570((_DWORD *)a1); else *(_DWORD *)(a2 + 20) = -1; break; case 110: if ( a1 && !(*(_BYTE *)(a1 + 18) & 0x40) && (v7 = *(_DWORD *)(a1 + 8), *(_BYTE *)(v7 + 18) & 1) ) *(_DWORD *)(a2 + 8) = sub_766C00((_DWORD *)v7, (int *)(a2 + 4), a3); else *(_DWORD *)(a2 + 8) = 0; if ( !*(_DWORD *)(a2 + 8) ) { *(_DWORD *)(a2 + 8) = &byte_9A8050; *(_DWORD *)(a2 + 4) = 0; } break; case 116: if ( a1 ) *(_BYTE *)(a2 + 35) = *(_BYTE *)(a1 + 18) & 0x40; else *(_BYTE *)(a2 + 35) = 0; break; case 117: if ( a5 ) v6 = *(_BYTE *)(a5 + 6); else v6 = 0; *(_BYTE *)(a2 + 32) = v6; if ( a5 && *(_BYTE *)(a5 + 4) != 38 ) { *(_BYTE *)(a2 + 34) = *(_BYTE *)(*(_DWORD *)(a5 + 12) + 77); *(_BYTE *)(a2 + 33) = *(_BYTE *)(*(_DWORD *)(a5 + 12) + 76); } else { *(_WORD *)(a2 + 33) = 256; } break; default: v10 = 0; break; } v8 = a4 + 1; a4 = v8; v5 = *v8; } while ( v5 ); return v10; } //----- (00767060) -------------------------------------------------------- int __cdecl sub_767060(int a1, char *a2, int a3) { char *v3; // esi int *v4; // eax int **v5; // ebx int v6; // ecx signed int v7; // eax signed int v8; // ebx int *v9; // eax signed int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] v3 = a2; if ( *a2 == 62 ) { v4 = (int *)(*(_DWORD *)(a1 + 8) - 8); v5 = 0; v3 = a2 + 1; v13 = v4; ++a2; *(_DWORD *)(a1 + 8) = v4; } else { v5 = *(int ***)(a3 + 96); v13 = *v5; v4 = *v5; } v6 = v4[1]; if ( (v4[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v6) = 3; if ( (v6 & 0x1F) == 6 ) { v12 = *v4; v7 = sub_766EE0((int)v5, a3, a1, v3, *v4); } else { v12 = 0; v7 = sub_766EE0((int)v5, a3, a1, v3, 0); } v8 = v7; v11 = v7; if ( strchr(a2, 102) ) { v9 = *(int **)(a1 + 8); *v9 = *v13; v9[1] = v13[1]; *(_DWORD *)(a1 + 8) += 8; } if ( !strchr(a2, 76) ) return v8; sub_766840(v12, a1); return v11; } //----- (00767130) -------------------------------------------------------- void __cdecl __noreturn sub_767130(int a1, int a2, int a3) { int v3; // esi int v4; // eax int v5; // ecx int v6; // ebx unsigned int v7; // ecx unsigned int v8; // eax int v9; // [esp+Ch] [ebp-4h] v3 = *(_DWORD *)(a1 + 16); v4 = *(_DWORD *)(a2 + 4); v5 = *(_DWORD *)(a2 + 4) & 0x7FFFFF00; v9 = 0; if ( v5 != 2146936064 ) LOBYTE(v4) = 3; v6 = *(&off_A0D148 + (v4 & 0xF)); if ( *(_BYTE *)(v3 + 18) & 1 ) { if ( sub_766D50((int **)v3, a2, &v9) ) goto LABEL_13; v7 = *(_DWORD *)(v3 + 4); v8 = *(_DWORD *)(v3 + 24); if ( v8 < v7 ) { while ( a2 != v8 ) { v8 += 8; if ( v8 >= v7 ) goto LABEL_8; } if ( sub_766A00( *(_DWORD **)(**(_DWORD **)v3 + 12), ((*(_DWORD *)(v3 + 28) - *(_DWORD *)(*(_DWORD *)(**(_DWORD **)v3 + 12) + 12)) >> 2) - 1, (a2 - *(_DWORD *)(v3 + 24)) >> 3, &v9) ) { LABEL_13: sub_766EB0(a1, "attempt to %s %s '%s' (a %s value)", a3); } } } LABEL_8: sub_766EB0(a1, "attempt to %s a %s value", a3); } //----- (00767200) -------------------------------------------------------- void __cdecl __noreturn sub_767200(int a1, int a2, int a3) { int v3; // ecx v3 = a2; if ( (*(_DWORD *)(a2 + 4) | 0x70) == 2146936180 || (*(_DWORD *)(a2 + 4) & 0x7FFFFF00) != 2146936064 ) v3 = a3; sub_767130(a1, v3, (int)"concatenate"); } //----- (00767240) -------------------------------------------------------- void __cdecl __noreturn sub_767240(int a1, double *a2, int a3) { bool v3; // zf int v4; // eax char v5; // [esp+4h] [ebp-8h] v3 = sub_763240(a2, (double *)&v5) == 0; v4 = (int)a2; if ( !v3 ) v4 = a3; sub_767130(a1, v4, (int)"perform arithmetic on"); } //----- (00767270) -------------------------------------------------------- void __cdecl __noreturn sub_767270(int a1, int a2, int a3) { int v3; // eax int v4; // ecx int v5; // eax v3 = *(_DWORD *)(a2 + 4); if ( (*(_DWORD *)(a2 + 4) & 0x7FFFFF00) != 2146936064 ) LOBYTE(v3) = 3; v4 = *(_DWORD *)(a3 + 4); v5 = *(&off_A0D148 + (v3 & 0xF)); if ( (*(_DWORD *)(a3 + 4) & 0x7FFFFF00) != 2146936064 ) LOBYTE(v4) = 3; if ( v5 == *(&off_A0D148 + (v4 & 0xF)) ) sub_766EB0(a1, "attempt to compare two %s values", v5); sub_766EB0(a1, "attempt to compare %s with %s", v5); } //----- (007672F0) -------------------------------------------------------- signed int __cdecl sub_7672F0(int a1, int a2) { unsigned int v2; // eax int v3; // ecx int v4; // esi v2 = *(_DWORD *)(a1 + 12); if ( a1 != a2 ) { if ( v2 != *(_DWORD *)(a2 + 12) ) return 0; v3 = a2 + 16; v4 = a1 + 16; if ( v2 >= 4 ) { while ( *(_DWORD *)v4 == *(_DWORD *)v3 ) { v2 -= 4; v3 += 4; v4 += 4; if ( v2 < 4 ) goto LABEL_6; } return 0; } LABEL_6: if ( v2 ) { if ( *(_BYTE *)v3 != *(_BYTE *)v4 || v2 > 1 && (*(_BYTE *)(v3 + 1) != *(_BYTE *)(v4 + 1) || v2 > 2 && *(_BYTE *)(v3 + 2) != *(_BYTE *)(v4 + 2)) ) { return 0; } } } return 1; } //----- (00767360) -------------------------------------------------------- BOOL __cdecl sub_767360(int a1, int a2) { char v2; // dl int v3; // eax BOOL result; // eax v2 = *(_BYTE *)(a1 + 4); result = 0; if ( v2 == *(_BYTE *)(a2 + 4) ) { v3 = v2 == 4 ? (unsigned __int8)(a1 == a2) : sub_7672F0(a1, a2); if ( v3 ) result = 1; } return result; } //----- (007673A0) -------------------------------------------------------- unsigned int __cdecl sub_7673A0(int a1, unsigned int a2, int a3) { unsigned int v3; // edx unsigned int result; // eax unsigned int v5; // ecx int v6; // edi v3 = a2; result = a3 ^ a2; v5 = (a2 >> 5) + 1; if ( a2 >= v5 ) { do { v6 = (result >> 2) + 32 * result + *(unsigned __int8 *)(a1 + v3 - 1); v3 -= v5; result ^= v6; } while ( v3 >= v5 ); } return result; } //----- (007673E0) -------------------------------------------------------- int __cdecl sub_7673E0(int a1, int a2) { int v2; // ebx int v3; // esi int v4; // eax int v5; // edi int i; // eax int v7; // edx int **v8; // ecx int *v9; // eax int v10; // edi int *v11; // edx int v12; // ecx int result; // eax int j; // [esp+Ch] [ebp-4h] v2 = a1; v3 = *(_DWORD *)(a1 + 12); sub_762C10(a1, -5); v4 = *(_DWORD *)(v3 + 32); v5 = a2; if ( a2 > v4 ) { if ( (unsigned int)(a2 + 1) > 0x3FFFFFFF ) sub_76FDC0(a1); *(_DWORD *)(v3 + 24) = sub_76FDE0(a1, *(_DWORD *)(v3 + 24), 4 * v4, 4 * a2); for ( i = *(_DWORD *)(v3 + 32); i < a2; ++i ) *(_DWORD *)(*(_DWORD *)(v3 + 24) + 4 * i) = 0; } v7 = 0; for ( j = 0; v7 < *(_DWORD *)(v3 + 32); j = v7 ) { v8 = (int **)(*(_DWORD *)(v3 + 24) + 4 * v7); v9 = *v8; *v8 = 0; if ( v9 ) { v10 = v5 - 1; do { v11 = (int *)*v9; v12 = v10 & v9[2]; *v9 = *(_DWORD *)(*(_DWORD *)(v3 + 24) + 4 * v12); *(_DWORD *)(*(_DWORD *)(v3 + 24) + 4 * v12) = v9; *((_BYTE *)v9 + 5) &= 0xBFu; v9 = v11; } while ( v11 ); v5 = a2; v2 = a1; v7 = j; } ++v7; } result = *(_DWORD *)(v3 + 32); if ( v5 < result ) { if ( (unsigned int)(v5 + 1) > 0x3FFFFFFF ) sub_76FDC0(v2); result = sub_76FDE0(v2, *(_DWORD *)(v3 + 24), 4 * result, 4 * v5); *(_DWORD *)(v3 + 24) = result; } *(_DWORD *)(v3 + 32) = v5; return result; } //----- (007674F0) -------------------------------------------------------- int __usercall sub_7674F0@(unsigned int a1@, int a2, char *a3) { int v3; // ebx unsigned int v4; // eax unsigned int v5; // esi int result; // eax char *v7; // edx unsigned int v8; // ecx int v9; // esi signed int v10; // eax int v11; // eax int v12; // esi unsigned __int8 v13; // cl unsigned int v14; // [esp+8h] [ebp-8h] int v15; // [esp+Ch] [ebp-4h] v3 = *(_DWORD *)(a2 + 12); v4 = sub_7673A0((int)a3, a1, *(_DWORD *)(v3 + 48)); v5 = v4; result = *(_DWORD *)(*(_DWORD *)(v3 + 24) + 4 * (v4 & (*(_DWORD *)(v3 + 32) - 1))); v14 = v5; v15 = result; if ( !result ) { LABEL_16: v10 = *(_DWORD *)(v3 + 32); if ( *(_DWORD *)(v3 + 28) >= (unsigned int)v10 && v10 <= 1073741822 ) sub_7673E0(a2, 2 * v10); v11 = sub_760C90(a2, 4, a1 + 17, (int *)(*(_DWORD *)(v3 + 24) + 4 * (v5 & (*(_DWORD *)(v3 + 32) - 1))), 0); v12 = v11; *(_DWORD *)(v11 + 12) = a1; *(_DWORD *)(v11 + 8) = v14; *(_BYTE *)(v11 + 6) = 0; memcpy((void *)(v11 + 16), a3, a1); *(_BYTE *)(v12 + a1 + 16) = 0; ++*(_DWORD *)(v3 + 28); return v12; } while ( 1 ) { if ( v5 != *(_DWORD *)(result + 8) || a1 != *(_DWORD *)(result + 12) ) goto LABEL_15; v7 = a3; v8 = a1; v9 = result + 16; if ( a1 < 4 ) break; while ( *(_DWORD *)v7 == *(_DWORD *)v9 ) { v8 -= 4; v9 += 4; v7 += 4; if ( v8 < 4 ) { result = v15; goto LABEL_8; } } LABEL_14: result = v15; LABEL_15: result = *(_DWORD *)result; v5 = v14; v15 = result; if ( !result ) goto LABEL_16; } LABEL_8: if ( !v8 ) goto LABEL_22; if ( *(_BYTE *)v9 != *v7 || v8 > 1 && (*(_BYTE *)(v9 + 1) != v7[1] || v8 > 2 && *(_BYTE *)(v9 + 2) != v7[2]) ) goto LABEL_14; result = v15; LABEL_22: v13 = *(_BYTE *)(result + 5) ^ 3; if ( !((unsigned __int8)(*(_BYTE *)(v3 + 52) ^ 3) & v13) ) *(_BYTE *)(result + 5) = v13; return result; } //----- (00767620) -------------------------------------------------------- int __cdecl sub_767620(int a1, void *a2, size_t a3) { int v4; // ebx int v5; // eax int v6; // esi if ( a3 <= 0x28 ) return sub_7674F0(a3, a1, (char *)a2); if ( a3 + 1 > 0xFFFFFFED ) sub_76FDC0(a1); v4 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 48); v5 = sub_760C90(a1, 20, a3 + 17, 0, 0); v6 = v5; *(_DWORD *)(v5 + 12) = a3; *(_DWORD *)(v5 + 8) = v4; *(_BYTE *)(v5 + 6) = 0; memcpy((void *)(v5 + 16), a2, a3); *(_BYTE *)(v6 + a3 + 16) = 0; return v6; } //----- (007676A0) -------------------------------------------------------- int __cdecl sub_7676A0(int a1, void *a2) { return sub_767620(a1, a2, strlen((const char *)a2)); } //----- (007676D0) -------------------------------------------------------- _DWORD *__cdecl sub_7676D0(int a1, unsigned int a2, int a3) { _DWORD *result; // eax if ( a2 > 0xFFFFFFE5 ) sub_76FDC0(a1); result = (_DWORD *)sub_760C90(a1, 7, a2 + 24, 0, 0); result[4] = a2; result[2] = 0; result[3] = a3; return result; } //----- (00767710) -------------------------------------------------------- int __cdecl sub_767710(int a1, int a2) { int result; // eax result = sub_760C90(a1, 38, 8 * a2 + 16, 0, 0); *(_BYTE *)(result + 6) = a2; return result; } //----- (00767740) -------------------------------------------------------- int __cdecl sub_767740(int a1, int a2) { int v2; // ebx int result; // eax _DWORD *v4; // ecx v2 = a2; result = sub_760C90(a1, 6, 4 * a2 + 16, 0, 0); *(_DWORD *)(result + 12) = 0; *(_BYTE *)(result + 6) = a2; if ( a2 ) { v4 = (_DWORD *)(4 * a2 + 16 + result); do { --v4; --v2; *v4 = 0; } while ( v2 ); } return result; } //----- (00767790) -------------------------------------------------------- int __cdecl sub_767790(int a1) { int result; // eax result = sub_760C90(a1, 10, 24, 0, 0); *(_DWORD *)(result + 8) = result + 16; *(_DWORD *)(result + 20) = 2146936064; return result; } //----- (007677C0) -------------------------------------------------------- int __cdecl sub_7677C0(int a1, unsigned int a2) { int v2; // esi int *v3; // ecx int result; // eax unsigned int v5; // edx int v6; // ecx unsigned __int8 v7; // cl v2 = *(_DWORD *)(a1 + 12); v3 = (int *)(a1 + 56); if ( *(_DWORD *)(a1 + 56) ) { do { result = *v3; v5 = *(_DWORD *)(*v3 + 8); if ( v5 < a2 ) break; if ( v5 == a2 ) { v7 = *(_BYTE *)(result + 5) ^ 3; if ( !((unsigned __int8)(*(_BYTE *)(v2 + 52) ^ 3) & v7) ) *(_BYTE *)(result + 5) = v7; return result; } v3 = (int *)*v3; } while ( *(_DWORD *)result ); } result = sub_760C90(a1, 10, 24, v3, 0); *(_DWORD *)(result + 8) = a2; *(_DWORD *)(result + 16) = v2 + 104; v6 = *(_DWORD *)(v2 + 124); *(_DWORD *)(result + 20) = v6; *(_DWORD *)(v6 + 16) = result; *(_DWORD *)(v2 + 124) = result; return result; } //----- (00767830) -------------------------------------------------------- int __cdecl sub_767830(int a1, int a2) { int v2; // ecx v2 = a2 + 16; if ( *(_DWORD *)(a2 + 8) != a2 + 16 ) { *(_DWORD *)(*(_DWORD *)(a2 + 20) + 16) = *(_DWORD *)v2; *(_DWORD *)(*(_DWORD *)v2 + 20) = *(_DWORD *)(a2 + 20); } return sub_76FDE0(a1, a2, 24, 0); } //----- (00767870) -------------------------------------------------------- void __cdecl sub_767870(int a1, unsigned int a2) { int v2; // edi int v3; // eax int v4; // ecx _DWORD *v5; // edx v2 = *(_DWORD *)(a1 + 12); while ( *(_DWORD *)(a1 + 56) ) { v3 = *(_DWORD *)(a1 + 56); if ( *(_DWORD *)(v3 + 8) < a2 ) break; *(_DWORD *)(a1 + 56) = *(_DWORD *)v3; v4 = v3 + 16; if ( (unsigned __int8)(*(_BYTE *)(v2 + 52) ^ 3) & (unsigned __int8)(*(_BYTE *)(v3 + 5) ^ 3) ) { *(_DWORD *)(*(_DWORD *)(v3 + 20) + 16) = *(_DWORD *)v4; *(_DWORD *)(*(_DWORD *)v4 + 20) = *(_DWORD *)(v3 + 20); v5 = *(_DWORD **)(v3 + 8); *(_DWORD *)v4 = *v5; *(_DWORD *)(v3 + 20) = v5[1]; *(_DWORD *)(v3 + 8) = v4; *(_DWORD *)v3 = *(_DWORD *)(v2 + 60); *(_DWORD *)(v2 + 60) = v3; sub_762050((_BYTE *)v2, v3); } else { if ( *(_DWORD *)(v3 + 8) != v4 ) { *(_DWORD *)(*(_DWORD *)(v3 + 20) + 16) = *(_DWORD *)v4; *(_DWORD *)(*(_DWORD *)v4 + 20) = *(_DWORD *)(v3 + 20); } sub_76FDE0(a1, v3, 24, 0); } } } //----- (00767910) -------------------------------------------------------- int __cdecl sub_767910(int a1) { int result; // eax result = sub_760C90(a1, 9, 80, 0, 0); *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 44) = 0; *(_DWORD *)(result + 16) = 0; *(_DWORD *)(result + 56) = 0; *(_DWORD *)(result + 12) = 0; *(_DWORD *)(result + 32) = 0; *(_DWORD *)(result + 48) = 0; *(_DWORD *)(result + 20) = 0; *(_DWORD *)(result + 52) = 0; *(_DWORD *)(result + 28) = 0; *(_DWORD *)(result + 40) = 0; *(_WORD *)(result + 76) = 0; *(_BYTE *)(result + 78) = 0; *(_DWORD *)(result + 24) = 0; *(_DWORD *)(result + 60) = 0; *(_DWORD *)(result + 64) = 0; *(_DWORD *)(result + 68) = 0; *(_DWORD *)(result + 36) = 0; return result; } //----- (00767970) -------------------------------------------------------- int __cdecl sub_767970(int a1, _DWORD *a2) { int *v2; // esi v2 = a2; sub_76FDE0(a1, a2[3], 4 * a2[12], 0); sub_76FDE0(a1, v2[4], 4 * v2[14], 0); sub_76FDE0(a1, v2[2], 8 * v2[11], 0); sub_76FDE0(a1, v2[5], 4 * v2[13], 0); sub_76FDE0(a1, v2[6], 12 * v2[15], 0); sub_76FDE0(a1, v2[7], 8 * v2[10], 0); return sub_76FDE0(a1, (int)a2, 80, 0); } //----- (00767A10) -------------------------------------------------------- int __cdecl sub_767A10(int a1, int a2, int a3) { int v3; // edx int v4; // eax int v5; // ebx int v6; // edi _DWORD *v7; // ecx v3 = *(_DWORD *)(a1 + 60); v4 = 0; if ( v3 > 0 ) { v5 = *(_DWORD *)(a1 + 24); v6 = a2; v7 = (_DWORD *)(v5 + 8); while ( *(v7 - 1) <= a3 ) { if ( a3 < *v7 && !--v6 ) return *(_DWORD *)(v5 + 12 * v4) + 16; ++v4; v7 += 3; if ( v4 >= v3 ) return 0; } } return 0; } //----- (00767A60) -------------------------------------------------------- signed int __cdecl sub_767A60(int a1) { int *v1; // esi _BYTE *v2; // eax int v3; // ecx v1 = (int *)a1; v2 = (_BYTE *)(*(int (__cdecl **)(_DWORD, _DWORD, int *))(a1 + 8))(*(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 12), &a1); if ( !v2 || !a1 ) return -1; v3 = a1 - 1; v1[1] = (int)v2; *v1 = v3; LOBYTE(v3) = *v2; v1[1] = (int)(v2 + 1); return (unsigned __int8)v3; } //----- (00767AA0) -------------------------------------------------------- _DWORD *__cdecl sub_767AA0(int a1, _DWORD *a2, int a3, int a4) { _DWORD *result; // eax result = a2; a2[4] = a1; a2[2] = a3; a2[3] = a4; *a2 = 0; a2[1] = 0; return result; } //----- (00767AD0) -------------------------------------------------------- unsigned int __cdecl sub_767AD0(int a1, void *a2, int a3) { unsigned int v3; // ebx unsigned __int8 *v4; // eax int v5; // ecx int v6; // edx int v7; // eax size_t v8; // edi v3 = a3; if ( !a3 ) return 0; while ( *(_DWORD *)a1 ) { LABEL_7: v8 = *(_DWORD *)a1; if ( v3 <= *(_DWORD *)a1 ) v8 = v3; memcpy(a2, *(const void **)(a1 + 4), v8); *(_DWORD *)a1 -= v8; *(_DWORD *)(a1 + 4) += v8; a2 = (char *)a2 + v8; v3 -= v8; if ( !v3 ) return 0; } v4 = (unsigned __int8 *)(*(int (__cdecl **)(_DWORD, _DWORD, int *))(a1 + 8))( *(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 12), &a3); if ( v4 ) { if ( a3 ) { v5 = a3 - 1; *(_DWORD *)(a1 + 4) = v4; *(_DWORD *)a1 = v5; v6 = *v4; v7 = (int)(v4 + 1); *(_DWORD *)(a1 + 4) = v7; if ( v6 != -1 ) { *(_DWORD *)a1 = v5 + 1; *(_DWORD *)(a1 + 4) = v7 - 1; goto LABEL_7; } } } return v3; } //----- (00767B60) -------------------------------------------------------- int __cdecl sub_767B60(int a1, _DWORD *a2, unsigned int a3) { int v3; // esi unsigned int v4; // eax v3 = a3; v4 = a2[2]; if ( a3 > v4 ) { if ( a3 < 0x20 ) v3 = 32; if ( (unsigned int)(v3 + 1) > 0xFFFFFFFD ) sub_76FDC0(a1); *a2 = sub_76FDE0(a1, *a2, v4, v3); a2[2] = v3; } return *a2; } //----- (00767BB0) -------------------------------------------------------- int __usercall sub_767BB0@(int result@, _DWORD *a2@) { int v2; // edi bool v3; // zf int v4; // [esp+4h] [ebp-4h] v2 = result; if ( result ) { result = *(_DWORD *)(result + 12) + 1; v3 = a2[4] == 0; v4 = *(_DWORD *)(v2 + 12) + 1; if ( v3 ) { a2[4] = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))a2[1])(*a2, &v4, 4, a2[2]); result = v4; if ( !a2[4] ) { result = ((int (__cdecl *)(_DWORD, int, int, _DWORD))a2[1])(*a2, v2 + 16, v4, a2[2]); a2[4] = result; } } } else { v4 = 0; if ( !a2[4] ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))a2[1])(*a2, &v4, 4, a2[2]); a2[4] = result; } } return result; } //----- (00767C30) -------------------------------------------------------- int __usercall sub_767C30@(_DWORD *a1@, _DWORD *a2) { _DWORD *v2; // esi bool v3; // zf int result; // eax int v5; // edi int v6; // ebx int *v7; // edi int v8; // eax int v9; // eax int v10; // eax int v11; // ebx int i; // edi int v13; // [esp+Ch] [ebp-10h] __int64 v14; // [esp+10h] [ebp-Ch] char v15; // [esp+1Bh] [ebp-1h] v2 = a1; v3 = a1[4] == 0; result = (int)a2; v5 = a2[11]; v13 = v5; HIDWORD(v14) = v5; if ( v3 ) { result = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v2[1])(*v2, (char *)&v14 + 4, 4, v2[2]); v2[4] = result; } v6 = 0; if ( v5 > 0 ) { do { v7 = (int *)(a2[2] + 8 * v6); v8 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v8) = 3; v3 = v2[4] == 0; v15 = v8 & 0xF; if ( v3 ) v2[4] = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v2[1])(*v2, &v15, 1, v2[2]); v9 = v7[1]; if ( (v7[1] & 0x7FFFFF00) != 2146936064 ) LOBYTE(v9) = 3; v10 = (v9 & 0xF) - 1; if ( v10 ) { result = v10 - 2; if ( result ) { if ( !--result ) result = sub_767BB0(*v7, v2); goto LABEL_19; } v3 = v2[4] == 0; v14 = *(__int64 *)v7; if ( v3 ) { result = ((int (__cdecl *)(_DWORD, __int64 *, signed int, _DWORD))v2[1])(*v2, &v14, 8, v2[2]); LABEL_18: v2[4] = result; goto LABEL_19; } } else { v3 = v2[4] == 0; result = *(unsigned __int8 *)v7; v15 = *(_BYTE *)v7; if ( v3 ) { result = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v2[1])(*v2, &v15, 1, v2[2]); goto LABEL_18; } } LABEL_19: ++v6; } while ( v6 < v13 ); } v3 = v2[4] == 0; v11 = a2[14]; v13 = a2[14]; if ( v3 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v13, 4, v2[2]); v2[4] = result; } for ( i = 0; i < v11; ++i ) result = sub_768050(*(_DWORD *)(a2[4] + 4 * i), v2); return result; } //----- (00767D90) -------------------------------------------------------- int __usercall sub_767D90@(int a1@, _DWORD *a2@) { bool v2; // zf int result; // eax int i; // edi int v5; // [esp+0h] [ebp-Ch] int v6; // [esp+4h] [ebp-8h] char v7; // [esp+Bh] [ebp-1h] v2 = a2[4] == 0; result = *(_DWORD *)(a1 + 40); v6 = result; v5 = result; if ( v2 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))a2[1])(*a2, &v5, 4, a2[2]); a2[4] = result; } for ( i = 0; i < v6; ++i ) { v2 = a2[4] == 0; v7 = *(_BYTE *)(*(_DWORD *)(a1 + 28) + 8 * i + 4); if ( v2 ) { result = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))a2[1])(*a2, &v7, 1, a2[2]); a2[4] = result; } v2 = a2[4] == 0; v7 = *(_BYTE *)(*(_DWORD *)(a1 + 28) + 8 * i + 5); if ( v2 ) { result = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))a2[1])(*a2, &v7, 1, a2[2]); a2[4] = result; } } return result; } //----- (00767E20) -------------------------------------------------------- int __usercall sub_767E20@(_DWORD *a1@, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int result; // eax int v5; // edi bool v6; // zf int v7; // ebx int v8; // edi int v9; // ebx int v10; // edi int v11; // edi int v12; // ebx int v13; // edi int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] int v16; // [esp+14h] [ebp-8h] int v17; // [esp+18h] [ebp-4h] v2 = a1; if ( a1[3] ) v3 = 0; else v3 = a2[9]; result = sub_767BB0(v3, v2); if ( v2[3] ) v5 = 0; else v5 = a2[13]; v6 = v2[4] == 0; v7 = a2[5]; v16 = v5; if ( v6 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v16, 4, v2[2]); v2[4] = result; if ( !result ) { result = ((int (__cdecl *)(_DWORD, int, int, _DWORD))v2[1])(*v2, v7, 4 * v5, v2[2]); v2[4] = result; } } if ( v2[3] ) v8 = 0; else v8 = a2[15]; v6 = v2[4] == 0; v16 = v8; if ( v6 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v16, 4, v2[2]); v2[4] = result; } if ( v8 > 0 ) { v9 = 0; v16 = v8; while ( 1 ) { v10 = *(_DWORD *)(v9 + a2[6]); if ( v10 ) break; v17 = 0; if ( !v2[4] ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v17, 4, v2[2]); LABEL_23: v2[4] = result; } LABEL_24: v6 = v2[4] == 0; v15 = *(_DWORD *)(a2[6] + v9 + 4); if ( v6 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v15, 4, v2[2]); v2[4] = result; } v6 = v2[4] == 0; v14 = *(_DWORD *)(a2[6] + v9 + 8); if ( v6 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v14, 4, v2[2]); v2[4] = result; } v9 += 12; if ( !--v16 ) goto LABEL_29; } v6 = v2[4] == 0; v17 = *(_DWORD *)(v10 + 12) + 1; if ( !v6 ) goto LABEL_24; result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v17, 4, v2[2]); v2[4] = result; if ( result ) goto LABEL_24; result = ((int (__cdecl *)(_DWORD, int, int, _DWORD))v2[1])(*v2, v10 + 16, v17, v2[2]); goto LABEL_23; } LABEL_29: if ( v2[3] ) { v11 = 0; v17 = 0; } else { v17 = a2[10]; v11 = v17; } v6 = v2[4] == 0; v14 = v11; if ( v6 ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v14, 4, v2[2]); v2[4] = result; } v12 = 0; if ( v11 > 0 ) { while ( 1 ) { v13 = *(_DWORD *)(a2[7] + 8 * v12); if ( v13 ) break; v14 = 0; if ( !v2[4] ) { result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v14, 4, v2[2]); LABEL_41: v2[4] = result; } LABEL_42: if ( ++v12 >= v17 ) return result; } v6 = v2[4] == 0; v16 = *(_DWORD *)(v13 + 12) + 1; if ( !v6 ) goto LABEL_42; result = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v2[1])(*v2, &v16, 4, v2[2]); v2[4] = result; if ( result ) goto LABEL_42; result = ((int (__cdecl *)(_DWORD, int, int, _DWORD))v2[1])(*v2, v13 + 16, v16, v2[2]); goto LABEL_41; } return result; } //----- (00768050) -------------------------------------------------------- int __cdecl sub_768050(int a1, _DWORD *a2) { int v2; // ebx _DWORD *v3; // esi bool v4; // zf int v5; // edi int v6; // eax v2 = a1; v3 = a2; v4 = a2[4] == 0; a1 = *(_DWORD *)(a1 + 64); if ( v4 ) v3[4] = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))a2[1])(*a2, &a1, 4, a2[2]); v4 = v3[4] == 0; a1 = *(_DWORD *)(v2 + 68); if ( v4 ) v3[4] = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v3[1])(*v3, &a1, 4, v3[2]); v4 = v3[4] == 0; HIBYTE(a1) = *(_BYTE *)(v2 + 76); if ( v4 ) v3[4] = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v3[1])(*v3, (char *)&a1 + 3, 1, v3[2]); v4 = v3[4] == 0; HIBYTE(a1) = *(_BYTE *)(v2 + 77); if ( v4 ) v3[4] = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v3[1])(*v3, (char *)&a1 + 3, 1, v3[2]); v4 = v3[4] == 0; HIBYTE(a1) = *(_BYTE *)(v2 + 78); if ( v4 ) v3[4] = ((int (__cdecl *)(_DWORD, char *, signed int, _DWORD))v3[1])(*v3, (char *)&a1 + 3, 1, v3[2]); v4 = v3[4] == 0; v5 = *(_DWORD *)(v2 + 48); a2 = *(_DWORD **)(v2 + 12); a1 = v5; if ( v4 ) { v6 = ((int (__cdecl *)(_DWORD, int *, signed int, _DWORD))v3[1])(*v3, &a1, 4, v3[2]); v3[4] = v6; if ( !v6 ) v3[4] = ((int (__cdecl *)(_DWORD, _DWORD *, int, _DWORD))v3[1])(*v3, a2, 4 * v5, v3[2]); } sub_767C30(v3, (_DWORD *)v2); sub_767D90(v2, v3); return sub_767E20(v3, (_DWORD *)v2); } //----- (00768180) -------------------------------------------------------- int __cdecl sub_768180(int a1, int a2, int (__cdecl *a3)(int, char *, signed int, int), int a4, int a5) { int v6; // [esp+4h] [ebp-2Ch] int (__cdecl *v7)(int, char *, signed int, int); // [esp+8h] [ebp-28h] int v8; // [esp+Ch] [ebp-24h] int v9; // [esp+10h] [ebp-20h] int v10; // [esp+14h] [ebp-1Ch] char v11; // [esp+18h] [ebp-18h] v7 = a3; v6 = a1; v8 = a4; v9 = a5; v10 = 0; sub_775640((int)&v11); v10 = v7(v6, &v11, 18, v8); sub_768050(a2, &v6); return v10; } //----- (00768200) -------------------------------------------------------- signed int __cdecl sub_768200(_DWORD *a1) { sub_75B4C0(a1, -1001000); return 1; } //----- (00768220) -------------------------------------------------------- signed int __cdecl sub_768220(_DWORD *a1) { sub_75ED00(a1, 1); if ( !sub_75C590(a1, 1) ) sub_75BFE0((int)a1); return 1; } //----- (00768250) -------------------------------------------------------- signed int __cdecl sub_768250(_DWORD *a1) { int v1; // eax v1 = sub_75B570(a1, 2); if ( v1 && v1 != 5 ) sub_75EB40(a1, 2, (int)"nil or table expected"); sub_75B1F0((int)a1, 2); sub_75C9A0(a1, 1); return 1; } //----- (007682A0) -------------------------------------------------------- signed int __cdecl sub_7682A0(_DWORD *a1) { if ( sub_75B570(a1, 1) == 7 ) sub_75C680(a1, 1); else sub_75BFE0((int)a1); return 1; } //----- (007682E0) -------------------------------------------------------- signed int __cdecl sub_7682E0(_DWORD *a1) { if ( sub_75B570(a1, 1) == 2 ) sub_75EB40(a1, 1, (int)"full userdata expected, got light userdata"); sub_75ECA0(a1, 1, 7); if ( sub_75B570(a1, 2) > 0 ) sub_75ECA0(a1, 2, 5); sub_75B1F0((int)a1, 2); sub_75CAF0(a1, 1); return 1; } //----- (00768350) -------------------------------------------------------- int *__usercall sub_768350@(int a1@, _DWORD *a2@, void *a3) { if ( a2 == (_DWORD *)a1 ) { sub_75B4C0(a2, -2); sub_75B240(a2, -3); } else { sub_75B110(a1, (int)a2, 1); } return sub_75C770(a2, -2, a3); } //----- (007683A0) -------------------------------------------------------- signed int __cdecl sub_7683A0(_DWORD *a1) { signed int v1; // edi int v2; // eax signed int v3; // edi char *v4; // ebx int v5; // eax int v6; // edi int v8; // [esp+Ch] [ebp-70h] int v9; // [esp+10h] [ebp-6Ch] int v10; // [esp+14h] [ebp-68h] void *v11; // [esp+18h] [ebp-64h] void *v12; // [esp+1Ch] [ebp-60h] void *v13; // [esp+20h] [ebp-5Ch] void *v14; // [esp+24h] [ebp-58h] int v15; // [esp+28h] [ebp-54h] int v16; // [esp+2Ch] [ebp-50h] int v17; // [esp+30h] [ebp-4Ch] unsigned __int8 v18; // [esp+34h] [ebp-48h] unsigned __int8 v19; // [esp+35h] [ebp-47h] char v20; // [esp+36h] [ebp-46h] char v21; // [esp+37h] [ebp-45h] char v22; // [esp+38h] [ebp-44h] if ( sub_75B570(a1, 1) == 8 ) { v1 = 1; v9 = sub_75BE80(a1, 1); } else { v1 = 0; v9 = (int)a1; } v8 = v1 + 2; v2 = sub_75ED90(a1, v1 + 2, "flnStu", 0); v3 = v1 + 1; v4 = (char *)v2; if ( sub_75B690(a1, v3) ) { v5 = sub_75BA70(a1, v3, 0); v6 = v9; if ( !sub_766610(v9, v5, (int)&v10) ) { sub_75BFE0((int)a1); return 1; } } else { if ( sub_75B570(a1, v3) != 6 ) sub_75EB40(a1, v3, (int)"function or level expected"); sub_75C190((int)a1, ">%s", (int)v4); v4 = (char *)sub_75BC70(a1, -1, 0); sub_75B4C0(a1, v3); sub_75B110((int)a1, v9, 1); v6 = v9; } if ( !sub_767060(v6, v4, (int)&v10) ) sub_75EB40(a1, v8, (int)"invalid option"); sub_75C540((int)a1, 0, 2); if ( strchr(v4, 83) ) { sub_75C100((int)a1, v14); sub_75C770(a1, -2, "source"); sub_75C100((int)a1, &v22); sub_75C770(a1, -2, "short_src"); sub_75C040((int)a1, v16); sub_75C770(a1, -2, "linedefined"); sub_75C040((int)a1, v17); sub_75C770(a1, -2, "lastlinedefined"); sub_75C100((int)a1, v13); sub_75C770(a1, -2, "what"); } if ( strchr(v4, 108) ) { sub_75C040((int)a1, v15); sub_75C770(a1, -2, "currentline"); } if ( strchr(v4, 117) ) { sub_75C040((int)a1, v18); sub_75C770(a1, -2, "nups"); sub_75C040((int)a1, v19); sub_75C770(a1, -2, "nparams"); sub_75C250((int)a1, v20); sub_75C770(a1, -2, "isvararg"); } if ( strchr(v4, 110) ) { sub_75C100((int)a1, v11); sub_75C770(a1, -2, "name"); sub_75C100((int)a1, v12); sub_75C770(a1, -2, "namewhat"); } if ( strchr(v4, 116) ) { sub_75C250((int)a1, v21); sub_75C770(a1, -2, "istailcall"); } if ( strchr(v4, 76) ) sub_768350(v6, a1, "activelines"); if ( strchr(v4, 102) ) sub_768350(v6, a1, "func"); return 1; } //----- (007686A0) -------------------------------------------------------- signed int __cdecl sub_7686A0(_DWORD *a1) { signed int v1; // edi int v2; // ebx signed int v3; // eax signed int v4; // edi char *v5; // eax int v6; // eax char *v7; // edi int v9; // [esp+Ch] [ebp-6Ch] char v10; // [esp+10h] [ebp-68h] if ( sub_75B570(a1, 1) == 8 ) { v1 = 1; v2 = sub_75BE80(a1, 1); } else { v1 = 0; v2 = (int)a1; } v3 = sub_75EE90(a1, v1 + 2); v4 = v1 + 1; v9 = v3; if ( sub_75B570(a1, v4) == 6 ) { sub_75B4C0(a1, v4); v5 = (char *)sub_766700((int)a1, 0, v9); sub_75C100((int)a1, v5); } else { v6 = sub_75EE90(a1, v4); if ( !sub_766610(v2, v6, (int)&v10) ) sub_75EB40(a1, v4, (int)"level out of range"); v7 = (char *)sub_766700(v2, &v10, v9); if ( v7 ) { sub_75B110(v2, (int)a1, 1); sub_75C100((int)a1, v7); sub_75B4C0(a1, -2); return 2; } sub_75BFE0((int)a1); } return 1; } //----- (007687C0) -------------------------------------------------------- signed int __cdecl sub_7687C0(_DWORD *a1) { signed int v1; // edi int v2; // ebx int v3; // eax int v4; // eax char *v5; // eax char v7; // [esp+10h] [ebp-68h] if ( sub_75B570(a1, 1) == 8 ) { v1 = 1; v2 = sub_75BE80(a1, 1); } else { v1 = 0; v2 = (int)a1; } v3 = sub_75EE90(a1, v1 + 1); if ( !sub_766610(v2, v3, (int)&v7) ) sub_75EB40(a1, v1 + 1, (int)"level out of range"); sub_75ED00(a1, v1 + 3); sub_75B1F0((int)a1, v1 + 3); sub_75B110((int)a1, v2, 1); v4 = sub_75EE90(a1, v1 + 2); v5 = (char *)sub_766770(v2, (int)&v7, v4); sub_75C100((int)a1, v5); return 1; } //----- (007688A0) -------------------------------------------------------- CHAR *__cdecl sub_7688A0(_DWORD *a1) { signed int v1; // edi CHAR *result; // eax v1 = sub_75EE90(a1, 2); sub_75ECA0(a1, 1, 6); result = (CHAR *)sub_75D200(a1, 1, v1); if ( result ) { sub_75C100((int)a1, result); sub_75B2D0(a1, -2); result = (CHAR *)2; } return result; } //----- (007688F0) -------------------------------------------------------- CHAR *__cdecl sub_7688F0(_DWORD *a1) { signed int v1; // edi CHAR *result; // eax sub_75ED00(a1, 3); v1 = sub_75EE90(a1, 2); sub_75ECA0(a1, 1, 6); result = (CHAR *)sub_75D2F0(a1, 1, v1); if ( result ) { sub_75C100((int)a1, result); sub_75B2D0(a1, -1); result = (CHAR *)1; } return result; } //----- (00768950) -------------------------------------------------------- signed int __cdecl sub_768950(_DWORD *a1) { int v1; // edi int v2; // eax int v4; // [esp+8h] [ebp-68h] unsigned __int8 v5; // [esp+28h] [ebp-48h] v1 = sub_75EE90(a1, 2); sub_75ECA0(a1, 1, 6); sub_75B4C0(a1, 1); sub_767060((int)a1, ">u", (int)&v4); if ( v1 < 1 || v1 > v5 ) sub_75EB40(a1, 2, (int)"invalid upvalue index"); v2 = sub_75D430(a1, 1, v1); sub_75C270((int)a1, v2); return 1; } //----- (007689E0) -------------------------------------------------------- int __cdecl sub_7689E0(_DWORD *a1) { int v1; // ebx int v2; // edi int v4; // [esp+Ch] [ebp-68h] unsigned __int8 v5; // [esp+2Ch] [ebp-48h] v1 = sub_75EE90(a1, 2); sub_75ECA0(a1, 1, 6); sub_75B4C0(a1, 1); sub_767060((int)a1, ">u", (int)&v4); if ( v1 < 1 || v1 > v5 ) sub_75EB40(a1, 2, (int)"invalid upvalue index"); v2 = sub_75EE90(a1, 4); sub_75ECA0(a1, 3, 6); sub_75B4C0(a1, 3); sub_767060((int)a1, ">u", (int)&v4); if ( v2 < 1 || v2 > v5 ) sub_75EB40(a1, 4, (int)"invalid upvalue index"); if ( sub_75B610(a1, 1) ) sub_75EB40(a1, 1, (int)"Lua function expected"); if ( sub_75B610(a1, 3) ) sub_75EB40(a1, 3, (int)"Lua function expected"); sub_75D550((int)a1, 1, v1, 3, v2); return 0; } //----- (00768AF0) -------------------------------------------------------- int __cdecl sub_768AF0(_DWORD *a1, _DWORD *a2) { int result; // eax signed int v3; // eax sub_75E5D0(a1, 0xFFF0B9D8, "_HKEY"); sub_75C290((int)a1); sub_75C440(a1, -2); result = sub_75B570(a1, -1); if ( result == 6 ) { sub_75C100((int)a1, off_A0D508[*a2]); v3 = a2[5]; if ( v3 < 0 ) sub_75BFE0((int)a1); else sub_75C040((int)a1, v3); result = sub_75CBD0((int)a1, 2, 0, 0, 0); } return result; } // A0D508: using guessed type char *off_A0D508[5]; //----- (00768B80) -------------------------------------------------------- int __cdecl sub_768B80(_DWORD *a1) { signed int v1; // edi signed int v2; // ebx signed int v3; // edi int (__cdecl *v5)(_DWORD *, _DWORD *); // [esp+Ch] [ebp-10h] int v6; // [esp+10h] [ebp-Ch] int v7; // [esp+14h] [ebp-8h] char *v8; // [esp+18h] [ebp-4h] char *v9; // [esp+18h] [ebp-4h] if ( sub_75B570(a1, 1) == 8 ) { v1 = 1; v6 = sub_75BE80(a1, 1); } else { v1 = 0; v6 = (int)a1; } v2 = v1 + 1; if ( sub_75B570(a1, v1 + 1) > 0 ) { v9 = (char *)sub_75ED30(a1, v1 + 2, 0); sub_75ECA0(a1, v1 + 1, 6); v7 = sub_75EF50(a1, v1 + 3, 0); v5 = sub_768AF0; v3 = 0; if ( strchr(v9, 99) ) v3 = 1; if ( strchr(v9, 114) ) v3 |= 2u; if ( strchr(v9, 108) ) v3 |= 4u; if ( v7 > 0 ) v3 |= 8u; v8 = (char *)v3; } else { sub_75B1F0((int)a1, v1 + 1); v5 = 0; v8 = 0; v7 = 0; } if ( !sub_75E5D0(a1, 0xFFF0B9D8, "_HKEY") ) { sub_75C100((int)a1, "k"); sub_75C770(a1, -2, "__mode"); sub_75B4C0(a1, -1); sub_75C9A0(a1, -2); } sub_75C290(v6); sub_75B110(v6, (int)a1, 1); sub_75B4C0(a1, v2); sub_75C810(a1, -3); sub_7665A0(v6, (int)v5, (int)v8, v7); return 0; } //----- (00768CE0) -------------------------------------------------------- signed int __cdecl sub_768CE0(_DWORD *a1) { int v1; // edi char v2; // bl int (__cdecl *v3)(_DWORD *, _DWORD *); // eax signed int v4; // eax int v5; // eax char v7[8]; // [esp+8h] [ebp-Ch] if ( sub_75B570(a1, 1) == 8 ) v1 = sub_75BE80(a1, 1); else v1 = (int)a1; v2 = sub_7665F0(v1); v3 = (int (__cdecl *)(_DWORD *, _DWORD *))sub_7665E0(v1); if ( v3 && v3 != sub_768AF0 ) { sub_75C0B0((int)a1, "external hook", 0xDu); } else { sub_75E5D0(a1, 0xFFF0B9D8, "_HKEY"); sub_75C290(v1); sub_75B110(v1, (int)a1, 1); sub_75C440(a1, -2); sub_75B240(a1, -2); } v4 = 0; if ( v2 & 1 ) { v7[0] = 99; v4 = 1; } if ( v2 & 2 ) v7[v4++] = 114; if ( v2 & 4 ) v7[v4++] = 108; v7[v4] = 0; sub_75C100((int)a1, v7); v5 = sub_766600(v1); sub_75C040((int)a1, v5); return 3; } // 768CE0: using guessed type char var_C[8]; //----- (00768DE0) -------------------------------------------------------- int __cdecl sub_768DE0(_DWORD *a1) { FILE *v1; // eax FILE *v2; // eax FILE *v3; // eax int v4; // ST18_4 FILE *v5; // eax FILE *v6; // eax FILE *v7; // eax FILE *v8; // eax FILE *v9; // eax char v11; // [esp+4h] [ebp-100h] v1 = (FILE *)sub_7D6CEE(); fprintf(v1 + 2, "%s", "lua_debug> "); v2 = (FILE *)sub_7D6CEE(); fflush(v2 + 2); v3 = (FILE *)sub_7D6CEE(); if ( fgets(&v11, 250, v3) ) { do { if ( !strcmp(&v11, "cont\n") ) break; if ( sub_75E360((int)a1, (int)&v11, strlen(&v11), "=(debug command)", 0) || sub_75CC50((int)a1, 0, 0, 0, 0, 0) ) { v4 = sub_75BC70(a1, -1, 0); v5 = (FILE *)sub_7D6CEE(); fprintf(v5 + 2, "%s\n", v4); v6 = (FILE *)sub_7D6CEE(); fflush(v6 + 2); } sub_75B1F0((int)a1, 0); v7 = (FILE *)sub_7D6CEE(); fprintf(v7 + 2, "%s", "lua_debug> "); v8 = (FILE *)sub_7D6CEE(); fflush(v8 + 2); v9 = (FILE *)sub_7D6CEE(); } while ( fgets(&v11, 250, v9) ); } return 0; } //----- (00768F60) -------------------------------------------------------- signed int __cdecl sub_768F60(_DWORD *a1) { signed int v1; // edi _DWORD *v2; // ebx signed int result; // eax int v4; // eax int v5; // [esp+Ch] [ebp-8h] signed int v6; // [esp+10h] [ebp-4h] if ( sub_75B570(a1, 1) == 8 ) { v1 = 1; v2 = (_DWORD *)sub_75BE80(a1, 1); } else { v1 = 0; v2 = a1; } v6 = v1 + 1; v5 = sub_75BC70(a1, v1 + 1, 0); if ( v5 || sub_75B570(a1, v6) <= 0 ) { v4 = sub_75EF50(a1, v1 + 2, a1 == v2); sub_75D890((int)a1, v2, v5, v4); result = 1; } else { sub_75B4C0(a1, v6); result = 1; } return result; } //----- (00769010) -------------------------------------------------------- signed int __cdecl sub_769010(_DWORD *a1) { sub_75C540((int)a1, 0, 16); sub_75EF80(a1, (int)&off_A0D520, 0); return 1; } // A0D520: using guessed type char *off_A0D520; //----- (00769040) -------------------------------------------------------- signed int __cdecl sub_769040(_DWORD *a1) { double v1; // st7 v1 = sub_75EDF0(a1, 1); sub_75C000((int)a1, fabs(v1)); return 1; } //----- (00769070) -------------------------------------------------------- signed int __cdecl sub_769070(_DWORD *a1) { double v1; // st7 v1 = sin(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (007690A0) -------------------------------------------------------- signed int __cdecl sub_7690A0(_DWORD *a1) { double v1; // st7 void *v2; // ecx v1 = sub_75EDF0(a1, 1); sub_7DDA68(v2); sub_75C000((int)a1, v1); return 1; } //----- (007690D0) -------------------------------------------------------- signed int __cdecl sub_7690D0(_DWORD *a1) { double v1; // st7 v1 = cos(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (00769100) -------------------------------------------------------- signed int __cdecl sub_769100(_DWORD *a1) { double v1; // st7 v1 = sub_75EDF0(a1, 1); sub_7DDA72(); sub_75C000((int)a1, v1); return 1; } //----- (00769130) -------------------------------------------------------- signed int __cdecl sub_769130(_DWORD *a1) { double v1; // st7 v1 = tan(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (00769160) -------------------------------------------------------- signed int __cdecl sub_769160(_DWORD *a1) { double v1; // st7 v1 = sub_75EDF0(a1, 1); sub_7DDA79(); sub_75C000((int)a1, v1); return 1; } //----- (00769190) -------------------------------------------------------- signed int __cdecl sub_769190(_DWORD *a1) { double v1; // st7 v1 = asin(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (007691C0) -------------------------------------------------------- signed int __cdecl sub_7691C0(_DWORD *a1) { double v1; // st7 v1 = acos(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (007691F0) -------------------------------------------------------- signed int __cdecl sub_7691F0(_DWORD *a1) { double v1; // st7 v1 = atan(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (00769220) -------------------------------------------------------- signed int __cdecl sub_769220(_DWORD *a1) { double v1; // ST14_8 void *v2; // ecx v1 = sub_75EDF0(a1, 1); sub_75EDF0(a1, 2); sub_7DB3EA(v2); sub_75C000((int)a1, v1); return 1; } //----- (00769270) -------------------------------------------------------- signed int __cdecl sub_769270(_DWORD *a1) { double v1; // st7 double v2; // st7 v1 = sub_75EDF0(a1, 1); v2 = ceil(v1); sub_75C000((int)a1, v2); return 1; } //----- (007692A0) -------------------------------------------------------- signed int __cdecl sub_7692A0(_DWORD *a1) { double v1; // st7 double v2; // st7 v1 = sub_75EDF0(a1, 1); v2 = floor(v1); sub_75C000((int)a1, v2); return 1; } //----- (007692D0) -------------------------------------------------------- signed int __cdecl sub_7692D0(_DWORD *a1) { double v1; // ST14_8 double v2; // st7 v1 = sub_75EDF0(a1, 1); v2 = fmod(v1, sub_75EDF0(a1, 2)); sub_75C000((int)a1, v2); return 1; } //----- (00769320) -------------------------------------------------------- signed int __cdecl sub_769320(_DWORD *a1) { double v1; // st7 double v2; // ST10_8 double v4; // [esp+18h] [ebp-8h] v1 = sub_75EDF0(a1, 1); v2 = modf(v1, &v4); sub_75C000((int)a1, v4); sub_75C000((int)a1, v2); return 2; } //----- (00769370) -------------------------------------------------------- signed int __cdecl sub_769370(_DWORD *a1) { double v1; // st7 v1 = sqrt(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (007693A0) -------------------------------------------------------- signed int __cdecl sub_7693A0(_DWORD *a1) { double v1; // ST14_8 double v2; // st7 v1 = sub_75EDF0(a1, 1); v2 = pow(v1, sub_75EDF0(a1, 2)); sub_75C000((int)a1, v2); return 1; } //----- (007693F0) -------------------------------------------------------- signed int __cdecl sub_7693F0(_DWORD *a1) { double v1; // st7 long double v3; // [esp+Ch] [ebp-10h] long double v4; // [esp+14h] [ebp-8h] v4 = sub_75EDF0(a1, 1); if ( sub_75B570(a1, 2) > 0 ) { v3 = sub_75EDF0(a1, 2); if ( 10.0 == v3 ) v1 = log10(v4); else v1 = log(v4) / log(v3); } else { v1 = log(v4); } sub_75C000((int)a1, v1); return 1; } //----- (00769480) -------------------------------------------------------- signed int __cdecl sub_769480(_DWORD *a1) { double v1; // st7 v1 = exp(sub_75EDF0(a1, 1)); sub_75C000((int)a1, v1); return 1; } //----- (007694B0) -------------------------------------------------------- signed int __cdecl sub_7694B0(_DWORD *a1) { double v1; // st7 v1 = sub_75EDF0(a1, 1); sub_75C000((int)a1, v1 / 0.0174532925199433); return 1; } //----- (007694E0) -------------------------------------------------------- signed int __cdecl sub_7694E0(_DWORD *a1) { double v1; // st7 v1 = sub_75EDF0(a1, 1); sub_75C000((int)a1, v1 * 0.0174532925199433); return 1; } //----- (00769510) -------------------------------------------------------- signed int __cdecl sub_769510(_DWORD *a1) { double v1; // st7 double v2; // st7 int v4; // [esp+10h] [ebp-4h] v1 = sub_75EDF0(a1, 1); v2 = frexp(v1, &v4); sub_75C000((int)a1, v2); sub_75C040((int)a1, v4); return 2; } //----- (00769550) -------------------------------------------------------- signed int __cdecl sub_769550(_DWORD *a1) { double v1; // ST14_8 int v2; // eax double v3; // st7 v1 = sub_75EDF0(a1, 1); v2 = sub_75EE90(a1, 2); v3 = ldexp(v1, v2); sub_75C000((int)a1, v3); return 1; } //----- (007695A0) -------------------------------------------------------- signed int __cdecl sub_7695A0(_DWORD *a1) { int v1; // edi double v2; // st7 signed int i; // esi double v5; // [esp+14h] [ebp-8h] v1 = sub_75B1D0((int)a1); v2 = sub_75EDF0(a1, 1); v5 = v2; for ( i = 2; i <= v1; ++i ) { v2 = sub_75EDF0(a1, i); if ( v5 <= v2 ) v2 = v5; else v5 = v2; } sub_75C000((int)a1, v2); return 1; } //----- (00769610) -------------------------------------------------------- signed int __cdecl sub_769610(_DWORD *a1) { int v1; // edi double v2; // st7 signed int i; // esi double v5; // [esp+14h] [ebp-8h] v1 = sub_75B1D0((int)a1); v2 = sub_75EDF0(a1, 1); v5 = v2; for ( i = 2; i <= v1; ++i ) { v2 = sub_75EDF0(a1, i); if ( v5 >= v2 ) v2 = v5; else v5 = v2; } sub_75C000((int)a1, v2); return 1; } //----- (00769680) -------------------------------------------------------- signed int __cdecl sub_769680(_DWORD *a1) { int v1; // eax int v2; // eax double v3; // st7 double v4; // st7 double v5; // st7 double v7; // [esp+14h] [ebp-10h] double v8; // [esp+1Ch] [ebp-8h] v7 = (double)(rand() % 0x7FFF) / 32767.0; v1 = sub_75B1D0((int)a1); if ( v1 ) { v2 = v1 - 1; if ( v2 ) { if ( v2 != 1 ) sub_75DA80(a1, "wrong number of arguments"); v8 = sub_75EDF0(a1, 1); v3 = sub_75EDF0(a1, 2); if ( v3 < v8 ) sub_75EB40(a1, 2, (int)"interval is empty"); v4 = floor((v3 - v8 + 1.0) * v7) + v8; } else { v5 = sub_75EDF0(a1, 1); if ( v5 < 1.0 ) sub_75EB40(a1, 1, (int)"interval is empty"); v4 = floor(v5 * v7) + 1.0; } } else { v4 = v7; } sub_75C000((int)a1, v4); return 1; } //----- (00769790) -------------------------------------------------------- int __cdecl sub_769790(_DWORD *a1) { int v1; // eax v1 = sub_75EEF0(a1, 1); srand(v1); rand(); return 0; } //----- (007697B0) -------------------------------------------------------- signed int __cdecl sub_7697B0(_DWORD *a1) { sub_75C540((int)a1, 0, 27); sub_75EF80(a1, (int)&off_A0D7F8, 0); sub_75C000((int)a1, 3.141592653589793); sub_75C770(a1, -2, "pi"); sub_75C000((int)a1, dbl_ABA880); sub_75C770(a1, -2, "huge"); return 1; } // A0D7F8: using guessed type char *off_A0D7F8; // ABA880: using guessed type double dbl_ABA880; //----- (00769820) -------------------------------------------------------- signed int __cdecl sub_769820(_DWORD *a1) { int v1; // edi signed int v2; // esi signed int i; // ebx int v4; // eax v1 = sub_75B1D0((int)a1); v2 = 1; for ( i = -1; v2 <= v1; i &= v4 ) v4 = sub_75EEF0(a1, v2++); sub_75C060((int)a1, i); return 1; } //----- (00769870) -------------------------------------------------------- signed int __cdecl sub_769870(_DWORD *a1) { int v1; // edi signed int v2; // esi signed int i; // ebx int v4; // eax v1 = sub_75B1D0((int)a1); v2 = 1; for ( i = -1; v2 <= v1; i &= v4 ) v4 = sub_75EEF0(a1, v2++); sub_75C250((int)a1, i != 0); return 1; } //----- (007698D0) -------------------------------------------------------- signed int __cdecl sub_7698D0(_DWORD *a1) { signed int v1; // ebx int v2; // edi signed int i; // esi int v4; // eax v1 = 0; v2 = sub_75B1D0((int)a1); for ( i = 1; i <= v2; v1 |= v4 ) v4 = sub_75EEF0(a1, i++); sub_75C060((int)a1, v1); return 1; } //----- (00769920) -------------------------------------------------------- signed int __cdecl sub_769920(_DWORD *a1) { signed int v1; // ebx int v2; // edi signed int i; // esi int v4; // eax v1 = 0; v2 = sub_75B1D0((int)a1); for ( i = 1; i <= v2; v1 ^= v4 ) v4 = sub_75EEF0(a1, i++); sub_75C060((int)a1, v1); return 1; } //----- (00769970) -------------------------------------------------------- signed int __cdecl sub_769970(_DWORD *a1) { int v1; // eax v1 = sub_75EEF0(a1, 1); sub_75C060((int)a1, ~v1); return 1; } //----- (007699A0) -------------------------------------------------------- signed int __cdecl sub_7699A0(_DWORD *a1) { signed int v1; // esi unsigned int v2; // eax int v3; // esi v1 = sub_75EE90(a1, 2); v2 = sub_75EEF0(a1, 1); if ( v1 < 0 ) { v3 = -v1; if ( v3 < 32 ) { sub_75C060((int)a1, v2 >> v3); return 1; } goto LABEL_5; } if ( v1 >= 32 ) { LABEL_5: sub_75C060((int)a1, 0); return 1; } sub_75C060((int)a1, v2 << v1); return 1; } //----- (00769A10) -------------------------------------------------------- signed int __cdecl sub_769A10(_DWORD *a1) { signed int v1; // esi unsigned int v2; // eax int v3; // esi int v4; // esi v1 = sub_75EE90(a1, 2); v2 = sub_75EEF0(a1, 1); v3 = -v1; if ( v3 < 0 ) { v4 = -v3; if ( v4 < 32 ) { sub_75C060((int)a1, v2 >> v4); return 1; } goto LABEL_5; } if ( v3 >= 32 ) { LABEL_5: sub_75C060((int)a1, 0); return 1; } sub_75C060((int)a1, v2 << v3); return 1; } //----- (00769A80) -------------------------------------------------------- signed int __cdecl sub_769A80(_DWORD *a1) { unsigned int v1; // esi signed int v2; // eax int v4; // ecx v1 = sub_75EEF0(a1, 1); v2 = sub_75EE90(a1, 2); if ( v2 < 0 || (v1 & 0x80000000) == 0 ) { v4 = -v2; if ( -v2 >= 0 ) { if ( v4 < 32 ) { sub_75C060((int)a1, v1 << v4); return 1; } } else if ( v2 < 32 ) { sub_75C060((int)a1, v1 >> v2); return 1; } sub_75C060((int)a1, 0); return 1; } if ( v2 < 32 ) sub_75C060((int)a1, ~(0xFFFFFFFF >> v2) | (v1 >> v2)); else sub_75C060((int)a1, -1); return 1; } //----- (00769B30) -------------------------------------------------------- signed int __cdecl sub_769B30(_DWORD *a1) { char v1; // si int v2; // eax v1 = sub_75EE90(a1, 2) & 0x1F; v2 = sub_75EEF0(a1, 1); sub_75C060((int)a1, __ROL4__(v2, v1)); return 1; } //----- (00769B70) -------------------------------------------------------- signed int __cdecl sub_769B70(_DWORD *a1) { int v1; // esi int v2; // eax v1 = -sub_75EE90(a1, 2) & 0x1F; v2 = sub_75EEF0(a1, 1); sub_75C060((int)a1, __ROL4__(v2, v1)); return 1; } //----- (00769BB0) -------------------------------------------------------- signed int __usercall sub_769BB0@(int a1@, _DWORD *a2@, signed int *a3) { signed int v3; // edi signed int v4; // eax _DWORD *v6; // [esp+0h] [ebp-14h] signed int v7; // [esp+4h] [ebp-10h] v3 = sub_75EE90(v6, v7); v4 = sub_75EF50(a2, a1 + 1, 1); if ( v3 < 0 ) sub_75EB40(a2, a1, (int)"field cannot be negative"); if ( v4 <= 0 ) sub_75EB40(a2, a1 + 1, (int)"width must be positive"); if ( v4 + v3 > 32 ) sub_75DA80(a2, "trying to access non-existent bits"); *a3 = v4; return v3; } //----- (00769C40) -------------------------------------------------------- signed int __cdecl sub_769C40(_DWORD *a1) { unsigned int v1; // edi char v2; // al int v4; // [esp+Ch] [ebp-4h] v1 = sub_75EEF0(a1, 1); v2 = sub_769BB0(2, a1, &v4); sub_75C060((int)a1, (v1 >> v2) & ~(-2 << (v4 - 1))); return 1; } //----- (00769C90) -------------------------------------------------------- signed int __cdecl sub_769C90(_DWORD *a1) { int v1; // edi int v2; // ST28_4 char v3; // al int v5; // [esp+10h] [ebp-4h] v1 = sub_75EEF0(a1, 1); v2 = sub_75EEF0(a1, 2); v3 = sub_769BB0(3, a1, &v5); sub_75C060((int)a1, ((v2 & ~(-2 << (v5 - 1))) << v3) | v1 & ~(~(-2 << (v5 - 1)) << v3)); return 1; } //----- (00769D00) -------------------------------------------------------- signed int __cdecl sub_769D00(_DWORD *a1) { sub_75C540((int)a1, 0, 12); sub_75EF80(a1, (int)&off_A0D988, 0); return 1; } // A0D988: using guessed type char *off_A0D988; //----- (00769D30) -------------------------------------------------------- signed int __cdecl sub_769D30(_DWORD *a1) { int v2; // [esp+4h] [ebp-4h] sub_75ED30(a1, 1, &v2); sub_75C040((int)a1, v2); return 1; } //----- (00769D60) -------------------------------------------------------- signed int __cdecl sub_769D60(_DWORD *a1) { int v1; // eax unsigned int v2; // esi signed int v3; // eax unsigned int v4; // esi unsigned int v5; // ebx unsigned int v6; // eax int v8; // [esp+8h] [ebp-8h] unsigned int v9; // [esp+Ch] [ebp-4h] v1 = sub_75ED30(a1, 1, &v9); v2 = v9; v8 = v1; v3 = sub_75EE90(a1, 2); if ( v3 < 0 ) { if ( -v3 <= v2 ) v4 = v3 + v2 + 1; else v4 = 0; } else { v4 = v3; } v5 = v9; v6 = sub_75EF50(a1, 3, -1); if ( (v6 & 0x80000000) != 0 ) { if ( -v6 <= v5 ) v6 += v5 + 1; else v6 = 0; } if ( v4 < 1 ) v4 = 1; if ( v6 > v9 ) v6 = v9; if ( v4 > v6 ) sub_75C0B0((int)a1, (void *)&byte_9A8050, 0); else sub_75C0B0((int)a1, (void *)(v4 + v8 - 1), v6 - v4 + 1); return 1; } //----- (00769E20) -------------------------------------------------------- signed int __cdecl sub_769E20(_DWORD *a1) { int v1; // edi int v2; // eax int v3; // edx unsigned int v4; // ecx unsigned int v6; // [esp+8h] [ebp-218h] char v7; // [esp+Ch] [ebp-214h] v1 = sub_75ED30(a1, 1, &v6); v2 = sub_75DF40((int)a1, (int)&v7, v6); v3 = v6; v4 = 0; if ( v6 ) { do { *(_BYTE *)(v4 + v2) = *(_BYTE *)(v3 - v4 + v1 - 1); v3 = v6; ++v4; } while ( v4 < v6 ); } sub_75DE60(&v7, v3); return 1; } //----- (00769EB0) -------------------------------------------------------- signed int __cdecl sub_769EB0(_DWORD *a1) { int v1; // ebx int v2; // eax int v3; // ecx unsigned int v4; // edi _BYTE *v5; // esi int v6; // ebx unsigned int v8; // [esp+Ch] [ebp-218h] char v9; // [esp+10h] [ebp-214h] v1 = sub_75ED30(a1, 1, &v8); v2 = sub_75DF40((int)a1, (int)&v9, v8); v3 = v8; v4 = 0; if ( v8 ) { v5 = (_BYTE *)v2; v6 = v1 - v2; do { *v5 = tolower((unsigned __int8)v5[v6]); v3 = v8; ++v4; ++v5; } while ( v4 < v8 ); } sub_75DE60(&v9, v3); return 1; } //----- (00769F50) -------------------------------------------------------- signed int __cdecl sub_769F50(_DWORD *a1) { int v1; // ebx int v2; // eax int v3; // ecx unsigned int v4; // edi _BYTE *v5; // esi int v6; // ebx unsigned int v8; // [esp+Ch] [ebp-218h] char v9; // [esp+10h] [ebp-214h] v1 = sub_75ED30(a1, 1, &v8); v2 = sub_75DF40((int)a1, (int)&v9, v8); v3 = v8; v4 = 0; if ( v8 ) { v5 = (_BYTE *)v2; v6 = v1 - v2; do { *v5 = toupper((unsigned __int8)v5[v6]); v3 = v8; ++v4; ++v5; } while ( v4 < v8 ); } sub_75DE60(&v9, v3); return 1; } //----- (00769FF0) -------------------------------------------------------- signed int __cdecl sub_769FF0(_DWORD *a1) { signed int v1; // ebx signed int result; // eax size_t v3; // edi char *v4; // esi int v5; // ebx void *v6; // [esp+10h] [ebp-224h] void *v7; // [esp+14h] [ebp-220h] size_t v8; // [esp+18h] [ebp-21Ch] size_t v9; // [esp+1Ch] [ebp-218h] char v10; // [esp+20h] [ebp-214h] v7 = (void *)sub_75ED30(a1, 1, &v9); v1 = sub_75EE90(a1, 2); v6 = (void *)sub_75ED90(a1, 3, &byte_9A8050, &v8); if ( v1 > 0 ) { if ( v9 + v8 < v9 || v9 + v8 >= 0x7FFFFFFFu / v1 ) sub_75DA80(a1, "resulting string too large"); v3 = v9 * v1 + v8 * (v1 - 1); v4 = (char *)sub_75DF40((int)a1, (int)&v10, v3); if ( v1 > 1 ) { v5 = v1 - 1; do { memcpy(v4, v7, v9); v4 += v9; if ( v8 ) { memcpy(v4, v6, v8); v4 += v8; } --v5; } while ( v5 ); } memcpy(v4, v7, v9); sub_75DE60(&v10, v3); result = 1; } else { sub_75C0B0((int)a1, (void *)&byte_9A8050, 0); result = 1; } return result; } //----- (0076A170) -------------------------------------------------------- int __cdecl sub_76A170(_DWORD *a1) { int v1; // eax unsigned int v2; // esi signed int v3; // eax unsigned int v4; // ebx unsigned int v5; // esi unsigned int v6; // eax int v8; // esi int v9; // edi int v10; // ebx int v11; // [esp+Ch] [ebp-8h] unsigned int v12; // [esp+10h] [ebp-4h] v1 = sub_75ED30(a1, 1, &v12); v2 = v12; v11 = v1; v3 = sub_75EF50(a1, 2, 1); if ( v3 < 0 ) { if ( -v3 <= v2 ) v4 = v3 + v2 + 1; else v4 = 0; } else { v4 = v3; } v5 = v12; v6 = sub_75EF50(a1, 3, v4); if ( (v6 & 0x80000000) != 0 ) { if ( -v6 <= v5 ) v6 += v5 + 1; else v6 = 0; } if ( v4 < 1 ) v4 = 1; if ( v6 > v12 ) v6 = v12; if ( v4 > v6 ) return 0; v8 = v6 - v4 + 1; if ( v6 + 1 <= v6 ) sub_75DA80(a1, "string slice too long"); sub_75DCD0(a1, v6 - v4 + 1, (int)"string slice too long"); v9 = 0; if ( v8 > 0 ) { v10 = v4 + v11 - 1; do sub_75C040((int)a1, *(unsigned __int8 *)(v10 + v9++)); while ( v9 < v8 ); } return v8; } //----- (0076A250) -------------------------------------------------------- signed int __cdecl sub_76A250(_DWORD *a1) { int v1; // ebx signed int v2; // esi signed int v3; // eax int i; // [esp+Ch] [ebp-21Ch] char v6; // [esp+14h] [ebp-214h] v1 = sub_75B1D0((int)a1); v2 = 1; for ( i = sub_75DF40((int)a1, (int)&v6, v1); v2 <= v1; ++v2 ) { v3 = sub_75EE90(a1, v2); if ( (unsigned __int8)v3 != v3 ) sub_75EB40(a1, v2, (int)"value out of range"); *(_BYTE *)(i + v2 - 1) = v3; } sub_75DE60(&v6, v1); return 1; } //----- (0076A300) -------------------------------------------------------- int __cdecl sub_76A300(int a1, void *a2, size_t a3, int a4) { sub_75DDB0(a4, a2, a3); return 0; } //----- (0076A320) -------------------------------------------------------- signed int __cdecl sub_76A320(_DWORD *a1) { char v2; // [esp+4h] [ebp-214h] sub_75ECA0(a1, 1, 6); sub_75B1F0((int)a1, 1); sub_75DF10((int)a1, &v2); if ( sub_75CDD0((int)a1, (int (__cdecl *)(int, char *, signed int, int))sub_76A300, (int)&v2) ) sub_75DA80(a1, "unable to dump given function"); sub_75DE20((int)&v2); return 1; } //----- (0076A3B0) -------------------------------------------------------- int __usercall sub_76A3B0@(char *a1@, int a2@) { char *v2; // esi int v3; // eax char *v4; // esi int result; // eax char v6; // cl v2 = a1; v3 = *a1; v4 = v2 + 1; if ( v3 == 37 ) { if ( v4 == *(char **)(a2 + 12) ) sub_75DA80(*(_DWORD **)(a2 + 16), "malformed pattern (ends with '%%')"); result = (int)(v4 + 1); } else if ( v3 == 91 ) { if ( *v4 == 94 ) ++v4; do { if ( v4 == *(char **)(a2 + 12) ) sub_75DA80(*(_DWORD **)(a2 + 16), "malformed pattern (missing ']')"); v6 = *v4++; if ( v6 == 37 && (unsigned int)v4 < *(_DWORD *)(a2 + 12) ) ++v4; } while ( *v4 != 93 ); result = (int)(v4 + 1); } else { result = (int)v4; } return result; } //----- (0076A420) -------------------------------------------------------- BOOL __usercall sub_76A420@(int a1@, int a2@) { int v2; // esi int v3; // esi BOOL result; // eax int v5; // [esp+0h] [ebp-8h] v2 = a1; switch ( tolower(v5) ) { case 97: v3 = isalpha(v2); goto LABEL_13; case 99: v3 = iscntrl(v2); goto LABEL_13; case 100: v3 = isdigit(v2); goto LABEL_13; case 103: v3 = isgraph(v2); goto LABEL_13; case 108: v3 = islower(v2); goto LABEL_13; case 112: v3 = ispunct(v2); goto LABEL_13; case 115: v3 = isspace(v2); goto LABEL_13; case 117: v3 = isupper(v2); goto LABEL_13; case 119: v3 = isalnum(v2); goto LABEL_13; case 120: v3 = isxdigit(v2); goto LABEL_13; case 122: v3 = v2 == 0; LABEL_13: if ( islower(a2) ) result = v3; else result = v3 == 0; break; default: result = a2 == v2; break; } return result; } //----- (0076A540) -------------------------------------------------------- BOOL __usercall sub_76A540@(int a1@, int a2@, unsigned int a3) { int v3; // edi unsigned int v4; // edx unsigned __int8 *v5; // edi unsigned int v6; // eax int v7; // esi int v8; // esi int v9; // ecx int v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] signed int v13; // [esp+10h] [ebp-4h] v3 = a1; v13 = 1; if ( *(_BYTE *)(a1 + 1) == 94 ) { v13 = 0; v3 = a1 + 1; } v4 = a3; v5 = (unsigned __int8 *)(v3 + 1); if ( (unsigned int)v5 < a3 ) { v6 = (unsigned int)(v5 + 2); do { if ( *v5 == 37 ) { v7 = (v5++)[1]; v11 = v6 + 1; v12 = v7; switch ( tolower(v7) ) { case 97: v8 = isalpha(a2); goto LABEL_18; case 99: v8 = iscntrl(a2); goto LABEL_18; case 100: v8 = isdigit(a2); goto LABEL_18; case 103: v8 = isgraph(a2); goto LABEL_18; case 108: v8 = islower(a2); goto LABEL_18; case 112: v8 = ispunct(a2); goto LABEL_18; case 115: v8 = isspace(a2); goto LABEL_18; case 117: v8 = isupper(a2); goto LABEL_18; case 119: v8 = isalnum(a2); goto LABEL_18; case 120: v8 = isxdigit(a2); goto LABEL_18; case 122: v8 = a2 == 0; LABEL_18: if ( !islower(v12) ) v8 = v8 == 0; break; default: v8 = v7 == a2; break; } if ( v8 ) return v13; v6 = v11; v4 = a3; } else if ( v5[1] != 45 || v6 >= v4 ) { if ( *v5 == a2 ) return v13; } else { v9 = *v5; v5 += 2; v6 += 2; if ( v9 <= a2 && a2 <= *v5 ) return v13; } ++v5; ++v6; } while ( (unsigned int)v5 < v4 ); } return v13 == 0; } //----- (0076A700) -------------------------------------------------------- int __usercall sub_76A700@(char *a1@, _BYTE *a2@, int a3@) { _BYTE *v3; // esi unsigned int v4; // ecx char *v5; // esi int v6; // edx signed int i; // edi int v8; // eax int v10; // [esp+8h] [ebp-4h] v3 = a2; if ( (unsigned int)a1 >= *(_DWORD *)(a3 + 12) - 1 ) sub_75DA80(*(_DWORD **)(a3 + 16), "malformed pattern (missing arguments to '%%b')"); if ( *a2 == *a1 ) { v4 = *(_DWORD *)(a3 + 8); v5 = v3 + 1; v10 = *a1; v6 = a1[1]; for ( i = 1; (unsigned int)v5 < v4; ++v5 ) { v8 = *v5; if ( v8 == v6 ) { if ( !--i ) return (int)(v5 + 1); } else if ( v8 == v10 ) { ++i; } } } return 0; } //----- (0076A770) -------------------------------------------------------- int __cdecl sub_76A770(int a1, unsigned __int8 *a2, unsigned __int8 *a3, int a4) { unsigned __int8 *v4; // esi unsigned __int8 v5; // al int v6; // ebx BOOL v7; // eax int result; // eax int v9; // [esp+Ch] [ebp-4h] v4 = a2; v9 = 0; while ( (unsigned int)v4 < *(_DWORD *)(a1 + 8) ) { v5 = *a3; v6 = *v4; if ( *a3 == 37 ) { v7 = sub_76A420(*v4, a3[1]); } else { if ( v5 == 46 ) goto LABEL_10; if ( v5 == 91 ) v7 = sub_76A540((int)a3, v6, a4 - 1); else v7 = v5 == v6; } if ( !v7 ) break; LABEL_10: ++v9; ++v4; } if ( v9 < 0 ) return 0; while ( 1 ) { result = sub_76A9E0(a1, &a2[v9], (char *)(a4 + 1)); if ( result ) break; if ( --v9 < 0 ) return 0; } return result; } //----- (0076A810) -------------------------------------------------------- int __usercall sub_76A810@(unsigned __int8 *a1@, int a2, unsigned __int8 *a3, int a4) { int v4; // ebx int v5; // edi unsigned __int8 *v6; // esi int result; // eax unsigned __int8 v8; // al int v9; // ecx BOOL v10; // eax v4 = a4; v5 = a2; v6 = a1; for ( result = sub_76A9E0(a2, a1, (char *)(a4 + 1)); !result; result = sub_76A9E0(v5, ++v6, (char *)(v4 + 1)) ) { if ( (unsigned int)v6 >= *(_DWORD *)(v5 + 8) ) return 0; v8 = *a3; v9 = *v6; if ( *a3 == 37 ) { v10 = sub_76A420(*v6, a3[1]); } else { if ( v8 == 46 ) continue; if ( v8 == 91 ) { v10 = sub_76A540((int)a3, v9, v4 - 1); v4 = a4; } else { v10 = v8 == v9; } } if ( !v10 ) return 0; v5 = a2; } return result; } //----- (0076A8A0) -------------------------------------------------------- int __usercall sub_76A8A0@(int a1@, int a2@, int a3, int a4) { signed int v4; // edi int result; // eax v4 = *(_DWORD *)(a2 + 20); if ( v4 >= 32 ) sub_75DA80(*(_DWORD **)(a2 + 16), "too many captures"); *(_DWORD *)(a2 + 8 * v4 + 24) = a1; *(_DWORD *)(a2 + 8 * v4 + 28) = a4; *(_DWORD *)(a2 + 20) = v4 + 1; result = sub_76A9E0(a2, (unsigned __int8 *)a1, (char *)a3); if ( !result ) --*(_DWORD *)(a2 + 20); return result; } //----- (0076A8F0) -------------------------------------------------------- int __usercall sub_76A8F0@(int a1@, int a2@, int a3) { int v3; // eax _DWORD *v4; // ecx int v5; // edi int result; // eax v3 = *(_DWORD *)(a2 + 20) - 1; if ( v3 < 0 ) LABEL_5: sub_75DA80(*(_DWORD **)(a2 + 16), "invalid pattern capture"); v4 = (_DWORD *)(a2 + 8 * v3 + 28); while ( *v4 != -1 ) { v4 -= 2; if ( --v3 < 0 ) goto LABEL_5; } v5 = v3; *(_DWORD *)(a2 + 8 * v3 + 28) = a1 - *(_DWORD *)(a2 + 8 * v3 + 24); result = sub_76A9E0(a2, (unsigned __int8 *)a1, (char *)a3); if ( !result ) *(_DWORD *)(a2 + 8 * v5 + 28) = -1; return result; } //----- (0076A950) -------------------------------------------------------- int __usercall sub_76A950@(int a1@, int a2@, _BYTE *a3@) { int v3; // eax unsigned int v4; // edi _BYTE *v5; // esi unsigned int v6; // ecx _BYTE *v7; // edx v3 = a1 - 49; if ( v3 < 0 || v3 >= *(_DWORD *)(a2 + 20) || *(_DWORD *)(a2 + 8 * v3 + 28) == -1 ) sub_75DA80(*(_DWORD **)(a2 + 16), "invalid capture index %%%d", v3 + 1); v4 = *(_DWORD *)(a2 + 8 * v3 + 28); if ( *(_DWORD *)(a2 + 8) - (signed int)a3 >= v4 ) { v5 = *(_BYTE **)(a2 + 8 * v3 + 24); v6 = *(_DWORD *)(a2 + 8 * v3 + 28); v7 = a3; if ( v4 < 4 ) { LABEL_9: if ( !v6 || *v7 == *v5 && (v6 <= 1 || v7[1] == v5[1] && (v6 <= 2 || v7[2] == v5[2])) ) return (int)&a3[v4]; } else { while ( *(_DWORD *)v5 == *(_DWORD *)v7 ) { v6 -= 4; v7 += 4; v5 += 4; if ( v6 < 4 ) goto LABEL_9; } } } return 0; } //----- (0076A9E0) -------------------------------------------------------- int __cdecl sub_76A9E0(int a1, unsigned __int8 *a2, char *a3) { int v3; // edi int v4; // eax char *v5; // esi int v6; // eax unsigned __int8 *v7; // ecx int v8; // edi char *v9; // ebx unsigned __int8 v10; // al int v11; // edx BOOL v12; // eax unsigned __int8 v13; // al char *v14; // esi int v15; // eax unsigned __int8 v16; // cl unsigned int v17; // edi char v18; // al int v19; // eax int result; // eax signed int v21; // ecx int v22; // [esp-Ch] [ebp-14h] int v23; // [esp-8h] [ebp-10h] char *v24; // [esp+18h] [ebp+10h] char *v25; // [esp+18h] [ebp+10h] v3 = a1; v4 = (*(_DWORD *)a1)--; if ( !v4 ) sub_75DA80(*(_DWORD **)(a1 + 16), "pattern too complex"); v5 = a3; if ( a3 == *(char **)(a1 + 12) ) goto LABEL_51; while ( 2 ) { switch ( *v5 ) { case 36: if ( v5 + 1 != *(char **)(v3 + 12) ) goto LABEL_6; v21 = a2 != *(unsigned __int8 **)(v3 + 8) ? 0 : (unsigned int)a2; ++*(_DWORD *)v3; return v21; case 37: v13 = v5[1]; switch ( v13 ) { case 48u: case 49u: case 50u: case 51u: case 52u: case 53u: case 54u: case 55u: case 56u: case 57u: a2 = (unsigned __int8 *)sub_76A950(v13, a1, a2); if ( !a2 ) goto LABEL_50; v5 += 2; goto LABEL_37; case 98u: a2 = (unsigned __int8 *)sub_76A700(v5 + 2, a2, v3); if ( a2 ) { v5 += 4; LABEL_37: v3 = a1; if ( v5 == *(char **)(a1 + 12) ) { ++*(_DWORD *)a1; return (int)a2; } continue; } LABEL_50: v3 = a1; LABEL_51: ++*(_DWORD *)v3; return (int)a2; case 102u: v14 = v5 + 2; if ( *v14 != 91 ) sub_75DA80(*(_DWORD **)(v3 + 16), "missing '[' after '%%f' in pattern"); v15 = sub_76A3B0(v14, v3); v25 = (char *)v15; if ( a2 == *(unsigned __int8 **)(a1 + 4) ) v16 = 0; else v16 = *(a2 - 1); v17 = v15 - 1; if ( sub_76A540((int)v14, v16, v15 - 1) || !sub_76A540((int)v14, *a2, v17) ) goto LABEL_45; v5 = v25; goto LABEL_37; default: goto LABEL_6; } case 40: if ( v5[1] == 41 ) { v23 = -2; v22 = (int)(v5 + 2); } else { v23 = -1; v22 = (int)(v5 + 1); } result = sub_76A8A0((int)a2, a1, v22, v23); ++*(_DWORD *)a1; return result; case 41: result = sub_76A8F0((int)a2, a1, (int)(v5 + 1)); ++*(_DWORD *)a1; return result; default: LABEL_6: v6 = sub_76A3B0(v5, v3); v7 = a2; v8 = a1; v9 = (char *)v6; v24 = (char *)v6; if ( (unsigned int)a2 >= *(_DWORD *)(a1 + 8) ) goto LABEL_27; v10 = *v5; v11 = *a2; if ( *v5 == 37 ) { v12 = sub_76A420(*a2, (unsigned __int8)v5[1]); } else { if ( v10 == 46 ) goto LABEL_32; if ( v10 == 91 ) { v12 = sub_76A540((int)v5, v11, (unsigned int)(v9 - 1)); v9 = v24; } else { v12 = v10 == v11; } } v7 = a2; if ( v12 ) { v8 = a1; LABEL_32: switch ( *v9 ) { case 42: goto LABEL_47; case 43: ++v7; LABEL_47: result = sub_76A770(v8, v7, (unsigned __int8 *)v5, (int)v9); ++*(_DWORD *)a1; return result; case 45: v19 = sub_76A810(v7, v8, (unsigned __int8 *)v5, (int)v9); goto LABEL_49; case 63: v19 = sub_76A9E0(v8, v7 + 1, ++v9); if ( !v19 ) goto LABEL_36; LABEL_49: a2 = (unsigned __int8 *)v19; goto LABEL_50; default: a2 = v7 + 1; LABEL_36: v5 = v9; break; } goto LABEL_37; } LABEL_27: v18 = *v9; if ( *v9 != 42 && v18 != 63 && v18 != 45 ) { LABEL_45: ++*(_DWORD *)a1; return 0; } v5 = v9 + 1; goto LABEL_37; } } } //----- (0076AD10) -------------------------------------------------------- char *__usercall sub_76AD10@(size_t a1@, void *a2, size_t a3, int a4) { char *result; // eax unsigned int v5; // ebx int v6; // edi _BYTE *v7; // edx unsigned int v8; // ecx _BYTE *v9; // esi bool v10; // zf size_t v11; // [esp+10h] [ebp+Ch] if ( !a1 ) return (char *)a2; if ( a1 > a3 ) return 0; v5 = a1 - 1; v11 = a3 - (a1 - 1); if ( v11 ) { do { result = (char *)memchr(a2, *(char *)a4, v11); if ( !result ) break; v6 = (int)(result + 1); v7 = (_BYTE *)(a4 + 1); v8 = v5; v9 = result + 1; if ( v5 < 4 ) { LABEL_10: if ( !v8 || *v7 == *v9 && (v8 <= 1 || v7[1] == v9[1] && (v8 <= 2 || v7[2] == v9[2])) ) return result; } else { while ( *(_DWORD *)v9 == *(_DWORD *)v7 ) { v8 -= 4; v7 += 4; v9 += 4; if ( v8 < 4 ) goto LABEL_10; } } v10 = (char *)a2 + v11 - v6 == 0; v11 += (size_t)a2 - v6; a2 = result + 1; } while ( !v10 ); } return 0; } //----- (0076ADC0) -------------------------------------------------------- int __usercall sub_76ADC0@(int a1@, void *a2@, int a3@, _DWORD *a4@) { int result; // eax int v5; // ebx if ( a3 < a4[5] ) { v5 = a4[2 * a3 + 7]; if ( v5 == -1 ) sub_75DA80((_DWORD *)a4[4], "unfinished capture"); if ( v5 == -2 ) result = sub_75C040(a4[4], a4[2 * a3 + 6] - a4[1] + 1); else result = sub_75C0B0(a4[4], (void *)a4[2 * a3 + 6], a4[2 * a3 + 7]); } else { if ( a3 ) sub_75DA80((_DWORD *)a4[4], "invalid capture index"); result = sub_75C0B0(a4[4], a2, a1 - (_DWORD)a2); } return result; } //----- (0076AE40) -------------------------------------------------------- int __usercall sub_76AE40@(_DWORD *a1@, void *a2, int a3) { int v3; // ebx int i; // edi int v5; // ebx signed int v7; // [esp+8h] [ebp-4h] if ( a1[5] || !a2 ) { v7 = a1[5]; v3 = a1[5]; } else { v3 = 1; v7 = 1; } sub_75DCD0((_DWORD *)a1[4], v3, (int)"too many captures"); for ( i = 0; i < v3; ++i ) { if ( i < a1[5] ) { v5 = a1[2 * i + 7]; if ( v5 == -1 ) sub_75DA80((_DWORD *)a1[4], "unfinished capture"); if ( v5 == -2 ) sub_75C040(a1[4], a1[2 * i + 6] - a1[1] + 1); else sub_75C0B0(a1[4], (void *)a1[2 * i + 6], a1[2 * i + 7]); v3 = v7; } else { if ( i ) sub_75DA80((_DWORD *)a1[4], "invalid capture index"); sub_75C0B0(a1[4], a2, a3 - (_DWORD)a2); } } return v3; } //----- (0076AF10) -------------------------------------------------------- signed int __usercall sub_76AF10@(unsigned int a1@, int a2) { unsigned int v2; // esi v2 = 0; while ( !strpbrk((const char *)(v2 + a2), "^$*+?.([%-") ) { v2 += strlen((const char *)(v2 + a2)) + 1; if ( v2 > a1 ) return 1; } return 0; } //----- (0076AF60) -------------------------------------------------------- int __cdecl sub_76AF60(int a1) { _DWORD *v1; // ecx _DWORD *v2; // esi int v3; // eax unsigned int v4; // ebx char *v5; // edi signed int v6; // eax unsigned int v7; // ebx signed int v8; // eax char *v9; // eax int v10; // edi unsigned __int8 *v12; // ebx int v13; // eax int v14; // edi unsigned int v15; // edx char *v16; // [esp+Ch] [ebp-130h] unsigned int v17; // [esp+10h] [ebp-12Ch] size_t v18; // [esp+14h] [ebp-128h] int v19; // [esp+18h] [ebp-124h] unsigned int v20; // [esp+1Ch] [ebp-120h] int v21; // [esp+20h] [ebp-11Ch] int v22; // [esp+24h] [ebp-118h] unsigned int v23; // [esp+28h] [ebp-114h] char *v24; // [esp+2Ch] [ebp-110h] _DWORD *v25; // [esp+30h] [ebp-10Ch] int v26; // [esp+34h] [ebp-108h] v2 = v1; v19 = sub_75ED30(v1, 1, &v17); v3 = sub_75ED30(v2, 2, &v18); v4 = v17; v5 = (char *)v3; v16 = (char *)v3; v6 = sub_75EF50(v2, 3, 1); if ( v6 < 0 ) { if ( -v6 > v4 ) { LABEL_6: v20 = 1; v7 = 1; goto LABEL_8; } v20 = v6 + v4 + 1; v7 = v6 + v4 + 1; } else { v7 = v6; v20 = v6; } if ( v7 < 1 ) goto LABEL_6; if ( v7 > v17 + 1 ) { LABEL_23: sub_75BFE0((int)v2); return 1; } LABEL_8: if ( a1 ) { if ( sub_75BBF0(v2, 4) || (v8 = sub_76AF10(v18, (int)v5), v7 = v20, v8) ) { v9 = sub_76AD10(v18, (void *)(v7 + v19 - 1), v17 - v7 + 1, (int)v5); if ( v9 ) { v10 = (int)&v9[-v19]; sub_75C040((int)v2, (signed int)&v9[-v19 + 1]); sub_75C040((int)v2, v18 + v10); return 2; } goto LABEL_23; } } v12 = (unsigned __int8 *)(v7 + v19 - 1); v20 = *v5 == 94; if ( v20 ) { ++v5; --v18; v16 = v5; } v22 = v19; v25 = v2; v21 = 200; v23 = v19 + v17; v24 = &v5[v18]; while ( 1 ) { v26 = 0; v13 = sub_76A9E0((int)&v21, v12, v5); v14 = v13; if ( v13 ) break; v15 = (unsigned int)v12++; if ( v15 >= v23 || v20 ) goto LABEL_23; v5 = v16; } if ( !a1 ) return sub_76AE40(&v21, v12, v13); sub_75C040((int)v2, (signed int)&v12[-v19 + 1]); sub_75C040((int)v2, v14 - v19); return sub_76AE40(&v21, 0, 0) + 2; } //----- (0076B1C0) -------------------------------------------------------- int sub_76B1C0() { return sub_76AF60(1); } //----- (0076B1E0) -------------------------------------------------------- int sub_76B1E0() { return sub_76AF60(0); } //----- (0076B200) -------------------------------------------------------- int __cdecl sub_76B200(_DWORD *a1) { int v1; // ebx unsigned __int8 *v2; // esi int v3; // eax signed int v5; // ecx int v6; // [esp+Ch] [ebp-12Ch] int v7; // [esp+10h] [ebp-128h] int v8; // [esp+14h] [ebp-124h] char *v9; // [esp+18h] [ebp-120h] int v10; // [esp+1Ch] [ebp-11Ch] int v11; // [esp+20h] [ebp-118h] unsigned int v12; // [esp+24h] [ebp-114h] char *v13; // [esp+28h] [ebp-110h] _DWORD *v14; // [esp+2Ch] [ebp-10Ch] int v15; // [esp+30h] [ebp-108h] v1 = sub_75BC70(a1, -1001001, &v7); v9 = (char *)sub_75BC70(a1, -1001002, &v6); v14 = a1; v10 = 200; v11 = v1; v12 = v1 + v7; v13 = &v9[v6]; v2 = (unsigned __int8 *)(v1 + sub_75BA70(a1, -1001003, 0)); if ( (unsigned int)v2 > v12 ) return 0; while ( 1 ) { v15 = 0; v3 = sub_76A9E0((int)&v10, v2, v9); v8 = v3; if ( v3 ) break; if ( (unsigned int)++v2 > v12 ) return 0; } v5 = v3 - v1; if ( (unsigned __int8 *)v3 == v2 ) ++v5; sub_75C040((int)a1, v5); sub_75B410(a1, -1001003); return sub_76AE40(&v10, v2, v8); } //----- (0076B320) -------------------------------------------------------- signed int __cdecl sub_76B320(_DWORD *a1) { sub_75ED30(a1, 1, 0); sub_75ED30(a1, 2, 0); sub_75B1F0((int)a1, 2); sub_75C040((int)a1, 0); sub_75C1C0((int)a1, (int)sub_76B200, 3); return 1; } //----- (0076B370) -------------------------------------------------------- char __usercall sub_76B370@(size_t a1@, int a2, void *a3, int a4) { int v4; // eax unsigned int v5; // edi int v6; // esi int v7; // ecx char v8; // al int v10; // [esp+Ch] [ebp-8h] unsigned int v11; // [esp+10h] [ebp-4h] v4 = sub_75BC70(*(_DWORD **)(a2 + 16), 3, &v11); v5 = 0; v6 = v4; v10 = v4; if ( v11 ) { do { if ( *(_BYTE *)(v5 + v6) == 37 ) { v7 = *(unsigned __int8 *)(v5++ + v6 + 1); if ( isdigit(v7) ) { v8 = *(_BYTE *)(v5 + v6); if ( v8 == 48 ) { LOBYTE(v4) = (unsigned int)sub_75DDB0(a1, a3, a4 - (_DWORD)a3); } else { sub_76ADC0(a4, a3, v8 - 49, (_DWORD *)a2); LOBYTE(v4) = (unsigned int)sub_75DEA0(a1); v6 = v10; } } else { if ( *(_BYTE *)(v5 + v6) != 37 ) sub_75DA80(*(_DWORD **)(a2 + 16), "invalid use of '%c' in replacement string", 37); if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 4) ) sub_75DD20((const void **)a1, 1u); v4 = *(_DWORD *)(a1 + 8); *(_BYTE *)(*(_DWORD *)a1 + v4) = *(_BYTE *)(v5 + v6); ++*(_DWORD *)(a1 + 8); } } else { if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 4) ) sub_75DD20((const void **)a1, 1u); LOBYTE(v4) = *(_BYTE *)(v5 + v6); *(_BYTE *)(*(_DWORD *)a1 + (*(_DWORD *)(a1 + 8))++) = v4; } ++v5; } while ( v5 < v11 ); } return v4; } //----- (0076B470) -------------------------------------------------------- char __usercall sub_76B470@(int a1@, int a2@, int a3@, size_t a4, int a5) { int v5; // eax _DWORD *v6; // esi _DWORD *v7; // edi int v8; // ebx char result; // al int v10; // eax size_t v11; // eax int v12; // eax int v13; // eax v5 = a1 - 5; v6 = (_DWORD *)a2; v7 = *(_DWORD **)(a2 + 16); v8 = a3; if ( v5 ) { if ( v5 != 1 ) return sub_76B370(a4, a2, (void *)a5, a3); sub_75B4C0(v7, 3); v10 = sub_76AE40(v6, (void *)a5, v8); sub_75CBD0((int)v7, v10, 1, 0, 0); } else { if ( *(_DWORD *)(a2 + 20) > 0 ) { v11 = *(_DWORD *)(a2 + 28); if ( v11 == -1 ) sub_75DA80(v7, "unfinished capture"); if ( v11 == -2 ) sub_75C040((int)v7, *(_DWORD *)(a2 + 24) - *(_DWORD *)(a2 + 4) + 1); else sub_75C0B0(*(_DWORD *)(a2 + 16), *(void **)(a2 + 24), v11); } else { sub_75C0B0((int)v7, (void *)a5, a3 - a5); } sub_75C320(v7, 3); } if ( sub_75BBF0(v7, -1) ) { if ( !sub_75B720(v7, -1) ) { v12 = sub_75B570(v7, -1); v13 = sub_75B600((int)v7, v12); sub_75DA80(v7, "invalid replacement value (a %s)", v13); } result = (unsigned int)sub_75DEA0(a4); } else { sub_75B1F0((int)v7, -2); sub_75C0B0((int)v7, (void *)a5, v8 - a5); result = (unsigned int)sub_75DEA0(a4); } return result; } //----- (0076B5A0) -------------------------------------------------------- signed int __cdecl sub_76B5A0(_DWORD *a1) { unsigned __int8 *v1; // esi char *v2; // ebx bool v3; // zf int v4; // eax unsigned int v5; // ebx int v7; // [esp+Ch] [ebp-348h] BOOL v8; // [esp+10h] [ebp-344h] char *v9; // [esp+14h] [ebp-340h] unsigned int v10; // [esp+18h] [ebp-33Ch] int v11; // [esp+1Ch] [ebp-338h] int v12; // [esp+20h] [ebp-334h] unsigned int v13; // [esp+24h] [ebp-330h] size_t v14; // [esp+28h] [ebp-32Ch] unsigned int v15; // [esp+2Ch] [ebp-328h] unsigned int v16; // [esp+30h] [ebp-324h] int v17; // [esp+238h] [ebp-11Ch] unsigned __int8 *v18; // [esp+23Ch] [ebp-118h] unsigned int v19; // [esp+240h] [ebp-114h] char *v20; // [esp+244h] [ebp-110h] _DWORD *v21; // [esp+248h] [ebp-10Ch] int v22; // [esp+24Ch] [ebp-108h] v1 = (unsigned __int8 *)sub_75ED30(a1, 1, &v7); v2 = (char *)sub_75ED30(a1, 2, &v12); v9 = v2; v11 = sub_75B570(a1, 3); v10 = sub_75EF50(a1, 4, v7 + 1); v3 = *v2 == 94; v13 = 0; v8 = v3; if ( v11 != 3 && v11 != 4 && v11 != 6 && v11 != 5 ) sub_75EB40(a1, 3, (int)"string/function/table expected"); sub_75DF10((int)a1, &v14); if ( v8 ) { ++v2; --v12; v9 = v2; } v4 = (int)&v1[v7]; v21 = a1; v17 = 200; v18 = v1; v19 = (unsigned int)&v1[v7]; v20 = &v2[v12]; if ( v10 ) { while ( 1 ) { v22 = 0; v5 = sub_76A9E0((int)&v17, v1, v2); if ( v5 && (++v13, sub_76B470(v11, (int)&v17, v5, (size_t)&v14, (int)v1), v5 > (unsigned int)v1) ) { v1 = (unsigned __int8 *)v5; } else { v4 = v19; if ( (unsigned int)v1 >= v19 ) goto LABEL_21; if ( v16 >= v15 ) sub_75DD20((const void **)&v14, 1u); *(_BYTE *)(v14 + v16++) = *v1++; } if ( v8 || v13 >= v10 ) break; v2 = v9; } v4 = v19; } LABEL_21: sub_75DDB0((int)&v14, v1, v4 - (_DWORD)v1); sub_75DE20((int)&v14); sub_75C040((int)a1, v13); return 2; } //----- (0076B7B0) -------------------------------------------------------- const void *__usercall sub_76B7B0@(signed int a1@, int a2@, _DWORD *a3) { unsigned __int8 *v3; // edi unsigned __int8 v4; // al bool v5; // cf unsigned int v6; // edx const void *result; // eax int v8; // [esp+8h] [ebp-14h] char v9; // [esp+Ch] [ebp-10h] v3 = (unsigned __int8 *)sub_75ED30(a3, a1, &v8); if ( *(_DWORD *)(a2 + 8) >= *(_DWORD *)(a2 + 4) ) sub_75DD20((const void **)a2, 1u); *(_BYTE *)(*(_DWORD *)a2 + (*(_DWORD *)(a2 + 8))++) = 34; if ( v8 ) { while ( 1 ) { --v8; v4 = *v3; if ( *v3 == 34 || v4 == 92 || v4 == 10 ) break; if ( v4 && !iscntrl(v4) ) { v5 = *(_DWORD *)(a2 + 8) < *(_DWORD *)(a2 + 4); LABEL_17: if ( !v5 ) sub_75DD20((const void **)a2, 1u); *(_BYTE *)(*(_DWORD *)a2 + (*(_DWORD *)(a2 + 8))++) = *v3; goto LABEL_20; } if ( isdigit(v3[1]) ) sprintf(&v9, "\\%03d", *v3); else sprintf(&v9, "\\%d", *v3); sub_75DDE0(a2, &v9); LABEL_20: ++v3; if ( !v8 ) goto LABEL_21; } if ( *(_DWORD *)(a2 + 8) >= *(_DWORD *)(a2 + 4) ) sub_75DD20((const void **)a2, 1u); *(_BYTE *)(*(_DWORD *)a2 + (*(_DWORD *)(a2 + 8))++) = 92; v5 = *(_DWORD *)(a2 + 8) < *(_DWORD *)(a2 + 4); goto LABEL_17; } LABEL_21: v6 = *(_DWORD *)(a2 + 8); --v8; if ( v6 >= *(_DWORD *)(a2 + 4) ) sub_75DD20((const void **)a2, 1u); result = *(const void **)a2; *(_BYTE *)(*(_DWORD *)a2 + (*(_DWORD *)(a2 + 8))++) = 34; return result; } //----- (0076B8F0) -------------------------------------------------------- _BYTE *__usercall sub_76B8F0@(_DWORD *a1@, _BYTE *a2@, _BYTE *a3) { _DWORD *v3; // edi _BYTE *i; // esi int v5; // ecx void *v7; // [esp+10h] [ebp+8h] v3 = a1; for ( i = a2; *i; ++i ) { if ( !strchr("-+ #0", (char)*i) ) break; } if ( (unsigned int)(i - a2) >= 6 ) sub_75DA80(v3, "invalid format (repeated flags)"); if ( isdigit((unsigned __int8)*i) ) ++i; if ( isdigit((unsigned __int8)*i) ) ++i; if ( *i == 46 ) { v5 = (unsigned __int8)(i++)[1]; if ( isdigit(v5) ) ++i; if ( isdigit((unsigned __int8)*i) ) ++i; } if ( isdigit((unsigned __int8)*i) ) sub_75DA80(v3, "invalid format (width or precision too long)"); *a3 = 37; v7 = a3 + 1; memcpy(v7, a2, i - a2 + 1); *((_BYTE *)v7 + i - a2 + 1) = 0; return i; } //----- (0076B9D0) -------------------------------------------------------- int __cdecl sub_76B9D0(const char *a1) { const char *v1; // ecx unsigned int v2; // edi unsigned int v3; // eax const char *v4; // edx char v5; // bl int v6; // esi char v7; // dl int result; // eax v2 = strlen(a1); v3 = strlen(v1); v4 = &a1[v2 - 1]; v5 = *v4; v6 = v4 - v1; do { v7 = *v1; v1[v6] = *v1; ++v1; } while ( v7 ); result = v2 + v3; a1[result - 1] = v5; a1[result] = 0; return result; } //----- (0076BA20) -------------------------------------------------------- signed int __cdecl sub_76BA20(_DWORD *a1) { signed int v1; // esi _BYTE *v2; // ebx _BYTE *v3; // ebx char *v4; // eax signed int v5; // eax double v6; // st7 double v7; // st7 double v8; // st7 double v9; // st7 int v10; // ST14_4 int v11; // eax double v12; // ST10_8 signed int result; // eax unsigned int v14; // [esp+14h] [ebp-248h] int v15; // [esp+18h] [ebp-244h] int v16; // [esp+1Ch] [ebp-240h] unsigned int v17; // [esp+20h] [ebp-23Ch] __int64 v18; // [esp+24h] [ebp-238h] char *v19; // [esp+2Ch] [ebp-230h] int v20; // [esp+30h] [ebp-22Ch] size_t v21; // [esp+34h] [ebp-228h] unsigned int v22; // [esp+38h] [ebp-224h] unsigned int v23; // [esp+3Ch] [ebp-220h] char v24; // [esp+244h] [ebp-18h] v16 = sub_75B1D0((int)a1); v1 = 1; v2 = (_BYTE *)sub_75ED30(a1, 1, &v15); v17 = (unsigned int)&v2[v15]; sub_75DF10((int)a1, &v21); while ( (unsigned int)v2 < v17 ) { if ( *v2 == 37 ) { v3 = v2 + 1; if ( *v3 == 37 ) { if ( v23 >= v22 ) sub_75DD20((const void **)&v21, 1u); *(_BYTE *)(v21 + v23++) = *v3; v2 = v3 + 1; } else { ++v1; v19 = (char *)sub_75DD20((const void **)&v21, 0x200u); v20 = 0; HIDWORD(v18) = v1; if ( v1 > v16 ) sub_75EB40(a1, v1, (int)"no value"); v4 = sub_76B8F0(a1, v3, &v24); v2 = v4 + 1; switch ( *v4 ) { case 65: case 69: case 71: case 97: case 101: case 102: case 103: sub_76B9D0(&v24); v12 = sub_75EDF0(a1, v1); v11 = sprintf(v19, &v24, v12); goto LABEL_22; case 88: case 111: case 117: case 120: v8 = sub_75EDF0(a1, v1); v18 = (signed __int64)v8; HIDWORD(v18) = (signed __int64)v8; v20 = (signed __int64)v8; v9 = v8 - (double)(unsigned int)v20; if ( v9 <= -1.0 || v9 >= 1.0 ) sub_75EB40(a1, v1, (int)"not a non-negative number in proper range"); sub_76B9D0(&v24); v11 = sprintf(v19, &v24, HIDWORD(v18), v10); LABEL_22: v20 = v11; break; case 99: v5 = sub_75EE90(a1, v1); v20 = sprintf(v19, &v24, v5); break; case 100: case 105: v6 = sub_75EDF0(a1, v1); v20 = (signed int)v6; v7 = v6 - (double)(signed int)v6; if ( v7 <= -1.0 || v7 >= 1.0 ) sub_75EB40(a1, v1, (int)"not a number in proper range"); sub_76B9D0(&v24); v20 = sprintf(v19, &v24, v20); break; case 113: sub_76B7B0(v1, (int)&v21, a1); v1 = HIDWORD(v18); break; case 115: HIDWORD(v18) = sub_75E4D0(a1, v1, &v14); if ( strchr(&v24, 46) || v14 < 0x64 ) { v20 = sprintf(v19, &v24, HIDWORD(v18)); sub_75B1F0((int)a1, -2); } else { sub_75DEA0((size_t)&v21); } break; default: sub_75DA80(a1, "invalid option '%%%c' to 'format'", *v4); return result; } v23 += v20; } } else { if ( v23 >= v22 ) sub_75DD20((const void **)&v21, 1u); *(_BYTE *)(v21 + v23++) = *v2++; } } sub_75DE20((int)&v21); return 1; } //----- (0076BE30) -------------------------------------------------------- signed int __cdecl sub_76BE30(_DWORD *a1) { sub_75C540((int)a1, 0, 14); sub_75EF80(a1, (int)&off_A0DAB0, 0); sub_75C540((int)a1, 0, 1); sub_75C0B0((int)a1, (void *)&byte_9A8050, 0); sub_75B4C0(a1, -2); sub_75C9A0(a1, -2); sub_75B1F0((int)a1, -2); sub_75B4C0(a1, -2); sub_75C770(a1, -2, "__index"); sub_75B1F0((int)a1, -2); return 1; } // A0DAB0: using guessed type char *off_A0DAB0; //----- (0076BEB0) -------------------------------------------------------- signed int __cdecl sub_76BEB0(_DWORD *a1) { const char *v1; // esi int v3; // [esp-4h] [ebp-Ch] v1 = (const char *)sub_75ED90(a1, 1, 0, 0); v3 = system(v1); if ( v1 ) return sub_75DB50((int)a1, v3); sub_75C250((int)a1, v3); return 1; } //----- (0076BF00) -------------------------------------------------------- signed int __cdecl sub_76BF00(_DWORD *a1) { const char *v1; // eax int v2; // ST08_4 int v3; // eax v1 = (const char *)sub_75ED30(a1, 1, 0); v2 = (int)v1; v3 = remove(v1); return sub_75DAC0((int)a1, v3 == 0, v2); } //----- (0076BF30) -------------------------------------------------------- signed int __cdecl sub_76BF30(_DWORD *a1) { const char *v1; // edi const char *v2; // eax int v3; // eax v1 = (const char *)sub_75ED30(a1, 1, 0); v2 = (const char *)sub_75ED30(a1, 2, 0); v3 = rename(v1, v2); return sub_75DAC0((int)a1, v3 == 0, 0); } //----- (0076BF70) -------------------------------------------------------- signed int __cdecl sub_76BF70(_DWORD *a1) { char v2; // [esp+4h] [ebp-14h] if ( !tmpnam(&v2) ) sub_75DA80(a1, "unable to generate a unique filename"); sub_75C100((int)a1, &v2); return 1; } //----- (0076BFE0) -------------------------------------------------------- signed int __cdecl sub_76BFE0(_DWORD *a1) { const char *v1; // eax char *v2; // eax v1 = (const char *)sub_75ED30(a1, 1, 0); v2 = getenv(v1); sub_75C100((int)a1, v2); return 1; } //----- (0076C010) -------------------------------------------------------- signed int __cdecl sub_76C010(int a1) { clock_t v1; // ST0C_4 v1 = clock(); sub_75C000(a1, (double)v1 / 1000.0); return 1; } //----- (0076C040) -------------------------------------------------------- int __usercall sub_76C040@(_BYTE *a1@, char *a2@, _DWORD *a3) { unsigned int v3; // edi char *v4; // eax char v5; // cl int v6; // eax v3 = 0; while ( 1 ) { if ( *a2 && strchr((&off_A0DEA0)[v3], *a2) ) { a1[1] = *a2; v4 = (&off_A0DEA4)[v3]; if ( !*v4 ) { a1[2] = 0; return (int)(a2 + 1); } v5 = a2[1]; if ( v5 ) { if ( strchr(v4, v5) ) break; } } v3 += 2; if ( v3 >= 2 ) { v6 = sub_75C190((int)a3, "invalid conversion specifier '%%%s'", (int)a2); sub_75EB40(a3, 1, v6); } } a1[2] = a2[1]; a1[3] = 0; return (int)(a2 + 2); } // A0DEA0: using guessed type char *off_A0DEA0; // A0DEA4: using guessed type char *off_A0DEA4; //----- (0076C0D0) -------------------------------------------------------- signed int __cdecl sub_76C0D0(_DWORD *a1) { char *v1; // ebx unsigned __int64 v2; // rax struct tm *v3; // esi int v4; // esi char i; // al size_t v6; // eax char v8; // [esp+Ch] [ebp-2ECh] __time64_t Time; // [esp+10h] [ebp-2E8h] struct tm *v10; // [esp+18h] [ebp-2E0h] int v11; // [esp+1Ch] [ebp-2DCh] unsigned int v12; // [esp+20h] [ebp-2D8h] unsigned int v13; // [esp+24h] [ebp-2D4h] char v14; // [esp+22Ch] [ebp-CCh] v1 = (char *)sub_75ED90(a1, 1, "%c", 0); if ( sub_75B570(a1, 2) > 0 ) v2 = (unsigned __int64)sub_75EDF0(a1, 2); else v2 = _time64(0); Time = v2; if ( *v1 == 33 ) { v3 = _gmtime64(&Time); v10 = v3; ++v1; } else { v10 = _localtime64(&Time); v3 = v10; } if ( v3 ) { if ( !strcmp(v1, "*t") ) { sub_75C540((int)a1, 0, 9); sub_75C040((int)a1, v3->tm_sec); sub_75C770(a1, -2, "sec"); sub_75C040((int)a1, v3->tm_min); sub_75C770(a1, -2, "min"); sub_75C040((int)a1, v3->tm_hour); sub_75C770(a1, -2, "hour"); sub_75C040((int)a1, v3->tm_mday); sub_75C770(a1, -2, "day"); sub_75C040((int)a1, v3->tm_mon + 1); sub_75C770(a1, -2, "month"); sub_75C040((int)a1, v3->tm_year + 1900); sub_75C770(a1, -2, "year"); sub_75C040((int)a1, v3->tm_wday + 1); sub_75C770(a1, -2, "wday"); sub_75C040((int)a1, v3->tm_yday + 1); sub_75C770(a1, -2, "yday"); v4 = v3->tm_isdst; if ( v4 >= 0 ) { sub_75C250((int)a1, v4); sub_75C770(a1, -2, "isdst"); } } else { v8 = 37; sub_75DF10((int)a1, &v11); for ( i = *v1; *v1; i = *v1 ) { if ( i == 37 ) { v1 = (char *)sub_76C040(&v8, v1 + 1, a1); v6 = strftime(&v14, 0xC8u, &v8, v10); sub_75DDB0((int)&v11, &v14, v6); } else { if ( v13 >= v12 ) sub_75DD20((const void **)&v11, 1u); *(_BYTE *)(v11 + v13++) = *v1++; } } sub_75DE20((int)&v11); } } else { sub_75BFE0((int)a1); } return 1; } //----- (0076C380) -------------------------------------------------------- signed int __cdecl sub_76C380(_DWORD *a1) { __time64_t v1; // rax int v2; // edi int v3; // edi int v4; // edi int v5; // edi signed int v6; // edi signed int v7; // edi int v8; // edi __time64_t v10; // [esp+Ch] [ebp-30h] struct tm Tm; // [esp+14h] [ebp-28h] if ( sub_75B570(a1, 1) > 0 ) { sub_75ECA0(a1, 1, 5); sub_75B1F0((int)a1, 1); sub_75C3A0(a1, -1, "sec"); v2 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) v2 = 0; sub_75B1F0((int)a1, -2); Tm.tm_sec = v2; sub_75C3A0(a1, -1, "min"); v3 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) v3 = 0; sub_75B1F0((int)a1, -2); Tm.tm_min = v3; sub_75C3A0(a1, -1, "hour"); v4 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) v4 = 12; sub_75B1F0((int)a1, -2); Tm.tm_hour = v4; sub_75C3A0(a1, -1, "day"); v5 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) sub_75DA80(a1, "field '%s' missing in date table", "day"); sub_75B1F0((int)a1, -2); Tm.tm_mday = v5; sub_75C3A0(a1, -1, "month"); v6 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) sub_75DA80(a1, "field '%s' missing in date table", "month"); sub_75B1F0((int)a1, -2); Tm.tm_mon = v6 - 1; sub_75C3A0(a1, -1, "year"); v7 = sub_75BA70(a1, -1, (_DWORD *)&v10 + 1); if ( !HIDWORD(v10) ) sub_75DA80(a1, "field '%s' missing in date table", "year"); sub_75B1F0((int)a1, -2); Tm.tm_year = v7 - 1900; sub_75C3A0(a1, -1, "isdst"); if ( sub_75B570(a1, -1) ) v8 = sub_75BBF0(a1, -1); else v8 = -1; sub_75B1F0((int)a1, -2); Tm.tm_isdst = v8; v1 = _mktime64(&Tm); } else { v1 = _time64(0); } v10 = v1; if ( (HIDWORD(v1) & (unsigned int)v1) == -1 ) sub_75BFE0((int)a1); else sub_75C000((int)a1, (double)v10); return 1; } //----- (0076C5E0) -------------------------------------------------------- signed int __cdecl sub_76C5E0(_DWORD *a1) { __time64_t v1; // kr00_8 __time64_t v2; // rax double v3; // st7 v1 = (unsigned __int64)sub_75EE60((int)a1, 2, 0.0); v2 = (unsigned __int64)sub_75EDF0(a1, 1); v3 = _difftime64(v2, v1); sub_75C000((int)a1, v3); return 1; } //----- (0076C640) -------------------------------------------------------- signed int __cdecl sub_76C640(_DWORD *a1) { const char *v1; // edi int v2; // eax char *v3; // eax v1 = (const char *)sub_75ED90(a1, 1, 0, 0); v2 = sub_75F030(a1, 2, "all", (const char **)off_A0DEC0); v3 = setlocale(dword_A0DEA8[v2], v1); sub_75C100((int)a1, v3); return 1; } // A0DEC0: using guessed type char *off_A0DEC0[6]; //----- (0076C690) -------------------------------------------------------- int __cdecl sub_76C690(_DWORD *a1) { int v1; // esi if ( sub_75B570(a1, 1) == 1 ) v1 = sub_75BBF0(a1, 1) == 0; else v1 = sub_75EF50(a1, 1, 0); if ( sub_75BBF0(a1, 2) ) sub_75F6A0((int)a1); if ( a1 ) exit(v1); return 0; } //----- (0076C700) -------------------------------------------------------- signed int __cdecl sub_76C700(_DWORD *a1) { sub_75C540((int)a1, 0, 11); sub_75EF80(a1, (int)&off_A0DEE0, 0); return 1; } // A0DEE0: using guessed type char *off_A0DEE0; //----- (0076C730) -------------------------------------------------------- signed int __cdecl sub_76C730(_DWORD *a1) { int v1; // eax signed int result; // eax sub_75ED00(a1, 1); v1 = sub_75DC60(a1, 1, "FILE*"); if ( v1 ) { if ( *(_DWORD *)(v1 + 4) ) sub_75C0B0((int)a1, "file", 4u); else sub_75C0B0((int)a1, "closed file", 0xBu); result = 1; } else { sub_75BFE0((int)a1); result = 1; } return result; } //----- (0076C7A0) -------------------------------------------------------- signed int __cdecl sub_76C7A0(_DWORD *a1) { int *v1; // eax v1 = (int *)sub_75EC50(a1, 1, "FILE*"); if ( v1[1] ) sub_75C190((int)a1, "file (%p)", *v1); else sub_75C0B0((int)a1, "file (closed)", 0xDu); return 1; } //----- (0076C7F0) -------------------------------------------------------- int __cdecl sub_76C7F0(_DWORD *a1) { int v1; // eax int (__cdecl *v2)(_DWORD *); // ecx if ( sub_75B570(a1, 1) == -1 ) sub_75C3A0(a1, -1001000, "_IO_output"); if ( !*(_DWORD *)(sub_75EC50(a1, 1, "FILE*") + 4) ) sub_75DA80(a1, "attempt to use a closed file"); v1 = sub_75EC50(a1, 1, "FILE*"); v2 = *(int (__cdecl **)(_DWORD *))(v1 + 4); *(_DWORD *)(v1 + 4) = 0; return v2(a1); } //----- (0076C860) -------------------------------------------------------- int __cdecl sub_76C860(_DWORD *a1) { _DWORD *v1; // eax int v2; // eax void (__cdecl *v3)(_DWORD *); // ecx v1 = (_DWORD *)sub_75EC50(a1, 1, "FILE*"); if ( v1[1] && *v1 ) { v2 = sub_75EC50(a1, 1, "FILE*"); v3 = *(void (__cdecl **)(_DWORD *))(v2 + 4); *(_DWORD *)(v2 + 4) = 0; v3(a1); } return 0; } //----- (0076C8B0) -------------------------------------------------------- signed int __cdecl sub_76C8B0(_DWORD *a1) { FILE **v1; // eax int v2; // eax v1 = (FILE **)sub_75EC50(a1, 1, "FILE*"); v2 = fclose(*v1); return sub_75DAC0((int)a1, v2 == 0, 0); } //----- (0076C8F0) -------------------------------------------------------- FILE *__usercall sub_76C8F0@(const char *a1@, _DWORD *a2@, char *a3) { int v3; // eax FILE **v4; // esi FILE *result; // eax int *v6; // eax char *v7; // eax v3 = sub_75D130((int)a2, 8u); v4 = (FILE **)v3; *(_DWORD *)(v3 + 4) = 0; sub_75DC30(a2, "FILE*"); *v4 = 0; v4[1] = (FILE *)sub_76C8B0; result = fopen(a1, a3); *v4 = result; if ( !result ) { v6 = _errno(); v7 = strerror(*v6); sub_75DA80(a2, "cannot open file '%s' (%s)", a1, v7); } return result; } //----- (0076C950) -------------------------------------------------------- signed int __cdecl sub_76C950(_DWORD *a1) { const char *v1; // ebx FILE **v2; // esi char *v3; // eax _BYTE *v4; // ecx FILE *v5; // eax signed int result; // eax char *v7; // [esp+Ch] [ebp-4h] v7 = (char *)sub_75ED30(a1, 1, 0); v1 = (const char *)sub_75ED90(a1, 2, "r", 0); v2 = (FILE **)sub_75D130((int)a1, 8u); v2[1] = 0; sub_75DC30(a1, "FILE*"); *v2 = 0; v2[1] = (FILE *)sub_76C8B0; if ( !*v1 || (v3 = strchr("rwa", *v1), v4 = v1 + 1, !v3) || *v4 == 43 && (v4 = v1 + 2, v1 == (const char *)-2) || *v4 == 98 && (++v4, !v4) || *v4 ) { sub_75EB40(a1, 2, (int)"invalid mode"); } v5 = fopen(v7, v1); *v2 = v5; if ( v5 ) result = 1; else result = sub_75DAC0((int)a1, 0, (int)v7); return result; } //----- (0076CA20) -------------------------------------------------------- signed int __cdecl sub_76CA20(_DWORD *a1) { FILE **v1; // eax int v2; // eax v1 = (FILE **)sub_75EC50(a1, 1, "FILE*"); v2 = _pclose(*v1); return sub_75DB50((int)a1, v2); } //----- (0076CA50) -------------------------------------------------------- signed int __cdecl sub_76CA50(_DWORD *a1) { const char *v1; // ebx char *v2; // ST40_4 FILE **v3; // edi FILE *v4; // eax signed int result; // eax v1 = (const char *)sub_75ED30(a1, 1, 0); v2 = (char *)sub_75ED90(a1, 2, "r", 0); v3 = (FILE **)sub_75D130((int)a1, 8u); v3[1] = 0; sub_75DC30(a1, "FILE*"); v4 = _popen(v1, v2); *v3 = v4; v3[1] = (FILE *)sub_76CA20; if ( v4 ) result = 1; else result = sub_75DAC0((int)a1, 0, (int)v1); return result; } //----- (0076CAD0) -------------------------------------------------------- signed int __cdecl sub_76CAD0(_DWORD *a1) { FILE **v1; // esi FILE *v2; // eax signed int result; // eax v1 = (FILE **)sub_75D130((int)a1, 8u); v1[1] = 0; sub_75DC30(a1, "FILE*"); *v1 = 0; v1[1] = (FILE *)sub_76C8B0; v2 = tmpfile(); *v1 = v2; if ( v2 ) result = 1; else result = sub_75DAC0((int)a1, 0, 0); return result; } //----- (0076CB30) -------------------------------------------------------- signed int __usercall sub_76CB30@(_DWORD *a1@, void *a2@, char *a3) { _DWORD *v3; // edi const char *v4; // eax v3 = a1; if ( sub_75B570(a1, 1) > 0 ) { v4 = (const char *)sub_75BC70(v3, 1, 0); if ( v4 ) { sub_76C8F0(v4, v3, a3); } else { if ( !*(_DWORD *)(sub_75EC50(v3, 1, "FILE*") + 4) ) sub_75DA80(v3, "attempt to use a closed file"); sub_75B4C0(v3, 1); } sub_75C770(v3, -1001000, a2); } sub_75C3A0(v3, -1001000, a2); return 1; } //----- (0076CBC0) -------------------------------------------------------- signed int __cdecl sub_76CBC0(_DWORD *a1) { return sub_76CB30(a1, "_IO_input", "r"); } //----- (0076CBE0) -------------------------------------------------------- signed int __cdecl sub_76CBE0(_DWORD *a1) { return sub_76CB30(a1, "_IO_output", (char *)&unk_A091D0); } //----- (0076CC00) -------------------------------------------------------- int __usercall sub_76CC00@(FILE *a1@, int a2@) { int result; // eax double v3; // [esp+8h] [ebp-8h] if ( fscanf(a1, "%lf", &v3) == 1 ) { sub_75C000(a2, v3); result = 1; } else { sub_75BFE0(a2); result = 0; } return result; } //----- (0076CC50) -------------------------------------------------------- BOOL __usercall sub_76CC50@(_DWORD *a1@, FILE *a2@, int a3) { char *v3; // esi unsigned int v4; // eax BOOL result; // eax const void *v6[2]; // [esp+4h] [ebp-214h] int v7; // [esp+Ch] [ebp-20Ch] sub_75DF10((int)a1, v6); v3 = (char *)sub_75DD20(v6, 0x200u); if ( fgets(v3, 512, a2) ) { while ( 1 ) { v4 = strlen(v3); if ( v4 ) { if ( v3[v4 - 1] == 10 ) break; } v7 += v4; v3 = (char *)sub_75DD20(v6, 0x200u); if ( !fgets(v3, 512, a2) ) goto LABEL_5; } v7 += v4 - a3; sub_75DE20((int)v6); result = 1; } else { LABEL_5: sub_75DE20((int)v6); result = sub_75BD30(a1, -1) > 0; } return result; } //----- (0076CD40) -------------------------------------------------------- _DWORD *__usercall sub_76CD40@(FILE *a1@, int a2) { unsigned int v2; // esi void *v3; // eax size_t v4; // eax void *v5; // eax size_t v6; // eax const void *v8[2]; // [esp+4h] [ebp-214h] int v9; // [esp+Ch] [ebp-20Ch] v2 = 512; sub_75DF10(a2, v8); v3 = (void *)sub_75DD20(v8, 0x200u); v4 = fread(v3, 1u, 0x200u, a1); v9 += v4; if ( v4 >= 0x200 ) { do { if ( v2 <= 0x3FFFFFFF ) v2 *= 2; v5 = (void *)sub_75DD20(v8, v2); v6 = fread(v5, 1u, v2, a1); v9 += v6; } while ( v6 >= v2 ); } return sub_75DE20((int)v8); } //----- (0076CDE0) -------------------------------------------------------- signed int __usercall sub_76CDE0@(FILE *a1@, int a2@, int a3) { _DWORD *v3; // ebx FILE *v4; // edi int v5; // eax int v6; // esi signed int v7; // esi signed int result; // eax signed int v9; // esi int v10; // esi void *v11; // eax size_t v12; // esi _BYTE *v13; // eax int v14; // [esp+Ch] [ebp-21Ch] int v15; // [esp+10h] [ebp-218h] const void *v16[2]; // [esp+14h] [ebp-214h] int v17; // [esp+1Ch] [ebp-20Ch] v3 = (_DWORD *)a2; v4 = a1; v5 = sub_75B1D0(a2); v6 = v5 - 1; v14 = v5 - 1; clearerr(v4); if ( v6 ) { sub_75DCD0(v3, v6 + 20, (int)"too many arguments"); v7 = 1; v15 = a3; do { --v14; if ( !v7 ) break; if ( sub_75B570(v3, v15++) == 3 ) { v9 = sub_75BA70(v3, v15, 0); if ( v9 ) { sub_75DF10((int)v3, v16); v11 = (void *)sub_75DD20(v16, v9); v12 = fread(v11, 1u, v9, v4); v17 += v12; sub_75DE20((int)v16); v7 = v12 > 0; } else { v10 = fgetc(v4); ungetc(v10, v4); sub_75C0B0((int)v3, 0, 0); v7 = v10 != -1; } } else { v13 = (_BYTE *)sub_75BC70(v3, v15, 0); if ( !v13 || *v13 != 42 ) sub_75EB40(v3, v15, (int)"invalid option"); switch ( v13[1] ) { case 76: v7 = sub_76CC50(v3, v4, 0); break; case 97: sub_76CD40(v4, (int)v3); v7 = 1; break; case 108: v7 = sub_76CC50(v3, v4, 1); break; case 110: v7 = sub_76CC00(v4, (int)v3); break; default: sub_75EB40(v3, v15, (int)"invalid format"); return result; } } } while ( v14 ); } else { v7 = sub_76CC50(v3, v4, 1); v15 = a3 + 1; } if ( ferror(v4) ) return sub_75DAC0((int)v3, 0, 0); if ( !v7 ) { sub_75B1F0((int)v3, -2); sub_75BFE0((int)v3); } return v15 - a3; } //----- (0076D040) -------------------------------------------------------- signed int __cdecl sub_76D040(_DWORD *a1) { int v1; // eax sub_75C3A0(a1, -1001000, "_IO_input"); v1 = sub_75BDE0(a1, -1); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "standard %s file is closed", "input"); return sub_76CDE0(*(FILE **)v1, (int)a1, 1); } //----- (0076D090) -------------------------------------------------------- signed int __cdecl sub_76D090(_DWORD *a1) { int v1; // eax v1 = sub_75EC50(a1, 1, "FILE*"); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "attempt to use a closed file"); return sub_76CDE0(*(FILE **)v1, (int)a1, 2); } //----- (0076D0D0) -------------------------------------------------------- signed int __cdecl sub_76D0D0(_DWORD *a1) { int v1; // edi signed int v2; // ebx signed int v3; // edi signed int v4; // edi int v6; // eax int v7; // eax void (__cdecl *v8)(_DWORD *); // ecx int v9; // [esp+Ch] [ebp-4h] v1 = sub_75BDE0(a1, -1001001); v9 = v1; v2 = sub_75BA70(a1, -1001002, 0); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "file is already closed"); sub_75B1F0((int)a1, 1); if ( v2 >= 1 ) { v3 = -1001004; do { sub_75B4C0(a1, v3--); --v2; } while ( v2 ); v1 = v9; } v4 = sub_76CDE0(*(FILE **)v1, (int)a1, 2); if ( sub_75B570(a1, -v4) ) return v4; if ( v4 > 1 ) { v6 = sub_75BC70(a1, 1 - v4, 0); sub_75DA80(a1, "%s", v6); } if ( sub_75BBF0(a1, -1001003) ) { sub_75B1F0((int)a1, 0); sub_75B4C0(a1, -1001001); v7 = sub_75EC50(a1, 1, "FILE*"); v8 = *(void (__cdecl **)(_DWORD *))(v7 + 4); *(_DWORD *)(v7 + 4) = 0; v8(a1); } return 0; } //----- (0076D1E0) -------------------------------------------------------- int __usercall sub_76D1E0@(signed int a1@, _DWORD *a2@, FILE *a3) { signed int v3; // esi int v4; // eax signed int v5; // edi double v6; // st7 const void *v8; // eax size_t v9; // eax int v10; // [esp+4h] [ebp-14h] int v11; // [esp+10h] [ebp-8h] size_t v12; // [esp+14h] [ebp-4h] v3 = a1; v4 = sub_75B1D0(v10) - a1; v5 = 1; if ( !v4 ) return 1; while ( 1 ) { v11 = v4 - 1; if ( sub_75B570(a2, v3) == 3 ) { if ( !v5 ) goto LABEL_7; v6 = sub_75B9C0(a2, v3, 0); if ( fprintf(a3, "%.14g", LODWORD(v6), (_DWORD)(*(unsigned __int64 *)&v6 >> 32)) <= 0 ) goto LABEL_7; } else { v8 = (const void *)sub_75ED30(a2, v3, &v12); if ( !v5 || (v9 = fwrite(v8, 1u, v12, a3), v9 != v12) ) { LABEL_7: v5 = 0; goto LABEL_8; } } v5 = 1; LABEL_8: ++v3; if ( !v11 ) break; v4 = v11; } if ( v5 ) return 1; return sub_75DAC0((int)a2, 0, 0); } //----- (0076D2A0) -------------------------------------------------------- int __cdecl sub_76D2A0(_DWORD *a1) { int v1; // eax sub_75C3A0(a1, -1001000, "_IO_output"); v1 = sub_75BDE0(a1, -1); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "standard %s file is closed", "output"); return sub_76D1E0(1, a1, *(FILE **)v1); } //----- (0076D300) -------------------------------------------------------- int __cdecl sub_76D300(_DWORD *a1) { int v1; // eax FILE *v2; // esi v1 = sub_75EC50(a1, 1, "FILE*"); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "attempt to use a closed file"); v2 = *(FILE **)v1; sub_75B4C0(a1, 1); return sub_76D1E0(2, a1, v2); } //----- (0076D350) -------------------------------------------------------- signed int __cdecl sub_76D350(_DWORD *a1) { int v1; // eax FILE *v2; // edi int v3; // ebx double v4; // st7 signed __int64 Offset; // ST1C_8 v1 = sub_75EC50(a1, 1, "FILE*"); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "attempt to use a closed file"); v2 = *(FILE **)v1; v3 = sub_75F030(a1, 2, "cur", (const char **)off_A0E06C); v4 = sub_75EE60((int)a1, 3, 0.0); if ( (double)(signed __int64)(unsigned __int64)v4 != v4 ) sub_75EB40(a1, 3, (int)"not an integer in proper range"); if ( _fseeki64(v2, (unsigned __int64)v4, Origin[v3]) ) return sub_75DAC0((int)a1, 0, 0); Offset = _ftelli64(v2); sub_75C000((int)a1, (double)Offset); return 1; } // A0E06C: using guessed type char *off_A0E06C[3]; //----- (0076D430) -------------------------------------------------------- signed int __cdecl sub_76D430(_DWORD *a1) { int v1; // eax FILE *v2; // edi int v3; // ebx signed int v4; // eax int v5; // eax v1 = sub_75EC50(a1, 1, "FILE*"); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "attempt to use a closed file"); v2 = *(FILE **)v1; v3 = sub_75F030(a1, 2, 0, (const char **)off_A0E088); v4 = sub_75EF50(a1, 3, 512); v5 = setvbuf(v2, 0, dword_A0E07C[v3], v4); return sub_75DAC0((int)a1, v5 == 0, 0); } // A0E088: using guessed type char *off_A0E088[3]; //----- (0076D4B0) -------------------------------------------------------- signed int __cdecl sub_76D4B0(_DWORD *a1) { int v1; // eax int v2; // eax sub_75C3A0(a1, -1001000, "_IO_output"); v1 = sub_75BDE0(a1, -1); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "standard %s file is closed", "output"); v2 = fflush(*(FILE **)v1); return sub_75DAC0((int)a1, v2 == 0, 0); } //----- (0076D510) -------------------------------------------------------- signed int __cdecl sub_76D510(_DWORD *a1) { int v1; // eax int v2; // eax v1 = sub_75EC50(a1, 1, "FILE*"); if ( !*(_DWORD *)(v1 + 4) ) sub_75DA80(a1, "attempt to use a closed file"); v2 = fflush(*(FILE **)v1); return sub_75DAC0((int)a1, v2 == 0, 0); } //----- (0076D560) -------------------------------------------------------- signed int __cdecl sub_76D560(_DWORD *a1) { *(_DWORD *)(sub_75EC50(a1, 1, "FILE*") + 4) = sub_76D560; sub_75BFE0((int)a1); sub_75C0B0((int)a1, "cannot close standard file", 0x1Au); return 2; } //----- (0076D5A0) -------------------------------------------------------- signed int __cdecl sub_76D5A0(_DWORD *a1) { void **v1; // ebx int v2; // eax void ***v3; // edi void **v4; // edi int v5; // eax void ***v6; // ebx void **v7; // ebx int v8; // eax void ***v9; // edi sub_75C540((int)a1, 0, 11); sub_75EF80(a1, (int)&off_A0E098, 0); sub_75DBD0(a1, "FILE*"); sub_75B4C0(a1, -1); sub_75C770(a1, -2, "__index"); sub_75EF80(a1, (int)&off_A0E0F8, 0); sub_75B1F0((int)a1, -2); v1 = sub_7D6CEE(); v2 = sub_75D130((int)a1, 8u); v3 = (void ***)v2; *(_DWORD *)(v2 + 4) = 0; sub_75DC30(a1, "FILE*"); *v3 = v1; v3[1] = (void **)sub_76D560; sub_75B4C0(a1, -1); sub_75C770(a1, -1001000, "_IO_input"); sub_75C770(a1, -2, "stdin"); v4 = sub_7D6CEE() + 8; v5 = sub_75D130((int)a1, 8u); v6 = (void ***)v5; *(_DWORD *)(v5 + 4) = 0; sub_75DC30(a1, "FILE*"); *v6 = v4; v6[1] = (void **)sub_76D560; sub_75B4C0(a1, -1); sub_75C770(a1, -1001000, "_IO_output"); sub_75C770(a1, -2, "stdout"); v7 = sub_7D6CEE() + 16; v8 = sub_75D130((int)a1, 8u); v9 = (void ***)v8; *(_DWORD *)(v8 + 4) = 0; sub_75DC30(a1, "FILE*"); *v9 = v7; v9[1] = (void **)sub_76D560; sub_75C770(a1, -2, "stderr"); return 1; } // A0E098: using guessed type char *off_A0E098; // A0E0F8: using guessed type char *off_A0E0F8; //----- (0076D6F0) -------------------------------------------------------- int __usercall sub_76D6F0@(_DWORD *a1@, int a2) { signed int v2; // esi signed int v3; // eax int v4; // ebx int v6; // [esp+0h] [ebp-8h] v2 = sub_75B1D0(v6) - 1; if ( v2 > 17 ) sub_75EB40(a1, 17, (int)"too many options"); sub_75B4C0(a1, 1); sub_75C040((int)a1, v2); sub_75C250((int)a1, a2); v3 = 1; if ( v2 >= 1 ) { do { v4 = v3 + 1; sub_75B4C0(a1, v3 + 1); v3 = v4; } while ( v4 <= v2 ); } return sub_75C1C0((int)a1, (int)sub_76D0D0, v2 + 3); } //----- (0076D770) -------------------------------------------------------- signed int __cdecl sub_76D770(_DWORD *a1) { if ( !*(_DWORD *)(sub_75EC50(a1, 1, "FILE*") + 4) ) sub_75DA80(a1, "attempt to use a closed file"); sub_76D6F0(a1, 0); return 1; } //----- (0076D7B0) -------------------------------------------------------- signed int __cdecl sub_76D7B0(_DWORD *a1) { signed int result; // eax const char *v2; // eax if ( sub_75B570(a1, 1) == -1 ) sub_75BFE0((int)a1); if ( sub_75B570(a1, 1) ) { v2 = (const char *)sub_75ED30(a1, 1, 0); sub_76C8F0(v2, a1, "r"); sub_75B410(a1, 1); sub_76D6F0(a1, 1); result = 1; } else { sub_75C3A0(a1, -1001000, "_IO_input"); sub_75B410(a1, 1); if ( !*(_DWORD *)(sub_75EC50(a1, 1, "FILE*") + 4) ) sub_75DA80(a1, "attempt to use a closed file"); sub_76D6F0(a1, 0); result = 1; } return result; } //----- (0076D870) -------------------------------------------------------- int __cdecl sub_76D870(_DWORD *a1) { signed int v1; // esi int v2; // eax signed int v3; // eax signed int v4; // ebx signed int v6; // [esp+Ch] [ebp-4h] sub_75ECA0(a1, 1, 5); v1 = sub_75E480(a1, 1) + 1; v2 = sub_75B1D0((int)a1) - 2; if ( v2 ) { if ( v2 != 1 ) sub_75DA80(a1, "wrong number of arguments to 'insert'"); v3 = sub_75EE90(a1, 2); v4 = v3; v6 = v3; if ( v3 < 1 || v1 < v3 ) sub_75EB40(a1, 2, (int)"position out of bounds"); if ( v1 > v3 ) { do { sub_75C4C0(a1, 1, v1 - 1); sub_75C8E0(a1, 1, v1--); } while ( v1 > v6 ); v4 = v6; } } else { v4 = v1; } sub_75C8E0(a1, 1, v4); return 0; } //----- (0076D920) -------------------------------------------------------- signed int __cdecl sub_76D920(_DWORD *a1) { signed int v1; // eax signed int v2; // ebx int v3; // eax signed int v4; // esi signed int v6; // [esp+Ch] [ebp-4h] sub_75ECA0(a1, 1, 5); v1 = sub_75E480(a1, 1); v2 = v1; v6 = v1; v3 = sub_75EF50(a1, 2, v1); v4 = v3; if ( v3 != v2 && (v3 < 1 || v3 > v2 + 1) ) sub_75EB40(a1, 1, (int)"position out of bounds"); sub_75C4C0(a1, 1, v3); if ( v4 < v2 ) { do { sub_75C4C0(a1, 1, v4 + 1); sub_75C8E0(a1, 1, v4++); } while ( v4 < v6 ); } sub_75BFE0((int)a1); sub_75C8E0(a1, 1, v4); return 1; } //----- (0076D9C0) -------------------------------------------------------- signed int __cdecl sub_76D9C0(_DWORD *a1) { signed int v1; // edi signed int v2; // eax signed int v3; // ebx bool i; // zf int v5; // eax int v6; // eax int v7; // eax int v8; // eax size_t v10; // [esp+Ch] [ebp-21Ch] void *v11; // [esp+10h] [ebp-218h] size_t v12; // [esp+14h] [ebp-214h] v11 = (void *)sub_75ED90(a1, 2, &byte_9A8050, &v10); sub_75ECA0(a1, 1, 5); v1 = sub_75EF50(a1, 3, 1); if ( sub_75B570(a1, 4) > 0 ) v2 = sub_75EE90(a1, 4); else v2 = sub_75E480(a1, 1); v3 = v2; sub_75DF10((int)a1, &v12); for ( i = v1 == v3; v1 < v3; i = v1 == v3 ) { sub_75C4C0(a1, 1, v1); if ( !sub_75B720(a1, -1) ) { v5 = sub_75B570(a1, -1); v6 = sub_75B600((int)a1, v5); sub_75DA80(a1, "invalid value (%s) at index %d in table for 'concat'", v6, v1); } sub_75DEA0((size_t)&v12); sub_75DDB0((int)&v12, v11, v10); ++v1; } if ( i ) { sub_75C4C0(a1, 1, v1); if ( !sub_75B720(a1, -1) ) { v7 = sub_75B570(a1, -1); v8 = sub_75B600((int)a1, v7); sub_75DA80(a1, "invalid value (%s) at index %d in table for 'concat'", v8, v1); } sub_75DEA0((size_t)&v12); } sub_75DE20((int)&v12); return 1; } //----- (0076DB20) -------------------------------------------------------- signed int __cdecl sub_76DB20(_DWORD *a1) { signed int v1; // edi v1 = sub_75B1D0((int)a1); sub_75C540((int)a1, v1, 1); sub_75C040((int)a1, v1); sub_75C770(a1, -2, "n"); if ( v1 > 0 ) { sub_75B4C0(a1, 1); sub_75C8E0(a1, -2, 1); sub_75B410(a1, 1); for ( ; v1 >= 2; --v1 ) sub_75C8E0(a1, 1, v1); } return 1; } //----- (0076DBA0) -------------------------------------------------------- int __cdecl sub_76DBA0(_DWORD *a1) { signed int v1; // esi signed int v2; // eax signed int v3; // ebx int v5; // [esp+Ch] [ebp-4h] sub_75ECA0(a1, 1, 5); v1 = sub_75EF50(a1, 2, 1); if ( sub_75B570(a1, 3) > 0 ) v2 = sub_75EE90(a1, 3); else v2 = sub_75E480(a1, 1); v3 = v2; if ( v1 > v2 ) return 0; v5 = v2 - v1 + 1; if ( v5 <= 0 || !sub_75B0A0(a1, v2 - v1 + 1) ) sub_75DA80(a1, "too many results to unpack"); sub_75C4C0(a1, 1, v1); while ( v1 < v3 ) sub_75C4C0(a1, 1, ++v1); return v5; } //----- (0076DC50) -------------------------------------------------------- void __cdecl sub_76DC50(_DWORD *a1, signed int a2, signed int a3) { signed int v3; // ebx signed int v4; // edi BOOL v5; // edi BOOL v6; // eax int v7; // kr00_4 BOOL v8; // ebx BOOL v9; // eax BOOL v10; // ebx BOOL v11; // eax signed int v12; // ebx signed int v13; // ebx signed int v14; // edi BOOL v15; // edi BOOL v16; // eax BOOL v17; // edi BOOL v18; // eax int v19; // edi int v20; // ebx int v21; // eax int v22; // edx int v23; // [esp+8h] [ebp-4h] int v24; // [esp+8h] [ebp-4h] v3 = a3; v4 = a2; if ( a2 < a3 ) { while ( 1 ) { sub_75C4C0(a1, 1, v4); sub_75C4C0(a1, 1, v3); if ( sub_75B570(a1, 2) ) { sub_75B4C0(a1, 2); sub_75B4C0(a1, -2); sub_75B4C0(a1, -4); sub_75CBD0((int)a1, 2, 1, 0, 0); v5 = sub_75BBF0(a1, -1); sub_75B1F0((int)a1, -2); v6 = v5; v4 = a2; } else { v6 = sub_75B870(a1, -1, -2, 1); } if ( v6 ) { sub_75C8E0(a1, 1, v4); sub_75C8E0(a1, 1, v3); } else { sub_75B1F0((int)a1, -3); } v23 = v3 - v4; if ( v3 - v4 == 1 ) break; v7 = v4 + v3; sub_75C4C0(a1, 1, (v4 + v3) / 2); sub_75C4C0(a1, 1, a2); if ( sub_75B570(a1, 2) ) { sub_75B4C0(a1, 2); sub_75B4C0(a1, -3); sub_75B4C0(a1, -3); sub_75CBD0((int)a1, 2, 1, 0, 0); v8 = sub_75BBF0(a1, -1); sub_75B1F0((int)a1, -2); v9 = v8; v3 = a3; } else { v9 = sub_75B870(a1, -2, -1, 1); } if ( v9 ) { sub_75C8E0(a1, 1, v7 / 2); sub_75C8E0(a1, 1, a2); } else { sub_75B1F0((int)a1, -2); sub_75C4C0(a1, 1, v3); if ( sub_75B570(a1, 2) ) { sub_75B4C0(a1, 2); sub_75B4C0(a1, -2); sub_75B4C0(a1, -4); sub_75CBD0((int)a1, 2, 1, 0, 0); v10 = sub_75BBF0(a1, -1); sub_75B1F0((int)a1, -2); v11 = v10; v3 = a3; } else { v11 = sub_75B870(a1, -1, -2, 1); } if ( v11 ) { sub_75C8E0(a1, 1, v7 / 2); sub_75C8E0(a1, 1, v3); } else { sub_75B1F0((int)a1, -3); } } if ( v23 == 2 ) break; sub_75C4C0(a1, 1, v7 / 2); sub_75B4C0(a1, -1); v12 = v3 - 1; sub_75C4C0(a1, 1, v12); sub_75C8E0(a1, 1, v7 / 2); sub_75C8E0(a1, 1, v12); v13 = a2; v14 = a3 - 1; v24 = a3 - 1; while ( 1 ) { while ( 1 ) { sub_75C4C0(a1, 1, ++v13); if ( sub_75B570(a1, 2) ) { sub_75B4C0(a1, 2); sub_75B4C0(a1, -2); sub_75B4C0(a1, -4); sub_75CBD0((int)a1, 2, 1, 0, 0); v15 = sub_75BBF0(a1, -1); sub_75B1F0((int)a1, -2); v16 = v15; v14 = v24; } else { v16 = sub_75B870(a1, -1, -2, 1); } if ( !v16 ) break; if ( v13 >= a3 ) sub_75DA80(a1, "invalid order function for sorting"); sub_75B1F0((int)a1, -2); } while ( 1 ) { v24 = --v14; sub_75C4C0(a1, 1, v14); if ( sub_75B570(a1, 2) ) { sub_75B4C0(a1, 2); sub_75B4C0(a1, -4); sub_75B4C0(a1, -3); sub_75CBD0((int)a1, 2, 1, 0, 0); v17 = sub_75BBF0(a1, -1); sub_75B1F0((int)a1, -2); v18 = v17; v14 = v24; } else { v18 = sub_75B870(a1, -3, -1, 1); } if ( !v18 ) break; if ( v14 <= a2 ) sub_75DA80(a1, "invalid order function for sorting"); sub_75B1F0((int)a1, -2); } if ( v14 < v13 ) break; sub_75C8E0(a1, 1, v13); sub_75C8E0(a1, 1, v14); } sub_75B1F0((int)a1, -4); sub_75C4C0(a1, 1, a3 - 1); sub_75C4C0(a1, 1, v13); sub_75C8E0(a1, 1, a3 - 1); sub_75C8E0(a1, 1, v13); v19 = a2; if ( v13 - a2 >= a3 - v13 ) { v21 = v13 + 1; v22 = v13 - 1; v20 = a3; a3 = v22; } else { v20 = v13 - 1; v21 = a2; a2 = v20 + 2; v19 = v20 + 2; } sub_76DC50(a1, v21, v20); if ( v19 >= a3 ) break; v3 = a3; v4 = a2; } } } //----- (0076E060) -------------------------------------------------------- int __cdecl sub_76E060(_DWORD *a1) { signed int v1; // edi sub_75ECA0(a1, 1, 5); v1 = sub_75E480(a1, 1); sub_75DCD0(a1, 40, (int)&byte_9A8050); if ( sub_75B570(a1, 2) > 0 ) sub_75ECA0(a1, 2, 6); sub_75B1F0((int)a1, 2); sub_76DC50(a1, 1, v1); return 0; } //----- (0076E0C0) -------------------------------------------------------- signed int __cdecl sub_76E0C0(_DWORD *a1) { sub_75C540((int)a1, 0, 6); sub_75EF80(a1, (int)&off_A0E2D4, 0); return 1; } // A0E2D4: using guessed type char *off_A0E2D4; //----- (0076E0F0) -------------------------------------------------------- signed int __usercall sub_76E0F0@(int a1@, _DWORD *a2@, _DWORD *a3@) { signed int v3; // ebx signed int result; // eax signed int v5; // eax int v6; // ebx v3 = a1; if ( sub_75B0A0(a3, a1) ) { if ( sub_75CE10((int)a3) || sub_75B1D0((int)a3) ) { sub_75B110((int)a2, (int)a3, v3); v5 = sub_760BC0((int)a3, (int)a2, v3); if ( v5 && v5 != 1 ) { sub_75B110((int)a3, (int)a2, 1); result = -1; } else { v6 = sub_75B1D0((int)a3); if ( sub_75B0A0(a2, v6 + 1) ) { sub_75B110((int)a3, (int)a2, v6); result = v6; } else { sub_75B1F0((int)a3, -1 - v6); sub_75C0B0((int)a2, "too many results to resume", 0x1Au); result = -1; } } } else { sub_75C0B0((int)a2, "cannot resume dead coroutine", 0x1Cu); result = -1; } } else { sub_75C0B0((int)a2, "too many arguments to resume", 0x1Cu); result = -1; } return result; } //----- (0076E1C0) -------------------------------------------------------- int __cdecl sub_76E1C0(_DWORD *a1) { _DWORD *v1; // esi int v2; // eax signed int v3; // esi int result; // eax v1 = (_DWORD *)sub_75BE80(a1, 1); if ( !v1 ) sub_75EB40(a1, 1, (int)"coroutine expected"); v2 = sub_75B1D0((int)a1); v3 = sub_76E0F0(v2 - 1, a1, v1); if ( v3 >= 0 ) { sub_75C250((int)a1, 1); sub_75B2D0(a1, -1 - v3); result = v3 + 1; } else { sub_75C250((int)a1, 0); sub_75B2D0(a1, -2); result = 2; } return result; } //----- (0076E240) -------------------------------------------------------- signed int __cdecl sub_76E240(_DWORD *a1) { _DWORD *v1; // esi int v2; // eax signed int result; // eax v1 = (_DWORD *)sub_75BE80(a1, -1001001); v2 = sub_75B1D0((int)a1); result = sub_76E0F0(v2, a1, v1); if ( result < 0 ) { if ( sub_75B720(a1, -1) ) { sub_75D9F0((int)a1, 1); sub_75B2D0(a1, -2); sub_75D040((int)a1, 2); } sub_75CFA0(a1); } return result; } //----- (0076E2A0) -------------------------------------------------------- signed int __cdecl sub_76E2A0(_DWORD *a1) { int v1; // edi sub_75ECA0(a1, 1, 6); v1 = sub_75F3E0((int)a1); sub_75B4C0(a1, 1); sub_75B110((int)a1, v1, 1); return 1; } //----- (0076E2E0) -------------------------------------------------------- signed int __cdecl sub_76E2E0(_DWORD *a1) { int v1; // edi sub_75ECA0(a1, 1, 6); v1 = sub_75F3E0((int)a1); sub_75B4C0(a1, 1); sub_75B110((int)a1, v1, 1); sub_75C1C0((int)a1, (int)sub_76E240, 1); return 1; } //----- (0076E330) -------------------------------------------------------- int __cdecl sub_76E330(int a1) { int v1; // eax v1 = sub_75B1D0(a1); return sub_760520(a1, v1, 0, 0); } //----- (0076E360) -------------------------------------------------------- signed int __cdecl sub_76E360(_DWORD *a1) { int v1; // eax int v2; // edi int v3; // eax char v5; // [esp+8h] [ebp-68h] v1 = sub_75BE80(a1, 1); v2 = v1; if ( !v1 ) sub_75EB40(a1, 1, (int)"coroutine expected"); if ( a1 != (_DWORD *)v1 ) { v3 = sub_75CE10(v1); if ( v3 ) { if ( v3 != 1 ) { LABEL_7: sub_75C0B0((int)a1, "dead", 4u); return 1; } } else { if ( sub_766610(v2, 0, (int)&v5) > 0 ) { sub_75C0B0((int)a1, "normal", 6u); return 1; } if ( !sub_75B1D0(v2) ) goto LABEL_7; } sub_75C0B0((int)a1, "suspended", 9u); return 1; } sub_75C0B0((int)a1, "running", 7u); return 1; } //----- (0076E410) -------------------------------------------------------- signed int __cdecl sub_76E410(int a1) { int v1; // eax v1 = sub_75C290(a1); sub_75C250(a1, v1); return 2; } //----- (0076E430) -------------------------------------------------------- signed int __cdecl sub_76E430(_DWORD *a1) { sub_75C540((int)a1, 0, 6); sub_75EF80(a1, (int)&off_A0E3F4, 0); return 1; } // A0E3F4: using guessed type char *off_A0E3F4; //----- (0076E460) -------------------------------------------------------- _DWORD *__usercall sub_76E460@(_DWORD *a1@) { DWORD v1; // eax char *v2; // eax char *v3; // eax CHAR Filename; // [esp+0h] [ebp-10Ch] v1 = GetModuleFileNameA(0, &Filename, 0x105u); if ( !v1 || v1 == 261 || (v2 = strrchr(&Filename, 92)) == 0 ) sub_75DA80(a1, "unable to get ModuleFileName"); *v2 = 0; v3 = (char *)sub_75BC70(a1, -1, 0); sub_75E700((int)a1, v3, "!", (int)&Filename); return sub_75B240(a1, -2); } //----- (0076E500) -------------------------------------------------------- int __usercall sub_76E500@(int a1@) { DWORD v1; // esi int result; // eax CHAR Buffer; // [esp+4h] [ebp-84h] v1 = GetLastError(); if ( FormatMessageA(0x1200u, 0, v1, 0, &Buffer, 0x80u, 0) ) result = sub_75C100(a1, &Buffer); else result = sub_75C190(a1, "system error %d\n", v1); return result; } //----- (0076E580) -------------------------------------------------------- int __usercall sub_76E580@(_DWORD *a1@, void *a2, int a3) { signed int v3; // eax sub_75C3A0(a1, -1001000, "_CLIBS"); sub_75C270((int)a1, a3); sub_75B4C0(a1, -1); sub_75C770(a1, -3, a2); v3 = sub_75E480(a1, -2); sub_75C8E0(a1, -2, v3 + 1); return sub_75B1F0((int)a1, -2); } //----- (0076E5D0) -------------------------------------------------------- int __cdecl sub_76E5D0(_DWORD *a1) { signed int i; // esi HMODULE v2; // eax for ( i = sub_75E480(a1, 1); i >= 1; --i ) { sub_75C4C0(a1, 1, i); v2 = (HMODULE)sub_75BDE0(a1, -1); FreeLibrary(v2); sub_75B1F0((int)a1, -2); } return 0; } //----- (0076E620) -------------------------------------------------------- int __usercall sub_76E620@(_DWORD *a1@, LPCSTR lpLibFileName, LPCSTR lpProcName) { _DWORD *v3; // edi int v4; // esi HMODULE v5; // ebx HMODULE v6; // esi int result; // eax FARPROC v8; // eax v3 = a1; sub_75C3A0(a1, -1001000, "_CLIBS"); sub_75C3A0(v3, -1, (void *)lpLibFileName); v4 = sub_75BDE0(v3, -1); sub_75B1F0((int)v3, -3); v5 = (HMODULE)v4; if ( !v4 ) { v6 = LoadLibraryExA(lpLibFileName, 0, 0); if ( !v6 ) sub_76E500((int)v3); v5 = v6; if ( !v6 ) return 1; sub_76E580(v3, (void *)lpLibFileName, (int)v6); } if ( *lpProcName == 42 ) { sub_75C250((int)v3, 1); result = 0; } else { v8 = GetProcAddress(v5, lpProcName); if ( v8 ) { sub_75C1C0((int)v3, (int)v8, 0); result = 0; } else { sub_76E500((int)v3); result = 2; } } return result; } //----- (0076E6E0) -------------------------------------------------------- signed int __cdecl sub_76E6E0(_DWORD *a1) { const CHAR *v1; // edi const CHAR *v2; // eax int v3; // edi char *v5; // eax v1 = (const CHAR *)sub_75ED30(a1, 1, 0); v2 = (const CHAR *)sub_75ED30(a1, 2, 0); v3 = sub_76E620(a1, v1, v2); if ( !v3 ) return 1; sub_75BFE0((int)a1); sub_75B2D0(a1, -2); v5 = "open"; if ( v3 != 1 ) v5 = "init"; sub_75C100((int)a1, v5); return 3; } //----- (0076E750) -------------------------------------------------------- const char *__usercall sub_76E750@(char *a1@, char *a2@, _DWORD *a3@, char *a4, int a5) { char *v5; // edi char *i; // edi char *v7; // ebx char *v8; // eax const char *v9; // edi FILE *v10; // eax char *v12; // [esp+8h] [ebp-21Ch] char *v13; // [esp+Ch] [ebp-218h] size_t v14; // [esp+10h] [ebp-214h] v5 = a1; v13 = a4; v12 = a2; sub_75DF10((int)a3, &v14); if ( *v5 ) v13 = (char *)sub_75E700((int)a3, a4, v5, a5); while ( 1 ) { for ( i = v12; *i == 59; ++i ) ; if ( !*i ) break; v7 = strchr(i, 59); if ( !v7 ) v7 = &i[strlen(i)]; sub_75C0B0((int)a3, i, v7 - i); v12 = v7; if ( !v7 ) break; v8 = (char *)sub_75BC70(a3, -1, 0); v9 = (const char *)sub_75E700((int)a3, v8, "?", (int)v13); sub_75B240(a3, -2); v10 = fopen(v9, "r"); if ( v10 ) { fclose(v10); return v9; } sub_75C190((int)a3, "\n\tno file '%s'", (int)v9); sub_75B240(a3, -2); sub_75DEA0((size_t)&v14); } sub_75DE20((int)&v14); return 0; } //----- (0076E8B0) -------------------------------------------------------- signed int __cdecl sub_76E8B0(_DWORD *a1) { int v1; // ST28_4 char *v2; // edi char *v3; // ebx char *v4; // eax v1 = sub_75ED90(a1, 4, "\\", 0); v2 = (char *)sub_75ED90(a1, 3, ".", 0); v3 = (char *)sub_75ED30(a1, 2, 0); v4 = (char *)sub_75ED30(a1, 1, 0); if ( sub_76E750(v2, v3, a1, v4, v1) ) return 1; sub_75BFE0((int)a1); sub_75B2D0(a1, -2); return 2; } //----- (0076E930) -------------------------------------------------------- signed int __cdecl sub_76E930(_DWORD *a1) { char *v1; // ebx char *v2; // eax char *v3; // eax char *v4; // edi int v6; // eax int v7; // [esp-4h] [ebp-10h] v1 = (char *)sub_75ED30(a1, 1, 0); sub_75C3A0(a1, -1001001, "path"); v2 = (char *)sub_75BC70(a1, -1, 0); if ( !v2 ) sub_75DA80(a1, "'package.%s' must be a string", "path"); v3 = (char *)sub_76E750(".", v2, a1, v1, (int)"\\"); v4 = v3; if ( !v3 ) return 1; if ( sub_75E0A0((int)a1, v3, 0) ) { v7 = sub_75BC70(a1, -1, 0); v6 = sub_75BC70(a1, 1, 0); sub_75DA80(a1, "error loading module '%s' from file '%s':\n\t%s", v6, v4, v7); } sub_75C100((int)a1, v4); return 2; } //----- (0076EA00) -------------------------------------------------------- int __usercall sub_76EA00@(char *a1@, _DWORD *a2@, const CHAR *lpLibFileName) { const char *v3; // eax char *v4; // edi char *v5; // eax char *v6; // ebx int v7; // eax const CHAR *v8; // eax int result; // eax const CHAR *v10; // eax v3 = (const char *)sub_75E700((int)a2, a1, ".", (int)"_"); v4 = (char *)v3; v5 = strchr(v3, 45); v6 = v5; if ( v5 ) { v7 = sub_75C0B0((int)a2, v4, v5 - v4); v8 = (const CHAR *)sub_75C190((int)a2, "luaopen_%s", v7); result = sub_76E620(a2, lpLibFileName, v8); if ( result != 2 ) return result; v4 = v6 + 1; } v10 = (const CHAR *)sub_75C190((int)a2, "luaopen_%s", (int)v4); return sub_76E620(a2, lpLibFileName, v10); } //----- (0076EA80) -------------------------------------------------------- signed int __cdecl sub_76EA80(_DWORD *a1) { char *v1; // ebx char *v2; // eax const char *v3; // eax char *v4; // edi int v6; // eax int v7; // [esp-4h] [ebp-10h] v1 = (char *)sub_75ED30(a1, 1, 0); sub_75C3A0(a1, -1001001, "cpath"); v2 = (char *)sub_75BC70(a1, -1, 0); if ( !v2 ) sub_75DA80(a1, "'package.%s' must be a string", "cpath"); v3 = sub_76E750(".", v2, a1, v1, (int)"\\"); v4 = (char *)v3; if ( !v3 ) return 1; if ( sub_76EA00(v1, a1, v3) ) { v7 = sub_75BC70(a1, -1, 0); v6 = sub_75BC70(a1, 1, 0); sub_75DA80(a1, "error loading module '%s' from file '%s':\n\t%s", v6, v4, v7); } sub_75C100((int)a1, v4); return 2; } //----- (0076EB50) -------------------------------------------------------- char *__cdecl sub_76EB50(_DWORD *a1) { const char *v1; // eax char *v2; // edi char *result; // eax char *v4; // ebx const char *v5; // eax char *v6; // ebx int v7; // eax int v8; // eax int v9; // [esp-8h] [ebp-14h] char *v10; // [esp+8h] [ebp-4h] v1 = (const char *)sub_75ED30(a1, 1, 0); v2 = (char *)v1; result = strchr(v1, 46); if ( result ) { sub_75C0B0((int)a1, v2, result - v2); v10 = (char *)sub_75BC70(a1, -1, 0); sub_75C3A0(a1, -1001001, "cpath"); v4 = (char *)sub_75BC70(a1, -1, 0); if ( !v4 ) sub_75DA80(a1, "'package.%s' must be a string", "cpath"); v5 = sub_76E750(".", v4, a1, v10, (int)"\\"); v6 = (char *)v5; if ( !v5 ) return (char *)1; v7 = sub_76EA00(v2, a1, v5); if ( v7 ) { if ( v7 != 2 ) { v9 = sub_75BC70(a1, -1, 0); v8 = sub_75BC70(a1, 1, 0); sub_75DA80(a1, "error loading module '%s' from file '%s':\n\t%s", v8, v6, v9); } sub_75C190((int)a1, "\n\tno module '%s' in file '%s'", (int)v2); return (char *)1; } sub_75C100((int)a1, v6); result = (char *)2; } return result; } //----- (0076EC60) -------------------------------------------------------- signed int __cdecl sub_76EC60(_DWORD *a1) { void *v1; // edi v1 = (void *)sub_75ED30(a1, 1, 0); sub_75C3A0(a1, -1001000, "_PRELOAD"); sub_75C3A0(a1, -1, v1); if ( !sub_75B570(a1, -1) ) sub_75C190((int)a1, "\n\tno field package.preload['%s']", (int)v1); return 1; } //----- (0076ECC0) -------------------------------------------------------- int __usercall sub_76ECC0@(void *a1@, _DWORD *a2@) { signed int i; // ebx int v3; // eax int result; // eax size_t v5; // [esp+0h] [ebp-214h] sub_75DF10((int)a2, &v5); sub_75C3A0(a2, -1001001, "searchers"); if ( sub_75B570(a2, 3) != 5 ) sub_75DA80(a2, "'package.searchers' must be a table"); for ( i = 1; ; ++i ) { sub_75C4C0(a2, 3, i); if ( !sub_75B570(a2, -1) ) { sub_75B1F0((int)a2, -2); sub_75DE20((int)&v5); v3 = sub_75BC70(a2, -1, 0); sub_75DA80(a2, "module '%s' not found:%s", a1, v3); } sub_75C100((int)a2, a1); sub_75CBD0((int)a2, 1, 2, 0, 0); result = sub_75B570(a2, -2); if ( result == 6 ) break; if ( sub_75B720(a2, -2) ) { sub_75B1F0((int)a2, -2); sub_75DEA0((size_t)&v5); } else { sub_75B1F0((int)a2, -3); } } return result; } //----- (0076EDD0) -------------------------------------------------------- signed int __cdecl sub_76EDD0(_DWORD *a1) { void *v1; // edi v1 = (void *)sub_75ED30(a1, 1, 0); sub_75B1F0((int)a1, 1); sub_75C3A0(a1, -1001000, "_LOADED"); sub_75C3A0(a1, 2, v1); if ( !sub_75BBF0(a1, -1) ) { sub_75B1F0((int)a1, -2); sub_76ECC0(v1, a1); sub_75C100((int)a1, v1); sub_75B2D0(a1, -2); sub_75CBD0((int)a1, 2, 1, 0, 0); if ( sub_75B570(a1, -1) ) sub_75C770(a1, 2, v1); sub_75C3A0(a1, 2, v1); if ( !sub_75B570(a1, -1) ) { sub_75C250((int)a1, 1); sub_75B4C0(a1, -1); sub_75C770(a1, 2, v1); } } return 1; } //----- (0076EEA0) -------------------------------------------------------- int *__usercall sub_76EEA0@(int a1@, const char *a2@, int a3, char *a4, int a5) { _DWORD *v5; // esi char *v6; // edi BOOL v7; // ebx char *v8; // eax v5 = (_DWORD *)a1; v6 = getenv(a2); if ( (v6 || (v6 = getenv(a4)) != 0) && (sub_75C3A0(v5, -1001000, "LUA_NOENV"), v7 = sub_75BBF0(v5, -1), sub_75B1F0((int)v5, -2), !v7) ) { v8 = (char *)sub_75E700((int)v5, v6, ";;", (int)&unk_A0E65C); sub_75E700((int)v5, v8, &byte_A0E654, a5); sub_75B240(v5, -2); } else { sub_75C100((int)v5, (void *)a5); } sub_76E460(v5); return sub_75C770(v5, -2, (void *)a3); } //----- (0076EF50) -------------------------------------------------------- int __usercall sub_76EF50@(_DWORD *a1@) { int result; // eax int v2; // esi int (__cdecl **v3)(int); // ebx result = sub_75C540((int)a1, 4, 0); v2 = 0; if ( sub_76EC60 ) { v3 = off_A0E4DC; do { sub_75B4C0(a1, -2); sub_75C1C0((int)a1, (int)*v3, 1); result = sub_75C8E0(a1, -2, ++v2); v3 = &off_A0E4DC[v2]; } while ( *v3 ); } return result; } // A0E4DC: using guessed type int (__cdecl *off_A0E4DC[4])(int); //----- (0076EFA0) -------------------------------------------------------- signed int __cdecl sub_76EFA0(_DWORD *a1) { sub_75E5D0(a1, 0xFFF0B9D8, "_CLIBS"); sub_75C540((int)a1, 0, 1); sub_75C1C0((int)a1, (int)sub_76E5D0, 0); sub_75C770(a1, -2, "__gc"); sub_75C9A0(a1, -2); sub_75C540((int)a1, 0, 2); sub_75EF80(a1, (int)&off_A0E4B4, 0); sub_76EF50(a1); sub_75C770(a1, -2, "searchers"); sub_76EEA0( (int)a1, "LUA_PATH_5_2", (int)"path", "LUA_PATH", (int)"!\\lua\\?.lua;!\\lua\\?\\init.lua;!\\?.lua;!\\?\\init.lua;.\\?.lua"); sub_76EEA0((int)a1, "LUA_CPATH_5_2", (int)"cpath", "LUA_CPATH", (int)"!\\?.dll;!\\loadall.dll;.\\?.dll"); sub_75C0B0((int)a1, "\\\n;\n?\n!\n-\n", 0xAu); sub_75C770(a1, -2, "config"); sub_75E5D0(a1, 0xFFF0B9D8, "_LOADED"); sub_75C770(a1, -2, "loaded"); sub_75E5D0(a1, 0xFFF0B9D8, "_PRELOAD"); sub_75C770(a1, -2, "preload"); sub_75C4C0(a1, -1001000, 2); sub_75B4C0(a1, -2); sub_75EF80(a1, (int)&off_A0E4CC, 1); sub_75B1F0((int)a1, -2); return 1; } // A0E4B4: using guessed type char *off_A0E4B4; // A0E4CC: using guessed type char *off_A0E4CC; //----- (0076F0E0) -------------------------------------------------------- int __cdecl sub_76F0E0(_DWORD *a1) { signed int i; // edi const void *v2; // ebx FILE *v3; // eax FILE *v4; // eax FILE *v5; // eax FILE *v6; // eax int v8; // [esp+Ch] [ebp-8h] size_t v9; // [esp+10h] [ebp-4h] v8 = sub_75B1D0((int)a1); sub_75C2C0(a1, "tostring"); for ( i = 1; i <= v8; ++i ) { sub_75B4C0(a1, -1); sub_75B4C0(a1, i); sub_75CBD0((int)a1, 1, 1, 0, 0); v2 = (const void *)sub_75BC70(a1, -1, &v9); if ( !v2 ) sub_75DA80(a1, "'tostring' must return a string to 'print'"); if ( i > 1 ) { v3 = (FILE *)sub_7D6CEE(); fwrite(&unk_A091CC, 1u, 1u, v3 + 1); } v4 = (FILE *)sub_7D6CEE(); fwrite(v2, 1u, v9, v4 + 1); sub_75B1F0((int)a1, -2); } v5 = (FILE *)sub_7D6CEE(); fwrite("\n", 1u, 1u, v5 + 1); v6 = (FILE *)sub_7D6CEE(); fflush(v6 + 1); return 0; } //----- (0076F1D0) -------------------------------------------------------- signed int __cdecl sub_76F1D0(_DWORD *a1) { double v1; // st7 int v3; // eax const char *v4; // esi signed int v5; // eax int v6; // ebx const char *v7; // esi int v8; // eax int v9; // eax double v10; // [esp+14h] [ebp-1Ch] int v11; // [esp+1Ch] [ebp-14h] signed int v12; // [esp+20h] [ebp-10h] int v13; // [esp+24h] [ebp-Ch] int v14; // [esp+28h] [ebp-8h] int v15; // [esp+2Ch] [ebp-4h] if ( sub_75B570(a1, 2) > 0 ) { v3 = sub_75ED30(a1, 1, &v13); v4 = (const char *)v3; v11 = v3 + v13; v5 = sub_75EE90(a1, 2); v6 = v5; v12 = v5; v14 = 0; if ( v5 < 2 || v5 > 36 ) sub_75EB40(a1, 2, (int)"base out of range"); v7 = &v4[strspn(v4, asc_A0E97C)]; if ( *v7 == 45 ) { v14 = 1; } else if ( *v7 != 43 ) { goto LABEL_12; } ++v7; LABEL_12: if ( !isalnum(*(unsigned __int8 *)v7) ) goto LABEL_4; v10 = 0.0; do { if ( isdigit(*(unsigned __int8 *)v7) ) v8 = *v7 - 48; else v8 = toupper(*(unsigned __int8 *)v7) - 55; v15 = v8; if ( v8 >= v6 ) break; v9 = *((unsigned __int8 *)v7++ + 1); v10 = (double)v12 * v10 + (double)v15; } while ( isalnum(v9) ); if ( &v7[strspn(v7, asc_A0E97C)] != (const char *)v11 ) goto LABEL_4; v1 = v10; if ( v14 ) v1 = -v10; goto LABEL_22; } v1 = sub_75B9C0(a1, 1, &v14); if ( !v14 ) { sub_75ED00(a1, 1); LABEL_4: sub_75BFE0((int)a1); return 1; } LABEL_22: sub_75C000((int)a1, v1); return 1; } //----- (0076F340) -------------------------------------------------------- void __cdecl __noreturn sub_76F340(_DWORD *a1) { int v1; // edi v1 = sub_75EF50(a1, 2, 1); sub_75B1F0((int)a1, 1); if ( sub_75B720(a1, 1) ) { if ( v1 > 0 ) { sub_75D9F0((int)a1, v1); sub_75B4C0(a1, 1); sub_75D040((int)a1, 2); } } sub_75CFA0(a1); } //----- (0076F3A0) -------------------------------------------------------- signed int __cdecl sub_76F3A0(_DWORD *a1) { sub_75ED00(a1, 1); if ( sub_75C590(a1, 1) ) sub_75E3A0(a1, 1, "__metatable"); else sub_75BFE0((int)a1); return 1; } //----- (0076F3F0) -------------------------------------------------------- signed int __cdecl sub_76F3F0(_DWORD *a1) { int v1; // edi v1 = sub_75B570(a1, 2); sub_75ECA0(a1, 1, 5); if ( v1 && v1 != 5 ) sub_75EB40(a1, 2, (int)"nil or table expected"); if ( sub_75E3A0(a1, 1, "__metatable") ) sub_75DA80(a1, "cannot change a protected metatable"); sub_75B1F0((int)a1, 2); sub_75C9A0(a1, 1); return 1; } //----- (0076F470) -------------------------------------------------------- signed int __cdecl sub_76F470(_DWORD *a1) { int v1; // eax sub_75ED00(a1, 1); sub_75ED00(a1, 2); v1 = sub_75B750(a1, 1, 2); sub_75C250((int)a1, v1); return 1; } //----- (0076F4B0) -------------------------------------------------------- signed int __cdecl sub_76F4B0(_DWORD *a1) { int v1; // eax signed int v2; // eax v1 = sub_75B570(a1, 1); if ( v1 != 5 && v1 != 4 ) sub_75EB40(a1, 1, (int)"table or string expected"); v2 = sub_75BD30(a1, 1); sub_75C040((int)a1, v2); return 1; } //----- (0076F500) -------------------------------------------------------- signed int __cdecl sub_76F500(_DWORD *a1) { sub_75ECA0(a1, 1, 5); sub_75ED00(a1, 2); sub_75B1F0((int)a1, 2); sub_75C440(a1, 1); return 1; } //----- (0076F540) -------------------------------------------------------- signed int __cdecl sub_76F540(_DWORD *a1) { sub_75ECA0(a1, 1, 5); sub_75ED00(a1, 2); sub_75ED00(a1, 3); sub_75B1F0((int)a1, 3); sub_75C810(a1, 1); return 1; } //----- (0076F580) -------------------------------------------------------- signed int __cdecl sub_76F580(_DWORD *a1) { int v1; // edi int v2; // eax signed int v3; // eax int v4; // edi int v5; // edi signed int result; // eax signed int v7; // edi signed int v8; // [esp+10h] [ebp-8h] v1 = dword_A0E868[sub_75F030(a1, 1, "collect", (const char **)off_A0E838)]; v2 = sub_75EF50(a1, 2, 0); v3 = sub_75CE20((int)a1, v1, v2); v4 = v1 - 3; v8 = v3; if ( v4 ) { v5 = v4 - 2; if ( v5 && v5 != 4 ) { sub_75C040((int)a1, v3); result = 1; } else { sub_75C250((int)a1, v3); result = 1; } } else { v7 = sub_75CE20((int)a1, 4, 0); sub_75C000((int)a1, (double)v7 * 0.0009765625 + (double)v8); sub_75C040((int)a1, v7); result = 2; } return result; } // A0E838: using guessed type char *off_A0E838[11]; //----- (0076F640) -------------------------------------------------------- signed int __cdecl sub_76F640(_DWORD *a1) { int v1; // eax void *v2; // eax sub_75ED00(a1, 1); v1 = sub_75B570(a1, 1); v2 = (void *)sub_75B600((int)a1, v1); sub_75C100((int)a1, v2); return 1; } //----- (0076F670) -------------------------------------------------------- signed int __cdecl sub_76F670(_DWORD *a1) { sub_75ECA0(a1, 1, 5); sub_75B1F0((int)a1, 2); if ( sub_75CFB0(a1, 1) ) return 2; sub_75BFE0((int)a1); return 1; } //----- (0076F6C0) -------------------------------------------------------- signed int __cdecl sub_76F6C0(_DWORD *a1) { if ( sub_75E3A0(a1, 1, "__pairs") ) { sub_75B4C0(a1, 1); sub_75CBD0((int)a1, 1, 3, 0, 0); } else { sub_75ECA0(a1, 1, 5); sub_75C1C0((int)a1, (int)sub_76F670, 0); sub_75B4C0(a1, 1); sub_75BFE0((int)a1); } return 3; } //----- (0076F730) -------------------------------------------------------- int __cdecl sub_76F730(_DWORD *a1) { signed int v1; // edi v1 = sub_75EE90(a1, 2) + 1; sub_75ECA0(a1, 1, 5); sub_75C040((int)a1, v1); sub_75C4C0(a1, 1, v1); return (sub_75B570(a1, -1) != 0) + 1; } //----- (0076F780) -------------------------------------------------------- signed int __cdecl sub_76F780(_DWORD *a1) { if ( sub_75E3A0(a1, 1, "__ipairs") ) { sub_75B4C0(a1, 1); sub_75CBD0((int)a1, 1, 3, 0, 0); } else { sub_75ECA0(a1, 1, 5); sub_75C1C0((int)a1, (int)sub_76F730, 0); sub_75B4C0(a1, 1); sub_75C040((int)a1, 0); } return 3; } //----- (0076F7F0) -------------------------------------------------------- signed int __cdecl sub_76F7F0(_DWORD *a1) { char *v1; // ebx int v2; // ST40_4 signed int v3; // esi signed int result; // eax v1 = (char *)sub_75ED90(a1, 1, 0, 0); v2 = sub_75ED90(a1, 2, 0, 0); v3 = sub_75B570(a1, 3) != -1 ? 3 : 0; if ( sub_75E0A0((int)a1, v1, v2) ) { sub_75BFE0((int)a1); sub_75B2D0(a1, -2); result = 2; } else { if ( v3 ) { sub_75B4C0(a1, v3); if ( !sub_75D2F0(a1, -2, 1) ) sub_75B1F0((int)a1, -2); } result = 1; } return result; } //----- (0076F890) -------------------------------------------------------- int __cdecl sub_76F890(_DWORD *a1, int a2, _DWORD *a3) { int result; // eax sub_75DCD0(a1, 2, (int)"too many nested functions"); sub_75B4C0(a1, 1); sub_75CBD0((int)a1, 0, 1, 0, 0); if ( sub_75B570(a1, -1) ) { if ( !sub_75B720(a1, -1) ) sub_75DA80(a1, "reader function must return a string"); sub_75B410(a1, 5); result = sub_75BC70(a1, 5, a3); } else { sub_75B1F0((int)a1, -2); *a3 = 0; result = 0; } return result; } //----- (0076F920) -------------------------------------------------------- signed int __cdecl sub_76F920(_DWORD *a1) { const char *v1; // ebx signed int v2; // edi const char *v3; // eax int v4; // eax const char *v5; // ebx signed int result; // eax int v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v1 = (const char *)sub_75BC70(a1, 1, &v7); v8 = sub_75ED90(a1, 3, "bt", 0); v2 = sub_75B570(a1, 4) != -1 ? 4 : 0; if ( v1 ) { v3 = (const char *)sub_75ED90(a1, 2, v1, 0); v4 = sub_75E360((int)a1, (int)v1, v7, v3, v8); } else { v5 = (const char *)sub_75ED90(a1, 2, "=(load)", 0); sub_75ECA0(a1, 1, 6); sub_75B1F0((int)a1, 5); v4 = sub_75CD10((int)a1, (int)sub_76F890, 0, v5, v8); } if ( v4 ) { sub_75BFE0((int)a1); sub_75B2D0(a1, -2); result = 2; } else { if ( v2 ) { sub_75B4C0(a1, v2); if ( !sub_75D2F0(a1, -2, 1) ) sub_75B1F0((int)a1, -2); } result = 1; } return result; } //----- (0076FA10) -------------------------------------------------------- int __cdecl sub_76FA10(int a1) { return sub_75B1D0(a1) - 1; } //----- (0076FA30) -------------------------------------------------------- int __cdecl sub_76FA30(_DWORD *a1) { char *v1; // edi v1 = (char *)sub_75ED90(a1, 1, 0, 0); sub_75B1F0((int)a1, 1); if ( sub_75E0A0((int)a1, v1, 0) ) sub_75CFA0(a1); sub_75CBD0((int)a1, 0, -1, 0, (int)sub_76FA10); return sub_75B1D0((int)a1) - 1; } //----- (0076FA90) -------------------------------------------------------- int __cdecl sub_76FA90(_DWORD *a1) { int v1; // eax if ( !sub_75BBF0(a1, 1) ) { v1 = sub_75ED90(a1, 2, "assertion failed!", 0); sub_75DA80(a1, "%s", v1); } return sub_75B1D0((int)a1); } //----- (0076FAE0) -------------------------------------------------------- int __cdecl sub_76FAE0(_DWORD *a1) { int v1; // ebx int result; // eax signed int v3; // eax int v4; // esi v1 = sub_75B1D0((int)a1); if ( sub_75B570(a1, 1) != 4 || *(_BYTE *)sub_75BC70(a1, 1, 0) != 35 ) { v3 = sub_75EE90(a1, 1); v4 = v3; if ( v3 >= 0 ) { if ( v3 > v1 ) v4 = v1; } else { v4 = v1 + v3; } if ( v4 < 1 ) sub_75EB40(a1, 1, (int)"index out of range"); result = v1 - v4; } else { sub_75C040((int)a1, v1 - 1); result = 1; } return result; } //----- (0076FB60) -------------------------------------------------------- int __cdecl sub_76FB60(_DWORD *a1) { int v1; // edi int result; // eax v1 = sub_75CBA0((int)a1, 0); if ( sub_75B0A0(a1, 1) ) { sub_75C250((int)a1, v1 == 1); sub_75B410(a1, 1); result = sub_75B1D0((int)a1); } else { sub_75B1F0((int)a1, 0); sub_75C250((int)a1, 0); sub_75C100((int)a1, "stack overflow"); result = 2; } return result; } //----- (0076FBD0) -------------------------------------------------------- int __cdecl sub_76FBD0(_DWORD *a1) { int v1; // eax int v2; // edi int result; // eax sub_75ED00(a1, 1); sub_75BFE0((int)a1); sub_75B2D0(a1, 1); v1 = sub_75B1D0((int)a1); v2 = sub_75CC50((int)a1, v1 - 2, -1, 0, 0, (int)sub_76FB60); if ( sub_75B0A0(a1, 1) ) { sub_75C250((int)a1, v2 == 0); sub_75B410(a1, 1); result = sub_75B1D0((int)a1); } else { sub_75B1F0((int)a1, 0); sub_75C250((int)a1, 0); sub_75C100((int)a1, "stack overflow"); result = 2; } return result; } //----- (0076FC70) -------------------------------------------------------- int __cdecl sub_76FC70(_DWORD *a1) { int v1; // edi int v2; // edi int result; // eax v1 = sub_75B1D0((int)a1); if ( v1 < 2 ) sub_75EB40(a1, 2, (int)"value expected"); sub_75B4C0(a1, 1); sub_75B430(a1, 2, 1); sub_75B410(a1, 2); v2 = sub_75CC50((int)a1, v1 - 2, -1, 1, 0, (int)sub_76FB60); if ( sub_75B0A0(a1, 1) ) { sub_75C250((int)a1, v2 == 0); sub_75B410(a1, 1); result = sub_75B1D0((int)a1); } else { sub_75B1F0((int)a1, 0); sub_75C250((int)a1, 0); sub_75C100((int)a1, "stack overflow"); result = 2; } return result; } //----- (0076FD30) -------------------------------------------------------- signed int __cdecl sub_76FD30(_DWORD *a1) { sub_75ED00(a1, 1); sub_75E4D0(a1, 1u, 0); return 1; } //----- (0076FD60) -------------------------------------------------------- signed int __cdecl sub_76FD60(_DWORD *a1) { sub_75C4C0(a1, -1001000, 2); sub_75C4C0(a1, -1001000, 2); sub_75C770(a1, -2, "_G"); sub_75EF80(a1, (int)&off_A0E898, 0); sub_75C0B0((int)a1, "Lua 5.2", 7u); sub_75C770(a1, -2, "_VERSION"); return 1; } // A0E898: using guessed type char *off_A0E898; //----- (0076FDC0) -------------------------------------------------------- void __cdecl __noreturn sub_76FDC0(int a1) { int savedregs; // [esp+0h] [ebp+0h] sub_766EB0(a1, "memory allocation error: block too big", savedregs); } //----- (0076FDE0) -------------------------------------------------------- int __cdecl sub_76FDE0(int a1, int a2, int a3, int a4) { int v4; // esi int result; // eax v4 = *(_DWORD *)(a1 + 12); result = (*(int (__cdecl **)(_DWORD, int, int, int))v4)(*(_DWORD *)(v4 + 4), a2, a3, a4); if ( !result ) { if ( a4 ) { if ( !*(_BYTE *)(v4 + 55) || (sub_762E70(a1, 1), (result = (*(int (__cdecl **)(_DWORD, int, int, int))v4)(*(_DWORD *)(v4 + 4), a2, a3, a4)) == 0) ) { sub_75FEE0(a1, 4); } } } *(_DWORD *)(v4 + 12) += a4 - (a2 != 0 ? a3 : 0); return result; } //----- (0076FE50) -------------------------------------------------------- int __cdecl sub_76FE50(int a1, int a2, int *a3, unsigned int a4, int a5, int a6) { int v6; // esi int v7; // ecx int result; // eax int v9; // [esp+0h] [ebp-8h] v6 = a5; v7 = *a3; if ( *a3 < a5 / 2 ) { v6 = 2 * v7; if ( 2 * v7 < 4 ) v6 = 4; } else if ( v7 >= a5 ) { sub_766EB0(a1, "too many %s (limit is %d)", a6); } if ( v6 + 1 > 0xFFFFFFFD / a4 ) sub_766EB0(a1, "memory allocation error: block too big", v9); result = sub_76FDE0(a1, a2, a4 * v7, a4 * v6); *a3 = v6; return result; } //----- (0076FED0) -------------------------------------------------------- char __cdecl sub_76FED0(char a1) { int v1; // ecx int *v2; // esi unsigned int v3; // eax int v4; // edi int v5; // eax char result; // al v2 = *(int **)(v1 + 60); v3 = v2[2]; if ( v2[1] + 1 > v3 ) { if ( v3 >= 0x7FFFFFFE ) sub_76FFF0(v1, (int)"lexical element too long", 0); v4 = 2 * v3; if ( 2 * v3 + 1 > 0xFFFFFFFD ) sub_76FDC0(*(_DWORD *)(v1 + 52)); v5 = sub_76FDE0(*(_DWORD *)(v1 + 52), *v2, v3, 2 * v3); v2[2] = v4; *v2 = v5; } result = a1; *(_BYTE *)(v2[1]++ + *v2) = a1; return result; } //----- (0076FF40) -------------------------------------------------------- int __cdecl sub_76FF40(int a1) { signed int v1; // ebx int result; // eax v1 = 0; do { result = sub_7676A0(a1, *(&off_A0EB70 + v1)); *(_BYTE *)(result + 5) |= 0x20u; *(_BYTE *)(result + 6) = ++v1; } while ( v1 < 22 ); return result; } //----- (0076FF80) -------------------------------------------------------- int __cdecl sub_76FF80(int a1, signed int a2) { int result; // eax if ( a2 >= 257 ) { result = dword_A0E76C[a2]; if ( a2 < 286 ) result = sub_75FD10(*(_DWORD *)(a1 + 52), "'%s'", result); } else if ( byte_A0ED31[a2] & 4 ) { result = sub_75FD10(*(_DWORD *)(a1 + 52), "'%c'", a2); } else { result = sub_75FD10(*(_DWORD *)(a1 + 52), "char(%d)", a2); } return result; } //----- (0076FFF0) -------------------------------------------------------- void __cdecl __noreturn sub_76FFF0(int a1, int a2, signed int a3) { int v3; // ST0C_4 int v4; // ebx int v5; // [esp+Ch] [ebp-3Ch] sub_75FD30(&v5, (char *)(*(_DWORD *)(a1 + 68) + 16), 60); v3 = *(_DWORD *)(a1 + 4); v4 = sub_75FD10(*(_DWORD *)(a1 + 52), "%s:%d: %s", (int)&v5); if ( a3 ) { if ( a3 < 287 || a3 > 289 ) { sub_76FF80(a1, a3); } else { sub_76FED0(0); sub_75FD10(*(_DWORD *)(a1 + 52), "'%s'", **(_DWORD **)(a1 + 60)); } sub_75FD10(*(_DWORD *)(a1 + 52), "%s near %s", v4); } sub_75FEE0(*(_DWORD *)(a1 + 52), 3); } //----- (00770090) -------------------------------------------------------- void __cdecl __noreturn sub_770090(int a1, int a2) { sub_76FFF0(a1, a2, *(_DWORD *)(a1 + 16)); } //----- (007700B0) -------------------------------------------------------- int __cdecl sub_7700B0(int a1, void *a2, size_t a3) { int v3; // esi int v4; // edi int *v5; // eax int *v6; // eax v3 = *(_DWORD *)(a1 + 52); v4 = sub_767620(*(_DWORD *)(a1 + 52), a2, a3); v5 = *(int **)(v3 + 8); *(_DWORD *)(v3 + 8) = v5 + 2; *v5 = v4; v5[1] = *(unsigned __int8 *)(v4 + 4) | 0x7FF7A540; v6 = sub_765EA0(v3, *(_DWORD *)(*(_DWORD *)(a1 + 48) + 4), (int *)(*(_DWORD *)(v3 + 8) - 8)); if ( v6[1] == 2146936064 ) { *v6 = 1; v6[1] = 2146936065; if ( *(_DWORD *)(*(_DWORD *)(v3 + 12) + 12) > 0 ) sub_7630F0(v3); } *(_DWORD *)(v3 + 8) -= 8; return v4; } //----- (00770130) -------------------------------------------------------- signed int __usercall sub_770130@(signed int *a1@) { int *v1; // eax int v2; // ecx signed int v3; // edi signed int v4; // ecx unsigned __int8 *v5; // edx signed int result; // eax _DWORD *v7; // eax int v8; // ecx signed int v9; // ecx unsigned __int8 *v10; // edx v1 = (int *)a1[14]; v2 = *v1; v3 = *a1; --*v1; if ( v2 ) { v4 = a1[14]; v5 = *(unsigned __int8 **)(v4 + 4); result = *v5; *(_DWORD *)(v4 + 4) = v5 + 1; } else { result = sub_767A60(a1[14]); } *a1 = result; if ( (result == 10 || result == 13) && result != v3 ) { v7 = (_DWORD *)a1[14]; v8 = (*v7)--; if ( v8 ) { v9 = a1[14]; v10 = *(unsigned __int8 **)(v9 + 4); result = *v10; *(_DWORD *)(v9 + 4) = v10 + 1; } else { result = sub_767A60(a1[14]); } *a1 = result; } if ( ++a1[1] >= 2147483645 ) sub_76FFF0((int)a1, (int)"chunk has too many lines", a1[4]); return result; } //----- (007701C0) -------------------------------------------------------- int __cdecl sub_7701C0(int a1, int a2, int a3, int a4, int a5) { int v5; // eax int result; // eax *(_DWORD *)a2 = a5; *(_DWORD *)(a2 + 4) = 1; *(_DWORD *)(a2 + 8) = 1; *(_BYTE *)(a2 + 76) = 46; *(_DWORD *)(a2 + 52) = a1; *(_DWORD *)(a2 + 32) = 286; *(_DWORD *)(a2 + 56) = a3; *(_DWORD *)(a2 + 48) = 0; *(_DWORD *)(a2 + 68) = a4; v5 = sub_7676A0(a1, "_ENV"); *(_DWORD *)(a2 + 72) = v5; *(_BYTE *)(v5 + 5) |= 0x20u; **(_DWORD **)(a2 + 60) = sub_76FDE0( *(_DWORD *)(a2 + 52), **(_DWORD **)(a2 + 60), *(_DWORD *)(*(_DWORD *)(a2 + 60) + 8), 32); result = *(_DWORD *)(a2 + 60); *(_DWORD *)(result + 8) = 32; return result; } //----- (00770240) -------------------------------------------------------- int __usercall sub_770240@(int *a1@, char *a2) { _DWORD *v2; // eax int v3; // ecx int v4; // ecx unsigned __int8 *v5; // edx int v6; // eax if ( !*a1 || !strchr(a2, *a1) ) return 0; sub_76FED0(*a1); v2 = (_DWORD *)a1[14]; v3 = (*v2)--; if ( v3 ) { v4 = a1[14]; v5 = *(unsigned __int8 **)(v4 + 4); v6 = *v5; *(_DWORD *)(v4 + 4) = v5 + 1; *a1 = v6; } else { *a1 = sub_767A60(a1[14]); } return 1; } //----- (007702B0) -------------------------------------------------------- BOOL __usercall sub_7702B0@(int a1@, int a2) { char v2; // bl char v3; // dl int *v4; // ecx int v5; // eax int v6; // ecx BOOL result; // eax int *v8; // ecx int v9; // eax char v10; // dl int v11; // ecx v2 = *(_BYTE *)(a1 + 76); v3 = *localeconv()->decimal_point; v4 = *(int **)(a1 + 60); *(_BYTE *)(a1 + 76) = v3; v5 = v4[1]; v6 = *v4; while ( v5 ) { if ( *(_BYTE *)(v6 + --v5) == v2 ) *(_BYTE *)(v6 + v5) = v3; } result = sub_75F990(**(char ***)(a1 + 60), *(_DWORD *)(*(_DWORD *)(a1 + 60) + 4) - 1, a2); if ( !result ) { v8 = *(int **)(a1 + 60); v9 = v8[1]; v10 = *(_BYTE *)(a1 + 76); v11 = *v8; while ( v9 ) { if ( *(_BYTE *)(v11 + --v9) == v10 ) *(_BYTE *)(v11 + v9) = 46; } sub_76FFF0(a1, (int)"malformed number", 287); } return result; } //----- (00770330) -------------------------------------------------------- BOOL __usercall sub_770330@(int *a1@, int a2) { int v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // ecx int v6; // ecx unsigned __int8 *v7; // edx signed int v8; // eax int *v9; // edi unsigned int v10; // eax int v11; // ecx int v12; // ebx _DWORD *v13; // eax int v14; // ecx int v15; // ecx unsigned __int8 *v16; // edx int v17; // eax _DWORD *v18; // eax int v19; // ecx int v20; // ecx unsigned __int8 *v21; // edx signed int v22; // eax int v23; // ecx int *v24; // edi unsigned int v25; // eax int v26; // ebx int v27; // eax _DWORD *v28; // eax int v29; // ecx int v30; // ecx unsigned __int8 *v31; // edx int v32; // eax int *v33; // ecx int v34; // eax char v35; // dl int v36; // ecx BOOL result; // eax int v38; // [esp+8h] [ebp-8h] int v39; // [esp+8h] [ebp-8h] char *v40; // [esp+Ch] [ebp-4h] v2 = (int)a1; v3 = *a1; v40 = "Ee"; sub_76FED0(*a1); v4 = *(_DWORD **)(v2 + 56); v5 = (*v4)--; if ( v5 ) { v6 = *(_DWORD *)(v2 + 56); v7 = *(unsigned __int8 **)(v6 + 4); v8 = *v7; *(_DWORD *)(v6 + 4) = v7 + 1; } else { v8 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v8; if ( v3 == 48 && sub_770240((int *)v2, "Xx") ) v40 = "Pp"; while ( 1 ) { if ( *(_DWORD *)v2 && strchr(v40, *(_DWORD *)v2) ) { v9 = *(int **)(v2 + 60); v10 = v9[2]; v38 = *(_DWORD *)v2; if ( v9[1] + 1 > v10 ) { if ( v10 >= 0x7FFFFFFE ) goto LABEL_31; v11 = *(_DWORD *)(v2 + 52); v12 = 2 * v10; if ( 2 * v10 + 1 > 0xFFFFFFFD ) goto LABEL_40; *v9 = sub_76FDE0(v11, *v9, v10, 2 * v10); v9[2] = v12; } *(_BYTE *)(v9[1]++ + *v9) = v38; v13 = *(_DWORD **)(v2 + 56); v14 = (*v13)--; if ( v14 ) { v15 = *(_DWORD *)(v2 + 56); v16 = *(unsigned __int8 **)(v15 + 4); v17 = *v16; *(_DWORD *)(v15 + 4) = v16 + 1; } else { v17 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v17; if ( v17 && strchr("+-", v17) ) { sub_76FED0(*(_DWORD *)v2); v18 = *(_DWORD **)(v2 + 56); v19 = (*v18)--; if ( v19 ) { v20 = *(_DWORD *)(v2 + 56); v21 = *(unsigned __int8 **)(v20 + 4); v22 = *v21; *(_DWORD *)(v20 + 4) = v21 + 1; } else { v22 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v22; } } v23 = *(_DWORD *)v2; v39 = *(_DWORD *)v2; if ( !(byte_A0ED31[*(_DWORD *)v2] & 0x10) && v23 != 46 ) break; v24 = *(int **)(v2 + 60); v25 = v24[2]; if ( v24[1] + 1 > v25 ) { if ( v25 >= 0x7FFFFFFE ) LABEL_31: sub_76FFF0(v2, (int)"lexical element too long", 0); v26 = 2 * v25; if ( 2 * v25 + 1 > 0xFFFFFFFD ) { v11 = *(_DWORD *)(v2 + 52); LABEL_40: sub_76FDC0(v11); } v27 = sub_76FDE0(*(_DWORD *)(v2 + 52), *v24, v25, 2 * v25); LOBYTE(v23) = v39; *v24 = v27; v24[2] = v26; } *(_BYTE *)(v24[1]++ + *v24) = v23; v28 = *(_DWORD **)(v2 + 56); v29 = (*v28)--; if ( v29 ) { v30 = *(_DWORD *)(v2 + 56); v31 = *(unsigned __int8 **)(v30 + 4); v32 = *v31; *(_DWORD *)(v30 + 4) = v31 + 1; *(_DWORD *)v2 = v32; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } } sub_76FED0(0); v33 = *(int **)(v2 + 60); v34 = v33[1]; v35 = *(_BYTE *)(v2 + 76); v36 = *v33; while ( v34 ) { if ( *(_BYTE *)(v36 + --v34) == 46 ) *(_BYTE *)(v36 + v34) = v35; } result = sub_75F990(**(char ***)(v2 + 60), *(_DWORD *)(*(_DWORD *)(v2 + 60) + 4) - 1, a2); if ( !result ) result = sub_7702B0(v2, a2); return result; } //----- (00770590) -------------------------------------------------------- int __usercall sub_770590@(signed int *a1@) { signed int v1; // esi _DWORD *v2; // eax int v3; // ecx signed int v4; // ecx unsigned __int8 *v5; // edx signed int v6; // eax int *v7; // esi unsigned int v8; // eax int v9; // ebx _DWORD *v10; // eax int v11; // ecx signed int v12; // ecx unsigned __int8 *v13; // edx signed int v14; // eax int result; // eax signed int v16; // [esp+4h] [ebp-Ch] signed int v17; // [esp+8h] [ebp-8h] int v18; // [esp+Ch] [ebp-4h] v1 = *a1; v18 = 0; v16 = *a1; sub_76FED0(*a1); v2 = (_DWORD *)a1[14]; v3 = (*v2)--; if ( v3 ) { v4 = a1[14]; v5 = *(unsigned __int8 **)(v4 + 4); v6 = *v5; *(_DWORD *)(v4 + 4) = v5 + 1; } else { v6 = sub_767A60(a1[14]); } *a1 = v6; if ( v6 == 61 ) { do { v7 = (int *)a1[15]; v8 = v7[2]; v17 = *a1; if ( v7[1] + 1 > v8 ) { if ( v8 >= 0x7FFFFFFE ) sub_76FFF0((int)a1, (int)"lexical element too long", 0); v9 = 2 * v8; if ( 2 * v8 + 1 > 0xFFFFFFFD ) sub_76FDC0(a1[13]); *v7 = sub_76FDE0(a1[13], *v7, v8, 2 * v8); v7[2] = v9; } *(_BYTE *)(*v7 + v7[1]++) = v17; v10 = (_DWORD *)a1[14]; v11 = (*v10)--; if ( v11 ) { v12 = a1[14]; v13 = *(unsigned __int8 **)(v12 + 4); v14 = *v13; *(_DWORD *)(v12 + 4) = v13 + 1; } else { v14 = sub_767A60(a1[14]); } ++v18; *a1 = v14; } while ( v14 == 61 ); v1 = v16; } if ( *a1 == v1 ) result = v18; else result = -1 - v18; return result; } //----- (007706A0) -------------------------------------------------------- signed int __usercall sub_7706A0@(signed int *a1@, signed int *a2, int a3) { signed int *v3; // esi _DWORD *v4; // eax int v5; // ecx signed int v6; // ecx unsigned __int8 *v7; // edx signed int v8; // eax signed int v9; // ecx _DWORD *v10; // eax int v11; // ecx signed int v12; // ecx unsigned __int8 *v13; // edx signed int result; // eax int *v15; // edi unsigned int v16; // eax int v17; // ebx int *v18; // edi unsigned int v19; // eax int v20; // ebx int v21; // eax _DWORD *v22; // eax int v23; // ecx signed int v24; // ecx unsigned __int8 *v25; // edx signed int v26; // eax const char *v27; // eax signed int v28; // [esp+Ch] [ebp-4h] v3 = a1; sub_76FED0(*a1); v4 = (_DWORD *)v3[14]; v5 = (*v4)--; if ( v5 ) { v6 = v3[14]; v7 = *(unsigned __int8 **)(v6 + 4); v8 = *v7; *(_DWORD *)(v6 + 4) = v7 + 1; } else { v8 = sub_767A60(v3[14]); } *v3 = v8; if ( v8 == 10 || v8 == 13 ) sub_770130(v3); while ( 1 ) { v9 = *v3; v28 = *v3; switch ( *v3 ) { case 4294967295: v27 = "unfinished long string"; if ( !a2 ) v27 = "unfinished long comment"; sub_76FFF0((int)v3, (int)v27, 286); return result; case 10: case 13: v15 = (int *)v3[15]; v16 = v15[2]; if ( v15[1] + 1 <= v16 ) goto LABEL_15; if ( v16 >= 0x7FFFFFFE ) goto LABEL_33; v17 = 2 * v16; if ( 2 * v16 + 1 > 0xFFFFFFFD ) sub_76FDC0(v3[13]); *v15 = sub_76FDE0(v3[13], *v15, v16, 2 * v16); v15[2] = v17; LABEL_15: *(_BYTE *)(*v15 + v15[1]++) = 10; sub_770130(v3); if ( !a2 ) *(_DWORD *)(v3[15] + 4) = 0; continue; case 93: if ( sub_770590(v3) != a3 ) continue; sub_76FED0(*v3); v10 = (_DWORD *)v3[14]; v11 = (*v10)--; if ( v11 ) { v12 = v3[14]; v13 = *(unsigned __int8 **)(v12 + 4); result = *v13; *(_DWORD *)(v12 + 4) = v13 + 1; } else { result = sub_767A60(v3[14]); } *v3 = result; if ( a2 ) { result = sub_7700B0((int)v3, (void *)(*(_DWORD *)v3[15] + a3 + 2), *(_DWORD *)(v3[15] + 4) - 2 * a3 - 4); *a2 = result; } return result; default: if ( a2 ) { v18 = (int *)v3[15]; v19 = v18[2]; if ( v18[1] + 1 > v19 ) { if ( v19 >= 0x7FFFFFFE ) LABEL_33: sub_76FFF0((int)v3, (int)"lexical element too long", 0); v20 = 2 * v19; if ( 2 * v19 + 1 > 0xFFFFFFFD ) sub_76FDC0(v3[13]); v21 = sub_76FDE0(v3[13], *v18, v19, 2 * v19); LOBYTE(v9) = v28; *v18 = v21; v18[2] = v20; } *(_BYTE *)(v18[1]++ + *v18) = v9; } v22 = (_DWORD *)v3[14]; v23 = (*v22)--; if ( v23 ) { v24 = v3[14]; v25 = *(unsigned __int8 **)(v24 + 4); v26 = *v25; *(_DWORD *)(v24 + 4) = v25 + 1; *v3 = v26; } else { *v3 = sub_767A60(v3[14]); } break; } } } //----- (00770930) -------------------------------------------------------- void __cdecl __noreturn sub_770930(int a1, int a2, int a3, int a4) { int v4; // edi int v5; // ebx int v6; // ecx int *v7; // esi unsigned int v8; // eax int v9; // edi int v10; // eax char v11; // [esp+Ch] [ebp-4h] v4 = a1; v5 = 0; *(_DWORD *)(*(_DWORD *)(a1 + 60) + 4) = 0; sub_76FED0(92); if ( a3 > 0 ) { do { v6 = *(_DWORD *)(a2 + 4 * v5); v11 = *(_DWORD *)(a2 + 4 * v5); if ( v6 == -1 ) break; v7 = *(int **)(v4 + 60); v8 = v7[2]; if ( v7[1] + 1 > v8 ) { if ( v8 >= 0x7FFFFFFE ) sub_76FFF0(v4, (int)"lexical element too long", 0); v9 = 2 * v8; if ( 2 * v8 + 1 > 0xFFFFFFFD ) sub_76FDC0(*(_DWORD *)(a1 + 52)); v10 = sub_76FDE0(*(_DWORD *)(a1 + 52), *v7, v8, 2 * v8); LOBYTE(v6) = v11; v7[2] = v9; v4 = a1; *v7 = v10; } *(_BYTE *)(v7[1]++ + *v7) = v6; ++v5; } while ( v5 < a3 ); } sub_76FFF0(v4, a4, 289); } //----- (007709E0) -------------------------------------------------------- int __usercall sub_7709E0@(int *a1@) { int v1; // ebx signed int v2; // edi _DWORD *v3; // eax int v4; // ecx int v5; // ecx unsigned __int8 *v6; // edx int v7; // eax bool v8; // zf int v10[3]; // [esp+8h] [ebp-10h] v1 = 0; v10[0] = 120; v2 = 1; do { v3 = (_DWORD *)a1[14]; v4 = (*v3)--; if ( v4 ) { v5 = a1[14]; v6 = *(unsigned __int8 **)(v5 + 4); v7 = *v6; *(_DWORD *)(v5 + 4) = v6 + 1; } else { v7 = sub_767A60(a1[14]); } *a1 = v7; v8 = (byte_A0ED31[v7] & 0x10) == 0; v10[v2] = v7; if ( v8 ) sub_770930((int)a1, (int)v10, v2 + 1, (int)"hexadecimal digit expected"); ++v2; v1 = sub_75F7D0(v7) + 16 * v1; } while ( v2 < 3 ); return v1; } // 7709E0: using guessed type int var_10[3]; //----- (00770A70) -------------------------------------------------------- int __usercall sub_770A70@(int *a1@) { int v1; // edi int v2; // ebx int v3; // eax _DWORD *v4; // eax int v5; // ecx int v6; // ecx unsigned __int8 *v7; // edx signed int v8; // eax int v10[3]; // [esp+8h] [ebp-10h] v1 = 0; v2 = 0; do { v3 = *a1; if ( !(byte_A0ED31[*a1] & 2) ) break; v1 = v3 + 10 * v1 - 48; v10[v2] = v3; v4 = (_DWORD *)a1[14]; v5 = (*v4)--; if ( v5 ) { v6 = a1[14]; v7 = *(unsigned __int8 **)(v6 + 4); v8 = *v7; *(_DWORD *)(v6 + 4) = v7 + 1; } else { v8 = sub_767A60(a1[14]); } ++v2; *a1 = v8; } while ( v2 < 3 ); if ( v1 > 255 ) sub_770930((int)a1, (int)v10, v2, (int)"decimal escape too large"); return v1; } // 770A70: using guessed type int var_10[3]; //----- (00770B10) -------------------------------------------------------- int __usercall sub_770B10@(signed int *a1@, int a2, int *a3) { signed int *v3; // esi _DWORD *v4; // eax int v5; // ecx signed int v6; // ecx unsigned __int8 *v7; // edx signed int v8; // eax signed int v9; // ecx _DWORD *v10; // eax int v11; // ecx signed int v12; // ecx unsigned __int8 *v13; // edx signed int v14; // eax _DWORD *v15; // eax int v16; // ecx signed int v17; // ecx unsigned __int8 *v18; // edx signed int v19; // eax _DWORD *v20; // eax int v21; // ecx signed int v22; // ecx unsigned __int8 *v23; // edx signed int v24; // eax _DWORD *v25; // eax int v26; // ecx signed int v27; // ecx unsigned __int8 *v28; // edx signed int v29; // eax int *v30; // edi unsigned int v31; // eax int v32; // ebx int *v33; // edi unsigned int v34; // eax int v35; // ebx int v36; // eax _DWORD *v37; // eax int v38; // ecx signed int v39; // ecx unsigned __int8 *v40; // edx signed int v41; // eax _DWORD *v42; // eax int v43; // ecx signed int v44; // ecx unsigned __int8 *v45; // edx signed int v46; // eax int result; // eax signed int v48; // [esp+4h] [ebp-4h] char v49; // [esp+4h] [ebp-4h] v3 = a1; sub_76FED0(*a1); v4 = (_DWORD *)v3[14]; v5 = (*v4)--; if ( v5 ) { v6 = v3[14]; v7 = *(unsigned __int8 **)(v6 + 4); v8 = *v7; *(_DWORD *)(v6 + 4) = v7 + 1; } else { v8 = sub_767A60(v3[14]); } *v3 = v8; while ( *v3 != a2 ) { v9 = *v3; v48 = *v3; switch ( *v3 ) { case 4294967295: sub_76FFF0((int)v3, (int)"unfinished string", 286); return result; case 10: case 13: sub_76FFF0((int)v3, (int)"unfinished string", 289); return result; case 92: v10 = (_DWORD *)v3[14]; v11 = (*v10)--; if ( v11 ) { v12 = v3[14]; v13 = *(unsigned __int8 **)(v12 + 4); v14 = *v13; *(_DWORD *)(v12 + 4) = v13 + 1; } else { v14 = sub_767A60(v3[14]); } *v3 = v14; switch ( v14 ) { case 4294967295: continue; case 10: case 13: sub_770130(v3); v49 = 10; goto LABEL_37; case 34: case 39: case 92: goto LABEL_18; case 97: v49 = 7; goto LABEL_19; case 98: v49 = 8; goto LABEL_19; case 102: v49 = 12; goto LABEL_19; case 110: v49 = 10; goto LABEL_19; case 114: v49 = 13; goto LABEL_19; case 116: v49 = 9; goto LABEL_19; case 118: v49 = 11; goto LABEL_19; case 120: LOBYTE(v14) = sub_7709E0(v3); LABEL_18: v49 = v14; LABEL_19: v15 = (_DWORD *)v3[14]; v16 = (*v15)--; if ( v16 ) { v17 = v3[14]; v18 = *(unsigned __int8 **)(v17 + 4); v19 = *v18; *(_DWORD *)(v17 + 4) = v18 + 1; *v3 = v19; } else { *v3 = sub_767A60(v3[14]); } goto LABEL_37; case 122: v20 = (_DWORD *)v3[14]; v21 = (*v20)--; if ( v21 ) { v22 = v3[14]; v23 = *(unsigned __int8 **)(v22 + 4); v24 = *v23; *(_DWORD *)(v22 + 4) = v23 + 1; } else { v24 = sub_767A60(v3[14]); } *v3 = v24; while ( byte_A0ED31[*v3] & 8 ) { if ( *v3 == 10 || *v3 == 13 ) { sub_770130(v3); } else { v25 = (_DWORD *)v3[14]; v26 = (*v25)--; if ( v26 ) { v27 = v3[14]; v28 = *(unsigned __int8 **)(v27 + 4); v29 = *v28; *(_DWORD *)(v27 + 4) = v28 + 1; *v3 = v29; } else { *v3 = sub_767A60(v3[14]); } } } continue; default: if ( !(byte_A0ED31[v14] & 2) ) sub_770930((int)v3, (int)v3, 1, (int)"invalid escape sequence"); v49 = sub_770A70(v3); LABEL_37: v30 = (int *)v3[15]; v31 = v30[2]; if ( v30[1] + 1 <= v31 ) goto LABEL_41; if ( v31 >= 0x7FFFFFFE ) goto LABEL_56; v32 = 2 * v31; if ( 2 * v31 + 1 > 0xFFFFFFFD ) sub_76FDC0(v3[13]); *v30 = sub_76FDE0(v3[13], *v30, v31, 2 * v31); v30[2] = v32; LABEL_41: *(_BYTE *)(*v30 + v30[1]++) = v49; break; } break; default: v33 = (int *)v3[15]; v34 = v33[2]; if ( v33[1] + 1 > v34 ) { if ( v34 >= 0x7FFFFFFE ) LABEL_56: sub_76FFF0((int)v3, (int)"lexical element too long", 0); v35 = 2 * v34; if ( 2 * v34 + 1 > 0xFFFFFFFD ) sub_76FDC0(v3[13]); v36 = sub_76FDE0(v3[13], *v33, v34, 2 * v34); LOBYTE(v9) = v48; *v33 = v36; v33[2] = v35; } *(_BYTE *)(v33[1]++ + *v33) = v9; v37 = (_DWORD *)v3[14]; v38 = (*v37)--; if ( v38 ) { v39 = v3[14]; v40 = *(unsigned __int8 **)(v39 + 4); v41 = *v40; *(_DWORD *)(v39 + 4) = v40 + 1; } else { v41 = sub_767A60(v3[14]); } *v3 = v41; break; } } sub_76FED0(*v3); v42 = (_DWORD *)v3[14]; v43 = (*v42)--; if ( v43 ) { v44 = v3[14]; v45 = *(unsigned __int8 **)(v44 + 4); v46 = *v45; *(_DWORD *)(v44 + 4) = v45 + 1; } else { v46 = sub_767A60(v3[14]); } *v3 = v46; result = sub_7700B0((int)v3, (void *)(*(_DWORD *)v3[15] + 1), *(_DWORD *)(v3[15] + 4) - 2); *a3 = result; return result; } //----- (00770F90) -------------------------------------------------------- int __usercall sub_770F90@(_DWORD *a1@, int *a2) { int v2; // esi unsigned int v3; // eax _DWORD *v4; // eax int v5; // ecx int v6; // ecx unsigned __int8 *v7; // edx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx unsigned __int8 *v12; // edx signed int v13; // eax _DWORD *v14; // eax int v15; // ecx int v16; // ecx unsigned __int8 *v17; // edx signed int v18; // eax int v19; // eax _DWORD *v20; // eax unsigned int v21; // ecx int v22; // ecx unsigned __int8 *v23; // edx signed int v24; // eax signed int v25; // edi _DWORD *v26; // eax int v27; // ecx int v28; // ecx unsigned __int8 *v29; // edx signed int v30; // eax int result; // eax int v32; // eax _DWORD *v33; // eax int v34; // ecx int v35; // ecx unsigned __int8 *v36; // edx signed int v37; // eax _DWORD *v38; // eax int v39; // ecx int v40; // ecx unsigned __int8 *v41; // edx int v42; // eax _DWORD *v43; // eax int v44; // ecx int v45; // ecx unsigned __int8 *v46; // edx signed int v47; // eax _DWORD *v48; // eax int v49; // ecx int v50; // ecx unsigned __int8 *v51; // edx int v52; // eax _DWORD *v53; // eax int v54; // ecx int v55; // ecx unsigned __int8 *v56; // edx signed int v57; // eax _DWORD *v58; // eax int v59; // ecx int v60; // ecx unsigned __int8 *v61; // edx int v62; // eax _DWORD *v63; // eax int v64; // ecx int v65; // ecx unsigned __int8 *v66; // edx signed int v67; // eax _DWORD *v68; // eax int v69; // ecx int v70; // ecx unsigned __int8 *v71; // edx int v72; // eax _DWORD *v73; // eax int v74; // ecx int v75; // ecx unsigned __int8 *v76; // edx signed int v77; // eax _DWORD *v78; // eax int v79; // ecx int v80; // ecx unsigned __int8 *v81; // edx int v82; // eax _DWORD *v83; // eax int v84; // ecx int v85; // ecx unsigned __int8 *v86; // edx signed int v87; // eax int v88; // eax unsigned __int8 v89; // al _DWORD *v90; // eax int v91; // ecx int v92; // ecx unsigned __int8 *v93; // edx int v94; // eax v2 = (int)a1; *(_DWORD *)(a1[15] + 4) = 0; v3 = *a1 + 1; while ( 2 ) { switch ( v3 ) { case 0u: return 286; case 0xAu: case 0xCu: case 0xDu: case 0x21u: v4 = *(_DWORD **)(v2 + 56); v5 = (*v4)--; if ( v5 ) { v6 = *(_DWORD *)(v2 + 56); v7 = *(unsigned __int8 **)(v6 + 4); v8 = *v7; *(_DWORD *)(v6 + 4) = v7 + 1; *(_DWORD *)v2 = v8; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } goto LABEL_24; case 0xBu: case 0xEu: sub_770130((signed int *)v2); goto LABEL_24; case 0x23u: case 0x28u: sub_770B10((signed int *)v2, *(_DWORD *)v2, a2); return 289; case 0x2Eu: v9 = *(_DWORD **)(v2 + 56); v10 = (*v9)--; if ( v10 ) { v11 = *(_DWORD *)(v2 + 56); v12 = *(unsigned __int8 **)(v11 + 4); v13 = *v12; *(_DWORD *)(v11 + 4) = v12 + 1; } else { v13 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v13; if ( v13 != 45 ) return 45; v14 = *(_DWORD **)(v2 + 56); v15 = (*v14)--; if ( v15 ) { v16 = *(_DWORD *)(v2 + 56); v17 = *(unsigned __int8 **)(v16 + 4); v18 = *v17; *(_DWORD *)(v16 + 4) = v17 + 1; } else { v18 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v18; if ( v18 != 91 || (v19 = sub_770590((signed int *)v2), *(_DWORD *)(*(_DWORD *)(v2 + 60) + 4) = 0, v19 < 0) ) { if ( *(_DWORD *)v2 != 10 ) { do { if ( *(_DWORD *)v2 == 13 || *(_DWORD *)v2 == -1 ) break; v20 = *(_DWORD **)(v2 + 56); v21 = (*v20)--; if ( v21 <= 0 ) { v24 = sub_767A60(*(_DWORD *)(v2 + 56)); } else { v22 = *(_DWORD *)(v2 + 56); v23 = *(unsigned __int8 **)(v22 + 4); v24 = *v23; *(_DWORD *)(v22 + 4) = v23 + 1; } *(_DWORD *)v2 = v24; } while ( v24 != 10 ); } } else { sub_7706A0((signed int *)v2, 0, v19); *(_DWORD *)(*(_DWORD *)(v2 + 60) + 4) = 0; } LABEL_24: v3 = *(_DWORD *)v2 + 1; if ( v3 <= 0x7F ) continue; LABEL_25: v25 = *(_DWORD *)v2; if ( byte_A0ED31[*(_DWORD *)v2] & 1 ) { do { sub_76FED0(*(_DWORD *)v2); v26 = *(_DWORD **)(v2 + 56); v27 = (*v26)--; if ( v27 ) { v28 = *(_DWORD *)(v2 + 56); v29 = *(unsigned __int8 **)(v28 + 4); v30 = *v29; *(_DWORD *)(v28 + 4) = v29 + 1; } else { v30 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v30; } while ( byte_A0ED31[v30] & 3 ); v88 = sub_7700B0(v2, **(void ***)(v2 + 60), *(_DWORD *)(*(_DWORD *)(v2 + 60) + 4)); *a2 = v88; if ( *(_BYTE *)(v88 + 4) == 4 && (v89 = *(_BYTE *)(v88 + 6)) != 0 ) result = v89 + 256; else result = 288; } else { v90 = *(_DWORD **)(v2 + 56); v91 = (*v90)--; if ( v91 ) { v92 = *(_DWORD *)(v2 + 56); v93 = *(unsigned __int8 **)(v92 + 4); v94 = *v93; *(_DWORD *)(v92 + 4) = v93 + 1; *(_DWORD *)v2 = v94; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } result = v25; } return result; case 0x2Fu: sub_76FED0(*(_DWORD *)v2); v83 = *(_DWORD **)(v2 + 56); v84 = (*v83)--; if ( v84 ) { v85 = *(_DWORD *)(v2 + 56); v86 = *(unsigned __int8 **)(v85 + 4); v87 = *v86; *(_DWORD *)(v85 + 4) = v86 + 1; } else { v87 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v87; if ( sub_770240((int *)v2, ".") ) return (sub_770240((int *)v2, ".") != 0) + 279; if ( !(byte_A0ED31[*(_DWORD *)v2] & 2) ) return 46; LABEL_87: sub_770330((int *)v2, (int)a2); return 287; case 0x31u: case 0x32u: case 0x33u: case 0x34u: case 0x35u: case 0x36u: case 0x37u: case 0x38u: case 0x39u: case 0x3Au: goto LABEL_87; case 0x3Bu: v73 = *(_DWORD **)(v2 + 56); v74 = (*v73)--; if ( v74 ) { v75 = *(_DWORD *)(v2 + 56); v76 = *(unsigned __int8 **)(v75 + 4); v77 = *v76; *(_DWORD *)(v75 + 4) = v76 + 1; } else { v77 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v77; if ( v77 != 58 ) return 58; v78 = *(_DWORD **)(v2 + 56); v79 = (*v78)--; if ( v79 ) { v80 = *(_DWORD *)(v2 + 56); v81 = *(unsigned __int8 **)(v80 + 4); v82 = *v81; *(_DWORD *)(v80 + 4) = v81 + 1; *(_DWORD *)v2 = v82; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } return 285; case 0x3Du: v43 = *(_DWORD **)(v2 + 56); v44 = (*v43)--; if ( v44 ) { v45 = *(_DWORD *)(v2 + 56); v46 = *(unsigned __int8 **)(v45 + 4); v47 = *v46; *(_DWORD *)(v45 + 4) = v46 + 1; } else { v47 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v47; if ( v47 != 61 ) return 60; v48 = *(_DWORD **)(v2 + 56); v49 = (*v48)--; if ( v49 ) { v50 = *(_DWORD *)(v2 + 56); v51 = *(unsigned __int8 **)(v50 + 4); v52 = *v51; *(_DWORD *)(v50 + 4) = v51 + 1; *(_DWORD *)v2 = v52; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } return 283; case 0x3Eu: v33 = *(_DWORD **)(v2 + 56); v34 = (*v33)--; if ( v34 ) { v35 = *(_DWORD *)(v2 + 56); v36 = *(unsigned __int8 **)(v35 + 4); v37 = *v36; *(_DWORD *)(v35 + 4) = v36 + 1; } else { v37 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v37; if ( v37 != 61 ) return 61; v38 = *(_DWORD **)(v2 + 56); v39 = (*v38)--; if ( v39 ) { v40 = *(_DWORD *)(v2 + 56); v41 = *(unsigned __int8 **)(v40 + 4); v42 = *v41; *(_DWORD *)(v40 + 4) = v41 + 1; *(_DWORD *)v2 = v42; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } return 281; case 0x3Fu: v53 = *(_DWORD **)(v2 + 56); v54 = (*v53)--; if ( v54 ) { v55 = *(_DWORD *)(v2 + 56); v56 = *(unsigned __int8 **)(v55 + 4); v57 = *v56; *(_DWORD *)(v55 + 4) = v56 + 1; } else { v57 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v57; if ( v57 != 61 ) return 62; v58 = *(_DWORD **)(v2 + 56); v59 = (*v58)--; if ( v59 ) { v60 = *(_DWORD *)(v2 + 56); v61 = *(unsigned __int8 **)(v60 + 4); v62 = *v61; *(_DWORD *)(v60 + 4) = v61 + 1; *(_DWORD *)v2 = v62; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } return 282; case 0x5Cu: v32 = sub_770590((signed int *)v2); if ( v32 < 0 ) { if ( v32 != -1 ) sub_76FFF0(v2, (int)"invalid long string delimiter", 289); result = 91; } else { sub_7706A0((signed int *)v2, a2, v32); result = 289; } return result; case 0x7Fu: v63 = *(_DWORD **)(v2 + 56); v64 = (*v63)--; if ( v64 ) { v65 = *(_DWORD *)(v2 + 56); v66 = *(unsigned __int8 **)(v65 + 4); v67 = *v66; *(_DWORD *)(v65 + 4) = v66 + 1; } else { v67 = sub_767A60(*(_DWORD *)(v2 + 56)); } *(_DWORD *)v2 = v67; if ( v67 != 61 ) return 126; v68 = *(_DWORD **)(v2 + 56); v69 = (*v68)--; if ( v69 ) { v70 = *(_DWORD *)(v2 + 56); v71 = *(unsigned __int8 **)(v70 + 4); v72 = *v71; *(_DWORD *)(v70 + 4) = v71 + 1; *(_DWORD *)v2 = v72; } else { *(_DWORD *)v2 = sub_767A60(*(_DWORD *)(v2 + 56)); } return 284; default: goto LABEL_25; } } } //----- (007715D0) -------------------------------------------------------- int __cdecl sub_7715D0(_DWORD *a1) { int result; // eax int v2; // edx int v3; // ecx int v4; // edx a1[2] = a1[1]; result = 286; if ( a1[8] == 286 ) { result = sub_770F90(a1, a1 + 6); a1[4] = result; } else { v2 = a1[9]; a1[4] = a1[8]; v3 = a1[10]; a1[5] = v2; v4 = a1[11]; a1[6] = v3; a1[7] = v4; a1[8] = 286; } return result; } //----- (00771620) -------------------------------------------------------- int __cdecl sub_771620(_DWORD *a1) { int result; // eax result = sub_770F90(a1, a1 + 10); a1[8] = result; return result; } //----- (00771640) -------------------------------------------------------- void __usercall __noreturn sub_771640(signed int a1@, int a2@) { int v2; // eax int v3; // eax v2 = sub_76FF80(a2, a1); v3 = sub_75FD10(*(_DWORD *)(a2 + 52), "%s expected", v2); sub_770090(a2, v3); } //----- (00771670) -------------------------------------------------------- void __usercall __noreturn sub_771670(int *a1@, int a2, int a3) { int v3; // edi int v4; // eax v3 = *(_DWORD *)(a1[3] + 52); if ( *(_DWORD *)(*a1 + 64) ) sub_75FD10(v3, "function at line %d", *(_DWORD *)(*a1 + 64)); v4 = sub_75FD10(v3, "too many %s (limit is %d) in %s", a3); sub_770090(a1[3], v4); } //----- (007716C0) -------------------------------------------------------- signed int __usercall sub_7716C0@(_DWORD *a1@, int a2) { if ( a1[4] != a2 ) return 0; sub_7715D0(a1); return 1; } //----- (007716E0) -------------------------------------------------------- int __usercall sub_7716E0@(_DWORD *a1@) { int v1; // edi if ( a1[4] != 288 ) sub_771640(288, (int)a1); v1 = a1[6]; sub_7715D0(a1); return v1; } //----- (00771710) -------------------------------------------------------- signed int __usercall sub_771710@(int a1@, int a2@, _DWORD *a3@) { signed int result; // eax result = sub_775ED0(*(int **)(a2 + 48), a1); a3[4] = -1; a3[5] = -1; *a3 = 4; a3[2] = result; return result; } //----- (00771730) -------------------------------------------------------- int __cdecl sub_771730(int a1, int a2) { signed __int16 *v2; // ecx int v3; // edi int v4; // esi int *v5; // ebx int v6; // eax int v7; // eax int result; // eax signed __int16 *v9; // [esp+Ch] [ebp-4h] v2 = *(signed __int16 **)(a1 + 48); v3 = *(_DWORD *)v2; v4 = *(_DWORD *)(*(_DWORD *)v2 + 60); v5 = (int *)(*(_DWORD *)v2 + 60); v9 = *(signed __int16 **)(a1 + 48); if ( v2[22] + 1 > v4 ) { v6 = sub_76FE50(*(_DWORD *)(a1 + 52), *(_DWORD *)(v3 + 24), v5, 0xCu, 0x7FFF, (int)"local variables"); v2 = v9; *(_DWORD *)(v3 + 24) = v6; } if ( v4 < *v5 ) { v7 = 12 * v4; do { *(_DWORD *)(v7 + *(_DWORD *)(v3 + 24)) = 0; ++v4; v7 += 12; } while ( v4 < *v5 ); } *(_DWORD *)(*(_DWORD *)(v3 + 24) + 12 * v2[22]) = a2; if ( *(_BYTE *)(a2 + 5) & 3 && *(_BYTE *)(v3 + 5) & 4 ) { sub_761FB0(*(_DWORD *)(a1 + 52), v3, a2); v2 = v9; } LOWORD(result) = v2[22]; v2[22] = result + 1; return (signed __int16)result; } //----- (007717E0) -------------------------------------------------------- __int16 __usercall sub_7717E0@(int a1@, _DWORD *a2@) { int *v2; // esi int *v3; // edi __int16 result; // ax __int16 v5; // [esp+8h] [ebp-4h] v2 = (int *)a2[12]; v3 = (int *)a2[16]; v5 = sub_771730((int)a2, a1); if ( v3[1] - v2[10] + 1 > 200 ) sub_771670(v2, 200, (int)"local variables"); if ( v3[1] + 2 > v3[2] ) *v3 = sub_76FE50(a2[13], *v3, v3 + 2, 2u, 2147483645, (int)"local variables"); result = v5; *(_WORD *)(*v3 + 2 * v3[1]++) = v5; return result; } //----- (00771860) -------------------------------------------------------- int __usercall sub_771860@(int a1@, int a2@) { int result; // eax int v3; // ecx result = *(_DWORD *)(a1 + 48); for ( *(_BYTE *)(result + 46) += a2; a2; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)result + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(*(_DWORD *)(result + 12) + 64) + 2 * (*(_DWORD *)(result + 40) + v3)) + 4) = *(_DWORD *)(result + 20) ) { v3 = *(unsigned __int8 *)(result + 46) - a2--; } return result; } //----- (007718A0) -------------------------------------------------------- int __usercall sub_7718A0@(int result@, signed int a2@) { int v2; // esi int v3; // edi unsigned __int8 v4; // cl for ( *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 12) + 64) + 4) += a2 - *(unsigned __int8 *)(result + 46); *(unsigned __int8 *)(result + 46) > a2; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)result + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(v2 + 64) + 2 * (*(_DWORD *)(result + 40) + v4)) + 8) = v3 ) { v2 = *(_DWORD *)(result + 12); v3 = *(_DWORD *)(result + 20); v4 = *(_BYTE *)(result + 46) - 1; *(_BYTE *)(result + 46) = v4; } return result; } //----- (00771900) -------------------------------------------------------- signed int __usercall sub_771900@(_BYTE *a1@, int a2) { int v2; // ebx int v3; // esi v2 = *(_DWORD *)(*(_DWORD *)a1 + 28); v3 = 0; if ( !a1[47] ) return -1; while ( !sub_767360(*(_DWORD *)(v2 + 8 * v3), a2) ) { if ( ++v3 >= (unsigned __int8)a1[47] ) return -1; } return v3; } //----- (00771940) -------------------------------------------------------- int __usercall sub_771940@(unsigned __int8 *a1@, int a2, int a3) { unsigned __int8 *v3; // esi int v4; // edi int v5; // ebx int v6; // eax int result; // eax v3 = a1; v4 = *(_DWORD *)a1; v5 = *(_DWORD *)(*(_DWORD *)a1 + 40); v6 = a1[47] + 1; if ( v6 > 255 ) sub_771670((int *)v3, 255, (int)"upvalues"); if ( v6 > v5 ) *(_DWORD *)(v4 + 28) = sub_76FE50( *(_DWORD *)(*((_DWORD *)v3 + 3) + 52), *(_DWORD *)(v4 + 28), (int *)(*(_DWORD *)v3 + 40), 8u, 255, (int)"upvalues"); for ( ; v5 < *(_DWORD *)(v4 + 40); ++v5 ) *(_DWORD *)(*(_DWORD *)(v4 + 28) + 8 * v5) = 0; *(_BYTE *)(*(_DWORD *)(v4 + 28) + 8 * v3[47] + 4) = *(_DWORD *)a3 == 7; *(_BYTE *)(*(_DWORD *)(v4 + 28) + 8 * v3[47] + 5) = *(_BYTE *)(a3 + 8); *(_DWORD *)(*(_DWORD *)(v4 + 28) + 8 * v3[47]) = a2; if ( *(_BYTE *)(a2 + 5) & 3 && *(_BYTE *)(v4 + 5) & 4 ) sub_761FB0(*(_DWORD *)(*((_DWORD *)v3 + 3) + 52), v4, a2); LOBYTE(result) = v3[47]; v3[47] = result + 1; return (unsigned __int8)result; } //----- (00771A10) -------------------------------------------------------- signed int __usercall sub_771A10@(int a1@, int a2@) { int v2; // edi v2 = *(unsigned __int8 *)(a2 + 46) - 1; if ( v2 < 0 ) return -1; while ( !sub_767360( a1, *(_DWORD *)(*(_DWORD *)(*(_DWORD *)a2 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(*(_DWORD *)(a2 + 12) + 64) + 2 * (v2 + *(_DWORD *)(a2 + 40))))) ) { if ( --v2 < 0 ) return -1; } return v2; } //----- (00771A50) -------------------------------------------------------- signed int __cdecl sub_771A50(int a1, int a2, _DWORD *a3, int a4) { signed int result; // eax signed int v5; // eax int *i; // edi signed int v7; // eax if ( !a1 ) return 0; v5 = sub_771A10(a2, a1); if ( v5 < 0 ) { v7 = sub_771900((_BYTE *)a1, a2); if ( v7 < 0 ) { result = sub_771A50(*(_DWORD *)(a1 + 8), a2, a3, 0); if ( !result ) return result; v7 = sub_771940((unsigned __int8 *)a1, a2, (int)a3); } a3[2] = v7; a3[4] = -1; a3[5] = -1; *a3 = 8; result = 8; } else { a3[4] = -1; a3[5] = -1; *a3 = 7; a3[2] = v5; if ( !a4 ) { for ( i = *(int **)(a1 + 16); *((unsigned __int8 *)i + 8) > v5; i = (int *)*i ) ; *((_BYTE *)i + 9) = 1; } result = 7; } return result; } //----- (00771B00) -------------------------------------------------------- char __usercall sub_771B00@(_DWORD *a1@, _DWORD *a2@) { _DWORD *v2; // esi unsigned int v3; // edi signed int v4; // eax signed int v5; // eax int v7; // [esp+8h] [ebp-20h] int v8; // [esp+Ch] [ebp-1Ch] int v9; // [esp+14h] [ebp-14h] int v10; // [esp+1Ch] [ebp-Ch] int v11; // [esp+20h] [ebp-8h] v2 = a1; if ( a1[4] != 288 ) sub_771640(288, (int)a1); v7 = a1[6]; sub_7715D0(a1); v3 = v2[12]; v4 = sub_771A50(v2[12], v7, a2, 1); if ( !v4 ) { sub_771A50(v3, v2[18], a2, 1); v5 = sub_775ED0((int *)v2[12], v7); v10 = -1; v11 = -1; v8 = 4; v9 = v5; LOBYTE(v4) = sub_776E20(v3, (int)a2, (unsigned int)&v8); } return v4; } //----- (00771BA0) -------------------------------------------------------- unsigned __int8 *__usercall sub_771BA0@(int a1@, int a2@, unsigned __int8 **a3@, int a4) { int v4; // edi unsigned __int8 *result; // eax int v6; // esi int v7; // ebx int v8; // esi v4 = *(_DWORD *)(a1 + 48); result = *a3; v6 = a2 - a4; if ( *a3 == (unsigned __int8 *)12 || result == (unsigned __int8 *)13 ) { v8 = v6 + 1; if ( v8 < 0 ) v8 = 0; result = sub_775F90(v4, (int)a3, v8); if ( v8 > 1 ) result = (unsigned __int8 *)sub_775D00(v4, v8 - 1); } else { if ( result ) result = (unsigned __int8 *)sub_7766E0(v4, a3); if ( v6 > 0 ) { v7 = *(unsigned __int8 *)(v4 + 48); sub_775D00(v4, v6); result = (unsigned __int8 *)sub_776300((int *)v4, v7, v6); } } return result; } //----- (00771C10) -------------------------------------------------------- int __usercall sub_771C10@(int a1@, int a2@, int a3) { int v3; // edi int v4; // esi int *v5; // ecx int v6; // eax unsigned __int8 v7; // dl int v8; // ST10_4 int v9; // ST0C_4 int v10; // eax int result; // eax int v12; // ecx int v13; // edx int v14; // eax int v15; // edi _DWORD *v16; // eax v3 = a1; v4 = *(_DWORD *)(a1 + 64); v5 = *(int **)(a1 + 48); v6 = 16 * a3 + *(_DWORD *)(v4 + 12); v7 = *(_BYTE *)(v6 + 12); if ( v7 < *(_BYTE *)(a2 + 12) ) { v8 = *(_DWORD *)(*(_DWORD *)(*v5 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(v5[3] + 64) + 2 * (v7 + v5[10]))) + 16; v9 = *(_DWORD *)(v6 + 8); v10 = sub_75FD10( *(_DWORD *)(v3 + 52), " at line %d jumps into the scope of local '%s'", *(_DWORD *)v6 + 16); *(_DWORD *)(v3 + 16) = 0; sub_770090(v3, v10); } sub_777330(v5, *(_DWORD *)(v6 + 4), *(_DWORD *)(a2 + 4)); v12 = a3; if ( a3 < *(_DWORD *)(v4 + 16) - 1 ) { v13 = 16 * a3; do { v14 = *(_DWORD *)(v4 + 12); v15 = *(_DWORD *)(v14 + v13 + 16); v16 = (_DWORD *)(v13 + v14); *v16 = v15; v16[1] = v16[5]; v16[2] = v16[6]; v16[3] = v16[7]; ++v12; result = *(_DWORD *)(v4 + 16) - 1; v13 += 16; } while ( v12 < result ); } --*(_DWORD *)(v4 + 16); return result; } //----- (00771CE0) -------------------------------------------------------- signed int __usercall sub_771CE0@(_DWORD *a1@, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ecx int v5; // ecx int v6; // edi int v7; // edx int v8; // edi unsigned __int8 v10; // al int v11; // esi int v12; // eax int *v13; // ecx unsigned __int8 v14; // dl int v15; // ST10_4 int v16; // ST0C_4 int v17; // eax int v18; // ecx int v19; // edx int v20; // eax int v21; // edi _DWORD *v22; // eax int v23; // [esp+8h] [ebp-14h] int v24; // [esp+10h] [ebp-Ch] int v25; // [esp+14h] [ebp-8h] int v26; // [esp+18h] [ebp-4h] v2 = (_DWORD *)a1[16]; v3 = (int *)(16 * a2 + v2[3]); v4 = *(signed __int16 *)(*(_DWORD *)(a1[12] + 16) + 4); v23 = *(_DWORD *)(a1[12] + 16); v24 = 16 * a2 + v2[3]; v25 = v4; if ( v4 >= v2[7] ) return 0; v5 = 16 * v4; v26 = v5; while ( 1 ) { v6 = v2[6]; v7 = *(_DWORD *)(v6 + v5); v8 = v5 + v6; if ( sub_767360(v7, *v3) ) break; v26 += 16; if ( ++v25 >= v2[7] ) return 0; v5 = v26; v3 = (int *)v24; } v10 = *(_BYTE *)(v8 + 12); if ( *(_BYTE *)(v24 + 12) > v10 && (*(_BYTE *)(v23 + 9) || v2[7] > (signed int)*(signed __int16 *)(v23 + 4)) ) sub_775A70(a1[12], *(_DWORD *)(v24 + 4), v10); v11 = a1[16]; v12 = 16 * a2 + *(_DWORD *)(v11 + 12); v13 = (int *)a1[12]; v14 = *(_BYTE *)(v12 + 12); if ( v14 < *(_BYTE *)(v8 + 12) ) { v15 = *(_DWORD *)(*(_DWORD *)(*v13 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(v13[3] + 64) + 2 * (v14 + v13[10]))) + 16; v16 = *(_DWORD *)(v12 + 8); v17 = sub_75FD10(a1[13], " at line %d jumps into the scope of local '%s'", *(_DWORD *)v12 + 16); a1[4] = 0; sub_770090((int)a1, v17); } sub_777330(v13, *(_DWORD *)(v12 + 4), *(_DWORD *)(v8 + 4)); v18 = a2; if ( a2 < *(_DWORD *)(v11 + 16) - 1 ) { v19 = 16 * a2; do { v20 = *(_DWORD *)(v11 + 12); v21 = *(_DWORD *)(v20 + v19 + 16); v22 = (_DWORD *)(v19 + v20); *v22 = v21; v22[1] = v22[5]; v22[2] = v22[6]; v22[3] = v22[7]; ++v18; v19 += 16; } while ( v18 < *(_DWORD *)(v11 + 16) - 1 ); } --*(_DWORD *)(v11 + 16); return 1; } //----- (00771E40) -------------------------------------------------------- int __usercall sub_771E40@(int a1@, int *a2@, int a3, int a4, int a5) { int v5; // edi int v6; // eax v5 = a2[1]; if ( v5 + 1 > a2[2] ) *a2 = sub_76FE50(*(_DWORD *)(a1 + 52), *a2, a2 + 2, 0x10u, 0x7FFF, (int)"labels/gotos"); v6 = 2 * v5; *(_DWORD *)(*a2 + 8 * v6) = a3; *(_DWORD *)(*a2 + 8 * v6 + 8) = a4; *(_BYTE *)(*a2 + 8 * v6 + 12) = *(_BYTE *)(*(_DWORD *)(a1 + 48) + 46); *(_DWORD *)(*a2 + 8 * v6 + 4) = a5; ++a2[1]; return v5; } //----- (00771EB0) -------------------------------------------------------- void __cdecl sub_771EB0(_DWORD *a1, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // ebx int *v6; // ecx int v7; // esi int v8; // eax int v9; // ecx int v10; // edx int v11; // eax int v12; // ebx _DWORD *v13; // eax int v14; // ST10_4 int v15; // ST0C_4 int v16; // eax int v17; // [esp+8h] [ebp-8h] int v18; // [esp+Ch] [ebp-4h] v2 = a1; v3 = *(signed __int16 *)(*(_DWORD *)(a1[12] + 16) + 6); v4 = (_DWORD *)(a1[16] + 12); v17 = a1[16] + 12; if ( v3 < *(_DWORD *)(a1[16] + 16) ) { v5 = 16 * v3; v18 = 16 * v3; while ( 1 ) { if ( sub_767360(*(_DWORD *)(*v4 + v5), *(_DWORD *)a2) ) { v6 = (int *)v2[12]; v7 = v2[16]; v8 = v5 + *(_DWORD *)(v7 + 12); if ( *(_BYTE *)(v8 + 12) < *(_BYTE *)(a2 + 12) ) { v14 = *(_DWORD *)(*(_DWORD *)(*v6 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(v6[3] + 64) + 2 * (v6[10] + *(unsigned __int8 *)(v8 + 12)))) + 16; v15 = *(_DWORD *)(v8 + 8); v16 = sub_75FD10(a1[13], " at line %d jumps into the scope of local '%s'", *(_DWORD *)v8 + 16); a1[4] = 0; sub_770090((int)a1, v16); } sub_777330(v6, *(_DWORD *)(v8 + 4), *(_DWORD *)(a2 + 4)); v9 = v3; if ( v3 < *(_DWORD *)(v7 + 16) - 1 ) { v10 = v18; do { v11 = *(_DWORD *)(v7 + 12); v12 = *(_DWORD *)(v11 + v10 + 16); v13 = (_DWORD *)(v10 + v11); *v13 = v12; v13[1] = v13[5]; v13[2] = v13[6]; v13[3] = v13[7]; ++v9; v10 += 16; } while ( v9 < *(_DWORD *)(v7 + 16) - 1 ); } --*(_DWORD *)(v7 + 16); v2 = a1; v5 = v18; } else { ++v3; v5 += 16; v18 = v5; } if ( v3 >= *(_DWORD *)(v17 + 4) ) break; v4 = (_DWORD *)v17; } } } //----- (00771FD0) -------------------------------------------------------- int __cdecl sub_771FD0(int a1, int a2) { int result; // eax int v3; // edi int v4; // ebx int *v5; // edx int v6; // ebx int v7; // esi unsigned __int8 v8; // al int v9; // eax int v10; // ecx _DWORD *v11; // esi int v12; // edi int *v13; // eax int v14; // ecx int v15; // ebx int v16; // edx int v17; // eax int v18; // ebx unsigned __int8 v19; // al int v20; // [esp+8h] [ebp-1Ch] int v21; // [esp+Ch] [ebp-18h] int v22; // [esp+10h] [ebp-14h] int v23; // [esp+14h] [ebp-10h] int v24; // [esp+18h] [ebp-Ch] int v25; // [esp+1Ch] [ebp-8h] int v26; // [esp+20h] [ebp-4h] result = a1; v3 = a2; v4 = *(signed __int16 *)(a2 + 6); v5 = (int *)(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 64) + 12); v26 = v4; v24 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 64) + 12; if ( v4 < *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 12) + 64) + 16) ) { v6 = 16 * v4; v23 = v6; while ( 1 ) { v7 = *v5; v8 = *(_BYTE *)(v3 + 8); if ( *(_BYTE *)(*v5 + v6 + 12) > v8 ) { if ( *(_BYTE *)(v3 + 9) ) { sub_775A70(a1, *(_DWORD *)(v7 + v6 + 4), v8); v5 = (int *)v24; v3 = a2; } *(_BYTE *)(v7 + v6 + 12) = *(_BYTE *)(v3 + 8); } v9 = *(_DWORD *)(a1 + 12); v10 = *(_DWORD *)(*(_DWORD *)(v9 + 48) + 16); v11 = *(_DWORD **)(v9 + 64); v12 = *(signed __int16 *)(v10 + 4); v21 = *(_DWORD *)(a1 + 12); v13 = (int *)(v6 + v11[3]); v20 = v10; v22 = v6 + v11[3]; if ( v12 >= v11[7] ) { LABEL_14: ++v26; v6 += 16; v23 = v6; } else { v14 = 16 * v12; v25 = 16 * v12; while ( 1 ) { v15 = v11[6]; v16 = *v13; v17 = *(_DWORD *)(v15 + v14); v18 = v14 + v15; if ( sub_767360(v17, v16) ) break; v25 += 16; if ( ++v12 >= v11[7] ) { v6 = v23; v5 = (int *)v24; goto LABEL_14; } v14 = v25; v13 = (int *)v22; } v19 = *(_BYTE *)(v18 + 12); if ( *(_BYTE *)(v22 + 12) > v19 && (*(_BYTE *)(v20 + 9) || v11[7] > (signed int)*(signed __int16 *)(v20 + 4)) ) sub_775A70(*(_DWORD *)(v21 + 48), *(_DWORD *)(v22 + 4), v19); sub_771C10(v21, v18, v26); v6 = v23; v5 = (int *)v24; } result = v26; if ( v26 >= v5[1] ) break; v3 = a2; } } return result; } //----- (00772110) -------------------------------------------------------- void __usercall sub_772110(_DWORD *a1@) { int v1; // eax int *v2; // esi int v3; // ebx int v4; // ebx int v5; // [esp+8h] [ebp-8h] int v6; // [esp+Ch] [ebp-4h] v1 = sub_7676A0(a1[13], "break"); v2 = (int *)a1[16]; v3 = v2[7]; v6 = v1; v5 = *(_DWORD *)(a1[12] + 20); if ( v3 + 1 > v2[8] ) v2[6] = sub_76FE50(a1[13], v2[6], v2 + 8, 0x10u, 0x7FFF, (int)"labels/gotos"); v4 = 16 * v3; *(_DWORD *)(v4 + v2[6]) = v6; *(_DWORD *)(v2[6] + v4 + 8) = 0; *(_BYTE *)(v2[6] + v4 + 12) = *(_BYTE *)(a1[12] + 46); *(_DWORD *)(v2[6] + v4 + 4) = v5; ++v2[7]; sub_771EB0(a1, v4 + *(_DWORD *)(a1[16] + 24)); } //----- (007721B0) -------------------------------------------------------- void __usercall __noreturn sub_7721B0(_DWORD *a1@, int a2@) { int v2; // eax char *v3; // ecx int v4; // ST0C_4 int v5; // eax v2 = *a1; if ( *(_BYTE *)(*a1 + 4) != 4 || (v3 = "<%s> at line %d not inside a loop", !*(_BYTE *)(v2 + 6)) ) v3 = "no visible label '%s' for at line %d"; v4 = a1[2]; v5 = sub_75FD10(*(_DWORD *)(a2 + 52), v3, v2 + 16); *(_DWORD *)(a2 + 16) = 0; sub_770090(a2, v5); } //----- (007721F0) -------------------------------------------------------- int __usercall sub_7721F0@(int a1@) { int v1; // esi int v2; // ebx _DWORD *v3; // edi int v4; // ST24_4 int result; // eax int v6; // edx v1 = a1; v2 = *(_DWORD *)(a1 + 16); v3 = *(_DWORD **)(a1 + 12); if ( *(_DWORD *)v2 && *(_BYTE *)(v2 + 9) ) { v4 = sub_7763B0(a1); sub_775A70(v1, v4, *(unsigned __int8 *)(v2 + 8)); sub_776420((int *)v1, v4); } if ( *(_BYTE *)(v2 + 10) ) sub_772110(v3); *(_DWORD *)(v1 + 16) = *(_DWORD *)v2; sub_7718A0(v1, *(unsigned __int8 *)(v2 + 8)); *(_BYTE *)(v1 + 48) = *(_BYTE *)(v1 + 46); *(_DWORD *)(v3[16] + 28) = *(signed __int16 *)(v2 + 4); if ( *(_DWORD *)v2 ) return sub_771FD0(v1, v2); v6 = *(signed __int16 *)(v2 + 6); result = v3[16]; if ( v6 < *(_DWORD *)(result + 16) ) sub_7721B0((_DWORD *)(*(_DWORD *)(result + 12) + 16 * v6), (int)v3); return result; } //----- (00772290) -------------------------------------------------------- int __usercall sub_772290@(int a1@) { int v1; // edx int *v2; // ebx int v3; // eax int v4; // esi int *v5; // ecx int v6; // edi int v7; // eax int v8; // edi int v10; // [esp+Ch] [ebp-4h] v1 = *(_DWORD *)(a1 + 52); v2 = *(int **)(a1 + 48); v3 = v2[9]; v4 = *v2; v5 = (int *)(*v2 + 56); v6 = *v5; v10 = v1; if ( v3 >= *v5 ) { if ( v3 + 1 > v6 ) { v7 = sub_76FE50(v1, *(_DWORD *)(v4 + 16), v5, 4u, 0x3FFFF, (int)"functions"); v1 = v10; *(_DWORD *)(v4 + 16) = v7; } for ( ; v6 < *(_DWORD *)(v4 + 56); ++v6 ) *(_DWORD *)(*(_DWORD *)(v4 + 16) + 4 * v6) = 0; } v8 = sub_767910(v1); *(_DWORD *)(*(_DWORD *)(v4 + 16) + 4 * v2[9]++) = v8; if ( *(_BYTE *)(v8 + 5) & 3 && *(_BYTE *)(v4 + 5) & 4 ) sub_761FB0(v10, v4, v8); return v8; } //----- (00772330) -------------------------------------------------------- int __usercall sub_772330@(_DWORD *a1@, int *a2@, int a3) { _DWORD *v3; // edi int v4; // ecx int v5; // eax int *v6; // ecx int result; // eax __int16 v8; // dx v3 = (_DWORD *)a1[13]; a2[2] = a1[12]; a2[3] = (int)a1; a1[12] = a2; a2[5] = 0; a2[6] = 0; a2[7] = -1; a2[8] = 0; a2[9] = 0; *(_WORD *)((char *)a2 + 47) = 0; *((_BYTE *)a2 + 46) = 0; *((_WORD *)a2 + 22) = 0; v4 = *a2; a2[10] = *(_DWORD *)(a1[16] + 4); a2[4] = 0; *(_DWORD *)(v4 + 36) = a1[17]; *(_BYTE *)(v4 + 78) = 2; v5 = sub_765C40((int)v3); a2[1] = v5; v6 = (int *)v3[2]; *v6 = v5; v6[1] = 2146936133; v3[2] += 8; if ( (signed int)((v3[6] - v3[2]) & 0xFFFFFFF8) <= 0 ) sub_7600D0(v3, 0); result = a3; *(_BYTE *)(a3 + 10) = 0; *(_BYTE *)(a3 + 8) = *((_BYTE *)a2 + 46); *(_WORD *)(a3 + 4) = *(_WORD *)(*(_DWORD *)(a2[3] + 64) + 28); v8 = *(_WORD *)(*(_DWORD *)(a2[3] + 64) + 16); *(_BYTE *)(a3 + 9) = 0; *(_WORD *)(a3 + 6) = v8; *(_DWORD *)a3 = a2[4]; a2[4] = a3; return result; } //----- (007723F0) -------------------------------------------------------- int *__cdecl sub_7723F0(int a1) { int v1; // ebx int v2; // edi int *v3; // esi int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax int v9; // ecx int *result; // eax v1 = *(_DWORD *)(a1 + 52); v2 = *(_DWORD *)(a1 + 48); v3 = *(int **)v2; sub_7763F0(*(int **)(a1 + 48), 0, 0); sub_7721F0(v2); v4 = *(_DWORD *)(v2 + 20); if ( (unsigned int)(v4 + 1) > 0x3FFFFFFF ) sub_76FDC0(v1); v3[3] = sub_76FDE0(v1, v3[3], 4 * v3[12], 4 * v4); v3[12] = *(_DWORD *)(v2 + 20); if ( (unsigned int)(*(_DWORD *)(v2 + 20) + 1) > 0x3FFFFFFF ) sub_76FDC0(v1); v3[5] = sub_76FDE0(v1, v3[5], 4 * v3[13], 4 * *(_DWORD *)(v2 + 20)); v3[13] = *(_DWORD *)(v2 + 20); v5 = *(_DWORD *)(v2 + 32); if ( (unsigned int)(v5 + 1) > 0x1FFFFFFF ) sub_76FDC0(v1); v3[2] = sub_76FDE0(v1, v3[2], 8 * v3[11], 8 * v5); v3[11] = *(_DWORD *)(v2 + 32); v6 = *(_DWORD *)(v2 + 36); if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) sub_76FDC0(v1); v3[4] = sub_76FDE0(v1, v3[4], 4 * v3[14], 4 * v6); v3[14] = *(_DWORD *)(v2 + 36); v7 = *(signed __int16 *)(v2 + 44); if ( (unsigned int)(v7 + 1) > 0x15555555 ) sub_76FDC0(v1); v3[6] = sub_76FDE0(v1, v3[6], 12 * v3[15], 12 * v7); v3[15] = *(signed __int16 *)(v2 + 44); v8 = *(unsigned __int8 *)(v2 + 47); if ( (unsigned int)(v8 + 1) > 0x1FFFFFFF ) sub_76FDC0(v1); v3[7] = sub_76FDE0(v1, v3[7], 8 * v3[10], 8 * v8); v3[10] = *(unsigned __int8 *)(v2 + 47); *(_DWORD *)(a1 + 48) = *(_DWORD *)(v2 + 8); v9 = *(_DWORD *)(a1 + 16); if ( v9 == 288 || v9 == 289 ) sub_7700B0(a1, (void *)(*(_DWORD *)(a1 + 24) + 16), *(_DWORD *)(*(_DWORD *)(a1 + 24) + 12)); result = *(int **)(v1 + 12); *(_DWORD *)(v1 + 8) -= 8; if ( result[3] > 0 ) result = sub_7630F0(v1); return result; } //----- (007725D0) -------------------------------------------------------- signed int __usercall sub_7725D0@(int a1@, signed int a2) { signed int result; // eax switch ( *(_DWORD *)(a1 + 16) ) { case 0x104: case 0x105: case 0x106: case 0x11E: result = 1; break; case 0x115: result = a2; break; default: result = 0; break; } return result; } //----- (00772630) -------------------------------------------------------- char __usercall sub_772630@(int a1@, int a2@) { int v2; // esi unsigned int v3; // ebx int v4; // ST20_4 _DWORD *v6; // [esp+0h] [ebp-2Ch] int v7; // [esp+10h] [ebp-1Ch] int v8; // [esp+18h] [ebp-14h] int v9; // [esp+20h] [ebp-Ch] int v10; // [esp+24h] [ebp-8h] v2 = a1; v3 = *(_DWORD *)(a1 + 48); sub_7767B0(*(_DWORD *)(a1 + 48), v6); sub_7715D0((_DWORD *)v2); if ( *(_DWORD *)(v2 + 16) != 288 ) sub_771640(288, v2); v4 = *(_DWORD *)(v2 + 24); sub_7715D0((_DWORD *)v2); v8 = sub_775ED0(*(int **)(v2 + 48), v4); v9 = -1; v10 = -1; v7 = 4; return sub_776E20(v3, a2, (unsigned int)&v7); } //----- (007726B0) -------------------------------------------------------- int __usercall sub_7726B0@(_DWORD *a1@, int a2@) { _DWORD *v2; // esi unsigned int v3; // edi int v4; // ST40_4 signed int v5; // eax int v6; // ST40_4 int v7; // eax int result; // eax char v9; // [esp+8h] [ebp-3Ch] char v10; // [esp+10h] [ebp-34h] int v11; // [esp+28h] [ebp-1Ch] int v12; // [esp+30h] [ebp-14h] int v13; // [esp+38h] [ebp-Ch] int v14; // [esp+3Ch] [ebp-8h] v2 = a1; v3 = a1[12]; v9 = *(_BYTE *)(v3 + 48); if ( a1[4] == 288 ) { if ( *(_DWORD *)(a2 + 28) > 2147483645 ) sub_771670((int *)v3, 2147483645, (int)"items in a constructor"); v4 = a1[6]; sub_7715D0(a1); v5 = sub_775ED0((int *)v2[12], v4); v13 = -1; v14 = -1; v11 = 4; v12 = v5; } else { sub_7715D0(a1); sub_7734C0((int)v2, &v11, 0); sub_776810(v2[12], &v11); if ( v2[4] != 93 ) sub_771640(93, (int)v2); sub_7715D0(v2); } ++*(_DWORD *)(a2 + 28); if ( v2[4] != 61 ) sub_771640(61, (int)v2); sub_7715D0(v2); v6 = sub_776880(__PAIR__(&v11, v3)); sub_7734C0((int)v2, &v10, 0); v7 = sub_776880(__PAIR__(&v10, v3)); result = sub_775C00((int *)v3, 10, *(_DWORD *)(*(_DWORD *)(a2 + 24) + 8), v6, v7); *(_BYTE *)(v3 + 48) = v9; return result; } //----- (007727D0) -------------------------------------------------------- void __usercall sub_7727D0(int a1@, int *a2@) { int v2; // eax if ( a2[9] ) { v2 = *a2; if ( *a2 == 12 || v2 == 13 ) { sub_775F90(a1, (int)a2, -1); sub_776250(a1, *(_DWORD *)(a2[6] + 8), a2[8], -1); --a2[8]; } else { if ( v2 ) sub_7766E0(a1, a2); sub_776250(a1, *(_DWORD *)(a2[6] + 8), a2[8], a2[9]); } } } //----- (00772830) -------------------------------------------------------- unsigned int __fastcall sub_772830(int a1, _DWORD *a2) { int v2; // esi int v3; // edi _DWORD *v4; // ebx int v5; // eax int v6; // ST00_4 int v7; // eax int v8; // eax unsigned int *v9; // esi _DWORD *v10; // esi unsigned int result; // eax int v12; // eax int v13; // eax int v14; // [esp+Ch] [ebp-34h] int v15; // [esp+10h] [ebp-30h] int v16; // [esp+14h] [ebp-2Ch] int v17; // [esp+1Ch] [ebp-24h] int v18; // [esp+24h] [ebp-1Ch] int v19; // [esp+28h] [ebp-18h] _DWORD *v20; // [esp+2Ch] [ebp-14h] unsigned int v21; // [esp+30h] [ebp-10h] int v22; // [esp+34h] [ebp-Ch] int v23; // [esp+38h] [ebp-8h] v2 = a1; v3 = *(_DWORD *)(a1 + 48); v4 = a2; v14 = *(_DWORD *)(a1 + 4); v5 = sub_775C00(*(int **)(a1 + 48), 11, 0, 0, 0); v4[4] = -1; v4[5] = -1; *v4 = 11; v4[2] = v5; v18 = -1; v19 = -1; v6 = *(_DWORD *)(v2 + 48); v15 = v5; v23 = 0; v21 = 0; v22 = 0; v20 = v4; v16 = 0; v17 = 0; sub_7766E0(v6, v4); if ( *(_DWORD *)(v2 + 16) != 123 ) sub_771640(123, v2); while ( 1 ) { sub_7715D0((_DWORD *)v2); if ( *(_DWORD *)(v2 + 16) == 125 ) break; if ( v16 ) { sub_7766E0(v3, &v16); v16 = 0; if ( v23 == 50 ) { sub_776250(v3, v20[2], v22, 50); v23 = 0; } } v7 = *(_DWORD *)(v2 + 16); if ( v7 != 91 ) { if ( v7 != 288 ) { sub_7734C0(v2, &v16, 0); LABEL_10: if ( v22 > 2147483645 ) sub_771670(*(int **)(v2 + 48), 2147483645, (int)"items in a constructor"); ++v22; ++v23; goto LABEL_15; } if ( sub_771620((_DWORD *)v2) != 61 ) { sub_7734C0(v2, &v16, 0); goto LABEL_10; } } sub_7726B0((_DWORD *)v2, (int)&v16); LABEL_15: v8 = *(_DWORD *)(v2 + 16); if ( v8 != 44 && v8 != 59 ) { if ( v8 != 125 ) { if ( v14 == *(_DWORD *)(v2 + 4) ) sub_771640(125, v2); sub_76FF80(v2, 123); v12 = sub_76FF80(v2, 125); v13 = sub_75FD10(*(_DWORD *)(v2 + 52), "%s expected (to close %s at line %d)", v12); sub_770090(v2, v13); } break; } } sub_7715D0((_DWORD *)v2); sub_7727D0(v3, &v16); v9 = (unsigned int *)(*(_DWORD *)(*(_DWORD *)v3 + 12) + 4 * v15); *v9 = ((unsigned int)&locret_7FFFFD + 2) & *v9 | (sub_75F6C0(v22) << 23); v10 = (_DWORD *)(*(_DWORD *)(*(_DWORD *)v3 + 12) + 4 * v15); result = ((unsigned int)&loc_7FBFFE + 2) & (*v10 ^ (sub_75F6C0(v21) << 14)); *v10 ^= result; return result; } //----- (00772A20) -------------------------------------------------------- int __usercall sub_772A20@(_DWORD *a1@) { _DWORD *v1; // ebx _BYTE *v2; // esi int v3; // edi int v4; // esi _BYTE *v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] v1 = a1; v2 = (_BYTE *)a1[12]; v3 = *(_DWORD *)v2; *(_BYTE *)(*(_DWORD *)v2 + 77) = 0; v6 = v2; v7 = 0; if ( a1[4] != 41 ) { while ( 1 ) { if ( v1[4] == 280 ) { sub_7715D0(v1); *(_BYTE *)(v3 + 77) = 1; goto LABEL_10; } if ( v1[4] != 288 ) sub_770090((int)v1, (int)" or '...' expected"); v4 = v1[6]; sub_7715D0(v1); sub_7717E0(v4, v1); ++v7; if ( *(_BYTE *)(v3 + 77) || v1[4] != 44 ) break; sub_7715D0(v1); v2 = v6; } v2 = v6; } LABEL_10: sub_771860((int)v1, v7); *(_BYTE *)(v3 + 76) = v2[46]; return sub_775D00((int)v2, (unsigned __int8)v2[46]); } //----- (00772AD0) -------------------------------------------------------- int *__usercall sub_772AD0@(int a1@, _DWORD *a2@, int a3, int a4) { _DWORD *v4; // ebx int v5; // eax int v6; // eax int *v7; // esi int v8; // eax int v10; // eax int v11; // eax int v12; // [esp+8h] [ebp-40h] char v13; // [esp+3Ch] [ebp-Ch] v4 = (_DWORD *)a1; v12 = sub_772290(a1); *(_DWORD *)(v12 + 64) = a4; sub_772330(v4, &v12, (int)&v13); if ( v4[4] != 40 ) sub_771640(40, (int)v4); sub_7715D0(v4); if ( a3 ) { v5 = sub_7700B0((int)v4, "self", 4u); sub_7717E0(v5, v4); v6 = v4[12]; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v6 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(*(_DWORD *)(v6 + 12) + 64) + 2 * ((unsigned __int8)++*(_BYTE *)(v6 + 46) + *(_DWORD *)(v6 + 40)) - 2) + 4) = *(_DWORD *)(v6 + 20); } sub_772A20(v4); if ( v4[4] != 41 ) sub_771640(41, (int)v4); sub_7715D0(v4); sub_774CF0((int)v4); *(_DWORD *)(v12 + 68) = v4[1]; if ( v4[4] != 262 ) { if ( a4 == v4[1] ) sub_771640(262, (int)v4); sub_76FF80((int)v4, 265); v10 = sub_76FF80((int)v4, 262); v11 = sub_75FD10(v4[13], "%s expected (to close %s at line %d)", v10); sub_770090((int)v4, v11); } sub_7715D0(v4); v7 = *(int **)(v4[12] + 8); v8 = sub_775C30(v7, 37, 0, v7[9] - 1); a2[4] = -1; a2[5] = -1; *a2 = 11; a2[2] = v8; sub_7766E0((int)v7, a2); return sub_7723F0((int)v4); } //----- (00772C30) -------------------------------------------------------- signed int __usercall sub_772C30@(_DWORD *a1@, _DWORD *a2@) { signed int v2; // ebx v2 = 1; sub_7734C0((int)a2, a1, 0); while ( a2[4] == 44 ) { sub_7715D0(a2); sub_7766E0(a2[12], a1); sub_7734C0((int)a2, a1, 0); ++v2; } return v2; } //----- (00772C70) -------------------------------------------------------- int __cdecl sub_772C70(_DWORD *a1, int a2) { _DWORD *v2; // ecx _DWORD *v3; // esi int *v4; // ebx int v5; // eax signed int v6; // eax int v7; // ebx int v8; // esi int v9; // eax int v10; // eax int v11; // eax int v12; // eax int result; // eax int v14; // [esp+10h] [ebp-20h] int v15; // [esp+14h] [ebp-1Ch] int v16; // [esp+1Ch] [ebp-14h] int v17; // [esp+24h] [ebp-Ch] int v18; // [esp+28h] [ebp-8h] v3 = v2; v4 = (int *)v2[12]; v5 = v2[4]; v14 = v2[12]; if ( v5 == 40 ) { sub_7715D0(v2); if ( v3[4] == 41 ) { v15 = 0; } else { sub_772C30(&v15, v3); sub_775F90((int)v4, (int)&v15, -1); } if ( v3[4] != 41 ) { if ( a2 == v3[1] ) sub_771640(41, (int)v3); sub_76FF80((int)v3, 40); v10 = sub_76FF80((int)v3, 41); v11 = sub_75FD10(v3[13], "%s expected (to close %s at line %d)", v10); sub_770090((int)v3, v11); } sub_7715D0(v3); } else if ( v5 == 123 ) { sub_772830((int)v2, &v15); } else { if ( v5 != 289 ) sub_770090((int)v2, (int)"function arguments expected"); v6 = sub_775ED0(v4, v2[6]); v17 = -1; v18 = -1; v15 = 4; v16 = v6; sub_7715D0(v3); } v7 = a1[2]; if ( v15 == 12 || v15 == 13 ) { v8 = v14; v9 = -1; } else { v8 = v14; if ( v15 ) sub_7766E0(v14, &v15); v9 = *(unsigned __int8 *)(v14 + 48) - v7 - 1; } v12 = sub_775C00((int *)v8, 29, v7, v9 + 1, 2); a1[4] = -1; a1[5] = -1; *a1 = 12; a1[2] = v12; result = sub_776230((_DWORD *)v8, a2); *(_BYTE *)(v8 + 48) = v7 + 1; return result; } //----- (00772DF0) -------------------------------------------------------- char __usercall sub_772DF0@(_DWORD *a1@, _DWORD *a2@) { _DWORD *v2; // esi _DWORD *v3; // ebx int v4; // eax char result; // al int v6; // edi int v7; // eax int v8; // eax v2 = a2; v3 = a1; v4 = a2[4]; if ( v4 == 40 ) { v6 = a2[1]; sub_7715D0(a2); sub_7734C0((int)v2, v3, 0); if ( v2[4] != 41 ) { if ( v6 == v2[1] ) sub_771640(41, (int)v2); sub_76FF80((int)v2, 40); v7 = sub_76FF80((int)v2, 41); v8 = sub_75FD10(v2[13], "%s expected (to close %s at line %d)", v7); sub_770090((int)v2, v8); } sub_7715D0(v2); result = (unsigned int)sub_7760A0(v2[12], (int)v3); } else { if ( v4 != 288 ) sub_770090((int)a2, (int)"unexpected symbol"); result = sub_771B00(a2, v3); } return result; } //----- (00772E90) -------------------------------------------------------- unsigned int __usercall sub_772E90@(_DWORD *a1@, _DWORD *a2@) { _DWORD *v2; // esi unsigned int v3; // ebx unsigned int result; // eax unsigned int v5; // ebx signed int v6; // eax int v7; // ST28_4 signed int v8; // eax int v9; // ebx int v10; // [esp+Ch] [ebp-24h] int v11; // [esp+10h] [ebp-20h] int v12; // [esp+14h] [ebp-1Ch] int v13; // [esp+1Ch] [ebp-14h] int v14; // [esp+24h] [ebp-Ch] int v15; // [esp+28h] [ebp-8h] v2 = a1; v3 = a1[12]; v10 = a1[1]; v11 = a1[12]; sub_772DF0(a2, a1); result = v2[4]; while ( 1 ) { switch ( result ) { case 0x28u: case 0x7Bu: case 0x121u: sub_7766E0(v3, a2); sub_772C70(a2, v10); goto LABEL_10; case 0x2Eu: v5 = v2[12]; sub_7767B0(v2[12], a2); sub_7715D0(v2); v6 = 288; if ( v2[4] != 288 ) goto LABEL_12; v7 = v2[6]; sub_7715D0(v2); v8 = sub_775ED0((int *)v2[12], v7); v14 = -1; v15 = -1; v12 = 4; v13 = v8; sub_776E20(v5, (int)a2, (unsigned int)&v12); v3 = v11; goto LABEL_10; case 0x3Au: sub_7715D0(v2); v6 = 288; if ( v2[4] != 288 ) goto LABEL_12; v9 = v2[6]; sub_7715D0(v2); v13 = sub_775ED0((int *)v2[12], v9); v14 = -1; v15 = -1; v12 = 4; sub_776A60(v11, a2, &v12); sub_772C70(a2, v10); v3 = v11; goto LABEL_10; case 0x5Bu: sub_7767B0(v3, a2); sub_7715D0(v2); sub_7734C0((int)v2, &v12, 0); sub_776810(v2[12], &v12); v6 = 93; if ( v2[4] != 93 ) LABEL_12: sub_771640(v6, (int)v2); sub_7715D0(v2); sub_776E20(v3, (int)a2, (unsigned int)&v12); LABEL_10: result = v2[4] - 40; if ( result > 0xF9 ) return result; break; default: return result; } } } //----- (00773140) -------------------------------------------------------- int *__usercall sub_773140@(_DWORD *a1@, double *a2@) { _DWORD *v2; // edi int *result; // eax int *v4; // eax int v5; // eax v2 = a1; switch ( *((_DWORD *)a2 + 4) ) { case 0x7B: return (int *)sub_772830((int)a2, a1); case 0x107: *a1 = 3; a1[2] = 0; goto LABEL_10; case 0x109: sub_7715D0(a2); return sub_772AD0((int)a2, v2, 0, *((_DWORD *)a2 + 1)); case 0x10E: *a1 = 1; a1[2] = 0; goto LABEL_10; case 0x114: *a1 = 2; a1[2] = 0; goto LABEL_10; case 0x118: v4 = (int *)*((_DWORD *)a2 + 12); if ( !*(_BYTE *)(*v4 + 77) ) sub_770090((int)a2, (int)"cannot use '...' outside a vararg function"); v5 = sub_775C00(v4, 38, 0, 1, 0); *v2 = 13; v2[2] = v5; LABEL_10: v2[5] = -1; v2[4] = -1; result = (int *)sub_7715D0(a2); break; case 0x11F: a1[2] = 0; a1[4] = -1; a1[5] = -1; *a1 = 5; *((double *)a1 + 1) = a2[3]; result = (int *)sub_7715D0(a2); break; case 0x121: sub_771710(*((_DWORD *)a2 + 6), (int)a2, a1); result = (int *)sub_7715D0(a2); break; default: result = (int *)sub_772E90(a2, a1); break; } return result; } //----- (00773310) -------------------------------------------------------- signed int __usercall sub_773310@(int a1@) { signed int result; // eax switch ( a1 ) { case 37: result = 4; break; case 42: result = 2; break; case 43: result = 0; break; case 45: result = 1; break; case 47: result = 3; break; case 60: result = 8; break; case 62: result = 11; break; case 94: result = 5; break; case 257: result = 13; break; case 272: result = 14; break; case 279: result = 6; break; case 281: result = 7; break; case 282: result = 12; break; case 283: result = 9; break; case 284: result = 10; break; default: result = 15; break; } return result; } //----- (007734C0) -------------------------------------------------------- int __cdecl sub_7734C0(int a1, _DWORD *a2, signed int a3) { int v3; // eax _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // esi int v8; // ST40_4 int v9; // edi int v11; // [esp+10h] [ebp-20h] char v12; // [esp+14h] [ebp-1Ch] v3 = *(_DWORD *)(a1 + 52); ++*(_WORD *)(v3 + 38); v4 = a2; if ( *(_WORD *)(v3 + 38) > 0xC8u ) sub_771670(*(int **)(a1 + 48), 200, (int)"C levels"); v5 = *(_DWORD *)(a1 + 16); switch ( v5 ) { case 35: v11 = 2; goto LABEL_9; case 45: v11 = 0; goto LABEL_9; case 271: v11 = 1; LABEL_9: v6 = *(_DWORD *)(a1 + 4); sub_7715D0((_DWORD *)a1); sub_7734C0(a1, a2, 8); sub_777020(*(_DWORD *)(a1 + 48), v11, (int)a2, v6); goto LABEL_11; } sub_773140(a2, (double *)a1); LABEL_11: v7 = sub_773310(*(_DWORD *)(a1 + 16)); if ( v7 != 15 ) { while ( (unsigned __int8)byte_A0EE34[2 * v7] > a3 ) { v8 = *(_DWORD *)(a1 + 4); sub_7715D0((_DWORD *)a1); sub_7770D0(*(int **)(a1 + 48), v7, v4); v9 = sub_7734C0(a1, &v12, (unsigned __int8)byte_A0EE35[2 * v7]); sub_777180(*(int **)(a1 + 48), v7, a2, &v12, v8); v7 = v9; if ( v9 == 15 ) break; v4 = a2; } } --*(_WORD *)(*(_DWORD *)(a1 + 52) + 38); return v7; } //----- (007735F0) -------------------------------------------------------- int __usercall sub_7735F0@(int a1@) { int v1; // esi int v3; // [esp+4h] [ebp-Ch] __int16 v4; // [esp+8h] [ebp-8h] __int16 v5; // [esp+Ah] [ebp-6h] char v6; // [esp+Ch] [ebp-4h] char v7; // [esp+Dh] [ebp-3h] char v8; // [esp+Eh] [ebp-2h] v8 = 0; v1 = *(_DWORD *)(a1 + 48); v6 = *(_BYTE *)(v1 + 46); v4 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 12) + 64) + 28); v5 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 12) + 64) + 16); v7 = 0; v3 = *(_DWORD *)(v1 + 16); *(_DWORD *)(v1 + 16) = &v3; sub_774CF0(a1); return sub_7721F0(v1); } //----- (00773650) -------------------------------------------------------- int __usercall sub_773650@(int result@, int a2@, _DWORD *a3@) { int v3; // edi int v4; // ecx signed int v5; // edx v3 = *(_DWORD *)(a2 + 48); v4 = *(unsigned __int8 *)(v3 + 48); v5 = 0; if ( result ) { do { if ( *(_DWORD *)(result + 8) == 9 ) { if ( *(unsigned __int8 *)(result + 19) == *a3 && *(unsigned __int8 *)(result + 18) == a3[2] ) { v5 = 1; *(_BYTE *)(result + 19) = 7; *(_BYTE *)(result + 18) = v4; } if ( *a3 == 7 && *(signed __int16 *)(result + 16) == a3[2] ) { v5 = 1; *(_WORD *)(result + 16) = v4; } } result = *(_DWORD *)result; } while ( result ); if ( v5 ) { sub_775C00((int *)v3, *a3 != 7 ? 5 : 0, v4, a3[2], 0); result = sub_775D00(v3, 1); } } return result; } //----- (007736D0) -------------------------------------------------------- signed int __cdecl sub_7736D0(int a1, int a2, int a3) { signed int v3; // eax int v4; // eax int v5; // eax int v6; // ebx int v8; // [esp+Ch] [ebp-44h] int v9; // [esp+10h] [ebp-40h] int v10; // [esp+14h] [ebp-3Ch] int v11; // [esp+1Ch] [ebp-34h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+3Ch] [ebp-14h] int v14; // [esp+44h] [ebp-Ch] int v15; // [esp+48h] [ebp-8h] v8 = a2 + 8; v3 = *(_DWORD *)(a2 + 8); if ( v3 < 7 || v3 > 9 ) sub_770090(a1, (int)"syntax error"); v4 = *(_DWORD *)(a1 + 16); if ( v4 == 44 ) { sub_7715D0((_DWORD *)a1); v10 = a2; sub_772E90((_DWORD *)a1, &v11); if ( v11 != 9 ) sub_773650(a2, a1, &v11); if ( a3 + *(unsigned __int16 *)(*(_DWORD *)(a1 + 52) + 38) > 200 ) sub_771670(*(int **)(a1 + 48), 200, (int)"C levels"); sub_7736D0(a1, &v10, a3 + 1); LABEL_14: v6 = *(_DWORD *)(a1 + 48); v13 = *(unsigned __int8 *)(v6 + 48) - 1; v14 = -1; v15 = -1; v12 = 6; return sub_776990(v6, v8, &v12); } if ( v4 != 61 ) sub_771640(61, a1); sub_7715D0((_DWORD *)a1); v5 = sub_772C30(&v12, (_DWORD *)a1); v9 = v5; if ( v5 != a3 ) { sub_771BA0(a1, a3, (unsigned __int8 **)&v12, v5); if ( v9 > a3 ) *(_BYTE *)(*(_DWORD *)(a1 + 48) + 48) += a3 - v9; goto LABEL_14; } sub_776040(*(_DWORD *)(a1 + 48), &v12); return sub_776990(*(_DWORD *)(a1 + 48), v8, &v12); } //----- (00773840) -------------------------------------------------------- signed int __usercall sub_773840@(_DWORD *a1@, int a2) { _DWORD *v2; // ebx int v3; // edi int v4; // esi int v5; // eax int v6; // eax v2 = a1; v3 = a1[1]; if ( a1[4] == 266 ) { sub_7715D0(a1); if ( v2[4] != 288 ) sub_771640(288, (int)v2); v4 = v2[6]; sub_7715D0(v2); v5 = v4; } else { sub_7715D0(a1); v5 = sub_7676A0(v2[13], "break"); } v6 = sub_771E40((int)v2, (int *)(v2[16] + 12), v5, v3, a2); return sub_771CE0(v2, v6); } //----- (007738C0) -------------------------------------------------------- void __usercall sub_7738C0(_DWORD *a1@, int a2, int a3) { _DWORD *v3; // ebx int v4; // esi int v5; // edi int v6; // eax int v7; // edx int v8; // eax int v9; // ST08_4 int v10; // esi int v11; // eax _DWORD *v12; // [esp+Ch] [ebp-8h] int i; // [esp+10h] [ebp-4h] v3 = a1; v12 = (_DWORD *)a1[12]; v4 = *(signed __int16 *)(v12[4] + 4); v5 = a1[16]; if ( v4 < *(_DWORD *)(v5 + 28) ) { v6 = 16 * v4; for ( i = 16 * v4; ; v6 = i ) { if ( sub_767360(a2, *(_DWORD *)(*(_DWORD *)(v5 + 24) + v6)) ) { v7 = *(_DWORD *)(*(_DWORD *)(v5 + 24) + 16 * v4 + 8); v8 = sub_75FD10(*(_DWORD *)(v12[3] + 52), "label '%s' already defined on line %d", a2 + 16); v9 = v12[3]; *(_DWORD *)(v9 + 16) = 0; sub_770090(v9, v8); } i += 16; if ( ++v4 >= *(_DWORD *)(v5 + 28) ) break; } } if ( v3[4] != 285 ) sub_771640(285, (int)v3); sub_7715D0(v3); v10 = sub_771E40((int)v3, (int *)(v5 + 24), a2, a3, v12[5]); while ( 1 ) { v11 = v3[4]; if ( v11 != 59 && v11 != 285 ) break; sub_774A50((int)v3); } switch ( v11 ) { case 260: case 261: case 262: case 286: *(_BYTE *)(*(_DWORD *)(v5 + 24) + 16 * v10 + 12) = *(_BYTE *)(v12[4] + 8); break; default: break; } sub_771EB0(v3, *(_DWORD *)(v5 + 24) + 16 * v10); } //----- (00773A10) -------------------------------------------------------- void __cdecl sub_773A10(int a1) { _DWORD *v1; // ecx int v2; // esi int v3; // edi int v4; // ebx int v5; // eax int v6; // eax int v7; // eax int v8; // [esp+Ch] [ebp-38h] int v9; // [esp+10h] [ebp-34h] __int16 v10; // [esp+14h] [ebp-30h] __int16 v11; // [esp+16h] [ebp-2Eh] char v12; // [esp+18h] [ebp-2Ch] char v13; // [esp+19h] [ebp-2Bh] char v14; // [esp+1Ah] [ebp-2Ah] int v15; // [esp+1Ch] [ebp-28h] __int16 v16; // [esp+20h] [ebp-24h] __int16 v17; // [esp+22h] [ebp-22h] char v18; // [esp+24h] [ebp-20h] char v19; // [esp+25h] [ebp-1Fh] char v20; // [esp+26h] [ebp-1Eh] int v21; // [esp+28h] [ebp-1Ch] int v22; // [esp+3Ch] [ebp-8h] v2 = (int)v1; v3 = v1[12]; sub_7715D0(v1); v8 = sub_775850(v3); sub_7734C0(v2, &v21, 0); if ( v21 == 1 ) v21 = 3; sub_776C50(*(int **)(v2 + 48), &v21); v20 = 1; v18 = *(_BYTE *)(v3 + 46); v16 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v17 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v19 = 0; v15 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v15; if ( *(_DWORD *)(v2 + 16) != 259 ) sub_771640(259, v2); sub_7715D0((_DWORD *)v2); v4 = *(_DWORD *)(v2 + 48); v14 = 0; v12 = *(_BYTE *)(v4 + 46); v10 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 12) + 64) + 28); v11 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 12) + 64) + 16); v13 = 0; v9 = *(_DWORD *)(v4 + 16); *(_DWORD *)(v4 + 16) = &v9; sub_774CF0(v2); sub_7721F0(v4); v5 = sub_7763B0(v3); sub_777330((int *)v3, v5, v8); if ( *(_DWORD *)(v2 + 16) != 262 ) { if ( a1 == *(_DWORD *)(v2 + 4) ) sub_771640(262, v2); sub_76FF80(v2, 278); v6 = sub_76FF80(v2, 262); v7 = sub_75FD10(*(_DWORD *)(v2 + 52), "%s expected (to close %s at line %d)", v6); sub_770090(v2, v7); } sub_7715D0((_DWORD *)v2); sub_7721F0(v3); sub_776420((int *)v3, v22); } //----- (00773BA0) -------------------------------------------------------- int __cdecl sub_773BA0(int a1) { int v1; // ecx int v2; // esi int v3; // edi int v4; // eax int v5; // esi int v7; // eax int v8; // eax int v9; // [esp+8h] [ebp-38h] int v10; // [esp+Ch] [ebp-34h] __int16 v11; // [esp+10h] [ebp-30h] __int16 v12; // [esp+12h] [ebp-2Eh] char v13; // [esp+14h] [ebp-2Ch] char v14; // [esp+15h] [ebp-2Bh] char v15; // [esp+16h] [ebp-2Ah] int v16; // [esp+18h] [ebp-28h] __int16 v17; // [esp+1Ch] [ebp-24h] __int16 v18; // [esp+1Eh] [ebp-22h] unsigned __int8 v19; // [esp+20h] [ebp-20h] char v20; // [esp+21h] [ebp-1Fh] char v21; // [esp+22h] [ebp-1Eh] int v22; // [esp+24h] [ebp-1Ch] int v23; // [esp+38h] [ebp-8h] v2 = v1; v3 = *(_DWORD *)(v1 + 48); v4 = sub_775850(*(_DWORD *)(v1 + 48)); v15 = 1; v9 = v4; v13 = *(_BYTE *)(v3 + 46); v11 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v12 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v14 = 0; v10 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v10; v21 = 0; v19 = *(_BYTE *)(v3 + 46); v17 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v18 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v20 = 0; v16 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v16; sub_7715D0((_DWORD *)v2); sub_774CF0(v2); if ( *(_DWORD *)(v2 + 16) != 277 ) { if ( a1 == *(_DWORD *)(v2 + 4) ) sub_771640(277, v2); sub_76FF80(v2, 273); v7 = sub_76FF80(v2, 277); v8 = sub_75FD10(*(_DWORD *)(v2 + 52), "%s expected (to close %s at line %d)", v7); sub_770090(v2, v8); } sub_7715D0((_DWORD *)v2); sub_7734C0(v2, &v22, 0); if ( v22 == 1 ) v22 = 3; sub_776C50(*(int **)(v2 + 48), &v22); v5 = v23; if ( v20 ) sub_775A70(v3, v23, v19); sub_7721F0(v3); sub_777330((int *)v3, v5, v9); return sub_7721F0(v3); } //----- (00773D10) -------------------------------------------------------- int __usercall sub_773D10@(_DWORD *a1@, int a2, int a3, int a4, int a5) { _DWORD *v5; // ebx int v6; // edi signed int v7; // ecx int v8; // eax int v9; // eax int v10; // edx int v11; // esi int v12; // ebx int v13; // eax int v15; // [esp+Ch] [ebp-1Ch] __int16 v16; // [esp+10h] [ebp-18h] __int16 v17; // [esp+12h] [ebp-16h] char v18; // [esp+14h] [ebp-14h] char v19; // [esp+15h] [ebp-13h] char v20; // [esp+16h] [ebp-12h] int v21; // [esp+18h] [ebp-10h] __int16 v22; // [esp+1Ch] [ebp-Ch] __int16 v23; // [esp+1Eh] [ebp-Ah] char v24; // [esp+20h] [ebp-8h] char v25; // [esp+21h] [ebp-7h] char v26; // [esp+22h] [ebp-6h] int v27; // [esp+24h] [ebp-4h] v5 = a1; v6 = a1[12]; v7 = 3; *(_BYTE *)(v6 + 46) += 3; do { v8 = *(unsigned __int8 *)(v6 + 46) - v7--; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v6 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(*(_DWORD *)(v6 + 12) + 64) + 2 * (*(_DWORD *)(v6 + 40) + v8)) + 4) = *(_DWORD *)(v6 + 20); } while ( v7 ); if ( v5[4] != 259 ) sub_771640(259, (int)v5); sub_7715D0(v5); if ( a5 ) v9 = sub_775C30((int *)v6, 33, a2, 131070); else v9 = sub_7763B0(v6); v26 = 0; v24 = *(_BYTE *)(v6 + 46); v10 = *(_DWORD *)(v6 + 12); v27 = v9; v22 = *(_WORD *)(*(_DWORD *)(v10 + 64) + 28); v23 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 12) + 64) + 16); v25 = 0; v21 = *(_DWORD *)(v6 + 16); *(_DWORD *)(v6 + 16) = &v21; sub_771860((int)v5, a4); sub_775D00(v6, a4); v11 = v5[12]; v20 = 0; v18 = *(_BYTE *)(v11 + 46); v16 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v11 + 12) + 64) + 28); v17 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v11 + 12) + 64) + 16); v19 = 0; v15 = *(_DWORD *)(v11 + 16); *(_DWORD *)(v11 + 16) = &v15; sub_774CF0((int)v5); sub_7721F0(v11); sub_7721F0(v6); v12 = v27; sub_776420((int *)v6, v27); if ( a5 ) { v13 = sub_775C30((int *)v6, 32, a2, 131070); } else { sub_775C00((int *)v6, 34, a2, 0, a4); sub_776230((_DWORD *)v6, a3); v13 = sub_775C30((int *)v6, 35, a2 + 2, 131070); } sub_777330((int *)v6, v13, v12 + 1); return sub_776230((_DWORD *)v6, a3); } //----- (00773EA0) -------------------------------------------------------- int __usercall sub_773EA0@(int a1@, int a2@, int a3) { _DWORD *v3; // ebx int v4; // esi int v5; // edi int v6; // eax int v7; // eax int v8; // eax signed int v9; // eax int v11; // [esp+14h] [ebp-20h] char v12; // [esp+18h] [ebp-1Ch] v3 = (_DWORD *)a1; v4 = *(_DWORD *)(a1 + 48); v5 = a2; v11 = *(unsigned __int8 *)(v4 + 48); v6 = sub_7700B0(a1, "(for index)", 0xBu); sub_7717E0(v6, v3); v7 = sub_7700B0((int)v3, "(for limit)", 0xBu); sub_7717E0(v7, v3); v8 = sub_7700B0((int)v3, "(for step)", 0xAu); sub_7717E0(v8, v3); sub_7717E0(v5, v3); if ( v3[4] != 61 ) sub_771640(61, (int)v3); sub_7715D0(v3); sub_7734C0((int)v3, &v12, 0); sub_7766E0(v3[12], &v12); if ( v3[4] != 44 ) sub_771640(44, (int)v3); sub_7715D0(v3); sub_7734C0((int)v3, &v12, 0); sub_7766E0(v3[12], &v12); if ( v3[4] == 44 ) { sub_7715D0(v3); sub_7734C0((int)v3, &v12, 0); sub_7766E0(v3[12], &v12); } else { v9 = sub_775F00(v4, 1.0); sub_775C60((int *)v4, *(unsigned __int8 *)(v4 + 48), v9); sub_775D00(v4, 1); } return sub_773D10(v3, v11, a3, 1, 1); } //----- (00773FE0) -------------------------------------------------------- int __fastcall sub_773FE0(int a1, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax int v5; // eax int v6; // eax signed int v7; // eax int v8; // ST40_4 int *v9; // edi int *v10; // ebx signed int v11; // eax int v12; // ebx int v13; // edi int v14; // ST40_4 int v15; // edi int v17; // [esp+Ch] [ebp-30h] int v18; // [esp+10h] [ebp-2Ch] int v19; // [esp+14h] [ebp-28h] signed int v20; // [esp+18h] [ebp-24h] __int16 v21; // [esp+1Ch] [ebp-20h] int v22; // [esp+20h] [ebp-1Ch] v2 = (_DWORD *)a1; v19 = *(_DWORD *)(a1 + 48); v3 = a2; v20 = 4; v18 = *(unsigned __int8 *)(v19 + 48); v4 = sub_7700B0(a1, "(for generator)", 0xFu); sub_7717E0(v4, v2); v5 = sub_7700B0((int)v2, "(for state)", 0xBu); sub_7717E0(v5, v2); v6 = sub_7700B0((int)v2, "(for control)", 0xDu); sub_7717E0(v6, v2); sub_7717E0(v3, v2); while ( v2[4] == 44 ) { sub_7715D0(v2); v7 = 288; if ( v2[4] != 288 ) goto LABEL_10; v8 = v2[6]; sub_7715D0(v2); v9 = (int *)v2[12]; v10 = (int *)v2[16]; v21 = sub_771730((int)v2, v8); if ( v10[1] - v9[10] + 1 > 200 ) sub_771670(v9, 200, (int)"local variables"); if ( v10[1] + 2 > v10[2] ) *v10 = sub_76FE50(v2[13], *v10, v10 + 2, 2u, 2147483645, (int)"local variables"); *(_WORD *)(*v10 + 2 * v10[1]++) = v21; ++v20; } v7 = 268; if ( v2[4] != 268 ) LABEL_10: sub_771640(v7, (int)v2); sub_7715D0(v2); v17 = v2[1]; v11 = sub_772C30(&v22, v2); v12 = v2[12]; v13 = 3 - v11; if ( v22 == 12 || v22 == 13 ) { v15 = v13 + 1; if ( v15 < 0 ) v15 = 0; sub_775F90(v12, (int)&v22, v15); if ( v15 > 1 ) sub_775D00(v12, v15 - 1); } else { if ( v22 ) sub_7766E0(v12, &v22); if ( v13 > 0 ) { v14 = *(unsigned __int8 *)(v12 + 48); sub_775D00(v12, v13); sub_776300((int *)v12, v14, v13); } } sub_775CC0(v19, 3); return sub_773D10(v2, v18, v17, v20 - 3, 0); } //----- (007741D0) -------------------------------------------------------- int __usercall sub_7741D0@(_DWORD *a1@, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // ebx int v5; // eax int v7; // eax int v8; // eax int v9; // [esp+8h] [ebp-Ch] __int16 v10; // [esp+Ch] [ebp-8h] __int16 v11; // [esp+Eh] [ebp-6h] char v12; // [esp+10h] [ebp-4h] char v13; // [esp+11h] [ebp-3h] char v14; // [esp+12h] [ebp-2h] v14 = 1; v2 = a1; v3 = a1[12]; v12 = *(_BYTE *)(v3 + 46); v10 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v11 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v13 = 0; v9 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v9; sub_7715D0(a1); if ( v2[4] != 288 ) sub_771640(288, (int)v2); v4 = v2[6]; sub_7715D0(v2); v5 = v2[4]; if ( v5 != 44 ) { if ( v5 == 61 ) { sub_773EA0((int)v2, v4, a2); goto LABEL_9; } if ( v5 != 268 ) sub_770090((int)v2, (int)"'=' or 'in' expected"); } sub_773FE0((int)v2, v4); LABEL_9: if ( v2[4] != 262 ) { if ( a2 == v2[1] ) sub_771640(262, (int)v2); sub_76FF80((int)v2, 264); v7 = sub_76FF80((int)v2, 262); v8 = sub_75FD10(v2[13], "%s expected (to close %s at line %d)", v7); sub_770090((int)v2, v8); } sub_7715D0(v2); return sub_7721F0(v3); } //----- (007742E0) -------------------------------------------------------- void __cdecl sub_7742E0(int *a1) { _DWORD *v1; // ecx int v2; // esi int v3; // edi int v4; // eax __int16 v5; // cx int v6; // ebx int v7; // eax int v8; // esi int v9; // eax int v10; // [esp+10h] [ebp-28h] __int16 v11; // [esp+14h] [ebp-24h] __int16 v12; // [esp+16h] [ebp-22h] char v13; // [esp+18h] [ebp-20h] char v14; // [esp+19h] [ebp-1Fh] char v15; // [esp+1Ah] [ebp-1Eh] char v16; // [esp+1Ch] [ebp-1Ch] int v17; // [esp+2Ch] [ebp-Ch] int v18; // [esp+30h] [ebp-8h] v2 = (int)v1; v3 = v1[12]; sub_7715D0(v1); sub_7734C0(v2, &v16, 0); if ( *(_DWORD *)(v2 + 16) != 275 ) sub_771640(275, v2); sub_7715D0((_DWORD *)v2); v4 = *(_DWORD *)(v2 + 16); if ( v4 == 266 || v4 == 258 ) { sub_776CF0(*(int **)(v2 + 48), &v16); v15 = 0; v13 = *(_BYTE *)(v3 + 46); v11 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v12 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v14 = 0; v10 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v10; sub_773840((_DWORD *)v2, v17); while ( 1 ) { v7 = *(_DWORD *)(v2 + 16); if ( v7 != 59 && v7 != 285 ) break; sub_774A50(v2); } switch ( v7 ) { case 260: case 261: case 262: case 286: sub_7721F0(v3); break; default: v6 = sub_7763B0(v3); goto LABEL_13; } } else { sub_776C50(*(int **)(v2 + 48), &v16); v15 = 0; v13 = *(_BYTE *)(v3 + 46); v11 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v5 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v14 = 0; v12 = v5; v10 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v10; v6 = v18; LABEL_13: sub_774CF0(v2); sub_7721F0(v3); v8 = *(_DWORD *)(v2 + 16); if ( v8 == 260 || v8 == 261 ) { v9 = sub_7763B0(v3); sub_775AD0((int *)v3, a1, v9); } sub_776420((int *)v3, v6); } } //----- (007744B0) -------------------------------------------------------- void __usercall sub_7744B0(int a1@, int a2@) { _DWORD *v2; // esi int v3; // edi __int16 v4; // cx int v5; // eax int v6; // eax int v7; // [esp+8h] [ebp-14h] __int16 v8; // [esp+Ch] [ebp-10h] __int16 v9; // [esp+Eh] [ebp-Eh] char v10; // [esp+10h] [ebp-Ch] char v11; // [esp+11h] [ebp-Bh] char v12; // [esp+12h] [ebp-Ah] int *v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] v2 = (_DWORD *)a1; v13 = *(int **)(a1 + 48); v14 = -1; sub_7742E0(&v14); while ( v2[4] == 261 ) sub_7742E0(&v14); if ( v2[4] == 260 ) { sub_7715D0(v2); v3 = v2[12]; v12 = 0; v10 = *(_BYTE *)(v3 + 46); v8 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 28); v4 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 12) + 64) + 16); v11 = 0; v9 = v4; v7 = *(_DWORD *)(v3 + 16); *(_DWORD *)(v3 + 16) = &v7; sub_774CF0((int)v2); sub_7721F0(v3); } if ( v2[4] != 262 ) { if ( a2 == v2[1] ) sub_771640(262, (int)v2); sub_76FF80((int)v2, 267); v5 = sub_76FF80((int)v2, 262); v6 = sub_75FD10(v2[13], "%s expected (to close %s at line %d)", v5); sub_770090((int)v2, v6); } sub_7715D0(v2); sub_776420(v13, v14); } //----- (007745C0) -------------------------------------------------------- int __thiscall sub_7745C0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi int v3; // edi int v4; // eax int result; // eax char v6; // [esp+Ch] [ebp-1Ch] int v7; // [esp+14h] [ebp-14h] v1 = this; v2 = (_DWORD *)this[12]; if ( this[4] != 288 ) sub_771640(288, (int)this); v3 = this[6]; sub_7715D0(this); sub_7717E0(v3, v1); v4 = v1[12]; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v4 + 24) + 12 * *(signed __int16 *)(**(_DWORD **)(*(_DWORD *)(v4 + 12) + 64) + 2 * ((unsigned __int8)++*(_BYTE *)(v4 + 46) + *(_DWORD *)(v4 + 40)) - 2) + 4) = *(_DWORD *)(v4 + 20); sub_772AD0((int)v1, &v6, 0, v1[1]); result = *(_DWORD *)(*v2 + 24); *(_DWORD *)(result + 12 * *(signed __int16 *)(**(_DWORD **)(v2[3] + 64) + 2 * (v7 + v2[10])) + 4) = v2[5]; return result; } //----- (00774670) -------------------------------------------------------- int __thiscall sub_774670(_DWORD *this) { _DWORD *v1; // esi int v2; // ST28_4 int *v3; // ebx int *v4; // edi int v5; // eax int v7; // [esp+8h] [ebp-24h] __int16 v8; // [esp+Ch] [ebp-20h] int v9; // [esp+10h] [ebp-1Ch] v1 = this; v7 = 0; while ( 1 ) { if ( v1[4] != 288 ) sub_771640(288, (int)v1); v2 = v1[6]; sub_7715D0(v1); v3 = (int *)v1[12]; v4 = (int *)v1[16]; v8 = sub_771730((int)v1, v2); if ( v4[1] - v3[10] + 1 > 200 ) sub_771670(v3, 200, (int)"local variables"); if ( v4[1] + 2 > v4[2] ) *v4 = sub_76FE50(v1[13], *v4, v4 + 2, 2u, 2147483645, (int)"local variables"); *(_WORD *)(*v4 + 2 * v4[1]++) = v8; ++v7; if ( v1[4] != 44 ) break; sub_7715D0(v1); } if ( v1[4] == 61 ) { sub_7715D0(v1); v5 = sub_772C30(&v9, v1); } else { v5 = 0; v9 = 0; } sub_771BA0((int)v1, v7, (unsigned __int8 **)&v9, v5); return sub_771860((int)v1, v7); } //----- (00774790) -------------------------------------------------------- signed int __fastcall sub_774790(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // ebx int v3; // esi int v4; // edi signed int v5; // eax unsigned int v7; // [esp+Ch] [ebp-24h] signed int v8; // [esp+10h] [ebp-20h] int v9; // [esp+14h] [ebp-1Ch] int v10; // [esp+1Ch] [ebp-14h] int v11; // [esp+24h] [ebp-Ch] int v12; // [esp+28h] [ebp-8h] v2 = a2; v3 = (int)a1; v8 = 0; sub_771B00(a1, a2); while ( *(_DWORD *)(v3 + 16) == 46 ) { v7 = *(_DWORD *)(v3 + 48); sub_7767B0(v7, v2); sub_7715D0((_DWORD *)v3); if ( *(_DWORD *)(v3 + 16) != 288 ) sub_771640(288, v3); v4 = *(_DWORD *)(v3 + 24); sub_7715D0((_DWORD *)v3); v5 = sub_775ED0(*(int **)(v3 + 48), v4); v11 = -1; v12 = -1; v9 = 4; v10 = v5; sub_776E20(v7, (int)v2, (unsigned int)&v9); } if ( *(_DWORD *)(v3 + 16) == 58 ) { v8 = 1; sub_772630(v3, (int)v2); } return v8; } //----- (00774850) -------------------------------------------------------- int __usercall sub_774850@(int a1@, _DWORD *a2@) { int v2; // eax _DWORD *v4; // [esp+0h] [ebp-3Ch] char v5; // [esp+8h] [ebp-34h] char v6; // [esp+20h] [ebp-1Ch] sub_7715D0(v4); v2 = sub_774790(a2, &v5); sub_772AD0((int)a2, &v6, v2, a1); sub_776990(a2[12], (int)&v5, &v6); return sub_776230((_DWORD *)a2[12], a1); } //----- (007748B0) -------------------------------------------------------- unsigned int *__usercall sub_7748B0@(_DWORD *a1@) { int v1; // ebx int v2; // eax unsigned int *result; // eax int v4; // [esp+8h] [ebp-24h] int v5; // [esp+10h] [ebp-1Ch] int v6; // [esp+18h] [ebp-14h] v1 = a1[12]; sub_772E90(a1, &v5); v2 = a1[4]; if ( v2 == 61 || v2 == 44 ) { v4 = 0; result = (unsigned int *)sub_7736D0((int)a1, (int)&v4, 1); } else { if ( v5 != 12 ) sub_770090((int)a1, (int)"syntax error"); result = (unsigned int *)(*(_DWORD *)(*(_DWORD *)v1 + 12) + 4 * v6); *result = *result & 0xFF807FFF | 0x4000; } return result; } //----- (00774940) -------------------------------------------------------- int __thiscall sub_774940(_DWORD *this) { _DWORD *v1; // esi int v2; // eax unsigned __int8 *v3; // ebx int v4; // edi int v5; // eax int result; // eax int v7; // [esp+Ch] [ebp-1Ch] int v8; // [esp+14h] [ebp-14h] v1 = this; v2 = this[4]; v3 = (unsigned __int8 *)this[12]; switch ( v2 ) { case 260: case 261: case 262: case 277: case 286: goto LABEL_12; default: if ( v2 == 59 ) { LABEL_12: v4 = 0; v5 = 0; } else { v4 = sub_772C30(&v7, this); if ( v7 == 12 || v7 == 13 ) { sub_775F90((int)v3, (int)&v7, -1); if ( v7 == 12 && v4 == 1 ) *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v3 + 12) + 4 * v8) = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v3 + 12) + 4 * v8) & 0xFFFFFFDE | 0x1E; v5 = v3[46]; v4 = -1; } else if ( v4 == 1 ) { v5 = sub_776750((int)v3, &v7); } else { sub_7766E0((int)v3, &v7); v5 = v3[46]; } } result = sub_7763F0((int *)v3, v5, v4); if ( v1[4] == 59 ) result = sub_7715D0(v1); return result; } } //----- (00774A50) -------------------------------------------------------- signed int __cdecl sub_774A50(int a1) { int v1; // eax int v2; // ebx int v3; // eax int v4; // eax int v5; // eax int v6; // eax signed int result; // eax v1 = *(_DWORD *)(a1 + 52); v2 = *(_DWORD *)(a1 + 4); if ( ++*(_WORD *)(v1 + 38) > 0xC8u ) sub_771670(*(int **)(a1 + 48), 200, (int)"C levels"); switch ( *(_DWORD *)(a1 + 16) ) { case 0x3B: goto LABEL_4; case 0x102: case 0x10A: v6 = sub_7763B0(*(_DWORD *)(a1 + 48)); sub_773840((_DWORD *)a1, v6); break; case 0x103: sub_7715D0((_DWORD *)a1); sub_7735F0(a1); if ( *(_DWORD *)(a1 + 16) != 262 ) { if ( v2 == *(_DWORD *)(a1 + 4) ) sub_771640(262, a1); sub_76FF80(a1, 259); v3 = sub_76FF80(a1, 262); v4 = sub_75FD10(*(_DWORD *)(a1 + 52), "%s expected (to close %s at line %d)", v3); sub_770090(a1, v4); } LABEL_4: sub_7715D0((_DWORD *)a1); break; case 0x108: sub_7741D0((_DWORD *)a1, v2); break; case 0x109: sub_774850(v2, (_DWORD *)a1); break; case 0x10B: sub_7744B0(a1, v2); break; case 0x10D: sub_7715D0((_DWORD *)a1); if ( sub_7716C0((_DWORD *)a1, 265) ) sub_7745C0((_DWORD *)a1); else sub_774670((_DWORD *)a1); break; case 0x111: sub_773BA0(v2); break; case 0x112: sub_7715D0((_DWORD *)a1); sub_774940((_DWORD *)a1); break; case 0x116: sub_773A10(v2); break; case 0x11D: sub_7715D0((_DWORD *)a1); v5 = sub_7716E0((_DWORD *)a1); sub_7738C0((_DWORD *)a1, v5, v2); break; default: sub_7748B0((_DWORD *)a1); break; } *(_BYTE *)(*(_DWORD *)(a1 + 48) + 48) = *(_BYTE *)(*(_DWORD *)(a1 + 48) + 46); result = 0xFFFF; --*(_WORD *)(*(_DWORD *)(a1 + 52) + 38); return result; } //----- (00774CF0) -------------------------------------------------------- signed int __cdecl sub_774CF0(int a1) { signed int result; // eax result = sub_7725D0(a1, 1); if ( !result ) { while ( *(_DWORD *)(a1 + 16) != 274 ) { sub_774A50(a1); result = sub_7725D0(a1, 1); if ( result ) return result; } result = sub_774A50(a1); } return result; } //----- (00774D40) -------------------------------------------------------- int *__usercall sub_774D40@(int *a1@, _DWORD *a2@) { unsigned __int8 *v2; // esi int v3; // ecx int v4; // ST08_4 int v6; // [esp+4h] [ebp-24h] int v7; // [esp+Ch] [ebp-1Ch] int v8; // [esp+14h] [ebp-14h] int v9; // [esp+18h] [ebp-10h] char v10; // [esp+1Ch] [ebp-Ch] v2 = (unsigned __int8 *)a1; sub_772330(a2, a1, (int)&v10); v3 = *(_DWORD *)v2; v8 = -1; v9 = -1; *(_BYTE *)(v3 + 77) = 1; v4 = a2[18]; v6 = 7; v7 = 0; sub_771940(v2, v4, (int)&v6); sub_7715D0(a2); sub_774CF0((int)a2); if ( a2[4] != 286 ) sub_771640(286, (int)a2); return sub_7723F0((int)a2); } //----- (00774DB0) -------------------------------------------------------- int __cdecl sub_774DB0(int a1, int a2, int a3, int a4, void *a5, int a6) { int v6; // esi int v7; // ebx int *v8; // eax int v9; // eax int v10; // ecx char v12; // [esp+Ch] [ebp-84h] int v13; // [esp+48h] [ebp-48h] int v14; // [esp+4Ch] [ebp-44h] int v15; // [esp+5Ch] [ebp-34h] v6 = a1; v7 = sub_767740(a1, 1); v8 = *(int **)(a1 + 8); *v8 = v7; v8[1] = 2146936134; *(_DWORD *)(v6 + 8) += 8; if ( (signed int)((*(_DWORD *)(v6 + 24) - *(_DWORD *)(v6 + 8)) & 0xFFFFFFF8) <= 0 ) sub_7600D0((_DWORD *)a1, 0); v9 = sub_767910(a1); *(_DWORD *)(v7 + 12) = v9; v15 = v9; *(_DWORD *)(v9 + 36) = sub_7676A0(a1, a5); v10 = v15; v14 = a4; *(_DWORD *)(a4 + 28) = 0; *(_DWORD *)(a4 + 16) = 0; *(_DWORD *)(a4 + 4) = 0; v13 = a3; sub_7701C0(a1, (int)&v12, a2, *(_DWORD *)(v10 + 36), a6); sub_774D40(&v15, &v12); return v7; } //----- (00774E60) -------------------------------------------------------- void __usercall __noreturn sub_774E60(int *a1@) { sub_75FD10(*a1, "%s: %s precompiled chunk", a1[3]); sub_75FEE0(*a1, 3); } //----- (00774E80) -------------------------------------------------------- int __usercall sub_774E80@(int a1@) { int v1; // esi int result; // eax void *v3; // edi int v4; // [esp+4h] [ebp-4h] v1 = a1; if ( sub_767AD0(*(_DWORD *)(a1 + 4), &v4, 4) ) sub_774E60((int *)v1); result = v4; if ( v4 ) { v3 = (void *)sub_767B60(*(_DWORD *)v1, *(_DWORD **)(v1 + 8), v4); if ( sub_767AD0(*(_DWORD *)(v1 + 4), v3, v4) ) sub_774E60((int *)v1); result = sub_767620(*(_DWORD *)v1, v3, v4 - 1); } return result; } //----- (00774F00) -------------------------------------------------------- unsigned int __usercall sub_774F00@(int *a1@, int a2) { int *v2; // esi int v3; // ebx void *v4; // eax unsigned int result; // eax int v6; // [esp+4h] [ebp-4h] v2 = a1; if ( sub_767AD0(a1[1], &v6, 4) ) sub_774E60(v2); v3 = v6; if ( v6 < 0 ) sub_774E60(v2); if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) sub_76FDC0(*v2); v4 = (void *)sub_76FDE0(*v2, 0, 0, 4 * v6); *(_DWORD *)(a2 + 12) = v4; *(_DWORD *)(a2 + 48) = v3; result = sub_767AD0(v2[1], v4, 4 * v3); if ( result ) sub_774E60(v2); return result; } //----- (00774F90) -------------------------------------------------------- int __usercall sub_774F90@(int *a1@, _DWORD *a2@) { int *v2; // esi int v3; // ebx int v4; // eax int *v5; // ebx int v6; // eax int v7; // ebx int result; // eax int i; // ebx double v10; // [esp+8h] [ebp-14h] int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] char v13; // [esp+1Ah] [ebp-2h] char v14; // [esp+1Bh] [ebp-1h] v2 = a1; if ( sub_767AD0(a1[1], &v11, 4) ) goto LABEL_2; v3 = v11; if ( v11 < 0 ) sub_774E60(v2); if ( (unsigned int)(v11 + 1) > 0x1FFFFFFF ) sub_76FDC0(*v2); a2[2] = sub_76FDE0(*v2, 0, 0, 8 * v11); v4 = 0; for ( a2[11] = v3; v4 < v3; ++v4 ) *(_DWORD *)(a2[2] + 8 * v4 + 4) = 2146936064; v12 = 0; if ( v3 > 0 ) { while ( 1 ) { v5 = (int *)(a2[2] + 8 * v12); if ( sub_767AD0(v2[1], &v14, 1) ) break; switch ( v14 ) { case 0: v5[1] = 2146936064; break; case 1: if ( sub_767AD0(v2[1], &v13, 1) ) goto LABEL_2; *v5 = v13; v5[1] = 2146936065; break; case 3: if ( sub_767AD0(v2[1], &v10, 8) ) goto LABEL_2; *(double *)v5 = v10; break; case 4: v6 = sub_774E80((int)v2); *v5 = v6; v5[1] = *(unsigned __int8 *)(v6 + 4) | 0x7FF7A540; break; default: break; } if ( ++v12 >= v11 ) goto LABEL_19; } LABEL_2: sub_774E60(v2); } LABEL_19: if ( sub_767AD0(v2[1], &v12, 4) ) sub_774E60(v2); v7 = v12; if ( v12 < 0 ) sub_774E60(v2); if ( (unsigned int)(v12 + 1) > 0x3FFFFFFF ) sub_76FDC0(*v2); a2[4] = sub_76FDE0(*v2, 0, 0, 4 * v12); result = 0; for ( a2[14] = v7; result < v7; ++result ) *(_DWORD *)(a2[4] + 4 * result) = 0; for ( i = 0; i < v12; ++i ) { *(_DWORD *)(a2[4] + 4 * i) = sub_767910(*v2); result = sub_775530(v2, *(_DWORD *)(a2[4] + 4 * i)); } return result; } //----- (00775190) -------------------------------------------------------- signed int __usercall sub_775190@(int a1@, int *a2) { int v2; // esi int v3; // edi signed int result; // eax int i; // ebx int v6; // [esp+Ch] [ebp-8h] char v7; // [esp+12h] [ebp-2h] char v8; // [esp+13h] [ebp-1h] v2 = a1; if ( sub_767AD0(a2[1], &v6, 4) ) sub_774E60(a2); v3 = v6; if ( v6 < 0 ) sub_774E60(a2); if ( (unsigned int)(v6 + 1) > 0x1FFFFFFF ) sub_76FDC0(*a2); *(_DWORD *)(v2 + 28) = sub_76FDE0(*a2, 0, 0, 8 * v6); result = 0; for ( *(_DWORD *)(v2 + 40) = v3; result < v3; ++result ) *(_DWORD *)(*(_DWORD *)(v2 + 28) + 8 * result) = 0; for ( i = 0; i < v3; ++i ) { if ( sub_767AD0(a2[1], &v8, 1) || (*(_BYTE *)(*(_DWORD *)(v2 + 28) + 8 * i + 4) = v8, (result = sub_767AD0(a2[1], &v7, 1)) != 0) ) { sub_774E60(a2); } *(_BYTE *)(*(_DWORD *)(v2 + 28) + 8 * i + 5) = v7; } return result; } //----- (00775290) -------------------------------------------------------- int __usercall sub_775290@(int a1@, _DWORD *a2@) { int v2; // esi int v3; // ebx void *v4; // eax int v5; // edx int v6; // ebx int v7; // eax int v8; // ecx int v9; // ebx int v10; // eax void *v11; // eax int v12; // ST04_4 int result; // eax int v14; // ebx void *v15; // [esp+8h] [ebp-18h] int v16; // [esp+Ch] [ebp-14h] void *v17; // [esp+10h] [ebp-10h] int v18; // [esp+14h] [ebp-Ch] int v19; // [esp+18h] [ebp-8h] int v20; // [esp+1Ch] [ebp-4h] v2 = a1; a2[9] = sub_774E80(a1); if ( sub_767AD0(*(_DWORD *)(v2 + 4), &v20, 4) ) goto LABEL_2; if ( v20 < 0 ) LABEL_4: sub_774E60((int *)v2); if ( (unsigned int)(v20 + 1) > 0x3FFFFFFF ) sub_76FDC0(*(_DWORD *)v2); v3 = 4 * v20; v4 = (void *)sub_76FDE0(*(_DWORD *)v2, 0, 0, 4 * v20); v5 = v20; a2[5] = v4; a2[13] = v5; if ( sub_767AD0(*(_DWORD *)(v2 + 4), v4, v3) ) sub_774E60((int *)v2); if ( sub_767AD0(*(_DWORD *)(v2 + 4), &v18, 4) ) sub_774E60((int *)v2); v6 = v18; if ( v18 < 0 ) sub_774E60((int *)v2); if ( (unsigned int)(v18 + 1) > 0x15555555 ) sub_76FDC0(*(_DWORD *)v2); a2[6] = sub_76FDE0(*(_DWORD *)v2, 0, 0, 12 * v18); a2[15] = v6; if ( v6 > 0 ) { v7 = 0; v8 = v6; do { *(_DWORD *)(v7 + a2[6]) = 0; v7 += 12; --v8; } while ( v8 ); } v19 = 0; if ( v6 > 0 ) { v9 = 0; while ( !sub_767AD0(*(_DWORD *)(v2 + 4), &v20, 4) ) { v10 = v20; if ( v20 ) { v11 = (void *)sub_767B60(*(_DWORD *)v2, *(_DWORD **)(v2 + 8), v20); v12 = *(_DWORD *)(v2 + 4); v17 = v11; if ( sub_767AD0(v12, v11, v20) ) break; v10 = sub_767620(*(_DWORD *)v2, v17, v20 - 1); } *(_DWORD *)(v9 + a2[6]) = v10; if ( sub_767AD0(*(_DWORD *)(v2 + 4), &v16, 4) ) break; if ( v16 < 0 ) goto LABEL_4; *(_DWORD *)(a2[6] + v9 + 4) = v16; if ( sub_767AD0(*(_DWORD *)(v2 + 4), &v15, 4) ) break; if ( (signed int)v15 < 0 ) goto LABEL_4; *(_DWORD *)(a2[6] + v9 + 8) = v15; v9 += 12; if ( ++v19 >= v18 ) goto LABEL_29; } LABEL_2: sub_774E60((int *)v2); } LABEL_29: if ( sub_767AD0(*(_DWORD *)(v2 + 4), &v18, 4) ) sub_774E60((int *)v2); result = v18; if ( v18 < 0 ) sub_774E60((int *)v2); v14 = 0; if ( v18 > 0 ) { while ( !sub_767AD0(*(_DWORD *)(v2 + 4), &v20, 4) ) { result = v20; if ( v20 ) { v15 = (void *)sub_767B60(*(_DWORD *)v2, *(_DWORD **)(v2 + 8), v20); if ( sub_767AD0(*(_DWORD *)(v2 + 4), v15, v20) ) goto LABEL_2; result = sub_767620(*(_DWORD *)v2, v15, v20 - 1); } *(_DWORD *)(a2[7] + 8 * v14++) = result; if ( v14 >= v18 ) return result; } goto LABEL_2; } return result; } //----- (00775530) -------------------------------------------------------- int __cdecl sub_775530(int *a1, int a2) { int *v2; // esi int v3; // edi v2 = a1; if ( sub_767AD0(a1[1], &a1, 4) ) sub_774E60(v2); if ( (signed int)a1 < 0 ) sub_774E60(v2); v3 = a2; *(_DWORD *)(a2 + 64) = a1; if ( sub_767AD0(v2[1], &a1, 4) ) sub_774E60(v2); if ( (signed int)a1 < 0 ) sub_774E60(v2); *(_DWORD *)(v3 + 68) = a1; if ( sub_767AD0(v2[1], (char *)&a1 + 3, 1) ) sub_774E60(v2); *(_BYTE *)(v3 + 76) = HIBYTE(a1); if ( sub_767AD0(v2[1], (char *)&a1 + 3, 1) ) sub_774E60(v2); *(_BYTE *)(v3 + 77) = HIBYTE(a1); if ( sub_767AD0(v2[1], (char *)&a1 + 3, 1) ) sub_774E60(v2); *(_BYTE *)(v3 + 78) = HIBYTE(a1); sub_774F00(v2, v3); sub_774F90(v2, (_DWORD *)v3); sub_775190(v3, v2); return sub_775290((int)v2, (_DWORD *)v3); } //----- (00775640) -------------------------------------------------------- int __cdecl sub_775640(int a1) { int result; // eax result = a1; *(_DWORD *)a1 = 1635077147; *(_WORD *)(a1 + 4) = 82; *(_WORD *)(a1 + 6) = 1025; *(_WORD *)(a1 + 8) = 1028; *(_WORD *)(a1 + 10) = 8; *(_DWORD *)(a1 + 12) = 168661785; *(_WORD *)(a1 + 16) = 2586; return result; } //----- (00775680) -------------------------------------------------------- char __thiscall sub_775680(int *this) { int *v1; // esi int v2; // ST00_4 unsigned int v3; // edx int *v4; // eax int *v5; // ecx char result; // al unsigned int v7; // eax int v8; // ecx int v9; // [esp+8h] [ebp-2Ch] char v10; // [esp+Ch] [ebp-28h] char v11; // [esp+Dh] [ebp-27h] int v12; // [esp+1Ch] [ebp-18h] int v13; // [esp+20h] [ebp-14h] int v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] __int16 v16; // [esp+2Ch] [ebp-8h] v1 = this; v15 = 168661785; v2 = this[1]; v12 = 1635077147; v13 = 67174482; v14 = 525316; v16 = 2586; LOBYTE(v9) = 27; if ( sub_767AD0(v2, (char *)&v9 + 1, 17) ) sub_774E60(v1); v3 = 18; v4 = &v9; v5 = &v12; do { if ( *v5 != *v4 ) goto LABEL_8; v3 -= 4; ++v4; ++v5; } while ( v3 >= 4 ); if ( *(_BYTE *)v4 != *(_BYTE *)v5 || (result = *((_BYTE *)v4 + 1), result != *((_BYTE *)v5 + 1)) ) { LABEL_8: if ( v9 == 1635077147 ) { if ( v10 == 82 && !v11 ) { v7 = 12; v8 = 0; while ( *(int *)((char *)&v12 + v8) == *(int *)((char *)&v9 + v8) ) { v7 -= 4; v8 += 4; if ( v7 < 4 ) sub_774E60(v1); } sub_774E60(v1); } sub_774E60(v1); } sub_774E60(v1); } return result; } //----- (00775780) -------------------------------------------------------- int __cdecl sub_775780(_DWORD *a1, int a2, int a3, const char *a4) { const char *v4; // ecx char v5; // al _DWORD *v6; // esi int v7; // edi int *v8; // eax int v9; // eax int v10; // ebx int result; // eax int v12; // esi _DWORD *v13; // [esp+0h] [ebp-10h] int v14; // [esp+4h] [ebp-Ch] int v15; // [esp+8h] [ebp-8h] const char *v16; // [esp+Ch] [ebp-4h] v4 = a4; v5 = *a4; if ( *a4 == 64 || v5 == 61 ) { v4 = a4 + 1; } else if ( v5 == 27 ) { v16 = "binary string"; goto LABEL_7; } v16 = v4; LABEL_7: v6 = a1; v15 = a3; v13 = a1; v14 = a2; sub_775680((int *)&v13); v7 = sub_767740((int)a1, 1); v8 = (int *)a1[2]; *v8 = v7; v8[1] = 2146936134; v6[2] += 8; if ( (signed int)((v6[6] - v6[2]) & 0xFFFFFFF8) <= 0 ) sub_7600D0(a1, 0); v9 = sub_767910((int)a1); *(_DWORD *)(v7 + 12) = v9; sub_775530((int *)&v13, v9); v10 = *(_DWORD *)(v7 + 12); if ( *(_DWORD *)(v10 + 40) == 1 ) return v7; result = sub_767740((int)a1, *(_DWORD *)(v10 + 40)); *(_DWORD *)(result + 12) = v10; v12 = a1[2]; *(_DWORD *)(v12 - 8) = result; *(_DWORD *)(v12 - 4) = 2146936134; return result; } //----- (00775850) -------------------------------------------------------- int __cdecl sub_775850(int a1) { int result; // eax result = *(_DWORD *)(a1 + 20); *(_DWORD *)(a1 + 24) = result; return result; } //----- (00775860) -------------------------------------------------------- signed int __usercall sub_775860@(int a1@, signed int a2@) { int v2; // edi _DWORD *v3; // eax _BYTE *v4; // esi int v5; // eax if ( a2 == -1 ) return 0; v2 = *(_DWORD *)(*(_DWORD *)a1 + 12); while ( 1 ) { v3 = (_DWORD *)(v2 + 4 * a2); if ( a2 < 1 || (v4 = v3 - 1, byte_A0F32C[*(v3 - 1) & 0x3F] >= 0) ) v4 = (_BYTE *)(v2 + 4 * a2); if ( (*v4 & 0x3F) != 28 ) break; v5 = (*v3 >> 14) - 0x1FFFF; if ( v5 != -1 ) { a2 += v5 + 1; if ( a2 != -1 ) continue; } return 0; } return 1; } //----- (007758C0) -------------------------------------------------------- int __usercall sub_7758C0@(int result@, int a2@) { signed int i; // esi int v3; // eax unsigned int *v4; // ecx for ( i = result; i != -1; i += result + 1 ) { v3 = 4 * i + *(_DWORD *)(*(_DWORD *)a2 + 12); if ( i < 1 || (v4 = (unsigned int *)(v3 - 4), byte_A0F32C[*(_DWORD *)(v3 - 4) & 0x3F] >= 0) ) v4 = (unsigned int *)(4 * i + *(_DWORD *)(*(_DWORD *)a2 + 12)); if ( (*(_BYTE *)v4 & 0x3F) == 28 ) *v4 = ((unsigned int)&loc_7FBFFE + 2) & *v4 | ((*v4 & 0xFFB7FFFF | 0x360000) >> 17); result = (*(_DWORD *)(4 * i + *(_DWORD *)(*(_DWORD *)a2 + 12)) >> 14) - 0x1FFFF; if ( result == -1 ) break; } return result; } //----- (00775940) -------------------------------------------------------- int __usercall sub_775940@(int result@, int *a2, int a3, int a4, int a5) { signed int v5; // edi int v6; // esi unsigned int v7; // eax int *v8; // esi int v9; // eax unsigned int *v10; // ecx unsigned int v11; // eax unsigned int v12; // esi int v13; // ecx int v14; // [esp+4h] [ebp-4h] v5 = result; if ( result != -1 ) { do { v6 = *(_DWORD *)(*a2 + 12); v7 = *(_DWORD *)(v6 + 4 * v5); v8 = (int *)(4 * v5 + v6); v9 = (v7 >> 14) - 0x1FFFF; if ( v9 == -1 ) v14 = -1; else v14 = v9 + v5 + 1; if ( v5 < 1 || (v10 = (unsigned int *)(v8 - 1), byte_A0F32C[*(v8 - 1) & 0x3F] >= 0) ) v10 = (unsigned int *)v8; v11 = *v10; if ( (*(_BYTE *)v10 & 0x3F) == 28 ) { if ( a4 == 255 || a4 == v11 >> 23 ) v12 = ((unsigned int)&loc_7FBFFE + 2) & v11 | ((v11 & 0xFFB7FFFF | 0x360000) >> 17); else v12 = v11 ^ ((unsigned __int16)v11 ^ (unsigned __int16)((_WORD)a4 << 6)) & 0x3FC0; *v10 = v12; v8 = (int *)(4 * v5 + *(_DWORD *)(*a2 + 12)); result = abs(a3 - v5 - 1); if ( result > 0x1FFFF ) sub_770090(a2[3], (int)"control structure too long"); v13 = *v8 & 0x3FFF ^ ((a3 - v5 + 131070) << 14); } else { if ( abs(a5 - v5 - 1) > 0x1FFFF ) sub_770090(a2[3], (int)"control structure too long"); result = *v8 & 0x3FFF; v13 = result ^ ((a5 - v5 + 131070) << 14); } v5 = v14; *v8 = v13; } while ( v14 != -1 ); } return result; } //----- (00775A70) -------------------------------------------------------- unsigned int *__cdecl sub_775A70(int a1, int a2, int a3) { int v3; // ecx unsigned int *result; // eax int v5; // edi int v6; // eax int v7; // edx v3 = a2; result = (unsigned int *)(a3 + 1); if ( a2 != -1 ) { v5 = (unsigned __int8)result << 6; do { v6 = (*(_DWORD *)(*(_DWORD *)(*(_DWORD *)a1 + 12) + 4 * v3) >> 14) - 0x1FFFF; if ( v6 == -1 ) v7 = -1; else v7 = v6 + v3 + 1; result = (unsigned int *)(*(_DWORD *)(*(_DWORD *)a1 + 12) + 4 * v3); *result = v5 | *result & 0xFFFFC03F; v3 = v7; } while ( v7 != -1 ); } return result; } //----- (00775AD0) -------------------------------------------------------- void __cdecl sub_775AD0(int *a1, int *a2, int a3) { int v3; // ecx int v4; // esi int v5; // eax int v6; // eax if ( a3 != -1 ) { v3 = *a2; if ( *a2 == -1 ) { *a2 = a3; } else { v4 = *(_DWORD *)(*a1 + 12); while ( 1 ) { v5 = (*(_DWORD *)(v4 + 4 * v3) >> 14) - 0x1FFFF; if ( v5 == -1 ) break; v6 = v5 + v3 + 1; if ( v6 == -1 ) break; v3 = v6; } if ( abs(a3 - v3 - 1) > 0x1FFFF ) sub_770090(a1[3], (int)"control structure too long"); *(_DWORD *)(v4 + 4 * v3) = *(_DWORD *)(v4 + 4 * v3) & 0x3FFF ^ ((a3 - v3 + 131070) << 14); } } } //----- (00775B50) -------------------------------------------------------- int __usercall sub_775B50@(int *a1@, int a2) { int *v2; // edi int v3; // ecx int result; // eax v2 = (int *)*a1; sub_775940(a1[7], a1, a1[5], 255, a1[5]); v3 = a1[5] + 1; a1[7] = -1; if ( v3 > v2[12] ) v2[3] = sub_76FE50(*(_DWORD *)(a1[3] + 52), v2[3], v2 + 12, 4u, 2147483645, (int)"opcodes"); *(_DWORD *)(v2[3] + 4 * a1[5]) = a2; if ( a1[5] + 1 > v2[13] ) v2[5] = sub_76FE50(*(_DWORD *)(a1[3] + 52), v2[5], v2 + 13, 4u, 2147483645, (int)"opcodes"); *(_DWORD *)(v2[5] + 4 * a1[5]) = *(_DWORD *)(a1[3] + 8); result = a1[5]; a1[5] = result + 1; return result; } //----- (00775C00) -------------------------------------------------------- int __cdecl sub_775C00(int *a1, int a2, int a3, int a4, int a5) { return sub_775B50(a1, a2 | ((a3 | ((a5 | (a4 << 9)) << 8)) << 6)); } //----- (00775C30) -------------------------------------------------------- int __cdecl sub_775C30(int *a1, int a2, int a3, int a4) { return sub_775B50(a1, a2 | ((a3 | (a4 << 8)) << 6)); } //----- (00775C60) -------------------------------------------------------- int __cdecl sub_775C60(int *a1, int a2, signed int a3) { int v4; // ebx if ( a3 <= 0x3FFFF ) return sub_775B50(a1, ((a2 | (a3 << 8)) << 6) | 1); v4 = sub_775B50(a1, (a2 << 6) | 2); sub_775B50(a1, (a3 << 6) | 0x27); return v4; } //----- (00775CC0) -------------------------------------------------------- int __cdecl sub_775CC0(int a1, int a2) { int result; // eax result = a2 + *(unsigned __int8 *)(a1 + 48); if ( result > *(unsigned __int8 *)(*(_DWORD *)a1 + 78) ) { if ( result >= 250 ) sub_770090(*(_DWORD *)(a1 + 12), (int)"function or expression too complex"); *(_BYTE *)(*(_DWORD *)a1 + 78) = result; } return result; } //----- (00775D00) -------------------------------------------------------- int __cdecl sub_775D00(int a1, int a2) { int result; // eax result = a2 + *(unsigned __int8 *)(a1 + 48); if ( result > *(unsigned __int8 *)(*(_DWORD *)a1 + 78) ) { if ( result >= 250 ) sub_770090(*(_DWORD *)(a1 + 12), (int)"function or expression too complex"); *(_BYTE *)(*(_DWORD *)a1 + 78) = result; } *(_BYTE *)(a1 + 48) += a2; return result; } //----- (00775D40) -------------------------------------------------------- signed int __usercall sub_775D40@(signed int result@, int a2@) { if ( *(_DWORD *)result == 6 ) { result = *(_DWORD *)(result + 8); if ( !(result & 0x100) && result >= *(unsigned __int8 *)(a2 + 46) ) --*(_BYTE *)(a2 + 48); } return result; } //----- (00775D60) -------------------------------------------------------- signed int __cdecl sub_775D60(int *a1, int *a2) { int *v2; // ecx int *v3; // eax int v4; // esi int *v5; // edi int v6; // ecx int *v7; // edx int v8; // edi _DWORD *v9; // ebx int v10; // eax int v11; // ecx int v12; // ecx int v13; // eax int *v15; // [esp+14h] [ebp-Ch] int v16; // [esp+18h] [ebp-8h] signed int v17; // [esp+1Ch] [ebp-4h] v16 = *(_DWORD *)(a1[3] + 52); v3 = sub_765EA0(v16, a1[1], v2); v4 = *a1; v15 = v3; if ( (v3[1] & 0x7FFFFF00) != 2146936064 ) { v17 = (signed int)*(double *)v3; v5 = (int *)(*(_DWORD *)(v4 + 8) + 8 * v17); v6 = (v5[1] & 0x7FFFFF00) == 2146936064 ? (unsigned __int8)(v5[1] == a2[1]) : (unsigned __int8)((a2[1] & 0x7FFFFF00) != 2146936064); if ( v6 ) { if ( sub_763AD0(0, v5, a2) ) return v17; v3 = v15; } } v7 = a1; v8 = *(_DWORD *)(v4 + 44); v9 = (_DWORD *)(v4 + 44); v17 = a1[8]; *(double *)v3 = (double)v17; if ( v17 + 1 > *(_DWORD *)(v4 + 44) ) { v10 = sub_76FE50(v16, *(_DWORD *)(v4 + 8), (int *)(v4 + 44), 8u, 0x3FFFFFF, (int)"constants"); v7 = a1; *(_DWORD *)(v4 + 8) = v10; } for ( ; v8 < *v9; ++v8 ) *(_DWORD *)(*(_DWORD *)(v4 + 8) + 8 * v8 + 4) = 2146936064; v11 = *(_DWORD *)(v4 + 8); *(_DWORD *)(v11 + 8 * v17) = *a2; *(_DWORD *)(v11 + 8 * v17 + 4) = a2[1]; ++v7[8]; v12 = a2[1]; if ( (v12 & 0x7FFFFF00) != 2146936064 ) LOBYTE(v12) = 3; if ( v12 & 0x40 ) { v13 = *a2; if ( *(_BYTE *)(*a2 + 5) & 3 ) { if ( *(_BYTE *)(v4 + 5) & 4 ) sub_761FB0(v16, v4, v13); } } return v17; } //----- (00775ED0) -------------------------------------------------------- signed int __cdecl sub_775ED0(int *a1, int a2) { int v3; // [esp+0h] [ebp-8h] int v4; // [esp+4h] [ebp-4h] v3 = a2; v4 = *(unsigned __int8 *)(a2 + 4) | 0x7FF7A540; return sub_775D60(a1, &v3); } //----- (00775F00) -------------------------------------------------------- int __cdecl sub_775F00(int a1, double a2) { int v2; // esi int result; // eax int *v4; // edi int v5; // eax int v6; // ecx double v7; // [esp+0h] [ebp-8h] v2 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 52); v7 = a2; if ( 0.0 != a2 ) return sub_775D60((int *)a1, (int *)&v7); v4 = *(int **)(v2 + 8); *(_DWORD *)(v2 + 8) = v4 + 2; v5 = sub_767620(v2, &a2, 8u); *v4 = v5; v4[1] = *(unsigned __int8 *)(v5 + 4) | 0x7FF7A540; v6 = *(_DWORD *)(v2 + 8); result = sub_775D60((int *)a1, (int *)&v7); *(_DWORD *)(v2 + 8) -= 8; return result; } //----- (00775F90) -------------------------------------------------------- unsigned __int8 *__cdecl sub_775F90(int a1, int a2, int a3) { unsigned __int8 *result; // eax int v4; // eax int v5; // ecx int v6; // edx unsigned int *v7; // ecx int v8; // ecx result = *(unsigned __int8 **)a2; if ( *(_DWORD *)a2 == 12 ) { v4 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)(*(_DWORD *)a1 + 12); v6 = *(_DWORD *)(v5 + 4 * v4) ^ ((a3 + 1) << 14); result = (unsigned __int8 *)(v5 + 4 * v4); *(_DWORD *)result ^= ((unsigned int)&loc_7FBFFE + 2) & v6; } else if ( result == (unsigned __int8 *)13 ) { result = (unsigned __int8 *)a1; v7 = (unsigned int *)(*(_DWORD *)(*(_DWORD *)a1 + 12) + 4 * *(_DWORD *)(a2 + 8)); *v7 = ((unsigned int)&locret_7FFFFD + 2) & *v7 ^ ((a3 + 1) << 23); *(_DWORD *)(*(_DWORD *)(*(_DWORD *)result + 12) + 4 * *(_DWORD *)(a2 + 8)) = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)result + 12) + 4 * *(_DWORD *)(a2 + 8)) & 0xFFFFC03F | (result[48] << 6); v8 = *(unsigned __int8 *)(a1 + 48) + 1; if ( v8 > *(unsigned __int8 *)(*(_DWORD *)a1 + 78) ) { if ( v8 >= 250 ) sub_770090(*(_DWORD *)(a1 + 12), (int)"function or expression too complex"); *(_BYTE *)(*(_DWORD *)a1 + 78) = v8; } ++*(_BYTE *)(a1 + 48); } return result; } //----- (00776040) -------------------------------------------------------- _DWORD *__cdecl sub_776040(int a1, _DWORD *a2) { _DWORD *result; // eax int v3; // ecx unsigned int *v4; // ecx result = a2; if ( *a2 == 12 ) { v3 = a2[2]; *a2 = 6; a2[2] = (*(_DWORD *)(*(_DWORD *)(*(_DWORD *)a1 + 12) + 4 * v3) >> 6) & 0xFF; } else if ( *a2 == 13 ) { v4 = (unsigned int *)(*(_DWORD *)(*(_DWORD *)a1 + 12) + 4 * a2[2]); *v4 = ((unsigned int)&locret_7FFFFD + 2) & *v4 | 0x1000000; *a2 = 11; } return result; } //----- (007760A0) -------------------------------------------------------- _DWORD *__cdecl sub_7760A0(int a1, int a2) { _DWORD *result; // eax int *v3; // esi int v4; // eax signed int v5; // eax signed int v6; // ecx signed int v7; // eax result = (_DWORD *)(*(_DWORD *)a2 - 7); switch ( *(_DWORD *)a2 ) { case 7: *(_DWORD *)a2 = 6; break; case 8: v3 = (int *)a1; v4 = (*(_DWORD *)(a2 + 8) << 23) | 5; goto LABEL_13; case 9: v5 = *(signed __int16 *)(a2 + 8); v3 = (int *)a1; v6 = 6; if ( !(v5 & 0x100) && v5 >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); if ( *(_BYTE *)(a2 + 11) == 7 ) { v7 = *(unsigned __int8 *)(a2 + 10); if ( !(v7 & 0x100) && v7 >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); v6 = 7; } v4 = v6 | ((*(signed __int16 *)(a2 + 8) | (*(unsigned __int8 *)(a2 + 10) << 9)) << 14); LABEL_13: result = (_DWORD *)sub_775B50(v3, v4); *(_DWORD *)(a2 + 8) = result; *(_DWORD *)a2 = 11; break; case 0xC: case 0xD: result = sub_776040(a1, (_DWORD *)a2); break; default: return result; } return result; } //----- (00776170) -------------------------------------------------------- int __usercall sub_776170@(int a1@, int a2@) { signed int v2; // eax int *v3; // ecx int result; // eax v2 = *(_DWORD *)(a1 + 8); v3 = (int *)(*(_DWORD *)(*(_DWORD *)a2 + 12) + 4 * v2); if ( v2 >= 1 && byte_A0F32C[*(v3 - 1) & 0x3F] < 0 ) --v3; result = *v3; *v3 ^= ((unsigned __int16)*v3 ^ (unsigned __int16)(((*v3 & 0x3FC0) == 0) << 6)) & 0x3FC0; return result; } //----- (007761C0) -------------------------------------------------------- signed int __usercall sub_7761C0@(int a1@, int a2@, int a3@) { double v3; // st7 if ( *(_DWORD *)a3 != 5 || *(_DWORD *)(a3 + 16) != -1 || *(_DWORD *)(a3 + 20) != -1 || *(_DWORD *)a2 != 5 || *(_DWORD *)(a2 + 16) != -1 || *(_DWORD *)(a2 + 20) != -1 || (a1 == 16 || a1 == 17) && 0.0 == *(double *)(a2 + 8) ) { return 0; } v3 = *(double *)(a3 + 8); sub_75F740(a1 - 13, v3, *(double *)(a2 + 8)); *(double *)(a3 + 8) = v3; return 1; } //----- (00776230) -------------------------------------------------------- int __cdecl sub_776230(_DWORD *a1, int a2) { int result; // eax result = *(_DWORD *)(*a1 + 20); *(_DWORD *)(result + 4 * a1[5] - 4) = a2; return result; } //----- (00776250) -------------------------------------------------------- int __cdecl sub_776250(int a1, int a2, int a3, int a4) { int v4; // edi int v5; // eax int result; // eax v4 = (a3 - 1) / 50 + 1; v5 = a4 != -1 ? a4 : 0; if ( v4 > 511 ) { if ( v4 > 0x3FFFFFF ) sub_770090(*(_DWORD *)(a1 + 12), (int)"constructor too long"); sub_775B50((int *)a1, ((a2 | (v5 << 17)) << 6) | 0x24); result = sub_775B50((int *)a1, (v4 << 6) | 0x27); *(_BYTE *)(a1 + 48) = a2 + 1; } else { result = sub_775B50((int *)a1, ((a2 | ((v4 | (v5 << 9)) << 8)) << 6) | 0x24); *(_BYTE *)(a1 + 48) = a2 + 1; } return result; } //----- (00776300) -------------------------------------------------------- int __cdecl sub_776300(int *a1, int a2, int a3) { int v3; // ebx int v4; // edx int v5; // eax unsigned int *v6; // edi unsigned int v7; // ecx int v8; // eax int v9; // ecx int result; // eax v3 = a2; v4 = a2 + a3 - 1; v5 = a1[5]; if ( v5 <= a1[6] ) return sub_775B50(a1, ((a2 | ((a3 - 1) << 17)) << 6) | 4); v6 = (unsigned int *)(*(_DWORD *)(*a1 + 12) + 4 * v5 - 4); v7 = *v6; if ( (*v6 & 0x3F) != 4 ) return sub_775B50(a1, ((a2 | ((a3 - 1) << 17)) << 6) | 4); v8 = (v7 >> 6) & 0xFF; v9 = v8 + (v7 >> 23); if ( a2 < v8 ) { LABEL_6: if ( v8 <= a2 + a3 ) goto LABEL_7; return sub_775B50(a1, ((a2 | ((a3 - 1) << 17)) << 6) | 4); } if ( a2 > v9 + 1 ) { if ( a2 > v8 ) return sub_775B50(a1, ((a2 | ((a3 - 1) << 17)) << 6) | 4); goto LABEL_6; } LABEL_7: if ( v8 < a2 ) v3 = v8; if ( v9 > v4 ) v4 = v9; result = (unsigned __int8)v3 << 6; *v6 = ((unsigned int)&loc_7FC03B + 4) & *v6 | result | ((v4 - v3) << 23) & 0xFF800000; return result; } //----- (007763B0) -------------------------------------------------------- int __cdecl sub_7763B0(int a1) { int *v1; // esi int v2; // edi v1 = (int *)a1; v2 = *(_DWORD *)(a1 + 28); *(_DWORD *)(a1 + 28) = -1; a1 = sub_775B50(v1, 2147450903); sub_775AD0(v1, &a1, v2); return a1; } //----- (007763F0) -------------------------------------------------------- int __cdecl sub_7763F0(int *a1, int a2, int a3) { return sub_775B50(a1, (a2 << 6) | ((a3 + 1) << 23) | 0x1F); } //----- (00776420) -------------------------------------------------------- void __cdecl sub_776420(int *a1, int a2) { a1[6] = a1[5]; sub_775AD0(a1, a1 + 7, a2); } //----- (00776440) -------------------------------------------------------- _DWORD *__usercall sub_776440@(int a1@, int a2@, int a3@) { int *v3; // esi _DWORD *result; // eax signed int v5; // eax int v6; // edx int v7; // eax int v8; // ecx int v9; // [esp+4h] [ebp-8h] v3 = (int *)a1; sub_7760A0(a1, v9); result = *(_DWORD **)a2; switch ( *(_DWORD *)a2 ) { case 1: result = (_DWORD *)sub_776300(v3, a3, 1); *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; case 2: case 3: result = (_DWORD *)sub_775B50(v3, ((a3 | ((*(_DWORD *)a2 == 2) << 17)) << 6) | 3); *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; case 4: result = (_DWORD *)sub_775C60(v3, a3, *(_DWORD *)(a2 + 8)); *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; case 5: v5 = sub_775F00((int)v3, *(double *)(a2 + 8)); result = (_DWORD *)sub_775C60(v3, a3, v5); *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; case 6: result = *(_DWORD **)(a2 + 8); if ( (_DWORD *)a3 != result ) result = (_DWORD *)sub_775B50(v3, (a3 | (*(_DWORD *)(a2 + 8) << 17)) << 6); *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; case 0xB: v6 = *(_DWORD *)(*v3 + 12); v7 = *(_DWORD *)(a2 + 8); v8 = *(_DWORD *)(v6 + 4 * v7) ^ (a3 << 6); result = (_DWORD *)(v6 + 4 * v7); *result ^= v8 & 0x3FC0; *(_DWORD *)(a2 + 8) = a3; *(_DWORD *)a2 = 6; break; default: return result; } return result; } //----- (00776560) -------------------------------------------------------- _DWORD *__usercall sub_776560@(_DWORD *result@, _DWORD *a2@) { int v2; // ebx int v3; // ecx v2 = (int)a2; if ( *a2 != 6 ) { v3 = *((unsigned __int8 *)result + 48) + 1; if ( v3 > *(unsigned __int8 *)(*result + 78) ) { if ( v3 >= 250 ) sub_770090(result[3], (int)"function or expression too complex"); *(_BYTE *)(*result + 78) = v3; } result = sub_776440((int)result, v2, (unsigned __int8)++*((_BYTE *)result + 48) - 1); } return result; } //----- (007765B0) -------------------------------------------------------- signed int __usercall sub_7765B0@(int a1@, int a2@, int a3) { int *v3; // esi _DWORD *v4; // ebx signed int v5; // edx signed int v6; // edi int v7; // edi int v8; // ST14_4 int v9; // edi signed int result; // eax signed int v11; // [esp+Ch] [ebp-Ch] signed int v12; // [esp+10h] [ebp-8h] int v13; // [esp+14h] [ebp-4h] v3 = (int *)a2; v4 = (_DWORD *)a1; sub_776440(a2, a1, a3); if ( *v4 == 10 ) sub_775AD0(v3, v4 + 4, v4[2]); v5 = v4[4]; v6 = v4[5]; if ( v5 != v6 ) { v12 = -1; v11 = -1; if ( sub_775860((int)v3, v5) || sub_775860((int)v3, v6) ) { if ( *v4 == 10 ) { v13 = -1; } else { v7 = v3[7]; v3[7] = -1; v13 = sub_775B50(v3, 2147450903); sub_775AD0(v3, &v13, v7); } v3[6] = v3[5]; v12 = sub_775B50(v3, (a3 << 6) | 0x4003); v3[6] = v3[5]; v11 = sub_775B50(v3, (unsigned int)&loc_800003 | (a3 << 6)); v8 = v13; v3[6] = v3[5]; sub_775AD0(v3, v3 + 7, v8); } v9 = v3[5]; v3[6] = v9; sub_775940(v4[5], v3, v9, a3, v12); sub_775940(v4[4], v3, v9, a3, v11); } result = -1; v4[4] = -1; v4[5] = -1; v4[2] = a3; *v4 = 6; return result; } //----- (007766E0) -------------------------------------------------------- signed int __cdecl sub_7766E0(int a1, _DWORD *a2) { signed int v2; // eax int v3; // eax sub_7760A0(a1, (int)a2); if ( *a2 == 6 ) { v2 = a2[2]; if ( !(v2 & 0x100) && v2 >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); } v3 = *(unsigned __int8 *)(a1 + 48) + 1; if ( v3 > *(unsigned __int8 *)(*(_DWORD *)a1 + 78) ) { if ( v3 >= 250 ) sub_770090(*(_DWORD *)(a1 + 12), (int)"function or expression too complex"); *(_BYTE *)(*(_DWORD *)a1 + 78) = v3; } return sub_7765B0((int)a2, a1, (unsigned __int8)++*(_BYTE *)(a1 + 48) - 1); } //----- (00776750) -------------------------------------------------------- signed int __cdecl sub_776750(int a1, _DWORD *a2) { signed int result; // eax sub_7760A0(a1, (int)a2); if ( *a2 != 6 ) goto LABEL_8; result = a2[2]; if ( a2[4] == a2[5] ) return result; if ( result < *(unsigned __int8 *)(a1 + 46) ) { LABEL_8: sub_7766E0(a1, a2); result = a2[2]; } else { sub_7765B0((int)a2, a1, a2[2]); result = a2[2]; } return result; } //----- (007767B0) -------------------------------------------------------- _DWORD *__cdecl sub_7767B0(int a1, _DWORD *a2) { _DWORD *result; // eax if ( *a2 != 8 || (result = (_DWORD *)a2[4], result != (_DWORD *)a2[5]) ) { result = sub_7760A0(a1, (int)a2); if ( *a2 != 6 ) goto LABEL_10; if ( a2[4] == a2[5] ) return result; if ( a2[2] < (signed int)*(unsigned __int8 *)(a1 + 46) ) LABEL_10: result = (_DWORD *)sub_7766E0(a1, a2); else result = (_DWORD *)sub_7765B0((int)a2, a1, a2[2]); } return result; } //----- (00776810) -------------------------------------------------------- _DWORD *__cdecl sub_776810(int a1, _DWORD *a2) { _DWORD *result; // eax if ( a2[4] == a2[5] ) return sub_7760A0(a1, (int)a2); result = sub_7760A0(a1, (int)a2); if ( *a2 != 6 ) return (_DWORD *)sub_7766E0(a1, a2); if ( a2[4] == a2[5] ) return result; if ( a2[2] < (signed int)*(unsigned __int8 *)(a1 + 46) ) return (_DWORD *)sub_7766E0(a1, a2); return (_DWORD *)sub_7765B0((int)a2, a1, a2[2]); } //----- (00776880) -------------------------------------------------------- signed int __cdecl sub_776880(__int64 a1) { int v1; // eax int v2; // eax signed int v3; // eax signed int result; // eax char v5; // [esp+10h] [ebp-10h] int v6; // [esp+14h] [ebp-Ch] BOOL v7; // [esp+18h] [ebp-8h] int v8; // [esp+1Ch] [ebp-4h] sub_776810(a1, (_DWORD *)HIDWORD(a1)); v1 = *(_DWORD *)HIDWORD(a1); switch ( *(_DWORD *)HIDWORD(a1) ) { case 1: case 2: case 3: if ( *(_DWORD *)(a1 + 32) > 255 ) goto LABEL_10; if ( v1 == 1 ) { v2 = *(_DWORD *)(a1 + 4); v6 = 2146936064; v7 = v2; v8 = 2146936133; v3 = sub_775D60((int *)a1, (int *)&v5); } else { v8 = 2146936065; v7 = v1 == 2; v3 = sub_775D60((int *)a1, &v7); } *(_DWORD *)(HIDWORD(a1) + 8) = v3; *(_DWORD *)HIDWORD(a1) = 4; return v3 | 0x100; case 4: goto LABEL_9; case 5: *(_DWORD *)(HIDWORD(a1) + 8) = sub_775F00(a1, *(double *)(HIDWORD(a1) + 8)); *(_DWORD *)HIDWORD(a1) = 4; LABEL_9: v3 = *(_DWORD *)(HIDWORD(a1) + 8); if ( v3 > 255 ) goto LABEL_10; return v3 | 0x100; default: LABEL_10: sub_7760A0(a1, SHIDWORD(a1)); if ( *(_DWORD *)HIDWORD(a1) != 6 ) goto LABEL_14; result = *(_DWORD *)(HIDWORD(a1) + 8); if ( *(_DWORD *)(HIDWORD(a1) + 16) != *(_DWORD *)(HIDWORD(a1) + 20) ) { if ( result < *(unsigned __int8 *)(a1 + 46) ) { LABEL_14: sub_7766E0(a1, (_DWORD *)HIDWORD(a1)); result = *(_DWORD *)(HIDWORD(a1) + 8); } else { sub_7765B0(SHIDWORD(a1), a1, *(_DWORD *)(HIDWORD(a1) + 8)); result = *(_DWORD *)(HIDWORD(a1) + 8); } } return result; } } //----- (00776990) -------------------------------------------------------- signed int __cdecl sub_776990(int a1, int a2, _DWORD *a3) { int v3; // ebx signed int v4; // eax signed int v5; // eax signed int result; // eax signed int v7; // edx if ( *(_DWORD *)a2 == 7 ) { if ( *a3 == 6 ) { v7 = a3[2]; if ( !(v7 & 0x100) && v7 >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); } result = sub_7765B0((int)a3, a1, *(_DWORD *)(a2 + 8)); } else { if ( *(_DWORD *)a2 == 8 ) { v5 = sub_776750(a1, a3); sub_775B50((int *)a1, ((v5 | (*(_DWORD *)(a2 + 8) << 17)) << 6) | 9); } else if ( *(_DWORD *)a2 == 9 ) { v3 = 2 * (*(_BYTE *)(a2 + 11) == 7) + 8; v4 = sub_776880(__PAIR__((unsigned int)a3, a1)); sub_775B50( (int *)a1, v3 | ((*(unsigned __int8 *)(a2 + 10) | ((v4 | (*(signed __int16 *)(a2 + 8) << 9)) << 8)) << 6)); } result = (signed int)a3; if ( *a3 == 6 ) { result = a3[2]; if ( !(result & 0x100) && result >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); } } return result; } //----- (00776A60) -------------------------------------------------------- signed int __cdecl sub_776A60(int a1, _DWORD *a2, _DWORD *a3) { signed int v3; // edi int v4; // eax signed int v5; // eax signed int result; // eax sub_7760A0(a1, (int)a2); if ( *a2 != 6 ) goto LABEL_5; if ( a2[4] != a2[5] ) { if ( a2[2] >= (signed int)*(unsigned __int8 *)(a1 + 46) ) { sub_7765B0((int)a2, a1, a2[2]); goto LABEL_6; } LABEL_5: sub_7766E0(a1, a2); } LABEL_6: v3 = a2[2]; if ( *a2 == 6 && !(v3 & 0x100) && v3 >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); a2[2] = *(unsigned __int8 *)(a1 + 48); *a2 = 6; v4 = *(unsigned __int8 *)(a1 + 48) + 2; if ( v4 > *(unsigned __int8 *)(*(_DWORD *)a1 + 78) ) { if ( v4 >= 250 ) sub_770090(*(_DWORD *)(a1 + 12), (int)"function or expression too complex"); *(_BYTE *)(*(_DWORD *)a1 + 78) = v4; } *(_BYTE *)(a1 + 48) += 2; v5 = sub_776880(__PAIR__((unsigned int)a3, a1)); sub_775B50((int *)a1, ((a2[2] | ((v5 | (v3 << 9)) << 8)) << 6) | 0xC); result = (signed int)a3; if ( *a3 == 6 ) { result = a3[2]; if ( !(result & 0x100) && result >= *(unsigned __int8 *)(a1 + 46) ) --*(_BYTE *)(a1 + 48); } return result; } //----- (00776B50) -------------------------------------------------------- int __usercall sub_776B50@(_DWORD *a1@, int *a2@, int a3) { _DWORD *v3; // ebx int v4; // edi int *v5; // esi int v6; // edx int v7; // eax int v8; // edi int v9; // ecx int v10; // eax signed int v11; // eax int v13; // [esp+Ch] [ebp-4h] v3 = a1; v4 = *a1; v5 = a2; if ( *a1 != 11 || (v6 = *(_DWORD *)(*a2 + 12), v7 = *(_DWORD *)(v6 + 4 * a1[2]), (*(_BYTE *)(v6 + 4 * v3[2]) & 0x3F) != 20) ) { if ( v4 == 6 ) goto LABEL_17; v9 = *a2; v10 = *((unsigned __int8 *)v5 + 48) + 1; if ( v10 > *(unsigned __int8 *)(*v5 + 78) ) { if ( v10 >= 250 ) sub_770090(v5[3], (int)"function or expression too complex"); *(_BYTE *)(v9 + 78) = v10; } sub_776440((int)v5, (int)v3, (unsigned __int8)++*((_BYTE *)v5 + 48) - 1); if ( *v3 == 6 ) { LABEL_17: v11 = v3[2]; if ( !(v11 & 0x100) && v11 >= *((unsigned __int8 *)v5 + 46) ) --*((_BYTE *)v5 + 48); } sub_775B50(v5, ((a3 | (v3[2] << 9)) << 14) | 0x3FDC); v8 = v5[7]; v5[7] = -1; } else { --a2[5]; sub_775B50(a2, ((a3 == 0) << 14) | ((v7 & 0xFFB7FFFF | 0x360000) >> 17)); v8 = v5[7]; v5[7] = -1; } v13 = sub_775B50(v5, 2147450903); sub_775AD0(v5, &v13, v8); return v13; } //----- (00776C50) -------------------------------------------------------- void __cdecl sub_776C50(int *a1, _DWORD *a2) { signed int v2; // eax int v3; // ST08_4 sub_7760A0((int)a1, (int)a2); switch ( *a2 ) { case 2: case 4: case 5: v2 = -1; break; case 0xA: sub_776170((int)a2, (int)a1); v2 = a2[2]; break; default: v2 = sub_776B50(a2, a1, 0); break; } sub_775AD0(a1, a2 + 5, v2); v3 = a2[4]; a1[6] = a1[5]; sub_775AD0(a1, a1 + 7, v3); a2[4] = -1; } //----- (00776CF0) -------------------------------------------------------- void __cdecl sub_776CF0(int *a1, _DWORD *a2) { signed int v2; // eax int v3; // ST08_4 sub_7760A0((int)a1, (int)a2); if ( *a2 == 1 || *a2 == 3 ) { v2 = -1; } else if ( *a2 == 10 ) { v2 = a2[2]; } else { v2 = sub_776B50(a2, a1, 1); } sub_775AD0(a1, a2 + 4, v2); v3 = a2[5]; a1[6] = a1[5]; sub_775AD0(a1, a1 + 7, v3); a2[5] = -1; } //----- (00776D60) -------------------------------------------------------- int __usercall sub_776D60@(int a1@, _DWORD *a2@) { int v2; // esi signed int v3; // eax int v4; // edx int v5; // edx v2 = a1; sub_7760A0(a1, (int)a2); switch ( *a2 ) { case 1: case 3: *a2 = 2; break; case 2: case 4: case 5: *a2 = 3; break; case 6: case 0xB: sub_776560((_DWORD *)v2, a2); if ( *a2 == 6 ) { v3 = a2[2]; if ( !(v3 & 0x100) && v3 >= *(unsigned __int8 *)(v2 + 46) ) --*(_BYTE *)(v2 + 48); } a2[2] = sub_775B50((int *)v2, (a2[2] << 23) | 0x14); *a2 = 11; break; case 0xA: sub_776170((int)a2, v2); break; default: break; } v4 = a2[4]; a2[4] = a2[5]; a2[5] = v4; sub_7758C0(v4, v2); return sub_7758C0(a2[4], v5); } //----- (00776E20) -------------------------------------------------------- char __cdecl sub_776E20(unsigned int a1, int a2, unsigned int a3) { __int16 v3; // ax bool v4; // zf char result; // al *(_BYTE *)(a2 + 10) = *(_BYTE *)(a2 + 8); v3 = sub_776880(__PAIR__(a3, a1)); v4 = *(_DWORD *)a2 == 8; *(_WORD *)(a2 + 8) = v3; result = v4 + 7; *(_BYTE *)(a2 + 11) = v4 + 7; *(_DWORD *)a2 = 9; return result; } //----- (00776E60) -------------------------------------------------------- signed int __usercall sub_776E60@(_DWORD *a1@, unsigned int a2@, int a3, int a4, int a5) { signed int result; // eax _DWORD *v6; // esi signed int v7; // eax signed int v8; // ecx signed int v9; // ecx signed int v10; // ecx signed int v11; // ecx signed int v12; // [esp+4h] [ebp-4h] result = sub_7761C0(a3, a4, (int)a1); if ( !result ) { if ( a3 == 19 || a3 == 21 ) { v6 = (_DWORD *)a4; v12 = 0; } else { v6 = (_DWORD *)a4; v12 = sub_776880(__PAIR__(a4, a2)); } v7 = sub_776880(__PAIR__((unsigned int)a1, a2)); if ( v7 <= v12 ) { if ( *v6 == 6 ) { v10 = v6[2]; if ( !(v10 & 0x100) && v10 >= *(unsigned __int8 *)(a2 + 46) ) --*(_BYTE *)(a2 + 48); } if ( *a1 == 6 ) { v11 = a1[2]; if ( !(v11 & 0x100) && v11 >= *(unsigned __int8 *)(a2 + 46) ) --*(_BYTE *)(a2 + 48); } } else { if ( *a1 == 6 ) { v8 = a1[2]; if ( !(v8 & 0x100) && v8 >= *(unsigned __int8 *)(a2 + 46) ) --*(_BYTE *)(a2 + 48); } if ( *v6 == 6 ) { v9 = v6[2]; if ( !(v9 & 0x100) && v9 >= *(unsigned __int8 *)(a2 + 46) ) --*(_BYTE *)(a2 + 48); } } a1[2] = sub_775B50((int *)a2, a3 | ((v12 | (v7 << 9)) << 14)); *a1 = 11; result = *(_DWORD *)(a2 + 20); *(_DWORD *)(*(_DWORD *)(*(_DWORD *)a2 + 20) + 4 * result - 4) = a5; } return result; } //----- (00776F60) -------------------------------------------------------- void __usercall sub_776F60(_DWORD *a1@, unsigned int a2@, int a3, int a4, _DWORD *a5) { _DWORD *v5; // ebx unsigned int v6; // esi signed int v7; // edi signed int v8; // eax signed int v9; // ebx _DWORD *v10; // ebx signed int v11; // ecx signed int v12; // ecx int v13; // edi v5 = a1; v6 = a2; v7 = sub_776880(__PAIR__((unsigned int)a5, a2)); v8 = sub_776880(__PAIR__((unsigned int)v5, v6)); if ( *v5 == 6 ) { v9 = v5[2]; if ( !(v9 & 0x100) && v9 >= *(unsigned __int8 *)(v6 + 46) ) --*(_BYTE *)(v6 + 48); } v10 = a5; if ( *a5 == 6 ) { v11 = a5[2]; if ( !(v11 & 0x100) && v11 >= *(unsigned __int8 *)(v6 + 46) ) --*(_BYTE *)(v6 + 48); } if ( !a4 && a3 != 24 ) { v12 = v7; v7 = v8; v8 = v12; a4 = 1; } sub_775B50((int *)v6, a3 | ((a4 | ((v8 | (v7 << 9)) << 8)) << 6)); v13 = *(_DWORD *)(v6 + 28); *(_DWORD *)(v6 + 28) = -1; a4 = sub_775B50((int *)v6, 2147450903); sub_775AD0((int *)v6, &a4, v13); v10[2] = a4; *v10 = 10; } //----- (00777020) -------------------------------------------------------- int __cdecl sub_777020(unsigned int a1, int a2, int a3, int a4) { int result; // eax int v5; // [esp+0h] [ebp-18h] double v6; // [esp+8h] [ebp-10h] int v7; // [esp+10h] [ebp-8h] int v8; // [esp+14h] [ebp-4h] result = a2; v6 = 0.0; v8 = -1; v7 = -1; v5 = 5; if ( a2 ) { if ( a2 == 1 ) { result = sub_776D60(a1, (_DWORD *)a3); } else { result = a2 - 2; if ( a2 == 2 ) { sub_776750(a1, (_DWORD *)a3); result = sub_776E60((_DWORD *)a3, a1, 21, (int)&v5, a4); } } } else if ( *(_DWORD *)a3 != 5 || *(_DWORD *)(a3 + 16) != -1 || *(_DWORD *)(a3 + 20) != -1 ) { sub_776750(a1, (_DWORD *)a3); result = sub_776E60((_DWORD *)a3, a1, 19, (int)&v5, a4); } else { *(double *)(a3 + 8) = -*(double *)(a3 + 8); } return result; } //----- (007770D0) -------------------------------------------------------- void __cdecl sub_7770D0(int *a1, int a2, _DWORD *a3) { switch ( a2 ) { case 0: case 1: case 2: case 3: case 4: case 5: if ( *a3 != 5 || a3[4] != -1 || a3[5] != -1 ) sub_776880(__PAIR__((unsigned int)a3, (unsigned int)a1)); break; case 6: sub_7766E0((int)a1, a3); break; case 13: sub_776C50(a1, a3); break; case 14: sub_776CF0(a1, a3); break; default: sub_776880(__PAIR__((unsigned int)a3, (unsigned int)a1)); break; } } //----- (00777180) -------------------------------------------------------- void __cdecl sub_777180(int *a1, int a2, _DWORD *a3, _DWORD *a4, int a5) { unsigned int *v5; // eax switch ( a2 ) { case 0: case 1: case 2: case 3: case 4: case 5: sub_776E60(a3, (unsigned int)a1, a2 + 13, (int)a4, a5); break; case 6: sub_776810((int)a1, a4); if ( *a4 != 11 || (*(_BYTE *)(*(_DWORD *)(*a1 + 12) + 4 * a4[2]) & 0x3F) != 22 ) { sub_7766E0((int)a1, a4); sub_776E60(a3, (unsigned int)a1, 22, (int)a4, a5); } else { sub_775D40((signed int)a3, (int)a1); v5 = (unsigned int *)(*(_DWORD *)(*a1 + 12) + 4 * a4[2]); *v5 = ((unsigned int)&locret_7FFFFD + 2) & *v5 | (a3[2] << 23); *a3 = 11; a3[2] = a4[2]; } break; case 7: case 8: case 9: sub_776F60(a4, (unsigned int)a1, a2 + 17, 1, a3); break; case 10: case 11: case 12: sub_776F60(a4, (unsigned int)a1, a2 + 14, 0, a3); break; case 13: sub_7760A0((int)a1, (int)a4); sub_775AD0(a1, a4 + 5, a3[5]); *a3 = *a4; a3[1] = a4[1]; a3[2] = a4[2]; a3[3] = a4[3]; a3[4] = a4[4]; a3[5] = a4[5]; break; case 14: sub_7760A0((int)a1, (int)a4); sub_775AD0(a1, a4 + 4, a3[4]); *a3 = *a4; a3[1] = a4[1]; a3[2] = a4[2]; a3[3] = a4[3]; a3[4] = a4[4]; a3[5] = a4[5]; break; default: return; } } //----- (00777330) -------------------------------------------------------- void __cdecl sub_777330(int *a1, int a2, int a3) { int v3; // ecx v3 = a1[5]; if ( a3 == v3 ) { a1[6] = v3; sub_775AD0(a1, a1 + 7, a2); } else { sub_775940(a2, a1, a3, 255, a3); } } //----- (00777390) -------------------------------------------------------- void __thiscall __noreturn sub_777390(void *this) { void *v1; // esi v1 = this; if ( dword_BA2B38 ) dword_BA2B38(this); (*(void (__thiscall **)(void *))(*(_DWORD *)v1 + 8))(v1); _invoke_watson(0, 0, 0, 0, 0); JUMPOUT(*(_DWORD *)algn_7773BA); } // 7E033E: using guessed type int __cdecl _invoke_watson(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA2B38: using guessed type int (__cdecl *dword_BA2B38)(_DWORD); //----- (007773C0) -------------------------------------------------------- void *__thiscall sub_7773C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &off_A0F3C0; if ( a2 & 1 ) operator delete(this); return v2; } // A0F3C0: using guessed type int (__thiscall *off_A0F3C0)(void *, char); //----- (007773F0) -------------------------------------------------------- void __noreturn sub_7773F0() { _invoke_watson(0, 0, 0, 0, 0); __debugbreak(); JUMPOUT(*(_DWORD *)sub_777400); } // 777400: using guessed type int __cdecl sub_777400(int); // 7E033E: using guessed type int __cdecl _invoke_watson(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00777400) -------------------------------------------------------- int __cdecl sub_777400(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x60u); if ( v2 ) v3 = sub_779CC0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } // 777400: using guessed type int __cdecl sub_777400(int); //----- (00777460) -------------------------------------------------------- int __cdecl sub_777460(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_779EB0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007774C0) -------------------------------------------------------- int __cdecl sub_7774C0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_779FB0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00777520) -------------------------------------------------------- int __cdecl sub_777520(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_77A0F0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00777580) -------------------------------------------------------- _DWORD *__thiscall sub_777580(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F3F0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F3F0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0F4B8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0F4C8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0F4B8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F3F0: using guessed type int (*off_A0F3F0[46])(); // A0F4B8: using guessed type int (*off_A0F4B8)[4]; // A0F4C8: using guessed type int (__stdcall *off_A0F4C8)(int); // A0F73C: using guessed type int (*off_A0F73C[3])(); //----- (00777600) -------------------------------------------------------- _DWORD *__thiscall sub_777600(_DWORD *this, char a2) { return sub_7776A0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (00777610) -------------------------------------------------------- _DWORD *__cdecl sub_777610(_DWORD *a1, int a2) { _DWORD *result; // eax int v3; // esi if ( a2 ) { if ( *(_DWORD *)(a2 - 12) == dword_AB9170 ) { v3 = *(_DWORD *)(a2 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (**)(void))(**(_DWORD **)(a2 - 4) + 4))(); *a1 = v3; if ( v3 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } result = a1; } else { sub_78CCA0(a1); result = a1; } } else { result = a1; *a1 = 0; } return result; } // AB9170: using guessed type int dword_AB9170; //----- (007776A0) -------------------------------------------------------- _DWORD *__thiscall sub_7776A0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0F3F0; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A0F4B8; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F3F0: using guessed type int (*off_A0F3F0[46])(); // A0F4B8: using guessed type int (*off_A0F4B8)[4]; //----- (007776F0) -------------------------------------------------------- _DWORD *__thiscall sub_7776F0(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x18u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[5]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777710) -------------------------------------------------------- _DWORD *__thiscall sub_777710(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x1Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[6]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777730) -------------------------------------------------------- int __thiscall sub_777730(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x24u && (v2 = (int (__stdcall *)(_DWORD *))v1[8]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00777750) -------------------------------------------------------- int __thiscall sub_777750(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x28u && (v2 = (int (__stdcall *)(_DWORD *))v1[9]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00777770) -------------------------------------------------------- _DWORD *__thiscall sub_777770(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax _DWORD *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x2Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[10]) != 0 ) { v4 = v3(v2); sub_777610(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007777B0) -------------------------------------------------------- double __thiscall sub_7777B0(_DWORD *this) { _DWORD *v1; // eax double result; // st7 void (__stdcall *v3)(_DWORD *, _DWORD); // [esp+0h] [ebp-4h] v1 = (_DWORD *)*(this - 1); if ( *v1 < 0x34u ) return 0.0; v3 = (void (__stdcall *)(_DWORD *, _DWORD))v1[12]; if ( !v3 ) return 0.0; v3(v1, v3); return result; } //----- (007777E0) -------------------------------------------------------- _DWORD *__thiscall sub_7777E0(_DWORD *this, double a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x38u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD, _DWORD))result[13]; if ( v3 ) result = (_DWORD *)v3(result, LODWORD(a2), HIDWORD(a2)); } return result; } //----- (00777810) -------------------------------------------------------- void __thiscall sub_777810(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7) { int v7; // edi int v8; // esi int v9; // eax int v10; // [esp-4h] [ebp-14h] int v11; // [esp+0h] [ebp-10h] int v12; // [esp+4h] [ebp-Ch] v7 = *(this - 1); if ( *(_DWORD *)v7 >= 0x3Cu && *(_DWORD *)(v7 + 56) && a6 >= 0 ) { if ( !a7 ) return; v8 = cef_string_list_alloc(v11, v12); if ( v8 ) sub_77B6F0(a5, v8); v10 = a7; if ( a7 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a7 + 4) + 4) + a7 + 4))( *(_DWORD *)(*(_DWORD *)(a7 + 4) + 4) + a7 + 4, a7); v9 = sub_777520(v10); (*(void (__stdcall **)(int, int, _DWORD, _DWORD, int, int, int))(v7 + 56))( v7, a2, *(_DWORD *)(a3 + 4), *(_DWORD *)(a4 + 4), v8, a6, v9); if ( v8 ) cef_string_list_free(v8); } if ( a7 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a7 + 4) + 4) + a7 + 4) + 4))(); } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (007778D0) -------------------------------------------------------- _DWORD *__thiscall sub_7778D0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x40u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[15]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (00777910) -------------------------------------------------------- _DWORD *__thiscall sub_777910(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x44u ) { v2 = (int (__stdcall *)(_DWORD *))result[16]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777930) -------------------------------------------------------- int __thiscall sub_777930(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // eax int v6; // edi int v7; // eax int result; // eax int v9; // [esp-4h] [ebp-14h] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x48u ) { if ( *(_DWORD *)(v4 + 68) ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) { if ( a3 ) v6 = a3 + 8; else v6 = 0; v9 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4); v7 = sub_7774C0(v9); (*(void (__stdcall **)(int, _DWORD, int, int))(v4 + 68))(v4, *(_DWORD *)(a2 + 4), v6, v7); } } } } result = a4; if ( a4 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return result; } //----- (007779C0) -------------------------------------------------------- _DWORD *__thiscall sub_7779C0(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6) { _DWORD *result; // eax int (__stdcall *v7)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD); // edx int v8; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x4Cu ) { v7 = (int (__stdcall *)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD))result[18]; if ( v7 ) { v8 = *(_DWORD *)(a3 + 4); if ( v8 ) { if ( *(_DWORD *)(v8 + 4) ) result = (_DWORD *)v7(result, a2, v8, a4, a5, a6); } } } return result; } //----- (00777A10) -------------------------------------------------------- _DWORD *__thiscall sub_777A10(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x50u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[19]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777A30) -------------------------------------------------------- void __thiscall sub_777A30(_DWORD *this, int a2, int a3, int a4, int a5) { int v5; // edi int v6; // esi int v7; // edx int v8; // eax int v9; // eax int v10; // eax bool v11; // zf int v12; // [esp-Ch] [ebp-1Ch] int v13; // [esp-8h] [ebp-18h] int v14; // [esp-4h] [ebp-14h] v5 = *(this - 1); v6 = 0; if ( *(_DWORD *)v5 >= 0x54u && *(_DWORD *)(v5 + 80) ) { if ( !a3 ) return; if ( a5 ) v7 = a5 + 4; else v7 = 0; if ( a4 ) v8 = a4 + 4; else v8 = 0; if ( a2 ) v6 = a2 + 4; v14 = v7; v13 = v8; v12 = a3; if ( a3 ) (**(void (__cdecl ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3, v8, v7); v9 = sub_777400(v12); (*(void (__stdcall **)(int, int, int, int, int))(v5 + 80))(v5, v6, v9, v13, v14); v10 = a3; v11 = a3 == 0; } else { v10 = a3; v11 = a3 == 0; } if ( !v11 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v10 + 4) + 4) + v10 + 4) + 4))(); } // 777400: using guessed type int __cdecl sub_777400(int); //----- (00777AD0) -------------------------------------------------------- _DWORD *__thiscall sub_777AD0(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x58u ) { v2 = (int (__stdcall *)(_DWORD *))result[21]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777AF0) -------------------------------------------------------- void __thiscall sub_777AF0(_DWORD *this, int a2, unsigned __int8 a3) { int v3; // esi int v4; // eax int v5; // [esp-8h] [ebp-10h] int v6; // [esp-4h] [ebp-Ch] v3 = *(this - 1); if ( *(_DWORD *)v3 >= 0x5Cu && *(_DWORD *)(v3 + 88) ) { if ( !a2 ) return; v6 = a3; v5 = a2; if ( a2 ) (**(void (__cdecl ***)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2, a3); v4 = sub_777460(v5); (*(void (__stdcall **)(int, int, int))(v3 + 88))(v3, v4, v6); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00777B60) -------------------------------------------------------- _DWORD *__thiscall sub_777B60(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x60u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[23]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777B80) -------------------------------------------------------- _DWORD *__thiscall sub_777B80(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x68u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[25]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (00777BC0) -------------------------------------------------------- _DWORD *__thiscall sub_777BC0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x6Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[26]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (00777C00) -------------------------------------------------------- bool __thiscall sub_777C00(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x70u && (v2 = (int (__stdcall *)(_DWORD *))v1[27]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00777C20) -------------------------------------------------------- _DWORD *__thiscall sub_777C20(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x74u ) { v2 = (int (__stdcall *)(_DWORD *))result[28]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777C40) -------------------------------------------------------- _DWORD *__thiscall sub_777C40(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x78u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[29]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777C60) -------------------------------------------------------- _DWORD *__thiscall sub_777C60(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x7Cu ) { v2 = (int (__stdcall *)(_DWORD *))result[30]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777C80) -------------------------------------------------------- _DWORD *__thiscall sub_777C80(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x80u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[31]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777CA0) -------------------------------------------------------- int __thiscall sub_777CA0(_DWORD *this, int a2) { _DWORD *v2; // ecx int (__stdcall *v3)(_DWORD *, int); // edx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x84u ) { v3 = (int (__stdcall *)(_DWORD *, int))v2[32]; if ( v3 ) { if ( a2 ) result = v3(v2, a2 + 4); else result = v3(v2, 0); } } return result; } //----- (00777CE0) -------------------------------------------------------- void __thiscall sub_777CE0(_DWORD *this, int a2, int a3, unsigned __int8 a4, int a5) { _DWORD *v5; // ecx void (__stdcall *v6)(_DWORD *, int, int, _DWORD, int); // edx int v7; // eax v5 = (_DWORD *)*(this - 1); if ( *v5 >= 0x88u ) { v6 = (void (__stdcall *)(_DWORD *, int, int, _DWORD, int))v5[33]; if ( v6 ) { if ( a2 ) v7 = a2 + 4; else v7 = 0; v6(v5, v7, a3, a4, a5); } } } //----- (00777D20) -------------------------------------------------------- int __thiscall sub_777D20(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // ecx int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x8Cu ) { v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[34]; if ( v4 ) { if ( a2 ) result = v4(v3, a2 + 4, a3); else result = v4(v3, 0, a3); } } return result; } //----- (00777D70) -------------------------------------------------------- int __thiscall sub_777D70(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ecx int (__stdcall *v5)(_DWORD *, int, int, int); // edx int result; // eax v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x90u ) { v5 = (int (__stdcall *)(_DWORD *, int, int, int))v4[35]; if ( v5 ) { if ( a2 ) result = v5(v4, a2 + 4, a3, a4); else result = v5(v4, 0, a3, a4); } } return result; } //----- (00777DC0) -------------------------------------------------------- _DWORD *__thiscall sub_777DC0(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x94u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[36]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777DF0) -------------------------------------------------------- _DWORD *__thiscall sub_777DF0(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x98u ) { v2 = (int (__stdcall *)(_DWORD *))result[37]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777E10) -------------------------------------------------------- _DWORD *__thiscall sub_777E10(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x9Cu ) { v2 = (int (__stdcall *)(_DWORD *))result[38]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777E30) -------------------------------------------------------- int __thiscall sub_777E30(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0xA0u && (v2 = (int (__stdcall *)(_DWORD *))v1[39]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00777E50) -------------------------------------------------------- _DWORD *__thiscall sub_777E50(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xA4u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[40]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777E80) -------------------------------------------------------- _DWORD *__thiscall sub_777E80(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xACu ) { v3 = (int (__stdcall *)(_DWORD *, int))result[42]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777EB0) -------------------------------------------------------- _DWORD *__thiscall sub_777EB0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xB0u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[43]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00777EE0) -------------------------------------------------------- int __thiscall sub_777EE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx int (__stdcall *v4)(_DWORD *, int, int); // edx int result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0xB8u ) { v4 = (int (__stdcall *)(_DWORD *, int, int))v3[45]; if ( v4 ) { if ( a2 ) result = v4(v3, a2 + 4, a3); else result = v4(v3, 0, a3); } } return result; } //----- (00777F20) -------------------------------------------------------- _DWORD *__thiscall sub_777F20(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xBCu ) { v2 = (int (__stdcall *)(_DWORD *))result[46]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777F40) -------------------------------------------------------- int __thiscall sub_777F40(_DWORD *this, int a2) { _DWORD *v2; // ecx int (__stdcall *v3)(_DWORD *, int); // edx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xC0u ) { v3 = (int (__stdcall *)(_DWORD *, int))v2[47]; if ( v3 ) { if ( a2 ) result = v3(v2, a2 + 4); else result = v3(v2, 0); } } return result; } //----- (00777F80) -------------------------------------------------------- _DWORD *__thiscall sub_777F80(_DWORD *this, int a2, int a3, int a4) { _DWORD *result; // eax int (__stdcall *v5)(_DWORD *, int, int, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xC4u ) { v5 = (int (__stdcall *)(_DWORD *, int, int, int))result[48]; if ( v5 ) result = (_DWORD *)v5(result, a2, a3, a4); } return result; } //----- (00777FB0) -------------------------------------------------------- _DWORD *__thiscall sub_777FB0(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0xC8u ) { v2 = (int (__stdcall *)(_DWORD *))result[49]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00777FD0) -------------------------------------------------------- int *__cdecl sub_777FD0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_77A150(v3 + 2, 1); else v4 = 0; v5 = dword_AB9180; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9180: using guessed type int dword_AB9180; //----- (00778150) -------------------------------------------------------- int __cdecl sub_778150(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9188 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9188: using guessed type int dword_AB9188; //----- (007781B0) -------------------------------------------------------- int *__cdecl sub_7781B0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_77ABC0(v3 + 2, 1); else v4 = 0; v5 = dword_AB9184; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9184: using guessed type int dword_AB9184; //----- (00778250) -------------------------------------------------------- int __cdecl sub_778250(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9184 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9184: using guessed type int dword_AB9184; //----- (00778350) -------------------------------------------------------- bool __cdecl sub_778350(int a1, int a2, int a3, int a4, int a5) { int v5; // esi _DWORD *v6; // eax _DWORD *v7; // esi int v8; // eax void (__thiscall *v9)(_DWORD *); // eax bool v10; // bl int v12; // [esp-Ch] [ebp-18h] int v13; // [esp-8h] [ebp-14h] int v14; // [esp-4h] [ebp-10h] int v15; // [esp-4h] [ebp-10h] int v16; // [esp+20h] [ebp+14h] if ( a4 ) v5 = a4 + 4; else v5 = 0; if ( a1 ) v16 = a1 + 4; else v16 = 0; v14 = a5; if ( a5 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4))( *(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4, a5); v15 = sub_778250(v14); v13 = v5; v12 = *(_DWORD *)(a3 + 4); if ( a2 ) { (**(void (__thiscall ***)(int, int, int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, v12, v5, v15); v6 = operator new(0x60u); if ( v6 ) v7 = sub_779CC0(v6); else v7 = 0; v9 = *(void (__thiscall **)(_DWORD *))*v7; v7[2] = a2; v9(v7); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); v8 = (int)(v7 + 4); } else { v8 = 0; } v10 = cef_browser_host_create_browser(v16, v8, v12, v13, v15) != 0; if ( a2 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); return v10; } // 9A5570: using guessed type int __cdecl cef_browser_host_create_browser(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (00778460) -------------------------------------------------------- int *__thiscall sub_778460(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x14u && (v3 = (int (__stdcall *)(_DWORD *))v2[4]) != 0 ) { v4 = v3(v2); sub_777FD0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007784A0) -------------------------------------------------------- int *__thiscall sub_7784A0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x30u && (v3 = (int (__stdcall *)(_DWORD *))v2[11]) != 0 ) { v4 = v3(v2); sub_7781B0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007784E0) -------------------------------------------------------- void __thiscall sub_7784E0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // eax int v6; // eax int v7; // [esp-Ch] [ebp-14h] int v8; // [esp-8h] [ebp-10h] int v9; // [esp-4h] [ebp-Ch] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0xB4u && *(_DWORD *)(v4 + 176) ) { if ( !a2 ) return; if ( a3 ) v5 = a3 + 4; else v5 = 0; v9 = a4; v8 = v5; v7 = a2; if ( a2 ) (**(void (__cdecl ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2, v5, a4); v6 = sub_778150(v7); (*(void (__stdcall **)(int, int, int, int))(v4 + 176))(v4, v6, v8, v9); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00778580) -------------------------------------------------------- int __cdecl sub_778580(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x38u); if ( v2 ) v3 = sub_77D1B0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007785E0) -------------------------------------------------------- int __cdecl sub_7785E0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_77D210(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778640) -------------------------------------------------------- int __cdecl sub_778640(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_77D490(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007786A0) -------------------------------------------------------- int __cdecl sub_7786A0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_77D4E0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778700) -------------------------------------------------------- bool __thiscall sub_778700(_DWORD *this, int a2, int a3, unsigned __int8 a4) { _DWORD *v4; // esi _DWORD *v5; // eax bool result; // al int v7; // esi v4 = this; if ( a2 && a3 ) { if ( !this[1] ) { v5 = operator new(0xCu); v4[1] = v5; *v5 = 0; v5[1] = 0; v5[2] = 0; *((_BYTE *)v4 + 8) = 1; } result = cef_string_utf16_set(a2, a3, v4[1], a4) != 0; } else { v7 = this[1]; if ( v7 ) cef_string_utf16_clear(v7); result = 1; } return result; } // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00778780) -------------------------------------------------------- _DWORD *__thiscall sub_778780(_DWORD *this, int a2) { _DWORD *v2; // esi int *v3; // eax int v4; // ecx v2 = this; *this = &CefStringBase::`vftable'; this[1] = 0; *((_BYTE *)this + 8) = 0; v3 = *(int **)(a2 + 4); if ( v3 ) v4 = v3[1]; else v4 = 0; if ( v3 ) sub_778700(v2, *v3, v4, 1u); else sub_778700(v2, 0, v4, 1u); return v2; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007787E0) -------------------------------------------------------- void __thiscall sub_7787E0(int this, _DWORD *a2) { int v2; // edi _DWORD *v3; // eax _DWORD *v4; // edi v2 = this; if ( *(_DWORD *)(this + 4) ) { if ( *(_BYTE *)(this + 8) ) { cef_string_utf16_clear(*(_DWORD *)(this + 4)); operator delete(*(void **)(v2 + 4)); } *(_DWORD *)(v2 + 4) = 0; *(_BYTE *)(v2 + 8) = 0; } if ( a2 ) { if ( !*(_DWORD *)(v2 + 4) ) { v3 = operator new(0xCu); *(_DWORD *)(v2 + 4) = v3; *v3 = 0; v3[1] = 0; v3[2] = 0; *(_BYTE *)(v2 + 8) = 1; } *(_BYTE *)(v2 + 8) = 1; v4 = *(_DWORD **)(v2 + 4); *v4 = *a2; v4[1] = a2[1]; v4[2] = a2[2]; *a2 = 0; a2[1] = 0; a2[2] = 0; cef_string_userfree_utf16_free(a2); } } // 9A5568: using guessed type int __cdecl cef_string_userfree_utf16_free(_DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00778870) -------------------------------------------------------- int __cdecl sub_778870(int a1, int a2, int a3) { int v3; // esi int **v4; // eax int *v5; // eax int v6; // ebx int v7; // edi _DWORD *v8; // eax int v9; // ecx int v11; // [esp+8h] [ebp+8h] if ( a1 == a2 ) return a3; v3 = a3; v4 = (int **)(a1 + 4); v11 = a1 + 4; do { v5 = *v4; if ( v5 ) v6 = v5[1]; else v6 = 0; if ( v5 && (v7 = *v5) != 0 && v6 ) { if ( !*(_DWORD *)(v3 + 4) ) { v8 = operator new(0xCu); *(_DWORD *)(v3 + 4) = v8; *v8 = 0; v8[1] = 0; v8[2] = 0; *(_BYTE *)(v3 + 8) = 1; } cef_string_utf16_set(v7, v6, *(_DWORD *)(v3 + 4), 1); } else if ( *(_DWORD *)(v3 + 4) ) { cef_string_utf16_clear(*(_DWORD *)(v3 + 4)); } v4 = (int **)(v11 + 12); v9 = v11 + 8; v3 += 12; v11 += 12; } while ( v9 != a2 ); return v3; } // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00778910) -------------------------------------------------------- bool __cdecl sub_778910(int a1, int a2, int a3, int a4) { bool result; // al int v5; // edi int v6; // esi int v7; // eax bool v8; // bl int v9; // [esp-8h] [ebp-18h] int v10; // [esp-4h] [ebp-14h] if ( !strcmp((const char *)cef_api_hash(0), "64b27477b82b44b51ce817522f744fca6768cbbb") ) { if ( a2 ) v5 = a2 + 4; else v5 = 0; if ( a1 ) v6 = a1 + 4; else v6 = 0; v10 = a4; v9 = a3; if ( a3 ) (**(void (__thiscall ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( *(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4, a3, a4); v7 = sub_778580(v9); v8 = cef_initialize(v6, v5, v7, v10) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = v8; } else { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = 0; } return result; } // 9A555C: using guessed type int __cdecl cef_initialize(_DWORD, _DWORD, _DWORD, _DWORD); // 9A5560: using guessed type int __cdecl cef_api_hash(_DWORD); //----- (00778A00) -------------------------------------------------------- int __thiscall sub_778A00(int *this) { int *v1; // esi int result; // eax int v3; // ecx int v4; // eax void (__thiscall ***v5)(_DWORD, _DWORD); // edi int v6; // ebx void (__thiscall ***i)(_DWORD, _DWORD); // esi int v8; // [esp+4h] [ebp-4h] v1 = this; result = this[1]; v3 = *this; v8 = (int)v1; if ( v3 != result ) { v4 = sub_778870(result, result, v3); v5 = (void (__thiscall ***)(_DWORD, _DWORD))v1[1]; v6 = v4; for ( i = (void (__thiscall ***)(_DWORD, _DWORD))v4; i != v5; i += 3 ) (**i)(i, 0); result = v8; *(_DWORD *)(v8 + 4) = v6; } return result; } //----- (00778A50) -------------------------------------------------------- int *__cdecl sub_778A50(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_77D760(v3 + 2, 1); else v4 = 0; v5 = dword_AB91A0; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91A0: using guessed type int dword_AB91A0; //----- (00778AF0) -------------------------------------------------------- int *__cdecl sub_778AF0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_77DA40(v3 + 2, 1); else v4 = 0; v5 = dword_AB91A4; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91A4: using guessed type int dword_AB91A4; //----- (00778B90) -------------------------------------------------------- int __cdecl sub_778B90(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB91A4 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB91A4: using guessed type int dword_AB91A4; //----- (00778C70) -------------------------------------------------------- LPCRITICAL_SECTION __thiscall sub_778C70(LPCRITICAL_SECTION lpCriticalSection) { LPCRITICAL_SECTION v1; // esi v1 = lpCriticalSection; InitializeCriticalSectionAndSpinCount(lpCriticalSection, 0x7D0u); return v1; } //----- (00778CA0) -------------------------------------------------------- void __thiscall sub_778CA0(LPCRITICAL_SECTION lpCriticalSection) { EnterCriticalSection(lpCriticalSection); } //----- (00778CB0) -------------------------------------------------------- void __thiscall sub_778CB0(LPCRITICAL_SECTION lpCriticalSection) { LeaveCriticalSection(lpCriticalSection); } //----- (00778CC0) -------------------------------------------------------- int __cdecl sub_778CC0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x34u); if ( v2 ) v3 = sub_77ED10(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778D20) -------------------------------------------------------- int __cdecl sub_778D20(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_77EF40(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778D80) -------------------------------------------------------- int __cdecl sub_778D80(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x40u); if ( v2 ) v3 = sub_77F500(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778DE0) -------------------------------------------------------- int __cdecl sub_778DE0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x2Cu); if ( v2 ) v3 = sub_77FA10(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778E40) -------------------------------------------------------- int __cdecl sub_778E40(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x2Cu); if ( v2 ) v3 = sub_77FF60(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778EA0) -------------------------------------------------------- int __cdecl sub_778EA0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_7800C0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778F00) -------------------------------------------------------- int __cdecl sub_778F00(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x30u); if ( v2 ) v3 = sub_780250(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778F60) -------------------------------------------------------- int __cdecl sub_778F60(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x2Cu); if ( v2 ) v3 = sub_780470(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00778FC0) -------------------------------------------------------- int __cdecl sub_778FC0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x34u); if ( v2 ) v3 = sub_780840(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00779020) -------------------------------------------------------- int __cdecl sub_779020(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x2Cu); if ( v2 ) v3 = sub_780AE0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00779080) -------------------------------------------------------- int __cdecl sub_779080(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x38u); if ( v2 ) v3 = sub_781270(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007790E0) -------------------------------------------------------- int __cdecl sub_7790E0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x34u); if ( v2 ) v3 = sub_781550(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00779140) -------------------------------------------------------- int __cdecl sub_779140(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x50u); if ( v2 ) v3 = sub_782190(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007791A0) -------------------------------------------------------- int __cdecl sub_7791A0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x60u); if ( v2 ) v3 = sub_783100(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00779200) -------------------------------------------------------- int __stdcall sub_779200(int a1) { int result; // eax int v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD *)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); (**(void (__thiscall ***)(int, int *))v2)(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778CC0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (007792A0) -------------------------------------------------------- int __stdcall sub_7792A0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 4))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778D20(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779340) -------------------------------------------------------- int __stdcall sub_779340(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 8))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778D80(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (007793E0) -------------------------------------------------------- int __stdcall sub_7793E0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 12))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778DE0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779480) -------------------------------------------------------- int __stdcall sub_779480(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 16))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778E40(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779520) -------------------------------------------------------- int __stdcall sub_779520(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 20))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778EA0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (007795C0) -------------------------------------------------------- int __stdcall sub_7795C0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 24))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778F00(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779660) -------------------------------------------------------- int __stdcall sub_779660(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 28))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778F60(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779700) -------------------------------------------------------- int __stdcall sub_779700(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 32))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_778FC0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (007797A0) -------------------------------------------------------- int __stdcall sub_7797A0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 36))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_779020(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779840) -------------------------------------------------------- int __stdcall sub_779840(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 40))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_779080(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (007798E0) -------------------------------------------------------- int __stdcall sub_7798E0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 44))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_7790E0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779980) -------------------------------------------------------- int __stdcall sub_779980(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 48))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_779140(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779A20) -------------------------------------------------------- int __stdcall sub_779A20(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 52))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_7791A0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00779B00) -------------------------------------------------------- int *__cdecl sub_779B00(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7831E0(v3 + 2, 1); else v4 = 0; v5 = dword_AB91E4; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91E4: using guessed type int dword_AB91E4; //----- (00779C20) -------------------------------------------------------- int __thiscall sub_779C20(void *this, int a2, int a3, int a4, int a5) { int *v6; // esi int v7; // edi int v8; // ecx unsigned __int8 v9; // bl int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] void *v12; // [esp-4h] [ebp-14h] int v13; // [esp+Ch] [ebp-4h] v13 = 0; if ( !a2 || !a3 || !a5 ) return 0; v6 = *(int **)(a2 - 8); if ( v6 ) (**(void (__thiscall ***)(int))((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); v7 = *v6; v12 = this; sub_779B00((int *)&v12, a5); v11 = a4; v10 = v8; sub_777FD0(&v10, a3); v9 = (*(int (__thiscall **)(int *, int, int, void *))(v7 + 56))(v6, v10, v11, v12); (*(void (__thiscall **)(int))(*(int *)((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); return v9; } //----- (00779CC0) -------------------------------------------------------- _DWORD *__thiscall sub_779CC0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; *this = &off_A0FB04; this[23] = 0; v2 = this + 4; this[1] = dword_AB9170; v1[3] = v1; memset(this + 4, 0, 0x4Cu); *v2 = 76; v2[1] = sub_789AE0; v2[2] = sub_77FFB0; v2[3] = sub_78ABD0; *v1 = &off_A0FB04; v1[8] = sub_779200; v1[9] = sub_7792A0; v1[10] = sub_779340; v1[11] = sub_7793E0; v1[12] = sub_779480; v1[13] = sub_779520; v1[14] = sub_7795C0; v1[15] = sub_779660; v1[16] = sub_779700; v1[17] = sub_7797A0; v1[18] = sub_779840; v1[19] = sub_7798E0; v1[20] = sub_779980; v1[21] = sub_779A20; v1[22] = sub_779C20; return v1; } // A0FB04: using guessed type int (*off_A0FB04)[12]; // AB9170: using guessed type int dword_AB9170; //----- (00779D80) -------------------------------------------------------- int *__cdecl sub_779D80(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_783340(v3 + 2, 1); else v4 = 0; v5 = dword_AB91E8; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91E8: using guessed type int dword_AB91E8; //----- (00779E20) -------------------------------------------------------- int __stdcall sub_779E20(int a1, int a2, int a3, int a4, int a5) { int v6; // esi int (__thiscall **v7)(int, BOOL, BOOL, int, int); // edi unsigned __int8 v8; // bl BOOL v9; // [esp-10h] [ebp-20h] BOOL v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] int v12; // [esp-4h] [ebp-14h] int v13; // [esp+Ch] [ebp-4h] v13 = 0; if ( !a1 || !a2 ) return 0; v6 = *(_DWORD *)(a1 - 8); if ( v6 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); v7 = *(int (__thiscall ***)(int, BOOL, BOOL, int, int))v6; v12 = a5; v11 = a4; v10 = a3 != 0; v9 = a3 != 0; sub_779D80(&v9, a2); v8 = (*v7)(v6, v9, v10, v11, v12); (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(); return v8; } //----- (00779EB0) -------------------------------------------------------- _DWORD *__thiscall sub_779EB0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9174; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_779E20; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9174: using guessed type int dword_AB9174; //----- (00779F00) -------------------------------------------------------- int __stdcall sub_779F00(int a1, void *a2, int a3) { int result; // eax int v4; // esi void **v5; // [esp+0h] [ebp-10h] void *v6; // [esp+4h] [ebp-Ch] char v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] result = a1; v8 = 0; if ( a1 && a2 ) { v4 = *(_DWORD *)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v5 = &CefStringBase::`vftable'; v6 = a2; v7 = 0; (**(void (__thiscall ***)(int, void ***, bool))v4)(v4, &v5, a3 != 0); v5 = &CefStringBase::`vftable'; if ( v6 ) { if ( v7 ) { cef_string_utf16_clear(v6); operator delete(v6); } v6 = 0; v7 = 0; } result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00779FB0) -------------------------------------------------------- _DWORD *__thiscall sub_779FB0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9178; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_779F00; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9178: using guessed type int dword_AB9178; //----- (0077A000) -------------------------------------------------------- int __thiscall sub_77A000(void **this) { void **v1; // ebx void (__thiscall ***v2)(_DWORD, _DWORD); // esi void (__thiscall ***i)(_DWORD, _DWORD); // edi int result; // eax v1 = this; v2 = (void (__thiscall ***)(_DWORD, _DWORD))*this; if ( *this ) { for ( i = (void (__thiscall ***)(_DWORD, _DWORD))this[1]; v2 != i; v2 += 3 ) (**v2)(v2, 0); operator delete(*v1); } result = 0; *v1 = 0; v1[1] = 0; v1[2] = 0; return result; } //----- (0077A040) -------------------------------------------------------- int __stdcall sub_77A040(int a1, int a2, int a3) { int v3; // esi int result; // eax int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+10h] [ebp-Ch] int v8; // [esp+18h] [ebp-4h] v8 = 0; if ( a1 && a2 >= 0 ) { v5 = 0; v6 = 0; v7 = 0; sub_77C000(a3, (unsigned int *)&v5); v3 = *(_DWORD *)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (**(void (__thiscall ***)(int, int, int *))v3)(v3, a2, &v5); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); result = sub_77A000((void **)&v5); } return result; } //----- (0077A0F0) -------------------------------------------------------- _DWORD *__thiscall sub_77A0F0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB917C; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_77A040; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB917C: using guessed type int dword_AB917C; //----- (0077A140) -------------------------------------------------------- _DWORD *__thiscall sub_77A140(_DWORD *this, char a2) { return sub_77A1E0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077A150) -------------------------------------------------------- _DWORD *__thiscall sub_77A150(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F620; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F620; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0F6D8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0F6E8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0F6D8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F620: using guessed type int (*off_A0F620[21])(); // A0F6D8: using guessed type int (*off_A0F6D8)[4]; // A0F6E8: using guessed type int (__stdcall *off_A0F6E8)(int); // A0F73C: using guessed type int (*off_A0F73C[3])(); //----- (0077A1D0) -------------------------------------------------------- _DWORD *__thiscall sub_77A1D0(_DWORD *this, char a2) { return sub_77A2E0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077A1E0) -------------------------------------------------------- _DWORD *__thiscall sub_77A1E0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0F678; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = off_A0FB80; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F678: using guessed type int (*off_A0F678[24])(); // A0FB80: using guessed type int (*off_A0FB80[2])[4]; //----- (0077A230) -------------------------------------------------------- int __thiscall sub_77A230(const void **this, unsigned int a2) { int result; // eax const void **v3; // esi char *v4; // ebx int v5; // edi int (__thiscall **v6)(void *, char); // [esp+4h] [ebp-8h] int v7; // [esp+8h] [ebp-4h] result = a2; v3 = this; if ( a2 > 0x1FFFFFFF ) std::_Xlength_error("vector too long"); if ( ((_BYTE *)this[2] - (_BYTE *)*this) >> 3 < a2 ) { v4 = 0; if ( a2 ) { v4 = (char *)operator new(8 * a2); if ( !v4 ) { v7 = 0; v6 = &off_A0F3E0; sub_777390(&v6); } } memcpy_0(v4, *v3, 8 * (((_BYTE *)v3[1] - (_BYTE *)*v3) >> 3)); v5 = ((_BYTE *)v3[1] - (_BYTE *)*v3) >> 3; if ( *v3 ) operator delete((void *)*v3); result = (int)&v4[8 * a2]; *v3 = v4; v3[2] = (const void *)result; v3[1] = &v4[8 * v5]; } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0077A2E0) -------------------------------------------------------- _DWORD *__thiscall sub_77A2E0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0F620; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A0F6D8; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F620: using guessed type int (*off_A0F620[21])(); // A0F6D8: using guessed type int (*off_A0F6D8)[4]; //----- (0077A330) -------------------------------------------------------- unsigned int __thiscall sub_77A330(int this, int a2) { unsigned int v2; // eax unsigned int result; // eax unsigned int v4; // edx unsigned int v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 3; if ( 0x1FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = a2 + v2; v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 3; if ( result > v4 ) { if ( 0x1FFFFFFF - (v4 >> 1) >= v4 ) v5 = (v4 >> 1) + v4; else v5 = 0; if ( v5 < result ) v5 = result; result = sub_77A230((const void **)this, v5); } return result; } //----- (0077A390) -------------------------------------------------------- _DWORD *__thiscall sub_77A390(int *this, _DWORD *a2) { int *v2; // esi _DWORD *result; // eax int v4; // edi _DWORD *v5; // ecx int v6; // eax v2 = this; result = (_DWORD *)this[1]; if ( a2 >= result || *this > (unsigned int)a2 ) { if ( result == (_DWORD *)this[2] ) sub_77A330((int)this, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *a2; result[1] = a2[1]; } } else { v4 = ((signed int)a2 - *this) >> 3; if ( result == (_DWORD *)this[2] ) result = (_DWORD *)sub_77A330((int)this, 1); v5 = (_DWORD *)v2[1]; if ( v5 ) { v6 = *v2; *v5 = *(_DWORD *)(*v2 + 8 * v4); result = *(_DWORD **)(v6 + 8 * v4 + 4); v5[1] = result; v2[1] += 8; return result; } } v2[1] += 8; return result; } //----- (0077A410) -------------------------------------------------------- int __cdecl sub_77A410(int a1) { int v1; // eax int v3; // ecx void (__stdcall *v4)(int); // edx int v5; // esi v1 = a1; if ( !a1 ) return 0; if ( *(_DWORD *)(a1 - 8) != dword_AB9180 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, 0); return 0; } v3 = *(_DWORD *)(a1 - 4); v4 = *(void (__stdcall **)(int))(v3 + 4); if ( v4 ) { v4(v3); v1 = a1; } v5 = *(_DWORD *)(a1 - 4); if ( v1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 4) + 4) + v1 + 4) + 4))(); return v5; } // AB9180: using guessed type int dword_AB9180; //----- (0077A480) -------------------------------------------------------- _DWORD *__thiscall sub_77A480(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x24u ) { v2 = (int (__stdcall *)(_DWORD *))result[8]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0077A4A0) -------------------------------------------------------- _DWORD *__thiscall sub_77A4A0(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x34u ) { v2 = (int (__stdcall *)(_DWORD *))result[12]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0077A4C0) -------------------------------------------------------- int __thiscall sub_77A4C0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x38u && (v2 = (int (__stdcall *)(_DWORD *))v1[13]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0077A4E0) -------------------------------------------------------- bool __thiscall sub_77A4E0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x3Cu || !v2[14] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77A410(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[14])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077A580) -------------------------------------------------------- bool __thiscall sub_77A580(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x40u && (v2 = (int (__stdcall *)(_DWORD *))v1[15]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0077A5A0) -------------------------------------------------------- bool __thiscall sub_77A5A0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x44u && (v2 = (int (__stdcall *)(_DWORD *))v1[16]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0077A5C0) -------------------------------------------------------- void __userpurge sub_77A5C0(int a1@, int a2@, int a3@, unsigned int a4) { _DWORD *v4; // eax void *v5; // esi int (__stdcall *v6)(int, int); // edx int v7; // ST10_4 int *v8; // ebx int v9; // ST0C_4 unsigned int v10; // edi unsigned int v11; // eax bool v12; // cf unsigned int *v13; // eax unsigned int v14; // eax unsigned int v15; // eax int v16; // ecx const void *v17; // ecx void *v18; // edi unsigned int v19; // edi int v20; // [esp+4h] [ebp-8h] unsigned int v21; // [esp+8h] [ebp-4h] v4 = *(_DWORD **)(a1 - 4); v5 = 0; v20 = *(_DWORD *)(a1 - 4); if ( *v4 >= 0x5Cu && v4[22] ) { v6 = *(int (__stdcall **)(int, int))(*(_DWORD *)a1 + 68); v7 = a2; v8 = (int *)a4; v9 = a3; v21 = (*(_DWORD *)(a4 + 4) - *(_DWORD *)a4) >> 3; v10 = v21; v11 = v6(v9, v7); a4 = v11; v12 = v11 < v21; v13 = &v21; if ( !v12 ) v13 = &a4; v14 = *v13; a4 = v14; if ( v14 ) { v5 = operator new[](8 * v14); if ( v5 ) { memset(v5, 0, 8 * a4); if ( v10 ) { v15 = 0; if ( v10 ) { do { v16 = *v8; *((_DWORD *)v5 + 2 * v15) = *(_DWORD *)(*v8 + 8 * v15); *((_DWORD *)v5 + 2 * v15 + 1) = *(_DWORD *)(v16 + 8 * v15 + 4); ++v15; } while ( v15 < v10 ); } } } } (*(void (__stdcall **)(int))(v20 + 88))(v20); v17 = (const void *)v8[1]; v18 = (void *)*v8; if ( (const void *)*v8 != v17 ) { memcpy_0(v18, v17, 0); v8[1] = (int)v18; } if ( a4 && v5 ) { v19 = 0; if ( a4 ) { v21 = (unsigned int)v5; do { sub_77A390(v8, (_DWORD *)v21); v21 += 8; ++v19; } while ( v19 < a4 ); } operator delete[](v5); } } } // 77A5C0: could not find valid save-restore pair for ebx // 77A5C0: could not find valid save-restore pair for edi //----- (0077A6E0) -------------------------------------------------------- void __userpurge sub_77A6E0(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x60u && *(_DWORD *)(v4 + 92) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 92))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0077A750) -------------------------------------------------------- int *__cdecl sub_77A750(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_777580(v3 + 2, 1); else v4 = 0; v5 = dword_AB916C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB916C: using guessed type int dword_AB916C; //----- (0077A7F0) -------------------------------------------------------- int *__cdecl sub_77A7F0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7835E0(v3 + 2, 1); else v4 = 0; v5 = dword_AB91EC; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91EC: using guessed type int dword_AB91EC; //----- (0077A900) -------------------------------------------------------- int __cdecl sub_77A900(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB91E4 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB91E4: using guessed type int dword_AB91E4; //----- (0077A970) -------------------------------------------------------- int *__thiscall sub_77A970(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x14u && (v3 = (int (__stdcall *)(_DWORD *))v2[4]) != 0 ) { v4 = v3(v2); sub_77A750(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077A9B0) -------------------------------------------------------- int *__thiscall sub_77A9B0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *))v2[17]) != 0 ) { v4 = v3(v2); sub_77A7F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077A9F0) -------------------------------------------------------- int *__thiscall sub_77A9F0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x4Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[18]) != 0 ) { v4 = v3(v2); sub_77A7F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077AA30) -------------------------------------------------------- int *__thiscall sub_77AA30(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, int, int); // ecx int v6; // eax int *result; // eax v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x50u && (v5 = (int (__stdcall *)(_DWORD *, int, int))v4[19]) != 0 ) { v6 = v5(v4, a3, a4); sub_77A7F0(a2, v6); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077AA70) -------------------------------------------------------- int *__thiscall sub_77AA70(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, _DWORD); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x54u && (v4 = (int (__stdcall *)(_DWORD *, _DWORD))v3[20]) != 0 ) { v5 = v4(v3, *(_DWORD *)(a3 + 4)); sub_77A7F0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077AAB0) -------------------------------------------------------- bool __thiscall sub_77AAB0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-10h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x64u || !v3[24] ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_77A900(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[24])(v3, a2, v4) != 0; if ( a3 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); return v5; } //----- (0077AB50) -------------------------------------------------------- int __cdecl sub_77AB50(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_783CC0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (0077ABB0) -------------------------------------------------------- _DWORD *__thiscall sub_77ABB0(_DWORD *this, char a2) { return sub_77ACE0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077ABC0) -------------------------------------------------------- _DWORD *__thiscall sub_77ABC0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F750; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F750; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0F4A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0F798; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0F4A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F4A8: using guessed type int (*off_A0F4A8)[4]; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F750: using guessed type int (*off_A0F750[18])(); // A0F798: using guessed type int (__stdcall *off_A0F798[2])(int); //----- (0077AC40) -------------------------------------------------------- _DWORD *__thiscall sub_77AC40(_DWORD *this, char a2) { return sub_77AD30((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077AC50) -------------------------------------------------------- _DWORD *__cdecl sub_77AC50(_DWORD *a1, int a2) { _DWORD *result; // eax int v3; // esi if ( a2 ) { if ( *(_DWORD *)(a2 - 12) == dword_AB91F0 ) { v3 = *(_DWORD *)(a2 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (**)(void))(**(_DWORD **)(a2 - 4) + 4))(); *a1 = v3; if ( v3 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } result = a1; } else { sub_78CCA0(a1); result = a1; } } else { result = a1; *a1 = 0; } return result; } // AB91F0: using guessed type int dword_AB91F0; //----- (0077ACE0) -------------------------------------------------------- _DWORD *__thiscall sub_77ACE0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0FC28; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A0FC9C; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FC28: using guessed type int (*off_A0FC28[29])(); // A0FC9C: using guessed type int (*off_A0FC9C)[4]; //----- (0077AD30) -------------------------------------------------------- _DWORD *__thiscall sub_77AD30(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0F750; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A0F4A8; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F4A8: using guessed type int (*off_A0F4A8)[4]; // A0F750: using guessed type int (*off_A0F750[18])(); //----- (0077AD80) -------------------------------------------------------- bool __thiscall sub_77AD80(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x14u || !v2[4] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_778250(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[4])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077AE20) -------------------------------------------------------- bool __thiscall sub_77AE20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x18u || !v2[5] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_778250(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[5])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077AEC0) -------------------------------------------------------- _DWORD *__thiscall sub_77AEC0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax _DWORD *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x20u && (v3 = (int (__stdcall *)(_DWORD *))v2[7]) != 0 ) { v4 = v3(v2); sub_77AC50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077AF00) -------------------------------------------------------- bool __thiscall sub_77AF00(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // eax int v6; // eax bool v7; // bl bool result; // al int v9; // [esp-4h] [ebp-14h] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x2Cu && *(_DWORD *)(v4 + 40) && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { v9 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4); v6 = sub_778640(v9); v7 = (*(int (__stdcall **)(int, _DWORD, _DWORD, int))(v4 + 40))(v4, *(_DWORD *)(a2 + 4), *(_DWORD *)(a3 + 4), v6) != 0; if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = v7; } else { if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = 0; } return result; } //----- (0077AFC0) -------------------------------------------------------- _DWORD *__thiscall sub_77AFC0(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x34u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[12]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0077AFE0) -------------------------------------------------------- bool __thiscall sub_77AFE0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[16]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (0077B030) -------------------------------------------------------- int __thiscall sub_77B030(_DWORD *this, int a2) { int v2; // esi int v3; // eax int result; // eax int v5; // [esp-4h] [ebp-8h] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x4Cu && *(_DWORD *)(v2 + 72) ) { v5 = a2; if ( a2 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, a2); v3 = sub_7785E0(v5); (*(void (__stdcall **)(int, int))(v2 + 72))(v2, v3); result = a2; if ( a2 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); } else { result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } return result; } //----- (0077B0B0) -------------------------------------------------------- int __thiscall sub_77B0B0(_DWORD *this, int a2) { int v2; // esi int v3; // eax int result; // eax int v5; // [esp-4h] [ebp-8h] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x50u && *(_DWORD *)(v2 + 76) ) { v5 = a2; if ( a2 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, a2); v3 = sub_7785E0(v5); (*(void (__stdcall **)(int, int))(v2 + 76))(v2, v3); result = a2; if ( a2 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); } else { result = a2; if ( a2 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } return result; } //----- (0077B130) -------------------------------------------------------- int __thiscall sub_77B130(_DWORD *this, int a2, int a3) { int v3; // esi int result; // eax int v5; // eax int v6; // [esp-4h] [ebp-10h] v3 = *(this - 1); if ( *(_DWORD *)v3 >= 0x54u && *(_DWORD *)(v3 + 80) && (result = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(result + 4) ) { if ( a3 ) { v6 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v5 = sub_77AB50(v6); (*(void (__stdcall **)(int, _DWORD, int))(v3 + 80))(v3, *(_DWORD *)(a2 + 4), v5); result = a3; if ( a3 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); } } else { result = a3; if ( a3 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); } return result; } //----- (0077B1E0) -------------------------------------------------------- signed int __userpurge sub_77B1E0@(int a1@, int a2@, int a3@, int a4, int *a5) { _DWORD *v5; // edi int v6; // eax int v8; // esi int v9; // ST0C_4 int v10; // edi v5 = *(_DWORD **)(a1 - 4); if ( *v5 < 0x58u || !v5[21] ) return -2; v6 = *(_DWORD *)(a4 + 4); if ( !v6 || !*(_DWORD *)(v6 + 4) ) return -2; v8 = cef_string_list_alloc(a3, a2); if ( v8 ) sub_77B6F0(a5, v8); v9 = *(_DWORD *)(a4 + 4); v10 = ((int (__stdcall *)(_DWORD *))v5[21])(v5); if ( v8 ) { sub_778A00(a5); sub_77C000(v8, (unsigned int *)a5); cef_string_list_free(v8); } return v10; } // 77B1E0: could not find valid save-restore pair for ebx // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0077B280) -------------------------------------------------------- int *__cdecl sub_77B280(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_783E30(v3 + 2, 1); else v4 = 0; v5 = dword_AB91F8; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91F8: using guessed type int dword_AB91F8; //----- (0077B390) -------------------------------------------------------- int *__cdecl sub_77B390(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7843C0(v3 + 2, 1); else v4 = 0; v5 = dword_AB91FC; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91FC: using guessed type int dword_AB91FC; //----- (0077B4C0) -------------------------------------------------------- int *__thiscall sub_77B4C0(_DWORD *this, int *a2, int a3) { int v3; // esi int v4; // eax int v5; // eax int *v6; // esi int v8; // [esp-4h] [ebp-8h] v3 = *(this - 1); if ( *(_DWORD *)v3 >= 0x28u && *(_DWORD *)(v3 + 36) ) { v8 = a3; if ( a3 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( *(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4, a3); v4 = sub_7785E0(v8); v5 = (*(int (__stdcall **)(int, int))(v3 + 36))(v3, v4); v6 = a2; sub_77B280(a2, v5); if ( a3 ) { (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); return a2; } } else { v6 = a2; *a2 = 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); } return v6; } //----- (0077B560) -------------------------------------------------------- int *__userpurge sub_77B560@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x3Cu && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[14]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_778AF0(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (0077B5C0) -------------------------------------------------------- int *__thiscall sub_77B5C0(_DWORD *this, int *a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, _DWORD); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x40u && (v4 = (int (__stdcall *)(_DWORD *, _DWORD))v3[15]) != 0 ) { v5 = v4(v3, a3); sub_77B390(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077B600) -------------------------------------------------------- bool __thiscall sub_77B600(_DWORD *this, int a2, int a3, int a4) { int v4; // edi int v5; // eax _DWORD *v6; // eax int v7; // eax bool v8; // bl bool result; // al int v10; // [esp-8h] [ebp-18h] int v11; // [esp-4h] [ebp-14h] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x48u && *(_DWORD *)(v4 + 68) && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { if ( !*(_DWORD *)(a4 + 4) ) { v6 = operator new(0xCu); *(_DWORD *)(a4 + 4) = v6; *v6 = 0; v6[1] = 0; v6[2] = 0; *(_BYTE *)(a4 + 8) = 1; } v11 = *(_DWORD *)(a4 + 4); v10 = a3; if ( a3 ) (**(void (__thiscall ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( *(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4, a3, v11); v7 = sub_778B90(v10); v8 = (*(int (__stdcall **)(int, _DWORD, int, int))(v4 + 68))(v4, *(_DWORD *)(a2 + 4), v7, v11) != 0; if ( a3 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); result = v8; } else { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = 0; } return result; } //----- (0077B6F0) -------------------------------------------------------- int __cdecl sub_77B6F0(_DWORD *a1, int a2) { int v2; // ecx int result; // eax int v4; // esi int v5; // ebx v2 = a1[1] - *a1; result = v2 / 12; if ( v2 / 12 ) { v4 = 0; v5 = v2 / 12; do { result = cef_string_list_append(a2, *(_DWORD *)(*a1 + v4 + 4)); v4 += 12; --v5; } while ( v5 ); } return result; } // 9A5550: using guessed type int __cdecl cef_string_list_append(_DWORD, _DWORD); //----- (0077B740) -------------------------------------------------------- int __thiscall sub_77B740(_DWORD *this, int a2) { int v2; // eax int v3; // ecx int result; // eax int v5; // ecx v2 = this[1]; if ( !v2 || !*(_DWORD *)(v2 + 4) ) { v3 = *(_DWORD *)(a2 + 4); if ( !v3 || !*(_DWORD *)(v3 + 4) ) return 0; } if ( !v2 || !*(_DWORD *)(v2 + 4) ) return -1; v5 = *(_DWORD *)(a2 + 4); if ( v5 && *(_DWORD *)(v5 + 4) ) result = cef_string_utf16_cmp(v2, *(_DWORD *)(a2 + 4)); else result = 1; return result; } // 9A5554: using guessed type int __cdecl cef_string_utf16_cmp(_DWORD, _DWORD); //----- (0077B7A0) -------------------------------------------------------- void __thiscall sub_77B7A0(int this) { int v1; // esi int v2; // eax int v3; // eax v1 = this; v2 = *(_DWORD *)(this + 16); *(_DWORD *)(this + 12) = &CefStringBase::`vftable'; if ( v2 ) { if ( *(_BYTE *)(this + 20) ) { cef_string_utf16_clear(v2); operator delete(*(void **)(v1 + 16)); } *(_DWORD *)(v1 + 16) = 0; *(_BYTE *)(v1 + 20) = 0; } v3 = *(_DWORD *)(v1 + 4); *(_DWORD *)v1 = &CefStringBase::`vftable'; if ( v3 ) { if ( *(_BYTE *)(v1 + 8) ) { cef_string_utf16_clear(v3); operator delete(*(void **)(v1 + 4)); } *(_DWORD *)(v1 + 4) = 0; *(_BYTE *)(v1 + 8) = 0; } } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077B800) -------------------------------------------------------- _DWORD *__thiscall sub_77B800(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int *v4; // eax int v5; // ecx int v6; // eax int v7; // ecx int *v8; // eax int v9; // edx v3 = this; *this = &CefStringBase::`vftable'; this[1] = 0; *((_BYTE *)this + 8) = 0; v4 = *(int **)(a2 + 4); if ( v4 ) v5 = v4[1]; else v5 = 0; if ( v4 ) v6 = *v4; else v6 = 0; sub_778700(v3, v6, v5, 1u); v7 = (int)(v3 + 3); *(_DWORD *)v7 = &CefStringBase::`vftable'; *(_DWORD *)(v7 + 4) = 0; *(_BYTE *)(v7 + 8) = 0; v8 = *(int **)(a3 + 4); if ( v8 ) v9 = v8[1]; else v9 = 0; if ( v8 ) sub_778700((_DWORD *)v7, *v8, v9, 1u); else sub_778700((_DWORD *)v7, 0, v9, 1u); return v3; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077B890) -------------------------------------------------------- _DWORD *__cdecl sub_77B890(_DWORD *a1, int a2) { _DWORD *result; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax result = (_DWORD *)a1[1]; v3 = (_DWORD *)*result; if ( (_DWORD *)*result != result ) { do { cef_string_map_append(a2, v3[4], v3[7]); if ( !*((_BYTE *)v3 + 37) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 37) ) { for ( i = v3[1]; !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 37); j = (int *)*j ) v3 = j; } } result = a1; } while ( v3 != (_DWORD *)a1[1] ); } return result; } // 9A554C: using guessed type int __cdecl cef_string_map_append(_DWORD, _DWORD, _DWORD); //----- (0077B910) -------------------------------------------------------- _DWORD *__cdecl sub_77B910(_DWORD *a1, int a2) { _DWORD *result; // eax _DWORD *v3; // esi int **v4; // eax int *j; // eax int i; // eax result = (_DWORD *)a1[1]; v3 = (_DWORD *)*result; if ( (_DWORD *)*result != result ) { do { cef_string_multimap_append(a2, v3[4], v3[7]); if ( !*((_BYTE *)v3 + 37) ) { v4 = (int **)v3[2]; if ( *((_BYTE *)v4 + 37) ) { for ( i = v3[1]; !*(_BYTE *)(i + 37); i = *(_DWORD *)(i + 4) ) { if ( v3 != *(_DWORD **)(i + 8) ) break; v3 = (_DWORD *)i; } v3 = (_DWORD *)i; } else { v3 = (_DWORD *)v3[2]; for ( j = *v4; !*((_BYTE *)j + 37); j = (int *)*j ) v3 = j; } } result = a1; } while ( v3 != (_DWORD *)a1[1] ); } return result; } // 9A5548: using guessed type int __cdecl cef_string_multimap_append(_DWORD, _DWORD, _DWORD); //----- (0077B990) -------------------------------------------------------- int __cdecl sub_77B990(int **a1, int **a2, int a3) { int v3; // esi int **v4; // ecx int *v5; // eax int v6; // ebx int v7; // edi _DWORD *v8; // eax int v9; // ST08_4 int v11; // [esp+8h] [ebp+8h] if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 1; v11 = (int)(a1 + 1); do { if ( v3 ) { *(_DWORD *)v3 = &CefStringBase::`vftable'; *(_DWORD *)(v3 + 4) = 0; *(_BYTE *)(v3 + 8) = 0; v5 = *v4; if ( *v4 ) v6 = v5[1]; else v6 = 0; if ( v5 ) { v7 = *v5; if ( *v5 ) { if ( v6 ) { v8 = operator new(0xCu); *(_DWORD *)(v3 + 4) = v8; *v8 = 0; v8[1] = 0; v8[2] = 0; v9 = *(_DWORD *)(v3 + 4); *(_BYTE *)(v3 + 8) = 1; cef_string_utf16_set(v7, v6, v9, 1); v4 = (int **)v11; } } } } v4 += 3; v3 += 12; v11 = (int)v4; } while ( v4 - 1 != a2 ); return v3; } // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077BA30) -------------------------------------------------------- unsigned int __thiscall sub_77BA30(int ***this, unsigned int a2) { int ***v2; // esi unsigned int result; // eax int v4; // edi void *v5; // eax int v6; // edx int **v7; // ecx unsigned int v8; // edx int v9; // ebx int **i; // edi int (__thiscall **v11)(void *, char); // [esp+8h] [ebp-Ch] int **v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v2 = this; if ( a2 > 0x15555555 ) std::_Xlength_error("vector too long"); result = ((char *)this[2] - (char *)*this) / 12; if ( result < a2 ) { v4 = 0; v13 = 0; if ( a2 ) { v5 = operator new(12 * a2); v13 = (int)v5; if ( !v5 ) { v12 = 0; v11 = &off_A0F3E0; sub_777390(&v11); } v4 = (int)v5; } sub_77B990(*v2, v2[1], v4); v6 = (int)v2[1]; v7 = *v2; v12 = (int **)v6; v8 = (signed int)((unsigned __int64)(715827883i64 * (v6 - (signed int)v7)) >> 32) >> 1; v9 = v8 + (v8 >> 31); if ( v7 ) { for ( i = v7; i != v12; i += 3 ) ((void (__thiscall *)(int **, _DWORD))**i)(i, 0); operator delete(*v2); v4 = v13; } result = 3 * v9; *v2 = (int **)v4; v2[2] = (int **)(v4 + 12 * a2); v2[1] = (int **)(v4 + 12 * v9); } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0077BB30) -------------------------------------------------------- unsigned int __thiscall sub_77BB30(int this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax unsigned int v5; // eax v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) / 12; if ( 357913941 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (*(_DWORD *)(this + 8) - *(_DWORD *)this) / 12; if ( v3 > result ) { if ( 357913941 - (result >> 1) >= result ) v5 = (result >> 1) + result; else v5 = 0; if ( v5 < v3 ) v5 = v3; result = sub_77BA30((int ***)this, v5); } return result; } //----- (0077BBB0) -------------------------------------------------------- void __thiscall sub_77BBB0(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // eax unsigned int v7; // ecx int *v8; // eax int v9; // esi unsigned int v10; // ecx int *v11; // esi int v12; // eax v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_77BB30((int)v2, 1); v10 = v2[1]; if ( v10 ) { *(_DWORD *)v10 = &CefStringBase::`vftable'; *(_DWORD *)(v10 + 4) = 0; *(_BYTE *)(v10 + 8) = 0; v11 = *(int **)(a2 + 4); if ( v11 ) v12 = v11[1]; else v12 = 0; if ( v11 ) { sub_778700((_DWORD *)v10, *v11, v12, 1u); v2[1] += 12; return; } sub_778700((_DWORD *)v10, 0, v12, 1u); } goto LABEL_22; } v4 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(a2 - *v2)) >> 32) >> 1; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_77BB30((int)v2, 1); v6 = *v2 + 12 * v5; v7 = v2[1]; if ( !v7 ) { LABEL_22: v2[1] += 12; return; } *(_DWORD *)v7 = &CefStringBase::`vftable'; *(_DWORD *)(v7 + 4) = 0; *(_BYTE *)(v7 + 8) = 0; v8 = *(int **)(v6 + 4); if ( v8 ) v9 = v8[1]; else v9 = 0; if ( v8 ) sub_778700((_DWORD *)v7, *v8, v9, 1u); else sub_778700((_DWORD *)v7, 0, v9, 1u); v2[1] += 12; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077BCB0) -------------------------------------------------------- int __thiscall sub_77BCB0(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx int v8; // edx void **v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0xAAAAAA9 ) { sub_77B7A0((int)a5 + 12); operator delete(a5); std::_Xlength_error("map/set too long"); } v6 = a5; this[2] = v5 + 1; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; v8 = this[1]; LABEL_10: *(_DWORD *)(v8 + 8) = a5; goto LABEL_11; } if ( !a3 ) { *(_DWORD *)(a4 + 8) = a5; v8 = this[1]; if ( a4 != *(_DWORD *)(v8 + 8) ) goto LABEL_11; goto LABEL_10; } *(_DWORD *)a4 = a5; v9 = (void **)this[1]; if ( (void *)a4 == *v9 ) *v9 = a5; LABEL_11: v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 36) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 36) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 37) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 37) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 36) = 1; *(_BYTE *)(v13 + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 36) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 37) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 37) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 36) = 1; *(_BYTE *)(v22 + 36) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 36) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 36) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 36) = 1; return result; } //----- (0077BEE0) -------------------------------------------------------- int __thiscall sub_77BEE0(_DWORD *this, int a2, void *a3, int a4) { int v4; // esi _DWORD *v5; // edi int v6; // ebx int v7; // ecx int v8; // eax bool v9; // al int v10; // eax int v11; // ecx int v12; // eax int v13; // eax int v14; // eax int v15; // ecx int result; // eax _DWORD *v17; // [esp+Ch] [ebp-4h] char v18; // [esp+1Ch] [ebp+Ch] v4 = *(_DWORD *)(this[1] + 4); v5 = a3; v17 = this; v6 = this[1]; v18 = 1; if ( !*(_BYTE *)(v4 + 37) ) { do { v6 = v4; if ( (_BYTE)a4 ) { v7 = *(_DWORD *)(v4 + 16); if ( v7 && *(_DWORD *)(v7 + 4) || (v8 = v5[4]) != 0 && *(_DWORD *)(v8 + 4) ) { if ( v7 && *(_DWORD *)(v7 + 4) ) { v10 = v5[4]; if ( v10 && *(_DWORD *)(v10 + 4) ) v9 = cef_string_utf16_cmp(v7, v5[4]) >= 0; else v9 = 1; } else { v9 = 0; } } else { v9 = 1; } } else { v11 = v5[4]; if ( v11 && *(_DWORD *)(v11 + 4) || (v12 = *(_DWORD *)(v4 + 16)) != 0 && *(_DWORD *)(v12 + 4) ) { if ( v11 && *(_DWORD *)(v11 + 4) ) { v14 = *(_DWORD *)(v4 + 16); if ( v14 && *(_DWORD *)(v14 + 4) ) v13 = cef_string_utf16_cmp(v11, *(_DWORD *)(v4 + 16)); else v13 = 1; } else { v13 = -1; } } else { v13 = 0; } v9 = v13 < 0; } v18 = v9; if ( v9 ) v4 = *(_DWORD *)v4; else v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 37) ); this = v17; } v15 = *(_DWORD *)sub_77BCB0(this, (int)&a4, v18, v6, v5); result = a2; *(_DWORD *)a2 = v15; *(_BYTE *)(a2 + 4) = 1; return result; } // 9A5554: using guessed type int __cdecl cef_string_utf16_cmp(_DWORD, _DWORD); //----- (0077C000) -------------------------------------------------------- void __cdecl sub_77C000(int a1, unsigned int *a2) { int v2; // edi _DWORD *v3; // eax int v4; // esi void *v5; // esi void **v6; // [esp+Ch] [ebp-Ch] void *v7; // [esp+10h] [ebp-8h] char v8; // [esp+14h] [ebp-4h] v2 = cef_string_list_size(a1); v3 = 0; v4 = 0; v6 = &CefStringBase::`vftable'; v7 = 0; v8 = 0; if ( v2 > 0 ) { while ( 1 ) { if ( !v3 ) { v3 = operator new(0xCu); *v3 = 0; v3[1] = 0; v7 = v3; v3[2] = 0; v8 = 1; } cef_string_list_value(a1, v4, v3); sub_77BBB0(a2, (unsigned int)&v6); if ( ++v4 >= v2 ) break; v3 = v7; } v5 = v7; if ( v7 ) { if ( v8 ) { cef_string_utf16_clear(v7); operator delete(v5); } } } } // 9A5540: using guessed type int __cdecl cef_string_list_size(_DWORD); // 9A5544: using guessed type int __cdecl cef_string_list_value(_DWORD, _DWORD, _DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077C0A0) -------------------------------------------------------- int __thiscall sub_77C0A0(_DWORD *this, int a2, void *a3, int a4) { int v4; // esi int v5; // ebx char *v6; // edi bool v7; // al int v8; // ecx int v9; // eax int v10; // eax int v11; // ecx int v12; // eax int v13; // eax int v14; // eax int v15; // esi int v16; // ecx int result; // eax int v18; // edx _DWORD *v19; // [esp+Ch] [ebp-8h] char v20; // [esp+10h] [ebp-4h] v4 = *(_DWORD *)(this[1] + 4); v5 = this[1]; v6 = (char *)a3 + 12; v7 = 1; v19 = this; v20 = 1; if ( !*(_BYTE *)(v4 + 37) ) { do { v5 = v4; if ( (_BYTE)a4 ) { v8 = *(_DWORD *)(v4 + 16); if ( v8 && *(_DWORD *)(v8 + 4) || (v9 = *((_DWORD *)a3 + 4)) != 0 && *(_DWORD *)(v9 + 4) ) { if ( v8 && *(_DWORD *)(v8 + 4) ) { v10 = *((_DWORD *)a3 + 4); if ( v10 && *(_DWORD *)(v10 + 4) ) v7 = cef_string_utf16_cmp(v8, *((_DWORD *)a3 + 4)) >= 0; else v7 = 1; } else { v7 = 0; } } else { v7 = 1; } } else { v11 = *((_DWORD *)a3 + 4); if ( v11 && *(_DWORD *)(v11 + 4) || (v12 = *(_DWORD *)(v4 + 16)) != 0 && *(_DWORD *)(v12 + 4) ) { if ( v11 && *(_DWORD *)(v11 + 4) ) { v14 = *(_DWORD *)(v4 + 16); if ( v14 && *(_DWORD *)(v14 + 4) ) v13 = cef_string_utf16_cmp(v11, *(_DWORD *)(v4 + 16)); else v13 = 1; } else { v13 = -1; } } else { v13 = 0; } v7 = v13 < 0; } v20 = v7; if ( v7 ) v4 = *(_DWORD *)v4; else v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 37) ); this = v19; } v15 = v5; a4 = v5; if ( v7 ) { if ( v5 == *(_DWORD *)this[1] ) { v16 = *(_DWORD *)sub_77BCB0(this, (int)&a4, 1, v5, a3); result = a2; *(_DWORD *)a2 = v16; *(_BYTE *)(a2 + 4) = 1; return result; } sub_530780(&a4); v15 = a4; } if ( sub_77B740((_DWORD *)(v15 + 12), (int)v6) >= 0 ) { sub_77B7A0((int)v6); operator delete(a3); result = a2; *(_DWORD *)a2 = v15; *(_BYTE *)(a2 + 4) = 0; } else { v18 = *(_DWORD *)sub_77BCB0(v19, (int)&a4, v20, v5, a3); result = a2; *(_DWORD *)a2 = v18; *(_BYTE *)(a2 + 4) = 1; } return result; } // 9A5554: using guessed type int __cdecl cef_string_utf16_cmp(_DWORD, _DWORD); //----- (0077C250) -------------------------------------------------------- void __cdecl sub_77C250(int a1, _DWORD *a2) { int *v2; // ebx int *v3; // esi int v4; // edi _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // edi int v8; // eax int v9; // esi void *v10; // esi int v11; // eax int v12; // ebx _DWORD *v13; // eax int v14; // ecx _DWORD *v15; // ebx _DWORD *v16; // eax void *v17; // esi void *v18; // esi void **v19; // [esp+Ch] [ebp-4Ch] _DWORD *v20; // [esp+10h] [ebp-48h] char v21; // [esp+14h] [ebp-44h] void **v22; // [esp+18h] [ebp-40h] _DWORD *v23; // [esp+1Ch] [ebp-3Ch] char v24; // [esp+20h] [ebp-38h] void *v25; // [esp+28h] [ebp-30h] char v26; // [esp+2Ch] [ebp-2Ch] void *v27; // [esp+34h] [ebp-24h] char v28; // [esp+38h] [ebp-20h] int v29; // [esp+3Ch] [ebp-1Ch] int (__thiscall **v30)(void *, char); // [esp+44h] [ebp-14h] int v31; // [esp+48h] [ebp-10h] int v32; // [esp+4Ch] [ebp-Ch] int v33; // [esp+50h] [ebp-8h] int v34; // [esp+54h] [ebp-4h] v2 = 0; v3 = 0; v4 = 0; v32 = cef_string_map_size(a1); v25 = 0; v26 = 0; v27 = 0; v28 = 0; v34 = 0; if ( v32 > 0 ) { while ( 1 ) { if ( !v3 ) { v5 = operator new(0xCu); *v5 = 0; v5[1] = 0; v25 = v5; v5[2] = 0; v26 = 1; v3 = v5; } cef_string_map_key(a1, v4, v3); if ( !v2 ) { v6 = operator new(0xCu); *v6 = 0; v6[1] = 0; v27 = v6; v6[2] = 0; v28 = 1; v2 = v6; } cef_string_map_value(a1, v4, v2); v7 = 0; v19 = &CefStringBase::`vftable'; v20 = 0; v21 = 0; if ( v3 ) { v8 = v3[1]; v9 = *v3; v33 = v8; if ( v9 ) { if ( v8 ) { v7 = operator new(0xCu); *v7 = 0; v7[1] = 0; v7[2] = 0; v20 = v7; v21 = 1; cef_string_utf16_set(v9, v33, v7, 1); } } } v10 = 0; v22 = &CefStringBase::`vftable'; v23 = 0; v24 = 0; if ( v2 ) { v11 = v2[1]; v12 = *v2; v33 = v11; if ( v12 ) { if ( v11 ) { v13 = operator new(0xCu); v14 = v33; v10 = v13; *v13 = 0; v13[1] = 0; v23 = v13; v13[2] = 0; v24 = 1; cef_string_utf16_set(v12, v14, v13, 1); } } } v15 = operator new(0x28u); if ( !v15 ) { v31 = 0; v30 = &off_A0F3E0; sub_777390(&v30); } v16 = a2; *v15 = a2[1]; v15[1] = a2[1]; v15[2] = a2[1]; *((_WORD *)v15 + 18) = 0; if ( v15 != (_DWORD *)-12 ) { sub_77B800(v15 + 3, (int)&v19, (int)&v22); v16 = a2; } sub_77C0A0(v16, (int)&v29, v15, 0); if ( v10 && v24 ) { cef_string_utf16_clear(v10); operator delete(v10); } if ( v7 && v21 ) { cef_string_utf16_clear(v7); operator delete(v7); } if ( ++v34 >= v32 ) break; v4 = v34; v3 = (int *)v25; v2 = (int *)v27; } v17 = v27; if ( v27 && v28 ) { cef_string_utf16_clear(v27); operator delete(v17); } v18 = v25; if ( v25 ) { if ( v26 ) { cef_string_utf16_clear(v25); operator delete(v18); } } } } // 9A5558: using guessed type int __cdecl cef_string_map_value(_DWORD, _DWORD, _DWORD); // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); // 9A557C: using guessed type int __cdecl cef_string_map_key(_DWORD, _DWORD, _DWORD); // 9A5580: using guessed type int __cdecl cef_string_map_size(_DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0077C490) -------------------------------------------------------- void __cdecl sub_77C490(int a1, _DWORD *a2) { int *v2; // ebx int *v3; // esi int v4; // edi _DWORD *v5; // eax _DWORD *v6; // eax _DWORD *v7; // edi int v8; // eax int v9; // esi void *v10; // esi int v11; // eax int v12; // ebx _DWORD *v13; // eax int v14; // ecx _DWORD *v15; // ebx _DWORD *v16; // eax void *v17; // esi void *v18; // esi void **v19; // [esp+Ch] [ebp-4Ch] _DWORD *v20; // [esp+10h] [ebp-48h] char v21; // [esp+14h] [ebp-44h] void **v22; // [esp+18h] [ebp-40h] _DWORD *v23; // [esp+1Ch] [ebp-3Ch] char v24; // [esp+20h] [ebp-38h] void *v25; // [esp+28h] [ebp-30h] char v26; // [esp+2Ch] [ebp-2Ch] void *v27; // [esp+34h] [ebp-24h] char v28; // [esp+38h] [ebp-20h] int v29; // [esp+3Ch] [ebp-1Ch] int (__thiscall **v30)(void *, char); // [esp+44h] [ebp-14h] int v31; // [esp+48h] [ebp-10h] int v32; // [esp+4Ch] [ebp-Ch] int v33; // [esp+50h] [ebp-8h] int v34; // [esp+54h] [ebp-4h] v2 = 0; v3 = 0; v4 = 0; v32 = cef_string_multimap_size(a1); v25 = 0; v26 = 0; v27 = 0; v28 = 0; v34 = 0; if ( v32 > 0 ) { while ( 1 ) { if ( !v3 ) { v5 = operator new(0xCu); *v5 = 0; v5[1] = 0; v25 = v5; v5[2] = 0; v26 = 1; v3 = v5; } cef_string_multimap_key(a1, v4, v3); if ( !v2 ) { v6 = operator new(0xCu); *v6 = 0; v6[1] = 0; v27 = v6; v6[2] = 0; v28 = 1; v2 = v6; } cef_string_multimap_value(a1, v4, v2); v7 = 0; v19 = &CefStringBase::`vftable'; v20 = 0; v21 = 0; if ( v3 ) { v8 = v3[1]; v9 = *v3; v33 = v8; if ( v9 ) { if ( v8 ) { v7 = operator new(0xCu); *v7 = 0; v7[1] = 0; v7[2] = 0; v20 = v7; v21 = 1; cef_string_utf16_set(v9, v33, v7, 1); } } } v10 = 0; v22 = &CefStringBase::`vftable'; v23 = 0; v24 = 0; if ( v2 ) { v11 = v2[1]; v12 = *v2; v33 = v11; if ( v12 ) { if ( v11 ) { v13 = operator new(0xCu); v14 = v33; v10 = v13; *v13 = 0; v13[1] = 0; v23 = v13; v13[2] = 0; v24 = 1; cef_string_utf16_set(v12, v14, v13, 1); } } } v15 = operator new(0x28u); if ( !v15 ) { v31 = 0; v30 = &off_A0F3E0; sub_777390(&v30); } v16 = a2; *v15 = a2[1]; v15[1] = a2[1]; v15[2] = a2[1]; *((_WORD *)v15 + 18) = 0; if ( v15 != (_DWORD *)-12 ) { sub_77B800(v15 + 3, (int)&v19, (int)&v22); v16 = a2; } sub_77BEE0(v16, (int)&v29, v15, 0); if ( v10 && v24 ) { cef_string_utf16_clear(v10); operator delete(v10); } if ( v7 && v21 ) { cef_string_utf16_clear(v7); operator delete(v7); } if ( ++v34 >= v32 ) break; v4 = v34; v3 = (int *)v25; v2 = (int *)v27; } v17 = v27; if ( v27 && v28 ) { cef_string_utf16_clear(v27); operator delete(v17); } v18 = v25; if ( v25 ) { if ( v26 ) { cef_string_utf16_clear(v25); operator delete(v18); } } } } // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); // 9A5584: using guessed type int __cdecl cef_string_multimap_value(_DWORD, _DWORD, _DWORD); // 9A5588: using guessed type int __cdecl cef_string_multimap_key(_DWORD, _DWORD, _DWORD); // 9A558C: using guessed type int __cdecl cef_string_multimap_size(_DWORD); // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0077C6D0) -------------------------------------------------------- _DWORD *__thiscall sub_77C6D0(_DWORD *this) { _DWORD *result; // eax int v2; // ecx int v3; // ecx int v4; // edx result = this; this[3] = &unk_A10508; this[6] = &CefBase::`vftable'; v2 = this[3]; result[2] = off_A0F598; *(_DWORD *)((char *)result + *(_DWORD *)(v2 + 4) + 12) = off_A0F73C; v3 = result[3]; result[2] = off_A0F598; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 12) = off_A0F584; *(_DWORD *)((char *)result + *(_DWORD *)(result[3] + 4) + 8) = *(_DWORD *)(result[3] + 4) - 12; result[4] = 0; v4 = result[3]; result[2] = &off_A0F7E0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 12) = off_A0F584; *(_DWORD *)((char *)result + *(_DWORD *)(result[3] + 4) + 8) = *(_DWORD *)(result[3] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F584: using guessed type int (*off_A0F584[2])[4]; // A0F598: using guessed type int (*off_A0F598[22])(); // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F7E0: using guessed type int (__stdcall *off_A0F7E0)(int); //----- (0077C750) -------------------------------------------------------- int __thiscall sub_77C750(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x38u && (v3 = (int (__stdcall *)(_DWORD *))v2[13]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077C7D0) -------------------------------------------------------- int __thiscall sub_77C7D0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x40u && (v3 = (int (__stdcall *)(_DWORD *))v2[15]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077C850) -------------------------------------------------------- bool __userpurge sub_77C850@(int a1@, int a2@, int a3@, int *a4) { _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // edi v4 = *(_DWORD **)(a1 - 4); if ( *v4 < 0x48u || !v4[17] ) return 0; v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); v7 = ((int (__cdecl *)(_DWORD *, int))v4[17])(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } return v7 != 0; } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0077C8D0) -------------------------------------------------------- _DWORD *__thiscall sub_77C8D0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x4Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[18]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C8F0) -------------------------------------------------------- _DWORD *__thiscall sub_77C8F0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x50u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[19]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C910) -------------------------------------------------------- _DWORD *__thiscall sub_77C910(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x54u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[20]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C930) -------------------------------------------------------- _DWORD *__thiscall sub_77C930(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x58u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[21]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C950) -------------------------------------------------------- _DWORD *__thiscall sub_77C950(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x5Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[22]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C970) -------------------------------------------------------- _DWORD *__thiscall sub_77C970(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x60u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[23]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0077C990) -------------------------------------------------------- _DWORD *__thiscall sub_77C990(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x64u ) { v2 = (int (__stdcall *)(_DWORD *))result[24]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0077C9B0) -------------------------------------------------------- _DWORD *__thiscall sub_77C9B0(_DWORD *this, int a2, int a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x68u ) { v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))result[25]; if ( v4 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) result = (_DWORD *)v4(result, v5, *(_DWORD *)(a3 + 4)); } } } return result; } //----- (0077C9F0) -------------------------------------------------------- int *__cdecl sub_77C9F0(int *a1, int a2) { int *result; // eax _DWORD *v3; // eax _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = operator new(0x1Cu); if ( v3 ) v4 = sub_77C6D0(v3); else v4 = 0; v5 = dword_AB9188; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (_DWORD *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9188: using guessed type int dword_AB9188; //----- (0077CA90) -------------------------------------------------------- int __cdecl sub_77CA90(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9200 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9200: using guessed type int dword_AB9200; //----- (0077CAF0) -------------------------------------------------------- int *__thiscall sub_77CAF0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x14u && (v3 = (int (__stdcall *)(_DWORD *))v2[4]) != 0 ) { v4 = v3(v2); sub_77C9F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077CB30) -------------------------------------------------------- int __thiscall sub_77CB30(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // esi int result; // eax int v6; // [esp-4h] [ebp-8h] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x44u && *(_DWORD *)(v2 + 64) ) { v6 = a2; if ( a2 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, a2); v3 = sub_77CA90(v6); v4 = (*(int (__stdcall **)(int, int))(v2 + 64))(v2, v3); if ( a2 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); result = v4; } else { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); result = 0; } return result; } //----- (0077CBC0) -------------------------------------------------------- int __cdecl sub_77CBC0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x34u); if ( v2 ) v3 = sub_7850A0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (0077CC20) -------------------------------------------------------- int __cdecl sub_77CC20(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x50u); if ( v2 ) v3 = sub_785A00(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (0077CC80) -------------------------------------------------------- int __cdecl sub_77CC80(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x30u); if ( v2 ) v3 = sub_785CC0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (0077CCE0) -------------------------------------------------------- int __stdcall sub_77CCE0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 8))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_77CC80(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (0077CD80) -------------------------------------------------------- int __stdcall sub_77CD80(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 12))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_77CBC0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (0077CE20) -------------------------------------------------------- int __stdcall sub_77CE20(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 16))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_77CC20(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (0077CEC0) -------------------------------------------------------- int *__cdecl sub_77CEC0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_77E260(v3 + 2, 1); else v4 = 0; v5 = dword_AB91A8; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB91A8: using guessed type int dword_AB91A8; //----- (0077CFD0) -------------------------------------------------------- int *__cdecl sub_77CFD0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_785D20(v3 + 2, 1); else v4 = 0; v5 = dword_AB9210; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9210: using guessed type int dword_AB9210; //----- (0077D080) -------------------------------------------------------- int __thiscall sub_77D080(void *this, int a2, void *a3, int a4) { int result; // eax int v5; // esi void (__thiscall **v6)(int, void ***, void *); // edi void *v7; // [esp-4h] [ebp-20h] void **v8; // [esp+Ch] [ebp-10h] void *v9; // [esp+10h] [ebp-Ch] char v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] result = a2; v11 = 0; if ( a2 && a4 ) { v5 = *(_DWORD *)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v8 = &CefStringBase::`vftable'; v9 = 0; v10 = 0; if ( a3 ) { v9 = a3; v10 = 0; } v6 = *(void (__thiscall ***)(int, void ***, void *))v5; v7 = this; sub_77CEC0((int *)&v7, a4); (*v6)(v5, &v8, v7); v8 = &CefStringBase::`vftable'; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v9); } v9 = 0; v10 = 0; } result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077D140) -------------------------------------------------------- int __thiscall sub_77D140(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_77CFD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 4))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (0077D1B0) -------------------------------------------------------- _DWORD *__thiscall sub_77D1B0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAC0; this[13] = 0; this[1] = dword_AB918C; result[3] = result; this[4] = 36; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAC0; this[8] = sub_77D080; this[9] = sub_77D140; this[10] = sub_77CCE0; this[11] = sub_77CD80; this[12] = sub_77CE20; return result; } // A0FAC0: using guessed type int (*off_A0FAC0)[28]; // AB918C: using guessed type int dword_AB918C; //----- (0077D210) -------------------------------------------------------- _DWORD *__thiscall sub_77D210(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9190; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_784ED0; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9190: using guessed type int dword_AB9190; //----- (0077D260) -------------------------------------------------------- int __cdecl sub_77D260(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x3Cu); if ( v2 ) v3 = sub_786550(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (0077D2C0) -------------------------------------------------------- void *__thiscall sub_77D2C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // 9A7B28: using guessed type void *CefBase::`vftable'; //----- (0077D2F0) -------------------------------------------------------- int *__cdecl sub_77D2F0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7865C0(v3 + 2, 1); else v4 = 0; v5 = dword_AB9218; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9218: using guessed type int dword_AB9218; //----- (0077D390) -------------------------------------------------------- int __thiscall sub_77D390(void *this, int a2, int a3, int a4, int a5, int a6) { int v7; // edi int v8; // ebx int v9; // esi void (__thiscall **v10)(int, int *, int, int, void ***, int); // edi int v11; // ecx int v12; // esi int v13; // [esp-10h] [ebp-2Ch] int v14; // [esp-Ch] [ebp-28h] void ***v15; // [esp-8h] [ebp-24h] int v16; // [esp-4h] [ebp-20h] void **v17; // [esp+Ch] [ebp-10h] int v18; // [esp+10h] [ebp-Ch] char v19; // [esp+14h] [ebp-8h] int v20; // [esp+18h] [ebp-4h] v20 = 0; if ( !a2 ) return 0; v7 = a5; if ( !a5 ) return 0; v8 = a6; if ( !a6 ) return 0; v9 = *(_DWORD *)(a2 - 8); if ( v9 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4); v16 = (int)this; v15 = (void ***)v8; v17 = &CefStringBase::`vftable'; v18 = v7; v19 = 0; v10 = *(void (__thiscall ***)(int, int *, int, int, void ***, int))v9; sub_77D2F0(&v16, v8); v15 = &v17; v14 = v11; sub_77A7F0(&v14, a4); sub_777FD0(&v13, a3); (*v10)(v9, &a2, v13, v14, v15, v16); sub_405F40(&v17); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4); v16 = a2; if ( a2 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, v16); v12 = sub_77D260(v16); if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v12; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077D490) -------------------------------------------------------- _DWORD *__thiscall sub_77D490(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9194; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_77D390; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9194: using guessed type int dword_AB9194; //----- (0077D4E0) -------------------------------------------------------- _DWORD *__thiscall sub_77D4E0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9198; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_784ED0; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9198: using guessed type int dword_AB9198; //----- (0077D530) -------------------------------------------------------- _DWORD *__thiscall sub_77D530(_DWORD *this, char a2) { return sub_77D590((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077D540) -------------------------------------------------------- int *__thiscall sub_77D540(int *this, int *a2) { int v2; // edi int *v3; // esi int v4; // eax v2 = *a2; v3 = this; if ( *a2 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); v4 = *v3; *v3 = v2; if ( v4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(); return v3; } //----- (0077D590) -------------------------------------------------------- _DWORD *__thiscall sub_77D590(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0FE18; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = off_A0FEC8; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FE18: using guessed type int (*off_A0FE18[44])(); // A0FEC8: using guessed type int (*off_A0FEC8[2])[4]; //----- (0077D5E0) -------------------------------------------------------- int *__cdecl sub_77D5E0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_786D40(v3 + 2, 1); else v4 = 0; v5 = dword_AB921C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB921C: using guessed type int dword_AB921C; //----- (0077D680) -------------------------------------------------------- int __cdecl sub_77D680(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB921C ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB921C: using guessed type int dword_AB921C; //----- (0077D760) -------------------------------------------------------- _DWORD *__thiscall sub_77D760(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0F838; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F838: using guessed type int (*off_A0F838[2])(); // A0FBF0: using guessed type int (*off_A0FBF0[7])(); // A104A8: using guessed type int (*off_A104A8)[4]; //----- (0077D7E0) -------------------------------------------------------- int __cdecl sub_77D7E0(int a1) { int v1; // eax int v3; // ecx void (__stdcall *v4)(int); // edx int v5; // esi v1 = a1; if ( !a1 ) return 0; if ( *(_DWORD *)(a1 - 8) != dword_AB91A0 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, 0); return 0; } v3 = *(_DWORD *)(a1 - 4); v4 = *(void (__stdcall **)(int))(v3 + 4); if ( v4 ) { v4(v3); v1 = a1; } v5 = *(_DWORD *)(a1 - 4); if ( v1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 4) + 4) + v1 + 4) + 4))(); return v5; } // AB91A0: using guessed type int dword_AB91A0; //----- (0077D850) -------------------------------------------------------- bool __thiscall sub_77D850(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x14u && (v2 = (int (__stdcall *)(_DWORD *))v1[4]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0077D870) -------------------------------------------------------- bool __thiscall sub_77D870(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x1Cu || !v2[6] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77D7E0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[6])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077D910) -------------------------------------------------------- bool __thiscall sub_77D910(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x20u || !v2[7] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77D7E0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[7])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077D9B0) -------------------------------------------------------- int __thiscall sub_77D9B0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, int, int, int); // ecx int result; // eax v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x2Cu && (v5 = (int (__stdcall *)(_DWORD *, int, int, int))v4[10]) != 0 && a2 ) result = v5(v4, a2, a3, a4); else result = 0; return result; } //----- (0077D9F0) -------------------------------------------------------- int *__thiscall sub_77D9F0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x24u && (v3 = (int (__stdcall *)(_DWORD *))v2[8]) != 0 ) { v4 = v3(v2); sub_778A50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077DA30) -------------------------------------------------------- void __fastcall sub_77DA30(unsigned int a1, int a2, int a3) { bool v3; // cf v3 = a1 < *(_DWORD *)(a1 - 4); JUMPOUT(&loc_77DAD0); } //----- (0077DA40) -------------------------------------------------------- _DWORD *__thiscall sub_77DA40(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F598; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F598; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0F584; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0F868; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0F584; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F584: using guessed type int (*off_A0F584[2])[4]; // A0F598: using guessed type int (*off_A0F598[22])(); // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F868: using guessed type int (*off_A0F868[3])(); //----- (0077DAC0) -------------------------------------------------------- _DWORD *__thiscall sub_77DAC0(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0F598; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A0F584; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F584: using guessed type int (*off_A0F584[2])[4]; // A0F598: using guessed type int (*off_A0F598[22])(); //----- (0077DB70) -------------------------------------------------------- bool __thiscall sub_77DB70(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x20u || !v2[7] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_778B90(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[7])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077DC10) -------------------------------------------------------- bool __thiscall sub_77DC10(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x24u || !v2[8] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_778B90(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[8])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077DCB0) -------------------------------------------------------- double __thiscall sub_77DCB0(_DWORD *this) { _DWORD *v1; // eax double result; // st7 void (__stdcall *v3)(_DWORD *, _DWORD); // [esp+0h] [ebp-4h] v1 = (_DWORD *)*(this - 1); if ( *v1 < 0x38u ) return 0.0; v3 = (void (__stdcall *)(_DWORD *, _DWORD))v1[13]; if ( !v3 ) return 0.0; v3(v1, v3); return result; } //----- (0077DCE0) -------------------------------------------------------- bool __thiscall sub_77DCE0(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x50u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[19]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (0077DD10) -------------------------------------------------------- bool __thiscall sub_77DD10(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x54u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[20]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (0077DD40) -------------------------------------------------------- bool __thiscall sub_77DD40(_DWORD *this, double a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x58u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD, _DWORD))v2[21]) != 0 ) result = v3(v2, LODWORD(a2), HIDWORD(a2)) != 0; else result = 0; return result; } //----- (0077DD70) -------------------------------------------------------- bool __thiscall sub_77DD70(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x5Cu && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[22]) != 0 ) result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; else result = 0; return result; } //----- (0077DDA0) -------------------------------------------------------- int __cdecl sub_77DDA0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB91FC ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB91FC: using guessed type int dword_AB91FC; //----- (0077DE00) -------------------------------------------------------- int *__cdecl sub_77DE00(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_787A80(v3 + 2, 1); else v4 = 0; v5 = dword_AB9220; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9220: using guessed type int dword_AB9220; //----- (0077DEA0) -------------------------------------------------------- int __cdecl sub_77DEA0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9220 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9220: using guessed type int dword_AB9220; //----- (0077DF80) -------------------------------------------------------- int *__thiscall sub_77DF80(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x28u && (v3 = (int (__stdcall *)(_DWORD *))v2[9]) != 0 ) { v4 = v3(v2); sub_778AF0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077DFC0) -------------------------------------------------------- int *__thiscall sub_77DFC0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x40u && (v3 = (int (__stdcall *)(_DWORD *))v2[15]) != 0 ) { v4 = v3(v2); sub_778A50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077E000) -------------------------------------------------------- int *__thiscall sub_77E000(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *))v2[16]) != 0 ) { v4 = v3(v2); sub_77B390(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077E040) -------------------------------------------------------- int *__thiscall sub_77E040(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *))v2[17]) != 0 ) { v4 = v3(v2); sub_77DE00(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077E080) -------------------------------------------------------- bool __thiscall sub_77E080(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x60u || !v2[23] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77D7E0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[23])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077E120) -------------------------------------------------------- bool __thiscall sub_77E120(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x64u || !v2[24] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DDA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[24])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077E1C0) -------------------------------------------------------- bool __thiscall sub_77E1C0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x68u || !v2[25] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DEA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[25])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0077E260) -------------------------------------------------------- _DWORD *__thiscall sub_77E260(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0F920; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F8C0: using guessed type int (*off_A0F8C0[20])(); // A0F910: using guessed type int (*off_A0F910[2])[4]; // A0F920: using guessed type int (*off_A0F920[2])(); //----- (0077E2E0) -------------------------------------------------------- _DWORD *__thiscall sub_77E2E0(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0F8C0; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F8C0: using guessed type int (*off_A0F8C0[20])(); // A0F910: using guessed type int (*off_A0F910[2])[4]; //----- (0077E340) -------------------------------------------------------- _DWORD *__thiscall sub_77E340(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x28u ) { v2 = (int (__stdcall *)(_DWORD *))result[9]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0077E360) -------------------------------------------------------- void __userpurge sub_77E360(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x2Cu && *(_DWORD *)(v4 + 40) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 40))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0077E3D0) -------------------------------------------------------- int __thiscall sub_77E3D0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x34u && (v3 = (int (__stdcall *)(_DWORD *))v2[12]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077E450) -------------------------------------------------------- _DWORD *__thiscall sub_77E450(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x38u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[13]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0077E490) -------------------------------------------------------- bool __thiscall sub_77E490(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x40u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[15]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (0077E4E0) -------------------------------------------------------- int __thiscall sub_77E4E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax bool v4; // cf int (__stdcall *v5)(_DWORD *, int); // edx int v6; // ecx _DWORD *v7; // eax int result; // eax void **v9; // [esp+4h] [ebp-10h] int v10; // [esp+8h] [ebp-Ch] char v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v3 = (_DWORD *)*(this - 1); v4 = *v3 < 0x44u; v12 = 0; if ( !v4 && (v5 = (int (__stdcall *)(_DWORD *, int))v3[16]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = (_DWORD *)v5(v3, v6); v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; sub_7787E0((int)&v9, v7); sub_778780((_DWORD *)a2, (int)&v9); sub_405F40(&v9); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077E560) -------------------------------------------------------- void __userpurge sub_77E560(int a1@, int a2@, int a3@, _DWORD *a4) { int v4; // ebx int v5; // eax int v6; // edi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x48u && *(_DWORD *)(v4 + 68) ) { v5 = cef_string_map_alloc(a2, a3); v6 = v5; if ( v5 ) sub_77B890(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 68))(v4, v6); if ( v6 ) { sub_786640(*(void **)(a4[1] + 4)); *(_DWORD *)(a4[1] + 4) = a4[1]; *(_DWORD *)a4[1] = a4[1]; *(_DWORD *)(a4[1] + 8) = a4[1]; a4[2] = 0; sub_77C250(v6, a4); cef_string_map_free(v6); } } } // 9A559C: using guessed type int __stdcall cef_string_map_alloc(_DWORD, _DWORD); // 9A55A0: using guessed type int __cdecl cef_string_map_free(_DWORD); //----- (0077E5E0) -------------------------------------------------------- _DWORD *__thiscall sub_77E5E0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x4Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[18]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0077E620) -------------------------------------------------------- void __thiscall sub_77E620(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx void (__stdcall *v4)(_DWORD *, int, _DWORD); // esi int v5; // edx int v6; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x50u ) { v4 = (void (__stdcall *)(_DWORD *, int, _DWORD))v3[19]; if ( v4 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) { v6 = *(_DWORD *)(a3 + 4); if ( v6 ) { if ( *(_DWORD *)(v6 + 4) ) v4(v3, v5, *(_DWORD *)(a3 + 4)); } } } } } } //----- (0077E670) -------------------------------------------------------- bool __thiscall sub_77E670(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x54u && (v2 = (int (__stdcall *)(_DWORD *))v1[20]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0077E690) -------------------------------------------------------- void __userpurge sub_77E690(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x58u && *(_DWORD *)(v4 + 84) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 84))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0077E700) -------------------------------------------------------- _DWORD *__thiscall sub_77E700(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x5Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[22]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0077E740) -------------------------------------------------------- _DWORD *__thiscall sub_77E740(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x60u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[23]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0077E780) -------------------------------------------------------- int *__thiscall sub_77E780(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = v3(v2); sub_77CEC0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0077E830) -------------------------------------------------------- int *__cdecl sub_77E830(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_788370(v3 + 2, 1); else v4 = 0; v5 = dword_AB9224; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9224: using guessed type int dword_AB9224; //----- (0077E8D0) -------------------------------------------------------- int *__cdecl sub_77E8D0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_788590(v3 + 2, 1); else v4 = 0; v5 = dword_AB9228; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9228: using guessed type int dword_AB9228; //----- (0077E9E0) -------------------------------------------------------- int *__cdecl sub_77E9E0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7892A0(v3 + 2, 1); else v4 = 0; v5 = dword_AB922C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB922C: using guessed type int dword_AB922C; //----- (0077EA90) -------------------------------------------------------- int __stdcall sub_77EA90(int a1, int a2, int a3, int a4, int a5) { int result; // eax int v6; // ebx _DWORD *v7; // eax void (__thiscall ***v8)(_DWORD, int, int, int, int); // esi void (__thiscall **v9)(_DWORD, int, int, int, int); // edi int v10; // [esp-10h] [ebp-20h] int v11; // [esp-Ch] [ebp-1Ch] int v12; // [esp-8h] [ebp-18h] int v13; // [esp-4h] [ebp-14h] int v14; // [esp+Ch] [ebp-4h] result = a1; v14 = 0; if ( a1 && a2 && a3 && a4 ) { v6 = a5; if ( a5 ) { v7 = sub_789AA0(&a1, a1); v8 = (void (__thiscall ***)(_DWORD, int, int, int, int))*v7; v9 = *(void (__thiscall ***)(_DWORD, int, int, int, int))*v7; sub_77E8D0(&v13, v6); sub_77E830(&v12, a4); sub_77A7F0(&v11, a3); sub_777FD0(&v10, a2); (*v9)(v8, v10, v11, v12, v13); result = sub_407820(&a1); } } return result; } //----- (0077EB20) -------------------------------------------------------- int __stdcall sub_77EB20(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // ebx int **v8; // eax int *v9; // edi int v10; // esi unsigned __int8 v11; // bl int v12; // [esp-14h] [ebp-24h] int v13; // [esp-10h] [ebp-20h] int v14; // [esp-Ch] [ebp-1Ch] int v15; // [esp-8h] [ebp-18h] int v16; // [esp-4h] [ebp-14h] int v17; // [esp+Ch] [ebp-4h] v17 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; if ( !a4 ) return 0; if ( !a5 ) return 0; v7 = a6; if ( !a6 ) return 0; v8 = (int **)sub_789AA0(&a1, a1); v9 = *v8; v10 = **v8; sub_77E9E0(&v16, v7); sub_77E8D0(&v15, a5); sub_77E830(&v14, a4); sub_77A7F0(&v13, a3); sub_777FD0(&v12, a2); v11 = (*(int (__thiscall **)(int *, int, int, int, int, int))(v10 + 4))(v9, v12, v13, v14, v15, v16); sub_407820(&a1); return v11; } //----- (0077EBE0) -------------------------------------------------------- int __stdcall sub_77EBE0(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // ebx int **v8; // eax int *v9; // edi int v10; // esi unsigned __int8 v11; // bl int v12; // [esp-14h] [ebp-24h] int v13; // [esp-10h] [ebp-20h] int v14; // [esp-Ch] [ebp-1Ch] int v15; // [esp-8h] [ebp-18h] int v16; // [esp-4h] [ebp-14h] int v17; // [esp+Ch] [ebp-4h] v17 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; v7 = a4; if ( !a4 ) return 0; v8 = (int **)sub_789AA0(&a1, a1); v9 = *v8; v10 = **v8; v16 = a6; v15 = a5; v14 = a6; sub_77E830(&v14, v7); sub_77A7F0(&v13, a3); sub_777FD0(&v12, a2); v11 = (*(int (__thiscall **)(int *, int, int, int, int, int))(v10 + 8))(v9, v12, v13, v14, v15, v16); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v11; } //----- (0077EC90) -------------------------------------------------------- int __thiscall sub_77EC90(void *this, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi int v7; // [esp-8h] [ebp-18h] void *v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 && a4 ) { v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v8 = this; sub_77A7F0((int *)&v8, a4); sub_777FD0(&v7, a3); (*(void (__thiscall **)(int *, int, void *))(v6 + 12))(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (0077ED10) -------------------------------------------------------- _DWORD *__thiscall sub_77ED10(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FD24; this[12] = 0; this[1] = dword_AB91AC; result[3] = result; this[4] = 32; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FD24; this[8] = sub_77EA90; this[9] = sub_77EB20; this[10] = sub_77EBE0; this[11] = sub_77EC90; return result; } // A0FD24: using guessed type int (*off_A0FD24)[28]; // AB91AC: using guessed type int dword_AB91AC; //----- (0077ED90) -------------------------------------------------------- int *__cdecl sub_77ED90(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789350(v3 + 2, 1); else v4 = 0; v5 = dword_AB9230; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9230: using guessed type int dword_AB9230; //----- (0077EE30) -------------------------------------------------------- int __stdcall sub_77EE30(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi int (__thiscall ***v10)(_DWORD, void ***, int, void ***, void ***, int *, int, void **); // esi int (__thiscall **v11)(_DWORD, void ***, int, void ***, void ***, int *, int, void **); // edi void ***v12; // [esp-1Ch] [ebp-54h] int v13; // [esp-18h] [ebp-50h] void ***v14; // [esp-14h] [ebp-4Ch] void ***v15; // [esp-10h] [ebp-48h] int *v16; // [esp-Ch] [ebp-44h] int v17; // [esp-8h] [ebp-40h] void **v18; // [esp-4h] [ebp-3Ch] int v19; // [esp+Ch] [ebp-2Ch] int v20; // [esp+10h] [ebp-28h] int v21; // [esp+14h] [ebp-24h] void **v22; // [esp+1Ch] [ebp-1Ch] int v23; // [esp+20h] [ebp-18h] char v24; // [esp+24h] [ebp-14h] void **v25; // [esp+28h] [ebp-10h] int v26; // [esp+2Ch] [ebp-Ch] char v27; // [esp+30h] [ebp-8h] int v28; // [esp+34h] [ebp-4h] v8 = a1; v28 = 0; if ( !a1 || !a2 || a7 < 0 || !a8 ) return 0; v19 = 0; v20 = 0; v21 = 0; sub_77C000(a6, (unsigned int *)&v19); v10 = (int (__thiscall ***)(_DWORD, void ***, int, void ***, void ***, int *, int, void **))*sub_789AA0(&a1, v8); v22 = &CefStringBase::`vftable'; v23 = 0; v24 = 0; if ( a5 ) { v23 = a5; v24 = 0; } v25 = &CefStringBase::`vftable'; v26 = 0; v27 = 0; if ( a4 ) { v26 = a4; v27 = 0; } v11 = *v10; v18 = &CefStringBase::`vftable'; sub_77ED90((int *)&v18, a8); v17 = a7; v16 = &v19; v15 = &v22; v14 = &v25; v13 = a3; v12 = &v22; sub_777FD0((int *)&v12, a2); HIBYTE(a8) = (*v11)(v10, v12, v13, v14, v15, v16, v17, v18); sub_405F40(&v25); sub_405F40(&v22); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); sub_77A000((void **)&v19); return HIBYTE(a8); } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077EF40) -------------------------------------------------------- _DWORD *__thiscall sub_77EF40(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB91B0; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_77EE30; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB91B0: using guessed type int dword_AB91B0; //----- (0077F000) -------------------------------------------------------- int __stdcall sub_77F000(int a1, int a2, int a3, int a4) { int result; // eax int v5; // ebx int v6; // edi void (__thiscall ***v7)(_DWORD, int, void ***, void ***); // esi void (__thiscall **v8)(_DWORD, int, void ***, void ***); // edi int v9; // [esp-Ch] [ebp-28h] void ***v10; // [esp-8h] [ebp-24h] void ***v11; // [esp-4h] [ebp-20h] void **v12; // [esp+Ch] [ebp-10h] int v13; // [esp+10h] [ebp-Ch] char v14; // [esp+14h] [ebp-8h] int v15; // [esp+18h] [ebp-4h] result = a1; v15 = 0; if ( a1 ) { if ( a2 ) { v5 = a3; if ( a3 ) { v6 = a4; if ( a4 ) { v7 = (void (__thiscall ***)(_DWORD, int, void ***, void ***))*sub_789AA0(&a1, a1); v11 = &v12; v10 = &v12; v9 = v5; v12 = &CefStringBase::`vftable'; v13 = v6; v14 = 0; v8 = *v7; sub_77A7F0((int *)&v10, v5); sub_777FD0(&v9, a2); (*v8)(v7, v9, v10, v11); sub_405F40(&v12); result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); } } } } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077F0A0) -------------------------------------------------------- int __stdcall sub_77F0A0(int a1, int a2, void *a3) { int result; // eax int *v4; // edi int v5; // esi void ***v6; // [esp-8h] [ebp-24h] void ***v7; // [esp-4h] [ebp-20h] void **v8; // [esp+Ch] [ebp-10h] void *v9; // [esp+10h] [ebp-Ch] char v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] result = a1; v11 = 0; if ( a1 && a2 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v8 = &CefStringBase::`vftable'; v9 = 0; v10 = 0; if ( a3 ) { v9 = a3; v10 = 0; } v5 = *v4; v7 = &v8; v6 = &v8; sub_777FD0((int *)&v6, a2); (*(void (__thiscall **)(int *, void ***, void ***))(v5 + 4))(v4, v6, v7); v8 = &CefStringBase::`vftable'; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v9); } v9 = 0; v10 = 0; } result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077F160) -------------------------------------------------------- int __stdcall sub_77F160(int a1, int a2, int a3) { int *v3; // esi int v4; // edi int result; // eax int *v6; // [esp-8h] [ebp-28h] int *v7; // [esp-4h] [ebp-24h] int v8; // [esp+Ch] [ebp-14h] int v9; // [esp+10h] [ebp-10h] int v10; // [esp+14h] [ebp-Ch] int v11; // [esp+1Ch] [ebp-4h] v11 = 0; if ( a1 && a2 ) { v8 = 0; v9 = 0; v10 = 0; sub_77C000(a3, (unsigned int *)&v8); v3 = *(int **)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); v4 = *v3; v7 = &v8; v6 = &v8; sub_777FD0((int *)&v6, a2); (*(void (__thiscall **)(int *, int *, int *))(v4 + 8))(v3, v6, v7); (*(void (__thiscall **)(int))(*(int *)((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); result = sub_77A000((void **)&v8); } return result; } //----- (0077F1F0) -------------------------------------------------------- int __thiscall sub_77F1F0(void *this, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi void *v7; // [esp-8h] [ebp-18h] BOOL v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 ) { v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; LOBYTE(this) = a4 != 0; v8 = a4 != 0; v7 = this; sub_777FD0((int *)&v7, a3); (*(void (__thiscall **)(int *, void *, BOOL))(v6 + 12))(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (0077F270) -------------------------------------------------------- int __stdcall sub_77F270(int a1, int a2, void *a3) { int *v4; // esi int v5; // edi unsigned __int8 v6; // bl void ***v7; // [esp-8h] [ebp-24h] void ***v8; // [esp-4h] [ebp-20h] void **v9; // [esp+Ch] [ebp-10h] void *v10; // [esp+10h] [ebp-Ch] char v11; // [esp+14h] [ebp-8h] int v12; // [esp+18h] [ebp-4h] v12 = 0; if ( !a1 || !a2 ) return 0; v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; if ( a3 ) { v10 = a3; v11 = 0; } v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v8 = &v9; v7 = &v9; sub_777FD0((int *)&v7, a2); v6 = (*(int (__thiscall **)(int *, void ***, void ***))(v5 + 16))(v4, v7, v8); (*(void (**)(void))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))(); v9 = &CefStringBase::`vftable'; if ( v10 ) { if ( v11 ) { cef_string_utf16_clear(v10); operator delete(v10); } } return v6; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077F330) -------------------------------------------------------- int __stdcall sub_77F330(int a1, int a2, void *a3) { int result; // eax int *v4; // edi int v5; // esi void ***v6; // [esp-8h] [ebp-24h] void ***v7; // [esp-4h] [ebp-20h] void **v8; // [esp+Ch] [ebp-10h] void *v9; // [esp+10h] [ebp-Ch] char v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] result = a1; v11 = 0; if ( a1 && a2 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v8 = &CefStringBase::`vftable'; v9 = 0; v10 = 0; if ( a3 ) { v9 = a3; v10 = 0; } v5 = *v4; v7 = &v8; v6 = &v8; sub_777FD0((int *)&v6, a2); (*(void (__thiscall **)(int *, void ***, void ***))(v5 + 20))(v4, v6, v7); v8 = &CefStringBase::`vftable'; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v9); } v9 = 0; v10 = 0; } result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077F3F0) -------------------------------------------------------- int __stdcall sub_77F3F0(int a1, int a2, void *a3, void *a4, int a5) { int *v6; // edi int v7; // esi int v8; // [esp-10h] [ebp-38h] void ***v9; // [esp-Ch] [ebp-34h] void ***v10; // [esp-8h] [ebp-30h] int v11; // [esp-4h] [ebp-2Ch] void **v12; // [esp+Ch] [ebp-1Ch] void *v13; // [esp+10h] [ebp-18h] char v14; // [esp+14h] [ebp-14h] void **v15; // [esp+18h] [ebp-10h] void *v16; // [esp+1Ch] [ebp-Ch] char v17; // [esp+20h] [ebp-8h] int v18; // [esp+24h] [ebp-4h] unsigned __int8 v19; // [esp+37h] [ebp+Fh] v18 = 0; if ( !a1 || !a2 ) return 0; v6 = *(int **)(a1 - 8); if ( v6 ) (**(void (__thiscall ***)(int))((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); v12 = &CefStringBase::`vftable'; v13 = 0; v14 = 0; if ( a4 ) { v13 = a4; v14 = 0; } v15 = &CefStringBase::`vftable'; v16 = 0; v17 = 0; if ( a3 ) { v16 = a3; v17 = 0; } v7 = *v6; v11 = a5; v10 = &v12; v9 = &v15; v8 = a5; sub_777FD0(&v8, a2); v19 = (*(int (__thiscall **)(int *, int, void ***, void ***, int))(v7 + 24))(v6, v8, v9, v10, v11); v15 = &CefStringBase::`vftable'; if ( v16 ) { if ( v17 ) { cef_string_utf16_clear(v16); operator delete(v16); } v16 = 0; v17 = 0; } v12 = &CefStringBase::`vftable'; if ( v13 ) { if ( v14 ) { cef_string_utf16_clear(v13); operator delete(v13); } v13 = 0; v14 = 0; } (*(void (__thiscall **)(int))(*(int *)((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); return v19; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0077F500) -------------------------------------------------------- _DWORD *__thiscall sub_77F500(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; *this = &off_A0FA34; this[15] = 0; v2 = this + 4; this[1] = dword_AB91B4; v1[3] = v1; memset(this + 4, 0, 0x2Cu); *v2 = 44; v2[1] = sub_789AE0; v2[2] = sub_77FFB0; v2[3] = sub_78ABD0; *v1 = &off_A0FA34; v1[8] = sub_77F000; v1[9] = sub_77F0A0; v1[10] = sub_77F160; v1[11] = sub_77F1F0; v1[12] = sub_77F270; v1[13] = sub_77F330; v1[14] = sub_77F3F0; return v1; } // A0FA34: using guessed type int (*off_A0FA34)[28]; // AB91B4: using guessed type int dword_AB91B4; //----- (0077F590) -------------------------------------------------------- _DWORD *__thiscall sub_77F590(_DWORD *this, char a2) { return sub_785DB0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0077F5A0) -------------------------------------------------------- _DWORD *__thiscall sub_77F5A0(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0FA68; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A0FA58; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FA58: using guessed type int (*off_A0FA58)[4]; // A0FA68: using guessed type int (*off_A0FA68[17])(); //----- (0077F600) -------------------------------------------------------- int *__cdecl sub_77F600(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789450(v3 + 2, 1); else v4 = 0; v5 = dword_AB9234; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9234: using guessed type int dword_AB9234; //----- (0077F710) -------------------------------------------------------- int *__cdecl sub_77F710(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789500(v3 + 2, 1); else v4 = 0; v5 = dword_AB9238; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9238: using guessed type int dword_AB9238; //----- (0077F820) -------------------------------------------------------- int *__cdecl sub_77F820(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7898E0(v3 + 2, 1); else v4 = 0; v5 = dword_AB923C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB923C: using guessed type int dword_AB923C; //----- (0077F8E0) -------------------------------------------------------- int __stdcall sub_77F8E0(int a1, int a2, int a3, int a4, int a5) { int result; // eax int v6; // ebx _DWORD *v7; // eax void (__thiscall ***v8)(_DWORD, int, int, _DWORD *, int); // esi void (__thiscall **v9)(_DWORD, int, int, _DWORD *, int); // edi int v10; // ecx int v11; // [esp-10h] [ebp-2Ch] int v12; // [esp-Ch] [ebp-28h] _DWORD *v13; // [esp-8h] [ebp-24h] int v14; // [esp-4h] [ebp-20h] char v15; // [esp+Ch] [ebp-10h] int v16; // [esp+18h] [ebp-4h] result = a1; v16 = 0; if ( a1 && a2 && a3 && a4 ) { v6 = a5; if ( a5 ) { v7 = sub_789AA0(&a1, a1); v8 = (void (__thiscall ***)(_DWORD, int, int, _DWORD *, int))*v7; v9 = *(void (__thiscall ***)(_DWORD, int, int, _DWORD *, int))*v7; sub_77F600(&v14, v6); v13 = sub_405FD0(&v15, a4); v12 = v10; sub_77F710(&v12, a3); sub_777FD0(&v11, a2); (*v9)(v8, v11, v12, v13, v14); sub_405F40(&v15); result = sub_407820(&a1); } } return result; } //----- (0077F980) -------------------------------------------------------- int __stdcall sub_77F980(int a1, int a2, int a3, int a4) { int result; // eax int v5; // ebx int **v6; // eax int *v7; // edi int v8; // esi int v9; // [esp-Ch] [ebp-1Ch] int v10; // [esp-8h] [ebp-18h] int v11; // [esp-4h] [ebp-14h] int v12; // [esp+Ch] [ebp-4h] result = a1; v12 = 0; if ( a1 ) { if ( a2 ) { if ( a3 ) { v5 = a4; if ( a4 ) { v6 = (int **)sub_789AA0(&a1, a1); v7 = *v6; v8 = **v6; sub_77F820(&v11, v5); sub_77F710(&v10, a3); sub_777FD0(&v9, a2); (*(void (__thiscall **)(int *, int, int, int))(v8 + 4))(v7, v9, v10, v11); result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); } } } } return result; } //----- (0077FA10) -------------------------------------------------------- _DWORD *__thiscall sub_77FA10(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAAC; this[10] = 0; this[1] = dword_AB91B8; result[3] = result; this[4] = 24; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAAC; this[8] = sub_77F8E0; this[9] = sub_77F980; return result; } // A0FAAC: using guessed type int (*off_A0FAAC)[28]; // AB91B8: using guessed type int dword_AB91B8; //----- (0077FA60) -------------------------------------------------------- void *__stdcall sub_77FA60(unsigned int a1) { void *result; // eax int (__thiscall **v2)(void *, char); // [esp+0h] [ebp-8h] int v3; // [esp+4h] [ebp-4h] result = 0; if ( a1 ) { if ( a1 > 0x9249249 || (result = operator new(28 * a1)) == 0 ) { v3 = 0; v2 = &off_A0F3E0; sub_777390(&v2); } } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0077FAB0) -------------------------------------------------------- void *__thiscall sub_77FAB0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &off_A0FAD0; if ( a2 & 1 ) operator delete(this); return v2; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (0077FAE0) -------------------------------------------------------- _DWORD *__thiscall sub_77FAE0(_DWORD *this, int a2) { _DWORD *result; // eax _DWORD *v3; // ecx result = this; *this = &off_A0FAD0; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 0; if ( a2 ) v3 = (_DWORD *)(a2 + 4); else v3 = 0; result[1] = *v3; result[2] = v3[1]; result[3] = v3[2]; result[4] = v3[3]; result[5] = v3[4]; *result = &off_A0FAD0; return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (0077FB40) -------------------------------------------------------- _DWORD *__cdecl sub_77FB40(int a1, int a2, _DWORD *a3) { _DWORD *result; // eax int i; // esi _DWORD *v5; // edx result = a3; for ( i = a1; i != a2; result += 7 ) { if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; result[4] = 0; result[5] = 0; result[6] = 0; if ( i ) v5 = (_DWORD *)(i + 4); else v5 = 0; result[1] = *v5; result[2] = v5[1]; result[3] = v5[2]; result[4] = v5[3]; result[5] = v5[4]; *result = &off_A0FAD0; } i += 28; } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (0077FBB0) -------------------------------------------------------- unsigned int __thiscall sub_77FBB0(int *this, unsigned int a2) { int *v2; // esi unsigned int result; // eax char *v4; // ebx unsigned int v5; // edx int v6; // edi _DWORD *v7; // [esp+8h] [ebp-8h] char *v8; // [esp+Ch] [ebp-4h] v2 = this; if ( a2 > 0x9249249 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 28; if ( result < a2 ) { v7 = sub_77FA60(a2); sub_77FB40(*v2, v2[1], v7); v4 = (char *)*v2; v8 = (char *)v2[1]; v5 = (signed int)(v8 - v4 + ((unsigned __int64)(-1840700269i64 * (v8 - v4)) >> 32)) >> 4; v6 = v5 + (v5 >> 31); if ( *v2 ) { for ( ; v4 != v8; v4 += 28 ) (**(void (__thiscall ***)(char *, _DWORD))v4)(v4, 0); operator delete((void *)*v2); } result = (unsigned int)v7; v2[2] = (int)&v7[7 * a2]; v2[1] = (int)&v7[7 * v6]; *v2 = (int)v7; } return result; } //----- (0077FC90) -------------------------------------------------------- unsigned int __thiscall sub_77FC90(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax unsigned int v5; // eax v2 = (this[1] - *this) / 28; if ( 153391689 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 28; if ( v3 > result ) { if ( 153391689 - (result >> 1) >= result ) v5 = (result >> 1) + result; else v5 = 0; if ( v5 < v3 ) v5 = v3; result = sub_77FBB0(this, v5); } return result; } //----- (0077FD10) -------------------------------------------------------- void __thiscall sub_77FD10(int *this, unsigned int a2) { int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx _DWORD *v7; // ecx v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_77FC90(v2, 1); v7 = (_DWORD *)v2[1]; if ( v7 ) sub_77FAE0(v7, a2); } else { v4 = (signed int)(a2 - *v2 + ((unsigned __int64)(-1840700269i64 * (signed int)(a2 - *v2)) >> 32)) >> 4; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_77FC90(v2, 1); v6 = (_DWORD *)v2[1]; if ( v6 ) { sub_77FAE0(v6, *v2 + 28 * v5); v2[1] += 28; return; } } v2[1] += 28; } //----- (0077FDA0) -------------------------------------------------------- int __stdcall sub_77FDA0(int a1, int a2, int a3, int a4) { int v5; // esi int (__thiscall **v6)(int, int, int, int); // edi unsigned __int8 v7; // bl int v8; // [esp-Ch] [ebp-1Ch] int v9; // [esp-8h] [ebp-18h] int v10; // [esp-4h] [ebp-14h] int v11; // [esp+Ch] [ebp-4h] v11 = 0; if ( !a1 || !a2 || !a3 ) return 0; v5 = *(_DWORD *)(a1 - 8); if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v6 = *(int (__thiscall ***)(int, int, int, int))v5; v10 = a4; v9 = a4; sub_77C9F0(&v9, a3); sub_777FD0(&v8, a2); v7 = (*v6)(v5, v8, v9, v10); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); return v7; } //----- (0077FE30) -------------------------------------------------------- void __stdcall sub_77FE30(int a1, int a2, unsigned int a3, int *a4) { int v4; // ecx int v5; // ebx unsigned int v6; // edi int *v7; // esi int v8; // ecx int v9; // edx int v10; // eax int v11; // ecx int v12; // eax int *v13; // esi int v14; // edi char *v15; // esi char *v16; // edi void **v17; // [esp-8h] [ebp-50h] void **v18; // [esp-4h] [ebp-4Ch] int v19; // [esp+Ch] [ebp-3Ch] void *v20; // [esp+10h] [ebp-38h] char *v21; // [esp+14h] [ebp-34h] int v22; // [esp+18h] [ebp-30h] int v23; // [esp+20h] [ebp-28h] int v24; // [esp+24h] [ebp-24h] int (__thiscall **v25)(void *, char); // [esp+28h] [ebp-20h] int v26; // [esp+2Ch] [ebp-1Ch] int v27; // [esp+30h] [ebp-18h] int v28; // [esp+34h] [ebp-14h] int v29; // [esp+38h] [ebp-10h] int v30; // [esp+3Ch] [ebp-Ch] int v31; // [esp+40h] [ebp-8h] v4 = a1; v5 = a2; v23 = a1; v24 = a2; v19 = 0; if ( a1 ) { if ( a2 ) { v6 = a3; v7 = a4; if ( a3 <= 0 || a4 ) { v20 = 0; v21 = 0; v22 = 0; if ( a3 > 0 ) { do { v8 = v7[1]; v9 = v7[2]; v26 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v10 = *v7; v27 = v8; v11 = v7[4]; v28 = v9; v26 = v10; v12 = v7[3]; v30 = v11; v29 = v12; v25 = &off_A0FAD0; sub_77FD10((int *)&v20, (unsigned int)&v25); v7 += 5; --v6; } while ( v6 ); v4 = v23; v5 = v24; } v13 = *(int **)(v4 - 8); if ( v13 ) (**(void (__thiscall ***)(int))((char *)v13 + *(_DWORD *)(v13[1] + 4) + 4))((int)v13 + *(_DWORD *)(v13[1] + 4) + 4); v14 = *v13; v18 = &v20; v17 = &v20; sub_777FD0((int *)&v17, v5); (*(void (__thiscall **)(int *, void **, void **))(v14 + 4))(v13, v17, v18); (*(void (__thiscall **)(int))(*(int *)((char *)v13 + *(_DWORD *)(v13[1] + 4) + 4) + 4))((int)v13 + *(_DWORD *)(v13[1] + 4) + 4); v15 = (char *)v20; if ( v20 ) { v16 = v21; if ( v20 != v21 ) { do { (**(void (__thiscall ***)(void *, _DWORD))v15)(v15, 0); v15 += 28; } while ( v15 != v16 ); v15 = (char *)v20; } operator delete(v15); } } } } } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (0077FF60) -------------------------------------------------------- _DWORD *__thiscall sub_77FF60(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAAC; this[10] = 0; this[1] = dword_AB91BC; result[3] = result; this[4] = 24; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAAC; this[8] = sub_77FDA0; this[9] = sub_77FE30; return result; } // A0FAAC: using guessed type int (*off_A0FAAC)[28]; // AB91BC: using guessed type int dword_AB91BC; //----- (0077FFB0) -------------------------------------------------------- int __stdcall sub_77FFB0(int a1) { int result; // eax result = a1; if ( a1 ) result = (*(unsigned __int8 (**)(void))(**(_DWORD **)(a1 - 4) + 4))(); return result; } //----- (0077FFE0) -------------------------------------------------------- int __stdcall sub_77FFE0(int a1, int a2, int a3, int a4, int *a5, int a6, int a7) { int result; // eax int v8; // ecx int v9; // esi void (__thiscall **v10)(int, int (__thiscall ***)(void *, char), int, int, int (__thiscall ***)(void *, char), int, BOOL); // edi int (__thiscall ***v11)(void *, char); // [esp-18h] [ebp-44h] int v12; // [esp-14h] [ebp-40h] int v13; // [esp-10h] [ebp-3Ch] int (__thiscall ***v14)(void *, char); // [esp-Ch] [ebp-38h] int v15; // [esp-8h] [ebp-34h] BOOL v16; // [esp-4h] [ebp-30h] int v17; // [esp+Ch] [ebp-20h] int (__thiscall **v18)(void *, char); // [esp+10h] [ebp-1Ch] int v19; // [esp+14h] [ebp-18h] int v20; // [esp+18h] [ebp-14h] int v21; // [esp+1Ch] [ebp-10h] int v22; // [esp+20h] [ebp-Ch] int v23; // [esp+24h] [ebp-8h] result = 0; v17 = 0; if ( a1 && a2 && a5 ) { v19 = *a5; v20 = a5[1]; v8 = a5[3]; v21 = a5[2]; v9 = *(_DWORD *)(a1 - 8); v23 = 0; v22 = v8; v18 = &off_A0FAD0; if ( v9 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4); v10 = *(void (__thiscall ***)(int, int (__thiscall ***)(void *, char), int, int, int (__thiscall ***)(void *, char), int, BOOL))v9; v16 = a7 != 0; v15 = a6; v14 = &v18; v13 = a4; v12 = a3; v11 = &v18; sub_777FD0((int *)&v11, a2); (*v10)(v9, v11, v12, v13, v14, v15, v16); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4); } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (007800C0) -------------------------------------------------------- _DWORD *__thiscall sub_7800C0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB91C0; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_77FFE0; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB91C0: using guessed type int dword_AB91C0; //----- (00780150) -------------------------------------------------------- int __thiscall sub_780150(void *this, int a2, int a3, int a4) { int result; // eax int v5; // esi void (__thiscall **v6)(int, void *, BOOL); // edi void *v7; // [esp-8h] [ebp-18h] BOOL v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 ) { v5 = *(_DWORD *)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v6 = *(void (__thiscall ***)(int, void *, BOOL))v5; LOBYTE(this) = a4 != 0; v8 = a4 != 0; v7 = this; sub_777FD0((int *)&v7, a3); (*v6)(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); } return result; } //----- (007801D0) -------------------------------------------------------- int __stdcall sub_7801D0(int a1, int a2, int a3) { int *v4; // esi int v5; // edi unsigned __int8 v6; // bl int v7; // [esp-8h] [ebp-18h] int v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] v9 = 0; if ( !a1 || !a2 ) return 0; v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v8 = a3; v7 = a3; sub_777FD0(&v7, a2); v6 = (*(int (__thiscall **)(int *, int, int))(v5 + 4))(v4, v7, v8); (*(void (**)(void))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))(); return v6; } //----- (00780250) -------------------------------------------------------- _DWORD *__thiscall sub_780250(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FDAC; this[11] = 0; this[1] = dword_AB91C4; result[3] = result; this[4] = 28; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FDAC; this[8] = sub_780150; this[9] = sub_7801D0; this[10] = sub_780760; return result; } // A0FDAC: using guessed type int (*off_A0FDAC)[12]; // AB91C4: using guessed type int dword_AB91C4; //----- (007802B0) -------------------------------------------------------- int *__cdecl sub_7802B0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789970(v3 + 2, 1); else v4 = 0; v5 = dword_AB9240; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9240: using guessed type int dword_AB9240; //----- (00780350) -------------------------------------------------------- int __stdcall sub_780350(int a1, int a2, int a3, int a4, int a5) { int v6; // edi int v7; // ebx int (__thiscall ***v8)(_DWORD, int, void ***, int, int); // esi int (__thiscall **v9)(_DWORD, int, void ***, int, int); // edi int v10; // ecx unsigned __int8 v11; // bl int v12; // [esp-10h] [ebp-2Ch] void ***v13; // [esp-Ch] [ebp-28h] int v14; // [esp-8h] [ebp-24h] int v15; // [esp-4h] [ebp-20h] void **v16; // [esp+Ch] [ebp-10h] int v17; // [esp+10h] [ebp-Ch] char v18; // [esp+14h] [ebp-8h] int v19; // [esp+18h] [ebp-4h] v19 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; v6 = a3; if ( !a3 ) return 0; v7 = a5; if ( !a5 ) return 0; v8 = (int (__thiscall ***)(_DWORD, int, void ***, int, int))*sub_789AA0(&a1, a1); v14 = v7; v16 = &CefStringBase::`vftable'; v17 = v6; v18 = 0; v9 = *v8; sub_7802B0(&v15, v7); v14 = a4; v13 = &v16; v12 = v10; sub_777FD0(&v12, a2); v11 = (*v9)(v8, v12, v13, v14, v15); sub_405F40(&v16); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v11; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00780400) -------------------------------------------------------- int __stdcall sub_780400(int a1, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi int v6; // [esp-8h] [ebp-18h] int v7; // [esp-4h] [ebp-14h] int v8; // [esp+Ch] [ebp-4h] result = a1; v8 = 0; if ( a1 && a2 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = a3; v6 = a3; sub_777FD0(&v6, a2); (*(void (__thiscall **)(int *, int, int))(v5 + 4))(v4, v6, v7); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00780470) -------------------------------------------------------- _DWORD *__thiscall sub_780470(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAAC; this[10] = 0; this[1] = dword_AB91C8; result[3] = result; this[4] = 24; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAAC; this[8] = sub_780350; this[9] = sub_780400; return result; } // A0FAAC: using guessed type int (*off_A0FAAC)[28]; // AB91C8: using guessed type int dword_AB91C8; //----- (007804C0) -------------------------------------------------------- int *__cdecl sub_7804C0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_7899F0(v3 + 2, 1); else v4 = 0; v5 = dword_AB9244; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9244: using guessed type int dword_AB9244; //----- (00780560) -------------------------------------------------------- int __stdcall sub_780560(char *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, _DWORD *a9) { bool v10; // zf int (__thiscall ***v11)(_DWORD, int, void ***, void ***, int, void ***, void ***, void **, char *); // edi int (__thiscall **v12)(_DWORD, int, void ***, void ***, int, void ***, void ***, void **, char *); // esi int v13; // [esp-20h] [ebp-60h] void ***v14; // [esp-1Ch] [ebp-5Ch] void ***v15; // [esp-18h] [ebp-58h] int v16; // [esp-14h] [ebp-54h] void ***v17; // [esp-10h] [ebp-50h] void ***v18; // [esp-Ch] [ebp-4Ch] void **v19; // [esp-8h] [ebp-48h] char *v20; // [esp-4h] [ebp-44h] void **v21; // [esp+Ch] [ebp-34h] int v22; // [esp+10h] [ebp-30h] char v23; // [esp+14h] [ebp-2Ch] void **v24; // [esp+18h] [ebp-28h] int v25; // [esp+1Ch] [ebp-24h] char v26; // [esp+20h] [ebp-20h] void **v27; // [esp+24h] [ebp-1Ch] int v28; // [esp+28h] [ebp-18h] char v29; // [esp+2Ch] [ebp-14h] void **v30; // [esp+30h] [ebp-10h] int v31; // [esp+34h] [ebp-Ch] char v32; // [esp+38h] [ebp-8h] int v33; // [esp+3Ch] [ebp-4h] v33 = 0; if ( !a1 || !a2 || !a8 || !a9 ) return 0; v10 = *a9 == 0; v20 = a1; HIBYTE(a1) = !v10; v11 = (int (__thiscall ***)(_DWORD, int, void ***, void ***, int, void ***, void ***, void **, char *))*sub_789AA0(&v33, (int)v20); v21 = &CefStringBase::`vftable'; v22 = 0; v23 = 0; if ( a7 ) { v22 = a7; v23 = 0; } v24 = &CefStringBase::`vftable'; v25 = 0; v26 = 0; if ( a6 ) { v25 = a6; v26 = 0; } v27 = &CefStringBase::`vftable'; v28 = 0; v29 = 0; if ( a4 ) { v28 = a4; v29 = 0; } v30 = &CefStringBase::`vftable'; v31 = 0; v32 = 0; if ( a3 ) { v31 = a3; v32 = 0; } v12 = *v11; v20 = (char *)&a1 + 3; v19 = &CefStringBase::`vftable'; sub_7804C0((int *)&v19, a8); v18 = &v21; v17 = &v24; v16 = a5; v15 = &v27; v14 = &v30; v13 = a5; sub_777FD0(&v13, a2); HIBYTE(a8) = (*v12)(v11, v13, v14, v15, v16, v17, v18, v19, v20); sub_405F40(&v30); sub_405F40(&v27); sub_405F40(&v24); sub_405F40(&v21); if ( v33 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v33 + 4) + 4) + v33 + 4) + 4))(); *a9 = HIBYTE(a1) != 0; return HIBYTE(a8); } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007806A0) -------------------------------------------------------- int __thiscall sub_7806A0(void *this, int a2, int a3, int a4, int a5, int a6) { int *v7; // esi int v8; // edi unsigned __int8 v9; // bl void ***v10; // [esp-10h] [ebp-2Ch] void ***v11; // [esp-Ch] [ebp-28h] BOOL v12; // [esp-8h] [ebp-24h] void *v13; // [esp-4h] [ebp-20h] void **v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] char v16; // [esp+14h] [ebp-8h] int v17; // [esp+18h] [ebp-4h] v17 = 0; if ( !a2 || !a3 || !a6 ) return 0; v7 = *(int **)(a2 - 8); if ( v7 ) (**(void (__thiscall ***)(int))((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); v14 = &CefStringBase::`vftable'; v15 = 0; v16 = 0; if ( a4 ) { v15 = a4; v16 = 0; } v8 = *v7; v13 = this; sub_7804C0((int *)&v13, a6); v12 = a5 != 0; v11 = &v14; v10 = &v14; sub_777FD0((int *)&v10, a3); v9 = (*(int (__thiscall **)(int *, void ***, void ***, BOOL, void *))(v8 + 4))(v7, v10, v11, v12, v13); sub_405F40(&v14); (*(void (__thiscall **)(int))(*(int *)((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); return v9; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00780760) -------------------------------------------------------- int __thiscall sub_780760(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_777FD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 8))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (007807D0) -------------------------------------------------------- int __thiscall sub_7807D0(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_777FD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 12))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00780840) -------------------------------------------------------- _DWORD *__thiscall sub_780840(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FD24; this[12] = 0; this[1] = dword_AB91CC; result[3] = result; this[4] = 32; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FD24; this[8] = sub_780560; this[9] = sub_7806A0; this[10] = sub_780760; this[11] = sub_7807D0; return result; } // A0FD24: using guessed type int (*off_A0FD24)[28]; // AB91CC: using guessed type int dword_AB91CC; //----- (007808B0) -------------------------------------------------------- int __thiscall sub_7808B0(char *this, int a2, int a3) { int result; // eax if ( this ) result = (int)(this + 4); else result = 0; *(_DWORD *)result = *(_DWORD *)a2; *(_DWORD *)(result + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(result + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(result + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(result + 16) = *(_DWORD *)(a2 + 16); *(_WORD *)(result + 20) = *(_WORD *)(a2 + 20); *(_WORD *)(result + 22) = *(_WORD *)(a2 + 22); *(_DWORD *)(result + 24) = *(_DWORD *)(a2 + 24); return result; } //----- (00780900) -------------------------------------------------------- int __stdcall sub_780900(int a1, int a2, int a3, int a4, _DWORD *a5) { int result; // eax _DWORD *v6; // eax int (__thiscall ***v7)(_DWORD, bool *, int (__thiscall ***)(void *, char), int, bool *); // esi int (__thiscall **v8)(_DWORD, bool *, int (__thiscall ***)(void *, char), int, bool *); // edi bool *v9; // [esp-10h] [ebp-54h] int (__thiscall ***v10)(void *, char); // [esp-Ch] [ebp-50h] int v11; // [esp-8h] [ebp-4Ch] bool *v12; // [esp-4h] [ebp-48h] int v13; // [esp+Ch] [ebp-38h] int v14; // [esp+10h] [ebp-34h] int v15; // [esp+14h] [ebp-30h] unsigned __int8 v16; // [esp+1Ah] [ebp-2Ah] bool v17; // [esp+1Bh] [ebp-29h] int (__thiscall **v18)(void *, char); // [esp+1Ch] [ebp-28h] int v19; // [esp+20h] [ebp-24h] int v20; // [esp+24h] [ebp-20h] int v21; // [esp+28h] [ebp-1Ch] int v22; // [esp+2Ch] [ebp-18h] int v23; // [esp+30h] [ebp-14h] int v24; // [esp+34h] [ebp-10h] int v25; // [esp+38h] [ebp-Ch] int v26; // [esp+3Ch] [ebp-8h] v13 = a2; v14 = a4; v15 = 0; if ( !a1 || !a2 || !a3 ) return 0; result = 0; if ( a5 ) { v18 = &off_A10358; v19 = 0; v20 = 0; v21 = 0; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; sub_7808B0((char *)&v18, a3, 0); v17 = *a5 != 0; v6 = sub_789AA0(&v15, a1); v7 = (int (__thiscall ***)(_DWORD, bool *, int (__thiscall ***)(void *, char), int, bool *))*v6; v8 = *(int (__thiscall ***)(_DWORD, bool *, int (__thiscall ***)(void *, char), int, bool *))*v6; v12 = &v17; v11 = v14; v10 = &v18; v9 = &v17; sub_777FD0((int *)&v9, v13); v16 = (*v8)(v7, v9, v10, v11, v12); if ( v15 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v15 + 4) + 4) + v15 + 4) + 4))(); *a5 = v17 != 0; result = v16; } return result; } // A10358: using guessed type int (__thiscall *off_A10358)(void *, char); //----- (00780A00) -------------------------------------------------------- int __stdcall sub_780A00(int a1, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi unsigned __int8 v7; // bl int (__thiscall ***v8)(void *, char); // [esp-Ch] [ebp-48h] int (__thiscall ***v9)(void *, char); // [esp-8h] [ebp-44h] int v10; // [esp-4h] [ebp-40h] int v11; // [esp+Ch] [ebp-30h] int v12; // [esp+10h] [ebp-2Ch] int (__thiscall **v13)(void *, char); // [esp+14h] [ebp-28h] int v14; // [esp+18h] [ebp-24h] int v15; // [esp+1Ch] [ebp-20h] int v16; // [esp+20h] [ebp-1Ch] int v17; // [esp+24h] [ebp-18h] int v18; // [esp+28h] [ebp-14h] int v19; // [esp+2Ch] [ebp-10h] int v20; // [esp+30h] [ebp-Ch] int v21; // [esp+34h] [ebp-8h] v12 = a4; v11 = 0; if ( !a1 || !a2 ) return 0; result = 0; if ( a3 ) { v13 = &off_A10358; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; v20 = 0; v21 = 0; sub_7808B0((char *)&v13, a3, 0); v5 = *(int **)(a1 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v10 = v12; v9 = &v13; v8 = &v13; sub_777FD0((int *)&v8, a2); v7 = (*(int (__thiscall **)(int *, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char), int))(v6 + 4))( v5, v8, v9, v10); (*(void (**)(void))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))(); result = v7; } return result; } // A10358: using guessed type int (__thiscall *off_A10358)(void *, char); //----- (00780AE0) -------------------------------------------------------- _DWORD *__thiscall sub_780AE0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAAC; this[10] = 0; this[1] = dword_AB91D0; result[3] = result; this[4] = 24; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAAC; this[8] = sub_780900; this[9] = sub_780A00; return result; } // A0FAAC: using guessed type int (*off_A0FAAC)[28]; // AB91D0: using guessed type int dword_AB91D0; //----- (00780B30) -------------------------------------------------------- int __cdecl sub_780B30(_DWORD *a1, _DWORD *a2) { int v2; // eax int result; // eax if ( a2[16] ) cef_string_list_free(a2[16]); if ( a1[16] ) v2 = cef_string_list_copy(a1[16]); else v2 = 0; a2[16] = v2; *a2 = *a1; a2[1] = a1[1]; a2[2] = a1[2]; a2[3] = a1[3]; a2[4] = a1[4]; a2[5] = a1[5]; a2[6] = a1[6]; a2[7] = a1[7]; a2[8] = a1[8]; a2[9] = a1[9]; a2[10] = a1[10]; a2[11] = a1[11]; a2[12] = a1[12]; a2[13] = a1[13]; a2[14] = a1[14]; result = a1[15]; a2[15] = result; return result; } // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); // 9A5598: using guessed type int __cdecl cef_string_list_copy(_DWORD); //----- (00780BD0) -------------------------------------------------------- int __thiscall sub_780BD0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // eax if ( this ) v3 = this + 1; else v3 = 0; return sub_780B30(a2, v3); } //----- (00780C00) -------------------------------------------------------- int __thiscall sub_780C00(_DWORD *this, const void *a2) { _DWORD *v2; // edi int result; // eax v2 = this; if ( !this[15] ) result = cef_string_utf16_clear(this + 2); v2[15] = a2; qmemcpy(v2 + 1, a2, 0x38u); return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00780C30) -------------------------------------------------------- void *__thiscall sub_780C30(_DWORD *this, char *a2) { _DWORD *v2; // ebx void *result; // eax v2 = this; if ( (char *)this[15] != a2 ) cef_string_utf16_clear(a2 + 4); qmemcpy(a2, v2 + 1, 0x38u); result = memset(v2 + 1, 0, 0x38u); v2[15] = 0; return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00780C80) -------------------------------------------------------- _DWORD *__thiscall sub_780C80(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi v1 = this; v2 = this + 1; *this = &off_A0FABC; memset(this + 1, 0, 0x44u); v1[18] = 0; v2[8] = 1; v2[9] = 1; v2[10] = 1; v2[11] = 1; v2[12] = 1; v2[13] = 1; return v1; } // A0FABC: using guessed type int (__thiscall *off_A0FABC)(void *, char); //----- (00780CC0) -------------------------------------------------------- int __thiscall sub_780CC0(_DWORD *this) { bool v1; // zf int v2; // ecx int result; // eax v1 = this[18] == 0; *this = &off_A0FABC; if ( v1 ) { v2 = this[17]; if ( v2 ) result = cef_string_list_free(v2); } return result; } // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); // A0FABC: using guessed type int (__thiscall *off_A0FABC)(void *, char); //----- (00780CE0) -------------------------------------------------------- int __thiscall sub_780CE0(_DWORD *this, const void *a2) { _DWORD *v2; // edi int result; // eax v2 = this; if ( !this[51] ) { cef_string_utf16_clear(this + 3); cef_string_utf16_clear(v2 + 6); cef_string_utf16_clear(v2 + 9); cef_string_utf16_clear(v2 + 12); cef_string_utf16_clear(v2 + 15); cef_string_utf16_clear(v2 + 18); cef_string_utf16_clear(v2 + 25); result = cef_string_utf16_clear(v2 + 48); } v2[51] = a2; qmemcpy(v2 + 1, a2, 0xC8u); return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00780D50) -------------------------------------------------------- void *__thiscall sub_780D50(_DWORD *this, char *a2) { _DWORD *v2; // ebx _DWORD *v3; // ebx void *result; // eax _DWORD *v5; // [esp+Ch] [ebp-4h] v2 = this; v5 = this; if ( (char *)this[51] != a2 ) { cef_string_utf16_clear(a2 + 8); cef_string_utf16_clear(a2 + 20); cef_string_utf16_clear(a2 + 32); cef_string_utf16_clear(a2 + 44); cef_string_utf16_clear(a2 + 56); cef_string_utf16_clear(a2 + 68); cef_string_utf16_clear(a2 + 96); cef_string_utf16_clear(a2 + 188); } v3 = v2 + 1; qmemcpy(a2, v3, 0xC8u); result = memset(v3, 0, 0xC8u); v5[51] = 0; *v3 = 200; return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); //----- (00780DE0) -------------------------------------------------------- void *__thiscall sub_780DE0(void *this, char a2) { void *v2; // esi bool v3; // zf v2 = this; v3 = *((_DWORD *)this + 18) == 0; *(_DWORD *)this = &off_A0FABC; if ( v3 && *((_DWORD *)this + 17) ) cef_string_list_free(*((_DWORD *)this + 17)); if ( a2 & 1 ) operator delete(v2); return v2; } // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); // A0FABC: using guessed type int (__thiscall *off_A0FABC)(void *, char); //----- (00780E90) -------------------------------------------------------- int __stdcall sub_780E90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8, void *a9, int *a10, char *a11, _DWORD *a12) { void *v13; // ebx char *v14; // edi _DWORD *v15; // esi int v16; // eax int *v17; // eax _DWORD *v18; // eax int (__thiscall ***v19)(_DWORD, int, int, _DWORD *, _DWORD *, int, BOOL, char *, char *, int *, char *, char *); // esi int (__thiscall **v20)(_DWORD, int, int, _DWORD *, _DWORD *, int, BOOL, char *, char *, int *, char *, char *); // edi int v21; // ecx char *v22; // ecx int v23; // eax int v24; // [esp-2Ch] [ebp-1B4h] int v25; // [esp-28h] [ebp-1B0h] _DWORD *v26; // [esp-24h] [ebp-1ACh] _DWORD *v27; // [esp-20h] [ebp-1A8h] int v28; // [esp-1Ch] [ebp-1A4h] BOOL v29; // [esp-18h] [ebp-1A0h] char *v30; // [esp-14h] [ebp-19Ch] char *v31; // [esp-10h] [ebp-198h] int *v32; // [esp-Ch] [ebp-194h] char *v33; // [esp-8h] [ebp-190h] char *v34; // [esp-4h] [ebp-18Ch] char v35; // [esp+Ch] [ebp-17Ch] char v36; // [esp+DCh] [ebp-ACh] char v37; // [esp+128h] [ebp-60h] char v38; // [esp+168h] [ebp-20h] char v39; // [esp+174h] [ebp-14h] int v40; // [esp+180h] [ebp-8h] int v41; // [esp+184h] [ebp-4h] v40 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; if ( !a8 ) return 0; v13 = a9; if ( !a9 ) return 0; if ( !a10 ) return 0; v14 = a11; if ( !a11 ) return 0; v15 = a12; if ( !a12 ) return 0; sub_780C80(&v36); sub_780BD0(&v36, a8, 0); sub_405EF0(&v37); sub_780C00(&v37, v13); v16 = *a10; v41 = 0; if ( v16 ) { v17 = sub_777610(&a8, v16); sub_77D540(&v41, v17); sub_407820((int *)&a8); } v40 = v41; sub_405E00(&v35); sub_780CE0(&v35, v14); HIBYTE(a9) = *v15 != 0; v18 = sub_789AA0(&a1, a1); v19 = (int (__thiscall ***)(_DWORD, int, int, _DWORD *, _DWORD *, int, BOOL, char *, char *, int *, char *, char *))*v18; v20 = *(int (__thiscall ***)(_DWORD, int, int, _DWORD *, _DWORD *, int, BOOL, char *, char *, int *, char *, char *))*v18; v34 = (char *)&a9 + 3; v33 = &v35; v32 = &v41; v31 = &v37; v30 = &v36; v29 = a7 != 0; v28 = a6; v27 = sub_405FD0(&v39, a5); v26 = sub_405FD0(&v38, a4); v25 = v21; sub_77A7F0(&v25, a3); sub_777FD0(&v24, a2); HIBYTE(a8) = (*v20)(v19, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); sub_405F40(&v38); sub_405F40(&v39); sub_407820(&a1); sub_780C30(&v37, (char *)v13); if ( v41 ) { if ( v41 != v40 ) { v34 = v22; sub_782230((int *)&v34, &v41); v23 = sub_777400((int)v34); *a10 = v23; } } else { *a10 = 0; } sub_780D50(&v35, a11); *a12 = HIBYTE(a9) != 0; sub_405E40(&v35); sub_407820(&v41); sub_405F20(&v37); sub_780CC0(&v36); return HIBYTE(a8); } // 777400: using guessed type int __cdecl sub_777400(int); //----- (00781090) -------------------------------------------------------- int __thiscall sub_781090(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_777FD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 4))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00781100) -------------------------------------------------------- int __thiscall sub_781100(void *this, int a2, int a3) { int *v4; // esi int v5; // edi unsigned __int8 v6; // bl void *v7; // [esp-4h] [ebp-14h] int v8; // [esp+Ch] [ebp-4h] v8 = 0; if ( !a2 || !a3 ) return 0; v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = this; sub_777FD0((int *)&v7, a3); v6 = (*(int (__thiscall **)(int *, void *))(v5 + 8))(v4, v7); (*(void (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); return v6; } //----- (00781180) -------------------------------------------------------- int __thiscall sub_781180(void *this, int a2, int a3) { int *v4; // esi int v5; // edi unsigned __int8 v6; // bl void *v7; // [esp-4h] [ebp-14h] int v8; // [esp+Ch] [ebp-4h] v8 = 0; if ( !a2 || !a3 ) return 0; v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = this; sub_777FD0((int *)&v7, a3); v6 = (*(int (__thiscall **)(int *, void *))(v5 + 12))(v4, v7); (*(void (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); return v6; } //----- (00781200) -------------------------------------------------------- int __thiscall sub_781200(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_777FD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 16))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00781270) -------------------------------------------------------- _DWORD *__thiscall sub_781270(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAC0; this[13] = 0; this[1] = dword_AB91D4; result[3] = result; this[4] = 36; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAC0; this[8] = sub_780E90; this[9] = sub_781090; this[10] = sub_781100; this[11] = sub_781180; this[12] = sub_781200; return result; } // A0FAC0: using guessed type int (*off_A0FAC0)[28]; // AB91D4: using guessed type int dword_AB91D4; //----- (007812D0) -------------------------------------------------------- int __thiscall sub_7812D0(_DWORD *this) { return (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(this[2] + 4) + 4) + this[2] + 4) + 8))(); } //----- (007812F0) -------------------------------------------------------- int __stdcall sub_7812F0(int a1, int a2, int a3, int a4, int a5) { int result; // eax int v6; // esi void (__thiscall **v7)(int, BOOL, BOOL, BOOL, BOOL); // edi BOOL v8; // [esp-10h] [ebp-20h] BOOL v9; // [esp-Ch] [ebp-1Ch] BOOL v10; // [esp-8h] [ebp-18h] BOOL v11; // [esp-4h] [ebp-14h] int v12; // [esp+Ch] [ebp-4h] result = a1; v12 = 0; if ( a1 && a2 ) { v6 = *(_DWORD *)(a1 - 8); if ( v6 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); v7 = *(void (__thiscall ***)(int, BOOL, BOOL, BOOL, BOOL))v6; v11 = a5 != 0; v10 = a4 != 0; v9 = a3 != 0; v8 = a4 != 0; sub_777FD0(&v8, a2); (*v7)(v6, v8, v9, v10, v11); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } return result; } //----- (00781380) -------------------------------------------------------- int __thiscall sub_781380(void *this, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi int v7; // [esp-8h] [ebp-18h] void *v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 && a4 ) { v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v8 = this; sub_77A7F0((int *)&v8, a4); sub_777FD0(&v7, a3); (*(void (__thiscall **)(int *, int, void *))(v6 + 4))(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (00781400) -------------------------------------------------------- int __stdcall sub_781400(int a1, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi int v7; // [esp-Ch] [ebp-1Ch] int v8; // [esp-8h] [ebp-18h] int v9; // [esp-4h] [ebp-14h] int v10; // [esp+Ch] [ebp-4h] result = a1; v10 = 0; if ( a1 && a2 && a3 ) { v5 = *(int **)(a1 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v9 = a4; v8 = a4; sub_77A7F0(&v8, a3); sub_777FD0(&v7, a2); (*(void (__thiscall **)(int *, int, int, int))(v6 + 8))(v5, v7, v8, v9); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (00781480) -------------------------------------------------------- int __stdcall sub_781480(int a1, int a2, int a3, int a4, int a5, int a6) { int result; // eax int v7; // edi int *v8; // esi int v9; // edi int v10; // [esp-14h] [ebp-3Ch] void ***v11; // [esp-10h] [ebp-38h] int v12; // [esp-Ch] [ebp-34h] void ***v13; // [esp-8h] [ebp-30h] void ***v14; // [esp-4h] [ebp-2Ch] void **v15; // [esp+Ch] [ebp-1Ch] int v16; // [esp+10h] [ebp-18h] char v17; // [esp+14h] [ebp-14h] void **v18; // [esp+18h] [ebp-10h] int v19; // [esp+1Ch] [ebp-Ch] char v20; // [esp+20h] [ebp-8h] int v21; // [esp+24h] [ebp-4h] result = a1; v21 = 0; if ( a1 ) { if ( a2 ) { if ( a3 ) { v7 = a6; if ( a6 ) { v8 = (int *)*sub_789AA0(&a1, a1); v15 = &CefStringBase::`vftable'; v18 = &CefStringBase::`vftable'; v16 = v7; v17 = 0; v19 = 0; v20 = 0; if ( a5 ) { v19 = a5; v20 = 0; } v9 = *v8; v14 = &v15; v13 = &v18; v12 = a4; v11 = &v15; sub_77A7F0((int *)&v11, a3); sub_777FD0(&v10, a2); (*(void (__thiscall **)(int *, int, void ***, int, void ***, void ***))(v9 + 12))(v8, v10, v11, v12, v13, v14); sub_405F40(&v18); sub_405F40(&v15); result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); } } } } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00781550) -------------------------------------------------------- _DWORD *__thiscall sub_781550(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FD24; this[12] = 0; this[1] = dword_AB91D8; result[3] = result; this[4] = 32; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FD24; this[8] = sub_7812F0; this[9] = sub_781380; this[10] = sub_781400; this[11] = sub_781480; return result; } // A0FD24: using guessed type int (*off_A0FD24)[28]; // AB91D8: using guessed type int dword_AB91D8; //----- (007815B0) -------------------------------------------------------- int __thiscall sub_7815B0(char *this, int a2, int a3) { int result; // eax if ( this ) result = (int)(this + 4); else result = 0; *(_DWORD *)result = *(_DWORD *)a2; *(_DWORD *)(result + 4) = *(_DWORD *)(a2 + 4); *(float *)(result + 8) = *(float *)(a2 + 8); *(_DWORD *)(result + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(result + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(result + 20) = *(_DWORD *)(a2 + 20); return result; } //----- (007815F0) -------------------------------------------------------- void *__thiscall sub_7815F0(char *this, void *a2) { char *v2; // ebx const void *v3; // esi void *v4; // eax void *result; // eax v2 = this; if ( this ) v3 = this + 4; else v3 = 0; qmemcpy(a2, v3, 0x30u); if ( this ) v4 = this + 4; else v4 = 0; result = memset(v4, 0, 0x30u); *((_DWORD *)v2 + 13) = 0; return result; } //----- (00781640) -------------------------------------------------------- _DWORD *__cdecl sub_781640(int a1, int a2, _DWORD *a3) { _DWORD *result; // eax int i; // esi _DWORD *v5; // edx result = a3; for ( i = a1; i != a2; result += 6 ) { if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; result[4] = 0; result[5] = 0; if ( i ) v5 = (_DWORD *)(i + 4); else v5 = 0; result[1] = *v5; result[2] = v5[1]; result[3] = v5[2]; result[4] = v5[3]; *result = &off_A0FAD0; } i += 24; } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (007816B0) -------------------------------------------------------- int __thiscall sub_7816B0(void **this) { void **v1; // ebx void (__thiscall ***v2)(_DWORD, _DWORD); // esi void (__thiscall ***i)(_DWORD, _DWORD); // edi int result; // eax v1 = this; v2 = (void (__thiscall ***)(_DWORD, _DWORD))*this; if ( *this ) { for ( i = (void (__thiscall ***)(_DWORD, _DWORD))this[1]; v2 != i; v2 += 6 ) (**v2)(v2, 0); operator delete(*v1); } result = 0; *v1 = 0; v1[1] = 0; v1[2] = 0; return result; } //----- (007816F0) -------------------------------------------------------- unsigned int __thiscall sub_7816F0(int *this, unsigned int a2) { int *v2; // esi unsigned int result; // eax _DWORD *v4; // edi _DWORD *v5; // eax int v6; // edx int v7; // ecx unsigned int v8; // edx int v9; // ebx void (__thiscall ***i)(_DWORD, _DWORD); // edi int (__thiscall **v11)(void *, char); // [esp+8h] [ebp-Ch] void (__thiscall ***v12)(_DWORD, _DWORD); // [esp+Ch] [ebp-8h] _DWORD *v13; // [esp+10h] [ebp-4h] v2 = this; if ( a2 > 0xAAAAAAA ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 24; if ( result < a2 ) { v4 = 0; v13 = 0; if ( a2 ) { v5 = operator new(24 * a2); v13 = v5; if ( !v5 ) { v12 = 0; v11 = &off_A0F3E0; sub_777390(&v11); } v4 = v5; } sub_781640(*v2, v2[1], v4); v6 = v2[1]; v7 = *v2; v12 = (void (__thiscall ***)(_DWORD, _DWORD))v6; v8 = (signed int)((unsigned __int64)(715827883i64 * (v6 - v7)) >> 32) >> 2; v9 = v8 + (v8 >> 31); if ( v7 ) { for ( i = (void (__thiscall ***)(_DWORD, _DWORD))v7; i != v12; i += 6 ) (**i)(i, 0); operator delete((void *)*v2); v4 = v13; } result = 3 * v9; *v2 = (int)v4; v2[2] = (int)&v4[6 * a2]; v2[1] = (int)&v4[6 * v9]; } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (007817F0) -------------------------------------------------------- unsigned int __thiscall sub_7817F0(int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax unsigned int v5; // eax v2 = (this[1] - *this) / 24; if ( 178956970 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (this[2] - *this) / 24; if ( v3 > result ) { if ( 178956970 - (result >> 1) >= result ) v5 = (result >> 1) + result; else v5 = 0; if ( v5 < v3 ) v5 = v3; result = sub_7816F0(this, v5); } return result; } //----- (007818B0) -------------------------------------------------------- _DWORD *__thiscall sub_7818B0(int *this, unsigned int a2) { int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi int v6; // edx _DWORD *result; // eax _DWORD *v8; // ecx v2 = this; v3 = this[1]; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_7817F0(v2, 1); result = (_DWORD *)v2[1]; v8 = 0; if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; result[4] = 0; result[5] = 0; if ( a2 ) v8 = (_DWORD *)(a2 + 4); goto LABEL_13; } } else { v4 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(a2 - *v2)) >> 32) >> 2; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_7817F0(v2, 1); v6 = *v2 + 24 * v5; result = (_DWORD *)v2[1]; v8 = 0; if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; result[4] = 0; result[5] = 0; if ( v6 ) v8 = (_DWORD *)(v6 + 4); LABEL_13: result[1] = *v8; result[2] = v8[1]; result[3] = v8[2]; result[4] = v8[3]; *result = &off_A0FAD0; goto LABEL_14; } } LABEL_14: v2[1] += 24; return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781980) -------------------------------------------------------- int __stdcall sub_781980(int a1, int a2, int *a3) { int v4; // edi int v5; // edx int (__thiscall **v6)(int, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char)); // ebx int v7; // edx int v8; // eax int v9; // ecx int (__thiscall ***v10)(void *, char); // [esp-8h] [ebp-38h] int (__thiscall ***v11)(void *, char); // [esp-4h] [ebp-34h] int v12; // [esp+Ch] [ebp-24h] int v13; // [esp+10h] [ebp-20h] int (__thiscall **v14)(void *, char); // [esp+14h] [ebp-1Ch] int v15; // [esp+18h] [ebp-18h] int v16; // [esp+1Ch] [ebp-14h] int v17; // [esp+20h] [ebp-10h] int v18; // [esp+24h] [ebp-Ch] int v19; // [esp+28h] [ebp-8h] v13 = a2; v12 = 0; if ( !a1 || !a2 || !a3 ) return 0; v4 = *(_DWORD *)(a1 - 8); v15 = *a3; v16 = a3[1]; v17 = a3[2]; v5 = a3[3]; v19 = 0; v18 = v5; v14 = &off_A0FAD0; if ( v4 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v6 = *(int (__thiscall ***)(int, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char)))v4; v11 = &v14; v10 = &v14; sub_777FD0((int *)&v10, v13); LOBYTE(v6) = (*v6)(v4, v10, v11); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v7 = v16; v8 = v17; *a3 = v15; v9 = v18; a3[1] = v7; a3[2] = v8; a3[3] = v9; return (unsigned __int8)v6; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781A70) -------------------------------------------------------- int __stdcall sub_781A70(int a1, int a2, int *a3) { int *v4; // edi int v5; // edx int v6; // ebx int v7; // edx int v8; // eax int v9; // ecx int (__thiscall ***v10)(void *, char); // [esp-8h] [ebp-38h] int (__thiscall ***v11)(void *, char); // [esp-4h] [ebp-34h] int v12; // [esp+Ch] [ebp-24h] int v13; // [esp+10h] [ebp-20h] int (__thiscall **v14)(void *, char); // [esp+14h] [ebp-1Ch] int v15; // [esp+18h] [ebp-18h] int v16; // [esp+1Ch] [ebp-14h] int v17; // [esp+20h] [ebp-10h] int v18; // [esp+24h] [ebp-Ch] int v19; // [esp+28h] [ebp-8h] v13 = a2; v12 = 0; if ( !a1 || !a2 || !a3 ) return 0; v4 = *(int **)(a1 - 8); v15 = *a3; v16 = a3[1]; v17 = a3[2]; v5 = a3[3]; v19 = 0; v18 = v5; v14 = &off_A0FAD0; if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v6 = *v4; v11 = &v14; v10 = &v14; sub_777FD0((int *)&v10, v13); LOBYTE(v6) = (*(int (__thiscall **)(int *, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char)))(v6 + 4))( v4, v10, v11); (*(void (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v7 = v16; v8 = v17; *a3 = v15; v9 = v18; a3[1] = v7; a3[2] = v8; a3[3] = v9; return (unsigned __int8)v6; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781B60) -------------------------------------------------------- int __stdcall sub_781B60(int a1, int a2, int a3, int a4, int *a5, _DWORD *a6) { int v6; // ecx _DWORD *v8; // ebx _DWORD *v9; // edx int **v10; // eax int *v11; // edi int v12; // esi _DWORD *v13; // eax int v14; // [esp-14h] [ebp-24h] int v15; // [esp-10h] [ebp-20h] int v16; // [esp-Ch] [ebp-1Ch] int *v17; // [esp-8h] [ebp-18h] _DWORD **v18; // [esp-4h] [ebp-14h] int v19; // [esp+Ch] [ebp-4h] v19 = 0; v6 = a1; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a5 ) return 0; v8 = a6; if ( !a6 ) return 0; v9 = (_DWORD *)*a6; a1 = *a5; a6 = v9; v10 = (int **)sub_789AA0(&v19, v6); v11 = *v10; v12 = **v10; v18 = &a6; v17 = &a1; v16 = a4; v15 = a3; v14 = a3; sub_777FD0(&v14, a2); HIBYTE(a2) = (*(int (__thiscall **)(int *, int, int, int, int *, _DWORD **))(v12 + 8))(v11, v14, v15, v16, v17, v18); if ( v19 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v19 + 4) + 4) + v19 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v19 + 4) + 4) + v19 + 4); v13 = a6; *a5 = a1; *v8 = v13; return HIBYTE(a2); } //----- (00781C10) -------------------------------------------------------- int __stdcall sub_781C10(int a1, int a2, void *a3) { int *v4; // esi int v5; // edi int (__thiscall ***v6)(void *, char); // [esp-8h] [ebp-60h] int (__thiscall ***v7)(void *, char); // [esp-4h] [ebp-5Ch] int v8; // [esp+Ch] [ebp-4Ch] int v9; // [esp+10h] [ebp-48h] int v10; // [esp+14h] [ebp-44h] unsigned __int8 v11; // [esp+1Bh] [ebp-3Dh] int (__thiscall **v12)(void *, char); // [esp+1Ch] [ebp-3Ch] char v13; // [esp+20h] [ebp-38h] void *v14; // [esp+50h] [ebp-8h] v9 = a1; v10 = a2; v8 = 0; if ( !a1 || !a2 || !a3 ) return 0; v12 = &off_A0FAD0; v14 = a3; qmemcpy(&v13, a3, 0x30u); v4 = *(int **)(v9 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = &v12; v6 = &v12; sub_777FD0((int *)&v6, v10); v11 = (*(int (__thiscall **)(int *, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char)))(v5 + 12))( v4, v6, v7); (*(void (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); sub_7815F0((char *)&v12, a3); return v11; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781CF0) -------------------------------------------------------- int __thiscall sub_781CF0(void *this, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi void *v7; // [esp-8h] [ebp-18h] BOOL v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 ) { v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; LOBYTE(this) = a4 != 0; v8 = a4 != 0; v7 = this; sub_777FD0((int *)&v7, a3); (*(void (__thiscall **)(int *, void *, BOOL))(v6 + 16))(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (00781D70) -------------------------------------------------------- int __stdcall sub_781D70(int a1, int a2, int *a3) { int result; // eax int v4; // ecx int *v5; // esi int v6; // edi int (__thiscall ***v7)(void *, char); // [esp-8h] [ebp-34h] int (__thiscall ***v8)(void *, char); // [esp-4h] [ebp-30h] int v9; // [esp+Ch] [ebp-20h] int (__thiscall **v10)(void *, char); // [esp+10h] [ebp-1Ch] int v11; // [esp+14h] [ebp-18h] int v12; // [esp+18h] [ebp-14h] int v13; // [esp+1Ch] [ebp-10h] int v14; // [esp+20h] [ebp-Ch] int v15; // [esp+24h] [ebp-8h] result = 0; v9 = 0; if ( a1 && a2 && a3 ) { v11 = *a3; v12 = a3[1]; v4 = a3[3]; v13 = a3[2]; v5 = *(int **)(a1 - 8); v15 = 0; v14 = v4; v10 = &off_A0FAD0; if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v8 = &v10; v7 = &v10; sub_777FD0((int *)&v7, a2); (*(void (__thiscall **)(int *, int (__thiscall ***)(void *, char), int (__thiscall ***)(void *, char)))(v6 + 20))( v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781E30) -------------------------------------------------------- int __stdcall sub_781E30(int a1, int a2, int a3, unsigned int a4, int *a5, int a6, int a7, int a8) { int result; // eax unsigned int v9; // edi int *v10; // esi int v11; // ecx int v12; // edx int v13; // eax int v14; // eax int *v15; // esi int v16; // edi int *v17; // [esp-18h] [ebp-60h] int v18; // [esp-14h] [ebp-5Ch] int *v19; // [esp-10h] [ebp-58h] int v20; // [esp-Ch] [ebp-54h] int v21; // [esp-8h] [ebp-50h] int v22; // [esp-4h] [ebp-4Ch] int v23; // [esp+Ch] [ebp-3Ch] int v24; // [esp+10h] [ebp-38h] int v25; // [esp+14h] [ebp-34h] int v26; // [esp+18h] [ebp-30h] int v27; // [esp+20h] [ebp-28h] int v28; // [esp+24h] [ebp-24h] int v29; // [esp+28h] [ebp-20h] int (__thiscall **v30)(void *, char); // [esp+2Ch] [ebp-1Ch] int v31; // [esp+30h] [ebp-18h] int v32; // [esp+34h] [ebp-14h] int v33; // [esp+38h] [ebp-10h] int v34; // [esp+3Ch] [ebp-Ch] int v35; // [esp+40h] [ebp-8h] result = a1; v28 = a1; v29 = a2; v27 = a6; v23 = 0; if ( a1 ) { if ( a2 ) { v9 = a4; v10 = a5; if ( a4 <= 0 || a5 ) { if ( a6 ) { v24 = 0; v25 = 0; v26 = 0; if ( a4 > 0 ) { do { v11 = v10[1]; v12 = v10[2]; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v13 = *v10; v32 = v11; v31 = v13; v14 = v10[3]; v35 = 0; v33 = v12; v34 = v14; v30 = &off_A0FAD0; sub_7818B0(&v24, (unsigned int)&v30); v10 += 4; --v9; } while ( v9 ); result = v28; } v15 = *(int **)(result - 8); if ( v15 ) (**(void (__thiscall ***)(int))((char *)v15 + *(_DWORD *)(v15[1] + 4) + 4))((int)v15 + *(_DWORD *)(v15[1] + 4) + 4); v16 = *v15; v22 = a8; v21 = a7; v20 = v27; v19 = &v24; v18 = a3; v17 = &v24; sub_777FD0((int *)&v17, v29); (*(void (__thiscall **)(int *, int *, int, int *, int, int, int))(v16 + 24))( v15, v17, v18, v19, v20, v21, v22); (*(void (__thiscall **)(int))(*(int *)((char *)v15 + *(_DWORD *)(v15[1] + 4) + 4) + 4))((int)v15 + *(_DWORD *)(v15[1] + 4) + 4); result = sub_7816B0((void **)&v24); } } } } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00781F50) -------------------------------------------------------- int __stdcall sub_781F50(int a1, int a2, int a3, int a4, int a5) { int *v5; // esi int v6; // edi int result; // eax int (__thiscall ***v8)(void *, char); // [esp-10h] [ebp-40h] int v9; // [esp-Ch] [ebp-3Ch] int v10; // [esp-8h] [ebp-38h] int (__thiscall ***v11)(void *, char); // [esp-4h] [ebp-34h] int (__thiscall **v12)(void *, char); // [esp+Ch] [ebp-24h] int v13; // [esp+10h] [ebp-20h] int v14; // [esp+14h] [ebp-1Ch] int v15; // [esp+18h] [ebp-18h] int v16; // [esp+1Ch] [ebp-14h] int v17; // [esp+20h] [ebp-10h] int v18; // [esp+24h] [ebp-Ch] int v19; // [esp+28h] [ebp-8h] int v20; // [esp+2Ch] [ebp-4h] v20 = 0; if ( a1 && a2 && a5 ) { v12 = &off_A0FAD0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; v17 = 0; v18 = 0; v19 = 0; sub_7815B0((char *)&v12, a5, 0); v5 = *(int **)(a1 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v11 = &v12; v10 = a4; v9 = a3; v8 = &v12; sub_777FD0((int *)&v8, a2); (*(void (__thiscall **)(int *, int (__thiscall ***)(void *, char), int, int, int (__thiscall ***)(void *, char)))(v6 + 28))( v5, v8, v9, v10, v11); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (00782000) -------------------------------------------------------- int __stdcall sub_782000(int a1, int a2, int a3, int a4, int a5, int a6) { int *v7; // esi int v8; // edi unsigned __int8 v9; // bl int v10; // [esp-14h] [ebp-24h] int v11; // [esp-10h] [ebp-20h] int v12; // [esp-Ch] [ebp-1Ch] int v13; // [esp-8h] [ebp-18h] int v14; // [esp-4h] [ebp-14h] int v15; // [esp+Ch] [ebp-4h] v15 = 0; if ( !a1 || !a2 || !a3 ) return 0; v7 = *(int **)(a1 - 8); if ( v7 ) (**(void (__thiscall ***)(int))((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); v8 = *v7; v14 = a6; v13 = a5; v12 = a4; v11 = a6; sub_77C9F0(&v11, a3); sub_777FD0(&v10, a2); v9 = (*(int (__thiscall **)(int *, int, int, int, int, int))(v8 + 32))(v7, v10, v11, v12, v13, v14); (*(void (__thiscall **)(int))(*(int *)((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); return v9; } //----- (007820A0) -------------------------------------------------------- int __stdcall sub_7820A0(int a1, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi int v6; // [esp-8h] [ebp-18h] int v7; // [esp-4h] [ebp-14h] int v8; // [esp+Ch] [ebp-4h] result = a1; v8 = 0; if ( a1 && a2 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = a3; v6 = a3; sub_777FD0(&v6, a2); (*(void (__thiscall **)(int *, int, int))(v5 + 36))(v4, v6, v7); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00782110) -------------------------------------------------------- int __stdcall sub_782110(int a1, int a2, double a3, double a4) { int result; // eax int *v5; // esi int v6; // edi int v7; // [esp-4h] [ebp-24h] double v8; // [esp+0h] [ebp-20h] double v9; // [esp+8h] [ebp-18h] int v10; // [esp+1Ch] [ebp-4h] result = a1; v10 = 0; if ( a1 && a2 ) { v5 = *(int **)(a1 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v9 = a4; v8 = a3; sub_777FD0(&v7, a2); (*(void (__thiscall **)(int *, int, _DWORD, _DWORD, _DWORD, _DWORD))(v6 + 40))( v5, v7, LODWORD(v8), HIDWORD(v8), LODWORD(v9), HIDWORD(v9)); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (00782190) -------------------------------------------------------- _DWORD *__thiscall sub_782190(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; *this = &off_A0FAD4; this[19] = 0; v2 = this + 4; this[1] = dword_AB91DC; v1[3] = v1; memset(this + 4, 0, 0x3Cu); *v2 = 60; v2[1] = sub_789AE0; v2[2] = sub_77FFB0; v2[3] = sub_78ABD0; *v1 = &off_A0FAD4; v1[8] = sub_781980; v1[9] = sub_781A70; v1[10] = sub_781B60; v1[11] = sub_781C10; v1[12] = sub_781CF0; v1[13] = sub_781D70; v1[14] = sub_781E30; v1[15] = sub_781F50; v1[16] = sub_782000; v1[17] = sub_7820A0; v1[18] = sub_782110; return v1; } // A0FAD4: using guessed type int (*off_A0FAD4)[12]; // AB91DC: using guessed type int dword_AB91DC; //----- (00782230) -------------------------------------------------------- int *__thiscall sub_782230(int *this, int *a2) { int v2; // eax int *v3; // esi v2 = *a2; v3 = this; *this = *a2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return v3; } //----- (00782260) -------------------------------------------------------- int __cdecl sub_782260(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x2Cu); if ( v2 ) v3 = sub_789CA0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007822C0) -------------------------------------------------------- _DWORD *__thiscall sub_7822C0(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A1029C; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A0FAF4; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FAF4: using guessed type int (*off_A0FAF4)[4]; // A1029C: using guessed type int (*off_A1029C[16])(); //----- (00782350) -------------------------------------------------------- int *__cdecl sub_782350(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789CF0(v3 + 2, 1); else v4 = 0; v5 = dword_AB924C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB924C: using guessed type int dword_AB924C; //----- (007823F0) -------------------------------------------------------- int *__cdecl sub_7823F0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789E20(v3 + 2, 1); else v4 = 0; v5 = dword_AB9250; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9250: using guessed type int dword_AB9250; //----- (00782490) -------------------------------------------------------- int *__cdecl sub_782490(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_789EC0(v3 + 2, 1); else v4 = 0; v5 = dword_AB9254; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9254: using guessed type int dword_AB9254; //----- (007825A0) -------------------------------------------------------- int *__cdecl sub_7825A0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78A230(v3 + 2, 1); else v4 = 0; v5 = dword_AB9258; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9258: using guessed type int dword_AB9258; //----- (007826D0) -------------------------------------------------------- int __stdcall sub_7826D0(int a1, int a2, int a3, int a4, int a5) { int v6; // ebx _DWORD *v7; // eax int (__thiscall ***v8)(_DWORD, int, int, int, BOOL); // esi int (__thiscall **v9)(_DWORD, int, int, int, BOOL); // edi int v10; // ecx unsigned __int8 v11; // bl int v12; // [esp-10h] [ebp-20h] int v13; // [esp-Ch] [ebp-1Ch] int v14; // [esp-8h] [ebp-18h] BOOL v15; // [esp-4h] [ebp-14h] int v16; // [esp+Ch] [ebp-4h] v16 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; v6 = a4; if ( !a4 ) return 0; v7 = sub_789AA0(&a1, a1); v8 = (int (__thiscall ***)(_DWORD, int, int, int, BOOL))*v7; v9 = *(int (__thiscall ***)(_DWORD, int, int, int, BOOL))*v7; LOBYTE(v10) = a5 != 0; v15 = a5 != 0; v14 = v10; sub_77D2F0(&v14, v6); sub_77A7F0(&v13, a3); sub_777FD0(&v12, a2); v11 = (*v9)(v8, v12, v13, v14, v15); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v11; } //----- (00782780) -------------------------------------------------------- int __stdcall sub_782780(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // ebx int v8; // edi int *v9; // esi int v10; // edi unsigned __int8 v11; // bl int v12; // [esp-14h] [ebp-30h] void ***v13; // [esp-10h] [ebp-2Ch] void ***v14; // [esp-Ch] [ebp-28h] int v15; // [esp-8h] [ebp-24h] BOOL v16; // [esp-4h] [ebp-20h] void **v17; // [esp+Ch] [ebp-10h] int v18; // [esp+10h] [ebp-Ch] char v19; // [esp+14h] [ebp-8h] int v20; // [esp+18h] [ebp-4h] v20 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; v7 = a3; if ( !a3 ) return 0; v8 = a4; if ( !a4 ) return 0; v9 = (int *)*sub_789AA0(&a1, a1); v17 = &CefStringBase::`vftable'; v16 = a6 != 0; v15 = a5; v14 = &v17; v13 = &v17; v12 = v7; v18 = v8; v19 = 0; v10 = *v9; sub_77A7F0((int *)&v13, v7); sub_777FD0(&v12, a2); v11 = (*(int (__thiscall **)(int *, int, void ***, void ***, int, BOOL))(v10 + 4))(v9, v12, v13, v14, v15, v16); sub_405F40(&v17); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v11; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00782840) -------------------------------------------------------- signed int __stdcall sub_782840(int a1, int a2, int a3, int a4, int a5) { int v6; // ebx int **v7; // eax int *v8; // edi int v9; // esi int v10; // esi int v11; // [esp-10h] [ebp-20h] int v12; // [esp-Ch] [ebp-1Ch] int v13; // [esp-8h] [ebp-18h] int v14; // [esp-4h] [ebp-14h] int v15; // [esp+Ch] [ebp-4h] v15 = 0; if ( !a1 ) return 1; if ( !a2 ) return 1; if ( !a3 ) return 1; if ( !a4 ) return 1; v6 = a5; if ( !a5 ) return 1; v7 = (int **)sub_789AA0(&a1, a1); v8 = *v7; v9 = **v7; sub_7823F0(&v14, v6); sub_77D2F0(&v13, a4); sub_77A7F0(&v12, a3); sub_777FD0(&v11, a2); v10 = (*(int (__thiscall **)(int *, int, int, int, int))(v9 + 8))(v8, v11, v12, v13, v14); sub_407820(&a1); return v10; } //----- (007828F0) -------------------------------------------------------- int __stdcall sub_7828F0(int a1, int a2, int a3, int a4) { int v5; // ebx int **v6; // eax int *v7; // edi int v8; // esi int v9; // esi int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] int v12; // [esp-4h] [ebp-14h] int v13; // [esp+Ch] [ebp-4h] v13 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; v5 = a4; if ( !a4 ) return 0; v6 = (int **)sub_789AA0(&a4, a1); v7 = *v6; v8 = **v6; sub_77D2F0(&v12, v5); sub_77A7F0(&v11, a3); sub_777FD0(&v10, a2); (*(void (__thiscall **)(int *, int *, int, int, int))(v8 + 12))(v7, &a1, v10, v11, v12); if ( a4 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4); v12 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, v12); v9 = sub_77D260(v12); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v9; } //----- (007829E0) -------------------------------------------------------- void __stdcall sub_7829E0(int a1, int a2, int a3, int a4, int a5) { int v5; // esi int v6; // ebx int **v7; // eax int *v8; // edi int v9; // esi int v10; // [esp-10h] [ebp-2Ch] int v11; // [esp-Ch] [ebp-28h] char *v12; // [esp-8h] [ebp-24h] char *v13; // [esp-4h] [ebp-20h] char v14; // [esp+Ch] [ebp-10h] int v15; // [esp+18h] [ebp-4h] v5 = a1; v15 = 0; if ( a1 ) { if ( a2 ) { if ( a3 ) { v6 = a4; if ( a4 ) { if ( a5 ) { sub_405FD0(&v14, a5); v7 = (int **)sub_789AA0(&a1, v5); v8 = *v7; v9 = **v7; v13 = &v14; v12 = &v14; sub_77D2F0((int *)&v12, v6); sub_77A7F0(&v11, a3); sub_777FD0(&v10, a2); (*(void (__thiscall **)(int *, int, int, char *, char *))(v9 + 16))(v8, v10, v11, v12, v13); sub_407820(&a1); sub_405F40(&v14); } } } } } } //----- (00782A80) -------------------------------------------------------- int __stdcall sub_782A80(int a1, int a2, int a3, int a4, int a5) { int v6; // ebx int **v7; // eax int *v8; // edi int v9; // esi unsigned __int8 v10; // bl int v11; // [esp-10h] [ebp-20h] int v12; // [esp-Ch] [ebp-1Ch] int v13; // [esp-8h] [ebp-18h] int v14; // [esp-4h] [ebp-14h] int v15; // [esp+Ch] [ebp-4h] v15 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; if ( !a4 ) return 0; v6 = a5; if ( !a5 ) return 0; v7 = (int **)sub_789AA0(&a1, a1); v8 = *v7; v9 = **v7; sub_782490(&v14, v6); sub_77D2F0(&v13, a4); sub_77A7F0(&v12, a3); sub_777FD0(&v11, a2); v10 = (*(int (__thiscall **)(int *, int, int, int, int))(v9 + 20))(v8, v11, v12, v13, v14); sub_407820(&a1); return v10; } //----- (00782B20) -------------------------------------------------------- int __stdcall sub_782B20(int a1, int a2, int a3, int a4, int a5) { int v6; // ebx int **v7; // eax int *v8; // edi int v9; // esi int v10; // ecx int v11; // esi int v12; // [esp-10h] [ebp-20h] int v13; // [esp-Ch] [ebp-1Ch] int v14; // [esp-8h] [ebp-18h] int v15; // [esp-4h] [ebp-14h] int v16; // [esp+Ch] [ebp-4h] v16 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; if ( !a4 ) return 0; v6 = a5; if ( !a5 ) return 0; v7 = (int **)sub_789AA0(&a5, a1); v8 = *v7; v9 = **v7; sub_782490(&v15, v6); sub_77D2F0(&v14, a4); sub_77A7F0(&v13, a3); sub_777FD0(&v12, a2); (*(void (__thiscall **)(int *, int *, int, int, int, int))(v9 + 24))(v8, &a1, v12, v13, v14, v15); sub_407820(&a5); v15 = v10; sub_782230(&v15, &a1); v11 = sub_782260(v15); sub_407820(&a1); return v11; } //----- (00782BE0) -------------------------------------------------------- int __stdcall sub_782BE0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int result; // eax int v9; // ebx int **v10; // eax int *v11; // edi int v12; // esi int v13; // [esp-1Ch] [ebp-2Ch] int v14; // [esp-18h] [ebp-28h] int v15; // [esp-14h] [ebp-24h] int v16; // [esp-10h] [ebp-20h] int v17; // [esp-Ch] [ebp-1Ch] int v18; // [esp-8h] [ebp-18h] int v19; // [esp-4h] [ebp-14h] int v20; // [esp+Ch] [ebp-4h] result = a1; v20 = 0; if ( a1 && a2 && a3 && a4 ) { v9 = a5; if ( a5 ) { v10 = (int **)sub_789AA0(&a1, a1); v11 = *v10; v12 = **v10; v19 = a8; v18 = a7; v17 = a6; v16 = a8; sub_782490(&v16, v9); sub_77D2F0(&v15, a4); sub_77A7F0(&v14, a3); sub_777FD0(&v13, a2); (*(void (__thiscall **)(int *, int, int, int, int, int, int, int))(v12 + 28))( v11, v13, v14, v15, v16, v17, v18, v19); result = sub_407820(&a1); } } return result; } //----- (00782C80) -------------------------------------------------------- int __stdcall sub_782C80(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { int v10; // ebx int **v11; // eax int *v12; // edi int v13; // esi unsigned __int8 v14; // bl int v15; // [esp-20h] [ebp-54h] BOOL v16; // [esp-1Ch] [ebp-50h] BOOL v17; // [esp-18h] [ebp-4Ch] _DWORD *v18; // [esp-14h] [ebp-48h] int v19; // [esp-10h] [ebp-44h] _DWORD *v20; // [esp-Ch] [ebp-40h] _DWORD *v21; // [esp-8h] [ebp-3Ch] int v22; // [esp-4h] [ebp-38h] char v23; // [esp+Ch] [ebp-28h] char v24; // [esp+18h] [ebp-1Ch] char v25; // [esp+24h] [ebp-10h] int v26; // [esp+30h] [ebp-4h] v26 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; if ( !a5 ) return 0; v10 = a9; if ( !a9 ) return 0; v11 = (int **)sub_789AA0(&a1, a1); v12 = *v11; v13 = **v11; sub_782350(&v22, v10); v21 = sub_405FD0(&v23, a8); v20 = sub_405FD0(&v24, a7); v19 = a6; v18 = sub_405FD0(&v25, a5); v17 = a4 != 0; v16 = a4 != 0; sub_77A7F0(&v16, a3); sub_777FD0(&v15, a2); v14 = (*(int (__thiscall **)(int *, int, BOOL, BOOL, _DWORD *, int, _DWORD *, _DWORD *, int))(v13 + 32))( v12, v15, v16, v17, v18, v19, v20, v21, v22); sub_405F40(&v25); sub_405F40(&v24); sub_405F40(&v23); sub_407820(&a1); return v14; } //----- (00782D70) -------------------------------------------------------- int __stdcall sub_782D70(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // edi int v8; // ebx int *v9; // esi int v10; // edi unsigned __int8 v11; // bl void ***v12; // [esp-14h] [ebp-30h] void ***v13; // [esp-10h] [ebp-2Ch] int v14; // [esp-Ch] [ebp-28h] int v15; // [esp-8h] [ebp-24h] int v16; // [esp-4h] [ebp-20h] void **v17; // [esp+Ch] [ebp-10h] int v18; // [esp+10h] [ebp-Ch] char v19; // [esp+14h] [ebp-8h] int v20; // [esp+18h] [ebp-4h] v20 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; v7 = a3; if ( !a3 ) return 0; v8 = a6; if ( !a6 ) return 0; v9 = (int *)*sub_789AA0(&a1, a1); v15 = v8; v17 = &CefStringBase::`vftable'; v18 = v7; v19 = 0; v10 = *v9; sub_7823F0(&v16, v8); v15 = a5; v14 = a4; v13 = &v17; v12 = &v17; sub_777FD0((int *)&v12, a2); v11 = (*(int (__thiscall **)(int *, void ***, void ***, int, int, int))(v10 + 36))(v9, v12, v13, v14, v15, v16); sub_405F40(&v17); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v11; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00782E30) -------------------------------------------------------- BOOL __stdcall sub_782E30(char *a1, int a2, int a3, BOOL *a4) { BOOL result; // eax int v5; // edi BOOL *v6; // ebx bool v7; // zf int *v8; // esi int v9; // edi void ***v10; // [esp-Ch] [ebp-28h] void ***v11; // [esp-8h] [ebp-24h] char *v12; // [esp-4h] [ebp-20h] void **v13; // [esp+Ch] [ebp-10h] int v14; // [esp+10h] [ebp-Ch] char v15; // [esp+14h] [ebp-8h] int v16; // [esp+18h] [ebp-4h] result = (BOOL)a1; v16 = 0; if ( a1 ) { if ( a2 ) { v5 = a3; if ( a3 ) { v6 = a4; if ( a4 ) { v7 = *a4 == 0; v12 = a1; HIBYTE(a1) = !v7; v8 = (int *)*sub_789AA0(&a3, (int)v12); v12 = (char *)&a1 + 3; v11 = &v13; v10 = &v13; v13 = &CefStringBase::`vftable'; v14 = v5; v15 = 0; v9 = *v8; sub_777FD0((int *)&v10, a2); (*(void (__thiscall **)(int *, void ***, void ***, char *))(v9 + 40))(v8, v10, v11, v12); sub_405F40(&v13); if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); result = HIBYTE(a1) != 0; *v6 = result; } } } } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00782EE0) -------------------------------------------------------- int __stdcall sub_782EE0(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // ebx int **v8; // eax int *v9; // edi int v10; // esi int v11; // ecx unsigned __int8 v12; // bl int v13; // [esp-14h] [ebp-30h] int v14; // [esp-10h] [ebp-2Ch] _DWORD *v15; // [esp-Ch] [ebp-28h] int v16; // [esp-8h] [ebp-24h] int v17; // [esp-4h] [ebp-20h] char v18; // [esp+Ch] [ebp-10h] int v19; // [esp+18h] [ebp-4h] v19 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a4 ) return 0; if ( !a5 ) return 0; v7 = a6; if ( !a6 ) return 0; v8 = (int **)sub_789AA0(&a1, a1); v9 = *v8; v10 = **v8; sub_7823F0(&v17, v7); sub_7825A0(&v16, a5); v15 = sub_405FD0(&v18, a4); v14 = a3; v13 = v11; sub_777FD0(&v13, a2); v12 = (*(int (__thiscall **)(int *, int, int, _DWORD *, int, int))(v10 + 44))(v9, v13, v14, v15, v16, v17); sub_405F40(&v18); sub_407820(&a1); return v12; } //----- (00782F90) -------------------------------------------------------- int __stdcall sub_782F90(int a1, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void ***v6; // [esp-8h] [ebp-24h] void ***v7; // [esp-4h] [ebp-20h] void **v8; // [esp+Ch] [ebp-10h] int v9; // [esp+10h] [ebp-Ch] char v10; // [esp+14h] [ebp-8h] int v11; // [esp+18h] [ebp-4h] result = a1; v11 = 0; if ( a1 && a2 && a3 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v7 = &v8; v6 = &v8; v8 = &CefStringBase::`vftable'; v9 = a3; v10 = 0; v5 = *v4; sub_777FD0((int *)&v6, a2); (*(void (__thiscall **)(int *, void ***, void ***))(v5 + 48))(v4, v6, v7); sub_405F40(&v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00783020) -------------------------------------------------------- int __thiscall sub_783020(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_777FD0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 52))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00783090) -------------------------------------------------------- int __stdcall sub_783090(int a1, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi int v6; // [esp-8h] [ebp-18h] int v7; // [esp-4h] [ebp-14h] int v8; // [esp+Ch] [ebp-4h] result = a1; v8 = 0; if ( a1 && a2 ) { v4 = *(int **)(a1 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v7 = a3; v6 = a3; sub_777FD0(&v6, a2); (*(void (__thiscall **)(int *, int, int))(v5 + 56))(v4, v6, v7); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00783100) -------------------------------------------------------- _DWORD *__thiscall sub_783100(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; *this = &off_A0FB04; this[23] = 0; v2 = this + 4; this[1] = dword_AB91E0; v1[3] = v1; memset(this + 4, 0, 0x4Cu); *v2 = 76; v2[1] = sub_789AE0; v2[2] = sub_77FFB0; v2[3] = sub_78ABD0; *v1 = &off_A0FB04; v1[8] = sub_7826D0; v1[9] = sub_782780; v1[10] = sub_782840; v1[11] = sub_7828F0; v1[12] = sub_7829E0; v1[13] = sub_782A80; v1[14] = sub_782B20; v1[15] = sub_782BE0; v1[16] = sub_782C80; v1[17] = sub_782D70; v1[18] = sub_782E30; v1[19] = sub_782EE0; v1[20] = sub_782F90; v1[21] = sub_783020; v1[22] = sub_783090; return v1; } // A0FB04: using guessed type int (*off_A0FB04)[12]; // AB91E0: using guessed type int dword_AB91E0; //----- (007831E0) -------------------------------------------------------- _DWORD *__thiscall sub_7831E0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10580; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10580; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0FB14; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0FB24; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0FB14; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB14: using guessed type int (*off_A0FB14[2])[4]; // A0FB24: using guessed type int (*off_A0FB24[2])(); // A10580: using guessed type int (*off_A10580[5])(); //----- (00783260) -------------------------------------------------------- _DWORD *__thiscall sub_783260(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A10580; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A0FB14; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FB14: using guessed type int (*off_A0FB14[2])[4]; // A10580: using guessed type int (*off_A10580[5])(); //----- (007832C0) -------------------------------------------------------- int *__thiscall sub_7832C0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = v3(v2); sub_779B00(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00783300) -------------------------------------------------------- int *__thiscall sub_783300(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x24u && (v3 = (int (__stdcall *)(_DWORD *))v2[8]) != 0 ) { v4 = v3(v2); sub_77DE00(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00783340) -------------------------------------------------------- _DWORD *__thiscall sub_783340(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0FB5C; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB38: using guessed type int (*off_A0FB38[10])(); // A0FB5C: using guessed type int (*off_A0FB5C)(); // A10314: using guessed type int (*off_A10314[2])[4]; //----- (007833C0) -------------------------------------------------------- int __thiscall sub_7833C0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x18u && (v3 = (int (__stdcall *)(_DWORD *))v2[5]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00783440) -------------------------------------------------------- int __thiscall sub_783440(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x28u && (v2 = (int (__stdcall *)(_DWORD *))v1[9]) != 0 ) result = v2(v1); else result = 1; return result; } //----- (00783460) -------------------------------------------------------- bool __thiscall sub_783460(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x2Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[10]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00783480) -------------------------------------------------------- _DWORD *__thiscall sub_783480(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(char *, _DWORD *); // ecx const void *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi char v7; // [esp+0h] [ebp-40h] char v8; // [esp+20h] [ebp-20h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x30u && (v3 = (int (__stdcall *)(char *, _DWORD *))v2[11]) != 0 ) { v4 = (const void *)v3(&v7, v2); result = a2; qmemcpy(&v8, v4, 0x20u); a2[1] = 0; v6 = a2 + 1; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; a2[9] = 0; qmemcpy(a2 + 1, &v8, 0x20u); *a2 = &off_A10614; } else { result = a2; a2[1] = 0; a2[2] = 0; a2[3] = 0; a2[4] = 0; a2[5] = 0; a2[6] = 0; a2[7] = 0; a2[8] = 0; a2[9] = 0; *a2 = &off_A10614; } return result; } // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (00783520) -------------------------------------------------------- int __cdecl sub_783520(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_78AB80(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00783580) -------------------------------------------------------- int __cdecl sub_783580(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_78ACA0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (007835E0) -------------------------------------------------------- _DWORD *__thiscall sub_7835E0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F678; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F678; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0FB80; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0FB90; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0FB80; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F678: using guessed type int (*off_A0F678[24])(); // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB80: using guessed type int (*off_A0FB80[2])[4]; // A0FB90: using guessed type int (*off_A0FB90[9])(); //----- (00783660) -------------------------------------------------------- _DWORD *__thiscall sub_783660(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x1Cu ) { v2 = (int (__stdcall *)(_DWORD *))result[6]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00783680) -------------------------------------------------------- _DWORD *__thiscall sub_783680(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x20u ) { v2 = (int (__stdcall *)(_DWORD *))result[7]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (007836A0) -------------------------------------------------------- _DWORD *__thiscall sub_7836A0(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x30u ) { v2 = (int (__stdcall *)(_DWORD *))result[11]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (007836C0) -------------------------------------------------------- void __thiscall sub_7836C0(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x38u && *(_DWORD *)(v2 + 52) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_783580(v4); (*(void (__stdcall **)(int, int))(v2 + 52))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00783730) -------------------------------------------------------- void __thiscall sub_783730(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x3Cu && *(_DWORD *)(v2 + 56) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_783580(v4); (*(void (__stdcall **)(int, int))(v2 + 56))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (007837A0) -------------------------------------------------------- _DWORD *__thiscall sub_7837A0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x44u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[16]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (007837E0) -------------------------------------------------------- void __thiscall sub_7837E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx void (__stdcall *v4)(_DWORD *, int, _DWORD); // esi int v5; // edx int v6; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x48u ) { v4 = (void (__stdcall *)(_DWORD *, int, _DWORD))v3[17]; if ( v4 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) { v6 = *(_DWORD *)(a3 + 4); if ( v6 ) { if ( *(_DWORD *)(v6 + 4) ) v4(v3, v5, *(_DWORD *)(a3 + 4)); } } } } } } //----- (00783830) -------------------------------------------------------- _DWORD *__thiscall sub_783830(_DWORD *this, int a2, int a3, int a4) { _DWORD *result; // eax int (__stdcall *v5)(_DWORD *, int, _DWORD, int); // edx int v6; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x4Cu ) { v5 = (int (__stdcall *)(_DWORD *, int, _DWORD, int))result[18]; if ( v5 ) { v6 = *(_DWORD *)(a2 + 4); if ( v6 ) { if ( *(_DWORD *)(v6 + 4) ) result = (_DWORD *)v5(result, v6, *(_DWORD *)(a3 + 4), a4); } } } return result; } //----- (00783880) -------------------------------------------------------- int __thiscall sub_783880(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x58u && (v3 = (int (__stdcall *)(_DWORD *))v2[21]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00783900) -------------------------------------------------------- int __thiscall sub_783900(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x5Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[22]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00783920) -------------------------------------------------------- int __thiscall sub_783920(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x64u && (v3 = (int (__stdcall *)(_DWORD *))v2[24]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007839A0) -------------------------------------------------------- void __thiscall sub_7839A0(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x70u && *(_DWORD *)(v2 + 108) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_783520(v4); (*(void (__stdcall **)(int, int))(v2 + 108))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00783A10) -------------------------------------------------------- int __cdecl sub_783A10(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9218 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9218: using guessed type int dword_AB9218; //----- (00783A70) -------------------------------------------------------- int *__cdecl sub_783A70(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78ACF0(v3 + 2, 1); else v4 = 0; v5 = dword_AB9264; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9264: using guessed type int dword_AB9264; //----- (00783B10) -------------------------------------------------------- void __thiscall sub_783B10(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x40u && *(_DWORD *)(v2 + 60) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_783A10(v4); (*(void (__stdcall **)(int, int))(v2 + 60))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00783B80) -------------------------------------------------------- int *__thiscall sub_783B80(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x60u && (v3 = (int (__stdcall *)(_DWORD *))v2[23]) != 0 ) { v4 = v3(v2); sub_77A7F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00783BC0) -------------------------------------------------------- int *__thiscall sub_783BC0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x68u && (v3 = (int (__stdcall *)(_DWORD *))v2[25]) != 0 ) { v4 = v3(v2); sub_777FD0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00783C00) -------------------------------------------------------- int *__thiscall sub_783C00(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x6Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[26]) != 0 ) { v4 = v3(v2); sub_783A70(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00783C40) -------------------------------------------------------- int __stdcall sub_783C40(int a1, int a2, int a3) { int v3; // esi int result; // eax int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+10h] [ebp-Ch] int v8; // [esp+18h] [ebp-4h] v8 = 0; if ( a1 ) { v5 = 0; v6 = 0; v7 = 0; sub_77C000(a3, (unsigned int *)&v5); v3 = *(_DWORD *)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (**(void (__thiscall ***)(int, int, int *))v3)(v3, a2, &v5); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); result = sub_77A000((void **)&v5); } return result; } //----- (00783CC0) -------------------------------------------------------- _DWORD *__thiscall sub_783CC0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB91F4; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_783C40; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB91F4: using guessed type int dword_AB91F4; //----- (00783D10) -------------------------------------------------------- int __cdecl sub_783D10(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_78B280(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00783D70) -------------------------------------------------------- int __cdecl sub_783D70(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_78B330(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00783DD0) -------------------------------------------------------- int __cdecl sub_783DD0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x28u); if ( v2 ) v3 = sub_78B3E0(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00783E30) -------------------------------------------------------- _DWORD *__thiscall sub_783E30(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0FC0C; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FBF0: using guessed type int (*off_A0FBF0[7])(); // A0FC0C: using guessed type int (__stdcall *off_A0FC0C)(int, int); // A104A8: using guessed type int (*off_A104A8)[4]; //----- (00783EB0) -------------------------------------------------------- _DWORD *__thiscall sub_783EB0(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0FBF0; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FBF0: using guessed type int (*off_A0FBF0[7])(); // A104A8: using guessed type int (*off_A104A8)[4]; //----- (00783F10) -------------------------------------------------------- int __thiscall sub_783F10(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi int v4; // edi int v5; // eax int result; // eax int v7; // [esp-4h] [ebp-10h] int v8; // [esp+0h] [ebp-Ch] int v9; // [esp+4h] [ebp-8h] v3 = *(this - 1); if ( *(_DWORD *)v3 >= 0x14u && *(_DWORD *)(v3 + 16) ) { v4 = cef_string_list_alloc(v8, v9); if ( v4 ) sub_77B6F0(a2, v4); v7 = a3; if ( a3 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( *(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4, a3); v5 = sub_7785E0(v7); (*(void (__stdcall **)(int, int, int))(v3 + 16))(v3, v4, v5); if ( v4 ) cef_string_list_free(v4); result = a3; if ( a3 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); } else { result = a3; if ( a3 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); } return result; } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (00783FD0) -------------------------------------------------------- bool __thiscall sub_783FD0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x18u || !v2[5] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_783D10(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[5])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (00784070) -------------------------------------------------------- bool __thiscall sub_784070(_DWORD *this, int a2, unsigned __int8 a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax bool v7; // bl int v9; // [esp-4h] [ebp-14h] v4 = (_DWORD *)*(this - 1); if ( *v4 < 0x1Cu || !v4[6] || (v5 = *(_DWORD *)(a2 + 4)) == 0 || !*(_DWORD *)(v5 + 4) ) { if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return 0; } if ( !a4 ) return 0; v9 = a4; if ( a4 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))(a4); v6 = sub_783D10(v9); v7 = ((int (__stdcall *)(_DWORD *, _DWORD, _DWORD, int))v4[6])(v4, *(_DWORD *)(a2 + 4), a3, v6) != 0; if ( a4 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4); return v7; } //----- (00784130) -------------------------------------------------------- bool __thiscall sub_784130(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // eax int v6; // edi int v7; // eax bool v8; // bl bool result; // al int v10; // [esp-4h] [ebp-14h] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x20u && *(_DWORD *)(v4 + 28) && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { if ( a3 ) v6 = a3 + 4; else v6 = 0; v10 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4); v7 = sub_783DD0(v10); v8 = (*(int (__stdcall **)(int, _DWORD, int, int))(v4 + 28))(v4, *(_DWORD *)(a2 + 4), v6, v7) != 0; if ( a4 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4); result = v8; } else { if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = 0; } return result; } //----- (007841F0) -------------------------------------------------------- bool __thiscall sub_7841F0(_DWORD *this, int a2, int a3, int a4) { int v4; // esi int v5; // eax bool v6; // bl bool result; // al int v8; // [esp-4h] [ebp-Ch] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x24u && *(_DWORD *)(v4 + 32) ) { v8 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4); v5 = sub_783D70(v8); v6 = (*(int (__stdcall **)(int, _DWORD, _DWORD, int))(v4 + 32))(v4, *(_DWORD *)(a2 + 4), *(_DWORD *)(a3 + 4), v5) != 0; if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = v6; } else { if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = 0; } return result; } //----- (00784290) -------------------------------------------------------- bool __thiscall sub_784290(_DWORD *this, int a2, unsigned __int8 a3, int a4) { int v4; // esi int v5; // eax bool v6; // bl bool result; // al int v8; // [esp-4h] [ebp-Ch] v4 = *(this - 1); if ( *(_DWORD *)v4 >= 0x28u && *(_DWORD *)(v4 + 36) ) { v8 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4); v5 = sub_7785E0(v8); v6 = (*(int (__stdcall **)(int, _DWORD, _DWORD, int))(v4 + 36))(v4, *(_DWORD *)(a2 + 4), a3, v5) != 0; if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = v6; } else { if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); result = 0; } return result; } //----- (00784330) -------------------------------------------------------- bool __thiscall sub_784330(_DWORD *this, int a2) { int v2; // esi int v3; // eax bool v4; // bl bool result; // al int v6; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x2Cu && *(_DWORD *)(v2 + 40) ) { v6 = a2; if ( a2 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))( *(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4, a2); v3 = sub_7785E0(v6); v4 = (*(int (__stdcall **)(int, int))(v2 + 40))(v2, v3) != 0; if ( a2 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4); result = v4; } else { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); result = 0; } return result; } //----- (007843C0) -------------------------------------------------------- _DWORD *__thiscall sub_7843C0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FC28; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FC28; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FC9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0FCB0; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FC9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FC28: using guessed type int (*off_A0FC28[29])(); // A0FC9C: using guessed type int (*off_A0FC9C)[4]; // A0FCB0: using guessed type int (*off_A0FCB0[3])(); //----- (00784440) -------------------------------------------------------- bool __thiscall sub_784440(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x1Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[6]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00784460) -------------------------------------------------------- bool __thiscall sub_784460(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x20u || !v2[7] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DDA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[7])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (00784500) -------------------------------------------------------- bool __thiscall sub_784500(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x24u || !v2[8] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DDA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[8])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (007845A0) -------------------------------------------------------- bool __thiscall sub_7845A0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x34u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[12]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (007845F0) -------------------------------------------------------- bool __userpurge sub_7845F0@(int a1@, int a2@, int a3@, int *a4) { _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // edi v4 = *(_DWORD **)(a1 - 4); if ( *v4 < 0x38u || !v4[13] ) return 0; v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); v7 = ((int (__cdecl *)(_DWORD *, int))v4[13])(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } return v7 != 0; } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (00784670) -------------------------------------------------------- bool __thiscall sub_784670(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x3Cu && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[14]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (007846C0) -------------------------------------------------------- int __thiscall sub_7846C0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x40u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[15]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)); } else { result = 0; } return result; } //----- (00784700) -------------------------------------------------------- bool __thiscall sub_784700(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[17]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (00784750) -------------------------------------------------------- int __thiscall sub_784750(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x4Cu && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[18]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)); } else { result = 0; } return result; } //----- (00784790) -------------------------------------------------------- double __thiscall sub_784790(_DWORD *this, int a2) { _DWORD *v2; // eax int v3; // ecx double result; // st7 void (__stdcall *v5)(_DWORD *, _DWORD); // [esp+0h] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x50u ) return 0.0; v5 = (void (__stdcall *)(_DWORD *, _DWORD))v2[19]; if ( !v5 ) return 0.0; v3 = *(_DWORD *)(a2 + 4); if ( !v3 || !*(_DWORD *)(v3 + 4) ) return 0.0; v5(v2, *(_DWORD *)(a2 + 4)); return result; } //----- (007847D0) -------------------------------------------------------- int __thiscall sub_7847D0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax bool v4; // cf int (__stdcall *v5)(_DWORD *, int); // edx int v6; // ecx _DWORD *v7; // eax int result; // eax void **v9; // [esp+4h] [ebp-10h] int v10; // [esp+8h] [ebp-Ch] char v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v3 = (_DWORD *)*(this - 1); v4 = *v3 < 0x54u; v12 = 0; if ( !v4 && (v5 = (int (__stdcall *)(_DWORD *, int))v3[20]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = (_DWORD *)v5(v3, v6); v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; sub_7787E0((int)&v9, v7); sub_778780((_DWORD *)a2, (int)&v9); sub_405F40(&v9); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00784850) -------------------------------------------------------- bool __thiscall sub_784850(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x68u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[25]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (007848A0) -------------------------------------------------------- bool __thiscall sub_7848A0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x6Cu && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[26]) != 0 && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, v5, a3) != 0; } else { result = 0; } return result; } //----- (007848F0) -------------------------------------------------------- bool __thiscall sub_7848F0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x70u && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[27]) != 0 && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, v5, a3) != 0; } else { result = 0; } return result; } //----- (00784940) -------------------------------------------------------- bool __thiscall sub_784940(_DWORD *this, int a2, double a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x74u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD, _DWORD))v3[28]) != 0 && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, v5, LODWORD(a3), HIDWORD(a3)) != 0; } else { result = 0; } return result; } //----- (00784990) -------------------------------------------------------- bool __thiscall sub_784990(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // esi int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x78u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[29]) != 0 && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, v5, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (007849E0) -------------------------------------------------------- bool __thiscall sub_7849E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax bool v6; // bl int v8; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x80u || !v3[31] || (v4 = *(_DWORD *)(a2 + 4)) == 0 || !*(_DWORD *)(v4 + 4) ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v8 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v5 = sub_77DDA0(v8); v6 = ((int (__stdcall *)(_DWORD *, _DWORD, int))v3[31])(v3, *(_DWORD *)(a2 + 4), v5) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v6; } //----- (00784A90) -------------------------------------------------------- int *__thiscall sub_784A90(_DWORD *this, int *a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, _DWORD); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x28u && (v4 = (int (__stdcall *)(_DWORD *, _DWORD))v3[9]) != 0 ) { v5 = v4(v3, a3); sub_77B390(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00784AD0) -------------------------------------------------------- int *__userpurge sub_784AD0@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x44u && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[16]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_778AF0(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (00784B30) -------------------------------------------------------- int *__userpurge sub_784B30@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x58u && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[21]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_778A50(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (00784B90) -------------------------------------------------------- int *__userpurge sub_784B90@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x5Cu && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[22]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_77B390(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (00784BF0) -------------------------------------------------------- int *__userpurge sub_784BF0@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x60u && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[23]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_77DE00(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (00784C50) -------------------------------------------------------- bool __thiscall sub_784C50(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax bool v6; // bl int v8; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x64u || !v3[24] || (v4 = *(_DWORD *)(a2 + 4)) == 0 || !*(_DWORD *)(v4 + 4) ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v8 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v5 = sub_778B90(v8); v6 = ((int (__stdcall *)(_DWORD *, _DWORD, int))v3[24])(v3, *(_DWORD *)(a2 + 4), v5) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v6; } //----- (00784D00) -------------------------------------------------------- bool __thiscall sub_784D00(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax bool v6; // bl int v8; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x7Cu || !v3[30] || (v4 = *(_DWORD *)(a2 + 4)) == 0 || !*(_DWORD *)(v4 + 4) ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v8 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v5 = sub_77D7E0(v8); v6 = ((int (__stdcall *)(_DWORD *, _DWORD, int))v3[30])(v3, *(_DWORD *)(a2 + 4), v5) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v6; } //----- (00784DB0) -------------------------------------------------------- bool __thiscall sub_784DB0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax bool v6; // bl int v8; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x84u || !v3[32] || (v4 = *(_DWORD *)(a2 + 4)) == 0 || !*(_DWORD *)(v4 + 4) ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v8 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v5 = sub_77DEA0(v8); v6 = ((int (__stdcall *)(_DWORD *, _DWORD, int))v3[32])(v3, *(_DWORD *)(a2 + 4), v5) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v6; } //----- (00784E70) -------------------------------------------------------- int __cdecl sub_784E70(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x3Cu); if ( v2 ) v3 = sub_78BA00(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return (int)(v3 + 4); } //----- (00784ED0) -------------------------------------------------------- int __stdcall sub_784ED0(int a1) { int result; // eax int v2; // esi result = a1; if ( a1 ) { v2 = *(_DWORD *)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); (**(void (__thiscall ***)(int))v2)(v2); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); } return result; } //----- (00784F20) -------------------------------------------------------- int __stdcall sub_784F20(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 12))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_784E70(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00784FC0) -------------------------------------------------------- int __thiscall sub_784FC0(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_77CEC0((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 4))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (00785030) -------------------------------------------------------- int __thiscall sub_785030(void *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(int **)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); v5 = *v4; v6 = this; sub_77DE00((int *)&v6, a3); (*(void (__thiscall **)(int *, void *))(v5 + 8))(v4, v6); result = (*(int (__thiscall **)(int))(*(int *)((char *)v4 + *(_DWORD *)(v4[1] + 4) + 4) + 4))((int)v4 + *(_DWORD *)(v4[1] + 4) + 4); } return result; } //----- (007850A0) -------------------------------------------------------- _DWORD *__thiscall sub_7850A0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FD24; this[12] = 0; this[1] = dword_AB9204; result[3] = result; this[4] = 32; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FD24; this[8] = sub_784ED0; this[9] = sub_784FC0; this[10] = sub_785030; this[11] = sub_784F20; return result; } // A0FD24: using guessed type int (*off_A0FD24)[28]; // AB9204: using guessed type int dword_AB9204; //----- (00785100) -------------------------------------------------------- _DWORD *__thiscall sub_785100(_DWORD *this, char a2) { return sub_785110((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (00785110) -------------------------------------------------------- _DWORD *__thiscall sub_785110(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A101FC; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A10474; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A101FC: using guessed type int (*off_A101FC[3])(); // A10474: using guessed type int (*off_A10474)[4]; //----- (00785160) -------------------------------------------------------- int __stdcall sub_785160(int a1) { int result; // eax _DWORD *v2; // esi result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *))(*v2 + 4))(v2); result = (*(int (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); } return result; } //----- (007851B0) -------------------------------------------------------- int __stdcall sub_7851B0(int a1) { int result; // eax _DWORD *v2; // esi int v3; // esi int v4; // [esp-4h] [ebp-Ch] result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *, int *))(*v2 + 16))(v2, &a1); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); v4 = a1; if ( a1 ) (**(void (__thiscall ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, a1); v3 = sub_7790E0(v4); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); result = v3; } return result; } //----- (00785280) -------------------------------------------------------- int *__cdecl sub_785280(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78BA80(v3 + 2, 1); else v4 = 0; v5 = dword_AB9278; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9278: using guessed type int dword_AB9278; //----- (00785390) -------------------------------------------------------- int *__cdecl sub_785390(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78C250(v3 + 2, 1); else v4 = 0; v5 = dword_AB927C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB927C: using guessed type int dword_AB927C; //----- (007854A0) -------------------------------------------------------- int *__cdecl sub_7854A0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78C430(v3 + 2, 1); else v4 = 0; v5 = dword_AB9280; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9280: using guessed type int dword_AB9280; //----- (007855E0) -------------------------------------------------------- int __thiscall sub_7855E0(void *this, int a2, int a3) { int result; // eax int v4; // esi void (__thiscall **v5)(int, void *); // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(_DWORD *)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v5 = *(void (__thiscall ***)(int, void *))v4; v6 = this; sub_77DE00((int *)&v6, a3); (*v5)(v4, v6); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); } return result; } //----- (00785650) -------------------------------------------------------- int __stdcall sub_785650(int a1, int a2, int a3, int a4, int a5, int a6) { int v7; // ebx int **v8; // eax int *v9; // edi int v10; // esi int v11; // ecx unsigned __int8 v12; // bl int v13; // [esp-14h] [ebp-24h] int v14; // [esp-10h] [ebp-20h] int v15; // [esp-Ch] [ebp-1Ch] int v16; // [esp-8h] [ebp-18h] BOOL v17; // [esp-4h] [ebp-14h] int v18; // [esp+Ch] [ebp-4h] v18 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a3 ) return 0; v7 = a4; if ( !a4 ) return 0; v8 = (int **)sub_789AA0(&a1, a1); v9 = *v8; v10 = **v8; LOBYTE(v11) = a6 != 0; v17 = a6 != 0; v16 = a5; v15 = v11; sub_77D2F0(&v15, v7); sub_77A7F0(&v14, a3); sub_777FD0(&v13, a2); v12 = (*(int (__thiscall **)(int *, int, int, int, int, BOOL))(v10 + 20))(v9, v13, v14, v15, v16, v17); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v12; } //----- (00785700) -------------------------------------------------------- int __stdcall sub_785700(int a1, int a2, int a3, int a4) { int result; // eax int v5; // ebx int **v6; // eax int *v7; // edi int v8; // esi int v9; // [esp-Ch] [ebp-1Ch] int v10; // [esp-8h] [ebp-18h] int v11; // [esp-4h] [ebp-14h] int v12; // [esp+Ch] [ebp-4h] result = a1; v12 = 0; if ( a1 ) { if ( a2 ) { if ( a3 ) { v5 = a4; if ( a4 ) { v6 = (int **)sub_789AA0(&a1, a1); v7 = *v6; v8 = **v6; sub_783A70(&v11, v5); sub_77A7F0(&v10, a3); sub_777FD0(&v9, a2); (*(void (__thiscall **)(int *, int, int, int))(v8 + 24))(v7, v9, v10, v11); result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); } } } } return result; } //----- (00785790) -------------------------------------------------------- int __stdcall sub_785790(int a1, int a2, int a3, int a4) { int result; // eax int v5; // ebx int **v6; // eax int *v7; // edi int v8; // esi int v9; // [esp-Ch] [ebp-1Ch] int v10; // [esp-8h] [ebp-18h] int v11; // [esp-4h] [ebp-14h] int v12; // [esp+Ch] [ebp-4h] result = a1; v12 = 0; if ( a1 ) { if ( a2 ) { if ( a3 ) { v5 = a4; if ( a4 ) { v6 = (int **)sub_789AA0(&a1, a1); v7 = *v6; v8 = **v6; sub_783A70(&v11, v5); sub_77A7F0(&v10, a3); sub_777FD0(&v9, a2); (*(void (__thiscall **)(int *, int, int, int))(v8 + 28))(v7, v9, v10, v11); result = a1; if ( a1 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); } } } } return result; } //----- (00785820) -------------------------------------------------------- int __stdcall sub_785820(int a1, int a2, int a3, int a4, int a5, int a6) { int result; // eax int v7; // ebx int **v8; // eax int *v9; // edi int v10; // esi int v11; // [esp-14h] [ebp-24h] int v12; // [esp-10h] [ebp-20h] int v13; // [esp-Ch] [ebp-1Ch] int v14; // [esp-8h] [ebp-18h] int v15; // [esp-4h] [ebp-14h] int v16; // [esp+Ch] [ebp-4h] result = a1; v16 = 0; if ( a1 && a2 && a3 && a4 && a5 ) { v7 = a6; if ( a6 ) { v8 = (int **)sub_789AA0(&a1, a1); v9 = *v8; v10 = **v8; sub_7854A0(&v15, v7); sub_785390(&v14, a5); sub_783A70(&v13, a4); sub_77A7F0(&v12, a3); sub_777FD0(&v11, a2); (*(void (__thiscall **)(int *, int, int, int, int, int))(v10 + 32))(v9, v11, v12, v13, v14, v15); result = sub_407820(&a1); } } return result; } //----- (007858D0) -------------------------------------------------------- int __thiscall sub_7858D0(void *this, int a2, int a3, int a4, int a5) { int result; // eax int *v6; // esi int v7; // edi int v8; // [esp-Ch] [ebp-1Ch] int v9; // [esp-8h] [ebp-18h] void *v10; // [esp-4h] [ebp-14h] int v11; // [esp+Ch] [ebp-4h] result = a2; v11 = 0; if ( a2 && a3 ) { v6 = *(int **)(a2 - 8); if ( v6 ) (**(void (__thiscall ***)(int))((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); v7 = *v6; v10 = this; sub_785280((int *)&v10, a5); sub_77A7F0(&v9, a4); sub_777FD0(&v8, a3); (*(void (__thiscall **)(int *, int, int, void *))(v7 + 36))(v6, v8, v9, v10); result = (*(int (__thiscall **)(int))(*(int *)((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); } return result; } //----- (00785960) -------------------------------------------------------- int __thiscall sub_785960(void *this, int a2, int a3, int a4, int a5) { int *v6; // esi int v7; // edi int v8; // ecx unsigned __int8 v9; // bl int v10; // [esp-Ch] [ebp-1Ch] int v11; // [esp-8h] [ebp-18h] void *v12; // [esp-4h] [ebp-14h] int v13; // [esp+Ch] [ebp-4h] v13 = 0; if ( !a2 || !a3 || !a5 ) return 0; v6 = *(int **)(a2 - 8); if ( v6 ) (**(void (__thiscall ***)(int))((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); v7 = *v6; v12 = this; sub_779B00((int *)&v12, a5); v11 = a4; v10 = v8; sub_777FD0(&v10, a3); v9 = (*(int (__thiscall **)(int *, int, int, void *))(v7 + 40))(v6, v10, v11, v12); (*(void (__thiscall **)(int))(*(int *)((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4) + 4))((int)v6 + *(_DWORD *)(v6[1] + 4) + 4); return v9; } //----- (00785A00) -------------------------------------------------------- _DWORD *__thiscall sub_785A00(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi v1 = this; *this = &off_A0FAD4; this[19] = 0; v2 = this + 4; this[1] = dword_AB9208; v1[3] = v1; memset(this + 4, 0, 0x3Cu); *v2 = 60; v2[1] = sub_789AE0; v2[2] = sub_77FFB0; v2[3] = sub_78ABD0; *v1 = &off_A0FAD4; v1[8] = sub_7855E0; v1[9] = sub_785160; v1[10] = sub_780760; v1[11] = sub_7807D0; v1[12] = sub_7851B0; v1[13] = sub_785650; v1[14] = sub_785700; v1[15] = sub_785790; v1[16] = sub_785820; v1[17] = sub_7858D0; v1[18] = sub_785960; return v1; } // A0FAD4: using guessed type int (*off_A0FAD4)[12]; // AB9208: using guessed type int dword_AB9208; //----- (00785AA0) -------------------------------------------------------- int __userpurge sub_785AA0@(int a1@, int a2, int a3, void *a4) { int v5; // esi unsigned __int8 v6; // bl void **v7; // [esp+0h] [ebp-10h] void *v8; // [esp+4h] [ebp-Ch] char v9; // [esp+8h] [ebp-8h] int v10; // [esp+Ch] [ebp-4h] v10 = 0; if ( !a2 || !a4 ) return 0; v5 = *(_DWORD *)(a2 - 8); v7 = &CefStringBase::`vftable'; v8 = a4; v9 = 0; if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v6 = (**(int (__thiscall ***)(int, int, void ***, int))v5)(v5, a3, &v7, a1); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v7 = &CefStringBase::`vftable'; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v8); } } return v6; } // 785AA0: could not find valid save-restore pair for esi // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00785B50) -------------------------------------------------------- int __stdcall sub_785B50(int a1, int a2, int *a3, _DWORD *a4) { _DWORD *v5; // edi _DWORD *v6; // edx _DWORD *v7; // esi unsigned __int8 v8; // bl _DWORD *v9; // eax if ( !a1 || !a3 ) return 0; v5 = a4; if ( !a4 ) return 0; v6 = (_DWORD *)*a4; v7 = *(_DWORD **)(a1 - 8); a1 = *a3; a4 = v6; if ( v7 ) (**(void (__thiscall ***)(int))((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); v8 = (*(int (__thiscall **)(_DWORD *, int, int *, _DWORD **))(*v7 + 4))(v7, a2, &a1, &a4); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v7 + *(_DWORD *)(v7[1] + 4) + 4) + 4))((int)v7 + *(_DWORD *)(v7[1] + 4) + 4); v9 = a4; *a3 = a1; *v5 = v9; return v8; } //----- (00785BF0) -------------------------------------------------------- int __stdcall sub_785BF0(int a1, int a2, int a3, int *a4, _DWORD *a5) { _DWORD *v6; // edi _DWORD *v7; // edx _DWORD *v8; // esi unsigned __int8 v9; // bl _DWORD *v10; // eax if ( !a1 || !a4 ) return 0; v6 = a5; if ( !a5 ) return 0; v7 = (_DWORD *)*a5; v8 = *(_DWORD **)(a1 - 8); a1 = *a4; a5 = v7; if ( v8 ) (**(void (__thiscall ***)(int))((char *)v8 + *(_DWORD *)(v8[1] + 4) + 4))((int)v8 + *(_DWORD *)(v8[1] + 4) + 4); v9 = (*(int (__thiscall **)(_DWORD *, int, int, int *, _DWORD **))(*v8 + 8))(v8, a2, a3, &a1, &a5); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v8 + *(_DWORD *)(v8[1] + 4) + 4) + 4))((int)v8 + *(_DWORD *)(v8[1] + 4) + 4); v10 = a5; *a4 = a1; *v6 = v10; return v9; } //----- (00785CC0) -------------------------------------------------------- _DWORD *__thiscall sub_785CC0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FDAC; this[11] = 0; this[1] = dword_AB920C; result[3] = result; this[4] = 28; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FDAC; this[8] = sub_785AA0; this[9] = sub_785B50; this[10] = sub_785BF0; return result; } // A0FDAC: using guessed type int (*off_A0FDAC)[12]; // AB920C: using guessed type int dword_AB920C; //----- (00785D20) -------------------------------------------------------- _DWORD *__thiscall sub_785D20(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0FDBC; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A10228; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); // A0FDBC: using guessed type int (__stdcall *off_A0FDBC)(int, char, char, char); // A10228: using guessed type int (*off_A10228)[4]; //----- (00785DA0) -------------------------------------------------------- _DWORD *__thiscall sub_785DA0(_DWORD *this, char a2) { return sub_785DB0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (00785DB0) -------------------------------------------------------- _DWORD *__thiscall sub_785DB0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = &off_A0FA54; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); //----- (00785E00) -------------------------------------------------------- bool __thiscall sub_785E00(_DWORD *this, int a2, unsigned __int8 a3, unsigned __int8 a4, unsigned __int8 a5) { _DWORD *v5; // eax int (__stdcall *v6)(_DWORD *, int, _DWORD, _DWORD, _DWORD); // edx int v7; // ecx bool result; // al v5 = (_DWORD *)*(this - 1); if ( *v5 >= 0x14u && (v6 = (int (__stdcall *)(_DWORD *, int, _DWORD, _DWORD, _DWORD))v5[4]) != 0 && (v7 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v7 + 4) ) { result = v6(v5, v7, a3, a4, a5) != 0; } else { result = 0; } return result; } //----- (00785E60) -------------------------------------------------------- _DWORD *__cdecl sub_785E60(_DWORD *a1, _DWORD *a2, unsigned __int8 a3) { _DWORD *v3; // ebx _DWORD *result; // eax v3 = a1; cef_string_utf16_set(*a1, a1[1], a2, a3); cef_string_utf16_set(v3[3], v3[4], a2 + 3, a3); cef_string_utf16_set(v3[6], v3[7], a2 + 6, a3); cef_string_utf16_set(v3[9], v3[10], a2 + 9, a3); a2[12] = a1[12]; a2[13] = a1[13]; result = a2; qmemcpy(a2 + 14, a1 + 14, 0x20u); qmemcpy(a2 + 22, a1 + 22, 0x24u); qmemcpy(a2 + 31, a1 + 31, 0x20u); return result; } // 9A556C: using guessed type int __cdecl cef_string_utf16_set(_DWORD, _DWORD, _DWORD, _DWORD); //----- (00785F00) -------------------------------------------------------- void __fastcall sub_785F00(unsigned int a1, int a2, int a3) { bool v3; // cf v3 = a1 < *(_DWORD *)(a1 - 4); JUMPOUT(&loc_789D80); } //----- (00785F10) -------------------------------------------------------- int __thiscall sub_785F10(_DWORD *this) { bool v1; // zf int v2; // esi int result; // eax v1 = this[40] == 0; *this = &off_A0FDC0; if ( v1 ) { v2 = (int)(this + 1); cef_string_utf16_clear(this + 1); cef_string_utf16_clear(v2 + 12); cef_string_utf16_clear(v2 + 24); result = cef_string_utf16_clear(v2 + 36); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // A0FDC0: using guessed type int (__thiscall *off_A0FDC0)(void *, char); //----- (00785F50) -------------------------------------------------------- char *__thiscall sub_785F50(void *this, char a2) { char *v2; // ebx bool v3; // zf v2 = (char *)this; v3 = *((_DWORD *)this + 40) == 0; *(_DWORD *)this = &off_A0FDC0; if ( v3 ) { cef_string_utf16_clear((char *)this + 4); cef_string_utf16_clear(v2 + 16); cef_string_utf16_clear(v2 + 28); cef_string_utf16_clear(v2 + 40); } if ( a2 & 1 ) operator delete(v2); return v2; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // A0FDC0: using guessed type int (__thiscall *off_A0FDC0)(void *, char); //----- (00785FA0) -------------------------------------------------------- int __stdcall sub_785FA0(int a1, _DWORD *a2) { _DWORD *v3; // esi unsigned __int8 v4; // bl int (__thiscall **v5)(void *, char); // [esp+Ch] [ebp-A8h] char v6; // [esp+10h] [ebp-A4h] char v7; // [esp+1Ch] [ebp-98h] char v8; // [esp+28h] [ebp-8Ch] char v9; // [esp+34h] [ebp-80h] int v10; // [esp+ACh] [ebp-8h] if ( !a1 || !a2 ) return 0; v5 = &off_A0FDC0; memset(&v6, 0, 0x9Cu); v10 = 0; sub_785E60(a2, &v6, 0); v3 = *(_DWORD **)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); v4 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v3 + 12))(v3, &v5); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); v5 = &off_A0FDC0; if ( !v10 ) { cef_string_utf16_clear(&v6); cef_string_utf16_clear(&v7); cef_string_utf16_clear(&v8); cef_string_utf16_clear(&v9); } return v4; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // A0FDC0: using guessed type int (__thiscall *off_A0FDC0)(void *, char); //----- (007860B0) -------------------------------------------------------- int __stdcall sub_7860B0(int a1, _DWORD *a2) { _DWORD *v3; // esi unsigned __int8 v4; // bl int (__thiscall **v5)(void *, char); // [esp+Ch] [ebp-A8h] char v6; // [esp+10h] [ebp-A4h] char v7; // [esp+1Ch] [ebp-98h] char v8; // [esp+28h] [ebp-8Ch] char v9; // [esp+34h] [ebp-80h] int v10; // [esp+ACh] [ebp-8h] if ( !a1 || !a2 ) return 0; v5 = &off_A0FDC0; memset(&v6, 0, 0x9Cu); v10 = 0; sub_785E60(a2, &v6, 0); v3 = *(_DWORD **)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); v4 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v3 + 16))(v3, &v5); (*(void (__thiscall **)(int))(*(_DWORD *)((char *)v3 + *(_DWORD *)(v3[1] + 4) + 4) + 4))((int)v3 + *(_DWORD *)(v3[1] + 4) + 4); v5 = &off_A0FDC0; if ( !v10 ) { cef_string_utf16_clear(&v6); cef_string_utf16_clear(&v7); cef_string_utf16_clear(&v8); cef_string_utf16_clear(&v9); } return v4; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // A0FDC0: using guessed type int (__thiscall *off_A0FDC0)(void *, char); //----- (007861C0) -------------------------------------------------------- int __stdcall sub_7861C0(int a1) { int result; // eax _DWORD *v2; // esi result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *))(*v2 + 20))(v2); result = (*(int (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); } return result; } //----- (00786250) -------------------------------------------------------- int *__cdecl sub_786250(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78C590(v3 + 2, 1); else v4 = 0; v5 = dword_AB9284; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9284: using guessed type int dword_AB9284; //----- (00786370) -------------------------------------------------------- int __thiscall sub_786370(void *this, int a2, int a3, int a4) { int v5; // esi int (__thiscall **v6)(int, int, void *); // edi unsigned __int8 v7; // bl int v8; // [esp-8h] [ebp-18h] void *v9; // [esp-4h] [ebp-14h] int v10; // [esp+Ch] [ebp-4h] v10 = 0; if ( !a2 || !a3 || !a4 ) return 0; v5 = *(_DWORD *)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v6 = *(int (__thiscall ***)(int, int, void *))v5; v9 = this; sub_786250((int *)&v9, a4); sub_77D2F0(&v8, a3); v7 = (*v6)(v5, v8, v9); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); return v7; } //----- (00786400) -------------------------------------------------------- void __stdcall sub_786400(int a1, int a2, int *a3, int a4) { int *v4; // ebx int v5; // edx int **v6; // eax int *v7; // edi int v8; // esi int v9; // eax void ***v10; // [esp-Ch] [ebp-2Ch] int *v11; // [esp-8h] [ebp-28h] void ***v12; // [esp-4h] [ebp-24h] void **v13; // [esp+Ch] [ebp-14h] int v14; // [esp+10h] [ebp-10h] char v15; // [esp+14h] [ebp-Ch] int v16; // [esp+18h] [ebp-8h] int v17; // [esp+1Ch] [ebp-4h] v17 = 0; if ( a1 ) { if ( a2 ) { v4 = a3; if ( a3 ) { if ( a4 ) { v5 = *a3; v14 = a4; v16 = v5; v17 = a3[1]; v13 = &CefStringBase::`vftable'; v15 = 0; v6 = (int **)sub_789AA0(&a1, a1); v7 = *v6; v8 = **v6; v12 = &v13; v11 = &v16; v10 = &v13; sub_782490((int *)&v10, a2); (*(void (__thiscall **)(int *, void ***, int *, void ***))(v8 + 4))(v7, v10, v11, v12); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); v9 = v16; v4[1] = v17; *v4 = v9; sub_405F40(&v13); } } } } } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007864B0) -------------------------------------------------------- int __stdcall sub_7864B0(int a1, int a2, int a3, int *a4, int a5) { int v6; // ebx int v7; // eax int **v8; // eax int *v9; // edi int v10; // esi unsigned __int8 v11; // bl int v12; // [esp-4h] [ebp-14h] int v13; // [esp+Ch] [ebp-4h] v13 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; if ( !a4 ) return 0; v6 = a5; if ( !a5 ) return 0; v7 = *a4; v12 = a1; a1 = v7; v8 = (int **)sub_789AA0(&a5, v12); v9 = *v8; v10 = **v8; sub_786250(&v12, v6); v11 = (*(int (__thiscall **)(int *, int, int, int *, int))(v10 + 8))(v9, a2, a3, &a1, v12); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); *a4 = a1; return v11; } //----- (00786550) -------------------------------------------------------- _DWORD *__thiscall sub_786550(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A103CC; this[14] = 0; this[1] = dword_AB9214; result[3] = result; this[4] = 40; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A103CC; this[8] = sub_786370; this[9] = sub_786400; this[10] = sub_7864B0; this[11] = sub_785FA0; this[12] = sub_7860B0; this[13] = sub_7861C0; return result; } // A103CC: using guessed type int (*off_A103CC)[12]; // AB9214: using guessed type int dword_AB9214; //----- (007865C0) -------------------------------------------------------- _DWORD *__thiscall sub_7865C0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A0FDC8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F8C0: using guessed type int (*off_A0F8C0[20])(); // A0F910: using guessed type int (*off_A0F910[2])[4]; // A0FDC8: using guessed type int (*off_A0FDC8)(); //----- (00786640) -------------------------------------------------------- void __stdcall sub_786640(void *a1) { void *v1; // esi void **v2; // edi int v3; // eax int v4; // eax v1 = a1; v2 = (void **)a1; if ( !*((_BYTE *)a1 + 37) ) { do { sub_786640(v2[2]); v3 = *((_DWORD *)v1 + 7); v2 = (void **)*v2; *((_DWORD *)v1 + 6) = &CefStringBase::`vftable'; if ( v3 ) { if ( *((_BYTE *)v1 + 32) ) { cef_string_utf16_clear(v3); operator delete(*((void **)v1 + 7)); } *((_DWORD *)v1 + 7) = 0; *((_BYTE *)v1 + 32) = 0; } v4 = *((_DWORD *)v1 + 4); *((_DWORD *)v1 + 3) = &CefStringBase::`vftable'; if ( v4 ) { if ( *((_BYTE *)v1 + 20) ) { cef_string_utf16_clear(v4); operator delete(*((void **)v1 + 4)); } *((_DWORD *)v1 + 4) = 0; *((_BYTE *)v1 + 20) = 0; } operator delete(v1); v1 = v2; } while ( !*((_BYTE *)v2 + 37) ); } } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007866E0) -------------------------------------------------------- _DWORD *__thiscall sub_7866E0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x1Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[6]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (00786720) -------------------------------------------------------- _DWORD *__thiscall sub_786720(_DWORD *this, int a2, int a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, int, int); // edx int v5; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x28u ) { v4 = (int (__stdcall *)(_DWORD *, int, int))result[9]; if ( v4 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) result = (_DWORD *)v4(result, v5, a3); } } } return result; } //----- (00786760) -------------------------------------------------------- int __thiscall sub_786760(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x2Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[10]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007867E0) -------------------------------------------------------- int __thiscall sub_7867E0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x30u && (v2 = (int (__stdcall *)(_DWORD *))v1[11]) != 0 ) result = v2(v1); else result = 1; return result; } //----- (00786800) -------------------------------------------------------- void __userpurge sub_786800(int a1@, int a2@, int a3@, _DWORD *a4) { int v4; // ebx int v5; // eax int v6; // edi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x3Cu && *(_DWORD *)(v4 + 56) ) { v5 = cef_string_multimap_alloc(a2, a3); v6 = v5; if ( v5 ) sub_77B910(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 56))(v4, v6); if ( v6 ) { sub_786640(*(void **)(a4[1] + 4)); *(_DWORD *)(a4[1] + 4) = a4[1]; *(_DWORD *)a4[1] = a4[1]; *(_DWORD *)(a4[1] + 8) = a4[1]; a4[2] = 0; sub_77C490(v6, a4); cef_string_multimap_free(v6); } } } // 9A5590: using guessed type int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); // 9A5594: using guessed type int __cdecl cef_string_multimap_free(_DWORD); //----- (00786880) -------------------------------------------------------- void __userpurge sub_786880(int a1@, int a2@, _DWORD *a3) { int v3; // esi int v4; // edi int v5; // [esp+0h] [ebp-8h] v3 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v3 >= 0x40u && *(_DWORD *)(v3 + 60) ) { v4 = cef_string_multimap_alloc(a2, v5); if ( v4 ) sub_77B910(a3, v4); (*(void (__stdcall **)(int))(v3 + 60))(v3); if ( v4 ) cef_string_multimap_free(v4); } } // 9A5590: using guessed type int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); // 9A5594: using guessed type int __cdecl cef_string_multimap_free(_DWORD); //----- (007868E0) -------------------------------------------------------- int __thiscall sub_7868E0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x48u && (v2 = (int (__stdcall *)(_DWORD *))v1[17]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00786900) -------------------------------------------------------- _DWORD *__thiscall sub_786900(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x4Cu ) { v3 = (int (__stdcall *)(_DWORD *, int))result[18]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00786920) -------------------------------------------------------- int __thiscall sub_786920(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x50u && (v3 = (int (__stdcall *)(_DWORD *))v2[19]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007869A0) -------------------------------------------------------- _DWORD *__thiscall sub_7869A0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x54u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[20]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (007869E0) -------------------------------------------------------- int __thiscall sub_7869E0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x58u && (v2 = (int (__stdcall *)(_DWORD *))v1[21]) != 0 ) result = v2(v1); else result = 6; return result; } //----- (00786A00) -------------------------------------------------------- int __thiscall sub_786A00(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x5Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[22]) != 0 ) result = v2(v1); else result = 1; return result; } //----- (00786A20) -------------------------------------------------------- int __thiscall sub_786A20(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x60u && (v2 = (int (__stdcall *)(_DWORD *))v1[23]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00786A40) -------------------------------------------------------- int *__cdecl sub_786A40(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78C610(v3 + 2, 1); else v4 = 0; v5 = dword_AB9288; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9288: using guessed type int dword_AB9288; //----- (00786AE0) -------------------------------------------------------- int __cdecl sub_786AE0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9288 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9288: using guessed type int dword_AB9288; //----- (00786B40) -------------------------------------------------------- int *__thiscall sub_786B40(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x34u && (v3 = (int (__stdcall *)(_DWORD *))v2[12]) != 0 ) { v4 = v3(v2); sub_786A40(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00786B80) -------------------------------------------------------- void __thiscall sub_786B80(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x38u && *(_DWORD *)(v2 + 52) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_786AE0(v4); (*(void (__stdcall **)(int, int))(v2 + 52))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (00786BF0) -------------------------------------------------------- int __thiscall sub_786BF0(_DWORD *this, int a2, int a3, int a4, _DWORD *a5) { int v5; // edi int v6; // eax int v7; // eax int v8; // esi int v9; // eax int result; // eax int v11; // [esp-8h] [ebp-18h] int v12; // [esp-4h] [ebp-14h] int v13; // [esp+0h] [ebp-10h] int v14; // [esp+4h] [ebp-Ch] v5 = *(this - 1); if ( *(_DWORD *)v5 >= 0x44u && *(_DWORD *)(v5 + 64) && (v6 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v6 + 4) && (v7 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v7 + 4) ) { v8 = cef_string_multimap_alloc(v13, v14); if ( v8 ) sub_77B910(a5, v8); v12 = v8; v11 = a4; if ( a4 ) (**(void (__thiscall ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( *(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4, a4, v8); v9 = sub_786AE0(v11); (*(void (__stdcall **)(int, _DWORD, _DWORD, int, int))(v5 + 64))( v5, *(_DWORD *)(a2 + 4), *(_DWORD *)(a3 + 4), v9, v12); if ( v8 ) cef_string_multimap_free(v8); result = a4; if ( a4 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4); } else { result = a4; if ( a4 ) result = (*(int (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); } return result; } // 9A5590: using guessed type int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); // 9A5594: using guessed type int __cdecl cef_string_multimap_free(_DWORD); //----- (00786CF0) -------------------------------------------------------- int __cdecl sub_786CF0(int a1) { _DWORD *v2; // eax _DWORD *v3; // esi void (__thiscall **v4)(_DWORD *); // edx if ( !a1 ) return 0; v2 = operator new(0x24u); if ( v2 ) v3 = sub_78CD30(v2); else v3 = 0; v4 = (void (__thiscall **)(_DWORD *))*v3; v3[2] = a1; (*v4)(v3); if ( a1 ) (*(void (**)(void))(*(_DWORD *)a1 + 4))(); return (int)(v3 + 4); } //----- (00786D40) -------------------------------------------------------- _DWORD *__thiscall sub_786D40(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FE18; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FE18; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0FEC8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0FED8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0FEC8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FE18: using guessed type int (*off_A0FE18[44])(); // A0FEC8: using guessed type int (*off_A0FEC8[2])[4]; // A0FED8: using guessed type int (*off_A0FED8[12])(); //----- (00786DC0) -------------------------------------------------------- _DWORD *__cdecl sub_786DC0(_DWORD *a1, int a2) { _DWORD *result; // eax int v3; // esi if ( a2 ) { if ( *(_DWORD *)(a2 - 12) == dword_AB928C ) { v3 = *(_DWORD *)(a2 - 8); if ( v3 ) (**(void (__thiscall ***)(_DWORD))v3)(*(_DWORD *)(a2 - 8)); (*(void (**)(void))(**(_DWORD **)(a2 - 4) + 4))(); *a1 = v3; if ( v3 ) { (**(void (__thiscall ***)(int))v3)(v3); (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3); } result = a1; } else { sub_78CCA0(a1); result = a1; } } else { result = a1; *a1 = 0; } return result; } // AB928C: using guessed type int dword_AB928C; //----- (00786E30) -------------------------------------------------------- _DWORD *__cdecl sub_786E30(_DWORD *a1, int a2) { _DWORD *result; // eax int v3; // esi if ( a2 ) { if ( *(_DWORD *)(a2 - 12) == dword_AB919C ) { v3 = *(_DWORD *)(a2 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (**)(void))(**(_DWORD **)(a2 - 4) + 4))(); *a1 = v3; if ( v3 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } result = a1; } else { sub_78CCA0(a1); result = a1; } } else { result = a1; *a1 = 0; } return result; } // AB919C: using guessed type int dword_AB919C; //----- (00786EC0) -------------------------------------------------------- bool __thiscall sub_786EC0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x28u && (v2 = (int (__stdcall *)(_DWORD *))v1[9]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00786EE0) -------------------------------------------------------- bool __thiscall sub_786EE0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x38u && (v2 = (int (__stdcall *)(_DWORD *))v1[13]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00786F00) -------------------------------------------------------- bool __thiscall sub_786F00(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x3Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[14]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00786F20) -------------------------------------------------------- bool __thiscall sub_786F20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x44u || !v2[16] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77D680(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[16])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (00786FC0) -------------------------------------------------------- bool __thiscall sub_786FC0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x48u && (v2 = (int (__stdcall *)(_DWORD *))v1[17]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00786FE0) -------------------------------------------------------- int __thiscall sub_786FE0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x4Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[18]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00787000) -------------------------------------------------------- int __thiscall sub_787000(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x50u && (v2 = (int (__stdcall *)(_DWORD *))v1[19]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00787020) -------------------------------------------------------- double __thiscall sub_787020(_DWORD *this) { _DWORD *v1; // eax double result; // st7 void (__stdcall *v3)(_DWORD *, _DWORD); // [esp+0h] [ebp-4h] v1 = (_DWORD *)*(this - 1); if ( *v1 < 0x54u ) return 0.0; v3 = (void (__stdcall *)(_DWORD *, _DWORD))v1[20]; if ( !v3 ) return 0.0; v3(v1, v3); return result; } //----- (00787050) -------------------------------------------------------- _DWORD *__thiscall sub_787050(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(char *, _DWORD *); // ecx const void *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi char v7; // [esp+0h] [ebp-40h] char v8; // [esp+20h] [ebp-20h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x58u && (v3 = (int (__stdcall *)(char *, _DWORD *))v2[21]) != 0 ) { v4 = (const void *)v3(&v7, v2); result = a2; qmemcpy(&v8, v4, 0x20u); a2[1] = 0; v6 = a2 + 1; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; a2[9] = 0; qmemcpy(a2 + 1, &v8, 0x20u); *a2 = &off_A10614; } else { result = a2; a2[1] = 0; a2[2] = 0; a2[3] = 0; a2[4] = 0; a2[5] = 0; a2[6] = 0; a2[7] = 0; a2[8] = 0; a2[9] = 0; *a2 = &off_A10614; } return result; } // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (007870F0) -------------------------------------------------------- bool __thiscall sub_7870F0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x60u && (v2 = (int (__stdcall *)(_DWORD *))v1[23]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00787110) -------------------------------------------------------- bool __thiscall sub_787110(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x64u && (v2 = (int (__stdcall *)(_DWORD *))v1[24]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00787130) -------------------------------------------------------- bool __thiscall sub_787130(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x6Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[26]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00787150) -------------------------------------------------------- bool __thiscall sub_787150(_DWORD *this, unsigned __int8 a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x74u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[28]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787180) -------------------------------------------------------- bool __thiscall sub_787180(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x78u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[29]) != 0 ) result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; else result = 0; return result; } //----- (007871B0) -------------------------------------------------------- bool __thiscall sub_7871B0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x7Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[30]) != 0 && a2 >= 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (007871E0) -------------------------------------------------------- bool __thiscall sub_7871E0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x80u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[31]) != 0 ) result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; else result = 0; return result; } //----- (00787210) -------------------------------------------------------- bool __thiscall sub_787210(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x84u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[32]) != 0 && a2 >= 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787250) -------------------------------------------------------- bool __thiscall sub_787250(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax bool v6; // bl int v8; // [esp-8h] [ebp-14h] int v9; // [esp-4h] [ebp-10h] v4 = (_DWORD *)*(this - 1); if ( *v4 < 0x90u || !v4[35] ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v9 = a4; v8 = a3; if ( a3 ) (**(void (__cdecl ***)(int, int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3, a4); v5 = sub_77D680(v8); v6 = ((int (__stdcall *)(_DWORD *, _DWORD, int, int))v4[35])(v4, *(_DWORD *)(a2 + 4), v5, v9) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v6; } //----- (00787300) -------------------------------------------------------- bool __thiscall sub_787300(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x94u || !v3[36] || a2 < 0 ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_77D680(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[36])(v3, a2, v4) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v5; } //----- (007873B0) -------------------------------------------------------- bool __thiscall sub_7873B0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, _DWORD, int, int); // ecx bool result; // al v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x98u && (v5 = (int (__stdcall *)(_DWORD *, _DWORD, int, int))v4[37]) != 0 ) result = v5(v4, *(_DWORD *)(a2 + 4), a3, a4) != 0; else result = 0; return result; } //----- (007873F0) -------------------------------------------------------- bool __userpurge sub_7873F0@(int a1@, int a2@, int a3@, int *a4) { _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // edi v4 = *(_DWORD **)(a1 - 4); if ( *v4 < 0x9Cu || !v4[38] ) return 0; v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); v7 = ((int (__cdecl *)(_DWORD *, int))v4[38])(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } return v7 != 0; } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (00787470) -------------------------------------------------------- bool __thiscall sub_787470(_DWORD *this, int a2) { int v2; // esi int v3; // eax bool v4; // bl bool result; // al int v6; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0xA0u && *(_DWORD *)(v2 + 156) ) { v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))a2)(a2); v3 = sub_786CF0(v6); v4 = (*(int (__stdcall **)(int, int))(v2 + 156))(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)a2 + 4))(); result = v4; } else { if ( a2 ) (*(void (**)(void))(*(_DWORD *)a2 + 4))(); result = 0; } return result; } //----- (007874F0) -------------------------------------------------------- _DWORD *__thiscall sub_7874F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax _DWORD *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xA4u && (v3 = (int (__stdcall *)(_DWORD *))v2[40]) != 0 ) { v4 = v3(v2); sub_786DC0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00787530) -------------------------------------------------------- int __thiscall sub_787530(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0xA8u && (v2 = (int (__stdcall *)(_DWORD *))v1[41]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00787550) -------------------------------------------------------- int __thiscall sub_787550(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xACu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[42]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00787580) -------------------------------------------------------- int __thiscall sub_787580(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0xB0u && (v2 = (int (__stdcall *)(_DWORD *))v1[43]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (007875A0) -------------------------------------------------------- int __thiscall sub_7875A0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xB4u && (v3 = (int (__stdcall *)(_DWORD *))v2[44]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00787630) -------------------------------------------------------- _DWORD *__thiscall sub_787630(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax _DWORD *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xB8u && (v3 = (int (__stdcall *)(_DWORD *))v2[45]) != 0 ) { v4 = v3(v2); sub_786E30(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00787670) -------------------------------------------------------- int __cdecl sub_787670(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB9264 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB9264: using guessed type int dword_AB9264; //----- (007876D0) -------------------------------------------------------- int *__thiscall sub_7876D0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x68u && (v3 = (int (__stdcall *)(_DWORD *))v2[25]) != 0 ) { v4 = v3(v2); sub_785390(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00787710) -------------------------------------------------------- int *__thiscall sub_787710(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, _DWORD); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x88u && (v4 = (int (__stdcall *)(_DWORD *, _DWORD))v3[33]) != 0 ) { v5 = v4(v3, *(_DWORD *)(a3 + 4)); sub_77D5E0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00787760) -------------------------------------------------------- int *__thiscall sub_787760(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x8Cu && (v4 = (int (__stdcall *)(_DWORD *, int))v3[34]) != 0 && a3 >= 0 ) { v5 = v4(v3, a3); sub_77D5E0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007877B0) -------------------------------------------------------- int *__thiscall sub_7877B0(_DWORD *this, int *a2, int a3, _DWORD *a4) { int v4; // edi unsigned int v5; // esi unsigned int v6; // ebx char *v7; // eax int v8; // eax int v9; // edi int v10; // eax int v11; // edi int *v12; // esi int v14; // [esp-Ch] [ebp-20h] unsigned int v15; // [esp-8h] [ebp-1Ch] int v16; // [esp-4h] [ebp-18h] unsigned int v17; // [esp-4h] [ebp-18h] int v18; // [esp+Ch] [ebp-8h] char *v19; // [esp+10h] [ebp-4h] v4 = *(this - 1); v18 = *(this - 1); if ( *(_DWORD *)v4 >= 0xBCu && *(_DWORD *)(v4 + 184) ) { v5 = 0; v6 = (a4[1] - *a4) >> 2; if ( v6 ) { v7 = (char *)operator new[](4 * v6); v19 = v7; if ( v7 && v6 ) { do { v8 = *(_DWORD *)(*a4 + 4 * v5); v9 = 4 * v5; v16 = v8; if ( v8 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(v8 + 4) + 4) + v8 + 4))(v8); ++v5; *(_DWORD *)&v19[v9] = sub_77D680(v16); } while ( v5 < v6 ); v4 = v18; v5 = (unsigned int)v19; } else { v5 = (unsigned int)v7; } } v17 = v5; v15 = v6; v14 = a3; if ( a3 ) (**(void (__cdecl ***)(int, unsigned int, void *))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( a3, v6, (void *)v5); v10 = sub_77D680(v14); v11 = (*(int (__stdcall **)(int, int, unsigned int, unsigned int))(v4 + 184))(v4, v10, v15, v17); if ( v5 ) operator delete[]((void *)v5); v12 = a2; sub_77D5E0(a2, v11); } else { v12 = a2; *a2 = 0; } if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v12; } //----- (007878E0) -------------------------------------------------------- int *__thiscall sub_7878E0(_DWORD *this, int *a2, int a3, int a4, _DWORD *a5) { int v5; // edi int *v6; // esi unsigned int v7; // esi unsigned int v8; // ebx char *v9; // eax int v10; // eax int v11; // edi int v12; // eax int v13; // edi int v15; // [esp-10h] [ebp-24h] int v16; // [esp-Ch] [ebp-20h] int v17; // [esp-Ch] [ebp-20h] unsigned int v18; // [esp-8h] [ebp-1Ch] int v19; // [esp-4h] [ebp-18h] unsigned int v20; // [esp-4h] [ebp-18h] int v21; // [esp+Ch] [ebp-8h] char *v22; // [esp+10h] [ebp-4h] v5 = *(this - 1); v21 = *(this - 1); if ( *(_DWORD *)v5 >= 0xC0u && *(_DWORD *)(v5 + 188) ) { if ( a3 ) { v7 = 0; v8 = (a5[1] - *a5) >> 2; if ( v8 ) { v9 = (char *)operator new[](4 * v8); v22 = v9; if ( v9 && v8 ) { do { v10 = *(_DWORD *)(*a5 + 4 * v7); v11 = 4 * v7; v19 = v10; if ( v10 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(v10 + 4) + 4) + v10 + 4))(v10); ++v7; *(_DWORD *)&v22[v11] = sub_77D680(v19); } while ( v7 < v8 ); v5 = v21; v7 = (unsigned int)v22; } else { v7 = (unsigned int)v9; } } v20 = v7; v18 = v8; v16 = a4; if ( a4 ) (**(void (__cdecl ***)(int, unsigned int, void *))(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4))( a4, v8, (void *)v7); v17 = sub_77D680(v16); v15 = a3; if ( a3 ) (**(void (__thiscall ***)(int, int, int, unsigned int, unsigned int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))( *(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4, a3, v17, v18, v20); v12 = sub_787670(v15); v13 = (*(int (__stdcall **)(int, int, int, unsigned int, unsigned int))(v5 + 188))(v5, v12, v17, v18, v20); if ( v7 ) operator delete[]((void *)v7); v6 = a2; sub_77D5E0(a2, v13); if ( a3 ) (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4); } else { v6 = a2; *a2 = 0; } } else { v6 = a2; *a2 = 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); } if ( a4 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a4 + 4) + 4) + a4 + 4) + 4))(); return v6; } //----- (00787A80) -------------------------------------------------------- _DWORD *__thiscall sub_787A80(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FF88; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FF88; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0F854; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A0FFF8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0F854; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F854: using guessed type int (*off_A0F854[2])[4]; // A0FF88: using guessed type int (*off_A0FF88[31])(); // A0FFF8: using guessed type int (*off_A0FFF8[3])(); //----- (00787B00) -------------------------------------------------------- int sub_787B00() { return 0; } //----- (00787B20) -------------------------------------------------------- bool __thiscall sub_787B20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x20u || !v2[7] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DEA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[7])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (00787BC0) -------------------------------------------------------- bool __thiscall sub_787BC0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x24u || !v2[8] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_77DEA0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[8])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (00787C60) -------------------------------------------------------- bool __thiscall sub_787C60(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x2Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[10]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787C90) -------------------------------------------------------- bool __thiscall sub_787C90(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x34u && (v2 = (int (__stdcall *)(_DWORD *))v1[12]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00787CB0) -------------------------------------------------------- bool __thiscall sub_787CB0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x38u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[13]) != 0 && a2 >= 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787CE0) -------------------------------------------------------- int __thiscall sub_787CE0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x3Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[14]) != 0 && a2 >= 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00787D10) -------------------------------------------------------- bool __thiscall sub_787D10(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[16]) != 0 && a2 >= 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787D40) -------------------------------------------------------- int __thiscall sub_787D40(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[17]) != 0 && a2 >= 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00787D70) -------------------------------------------------------- double __thiscall sub_787D70(_DWORD *this, int a2) { _DWORD *v2; // eax double result; // st7 void (__stdcall *v4)(_DWORD *, int, _DWORD); // [esp+0h] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x4Cu ) return 0.0; v4 = (void (__stdcall *)(_DWORD *, int, _DWORD))v2[18]; if ( !v4 || a2 < 0 ) return 0.0; v4(v2, a2, v4); return result; } //----- (00787DA0) -------------------------------------------------------- int __thiscall sub_787DA0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx _DWORD *v5; // eax int result; // eax void **v7; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x50u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[19]) != 0 && a3 >= 0 ) { v5 = (_DWORD *)v4(v3, a3); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v5); sub_778780((_DWORD *)a2, (int)&v7); sub_405F40(&v7); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00787E10) -------------------------------------------------------- bool __thiscall sub_787E10(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x64u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[24]) != 0 && a2 >= 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00787E40) -------------------------------------------------------- bool __thiscall sub_787E40(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x68u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[25]) != 0 && a2 >= 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00787E80) -------------------------------------------------------- bool __thiscall sub_787E80(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x6Cu && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[26]) != 0 && a2 >= 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00787EC0) -------------------------------------------------------- bool __thiscall sub_787EC0(_DWORD *this, int a2, double a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x70u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD, _DWORD))v3[27]) != 0 && a2 >= 0 ) result = v4(v3, a2, LODWORD(a3), HIDWORD(a3)) != 0; else result = 0; return result; } //----- (00787F00) -------------------------------------------------------- bool __thiscall sub_787F00(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x74u ) return 0; v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[28]; if ( !v4 ) return 0; if ( a2 >= 0 ) return v4(v3, a2, *(_DWORD *)(a3 + 4)) != 0; return 0; } //----- (00787F40) -------------------------------------------------------- bool __thiscall sub_787F40(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x80u || !v3[31] || a2 < 0 ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_77DEA0(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[31])(v3, a2, v4) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v5; } //----- (00787FF0) -------------------------------------------------------- int *__thiscall sub_787FF0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x28u && (v3 = (int (__stdcall *)(_DWORD *))v2[9]) != 0 ) { v4 = v3(v2); sub_77DE00(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00788030) -------------------------------------------------------- int *__thiscall sub_788030(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x40u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[15]) != 0 && a3 >= 0 ) { v5 = v4(v3, a3); sub_778AF0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00788070) -------------------------------------------------------- int *__thiscall sub_788070(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x54u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[20]) != 0 && a3 >= 0 ) { v5 = v4(v3, a3); sub_778A50(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007880B0) -------------------------------------------------------- int *__thiscall sub_7880B0(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x58u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[21]) != 0 && a3 >= 0 ) { v5 = v4(v3, a3); sub_77B390(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007880F0) -------------------------------------------------------- int *__thiscall sub_7880F0(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x5Cu && (v4 = (int (__stdcall *)(_DWORD *, int))v3[22]) != 0 && a3 >= 0 ) { v5 = v4(v3, a3); sub_77DE00(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00788130) -------------------------------------------------------- bool __thiscall sub_788130(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x60u || !v3[23] || a2 < 0 ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_778B90(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[23])(v3, a2, v4) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v5; } //----- (007881E0) -------------------------------------------------------- bool __thiscall sub_7881E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x78u || !v3[29] || a2 < 0 ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_77D7E0(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[29])(v3, a2, v4) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v5; } //----- (00788290) -------------------------------------------------------- bool __thiscall sub_788290(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax bool v5; // bl int v7; // [esp-4h] [ebp-14h] v3 = (_DWORD *)*(this - 1); if ( *v3 < 0x7Cu || !v3[30] || a2 < 0 ) { if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return 0; } if ( !a3 ) return 0; v7 = a3; if ( a3 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4))(a3); v4 = sub_77DDA0(v7); v5 = ((int (__stdcall *)(_DWORD *, int, int))v3[30])(v3, a2, v4) != 0; if ( a3 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a3 + 4) + 4) + a3 + 4) + 4))(); return v5; } //----- (00788340) -------------------------------------------------------- int __thiscall sub_788340(_DWORD *this, char a2) { _DWORD *v2; // esi int result; // eax v2 = this; *this = &CefBase::`vftable'; result = (int)(this - 2); if ( a2 & 1 ) { operator delete(this - 2); result = (int)(v2 - 2); } return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; //----- (00788370) -------------------------------------------------------- _DWORD *__thiscall sub_788370(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F8C0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10068; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0F910; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F8C0: using guessed type int (*off_A0F8C0[20])(); // A0F910: using guessed type int (*off_A0F910[2])[4]; // A10068: using guessed type int (*off_A10068[3])(); //----- (007883F0) -------------------------------------------------------- int __thiscall sub_7883F0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x18u && (v2 = (int (__stdcall *)(_DWORD *))v1[5]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00788410) -------------------------------------------------------- int __thiscall sub_788410(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x3Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[14]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00788430) -------------------------------------------------------- int __thiscall sub_788430(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *))v2[17]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007884B0) -------------------------------------------------------- bool __userpurge sub_7884B0@(int a1@, int a2@, int a3@, int *a4) { _DWORD *v4; // edi int v5; // eax int v6; // esi int v7; // edi v4 = *(_DWORD **)(a1 - 4); if ( *v4 < 0x4Cu || !v4[18] ) return 0; v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); v7 = ((int (__cdecl *)(_DWORD *, int))v4[18])(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } return v7 != 0; } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (00788530) -------------------------------------------------------- bool __thiscall sub_788530(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x50u && (v2 = (int (__stdcall *)(_DWORD *))v1[19]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00788550) -------------------------------------------------------- int __thiscall sub_788550(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x58u && (v2 = (int (__stdcall *)(_DWORD *))v1[21]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00788570) -------------------------------------------------------- bool __thiscall sub_788570(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x5Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[22]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (00788590) -------------------------------------------------------- _DWORD *__thiscall sub_788590(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0F970; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0F970; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A100B8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A100C8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A100B8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0F970: using guessed type int (*off_A0F970[49])(); // A100B8: using guessed type int (*off_A100B8[2])[4]; // A100C8: using guessed type int (*off_A100C8[3])(); //----- (00788610) -------------------------------------------------------- _DWORD *__thiscall sub_788610(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0F970; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A100B8; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F970: using guessed type int (*off_A0F970[49])(); // A100B8: using guessed type int (*off_A100B8[2])[4]; //----- (00788670) -------------------------------------------------------- bool __thiscall sub_788670(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x20u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[7]) != 0 && (v5 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, a2, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (007886C0) -------------------------------------------------------- bool __thiscall sub_7886C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x24u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[8]) != 0 && (v5 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, a2, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (00788710) -------------------------------------------------------- bool __thiscall sub_788710(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, int, int, int); // edx int v6; // ecx bool result; // al v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x28u && (v5 = (int (__stdcall *)(_DWORD *, int, int, int))v4[9]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { result = v5(v4, a2, v6, a4) != 0; } else { result = 0; } return result; } //----- (00788760) -------------------------------------------------------- bool __thiscall sub_788760(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x30u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[11]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788790) -------------------------------------------------------- bool __thiscall sub_788790(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx bool result; // al v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x34u && (v5 = (int (__stdcall *)(_DWORD *, int, int, _DWORD))v4[12]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { result = v5(v4, a2, a3, *(_DWORD *)(a4 + 4)) != 0; } else { result = 0; } return result; } //----- (007887E0) -------------------------------------------------------- bool __thiscall sub_7887E0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax int (__stdcall *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx bool result; // al v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x38u && (v5 = (int (__stdcall *)(_DWORD *, int, int, _DWORD))v4[13]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { result = v5(v4, a2, a3, *(_DWORD *)(a4 + 4)) != 0; } else { result = 0; } return result; } //----- (00788830) -------------------------------------------------------- bool __thiscall sub_788830(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax int (__stdcall *v6)(_DWORD *, int, int, int, int); // edx int v7; // ecx bool result; // al v5 = (_DWORD *)*(this - 1); if ( *v5 >= 0x3Cu && (v6 = (int (__stdcall *)(_DWORD *, int, int, int, int))v5[14]) != 0 && (v7 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v7 + 4) ) { result = v6(v5, a2, a3, v7, a5) != 0; } else { result = 0; } return result; } //----- (00788880) -------------------------------------------------------- bool __thiscall sub_788880(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[16]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (007888B0) -------------------------------------------------------- bool __thiscall sub_7888B0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[17]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (007888E0) -------------------------------------------------------- int __thiscall sub_7888E0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x4Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[18]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788910) -------------------------------------------------------- int __thiscall sub_788910(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x50u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[19]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788940) -------------------------------------------------------- bool __thiscall sub_788940(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x54u && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[20]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788970) -------------------------------------------------------- int __thiscall sub_788970(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx _DWORD *v5; // eax void *v6; // esi int result; // eax void **v8; // [esp+4h] [ebp-Ch] void *v9; // [esp+8h] [ebp-8h] char v10; // [esp+Ch] [ebp-4h] v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x58u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[21]) != 0 ) { v5 = (_DWORD *)v4(v3, a3); v8 = &CefStringBase::`vftable'; v9 = 0; v10 = 0; sub_7787E0((int)&v8, v5); sub_778780((_DWORD *)a2, (int)&v8); v6 = v9; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v6); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00788A00) -------------------------------------------------------- int __thiscall sub_788A00(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx _DWORD *v5; // eax void *v6; // esi int result; // eax void **v8; // [esp+4h] [ebp-Ch] void *v9; // [esp+8h] [ebp-8h] char v10; // [esp+Ch] [ebp-4h] v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x5Cu && (v4 = (int (__stdcall *)(_DWORD *, int))v3[22]) != 0 ) { v5 = (_DWORD *)v4(v3, a3); v8 = &CefStringBase::`vftable'; v9 = 0; v10 = 0; sub_7787E0((int)&v8, v5); sub_778780((_DWORD *)a2, (int)&v8); v6 = v9; if ( v9 ) { if ( v10 ) { cef_string_utf16_clear(v9); operator delete(v6); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00788A90) -------------------------------------------------------- bool __thiscall sub_788A90(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x60u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[23]) != 0 && (v5 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, a2, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (00788AE0) -------------------------------------------------------- bool __thiscall sub_788AE0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // edx int v5; // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x64u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[24]) != 0 && (v5 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v5 + 4) ) { result = v4(v3, a2, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (00788B30) -------------------------------------------------------- int __thiscall sub_788B30(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x68u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[25]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788B60) -------------------------------------------------------- int __thiscall sub_788B60(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x6Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[26]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788B90) -------------------------------------------------------- int __thiscall sub_788B90(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x70u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[27]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788BC0) -------------------------------------------------------- int __thiscall sub_788BC0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx int result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x74u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[28]) != 0 ) result = v3(v2, a2); else result = 0; return result; } //----- (00788BF0) -------------------------------------------------------- bool __thiscall sub_788BF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x78u && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[29]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788C20) -------------------------------------------------------- bool __thiscall sub_788C20(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x7Cu && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[30]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788C50) -------------------------------------------------------- bool __thiscall sub_788C50(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x88u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[33]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788C80) -------------------------------------------------------- bool __thiscall sub_788C80(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x8Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[34]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788CB0) -------------------------------------------------------- bool __thiscall sub_788CB0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x90u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[35]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788CF0) -------------------------------------------------------- bool __thiscall sub_788CF0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x94u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[36]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788D30) -------------------------------------------------------- bool __thiscall sub_788D30(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x98u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[37]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788D60) -------------------------------------------------------- bool __thiscall sub_788D60(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x9Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[38]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788D90) -------------------------------------------------------- bool __thiscall sub_788D90(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0xA0u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[39]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788DD0) -------------------------------------------------------- bool __thiscall sub_788DD0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0xA4u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[40]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788E10) -------------------------------------------------------- bool __thiscall sub_788E10(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xA8u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[41]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788E40) -------------------------------------------------------- bool __thiscall sub_788E40(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xACu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[42]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788E70) -------------------------------------------------------- bool __thiscall sub_788E70(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0xB0u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[43]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788EB0) -------------------------------------------------------- bool __thiscall sub_788EB0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, _DWORD); // ecx bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0xB4u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[44]) != 0 ) result = v4(v3, a2, a3) != 0; else result = 0; return result; } //----- (00788EF0) -------------------------------------------------------- bool __thiscall sub_788EF0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xB8u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[45]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788F20) -------------------------------------------------------- bool __thiscall sub_788F20(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xBCu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[46]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00788F50) -------------------------------------------------------- bool __thiscall sub_788F50(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6) { _DWORD *v6; // eax int (__stdcall *v7)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD); // ecx bool result; // al v6 = (_DWORD *)*(this - 1); if ( *v6 >= 0xC0u && (v7 = (int (__stdcall *)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD))v6[47]) != 0 ) result = v7(v6, a2, a3, a4, a5, a6) != 0; else result = 0; return result; } //----- (00788FA0) -------------------------------------------------------- bool __thiscall sub_788FA0(_DWORD *this, int a2, int a3, unsigned __int8 a4, unsigned __int8 a5, unsigned __int8 a6) { _DWORD *v6; // eax int (__stdcall *v7)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD); // ecx bool result; // al v6 = (_DWORD *)*(this - 1); if ( *v6 >= 0xC4u && (v7 = (int (__stdcall *)(_DWORD *, int, int, _DWORD, _DWORD, _DWORD))v6[48]) != 0 ) result = v7(v6, a2, a3, a4, a5, a6) != 0; else result = 0; return result; } //----- (00788FF0) -------------------------------------------------------- bool __thiscall sub_788FF0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xC8u && (v3 = (int (__stdcall *)(_DWORD *, int))v2[49]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00789020) -------------------------------------------------------- bool __thiscall sub_789020(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0xCCu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[50]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (00789050) -------------------------------------------------------- bool __thiscall sub_789050(_DWORD *this, int a2, int a3, bool *a4, bool *a5, bool *a6) { _DWORD *v6; // eax bool *v7; // ebx bool *v8; // esi bool *v9; // edi BOOL v10; // edx BOOL v11; // ecx int v12; // eax bool v13; // zf bool v14; // dl v6 = (_DWORD *)*(this - 1); if ( *v6 < 0xD0u || !v6[51] ) return 0; v7 = a6; v8 = a4; v9 = a5; v10 = *a5; a4 = (bool *)*a4; v11 = *a6; a5 = (bool *)v10; a6 = (bool *)v11; v12 = ((int (__stdcall *)(_DWORD *, int, int, bool **, bool **, bool **))v6[51])(v6, a2, a3, &a4, &a5, &a6); v13 = a5 == 0; *v8 = a4 != 0; v14 = !v13; v13 = a6 == 0; *v9 = v14; *v7 = !v13; return v12 != 0; } //----- (007890D0) -------------------------------------------------------- bool __thiscall sub_7890D0(_DWORD *this, int a2, int a3, bool *a4, bool *a5, bool *a6) { _DWORD *v6; // eax bool *v7; // ebx bool *v8; // esi bool *v9; // edi BOOL v10; // edx BOOL v11; // ecx int v12; // eax bool v13; // zf bool v14; // dl v6 = (_DWORD *)*(this - 1); if ( *v6 < 0xD4u || !v6[52] ) return 0; v7 = a6; v8 = a4; v9 = a5; v10 = *a5; a4 = (bool *)*a4; v11 = *a6; a5 = (bool *)v10; a6 = (bool *)v11; v12 = ((int (__stdcall *)(_DWORD *, int, int, bool **, bool **, bool **))v6[52])(v6, a2, a3, &a4, &a5, &a6); v13 = a5 == 0; *v8 = a4 != 0; v14 = !v13; v13 = a6 == 0; *v9 = v14; *v7 = !v13; return v12 != 0; } //----- (00789150) -------------------------------------------------------- int *__userpurge sub_789150@(int a1@, int a2@, int *a3, int a4, int a5) { _DWORD *v5; // eax int (__cdecl *v6)(_DWORD *, int, int, int, _DWORD); // edx int v7; // ecx int v8; // eax int *result; // eax v5 = *(_DWORD **)(a1 - 4); if ( *v5 >= 0x2Cu && (v6 = (int (__cdecl *)(_DWORD *, int, int, int, _DWORD))v5[10]) != 0 && (v7 = *(_DWORD *)(a5 + 4)) != 0 && *(_DWORD *)(v7 + 4) ) { v8 = v6(v5, a4, v7, a2, 0); sub_77E8D0(a3, v8); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (007891B0) -------------------------------------------------------- int *__userpurge sub_7891B0@(int a1@, int a2@, int *a3, int a4, int a5, int a6) { _DWORD *v6; // eax int (__cdecl *v7)(_DWORD *, int, int, int, int, _DWORD); // edx int v8; // ecx int v9; // eax int *result; // eax v6 = *(_DWORD **)(a1 - 4); if ( *v6 >= 0x40u && (v7 = (int (__cdecl *)(_DWORD *, int, int, int, int, _DWORD))v6[15]) != 0 && (v8 = *(_DWORD *)(a6 + 4)) != 0 && *(_DWORD *)(v8 + 4) ) { v9 = v7(v6, a4, a5, v8, a2, 0); sub_77E8D0(a3, v9); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (00789210) -------------------------------------------------------- int *__thiscall sub_789210(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x80u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[31]) != 0 ) { v5 = v4(v3, a3); sub_77E8D0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00789250) -------------------------------------------------------- int *__thiscall sub_789250(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x84u && (v4 = (int (__stdcall *)(_DWORD *, int))v3[32]) != 0 ) { v5 = v4(v3, a3); sub_77E8D0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (007892A0) -------------------------------------------------------- _DWORD *__thiscall sub_7892A0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A1019C; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A1018C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A1018C: using guessed type int (*off_A1018C[2])[4]; // A1019C: using guessed type int (__stdcall *off_A1019C)(int, int); // A101A4: using guessed type int (*off_A101A4[2])(); // A10490: using guessed type int (*off_A10490[2])[4]; //----- (00789320) -------------------------------------------------------- _DWORD *__thiscall sub_789320(_DWORD *this, int a2, int a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x14u ) { v4 = (int (__stdcall *)(_DWORD *, int, int))result[4]; if ( v4 ) result = (_DWORD *)v4(result, a2, a3); } return result; } //----- (00789350) -------------------------------------------------------- _DWORD *__thiscall sub_789350(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A101AC; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101A4: using guessed type int (*off_A101A4[2])(); // A101AC: using guessed type int (__stdcall *off_A101AC)(int, int); // A10490: using guessed type int (*off_A10490[2])[4]; //----- (007893D0) -------------------------------------------------------- void __userpurge sub_7893D0(int a1@, int a2@, int a3@, int a4, _DWORD *a5) { int v5; // edi int v6; // esi v5 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v5 >= 0x14u && *(_DWORD *)(v5 + 16) && a4 >= 0 ) { v6 = cef_string_list_alloc(a3, a2); if ( v6 ) sub_77B6F0(a5, v6); (*(void (__stdcall **)(int))(v5 + 16))(v5); if ( v6 ) cef_string_list_free(v6); } } // 7893D0: could not find valid save-restore pair for ebx // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (00789430) -------------------------------------------------------- _DWORD *__thiscall sub_789430(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x18u ) { v2 = (int (__stdcall *)(_DWORD *))result[5]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (00789450) -------------------------------------------------------- _DWORD *__thiscall sub_789450(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A101B4; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); // A101B4: using guessed type int (__stdcall *off_A101B4)(int, char); //----- (007894D0) -------------------------------------------------------- _DWORD *__thiscall sub_7894D0(_DWORD *this, int a2, unsigned __int8 a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, _DWORD, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x14u ) { v4 = (int (__stdcall *)(_DWORD *, _DWORD, _DWORD))result[4]; if ( v4 ) result = (_DWORD *)v4(result, *(_DWORD *)(a2 + 4), a3); } return result; } //----- (00789500) -------------------------------------------------------- _DWORD *__thiscall sub_789500(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FA68; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FA68; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA58; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A101B8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FA58; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA58: using guessed type int (*off_A0FA58)[4]; // A0FA68: using guessed type int (*off_A0FA68[17])(); // A101B8: using guessed type int (*off_A101B8[8])(); //----- (00789580) -------------------------------------------------------- bool __thiscall sub_789580(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x18u && (v2 = (int (__stdcall *)(_DWORD *))v1[5]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (007895A0) -------------------------------------------------------- int __thiscall sub_7895A0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x24u && (v2 = (int (__stdcall *)(_DWORD *))v1[8]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (007895C0) -------------------------------------------------------- int __thiscall sub_7895C0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x2Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[10]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (007895E0) -------------------------------------------------------- int __thiscall sub_7895E0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x30u && (v2 = (int (__stdcall *)(_DWORD *))v1[11]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00789600) -------------------------------------------------------- _DWORD *__thiscall sub_789600(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(char *, _DWORD *); // ecx const void *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi char v7; // [esp+0h] [ebp-40h] char v8; // [esp+20h] [ebp-20h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x34u && (v3 = (int (__stdcall *)(char *, _DWORD *))v2[12]) != 0 ) { v4 = (const void *)v3(&v7, v2); result = a2; qmemcpy(&v8, v4, 0x20u); a2[1] = 0; v6 = a2 + 1; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; a2[9] = 0; qmemcpy(a2 + 1, &v8, 0x20u); *a2 = &off_A10614; } else { result = a2; a2[1] = 0; a2[2] = 0; a2[3] = 0; a2[4] = 0; a2[5] = 0; a2[6] = 0; a2[7] = 0; a2[8] = 0; a2[9] = 0; *a2 = &off_A10614; } return result; } // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (007896A0) -------------------------------------------------------- _DWORD *__thiscall sub_7896A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(char *, _DWORD *); // ecx const void *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi char v7; // [esp+0h] [ebp-40h] char v8; // [esp+20h] [ebp-20h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x38u && (v3 = (int (__stdcall *)(char *, _DWORD *))v2[13]) != 0 ) { v4 = (const void *)v3(&v7, v2); result = a2; qmemcpy(&v8, v4, 0x20u); a2[1] = 0; v6 = a2 + 1; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; a2[9] = 0; qmemcpy(a2 + 1, &v8, 0x20u); *a2 = &off_A10614; } else { result = a2; a2[1] = 0; a2[2] = 0; a2[3] = 0; a2[4] = 0; a2[5] = 0; a2[6] = 0; a2[7] = 0; a2[8] = 0; a2[9] = 0; *a2 = &off_A10614; } return result; } // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (00789740) -------------------------------------------------------- int __thiscall sub_789740(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x40u && (v2 = (int (__stdcall *)(_DWORD *))v1[15]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (00789760) -------------------------------------------------------- int __thiscall sub_789760(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *))v2[16]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007897E0) -------------------------------------------------------- int __thiscall sub_7897E0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x4Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[18]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (00789860) -------------------------------------------------------- int __thiscall sub_789860(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x54u && (v3 = (int (__stdcall *)(_DWORD *))v2[20]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (007898E0) -------------------------------------------------------- _DWORD *__thiscall sub_7898E0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101FC; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101FC; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A10474; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10218; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A10208; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101FC: using guessed type int (*off_A101FC[3])(); // A10208: using guessed type int (*off_A10208)[4]; // A10218: using guessed type int (*off_A10218[3])(); // A10474: using guessed type int (*off_A10474)[4]; //----- (00789960) -------------------------------------------------------- _DWORD *__thiscall sub_789960(_DWORD *this, char a2) { return sub_785110((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (00789970) -------------------------------------------------------- _DWORD *__thiscall sub_789970(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10224; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A10228; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); // A10224: using guessed type int (__stdcall *off_A10224)(char); // A10228: using guessed type int (*off_A10228)[4]; //----- (007899F0) -------------------------------------------------------- _DWORD *__thiscall sub_7899F0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10238; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A10228; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); // A10228: using guessed type int (*off_A10228)[4]; // A10238: using guessed type int (__stdcall *off_A10238)(char, int); //----- (00789A70) -------------------------------------------------------- _DWORD *__thiscall sub_789A70(_DWORD *this, unsigned __int8 a2, int a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, _DWORD, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x14u ) { v4 = (int (__stdcall *)(_DWORD *, _DWORD, _DWORD))result[4]; if ( v4 ) result = (_DWORD *)v4(result, a2, *(_DWORD *)(a3 + 4)); } return result; } //----- (00789AA0) -------------------------------------------------------- _DWORD *__cdecl sub_789AA0(_DWORD *a1, int a2) { int v2; // eax v2 = *(_DWORD *)(a2 - 8); *a1 = v2; if ( v2 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(); return a1; } //----- (00789AE0) -------------------------------------------------------- int __stdcall sub_789AE0(int a1) { int result; // eax result = a1; if ( a1 ) result = (***(int (__cdecl ****)(_DWORD))(a1 - 4))(0); return result; } //----- (00789B10) -------------------------------------------------------- int __stdcall sub_789B10(int a1) { int result; // eax int v2; // esi unsigned __int8 v3; // bl result = a1; if ( a1 ) { v2 = *(_DWORD *)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4))(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4); v3 = (**(int (__thiscall ***)(int))v2)(v2); (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 4) + 4) + v2 + 4) + 4))(); result = v3; } return result; } //----- (00789B70) -------------------------------------------------------- int __stdcall sub_789B70(int a1, int a2, int a3, int *a4, int a5, int a6, _DWORD *a7) { int *v8; // ebx int v9; // edi int **v10; // esi int *v11; // edx int v12; // ST14_4 _DWORD *v13; // eax int v14; // edi int *v15; // ecx int v16; // [esp-Ch] [ebp-10h] if ( !a1 ) return 2; v8 = a4; if ( !a4 ) return (int)a4 + 2; v9 = a5; if ( !a5 ) return a5 + 2; v10 = (int **)a7; if ( !a7 ) return (int)a7 + 2; v11 = (int *)*a7; v12 = a1; a1 = *a4; a4 = v11; v13 = sub_789AA0(&a5, v12); v14 = (*(int (__stdcall **)(int, int, int *, int, int, int **, int))(*(_DWORD *)*v13 + 4))( a2, a3, &a1, v9, a6, &a4, v16); if ( a5 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 4) + 4) + a5 + 4) + 4))(); v15 = a4; *v8 = a1; *v10 = v15; return v14; } //----- (00789CA0) -------------------------------------------------------- _DWORD *__thiscall sub_789CA0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A0FAAC; this[10] = 0; this[1] = dword_AB9248; result[3] = result; this[4] = 24; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A0FAAC; this[8] = sub_789B10; this[9] = sub_789B70; return result; } // A0FAAC: using guessed type int (*off_A0FAAC)[28]; // AB9248: using guessed type int dword_AB9248; //----- (00789CF0) -------------------------------------------------------- _DWORD *__thiscall sub_789CF0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A1023C; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A1018C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A1018C: using guessed type int (*off_A1018C[2])[4]; // A101A4: using guessed type int (*off_A101A4[2])(); // A1023C: using guessed type int (__stdcall *off_A1023C)(int, int); // A10490: using guessed type int (*off_A10490[2])[4]; //----- (00789D70) -------------------------------------------------------- _DWORD *__thiscall sub_789D70(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A101A4; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A10490; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A101A4: using guessed type int (*off_A101A4[2])(); // A10490: using guessed type int (*off_A10490[2])[4]; //----- (00789DD0) -------------------------------------------------------- void __thiscall sub_789DD0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx void (__stdcall *v4)(_DWORD *, int, _DWORD); // esi int v5; // edx int v6; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x14u ) { v4 = (void (__stdcall *)(_DWORD *, int, _DWORD))v3[4]; if ( v4 ) { v5 = *(_DWORD *)(a2 + 4); if ( v5 ) { if ( *(_DWORD *)(v5 + 4) ) { v6 = *(_DWORD *)(a3 + 4); if ( v6 ) { if ( *(_DWORD *)(v6 + 4) ) v4(v3, v5, *(_DWORD *)(a3 + 4)); } } } } } } //----- (00789E20) -------------------------------------------------------- _DWORD *__thiscall sub_789E20(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10244; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101A4: using guessed type int (*off_A101A4[2])(); // A10244: using guessed type int (__stdcall *off_A10244)(char); // A10490: using guessed type int (*off_A10490[2])[4]; //----- (00789EA0) -------------------------------------------------------- _DWORD *__thiscall sub_789EA0(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x14u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[4]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00789EC0) -------------------------------------------------------- _DWORD *__thiscall sub_789EC0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A1024C; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A1024C; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FAE4; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10274; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FAE4; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FAE4: using guessed type int (*off_A0FAE4)[4]; // A1024C: using guessed type int (*off_A1024C[12])(); // A10274: using guessed type int (*off_A10274[2])(); //----- (00789F40) -------------------------------------------------------- _DWORD *__thiscall sub_789F40(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A1024C; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A0FAE4; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FAE4: using guessed type int (*off_A0FAE4)[4]; // A1024C: using guessed type int (*off_A1024C[12])(); //----- (00789FA0) -------------------------------------------------------- _DWORD *__thiscall sub_789FA0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x1Cu ) { v3 = (int (__stdcall *)(_DWORD *, int))result[6]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (00789FC0) -------------------------------------------------------- int __thiscall sub_789FC0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x20u && (v3 = (int (__stdcall *)(_DWORD *))v2[7]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078A040) -------------------------------------------------------- _DWORD *__thiscall sub_78A040(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x24u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[8]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0078A080) -------------------------------------------------------- _DWORD *__thiscall sub_78A080(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x2Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[10]; if ( v3 ) { v4 = *(_DWORD *)(a2 + 4); if ( v4 ) { if ( *(_DWORD *)(v4 + 4) ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } } } return result; } //----- (0078A0C0) -------------------------------------------------------- int __thiscall sub_78A0C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax bool v4; // cf int (__stdcall *v5)(_DWORD *, int); // edx int v6; // ecx _DWORD *v7; // eax int result; // eax void **v9; // [esp+4h] [ebp-10h] int v10; // [esp+8h] [ebp-Ch] char v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v3 = (_DWORD *)*(this - 1); v4 = *v3 < 0x30u; v12 = 0; if ( !v4 && (v5 = (int (__stdcall *)(_DWORD *, int))v3[11]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = (_DWORD *)v5(v3, v6); v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; sub_7787E0((int)&v9, v7); sub_778780((_DWORD *)a2, (int)&v9); sub_405F40(&v9); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078A140) -------------------------------------------------------- void __userpurge sub_78A140(int a1@, int a2@, int a3@, _DWORD *a4) { int v4; // ebx int v5; // eax int v6; // edi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x34u && *(_DWORD *)(v4 + 48) ) { v5 = cef_string_multimap_alloc(a2, a3); v6 = v5; if ( v5 ) sub_77B910(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 48))(v4, v6); if ( v6 ) { sub_786640(*(void **)(a4[1] + 4)); *(_DWORD *)(a4[1] + 4) = a4[1]; *(_DWORD *)a4[1] = a4[1]; *(_DWORD *)(a4[1] + 8) = a4[1]; a4[2] = 0; sub_77C490(v6, a4); cef_string_multimap_free(v6); } } } // 9A5590: using guessed type int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); // 9A5594: using guessed type int __cdecl cef_string_multimap_free(_DWORD); //----- (0078A1C0) -------------------------------------------------------- void __userpurge sub_78A1C0(int a1@, int a2@, _DWORD *a3) { int v3; // esi int v4; // edi int v5; // [esp+0h] [ebp-8h] v3 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v3 >= 0x38u && *(_DWORD *)(v3 + 52) ) { v4 = cef_string_multimap_alloc(a2, v5); if ( v4 ) sub_77B910(a3, v4); (*(void (__stdcall **)(int))(v3 + 52))(v3); if ( v4 ) cef_string_multimap_free(v4); } } // 9A5590: using guessed type int __stdcall cef_string_multimap_alloc(_DWORD, _DWORD); // 9A5594: using guessed type int __cdecl cef_string_multimap_free(_DWORD); //----- (0078A220) -------------------------------------------------------- _DWORD *__thiscall sub_78A220(_DWORD *this, char a2) { return sub_78A2B0((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0078A230) -------------------------------------------------------- _DWORD *__thiscall sub_78A230(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A1029C; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A1029C; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FAF4; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A102D0; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FAF4; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FAF4: using guessed type int (*off_A0FAF4)[4]; // A1029C: using guessed type int (*off_A1029C[16])(); // A102D0: using guessed type int (*off_A102D0[3])(); //----- (0078A2B0) -------------------------------------------------------- _DWORD *__thiscall sub_78A2B0(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A0FB38; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = off_A10314; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FB38: using guessed type int (*off_A0FB38[10])(); // A10314: using guessed type int (*off_A10314[2])[4]; //----- (0078A300) -------------------------------------------------------- int *__cdecl sub_78A300(int *a1, int *a2, int *a3) { int *v3; // esi int *v4; // edi int v5; // eax v3 = a1; if ( a1 == a2 ) return a3; v4 = a3; do { if ( v4 ) { v5 = *v3; *v4 = *v3; if ( v5 ) (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(); } ++v3; ++v4; } while ( v3 != a2 ); return v4; } //----- (0078A350) -------------------------------------------------------- int **__thiscall sub_78A350(int **this, int **a2, int *a3, int *a4) { int **v4; // esi int *v5; // eax int *v6; // ebx int *v7; // edi int *i; // esi int **v10; // [esp+4h] [ebp-4h] v4 = this; v10 = this; *a2 = a3; if ( a3 == a4 ) return a2; v5 = sub_78C690(a4, this[1], a3); v6 = v4[1]; v7 = v5; for ( i = v5; i != v6; ++i ) { if ( *i ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(*i + 4) + 4) + *i + 4) + 4))(); } v10[1] = v7; return a2; } //----- (0078A3D0) -------------------------------------------------------- _DWORD *__thiscall sub_78A3D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax int (__stdcall *v3)(char *, _DWORD *); // ecx const void *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi char v7; // [esp+0h] [ebp-40h] char v8; // [esp+20h] [ebp-20h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x2Cu && (v3 = (int (__stdcall *)(char *, _DWORD *))v2[10]) != 0 ) { v4 = (const void *)v3(&v7, v2); result = a2; qmemcpy(&v8, v4, 0x20u); a2[1] = 0; v6 = a2 + 1; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; a2[9] = 0; qmemcpy(a2 + 1, &v8, 0x20u); *a2 = &off_A10614; } else { result = a2; a2[1] = 0; a2[2] = 0; a2[3] = 0; a2[4] = 0; a2[5] = 0; a2[6] = 0; a2[7] = 0; a2[8] = 0; a2[9] = 0; *a2 = &off_A10614; } return result; } // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (0078A470) -------------------------------------------------------- int *__cdecl sub_78A470(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78CD70(v3 + 2, 1); else v4 = 0; v5 = dword_AB9290; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9290: using guessed type int dword_AB9290; //----- (0078A590) -------------------------------------------------------- int *__thiscall sub_78A590(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x20u && (v3 = (int (__stdcall *)(_DWORD *))v2[7]) != 0 ) { v4 = v3(v2); sub_78A470(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078A5D0) -------------------------------------------------------- int *__thiscall sub_78A5D0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x24u && (v3 = (int (__stdcall *)(_DWORD *))v2[8]) != 0 ) { v4 = v3(v2); sub_78A470(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078A610) -------------------------------------------------------- int *__thiscall sub_78A610(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x28u && (v3 = (int (__stdcall *)(_DWORD *))v2[9]) != 0 ) { v4 = v3(v2); sub_778A50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078A650) -------------------------------------------------------- int *__thiscall sub_78A650(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x34u && (v3 = (int (__stdcall *)(_DWORD *))v2[12]) != 0 ) { v4 = v3(v2); sub_778A50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078A690) -------------------------------------------------------- int *__thiscall sub_78A690(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x38u && (v3 = (int (__stdcall *)(_DWORD *))v2[13]) != 0 ) { v4 = v3(v2); sub_778A50(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078A6D0) -------------------------------------------------------- void __thiscall sub_78A6D0(_DWORD *this, int **a2) { _DWORD *v2; // eax void *v3; // edi int **v4; // esi int (*v5)(void); // edx unsigned int v6; // ebx unsigned int v7; // eax bool v8; // cf unsigned int *v9; // eax unsigned int v10; // eax unsigned int v11; // esi int v12; // eax unsigned int v13; // ebx int *v14; // eax int v15; // [esp-4h] [ebp-1Ch] int v16; // [esp+Ch] [ebp-Ch] unsigned int v17; // [esp+10h] [ebp-8h] unsigned int v18; // [esp+14h] [ebp-4h] v2 = (_DWORD *)*(this - 1); v3 = 0; v16 = *(this - 1); if ( *v2 >= 0x40u && v2[15] ) { v4 = a2; v5 = *(int (**)(void))(*this + 40); v17 = a2[1] - *a2; v6 = v17; v7 = v5(); v18 = v7; v8 = v7 < v17; v9 = &v17; if ( !v8 ) v9 = &v18; v10 = *v9; v18 = v10; if ( v10 ) { v3 = operator new[](4 * v10); if ( v3 ) { memset(v3, 0, 4 * v18); if ( v6 ) { v11 = 0; if ( v6 ) { do { v12 = (*a2)[v11]; v15 = v12; if ( v12 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(v12 + 4) + 4) + v12 + 4))(v12); *((_DWORD *)v3 + v11++) = sub_77D7E0(v15); } while ( v11 < v6 ); } } } v4 = a2; } (*(void (__stdcall **)(int, unsigned int *, void *))(v16 + 60))(v16, &v18, v3); sub_78A350(v4, (int **)&a2, *v4, v4[1]); if ( v18 && v3 ) { v13 = 0; if ( v18 ) { do { v14 = sub_778A50((int *)&a2, *((_DWORD *)v3 + v13)); sub_78C850((int *)v4, v14); if ( a2 ) ((void (__thiscall *)(int))(*(int **)((char *)a2 + a2[1][1] + 4))[1])((int)a2 + a2[1][1] + 4); ++v13; } while ( v13 < v18 ); } operator delete[](v3); } } } //----- (0078A810) -------------------------------------------------------- void __thiscall sub_78A810(_DWORD *this, int **a2) { _DWORD *v2; // eax void *v3; // edi int **v4; // esi int (*v5)(void); // edx unsigned int v6; // ebx unsigned int v7; // eax bool v8; // cf unsigned int *v9; // eax unsigned int v10; // eax unsigned int v11; // esi int v12; // eax unsigned int v13; // ebx int *v14; // eax int v15; // [esp-4h] [ebp-1Ch] int v16; // [esp+Ch] [ebp-Ch] unsigned int v17; // [esp+10h] [ebp-8h] unsigned int v18; // [esp+14h] [ebp-4h] v2 = (_DWORD *)*(this - 1); v3 = 0; v16 = *(this - 1); if ( *v2 >= 0x44u && v2[16] ) { v4 = a2; v5 = *(int (**)(void))(*this + 40); v17 = a2[1] - *a2; v6 = v17; v7 = v5(); v18 = v7; v8 = v7 < v17; v9 = &v17; if ( !v8 ) v9 = &v18; v10 = *v9; v18 = v10; if ( v10 ) { v3 = operator new[](4 * v10); if ( v3 ) { memset(v3, 0, 4 * v18); if ( v6 ) { v11 = 0; if ( v6 ) { do { v12 = (*a2)[v11]; v15 = v12; if ( v12 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(v12 + 4) + 4) + v12 + 4))(v12); *((_DWORD *)v3 + v11++) = sub_77D7E0(v15); } while ( v11 < v6 ); } } } v4 = a2; } (*(void (__stdcall **)(int, unsigned int *, void *))(v16 + 64))(v16, &v18, v3); sub_78A350(v4, (int **)&a2, *v4, v4[1]); if ( v18 && v3 ) { v13 = 0; if ( v18 ) { do { v14 = sub_778A50((int *)&a2, *((_DWORD *)v3 + v13)); sub_78C850((int *)v4, v14); if ( a2 ) ((void (__thiscall *)(int))(*(int **)((char *)a2 + a2[1][1] + 4))[1])((int)a2 + a2[1][1] + 4); ++v13; } while ( v13 < v18 ); } operator delete[](v3); } } } //----- (0078A950) -------------------------------------------------------- _DWORD *__thiscall sub_78A950(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A10510; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = off_A10304; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A10304: using guessed type int (*off_A10304[2])[4]; // A10510: using guessed type int (*off_A10510[15])(); //----- (0078A9F0) -------------------------------------------------------- int *__cdecl sub_78A9F0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78CF40(v3 + 2, 1); else v4 = 0; v5 = dword_AB9294; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9294: using guessed type int dword_AB9294; //----- (0078AB10) -------------------------------------------------------- int __thiscall sub_78AB10(void *this, int a2, int a3) { int result; // eax int v4; // esi void (__thiscall **v5)(int, void *); // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(_DWORD *)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v5 = *(void (__thiscall ***)(int, void *))v4; v6 = this; sub_78A9F0((int *)&v6, a3); (*v5)(v4, v6); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); } return result; } //----- (0078AB80) -------------------------------------------------------- _DWORD *__thiscall sub_78AB80(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB925C; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_78AB10; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB925C: using guessed type int dword_AB925C; //----- (0078ABD0) -------------------------------------------------------- int __stdcall sub_78ABD0(int a1) { int result; // eax result = a1; if ( a1 ) result = (*(unsigned __int8 (**)(void))(**(_DWORD **)(a1 - 4) + 8))(); return result; } //----- (0078AC00) -------------------------------------------------------- int __stdcall sub_78AC00(int a1, void *a2) { int result; // eax int v3; // esi void **v4; // [esp+4h] [ebp-10h] void *v5; // [esp+8h] [ebp-Ch] char v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] result = a1; v7 = 0; if ( a1 ) { v3 = *(_DWORD *)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); v4 = &CefStringBase::`vftable'; v5 = 0; v6 = 0; if ( a2 ) { v5 = a2; v6 = 0; } (**(void (__thiscall ***)(int, void ***))v3)(v3, &v4); v4 = &CefStringBase::`vftable'; if ( v5 ) { if ( v6 ) { cef_string_utf16_clear(v5); operator delete(v5); } v5 = 0; v6 = 0; } result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078ACA0) -------------------------------------------------------- _DWORD *__thiscall sub_78ACA0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9260; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_78AC00; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9260: using guessed type int dword_AB9260; //----- (0078ACF0) -------------------------------------------------------- _DWORD *__thiscall sub_78ACF0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10324; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB38: using guessed type int (*off_A0FB38[10])(); // A10314: using guessed type int (*off_A10314[2])[4]; // A10324: using guessed type int (__stdcall *off_A10324)(int); //----- (0078AD70) -------------------------------------------------------- bool __thiscall sub_78AD70(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x30u || !v2[11] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_787670(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[11])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078AE10) -------------------------------------------------------- int *__cdecl sub_78AE10(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78D260(v3 + 2, 1); else v4 = 0; v5 = dword_AB9298; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB9298: using guessed type int dword_AB9298; //----- (0078AEB0) -------------------------------------------------------- int __cdecl sub_78AEB0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB927C ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB927C: using guessed type int dword_AB927C; //----- (0078AF10) -------------------------------------------------------- int *__thiscall sub_78AF10(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x14u && (v3 = (int (__stdcall *)(_DWORD *))v2[4]) != 0 ) { v4 = v3(v2); sub_78AE10(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078AF50) -------------------------------------------------------- int *__thiscall sub_78AF50(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = v3(v2); sub_777FD0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078AF90) -------------------------------------------------------- int *__thiscall sub_78AF90(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x20u && (v3 = (int (__stdcall *)(_DWORD *))v2[7]) != 0 ) { v4 = v3(v2); sub_77A7F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078AFD0) -------------------------------------------------------- int *__thiscall sub_78AFD0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x24u && (v3 = (int (__stdcall *)(_DWORD *))v2[8]) != 0 ) { v4 = v3(v2); sub_77D5E0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078B010) -------------------------------------------------------- bool __thiscall sub_78B010(_DWORD *this, int a2, int *a3, int *a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax int v7; // ecx int v8; // ST0C_4 int v9; // eax int v10; // ebx int v11; // ecx int v12; // ST0C_4 int v13; // edi int v14; // esi int *v15; // eax int *v16; // eax int v18; // [esp+Ch] [ebp-8h] int v19; // [esp+10h] [ebp-4h] v18 = 0; v4 = (_DWORD *)*(this - 1); if ( *v4 < 0x34u ) return 0; if ( !v4[12] ) return 0; v5 = *(_DWORD *)(a2 + 4); if ( !v5 || !*(_DWORD *)(v5 + 4) ) return 0; v6 = *a3; v7 = 0; v19 = 0; if ( v6 ) { v8 = v6; (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(); v7 = sub_77D680(v8); v19 = v7; } v9 = *a4; v10 = v7; v11 = 0; v18 = 0; if ( v9 ) { v12 = v9; (**(void (***)(void))(*(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) + v9 + 4))(); v11 = sub_78AEB0(v12); v18 = v11; } v13 = v11; v14 = ((int (__stdcall *)(_DWORD *, _DWORD, int *, int *))v4[12])(v4, *(_DWORD *)(a2 + 4), &v19, &v18); if ( v19 ) { if ( v19 != v10 ) { v15 = sub_77D5E0(&a2, v19); sub_77D540(a3, v15); sub_407820(&a2); } } else { a2 = 0; sub_77D540(a3, &a2); } if ( v18 ) { if ( v18 != v13 ) { v16 = sub_785390((int *)&a3, v18); sub_77D540(a4, v16); sub_407820((int *)&a3); return v14 != 0; } } else { a3 = 0; sub_77D540(a4, (int *)&a3); } return v14 != 0; } //----- (0078B170) -------------------------------------------------------- int __stdcall sub_78B170(int a1, _DWORD *a2, int a3, int a4, _DWORD *a5) { int v6; // esi unsigned __int8 v7; // bl bool v8; // [esp+13h] [ebp-A9h] int (__thiscall **v9)(void *, char); // [esp+14h] [ebp-A8h] char v10; // [esp+18h] [ebp-A4h] int v11; // [esp+B4h] [ebp-8h] if ( !a1 || !a2 || !a5 ) return 0; v9 = &off_A0FDC0; memset(&v10, 0, 0x9Cu); v11 = 0; sub_785E60(a2, &v10, 0); v6 = *(_DWORD *)(a1 - 8); v8 = *a5 != 0; if ( v6 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); v7 = (**(int (__thiscall ***)(int, int (__thiscall ***)(void *, char), int, int, bool *))v6)(v6, &v9, a3, a4, &v8); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); *a5 = v8 != 0; sub_785F10(&v9); return v7; } // A0FDC0: using guessed type int (__thiscall *off_A0FDC0)(void *, char); //----- (0078B280) -------------------------------------------------------- _DWORD *__thiscall sub_78B280(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9268; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_78B170; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9268: using guessed type int dword_AB9268; //----- (0078B2D0) -------------------------------------------------------- int __stdcall sub_78B2D0(int a1, int a2) { int result; // eax int v3; // esi result = a1; if ( a1 ) { v3 = *(_DWORD *)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (**(void (__thiscall ***)(int, int))v3)(v3, a2); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } return result; } //----- (0078B330) -------------------------------------------------------- _DWORD *__thiscall sub_78B330(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB926C; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_78B2D0; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB926C: using guessed type int dword_AB926C; //----- (0078B380) -------------------------------------------------------- int __stdcall sub_78B380(int a1, int a2) { int result; // eax int v3; // esi result = a1; if ( a1 ) { v3 = *(_DWORD *)(a1 - 8); if ( v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); (**(void (__thiscall ***)(int, bool))v3)(v3, a2 != 0); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v3 + 4) + 4) + v3 + 4); } return result; } //----- (0078B3E0) -------------------------------------------------------- _DWORD *__thiscall sub_78B3E0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A10348; this[9] = 0; this[1] = dword_AB9270; result[3] = result; this[4] = 20; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A10348; this[8] = sub_78B380; return result; } // A10348: using guessed type int (*off_A10348)[12]; // AB9270: using guessed type int dword_AB9270; //----- (0078B430) -------------------------------------------------------- void *__thiscall sub_78B430(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &off_A10358; if ( a2 & 1 ) operator delete(this); return v2; } // A10358: using guessed type int (__thiscall *off_A10358)(void *, char); //----- (0078B460) -------------------------------------------------------- int __stdcall sub_78B460(int a1) { int result; // eax _DWORD *v2; // esi result = a1; if ( a1 ) { v2 = *(_DWORD **)(a1 - 8); if ( v2 ) (**(void (__thiscall ***)(int))((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); (*(void (__thiscall **)(_DWORD *))(*v2 + 16))(v2); result = (*(int (__thiscall **)(int))(*(_DWORD *)((char *)v2 + *(_DWORD *)(v2[1] + 4) + 4) + 4))((int)v2 + *(_DWORD *)(v2[1] + 4) + 4); } return result; } //----- (0078B4B0) -------------------------------------------------------- int __userpurge sub_78B4B0@(int a1@, int a2@, int a3@, int a4, int a5) { int result; // eax _DWORD *v6; // esi int v7; // eax int *v8; // eax int v9; // edi int v10; // ebx int v11; // [esp-Ch] [ebp-20h] int v12; // [esp-8h] [ebp-1Ch] int v13; // [esp-4h] [ebp-18h] int (__thiscall **v14)(void *, char); // [esp+0h] [ebp-14h] int v15; // [esp+4h] [ebp-10h] int v16; // [esp+10h] [ebp-4h] result = a4; v16 = 0; if ( a4 ) { v13 = a1; v12 = a3; v6 = *(_DWORD **)(a4 - 8); v11 = a2; if ( v6 ) (**(void (__thiscall ***)(int, int, int, int))((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4))( (int)v6 + *(_DWORD *)(v6[1] + 4) + 4, a2, v12, a1); v7 = (*(int (__thiscall **)(_DWORD *, int (__thiscall ***)(void *, char), int, int, int, int))(*v6 + 20))( v6, &v14, a5, v11, v12, v13); if ( v7 ) v8 = (int *)(v7 + 4); else v8 = 0; v9 = *v8; v10 = v8[1]; v14 = &off_A10358; (*(void (__thiscall **)(int, int (__thiscall **)(void *, char), int))(*(_DWORD *)((char *)v6 + *(_DWORD *)(v6[1] + 4) + 4) + 4))( (int)v6 + *(_DWORD *)(v6[1] + 4) + 4, &off_A10358, v15); result = v9; } return result; } // 78B4B0: could not find valid save-restore pair for ebx // 78B4B0: could not find valid save-restore pair for edi // 78B4B0: could not find valid save-restore pair for esi // A10358: using guessed type int (__thiscall *off_A10358)(void *, char); //----- (0078B560) -------------------------------------------------------- int *__cdecl sub_78B560(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78D560(v3 + 2, 1); else v4 = 0; v5 = dword_AB929C; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB929C: using guessed type int dword_AB929C; //----- (0078B600) -------------------------------------------------------- int *__cdecl sub_78B600(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78D6B0(v3 + 2, 1); else v4 = 0; v5 = dword_AB92A0; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB92A0: using guessed type int dword_AB92A0; //----- (0078B6A0) -------------------------------------------------------- int *__cdecl sub_78B6A0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78D750(v3 + 2, 1); else v4 = 0; v5 = dword_AB92A4; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB92A4: using guessed type int dword_AB92A4; //----- (0078B7C0) -------------------------------------------------------- int __thiscall sub_78B7C0(void *this, int a2, int a3) { int result; // eax int v4; // esi void (__thiscall **v5)(int, void *); // edi void *v6; // [esp-4h] [ebp-14h] int v7; // [esp+Ch] [ebp-4h] result = a2; v7 = 0; if ( a2 && a3 ) { v4 = *(_DWORD *)(a2 - 8); if ( v4 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); v5 = *(void (__thiscall ***)(int, void *))v4; v6 = this; sub_777FD0((int *)&v6, a3); (*v5)(v4, v6); result = (*(int (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) + v4 + 4); } return result; } //----- (0078B830) -------------------------------------------------------- int __thiscall sub_78B830(void *this, int a2, int a3, int a4) { int result; // eax int *v5; // esi int v6; // edi void *v7; // [esp-8h] [ebp-18h] BOOL v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] result = a2; v9 = 0; if ( a2 && a3 ) { v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; LOBYTE(this) = a4 != 0; v8 = a4 != 0; v7 = this; sub_78B6A0((int *)&v7, a3); (*(void (__thiscall **)(int *, void *, BOOL))(v6 + 4))(v5, v7, v8); result = (*(int (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); } return result; } //----- (0078B8B0) -------------------------------------------------------- int __thiscall sub_78B8B0(void *this, int a2, int a3, int a4) { int *v5; // esi int v6; // edi unsigned __int8 v7; // bl void *v8; // [esp-4h] [ebp-14h] int v9; // [esp+Ch] [ebp-4h] v9 = 0; if ( !a2 || !a4 ) return 0; v5 = *(int **)(a2 - 8); if ( v5 ) (**(void (__thiscall ***)(int))((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); v6 = *v5; v8 = this; sub_78B560((int *)&v8, a4); v7 = (*(int (__thiscall **)(int *, bool, void *))(v6 + 8))(v5, a3 != 0, v8); (*(void (__thiscall **)(int))(*(int *)((char *)v5 + *(_DWORD *)(v5[1] + 4) + 4) + 4))((int)v5 + *(_DWORD *)(v5[1] + 4) + 4); return v7; } //----- (0078B940) -------------------------------------------------------- int __stdcall sub_78B940(int a1, int a2, int a3, int a4) { int v5; // edi int v6; // ebx int *v7; // esi int v8; // edi unsigned __int8 v9; // bl int v10; // [esp-4h] [ebp-2Ch] void **v11; // [esp+Ch] [ebp-1Ch] int v12; // [esp+10h] [ebp-18h] char v13; // [esp+14h] [ebp-14h] void **v14; // [esp+18h] [ebp-10h] int v15; // [esp+1Ch] [ebp-Ch] char v16; // [esp+20h] [ebp-8h] int v17; // [esp+24h] [ebp-4h] v17 = 0; if ( !a1 ) return 0; if ( !a2 ) return 0; v5 = a3; if ( !a3 ) return 0; v6 = a4; if ( !a4 ) return 0; v7 = (int *)*sub_789AA0(&a1, a1); v11 = &CefStringBase::`vftable'; v12 = v5; v13 = 0; v14 = &CefStringBase::`vftable'; v15 = a2; v16 = 0; v8 = *v7; sub_78B600(&v10, v6); v9 = (*(int (__thiscall **)(int *, void ***, void ***, int))(v8 + 12))(v7, &v14, &v11, v10); sub_405F40(&v14); sub_405F40(&v11); if ( a1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))(); return v9; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078BA00) -------------------------------------------------------- _DWORD *__thiscall sub_78BA00(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A103CC; this[14] = 0; this[1] = dword_AB9274; result[3] = result; this[4] = 40; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A103CC; this[8] = sub_78B7C0; this[9] = sub_78B830; this[10] = sub_78B8B0; this[11] = sub_78B940; this[12] = sub_78B460; this[13] = sub_78B4B0; return result; } // A103CC: using guessed type int (*off_A103CC)[12]; // AB9274: using guessed type int dword_AB9274; //----- (0078BA70) -------------------------------------------------------- bool __thiscall sub_78BA70(_DWORD *this) { int v1; // eax int (__stdcall *v2)(int); // ecx bool result; // al v1 = *(_DWORD *)((char *)this - *(this - 1) - 20); v2 = *(int (__stdcall **)(int))(v1 + 12); if ( v2 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0078BA80) -------------------------------------------------------- _DWORD *__thiscall sub_78BA80(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FD38; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FD38; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A103DC; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A103F0; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A103DC; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FD38: using guessed type int (*off_A0FD38[25])(); // A103DC: using guessed type int (*off_A103DC)[4]; // A103F0: using guessed type int (*off_A103F0[5])(); //----- (0078BB00) -------------------------------------------------------- _DWORD *__thiscall sub_78BB00(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A0FD38; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A103DC; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FD38: using guessed type int (*off_A0FD38[25])(); // A103DC: using guessed type int (*off_A103DC)[4]; //----- (0078BB60) -------------------------------------------------------- int __cdecl sub_78BB60(int a1) { int v1; // eax int v3; // ecx void (__stdcall *v4)(int); // edx int v5; // esi v1 = a1; if ( !a1 ) return 0; if ( *(_DWORD *)(a1 - 8) != dword_AB9278 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, 0); return 0; } v3 = *(_DWORD *)(a1 - 4); v4 = *(void (__stdcall **)(int))(v3 + 4); if ( v4 ) { v4(v3); v1 = a1; } v5 = *(_DWORD *)(a1 - 4); if ( v1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 4) + 4) + v1 + 4) + 4))(); return v5; } // AB9278: using guessed type int dword_AB9278; //----- (0078BBD0) -------------------------------------------------------- int __thiscall sub_78BBD0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x14u && (v2 = (int (__stdcall *)(_DWORD *))v1[4]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078BBF0) -------------------------------------------------------- bool __thiscall sub_78BBF0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x20u && (v2 = (int (__stdcall *)(_DWORD *))v1[7]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0078BC10) -------------------------------------------------------- bool __thiscall sub_78BC10(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x24u && (v2 = (int (__stdcall *)(_DWORD *))v1[8]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0078BC30) -------------------------------------------------------- int __thiscall sub_78BC30(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x28u && (v3 = (int (__stdcall *)(_DWORD *))v2[9]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078BCB0) -------------------------------------------------------- bool __thiscall sub_78BCB0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x2Cu || !v2[10] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_78BB60(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[10])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078BD50) -------------------------------------------------------- bool __thiscall sub_78BD50(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x38u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[13]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (0078BDA0) -------------------------------------------------------- int __thiscall sub_78BDA0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x3Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[14]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078BE20) -------------------------------------------------------- int __thiscall sub_78BE20(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x5Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[22]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078BEA0) -------------------------------------------------------- bool __thiscall sub_78BEA0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // edx int v4; // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x64u && (v3 = (int (__stdcall *)(_DWORD *, _DWORD))v2[24]) != 0 && (v4 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v4 + 4) ) { result = v3(v2, *(_DWORD *)(a2 + 4)) != 0; } else { result = 0; } return result; } //----- (0078BEF0) -------------------------------------------------------- int __thiscall sub_78BEF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax bool v4; // cf int (__stdcall *v5)(_DWORD *, int); // edx int v6; // ecx _DWORD *v7; // eax int result; // eax void **v9; // [esp+4h] [ebp-10h] int v10; // [esp+8h] [ebp-Ch] char v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v3 = (_DWORD *)*(this - 1); v4 = *v3 < 0x68u; v12 = 0; if ( !v4 && (v5 = (int (__stdcall *)(_DWORD *, int))v3[25]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = (_DWORD *)v5(v3, v6); v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; sub_7787E0((int)&v9, v7); sub_778780((_DWORD *)a2, (int)&v9); sub_405F40(&v9); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078BF70) -------------------------------------------------------- void __userpurge sub_78BF70(int a1@, int a2@, int a3@, _DWORD *a4) { int v4; // ebx int v5; // eax int v6; // edi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x6Cu && *(_DWORD *)(v4 + 104) ) { v5 = cef_string_map_alloc(a2, a3); v6 = v5; if ( v5 ) sub_77B890(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 104))(v4, v6); if ( v6 ) { sub_786640(*(void **)(a4[1] + 4)); *(_DWORD *)(a4[1] + 4) = a4[1]; *(_DWORD *)a4[1] = a4[1]; *(_DWORD *)(a4[1] + 8) = a4[1]; a4[2] = 0; sub_77C250(v6, a4); cef_string_map_free(v6); } } } // 9A559C: using guessed type int __stdcall cef_string_map_alloc(_DWORD, _DWORD); // 9A55A0: using guessed type int __cdecl cef_string_map_free(_DWORD); //----- (0078BFF0) -------------------------------------------------------- bool __thiscall sub_78BFF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx int (__stdcall *v4)(_DWORD *, int, _DWORD); // esi int v5; // edx int v6; // eax bool result; // al v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x70u && (v4 = (int (__stdcall *)(_DWORD *, int, _DWORD))v3[27]) != 0 && (v5 = *(_DWORD *)(a2 + 4)) != 0 && *(_DWORD *)(v5 + 4) && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { result = v4(v3, v5, *(_DWORD *)(a3 + 4)) != 0; } else { result = 0; } return result; } //----- (0078C050) -------------------------------------------------------- int __thiscall sub_78C050(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x74u && (v3 = (int (__stdcall *)(_DWORD *))v2[28]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078C0D0) -------------------------------------------------------- int *__thiscall sub_78C0D0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x40u && (v3 = (int (__stdcall *)(_DWORD *))v2[15]) != 0 ) { v4 = v3(v2); sub_78A9F0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C110) -------------------------------------------------------- int *__thiscall sub_78C110(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x44u && (v3 = (int (__stdcall *)(_DWORD *))v2[16]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C150) -------------------------------------------------------- int *__thiscall sub_78C150(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x48u && (v3 = (int (__stdcall *)(_DWORD *))v2[17]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C190) -------------------------------------------------------- int *__thiscall sub_78C190(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x4Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[18]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C1D0) -------------------------------------------------------- int *__thiscall sub_78C1D0(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x54u && (v3 = (int (__stdcall *)(_DWORD *))v2[20]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C210) -------------------------------------------------------- int *__thiscall sub_78C210(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x58u && (v3 = (int (__stdcall *)(_DWORD *))v2[21]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C250) -------------------------------------------------------- _DWORD *__thiscall sub_78C250(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10454; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FD9C: using guessed type int (*off_A0FD9C)[4]; // A10454: using guessed type int (__stdcall *off_A10454[3])(int); // A10638: using guessed type int (*off_A10638[10])(); //----- (0078C2D0) -------------------------------------------------------- int __thiscall sub_78C2D0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x14u && (v3 = (int (__stdcall *)(_DWORD *))v2[4]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078C350) -------------------------------------------------------- int __thiscall sub_78C350(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078C3D0) -------------------------------------------------------- int __thiscall sub_78C3D0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x20u && (v2 = (int (__stdcall *)(_DWORD *))v1[7]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078C3F0) -------------------------------------------------------- int __thiscall sub_78C3F0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x2Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[10]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078C410) -------------------------------------------------------- int __thiscall sub_78C410(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x30u && (v2 = (int (__stdcall *)(_DWORD *))v1[11]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078C430) -------------------------------------------------------- _DWORD *__thiscall sub_78C430(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101FC; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101FC; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A10474; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10484; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A10474; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101FC: using guessed type int (*off_A101FC[3])(); // A10474: using guessed type int (*off_A10474)[4]; // A10484: using guessed type int (*off_A10484[2])(); //----- (0078C4B0) -------------------------------------------------------- int *__cdecl sub_78C4B0(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78DF80(v3 + 2, 1); else v4 = 0; v5 = dword_AB92A8; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB92A8: using guessed type int dword_AB92A8; //----- (0078C550) -------------------------------------------------------- int *__thiscall sub_78C550(_DWORD *this, int *a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int); // ecx int v5; // eax int *result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x1Cu && (v4 = (int (__stdcall *)(_DWORD *, int))v3[6]) != 0 ) { v5 = v4(v3, a3); sub_78C4B0(a2, v5); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078C590) -------------------------------------------------------- _DWORD *__thiscall sub_78C590(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A104A0; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101A4: using guessed type int (*off_A101A4[2])(); // A10490: using guessed type int (*off_A10490[2])[4]; // A104A0: using guessed type int (*off_A104A0[2])(); //----- (0078C610) -------------------------------------------------------- _DWORD *__thiscall sub_78C610(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FBF0; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A104B8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A104A8; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FBF0: using guessed type int (*off_A0FBF0[7])(); // A104A8: using guessed type int (*off_A104A8)[4]; // A104B8: using guessed type int (*off_A104B8[3])(); //----- (0078C690) -------------------------------------------------------- int *__cdecl sub_78C690(int *a1, int *a2, int *a3) { int *v3; // ebx int *v4; // edi int v5; // esi int v6; // eax int v7; // eax v3 = a1; if ( a1 == a2 ) return a3; v4 = a3; do { v5 = *v3; if ( *v3 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4))(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 4) + v5 + 4); v6 = *v4; *v4 = v5; if ( v6 ) { v7 = *(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4; (*(void (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7); } ++v3; ++v4; } while ( v3 != a2 ); return v4; } //----- (0078C6F0) -------------------------------------------------------- void __stdcall sub_78C6F0(int a1, int a2) { int i; // esi for ( i = a1; i != a2; i += 4 ) { if ( *(_DWORD *)i ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)i + 4) + 4) + *(_DWORD *)i + 4) + 4))(); } } //----- (0078C730) -------------------------------------------------------- int __thiscall sub_78C730(int *this, unsigned int a2) { int result; // eax int *v3; // esi int *v4; // ebx int v5; // edi int (__thiscall **v6)(void *, char); // [esp+4h] [ebp-8h] int v7; // [esp+8h] [ebp-4h] result = a2; v3 = this; if ( a2 > 0x3FFFFFFF ) std::_Xlength_error("vector too long"); if ( (this[2] - *this) >> 2 < a2 ) { v4 = 0; if ( a2 ) { v4 = (int *)operator new(4 * a2); if ( !v4 ) { v7 = 0; v6 = &off_A0F3E0; sub_777390(&v6); } } sub_78A300((int *)*v3, (int *)v3[1], v4); v5 = (v3[1] - *v3) >> 2; if ( *v3 ) { sub_78C6F0(*v3, v3[1]); operator delete((void *)*v3); } result = (int)&v4[a2]; *v3 = (int)v4; v3[2] = result; v3[1] = (int)&v4[v5]; } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0078C7F0) -------------------------------------------------------- unsigned int __thiscall sub_78C7F0(int *this, int a2) { unsigned int v2; // eax unsigned int result; // eax unsigned int v4; // edx unsigned int v5; // edx v2 = (this[1] - *this) >> 2; if ( 0x3FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = a2 + v2; v4 = (this[2] - *this) >> 2; if ( result > v4 ) { if ( 0x3FFFFFFF - (v4 >> 1) >= v4 ) v5 = (v4 >> 1) + v4; else v5 = 0; if ( v5 < result ) v5 = result; result = sub_78C730(this, v5); } return result; } //----- (0078C850) -------------------------------------------------------- int *__thiscall sub_78C850(int *this, int *a2) { int *v2; // esi int *result; // eax int v4; // edi int **v5; // ecx int v6; // edi v2 = this; result = (int *)this[1]; if ( a2 >= result || *this > (unsigned int)a2 ) { if ( result == (int *)this[2] ) sub_78C7F0(this, 1); result = (int *)v2[1]; if ( result ) { v6 = *a2; *result = *a2; if ( v6 ) result = (int *)(**(int (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } } else { v4 = ((signed int)a2 - *this) >> 2; if ( result == (int *)this[2] ) result = (int *)sub_78C7F0(this, 1); v5 = (int **)v2[1]; if ( v5 ) { result = *(int **)(*v2 + 4 * v4); *v5 = result; if ( result ) { result = (int *)(**(int (***)(void))((char *)result + *(_DWORD *)(result[1] + 4) + 4))(); v2[1] += 4; return result; } } } v2[1] += 4; return result; } //----- (0078C8E0) -------------------------------------------------------- int __thiscall sub_78C8E0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x1Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[6]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078C900) -------------------------------------------------------- _DWORD *__thiscall sub_78C900(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x2Cu ) { v2 = (int (__stdcall *)(_DWORD *))result[10]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0078C920) -------------------------------------------------------- int *__cdecl sub_78C920(int *a1, int a2) { int *result; // eax int *v3; // eax int *v4; // edi int v5; // eax int v6; // esi int v7; // edi void (__stdcall *v8)(int); // eax if ( a2 ) { v3 = (int *)operator new(0x1Cu); v4 = v3; if ( v3 ) sub_78E000(v3 + 2, 1); else v4 = 0; v5 = dword_AB92AC; v4[1] = a2; v6 = (int)(v4 + 2); *v4 = v5; if ( v4 != (int *)-8 ) (**(void (__thiscall ***)(int))(*(_DWORD *)(v4[3] + 4) + v6 + 4))(*(_DWORD *)(v4[3] + 4) + v6 + 4); v7 = v4[1]; v8 = *(void (__stdcall **)(int))(v7 + 8); if ( v8 ) v8(v7); *a1 = v6; if ( v6 ) { (**(void (__thiscall ***)(int))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); (*(void (__thiscall **)(int))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4) + 4))(*(_DWORD *)(*(_DWORD *)(v6 + 4) + 4) + v6 + 4); } result = a1; } else { result = a1; *a1 = 0; } return result; } // AB92AC: using guessed type int dword_AB92AC; //----- (0078C9C0) -------------------------------------------------------- int __cdecl sub_78C9C0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB92AC ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB92AC: using guessed type int dword_AB92AC; //----- (0078CA20) -------------------------------------------------------- void __thiscall sub_78CA20(_DWORD *this, int **a2) { _DWORD *v2; // eax void *v3; // edi int **v4; // esi int (*v5)(void); // edx unsigned int v6; // ebx unsigned int v7; // eax bool v8; // cf unsigned int *v9; // eax unsigned int v10; // eax unsigned int v11; // esi int v12; // eax unsigned int v13; // ebx int *v14; // eax int v15; // [esp-4h] [ebp-1Ch] int v16; // [esp+Ch] [ebp-Ch] unsigned int v17; // [esp+10h] [ebp-8h] unsigned int v18; // [esp+14h] [ebp-4h] v2 = (_DWORD *)*(this - 1); v3 = 0; v16 = *(this - 1); if ( *v2 >= 0x20u && v2[7] ) { v4 = a2; v5 = *(int (**)(void))(*this + 8); v17 = a2[1] - *a2; v6 = v17; v7 = v5(); v18 = v7; v8 = v7 < v17; v9 = &v17; if ( !v8 ) v9 = &v18; v10 = *v9; v18 = v10; if ( v10 ) { v3 = operator new[](4 * v10); if ( v3 ) { memset(v3, 0, 4 * v18); if ( v6 ) { v11 = 0; if ( v6 ) { do { v12 = (*a2)[v11]; v15 = v12; if ( v12 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(v12 + 4) + 4) + v12 + 4))(v12); *((_DWORD *)v3 + v11++) = sub_78C9C0(v15); } while ( v11 < v6 ); } } } v4 = a2; } (*(void (__stdcall **)(int, unsigned int *, void *))(v16 + 28))(v16, &v18, v3); sub_78A350(v4, (int **)&a2, *v4, v4[1]); if ( v18 && v3 ) { v13 = 0; if ( v18 ) { do { v14 = sub_78C920((int *)&a2, *((_DWORD *)v3 + v13)); sub_78C850((int *)v4, v14); if ( a2 ) ((void (__thiscall *)(int))(*(int **)((char *)a2 + a2[1][1] + 4))[1])((int)a2 + a2[1][1] + 4); ++v13; } while ( v13 < v18 ); } operator delete[](v3); } } } //----- (0078CB60) -------------------------------------------------------- bool __thiscall sub_78CB60(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x24u || !v2[8] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_78C9C0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[8])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078CC00) -------------------------------------------------------- bool __thiscall sub_78CC00(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x28u || !v2[9] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_78C9C0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[9])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078CCA0) -------------------------------------------------------- _DWORD *__cdecl sub_78CCA0(_DWORD *a1) { _DWORD *result; // eax result = a1; *a1 = 0; return result; } //----- (0078CD30) -------------------------------------------------------- _DWORD *__thiscall sub_78CD30(_DWORD *this) { _DWORD *result; // eax result = this; *this = &off_A104D4; this[8] = 0; this[1] = dword_AB928C; result[3] = result; this[4] = 16; this[5] = sub_789AE0; this[6] = sub_77FFB0; this[7] = sub_78ABD0; *this = &off_A104D4; return result; } // A104D4: using guessed type int (*off_A104D4)[28]; // AB928C: using guessed type int dword_AB928C; //----- (0078CD70) -------------------------------------------------------- _DWORD *__thiscall sub_78CD70(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A0FB38; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A104E4; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10314; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB38: using guessed type int (*off_A0FB38[10])(); // A10314: using guessed type int (*off_A10314[2])[4]; // A104E4: using guessed type int (__stdcall *off_A104E4[9])(int); //----- (0078CDF0) -------------------------------------------------------- void __userpurge sub_78CDF0(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x28u && *(_DWORD *)(v4 + 36) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 36))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0078CE60) -------------------------------------------------------- void __userpurge sub_78CE60(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x30u && *(_DWORD *)(v4 + 44) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 44))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0078CED0) -------------------------------------------------------- void __userpurge sub_78CED0(int a1@, int a2@, int a3@, int *a4) { int v4; // edi int v5; // eax int v6; // esi v4 = *(_DWORD *)(a1 - 4); if ( *(_DWORD *)v4 >= 0x34u && *(_DWORD *)(v4 + 48) ) { v5 = cef_string_list_alloc(a3, a2); v6 = v5; if ( v5 ) sub_77B6F0(a4, v5); (*(void (__cdecl **)(int, int))(v4 + 48))(v4, v6); if ( v6 ) { sub_778A00(a4); sub_77C000(v6, (unsigned int *)a4); cef_string_list_free(v6); } } } // 9A5574: using guessed type int __stdcall cef_string_list_alloc(_DWORD, _DWORD); // 9A5578: using guessed type int __cdecl cef_string_list_free(_DWORD); //----- (0078CF40) -------------------------------------------------------- _DWORD *__thiscall sub_78CF40(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10510; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10510; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10304; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10548; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10304; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A10304: using guessed type int (*off_A10304[2])[4]; // A10510: using guessed type int (*off_A10510[15])(); // A10548: using guessed type int (*off_A10548)(); //----- (0078CFC0) -------------------------------------------------------- int __thiscall sub_78CFC0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x24u && (v3 = (int (__stdcall *)(_DWORD *))v2[8]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078D040) -------------------------------------------------------- bool __thiscall sub_78D040(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x30u && (v2 = (int (__stdcall *)(_DWORD *))v1[11]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0078D060) -------------------------------------------------------- int __thiscall sub_78D060(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x34u && (v2 = (int (__stdcall *)(_DWORD *))v1[12]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078D080) -------------------------------------------------------- int __thiscall sub_78D080(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax bool v4; // cf int (__stdcall *v5)(_DWORD *, int); // edx int v6; // ecx _DWORD *v7; // eax int result; // eax void **v9; // [esp+4h] [ebp-10h] int v10; // [esp+8h] [ebp-Ch] char v11; // [esp+Ch] [ebp-8h] int v12; // [esp+10h] [ebp-4h] v3 = (_DWORD *)*(this - 1); v4 = *v3 < 0x48u; v12 = 0; if ( !v4 && (v5 = (int (__stdcall *)(_DWORD *, int))v3[17]) != 0 && (v6 = *(_DWORD *)(a3 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = (_DWORD *)v5(v3, v6); v9 = &CefStringBase::`vftable'; v10 = 0; v11 = 0; sub_7787E0((int)&v9, v7); sub_778780((_DWORD *)a2, (int)&v9); sub_405F40(&v9); result = a2; } else { result = a2; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)(a2 + 4) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078D100) -------------------------------------------------------- int *__thiscall sub_78D100(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x18u && (v3 = (int (__stdcall *)(_DWORD *))v2[5]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078D140) -------------------------------------------------------- int *__thiscall sub_78D140(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078D180) -------------------------------------------------------- int *__thiscall sub_78D180(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x20u && (v3 = (int (__stdcall *)(_DWORD *))v2[7]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078D1C0) -------------------------------------------------------- int *__userpurge sub_78D1C0@(int a1@, int a2@, int *a3, int a4) { _DWORD *v4; // eax int (__cdecl *v5)(_DWORD *, int, int, _DWORD); // edx int v6; // ecx int v7; // eax int *result; // eax v4 = *(_DWORD **)(a1 - 4); if ( *v4 >= 0x28u && (v5 = (int (__cdecl *)(_DWORD *, int, int, _DWORD))v4[9]) != 0 && (v6 = *(_DWORD *)(a4 + 4)) != 0 && *(_DWORD *)(v6 + 4) ) { v7 = v5(v4, v6, a2, 0); sub_785280(a3, v7); result = a3; } else { result = a3; *a3 = 0; } return result; } //----- (0078D220) -------------------------------------------------------- int *__thiscall sub_78D220(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x2Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[10]) != 0 ) { v4 = v3(v2); sub_785280(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078D260) -------------------------------------------------------- _DWORD *__thiscall sub_78D260(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10580; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10580; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A0FB14; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10594; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A0FB14; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FB14: using guessed type int (*off_A0FB14[2])[4]; // A10580: using guessed type int (*off_A10580[5])(); // A10594: using guessed type int (__stdcall *off_A10594)(int); //----- (0078D2E0) -------------------------------------------------------- int __cdecl sub_78D2E0(int a1) { int v1; // eax int v3; // ecx void (__stdcall *v4)(int); // edx int v5; // esi v1 = a1; if ( !a1 ) return 0; if ( *(_DWORD *)(a1 - 8) != dword_AB9298 ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4) + 4))( *(_DWORD *)(*(_DWORD *)(a1 + 4) + 4) + a1 + 4, 0); return 0; } v3 = *(_DWORD *)(a1 - 4); v4 = *(void (__stdcall **)(int))(v3 + 4); if ( v4 ) { v4(v3); v1 = a1; } v5 = *(_DWORD *)(a1 - 4); if ( v1 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 + 4) + 4) + v1 + 4) + 4))(); return v5; } // AB9298: using guessed type int dword_AB9298; //----- (0078D350) -------------------------------------------------------- bool __thiscall sub_78D350(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x14u || !v2[4] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_78D2E0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[4])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078D3F0) -------------------------------------------------------- bool __thiscall sub_78D3F0(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *, int); // ecx bool result; // al v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *, int))v2[6]) != 0 ) result = v3(v2, a2) != 0; else result = 0; return result; } //----- (0078D420) -------------------------------------------------------- bool __thiscall sub_78D420(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // bl int v6; // [esp-4h] [ebp-10h] v2 = (_DWORD *)*(this - 1); if ( *v2 < 0x20u || !v2[7] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v6 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_7786A0(v6); v4 = ((int (__stdcall *)(_DWORD *, int))v2[7])(v2, v3) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v4; } //----- (0078D4C0) -------------------------------------------------------- bool __thiscall sub_78D4C0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax bool v6; // bl int v8; // [esp-Ch] [ebp-18h] int v9; // [esp-8h] [ebp-14h] int v10; // [esp-4h] [ebp-10h] v4 = (_DWORD *)*(this - 1); if ( *v4 < 0x24u || !v4[8] ) { if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return 0; } if ( !a2 ) return 0; v10 = a4; v9 = a3; v8 = a2; if ( a2 ) (**(void (__cdecl ***)(int, int, int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2, a3, a4); v5 = sub_7786A0(v8); v6 = ((int (__stdcall *)(_DWORD *, int, int, int))v4[8])(v4, v5, v9, v10) != 0; if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); return v6; } //----- (0078D560) -------------------------------------------------------- _DWORD *__thiscall sub_78D560(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A101A4; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A105A8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A10490; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A101A4: using guessed type int (*off_A101A4[2])(); // A10490: using guessed type int (*off_A10490[2])[4]; // A105A8: using guessed type int (__stdcall *off_A105A8)(int); //----- (0078D5E0) -------------------------------------------------------- int __cdecl sub_78D5E0(int a1) { int result; // eax int v2; // esi void (__stdcall *v3)(_DWORD); // edx result = a1; if ( a1 ) { if ( *(_DWORD *)(a1 - 8) == dword_AB92A4 ) { v3 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)(a1 - 4) + 4); if ( v3 ) { v3(*(_DWORD *)(a1 - 4)); result = a1; } v2 = *(_DWORD *)(a1 - 4); } else { v2 = sub_787B00(); result = a1; } if ( result ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 4) + 4) + result + 4) + 4))(); result = v2; } return result; } // AB92A4: using guessed type int dword_AB92A4; //----- (0078D640) -------------------------------------------------------- void __thiscall sub_78D640(_DWORD *this, int a2) { int v2; // esi int v3; // eax int v4; // [esp-4h] [ebp-Ch] v2 = *(this - 1); if ( *(_DWORD *)v2 >= 0x14u && *(_DWORD *)(v2 + 16) ) { if ( !a2 ) return; v4 = a2; if ( a2 ) (**(void (__cdecl ***)(int))(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4))(a2); v3 = sub_78D5E0(v4); (*(void (__stdcall **)(int, int))(v2 + 16))(v2, v3); } if ( a2 ) (*(void (**)(void))(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a2 + 4) + 4) + a2 + 4) + 4))(); } //----- (0078D6B0) -------------------------------------------------------- _DWORD *__thiscall sub_78D6B0(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = &off_A0FA54; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A105B0; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FA44; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FA44: using guessed type int (*off_A0FA44)[4]; // A0FA54: using guessed type int (*off_A0FA54)(); // A105B0: using guessed type int (*off_A105B0)(); //----- (0078D730) -------------------------------------------------------- _DWORD *__thiscall sub_78D730(_DWORD *this) { _DWORD *result; // eax int (__stdcall *v2)(_DWORD *); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x14u ) { v2 = (int (__stdcall *)(_DWORD *))result[4]; if ( v2 ) result = (_DWORD *)v2(result); } return result; } //----- (0078D750) -------------------------------------------------------- _DWORD *__thiscall sub_78D750(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10370; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10370; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = off_A1035C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A105B8; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = off_A1035C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A1035C: using guessed type int (*off_A1035C[2])[4]; // A10370: using guessed type int (*off_A10370[23])(); // A105B8: using guessed type int (*off_A105B8[2])(); //----- (0078D7D0) -------------------------------------------------------- _DWORD *__thiscall sub_78D7D0(_DWORD *this, char a2) { return sub_78D860((_DWORD *)((char *)this - *(this - 1)), a2); } //----- (0078D7E0) -------------------------------------------------------- void *__thiscall sub_78D7E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &off_A0FAD0; if ( a2 & 1 ) operator delete(this); return v2; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); //----- (0078D810) -------------------------------------------------------- int __cdecl sub_78D810(int a1, int a2, int a3) { int result; // eax int i; // esi _DWORD *v5; // edx _DWORD *v6; // ecx result = a3; for ( i = a1; i != a2; v6[1] = v5[1] ) { if ( i ) v5 = (_DWORD *)(i + 4); else v5 = 0; if ( result ) v6 = (_DWORD *)(result + 4); else v6 = 0; *v6 = *v5; i += 16; result += 16; } return result; } //----- (0078D860) -------------------------------------------------------- _DWORD *__thiscall sub_78D860(_DWORD *this, char a2) { int v2; // eax _DWORD *v3; // esi v2 = *(this - 3); v3 = this - 4; *v3 = off_A10370; *(_DWORD *)((char *)v3 + *(_DWORD *)(v2 + 4) + 4) = off_A1035C; *(_DWORD *)((char *)v3 + *(_DWORD *)(*(this - 3) + 4)) = *(_DWORD *)(*(this - 3) + 4) - 12; v3[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A1035C: using guessed type int (*off_A1035C[2])[4]; // A10370: using guessed type int (*off_A10370[23])(); //----- (0078D8B0) -------------------------------------------------------- _DWORD *__cdecl sub_78D8B0(int a1, int a2, _DWORD *a3) { int v3; // edx _DWORD *result; // eax _DWORD *v5; // esi v3 = a1; for ( result = a3; v3 != a2; result += 4 ) { if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; if ( v3 ) v5 = (_DWORD *)(v3 + 4); else v5 = 0; result[1] = *v5; result[2] = v5[1]; *result = &off_A10614; } v3 += 16; } return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (0078D910) -------------------------------------------------------- int __thiscall sub_78D910(int *this) { int *v1; // esi int result; // eax int v3; // ecx int v4; // eax void (__thiscall ***v5)(_DWORD, _DWORD); // edi int v6; // ebx void (__thiscall ***i)(_DWORD, _DWORD); // esi int v8; // [esp+4h] [ebp-4h] v1 = this; result = this[1]; v3 = *this; v8 = (int)v1; if ( v3 != result ) { v4 = sub_78D810(result, result, v3); v5 = (void (__thiscall ***)(_DWORD, _DWORD))v1[1]; v6 = v4; for ( i = (void (__thiscall ***)(_DWORD, _DWORD))v4; i != v5; i += 4 ) (**i)(i, 0); result = v8; *(_DWORD *)(v8 + 4) = v6; } return result; } //----- (0078D960) -------------------------------------------------------- unsigned int __thiscall sub_78D960(int *this, unsigned int a2) { unsigned int v2; // edi int *v3; // esi unsigned int result; // eax int v5; // ecx int v6; // eax int v7; // ebx void (__thiscall ***v8)(_DWORD, _DWORD); // edi int v9; // edi int (__thiscall **v10)(void *, char); // [esp+8h] [ebp-Ch] void (__thiscall ***v11)(_DWORD, _DWORD); // [esp+Ch] [ebp-8h] _DWORD *v12; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; if ( a2 > 0xFFFFFFF ) std::_Xlength_error("vector too long"); result = (this[2] - *this) >> 4; if ( result < a2 ) { v12 = 0; if ( a2 ) { v12 = operator new(16 * a2); if ( !v12 ) { v11 = 0; v10 = &off_A0F3E0; sub_777390(&v10); } } sub_78D8B0(*v3, v3[1], v12); v5 = v3[1]; v6 = *v3; v7 = v3[1] - *v3; v11 = (void (__thiscall ***)(_DWORD, _DWORD))v3[1]; if ( v6 ) { v8 = (void (__thiscall ***)(_DWORD, _DWORD))v6; if ( v6 != v5 ) { do { (**v8)(v8, 0); v8 += 4; } while ( v8 != v11 ); } operator delete((void *)*v3); v2 = a2; } result = (unsigned int)v12; v9 = (int)&v12[4 * v2]; v3[1] = (int)v12 + (v7 & 0xFFFFFFF0); v3[2] = v9; *v3 = result; } return result; } // A0F3E0: using guessed type int (__thiscall *off_A0F3E0)(void *, char); //----- (0078DA40) -------------------------------------------------------- unsigned int __thiscall sub_78DA40(int *this, int a2) { unsigned int v2; // eax unsigned int result; // eax unsigned int v4; // edx unsigned int v5; // edx v2 = (this[1] - *this) >> 4; if ( 0xFFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = a2 + v2; v4 = (this[2] - *this) >> 4; if ( result > v4 ) { if ( 0xFFFFFFF - (v4 >> 1) >= v4 ) v5 = (v4 >> 1) + v4; else v5 = 0; if ( v5 < result ) v5 = result; result = sub_78D960(this, v5); } return result; } //----- (0078DAA0) -------------------------------------------------------- _DWORD *__thiscall sub_78DAA0(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x20u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[7]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DAC0) -------------------------------------------------------- int __thiscall sub_78DAC0(_DWORD *this, int a2, int a3, unsigned __int8 a4) { _DWORD *v4; // edx int (__stdcall *v5)(_DWORD *, int, int, _DWORD); // esi int v6; // ecx int result; // eax v4 = (_DWORD *)*(this - 1); if ( *v4 >= 0x28u ) { v5 = (int (__stdcall *)(_DWORD *, int, int, _DWORD))v4[9]; if ( v5 ) { if ( a3 ) v6 = a3 + 4; else v6 = 0; if ( a2 ) result = v5(v4, a2 + 4, v6, a4); else result = v5(v4, 0, v6, a4); } } return result; } //----- (0078DB10) -------------------------------------------------------- _DWORD *__thiscall sub_78DB10(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x2Cu ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[10]; if ( v3 ) result = (_DWORD *)v3(result, *(_DWORD *)(a2 + 4)); } return result; } //----- (0078DB30) -------------------------------------------------------- int __thiscall sub_78DB30(_DWORD *this, int a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx _DWORD *v4; // eax void *v5; // esi int result; // eax void **v7; // [esp+4h] [ebp-Ch] void *v8; // [esp+8h] [ebp-8h] char v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x30u && (v3 = (int (__stdcall *)(_DWORD *))v2[11]) != 0 ) { v4 = (_DWORD *)v3(v2); v7 = &CefStringBase::`vftable'; v8 = 0; v9 = 0; sub_7787E0((int)&v7, v4); sub_778780((_DWORD *)a2, (int)&v7); v5 = v8; if ( v8 ) { if ( v9 ) { cef_string_utf16_clear(v8); operator delete(v5); } } result = a2; } else { result = a2; *(_DWORD *)(a2 + 4) = 0; *(_BYTE *)(a2 + 8) = 0; *(_DWORD *)a2 = &CefStringBase::`vftable'; } return result; } // 9A55A4: using guessed type int __cdecl cef_string_utf16_clear(_DWORD); // 9A7A7C: using guessed type void *CefStringBase::`vftable'; //----- (0078DBB0) -------------------------------------------------------- _DWORD *__thiscall sub_78DBB0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x34u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[12]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DBD0) -------------------------------------------------------- void __thiscall sub_78DBD0(_DWORD *this, _DWORD *a2) { int v2; // ebx void *v3; // edi unsigned int v4; // esi _DWORD *v5; // eax int v6; // edx unsigned int v7; // edi int v8; // ecx _DWORD *v9; // ecx _DWORD *v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v2 = *(this - 1); v3 = 0; v11 = *(this - 1); if ( *(_DWORD *)v2 >= 0x3Cu && *(_DWORD *)(v2 + 56) ) { v4 = (a2[1] - *a2) >> 4; if ( v4 > 0 ) { v5 = operator new[](8 * v4); v3 = v5; v10 = v5; if ( v5 ) { if ( v4 ) { v6 = 0; v7 = v4; do { v8 = v6 + *a2; if ( v8 ) v9 = (_DWORD *)(v8 + 4); else v9 = 0; *v5 = *v9; v5[1] = v9[1]; v6 += 16; v5 += 2; --v7; } while ( v7 ); v2 = v11; v3 = v10; } } } (*(void (__stdcall **)(int, unsigned int, void *))(v2 + 56))(v2, v4, v3); if ( v3 ) operator delete[](v3); } } //----- (0078DC80) -------------------------------------------------------- _DWORD *__thiscall sub_78DC80(_DWORD *this, unsigned __int8 a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, _DWORD); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x48u ) { v3 = (int (__stdcall *)(_DWORD *, _DWORD))result[17]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DCA0) -------------------------------------------------------- bool __thiscall sub_78DCA0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx bool result; // al v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x4Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[18]) != 0 ) result = v2(v1) != 0; else result = 0; return result; } //----- (0078DCC0) -------------------------------------------------------- _DWORD *__thiscall sub_78DCC0(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x58u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[21]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DCE0) -------------------------------------------------------- int __thiscall sub_78DCE0(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x5Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[22]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078DD00) -------------------------------------------------------- _DWORD *__thiscall sub_78DD00(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x60u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[23]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DD20) -------------------------------------------------------- int __thiscall sub_78DD20(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x64u && (v2 = (int (__stdcall *)(_DWORD *))v1[24]) != 0 ) result = v2(v1); else result = 0; return result; } //----- (0078DD40) -------------------------------------------------------- _DWORD *__thiscall sub_78DD40(_DWORD *this, int a2) { _DWORD *result; // eax int (__stdcall *v3)(_DWORD *, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x68u ) { v3 = (int (__stdcall *)(_DWORD *, int))result[25]; if ( v3 ) result = (_DWORD *)v3(result, a2); } return result; } //----- (0078DD60) -------------------------------------------------------- int __thiscall sub_78DD60(_DWORD *this) { _DWORD *v1; // eax int (__stdcall *v2)(_DWORD *); // ecx int result; // eax v1 = (_DWORD *)*(this - 1); if ( *v1 >= 0x6Cu && (v2 = (int (__stdcall *)(_DWORD *))v1[26]) != 0 ) result = v2(v1); else result = -1; return result; } //----- (0078DD80) -------------------------------------------------------- _DWORD *__thiscall sub_78DD80(int *this, unsigned int a2) { unsigned int v2; // esi int *v3; // edi unsigned int v4; // eax int v5; // esi _DWORD *result; // eax _DWORD *v7; // ecx v2 = a2; v3 = this; v4 = this[1]; if ( a2 >= v4 || *this > a2 ) { if ( v4 == this[2] ) sub_78DA40(this, 1); } else { v5 = a2 - *this; if ( v4 == this[2] ) sub_78DA40(this, 1); v2 = *v3 + (v5 & 0xFFFFFFF0); } result = (_DWORD *)v3[1]; v7 = 0; if ( result ) { *result = &off_A0FAD0; result[1] = 0; result[2] = 0; result[3] = 0; if ( v2 ) v7 = (_DWORD *)(v2 + 4); result[1] = *v7; result[2] = v7[1]; *result = &off_A10614; } v3[1] += 16; return result; } // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (0078DE00) -------------------------------------------------------- int *__thiscall sub_78DE00(_DWORD *this, int *a2) { _DWORD *v2; // eax int (__stdcall *v3)(_DWORD *); // ecx int v4; // eax int *result; // eax v2 = (_DWORD *)*(this - 1); if ( *v2 >= 0x1Cu && (v3 = (int (__stdcall *)(_DWORD *))v2[6]) != 0 ) { v4 = v3(v2); sub_78B6A0(a2, v4); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (0078DE40) -------------------------------------------------------- void __userpurge sub_78DE40(int a1@, int a2@, int a3@, void *a4) { int v4; // edi bool v5; // cf int (__stdcall *v6)(int, int); // edx int v7; // ST08_4 int *v8; // ebx int v9; // ST04_4 char *v10; // esi unsigned int v11; // eax unsigned int *v12; // eax unsigned int v13; // eax _DWORD *v14; // eax int v15; // edx int v16; // ecx _DWORD *v17; // ecx unsigned int v18; // edi int *v19; // esi int v20; // edx int v21; // eax int (__thiscall **v22)(void *, char); // [esp+4h] [ebp-18h] int v23; // [esp+8h] [ebp-14h] int v24; // [esp+Ch] [ebp-10h] int v25; // [esp+10h] [ebp-Ch] int v26; // [esp+14h] [ebp-8h] unsigned int v27; // [esp+18h] [ebp-4h] v4 = *(_DWORD *)(a1 - 4); v5 = *(_DWORD *)v4 < 0x44u; v26 = *(_DWORD *)(a1 - 4); if ( !v5 && *(_DWORD *)(v4 + 64) ) { v6 = *(int (__stdcall **)(int, int))(*(_DWORD *)a1 + 44); v7 = a2; v8 = (int *)a4; v9 = a3; a4 = (void *)((*((_DWORD *)a4 + 1) - *(_DWORD *)a4) >> 4); v10 = (char *)a4; v11 = v6(v9, v7); v27 = v11; v5 = v11 < (unsigned int)v10; v12 = (unsigned int *)&a4; if ( !v5 ) v12 = &v27; v13 = *v12; v27 = v13; a4 = 0; if ( v13 ) { a4 = operator new[](8 * v13); if ( a4 ) { memset(a4, 0, 8 * v27); if ( v10 ) { v14 = a4; v15 = 0; do { v16 = v15 + *v8; if ( v16 ) v17 = (_DWORD *)(v16 + 4); else v17 = 0; *v14 = *v17; v14[1] = v17[1]; v15 += 16; v14 += 2; --v10; } while ( v10 ); v4 = v26; } } } (*(void (__stdcall **)(int))(v4 + 64))(v4); sub_78D910(v8); if ( v27 && a4 ) { v18 = 0; if ( v27 ) { v19 = (int *)a4; do { v20 = *v19; v23 = 0; v24 = 0; v25 = 0; v21 = v19[1]; v23 = v20; v24 = v21; v22 = &off_A10614; sub_78DD80(v8, (unsigned int)&v22); ++v18; v19 += 2; v22 = &off_A0FAD0; } while ( v18 < v27 ); } operator delete[](a4); } } } // 78DE40: could not find valid save-restore pair for ebx // 78DE40: could not find valid save-restore pair for esi // A0FAD0: using guessed type int (__thiscall *off_A0FAD0)(void *, char); // A10614: using guessed type int (__thiscall *off_A10614)(void *, char); //----- (0078DF80) -------------------------------------------------------- _DWORD *__thiscall sub_78DF80(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = &off_A10618; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FD9C: using guessed type int (*off_A0FD9C)[4]; // A10618: using guessed type int (*off_A10618)(); // A10638: using guessed type int (*off_A10638[10])(); //----- (0078E000) -------------------------------------------------------- _DWORD *__thiscall sub_78E000(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx int v4; // ecx int v5; // edx result = this; if ( a2 ) { this[1] = &unk_A10508; this[4] = &CefBase::`vftable'; } v3 = this[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v3 + 4) + 4) = off_A0F73C; v4 = result[1]; *result = off_A10638; *(_DWORD *)((char *)result + *(_DWORD *)(v4 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; result[2] = 0; v5 = result[1]; *result = off_A10658; *(_DWORD *)((char *)result + *(_DWORD *)(v5 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)result + *(_DWORD *)(result[1] + 4)) = *(_DWORD *)(result[1] + 4) - 12; return result; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0F73C: using guessed type int (*off_A0F73C[3])(); // A0FD9C: using guessed type int (*off_A0FD9C)[4]; // A10638: using guessed type int (*off_A10638[10])(); // A10658: using guessed type int (*off_A10658[2])(); //----- (0078E080) -------------------------------------------------------- _DWORD *__thiscall sub_78E080(_DWORD *this, char a2) { int v2; // ecx int v3; // eax _DWORD *v4; // esi v2 = (int)this - *(this - 1); v3 = *(_DWORD *)(v2 - 12); v4 = (_DWORD *)(v2 - 16); *v4 = off_A10638; *(_DWORD *)((char *)v4 + *(_DWORD *)(v3 + 4) + 4) = &off_A0FD9C; *(_DWORD *)((char *)v4 + *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4)) = *(_DWORD *)(*(_DWORD *)(v2 - 16 + 4) + 4) - 12; v4[4] = &CefBase::`vftable'; if ( a2 & 1 ) operator delete(v4); return v4; } // 9A7B28: using guessed type void *CefBase::`vftable'; // A0FD9C: using guessed type int (*off_A0FD9C)[4]; // A10638: using guessed type int (*off_A10638[10])(); //----- (0078E0E0) -------------------------------------------------------- _DWORD *__thiscall sub_78E0E0(_DWORD *this, int a2, int a3) { _DWORD *result; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx result = (_DWORD *)*(this - 1); if ( *result >= 0x20u ) { v4 = (int (__stdcall *)(_DWORD *, int, int))result[7]; if ( v4 ) { if ( a3 ) result = (_DWORD *)v4(result, a2, a3); } } return result; } //----- (0078E110) -------------------------------------------------------- int __thiscall sub_78E110(_DWORD *this, int a2, int a3) { _DWORD *v3; // eax int (__stdcall *v4)(_DWORD *, int, int); // ecx int result; // eax v3 = (_DWORD *)*(this - 1); if ( *v3 >= 0x30u && (v4 = (int (__stdcall *)(_DWORD *, int, int))v3[11]) != 0 && a3 ) result = v4(v3, a2, a3); else result = 0; return result; } //----- (0078E170) -------------------------------------------------------- int __userpurge sub_78E170@(int a1@, int a2@, int a3) { _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax _DWORD *v6; // edx void *v7; // eax _DWORD *v8; // edx int v9; // esi int v10; // ebx signed int v11; // eax _DWORD *v12; // esi int v14; // [esp+0h] [ebp-40h] _DWORD *v15; // [esp+4h] [ebp-3Ch] _DWORD *v16; // [esp+8h] [ebp-38h] _DWORD *v17; // [esp+Ch] [ebp-34h] _DWORD *v18; // [esp+10h] [ebp-30h] _DWORD *v19; // [esp+14h] [ebp-2Ch] _DWORD *v20; // [esp+18h] [ebp-28h] CPPEH_RECORD ms_exc; // [esp+28h] [ebp-18h] ms_exc.old_esp = (DWORD)&v14; v14 = 0; v15 = 0; ms_exc.registration.TryLevel = 0; v16 = (_DWORD *)(a3 + 88); v3 = operator new(0x114u); v15 = v3; if ( v3 ) { v3[1] = 0; v3[2] = 0; v3[3] = 0; v3[4] = 0; v3[5] = 0; v16[3580] = v3; sub_791680(a1, a2, v3); *(_DWORD *)a3 = 0; *(_DWORD *)(a3 + 4) = 0; *(_DWORD *)(a3 + 8) = 0; *(_DWORD *)(a3 + 12) = 0; *(_DWORD *)(a3 + 16) = 0; *(_DWORD *)(a3 + 20) = 3; *(_DWORD *)(a3 + 24) = 2; *(_DWORD *)(a3 + 28) = 0; *(_DWORD *)(a3 + 36) = 0; *(_DWORD *)(a3 + 32) = 0; *(_DWORD *)(a3 + 40) = 0; *(_DWORD *)(a3 + 44) = 0; *(_DWORD *)(a3 + 48) = 0; *(_DWORD *)(a3 + 52) = 3; *(_DWORD *)(a3 + 56) = 3; *(_DWORD *)(a3 + 60) = 1; *(_DWORD *)(a3 + 64) = 0; *(_DWORD *)(a3 + 68) = 0; *(_DWORD *)(a3 + 72) = 1; *(_DWORD *)(a3 + 76) = 1; *(_DWORD *)(a3 + 80) = 75; v4 = v16; v16[29] = 0; v4[6] = 0; v4[7] = 0; *v4 = -1; v4[1] = 0; v4[2] = 0; v4[3] = 0; v4[4] = 0; v4[5] = 1; v4[8] = *(_DWORD *)(a3 + 4); v4[9] = *(_DWORD *)(a3 + 8); v4[10] = *(_DWORD *)(a3 + 12); v4[11] = *(_DWORD *)(a3 + 16); v4[12] = *(_DWORD *)(a3 + 20); v4[13] = *(_DWORD *)(a3 + 24); v4[14] = *(_DWORD *)(a3 + 28); v4[15] = 0; v4[17] = *(_DWORD *)(a3 + 36); v4[16] = *(_DWORD *)(a3 + 32); v4[18] = *(_DWORD *)(a3 + 40); v4[19] = *(_DWORD *)(a3 + 44); v4[20] = *(_DWORD *)(a3 + 48); v4[21] = *(_DWORD *)(a3 + 52); v4[22] = *(_DWORD *)(a3 + 56); v4[23] = *(_DWORD *)(a3 + 60); v4[24] = *(_DWORD *)(a3 + 64); v4[25] = *(_DWORD *)(a3 + 68); v4[26] = *(_DWORD *)(a3 + 72); v4[27] = *(_DWORD *)(a3 + 76); v4[28] = *(_DWORD *)(a3 + 80); v4[30] = 0; v4[31] = 0; v4[3525] = 0; v4[3526] = 0; v4[3513] = 0; v4[3514] = 0; v4[3515] = 0; v4[3516] = 0; v4[3517] = 0; v4[3518] = 0; v4[3519] = 0; v4[3520] = 0; v4[3521] = 0; v4[3522] = 0; v4[3523] = 0; v4[3524] = 0; dword_BA2964(v4 + 37, 180); dword_BA2964(v16 + 82, 180); dword_BA2964(v16 + 127, 180); dword_BA2964(v16 + 172, 180); v5 = v16; v17 = v16 + 40; v18 = v16 + 85; v19 = v16 + 130; v20 = v16 + 175; v16[39] = ((unsigned int)v16 + 167) & 0xFFFFFFF8; v5[84] = ((unsigned int)v5 + 347) & 0xFFFFFFF8; v5[129] = ((unsigned int)v5 + 527) & 0xFFFFFFF8; v5[174] = ((unsigned int)v5 + 707) & 0xFFFFFFF8; dword_BA2964(v5 + 1865, 1648); dword_BA2964(v16 + 2277, 1648); dword_BA2964(v16 + 2689, 1648); dword_BA2964(v16 + 3101, 1648); dword_BA2964(v16 + 217, 1648); dword_BA2964(v16 + 629, 1648); dword_BA2964(v16 + 1041, 1648); dword_BA2964(v16 + 1453, 1648); v6 = v16; v16[3575] = 1; v6[3561] = 0; v6[3562] = 0; v6[3563] = 0; v6[3564] = 0; v6[3565] = 0; v6[3566] = 0; v6[3567] = 0; v6[3568] = 4; v6[3569] = 0; v6[3570] = 0; v7 = operator new(0x40u); v8 = v16; v16[3571] = v7; if ( v7 ) { dword_BA2964(v7, 16 * v8[3568]); v9 = (int)v16; v16[3572] = 0; *(_DWORD *)(v9 + 14292) = 0; *(_DWORD *)(v9 + 14296) = 0; *(_DWORD *)(v9 + 18472) = 0; *(_DWORD *)(v9 + 18476) = 0; *(_DWORD *)(v9 + 14304) = 0; *(_DWORD *)(v9 + 18480) = 0; *(_DWORD *)(v9 + 14108) = 0; *(_BYTE *)(v9 + 14112) = 0; *(_DWORD *)(v9 + 14116) = 0; *(_BYTE *)(v9 + 14120) = 0; *(_DWORD *)(v9 + 14124) = 0; *(_BYTE *)(v9 + 14128) = 0; *(_DWORD *)(v9 + 14132) = 0; *(_BYTE *)(v9 + 14136) = 0; *(_DWORD *)(v9 + 14140) = 0; *(_DWORD *)(v9 + 14144) = 0; *(_BYTE *)(v9 + 14148) = 0; *(_BYTE *)(v9 + 14149) = 0; *(_DWORD *)(v9 + 14152) = 0; *(_DWORD *)(v9 + 14156) = 0; *(_BYTE *)(v9 + 14160) = 0; *(_BYTE *)(v9 + 14161) = 0; *(_DWORD *)(v9 + 14164) = 0; *(_DWORD *)(v9 + 14168) = 0; *(_BYTE *)(v9 + 14172) = 0; *(_BYTE *)(v9 + 14173) = 0; *(_DWORD *)(v9 + 14176) = 0; *(_DWORD *)(v9 + 14180) = 0; *(_BYTE *)(v9 + 14184) = 0; *(_BYTE *)(v9 + 14185) = 0; *(_DWORD *)(v9 + 14188) = 0; *(_DWORD *)(v9 + 14192) = 0; *(_BYTE *)(v9 + 14196) = 0; *(_BYTE *)(v9 + 14197) = 0; *(_DWORD *)(v9 + 14200) = 0; *(_DWORD *)(v9 + 14204) = 0; *(_BYTE *)(v9 + 14208) = 0; *(_BYTE *)(v9 + 14209) = 0; *(_DWORD *)(v9 + 14212) = 0; *(_DWORD *)(v9 + 14216) = 0; *(_BYTE *)(v9 + 14220) = 0; *(_BYTE *)(v9 + 14221) = 0; *(_DWORD *)(v9 + 14224) = 0; *(_DWORD *)(v9 + 14228) = 0; *(_BYTE *)(v9 + 14232) = 0; *(_BYTE *)(v9 + 14233) = 0; *(_DWORD *)(v9 + 136) = 0; *(_DWORD *)(v9 + 140) = 0; *(_DWORD *)(v9 + 144) = 0; *(_DWORD *)(v9 + 132) = 0; *(_DWORD *)(v9 + 128) = 0; *(_BYTE *)(v9 + 14236) = 0; *(_BYTE *)(v9 + 14240) = 0; *(_BYTE *)(v9 + 14237) = 1; *(_BYTE *)(v9 + 14241) = 1; *(_BYTE *)(v9 + 14238) = 1; *(_BYTE *)(v9 + 14242) = 1; *(_BYTE *)(v9 + 14239) = 1; *(_BYTE *)(v9 + 14243) = 1; *(_DWORD *)(*(_DWORD *)(v9 + 14284) + 12) = 0; v10 = *(_DWORD *)(v9 + 14284); *(_DWORD *)(v10 + 28) = 1; *(_DWORD *)(*(_DWORD *)(v9 + 14284) + 44) = 1; *(_DWORD *)(*(_DWORD *)(v9 + 14284) + 60) = 1; *(_DWORD *)(v9 + 14372) = 0; *(_DWORD *)(v9 + 14328) = 0; *(_DWORD *)(v9 + 14332) = 0; *(_DWORD *)(v9 + 14336) = 0; *(_DWORD *)(v9 + 14340) = 0; *(_DWORD *)(v9 + 14356) = 0; *(_DWORD *)(v9 + 14348) = 0; *(_DWORD *)(v9 + 14352) = 0; v11 = sub_791900(v10, v9, (int)v15); v12 = v16; v16[3591] = v11; v12[3581] = 0; v12[3586] = 0; v12[3578] = 0; v12[3579] = 0; *((_BYTE *)v12 + 14360) = 0; v12[3592] = 0; v12[4621] = 0; v12[4982] = v11; v12[4983] = 0; v12[4984] = 0; v12[4985] = 0; v12[4986] = 0; v12[4987] = 0; *((_WORD *)v12 + 9976) = 100; *((_WORD *)v12 + 9977) = 0; *((_WORD *)v12 + 9978) = 0; v12[4990] = 0; *((_WORD *)v12 + 9982) = 257; *((_BYTE *)v12 + 19966) = 0; *((_WORD *)v12 + 9984) = 1; *((_WORD *)v12 + 9985) = 1; v12[4993] = 0; *((_WORD *)v12 + 9988) = 0; ms_exc.registration.TryLevel = -1; } else { v14 = -5; } } else { v14 = -5; } if ( v14 < 0 ) { if ( *(_DWORD *)(a3 + 14372) ) { operator delete(*(void **)(a3 + 14372)); *(_DWORD *)(a3 + 14372) = 0; *(_DWORD *)(a3 + 14360) = 0; } if ( *(_DWORD *)(a3 + 20028) ) { operator delete(*(void **)(a3 + 20028)); *(_DWORD *)(a3 + 20028) = 0; } if ( *(_DWORD *)(a3 + 18568) ) { operator delete(*(void **)(a3 + 18568)); *(_DWORD *)(a3 + 18568) = 0; } if ( *(_DWORD *)(a3 + 14392) ) { if ( *(_DWORD *)(*(_DWORD *)(a3 + 14392) + 52) ) { operator delete(*(void **)(*(_DWORD *)(a3 + 14392) + 52)); *(_DWORD *)(*(_DWORD *)(a3 + 14392) + 52) = 0; } operator delete(*(void **)(a3 + 14392)); *(_DWORD *)(a3 + 14392) = 0; } } return v14; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); //----- (0078E900) -------------------------------------------------------- int __stdcall sub_78E900(_DWORD *a1) { _DWORD *v1; // eax void *v2; // edx void *v3; // edx void *v4; // edx void *v5; // edx _DWORD *v6; // edx void *v7; // eax int v8; // edx _DWORD *v9; // edx int v11; // ecx int v12; // edx void *v13; // ebx signed int v14; // edx signed int v15; // edx int v16; // [esp+0h] [ebp-38h] _DWORD *v17; // [esp+4h] [ebp-34h] int v18; // [esp+8h] [ebp-30h] void *v19; // [esp+Ch] [ebp-2Ch] CPPEH_RECORD ms_exc; // [esp+20h] [ebp-18h] ms_exc.old_esp = (DWORD)&v16; v16 = 0; ms_exc.registration.TryLevel = 0; v1 = a1 + 22; v17 = a1 + 22; v2 = (void *)a1[3615]; if ( v2 ) { if ( !sub_791A30(v2) ) { v16 = -9; goto LABEL_19; } v1 = v17; v17[3593] = 0; } v1[3513] = 0; v1[3514] = 0; v1[3515] = 0; v1[3516] = 0; v18 = 4; if ( v1[3568] <= 255 ) { v3 = (void *)v1[3571]; if ( v3 ) { operator delete(v3); v1 = v17; v17[3571] = 0; v1[3568] = 0; } v4 = (void *)v1[4985]; if ( v4 ) { operator delete(v4); v1 = v17; v17[4985] = 0; } if ( v1[4986] == 1 ) { v11 = v1[4987]; if ( v11 ) { v12 = *(_DWORD *)(v11 + 4); v13 = *(void **)v11; if ( *(_DWORD *)v11 > v12 ) { *(_DWORD *)v11 = v12; v11 = v1[4987]; v13 = *(void **)v11; } v14 = *(_DWORD *)(v11 + 8); if ( (signed int)v13 > v14 ) { *(_DWORD *)v11 = v14; v11 = v1[4987]; v13 = *(void **)v11; } v15 = *(_DWORD *)(v11 + 12); if ( (signed int)v13 > v15 ) { *(_DWORD *)v11 = v15; v13 = *(void **)v1[4987]; } operator delete(v13); operator delete((void *)v17[4987]); v1 = v17; v17[4987] = 0; } } v5 = (void *)v1[4620]; if ( v5 ) { operator delete(v5); v1 = v17; v17[4620] = 0; } v6 = (_DWORD *)v1[3576]; if ( v6 ) { v7 = (void *)v6[13]; if ( v7 ) { operator delete(v7); v8 = (int)v17; *(_DWORD *)(v17[3576] + 52) = 0; v6 = *(_DWORD **)(v8 + 14304); } operator delete(v6); v1 = v17; v17[3576] = 0; } dword_BA2964(v1 + 3527, 32); dword_BA2964(v17 + 3535, 96); v9 = v17; v17[32] = 0; v9[33] = 0; v9[36] = 0; v9[34] = 0; v9[35] = 0; v9[3525] = 0; v9[3526] = 0; ms_exc.registration.TryLevel = -1; } else { v16 = -8; } LABEL_19: sub_791750(a1[3602]); v19 = (void *)a1[3602]; if ( v19 ) { operator delete(v19); a1[3602] = 0; } return v16; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); //----- (0078EBB0) -------------------------------------------------------- signed int __cdecl sub_78EBB0(_DWORD *a1) { char v1; // cl char v2; // dl char v3; // al int v4; // esi signed int v5; // ebx signed int v6; // eax signed int v7; // eax int v9; // ecx int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // edx int v15; // edx int v16; // edx int v17; // edx int v18; // edx int v19; // edx int v20; // edx signed int v21; // ebx signed int v22; // ebx signed int v23; // ebx int v24; // ebx int v25; // ebx char v26; // [esp+8h] [ebp-1Ch] char v27; // [esp+Ch] [ebp-18h] v1 = 0; v2 = 0; v27 = 0; v3 = 0; v26 = 0; if ( *a1 ) return 0; v4 = a1[22]; if ( v4 == -1 ) return -8; if ( v4 && v4 != 1 && v4 != 2 && v4 != 3 && v4 != 4 && v4 != 5 && v4 != 6 && v4 != 7 && v4 != 14 && v4 != 15 && v4 != 16 && v4 != 17 && v4 != 18 && v4 != 19 && v4 != 20 && v4 != 21 ) { if ( v4 != 8 && v4 != 9 && v4 != 10 && v4 != 11 && v4 != 12 && v4 != 13 ) return -8; v27 = 1; } else { v1 = 1; } if ( !v4 || v4 == 2 || v4 == 4 || v4 == 6 || v4 == 14 || v4 == 16 || v4 == 18 || v4 == 20 || v4 == 8 || v4 == 10 || v4 == 12 ) { v2 = 1; } if ( v4 != 2 && v4 != 3 && v4 != 6 && v4 != 7 && v4 != 8 && v4 != 9 && v4 != 12 && v4 != 13 && v4 != 18 && v4 != 19 && v4 != 16 && v4 != 17 && v4 != 15 && v4 != 20 && v4 != 21 || (v3 = 1, a1[5005]) ) { LABEL_54: if ( v2 ) { if ( !a1[8] ) return -8; } else if ( !a1[9] || !a1[10] ) { return -8; } v5 = a1[13]; if ( v5 <= 0 || v5 > 256 ) return -8; if ( v27 ) { if ( v3 ) { v6 = a1[11]; if ( v6 <= 0 ) return -8; if ( v6 > 0xFFFF ) return -8; v7 = a1[12]; if ( v7 <= 0 || v7 > 0xFFFF ) return -8; if ( a1[6] != 4 && a1[14] != 3 && v5 > a1[5] ) return -8; } if ( v5 == 1 && a1[15] ) return -3; if ( v5 == 3 ) { v13 = a1[15]; if ( v13 != 1 && v13 != 2 && v13 ) return -3; } if ( v5 == 4 ) { v12 = a1[15]; if ( v12 != 3 && v12 != 4 && v12 ) return -3; } if ( v5 != 1 && v5 != 3 && v5 != 4 && a1[15] ) return -3; } if ( v1 ) { v9 = a1[14]; if ( v9 == 4 && v5 == 1 ) { if ( (v16 = a1[6], v16 == 4) && a1[5] == 1 || v16 == 1 && a1[5] == 3 || v16 == 2 && a1[5] == 3 || v16 == 5 && a1[5] == 4 ) { v26 = 1; } } if ( v9 == 1 && v5 == 3 ) { if ( (v15 = a1[6], v15 == 1) && a1[5] == 3 || v15 == 2 && a1[5] == 3 || v15 == 5 && a1[5] == 4 ) v26 = 1; } if ( v9 == 5 && v5 == 4 && a1[6] == 5 && a1[5] == 4 ) v26 = 1; if ( v9 == 3 && v5 == 3 ) { v14 = a1[6]; if ( v14 == 4 && a1[5] == 1 || v14 == 1 && a1[5] == 3 || v14 == 2 && a1[5] == 3 || v14 == 5 && a1[5] == 4 ) v26 = 1; if ( v14 == 3 ) v26 = 1; } if ( v9 == 6 && v5 == 4 && a1[6] == 5 && a1[5] == 4 ) v26 = 1; if ( v9 != 255 || a1[6] != 255 ) goto LABEL_94; } else { v10 = a1[6]; if ( v10 == 4 && a1[5] == 1 ) { if ( (v20 = a1[14], v20 == 4) && v5 == 1 || v20 == 3 && v5 == 3 ) v26 = 1; } if ( v10 == 1 && a1[5] == 3 ) { if ( (v19 = a1[14], v19 == 4) && v5 == 1 || v19 == 1 && v5 == 3 || v19 == 3 && v5 == 3 ) v26 = 1; } if ( v10 == 1 && a1[5] == 4 && a1[14] == 3 && v5 == 3 ) v26 = 1; if ( v10 == 2 && a1[5] == 3 ) { if ( (v18 = a1[14], v18 == 4) && v5 == 1 || v18 == 1 && v5 == 3 || v18 == 3 && v5 == 3 ) v26 = 1; } if ( v10 == 5 && a1[5] == 4 ) { if ( (v17 = a1[14], v17 == 5) && v5 == 4 || v17 == 6 && v5 == 4 ) v26 = 1; } if ( v10 == 3 && a1[5] == 3 && a1[14] == 3 && v5 == 3 ) v26 = 1; if ( v10 != 255 || v5 > a1[5] || a1[14] != 255 ) { LABEL_94: if ( v26 ) goto LABEL_95; return -8; } } LABEL_95: v11 = a1[27]; if ( v11 && v11 != 1 ) return -8; if ( a1[5008] == 1 && a1[5005] ) return -8; return 0; } if ( !a1[1] ) return -8; v21 = a1[2]; if ( v21 > 0xFFFF ) return -8; if ( v21 <= 0 ) return -8; v22 = a1[3]; if ( v22 > 0xFFFF || v22 < -65535 ) return -8; if ( v4 != 20 && v4 != 21 || (v25 = a1[6], v25 == 1) || v25 == 2 ) { if ( a1[4] < 0 ) return -8; v23 = a1[5]; if ( v23 <= 0 || v23 > 255 ) return -8; v24 = a1[7]; if ( v24 && (v24 != 2 || a1[6] != 3) ) return -3; goto LABEL_54; } return -27; } //----- (0078F6E1) -------------------------------------------------------- int __usercall sub_78F6E1@(int a1@) { int result; // eax int v2; // et1 int v3; // ebx int v4; // esi int v5; // edi int v6; // ecx int v7; // et1 int v8; // eax void (*v9)(void); // eax v7 = *(_DWORD *)(a1 - 24); *(_DWORD *)(a1 - 120) = -1; v8 = *(_DWORD *)(a1 - 116); if ( v8 ) { v9 = *(void (**)(void))(v8 + 24); if ( v9 ) v9(); } *(_DWORD *)(a1 - 4) = -1; if ( *(_DWORD *)(a1 - 120) < 0 && *(_DWORD *)(*(_DWORD *)(a1 + 8) + 14460) ) { sub_791A30(*(HANDLE *)(*(_DWORD *)(a1 + 8) + 14460)); *(_DWORD *)(*(_DWORD *)(a1 + 8) + 14460) = 0; } result = *(_DWORD *)(a1 - 120); v2 = *(_DWORD *)(a1 - 24); v3 = *(_DWORD *)(a1 - 76); v4 = *(_DWORD *)(a1 - 68); v5 = *(_DWORD *)(a1 - 72); v6 = *(_DWORD *)(a1 - 16); return result; } //----- (0078FDFD) -------------------------------------------------------- signed int sub_78FDFD() { return 1; } //----- (0078FE10) -------------------------------------------------------- int __stdcall sub_78FE10(int a1, int a2) { _DWORD *v2; // esi int v3; // eax int v5; // ecx int v6; // eax int v7; // eax int v8; // eax int v9; // eax _DWORD *v10; // eax int v11; // ebx int v12; // edx int v13; // eax int v14; // edi int v15; // edi int v16; // eax int v17; // esi int v18; // eax int v19; // eax signed int v20; // eax void *v21; // eax int v22; // edx int v23; // eax int v24; // edx int v25; // eax int v26; // edx int v27; // eax int v28; // eax int v29; // eax int v30; // edi int v31; // ecx int v32; // eax int v33; // edx int v34; // eax int v35; // edi int v36; // edi int v37; // edx int v38; // eax signed int v39; // ebx HANDLE v40; // eax int v41; // [esp+0h] [ebp-50h] HANDLE v42; // [esp+4h] [ebp-4Ch] _DWORD *v43; // [esp+8h] [ebp-48h] int v44; // [esp+Ch] [ebp-44h] int i; // [esp+10h] [ebp-40h] BOOL v46; // [esp+14h] [ebp-3Ch] int v47; // [esp+18h] [ebp-38h] int v48; // [esp+28h] [ebp-28h] int v49; // [esp+2Ch] [ebp-24h] _DWORD *v50; // [esp+30h] [ebp-20h] int v51; // [esp+34h] [ebp-1Ch] CPPEH_RECORD ms_exc; // [esp+38h] [ebp-18h] ms_exc.old_esp = (DWORD)&v41; v41 = 0; v42 = 0; ms_exc.registration.TryLevel = 0; v43 = (_DWORD *)(a1 + 88); v44 = 0; *v43 = a2; v41 = sub_78EBB0((_DWORD *)a1); if ( !v41 ) { v2 = v43; v3 = *v43; if ( (*v43 == 8 || v3 == 10 || v3 == 12) && !v43[3593] ) { v40 = sub_7919F0(*(LPCSTR *)(a1 + 32), 0xC0000000); v42 = v40; if ( !v40 ) { v41 = -10; goto LABEL_8; } v2 = v43; v43[3593] = v40; } if ( !*(_DWORD *)a1 && !v2[3576] ) { v2[19] = *(_DWORD *)(a1 + 44); v2[20] = *(_DWORD *)(a1 + 48); v2[21] = *(_DWORD *)(a1 + 52); v30 = *(_DWORD *)(a1 + 56); v48 = v30; v2[22] = v30; v2[23] = *(_DWORD *)(a1 + 60); v2[17] = *(_DWORD *)(a1 + 36); v2[18] = *(_DWORD *)(a1 + 40); v2[16] = *(_DWORD *)(a1 + 32); v2[8] = *(_DWORD *)(a1 + 4); v2[9] = *(_DWORD *)(a1 + 8); v31 = *(_DWORD *)(a1 + 12); v2[10] = v31; v2[11] = *(_DWORD *)(a1 + 16); v2[12] = *(_DWORD *)(a1 + 20); v32 = *(_DWORD *)(a1 + 24); v49 = v32; v2[13] = v32; v33 = *(_DWORD *)(a1 + 28); v2[14] = v33; v34 = *(_DWORD *)(a1 + 8); v35 = *(_DWORD *)(a1 + 16); v50 = *(_DWORD **)(a1 + 16); if ( v33 == 2 ) v36 = v35 + 2 * v34; else v36 = (int)v50 + v34 * *(_DWORD *)(a1 + 20); v2[15] = v36; if ( v31 < 0 ) v2[15] = -v36; v2[26] = *(_DWORD *)(a1 + 72); v2[27] = *(_DWORD *)(a1 + 76); v2[28] = *(_DWORD *)(a1 + 80); if ( v33 == 2 && v49 == 3 && v48 == 3 ) v2[23] = 2; } v41 = sub_792650((int)v2); if ( !v41 ) { v5 = (int)v43; v43[26] = 1; v6 = *(_DWORD *)(v5 + 88); if ( v6 == 1 || v6 == 5 || (v7 = *(_DWORD *)(v5 + 52), v7 == 4) || v7 == 255 || v7 == 3 ) *(_DWORD *)(v5 + 104) = 0; v50 = (_DWORD *)a1; v8 = *(_DWORD *)(a1 + 52); v51 = v8; *(_DWORD *)(v5 + 14272) = v8; v9 = *(_DWORD *)(a1 + 60); if ( v9 ) { switch ( v9 ) { case 1: **(_DWORD **)(v5 + 14284) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 4) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 8) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 16) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 20) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 24) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 32) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 36) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 40) = 1; if ( *(_DWORD *)(v5 + 14100) ) { v51 = *(_DWORD *)(v5 + 14272); } else { if ( v50[18] ) { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 1; } else { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 0; } v51 = *(_DWORD *)(v5 + 14272); } break; case 2: **(_DWORD **)(v5 + 14284) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 4) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 8) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 16) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 20) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 24) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 32) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 36) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 40) = 1; if ( *(_DWORD *)(v5 + 14100) ) { v51 = *(_DWORD *)(v5 + 14272); } else { if ( v50[18] ) { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 1; } else { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 0; } v51 = *(_DWORD *)(v5 + 14272); } break; case 3: **(_DWORD **)(v5 + 14284) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 4) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 8) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 16) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 20) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 24) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 32) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 36) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 40) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 48) = 3; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 52) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 56) = 2; if ( *(_DWORD *)(v5 + 14100) ) { v51 = *(_DWORD *)(v5 + 14272); } else { if ( v50[18] ) { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 1; } else { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 0; } *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 60) = 0; v51 = *(_DWORD *)(v5 + 14272); } break; case 4: **(_DWORD **)(v5 + 14284) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 4) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 8) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 16) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 20) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 24) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 32) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 36) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 40) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 48) = 3; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 52) = 2; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 56) = 1; if ( *(_DWORD *)(v5 + 14100) ) { v51 = *(_DWORD *)(v5 + 14272); } else { if ( v50[18] ) { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 1; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 1; } else { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 28) = 0; *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 44) = 0; } *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 60) = 0; v51 = *(_DWORD *)(v5 + 14272); } break; } } else { v37 = 0; for ( i = 0; v37 < v51; v51 = *(_DWORD *)(v5 + 14272) ) { v38 = 16 * v37; *(_DWORD *)(v38 + *(_DWORD *)(v5 + 14284)) = v37; *(_DWORD *)(v38 + *(_DWORD *)(v5 + 14284) + 4) = 1; *(_DWORD *)(v38 + *(_DWORD *)(v5 + 14284) + 8) = 1; i = ++v37; } if ( !*(_DWORD *)(v5 + 14100) ) { *(_DWORD *)(*(_DWORD *)(v5 + 14284) + 12) = 0; if ( *(_DWORD *)(v5 + 104) ) { v51 = *(_DWORD *)(v5 + 14272); if ( v51 >= 2 ) { v39 = 1; for ( i = 1; v39 < v51; v51 = *(_DWORD *)(v5 + 14272) ) { *(_DWORD *)(16 * v39++ + *(_DWORD *)(v5 + 14284) + 12) = 1; i = v39; } } } else { v51 = *(_DWORD *)(v5 + 14272); } } } *(_DWORD *)(v5 + 14244) = 8; v10 = v50; *(_DWORD *)(v5 + 14248) = v50[11]; *(_DWORD *)(v5 + 14252) = v10[12]; *(_DWORD *)(v5 + 108) = 0; v49 = 0; *(_DWORD *)(v5 + 14264) = 0; v48 = 0; *(_DWORD *)(v5 + 14268) = 0; v11 = 0; i = 0; if ( v51 > 0 ) { v12 = *(_DWORD *)(v5 + 14284); do { v13 = 16 * v11; v14 = *(_DWORD *)(16 * v11 + v12 + 4); if ( v49 < v14 ) { v49 = *(_DWORD *)(16 * v11 + v12 + 4); *(_DWORD *)(v5 + 14264) = v14; } v15 = *(_DWORD *)(v13 + v12 + 8); if ( v48 < v15 ) { v48 = *(_DWORD *)(v13 + v12 + 8); *(_DWORD *)(v5 + 14268) = v15; } if ( *(_DWORD *)(v13 + v12 + 4) != 1 || *(_DWORD *)(v13 + v12 + 8) != 1 ) *(_DWORD *)(v5 + 108) = 1; i = ++v11; } while ( v11 < v51 ); } if ( *(_DWORD *)(v5 + 116) == 1 ) { v16 = 8; v49 = 8; *(_DWORD *)(v5 + 14260) = 8; v48 = 8; *(_DWORD *)(v5 + 14256) = 8; } else { v16 = 8 * v49; v49 = v16; *(_DWORD *)(v5 + 14260) = v16; v48 *= 8; *(_DWORD *)(v5 + 14256) = v48; } v17 = (v16 + *(_DWORD *)(v5 + 76) - 1) / v16; *(_DWORD *)(v5 + 120) = v17; v18 = (v48 + *(_DWORD *)(v5 + 80) - 1) / v48; *(_DWORD *)(v5 + 124) = v18; *(_DWORD *)(v5 + 14276) = v17; *(_DWORD *)(v5 + 14280) = v17 * v18; if ( *(_DWORD *)(v5 + 14304) ) { v19 = *(_DWORD *)v5; } else { *(_DWORD *)(v5 + 14340) = 0; v27 = v50[3]; if ( v27 < 0 ) { v28 = *(_DWORD *)(v5 + 32) + *(_DWORD *)(v5 + 60) * (v27 + 1); *(_DWORD *)(v5 + 32) = v28; } else { v28 = *(_DWORD *)(v5 + 32); } *(_DWORD *)(v5 + 14356) = v28; v41 = sub_793410((int *)v5); if ( v41 ) goto LABEL_8; v5 = (int)v43; v19 = *v43; if ( *v43 == 10 || v19 == 11 ) { v29 = v43[3585]; v43[18] = v29; *(_DWORD *)(a1 + 40) = v29; v19 = *(_DWORD *)v5; } } if ( v19 == 8 || v19 == 9 || v19 == 12 || v19 == 13 ) { *(_DWORD *)(v5 + 18484) = (v5 + 18519) & 0xFFFFFFE0; if ( *(_DWORD *)(v5 + 19936) ) v20 = sub_794E40(v5); else v20 = sub_793760(v5); v41 = v20; v5 = (int)v43; v43[3575] = 1; v26 = *(_DWORD *)(v5 + 14340) + v44; v44 = v26; *(_DWORD *)(v5 + 72) = v26; *(_DWORD *)(a1 + 40) = v26; } else { v20 = v41; } if ( v20 != 1 && v20 != 2 ) { v21 = *(void **)(v5 + 14372); if ( v21 ) { v46 = sub_791A30(v21); if ( !v46 ) { v41 = -9; goto LABEL_8; } v43[3593] = 0; } ms_exc.registration.TryLevel = -1; goto LABEL_8; } v22 = *(_DWORD *)(v5 + 14264) * (8 * *(_DWORD *)(v5 + 12) + 8); *(_DWORD *)(v5 + 12) = v22; v23 = *(_DWORD *)(v5 + 76); if ( v22 > v23 ) *(_DWORD *)(v5 + 12) = v23; v24 = *(_DWORD *)(v5 + 14268) * (8 * *(_DWORD *)(v5 + 16) + 8); *(_DWORD *)(v5 + 16) = v24; v25 = *(_DWORD *)(v5 + 80); if ( v24 > v25 ) *(_DWORD *)(v5 + 16) = v25; } } LABEL_8: if ( v41 < 0 && *(_DWORD *)(a1 + 14460) ) { sub_791A30(*(HANDLE *)(a1 + 14460)); *(_DWORD *)(a1 + 14460) = 0; } v47 = *(_DWORD *)(a1 + 14408); (*(void (**)(void))(v47 + 24))(); return v41; } //----- (00790857) -------------------------------------------------------- void __stdcall sub_790857(int a1) { JUMPOUT(&locret_790962); } //----- (00790861) -------------------------------------------------------- void __stdcall sub_790861(int a1) { JUMPOUT(&locret_790962); } //----- (0079086B) -------------------------------------------------------- void __stdcall sub_79086B(int a1) { JUMPOUT(&locret_790962); } //----- (00790875) -------------------------------------------------------- void __stdcall sub_790875(int a1) { JUMPOUT(&locret_790962); } //----- (0079087F) -------------------------------------------------------- void __stdcall sub_79087F(int a1) { JUMPOUT(&locret_790962); } //----- (00790889) -------------------------------------------------------- void __stdcall sub_790889(int a1) { JUMPOUT(&locret_790962); } //----- (00790893) -------------------------------------------------------- void __stdcall sub_790893(int a1) { JUMPOUT(&locret_790962); } //----- (0079089D) -------------------------------------------------------- void __stdcall sub_79089D(int a1) { JUMPOUT(&locret_790962); } //----- (007908A7) -------------------------------------------------------- void __stdcall sub_7908A7(int a1) { JUMPOUT(&locret_790962); } //----- (007908B1) -------------------------------------------------------- void __stdcall sub_7908B1(int a1) { JUMPOUT(&locret_790962); } //----- (007908BB) -------------------------------------------------------- void __stdcall sub_7908BB(int a1) { JUMPOUT(&locret_790962); } //----- (007908C5) -------------------------------------------------------- void __stdcall sub_7908C5(int a1) { JUMPOUT(&locret_790962); } //----- (007908CF) -------------------------------------------------------- void __stdcall sub_7908CF(int a1) { JUMPOUT(&locret_790962); } //----- (007908D9) -------------------------------------------------------- void __stdcall sub_7908D9(int a1) { JUMPOUT(&locret_790962); } //----- (007908E3) -------------------------------------------------------- void __stdcall sub_7908E3(int a1) { JUMPOUT(&locret_790962); } //----- (007908ED) -------------------------------------------------------- void __stdcall sub_7908ED(int a1) { JUMPOUT(&locret_790962); } //----- (007908F4) -------------------------------------------------------- void __stdcall sub_7908F4(int a1) { JUMPOUT(&locret_790962); } //----- (007908FB) -------------------------------------------------------- void __stdcall sub_7908FB(int a1) { JUMPOUT(&locret_790962); } //----- (00790902) -------------------------------------------------------- void __stdcall sub_790902(int a1) { JUMPOUT(&locret_790962); } //----- (00790909) -------------------------------------------------------- void __stdcall sub_790909(int a1) { JUMPOUT(&locret_790962); } //----- (00790910) -------------------------------------------------------- void __stdcall sub_790910(int a1) { JUMPOUT(&locret_790962); } //----- (00790917) -------------------------------------------------------- void __stdcall sub_790917(int a1) { JUMPOUT(&locret_790962); } //----- (0079091E) -------------------------------------------------------- void __stdcall sub_79091E(int a1) { JUMPOUT(&locret_790962); } //----- (00790925) -------------------------------------------------------- void __stdcall sub_790925(int a1) { JUMPOUT(&locret_790962); } //----- (0079092C) -------------------------------------------------------- void __stdcall sub_79092C(int a1) { JUMPOUT(&locret_790962); } //----- (00790933) -------------------------------------------------------- void __stdcall sub_790933(int a1) { JUMPOUT(&locret_790962); } //----- (0079093A) -------------------------------------------------------- void __stdcall sub_79093A(int a1) { JUMPOUT(&locret_790962); } //----- (00790941) -------------------------------------------------------- void __stdcall sub_790941(int a1) { JUMPOUT(&locret_790962); } //----- (00790948) -------------------------------------------------------- void __stdcall sub_790948(int a1) { JUMPOUT(&locret_790962); } //----- (0079094F) -------------------------------------------------------- void __stdcall sub_79094F(int a1) { JUMPOUT(&locret_790962); } //----- (00790956) -------------------------------------------------------- char *__stdcall sub_790956(int a1) { return aReserved; } //----- (007909A0) -------------------------------------------------------- HMODULE __cdecl sub_7909A0(int a1) { HMODULE result; // eax result = *(HMODULE *)(a1 + 4); if ( result || (result = LoadLibraryA(LibFileName), (*(_DWORD *)(a1 + 4) = result) != 0) ) { result = (HMODULE)GetProcAddress(result, ProcName); dword_BA2974 = (int)result; if ( result ) { result = (HMODULE)GetProcAddress(*(HMODULE *)(a1 + 4), aPeekmessagea); dword_BA2970 = (int)result; if ( result ) { result = (HMODULE)GetProcAddress(*(HMODULE *)(a1 + 4), aPostquitmessag); dword_BA296C = (int)result; if ( result ) { result = (HMODULE)GetProcAddress(*(HMODULE *)(a1 + 4), aWsprintfa); dword_BA2978 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD))result; } } } } return result; } // BA296C: using guessed type int dword_BA296C; // BA2970: using guessed type int dword_BA2970; // BA2974: using guessed type int dword_BA2974; // BA2978: using guessed type int (__cdecl *dword_BA2978)(_DWORD, _DWORD, _DWORD, _DWORD); //----- (00790A20) -------------------------------------------------------- int __cdecl sub_790A20(int a1) { int result; // eax if ( a1 ) { if ( *(_DWORD *)(a1 + 4) ) { FreeLibrary(*(HMODULE *)(a1 + 4)); *(_DWORD *)(a1 + 4) = 0; } result = 0; dword_BA2974 = 0; dword_BA2970 = 0; dword_BA296C = 0; dword_BA2978 = 0; } return result; } // BA296C: using guessed type int dword_BA296C; // BA2970: using guessed type int dword_BA2970; // BA2974: using guessed type int dword_BA2974; // BA2978: using guessed type int (__cdecl *dword_BA2978)(_DWORD, _DWORD, _DWORD, _DWORD); //----- (00790A60) -------------------------------------------------------- HMODULE __cdecl sub_790A60(int a1) { HMODULE result; // eax result = *(HMODULE *)(a1 + 8); if ( result || (result = LoadLibraryA(aAdvapi32), (*(_DWORD *)(a1 + 8) = result) != 0) ) { result = (HMODULE)GetProcAddress(result, aRegopenkeyexa); *(_DWORD *)(a1 + 12) = result; if ( result ) { result = (HMODULE)GetProcAddress(*(HMODULE *)(a1 + 8), aRegqueryvaluee); *(_DWORD *)(a1 + 16) = result; if ( result ) { result = (HMODULE)GetProcAddress(*(HMODULE *)(a1 + 8), aRegclosekey); *(_DWORD *)(a1 + 20) = result; } } } return result; } //----- (00790AC0) -------------------------------------------------------- int __cdecl sub_790AC0(int a1) { int result; // eax if ( a1 ) { if ( *(_DWORD *)(a1 + 8) ) { FreeLibrary(*(HMODULE *)(a1 + 8)); *(_DWORD *)(a1 + 8) = 0; } result = 0; *(_DWORD *)(a1 + 12) = 0; *(_DWORD *)(a1 + 16) = 0; *(_DWORD *)(a1 + 20) = 0; } return result; } //----- (00790AF0) -------------------------------------------------------- int (__cdecl *__cdecl sub_790AF0(_DWORD *a1))(int a1, int a2) { int (__cdecl *result)(int, int); // eax a1[7] = sub_795CC0; result = sub_795CA0; a1[8] = sub_797150; a1[63] = sub_795CA0; a1[64] = sub_796DA0; a1[65] = sub_795CA0; a1[60] = sub_797C10; a1[61] = sub_7992F0; a1[62] = sub_799370; a1[66] = sub_795FE0; a1[67] = sub_799CD0; a1[68] = sub_795FE0; a1[9] = sub_796450; a1[10] = sub_796470; a1[11] = sub_7969C0; a1[12] = sub_796C20; a1[13] = sub_79A200; a1[14] = sub_79A260; a1[15] = sub_79A760; a1[16] = sub_79AA50; a1[17] = 0; a1[18] = 0; a1[19] = 0; a1[20] = 0; a1[21] = 0; a1[22] = sub_79AAF0; a1[23] = sub_79ADB0; a1[24] = 0; a1[25] = sub_7A5900; a1[26] = sub_79BE80; a1[27] = sub_79F720; a1[28] = sub_79D950; a1[29] = sub_79C820; a1[30] = sub_7A0320; a1[31] = sub_79EAD0; a1[32] = sub_7A3550; a1[33] = sub_7A47C0; a1[34] = sub_7A41B0; a1[35] = sub_7A5290; a1[36] = sub_7A0C90; a1[37] = sub_7A18F0; a1[38] = sub_7A2BC0; a1[39] = sub_7A3010; a1[40] = 0; a1[41] = sub_7B9750; a1[42] = sub_7B9AB0; a1[43] = sub_7B9A30; a1[44] = sub_7ADC20; a1[45] = sub_7B9A70; a1[46] = sub_7B99B0; a1[47] = sub_7AECC0; a1[48] = sub_7B9930; a1[49] = sub_7B98F0; a1[50] = sub_7B98B0; a1[51] = sub_7B6800; a1[52] = sub_7B7370; a1[53] = sub_7B6D10; a1[54] = sub_7B6050; a1[55] = sub_7B9780; a1[56] = sub_7B9860; a1[57] = sub_7B9810; a1[58] = sub_7B97C0; a1[59] = sub_7B6410; a1[6] = dword_7B9B70; return result; } // 795FE0: using guessed type int sub_795FE0(); // 796470: using guessed type int sub_796470(); // 7969C0: using guessed type int sub_7969C0(); // 796C20: using guessed type int sub_796C20(); // 797C10: using guessed type int sub_797C10(); // 79A260: using guessed type int sub_79A260(); // 79A760: using guessed type int sub_79A760(); // 79AA50: using guessed type int sub_79AA50(); // 79AAF0: using guessed type int sub_79AAF0(); // 79ADB0: using guessed type int sub_79ADB0(); // 79BE80: using guessed type int sub_79BE80(); // 79C820: using guessed type int sub_79C820(); // 79D950: using guessed type int sub_79D950(); // 79EAD0: using guessed type int sub_79EAD0(); // 79F720: using guessed type int sub_79F720(); // 7A0320: using guessed type int sub_7A0320(); // 7A0C90: using guessed type int sub_7A0C90(); // 7A18F0: using guessed type int sub_7A18F0(); // 7A2BC0: using guessed type int sub_7A2BC0(); // 7A3010: using guessed type int sub_7A3010(); // 7A3550: using guessed type int sub_7A3550(); // 7A41B0: using guessed type int sub_7A41B0(); // 7A47C0: using guessed type int sub_7A47C0(); // 7A5290: using guessed type int sub_7A5290(); // 7ADC20: using guessed type int sub_7ADC20(); // 7AECC0: using guessed type int sub_7AECC0(); // 7B6050: using guessed type int sub_7B6050(); // 7B6410: using guessed type int sub_7B6410(); // 7B6D10: using guessed type int sub_7B6D10(); // 7B7370: using guessed type int sub_7B7370(); // 7B9780: using guessed type int sub_7B9780(); // 7B97C0: using guessed type int sub_7B97C0(); // 7B9810: using guessed type int sub_7B9810(); // 7B9860: using guessed type int sub_7B9860(); // 7B98B0: using guessed type int sub_7B98B0(); // 7B98F0: using guessed type int sub_7B98F0(); // 7B9930: using guessed type int sub_7B9930(); // 7B99B0: using guessed type int sub_7B99B0(); // 7B9A30: using guessed type int sub_7B9A30(); // 7B9A70: using guessed type int sub_7B9A70(); // 7B9AB0: using guessed type int sub_7B9AB0(); // 7B9B70: using guessed type int dword_7B9B70[4]; //----- (00790D20) -------------------------------------------------------- signed int (__cdecl *__cdecl sub_790D20(_DWORD *a1))(int a1, int a2) { signed int (__cdecl *result)(int, int); // eax a1[7] = sub_795990; result = sub_795900; a1[8] = sub_796E00; a1[63] = sub_795900; a1[64] = sub_796D10; a1[65] = sub_795900; a1[60] = sub_7977E0; a1[61] = sub_799110; a1[62] = sub_7993B0; a1[66] = sub_795FE0; a1[67] = sub_799C60; a1[68] = sub_795FE0; a1[9] = sub_796060; a1[10] = sub_796470; a1[11] = sub_7969C0; a1[12] = sub_796C20; a1[13] = sub_799D10; a1[14] = sub_79A260; a1[15] = sub_79A760; a1[16] = sub_79AA50; a1[17] = 0; a1[18] = 0; a1[19] = 0; a1[20] = 0; a1[21] = 0; a1[22] = sub_79AA80; a1[23] = sub_79AB40; a1[24] = 0; a1[25] = sub_7A5880; a1[26] = sub_79BAB0; a1[27] = sub_79F160; a1[28] = sub_79D8E0; a1[29] = sub_79C450; a1[30] = sub_79FD60; a1[31] = sub_79EA60; a1[32] = sub_7A3550; a1[33] = sub_7A47C0; a1[34] = sub_7A41B0; a1[35] = sub_7A50D0; a1[36] = sub_7A0780; a1[37] = sub_7A1160; a1[38] = sub_7A2B40; a1[39] = sub_7A3010; a1[40] = 0; a1[41] = sub_7B7B40; a1[42] = sub_7AF260; a1[43] = sub_7B01B0; a1[44] = sub_7ADB60; a1[45] = sub_7AF680; a1[46] = sub_7B0CF0; a1[47] = sub_7AEC00; a1[48] = sub_7B1100; a1[49] = sub_7B2180; a1[50] = sub_7B2FC0; a1[51] = sub_7B6800; a1[52] = sub_7B7370; a1[53] = sub_7B6D10; a1[54] = sub_7B6050; a1[55] = sub_7B7710; a1[56] = sub_7B3600; a1[57] = sub_7B49A0; a1[58] = sub_7B5AB0; a1[59] = sub_7B6410; a1[6] = nullsub_44; return result; } // 791780: using guessed type int nullsub_44(); // 795990: using guessed type int sub_795990(); // 795FE0: using guessed type int sub_795FE0(); // 796060: using guessed type int sub_796060(); // 796470: using guessed type int sub_796470(); // 7969C0: using guessed type int sub_7969C0(); // 796C20: using guessed type int sub_796C20(); // 796E00: using guessed type int sub_796E00(); // 799110: using guessed type int sub_799110(); // 7993B0: using guessed type int sub_7993B0(); // 799C60: using guessed type int sub_799C60(); // 799D10: using guessed type int sub_799D10(); // 79A260: using guessed type int sub_79A260(); // 79A760: using guessed type int sub_79A760(); // 79AA50: using guessed type int sub_79AA50(); // 79AB40: using guessed type int sub_79AB40(); // 79BAB0: using guessed type int sub_79BAB0(); // 79C450: using guessed type int sub_79C450(); // 79D8E0: using guessed type int sub_79D8E0(); // 79EA60: using guessed type int sub_79EA60(); // 79F160: using guessed type int sub_79F160(); // 79FD60: using guessed type int sub_79FD60(); // 7A0780: using guessed type int sub_7A0780(); // 7A1160: using guessed type int sub_7A1160(); // 7A2B40: using guessed type int sub_7A2B40(); // 7A3010: using guessed type int sub_7A3010(); // 7A3550: using guessed type int sub_7A3550(); // 7A41B0: using guessed type int sub_7A41B0(); // 7A47C0: using guessed type int sub_7A47C0(); // 7A50D0: using guessed type int sub_7A50D0(); // 7A5880: using guessed type int sub_7A5880(); // 7ADB60: using guessed type int sub_7ADB60(); // 7AEC00: using guessed type int sub_7AEC00(); // 7AF260: using guessed type int sub_7AF260(); // 7AF680: using guessed type int sub_7AF680(); // 7B01B0: using guessed type int sub_7B01B0(); // 7B0CF0: using guessed type int sub_7B0CF0(); // 7B1100: using guessed type int sub_7B1100(); // 7B2180: using guessed type int sub_7B2180(); // 7B2FC0: using guessed type int sub_7B2FC0(); // 7B3600: using guessed type int sub_7B3600(); // 7B49A0: using guessed type int sub_7B49A0(); // 7B5AB0: using guessed type int sub_7B5AB0(); // 7B6050: using guessed type int sub_7B6050(); // 7B6410: using guessed type int sub_7B6410(); // 7B6D10: using guessed type int sub_7B6D10(); // 7B7370: using guessed type int sub_7B7370(); // 7B7710: using guessed type int sub_7B7710(); //----- (00790F50) -------------------------------------------------------- int (__cdecl *__cdecl sub_790F50(_DWORD *a1))(int a1, int a2) { int (__cdecl *result)(int, int); // eax a1[7] = sub_795CC0; result = sub_795CA0; a1[8] = sub_797150; a1[63] = sub_795CA0; a1[64] = sub_796DA0; a1[65] = sub_795CA0; a1[60] = sub_797C10; a1[61] = sub_799330; a1[62] = sub_799370; a1[66] = sub_795FE0; a1[67] = sub_799CD0; a1[68] = sub_795FE0; a1[9] = sub_796450; a1[10] = sub_796470; a1[11] = sub_7969C0; a1[12] = sub_796C20; a1[13] = sub_79A200; a1[14] = sub_79A260; a1[15] = sub_79A760; a1[16] = sub_79AA50; a1[17] = 0; a1[18] = 0; a1[19] = 0; a1[20] = 0; a1[21] = 0; a1[22] = sub_79AAF0; a1[23] = sub_79ADB0; a1[24] = 0; a1[25] = sub_7A5900; a1[26] = sub_79BE80; a1[27] = sub_79F720; a1[28] = sub_79D950; a1[29] = sub_79C820; a1[30] = sub_7A0320; a1[31] = sub_79EAD0; a1[32] = sub_7A3550; a1[33] = sub_7A47C0; a1[34] = sub_7A41B0; a1[35] = sub_7A5290; a1[36] = sub_7A0C90; a1[37] = sub_7A18F0; a1[38] = sub_7A2BC0; a1[39] = sub_7A3010; a1[40] = 0; a1[41] = sub_7B9750; a1[42] = sub_7B9AB0; a1[43] = sub_7B9A30; a1[44] = sub_7ADC20; a1[45] = sub_7B9A70; a1[46] = sub_7B99B0; a1[47] = sub_7AECC0; a1[48] = sub_7B9930; a1[49] = sub_7B98F0; a1[50] = sub_7B98B0; a1[51] = sub_7B6800; a1[52] = sub_7B7370; a1[53] = sub_7B6D10; a1[54] = sub_7B6050; a1[55] = sub_7B9780; a1[56] = sub_7B9860; a1[57] = sub_7B9810; a1[58] = sub_7B97C0; a1[59] = sub_7B6410; a1[6] = dword_7B9B70; return result; } // 795FE0: using guessed type int sub_795FE0(); // 796470: using guessed type int sub_796470(); // 7969C0: using guessed type int sub_7969C0(); // 796C20: using guessed type int sub_796C20(); // 797C10: using guessed type int sub_797C10(); // 79A260: using guessed type int sub_79A260(); // 79A760: using guessed type int sub_79A760(); // 79AA50: using guessed type int sub_79AA50(); // 79AAF0: using guessed type int sub_79AAF0(); // 79ADB0: using guessed type int sub_79ADB0(); // 79BE80: using guessed type int sub_79BE80(); // 79C820: using guessed type int sub_79C820(); // 79D950: using guessed type int sub_79D950(); // 79EAD0: using guessed type int sub_79EAD0(); // 79F720: using guessed type int sub_79F720(); // 7A0320: using guessed type int sub_7A0320(); // 7A0C90: using guessed type int sub_7A0C90(); // 7A18F0: using guessed type int sub_7A18F0(); // 7A2BC0: using guessed type int sub_7A2BC0(); // 7A3010: using guessed type int sub_7A3010(); // 7A3550: using guessed type int sub_7A3550(); // 7A41B0: using guessed type int sub_7A41B0(); // 7A47C0: using guessed type int sub_7A47C0(); // 7A5290: using guessed type int sub_7A5290(); // 7ADC20: using guessed type int sub_7ADC20(); // 7AECC0: using guessed type int sub_7AECC0(); // 7B6050: using guessed type int sub_7B6050(); // 7B6410: using guessed type int sub_7B6410(); // 7B6D10: using guessed type int sub_7B6D10(); // 7B7370: using guessed type int sub_7B7370(); // 7B9780: using guessed type int sub_7B9780(); // 7B97C0: using guessed type int sub_7B97C0(); // 7B9810: using guessed type int sub_7B9810(); // 7B9860: using guessed type int sub_7B9860(); // 7B98B0: using guessed type int sub_7B98B0(); // 7B98F0: using guessed type int sub_7B98F0(); // 7B9930: using guessed type int sub_7B9930(); // 7B99B0: using guessed type int sub_7B99B0(); // 7B9A30: using guessed type int sub_7B9A30(); // 7B9A70: using guessed type int sub_7B9A70(); // 7B9AB0: using guessed type int sub_7B9AB0(); // 7B9B70: using guessed type int dword_7B9B70[4]; //----- (00791180) -------------------------------------------------------- int (__cdecl *__cdecl sub_791180(_DWORD *a1))(int a1, int a2) { int (__cdecl *result)(int, int); // eax a1[7] = sub_795CC0; result = sub_795CA0; a1[8] = sub_797170; a1[63] = sub_795CA0; a1[64] = sub_796DC0; a1[65] = sub_795CA0; a1[60] = sub_797F80; a1[61] = sub_799330; a1[62] = sub_799370; a1[66] = sub_795FE0; a1[67] = sub_799CD0; a1[68] = sub_795FE0; a1[9] = sub_796450; a1[10] = sub_796470; a1[11] = sub_7969C0; a1[12] = sub_796C20; a1[13] = sub_79A220; a1[14] = sub_79A260; a1[15] = sub_79A760; a1[16] = sub_79AA50; a1[17] = 0; a1[18] = 0; a1[19] = 0; a1[20] = 0; a1[21] = 0; a1[22] = sub_79AAF0; a1[23] = sub_79ADB0; a1[24] = 0; a1[25] = sub_7A5900; a1[26] = sub_79BE80; a1[27] = sub_79F720; a1[28] = sub_79D950; a1[29] = sub_79C820; a1[30] = sub_7A0320; a1[31] = sub_79EAD0; a1[32] = sub_7A3550; a1[33] = sub_7A47C0; a1[34] = sub_7A41B0; a1[35] = sub_7A52D0; a1[36] = sub_7A0C90; a1[37] = sub_7A18F0; a1[38] = sub_7A2BC0; a1[39] = sub_7A3010; a1[40] = 0; a1[41] = sub_7B9750; a1[42] = sub_7B9AB0; a1[43] = sub_7B99F0; a1[44] = sub_7ADC20; a1[45] = sub_7B9A70; a1[46] = sub_7B9970; a1[47] = sub_7AECC0; a1[48] = sub_7B9930; a1[49] = sub_7B98F0; a1[50] = sub_7B98B0; a1[51] = sub_7B6800; a1[52] = sub_7B7370; a1[53] = sub_7B6D10; a1[54] = sub_7B6050; a1[55] = sub_7B9780; a1[56] = sub_7B9860; a1[57] = sub_7B9810; a1[58] = sub_7B97C0; a1[59] = sub_7B6410; a1[6] = dword_7B9B70; return result; } // 795FE0: using guessed type int sub_795FE0(); // 796470: using guessed type int sub_796470(); // 7969C0: using guessed type int sub_7969C0(); // 796C20: using guessed type int sub_796C20(); // 79A260: using guessed type int sub_79A260(); // 79A760: using guessed type int sub_79A760(); // 79AA50: using guessed type int sub_79AA50(); // 79AAF0: using guessed type int sub_79AAF0(); // 79ADB0: using guessed type int sub_79ADB0(); // 79BE80: using guessed type int sub_79BE80(); // 79C820: using guessed type int sub_79C820(); // 79D950: using guessed type int sub_79D950(); // 79EAD0: using guessed type int sub_79EAD0(); // 79F720: using guessed type int sub_79F720(); // 7A0320: using guessed type int sub_7A0320(); // 7A0C90: using guessed type int sub_7A0C90(); // 7A18F0: using guessed type int sub_7A18F0(); // 7A2BC0: using guessed type int sub_7A2BC0(); // 7A3010: using guessed type int sub_7A3010(); // 7A3550: using guessed type int sub_7A3550(); // 7A41B0: using guessed type int sub_7A41B0(); // 7A47C0: using guessed type int sub_7A47C0(); // 7A52D0: using guessed type int sub_7A52D0(); // 7ADC20: using guessed type int sub_7ADC20(); // 7AECC0: using guessed type int sub_7AECC0(); // 7B6050: using guessed type int sub_7B6050(); // 7B6410: using guessed type int sub_7B6410(); // 7B6D10: using guessed type int sub_7B6D10(); // 7B7370: using guessed type int sub_7B7370(); // 7B9780: using guessed type int sub_7B9780(); // 7B97C0: using guessed type int sub_7B97C0(); // 7B9810: using guessed type int sub_7B9810(); // 7B9860: using guessed type int sub_7B9860(); // 7B98B0: using guessed type int sub_7B98B0(); // 7B98F0: using guessed type int sub_7B98F0(); // 7B9930: using guessed type int sub_7B9930(); // 7B9970: using guessed type int sub_7B9970(); // 7B99F0: using guessed type int sub_7B99F0(); // 7B9A70: using guessed type int sub_7B9A70(); // 7B9AB0: using guessed type int sub_7B9AB0(); // 7B9B70: using guessed type int dword_7B9B70[4]; //----- (007913B0) -------------------------------------------------------- int (__cdecl *__cdecl sub_7913B0(_DWORD *a1))(int a1, int a2) { int (__cdecl *result)(int, int); // eax a1[7] = sub_795CC0; result = sub_795CA0; a1[8] = sub_797190; a1[63] = sub_795CA0; a1[64] = sub_796DE0; a1[65] = sub_795CA0; a1[60] = sub_797C10; a1[61] = sub_799330; a1[62] = sub_799370; a1[66] = sub_795FE0; a1[67] = sub_799CF0; a1[68] = sub_795FE0; a1[9] = sub_796450; a1[10] = sub_796470; a1[11] = sub_7969C0; a1[12] = sub_796C20; a1[13] = sub_79A240; a1[14] = sub_79A260; a1[15] = sub_79A760; a1[16] = sub_79AA50; a1[17] = 0; a1[18] = 0; a1[19] = 0; a1[20] = 0; a1[21] = 0; a1[22] = sub_79AAF0; a1[23] = sub_79ADB0; a1[24] = 0; a1[25] = sub_7A5900; a1[26] = sub_79BE80; a1[27] = sub_79F720; a1[28] = sub_79D950; a1[29] = sub_79C820; a1[30] = sub_7A0320; a1[31] = sub_79EAD0; a1[32] = sub_7A3550; a1[33] = sub_7A47C0; a1[34] = sub_7A41B0; a1[35] = sub_7A52D0; a1[36] = sub_7A0C90; a1[37] = sub_7A18F0; a1[38] = sub_7A2BC0; a1[39] = sub_7A3010; a1[40] = 0; a1[41] = sub_7B9750; a1[42] = sub_7B9AB0; a1[43] = sub_7B99F0; a1[44] = sub_7ADC20; a1[45] = sub_7B9A70; a1[46] = sub_7B9970; a1[47] = sub_7AECC0; a1[48] = sub_7B9930; a1[49] = sub_7B98F0; a1[50] = sub_7B98B0; a1[51] = sub_7B6800; a1[52] = sub_7B7370; a1[53] = sub_7B6D10; a1[54] = sub_7B6050; a1[55] = sub_7B9780; a1[56] = sub_7B9860; a1[57] = sub_7B9810; a1[58] = sub_7B97C0; a1[59] = sub_7B6410; a1[6] = dword_7B9B70; return result; } // 795FE0: using guessed type int sub_795FE0(); // 796470: using guessed type int sub_796470(); // 7969C0: using guessed type int sub_7969C0(); // 796C20: using guessed type int sub_796C20(); // 797C10: using guessed type int sub_797C10(); // 79A260: using guessed type int sub_79A260(); // 79A760: using guessed type int sub_79A760(); // 79AA50: using guessed type int sub_79AA50(); // 79AAF0: using guessed type int sub_79AAF0(); // 79ADB0: using guessed type int sub_79ADB0(); // 79BE80: using guessed type int sub_79BE80(); // 79C820: using guessed type int sub_79C820(); // 79D950: using guessed type int sub_79D950(); // 79EAD0: using guessed type int sub_79EAD0(); // 79F720: using guessed type int sub_79F720(); // 7A0320: using guessed type int sub_7A0320(); // 7A0C90: using guessed type int sub_7A0C90(); // 7A18F0: using guessed type int sub_7A18F0(); // 7A2BC0: using guessed type int sub_7A2BC0(); // 7A3010: using guessed type int sub_7A3010(); // 7A3550: using guessed type int sub_7A3550(); // 7A41B0: using guessed type int sub_7A41B0(); // 7A47C0: using guessed type int sub_7A47C0(); // 7A52D0: using guessed type int sub_7A52D0(); // 7ADC20: using guessed type int sub_7ADC20(); // 7AECC0: using guessed type int sub_7AECC0(); // 7B6050: using guessed type int sub_7B6050(); // 7B6410: using guessed type int sub_7B6410(); // 7B6D10: using guessed type int sub_7B6D10(); // 7B7370: using guessed type int sub_7B7370(); // 7B9780: using guessed type int sub_7B9780(); // 7B97C0: using guessed type int sub_7B97C0(); // 7B9810: using guessed type int sub_7B9810(); // 7B9860: using guessed type int sub_7B9860(); // 7B98B0: using guessed type int sub_7B98B0(); // 7B98F0: using guessed type int sub_7B98F0(); // 7B9930: using guessed type int sub_7B9930(); // 7B9970: using guessed type int sub_7B9970(); // 7B99F0: using guessed type int sub_7B99F0(); // 7B9A70: using guessed type int sub_7B9A70(); // 7B9AB0: using guessed type int sub_7B9AB0(); // 7B9B70: using guessed type int dword_7B9B70[4]; //----- (007915E0) -------------------------------------------------------- signed int __cdecl sub_7915E0(int a1) { signed int v1; // ecx int (__stdcall *v2)(signed int, char *, _DWORD, signed int, int *); // eax int v4; // [esp+24h] [ebp-1Ch] int v5; // [esp+28h] [ebp-18h] int v6; // [esp+2Ch] [ebp-14h] int v7; // [esp+30h] [ebp-10h] v1 = -1; v2 = *(int (__stdcall **)(signed int, char *, _DWORD, signed int, int *))(a1 + 12); if ( v2 && *(_DWORD *)(a1 + 16) && *(_DWORD *)(a1 + 20) ) { v4 = 4; v5 = 4; v6 = 0; v7 = -1; if ( !v2(-2147483646, off_AB92C0[0], 0, 1, &v6) ) (*(void (__stdcall **)(int, char *, _DWORD, int *, int *, int *))(a1 + 16))(v6, off_AB92C4[0], 0, &v4, &v7, &v5); if ( v6 ) (*(void (__stdcall **)(int))(a1 + 20))(v6); v1 = v7; } return v1; } // AB92C0: using guessed type char *off_AB92C0[3]; // AB92C4: using guessed type char *off_AB92C4[2]; //----- (00791680) -------------------------------------------------------- signed int __usercall sub_791680@(int a1@, int a2@, _DWORD *a3) { signed int v3; // ebx int *v4; // eax int v5; // edx sub_7909A0((int)a3); sub_790A60((int)a3); v3 = sub_791900(a1, a2, (int)a3); v4 = sub_7918F0(); dword_BA2968 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD))sub_790970; v5 = v4[5]; dword_BA2964 = (int (__cdecl *)(_DWORD, _DWORD))sub_790990; if ( v5 & 0x10 ) dword_BA2960 = (int)dword_7B9B60; else dword_BA2960 = (int)sub_791770; switch ( v3 ) { case 1: sub_790D20(a3); break; case 2: sub_790D20(a3); break; case 3: sub_790AF0(a3); break; case 4: sub_790F50(a3); break; case 5: sub_791180(a3); break; case 6: sub_7913B0(a3); break; default: sub_790D20(a3); break; } return 1; } // 790970: using guessed type int sub_790970(); // 790990: using guessed type int sub_790990(); // 791770: using guessed type int sub_791770(); // 7B9B60: using guessed type int dword_7B9B60[4]; // BA2960: using guessed type int dword_BA2960; // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); //----- (00791750) -------------------------------------------------------- int __cdecl sub_791750(int a1) { sub_790A20(a1); return sub_790AC0(a1); } //----- (00791790) -------------------------------------------------------- int __usercall sub_791790@(int a1@, int a2@, int a3@) { int v4; // [esp+0h] [ebp-30h] int v5; // [esp+4h] [ebp-2Ch] int v6; // [esp+14h] [ebp-1Ch] CPPEH_RECORD ms_exc; // [esp+18h] [ebp-18h] ms_exc.registration.TryLevel = 0; byte_BA2998 = 32; byte_BA2999 = 32; byte_BA299A = 32; byte_BA299B = 32; byte_BA299C = 32; byte_BA299D = 32; byte_BA299E = 32; byte_BA299F = 32; byte_BA29A0 = 32; byte_BA29A1 = 32; byte_BA29A2 = 32; byte_BA29A3 = 32; byte_BA29A4 = 0; dword_BA2980 = 0; dword_BA2984 = 0; dword_BA2988 = 0; dword_BA298C = 0; dword_BA2990 = 0; dword_BA2994 = 0; return ((int (__stdcall *)(int *, int *, signed int, int, int, int, int, int, int *, EXCEPTION_POINTERS *, struct _EH3_EXCEPTION_REGISTRATION *, PVOID))loc_7B9AF0)( &dword_BA2980, &v4, 12, v5, a1, a3, a2, v6, &v4, ms_exc.exc_ptr, ms_exc.registration.Next, ms_exc.registration.ExceptionHandler); } // 791790: could not find valid save-restore pair for ebx // 791790: could not find valid save-restore pair for edi // 791790: could not find valid save-restore pair for esi // BA2980: using guessed type int dword_BA2980; // BA2984: using guessed type int dword_BA2984; // BA2988: using guessed type int dword_BA2988; // BA298C: using guessed type int dword_BA298C; // BA2990: using guessed type int dword_BA2990; // BA2994: using guessed type int dword_BA2994; // BA2998: using guessed type char byte_BA2998; // BA2999: using guessed type char byte_BA2999; // BA299A: using guessed type char byte_BA299A; // BA299B: using guessed type char byte_BA299B; // BA299C: using guessed type char byte_BA299C; // BA299D: using guessed type char byte_BA299D; // BA299E: using guessed type char byte_BA299E; // BA299F: using guessed type char byte_BA299F; // BA29A0: using guessed type char byte_BA29A0; // BA29A1: using guessed type char byte_BA29A1; // BA29A2: using guessed type char byte_BA29A2; // BA29A3: using guessed type char byte_BA29A3; // BA29A4: using guessed type char byte_BA29A4; //----- (007918F0) -------------------------------------------------------- int *sub_7918F0() { return &dword_BA2980; } // BA2980: using guessed type int dword_BA2980; //----- (00791900) -------------------------------------------------------- signed int __usercall sub_791900@(int a1@, int a2@, int a3) { signed int result; // eax int *v4; // eax int v5; // edx int v6; // eax sub_791790(a1, a3, a2); result = sub_7915E0(a3); if ( result && result != 1 && result != 2 && result != 3 && result != 4 && result != 5 && result != 6 ) { v4 = sub_7918F0(); v5 = v4[2]; switch ( v5 ) { case 5: if ( (unsigned int)sub_800000 & v4[5] ) result = 3; else result = 1; break; case 6: v6 = v4[5]; if ( !((unsigned int)sub_800000 & v6) || v6 & 0x2000000 ) { if ( (v6 & 0x2800000) == 41943040 ) result = 5; else result = 2; } else { result = 4; } break; case 15: if ( v4[5] & 0x4000000 ) result = 6; else result = 0; break; default: result = 0; break; } } return result; } //----- (007919F0) -------------------------------------------------------- HANDLE __cdecl sub_7919F0(LPCSTR lpFileName, DWORD dwDesiredAccess) { DWORD v2; // eax HANDLE result; // eax if ( dwDesiredAccess & 0x40000000 ) v2 = 2; else v2 = 3; result = CreateFileA(lpFileName, dwDesiredAccess, 1u, 0, v2, 0, 0); if ( result == (HANDLE)-1 ) result = 0; return result; } //----- (00791A30) -------------------------------------------------------- BOOL __cdecl sub_791A30(HANDLE hObject) { return CloseHandle(hObject); } //----- (00791A40) -------------------------------------------------------- BOOL __cdecl sub_791A40(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead) { return ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, 0); } //----- (00791A60) -------------------------------------------------------- BOOL __cdecl sub_791A60(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten) { return WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, 0); } //----- (00791A80) -------------------------------------------------------- int __cdecl sub_791A80(HANDLE hFile, LONG lDistanceToMove, DWORD dwMoveMethod) { signed int v3; // esi v3 = 1; if ( SetFilePointer(hFile, lDistanceToMove, 0, dwMoveMethod) == -1 ) v3 = 0; return v3; } //----- (00791AB0) -------------------------------------------------------- int __cdecl sub_791AB0(int a1, _DWORD *a2, int a3) { int result; // eax int v4; // edx int v5; // edi int v6; // ebx if ( *(_DWORD *)(a3 + 14300) ) return -19; result = sub_7BB400(a3, a1, a3 + 14244, a2); if ( !result ) { *(_DWORD *)(a1 + 40) = 0; v4 = 0; if ( *a2 > 0 ) { v5 = a2[13]; v6 = 0; while ( 1 ) { if ( !*(_DWORD *)(v6 + v5 + 12) || !*(_DWORD *)(v6 + v5 + 16) ) return -17; if ( !*(_DWORD *)(v6 + v5 + 20) ) break; v6 += 24; if ( ++v4 >= *a2 ) return result; } result = -18; } } return result; } //----- (00791B60) -------------------------------------------------------- signed int __cdecl sub_791B60(int a1) { int v1; // esi char v2; // bl _DWORD *v3; // ebp _DWORD *v4; // eax int v5; // eax int v6; // edx int v7; // eax int v8; // eax signed int v9; // edi int v10; // eax int *v11; // ebp int v12; // edx int v13; // eax int v14; // edi int v15; // ecx int v16; // edi void *v17; // eax _DWORD *v18; // edx signed int v19; // eax int v20; // edx int v21; // edx int v22; // edx signed int v23; // eax int v24; // eax int *v26; // eax int v27; // ecx int v28; // edx int v29; // ecx int v30; // edx int v31; // ecx int v32; // edi int v33; // ecx int v34; // edx int v35; // eax int v36; // edi int v37; // ecx void *v38; // eax int v39; // eax int v40; // eax void *hFile; // edx int v42; // [esp+10h] [ebp-24h] int v43; // [esp+14h] [ebp-20h] _DWORD *v44; // [esp+18h] [ebp-1Ch] _DWORD *v45; // [esp+1Ch] [ebp-18h] void *v46; // [esp+20h] [ebp-14h] v1 = a1; v2 = 0; v3 = (_DWORD *)(a1 + 14312); v4 = *(_DWORD **)(a1 + 14320); v42 = 0; v45 = v4; v5 = *(_DWORD *)(a1 + 14304); if ( !v5 || (v6 = *(_DWORD *)(a1 + 116), v6 == 1) ) { if ( v5 ) { if ( *(_DWORD *)(v5 + 28) ) { v6 = *(_DWORD *)(a1 + 116); } else { if ( !*(_DWORD *)(v5 + 32) ) { sub_7C1A30(a1 + 14312); v5 = *(_DWORD *)(a1 + 14304); } v6 = *(_DWORD *)(a1 + 116); } } else { sub_7C1A30(a1 + 14312); v5 = *(_DWORD *)(a1 + 14304); v6 = *(_DWORD *)(a1 + 116); } } if ( v6 == 1 && (!v5 || !*(_DWORD *)(v5 + 28) && !*(_DWORD *)(v5 + 32)) ) { *(_DWORD *)(a1 + 14312) = 0; *(_DWORD *)(a1 + 14316) = 0; v39 = *(_DWORD *)a1; if ( *(_DWORD *)a1 == 2 || v39 == 6 || v39 == 14 || v39 == 18 || v39 == 16 ) { hFile = *(void **)(a1 + 14372); *(_DWORD *)(a1 + 14340) = 0; if ( !sub_791A80(hFile, 0, 0) ) return -23; v9 = sub_7C1A80((int)v3); if ( v9 ) return v9; v5 = *(_DWORD *)(a1 + 14304); } else { v40 = *(_DWORD *)(a1 + 14344); *(_DWORD *)(a1 + 14328) = *(_DWORD *)(a1 + 68); *(_DWORD *)(a1 + 14340) = 0; *(_DWORD *)(a1 + 14348) = v40; v5 = *(_DWORD *)(a1 + 14304); } } if ( v5 ) v2 = 1; v7 = *(_DWORD *)a1; if ( *(_DWORD *)a1 != 6 && v7 != 7 && v7 != 14 && v7 != 15 && v7 != 17 && v7 != 16 && v7 != 19 && v7 != 18 && !*(_DWORD *)(a1 + 8) && !*(_DWORD *)(a1 + 16) && !*(_DWORD *)(a1 + 12) && !*(_DWORD *)(a1 + 4) ) { *(_DWORD *)(a1 + 14340) = 0; } if ( !*(_DWORD *)(a1 + 14300) ) { v9 = sub_7C1C40((_DWORD *)a1); if ( v9 ) return v9; } v8 = *(_DWORD *)a1; if ( *(_DWORD *)a1 == 1 || !v8 || v8 == 5 || v8 == 4 || v8 == 21 || v8 == 20 ) { v9 = sub_7B9DF0((int)v3, &v42); if ( v9 ) return v9; if ( v42 != 216 ) return -13; } if ( !*(_DWORD *)(a1 + 19936) ) { *(_DWORD *)(a1 + 14296) = 0; *(_DWORD *)(a1 + 14292) = 0; } v46 = *(void **)(a1 + 14304); if ( !v46 || (v10 = *(_DWORD *)(a1 + 116), v10 == 1) && !*((_DWORD *)v46 + 7) && !*((_DWORD *)v46 + 8) ) { while ( 1 ) { LABEL_114: v9 = sub_7B9DF0((int)v3, &v42); if ( v9 ) return v9; v21 = v42; if ( v42 == 256 ) return 0; LABEL_59: switch ( v21 ) { case 192: goto LABEL_104; case 193: if ( !*(_DWORD *)(v1 + 14300) ) continue; goto LABEL_104; case 194: if ( !*(_DWORD *)(v1 + 14300) ) continue; LABEL_104: if ( *(_DWORD *)v1 == 5 || *(_DWORD *)v1 == 4 ) { *(_DWORD *)(v1 + 14340) -= 2; return 0; } v9 = sub_7B9FF0((int)v3, (_DWORD *)v1); if ( v9 ) return v9; *(_DWORD *)(v1 + 14300) = 0; v23 = *(_DWORD *)(v1 + 14272); if ( v23 <= 0 || v23 > 255 ) return -14; *(_DWORD *)(v1 + 84) = v23; v24 = *(_DWORD *)(v1 + 14252); *(_DWORD *)(v1 + 76) = *(_DWORD *)(v1 + 14248); *(_DWORD *)(v1 + 80) = v24; v9 = sub_7C1C40((_DWORD *)v1); if ( v9 ) return v9; break; case 195: return -29; case 196: v9 = sub_7BAE50((_DWORD *)v1, (int)v3); if ( !v9 ) continue; return v9; case 197: return -29; case 198: return -29; case 199: return -29; case 200: return -29; case 201: return -29; case 202: return -29; case 203: return -29; case 205: return -29; case 206: return -29; case 207: return -29; case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: continue; case 216: *(_DWORD *)(v1 + 14288) = 0; continue; case 217: v22 = *(_DWORD *)v1; if ( *(_DWORD *)v1 == 5 || v22 == 4 || v22 == 1 || !v22 || v22 == 21 || v22 == 20 ) return 0; if ( !*(_DWORD *)(v1 + 14300) ) { if ( *(_DWORD *)(v1 + 116) && *(_DWORD *)(v1 + 104) && !*(_DWORD *)(v1 + 19936) ) sub_7AB290((_DWORD *)v1); return v9; } v9 = sub_7B9DF0((int)v3, &v42); if ( v9 ) return v9; v21 = v42; if ( v42 != 216 ) return -22; goto LABEL_59; case 218: v44 = v3; v11 = *(int **)(v1 + 14304); goto LABEL_34; case 219: v9 = sub_7BAA20(v1, (int)v3, *(_DWORD *)(v1 + 20)); if ( !v9 ) continue; return v9; case 221: v9 = sub_7B9F40((int)v3, &v43); if ( v9 ) return v9; *(_DWORD *)(v1 + 14288) = v43; continue; case 224: if ( *(_DWORD *)v1 == 6 ) continue; v9 = sub_7BA3C0(v1); if ( !v9 ) continue; return v9; case 238: v9 = sub_7BA250(v1); if ( !v9 ) { if ( *(_DWORD *)(v1 + 14300) ) continue; v9 = sub_7C1C40((_DWORD *)v1); if ( !v9 ) continue; } return v9; case 254: v9 = sub_7BA860(v1); if ( !v9 ) continue; return v9; case 256: return 0; default: v9 = sub_7B9E70(v3); if ( !v9 ) continue; return v9; } } } v44 = (_DWORD *)(a1 + 14312); v11 = (int *)v46; LABEL_34: if ( v11 && v2 ) { v2 = 0; goto LABEL_37; } v26 = (int *)operator new(0x38u); v11 = v26; if ( !v26 ) return -5; v27 = (int)v44; v26[7] = 0; v26[8] = 0; v26[9] = 0; v26[10] = 0; v26[11] = 0; v26[12] = 0; v9 = sub_791AB0(v27, v26, v1); if ( v9 ) { v46 = v11; operator delete(v11); return v9; } v28 = *(_DWORD *)v1; if ( *(_DWORD *)v1 == 1 ) { v46 = v11; goto LABEL_174; } switch ( v28 ) { case 0: v46 = v11; goto LABEL_174; case 5: v46 = v11; goto LABEL_174; case 4: v46 = v11; goto LABEL_174; case 21: v46 = v11; goto LABEL_174; case 20: v46 = v11; LABEL_174: *(_DWORD *)(v1 + 14340) -= *v45; operator delete(v11); return 0; } v29 = *v11; v11[6] = *(_DWORD *)(v1 + 14288); *(_DWORD *)(v1 + 116) = v29 < *(_DWORD *)(v1 + 14272) && !*(_DWORD *)(v1 + 19936); sub_7C1C40((_DWORD *)v1); v30 = v11[2]; if ( v30 ) { v31 = *(_DWORD *)(v1 + 19936); v32 = v11[5]; LABEL_151: if ( v30 || v11[3] ) { if ( !v32 && v11[3] == 63 ) ++*(_DWORD *)(v1 + 14296); } else if ( !v32 ) { *(_DWORD *)(v1 + 14292) += *v11; } v33 = v31 + 1; *(_DWORD *)(v1 + 19936) = v33; if ( v33 == 1 ) { v34 = 0; v35 = 0; v36 = *(_DWORD *)(v1 + 14272); if ( v36 > 0 ) { v37 = *(_DWORD *)(v1 + 14284); do { ++v35; v34 += *(_DWORD *)(v37 + 8) * *(_DWORD *)(v37 + 4); v37 += 16; } while ( v35 < v36 ); v1 = a1; } v38 = operator new(2 * *(_DWORD *)(v1 + 124) * *(_DWORD *)(v1 + 120) * (v34 << 6)); *(_DWORD *)(v1 + 19940) = v38; if ( !v38 ) { v46 = v11; operator delete((void *)v11[13]); v11[13] = 0; operator delete(v11); *(_DWORD *)(v1 + 14304) = 0; return -5; } } goto LABEL_37; } if ( v11[3] != 63 ) { v31 = *(_DWORD *)(v1 + 19936); v32 = v11[5]; goto LABEL_151; } if ( v11[4] ) { v31 = *(_DWORD *)(v1 + 19936); v32 = v11[5]; goto LABEL_151; } v32 = v11[5]; if ( v32 ) { v31 = *(_DWORD *)(v1 + 19936); goto LABEL_151; } v31 = *(_DWORD *)(v1 + 19936); if ( v31 ) goto LABEL_151; LABEL_37: if ( *(_DWORD *)(v1 + 116) == 1 && !*(_DWORD *)(v1 + 19936) ) *(_DWORD *)(v1 + 14296) += *v11; *(_DWORD *)(v1 + 14304) = v11; if ( *(_DWORD *)(v1 + 19944) == 1 ) { v12 = 0; v13 = 0; v14 = *(_DWORD *)(v1 + 14272); if ( v14 > 0 ) { v15 = *(_DWORD *)(v1 + 14284); do { ++v13; v12 += *(_DWORD *)(v15 + 8) * *(_DWORD *)(v15 + 4); v15 += 16; } while ( v13 < v14 ); v1 = a1; } v16 = *(_DWORD *)(v1 + 120) * (v12 << 6) + (v12 << 7); if ( !*(_DWORD *)(v1 + 19948) ) { v17 = operator new(0x14u); *(_DWORD *)(v1 + 19948) = v17; if ( !v17 ) return -5; **(_DWORD **)(v1 + 19948) = operator new(8 * v16); v18 = *(_DWORD **)(v1 + 19948); if ( !*v18 ) { operator delete(*(void **)(v1 + 19948)); *(_DWORD *)(v1 + 19948) = 0; return -5; } v18[1] = *v18 + 2 * v16; *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 8) = *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 4) + 2 * v16; *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 12) = *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 8) + 2 * v16; *(_DWORD *)(*(_DWORD *)(v1 + 19948) + 16) = 0; } } v19 = sub_7C14F0(&v42, (signed int)v44, v11, (int *)v1); v9 = v19; if ( v19 == 1 ) { v46 = v11; } else { if ( v19 != 2 ) { if ( !*(_DWORD *)(v1 + 19936) ) *(_DWORD *)(v1 + 14368) += *v11; v20 = *(_DWORD *)(v1 + 14304); if ( v20 && !v19 ) { operator delete(*(void **)(v20 + 52)); *(_DWORD *)(*(_DWORD *)(v1 + 14304) + 52) = 0; operator delete(*(void **)(v1 + 14304)); *(_DWORD *)(v1 + 14304) = 0; } else if ( v19 < 0 ) { return v9; } v21 = v42; if ( v42 ) { v3 = v44; goto LABEL_59; } v3 = v44; goto LABEL_114; } v46 = v11; } if ( !*(_DWORD *)(v1 + 19936) || *(_DWORD *)(v1 + 28) ) { if ( *(_DWORD *)(v1 + 116) != 1 || v19 != 2 ) { *(_DWORD *)(v1 + 14304) = v11; *(_DWORD *)(v1 + 28) = 0; } else { if ( *(_DWORD *)(v1 + 104) ) sub_7AB290((_DWORD *)v1); operator delete((void *)v11[13]); v11[13] = 0; operator delete(v11); *(_DWORD *)(v1 + 14304) = 0; } } else { ++*(_DWORD *)(v1 + 14296); *(_DWORD *)(v1 + 14304) = v11; *(_DWORD *)(v1 + 28) = 0; } return v9; } //----- (00792650) -------------------------------------------------------- int __cdecl sub_792650(int a1) { int v1; // edx int v2; // eax v1 = 0; v2 = 0; if ( *(_DWORD *)(a1 + 14108) ) v1 = *(_DWORD *)(a1 + 14100); if ( *(_DWORD *)(a1 + 14116) ) v1 = *(_DWORD *)(a1 + 14100); if ( *(_DWORD *)(a1 + 14124) ) v1 = *(_DWORD *)(a1 + 14100); if ( *(_DWORD *)(a1 + 14132) ) v1 = *(_DWORD *)(a1 + 14100); if ( *(_DWORD *)(a1 + 14140) && *(_DWORD *)(a1 + 14144) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14152) && *(_DWORD *)(a1 + 14156) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14164) && *(_DWORD *)(a1 + 14168) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14176) && *(_DWORD *)(a1 + 14180) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14188) && *(_DWORD *)(a1 + 14192) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14200) && *(_DWORD *)(a1 + 14204) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14212) && *(_DWORD *)(a1 + 14216) ) v2 = *(_DWORD *)(a1 + 14104); if ( *(_DWORD *)(a1 + 14224) && *(_DWORD *)(a1 + 14228) ) v2 = *(_DWORD *)(a1 + 14104); if ( !v1 ) { *(_DWORD *)(a1 + 132) = 2; *(_DWORD *)(a1 + 128) = 2; *(_DWORD *)(a1 + 14108) = &unk_BA9E40; *(_BYTE *)(a1 + 14112) = 0; *(_DWORD *)(a1 + 14116) = &unk_BA9E00; *(_BYTE *)(a1 + 14120) = 1; *(_DWORD *)(a1 + 14124) = 0; *(_BYTE *)(a1 + 14128) = 0; *(_DWORD *)(a1 + 14132) = 0; *(_BYTE *)(a1 + 14136) = 0; } if ( !v2 ) { *(_DWORD *)(a1 + 136) = 2; *(_DWORD *)(a1 + 140) = 2; *(_DWORD *)(a1 + 144) = 2; *(_DWORD *)(a1 + 14140) = &unk_BA9EC8; *(_DWORD *)(a1 + 14144) = &unk_BA9EBC; *(_BYTE *)(a1 + 14148) = 0; *(_BYTE *)(a1 + 14149) = 0; *(_DWORD *)(a1 + 14152) = &unk_BA9EAC; *(_DWORD *)(a1 + 14156) = &unk_BA9D40; *(_BYTE *)(a1 + 14160) = 1; *(_BYTE *)(a1 + 14161) = 0; *(_DWORD *)(a1 + 14164) = &unk_BA9E9C; *(_DWORD *)(a1 + 14168) = &unk_BA9E90; *(_BYTE *)(a1 + 14172) = 0; *(_BYTE *)(a1 + 14173) = 1; *(_DWORD *)(a1 + 14176) = &unk_BA9E80; *(_DWORD *)(a1 + 14180) = &unk_BA9C80; *(_BYTE *)(a1 + 14184) = 1; *(_BYTE *)(a1 + 14185) = 1; *(_DWORD *)(a1 + 14188) = 0; *(_DWORD *)(a1 + 14192) = 0; *(_BYTE *)(a1 + 14196) = 0; *(_BYTE *)(a1 + 14197) = 0; *(_DWORD *)(a1 + 14200) = 0; *(_DWORD *)(a1 + 14204) = 0; *(_BYTE *)(a1 + 14208) = 0; *(_BYTE *)(a1 + 14209) = 0; *(_DWORD *)(a1 + 14212) = 0; *(_DWORD *)(a1 + 14216) = 0; *(_BYTE *)(a1 + 14220) = 0; *(_BYTE *)(a1 + 14221) = 0; *(_DWORD *)(a1 + 14224) = 0; *(_DWORD *)(a1 + 14228) = 0; *(_BYTE *)(a1 + 14232) = 0; *(_BYTE *)(a1 + 14233) = 0; *(_BYTE *)(a1 + 14240) = 0; *(_BYTE *)(a1 + 14241) = 1; *(_BYTE *)(a1 + 14242) = 1; *(_BYTE *)(a1 + 14243) = 1; *(_BYTE *)(a1 + 14236) = 0; *(_BYTE *)(a1 + 14237) = 1; *(_BYTE *)(a1 + 14238) = 1; *(_BYTE *)(a1 + 14239) = 1; } return 0; } //----- (007928F0) -------------------------------------------------------- int __cdecl sub_7928F0(signed int a1, int a2, int a3) { signed int v3; // ebx int v4; // ebx signed int v5; // ecx int v6; // edi int result; // eax int v8; // edx int v9; // edi v3 = a1; if ( a1 > 0 ) { if ( a1 <= 100 ) { if ( a1 < 50 ) goto LABEL_3; } else { v3 = 100; } v4 = -2 * v3 + 200; goto LABEL_7; } v3 = 1; LABEL_3: v4 = 5000 / v3; LABEL_7: v5 = 0; do { v6 = v4 * *(unsigned __int8 *)(v5 + a2) + 50; result = 1374389535 * v6; v8 = v6 / 100; if ( v6 / 100 > 0 ) { v9 = 2 * v5; if ( v8 <= 255 ) *(_WORD *)(a3 + v9) = v8; else *(_WORD *)(a3 + v9) = 255; } else { *(_WORD *)(a3 + 2 * v5) = 1; } ++v5; } while ( v5 < 64 ); return result; } //----- (007929B0) -------------------------------------------------------- int __cdecl sub_7929B0(int a1, int a2, int a3) { int result; // eax signed int v4; // edx signed int v5; // ebp int v6; // edx signed int v7; // ebx signed int v8; // edi signed int v9; // esi int v10; // edx int v11; // edi int v12; // ebx int v13; // edx signed int v14; // esi signed int v15; // esi signed int v16; // esi int v17; // edi int v18; // eax signed int v19; // esi int v20; // edi int v21; // [esp+0h] [ebp-82Ch] int v22; // [esp+4h] [ebp-828h] int v23[258]; // [esp+8h] [ebp-824h] int v24; // [esp+410h] [ebp-41Ch] int v25; // [esp+414h] [ebp-418h] int v26[255]; // [esp+418h] [ebp-414h] int v27; // [esp+814h] [ebp-18h] result = 0; v4 = 0; do { *(&v21 + v4) = 0; *(&v24 + v4) = 0; *(_WORD *)(a3 + 2 * v4 + 1032) = 0; *(_DWORD *)(a3 + 4 * v4 + 8) = 0; *(&v22 + v4) = 0; *(&v25 + v4) = 0; *(_WORD *)(a3 + 2 * v4 + 1034) = 0; *(_DWORD *)(a3 + 4 * v4 + 12) = 0; v4 += 2; } while ( v4 < 256 ); v5 = 0; v6 = 1; while ( 1 ) { v7 = 1; v8 = *(unsigned __int8 *)(a1 + v6 - 1); if ( v8 > 0 ) break; LABEL_7: if ( ++v6 >= 17 ) { v9 = 0; v10 = 0; *(&v21 + v5) = 0; v11 = v21; while ( 1 ) { *(&v24 + v9++) = v10; v12 = *(&v21 + v9); ++v10; for ( ; v12 == v11; ++v10 ) { if ( v9 >= 257 ) break; *(&v24 + v9++) = v10; v12 = *(&v21 + v9); } if ( !v12 ) break; do { v10 *= 2; ++v11; } while ( v12 != v11 ); } v13 = 0; if ( v5 > 0 ) { if ( v5 < 4 ) goto LABEL_23; v27 = 0; while ( 1 ) { v14 = *(unsigned __int8 *)(a2 + v13); if ( v14 > 257 ) break; *(_WORD *)(a3 + 2 * v14 + 1032) = *(&v24 + v13); *(_DWORD *)(a3 + 4 * v14 + 8) = *(&v21 + v13); v15 = *(unsigned __int8 *)(a2 + v13 + 1); if ( v15 > 257 ) break; *(_WORD *)(a3 + 2 * v15 + 1032) = *(&v25 + v13); *(_DWORD *)(a3 + 4 * v15 + 8) = *(&v22 + v13); v16 = *(unsigned __int8 *)(a2 + v13 + 2); if ( v16 > 257 ) break; v17 = v26[v13]; v18 = v23[v13]; v13 += 3; *(_WORD *)(a3 + 2 * v16 + 1032) = v17; *(_DWORD *)(a3 + 4 * v16 + 8) = v18; if ( v13 > v5 - 4 ) { result = v27; LABEL_23: while ( 1 ) { v19 = *(unsigned __int8 *)(a2 + v13); if ( v19 > 257 ) break; *(_WORD *)(a3 + 2 * v19 + 1032) = *(&v24 + v13); v20 = *(&v21 + v13++); *(_DWORD *)(a3 + 4 * v19 + 8) = v20; if ( v13 >= v5 ) return result; } break; } } result = -6; } return result; } } while ( v5 <= 257 ) { *(&v21 + v5++) = v6; if ( ++v7 > v8 ) goto LABEL_7; } return -6; } // 7929B0: using guessed type int var_414[255]; // 7929B0: using guessed type int var_824[258]; //----- (00792BA0) -------------------------------------------------------- int __cdecl sub_792BA0(int a1, int a2, int a3, int a4, int a5) { signed int v5; // eax unsigned int v6; // edx unsigned int v7; // ebp unsigned int v8; // ebx char v9; // cl int v10; // ecx int v11; // edi int v12; // esi int v13; // edx int v14; // eax signed int v15; // eax unsigned int v16; // edx int v17; // ebp int v18; // esi int v19; // edi unsigned int v20; // ebp int v21; // ecx _DWORD *v22; // esi signed int v23; // eax char v24; // dl int v25; // esi unsigned int v26; // ecx signed int v27; // ebx char v28; // cl int v29; // esi unsigned int v30; // ebp signed int v31; // eax int v32; // edx int v33; // ecx unsigned __int8 *v34; // edi int v35; // ebp int v38; // [esp+0h] [ebp-548h] int v39[257]; // [esp+4h] [ebp-544h] unsigned __int8 v40; // [esp+408h] [ebp-140h] char v41; // [esp+409h] [ebp-13Fh] char v42; // [esp+40Ah] [ebp-13Eh] char v43; // [esp+40Bh] [ebp-13Dh] char v44[256]; // [esp+40Ch] [ebp-13Ch] int v45; // [esp+50Ch] [ebp-3Ch] unsigned __int8 *v46; // [esp+510h] [ebp-38h] int v47; // [esp+514h] [ebp-34h] int v48; // [esp+518h] [ebp-30h] unsigned int v49; // [esp+51Ch] [ebp-2Ch] int v50; // [esp+520h] [ebp-28h] char v51; // [esp+524h] [ebp-24h] char v52; // [esp+528h] [ebp-20h] int v53; // [esp+52Ch] [ebp-1Ch] unsigned int v54; // [esp+530h] [ebp-18h] v5 = 1; *(_DWORD *)a5 = a3; *(_DWORD *)(a5 + 4) = a4; v6 = 0; v45 = 0; do { v7 = *(unsigned __int8 *)(v5 + a1 - 1); v8 = 1; if ( v7 >= 1 ) { if ( v7 - 1 < 6 ) { v9 = v5; LABEL_11: while ( 1 ) { *(&v40 + v6++) = v9; if ( v6 > 0x101 ) break; if ( ++v8 > v7 ) goto LABEL_13; } } else { v9 = v5; while ( 1 ) { *(&v40 + v6) = v5; if ( v6 + 1 > 0x101 ) break; *(&v41 + v6) = v5; if ( v6 + 2 > 0x101 ) break; *(&v42 + v6) = v5; if ( v6 + 3 > 0x101 ) break; *(&v43 + v6) = v5; if ( v6 + 4 > 0x101 ) break; v44[v6] = v5; v6 += 5; if ( v6 > 0x101 ) break; v8 += 5; if ( v8 > v7 - 6 ) goto LABEL_11; } } return -6; } LABEL_13: ++v5; } while ( v5 <= 16 ); v10 = v45; *(&v40 + v6) = 0; v11 = 0; v12 = v40; v13 = 0; if ( v40 ) { v14 = v40; do { for ( ; v14 == v12; v14 = *(&v40 + v13) ) { v39[v13] = v11++; if ( (unsigned int)++v13 > 0x101 ) return -6; } v11 *= 2; ++v12; } while ( v14 ); } v15 = 1; *(_WORD *)(a5 + 1614) = 0; *(_WORD *)(a5 + 1544) = 0; *(_WORD *)(a5 + 1578) = 0; *(_WORD *)(a5 + 1616) = 0; *(_WORD *)(a5 + 1546) = 0; *(_WORD *)(a5 + 1580) = 0; *(_WORD *)(a5 + 1618) = 0; *(_WORD *)(a5 + 1548) = 0; *(_WORD *)(a5 + 1582) = 0; *(_WORD *)(a5 + 1620) = 0; *(_WORD *)(a5 + 1550) = 0; *(_WORD *)(a5 + 1584) = 0; *(_WORD *)(a5 + 1622) = 0; *(_WORD *)(a5 + 1552) = 0; *(_WORD *)(a5 + 1586) = 0; *(_WORD *)(a5 + 1624) = 0; *(_WORD *)(a5 + 1554) = 0; *(_WORD *)(a5 + 1588) = 0; *(_WORD *)(a5 + 1626) = 0; *(_WORD *)(a5 + 1556) = 0; *(_WORD *)(a5 + 1590) = 0; *(_WORD *)(a5 + 1628) = 0; *(_WORD *)(a5 + 1558) = 0; *(_WORD *)(a5 + 1592) = 0; *(_WORD *)(a5 + 1630) = 0; *(_WORD *)(a5 + 1560) = 0; *(_WORD *)(a5 + 1594) = 0; *(_WORD *)(a5 + 1632) = 0; *(_WORD *)(a5 + 1562) = 0; *(_WORD *)(a5 + 1596) = 0; *(_WORD *)(a5 + 1634) = 0; *(_WORD *)(a5 + 1564) = 0; *(_WORD *)(a5 + 1598) = 0; *(_WORD *)(a5 + 1636) = 0; *(_WORD *)(a5 + 1566) = 0; *(_WORD *)(a5 + 1600) = 0; *(_WORD *)(a5 + 1638) = 0; *(_WORD *)(a5 + 1568) = 0; *(_WORD *)(a5 + 1602) = 0; *(_WORD *)(a5 + 1640) = 0; *(_WORD *)(a5 + 1570) = 0; *(_WORD *)(a5 + 1604) = 0; *(_WORD *)(a5 + 1642) = 0; *(_WORD *)(a5 + 1572) = 0; *(_WORD *)(a5 + 1606) = 0; *(_WORD *)(a5 + 1644) = 0; *(_WORD *)(a5 + 1574) = 0; *(_WORD *)(a5 + 1608) = 0; *(_WORD *)(a5 + 1646) = 0; *(_WORD *)(a5 + 1576) = 0; *(_WORD *)(a5 + 1610) = 0; v16 = 0; v45 = v10; while ( 1 ) { v17 = *(unsigned __int8 *)(v15 + a1 - 1); if ( !*(_BYTE *)(v15 + a1 - 1) ) { *(_WORD *)(a5 + 2 * v15 + 1578) = -1; goto LABEL_37; } v18 = 2 * v15; v19 = 4 * v16; *(_WORD *)(a5 + 2 * v15 + 1614) = v16; v20 = v16 + v17; *(_WORD *)(a5 + 2 * v15 + 1544) = v39[v16]; if ( v16 < v20 ) break; LABEL_35: *(_WORD *)(a5 + v18 + 1578) = *(int *)((char *)&v38 + v19); LABEL_37: if ( ++v15 > 16 ) { v21 = v45; *(_WORD *)(a5 + 1612) = -1; v22 = (_DWORD *)a5; do { v22[2] = 0; v22[3] = 0; v22[4] = 0; v22[5] = 0; v22 += 4; } while ( a5 + 1024 > (signed int)v22 ); v23 = 1; v24 = -1; v45 = v21; v54 = 0; v25 = a1; while ( 1 ) { v26 = *(unsigned __int8 *)(v23 + v25 - 1); v27 = 1; v49 = *(unsigned __int8 *)(v23 + v25 - 1); if ( v26 >= 1 ) break; LABEL_54: --v24; if ( ++v23 > 8 ) return v45; } v28 = v24 + 8; v29 = a2; v53 = v23 << 16; v47 = 1 << (v24 + 8); v52 = v24; v30 = v54; v50 = v23; while ( v30 <= 0x101 ) { v31 = v47; v32 = v39[v30] << v28; if ( v47 > 0 ) { if ( v47 < 6 ) { v34 = (unsigned __int8 *)(v30 + v29); } else { v46 = (unsigned __int8 *)(v30 + v29); v51 = v28; v33 = v53; v48 = v27; do { v31 -= 5; *(_DWORD *)(a5 + 4 * v32 + 8) = v33 | *(unsigned __int8 *)(v29 + v30); *(_DWORD *)(a5 + 4 * v32 + 12) = v33 | *(unsigned __int8 *)(v29 + v30); *(_DWORD *)(a5 + 4 * v32 + 16) = v33 | *(unsigned __int8 *)(v29 + v30); *(_DWORD *)(a5 + 4 * v32 + 20) = v33 | *(unsigned __int8 *)(v29 + v30); *(_DWORD *)(a5 + 4 * v32 + 24) = v33 | *(unsigned __int8 *)(v29 + v30); v32 += 5; } while ( v31 >= 6 ); v53 = v33; v34 = v46; v28 = v51; v27 = v48; } v48 = v27; v54 = v30; v35 = v53; do { --v31; *(_DWORD *)(a5 + 4 * v32++ + 8) = v35 | *v34; } while ( v31 > 0 ); v27 = v48; v30 = v54; v29 = a2; } ++v30; if ( ++v27 > v49 ) { v54 = v30; v24 = v52; v23 = v50; v25 = a1; goto LABEL_54; } } return -6; } } if ( v20 - v16 < 6 ) goto LABEL_32; v54 = v15; while ( 1 ) { *(_WORD *)(a5 + 2 * v16 + 1032) = *(unsigned __int8 *)(a2 + v16); if ( v16 + 1 > 0x101 ) return -6; *(_WORD *)(a5 + 2 * v16 + 1034) = *(unsigned __int8 *)(a2 + v16 + 1); if ( v16 + 2 > 0x101 ) return -6; *(_WORD *)(a5 + 2 * v16 + 1036) = *(unsigned __int8 *)(a2 + v16 + 2); if ( v16 + 3 > 0x101 ) return -6; *(_WORD *)(a5 + 2 * v16 + 1038) = *(unsigned __int8 *)(a2 + v16 + 3); if ( v16 + 4 > 0x101 ) return -6; *(_WORD *)(a5 + 2 * v16 + 1040) = *(unsigned __int8 *)(a2 + v16 + 4); v16 += 5; if ( v16 > 0x101 ) return -6; if ( v16 > v20 - 6 ) { v15 = v54; LABEL_32: while ( 1 ) { *(_WORD *)(a5 + 2 * v16 + 1032) = *(unsigned __int8 *)(a2 + v16); if ( ++v16 > 0x101 ) return -6; if ( v16 >= v20 ) { v19 = 4 * v16; goto LABEL_35; } } } } } // 792BA0: using guessed type char var_13C[256]; // 792BA0: using guessed type int var_544[257]; //----- (00793210) -------------------------------------------------------- int __cdecl sub_793210(_DWORD *a1) { int v1; // esi int v2; // ebp int v3; // eax int result; // eax int v5; // eax int v6; // esi int v7; // ebx int v8; // ebp int v9; // [esp+14h] [ebp-18h] int v10; // [esp+14h] [ebp-18h] int v11; // [esp+18h] [ebp-14h] v1 = 0; v2 = 0; v11 = 0; v9 = (int)(a1 + 3578); while ( v2 < a1[33] ) { v3 = a1[v1 + 39]; a1[v2 + 3513] = v3; sub_7928F0(a1[28], a1[2 * v2 + 3527], v3); result = sub_7C3210(v9, 0, a1[2 * v2 + 3528], (__int16 *)a1[v2 + 3513]); v11 = result; if ( result ) return result; v5 = a1[5]; if ( v5 ) { if ( v5 != 1 ) return -8; sub_796C50(a1[v2 + 3513]); } else { sub_795840(a1[v2 + 3513]); } v1 += 45; ++v2; } result = v11; if ( !a1[4984] ) { result = sub_7C3670(v9, (int)a1); if ( !result && 2 * a1[36] > 0 ) { v6 = (int)(a1 + 1865); v10 = 0; v7 = (int)(a1 + 217); v8 = 0; do { a1[BYTE1(a1[v8 + 3537]) + 3521] = v6; a1[BYTE1(a1[v8 + 3540]) + 3517] = v7; result = sub_7929B0(a1[v8 + 3535], a1[v8 + 3536], a1[BYTE1(a1[v8 + 3537]) + 3521]); if ( result ) break; result = sub_7929B0(a1[v8 + 3538], a1[v8 + 3539], a1[BYTE1(a1[v8 + 3540]) + 3517]); if ( result ) break; v8 += 6; v7 += 3296; v6 += 3296; v10 += 2; } while ( v10 < 2 * a1[36] ); } } return result; } //----- (00793410) -------------------------------------------------------- int __cdecl sub_793410(int *a1) { int v1; // esi int v2; // ebp int result; // eax int v4; // edx int v5; // edx int v6; // ecx int v7; // edx int v8; // ecx int v9; // edi int v10; // eax int i; // esi int v12; // eax int v13; // eax int v14; // edi int v15; // ebp int v16; // esi int v17; // eax int v18; // [esp+18h] [ebp-1Ch] int v19; // [esp+20h] [ebp-14h] v1 = (int)(a1 + 3578); v2 = a1[3580]; (*(void (__cdecl **)(int *, int, int))(v2 + 88))(a1 + 3578, a1[17], a1[18]); result = sub_7C2DE0((int)(a1 + 3578)); if ( result ) return result; v4 = *a1; if ( *a1 != 8 && v4 != 9 && v4 != 10 && v4 != 11 ) goto LABEL_6; v17 = a1[22]; if ( v17 == 1 || v17 == 5 ) { result = sub_7C4010(0, (int)a1); if ( result ) return result; } else if ( v17 == 6 ) { result = sub_7C4010(2, (int)a1); if ( result ) return result; } else { result = sub_7C2A20((int)a1); if ( result ) return result; } result = sub_7C2B40((int)a1); if ( !result ) { result = sub_793210(a1); if ( !result ) { v4 = *a1; LABEL_6: if ( v4 != 12 && v4 != 13 ) goto LABEL_8; v9 = 0; v10 = a1[33]; v18 = v2; for ( i = 0; i < v10; ++i ) { if ( !a1[i + 3513] && a1[2 * i + 3527] ) { v12 = a1[v9 + 39]; a1[i + 3513] = v12; sub_7928F0(a1[28], a1[2 * i + 3527], v12); v13 = a1[5]; if ( v13 ) { if ( v13 != 1 ) return -8; sub_796C50(a1[i + 3513]); v10 = a1[33]; } else { sub_795840(a1[i + 3513]); v10 = a1[33]; } } v9 += 45; } result = 0; v1 = (int)(a1 + 3578); if ( 2 * a1[36] <= 0 ) { LABEL_8: v5 = a1[5]; if ( v5 ) { if ( v5 == 1 ) { v7 = *(_DWORD *)(v2 + 32); v8 = *(_DWORD *)(v2 + 256); } else { v7 = *(_DWORD *)(v2 + 28); v8 = *(_DWORD *)(v2 + 252); } *(_DWORD *)(v2 + 68) = v7; *(_DWORD *)(v2 + 260) = v8; } else { v6 = *(_DWORD *)(v2 + 252); *(_DWORD *)(v2 + 68) = *(_DWORD *)(v2 + 28); *(_DWORD *)(v2 + 260) = v6; } if ( *a1 != 11 && *a1 != 10 || (result = sub_7C2E30(v1)) == 0 ) { if ( a1[3593] ) result = sub_79AEB0(v1); } } else { v14 = (int)(a1 + 1865); v19 = 0; v15 = (int)(a1 + 217); v16 = 0; while ( 1 ) { a1[BYTE1(a1[v16 + 3537]) + 3521] = v14; a1[BYTE1(a1[v16 + 3540]) + 3517] = v15; result = sub_7929B0(a1[v16 + 3535], a1[v16 + 3536], a1[BYTE1(a1[v16 + 3537]) + 3521]); if ( result ) break; result = sub_7929B0(a1[v16 + 3538], a1[v16 + 3539], a1[BYTE1(a1[v16 + 3540]) + 3517]); if ( result ) break; v16 += 6; v15 += 3296; v14 += 3296; v19 += 2; if ( v19 >= 2 * a1[36] ) { v2 = v18; v1 = (int)(a1 + 3578); goto LABEL_8; } } } return result; } } return result; } //----- (00793760) -------------------------------------------------------- int __cdecl sub_793760(int a1) { _DWORD *v1; // ebx int v2; // ecx int *v3; // edx signed int v4; // eax void *v5; // edx void *v6; // eax _DWORD *v7; // ecx void *v8; // eax _DWORD *v10; // eax int v11; // ebx char *v12; // eax _DWORD *v13; // esi int v14; // ebx int v15; // ecx int v16; // ebx int v17; // edx void *v18; // [esp+0h] [ebp-38h] int v19; // [esp+4h] [ebp-34h] int v20; // [esp+8h] [ebp-30h] int v21; // [esp+Ch] [ebp-2Ch] int v22; // [esp+1Ch] [ebp-1Ch] CPPEH_RECORD ms_exc; // [esp+20h] [ebp-18h] ms_exc.old_esp = (DWORD)&v18; ms_exc.registration.TryLevel = 0; v19 = 0; v1 = (_DWORD *)a1; v2 = a1 + 14312; v20 = a1 + 14312; v18 = 0; v3 = *(int **)(a1 + 14304); if ( v3 ) { v18 = *(void **)(a1 + 14304); goto LABEL_3; } v10 = operator new(0x38u); v18 = v10; if ( !v10 ) { v19 = -5; goto LABEL_18; } v11 = *(_DWORD *)(a1 + 84); *v10 = v11; v10[1] = 0; v10[2] = 1; v10[3] = 63; v10[4] = 0; v10[5] = 0; v10[6] = 0; v10[7] = 0; v10[8] = 0; v10[9] = 0; v10[10] = 0; v10[11] = 0; v10[12] = 0; v12 = (char *)operator new(24 * v11); v13 = v18; *((_DWORD *)v18 + 13) = v12; if ( !v12 ) { v19 = -5; goto LABEL_18; } v14 = 0; v21 = 0; if ( *v13 <= 0 ) { v22 = a1; } else { v22 = a1; while ( 1 ) { v15 = 24 * v14; *(_DWORD *)&v12[v15] = v14; *(_DWORD *)(v15 + v13[13] + 4) = *(_DWORD *)(16 * v14 + *(_DWORD *)(v22 + 14284) + 4); *(_DWORD *)(v15 + v13[13] + 8) = *(_DWORD *)(16 * v14 + *(_DWORD *)(v22 + 14284) + 8); *(_DWORD *)(v15 + v13[13] + 12) = 0; *(_DWORD *)(v15 + v13[13] + 16) = 0; *(_DWORD *)(v15 + v13[13] + 20) = 0; v21 = ++v14; if ( v14 >= *v13 ) break; v12 = (char *)v13[13]; } } v19 = sub_7C2E80(v20, (_DWORD *)(v22 + 14244)); if ( !v19 ) { v16 = a1; v17 = *(_DWORD *)(a1 + 14288); if ( v17 ) { v19 = sub_7C3F00(v17, v20); if ( v19 ) goto LABEL_18; v16 = a1; } v19 = sub_7C3B90(v20, *(_DWORD *)(v16 + 84), (_BYTE *)(v16 + 14240), (_BYTE *)(v16 + 14236)); if ( !v19 ) { v19 = sub_79AEB0(v20); if ( !v19 ) { v19 = sub_79AF80((_DWORD *)a1); if ( !v19 ) { v3 = (int *)v18; v2 = v20; v1 = (_DWORD *)a1; LABEL_3: if ( v1[3572] ) v4 = sub_7C5740(v1, v2, v3); else v4 = sub_7C4110(v1, v2, v3); v19 = v4; if ( v4 == 1 || v4 == 2 ) { *(_DWORD *)(a1 + 28) = 0; *(_DWORD *)(a1 + 14304) = v18; } else if ( !v4 ) { v5 = v18; if ( v18 ) { v6 = (void *)*((_DWORD *)v18 + 13); if ( v6 ) { operator delete(v6); v5 = v18; *((_DWORD *)v18 + 13) = 0; } operator delete(v5); v18 = 0; v7 = 0; *(_DWORD *)(a1 + 14304) = 0; } else { v7 = *(_DWORD **)(a1 + 14304); } if ( v7 ) { v8 = (void *)v7[13]; if ( v8 ) { operator delete(v8); *(_DWORD *)(*(_DWORD *)(a1 + 14304) + 52) = 0; v7 = *(_DWORD **)(a1 + 14304); } operator delete(v7); *(_DWORD *)(a1 + 14304) = 0; } v19 = sub_7C2E30(v20); if ( !v19 ) { v19 = sub_79AEB0(v20); ms_exc.registration.TryLevel = -1; } } goto LABEL_18; } } } } LABEL_18: if ( v19 < 0 && v18 ) { if ( *((_DWORD *)v18 + 13) ) { operator delete(*((void **)v18 + 13)); *((_DWORD *)v18 + 13) = 0; } operator delete(v18); v18 = 0; *(_DWORD *)(a1 + 14304) = 0; } return v19; } //----- (00793B30) -------------------------------------------------------- int __cdecl sub_793B30(int a1, _DWORD *a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // eax int result; // eax v7 = (_DWORD *)a2[13]; *a2 = 1; *v7 = a3; *(_DWORD *)(a2[13] + 4) = *(_DWORD *)(16 * a3 + *(_DWORD *)(a1 + 14284) + 4); *(_DWORD *)(a2[13] + 8) = *(_DWORD *)(16 * a3 + *(_DWORD *)(a1 + 14284) + 8); a2[2] = a4; a2[3] = a5; a2[4] = a6; result = a7; a2[5] = a7; return result; } //----- (00793B90) -------------------------------------------------------- void __cdecl sub_793B90(int a1, signed int *a2, signed int a3, signed int a4, signed int a5) { signed int v5; // ecx int v6; // eax int v7; // ebp int v8; // ebx int v9; // ebp int v10; // ebx int v11; // esi signed int v12; // [esp+8h] [ebp-1Ch] signed int v13; // [esp+Ch] [ebp-18h] v5 = a3; if ( a3 <= 4 ) { v6 = 0; if ( a3 > 0 ) { if ( a3 >= 4 ) { v7 = 0; v8 = 0; v12 = 2; v13 = 1; do { *(_DWORD *)(v7 + a2[13]) = v6; *(_DWORD *)(v7 + a2[13] + 4) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 4); v6 += 3; *(_DWORD *)(v7 + a2[13] + 8) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 8); *(_DWORD *)(v7 + a2[13] + 24) = v13; *(_DWORD *)(v7 + a2[13] + 28) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 20); *(_DWORD *)(v7 + a2[13] + 32) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 24); *(_DWORD *)(v7 + a2[13] + 48) = v12; *(_DWORD *)(v7 + a2[13] + 52) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 36); *(_DWORD *)(v7 + a2[13] + 56) = *(_DWORD *)(v8 + *(_DWORD *)(a1 + 14284) + 40); v7 += 72; v8 += 48; v13 += 3; v12 += 3; } while ( v6 <= a3 - 4 ); } v9 = 24 * v6; v10 = 16 * v6; do { *(_DWORD *)(v9 + a2[13]) = v6; *(_DWORD *)(v9 + a2[13] + 4) = *(_DWORD *)(v10 + *(_DWORD *)(a1 + 14284) + 4); v11 = *(_DWORD *)(v10 + *(_DWORD *)(a1 + 14284) + 8); v10 += 16; ++v6; *(_DWORD *)(v9 + a2[13] + 8) = v11; v9 += 24; } while ( v6 < a3 ); v5 = a3; } *a2 = v5; a2[2] = 0; a2[3] = 0; a2[4] = a4; a2[5] = a5; } } //----- (00793D00) -------------------------------------------------------- signed int __cdecl sub_793D00(int a1, _DWORD *a2) { signed int result; // eax int v3; // ecx int v4; // ecx int v5; // ecx result = 0; v3 = *(_DWORD *)(a1 + 84); switch ( v3 ) { case 1: if ( *(_DWORD *)(a1 + 88) == 4 ) { *a2 = 6; } else { *a2 = 0; result = -8; } break; case 2: if ( *(_DWORD *)(a1 + 88) == 255 ) { *a2 = 5; } else { *a2 = 0; result = -8; } break; case 3: v4 = *(_DWORD *)(a1 + 88); switch ( v4 ) { case 1: *a2 = 8; break; case 3: *a2 = 10; break; case 255: *a2 = 8; break; default: *a2 = 0; result = -8; break; } break; case 4: v5 = *(_DWORD *)(a1 + 88); switch ( v5 ) { case 5: *a2 = 10; break; case 6: *a2 = 11; break; case 255: *a2 = 10; break; default: *a2 = 0; result = -8; break; } break; default: *a2 = 0; result = -8; break; } return result; } //----- (00793DF0) -------------------------------------------------------- signed int __cdecl sub_793DF0(int a1, int a2) { signed int v2; // edi void *v3; // eax int v4; // ebx int v5; // ebp v2 = 0; v3 = operator new(56 * a2); *(_DWORD *)(a1 + 14304) = v3; if ( !v3 ) return -5; dword_BA2964(v3, 56 * a2); if ( a2 > 0 ) { v4 = 0; v5 = 0; while ( 1 ) { *(_DWORD *)(v4 + *(_DWORD *)(a1 + 14304) + 52) = operator new(0x60u); if ( !*(_DWORD *)(v4 + *(_DWORD *)(a1 + 14304) + 52) ) break; v4 += 56; if ( ++v5 >= a2 ) return 0; } v2 = -5; } return v2; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); //----- (00793E90) -------------------------------------------------------- signed int __cdecl sub_793E90(int a1, int *a2) { signed int v2; // esi int v3; // edx int v4; // ebx int v5; // ebp v2 = sub_793D00(a1, a2); if ( !v2 ) { v2 = sub_793DF0(a1, *a2); if ( !v2 ) { v3 = *(_DWORD *)(a1 + 84); if ( v3 == 1 && *(_DWORD *)(a1 + 88) == 4 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 1, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 0, 6, 63, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 0, 1, 63, 2, 1); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 224), 1, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 280), 0, 1, 63, 1, 0); return v2; } if ( v3 == 2 && *(_DWORD *)(a1 + 88) == 255 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 2, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 1, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 0, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 224), 1, 6, 63, 0, 0); return v2; } if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 3 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 3, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 2, 1, 63, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 1, 1, 63, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 224), 0, 6, 63, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 280), 0, 1, 63, 2, 1); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 336), 3, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 392), 2, 1, 63, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 448), 1, 1, 63, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 504), 0, 1, 63, 1, 0); return v2; } if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 1 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 3, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 1, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 2, 1, 5, 0, 0); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 224), 3, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 280), 0, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 336), 1, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 392), 2, 6, 63, 0, 0); return v2; } if ( v3 == 3 && *(_DWORD *)(a1 + 88) == 255 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 3, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 1, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 2, 1, 5, 0, 0); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 224), 3, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 280), 0, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 336), 1, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 392), 2, 6, 63, 0, 0); return v2; } if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 5 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 4, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 1, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 2, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 224), 3, 1, 5, 0, 0); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 280), 4, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 336), 0, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 392), 1, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 448), 2, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 504), 3, 6, 63, 0, 0); return v2; } if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 6 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 4, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 2, 1, 63, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 1, 1, 63, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 224), 3, 1, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 280), 0, 6, 63, 0, 2); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 336), 0, 1, 63, 2, 1); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 392), 4, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 448), 2, 1, 63, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 504), 1, 1, 63, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 560), 0, 1, 63, 1, 0); return v2; } if ( v3 == 4 && *(_DWORD *)(a1 + 88) == 255 ) { sub_793B90(a1, *(signed int **)(a1 + 14304), 4, 0, 1); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 56), 0, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 112), 1, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 168), 2, 1, 5, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 224), 3, 1, 5, 0, 0); sub_793B90(a1, (signed int *)(*(_DWORD *)(a1 + 14304) + 280), 4, 1, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 336), 0, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 392), 1, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 448), 2, 6, 63, 0, 0); sub_793B30(a1, (_DWORD *)(*(_DWORD *)(a1 + 14304) + 504), 3, 6, 63, 0, 0); return v2; } v2 = -8; } } if ( *a2 > 0 ) { v4 = 0; v5 = 0; do { operator delete(*(void **)(v4 + *(_DWORD *)(a1 + 14304) + 52)); v4 += 56; ++v5; } while ( v5 < *a2 ); } operator delete(*(void **)(a1 + 14304)); *(_DWORD *)(a1 + 14304) = 0; return v2; } //----- (00794E40) -------------------------------------------------------- signed int __cdecl sub_794E40(int a1) { int v1; // ecx int v2; // edx int v3; // eax int v4; // edi void *v5; // eax int v6; // ecx _DWORD *v7; // eax int v8; // esi int v9; // esi signed int result; // eax int v11; // edx _DWORD *v12; // eax int v13; // edx _DWORD *v14; // eax int v15; // ebx int v16; // edx int v17; // eax int v18; // edi int v19; // ebx int v20; // ecx int v21; // ebx int v22; // edi int v23; // ebx int v24; // edx int v25; // esi int v26; // edi int v27; // esi int v28; // esi int v29; // [esp+0h] [ebp-9B0h] int v30; // [esp+404h] [ebp-5ACh] int v31; // [esp+808h] [ebp-1A8h] int v32; // [esp+80Ch] [ebp-1A4h] int v33; // [esp+810h] [ebp-1A0h] int *v34; // [esp+814h] [ebp-19Ch] int v35; // [esp+818h] [ebp-198h] int v36; // [esp+81Ch] [ebp-194h] int v37; // [esp+820h] [ebp-190h] int v38; // [esp+824h] [ebp-18Ch] int v39; // [esp+828h] [ebp-188h] int v40; // [esp+82Ch] [ebp-184h] int v41; // [esp+830h] [ebp-180h] int v42; // [esp+834h] [ebp-17Ch] int v43; // [esp+838h] [ebp-178h] int v44; // [esp+83Ch] [ebp-174h] int v45; // [esp+840h] [ebp-170h] int v46; // [esp+844h] [ebp-16Ch] int i; // [esp+848h] [ebp-168h] int v48; // [esp+84Ch] [ebp-164h] int v49; // [esp+850h] [ebp-160h] int v50; // [esp+854h] [ebp-15Ch] int v51; // [esp+858h] [ebp-158h] int v52; // [esp+85Ch] [ebp-154h] int v53; // [esp+86Ch] [ebp-144h] int v54; // [esp+96Ch] [ebp-44h] int v55; // [esp+97Ch] [ebp-34h] int v56; // [esp+980h] [ebp-30h] int v57; // [esp+984h] [ebp-2Ch] int v58; // [esp+988h] [ebp-28h] _DWORD *v59; // [esp+98Ch] [ebp-24h] int v60; // [esp+990h] [ebp-20h] CPPEH_RECORD ms_exc; // [esp+998h] [ebp-18h] ms_exc.old_esp = (DWORD)&v29; v31 = 0; v32 = 0; v33 = 0; v55 = a1; v34 = (int *)(a1 + 14312); v35 = 0; ms_exc.registration.TryLevel = 0; v1 = 0; v36 = 0; v2 = 0; v37 = 0; v3 = *(_DWORD *)(a1 + 14272); if ( v3 > 0 ) { v4 = *(_DWORD *)(v55 + 14284); do { v2 += *(_DWORD *)(16 * v1 + v4 + 8) * *(_DWORD *)(16 * v1 + v4 + 4); v37 = v2; v36 = ++v1; } while ( v1 < v3 ); } v38 = *(_DWORD *)(v55 + 124) * *(_DWORD *)(v55 + 120); v39 = v2 << 6; v40 = v38 * (v2 << 6); v5 = operator new(2 * v38 * (v2 << 6)); *(_DWORD *)(a1 + 19940) = v5; if ( !v5 ) { v35 = -5; goto LABEL_25; } if ( *(_DWORD *)(a1 + 14304) ) goto LABEL_6; result = sub_793E90(a1, &v31); v35 = result; if ( result ) return result; v11 = a1; if ( *(_DWORD *)a1 != 9 && *(_DWORD *)a1 != 8 ) { v35 = sub_7C2DE0((int)v34); if ( v35 ) goto LABEL_25; v11 = a1; } v35 = sub_7C3070((int)v34, (_DWORD *)(v11 + 14244)); if ( !v35 ) { v12 = (_DWORD *)a1; v13 = *(_DWORD *)(a1 + 14288); if ( v13 ) { v35 = sub_7C3F00(v13, (int)v34); if ( v35 ) goto LABEL_25; v12 = (_DWORD *)a1; } v35 = sub_79AF80(v12); if ( !v35 ) { v59 = (_DWORD *)a1; v14 = *(_DWORD **)(a1 + 19932); if ( v14 && !*v14 ) { v15 = 0; v41 = 0; v16 = 0; v42 = 0; v17 = v59[3568]; if ( v17 > 0 ) { v18 = v59[3571]; do { v15 += *(_DWORD *)(16 * v16 + v18 + 4) * *(_DWORD *)(16 * v16 + v18 + 8); v41 = v15; v42 = ++v16; } while ( v16 < v17 ); } v19 = v15 << 6; v39 = v19; v20 = v59[30]; v41 = v20 * v19; v55 = 0; v43 = 0; v21 = v59[31]; if ( v21 > 0 ) { do { v56 = 0; v44 = 0; if ( v20 > 0 ) { do { v22 = v39 * 2 * v56; v23 = v22 + v59[4985] + v41 * 2 * v55; v32 = v22 + v59[4985] + v41 * 2 * v55; v24 = 0; v45 = 0; if ( v17 > 0 ) { v60 = v59[3571]; do { v58 = 0; v46 = 0; v25 = *(_DWORD *)(16 * v24 + v60 + 8); if ( v25 > 0 ) { v26 = *(_DWORD *)(16 * v24 + v60 + 4); do { v57 = 0; for ( i = 0; i < v26; v57 = i ) { v60 = v59[4983]; v27 = 16 * v57 + 16 * v56 * v26 + v26 * (v58 << 7) * v20 + *(_DWORD *)(v60 + 4 * v24 + 4) + v26 * v20 * (v55 << 7) * v25; v48 = v27; v49 = 0; v50 = v23; do { dword_BA2968(v23, v27, 16); ++v49; v59 = (_DWORD *)a1; v20 = *(_DWORD *)(a1 + 120); v28 = *(_DWORD *)(a1 + 14284); v60 = v28; v24 = v45; v58 = 16 * v45; v26 = *(_DWORD *)(16 * v45 + v28 + 4); v27 = v48 + v26 * 16 * v20; v48 += v26 * 16 * v20; v23 = v32 + 16; v32 += 16; } while ( v49 < 8 ); v55 = v43; v56 = v44; v25 = *(_DWORD *)(v58 + v60 + 8); v58 = v46; ++i; } v46 = ++v58; } while ( v58 < v25 ); v17 = v59[3568]; } v45 = ++v24; } while ( v24 < v17 ); } v44 = ++v56; } while ( v56 < v20 ); v21 = v59[31]; } v43 = ++v55; } while ( v55 < v21 ); } LABEL_6: v6 = 0; v36 = 0; v51 = 0; if ( v31 <= 0 ) { LABEL_31: v35 = sub_7C2E30((int)v34); if ( !v35 ) { v35 = sub_79AEB0((int)v34); if ( !v35 ) ms_exc.registration.TryLevel = -1; } } else { while ( 1 ) { v33 = *(_DWORD *)(a1 + 14304) + 56 * v6; dword_BA2964(&v29, 1028); dword_BA2964(&v30, 1028); dword_BA2964(&v52, 16); dword_BA2964(&v53, 256); v35 = sub_7C4A10((_DWORD *)a1, (int)v34, (int *)v33, (int)&v29); if ( v35 ) break; v7 = (_DWORD *)v33; if ( *(_DWORD *)(v33 + 8) || *(_DWORD *)(v33 + 12) ) { if ( **(_DWORD **)(v33 + 52) ) { v54 = 1; sub_797400((int)&v30, (int)&v52, (int)&v53); v35 = sub_7929B0((int)&v52, (int)&v53, a1 + 2516); if ( v35 ) goto LABEL_25; *(_DWORD *)(a1 + 14072) = a1 + 2516; v35 = sub_7C3380((int)v34, (unsigned __int8 *)&v52, (int)&v53, 1, 1); if ( v35 ) goto LABEL_25; v7 = (_DWORD *)v33; v8 = a1; } else { v54 = 0; sub_797400((int)&v29, (int)&v52, (int)&v53); v35 = sub_7929B0((int)&v52, (int)&v53, a1 + 868); if ( v35 ) goto LABEL_25; *(_DWORD *)(a1 + 14068) = a1 + 868; v35 = sub_7C3380((int)v34, (unsigned __int8 *)&v52, (int)&v53, 1, 0); if ( v35 ) goto LABEL_25; v7 = (_DWORD *)v33; v8 = a1; } } else if ( *(_DWORD *)(v33 + 16) ) { v8 = a1; } else { *(_DWORD *)(v33 + 36) = 0; v7[10] = 0; v7[11] = 0; v7[12] = 0; v54 = 0; sub_797400((int)&v29, (int)&v52, (int)&v53); v35 = sub_7929B0((int)&v52, (int)&v53, a1 + 7460); if ( v35 ) goto LABEL_25; *(_DWORD *)(a1 + 14084) = a1 + 7460; v35 = sub_7C3380((int)v34, (unsigned __int8 *)&v52, (int)&v53, 0, 0); if ( v35 ) goto LABEL_25; v8 = a1; if ( *(_DWORD *)(a1 + 84) == 1 ) { v7 = (_DWORD *)v33; } else { dword_BA2964(&v52, 16); dword_BA2964(&v53, 256); v54 = 1; sub_797400((int)&v30, (int)&v52, (int)&v53); v35 = sub_7929B0((int)&v52, (int)&v53, a1 + 9108); if ( v35 ) goto LABEL_25; *(_DWORD *)(a1 + 14088) = a1 + 9108; v35 = sub_7C3380((int)v34, (unsigned __int8 *)&v52, (int)&v53, 0, 1); if ( v35 ) goto LABEL_25; v7 = (_DWORD *)v33; v8 = a1; } } v35 = sub_7C3DB0((int)v34, (int)v7, v8 + 14240, v8 + 14236); if ( v35 ) goto LABEL_25; v35 = sub_7C4FF0((_DWORD *)a1, v34, (int *)v33); if ( v35 < 0 ) goto LABEL_25; ++v51; v6 = v36 + 1; v36 = v6; if ( v6 >= v31 ) goto LABEL_31; } } goto LABEL_25; } v35 = sub_7C46B0(v59); if ( !v35 ) goto LABEL_6; } } LABEL_25: if ( *(_DWORD *)(a1 + 14304) ) { v36 = 0; if ( v31 > 0 ) { do { operator delete(*(void **)(56 * v36 + *(_DWORD *)(a1 + 14304) + 52)); v9 = v36 + 1; *(_DWORD *)(56 * v36 + *(_DWORD *)(a1 + 14304) + 52) = 0; v36 = v9; } while ( v9 < v31 ); } operator delete(*(void **)(a1 + 14304)); *(_DWORD *)(a1 + 14304) = 0; } return v35; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); //----- (00795830) -------------------------------------------------------- void *sub_795830() { return &unk_AB92E0; } //----- (00795840) -------------------------------------------------------- signed int __cdecl sub_795840(int a1) { signed int v1; // ecx int v2; // esi signed int result; // eax __int16 v4; // [esp+0h] [ebp-8Ch] __int16 v5; // [esp+2h] [ebp-8Ah] __int16 v6; // [esp+4h] [ebp-88h] __int16 v7[67]; // [esp+6h] [ebp-86h] if ( *(signed __int16 *)(a1 + 126) < 2 ) *(_WORD *)(a1 + 126) = 2; v1 = 0; do { v2 = *(signed __int16 *)(a1 + 2 * v1 + 2); *(&v4 + v1) = (dword_BAA220[v1] + (*(signed __int16 *)(a1 + 2 * v1) >> 1)) / *(signed __int16 *)(a1 + 2 * v1); *(&v5 + v1) = (dword_BAA224[v1] + (v2 >> 1)) / v2; v1 += 2; } while ( v1 < 64 ); result = 0; do { *(_WORD *)(a1 + 2 * dword_BA9EE0[result]) = *(&v4 + result); *(_WORD *)(a1 + 2 * dword_BA9EE4[result]) = *(&v5 + result); *(_WORD *)(a1 + 2 * dword_BA9EE8[result]) = *(&v6 + result); *(_WORD *)(a1 + 2 * dword_BA9EEC[result]) = v7[result]; result += 4; } while ( result < 64 ); return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; // BA9EE4: using guessed type int dword_BA9EE4[]; // BA9EE8: using guessed type int dword_BA9EE8[]; // BAA220: using guessed type int dword_BAA220[]; // 795840: using guessed type __int16 var_86[67]; //----- (00795900) -------------------------------------------------------- signed int __cdecl sub_795900(int a1, int a2) { signed int result; // eax int v3; // ebx int v4; // esi int v5; // ebx int v6; // esi int v7; // ebx result = 0; do { v3 = *(signed __int16 *)(a1 + 2 * result + 2); *(_WORD *)(a1 + 2 * result) = (*(signed __int16 *)(a1 + 2 * result) * *(signed __int16 *)(a2 + 2 * result) + 0x4000) >> 15; v4 = (v3 * *(signed __int16 *)(a2 + 2 * result + 2) + 0x4000) >> 15; v5 = *(signed __int16 *)(a1 + 2 * result + 4); *(_WORD *)(a1 + 2 * result + 2) = v4; v6 = (v5 * *(signed __int16 *)(a2 + 2 * result + 4) + 0x4000) >> 15; v7 = *(signed __int16 *)(a1 + 2 * result + 6); *(_WORD *)(a1 + 2 * result + 4) = v6; *(_WORD *)(a1 + 2 * result + 6) = (v7 * *(signed __int16 *)(a2 + 2 * result + 6) + 0x4000) >> 15; result += 4; } while ( result < 64 ); return result; } //----- (00795CA0) -------------------------------------------------------- int __cdecl sub_795CA0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7C5D50)(a1, a2); } //----- (00795CC0) -------------------------------------------------------- int __cdecl sub_795CC0(int a1) { return ((int (__cdecl *)(int))loc_7C6030)(a1); } //----- (00795CE0) -------------------------------------------------------- int __cdecl sub_795CE0(_WORD *a1) { signed int v1; // eax double v2; // st7 double v3; // st6 double v4; // st5 double v5; // kr00_8 int v6; // ecx unsigned int v7; // esi double v8; // kr08_8 int v9; // ecx unsigned int v10; // esi double v11; // kr10_8 int v12; // ecx unsigned int v13; // esi double v14; // kr18_8 int v15; // ecx unsigned int v16; // esi int v17; // ecx signed int v18; // eax int result; // eax __int16 v20; // [esp+0h] [ebp-BCh] __int16 v21; // [esp+2h] [ebp-BAh] __int16 v22; // [esp+4h] [ebp-B8h] __int16 v23[61]; // [esp+6h] [ebp-B6h] unsigned int v24; // [esp+80h] [ebp-3Ch] double v25; // [esp+98h] [ebp-24h] int v26; // [esp+A0h] [ebp-1Ch] v1 = 0; v2 = dbl_BAA550; v3 = dbl_BAA548; v4 = dbl_BAA540; do { v26 = (signed __int16)a1[v1]; v25 = (double)v26 * dbl_BAA340[v1] * v3 * v4 + v2; v5 = v25; v6 = (HIDWORD(v5) >> 20) & 0x7FF; if ( v6 <= 1022 ) { v7 = 0; } else { v7 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v6); if ( v5 < 0.0 ) v7 = -v7; } v24 = v7; *(&v20 + dword_BA9EE0[v1]) = v7; v26 = (signed __int16)a1[v1 + 1]; v25 = (double)v26 * dbl_BAA348[v1] * v3 * v4 + v2; v8 = v25; v9 = (HIDWORD(v8) >> 20) & 0x7FF; if ( v9 <= 1022 ) { v10 = 0; } else { v10 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v9); if ( v8 < 0.0 ) v10 = -v10; } v24 = v10; *(&v20 + dword_BA9EE4[v1]) = v10; v26 = (signed __int16)a1[v1 + 2]; v25 = (double)v26 * dbl_BAA350[v1] * v3 * v4 + v2; v11 = v25; v12 = (HIDWORD(v11) >> 20) & 0x7FF; if ( v12 <= 1022 ) { v13 = 0; } else { v13 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v12); if ( v11 < 0.0 ) v13 = -v13; } v24 = v13; *(&v20 + dword_BA9EE8[v1]) = v13; v26 = (signed __int16)a1[v1 + 3]; v25 = (double)v26 * dbl_BAA358[v1] * v3 * v4 + v2; v14 = v25; v15 = (HIDWORD(v14) >> 20) & 0x7FF; if ( v15 <= 1022 ) { v16 = 0; } else { v16 = ((unsigned int)(*(_QWORD *)&v25 >> 21) | 0x80000000) >> (30 - v15); if ( v14 < 0.0 ) v16 = -v16; } v24 = v16; v17 = dword_BA9EEC[v1]; v1 += 4; *(&v20 + v17) = v16; } while ( v1 < 64 ); v18 = 0; do { a1[v18] = *(&v20 + v18); a1[v18 + 1] = *(&v21 + v18); a1[v18 + 2] = *(&v22 + v18); a1[v18 + 3] = v23[v18]; v18 += 4; } while ( v18 < 64 ); result = 0; a1[64] = 0; a1[65] = 0; a1[66] = 0; a1[67] = 0; a1[68] = 0; a1[69] = 0; a1[70] = 0; a1[71] = 0; a1[72] = 0; a1[73] = 0; a1[74] = 0; a1[75] = 0; a1[76] = 0; a1[77] = 0; a1[78] = 0; a1[79] = 0; return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; // BA9EE4: using guessed type int dword_BA9EE4[]; // BA9EE8: using guessed type int dword_BA9EE8[]; // BAA340: using guessed type double dbl_BAA340[]; // BAA348: using guessed type double dbl_BAA348[]; // BAA350: using guessed type double dbl_BAA350[]; // BAA540: using guessed type double dbl_BAA540; // BAA548: using guessed type double dbl_BAA548; // BAA550: using guessed type double dbl_BAA550; // 795CE0: using guessed type __int16 var_B6[61]; //----- (00796450) -------------------------------------------------------- int __cdecl sub_796450(int a1) { return ((int (__cdecl *)(int))loc_7C65E0)(a1); } //----- (00796C50) -------------------------------------------------------- signed int __cdecl sub_796C50(int a1) { signed int v1; // ecx int v2; // esi __int16 v3; // ax int v4; // esi __int16 v5; // ax int v6; // esi signed int result; // eax __int16 v8; // [esp+0h] [ebp-8Ch] __int16 v9; // [esp+2h] [ebp-8Ah] __int16 v10; // [esp+4h] [ebp-88h] __int16 v11[67]; // [esp+6h] [ebp-86h] v1 = 0; do { v2 = *(signed __int16 *)(a1 + 2 * v1 + 2); *(&v8 + v1) = 0x8000 / *(signed __int16 *)(a1 + 2 * v1); v3 = 0x8000 / v2; v4 = *(signed __int16 *)(a1 + 2 * v1 + 4); *(&v9 + v1) = v3; v5 = 0x8000 / v4; v6 = *(signed __int16 *)(a1 + 2 * v1 + 6); *(&v10 + v1) = v5; v11[v1] = 0x8000 / v6; v1 += 4; } while ( v1 < 64 ); result = 0; do { *(_WORD *)(a1 + 2 * dword_BA9EE0[result]) = *(&v8 + result); *(_WORD *)(a1 + 2 * dword_BA9EE4[result]) = *(&v9 + result); *(_WORD *)(a1 + 2 * dword_BA9EE8[result]) = *(&v10 + result); *(_WORD *)(a1 + 2 * dword_BA9EEC[result]) = v11[result]; result += 4; } while ( result < 64 ); return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; // BA9EE4: using guessed type int dword_BA9EE4[]; // BA9EE8: using guessed type int dword_BA9EE8[]; // 796C50: using guessed type __int16 var_86[67]; //----- (00796D10) -------------------------------------------------------- signed int __cdecl sub_796D10(int a1, int a2) { signed int result; // eax int v3; // ebx int v4; // esi int v5; // ebx int v6; // esi int v7; // ebx result = 0; do { v3 = *(signed __int16 *)(a1 + 2 * result + 2); *(_WORD *)(a1 + 2 * result) = (*(signed __int16 *)(a1 + 2 * result) * *(unsigned __int16 *)(a2 + 2 * result) + 0x4000) >> 15; v4 = (v3 * *(unsigned __int16 *)(a2 + 2 * result + 2) + 0x4000) >> 15; v5 = *(signed __int16 *)(a1 + 2 * result + 4); *(_WORD *)(a1 + 2 * result + 2) = v4; v6 = (v5 * *(unsigned __int16 *)(a2 + 2 * result + 4) + 0x4000) >> 15; v7 = *(signed __int16 *)(a1 + 2 * result + 6); *(_WORD *)(a1 + 2 * result + 4) = v6; *(_WORD *)(a1 + 2 * result + 6) = (v7 * *(unsigned __int16 *)(a2 + 2 * result + 6) + 0x4000) >> 15; result += 4; } while ( result < 64 ); return result; } //----- (00796DA0) -------------------------------------------------------- int __cdecl sub_796DA0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7C6D40)(a1, a2); } //----- (00796DC0) -------------------------------------------------------- int __cdecl sub_796DC0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7C6F40)(a1, a2); } //----- (00796DE0) -------------------------------------------------------- int __cdecl sub_796DE0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7C7140)(a1, a2); } //----- (00797150) -------------------------------------------------------- int __cdecl sub_797150(int a1) { return ((int (__cdecl *)(int))loc_7C7650)(a1); } //----- (00797170) -------------------------------------------------------- int __cdecl sub_797170(int a1) { return ((int (__cdecl *)(int))loc_7C7E30)(a1); } //----- (00797190) -------------------------------------------------------- int __cdecl sub_797190(int a1) { return ((int (__cdecl *)(int))loc_7C8590)(a1); } //----- (007971B0) -------------------------------------------------------- signed int __cdecl sub_7971B0(int a1) { int v1; // ebp DWORD NumberOfBytesWritten; // [esp+10h] [ebp-Ch] v1 = 0; if ( !sub_791A60( *(HANDLE *)(a1 + 60), (LPCVOID)(a1 + 64), *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20), &NumberOfBytesWritten) || NumberOfBytesWritten != 4096 ) { return -23; } *(_DWORD *)(a1 + 16) = *(_DWORD *)(a1 + 20); return v1; } //----- (00797210) -------------------------------------------------------- signed int __cdecl sub_797210(int *a1, int a2, signed int a3) { signed int v3; // ecx signed int v4; // edx int v5; // ebx signed int v6; // edi int v7; // ebx _BYTE *v8; // edx _BYTE *v9; // edx int v11; // ebp int v12; // edx int v13; // eax int v14; // [esp+4h] [ebp-18h] v3 = a3; v14 = 0; v4 = a1[3]; if ( a3 <= v4 ) { v5 = *a1; v11 = a1[1]; } else { v5 = *a1; v6 = a3; while ( 1 ) { ++a1[7]; v6 -= v4; v7 = ((1 << v4) - 1) & (a2 >> v6) | v5; v8 = (_BYTE *)a1[4]; if ( (unsigned int)v8 >= a1[6] ) return -28; a1[4] = (int)(v8 + 1); *v8 = v7; if ( v7 == 255 ) { v9 = (_BYTE *)a1[4]; if ( (unsigned int)v9 >= a1[6] ) return -28; a1[4] = (int)(v9 + 1); *v9 = 0; ++a1[7]; } v5 = 0; v11 = 0; v4 = 8; if ( v6 <= 8 ) break; a1[3] = 8; *a1 = 0; a1[1] = 0; } v3 = v6; } v12 = v4 - v3; a1[3] = v12; v13 = (((1 << v3) - 1) & a2) << v12; *a1 = v13 | v5; a1[1] = (v13 >> 31) | v11; return v14; } //----- (007972F0) -------------------------------------------------------- signed int __cdecl sub_7972F0(int a1, int a2, signed int a3) { int v3; // eax signed int v4; // ecx signed int v5; // edi signed int v6; // edx signed int v7; // ebp signed int v8; // esi _BYTE *v9; // edi signed int v10; // eax int v11; // edx int v12; // ebp int v13; // esi int v14; // edx int v15; // eax _BYTE *v17; // edx signed int v18; // eax v3 = a2; v4 = a3; v5 = 0; v6 = *(_DWORD *)(a1 + 12); if ( a3 > v6 ) { v7 = a3; v8 = 0; while ( 1 ) { v9 = *(_BYTE **)(a1 + 16); if ( (unsigned int)v9 >= *(_DWORD *)(a1 + 24) ) { v10 = sub_7971B0(a1); v8 = v10; if ( v10 ) return v10; v6 = *(_DWORD *)(a1 + 12); v9 = *(_BYTE **)(a1 + 16); } v7 -= v6; v11 = (unsigned __int8)(*(_BYTE *)a1 | ((1 << v6) - 1) & (a2 >> v7)); *(_DWORD *)(a1 + 16) = v9 + 1; *v9 = v11; ++*(_DWORD *)(a1 + 28); if ( v11 == 255 ) { v17 = *(_BYTE **)(a1 + 16); if ( (unsigned int)v17 >= *(_DWORD *)(a1 + 24) ) { v18 = sub_7971B0(a1); v8 = v18; if ( v18 ) return v18; v17 = *(_BYTE **)(a1 + 16); } *(_DWORD *)(a1 + 16) = v17 + 1; *v17 = 0; ++*(_DWORD *)(a1 + 28); } v6 = 8; if ( v7 <= 8 ) { v4 = v7; v5 = v8; v3 = a2; v12 = 0; v13 = 0; goto LABEL_10; } *(_DWORD *)(a1 + 12) = 8; *(_DWORD *)a1 = 0; *(_DWORD *)(a1 + 4) = 0; } } v12 = *(_DWORD *)a1; v13 = *(_DWORD *)(a1 + 4); LABEL_10: v14 = v6 - v4; *(_DWORD *)(a1 + 12) = v14; v15 = (((1 << v4) - 1) & v3) << v14; *(_DWORD *)a1 = v15 | v12; *(_DWORD *)(a1 + 4) = (v15 >> 31) | v13; return v5; } //----- (00797400) -------------------------------------------------------- int __cdecl sub_797400(int a1, int a2, int a3) { signed int v3; // eax int v4; // ebx int v5; // eax signed int v6; // edx int v7; // ecx int v8; // ecx int v9; // ecx int v10; // esi int v11; // ecx int v12; // ecx signed int v13; // edx signed int v14; // eax signed int v15; // esi signed int v16; // esi signed int v17; // esi int v18; // edx int v19; // eax int v20; // ebx int v21; // eax signed int v22; // ecx int v23; // edx int v24; // edx int v25; // edx int v26; // edx int v27; // ecx int v28; // edx signed int v29; // ecx signed int i; // eax char v31; // dl signed int v32; // ebp char *v34; // edx char v35; // al signed int v36; // edi int result; // eax signed int v38; // edx char v39; // cl int v40; // [esp+10h] [ebp-C5Ch] int v41; // [esp+14h] [ebp-C58h] int v42[254]; // [esp+18h] [ebp-C54h] int v43; // [esp+410h] [ebp-85Ch] int v44; // [esp+420h] [ebp-84Ch] int v45; // [esp+424h] [ebp-848h] int v46[258]; // [esp+428h] [ebp-844h] int v47; // [esp+830h] [ebp-43Ch] int v48; // [esp+834h] [ebp-438h] int v49; // [esp+838h] [ebp-434h] int v50; // [esp+83Ch] [ebp-430h] int v51; // [esp+840h] [ebp-42Ch] int v52[251]; // [esp+844h] [ebp-428h] char v53; // [esp+C33h] [ebp-39h] _BYTE v54[56]; // [esp+C34h] [ebp-38h] char v55; // [esp+C43h] [ebp-29h] dword_BA2968(&v40, a1, 1028); dword_BA2964(&v44, 1028); dword_BA2964(v54, 33); v3 = 0; do { *(&v47 + v3) = -1; *(&v48 + v3) = -1; *(&v49 + v3) = -1; *(&v50 + v3) = -1; *(&v51 + v3) = -1; v52[v3] = -1; v3 += 6; } while ( v3 < 251 ); *(&v47 + v3) = -1; *(&v48 + v3) = -1; *(&v49 + v3) = -1; *(&v50 + v3) = -1; *(&v51 + v3) = -1; v43 = 1; while ( 1 ) { v4 = -1; v5 = 1000000000; v6 = 0; do { v7 = *(&v40 + v6); if ( v7 && v7 <= v5 ) { v5 = *(&v40 + v6); v4 = v6; } v8 = *(&v41 + v6); if ( v8 && v8 <= v5 ) { v5 = *(&v41 + v6); v4 = v6 + 1; } v9 = v42[v6]; if ( v9 && v9 <= v5 ) { v5 = v42[v6]; v4 = v6 + 2; } v6 += 3; } while ( v6 <= 253 ); v10 = *(&v40 + v6); if ( v10 && v10 <= v5 ) { v5 = *(&v40 + v6); v4 = v6; } v11 = *(&v41 + v6); if ( v11 && v11 <= v5 ) v4 = v6 + 1; v12 = -1; v13 = 1000000000; v14 = 0; do { v15 = *(&v40 + v14); if ( v15 && v15 <= v13 && v14 != v4 ) { v13 = *(&v40 + v14); v12 = v14; } v16 = *(&v41 + v14); if ( v16 && v16 <= v13 && v14 + 1 != v4 ) { v13 = *(&v41 + v14); v12 = v14 + 1; } v14 += 2; } while ( v14 <= 254 ); v17 = *(&v40 + v14); if ( v17 && v17 <= v13 && v14 != v4 ) v12 = v14; if ( v12 == -1 ) break; v18 = 4 * v4; v19 = 4 * v12; *(&v40 + v4) += *(&v40 + v12); *(&v40 + v12) = 0; while ( 1 ) { ++*(int *)((char *)&v44 + v18); v20 = *(int *)((char *)&v47 + v18); if ( v20 == -1 ) break; v18 = 4 * v20; } *(int *)((char *)&v47 + v18) = v12; while ( 1 ) { ++*(int *)((char *)&v44 + v19); v21 = *(int *)((char *)&v47 + v19); if ( v21 == -1 ) break; v19 = 4 * v21; } } v22 = 0; do { v23 = *(&v44 + v22); if ( v23 ) ++v54[v23]; v24 = *(&v45 + v22); if ( v24 ) ++v54[v24]; v25 = v46[v22]; if ( v25 ) ++v54[v25]; v22 += 3; } while ( v22 <= 253 ); v26 = 2 * v22; v27 = *(&v44 + v22); if ( v27 ) ++v54[v27]; v28 = *(int *)((char *)&v45 + 2 * v26); if ( v28 ) ++v54[v28]; v29 = 32; for ( i = 31; ; --i ) { while ( 1 ) { v31 = v54[v29]; if ( !v31 ) break; v32 = i; while ( !*(&v53 + v32--) ) ; v54[v29] = v31 - 2; ++v54[i]; v54[v32 + 1] += 2; --v54[v32]; } v29 = i; if ( i == 15 ) break; } v34 = &v55; v35 = v55; if ( !v55 ) { do { v34 = &v54[--v29]; v35 = v54[v29]; } while ( !v54[v29] ); } *v34 = v35 - 1; dword_BA2968(a2, v54, 16); v36 = 1; result = 0; do { v38 = 0; v39 = 1; do { if ( v36 == *(&v44 + v38) ) *(_BYTE *)(result++ + a3) = v38; if ( v36 == *(&v45 + v38) ) *(_BYTE *)(result++ + a3) = v39; v39 += 2; v38 += 2; } while ( v38 <= 255 ); ++v36; } while ( v36 <= 32 ); return result; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 797400: using guessed type int var_428[251]; // 797400: using guessed type int var_C54[254]; // 797400: using guessed type int var_844[258]; //----- (007977E0) -------------------------------------------------------- signed int __cdecl sub_7977E0(int *a1, int a2, int a3, _WORD *a4, signed __int16 *a5) { int *v5; // ebx int v6; // ecx int v7; // edi signed int v8; // esi signed int result; // eax signed int v10; // edx signed int v11; // esi int v12; // ecx int v13; // ebp int v14; // esi signed int v15; // ebx int v16; // ecx int v17; // edi signed int v18; // esi signed int v19; // edx signed int v20; // esi int v21; // ebp int *v22; // esi signed int v23; // ebx signed int v24; // [esp+14h] [ebp-18h] signed int v25; // [esp+14h] [ebp-18h] signed int v26; // [esp+18h] [ebp-14h] signed int v27; // [esp+18h] [ebp-14h] v5 = a1; if ( a1[15] ) { v6 = *a5; v7 = v6 - (signed __int16)*a4; *a4 = v6; if ( v7 < 0 ) { if ( v7 <= -256 ) v8 = byte_BAA560[-v7 >> 8] + 8; else v8 = byte_BAA560[-v7]; --v7; } else if ( v7 >= 256 ) { v8 = byte_BAA560[v7 >> 8] + 8; } else { v8 = byte_BAA560[v7]; } result = sub_7972F0((int)a1, *(unsigned __int16 *)(a2 + 2 * v8 + 1032), *(_DWORD *)(a2 + 4 * v8 + 8)); if ( result ) return result; result = sub_7972F0((int)a1, v7, v8); if ( result ) return result; v10 = 0; v11 = 4; while ( 1 ) { v12 = *(int *)((char *)dword_BA9EE0 + v11); v13 = a5[v12]; v11 += 4; if ( a5[v12] ) { if ( v10 > 15 ) { v26 = v11; v14 = (int)v5; v15 = v10; while ( 1 ) { result = sub_7972F0(v14, *(unsigned __int16 *)(a3 + 1512), *(_DWORD *)(a3 + 968)); if ( result ) return result; v15 -= 16; if ( v15 <= 15 ) { v10 = v15; v5 = (int *)v14; v11 = v26; break; } } } if ( v13 < 0 ) { if ( v13 <= -256 ) v24 = byte_BAA560[-v13 >> 8] + 8; else v24 = byte_BAA560[-v13]; --v13; } else if ( v13 >= 256 ) { v24 = byte_BAA560[v13 >> 8] + 8; } else { v24 = byte_BAA560[v13]; } result = sub_7972F0( (int)v5, *(unsigned __int16 *)(a3 + 2 * (v24 + 16 * v10) + 1032), *(_DWORD *)(a3 + 4 * (v24 + 16 * v10) + 8)); if ( result ) return result; result = sub_7972F0((int)v5, v13, v24); if ( result ) return result; v10 = 0; } else { ++v10; } if ( v11 >= 256 ) { if ( v10 > 0 ) result = sub_7972F0((int)v5, *(unsigned __int16 *)(a3 + 1032), *(_DWORD *)(a3 + 8)); return result; } } } v16 = *a5; v17 = v16 - (signed __int16)*a4; *a4 = v16; if ( v17 < 0 ) { if ( v17 <= -256 ) v18 = byte_BAA560[-v17 >> 8] + 8; else v18 = byte_BAA560[-v17]; --v17; } else if ( v17 >= 256 ) { v18 = byte_BAA560[v17 >> 8] + 8; } else { v18 = byte_BAA560[v17]; } result = sub_797210(a1, *(unsigned __int16 *)(a2 + 2 * v18 + 1032), *(_DWORD *)(a2 + 4 * v18 + 8)); if ( result ) return result; result = sub_797210(a1, v17, v18); if ( result ) return result; v19 = 0; v20 = 4; while ( 1 ) { v21 = a5[*(int *)((char *)dword_BA9EE0 + v20)]; v20 += 4; if ( v21 ) break; ++v19; LABEL_56: if ( v20 >= 256 ) { if ( v19 > 0 ) result = sub_797210(v5, *(unsigned __int16 *)(a3 + 1032), *(_DWORD *)(a3 + 8)); return result; } } if ( v19 > 15 ) { v27 = v20; v22 = v5; v23 = v19; do { result = sub_797210(v22, *(unsigned __int16 *)(a3 + 1512), *(_DWORD *)(a3 + 968)); if ( result ) return result; v23 -= 16; } while ( v23 > 15 ); v19 = v23; v5 = v22; v20 = v27; } if ( v21 < 0 ) { if ( v21 <= -256 ) v25 = byte_BAA560[-v21 >> 8] + 8; else v25 = byte_BAA560[-v21]; --v21; } else if ( v21 >= 256 ) { v25 = byte_BAA560[v21 >> 8] + 8; } else { v25 = byte_BAA560[v21]; } result = sub_797210( v5, *(unsigned __int16 *)(a3 + 2 * (v25 + 16 * v19) + 1032), *(_DWORD *)(a3 + 4 * (v25 + 16 * v19) + 8)); if ( !result ) { result = sub_797210(v5, v21, v25); if ( !result ) { v19 = 0; goto LABEL_56; } } return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; //----- (00797F80) -------------------------------------------------------- int __cdecl sub_797F80(int a1, int a2, int a3, int a4, int a5) { return ((int (__cdecl *)(int, int, int, int, int))loc_7C93D0)(a1, a2, a3, a4, a5); } //----- (00797FC0) -------------------------------------------------------- int __cdecl sub_797FC0(int a1, _DWORD *a2, signed __int16 *a3, int a4, char a5) { int result; // eax int v6; // edi int v7; // ecx result = (int)a2; if ( !a4 ) { v6 = *a3 >> a5; v7 = v6 - *a2; *a2 = (signed __int16)v6; result = sub_798380(v7); ++*(_DWORD *)(a1 + 4 * result); } return result; } //----- (00798000) -------------------------------------------------------- signed int __cdecl sub_798000(int *a1, int a2, _DWORD *a3, signed __int16 *a4, int a5, char a6) { int v6; // edx int v7; // esi signed int v8; // ebp int v9; // edx signed int v10; // ecx signed int result; // eax int v12; // edx if ( a5 ) { v12 = *a4 >> a6; if ( a1[15] ) result = sub_7972F0((int)a1, v12, 1); else result = sub_797210(a1, v12, 1); } else { v6 = *a4 >> a6; v7 = v6 - *a3; *a3 = (signed __int16)v6; if ( v7 < 0 ) { if ( v7 <= -256 ) v8 = byte_BAA560[-v7 >> 8] + 8; else v8 = byte_BAA560[-v7]; --v7; } else if ( v7 >= 256 ) { v8 = byte_BAA560[v7 >> 8] + 8; } else { v8 = byte_BAA560[v7]; } v9 = *(unsigned __int16 *)(a2 + 2 * v8 + 1032); v10 = *(_DWORD *)(a2 + 4 * v8 + 8); if ( a1[15] ) result = sub_7972F0((int)a1, v9, v10); else result = sub_797210(a1, v9, v10); if ( !result ) { if ( a1[15] ) result = sub_7972F0((int)a1, v7, v8); else result = sub_797210(a1, v7, v8); } } return result; } //----- (00798140) -------------------------------------------------------- signed int __cdecl sub_798140(int a1, _DWORD *a2) { signed int result; // eax result = *(_DWORD *)(a1 + 40); if ( result ) { if ( result == 1 ) { ++*a2; } else { if ( result > 0x7FFF ) { ++a2[224]; result = *(_DWORD *)(a1 + 40) - 0x7FFF; *(_DWORD *)(a1 + 40) = result; } result = 16 * sub_7983B0(result); ++a2[result]; } *(_DWORD *)(a1 + 40) = 0; } return result; } //----- (007981A0) -------------------------------------------------------- signed int __cdecl sub_7981A0(int *a1, int a2) { signed int result; // eax int v3; // edx signed int v4; // ecx int v5; // edx int v6; // esi int v7; // edx signed int v8; // ecx int v9; // ecx int v10; // edx signed int v11; // ecx result = a1[10]; if ( !result ) return result; if ( result == 1 ) { v10 = *(unsigned __int16 *)(a2 + 1032); v11 = *(_DWORD *)(a2 + 8); if ( a1[15] ) result = sub_7972F0((int)a1, v10, v11); else result = sub_797210(a1, v10, v11); if ( !result ) goto LABEL_21; } else { if ( result > 0x7FFF ) { v3 = *(unsigned __int16 *)(a2 + 1480); v4 = *(_DWORD *)(a2 + 904); if ( a1[15] ) result = sub_7972F0((int)a1, v3, v4); else result = sub_797210(a1, v3, v4); if ( result ) return result; v5 = a1[10]; result = a1[15] ? sub_7972F0((int)a1, v5, 14) : sub_797210(a1, v5, 14); if ( result ) return result; result = a1[10] - 0x7FFF; a1[10] = result; } v6 = sub_7983B0(result); v7 = *(unsigned __int16 *)(a2 + 32 * v6 + 1032); v8 = *(_DWORD *)(a2 + (v6 << 6) + 8); if ( a1[15] ) result = sub_7972F0((int)a1, v7, v8); else result = sub_797210(a1, v7, v8); if ( !result ) { v9 = a1[10]; result = a1[15] ? sub_7972F0((int)a1, v9, v6) : sub_797210(a1, v9, v6); if ( !result ) { LABEL_21: a1[10] = 0; return result; } } } return result; } //----- (00798320) -------------------------------------------------------- signed int __cdecl sub_798320(int *a1, int a2, _DWORD *a3) { int v3; // eax signed int v4; // esi signed int result; // eax v3 = *(unsigned __int16 *)(a2 + 1512); v4 = *(_DWORD *)(a2 + 968); if ( a1[15] ) result = sub_7972F0((int)a1, v3, v4); else result = sub_797210(a1, v3, v4); if ( !result ) *a3 -= 16; return result; } //----- (00798380) -------------------------------------------------------- int __cdecl sub_798380(__int16 a1) { signed int v1; // eax int result; // eax v1 = abs(a1); if ( v1 >= 256 ) result = byte_BAA560[v1 >> 8] + 8; else result = byte_BAA560[v1]; return result; } //----- (007983B0) -------------------------------------------------------- int __cdecl sub_7983B0(signed int a1) { int result; // eax if ( a1 >= 256 ) result = byte_BAA660[a1 >> 8] + 8; else result = byte_BAA660[a1]; return result; } //----- (007983E0) -------------------------------------------------------- signed int __cdecl sub_7983E0(int *a1, unsigned __int8 *a2, int *a3) { unsigned __int8 *v3; // ebx signed int result; // eax int v5; // ecx v3 = a2; result = (signed int)a3; if ( *a3 && *a3 > 0 ) { do { if ( a1[15] ) result = sub_7972F0((int)a1, *v3, 1); else result = sub_797210(a1, *v3, 1); if ( result ) break; ++v3; v5 = *a3 - 1; *a3 = v5; } while ( v5 > 0 ); } return result; } //----- (00798450) -------------------------------------------------------- signed int __cdecl sub_798450(int a1, signed int a2, int a3, int a4, char a5, _DWORD *a6) { signed int result; // eax signed int v7; // esi int v8; // ebx int v9; // edi int v10; // edi int v11; // eax int i; // edi result = a2; v7 = 0; if ( a3 <= a4 ) { v8 = a3; do { result = dword_BA9EE0[v8]; v9 = *(signed __int16 *)(a2 + 2 * result); ++v8; if ( *(_WORD *)(a2 + 2 * result) ) { if ( v9 < 0 ) v9 = -v9; v10 = v9 >> a5; if ( v10 ) { sub_798140(a1, a6); if ( v7 > 15 ) { if ( v7 - 15 < 96 ) { v11 = a6[240]; } else { v11 = a6[240]; do { v11 += 5; v7 -= 80; } while ( v7 >= 111 ); } do { ++v11; v7 -= 16; } while ( v7 > 15 ); a6[240] = v11; } result = 1; for ( i = v10 >> 1; i; i >>= 1 ) ++result; ++a6[16 * v7 + result]; v7 = 0; } else { ++v7; } } else { ++v7; } } while ( v8 <= a4 ); if ( v7 > 0 ) { result = *(_DWORD *)(a1 + 40) + 1; *(_DWORD *)(a1 + 40) = result; if ( result == 0x7FFF ) result = sub_798140(a1, a6); } } return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; //----- (00798590) -------------------------------------------------------- int *__cdecl sub_798590(int a1, int a2, int a3, int a4, char a5, int a6, int *a7, _DWORD *a8) { int v8; // ecx int v9; // esi int v10; // eax int v11; // ebx int v12; // ebx signed int v13; // ebx int v14; // edx int v15; // eax int v16; // ebp int v17; // ecx int v18; // eax int v19; // ebx int *result; // eax int v21[64]; // [esp+8h] [ebp-124h] int v22; // [esp+108h] [ebp-24h] int v23; // [esp+10Ch] [ebp-20h] int v24; // [esp+110h] [ebp-1Ch] int v25; // [esp+114h] [ebp-18h] v8 = *a7; v9 = 0; v10 = a3; if ( a3 <= a4 ) { v22 = *a7; do { v11 = *(signed __int16 *)(a2 + 2 * dword_BA9EE0[v10]); if ( v11 < 0 ) v11 = -v11; v12 = v11 >> a5; v21[v10] = v12; if ( v12 == 1 ) v9 = v10; ++v10; } while ( v10 <= a4 ); v8 = v22; } v13 = 0; v14 = 0; v15 = a6 + v8; if ( a3 <= a4 ) { v25 = a3; v23 = v9; v22 = v8; do { v24 = v21[v25]; if ( v24 ) { if ( v13 > 15 ) { v16 = v23; v17 = v22; while ( v25 <= v16 ) { sub_798140(a1, a8); v17 = 0; if ( v13 - 15 < 96 ) { v18 = a8[240]; } else { v18 = a8[240]; do { v18 += 5; v13 -= 80; } while ( v13 >= 111 ); } do { ++v18; v13 -= 16; } while ( v13 > 15 ); a8[240] = v18; v15 = a6; v14 = 0; if ( v13 <= 15 ) { v22 = 0; goto LABEL_23; } } v22 = v17; } LABEL_23: if ( v24 <= 1 ) { sub_798140(a1, a8); v22 = 0; v15 = a6; ++a8[16 * v13 + 1]; v14 = 0; v13 = 0; } else { *(_BYTE *)(v14++ + v15) = v24 & 1; } } else { ++v13; } ++v25; } while ( v25 <= a4 ); v8 = v22; if ( v13 > 0 || v14 > 0 ) { v19 = *(_DWORD *)(a1 + 40) + 1; *(_DWORD *)(a1 + 40) = v19; v8 += v14; if ( v19 == 0x7FFF || v8 > dword_AB9300 - 63 ) { sub_798140(a1, a8); v8 = 0; } } } result = a7; *a7 = v8; return result; } // AB9300: using guessed type int dword_AB9300; // BA9EE0: using guessed type int dword_BA9EE0[]; // 798590: using guessed type int var_124[64]; //----- (00798800) -------------------------------------------------------- signed int __cdecl sub_798800(int *a1, int a2, int a3, int a4, int a5, char a6) { int *v6; // ebx int v7; // ecx int v8; // edi int v9; // ebp int v10; // esi signed int result; // eax int v12; // edx int v13; // edx int v14; // ebx int v15; // ebx int v16; // eax signed int v17; // edx int v18; // ebx int v19; // eax int v20; // edx signed int v21; // eax int i; // [esp+10h] [ebp-1Ch] int v23; // [esp+14h] [ebp-18h] int v24; // [esp+18h] [ebp-14h] v6 = a1; v7 = a2; v8 = a3; v9 = a4; v10 = a5; result = 0; v12 = 0; if ( a4 <= a5 ) { for ( i = 0; ; i = v12 ) { v13 = dword_BA9EE0[v9]; v14 = *(signed __int16 *)(v8 + 2 * v13); if ( *(_WORD *)(v8 + 2 * v13) ) { if ( v14 < 0 ) { v15 = -v14 >> a6; v24 = ~v15; } else { v15 = v14 >> a6; v24 = v15; } if ( v15 ) { sub_7981A0(a1, a2); v16 = i; if ( i > 15 ) { do { sub_798320(a1, a2, &i); v16 = i; } while ( i > 15 ); v10 = a5; v8 = a3; } v17 = 1; v18 = v15 >> 1; v23 = 1; if ( v18 ) { do { ++v17; v18 >>= 1; } while ( v18 ); v23 = v17; } v19 = v23 + 16 * v16; v20 = *(unsigned __int16 *)(a2 + 2 * v19 + 1032); v21 = *(_DWORD *)(a2 + 4 * v19 + 8); if ( a1[15] ) result = sub_7972F0((int)a1, v20, v21); else result = sub_797210(a1, v20, v21); if ( result ) return result; result = a1[15] ? sub_7972F0((int)a1, v24, v23) : sub_797210(a1, v24, v23); if ( result ) return result; result = 0; v12 = 0; } else { v12 = ++result; } } else { v12 = ++result; } if ( ++v9 > v10 ) break; } v7 = a2; v6 = a1; } if ( result > 0 ) { result = v6[10] + 1; v6[10] = result; if ( result == 0x7FFF ) { i = v12; result = sub_7981A0(v6, v7); } } return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; //----- (00798A00) -------------------------------------------------------- signed int __cdecl sub_798A00(int *a1, int a2, int a3, int a4, int a5, char a6, unsigned __int8 *a7, int *a8) { int *v8; // ebp int v9; // ebx int *v10; // esi int v11; // edi int v12; // eax int v13; // edi int v14; // esi int v15; // esi signed int v16; // ecx int v17; // edx signed int result; // eax unsigned __int8 *v19; // esi int v20; // edi int v21; // eax int v22; // eax signed int v23; // edx int v24; // eax int v25; // eax int v26; // [esp+10h] [ebp-134h] int v27[64]; // [esp+14h] [ebp-130h] int v28; // [esp+114h] [ebp-30h] int v29; // [esp+118h] [ebp-2Ch] int v30; // [esp+11Ch] [ebp-28h] int v31; // [esp+120h] [ebp-24h] int v32; // [esp+124h] [ebp-20h] int v33; // [esp+128h] [ebp-1Ch] unsigned __int8 *v34; // [esp+12Ch] [ebp-18h] v8 = a1; v9 = a4; v10 = a8; v11 = *a8; v26 = *a8; v32 = 0; v12 = a4; if ( a4 <= a5 ) { v30 = v11; v13 = v32; do { v14 = *(signed __int16 *)(a3 + 2 * dword_BA9EE0[v12]); if ( v14 < 0 ) v14 = -v14; v15 = v14 >> a6; v27[v12] = v15; if ( v15 == 1 ) v13 = v12; ++v12; } while ( v12 <= a5 ); v32 = v13; v11 = v30; v10 = a8; v8 = a1; } v16 = 0; v17 = 0; v28 = 0; v33 = 0; v34 = &a7[v11]; result = a5; if ( a4 <= a5 ) { v19 = v34; v20 = v33; while ( 1 ) { v21 = v27[v9]; if ( v21 ) { v29 = v20; if ( v16 > 15 && v9 <= v32 ) { v30 = v21; v31 = v9; do { sub_7981A0(v8, a2); sub_7983E0(v8, a7, &v26); v26 = 0; sub_798320(v8, a2, &v28); sub_7983E0(v8, v19, &v29); v19 = a7; v29 = 0; } while ( v28 > 15 ); v21 = v30; v9 = v31; v17 = 0; } if ( v21 <= 1 ) { sub_7981A0(v8, a2); sub_7983E0(v8, a7, &v26); v26 = 0; v22 = *(unsigned __int16 *)(a2 + 32 * v28 + 1034); v23 = *(_DWORD *)(a2 + (v28 << 6) + 12); if ( v8[15] ) result = sub_7972F0((int)v8, v22, v23); else result = sub_797210(v8, v22, v23); if ( result ) { v10 = a8; v11 = v26; goto LABEL_37; } v24 = *(signed __int16 *)(a3 + 2 * dword_BA9EE0[v9]) >= 0; if ( v8[15] ) result = sub_7972F0((int)v8, v24, 1); else result = sub_797210(v8, v24, 1); if ( result ) { v10 = a8; v11 = v26; goto LABEL_37; } sub_7983E0(v8, v19, &v29); v19 = a7; v17 = 0; v20 = 0; v16 = 0; v28 = 0; } else { v19[v17] = v21 & 1; v17 = v29 + 1; v20 = v29 + 1; v16 = v28; } } else { v28 = ++v16; } ++v9; result = a5; if ( v9 > a5 ) { v33 = v20; v10 = a8; v11 = v26; break; } } } if ( v16 > 0 || v17 > 0 ) { v25 = v8[10] + 1; v11 += v17; v8[10] = v25; if ( v25 == 0x7FFF ) { v29 = v33; v26 = v11; } else { result = dword_AB9300 - 63; if ( v11 <= dword_AB9300 - 63 ) goto LABEL_37; v29 = v33; v26 = v11; } sub_7981A0(v8, a2); result = sub_7983E0(v8, a7, &v26); v11 = 0; } LABEL_37: *v10 = v11; return result; } // AB9300: using guessed type int dword_AB9300; // BA9EE0: using guessed type int dword_BA9EE0[]; // 798A00: using guessed type int var_130[64]; //----- (00798DE0) -------------------------------------------------------- int __cdecl sub_798DE0(unsigned __int64 *a1, int a2) { unsigned __int64 v2; // rax int v3; // ecx v2 = *a1; v3 = *((_DWORD *)a1 + 3) - a2; *((_DWORD *)a1 + 3) = v3; return ((1 << a2) - 1) & (v2 >> v3); } //----- (00798E10) -------------------------------------------------------- int __cdecl sub_798E10(int a1, char a2) { return ((1 << a2) - 1) & (*(_QWORD *)a1 >> ((unsigned __int8)*(_DWORD *)(a1 + 12) - a2)); } //----- (00798E40) -------------------------------------------------------- signed int __cdecl sub_798E40(int a1, int a2) { int v2; // edx int v3; // edi unsigned __int8 *v4; // eax unsigned __int8 *v5; // edx int v6; // edi signed int v7; // eax int v8; // ecx int v9; // ecx int v10; // edi signed int result; // eax int v12; // eax int v13; // edx int v14; // eax if ( *(_DWORD *)(a1 + 12) >= 25 ) return 0; v2 = *(_DWORD *)(a1 + 12); while ( 1 ) { if ( *(_BYTE *)(a1 + 48) ) { v14 = v2; v13 = a2; goto LABEL_13; } v3 = *(_DWORD *)(a1 + 36); if ( v3 <= 0 ) { if ( !*(_DWORD *)(a1 + 60) ) return 0; result = sub_7C1A80(a1); if ( result ) return result; v3 = *(_DWORD *)(a1 + 36); } v4 = *(unsigned __int8 **)(a1 + 16); v5 = v4 + 1; v6 = v3 - 1; *(_DWORD *)(a1 + 16) = v4 + 1; v7 = *v4; v8 = *(_DWORD *)(a1 + 28); *(_DWORD *)(a1 + 36) = v6; v9 = v8 + 1; *(_DWORD *)(a1 + 28) = v9; if ( v7 == 255 ) break; LABEL_6: v10 = *(_QWORD *)a1 >> 24; *(_DWORD *)a1 = v7 | (*(_DWORD *)a1 << 8); v2 = *(_DWORD *)(a1 + 12) + 8; *(_DWORD *)(a1 + 4) = v10; *(_DWORD *)(a1 + 12) = v2; if ( v2 >= 25 ) return 0; } do { if ( v6 <= 0 ) { if ( !*(_DWORD *)(a1 + 60) ) return -21; result = sub_7C1A80(a1); if ( result ) return result; v6 = *(_DWORD *)(a1 + 36); v5 = *(unsigned __int8 **)(a1 + 16); v9 = *(_DWORD *)(a1 + 28); } v12 = *v5++; --v6; *(_DWORD *)(a1 + 16) = v5; ++v9; *(_DWORD *)(a1 + 36) = v6; *(_DWORD *)(a1 + 28) = v9; } while ( v12 == 255 ); if ( !v12 ) { v7 = 255; goto LABEL_6; } v13 = a2; *(_BYTE *)(a1 + 48) = v12; v14 = *(_DWORD *)(a1 + 12); LABEL_13: if ( v14 >= v13 ) return 0; return 100; } //----- (00798F80) -------------------------------------------------------- signed int __cdecl sub_798F80(int a1, int a2, _DWORD *a3, int a4) { signed int v4; // ebp int v5; // ebx int v6; // edx int v7; // ebx signed int result; // eax v4 = a4; if ( a4 <= *(_DWORD *)(a1 + 12) || (result = sub_798E40(a1, a4)) == 0 ) { v5 = sub_798DE0((unsigned __int64 *)a1, a4); while ( 1 ) { v6 = *(signed __int16 *)(a2 + 2 * v4 + 1578); if ( v6 & 0x8000 && v6 != -1 ) v6 = (unsigned __int16)v6; if ( v5 <= v6 ) break; v7 = 2 * v5; if ( *(_DWORD *)(a1 + 12) <= 0 ) { result = sub_798E40(a1, 1); if ( result ) return result; } v5 = sub_798DE0((unsigned __int64 *)a1, 1) | v7; ++v4; } if ( v4 <= 16 ) *a3 = *(unsigned __int16 *)(a2 + 2 * (v5 + *(unsigned __int16 *)(a2 + 2 * v4 + 1614) - *(unsigned __int16 *)(a2 + 2 * v4 + 1544)) + 1032); else *a3 = 0; result = 0; } return result; } //----- (00799070) -------------------------------------------------------- signed int __cdecl sub_799070(int a1, _DWORD *a2, int a3) { int v3; // eax int v4; // eax signed int result; // eax if ( *(_DWORD *)(a1 + 12) >= 8 ) goto LABEL_2; result = sub_798E40(a1, 0); if ( !result ) { if ( *(_DWORD *)(a1 + 12) < 8 ) { v4 = 1; goto LABEL_5; } LABEL_2: v3 = sub_798E10(a1, 8); if ( *(_WORD *)(a3 + 4 * v3 + 10) ) { *(_DWORD *)(a1 + 12) -= *(unsigned __int16 *)(a3 + 4 * v3 + 10); *a2 = *(unsigned __int16 *)(a3 + 4 * v3 + 8); return 0; } v4 = 9; LABEL_5: result = sub_798F80(a1, a3, a2, v4); if ( result ) return result; return 0; } return result; } //----- (007992F0) -------------------------------------------------------- int __cdecl sub_7992F0(int a1, int a2, int a3, int a4, int a5) { return ((int (__cdecl *)(int, int, int, int, int))loc_7CA760)(a1, a2, a3, a4, a5); } //----- (00799330) -------------------------------------------------------- int __cdecl sub_799330(int a1, int a2, int a3, int a4, int a5) { return ((int (__cdecl *)(int, int, int, int, int))loc_7CA000)(a1, a2, a3, a4, a5); } //----- (00799370) -------------------------------------------------------- int __cdecl sub_799370(int a1, int a2, int a3, int a4) { return ((int (__cdecl *)(int, int, int, int, _DWORD))loc_7C9B30)(a1, a2, a3, a4, 0); } //----- (00799540) -------------------------------------------------------- signed int __cdecl sub_799540(int a1, int a2, _WORD *a3, _WORD *a4, char a5) { signed int result; // eax int v6; // eax bool v7; // zf bool v8; // sf unsigned __int8 v9; // of int v10; // eax __int16 v11; // dx int v12; // eax int v13; // [esp+10h] [ebp-14h] v13 = 0; result = sub_799070(a1, &v13, a2); if ( result ) { if ( result >= 0 ) result = 0; } else { if ( !v13 ) { v12 = (signed __int16)*a4; LABEL_7: *a3 = v12 << a5; return 0; } v6 = v13 & 0xF; v9 = __OFSUB__(v6, *(_DWORD *)(a1 + 12)); v7 = v6 == *(_DWORD *)(a1 + 12); v8 = v6 - *(_DWORD *)(a1 + 12) < 0; v13 &= 0xFu; if ( (unsigned __int8)(v8 ^ v9) | v7 ) { LABEL_4: v10 = sub_798DE0((unsigned __int64 *)a1, v6); if ( !(v10 & (1 << (v13 - 1))) ) v10 += dword_BAA0C0[v13]; v11 = v10 + *a4; v12 = v11; *a4 = v11; goto LABEL_7; } result = sub_798E40(a1, v6); if ( !result ) { v6 = v13; goto LABEL_4; } if ( result >= 0 ) result = 0; } return result; } //----- (00799620) -------------------------------------------------------- signed int __cdecl sub_799620(int a1, _WORD *a2, char a3) { signed int v3; // ebx signed int result; // eax v3 = 1 << a3; if ( *(_DWORD *)(a1 + 12) <= 0 && (result = sub_798E40(a1, 1)) != 0 ) { if ( result >= 0 ) result = 0; } else { if ( sub_798DE0((unsigned __int64 *)a1, 1) ) *a2 |= v3; result = 0; } return result; } //----- (00799690) -------------------------------------------------------- signed int __cdecl sub_799690(int a1, int a2, int a3, int a4, int a5, char a6) { int v6; // ebx int v7; // ecx signed int result; // eax int v9; // edi int v10; // edx int v11; // ebx int v12; // eax signed int v13; // eax bool v14; // zf bool v15; // sf unsigned __int8 v16; // of int v17; // [esp+10h] [ebp-14h] v6 = a4; v7 = *(_DWORD *)(a1 + 40); if ( v7 > 0 ) { *(_DWORD *)(a1 + 40) = v7 - 1; return 0; } if ( a4 > a5 ) return 0; while ( 1 ) { result = sub_799070(a1, &v17, a3); if ( result ) break; v9 = v17 >> 4; v10 = v17 & 0xF; if ( v17 & 0xF ) { v17 &= 0xFu; v11 = v9 + v6; if ( v10 > *(_DWORD *)(a1 + 12) ) { result = sub_798E40(a1, v10); if ( result ) { if ( result >= 0 ) result = 0; return result; } v10 = v17; } v12 = sub_798DE0((unsigned __int64 *)a1, v10); if ( v12 & (1 << (v17 - 1)) ) *(_WORD *)(a2 + 2 * dword_BA9EE0[v11]) = v12 << a6; else *(_WORD *)(a2 + 2 * dword_BA9EE0[v11]) = (v12 + dword_BAA0C0[v17]) << a6; } else { if ( v9 != 15 ) { v13 = 1 << v9; if ( v9 ) { *(_DWORD *)(a1 + 40) = v13; v16 = __OFSUB__(v9, *(_DWORD *)(a1 + 12)); v14 = v9 == *(_DWORD *)(a1 + 12); v15 = v9 - *(_DWORD *)(a1 + 12) < 0; v17 = 0; if ( !((unsigned __int8)(v15 ^ v16) | v14) ) { result = sub_798E40(a1, v9); if ( result ) { if ( result >= 0 ) result = 0; return result; } } v13 = *(_DWORD *)(a1 + 40) + sub_798DE0((unsigned __int64 *)a1, v9); } *(_DWORD *)(a1 + 40) = v13 - 1; return 0; } v17 &= 0xFu; v11 = v6 + 15; } v6 = v11 + 1; if ( v6 > a5 ) return 0; } if ( result >= 0 ) result = 0; return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; //----- (00799840) -------------------------------------------------------- signed int __cdecl sub_799840(int a1, int a2, int a3, int a4, int a5, char a6) { int v6; // edi int v7; // esi int v8; // ebx signed int v9; // eax signed int result; // eax int v11; // ebp int v12; // edi int v13; // edx __int16 v14; // dx int v15; // ebx int v16; // eax __int16 v17; // ax int v18; // [esp+10h] [ebp-1Ch] int v19; // [esp+14h] [ebp-18h] int v20; // [esp+18h] [ebp-14h] v6 = a1; v7 = a4; v8 = a5; v19 = 1 << a6; v9 = *(_DWORD *)(a1 + 40); v20 = -1 << a6; if ( v9 || a4 > a5 ) goto LABEL_27; while ( 1 ) { result = sub_799070(v6, &v18, a3); if ( result ) { if ( result >= 0 ) result = 0; return result; } v11 = v18 >> 4; v18 &= 0xFu; if ( !v18 ) break; if ( *(_DWORD *)(v6 + 12) <= 0 ) { result = sub_798E40(v6, 1); if ( result ) { if ( result >= 0 ) result = 0; return result; } } if ( sub_798DE0((unsigned __int64 *)v6, 1) ) v18 = v19; else v18 = v20; while ( 1 ) { LABEL_13: v12 = dword_BA9EE0[v7]; if ( *(_WORD *)(a2 + 2 * v12) ) { if ( *(_DWORD *)(a1 + 12) <= 0 ) { result = sub_798E40(a1, 1); if ( result ) { if ( result >= 0 ) result = 0; return result; } } if ( sub_798DE0((unsigned __int64 *)a1, 1) ) { v13 = *(signed __int16 *)(a2 + 2 * v12); if ( !(v19 & v13) ) { if ( v13 < 0 ) v14 = v20 + v13; else v14 = v19 + v13; *(_WORD *)(a2 + 2 * v12) = v14; } } goto LABEL_21; } if ( --v11 < 0 ) break; LABEL_21: if ( ++v7 > a5 ) { v6 = a1; goto LABEL_23; } } v6 = a1; LABEL_23: if ( v18 ) *(_WORD *)(a2 + 2 * dword_BA9EE0[v7]) = v18; if ( ++v7 > a5 ) { v8 = a5; v9 = *(_DWORD *)(v6 + 40); goto LABEL_27; } } if ( v11 == 15 ) goto LABEL_13; v8 = a5; v9 = 1 << v11; *(_DWORD *)(v6 + 40) = 1 << v11; if ( !v11 ) { LABEL_27: if ( v9 > 0 ) { if ( v7 <= v8 ) { while ( 1 ) { v15 = dword_BA9EE0[v7]; if ( *(_WORD *)(a2 + 2 * v15) ) { if ( *(_DWORD *)(v6 + 12) <= 0 ) { result = sub_798E40(v6, 1); if ( result ) { if ( result >= 0 ) result = 0; return result; } } if ( sub_798DE0((unsigned __int64 *)v6, 1) ) { v16 = *(signed __int16 *)(a2 + 2 * v15); if ( !(v19 & v16) ) { if ( v16 < 0 ) v17 = v20 + v16; else v17 = v19 + v16; *(_WORD *)(a2 + 2 * v15) = v17; } } } if ( ++v7 > a5 ) { v9 = *(_DWORD *)(v6 + 40); break; } } } *(_DWORD *)(v6 + 40) = v9 - 1; } return 0; } if ( v11 <= *(_DWORD *)(v6 + 12) || (result = sub_798E40(v6, v11)) == 0 ) { v9 = *(_DWORD *)(v6 + 40) + sub_798DE0((unsigned __int64 *)v6, v11); *(_DWORD *)(v6 + 40) = v9; goto LABEL_27; } if ( result >= 0 ) result = 0; return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; //----- (00799B50) -------------------------------------------------------- int __cdecl sub_799B50(_WORD *a1) { signed int v1; // eax signed int v2; // eax int result; // eax __int16 v4; // [esp+0h] [ebp-84h] __int16 v5; // [esp+2h] [ebp-82h] __int16 v6; // [esp+4h] [ebp-80h] __int16 v7[63]; // [esp+6h] [ebp-7Eh] v1 = 0; do { *(&v4 + dword_BA9EE0[v1]) = a1[v1]; *(&v4 + dword_BA9EE4[v1]) = a1[v1 + 1]; *(&v4 + dword_BA9EE8[v1]) = a1[v1 + 2]; *(&v4 + dword_BA9EEC[v1]) = a1[v1 + 3]; v1 += 4; } while ( v1 < 64 ); v2 = 0; do { a1[v2] = *(&v4 + v2); a1[v2 + 1] = *(&v5 + v2); a1[v2 + 2] = *(&v6 + v2); a1[v2 + 3] = v7[v2]; v2 += 4; } while ( v2 < 64 ); result = 0; a1[64] = 0; a1[65] = 0; a1[66] = 0; a1[67] = 0; a1[68] = 0; a1[69] = 0; a1[70] = 0; a1[71] = 0; a1[72] = 0; a1[73] = 0; a1[74] = 0; a1[75] = 0; a1[76] = 0; a1[77] = 0; a1[78] = 0; a1[79] = 0; return result; } // BA9EE0: using guessed type int dword_BA9EE0[]; // BA9EE4: using guessed type int dword_BA9EE4[]; // BA9EE8: using guessed type int dword_BA9EE8[]; // 799B50: using guessed type __int16 var_7E[63]; //----- (00799CD0) -------------------------------------------------------- int __cdecl sub_799CD0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7CAC60)(a1, a2); } //----- (00799CF0) -------------------------------------------------------- int __cdecl sub_799CF0(int a1, int a2) { return ((int (__cdecl *)(int, int))loc_7CAD60)(a1, a2); } //----- (0079A200) -------------------------------------------------------- int __cdecl sub_79A200(int a1) { return ((int (__cdecl *)(int))loc_7CB000)(a1); } //----- (0079A220) -------------------------------------------------------- int __cdecl sub_79A220(int a1) { return ((int (__cdecl *)(int))loc_7CB9C0)(a1); } //----- (0079A240) -------------------------------------------------------- int __cdecl sub_79A240(int a1) { return ((int (__cdecl *)(int))loc_7CC310)(a1); } //----- (0079AA80) -------------------------------------------------------- int __cdecl sub_79AA80(_DWORD *a1, int a2, int a3) { int result; // eax if ( a1[15] ) { a1[8] = 4096; a1[5] = a1 + 16; a1[6] = a1 + 1040; a1[4] = a1 + 16; a1[9] = 4096; } else { a1[8] = a3; a1[5] = a2; a1[6] = a2 + a3; a1[4] = a2; a1[9] = a3; } a1[7] = 0; result = 0; *a1 = 0; a1[1] = 0; a1[3] = 8; return result; } //----- (0079AE50) -------------------------------------------------------- int __cdecl sub_79AE50(int a1, int a2, int a3) { return ((int (__cdecl *)(int, int, int))loc_7CD0B0)(a1, a2, a3); } //----- (0079AE80) -------------------------------------------------------- int __cdecl sub_79AE80(int a1, int a2, int a3) { return ((int (__cdecl *)(int, int, int))loc_7CD330)(a1, a2, a3); } //----- (0079AEB0) -------------------------------------------------------- int __cdecl sub_79AEB0(int a1) { int v1; // ebx DWORD nNumberOfBytesToWrite; // esi DWORD NumberOfBytesWritten; // [esp+10h] [ebp-14h] v1 = (*(int (__cdecl **)(_DWORD, _DWORD, int))(*(_DWORD *)(a1 + 8) + 92))(0, 0, a1); if ( !v1 && *(_DWORD *)(a1 + 60) ) { nNumberOfBytesToWrite = *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20); if ( sub_791A60(*(HANDLE *)(a1 + 60), (LPCVOID)(a1 + 64), nNumberOfBytesToWrite, &NumberOfBytesWritten) && nNumberOfBytesToWrite == NumberOfBytesWritten ) { *(_DWORD *)(a1 + 16) = *(_DWORD *)(a1 + 20); } else { v1 = -23; } } return v1; } //----- (0079AF80) -------------------------------------------------------- signed int __cdecl sub_79AF80(_DWORD *a1) { int v1; // edx signed int result; // eax int v3; // ebx signed int v4; // ebx int v5; // ebx int v6; // ebx int v7; // ebx _DWORD *v8; // ebp int v9; // ebx int v10; // ebp _DWORD *v11; // ebp int v12; // ebx _DWORD *v13; // ebp int v14; // ebx _DWORD *v15; // ebp int v16; // ebx _DWORD *v17; // ebp int v18; // ebx int v19; // ebx v1 = a1[3580]; result = 0; if ( a1[29] ) { a1[6] = 0; } else { v3 = a1[27]; if ( v3 && a1[26] ) { a1[6] = 0; v4 = a1[3568]; if ( v4 > 0 && v4 <= 255 ) { if ( v4 == 3 ) { v10 = a1[13]; if ( v10 != 1 || a1[12] != 3 ) { if ( v10 != 1 || a1[12] != 4 ) { if ( v10 == 2 && a1[12] == 3 ) { v11 = (_DWORD *)a1[3571]; v12 = v11[1]; if ( v12 != 2 || v11[2] != 2 || v11[5] != 1 || v11[6] != 1 || v11[9] != 1 || v11[10] != 1 ) { if ( v12 == 2 && v11[2] == 1 && v11[5] == 1 && v11[6] == 1 && v11[9] == 1 && v11[10] == 1 ) { a1[6] = 6; *(_DWORD *)(v1 + 96) = sub_7A0360; } } else { a1[6] = 4; *(_DWORD *)(v1 + 96) = sub_79EB70; } } } else { v13 = (_DWORD *)a1[3571]; v14 = v13[1]; if ( v14 != 2 || v13[2] != 2 || v13[5] != 1 || v13[6] != 1 || v13[9] != 1 || v13[10] != 1 ) { if ( v14 == 2 && v13[2] == 1 && v13[5] == 1 && v13[6] == 1 && v13[9] == 1 && v13[10] == 1 ) { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A5A20; } } else { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A5A20; } } } else { v15 = (_DWORD *)a1[3571]; v16 = v15[1]; if ( v16 != 2 || v15[2] != 2 || v15[5] != 1 || v15[6] != 1 || v15[9] != 1 || v15[10] != 1 ) { if ( v16 == 2 && v15[2] == 1 && v15[5] == 1 && v15[6] == 1 && v15[9] == 1 && v15[10] == 1 ) { a1[6] = 5; *(_DWORD *)(v1 + 96) = sub_79F760; } } else { a1[6] = 3; *(_DWORD *)(v1 + 96) = sub_79D9F0; } } } else if ( v4 == 4 && a1[13] == 5 && a1[12] == 4 ) { v8 = (_DWORD *)a1[3571]; v9 = v8[1]; if ( v9 != 2 || v8[2] != 2 || v8[5] != 1 || v8[6] != 1 || v8[9] != 1 || v8[10] != 1 || v8[13] != 2 || v8[14] != 2 ) { if ( v9 == 2 && v8[2] == 1 && v8[5] == 1 && v8[6] == 1 && v8[9] == 1 && v8[10] == 1 && v8[13] == 2 && v8[14] == 1 ) { a1[6] = 12; *(_DWORD *)(v1 + 96) = sub_7A1940; } } else { a1[6] = 11; *(_DWORD *)(v1 + 96) = sub_7A2C40; } } } else { result = -14; } } else if ( !v3 || a1[26] ) { if ( v3 || !a1[26] ) { if ( v3 ) { a1[6] = 0; } else if ( a1[26] ) { a1[6] = 0; } else { v7 = a1[3568]; if ( v7 != 1 || a1[13] != 4 || a1[22] != 4 ) { if ( v7 != 3 || a1[12] != 1 || a1[22] != 3 ) { if ( v7 != 3 || a1[12] != 3 ) { if ( v7 != 3 || a1[12] != 4 ) { if ( v7 == 4 ) { a1[6] = 14; *(_DWORD *)(v1 + 96) = sub_7A30B0; } else { a1[6] = 0; if ( a1[22] == 255 && a1[13] == 255 ) *(_DWORD *)(v1 + 96) = sub_7A7890; } } else { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A7890; } } else if ( a1[13] == 2 ) { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A7890; } else { a1[6] = 15; *(_DWORD *)(v1 + 96) = sub_7A36A0; } } else { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A7890; } } else { a1[6] = 20; *(_DWORD *)(v1 + 96) = sub_7A5930; } } } else { v6 = a1[3568]; if ( v6 != 1 || a1[12] != 3 ) { if ( v6 != 3 || a1[12] != 3 ) { if ( v6 != 3 || a1[12] != 4 ) { if ( v6 == 4 ) { if ( a1[12] == 4 ) { if ( a1[13] == 5 ) { a1[6] = 10; *(_DWORD *)(v1 + 96) = sub_7A0CE0; } else { a1[6] = 0; } } else { a1[6] = 0; } } else { a1[6] = 0; } } else { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A5A20; } } else { v19 = a1[13]; if ( v19 == 1 ) { a1[6] = 1; *(_DWORD *)(v1 + 96) = sub_79BEC0; } else if ( v19 == 2 ) { a1[6] = 2; *(_DWORD *)(v1 + 96) = sub_79C860; } else { a1[6] = 0; } } } else { a1[6] = 0; *(_DWORD *)(v1 + 96) = sub_7A69A0; } } } else { a1[6] = 0; v5 = a1[3568]; if ( v5 != 3 || a1[12] != 1 ) { if ( v5 != 3 || a1[12] != 3 || a1[13] == 2 ) { *(_DWORD *)(v1 + 96) = sub_7A70C0; } else { v17 = (_DWORD *)a1[3571]; v18 = v17[1]; if ( v18 == 2 && v17[2] == 2 && v17[5] == 1 && v17[6] == 1 && v17[9] == 1 && v17[10] == 1 ) { a1[6] = 16; *(_DWORD *)(v1 + 96) = sub_7A4220; v17 = (_DWORD *)a1[3571]; v18 = v17[1]; } if ( v18 == 2 && v17[2] == 1 && v17[5] == 1 && v17[6] == 1 && v17[9] == 1 && v17[10] == 1 ) { if ( a1[14] == 2 ) { a1[6] = 18; *(_DWORD *)(v1 + 96) = sub_7A5310; } else { a1[6] = 17; *(_DWORD *)(v1 + 96) = sub_7A4A20; } } } } else { *(_DWORD *)(v1 + 96) = sub_7A70C0; } } } return result; } // 79BEC0: using guessed type int sub_79BEC0(); // 79C860: using guessed type int sub_79C860(); // 79D9F0: using guessed type int sub_79D9F0(); // 79EB70: using guessed type int sub_79EB70(); // 79F760: using guessed type int sub_79F760(); // 7A0360: using guessed type int sub_7A0360(); // 7A0CE0: using guessed type int sub_7A0CE0(); // 7A1940: using guessed type int sub_7A1940(); // 7A2C40: using guessed type int sub_7A2C40(); // 7A30B0: using guessed type int sub_7A30B0(); // 7A36A0: using guessed type int sub_7A36A0(); // 7A4220: using guessed type int sub_7A4220(); // 7A4A20: using guessed type int sub_7A4A20(); // 7A5310: using guessed type int sub_7A5310(); // 7A5930: using guessed type int sub_7A5930(); // 7A5A20: using guessed type int sub_7A5A20(); // 7A69A0: using guessed type int sub_7A69A0(); // 7A70C0: using guessed type int sub_7A70C0(); // 7A7890: using guessed type int sub_7A7890(); //----- (0079B640) -------------------------------------------------------- unsigned int __cdecl sub_79B640(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx unsigned int v16; // edx _WORD *v17; // esi int v18; // edx _WORD *v19; // ecx __int16 v20; // di __int16 v21; // si __int16 v22; // bp __int16 v23; // bx signed int v24; // edx char v25; // [esp+1Fh] [ebp-1ADh] unsigned int v26; // [esp+1A0h] [ebp-2Ch] int v27; // [esp+1A4h] [ebp-28h] int v28; // [esp+1A8h] [ebp-24h] int v29; // [esp+1ACh] [ebp-20h] int v30; // [esp+1B0h] [ebp-1Ch] int v31; // [esp+1B4h] [ebp-18h] unsigned int v32; // [esp+1B8h] [ebp-14h] result = (unsigned int)&v25 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v32 = (unsigned int)&v25 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v30 = v7; v29 = v8; v31 = 0; v27 = v9; v28 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v32 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8; v16 = v32; *(_WORD *)(v32 + 2 * v12 + 128) = (-85 * v14 - 43 * v13 + (v15 << 7) + 128) >> 8; *(_WORD *)(v16 + 2 * v12++ + 256) = (-107 * v14 + (v13 << 7) - 21 * v15 + 128) >> 8; v10 = v31++ + 1; } while ( v31 < a3 ); v7 = v30; v8 = v29; v9 = v27; v6 = v28; } if ( v10 < 8 ) { v26 = v32 + v9; v17 = (_WORD *)(v32 + 2 * (v10 + v8)); v27 = v9; v28 = v6; v18 = v32 + v9; do { ++v10; *v17 = *(_WORD *)(v18 + 2 * a3 - 2); v17[64] = *(_WORD *)(v18 + 2 * a3 + 126); v17[128] = *(_WORD *)(v18 + 2 * a3 + 254); ++v17; } while ( v10 < 8 ); v9 = v27; v6 = v28; } v7 += a2; v8 += 8; v9 += 16; ++v6; } while ( v6 < a4 ); result = v32; } if ( v6 < 8 ) { v19 = (_WORD *)(result + 16 * v6); do { v20 = v19[126]; v21 = *(v19 - 1); *v19 = *(v19 - 8); v22 = v19[63]; v19[64] = v19[56]; ++v6; v19[128] = v19[120]; v19[1] = *(v19 - 7); v19[65] = v19[57]; v19[129] = v19[121]; v19[2] = *(v19 - 6); v19[66] = v19[58]; v19[130] = v19[122]; v19[3] = *(v19 - 5); v19[67] = v19[59]; v19[131] = v19[123]; v19[4] = *(v19 - 4); v19[68] = v19[60]; v19[132] = v19[124]; v19[5] = *(v19 - 3); v19[69] = v19[61]; v19[133] = v19[125]; v19[6] = *(v19 - 2); v19[70] = v19[62]; v23 = v19[127]; v19[134] = v20; v19[7] = v21; v19[71] = v22; v19[135] = v23; v19 += 8; } while ( v6 < 8 ); } v24 = 0; do { *(_WORD *)(a5 + 2 * v24) = *(_WORD *)(result + 2 * v24); *(_WORD *)(a5 + 2 * v24 + 128) = *(_WORD *)(result + 2 * v24 + 128); *(_WORD *)(a5 + 2 * v24 + 256) = *(_WORD *)(result + 2 * v24 + 256); *(_WORD *)(a5 + 2 * v24 + 2) = *(_WORD *)(result + 2 * v24 + 2); *(_WORD *)(a5 + 2 * v24 + 130) = *(_WORD *)(result + 2 * v24 + 130); *(_WORD *)(a5 + 2 * v24 + 258) = *(_WORD *)(result + 2 * v24 + 258); *(_WORD *)(a5 + 2 * v24 + 4) = *(_WORD *)(result + 2 * v24 + 4); *(_WORD *)(a5 + 2 * v24 + 132) = *(_WORD *)(result + 2 * v24 + 132); *(_WORD *)(a5 + 2 * v24 + 260) = *(_WORD *)(result + 2 * v24 + 260); *(_WORD *)(a5 + 2 * v24 + 6) = *(_WORD *)(result + 2 * v24 + 6); *(_WORD *)(a5 + 2 * v24 + 134) = *(_WORD *)(result + 2 * v24 + 134); *(_WORD *)(a5 + 2 * v24 + 262) = *(_WORD *)(result + 2 * v24 + 262); *(_WORD *)(a5 + 2 * v24 + 8) = *(_WORD *)(result + 2 * v24 + 8); *(_WORD *)(a5 + 2 * v24 + 136) = *(_WORD *)(result + 2 * v24 + 136); *(_WORD *)(a5 + 2 * v24 + 264) = *(_WORD *)(result + 2 * v24 + 264); *(_WORD *)(a5 + 2 * v24 + 10) = *(_WORD *)(result + 2 * v24 + 10); *(_WORD *)(a5 + 2 * v24 + 138) = *(_WORD *)(result + 2 * v24 + 138); *(_WORD *)(a5 + 2 * v24 + 266) = *(_WORD *)(result + 2 * v24 + 266); *(_WORD *)(a5 + 2 * v24 + 12) = *(_WORD *)(result + 2 * v24 + 12); *(_WORD *)(a5 + 2 * v24 + 140) = *(_WORD *)(result + 2 * v24 + 140); *(_WORD *)(a5 + 2 * v24 + 268) = *(_WORD *)(result + 2 * v24 + 268); *(_WORD *)(a5 + 2 * v24 + 14) = *(_WORD *)(result + 2 * v24 + 14); *(_WORD *)(a5 + 2 * v24 + 142) = *(_WORD *)(result + 2 * v24 + 142); *(_WORD *)(a5 + 2 * v24 + 270) = *(_WORD *)(result + 2 * v24 + 270); v24 += 8; } while ( v24 < 64 ); return result; } //----- (0079BFD0) -------------------------------------------------------- unsigned int __cdecl sub_79BFD0(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx _WORD *v16; // esi int v17; // edx _WORD *v18; // ecx __int16 v19; // di __int16 v20; // si __int16 v21; // bp __int16 v22; // bx signed int v23; // edx char v24; // [esp+1Fh] [ebp-1ADh] unsigned int v25; // [esp+1A0h] [ebp-2Ch] int v26; // [esp+1A4h] [ebp-28h] int v27; // [esp+1A8h] [ebp-24h] int v28; // [esp+1ACh] [ebp-20h] int v29; // [esp+1B0h] [ebp-1Ch] int v30; // [esp+1B4h] [ebp-18h] unsigned int v31; // [esp+1B8h] [ebp-14h] result = (unsigned int)&v24 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v31 = (unsigned int)&v24 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v29 = v7; v28 = v8; v30 = 0; v26 = v9; v27 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v31 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8; *(_WORD *)(v31 + 2 * v12 + 128) = (-85 * v14 + (v13 << 7) - 43 * v15 + 128) >> 8; *(_WORD *)(v31 + 2 * v12++ + 256) = (-107 * v14 - 21 * v13 + (v15 << 7) + 128) >> 8; v10 = v30++ + 1; } while ( v30 < a3 ); v7 = v29; v8 = v28; v9 = v26; v6 = v27; } if ( v10 < 8 ) { v25 = v31 + v9; v16 = (_WORD *)(v31 + 2 * (v10 + v8)); v26 = v9; v27 = v6; v17 = v31 + v9; do { ++v10; *v16 = *(_WORD *)(v17 + 2 * a3 - 2); v16[64] = *(_WORD *)(v17 + 2 * a3 + 126); v16[128] = *(_WORD *)(v17 + 2 * a3 + 254); ++v16; } while ( v10 < 8 ); v9 = v26; v6 = v27; } v7 += a2; v8 += 8; v9 += 16; ++v6; } while ( v6 < a4 ); result = v31; } if ( v6 < 8 ) { v18 = (_WORD *)(result + 16 * v6); do { v19 = v18[126]; v20 = *(v18 - 1); *v18 = *(v18 - 8); v21 = v18[63]; v18[64] = v18[56]; ++v6; v18[128] = v18[120]; v18[1] = *(v18 - 7); v18[65] = v18[57]; v18[129] = v18[121]; v18[2] = *(v18 - 6); v18[66] = v18[58]; v18[130] = v18[122]; v18[3] = *(v18 - 5); v18[67] = v18[59]; v18[131] = v18[123]; v18[4] = *(v18 - 4); v18[68] = v18[60]; v18[132] = v18[124]; v18[5] = *(v18 - 3); v18[69] = v18[61]; v18[133] = v18[125]; v18[6] = *(v18 - 2); v18[70] = v18[62]; v22 = v18[127]; v18[134] = v19; v18[7] = v20; v18[71] = v21; v18[135] = v22; v18 += 8; } while ( v6 < 8 ); } v23 = 0; do { *(_WORD *)(a5 + 2 * v23) = *(_WORD *)(result + 2 * v23); *(_WORD *)(a5 + 2 * v23 + 128) = *(_WORD *)(result + 2 * v23 + 128); *(_WORD *)(a5 + 2 * v23 + 256) = *(_WORD *)(result + 2 * v23 + 256); *(_WORD *)(a5 + 2 * v23 + 2) = *(_WORD *)(result + 2 * v23 + 2); *(_WORD *)(a5 + 2 * v23 + 130) = *(_WORD *)(result + 2 * v23 + 130); *(_WORD *)(a5 + 2 * v23 + 258) = *(_WORD *)(result + 2 * v23 + 258); *(_WORD *)(a5 + 2 * v23 + 4) = *(_WORD *)(result + 2 * v23 + 4); *(_WORD *)(a5 + 2 * v23 + 132) = *(_WORD *)(result + 2 * v23 + 132); *(_WORD *)(a5 + 2 * v23 + 260) = *(_WORD *)(result + 2 * v23 + 260); *(_WORD *)(a5 + 2 * v23 + 6) = *(_WORD *)(result + 2 * v23 + 6); *(_WORD *)(a5 + 2 * v23 + 134) = *(_WORD *)(result + 2 * v23 + 134); *(_WORD *)(a5 + 2 * v23 + 262) = *(_WORD *)(result + 2 * v23 + 262); *(_WORD *)(a5 + 2 * v23 + 8) = *(_WORD *)(result + 2 * v23 + 8); *(_WORD *)(a5 + 2 * v23 + 136) = *(_WORD *)(result + 2 * v23 + 136); *(_WORD *)(a5 + 2 * v23 + 264) = *(_WORD *)(result + 2 * v23 + 264); *(_WORD *)(a5 + 2 * v23 + 10) = *(_WORD *)(result + 2 * v23 + 10); *(_WORD *)(a5 + 2 * v23 + 138) = *(_WORD *)(result + 2 * v23 + 138); *(_WORD *)(a5 + 2 * v23 + 266) = *(_WORD *)(result + 2 * v23 + 266); *(_WORD *)(a5 + 2 * v23 + 12) = *(_WORD *)(result + 2 * v23 + 12); *(_WORD *)(a5 + 2 * v23 + 140) = *(_WORD *)(result + 2 * v23 + 140); *(_WORD *)(a5 + 2 * v23 + 268) = *(_WORD *)(result + 2 * v23 + 268); *(_WORD *)(a5 + 2 * v23 + 14) = *(_WORD *)(result + 2 * v23 + 14); *(_WORD *)(a5 + 2 * v23 + 142) = *(_WORD *)(result + 2 * v23 + 142); *(_WORD *)(a5 + 2 * v23 + 270) = *(_WORD *)(result + 2 * v23 + 270); v23 += 8; } while ( v23 < 64 ); return result; } //----- (0079C970) -------------------------------------------------------- int __cdecl sub_79C970(int a1, int a2, int a3, signed int a4, int a5) { unsigned int v5; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx unsigned int v16; // edx _WORD *v17; // esi int v18; // edx _WORD *v19; // ecx __int16 v20; // di __int16 v21; // si __int16 v22; // bp __int16 v23; // bx int v24; // edx int v25; // ecx int v26; // ebx _WORD *v27; // edi _WORD *v28; // esi signed __int16 *v29; // ebp int result; // eax __int16 v31; // cx char v32; // [esp+1Fh] [ebp-62Dh] int v33; // [esp+620h] [ebp-2Ch] int v34; // [esp+624h] [ebp-28h] unsigned int v35; // [esp+628h] [ebp-24h] int v36; // [esp+62Ch] [ebp-20h] int v37; // [esp+630h] [ebp-1Ch] int v38; // [esp+634h] [ebp-18h] int v39; // [esp+638h] [ebp-14h] v5 = (unsigned int)&v32 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v35 = (unsigned int)&v32 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v38 = v7; v37 = v8; v39 = 0; v33 = v9; v36 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v35 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8; v16 = v35; *(_WORD *)(v35 + 2 * v12 + 512) = (-85 * v14 - 43 * v13 + (v15 << 7) + 128) >> 8; *(_WORD *)(v16 + 2 * v12++ + 1024) = (-107 * v14 + (v13 << 7) - 21 * v15 + 128) >> 8; v10 = v39++ + 1; } while ( v39 < a3 ); v7 = v38; v8 = v37; v9 = v33; v6 = v36; } if ( v10 < 16 ) { v34 = v35 + v9; v17 = (_WORD *)(v35 + 2 * (v10 + v8)); v33 = v9; v36 = v6; v18 = v35 + v9; do { ++v10; *v17 = *(_WORD *)(v18 + 2 * a3 - 2); v17[256] = *(_WORD *)(v18 + 2 * a3 + 510); v17[512] = *(_WORD *)(v18 + 2 * a3 + 1022); ++v17; } while ( v10 < 16 ); v9 = v33; v6 = v36; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); v5 = v35; } if ( v6 < 16 ) { v19 = (_WORD *)(v5 + 32 * v6); do { v20 = v19[510]; v21 = *(v19 - 1); *v19 = *(v19 - 16); v22 = v19[255]; v19[256] = v19[240]; ++v6; v19[512] = v19[496]; v19[1] = *(v19 - 15); v19[257] = v19[241]; v19[513] = v19[497]; v19[2] = *(v19 - 14); v19[258] = v19[242]; v19[514] = v19[498]; v19[3] = *(v19 - 13); v19[259] = v19[243]; v19[515] = v19[499]; v19[4] = *(v19 - 12); v19[260] = v19[244]; v19[516] = v19[500]; v19[5] = *(v19 - 11); v19[261] = v19[245]; v19[517] = v19[501]; v19[6] = *(v19 - 10); v19[262] = v19[246]; v19[518] = v19[502]; v19[7] = *(v19 - 9); v19[263] = v19[247]; v19[519] = v19[503]; v19[8] = *(v19 - 8); v19[264] = v19[248]; v19[520] = v19[504]; v19[9] = *(v19 - 7); v19[265] = v19[249]; v19[521] = v19[505]; v19[10] = *(v19 - 6); v19[266] = v19[250]; v19[522] = v19[506]; v19[11] = *(v19 - 5); v19[267] = v19[251]; v19[523] = v19[507]; v19[12] = *(v19 - 4); v19[268] = v19[252]; v19[524] = v19[508]; v19[13] = *(v19 - 3); v19[269] = v19[253]; v19[525] = v19[509]; v19[14] = *(v19 - 2); v19[270] = v19[254]; v23 = v19[511]; v19[526] = v20; v19[15] = v21; v19[271] = v22; v19[527] = v23; v19 += 16; } while ( v6 < 16 ); } v24 = 0; v25 = 0; v26 = 0; v35 = v5; do { v27 = (_WORD *)(a5 + 2 * v24); v28 = (_WORD *)(v35 + 2 * v25); v29 = (signed __int16 *)(v35 + 2 * v26); result = (int)(v29 + 16); v33 = v25; v34 = v26; do { *v27 = *v28; v27[64] = v28[8]; v27[128] = v28[128]; v31 = v28[136]; ++v28; v27[192] = v31; v27[256] = (v29[272] + v29[257] + v29[256] + v29[273] + 2) >> 2; v27[320] = (v29[528] + v29[513] + v29[512] + v29[529] + 2) >> 2; ++v27; v29 += 2; } while ( result > (signed int)v29 ); v24 += 8; v25 = v33 + 16; v26 = v34 + 32; } while ( v34 + 32 < 256 ); return result; } //----- (0079CEC0) -------------------------------------------------------- int __cdecl sub_79CEC0(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5) { unsigned __int8 *v5; // edx _WORD *v6; // ecx int v7; // eax int v8; // ST60_4 int v9; // ST5C_4 int v10; // ST58_4 int v11; // ST54_4 int v12; // ST50_4 int v13; // ST4C_4 int v14; // ST48_4 int v15; // ST44_4 int v16; // ST40_4 int v17; // ST3C_4 int v18; // ST38_4 int v19; // ST34_4 int v20; // ST30_4 int v21; // ST2C_4 int v22; // ST24_4 int v23; // ST20_4 int v24; // ST1C_4 int v25; // ST18_4 int v26; // ST14_4 int v27; // ST10_4 int v28; // ST0C_4 int v29; // ST08_4 int v30; // ST04_4 unsigned __int8 *v31; // edx int v32; // esi int v33; // ebp int v34; // ebx int v35; // esi int v36; // ebp int v37; // ebx int v38; // esi int v39; // ebp int v40; // ebx int v41; // esi int v42; // ebp int v43; // ebx int v44; // esi int v45; // ebp int v46; // ebx int v47; // esi int v48; // ebp int v49; // ebx int v50; // ebp int v51; // ebx int v52; // eax int v53; // esi int v54; // ebp int v55; // ebx int result; // eax bool v57; // sf unsigned __int8 v58; // of int v59; // [esp+28h] [ebp-54h] _WORD *v60; // [esp+64h] [ebp-18h] _WORD *v61; // [esp+68h] [ebp-14h] v5 = a1; v6 = a3; v59 = 0; v60 = a5; v61 = a4; do { *v6 = (150 * v5[1] + 77 * *v5 + 29 * v5[2] - 32640) >> 8; v6[1] = (150 * v5[4] + 77 * v5[3] + 29 * v5[5] - 32640) >> 8; v6[2] = (150 * v5[7] + 77 * v5[6] + 29 * v5[8] - 32640) >> 8; v6[3] = (150 * v5[10] + 77 * v5[9] + 29 * v5[11] - 32640) >> 8; v6[4] = (150 * v5[13] + 77 * v5[12] + 29 * v5[14] - 32640) >> 8; v6[5] = (150 * v5[16] + 77 * v5[15] + 29 * v5[17] - 32640) >> 8; v6[6] = (150 * v5[19] + 77 * v5[18] + 29 * v5[20] - 32640) >> 8; v6[7] = (150 * v5[22] + 77 * v5[21] + 29 * v5[23] - 32640) >> 8; v6[64] = (150 * v5[25] + 77 * v5[24] + 29 * v5[26] - 32640) >> 8; v6[65] = (150 * v5[28] + 77 * v5[27] + 29 * v5[29] - 32640) >> 8; v6[66] = (150 * v5[31] + 77 * v5[30] + 29 * v5[32] - 32640) >> 8; v6[67] = (150 * v5[34] + 77 * v5[33] + 29 * v5[35] - 32640) >> 8; v6[68] = (150 * v5[37] + 77 * v5[36] + 29 * v5[38] - 32640) >> 8; v6[69] = (150 * v5[40] + 77 * v5[39] + 29 * v5[41] - 32640) >> 8; v6[70] = (150 * v5[43] + 77 * v5[42] + 29 * v5[44] - 32640) >> 8; v6[71] = (150 * v5[46] + 77 * v5[45] + 29 * v5[47] - 32640) >> 8; v7 = v5[3] + *v5; v8 = v5[4] + v5[1]; v9 = v5[5] + v5[2]; v10 = v5[9] + v5[6]; v11 = v5[10] + v5[7]; v12 = v5[11] + v5[8]; v13 = v5[15] + v5[12]; v14 = v5[16] + v5[13]; v15 = v5[17] + v5[14]; v16 = v5[21] + v5[18]; v17 = v5[22] + v5[19]; v18 = v5[23] + v5[20]; v19 = v5[27] + v5[24]; v20 = v5[28] + v5[25]; v21 = v5[29] + v5[26]; v22 = v5[33] + v5[30]; v23 = v5[34] + v5[31]; v24 = v5[35] + v5[32]; v25 = v5[39] + v5[36]; v26 = v5[40] + v5[37]; v27 = v5[41] + v5[38]; v28 = v5[45] + v5[42]; v29 = v5[46] + v5[43]; v30 = v5[47] + v5[44]; v31 = &v5[a2]; v6[8] = (150 * v31[1] + 77 * *v31 + 29 * v31[2] - 32640) >> 8; v6[9] = (150 * v31[4] + 77 * v31[3] + 29 * v31[5] - 32640) >> 8; v6[10] = (150 * v31[7] + 77 * v31[6] + 29 * v31[8] - 32640) >> 8; v6[11] = (150 * v31[10] + 77 * v31[9] + 29 * v31[11] - 32640) >> 8; v6[12] = (150 * v31[13] + 77 * v31[12] + 29 * v31[14] - 32640) >> 8; v6[13] = (150 * v31[16] + 77 * v31[15] + 29 * v31[17] - 32640) >> 8; v6[14] = (150 * v31[19] + 77 * v31[18] + 29 * v31[20] - 32640) >> 8; v6[15] = (150 * v31[22] + 77 * v31[21] + 29 * v31[23] - 32640) >> 8; v6[72] = (150 * v31[25] + 77 * v31[24] + 29 * v31[26] - 32640) >> 8; v6[73] = (150 * v31[28] + 77 * v31[27] + 29 * v31[29] - 32640) >> 8; v6[74] = (150 * v31[31] + 77 * v31[30] + 29 * v31[32] - 32640) >> 8; v6[75] = (150 * v31[34] + 77 * v31[33] + 29 * v31[35] - 32640) >> 8; v6[76] = (150 * v31[37] + 77 * v31[36] + 29 * v31[38] - 32640) >> 8; v6[77] = (150 * v31[40] + 77 * v31[39] + 29 * v31[41] - 32640) >> 8; v6[78] = (150 * v31[43] + 77 * v31[42] + 29 * v31[44] - 32640) >> 8; v6[79] = (150 * v31[46] + 77 * v31[45] + 29 * v31[47] - 32640) >> 8; v32 = v7 + v31[3] + *v31; v33 = v8 + v31[4] + v31[1]; v34 = v9 + v31[5] + v31[2]; *v61 = (-85 * v33 - 43 * v32 + ((v9 + v31[5] + v31[2]) << 7) + 512) >> 10; v6 += 16; *v60 = (-107 * v33 + (v32 << 7) - 21 * v34 + 512) >> 10; v35 = v10 + v31[9] + v31[6]; v36 = v11 + v31[10] + v31[7]; v37 = v12 + v31[11] + v31[8]; v61[1] = (-85 * v36 - 43 * v35 + ((v12 + v31[11] + v31[8]) << 7) + 512) >> 10; v60[1] = (-107 * v36 + (v35 << 7) - 21 * v37 + 512) >> 10; v38 = v13 + v31[15] + v31[12]; v39 = v14 + v31[16] + v31[13]; v40 = v15 + v31[17] + v31[14]; v61[2] = (-85 * v39 - 43 * v38 + ((v15 + v31[17] + v31[14]) << 7) + 512) >> 10; v60[2] = (-107 * v39 + (v38 << 7) - 21 * v40 + 512) >> 10; v41 = v16 + v31[21] + v31[18]; v42 = v17 + v31[22] + v31[19]; v43 = v18 + v31[23] + v31[20]; v61[3] = (-85 * v42 - 43 * v41 + ((v18 + v31[23] + v31[20]) << 7) + 512) >> 10; v60[3] = (-107 * v42 + (v41 << 7) - 21 * v43 + 512) >> 10; v44 = v19 + v31[27] + v31[24]; v45 = v20 + v31[28] + v31[25]; v46 = v21 + v31[29] + v31[26]; v61[4] = (-85 * v45 - 43 * v44 + ((v21 + v31[29] + v31[26]) << 7) + 512) >> 10; v60[4] = (-107 * v45 + (v44 << 7) - 21 * v46 + 512) >> 10; v47 = v22 + v31[33] + v31[30]; v48 = v23 + v31[34] + v31[31]; v49 = v24 + v31[35] + v31[32]; v61[5] = (-85 * v48 - 43 * v47 + ((v24 + v31[35] + v31[32]) << 7) + 512) >> 10; v60[5] = (-107 * v48 + (v47 << 7) - 21 * v49 + 512) >> 10; v50 = v25 + v31[39] + v31[36]; v51 = v26 + v31[40] + v31[37]; v52 = v27 + v31[41] + v31[38]; v61[6] = (-85 * v51 - 43 * v50 + ((v27 + v31[41] + v31[38]) << 7) + 512) >> 10; v60[6] = (-107 * v51 + (v50 << 7) - 21 * v52 + 512) >> 10; v53 = v28 + v31[45] + v31[42]; v54 = v29 + v31[46] + v31[43]; v55 = v30 + v31[47] + v31[44]; v61[7] = (-85 * v54 - 43 * v53 + ((v30 + v31[47] + v31[44]) << 7) + 512) >> 10; v60[7] = (-107 * v54 + (v53 << 7) - 21 * v55 + 512) >> 10; result = v59 + 2; v61 += 8; v60 += 8; v5 = &v31[a2]; v58 = __OFSUB__(v59 + 2, 8); v57 = v59 - 6 < 0; v59 += 2; } while ( v57 ^ v58 ); return result; } //----- (0079DAF0) -------------------------------------------------------- int __cdecl sub_79DAF0(int a1, int a2, int a3, signed int a4, int a5) { unsigned int v5; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx _WORD *v16; // esi int v17; // edx _WORD *v18; // ecx __int16 v19; // di __int16 v20; // si __int16 v21; // bp __int16 v22; // bx int v23; // edx int v24; // ecx int v25; // ebx _WORD *v26; // edi _WORD *v27; // esi signed __int16 *v28; // ebp int result; // eax __int16 v30; // cx char v31; // [esp+1Fh] [ebp-62Dh] int v32; // [esp+620h] [ebp-2Ch] int v33; // [esp+624h] [ebp-28h] unsigned int v34; // [esp+628h] [ebp-24h] int v35; // [esp+62Ch] [ebp-20h] int v36; // [esp+630h] [ebp-1Ch] int v37; // [esp+634h] [ebp-18h] int v38; // [esp+638h] [ebp-14h] v5 = (unsigned int)&v31 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v34 = (unsigned int)&v31 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v37 = v7; v36 = v8; v38 = 0; v32 = v9; v35 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v34 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8; *(_WORD *)(v34 + 2 * v12 + 512) = (-85 * v14 + (v13 << 7) - 43 * v15 + 128) >> 8; *(_WORD *)(v34 + 2 * v12++ + 1024) = (-107 * v14 - 21 * v13 + (v15 << 7) + 128) >> 8; v10 = v38++ + 1; } while ( v38 < a3 ); v7 = v37; v8 = v36; v9 = v32; v6 = v35; } if ( v10 < 16 ) { v33 = v34 + v9; v16 = (_WORD *)(v34 + 2 * (v10 + v8)); v32 = v9; v35 = v6; v17 = v34 + v9; do { ++v10; *v16 = *(_WORD *)(v17 + 2 * a3 - 2); v16[256] = *(_WORD *)(v17 + 2 * a3 + 510); v16[512] = *(_WORD *)(v17 + 2 * a3 + 1022); ++v16; } while ( v10 < 16 ); v9 = v32; v6 = v35; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); v5 = v34; } if ( v6 < 16 ) { v18 = (_WORD *)(v5 + 32 * v6); do { v19 = v18[510]; v20 = *(v18 - 1); *v18 = *(v18 - 16); v21 = v18[255]; v18[256] = v18[240]; ++v6; v18[512] = v18[496]; v18[1] = *(v18 - 15); v18[257] = v18[241]; v18[513] = v18[497]; v18[2] = *(v18 - 14); v18[258] = v18[242]; v18[514] = v18[498]; v18[3] = *(v18 - 13); v18[259] = v18[243]; v18[515] = v18[499]; v18[4] = *(v18 - 12); v18[260] = v18[244]; v18[516] = v18[500]; v18[5] = *(v18 - 11); v18[261] = v18[245]; v18[517] = v18[501]; v18[6] = *(v18 - 10); v18[262] = v18[246]; v18[518] = v18[502]; v18[7] = *(v18 - 9); v18[263] = v18[247]; v18[519] = v18[503]; v18[8] = *(v18 - 8); v18[264] = v18[248]; v18[520] = v18[504]; v18[9] = *(v18 - 7); v18[265] = v18[249]; v18[521] = v18[505]; v18[10] = *(v18 - 6); v18[266] = v18[250]; v18[522] = v18[506]; v18[11] = *(v18 - 5); v18[267] = v18[251]; v18[523] = v18[507]; v18[12] = *(v18 - 4); v18[268] = v18[252]; v18[524] = v18[508]; v18[13] = *(v18 - 3); v18[269] = v18[253]; v18[525] = v18[509]; v18[14] = *(v18 - 2); v18[270] = v18[254]; v22 = v18[511]; v18[526] = v19; v18[15] = v20; v18[271] = v21; v18[527] = v22; v18 += 16; } while ( v6 < 16 ); } v23 = 0; v24 = 0; v25 = 0; v34 = v5; do { v26 = (_WORD *)(a5 + 2 * v23); v27 = (_WORD *)(v34 + 2 * v24); v28 = (signed __int16 *)(v34 + 2 * v25); result = (int)(v28 + 16); v32 = v24; v33 = v25; do { *v26 = *v27; v26[64] = v27[8]; v26[128] = v27[128]; v30 = v27[136]; ++v27; v26[192] = v30; v26[256] = (v28[272] + v28[257] + v28[256] + v28[273] + 2) >> 2; v26[320] = (v28[528] + v28[513] + v28[512] + v28[529] + 2) >> 2; ++v26; v28 += 2; } while ( result > (signed int)v28 ); v23 += 8; v24 = v32 + 16; v25 = v33 + 32; } while ( v33 + 32 < 256 ); return result; } //----- (0079E040) -------------------------------------------------------- int __cdecl sub_79E040(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5) { unsigned __int8 *v5; // edx _WORD *v6; // ecx int v7; // eax int v8; // ST60_4 int v9; // ST5C_4 int v10; // ST58_4 int v11; // ST54_4 int v12; // ST50_4 int v13; // ST4C_4 int v14; // ST48_4 int v15; // ST44_4 int v16; // ST40_4 int v17; // ST3C_4 int v18; // ST38_4 int v19; // ST34_4 int v20; // ST30_4 int v21; // ST2C_4 int v22; // ST24_4 int v23; // ST20_4 int v24; // ST1C_4 int v25; // ST18_4 int v26; // ST14_4 int v27; // ST10_4 int v28; // ST0C_4 int v29; // ST08_4 int v30; // ST04_4 unsigned __int8 *v31; // edx int v32; // esi int v33; // ebp int v34; // ebx int v35; // esi int v36; // ebp int v37; // ebx int v38; // esi int v39; // ebp int v40; // ebx int v41; // esi int v42; // ebp int v43; // ebx int v44; // esi int v45; // ebp int v46; // ebx int v47; // esi int v48; // ebp int v49; // ebx int v50; // ebp int v51; // ebx int v52; // eax int v53; // esi int v54; // ebp int v55; // ebx int result; // eax bool v57; // sf unsigned __int8 v58; // of int v59; // [esp+28h] [ebp-54h] _WORD *v60; // [esp+64h] [ebp-18h] _WORD *v61; // [esp+68h] [ebp-14h] v5 = a1; v6 = a3; v59 = 0; v60 = a5; v61 = a4; do { *v6 = (150 * v5[1] + 77 * v5[2] + 29 * *v5 - 32640) >> 8; v6[1] = (150 * v5[4] + 77 * v5[5] + 29 * v5[3] - 32640) >> 8; v6[2] = (150 * v5[7] + 77 * v5[8] + 29 * v5[6] - 32640) >> 8; v6[3] = (150 * v5[10] + 77 * v5[11] + 29 * v5[9] - 32640) >> 8; v6[4] = (150 * v5[13] + 77 * v5[14] + 29 * v5[12] - 32640) >> 8; v6[5] = (150 * v5[16] + 77 * v5[17] + 29 * v5[15] - 32640) >> 8; v6[6] = (150 * v5[19] + 77 * v5[20] + 29 * v5[18] - 32640) >> 8; v6[7] = (150 * v5[22] + 77 * v5[23] + 29 * v5[21] - 32640) >> 8; v6[64] = (150 * v5[25] + 77 * v5[26] + 29 * v5[24] - 32640) >> 8; v6[65] = (150 * v5[28] + 77 * v5[29] + 29 * v5[27] - 32640) >> 8; v6[66] = (150 * v5[31] + 77 * v5[32] + 29 * v5[30] - 32640) >> 8; v6[67] = (150 * v5[34] + 77 * v5[35] + 29 * v5[33] - 32640) >> 8; v6[68] = (150 * v5[37] + 77 * v5[38] + 29 * v5[36] - 32640) >> 8; v6[69] = (150 * v5[40] + 77 * v5[41] + 29 * v5[39] - 32640) >> 8; v6[70] = (150 * v5[43] + 77 * v5[44] + 29 * v5[42] - 32640) >> 8; v6[71] = (150 * v5[46] + 77 * v5[47] + 29 * v5[45] - 32640) >> 8; v7 = v5[3] + *v5; v8 = v5[4] + v5[1]; v9 = v5[5] + v5[2]; v10 = v5[9] + v5[6]; v11 = v5[10] + v5[7]; v12 = v5[11] + v5[8]; v13 = v5[15] + v5[12]; v14 = v5[16] + v5[13]; v15 = v5[17] + v5[14]; v16 = v5[21] + v5[18]; v17 = v5[22] + v5[19]; v18 = v5[23] + v5[20]; v19 = v5[27] + v5[24]; v20 = v5[28] + v5[25]; v21 = v5[29] + v5[26]; v22 = v5[33] + v5[30]; v23 = v5[34] + v5[31]; v24 = v5[35] + v5[32]; v25 = v5[39] + v5[36]; v26 = v5[40] + v5[37]; v27 = v5[41] + v5[38]; v28 = v5[45] + v5[42]; v29 = v5[46] + v5[43]; v30 = v5[47] + v5[44]; v31 = &v5[a2]; v6[8] = (150 * v31[1] + 77 * v31[2] + 29 * *v31 - 32640) >> 8; v6[9] = (150 * v31[4] + 77 * v31[5] + 29 * v31[3] - 32640) >> 8; v6[10] = (150 * v31[7] + 77 * v31[8] + 29 * v31[6] - 32640) >> 8; v6[11] = (150 * v31[10] + 77 * v31[11] + 29 * v31[9] - 32640) >> 8; v6[12] = (150 * v31[13] + 77 * v31[14] + 29 * v31[12] - 32640) >> 8; v6[13] = (150 * v31[16] + 77 * v31[17] + 29 * v31[15] - 32640) >> 8; v6[14] = (150 * v31[19] + 77 * v31[20] + 29 * v31[18] - 32640) >> 8; v6[15] = (150 * v31[22] + 77 * v31[23] + 29 * v31[21] - 32640) >> 8; v6[72] = (150 * v31[25] + 77 * v31[26] + 29 * v31[24] - 32640) >> 8; v6[73] = (150 * v31[28] + 77 * v31[29] + 29 * v31[27] - 32640) >> 8; v6[74] = (150 * v31[31] + 77 * v31[32] + 29 * v31[30] - 32640) >> 8; v6[75] = (150 * v31[34] + 77 * v31[35] + 29 * v31[33] - 32640) >> 8; v6[76] = (150 * v31[37] + 77 * v31[38] + 29 * v31[36] - 32640) >> 8; v6[77] = (150 * v31[40] + 77 * v31[41] + 29 * v31[39] - 32640) >> 8; v6[78] = (150 * v31[43] + 77 * v31[44] + 29 * v31[42] - 32640) >> 8; v6[79] = (150 * v31[46] + 77 * v31[47] + 29 * v31[45] - 32640) >> 8; v32 = v7 + v31[3] + *v31; v33 = v8 + v31[4] + v31[1]; v34 = v9 + v31[5] + v31[2]; *v61 = (((v7 + v31[3] + *v31) << 7) - 43 * v34 - 85 * v33 + 512) >> 10; v6 += 16; *v60 = (-21 * v32 + (v34 << 7) - 107 * v33 + 512) >> 10; v35 = v10 + v31[9] + v31[6]; v36 = v11 + v31[10] + v31[7]; v37 = v12 + v31[11] + v31[8]; v61[1] = (((v10 + v31[9] + v31[6]) << 7) - 43 * v37 - 85 * v36 + 512) >> 10; v60[1] = (-21 * v35 + (v37 << 7) - 107 * v36 + 512) >> 10; v38 = v13 + v31[15] + v31[12]; v39 = v14 + v31[16] + v31[13]; v40 = v15 + v31[17] + v31[14]; v61[2] = (((v13 + v31[15] + v31[12]) << 7) - 43 * v40 - 85 * v39 + 512) >> 10; v60[2] = (-21 * v38 + (v40 << 7) - 107 * v39 + 512) >> 10; v41 = v16 + v31[21] + v31[18]; v42 = v17 + v31[22] + v31[19]; v43 = v18 + v31[23] + v31[20]; v61[3] = (((v16 + v31[21] + v31[18]) << 7) - 43 * v43 - 85 * v42 + 512) >> 10; v60[3] = (-21 * v41 + (v43 << 7) - 107 * v42 + 512) >> 10; v44 = v19 + v31[27] + v31[24]; v45 = v20 + v31[28] + v31[25]; v46 = v21 + v31[29] + v31[26]; v61[4] = (((v19 + v31[27] + v31[24]) << 7) - 43 * v46 - 85 * v45 + 512) >> 10; v60[4] = (-21 * v44 + (v46 << 7) - 107 * v45 + 512) >> 10; v47 = v22 + v31[33] + v31[30]; v48 = v23 + v31[34] + v31[31]; v49 = v24 + v31[35] + v31[32]; v61[5] = (((v22 + v31[33] + v31[30]) << 7) - 43 * v49 - 85 * v48 + 512) >> 10; v60[5] = (-21 * v47 + (v49 << 7) - 107 * v48 + 512) >> 10; v50 = v25 + v31[39] + v31[36]; v51 = v26 + v31[40] + v31[37]; v52 = v27 + v31[41] + v31[38]; v61[6] = (((v25 + v31[39] + v31[36]) << 7) - 43 * v52 - 85 * v51 + 512) >> 10; v60[6] = (-21 * v50 + (v52 << 7) - 107 * v51 + 512) >> 10; v53 = v28 + v31[45] + v31[42]; v54 = v29 + v31[46] + v31[43]; v55 = v30 + v31[47] + v31[44]; v61[7] = (((v28 + v31[45] + v31[42]) << 7) - 43 * v55 - 85 * v54 + 512) >> 10; v60[7] = (-21 * v53 + (v55 << 7) - 107 * v54 + 512) >> 10; result = v59 + 2; v61 += 8; v60 += 8; v5 = &v31[a2]; v58 = __OFSUB__(v59 + 2, 8); v57 = v59 - 6 < 0; v59 += 2; } while ( v57 ^ v58 ); return result; } //----- (0079EC70) -------------------------------------------------------- unsigned int __cdecl sub_79EC70(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx unsigned int v16; // edx _WORD *v17; // esi int v18; // edx _WORD *v19; // ecx __int16 v20; // di __int16 v21; // si __int16 v22; // bp __int16 v23; // bx int v24; // ecx int v25; // edx _WORD *v26; // edi _WORD *v27; // esi signed __int16 *v28; // ebp int v29; // ebx __int16 v30; // ax int v31; // eax char v32; // [esp+1Fh] [ebp-32Dh] int v33; // [esp+320h] [ebp-2Ch] unsigned int v34; // [esp+324h] [ebp-28h] int v35; // [esp+328h] [ebp-24h] int v36; // [esp+32Ch] [ebp-20h] int v37; // [esp+330h] [ebp-1Ch] int v38; // [esp+334h] [ebp-18h] int v39; // [esp+338h] [ebp-14h] result = (unsigned int)&v32 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v34 = (unsigned int)&v32 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v38 = v7; v37 = v8; v39 = 0; v35 = v9; v36 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v34 + 2 * v12) = (150 * v14 + 77 * v13 + 29 * v15 - 32640) >> 8; v16 = v34; *(_WORD *)(v34 + 2 * v12 + 256) = (-85 * v14 - 43 * v13 + (v15 << 7) + 128) >> 8; *(_WORD *)(v16 + 2 * v12++ + 512) = (-107 * v14 + (v13 << 7) - 21 * v15 + 128) >> 8; v10 = v39++ + 1; } while ( v39 < a3 ); v7 = v38; v8 = v37; v9 = v35; v6 = v36; } if ( v10 < 16 ) { v33 = v34 + v9; v17 = (_WORD *)(v34 + 2 * (v10 + v8)); v35 = v9; v36 = v6; v18 = v34 + v9; do { ++v10; *v17 = *(_WORD *)(v18 + 2 * a3 - 2); v17[128] = *(_WORD *)(v18 + 2 * a3 + 254); v17[256] = *(_WORD *)(v18 + 2 * a3 + 510); ++v17; } while ( v10 < 16 ); v9 = v35; v6 = v36; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); result = v34; } if ( v6 < 8 ) { v19 = (_WORD *)(result + 32 * v6); do { v20 = v19[254]; v21 = *(v19 - 1); *v19 = *(v19 - 16); v22 = v19[127]; v19[128] = v19[112]; ++v6; v19[256] = v19[240]; v19[1] = *(v19 - 15); v19[129] = v19[113]; v19[257] = v19[241]; v19[2] = *(v19 - 14); v19[130] = v19[114]; v19[258] = v19[242]; v19[3] = *(v19 - 13); v19[131] = v19[115]; v19[259] = v19[243]; v19[4] = *(v19 - 12); v19[132] = v19[116]; v19[260] = v19[244]; v19[5] = *(v19 - 11); v19[133] = v19[117]; v19[261] = v19[245]; v19[6] = *(v19 - 10); v19[134] = v19[118]; v19[262] = v19[246]; v19[7] = *(v19 - 9); v19[135] = v19[119]; v19[263] = v19[247]; v19[8] = *(v19 - 8); v19[136] = v19[120]; v19[264] = v19[248]; v19[9] = *(v19 - 7); v19[137] = v19[121]; v19[265] = v19[249]; v19[10] = *(v19 - 6); v19[138] = v19[122]; v19[266] = v19[250]; v19[11] = *(v19 - 5); v19[139] = v19[123]; v19[267] = v19[251]; v19[12] = *(v19 - 4); v19[140] = v19[124]; v19[268] = v19[252]; v19[13] = *(v19 - 3); v19[141] = v19[125]; v19[269] = v19[253]; v19[14] = *(v19 - 2); v19[142] = v19[126]; v23 = v19[255]; v19[270] = v20; v19[15] = v21; v19[143] = v22; v19[271] = v23; v19 += 16; } while ( v6 < 8 ); } v24 = 0; v25 = 0; do { v26 = (_WORD *)(a5 + 2 * v24); v27 = (_WORD *)(result + 2 * v25); v28 = (signed __int16 *)(result + 2 * v25); v29 = result + 2 * v25 + 32; v33 = v25; v34 = result; do { *v26 = *v27; v30 = v27[8]; ++v27; v26[64] = v30; v26[128] = (v28[128] + v28[129] + 1) >> 1; v31 = (v28[256] + v28[257] + 1) >> 1; v28 += 2; v26[192] = v31; ++v26; } while ( v29 > (signed int)v28 ); result = v34; v24 += 8; v25 = v33 + 16; } while ( v33 + 16 < 128 ); return result; } //----- (0079F870) -------------------------------------------------------- unsigned int __cdecl sub_79F870(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp int v10; // eax int v11; // edi int v12; // esi int v13; // ebx int v14; // ebp int v15; // ecx _WORD *v16; // esi int v17; // edx _WORD *v18; // ecx __int16 v19; // di __int16 v20; // si __int16 v21; // bp __int16 v22; // bx int v23; // ecx int v24; // edx _WORD *v25; // edi _WORD *v26; // esi signed __int16 *v27; // ebp int v28; // ebx __int16 v29; // ax int v30; // eax char v31; // [esp+1Fh] [ebp-32Dh] int v32; // [esp+320h] [ebp-2Ch] unsigned int v33; // [esp+324h] [ebp-28h] int v34; // [esp+328h] [ebp-24h] int v35; // [esp+32Ch] [ebp-20h] int v36; // [esp+330h] [ebp-1Ch] int v37; // [esp+334h] [ebp-18h] int v38; // [esp+338h] [ebp-14h] result = (unsigned int)&v31 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v33 = (unsigned int)&v31 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v37 = v7; v36 = v8; v38 = 0; v34 = v9; v35 = v6; do { v13 = *(unsigned __int8 *)(v11 + a1); v14 = *(unsigned __int8 *)(v11 + a1 + 1); v15 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v33 + 2 * v12) = (150 * v14 + 29 * v13 + 77 * v15 - 32640) >> 8; *(_WORD *)(v33 + 2 * v12 + 256) = (-85 * v14 + (v13 << 7) - 43 * v15 + 128) >> 8; *(_WORD *)(v33 + 2 * v12++ + 512) = (-107 * v14 - 21 * v13 + (v15 << 7) + 128) >> 8; v10 = v38++ + 1; } while ( v38 < a3 ); v7 = v37; v8 = v36; v9 = v34; v6 = v35; } if ( v10 < 16 ) { v32 = v33 + v9; v16 = (_WORD *)(v33 + 2 * (v10 + v8)); v34 = v9; v35 = v6; v17 = v33 + v9; do { ++v10; *v16 = *(_WORD *)(v17 + 2 * a3 - 2); v16[128] = *(_WORD *)(v17 + 2 * a3 + 254); v16[256] = *(_WORD *)(v17 + 2 * a3 + 510); ++v16; } while ( v10 < 16 ); v9 = v34; v6 = v35; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); result = v33; } if ( v6 < 8 ) { v18 = (_WORD *)(result + 32 * v6); do { v19 = v18[254]; v20 = *(v18 - 1); *v18 = *(v18 - 16); v21 = v18[127]; v18[128] = v18[112]; ++v6; v18[256] = v18[240]; v18[1] = *(v18 - 15); v18[129] = v18[113]; v18[257] = v18[241]; v18[2] = *(v18 - 14); v18[130] = v18[114]; v18[258] = v18[242]; v18[3] = *(v18 - 13); v18[131] = v18[115]; v18[259] = v18[243]; v18[4] = *(v18 - 12); v18[132] = v18[116]; v18[260] = v18[244]; v18[5] = *(v18 - 11); v18[133] = v18[117]; v18[261] = v18[245]; v18[6] = *(v18 - 10); v18[134] = v18[118]; v18[262] = v18[246]; v18[7] = *(v18 - 9); v18[135] = v18[119]; v18[263] = v18[247]; v18[8] = *(v18 - 8); v18[136] = v18[120]; v18[264] = v18[248]; v18[9] = *(v18 - 7); v18[137] = v18[121]; v18[265] = v18[249]; v18[10] = *(v18 - 6); v18[138] = v18[122]; v18[266] = v18[250]; v18[11] = *(v18 - 5); v18[139] = v18[123]; v18[267] = v18[251]; v18[12] = *(v18 - 4); v18[140] = v18[124]; v18[268] = v18[252]; v18[13] = *(v18 - 3); v18[141] = v18[125]; v18[269] = v18[253]; v18[14] = *(v18 - 2); v18[142] = v18[126]; v22 = v18[255]; v18[270] = v19; v18[15] = v20; v18[143] = v21; v18[271] = v22; v18 += 16; } while ( v6 < 8 ); } v23 = 0; v24 = 0; do { v25 = (_WORD *)(a5 + 2 * v23); v26 = (_WORD *)(result + 2 * v24); v27 = (signed __int16 *)(result + 2 * v24); v28 = result + 2 * v24 + 32; v32 = v24; v33 = result; do { *v25 = *v26; v29 = v26[8]; ++v26; v25[64] = v29; v25[128] = (v27[128] + v27[129] + 1) >> 1; v30 = (v27[256] + v27[257] + 1) >> 1; v27 += 2; v25[192] = v30; ++v25; } while ( v28 > (signed int)v27 ); result = v33; v23 += 8; v24 = v32 + 16; } while ( v32 + 16 < 128 ); return result; } //----- (007A0470) -------------------------------------------------------- unsigned int __cdecl sub_7A0470(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // esi int v9; // edi int v10; // eax int v11; // ebp int v12; // ebx int v13; // esi int v14; // eax int v15; // edx int v16; // ecx __int16 v17; // di unsigned int v18; // esi int v19; // ebp int v20; // eax _WORD *v21; // ebx int v22; // edx int v23; // ecx int v24; // ebx _WORD *v25; // edi _WORD *v26; // ebp __int16 v27; // ax signed int v28; // edx int v29; // ebx char v30; // [esp+1Fh] [ebp-22Dh] unsigned int v31; // [esp+220h] [ebp-2Ch] unsigned int v32; // [esp+224h] [ebp-28h] int v33; // [esp+228h] [ebp-24h] int v34; // [esp+22Ch] [ebp-20h] int v35; // [esp+230h] [ebp-1Ch] int v36; // [esp+234h] [ebp-18h] int v37; // [esp+238h] [ebp-14h] result = (unsigned int)&v30 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v31 = (unsigned int)&v30 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v36 = v7; v35 = v8; v37 = 0; v13 = a1; v33 = v9; v34 = v6; do { v32 = v11; v14 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13)); v15 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 1)); v16 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 2)); v17 = *(unsigned __int8 *)(v11 + v13 + 3) - 128; *(_WORD *)(v31 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8; v18 = v31; *(_WORD *)(v31 + 2 * v12 + 128) = (-85 * v15 - 43 * v14 + (v16 << 7) + 128) >> 8; v19 = v32; *(_WORD *)(v18 + 2 * v12 + 256) = (-107 * v15 + (v14 << 7) - 21 * v16 + 128) >> 8; v11 = v19 + 4; v20 = v37; *(_WORD *)(v18 + 2 * v12++ + 384) = v17; v10 = v20 + 1; v37 = v10; v13 = a1; } while ( v10 < a3 ); v7 = v36; v8 = v35; v9 = v33; v6 = v34; } if ( v10 < 8 ) { v32 = v31 + v9; v21 = (_WORD *)(v31 + 2 * (v10 + v8)); v33 = v9; v34 = v6; v22 = v31 + v9; do { ++v10; *v21 = *(_WORD *)(v22 + 2 * a3 - 2); v21[64] = *(_WORD *)(v22 + 2 * a3 + 126); v21[128] = *(_WORD *)(v22 + 2 * a3 + 254); v21[192] = *(_WORD *)(v22 + 2 * a3 + 382); ++v21; } while ( v10 < 8 ); v9 = v33; v6 = v34; } v7 += a2; v8 += 8; v9 += 16; ++v6; } while ( v6 < a4 ); result = v31; } if ( v6 < 8 ) { v23 = 8 * v6; v24 = result + 16 * v6; do { v25 = (_WORD *)v24; v26 = (_WORD *)(result + 2 * v23); v31 = result; do { *v26 = *(v25 - 8); v26[64] = v25[56]; v26[128] = v25[120]; v27 = v25[184]; ++v25; v26[192] = v27; ++v26; } while ( v24 + 16 > (signed int)v25 ); result = v31; v23 += 8; v24 += 16; ++v6; } while ( v6 < 8 ); } v28 = 0; do { v29 = v28; do { *(_WORD *)(a5 + 2 * v29) = *(_WORD *)(result + 2 * v29); *(_WORD *)(a5 + 2 * v29 + 128) = *(_WORD *)(result + 2 * v29 + 128); *(_WORD *)(a5 + 2 * v29 + 256) = *(_WORD *)(result + 2 * v29 + 256); *(_WORD *)(a5 + 2 * v29 + 384) = *(_WORD *)(result + 2 * v29 + 384); ++v29; } while ( v28 + 8 > v29 ); v28 += 8; } while ( v28 < 64 ); return result; } //----- (007A0DF0) -------------------------------------------------------- unsigned int __cdecl sub_7A0DF0(int a1, int a2, int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // esi int v9; // edi int v10; // eax int v11; // ebp int v12; // ebx int v13; // esi int v14; // eax int v15; // edx int v16; // ecx __int16 v17; // di unsigned int v18; // esi int v19; // ebp int v20; // eax _WORD *v21; // ebx int v22; // edx int v23; // ecx int v24; // ebx _WORD *v25; // edi _WORD *v26; // ebp __int16 v27; // ax int v28; // ecx int v29; // edx _WORD *v30; // edi _WORD *v31; // esi signed __int16 *v32; // ebp int v33; // ebx int v34; // eax char v35; // [esp+1Fh] [ebp-82Dh] unsigned int v36; // [esp+820h] [ebp-2Ch] unsigned int v37; // [esp+824h] [ebp-28h] int v38; // [esp+828h] [ebp-24h] int v39; // [esp+82Ch] [ebp-20h] int v40; // [esp+830h] [ebp-1Ch] int v41; // [esp+834h] [ebp-18h] int v42; // [esp+838h] [ebp-14h] result = (unsigned int)&v35 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v36 = (unsigned int)&v35 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v41 = v7; v40 = v8; v42 = 0; v13 = a1; v38 = v9; v39 = v6; do { v37 = v11; v14 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13)); v15 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 1)); v16 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 2)); v17 = *(unsigned __int8 *)(v11 + v13 + 3) - 128; *(_WORD *)(v36 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8; v18 = v36; *(_WORD *)(v36 + 2 * v12 + 256) = (-85 * v15 - 43 * v14 + (v16 << 7) + 128) >> 8; v19 = v37; *(_WORD *)(v18 + 2 * v12 + 512) = (-107 * v15 + (v14 << 7) - 21 * v16 + 128) >> 8; v11 = v19 + 4; v20 = v42; *(_WORD *)(v18 + 2 * v12++ + 768) = v17; v10 = v20 + 1; v42 = v10; v13 = a1; } while ( v10 < a3 ); v7 = v41; v8 = v40; v9 = v38; v6 = v39; } if ( v10 < 16 ) { v37 = v36 + v9; v21 = (_WORD *)(v36 + 2 * (v10 + v8)); v38 = v9; v39 = v6; v22 = v36 + v9; do { ++v10; *v21 = *(_WORD *)(v22 + 2 * a3 - 2); v21[128] = *(_WORD *)(v22 + 2 * a3 + 254); v21[256] = *(_WORD *)(v22 + 2 * a3 + 510); v21[384] = *(_WORD *)(v22 + 2 * a3 + 766); ++v21; } while ( v10 < 16 ); v9 = v38; v6 = v39; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); result = v36; } if ( v6 < 8 ) { v23 = 16 * v6; v24 = result + 32 * v6; do { v25 = (_WORD *)v24; v26 = (_WORD *)(result + 2 * v23); v36 = result; do { *v26 = *(v25 - 16); v26[128] = v25[112]; v26[256] = v25[240]; v27 = v25[368]; ++v25; v26[384] = v27; ++v26; } while ( v24 + 32 > (signed int)v25 ); result = v36; v23 += 16; v24 += 32; ++v6; } while ( v6 < 8 ); } v28 = 0; v29 = 0; do { v30 = (_WORD *)(a5 + 2 * v28); v31 = (_WORD *)(result + 2 * v29); v32 = (signed __int16 *)(result + 2 * v29); v33 = result + 2 * v29 + 32; v37 = v29; v36 = result; do { *v30 = *v31; v30[64] = v31[8]; v30[128] = (v32[128] + v32[129] + 1) >> 1; v34 = (v32[256] + v32[257] + 1) >> 1; v32 += 2; v30[192] = v34; v30[256] = v31[384]; LOWORD(v34) = v31[392]; ++v31; v30[320] = v34; ++v30; } while ( v33 > (signed int)v32 ); result = v36; v28 += 8; v29 = v37 + 16; } while ( (signed int)(v37 + 16) < 128 ); return result; } //----- (007A1A50) -------------------------------------------------------- int __cdecl sub_7A1A50(int a1, int a2, int a3, signed int a4, int a5) { unsigned int v5; // eax signed int v6; // edx int v7; // ecx int v8; // esi int v9; // edi int v10; // eax int v11; // ebp int v12; // ebx int v13; // esi int v14; // eax int v15; // edx int v16; // ecx __int16 v17; // di unsigned int v18; // esi int v19; // ebp int v20; // eax _WORD *v21; // ebx int v22; // edx int v23; // ecx int v24; // ebx _WORD *v25; // edi _WORD *v26; // ebp __int16 v27; // ax int v28; // edx int v29; // ecx int v30; // ebx _WORD *v31; // edi _WORD *v32; // esi signed __int16 *v33; // ebp int result; // eax __int16 v35; // cx char v36; // [esp+1Fh] [ebp-82Dh] unsigned int v37; // [esp+820h] [ebp-2Ch] int v38; // [esp+824h] [ebp-28h] unsigned int v39; // [esp+828h] [ebp-24h] int v40; // [esp+82Ch] [ebp-20h] int v41; // [esp+830h] [ebp-1Ch] int v42; // [esp+834h] [ebp-18h] int v43; // [esp+838h] [ebp-14h] v5 = (unsigned int)&v36 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v37 = (unsigned int)&v36 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v42 = v7; v41 = v8; v43 = 0; v13 = a1; v38 = v9; v40 = v6; do { v39 = v11; v14 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13)); v15 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 1)); v16 = (signed __int16)(255 - *(unsigned __int8 *)(v11 + v13 + 2)); v17 = *(unsigned __int8 *)(v11 + v13 + 3) - 128; *(_WORD *)(v37 + 2 * v12) = (150 * v15 + 77 * v14 + 29 * v16 - 32640) >> 8; v18 = v37; *(_WORD *)(v37 + 2 * v12 + 512) = (-85 * v15 - 43 * v14 + (v16 << 7) + 128) >> 8; v19 = v39; *(_WORD *)(v18 + 2 * v12 + 1024) = (-107 * v15 + (v14 << 7) - 21 * v16 + 128) >> 8; v11 = v19 + 4; v20 = v43; *(_WORD *)(v18 + 2 * v12++ + 1536) = v17; v10 = v20 + 1; v43 = v10; v13 = a1; } while ( v10 < a3 ); v7 = v42; v8 = v41; v9 = v38; v6 = v40; } if ( v10 < 16 ) { v39 = v37 + v9; v21 = (_WORD *)(v37 + 2 * (v10 + v8)); v38 = v9; v40 = v6; v22 = v37 + v9; do { ++v10; *v21 = *(_WORD *)(v22 + 2 * a3 - 2); v21[256] = *(_WORD *)(v22 + 2 * a3 + 510); v21[512] = *(_WORD *)(v22 + 2 * a3 + 1022); v21[768] = *(_WORD *)(v22 + 2 * a3 + 1534); ++v21; } while ( v10 < 16 ); v9 = v38; v6 = v40; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); v5 = v37; } if ( v6 < 16 ) { v23 = 16 * v6; v24 = v5 + 32 * v6; do { v25 = (_WORD *)v24; v26 = (_WORD *)(v5 + 2 * v23); v37 = v5; do { *v26 = *(v25 - 16); v26[256] = v25[240]; v26[512] = v25[496]; v27 = v25[752]; ++v25; v26[768] = v27; ++v26; } while ( v24 + 32 > (signed int)v25 ); v5 = v37; v23 += 16; v24 += 32; ++v6; } while ( v6 < 16 ); } v28 = 0; v29 = 0; v30 = 0; v37 = v5; do { v31 = (_WORD *)(a5 + 2 * v28); v32 = (_WORD *)(v37 + 2 * v29); v33 = (signed __int16 *)(v37 + 2 * v30); result = (int)(v33 + 16); v38 = v29; v39 = v30; do { *v31 = *v32; v31[64] = v32[8]; v31[128] = v32[128]; v31[192] = v32[136]; v31[256] = (v33[272] + v33[257] + v33[256] + v33[273] + 2) >> 2; v31[320] = (v33[528] + v33[513] + v33[512] + v33[529] + 2) >> 2; v33 += 2; v31[384] = v32[768]; v31[448] = v32[776]; v31[512] = v32[896]; v35 = v32[904]; ++v32; v31[576] = v35; ++v31; } while ( result > (signed int)v33 ); v28 += 8; v29 = v38 + 16; v30 = v39 + 32; } while ( (signed int)(v39 + 32) < 256 ); return result; } //----- (007A1E30) -------------------------------------------------------- unsigned __int8 *__cdecl sub_7A1E30(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5, _WORD *a6) { unsigned __int8 *result; // eax _WORD *v7; // edx int v8; // ST64_4 int v9; // ST60_4 int v10; // ST5C_4 int v11; // ST58_4 int v12; // ST54_4 int v13; // ST50_4 int v14; // ST4C_4 int v15; // ST48_4 int v16; // ST44_4 int v17; // ST40_4 int v18; // ST3C_4 int v19; // ST38_4 int v20; // ST34_4 int v21; // ST30_4 int v22; // ST2C_4 int v23; // ST28_4 int v24; // ST24_4 int v25; // ST20_4 int v26; // ST1C_4 int v27; // ST18_4 int v28; // ST14_4 int v29; // ST10_4 int v30; // ST0C_4 int v31; // ST08_4 unsigned __int8 *v32; // eax int v33; // esi int v34; // ebp int v35; // ebx int v36; // esi int v37; // ebp int v38; // ebx int v39; // esi int v40; // ebp int v41; // ebx int v42; // esi int v43; // ebp int v44; // ebx int v45; // esi int v46; // ebp int v47; // ebx int v48; // ebp int v49; // ebx int v50; // ecx int v51; // ecx int v52; // ebx int v53; // ebp int v54; // esi int v55; // ebp int v56; // ebx bool v57; // sf unsigned __int8 v58; // of int v59; // [esp+4h] [ebp-80h] _WORD *v60; // [esp+68h] [ebp-1Ch] _WORD *v61; // [esp+6Ch] [ebp-18h] _WORD *v62; // [esp+70h] [ebp-14h] result = a1; v7 = a3; v61 = a5; v62 = a4; v59 = 0; v60 = a6; do { *v7 = (-150 * result[1] - 77 * *result - 29 * result[2] + 32640) >> 8; v7[1] = (-150 * result[5] - 77 * result[4] - 29 * result[6] + 32640) >> 8; v7[2] = (-150 * result[9] - 77 * result[8] - 29 * result[10] + 32640) >> 8; v7[3] = (-150 * result[13] - 77 * result[12] - 29 * result[14] + 32640) >> 8; v7[4] = (-150 * result[17] - 77 * result[16] - 29 * result[18] + 32640) >> 8; v7[5] = (-150 * result[21] - 77 * result[20] - 29 * result[22] + 32640) >> 8; v7[6] = (-150 * result[25] - 77 * result[24] - 29 * result[26] + 32640) >> 8; v7[7] = (-150 * result[29] - 77 * result[28] - 29 * result[30] + 32640) >> 8; v7[64] = (-150 * result[33] - 77 * result[32] - 29 * result[34] + 32640) >> 8; v7[65] = (-150 * result[37] - 77 * result[36] - 29 * result[38] + 32640) >> 8; v7[66] = (-150 * result[41] - 77 * result[40] - 29 * result[42] + 32640) >> 8; v7[67] = (-150 * result[45] - 77 * result[44] - 29 * result[46] + 32640) >> 8; v7[68] = (-150 * result[49] - 77 * result[48] - 29 * result[50] + 32640) >> 8; v7[69] = (-150 * result[53] - 77 * result[52] - 29 * result[54] + 32640) >> 8; v7[70] = (-150 * result[57] - 77 * result[56] - 29 * result[58] + 32640) >> 8; v7[71] = (-150 * result[61] - 77 * result[60] - 29 * result[62] + 32640) >> 8; *v60 = result[3] - 128; v60[1] = result[7] - 128; v60[2] = result[11] - 128; v60[3] = result[15] - 128; v60[4] = result[19] - 128; v60[5] = result[23] - 128; v60[6] = result[27] - 128; v60[7] = result[31] - 128; v60[64] = result[35] - 128; v60[65] = result[39] - 128; v60[66] = result[43] - 128; v60[67] = result[47] - 128; v60[68] = result[51] - 128; v60[69] = result[55] - 128; v60[70] = result[59] - 128; v60[71] = result[63] - 128; v8 = result[4] + *result; v9 = result[5] + result[1]; v10 = result[6] + result[2]; v11 = result[12] + result[8]; v12 = result[13] + result[9]; v13 = result[14] + result[10]; v14 = result[20] + result[16]; v15 = result[21] + result[17]; v16 = result[22] + result[18]; v17 = result[28] + result[24]; v18 = result[29] + result[25]; v19 = result[30] + result[26]; v20 = result[36] + result[32]; v21 = result[37] + result[33]; v22 = result[38] + result[34]; v23 = result[44] + result[40]; v24 = result[45] + result[41]; v25 = result[46] + result[42]; v26 = result[52] + result[48]; v27 = result[53] + result[49]; v28 = result[54] + result[50]; v29 = result[60] + result[56]; v30 = result[61] + result[57]; v31 = result[62] + result[58]; v32 = &result[a2]; v7[8] = (-150 * v32[1] - 77 * *v32 - 29 * v32[2] + 32640) >> 8; v7[9] = (-150 * v32[5] - 77 * v32[4] - 29 * v32[6] + 32640) >> 8; v7[10] = (-150 * v32[9] - 77 * v32[8] - 29 * v32[10] + 32640) >> 8; v7[11] = (-150 * v32[13] - 77 * v32[12] - 29 * v32[14] + 32640) >> 8; v7[12] = (-150 * v32[17] - 77 * v32[16] - 29 * v32[18] + 32640) >> 8; v7[13] = (-150 * v32[21] - 77 * v32[20] - 29 * v32[22] + 32640) >> 8; v7[14] = (-150 * v32[25] - 77 * v32[24] - 29 * v32[26] + 32640) >> 8; v7[15] = (-150 * v32[29] - 77 * v32[28] - 29 * v32[30] + 32640) >> 8; v7[72] = (-150 * v32[33] - 77 * v32[32] - 29 * v32[34] + 32640) >> 8; v7[73] = (-150 * v32[37] - 77 * v32[36] - 29 * v32[38] + 32640) >> 8; v7[74] = (-150 * v32[41] - 77 * v32[40] - 29 * v32[42] + 32640) >> 8; v7[75] = (-150 * v32[45] - 77 * v32[44] - 29 * v32[46] + 32640) >> 8; v7[76] = (-150 * v32[49] - 77 * v32[48] - 29 * v32[50] + 32640) >> 8; v7[77] = (-150 * v32[53] - 77 * v32[52] - 29 * v32[54] + 32640) >> 8; v7[78] = (-150 * v32[57] - 77 * v32[56] - 29 * v32[58] + 32640) >> 8; v7[79] = (-150 * v32[61] - 77 * v32[60] - 29 * v32[62] + 32640) >> 8; v60[8] = v32[3] - 128; v60[9] = v32[7] - 128; v60[10] = v32[11] - 128; v60[11] = v32[15] - 128; v60[12] = v32[19] - 128; v60[13] = v32[23] - 128; v60[14] = v32[27] - 128; v60[15] = v32[31] - 128; v60[72] = v32[35] - 128; v60[73] = v32[39] - 128; v60[74] = v32[43] - 128; v60[75] = v32[47] - 128; v60[76] = v32[51] - 128; v60[77] = v32[55] - 128; v60[78] = v32[59] - 128; v60[79] = v32[63] - 128; v33 = 1020 - (v8 + v32[4] + *v32); v34 = 1020 - (v9 + v32[5] + v32[1]); v35 = 1020 - (v10 + v32[6] + v32[2]); *v62 = (-85 * v34 - 43 * v33 + ((1020 - (v10 + v32[6] + v32[2])) << 7) + 512) >> 10; *v61 = (-107 * v34 + (v33 << 7) - 21 * v35 + 512) >> 10; v36 = 1020 - (v11 + v32[12] + v32[8]); v37 = 1020 - (v12 + v32[13] + v32[9]); v38 = 1020 - (v13 + v32[14] + v32[10]); v62[1] = (-85 * v37 - 43 * v36 + ((1020 - (v13 + v32[14] + v32[10])) << 7) + 512) >> 10; v61[1] = (-107 * v37 + (v36 << 7) - 21 * v38 + 512) >> 10; v39 = 1020 - (v14 + v32[20] + v32[16]); v40 = 1020 - (v15 + v32[21] + v32[17]); v41 = 1020 - (v16 + v32[22] + v32[18]); v62[2] = (-85 * v40 - 43 * v39 + ((1020 - (v16 + v32[22] + v32[18])) << 7) + 512) >> 10; v61[2] = (-107 * v40 + (v39 << 7) - 21 * v41 + 512) >> 10; v42 = 1020 - (v17 + v32[28] + v32[24]); v43 = 1020 - (v18 + v32[29] + v32[25]); v44 = 1020 - (v19 + v32[30] + v32[26]); v62[3] = (-85 * v43 - 43 * v42 + ((1020 - (v19 + v32[30] + v32[26])) << 7) + 512) >> 10; v61[3] = (-107 * v43 + (v42 << 7) - 21 * v44 + 512) >> 10; v45 = 1020 - (v20 + v32[36] + v32[32]); v46 = 1020 - (v21 + v32[37] + v32[33]); v47 = 1020 - (v22 + v32[38] + v32[34]); v62[4] = (-85 * v46 - 43 * v45 + ((1020 - (v22 + v32[38] + v32[34])) << 7) + 512) >> 10; v61[4] = (-107 * v46 + (v45 << 7) - 21 * v47 + 512) >> 10; v48 = 1020 - (v23 + v32[44] + v32[40]); v49 = 1020 - (v24 + v32[45] + v32[41]); v50 = 1020 - (v25 + v32[46] + v32[42]); v62[5] = (-85 * v49 - 43 * v48 + ((1020 - (v25 + v32[46] + v32[42])) << 7) + 512) >> 10; v61[5] = (-107 * v49 + (v48 << 7) - 21 * v50 + 512) >> 10; v51 = 1020 - (v26 + v32[52] + v32[48]); v52 = 1020 - (v27 + v32[53] + v32[49]); v53 = 1020 - (v28 + v32[54] + v32[50]); v62[6] = (-85 * v52 - 43 * v51 + ((1020 - (v28 + v32[54] + v32[50])) << 7) + 512) >> 10; v61[6] = (-107 * v52 + (v51 << 7) - 21 * v53 + 512) >> 10; v54 = 1020 - (v29 + v32[60] + v32[56]); v55 = 1020 - (v30 + v32[61] + v32[57]); v56 = 1020 - (v31 + v32[62] + v32[58]); v62[7] = (-85 * v55 - 43 * v54 + ((1020 - (v31 + v32[62] + v32[58])) << 7) + 512) >> 10; v7 += 16; v61[7] = (-107 * v55 + (v54 << 7) - 21 * v56 + 512) >> 10; v62 += 8; v61 += 8; result = &v32[a2]; v60 += 16; v58 = __OFSUB__(v59 + 2, 8); v57 = v59 - 6 < 0; v59 += 2; } while ( v57 ^ v58 ); return result; } //----- (007A2D50) -------------------------------------------------------- _WORD *__cdecl sub_7A2D50(int a1, _WORD *a2, signed int a3, _WORD *a4, int a5) { int v5; // edx _WORD *result; // eax _WORD *v7; // edi int v8; // esi signed int v9; // ebp int v10; // ecx signed int v11; // eax int v12; // esi _WORD *v13; // esi v5 = a1; result = a2; v7 = a4; v8 = a5; v9 = 0; if ( (signed int)a4 > 0 ) { v10 = 0; do { v11 = 0; if ( a3 > 0 ) { v12 = v10; do { *(_WORD *)(a5 + 2 * v12) = *(unsigned __int8 *)(v5 + 4 * v11) - 128; *(_WORD *)(a5 + 2 * v12 + 128) = *(unsigned __int8 *)(v5 + 4 * v11 + 1) - 128; *(_WORD *)(a5 + 2 * v12 + 256) = *(unsigned __int8 *)(v5 + 4 * v11 + 2) - 128; *(_WORD *)(a5 + 2 * v12++ + 384) = *(unsigned __int8 *)(v5 + 4 * v11++ + 3) - 128; } while ( v11 < a3 ); } if ( v11 < 8 ) { v13 = (_WORD *)(a5 + 2 * (v11 + v10)); do { ++v11; *v13 = *(v13 - 1); v13[64] = v13[63]; v13[128] = v13[127]; v13[192] = v13[191]; ++v13; } while ( v11 < 8 ); } v5 += (int)a2; v10 += 8; ++v9; result = a4; } while ( v9 < (signed int)a4 ); v8 = a5; v7 = a4; } if ( v9 < 8 ) { result = (_WORD *)(v8 + 16 * v9); do { ++v9; *result = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 16); result[64] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 112); result[128] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 240); result[192] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 368); result[1] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 14); result[65] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 114); result[129] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 242); result[193] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 370); result[2] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 12); result[66] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 116); result[130] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 244); result[194] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 372); result[3] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 10); result[67] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 118); result[131] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 246); result[195] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 374); result[4] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 8); result[68] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 120); result[132] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 248); result[196] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 376); result[5] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 6); result[69] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 122); result[133] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 250); result[197] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 378); result[6] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 4); result[70] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 124); result[134] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 252); result[198] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 380); result[7] = *(_WORD *)(v8 + 16 * (_DWORD)v7 - 2); result[71] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 126); result[135] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 254); result[199] = *(_WORD *)(v8 + 16 * (_DWORD)v7 + 382); result += 8; } while ( v9 < 8 ); } return result; } //----- (007A31C0) -------------------------------------------------------- signed int __cdecl sub_7A31C0(int a1, int a2, signed int a3, signed int a4, int a5) { int v5; // ebp signed int result; // eax int v7; // edx int v8; // ecx signed int v9; // ebx int v10; // esi int v11; // ebp int v12; // esi int v13; // edi unsigned __int8 *v14; // edi int v15; // ebp _WORD *v16; // ebp int v17; // ecx int v18; // edx v5 = a1; result = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; do { v9 = 0; if ( a3 > 0 ) { v10 = v7; v11 = v8; do { ++v9; *(_WORD *)(a5 + 2 * v11) = *(unsigned __int8 *)(v10 + a1) - 128; *(_WORD *)(a5 + 2 * v11 + 128) = *(unsigned __int8 *)(v10 + a1 + 1) - 128; *(_WORD *)(a5 + 2 * v11 + 256) = *(unsigned __int8 *)(v10 + a1 + 2) - 128; v10 += 3; ++v11; } while ( v9 < a3 ); } v12 = v7 + 3 * v9; v13 = v7 + 3 * v9 - 3; if ( v9 < 8 ) { if ( 8 - v9 < 4 ) { v14 = (unsigned __int8 *)(a1 + v13); } else { v14 = (unsigned __int8 *)(a1 + v13); v15 = v9 + v8; do { v9 += 3; *(_WORD *)(a5 + 2 * v15) = *(unsigned __int8 *)(v12 + a1 - 3) - 128; *(_WORD *)(a5 + 2 * v15 + 128) = *(unsigned __int8 *)(v12 + a1 - 2) - 128; *(_WORD *)(a5 + 2 * v15 + 256) = *(unsigned __int8 *)(v12 + a1 - 1) - 128; *(_WORD *)(a5 + 2 * v15 + 2) = *(unsigned __int8 *)(v12 + a1 - 3) - 128; *(_WORD *)(a5 + 2 * v15 + 130) = *(unsigned __int8 *)(v12 + a1 - 2) - 128; *(_WORD *)(a5 + 2 * v15 + 258) = *(unsigned __int8 *)(v12 + a1 - 1) - 128; *(_WORD *)(a5 + 2 * v15 + 4) = *(unsigned __int8 *)(v12 + a1 - 3) - 128; *(_WORD *)(a5 + 2 * v15 + 132) = *(unsigned __int8 *)(v12 + a1 - 2) - 128; *(_WORD *)(a5 + 2 * v15 + 260) = *(unsigned __int8 *)(v12 + a1 - 1) - 128; v15 += 3; } while ( v9 < 4 ); } v16 = (_WORD *)(a5 + 2 * (v9 + v8)); do { ++v9; *v16 = *v14 - 128; v16[64] = v14[1] - 128; v16[128] = v14[2] - 128; ++v16; } while ( v9 < 8 ); } v7 += a2; v8 += 8; ++result; } while ( result < a4 ); v5 = a1; } v17 = 8 * result; v18 = 8 * result - 8; if ( result < 8 ) { while ( 1 ) { ++result; *(_WORD *)(a5 + 2 * v17) = *(unsigned __int8 *)(v18 + v5) - 128; *(_WORD *)(a5 + 2 * v17 + 128) = *(unsigned __int8 *)(v18 + v5 + 1) - 128; *(_WORD *)(a5 + 2 * v17 + 256) = *(unsigned __int8 *)(v18 + v5 + 2) - 128; *(_WORD *)(a5 + 2 * v17 + 2) = *(unsigned __int8 *)(v18 + v5 + 3) - 128; *(_WORD *)(a5 + 2 * v17 + 130) = *(unsigned __int8 *)(v18 + v5 + 4) - 128; *(_WORD *)(a5 + 2 * v17 + 258) = *(unsigned __int8 *)(v18 + v5 + 5) - 128; *(_WORD *)(a5 + 2 * v17 + 4) = *(unsigned __int8 *)(v18 + v5 + 6) - 128; *(_WORD *)(a5 + 2 * v17 + 132) = *(unsigned __int8 *)(v18 + v5 + 7) - 128; *(_WORD *)(a5 + 2 * v17 + 260) = *(unsigned __int8 *)(v18 + v5 + 8) - 128; *(_WORD *)(a5 + 2 * v17 + 6) = *(unsigned __int8 *)(v18 + v5 + 9) - 128; *(_WORD *)(a5 + 2 * v17 + 134) = *(unsigned __int8 *)(v18 + v5 + 10) - 128; *(_WORD *)(a5 + 2 * v17 + 262) = *(unsigned __int8 *)(v18 + v5 + 11) - 128; *(_WORD *)(a5 + 2 * v17 + 8) = *(unsigned __int8 *)(v18 + v5 + 12) - 128; *(_WORD *)(a5 + 2 * v17 + 136) = *(unsigned __int8 *)(v18 + v5 + 13) - 128; *(_WORD *)(a5 + 2 * v17 + 264) = *(unsigned __int8 *)(v18 + v5 + 14) - 128; *(_WORD *)(a5 + 2 * v17 + 10) = *(unsigned __int8 *)(v18 + v5 + 15) - 128; *(_WORD *)(a5 + 2 * v17 + 138) = *(unsigned __int8 *)(v18 + v5 + 16) - 128; *(_WORD *)(a5 + 2 * v17 + 266) = *(unsigned __int8 *)(v18 + v5 + 17) - 128; *(_WORD *)(a5 + 2 * v17 + 12) = *(unsigned __int8 *)(v18 + v5 + 18) - 128; *(_WORD *)(a5 + 2 * v17 + 140) = *(unsigned __int8 *)(v18 + v5 + 19) - 128; *(_WORD *)(a5 + 2 * v17 + 268) = *(unsigned __int8 *)(v18 + v5 + 20) - 128; *(_WORD *)(a5 + 2 * v17 + 14) = *(unsigned __int8 *)(v18 + v5 + 21) - 128; *(_WORD *)(a5 + 2 * v17 + 142) = *(unsigned __int8 *)(v18 + v5 + 22) - 128; *(_WORD *)(a5 + 2 * v17 + 270) = *(unsigned __int8 *)(v18 + v5 + 23) - 128; if ( result >= 8 ) break; v17 = 8 * result; } } return result; } //----- (007A37B0) -------------------------------------------------------- int __cdecl sub_7A37B0(int a1, int a2, signed int a3, signed int a4, int a5) { unsigned int v5; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp signed int v10; // eax int v11; // edi int v12; // esi unsigned int v13; // edx __int16 v14; // bp _WORD *v15; // esi int v16; // edx _WORD *v17; // ecx __int16 v18; // di __int16 v19; // si __int16 v20; // bp __int16 v21; // bx int v22; // edx int v23; // ecx int v24; // ebx _WORD *v25; // edi _WORD *v26; // esi signed __int16 *v27; // ebp int result; // eax int v29; // ecx char v30; // [esp+1Fh] [ebp-62Dh] int v31; // [esp+620h] [ebp-2Ch] int v32; // [esp+624h] [ebp-28h] unsigned int v33; // [esp+628h] [ebp-24h] int v34; // [esp+62Ch] [ebp-20h] int v35; // [esp+630h] [ebp-1Ch] int v36; // [esp+634h] [ebp-18h] v5 = (unsigned int)&v30 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v33 = (unsigned int)&v30 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v36 = v7; v35 = v8; v31 = v9; v34 = v6; v13 = v33; do { ++v10; *(_WORD *)(v13 + 2 * v12) = *(unsigned __int8 *)(v11 + a1); *(_WORD *)(v13 + 2 * v12 + 512) = *(unsigned __int8 *)(v11 + a1 + 1); v14 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v13 + 2 * v12++ + 1024) = v14; } while ( v10 < a3 ); v7 = v36; v8 = v35; v9 = v31; v6 = v34; } if ( v10 < 16 ) { v32 = v33 + v9; v15 = (_WORD *)(v33 + 2 * (v10 + v8)); v31 = v9; v34 = v6; v16 = v33 + v9; do { ++v10; *v15 = *(_WORD *)(v16 + 2 * a3 - 2); v15[256] = *(_WORD *)(v16 + 2 * a3 + 510); v15[512] = *(_WORD *)(v16 + 2 * a3 + 1022); ++v15; } while ( v10 < 16 ); v9 = v31; v6 = v34; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); v5 = v33; } if ( v6 < 16 ) { v17 = (_WORD *)(v5 + 32 * v6); do { v18 = v17[510]; v19 = *(v17 - 1); *v17 = *(v17 - 16); v20 = v17[255]; v17[256] = v17[240]; ++v6; v17[512] = v17[496]; v17[1] = *(v17 - 15); v17[257] = v17[241]; v17[513] = v17[497]; v17[2] = *(v17 - 14); v17[258] = v17[242]; v17[514] = v17[498]; v17[3] = *(v17 - 13); v17[259] = v17[243]; v17[515] = v17[499]; v17[4] = *(v17 - 12); v17[260] = v17[244]; v17[516] = v17[500]; v17[5] = *(v17 - 11); v17[261] = v17[245]; v17[517] = v17[501]; v17[6] = *(v17 - 10); v17[262] = v17[246]; v17[518] = v17[502]; v17[7] = *(v17 - 9); v17[263] = v17[247]; v17[519] = v17[503]; v17[8] = *(v17 - 8); v17[264] = v17[248]; v17[520] = v17[504]; v17[9] = *(v17 - 7); v17[265] = v17[249]; v17[521] = v17[505]; v17[10] = *(v17 - 6); v17[266] = v17[250]; v17[522] = v17[506]; v17[11] = *(v17 - 5); v17[267] = v17[251]; v17[523] = v17[507]; v17[12] = *(v17 - 4); v17[268] = v17[252]; v17[524] = v17[508]; v17[13] = *(v17 - 3); v17[269] = v17[253]; v17[525] = v17[509]; v17[14] = *(v17 - 2); v17[270] = v17[254]; v21 = v17[511]; v17[526] = v18; v17[15] = v19; v17[271] = v20; v17[527] = v21; v17 += 16; } while ( v6 < 16 ); } v22 = 0; v23 = 0; v24 = 0; v33 = v5; do { v25 = (_WORD *)(a5 + 2 * v22); v26 = (_WORD *)(v33 + 2 * v23); v27 = (signed __int16 *)(v33 + 2 * v24); result = (int)(v27 + 16); v31 = v23; v32 = v24; do { *v25 = *v26 - 128; v25[64] = v26[8] - 128; v25[128] = v26[128] - 128; v25[192] = v26[136] - 128; ++v26; v25[256] = ((v27[272] + v27[257] + v27[256] + v27[273] + 2) >> 2) - 128; v29 = ((v27[528] + v27[513] + v27[512] + v27[529] + 2) >> 2) - 128; v27 += 2; v25[320] = v29; ++v25; } while ( result > (signed int)v27 ); v22 += 8; v23 = v31 + 16; v24 = v32 + 32; } while ( v32 + 32 < 256 ); return result; } //----- (007A3CA0) -------------------------------------------------------- int __cdecl sub_7A3CA0(unsigned __int8 *a1, int a2, _WORD *a3, _WORD *a4, int a5) { unsigned __int8 *v5; // edi _WORD *v6; // ecx _WORD *v7; // esi int result; // eax _WORD *v9; // ST08_4 _WORD *v10; // ST0C_4 int v11; // eax int v12; // edx int v13; // ST10_4 int v14; // ST14_4 int v15; // ST18_4 int v16; // ST1C_4 int v17; // ST20_4 int v18; // ST24_4 int v19; // ST28_4 int v20; // ST2C_4 int v21; // ST30_4 int v22; // ST34_4 int v23; // ST38_4 int v24; // ST3C_4 int v25; // ST40_4 int v26; // ST44_4 unsigned __int8 *v27; // edi int v28; // ST4C_4 int v29; // ST50_4 int v30; // ST54_4 int v31; // ST58_4 int v32; // ST5C_4 int v33; // ST60_4 int v34; // ST64_4 int v35; // ST68_4 int v36; // ST6C_4 int v37; // ST70_4 int v38; // ST74_4 int v39; // ST78_4 int v40; // ST7C_4 int v41; // ecx int v42; // ebx signed int v43; // [esp+4h] [ebp-90h] v5 = a1; v6 = a3; v7 = a4; result = a5; v43 = 0; do { v9 = v6; v10 = (_WORD *)result; *v6 = *v5 - 128; v6[1] = v5[3] - 128; v6[2] = v5[6] - 128; v6[3] = v5[9] - 128; v6[4] = v5[12] - 128; v6[5] = v5[15] - 128; v6[6] = v5[18] - 128; v6[7] = v5[21] - 128; v6[64] = v5[24] - 128; v6[65] = v5[27] - 128; v6[66] = v5[30] - 128; v6[67] = v5[33] - 128; v6[68] = v5[36] - 128; v6[69] = v5[39] - 128; v6[70] = v5[42] - 128; v6[71] = v5[45] - 128; v11 = v5[4] + v5[1]; v12 = v5[10] + v5[7]; v13 = v5[16] + v5[13]; v14 = v5[22] + v5[19]; v15 = v5[28] + v5[25]; v16 = v5[34] + v5[31]; v17 = v5[40] + v5[37]; v18 = v5[46] + v5[43]; v19 = v5[5] + v5[2]; v20 = v5[11] + v5[8]; v21 = v5[17] + v5[14]; v22 = v5[23] + v5[20]; v23 = v5[29] + v5[26]; v24 = v5[35] + v5[32]; v25 = v5[41] + v5[38]; v26 = v5[47] + v5[44]; v27 = &v5[a2]; v6[8] = *v27 - 128; v6[9] = v27[3] - 128; v6[10] = v27[6] - 128; v6[11] = v27[9] - 128; v6[12] = v27[12] - 128; v6[13] = v27[15] - 128; v6[14] = v27[18] - 128; v6[15] = v27[21] - 128; v6[72] = v27[24] - 128; v6[73] = v27[27] - 128; v6[74] = v27[30] - 128; v6[75] = v27[33] - 128; v6[76] = v27[36] - 128; v6[77] = v27[39] - 128; v6[78] = v27[42] - 128; v6[79] = v27[45] - 128; v28 = v27[10] + v27[7]; v29 = v27[16] + v27[13]; v30 = v27[22] + v27[19]; v31 = v27[28] + v27[25]; v32 = v27[34] + v27[31]; v33 = v27[40] + v27[37]; v34 = v27[46] + v27[43]; v35 = v27[5] + v27[2]; v36 = v27[11] + v27[8]; v37 = v27[17] + v27[14]; v38 = v27[23] + v27[20]; v39 = v27[29] + v27[26]; v40 = v27[35] + v27[32]; v41 = v27[41] + v27[38]; v42 = v27[47] + v27[44]; *v7 = ((v27[4] + v27[1] + v11 + 2) >> 2) - 128; v7[1] = ((v28 + v12 + 2) >> 2) - 128; v7[2] = ((v29 + v13 + 2) >> 2) - 128; v7[3] = ((v30 + v14 + 2) >> 2) - 128; v7[4] = ((v31 + v15 + 2) >> 2) - 128; v7[5] = ((v32 + v16 + 2) >> 2) - 128; v7[6] = ((v33 + v17 + 2) >> 2) - 128; v7[7] = ((v34 + v18 + 2) >> 2) - 128; *v10 = ((v35 + v19 + 2) >> 2) - 128; v10[1] = ((v36 + v20 + 2) >> 2) - 128; v10[2] = ((v37 + v21 + 2) >> 2) - 128; v10[3] = ((v38 + v22 + 2) >> 2) - 128; v10[4] = ((v39 + v23 + 2) >> 2) - 128; v7 += 8; v10[5] = ((v40 + v24 + 2) >> 2) - 128; v10[6] = ((v41 + v25 + 2) >> 2) - 128; v10[7] = ((v42 + v26 + 2) >> 2) - 128; result = (int)(v10 + 8); v6 = v9 + 16; v5 = &v27[a2]; v43 += 2; } while ( v43 < 8 ); return result; } //----- (007A4330) -------------------------------------------------------- unsigned int __cdecl sub_7A4330(int a1, int a2, signed int a3, signed int a4, int a5) { unsigned int result; // eax signed int v6; // edx int v7; // ecx int v8; // ebx int v9; // ebp signed int v10; // eax int v11; // edi int v12; // esi unsigned int v13; // edx __int16 v14; // bp _WORD *v15; // esi int v16; // edx _WORD *v17; // ecx __int16 v18; // di __int16 v19; // si __int16 v20; // bp __int16 v21; // bx int v22; // ecx int v23; // edx _WORD *v24; // edi _WORD *v25; // esi signed __int16 *v26; // ebp char v27; // [esp+1Fh] [ebp-32Dh] int v28; // [esp+320h] [ebp-2Ch] unsigned int v29; // [esp+324h] [ebp-28h] int v30; // [esp+328h] [ebp-24h] int v31; // [esp+32Ch] [ebp-20h] int v32; // [esp+330h] [ebp-1Ch] int v33; // [esp+334h] [ebp-18h] result = (unsigned int)&v27 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v7 = 0; v8 = 0; v9 = 0; v29 = (unsigned int)&v27 & 0xFFFFFFE0; do { v10 = 0; if ( a3 > 0 ) { v11 = v7; v12 = v8; v33 = v7; v32 = v8; v30 = v9; v31 = v6; v13 = v29; do { ++v10; *(_WORD *)(v13 + 2 * v12) = *(unsigned __int8 *)(v11 + a1); *(_WORD *)(v13 + 2 * v12 + 256) = *(unsigned __int8 *)(v11 + a1 + 1); v14 = *(unsigned __int8 *)(v11 + a1 + 2); v11 += 3; *(_WORD *)(v13 + 2 * v12++ + 512) = v14; } while ( v10 < a3 ); v7 = v33; v8 = v32; v9 = v30; v6 = v31; } if ( v10 < 16 ) { v28 = v29 + v9; v15 = (_WORD *)(v29 + 2 * (v10 + v8)); v30 = v9; v31 = v6; v16 = v29 + v9; do { ++v10; *v15 = *(_WORD *)(v16 + 2 * a3 - 2); v15[128] = *(_WORD *)(v16 + 2 * a3 + 254); v15[256] = *(_WORD *)(v16 + 2 * a3 + 510); ++v15; } while ( v10 < 16 ); v9 = v30; v6 = v31; } v7 += a2; v8 += 16; v9 += 32; ++v6; } while ( v6 < a4 ); result = v29; } if ( v6 < 8 ) { v17 = (_WORD *)(result + 32 * v6); do { v18 = v17[254]; v19 = *(v17 - 1); *v17 = *(v17 - 16); v20 = v17[127]; v17[128] = v17[112]; ++v6; v17[256] = v17[240]; v17[1] = *(v17 - 15); v17[129] = v17[113]; v17[257] = v17[241]; v17[2] = *(v17 - 14); v17[130] = v17[114]; v17[258] = v17[242]; v17[3] = *(v17 - 13); v17[131] = v17[115]; v17[259] = v17[243]; v17[4] = *(v17 - 12); v17[132] = v17[116]; v17[260] = v17[244]; v17[5] = *(v17 - 11); v17[133] = v17[117]; v17[261] = v17[245]; v17[6] = *(v17 - 10); v17[134] = v17[118]; v17[262] = v17[246]; v17[7] = *(v17 - 9); v17[135] = v17[119]; v17[263] = v17[247]; v17[8] = *(v17 - 8); v17[136] = v17[120]; v17[264] = v17[248]; v17[9] = *(v17 - 7); v17[137] = v17[121]; v17[265] = v17[249]; v17[10] = *(v17 - 6); v17[138] = v17[122]; v17[266] = v17[250]; v17[11] = *(v17 - 5); v17[139] = v17[123]; v17[267] = v17[251]; v17[12] = *(v17 - 4); v17[140] = v17[124]; v17[268] = v17[252]; v17[13] = *(v17 - 3); v17[141] = v17[125]; v17[269] = v17[253]; v17[14] = *(v17 - 2); v17[142] = v17[126]; v21 = v17[255]; v17[270] = v18; v17[15] = v19; v17[143] = v20; v17[271] = v21; v17 += 16; } while ( v6 < 8 ); } v22 = 0; v23 = 0; do { v24 = (_WORD *)(a5 + 2 * v22); v25 = (_WORD *)(result + 2 * v23); v26 = (signed __int16 *)(result + 2 * v23); v28 = v23; v29 = result; do { *v24 = *v25 - 128; v24[64] = v25[8] - 128; v24[128] = ((v26[128] + v26[129] + 1) >> 1) - 128; v24[192] = ((v26[256] + v26[257] + 1) >> 1) - 128; ++v24; ++v25; v26 += 2; } while ( (signed int)(result + 2 * v23 + 32) > (signed int)v26 ); result = v29; v22 += 8; v23 = v28 + 16; } while ( v28 + 16 < 128 ); return result; } //----- (007A4B30) -------------------------------------------------------- int __cdecl sub_7A4B30(int a1, int a2, int a3, int a4, int a5) { unsigned int v5; // ebp int v6; // ebx int v7; // eax int v8; // edx int v9; // ecx int v10; // ebp signed int v11; // esi int v12; // ebx int v13; // edx unsigned int v14; // ecx __int16 v15; // di unsigned int v16; // ebx _WORD *v17; // ebx int v18; // ecx _WORD *v19; // eax __int16 v20; // di __int16 v21; // si __int16 v22; // cx __int16 v23; // dx int v24; // edx int result; // eax _WORD *v26; // edi _WORD *v27; // esi signed __int16 *v28; // ebx char v29; // [esp+1Fh] [ebp+0h] int v30; // [esp+320h] [ebp+301h] unsigned int v31; // [esp+324h] [ebp+305h] int v32; // [esp+328h] [ebp+309h] int v33; // [esp+32Ch] [ebp+30Dh] int v34; // [esp+330h] [ebp+311h] int v35; // [esp+334h] [ebp+315h] int v36; // [esp+338h] [ebp+319h] int v37; // [esp+33Ch] [ebp+31Dh] int v38; // [esp+340h] [ebp+321h] int v39; // [esp+344h] [ebp+325h] int v40; // [esp+348h] [ebp+329h] v5 = (unsigned int)&v29 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v33 = a3 - 1; v7 = 0; v32 = 2 * a3; v30 = a2; v8 = 0; v9 = a3; v38 = 0; v37 = a3 & 1; v36 = 0; v31 = (unsigned int)&v29 & 0xFFFFFFE0; v10 = 2 * a3; do { v11 = 0; if ( v33 > 0 ) { v34 = v7; v12 = v8; v40 = v7; v39 = v8; v13 = v33; v35 = v9; v14 = v31; v32 = v10; do { v11 += 2; *(_WORD *)(v14 + 2 * v12) = *(unsigned __int8 *)(v7 + a1); *(_WORD *)(v14 + 2 * v12 + 2) = *(unsigned __int8 *)(a1 + 2 + v7); *(_WORD *)(v14 + 2 * v12 + 256) = *(unsigned __int8 *)(a1 + 1 + v7); *(_WORD *)(v14 + 2 * v12 + 258) = *(unsigned __int8 *)(a1 + 1 + v7); *(_WORD *)(v14 + 2 * v12 + 512) = *(unsigned __int8 *)(a1 + 3 + v7); v15 = *(unsigned __int8 *)(a1 + 3 + v7); v7 += 4; *(_WORD *)(v14 + 2 * v12 + 514) = v15; v12 += 2; } while ( v11 < v13 ); v7 = v40; v8 = v39; v9 = v35; v10 = v32; } if ( v37 ) { v16 = v31; *(_WORD *)(v31 + 2 * v9 - 2) = *(unsigned __int8 *)(v10 - 2 + a1); *(_WORD *)(v16 + 2 * v9 + 254) = *(unsigned __int8 *)(v10 - 1 + a1); *(_WORD *)(v16 + 2 * v9 + 510) = *(unsigned __int8 *)(v10 - 3 + a1); v11 = a3; } if ( v11 < 16 ) { v34 = v31 + v38; v17 = (_WORD *)(v31 + 2 * (v11 + v8)); v35 = v9; v32 = v10; v18 = v31 + v38; do { ++v11; *v17 = *(_WORD *)(v18 + 2 * a3 - 2); v17[128] = *(_WORD *)(v18 + 2 * a3 + 254); v17[256] = *(_WORD *)(v18 + 2 * a3 + 510); ++v17; } while ( v11 < 16 ); v9 = v35; v10 = v32; } v7 += a2; v8 += 16; v9 += 16; v10 += v30; v6 = v36 + 1; v38 += 32; ++v36; } while ( v36 < a4 ); v5 = v31; } if ( v6 < 8 ) { v19 = (_WORD *)(v5 + 32 * v6); do { v20 = v19[254]; v21 = *(v19 - 1); *v19 = *(v19 - 16); v22 = v19[127]; v19[128] = v19[112]; ++v6; v19[256] = v19[240]; v19[1] = *(v19 - 15); v19[129] = v19[113]; v19[257] = v19[241]; v19[2] = *(v19 - 14); v19[130] = v19[114]; v19[258] = v19[242]; v19[3] = *(v19 - 13); v19[131] = v19[115]; v19[259] = v19[243]; v19[4] = *(v19 - 12); v19[132] = v19[116]; v19[260] = v19[244]; v19[5] = *(v19 - 11); v19[133] = v19[117]; v19[261] = v19[245]; v19[6] = *(v19 - 10); v19[134] = v19[118]; v19[262] = v19[246]; v19[7] = *(v19 - 9); v19[135] = v19[119]; v19[263] = v19[247]; v19[8] = *(v19 - 8); v19[136] = v19[120]; v19[264] = v19[248]; v19[9] = *(v19 - 7); v19[137] = v19[121]; v19[265] = v19[249]; v19[10] = *(v19 - 6); v19[138] = v19[122]; v19[266] = v19[250]; v19[11] = *(v19 - 5); v19[139] = v19[123]; v19[267] = v19[251]; v19[12] = *(v19 - 4); v19[140] = v19[124]; v19[268] = v19[252]; v19[13] = *(v19 - 3); v19[141] = v19[125]; v19[269] = v19[253]; v19[14] = *(v19 - 2); v19[142] = v19[126]; v23 = v19[255]; v19[270] = v20; v19[15] = v21; v19[143] = v22; v19[271] = v23; v19 += 16; } while ( v6 < 8 ); } v24 = 0; result = 0; do { v26 = (_WORD *)(a5 + 2 * v24); v27 = (_WORD *)(v5 + 2 * result); v28 = (signed __int16 *)(v5 + 2 * result); v30 = result; v31 = v5; do { *v26 = *v27 - 128; v26[64] = v27[8] - 128; v26[128] = ((v28[128] + 1 + v28[129]) >> 1) - 128; v26[192] = ((v28[257] + 1 + v28[256]) >> 1) - 128; ++v26; ++v27; v28 += 2; } while ( (signed int)(v5 + 32 + 2 * result) > (signed int)v28 ); v5 = v31; v24 += 8; result = v30 + 16; } while ( v30 + 16 < 128 ); return result; } //----- (007A5420) -------------------------------------------------------- unsigned int __cdecl sub_7A5420(int a1, int a2, int a3, int a4, int a5) { unsigned int result; // eax signed int v6; // esi int v7; // ebx int v8; // ecx int v9; // edx int v10; // eax signed int v11; // esi int v12; // ebp unsigned int v13; // ecx int v14; // edx __int16 v15; // di int v16; // ebp int v17; // edx unsigned int v18; // ecx __int16 v19; // ax int v20; // ecx int v21; // edx unsigned int v22; // ebx _WORD *v23; // ebp _WORD *v24; // ebx int v25; // ebp _WORD *v26; // edx __int16 v27; // di __int16 v28; // bp __int16 v29; // bx __int16 v30; // cx signed int v31; // edx char v32; // [esp+1Fh] [ebp-D5h] int v33; // [esp+A0h] [ebp-54h] int v34; // [esp+A4h] [ebp-50h] int v35; // [esp+A8h] [ebp-4Ch] int v36; // [esp+ACh] [ebp-48h] int v37; // [esp+B0h] [ebp-44h] int v38; // [esp+B4h] [ebp-40h] int v39; // [esp+B8h] [ebp-3Ch] int v40; // [esp+BCh] [ebp-38h] _WORD *v41; // [esp+C0h] [ebp-34h] int v42; // [esp+C4h] [ebp-30h] unsigned int v43; // [esp+C8h] [ebp-2Ch] int v44; // [esp+CCh] [ebp-28h] unsigned int v45; // [esp+D0h] [ebp-24h] int v46; // [esp+D4h] [ebp-20h] int v47; // [esp+D8h] [ebp-1Ch] unsigned int v48; // [esp+DCh] [ebp-18h] result = (unsigned int)&v32 & 0xFFFFFFE0; v6 = 0; if ( a4 > 0 ) { v40 = a3 & 1; v37 = 2 * a3 - 2; v36 = a3; v35 = a3 - 5; v38 = 0; v7 = a3; v33 = a2; v8 = 0; v39 = 0; v34 = a3; v48 = (unsigned int)&v32 & 0xFFFFFFE0; v47 = 0; v9 = a3; v45 = (unsigned int)&v32 & 0xFFFFFFE0; v10 = 0; do { v11 = 0; if ( a3 > 0 ) { if ( v36 >= 5 ) { v41 = (_WORD *)v10; v12 = v8; v38 = v10; v46 = v8; v13 = v45; v34 = v9; v14 = v35; v44 = v7; do { v11 += 4; *(_WORD *)(v13 + 2 * v12) = *(unsigned __int8 *)(v10 + a1); *(_WORD *)(v13 + 2 * v12 + 2) = *(unsigned __int8 *)(v10 + a1 + 1); *(_WORD *)(v13 + 2 * v12 + 4) = *(unsigned __int8 *)(v10 + a1 + 2); v15 = *(unsigned __int8 *)(v10 + a1 + 3); v10 += 4; *(_WORD *)(v13 + 2 * v12 + 6) = v15; v12 += 4; } while ( v11 <= v14 ); v10 = v38; v8 = v46; v9 = v34; v7 = v44; } v42 = v11 + v10; v16 = v11 + v8; v38 = v10; v46 = v8; v34 = v9; v17 = v11 + v10; v18 = v45; v44 = v7; do { v19 = *(unsigned __int8 *)(v17++ + a1); ++v11; *(_WORD *)(v18 + 2 * v16++) = v19; } while ( v11 < a3 ); v10 = v38; v8 = v46; v9 = v34; v7 = v44; } if ( v40 ) { *(_WORD *)(v45 + 2 * v9 - 2) = *(unsigned __int8 *)(v7 + a1 - 1); v11 = a3; } if ( v11 < 8 ) { if ( 8 - v11 < 5 ) { v41 = (_WORD *)(v48 + v37); } else { v43 = v45 + v39; v41 = (_WORD *)(v45 + v39 + v37); v42 = v11 + v8; v46 = v8; v20 = v45 + v39; v34 = v9; v21 = v42; v44 = v7; v22 = v45; do { v11 += 4; *(_WORD *)(v22 + 2 * v21) = *(_WORD *)(v20 + 2 * a3 - 2); *(_WORD *)(v22 + 2 * v21 + 2) = *(_WORD *)(v20 + 2 * a3 - 2); *(_WORD *)(v22 + 2 * v21 + 4) = *(_WORD *)(v20 + 2 * a3 - 2); *(_WORD *)(v22 + 2 * v21 + 6) = *(_WORD *)(v20 + 2 * a3 - 2); v21 += 4; } while ( v11 < 3 ); v8 = v46; v9 = v34; v7 = v44; } v23 = (_WORD *)(v45 + 2 * (v11 + v8)); v44 = v7; v24 = v41; do { ++v11; *v23 = *v24; ++v23; } while ( v11 < 8 ); v7 = v44; } v10 += a2; v8 += 8; v9 += 8; v7 += v33; v25 = v47 + 1; v48 += 16; v39 += 16; ++v47; } while ( v47 < a4 ); v6 = v25; result = v45; } if ( v6 < 8 ) { v26 = (_WORD *)(result + 16 * v6); do { v27 = *(v26 - 4); v28 = *(v26 - 3); *v26 = *(v26 - 8); v29 = *(v26 - 2); v26[1] = *(v26 - 7); ++v6; v26[2] = *(v26 - 6); v26[3] = *(v26 - 5); v30 = *(v26 - 1); v26[4] = v27; v26[5] = v28; v26[6] = v29; v26[7] = v30; v26 += 8; } while ( v6 < 8 ); } v31 = 0; do { *(_WORD *)(a5 + 2 * v31) = *(_WORD *)(result + 2 * v31) - 128; *(_WORD *)(a5 + 2 * v31 + 2) = *(_WORD *)(result + 2 * v31 + 2) - 128; *(_WORD *)(a5 + 2 * v31 + 4) = *(_WORD *)(result + 2 * v31 + 4) - 128; *(_WORD *)(a5 + 2 * v31 + 6) = *(_WORD *)(result + 2 * v31 + 6) - 128; *(_WORD *)(a5 + 2 * v31 + 8) = *(_WORD *)(result + 2 * v31 + 8) - 128; *(_WORD *)(a5 + 2 * v31 + 10) = *(_WORD *)(result + 2 * v31 + 10) - 128; *(_WORD *)(a5 + 2 * v31 + 12) = *(_WORD *)(result + 2 * v31 + 12) - 128; *(_WORD *)(a5 + 2 * v31 + 14) = *(_WORD *)(result + 2 * v31 + 14) - 128; v31 += 8; } while ( v31 < 64 ); return result; } //----- (007A5900) -------------------------------------------------------- int __cdecl sub_7A5900(int a1, int a2, int a3) { return ((int (__cdecl *)(int, int, int))loc_7CFDD0)(a1, a2, a3); } //----- (007A7BB0) -------------------------------------------------------- signed int __cdecl sub_7A7BB0(int *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _DWORD *a11, int *a12) { int v12; // ecx int v13; // ebx int v14; // edx int v15; // esi int v16; // ebp int v17; // eax int v18; // eax int v19; // esi int v20; // esi int v21; // ebx int v22; // edi int v23; // edx int v24; // eax int v25; // eax int v26; // esi int v27; // edx int v28; // ebp int v30; // [esp+8h] [ebp-1Ch] v12 = a2; v13 = a3; v14 = *a1; if ( *a1 ) { v15 = a1[2]; } else { v15 = a1[2]; if ( !v15 && !a1[1] && !a1[3] ) { v16 = a3 * a5; *a11 = a8 + a3 * a5 * a7 + a2 * a4 * a6; *a12 = 0; if ( a2 >= a9 - a2 * a4 ) v12 = a9 - a2 * a4; a12[2] = v12; a12[1] = 0; v17 = abs(a10); if ( a3 >= v17 - v16 ) v13 = v17 - v16; a12[3] = v13; return 0; } } v18 = a2 * a4; if ( a2 * a4 < v15 && a2 + v18 >= v14 ) { v30 = a3 * a5; if ( a3 * a5 < a1[3] ) { v19 = a1[1]; if ( a3 + v30 >= v19 ) { *a11 = a8 + (v30 - v19) * a7 + (v18 - v14) * a6; v20 = *a1 - v18; v21 = a3; if ( v20 < 0 ) v20 = 0; *a12 = v20; v22 = a1[2] - v18; if ( a2 >= v22 ) v23 = a1[2] - v18; else v23 = a2; if ( v23 >= a9 + *a1 - v18 ) { v12 = a9 + *a1 - v18; } else if ( a2 >= v22 ) { v12 = a1[2] - v18; } a12[2] = v12; v24 = a1[1] - v30; if ( v24 < 0 ) v24 = 0; a12[1] = v24; v25 = abs(a10); v26 = a1[3] - v30; if ( a3 >= v26 ) v27 = a1[3] - v30; else v27 = a3; v28 = a1[1] - v30; if ( v27 >= v28 + v25 ) { v21 = v28 + v25; } else if ( a3 >= v26 ) { v21 = a1[3] - v30; } a12[3] = v21; return 0; } } } return -8; } //----- (007A7D80) -------------------------------------------------------- _DWORD *__cdecl sub_7A7D80(_DWORD *a1, int *a2, int *a3) { int v3; // ebx int v4; // ecx int v5; // edi int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // ST0C_4 _DWORD *result; // eax int v12; // ecx int v13; // ebx int v14; // edi int v15; // [esp+0h] [ebp-34h] int v16; // [esp+4h] [ebp-30h] int v17; // [esp+8h] [ebp-2Ch] int v18; // [esp+10h] [ebp-24h] int v19; // [esp+1Ch] [ebp-18h] v3 = a3[2]; if ( *a2 > v3 || (v4 = a2[2], v4 < *a3) || (v19 = a2[1], v19 > a3[3]) || (v18 = a2[3], v5 = a3[1], v18 < v5) ) { v12 = dword_BAA8E0[1]; *a1 = dword_BAA8E0[0]; v13 = dword_BAA8E0[2]; v14 = dword_BAA8E0[3]; a1[1] = v12; result = a1; a1[2] = v13; a1[3] = v14; } else { if ( *a2 <= *a3 ) v6 = *a3; else v6 = *a2; v15 = v6; if ( v19 <= v5 ) v7 = a3[1]; else v7 = a2[1]; v16 = v7; if ( v4 >= v3 ) v8 = a3[2]; else v8 = a2[2]; v17 = v8; if ( v18 >= a3[3] ) v9 = a3[3]; else v9 = a2[3]; v10 = v9; *a1 = v15; a1[1] = v16; a1[2] = v17; result = a1; a1[3] = v10; } return result; } //----- (007A7EB0) -------------------------------------------------------- BOOL __cdecl sub_7A7EB0(_DWORD *a1, _DWORD *a2) { return *a1 == *a2 && a1[2] == a2[2] && a1[1] == a2[1] && a1[3] == a2[3]; } //----- (007A7EE0) -------------------------------------------------------- BOOL __cdecl sub_7A7EE0(_DWORD *a1, _DWORD *a2) { return *a1 != *a2 || a1[2] != a2[2] || a1[1] != a2[1] || a1[3] != a2[3]; } //----- (007A7F10) -------------------------------------------------------- _DWORD *__cdecl sub_7A7F10(_DWORD *a1, _DWORD *a2, _DWORD *a3) { int v3; // ecx int v4; // eax int v5; // ebp _DWORD *result; // eax int v7; // ST10_4 int v8; // ebp int v9; // edx if ( (unsigned __int8)sub_7A7EB0(a2, dword_BAA8E0) ) { v3 = dword_BAA8E0[1]; *a1 = dword_BAA8E0[0]; v4 = dword_BAA8E0[2]; v5 = dword_BAA8E0[3]; a1[1] = v3; a1[2] = v4; a1[3] = v5; result = a1; } else { result = a1; v7 = a2[2] - *a3; v8 = a2[3] - a3[1]; v9 = a2[1] - a3[1]; *a1 = *a2 - *a3; a1[1] = v9; a1[2] = v7; a1[3] = v8; } return result; } //----- (007A7FB0) -------------------------------------------------------- signed int __cdecl sub_7A7FB0(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, char a7) { if ( a3[2] || !a1[4984] ) sub_7A9B40(a1, a2, (int)a3, a4, a5, a6, a7); else sub_7A8060(a1, a2, a3, a4, a5, a6, 1, a7); return sub_7AACF0(a1, a2, a4, a5, a6); } //----- (007A8060) -------------------------------------------------------- signed int __cdecl sub_7A8060(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, int a7, char a8) { int *v8; // ebp bool v9; // zf int v10; // esi int v11; // ecx int v12; // eax int v13; // esi signed int result; // eax int v15; // edi int v16; // ebx char *v17; // ebp signed int v18; // eax int v19; // ebp int v20; // esi int v21; // edi int v22; // eax int v23; // ecx int v24; // edx int v25; // edi char *v26; // ebx int v27; // eax int v28; // edi int v29; // ebp int v30; // esi int v31; // ecx int v32; // edx signed int v33; // eax int v34; // edi int v35; // ebx int v36; // edx int v37; // ecx int v38; // edi int v39; // ebp int v40; // esi int v41; // ecx int v42; // eax int v43; // esi int v44; // ebx _BYTE *v45; // esi int v46; // edx int v47; // ebx int v48; // edi int v49; // ecx char *v50; // edi int v51; // eax signed int v52; // ebx int v53; // ebp int v54; // esi int v55; // ecx int v56; // edx int v57; // esi int v58; // eax int v59; // edx int v60; // ebp int v61; // esi int v62; // esi int v63; // ebp int v64; // ebx signed int v65; // eax signed int v66; // edx char *v67; // ebp int v68; // esi signed int v69; // edx int v70; // ebp int v71; // esi int v72; // edi int v73; // eax int v74; // edx int v75; // ebx int v76; // ecx char *v77; // edi int v78; // eax int v79; // ebx int v80; // ebp int v81; // esi int v82; // ecx int v83; // edx signed int v84; // eax int v85; // edi int v86; // esi int v87; // edx int v88; // ecx int v89; // edi int v90; // ebp int v91; // esi int v92; // ecx int v93; // esi _BYTE *v94; // esi int v95; // edx int v96; // ebx int v97; // edi int v98; // ecx char *v99; // edi int v100; // eax int v101; // ecx signed int v102; // ebp int v103; // esi int v104; // edx int v105; // ebx int v106; // eax int v107; // esi int v108; // edi int v109; // ebp int v110; // eax int v111; // edx int v112; // eax int v113; // ecx int v114; // edx int v115; // edi int v116; // esi int v117; // ebp int v118; // ebx signed int v119; // esi int v120; // edx int v121; // ecx int v122; // edi int v123; // ebp char *v124; // edi int v125; // edx _BYTE *v126; // ecx int v127; // eax bool v128; // sf unsigned __int8 v129; // of int v130; // ecx signed __int16 *v131; // eax int v132; // edx int v133; // ebp int v134; // edi _BYTE *v135; // esi int v136; // edi int v137; // edx int v138; // ecx int v139; // ecx int v140; // edx int v141; // ebx int v142; // esi int v143; // eax int v144; // edx int v145; // ebp signed int v146; // esi int v147; // edi int v148; // ebx int v149; // eax int v150; // eax int v151; // ebp int v152; // edx int v153; // edi int v154; // esi int v155; // ebx int v156; // ecx signed int v157; // ebp int v158; // eax int v159; // edi int v160; // esi int v161; // ebp signed __int16 *v162; // edi int v163; // edx char *v164; // esi int v165; // eax signed __int16 *v166; // edx int v167; // esi int v168; // ebp int v169; // ebx _BYTE *v170; // edi int v171; // edx int v172; // edi int v173; // esi int v174; // eax int v175; // ecx int v176; // edx int v177; // ebx int v178; // esi int v179; // eax int v180; // edx int v181; // ebp signed int v182; // esi int v183; // ebx int v184; // edi int v185; // eax int v186; // edx int v187; // esi int v188; // ebx int v189; // edx int v190; // ecx signed int v191; // edx signed int v192; // ebx int v193; // ecx int v194; // ebx char v195[1280]; // [esp+30h] [ebp-594h] int v196; // [esp+530h] [ebp-94h] int v197; // [esp+534h] [ebp-90h] int v198; // [esp+538h] [ebp-8Ch] int v199; // [esp+53Ch] [ebp-88h] int v200; // [esp+540h] [ebp-84h] int v201; // [esp+544h] [ebp-80h] int v202; // [esp+548h] [ebp-7Ch] int v203; // [esp+54Ch] [ebp-78h] int v204; // [esp+550h] [ebp-74h] int v205; // [esp+554h] [ebp-70h] int v206; // [esp+558h] [ebp-6Ch] int v207; // [esp+55Ch] [ebp-68h] char *v208; // [esp+560h] [ebp-64h] int v209; // [esp+564h] [ebp-60h] char *v210; // [esp+568h] [ebp-5Ch] _BYTE *v211; // [esp+56Ch] [ebp-58h] int v212; // [esp+570h] [ebp-54h] int v213; // [esp+574h] [ebp-50h] int v214; // [esp+578h] [ebp-4Ch] int v215; // [esp+57Ch] [ebp-48h] int v216; // [esp+580h] [ebp-44h] int v217; // [esp+584h] [ebp-40h] char *v218; // [esp+588h] [ebp-3Ch] int v219; // [esp+58Ch] [ebp-38h] int v220; // [esp+590h] [ebp-34h] int v221; // [esp+594h] [ebp-30h] int v222; // [esp+598h] [ebp-2Ch] int v223; // [esp+59Ch] [ebp-28h] int v224; // [esp+5A0h] [ebp-24h] int v225; // [esp+5A4h] [ebp-20h] char *v226; // [esp+5A8h] [ebp-1Ch] int v227; // [esp+5ACh] [ebp-18h] v8 = a1; v9 = *a3 == 1; v220 = 0; if ( v9 ) { if ( a1[13] == 3 ) v191 = 3; else v191 = a1[12]; result = a2; if ( v191 <= *(_DWORD *)(a2 + 56) ) return result; v10 = a1[3566]; v192 = a3[13]; v193 = a1[3566] / *(_DWORD *)(v192 + 4); v194 = *(_DWORD *)(v192 + 8); v227 = a1[3567]; v11 = a6 * v193; v12 = a6 * (v227 / v194); } else { v10 = a1[3566]; v11 = a6 * a1[3566]; v227 = a1[3567]; v12 = a6 * v227; } if ( a1[4986] != 1 || v10 != 2 || v227 != 1 ) { v216 = 0; v215 = 0; } else { if ( a1[29] ) { v215 = 1; } else { v186 = a1[3568]; v215 = 0; v187 = v186 - 1; if ( v186 ) { v188 = a1[3571]; v189 = 16 * v187; v200 = v11; v190 = v215; do { --v187; v190 += *(_DWORD *)(v189 + v188 + 8) * *(_DWORD *)(v189 + v188 + 4); v189 -= 16; } while ( v187 != -1 ); v215 = v190; v11 = v200; v8 = a1; } } v216 = *(_DWORD *)(v8[4987] + 4) + (v215 << 6) * 2 * a4; v215 = v216 + (v215 << 8); } v13 = v8[12]; v214 = v8[4621]; result = sub_7A7BB0(v8 + 1, v11, v12, a4, a5, v13, v8[15], v8[8], v8[9], v8[10], (_DWORD *)(a2 + 44), &v196); if ( !result ) { if ( a7 ) { v15 = *(_DWORD *)(a2 + 44); v16 = v8[13]; if ( v16 == 2 && v8[22] == 1 ) { v149 = *(_DWORD *)(a2 + 56); if ( v149 ) { if ( v149 == 1 ) ++v15; } else { v15 += 2; } } v17 = (char *)v220; v200 = 0; v201 = 32 * a6; v202 = 0; v203 = v15; while ( 1 ) { if ( v16 == 3 ) { result = 3; } else { result = *a3; if ( *a3 >= a1[12] ) result = a1[12]; } if ( v202 >= result ) break; if ( a1[22] != 4 || v202 <= 0 ) { v18 = a3[13]; if ( *a3 == 1 ) { v19 = *(_DWORD *)(v18 + 8); v20 = *(_DWORD *)(v18 + 4); } else { v19 = *(_DWORD *)(v200 + v18 + 8); v20 = *(_DWORD *)(v200 + v18 + 4); } v227 = a1[3566]; v21 = v227 / v20; v226 = (char *)a1[3567]; v22 = (signed int)v226 / v19; if ( a8 ) { v46 = 0; if ( v19 > 0 ) { v47 = v22 * v201; v48 = a6 * v21; v227 = v48 - 6; v49 = 0; v213 = v48; v212 = a6 * v22; do { v50 = &v195[v49]; v51 = 0; if ( v20 > 0 ) { v219 = v49; v222 = v47; v223 = v46; v52 = v213; v221 = v19; v53 = v212; v220 = v20; v54 = v214; do { v55 = 0; if ( v53 > 0 ) { v226 = 0; v56 = 0; v217 = v51; v218 = v50; v214 = v54; v57 = 0; do { v58 = 0; if ( v52 > 0 ) { if ( v52 < 6 ) { v210 = &v218[v57]; v225 = v214 + v56; } else { v210 = &v218[v57]; v225 = v214 + v56; v211 = (_BYTE *)v56; v226 = (char *)v57; v59 = v214 + v56; v224 = v55; do { v60 = (int)v210; v61 = v227; v210[v58] = *(_BYTE *)(v59 + 2 * v58); *(_BYTE *)(v60 + v58 + 1) = *(_BYTE *)(v59 + 2 * v58 + 2); *(_BYTE *)(v60 + v58 + 2) = *(_BYTE *)(v59 + 2 * v58 + 4); *(_BYTE *)(v60 + v58 + 3) = *(_BYTE *)(v59 + 2 * v58 + 6); *(_BYTE *)(v60 + v58 + 4) = *(_BYTE *)(v59 + 2 * v58 + 8); v58 += 5; } while ( v58 <= v61 ); v56 = (int)v211; v57 = (int)v226; v55 = v224; v52 = v213; } v226 = (char *)v57; v62 = v225; v63 = (int)v210; v224 = v55; do { *(_BYTE *)(v63 + v58) = *(_BYTE *)(v62 + 2 * v58); ++v58; } while ( v58 < v52 ); v57 = (int)v226; v55 = v224; v53 = v212; } v57 += 32; v56 += 16; ++v55; } while ( v55 < v53 ); v51 = v217; v50 = v218; v54 = v214; } v50 += v52; v54 += 128; ++v51; } while ( v51 < v220 ); v214 = v54; v49 = v219; v47 = v222; v46 = v223; v19 = v221; v20 = v220; } v49 += v47; ++v46; } while ( v46 < v19 ); v16 = a1[13]; } } else if ( a1[4986] != 1 || v227 != 2 || v226 != (char *)1 || a6 == 1 ) { v23 = 0; if ( v19 > 0 ) { v24 = v22 * v201; v205 = a6 * v21; v204 = v21 - 5; v224 = 0; v213 = v227 / v20; v212 = 32 * v22; v25 = 0; do { v26 = &v195[v25]; v27 = 0; if ( v20 > 0 ) { v224 = v25; v28 = v214; v223 = v24; v222 = v23; v221 = v19; v29 = v212; v220 = v20; v30 = a6; do { v31 = 0; if ( v30 > 0 ) { v32 = 0; v225 = v27; v33 = v213; v226 = v26; v214 = v28; do { v34 = 0; if ( v30 > 0 ) { v227 = (int)&v226[v32]; v35 = 0; v206 = v32; v207 = v31; do { v36 = 0; if ( v29 > 0 ) { v209 = v227 + v35; v208 = (char *)v35; v219 = v34; do { v37 = 0; if ( v33 > 0 ) { if ( v33 < 5 ) { v45 = (_BYTE *)(v214 + 16 * v207 + 2 * v219); v44 = v36 + v209; } else { v38 = v214 + 16 * v207; v218 = 0; v217 = v36 + v209; v211 = (_BYTE *)(v38 + 2 * v219); v210 = (char *)v36; do { v39 = v217; v40 = (int)v218; v41 = v219; v218[v217] = *(_BYTE *)(v38 + 2 * v219); *(_BYTE *)(v39 + v40 + 1) = *(_BYTE *)(v38 + 2 * v41); *(_BYTE *)(v39 + v40 + 2) = *(_BYTE *)(v38 + 2 * v41); v42 = v204; *(_BYTE *)(v39 + v40 + 3) = *(_BYTE *)(v38 + 2 * v41); v43 = v40 + 4; v218 = (char *)v43; } while ( v43 <= v42 ); v33 = v213; v29 = v212; v37 = v43; v44 = v217; v45 = v211; v36 = (int)v210; } v210 = (char *)v36; do *(_BYTE *)(v44 + v37++) = *v45; while ( v37 < v33 ); v36 = (int)v210; } v36 += 32; } while ( v36 < v29 ); v35 = (int)v208; v34 = v219; v30 = a6; } v35 += v33; ++v34; } while ( v34 < v30 ); v32 = v206; v31 = v207; } v32 += v29; ++v31; } while ( v31 < v30 ); v27 = v225; v26 = v226; v28 = v214; } v26 += v205; v28 += 128; ++v27; } while ( v27 < v220 ); v214 = v28; v25 = v224; v24 = v223; v23 = v222; v19 = v221; v20 = v220; } v25 += v24; ++v23; } while ( v23 < v19 ); v16 = a1[13]; } } else { v227 = (int)v195; v226 = 0; if ( v20 > 0 ) { v112 = (int)v226; v211 = (_BYTE *)(a6 - 1); v113 = v214; v210 = (char *)(a6 - 6); v212 = a6 * v21; v217 = 8 * a6; v114 = v227; v213 = v21; v115 = v216; v220 = v20; v116 = v215; do { v117 = 0; if ( v217 > 0 ) { v225 = v115 + 2 * a6; v224 = v113 + 2 * a6; v118 = 0; v226 = (char *)v112; v227 = v114; v214 = v113; v215 = v116; v216 = v115; v119 = a6; do { if ( v213 == 2 ) { v209 = 4 * v117; v223 = 2 * v117; v124 = (char *)(v214 + 2 * v117); v218 = v124; v125 = 3 * *(signed __int16 *)v124; v126 = (_BYTE *)(v227 + 4 * v117); v127 = *(signed __int16 *)(v225 + 2 * v117 - 2); v219 = (int)v126; *v126 = (v127 + v125 + 1) >> 2; v129 = __OFSUB__(v211, 1); v9 = v211 == (_BYTE *)1; v128 = (signed int)(v211 - 1) < 0; v126[1] = (*((signed __int16 *)v124 + 1) + v125 + 1) >> 2; v130 = v209; if ( !((unsigned __int8)(v128 ^ v129) | v9) ) { v131 = (signed __int16 *)(v124 + 2); v132 = (int)&v124[2 * v119 - 2]; v222 = v118; v221 = v117; v133 = v227; do { v130 += 2; v134 = 3 * *v131; v135 = (_BYTE *)(v133 + v130); *v135 = (*(v131 - 1) + v134 + 1) >> 2; v135[1] = (v131[1] + v134 + 2) >> 2; ++v131; } while ( (signed int)v131 < v132 ); v219 = v133 + v130; v118 = v222; v117 = v221; v119 = a6; } v136 = v223; v137 = 3 * *(signed __int16 *)(v224 + v223 - 2); v138 = v219; *(_BYTE *)(v219 + 2) = (*(signed __int16 *)(v224 + v223 - 4) + v137 + 2) >> 2; *(_BYTE *)(v138 + 3) = (*(signed __int16 *)(v215 + v136) + v137 + 2) >> 2; } else { v120 = 0; if ( v119 > 0 ) { if ( v119 < 6 ) { v121 = v214 + v118; v122 = v227 + 4 * v117; } else { v121 = v214 + v118; v122 = v227 + 4 * v117; v222 = v118; v221 = v117; do { v123 = (int)v210; *(_BYTE *)(v122 + v120) = *(_BYTE *)(v121 + 2 * v120); *(_BYTE *)(v122 + v120 + 1) = *(_BYTE *)(v121 + 2 * v120 + 2); *(_BYTE *)(v122 + v120 + 2) = *(_BYTE *)(v121 + 2 * v120 + 4); *(_BYTE *)(v122 + v120 + 3) = *(_BYTE *)(v121 + 2 * v120 + 6); *(_BYTE *)(v122 + v120 + 4) = *(_BYTE *)(v121 + 2 * v120 + 8); v120 += 5; } while ( v120 <= v123 ); v118 = v222; v117 = v221; v119 = a6; } v221 = v117; do { *(_BYTE *)(v122 + v120) = *(_BYTE *)(v121 + 2 * v120); ++v120; } while ( v120 < v119 ); v117 = v221; } } v118 += 16; v117 += 8; } while ( v117 < v217 ); v112 = (int)v226; v114 = v227; v113 = v214; v116 = v215; v115 = v216; } v114 += v212; v113 += 128; v116 += 128; v115 += 128; ++v112; } while ( v112 < v220 ); v214 = v113; v16 = a1[13]; v215 = v116; v216 = v115; } } v17 = v195; if ( v16 == 3 && v202 ) { if ( v202 == 2 ) ++v203; v139 = v197; v140 = v199; if ( v197 < v199 ) { v141 = v198; v142 = 32 * v197; do { v143 = v196; if ( v196 < v141 ) { v144 = (int)&v17[v142]; v227 = v142; v220 = (int)v17; v145 = v203; do { *(_BYTE *)(v145 + a1[15] * v139 + 2 * v143) = *(_BYTE *)(v144 + v143); v143 += 2; v141 = v198; } while ( v143 < v198 ); v142 = v227; v17 = (char *)v220; v140 = v199; } v142 += 32; ++v139; } while ( v139 < v140 ); v16 = a1[13]; } } else { sub_7AB650(a1, &v196, v202, v203, (int)v195); v16 = a1[13]; } if ( v16 != 2 || a1[22] != 1 ) ++v203; else --v203; } v200 += 24; ++v202; } v220 = (int)v17; v146 = v202; v147 = v203; if ( v16 != 255 || (result = a1[22], result != 255) ) { if ( v202 < a1[12] ) { v148 = v220; do { sub_7AB650(a1, &v196, v146, v147, v148); result = a1[13]; if ( result != 2 || (result = a1[22], result != 1) ) ++v147; else --v147; ++v146; } while ( v146 < a1[12] ); } } } else { v64 = v8[13]; if ( v64 != 2 || v8[22] != 1 ) { v213 = *(_DWORD *)(a2 + 56) + *(_DWORD *)(a2 + 44); } else { v213 = *(_DWORD *)(a2 + 44); v185 = *(_DWORD *)(a2 + 56); if ( v185 ) { if ( v185 == 1 ) ++v213; } else { v213 += 2; } } v65 = *a3; v66 = v8[12]; v67 = (char *)v220; v201 = 0; v211 = 0; v212 = 32 * a6; while ( 1 ) { v68 = v65 >= v66 ? v66 : v65; if ( v201 >= v68 ) break; if ( a1[22] != 4 || v201 <= 0 ) { v69 = a3[13]; if ( v65 == 1 ) { v70 = *(_DWORD *)(v69 + 8); v71 = *(_DWORD *)(v69 + 4); } else { v70 = *(_DWORD *)&v211[v69 + 8]; v71 = *(_DWORD *)&v211[v69 + 4]; } v220 = a1[3566]; v72 = v220 / v71; v221 = a1[3567]; v73 = v221 / v70; if ( a8 ) { v95 = 0; if ( v70 > 0 ) { v96 = v73 * v212; v97 = a6 * v72; v202 = v97 - 6; v98 = 0; v209 = v97; v206 = a6 * v73; do { v99 = &v195[v98]; v100 = 0; if ( v71 > 0 ) { v207 = v98; v101 = v206; v205 = v96; v204 = v95; v203 = v70; v102 = v209; v210 = (char *)v71; v103 = v214; do { v104 = 0; if ( v101 > 0 ) { v219 = 0; v105 = 0; v217 = v100; v106 = 0; v208 = v99; v214 = v103; do { v107 = 0; if ( v102 > 0 ) { if ( v102 < 6 ) { v221 = (int)&v208[v106]; v108 = v214 + v105; } else { v221 = (int)&v208[v106]; v108 = v214 + v105; v220 = v105; v219 = v106; v218 = (char *)v104; do { v109 = v221; *(_BYTE *)(v221 + v107) = *(_BYTE *)(v108 + 2 * v107); *(_BYTE *)(v109 + v107 + 1) = *(_BYTE *)(v108 + 2 * v107 + 2); v110 = v202; *(_BYTE *)(v109 + v107 + 2) = *(_BYTE *)(v108 + 2 * v107 + 4); *(_BYTE *)(v109 + v107 + 3) = *(_BYTE *)(v108 + 2 * v107 + 6); *(_BYTE *)(v109 + v107 + 4) = *(_BYTE *)(v108 + 2 * v107 + 8); v107 += 5; } while ( v107 <= v110 ); v105 = v220; v106 = v219; v104 = (int)v218; v102 = v209; } v219 = v106; v218 = (char *)v104; v111 = v221; do { *(_BYTE *)(v111 + v107) = *(_BYTE *)(v108 + 2 * v107); ++v107; } while ( v107 < v102 ); v106 = v219; v104 = (int)v218; v101 = v206; } v106 += 32; v105 += 16; ++v104; } while ( v104 < v101 ); v100 = v217; v99 = v208; v103 = v214; } v99 += v102; v103 += 128; ++v100; } while ( v100 < (signed int)v210 ); v214 = v103; v98 = v207; v96 = v205; v95 = v204; v70 = v203; v71 = (int)v210; } v98 += v96; ++v95; } while ( v95 < v70 ); v64 = a1[13]; } } else if ( a1[4986] != 1 || v220 != 2 || v221 != 1 || a6 == 1 ) { v74 = 0; if ( v70 > 0 ) { v75 = v73 * v212; v220 = a6 * v72; v221 = v72 - 5; v76 = 0; v209 = v72; v206 = 32 * v73; do { v77 = &v195[v76]; v78 = 0; if ( v71 > 0 ) { v224 = v76; v223 = v75; v222 = v74; v79 = v206; v203 = v70; v80 = a6; v210 = (char *)v71; v81 = v214; do { v82 = 0; if ( v80 > 0 ) { v83 = 0; v225 = v78; v84 = v209; v226 = v77; v214 = v81; do { v85 = 0; if ( v80 > 0 ) { v227 = (int)&v226[v83]; v86 = 0; v219 = v83; v218 = (char *)v82; do { v87 = 0; if ( v79 > 0 ) { v207 = v227 + v86; v208 = (char *)v86; v200 = v85; do { v88 = 0; if ( v84 > 0 ) { if ( v84 < 5 ) { v94 = (_BYTE *)(v214 + 16 * (_DWORD)v218 + 2 * v200); v90 = v87 + v207; } else { v89 = v214 + 16 * (_DWORD)v218; v202 = 0; v204 = v87 + v207; v205 = v89 + 2 * v200; v217 = v87; do { v90 = v204; v91 = v202; v92 = v200; *(_BYTE *)(v204 + v202) = *(_BYTE *)(v89 + 2 * v200); *(_BYTE *)(v90 + v91 + 1) = *(_BYTE *)(v89 + 2 * v92); *(_BYTE *)(v90 + v91 + 2) = *(_BYTE *)(v89 + 2 * v92); *(_BYTE *)(v90 + v91 + 3) = *(_BYTE *)(v89 + 2 * v92); v93 = v91 + 4; v202 = v93; } while ( v93 <= v221 ); v84 = v209; v79 = v206; v88 = v93; v94 = (_BYTE *)v205; v87 = v217; } v217 = v87; do *(_BYTE *)(v90 + v88++) = *v94; while ( v88 < v84 ); v87 = v217; } v87 += 32; } while ( v87 < v79 ); v86 = (int)v208; v85 = v200; v80 = a6; } v86 += v84; ++v85; } while ( v85 < v80 ); v83 = v219; v82 = (int)v218; } v83 += v79; ++v82; } while ( v82 < v80 ); v78 = v225; v77 = v226; v81 = v214; } v77 += v220; v81 += 128; ++v78; } while ( v78 < (signed int)v210 ); v214 = v81; v76 = v224; v75 = v223; v74 = v222; v70 = v203; v71 = (int)v210; } v76 += v75; ++v74; } while ( v74 < v70 ); v64 = a1[13]; } } else { v207 = (int)v195; v206 = 0; if ( v71 > 0 ) { v150 = v206; v204 = a6 - 1; v200 = a6 - 6; v205 = a6 * v72; v151 = v214; v208 = (char *)(8 * a6); v152 = v207; v209 = v220 / v71; v153 = v216; v210 = (char *)v71; v154 = v215; do { v155 = 0; if ( (signed int)v208 > 0 ) { v221 = v153 + 2 * a6; v220 = v151 + 2 * a6; v156 = 0; v206 = v150; v207 = v152; v214 = v151; v157 = a6; v215 = v154; v216 = v153; do { if ( v209 == 2 ) { v227 = 4 * v155; v219 = 2 * v155; v162 = (signed __int16 *)(v214 + 2 * v155); v217 = (int)v162; v163 = 3 * *v162; v164 = (char *)(v207 + 4 * v155); v218 = v164; *v164 = (*(signed __int16 *)(v221 + 2 * v155 - 2) + v163 + 1) >> 2; v164[1] = (v162[1] + v163 + 2) >> 2; v165 = v227; if ( v204 > 1 ) { v166 = v162 + 1; v167 = (int)&v162[v157 - 1]; v202 = v156; v168 = v207; v203 = v155; do { v165 += 2; v169 = 3 * *v166; v170 = (_BYTE *)(v168 + v165); *v170 = (*(v166 - 1) + v169 + 1) >> 2; v170[1] = (v166[1] + v169 + 2) >> 2; ++v166; } while ( (signed int)v166 < v167 ); v218 = (char *)(v168 + v165); v156 = v202; v155 = v203; v157 = a6; } v171 = v219; v172 = 3 * *(signed __int16 *)(v220 + v219 - 2); v173 = (int)v218; v218[2] = (*(signed __int16 *)(v220 + v219 - 4) + v172 + 1) >> 2; *(_BYTE *)(v173 + 3) = (*(signed __int16 *)(v215 + v171) + v172 + 2) >> 2; } else { v158 = 0; if ( v157 > 0 ) { if ( v157 < 6 ) { v159 = v207 + 4 * v155; v160 = v214 + v156; } else { v159 = v207 + 4 * v155; v160 = v214 + v156; v202 = v156; v203 = v155; do { v161 = v200; *(_BYTE *)(v159 + v158) = *(_BYTE *)(v160 + 2 * v158); *(_BYTE *)(v159 + v158 + 1) = *(_BYTE *)(v160 + 2 * v158 + 2); *(_BYTE *)(v159 + v158 + 2) = *(_BYTE *)(v160 + 2 * v158 + 4); *(_BYTE *)(v159 + v158 + 3) = *(_BYTE *)(v160 + 2 * v158 + 6); *(_BYTE *)(v159 + v158 + 4) = *(_BYTE *)(v160 + 2 * v158 + 8); v158 += 5; } while ( v158 <= v161 ); v156 = v202; v155 = v203; v157 = a6; } v203 = v155; do { *(_BYTE *)(v159 + v158) = *(_BYTE *)(v160 + 2 * v158); ++v158; } while ( v158 < v157 ); v155 = v203; } } v156 += 16; v155 += 8; } while ( v155 < (signed int)v208 ); v150 = v206; v152 = v207; v151 = v214; v154 = v215; v153 = v216; } v152 += v205; v151 += 128; v154 += 128; v153 += 128; ++v150; } while ( v150 < (signed int)v210 ); v214 = v151; v64 = a1[13]; v215 = v154; v216 = v153; } } v67 = v195; if ( v64 == 3 && (v174 = *(_DWORD *)(a2 + 56)) != 0 ) { if ( v174 == 2 ) ++v213; v175 = v197; v176 = v199; if ( v197 < v199 ) { v177 = v198; v178 = 32 * v197; do { v179 = v196; if ( v196 < v177 ) { v180 = (int)&v67[v178]; v221 = v178; v220 = (int)v67; v181 = v213; do { *(_BYTE *)(v181 + a1[15] * v175 + 2 * v179) = *(_BYTE *)(v180 + v179); v179 += 2; v177 = v198; } while ( v179 < v198 ); v178 = v221; v67 = (char *)v220; v176 = v199; } v178 += 32; ++v175; } while ( v175 < v176 ); v64 = a1[13]; } } else { sub_7AB650(a1, &v196, v201, v213, (int)v195); v64 = a1[13]; } if ( v64 != 2 || a1[22] != 1 ) { ++v213; v65 = *a3; v66 = a1[12]; } else { --v213; v65 = *a3; v66 = a1[12]; } } v211 += 24; ++v201; } v220 = (int)v67; v182 = v201; result = a1[29]; if ( result ) { v182 = a1[21]; result = v182 - 1; if ( v182 - 1 != *(_DWORD *)(a2 + 56) ) v182 = v66; } if ( v64 != 255 || (result = a1[22], result != 255) ) { if ( v182 < v66 ) { v183 = v213; v184 = v220; do { sub_7AB650(a1, &v196, v182, v183, v184); result = a1[13]; if ( result != 2 || (result = a1[22], result != 1) ) ++v183; else --v183; ++v182; } while ( v182 < a1[12] ); } } } } return result; } // 7A8060: using guessed type char var_594[1280]; //----- (007A9B40) -------------------------------------------------------- signed int __cdecl sub_7A9B40(_DWORD *a1, signed int a2, int a3, int a4, int a5, signed int a6, char a7) { _DWORD *v7; // esi signed int v8; // edi char *v9; // ebx int v10; // edx int v11; // eax signed int result; // eax int v13; // ebp signed int v14; // eax signed int v15; // edx signed int v16; // ecx int v17; // edx int v18; // ecx int v19; // ebx int v20; // edi int v21; // ecx int v22; // eax int v23; // edx int v24; // esi int v25; // ebp int v26; // edi int v27; // eax char *v28; // ebx int v29; // edx int v30; // ecx int v31; // esi int v32; // edi int v33; // eax signed int v34; // ebp int v35; // ebx int v36; // ecx int v37; // edx int v38; // eax int v39; // edx int v40; // edi int v41; // ebp int v42; // esi int v43; // ecx int v44; // eax int v45; // ecx _BYTE *v46; // ebx int v47; // edx int v48; // edi int v49; // ebp int v50; // esi int v51; // eax int v52; // edx int v53; // ebx signed int v54; // ecx int v55; // edi int v56; // ebp int v57; // esi int v58; // eax int v59; // edx int v60; // ebx int v61; // ebp int v62; // esi int v63; // edi int v64; // esi int v65; // eax int v66; // ecx int v67; // esi int v68; // edx int v69; // edi int v70; // ebp int v71; // ebx signed int v72; // esi int v73; // edx int v74; // edi int v75; // ecx int v76; // ebp signed __int16 *v77; // edi int v78; // edx _BYTE *v79; // ecx int v80; // eax bool v81; // zf bool v82; // sf unsigned __int8 v83; // of int v84; // ecx signed __int16 *v85; // eax int v86; // edx int v87; // ebp int v88; // edi _BYTE *v89; // esi int v90; // edi int v91; // edx int v92; // ecx int v93; // edx int v94; // eax int v95; // ebp int v96; // edi int v97; // ecx int v98; // esi int v99; // ebp signed int v100; // ebx int v101; // edi int v102; // eax int v103; // ecx int v104; // ebp int v105; // esi int v106; // ecx char v107[1280]; // [esp+30h] [ebp-58Ch] int v108; // [esp+530h] [ebp-8Ch] int v109; // [esp+534h] [ebp-88h] int v110; // [esp+538h] [ebp-84h] int v111; // [esp+53Ch] [ebp-80h] char *v112; // [esp+540h] [ebp-7Ch] int v113; // [esp+544h] [ebp-78h] int v114; // [esp+548h] [ebp-74h] int v115; // [esp+54Ch] [ebp-70h] int v116; // [esp+550h] [ebp-6Ch] int v117; // [esp+554h] [ebp-68h] int v118; // [esp+558h] [ebp-64h] int v119; // [esp+55Ch] [ebp-60h] int v120; // [esp+560h] [ebp-5Ch] int v121; // [esp+564h] [ebp-58h] int v122; // [esp+568h] [ebp-54h] int v123; // [esp+56Ch] [ebp-50h] int v124; // [esp+570h] [ebp-4Ch] int v125; // [esp+574h] [ebp-48h] int v126; // [esp+578h] [ebp-44h] int v127; // [esp+57Ch] [ebp-40h] signed __int16 *v128; // [esp+580h] [ebp-3Ch] _BYTE *v129; // [esp+584h] [ebp-38h] int v130; // [esp+588h] [ebp-34h] int v131; // [esp+58Ch] [ebp-30h] char *v132; // [esp+590h] [ebp-2Ch] char *v133; // [esp+594h] [ebp-28h] int v134; // [esp+598h] [ebp-24h] int v135; // [esp+59Ch] [ebp-20h] int v136; // [esp+5A0h] [ebp-1Ch] int v137; // [esp+5A4h] [ebp-18h] v7 = a1; v8 = a6; v9 = 0; if ( a1[4986] != 1 ) { v10 = a1[3566]; v11 = a1[3567]; LABEL_3: v116 = 0; v114 = 0; goto LABEL_4; } v10 = a1[3566]; if ( v10 != 2 ) { v11 = a1[3567]; goto LABEL_3; } v11 = a1[3567]; if ( v11 != 1 ) goto LABEL_3; v114 = 0; v103 = a1[3568]; v104 = v103 - 1; if ( v103 ) { v105 = v114; v116 = a1[3571]; v106 = 16 * v104; v113 = 2; v112 = 0; do { --v104; v105 += *(_DWORD *)(v106 + v116 + 8) * *(_DWORD *)(v106 + v116 + 4); v106 -= 16; } while ( v104 != -1 ); v114 = v105; v10 = v113; v9 = v112; v8 = a6; v7 = a1; } v137 = v114 << 6; v136 = v7[4987]; v116 = *(_DWORD *)(v136 + 4) + (v114 << 6) * 2 * a4; v114 = v116 + (v114 << 8); LABEL_4: v115 = v7[4621]; result = sub_7A7BB0( v7 + 1, v8 * v10, v8 * v11, a4, a5, v7[12], v7[15], v7[8], v7[9], v7[10], (_DWORD *)(a2 + 44), &v108); if ( !result ) { v13 = v7[13]; v134 = *(_DWORD *)(a2 + 44); if ( v13 == 2 && v7[22] == 1 ) { v102 = *(_DWORD *)(a2 + 56); if ( v102 ) { if ( v102 == 1 ) ++v134; } else { v134 += 2; } } v14 = v7[3568]; v136 = 0; v135 = 32 * v8; while ( 1 ) { v15 = v13 == 3 ? 3 : v7[12]; if ( v14 >= v15 ) v16 = v13 == 3 ? 3 : v7[12]; else v16 = v14; v17 = v136; if ( v136 >= v16 ) break; if ( v7[22] != 4 || v136 <= 0 ) { v125 = v7[3566]; v127 = 16 * v136; v18 = v7[3571] + 16 * v136; v19 = *(_DWORD *)(v18 + 4); v119 = v7[3571] + 16 * v136; v120 = v19; v20 = v125 / v19; v21 = *(_DWORD *)(v18 + 8); v126 = v7[3567]; v22 = v126 / v21; if ( a7 ) { v123 = 0; if ( v21 > 0 ) { v47 = v22 * v135; v48 = a6 * v20; v126 = v48 - 6; v49 = v123; v124 = v123 * v22 * v135; v112 = (char *)v48; v50 = v123 * v22 * v135; v117 = a6 * v22; v51 = v120; v113 = v47; v52 = v119; do { v53 = 0; if ( v51 > 0 ) { v125 = (int)&v107[v50]; v54 = (signed int)v112; v55 = v117; v124 = v50; v123 = v49; v56 = v115; do { v57 = 0; if ( v55 > 0 ) { v58 = 0; v59 = 0; v122 = v53; v115 = v56; do { v60 = 0; if ( v54 > 0 ) { if ( v54 < 6 ) { v118 = v125 + v58; v61 = v115 + v59; } else { v118 = v125 + v58; v61 = v115 + v59; v119 = v59; v120 = v58; v121 = v57; do { v62 = v118; v63 = v126; *(_BYTE *)(v118 + v60) = *(_BYTE *)(v61 + 2 * v60); *(_BYTE *)(v62 + v60 + 1) = *(_BYTE *)(v61 + 2 * v60 + 2); *(_BYTE *)(v62 + v60 + 2) = *(_BYTE *)(v61 + 2 * v60 + 4); *(_BYTE *)(v62 + v60 + 3) = *(_BYTE *)(v61 + 2 * v60 + 6); *(_BYTE *)(v62 + v60 + 4) = *(_BYTE *)(v61 + 2 * v60 + 8); v60 += 5; } while ( v60 <= v63 ); v59 = v119; v58 = v120; v57 = v121; v54 = (signed int)v112; } v120 = v58; v121 = v57; v64 = v118; do { *(_BYTE *)(v64 + v60) = *(_BYTE *)(v61 + 2 * v60); ++v60; } while ( v60 < v54 ); v58 = v120; v57 = v121; v55 = v117; } v58 += 32; v59 += 16; ++v57; } while ( v57 < v55 ); v53 = v122; v56 = v115; v52 = v127 + a1[3571]; v51 = *(_DWORD *)(v52 + 4); } v125 += v54; v56 += 128; ++v53; } while ( v53 < v51 ); v115 = v56; v50 = v124; v49 = v123; v21 = *(_DWORD *)(v52 + 8); } v50 += v113; ++v49; } while ( v49 < v21 ); v7 = a1; v13 = a1[13]; } } else if ( v7[4986] != 1 || v125 != 2 || v126 != 1 || a6 == 1 ) { v123 = 0; if ( v21 > 0 ) { v23 = v22 * v135; v24 = v119; v124 = a6 * v20; v125 = v20 - 5; v126 = v123 * v22 * v135; v25 = v123 * v22 * v135; v112 = (char *)v20; v26 = v123; v117 = 32 * v22; v27 = v120; v137 = v23; do { v28 = &v107[v25]; v29 = 0; if ( v27 > 0 ) { v126 = v25; v30 = v115; v123 = v26; v119 = v24; v31 = v117; do { v32 = 0; if ( a6 > 0 ) { v33 = 0; v34 = (signed int)v112; v131 = v29; v132 = v28; v115 = v30; v35 = a6; do { v36 = 0; if ( v35 > 0 ) { v133 = &v132[v33]; v37 = 0; v129 = (_BYTE *)v33; v130 = v32; do { v38 = 0; if ( v31 > 0 ) { v113 = (int)&v133[v37]; v128 = (signed __int16 *)v37; v122 = v36; do { v39 = 0; if ( v34 > 0 ) { if ( v34 < 5 ) { v46 = (_BYTE *)(v115 + 16 * v130 + 2 * v122); v45 = v38 + v113; } else { v40 = v115 + 16 * v130; v121 = 0; v120 = v38 + v113; v119 = v40 + 2 * v122; v118 = v38; do { v41 = v120; v42 = v121; v43 = v122; *(_BYTE *)(v120 + v121) = *(_BYTE *)(v40 + 2 * v122); *(_BYTE *)(v41 + v42 + 1) = *(_BYTE *)(v40 + 2 * v43); *(_BYTE *)(v41 + v42 + 2) = *(_BYTE *)(v40 + 2 * v43); v44 = v125; *(_BYTE *)(v41 + v42 + 3) = *(_BYTE *)(v40 + 2 * v43); v121 = v42 + 4; } while ( v42 + 4 <= v44 ); v34 = (signed int)v112; v31 = v117; v39 = v121; v45 = v120; v46 = (_BYTE *)v119; v38 = v118; } v118 = v38; do *(_BYTE *)(v45 + v39++) = *v46; while ( v39 < v34 ); v38 = v118; } v38 += 32; } while ( v38 < v31 ); v37 = (int)v128; v36 = v122; v35 = a6; } v37 += v34; ++v36; } while ( v36 < v35 ); v33 = (int)v129; v32 = v130; } v33 += v31; ++v32; } while ( v32 < v35 ); v29 = v131; v28 = v132; v30 = v115; v27 = *(_DWORD *)(v127 + a1[3571] + 4); v119 = v127 + a1[3571]; } v28 += v124; v30 += 128; ++v29; } while ( v29 < v27 ); v115 = v30; v25 = v126; v26 = v123; v24 = v119; v21 = *(_DWORD *)(v119 + 8); } v25 += v137; ++v26; } while ( v26 < v21 ); v7 = a1; v13 = a1[13]; } } else { v124 = (int)v107; v125 = 0; if ( v120 > 0 ) { v65 = v120; v122 = a6 - 1; v66 = v115; v67 = v114; v121 = a6 - 6; v123 = a6 * v20; v126 = 8 * a6; v68 = v125; v112 = (char *)v20; v69 = v116; do { v70 = 0; if ( v126 > 0 ) { v137 = v69 + 2 * a6; v71 = 0; v133 = (char *)(v66 + 2 * a6); v125 = v68; v115 = v66; v114 = v67; v116 = v69; v72 = a6; do { if ( v112 == (char *)2 ) { v120 = 4 * v70; v132 = (char *)(2 * v70); v77 = (signed __int16 *)(v115 + 2 * v70); v128 = v77; v78 = 3 * *v77; v79 = (_BYTE *)(v124 + 4 * v70); v80 = *(signed __int16 *)(v137 + 2 * v70 - 2); v129 = v79; *v79 = (v80 + v78 + 1) >> 2; v83 = __OFSUB__(v122, 1); v81 = v122 == 1; v82 = v122 - 1 < 0; v79[1] = (v77[1] + v78 + 2) >> 2; v84 = v120; if ( !((unsigned __int8)(v82 ^ v83) | v81) ) { v85 = v77 + 1; v86 = (int)&v77[v72 - 1]; v131 = v71; v130 = v70; v87 = v124; do { v84 += 2; v88 = 3 * *v85; v89 = (_BYTE *)(v87 + v84); *v89 = (*(v85 - 1) + v88 + 1) >> 2; v89[1] = (v85[1] + v88 + 2) >> 2; ++v85; } while ( (signed int)v85 < v86 ); v129 = (_BYTE *)(v87 + v84); v71 = v131; v70 = v130; v72 = a6; } v90 = (int)v132; v91 = 3 * *(signed __int16 *)&v132[(_DWORD)v133 - 2]; v92 = (int)v129; v129[2] = (*(signed __int16 *)&v132[(_DWORD)v133 - 4] + v91 + 1) >> 2; *(_BYTE *)(v92 + 3) = (*(signed __int16 *)(v114 + v90) + v91 + 2) >> 2; } else { v73 = 0; if ( v72 > 0 ) { if ( v72 < 6 ) { v74 = v124 + 4 * v70; v75 = v115 + v71; } else { v74 = v124 + 4 * v70; v75 = v115 + v71; v131 = v71; v130 = v70; do { v76 = v121; *(_BYTE *)(v74 + v73) = *(_BYTE *)(v75 + 2 * v73); *(_BYTE *)(v74 + v73 + 1) = *(_BYTE *)(v75 + 2 * v73 + 2); *(_BYTE *)(v74 + v73 + 2) = *(_BYTE *)(v75 + 2 * v73 + 4); *(_BYTE *)(v74 + v73 + 3) = *(_BYTE *)(v75 + 2 * v73 + 6); *(_BYTE *)(v74 + v73 + 4) = *(_BYTE *)(v75 + 2 * v73 + 8); v73 += 5; } while ( v73 <= v76 ); v71 = v131; v70 = v130; v72 = a6; } v130 = v70; do { *(_BYTE *)(v74 + v73) = *(_BYTE *)(v75 + 2 * v73); ++v73; } while ( v73 < v72 ); v70 = v130; } } v71 += 16; v70 += 8; } while ( v70 < v126 ); v68 = v125; v66 = v115; v67 = v114; v69 = v116; v65 = *(_DWORD *)(v127 + a1[3571] + 4); } v66 += 128; v67 += 128; v69 += 128; ++v68; v124 += v123; } while ( v68 < v65 ); v115 = v66; v114 = v67; v116 = v69; v7 = a1; v13 = a1[13]; } } v9 = v107; if ( v13 == 3 && v136 ) { if ( v136 == 2 ) ++v134; v93 = v109; v94 = v111; if ( v109 < v111 ) { v95 = v110; v96 = 32 * v109; do { v97 = v108; if ( v108 < v95 ) { v98 = v134; v113 = v96; v112 = v9; do { *(_BYTE *)(v98 + a1[15] * v93 + 2 * v97) = v9[v96 + v97]; v97 += 2; v95 = v110; } while ( v97 < v110 ); v96 = v113; v9 = v112; v94 = v111; } v96 += 32; ++v93; } while ( v93 < v94 ); v7 = a1; v13 = a1[13]; } } else { sub_7AB650(v7, &v108, v136, v134, (int)v107); v13 = v7[13]; } if ( v13 != 2 || v7[22] != 1 ) { ++v134; v14 = v7[3568]; } else { --v134; v14 = v7[3568]; } } ++v136; } result = v7[29]; if ( result ) { v17 = v7[21]; result = a2; if ( v17 - 1 != *(_DWORD *)(a2 + 56) ) v17 = v7[12]; } if ( v13 != 255 || (result = v7[22], result != 255) ) { if ( v17 < v7[12] ) { v99 = (int)v9; v100 = v17; v101 = v134; do { sub_7AB650(v7, &v108, v100, v101, v99); result = v7[13]; if ( result != 2 || (result = v7[22], result != 1) ) ++v101; else --v101; ++v100; } while ( v100 < v7[12] ); } } } return result; } // 7A9B40: using guessed type char var_58C[1280]; //----- (007AA980) -------------------------------------------------------- signed int __cdecl sub_7AA980(int *a1, int a2, int a3, int a4, int a5) { int v5; // ebp signed int result; // eax int v7; // esi int v8; // edx int v9; // eax int v10; // edi int v11; // ebp int v12; // eax int v13; // esi int v14; // edx int v15; // ecx int v16; // ebp int v17; // esi int v18; // eax int v19; // edi int v20; // edx int v21; // ecx int v22; // ebp char v23; // al int v24; // edx int v25; // ecx int v26; // ebp int v27; // edi int v28; // edx int v29; // esi signed int v30; // ebp int v31; // eax int v32; // ecx int v33; // ebp int v34; // eax int v35; // esi int v36; // edi int v37; // edx int v38; // esi int v39; // [esp+30h] [ebp-44h] int v40; // [esp+34h] [ebp-40h] int v41; // [esp+38h] [ebp-3Ch] int v42; // [esp+3Ch] [ebp-38h] int v43; // [esp+40h] [ebp-34h] int v44; // [esp+44h] [ebp-30h] int v45; // [esp+48h] [ebp-2Ch] int v46; // [esp+4Ch] [ebp-28h] int v47; // [esp+50h] [ebp-24h] int v48; // [esp+54h] [ebp-20h] int v49; // [esp+58h] [ebp-1Ch] int v50; // [esp+5Ch] [ebp-18h] v5 = a1[4621]; result = sub_7A7BB0(a1 + 1, a5, a5, a3, a4, a1[12], a1[15], a1[8], a1[9], a1[10], (_DWORD *)(a2 + 44), &v39); if ( !result ) { v7 = a1[13]; if ( v7 != 2 || a1[22] != 1 ) result = *(_DWORD *)(a2 + 44); else result = *(_DWORD *)(a2 + 44) + 2; v8 = 0; if ( a1[12] > 0 ) { v50 = a1[12]; v49 = result; v47 = v5; LABEL_6: if ( v8 >= a1[3568] ) { if ( v8 == 3 && v7 == 5 ) { v32 = v40; v33 = v42; if ( v40 < v42 ) { v34 = v41; v35 = v50; v36 = v49; v43 = 3; do { v37 = v39; if ( v39 < v34 ) { while ( 1 ) { v38 = v37++ * v35; *(_BYTE *)(v38 + v36 + a1[15] * v32) = -1; v34 = v41; if ( v37 >= v41 ) break; v35 = a1[12]; } v35 = a1[12]; v33 = v42; } ++v32; } while ( v32 < v33 ); v50 = v35; v8 = v43; v7 = a1[13]; v49 = v36; } v47 += 128; } } else { v48 = 0; v9 = a1[3571]; v10 = v9 + 16 * v8; v11 = *(_DWORD *)(v10 + 8); if ( v11 > 0 ) { v12 = *(_DWORD *)(16 * v8 + v9 + 4); v13 = v48; v44 = 16 * v8; v43 = v8; v14 = v47; do { v15 = 0; if ( v12 > 0 ) { v16 = v42; v48 = v13; do { v17 = v40; if ( v40 < v16 ) { v18 = v41; v19 = 16 * v40; v47 = v14; v20 = v50; v45 = v15; do { v21 = v39; if ( v39 < v18 ) { v22 = v47 + v19; v46 = v19; while ( 1 ) { v23 = *(_BYTE *)(v22 + 2 * v21); v24 = v21++ * v20; *(_BYTE *)(v24 + v49 + a1[15] * v17) = v23; v18 = v41; if ( v21 >= v41 ) break; v20 = a1[12]; } v19 = v46; v20 = a1[12]; v16 = v42; } v19 += 16; ++v17; } while ( v17 < v16 ); v50 = v20; v14 = v47; v15 = v45; v10 = v44 + a1[3571]; v12 = *(_DWORD *)(v10 + 4); } v14 += 128; ++v15; } while ( v15 < v12 ); v13 = v48; v11 = *(_DWORD *)(v10 + 8); } ++v13; } while ( v13 < v11 ); v47 = v14; v8 = v43; v7 = a1[13]; } } result = v50; v25 = v49; while ( 1 ) { if ( v7 != 2 || a1[22] != 1 ) ++v25; else --v25; if ( ++v8 >= result ) break; if ( v8 <= 0 ) { v50 = result; v49 = v25; goto LABEL_6; } if ( a1[22] != 4 ) { v50 = result; v49 = v25; goto LABEL_6; } v26 = v40; v27 = v42; if ( v40 < v42 ) { v43 = v8; v28 = v41; do { v29 = v39; if ( v39 < v28 ) { v48 = v26; v30 = v43; while ( 1 ) { v31 = v29 * result; *(_BYTE *)(v31 + v25 + a1[15] * v48) = v30 >= 3 ? -1 : *(_BYTE *)(v31 + v25 + a1[15] * v48 - 1); ++v29; v28 = v41; if ( v29 >= v41 ) break; result = a1[12]; } v26 = v48; result = a1[12]; v27 = v42; } ++v26; } while ( v26 < v27 ); v8 = v43; v7 = a1[13]; } } } } return result; } //----- (007AACF0) -------------------------------------------------------- signed int __cdecl sub_7AACF0(int *a1, int a2, int a3, int a4, signed int a5) { signed int result; // eax int v6; // edx int v7; // edi int v8; // esi int v9; // edx int v10; // ecx int v11; // ebp int v12; // edx int v13; // esi int v14; // edi int v15; // eax int v16; // eax int v17; // edx char v18; // al int v19; // edx int v20; // esi int v21; // ebp int v22; // esi int v23; // ebp int v24; // esi int v25; // edx int v26; // ebp int v27; // esi int v28; // edx int v29; // ecx int v30; // edi int v31; // eax int v32; // eax int v33; // edx int v34; // edi int v35; // esi int v36; // edi int v37; // edx int v38; // [esp+30h] [ebp-3Ch] int v39; // [esp+34h] [ebp-38h] int v40; // [esp+38h] [ebp-34h] int v41; // [esp+3Ch] [ebp-30h] int v42; // [esp+44h] [ebp-28h] int v43; // [esp+48h] [ebp-24h] int v44; // [esp+4Ch] [ebp-20h] int v45; // [esp+50h] [ebp-1Ch] int v46; // [esp+54h] [ebp-18h] int v47; // [esp+58h] [ebp-14h] result = a5; v6 = a1[13]; if ( v6 == 1 || v6 == 2 || v6 == 5 ) { result = sub_7A7BB0( a1 + 1, a5 * a1[3566], a1[3567] * a5, a3, a4, a1[12], a1[15], a1[8], a1[9], a1[10], (_DWORD *)(a2 + 44), &v38); if ( !result ) { v7 = a1[12]; if ( v7 == 3 ) { v24 = v39; v25 = v41; if ( v39 < v41 ) { result = 3 * v40; v42 = *(_DWORD *)(a2 + 44); do { v26 = 3 * v38; if ( 3 * v38 < result ) { v43 = v24; do { v27 = v42 + a1[15] * v43; v28 = *(unsigned __int8 *)(v27 + v26); v29 = *(unsigned __int8 *)(v27 + v26 + 1); v30 = *(unsigned __int8 *)(v27 + v26 + 2); v31 = v28 + ((359 * v30 - 45813) >> 8); if ( v31 <= 255 ) { if ( v31 < 0 ) LOWORD(v31) = 0; } else { LOWORD(v31) = 255; } v44 = (signed __int16)v31; v32 = v28 + ((-88 * v29 - 183 * v30 + 34806) >> 8); if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } v33 = ((454 * v29 - 57937) >> 8) + v28; if ( v33 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } if ( a1[13] == 2 ) { *(_BYTE *)(v27 + v26) = v33; v36 = v43; v37 = v42; *(_BYTE *)(v26 + v42 + v43 * a1[15] + 1) = v32; *(_BYTE *)(v26 + v37 + v36 * a1[15] + 2) = v44; } else { v34 = v42; *(_BYTE *)(v27 + v26) = v44; v35 = v43; *(_BYTE *)(v26 + v34 + v43 * a1[15] + 1) = v32; *(_BYTE *)(v26 + v34 + v35 * a1[15] + 2) = v33; } v26 += 3; result = 3 * v40; } while ( v26 < 3 * v40 ); v24 = v43; v25 = v41; } ++v24; } while ( v24 < v25 ); } } else { v8 = v39; v9 = v41; if ( v39 < v41 ) { result = v7 * v40; v42 = *(_DWORD *)(a2 + 44); do { v10 = v38 * v7; if ( v38 * v7 < result ) { v45 = result; v47 = v8; v46 = v7; do { v11 = v42 + a1[15] * v47; v12 = *(unsigned __int8 *)(v11 + v10); v13 = *(unsigned __int8 *)(v11 + v10 + 1); v14 = *(unsigned __int8 *)(v11 + v10 + 2); v15 = v12 + ((359 * v14 - 45813) >> 8); if ( v15 <= 255 ) { if ( v15 < 0 ) LOWORD(v15) = 0; } else { LOWORD(v15) = 255; } v43 = (signed __int16)v15; v16 = v12 + ((-88 * v13 - 183 * v14 + 34806) >> 8); if ( v16 <= 255 ) { if ( v16 < 0 ) LOWORD(v16) = 0; } else { LOWORD(v16) = 255; } v44 = (signed __int16)v16; v17 = ((454 * v13 - 57937) >> 8) + v12; if ( v17 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } v18 = v17; v19 = a1[22]; if ( v19 == 6 ) { v22 = v42; *(_BYTE *)(v11 + v10) = -(char)v43 - 1; v23 = v47; *(_BYTE *)(v10 + v22 + v47 * a1[15] + 1) = -(char)v44 - 1; *(_BYTE *)(v10 + v22 + v23 * a1[15] + 2) = -v18 - 1; v46 = a1[12]; v45 = v40 * v46; } else if ( v19 == 3 ) { v20 = v42; *(_BYTE *)(v11 + v10) = v43; v21 = v47; *(_BYTE *)(v10 + v20 + v47 * a1[15] + 1) = v44; *(_BYTE *)(v10 + v20 + v21 * a1[15] + 2) = v18; v46 = a1[12]; v45 = v40 * v46; } v10 += v46; result = v45; } while ( v10 < v45 ); v8 = v47; v7 = v46; v9 = v41; } ++v8; } while ( v8 < v9 ); } } } } return result; } //----- (007AB0B0) -------------------------------------------------------- signed int __cdecl sub_7AB0B0(int *a1, signed int a2, signed int *a3, int a4, int a5, signed int a6, char a7) { int v7; // eax signed int result; // eax if ( a1[29] && !a1[4984] ) return sub_7A8060(a1, a2, a3, a4, a5, a6, 0, a7); v7 = a1[27]; if ( v7 && a1[26] ) return sub_7A7FB0(a1, a2, a3, a4, a5, a6, a7); if ( v7 || !a1[26] ) { if ( !v7 || a1[26] ) { if ( a1[13] == 3 ) result = sub_7A7FB0(a1, a2, a3, a4, a5, a6, a7); else result = sub_7AA980(a1, a2, a4, a5, a6); } else if ( a3[2] || a1[4984] ) { result = sub_7A9B40(a1, a2, (int)a3, a4, a5, a6, a7); } else { result = sub_7A8060(a1, a2, a3, a4, a5, a6, 1, a7); } } else { sub_7AA980(a1, a2, a4, a5, a6); result = sub_7AACF0(a1, a2, a4, a5, a6); } return result; } //----- (007AB290) -------------------------------------------------------- int __cdecl sub_7AB290(_DWORD *a1) { int result; // eax int v2; // edi int v3; // edx int v4; // esi int v5; // ebx int v6; // edx int v7; // ecx int v8; // ebp int v9; // ebx int v10; // ebx int v11; // edx int v12; // edx int v13; // esi int v14; // ebx int v15; // edx int v16; // ebp int v17; // ebx int v18; // ebx int v19; // edx int v20; // [esp+8h] [ebp-2Ch] int v21; // [esp+8h] [ebp-2Ch] char v22; // [esp+Ch] [ebp-28h] int v23; // [esp+10h] [ebp-24h] int v24; // [esp+10h] [ebp-24h] char v25; // [esp+14h] [ebp-20h] char v26; // [esp+18h] [ebp-1Ch] int v27; // [esp+1Ch] [ebp-18h] int v28; // [esp+1Ch] [ebp-18h] int v29; // [esp+20h] [ebp-14h] int v30; // [esp+24h] [ebp-10h] result = a1[13]; if ( result == 2 || result == 1 || result == 5 ) { result = a1[26]; if ( result ) { result = a1[4] - a1[2]; if ( a1[4] == a1[2] ) result = abs(a1[10]); v2 = a1[12]; v3 = v2 * (a1[3] - a1[1]); if ( !v3 ) v3 = v2 * a1[9]; if ( v2 == 3 ) { v13 = result - 1; if ( result ) { v24 = a1[8]; do { result = 0; if ( v3 > 0 ) { v21 = v3; do { v14 = v24 + a1[15] * v13; v28 = v14; v15 = *(unsigned __int8 *)(v14 + result); v29 = *(unsigned __int8 *)(v14 + result + 1); v16 = *(unsigned __int8 *)(v14 + result + 2); v17 = v15 + ((359 * v16 - 45813) >> 8); if ( v17 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } v25 = v17; v18 = v15 + ((-88 * v29 - 183 * v16 + 34806) >> 8); if ( v18 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } v19 = ((454 * v29 - 57937) >> 8) + v15; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } if ( a1[13] == 2 ) { *(_BYTE *)(v28 + result) = v19; *(_BYTE *)(result + v24 + v13 * a1[15] + 1) = v18; *(_BYTE *)(result + v24 + v13 * a1[15] + 2) = v25; } else { *(_BYTE *)(v28 + result) = v25; *(_BYTE *)(result + v24 + v13 * a1[15] + 1) = v18; *(_BYTE *)(result + v24 + v13 * a1[15] + 2) = v19; } result += a1[12]; v3 = v21; } while ( result < v21 ); } --v13; } while ( v13 != -1 ); } } else { v4 = result - 1; if ( result ) { v27 = a1[12]; v23 = a1[8]; do { result = 0; if ( v3 > 0 ) { v20 = v3; do { v5 = v23 + a1[15] * v4; v30 = v5; v6 = *(unsigned __int8 *)(v5 + result); v7 = *(unsigned __int8 *)(v5 + result + 1); v8 = *(unsigned __int8 *)(v5 + result + 2); v9 = v6 + ((359 * v8 - 45813) >> 8); if ( v9 <= 255 ) { if ( v9 < 0 ) LOBYTE(v9) = 0; } else { LOBYTE(v9) = -1; } v26 = v9; v10 = v6 + ((-88 * v7 - 183 * v8 + 34806) >> 8); if ( v10 <= 255 ) { if ( v10 < 0 ) LOBYTE(v10) = 0; } else { LOBYTE(v10) = -1; } v11 = ((454 * v7 - 57937) >> 8) + v6; if ( v11 <= 255 ) { if ( v11 < 0 ) LOBYTE(v11) = 0; } else { LOBYTE(v11) = -1; } v22 = v11; v12 = a1[22]; if ( v12 == 6 ) { *(_BYTE *)(v30 + result) = -v26 - 1; *(_BYTE *)(result + v23 + v4 * a1[15] + 1) = -(char)v10 - 1; *(_BYTE *)(result + v23 + v4 * a1[15] + 2) = -v22 - 1; v27 = a1[12]; } else if ( v12 == 3 ) { *(_BYTE *)(v30 + result) = v26; *(_BYTE *)(result + v23 + v4 * a1[15] + 1) = v10; *(_BYTE *)(result + v23 + v4 * a1[15] + 2) = v22; *(_BYTE *)(result + v23 + v4 * a1[15] + 3) = -1; v27 = a1[12]; } result += v27; v3 = v20; } while ( result < v20 ); } --v4; } while ( v4 != -1 ); } } } } return result; } //----- (007AB650) -------------------------------------------------------- int __cdecl sub_7AB650(_DWORD *a1, int *a2, signed int a3, int a4, int a5) { int *v5; // edx int result; // eax int v7; // esi int v8; // ebx int v9; // ecx int v10; // edi int v11; // ebp int v12; // ebx char v13; // al int v14; // edi int v15; // ebx int v16; // esi int v17; // ecx int v18; // edi int v19; // ebp int v20; // esi int v21; // ebx char v22; // cl int v23; // esi int v24; // ebx int v25; // ecx int v26; // edi int v27; // ebp int v28; // esi int v29; // ebx int v30; // ecx int v31; // ebx int v32; // esi int v33; // ebp int v34; // edi int v35; // ecx int v36; // eax int v37; // [esp+4h] [ebp-18h] int v38; // [esp+8h] [ebp-14h] int v39; // [esp+8h] [ebp-14h] v5 = a2; if ( a3 < a1[12] || (result = a1[13], result == 3) ) { result = a1[22]; if ( result != 4 || a1[13] != 5 ) { if ( result != 3 && result != 1 || a1[13] != 5 ) { if ( (result != 4 || a1[13] != 1) && (result != 4 || (result = a1[13], result != 2)) ) { v7 = a2[1]; v8 = a2[3]; if ( v7 < v8 ) { v9 = a2[2]; result = 32 * v7; v10 = a5; do { v11 = *a2; if ( *a2 < v9 ) { v12 = v10 + result; v38 = result; do { v13 = *(_BYTE *)(v12 + v11); v14 = v11++ * a1[12]; *(_BYTE *)(v14 + a4 + a1[15] * v7) = v13; v9 = a2[2]; } while ( v11 < v9 ); result = v38; v10 = a5; v8 = a2[3]; } result += 32; ++v7; } while ( v7 < v8 ); } } else { v15 = a2[1]; v16 = a2[3]; if ( v15 < v16 ) { result = a2[2]; v17 = 32 * v15; v18 = a5; do { v19 = *v5; if ( *v5 < result ) { v20 = 3 * v19; v39 = v17; v37 = v15; v21 = v18 + v17; do { *(_BYTE *)(v20 + a4 + v37 * a1[15]) = *(_BYTE *)(v21 + v19); *(_BYTE *)(v20 + a4 + v37 * a1[15] + 1) = *(_BYTE *)(v21 + v19); v22 = *(_BYTE *)(v21 + v19++); *(_BYTE *)(v20 + a4 + v37 * a1[15] + 2) = v22; v20 += 3; result = a2[2]; } while ( v19 < result ); v17 = v39; v15 = v37; v18 = a5; v5 = a2; v16 = a2[3]; } v17 += 32; ++v15; } while ( v15 < v16 ); } } } else if ( a3 >= 3 ) { result = a2[1]; v28 = a2[3]; if ( result < v28 ) { v29 = a2[2]; do { v30 = *a2; if ( *a2 < v29 ) { do { *(_BYTE *)(a4 + a1[15] * result + 4 * v30++) = -1; v29 = a2[2]; } while ( v30 < v29 ); v28 = a2[3]; } ++result; } while ( result < v28 ); } } else { v23 = a2[1]; v24 = a2[3]; if ( v23 < v24 ) { v25 = a2[2]; result = 32 * v23; v26 = a5; do { v27 = *a2; if ( *a2 < v25 ) { do { *(_BYTE *)(a4 + a1[15] * v23 + 4 * v27) = *(_BYTE *)(v26 + result + v27); ++v27; v25 = a2[2]; } while ( v27 < v25 ); v26 = a5; v24 = a2[3]; } result += 32; ++v23; } while ( v23 < v24 ); } } } else { result = a2[1]; if ( result < a2[3] ) { v31 = a2[2]; v32 = 32 * result; v33 = a2[1]; result = a2[3]; v34 = a5; do { v35 = *v5; if ( *v5 < v31 ) { v36 = v34 + v32; do { *(_BYTE *)(a4 + v33 * a1[15] + 4 * v35) = *(_BYTE *)(v36 + v35); *(_BYTE *)(a4 + v33 * a1[15] + 4 * v35 + 1) = *(_BYTE *)(v36 + v35); *(_BYTE *)(a4 + v33 * a1[15] + 4 * v35 + 2) = *(_BYTE *)(v36 + v35); *(_BYTE *)(a4 + v33 * a1[15] + 4 * v35++ + 3) = -1; v31 = a2[2]; } while ( v35 < v31 ); v34 = a5; v5 = a2; result = a2[3]; } v32 += 32; ++v33; } while ( v33 < result ); } } } return result; } //----- (007AB980) -------------------------------------------------------- signed int __cdecl sub_7AB980(int *a1, int a2, int a3) { int *v3; // ebp char *v4; // ebx signed __int16 *v5; // esi int v6; // edx signed int v7; // ecx signed int result; // eax int v9; // ecx signed int v10; // edx int v11; // eax int v12; // ebp int v13; // ecx int v14; // eax int v15; // ecx int v16; // ebp int v17; // ebx int v18; // eax int v19; // edx int v20; // esi int v21; // eax int v22; // ebp char *v23; // esi int v24; // edi int v25; // edx int v26; // ebx int v27; // ecx int v28; // edi int v29; // edx signed __int16 *v30; // esi signed int v31; // ebp signed __int16 v32; // ax int v33; // ebx int v34; // edi int v35; // edx int v36; // esi int v37; // ecx int v38; // edi int v39; // edx int v40; // eax char *v41; // ebp int v42; // esi int v43; // ebx int v44; // ebx int v45; // edx signed __int16 *v46; // ebx signed __int16 *v47; // edx int v48; // ebx int v49; // ebp int v50; // esi signed __int16 *v51; // edx int v52; // ecx signed int v53; // esi int v54; // eax int v55; // edi signed int v56; // edx char v57; // al int v58; // ecx char *v59; // ebx char v60; // al int v61; // ecx int v62; // edx signed __int16 *v63; // eax int v64; // esi int v65; // edi int v66; // ebx int v67; // ecx int v68; // edi int v69; // ebp signed __int16 *v70; // eax int v71; // esi int v72; // ecx int v73; // ebx int v74; // ecx _BYTE *v75; // ebx int v76; // edx int v77; // esi int v78; // ebp int v79; // ecx int v80; // ecx int v81; // ecx int v82; // esi int v83; // edx int v84; // ecx int v85; // ebp int v86; // esi int v87; // ecx int v88; // esi int v89; // edx int v90; // ebp int v91; // edi int v92; // ebx int v93; // edi int v94; // esi int v95; // ebp int v96; // ecx int v97; // ebx int v98; // ebp int v99; // ebp int v100; // ecx char *v101; // edi int v102; // esi char *v103; // ebx signed __int16 *v104; // edx signed __int16 *v105; // ecx int v106; // esi int v107; // ebp int v108; // ebp int v109; // ebp int v110; // ebp int v111; // ebp int v112; // ebp int v113; // ebp signed int v114; // edi int v115; // esi int v116; // eax int v117; // esi int v118; // edi int v119; // eax int v120; // esi int v121; // eax int *v122; // ebp int v123; // esi int v124; // edx int v125; // ecx int v126; // ebx int v127; // eax int v128; // esi int v129; // ebp int v130; // eax signed __int16 *v131; // eax int v132; // esi int v133; // eax int v134; // edi int v135; // eax int v136; // eax char v137[1280]; // [esp+30h] [ebp-59Ch] char v138; // [esp+530h] [ebp-9Ch] char *v139; // [esp+540h] [ebp-8Ch] int v140; // [esp+544h] [ebp-88h] int v141; // [esp+548h] [ebp-84h] int v142; // [esp+54Ch] [ebp-80h] int v143; // [esp+550h] [ebp-7Ch] int v144; // [esp+554h] [ebp-78h] int v145; // [esp+558h] [ebp-74h] int v146; // [esp+55Ch] [ebp-70h] int v147; // [esp+560h] [ebp-6Ch] int v148; // [esp+564h] [ebp-68h] signed __int16 *v149; // [esp+568h] [ebp-64h] signed __int16 *v150; // [esp+56Ch] [ebp-60h] char *v151; // [esp+570h] [ebp-5Ch] int v152; // [esp+574h] [ebp-58h] int v153; // [esp+578h] [ebp-54h] int v154; // [esp+57Ch] [ebp-50h] int v155; // [esp+580h] [ebp-4Ch] int v156; // [esp+584h] [ebp-48h] signed __int16 *v157; // [esp+588h] [ebp-44h] int v158; // [esp+58Ch] [ebp-40h] char *v159; // [esp+590h] [ebp-3Ch] int v160; // [esp+594h] [ebp-38h] int v161; // [esp+598h] [ebp-34h] char *v162; // [esp+59Ch] [ebp-30h] char v163; // [esp+5A0h] [ebp-2Ch] signed __int16 *v164; // [esp+5A4h] [ebp-28h] int v165; // [esp+5A8h] [ebp-24h] signed __int16 *v166; // [esp+5ACh] [ebp-20h] int v167; // [esp+5B0h] [ebp-1Ch] int v168; // [esp+5B4h] [ebp-18h] int v169; // [esp+5B8h] [ebp-14h] v3 = a1; v4 = 0; v5 = 0; v165 = 0; v149 = 0; v164 = 0; v169 = 0; v168 = 0; v167 = 0; v166 = 0; v163 = 0; if ( a1[4986] == 1 ) { v6 = a1[3566]; if ( v6 == 2 ) { v7 = a1[3567]; if ( v7 == 1 ) { v132 = 0; v163 = 1; v133 = a1[3568]; v134 = v133 - 1; if ( v133 ) { v162 = (char *)a1[3571]; v135 = 16 * v134; v140 = 2; v139 = 0; do { --v134; v132 += *(_DWORD *)&v162[v135 + 8] * *(_DWORD *)&v162[v135 + 4]; v135 -= 16; } while ( v134 != -1 ); v6 = v140; v4 = v139; v3 = a1; } v162 = (char *)v3[4987]; v136 = *((_DWORD *)v162 + 1) + (v132 << 6) * 2 * a2; v5 = (signed __int16 *)(v136 + (v132 << 8)); v165 = v136; } } else { v7 = a1[3567]; } if ( v6 == 2 && v7 == 2 ) { v117 = v3[3568]; v118 = v117 - 1; v163 = 2; v119 = 0; if ( v117 ) { v162 = (char *)v3[3571]; v120 = 16 * v118; v140 = 2; v139 = v4; do { --v118; v119 += *(_DWORD *)&v162[v120 + 8] * *(_DWORD *)&v162[v120 + 4]; v120 -= 16; } while ( v118 != -1 ); v6 = v140; v4 = v139; v3 = a1; } v121 = v119 << 6; v139 = v4; v122 = (int *)v3[4987]; v123 = *v122; v140 = v6; v161 = 2; v124 = v121 * a2 + v121; v125 = v121 * a2 + 2 * v121; v149 = (signed __int16 *)(v123 + 2 * v124); v126 = v121 * 2 * a2; v169 = v123 + v126; v127 = v123 + 2 * v125; v128 = v122[1]; v129 = v122[2]; v168 = v127; v130 = v126 + v128; v5 = (signed __int16 *)(v128 + 2 * v125); v165 = v130; v164 = (signed __int16 *)(v129 + 2 * v124); v131 = (signed __int16 *)(v129 + 2 * v125); v7 = 2; v167 = v129 + v126; v6 = v140; v4 = v139; v166 = v131; v3 = a1; } } else { v6 = a1[3566]; v7 = a1[3567]; } v150 = (signed __int16 *)v3[4621]; result = sub_7A7BB0(v3 + 1, 8 * v6, 8 * v7, a2, a3, v3[12], v3[15], v3[8], v3[9], v3[10], v3 + 3589, (int *)&v138); if ( !result ) { v9 = v3[13]; if ( v9 != 2 || v3[22] != 1 ) { v156 = v3[3592] + v3[3589]; } else { v156 = v3[3589]; v116 = v3[3592]; if ( v116 ) { if ( v116 == 1 ) ++v156; } else { v156 += 2; } } v10 = v3[12]; v11 = v3[3568]; v148 = 0; v157 = v5; while ( 1 ) { v12 = v11 >= v10 ? v10 : v11; if ( v148 >= v12 ) break; if ( a1[22] != 4 || v148 <= 0 ) { v161 = 16 * v148; v13 = a1[3571] + 16 * v148; v14 = a1[3566]; v147 = v13; v15 = *(_DWORD *)(v13 + 4); v16 = v14 / v15; v17 = *(_DWORD *)(v147 + 8); v18 = a1[3567] / v17; if ( v163 == 1 ) { v101 = v137; v102 = 0; if ( v15 > 0 ) { do { v103 = v101; v104 = v150; v160 = v102; v105 = v157; v159 = v101 + 256; v162 = v101; v140 = v16; do { if ( v140 == 2 ) { v106 = *v104; *v103 = (*(signed __int16 *)(v165 + 14) + 3 * v106 + 1) >> 2; v103[1] = (v104[1] + 3 * v106 + 2) >> 2; v107 = 3 * v104[1]; v103[2] = (v107 + *v104 + 1) >> 2; v103[3] = (v107 + v104[2] + 2) >> 2; v108 = 3 * v104[2]; v103[4] = (v108 + v104[1] + 1) >> 2; v103[5] = (v108 + v104[3] + 2) >> 2; v109 = 3 * v104[3]; v103[6] = (v109 + v104[2] + 1) >> 2; v103[7] = (v109 + v104[4] + 2) >> 2; v110 = 3 * v104[4]; v103[8] = (v110 + v104[3] + 1) >> 2; v103[9] = (v110 + v104[5] + 2) >> 2; v111 = 3 * v104[5]; v103[10] = (v111 + v104[4] + 1) >> 2; v103[11] = (v111 + v104[6] + 2) >> 2; v112 = 3 * v104[6]; v103[12] = (v112 + v104[5] + 1) >> 2; v103[13] = (v112 + v104[7] + 2) >> 2; v113 = 3 * v104[7]; v103[14] = (v104[6] + v113 + 1) >> 2; v103[15] = (*v105 + v113 + 2) >> 2; } else { *v103 = *(_BYTE *)v104; v103[1] = *((_BYTE *)v104 + 2); v103[2] = *((_BYTE *)v104 + 4); v103[3] = *((_BYTE *)v104 + 6); v103[4] = *((_BYTE *)v104 + 8); v103[5] = *((_BYTE *)v104 + 10); v103[6] = *((_BYTE *)v104 + 12); v103[7] = *((_BYTE *)v104 + 14); } v104 += 8; v105 += 8; v103 += 32; v165 += 16; } while ( (signed int)v159 > (signed int)v103 ); v150 = v104; v157 = v105; v16 = v140; v101 = &v162[8 * v140]; v102 = v160 + 1; } while ( v160 + 1 < *(_DWORD *)(v161 + a1[3571] + 4) ); } } else if ( v163 == 2 ) { v154 = 0; if ( v17 > 0 ) { v139 = (char *)(v18 << 8); v141 = 8 * v16; v142 = 32 * v18; v38 = v154; v162 = (char *)(v16 - 6); v39 = v147; v155 = v18; v40 = v18 << 8; v140 = v16; do { v41 = &v137[v38 * v40]; v42 = 0; if ( v15 > 0 ) { v147 = v39; v43 = v140; do { if ( v43 != 2 || v155 != 2 ) { v38 = 0; if ( *(_DWORD *)(v147 + 8) > 0 ) { v44 = *(_DWORD *)(v147 + 8); v45 = 0; do { v41 = &v137[v45]; v42 = 0; if ( v15 > 0 ) { v153 = v45; v46 = v149; v47 = v157; v154 = v38; do { v145 = 0; if ( v40 > 0 ) { v149 = v46; v48 = v142; v151 = v41; v49 = v141; v152 = v42; v50 = 0; v157 = v47; v51 = v150; do { v52 = 0; if ( v49 > 0 ) { v145 = v50; v53 = v140; do { v54 = *v51; v55 = 0; ++v51; if ( v48 > 0 ) { v150 = v51; v147 = v52; v146 = v54; do { v56 = 0; if ( v53 > 0 ) { if ( v53 < 6 ) { v143 = (int)&v151[v145 + v147 + v55]; v144 = (unsigned __int8)v146; } else { v143 = (int)&v151[v145 + v147 + v55]; v57 = v146; v58 = (int)&v151[v145 + v147 + v55]; v144 = (unsigned __int8)v146; v59 = v162; do { *(_BYTE *)(v58 + v56) = v57; *(_BYTE *)(v58 + v56 + 1) = v57; *(_BYTE *)(v58 + v56 + 2) = v57; *(_BYTE *)(v58 + v56 + 3) = v57; *(_BYTE *)(v58 + v56 + 4) = v57; v56 += 5; } while ( v56 <= (signed int)v59 ); v53 = v140; } v60 = v144; v61 = v143; do *(_BYTE *)(v61 + v56++) = v60; while ( v56 < v53 ); } v55 += 32; } while ( v55 < v142 ); v51 = v150; v52 = v147; v48 = v142; v49 = v141; } v52 += v53; } while ( v52 < v49 ); v50 = v145; v40 = (int)v139; } v50 += v48; } while ( v50 < v40 ); v150 = v51; v46 = v149; v41 = v151; v42 = v152; v47 = v157; v147 = v161 + a1[3571]; v15 = *(_DWORD *)(v147 + 4); } v41 += 8 * v140; v46 += 64; v165 += 128; v47 += 64; ++v42; v164 += 64; v169 += 128; v168 += 128; v167 += 128; v166 += 64; } while ( v42 < v15 ); v149 = v46; v38 = v154; v157 = v47; v45 = v153; v44 = *(_DWORD *)(v147 + 8); } v45 += v40; ++v38; } while ( v38 < v44 ); v43 = v140; } } else { v62 = 0; v63 = v150; v151 = v41; v158 = 7; v152 = v42; v154 = v38; do { v64 = 9 * *v63; v65 = 3 * *(signed __int16 *)(v165 + 14); v143 = 3 * v63[1]; if ( v62 ) { v66 = 3 * *(v63 - 8); v67 = *(v63 - 7); v146 = *(signed __int16 *)(v165 - 2); v144 = v67; } else { v66 = 3 * v149[56]; v146 = *(signed __int16 *)(v169 + 126); v144 = v149[57]; } if ( v158 ) { v153 = 3 * v63[8]; v147 = *(signed __int16 *)(v165 + 30); v145 = v63[9]; } else { v153 = 3 * *v164; v147 = *(signed __int16 *)(v167 + 14); v145 = v164[1]; } v68 = v64 + v65; v69 = (int)v151; v151[v62] = (v68 + v66 + v146 + 8) >> 4; v70 = v63 + 1; v71 = v143 + v64; v72 = v147; *(_BYTE *)(v62 + v69 + 1) = (v71 + v66 + v144 + 7) >> 4; v73 = v71 + v153; *(_BYTE *)(v62 + v69 + 32) = (v153 + v68 + v72 + 8) >> 4; v74 = (v73 + v145 + 7) >> 4; v75 = (_BYTE *)(v69 + v62 + 2); *(_BYTE *)(v62 + v69 + 33) = v74; ++v149; ++v164; v153 = v69 + v62 + 14; v159 = (char *)v62; do { v76 = 9 * *v70; v77 = 3 * *(v70 - 1); v147 = 3 * v70[1]; if ( v159 ) { v78 = 3 * *(v70 - 8); v144 = *(v70 - 9); v145 = *(v70 - 7); } else { v78 = 3 * v149[56]; v79 = v149[57]; v144 = v149[55]; v145 = v79; } if ( v158 ) { v80 = v70[7]; v160 = 3 * v70[8]; v143 = v80; v146 = v70[9]; } else { v160 = 3 * *v164; v81 = v164[1]; v143 = *(v164 - 1); v146 = v81; } v82 = v76 + v77; ++v70; *v75 = (v82 + v78 + v144 + 8) >> 4; v83 = v147 + v76; v84 = (v83 + v78 + v145 + 7) >> 4; v85 = v160; v86 = v160 + v82; v75[1] = v84; v87 = (v86 + v143 + 8) >> 4; v88 = v146; v75[32] = v87; v75[33] = (v83 + v85 + v88 + 7) >> 4; v75 += 2; ++v149; ++v164; } while ( v153 > (signed int)v75 ); v89 = (int)v159; v90 = 9 * *v70; v91 = 3 * *(v70 - 1); v143 = 3 * *v157; if ( v159 ) { v92 = 3 * *(v70 - 8); v147 = *(v70 - 9); v144 = *(v157 - 8); } else { v92 = 3 * v149[56]; v147 = v149[55]; v144 = *(signed __int16 *)(v168 + 112); } v157 += 8; if ( v158 ) { v153 = 3 * v70[8]; v146 = v70[7]; v145 = *v157; } else { v153 = 3 * *v164; v146 = *(v164 - 1); v145 = *v166; } v93 = v90 + v91; v94 = (int)v151; v151[(_DWORD)v159 + 14] = (v93 + v92 + v147 + 8) >> 4; v63 = v70 + 1; v95 = v143 + v90; v96 = v146; *(_BYTE *)(v89 + v94 + 15) = (v95 + v92 + v144 + 7) >> 4; v97 = v95 + v153; *(_BYTE *)(v89 + v94 + 46) = (v153 + v93 + v96 + 8) >> 4; v98 = v158 - 1; *(_BYTE *)(v89 + v94 + 47) = (v97 + v145 + 7) >> 4; v62 = v89 + 64; v165 += 16; v149 -= 7; v164 -= 7; v158 = v98; } while ( v98 != -1 ); v150 = v63; v99 = v94; v42 = v152; v38 = v154; v40 = (int)v139; v43 = v140; v41 = (char *)(v99 + 16); v100 = a1[3571]; v149 += 64; v164 += 64; v169 += 128; v168 += 128; v167 += 128; v166 += 64; v147 = v161 + v100; v15 = *(_DWORD *)(v161 + v100 + 4); } ++v42; } while ( v42 < v15 ); v39 = v147; v17 = *(_DWORD *)(v147 + 8); } ++v38; } while ( v38 < v17 ); } } else { v19 = 0; if ( v17 > 0 ) { v160 = v18 << 8; v159 = (char *)(8 * v16); v154 = v16 - 6; v20 = 0; v158 = 0; v155 = 32 * v18; v21 = v18 << 8; v140 = v16; v22 = v147; do { v162 = &v137[v20]; v153 = 0; if ( v15 > 0 ) { v158 = v20; v23 = v162; v24 = v140; v146 = v19; v25 = v153; do { v26 = 0; if ( v21 > 0 ) { v153 = v25; v27 = v155; v28 = (int)v159; do { v29 = 0; if ( v28 > 0 ) { v147 = (int)&v23[v26]; v162 = v23; v30 = v150; v31 = v140; v145 = v26; do { v32 = *v30; v33 = 0; ++v30; if ( v27 > 0 ) { v34 = v29 + v147; v152 = v29 + v147; v151 = (char *)(unsigned __int8)v32; v150 = v30; v144 = v29; do { v35 = 0; if ( v31 > 0 ) { if ( v31 < 6 ) { v36 = v33 + v34; } else { v36 = v33 + v34; v37 = v154; do { *(_BYTE *)(v36 + v35) = v32; *(_BYTE *)(v36 + v35 + 1) = v32; *(_BYTE *)(v36 + v35 + 2) = v32; *(_BYTE *)(v36 + v35 + 3) = v32; *(_BYTE *)(v36 + v35 + 4) = v32; v35 += 5; } while ( v35 <= v37 ); v31 = v140; } do *(_BYTE *)(v36 + v35++) = v32; while ( v35 < v31 ); v27 = v155; } v33 += 32; } while ( v33 < v27 ); v30 = v150; v29 = v144; } v29 += v31; } while ( v29 < (signed int)v159 ); v150 = v30; v23 = v162; v26 = v145; v28 = (int)v159; v21 = v160; } v26 += v27; } while ( v26 < v21 ); v25 = v153; v24 = v140; v22 = v161 + a1[3571]; v15 = *(_DWORD *)(v22 + 4); } v23 += 8 * v24; ++v25; } while ( v25 < v15 ); v20 = v158; v19 = v146; v17 = *(_DWORD *)(v22 + 8); } v20 += v21; ++v19; } while ( v19 < v17 ); } } v4 = v137; sub_7AB650(a1, (int *)&v138, v148, v156, (int)v137); v9 = a1[13]; if ( v9 != 2 || a1[22] != 1 ) { ++v156; v10 = a1[12]; v11 = a1[3568]; } else { --v156; v10 = a1[12]; v11 = a1[3568]; } } ++v148; } v114 = v148; result = a1[29]; if ( result ) { v114 = a1[21]; result = v114 - 1; if ( v114 - 1 != a1[3592] ) v114 = v10; } if ( v9 != 255 || (result = a1[22], result != 255) ) { if ( v114 < v10 ) { v115 = v156; do { sub_7AB650(a1, (int *)&v138, v114, v115, (int)v4); result = a1[13]; if ( result != 2 || (result = a1[22], result != 1) ) ++v115; else --v115; ++v114; } while ( v114 < a1[12] ); } } } return result; } // 7AB980: using guessed type char var_59C[1280]; //----- (007ACC00) -------------------------------------------------------- signed int __cdecl sub_7ACC00(int *a1, int a2, int a3, int a4) { signed int result; // eax int v5; // ecx int v6; // edi int v7; // esi int v8; // edx int v9; // ecx int v10; // ebp int v11; // edx int v12; // esi int v13; // edi int v14; // eax int v15; // eax int v16; // edx char v17; // al int v18; // edx int v19; // esi int v20; // ebp int v21; // esi int v22; // ebp int v23; // esi int v24; // edx int v25; // ebp int v26; // esi int v27; // edx int v28; // ecx int v29; // edi int v30; // eax int v31; // eax int v32; // edx int v33; // edi int v34; // esi int v35; // edi int v36; // edx int v37; // [esp+30h] [ebp-3Ch] int v38; // [esp+34h] [ebp-38h] int v39; // [esp+38h] [ebp-34h] int v40; // [esp+3Ch] [ebp-30h] int v41; // [esp+44h] [ebp-28h] int v42; // [esp+48h] [ebp-24h] int v43; // [esp+4Ch] [ebp-20h] int v44; // [esp+50h] [ebp-1Ch] int v45; // [esp+54h] [ebp-18h] int v46; // [esp+58h] [ebp-14h] result = a3; v5 = a1[13]; if ( v5 == 2 || v5 == 1 || v5 == 5 ) { result = sub_7A7BB0( a1 + 1, 8 * a1[3566], 8 * a1[3567], a3, a4, a1[12], a1[15], a1[8], a1[9], a1[10], (_DWORD *)(a2 + 44), &v37); if ( !result ) { v6 = a1[12]; if ( v6 == 3 ) { v23 = v38; v24 = v40; if ( v38 < v40 ) { result = 3 * v39; v41 = *(_DWORD *)(a2 + 44); do { v25 = 3 * v37; if ( 3 * v37 < result ) { v42 = v23; do { v26 = v41 + a1[15] * v42; v27 = *(unsigned __int8 *)(v26 + v25); v28 = *(unsigned __int8 *)(v26 + v25 + 1); v29 = *(unsigned __int8 *)(v26 + v25 + 2); v30 = v27 + ((359 * v29 - 45813) >> 8); if ( v30 <= 255 ) { if ( v30 < 0 ) LOWORD(v30) = 0; } else { LOWORD(v30) = 255; } v43 = (signed __int16)v30; v31 = v27 + ((-88 * v28 - 183 * v29 + 34806) >> 8); if ( v31 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } v32 = ((454 * v28 - 57937) >> 8) + v27; if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } if ( a1[13] == 2 ) { *(_BYTE *)(v26 + v25) = v32; v35 = v42; v36 = v41; *(_BYTE *)(v25 + v41 + v42 * a1[15] + 1) = v31; *(_BYTE *)(v25 + v36 + v35 * a1[15] + 2) = v43; } else { v33 = v41; *(_BYTE *)(v26 + v25) = v43; v34 = v42; *(_BYTE *)(v25 + v33 + v42 * a1[15] + 1) = v31; *(_BYTE *)(v25 + v33 + v34 * a1[15] + 2) = v32; } v25 += 3; result = 3 * v39; } while ( v25 < 3 * v39 ); v23 = v42; v24 = v40; } ++v23; } while ( v23 < v24 ); } } else { v7 = v38; v8 = v40; if ( v38 < v40 ) { result = v6 * v39; v41 = *(_DWORD *)(a2 + 44); do { v9 = v37 * v6; if ( v37 * v6 < result ) { v44 = result; v46 = v7; v45 = v6; do { v10 = v41 + a1[15] * v46; v11 = *(unsigned __int8 *)(v10 + v9); v12 = *(unsigned __int8 *)(v10 + v9 + 1); v13 = *(unsigned __int8 *)(v10 + v9 + 2); v14 = v11 + ((359 * v13 - 45813) >> 8); if ( v14 <= 255 ) { if ( v14 < 0 ) LOWORD(v14) = 0; } else { LOWORD(v14) = 255; } v42 = (signed __int16)v14; v15 = v11 + ((-88 * v12 - 183 * v13 + 34806) >> 8); if ( v15 <= 255 ) { if ( v15 < 0 ) LOWORD(v15) = 0; } else { LOWORD(v15) = 255; } v43 = (signed __int16)v15; v16 = ((454 * v12 - 57937) >> 8) + v11; if ( v16 <= 255 ) { if ( v16 < 0 ) LOBYTE(v16) = 0; } else { LOBYTE(v16) = -1; } v17 = v16; v18 = a1[22]; if ( v18 == 6 ) { v21 = v41; *(_BYTE *)(v10 + v9) = -(char)v42 - 1; v22 = v46; *(_BYTE *)(v9 + v21 + v46 * a1[15] + 1) = -(char)v43 - 1; *(_BYTE *)(v9 + v21 + v22 * a1[15] + 2) = -v17 - 1; v45 = a1[12]; v44 = v39 * v45; } else if ( v18 == 3 ) { v19 = v41; *(_BYTE *)(v10 + v9) = v42; v20 = v46; *(_BYTE *)(v9 + v19 + v46 * a1[15] + 1) = v43; *(_BYTE *)(v9 + v19 + v20 * a1[15] + 2) = v17; v45 = a1[12]; v44 = v39 * v45; } v9 += v45; result = v44; } while ( v9 < v44 ); v7 = v46; v6 = v45; v8 = v40; } ++v7; } while ( v7 < v8 ); } } } } return result; } //----- (007ACFC0) -------------------------------------------------------- int __cdecl sub_7ACFC0(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx char v26; // dl int v27; // ecx int v28; // ebp int v29; // esi int v30; // ebx int v31; // ebx char v32; // dl int v33; // eax __int16 v34; // [esp+0h] [ebp-8Ch] __int16 v35; // [esp+2h] [ebp-8Ah] __int16 v36; // [esp+4h] [ebp-88h] __int16 v37[13]; // [esp+6h] [ebp-86h] __int16 v38; // [esp+20h] [ebp-6Ch] __int16 v39; // [esp+22h] [ebp-6Ah] __int16 v40; // [esp+24h] [ebp-68h] __int16 v41[13]; // [esp+26h] [ebp-66h] __int16 v42; // [esp+40h] [ebp-4Ch] __int16 v43; // [esp+42h] [ebp-4Ah] __int16 v44; // [esp+44h] [ebp-48h] __int16 v45[13]; // [esp+46h] [ebp-46h] int v46; // [esp+60h] [ebp-2Ch] int v47; // [esp+64h] [ebp-28h] int v48; // [esp+68h] [ebp-24h] int v49; // [esp+6Ch] [ebp-20h] int v50; // [esp+70h] [ebp-1Ch] int v51; // [esp+74h] [ebp-18h] int v52; // [esp+78h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v46 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v34 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v38 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v42 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v35 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v39 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v43 + 4 * result) = v14; v16 = v7[2]; *(&v36 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v40 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v44 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v37[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v41[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v45[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 4 ); v19 = v46; v20 = a5; v21 = a5[3]; if ( v46 < v21 ) { v22 = a5[2]; result = 16 * v46; do { v23 = *v20; if ( *v20 < v22 ) { v48 = (signed int)(__CFADD__(v19, 2147483648) + v19 + 2147483648 + 2147483648) >> 1; v49 = a1 + result; v47 = result; v50 = v8; v46 = v19; do { v24 = *(signed __int16 *)(v49 + 2 * v23); v52 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 4 * v48; v25 = v24 + *(&v34 + v52); v51 = v25; if ( v25 <= 255 ) { v26 = v25; if ( v25 < 0 ) { v26 = 0; v51 = 0; } } else { v26 = -1; v51 = 255; } v27 = 3 * v23; v28 = v50; v29 = v52; v30 = *(&v38 + v52); *(_BYTE *)(3 * v23 + v50) = v26; v31 = v24 - v30; v51 = v31; if ( v31 <= 255 ) { v32 = v31; if ( v31 < 0 ) { v32 = 0; v51 = 0; } } else { v32 = -1; v51 = 255; } v8 = v28; *(_BYTE *)(v27 + v28 + 1) = v32; v33 = *(&v42 + v29) + v24; if ( v33 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } ++v23; *(_BYTE *)(v27 + v28 + 2) = v33; v22 = a5[2]; } while ( v23 < v22 ); result = v47; v19 = v46; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7ACFC0: using guessed type __int16 var_86[13]; // 7ACFC0: using guessed type __int16 var_66[13]; // 7ACFC0: using guessed type __int16 var_46[13]; //----- (007AD2A0) -------------------------------------------------------- _BYTE *__cdecl sub_7AD2A0(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // ebx int v8; // edi int v9; // ecx int v10; // edi int v11; // ebx int v12; // ecx int v13; // edi int v14; // ebx int v15; // ecx int v16; // ebx int v17; // ecx int v18; // ebx int v19; // ebx int v20; // ecx int v21; // ecx int v22; // ebx int v23; // ebx int v24; // ecx int v25; // ecx int v26; // ebx int v27; // ebx int v28; // ecx int v29; // ecx int v30; // ebx int v31; // ebx int v32; // ecx int v33; // ecx int v34; // ebx int v35; // ebx int v36; // ecx int v37; // ecx int v38; // ebx int v39; // ebx int v40; // ecx int v41; // ecx int v42; // ebx int v43; // ebx int v44; // ecx int v45; // ecx int v46; // ebx int v47; // ebx int v48; // ecx int v49; // ecx int v50; // ebx _BYTE *v51; // eax int v52; // ebx int v53; // ecx int v54; // ecx int v55; // ebx int v56; // ebx int v57; // ecx int v58; // ecx int v59; // ebx int v60; // ebx int v61; // ecx int v62; // ecx int v63; // ebx int v64; // ebx int v65; // ecx int v66; // ecx int v67; // ebx int v68; // ebx int v69; // ecx int v70; // ecx int v71; // ebx int v72; // ebx int v73; // ecx int v74; // ecx int v75; // ebx int v76; // ebx int v77; // ecx int v78; // ecx int v79; // ebx int v80; // ebx int v81; // ecx signed int v82; // [esp+4h] [ebp-48h] int v83; // [esp+8h] [ebp-44h] int v84; // [esp+Ch] [ebp-40h] int v85; // [esp+10h] [ebp-3Ch] int v86; // [esp+14h] [ebp-38h] signed __int16 *v87; // [esp+18h] [ebp-34h] signed __int16 *v88; // [esp+1Ch] [ebp-30h] int v89; // [esp+20h] [ebp-2Ch] int v90; // [esp+24h] [ebp-28h] int v91; // [esp+28h] [ebp-24h] int v92; // [esp+2Ch] [ebp-20h] int v93; // [esp+30h] [ebp-1Ch] int v94; // [esp+34h] [ebp-18h] int v95; // [esp+38h] [ebp-14h] int v96; // [esp+3Ch] [ebp-10h] v5 = a1; result = a4; v82 = 0; v87 = a3; v88 = a2; do { v7 = *v87; v96 = (359 * v7 - 45813) >> 8; v8 = *v88; v93 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v88[1]; v86 = v9; v11 = v87[1]; v95 = (359 * v11 - 45813) >> 8; v91 = (88 * v10 + 183 * v11 - 34806) >> 8; v12 = (454 * v10 - 57937) >> 8; v13 = v88[2]; v85 = v12; v14 = v87[2]; v94 = (359 * v14 - 45813) >> 8; v90 = (88 * v13 + 183 * v14 - 34806) >> 8; v84 = (454 * v13 - 57937) >> 8; v15 = v87[3]; v92 = (359 * v15 - 45813) >> 8; v16 = v88[3]; v89 = (88 * v16 + 183 * v15 - 34806) >> 8; v83 = (454 * v16 - 57937) >> 8; v17 = *v5; v18 = v96 + v17; v88 += 8; v87 += 8; if ( v96 + v17 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } *result = v18; v19 = v17 - v93; if ( v17 - v93 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[1] = v19; v20 = v86 + v17; if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } result[2] = v20; v21 = v5[1]; v22 = v96 + v21; if ( v96 + v21 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[3] = v22; v23 = v21 - v93; if ( v21 - v93 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[4] = v23; v24 = v86 + v21; if ( v24 <= 255 ) { if ( v24 < 0 ) LOBYTE(v24) = 0; } else { LOBYTE(v24) = -1; } result[5] = v24; v25 = v5[2]; v26 = v25 + v95; if ( v25 + v95 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[6] = v26; v27 = v25 - v91; if ( v25 - v91 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[7] = v27; v28 = v85 + v25; if ( v28 <= 255 ) { if ( v28 < 0 ) LOBYTE(v28) = 0; } else { LOBYTE(v28) = -1; } result[8] = v28; v29 = v5[3]; v30 = v29 + v95; if ( v29 + v95 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[9] = v30; v31 = v29 - v91; if ( v29 - v91 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[10] = v31; v32 = v85 + v29; if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } result[11] = v32; v33 = v5[4]; v34 = v33 + v94; if ( v33 + v94 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[12] = v34; v35 = v33 - v90; if ( v33 - v90 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[13] = v35; v36 = v84 + v33; if ( v36 <= 255 ) { if ( v36 < 0 ) LOBYTE(v36) = 0; } else { LOBYTE(v36) = -1; } result[14] = v36; v37 = v5[5]; v38 = v37 + v94; if ( v37 + v94 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[15] = v38; v39 = v37 - v90; if ( v37 - v90 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[16] = v39; v40 = v84 + v37; if ( v40 <= 255 ) { if ( v40 < 0 ) LOBYTE(v40) = 0; } else { LOBYTE(v40) = -1; } result[17] = v40; v41 = v5[6]; v42 = v41 + v92; if ( v41 + v92 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[18] = v42; v43 = v41 - v89; if ( v41 - v89 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[19] = v43; v44 = v83 + v41; if ( v44 <= 255 ) { if ( v44 < 0 ) LOBYTE(v44) = 0; } else { LOBYTE(v44) = -1; } result[20] = v44; v45 = v5[7]; v46 = v45 + v92; if ( v45 + v92 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[21] = v46; v47 = v45 - v89; if ( v45 - v89 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } result[22] = v47; v48 = v83 + v45; if ( v48 <= 255 ) { if ( v48 < 0 ) LOBYTE(v48) = 0; } else { LOBYTE(v48) = -1; } result[23] = v48; v49 = v5[8]; v50 = v96 + v49; v51 = &result[a5]; if ( v96 + v49 <= 255 ) { if ( v50 < 0 ) LOBYTE(v50) = 0; } else { LOBYTE(v50) = -1; } *v51 = v50; v52 = v49 - v93; if ( v49 - v93 <= 255 ) { if ( v52 < 0 ) LOBYTE(v52) = 0; } else { LOBYTE(v52) = -1; } v51[1] = v52; v53 = v86 + v49; if ( v53 <= 255 ) { if ( v53 < 0 ) LOBYTE(v53) = 0; } else { LOBYTE(v53) = -1; } v51[2] = v53; v54 = v5[9]; v55 = v54 + v96; if ( v54 + v96 <= 255 ) { if ( v55 < 0 ) LOBYTE(v55) = 0; } else { LOBYTE(v55) = -1; } v51[3] = v55; v56 = v54 - v93; if ( v54 - v93 <= 255 ) { if ( v56 < 0 ) LOBYTE(v56) = 0; } else { LOBYTE(v56) = -1; } v51[4] = v56; v57 = v86 + v54; if ( v57 <= 255 ) { if ( v57 < 0 ) LOBYTE(v57) = 0; } else { LOBYTE(v57) = -1; } v51[5] = v57; v58 = v5[10]; v59 = v58 + v95; if ( v58 + v95 <= 255 ) { if ( v59 < 0 ) LOBYTE(v59) = 0; } else { LOBYTE(v59) = -1; } v51[6] = v59; v60 = v58 - v91; if ( v58 - v91 <= 255 ) { if ( v60 < 0 ) LOBYTE(v60) = 0; } else { LOBYTE(v60) = -1; } v51[7] = v60; v61 = v85 + v58; if ( v61 <= 255 ) { if ( v61 < 0 ) LOBYTE(v61) = 0; } else { LOBYTE(v61) = -1; } v51[8] = v61; v62 = v5[11]; v63 = v62 + v95; if ( v62 + v95 <= 255 ) { if ( v63 < 0 ) LOBYTE(v63) = 0; } else { LOBYTE(v63) = -1; } v51[9] = v63; v64 = v62 - v91; if ( v62 - v91 <= 255 ) { if ( v64 < 0 ) LOBYTE(v64) = 0; } else { LOBYTE(v64) = -1; } v51[10] = v64; v65 = v85 + v62; if ( v65 <= 255 ) { if ( v65 < 0 ) LOBYTE(v65) = 0; } else { LOBYTE(v65) = -1; } v51[11] = v65; v66 = v5[12]; v67 = v66 + v94; if ( v66 + v94 <= 255 ) { if ( v67 < 0 ) LOBYTE(v67) = 0; } else { LOBYTE(v67) = -1; } v51[12] = v67; v68 = v66 - v90; if ( v66 - v90 <= 255 ) { if ( v68 < 0 ) LOBYTE(v68) = 0; } else { LOBYTE(v68) = -1; } v51[13] = v68; v69 = v84 + v66; if ( v69 <= 255 ) { if ( v69 < 0 ) LOBYTE(v69) = 0; } else { LOBYTE(v69) = -1; } v51[14] = v69; v70 = v5[13]; v71 = v70 + v94; if ( v70 + v94 <= 255 ) { if ( v71 < 0 ) LOBYTE(v71) = 0; } else { LOBYTE(v71) = -1; } v51[15] = v71; v72 = v70 - v90; if ( v70 - v90 <= 255 ) { if ( v72 < 0 ) LOBYTE(v72) = 0; } else { LOBYTE(v72) = -1; } v51[16] = v72; v73 = v84 + v70; if ( v73 <= 255 ) { if ( v73 < 0 ) LOBYTE(v73) = 0; } else { LOBYTE(v73) = -1; } v51[17] = v73; v74 = v5[14]; v75 = v74 + v92; if ( v74 + v92 <= 255 ) { if ( v75 < 0 ) LOBYTE(v75) = 0; } else { LOBYTE(v75) = -1; } v51[18] = v75; v76 = v74 - v89; if ( v74 - v89 <= 255 ) { if ( v76 < 0 ) LOBYTE(v76) = 0; } else { LOBYTE(v76) = -1; } v51[19] = v76; v77 = v83 + v74; if ( v77 <= 255 ) { if ( v77 < 0 ) LOBYTE(v77) = 0; } else { LOBYTE(v77) = -1; } v51[20] = v77; v78 = v5[15]; v79 = v78 + v92; if ( v78 + v92 <= 255 ) { if ( v79 < 0 ) LOBYTE(v79) = 0; } else { LOBYTE(v79) = -1; } v51[21] = v79; v80 = v78 - v89; if ( v78 - v89 <= 255 ) { if ( v80 < 0 ) LOBYTE(v80) = 0; } else { LOBYTE(v80) = -1; } v51[22] = v80; v81 = v83 + v78; if ( v81 <= 255 ) { if ( v81 < 0 ) LOBYTE(v81) = 0; } else { LOBYTE(v81) = -1; } v5 += 16; v51[23] = v81; result = &v51[a5]; v82 += 2; } while ( v82 < 8 ); return result; } //----- (007AE060) -------------------------------------------------------- int __cdecl sub_7AE060(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx char v26; // dl int v27; // ecx int v28; // ebp int v29; // esi int v30; // ebx int v31; // ebx char v32; // dl int v33; // eax __int16 v34; // [esp+0h] [ebp-8Ch] __int16 v35; // [esp+2h] [ebp-8Ah] __int16 v36; // [esp+4h] [ebp-88h] __int16 v37[13]; // [esp+6h] [ebp-86h] __int16 v38; // [esp+20h] [ebp-6Ch] __int16 v39; // [esp+22h] [ebp-6Ah] __int16 v40; // [esp+24h] [ebp-68h] __int16 v41[13]; // [esp+26h] [ebp-66h] __int16 v42; // [esp+40h] [ebp-4Ch] __int16 v43; // [esp+42h] [ebp-4Ah] __int16 v44; // [esp+44h] [ebp-48h] __int16 v45[13]; // [esp+46h] [ebp-46h] int v46; // [esp+60h] [ebp-2Ch] int v47; // [esp+64h] [ebp-28h] int v48; // [esp+68h] [ebp-24h] int v49; // [esp+6Ch] [ebp-20h] int v50; // [esp+70h] [ebp-1Ch] int v51; // [esp+74h] [ebp-18h] int v52; // [esp+78h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v46 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v34 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v38 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v42 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v35 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v39 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v43 + 4 * result) = v14; v16 = v7[2]; *(&v36 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v40 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v44 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v37[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v41[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v45[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 4 ); v19 = v46; v20 = a5; v21 = a5[3]; if ( v46 < v21 ) { v22 = a5[2]; result = 16 * v46; do { v23 = *v20; if ( *v20 < v22 ) { v48 = (signed int)(__CFADD__(v19, 2147483648) + v19 + 2147483648 + 2147483648) >> 1; v49 = a1 + result; v47 = result; v50 = v8; v46 = v19; do { v24 = *(signed __int16 *)(v49 + 2 * v23); v52 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 4 * v48; v25 = v24 + *(&v42 + v52); v51 = v25; if ( v25 <= 255 ) { v26 = v25; if ( v25 < 0 ) { v26 = 0; v51 = 0; } } else { v26 = -1; v51 = 255; } v27 = 3 * v23; v28 = v50; v29 = v52; v30 = *(&v38 + v52); *(_BYTE *)(3 * v23 + v50) = v26; v31 = v24 - v30; v51 = v31; if ( v31 <= 255 ) { v32 = v31; if ( v31 < 0 ) { v32 = 0; v51 = 0; } } else { v32 = -1; v51 = 255; } v8 = v28; *(_BYTE *)(v27 + v28 + 1) = v32; v33 = *(&v34 + v29) + v24; if ( v33 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } ++v23; *(_BYTE *)(v27 + v28 + 2) = v33; v22 = a5[2]; } while ( v23 < v22 ); result = v47; v19 = v46; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7AE060: using guessed type __int16 var_86[13]; // 7AE060: using guessed type __int16 var_66[13]; // 7AE060: using guessed type __int16 var_46[13]; //----- (007AE340) -------------------------------------------------------- _BYTE *__cdecl sub_7AE340(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // ebx int v8; // edi int v9; // ecx int v10; // edi int v11; // ebx int v12; // edi int v13; // ecx int v14; // edi int v15; // ebx int v16; // ecx int v17; // ebx int v18; // ebx int v19; // ecx int v20; // ecx int v21; // ebx int v22; // ebx int v23; // ecx int v24; // ecx int v25; // ebx int v26; // ebx int v27; // ecx int v28; // ecx int v29; // ebx int v30; // ebx int v31; // ecx int v32; // ecx int v33; // ebx int v34; // ebx int v35; // ecx int v36; // ecx int v37; // ebx int v38; // ebx int v39; // ecx int v40; // ecx int v41; // ebx int v42; // ebx int v43; // ecx int v44; // ecx int v45; // ebx int v46; // ebx int v47; // ecx int v48; // ecx int v49; // ebx _BYTE *v50; // eax int v51; // ebx int v52; // ecx int v53; // ecx int v54; // ebx int v55; // ebx int v56; // ecx int v57; // ecx int v58; // ebx int v59; // ebx int v60; // ecx int v61; // ecx int v62; // ebx int v63; // ebx int v64; // ecx int v65; // ecx int v66; // ebx int v67; // ebx int v68; // ecx int v69; // ecx int v70; // ebx int v71; // ebx int v72; // ecx int v73; // ecx int v74; // ebx int v75; // ebx int v76; // ecx int v77; // ecx int v78; // ebx int v79; // ebx int v80; // ecx signed int v81; // [esp+4h] [ebp-48h] int v82; // [esp+8h] [ebp-44h] int v83; // [esp+Ch] [ebp-40h] int v84; // [esp+10h] [ebp-3Ch] int v85; // [esp+14h] [ebp-38h] signed __int16 *v86; // [esp+18h] [ebp-34h] signed __int16 *v87; // [esp+1Ch] [ebp-30h] int v88; // [esp+20h] [ebp-2Ch] int v89; // [esp+24h] [ebp-28h] int v90; // [esp+28h] [ebp-24h] int v91; // [esp+2Ch] [ebp-20h] int v92; // [esp+30h] [ebp-1Ch] int v93; // [esp+34h] [ebp-18h] int v94; // [esp+38h] [ebp-14h] int v95; // [esp+3Ch] [ebp-10h] v5 = a1; result = a4; v81 = 0; v87 = a3; v86 = a2; do { v7 = *v87; v85 = (359 * v7 - 45813) >> 8; v8 = *v86; v92 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v87[1]; v95 = v9; v84 = (359 * v10 - 45813) >> 8; v11 = v86[1]; v90 = (88 * v11 + 183 * v10 - 34806) >> 8; v12 = v87[2]; v94 = (454 * v11 - 57937) >> 8; v83 = (359 * v12 - 45813) >> 8; v13 = v86[2]; v89 = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = v87[3]; v93 = (454 * v13 - 57937) >> 8; v82 = (359 * v14 - 45813) >> 8; v15 = v86[3]; v88 = (88 * v15 + 183 * v14 - 34806) >> 8; v91 = (454 * v15 - 57937) >> 8; v16 = *v5; v17 = v95 + v16; v86 += 8; v87 += 8; if ( v95 + v16 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } *result = v17; v18 = v16 - v92; if ( v16 - v92 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } result[1] = v18; v19 = v85 + v16; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[2] = v19; v20 = v5[1]; v21 = v95 + v20; if ( v95 + v20 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } result[3] = v21; v22 = v20 - v92; if ( v20 - v92 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = v22; v23 = v85 + v20; if ( v23 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = v23; v24 = v5[2]; v25 = v24 + v94; if ( v24 + v94 <= 255 ) { if ( v25 < 0 ) LOBYTE(v25) = 0; } else { LOBYTE(v25) = -1; } result[6] = v25; v26 = v24 - v90; if ( v24 - v90 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[7] = v26; v27 = v84 + v24; if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[8] = v27; v28 = v5[3]; v29 = v28 + v94; if ( v28 + v94 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } result[9] = v29; v30 = v28 - v90; if ( v28 - v90 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[10] = v30; v31 = v84 + v28; if ( v31 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[11] = v31; v32 = v5[4]; v33 = v32 + v93; if ( v32 + v93 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } result[12] = v33; v34 = v32 - v89; if ( v32 - v89 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[13] = v34; v35 = v83 + v32; if ( v35 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[14] = v35; v36 = v5[5]; v37 = v36 + v93; if ( v36 + v93 <= 255 ) { if ( v37 < 0 ) LOBYTE(v37) = 0; } else { LOBYTE(v37) = -1; } result[15] = v37; v38 = v36 - v89; if ( v36 - v89 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[16] = v38; v39 = v83 + v36; if ( v39 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[17] = v39; v40 = v5[6]; v41 = v40 + v91; if ( v40 + v91 <= 255 ) { if ( v41 < 0 ) LOBYTE(v41) = 0; } else { LOBYTE(v41) = -1; } result[18] = v41; v42 = v40 - v88; if ( v40 - v88 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[19] = v42; v43 = v82 + v40; if ( v43 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[20] = v43; v44 = v5[7]; v45 = v44 + v91; if ( v44 + v91 <= 255 ) { if ( v45 < 0 ) LOBYTE(v45) = 0; } else { LOBYTE(v45) = -1; } result[21] = v45; v46 = v44 - v88; if ( v44 - v88 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[22] = v46; v47 = v82 + v44; if ( v47 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } result[23] = v47; v48 = v5[8]; v49 = v95 + v48; v50 = &result[a5]; if ( v95 + v48 <= 255 ) { if ( v49 < 0 ) LOBYTE(v49) = 0; } else { LOBYTE(v49) = -1; } *v50 = v49; v51 = v48 - v92; if ( v48 - v92 <= 255 ) { if ( v51 < 0 ) LOBYTE(v51) = 0; } else { LOBYTE(v51) = -1; } v50[1] = v51; v52 = v85 + v48; if ( v52 <= 255 ) { if ( v52 < 0 ) LOBYTE(v52) = 0; } else { LOBYTE(v52) = -1; } v50[2] = v52; v53 = v5[9]; v54 = v53 + v95; if ( v53 + v95 <= 255 ) { if ( v54 < 0 ) LOBYTE(v54) = 0; } else { LOBYTE(v54) = -1; } v50[3] = v54; v55 = v53 - v92; if ( v53 - v92 <= 255 ) { if ( v55 < 0 ) LOBYTE(v55) = 0; } else { LOBYTE(v55) = -1; } v50[4] = v55; v56 = v85 + v53; if ( v56 <= 255 ) { if ( v56 < 0 ) LOBYTE(v56) = 0; } else { LOBYTE(v56) = -1; } v50[5] = v56; v57 = v5[10]; v58 = v57 + v94; if ( v57 + v94 <= 255 ) { if ( v58 < 0 ) LOBYTE(v58) = 0; } else { LOBYTE(v58) = -1; } v50[6] = v58; v59 = v57 - v90; if ( v57 - v90 <= 255 ) { if ( v59 < 0 ) LOBYTE(v59) = 0; } else { LOBYTE(v59) = -1; } v50[7] = v59; v60 = v84 + v57; if ( v60 <= 255 ) { if ( v60 < 0 ) LOBYTE(v60) = 0; } else { LOBYTE(v60) = -1; } v50[8] = v60; v61 = v5[11]; v62 = v61 + v94; if ( v61 + v94 <= 255 ) { if ( v62 < 0 ) LOBYTE(v62) = 0; } else { LOBYTE(v62) = -1; } v50[9] = v62; v63 = v61 - v90; if ( v61 - v90 <= 255 ) { if ( v63 < 0 ) LOBYTE(v63) = 0; } else { LOBYTE(v63) = -1; } v50[10] = v63; v64 = v84 + v61; if ( v64 <= 255 ) { if ( v64 < 0 ) LOBYTE(v64) = 0; } else { LOBYTE(v64) = -1; } v50[11] = v64; v65 = v5[12]; v66 = v65 + v93; if ( v65 + v93 <= 255 ) { if ( v66 < 0 ) LOBYTE(v66) = 0; } else { LOBYTE(v66) = -1; } v50[12] = v66; v67 = v65 - v89; if ( v65 - v89 <= 255 ) { if ( v67 < 0 ) LOBYTE(v67) = 0; } else { LOBYTE(v67) = -1; } v50[13] = v67; v68 = v83 + v65; if ( v68 <= 255 ) { if ( v68 < 0 ) LOBYTE(v68) = 0; } else { LOBYTE(v68) = -1; } v50[14] = v68; v69 = v5[13]; v70 = v69 + v93; if ( v69 + v93 <= 255 ) { if ( v70 < 0 ) LOBYTE(v70) = 0; } else { LOBYTE(v70) = -1; } v50[15] = v70; v71 = v69 - v89; if ( v69 - v89 <= 255 ) { if ( v71 < 0 ) LOBYTE(v71) = 0; } else { LOBYTE(v71) = -1; } v50[16] = v71; v72 = v83 + v69; if ( v72 <= 255 ) { if ( v72 < 0 ) LOBYTE(v72) = 0; } else { LOBYTE(v72) = -1; } v50[17] = v72; v73 = v5[14]; v74 = v73 + v91; if ( v73 + v91 <= 255 ) { if ( v74 < 0 ) LOBYTE(v74) = 0; } else { LOBYTE(v74) = -1; } v50[18] = v74; v75 = v73 - v88; if ( v73 - v88 <= 255 ) { if ( v75 < 0 ) LOBYTE(v75) = 0; } else { LOBYTE(v75) = -1; } v50[19] = v75; v76 = v82 + v73; if ( v76 <= 255 ) { if ( v76 < 0 ) LOBYTE(v76) = 0; } else { LOBYTE(v76) = -1; } v50[20] = v76; v77 = v5[15]; v78 = v77 + v91; if ( v77 + v91 <= 255 ) { if ( v78 < 0 ) LOBYTE(v78) = 0; } else { LOBYTE(v78) = -1; } v50[21] = v78; v79 = v77 - v88; if ( v77 - v88 <= 255 ) { if ( v79 < 0 ) LOBYTE(v79) = 0; } else { LOBYTE(v79) = -1; } v50[22] = v79; v80 = v82 + v77; if ( v80 <= 255 ) { if ( v80 < 0 ) LOBYTE(v80) = 0; } else { LOBYTE(v80) = -1; } v5 += 16; v50[23] = v80; result = &v50[a5]; v81 += 2; } while ( v81 < 8 ); return result; } //----- (007AF100) -------------------------------------------------------- void __cdecl sub_7AF100(int a1, int a2, int a3, int a4, int *a5, int a6) { int *v6; // edi int v7; // esi int v8; // ebx int v9; // ebp int v10; // eax int v11; // edx int v12; // ecx int v13; // ebx int v14; // ebp int v15; // eax int v16; // ecx int v17; // edx int v18; // eax int v19; // edx int v20; // ecx int v21; // eax int v22; // edx int v23; // [esp+8h] [ebp-24h] int v24; // [esp+Ch] [ebp-20h] int v25; // [esp+10h] [ebp-1Ch] int v26; // [esp+14h] [ebp-18h] v6 = a5; v7 = a5[1]; v8 = a5[3]; v9 = a4 + a6 * a5[1]; if ( v7 < v8 ) { v10 = a5[2]; v11 = 8 * v7; do { v12 = *v6; if ( *v6 < v10 ) { v13 = v12 + v11; v23 = v11; v24 = *v6; v26 = v9; v14 = 3 * v12; do { v15 = *(signed __int16 *)(a3 + 2 * v13); v16 = (signed __int16)((359 * v15 - 45813) >> 8); v17 = *(signed __int16 *)(a2 + 2 * v13); v18 = (signed __int16)((88 * v17 + 183 * v15 - 34806) >> 8); v19 = (signed __int16)((454 * v17 - 57937) >> 8); v20 = *(signed __int16 *)(a1 + 2 * v13) + v16; v25 = *(signed __int16 *)(a1 + 2 * v13); if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } *(_BYTE *)(v14 + v26) = v20; v21 = v25 - v18; if ( v21 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } *(_BYTE *)(v14 + v26 + 1) = v21; v22 = v25 + v19; if ( v22 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } ++v13; *(_BYTE *)(v14 + v26 + 2) = v22; v14 += 3; v10 = a5[2]; ++v24; } while ( v24 < v10 ); v11 = v23; v9 = v26; v6 = a5; v8 = a5[3]; } v9 += a6; v11 += 8; ++v7; } while ( v7 < v8 ); } } //----- (007AF520) -------------------------------------------------------- void __cdecl sub_7AF520(int a1, int a2, int a3, int a4, int *a5, int a6) { int *v6; // edi int v7; // esi int v8; // ebx int v9; // ebp int v10; // eax int v11; // edx int v12; // ecx int v13; // ebx int v14; // ebp int v15; // eax int v16; // edx int v17; // ecx int v18; // eax int v19; // ecx int v20; // eax int v21; // edx int v22; // [esp+8h] [ebp-24h] int v23; // [esp+Ch] [ebp-20h] int v24; // [esp+10h] [ebp-1Ch] int v25; // [esp+14h] [ebp-18h] v6 = a5; v7 = a5[1]; v8 = a5[3]; v9 = a4 + a6 * a5[1]; if ( v7 < v8 ) { v10 = a5[2]; v11 = 8 * v7; do { v12 = *v6; if ( *v6 < v10 ) { v13 = v12 + v11; v22 = v11; v23 = *v6; v25 = v9; v14 = 3 * v12; do { v15 = *(signed __int16 *)(a3 + 2 * v13); v16 = (signed __int16)((359 * v15 - 45813) >> 8); v17 = *(signed __int16 *)(a2 + 2 * v13); v18 = (signed __int16)((88 * v17 + 183 * v15 - 34806) >> 8); v19 = *(signed __int16 *)(a1 + 2 * v13) + (signed __int16)((454 * v17 - 57937) >> 8); v24 = *(signed __int16 *)(a1 + 2 * v13); if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } *(_BYTE *)(v14 + v25) = v19; v20 = v24 - v18; if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } *(_BYTE *)(v14 + v25 + 1) = v20; v21 = v24 + v16; if ( v21 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } ++v13; *(_BYTE *)(v14 + v25 + 2) = v21; v14 += 3; v10 = a5[2]; ++v23; } while ( v23 < v10 ); v11 = v22; v9 = v25; v6 = a5; v8 = a5[3]; } v9 += a6; v11 += 8; ++v7; } while ( v7 < v8 ); } } //----- (007AF940) -------------------------------------------------------- int __cdecl sub_7AF940(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx char v26; // dl int v27; // ecx int v28; // ebp int v29; // esi int v30; // ebx int v31; // ebx char v32; // dl int v33; // eax __int16 v34; // [esp+0h] [ebp-ECh] __int16 v35; // [esp+2h] [ebp-EAh] __int16 v36; // [esp+4h] [ebp-E8h] __int16 v37[29]; // [esp+6h] [ebp-E6h] __int16 v38; // [esp+40h] [ebp-ACh] __int16 v39; // [esp+42h] [ebp-AAh] __int16 v40; // [esp+44h] [ebp-A8h] __int16 v41[29]; // [esp+46h] [ebp-A6h] __int16 v42; // [esp+80h] [ebp-6Ch] __int16 v43; // [esp+82h] [ebp-6Ah] __int16 v44; // [esp+84h] [ebp-68h] __int16 v45[29]; // [esp+86h] [ebp-66h] int v46; // [esp+C0h] [ebp-2Ch] int v47; // [esp+C4h] [ebp-28h] int v48; // [esp+C8h] [ebp-24h] int v49; // [esp+CCh] [ebp-20h] int v50; // [esp+D0h] [ebp-1Ch] int v51; // [esp+D4h] [ebp-18h] int v52; // [esp+D8h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v46 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v34 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v38 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v42 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v35 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v39 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v43 + 4 * result) = v14; v16 = v7[2]; *(&v36 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v40 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v44 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v37[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v41[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v45[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 8 ); v19 = v46; v20 = a5; v21 = a5[3]; if ( v46 < v21 ) { v22 = a5[2]; result = 16 * v46; do { v23 = *v20; if ( *v20 < v22 ) { v48 = 2 * v19; v49 = a1 + result; v47 = result; v50 = v8; v46 = v19; do { v24 = *(signed __int16 *)(v49 + 2 * v23); v52 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 2 * v48; v25 = v24 + *(&v34 + v52); v51 = v25; if ( v25 <= 255 ) { v26 = v25; if ( v25 < 0 ) { v26 = 0; v51 = 0; } } else { v26 = -1; v51 = 255; } v27 = 3 * v23; v28 = v50; v29 = v52; v30 = *(&v38 + v52); *(_BYTE *)(3 * v23 + v50) = v26; v31 = v24 - v30; v51 = v31; if ( v31 <= 255 ) { v32 = v31; if ( v31 < 0 ) { v32 = 0; v51 = 0; } } else { v32 = -1; v51 = 255; } v8 = v28; *(_BYTE *)(v27 + v28 + 1) = v32; v33 = *(&v42 + v29) + v24; if ( v33 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } ++v23; *(_BYTE *)(v27 + v28 + 2) = v33; v22 = a5[2]; } while ( v23 < v22 ); result = v47; v19 = v46; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7AF940: using guessed type __int16 var_E6[29]; // 7AF940: using guessed type __int16 var_A6[29]; // 7AF940: using guessed type __int16 var_66[29]; //----- (007AFC50) -------------------------------------------------------- _BYTE *__cdecl sub_7AFC50(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // edi int v8; // ebx int v9; // ecx int v10; // ebx int v11; // edi int v12; // ebx int v13; // edi int v14; // ecx int v15; // ebx int v16; // ecx int v17; // ebx int v18; // ebx int v19; // ecx int v20; // ecx int v21; // ebx int v22; // ebx int v23; // ecx int v24; // ecx int v25; // ebx int v26; // ebx int v27; // ecx int v28; // ecx int v29; // ebx int v30; // ebx int v31; // ecx int v32; // ecx int v33; // ebx int v34; // ebx int v35; // ecx int v36; // ecx int v37; // ebx int v38; // ebx int v39; // ecx int v40; // ecx int v41; // ebx int v42; // ebx int v43; // ecx int v44; // ecx int v45; // ebx int v46; // ebx int v47; // ecx signed int v48; // [esp+4h] [ebp-50h] int v49; // [esp+8h] [ebp-4Ch] int v50; // [esp+Ch] [ebp-48h] int v51; // [esp+10h] [ebp-44h] int v52; // [esp+14h] [ebp-40h] signed __int16 *v53; // [esp+18h] [ebp-3Ch] signed __int16 *v54; // [esp+1Ch] [ebp-38h] int v55; // [esp+20h] [ebp-34h] int v56; // [esp+24h] [ebp-30h] int v57; // [esp+28h] [ebp-2Ch] int v58; // [esp+2Ch] [ebp-28h] int v59; // [esp+30h] [ebp-24h] int v60; // [esp+34h] [ebp-20h] int v61; // [esp+3Ch] [ebp-18h] int v62; // [esp+40h] [ebp-14h] v5 = a1; result = a4; v48 = 0; v53 = a3; v54 = a2; do { v7 = *v53; v62 = (359 * v7 - 45813) >> 8; v8 = *v54; v61 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v53[1]; v52 = v9; v60 = (359 * v10 - 45813) >> 8; v11 = v54[1]; v59 = (88 * v11 + 183 * v10 - 34806) >> 8; v12 = v53[2]; v51 = (454 * v11 - 57937) >> 8; v58 = (359 * v12 - 45813) >> 8; v13 = v54[2]; v57 = (88 * v13 + 183 * v12 - 34806) >> 8; v50 = (454 * v13 - 57937) >> 8; v14 = v53[3]; v56 = (359 * v14 - 45813) >> 8; v15 = v54[3]; v55 = (88 * v15 + 183 * v14 - 34806) >> 8; v49 = (454 * v15 - 57937) >> 8; v16 = *v5; v17 = v62 + v16; v54 += 8; v53 += 8; if ( v62 + v16 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } *result = v17; v18 = v16 - v61; if ( v16 - v61 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } result[1] = v18; v19 = v52 + v16; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[2] = v19; v20 = v5[1]; v21 = v20 + v62; if ( v20 + v62 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } result[3] = v21; v22 = v20 - v61; if ( v20 - v61 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = v22; v23 = v52 + v20; if ( v23 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = v23; v24 = v5[2]; v25 = v24 + v60; if ( v24 + v60 <= 255 ) { if ( v25 < 0 ) LOBYTE(v25) = 0; } else { LOBYTE(v25) = -1; } result[6] = v25; v26 = v24 - v59; if ( v24 - v59 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[7] = v26; v27 = v51 + v24; if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[8] = v27; v28 = v5[3]; v29 = v28 + v60; if ( v28 + v60 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } result[9] = v29; v30 = v28 - v59; if ( v28 - v59 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[10] = v30; v31 = v51 + v28; if ( v31 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[11] = v31; v32 = v5[4]; v33 = v32 + v58; if ( v32 + v58 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } result[12] = v33; v34 = v32 - v57; if ( v32 - v57 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[13] = v34; v35 = v50 + v32; if ( v35 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[14] = v35; v36 = v5[5]; v37 = v36 + v58; if ( v36 + v58 <= 255 ) { if ( v37 < 0 ) LOBYTE(v37) = 0; } else { LOBYTE(v37) = -1; } result[15] = v37; v38 = v36 - v57; if ( v36 - v57 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[16] = v38; v39 = v50 + v36; if ( v39 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[17] = v39; v40 = v5[6]; v41 = v40 + v56; if ( v40 + v56 <= 255 ) { if ( v41 < 0 ) LOBYTE(v41) = 0; } else { LOBYTE(v41) = -1; } result[18] = v41; v42 = v40 - v55; if ( v40 - v55 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[19] = v42; v43 = v49 + v40; if ( v43 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[20] = v43; v44 = v5[7]; v45 = v44 + v56; if ( v44 + v56 <= 255 ) { if ( v45 < 0 ) LOBYTE(v45) = 0; } else { LOBYTE(v45) = -1; } result[21] = v45; v46 = v44 - v55; if ( v44 - v55 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[22] = v46; v47 = v49 + v44; if ( v47 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } v5 += 8; result[23] = v47; result += a5; ++v48; } while ( v48 < 8 ); return result; } //----- (007B0470) -------------------------------------------------------- int __cdecl sub_7B0470(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx char v26; // dl int v27; // ecx int v28; // ebp int v29; // esi int v30; // ebx int v31; // ebx char v32; // dl int v33; // eax __int16 v34; // [esp+0h] [ebp-ECh] __int16 v35; // [esp+2h] [ebp-EAh] __int16 v36; // [esp+4h] [ebp-E8h] __int16 v37[29]; // [esp+6h] [ebp-E6h] __int16 v38; // [esp+40h] [ebp-ACh] __int16 v39; // [esp+42h] [ebp-AAh] __int16 v40; // [esp+44h] [ebp-A8h] __int16 v41[29]; // [esp+46h] [ebp-A6h] __int16 v42; // [esp+80h] [ebp-6Ch] __int16 v43; // [esp+82h] [ebp-6Ah] __int16 v44; // [esp+84h] [ebp-68h] __int16 v45[29]; // [esp+86h] [ebp-66h] int v46; // [esp+C0h] [ebp-2Ch] int v47; // [esp+C4h] [ebp-28h] int v48; // [esp+C8h] [ebp-24h] int v49; // [esp+CCh] [ebp-20h] int v50; // [esp+D0h] [ebp-1Ch] int v51; // [esp+D4h] [ebp-18h] int v52; // [esp+D8h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v46 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v34 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v38 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v42 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v35 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v39 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v43 + 4 * result) = v14; v16 = v7[2]; *(&v36 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v40 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v44 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v37[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v41[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v45[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 8 ); v19 = v46; v20 = a5; v21 = a5[3]; if ( v46 < v21 ) { v22 = a5[2]; result = 16 * v46; do { v23 = *v20; if ( *v20 < v22 ) { v48 = 2 * v19; v49 = a1 + result; v47 = result; v50 = v8; v46 = v19; do { v24 = *(signed __int16 *)(v49 + 2 * v23); v52 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 2 * v48; v25 = v24 + *(&v42 + v52); v51 = v25; if ( v25 <= 255 ) { v26 = v25; if ( v25 < 0 ) { v26 = 0; v51 = 0; } } else { v26 = -1; v51 = 255; } v27 = 3 * v23; v28 = v50; v29 = v52; v30 = *(&v38 + v52); *(_BYTE *)(3 * v23 + v50) = v26; v31 = v24 - v30; v51 = v31; if ( v31 <= 255 ) { v32 = v31; if ( v31 < 0 ) { v32 = 0; v51 = 0; } } else { v32 = -1; v51 = 255; } v8 = v28; *(_BYTE *)(v27 + v28 + 1) = v32; v33 = *(&v34 + v29) + v24; if ( v33 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } ++v23; *(_BYTE *)(v27 + v28 + 2) = v33; v22 = a5[2]; } while ( v23 < v22 ); result = v47; v19 = v46; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7B0470: using guessed type __int16 var_E6[29]; // 7B0470: using guessed type __int16 var_A6[29]; // 7B0470: using guessed type __int16 var_66[29]; //----- (007B0790) -------------------------------------------------------- _BYTE *__cdecl sub_7B0790(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // ebx int v8; // edi int v9; // ecx int v10; // edi int v11; // ebx int v12; // edi int v13; // ecx int v14; // edi int v15; // ebx int v16; // ecx int v17; // ebx int v18; // ebx int v19; // ecx int v20; // ecx int v21; // ebx int v22; // ebx int v23; // ecx int v24; // ecx int v25; // ebx int v26; // ebx int v27; // ecx int v28; // ecx int v29; // ebx int v30; // ebx int v31; // ecx int v32; // ecx int v33; // ebx int v34; // ebx int v35; // ecx int v36; // ecx int v37; // ebx int v38; // ebx int v39; // ecx int v40; // ecx int v41; // ebx int v42; // ebx int v43; // ecx int v44; // ecx int v45; // ebx int v46; // ebx int v47; // ecx signed int v48; // [esp+4h] [ebp-50h] int v49; // [esp+8h] [ebp-4Ch] int v50; // [esp+Ch] [ebp-48h] int v51; // [esp+10h] [ebp-44h] int v52; // [esp+14h] [ebp-40h] signed __int16 *v53; // [esp+18h] [ebp-3Ch] signed __int16 *v54; // [esp+1Ch] [ebp-38h] int v55; // [esp+20h] [ebp-34h] int v56; // [esp+24h] [ebp-30h] int v57; // [esp+28h] [ebp-2Ch] int v58; // [esp+2Ch] [ebp-28h] int v59; // [esp+30h] [ebp-24h] int v60; // [esp+34h] [ebp-20h] int v61; // [esp+3Ch] [ebp-18h] int v62; // [esp+40h] [ebp-14h] v5 = a1; result = a4; v48 = 0; v54 = a3; v53 = a2; do { v7 = *v54; v52 = (359 * v7 - 45813) >> 8; v8 = *v53; v61 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v54[1]; v62 = v9; v51 = (359 * v10 - 45813) >> 8; v11 = v53[1]; v58 = (88 * v11 + 183 * v10 - 34806) >> 8; v12 = v54[2]; v60 = (454 * v11 - 57937) >> 8; v50 = (359 * v12 - 45813) >> 8; v13 = v53[2]; v56 = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = v54[3]; v59 = (454 * v13 - 57937) >> 8; v49 = (359 * v14 - 45813) >> 8; v15 = v53[3]; v55 = (88 * v15 + 183 * v14 - 34806) >> 8; v57 = (454 * v15 - 57937) >> 8; v16 = *v5; v17 = v62 + v16; v53 += 8; v54 += 8; if ( v62 + v16 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } *result = v17; v18 = v16 - v61; if ( v16 - v61 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } result[1] = v18; v19 = v52 + v16; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[2] = v19; v20 = v5[1]; v21 = v20 + v62; if ( v20 + v62 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } result[3] = v21; v22 = v20 - v61; if ( v20 - v61 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = v22; v23 = v52 + v20; if ( v23 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = v23; v24 = v5[2]; v25 = v24 + v60; if ( v24 + v60 <= 255 ) { if ( v25 < 0 ) LOBYTE(v25) = 0; } else { LOBYTE(v25) = -1; } result[6] = v25; v26 = v24 - v58; if ( v24 - v58 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[7] = v26; v27 = v51 + v24; if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[8] = v27; v28 = v5[3]; v29 = v28 + v60; if ( v28 + v60 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } result[9] = v29; v30 = v28 - v58; if ( v28 - v58 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[10] = v30; v31 = v51 + v28; if ( v31 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[11] = v31; v32 = v5[4]; v33 = v32 + v59; if ( v32 + v59 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } result[12] = v33; v34 = v32 - v56; if ( v32 - v56 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[13] = v34; v35 = v50 + v32; if ( v35 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[14] = v35; v36 = v5[5]; v37 = v36 + v59; if ( v36 + v59 <= 255 ) { if ( v37 < 0 ) LOBYTE(v37) = 0; } else { LOBYTE(v37) = -1; } result[15] = v37; v38 = v36 - v56; if ( v36 - v56 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[16] = v38; v39 = v50 + v36; if ( v39 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[17] = v39; v40 = v5[6]; v41 = v40 + v57; if ( v40 + v57 <= 255 ) { if ( v41 < 0 ) LOBYTE(v41) = 0; } else { LOBYTE(v41) = -1; } result[18] = v41; v42 = v40 - v55; if ( v40 - v55 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[19] = v42; v43 = v49 + v40; if ( v43 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[20] = v43; v44 = v5[7]; v45 = v44 + v57; if ( v44 + v57 <= 255 ) { if ( v45 < 0 ) LOBYTE(v45) = 0; } else { LOBYTE(v45) = -1; } result[21] = v45; v46 = v44 - v55; if ( v44 - v55 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[22] = v46; v47 = v49 + v44; if ( v47 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } v5 += 8; result[23] = v47; result += a5; ++v48; } while ( v48 < 8 ); return result; } //----- (007B0FB0) -------------------------------------------------------- void __cdecl sub_7B0FB0(int a1, int a2, int a3, int a4, int *a5, int a6) { int *v6; // edi int v7; // ebx int v8; // ebp int v9; // ecx int v10; // edx int v11; // eax int v12; // esi int v13; // ebp int v14; // eax int v15; // ebx int v16; // edi int v17; // ecx int v18; // edx int v19; // eax int v20; // [esp+4h] [ebp-20h] int v21; // [esp+8h] [ebp-1Ch] int v22; // [esp+10h] [ebp-14h] v6 = a5; v7 = a5[1]; v8 = a5[3]; v9 = a4 + a6 * a5[1]; if ( v7 < v8 ) { v10 = a5[2]; v11 = 8 * v7; do { v12 = *v6; if ( *v6 < v10 ) { v13 = v12 + v11; v21 = v11; v22 = v9; v20 = v7; do { v14 = *(signed __int16 *)(a1 + 2 * v13); v15 = *(signed __int16 *)(a3 + 2 * v13); v16 = *(signed __int16 *)(a2 + 2 * v13); v17 = v14 + (signed __int16)((359 * v15 - 45813) >> 8); if ( v17 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } *(_BYTE *)(v22 + 4 * v12) = v17; v18 = v14 - (signed __int16)((88 * v16 + 183 * v15 - 34806) >> 8); if ( v18 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } *(_BYTE *)(v22 + 4 * v12 + 1) = v18; v19 = (signed __int16)((454 * v16 - 57937) >> 8) + v14; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } ++v13; *(_BYTE *)(v22 + 4 * v12 + 2) = v19; *(_BYTE *)(v22 + 4 * v12++ + 3) = -1; v10 = a5[2]; } while ( v12 < v10 ); v11 = v21; v9 = v22; v7 = v20; v6 = a5; v8 = a5[3]; } v9 += a6; v11 += 8; ++v7; } while ( v7 < v8 ); } } //----- (007B1940) -------------------------------------------------------- int __cdecl sub_7B1940(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx int v26; // edx int v27; // edx int v28; // ecx int v29; // eax __int16 v30; // [esp+0h] [ebp-E4h] __int16 v31; // [esp+2h] [ebp-E2h] __int16 v32; // [esp+4h] [ebp-E0h] __int16 v33[29]; // [esp+6h] [ebp-DEh] __int16 v34; // [esp+40h] [ebp-A4h] __int16 v35; // [esp+42h] [ebp-A2h] __int16 v36; // [esp+44h] [ebp-A0h] __int16 v37[29]; // [esp+46h] [ebp-9Eh] __int16 v38; // [esp+80h] [ebp-64h] __int16 v39; // [esp+82h] [ebp-62h] __int16 v40; // [esp+84h] [ebp-60h] __int16 v41[29]; // [esp+86h] [ebp-5Eh] int v42; // [esp+C0h] [ebp-24h] int v43; // [esp+C4h] [ebp-20h] int v44; // [esp+C8h] [ebp-1Ch] int v45; // [esp+CCh] [ebp-18h] int v46; // [esp+D0h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v42 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v30 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v34 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v38 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v31 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v35 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v39 + 4 * result) = v14; v16 = v7[2]; *(&v32 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v36 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v40 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v33[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v37[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v41[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 8 ); v19 = v42; v20 = a5; v21 = a5[3]; if ( v42 < v21 ) { v22 = a5[2]; result = 16 * v42; do { v23 = *v20; if ( *v20 < v22 ) { v44 = 2 * v19; v45 = a1 + result; v43 = result; v46 = v8; v42 = v19; do { v24 = *(signed __int16 *)(v45 + 2 * v23); v25 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 2 * v44; v26 = v24 + *(&v30 + v25); if ( v26 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } v8 = v46; *(_BYTE *)(v46 + 4 * v23) = v26; v27 = v24 - *(&v34 + v25); if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } v28 = *(&v38 + v25); *(_BYTE *)(v8 + 4 * v23 + 1) = v27; v29 = v28 + v24; if ( v29 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } *(_BYTE *)(v8 + 4 * v23 + 2) = v29; *(_BYTE *)(v8 + 4 * v23++ + 3) = -1; v22 = a5[2]; } while ( v23 < v22 ); result = v43; v19 = v42; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7B1940: using guessed type __int16 var_DE[29]; // 7B1940: using guessed type __int16 var_9E[29]; // 7B1940: using guessed type __int16 var_5E[29]; //----- (007B1C20) -------------------------------------------------------- _BYTE *__cdecl sub_7B1C20(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // edi int v8; // ebx int v9; // ecx int v10; // ebx int v11; // edi int v12; // ecx int v13; // ebx int v14; // ecx int v15; // ebx int v16; // ecx int v17; // ecx int v18; // ebx int v19; // ebx int v20; // ecx int v21; // ecx int v22; // ebx int v23; // ebx int v24; // ecx int v25; // ecx int v26; // ebx int v27; // ebx int v28; // ecx int v29; // ecx int v30; // ebx int v31; // ebx int v32; // ecx int v33; // ecx int v34; // ebx int v35; // ebx int v36; // ecx int v37; // ecx int v38; // ebx int v39; // ebx int v40; // ecx int v41; // ecx int v42; // ebx int v43; // ebx int v44; // ecx int v45; // ecx int v46; // ebx int v47; // ebx int v48; // ecx signed int v49; // [esp+4h] [ebp-50h] int v50; // [esp+8h] [ebp-4Ch] int v51; // [esp+Ch] [ebp-48h] int v52; // [esp+10h] [ebp-44h] int v53; // [esp+14h] [ebp-40h] signed __int16 *v54; // [esp+18h] [ebp-3Ch] signed __int16 *v55; // [esp+1Ch] [ebp-38h] int v56; // [esp+20h] [ebp-34h] int v57; // [esp+24h] [ebp-30h] int v58; // [esp+28h] [ebp-2Ch] int v59; // [esp+2Ch] [ebp-28h] int v60; // [esp+30h] [ebp-24h] int v61; // [esp+34h] [ebp-20h] int v62; // [esp+3Ch] [ebp-18h] int v63; // [esp+40h] [ebp-14h] v5 = a1; result = a4; v49 = 0; v54 = a3; v55 = a2; do { v7 = *v54; v63 = (359 * v7 - 45813) >> 8; v8 = *v55; v62 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v54[1]; v53 = v9; v61 = (359 * v10 - 45813) >> 8; v11 = v55[1]; v60 = (88 * v11 + 183 * v10 - 34806) >> 8; v52 = (454 * v11 - 57937) >> 8; v12 = v54[2]; v59 = (359 * v12 - 45813) >> 8; v13 = v55[2]; v58 = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v54[3]; v51 = v14; v57 = (359 * v15 - 45813) >> 8; v16 = v55[3]; v56 = (88 * v16 + 183 * v15 - 34806) >> 8; v50 = (454 * v16 - 57937) >> 8; v17 = *v5; v18 = v63 + v17; if ( v63 + v17 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } *result = v18; v19 = v17 - v62; if ( v17 - v62 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[1] = v19; v20 = v53 + v17; if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } result[2] = v20; result[3] = -1; v21 = v5[1]; v22 = v21 + v63; if ( v21 + v63 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = v22; v23 = v21 - v62; if ( v21 - v62 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = v23; v24 = v53 + v21; if ( v24 <= 255 ) { if ( v24 < 0 ) LOBYTE(v24) = 0; } else { LOBYTE(v24) = -1; } result[6] = v24; result[7] = -1; v25 = v5[2]; v26 = v25 + v61; if ( v25 + v61 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[8] = v26; v27 = v25 - v60; if ( v25 - v60 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[9] = v27; v28 = v52 + v25; if ( v28 <= 255 ) { if ( v28 < 0 ) LOBYTE(v28) = 0; } else { LOBYTE(v28) = -1; } result[10] = v28; result[11] = -1; v29 = v5[3]; v30 = v29 + v61; if ( v29 + v61 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[12] = v30; v31 = v29 - v60; if ( v29 - v60 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[13] = v31; v32 = v52 + v29; if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } result[14] = v32; result[15] = -1; v33 = v5[4]; v34 = v33 + v59; if ( v33 + v59 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[16] = v34; v35 = v33 - v58; if ( v33 - v58 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[17] = v35; v36 = v51 + v33; if ( v36 <= 255 ) { if ( v36 < 0 ) LOBYTE(v36) = 0; } else { LOBYTE(v36) = -1; } result[18] = v36; result[19] = -1; v37 = v5[5]; v38 = v37 + v59; if ( v37 + v59 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[20] = v38; v39 = v37 - v58; if ( v37 - v58 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[21] = v39; v40 = v51 + v37; if ( v40 <= 255 ) { if ( v40 < 0 ) LOBYTE(v40) = 0; } else { LOBYTE(v40) = -1; } result[22] = v40; result[23] = -1; v41 = v5[6]; v42 = v41 + v57; if ( v41 + v57 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[24] = v42; v43 = v41 - v56; if ( v41 - v56 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[25] = v43; v44 = v50 + v41; if ( v44 <= 255 ) { if ( v44 < 0 ) LOBYTE(v44) = 0; } else { LOBYTE(v44) = -1; } result[26] = v44; result[27] = -1; v45 = v5[7]; v46 = v45 + v57; if ( v45 + v57 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[28] = v46; v47 = v45 - v56; if ( v45 - v56 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } result[29] = v47; v48 = v50 + v45; if ( v48 <= 255 ) { if ( v48 < 0 ) LOBYTE(v48) = 0; } else { LOBYTE(v48) = -1; } v5 += 8; result[30] = v48; result[31] = -1; v55 += 8; v54 += 8; result += a5; ++v49; } while ( v49 < 8 ); return result; } //----- (007B2440) -------------------------------------------------------- int __cdecl sub_7B2440(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int *a5, int a6) { signed __int16 *v6; // ecx signed __int16 *v7; // edx int v8; // ebx int result; // eax int v10; // ebp int v11; // edi int v12; // ebp int v13; // edi int v14; // ebp int v15; // edi int v16; // ebp int v17; // ebp int v18; // edi int v19; // ebp int *v20; // esi int v21; // ecx int v22; // edx int v23; // edi int v24; // eax int v25; // ecx int v26; // edx int v27; // edx int v28; // ecx int v29; // eax __int16 v30; // [esp+0h] [ebp-84h] __int16 v31; // [esp+2h] [ebp-82h] __int16 v32; // [esp+4h] [ebp-80h] __int16 v33[13]; // [esp+6h] [ebp-7Eh] __int16 v34; // [esp+20h] [ebp-64h] __int16 v35; // [esp+22h] [ebp-62h] __int16 v36; // [esp+24h] [ebp-60h] __int16 v37[13]; // [esp+26h] [ebp-5Eh] __int16 v38; // [esp+40h] [ebp-44h] __int16 v39; // [esp+42h] [ebp-42h] __int16 v40; // [esp+44h] [ebp-40h] __int16 v41[13]; // [esp+46h] [ebp-3Eh] int v42; // [esp+60h] [ebp-24h] int v43; // [esp+64h] [ebp-20h] int v44; // [esp+68h] [ebp-1Ch] int v45; // [esp+6Ch] [ebp-18h] int v46; // [esp+70h] [ebp-14h] v6 = a2; v7 = a3; v8 = a4 + a6 * a5[1]; result = 0; v42 = a5[1]; do { v10 = *v7; v11 = *v6; *(&v30 + 4 * result) = (359 * v10 - 45813) >> 8; *(&v34 + 4 * result) = (88 * v11 + 183 * v10 - 34806) >> 8; *(&v38 + 4 * result) = (454 * v11 - 57937) >> 8; v12 = v7[1]; v13 = v6[1]; *(&v31 + 4 * result) = (359 * v12 - 45813) >> 8; *(&v35 + 4 * result) = (88 * v13 + 183 * v12 - 34806) >> 8; v14 = (454 * v13 - 57937) >> 8; v15 = v6[2]; *(&v39 + 4 * result) = v14; v16 = v7[2]; *(&v32 + 4 * result) = (359 * v16 - 45813) >> 8; *(&v36 + 4 * result) = (88 * v15 + 183 * v16 - 34806) >> 8; *(&v40 + 4 * result) = (454 * v15 - 57937) >> 8; v17 = v7[3]; v18 = v6[3]; v33[4 * result] = (359 * v17 - 45813) >> 8; v6 += 8; v37[4 * result] = (88 * v18 + 183 * v17 - 34806) >> 8; v7 += 8; v41[4 * result++] = (454 * v18 - 57937) >> 8; } while ( result < 4 ); v19 = v42; v20 = a5; v21 = a5[3]; if ( v42 < v21 ) { v22 = a5[2]; result = 16 * v42; do { v23 = *v20; if ( *v20 < v22 ) { v44 = (signed int)(__CFADD__(v19, 2147483648) + v19 + 2147483648 + 2147483648) >> 1; v45 = a1 + result; v43 = result; v46 = v8; v42 = v19; do { v24 = *(signed __int16 *)(v45 + 2 * v23); v25 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 4 * v44; v26 = v24 + *(&v30 + v25); if ( v26 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } v8 = v46; *(_BYTE *)(v46 + 4 * v23) = v26; v27 = v24 - *(&v34 + v25); if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } v28 = *(&v38 + v25); *(_BYTE *)(v8 + 4 * v23 + 1) = v27; v29 = v28 + v24; if ( v29 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } *(_BYTE *)(v8 + 4 * v23 + 2) = v29; *(_BYTE *)(v8 + 4 * v23++ + 3) = -1; v22 = a5[2]; } while ( v23 < v22 ); result = v43; v19 = v42; v20 = a5; v21 = a5[3]; } v8 += a6; result += 16; ++v19; } while ( v19 < v21 ); } return result; } // 7B2440: using guessed type __int16 var_7E[13]; // 7B2440: using guessed type __int16 var_5E[13]; // 7B2440: using guessed type __int16 var_3E[13]; //----- (007B2700) -------------------------------------------------------- _BYTE *__cdecl sub_7B2700(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, int a5) { signed __int16 *v5; // edx _BYTE *result; // eax int v7; // ebx int v8; // edi int v9; // ecx int v10; // edi int v11; // ebx int v12; // ecx int v13; // edi int v14; // ebx int v15; // ecx int v16; // ebx int v17; // ecx int v18; // ebx int v19; // ebx int v20; // ecx int v21; // ecx int v22; // ebx int v23; // ebx int v24; // ecx int v25; // ecx int v26; // ebx int v27; // ebx int v28; // ecx int v29; // ecx int v30; // ebx int v31; // ebx int v32; // ecx int v33; // ecx int v34; // ebx int v35; // ebx int v36; // ecx int v37; // ecx int v38; // ebx int v39; // ebx int v40; // ecx int v41; // ecx int v42; // ebx int v43; // ebx int v44; // ecx int v45; // ecx int v46; // ebx int v47; // ebx int v48; // ecx _BYTE *v49; // eax int v50; // ecx int v51; // ebx int v52; // ebx int v53; // ecx int v54; // ecx int v55; // ebx int v56; // ebx int v57; // ecx int v58; // ecx int v59; // ebx int v60; // ebx int v61; // ecx int v62; // ecx int v63; // ebx int v64; // ebx int v65; // ecx int v66; // ecx int v67; // ebx int v68; // ebx int v69; // ecx int v70; // ecx int v71; // ebx int v72; // ebx int v73; // ecx int v74; // ecx int v75; // ebx int v76; // ebx int v77; // ecx int v78; // ecx int v79; // ebx int v80; // ebx int v81; // ecx signed int v82; // [esp+4h] [ebp-48h] int v83; // [esp+8h] [ebp-44h] int v84; // [esp+Ch] [ebp-40h] int v85; // [esp+10h] [ebp-3Ch] int v86; // [esp+14h] [ebp-38h] signed __int16 *v87; // [esp+18h] [ebp-34h] signed __int16 *v88; // [esp+1Ch] [ebp-30h] int v89; // [esp+20h] [ebp-2Ch] int v90; // [esp+24h] [ebp-28h] int v91; // [esp+28h] [ebp-24h] int v92; // [esp+2Ch] [ebp-20h] int v93; // [esp+30h] [ebp-1Ch] int v94; // [esp+34h] [ebp-18h] int v95; // [esp+38h] [ebp-14h] int v96; // [esp+3Ch] [ebp-10h] v5 = a1; result = a4; v82 = 0; v87 = a3; v88 = a2; do { v7 = *v87; v96 = (359 * v7 - 45813) >> 8; v8 = *v88; v93 = (88 * v8 + 183 * v7 - 34806) >> 8; v9 = (454 * v8 - 57937) >> 8; v10 = v88[1]; v86 = v9; v11 = v87[1]; v95 = (359 * v11 - 45813) >> 8; v91 = (88 * v10 + 183 * v11 - 34806) >> 8; v12 = (454 * v10 - 57937) >> 8; v13 = v88[2]; v85 = v12; v14 = v87[2]; v94 = (359 * v14 - 45813) >> 8; v90 = (88 * v13 + 183 * v14 - 34806) >> 8; v84 = (454 * v13 - 57937) >> 8; v15 = v87[3]; v92 = (359 * v15 - 45813) >> 8; v16 = v88[3]; v89 = (88 * v16 + 183 * v15 - 34806) >> 8; v83 = (454 * v16 - 57937) >> 8; v17 = *v5; v18 = v96 + v17; v88 += 8; v87 += 8; if ( v96 + v17 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } *result = v18; v19 = v17 - v93; if ( v17 - v93 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[1] = v19; v20 = v86 + v17; if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } result[2] = v20; result[3] = -1; v21 = v5[1]; v22 = v96 + v21; if ( v96 + v21 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = v22; v23 = v21 - v93; if ( v21 - v93 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = v23; v24 = v86 + v21; if ( v24 <= 255 ) { if ( v24 < 0 ) LOBYTE(v24) = 0; } else { LOBYTE(v24) = -1; } result[6] = v24; result[7] = -1; v25 = v5[2]; v26 = v25 + v95; if ( v25 + v95 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[8] = v26; v27 = v25 - v91; if ( v25 - v91 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[9] = v27; v28 = v85 + v25; if ( v28 <= 255 ) { if ( v28 < 0 ) LOBYTE(v28) = 0; } else { LOBYTE(v28) = -1; } result[10] = v28; result[11] = -1; v29 = v5[3]; v30 = v29 + v95; if ( v29 + v95 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[12] = v30; v31 = v29 - v91; if ( v29 - v91 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[13] = v31; v32 = v85 + v29; if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } result[14] = v32; result[15] = -1; v33 = v5[4]; v34 = v33 + v94; if ( v33 + v94 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[16] = v34; v35 = v33 - v90; if ( v33 - v90 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[17] = v35; v36 = v84 + v33; if ( v36 <= 255 ) { if ( v36 < 0 ) LOBYTE(v36) = 0; } else { LOBYTE(v36) = -1; } result[18] = v36; result[19] = -1; v37 = v5[5]; v38 = v37 + v94; if ( v37 + v94 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[20] = v38; v39 = v37 - v90; if ( v37 - v90 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[21] = v39; v40 = v84 + v37; if ( v40 <= 255 ) { if ( v40 < 0 ) LOBYTE(v40) = 0; } else { LOBYTE(v40) = -1; } result[22] = v40; result[23] = -1; v41 = v5[6]; v42 = v41 + v92; if ( v41 + v92 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[24] = v42; v43 = v41 - v89; if ( v41 - v89 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[25] = v43; v44 = v83 + v41; if ( v44 <= 255 ) { if ( v44 < 0 ) LOBYTE(v44) = 0; } else { LOBYTE(v44) = -1; } result[26] = v44; result[27] = -1; v45 = v5[7]; v46 = v45 + v92; if ( v45 + v92 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[28] = v46; v47 = v45 - v89; if ( v45 - v89 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } result[29] = v47; v48 = v83 + v45; if ( v48 <= 255 ) { if ( v48 < 0 ) LOBYTE(v48) = 0; } else { LOBYTE(v48) = -1; } result[30] = v48; result[31] = -1; v49 = &result[a5]; v50 = v5[8]; v51 = v96 + v50; if ( v96 + v50 <= 255 ) { if ( v51 < 0 ) LOBYTE(v51) = 0; } else { LOBYTE(v51) = -1; } *v49 = v51; v52 = v50 - v93; if ( v50 - v93 <= 255 ) { if ( v52 < 0 ) LOBYTE(v52) = 0; } else { LOBYTE(v52) = -1; } v49[1] = v52; v53 = v86 + v50; if ( v53 <= 255 ) { if ( v53 < 0 ) LOBYTE(v53) = 0; } else { LOBYTE(v53) = -1; } v49[2] = v53; v49[3] = -1; v54 = v5[9]; v55 = v54 + v96; if ( v54 + v96 <= 255 ) { if ( v55 < 0 ) LOBYTE(v55) = 0; } else { LOBYTE(v55) = -1; } v49[4] = v55; v56 = v54 - v93; if ( v54 - v93 <= 255 ) { if ( v56 < 0 ) LOBYTE(v56) = 0; } else { LOBYTE(v56) = -1; } v49[5] = v56; v57 = v86 + v54; if ( v57 <= 255 ) { if ( v57 < 0 ) LOBYTE(v57) = 0; } else { LOBYTE(v57) = -1; } v49[6] = v57; v49[7] = -1; v58 = v5[10]; v59 = v58 + v95; if ( v58 + v95 <= 255 ) { if ( v59 < 0 ) LOBYTE(v59) = 0; } else { LOBYTE(v59) = -1; } v49[8] = v59; v60 = v58 - v91; if ( v58 - v91 <= 255 ) { if ( v60 < 0 ) LOBYTE(v60) = 0; } else { LOBYTE(v60) = -1; } v49[9] = v60; v61 = v85 + v58; if ( v61 <= 255 ) { if ( v61 < 0 ) LOBYTE(v61) = 0; } else { LOBYTE(v61) = -1; } v49[10] = v61; v49[11] = -1; v62 = v5[11]; v63 = v62 + v95; if ( v62 + v95 <= 255 ) { if ( v63 < 0 ) LOBYTE(v63) = 0; } else { LOBYTE(v63) = -1; } v49[12] = v63; v64 = v62 - v91; if ( v62 - v91 <= 255 ) { if ( v64 < 0 ) LOBYTE(v64) = 0; } else { LOBYTE(v64) = -1; } v49[13] = v64; v65 = v85 + v62; if ( v65 <= 255 ) { if ( v65 < 0 ) LOBYTE(v65) = 0; } else { LOBYTE(v65) = -1; } v49[14] = v65; v49[15] = -1; v66 = v5[12]; v67 = v66 + v94; if ( v66 + v94 <= 255 ) { if ( v67 < 0 ) LOBYTE(v67) = 0; } else { LOBYTE(v67) = -1; } v49[16] = v67; v68 = v66 - v90; if ( v66 - v90 <= 255 ) { if ( v68 < 0 ) LOBYTE(v68) = 0; } else { LOBYTE(v68) = -1; } v49[17] = v68; v69 = v84 + v66; if ( v69 <= 255 ) { if ( v69 < 0 ) LOBYTE(v69) = 0; } else { LOBYTE(v69) = -1; } v49[18] = v69; v49[19] = -1; v70 = v5[13]; v71 = v70 + v94; if ( v70 + v94 <= 255 ) { if ( v71 < 0 ) LOBYTE(v71) = 0; } else { LOBYTE(v71) = -1; } v49[20] = v71; v72 = v70 - v90; if ( v70 - v90 <= 255 ) { if ( v72 < 0 ) LOBYTE(v72) = 0; } else { LOBYTE(v72) = -1; } v49[21] = v72; v73 = v84 + v70; if ( v73 <= 255 ) { if ( v73 < 0 ) LOBYTE(v73) = 0; } else { LOBYTE(v73) = -1; } v49[22] = v73; v49[23] = -1; v74 = v5[14]; v75 = v74 + v92; if ( v74 + v92 <= 255 ) { if ( v75 < 0 ) LOBYTE(v75) = 0; } else { LOBYTE(v75) = -1; } v49[24] = v75; v76 = v74 - v89; if ( v74 - v89 <= 255 ) { if ( v76 < 0 ) LOBYTE(v76) = 0; } else { LOBYTE(v76) = -1; } v49[25] = v76; v77 = v83 + v74; if ( v77 <= 255 ) { if ( v77 < 0 ) LOBYTE(v77) = 0; } else { LOBYTE(v77) = -1; } v49[26] = v77; v49[27] = -1; v78 = v5[15]; v79 = v78 + v92; if ( v78 + v92 <= 255 ) { if ( v79 < 0 ) LOBYTE(v79) = 0; } else { LOBYTE(v79) = -1; } v49[28] = v79; v80 = v78 - v89; if ( v78 - v89 <= 255 ) { if ( v80 < 0 ) LOBYTE(v80) = 0; } else { LOBYTE(v80) = -1; } v49[29] = v80; v81 = v83 + v78; if ( v81 <= 255 ) { if ( v81 < 0 ) LOBYTE(v81) = 0; } else { LOBYTE(v81) = -1; } v5 += 16; v49[30] = v81; v49[31] = -1; result = &v49[a5]; v82 += 2; } while ( v82 < 8 ); return result; } //----- (007B3450) -------------------------------------------------------- void __cdecl sub_7B3450(int a1, int a2, int a3, int a4, int a5, int *a6, int a7) { int v7; // edi int v8; // ebx int v9; // esi int v10; // ecx int v11; // edx int v12; // eax int v13; // ebp int v14; // ebx int v15; // ecx int v16; // edx int v17; // esi int v18; // ecx int v19; // edx int v20; // ecx int v21; // ebx int v22; // [esp+8h] [ebp-2Ch] int v23; // [esp+10h] [ebp-24h] int v24; // [esp+18h] [ebp-1Ch] int v25; // [esp+1Ch] [ebp-18h] v7 = a6[1]; v8 = a6[3]; v9 = a5 + a7 * a6[1]; if ( v7 < v8 ) { v10 = a6[2]; v11 = 16 * v7; v12 = 8 * v7; do { v13 = *a6; if ( *a6 < v10 ) { v25 = v13 + v12; v23 = a4 + v11; v22 = v11; v24 = v9; do { v14 = *(signed __int16 *)(a1 + 2 * v25); v15 = *(signed __int16 *)(a3 + 2 * v25); v16 = (signed __int16)((359 * v15 - 45813) >> 8); v17 = *(signed __int16 *)(a2 + 2 * v25); v18 = (signed __int16)((88 * v17 + 183 * v15 - 34806) >> 8); v19 = v14 + v16; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } *(_BYTE *)(v24 + 4 * v13) = -(char)v19 - 1; v20 = v14 - v18; if ( v20 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } *(_BYTE *)(v24 + 4 * v13 + 1) = -(char)v20 - 1; v21 = (signed __int16)((454 * v17 - 57937) >> 8) + v14; if ( v21 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } *(_BYTE *)(v24 + 4 * v13 + 2) = -(char)v21 - 1; *(_BYTE *)(v24 + 4 * v13 + 3) = *(_BYTE *)(v23 + 2 * v13); ++v13; v10 = a6[2]; ++v25; } while ( v13 < v10 ); v11 = v22; v9 = v24; v8 = a6[3]; } v9 += a7; v11 += 16; v12 += 8; ++v7; } while ( v7 < v8 ); } } //----- (007B3FD0) -------------------------------------------------------- int __cdecl sub_7B3FD0(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int a5, int *a6, int a7) { signed __int16 *v7; // ecx signed __int16 *v8; // edx int v9; // ebx int result; // eax int v11; // ebp int v12; // edi int v13; // ebp int v14; // edi int v15; // ebp int v16; // edi int v17; // ebp int v18; // ebp int v19; // edi int v20; // ebp int v21; // ecx int v22; // edx int v23; // esi int v24; // eax int v25; // ecx int v26; // edx int v27; // edx int v28; // ecx int v29; // eax int v30; // ebp __int16 v31; // [esp+0h] [ebp-ECh] __int16 v32; // [esp+2h] [ebp-EAh] __int16 v33; // [esp+4h] [ebp-E8h] __int16 v34[29]; // [esp+6h] [ebp-E6h] __int16 v35; // [esp+40h] [ebp-ACh] __int16 v36; // [esp+42h] [ebp-AAh] __int16 v37; // [esp+44h] [ebp-A8h] __int16 v38[29]; // [esp+46h] [ebp-A6h] __int16 v39; // [esp+80h] [ebp-6Ch] __int16 v40; // [esp+82h] [ebp-6Ah] __int16 v41; // [esp+84h] [ebp-68h] __int16 v42[29]; // [esp+86h] [ebp-66h] int v43; // [esp+C0h] [ebp-2Ch] int v44; // [esp+C4h] [ebp-28h] int v45; // [esp+C8h] [ebp-24h] int v46; // [esp+CCh] [ebp-20h] int v47; // [esp+D0h] [ebp-1Ch] int v48; // [esp+D4h] [ebp-18h] v7 = a2; v8 = a3; v9 = a5 + a7 * a6[1]; result = 0; v43 = a6[1]; do { v11 = *v8; v12 = *v7; *(&v31 + 4 * result) = (359 * v11 - 45813) >> 8; *(&v35 + 4 * result) = (88 * v12 + 183 * v11 - 34806) >> 8; *(&v39 + 4 * result) = (454 * v12 - 57937) >> 8; v13 = v8[1]; v14 = v7[1]; *(&v32 + 4 * result) = (359 * v13 - 45813) >> 8; *(&v36 + 4 * result) = (88 * v14 + 183 * v13 - 34806) >> 8; v15 = (454 * v14 - 57937) >> 8; v16 = v7[2]; *(&v40 + 4 * result) = v15; v17 = v8[2]; *(&v33 + 4 * result) = (359 * v17 - 45813) >> 8; *(&v37 + 4 * result) = (88 * v16 + 183 * v17 - 34806) >> 8; *(&v41 + 4 * result) = (454 * v16 - 57937) >> 8; v18 = v8[3]; v19 = v7[3]; v34[4 * result] = (359 * v18 - 45813) >> 8; v7 += 8; v38[4 * result] = (88 * v19 + 183 * v18 - 34806) >> 8; v8 += 8; v42[4 * result++] = (454 * v19 - 57937) >> 8; } while ( result < 8 ); v20 = v43; v21 = a6[3]; if ( v43 < v21 ) { v22 = a6[2]; result = 16 * v43; do { v23 = *a6; if ( *a6 < v22 ) { v45 = 2 * v20; v47 = a4 + result; v46 = result + a1; v44 = result; v48 = v9; v43 = v20; do { v24 = *(signed __int16 *)(v46 + 2 * v23); v25 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 2 * v45; v26 = v24 + *(&v31 + v25); if ( v26 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } v9 = v48; *(_BYTE *)(v48 + 4 * v23) = -(char)v26 - 1; v27 = v24 - *(&v35 + v25); if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } v28 = *(&v39 + v25); *(_BYTE *)(v9 + 4 * v23 + 1) = -(char)v27 - 1; v29 = v28 + v24; if ( v29 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } v30 = v47; *(_BYTE *)(v9 + 4 * v23 + 2) = -(char)v29 - 1; *(_BYTE *)(v9 + 4 * v23 + 3) = *(_BYTE *)(v30 + 2 * v23); ++v23; v22 = a6[2]; } while ( v23 < v22 ); result = v44; v20 = v43; v21 = a6[3]; } v9 += a7; result += 16; ++v20; } while ( v20 < v21 ); } return result; } // 7B3FD0: using guessed type __int16 var_E6[29]; // 7B3FD0: using guessed type __int16 var_A6[29]; // 7B3FD0: using guessed type __int16 var_66[29]; //----- (007B42E0) -------------------------------------------------------- _BYTE *__cdecl sub_7B42E0(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, _BYTE *a5, int a6) { signed __int16 *v6; // edx _BYTE *result; // eax int v8; // esi int v9; // ecx int v10; // ebp int v11; // esi int v12; // ebp int v13; // ebp int v14; // edi int v15; // esi int v16; // ebp int v17; // ebx int v18; // ebx int v19; // ebx int v20; // ebx int v21; // ebx int v22; // ecx int v23; // ecx int v24; // ebx int v25; // ecx int v26; // ebx int v27; // ebx int v28; // ecx int v29; // ecx int v30; // ebx int v31; // ebx int v32; // ecx int v33; // ecx int v34; // ebx int v35; // ebx int v36; // ecx int v37; // ecx int v38; // ebx int v39; // ebx int v40; // ecx int v41; // ecx int v42; // ebx int v43; // ebx int v44; // ecx int v45; // ecx int v46; // ebx int v47; // ebx int v48; // ecx bool v49; // sf unsigned __int8 v50; // of int v51; // [esp+4h] [ebp-50h] int v52; // [esp+8h] [ebp-4Ch] int v53; // [esp+Ch] [ebp-48h] int v54; // [esp+10h] [ebp-44h] int v55; // [esp+14h] [ebp-40h] signed __int16 *v56; // [esp+18h] [ebp-3Ch] signed __int16 *v57; // [esp+1Ch] [ebp-38h] int v58; // [esp+20h] [ebp-34h] int v59; // [esp+24h] [ebp-30h] int v60; // [esp+28h] [ebp-2Ch] int v61; // [esp+2Ch] [ebp-28h] _BYTE *v62; // [esp+30h] [ebp-24h] int v63; // [esp+34h] [ebp-20h] int v64; // [esp+38h] [ebp-1Ch] int v65; // [esp+3Ch] [ebp-18h] int v66; // [esp+40h] [ebp-14h] v6 = a1; result = a5; v51 = 0; v62 = a4; v56 = a3; v57 = a2; do { v8 = *v56; v9 = (359 * v8 - 45813) >> 8; v10 = *v57; v65 = (88 * v10 + 183 * v8 - 34806) >> 8; v55 = (454 * v10 - 57937) >> 8; v11 = v56[1]; v64 = (359 * v11 - 45813) >> 8; v12 = v57[1]; v63 = (88 * v12 + 183 * v11 - 34806) >> 8; v54 = (454 * v12 - 57937) >> 8; v13 = v56[2]; v61 = (359 * v13 - 45813) >> 8; v14 = v57[2]; v60 = (88 * v14 + 183 * v13 - 34806) >> 8; v53 = (454 * v14 - 57937) >> 8; v15 = v56[3]; v59 = (359 * v15 - 45813) >> 8; v16 = v57[3]; v58 = (88 * v16 + 183 * v15 - 34806) >> 8; v52 = (454 * v16 - 57937) >> 8; v57 += 8; v17 = *v6; v56 += 8; v66 = v17; v18 = v9 + v17; if ( v18 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } *result = -(char)v18 - 1; v19 = v66 - v65; if ( v66 - v65 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } result[1] = -(char)v19 - 1; v20 = v55 + v66; if ( v55 + v66 <= 255 ) { if ( v20 < 0 ) LOBYTE(v20) = 0; } else { LOBYTE(v20) = -1; } result[2] = -(char)v20 - 1; result[3] = *v62; v21 = v6[1]; v22 = v21 + v9; if ( v22 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } result[4] = -(char)v22 - 1; v23 = v21 - v65; if ( v21 - v65 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } result[5] = -(char)v23 - 1; v24 = v55 + v21; if ( v24 <= 255 ) { if ( v24 < 0 ) LOBYTE(v24) = 0; } else { LOBYTE(v24) = -1; } result[6] = -(char)v24 - 1; result[7] = v62[2]; v25 = v6[2]; v26 = v25 + v64; if ( v25 + v64 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } result[8] = -(char)v26 - 1; v27 = v25 - v63; if ( v25 - v63 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } result[9] = -(char)v27 - 1; v28 = v54 + v25; if ( v28 <= 255 ) { if ( v28 < 0 ) LOBYTE(v28) = 0; } else { LOBYTE(v28) = -1; } result[10] = -(char)v28 - 1; result[11] = v62[4]; v29 = v6[3]; v30 = v29 + v64; if ( v29 + v64 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } result[12] = -(char)v30 - 1; v31 = v29 - v63; if ( v29 - v63 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } result[13] = -(char)v31 - 1; v32 = v54 + v29; if ( v32 <= 255 ) { if ( v32 < 0 ) LOBYTE(v32) = 0; } else { LOBYTE(v32) = -1; } result[14] = -(char)v32 - 1; result[15] = v62[6]; v33 = v6[4]; v34 = v33 + v61; if ( v33 + v61 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } result[16] = -(char)v34 - 1; v35 = v33 - v60; if ( v33 - v60 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } result[17] = -(char)v35 - 1; v36 = v53 + v33; if ( v36 <= 255 ) { if ( v36 < 0 ) LOBYTE(v36) = 0; } else { LOBYTE(v36) = -1; } result[18] = -(char)v36 - 1; result[19] = v62[8]; v37 = v6[5]; v38 = v37 + v61; if ( v37 + v61 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } result[20] = -(char)v38 - 1; v39 = v37 - v60; if ( v37 - v60 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } result[21] = -(char)v39 - 1; v40 = v53 + v37; if ( v40 <= 255 ) { if ( v40 < 0 ) LOBYTE(v40) = 0; } else { LOBYTE(v40) = -1; } result[22] = -(char)v40 - 1; result[23] = v62[10]; v41 = v6[6]; v42 = v41 + v59; if ( v41 + v59 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } result[24] = -(char)v42 - 1; v43 = v41 - v58; if ( v41 - v58 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } result[25] = -(char)v43 - 1; v44 = v52 + v41; if ( v44 <= 255 ) { if ( v44 < 0 ) LOBYTE(v44) = 0; } else { LOBYTE(v44) = -1; } result[26] = -(char)v44 - 1; result[27] = v62[12]; v45 = v6[7]; v46 = v45 + v59; if ( v45 + v59 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } result[28] = -(char)v46 - 1; v47 = v45 - v58; if ( v45 - v58 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } result[29] = -(char)v47 - 1; v48 = v52 + v45; if ( v48 <= 255 ) { if ( v48 < 0 ) LOBYTE(v48) = 0; } else { LOBYTE(v48) = -1; } v6 += 8; result[30] = -(char)v48 - 1; result[31] = v62[14]; result += a6; v50 = __OFSUB__(v51 + 1, 8); v49 = v51 - 7 < 0; v62 += 16; ++v51; } while ( v49 ^ v50 ); return result; } //----- (007B4C90) -------------------------------------------------------- int __cdecl sub_7B4C90(int a1, signed __int16 *a2, signed __int16 *a3, int a4, int a5, int *a6, int a7) { signed __int16 *v7; // ecx signed __int16 *v8; // edx int v9; // ebx int result; // eax int v11; // ebp int v12; // edi int v13; // ebp int v14; // edi int v15; // ebp int v16; // edi int v17; // ebp int v18; // ebp int v19; // edi int v20; // ebp int v21; // ecx int v22; // edx int v23; // esi int v24; // eax int v25; // ecx int v26; // edx int v27; // edx int v28; // ecx int v29; // eax int v30; // ebp __int16 v31; // [esp+0h] [ebp-8Ch] __int16 v32; // [esp+2h] [ebp-8Ah] __int16 v33; // [esp+4h] [ebp-88h] __int16 v34[13]; // [esp+6h] [ebp-86h] __int16 v35; // [esp+20h] [ebp-6Ch] __int16 v36; // [esp+22h] [ebp-6Ah] __int16 v37; // [esp+24h] [ebp-68h] __int16 v38[13]; // [esp+26h] [ebp-66h] __int16 v39; // [esp+40h] [ebp-4Ch] __int16 v40; // [esp+42h] [ebp-4Ah] __int16 v41; // [esp+44h] [ebp-48h] __int16 v42[13]; // [esp+46h] [ebp-46h] int v43; // [esp+60h] [ebp-2Ch] int v44; // [esp+64h] [ebp-28h] int v45; // [esp+68h] [ebp-24h] int v46; // [esp+6Ch] [ebp-20h] int v47; // [esp+70h] [ebp-1Ch] int v48; // [esp+74h] [ebp-18h] v7 = a2; v8 = a3; v9 = a5 + a7 * a6[1]; result = 0; v43 = a6[1]; do { v11 = *v8; v12 = *v7; *(&v31 + 4 * result) = (359 * v11 - 45813) >> 8; *(&v35 + 4 * result) = (88 * v12 + 183 * v11 - 34806) >> 8; *(&v39 + 4 * result) = (454 * v12 - 57937) >> 8; v13 = v8[1]; v14 = v7[1]; *(&v32 + 4 * result) = (359 * v13 - 45813) >> 8; *(&v36 + 4 * result) = (88 * v14 + 183 * v13 - 34806) >> 8; v15 = (454 * v14 - 57937) >> 8; v16 = v7[2]; *(&v40 + 4 * result) = v15; v17 = v8[2]; *(&v33 + 4 * result) = (359 * v17 - 45813) >> 8; *(&v37 + 4 * result) = (88 * v16 + 183 * v17 - 34806) >> 8; *(&v41 + 4 * result) = (454 * v16 - 57937) >> 8; v18 = v8[3]; v19 = v7[3]; v34[4 * result] = (359 * v18 - 45813) >> 8; v7 += 8; v38[4 * result] = (88 * v19 + 183 * v18 - 34806) >> 8; v8 += 8; v42[4 * result++] = (454 * v19 - 57937) >> 8; } while ( result < 4 ); v20 = v43; v21 = a6[3]; if ( v43 < v21 ) { v22 = a6[2]; result = 16 * v43; do { v23 = *a6; if ( *a6 < v22 ) { v45 = (signed int)(__CFADD__(v20, 2147483648) + v20 + 2147483648 + 2147483648) >> 1; v47 = a4 + result; v46 = result + a1; v44 = result; v48 = v9; v43 = v20; do { v24 = *(signed __int16 *)(v46 + 2 * v23); v25 = ((signed int)(__CFADD__(v23, 2147483648) + v23 + 2147483648 + 2147483648) >> 1) + 4 * v45; v26 = v24 + *(&v31 + v25); if ( v26 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } v9 = v48; *(_BYTE *)(v48 + 4 * v23) = -(char)v26 - 1; v27 = v24 - *(&v35 + v25); if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } v28 = *(&v39 + v25); *(_BYTE *)(v9 + 4 * v23 + 1) = -(char)v27 - 1; v29 = v28 + v24; if ( v29 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } v30 = v47; *(_BYTE *)(v9 + 4 * v23 + 2) = -(char)v29 - 1; *(_BYTE *)(v9 + 4 * v23 + 3) = *(_BYTE *)(v30 + 2 * v23); ++v23; v22 = a6[2]; } while ( v23 < v22 ); result = v44; v20 = v43; v21 = a6[3]; } v9 += a7; result += 16; ++v20; } while ( v20 < v21 ); } return result; } // 7B4C90: using guessed type __int16 var_86[13]; // 7B4C90: using guessed type __int16 var_66[13]; // 7B4C90: using guessed type __int16 var_46[13]; //----- (007B4F80) -------------------------------------------------------- char __cdecl sub_7B4F80(signed __int16 *a1, signed __int16 *a2, signed __int16 *a3, _BYTE *a4, _BYTE *a5, int a6) { _BYTE *v6; // edi _BYTE *v7; // esi int v8; // ecx int v9; // edx int v10; // edx int v11; // eax int v12; // edx int v13; // eax int v14; // edx int v15; // eax int v16; // eax int v17; // edx int v18; // edx int v19; // eax int v20; // eax int v21; // edx int v22; // edx int v23; // eax int v24; // eax int v25; // edx int v26; // edx int v27; // eax int v28; // eax int v29; // edx int v30; // edx int v31; // eax int v32; // eax int v33; // edx int v34; // edx int v35; // eax int v36; // eax int v37; // edx int v38; // edx int v39; // eax int v40; // eax int v41; // edx int v42; // edx int v43; // eax int v44; // eax int v45; // edx int v46; // edx int v47; // eax int v48; // eax int v49; // edx _BYTE *v50; // esi int v51; // edx int v52; // eax int v53; // eax char v54; // dl char v55; // dl int v56; // eax int v57; // eax int v58; // edx int v59; // edx int v60; // eax int v61; // eax char v62; // dl char v63; // dl int v64; // eax int v65; // eax int v66; // edx int v67; // edx int v68; // eax int v69; // eax char v70; // dl char v71; // dl int v72; // eax int v73; // eax int v74; // edx int v75; // edx int v76; // eax int v77; // eax char v78; // dl char v79; // dl int v80; // eax char result; // al char v82; // dl signed int v83; // [esp+4h] [ebp-50h] int v84; // [esp+8h] [ebp-4Ch] int v85; // [esp+Ch] [ebp-48h] int v86; // [esp+10h] [ebp-44h] int v87; // [esp+14h] [ebp-40h] signed __int16 *v88; // [esp+18h] [ebp-3Ch] signed __int16 *v89; // [esp+1Ch] [ebp-38h] int v90; // [esp+20h] [ebp-34h] int v91; // [esp+24h] [ebp-30h] int v92; // [esp+28h] [ebp-2Ch] int v93; // [esp+2Ch] [ebp-28h] int v94; // [esp+30h] [ebp-24h] int v95; // [esp+34h] [ebp-20h] int v96; // [esp+38h] [ebp-1Ch] int v97; // [esp+3Ch] [ebp-18h] signed __int16 *v98; // [esp+40h] [ebp-14h] v6 = a4; v7 = a5; v83 = 0; v88 = a3; v89 = a2; v98 = a1; do { v8 = *v88; v97 = (359 * v8 - 45813) >> 8; v9 = *v89; v95 = (88 * v9 + 183 * v8 - 34806) >> 8; v87 = (454 * v9 - 57937) >> 8; v10 = v88[1]; v96 = (359 * v10 - 45813) >> 8; v11 = v89[1]; v93 = (88 * v11 + 183 * v10 - 34806) >> 8; v86 = (454 * v11 - 57937) >> 8; v12 = v88[2]; v94 = (359 * v12 - 45813) >> 8; v13 = v89[2]; v91 = (88 * v13 + 183 * v12 - 34806) >> 8; v85 = (454 * v13 - 57937) >> 8; v14 = v88[3]; v92 = (359 * v14 - 45813) >> 8; v15 = v89[3]; v90 = (88 * v15 + 183 * v14 - 34806) >> 8; v84 = (454 * v15 - 57937) >> 8; v89 += 8; v16 = *v98; v88 += 8; v17 = v97 + v16; if ( v97 + v16 <= 255 ) { if ( v17 < 0 ) LOBYTE(v17) = 0; } else { LOBYTE(v17) = -1; } *v7 = -(char)v17 - 1; v18 = v16 - v95; if ( v16 - v95 <= 255 ) { if ( v18 < 0 ) LOBYTE(v18) = 0; } else { LOBYTE(v18) = -1; } v7[1] = -(char)v18 - 1; v19 = v87 + v16; if ( v19 <= 255 ) { if ( v19 < 0 ) LOBYTE(v19) = 0; } else { LOBYTE(v19) = -1; } v7[2] = -(char)v19 - 1; v7[3] = *v6; v20 = v98[1]; v21 = v97 + v20; if ( v97 + v20 <= 255 ) { if ( v21 < 0 ) LOBYTE(v21) = 0; } else { LOBYTE(v21) = -1; } v7[4] = -(char)v21 - 1; v22 = v20 - v95; if ( v20 - v95 <= 255 ) { if ( v22 < 0 ) LOBYTE(v22) = 0; } else { LOBYTE(v22) = -1; } v7[5] = -(char)v22 - 1; v23 = v87 + v20; if ( v23 <= 255 ) { if ( v23 < 0 ) LOBYTE(v23) = 0; } else { LOBYTE(v23) = -1; } v7[6] = -(char)v23 - 1; v7[7] = v6[2]; v24 = v98[2]; v25 = v24 + v96; if ( v24 + v96 <= 255 ) { if ( v25 < 0 ) LOBYTE(v25) = 0; } else { LOBYTE(v25) = -1; } v7[8] = -(char)v25 - 1; v26 = v24 - v93; if ( v24 - v93 <= 255 ) { if ( v26 < 0 ) LOBYTE(v26) = 0; } else { LOBYTE(v26) = -1; } v7[9] = -(char)v26 - 1; v27 = v86 + v24; if ( v27 <= 255 ) { if ( v27 < 0 ) LOBYTE(v27) = 0; } else { LOBYTE(v27) = -1; } v7[10] = -(char)v27 - 1; v7[11] = v6[4]; v28 = v98[3]; v29 = v28 + v96; if ( v28 + v96 <= 255 ) { if ( v29 < 0 ) LOBYTE(v29) = 0; } else { LOBYTE(v29) = -1; } v7[12] = -(char)v29 - 1; v30 = v28 - v93; if ( v28 - v93 <= 255 ) { if ( v30 < 0 ) LOBYTE(v30) = 0; } else { LOBYTE(v30) = -1; } v7[13] = -(char)v30 - 1; v31 = v86 + v28; if ( v31 <= 255 ) { if ( v31 < 0 ) LOBYTE(v31) = 0; } else { LOBYTE(v31) = -1; } v7[14] = -(char)v31 - 1; v7[15] = v6[6]; v32 = v98[4]; v33 = v32 + v94; if ( v32 + v94 <= 255 ) { if ( v33 < 0 ) LOBYTE(v33) = 0; } else { LOBYTE(v33) = -1; } v7[16] = -(char)v33 - 1; v34 = v32 - v91; if ( v32 - v91 <= 255 ) { if ( v34 < 0 ) LOBYTE(v34) = 0; } else { LOBYTE(v34) = -1; } v7[17] = -(char)v34 - 1; v35 = v85 + v32; if ( v35 <= 255 ) { if ( v35 < 0 ) LOBYTE(v35) = 0; } else { LOBYTE(v35) = -1; } v7[18] = -(char)v35 - 1; v7[19] = v6[8]; v36 = v98[5]; v37 = v36 + v94; if ( v36 + v94 <= 255 ) { if ( v37 < 0 ) LOBYTE(v37) = 0; } else { LOBYTE(v37) = -1; } v7[20] = -(char)v37 - 1; v38 = v36 - v91; if ( v36 - v91 <= 255 ) { if ( v38 < 0 ) LOBYTE(v38) = 0; } else { LOBYTE(v38) = -1; } v7[21] = -(char)v38 - 1; v39 = v85 + v36; if ( v39 <= 255 ) { if ( v39 < 0 ) LOBYTE(v39) = 0; } else { LOBYTE(v39) = -1; } v7[22] = -(char)v39 - 1; v7[23] = v6[10]; v40 = v98[6]; v41 = v40 + v92; if ( v40 + v92 <= 255 ) { if ( v41 < 0 ) LOBYTE(v41) = 0; } else { LOBYTE(v41) = -1; } v7[24] = -(char)v41 - 1; v42 = v40 - v90; if ( v40 - v90 <= 255 ) { if ( v42 < 0 ) LOBYTE(v42) = 0; } else { LOBYTE(v42) = -1; } v7[25] = -(char)v42 - 1; v43 = v84 + v40; if ( v43 <= 255 ) { if ( v43 < 0 ) LOBYTE(v43) = 0; } else { LOBYTE(v43) = -1; } v7[26] = -(char)v43 - 1; v7[27] = v6[12]; v44 = v98[7]; v45 = v44 + v92; if ( v44 + v92 <= 255 ) { if ( v45 < 0 ) LOBYTE(v45) = 0; } else { LOBYTE(v45) = -1; } v7[28] = -(char)v45 - 1; v46 = v44 - v90; if ( v44 - v90 <= 255 ) { if ( v46 < 0 ) LOBYTE(v46) = 0; } else { LOBYTE(v46) = -1; } v7[29] = -(char)v46 - 1; v47 = v84 + v44; if ( v47 <= 255 ) { if ( v47 < 0 ) LOBYTE(v47) = 0; } else { LOBYTE(v47) = -1; } v7[30] = -(char)v47 - 1; v7[31] = v6[14]; v48 = v98[8]; v49 = v97 + v48; v50 = &v7[a6]; if ( v97 + v48 <= 255 ) { if ( v49 < 0 ) LOBYTE(v49) = 0; } else { LOBYTE(v49) = -1; } *v50 = -(char)v49 - 1; v51 = v48 - v95; if ( v48 - v95 <= 255 ) { if ( v51 < 0 ) LOBYTE(v51) = 0; } else { LOBYTE(v51) = -1; } v50[1] = -(char)v51 - 1; v52 = v87 + v48; if ( v52 <= 255 ) { if ( v52 < 0 ) LOBYTE(v52) = 0; } else { LOBYTE(v52) = -1; } v50[2] = -(char)v52 - 1; v50[3] = v6[16]; v53 = v98[9]; if ( v53 + v97 <= 255 ) { v54 = v53 + ((unsigned __int16)(359 * v8 + 19723) >> 8); if ( v53 + v97 < 0 ) v54 = 0; } else { v54 = -1; } v50[4] = -v54 - 1; if ( v53 - v95 <= 255 ) { v55 = v53 - v95; if ( v53 - v95 < 0 ) v55 = 0; } else { v55 = -1; } v50[5] = -v55 - 1; v56 = v87 + v53; if ( v56 <= 255 ) { if ( v56 < 0 ) LOBYTE(v56) = 0; } else { LOBYTE(v56) = -1; } v50[6] = -(char)v56 - 1; v50[7] = v6[18]; v57 = v98[10]; v58 = v57 + v96; if ( v57 + v96 <= 255 ) { if ( v58 < 0 ) LOBYTE(v58) = 0; } else { LOBYTE(v58) = -1; } v50[8] = -(char)v58 - 1; v59 = v57 - v93; if ( v57 - v93 <= 255 ) { if ( v59 < 0 ) LOBYTE(v59) = 0; } else { LOBYTE(v59) = -1; } v50[9] = -(char)v59 - 1; v60 = v86 + v57; if ( v60 <= 255 ) { if ( v60 < 0 ) LOBYTE(v60) = 0; } else { LOBYTE(v60) = -1; } v50[10] = -(char)v60 - 1; v50[11] = v6[20]; v61 = v98[11]; if ( v61 + v96 <= 255 ) { v62 = v61 + v96; if ( v61 + v96 < 0 ) v62 = 0; } else { v62 = -1; } v50[12] = -v62 - 1; if ( v61 - v93 <= 255 ) { v63 = v61 - v93; if ( v61 - v93 < 0 ) v63 = 0; } else { v63 = -1; } v50[13] = -v63 - 1; v64 = v86 + v61; if ( v64 <= 255 ) { if ( v64 < 0 ) LOBYTE(v64) = 0; } else { LOBYTE(v64) = -1; } v50[14] = -(char)v64 - 1; v50[15] = v6[22]; v65 = v98[12]; v66 = v65 + v94; if ( v65 + v94 <= 255 ) { if ( v66 < 0 ) LOBYTE(v66) = 0; } else { LOBYTE(v66) = -1; } v50[16] = -(char)v66 - 1; v67 = v65 - v91; if ( v65 - v91 <= 255 ) { if ( v67 < 0 ) LOBYTE(v67) = 0; } else { LOBYTE(v67) = -1; } v50[17] = -(char)v67 - 1; v68 = v85 + v65; if ( v68 <= 255 ) { if ( v68 < 0 ) LOBYTE(v68) = 0; } else { LOBYTE(v68) = -1; } v50[18] = -(char)v68 - 1; v50[19] = v6[24]; v69 = v98[13]; if ( v69 + v94 <= 255 ) { v70 = v69 + v94; if ( v69 + v94 < 0 ) v70 = 0; } else { v70 = -1; } v50[20] = -v70 - 1; if ( v69 - v91 <= 255 ) { v71 = v69 - v91; if ( v69 - v91 < 0 ) v71 = 0; } else { v71 = -1; } v50[21] = -v71 - 1; v72 = v85 + v69; if ( v72 <= 255 ) { if ( v72 < 0 ) LOBYTE(v72) = 0; } else { LOBYTE(v72) = -1; } v50[22] = -(char)v72 - 1; v50[23] = v6[26]; v73 = v98[14]; v74 = v73 + v92; if ( v73 + v92 <= 255 ) { if ( v74 < 0 ) LOBYTE(v74) = 0; } else { LOBYTE(v74) = -1; } v50[24] = -(char)v74 - 1; v75 = v73 - v90; if ( v73 - v90 <= 255 ) { if ( v75 < 0 ) LOBYTE(v75) = 0; } else { LOBYTE(v75) = -1; } v50[25] = -(char)v75 - 1; v76 = v84 + v73; if ( v76 <= 255 ) { if ( v76 < 0 ) LOBYTE(v76) = 0; } else { LOBYTE(v76) = -1; } v50[26] = -(char)v76 - 1; v50[27] = v6[28]; v77 = v98[15]; if ( v77 + v92 <= 255 ) { v78 = v77 + v92; if ( v77 + v92 < 0 ) v78 = 0; } else { v78 = -1; } v50[28] = -v78 - 1; if ( v77 - v90 <= 255 ) { v79 = v77 - v90; if ( v77 - v90 < 0 ) v79 = 0; } else { v79 = -1; } v50[29] = -v79 - 1; v80 = v84 + v77; if ( v80 <= 255 ) { if ( v80 < 0 ) LOBYTE(v80) = 0; } else { LOBYTE(v80) = -1; } result = -(char)v80 - 1; v50[30] = result; v82 = v6[30]; v6 += 32; v50[31] = v82; v7 = &v50[a6]; v98 += 16; v83 += 2; } while ( v83 < 8 ); return result; } //----- (007B5FA0) -------------------------------------------------------- void __cdecl sub_7B5FA0(int a1, int a2, int a3, int a4, int *a5, int a6) { int *v6; // edi int v7; // esi int v8; // edx int v9; // ebp int v10; // eax int v11; // ebx int v12; // ecx int v13; // edx char v14; // al int v15; // [esp+Ch] [ebp-18h] v6 = a5; v7 = a5[1]; v8 = a5[3]; v9 = a4 + a6 * a5[1]; if ( v7 < v8 ) { v10 = a5[2]; v11 = 8 * v7; do { v12 = *v6; if ( *v6 < v10 ) { v13 = v12 + v11; v15 = v9; do { v9 = v15; *(_BYTE *)(v15 + 4 * v12) = *(_BYTE *)(a1 + 2 * v13); *(_BYTE *)(v15 + 4 * v12 + 1) = *(_BYTE *)(a2 + 2 * v13); v14 = *(_BYTE *)(a3 + 2 * v13++); *(_BYTE *)(v15 + 4 * v12 + 2) = v14; *(_BYTE *)(v15 + 4 * v12++ + 3) = -1; v10 = a5[2]; } while ( v12 < v10 ); v6 = a5; v8 = a5[3]; } v9 += a6; v11 += 8; ++v7; } while ( v7 < v8 ); } } //----- (007B6350) -------------------------------------------------------- void __cdecl sub_7B6350(int a1, int a2, int a3, int a4, int a5, int *a6, int a7) { int *v7; // ebp int v8; // ebx int v9; // esi int v10; // ecx int v11; // edx int v12; // eax int v13; // edi int v14; // esi v7 = a6; v8 = a6[1]; v9 = a6[3]; v10 = a5 + a7 * a6[1]; if ( v8 < v9 ) { v11 = a6[2]; v12 = 8 * v8; do { v13 = *v7; if ( *v7 < v11 ) { v14 = v13 + v12; do { *(_BYTE *)(v10 + 4 * v13) = *(_BYTE *)(a1 + 2 * v14); *(_BYTE *)(v10 + 4 * v13 + 1) = *(_BYTE *)(a2 + 2 * v14); *(_BYTE *)(v10 + 4 * v13 + 2) = *(_BYTE *)(a3 + 2 * v14); *(_BYTE *)(v10 + 4 * v13++ + 3) = *(_BYTE *)(a4 + 2 * v14++); v11 = a6[2]; } while ( v13 < v11 ); v7 = a6; v9 = a6[3]; } v10 += a7; v12 += 8; ++v8; } while ( v8 < v9 ); } } //----- (007B6740) -------------------------------------------------------- _DWORD *__cdecl sub_7B6740(int a1, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *result; // eax int v7; // ecx int v8; // esi int v9; // edx int v10; // edi int v11; // ebx signed int v12; // ebp int v13; // ebx char v14; // cl int v15; // [esp+4h] [ebp-20h] int v16; // [esp+8h] [ebp-1Ch] result = a5; v7 = a5[1]; v8 = a1 + 16 * v7; v9 = a2 + 16 * v7; v10 = a4 + a6 * v7; v11 = a5[3]; if ( v7 < v11 ) { result = (_DWORD *)a5[2]; v16 = a3 + 16 * v7; do { v12 = *a5; if ( *a5 < (signed int)result ) { v13 = 3 * v12; v15 = v7; do { *(_BYTE *)(v13 + v10) = *(_BYTE *)(v8 + 2 * v12); *(_BYTE *)(v13 + v10 + 1) = *(_BYTE *)(v9 + 2 * v12); v14 = *(_BYTE *)(v16 + 2 * v12++); *(_BYTE *)(v13 + v10 + 2) = v14; v13 += 3; result = (_DWORD *)a5[2]; } while ( v12 < (signed int)result ); v7 = v15; v11 = a5[3]; } v8 += 16; v9 += 16; ++v7; v16 += 16; v10 += a6; } while ( v7 < v11 ); } return result; } //----- (007B6800) -------------------------------------------------------- _BYTE *__cdecl sub_7B6800(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5) { _BYTE *v5; // edx _BYTE *result; // eax char v7; // cl char v8; // cl bool v9; // sf unsigned __int8 v10; // of _BYTE *v11; // [esp+4h] [ebp-18h] int v12; // [esp+8h] [ebp-14h] _BYTE *v13; // [esp+Ch] [ebp-10h] v5 = a1; result = a2; v12 = 0; v11 = a4; v13 = a3; do { *v11 = *v5; v11[1] = *result; v11[2] = *v13; v11[3] = v5[2]; v11[4] = result[2]; v11[5] = v13[2]; v11[6] = v5[4]; v11[7] = result[4]; v11[8] = v13[4]; v11[9] = v5[6]; v11[10] = result[6]; v11[11] = v13[6]; v11[12] = v5[8]; v11[13] = result[8]; v11[14] = v13[8]; v11[15] = v5[10]; v11[16] = result[10]; v11[17] = v13[10]; v11[18] = v5[12]; v11[19] = result[12]; v11[20] = v13[12]; v7 = v5[14]; v5 += 16; v11[21] = v7; v8 = result[14]; result += 16; v11[22] = v8; v11[23] = v13[14]; v13 += 16; v11 += a5; v10 = __OFSUB__(v12 + 1, 8); v9 = v12++ - 7 < 0; } while ( v9 ^ v10 ); return result; } //----- (007B6A80) -------------------------------------------------------- int __cdecl sub_7B6A80(int a1, int a2, int a3, int a4, int *a5, int a6) { int v6; // ecx int v7; // edi int v8; // esi int result; // eax int v10; // edx int v11; // ebp int v12; // ebx char v13; // al signed int v14; // ecx int v15; // [esp+4h] [ebp-20h] int v16; // [esp+8h] [ebp-1Ch] int v17; // [esp+Ch] [ebp-18h] v6 = a5[1]; v7 = a4 + a6 * v6; v8 = a1 + 16 * a5[1]; result = a5[3]; if ( v6 < result ) { v10 = a5[2]; v16 = a3 + 16 * ((signed int)(__CFADD__(a5[1], 2147483648) + a5[1] + 2147483648 + 2147483648) >> 1); v17 = a2 + 16 * ((signed int)(__CFADD__(a5[1], 2147483648) + a5[1] + 2147483648 + 2147483648) >> 1); do { v11 = *a5; if ( *a5 < v10 ) { v12 = 3 * v11; v15 = v6; do { v13 = *(_BYTE *)(v8 + 2 * v11); v14 = (signed int)(__CFADD__(v11, 2147483648) + v11 + 2147483648 + 2147483648) >> 1; ++v11; *(_BYTE *)(v12 + v7) = v13; *(_BYTE *)(v12 + v7 + 1) = *(_BYTE *)(v17 + 2 * v14); *(_BYTE *)(v12 + v7 + 2) = *(_BYTE *)(v16 + 2 * v14); v12 += 3; v10 = a5[2]; } while ( v11 < v10 ); v6 = v15; result = a5[3]; } v8 += 16; v17 += 16 * (v6 & 1); v16 += 16 * (v6++ & 1); v7 += a6; } while ( v6 < result ); } return result; } //----- (007B6B70) -------------------------------------------------------- _BYTE *__cdecl sub_7B6B70(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5) { _BYTE *v5; // edx _BYTE *result; // eax _BYTE *v7; // esi char v8; // cl char v9; // cl bool v10; // sf unsigned __int8 v11; // of _BYTE *v12; // [esp+4h] [ebp-18h] int v13; // [esp+8h] [ebp-14h] _BYTE *v14; // [esp+Ch] [ebp-10h] v5 = a1; result = a2; v13 = 0; v12 = a4; v14 = a3; do { *v12 = *v5; v12[1] = *result; v12[2] = *v14; v12[3] = v5[2]; v12[4] = *result; v12[5] = *v14; v12[6] = v5[4]; v12[7] = result[2]; v12[8] = v14[2]; v12[9] = v5[6]; v12[10] = result[2]; v12[11] = v14[2]; v12[12] = v5[8]; v12[13] = result[4]; v12[14] = v14[4]; v12[15] = v5[10]; v12[16] = result[4]; v12[17] = v14[4]; v12[18] = v5[12]; v12[19] = result[6]; v12[20] = v14[6]; v12[21] = v5[14]; v12[22] = result[6]; v12[23] = v14[6]; v7 = &v12[a5]; *v7 = v5[16]; v7[1] = *result; v7[2] = *v14; v7[3] = v5[18]; v7[4] = *result; v7[5] = *v14; v7[6] = v5[20]; v7[7] = result[2]; v7[8] = v14[2]; v7[9] = v5[22]; v7[10] = result[2]; v7[11] = v14[2]; v7[12] = v5[24]; v7[13] = result[4]; v7[14] = v14[4]; v7[15] = v5[26]; v7[16] = result[4]; v7[17] = v14[4]; v7[18] = v5[28]; v7[19] = result[6]; v7[20] = v14[6]; v8 = v5[30]; v5 += 32; v7[21] = v8; v9 = result[6]; result += 16; v7[22] = v9; v7[23] = v14[6]; v14 += 16; v12 += a5 + a5; v11 = __OFSUB__(v13 + 1, 4); v10 = v13++ - 3 < 0; } while ( v10 ^ v11 ); return result; } //----- (007B71A0) -------------------------------------------------------- _DWORD *__cdecl sub_7B71A0(int a1, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *result; // eax int v7; // ecx int v8; // esi int v9; // edx int v10; // edi int v11; // ebx signed int v12; // ebp int v13; // ebx char v14; // al signed int v15; // ecx int v16; // [esp+4h] [ebp-20h] int v17; // [esp+8h] [ebp-1Ch] result = a5; v7 = a5[1]; v8 = a1 + 16 * v7; v9 = a2 + 16 * v7; v10 = a4 + a6 * v7; v11 = a5[3]; if ( v7 < v11 ) { result = (_DWORD *)a5[2]; v17 = a3 + 16 * v7; do { v12 = *a5; if ( *a5 < (signed int)result ) { v13 = 3 * v12; v16 = v7; do { v14 = *(_BYTE *)(v8 + 2 * v12); v15 = (signed int)(__CFADD__(v12, 2147483648) + v12 + 2147483648 + 2147483648) >> 1; ++v12; *(_BYTE *)(v13 + v10) = v14; *(_BYTE *)(v13 + v10 + 1) = *(_BYTE *)(v9 + 2 * v15); *(_BYTE *)(v13 + v10 + 2) = *(_BYTE *)(v17 + 2 * v15); v13 += 3; result = (_DWORD *)a5[2]; } while ( v12 < (signed int)result ); v7 = v16; v11 = a5[3]; } v8 += 16; v9 += 16; ++v7; v17 += 16; v10 += a6; } while ( v7 < v11 ); } return result; } //----- (007B7270) -------------------------------------------------------- _BYTE *__cdecl sub_7B7270(_BYTE *a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, int a5) { _BYTE *v5; // edx _BYTE *result; // eax char v7; // cl char v8; // cl bool v9; // sf unsigned __int8 v10; // of _BYTE *v11; // [esp+4h] [ebp-18h] int v12; // [esp+8h] [ebp-14h] _BYTE *v13; // [esp+Ch] [ebp-10h] v5 = a1; result = a2; v12 = 0; v11 = a4; v13 = a3; do { *v11 = *v5; v11[1] = *result; v11[2] = *v13; v11[3] = v5[2]; v11[4] = *result; v11[5] = *v13; v11[6] = v5[4]; v11[7] = result[2]; v11[8] = v13[2]; v11[9] = v5[6]; v11[10] = result[2]; v11[11] = v13[2]; v11[12] = v5[8]; v11[13] = result[4]; v11[14] = v13[4]; v11[15] = v5[10]; v11[16] = result[4]; v11[17] = v13[4]; v11[18] = v5[12]; v11[19] = result[6]; v11[20] = v13[6]; v7 = v5[14]; v5 += 16; v11[21] = v7; v8 = result[6]; result += 16; v11[22] = v8; v11[23] = v13[6]; v13 += 16; v11 += a5; v10 = __OFSUB__(v12 + 1, 8); v9 = v12++ - 7 < 0; } while ( v9 ^ v10 ); return result; } //----- (007B7630) -------------------------------------------------------- _DWORD *__cdecl sub_7B7630(int a1, int a2, int a3, int a4, _DWORD *a5, int a6) { _DWORD *result; // eax int v7; // ebp int v8; // ecx int v9; // edx int v10; // ebx int v11; // edi signed int v12; // edx signed int v13; // esi char v14; // al int v15; // [esp+Ch] [ebp-18h] int v16; // [esp+10h] [ebp-14h] result = a5; v7 = a5[1]; v8 = a1 + 16 * v7; v9 = a2 + 16 * v7; v10 = a4 + a6 * v7; v11 = a5[3]; if ( v7 < v11 ) { result = (_DWORD *)a5[2]; v15 = a3 + 16 * v7; do { if ( *a5 < (signed int)result ) { v16 = v9; v12 = *a5; do { v13 = (signed int)(__CFADD__(v12, 2147483648) + v12 + 2147483648 + 2147483648) >> 1; *(_BYTE *)(v10 + 2 * v12) = *(_BYTE *)(v8 + 2 * v12); if ( v12 & 1 ) v14 = *(_WORD *)(v15 + 2 * v13); else v14 = *(_WORD *)(v16 + 2 * v13); *(_BYTE *)(v10 + 2 * v12++ + 1) = v14; result = (_DWORD *)a5[2]; } while ( v12 < (signed int)result ); v9 = v16; v11 = a5[3]; } v8 += 16; v9 += 16; ++v7; v15 += 16; v10 += a6; } while ( v7 < v11 ); } return result; } //----- (007B7AB0) -------------------------------------------------------- void __cdecl sub_7B7AB0(int a1, int a2, int *a3, int a4) { int v4; // edi int v5; // ecx int v6; // ebp int v7; // eax int v8; // edx int v9; // ebx signed int v10; // eax v4 = a3[1]; v5 = a3[3]; v6 = a2 + a4 * a3[1]; if ( v4 < v5 ) { v7 = a3[2]; v8 = 16 * v4; do { v9 = *a3; if ( *a3 < v7 ) { do { v10 = *(signed __int16 *)(a1 + v8 + 2 * v9); if ( v10 <= 255 ) { if ( v10 < 0 ) LOBYTE(v10) = 0; } else { LOBYTE(v10) = -1; } *(_BYTE *)(v9++ + v6) = v10; v7 = a3[2]; } while ( v9 < v7 ); v5 = a3[3]; } v6 += a4; v8 += 16; ++v4; } while ( v4 < v5 ); } } //----- (007B7B40) -------------------------------------------------------- signed int __cdecl sub_7B7B40(signed __int16 *a1, _BYTE *a2, int a3) { signed __int16 *v3; // ecx _BYTE *v4; // edx signed int result; // eax signed int v6; // ebx signed int v7; // ebx signed int v8; // ebx signed int v9; // ebx signed int v10; // ebx signed int v11; // ebx signed int v12; // ebx signed int v13; // ebx v3 = a1; v4 = a2; result = 0; do { v6 = *v3; if ( v6 <= 255 ) { if ( v6 < 0 ) LOBYTE(v6) = 0; } else { LOBYTE(v6) = -1; } *v4 = v6; v7 = v3[1]; if ( v7 <= 255 ) { if ( v7 < 0 ) LOBYTE(v7) = 0; } else { LOBYTE(v7) = -1; } v4[1] = v7; v8 = v3[2]; if ( v8 <= 255 ) { if ( v8 < 0 ) LOBYTE(v8) = 0; } else { LOBYTE(v8) = -1; } v4[2] = v8; v9 = v3[3]; if ( v9 <= 255 ) { if ( v9 < 0 ) LOBYTE(v9) = 0; } else { LOBYTE(v9) = -1; } v4[3] = v9; v10 = v3[4]; if ( v10 <= 255 ) { if ( v10 < 0 ) LOBYTE(v10) = 0; } else { LOBYTE(v10) = -1; } v4[4] = v10; v11 = v3[5]; if ( v11 <= 255 ) { if ( v11 < 0 ) LOBYTE(v11) = 0; } else { LOBYTE(v11) = -1; } v4[5] = v11; v12 = v3[6]; if ( v12 <= 255 ) { if ( v12 < 0 ) LOBYTE(v12) = 0; } else { LOBYTE(v12) = -1; } v4[6] = v12; v13 = v3[7]; if ( v13 <= 255 ) { if ( v13 < 0 ) LOBYTE(v13) = 0; } else { LOBYTE(v13) = -1; } v3 += 8; ++result; v4[7] = v13; v4 += a3; } while ( result < 8 ); return result; } //----- (007B8150) -------------------------------------------------------- _DWORD *__cdecl sub_7B8150(_DWORD *a1, int a2, int a3) { _DWORD *v3; // ebp char *v4; // ebx _DWORD *result; // eax int v6; // esi int v7; // ecx int v8; // eax int v9; // esi int v10; // edx int v11; // ecx signed int v12; // esi int v13; // ecx int v14; // edx int v15; // edi int v16; // ebx int v17; // ecx int v18; // eax int v19; // edx int v20; // ebx int v21; // ebp int v22; // esi int v23; // edi char *v24; // ecx int v25; // eax int v26; // edx int v27; // esi int v28; // edx int v29; // ebp int v30; // eax signed int v31; // ebp signed __int16 *v32; // esi signed __int16 v33; // cx int v34; // ebx int v35; // edi char v36; // al int v37; // ecx int v38; // esi int v39; // edx int v40; // edx int v41; // eax int v42; // esi int v43; // ecx char *v44; // ebx int i; // ebp int v46; // edi signed __int16 *v47; // esi int v48; // edi int v49; // edx int v50; // eax int v51; // esi int v52; // ebp signed __int16 *v53; // edx int v54; // ebx signed int v55; // edi int v56; // eax int v57; // ecx int v58; // edx int v59; // ebp char v60; // al int v61; // ebx char v62; // al int v63; // ebx signed __int16 *v64; // eax int v65; // edx int v66; // esi int v67; // edi int v68; // ebx int v69; // ecx int v70; // edi int v71; // ebp signed __int16 *v72; // eax int v73; // esi int v74; // ecx int v75; // ebx int v76; // ecx _BYTE *v77; // ebx int v78; // edx int v79; // esi int v80; // ebp int v81; // ecx int v82; // ecx int v83; // ecx int v84; // esi int v85; // edx int v86; // ecx int v87; // ebp int v88; // esi int v89; // ecx int v90; // esi int v91; // edx int v92; // ebp int v93; // edi int v94; // ebx int v95; // edi int v96; // esi int v97; // ebp int v98; // ecx int v99; // ebx int v100; // ebp int v101; // ebx char *v102; // edi int v103; // edx char *v104; // ebx signed __int16 *v105; // edx signed __int16 *v106; // ecx int v107; // esi int v108; // ebp int v109; // ebp int v110; // ebp int v111; // ebp int v112; // ebp int v113; // ebp int v114; // ebp int v115; // edx int v116; // edi int v117; // edi int v118; // eax int v119; // esi signed int v120; // edx int v121; // esi int v122; // edi int v123; // esi int v124; // ecx signed int v125; // edx int *v126; // ebp int v127; // esi int v128; // ebx int v129; // eax int v130; // edi int v131; // edx int v132; // edx int v133; // esi int v134; // edx int v135; // esi int v136; // edx int v137; // ecx int v138; // edx bool v139; // zf bool v140; // sf unsigned __int8 v141; // of int v142; // edi int v143; // eax int v144; // esi int v145; // ecx int v146; // esi char v147[1280]; // [esp+30h] [ebp-5ACh] char v148; // [esp+530h] [ebp-ACh] char *v149; // [esp+540h] [ebp-9Ch] int v150; // [esp+544h] [ebp-98h] int v151; // [esp+548h] [ebp-94h] int v152; // [esp+54Ch] [ebp-90h] int v153; // [esp+550h] [ebp-8Ch] int v154; // [esp+554h] [ebp-88h] char v155; // [esp+558h] [ebp-84h] signed __int16 *v156; // [esp+55Ch] [ebp-80h] signed __int16 *v157; // [esp+560h] [ebp-7Ch] int v158; // [esp+564h] [ebp-78h] int v159; // [esp+568h] [ebp-74h] signed __int16 *v160; // [esp+56Ch] [ebp-70h] int v161; // [esp+570h] [ebp-6Ch] int v162; // [esp+574h] [ebp-68h] signed __int16 *v163; // [esp+578h] [ebp-64h] int v164; // [esp+57Ch] [ebp-60h] int v165; // [esp+580h] [ebp-5Ch] int v166; // [esp+584h] [ebp-58h] int v167; // [esp+588h] [ebp-54h] int v168; // [esp+58Ch] [ebp-50h] int v169; // [esp+590h] [ebp-4Ch] int v170; // [esp+594h] [ebp-48h] char *v171; // [esp+598h] [ebp-44h] int v172; // [esp+59Ch] [ebp-40h] int v173; // [esp+5A0h] [ebp-3Ch] int v174; // [esp+5A4h] [ebp-38h] char *v175; // [esp+5A8h] [ebp-34h] int v176; // [esp+5ACh] [ebp-30h] int v177; // [esp+5B0h] [ebp-2Ch] char *v178; // [esp+5B4h] [ebp-28h] int v179; // [esp+5B8h] [ebp-24h] char *v180; // [esp+5BCh] [ebp-20h] int v181; // [esp+5C0h] [ebp-1Ch] int v182; // [esp+5C4h] [ebp-18h] v3 = a1; v4 = 0; result = (_DWORD *)a1[3576]; if ( *result == 1 ) { v138 = a1[12]; v141 = __OFSUB__(v138, a1[3592]); v139 = v138 == a1[3592]; v140 = v138 - a1[3592] < 0; v151 = a1[12]; if ( (unsigned __int8)(v140 ^ v141) | v139 ) return result; v142 = result[13]; v143 = a1[3566]; v144 = *(_DWORD *)(v142 + 4); v154 = v142; v152 = v143; v145 = v143 / v144; v146 = *(_DWORD *)(v142 + 8); v153 = a1[3567]; v7 = 8 * v145; v8 = 8 * (v153 / v146); } else { v6 = a1[3567]; v152 = a1[3566]; v7 = 8 * v152; v153 = v6; v8 = 8 * v6; v151 = a1[12]; } v9 = a1[4986]; v156 = (signed __int16 *)a1[4621]; v154 = 0; v162 = 0; v160 = 0; v157 = 0; v161 = 0; v158 = 0; v159 = 0; v163 = 0; v155 = 0; if ( v9 == 1 ) { if ( v152 == 2 && v153 == 1 ) { v133 = a1[29]; v155 = 1; if ( v133 ) { v162 = 1; } else { v134 = a1[3568]; v162 = 0; v135 = v134 - 1; if ( v134 ) { v154 = a1[3571]; v136 = 16 * v135; v150 = v7; v137 = v162; v149 = 0; do { --v135; v137 += *(_DWORD *)(v136 + v154 + 8) * *(_DWORD *)(v136 + v154 + 4); v136 -= 16; } while ( v135 != -1 ); v162 = v137; v7 = v150; v4 = v149; v3 = a1; } } v181 = v162 << 6; v180 = (char *)v3[4987]; v154 = *((_DWORD *)v180 + 1) + (v162 << 6) * 2 * a2; v162 = v154 + (v162 << 8); } if ( v152 == 2 && v153 == 2 ) { v119 = v3[29]; v155 = 2; if ( v119 ) { v120 = 1; } else { v121 = v3[3568]; v120 = 0; v154 = v121 - 1; if ( v121 ) { v122 = v3[3571]; v153 = v3[3571]; v123 = 16 * v154; v150 = v7; v124 = v154; v149 = v4; do { --v124; v120 += *(_DWORD *)(v123 + v122 + 8) * *(_DWORD *)(v123 + v122 + 4); v123 -= 16; } while ( v124 != -1 ); v7 = v150; v4 = v149; v3 = a1; } } v125 = v120 << 6; v126 = (int *)v3[4987]; v149 = v4; v127 = *v126; v150 = v7; v182 = v8; v128 = 2 * v125 * (a2 + 1); v129 = v125 * 2 * a2; v157 = (signed __int16 *)v128; v160 = (signed __int16 *)(v127 + v128); v130 = (a2 + 2) * 2 * v125; v161 = v127 + v129; v131 = v126[1]; v158 = v130 + v127; v4 = v149; v154 = v131 + v129; v162 = v130 + v131; v132 = v126[2]; v157 = (signed __int16 *)((char *)v157 + v132); v3 = a1; v159 = v132 + v129; v8 = v182; v163 = (signed __int16 *)(v130 + v132); } } result = (_DWORD *)sub_7A7BB0(v3 + 1, v7, v8, a2, a3, v151, v3[15], v3[8], v3[9], v3[10], v3 + 3589, (int *)&v148); if ( !result ) { v10 = v3[13]; if ( v10 != 2 || v3[22] != 1 ) { v153 = v3[3592] + v3[3589]; } else { v153 = v3[3589]; v118 = v3[3592]; if ( v118 ) { if ( v118 == 1 ) ++v153; } else { v153 += 2; } } v11 = *(_DWORD *)v3[3576]; v12 = 0; v182 = 0; v181 = v11; while ( 1 ) { result = (_DWORD *)v3[12]; v13 = v181; if ( v181 >= (signed int)result ) v13 = v3[12]; if ( v12 >= v13 ) break; if ( v181 != 1 || v3[4984] ) { v14 = *(_DWORD *)(v3[3576] + 52); v15 = *(_DWORD *)(v182 + v14 + 8); v16 = *(_DWORD *)(v182 + v14 + 4); v173 = *(_DWORD *)(v182 + v14 + 8); v176 = v16; } else { v115 = v3[3576]; v173 = 1; v116 = *(_DWORD *)(v115 + 52); v176 = 1; v16 = *(_DWORD *)(v182 + v116 + 4); v15 = *(_DWORD *)(v182 + v116 + 8); } v17 = v3[3566] / v16; v18 = v3[3567] / v15; if ( v155 == 1 ) { v102 = v147; v103 = 0; if ( v176 > 0 ) { v152 = v12; do { v104 = v102; v179 = v103; v105 = v156; v178 = v102 + 256; v180 = v102; v150 = v17; v106 = (signed __int16 *)v162; do { if ( v150 == 2 ) { v107 = *v105; *v104 = (*(signed __int16 *)(v154 + 14) + 3 * v107 + 1) >> 2; v104[1] = (v105[1] + 3 * v107 + 2) >> 2; v108 = 3 * v105[1]; v104[2] = (v108 + *v105 + 1) >> 2; v104[3] = (v108 + v105[2] + 2) >> 2; v109 = 3 * v105[2]; v104[4] = (v109 + v105[1] + 1) >> 2; v104[5] = (v109 + v105[3] + 2) >> 2; v110 = 3 * v105[3]; v104[6] = (v110 + v105[2] + 1) >> 2; v104[7] = (v110 + v105[4] + 2) >> 2; v111 = 3 * v105[4]; v104[8] = (v111 + v105[3] + 1) >> 2; v104[9] = (v111 + v105[5] + 2) >> 2; v112 = 3 * v105[5]; v104[10] = (v112 + v105[4] + 1) >> 2; v104[11] = (v112 + v105[6] + 2) >> 2; v113 = 3 * v105[6]; v104[12] = (v113 + v105[5] + 1) >> 2; v104[13] = (v113 + v105[7] + 2) >> 2; v114 = 3 * v105[7]; v104[14] = (v105[6] + v114 + 1) >> 2; v104[15] = (*v106 + v114 + 2) >> 2; } else { *v104 = *(_BYTE *)v105; v104[1] = *((_BYTE *)v105 + 2); v104[2] = *((_BYTE *)v105 + 4); v104[3] = *((_BYTE *)v105 + 6); v104[4] = *((_BYTE *)v105 + 8); v104[5] = *((_BYTE *)v105 + 10); v104[6] = *((_BYTE *)v105 + 12); v104[7] = *((_BYTE *)v105 + 14); } v105 += 8; v106 += 8; v104 += 32; v154 += 16; } while ( (signed int)v178 > (signed int)v104 ); v156 = v105; v162 = (int)v106; v17 = v150; v102 = &v180[8 * v150]; v103 = v179 + 1; } while ( v179 + 1 < v176 ); v12 = v152; v3 = a1; } } else if ( v155 == 2 ) { v40 = 0; if ( v173 > 0 ) { v169 = v18 << 8; v168 = 8 * v17; v167 = 32 * v18; v180 = (char *)(v17 - 6); v152 = v12; v151 = v18; v41 = v176; v42 = v173; v150 = v17; v43 = v169; do { v44 = &v147[v40 * v43]; for ( i = 0; i < v41; ++i ) { if ( v150 != 2 || v151 != 2 ) { v40 = 0; if ( v42 > 0 ) { v46 = 0; do { v44 = &v147[v46]; i = 0; if ( v41 > 0 ) { v175 = (char *)v46; v47 = v160; v48 = v162; v174 = v40; v49 = v154; do { v50 = 0; if ( v43 > 0 ) { v160 = v47; v51 = v168; v171 = v44; v172 = i; v162 = v48; v52 = v167; v154 = v49; v53 = v156; do { v54 = 0; if ( v51 > 0 ) { v170 = v50; v55 = v150; do { v56 = *v53; v57 = 0; ++v53; if ( v52 > 0 ) { v156 = v53; v166 = v54; v165 = v56; do { v58 = 0; if ( v55 > 0 ) { if ( v55 < 6 ) { v149 = &v171[v170 + v166 + v57]; v164 = (unsigned __int8)v165; } else { v59 = (int)&v171[v170 + v166 + v57]; v149 = &v171[v170 + v166 + v57]; v60 = v165; v164 = (unsigned __int8)v165; v61 = (int)v180; do { *(_BYTE *)(v59 + v58) = v60; *(_BYTE *)(v59 + v58 + 1) = v60; *(_BYTE *)(v59 + v58 + 2) = v60; *(_BYTE *)(v59 + v58 + 3) = v60; *(_BYTE *)(v59 + v58 + 4) = v60; v58 += 5; } while ( v58 <= v61 ); v55 = v150; } v62 = v164; v63 = (int)v149; do *(_BYTE *)(v63 + v58++) = v62; while ( v58 < v55 ); } v57 += 32; } while ( v57 < v167 ); v53 = v156; v54 = v166; v52 = v167; v51 = v168; } v54 += v55; } while ( v54 < v51 ); v50 = v170; v43 = v169; } v50 += v52; } while ( v50 < v43 ); v156 = v53; v47 = v160; v44 = v171; i = v172; v48 = v162; v49 = v154; } v44 += 8 * v150; v47 += 64; v49 += 128; v48 += 128; ++i; v157 += 64; v41 = v176; v161 += 128; v158 += 128; v159 += 128; v163 += 64; } while ( i < v176 ); v160 = v47; v42 = v173; v162 = v48; v46 = (int)v175; v154 = v49; v40 = v174; } v46 += v43; ++v40; } while ( v40 < v42 ); } } else { v64 = v156; v175 = 0; v171 = v44; v178 = (char *)7; v172 = i; v174 = v40; v65 = 0; do { v66 = 9 * *v64; v67 = 3 * *(signed __int16 *)(v154 + 14); v177 = 3 * v64[1]; if ( v65 ) { v68 = 3 * *(v64 - 8); v69 = *(v64 - 7); v165 = *(signed __int16 *)(v154 - 2); v149 = (char *)v69; } else { v68 = 3 * v160[56]; v165 = *(signed __int16 *)(v161 + 126); v149 = (char *)v160[57]; } if ( v178 ) { v170 = 3 * v64[8]; v166 = *(signed __int16 *)(v154 + 30); v164 = v64[9]; } else { v170 = 3 * *v157; v166 = *(signed __int16 *)(v159 + 14); v164 = v157[1]; } v70 = v66 + v67; v71 = (int)v171; v171[v65] = (v70 + v68 + v165 + 8) >> 4; v72 = v64 + 1; v73 = v177 + v66; v74 = v166; *(_BYTE *)(v65 + v71 + 1) = (signed int)&v149[v73 + 7 + v68] >> 4; v75 = v73 + v170; *(_BYTE *)(v65 + v71 + 32) = (v170 + v70 + v74 + 8) >> 4; v76 = (v75 + v164 + 7) >> 4; v77 = (_BYTE *)(v71 + v65 + 2); *(_BYTE *)(v65 + v71 + 33) = v76; ++v160; ++v157; v177 = v71 + v65 + 14; v175 = (char *)v65; do { v78 = 9 * *v72; v79 = 3 * *(v72 - 1); v170 = 3 * v72[1]; if ( v175 ) { v80 = 3 * *(v72 - 8); v164 = *(v72 - 9); v165 = *(v72 - 7); } else { v80 = 3 * v160[56]; v81 = v160[57]; v164 = v160[55]; v165 = v81; } if ( v178 ) { v82 = v72[7]; v179 = 3 * v72[8]; v149 = (char *)v82; v166 = v72[9]; } else { v179 = 3 * *v157; v83 = v157[1]; v149 = (char *)*(v157 - 1); v166 = v83; } v84 = v78 + v79; ++v72; *v77 = (v84 + v80 + v164 + 8) >> 4; v85 = v170 + v78; v86 = (v85 + v80 + v165 + 7) >> 4; v87 = v179; v88 = v179 + v84; v77[1] = v86; v89 = (signed int)&v149[v88 + 8] >> 4; v90 = v166; v77[32] = v89; v77[33] = (v85 + v87 + v90 + 7) >> 4; v77 += 2; ++v160; ++v157; } while ( v177 > (signed int)v77 ); v91 = (int)v175; v92 = 9 * *v72; v93 = 3 * *(v72 - 1); v177 = 3 * *(signed __int16 *)v162; if ( v175 ) { v94 = 3 * *(v72 - 8); v166 = *(v72 - 9); v149 = (char *)*(signed __int16 *)(v162 - 16); } else { v94 = 3 * v160[56]; v166 = v160[55]; v149 = (char *)*(signed __int16 *)(v158 + 112); } v162 += 16; if ( v178 ) { v170 = 3 * v72[8]; v165 = v72[7]; v164 = *(signed __int16 *)v162; } else { v170 = 3 * *v157; v165 = *(v157 - 1); v164 = *v163; } v95 = v92 + v93; v96 = (int)v171; v171[(_DWORD)v175 + 14] = (v95 + v94 + v166 + 8) >> 4; v64 = v72 + 1; v97 = v177 + v92; v98 = v165; *(_BYTE *)(v91 + v96 + 15) = (signed int)&v149[v97 + 7 + v94] >> 4; v99 = v97 + v170; *(_BYTE *)(v91 + v96 + 46) = (v170 + v95 + v98 + 8) >> 4; v100 = (int)(v178 - 1); *(_BYTE *)(v91 + v96 + 47) = (v99 + v164 + 7) >> 4; v65 = v91 + 64; v154 += 16; v160 -= 7; v157 -= 7; v178 = (char *)v100; } while ( v100 != -1 ); v156 = v64; v101 = v96; i = v172; v40 = v174; v43 = v169; v41 = v176; v42 = v173; v44 = (char *)(v101 + 16); v160 += 64; v157 += 64; v161 += 128; v158 += 128; v159 += 128; v163 += 64; } } ++v40; } while ( v40 < v42 ); v12 = v152; v3 = a1; } } else { v19 = 0; if ( v173 > 0 ) { v20 = v18 << 8; v170 = v18 << 8; v171 = (char *)(8 * v17); v180 = (char *)(v17 - 6); v172 = 0; v21 = v176; v152 = v12; v22 = 0; v23 = v173; v151 = 32 * v18; v150 = v17; do { v24 = &v147[v22]; v25 = 0; if ( v21 > 0 ) { v172 = v22; v169 = v19; v26 = v150; do { v27 = 0; if ( v20 > 0 ) { v179 = v25; v28 = v151; v29 = (int)v171; do { v30 = 0; if ( v29 > 0 ) { v31 = v150; v177 = (int)&v24[v27]; v175 = v24; v174 = v27; v32 = v156; do { v33 = *v32; v34 = 0; ++v32; if ( v28 > 0 ) { v35 = v30 + v177; v167 = v30 + v177; v168 = (unsigned __int8)v33; v156 = v32; v178 = (char *)v30; v36 = v33; do { v37 = 0; if ( v31 > 0 ) { if ( v31 < 6 ) { v38 = v34 + v35; } else { v38 = v34 + v35; v39 = (int)v180; do { *(_BYTE *)(v38 + v37) = v36; *(_BYTE *)(v38 + v37 + 1) = v36; *(_BYTE *)(v38 + v37 + 2) = v36; *(_BYTE *)(v38 + v37 + 3) = v36; *(_BYTE *)(v38 + v37 + 4) = v36; v37 += 5; } while ( v37 <= v39 ); v31 = v150; } do *(_BYTE *)(v38 + v37++) = v36; while ( v37 < v31 ); v28 = v151; } v34 += 32; } while ( v34 < v28 ); v32 = v156; v30 = (int)v178; } v30 += v31; } while ( v30 < (signed int)v171 ); v156 = v32; v24 = v175; v27 = v174; v29 = (int)v171; v20 = v170; } v27 += v28; } while ( v27 < v20 ); v25 = v179; v26 = v150; v21 = v176; } v24 += 8 * v26; ++v25; } while ( v25 < v21 ); v22 = v172; v19 = v169; v23 = v173; } v22 += v20; ++v19; } while ( v19 < v23 ); v12 = v152; v3 = a1; } } v4 = v147; sub_7AB650(v3, (int *)&v148, v12, v153, (int)v147); v10 = v3[13]; if ( v10 != 2 || v3[22] != 1 ) ++v153; else --v153; v182 += 24; ++v12; } if ( v3[29] ) { v12 = v3[21]; if ( v12 - 1 != v3[3592] ) v12 = v3[12]; } if ( (v10 != 255 || v3[22] != 255) && v12 < (signed int)result ) { v117 = v153; do { sub_7AB650(v3, (int *)&v148, v12, v117, (int)v4); result = (_DWORD *)v3[13]; if ( result != (_DWORD *)2 || (result = (_DWORD *)v3[22], result != (_DWORD *)1) ) ++v117; else --v117; ++v12; } while ( v12 < v3[12] ); } } return result; } // 7B8150: using guessed type char var_5AC[1280]; //----- (007B9750) -------------------------------------------------------- int __cdecl sub_7B9750(int a1, int a2, int a3) { return ((int (__cdecl *)(int, int, int))loc_7CFE40)(a1, a2, a3); } //----- (007B9B80) -------------------------------------------------------- int __cdecl sub_7B9B80(unsigned __int8 a1) { return a1; } //----- (007B9B90) -------------------------------------------------------- int __cdecl sub_7B9B90(int a1, size_t a2, int a3, int a4, int a5) { int v5; // ebx size_t v6; // ecx int v7; // edx unsigned int v8; // eax int v9; // ebx signed int v10; // eax signed int v11; // edx bool v12; // zf int v14; // [esp+0h] [ebp-38h] int v15; // [esp+4h] [ebp-34h] int v16; // [esp+8h] [ebp-30h] size_t v17; // [esp+Ch] [ebp-2Ch] int v18; // [esp+10h] [ebp-28h] CPPEH_RECORD ms_exc; // [esp+20h] [ebp-18h] size_t v20; // [esp+44h] [ebp+Ch] ms_exc.old_esp = (DWORD)&v14; ms_exc.registration.TryLevel = 0; v14 = 0; v15 = 0; *(_DWORD *)a3 = 0; if ( a2 <= *(_DWORD *)(a1 + 36) ) { v14 = sub_7C1AE0((_DWORD *)a1, a2, (_DWORD *)a4); if ( v14 ) return v14; } else { *(_DWORD *)a3 = operator new(a2); if ( !*(_DWORD *)a3 ) return -5; *(_DWORD *)a4 = *(_DWORD *)a3; v5 = *(_DWORD *)a3; v15 = *(_DWORD *)a3; *(_DWORD *)a5 = 1; v6 = a2; if ( a2 >= *(_DWORD *)(a1 + 36) ) v6 = *(_DWORD *)(a1 + 36); v16 = v6; dword_BA2968(v5, *(_DWORD *)(a1 + 16), v6); v7 = v16; v15 += v16; v20 = a2 - v16; v8 = v20; v9 = a1; *(_DWORD *)(v9 + 16) += v16; *(_DWORD *)(v9 + 28) += v7; *(_DWORD *)(a1 + 36) -= v16; if ( v20 ) { v17 = v20; while ( v8 <= 0xFFFF ) { if ( v8 >= 0x1000 ) v8 = 4096; v14 = sub_7C1AE0((_DWORD *)a1, v8, &v18); if ( v14 ) { v14 = -21; operator delete(*(void **)a3); *(_DWORD *)a3 = 0; return v14; } v10 = v20; if ( v20 >= 0x1000 ) v10 = 4096; dword_BA2968(v15, v18, v10); if ( v20 >= 0x1000 ) v11 = 4096; else v11 = v20; v15 += v11; v12 = v20 == 4096; v8 = v20 - 4096; v20 -= 4096; if ( v12 ) break; } } } ms_exc.registration.TryLevel = -1; return v14; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); //----- (007B9D70) -------------------------------------------------------- int __cdecl sub_7B9D70(int a1, _DWORD *a2) { int v2; // ebp int v4; // [esp+18h] [ebp-14h] int v5; // [esp+1Ch] [ebp-10h] void *v6; // [esp+20h] [ebp-Ch] v4 = 0; v2 = sub_7B9B90(a1, 2u, (int)&v6, (int)&v5, (int)&v4); if ( !v2 ) *a2 = *(unsigned __int8 *)(v5 + 1) + (*(unsigned __int8 *)v5 << 8); if ( v4 && v6 ) operator delete(v6); return v2; } //----- (007B9DF0) -------------------------------------------------------- signed int __cdecl sub_7B9DF0(int a1, int *a2) { unsigned __int8 v2; // al signed int result; // eax unsigned __int8 *v4; // [esp+10h] [ebp-Ch] v2 = *(_BYTE *)(a1 + 48); if ( *(_BYTE *)(a1 + 48) ) { *(_BYTE *)(a1 + 48) = 0; *a2 = sub_7B9B80(v2); result = 0; } else { result = sub_7C1B70((_DWORD *)a1); if ( !result ) { if ( sub_7C1AE0((_DWORD *)a1, 1u, &v4) ) *a2 = 256; else *a2 = sub_7B9B80(*v4); result = 0; } } return result; } //----- (007B9E70) -------------------------------------------------------- int __cdecl sub_7B9E70(_DWORD *a1) { int result; // eax signed int v2; // edx signed int v3; // ebx int v4; // [esp+10h] [ebp-14h] char v5; // [esp+14h] [ebp-10h] result = sub_7B9D70((int)a1, &v4); if ( !result ) { if ( v4 < 2 ) return -21; v2 = v4 - 2; v3 = a1[9]; if ( v4 - 2 >= v3 ) { v4 -= 2; result = sub_7C1AE0(a1, v3, &v5); if ( result ) return -21; v2 = v4 - v3; } if ( v2 > 0 ) { while ( v2 <= 0xFFFF ) { v4 = v2; if ( v2 >= 4096 ) v2 = 4096; result = sub_7C1AE0(a1, v2, &v5); if ( result ) return -21; v2 = v4 - 4096; if ( v4 - 4096 <= 0 ) return result; } } } return result; } //----- (007B9F40) -------------------------------------------------------- int __cdecl sub_7B9F40(int a1, _DWORD *a2) { int v2; // ebp int v4; // [esp+18h] [ebp-1Ch] void *v5; // [esp+1Ch] [ebp-18h] int v6; // [esp+20h] [ebp-14h] int v7; // [esp+24h] [ebp-10h] v4 = 0; v5 = 0; v6 = 0; *a2 = 0; v2 = sub_7B9D70(a1, &v7); if ( !v2 ) { if ( v7 >= 2 ) { v7 -= 2; v2 = sub_7B9B90(a1, v7, (int)&v5, (int)&v4, (int)&v6); if ( !v2 ) *a2 = *(unsigned __int8 *)(v4 + 1) + (*(unsigned __int8 *)v4 << 8); } else { v2 = -21; } } if ( v6 && v5 ) operator delete(v5); return v2; } //----- (007B9FF0) -------------------------------------------------------- int __cdecl sub_7B9FF0(int a1, _DWORD *a2) { int v2; // ebx unsigned __int8 *v4; // eax int v5; // edx int v6; // esi int v7; // ecx int v8; // edi int v9; // esi unsigned __int8 *v10; // edi int v11; // eax int v12; // edx int v13; // ebp int v14; // eax int v15; // ecx _BYTE *v16; // edx int v17; // edi int v18; // esi int v19; // ebp int v20; // ebp int v21; // edx int v22; // edi int v23; // [esp+18h] [ebp-34h] void *v24; // [esp+1Ch] [ebp-30h] int v25; // [esp+20h] [ebp-2Ch] int v26; // [esp+24h] [ebp-28h] int v27; // [esp+28h] [ebp-24h] int v28; // [esp+2Ch] [ebp-20h] int v29; // [esp+30h] [ebp-1Ch] int v30; // [esp+34h] [ebp-18h] v23 = 0; v24 = 0; v25 = 0; v2 = sub_7B9D70(a1, &v26); if ( !v2 ) { if ( v26 >= 2 ) { v26 -= 2; v2 = sub_7B9B90(a1, v26, (int)&v24, (int)&v23, (int)&v25); if ( !v2 ) { dword_BA2964(a2[3571], 64); v4 = (unsigned __int8 *)v23++; v5 = *v4; a2[3561] = v5; v23 = (int)(v4 + 2); v6 = v4[1] << 8; a2[3563] = v6; v23 = (int)(v4 + 3); v7 = v6 + v4[2]; a2[3563] = v7; v23 = (int)(v4 + 4); v8 = v4[3] << 8; a2[3562] = v8; v23 = (int)(v4 + 5); v9 = v8 + v4[4]; v10 = v4 + 6; a2[3562] = v9; v23 = (int)(v4 + 6); v11 = v4[5]; a2[3568] = v11; if ( v5 == 8 ) { if ( v7 ) { v12 = 0; v30 = 0; v29 = 0; if ( v11 > 0 ) { v13 = a2[3571]; v14 = 16 * v29; v15 = v29; v27 = 0; v28 = 0; do { v23 = (int)(v10 + 1); *(_DWORD *)(v14 + v13) = *v10; v16 = (_BYTE *)v23; *(_DWORD *)(v14 + a2[3571] + 4) = (signed int)*(unsigned __int8 *)v23 >> 4; v17 = a2[3571]; v18 = v27; v23 = (int)(v16 + 1); *(_DWORD *)(v14 + v17 + 8) = *v16 & 0xF; v10 = v16 + 2; v19 = a2[3571]; v23 = (int)(v16 + 2); *(_DWORD *)(v14 + v19 + 12) = (unsigned __int8)v16[1]; v13 = a2[3571]; if ( v18 < *(_DWORD *)(v14 + v13 + 4) ) v27 = *(_DWORD *)(v14 + v13 + 4); if ( v30 < *(_DWORD *)(v14 + v13 + 8) ) v30 = *(_DWORD *)(v14 + v13 + 8); v14 += 16; ++v15; } while ( v15 < a2[3568] ); v12 = v27; v2 = v28; v7 = a2[3563]; v9 = a2[3562]; } v20 = (v9 + 8 * v12 - 1) / (8 * v12); v21 = v30; v22 = 2 * v30; a2[3569] = v20; a2[3570] = v20 * ((v7 + 8 * v21 - 1) / (4 * v22)); } else { v2 = -16; } } else { v2 = -29; } } } else { v2 = -21; } } if ( v25 && v24 ) operator delete(v24); return v2; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); //----- (007BA250) -------------------------------------------------------- int __cdecl sub_7BA250(int a1) { int v1; // ebp signed int v2; // edx _BYTE *v4; // edx int v5; // [esp+18h] [ebp-1Ch] void *v6; // [esp+1Ch] [ebp-18h] int v7; // [esp+20h] [ebp-14h] int v8; // [esp+24h] [ebp-10h] v5 = 0; v6 = 0; v7 = 0; v1 = sub_7B9D70(a1 + 14312, &v8); if ( !v1 ) { if ( v8 >= 2 ) { v2 = v8 - 2; v8 = v2; if ( v2 >= 12 ) { v1 = sub_7B9B90(a1 + 14312, v2, (int)&v6, (int)&v5, (int)&v7); if ( !v1 ) { v4 = (_BYTE *)v5++; if ( *v4 == 65 ) { v5 = (int)(v4 + 2); if ( v4[1] == 100 ) { v5 = (int)(v4 + 3); if ( v4[2] == 111 ) { v5 = (int)(v4 + 4); if ( v4[3] == 98 ) { v5 = (int)(v4 + 5); if ( v4[4] == 101 ) { v5 = (int)(v4 + 7); *(_WORD *)(a1 + 19952) = (unsigned __int8)v4[6] + ((unsigned __int8)v4[5] << 8); v5 = (int)(v4 + 9); *(_WORD *)(a1 + 19954) = (unsigned __int8)v4[8] + ((unsigned __int8)v4[7] << 8); v5 = (int)(v4 + 11); *(_WORD *)(a1 + 19956) = (unsigned __int8)v4[10] + ((unsigned __int8)v4[9] << 8); v5 = (int)(v4 + 12); *(_DWORD *)(a1 + 18476) = (unsigned __int8)v4[11]; *(_DWORD *)(a1 + 18472) = 1; } } } } } } } } else { v1 = -21; } } if ( v7 && v6 ) operator delete(v6); return v1; } //----- (007BA3C0) -------------------------------------------------------- signed int __cdecl sub_7BA3C0(int a1) { signed int v1; // eax int v3; // ecx unsigned __int8 *v4; // edx int v5; // esi signed int v6; // ecx int v7; // edi int v8; // eax int v9; // edx int v10; // ebx int v11; // ecx int i; // esi int v13; // edi int v14; // edi int v15; // esi char v16; // al int v17; // esi int v18; // ebx _BYTE *v19; // eax _BYTE *v20; // ecx _BYTE *v21; // ebx _BYTE *v22; // ebx _BYTE *v23; // edi _BYTE *v24; // ebp int v25; // ebx int v26; // edx int v27; // edi int v28; // esi unsigned __int8 *v29; // ecx int v30; // edi char v31; // bl int v32; // ecx int v33; // edi int v34; // [esp+18h] [ebp-34h] void *v35; // [esp+1Ch] [ebp-30h] int v36; // [esp+20h] [ebp-2Ch] int v37; // [esp+24h] [ebp-28h] int v38; // [esp+28h] [ebp-24h] int v39; // [esp+2Ch] [ebp-20h] int v40; // [esp+30h] [ebp-1Ch] char v41; // [esp+34h] [ebp-18h] char v42; // [esp+38h] [ebp-14h] v34 = 0; v35 = 0; v36 = 0; if ( sub_7B9D70(a1 + 14312, &v37) ) goto LABEL_5; if ( v37 < 2 ) goto LABEL_5; v1 = v37 - 2; v37 = v1; if ( v1 < 14 || v1 > 196622 ) goto LABEL_5; if ( !sub_7B9B90(a1 + 14312, v1, (int)&v35, (int)&v34, (int)&v36) ) { if ( *(_DWORD *)(a1 + 14300) ) { v3 = v34; if ( *(_BYTE *)v34 != 74 || *(_BYTE *)(v34 + 1) != 70 || *(_BYTE *)(v34 + 2) != 88 || *(_BYTE *)(v34 + 3) != 88 || *(_BYTE *)(v34 + 4) ) { if ( *(_BYTE *)v34 == 74 && *(_BYTE *)(v34 + 1) == 70 && *(_BYTE *)(v34 + 2) == 73 && *(_BYTE *)(v34 + 3) == 70 && !*(_BYTE *)(v34 + 4) ) { *(_DWORD *)(a1 + 19960) = 1; v34 = v3 + 7; *(_WORD *)(a1 + 19964) = _byteswap_ushort(*(_WORD *)(v3 + 5)); v34 = v3 + 8; *(_BYTE *)(a1 + 19966) = *(_BYTE *)(v3 + 7); v34 = v3 + 10; v4 = (unsigned __int8 *)(v3 + 12); *(_WORD *)(a1 + 19968) = _byteswap_ushort(*(_WORD *)(v3 + 8)); v34 = v3 + 12; v5 = *(unsigned __int8 *)(v3 + 11) | (*(unsigned __int8 *)(v3 + 10) << 8); v6 = 14; *(_WORD *)(a1 + 19970) = v5; LABEL_22: v34 = (int)(v4 + 1); v7 = *v4; v8 = (int)(v4 + 2); v34 = (int)(v4 + 2); v9 = v4[1]; if ( v7 && v9 ) { if ( *(_DWORD *)a1 == 20 || *(_DWORD *)a1 == 21 ) { v10 = 3 * v7; if ( 3 * v7 * v9 + v6 <= v37 ) { *(_DWORD *)(a1 + 100) = v9; v11 = *(_DWORD *)(a1 + 52); *(_DWORD *)(a1 + 96) = v7; if ( v11 == 1 ) { v14 = 0; if ( v9 > 0 ) { v15 = v9; do { dword_BA2968(*(_DWORD *)(a1 + 32) + *(_DWORD *)(a1 + 60) * v14, v8, v10); v8 = v10 + v34; ++v14; v34 += v10; } while ( v14 < v15 ); } } else { for ( i = 0; i < v9; ++i ) { v13 = 0; if ( v10 > 0 ) { v38 = v9; do { *(_BYTE *)(i * *(_DWORD *)(a1 + 60) + v13 + *(_DWORD *)(a1 + 32)) = *(_BYTE *)(v8 + 2); *(_BYTE *)(i * *(_DWORD *)(a1 + 60) + v13 + *(_DWORD *)(a1 + 32) + 1) = *(_BYTE *)(v34 + 1); *(_BYTE *)(i * *(_DWORD *)(a1 + 60) + v13 + *(_DWORD *)(a1 + 32) + 2) = *(_BYTE *)v34; v8 = v34 + 3; v34 += 3; v13 += 3; } while ( v13 < v10 ); v9 = v38; } } } } else { *(_DWORD *)(a1 + 96) = v7; *(_DWORD *)(a1 + 100) = v9; } } else { *(_DWORD *)(a1 + 96) = v7; *(_DWORD *)(a1 + 100) = v9; } } goto LABEL_5; } } else { v34 += 5; v16 = *(_BYTE *)(v3 + 5); if ( v16 != 16 ) { if ( v16 == 17 ) { v34 = v3 + 7; v17 = *(unsigned __int8 *)(v3 + 6); v34 = v3 + 8; v18 = *(unsigned __int8 *)(v3 + 7); if ( (*(_DWORD *)a1 == 20 || *(_DWORD *)a1 == 21) && v18 * v17 + 776 <= v37 ) { *(_DWORD *)(a1 + 100) = v18; *(_DWORD *)(a1 + 96) = v17; v19 = operator new(0x300u); if ( v19 ) { v20 = v19; v38 = v18; v39 = v17; do { v21 = (_BYTE *)v34++; *v20 = *v21; v22 = (_BYTE *)v34++; v20[1] = *v22; v23 = (_BYTE *)v34++; v20[2] = *v23; v24 = (_BYTE *)v34++; v20[3] = *v24; v20 += 4; } while ( (signed int)(v19 + 768) > (signed int)v20 ); v25 = v38; v26 = 0; if ( v38 > 0 ) { v27 = 3 * v39; do { v28 = 0; if ( v27 > 0 ) { v29 = (unsigned __int8 *)v34; v40 = v26; v39 = v27; v38 = v25; do { v30 = 3 * *v29; v41 = v19[v30]; v31 = v19[v30 + 2]; v42 = v19[v30 + 1]; if ( *(_DWORD *)(a1 + 52) == 1 ) { v33 = v40; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v40 * *(_DWORD *)(a1 + 60)) = v41; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v33 * *(_DWORD *)(a1 + 60) + 1) = v42; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v33 * *(_DWORD *)(a1 + 60) + 2) = v31; } else { v32 = v40; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v40 * *(_DWORD *)(a1 + 60)) = v31; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v32 * *(_DWORD *)(a1 + 60) + 1) = v42; *(_BYTE *)(v28 + *(_DWORD *)(a1 + 32) + v32 * *(_DWORD *)(a1 + 60) + 2) = v41; } v28 += 3; v29 = (unsigned __int8 *)(v34++ + 1); } while ( v28 < v39 ); v26 = v40; v27 = v39; v25 = v38; } ++v26; } while ( v26 < v25 ); } operator delete(v19); } } goto LABEL_5; } if ( v16 == 19 ) { v4 = (unsigned __int8 *)(v3 + 6); v6 = 8; goto LABEL_22; } } } } LABEL_5: if ( v36 ) { if ( v35 ) operator delete(v35); } return 0; } if ( v36 && v35 ) operator delete(v35); return -21; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); //----- (007BA860) -------------------------------------------------------- int __cdecl sub_7BA860(int a1) { int v2; // edx __int16 v3; // si int v4; // ebx signed int v5; // eax _BYTE *v6; // edi int v7; // eax _BYTE *v8; // edi int v9; // [esp+0h] [ebp-40h] int v10; // [esp+4h] [ebp-3Ch] int v11; // [esp+8h] [ebp-38h] void *v12; // [esp+Ch] [ebp-34h] int v13; // [esp+10h] [ebp-30h] int v14; // [esp+14h] [ebp-2Ch] CPPEH_RECORD ms_exc; // [esp+28h] [ebp-18h] ms_exc.old_esp = (DWORD)&v9; v9 = 0; v10 = 0; v11 = 0; v12 = 0; v13 = 0; ms_exc.registration.TryLevel = 0; v10 = sub_7B9D70(a1 + 14312, &v9); if ( !v10 ) { if ( v9 >= 2 ) { v9 -= 2; v10 = sub_7B9B90(a1 + 14312, v9, (int)&v12, (int)&v11, (int)&v13); if ( v10 ) { v10 = -21; } else if ( *(_DWORD *)(a1 + 14300) ) { v2 = *(_DWORD *)(a1 + 19972); if ( v2 ) { v3 = v9; v4 = *(unsigned __int16 *)(a1 + 19976); if ( v9 <= v4 ) { v7 = 0; v14 = 0; if ( v9 > 0 ) { while ( 1 ) { v8 = (_BYTE *)v11++; *(_BYTE *)(v7++ + v2) = *v8; v14 = v7; v3 = v9; if ( v7 >= v9 ) break; v2 = *(_DWORD *)(a1 + 19972); } } *(_WORD *)(a1 + 19976) = v3; } else { v5 = 0; v14 = 0; if ( v4 > 0 ) { while ( 1 ) { v6 = (_BYTE *)v11++; *(_BYTE *)(v5++ + v2) = *v6; v14 = v5; if ( v5 >= *(unsigned __int16 *)(a1 + 19976) ) break; v2 = *(_DWORD *)(a1 + 19972); } v3 = v9; } *(_WORD *)(a1 + 19976) = v3; v10 = -30; } ms_exc.registration.TryLevel = -1; } } } else { v10 = -21; } } if ( v13 && v12 ) { operator delete(v12); v12 = 0; } return v10; } //----- (007BAA20) -------------------------------------------------------- int __cdecl sub_7BAA20(int a1, int a2, int a3) { int v3; // edi signed int v4; // eax int v6; // ebp int v7; // eax signed int v8; // esi int v9; // edi int v10; // edx _WORD **v11; // ecx signed int v12; // ebp signed int v13; // ebp int v14; // esi int v15; // edx int v16; // esi int v17; // ebp int v18; // eax int v19; // esi int v20; // ebp int v21; // eax signed int v22; // eax signed int v23; // eax signed int v24; // eax int v25; // [esp+18h] [ebp-3Ch] void *v26; // [esp+1Ch] [ebp-38h] int v27; // [esp+20h] [ebp-34h] int v28; // [esp+24h] [ebp-30h] int v29; // [esp+28h] [ebp-2Ch] int v30; // [esp+2Ch] [ebp-28h] _WORD **v31; // [esp+30h] [ebp-24h] int v32; // [esp+34h] [ebp-20h] int v33; // [esp+38h] [ebp-1Ch] int v34; // [esp+3Ch] [ebp-18h] int v35; // [esp+40h] [ebp-14h] v25 = 0; v26 = 0; v27 = 0; v3 = sub_7B9D70(a2, &v28); if ( !v3 ) { if ( v28 >= 2 ) { v4 = v28 - 2; v28 = v4; if ( v4 <= 516 ) { v3 = sub_7B9B90(a2, v4, (int)&v26, (int)&v25, (int)&v27); if ( !v3 ) { v6 = 0; v35 = 0; while ( v6 < v28 ) { v7 = *(_BYTE *)v25 & 0xF; if ( v7 > 4 ) { v3 = -7; goto LABEL_6; } v8 = (signed int)*(unsigned __int8 *)v25 >> 4; v9 = 180 * v7; *(_DWORD *)(a1 + 180 * v7 + 148) = v8; v10 = v25++ + 1; if ( *(_DWORD *)(a1 + 132) <= v7 ) *(_DWORD *)(a1 + 132) = v7 + 1; v33 = v10; if ( v8 ) { v34 = 0; v11 = (_WORD **)(a1 + v9 + 156); v30 = v8; v32 = v6; v12 = 0; while ( 1 ) { *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v12) = (*(_WORD *)(v10 + 2 * v12) << 8) | ((*(_WORD *)(v10 + 2 * v12) & 0xFF00) >> 8); *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v12 + 2) = (*(_WORD *)(v25 + 2 * v12 + 2) << 8) | ((*(_WORD *)(v25 + 2 * v12 + 2) & 0xFF00) >> 8); v12 += 2; if ( v12 >= 64 ) break; v10 = v25; } v14 = v30; v6 = v32 + 129; v25 += 128; } else { v34 = 0; v11 = (_WORD **)(a1 + v9 + 156); v30 = 0; v32 = v6; v13 = 0; while ( 1 ) { *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v13) = *(unsigned __int8 *)(v10 + v13); *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v13 + 2) = *(unsigned __int8 *)(v13 + v25 + 1); *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v13 + 4) = *(unsigned __int8 *)(v13 + v25 + 2); *(_WORD *)(*(_DWORD *)(v9 + a1 + 156) + 2 * v13 + 6) = *(unsigned __int8 *)(v13 + v25 + 3); v13 += 4; if ( v13 >= 64 ) break; v10 = v25; } v14 = v30; v6 = v32 + 65; v25 += 64; } v15 = *(_DWORD *)(a1 + 8 * v7 + 14108); if ( v15 ) { *(_BYTE *)(a1 + 8 * v7 + 14112) = v7; if ( v14 ) { v34 = 0; v31 = v11; v16 = v33; v29 = v7; v32 = v6; while ( 1 ) { v17 = v34; *(_BYTE *)(v15 + v34) = *(_BYTE *)(v16 + v34); v18 = v29; *(_BYTE *)(v17 + *(_DWORD *)(a1 + 8 * v29 + 14108) + 1) = *(_BYTE *)(v16 + v17 + 1); *(_BYTE *)(v17 + *(_DWORD *)(a1 + 8 * v18 + 14108) + 2) = *(_BYTE *)(v16 + v17 + 2); *(_BYTE *)(v17 + *(_DWORD *)(a1 + 8 * v18 + 14108) + 3) = *(_BYTE *)(v16 + v17 + 3); v34 = v17 + 4; if ( (unsigned int)(v17 + 4) >= 0x80 ) break; v15 = *(_DWORD *)(a1 + 8 * v29 + 14108); } v11 = v31; v6 = v32; } else { v30 = 0; v31 = v11; v19 = v33; v29 = v7; v32 = v6; while ( 1 ) { v20 = v30; *(_BYTE *)(v15 + v30) = *(_BYTE *)(v19 + v30); v21 = v29; *(_BYTE *)(v20 + *(_DWORD *)(a1 + 8 * v29 + 14108) + 1) = *(_BYTE *)(v19 + v20 + 1); *(_BYTE *)(v20 + *(_DWORD *)(a1 + 8 * v21 + 14108) + 2) = *(_BYTE *)(v19 + v20 + 2); *(_BYTE *)(v20 + *(_DWORD *)(a1 + 8 * v21 + 14108) + 3) = *(_BYTE *)(v19 + v20 + 3); v30 = v20 + 4; if ( v20 + 4 >= 64 ) break; v15 = *(_DWORD *)(a1 + 8 * v21 + 14108); } v11 = v31; v6 = v32; } } if ( a3 ) { if ( a3 == 1 ) { sub_799B50(*v11); v23 = *(_DWORD *)(a1 + 128); if ( v23 < 4 ) *(_DWORD *)(a1 + 128) = v23 + 1; } else { sub_795CE0(*v11); v24 = *(_DWORD *)(a1 + 128); if ( v24 < 4 ) *(_DWORD *)(a1 + 128) = v24 + 1; } } else { sub_795CE0(*v11); v22 = *(_DWORD *)(a1 + 128); if ( v22 < 4 ) *(_DWORD *)(a1 + 128) = v22 + 1; } } v3 = v35; } } else { v3 = -21; } } else { v3 = -21; } } LABEL_6: if ( v27 && v26 ) operator delete(v26); return v3; } //----- (007BAE50) -------------------------------------------------------- int __cdecl sub_7BAE50(_DWORD *a1, int a2) { int v2; // ebp signed int v3; // eax unsigned __int8 *v5; // ecx signed int v6; // edx signed int v7; // eax int v8; // ebx int v9; // ebp _BYTE *v10; // ebx int v11; // ecx int v12; // ebx int v13; // esi int v14; // ebx int v15; // esi int v16; // ebx int v17; // esi int v18; // ebx int v19; // esi int v20; // ebx int v21; // esi int v22; // ebx int v23; // edi int v24; // esi int v25; // ebx int v26; // ebp int v27; // eax int v28; // edx int v29; // ebx _DWORD *v30; // ebp int v31; // esi signed int v32; // edx signed int v33; // edx unsigned __int8 *v34; // ecx int v35; // ebx int v36; // esi int v37; // edx int v38; // ebx int v39; // esi int v40; // ebx int v41; // esi int v42; // ebx int v43; // esi int v44; // ebx int v45; // esi int v46; // ebx int v47; // esi int v48; // ebx int v49; // esi int v50; // ebx int v51; // edx int v52; // [esp+18h] [ebp-3Ch] void *v53; // [esp+1Ch] [ebp-38h] int v54; // [esp+20h] [ebp-34h] int v55; // [esp+24h] [ebp-30h] int v56; // [esp+28h] [ebp-2Ch] int v57; // [esp+2Ch] [ebp-28h] int v58; // [esp+30h] [ebp-24h] int v59; // [esp+34h] [ebp-20h] int v60; // [esp+38h] [ebp-1Ch] _DWORD *v61; // [esp+3Ch] [ebp-18h] int v62; // [esp+44h] [ebp-10h] v52 = 0; v53 = 0; v54 = 0; v2 = sub_7B9D70(a2, &v55); if ( !v2 ) { if ( v55 >= 2 ) { v3 = v55 - 2; v55 = v3; if ( v3 <= 1091 ) { v2 = sub_7B9B90(a2, v3, (int)&v53, (int)&v52, (int)&v54); if ( !v2 && v55 > 0 ) { v5 = (unsigned __int8 *)v52; do { v6 = (*v5 & 0xF0) >> 4; v7 = *v5 & 0xF; if ( v6 < 0 || v6 > 1 ) { v2 = -6; break; } if ( v7 > 3 ) { v2 = -6; break; } if ( v7 >= a1[36] ) a1[36] = v7 + 1; if ( a1[3 * v7 + 3535] ) { if ( a1[3 * v7 + 3536] ) { v8 = 3 * (v6 + 2 * v7); v56 = v8 * 4; v9 = (int)&a1[v8]; *(_BYTE *)(v9 + 14148) = v6; v10 = (_BYTE *)a1[v8 + 3535]; *(_BYTE *)(v9 + 14149) = v7; *v10 = *(_BYTE *)(v52 + 1); v11 = *(unsigned __int8 *)(v52 + 1); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 1) = *(_BYTE *)(v52 + 2); v12 = v11 + *(unsigned __int8 *)(v52 + 2); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 2) = *(_BYTE *)(v52 + 3); v13 = v12 + *(unsigned __int8 *)(v52 + 3); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 3) = *(_BYTE *)(v52 + 4); v14 = v13 + *(unsigned __int8 *)(v52 + 4); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 4) = *(_BYTE *)(v52 + 5); v15 = v14 + *(unsigned __int8 *)(v52 + 5); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 5) = *(_BYTE *)(v52 + 6); v16 = v15 + *(unsigned __int8 *)(v52 + 6); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 6) = *(_BYTE *)(v52 + 7); v17 = v16 + *(unsigned __int8 *)(v52 + 7); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 7) = *(_BYTE *)(v52 + 8); v18 = v17 + *(unsigned __int8 *)(v52 + 8); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 8) = *(_BYTE *)(v52 + 9); v19 = v18 + *(unsigned __int8 *)(v52 + 9); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 9) = *(_BYTE *)(v52 + 10); v20 = v19 + *(unsigned __int8 *)(v52 + 10); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 10) = *(_BYTE *)(v52 + 11); v21 = v20 + *(unsigned __int8 *)(v52 + 11); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 11) = *(_BYTE *)(v52 + 12); v22 = v21 + *(unsigned __int8 *)(v52 + 12); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 12) = *(_BYTE *)(v52 + 13); v23 = v22 + *(unsigned __int8 *)(v52 + 13); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 13) = *(_BYTE *)(v52 + 14); v24 = v23 + *(unsigned __int8 *)(v52 + 14); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 14) = *(_BYTE *)(v52 + 15); v25 = v24 + *(unsigned __int8 *)(v52 + 15); *(_BYTE *)(*(_DWORD *)(v9 + 14140) + 15) = *(_BYTE *)(v52 + 16); v5 = (unsigned __int8 *)v52; v26 = *(unsigned __int8 *)(v52 + 16); v60 = v26 + v25; v57 = 0; if ( v26 + v25 > 0 ) { if ( v26 + v25 < 6 ) { v61 = (_DWORD *)((char *)a1 + v56 + 14144); } else { v61 = (_DWORD *)((char *)a1 + v56 + 14144); v62 = v26 + v25 - 6; v59 = v7; v27 = v57; v58 = v6; v28 = v56; while ( 1 ) { *(_BYTE *)(v27 + *(_DWORD *)((char *)a1 + v28 + 14144)) = v5[v27 + 17]; *(_BYTE *)(v27 + *(_DWORD *)((char *)a1 + v28 + 14144) + 1) = *(_BYTE *)(v27 + v52 + 18); *(_BYTE *)(v27 + *(_DWORD *)((char *)a1 + v28 + 14144) + 2) = *(_BYTE *)(v27 + v52 + 19); *(_BYTE *)(v27 + *(_DWORD *)((char *)a1 + v28 + 14144) + 3) = *(_BYTE *)(v27 + v52 + 20); *(_BYTE *)(v27 + *(_DWORD *)((char *)a1 + v28 + 14144) + 4) = *(_BYTE *)(v27 + v52 + 21); v27 += 5; if ( v27 > v62 ) break; v5 = (unsigned __int8 *)v52; } v57 = v27; v7 = v59; v6 = v58; v5 = (unsigned __int8 *)v52; } v29 = v57; v30 = v61; v31 = v60; while ( 1 ) { *(_BYTE *)(v29 + *v30) = v5[v29 + 17]; if ( ++v29 >= v31 ) break; v5 = (unsigned __int8 *)v52; } v5 = (unsigned __int8 *)v52; } } } if ( v6 ) { v2 = sub_792BA0((int)(v5 + 1), (int)(v5 + 17), v6, v7, (int)&a1[412 * v7 + 217]); if ( v2 ) { v2 = -6; break; } v32 = a1[34]; if ( v32 < 4 ) a1[34] = v32 + 1; } else { v2 = sub_792BA0((int)(v5 + 1), (int)(v5 + 17), 0, v7, (int)&a1[412 * v7 + 1865]); if ( v2 ) { v2 = -6; break; } v33 = a1[35]; if ( v33 < 4 ) a1[35] = v33 + 1; } v34 = (unsigned __int8 *)v52; v35 = v52 + 3; v52 += 2; v36 = v34[1]; v52 = v35; v37 = v36 + v34[2]; v52 = (int)(v34 + 4); v38 = v37 + v34[3]; v52 = (int)(v34 + 5); v39 = v38 + v34[4]; v52 = (int)(v34 + 6); v40 = v39 + v34[5]; v52 = (int)(v34 + 7); v41 = v40 + v34[6]; v52 = (int)(v34 + 8); v42 = v41 + v34[7]; v52 = (int)(v34 + 9); v43 = v42 + v34[8]; v52 = (int)(v34 + 10); v44 = v43 + v34[9]; v52 = (int)(v34 + 11); v45 = v44 + v34[10]; v52 = (int)(v34 + 12); v46 = v45 + v34[11]; v52 = (int)(v34 + 13); v47 = v46 + v34[12]; v52 = (int)(v34 + 14); v48 = v47 + v34[13]; v52 = (int)(v34 + 15); v49 = v48 + v34[14]; v52 = (int)(v34 + 16); v50 = v49 + v34[15]; v52 = (int)(v34 + 17); v51 = v50 + v34[16]; v5 = &v34[v51 + 17]; v52 = (int)v5; v55 = v55 - v51 - 17; } while ( v55 > 0 ); } } else { v2 = -21; } } else { v2 = -21; } } if ( v54 && v53 ) operator delete(v53); return v2; } //----- (007BB400) -------------------------------------------------------- int __cdecl sub_7BB400(int a1, int a2, int a3, _DWORD *a4) { unsigned __int8 *v5; // edx _DWORD *v6; // edx unsigned __int8 *v7; // edi int v8; // ebx signed int v9; // eax int v10; // ecx int v11; // ecx int v12; // eax int v13; // edi int v14; // eax signed int v15; // ebx int v16; // edi char v17; // cl int v18; // esi int v19; // ebx unsigned __int8 *v20; // eax int v21; // [esp+0h] [ebp-70h] void *v22; // [esp+4h] [ebp-6Ch] int v23; // [esp+8h] [ebp-68h] int v24; // [esp+Ch] [ebp-64h] _DWORD *v25; // [esp+10h] [ebp-60h] _DWORD *v26; // [esp+14h] [ebp-5Ch] int v27; // [esp+18h] [ebp-58h] int v28; // [esp+1Ch] [ebp-54h] _DWORD *v29; // [esp+20h] [ebp-50h] int v30; // [esp+24h] [ebp-4Ch] int v31; // [esp+28h] [ebp-48h] int v32; // [esp+2Ch] [ebp-44h] int v33; // [esp+30h] [ebp-40h] int v34; // [esp+40h] [ebp-30h] _DWORD *v35; // [esp+44h] [ebp-2Ch] int v36; // [esp+48h] [ebp-28h] int v37; // [esp+4Ch] [ebp-24h] int v38; // [esp+50h] [ebp-20h] int v39; // [esp+54h] [ebp-1Ch] CPPEH_RECORD ms_exc; // [esp+58h] [ebp-18h] ms_exc.old_esp = (DWORD)&v21; v21 = 0; v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = *(_DWORD **)(a2 + 8); ms_exc.registration.TryLevel = 0; v24 = sub_7B9D70(a2, &v27); if ( !v24 ) { if ( v27 >= 2 ) { *v26 = v27 + 2; v27 -= 2; v24 = sub_7B9B90(a2, v27, (int)&v22, (int)&v21, (int)&v23); if ( !v24 ) { v5 = (unsigned __int8 *)v21++; *a4 = *v5; a4[13] = operator new(24 * *a4); v35 = a4; v6 = (_DWORD *)a4[13]; if ( v6 ) { v25 = (_DWORD *)a4[13]; v34 = 0; v28 = 0; if ( *v35 <= 0 ) { LABEL_23: v20 = (unsigned __int8 *)v21++; v35[2] = *v20; v21 = (int)(v20 + 2); a4[3] = v20[1]; a4[4] = (signed int)v20[2] >> 4; v21 = (int)(v20 + 3); a4[5] = v20[2] & 0xF; ms_exc.registration.TryLevel = -1; } else { v29 = v6; v39 = a3; v36 = a1; while ( 1 ) { v7 = (unsigned __int8 *)v21++; v8 = *v7; v30 = *v7; v9 = (signed int)v7[1] >> 4; v38 = v9; v31 = v9; v21 = (int)(v7 + 2); v10 = v7[1] & 0xF; v37 = v10; v32 = v10; if ( v9 < 0 || v9 > 4 || v10 > 4 ) break; v11 = 0; v33 = 0; v12 = *(_DWORD *)(v39 + 28); if ( v12 > 0 ) { v13 = *(_DWORD *)(v39 + 40); do { if ( v8 == *(_DWORD *)(16 * v11 + v13) ) break; v33 = ++v11; } while ( v11 < v12 ); } if ( v11 >= v12 || (v14 = 16 * v11, v15 = *(_DWORD *)(16 * v11 + *(_DWORD *)(v39 + 40) + 12), v15 < 0) || v15 > 4 ) { v24 = -21; operator delete((void *)v35[13]); a4[13] = 0; goto LABEL_4; } *v6 = v11; v16 = v39; v6[1] = *(_DWORD *)(v14 + *(_DWORD *)(v39 + 40) + 4); v6[2] = *(_DWORD *)(v14 + *(_DWORD *)(v16 + 40) + 8); v17 = v38; v18 = v36; v6[3] = 1648 * v38 + v36 + 7460; v6[4] = 1648 * v37 + v18 + 868; v6[5] = 180 * *(_DWORD *)(v14 + *(_DWORD *)(v16 + 40) + 12) + v18 + 148; v19 = v34; *(_BYTE *)(v34 + v18 + 14240) = v17; *(_BYTE *)(v18 + v19 + 14236) = v37; v34 = v19 + 1; v28 = v19 + 1; v6 += 6; v25 = v6; v35 = a4; if ( v19 + 1 >= *a4 ) goto LABEL_23; } v24 = -21; operator delete((void *)v35[13]); a4[13] = 0; } } else { v24 = -5; } } } else { v24 = -21; } } LABEL_4: if ( v23 && v22 ) { operator delete(v22); v22 = 0; } return v24; } //----- (007BB760) -------------------------------------------------------- int __cdecl sub_7BB760(int *a1, signed int a2, signed int *a3, int a4, int a5, int a6, int a7, int a8, int a9, signed int a10, char a11) { int v11; // ecx int v12; // edx signed int v13; // ebp signed int v14; // ebx int v15; // eax int v16; // ebp int v17; // esi int *v18; // edi int v19; // eax int v20; // ebx int v21; // edx int v22; // esi int v23; // ebx int v24; // eax int v25; // esi int *v26; // edi int v27; // ebx int v28; // eax int v29; // ebp int v30; // edx int v31; // edi int v32; // esi int v33; // esi int v34; // eax int *v35; // edi int v36; // ebx int v37; // eax int v38; // ebp int v39; // edx int v40; // esi int v41; // ebx int v42; // edi int v43; // eax int v44; // ecx int v45; // ebp int v46; // esi int v47; // ebx int v48; // edx int v49; // edi int v50; // ecx int v51; // ebp signed int v52; // ebx int v53; // edi int v55; // edx int v56; // edx int v57; // edx int v58; // edi int v59; // esi int v60; // edi int *v61; // edi int v62; // eax int v63; // eax int v64; // edx int v65; // ecx int v66; // ebx int v67; // esi int v68; // edi int v69; // edx bool v70; // zf bool v71; // sf int v72; // eax int v73; // ebp _WORD *v74; // eax int v75; // edx int v76; // ecx int v77; // ebx int v78; // edi int v79; // esi int v80; // eax _WORD *v81; // esi int v82; // eax __int16 *v83; // ebp __int16 v84; // bx _WORD *v85; // esi int v86; // eax __int16 *v87; // ebx signed int v88; // ecx __int16 v89; // bp __int16 *v90; // esi int v91; // eax _WORD *v92; // ebx signed int v93; // ebp __int16 v94; // cx _WORD *v95; // esi int v96; // eax __int16 *v97; // ecx signed int v98; // ebx __int16 v99; // bp _WORD *v100; // esi int v101; // eax __int16 *v102; // ebp __int16 v103; // bx __int16 *v104; // eax _WORD *v105; // esi int v106; // ebx __int16 v107; // bp _WORD *v108; // esi int v109; // eax __int16 *v110; // ebx signed int v111; // ebp __int16 v112; // cx _WORD *v113; // eax int v114; // esi __int16 *v115; // ebp __int16 v116; // bx __int16 *v117; // esi _WORD *v118; // eax int v119; // ebx __int16 v120; // bp int v121; // esi __int16 *v122; // ebx _WORD *v123; // eax __int16 v124; // bp signed int v125; // esi int v126; // eax signed int v127; // ebp __int16 v128; // dx signed int v129; // esi int v130; // ecx int v131; // edx __int16 v132; // bp signed int v133; // ebp _WORD *v134; // ebx signed int v135; // eax __int16 v136; // si int v137; // ebp int v138; // edi int v139; // edx int v140; // ecx int v141; // ebx int v142; // eax _WORD *v143; // eax int v144; // esi __int16 *v145; // ebp __int16 v146; // bx _WORD *v147; // esi int v148; // eax __int16 *v149; // ebx signed int v150; // ebp __int16 v151; // cx int v152; // esi __int16 *v153; // ebx _WORD *v154; // eax __int16 v155; // bp signed int v156; // edx int v157; // eax signed int v158; // ecx __int16 v159; // si signed int v160; // esi int v161; // ebx signed int v162; // ebp __int16 v163; // dx int v164; // [esp+24h] [ebp-50h] _WORD *v165; // [esp+24h] [ebp-50h] int v166; // [esp+24h] [ebp-50h] _WORD *v167; // [esp+24h] [ebp-50h] int v168; // [esp+24h] [ebp-50h] int v169; // [esp+28h] [ebp-4Ch] int v170; // [esp+2Ch] [ebp-48h] int v171; // [esp+2Ch] [ebp-48h] __int16 *v172; // [esp+2Ch] [ebp-48h] int v173; // [esp+2Ch] [ebp-48h] int v174; // [esp+30h] [ebp-44h] int v175; // [esp+30h] [ebp-44h] int v176; // [esp+30h] [ebp-44h] int v177; // [esp+30h] [ebp-44h] int v178; // [esp+30h] [ebp-44h] int v179; // [esp+30h] [ebp-44h] int v180; // [esp+34h] [ebp-40h] int v181; // [esp+34h] [ebp-40h] int v182; // [esp+34h] [ebp-40h] int v183; // [esp+34h] [ebp-40h] int v184; // [esp+34h] [ebp-40h] int v185; // [esp+34h] [ebp-40h] int v186; // [esp+34h] [ebp-40h] int v187; // [esp+34h] [ebp-40h] signed int v188; // [esp+38h] [ebp-3Ch] signed int v189; // [esp+38h] [ebp-3Ch] signed int v190; // [esp+38h] [ebp-3Ch] signed int v191; // [esp+38h] [ebp-3Ch] signed int v192; // [esp+38h] [ebp-3Ch] int v193; // [esp+38h] [ebp-3Ch] signed int v194; // [esp+38h] [ebp-3Ch] signed int v195; // [esp+38h] [ebp-3Ch] signed int v196; // [esp+38h] [ebp-3Ch] signed int v197; // [esp+38h] [ebp-3Ch] signed int v198; // [esp+38h] [ebp-3Ch] signed int v199; // [esp+38h] [ebp-3Ch] signed int v200; // [esp+38h] [ebp-3Ch] signed int v201; // [esp+38h] [ebp-3Ch] signed int v202; // [esp+38h] [ebp-3Ch] signed int v203; // [esp+38h] [ebp-3Ch] signed int v204; // [esp+38h] [ebp-3Ch] signed int v205; // [esp+38h] [ebp-3Ch] signed int v206; // [esp+38h] [ebp-3Ch] signed int v207; // [esp+38h] [ebp-3Ch] signed int v208; // [esp+38h] [ebp-3Ch] signed int v209; // [esp+38h] [ebp-3Ch] signed int v210; // [esp+38h] [ebp-3Ch] int v211; // [esp+3Ch] [ebp-38h] int v212; // [esp+3Ch] [ebp-38h] int v213; // [esp+3Ch] [ebp-38h] int v214; // [esp+40h] [ebp-34h] int v215; // [esp+44h] [ebp-30h] int v216; // [esp+48h] [ebp-2Ch] int v217; // [esp+48h] [ebp-2Ch] int v218; // [esp+4Ch] [ebp-28h] signed int v219; // [esp+4Ch] [ebp-28h] int v220; // [esp+50h] [ebp-24h] int v221; // [esp+54h] [ebp-20h] int v222; // [esp+58h] [ebp-1Ch] int v223; // [esp+5Ch] [ebp-18h] int v224; // [esp+60h] [ebp-14h] v11 = a4; v12 = a5; v218 = a7; v13 = a10; v220 = *(_DWORD *)(a2 + 8); switch ( a10 ) { case 1: v14 = 8; break; case 2: v14 = 4; break; case 4: v14 = 2; break; default: v14 = 1; break; } v221 = a6 << 6; if ( a4 == a8 || a5 == a9 ) goto LABEL_253; v216 = a1[4984] ? a1[3568] : *a3; switch ( a10 ) { case 1: v58 = 0; if ( a6 > 0 ) { v59 = a7; do { (*(void (__fastcall **)(int, int, int))(v220 + 72))(v11, v12, v59); v59 += 128; ++v58; } while ( v58 < a6 ); v12 = a5; v11 = a4; v13 = 1; } break; case 2: if ( a11 ) { if ( v216 > 0 ) { v33 = 0; v34 = a1[4984]; v35 = a1; v191 = v14; v36 = 0; while ( 1 ) { v37 = v34 ? *(_DWORD *)(16 * v33 + v35[3571] + 8) * *(_DWORD *)(16 * v33 + v35[3571] + 4) : *(_DWORD *)(24 * v33 + a3[13] + 8) * *(_DWORD *)(24 * v33 + a3[13] + 4); v38 = v37; if ( v37 == 1 ) { v57 = v36++; (*(void (__cdecl **)(int))(v220 + 72))(a7 + (v57 << 7)); } else { v38 = v37 - 1; if ( v37 ) { do { v39 = v36++; (*(void (__cdecl **)(int))(v220 + 76))(a7 + (v39 << 7)); --v38; } while ( v38 != -1 ); v35 = a1; } } if ( ++v33 >= v216 ) break; v34 = v35[4984]; } v221 = v38; v12 = a5; v11 = a4; v14 = v191; v13 = 2; } } else { v40 = 0; if ( a6 > 0 ) { v192 = v14; v41 = a7; do { (*(void (__fastcall **)(int, int, int))(v220 + 76))(v11, v12, v41); v41 += 128; ++v40; } while ( v40 < a6 ); v12 = a5; v11 = a4; v14 = v192; v13 = 2; } } break; case 4: if ( a11 ) { if ( v216 > 0 ) { v15 = a1[4984]; v16 = 0; v17 = 0; v18 = a1; v188 = v14; while ( 1 ) { v19 = v15 ? *(_DWORD *)(16 * v17 + v18[3571] + 8) * *(_DWORD *)(16 * v17 + v18[3571] + 4) : *(_DWORD *)(24 * v17 + a3[13] + 8) * *(_DWORD *)(24 * v17 + a3[13] + 4); v20 = v19; if ( v19 == 1 ) { v56 = v16++; (*(void (__cdecl **)(int))(v220 + 76))(a7 + (v56 << 7)); } else { v20 = v19 - 1; if ( v19 ) { do { v21 = v16++; (*(void (__cdecl **)(int))(v220 + 80))(a7 + (v21 << 7)); --v20; } while ( v20 != -1 ); v18 = a1; } } if ( ++v17 >= v216 ) break; v15 = v18[4984]; } v221 = v20; v12 = a5; v11 = a4; v14 = v188; v13 = 4; } } else { v22 = 0; if ( a6 > 0 ) { v189 = v14; v23 = a7; do { (*(void (__fastcall **)(int, int, int))(v220 + 80))(v11, v12, v23); v23 += 128; ++v22; } while ( v22 < a6 ); v12 = a5; v11 = a4; v14 = v189; v13 = 4; } } break; case 8: if ( a11 ) { if ( v216 > 0 ) { v24 = a1[4984]; v25 = 0; v26 = a1; v190 = v14; v27 = 0; while ( 1 ) { v28 = v24 ? *(_DWORD *)(16 * v25 + v26[3571] + 8) * *(_DWORD *)(16 * v25 + v26[3571] + 4) : *(_DWORD *)(24 * v25 + a3[13] + 8) * *(_DWORD *)(24 * v25 + a3[13] + 4); v29 = v28; if ( v28 == 1 ) { v55 = v27++; (*(void (__cdecl **)(int))(v220 + 80))(a7 + (v55 << 7)); } else { v29 = v28 - 1; if ( v28 ) { do { v30 = v27++; (*(void (__cdecl **)(int))(v220 + 84))(a7 + (v30 << 7)); --v29; } while ( v29 != -1 ); v26 = a1; } } if ( ++v25 >= v216 ) break; v24 = v26[4984]; } v221 = v29; v12 = a5; v11 = a4; v14 = v190; v13 = 8; } } else { v31 = 0; if ( a6 > 0 ) { v32 = a7; do { (*(void (__fastcall **)(int, int, int))(v220 + 84))(v11, v12, v32); v32 += 128; ++v31; } while ( v31 < a6 ); v12 = a5; v11 = a4; v13 = 8; } } break; } if ( !a1[4983] ) { LABEL_253: if ( a1[4986] == 1 ) { v60 = a1[3566]; if ( v60 == 2 && a1[3567] == 1 ) { v213 = a1[1] / (2 * v14); if ( v11 != a8 ) { if ( v11 == a8 - 1 ) { if ( a1[19] & 0xF ) { v168 = ((a1[19] & 0xF) + 2 * v13 - 1) / (2 * v13); v172 = (__int16 *)a1[4621]; if ( a1[29] ) { if ( *(_DWORD *)(a3[13] + 4) == 1 ) { v160 = 0; v179 = v12; v210 = v14; v161 = a1[4621]; do { v162 = v168; if ( v168 < 8 ) { if ( 8 - v168 >= 6 ) { do { v163 = *(_WORD *)(v161 + 2 * v162 - 2); *(_WORD *)(v161 + 2 * v162) = v163; *(_WORD *)(v161 + 2 * v162 + 2) = v163; *(_WORD *)(v161 + 2 * v162 + 4) = v163; *(_WORD *)(v161 + 2 * v162 + 6) = v163; *(_WORD *)(v161 + 2 * v162 + 8) = v163; v162 += 5; } while ( v162 < 2 ); } do { *(_WORD *)(v161 + 2 * v162) = *(_WORD *)(v161 + 2 * v162 - 2); ++v162; } while ( v162 < 8 ); } v161 += 16; ++v160; } while ( v160 < 8 ); v12 = v179; v14 = v210; v13 = a10; v172 = (__int16 *)a1[4621]; } } else if ( a1[21] > 0 ) { v137 = 0; v178 = v12; v138 = a1[3571]; v139 = a1[21]; v187 = v11; v140 = a1[4621]; v206 = v14; v141 = 0; do { v142 = *(_DWORD *)(v141 + v138 + 4); if ( v142 == 1 ) { v156 = 0; v157 = v140; v173 = v140; do { v158 = v168; if ( v168 < 8 ) { if ( 8 - v168 >= 6 ) { do { v159 = *(_WORD *)(v157 + 2 * v158 - 2); *(_WORD *)(v157 + 2 * v158) = v159; *(_WORD *)(v157 + 2 * v158 + 2) = v159; *(_WORD *)(v157 + 2 * v158 + 4) = v159; *(_WORD *)(v157 + 2 * v158 + 6) = v159; *(_WORD *)(v157 + 2 * v158 + 8) = v159; v158 += 5; } while ( v158 < 2 ); } do { *(_WORD *)(v157 + 2 * v158) = *(_WORD *)(v157 + 2 * v158 - 2); ++v158; } while ( v158 < 8 ); } v157 += 16; ++v156; } while ( v156 < 8 ); v140 = v173; v139 = a1[21]; v138 = a1[3571]; v142 = *(_DWORD *)(v141 + v138 + 4); } v140 += v142 << 7; v141 += 16; ++v137; } while ( v137 < v139 ); v12 = v178; v11 = v187; v14 = v206; v13 = a10; v172 = (__int16 *)a1[4621]; } } else { v172 = (__int16 *)a1[4621]; } } else { v172 = (__int16 *)a1[4621]; } v143 = (_WORD *)(*(_DWORD *)(a1[4987] + 4) + v221 * 2 * v11 + 2 * v221); v144 = v221 - 1; if ( v221 ) { v207 = v14; v145 = v172; do { v146 = *v145; --v144; ++v145; *v143 = v146; ++v143; } while ( v144 != -1 ); v14 = v207; v13 = a10; } if ( !v11 ) { v147 = (_WORD *)(*(_DWORD *)(a1[4987] + 4) + 2 * v14 - 2); v148 = a6 - 1; if ( a6 ) { v208 = v14; v149 = (__int16 *)a1[4621]; do { v150 = 7; do { v151 = *v149; v149 += 8; --v150; *v147 = v151; v147 += 8; } while ( v150 != -1 ); --v148; } while ( v148 != -1 ); v11 = 0; v14 = v208; v13 = a10; } } } if ( v11 <= v213 ) return 0; v152 = v221 - 1; if ( v221 ) { v209 = v14; v153 = (__int16 *)(*(_DWORD *)(a1[4987] + 4) + v221 * 2 * v11); v154 = (_WORD *)a1[4621]; do { v155 = *v153; --v152; ++v153; *v154 = v155; ++v154; } while ( v152 != -1 ); v14 = v209; v13 = a10; } --v11; v60 = a1[3566]; } if ( v60 == 2 && a1[3567] == 2 ) { if ( v13 != 1 ) goto LABEL_79; v222 = a1[1] >> 4; v223 = a1[2] >> 4; v61 = (int *)a1[4987]; if ( v12 != v61[4] ) { v215 = *v61; *v61 = v61[1]; *(_DWORD *)(a1[4987] + 4) = *(_DWORD *)(a1[4987] + 8); if ( v12 == a9 ) { *(_DWORD *)(a1[4987] + 8) = *(_DWORD *)(a1[4987] + 12); *(_DWORD *)(a1[4987] + 12) = v215; } else { *(_DWORD *)(a1[4987] + 8) = v215; } v61 = (int *)a1[4987]; } v61[4] = v12; if ( v11 != a8 && v12 != a9 ) { v224 = a8 - 1; if ( v11 == a8 - 1 ) { if ( a1[19] & 0xF ) { v62 = a1[19] & 0xF; v214 = (v62 + 1) / 2; v165 = (_WORD *)a1[4621]; if ( a1[29] ) { if ( *(_DWORD *)(a3[13] + 4) == 1 ) { v129 = 0; v177 = v12; v186 = v11; v130 = a1[4621]; do { v131 = (v62 + 1) / 2; if ( v214 < 8 ) { if ( 8 - v214 >= 6 ) { do { v132 = *(_WORD *)(v130 + 2 * v131 - 2); *(_WORD *)(v130 + 2 * v131) = v132; *(_WORD *)(v130 + 2 * v131 + 2) = v132; *(_WORD *)(v130 + 2 * v131 + 4) = v132; *(_WORD *)(v130 + 2 * v131 + 6) = v132; *(_WORD *)(v130 + 2 * v131 + 8) = v132; v131 += 5; } while ( v131 < 2 ); } do { *(_WORD *)(v130 + 2 * v131) = *(_WORD *)(v130 + 2 * v131 - 2); ++v131; } while ( v131 < 8 ); } v130 += 16; ++v129; } while ( v129 < 8 ); v12 = v177; v11 = v186; v13 = a10; v165 = (_WORD *)a1[4621]; } } else { v217 = a1[21]; if ( a1[21] > 0 ) { v63 = a1[3571]; v175 = v12; v181 = v11; v64 = a1[4621]; v65 = 0; v194 = v14; v66 = 0; do { v67 = v63 + v65; v68 = *(_DWORD *)(v63 + v65 + 4); if ( v68 == 1 ) { v125 = 0; v126 = v64; v166 = v64; do { v127 = v214; if ( v214 < 8 ) { if ( 8 - v214 >= 6 ) { do { v128 = *(_WORD *)(v126 + 2 * v127 - 2); *(_WORD *)(v126 + 2 * v127) = v128; *(_WORD *)(v126 + 2 * v127 + 2) = v128; *(_WORD *)(v126 + 2 * v127 + 4) = v128; *(_WORD *)(v126 + 2 * v127 + 6) = v128; *(_WORD *)(v126 + 2 * v127 + 8) = v128; v127 += 5; } while ( v127 < 2 ); } do { *(_WORD *)(v126 + 2 * v127) = *(_WORD *)(v126 + 2 * v127 - 2); ++v127; } while ( v127 < 8 ); } v126 += 16; ++v125; } while ( v125 < 8 ); v64 = v166; v217 = a1[21]; v63 = a1[3571]; v67 = v63 + v65; v68 = *(_DWORD *)(v63 + v65 + 4); } v65 += 16; ++v66; v64 += *(_DWORD *)(v67 + 8) * (v68 << 7); } while ( v66 < v217 ); v12 = v175; v11 = v181; v14 = v194; v13 = a10; v165 = (_WORD *)a1[4621]; } } } else { v165 = (_WORD *)a1[4621]; } } else { v165 = (_WORD *)a1[4621]; } if ( v12 == a9 - 1 ) { if ( a1[20] & 0xF ) { v176 = v12; v69 = a1[21]; v70 = v69 == 0; v71 = v69 < 0; v12 = v176; if ( !v71 && !v70 ) { v72 = 8 * (((a1[20] & 0xF) + 2 * v13 - 1) / (2 * v13)); v169 = 64 - v72; v73 = a1[21]; v219 = v72; v74 = v165; v75 = 0; v182 = v11; v76 = 0; v195 = v14; v77 = a1[3571]; do { v78 = v77 + v76; v79 = *(_DWORD *)(v77 + v76 + 8); if ( v79 == 1 ) { v133 = 0; v134 = v74; v167 = v74; do { v135 = v219; if ( v219 < 64 ) { if ( v169 >= 48 ) { do { v136 = v134[v135 - 8]; v134[v135] = v136; v134[v135 + 8] = v136; v134[v135 + 16] = v136; v134[v135 + 24] = v136; v134[v135 + 32] = v136; v135 += 40; } while ( v135 < 16 ); } do { v134[v135] = v134[v135 - 8]; v135 += 8; } while ( v135 < 64 ); } ++v134; ++v133; } while ( v133 < 8 ); v74 = v167; v73 = a1[21]; v77 = a1[3571]; v78 = v77 + v76; v79 = *(_DWORD *)(v77 + v76 + 8); } v74 = (_WORD *)((char *)v74 + (*(_DWORD *)(v78 + 4) << 7) * v79); v76 += 16; ++v75; } while ( v75 < v73 ); v12 = v176; v11 = v182; v14 = v195; v13 = a10; v165 = (_WORD *)a1[4621]; } } } v80 = v11 * 2 * v221; v171 = v80; v212 = 2 * v221; v81 = (_WORD *)(v80 + *(_DWORD *)(a1[4987] + 8) + 2 * v221); v82 = v221 - 1; if ( v221 ) { v196 = v14; v83 = v165; do { v84 = *v83; --v82; ++v83; *v81 = v84; ++v81; } while ( v82 != -1 ); v14 = v196; v13 = a10; } if ( !v11 ) { v85 = (_WORD *)(*(_DWORD *)(a1[4987] + 8) + 14); v86 = a6 - 1; if ( a6 ) { v197 = v14; v87 = (__int16 *)a1[4621]; do { v88 = 7; do { v89 = *v87; v87 += 8; --v88; *v85 = v89; v85 += 8; } while ( v88 != -1 ); --v86; } while ( v86 != -1 ); v11 = 0; v14 = v197; v13 = a10; } } if ( v11 == v224 ) { v90 = (__int16 *)(a1[4621] + 14); v91 = a6 - 1; if ( a6 ) { v183 = v11; v198 = v14; v92 = (_WORD *)(v212 + *(_DWORD *)(a1[4987] + 8) + v221 * 2 * a8); do { v93 = 7; do { v94 = *v90; v90 += 8; --v93; *v92 = v94; v92 += 8; } while ( v93 != -1 ); --v91; } while ( v91 != -1 ); v11 = v183; v14 = v198; v13 = a10; } } if ( !v12 ) { v95 = (_WORD *)(v171 + v212 + *(_DWORD *)(a1[4987] + 4)); v96 = a6 - 1; if ( a6 ) { v184 = v11; v97 = (__int16 *)a1[4621]; v199 = v14; do { v95 += 56; v98 = 7; do { v99 = *v97; ++v97; --v98; *v95 = v99; ++v95; } while ( v98 != -1 ); v97 += 56; --v96; } while ( v96 != -1 ); v11 = v184; v14 = v199; v13 = a10; } if ( !v11 ) { v100 = (_WORD *)(*(_DWORD *)(a1[4987] + 4) + 126); v101 = a6 - 1; if ( a6 ) { v200 = v14; v102 = (__int16 *)a1[4621]; do { v103 = *v102; v102 += 64; --v101; *v100 = v103; v100 += 64; } while ( v101 != -1 ); v14 = v200; v13 = a10; } } if ( v11 == v224 ) { v104 = (__int16 *)(a1[4621] + 14); v105 = (_WORD *)(*(_DWORD *)(a1[4987] + 4) + v221 * 2 * a8 + v212 + 112); if ( a6 ) { v201 = v14; v106 = a6 - 1; do { v107 = *v104; v104 += 64; --v106; *v105 = v107; v105 += 64; } while ( v106 != -1 ); v14 = v201; v13 = a10; } } } if ( v12 == a9 - 1 ) { v108 = (_WORD *)(v171 + v212 + *(_DWORD *)(a1[4987] + 12)); v109 = a6 - 1; if ( a6 ) { v185 = v11; v202 = v14; v110 = (__int16 *)a1[4621]; do { v110 += 56; v111 = 7; do { v112 = *v110; ++v110; --v111; *v108 = v112; ++v108; } while ( v111 != -1 ); v108 += 56; --v109; } while ( v109 != -1 ); v11 = v185; v14 = v202; v13 = a10; } if ( !v11 ) { v113 = (_WORD *)(*(_DWORD *)(a1[4987] + 12) + 14); if ( a6 ) { v203 = v14; v114 = a6 - 1; v115 = (__int16 *)(a1[4621] + 112); do { v116 = *v115; v115 += 64; --v114; *v113 = v116; v113 += 64; } while ( v114 != -1 ); v14 = v203; v13 = a10; } } if ( v11 == v224 ) { v117 = (__int16 *)(a1[4621] + 126); v118 = (_WORD *)(v212 + *(_DWORD *)(a1[4987] + 12) + v221 * 2 * a8); if ( a6 ) { v204 = v14; v119 = a6 - 1; do { v120 = *v117; v117 += 64; --v119; *v118 = v120; v118 += 64; } while ( v119 != -1 ); v14 = v204; v13 = a10; } } } } if ( v11 <= v222 || v12 <= v223 ) return 0; v121 = v221 - 1; if ( v221 ) { v205 = v14; v122 = (__int16 *)(*(_DWORD *)(a1[4987] + 4) + v11 * 2 * v221); v123 = (_WORD *)a1[4621]; do { v124 = *v122; --v121; ++v122; *v123 = v124; ++v123; } while ( v121 != -1 ); v14 = v205; v13 = a10; } --v11; --v12; } } if ( v13 == 1 ) { (*(void (__cdecl **)(int *, int, int))(v220 + 160))(a1, v11, v12); return 0; } LABEL_79: sub_7AB0B0(a1, a2, a3, v11, v12, v14, a11); return 0; } v42 = a1[3568]; if ( v42 > 0 ) { v43 = a1[3571]; v174 = v12; v180 = 16 * v11; v44 = 0; do { v45 = 0; v46 = 16 * v44; v47 = *(_DWORD *)(16 * v44 + v43 + 8); if ( v47 > 0 ) { v48 = *(_DWORD *)(v46 + v43 + 4); v49 = 2 * v44; v164 = v44; do { v50 = 0; if ( v48 > 0 ) { v170 = v45; while ( 1 ) { v51 = 16 * v50 + (a8 << 7) * v48 * (v170 + v174 * v47) + *(_DWORD *)(a1[4983] + 2 * v49 + 4) + v180 * v48; v52 = 0; v193 = v50; v211 = v49; v53 = v218; do { dword_BA2968(v51, v53, 16); v43 = a1[3571]; v48 = *(_DWORD *)(v46 + v43 + 4); v51 += v48 * 16 * a8; v53 += 16; ++v52; } while ( v52 < 8 ); v218 = v53; v49 = v211; v50 = v193 + 1; if ( v193 + 1 >= v48 ) break; v47 = *(_DWORD *)(v46 + v43 + 8); } v45 = v170; v47 = *(_DWORD *)(v46 + v43 + 8); } ++v45; } while ( v45 < v47 ); v44 = v164; v42 = a1[3568]; } ++v44; } while ( v44 < v42 ); } return 0; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); //----- (007BCBF0) -------------------------------------------------------- signed int __cdecl sub_7BCBF0(int a1, int a2, _DWORD *a3, int *a4) { int v4; // ecx int v5; // eax int v6; // edx int v7; // eax int v8; // eax int v9; // edx int v10; // ecx int v11; // edx LONG lDistanceToMove; // ecx void *hFile; // edx v4 = 40 * a1; v5 = a4[4620]; v6 = *(_DWORD *)(v5 + 40 * a1 + 24); v7 = *(_DWORD *)(v5 + 40 * a1 + 28); *(_DWORD *)a2 = v6; *(_DWORD *)(a2 + 4) = v7; *(_DWORD *)(a2 + 12) = *(_DWORD *)(a4[4620] + 40 * a1 + 32); *(_BYTE *)(a2 + 48) = *(_BYTE *)(a4[4620] + 40 * a1 + 36); a3[9] = *(_DWORD *)(a4[4620] + 40 * a1 + 4); a3[10] = *(_DWORD *)(a4[4620] + 40 * a1 + 8); a3[11] = *(_DWORD *)(a4[4620] + 40 * a1 + 12); a3[12] = *(_DWORD *)(a4[4620] + 40 * a1 + 16); v8 = *a4; if ( *a4 != 2 && v8 != 6 && v8 != 14 && v8 != 18 && v8 != 16 ) { v9 = *(_DWORD *)(a4[4620] + v4); v10 = *(_DWORD *)(a2 + 32); *(_DWORD *)(a2 + 16) = v9; v11 = v9 - a4[17]; *(_DWORD *)(a2 + 28) = v11; *(_DWORD *)(a2 + 36) = v10 - v11; return 0; } lDistanceToMove = *(_DWORD *)(a4[4620] + v4); hFile = *(void **)(a2 + 60); *(_DWORD *)(a2 + 28) = lDistanceToMove; if ( !sub_791A80(hFile, lDistanceToMove, 0) ) return -23; if ( !sub_7C1A80(a2) ) return 0; return -23; } //----- (007BCD00) -------------------------------------------------------- int __cdecl sub_7BCD00(int a1, int a2, _DWORD *a3, int *a4) { int v4; // edx int v5; // ecx int v6; // edi int v7; // eax int result; // eax v4 = 40 * a1; *(_DWORD *)(a4[4620] + v4 + 4) = a3[9]; *(_DWORD *)(a4[4620] + v4 + 8) = a3[10]; *(_DWORD *)(a4[4620] + v4 + 12) = a3[11]; *(_DWORD *)(a4[4620] + v4 + 16) = a3[12]; v5 = *(_DWORD *)(a2 + 4); v6 = a4[4620]; *(_DWORD *)(v6 + v4 + 24) = *(_DWORD *)a2; *(_DWORD *)(v6 + v4 + 28) = v5; *(_DWORD *)(v6 + v4 + 32) = *(_DWORD *)(a2 + 12); *(_BYTE *)(a4[4620] + v4 + 36) = *(_BYTE *)(a2 + 48); v7 = *a4; if ( *a4 == 2 || v7 == 14 || v7 == 16 || v7 == 6 || v7 == 18 ) { result = *(_DWORD *)(a2 + 28); *(_DWORD *)(a4[4620] + v4) = result; } else { result = *(_DWORD *)(a2 + 16); *(_DWORD *)(a4[4620] + v4) = result; } return result; } //----- (007BCDC0) -------------------------------------------------------- signed int __cdecl sub_7BCDC0(int a1, _DWORD *a2, int a3, int a4, int a5, int a6) { unsigned int v6; // edi char v7; // al signed int result; // eax char v9; // [esp+8h] [ebp-14h] v6 = a2[6]; if ( !v6 || (a5 + a3 * a6 + 1) % v6 || a5 + a3 * a6 + 1 >= a3 * a4 ) return 0; a2[9] = 0; a2[10] = 0; a2[11] = 0; a2[12] = 0; v7 = *(_BYTE *)(a1 + 48); *(_DWORD *)(a1 + 12) = 0; if ( v7 ) { *(_BYTE *)(a1 + 48) = 0; return 0; } result = sub_7B9DF0(a1, (int *)&v9); if ( !result ) return 0; return result; } //----- (007BCE40) -------------------------------------------------------- signed int __cdecl sub_7BCE40(signed int a1, signed int *a2, int *a3, signed int a4) { signed int *v4; // edi int *v5; // ebx signed int v6; // ebp signed int v7; // ecx signed int v8; // edx int v9; // eax int v10; // ebp int v11; // ecx int v12; // eax int v13; // edi int v14; // eax int v15; // ebp int v16; // edx char v17; // al int v18; // esi int v19; // edi int v20; // esi int v21; // ecx int v22; // esi int v23; // eax int v24; // ebp int v25; // esi int v26; // eax signed int v27; // ebp int v28; // edx int v29; // edi int v30; // esi int v31; // eax int v32; // ecx int v33; // edx int v34; // eax int v35; // ebp int v36; // esi int v37; // edx int v38; // edi int v39; // ebp int v40; // esi signed int v41; // eax int v42; // edx _DWORD *v43; // eax int v44; // ebp int v45; // ecx int v46; // edi int v47; // eax int v48; // ecx _DWORD *v49; // edx int v50; // ebp int v51; // esi int v52; // edi int v53; // ecx int v54; // edi int v55; // eax int v56; // esi int v57; // ebx int v58; // edx int v59; // ebp int v60; // edi int v61; // esi int v62; // ecx int v63; // ebx signed int v64; // ebp int v65; // esi int v66; // ebp int v67; // eax int v68; // esi int v69; // ecx int v70; // eax _WORD *v71; // ebp int v72; // ecx signed int v73; // edx int v74; // ebx int v75; // esi int v76; // eax int v77; // edx int v78; // ebx int v79; // eax _DWORD *v80; // ebp int v81; // edx int v82; // edi int v83; // ecx int v84; // edx int v85; // eax int v86; // ebp int v87; // esi int v88; // ecx int v89; // edi int v90; // eax signed int v91; // ebx int v92; // ebp int v93; // esi int v94; // eax int v95; // edx _DWORD *v96; // ecx int v97; // ebp int v98; // esi int v99; // edi int v100; // edx int v101; // edx int v102; // esi signed int result; // eax _DWORD *v104; // eax int v105; // ebp int v106; // edx int i; // eax BOOL v108; // eax int v109; // edx int v110; // ebp int v111; // edx BOOL v112; // eax int v113; // esi int v114; // ebp signed int *v115; // edi int v116; // edx BOOL v117; // eax int v118; // edx int v119; // ebp int v120; // ebp int v121; // edx int v122; // edx int v123; // esi int v124; // ebp int v125[4]; // [esp+30h] [ebp-94h] int v126[4]; // [esp+40h] [ebp-84h] int v127[4]; // [esp+50h] [ebp-74h] __int16 v128; // [esp+60h] [ebp-64h] int v129; // [esp+64h] [ebp-60h] int v130; // [esp+68h] [ebp-5Ch] int v131; // [esp+6Ch] [ebp-58h] int v132; // [esp+70h] [ebp-54h] int v133; // [esp+74h] [ebp-50h] int v134; // [esp+78h] [ebp-4Ch] int v135; // [esp+7Ch] [ebp-48h] int v136; // [esp+80h] [ebp-44h] int v137; // [esp+84h] [ebp-40h] int v138; // [esp+88h] [ebp-3Ch] int v139; // [esp+8Ch] [ebp-38h] int v140; // [esp+90h] [ebp-34h] int v141; // [esp+94h] [ebp-30h] int v142; // [esp+98h] [ebp-2Ch] int v143; // [esp+9Ch] [ebp-28h] int v144; // [esp+A0h] [ebp-24h] int v145; // [esp+A4h] [ebp-20h] char v146; // [esp+A8h] [ebp-1Ch] int v147; // [esp+ACh] [ebp-18h] BOOL v148; // [esp+B0h] [ebp-14h] v4 = a2; v5 = a3; v145 = *(_DWORD *)(a1 + 8); v6 = 0; v147 = 0; v7 = *a2; if ( *a2 > 0 ) { v8 = a2[13]; v9 = 0; do { v125[v6] = *(_DWORD *)(v9 + v8 + 16); v126[v6] = *(_DWORD *)(v9 + v8 + 12); v127[v6] = *(_DWORD *)(v9 + v8 + 8) * *(_DWORD *)(v9 + v8 + 4); v9 += 24; ++v6; } while ( v6 < v7 ); } v10 = 0; v11 = a3[3568]; if ( v11 > 0 ) { v12 = 0; v13 = v147; do { ++v10; v13 += *(_DWORD *)(v12 + a3[3571] + 8) * *(_DWORD *)(v12 + a3[3571] + 4); v12 += 16; } while ( v10 < v11 ); v147 = v13; v4 = a2; } v14 = a3[3566]; if ( v14 != 1 || a3[3567] != 1 ) { v15 = 0; v146 = 1; if ( v11 > 0 ) { v16 = 0; v144 = v14; v17 = v146; while ( v17 ) { v18 = a3[3571]; v19 = *(_DWORD *)(v18 + v16 + 4); if ( v19 != *(_DWORD *)(v18 + v16 + 8) ) v17 = 0; if ( v19 != 1 && v19 != 2 ) v17 = 0; v16 += 16; if ( ++v15 >= v11 ) { v146 = v17; v14 = v144; v4 = a2; goto LABEL_19; } } v146 = 0; v14 = v144; v4 = a2; } } else { v146 = 0; } LABEL_19: v136 = v14 == 2 && a3[3567] <= 2 && a3[4986] == 1; v148 = v14 == 2 && a3[3567] == 2 && a3[4986] == 1; if ( v4[2] && v4[3] ) { v20 = v4[13]; v142 = v20; v21 = 8 * v14 / *(_DWORD *)(v20 + 4); v22 = *(_DWORD *)(v20 + 8); v23 = a3[3567]; v144 = v22; v24 = 8 * v23 / v22; v141 = (v21 + a3[19] - 1) / v21; v25 = v4[8]; v26 = (v24 + a3[20] - 1) / v24; v143 = a3[31]; if ( v25 < v143 ) { v27 = v142; v135 = v147 << 7; v28 = v144; v136 = v147 << 7; v138 = v26; while ( v28 <= 0 ) { LABEL_49: v42 = v5[3568]; if ( v42 <= v5[3573] && v42 <= v5[3574] ) { v43 = (_DWORD *)v5[4983]; if ( v43 && !*v43 ) { v44 = 0; v45 = v5[30]; if ( v45 > 0 ) { v144 = v5[4983]; v140 = v45; v134 = v25 << 7; v137 = v25; do { v53 = 0; v54 = v5[4985] + v136 * (v44 + v137 * v140); if ( v42 > 0 ) { v55 = v5[3571]; v133 = 16 * v44; v142 = v54; v139 = v44; do { v56 = 0; v57 = *(_DWORD *)(16 * v53 + v55 + 8); if ( v57 > 0 ) { v58 = *(_DWORD *)(16 * v53 + v55 + 4); v143 = 2 * v53; v129 = 16 * v53; v132 = v53; v59 = v144; do { v60 = 0; if ( v58 > 0 ) { v130 = v56; v61 = v143; v62 = v140; while ( 1 ) { v63 = 16 * v60 + v130 * (v62 << 7) * v58 + v58 * v133 + *(_DWORD *)(v59 + 2 * v61 + 4) + v58 * v62 * v134 * v57; v64 = 0; v131 = v60; v65 = v142; do { dword_BA2968(v63, v65, 16); v55 = a3[3571]; v62 = a3[30]; v58 = *(_DWORD *)(v129 + v55 + 4); v63 += v58 * 16 * a3[30]; v65 += 16; ++v64; } while ( v64 < 8 ); v142 = v65; v61 = v143; v60 = v131 + 1; if ( v131 + 1 >= v58 ) break; v59 = a3[4983]; v57 = *(_DWORD *)(v129 + v55 + 8); } v140 = v62; v56 = v130; v59 = a3[4983]; v57 = *(_DWORD *)(v129 + v55 + 8); } ++v56; } while ( v56 < v57 ); v144 = v59; v53 = v132; v42 = a3[3568]; } ++v53; } while ( v53 < v42 ); v44 = v139; v5 = a3; } ++v44; } while ( v44 < v140 ); v43 = (_DWORD *)v144; v45 = v140; v25 = v137; } } else { v44 = 0; v45 = v5[30]; if ( v45 > 0 ) { do { v46 = v5[4621]; dword_BA2968(v5[4621], v5[4985] + v136 * (v44 + v25 * v45), v135); v47 = 0; v48 = v5[3568]; if ( v48 > 0 ) { v139 = v44; v140 = v46; v142 = v46; v137 = v25; do { v49 = (_DWORD *)(v5[3571] + 16 * v47); v50 = 0; v51 = v49[2] * v49[1]; if ( v51 > 0 ) { v144 = 16 * v47; v52 = v140; v143 = v47; while ( 1 ) { (*(void (__cdecl **)(int, int))(v145 + 272))(v52, v5[45 * v49[3] + 39]); v52 += 128; if ( ++v50 >= v51 ) break; v49 = (_DWORD *)(v144 + v5[3571]); } v140 = v52; v47 = v143; v48 = v5[3568]; } ++v47; } while ( v47 < v48 ); v44 = v139; v46 = v142; v25 = v137; } sub_7BB760(v5, a1, a2, v44++, v25, v147, v46, v5[30], v5[31], a4, v146); v45 = v5[30]; } while ( v44 < v45 ); v43 = (_DWORD *)v5[4983]; } } if ( !v43 || *v43 ) sub_7BB760(v5, a1, a2, v44, v25, v147, v5[4621], v45, v5[31], a4, v146); } if ( v5[7] ) { v108 = v148; a2[8] = v25 + 1; a2[7] = 0; if ( v25 + 1 == v5[31] + v108 ) { a2[8] = 0; result = 0; } else { v109 = v5[30] - 1; result = 1; v5[3] = v109; v5[4] = v25; v5[1] = v109; v5[2] = v25; } return result; } if ( ++v25 >= v5[31] ) { v143 = v5[31]; goto LABEL_160; } v27 = a2[13]; v28 = *(_DWORD *)(v27 + 8); } v29 = 0; v133 = 8 * v25; v137 = v25; v30 = 0; v31 = v28; while ( 1 ) { if ( v29 + v133 * v31 >= v5[20] ) { v25 = v137; goto LABEL_49; } v32 = a2[7]; v33 = v5[30]; if ( v32 < v33 ) break; LABEL_47: v29 += 8; if ( ++v30 >= v31 ) { v25 = v137; goto LABEL_49; } } v34 = *(_DWORD *)(v27 + 4); v142 = v27; v132 = v29; v134 = v30; while ( 1 ) { v35 = 0; v36 = v5[4985] + v136 * (v32 + v137 * v33); v144 = *(_DWORD *)v142; if ( v144 > 0 ) { v140 = v5[3571]; v143 = 0; v130 = v34; v131 = v33; v37 = 0; v139 = v32; do { ++v35; v36 += *(_DWORD *)(v37 + v140 + 8) * (*(_DWORD *)(v37 + v140 + 4) << 7); v37 += 16; } while ( v35 < v144 ); v34 = v130; v33 = v131; v32 = v139; v5 = a3; } v38 = 0; v39 = v36 + v134 * (v34 << 7); if ( v34 > 0 ) break; LABEL_45: if ( ++v32 >= v33 ) { v27 = v142; v29 = v132; v30 = v134; v31 = *(_DWORD *)(v142 + 8); goto LABEL_47; } } v40 = 0; v139 = v32; while ( 1 ) { if ( v40 + v139 * 8 * v34 >= a3[19] ) { v32 = v139; v5 = a3; v33 = a3[30]; goto LABEL_45; } if ( a2[4] ) sub_799840(a1, v39, v125[0], a2[2], a2[3], a2[5]); else sub_799690(a1, v39, v125[0], a2[2], a2[3], a2[5]); v39 += 128; if ( sub_7BCDC0(a1, a2, v141, v138, v38 + *(_DWORD *)(a2[13] + 4) * v139, v134 + *(_DWORD *)(a2[13] + 8) * v137) ) return -25; v40 += 8; ++v38; v41 = a2[13]; v142 = v41; v34 = *(_DWORD *)(v41 + 4); if ( v38 >= v34 ) { v32 = v139; v5 = a3; v33 = a3[30]; goto LABEL_45; } } } LABEL_160: v104 = (_DWORD *)v5[4983]; if ( !v104 || *v104 ) { v105 = 0; v106 = v5[30]; if ( v106 + 1 > 0 ) { for ( i = v143; ; i = v5[31] ) { sub_7BB760(v5, a1, a2, v105++, v25, v147, v5[4621], v106, i, a4, v146); v106 = v5[30]; if ( v105 >= v106 + 1 ) break; } } } return 0; } v66 = v4[8]; v67 = a3[31]; if ( v66 >= v67 ) goto LABEL_136; v133 = v147 << 7; v134 = v147 << 7; v135 = v66; LABEL_79: v68 = v4[7]; v69 = v5[30]; if ( v68 >= v69 ) goto LABEL_133; v131 = v135 << 7; while ( 1 ) { v70 = 0; v71 = (_WORD *)(v5[4985] + v134 * (v68 + v135 * v69)); v138 = *(_DWORD *)v4[13]; if ( v138 > 0 ) { v130 = v5[3571]; v137 = 0; v129 = v69; v132 = v68; v72 = 0; do { ++v70; v71 = (_WORD *)((char *)v71 + *(_DWORD *)(v72 + v130 + 8) * (*(_DWORD *)(v72 + v130 + 4) << 7)); v72 += 16; } while ( v70 < v138 ); v69 = v129; v68 = v132; v5 = a3; v4 = a2; } if ( v4[4] ) { v76 = 0; v77 = *v4; if ( *v4 > 0 ) { v132 = v68; do { v78 = 0; if ( v127[v76] > 0 ) { v138 = v76; do { sub_799620(a1, v71, v4[5]); v71 += 64; ++v78; v76 = v138; } while ( v78 < v127[v138] ); v77 = *v4; } ++v76; } while ( v76 < v77 ); v68 = v132; v5 = a3; v69 = a3[30]; } } else { v73 = *v4; if ( *v4 > 0 ) { v132 = v68; v74 = 0; do { v75 = 0; if ( v127[v74] > 0 ) { do { dword_BA2964(v71, 128); v128 = v4[v74 + 9]; sub_799540(a1, v126[v74], v71, &v128, v4[5]); v71 += 64; ++v75; v4[v74 + 9] = v128; } while ( v75 < v127[v74] ); v73 = *v4; } ++v74; } while ( v74 < v73 ); v68 = v132; v5 = a3; v69 = a3[30]; } } if ( sub_7BCDC0(a1, v4, v69, v5[31], v68, v135) ) return -25; v79 = v5[3568]; if ( v79 > v5[3573] ) { v69 = v5[30]; } else if ( v79 > v5[3574] ) { v69 = v5[30]; } else { v69 = v5[30]; v80 = (_DWORD *)v5[4983]; v81 = v5[4985] + v134 * (v68 + v135 * v5[30]); if ( v80 && *v80 ) { v138 = 0; if ( v79 > 0 ) { v82 = v138; v130 = v5[3571]; v137 = 16 * v68; v143 = v81; v129 = v69; v83 = v79; v84 = v130; v132 = v68; do { v85 = 0; v86 = 16 * v82; v87 = *(_DWORD *)(16 * v82 + v84 + 8); if ( v87 > 0 ) { v144 = 2 * v82; v88 = *(_DWORD *)(v86 + v84 + 4); v138 = v82; do { v89 = 0; if ( v88 > 0 ) { v140 = v85 << 7; v139 = v85; v142 = v86; v90 = v129; while ( 1 ) { v91 = 0; v92 = v137 * v88 + v140 * v88 * v90 + v88 * v90 * v131 * v87 + *(_DWORD *)(a3[4983] + 2 * v144 + 4) + 16 * v89; v93 = v143; v141 = v89; do { dword_BA2968(v92, v93, 16); v84 = a3[3571]; v90 = a3[30]; v88 = *(_DWORD *)(v142 + v84 + 4); v92 += v88 * 16 * a3[30]; v93 += 16; ++v91; } while ( v91 < 8 ); v143 = v93; v89 = v141 + 1; if ( v141 + 1 >= v88 ) break; v87 = *(_DWORD *)(v142 + v84 + 8); } v129 = v90; v85 = v139; v86 = v142; v87 = *(_DWORD *)(v142 + v84 + 8); } ++v85; } while ( v85 < v87 ); v82 = v138; v5 = a3; v83 = a3[3568]; } ++v82; } while ( v82 < v83 ); v69 = v129; v68 = v132; v4 = a2; } } else { v130 = v5[4621]; dword_BA2968(v130, v81, v133); v94 = 0; v95 = v5[3568]; if ( v95 > 0 ) { v129 = v130; v132 = v68; do { v96 = (_DWORD *)(v5[3571] + 16 * v94); v97 = 0; v98 = v96[2] * v96[1]; if ( v98 > 0 ) { v138 = 16 * v94; v99 = v129; v137 = v94; while ( 1 ) { (*(void (__cdecl **)(int, int))(v145 + 272))(v99, v5[45 * v96[3] + 39]); v99 += 128; if ( ++v97 >= v98 ) break; v96 = (_DWORD *)(v138 + v5[3571]); } v129 = v99; v94 = v137; v95 = v5[3568]; } ++v94; } while ( v94 < v95 ); v68 = v132; v4 = a2; } sub_7BB760(v5, a1, v4, v68, v135, v147, v130, v5[30], v5[31], a4, v146); v69 = v5[30]; } } if ( v5[7] && (!v136 || v68) ) break; LABEL_131: if ( ++v68 >= v69 ) { v67 = v5[31]; LABEL_133: if ( v136 ) { sub_7BB760(v5, a1, v4, v68, v135, v147, v5[4621], v69, v67, a4, v146); if ( v5[7] ) { if ( !v68 ) { v67 = v5[31]; goto LABEL_134; } if ( v148 ) { if ( !v135 ) { v67 = v5[31]; goto LABEL_134; } v120 = v135; } else { v120 = v135; } v121 = (v68 + 1) % (v5[30] + v136); v4[7] = v121; if ( v121 ) { v122 = v120; v4[8] = v120; } else { v122 = v120 + 1; v4[8] = v120 + 1; } if ( v122 == v5[31] + v148 ) { v4[8] = 0; result = 0; } else { v123 = v68 - v136; result = 1; v5[3] = v123; v124 = v120 - v148; v5[4] = v124; v5[1] = v123; v5[2] = v124; } return result; } v67 = v5[31]; } LABEL_134: v100 = v135++ + 1; if ( v135 >= v67 ) { v66 = v100; LABEL_136: if ( v148 ) { v101 = v5[30]; v144 = v4[7]; if ( v144 <= v101 ) { v102 = v144; while ( 1 ) { sub_7BB760(v5, a1, a2, v102, v66, v147, v5[4621], v101, v67, a4, v146); if ( v5[7] && (!v136 || v102) ) { if ( !v148 ) { v144 = v102; v115 = a2; LABEL_188: v116 = (v102 + 1) % (v5[30] + v136); v115[7] = v116; if ( v116 ) { v115[8] = v66; goto LABEL_192; } v117 = v148; v115[8] = v66 + 1; if ( v66 + 1 == v5[31] + v117 ) { v115[8] = 0; result = 0; } else { LABEL_192: result = 1; v118 = v102 - v136; v5[3] = v102 - v136; v119 = v66 - v148; v5[4] = v119; v5[1] = v118; v5[2] = v119; } return result; } if ( v66 ) { v144 = v102; v115 = a2; goto LABEL_188; } } ++v102; v101 = v5[30]; if ( v102 > v101 ) return 0; v67 = v5[31]; } } } return 0; } goto LABEL_79; } } if ( v148 ) { if ( v135 ) { v110 = v135; goto LABEL_181; } goto LABEL_131; } v110 = v135; LABEL_181: v111 = (v68 + 1) % (v136 + v69); v4[7] = v111; if ( v111 ) { v4[8] = v110; } else { v112 = v148; v4[8] = v110 + 1; if ( v110 + 1 == v5[31] + v112 ) { v4[8] = 0; return 0; } } v113 = v68 - v136; result = 1; v5[3] = v113; v114 = v110 - v148; v5[4] = v114; v5[1] = v113; v5[2] = v114; return result; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7BCE40: using guessed type int var_94[4]; // 7BCE40: using guessed type int var_84[4]; // 7BCE40: using guessed type int var_74[4]; //----- (007BE1F0) -------------------------------------------------------- signed int __cdecl sub_7BE1F0(signed int a1, signed int *a2, int *a3, signed int a4) { signed int *v4; // ebx int *v5; // esi signed int v6; // edx signed int v7; // ecx int v8; // eax signed int v9; // ebp int v10; // edi char v11; // al int v12; // ecx int v13; // edi int v14; // edx int v15; // ebp int v16; // ebx int v17; // ecx int v18; // ecx int v19; // edx int v20; // ecx int v21; // ebp int v22; // edx int v23; // eax int v24; // ebx signed int v25; // ebp int v26; // eax int v27; // ebp signed int v28; // ecx int v29; // edx int v30; // ebx int v31; // edi int v32; // eax int v33; // ebp int v34; // edx int v35; // ecx int v36; // edi int v37; // edx int v38; // ebx int v39; // edi int v40; // ebp _DWORD *v41; // eax int v42; // eax int v43; // ecx int v44; // ebx int v45; // edi int v46; // eax int v47; // ecx int v48; // edi _DWORD *v49; // edx int v50; // ebx int v51; // ebp int v52; // edi int v53; // ebx int v54; // edx int v55; // eax int v56; // ecx int v57; // ebx int v58; // ebp int v59; // esi int v60; // edx int v61; // eax int v62; // ebx int v63; // edi signed int v64; // ebp int v65; // esi int v66; // ebx int v67; // ebp int v68; // eax int v69; // edi int v70; // eax _WORD *v71; // ebp int v72; // ecx signed int v73; // edx signed int v74; // esi int v75; // edi int v76; // eax signed int v77; // edx int v78; // esi int v79; // edx _DWORD *v80; // eax int v81; // ebp int v82; // eax int v83; // ecx int v84; // edi int v85; // ebx int v86; // edx int v87; // esi int v88; // edi int v89; // ecx int v90; // ebp signed int v91; // ebx int v92; // esi int v93; // ebp int v94; // eax int v95; // ecx _DWORD *v96; // edx int v97; // ebx int v98; // ebp int v99; // edi signed int result; // eax _DWORD *v101; // eax int v102; // eax int v103; // ebp int v104; // eax int v105; // edx int v106; // ebp int v107; // ebp int v108; // edx int v109; // edi int v110; // ebp int v111[4]; // [esp+30h] [ebp-ACh] int v112[4]; // [esp+40h] [ebp-9Ch] int v113[4]; // [esp+50h] [ebp-8Ch] __int16 v114; // [esp+60h] [ebp-7Ch] int v115; // [esp+64h] [ebp-78h] int v116; // [esp+68h] [ebp-74h] int v117; // [esp+6Ch] [ebp-70h] int v118; // [esp+70h] [ebp-6Ch] int v119; // [esp+74h] [ebp-68h] int v120; // [esp+78h] [ebp-64h] int v121; // [esp+7Ch] [ebp-60h] int v122; // [esp+80h] [ebp-5Ch] int v123; // [esp+84h] [ebp-58h] int v124; // [esp+88h] [ebp-54h] int v125; // [esp+8Ch] [ebp-50h] int v126; // [esp+90h] [ebp-4Ch] int v127; // [esp+94h] [ebp-48h] int v128; // [esp+98h] [ebp-44h] int v129; // [esp+9Ch] [ebp-40h] char v130; // [esp+A0h] [ebp-3Ch] int v131; // [esp+A4h] [ebp-38h] int v132; // [esp+A8h] [ebp-34h] int i; // [esp+ACh] [ebp-30h] int v134; // [esp+B0h] [ebp-2Ch] int v135; // [esp+B4h] [ebp-28h] int v136; // [esp+B8h] [ebp-24h] int v137; // [esp+BCh] [ebp-20h] int v138; // [esp+C0h] [ebp-1Ch] int v139; // [esp+C4h] [ebp-18h] v4 = a2; v5 = a3; v136 = *(_DWORD *)(a1 + 8); v6 = 0; v126 = 0; v7 = *a2; if ( *a2 > 0 ) { v8 = 0; do { if ( !a3[3576] ) { a2[v6 + 9] = 0; v7 = *a2; } v9 = a2[13]; v111[v6] = *(_DWORD *)(v8 + v9 + 16); v112[v6] = *(_DWORD *)(v8 + v9 + 12); v10 = *(_DWORD *)(v8 + v9 + 8) * *(_DWORD *)(v8 + v9 + 4); v8 += 24; v113[v6++] = v10; } while ( v6 < v7 ); } if ( v7 == 1 ) v113[0] = 1; v134 = a3[3566]; if ( v134 == 1 ) { v132 = a3[3567]; if ( v132 == 1 ) { v13 = a3[3568]; v130 = 0; goto LABEL_20; } } else { v132 = a3[3567]; } v11 = 1; v12 = 0; v13 = a3[3568]; v130 = 1; if ( v13 > 0 ) { v14 = 0; while ( v11 ) { v15 = a3[3571]; v16 = *(_DWORD *)(v15 + v14 + 4); if ( v16 != *(_DWORD *)(v15 + v14 + 8) ) v11 = 0; if ( v16 != 1 && v16 != 2 ) v11 = 0; v14 += 16; if ( ++v12 >= v13 ) { v130 = v11; v4 = a2; goto LABEL_20; } } v130 = 0; v4 = a2; } LABEL_20: v135 = 8 / a4; v17 = 8 / a4 * v134; v129 = a3[1] / v17; v128 = (a3[3] + v17 - 1) / v17; v18 = 8 / a4 * v132; v137 = a3[2] / v18; v19 = a3[4986]; v138 = (a3[4] + v18 - 1) / v18; v139 = v19 == 1 && v134 == 2; v127 = v19 == 1 && v132 == 2; if ( v129 ) v129 -= v139; if ( v137 ) v137 -= v127; v20 = a3[30]; if ( v128 < v20 ) v128 += v139; v121 = a3[31]; if ( v138 < v121 ) v138 += v127; v21 = 0; if ( v13 > 0 ) { v22 = a3[3571]; v23 = 0; v125 = v20; v24 = v126; do { ++v21; v24 += *(_DWORD *)(v23 + v22 + 8) * *(_DWORD *)(v23 + v22 + 4); v23 += 16; } while ( v21 < v13 ); v126 = v24; v20 = v125; v5 = a3; v4 = a2; } if ( v4[2] && v4[3] ) { v25 = v4[13]; i = 8 * v134 / *(_DWORD *)(v25 + 4); v132 = 8 * v132 / *(_DWORD *)(v25 + 8); v134 = (i + v5[19] - 1) / i; v26 = (v132 + abs(v5[20]) - 1) / v132; v27 = v4[8]; if ( v27 < v121 ) { v122 = v126 << 7; v123 = v126 << 7; v125 = v26; while ( 1 ) { if ( v13 >= v5[3574] ) { v28 = a2[13]; v29 = *(_DWORD *)(v28 + 8); if ( v29 > 0 ) break; } LABEL_63: if ( v13 <= v5[3573] && v13 <= v5[3574] && v27 >= v137 && v27 < v138 ) { v41 = (_DWORD *)v5[4983]; if ( v41 && !*v41 ) { v53 = v129; if ( v129 < v128 ) { v120 = v5[30]; v124 = v27; do { v54 = a3[4985] + v123 * (v53 + v124 * v120); v55 = 0; if ( v13 > 0 ) { v56 = a3[3571]; v117 = 16 * v53; v118 = v124 << 7; v119 = v54; v121 = v53; do { v57 = 0; v58 = 16 * v55; v59 = *(_DWORD *)(16 * v55 + v56 + 8); if ( v59 > 0 ) { v60 = *(_DWORD *)(v58 + v56 + 4); v115 = 2 * v55; v116 = v55; do { v61 = 0; if ( v60 > 0 ) { v132 = v57; v62 = v115; v63 = v120; for ( i = v58; ; v59 = *(_DWORD *)(i + v56 + 8) ) { v64 = 0; v65 = 16 * v61 + v132 * (v63 << 7) * v60 + v60 * v117 + *(_DWORD *)(a3[4983] + 2 * v62 + 4) + v60 * v63 * v118 * v59; v66 = v119; v131 = v61; do { dword_BA2968(v65, v66, 16); v56 = a3[3571]; v63 = a3[30]; v60 = *(_DWORD *)(i + v56 + 4); v65 += v60 * 16 * a3[30]; v66 += 16; ++v64; } while ( v64 < 8 ); v119 = v66; v62 = v115; v61 = v131 + 1; if ( v131 + 1 >= v60 ) break; } v120 = v63; v57 = v132; v58 = i; v59 = *(_DWORD *)(i + v56 + 8); } ++v57; } while ( v57 < v59 ); v55 = v116; v13 = a3[3568]; } ++v55; } while ( v55 < v13 ); v53 = v121; } ++v53; } while ( v53 < v128 ); v27 = v124; v5 = a3; } } else { v42 = a2[7] - v129; if ( v42 <= 0 ) v42 = 0; v43 = v128; v44 = v129; *(_DWORD *)(a1 + 44) = v5[8] + v135 * (v5[3566] * v5[12] * v42 + v5[15] * v5[3567] * (v27 - v137)); if ( v44 < v43 ) { do { v45 = v5[4621]; dword_BA2968(v5[4621], v5[4985] + v123 * (v44 + v5[30] * v27), v122); v46 = 0; v47 = v5[3568]; if ( v47 > 0 ) { i = v45; v132 = v45; v131 = v44; v48 = v47; v124 = v27; do { v49 = (_DWORD *)(v5[3571] + 16 * v46); v50 = 0; v51 = v49[2] * v49[1]; if ( v51 > 0 ) { v120 = 16 * v46; v52 = i; v121 = v46; while ( 1 ) { (*(void (__cdecl **)(int, int))(v136 + 272))(v52, v5[45 * v49[3] + 39]); v52 += 128; if ( ++v50 >= v51 ) break; v49 = (_DWORD *)(v120 + v5[3571]); } i = v52; v46 = v121; v48 = v5[3568]; } ++v46; } while ( v46 < v48 ); v45 = v132; v44 = v131; v27 = v124; } sub_7BB760(v5, a1, a2, v44++, v27, v126, v45, v5[30], v5[31], a4, v130); } while ( v44 < v128 ); } if ( v139 && v44 == v128 ) sub_7BB760(v5, a1, a2, v44, v27, v126, v5[4621], v5[30], v5[31], a4, v130); } } if ( v5[7] ) { v104 = v127; a2[8] = v27 + 1; a2[7] = 0; if ( v27 + 1 == v5[31] + v104 ) { a2[8] = 0; result = 0; } else { v105 = v5[30] - 1; result = 1; v5[3] = v105; v106 = v27 - v127; v5[4] = v106; v5[1] = v105; v5[2] = v106; } return result; } if ( ++v27 >= v5[31] ) { v121 = v5[31]; v4 = a2; goto LABEL_176; } v13 = v5[3568]; } v30 = 0; v119 = 8 * v27; v31 = 0; v124 = v27; while ( 1 ) { if ( v30 + v119 * v29 >= v5[20] ) { v27 = v124; v13 = v5[3568]; goto LABEL_63; } v32 = a2[7]; v33 = v5[30]; if ( v32 < v33 ) break; LABEL_61: v30 += 8; if ( ++v31 >= v29 ) { v27 = v124; v13 = v5[3568]; goto LABEL_63; } } v34 = *(_DWORD *)(v28 + 4); v116 = v28; v118 = v30; v120 = v31; while ( 1 ) { v35 = 0; v36 = v5[4985] + v123 * (v32 + v124 * v33); i = *(_DWORD *)v116; if ( i > 0 ) { v131 = v5[3571]; v132 = 0; v115 = v34; v37 = 0; v117 = v33; v121 = v32; do { ++v35; v36 += *(_DWORD *)(v37 + v131 + 8) * (*(_DWORD *)(v37 + v131 + 4) << 7); v37 += 16; } while ( v35 < i ); v34 = v115; v33 = v117; v32 = v121; v5 = a3; } v38 = v36 + v120 * (v34 << 7); v39 = 0; if ( v34 > 0 ) break; LABEL_59: if ( ++v32 >= v33 ) { v28 = v116; v30 = v118; v31 = v120; v29 = *(_DWORD *)(v116 + 8); goto LABEL_61; } } v40 = 0; v121 = v32; while ( 1 ) { if ( v40 + v121 * 8 * v34 >= a3[19] ) { v32 = v121; v5 = a3; v33 = a3[30]; goto LABEL_59; } if ( a2[4] ) sub_799840(a1, v38, v111[0], a2[2], a2[3], a2[5]); else sub_799690(a1, v38, v111[0], a2[2], a2[3], a2[5]); v38 += 128; if ( sub_7BCDC0(a1, a2, v134, v125, v39 + *(_DWORD *)(a2[13] + 4) * v121, v120 + *(_DWORD *)(a2[13] + 8) * v124) ) return -25; v40 += 8; ++v39; v116 = a2[13]; v34 = *(_DWORD *)(v116 + 4); if ( v39 >= v34 ) { v32 = v121; v5 = a3; v33 = a3[30]; goto LABEL_59; } } } LABEL_176: v101 = (_DWORD *)v5[4983]; if ( v101 && !*v101 ) { v13 = v5[3568]; } else if ( v127 ) { if ( v129 <= v128 ) { v102 = v121; v103 = v129; while ( 1 ) { sub_7BB760(v5, a1, v4, v103++, v102, v126, v5[4621], v5[30], v102, a4, v130); if ( v103 > v128 ) break; v102 = v5[31]; } } if ( v5[7] ) { result = 0; v4[7] = 0; v4[8] = 0; return result; } v13 = v5[3568]; } else { v13 = v5[3568]; } LABEL_157: if ( v13 > v5[3573] || v13 > v5[3574] ) result = 0; else result = 2; return result; } v67 = v4[8]; if ( v67 >= v121 ) goto LABEL_157; v116 = v126 << 7; v68 = v121; v117 = v126 << 7; while ( 1 ) { v69 = v4[7]; if ( v69 < v20 ) break; LABEL_155: if ( ++v67 >= v68 ) { v13 = v5[3568]; goto LABEL_157; } } v115 = v67 << 7; v118 = v67; while ( 1 ) { v70 = 0; v71 = (_WORD *)(v5[4985] + v117 * (v69 + v118 * v20)); i = *(_DWORD *)v4[13]; if ( i > 0 ) { v124 = v5[3571]; v132 = 0; v125 = v20; v72 = 0; v131 = v69; do { ++v70; v71 = (_WORD *)((char *)v71 + *(_DWORD *)(v72 + v124 + 8) * (*(_DWORD *)(v72 + v124 + 4) << 7)); v72 += 16; } while ( v70 < i ); v20 = v125; v69 = v131; v5 = a3; v4 = a2; } if ( v4[4] ) { v76 = 0; v77 = *v4; if ( *v4 > 0 ) { v131 = v69; do { v78 = 0; if ( v113[v76] > 0 ) { i = v76; do { sub_799620(a1, v71, v4[5]); v71 += 64; ++v78; v76 = i; } while ( v78 < v113[i] ); v77 = *v4; } ++v76; } while ( v76 < v77 ); v69 = v131; v5 = a3; v20 = a3[30]; } } else { v73 = *v4; if ( *v4 > 0 ) { v131 = v69; v74 = 0; do { v75 = 0; if ( v113[v74] > 0 ) { do { dword_BA2964(v71, 128); v114 = v4[v74 + 9]; sub_799540(a1, v112[v74], v71, &v114, v4[5]); v71 += 64; ++v75; v4[v74 + 9] = v114; } while ( v75 < v113[v74] ); v73 = *v4; } ++v74; } while ( v74 < v73 ); v69 = v131; v5 = a3; v20 = a3[30]; } } if ( sub_7BCDC0(a1, v4, v20, v5[31], v69, v118) ) return -25; if ( v69 < v129 ) { v20 = v5[30]; } else if ( v69 >= v128 ) { v20 = v5[30]; } else if ( v118 < v137 ) { v20 = v5[30]; } else if ( v118 >= v138 ) { v20 = v5[30]; } else { v79 = v5[3568]; if ( v79 > v5[3573] ) { v20 = v5[30]; } else if ( v79 > v5[3574] ) { v20 = v5[30]; } else { v20 = v5[30]; v119 = v5[4985] + v117 * (v69 + v118 * v5[30]); v80 = (_DWORD *)v5[4983]; if ( !v80 || *v80 ) { v93 = v5[4621]; dword_BA2968(v5[4621], v119, v116); v94 = 0; v95 = v5[3568]; if ( v95 > 0 ) { v132 = v5[4621]; i = v93; v131 = v69; do { v96 = (_DWORD *)(v5[3571] + 16 * v94); v97 = 0; v98 = v96[2] * v96[1]; if ( v98 > 0 ) { v135 = 16 * v94; v99 = v132; v134 = v94; while ( 1 ) { (*(void (__cdecl **)(int, int))(v136 + 272))(v99, v5[45 * v96[3] + 39]); v99 += 128; if ( ++v97 >= v98 ) break; v96 = (_DWORD *)(v135 + v5[3571]); } v132 = v99; v94 = v134; v95 = v5[3568]; } ++v94; } while ( v94 < v95 ); v93 = i; v69 = v131; v4 = a2; } sub_7BB760(v5, a1, v4, v69, v118, v126, v93, v5[30], v5[31], a4, v130); v20 = v5[30]; } else { v81 = 0; if ( v79 > 0 ) { v82 = v5[3571]; v125 = v20; v131 = v69; do { v83 = 0; v84 = 16 * v81; v85 = *(_DWORD *)(16 * v81 + v82 + 8); if ( v85 > 0 ) { v132 = 2 * v81; v86 = *(_DWORD *)(v84 + v82 + 4); i = 16 * v131; v124 = v81; do { v87 = 0; if ( v86 > 0 ) { v122 = v83 << 7; v123 = v83; v120 = v84; v88 = v132; v89 = v125; while ( 1 ) { v90 = i * v86 + v122 * v86 * v89 + v86 * v89 * v115 * v85 + *(_DWORD *)(a3[4983] + 2 * v88 + 4) + 16 * v87; v91 = 0; v121 = v87; v92 = v119; do { dword_BA2968(v90, v92, 16); v82 = a3[3571]; v89 = a3[30]; v86 = *(_DWORD *)(v120 + v82 + 4); v90 += v86 * 16 * a3[30]; v92 += 16; ++v91; } while ( v91 < 8 ); v119 = v92; v88 = v132; v87 = v121 + 1; if ( v121 + 1 >= v86 ) break; v85 = *(_DWORD *)(v120 + v82 + 8); } v125 = v89; v83 = v123; v84 = v120; v85 = *(_DWORD *)(v120 + v82 + 8); } ++v83; } while ( v83 < v85 ); v81 = v124; v79 = a3[3568]; } ++v81; } while ( v81 < v79 ); v20 = v125; v69 = v131; v5 = a3; v4 = a2; } } } } if ( v5[7] ) break; if ( ++v69 >= v20 ) { v67 = v118; v68 = v5[31]; goto LABEL_155; } } v107 = v118; v108 = (v69 + 1) % v20; v4[7] = v108; if ( v108 ) { v4[8] = v107; } else { v4[8] = v107 + 1; if ( v107 + 1 == v5[31] ) { v4[8] = 0; return 0; } } v109 = v69 - v139; result = 1; v5[3] = v109; v110 = v107 - v127; v5[4] = v110; v5[1] = v109; v5[2] = v110; return result; } // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7BE1F0: using guessed type int var_AC[4]; // 7BE1F0: using guessed type int var_9C[4]; // 7BE1F0: using guessed type int var_8C[4]; //----- (007BF550) -------------------------------------------------------- signed int __cdecl sub_7BF550(signed int a1, signed int *a2, int *a3, signed int a4) { signed int *v4; // edi signed int v5; // ecx signed int v6; // ebp signed int v7; // edx int v8; // eax int v9; // ebx int v10; // esi int v11; // ecx int v12; // ebx int v13; // esi int v14; // ebp int v15; // edx char v16; // al int v17; // edi int v18; // ebx int v19; // esi int *v20; // ebx int v21; // ebp int v22; // esi signed int v23; // edx int *v24; // eax _DWORD *v25; // ecx signed int v26; // ebp int v27; // ebx int v28; // ecx int v29; // ebp int v30; // eax int v31; // edx signed int result; // eax int v33; // esi signed int v34; // ebx int v35; // ebp int v36; // ebp int v37; // edi int v38; // ecx _DWORD *v39; // edx _DWORD *v40; // edx int v41; // edx int v42; // ebp int v43; // esi int v44; // ebx int v45; // edx int v46; // ebp int v47; // esi int v48; // esi int v49; // edx int v50; // ebp int v51; // esi int v52; // esi signed int *v53; // edi int v54; // edx int v55; // ecx int v56; // esi int v57; // ebp int v58; // ecx int v59; // edx int v60; // ecx int v61; // esi signed int v62; // ebx int v63; // esi int v64[4]; // [esp+30h] [ebp-ACh] int v65[4]; // [esp+40h] [ebp-9Ch] int v66[4]; // [esp+50h] [ebp-8Ch] int v67[4]; // [esp+60h] [ebp-7Ch] __int16 v68; // [esp+70h] [ebp-6Ch] __int16 v69; // [esp+74h] [ebp-68h] int v70; // [esp+78h] [ebp-64h] int v71; // [esp+7Ch] [ebp-60h] int v72; // [esp+80h] [ebp-5Ch] int v73; // [esp+84h] [ebp-58h] char v74; // [esp+88h] [ebp-54h] int v75; // [esp+8Ch] [ebp-50h] int v76; // [esp+90h] [ebp-4Ch] int v77; // [esp+94h] [ebp-48h] unsigned int v78; // [esp+98h] [ebp-44h] int v79; // [esp+9Ch] [ebp-40h] int v80; // [esp+A0h] [ebp-3Ch] int v81; // [esp+A4h] [ebp-38h] int v82; // [esp+A8h] [ebp-34h] int v83; // [esp+ACh] [ebp-30h] int v84; // [esp+B0h] [ebp-2Ch] BOOL v85; // [esp+B4h] [ebp-28h] int v86; // [esp+B8h] [ebp-24h] int v87; // [esp+BCh] [ebp-20h] BOOL v88; // [esp+C0h] [ebp-1Ch] int v89; // [esp+C4h] [ebp-18h] v4 = a2; v75 = *(_DWORD *)(a1 + 8); v5 = 0; v6 = *a2; v73 = 0; if ( v6 > 0 ) { v7 = a2[13]; v8 = 0; v9 = v73; do { v64[v5] = *(_DWORD *)(v8 + v7 + 16); v65[v5] = *(_DWORD *)(v8 + v7 + 12); v66[v5] = *(_DWORD *)(*(_DWORD *)(v8 + v7 + 20) + 8); v10 = *(_DWORD *)(v8 + v7 + 8) * *(_DWORD *)(v8 + v7 + 4); v9 += v10; v8 += 24; v67[v5++] = v10; } while ( v5 < v6 ); v73 = v9; } v11 = a3[3566]; if ( v6 == 1 ) { v62 = a2[13]; v63 = 8 * a3[3567] / *(_DWORD *)(v62 + 8); v12 = (a3[19] + 8 * v11 / *(_DWORD *)(v62 + 4) - 1) / (8 * v11 / *(_DWORD *)(v62 + 4)); v89 = (abs(a3[20]) + v63 - 1) / v63; v73 = 1; v67[0] = 1; } else { v12 = a3[30]; v89 = a3[31]; } if ( v11 != 1 || a3[3567] != 1 ) { v13 = 0; v74 = 1; v14 = a3[3568]; if ( v14 > 0 ) { v15 = 0; v16 = v74; v70 = v12; v71 = v11; while ( v16 ) { v17 = a3[3571]; v18 = *(_DWORD *)(v17 + v15 + 4); if ( v18 != *(_DWORD *)(v17 + v15 + 8) ) v16 = 0; if ( v18 != 1 && v18 != 2 ) v16 = 0; v15 += 16; if ( ++v13 >= v14 ) { v74 = v16; v12 = v70; v11 = v71; v4 = a2; goto LABEL_18; } } v74 = 0; v12 = v70; v11 = v71; v4 = a2; } } else { v74 = 0; } LABEL_18: v88 = v11 == 2 && a3[3567] <= 2 && a3[4986] == 1; v85 = v11 == 2 && a3[3567] == 2 && a3[4986] == 1; v19 = v4[8]; if ( v19 >= v89 ) { LABEL_62: if ( !v85 ) return 0; v72 = v4[7]; if ( v72 < v12 ) { v71 = v19; v42 = v72; while ( 1 ) { sub_7BB760(a3, a1, a2, v42, v71, v73, a3[4621], v12, v89, a4, v74); if ( a3[7] && (!v88 || v42) ) { if ( !v85 ) { v72 = v42; v52 = v71; v53 = a2; LABEL_90: v54 = (v42 + 1) % (v88 + v12); v53[7] = v54; if ( v54 ) { v53[8] = v52; goto LABEL_95; } if ( v52 + 1 == v85 + v89 ) { v53[8] = 0; result = 0; } else { v53[8] = v52 + 1; LABEL_95: result = 1; v55 = v42 - v88; a3[3] = v42 - v88; v56 = v52 - v85; a3[4] = v56; a3[1] = v55; a3[2] = v56; } return result; } if ( v71 ) { v72 = v42; v52 = v71; v53 = a2; goto LABEL_90; } } if ( ++v42 >= v12 ) { v72 = v42; v19 = v71; v4 = a2; break; } } } if ( !v88 ) return 0; v57 = v89; sub_7BB760(a3, a1, v4, v72, v19, v73, a3[4621], v12, v89, a4, v74); if ( !a3[7] ) return 0; v58 = v72; v59 = (v72 + 1) % (v88 + v12); v4[7] = v59; if ( v59 ) { v4[8] = v19; } else { if ( v19 + 1 == v85 + v57 ) { v4[8] = 0; return 0; } v4[8] = v19 + 1; } result = 1; v60 = v58 - v88; a3[3] = v60; v61 = v19 - v85; a3[4] = v61; a3[1] = v60; a3[2] = v61; } else { v87 = 16 * v12; v86 = v12 << 7; v71 = v19; v70 = v12; v20 = a3; while ( 1 ) { v21 = v4[7]; if ( v21 < v70 ) { do { v22 = 0; v72 = v20[4621]; v23 = *v4; if ( *v4 > 0 ) { v24 = v20; v84 = 16 * v21; v83 = v21; do { v25 = (_DWORD *)v24[4983]; if ( !v25 || *v25 ) { v36 = 0; if ( v67[v22] > 0 ) { v37 = v72; do { v38 = v64[v22]; v68 = a2[v22 + 9]; result = (*(int (__cdecl **)(signed int, int, int, __int16 *, int))(v75 + 244))( a1, v65[v22], v38, &v68, v37); a2[v22 + 9] = v68; if ( result < 0 ) return result; (*(void (__cdecl **)(int, int))(v75 + 272))(v37, v66[v22]); v37 += 128; ++v36; } while ( v36 < v67[v22] ); v72 = v37; v24 = a3; v4 = a2; v23 = *a2; } } else { v81 = 0; v26 = v4[13]; v27 = 24 * v22; v28 = *(_DWORD *)(24 * v22 + v26 + 8); if ( v28 > 0 ) { v29 = *(_DWORD *)(v27 + v26 + 4); v30 = v81; v78 = 2 * v22; v31 = v29; v77 = v22; do { if ( v31 > 0 ) { v81 = v30; v80 = 0; v79 = 0; v82 = v27; do { v69 = v4[v78 / 2 + 9]; result = (*(int (__cdecl **)(signed int, int, int, __int16 *, int))(v75 + 244))( a1, v65[v77], v64[v77], &v69, v72); v4[v78 / 2 + 9] = v69; if ( result < 0 ) return result; v33 = v72; v34 = 0; v35 = v80 + v86 * *(_DWORD *)(v82 + v4[13] + 4) * (v81 + *(_DWORD *)(v82 + v4[13] + 8) * v71) + *(_DWORD *)(a3[4983] + 2 * v78 + 4) + v84 * *(_DWORD *)(v82 + v4[13] + 4); do { dword_BA2968(v35, v33, 16); v31 = *(_DWORD *)(v82 + v4[13] + 4); v35 += v31 * v87; v33 += 16; ++v34; } while ( v34 < 8 ); v76 = v4[13]; v72 = v33; v80 += 16; ++v79; } while ( v79 < v31 ); v30 = v81; v27 = v82; v28 = *(_DWORD *)(v82 + v76 + 8); } ++v30; } while ( v30 < v28 ); v22 = v77; v24 = a3; v23 = *v4; } } ++v22; } while ( v22 < v23 ); v20 = v24; v21 = v83; } result = sub_7BCDC0(a1, v4, v70, v89, v21, v71); if ( result ) return result; v39 = (_DWORD *)v20[4983]; if ( !v39 || *v39 ) sub_7BB760(v20, a1, v4, v21, v71, v73, v20[4621], v70, v89, a4, v74); if ( v20[7] && (!v88 || v21) ) { if ( !v85 ) { v43 = v71; v44 = v70; goto LABEL_75; } if ( v71 ) { v43 = v71; v44 = v70; LABEL_75: v45 = (v21 + 1) % (v88 + v44); v4[7] = v45; if ( v45 ) { v4[8] = v43; } else { if ( v43 + 1 == v85 + v89 ) { v4[8] = 0; return 0; } v4[8] = v43 + 1; } v46 = v21 - v88; result = 1; a3[3] = v46; v47 = v43 - v85; a3[4] = v47; a3[1] = v46; a3[2] = v47; return result; } } } while ( ++v21 < v70 ); } if ( v88 ) { v40 = (_DWORD *)v20[4983]; if ( !v40 || *v40 ) { sub_7BB760(v20, a1, v4, v21, v71, v73, v20[4621], v70, v89, a4, v74); if ( v20[7] ) break; } } v41 = v71 + 1; v71 = v41; if ( v41 >= v89 ) { v19 = v41; v12 = v70; goto LABEL_62; } } v48 = v71; v49 = (v21 + 1) % (v88 + v70); v4[7] = v49; if ( v49 ) { v4[8] = v48; } else { if ( v48 + 1 == v85 + v89 ) { v4[8] = 0; return 0; } v4[8] = v48 + 1; } v50 = v21 - v88; result = 1; a3[3] = v50; v51 = v48 - v85; a3[4] = v51; a3[1] = v50; a3[2] = v51; } return result; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7BF550: using guessed type int var_AC[4]; // 7BF550: using guessed type int var_9C[4]; // 7BF550: using guessed type int var_8C[4]; // 7BF550: using guessed type int var_7C[4]; //----- (007C0050) -------------------------------------------------------- signed int __cdecl sub_7C0050(_DWORD *a1, int *a2, int *a3, signed int a4) { int *v4; // ebx int v5; // ecx int v6; // edx int v7; // eax int v8; // esi int v9; // ebp int v10; // ebx int v11; // edi int v12; // ebp int v13; // edx int v14; // eax int v15; // ecx int v16; // ebp int v17; // edi int v18; // esi int v19; // edx int v20; // edi int v21; // esi int v22; // edx char v23; // al int v24; // ebp int v25; // ecx int v26; // ecx int v27; // esi int v28; // ebp int v29; // edi int v30; // ecx int v31; // eax int v32; // ebp int v33; // edx int v34; // eax int v35; // ecx signed int result; // eax int *v37; // ebp int v38; // edi int v39; // esi int v40; // ebx int v41; // edx int v42; // ebx int v43; // edi int v44; // esi int v45; // edx int v46; // eax signed int *v47; // ebp int v48; // edi int v49; // esi int v50; // ebx signed int v51; // edx signed int v52; // ebx int v53; // edi int v54; // esi signed int v55; // edx int v56; // eax int v57; // esi int v58; // eax _DWORD *v59; // edx signed int v60; // edi int v61; // ecx int v62; // edx int v63; // edi int v64; // ebx int v65; // eax int v66; // eax int v67; // edi signed int v68; // ebx int v69; // esi int v70; // edi int v71; // ebp int v72; // ebx _DWORD *v73; // eax int v74; // ecx int v75; // esi int v76; // edi int v77; // ebx int v78; // esi signed int v79; // edx int v80; // ebx int v81; // edi int v82; // esi signed int v83; // edx int v84; // eax int v85; // ebp int v86; // esi int v87; // edi int v88; // ebx int v89; // esi signed int v90; // edx int v91; // ebx int v92; // edi int v93; // esi signed int v94; // edx int v95; // eax int v96; // edi int v97; // ecx int v98; // eax int v99; // ebx int *v100; // edi int v101; // ebp int v102; // esi int v103; // edx int v104; // esi int v105; // ebx int v106; // ebp int v107; // edx int v108; // eax int v109; // esi int v110; // ebp int v111; // edi int v112; // ebp int v113[4]; // [esp+30h] [ebp-DCh] int v114[4]; // [esp+40h] [ebp-CCh] int v115[4]; // [esp+50h] [ebp-BCh] int v116[4]; // [esp+60h] [ebp-ACh] __int16 v117; // [esp+70h] [ebp-9Ch] __int16 v118; // [esp+74h] [ebp-98h] __int16 v119; // [esp+78h] [ebp-94h] __int16 v120; // [esp+7Ch] [ebp-90h] __int16 v121; // [esp+80h] [ebp-8Ch] __int16 v122; // [esp+84h] [ebp-88h] __int16 v123; // [esp+88h] [ebp-84h] int v124; // [esp+8Ch] [ebp-80h] int v125; // [esp+90h] [ebp-7Ch] int v126; // [esp+94h] [ebp-78h] int v127; // [esp+98h] [ebp-74h] int v128; // [esp+9Ch] [ebp-70h] int v129; // [esp+A0h] [ebp-6Ch] int v130; // [esp+A4h] [ebp-68h] int v131; // [esp+A8h] [ebp-64h] int v132; // [esp+ACh] [ebp-60h] int v133; // [esp+B0h] [ebp-5Ch] int v134; // [esp+B4h] [ebp-58h] int v135; // [esp+B8h] [ebp-54h] int v136; // [esp+BCh] [ebp-50h] int v137; // [esp+C0h] [ebp-4Ch] char v138; // [esp+C4h] [ebp-48h] unsigned int v139; // [esp+C8h] [ebp-44h] int v140; // [esp+CCh] [ebp-40h] int v141; // [esp+D0h] [ebp-3Ch] int v142; // [esp+D4h] [ebp-38h] int v143; // [esp+D8h] [ebp-34h] int v144; // [esp+DCh] [ebp-30h] int v145; // [esp+E0h] [ebp-2Ch] int v146; // [esp+E4h] [ebp-28h] int v147; // [esp+E8h] [ebp-24h] int v148; // [esp+ECh] [ebp-20h] int v149; // [esp+F0h] [ebp-1Ch] int v150; // [esp+F4h] [ebp-18h] int v151; // [esp+F8h] [ebp-14h] v4 = a3; v151 = a1[2]; v5 = *a2; v150 = 0; v6 = 0; if ( v5 <= 0 ) { v145 = a3[29]; } else { v145 = a3[29]; v7 = 0; v8 = v150; do { if ( a3[3576] ) { v9 = v6; } else { v9 = v6; if ( v145 != 1 ) { a2[v6 + 9] = 0; v5 = *a2; v145 = a3[29]; } } v10 = a2[13]; v113[v9] = *(_DWORD *)(v7 + v10 + 16); ++v6; v114[v9] = *(_DWORD *)(v7 + v10 + 12); v115[v9] = *(_DWORD *)(*(_DWORD *)(v7 + v10 + 20) + 8); v11 = *(_DWORD *)(v7 + v10 + 8) * *(_DWORD *)(v7 + v10 + 4); v8 += v11; v7 += 24; v116[v9] = v11; } while ( v6 < v5 ); v150 = v8; v4 = a3; } v12 = v4[3566]; v13 = v4[3567]; v14 = v4[15]; v135 = v4[3566]; v137 = v13; v149 = v14; if ( v5 == 1 ) { v136 = a2[13]; v15 = 8 * v12 / *(_DWORD *)(v136 + 4); v16 = 8 * v137 / *(_DWORD *)(v136 + 8); v109 = v4[19]; v149 *= v16; v129 = (v109 + v15 - 1) / v15; v148 = (abs(v4[20]) + v16 - 1) / v16; v150 = 1; v116[0] = 1; } else { v15 = 8 * v12; v16 = 8 * v13; v17 = 8 * v13 * v149; v18 = v4[30]; v19 = v4[31]; v149 = v17; v129 = v18; v148 = v19; } if ( v135 != 1 || v137 != 1 ) { v20 = 0; v21 = v4[3568]; v138 = 1; if ( v21 > 0 ) { v22 = 0; v23 = v138; v124 = v16; v125 = v15; while ( v23 ) { v24 = v4[3571]; v25 = *(_DWORD *)(v24 + v22 + 4); if ( v25 != *(_DWORD *)(v24 + v22 + 8) ) v23 = 0; if ( v25 != 1 && v25 != 2 ) v23 = 0; v22 += 16; if ( ++v20 >= v21 ) { v138 = v23; v16 = v124; v15 = v125; goto LABEL_20; } } v138 = 0; v16 = v124; v15 = v125; } } else { v138 = 0; } LABEL_20: v147 = v15 / a4; v26 = v15 / a4; v146 = v4[1] / v26; v27 = (v26 + v4[3] - 1) / v26; v28 = v16 / a4; v29 = v4[2] / v28; v30 = v4[4986]; v31 = (v28 + v4[4] - 1) / v28; v136 = (v28 + v4[4] - 1) / v28; v134 = v30 == 1 && v135 == 2; v137 = v30 == 1 && v137 == 2; if ( v146 ) v146 -= v134; if ( v29 ) v29 -= v137; if ( v27 < v129 ) v27 += v134; if ( v31 < v148 ) v136 = v137 + v31; v32 = a2[8]; if ( v32 <= v29 ) v32 = v29; if ( v145 == 1 && a1[14] ) { if ( !a2[7] ) { v97 = 0; if ( v32 > 0 ) { v124 = v4[4621]; v98 = v32; v99 = v129; v127 = v29; v100 = a2; v101 = (int)a1; v128 = v27; do { v102 = 0; if ( v99 > 0 ) { v125 = v97; v126 = v98; do { v103 = *v100; if ( *v100 > 0 ) { v130 = v102; v104 = v124; v129 = v99; v105 = 0; do { v106 = 0; if ( v116[v105] > 0 ) { v107 = v100[v105 + 9]; do { v118 = v107; v108 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 248))( a1, v114[v105], v113[v105], &v118, v104); LOWORD(v107) = v118; a2[v105 + 9] = v118; if ( v108 < 0 ) return -21; ++v106; } while ( v106 < v116[v105] ); v100 = a2; v103 = *a2; } ++v105; } while ( v105 < v103 ); v102 = v130; v99 = v129; v101 = (int)a1; } if ( sub_7BCDC0(v101, v100, v99, v148, v102, v125) ) return -25; ++v102; } while ( v102 < v99 ); v97 = v125; v98 = v126; } ++v97; } while ( v97 < v98 ); v129 = v99; v32 = v98; v29 = v127; v27 = v128; v4 = a3; } } } else if ( !a2[7] ) { v33 = *(_DWORD *)(v4[4620] + 40 * v32); v133 = v4[4620]; if ( v33 == -1 ) { v135 = v32; v34 = 40 * v32; v35 = v32; do { v34 -= 40; --v35; } while ( *(_DWORD *)(v133 + v34) == -1 ); v135 = v35; v4 = a3; result = sub_7BCBF0(v135, (int)a1, a2, a3); if ( result ) return result; if ( v135 < v32 ) { v144 = a3[4621]; v126 = v32; v127 = v29; v37 = a2; v38 = (int)a1; v128 = v27; v39 = v129; do { if ( v39 > 0 ) { v40 = 0; do { v41 = *v37; if ( *v37 > 0 ) { v145 = v40; v42 = 0; v43 = v144; v129 = v39; do { v44 = 0; if ( v116[v42] > 0 ) { v45 = v37[v42 + 9]; do { v117 = v45; v46 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 248))( a1, v114[v42], v113[v42], &v117, v43); LOWORD(v45) = v117; a2[v42 + 9] = v117; if ( v46 < 0 ) return -21; ++v44; } while ( v44 < v116[v42] ); v37 = a2; v41 = *a2; } ++v42; } while ( v42 < v41 ); v40 = v145; v39 = v129; v38 = (int)a1; } if ( sub_7BCDC0(v38, v37, v39, v148, v40, v135) ) return -25; ++v40; } while ( v40 < v39 ); v4 = a3; } sub_7BCD00(++v135, v38, v37, v4); } while ( v135 < v126 ); v129 = v39; v32 = v126; v29 = v127; v27 = v128; } } else { result = sub_7BCBF0(v32, (int)a1, a2, v4); if ( result ) return result; } } if ( v32 >= v136 ) goto LABEL_140; v135 = v134 + v27; v130 = 16 * v129; v125 = v129 << 7; v124 = v134 + v27 - 1; v126 = v32; v127 = v29; v47 = a2; v128 = v27; while ( 1 ) { v48 = v47[7]; if ( v48 < v146 ) { v144 = v4[4621]; v49 = v129; v50 = (int)a1; do { v51 = *v47; if ( *v47 > 0 ) { v145 = v48; v52 = 0; v53 = v144; do { v54 = 0; if ( v116[v52] > 0 ) { v55 = v47[v52 + 9]; do { v119 = v55; v56 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 248))( a1, v114[v52], v113[v52], &v119, v53); LOWORD(v55) = v119; a2[v52 + 9] = v119; if ( v56 < 0 ) return -21; ++v54; } while ( v54 < v116[v52] ); v47 = a2; v51 = *a2; } ++v52; } while ( v52 < v51 ); v48 = v145; v49 = v129; v50 = (int)a1; } if ( sub_7BCDC0(v50, v47, v49, v148, v48, v126) ) return -25; ++v48; } while ( v48 < v146 ); v4 = a3; v48 = v47[7]; } if ( !v4[4983] ) { v96 = v48 - v146; if ( v96 <= 0 ) v96 = 0; a1[11] = v147 * v4[12] * v96 + v4[8] + v149 / a4 * (v126 - v127); v48 = v47[7]; } if ( v48 <= v146 ) v48 = v146; if ( v48 < v128 ) break; LABEL_119: if ( v134 ) { sub_7BB760(v4, (signed int)a1, v47, v48, v126, v150, v4[4621], v148, v148, a4, v138); if ( v4[7] ) { if ( v4[29] != 1 ) { v47[7] = 0; v47[8] = 0; } } } v75 = v126 + 1; if ( v148 > v126 + 1 ) { if ( v4[29] == 1 && a1[14] ) { v87 = v128; if ( v128 < v129 ) { v144 = v4[4621]; v88 = (int)a1; v132 = v126 + 1; v89 = v129; while ( 1 ) { v90 = *v47; if ( *v47 > 0 ) break; LABEL_164: if ( sub_7BCDC0(v88, v47, v89, v148, v87, v126) ) return -25; if ( ++v87 >= v89 ) { v129 = v89; v75 = v132; v4 = a3; goto LABEL_138; } } v145 = v87; v91 = 0; v92 = v144; v129 = v89; while ( 1 ) { v93 = 0; if ( v116[v91] > 0 ) break; LABEL_162: if ( ++v91 >= v90 ) { v87 = v145; v89 = v129; v88 = (int)a1; goto LABEL_164; } } v94 = v47[v91 + 9]; while ( 1 ) { v123 = v94; v95 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 248))( a1, v114[v91], v113[v91], &v123, v92); LOWORD(v94) = v123; a2[v91 + 9] = v123; if ( v95 < 0 ) return -21; if ( ++v93 >= v116[v91] ) { v47 = a2; v90 = *a2; goto LABEL_162; } } } } else if ( *(_DWORD *)(v4[4620] + 40 * v126 + 40) == -1 ) { v76 = v128; if ( v128 < v129 ) { v131 = v4[4621]; v77 = (int)a1; v132 = v126 + 1; v78 = v129; while ( 1 ) { v79 = *v47; if ( *v47 > 0 ) break; LABEL_134: if ( sub_7BCDC0(v77, v47, v78, v148, v76, v126) ) return -25; if ( ++v76 >= v78 ) { v75 = v132; v4 = a3; goto LABEL_137; } } v133 = v76; v80 = 0; v81 = v131; while ( 1 ) { v82 = 0; if ( v116[v80] > 0 ) break; LABEL_132: if ( ++v80 >= v79 ) { v76 = v133; v78 = v129; v77 = (int)a1; goto LABEL_134; } } v83 = v47[v80 + 9]; while ( 1 ) { v122 = v83; v84 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 248))( a1, v114[v80], v113[v80], &v122, v81); LOWORD(v83) = v122; a2[v80 + 9] = v122; if ( v84 < 0 ) return -21; if ( ++v82 >= v116[v80] ) { v47 = a2; v79 = *a2; goto LABEL_132; } } } LABEL_137: sub_7BCD00(v75, (int)a1, v47, v4); } else { result = sub_7BCBF0(v126 + 1, (int)a1, v47, v4); if ( result ) return result; } } LABEL_138: v126 = v75; if ( v75 >= v136 ) { v32 = v75; v27 = v128; LABEL_140: if ( v137 ) { v134 += v27; if ( v146 < v134 ) { v126 = v32; v85 = v146; v86 = v129; do sub_7BB760(v4, (signed int)a1, a2, v85++, v126, v150, v4[4621], v86, v148, a4, v138); while ( v85 < v134 ); } } (*(void (**)(void))(v151 + 24))(); if ( v4[3574] < v4[3568] && v4[29] == 1 ) result = 0; else result = 2; return result; } } while ( 1 ) { v57 = 0; v133 = v4[4621]; v58 = *v47; if ( *v47 > 0 ) break; LABEL_103: if ( sub_7BCDC0((int)a1, v47, v129, v148, v48, v126) ) return -25; v73 = (_DWORD *)v4[4983]; if ( !v73 || *v73 ) sub_7BB760(v4, (signed int)a1, v47, v48, v126, v150, v4[4621], v129, v148, a4, v138); if ( v4[7] ) { if ( v4[29] == 1 ) { v74 = v48 + 1; } else if ( v134 && v48 == v146 ) { v74 = v48 + 1; } else if ( v137 && v126 == v127 ) { v74 = v48 + 1; } else { v74 = v48 + 1; if ( v48 != v124 ) { v110 = v126; result = 1; a2[7] = (v48 + 1) % v135; a2[8] = v110; v111 = v48 - v134; v4[3] = v111; v112 = v110 - v137; v4[4] = v112; v4[1] = v111; v4[2] = v112; return result; } v47[7] = 0; v47[8] = 0; } } else { v74 = v48 + 1; } v48 = v74; if ( v74 >= v128 ) goto LABEL_119; } v145 = v48; v144 = 16 * v48; while ( 1 ) { v59 = (_DWORD *)v4[4983]; if ( !v59 || *v59 ) break; v142 = 0; v60 = v47[13]; v61 = 24 * v57; v62 = *(_DWORD *)(24 * v57 + v60 + 8); if ( v62 > 0 ) { v63 = *(_DWORD *)(v61 + v60 + 4); v64 = v142; v139 = 2 * v57; v65 = v63; v131 = v57; while ( v65 <= 0 ) { LABEL_94: if ( ++v64 >= v62 ) { v57 = v131; v4 = a3; v58 = *v47; goto LABEL_101; } } v142 = v64; v141 = 0; v140 = 0; v143 = v61; while ( 1 ) { v121 = v47[v139 / 2 + 9]; v66 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 244))( a1, v114[v131], v113[v131], &v121, v133); v47[v139 / 2 + 9] = v121; if ( v66 < 0 ) return -21; v67 = v133; v68 = 0; v69 = v141 + v125 * *(_DWORD *)(v143 + v47[13] + 4) * (v142 + *(_DWORD *)(v143 + v47[13] + 8) * v126) + *(_DWORD *)(a3[4983] + 2 * v139 + 4) + v144 * *(_DWORD *)(v143 + v47[13] + 4); do { dword_BA2968(v69, v67, 16); v65 = *(_DWORD *)(v143 + v47[13] + 4); v69 += v65 * v130; v67 += 16; ++v68; } while ( v68 < 8 ); v132 = v47[13]; v133 = v67; v141 += 16; if ( ++v140 >= v65 ) { v64 = v142; v61 = v143; v62 = *(_DWORD *)(v143 + v132 + 8); goto LABEL_94; } } } LABEL_101: if ( ++v57 >= v58 ) { v48 = v145; goto LABEL_103; } } v70 = 0; if ( v116[v57] <= 0 ) goto LABEL_101; v143 = 2 * v57; v71 = v133; while ( 1 ) { v120 = *(int *)((char *)a2 + 2 * v143 + 36); v72 = (*(int (__cdecl **)(_DWORD *, int, int, __int16 *, int))(v151 + 244))(a1, v114[v57], v113[v57], &v120, v71); *(int *)((char *)a2 + 2 * v143 + 36) = v120; (*(void (__cdecl **)(int, int))(v151 + 272))(v71, v115[v57]); if ( v72 < 0 ) return -21; v71 += 128; if ( ++v70 >= v116[v57] ) { v133 = v71; v4 = a3; v47 = a2; v58 = *a2; goto LABEL_101; } } } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7C0050: using guessed type int var_DC[4]; // 7C0050: using guessed type int var_CC[4]; // 7C0050: using guessed type int var_BC[4]; // 7C0050: using guessed type int var_AC[4]; //----- (007C14F0) -------------------------------------------------------- signed int __cdecl sub_7C14F0(_DWORD *a1, signed int a2, signed int *a3, int *a4) { int v4; // eax int v5; // ecx int v6; // esi int v7; // edi int v8; // edx _DWORD *v9; // eax int v10; // ecx int v11; // esi int v12; // edi int v13; // edx int v14; // ecx int v15; // edi int v16; // esi int v17; // ecx int v18; // edx int v19; // eax int v20; // eax int v21; // eax signed int v22; // ebx _DWORD *v24; // eax int v25; // edx int v26; // eax signed int v27; // edx signed int v28; // eax int v29; // eax int v30; // [esp+14h] [ebp-18h] int v31; // [esp+18h] [ebp-14h] v30 = *(_DWORD *)(a2 + 8); *a1 = 0; v4 = a4[5]; if ( v4 ) { if ( v4 == 1 ) { v9 = (_DWORD *)v30; v10 = *(_DWORD *)(v30 + 56); *(_DWORD *)(v30 + 72) = *(_DWORD *)(v30 + 52); v11 = *(_DWORD *)(v30 + 60); v12 = *(_DWORD *)(v30 + 64); *(_DWORD *)(v30 + 76) = v10; v13 = *(_DWORD *)(v30 + 268); } else { v9 = (_DWORD *)v30; v14 = *(_DWORD *)(v30 + 40); *(_DWORD *)(v30 + 72) = *(_DWORD *)(v30 + 36); v11 = *(_DWORD *)(v30 + 44); v12 = *(_DWORD *)(v30 + 48); *(_DWORD *)(v30 + 76) = v14; v13 = *(_DWORD *)(v30 + 264); } v9[20] = v11; v9[21] = v12; v9[68] = v13; } else { v5 = *(_DWORD *)(v30 + 40); *(_DWORD *)(v30 + 72) = *(_DWORD *)(v30 + 36); v6 = *(_DWORD *)(v30 + 44); v7 = *(_DWORD *)(v30 + 48); *(_DWORD *)(v30 + 76) = v5; v8 = *(_DWORD *)(v30 + 264); *(_DWORD *)(v30 + 80) = v6; *(_DWORD *)(v30 + 84) = v7; *(_DWORD *)(v30 + 272) = v8; } v15 = a4[3]; v16 = a4[19]; if ( v15 < v16 && v15 ) { v17 = a4[20]; v18 = a4[2]; v31 = a4[4]; v19 = a4[1]; } else { v20 = a4[4]; v17 = a4[20]; v31 = a4[4]; if ( v20 < v17 && v20 ) { v18 = a4[2]; v19 = a4[1]; } else { v18 = a4[2]; if ( v18 <= 0 ) { v19 = a4[1]; if ( v19 <= 0 ) { v29 = *a4; if ( *a4 == 18 || v29 == 19 ) { if ( a4[4984] ) v22 = sub_7BCE40(a2, a3, a4, 8); else v22 = sub_7BF550(a2, a3, a4, 8); } else if ( v29 == 16 || v29 == 17 ) { if ( a4[4984] ) v22 = sub_7BCE40(a2, a3, a4, 4); else v22 = sub_7BF550(a2, a3, a4, 4); } else if ( v29 != 14 && v29 != 15 ) { if ( a4[4984] ) v22 = sub_7BCE40(a2, a3, a4, 1); else v22 = sub_7BF550(a2, a3, a4, 1); } else if ( a4[4984] ) { v22 = sub_7BCE40(a2, a3, a4, 2); } else { v22 = sub_7BF550(a2, a3, a4, 2); } goto LABEL_36; } } else { v19 = a4[1]; } } } if ( v16 >= v15 ) v16 = a4[3]; a4[3] = v16; if ( v17 >= v31 ) v17 = v31; a4[4] = v17; if ( v19 < 0 ) v19 = 0; a4[1] = v19; if ( v18 < 0 ) v18 = 0; a4[2] = v18; if ( !a4[4620] ) { v24 = operator new(0x50000u); a4[4620] = (int)v24; if ( !v24 ) return -5; v25 = *a4; if ( *a4 == 2 || v25 == 6 || v25 == 14 || v25 == 16 || v25 == 18 ) *v24 = *(_DWORD *)(a2 + 28); else *v24 = *(_DWORD *)(a2 + 16); *(_DWORD *)(a4[4620] + 4) = 0; *(_DWORD *)(a4[4620] + 8) = 0; *(_DWORD *)(a4[4620] + 12) = 0; *(_DWORD *)(a4[4620] + 16) = 0; v26 = a4[4620]; *(_DWORD *)(v26 + 24) = 0; *(_DWORD *)(v26 + 28) = 0; *(_DWORD *)(a4[4620] + 32) = 0; *(_BYTE *)(a4[4620] + 36) = *(_BYTE *)(a2 + 48); v27 = 1; v28 = 40; do { v27 += 5; *(_DWORD *)(v28 + a4[4620]) = -1; *(_DWORD *)(v28 + a4[4620] + 40) = -1; *(_DWORD *)(v28 + a4[4620] + 80) = -1; *(_DWORD *)(v28 + a4[4620] + 120) = -1; *(_DWORD *)(v28 + a4[4620] + 160) = -1; v28 += 200; } while ( v27 < 8187 ); *(_DWORD *)(40 * v27 + a4[4620]) = -1; } v21 = *a4; if ( *a4 == 18 || v21 == 19 ) { if ( a4[4984] ) v22 = sub_7BE1F0(a2, a3, a4, 8); else v22 = sub_7C0050((_DWORD *)a2, a3, a4, 8); } else if ( v21 == 16 || v21 == 17 ) { if ( a4[4984] ) v22 = sub_7BE1F0(a2, a3, a4, 4); else v22 = sub_7C0050((_DWORD *)a2, a3, a4, 4); } else if ( v21 != 14 && v21 != 15 ) { if ( a4[4984] ) v22 = sub_7BE1F0(a2, a3, a4, 1); else v22 = sub_7C0050((_DWORD *)a2, a3, a4, 1); } else if ( a4[4984] ) { v22 = sub_7BE1F0(a2, a3, a4, 2); } else { v22 = sub_7C0050((_DWORD *)a2, a3, a4, 2); } LABEL_36: if ( !v22 ) sub_7C1B60(a2); (*(void (**)(void))(v30 + 24))(); return v22; } //----- (007C1A30) -------------------------------------------------------- int __cdecl sub_7C1A30(int a1) { int result; // eax int v2; // edx int v3; // ecx result = a1; if ( *(_DWORD *)(a1 + 60) ) { *(_DWORD *)(a1 + 16) = a1 + 4160; *(_DWORD *)(a1 + 24) = a1 + 4160; *(_DWORD *)(a1 + 36) = 0; } else { v2 = *(_DWORD *)(a1 + 20); v3 = *(_DWORD *)(a1 + 32); *(_DWORD *)(a1 + 16) = v2; *(_DWORD *)(a1 + 24) = v3 + v2; *(_DWORD *)(a1 + 36) = v3; } *(_DWORD *)(a1 + 12) = 0; *(_BYTE *)(a1 + 48) = 0; *(_DWORD *)a1 = 0; *(_DWORD *)(a1 + 4) = 0; *(_DWORD *)(a1 + 56) = 0; return result; } //----- (007C1A80) -------------------------------------------------------- signed int __cdecl sub_7C1A80(int a1) { int v1; // ebp DWORD v2; // eax DWORD NumberOfBytesRead; // [esp+10h] [ebp-14h] v1 = 0; if ( !sub_791A40(*(HANDLE *)(a1 + 60), (LPVOID)(a1 + 64), 0x1000u, &NumberOfBytesRead) ) { v2 = NumberOfBytesRead; goto LABEL_5; } v2 = NumberOfBytesRead; if ( NumberOfBytesRead ) { LABEL_5: *(_DWORD *)(a1 + 36) = v2; *(_DWORD *)(a1 + 16) = a1 + 64; *(_DWORD *)(a1 + 24) = v2 + a1 + 64; return v1; } return -23; } //----- (007C1AE0) -------------------------------------------------------- signed int __cdecl sub_7C1AE0(_DWORD *a1, unsigned int a2, _DWORD *a3) { unsigned int v3; // ecx int v4; // edx signed int result; // eax *a3 = 0; if ( a1[15] ) { v3 = a1[9]; if ( a2 > v3 ) { result = sub_7C1A80((int)a1); if ( result ) return result; v3 = a1[9]; if ( a2 > v3 ) return -24; } } else { v3 = a1[9]; } v4 = a1[4]; if ( a2 > v3 ) return -5; a1[4] = a2 + v4; result = 0; a1[7] += a2; a1[9] = v3 - a2; *a3 = v4; return result; } //----- (007C1B60) -------------------------------------------------------- int __cdecl sub_7C1B60(int a1) { int result; // eax result = a1; *(_DWORD *)(a1 + 12) = 0; return result; } //----- (007C1B70) -------------------------------------------------------- signed int __cdecl sub_7C1B70(_DWORD *a1) { signed int result; // eax _BYTE *i; // edx char v3; // bl int v4; // edx unsigned __int8 *v5; // esi int v6; // ecx unsigned __int8 *v7; // edi result = 0; for ( i = (_BYTE *)a1[4]; ; i = (_BYTE *)a1[4] ) { while ( 1 ) { if ( (unsigned int)i >= a1[6] ) { if ( !a1[15] ) return -5; result = sub_7C1A80((int)a1); if ( result ) return result; } v3 = 0; v4 = a1[9]; if ( v4 > 0 ) { v5 = (unsigned __int8 *)a1[4]; v6 = a1[7]; do { --v4; ++v6; v7 = v5; a1[9] = v4; ++v5; a1[7] = v6; a1[4] = v5; if ( *v7 == 255 ) v3 = 1; } while ( v4 > 0 && !v3 ); } if ( v4 <= 0 ) break; LABEL_12: i = (_BYTE *)a1[4]; if ( (unsigned __int8)*i != 255 ) { if ( *i ) return result; ++a1[7]; a1[4] = ++i; --a1[9]; } } if ( !a1[15] ) break; result = sub_7C1A80((int)a1); if ( result ) return result; if ( v3 ) goto LABEL_12; } return -5; } //----- (007C1C40) -------------------------------------------------------- signed int __cdecl sub_7C1C40(_DWORD *a1) { int v1; // ecx int v2; // eax int v3; // ebp int v4; // ebx signed int v5; // ecx int v6; // edi int v7; // edx signed int v8; // ecx int v9; // ebx int v10; // ebx int v11; // edi int v12; // ebx int v13; // ebp int v14; // ebx int v15; // eax int v16; // eax _DWORD *v18; // edx int v19; // eax int v20; // eax int v21; // eax _DWORD *v22; // edx int v23; // eax int v24; // eax int v25; // eax int v26; // eax _DWORD *v27; // edx int v28; // eax int v29; // eax int v30; // eax _DWORD *v31; // edx int v32; // eax int v33; // eax int v34; // eax _DWORD *v35; // edx int v36; // eax int v37; // eax int v38; // eax int v39; // eax _DWORD *v40; // edx _DWORD *v41; // eax int v42; // [esp+4h] [ebp-28h] signed int v43; // [esp+8h] [ebp-24h] int v44; // [esp+Ch] [ebp-20h] char v45; // [esp+10h] [ebp-1Ch] char v46; // [esp+14h] [ebp-18h] int v47; // [esp+18h] [ebp-14h] v1 = a1[22]; v44 = a1[3580]; v46 = 1; v47 = a1[22]; if ( v1 == 4 || v1 == 1 || v1 == 5 || v1 == 255 || (v2 = a1[13], v2 == 4) || v2 == 3 ) { v46 = 0; a1[26] = 0; } else { a1[26] = 1; } v3 = 0; v45 = 0; v4 = 0; v5 = a1[3568]; a1[27] = 0; a1[3566] = 0; a1[3567] = 0; if ( v5 > 0 ) { v6 = a1[3571]; v7 = 0; v42 = 0; v43 = v5; v8 = 0; do { v9 = *(_DWORD *)(v7 + v6 + 4); if ( v42 < v9 ) { v42 = *(_DWORD *)(v7 + v6 + 4); a1[3566] = v9; } v10 = *(_DWORD *)(v7 + v6 + 8); if ( v3 < v10 ) { v3 = *(_DWORD *)(v7 + v6 + 8); a1[3567] = v10; } if ( *(_DWORD *)(v7 + v6 + 4) != 1 || *(_DWORD *)(v7 + v6 + 8) != 1 ) { if ( a1[13] == 3 ) { v45 = 0; a1[27] = 0; } else { v45 = 1; a1[27] = 1; } } v7 += 16; ++v8; } while ( v8 < v43 ); v4 = v42; v5 = v43; } v11 = a1[29]; if ( v11 == 1 ) { a1[3564] = 8; v12 = 8 * v4; a1[3565] = 8; v13 = 8 * v3; } else { v12 = 8 * v4; a1[3565] = v12; v13 = 8 * v3; a1[3564] = v13; } v14 = (a1[19] + v12 - 1) / v12; v15 = a1[20] + v13 - 1; a1[30] = v14; v16 = v15 / v13; a1[31] = v16; a1[3569] = v14; a1[3570] = v14 * v16; a1[6] = 0; if ( v5 == 3 && v47 == 3 && a1[13] == 3 ) { v41 = (_DWORD *)a1[3571]; if ( v41[1] != 2 || v41[2] != 1 || v41[5] != 1 || v41[6] != 1 || v41[9] != 1 || v41[10] != 1 ) return -8; } if ( v5 <= 0 || v5 > 255 ) return -14; if ( v11 && !a1[4984] ) { if ( a1[13] == 3 ) *(_DWORD *)(v44 + 160) = sub_7B94F0; else *(_DWORD *)(v44 + 160) = sub_7B8150; } else if ( v45 && v46 ) { if ( v5 != 3 || a1[12] != 3 ) { if ( v5 != 3 || a1[12] != 4 ) { if ( v5 == 4 && a1[12] == 4 && a1[13] == 5 ) { v18 = (_DWORD *)a1[3571]; v19 = v18[1]; if ( v19 != 2 || v18[2] != 1 || v18[5] != 1 || v18[6] != 1 || v18[9] != 1 || v18[10] != 1 || v18[13] != 2 || v18[14] != 1 ) { if ( v19 != 2 || v18[2] != 2 || v18[5] != 1 || v18[6] != 1 || v18[9] != 1 || v18[10] != 1 || v18[13] != 2 || v18[14] != 2 ) { *(_DWORD *)(v44 + 160) = sub_7B9490; } else { v20 = a1[4986]; if ( v20 ) { if ( v20 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 11; *(_DWORD *)(v44 + 160) = sub_7B5BA0; } } } else { v21 = a1[4986]; if ( v21 ) { if ( v21 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 12; *(_DWORD *)(v44 + 160) = sub_7B4A20; } } } } else if ( a1[13] == 5 ) { v22 = (_DWORD *)a1[3571]; v23 = v22[1]; if ( v23 != 2 || v22[2] != 2 || v22[5] != 1 || v22[6] != 1 || v22[9] != 1 || v22[10] != 1 ) { if ( v23 != 2 || v22[2] != 1 || v22[5] != 1 || v22[6] != 1 || v22[9] != 1 || v22[10] != 1 ) { *(_DWORD *)(v44 + 160) = sub_7B9490; } else { v24 = a1[4986]; if ( v24 ) { if ( v24 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 9; *(_DWORD *)(v44 + 160) = sub_7B21F0; } } } else { v25 = a1[4986]; if ( v25 ) { if ( v25 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 8; *(_DWORD *)(v44 + 160) = sub_7B3080; } } } } else { v26 = a1[13]; if ( v26 == 1 ) { v31 = (_DWORD *)a1[3571]; v32 = v31[1]; if ( v32 != 2 || v31[2] != 2 || v31[5] != 1 || v31[6] != 1 || v31[9] != 1 || v31[10] != 1 ) { if ( v32 != 2 || v31[2] != 1 || v31[5] != 1 || v31[6] != 1 || v31[9] != 1 || v31[10] != 1 ) { *(_DWORD *)(v44 + 160) = sub_7B9490; } else { v33 = a1[4986]; if ( v33 ) { if ( v33 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 5; *(_DWORD *)(v44 + 160) = sub_7B0220; } } } else { v34 = a1[4986]; if ( v34 ) { if ( v34 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 3; *(_DWORD *)(v44 + 160) = sub_7ADC90; } } } else if ( v26 == 2 ) { v27 = (_DWORD *)a1[3571]; v28 = v27[1]; if ( v28 != 2 || v27[2] != 2 || v27[5] != 1 || v27[6] != 1 || v27[9] != 1 || v27[10] != 1 ) { if ( v28 != 2 || v27[2] != 1 || v27[5] != 1 || v27[6] != 1 || v27[9] != 1 || v27[10] != 1 ) { *(_DWORD *)(v44 + 160) = sub_7B9490; } else { v29 = a1[4986]; if ( v29 ) { if ( v29 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 6; *(_DWORD *)(v44 + 160) = sub_7B0D60; } } } else { v30 = a1[4986]; if ( v30 ) { if ( v30 == 1 ) *(_DWORD *)(v44 + 160) = sub_7B9490; } else { a1[6] = 4; *(_DWORD *)(v44 + 160) = sub_7AED30; } } } } } else if ( !v45 || v46 ) { if ( v45 || !v46 ) { if ( !v45 && !v46 ) { if ( v5 == 1 && a1[12] == 1 ) { *(_DWORD *)(v44 + 160) = sub_7B7C70; v5 = a1[3568]; } if ( v5 != 1 || a1[12] == 1 ) { if ( v5 == 2 ) { *(_DWORD *)(v44 + 160) = sub_7B7DE0; } else if ( v5 != 3 || a1[12] != 1 ) { if ( v5 != 3 || a1[12] != 2 ) { if ( v5 != 3 || a1[12] != 3 ) { if ( v5 != 3 || a1[12] != 4 ) { if ( v5 != 4 || a1[12] != 3 ) { if ( v5 == 4 && a1[12] == 4 ) { a1[6] = 14; *(_DWORD *)(v44 + 160) = sub_7B65A0; } } else { a1[6] = 0; *(_DWORD *)(v44 + 160) = sub_7B7DE0; } } else if ( a1[13] == 5 ) { a1[6] = 13; *(_DWORD *)(v44 + 160) = sub_7B61C0; } else { *(_DWORD *)(v44 + 160) = sub_7B7DE0; } } else if ( a1[13] == 2 ) { a1[6] = 0; *(_DWORD *)(v44 + 160) = sub_7B7DE0; } else { a1[6] = 15; *(_DWORD *)(v44 + 160) = sub_7B6900; } } else { v40 = (_DWORD *)a1[3571]; if ( v40[1] == 2 && v40[2] == 1 && v40[5] == 1 && v40[6] == 1 && v40[9] == 1 && v40[10] == 1 ) { a1[6] = 19; *(_DWORD *)(v44 + 160) = sub_7B7860; } } } else { *(_DWORD *)(v44 + 160) = sub_7B7DE0; } } else { *(_DWORD *)(v44 + 160) = sub_7B7DE0; } } } else if ( v5 != 3 || a1[12] != 3 ) { if ( v5 != 3 || a1[12] != 4 ) { if ( v5 == 4 && a1[12] == 4 && a1[13] == 5 ) { a1[6] = 10; *(_DWORD *)(v44 + 160) = sub_7B3E30; } } else if ( a1[13] == 5 ) { a1[6] = 7; *(_DWORD *)(v44 + 160) = sub_7B17B0; } } else { v39 = a1[13]; if ( v39 == 1 ) { a1[6] = 1; *(_DWORD *)(v44 + 160) = sub_7AF390; } else if ( v39 == 2 ) { a1[6] = 2; *(_DWORD *)(v44 + 160) = sub_7AF7B0; } } } else if ( v5 != 3 || a1[12] != 1 ) { if ( v5 != 3 || a1[12] != 3 ) { if ( v5 != 3 || a1[12] != 4 ) { if ( v5 != 4 || a1[12] != 3 ) { if ( v5 == 4 && a1[12] == 4 ) { if ( a1[4984] ) *(_DWORD *)(v44 + 160) = sub_7AB980; else *(_DWORD *)(v44 + 160) = sub_7B8150; } } else if ( a1[4984] ) { *(_DWORD *)(v44 + 160) = sub_7AB980; } else { *(_DWORD *)(v44 + 160) = sub_7B8150; } } else if ( a1[4984] ) { *(_DWORD *)(v44 + 160) = sub_7AB980; } else { *(_DWORD *)(v44 + 160) = sub_7B8150; } } else if ( a1[13] == 2 ) { if ( a1[4984] ) *(_DWORD *)(v44 + 160) = sub_7AB980; else *(_DWORD *)(v44 + 160) = sub_7B8150; } else { v35 = (_DWORD *)a1[3571]; v36 = v35[1]; if ( v36 != 2 || v35[2] != 2 || v35[5] != 1 || v35[6] != 1 || v35[9] != 1 || v35[10] != 1 ) { if ( v36 != 2 || v35[2] != 1 || v35[5] != 1 || v35[6] != 1 || v35[9] != 1 || v35[10] != 1 ) { if ( a1[4984] ) *(_DWORD *)(v44 + 160) = sub_7AB980; else *(_DWORD *)(v44 + 160) = sub_7B8150; } else { a1[6] = 17; v37 = a1[4986]; if ( v37 ) { if ( v37 == 1 ) { if ( a1[4984] ) *(_DWORD *)(v44 + 160) = sub_7AB980; else *(_DWORD *)(v44 + 160) = sub_7B8150; } } else { *(_DWORD *)(v44 + 160) = sub_7B73E0; } } } else { a1[6] = 16; v38 = a1[4986]; if ( v38 ) { if ( v38 == 1 ) { if ( a1[4984] ) *(_DWORD *)(v44 + 160) = sub_7AB980; else *(_DWORD *)(v44 + 160) = sub_7B8150; } } else { *(_DWORD *)(v44 + 160) = sub_7B6DD0; } } } } else if ( a1[4984] ) { *(_DWORD *)(v44 + 160) = sub_7AB980; } else { *(_DWORD *)(v44 + 160) = sub_7B8150; } return 0; } // 7ADC90: using guessed type int sub_7ADC90(); // 7AED30: using guessed type int sub_7AED30(); // 7AF390: using guessed type int sub_7AF390(); // 7AF7B0: using guessed type int sub_7AF7B0(); // 7B0220: using guessed type int sub_7B0220(); // 7B0D60: using guessed type int sub_7B0D60(); // 7B17B0: using guessed type int sub_7B17B0(); // 7B21F0: using guessed type int sub_7B21F0(); // 7B3080: using guessed type int sub_7B3080(); // 7B3E30: using guessed type int sub_7B3E30(); // 7B4A20: using guessed type int sub_7B4A20(); // 7B5BA0: using guessed type int sub_7B5BA0(); // 7B61C0: using guessed type int sub_7B61C0(); // 7B65A0: using guessed type int sub_7B65A0(); // 7B6900: using guessed type int sub_7B6900(); // 7B6DD0: using guessed type int sub_7B6DD0(); // 7B73E0: using guessed type int sub_7B73E0(); // 7B7860: using guessed type int sub_7B7860(); // 7B7C70: using guessed type int sub_7B7C70(); // 7B7DE0: using guessed type int sub_7B7DE0(); // 7B9490: using guessed type int sub_7B9490(); // 7B94F0: using guessed type int sub_7B94F0(); //----- (007C29D0) -------------------------------------------------------- _BYTE *__cdecl sub_7C29D0(char a1, _DWORD *a2) { _BYTE *v2; // eax _BYTE *result; // eax v2 = (_BYTE *)(*a2)++; *v2 = -1; result = (_BYTE *)(*a2)++; *result = a1; return result; } //----- (007C29F0) -------------------------------------------------------- _DWORD *__cdecl sub_7C29F0(__int16 a1, _DWORD *a2) { _DWORD *result; // eax _BYTE *v3; // edi _BYTE *v4; // esi result = a2; v3 = (_BYTE *)(*a2)++; *v3 = HIBYTE(a1); v4 = (_BYTE *)(*a2)++; *v4 = a1; return result; } //----- (007C2A20) -------------------------------------------------------- int __cdecl sub_7C2A20(int a1) { int v1; // esi char *v2; // ecx char *v3; // edx char *v4; // ecx char *v5; // ecx char *v6; // edx char v7; // al char *v8; // ecx char *v9; // ecx char *v10; // ecx char *v12; // [esp+10h] [ebp-24h] char v13; // [esp+14h] [ebp-20h] v1 = *(_DWORD *)(a1 + 14320); v12 = &v13; sub_7C29D0(224, &v12); sub_7C29F0(16, &v12); v2 = v12++; *v2 = 74; v3 = v12++; *v3 = 70; v4 = v12++; *v4 = 73; v5 = v12++; *v5 = 70; v6 = v12++; *v6 = 0; sub_7C29F0(*(_WORD *)(a1 + 19964), &v12); v7 = *(_BYTE *)(a1 + 19966); v8 = v12++; *v8 = v7; sub_7C29F0(*(_WORD *)(a1 + 19968), &v12); sub_7C29F0(*(_WORD *)(a1 + 19970), &v12); v9 = v12++; *v9 = 0; v10 = v12++; *v10 = 0; return (*(int (__cdecl **)(char *, signed int, int))(v1 + 92))(&v13, 18, a1 + 14312); } //----- (007C2B40) -------------------------------------------------------- signed int __cdecl sub_7C2B40(int a1) { signed int v1; // edx void *v2; // eax signed int v3; // eax int v5; // [esp+0h] [ebp-A0h] void *v6; // [esp+4h] [ebp-9Ch] int v7; // [esp+8h] [ebp-98h] int v8; // [esp+Ch] [ebp-94h] _BYTE *v9; // [esp+10h] [ebp-90h] int i; // [esp+14h] [ebp-8Ch] LPCSTR lpString; // [esp+18h] [ebp-88h] int v12; // [esp+1Ch] [ebp-84h] _DWORD *v13; // [esp+6Ch] [ebp-34h] int v14; // [esp+70h] [ebp-30h] int v15; // [esp+74h] [ebp-2Ch] CPPEH_RECORD ms_exc; // [esp+88h] [ebp-18h] ms_exc.old_esp = (DWORD)&v5; v5 = *(_DWORD *)(a1 + 14320); ms_exc.registration.TryLevel = 0; v6 = 0; v7 = 0; if ( *(_DWORD *)(a1 + 19972) ) { v1 = *(unsigned __int16 *)(a1 + 19976); if ( !*(_WORD *)(a1 + 19976) ) { LABEL_10: ms_exc.registration.TryLevel = -1; return v7; } if ( v1 > 65531 ) { *(_WORD *)(a1 + 19976) = -5; v1 = 65531; } v8 = v1 + 4; v2 = operator new(v1 + 4); v6 = v2; if ( !v2 ) return -5; v9 = v2; dword_BA2964(v2, v8); sub_7C29D0(254, &v9); sub_7C29F0(v8 - 2, &v9); v3 = 0; for ( i = 0; v3 < *(unsigned __int16 *)(a1 + 19976); i = v3 ) { v9[v3] = *(_BYTE *)(v3 + *(_DWORD *)(a1 + 19972)); ++v3; } v7 = (*(int (__cdecl **)(void *, int, int, int *))(v5 + 92))(v6, v8, a1 + 14312, &v5); if ( !v7 ) { operator delete(v6); goto LABEL_10; } } else { lpString = aIntelRJpegLibr; v6 = &v12; dword_BA2964(&v12, 80); v13 = sub_795830(); v14 = lstrlenA(lpString); v15 = dword_BA2978((char *)v6 + 4, lpString, v13[5], &v5); v8 = v15 + 5; sub_7C29D0(254, &v6); sub_7C29F0(v8 - 2, &v6); if ( v15 <= v14 ) goto LABEL_10; v7 = (*(int (__cdecl **)(int *, int, int, int *))(v5 + 92))(&v12, v8, a1 + 14312, &v5); if ( !v7 ) goto LABEL_10; } return v7; } // BA2978: invalid function type has been ignored // BA2964: using guessed type int (__cdecl *dword_BA2964)(_DWORD, _DWORD); // BA2978: using guessed type int (__cdecl *dword_BA2978)(_DWORD, _DWORD, _DWORD, _DWORD); //----- (007C2DE0) -------------------------------------------------------- int __cdecl sub_7C2DE0(int a1) { int v1; // ebp char *v3; // [esp+10h] [ebp-14h] char v4; // [esp+14h] [ebp-10h] v1 = *(_DWORD *)(a1 + 8); v3 = &v4; sub_7C29D0(216, &v3); return (*(int (__cdecl **)(char *, signed int, int))(v1 + 92))(&v4, 2, a1); } //----- (007C2E30) -------------------------------------------------------- int __cdecl sub_7C2E30(int a1) { int v1; // ebp char *v3; // [esp+10h] [ebp-14h] char v4; // [esp+14h] [ebp-10h] v1 = *(_DWORD *)(a1 + 8); v3 = &v4; sub_7C29D0(217, &v3); return (*(int (__cdecl **)(char *, signed int, int))(v1 + 92))(&v4, 2, a1); } //----- (007C2E80) -------------------------------------------------------- int __cdecl sub_7C2E80(int a1, _DWORD *a2) { int v2; // esi int v3; // ebp char *v4; // ecx char v5; // al char *v6; // ecx char *v7; // eax int v8; // eax char *v9; // edx char *v10; // edi signed int v11; // eax signed int v12; // edi char *v13; // edx int v14; // edx char *v15; // esi char v16; // cl char *v17; // esi char *v19; // eax char *v20; // edi char v21; // bl char *v22; // eax char v23; // [esp+10h] [ebp-324h] char *v24; // [esp+31Ch] [ebp-18h] int v25; // [esp+320h] [ebp-14h] v2 = *(_DWORD *)(a1 + 8); v24 = &v23; v3 = 3 * a2[7] + 8; sub_7C29D0(192, &v24); sub_7C29F0(v3, &v24); v4 = v24++; *v4 = 8; sub_7C29F0(a2[2], &v24); sub_7C29F0(a2[1], &v24); v5 = *((_BYTE *)a2 + 28); v6 = v24++; *v6 = v5; if ( a2[7] == 1 ) { v19 = v24++; *v19 = 0; v20 = v24++; *v20 = 17; v21 = *(_BYTE *)(a2[10] + 12); v22 = v24++; *v22 = v21; } else { v7 = v24++; *v7 = 1; v8 = *(_DWORD *)(a2[10] + 8) + 16 * *(_DWORD *)(a2[10] + 4); v9 = v24++; *v9 = v8; LOBYTE(v9) = *(_BYTE *)(a2[10] + 12); v10 = v24++; *v10 = (char)v9; v11 = 2; if ( a2[7] >= 2 ) { v12 = 32; v25 = v2; do { v13 = v24++; *v13 = v11; v14 = *(_DWORD *)(v12 + a2[10] - 8) + 16 * *(_DWORD *)(v12 + a2[10] - 12); v15 = v24++; ++v11; *v15 = v14; v16 = *(_BYTE *)(v12 + a2[10] - 4); v17 = v24; v12 += 16; ++v24; *v17 = v16; } while ( v11 <= a2[7] ); v2 = v25; } } return (*(int (__cdecl **)(char *, int, int))(v2 + 92))(&v23, v3 + 2, a1); } //----- (007C3070) -------------------------------------------------------- int __cdecl sub_7C3070(int a1, _DWORD *a2) { int v2; // esi int v3; // ebp char *v4; // ecx char v5; // al char *v6; // edx int v7; // edx int v8; // eax int v9; // edi char *v10; // edx int v11; // edx char *v12; // esi char v13; // cl char *v14; // esi char *v16; // eax char *v17; // edi char v18; // bl char *v19; // eax char v20; // [esp+10h] [ebp-324h] char *v21; // [esp+31Ch] [ebp-18h] int v22; // [esp+320h] [ebp-14h] v2 = *(_DWORD *)(a1 + 8); v21 = &v20; v3 = 3 * a2[7] + 8; sub_7C29D0(194, &v21); sub_7C29F0(v3, &v21); v4 = v21++; *v4 = 8; sub_7C29F0(a2[2], &v21); sub_7C29F0(a2[1], &v21); v5 = *((_BYTE *)a2 + 28); v6 = v21++; *v6 = v5; v7 = a2[7]; if ( v7 == 1 ) { v16 = v21++; *v16 = 0; v17 = v21++; *v17 = 17; v18 = *(_BYTE *)(a2[10] + 12); v19 = v21++; *v19 = v18; } else { v8 = 0; if ( v7 > 0 ) { v9 = 0; v22 = v2; do { v10 = v21++; *v10 = v8; v11 = *(_DWORD *)(v9 + a2[10] + 8) + 16 * *(_DWORD *)(v9 + a2[10] + 4); v12 = v21++; ++v8; *v12 = v11; v13 = *(_BYTE *)(v9 + a2[10] + 12); v14 = v21; v9 += 16; ++v21; *v14 = v13; } while ( v8 < a2[7] ); v2 = v22; } } return (*(int (__cdecl **)(char *, int, int))(v2 + 92))(&v20, v3 + 2, a1); } //----- (007C3210) -------------------------------------------------------- int __cdecl sub_7C3210(int a1, int a2, char a3, __int16 *a4) { __int16 *v4; // ebx int v5; // edi signed int v6; // ebp char *v7; // ecx __int16 v8; // ax int v9; // edx char *v10; // ecx char *v11; // edx int v12; // eax char *v13; // edx char *v14; // edi int v15; // edi signed int v16; // eax char *v18; // [esp+10h] [ebp-A4h] char v19; // [esp+14h] [ebp-A0h] int v20; // [esp+9Ch] [ebp-18h] v4 = a4; v5 = *(_DWORD *)(a1 + 8); if ( a2 ) v6 = 131; else v6 = 67; v18 = &v19; sub_7C29D0(219, &v18); sub_7C29F0(v6, &v18); v7 = v18++; *v7 = a3 + 16 * a2; if ( a2 ) { v20 = v5; do { v8 = *v4; v9 = (*v4 & 0xFF00) >> 8; v10 = v18++; *v10 = v9; v11 = v18++; *v11 = v8; LOWORD(v10) = v4[1]; v12 = (v4[1] & 0xFF00) >> 8; v13 = v18++; v4 += 2; *v13 = v12; v14 = v18++; *v14 = (char)v10; } while ( (signed int)(a4 + 64) > (signed int)v4 ); v15 = v20; } else { v16 = 0; v20 = v5; do { v18[v16] = a4[v16]; v18[v16 + 1] = a4[v16 + 1]; v18[v16 + 2] = a4[v16 + 2]; v18[v16 + 3] = a4[v16 + 3]; v16 += 4; } while ( v16 < 64 ); v15 = v20; } return (*(int (__cdecl **)(char *, int, int))(v15 + 92))(&v19, v6 + 2, a1); } //----- (007C3380) -------------------------------------------------------- int __cdecl sub_7C3380(int a1, unsigned __int8 *a2, int a3, char a4, char a5) { int v5; // esi int v6; // ebx char *v8; // eax char *v9; // edx char *v10; // eax char *v11; // edx char *v12; // edx char *v13; // edx char *v14; // edx char *v15; // edx char *v16; // edx char *v17; // edx char *v18; // edx char *v19; // edx char *v20; // edx char *v21; // edx char *v22; // edx char *v23; // edx int v24; // ecx char *v25; // edi bool v26; // zf bool v27; // sf int v28; // edx char v29; // bl char *v30; // esi char v31; // bl char *v32; // ebp char v33; // bl char *v34; // esi char v35; // bl char *v36; // esi char v37; // bl char *v38; // esi int v39; // edi char v40; // al char *v41; // ebp char *v42; // [esp+10h] [ebp-16Ch] char v43; // [esp+14h] [ebp-168h] int v44; // [esp+158h] [ebp-24h] int v45; // [esp+15Ch] [ebp-20h] int v46; // [esp+160h] [ebp-1Ch] int v47; // [esp+164h] [ebp-18h] v45 = *(_DWORD *)(a1 + 8); v42 = &v43; sub_7C29D0(196, &v42); v5 = a2[15]; v44 = *a2 + a2[1] + a2[2] + a2[3] + a2[4] + a2[5] + a2[6] + a2[7] + a2[8] + a2[9] + a2[10] + a2[11] + a2[12] + a2[13] + a2[14]; v6 = v5 + v44 + 19; v46 = v5 + v44; sub_7C29F0(v5 + v44 + 19, &v42); if ( v6 > 324 ) return -6; v8 = v42++; *v8 = a5 + 16 * a4; LOBYTE(v8) = *a2; v9 = v42++; *v9 = (char)v8; LOBYTE(v9) = a2[1]; v10 = v42++; *v10 = (char)v9; LOBYTE(v10) = a2[2]; v11 = v42++; *v11 = (char)v10; LOBYTE(v10) = a2[3]; v12 = v42++; *v12 = (char)v10; LOBYTE(v10) = a2[4]; v13 = v42++; *v13 = (char)v10; LOBYTE(v10) = a2[5]; v14 = v42++; *v14 = (char)v10; LOBYTE(v10) = a2[6]; v15 = v42++; *v15 = (char)v10; LOBYTE(v10) = a2[7]; v16 = v42++; *v16 = (char)v10; LOBYTE(v10) = a2[8]; v17 = v42++; *v17 = (char)v10; LOBYTE(v10) = a2[9]; v18 = v42++; *v18 = (char)v10; LOBYTE(v10) = a2[10]; v19 = v42++; *v19 = (char)v10; LOBYTE(v10) = a2[11]; v20 = v42++; *v20 = (char)v10; LOBYTE(v10) = a2[12]; v21 = v42++; *v21 = (char)v10; LOBYTE(v10) = a2[13]; v22 = v42++; *v22 = (char)v10; LOBYTE(v10) = a2[14]; v23 = v42++; v24 = 0; *v23 = (char)v10; LOBYTE(v10) = a2[15]; v25 = v42; v26 = v46 == 0; v27 = v46 < 0; ++v42; *v25 = (char)v10; if ( !v27 && !v26 ) { if ( v5 + v44 >= 6 ) { v28 = v5 + v44 - 6; v47 = v6; do { v29 = *(_BYTE *)(v24 + a3); v30 = v42++; *v30 = v29; v31 = *(_BYTE *)(v24 + a3 + 1); v32 = v42++; *v32 = v31; v33 = *(_BYTE *)(v24 + a3 + 2); v34 = v42++; *v34 = v33; v35 = *(_BYTE *)(v24 + a3 + 3); v36 = v42++; *v36 = v35; v37 = *(_BYTE *)(v24 + a3 + 4); v38 = v42++; v24 += 5; *v38 = v37; } while ( v24 <= v28 ); v6 = v47; } v39 = v46; do { v40 = *(_BYTE *)(v24 + a3); v41 = v42++; ++v24; *v41 = v40; } while ( v24 < v39 ); } return (*(int (__cdecl **)(char *, int, int))(v45 + 92))(&v43, v6 + 2, a1); } //----- (007C3670) -------------------------------------------------------- int __cdecl sub_7C3670(int a1, int a2) { int v2; // ebp int v3; // esi int v4; // ecx int v5; // ebx int v6; // edi int v7; // eax unsigned __int8 *v8; // esi int result; // eax int v10; // ebx unsigned __int8 *v11; // edx int v12; // eax int v13; // esi char v14; // dl char v15; // cl char v16; // dl char v17; // dl char v18; // dl char v19; // dl char v20; // dl char v21; // dl char v22; // dl char v23; // dl char v24; // dl char v25; // dl char v26; // dl char v27; // dl char v28; // dl char v29; // dl char v30; // dl int v31; // edx char v32; // al char *v33; // ecx char v34; // al char *v35; // esi char v36; // al char *v37; // esi char *v38; // esi char v39; // al char *v40; // esi _DWORD *v41; // esi int v42; // ecx char v43; // al char *v44; // ebp int v45; // edx char *v46; // [esp+10h] [ebp-174h] char v47; // [esp+14h] [ebp-170h] char v48; // [esp+15h] [ebp-16Fh] char v49; // [esp+16h] [ebp-16Eh] char v50; // [esp+17h] [ebp-16Dh] int v51; // [esp+18h] [ebp-16Ch] int v52; // [esp+1Ch] [ebp-168h] int v53; // [esp+20h] [ebp-164h] int v54; // [esp+24h] [ebp-160h] int v55; // [esp+158h] [ebp-2Ch] int v56; // [esp+15Ch] [ebp-28h] int v57; // [esp+160h] [ebp-24h] int v58; // [esp+164h] [ebp-20h] int v59; // [esp+168h] [ebp-1Ch] int v60; // [esp+16Ch] [ebp-18h] _DWORD *v61; // [esp+170h] [ebp-14h] v2 = a2; v3 = *(_DWORD *)(a1 + 8); v4 = 0; v5 = 0; v6 = *(_DWORD *)(a2 + 144); if ( 2 * v6 > 0 ) { v7 = 0; v55 = *(_DWORD *)(a2 + 144); v56 = v3; do { v8 = *(unsigned __int8 **)(v7 + a2 + 14140); v5 += v8[15] + v8[14] + v8[13] + v8[12] + v8[11] + v8[10] + v8[9] + v8[8] + v8[7] + v8[6] + v8[5] + v8[4] + v8[3] + v8[2] + v8[1] + *v8; v7 += 12; ++v4; } while ( v4 < 2 * v6 ); LOWORD(v6) = v55; v3 = v56; } v46 = &v47; sub_7C29D0(196, &v46); sub_7C29F0(34 * v6 + v5 + 2, &v46); result = (*(int (__cdecl **)(char *, signed int, int))(v3 + 92))(&v47, 4, a1); if ( !result && 2 * *(_DWORD *)(a2 + 144) > 0 ) { v10 = 0; v58 = a2; v57 = 0; v56 = v3; while ( 1 ) { v11 = *(unsigned __int8 **)(v10 + v2 + 14140); v12 = v11[14] + v11[13] + v11[12] + v11[11] + v11[10] + v11[9] + v11[8] + v11[7] + v11[6] + v11[5] + v11[4] + v11[3] + v11[2] + v11[1] + *v11; v13 = v11[15]; v55 = v11[15]; v59 = v12 + v13; v60 = v12 + v13 + 17; if ( v60 > 324 ) break; v46 = &v47; v14 = *(_BYTE *)(v10 + v2 + 14149) + 16 * *(_BYTE *)(v10 + v2 + 14148); v46 = &v48; v47 = v14; v15 = **(_BYTE **)(v10 + v2 + 14140); v46 = &v49; v48 = v15; v16 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 1); v46 = &v50; v49 = v16; v17 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 2); v46 = (char *)&v51; v50 = v17; v18 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 3); v46 = (char *)&v51 + 1; LOBYTE(v51) = v18; v19 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 4); v46 = (char *)&v51 + 2; BYTE1(v51) = v19; v20 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 5); v46 = (char *)&v51 + 3; BYTE2(v51) = v20; v21 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 6); v46 = (char *)&v52; HIBYTE(v51) = v21; v22 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 7); v46 = (char *)&v52 + 1; LOBYTE(v52) = v22; v23 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 8); v46 = (char *)&v52 + 2; BYTE1(v52) = v23; v24 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 9); v46 = (char *)&v52 + 3; BYTE2(v52) = v24; v25 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 10); v46 = (char *)&v53; HIBYTE(v52) = v25; v26 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 11); v46 = (char *)&v53 + 1; LOBYTE(v53) = v26; v27 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 12); v46 = (char *)&v53 + 2; BYTE1(v53) = v27; v28 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 13); v46 = (char *)&v53 + 3; BYTE2(v53) = v28; v29 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 14); v46 = (char *)&v54; HIBYTE(v53) = v29; v30 = *(_BYTE *)(*(_DWORD *)(v10 + v2 + 14140) + 15); v46 = (char *)&v54 + 1; LOBYTE(v54) = v30; v31 = 0; if ( v12 + v13 > 0 ) { if ( v12 + v55 < 6 ) { v41 = (_DWORD *)(v58 + 14144); } else { v55 = v12 + v55 - 6; v61 = (_DWORD *)(v58 + 14144); do { v32 = *(_BYTE *)(v31 + *(_DWORD *)(v10 + v2 + 14144)); v33 = v46++; *v33 = v32; v34 = *(_BYTE *)(v31 + *(_DWORD *)(v10 + v2 + 14144) + 1); v35 = v46++; *v35 = v34; v36 = *(_BYTE *)(v31 + *(_DWORD *)(v10 + v2 + 14144) + 2); v37 = v46++; *v37 = v36; LOBYTE(v33) = *(_BYTE *)(v31 + *(_DWORD *)(v10 + v2 + 14144) + 3); v38 = v46++; *v38 = (char)v33; v39 = *(_BYTE *)(v31 + *(_DWORD *)(v10 + v2 + 14144) + 4); v40 = v46; v31 += 5; ++v46; *v40 = v39; } while ( v31 <= v55 ); v41 = v61; } v42 = v59; do { v43 = *(_BYTE *)(v31 + *v41); v44 = v46; ++v31; ++v46; *v44 = v43; } while ( v31 < v42 ); v2 = a2; } result = (*(int (__cdecl **)(char *, int, int))(v56 + 92))(&v47, v60, a1); if ( !result ) { v10 += 12; v58 += 12; v45 = 2 * *(_DWORD *)(v2 + 144); if ( ++v57 < v45 ) continue; } return result; } result = -6; } return result; } //----- (007C3B90) -------------------------------------------------------- int __cdecl sub_7C3B90(int a1, signed int a2, _BYTE *a3, _BYTE *a4) { signed int v4; // ebx int v5; // ebp char *v6; // edx char *v7; // ecx char v8; // al char *v9; // ecx signed int v10; // eax char *v11; // esi char v12; // bl char *v13; // esi char *v14; // esi char v15; // bl char *v16; // esi char *v17; // esi char v18; // bl char *v19; // esi char *v20; // edx int v21; // edx char *v22; // esi char *v23; // ecx char *v24; // esi char *v25; // edx char *v27; // ecx char *v28; // esi char *v29; // [esp+10h] [ebp-4Ch] char v30; // [esp+14h] [ebp-48h] int v31; // [esp+34h] [ebp-28h] int v32; // [esp+38h] [ebp-24h] int v33; // [esp+3Ch] [ebp-20h] int v34; // [esp+40h] [ebp-1Ch] int v35; // [esp+44h] [ebp-18h] v4 = a2; v5 = 2 * a2 + 6; v34 = *(_DWORD *)(a1 + 8); v29 = &v30; sub_7C29D0(218, &v29); sub_7C29F0(v5, &v29); v6 = v29++; *v6 = a2; if ( a2 == 1 ) { v27 = v29++; *v27 = 0; v28 = v29++; *v28 = 0; } else { v7 = v29++; *v7 = 1; v8 = *a4 + 16 * *a3; v9 = v29++; *v9 = v8; v10 = 2; if ( a2 >= 2 ) { if ( a2 - 2 >= 4 ) { v33 = 3; v32 = 4; v35 = a2 - 4; v31 = 2 * a2 + 6; do { v11 = v29++; *v11 = v10; v12 = a4[v10 - 1] + 16 * a3[v10 - 1]; v13 = v29++; *v13 = v12; v14 = v29++; *v14 = v33; v15 = a4[v10] + 16 * a3[v10]; v16 = v29++; *v16 = v15; v17 = v29++; *v17 = v32; v18 = a4[v10 + 1] + 16 * a3[v10 + 1]; v19 = v29++; v10 += 3; *v19 = v18; v33 += 3; v32 += 3; } while ( v10 <= v35 ); v5 = v31; v4 = a2; } v31 = v5; do { v20 = v29++; *v20 = v10; v21 = (unsigned __int8)a4[v10 - 1] + 16 * (unsigned __int8)a3[v10 - 1]; v22 = v29++; ++v10; *v22 = v21; } while ( v10 <= v4 ); v5 = v31; } } v23 = v29++; *v23 = 0; v24 = v29++; *v24 = 63; v25 = v29++; *v25 = 0; return (*(int (__cdecl **)(char *, int, int))(v34 + 92))(&v30, v5 + 2, a1); } //----- (007C3DB0) -------------------------------------------------------- int __cdecl sub_7C3DB0(int a1, int a2, int a3, int a4) { int v4; // esi int v5; // ebp char v6; // al char *v7; // edx int v8; // eax char *v9; // edi int v10; // edx char *v11; // edi char v12; // al char *v13; // edx char *v14; // eax int v15; // ecx char *v16; // edi char v18; // al char *v19; // edx int v20; // ecx char v21; // al char *v22; // ecx char *v23; // [esp+10h] [ebp-2Ch] char v24; // [esp+14h] [ebp-28h] int v25; // [esp+24h] [ebp-18h] int v26; // [esp+28h] [ebp-14h] v4 = *(_DWORD *)(a1 + 8); v5 = 2 * *(_DWORD *)a2 + 6; v23 = &v24; sub_7C29D0(218, &v23); sub_7C29F0(v5, &v23); v6 = *(_BYTE *)a2; v7 = v23++; *v7 = v6; if ( *(_DWORD *)a2 == 1 ) { v18 = **(_BYTE **)(a2 + 52); v19 = v23++; *v19 = v18; v20 = **(_DWORD **)(a2 + 52); LOBYTE(v19) = 16 * *(_BYTE *)(v20 + a3); v21 = *(_BYTE *)(v20 + a4); v22 = v23++; *v22 = v21 + (_BYTE)v19; } else { v8 = 0; if ( *(_DWORD *)a2 > 0 ) { v26 = v5; v25 = v4; do { v9 = v23++; *v9 = v8; v10 = *(unsigned __int8 *)(a4 + v8) + 16 * *(unsigned __int8 *)(a3 + v8); v11 = v23++; ++v8; *v11 = v10; } while ( v8 < *(_DWORD *)a2 ); v5 = v26; v4 = v25; } } v12 = *(_BYTE *)(a2 + 8); v13 = v23++; *v13 = v12; LOBYTE(v13) = *(_BYTE *)(a2 + 12); v14 = v23++; *v14 = (char)v13; v15 = *(_DWORD *)(a2 + 20) + 16 * *(_DWORD *)(a2 + 16); v16 = v23++; *v16 = v15; return (*(int (__cdecl **)(char *, int, int))(v4 + 92))(&v24, v5 + 2, a1); } //----- (007C3F00) -------------------------------------------------------- int __cdecl sub_7C3F00(__int16 a1, int a2) { int v2; // ebx char *v4; // [esp+10h] [ebp-1Ch] char v5; // [esp+14h] [ebp-18h] v2 = *(_DWORD *)(a2 + 8); v4 = &v5; sub_7C29D0(221, &v4); sub_7C29F0(4, &v4); sub_7C29F0(a1, &v4); return (*(int (__cdecl **)(char *, signed int, int))(v2 + 92))(&v5, 6, a2); } //----- (007C3F70) -------------------------------------------------------- int __cdecl sub_7C3F70(int a1, int a2) { int v2; // ebp char v3; // dl int result; // eax char *v5; // [esp+10h] [ebp-14h] char v6; // [esp+14h] [ebp-10h] v2 = *(_DWORD *)(a2 + 8); switch ( a1 ) { case 0: v3 = -48; goto LABEL_10; case 1: v3 = -47; goto LABEL_10; case 2: v3 = -46; goto LABEL_10; case 3: v3 = -45; goto LABEL_10; case 4: v3 = -44; goto LABEL_10; case 5: v3 = -43; goto LABEL_10; case 6: v3 = -42; goto LABEL_10; case 7: v3 = -41; LABEL_10: v5 = &v6; sub_7C29D0(v3, &v5); result = (*(int (__cdecl **)(char *, signed int, int))(v2 + 92))(&v6, 2, a2); break; default: result = -25; break; } return result; } //----- (007C4010) -------------------------------------------------------- int __cdecl sub_7C4010(char a1, int a2) { int v2; // ebp char *v3; // edx char *v4; // eax char *v5; // edx char *v6; // edx char *v7; // edx char *v8; // edx char *v10; // [esp+10h] [ebp-24h] char v11; // [esp+14h] [ebp-20h] v2 = *(_DWORD *)(a2 + 14320); v10 = &v11; sub_7C29D0(238, &v10); sub_7C29F0(14, &v10); v3 = v10++; *v3 = 65; v4 = v10++; *v4 = 100; v5 = v10++; *v5 = 111; v6 = v10++; *v6 = 98; v7 = v10++; *v7 = 101; sub_7C29F0(*(_WORD *)(a2 + 19952), &v10); sub_7C29F0(*(_WORD *)(a2 + 19954), &v10); sub_7C29F0(*(_WORD *)(a2 + 19956), &v10); v8 = v10++; *v8 = a1; return (*(int (__cdecl **)(char *, signed int, int))(v2 + 92))(&v11, 16, a2 + 14312); } //----- (007C4110) -------------------------------------------------------- signed int __cdecl sub_7C4110(_DWORD *a1, int a2, int *a3) { _DWORD *v3; // edi int *v4; // ebx signed int v5; // ebp int v6; // ecx int v7; // eax int v8; // edx int v9; // esi int v10; // edx int v11; // ebx int v12; // ecx int v13; // ebp int v14; // ecx int v15; // ebp int v16; // ecx int v17; // ecx int v18; // esi int v19; // eax int v20; // ecx int v21; // eax int v22; // eax _WORD *v23; // ebp _DWORD *v24; // ecx int v25; // edx int v26; // ecx int v27; // ebp int v28; // ebx int v29; // edi int v30; // edx int v31; // esi int v32; // eax int v33; // ebp signed int v34; // ebx int v35; // esi int v36; // edx _WORD *v37; // esi int v38; // ebx int v39; // ebp int v40; // edi int v41; // esi int v42; // edx int v43; // edi int v44; // ebx _DWORD *v45; // eax int v46; // eax int v47; // edx int v49; // eax int v50; // esi int v51; // ebp int v52; // et2 int v53[4]; // [esp+18h] [ebp-A4h] int v54[4]; // [esp+28h] [ebp-94h] int v55[4]; // [esp+38h] [ebp-84h] int v56[4]; // [esp+48h] [ebp-74h] int v57; // [esp+58h] [ebp-64h] int v58; // [esp+5Ch] [ebp-60h] _WORD *v59; // [esp+60h] [ebp-5Ch] int v60; // [esp+64h] [ebp-58h] int v61; // [esp+68h] [ebp-54h] int v62; // [esp+6Ch] [ebp-50h] _DWORD *v63; // [esp+70h] [ebp-4Ch] int v64; // [esp+74h] [ebp-48h] int v65; // [esp+78h] [ebp-44h] int v66; // [esp+7Ch] [ebp-40h] int v67; // [esp+80h] [ebp-3Ch] int v68; // [esp+84h] [ebp-38h] int v69; // [esp+88h] [ebp-34h] int v70; // [esp+8Ch] [ebp-30h] int v71; // [esp+90h] [ebp-2Ch] int v72; // [esp+94h] [ebp-28h] int v73; // [esp+98h] [ebp-24h] int v74; // [esp+9Ch] [ebp-20h] int v75; // [esp+A0h] [ebp-1Ch] int v76; // [esp+A4h] [ebp-18h] int v77; // [esp+A8h] [ebp-14h] v3 = a1; v4 = a3; v5 = 0; v6 = *(_DWORD *)(a2 + 8); v7 = 0; v61 = 0; v8 = *a3; if ( *a3 <= 0 ) { LABEL_10: v18 = v4[8]; v60 = a1[31]; if ( v18 < v60 ) { v19 = a1[30]; v57 = v5; v77 = v19; v75 = v8; v58 = v6; v20 = v60; while ( 1 ) { v21 = v4[7]; if ( v21 < v77 ) break; LABEL_55: if ( ++v18 >= v20 ) { v5 = v57; v6 = v58; goto LABEL_57; } } v68 = v18 << 7; v67 = (v61 << 6) - 1; v66 = v61 << 6; v65 = v21; v64 = v18; v22 = v75; while ( 1 ) { v23 = (_WORD *)v3[4621]; v24 = (_DWORD *)v3[4983]; if ( v24 ) { v25 = 0; if ( v22 > 0 ) { v60 = v4[13]; v59 = v23; v63 = v24; v69 = 16 * v65; v26 = v60; do { v27 = 0; v28 = *(_DWORD *)(24 * v25 + v26 + 8); if ( v28 > 0 ) { v62 = *(_DWORD *)(24 * v25 + v26 + 4); v72 = 16 * v25; v71 = 2 * v25; v29 = (int)v63; v76 = 24 * v25; v70 = v25; v30 = v62; do { v31 = 0; if ( v30 > 0 ) { v32 = v77; v74 = v27 << 7; v73 = v27; while ( 1 ) { v33 = v74 * v32 * v30 + v30 * v68 * v32 * v28 + v69 * *(_DWORD *)(a1[3571] + v72 + 4) + *(_DWORD *)(v29 + 2 * v71 + 4) + 16 * v31; v34 = 0; v75 = v31; v35 = (int)v59; do { dword_BA2968(v35, v33, 16); v32 = a1[30]; v26 = a3[13]; v30 = *(_DWORD *)(v76 + v26 + 4); v33 += v30 * 16 * a1[30]; v35 += 16; ++v34; } while ( v34 < 8 ); v59 = (_WORD *)v35; v31 = v75 + 1; if ( v75 + 1 >= v30 ) break; v29 = a1[4983]; v28 = *(_DWORD *)(v76 + v26 + 8); } v77 = v32; v27 = v73; v29 = a1[4983]; v28 = *(_DWORD *)(v76 + v26 + 8); } ++v27; } while ( v27 < v28 ); v63 = (_DWORD *)v29; v25 = v70; v22 = *a3; } ++v25; } while ( v25 < v22 ); v24 = v63; v4 = a3; v3 = a1; v23 = (_WORD *)a1[4621]; } if ( *v24 ) { v36 = v67; if ( v66 ) { do { *v23 -= 128; ++v23; --v36; } while ( v36 != -1 ); v23 = (_WORD *)v3[4621]; v24 = (_DWORD *)v3[4983]; } } } else { (*(void (__cdecl **)(_DWORD *, int, int))(v58 + 96))(v3, v65, v64); v24 = (_DWORD *)v3[4983]; } if ( (!v24 || *v24) && v61 > 0 ) { v37 = v23; v59 = v23; v38 = 0; v39 = v61; v40 = v58; do { (*(void (__cdecl **)(_WORD *))(v40 + 68))(v37); v37 += 64; ++v38; } while ( v38 < v39 ); v58 = v40; v23 = v59; v4 = a3; v3 = a1; } v41 = 0; v22 = *v4; if ( *v4 > 0 ) break; LABEL_52: if ( v3[7] ) { v49 = v65; v50 = v64; v6 = v58; v3[3] = v65; v51 = v3[30]; v3[4] = v50; v52 = (v49 + 1) % v51; v4[7] = v52; if ( !v52 ) ++v50; v4[8] = v50; v5 = 1; goto LABEL_57; } v47 = v3[30]; ++v65; v77 = v47; if ( v65 >= v47 ) { v75 = v22; v18 = v64; v20 = v3[31]; goto LABEL_55; } } v42 = (int)v4; while ( 1 ) { v43 = 0; if ( v53[v41] > 0 ) break; LABEL_50: v42 += 4; if ( ++v41 >= v22 ) { v3 = a1; goto LABEL_52; } } v44 = v58; v60 = v42 + 36; v62 = v42; while ( 1 ) { v45 = (_DWORD *)a1[4983]; if ( !v45 || *v45 ) (*(void (__cdecl **)(_WORD *, int))(v44 + 260))(v23, v56[v41]); v46 = (*(int (__cdecl **)(int, int, int, int, _WORD *))(v44 + 240))(a2, v54[v41], v55[v41], v60, v23); if ( v46 ) break; v23 += 64; if ( ++v43 >= v53[v41] ) { v57 = 0; v42 = v62; v58 = v44; v4 = a3; v22 = *a3; goto LABEL_50; } } v5 = v46; v6 = v44; } } else { v9 = 0; v10 = 0; v11 = v61; v57 = 0; v58 = v6; while ( 1 ) { if ( !a1[3576] ) a3[v7 + 9] = 0; v12 = *(_DWORD *)(v10 + a3[13] + 4) * *(_DWORD *)(v10 + a3[13] + 8); v11 += v12; v13 = *((char *)a1 + v7 + 14236); v53[v7] = v12; v14 = a1[*((char *)a1 + v7 + 14240) + 3521]; v54[v7] = v14; v15 = a1[v13 + 3517]; v55[v7] = v15; if ( !v14 ) break; if ( !v15 ) { v6 = v58; goto LABEL_65; } v16 = a1[*(_DWORD *)(v9 + a1[3571] + 12) + 3513]; v56[v7] = v16; if ( !v16 ) { v6 = v58; v5 = -18; goto LABEL_57; } v9 += 16; v10 += 24; ++v7; v17 = *a3; if ( v7 >= *a3 ) { v61 = v11; v8 = v17; v5 = v57; v6 = v58; v4 = a3; goto LABEL_10; } } v6 = v58; LABEL_65: v5 = -17; } LABEL_57: (*(void (**)(void))(v6 + 24))(); return v5; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7C4110: using guessed type int var_A4[4]; // 7C4110: using guessed type int var_94[4]; // 7C4110: using guessed type int var_84[4]; // 7C4110: using guessed type int var_74[4]; //----- (007C46B0) -------------------------------------------------------- int __cdecl sub_7C46B0(_DWORD *a1) { _DWORD *v1; // esi int v2; // ecx int v3; // ebx int v4; // eax int v5; // ecx _DWORD *v6; // edx int v7; // edi int v8; // ebp int v9; // ebx int v10; // ebp int v11; // edx _WORD *v12; // ebx _DWORD *v13; // ecx int v14; // ebp int v15; // eax int v16; // edx int v17; // ecx int v18; // ebx int v19; // eax int v20; // ebp int v21; // edi int v22; // ecx int v23; // esi int v24; // ebx signed int v25; // ebp int v26; // esi int v27; // eax int v28; // edi _WORD *v29; // ebp int v30; // ebx int v31; // esi int v32; // ebp int v33; // eax _DWORD *v34; // edx int v35; // esi int v36; // edi int v37; // ecx bool v38; // sf unsigned __int8 v39; // of int v41[4]; // [esp+10h] [ebp-7Ch] int v42[4]; // [esp+20h] [ebp-6Ch] int v43; // [esp+30h] [ebp-5Ch] int v44; // [esp+34h] [ebp-58h] _WORD *v45; // [esp+38h] [ebp-54h] int v46; // [esp+3Ch] [ebp-50h] _DWORD *v47; // [esp+40h] [ebp-4Ch] int v48; // [esp+44h] [ebp-48h] int v49; // [esp+48h] [ebp-44h] int v50; // [esp+4Ch] [ebp-40h] int v51; // [esp+50h] [ebp-3Ch] int v52; // [esp+54h] [ebp-38h] int v53; // [esp+58h] [ebp-34h] int v54; // [esp+5Ch] [ebp-30h] int v55; // [esp+60h] [ebp-2Ch] int v56; // [esp+64h] [ebp-28h] int v57; // [esp+68h] [ebp-24h] int v58; // [esp+6Ch] [ebp-20h] int v59; // [esp+70h] [ebp-1Ch] int v60; // [esp+74h] [ebp-18h] v1 = a1; v2 = a1[4985]; v3 = 0; v59 = a1[3580]; v4 = 0; v60 = v2; v5 = a1[3568]; if ( v5 > 0 ) { v6 = (_DWORD *)a1[3571]; do { v7 = v6[3]; v8 = v6[1] * v6[2]; v4 += v8; v6 += 4; v41[v3] = v8; v42[v3++] = a1[v7 + 3513]; } while ( v3 < v5 ); } v9 = 0; v10 = a1[31]; if ( v10 > 0 ) { v11 = a1[30]; v58 = v4 << 6; v57 = (v4 << 6) - 1; v51 = v4 << 7; v52 = v4; do { if ( v11 > 0 ) { v48 = v9; v50 = 0; do { v12 = (_WORD *)v1[4621]; v13 = (_DWORD *)v1[4983]; if ( v13 ) { v14 = 0; v15 = v1[3568]; if ( v15 > 0 ) { v56 = v1[3571]; v45 = v12; v46 = v11; v47 = v13; v16 = v56; v49 = 16 * v50; do { v17 = 0; v43 = 16 * v14; v18 = *(_DWORD *)(16 * v14 + v16 + 8); if ( v18 > 0 ) { v19 = *(_DWORD *)(v43 + v16 + 4); v44 = 2 * v14; v53 = v14; v20 = (int)v47; do { v21 = 0; if ( v19 > 0 ) { v55 = v17; v22 = v46; v23 = v44; while ( 1 ) { v24 = 16 * v21 + v55 * (v22 << 7) * v19 + v19 * v49 + *(_DWORD *)(v20 + 2 * v23 + 4) + v19 * v48 * (v22 << 7) * v18; v25 = 0; v54 = v21; v26 = (int)v45; do { dword_BA2968(v26, v24, 16); v22 = a1[30]; v16 = a1[3571]; v19 = *(_DWORD *)(v43 + v16 + 4); v24 += v19 * 16 * a1[30]; v26 += 16; ++v25; } while ( v25 < 8 ); v45 = (_WORD *)v26; v23 = v44; v21 = v54 + 1; if ( v54 + 1 >= v19 ) break; v20 = a1[4983]; v18 = *(_DWORD *)(v43 + v16 + 8); } v46 = v22; v17 = v55; v1 = a1; v20 = a1[4983]; v18 = *(_DWORD *)(v43 + v16 + 8); } ++v17; } while ( v17 < v18 ); v47 = (_DWORD *)v20; v14 = v53; v15 = v1[3568]; } ++v14; } while ( v14 < v15 ); v13 = v47; v12 = (_WORD *)v1[4621]; } if ( *v13 ) { v27 = v57; if ( v58 ) { do { *v12 -= 128; ++v12; --v27; } while ( v27 != -1 ); v12 = (_WORD *)v1[4621]; } } } else { (*(void (__cdecl **)(_DWORD *, int, int))(v59 + 96))(v1, v50, v48); } v28 = 0; if ( v52 > 0 ) { v29 = v12; v45 = v12; v30 = v52; v31 = v59; do { (*(void (__cdecl **)(_WORD *))(v31 + 68))(v29); v29 += 64; ++v28; } while ( v28 < v30 ); v12 = v45; v1 = a1; } v32 = 0; v33 = v1[3568]; if ( v33 > 0 ) { v34 = v1; v35 = v59; do { v36 = 0; v37 = v41[v32]; if ( v37 > 0 ) { do { (*(void (__fastcall **)(int, _DWORD *, _WORD *, int))(v35 + 260))(v37, v34, v12, v42[v32]); v12 += 64; ++v36; } while ( v36 < v41[v32] ); v34 = a1; v33 = a1[3568]; } ++v32; } while ( v32 < v33 ); v1 = v34; } dword_BA2968(v60, v1[4621], v51); v11 = v1[30]; v39 = __OFSUB__(v50 + 1, v11); v38 = v50 + 1 - v11 < 0; v60 += v51; ++v50; } while ( v38 ^ v39 ); v9 = v48; v10 = v1[31]; } ++v9; } while ( v9 < v10 ); } return 0; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7C46B0: using guessed type int var_7C[4]; // 7C46B0: using guessed type int var_6C[4]; //----- (007C4A10) -------------------------------------------------------- int __cdecl sub_7C4A10(_DWORD *a1, int a2, int *a3, int a4) { _DWORD *v4; // eax int v5; // esi int v6; // ebp int v7; // ebx int v8; // ecx int v9; // edx int v10; // edi int v11; // ebp int v12; // ecx int v13; // edx int v14; // ebx int v15; // edi int v16; // esi int v17; // ebp int v18; // ebx int v19; // ecx int v20; // ebp signed __int16 *v21; // edi signed int *v22; // esi signed int v23; // esi int v24; // ebx int v25; // eax int v26; // edi int v27; // ebx int v28; // edx int v29; // esi int v30; // edi int v31; // ecx _DWORD *v32; // ebp int v33; // ebx int v34; // edx int v35; // ecx int v36; // esi int v37; // ebp int v38; // ebx _DWORD *v39; // esi char v41; // [esp+20h] [ebp-44Ch] int v42; // [esp+408h] [ebp-64h] int v43; // [esp+40Ch] [ebp-60h] int v44; // [esp+410h] [ebp-5Ch] int v45; // [esp+414h] [ebp-58h] int v46; // [esp+418h] [ebp-54h] int v47; // [esp+41Ch] [ebp-50h] _DWORD *v48; // [esp+420h] [ebp-4Ch] char *v49; // [esp+424h] [ebp-48h] int v50; // [esp+428h] [ebp-44h] int v51; // [esp+42Ch] [ebp-40h] int v52; // [esp+430h] [ebp-3Ch] int v53; // [esp+434h] [ebp-38h] int v54; // [esp+438h] [ebp-34h] signed int *v55; // [esp+43Ch] [ebp-30h] int v56; // [esp+440h] [ebp-2Ch] int v57; // [esp+444h] [ebp-28h] _DWORD *v58; // [esp+448h] [ebp-24h] int v59; // [esp+44Ch] [ebp-20h] int v60; // [esp+450h] [ebp-1Ch] int v61; // [esp+454h] [ebp-18h] v4 = a1; v5 = 0; v47 = *(_DWORD *)(a2 + 8); v6 = 0; v7 = a1[3568]; v42 = 0; if ( v7 > 0 ) { v8 = a1[3571]; v9 = 0; do { v10 = *(_DWORD *)(v9 + v8 + 4) * *(_DWORD *)(v9 + v8 + 8); *(&v43 + v5) = v10; v6 += v10; v9 += 16; ++v5; } while ( v5 < v7 ); } v11 = v6 << 6; v12 = a1[30]; v13 = v12 * v11; if ( a3[2] || a3[3] ) { v22 = (signed int *)a3[13]; v55 = v22; v23 = *v22; v56 = *((char *)a1 + v23 + 14236); v24 = 0; v54 = 0; if ( v23 > 0 ) { if ( v23 >= 6 ) { v25 = v54; v57 = v23 - 6; do { v25 += *(&v47 + v24) + *(&v46 + v24) + *(&v45 + v24) + *(&v44 + v24) + *(&v43 + v24); v24 += 5; } while ( v24 <= v23 - 6 ); v54 = v25; v4 = a1; } v26 = v54; do v26 += *(&v43 + v24++); while ( v24 < v23 ); v54 = v26; } v57 = 0; v27 = v4[31]; if ( v27 <= 0 ) { v39 = (_DWORD *)(a4 + 1028 * v56); } else { v28 = 2 * v13; v53 = v55[2]; v54 <<= 7; v58 = (_DWORD *)(a4 + 1028 * v56); v29 = v57; v30 = v53; v52 = v12; v50 = 2 * v11; do { v31 = 0; if ( v30 > 0 ) { v32 = 0; v59 = v29 * v28; v33 = v52; v57 = v29; v51 = v28; while ( (signed int)v32 + v57 * 8 * v30 < v4[20] ) { if ( v33 > 0 ) { v56 = v55[1]; v34 = 0; v61 = 0; v48 = v32; v60 = v31; v35 = v56; do { v36 = v34 + v59 + v4[4985] + v54 + v60 * (v30 << 7); v37 = 0; if ( v35 > 0 ) { v38 = 0; v49 = (char *)v34; while ( v38 + v61 * 8 * v35 < a1[19] ) { if ( a3[4] ) sub_798590(a2, v36, a3[2], a3[3], a3[5], (int)&v41, &v42, v58); else sub_798450(a2, v36, a3[2], a3[3], a3[5], v58); v36 += 128; v38 += 8; ++v37; v35 = *(_DWORD *)(a3[13] + 4); v55 = (signed int *)a3[13]; if ( v37 >= v35 ) { v34 = (int)v49; v4 = a1; v33 = a1[30]; v30 = v55[2]; goto LABEL_45; } } v34 = (int)v49; v4 = a1; v33 = a1[30]; v30 = v55[2]; } LABEL_45: v34 += v50; ++v61; } while ( v61 < v33 ); v32 = v48; v31 = v60; } v32 += 2; if ( ++v31 >= v30 ) { v52 = v33; v29 = v57; v28 = v51; v27 = v4[31]; goto LABEL_49; } } v52 = v33; v29 = v57; v28 = v51; v27 = v4[31]; } LABEL_49: ++v29; } while ( v29 < v27 ); v39 = v58; } sub_798140(a2, v39); v42 = 0; } else { v14 = 0; v15 = a1[31]; if ( v15 > 0 ) { v13 *= 2; v50 = 2 * v11; v51 = v13; do { v16 = 0; if ( v12 > 0 ) { v13 = *a3; v17 = 0; v54 = v14 * v51; v55 = (signed int *)v14; do { v18 = 0; if ( v13 > 0 ) { v19 = (int)a3; v57 = v17 + v54 + v4[4985]; v53 = v17; v56 = v16; do { v20 = 0; if ( *(&v43 + v18) > 0 ) { v49 = (char *)v4 + v18; v21 = (signed __int16 *)v57; v48 = (_DWORD *)(v19 + 36); v52 = v19; do { sub_797FC0(a4 + 1028 * v49[14240], v48, v21, a3[4], a3[5]); v21 += 64; ++v20; } while ( v20 < *(&v43 + v18) ); v57 = (int)v21; v19 = v52; v4 = a1; v13 = *a3; } v19 += 4; ++v18; } while ( v18 < v13 ); v17 = v53; v16 = v56; v12 = v4[30]; } v17 += v50; ++v16; } while ( v16 < v12 ); v14 = (int)v55; v15 = v4[31]; } ++v14; } while ( v14 < v15 ); } } (*(void (__fastcall **)(int, int))(v47 + 24))(v12, v13); return 0; } //----- (007C4FF0) -------------------------------------------------------- int __cdecl sub_7C4FF0(_DWORD *a1, int *a2, int *a3) { _DWORD *v3; // ecx int *v4; // ebx int v5; // ebp int v6; // esi int v7; // edx int v8; // eax int v9; // ebx int v10; // ecx int v11; // esi int v12; // edx int v13; // ebp int v14; // eax int v15; // ebx signed int v16; // eax int v17; // edx int v18; // eax int v19; // ebp int v20; // edi int v21; // eax int v22; // esi int v23; // ebx signed __int16 *v24; // ebp int v25; // edx int v26; // esi signed int *v27; // eax signed int v28; // eax int v29; // edx int v30; // ecx int v31; // ecx int v32; // edx int v33; // eax int v34; // ebp int v35; // ebx int v36; // edx int v37; // esi _DWORD *v38; // eax signed int *v39; // edi int v40; // ebx int v41; // eax int v42; // esi int v43; // ebp bool v44; // sf unsigned __int8 v45; // of _BYTE *v46; // edx int v47; // eax _BYTE *v48; // eax signed int v49; // eax char v51; // [esp+20h] [ebp-44Ch] int v52; // [esp+408h] [ebp-64h] int v53; // [esp+40Ch] [ebp-60h] int v54; // [esp+410h] [ebp-5Ch] int v55; // [esp+414h] [ebp-58h] int v56; // [esp+418h] [ebp-54h] DWORD NumberOfBytesWritten; // [esp+41Ch] [ebp-50h] int v58; // [esp+420h] [ebp-4Ch] int v59; // [esp+424h] [ebp-48h] int v60; // [esp+428h] [ebp-44h] int v61; // [esp+42Ch] [ebp-40h] int v62; // [esp+430h] [ebp-3Ch] signed int *v63; // [esp+434h] [ebp-38h] int v64; // [esp+438h] [ebp-34h] int v65; // [esp+43Ch] [ebp-30h] int v66; // [esp+440h] [ebp-2Ch] _DWORD *v67; // [esp+444h] [ebp-28h] int v68; // [esp+448h] [ebp-24h] int v69; // [esp+44Ch] [ebp-20h] int v70; // [esp+450h] [ebp-1Ch] int v71; // [esp+454h] [ebp-18h] int v72; // [esp+458h] [ebp-14h] v3 = a1; v4 = a2; v72 = 0; v5 = 0; v71 = a2[2]; v6 = 0; v7 = a1[3568]; v52 = 0; if ( v7 > 0 ) { v60 = a1[3571]; v8 = 0; v9 = v60; do { v10 = *(_DWORD *)(v8 + v9 + 4) * *(_DWORD *)(v8 + v9 + 8); *(&v53 + v5) = v10; v6 += v10; v8 += 16; ++v5; } while ( v5 < v7 ); v4 = a2; v3 = a1; } v11 = v6 << 6; v12 = 0; v13 = v3[30] * v11; if ( *a3 > 0 ) { v14 = 0; v58 = v11; v59 = v13; do { v15 = *(_DWORD *)(v14 + a3[13]); a3[v12++ + 9] = 0; *(_DWORD *)(v14 + a3[13] + 12) = v3[*((char *)v3 + v15 + 14240) + 3521]; *(_DWORD *)(v14 + a3[13] + 16) = v3[*((char *)v3 + v15 + 14236) + 3517]; v14 += 24; } while ( v12 < *a3 ); v11 = v58; v13 = v59; v4 = a2; } v16 = 8; v4[3] = 8; if ( a3[2] || a3[3] ) { v27 = (signed int *)a3[13]; v63 = v27; v28 = *v27; v60 = 0; v29 = 0; v61 = 0; if ( v28 > 0 ) { if ( v28 >= 6 ) { v30 = v60; v62 = v28 - 6; v29 = v61; do { v29 += *(&NumberOfBytesWritten + v30) + *(&v56 + v30) + *(&v55 + v30) + *(&v54 + v30) + *(&v53 + v30); v30 += 5; } while ( v30 <= v28 - 6 ); v61 = v29; v4 = a2; v60 = v30; } v31 = v29; v32 = v60; do v31 += *(&v53 + v32++); while ( v32 < v28 ); v61 = v31; v3 = a1; } v60 = 0; v33 = v3[31]; if ( v33 > 0 ) { v34 = 2 * v13; v62 = v63[2]; v35 = v60; v61 <<= 7; v36 = v62; v58 = 2 * v11; do { v37 = 0; if ( v36 > 0 ) { v38 = 0; v68 = v35 * v34; v39 = v63; v60 = v35; v59 = v34; while ( (signed int)v38 + v60 * 8 * v36 < v3[20] ) { v64 = 0; v40 = v3[30]; if ( v40 > 0 ) { v66 = v39[1]; v65 = v64 * v58; v67 = v38; v41 = v66; v69 = v37; do { v42 = v65 + v68 + v3[4985] + v61 + v69 * (v36 << 7); v70 = 0; if ( v41 > 0 ) { v43 = 0; while ( v43 + v64 * 8 * v41 < a1[19] ) { if ( a3[4] ) sub_798A00(a2, v39[4], v42, a3[2], a3[3], a3[5], (unsigned __int8 *)&v51, &v52); else sub_798800(a2, v39[4], v42, a3[2], a3[3], a3[5]); v42 += 128; v43 += 8; v39 = (signed int *)a3[13]; v41 = v39[1]; if ( ++v70 >= v41 ) { v3 = a1; v40 = a1[30]; v36 = v39[2]; goto LABEL_50; } } v3 = a1; v40 = a1[30]; v36 = v39[2]; } LABEL_50: v45 = __OFSUB__(v64 + 1, v40); v44 = v64 + 1 - v40 < 0; v65 += v58; ++v64; } while ( v44 ^ v45 ); v38 = v67; v37 = v69; } v38 += 2; if ( ++v37 >= v36 ) { v63 = v39; v35 = v60; v34 = v59; v33 = v3[31]; goto LABEL_54; } } v63 = v39; v35 = v60; v34 = v59; v33 = v3[31]; } LABEL_54: ++v35; } while ( v35 < v33 ); v4 = a2; } sub_7981A0(v4, v63[4]); sub_7983E0(v4, (unsigned __int8 *)&v51, &v52); v52 = 0; v16 = v4[3]; } else { v60 = 0; v61 = v3[31]; if ( v61 > 0 ) { v17 = v3[30]; v58 = 2 * v11; v18 = v61; v59 = 2 * v13; v19 = v60; do { v20 = 0; if ( v17 > 0 ) { v21 = *a3; v22 = 0; v69 = v19 * v59; v60 = v19; do { v23 = 0; v24 = (signed __int16 *)(v22 + v69 + v3[4985]); if ( v21 > 0 ) { v25 = (int)a3; v68 = v22; v70 = v20; do { v26 = 0; if ( *(&v53 + v23) > 0 ) { v66 = 24 * v23; v67 = (_DWORD *)(v25 + 36); v65 = v25; do { sub_798000(a2, *(_DWORD *)(v66 + a3[13] + 12), v67, v24, a3[4], a3[5]); v24 += 64; ++v26; } while ( v26 < *(&v53 + v23) ); v25 = v65; v21 = *a3; } v25 += 4; ++v23; } while ( v23 < v21 ); v22 = v68; v20 = v70; v3 = a1; v17 = a1[30]; } v22 += v58; ++v20; } while ( v20 < v17 ); v19 = v60; v18 = v3[31]; } ++v19; } while ( v19 < v18 ); v4 = a2; v16 = a2[3]; } } if ( v16 < 8 ) { v46 = (_BYTE *)v4[4]; if ( (unsigned int)v46 >= v4[6] ) { if ( !v4[15] ) { v72 = -28; goto LABEL_70; } if ( !sub_791A60((HANDLE)v4[15], v4 + 16, 0x1000u, &NumberOfBytesWritten) || NumberOfBytesWritten != 4096 ) { v72 = -23; goto LABEL_70; } v46 = (_BYTE *)v4[5]; } v47 = *(unsigned __int8 *)v4; v4[4] = (int)(v46 + 1); *v46 = v47; ++v4[7]; if ( v47 == 255 ) { v48 = (_BYTE *)v4[4]; v4[4] = (int)(v48 + 1); *v48 = 0; ++v4[7]; } v49 = v4[13]; *v4 = 0; v4[1] = 0; if ( v49 <= 2 ) v4[3] = 8; else v4[3] = 0; } LABEL_70: (*(void (**)(void))(v71 + 24))(); return v72; } //----- (007C5740) -------------------------------------------------------- signed int __cdecl sub_7C5740(_DWORD *a1, int a2, int *a3) { _DWORD *v3; // ebx int *v4; // ebp signed int v5; // esi int v6; // ecx int v7; // eax int v8; // edi int v9; // edx int v10; // ecx int v11; // ebp int v12; // ebp int v13; // edi int v14; // edx int v15; // eax int v16; // eax int i; // ecx _WORD *v18; // esi _DWORD *v19; // eax int v20; // edx int v21; // edi int v22; // eax int v23; // ebx int v24; // esi int v25; // edx int v26; // ecx int v27; // eax int v28; // ebp signed int v29; // ebx int v30; // esi int v31; // edx _WORD *v32; // edi int v33; // ebx int v34; // esi int v35; // ebp int v36; // edi int v37; // eax int v38; // ebx int v39; // ebp _DWORD *v40; // eax int v41; // eax unsigned int v42; // edi unsigned int v43; // esi int v44; // eax int v45; // eax int v46; // edx int v48; // eax int v49; // edi int v50; // et2 int v51[4]; // [esp+18h] [ebp-A4h] int v52[4]; // [esp+28h] [ebp-94h] int v53[4]; // [esp+38h] [ebp-84h] int v54[4]; // [esp+48h] [ebp-74h] int v55; // [esp+58h] [ebp-64h] int v56; // [esp+5Ch] [ebp-60h] int v57; // [esp+60h] [ebp-5Ch] int v58; // [esp+64h] [ebp-58h] int v59; // [esp+68h] [ebp-54h] _WORD *v60; // [esp+6Ch] [ebp-50h] int v61; // [esp+70h] [ebp-4Ch] int v62; // [esp+74h] [ebp-48h] int v63; // [esp+78h] [ebp-44h] int v64; // [esp+7Ch] [ebp-40h] int v65; // [esp+80h] [ebp-3Ch] int v66; // [esp+84h] [ebp-38h] int v67; // [esp+88h] [ebp-34h] int v68; // [esp+8Ch] [ebp-30h] _DWORD *v69; // [esp+90h] [ebp-2Ch] int v70; // [esp+94h] [ebp-28h] int v71; // [esp+98h] [ebp-24h] int v72; // [esp+9Ch] [ebp-20h] int v73; // [esp+A0h] [ebp-1Ch] int v74; // [esp+A4h] [ebp-18h] int v75; // [esp+A8h] [ebp-14h] v3 = a1; v4 = a3; v65 = 0; v5 = 0; v6 = *(_DWORD *)(a2 + 8); v7 = 0; v68 = *a3; if ( v68 > 0 ) { v8 = 0; v9 = 0; v57 = 0; v58 = v6; v10 = v65; do { if ( !a1[3576] ) { a3[v7 + 9] = 0; v68 = *a3; } v11 = *(_DWORD *)(v8 + a3[13] + 4) * *(_DWORD *)(v8 + a3[13] + 8); v10 += v11; v8 += 24; v51[v7] = v11; v52[v7] = a1[*((char *)a1 + v7 + 14240) + 3521]; v53[v7] = a1[*((char *)a1 + v7 + 14236) + 3517]; v12 = a1[*(_DWORD *)(v9 + a1[3571] + 12) + 3513]; v9 += 16; v54[v7++] = v12; } while ( v7 < v68 ); v65 = v10; v5 = v57; v6 = v58; v4 = a3; } v13 = v4[8]; v14 = a1[31]; if ( v13 < v14 ) { v15 = a1[30]; v57 = v5; v56 = v15; v16 = v65; v58 = v6; while ( 1 ) { v55 = v4[7]; if ( v55 < v56 ) break; LABEL_58: if ( ++v13 >= v14 ) { v5 = v57; v6 = v58; goto LABEL_60; } } v75 = v13 << 7; v74 = (v16 << 6) - 1; v73 = v16 << 6; i = v68; v72 = v13; while ( 1 ) { v18 = (_WORD *)v3[4621]; v19 = (_DWORD *)v3[4983]; if ( v19 ) { v20 = 0; if ( i > 0 ) { v71 = v4[13]; v60 = v18; v69 = v19; v64 = 16 * v55; v21 = v71; do { v22 = 0; v23 = *(_DWORD *)(24 * v20 + v21 + 8); if ( v23 > 0 ) { v70 = *(_DWORD *)(24 * v20 + v21 + 4); v61 = 16 * v20; v24 = (int)v69; v62 = 2 * v20; v59 = 24 * v20; v63 = v20; v25 = v70; do { v26 = 0; if ( v25 > 0 ) { v67 = v22 << 7; v66 = v22; v27 = v56; while ( 1 ) { v28 = v67 * v27 * v25 + v25 * v75 * v27 * v23 + v64 * *(_DWORD *)(a1[3571] + v61 + 4) + *(_DWORD *)(v24 + 2 * v62 + 4) + 16 * v26; v29 = 0; v30 = (int)v60; v68 = v26; do { dword_BA2968(v30, v28, 16); v27 = a1[30]; v21 = a3[13]; v25 = *(_DWORD *)(v59 + v21 + 4); v28 += v25 * 16 * a1[30]; v30 += 16; ++v29; } while ( v29 < 8 ); v60 = (_WORD *)v30; v26 = v68 + 1; if ( v68 + 1 >= v25 ) break; v24 = a1[4983]; v23 = *(_DWORD *)(v59 + v21 + 8); } v56 = v27; v22 = v66; v24 = a1[4983]; v23 = *(_DWORD *)(v59 + v21 + 8); } ++v22; } while ( v22 < v23 ); v69 = (_DWORD *)v24; v20 = v63; i = *a3; } ++v20; } while ( v20 < i ); v19 = v69; v4 = a3; v3 = a1; v18 = (_WORD *)a1[4621]; } if ( *v19 ) { v31 = v74; if ( v73 ) { do { *v18 -= 128; ++v18; --v31; } while ( v31 != -1 ); v18 = (_WORD *)v3[4621]; v19 = (_DWORD *)v3[4983]; } } } else { (*(void (__cdecl **)(_DWORD *, int, int))(v58 + 96))(v3, v55, v72); v19 = (_DWORD *)v3[4983]; } if ( (!v19 || *v19) && v65 > 0 ) { v32 = v18; v60 = v18; v33 = 0; v34 = v65; v35 = v58; do { (*(void (__cdecl **)(_WORD *))(v35 + 68))(v32); v32 += 64; ++v33; } while ( v33 < v34 ); v58 = v35; v18 = v60; v4 = a3; v3 = a1; } v36 = 0; i = *v4; if ( *v4 > 0 ) break; LABEL_49: v42 = v4[6] + 1; v4[6] = v42; v43 = v3[3572]; if ( !(v42 % v43) ) { if ( (((unsigned __int8)(v42 / v43) - 1) & 7) == 7 ) v4[6] = 0; v44 = sub_7C3F70(((unsigned __int8)(v42 / v43) - 1) & 7, a2); v57 = v44; if ( v44 ) { v5 = v44; v6 = v58; goto LABEL_60; } v45 = 0; for ( i = *v4; v45 < *v4; ++v45 ) { v4[v45 + 9] = 0; i = *v4; } } if ( v3[7] ) { v48 = v55; v49 = v72; v6 = v58; v3[3] = v55; v3[4] = v49; v50 = (v48 + 1) % v3[30]; v4[7] = v50; if ( !v50 ) ++v49; v4[8] = v49; v5 = 1; goto LABEL_60; } v46 = v3[30]; ++v55; v56 = v46; if ( v55 >= v46 ) { v68 = i; v13 = v72; v16 = v65; v14 = v3[31]; goto LABEL_58; } } v37 = (int)v4; while ( 1 ) { v38 = 0; if ( v51[v36] > 0 ) break; LABEL_47: v37 += 4; if ( ++v36 >= i ) { v3 = a1; goto LABEL_49; } } v39 = v58; v69 = (_DWORD *)(v37 + 36); v70 = v37; while ( 1 ) { v40 = (_DWORD *)a1[4983]; if ( !v40 || *v40 ) (*(void (__cdecl **)(_WORD *, int))(v39 + 260))(v18, v54[v36]); v41 = (*(int (__cdecl **)(int, int, int, _DWORD *, _WORD *))(v39 + 240))(a2, v52[v36], v53[v36], v69, v18); if ( v41 ) break; v18 += 64; if ( ++v38 >= v51[v36] ) { v57 = 0; v37 = v70; v58 = v39; v4 = a3; i = *a3; goto LABEL_47; } } v5 = v41; v6 = v39; } LABEL_60: (*(void (**)(void))(v6 + 24))(); return v5; } // BA2968: using guessed type int (__cdecl *dword_BA2968)(_DWORD, _DWORD, _DWORD); // 7C5740: using guessed type int var_A4[4]; // 7C5740: using guessed type int var_94[4]; // 7C5740: using guessed type int var_84[4]; // 7C5740: using guessed type int var_74[4]; //----- (007C9020) -------------------------------------------------------- signed int __cdecl sub_7C9020(int a1) { int v2; // [esp-1Ch] [ebp-24h] int v3; // [esp-18h] [ebp-20h] DWORD NumberOfBytesWritten; // [esp+4h] [ebp-4h] if ( !sub_791A60( *(HANDLE *)(a1 + 60), *(LPCVOID *)(a1 + 20), *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 20), &NumberOfBytesWritten) || v3 != NumberOfBytesWritten ) { return -23; } *(_DWORD *)(a1 + 16) = v2; return 0; } //----- (007D3450) -------------------------------------------------------- std::exception *__thiscall sub_7D3450(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::length_error::`vftable'; return v2; } // A10764: using guessed type void *std::length_error::`vftable'; //----- (007D349D) -------------------------------------------------------- std::exception *__thiscall sub_7D349D(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::out_of_range::`vftable'; return v2; } // A10770: using guessed type void *std::out_of_range::`vftable'; //----- (007D3526) -------------------------------------------------------- int __thiscall sub_7D3526(_DWORD *this) { return this[1]; } //----- (007D353E) -------------------------------------------------------- int (__thiscall **sub_7D353E())(void *, char) { return &off_ABA240; } // ABA240: using guessed type int (__thiscall *off_ABA240)(void *, char); //----- (007D3544) -------------------------------------------------------- void *__thiscall sub_7D3544(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::error_category::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A1077C: using guessed type void *std::error_category::`vftable'; //----- (007D35BE) -------------------------------------------------------- const char *sub_7D35BE() { return "bad function call"; } //----- (007D35EA) -------------------------------------------------------- std::exception *__thiscall sub_7D35EA(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::tr1::bad_function_call::`vftable'; return v2; } // A10820: using guessed type void *std::tr1::bad_function_call::`vftable'; //----- (007D3607) -------------------------------------------------------- void *__thiscall sub_7D3607(void *this, char a2) { void *v2; // esi v2 = this; sub_7D43CE((std::exception *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (007D3628) -------------------------------------------------------- std::exception *__thiscall sub_7D3628(std::exception *this, int a2) { std::exception *v2; // esi char *v4; // [esp+4h] [ebp-4h] v2 = this; v4 = "regular expression error"; std::exception::exception(this, (const char *const *)&v4); *((_DWORD *)v2 + 3) = a2; *(_DWORD *)v2 = &std::tr1::regex_error::`vftable'; return v2; } // A10854: using guessed type void *std::tr1::regex_error::`vftable'; //----- (007D36A9) -------------------------------------------------------- std::exception *__thiscall sub_7D36A9(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::tr1::regex_error::`vftable'; *((_DWORD *)v2 + 3) = *((_DWORD *)a2 + 3); return v2; } // A10854: using guessed type void *std::tr1::regex_error::`vftable'; //----- (007D3A0B) -------------------------------------------------------- int sub_7D3A0B() { return dword_BA2A28; } // BA2A28: using guessed type int dword_BA2A28; //----- (007D3FDA) -------------------------------------------------------- FILE *__cdecl sub_7D3FDA(char *a1, int a2, int a3) { return _fsopen(a1, (&off_A10890)[a2], a3); } //----- (007D3FF9) -------------------------------------------------------- FILE *__cdecl sub_7D3FF9(wchar_t *a1, int a2, int a3) { return _wfsopen(a1, (&off_A108E8)[a2], a3); } //----- (007D4018) -------------------------------------------------------- FILE *__cdecl sub_7D4018(char *a1, int a2, int a3) { int v3; // ecx int v4; // eax unsigned int v5; // ecx int v6; // esi FILE *v8; // eax FILE *v9; // eax FILE *v10; // esi v3 = a2; v4 = 1; if ( a2 & 0x40 ) v3 = a2 | 1; if ( v3 & 8 ) v3 |= 2u; v5 = v3 & 0xFFFFFF3B; v6 = 0; do { if ( v4 == v5 ) break; v4 = dword_A10978[v6++]; } while ( v4 ); if ( !dword_A10974[v6] ) return 0; if ( a2 & 0x80 ) { if ( v5 & 0xA ) { v8 = sub_7D3FDA(a1, 0, a3); if ( v8 ) { fclose(v8); return 0; } } } v9 = sub_7D3FDA(a1, v6, a3); v10 = v9; if ( !v9 ) return 0; if ( a2 & 4 && fseek(v9, 0, 2) ) { fclose(v10); return 0; } return v10; } // A10974: using guessed type int dword_A10974[]; //----- (007D40C0) -------------------------------------------------------- FILE *__cdecl sub_7D40C0(wchar_t *a1, int a2, int a3) { int v3; // ecx int v4; // eax unsigned int v5; // ecx int v6; // esi FILE *v8; // eax FILE *v9; // eax FILE *v10; // esi v3 = a2; v4 = 1; if ( a2 & 0x40 ) v3 = a2 | 1; if ( v3 & 8 ) v3 |= 2u; v5 = v3 & 0xFFFFFF3B; v6 = 0; do { if ( v4 == v5 ) break; v4 = dword_A10978[v6++]; } while ( v4 ); if ( !dword_A10974[v6] ) return 0; if ( a2 & 0x80 ) { if ( v5 & 0xA ) { v8 = sub_7D3FF9(a1, 0, a3); if ( v8 ) { fclose(v8); return 0; } } } v9 = sub_7D3FF9(a1, v6, a3); v10 = v9; if ( !v9 ) return 0; if ( a2 & 4 && fseek(v9, 0, 2) ) { fclose(v10); return 0; } return v10; } // A10974: using guessed type int dword_A10974[]; //----- (007D4168) -------------------------------------------------------- FILE *__cdecl sub_7D4168(char *a1, int a2, int a3) { return sub_7D4018(a1, a2, a3); } //----- (007D4173) -------------------------------------------------------- FILE *__cdecl sub_7D4173(wchar_t *a1, int a2, int a3) { return sub_7D40C0(a1, a2, a3); } //----- (007D4219) -------------------------------------------------------- void __cdecl sub_7D4219(LPCRITICAL_SECTION lpCriticalSection) { LeaveCriticalSection(lpCriticalSection); } //----- (007D43CE) -------------------------------------------------------- void __thiscall sub_7D43CE(std::exception *this) { *(_DWORD *)this = &std::exception::`vftable'; std::exception::_Tidy(this); } // A10A54: using guessed type void *std::exception::`vftable'; //----- (007D43D9) -------------------------------------------------------- std::exception *__thiscall sub_7D43D9(std::exception *this, char *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, (const char *const *)&a2); *(_DWORD *)v2 = &std::bad_cast::`vftable'; return v2; } // A10A74: using guessed type void *std::bad_cast::`vftable'; //----- (007D43F7) -------------------------------------------------------- std::exception *__thiscall sub_7D43F7(std::exception *this, char *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, (const char *const *)&a2); *(_DWORD *)v2 = &std::bad_typeid::`vftable'; return v2; } // A10A80: using guessed type void *std::bad_typeid::`vftable'; //----- (007D4415) -------------------------------------------------------- std::exception *__thiscall sub_7D4415(std::exception *this, char *a2) { std::exception *v2; // esi v2 = this; sub_7D43F7(this, a2); *(_DWORD *)v2 = &std::__non_rtti_object::`vftable'; return v2; } // A10A8C: using guessed type void *std::__non_rtti_object::`vftable'; //----- (007D4457) -------------------------------------------------------- std::exception *__thiscall sub_7D4457(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::bad_cast::`vftable'; return v2; } // A10A74: using guessed type void *std::bad_cast::`vftable'; //----- (007D4474) -------------------------------------------------------- void *__thiscall sub_7D4474(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::exception::`vftable'; std::exception::_Tidy((std::exception *)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A10A54: using guessed type void *std::exception::`vftable'; //----- (007D449B) -------------------------------------------------------- std::exception *__thiscall sub_7D449B(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::bad_typeid::`vftable'; return v2; } // A10A80: using guessed type void *std::bad_typeid::`vftable'; //----- (007D44B8) -------------------------------------------------------- std::exception *__thiscall sub_7D44B8(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; sub_7D449B(this, a2); *(_DWORD *)v2 = &std::__non_rtti_object::`vftable'; return v2; } // A10A8C: using guessed type void *std::__non_rtti_object::`vftable'; //----- (007D44E9) -------------------------------------------------------- void __thiscall sub_7D44E9(struct type_info *this) { *(_DWORD *)this = &type_info::`vftable'; type_info::_Type_info_dtor(this); } // A10A98: using guessed type void *type_info::`vftable'; //----- (007D44F9) -------------------------------------------------------- void *__thiscall sub_7D44F9(void *this, char a2) { void *v2; // esi v2 = this; sub_7D44E9((struct type_info *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (007D50D1) -------------------------------------------------------- void __cdecl sub_7D50D1(char a1) { int v1; // ecx if ( v1 != dword_ABA360 ) __report_gsfailure(a1); } // 7E3D8C: using guessed type void __cdecl __noreturn __report_gsfailure(char); // ABA360: using guessed type int dword_ABA360; //----- (007D6CEE) -------------------------------------------------------- void **sub_7D6CEE() { return &off_ABA380; } // ABA380: using guessed type void *off_ABA380; //----- (007D7080) -------------------------------------------------------- int sub_7D7080() { return flsall(1); } // 7D6F53: using guessed type _DWORD __cdecl flsall(_DWORD); //----- (007DB3EA) -------------------------------------------------------- int __thiscall sub_7DB3EA(void *this) { return _cintrindisp2(this, &unk_A12DF0); } // 7ED210: using guessed type int __fastcall _cintrindisp2(_DWORD, _DWORD); //----- (007DDA68) -------------------------------------------------------- int __thiscall sub_7DDA68(void *this) { return _cintrindisp1(this, &unk_A1A56A); } // 7ED24E: using guessed type int __fastcall _cintrindisp1(_DWORD, _DWORD); //----- (007DDA72) -------------------------------------------------------- void sub_7DDA72() { JUMPOUT(&loc_7DDA6D); } //----- (007DDA79) -------------------------------------------------------- void sub_7DDA79() { JUMPOUT(&loc_7DDA6D); } //----- (007E0206) -------------------------------------------------------- void *__cdecl sub_7E0206(void *a1) { void *result; // eax result = a1; dword_BA2D3C = a1; return result; } //----- (007E0738) -------------------------------------------------------- void __thiscall sub_7E0738(std::exception *this) { *(_DWORD *)this = &std::bad_exception::`vftable'; sub_7D43CE(this); } // A10DE8: using guessed type void *std::bad_exception::`vftable'; //----- (007E0743) -------------------------------------------------------- void *__thiscall sub_7E0743(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &std::bad_exception::`vftable'; sub_7D43CE((std::exception *)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A10DE8: using guessed type void *std::bad_exception::`vftable'; //----- (007E1323) -------------------------------------------------------- std::exception *__thiscall sub_7E1323(std::exception *this, struct exception *a2) { std::exception *v2; // esi v2 = this; std::exception::exception(this, a2); *(_DWORD *)v2 = &std::bad_exception::`vftable'; return v2; } // A10DE8: using guessed type void *std::bad_exception::`vftable'; //----- (007E387B) -------------------------------------------------------- int sub_7E387B() { dword_BA7360 = IsProcessorFeaturePresent(0xAu); return 0; } // BA7360: using guessed type int dword_BA7360; //----- (007E388B) -------------------------------------------------------- void *__cdecl sub_7E388B(void *a1) { void *result; // eax result = a1; dword_BA2D4C = a1; return result; } //----- (007EACAB) -------------------------------------------------------- signed int __cdecl sub_7EACAB(_DWORD *a1) { signed int result; // eax if ( a1 ) { *a1 = dword_ABB30C; result = 0; } else { *_errno() = 22; _invalid_parameter_noinfo(); result = 22; } return result; } // 7E0390: using guessed type int _invalid_parameter_noinfo(void); // ABB30C: using guessed type int dword_ABB30C; //----- (007EACD8) -------------------------------------------------------- signed int __cdecl sub_7EACD8(_DWORD *a1) { signed int result; // eax if ( a1 ) { *a1 = dword_ABB310; result = 0; } else { *_errno() = 22; _invalid_parameter_noinfo(); result = 22; } return result; } // 7E0390: using guessed type int _invalid_parameter_noinfo(void); // ABB310: using guessed type int dword_ABB310; //----- (007EAD05) -------------------------------------------------------- signed int __cdecl sub_7EAD05(_DWORD *a1) { signed int result; // eax if ( a1 ) { *a1 = dword_ABB308; result = 0; } else { *_errno() = 22; _invalid_parameter_noinfo(); result = 22; } return result; } // 7E0390: using guessed type int _invalid_parameter_noinfo(void); // ABB308: using guessed type int dword_ABB308; //----- (007EAD32) -------------------------------------------------------- int *sub_7EAD32() { return &dword_ABB30C; } // ABB30C: using guessed type int dword_ABB30C; //----- (007EAD38) -------------------------------------------------------- int *sub_7EAD38() { return &dword_ABB310; } // ABB310: using guessed type int dword_ABB310; //----- (007EAD3E) -------------------------------------------------------- int *sub_7EAD3E() { return &dword_ABB308; } // ABB308: using guessed type int dword_ABB308; //----- (007EAD44) -------------------------------------------------------- void **sub_7EAD44() { return &off_ABB398; } // ABB398: using guessed type void *off_ABB398; //----- (007EB64A) -------------------------------------------------------- int sub_7EB64A() { dword_BA7258 = IsProcessorFeaturePresent(0xAu); return 0; } // BA7258: using guessed type int dword_BA7258; //----- (007ECC41) -------------------------------------------------------- PVOID sub_7ECC41() { return DecodePointer(dword_BA38E8); } //----- (007ECDF1) -------------------------------------------------------- int __cdecl sub_7ECDF1(int a1) { int result; // eax result = a1; dword_BA38F4 = a1; return result; } // BA38F4: using guessed type int dword_BA38F4; //----- (007ECFAC) -------------------------------------------------------- int __cdecl sub_7ECFAC(int a1) { int result; // eax result = a1; dword_BA38F8 = a1; return result; } // BA38F8: using guessed type int dword_BA38F8; //----- (007ECFBB) -------------------------------------------------------- int (*sub_7ECFBB())(void) { int (*result)(void); // eax int (**v1)(void); // edi result = (int (*)(void))&unk_A7A698; v1 = (int (**)(void))&unk_A7A698; if ( &unk_A7A698 < &unk_A7A698 ) { do { result = *v1; if ( *v1 ) result = (int (*)(void))result(); ++v1; } while ( v1 < (int (**)(void))&unk_A7A698 ); } return result; } //----- (007ECFE1) -------------------------------------------------------- void __cdecl sub_7ECFE1() { void (**v0)(void); // edi v0 = (void (**)(void))&unk_A7A6A0; if ( &unk_A7A6A0 < &unk_A7A6A0 ) { do { if ( *v0 ) (*v0)(); ++v0; } while ( v0 < (void (**)(void))&unk_A7A6A0 ); } } //----- (007EF99A) -------------------------------------------------------- int sub_7EF99A() { SetUnhandledExceptionFilter(__CxxUnhandledExceptionFilter); return 0; } //----- (007F128C) -------------------------------------------------------- void *sub_7F128C() { return &unk_ABB600; } //----- (007F1292) -------------------------------------------------------- char **sub_7F1292() { return off_ABB550; } // ABB550: using guessed type char *off_ABB550[44]; //----- (007F5172) -------------------------------------------------------- void sub_7F5172() { dword_BA7250 = 0; } // BA7250: using guessed type int dword_BA7250; //----- (007F5FB5) -------------------------------------------------------- signed int sub_7F5FB5() { return 1; } //----- (007F5FB9) -------------------------------------------------------- char __thiscall sub_7F5FB9(_BYTE *this) { return this[4]; } //----- (007F604C) -------------------------------------------------------- int __thiscall sub_7F604C(_DWORD *this) { return this[2]; } //----- (007F6C37) -------------------------------------------------------- DName *__cdecl sub_7F6C37(DName *a1, int a2, int a3) { DName::operator=(a2); DName::operator+(a1, a3); return a1; } // 7F688E: using guessed type _DWORD __stdcall DName::operator=(char); //----- (007FB1D7) -------------------------------------------------------- int __cdecl sub_7FB1D7(int a1, int a2, struct localeinfo_struct *a3) { signed int v3; // eax char v6; // [esp+Ch] [ebp-28h] char v7; // [esp+10h] [ebp-24h] int v8; // [esp+18h] [ebp-1Ch] char v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] char v11; // [esp+24h] [ebp-10h] _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&v7, a3); v10 = __strgtold12_l(&v11, &v6, a2, 0, 0, 0, 0, &v7); v3 = sub_7FC06C((unsigned __int16 *)&v11, (int *)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) &= 0xFFFFFFFD; return 3; } if ( v3 == 2 ) { LABEL_8: if ( v9 ) *(_DWORD *)(v8 + 112) &= 0xFFFFFFFD; return 4; } } if ( v9 ) *(_DWORD *)(v8 + 112) &= 0xFFFFFFFD; return 0; } // 7EBCD5: using guessed type _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (007FB27F) -------------------------------------------------------- int __cdecl sub_7FB27F(int a1, int a2, struct localeinfo_struct *a3) { signed int v3; // eax char v6; // [esp+Ch] [ebp-28h] char v7; // [esp+10h] [ebp-24h] int v8; // [esp+18h] [ebp-1Ch] char v9; // [esp+1Ch] [ebp-18h] int v10; // [esp+20h] [ebp-14h] char v11; // [esp+24h] [ebp-10h] _LocaleUpdate::_LocaleUpdate((_LocaleUpdate *)&v7, a3); v10 = __strgtold12_l(&v11, &v6, a2, 0, 0, 0, 0, &v7); v3 = sub_7FC5BD((unsigned __int16 *)&v11, (int *)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) &= 0xFFFFFFFD; return 3; } if ( v3 == 2 ) { LABEL_8: if ( v9 ) *(_DWORD *)(v8 + 112) &= 0xFFFFFFFD; return 4; } } if ( v9 ) *(_DWORD *)(v8 + 112) &= 0xFFFFFFFD; return 0; } // 7EBCD5: using guessed type _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (007FC06C) -------------------------------------------------------- signed int __cdecl sub_7FC06C(unsigned __int16 *a1, int *a2) { unsigned __int16 v2; // bx int v3; // ebx int v4; // eax int v5; // ebx int v6; // eax signed int result; // eax int v8; // edi int v9; // edx int *v10; // esi int v11; // eax bool i; // zf int v13; // eax unsigned int v14; // edx int *v15; // ecx bool v16; // cf int v17; // eax int v18; // edx int *v19; // ebx int v20; // ST1C_4 signed int v21; // edx int *v22; // ecx int v23; // esi int v24; // eax int *v25; // ebx bool j; // zf int v27; // eax unsigned int v28; // edx int *v29; // ecx unsigned int v30; // edi signed int k; // ecx int *v32; // ecx unsigned int v33; // esi signed int v34; // edi int v35; // eax int v36; // edx int *v37; // ebx int v38; // ST1C_4 signed int v39; // edx int *v40; // ecx int v41; // eax int v42; // edx int *v43; // ebx int v44; // ST1C_4 signed int v45; // edx int *v46; // ecx int v47; // eax int v48; // edx int v49; // ST1C_4 signed int v50; // edx int *v51; // ecx int v52; // ebx int v53; // edx int v54; // [esp+8h] [ebp-38h] char v55; // [esp+10h] [ebp-30h] int v56; // [esp+10h] [ebp-30h] int v57; // [esp+14h] [ebp-2Ch] char v58; // [esp+14h] [ebp-2Ch] int v59; // [esp+18h] [ebp-28h] int v60; // [esp+18h] [ebp-28h] signed int v61; // [esp+18h] [ebp-28h] int v62; // [esp+18h] [ebp-28h] int v63; // [esp+18h] [ebp-28h] int v64; // [esp+18h] [ebp-28h] signed int v65; // [esp+1Ch] [ebp-24h] unsigned int v66; // [esp+20h] [ebp-20h] signed int v67; // [esp+20h] [ebp-20h] signed int v68; // [esp+20h] [ebp-20h] signed int v69; // [esp+20h] [ebp-20h] signed int v70; // [esp+20h] [ebp-20h] int v71; // [esp+24h] [ebp-1Ch] int v72; // [esp+28h] [ebp-18h] int v73; // [esp+2Ch] [ebp-14h] int v74; // [esp+30h] [ebp-10h] int v75; // [esp+34h] [ebp-Ch] int v76; // [esp+38h] [ebp-8h] v2 = a1[5]; v54 = a1[5] & 0x8000; v74 = *(_DWORD *)(a1 + 3); v3 = (v2 & 0x7FFF) - 0x3FFF; v4 = *a1 << 16; v75 = *(_DWORD *)(a1 + 1); v76 = v4; if ( v3 != -16383 ) { v65 = 0; v71 = v74; v72 = v75; v73 = v76; v8 = dword_ABB658 - 1; v57 = v3; v59 = dword_ABB658 / 32; v9 = dword_ABB658 % 32; v10 = &v74 + dword_ABB658 / 32; v55 = 31 - dword_ABB658 % 32; if ( (1 << (31 - dword_ABB658 % 32)) & *v10 ) { v11 = dword_ABB658 / 32; for ( i = (~(-1 << (31 - v9)) & *(&v74 + v59)) == 0; i; i = *(&v74 + v11) == 0 ) { if ( ++v11 >= 3 ) goto LABEL_21; } v13 = v8 / 32; v65 = 0; v14 = 1 << (31 - v8 % 32); v15 = &v74 + v8 / 32; v66 = v14 + *v15; if ( v66 >= *v15 ) { v16 = v66 < v14; goto LABEL_18; } LABEL_19: v65 = 1; while ( 1 ) { --v13; *v15 = v66; if ( v13 < 0 || !v65 ) break; v65 = 0; v15 = &v74 + v13; v66 = *v15 + 1; if ( v66 >= *v15 ) { v16 = (unsigned int)*v15 >= 0xFFFFFFFF; LABEL_18: if ( !v16 ) continue; } goto LABEL_19; } } LABEL_21: *v10 &= -1 << v55; if ( v59 + 1 < 3 ) memset(&v74 + v59 + 1, 0, 4 * (3 - (v59 + 1))); if ( v65 ) ++v3; if ( v3 >= dword_ABB654 - dword_ABB658 ) { if ( v3 > dword_ABB654 ) { if ( v3 < dword_ABB650 ) { v5 = dword_ABB664 + v3; v74 &= 0x7FFFFFFFu; v47 = dword_ABB65C / 32; v48 = dword_ABB65C % 32; v64 = 0; v70 = 0; do { v49 = ~(-1 << v48) & *(&v74 + v70); *(&v74 + v70) = v64 | ((unsigned int)*(&v74 + v70) >> v48); ++v70; v64 = v49 << (32 - v48); } while ( v70 < 3 ); v50 = 2; v51 = &v76 - v47; do { if ( v50 < v47 ) *(&v74 + v50) = 0; else *(&v74 + v50) = *v51; --v51; --v50; } while ( v50 >= 0 ); result = 0; } else { v75 = 0; v76 = 0; v74 = 2147483648; v41 = dword_ABB65C / 32; v42 = dword_ABB65C % 32; v63 = 0; v69 = 0; do { v43 = &v74 + v69; v44 = ~(-1 << v42) & *v43; *v43 = v63 | ((unsigned int)*v43 >> v42); ++v69; v63 = v44 << (32 - v42); } while ( v69 < 3 ); v45 = 2; v46 = &v76 - v41; do { if ( v45 < v41 ) *(&v74 + v45) = 0; else *(&v74 + v45) = *v46; --v46; --v45; } while ( v45 >= 0 ); v5 = dword_ABB650 + dword_ABB664; result = 1; } goto LABEL_78; } v74 = v71; v75 = v72; v17 = (dword_ABB654 - v57) / 32; v76 = v73; v18 = (dword_ABB654 - v57) % 32; v60 = 0; v67 = 0; do { v19 = &v74 + v67; v20 = ~(-1 << v18) & *v19; *v19 = v60 | ((unsigned int)*v19 >> v18); ++v67; v60 = v20 << (32 - v18); } while ( v67 < 3 ); v21 = 2; v22 = &v76 - v17; do { if ( v21 < v17 ) *(&v74 + v21) = 0; else *(&v74 + v21) = *v22; --v22; --v21; } while ( v21 >= 0 ); v23 = dword_ABB658 - 1; v24 = dword_ABB658 / 32; v56 = dword_ABB658 / 32; v25 = &v74 + dword_ABB658 / 32; v58 = 31 - dword_ABB658 % 32; if ( (1 << (31 - dword_ABB658 % 32)) & *v25 ) { for ( j = (~(-1 << (31 - dword_ABB658 % 32)) & *(&v74 + v24)) == 0; j; j = *(&v74 + v24) == 0 ) { if ( ++v24 >= 3 ) goto LABEL_51; } v27 = v23 / 32; v61 = 0; v28 = 1 << (31 - v23 % 32); v29 = &v74 + v23 / 32; v30 = *v29 + v28; if ( v30 < *v29 || v30 < v28 ) v61 = 1; *v29 = v30; for ( k = v61; --v27 >= 0 && k; k = v34 ) { v32 = &v74 + v27; v33 = *v32 + 1; v34 = 0; if ( v33 < *v32 || v33 < 1 ) v34 = 1; *v32 = v33; } } LABEL_51: *v25 &= -1 << v58; if ( v56 + 1 < 3 ) memset(&v74 + v56 + 1, 0, 4 * (3 - (v56 + 1))); v35 = (dword_ABB65C + 1) / 32; v36 = (dword_ABB65C + 1) % 32; v62 = 0; v68 = 0; do { v37 = &v74 + v68; v38 = ~(-1 << v36) & *v37; *v37 = v62 | ((unsigned int)*v37 >> v36); ++v68; v62 = v38 << (32 - v36); } while ( v68 < 3 ); v39 = 2; v40 = &v76 - v35; do { if ( v39 < v35 ) *(&v74 + v39) = 0; else *(&v74 + v39) = *v40; --v40; --v39; } while ( v39 >= 0 ); } else { v74 = 0; v75 = 0; v76 = 0; } v5 = 0; result = 2; goto LABEL_78; } v5 = 0; v6 = 0; while ( !*(&v74 + v6) ) { if ( ++v6 >= 3 ) { result = 0; goto LABEL_78; } } v74 = 0; v75 = 0; v76 = 0; result = 2; LABEL_78: v52 = v74 | (v54 != 0 ? 0x80000000 : 0) | (v5 << (31 - dword_ABB65C)); if ( dword_ABB660 == 64 ) { v53 = v75; a2[1] = v52; *a2 = v53; } else if ( dword_ABB660 == 32 ) { *a2 = v52; } return result; } // ABB650: using guessed type int dword_ABB650; // ABB654: using guessed type int dword_ABB654; // ABB658: using guessed type int dword_ABB658; // ABB65C: using guessed type int dword_ABB65C; // ABB660: using guessed type int dword_ABB660; // ABB664: using guessed type int dword_ABB664; //----- (007FC5BD) -------------------------------------------------------- signed int __cdecl sub_7FC5BD(unsigned __int16 *a1, int *a2) { unsigned __int16 v2; // bx int v3; // ebx int v4; // eax int v5; // ebx int v6; // eax signed int result; // eax int v8; // edi int v9; // edx int *v10; // esi int v11; // eax bool i; // zf int v13; // eax unsigned int v14; // edx int *v15; // ecx bool v16; // cf int v17; // eax int v18; // edx int *v19; // ebx int v20; // ST1C_4 signed int v21; // edx int *v22; // ecx int v23; // esi int v24; // eax int *v25; // ebx bool j; // zf int v27; // eax unsigned int v28; // edx int *v29; // ecx unsigned int v30; // edi signed int k; // ecx int *v32; // ecx unsigned int v33; // esi signed int v34; // edi int v35; // eax int v36; // edx int *v37; // ebx int v38; // ST1C_4 signed int v39; // edx int *v40; // ecx int v41; // eax int v42; // edx int *v43; // ebx int v44; // ST1C_4 signed int v45; // edx int *v46; // ecx int v47; // eax int v48; // edx int v49; // ST1C_4 signed int v50; // edx int *v51; // ecx int v52; // ebx int v53; // edx int v54; // [esp+8h] [ebp-38h] char v55; // [esp+10h] [ebp-30h] int v56; // [esp+10h] [ebp-30h] int v57; // [esp+14h] [ebp-2Ch] char v58; // [esp+14h] [ebp-2Ch] int v59; // [esp+18h] [ebp-28h] int v60; // [esp+18h] [ebp-28h] signed int v61; // [esp+18h] [ebp-28h] int v62; // [esp+18h] [ebp-28h] int v63; // [esp+18h] [ebp-28h] int v64; // [esp+18h] [ebp-28h] signed int v65; // [esp+1Ch] [ebp-24h] unsigned int v66; // [esp+20h] [ebp-20h] signed int v67; // [esp+20h] [ebp-20h] signed int v68; // [esp+20h] [ebp-20h] signed int v69; // [esp+20h] [ebp-20h] signed int v70; // [esp+20h] [ebp-20h] int v71; // [esp+24h] [ebp-1Ch] int v72; // [esp+28h] [ebp-18h] int v73; // [esp+2Ch] [ebp-14h] int v74; // [esp+30h] [ebp-10h] int v75; // [esp+34h] [ebp-Ch] int v76; // [esp+38h] [ebp-8h] v2 = a1[5]; v54 = a1[5] & 0x8000; v74 = *(_DWORD *)(a1 + 3); v3 = (v2 & 0x7FFF) - 0x3FFF; v4 = *a1 << 16; v75 = *(_DWORD *)(a1 + 1); v76 = v4; if ( v3 != -16383 ) { v65 = 0; v71 = v74; v72 = v75; v73 = v76; v8 = dword_ABB670 - 1; v57 = v3; v59 = dword_ABB670 / 32; v9 = dword_ABB670 % 32; v10 = &v74 + dword_ABB670 / 32; v55 = 31 - dword_ABB670 % 32; if ( (1 << (31 - dword_ABB670 % 32)) & *v10 ) { v11 = dword_ABB670 / 32; for ( i = (~(-1 << (31 - v9)) & *(&v74 + v59)) == 0; i; i = *(&v74 + v11) == 0 ) { if ( ++v11 >= 3 ) goto LABEL_21; } v13 = v8 / 32; v65 = 0; v14 = 1 << (31 - v8 % 32); v15 = &v74 + v8 / 32; v66 = v14 + *v15; if ( v66 >= *v15 ) { v16 = v66 < v14; goto LABEL_18; } LABEL_19: v65 = 1; while ( 1 ) { --v13; *v15 = v66; if ( v13 < 0 || !v65 ) break; v65 = 0; v15 = &v74 + v13; v66 = *v15 + 1; if ( v66 >= *v15 ) { v16 = (unsigned int)*v15 >= 0xFFFFFFFF; LABEL_18: if ( !v16 ) continue; } goto LABEL_19; } } LABEL_21: *v10 &= -1 << v55; if ( v59 + 1 < 3 ) memset(&v74 + v59 + 1, 0, 4 * (3 - (v59 + 1))); if ( v65 ) ++v3; if ( v3 >= dword_ABB66C - dword_ABB670 ) { if ( v3 > dword_ABB66C ) { if ( v3 < dword_ABB668 ) { v5 = dword_ABB67C + v3; v74 &= 0x7FFFFFFFu; v47 = dword_ABB674 / 32; v48 = dword_ABB674 % 32; v64 = 0; v70 = 0; do { v49 = ~(-1 << v48) & *(&v74 + v70); *(&v74 + v70) = v64 | ((unsigned int)*(&v74 + v70) >> v48); ++v70; v64 = v49 << (32 - v48); } while ( v70 < 3 ); v50 = 2; v51 = &v76 - v47; do { if ( v50 < v47 ) *(&v74 + v50) = 0; else *(&v74 + v50) = *v51; --v51; --v50; } while ( v50 >= 0 ); result = 0; } else { v75 = 0; v76 = 0; v74 = 2147483648; v41 = dword_ABB674 / 32; v42 = dword_ABB674 % 32; v63 = 0; v69 = 0; do { v43 = &v74 + v69; v44 = ~(-1 << v42) & *v43; *v43 = v63 | ((unsigned int)*v43 >> v42); ++v69; v63 = v44 << (32 - v42); } while ( v69 < 3 ); v45 = 2; v46 = &v76 - v41; do { if ( v45 < v41 ) *(&v74 + v45) = 0; else *(&v74 + v45) = *v46; --v46; --v45; } while ( v45 >= 0 ); v5 = dword_ABB668 + dword_ABB67C; result = 1; } goto LABEL_78; } v74 = v71; v75 = v72; v17 = (dword_ABB66C - v57) / 32; v76 = v73; v18 = (dword_ABB66C - v57) % 32; v60 = 0; v67 = 0; do { v19 = &v74 + v67; v20 = ~(-1 << v18) & *v19; *v19 = v60 | ((unsigned int)*v19 >> v18); ++v67; v60 = v20 << (32 - v18); } while ( v67 < 3 ); v21 = 2; v22 = &v76 - v17; do { if ( v21 < v17 ) *(&v74 + v21) = 0; else *(&v74 + v21) = *v22; --v22; --v21; } while ( v21 >= 0 ); v23 = dword_ABB670 - 1; v24 = dword_ABB670 / 32; v56 = dword_ABB670 / 32; v25 = &v74 + dword_ABB670 / 32; v58 = 31 - dword_ABB670 % 32; if ( (1 << (31 - dword_ABB670 % 32)) & *v25 ) { for ( j = (~(-1 << (31 - dword_ABB670 % 32)) & *(&v74 + v24)) == 0; j; j = *(&v74 + v24) == 0 ) { if ( ++v24 >= 3 ) goto LABEL_51; } v27 = v23 / 32; v61 = 0; v28 = 1 << (31 - v23 % 32); v29 = &v74 + v23 / 32; v30 = *v29 + v28; if ( v30 < *v29 || v30 < v28 ) v61 = 1; *v29 = v30; for ( k = v61; --v27 >= 0 && k; k = v34 ) { v32 = &v74 + v27; v33 = *v32 + 1; v34 = 0; if ( v33 < *v32 || v33 < 1 ) v34 = 1; *v32 = v33; } } LABEL_51: *v25 &= -1 << v58; if ( v56 + 1 < 3 ) memset(&v74 + v56 + 1, 0, 4 * (3 - (v56 + 1))); v35 = (dword_ABB674 + 1) / 32; v36 = (dword_ABB674 + 1) % 32; v62 = 0; v68 = 0; do { v37 = &v74 + v68; v38 = ~(-1 << v36) & *v37; *v37 = v62 | ((unsigned int)*v37 >> v36); ++v68; v62 = v38 << (32 - v36); } while ( v68 < 3 ); v39 = 2; v40 = &v76 - v35; do { if ( v39 < v35 ) *(&v74 + v39) = 0; else *(&v74 + v39) = *v40; --v40; --v39; } while ( v39 >= 0 ); } else { v74 = 0; v75 = 0; v76 = 0; } v5 = 0; result = 2; goto LABEL_78; } v5 = 0; v6 = 0; while ( !*(&v74 + v6) ) { if ( ++v6 >= 3 ) { result = 0; goto LABEL_78; } } v74 = 0; v75 = 0; v76 = 0; result = 2; LABEL_78: v52 = v74 | (v54 != 0 ? 0x80000000 : 0) | (v5 << (31 - dword_ABB674)); if ( dword_ABB678 == 64 ) { v53 = v75; a2[1] = v52; *a2 = v53; } else if ( dword_ABB678 == 32 ) { *a2 = v52; } return result; } // ABB668: using guessed type int dword_ABB668; // ABB66C: using guessed type int dword_ABB66C; // ABB670: using guessed type int dword_ABB670; // ABB674: using guessed type int dword_ABB674; // ABB678: using guessed type int dword_ABB678; // ABB67C: using guessed type int dword_ABB67C; //----- (007FCCF2) -------------------------------------------------------- int __cdecl sub_7FCCF2(int a1, int a2, int a3) { HMODULE v3; // eax HMODULE v4; // ebx FARPROC v5; // eax FARPROC v6; // eax FARPROC v7; // eax FARPROC v8; // eax FARPROC v9; // eax int (*v10)(void); // edi int (__stdcall *v11)(int, signed int, char *, signed int, char *); // eax int (__stdcall *v12)(int, signed int, char *, signed int, char *); // ebx int v13; // eax int (*v14)(void); // eax int (__stdcall *v15)(int); // eax int (__stdcall *v16)(int, int, int, int); // eax char v18; // [esp+Ch] [ebp-24h] int v19; // [esp+10h] [ebp-20h] int v20; // [esp+14h] [ebp-1Ch] PVOID v21; // [esp+18h] [ebp-18h] int v22; // [esp+1Ch] [ebp-14h] char v23; // [esp+20h] [ebp-10h] char v24; // [esp+28h] [ebp-8h] v19 = a1; v20 = a2; v22 = 0; v21 = (PVOID)_encoded_null(); if ( !dword_BA3B14 ) { v3 = LoadLibraryW(L"USER32.DLL"); v4 = v3; if ( !v3 ) return 0; v5 = GetProcAddress(v3, "MessageBoxW"); if ( !v5 ) return 0; dword_BA3B14 = EncodePointer(v5); v6 = GetProcAddress(v4, "GetActiveWindow"); dword_BA3B18 = EncodePointer(v6); v7 = GetProcAddress(v4, "GetLastActivePopup"); dword_BA3B1C = EncodePointer(v7); v8 = GetProcAddress(v4, "GetUserObjectInformationW"); dword_BA3B24 = EncodePointer(v8); if ( dword_BA3B24 ) { v9 = GetProcAddress(v4, "GetProcessWindowStation"); dword_BA3B20 = EncodePointer(v9); } } if ( dword_BA3B20 == v21 || dword_BA3B24 == v21 || (v10 = (int (*)(void))DecodePointer(dword_BA3B20), v11 = (int (__stdcall *)(int, signed int, char *, signed int, char *))DecodePointer(dword_BA3B24), v12 = v11, !v10) || !v11 || (v13 = v10()) != 0 && v12(v13, 1, &v23, 12, &v18) && v24 & 1 ) { if ( dword_BA3B18 != v21 ) { v14 = (int (*)(void))DecodePointer(dword_BA3B18); if ( v14 ) { v22 = v14(); if ( v22 ) { if ( dword_BA3B1C != v21 ) { v15 = (int (__stdcall *)(int))DecodePointer(dword_BA3B1C); if ( v15 ) v22 = v15(v22); } } } } } else { a3 |= 0x200000u; } v16 = (int (__stdcall *)(int, int, int, int))DecodePointer(dword_BA3B14); if ( v16 ) return v16(v22, v19, v20, a3); return 0; } // 7E38C2: using guessed type int _encoded_null(void); //----- (007FD290) -------------------------------------------------------- int sub_7FD290() { return 0; } //----- (007FDAA4) -------------------------------------------------------- signed int __cdecl sub_7FDAA4(_DWORD *a1) { signed int result; // eax if ( a1 ) { *a1 = dword_BA3B28; result = 0; } else { *_errno() = 22; _invalid_parameter_noinfo(); result = 22; } return result; } // 7E0390: using guessed type int _invalid_parameter_noinfo(void); // BA3B28: using guessed type int dword_BA3B28; //----- (007FE2CA) -------------------------------------------------------- int __cdecl sub_7FE2CA(int a1, LPCWSTR lpFileName, int a3, int a4, int a5) { return _sopen_helper_0(lpFileName, a3, a4, a5, a1, 1); } //----- (007FF1FD) -------------------------------------------------------- HANDLE sub_7FF1FD() { HANDLE result; // eax result = hObject; if ( hObject != (HANDLE)-1 && hObject != (HANDLE)-2 ) result = (HANDLE)CloseHandle(hObject); return result; } //----- (007FF6C0) -------------------------------------------------------- double __cdecl sub_7FF6C0(float a1) { return (float)ceil(a1); } //----- (007FF6E0) -------------------------------------------------------- int sub_7FF6E0(char *DstBuf, size_t SizeInBytes, char *Format, ...) { int result; // eax va_list va; // [esp+18h] [ebp+14h] va_start(va, Format); if ( !SizeInBytes ) return 1; result = vsprintf_s(DstBuf, SizeInBytes, Format, va); DstBuf[SizeInBytes - 1] = 0; return result; } //----- (007FF710) -------------------------------------------------------- double __thiscall sub_7FF710(_DWORD *this) { _DWORD *v1; // esi float *v2; // ecx float v3; // eax float v4; // ST08_4 double result; // st7 v1 = this; v2 = (float *)this[1]; v3 = *v2; v1[1] = *(_DWORD *)v2; if ( v3 == 0.0 ) v1[2] = 0; else *(_DWORD *)(LODWORD(v3) + 4) = 0; v4 = v2[2]; (*(void (__thiscall **)(_DWORD *, float *))(*v1 + 8))(v1, v2); result = v4; --v1[3]; return result; } //----- (007FF750) -------------------------------------------------------- unsigned int __thiscall sub_7FF750(_DWORD *this, _DWORD *a2) { unsigned int v2; // edx unsigned int result; // eax _DWORD *v4; // ecx v2 = this[2]; result = 0; if ( !v2 ) return -1; v4 = (_DWORD *)*this; while ( *v4 != *a2 ) { ++result; ++v4; if ( result >= v2 ) return -1; } return result; } //----- (007FF780) -------------------------------------------------------- char __stdcall sub_7FF780(int a1, int a2, float a3, int a4, int a5, float a6, float a7, int a8) { return sub_80F3F0((void *)a1, a2, a3, a4, a5, a6, a7, a8); } //----- (007FF7C0) -------------------------------------------------------- int __stdcall sub_7FF7C0(int a1, int a2, char a3) { int result; // eax result = a1; *(_DWORD *)(a1 + 4) = a2; *(_BYTE *)(a1 + 8) = a3; return result; } //----- (007FF7E0) -------------------------------------------------------- int __thiscall sub_7FF7E0(_DWORD *this, unsigned int a2) { return a2 % this[1]; } //----- (007FF800) -------------------------------------------------------- int __thiscall sub_7FF800(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTObjectList::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiActorManager::TimelineData>::`vftable'; return result; } // A20104: using guessed type void *NiTListBase,NiActorManager::TimelineData>::`vftable'; // A201A8: using guessed type void *NiTObjectList::`vftable'; //----- (007FF840) -------------------------------------------------------- void *__thiscall sub_7FF840(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiActorManager::TimelineData>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A20104: using guessed type void *NiTListBase,NiActorManager::TimelineData>::`vftable'; //----- (007FF870) -------------------------------------------------------- void *__thiscall sub_7FF870(void *this, char a2) { void *v2; // esi v2 = this; sub_7FF800(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (007FF8A0) -------------------------------------------------------- void __thiscall sub_7FF8A0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx _DWORD **v3; // eax _DWORD **v4; // edi int v5; // [esp+0h] [ebp-130h] unsigned int v6; // [esp+14h] [ebp-11Ch] _DWORD *v7; // [esp+18h] [ebp-118h] int *v8; // [esp+120h] [ebp-10h] int v9; // [esp+12Ch] [ebp-4h] v8 = &v5; v1 = this; v7 = this; v2 = 0; v9 = 0; while ( 1 ) { v6 = v2; if ( v2 >= v1[1] ) break; while ( 1 ) { v3 = (_DWORD **)(v1[2] + 4 * v2); if ( !*v3 ) break; v4 = (_DWORD **)*v3; *v3 = (_DWORD *)**v3; (*(void (__thiscall **)(_DWORD *, _DWORD **))(*v1 + 16))(v1, v4); (*(void (__thiscall **)(_DWORD *, _DWORD **))(*v1 + 24))(v1, v4); } ++v2; } v1[3] = 0; } //----- (007FF990) -------------------------------------------------------- signed int __thiscall sub_7FF990(_DWORD *this, const char *a2) { _DWORD *v2; // ebx unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // esi int v8; // edi int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx const char *v13; // ecx int v15; // [esp+Ch] [ebp-4h] v2 = this + 30; v3 = this[31]; v4 = 0; if ( v3 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } v6 = *(_DWORD **)(v2[2] + 4 * v4); } else { LABEL_5: v6 = 0; } v7 = v6; if ( !v6 ) return -2; while ( 1 ) { v8 = v7[2]; v15 = v7[1]; if ( *v7 ) { v7 = (_DWORD *)*v7; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 4))(v2, v7[1]); v10 = v2[1]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_14: v7 = 0; } else { v12 = (_DWORD *)(v2[2] + 4 * v11); while ( 1 ) { v7 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_14; } } } v13 = *(const char **)(v8 + 8); if ( v13 ) { if ( !strcmp(a2, v13) ) return v15; } if ( !v7 ) return -2; } } //----- (007FFA60) -------------------------------------------------------- void __thiscall sub_7FFA60(float *this) { float *v1; // esi char v2; // cl int v3; // edx int v4; // edx void (__stdcall *v5)(float *, _DWORD, float, _DWORD); // eax float *v6; // ecx int v7; // eax v1 = this; if ( *((_DWORD *)this + 6) && *((_DWORD *)this + 43) ) { v2 = 0; while ( 1 ) { v3 = *((_DWORD *)v1 + 41); v4 = v3 ? v3 + 8 : 0; if ( *(float *)v4 >= (double)v1[8] ) break; switch ( *(_DWORD *)(v4 + 4) ) { case 0: v5 = (void (__stdcall *)(float *, _DWORD, float, _DWORD))***((_DWORD ***)v1 + 6); goto LABEL_13; case 1: v5 = *(void (__stdcall **)(float *, _DWORD, float, _DWORD))(**((_DWORD **)v1 + 6) + 4); goto LABEL_13; case 2: (*(void (__stdcall **)(float *, _DWORD, _DWORD, _DWORD, float, _DWORD))(**((_DWORD **)v1 + 6) + 8))( v1, *(_DWORD *)(v4 + 8), *(_DWORD *)(v4 + 16), *(_DWORD *)(v4 + 12), v1[8], *(float *)v4); break; case 3: v5 = *(void (__stdcall **)(float *, _DWORD, float, _DWORD))(**((_DWORD **)v1 + 6) + 12); LABEL_13: ((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD))v5)(v1, *(_DWORD *)(v4 + 8), v1[8], *(float *)v4); break; default: break; } v6 = (float *)*((_DWORD *)v1 + 41); v7 = *(_DWORD *)v6; v1[41] = *v6; if ( v7 ) *(_DWORD *)(v7 + 4) = 0; else v1[42] = 0.0; (*(void (__thiscall **)(_DWORD *, float *))(*((_DWORD *)v1 + 40) + 8))((_DWORD *)v1 + 40, v6); --*((_DWORD *)v1 + 43); v2 = 1; if ( !*((_DWORD *)v1 + 43) ) { *((_BYTE *)v1 + 40) = 1; return; } } if ( v2 ) *((_BYTE *)v1 + 40) = 1; } } //----- (007FFB80) -------------------------------------------------------- unsigned int __thiscall sub_7FFB80(float *this) { unsigned int result; // eax float *v2; // edi int v3; // eax int v4; // eax unsigned int v5; // edx unsigned int v6; // eax _DWORD *v7; // ecx _DWORD *v8; // eax _DWORD *v9; // esi int v10; // eax int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx unsigned int v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] result = 0; v2 = this; v15 = 0; if ( *((_DWORD *)this + 37) ) { do { v3 = *(_DWORD *)(*((_DWORD *)v2 + 35) + 4 * result); if ( v3 && !*(_DWORD *)(v3 + 8) ) { v4 = *(_DWORD *)(v3 + 12); if ( v4 == -1 ) { v5 = *((_DWORD *)v2 + 31); v6 = 0; if ( v5 ) { v7 = (_DWORD *)*((_DWORD *)v2 + 32); while ( !*v7 ) { ++v6; ++v7; if ( v6 >= v5 ) goto LABEL_9; } v8 = *(_DWORD **)(*((_DWORD *)v2 + 32) + 4 * v6); } else { LABEL_9: v8 = 0; } v9 = v8; while ( v9 ) { v10 = v9[1]; v9 = (_DWORD *)*v9; v16 = v10; if ( !v9 ) { v11 = (*(int (__thiscall **)(_DWORD *, int))(*((_DWORD *)v2 + 30) + 4))((_DWORD *)v2 + 30, v10); v12 = *((_DWORD *)v2 + 31); v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_16: v9 = 0; } else { v14 = (_DWORD *)(*((_DWORD *)v2 + 32) + 4 * v13); while ( 1 ) { v9 = (_DWORD *)*v14; if ( *v14 ) break; ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_16; } } v10 = v16; } if ( v10 == *((_DWORD *)v2 + 16) ) (***((void (__stdcall ****)(float *, int, float, float))v2 + 6))(v2, v10, v2[8], v2[8]); } } else if ( v4 == *((_DWORD *)v2 + 16) ) { (***((void (__stdcall ****)(float *, int, float, float))v2 + 6))(v2, v4, v2[8], v2[8]); } } result = v15 + 1; v15 = result; } while ( result < *((_DWORD *)v2 + 37) ); } return result; } //----- (007FFCA0) -------------------------------------------------------- unsigned int __thiscall sub_7FFCA0(float *this) { unsigned int result; // eax float *v2; // edi int v3; // eax int v4; // eax unsigned int v5; // edx unsigned int v6; // eax _DWORD *v7; // ecx _DWORD *v8; // eax _DWORD *v9; // esi int v10; // eax int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx unsigned int v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] result = 0; v2 = this; v15 = 0; if ( *((_DWORD *)this + 37) ) { do { v3 = *(_DWORD *)(*((_DWORD *)v2 + 35) + 4 * result); if ( v3 && *(_DWORD *)(v3 + 8) == 1 ) { v4 = *(_DWORD *)(v3 + 12); if ( v4 == -1 ) { v5 = *((_DWORD *)v2 + 31); v6 = 0; if ( v5 ) { v7 = (_DWORD *)*((_DWORD *)v2 + 32); while ( !*v7 ) { ++v6; ++v7; if ( v6 >= v5 ) goto LABEL_9; } v8 = *(_DWORD **)(*((_DWORD *)v2 + 32) + 4 * v6); } else { LABEL_9: v8 = 0; } v9 = v8; while ( v9 ) { v10 = v9[1]; v9 = (_DWORD *)*v9; v16 = v10; if ( !v9 ) { v11 = (*(int (__thiscall **)(_DWORD *, int))(*((_DWORD *)v2 + 30) + 4))((_DWORD *)v2 + 30, v10); v12 = *((_DWORD *)v2 + 31); v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_16: v9 = 0; } else { v14 = (_DWORD *)(*((_DWORD *)v2 + 32) + 4 * v13); while ( 1 ) { v9 = (_DWORD *)*v14; if ( *v14 ) break; ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_16; } } v10 = v16; } if ( v10 == *((_DWORD *)v2 + 16) ) (*(void (__stdcall **)(float *, int, float, float))(**((_DWORD **)v2 + 6) + 4))(v2, v10, v2[8], v2[8]); } } else if ( v4 == *((_DWORD *)v2 + 16) ) { (*(void (__stdcall **)(float *, int, float, float))(**((_DWORD **)v2 + 6) + 4))(v2, v4, v2[8], v2[8]); } } result = v15 + 1; v15 = result; } while ( result < *((_DWORD *)v2 + 37) ); } return result; } //----- (007FFDC0) -------------------------------------------------------- void __thiscall sub_7FFDC0(int *this, int a2) { int v2; // ebx int *v3; // esi int v4; // ecx int *v5; // eax unsigned int v6; // eax int v7; // esi int v8; // ebx int v9; // edi int v10; // esi int v11; // eax int v12; // esi void *v13; // ecx int v14; // ebx int v15; // esi int v16; // edi unsigned int v17; // [esp+8h] [ebp-Ch] int v18; // [esp+8h] [ebp-Ch] int *v19; // [esp+Ch] [ebp-8h] int v20; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v19 = this; if ( a2 != this[1] ) { if ( a2 ) { v4 = 4 * a2 | -((unsigned __int64)(unsigned int)a2 >> 30 != 0); v5 = (int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; if ( a2 - 1 >= 0 ) memset(v5 + 1, 0, 4 * a2); v20 = (int)(v5 + 1); } else { v20 = 0; } v6 = 0; v17 = 0; if ( v3[2] ) { do { v7 = *v3; v8 = 4 * v6; v9 = *(_DWORD *)(4 * v6 + v20); if ( v9 != *(_DWORD *)(v7 + 4 * v6) ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = *(_DWORD *)(v7 + v8); *(_DWORD *)(v8 + v20) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v6 = v17 + 1; v17 = v6; v3 = v19; } while ( v6 < v19[2] ); v2 = a2; } } else { v20 = 0; } v11 = *v3; if ( *v3 ) { v12 = *(_DWORD *)(v11 - 4); v13 = (void *)(v11 - 4); v14 = v11 + 4 * v12; v15 = v12 - 1; v18 = v11 - 4; if ( v15 >= 0 ) { do { v16 = *(_DWORD *)(v14 - 4); v14 -= 4; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); } --v15; } while ( v15 >= 0 ); v13 = (void *)v18; } operator delete(v13); v2 = a2; v3 = v19; } *v3 = v20; v3[1] = v2; } } //----- (007FFF10) -------------------------------------------------------- LONG __thiscall sub_7FFF10(_DWORD *this, unsigned int a2, LONG *a3) { LONG result; // eax int v4; // edx int v5; // ecx int v6; // esi LONG *v7; // edi result = a2; if ( a2 < this[2] ) { if ( a2 < this[3] ) { v4 = this[1]; if ( *a3 ) { if ( *(_DWORD *)(v4 + 4 * a2) == 0 ) ++this[4]; } else if ( *(_DWORD *)(v4 + 4 * a2) != 0 ) { --this[4]; } } else { this[3] = a2 + 1; if ( *a3 ) ++this[4]; } v5 = this[1]; v6 = *(_DWORD *)(v5 + 4 * a2); v7 = (LONG *)(v5 + 4 * a2); if ( v6 != *a3 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = *a3; *v7 = *a3; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); } } return result; } //----- (007FFFB0) -------------------------------------------------------- char __thiscall sub_7FFFB0(_DWORD *this, const char *a2) { const char *v2; // edx if ( !a2 ) return 0; v2 = (const char *)this[3]; if ( !v2 || strcmp(a2, v2) ) return 0; this[2] = a2; return 1; } //----- (00800000) -------------------------------------------------------- int __thiscall sub_800000(_DWORD *this, float a2, int a3, int a4, int a5, int a6) { int result; // eax _DWORD *v7; // esi int v8; // edi result = a3; v7 = this; *(float *)this = a2; this[1] = a3; this[2] = a4; v8 = this[3]; if ( v8 == a5 ) { this[4] = a6; } else { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } v7[3] = a5; if ( a5 ) { InterlockedIncrement((volatile LONG *)(a5 + 4)); result = a6; } v7[4] = a6; } return result; } //----- (00800080) -------------------------------------------------------- void **__thiscall sub_800080(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 6); *(_DWORD *)this = &NiActorManager::ChainCompletionInfo::`vftable'; operator delete(v3); operator delete(v2[7]); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20120: using guessed type void *NiActorManager::ChainCompletionInfo::`vftable'; //----- (008000D0) -------------------------------------------------------- _DWORD *__stdcall sub_8000D0(_DWORD *a1) { _DWORD *result; // eax result = a1; *a1 = dword_BA3B30; dword_BA3B30 = (int)a1; return result; } // BA3B30: using guessed type int dword_BA3B30; //----- (008000F0) -------------------------------------------------------- void **__thiscall sub_8000F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiObject *,NiObject *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20128: using guessed type void *NiTMapBase,NiObject *,NiObject *>::`vftable'; //----- (00800130) -------------------------------------------------------- void **__thiscall sub_800130(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiObject *,bool>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20148: using guessed type void *NiTMapBase,NiObject *,bool>::`vftable'; //----- (00800170) -------------------------------------------------------- void **__thiscall sub_800170(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20168: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; //----- (008001B0) -------------------------------------------------------- void **__thiscall sub_8001B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20188: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; //----- (008001F0) -------------------------------------------------------- void **__thiscall sub_8001F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A200E4: using guessed type void *NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; //----- (00800230) -------------------------------------------------------- void **__thiscall sub_800230(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A200E4: using guessed type void *NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; // A20208: using guessed type void *NiTPointerMap::`vftable'; //----- (00800270) -------------------------------------------------------- _DWORD *__stdcall sub_800270(_DWORD *a1) { _DWORD *result; // eax int v2; // eax int v3; // edi unsigned int v4; // eax int v5; // esi result = sub_85B610(a1, (int)&unk_BA3BE0); if ( !result ) { v2 = sub_402BA0((int)dword_BA455C, (int)a1); v3 = v2; if ( v2 && (v4 = *(_DWORD *)(v2 + 188), v5 = 0, v4) ) { if ( v4 <= 0 ) goto LABEL_7; while ( 1 ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v5) ) { result = (_DWORD *)sub_800270(*(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v5)); if ( result ) break; } LABEL_7: if ( *(_DWORD *)(v3 + 188) <= (unsigned int)++v5 ) goto LABEL_8; } } else { LABEL_8: result = 0; } } return result; } //----- (008002E0) -------------------------------------------------------- _DWORD *__stdcall sub_8002E0(_DWORD *a1) { _DWORD *result; // eax int v2; // eax int v3; // edi unsigned int v4; // eax int v5; // esi result = sub_85B610(a1, (int)dword_BA3BC0); if ( !result ) { v2 = sub_402BA0((int)dword_BA455C, (int)a1); v3 = v2; if ( v2 && (v4 = *(_DWORD *)(v2 + 188), v5 = 0, v4) ) { if ( v4 <= 0 ) goto LABEL_7; while ( 1 ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v5) ) { result = (_DWORD *)sub_8002E0(*(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v5)); if ( result ) break; } LABEL_7: if ( *(_DWORD *)(v3 + 188) <= (unsigned int)++v5 ) goto LABEL_8; } } else { LABEL_8: result = 0; } } return result; } //----- (00800350) -------------------------------------------------------- void __thiscall sub_800350(_DWORD *this, int a2, int a3, int a4, float a5, int a6) { int v6; // eax unsigned int v7; // ebx int v8; // eax unsigned int v9; // edi const char **v10; // esi double v11; // st7 unsigned int v12; // edi int v13; // ebx double v14; // st7 double v15; // st7 float *v16; // esi int v17; // eax int *v18; // ecx int *v19; // ecx _DWORD *v20; // esi int v21; // edi unsigned int v22; // [esp+0h] [ebp-10h] _DWORD *v23; // [esp+4h] [ebp-Ch] unsigned int v24; // [esp+8h] [ebp-8h] int v25; // [esp+Ch] [ebp-4h] int v26; // [esp+20h] [ebp+10h] int v27; // [esp+20h] [ebp+10h] int v28; // [esp+28h] [ebp+18h] v23 = this; if ( sub_8C4C90(this + 30, a3, &v24) ) { if ( v24 ) { if ( a6 ) { v6 = *(_DWORD *)(v24 + 32); if ( v6 ) { v7 = *(_DWORD *)(v6 + 12); v8 = *(_DWORD *)(v6 + 16); v9 = 0; v22 = v7; v25 = v8; if ( v7 ) { v10 = (const char **)(v8 + 4); while ( !*v10 || strcmp(*v10, (const char *)a6) ) { ++v9; v10 += 2; if ( v9 >= v7 ) return; } v11 = *(float *)(v25 + 8 * v9); v12 = v9 + 1; *(float *)&v28 = v11; v24 = v12; if ( v12 < v7 ) { v13 = a4; v14 = *(float *)&v28; do { v26 = *(int *)(v25 + 8 * v12); if ( *(float *)&v26 > v14 ) break; if ( v14 == *(float *)&v26 ) { v15 = *(float *)&v26; v16 = (float *)v23[41]; v27 = *(_DWORD *)(v25 + 8 * v12 + 4); if ( v16 ) { while ( v16[2] <= v15 ) { v16 = *(float **)v16; if ( !v16 ) goto LABEL_18; } v17 = (*(int (__thiscall **)(_DWORD *))(v23[40] + 4))(v23 + 40); *(_DWORD *)v17 = v16; *(float *)(v17 + 4) = v16[1]; v19 = (int *)*((_DWORD *)v16 + 1); if ( v19 ) *v19 = v17; else v23[41] = v17; *((_DWORD *)v16 + 1) = v17; } else { LABEL_18: v17 = (*(int (__thiscall **)(_DWORD *))(v23[40] + 4))(v23 + 40); *(_DWORD *)v17 = 0; *(_DWORD *)(v17 + 4) = v23[42]; v18 = (int *)v23[42]; if ( v18 ) *v18 = v17; else v23[41] = v17; v23[42] = v17; } ++v23[43]; *(float *)(v17 + 8) = a5; v20 = (_DWORD *)(v17 + 8); v20[1] = a2; v20[2] = a3; v21 = *(_DWORD *)(v17 + 20); if ( v21 != v13 ) { if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v20[3] = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } v14 = *(float *)&v28; v12 = v24; v20[4] = v27; } v24 = ++v12; } while ( v12 < v22 ); } } } } } } } //----- (00800560) -------------------------------------------------------- char __thiscall sub_800560(void **this, int a2, int a3, char a4, float a5, float a6, int a7) { void **v7; // edi float *v8; // ebx int v10; // eax char v11; // bl void *v12; // eax void *v13; // eax float *v14; // [esp+1Ch] [ebp-4h] v7 = this; if ( !sub_8C4C90(this + 30, a2, &v14) ) return 0; v8 = v14; if ( !v14 ) return 0; v10 = 0; if ( a7 != -2 ) { if ( !sub_8C4C90(v7 + 30, a7, &a7) ) return 0; v10 = a7; if ( !a7 ) return 0; } v11 = sub_80D4C0(v8, a3, a4, a5, a6, v10, 0); if ( v11 ) { v12 = v7[45]; if ( v7[46] == v12 ) { if ( v12 ) v13 = (void *)(2 * (_DWORD)v12); else v13 = (void *)1; sub_811D30(v7 + 44, v13); } *((_DWORD *)v7[44] + (_DWORD)v7[46]) = a2; v7[46] = (char *)v7[46] + 1; *((_BYTE *)v7 + 40) = 1; } return v11; } //----- (00800630) -------------------------------------------------------- char __thiscall sub_800630(_DWORD *this, int a2, float a3) { _DWORD *v3; // edi int v4; // eax char v5; // bl unsigned int v6; // eax int v8; // [esp+10h] [ebp-4h] v3 = this; if ( !sub_8C4C90(this + 30, a2, &v8) ) return 0; if ( !v8 ) return 0; v4 = *(_DWORD *)(v8 + 68); if ( v4 == 3 || v4 == 2 ) return 0; v5 = sub_80D580(v8, a3, 0); if ( v5 ) { v6 = sub_7FF750(v3 + 44, &a2); if ( v6 != -1 ) *(_DWORD *)(v3[44] + 4 * v6) = *(_DWORD *)(v3[44] + 4 * --v3[46]); *((_BYTE *)v3 + 40) = 1; } return v5; } //----- (008006C0) -------------------------------------------------------- char __thiscall sub_8006C0(_DWORD *this, int a2) { int v2; // edi float *v3; // esi char result; // al int v5; // ebx unsigned int v6; // ecx signed int v7; // eax _DWORD *v8; // edx void (__thiscall ***v9)(_DWORD, signed int); // esi _DWORD *v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = (float *)this; v10 = this + 30; result = sub_8C4C90(this + 30, a2, &a2); if ( result ) { v5 = a2; if ( a2 ) { v6 = *((_DWORD *)v3 + 46); v7 = 0; if ( v6 ) { v8 = (_DWORD *)*((_DWORD *)v3 + 44); while ( *v8 != v2 ) { ++v7; ++v8; if ( v7 >= v6 ) goto LABEL_7; } } else { LABEL_7: v7 = -1; } if ( v2 == *((_DWORD *)v3 + 16) || v2 == *((_DWORD *)v3 + 18) || v2 == *((_DWORD *)v3 + 7) || v7 > -1 ) sub_4DC550(v3); sub_816500(*((_DWORD **)v3 + 4), &a2, v5); v9 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } result = sub_916F40(v10, v2); } } return result; } //----- (00800770) -------------------------------------------------------- int *__thiscall sub_800770(_DWORD *this, int a2, int a3, int a4, float a5, int a6) { int v6; // edi int v7; // ebx char v8; // al int v9; // esi double v10; // st7 double v11; // st6 int *v13; // edi double v14; // st7 float v15; // ST20_4 double v16; // st7 float v17; // ST20_4 int *v18; // [esp+18h] [ebp-Ch] float v19; // [esp+1Ch] [ebp-8h] v6 = a4; v7 = 0; if ( *(_DWORD *)a4 || !*(_DWORD *)(a4 + 16) || !***(_DWORD ***)(a4 + 8) ) return 0; v8 = sub_8C4C90(this + 30, a2, &a2); v9 = v8 != 0 ? a2 : 0; a2 = *(int *)(v8 != 0 ? a2 + 0x30 : 48); v10 = *(float *)&a2; *(float *)&a2 = *(float *)&a2 - *(float *)(v9 + 44); v11 = a5; *(float *)a6 = a5; if ( v11 > v10 ) { if ( *(_DWORD *)(v9 + 36) == 2 ) return 0; a5 = v11 / *(float *)&a2; a5 = floor(a5); a5 = a5 * *(float *)&a2; a5 = v11 - a5; } v18 = 0; v19 = 3.4028235e38; if ( *(_DWORD *)(v6 + 16) > 0u ) { while ( 1 ) { v13 = *(int **)(*(_DWORD *)(v6 + 8) + 4 * v7); v14 = sub_80CE40((_DWORD *)v9, *v13); v15 = v14 - a5; v16 = v15; if ( v15 < 0.0 ) { v17 = v16 + *(float *)&a2; v16 = v17; } if ( v19 > v16 ) { v19 = v16; v18 = v13; } if ( (unsigned int)++v7 >= *(_DWORD *)(a4 + 16) ) break; v6 = a4; } } *(float *)a6 = *(float *)a6 + v19; return v18; } //----- (008008B0) -------------------------------------------------------- _DWORD *__thiscall sub_8008B0(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // ecx unsigned int *v5; // eax void *v6; // edx _DWORD *result; // eax v3 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( a2 ) { v4 = 4 * a2 | -((unsigned __int64)a2 >> 30 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = v5 + 1; if ( (signed int)(a2 - 1) >= 0 ) { memset(v6, 0, 4 * a2); v3[1] = v6; return v3; } } else { v6 = 0; } v3[1] = v6; result = v3; } else { this[1] = 0; result = this; } return result; } // A20230: using guessed type void *NiTArray>::`vftable'; //----- (00800940) -------------------------------------------------------- void __thiscall sub_800940(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A20230: using guessed type void *NiTArray>::`vftable'; //----- (008009A0) -------------------------------------------------------- void __thiscall sub_8009A0(int *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = *this; if ( *this ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } //----- (00800A00) -------------------------------------------------------- LONG __thiscall sub_800A00(int *this, LONG *a2) { int *v2; // esi int v3; // eax int v4; // eax int v5; // eax LONG *v6; // edi LONG result; // eax LONG v8; // esi v2 = this; v3 = this[1]; if ( this[2] == v3 ) { if ( v3 ) v4 = 2 * v3; else v4 = 1; sub_7FFDC0(this, v4); } v5 = v2[2]; v6 = (LONG *)(*v2 + 4 * v5); result = v5 + 1; v2[2] = result; v8 = *v6; if ( *v6 != *a2 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(LONG, signed int))v8)(v8, 1); result = *a2; *v6 = *a2; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); } return result; } //----- (00800A80) -------------------------------------------------------- void *__thiscall sub_800A80(void *this, char a2) { void *v2; // esi v2 = this; sub_800940(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00800AB0) -------------------------------------------------------- signed int __thiscall sub_800AB0(_DWORD *this, int a2, int a3, _BYTE *a4) { signed int result; // eax if ( !sub_8C4C90(this + 6, a2, &a2) || !a2 ) return 2; if ( sub_8C4C90((_DWORD *)(a2 + 12), a3, &a2) && a2 ) { *a4 = 1; result = 0; } else { *a4 = 0; result = 0; } return result; } //----- (00800B10) -------------------------------------------------------- void __stdcall sub_800B10(int a1) { bool v1; // zf *(_BYTE *)(a1 + 8) = 0; EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; *(_DWORD *)(a1 + 4) = 0; *(_DWORD *)a1 = dword_BA46F4; v1 = dword_BA4714-- == 1; dword_BA46F4 = a1; if ( v1 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (00800B80) -------------------------------------------------------- void **__thiscall sub_800B80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,NiObject *,NiObject *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20128: using guessed type void *NiTMapBase,NiObject *,NiObject *>::`vftable'; // A20238: using guessed type void *NiTPointerMap::`vftable'; //----- (00800BC0) -------------------------------------------------------- void **__thiscall sub_800BC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,NiObject *,bool>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20148: using guessed type void *NiTMapBase,NiObject *,bool>::`vftable'; // A20258: using guessed type void *NiTPointerMap::`vftable'; //----- (00800C00) -------------------------------------------------------- void **__thiscall sub_800C00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20168: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; // A201C8: using guessed type void *NiTPointerMap::`vftable'; //----- (00800C40) -------------------------------------------------------- void **__thiscall sub_800C40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20188: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; // A201E8: using guessed type void *NiTPointerMap::`vftable'; //----- (00800C80) -------------------------------------------------------- void __thiscall sub_800C80(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A20228: using guessed type void *NiTArray>::`vftable'; //----- (00800CE0) -------------------------------------------------------- void *__thiscall sub_800CE0(void *this, char a2) { void *v2; // esi v2 = this; sub_800C80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00800D10) -------------------------------------------------------- int sub_800D10() { int v0; // esi int v1; // ecx int *v2; // eax int v3; // ecx int v4; // edx _DWORD *v5; // eax int v6; // ecx signed int v7; // ecx signed int v8; // eax unsigned int v9; // esi int result; // eax v0 = dword_ABB948; v1 = 28 * dword_ABB948 | -(28 * (unsigned __int64)(unsigned int)dword_ABB948 >> 32 != 0); v2 = (int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( v2 ) { v3 = v0 - 1; *v2 = v0; v4 = (int)(v2 + 1); if ( v0 - 1 >= 0 ) { v5 = v2 + 6; do { *v5 = 0; v5 += 7; --v3; } while ( v3 >= 0 ); } v6 = v4; } else { v6 = 0; } dword_BA3B30 = v6; *(_DWORD *)(v6 + 28 * dword_ABB948 - 28) = 0; v7 = 1; v8 = 28; do { *(_DWORD *)(v8 + dword_BA3B30) = v8 + dword_BA3B30 + 28; v9 = v7++; v8 += 28; } while ( v9 < dword_ABB948 - 2 ); if ( dword_BA3B2C ) { *(_DWORD *)dword_BA3B30 = dword_BA3B2C; dword_BA3B2C = dword_BA3B30; result = dword_BA3B30 + 28; } else { result = dword_BA3B30; dword_BA3B2C = dword_BA3B30; *(_DWORD *)dword_BA3B30 = 0; } dword_BA3B30 += 28; return result; } // ABB948: using guessed type int dword_ABB948; // BA3B2C: using guessed type int dword_BA3B2C; // BA3B30: using guessed type int dword_BA3B30; //----- (00800DF0) -------------------------------------------------------- _DWORD *__thiscall sub_800DF0(_DWORD *this, int a2, char a3) { _DWORD *v3; // esi void *v4; // eax size_t v5; // ST08_4 v3 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v3 = &NiActorManager::`vftable'; v3[2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v3[3] = 0; v3[4] = 0; v3[5] = 0; v3[6] = 0; v3[24] = 0; v3[22] = 0; v3[23] = 0; v3[21] = &NiTPointerList::`vftable'; v3[28] = 0; v3[26] = 0; v3[27] = 0; v3[25] = &NiTPointerList::`vftable'; *((_BYTE *)v3 + 117) = a3; v3[31] = 37; v3[30] = &NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; v3[33] = 0; v4 = operator new(0x94u); v5 = 4 * v3[31]; v3[32] = v4; memset(v4, 0, v5); v3[30] = &NiTPointerMap::`vftable'; v3[34] = &NiTArray>::`vftable'; v3[36] = 0; v3[39] = 1; v3[37] = 0; v3[38] = 0; v3[35] = 0; v3[43] = 0; v3[41] = 0; v3[42] = 0; v3[40] = &NiTObjectList::`vftable'; v3[44] = 0; v3[45] = 0; v3[46] = 0; sub_4DC550((float *)v3); sub_81A750(v3 + 34, 3u); v3[39] = 3; return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // 9BBC0C: using guessed type void *NiTPointerList::`vftable'; // 9C60D4: using guessed type void *NiTPointerList::`vftable'; // A200E4: using guessed type void *NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; // A201A8: using guessed type void *NiTObjectList::`vftable'; // A20208: using guessed type void *NiTPointerMap::`vftable'; // A20228: using guessed type void *NiTArray>::`vftable'; // A20278: using guessed type void *NiActorManager::`vftable'; //----- (00800F30) -------------------------------------------------------- LONG __thiscall sub_800F30(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; v2 = (void *)this[44]; *this = &NiActorManager::`vftable'; operator delete(v2); sub_7FF800(v1 + 40); sub_800C80(v1 + 34); v1[30] = &NiTPointerMap::`vftable'; sub_7FF8A0(v1 + 30); v1[30] = &NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; sub_7FF8A0(v1 + 30); operator delete((void *)v1[32]); sub_522240(v1 + 25); sub_4B0FE0(v1 + 21); v3 = v1[5]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[4]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[3]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[2]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A200E4: using guessed type void *NiTMapBase,unsigned int,NiControllerSequence *>::`vftable'; // A20208: using guessed type void *NiTPointerMap::`vftable'; // A20278: using guessed type void *NiActorManager::`vftable'; //----- (00801030) -------------------------------------------------------- char __thiscall sub_801030(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi char v4; // bl v3 = this; sub_8006C0(this, a2); v4 = sub_8166B0((_DWORD *)v3[4], a3, 0, 1); if ( v4 ) sub_815C70(v3 + 30, a2, a3); return v4; } //----- (00801070) -------------------------------------------------------- float *__thiscall sub_801070(_DWORD *this, int a2, int a3, float a4, int a5, int a6) { _DWORD *v6; // esi char v7; // al int v8; // edi char v9; // al int v10; // ebx char v11; // al float *v12; // ecx double v13; // st7 float v14; // ST10_4 int v15; // eax float v16; // esi float *v17; // eax float *v18; // esi const char *v19; // edi unsigned int v20; // kr00_4 char *v21; // eax float *v22; // eax float *v23; // ecx int v24; // edx double v25; // st7 double v26; // st7 void *v27; // eax const char *v28; // edi unsigned int v29; // kr04_4 char *v30; // eax void (__thiscall ***v31)(_DWORD, signed int); // edi volatile LONG *v32; // edx int v34; // [esp+14h] [ebp-Ch] int v35; // [esp+1Ch] [ebp-4h] v6 = this; v7 = sub_8C4C90(this + 30, a2, &v35); v8 = v7 != 0 ? v35 : 0; v9 = sub_8C4C90(v6 + 30, a3, &v35); v34 = v9 != 0 ? v35 : 0; if ( sub_8C4C90((_DWORD *)(v6[2] + 24), a2, &v35) && v35 ) { v11 = sub_8C4C90((_DWORD *)(v35 + 12), a3, &v35); v10 = v11 != 0 ? v35 : 0; } else { v10 = 0; } if ( -1.0 == a4 ) { v12 = (float *)a5; a4 = *(float *)(v8 + 48); if ( *(float *)a5 <= (double)a4 ) goto LABEL_10; v13 = *(float *)a5; } else { v13 = a4 + *(float *)a5; v12 = (float *)a5; } a4 = v13; LABEL_10: v14 = *v12; v35 = 0; v15 = *(_DWORD *)sub_801C20(v6, (int)&a4, a2, a3, v10, v14, a4); if ( v15 ) { v35 = v15; InterlockedIncrement((volatile LONG *)(v15 + 4)); } if ( a4 != 0.0 ) { v16 = a4; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(a4) + 4)) && v16 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v16))(COERCE_FLOAT(LODWORD(v16)), 1); } v17 = (float *)operator new(0x2Cu); v18 = v17; if ( v17 ) { *(_DWORD *)v17 = &NiRefObject::`vftable'; v17[1] = 0.0; InterlockedIncrement(&Addend); *(_DWORD *)v18 = &NiActorManager::ChainCompletionInfo::`vftable'; v18[6] = 0.0; v18[7] = 0.0; } else { v18 = 0; } v19 = *(const char **)(v8 + 8); operator delete(*((void **)v18 + 6)); v18[6] = 0.0; if ( v19 ) { v20 = strlen(v19); v21 = (char *)operator new(v20 + 1); *((_DWORD *)v18 + 6) = v21; strcpy_s(v21, v20 + 1, v19); } v22 = (float *)a6; v23 = (float *)a5; v24 = v35; v18[2] = *(float *)a6; v18[5] = *v23; *(float *)&a6 = *(float *)(v24 + 12) + *v22; v25 = *(float *)&a6; *v22 = *(float *)&a6; v18[3] = v25 - *(float *)(v10 + 4); v26 = *v22; *((_DWORD *)v18 + 9) = a2; v18[4] = v26; v27 = (void *)*((_DWORD *)v18 + 7); *((_DWORD *)v18 + 8) = v10; *((_DWORD *)v18 + 10) = a3; v28 = *(const char **)(v34 + 8); operator delete(v27); v18[7] = 0.0; if ( v28 ) { v29 = strlen(v28); v30 = (char *)operator new(v29 + 1); *((_DWORD *)v18 + 7) = v30; strcpy_s(v30, v29 + 1, v28); } v31 = (void (__thiscall ***)(_DWORD, signed int))v35; v32 = (volatile LONG *)(v35 + 4); *(float *)a5 = *(float *)(v35 + 8); if ( !InterlockedDecrement(v32) ) (**v31)(v31, 1); return v18; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20120: using guessed type void *NiActorManager::ChainCompletionInfo::`vftable'; //----- (008012C0) -------------------------------------------------------- _DWORD *__thiscall sub_8012C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi void *v4; // eax size_t v5; // ST08_4 _DWORD *v6; // eax _DWORD *v7; // esi void *v8; // eax size_t v9; // ST08_4 v1 = this; v2 = operator new(0x10u); v3 = v2; if ( v2 ) { v2[1] = 37; *v2 = &NiTMapBase,NiObject *,NiObject *>::`vftable'; v2[3] = 0; v4 = operator new(0x94u); v5 = 4 * v3[1]; v3[2] = v4; memset(v4, 0, v5); *v3 = &NiTPointerMap::`vftable'; } else { v3 = 0; } *v1 = v3; v6 = operator new(0x10u); v7 = v6; if ( v6 ) { v6[1] = 37; *v6 = &NiTMapBase,NiObject *,bool>::`vftable'; v6[3] = 0; v8 = operator new(0x94u); v9 = 4 * v7[1]; v7[2] = v8; memset(v8, 0, v9); *v7 = &NiTPointerMap::`vftable'; } else { v7 = 0; } v1[1] = v7; v1[2] = dword_BA4564; *((_BYTE *)v1 + 12) = byte_ABD306; return v1; } // A20128: using guessed type void *NiTMapBase,NiObject *,NiObject *>::`vftable'; // A20148: using guessed type void *NiTMapBase,NiObject *,bool>::`vftable'; // A20238: using guessed type void *NiTPointerMap::`vftable'; // A20258: using guessed type void *NiTPointerMap::`vftable'; // ABD306: using guessed type char byte_ABD306; // BA4564: using guessed type int dword_BA4564; //----- (008013A0) -------------------------------------------------------- _DWORD *__thiscall sub_8013A0(_DWORD *this, char *Src) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST1C_4 void *v5; // eax size_t v6; // ST0C_4 unsigned int v7; // kr00_4 char *v8; // eax float *v9; // eax float *v10; // eax v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiKFMTool::`vftable'; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = &NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; v2[7] = 37; v2[9] = 0; v3 = operator new(0x94u); v4 = 4 * v2[7]; v2[8] = v3; memset(v3, 0, v4); v2[6] = &NiTPointerMap::`vftable'; v2[10] = &NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; v2[11] = 37; v2[13] = 0; v5 = operator new(0x94u); v6 = 4 * v2[11]; v2[12] = v5; memset(v5, 0, v6); v2[10] = &NiTPointerMap::`vftable'; operator delete((void *)v2[2]); v2[2] = 0; if ( Src ) { v7 = strlen(Src); v8 = (char *)operator new(v7 + 1); v2[2] = v8; strcpy_s(v8, v7 + 1, Src); } v9 = (float *)operator new(0x24u); if ( v9 ) { *(_DWORD *)v9 = 1; v9[1] = 0.25; v9[2] = 0.0; v9[3] = 0.0; v9[4] = 0.0; v9[5] = 0.0; v9[6] = 0.0; v9[7] = 0.0; *((_DWORD *)v9 + 8) = 6; } else { v9 = 0; } v2[14] = v9; *((_DWORD *)v9 + 8) = 4; v10 = (float *)operator new(0x24u); if ( v10 ) { *(_DWORD *)v10 = 2; v10[1] = 0.25; v10[2] = 0.0; v10[3] = 0.0; v10[4] = 0.0; v10[5] = 0.0; v10[6] = 0.0; v10[7] = 0.0; *((_DWORD *)v10 + 8) = 6; v2[15] = v10; *((_DWORD *)v10 + 8) = 5; } else { v2[15] = 0; MEMORY[0x20] = 5; } return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20168: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; // A20188: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; // A201C8: using guessed type void *NiTPointerMap::`vftable'; // A201E8: using guessed type void *NiTPointerMap::`vftable'; // A20288: using guessed type void *NiKFMTool::`vftable'; //----- (00801540) -------------------------------------------------------- void **__thiscall sub_801540(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20290: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; //----- (00801580) -------------------------------------------------------- void __thiscall sub_801580(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx void **v3; // edi v1 = this; v2 = 0; if ( this[4] ) { do { v3 = *(void ***)(v1[2] + 4 * v2); if ( v3 ) { operator delete(*v3); operator delete(v3[1]); operator delete(v3); } ++v2; } while ( v2 < v1[4] ); v1[4] = 0; } else { this[4] = 0; } } //----- (008015D0) -------------------------------------------------------- void **__thiscall sub_8015D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20290: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; // A202B0: using guessed type void *NiTPointerMap::`vftable'; //----- (00801610) -------------------------------------------------------- void *__thiscall sub_801610(void *this, char a2) { void *v2; // esi v2 = this; sub_800F30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00801640) -------------------------------------------------------- _DWORD *__thiscall sub_801640(char *this) { int v1; // edi void *v2; // ecx int v3; // ebx _DWORD *v4; // eax int v5; // esi int v6; // esi int v7; // ebx _DWORD *v8; // ebx int v9; // esi unsigned int v10; // ecx unsigned int v11; // eax _DWORD *v12; // edx _DWORD *v13; // eax int v14; // ecx int v15; // ebx _DWORD *v16; // eax int v17; // eax unsigned int v18; // edx unsigned int v19; // eax _DWORD *v20; // ecx int v21; // esi int v22; // ebx int (__thiscall *v23)(int, int); // edx _DWORD *v24; // edi int v25; // eax unsigned int v26; // eax int v27; // esi void (__stdcall ***v29)(signed int); // [esp+Ch] [ebp-24h] void (__stdcall ***v30)(signed int); // [esp+10h] [ebp-20h] int v31; // [esp+14h] [ebp-1Ch] int v32; // [esp+1Ch] [ebp-14h] int v33; // [esp+20h] [ebp-10h] char *v34; // [esp+24h] [ebp-Ch] _DWORD *v35; // [esp+28h] [ebp-8h] _DWORD *v36; // [esp+2Ch] [ebp-4h] v1 = (int)this; v34 = this; sub_8012C0(&v29); v2 = *(void **)(v1 + 12); v31 = 1; v3 = sub_85B9F0(v2, (int)&v29); v35 = sub_800270((_DWORD *)v3); v4 = operator new(0xBCu); if ( v4 ) v36 = sub_800DF0(v4, *(_DWORD *)(v1 + 8), *(_BYTE *)(v1 + 117)); else v36 = 0; v5 = v36[3]; if ( v5 != v3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v36[3] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } v6 = v36[4]; v7 = (int)v35; if ( (_DWORD *)v6 != v35 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v36[4] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v8 = sub_8002E0((_DWORD *)v36[3]); v9 = v36[5]; if ( (_DWORD *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v36[5] = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } v36[6] = *(_DWORD *)(v1 + 24); v10 = *(_DWORD *)(v1 + 124); v11 = 0; if ( v10 ) { v12 = *(_DWORD **)(v1 + 128); while ( !*v12 ) { ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_29; } v13 = *(_DWORD **)(*(_DWORD *)(v1 + 128) + 4 * v11); } else { LABEL_29: v13 = 0; } if ( v13 ) { while ( 1 ) { v14 = v13[1]; v15 = v13[2]; v16 = (_DWORD *)*v13; v32 = v14; if ( v16 ) { v35 = v16; } else { v17 = (*(int (__thiscall **)(int, int))(*(_DWORD *)(v1 + 120) + 4))(v1 + 120, v14); v18 = *(_DWORD *)(v1 + 124); v19 = v17 + 1; if ( v19 >= v18 ) { LABEL_40: v35 = 0; } else { v20 = (_DWORD *)(*(_DWORD *)(v1 + 128) + 4 * v19); while ( !*v20 ) { ++v19; ++v20; if ( v19 >= v18 ) goto LABEL_40; } v35 = (_DWORD *)*v20; } } v21 = v36[4]; v22 = *(_DWORD *)(v15 + 8); v23 = *(int (__thiscall **)(int, int))(*(_DWORD *)(v21 + 84) + 4); v33 = v36[4]; v24 = *(_DWORD **)(*(_DWORD *)(v21 + 92) + 4 * v23(v21 + 84, v22)); if ( v24 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v21 + 84) + 8))( v21 + 84, v22, v24[1]) ) { v24 = (_DWORD *)*v24; if ( !v24 ) goto LABEL_44; } v25 = *(_DWORD *)(*(_DWORD *)(v33 + 64) + 4 * v24[2]); } else { LABEL_44: v25 = 0; } sub_815C70(v36 + 30, v32, v25); v1 = (int)v34; if ( !v35 ) break; v13 = v35; } } v26 = 0; v34 = 0; if ( *(_DWORD *)(v1 + 148) ) { do { v27 = *(_DWORD *)(*(_DWORD *)(v1 + 140) + 4 * v26); if ( v27 ) { v32 = *(_DWORD *)(*(_DWORD *)(v1 + 140) + 4 * v26); InterlockedIncrement((volatile LONG *)(v27 + 4)); sub_9334C0(v36 + 34, &v32); if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); } v26 = (unsigned int)(v34 + 1); v34 = (char *)v26; } while ( v26 < *(_DWORD *)(v1 + 148) ); } if ( v29 ) (**v29)(1); if ( v30 ) (**v30)(1); return v36; } //----- (00801910) -------------------------------------------------------- char __thiscall sub_801910(_DWORD *this, int a2) { int v2; // esi int v3; // edi int v5; // eax _DWORD *v6; // ebx float *v7; // eax int v8; // eax unsigned int v9; // ecx int v10; // ebx unsigned int v11; // esi int v12; // esi unsigned int v13; // edi void (__thiscall ***v14)(_DWORD, signed int); // edi unsigned int v15; // eax int v16; // edi int v17; // edx int v18; // esi _DWORD *v19; // ebx int v20; // ebx int v21; // esi _DWORD *v22; // ebx _DWORD *v23; // eax int v24; // esi _DWORD *v25; // ebx void **v26; // [esp+8h] [ebp-3Ch] int v27; // [esp+Ch] [ebp-38h] unsigned int v28; // [esp+10h] [ebp-34h] unsigned int v29; // [esp+14h] [ebp-30h] int v30; // [esp+18h] [ebp-2Ch] int v31; // [esp+1Ch] [ebp-28h] int v32; // [esp+20h] [ebp-24h] int v33; // [esp+24h] [ebp-20h] unsigned int i; // [esp+28h] [ebp-1Ch] int v35; // [esp+2Ch] [ebp-18h] unsigned int v36; // [esp+30h] [ebp-14h] unsigned int v37; // [esp+34h] [ebp-10h] _DWORD *v38; // [esp+38h] [ebp-Ch] int v39; // [esp+3Ch] [ebp-8h] _DWORD *v40; // [esp+40h] [ebp-4h] v2 = a2; v3 = (int)this; v40 = this; if ( !a2 ) return 0; v5 = *(_DWORD *)(this[2] + 20); if ( !v5 ) return 0; v6 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 72))(a2, v5); if ( !v6 ) return 0; sub_4DC550((float *)v3); v7 = (float *)operator new(0x7Cu); if ( v7 ) v38 = (_DWORD *)sub_816DF0(v7, v6, *(_BYTE *)(v3 + 117)); else v38 = 0; v8 = *(_DWORD *)(v3 + 16); if ( v8 ) { v9 = 0; v26 = &NiTArray>::`vftable'; v28 = 0; v31 = 1; v29 = 0; v30 = 0; v27 = 0; for ( i = 0; v9 < *(_DWORD *)(v8 + 72); i = v9 ) { v10 = *(_DWORD *)(*(_DWORD *)(v8 + 64) + 4 * v9); v35 = v10; if ( v10 ) { InterlockedIncrement((volatile LONG *)(v10 + 4)); v36 = *(_DWORD *)(v10 + 12); v11 = v36; sub_80C6B0(&v26); if ( v11 > v28 ) sub_81A750(&v26, v11); if ( v11 ) { v39 = 0; v37 = v11; do { v12 = *(_DWORD *)(v39 + *(_DWORD *)(v10 + 20) + 4); v33 = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); v13 = v29; if ( v29 >= v28 ) sub_81A750(&v26, v31 + v29); sub_7FFF10(&v26, v13, &v33); if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v39 += 16; --v37; } while ( v37 ); v11 = v36; v3 = (int)v40; } sub_816500(*(_DWORD **)(v3 + 16), &v32, v10); if ( v32 ) { v14 = (void (__thiscall ***)(_DWORD, signed int))v32; if ( !InterlockedDecrement((volatile LONG *)(v32 + 4)) && v14 ) (**v14)(v14, 1); v3 = (int)v40; } v15 = 0; v37 = 0; if ( v11 ) { v39 = 0; do { v16 = *(_DWORD *)(v27 + 4 * v15); v17 = *(_DWORD *)(v10 + 20); v18 = *(_DWORD *)(v39 + v17 + 4); v19 = (_DWORD *)(v39 + v17 + 4); if ( v18 != v16 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); *v19 = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } v39 += 16; v10 = v35; v15 = v37 + 1; v37 = v15; } while ( v15 < v36 ); v3 = (int)v40; } sub_8166B0(v38, v10, 0, 1); if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v2 = a2; } v8 = *(_DWORD *)(v3 + 16); v9 = i + 1; } sub_800940(&v26); } v20 = *(_DWORD *)(v3 + 12); if ( v20 != v2 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *(_DWORD *)(v3 + 12) = v2; InterlockedIncrement((volatile LONG *)(v2 + 4)); } v21 = *(_DWORD *)(v3 + 16); v22 = v38; if ( (_DWORD *)v21 != v38 ) { if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); *(_DWORD *)(v3 + 16) = v22; if ( v22 ) InterlockedIncrement(v22 + 1); } v23 = sub_8002E0(*(_DWORD **)(v3 + 12)); v24 = *(_DWORD *)(v3 + 20); v25 = v23; if ( (_DWORD *)v24 != v23 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); *(_DWORD *)(v3 + 20) = v25; if ( v25 ) InterlockedIncrement(v25 + 1); } return 1; } // A20230: using guessed type void *NiTArray>::`vftable'; //----- (00801C20) -------------------------------------------------------- int __thiscall sub_801C20(_DWORD *this, int a2, int a3, int a4, int a5, float a6, float a7) { _DWORD *v7; // ebx _DWORD *v8; // eax _DWORD *v9; // esi char v10; // al int v11; // esi char v12; // al int v13; // ebx int v14; // edi int v15; // ecx const char *v16; // eax double v17; // st7 float v18; // eax int result; // eax int *v20; // eax float *v21; // ecx const char *v22; // eax float *v23; // eax const char *v24; // eax float *v25; // eax double v26; // st7 float v27; // eax double v28; // st6 double v29; // st6 float v30; // eax double v31; // st7 double v32; // st7 float *v33; // ecx double v34; // st7 float v35; // eax double v36; // st7 unsigned int v37; // eax int v38; // eax int v39; // edi char v40; // al float *v41; // esi float *v42; // edi double v43; // st7 float *v44; // eax float *v45; // esi char v46; // al int v47; // eax double v48; // st7 double v49; // st6 float v50; // eax float v51; // esi int v52; // [esp+1Ch] [ebp-20h] unsigned int v53; // [esp+20h] [ebp-1Ch] int v54; // [esp+24h] [ebp-18h] int v55; // [esp+28h] [ebp-14h] int v56; // [esp+2Ch] [ebp-10h] _DWORD *v57; // [esp+30h] [ebp-Ch] _DWORD *v58; // [esp+34h] [ebp-8h] int v59; // [esp+38h] [ebp-4h] int v60; // [esp+48h] [ebp+Ch] int v61; // [esp+48h] [ebp+Ch] float v62; // [esp+48h] [ebp+Ch] int v63; // [esp+48h] [ebp+Ch] float v64; // [esp+48h] [ebp+Ch] float v65; // [esp+48h] [ebp+Ch] float v66; // [esp+4Ch] [ebp+10h] int v67; // [esp+4Ch] [ebp+10h] float v68; // [esp+4Ch] [ebp+10h] float v69; // [esp+4Ch] [ebp+10h] float v70; // [esp+4Ch] [ebp+10h] v7 = this; v58 = this; v8 = operator new(0x28u); v9 = v8; if ( v8 ) { *v8 = &NiRefObject::`vftable'; v8[1] = 0; InterlockedIncrement(&Addend); *v9 = &NiActorManager::CompletionInfo::`vftable'; v9[7] = 0; v9[8] = 0; v9[9] = 0; } else { v9 = 0; } *(_DWORD *)a2 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); v57 = v7 + 30; v10 = sub_8C4C90(v7 + 30, a3, &v59); v11 = v10 != 0 ? v59 : 0; v12 = sub_8C4C90(v7 + 30, a4, &v59); v13 = a5; v14 = v12 != 0 ? v59 : 0; v52 = v12 != 0 ? v59 : 0; switch ( *(_DWORD *)a5 ) { case 0: v15 = *(_DWORD *)(a5 + 16); if ( v15 && (v15 != 1 || ***(_DWORD ***)(a5 + 8)) ) { *(float *)&a5 = 0.0; v20 = sub_800770(v58, a3, a4, v13, a7, (int)&a5); v21 = *(float **)a2; v61 = (int)v20; *(_DWORD *)(*(_DWORD *)a2 + 24) = v20; if ( v20 ) { v22 = (const char *)*v20; if ( !v22 ) v22 = "start"; a7 = sub_80CE40((_DWORD *)v11, (int)v22); v23 = *(float **)a2; v23[4] = a7; v67 = (int)v23; v24 = *(const char **)(v61 + 4); if ( !v24 ) v24 = "start"; *(float *)(v67 + 8) = sub_80CE40((_DWORD *)v14, (int)v24); v25 = *(float **)a2; a7 = *(float *)(v13 + 4); a6 = *(float *)&a5 - a6; a6 = a6 / *(float *)(v11 + 40); v25[3] = a6 + a7; result = a2; } else { result = a2; a7 = *(float *)(v11 + 48); v21[4] = a7; a7 = *(float *)(v14 + 44); v21[2] = a7; a7 = *(float *)(v13 + 4); a6 = *(float *)&a5 - a6; a6 = a6 / *(float *)(v11 + 40); v21[3] = a6 + a7; } } else { v16 = "start"; *(float *)&v60 = a7 - a6; if ( v15 == 1 ) v16 = *(const char **)(**(_DWORD **)(a5 + 8) + 4); a6 = *(float *)a2; v17 = sub_80CE40((_DWORD *)v14, (int)v16); *(float *)(LODWORD(a6) + 8) = v17; v18 = *(float *)a2; v66 = *(float *)(v13 + 4); a6 = *(float *)&v60 / *(float *)(v11 + 40); *(float *)(LODWORD(v18) + 12) = a6 + v66; *(float *)(LODWORD(v18) + 16) = a7; result = a2; } break; case 1: v26 = a7; v27 = *(float *)a2; *(float *)(LODWORD(v27) + 16) = a7; v62 = *(float *)(v13 + 4); a7 = v26 - a6; a7 = a7 / *(float *)(v11 + 40); *(float *)(LODWORD(v27) + 12) = a7 + v62; a7 = v26 / *(float *)(v11 + 40); *(float *)&v63 = sub_80D840((float *)v14, v11, a7); a7 = *(float *)(v14 + 48); *(float *)&a5 = a7 - *(float *)&v63; a7 = *(float *)(v13 + 4); if ( -1.0 == a7 ) { a7 = *(float *)(v14 + 48); v28 = a7 - *(float *)(v14 + 44) - a6; } else { v28 = a7 * *(float *)(v14 + 40); } a6 = v28; v29 = a6; if ( *(float *)&a5 >= (double)a6 ) { *(float *)(*(_DWORD *)a2 + 8) = *(float *)&v63 + v29; } else { a7 = *(float *)(v14 + 48) - *(float *)(v14 + 44); v68 = v29 - *(float *)&a5; v69 = v68 / a7; v70 = ceil(v69); v30 = *(float *)a2; v31 = a7; a7 = v70 * a7; a7 = v31 - *(float *)&v63 + a7; *(float *)(LODWORD(v30) + 8) = v31 - (a7 - a6); } result = a2; break; case 2: v32 = a7; v33 = *(float **)a2; v33[4] = a7; a7 = *(float *)(v13 + 4); a6 = v32 - a6; a6 = a6 / *(float *)(v11 + 40); v34 = a7; v33[3] = a6 + a7; a6 = *(float *)(v14 + 48); a7 = *(float *)(v14 + 44); a6 = a6 - a7; a7 = v34 * *(float *)(v14 + 40); if ( a6 >= (double)a7 ) { result = a2; v33[2] = a7; } else if ( *(_DWORD *)(v14 + 36) == 2 ) { result = a2; v33[2] = a6; } else { v64 = a7 / a6; v65 = sub_7FF6C0(v64); v35 = *(float *)a2; v36 = a6; a6 = v65 * a6; *(float *)(LODWORD(v35) + 8) = v36 - (a6 - a7); result = a2; } break; case 3: v37 = *(_DWORD *)(a5 + 28); *(float *)&a5 = 0.0; v53 = v37; v59 = *(int *)(v11 + 44); a6 = a7; a7 = 0.0; if ( v37 ) { do { v38 = *(_DWORD *)(v13 + 20); v39 = *(_DWORD *)(v38 + 8 * LODWORD(a7)); v54 = v38 + 8 * LODWORD(a7); v55 = v39; v40 = sub_8C4C90(v57, v39, &v56); v41 = (float *)(v40 != 0 ? v56 : 0); *(float *)&v42 = COERCE_FLOAT(sub_801070(v58, a3, v39, a6, (int)&v59, (int)&a5)); a6 = *(float *)&v42; if ( *(float *)&v42 != 0.0 ) InterlockedIncrement((volatile LONG *)v42 + 1); sub_800A00((int *)(*(_DWORD *)a2 + 28), (LONG *)&a6); if ( *(float *)&v42 != 0.0 && !InterlockedDecrement((volatile LONG *)v42 + 1) ) (**(void (__thiscall ***)(float *, signed int))v42)(v42, 1); a6 = *(float *)(v54 + 4); a3 = v55; if ( -1.0 == a6 ) { a6 = v41[12]; v43 = a6 - v41[11] - *(float *)&v59; } else { v43 = a6 * v41[10]; } a6 = v43; ++LODWORD(a7); } while ( LODWORD(a7) < v53 ); v14 = v52; } *(float *)&v44 = COERCE_FLOAT(sub_801070(v58, a3, a4, a6, (int)&v59, (int)&a5)); v45 = v44; a6 = *(float *)&v44; if ( *(float *)&v44 != 0.0 ) InterlockedIncrement((volatile LONG *)v44 + 1); sub_800A00((int *)(*(_DWORD *)a2 + 28), (LONG *)&a6); if ( v45 && !InterlockedDecrement((volatile LONG *)v45 + 1) ) (**(void (__thiscall ***)(float *, signed int))v45)(v45, 1); v46 = sub_8C4C90(v57, a3, &a6); v47 = v46 != 0 ? LODWORD(a6) : 0; a6 = *(float *)(v14 + 48) / *(float *)(v14 + 40); v48 = a6; v49 = *(float *)&v59 / *(float *)(v47 + 40); v50 = *(float *)a2; a6 = v49; *(float *)&a5 = v48 - a6 + *(float *)&a5; *(float *)(LODWORD(v50) + 20) = *(float *)&a5; result = a2; break; default: v51 = *(float *)a2; if ( *(_DWORD *)a2 ) { if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v51) + 4)) && v51 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v51))(COERCE_FLOAT(LODWORD(v51)), 1); *(_DWORD *)a2 = 0; } result = a2; break; } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20280: using guessed type void *NiActorManager::CompletionInfo::`vftable'; //----- (00802210) -------------------------------------------------------- _DWORD *__thiscall sub_802210(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_8009A0((int *)this + 7); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (00802250) -------------------------------------------------------- double __thiscall sub_802250(float *this, int a2) { float *v2; // esi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx int v6; // ebx int v8; // edi _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // edx int v12; // eax _DWORD *v13; // ecx int v14; // eax double v15; // st7 float v16; // ST14_4 float v17; // ST10_4 bool v18; // zf int v19; // edi int *v20; // ecx float v21; // edx double v22; // st7 float *v23; // eax double v24; // st6 int v25; // ebx float v26; // edx char v27; // al float *v28; // edi int v29; // eax char v30; // al int v31; // eax double v32; // st7 double v33; // st7 double v34; // st6 int v35; // [esp+14h] [ebp-30h] int v36; // [esp+18h] [ebp-2Ch] int v37; // [esp+1Ch] [ebp-28h] int v38; // [esp+20h] [ebp-24h] float v39; // [esp+24h] [ebp-20h] float v40; // [esp+28h] [ebp-1Ch] int v41; // [esp+2Ch] [ebp-18h] float v42; // [esp+30h] [ebp-14h] float v43; // [esp+34h] [ebp-10h] float v44; // [esp+38h] [ebp-Ch] int *v45; // [esp+3Ch] [ebp-8h] int v46; // [esp+40h] [ebp-4h] v2 = this; v3 = *((_DWORD *)this + 46); v4 = 0; if ( v3 ) { v5 = (_DWORD *)*((_DWORD *)v2 + 44); while ( 1 ) { v6 = a2; if ( *v5 == a2 ) break; ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_9; } if ( v4 != -1 ) return -3.4028235e38; } else { v6 = a2; } LABEL_9: if ( v6 == *((_DWORD *)v2 + 16) ) return -3.4028235e38; v8 = *((_DWORD *)v2 + 18); if ( v6 == v8 ) return v2[13]; if ( v8 != -2 ) { v9 = (_DWORD *)*((_DWORD *)v2 + 22); if ( v9 ) { while ( 1 ) { v10 = v9 + 2; v11 = v9; v9 = (_DWORD *)*v9; if ( v6 == *v10 ) break; if ( !v9 ) return -3.4028235e38; } if ( v11 ) { v12 = *((_DWORD *)v2 + 16); v13 = (_DWORD *)*((_DWORD *)v2 + 2); v39 = v2[13]; v14 = sub_64EE80(v13, v12, v8); v42 = v2[14]; v15 = v42; if ( -3.402823466385289e38 == v42 ) { v42 = 0.0; v15 = (float)0.0; } v16 = v15; v17 = v15; sub_801C20(v2, (int)&v46, *((_DWORD *)v2 + 16), *((_DWORD *)v2 + 18), v14, v17, v16); v18 = *((_DWORD *)v2 + 28) == 0; v19 = *((_DWORD *)v2 + 18); v20 = (int *)*((_DWORD *)v2 + 22); v43 = *(float *)(v46 + 8); v21 = v2[26]; v40 = 0.0; v41 = v19; v22 = v43; if ( !v18 ) { v44 = *(float *)(LODWORD(v21) + 8); v23 = (float *)*((_DWORD *)v2 + 19); if ( -1.0 == v44 ) v24 = v23[12] - v23[11] - v22; else v24 = v44 * v23[10]; v44 = v24; v40 = v22 + v44; if ( v20 ) v45 = (int *)*v20; else v45 = 0; v20 = v45; if ( v21 == 0.0 ) v21 = 0.0; else v21 = *(float *)LODWORD(v21); } if ( v6 == v19 ) { LABEL_51: sub_410C00(&v46); return v39; } while ( v20 ) { v25 = v20[2]; v42 = *(float *)(LODWORD(v21) + 8); v26 = *(float *)LODWORD(v21); v45 = (int *)*v20; v44 = v26; v27 = sub_8C4C90((_DWORD *)v2 + 30, v25, &v38); v28 = (float *)(v27 != 0 ? v38 : 0); if ( sub_8C4C90((_DWORD *)(*((_DWORD *)v2 + 2) + 24), v41, &v37) && v37 ) { v30 = sub_8C4C90((_DWORD *)(v37 + 12), v25, &v36); v29 = v30 != 0 ? v36 : 0; } else { v29 = 0; } v40 = COERCE_FLOAT(sub_801C20(v2, (int)&v35, v41, v25, v29, v43, v40)); if ( v46 != *(_DWORD *)LODWORD(v40) ) { if ( !InterlockedDecrement((volatile LONG *)(v46 + 4)) ) (**(void (__stdcall ***)(signed int))v46)(1); v31 = *(_DWORD *)LODWORD(v40); v46 = v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); } if ( *(float *)&v35 != 0.0 ) { v40 = *(float *)&v35; if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v40 != 0.0 ) (**(void (__stdcall ***)(signed int))LODWORD(v40))(1); } v32 = *(float *)(v46 + 12); v41 = v25; v39 = v32 + v39; v43 = *(float *)(v46 + 8); if ( -1.0 == v42 ) { v33 = v43; v34 = v28[12] - v28[11] - v43; } else { v34 = v42 * v28[10]; v33 = v43; } v42 = v34; v40 = v33 + v42; if ( a2 == v25 ) goto LABEL_51; v21 = v44; v20 = v45; } sub_410C00(&v46); } } } return -3.4028235e38; } //----- (00802540) -------------------------------------------------------- double __thiscall sub_802540(float *this, int a2) { float *v2; // edi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx int v6; // esi double result; // st7 int v8; // ebx _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // edx int v12; // eax _DWORD *v13; // ecx int v14; // eax int v15; // esi double v16; // st7 float v17; // ST14_4 float v18; // ST10_4 int v19; // eax int *v20; // ecx float v21; // edx double v22; // st7 float *v23; // eax double v24; // st6 int v25; // ebx float v26; // edx char v27; // al float *v28; // esi char v29; // al int v30; // eax double v31; // st7 double v32; // st7 double v33; // st6 int v34; // [esp+14h] [ebp-38h] int v35; // [esp+18h] [ebp-34h] int v36; // [esp+1Ch] [ebp-30h] int v37; // [esp+20h] [ebp-2Ch] float v38; // [esp+24h] [ebp-28h] float v39; // [esp+28h] [ebp-24h] int v40; // [esp+2Ch] [ebp-20h] float v41; // [esp+30h] [ebp-1Ch] float v42; // [esp+34h] [ebp-18h] int v43; // [esp+38h] [ebp-14h] float v44; // [esp+3Ch] [ebp-10h] float v45; // [esp+40h] [ebp-Ch] int *v46; // [esp+44h] [ebp-8h] int v47; // [esp+48h] [ebp-4h] v2 = this; v3 = *((_DWORD *)this + 46); v4 = 0; if ( v3 ) { v5 = (_DWORD *)*((_DWORD *)v2 + 44); while ( 1 ) { v6 = a2; if ( *v5 == a2 ) break; ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_9; } if ( v4 != -1 ) return -3.4028235e38; } else { v6 = a2; } LABEL_9: if ( v6 == *((_DWORD *)v2 + 16) ) { if ( *((_DWORD *)v2 + 18) == -2 || v2[12] < (double)v2[8] ) return -3.4028235e38; result = v2[12]; } else { v8 = *((_DWORD *)v2 + 18); if ( v8 == -2 || v6 == v8 && !*((_DWORD *)v2 + 24) ) goto LABEL_19; v9 = (_DWORD *)*((_DWORD *)v2 + 22); if ( !v9 ) goto LABEL_19; while ( 1 ) { v10 = v9 + 2; v11 = v9; v9 = (_DWORD *)*v9; if ( v6 == *v10 ) break; if ( !v9 ) goto LABEL_19; } if ( v11 ) { v12 = *((_DWORD *)v2 + 16); v13 = (_DWORD *)*((_DWORD *)v2 + 2); v39 = v2[12]; v14 = sub_64EE80(v13, v12, v8); v42 = v2[14]; v15 = v14; v16 = v42; if ( -3.402823466385289e38 == v42 ) { v42 = 0.0; v16 = (float)0.0; } v17 = v16; v18 = v16; sub_801C20(v2, (int)&v47, *((_DWORD *)v2 + 16), *((_DWORD *)v2 + 18), v14, v18, v17); v19 = *((_DWORD *)v2 + 18); v20 = (int *)*((_DWORD *)v2 + 22); v44 = *(float *)(v47 + 8); v21 = v2[26]; v41 = 0.0; v43 = v19; v38 = *(float *)(v15 + 4); v22 = v44; if ( *((_DWORD *)v2 + 28) ) { v45 = *(float *)(LODWORD(v21) + 8); v23 = (float *)*((_DWORD *)v2 + 19); if ( -1.0 == v45 ) v24 = v23[12] - v23[11] - v22; else v24 = v45 * v23[10]; v45 = v24; v41 = v22 + v45; if ( v20 ) v46 = (int *)*v20; else v46 = 0; v20 = v46; if ( v21 == 0.0 ) v21 = 0.0; else v21 = *(float *)LODWORD(v21); } if ( v20 ) { while ( 1 ) { v25 = v20[2]; v42 = *(float *)(LODWORD(v21) + 8); v26 = *(float *)LODWORD(v21); v46 = (int *)*v20; v45 = v26; v27 = sub_8C4C90((_DWORD *)v2 + 30, v25, &v37); v28 = (float *)(v27 != 0 ? v37 : 0); if ( sub_8C4C90((_DWORD *)(*((_DWORD *)v2 + 2) + 24), v43, &v36) && v36 ) { v29 = sub_8C4C90((_DWORD *)(v36 + 12), v25, &v35); v40 = v29 != 0 ? v35 : 0; } else { v40 = 0; } v41 = COERCE_FLOAT(sub_801C20(v2, (int)&v34, v43, v25, v40, v44, v41)); if ( v47 != *(_DWORD *)LODWORD(v41) ) { if ( !InterlockedDecrement((volatile LONG *)(v47 + 4)) ) (**(void (__stdcall ***)(signed int))v47)(1); v30 = *(_DWORD *)LODWORD(v41); v47 = v30; if ( v30 ) InterlockedIncrement((volatile LONG *)(v30 + 4)); } if ( *(float *)&v34 != 0.0 ) { v41 = *(float *)&v34; if ( !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v41 != 0.0 ) (**(void (__stdcall ***)(signed int))LODWORD(v41))(1); } v39 = *(float *)(v47 + 16) - v44 + v38 + v39; if ( a2 == v43 ) break; v31 = *(float *)(v47 + 8); v43 = v25; v44 = v31; if ( -1.0 == v42 ) { v32 = v44; v33 = v28[12] - v28[11] - v44; } else { v33 = v42 * v28[10]; v32 = v44; } v42 = v33; v41 = v32 + v42; v38 = *(float *)(v40 + 4); if ( !v46 ) goto LABEL_54; v21 = v45; v20 = v46; } sub_410C00(&v47); result = v39; } else { LABEL_54: sub_410C00(&v47); result = -3.4028235e38; } } else { LABEL_19: result = -3.4028235e38; } } return result; } //----- (00802860) -------------------------------------------------------- double __thiscall sub_802860(float *this, int a2, int a3) { float *v3; // esi unsigned int v4; // ecx unsigned int v5; // eax _DWORD *v6; // edx int v7; // edi char v8; // al double result; // st7 int v10; // edi _DWORD *v11; // ecx double v12; // st7 int v13; // ebx _DWORD *v14; // eax _DWORD *v15; // ecx _DWORD *v16; // edx int v17; // eax _DWORD *v18; // ecx int v19; // eax double v20; // st7 float v21; // ST14_4 float v22; // ST10_4 bool v23; // zf int v24; // edx int v25; // edi int *v26; // ebx float v27; // ecx double v28; // st7 double v29; // st6 int v30; // edx int v31; // ebx float v32; // ecx char v33; // al int v34; // eax char v35; // al int v36; // eax double v37; // st7 double v38; // st7 double v39; // st6 int v40; // [esp+14h] [ebp-30h] int v41; // [esp+18h] [ebp-2Ch] int v42; // [esp+1Ch] [ebp-28h] int v43; // [esp+20h] [ebp-24h] int v44; // [esp+24h] [ebp-20h] float v45; // [esp+28h] [ebp-1Ch] float v46; // [esp+2Ch] [ebp-18h] float v47; // [esp+30h] [ebp-14h] float v48; // [esp+34h] [ebp-10h] int *v49; // [esp+38h] [ebp-Ch] float v50; // [esp+3Ch] [ebp-8h] int v51; // [esp+40h] [ebp-4h] v3 = this; v4 = *((_DWORD *)this + 46); v5 = 0; if ( v4 ) { v6 = (_DWORD *)*((_DWORD *)v3 + 44); while ( 1 ) { v7 = a2; if ( *v6 == a2 ) break; ++v5; ++v6; if ( v5 >= v4 ) goto LABEL_11; } if ( v5 != -1 ) { v8 = sub_8C4C90((_DWORD *)v3 + 30, a2, &a2); v50 = sub_80CD60((float *)(v8 != 0 ? a2 : 0), a3, v3[8]); result = v50; if ( -3.4028235e38 != v50 && v3[8] <= result ) return result; return -3.4028235e38; } } else { v7 = a2; } LABEL_11: if ( v7 == *((_DWORD *)v3 + 16) ) { v10 = a3; v50 = sub_80CD60((float *)*((_DWORD *)v3 + 17), a3, v3[8]); result = v50; if ( -3.4028235e38 == v50 || v3[8] > result ) return -3.4028235e38; if ( v3[8] == result ) { v11 = (_DWORD *)*((_DWORD *)v3 + 17); a2 = v11[11]; v12 = sub_80B890(v11, v10); if ( *(float *)&a2 != v12 ) return -3.4028235e38; result = v50; } if ( *((_DWORD *)v3 + 18) == -2 || v3[12] >= result ) return result; return -3.4028235e38; } v13 = *((_DWORD *)v3 + 18); if ( v13 != -2 ) { if ( v7 == v13 ) goto LABEL_70; if ( *((_DWORD *)v3 + 24) ) { if ( v7 == v13 ) goto LABEL_70; v14 = (_DWORD *)*((_DWORD *)v3 + 22); if ( v14 ) { while ( 1 ) { v15 = v14 + 2; v16 = v14; v14 = (_DWORD *)*v14; if ( v7 == *v15 ) break; if ( !v14 ) return -3.4028235e38; } if ( v16 ) { LABEL_70: v17 = *((_DWORD *)v3 + 16); v18 = (_DWORD *)*((_DWORD *)v3 + 2); v50 = v3[13]; v19 = sub_64EE80(v18, v17, v13); v45 = v3[14]; v20 = v45; if ( -3.402823466385289e38 == v45 ) { v45 = 0.0; v20 = (float)0.0; } v21 = v20; v22 = v20; sub_801C20(v3, (int)&v51, *((_DWORD *)v3 + 16), *((_DWORD *)v3 + 18), v19, v22, v21); v23 = *((_DWORD *)v3 + 28) == 0; v24 = *((_DWORD *)v3 + 18); v25 = *((_DWORD *)v3 + 19); v47 = *(float *)(v51 + 8); v26 = (int *)*((_DWORD *)v3 + 22); v27 = v3[26]; v45 = 0.0; v28 = v47; v44 = v24; if ( !v23 ) { v48 = *(float *)(LODWORD(v27) + 8); if ( -1.0 == v48 ) v29 = *(float *)(v25 + 48) - *(float *)(v25 + 44) - v28; else v29 = v48 * *(float *)(v25 + 40); v48 = v29; v45 = v28 + v48; if ( v26 ) v49 = (int *)*v26; else v49 = 0; v26 = v49; if ( v27 == 0.0 ) v27 = 0.0; else v27 = *(float *)LODWORD(v27); } if ( a2 == v24 ) { LABEL_62: *(float *)&a2 = sub_80B890((_DWORD *)v25, a3); if ( -3.4028235e38 != *(float *)&a2 && (!v26 || v45 >= (double)*(float *)&a2) ) { a3 = *(int *)(v25 + 40); sub_410C00(&v51); *(float *)&a2 = *(float *)&a2 - v47; *(float *)&a2 = *(float *)&a2 / *(float *)&a3; *(float *)&a2 = *(float *)&a2 + v50; return *(float *)&a2; } } else { while ( v26 ) { v30 = *v26; v31 = v26[2]; v46 = *(float *)(LODWORD(v27) + 8); v32 = *(float *)LODWORD(v27); v49 = (int *)v30; v48 = v32; v33 = sub_8C4C90((_DWORD *)v3 + 30, v31, &v43); v25 = v33 != 0 ? v43 : 0; if ( sub_8C4C90((_DWORD *)(*((_DWORD *)v3 + 2) + 24), v44, &v42) && v42 ) { v35 = sub_8C4C90((_DWORD *)(v42 + 12), v31, &v41); v34 = v35 != 0 ? v41 : 0; } else { v34 = 0; } v44 = sub_801C20(v3, (int)&v40, v44, v31, v34, v47, v45); if ( v51 != *(_DWORD *)v44 ) { if ( !InterlockedDecrement((volatile LONG *)(v51 + 4)) ) (**(void (__stdcall ***)(signed int))v51)(1); v36 = *(_DWORD *)v44; v51 = v36; if ( v36 ) InterlockedIncrement((volatile LONG *)(v36 + 4)); } if ( v40 ) { v44 = v40; if ( !InterlockedDecrement((volatile LONG *)(v40 + 4)) ) { if ( v44 ) (**(void (__stdcall ***)(signed int))v44)(1); } } v37 = *(float *)(v51 + 12); v44 = v31; v50 = v37 + v50; v47 = *(float *)(v51 + 8); if ( -1.0 == v46 ) { v38 = v47; v39 = *(float *)(v25 + 48) - *(float *)(v25 + 44) - v47; } else { v39 = v46 * *(float *)(v25 + 40); v38 = v47; } v23 = a2 == v31; v46 = v39; v26 = v49; v45 = v38 + v46; if ( v23 ) goto LABEL_62; v27 = v48; } } sub_410C00(&v51); } } } } return -3.4028235e38; } //----- (00802C90) -------------------------------------------------------- void __thiscall sub_802C90(void **this) { void **v1; // esi void *v2; // ecx _DWORD *v3; // edi unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // esi int *v8; // ebx int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx int v13; // eax int v14; // ecx v1 = this; operator delete(this[1]); v2 = v1[4]; v3 = v1 + 3; v4 = 0; if ( v2 ) { v5 = v1[5]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= (unsigned int)v2 ) goto LABEL_5; } v6 = (_DWORD *)*((_DWORD *)v1[5] + v4); } else { LABEL_5: v6 = 0; } v7 = v6; while ( v7 ) { v8 = (int *)v7[2]; if ( *v7 ) { v7 = (_DWORD *)*v7; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v3 + 4))(v3, v7[1]); v10 = v3[1]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_14: v7 = 0; } else { v12 = (_DWORD *)(v3[2] + 4 * v11); while ( 1 ) { v7 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_14; } } } v13 = v8[8]; v14 = v13; if ( v13 == 6 ) v14 = *v8; if ( v14 != 4 ) { if ( v13 == 6 ) v13 = *v8; if ( v13 != 5 ) { sub_801580(v8); operator delete((void *)v8[5]); operator delete((void *)v8[2]); operator delete(v8); } } } *v3 = &NiTPointerMap::`vftable'; sub_7FF8A0(v3); *v3 = &NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; sub_7FF8A0(v3); operator delete((void *)v3[2]); } // A20290: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; // A202B0: using guessed type void *NiTPointerMap::`vftable'; //----- (00802D90) -------------------------------------------------------- double __thiscall sub_802D90(float *this, int a2) { float *v2; // esi void **v4; // [esp+4h] [ebp-10h] int v5; // [esp+8h] [ebp-Ch] int v6; // [esp+Ch] [ebp-8h] const char *v7; // [esp+10h] [ebp-4h] float v8; // [esp+1Ch] [ebp+8h] v2 = this; v5 = 0; InterlockedIncrement(&Addend); v4 = &NiTextKeyMatch::`vftable'; v6 = 0; v7 = "end"; v8 = sub_802860(v2, a2, (int)&v4); v6 = 0; v4 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); return v8; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20114: using guessed type void *NiTextKeyMatch::`vftable'; //----- (00802E00) -------------------------------------------------------- int *sub_802E00() { int *result; // eax result = (int *)dword_BA3B30; if ( !dword_BA3B30 ) { sub_800D10(); result = (int *)dword_BA3B30; } dword_BA3B30 = *result; *result = 0; result[1] = 0; return result; } // BA3B30: using guessed type int dword_BA3B30; //----- (00802E30) -------------------------------------------------------- void __thiscall sub_802E30(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ecx int v4; // ebx const char *v5; // esi int v6; // esi _DWORD *v7; // edi int v8; // edi void *v9; // eax int v10; // esi int v11; // esi int v12; // edi void (__thiscall ***v13)(_DWORD, signed int); // esi int v14; // [esp+4h] [ebp-124h] unsigned int v15; // [esp+8h] [ebp-120h] void *v16; // [esp+Ch] [ebp-11Ch] int v17; // [esp+10h] [ebp-118h] int v18; // [esp+14h] [ebp-114h] int v19; // [esp+18h] [ebp-110h] char v20; // [esp+1Fh] [ebp-109h] char Dst; // [esp+20h] [ebp-108h] v2 = (int)this; v3 = (_DWORD *)this[2]; v19 = v2; v17 = a2; sub_811E40(v3, &v16, &v15); Dst = 0; v18 = 0; if ( v15 ) { while ( 1 ) { v4 = *((_DWORD *)v16 + v18); v5 = (const char *)sub_812460(*(void ***)(v2 + 8), *((_DWORD *)v16 + v18)); v20 = 0; if ( strcmp(&Dst, v5) ) { v20 = 1; strcpy_s(&Dst, 0x104u, v5); } if ( *(_DWORD *)(v19 + 16) ) { v6 = *(_DWORD *)(v19 + 8); v7 = *(_DWORD **)(*(_DWORD *)(v6 + 32) + 4 * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v6 + 24) + 4))(v6 + 24, v4)); if ( v7 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v6 + 24) + 8))(v6 + 24, v4, v7[1]) ) { v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_21; } v8 = v7[2]; if ( v8 ) { v9 = sub_812460(*(void ***)(v19 + 8), v4); v10 = v17; if ( !v20 || (*(unsigned __int8 (__thiscall **)(int, void *))(*(_DWORD *)v17 + 12))(v17, v9) ) { sub_80FC40((float **)&v14, v10, *(_DWORD *)(v8 + 8)); v11 = v14; if ( v14 ) { v12 = v19; sub_8006C0((_DWORD *)v19, v4); if ( sub_8166B0(*(_DWORD **)(v12 + 16), v11, 0, 1) ) sub_815C70((_DWORD *)(v12 + 120), v4, v11); v13 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v13 ) (**v13)(v13, 1); } } } } } LABEL_21: if ( ++v18 >= v15 ) break; v2 = v19; } } operator delete(v16); } //----- (00803030) -------------------------------------------------------- char __thiscall sub_803030(_DWORD *this, int **a2) { _DWORD *v2; // edi int v3; // ecx void *v4; // eax int v5; // eax v2 = this; v3 = this[2]; if ( !*(_DWORD *)(v3 + 16) ) return 0; v4 = sub_812400((void **)v3); if ( !((unsigned __int8 (__thiscall *)(int **, void *))(*a2)[3])(a2, v4) ) return 0; v5 = sub_402BA0((int)dword_BA457C, *a2[83]); if ( !v5 || !sub_801910(v2, v5) ) return 0; sub_802E30(v2, (int)a2); return 1; } //----- (008030A0) -------------------------------------------------------- void __thiscall sub_8030A0(float *this, int a2, int a3, int a4) { float *v4; // ebx double v5; // st7 float *v6; // esi float **v7; // eax float ***v8; // ecx float ***v9; // ecx _DWORD *v10; // eax int v11; // esi float v12; // [esp+20h] [ebp-4h] v4 = this; switch ( a2 ) { case 0: v5 = sub_802250(this, a3); break; case 1: v5 = sub_802540(this, a3); break; case 2: v5 = sub_802860(this, a3, a4); break; case 3: v5 = sub_802D90(this, a3); break; default: v5 = -3.4028235e38; break; } v12 = v5; if ( -3.402823466385289e38 != v12 ) { v6 = (float *)*((_DWORD *)v4 + 41); if ( v6 ) { while ( v6[2] <= (double)v12 ) { v6 = *(float **)v6; if ( !v6 ) goto LABEL_11; } v7 = (float **)(*(int (__thiscall **)(_DWORD *))(*((_DWORD *)v4 + 40) + 4))((_DWORD *)v4 + 40); *v7 = v6; v7[1] = (float *)*((_DWORD *)v6 + 1); v9 = (float ***)*((_DWORD *)v6 + 1); if ( v9 ) *v9 = v7; else *((_DWORD *)v4 + 41) = v7; *((_DWORD *)v6 + 1) = v7; } else { LABEL_11: v7 = (float **)(*(int (__thiscall **)(_DWORD *))(*((_DWORD *)v4 + 40) + 4))((_DWORD *)v4 + 40); *v7 = 0; v7[1] = (float *)*((_DWORD *)v4 + 42); v8 = (float ***)*((_DWORD *)v4 + 42); if ( v8 ) *v8 = v7; else *((_DWORD *)v4 + 41) = v7; *((_DWORD *)v4 + 42) = v7; } ++*((_DWORD *)v4 + 43); v10 = v7 + 2; v11 = 0; if ( a4 ) v11 = *(_DWORD *)(a4 + 8); sub_800000(v10, v12, a2, a3, a4, v11); sub_800350(v4, a2, a3, a4, v12, v11); } } //----- (00803200) -------------------------------------------------------- LONG __thiscall sub_803200(_DWORD *this) { _DWORD *v1; // ebx void *v2; // ST0C_4 unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // esi void **v8; // edi int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx unsigned int v13; // edx _DWORD *v14; // edi unsigned int v15; // eax _DWORD *v16; // ecx _DWORD *v17; // eax _DWORD *v18; // esi void **v19; // ebx int v20; // eax unsigned int v21; // edx unsigned int v22; // eax _DWORD *v23; // ecx void **v24; // esi void **v25; // esi _DWORD *v27; // [esp+Ch] [ebp-8h] void **v28; // [esp+10h] [ebp-4h] v1 = this; v2 = (void *)this[2]; v27 = this; *this = &NiKFMTool::`vftable'; operator delete(v2); operator delete((void *)v1[3]); operator delete((void *)v1[4]); operator delete((void *)v1[5]); v3 = v1[7]; v4 = 0; if ( v3 ) { v5 = (_DWORD *)v1[8]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } v6 = *(_DWORD **)(v1[8] + 4 * v4); } else { LABEL_5: v6 = 0; } v7 = v6; while ( v7 ) { v8 = (void **)v7[2]; v28 = (void **)v7[2]; if ( *v7 ) { v7 = (_DWORD *)*v7; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[6] + 4))(v1 + 6, v7[1]); v10 = v1[7]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_14: v7 = 0; } else { v12 = (_DWORD *)(v1[8] + 4 * v11); while ( 1 ) { v7 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_14; } } v8 = v28; } if ( v8 ) { sub_802C90(v8); operator delete(v8); } } v13 = v1[11]; v14 = v1 + 10; v15 = 0; if ( v13 ) { v16 = (_DWORD *)v1[12]; while ( !*v16 ) { ++v15; ++v16; if ( v15 >= v13 ) goto LABEL_23; } v17 = *(_DWORD **)(v1[12] + 4 * v15); } else { LABEL_23: v17 = 0; } v18 = v17; if ( v17 ) { do { v19 = (void **)v18[2]; if ( *v18 ) { v18 = (_DWORD *)*v18; } else { v20 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v14 + 4))(v14, v18[1]); v21 = v14[1]; v22 = v20 + 1; if ( v22 >= v21 ) { LABEL_32: v18 = 0; } else { v23 = (_DWORD *)(v14[2] + 4 * v22); while ( 1 ) { v18 = (_DWORD *)*v23; if ( *v23 ) break; ++v22; ++v23; if ( v22 >= v21 ) goto LABEL_32; } } } if ( v19 ) { operator delete(v19[1]); operator delete(v19[2]); operator delete(v19); } } while ( v18 ); v1 = v27; } v24 = (void **)v1[14]; if ( v24 ) { sub_801580((_DWORD *)v1[14]); operator delete(v24[5]); operator delete(v24[2]); operator delete(v24); } v25 = (void **)v1[15]; if ( v25 ) { sub_801580((_DWORD *)v1[15]); operator delete(v25[5]); operator delete(v25[2]); operator delete(v25); } *v14 = &NiTPointerMap::`vftable'; sub_7FF8A0(v14); *v14 = &NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; sub_7FF8A0(v14); operator delete((void *)v14[2]); v1[6] = &NiTPointerMap::`vftable'; sub_7FF8A0(v1 + 6); v1[6] = &NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; sub_7FF8A0(v1 + 6); operator delete((void *)v1[8]); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20168: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Sequence *>::`vftable'; // A20188: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::SequenceGroup *>::`vftable'; // A201C8: using guessed type void *NiTPointerMap::`vftable'; // A201E8: using guessed type void *NiTPointerMap::`vftable'; // A20288: using guessed type void *NiKFMTool::`vftable'; //----- (00803410) -------------------------------------------------------- _DWORD *__cdecl sub_803410(int a1, char *FullPath, char a3, char a4, int a5) { int **v5; // ebx unsigned int v6; // kr00_4 char *v7; // eax _DWORD *v8; // eax _DWORD *v9; // esi _DWORD *v10; // eax char v12; // [esp+Fh] [ebp-50Dh] char Dir; // [esp+10h] [ebp-50Ch] char ArgList; // [esp+110h] [ebp-40Ch] char Src; // [esp+414h] [ebp-108h] v5 = (int **)a5; sub_8A9F60(&Dir, FullPath); sub_7FF6E0(&Src, 0x104u, "%s%s", &ArgList, &Dir); operator delete(*(void **)(a1 + 8)); *(_DWORD *)(a1 + 8) = 0; v6 = strlen(&Src); v7 = (char *)operator new(v6 + 1); *(_DWORD *)(a1 + 8) = v7; strcpy_s(v7, v6 + 1, &Src); v8 = operator new(0xBCu); if ( v8 ) v9 = sub_800DF0(v8, a1, a3); else v9 = 0; if ( !a4 ) return v9; v12 = 0; if ( !a5 ) { v10 = operator new(0x3D8u); if ( v10 ) v5 = (int **)sub_877EC0(v10); else v5 = 0; v12 = 1; } if ( sub_803030(v9, v5) ) { if ( v12 && v5 ) ((void (__thiscall *)(int **, signed int))**v5)(v5, 1); return v9; } if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (00803560) -------------------------------------------------------- unsigned int __thiscall sub_803560(float *this) { float *v1; // ebx _DWORD *v2; // esi _DWORD *v3; // ST08_4 unsigned int result; // eax int *v5; // ebx int v6; // edi unsigned int v7; // edx unsigned int v8; // eax _DWORD *v9; // ecx _DWORD *v10; // eax _DWORD *v11; // edi int v12; // ebx int v13; // eax unsigned int v14; // edx unsigned int v15; // eax _DWORD *v16; // ecx int v17; // esi int v18; // esi int v19; // eax double v20; // st7 unsigned int v21; // [esp+Ch] [ebp-Ch] int *v22; // [esp+10h] [ebp-8h] float *v23; // [esp+14h] [ebp-4h] v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 41); v23 = this; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*((_DWORD *)v1 + 40) + 8))((_DWORD *)v1 + 40, v3); } result = 0; v1[43] = 0.0; v1[41] = 0.0; v1[42] = 0.0; v21 = 0; if ( *((_DWORD *)v1 + 37) ) { do { v5 = *(int **)(*((_DWORD *)v1 + 35) + 4 * result); v22 = v5; if ( v5 ) { v6 = v5[3]; if ( v6 == -1 ) { v7 = *((_DWORD *)v23 + 31); v8 = 0; if ( v7 ) { v9 = (_DWORD *)*((_DWORD *)v23 + 32); while ( !*v9 ) { ++v8; ++v9; if ( v8 >= v7 ) goto LABEL_10; } v10 = *(_DWORD **)(*((_DWORD *)v23 + 32) + 4 * v8); } else { LABEL_10: v10 = 0; } v11 = v10; while ( v11 ) { v12 = v11[1]; v11 = (_DWORD *)*v11; if ( !v11 ) { v13 = (*(int (__thiscall **)(_DWORD *, int))(*((_DWORD *)v23 + 30) + 4))((_DWORD *)v23 + 30, v12); v14 = *((_DWORD *)v23 + 31); v15 = v13 + 1; if ( v15 >= v14 ) { LABEL_17: v11 = 0; } else { v16 = (_DWORD *)(*((_DWORD *)v23 + 32) + 4 * v15); while ( !*v16 ) { ++v15; ++v16; if ( v15 >= v14 ) goto LABEL_17; } v11 = (_DWORD *)*v16; } } v17 = v22[4]; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); sub_8030A0(v23, v22[2], v12, v17); if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } } else { v18 = v5[4]; if ( v18 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); sub_8030A0(v23, v5[2], v6, v18); if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); } } result = v21 + 1; v21 = result; v1 = v23; } while ( result < *((_DWORD *)v23 + 37) ); } if ( *((_DWORD *)v1 + 42) ) { v19 = *((_DWORD *)v1 + 42); if ( v19 ) { v20 = *(float *)(v19 + 8); result = v19 + 8; v1[9] = v20; } else { result = 0; v1[9] = *(float *)&MEMORY[0]; } } else { v1[9] = 3.4028235e38; } return result; } //----- (00803740) -------------------------------------------------------- void *__thiscall sub_803740(void *this, char a2) { void *v2; // esi v2 = this; sub_803200(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00803770) -------------------------------------------------------- _DWORD *__cdecl sub_803770(char *Src, char a2, char a3, int a4) { _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *result; // eax _DWORD *v7; // edi v4 = operator new(0x40u); if ( v4 ) { v5 = sub_8013A0(v4, 0); if ( v5 ) InterlockedIncrement(v5 + 1); } else { v5 = 0; } if ( sub_814780((void **)v5, (int)Src, Src) ) { if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); } result = 0; } else { v7 = sub_803410((int)v5, Src, a2, a3, a4); if ( v5 && !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); result = v7; } return result; } //----- (00803810) -------------------------------------------------------- void __thiscall sub_803810(float *this, float a2) { float *v2; // esi int v3; // ecx int v4; // eax double v5; // st7 int v6; // edx int v7; // eax float v8; // edi float *v9; // eax float v10; // edx int v11; // eax int v12; // ecx float *v13; // ebx _DWORD *v14; // ebx int v15; // edi unsigned int v16; // ebx int v17; // eax float v18; // ecx float v19; // edi char v20; // al double v21; // st7 bool v22; // zf double v23; // st7 int *v24; // ecx int v25; // eax float v26; // ST1C_4 double v27; // st7 float v28; // edx int v29; // ecx int v30; // eax int v31; // ecx int v32; // eax int v33; // ecx int v34; // ecx int v35; // ST00_4 int v36; // ecx double v37; // st7 int v38; // [esp+18h] [ebp-18h] int v39; // [esp+1Ch] [ebp-14h] int v40; // [esp+20h] [ebp-10h] unsigned int v41; // [esp+24h] [ebp-Ch] float v42; // [esp+24h] [ebp-Ch] float v43; // [esp+28h] [ebp-8h] float v44; // [esp+2Ch] [ebp-4h] v2 = this; this[8] = a2; sub_7FFA60(this); v3 = *((_DWORD *)v2 + 11); if ( v3 ) { if ( *((_BYTE *)v2 + 41) && v2[12] <= (double)v2[8] ) { if ( v3 == 1 ) { v4 = *((_DWORD *)v2 + 15); a2 = v2[13] - v2[12]; sub_80F3F0(*((void **)v2 + 17), *((_DWORD *)v2 + 19), a2, v4, 0, 1.0, 1.0, 0); v44 = v2[8]; v5 = v44; v2[12] = v44; v2[13] = v5 + a2; } *((_BYTE *)v2 + 41) = 0; } if ( v2[13] < (double)v2[8] ) { v6 = *((_DWORD *)v2 + 18); v7 = *((_DWORD *)v2 + 19); v2[11] = 0.0; v2[19] = 0.0; *((_DWORD *)v2 + 16) = v6; *((_DWORD *)v2 + 17) = v7; v2[18] = -6.8056465e38/*NaN*/; *((_BYTE *)v2 + 40) = 1; } return; } if ( v2[9] < (double)v2[8] ) { *((_BYTE *)v2 + 40) = 0; sub_803560(v2); } if ( !*((_BYTE *)v2 + 116) ) { v44 = v2[7]; LABEL_22: v8 = v44; goto LABEL_23; } if ( -3.402823466385289e38 != v2[20] ) { if ( v2[20] >= (double)v2[8] ) return; v10 = *(float *)(*((_DWORD *)v2 + 22) + 8); v2[20] = -3.4028235e38; v44 = v10; goto LABEL_22; } v8 = COERCE_FLOAT(sub_6B5000((_DWORD *)v2 + 21)); v44 = v8; a2 = sub_7FF710((_DWORD *)v2 + 25); if ( *((_DWORD *)v2 + 24) ) { if ( -1.0 != a2 || (v9 = (float *)sub_61E920(v2, SLODWORD(v8)), a2 = sub_80ED00(v9, (int)"end", v2[8]) - v2[8], a2 = a2 - 0.0333000011742115, a2 >= 0.0) ) { v2[20] = a2 + v2[8]; } else { v2[20] = (float)0.0 + v2[8]; } return; } *((_BYTE *)v2 + 116) = 0; v2[20] = -3.4028235e38; LABEL_23: v11 = *((_DWORD *)v2 + 16); if ( LODWORD(v8) == v11 ) { if ( *((_BYTE *)v2 + 40) ) { *((_BYTE *)v2 + 40) = 0; sub_803560(v2); } return; } if ( v8 == -6.8056465e38/*NaN*/ ) { sub_7FFCA0(v2); v12 = *((_DWORD *)v2 + 17); v2[16] = -6.8056465e38/*NaN*/; if ( v12 ) { sub_80D580(v12, 0.0, 0); v2[17] = 0.0; } return; } if ( v11 == -2 ) { v13 = (float *)sub_61E920(v2, SLODWORD(v8)); sub_80D4C0(v13, 0, 1, 1.0, 0.0, 0, 0); v2[16] = v8; *((_DWORD *)v2 + 17) = v13; sub_7FFB80(v2); (*(void (__stdcall **)(float, int, int, int))(**((_DWORD **)v2 + 4) + 68))(v2[8], v38, v39, v40); *((_BYTE *)v2 + 40) = 0; sub_803560(v2); sub_7FFA60(v2); return; } sub_800AB0(*((_DWORD **)v2 + 2), v11, SLODWORD(v8), (_BYTE *)&a2 + 3); if ( HIBYTE(a2) ) { v14 = (_DWORD *)sub_61E920(v2, SLODWORD(v8)); v15 = sub_64EE80(*((_DWORD **)v2 + 2), *((_DWORD *)v2 + 16), SLODWORD(v8)); if ( *(_DWORD *)v15 == 3 ) { sub_521E30((_DWORD *)v2 + 21); sub_521E30((_DWORD *)v2 + 25); v16 = 0; v41 = *(_DWORD *)(v15 + 28); if ( v41 ) { do { v17 = *(_DWORD *)(v15 + 20); v18 = *(float *)(v17 + 8 * v16); v43 = *(float *)(v17 + 8 * v16 + 4); a2 = v18; sub_6B9900((_DWORD *)v2 + 21, &a2); sub_5222C0((_DWORD *)v2 + 25, &v43); ++v16; } while ( v16 < v41 ); } sub_6B9900((_DWORD *)v2 + 21, &v44); sub_5222C0((_DWORD *)v2 + 25, &flt_A20C38); v19 = *(float *)(*((_DWORD *)v2 + 22) + 8); v44 = v19; v20 = sub_8C4C90((_DWORD *)v2 + 30, SLODWORD(v19), &a2); v14 = (_DWORD *)(v20 != 0 ? LODWORD(a2) : 0); v15 = sub_64EE80(*((_DWORD **)v2 + 2), *((_DWORD *)v2 + 16), SLODWORD(v19)); *((_BYTE *)v2 + 116) = 1; v2[20] = -3.4028235e38; } v21 = v2[8]; v2[15] = 0.0; v2[12] = v21; if ( !*(_DWORD *)v15 ) { if ( *(_DWORD *)(v15 + 16) ) { sub_80EE70(*((_DWORD **)v2 + 17), v2[8], 0.0); v2[12] = 3.4028235e38; v22 = *(_DWORD *)(v15 + 16) == 0; a2 = 0.0; if ( !v22 ) { while ( 1 ) { v23 = v2[8]; v24 = *(int **)(*(_DWORD *)(v15 + 8) + 4 * LODWORD(a2)); v25 = *v24; v43 = *(float *)(*(_DWORD *)(v15 + 8) + 4 * LODWORD(a2)); if ( !v25 ) break; v26 = v23; v42 = sub_80ED00((float *)*((_DWORD *)v2 + 17), v25, v26); v27 = v42; if ( -3.4028235e38 != v42 && v2[8] <= v27 && v2[12] > v27 ) { v28 = v43; v2[12] = v42; v2[15] = *(float *)(LODWORD(v28) + 4); } if ( ++LODWORD(a2) >= *(_DWORD *)(v15 + 16) ) goto LABEL_47; } v2[12] = v23; *((_DWORD *)v2 + 15) = v24[1]; } } } LABEL_47: if ( !v14 ) { sub_7FFCA0(v2); v29 = *((_DWORD *)v2 + 17); v2[16] = -6.8056465e38/*NaN*/; if ( v29 ) { sub_80D580(v29, 0.0, 0); v2[17] = 0.0; } if ( *((_BYTE *)v2 + 116) ) *((_BYTE *)v2 + 116) = 0; return; } v2[13] = *(float *)(v15 + 4) + v2[12]; sub_80EE70(v14, v2[8], 0.0); if ( *(_DWORD *)v15 ) { if ( *(_DWORD *)v15 == 1 ) { v32 = *((_DWORD *)v2 + 17); v2[14] = *(float *)(v32 + 60); v33 = *((_DWORD *)v2 + 4); sub_815C40(v32, (int)v14, *(float *)(v15 + 4), 0, 1.0, 1.0); *((_DWORD *)v2 + 11) = 2; } else if ( *(_DWORD *)v15 == 2 ) { v30 = *((_DWORD *)v2 + 17); v2[14] = *(float *)(v30 + 60); v31 = *((_DWORD *)v2 + 4); sub_815D80(v30, (int)v14, *(float *)(v15 + 4), 0, 1, 1.0, 0); *((_DWORD *)v2 + 11) = 3; } } else { v34 = *((_DWORD *)v2 + 17); v2[14] = *(float *)(v34 + 60); if ( v2[8] == v2[12] ) { v35 = v34; v36 = *((_DWORD *)v2 + 4); sub_7FF780(v35, (int)v14, *(float *)(v15 + 4), *((_DWORD *)v2 + 15), 0, 1.0, 1.0, 0); } else { a2 = v2[12] - v2[8]; v37 = sub_80BB80(v34, a2, 0) + v2[14]; *((_BYTE *)v2 + 41) = 1; v2[14] = v37; } *((_DWORD *)v2 + 11) = 1; } v2[18] = v44; *((_DWORD *)v2 + 19) = v14; *((_BYTE *)v2 + 40) = 1; } if ( *((_BYTE *)v2 + 40) ) { *((_BYTE *)v2 + 40) = 0; sub_803560(v2); } } // A20C38: using guessed type float flt_A20C38; //----- (00803D80) -------------------------------------------------------- BOOL __cdecl sub_803D80(float *a1, float *a2) { BOOL result; // eax result = sub_816F60(a1, a2); if ( (_BYTE)result ) result = a2[1] == a1[1]; return result; } //----- (00803DC0) -------------------------------------------------------- double __cdecl sub_803DC0(float a1, int a2, int a3, int a4, int a5, char a6) { int *v7; // edx int v8; // ebx int v9; // edi unsigned int v10; // esi double v11; // st7 unsigned int v12; // ecx int v13; // esi int *v14; // ebx int *v15; // edi double v16; // st6 int v17; // eax int v18; // edi int *v19; // esi int v20; // esi int v21; // ecx unsigned int v22; // [esp+20h] [ebp-10h] int *v23; // [esp+24h] [ebp-Ch] int *v24; // [esp+28h] [ebp-8h] int v25; // [esp+2Ch] [ebp-4h] if ( a4 == 1 ) return *(float *)(a2 + 4); v7 = (int *)a5; v8 = a2; v9 = (unsigned __int8)a6; v10 = a4 - 1; v22 = a4 - 1; v25 = *(int *)((unsigned __int8)a6 * *(_DWORD *)a5 + a2); v11 = a1; if ( *(float *)&v25 > (double)a1 ) { *(_DWORD *)a5 = 0; v25 = *(int *)a2; } v12 = *v7 + 1; if ( v12 > v10 ) { v16 = *(float *)&a4; } else if ( (signed int)(v10 - *v7) < 4 ) { v16 = *(float *)&a4; LABEL_14: if ( v12 <= v10 ) { v18 = (unsigned __int8)a6; v19 = (int *)(v8 + v12 * (unsigned __int8)a6); do { a4 = *v19; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) break; ++*v7; *(float *)&v25 = v16; ++v12; v19 = (int *)((char *)v19 + v18); } while ( v12 <= v22 ); } } else { v24 = (int *)(a2 + v12 * v9); v13 = 4 * v9; v23 = (int *)(a2 + v9 * (*v7 + 4)); v14 = (int *)(a2 + v9 * (*v7 + 3)); v15 = (int *)(a2 + (unsigned __int8)a6 * (*v7 + 2)); while ( 1 ) { a4 = *v24; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) break; ++*v7; *(float *)&v25 = v16; a4 = *v15; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { ++v12; break; } v25 = a4; v17 = *v7 + 1; *v7 = v17; a4 = *v14; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { v12 += 2; break; } v25 = a4; *v7 = v17 + 1; a4 = *v23; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { v12 += 3; break; } v25 = a4; v24 = (int *)((char *)v24 + v13); v23 = (int *)((char *)v23 + v13); *v7 = v17 + 2; v12 += 4; v15 = (int *)((char *)v15 + v13); v14 = (int *)((char *)v14 + v13); if ( v12 > v22 - 3 ) { v8 = a2; v10 = v22; goto LABEL_14; } } v8 = a2; } v20 = v12 * (unsigned __int8)a6; v21 = *v7; *(float *)&a4 = (v11 - *(float *)&v25) / (v16 - *(float *)&v25); ((void (__cdecl *)(int, int, int, int *))dword_BA4120[a3])(a4, v8 + (unsigned __int8)a6 * v21, v8 + v20, &a4); return *(float *)&a4; } // BA4120: using guessed type int dword_BA4120[]; //----- (00803FA0) -------------------------------------------------------- double __cdecl sub_803FA0(float a1, int a2, int a3, int a4, char a5) { int v6; // ST0C_4 if ( !a4 ) return flt_BA3B54; if ( *(float *)a2 > (double)a1 ) return *(float *)(a2 + 4); if ( *(float *)((unsigned __int8)a5 * (a4 - 1) + a2) < (double)a1 ) return *(float *)((unsigned __int8)a5 * (a4 - 1) + a2 + 4); v6 = a4; a4 = 0; return sub_803DC0(a1, a2, a3, v6, (int)&a4, a5); } // BA3B54: using guessed type float flt_BA3B54; //----- (00804020) -------------------------------------------------------- signed int sub_804020() { signed int result; // eax result = 0; if ( !byte_BA3B58 ) { dword_BA41B0 = 0; dword_BA4090 = 0; dword_BA4000 = 0; dword_BA3CA0[0] = 0; byte_BA3B58 = 1; dword_BA4240[0] = (int)sub_8B6190; dword_BA3EE0[0] = (int)nullsub_6; dword_BA3E50[0] = (int)nullsub_6; dword_BA3DC0[0] = (int)sub_8B6190; dword_BA3D30[0] = (int)nullsub_6; byte_BA3BE8[0] = 8; dword_BA4120[0] = (int)nullsub_6; dword_BA3F70[0] = (int)sub_803D80; dword_BA3C10[0] = (int)nullsub_6; result = 1; } return result; } // BA3B58: using guessed type char byte_BA3B58; // BA3C10: using guessed type int dword_BA3C10[]; // BA3CA0: using guessed type int dword_BA3CA0[]; // BA3D30: using guessed type int dword_BA3D30[]; // BA3DC0: using guessed type int dword_BA3DC0[]; // BA3E50: using guessed type int dword_BA3E50[]; // BA3EE0: using guessed type int dword_BA3EE0[]; // BA3F70: using guessed type int dword_BA3F70[]; // BA4000: using guessed type int dword_BA4000; // BA4090: using guessed type int dword_BA4090; // BA4120: using guessed type int dword_BA4120[]; // BA41B0: using guessed type int dword_BA41B0; // BA4240: using guessed type int dword_BA4240[]; //----- (008040B0) -------------------------------------------------------- int __thiscall sub_8040B0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_817460(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 4, 4, &a2, 1); } //----- (008040F0) -------------------------------------------------------- int __cdecl sub_8040F0(signed int a1, int a2) { int v2; // esi int (__cdecl *v3)(int, int, signed int, int *, signed int); // edx int v4; // ST00_4 v2 = a2; sub_817490(a1, a2); v3 = *(int (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v4 = *(_DWORD *)(a1 + 356); a2 = 4; return v3(v4, v2 + 4, 4, &a2, 1); } //----- (00804130) -------------------------------------------------------- BOOL __cdecl sub_804130(float *a1, float *a2) { BOOL result; // eax result = sub_803D80(a1, a2); if ( (_BYTE)result ) result = a2[2] == a1[2] && a2[3] == a1[3]; return result; } //----- (00804180) -------------------------------------------------------- float *__cdecl sub_804180(float *a1, float *a2) { float *result; // eax result = a2; *a1 = *a2; a1[1] = a2[1]; a1[2] = a2[2]; a1[3] = a2[3]; return result; } //----- (008041B0) -------------------------------------------------------- errno_t __cdecl sub_8041B0(void *Dst, void *Src, rsize_t DstSize) { return memcpy_s(Dst, DstSize, Src, DstSize); } //----- (008041D0) -------------------------------------------------------- int __cdecl sub_8041D0(float a1, int a2, int a3, int a4) { double v4; // st7 int result; // eax v4 = sub_8174E0(a1, *(float *)(a2 + 4), *(float *)(a2 + 12), *(float *)(a3 + 4), *(float *)(a3 + 8)); result = a4; *(float *)a4 = v4; return result; } //----- (00804230) -------------------------------------------------------- char __cdecl sub_804230(float a1, int a2, int a3) { int v3; // edx int v4; // esi int v5; // ecx int *v6; // eax char *v7; // edi float *v8; // esi double v9; // st6 double v10; // st5 int v11; // edi int v12; // ST1C_4 char *v13; // eax int v15; // [esp+34h] [ebp-24h] int v16; // [esp+38h] [ebp-20h] float v17; // [esp+3Ch] [ebp-1Ch] float v18; // [esp+40h] [ebp-18h] void *Src; // [esp+44h] [ebp-14h] int v20; // [esp+48h] [ebp-10h] int v21; // [esp+4Ch] [ebp-Ch] char *v22; // [esp+50h] [ebp-8h] int v23; // [esp+54h] [ebp-4h] v3 = *(_DWORD *)a3; Src = *(void **)a2; if ( !sub_817010(a1, (int)Src, v3, (int)&v23, 16) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = (unsigned __int64)(unsigned int)v4 >> 28 != 0; v6 = (int *)operator new(((16 * v4 | -v5) + 4) | -__CFADD__(16 * v4 | -v5, 4)); if ( v6 ) { v7 = (char *)(v6 + 1); *v6 = v4; v22 = (char *)(v6 + 1); } else { v22 = 0; v7 = 0; } memcpy_s(v7, 16 * (*(_DWORD *)a3 + 1), Src, 16 * v23); if ( *(_DWORD *)a3 > (unsigned int)v23 ) memcpy_s(&v7[16 * v23 + 16], 16 * (*(_DWORD *)a3 - v23), (char *)Src + 16 * v23, 16 * (*(_DWORD *)a3 - v23)); *(float *)&v20 = sub_803FA0(a1, (int)Src, 2, *(_DWORD *)a3, 16); v8 = (float *)&v7[16 * v23]; *v8 = a1; v9 = *(float *)&v20; v8[1] = *(float *)&v20; v8[2] = 0.0; v8[3] = 0.0; if ( v23 && v23 != *(_DWORD *)a3 ) { v10 = *(float *)&v7[16 * v23 - 12]; v11 = (int)&v7[16 * v23]; *(float *)&v15 = v10; v16 = *(int *)(v11 - 16); v21 = *(int *)(v11 - 4); v17 = *(float *)(v11 + 20); v18 = *(float *)(v11 + 16); v20 = *(int *)(v11 + 24); *(float *)&v12 = v9; sub_817540(*(float *)&v15, *(float *)&v16, (int)&v21, v17, v18, (int)&v20, a1, v12, (int)&v15, (int)&v16); *(float *)(v11 - 4) = *(float *)&v21; v8[2] = *(float *)&v15; v8[3] = *(float *)&v16; *(float *)(v11 + 24) = *(float *)&v20; v7 = v22; } v13 = (char *)Src; ++*(_DWORD *)a3; if ( v13 ) operator delete(v13 - 4); *(_DWORD *)a2 = v7; return 1; } //----- (008043F0) -------------------------------------------------------- int __cdecl sub_8043F0(signed int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // esi int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int, signed int, int *, signed int); // eax void (__cdecl *v10)(int, int, signed int, int *, signed int); // edx int v11; // ST00_4 int v12; // [esp+4h] [ebp-4h] int v13; // [esp+14h] [ebp+Ch] v2 = a2; v3 = 16 * a2 | -((unsigned __int64)a2 >> 28 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v13 = result; } else { v13 = 0; result = 0; } if ( v2 ) { v6 = result + 12; do { sub_8040B0((char *)(v6 - 12), a1); v7 = *(_DWORD *)(a1 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v7 + 4); v12 = 4; v9(v8, v6 - 4, 4, &v12, 1); v10 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a1 + 352) + 4); v11 = *(_DWORD *)(a1 + 352); v12 = 4; v10(v11, v6, 4, &v12, 1); v6 += 16; --v2; } while ( v2 ); result = v13; } return result; } //----- (008044A0) -------------------------------------------------------- int __cdecl sub_8044A0(signed int a1, int a2, signed int a3) { signed int v3; // ebx int v4; // esi int v5; // eax int v6; // ST14_4 void (__cdecl *v7)(int, int, signed int, signed int *, signed int); // eax int (__cdecl *v8)(int, int, signed int, signed int *, signed int); // edx int v9; // ST00_4 int result; // eax v3 = a3; if ( a3 ) { v4 = a2 + 12; do { sub_8040F0(a1, v4 - 12); v5 = *(_DWORD *)(a1 + 356); v6 = v5; v7 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(v5 + 8); a3 = 4; v7(v6, v4 - 4, 4, &a3, 1); v8 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v9 = *(_DWORD *)(a1 + 356); a3 = 4; result = v8(v9, v4, 4, &a3, 1); v4 += 16; --v3; } while ( v3 ); } return result; } //----- (00804510) -------------------------------------------------------- signed int sub_804510() { signed int result; // eax result = 0; if ( !byte_BA3B59 ) { dword_BA41B8 = 0; dword_BA4098 = 0; dword_BA4008 = 0; byte_BA3B59 = 1; dword_BA4248 = (int)sub_8043F0; dword_BA3EE8 = (int)sub_8044A0; dword_BA3E58 = (int)sub_804180; dword_BA3DC8 = (int)sub_807950; dword_BA3D38 = (int)sub_805340; byte_BA3BEA = 16; dword_BA4128 = (int)sub_8041D0; dword_BA3F78 = (int)sub_804130; dword_BA3C18 = (int)nullsub_6; dword_BA3CA8 = (int)sub_804230; result = 1; } return result; } // BA3B59: using guessed type char byte_BA3B59; // BA3BEA: using guessed type char byte_BA3BEA; // BA3C18: using guessed type int dword_BA3C18; // BA3CA8: using guessed type int dword_BA3CA8; // BA3D38: using guessed type int dword_BA3D38; // BA3DC8: using guessed type int dword_BA3DC8; // BA3E58: using guessed type int dword_BA3E58; // BA3EE8: using guessed type int dword_BA3EE8; // BA3F78: using guessed type int dword_BA3F78; // BA4008: using guessed type int dword_BA4008; // BA4098: using guessed type int dword_BA4098; // BA4128: using guessed type int dword_BA4128; // BA41B8: using guessed type int dword_BA41B8; // BA4248: using guessed type int dword_BA4248; //----- (008045C0) -------------------------------------------------------- int __cdecl sub_8045C0(signed int a1, int a2) { sub_817490(a1, a2); return sub_860940((char *)(a2 + 4), a1); } //----- (008045F0) -------------------------------------------------------- _DWORD *__cdecl sub_8045F0(int a1, int a2, int a3, _DWORD *a4) { _DWORD *result; // eax result = a4; *a4 = dword_BA45C0; a4[1] = dword_BA45C4; a4[2] = dword_BA45C8; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00804620) -------------------------------------------------------- int __cdecl sub_804620(int a1, float a2, int a3, int a4, int a5, int a6, char a7) { int result; // eax int v8; // ecx int v9; // ebx unsigned int v10; // esi int v11; // eax double v12; // st7 unsigned int v13; // ecx int v14; // esi float *v15; // ebx float *v16; // edi double v17; // st6 int v18; // eax int v19; // eax float *v20; // esi int v21; // edx int v22; // ecx int v23; // [esp+1Ch] [ebp-20h] int v24; // [esp+20h] [ebp-1Ch] int v25; // [esp+24h] [ebp-18h] int v26; // [esp+28h] [ebp-14h] unsigned int v27; // [esp+2Ch] [ebp-10h] float *v28; // [esp+30h] [ebp-Ch] float *v29; // [esp+34h] [ebp-8h] float v30; // [esp+38h] [ebp-4h] float v31; // [esp+54h] [ebp+18h] float v32; // [esp+54h] [ebp+18h] float v33; // [esp+54h] [ebp+18h] float v34; // [esp+54h] [ebp+18h] if ( a5 == 1 ) { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); v8 = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a1 + 8) = v8; } else { v9 = a3; v10 = a5 - 1; v11 = *(_DWORD *)a6; v27 = a5 - 1; v30 = *(float *)((unsigned __int8)a7 * v11 + a3); v12 = a2; if ( v30 > (double)a2 ) { *(_DWORD *)a6 = 0; v30 = *(float *)a3; } v13 = *(_DWORD *)a6 + 1; if ( v13 > v10 ) { v17 = *(float *)&a5; } else if ( (signed int)(v10 - *(_DWORD *)a6) < 4 ) { v17 = *(float *)&a5; LABEL_14: if ( v13 <= v10 ) { v20 = (float *)(v9 + v13 * (unsigned __int8)a7); do { v17 = *v20; if ( v17 >= v12 ) break; ++*(_DWORD *)a6; v30 = v17; ++v13; v20 = (float *)((char *)v20 + (unsigned __int8)a7); } while ( v13 <= v27 ); } } else { v29 = (float *)(a3 + v13 * (unsigned __int8)a7); v14 = 4 * (unsigned __int8)a7; v28 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 3)); v15 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 2)); v16 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 1)); while ( 1 ) { v17 = *v29; if ( v17 >= v12 ) break; ++*(_DWORD *)a6; v30 = v17; v31 = *v16; v17 = v31; if ( v31 >= v12 ) { ++v13; break; } v18 = *(_DWORD *)a6; v30 = v31; *(_DWORD *)a6 = ++v18; v32 = *v15; v26 = v18; v17 = v32; if ( v32 >= v12 ) { v13 += 2; break; } v30 = v32; v19 = v26 + 1; *(_DWORD *)a6 = v26 + 1; v26 = v19; v33 = *v28; v17 = v33; if ( v33 >= v12 ) { v13 += 3; break; } v30 = v33; v29 = (float *)((char *)v29 + v14); v28 = (float *)((char *)v28 + v14); *(_DWORD *)a6 = v26 + 1; v13 += 4; v16 = (float *)((char *)v16 + v14); v15 = (float *)((char *)v15 + v14); if ( v13 > v27 - 3 ) { v9 = a3; v10 = v27; goto LABEL_14; } } v9 = a3; } v34 = (v12 - v30) / (v17 - v30); ((void (__cdecl *)(_DWORD, int, unsigned int, int *))dword_BA4138[a4])( LODWORD(v34), v9 + (unsigned __int8)a7 * *(_DWORD *)a6, v9 + v13 * (unsigned __int8)a7, &v23); result = a1; v21 = v24; *(_DWORD *)a1 = v23; v22 = v25; *(_DWORD *)(a1 + 4) = v21; *(_DWORD *)(a1 + 8) = v22; } return result; } // BA4138: using guessed type int dword_BA4138[]; //----- (00804810) -------------------------------------------------------- int __cdecl sub_804810(int a1, float a2, int a3, int a4, int a5, char a6) { int result; // eax _DWORD *v7; // ecx int v8; // ST10_4 if ( a5 ) { if ( *(float *)a3 <= (double)a2 ) { if ( *(float *)((unsigned __int8)a6 * (a5 - 1) + a3) >= (double)a2 ) { v8 = a5; a5 = 0; sub_804620(a1, a2, a3, a4, v8, (int)&a5, a6); result = a1; } else { result = a1; v7 = (_DWORD *)((unsigned __int8)a6 * (a5 - 1) + a3 + 4); *(_DWORD *)a1 = *v7; *(_DWORD *)(a1 + 4) = v7[1]; *(_DWORD *)(a1 + 8) = v7[2]; } } else { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 12); } } else { result = a1; *(_DWORD *)a1 = dword_BA3B60; *(_DWORD *)(a1 + 4) = dword_BA3B64; *(_DWORD *)(a1 + 8) = dword_BA3B68; } return result; } // BA3B60: using guessed type int dword_BA3B60; // BA3B64: using guessed type int dword_BA3B64; // BA3B68: using guessed type int dword_BA3B68; //----- (008048D0) -------------------------------------------------------- BOOL __cdecl sub_8048D0(float *a1, float *a2) { BOOL result; // eax result = sub_816F60(a1, a2); if ( (_BYTE)result ) result = a2[1] == a1[1] && a2[2] == a1[2] && a2[3] == a1[3]; return result; } //----- (00804930) -------------------------------------------------------- int __cdecl sub_804930(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { void (__cdecl *v8)(_DWORD, int, int, float *); // esi float *v9; // esi double v10; // st7 float v11; // ST1C_4 double v12; // st5 float v13; // ST20_4 double v14; // st4 double v15; // rt2 float v16; // ST24_4 double v17; // st4 float v18; // ST1C_4 float v19; // ST20_4 float v20; // ST24_4 float *v21; // edi float v22; // ST1C_4 float v23; // ST20_4 float v24; // ST24_4 double v25; // st7 int result; // eax float v27; // ST1C_4 float v28; // ST20_4 double v29; // st7 double v30; // st6 float v31; // ST24_4 float v32; // [esp+28h] [ebp-1Ch] float v33; // [esp+2Ch] [ebp-18h] float v34; // [esp+30h] [ebp-14h] float v35; // [esp+34h] [ebp-10h] float v36; // [esp+38h] [ebp-Ch] float v37; // [esp+3Ch] [ebp-8h] float v38; // [esp+40h] [ebp-4h] float v39; // [esp+58h] [ebp+14h] float v40; // [esp+58h] [ebp+14h] float v41; // [esp+58h] [ebp+14h] float v42; // [esp+58h] [ebp+14h] float v43; // [esp+58h] [ebp+14h] float v44; // [esp+58h] [ebp+14h] float v45; // [esp+58h] [ebp+14h] float v46; // [esp+5Ch] [ebp+18h] float v47; // [esp+5Ch] [ebp+18h] v8 = (void (__cdecl *)(_DWORD, int, int, float *))dword_BA4018[a4]; ((void (__stdcall *)(_DWORD, int, int))dword_BA40A8[a4])(LODWORD(a1), a2, a3); v8(LODWORD(a1), a2, a3, &v32); v38 = v36 * v36 + v35 * v35 + v37 * v37; v39 = sqrt(v38); v9 = (float *)a5; v40 = 1.0 / v39; v10 = v35; v11 = v35 * v40; v12 = v36; *(float *)a5 = v11; v13 = v12 * v40; v14 = v37; *(float *)(a5 + 4) = v13; v15 = v14; v16 = v40 * v14; v17 = v34; *(float *)(a5 + 8) = v16; v18 = v17 * v12 - v33 * v15; v19 = v15 * v32 - v17 * v10; v20 = v10 * v33 - v32 * v12; v46 = v19 * v19 + v18 * v18 + v20 * v20; v47 = sqrt(v46); v41 = v47 * v40 * v40; *(float *)a8 = v41; v42 = fabs(v41); if ( v42 <= 0.000001 ) { *(float *)a8 = 0.0; v44 = fabs(*v9); if ( v44 > 0.000001 ) { v25 = 0.0; } else { v45 = fabs(v9[1]); v25 = 0.0; if ( v45 <= 0.000001 ) { v21 = (float *)a6; *(float *)(a6 + 8) = v9[1]; *(float *)(a6 + 4) = -v9[2]; *(float *)a6 = 0.0; goto LABEL_8; } } v21 = (float *)a6; *(float *)a6 = v9[1]; *(float *)(a6 + 4) = -*v9; *(float *)(a6 + 8) = v25; goto LABEL_8; } v21 = (float *)a6; v43 = v34 * v37 + v32 * v35 + v33 * v36; v35 = v35 * v43; v36 = v36 * v43; v37 = v43 * v37; v22 = v32 * v38; v23 = v33 * v38; v24 = v38 * v34; v32 = v22 - v35; *(float *)a6 = v32; v33 = v23 - v36; *(float *)(a6 + 4) = v33; v34 = v24 - v37; *(float *)(a6 + 8) = v34; LABEL_8: sub_4430B0(v21); result = a7; v27 = v21[2] * v9[1] - v9[2] * v21[1]; v28 = *v21 * v9[2] - v21[2] * *v9; v29 = *v9 * v21[1]; v30 = *v21 * v9[1]; *(float *)a7 = v27; *(float *)(a7 + 4) = v28; v31 = v29 - v30; *(float *)(a7 + 8) = v31; return result; } // 804930: could not find valid save-restore pair for ebx // 804930: could not find valid save-restore pair for edi // 804930: could not find valid save-restore pair for esi // BA4018: using guessed type int dword_BA4018[]; // BA40A8: using guessed type int dword_BA40A8[]; //----- (00804BB0) -------------------------------------------------------- signed int sub_804BB0() { signed int result; // eax if ( byte_BA3B5A ) return 0; result = 1; byte_BA3B5A = 1; dword_BA4258[0] = (int)sub_8B6190; dword_BA3EF8[0] = (int)nullsub_6; dword_BA3E68 = (int)nullsub_6; dword_BA3DD8 = (int)sub_8B6190; dword_BA3D48[0] = (int)nullsub_6; byte_BA3BEE[0] = 16; dword_BA41C8[0] = (int)sub_80A280; dword_BA4138[0] = (int)sub_8045F0; dword_BA40A8[0] = (int)sub_8045F0; dword_BA4018[0] = (int)sub_8045F0; dword_BA3F88[0] = (int)sub_8048D0; dword_BA3C28[0] = (int)nullsub_6; dword_BA3CB8 = 0; return result; } // BA3B5A: using guessed type char byte_BA3B5A; // BA3C28: using guessed type int dword_BA3C28[]; // BA3CB8: using guessed type int dword_BA3CB8; // BA3D48: using guessed type int dword_BA3D48[]; // BA3DD8: using guessed type int dword_BA3DD8; // BA3E68: using guessed type int dword_BA3E68; // BA3EF8: using guessed type int dword_BA3EF8[]; // BA3F88: using guessed type int dword_BA3F88[]; // BA4018: using guessed type int dword_BA4018[]; // BA40A8: using guessed type int dword_BA40A8[]; // BA4138: using guessed type int dword_BA4138[]; // BA41C8: using guessed type int dword_BA41C8[]; // BA4258: using guessed type int dword_BA4258[]; //----- (00804C50) -------------------------------------------------------- int __cdecl sub_804C50(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(a1 + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(a1 + 20) = *(_DWORD *)(a2 + 20); *(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 24); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(a1 + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 48); *(_DWORD *)(a1 + 52) = *(_DWORD *)(a2 + 52); *(_DWORD *)(a1 + 56) = *(_DWORD *)(a2 + 56); result = *(_DWORD *)(a2 + 60); *(_DWORD *)(a1 + 60) = result; return result; } //----- (00804CC0) -------------------------------------------------------- BOOL __cdecl sub_804CC0(float *a1, float *a2) { BOOL result; // eax result = sub_8048D0(a1, a2); if ( (_BYTE)result ) result = a2[4] == a1[4] && a2[5] == a1[5] && a2[6] == a1[6] && a2[7] == a1[7] && a2[8] == a1[8] && a2[9] == a1[9]; return result; } //----- (00804D50) -------------------------------------------------------- int __cdecl sub_804D50(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax v1 = (a1 << 6) | -((unsigned __int64)a1 >> 26 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; return (int)(v2 + 1); } //----- (00804D90) -------------------------------------------------------- int __cdecl sub_804D90(float a1, int a2, int a3, int a4) { float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST00_4 float v8; // ST04_4 float v9; // ST08_4 float v10; // ST0C_4 float v11; // ST10_4 float v12; // ST14_4 float v13; // ST00_4 float v14; // ST04_4 float v15; // ST08_4 float v16; // ST0C_4 float v17; // ST10_4 float v18; // ST14_4 float v19; // ST00_4 float v20; // ST04_4 int result; // eax double v22; // st7 float v23; // ST08_4 v4 = *(float *)(a2 + 52) * a1; v5 = *(float *)(a2 + 56) * a1; v6 = *(float *)(a2 + 60) * a1; v7 = *(float *)(a2 + 40) + v4; v8 = *(float *)(a2 + 44) + v5; v9 = *(float *)(a2 + 48) + v6; v10 = v7 * a1; v11 = v8 * a1; v12 = v9 * a1; v13 = *(float *)(a2 + 28) + v10; v14 = *(float *)(a2 + 32) + v11; v15 = *(float *)(a2 + 36) + v12; v16 = v13 * a1; v17 = v14 * a1; v18 = a1 * v15; v19 = *(float *)(a2 + 4) + v16; v20 = *(float *)(a2 + 8) + v17; result = a4; v22 = *(float *)(a2 + 12) + v18; *(float *)a4 = v19; *(float *)(a4 + 4) = v20; v23 = v22; *(float *)(a4 + 8) = v23; return result; } //----- (00804E50) -------------------------------------------------------- int __cdecl sub_804E50(float a1, int a2, int a3, int a4) { double v4; // st7 float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST20_4 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float v14; // ST0C_4 float v15; // ST10_4 float v16; // ST14_4 float v17; // ST00_4 float v18; // ST04_4 int result; // eax double v20; // st7 float v21; // ST08_4 float v22; // [esp+2Ch] [ebp+8h] v4 = a1; v22 = 3.0 * a1; v5 = *(float *)(a2 + 52) * v22; v6 = *(float *)(a2 + 56) * v22; v7 = v22 * *(float *)(a2 + 60); v8 = *(float *)(a2 + 40) * 2.0; v9 = *(float *)(a2 + 44) * 2.0; v10 = 2.0 * *(float *)(a2 + 48); v11 = v8 + v5; v12 = v9 + v6; v13 = v10 + v7; v14 = v11 * v4; v15 = v12 * v4; v16 = v4 * v13; v17 = *(float *)(a2 + 28) + v14; v18 = *(float *)(a2 + 32) + v15; result = a4; v20 = *(float *)(a2 + 36) + v16; *(float *)a4 = v17; *(float *)(a4 + 4) = v18; v21 = v20; *(float *)(a4 + 8) = v21; return result; } //----- (00804F10) -------------------------------------------------------- int __cdecl sub_804F10(float a1, int a2, int a3, int a4) { float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST18_4 float v8; // ST1C_4 int result; // eax float v10; // ST20_4 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float v14; // [esp+2Ch] [ebp+8h] v14 = a1 * 6.0; v4 = *(float *)(a2 + 52) * v14; v5 = *(float *)(a2 + 56) * v14; v6 = v14 * *(float *)(a2 + 60); v7 = *(float *)(a2 + 40) * 2.0; v8 = *(float *)(a2 + 44) * 2.0; result = a4; v10 = 2.0 * *(float *)(a2 + 48); v11 = v7 + v4; *(float *)a4 = v11; v12 = v5 + v8; *(float *)(a4 + 4) = v12; v13 = v10 + v6; *(float *)(a4 + 8) = v13; return result; } //----- (00804FA0) -------------------------------------------------------- void __cdecl sub_804FA0(int a1, int a2) { int v2; // ecx float *v3; // eax float v4; // ST60_4 float v5; // ST64_4 float v6; // ST68_4 float v7; // ST3C_4 float v8; // ST40_4 float v9; // ST44_4 float v10; // ST54_4 float v11; // ST58_4 float v12; // ST5C_4 float v13; // ST48_4 float v14; // ST4C_4 float v15; // ST50_4 float v16; // ST30_4 float v17; // ST34_4 float v18; // ST38_4 float v19; // ST24_4 float v20; // ST28_4 float v21; // ST2C_4 float v22; // ST0C_4 float v23; // ST10_4 float v24; // ST14_4 float v25; // ST18_4 float v26; // ST1C_4 float v27; // ST20_4 float v28; // ST00_4 float v29; // ST04_4 float v30; // ST08_4 v2 = a2 - 1; if ( a2 != 1 ) { v3 = (float *)(a1 + 76); do { v4 = *(v3 - 12) * 2.0; v5 = *(v3 - 11) * 2.0; v6 = *(v3 - 10) * 2.0; v7 = v3[1] + v4; v8 = v3[2] + v5; v9 = v3[3] + v6; v10 = *(v3 - 2) - *(v3 - 18); v11 = *(v3 - 1) - *(v3 - 17); v12 = *v3 - *(v3 - 16); v13 = v10 * 3.0; v14 = v11 * 3.0; v15 = v12 * 3.0; v16 = v13 - v7; *(v3 - 9) = v16; v17 = v14 - v8; *(v3 - 8) = v17; v18 = v15 - v9; *(v3 - 7) = v18; v19 = *(v3 - 2) - *(v3 - 18); v20 = *(v3 - 1) - *(v3 - 17); v21 = *v3 - *(v3 - 16); v22 = v19 * 2.0; v23 = v20 * 2.0; v24 = v21 * 2.0; v25 = v3[1] + *(v3 - 12); v26 = v3[2] + *(v3 - 11); v27 = v3[3] + *(v3 - 10); v28 = v25 - v22; *(v3 - 6) = v28; v3 += 16; --v2; v29 = v26 - v23; *(v3 - 21) = v29; v30 = v27 - v24; *(v3 - 20) = v30; } while ( v2 ); } } //----- (008050E0) -------------------------------------------------------- double __cdecl sub_8050E0(int a1, int a2) { int v2; // esi int v3; // eax float *v4; // esi int v5; // edi double v6; // st7 int v8; // [esp+1Ch] [ebp-58h] float v9; // [esp+20h] [ebp-54h] float v10; // [esp+24h] [ebp-50h] float v11; // [esp+28h] [ebp-4Ch] float v12; // [esp+2Ch] [ebp-48h] float v13; // [esp+30h] [ebp-44h] float v14; // [esp+34h] [ebp-40h] float v15; // [esp+38h] [ebp-3Ch] float v16; // [esp+3Ch] [ebp-38h] float v17; // [esp+40h] [ebp-34h] float v18; // [esp+44h] [ebp-30h] float v19; // [esp+48h] [ebp-2Ch] float v20; // [esp+4Ch] [ebp-28h] float v21; // [esp+50h] [ebp-24h] float v22; // [esp+54h] [ebp-20h] double v23; // [esp+58h] [ebp-1Ch] double v24; // [esp+60h] [ebp-14h] double v25; // [esp+68h] [ebp-Ch] float v26; // [esp+70h] [ebp-4h] int v27; // [esp+7Ch] [ebp+8h] signed int v28; // [esp+80h] [ebp+Ch] float v29; // [esp+80h] [ebp+Ch] float v30; // [esp+80h] [ebp+Ch] float v31; // [esp+80h] [ebp+Ch] float v32; // [esp+80h] [ebp+Ch] float v33; // [esp+80h] [ebp+Ch] float v34; // [esp+80h] [ebp+Ch] v26 = 0.0; if ( a2 != 1 ) { v2 = a1; v27 = a2 - 1; v3 = dword_ABBE7C; v4 = (float *)(v2 + 60); do { v5 = 0; v28 = 0; if ( v3 >= 0 ) { do { v29 = (double)v28 * flt_BA3B5C; sub_804E50(v29, (int)(v4 - 15), (int)(v4 + 1), (int)&v8); v30 = v29 * 6.0; v17 = *(v4 - 2) * v30; v18 = *(v4 - 1) * v30; v19 = v30 * *v4; v20 = *(v4 - 5) * 2.0; v21 = *(v4 - 4) * 2.0; v22 = 2.0 * *(v4 - 3); v14 = v20 + v17; v15 = v21 + v18; v16 = v22 + v19; v11 = v9 * v16 - v10 * v15; v12 = v10 * v14 - v16 * *(float *)&v8; v13 = v15 * *(float *)&v8 - v14 * v9; v24 = v9; v25 = *(float *)&v8; v23 = v10; v31 = v13 * v13 + v11 * v11 + v12 * v12; v32 = sqrt(v31); v6 = v32; v33 = v25 * v25 + v24 * v24 + v23 * v23; v34 = v6 / v33; if ( v26 < (double)v34 ) v26 = v34; v3 = dword_ABBE7C; v28 = ++v5; } while ( v5 <= dword_ABBE7C ); } v4 += 16; --v27; } while ( v27 ); } return v26; } // ABBE7C: using guessed type int dword_ABBE7C; // BA3B5C: using guessed type float flt_BA3B5C; //----- (00805280) -------------------------------------------------------- int __cdecl sub_805280(signed int a1, unsigned int a2) { unsigned int v2; // edi int v3; // ecx unsigned int *v4; // eax int result; // eax unsigned int v6; // ebx char *v7; // esi int v8; // [esp+10h] [ebp+Ch] v2 = a2; v3 = (a2 << 6) | -((unsigned __int64)a2 >> 26 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v8 = result; } else { v8 = 0; result = 0; } if ( v2 ) { v6 = v2; v7 = (char *)(result + 28); do { sub_8045A0(a1); sub_8608D0(v7 - 12, a1); sub_8608D0(v7, a1); v7 += 64; --v6; } while ( v6 ); result = v8; } return result; } // 8045A0: using guessed type _DWORD __stdcall sub_8045A0(_DWORD); //----- (00805300) -------------------------------------------------------- int __cdecl sub_805300(signed int a1, int a2, int a3) { int v3; // ebx char *v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = (char *)(a2 + 28); do { sub_8045C0(a1, (int)(v4 - 28)); sub_860940(v4 - 12, a1); result = sub_860940(v4, a1); v4 += 64; --v3; } while ( v3 ); } return result; } //----- (00805340) -------------------------------------------------------- void __cdecl sub_805340(int a1) { if ( a1 ) operator delete((void *)(a1 - 4)); } //----- (00805360) -------------------------------------------------------- char __cdecl sub_805360(float a1, int a2, int a3) { int v3; // edx int v4; // esi int v5; // ecx int *v6; // eax char *v7; // edi int v8; // esi float v9; // ecx float v10; // edx int v11; // edi float v12; // eax int v13; // ecx int v14; // edx double v15; // st6 int v16; // eax float v17; // ecx float v18; // edx int v19; // ST1C_4 int v20; // ecx int v21; // edx int v22; // eax int v23; // ecx int v24; // edx int v25; // eax char *v26; // eax int v28; // [esp+34h] [ebp-74h] int v29; // [esp+38h] [ebp-70h] int v30; // [esp+3Ch] [ebp-6Ch] int v31; // [esp+40h] [ebp-68h] int v32; // [esp+44h] [ebp-64h] int v33; // [esp+48h] [ebp-60h] int v34; // [esp+4Ch] [ebp-5Ch] int v35; // [esp+50h] [ebp-58h] int v36; // [esp+54h] [ebp-54h] float v37; // [esp+58h] [ebp-50h] float v38; // [esp+5Ch] [ebp-4Ch] float v39; // [esp+60h] [ebp-48h] float v40; // [esp+64h] [ebp-44h] float v41; // [esp+68h] [ebp-40h] float v42; // [esp+6Ch] [ebp-3Ch] float v43; // [esp+70h] [ebp-38h] int v44; // [esp+74h] [ebp-34h] int v45; // [esp+78h] [ebp-30h] int v46; // [esp+7Ch] [ebp-2Ch] int v47; // [esp+80h] [ebp-28h] int v48; // [esp+84h] [ebp-24h] int v49; // [esp+88h] [ebp-20h] int v50; // [esp+8Ch] [ebp-1Ch] int v51; // [esp+90h] [ebp-18h] void *Src; // [esp+94h] [ebp-14h] char *v53; // [esp+98h] [ebp-10h] float v54; // [esp+9Ch] [ebp-Ch] float v55; // [esp+A0h] [ebp-8h] int v56; // [esp+A4h] [ebp-4h] v3 = *(_DWORD *)a3; Src = *(void **)a2; if ( !sub_817010(a1, (int)Src, v3, (int)&v56, 64) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = (unsigned __int64)(unsigned int)v4 >> 26 != 0; v6 = (int *)operator new((((v4 << 6) | -v5) + 4) | -__CFADD__((v4 << 6) | -v5, 4)); if ( v6 ) { v7 = (char *)(v6 + 1); *v6 = v4; v53 = (char *)(v6 + 1); } else { v53 = 0; v7 = 0; } memcpy_s(v7, (*(_DWORD *)a3 + 1) << 6, Src, v56 << 6); if ( *(_DWORD *)a3 > (unsigned int)v56 ) memcpy_s(&v7[64 * v56 + 64], (*(_DWORD *)a3 - v56) << 6, (char *)Src + 64 * v56, (*(_DWORD *)a3 - v56) << 6); sub_804810((int)&v28, a1, (int)Src, 2, *(_DWORD *)a3, 64); v8 = (int)&v7[64 * v56]; *(float *)v8 = a1; *(_DWORD *)(v8 + 4) = v28; *(_DWORD *)(v8 + 8) = v29; *(_DWORD *)(v8 + 12) = v30; *(_DWORD *)(v8 + 16) = dword_BA45C0; *(_DWORD *)(v8 + 20) = dword_BA45C4; *(_DWORD *)(v8 + 24) = dword_BA45C8; *(_DWORD *)(v8 + 28) = dword_BA45C0; *(_DWORD *)(v8 + 32) = dword_BA45C4; *(_DWORD *)(v8 + 36) = dword_BA45C8; if ( v56 && v56 != *(_DWORD *)a3 ) { v9 = *(float *)&v7[64 * v56 - 56]; v10 = *(float *)&v7[64 * v56 - 52]; v54 = *(float *)&v7[64 * v56 - 64]; v11 = (int)&v7[64 * v56]; v37 = *(float *)(v11 - 60); v49 = *(_DWORD *)(v11 - 36); v12 = *(float *)(v8 + 4); v38 = v9; v50 = *(_DWORD *)(v11 - 32); v13 = *(_DWORD *)(v8 + 8); v39 = v10; v51 = *(_DWORD *)(v11 - 28); v14 = *(_DWORD *)(v8 + 12); v55 = *(float *)(v11 + 64); v43 = v12; v15 = v12; v40 = *(float *)(v11 + 68); v16 = *(_DWORD *)(v11 + 80); v44 = v13; v17 = *(float *)(v11 + 72); v45 = v14; v18 = *(float *)(v11 + 76); v46 = v16; v41 = v17; v47 = *(_DWORD *)(v11 + 84); *(float *)&v19 = v15; v42 = v18; v48 = *(_DWORD *)(v11 + 88); sub_817540(v37, v54, (int)&v49, v40, v55, (int)&v46, a1, v19, (int)&v34, (int)&v31); sub_817540(v38, v54, (int)&v50, v41, v55, (int)&v47, a1, v44, (int)&v35, (int)&v32); sub_817540(v39, v54, (int)&v51, v42, v55, (int)&v48, a1, v45, (int)&v36, (int)&v33); *(_DWORD *)(v11 - 36) = v49; *(_DWORD *)(v11 - 32) = v50; *(_DWORD *)(v11 - 28) = v51; v20 = v35; v21 = v36; *(_DWORD *)(v8 + 16) = v34; v22 = v31; *(_DWORD *)(v8 + 20) = v20; v23 = v32; *(_DWORD *)(v8 + 24) = v21; v24 = v33; *(_DWORD *)(v8 + 28) = v22; v25 = v46; *(_DWORD *)(v8 + 32) = v23; *(_DWORD *)(v8 + 36) = v24; *(_DWORD *)(v11 + 80) = v25; *(_DWORD *)(v11 + 84) = v47; *(_DWORD *)(v11 + 88) = v48; v7 = v53; } v26 = (char *)Src; ++*(_DWORD *)a3; if ( v26 ) operator delete(v26 - 4); *(_DWORD *)a2 = v7; sub_804FA0((int)v7, *(_DWORD *)a3); return 1; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00805670) -------------------------------------------------------- signed int sub_805670() { signed int result; // eax if ( byte_BA3B6C ) return 0; result = 1; byte_BA3B6C = 1; dword_BA4260 = (int)sub_805280; dword_BA3F00 = (int)sub_805300; dword_BA3E70 = (int)sub_804C50; dword_BA3DE0 = (int)sub_804D50; dword_BA3D50 = (int)sub_805340; byte_BA3BF0 = 64; dword_BA41D0 = (int)sub_8050E0; dword_BA4140 = (int)sub_804D90; dword_BA40B0 = (int)sub_804E50; dword_BA4020 = (int)sub_804F10; dword_BA3F90 = (int)sub_804CC0; dword_BA3C30 = (int)sub_804FA0; dword_BA3CC0 = (int)sub_805360; return result; } // BA3B6C: using guessed type char byte_BA3B6C; // BA3BF0: using guessed type char byte_BA3BF0; // BA3C30: using guessed type int dword_BA3C30; // BA3CC0: using guessed type int dword_BA3CC0; // BA3D50: using guessed type int dword_BA3D50; // BA3DE0: using guessed type int dword_BA3DE0; // BA3E70: using guessed type int dword_BA3E70; // BA3F00: using guessed type int dword_BA3F00; // BA3F90: using guessed type int dword_BA3F90; // BA4020: using guessed type int dword_BA4020; // BA40B0: using guessed type int dword_BA40B0; // BA4140: using guessed type int dword_BA4140; // BA41D0: using guessed type int dword_BA41D0; // BA4260: using guessed type int dword_BA4260; //----- (00805710) -------------------------------------------------------- int __cdecl sub_805710(int a1, int a2, int a3, _DWORD *a4) { float *v4; // eax int result; // eax char v6; // [esp+10h] [ebp-10h] v4 = sub_874B00((float *)&v6, 1.0, 0.0, 0.0, 0.0); *a4 = *(_DWORD *)v4; a4[1] = *((_DWORD *)v4 + 1); a4[2] = *((_DWORD *)v4 + 2); result = *((_DWORD *)v4 + 3); a4[3] = result; return result; } //----- (00805760) -------------------------------------------------------- int __cdecl sub_805760(signed int a1, int a2) { sub_817490(a1, a2); return sub_875330((float *)(a2 + 4), a1); } //----- (00805790) -------------------------------------------------------- BOOL __thiscall sub_805790(float *this, float *a2) { return *a2 == *this && a2[1] == this[1] && a2[2] == this[2] && a2[3] == this[3]; } //----- (008057E0) -------------------------------------------------------- int __cdecl sub_8057E0(int a1, float a2, int a3, int a4, int a5, int a6, char a7) { int result; // eax int v8; // ecx int v9; // edx int v10; // ecx int v11; // edx int v12; // ebx unsigned int v13; // esi int v14; // eax double v15; // st7 unsigned int v16; // ecx int v17; // esi float *v18; // ebx float *v19; // edi double v20; // st6 int v21; // eax int v22; // eax float *v23; // esi int v24; // edx int v25; // ecx int v26; // edx int v27; // [esp+1Ch] [ebp-34h] int v28; // [esp+20h] [ebp-30h] int v29; // [esp+24h] [ebp-2Ch] int v30; // [esp+28h] [ebp-28h] int v31; // [esp+2Ch] [ebp-24h] int v32; // [esp+30h] [ebp-20h] int v33; // [esp+34h] [ebp-1Ch] int v34; // [esp+38h] [ebp-18h] int v35; // [esp+3Ch] [ebp-14h] unsigned int v36; // [esp+40h] [ebp-10h] float *v37; // [esp+44h] [ebp-Ch] float *v38; // [esp+48h] [ebp-8h] float v39; // [esp+4Ch] [ebp-4h] float v40; // [esp+68h] [ebp+18h] float v41; // [esp+68h] [ebp+18h] float v42; // [esp+68h] [ebp+18h] float v43; // [esp+68h] [ebp+18h] if ( a5 == 1 ) { if ( a4 != 4 ) { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); v8 = *(_DWORD *)(a3 + 16); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 12) = v8; return result; } goto LABEL_5; } if ( a4 == 4 ) { LABEL_5: ((void (__cdecl *)(_DWORD, int, _DWORD, int *))dword_BA4150[a4])(LODWORD(a2), a3, 0, &v31); result = a1; v9 = v32; *(_DWORD *)a1 = v31; v10 = v33; *(_DWORD *)(a1 + 4) = v9; v11 = v34; *(_DWORD *)(a1 + 8) = v10; *(_DWORD *)(a1 + 12) = v11; return result; } v12 = a3; v13 = a5 - 1; v14 = *(_DWORD *)a6; v36 = a5 - 1; v39 = *(float *)((unsigned __int8)a7 * v14 + a3); v15 = a2; if ( v39 > (double)a2 ) { *(_DWORD *)a6 = 0; v39 = *(float *)a3; } v16 = *(_DWORD *)a6 + 1; if ( v16 > v13 ) { v20 = *(float *)&a5; } else if ( (signed int)(v13 - *(_DWORD *)a6) < 4 ) { v20 = *(float *)&a5; LABEL_17: if ( v16 <= v13 ) { v23 = (float *)(v12 + v16 * (unsigned __int8)a7); do { v20 = *v23; if ( v20 >= v15 ) break; ++*(_DWORD *)a6; v39 = v20; ++v16; v23 = (float *)((char *)v23 + (unsigned __int8)a7); } while ( v16 <= v36 ); } } else { v38 = (float *)(a3 + v16 * (unsigned __int8)a7); v17 = 4 * (unsigned __int8)a7; v37 = (float *)(a3 + (unsigned __int8)a7 * (v16 + 3)); v18 = (float *)(a3 + (unsigned __int8)a7 * (v16 + 2)); v19 = (float *)(a3 + (unsigned __int8)a7 * (v16 + 1)); while ( 1 ) { v20 = *v38; if ( v20 >= v15 ) break; ++*(_DWORD *)a6; v39 = v20; v40 = *v19; v20 = v40; if ( v40 >= v15 ) { ++v16; break; } v21 = *(_DWORD *)a6; v39 = v40; *(_DWORD *)a6 = ++v21; v41 = *v18; v35 = v21; v20 = v41; if ( v41 >= v15 ) { v16 += 2; break; } v39 = v41; v22 = v35 + 1; *(_DWORD *)a6 = v35 + 1; v35 = v22; v42 = *v37; v20 = v42; if ( v42 >= v15 ) { v16 += 3; break; } v39 = v42; v38 = (float *)((char *)v38 + v17); v37 = (float *)((char *)v37 + v17); *(_DWORD *)a6 = v35 + 1; v16 += 4; v19 = (float *)((char *)v19 + v17); v18 = (float *)((char *)v18 + v17); if ( v16 > v36 - 3 ) { v12 = a3; v13 = v36; goto LABEL_17; } } v12 = a3; } v43 = (v15 - v39) / (v20 - v39); ((void (__cdecl *)(_DWORD, int, unsigned int, int *))dword_BA4150[a4])( LODWORD(v43), v12 + (unsigned __int8)a7 * *(_DWORD *)a6, v12 + v16 * (unsigned __int8)a7, &v27); result = a1; v24 = v28; *(_DWORD *)a1 = v27; v25 = v29; *(_DWORD *)(a1 + 4) = v24; v26 = v30; *(_DWORD *)(a1 + 8) = v25; *(_DWORD *)(a1 + 12) = v26; return result; } // BA4150: using guessed type int dword_BA4150[]; //----- (00805A30) -------------------------------------------------------- int __cdecl sub_805A30(int a1, float a2, int a3, int a4, int a5, char a6) { int result; // eax _DWORD *v7; // ecx int v8; // ST10_4 if ( a5 ) { if ( *(float *)a3 <= (double)a2 ) { if ( *(float *)((unsigned __int8)a6 * (a5 - 1) + a3) >= (double)a2 ) { v8 = a5; a5 = 0; sub_8057E0(a1, a2, a3, a4, v8, (int)&a5, a6); result = a1; } else { result = a1; v7 = (_DWORD *)((unsigned __int8)a6 * (a5 - 1) + a3 + 4); *(_DWORD *)a1 = *v7; *(_DWORD *)(a1 + 4) = v7[1]; *(_DWORD *)(a1 + 8) = v7[2]; *(_DWORD *)(a1 + 12) = v7[3]; } } else { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a3 + 16); } } else { result = a1; *(_DWORD *)a1 = dword_BA3B70; *(_DWORD *)(a1 + 4) = dword_BA3B74; *(_DWORD *)(a1 + 8) = dword_BA3B78; *(_DWORD *)(a1 + 12) = dword_BA3B7C; } return result; } // BA3B70: using guessed type int dword_BA3B70; // BA3B74: using guessed type int dword_BA3B74; // BA3B78: using guessed type int dword_BA3B78; // BA3B7C: using guessed type int dword_BA3B7C; //----- (00805B00) -------------------------------------------------------- void __cdecl sub_805B00(int a1, signed int a2, unsigned __int8 a3) { signed int v3; // ecx float v4; // edx float *v5; // esi float *v6; // ebx float *v7; // eax double v8; // st7 unsigned int v9; // eax double v10; // st6 unsigned int v11; // ecx int v12; // edx int *v13; // ebx int *v14; // esi double v15; // rt0 double v16; // st6 double v17; // st7 double v18; // rt1 double v19; // rt0 int *v20; // edi int v21; // ecx double v22; // rt1 double v23; // rt2 double v24; // st6 double v25; // st7 double v26; // rtt char v27; // [esp+Ch] [ebp-20h] unsigned int v28; // [esp+1Ch] [ebp-10h] int *v29; // [esp+20h] [ebp-Ch] int v30; // [esp+24h] [ebp-8h] float v31; // [esp+28h] [ebp-4h] v3 = a2; if ( a2 != 1 ) { LODWORD(v4) = a3; LODWORD(v31) = a3; v5 = (float *)(a3 + a1 + 4); v6 = (float *)(a1 + 12); v29 = (int *)(a2 - 1); do { *(float *)&v30 = v5[1] * *(v6 - 1) + *(v6 - 2) * *v5 + *v6 * v5[2] + v5[3] * v6[1]; if ( *(float *)&v30 < 0.0 ) { v7 = sub_874B80(v5, (float *)&v27); *v5 = *v7; v5[1] = v7[1]; v5[2] = v7[2]; v3 = a2; v5[3] = v7[3]; v4 = v31; } v5 = (float *)((char *)v5 + LODWORD(v4)); v6 = (float *)((char *)v6 + LODWORD(v4)); v29 = (int *)((char *)v29 - 1); } while ( v29 ); } v8 = -1.0; v9 = 0; v10 = 1.0; if ( v3 >= 4 ) { v29 = (int *)(a3 + a1 + 2 * a3 + 4); v30 = a1 + 2 * a3 + 4; v11 = ((unsigned int)(v3 - 4) >> 2) + 1; v12 = 4 * a3; v13 = (int *)(a3 + a1 + 4); v14 = (int *)(a1 + 4); v28 = 4 * v11; do { v31 = *(float *)v14; if ( v31 >= v8 ) { if ( v31 > v10 ) *(float *)v14 = v10; v18 = v10; v16 = v8; v17 = v18; } else { v15 = v10; v16 = v8; v17 = v15; *(float *)v14 = v16; } v31 = *(float *)v13; if ( v31 >= v16 ) { if ( v31 > v17 ) *(float *)v13 = v17; } else { *(float *)v13 = v16; } v31 = *(float *)v30; if ( v31 >= v16 ) { if ( v31 > v17 ) *(float *)v30 = v17; } else { *(float *)v30 = v16; } v31 = *(float *)v29; if ( v31 >= v16 ) { if ( v31 > v17 ) *(float *)v29 = v17; } else { *(float *)v29 = v16; } v30 += v12; v19 = v16; v10 = v17; v8 = v19; v29 = (int *)((char *)v29 + v12); v14 = (int *)((char *)v14 + v12); v13 = (int *)((char *)v13 + v12); --v11; } while ( v11 ); v3 = a2; v9 = v28; } if ( v9 < v3 ) { v20 = (int *)(v9 * a3 + a1 + 4); v21 = v3 - v9; while ( 1 ) { v31 = *(float *)v20; if ( v31 >= v8 ) { if ( v31 > v10 ) *(float *)v20 = v10; v26 = v10; v24 = v8; v25 = v26; } else { v23 = v10; v24 = v8; v25 = v23; *(float *)v20 = v24; } v20 = (int *)((char *)v20 + a3); if ( !--v21 ) break; v22 = v24; v10 = v25; v8 = v22; } } } //----- (00805CF0) -------------------------------------------------------- signed int sub_805CF0() { signed int result; // eax result = 0; if ( !byte_BA3B6D ) { dword_BA41E0 = 0; dword_BA40C0 = 0; dword_BA4030 = 0; dword_BA3CD0 = 0; byte_BA3B6D = 1; dword_BA4270[0] = (int)sub_8B6190; dword_BA3F10[0] = (int)nullsub_6; dword_BA3E80 = (int)nullsub_6; dword_BA3DF0 = (int)sub_8B6190; dword_BA3D60[0] = (int)nullsub_6; byte_BA3BF4[0] = 20; dword_BA4150[0] = (int)sub_805710; dword_BA3FA0[0] = (int)sub_806A00; dword_BA3C40[0] = (int)sub_805B00; result = 1; } return result; } // BA3B6D: using guessed type char byte_BA3B6D; // BA3C40: using guessed type int dword_BA3C40[]; // BA3CD0: using guessed type int dword_BA3CD0; // BA3D60: using guessed type int dword_BA3D60[]; // BA3DF0: using guessed type int dword_BA3DF0; // BA3E80: using guessed type int dword_BA3E80; // BA3F10: using guessed type int dword_BA3F10[]; // BA3FA0: using guessed type int dword_BA3FA0[]; // BA4030: using guessed type int dword_BA4030; // BA40C0: using guessed type int dword_BA40C0; // BA4150: using guessed type int dword_BA4150[]; // BA41E0: using guessed type int dword_BA41E0; // BA4270: using guessed type int dword_BA4270[]; //----- (00805D80) -------------------------------------------------------- int __cdecl sub_805D80(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(a1 + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(a1 + 20) = *(_DWORD *)(a2 + 20); *(_DWORD *)(a1 + 24) = *(_DWORD *)(a2 + 24); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); result = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 32) = result; return result; } //----- (00805DC0) -------------------------------------------------------- int __cdecl sub_805DC0(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int result; // eax int v6; // [esp+14h] [ebp-10h] v4 = (_DWORD *)sub_874C70((int)&v6, a1, a2 + 4, a2 + 20, a3 + 20, a3 + 4); *(_DWORD *)a4 = *v4; *(_DWORD *)(a4 + 4) = v4[1]; *(_DWORD *)(a4 + 8) = v4[2]; result = v4[3]; *(_DWORD *)(a4 + 12) = result; return result; } //----- (00805E10) -------------------------------------------------------- void __cdecl sub_805E10(int a1, unsigned int a2, unsigned __int8 a3) { unsigned int v3; // ebx int v4; // esi float *v5; // eax float *v6; // eax int v7; // edx bool v8; // zf int v9; // esi float *v10; // eax char v11; // [esp+4h] [ebp-14h] unsigned int v12; // [esp+14h] [ebp-4h] v3 = a2; if ( a2 >= 2 ) { sub_805B00(a1, a2, a3); v4 = a1 + 40; v5 = sub_874D90((float *)&v11, (float *)(a1 + 4), (float *)(a1 + 4), (float *)(a1 + 40)); *(float *)(a1 + 20) = *v5; *(float *)(a1 + 24) = v5[1]; *(float *)(a1 + 28) = v5[2]; *(float *)(a1 + 32) = v5[3]; if ( a2 - 1 > 1 ) { v12 = a2 - 2; do { v6 = sub_874D90((float *)&v11, (float *)(v4 - 36), (float *)v4, (float *)(v4 + 36)); *(float *)(v4 + 16) = *v6; *(float *)(v4 + 20) = v6[1]; *(float *)(v4 + 24) = v6[2]; v7 = *((_DWORD *)v6 + 3); v8 = v12-- == 1; *(_DWORD *)(v4 + 28) = v7; v4 += 36; } while ( !v8 ); v3 = a2; } v9 = a1 + 4 * (9 * v3 - 9); v10 = sub_874D90((float *)&v11, (float *)(a1 + 36 * v3 - 68), (float *)(v9 + 4), (float *)(v9 + 4)); *(float *)(v9 + 20) = *v10; *(float *)(v9 + 24) = v10[1]; *(float *)(v9 + 28) = v10[2]; *(float *)(v9 + 32) = v10[3]; } } //----- (00805EF0) -------------------------------------------------------- BOOL __cdecl sub_805EF0(float *a1, float *a2) { BOOL result; // eax result = sub_806A00(a1, a2); if ( (_BYTE)result ) result = a2[5] == a1[5] && a2[6] == a1[6] && a2[7] == a1[7] && a2[8] == a1[8]; return result; } //----- (00805F60) -------------------------------------------------------- int __cdecl sub_805F60(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_805760(a1, v4); v4 += 36; --v3; } while ( v3 ); } return result; } //----- (00805F90) -------------------------------------------------------- int __cdecl sub_805F90(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax int v3; // edi int v4; // ebx float *v5; // esi v1 = 36 * a1 | -(36 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; v3 = a1 - 1; *v2 = a1; v4 = (int)(v2 + 1); if ( (signed int)(a1 - 1) >= 0 ) { v5 = (float *)(v2 + 2); do { sub_874B00(v5, 0.0, 0.0, 0.0, 0.0); v5 += 9; --v3; } while ( v3 >= 0 ); } return v4; } //----- (00806000) -------------------------------------------------------- char __cdecl sub_806000(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax int v7; // eax float *v8; // edi char *v9; // edi int v10; // eax int v12; // [esp+20h] [ebp-1Ch] int v13; // [esp+24h] [ebp-18h] int v14; // [esp+28h] [ebp-14h] int v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+30h] [ebp-Ch] int v17; // [esp+34h] [ebp-8h] int v18; // [esp+38h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v18, 36) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 36 * v4 | -(36 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (int)(v6 + 1); v16 = v7; v17 = v4 - 1; if ( v4 - 1 >= 0 ) { v8 = (float *)(v7 + 4); do { sub_874B00(v8, 0.0, 0.0, 0.0, 0.0); v8 += 9; --v17; } while ( v17 >= 0 ); v7 = v16; } v9 = (char *)v7; } else { v9 = 0; } memcpy_s(v9, 4 * (9 * *(_DWORD *)a3 + 9), v3, 36 * v18); if ( *(_DWORD *)a3 > (unsigned int)v18 ) memcpy_s(&v9[36 * v18 + 36], 36 * (*(_DWORD *)a3 - v18), &v3[36 * v18], 36 * (*(_DWORD *)a3 - v18)); sub_805A30((int)&v12, a1, (int)v3, 2, *(_DWORD *)a3, 36); v10 = (int)&v9[36 * v18]; *(float *)v10 = a1; *(_DWORD *)(v10 + 4) = v12; *(_DWORD *)(v10 + 8) = v13; *(_DWORD *)(v10 + 12) = v14; *(_DWORD *)(v10 + 16) = v15; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v9; sub_805E10((int)v9, *(_DWORD *)a3, 0x24u); return 1; } //----- (00806160) -------------------------------------------------------- int __cdecl sub_806160(signed int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // edi float *v7; // esi char *v8; // esi int v9; // [esp+28h] [ebp+Ch] int v10; // [esp+28h] [ebp+Ch] v2 = a2; v3 = 36 * a2 | -(36 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v6 = a2 - 1; v9 = result; if ( (signed int)(v2 - 1) >= 0 ) { v7 = (float *)(result + 4); do { sub_874B00(v7, 0.0, 0.0, 0.0, 0.0); v7 += 9; --v6; } while ( v6 >= 0 ); result = v9; } v10 = result; } else { v10 = 0; result = 0; } if ( v2 ) { v8 = (char *)result; do { sub_8066A0(v8, a1); v8 += 36; --v2; } while ( v2 ); result = v10; } return result; } //----- (00806200) -------------------------------------------------------- signed int sub_806200() { signed int result; // eax result = 0; if ( !byte_BA3B80 ) { dword_BA41E8 = 0; dword_BA40C8 = 0; dword_BA4038 = 0; byte_BA3B80 = 1; dword_BA4278 = (int)sub_806160; dword_BA3F18 = (int)sub_805F60; dword_BA3E88 = (int)sub_805D80; dword_BA3DF8 = (int)sub_805F90; dword_BA3D68 = (int)sub_805340; byte_BA3BF6 = 36; dword_BA4158 = (int)sub_805DC0; dword_BA3FA8 = (int)sub_805EF0; dword_BA3C48 = (int)sub_805E10; dword_BA3CD8 = (int)sub_806000; result = 1; } return result; } // BA3B80: using guessed type char byte_BA3B80; // BA3BF6: using guessed type char byte_BA3BF6; // BA3C48: using guessed type int dword_BA3C48; // BA3CD8: using guessed type int dword_BA3CD8; // BA3D68: using guessed type int dword_BA3D68; // BA3DF8: using guessed type int dword_BA3DF8; // BA3E88: using guessed type int dword_BA3E88; // BA3F18: using guessed type int dword_BA3F18; // BA3FA8: using guessed type int dword_BA3FA8; // BA4038: using guessed type int dword_BA4038; // BA40C8: using guessed type int dword_BA40C8; // BA4158: using guessed type int dword_BA4158; // BA41E8: using guessed type int dword_BA41E8; // BA4278: using guessed type int dword_BA4278; //----- (00806290) -------------------------------------------------------- bool __cdecl sub_806290(int a1, int a2) { bool result; // al result = sub_816F60((float *)a1, (float *)a2); if ( result ) result = *(_BYTE *)(a1 + 4) == *(_BYTE *)(a2 + 4); return result; } //----- (008062C0) -------------------------------------------------------- _BYTE *__cdecl sub_8062C0(int a1, int a2, int a3, _BYTE *a4) { _BYTE *result; // eax result = a4; *a4 = byte_BA3B81; return result; } // BA3B81: using guessed type char byte_BA3B81; //----- (008062D0) -------------------------------------------------------- char __cdecl sub_8062D0(float a1, int a2, int a3, int a4, int a5, char a6) { int *v7; // edx int v8; // ebx int v9; // edi unsigned int v10; // esi double v11; // st7 unsigned int v12; // ecx int v13; // esi int *v14; // ebx int *v15; // edi double v16; // st6 int v17; // eax int v18; // edi int *v19; // esi int v20; // esi int v21; // ecx unsigned int v22; // [esp+20h] [ebp-10h] int *v23; // [esp+24h] [ebp-Ch] int *v24; // [esp+28h] [ebp-8h] int v25; // [esp+2Ch] [ebp-4h] if ( a4 == 1 ) return *(_BYTE *)(a2 + 4); v7 = (int *)a5; v8 = a2; v9 = (unsigned __int8)a6; v10 = a4 - 1; v22 = a4 - 1; v25 = *(int *)((unsigned __int8)a6 * *(_DWORD *)a5 + a2); v11 = a1; if ( *(float *)&v25 > (double)a1 ) { *(_DWORD *)a5 = 0; v25 = *(int *)a2; } v12 = *v7 + 1; if ( v12 > v10 ) { v16 = *(float *)&a4; } else if ( (signed int)(v10 - *v7) < 4 ) { v16 = *(float *)&a4; LABEL_14: if ( v12 <= v10 ) { v18 = (unsigned __int8)a6; v19 = (int *)(v8 + v12 * (unsigned __int8)a6); do { a4 = *v19; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) break; ++*v7; *(float *)&v25 = v16; ++v12; v19 = (int *)((char *)v19 + v18); } while ( v12 <= v22 ); } } else { v24 = (int *)(a2 + v12 * v9); v13 = 4 * v9; v23 = (int *)(a2 + v9 * (*v7 + 4)); v14 = (int *)(a2 + v9 * (*v7 + 3)); v15 = (int *)(a2 + (unsigned __int8)a6 * (*v7 + 2)); while ( 1 ) { a4 = *v24; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) break; ++*v7; *(float *)&v25 = v16; a4 = *v15; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { ++v12; break; } v25 = a4; v17 = *v7 + 1; *v7 = v17; a4 = *v14; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { v12 += 2; break; } v25 = a4; *v7 = v17 + 1; a4 = *v23; v16 = *(float *)&a4; if ( *(float *)&a4 >= v11 ) { v12 += 3; break; } v25 = a4; v24 = (int *)((char *)v24 + v13); v23 = (int *)((char *)v23 + v13); *v7 = v17 + 2; v12 += 4; v15 = (int *)((char *)v15 + v13); v14 = (int *)((char *)v14 + v13); if ( v12 > v22 - 3 ) { v8 = a2; v10 = v22; goto LABEL_14; } } v8 = a2; } v20 = v12 * (unsigned __int8)a6; v21 = *v7; *(float *)&a4 = (v11 - *(float *)&v25) / (v16 - *(float *)&v25); ((void (__cdecl *)(int, int, int, char *))dword_BA4198[a3])( a4, v8 + (unsigned __int8)a6 * v21, v8 + v20, (char *)&a4 + 3); return HIBYTE(a4); } //----- (008064A0) -------------------------------------------------------- char __cdecl sub_8064A0(float a1, int a2, int a3, int a4, char a5) { int v6; // ST0C_4 if ( !a4 ) return byte_BA3B81; if ( *(float *)a2 > (double)a1 ) return *(_BYTE *)(a2 + 4); if ( *(float *)((unsigned __int8)a5 * (a4 - 1) + a2) < (double)a1 ) return *(_BYTE *)((unsigned __int8)a5 * (a4 - 1) + a2 + 4); v6 = a4; a4 = 0; return sub_8062D0(a1, a2, a3, v6, (int)&a4, a5); } // BA3B81: using guessed type char byte_BA3B81; //----- (00806520) -------------------------------------------------------- signed int sub_806520() { signed int result; // eax if ( byte_BA3B82 ) return 0; result = 1; byte_BA3B82 = 1; dword_BA42B8[0] = (int)sub_8B6190; dword_BA3F58[0] = (int)nullsub_6; dword_BA3EC8 = (int)nullsub_6; dword_BA3E38 = (int)sub_8B6190; dword_BA3DA8[0] = (int)nullsub_6; byte_BA3C06[0] = 8; dword_BA4228 = (int)sub_80A280; dword_BA4198[0] = (int)sub_8062C0; dword_BA4108 = (int)sub_8062C0; dword_BA4078 = (int)sub_8062C0; dword_BA3FE8[0] = (int)sub_806290; dword_BA3C88[0] = (int)nullsub_6; dword_BA3D18 = 0; return result; } // BA3B82: using guessed type char byte_BA3B82; // BA3D18: using guessed type int dword_BA3D18; // BA3E38: using guessed type int dword_BA3E38; // BA3EC8: using guessed type int dword_BA3EC8; // BA4078: using guessed type int dword_BA4078; // BA4108: using guessed type int dword_BA4108; // BA4228: using guessed type int dword_BA4228; //----- (008065C0) -------------------------------------------------------- int __cdecl sub_8065C0(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 352); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 4); a1 = 1; return v4(v3, a2, 1, &a1, 1); } //----- (008065F0) -------------------------------------------------------- int __thiscall sub_8065F0(_BYTE *this, int a2) { int v2; // edi void (__cdecl *v3)(int, _BYTE *, signed int, int *, signed int); // edx _BYTE *v4; // esi int v5; // ST14_4 int v6; // eax int v7; // ST00_4 int (__cdecl *v8)(int, char *, signed int, int *, signed int); // eax int result; // eax int v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = this; v5 = *(_DWORD *)(a2 + 352); v10 = 4; v3(v5, this, 4, &v10, 1); v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v6 + 4); v10 = 1; result = v8(v7, (char *)&a2 + 3, 1, &v10, 1); v4[4] = HIBYTE(a2) != 0; return result; } //----- (00806650) -------------------------------------------------------- int __cdecl sub_806650(signed int a1, int a2) { int v2; // esi signed int v3; // edi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax v2 = a2; v3 = a1; sub_817490(a1, a2); HIBYTE(a2) = *(_BYTE *)(v2 + 4) != 0; v4 = *(_DWORD *)(v3 + 356); v5 = v4; v6 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a1 = 1; return v6(v5, (char *)&a2 + 3, 1, &a1, 1); } //----- (008066A0) -------------------------------------------------------- int __thiscall sub_8066A0(char *this, signed int a2) { char *v2; // esi v2 = this; sub_817460(this, a2); return sub_8752B0(v2 + 4, a2); } //----- (008066C0) -------------------------------------------------------- int __cdecl sub_8066C0(signed int a1, int a2) { sub_817490(a1, a2); return sub_8609B0((char *)(a2 + 4), a1); } //----- (008066F0) -------------------------------------------------------- _DWORD *__cdecl sub_8066F0(int a1, int a2, int a3, _DWORD *a4) { _DWORD *result; // eax result = a4; *a4 = dword_ABD508; a4[1] = dword_ABD50C; a4[2] = dword_ABD510; a4[3] = dword_ABD514; return result; } // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; //----- (00806720) -------------------------------------------------------- int __cdecl sub_806720(int a1, float a2, int a3, int a4, int a5, int a6, char a7) { int result; // eax int v8; // ecx int v9; // ebx unsigned int v10; // esi int v11; // eax double v12; // st7 unsigned int v13; // ecx int v14; // esi float *v15; // ebx float *v16; // edi double v17; // st6 int v18; // eax int v19; // eax float *v20; // esi float v21; // edx float v22; // ecx float v23; // edx float v24; // [esp+1Ch] [ebp-24h] float v25; // [esp+20h] [ebp-20h] float v26; // [esp+24h] [ebp-1Ch] float v27; // [esp+28h] [ebp-18h] int v28; // [esp+2Ch] [ebp-14h] unsigned int v29; // [esp+30h] [ebp-10h] float *v30; // [esp+34h] [ebp-Ch] float *v31; // [esp+38h] [ebp-8h] float v32; // [esp+3Ch] [ebp-4h] float v33; // [esp+58h] [ebp+18h] float v34; // [esp+58h] [ebp+18h] float v35; // [esp+58h] [ebp+18h] float v36; // [esp+58h] [ebp+18h] if ( a5 == 1 ) { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); v8 = *(_DWORD *)(a3 + 16); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 12) = v8; } else { v9 = a3; v10 = a5 - 1; v11 = *(_DWORD *)a6; v29 = a5 - 1; v32 = *(float *)((unsigned __int8)a7 * v11 + a3); v12 = a2; if ( v32 > (double)a2 ) { *(_DWORD *)a6 = 0; v32 = *(float *)a3; } v13 = *(_DWORD *)a6 + 1; if ( v13 > v10 ) { v17 = *(float *)&a5; } else if ( (signed int)(v10 - *(_DWORD *)a6) < 4 ) { v17 = *(float *)&a5; LABEL_14: if ( v13 <= v10 ) { v20 = (float *)(v9 + v13 * (unsigned __int8)a7); do { v17 = *v20; if ( v17 >= v12 ) break; ++*(_DWORD *)a6; v32 = v17; ++v13; v20 = (float *)((char *)v20 + (unsigned __int8)a7); } while ( v13 <= v29 ); } } else { v31 = (float *)(a3 + v13 * (unsigned __int8)a7); v14 = 4 * (unsigned __int8)a7; v30 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 3)); v15 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 2)); v16 = (float *)(a3 + (unsigned __int8)a7 * (v13 + 1)); while ( 1 ) { v17 = *v31; if ( v17 >= v12 ) break; ++*(_DWORD *)a6; v32 = v17; v33 = *v16; v17 = v33; if ( v33 >= v12 ) { ++v13; break; } v18 = *(_DWORD *)a6; v32 = v33; *(_DWORD *)a6 = ++v18; v34 = *v15; v28 = v18; v17 = v34; if ( v34 >= v12 ) { v13 += 2; break; } v32 = v34; v19 = v28 + 1; *(_DWORD *)a6 = v28 + 1; v28 = v19; v35 = *v30; v17 = v35; if ( v35 >= v12 ) { v13 += 3; break; } v32 = v35; v31 = (float *)((char *)v31 + v14); v30 = (float *)((char *)v30 + v14); *(_DWORD *)a6 = v28 + 1; v13 += 4; v16 = (float *)((char *)v16 + v14); v15 = (float *)((char *)v15 + v14); if ( v13 > v29 - 3 ) { v9 = a3; v10 = v29; goto LABEL_14; } } v9 = a3; } v24 = 0.0; v25 = 0.0; v26 = 0.0; v27 = 0.0; v36 = (v12 - v32) / (v17 - v32); ((void (__cdecl *)(_DWORD, int, unsigned int, float *))dword_BA4168[a4])( LODWORD(v36), v9 + (unsigned __int8)a7 * *(_DWORD *)a6, v9 + v13 * (unsigned __int8)a7, &v24); result = a1; v21 = v25; *(float *)a1 = v24; v22 = v26; *(float *)(a1 + 4) = v21; v23 = v27; *(float *)(a1 + 8) = v22; *(float *)(a1 + 12) = v23; } return result; } // BA4168: using guessed type int dword_BA4168[]; //----- (00806930) -------------------------------------------------------- int __cdecl sub_806930(int a1, float a2, int a3, int a4, int a5, char a6) { int result; // eax _DWORD *v7; // ecx int v8; // ST10_4 if ( a5 ) { if ( *(float *)a3 <= (double)a2 ) { if ( *(float *)((unsigned __int8)a6 * (a5 - 1) + a3) >= (double)a2 ) { v8 = a5; a5 = 0; sub_806720(a1, a2, a3, a4, v8, (int)&a5, a6); result = a1; } else { result = a1; v7 = (_DWORD *)((unsigned __int8)a6 * (a5 - 1) + a3 + 4); *(_DWORD *)a1 = *v7; *(_DWORD *)(a1 + 4) = v7[1]; *(_DWORD *)(a1 + 8) = v7[2]; *(_DWORD *)(a1 + 12) = v7[3]; } } else { result = a1; *(_DWORD *)a1 = *(_DWORD *)(a3 + 4); *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a3 + 16); } } else { result = a1; *(_DWORD *)a1 = dword_BA3B84; *(_DWORD *)(a1 + 4) = dword_BA3B88; *(_DWORD *)(a1 + 8) = dword_BA3B8C; *(_DWORD *)(a1 + 12) = dword_BA3B90; } return result; } // BA3B84: using guessed type int dword_BA3B84; // BA3B88: using guessed type int dword_BA3B88; // BA3B8C: using guessed type int dword_BA3B8C; // BA3B90: using guessed type int dword_BA3B90; //----- (00806A00) -------------------------------------------------------- BOOL __cdecl sub_806A00(float *a1, float *a2) { BOOL result; // eax result = sub_816F60(a1, a2); if ( (_BYTE)result ) result = a2[1] == a1[1] && a2[2] == a1[2] && a2[3] == a1[3] && a2[4] == a1[4]; return result; } //----- (00806A70) -------------------------------------------------------- signed int sub_806A70() { signed int result; // eax result = 0; if ( !byte_BA3B83 ) { dword_BA41F8 = 0; dword_BA40D8 = 0; dword_BA4048 = 0; dword_BA3C58 = 0; dword_BA3CE8 = 0; byte_BA3B83 = 1; dword_BA4288[0] = (int)sub_8B6190; dword_BA3F28[0] = (int)nullsub_6; dword_BA3E98 = (int)nullsub_6; dword_BA3E08 = (int)sub_8B6190; dword_BA3D78[0] = (int)nullsub_6; byte_BA3BFA[0] = 20; dword_BA4168[0] = (int)sub_8066F0; dword_BA3FB8[0] = (int)sub_806A00; result = 1; } return result; } // BA3B83: using guessed type char byte_BA3B83; // BA3C58: using guessed type int dword_BA3C58; // BA3CE8: using guessed type int dword_BA3CE8; // BA3D78: using guessed type int dword_BA3D78[]; // BA3E08: using guessed type int dword_BA3E08; // BA3E98: using guessed type int dword_BA3E98; // BA3F28: using guessed type int dword_BA3F28[]; // BA3FB8: using guessed type int dword_BA3FB8[]; // BA4048: using guessed type int dword_BA4048; // BA40D8: using guessed type int dword_BA40D8; // BA4168: using guessed type int dword_BA4168[]; // BA41F8: using guessed type int dword_BA41F8; // BA4288: using guessed type int dword_BA4288[]; //----- (00806AF0) -------------------------------------------------------- int __thiscall sub_806AF0(int *this) { int *v1; // esi signed int v2; // ebx int result; // eax v1 = this + 12; v2 = 3; do { result = *v1; if ( *v1 ) result = ((int (__cdecl *)(int))dword_BA3D30[*(v1 - 4)])(*v1); *v1 = 0; *(v1 - 7) = 0; *(v1 - 4) = 0; ++v1; --v2; } while ( v2 ); return result; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (00806B30) -------------------------------------------------------- void __cdecl sub_806B30(float a1, int a2, int a3, int a4) { float *v4; // ecx unsigned int v5; // edi int *v6; // esi double v7; // st7 float v8; // ST3C_4 float v9; // ST28_4 float v10; // ST38_4 float v11; // ST34_4 float v12; // ST30_4 float v13; // ST3C_4 float v14; // ST24_4 float v15; // ST2C_4 float v16; // ST34_4 double v17; // st6 double v18; // st4 double v19; // st7 double v20; // st5 float v21; // [esp+40h] [ebp-10h] float v22; // [esp+44h] [ebp-Ch] float v23; // [esp+48h] [ebp-8h] v4 = (float *)a4; v5 = 0; v6 = (int *)(a2 + 20); do { if ( *v6 ) { v7 = sub_803DC0(a1, v6[7], v6[3], *v6, (int)(v6 + 10), *(_BYTE *)(a2 + v5 + 44)); v4 = (float *)a4; } else { v7 = 0.0; } *(&v21 + v5++) = v7; ++v6; } while ( v5 < 3 ); v8 = v21 * 0.5; v9 = cos(v8); v10 = sin(v8); v11 = v22 * 0.5; v12 = cos(v11); v13 = sin(v11); v14 = v23 * 0.5; v15 = cos(v14); v16 = sin(v14); v17 = v16 * v13; v18 = v15 * v12; *v4 = v9 * v18 + v10 * v17; v4[1] = v18 * v10 - v17 * v9; v19 = v16 * v12; v20 = v13 * v15; v4[2] = v9 * v20 + v10 * v19; v4[3] = v19 * v9 - v10 * v20; } //----- (00806C40) -------------------------------------------------------- char __cdecl sub_806C40(int a1, int a2) { int v2; // esi unsigned int v3; // ecx int v4; // eax _DWORD *v5; // edi _BYTE *v6; // ebx int v7; // edx int v8; // esi unsigned __int8 (__cdecl *v10)(int, int); // [esp+Ch] [ebp-10h] unsigned int v11; // [esp+10h] [ebp-Ch] _DWORD *v12; // [esp+18h] [ebp-4h] v2 = a1; v3 = 0; v4 = a2 - a1; v11 = 0; v12 = (_DWORD *)(a2 + 48); v5 = (_DWORD *)(a1 + 32); while ( *(v5 - 3) == *(_DWORD *)((char *)v5 + v4 - 12) ) { if ( *v5 != *(_DWORD *)((char *)v5 + v4) ) break; v6 = (_BYTE *)(v3 + v2 + 44); if ( *v6 != *(_BYTE *)(v3 + a2 + 44) ) break; v7 = *(v5 - 3); if ( v7 ) { v10 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[*v5]; v8 = 0; if ( v7 ) { while ( v10(v5[4] + v8 * (unsigned __int8)*v6, *v12 + v8 * (unsigned __int8)v6[v4]) ) { v4 = a2 - a1; if ( (unsigned int)++v8 >= *(v5 - 3) ) { v3 = v11; goto LABEL_11; } } return 0; } } LABEL_11: ++v12; ++v3; ++v5; v11 = v3; if ( v3 >= 3 ) return 1; v2 = a1; } return 0; } // BA3F70: using guessed type int dword_BA3F70[]; //----- (00806CF0) -------------------------------------------------------- signed int __cdecl sub_806CF0(int a1, int a2) { int v2; // eax int v3; // ecx _DWORD *v4; // edi int v5; // edx unsigned int v6; // ebx unsigned int v7; // esi signed int result; // eax void (__cdecl *v9)(unsigned int, unsigned int); // [esp+Ch] [ebp-10h] int v10; // [esp+10h] [ebp-Ch] signed int v11; // [esp+14h] [ebp-8h] unsigned __int8 *v12; // [esp+18h] [ebp-4h] _DWORD *v13; // [esp+24h] [ebp+8h] int v14; // [esp+28h] [ebp+Ch] v2 = a1; v12 = (unsigned __int8 *)(a1 + 44); v13 = (_DWORD *)(a1 + 48); v3 = v2 - a2; v4 = (_DWORD *)(a2 + 32); v5 = a2 - v2; v14 = v2 - a2; v10 = v5; v11 = 3; do { *(_DWORD *)((char *)v4 + v3 - 12) = *(v4 - 3); *(_DWORD *)((char *)v4 + v3) = *v4; v6 = *(v4 - 3); if ( v6 ) { *v13 = ((int (__cdecl *)(_DWORD))dword_BA3DC0[*v4])(*(v4 - 3)); v7 = 0; v9 = (void (__cdecl *)(unsigned int, unsigned int))dword_BA3E50[*v4]; if ( v6 ) { do { v9(*v13 + v7 * *v12, v4[4] + v7 * v12[v10]); ++v7; } while ( v7 < v6 ); } v3 = v14; } ++v13; result = 1; ++v12; ++v4; --v11; } while ( v11 ); return result; } // BA3DC0: using guessed type int dword_BA3DC0[]; // BA3E50: using guessed type int dword_BA3E50[]; //----- (00806DB0) -------------------------------------------------------- int __cdecl sub_806DB0(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax int result; // eax int v4; // edi int v5; // esi int v6; // [esp+24h] [ebp+8h] v1 = 72 * a1 | -(72 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; result = (int)(v2 + 1); v4 = a1 - 1; v6 = result; if ( v4 >= 0 ) { v5 = result + 20; do { sub_874B00((float *)(v5 - 16), 0.0, 0.0, 0.0, 0.0); *(_DWORD *)v5 = 0; *(_DWORD *)(v5 + 4) = 0; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 28) = 0; *(_DWORD *)(v5 + 32) = 0; *(_DWORD *)(v5 + 36) = 0; *(_DWORD *)(v5 + 12) = 0; *(_DWORD *)(v5 + 16) = 0; *(_DWORD *)(v5 + 20) = 0; *(_DWORD *)(v5 + 40) = 0; *(_DWORD *)(v5 + 44) = 0; *(_DWORD *)(v5 + 48) = 0; *(_WORD *)(v5 + 24) = 0; *(_BYTE *)(v5 + 26) = 0; v5 += 72; --v4; } while ( v4 >= 0 ); result = v6; } return result; } //----- (00806E50) -------------------------------------------------------- int __cdecl sub_806E50(int a1) { unsigned int v1; // edi int *v2; // esi int result; // eax v1 = 0; v2 = (int *)(a1 + 48); do { result = *v2; if ( *v2 ) result = ((int (__cdecl *)(int, _DWORD, _DWORD))dword_BA3C10[*(v2 - 4)])( result, *(v2 - 7), *(unsigned __int8 *)(v1 + a1 + 44)); ++v1; ++v2; } while ( v1 < 3 ); return result; } // BA3C10: using guessed type int dword_BA3C10[]; //----- (00806E90) -------------------------------------------------------- bool __cdecl sub_806E90(float a1, int a2, int a3) { int *v3; // edi float *v4; // eax int v5; // esi _DWORD *v6; // ecx int v7; // edi unsigned int v8; // ecx int v9; // esi int v10; // eax int v11; // eax unsigned int v13; // [esp+1Ch] [ebp-8h] int v14; // [esp+20h] [ebp-4h] v3 = (int *)a2; if ( !*(_DWORD *)a3 ) { v4 = (float *)operator new(0x4Cu); if ( v4 ) { v5 = (int)(v4 + 1); *(_DWORD *)v4 = 1; sub_874B00(v4 + 2, 0.0, 0.0, 0.0, 0.0); *(_DWORD *)(v5 + 20) = 0; *(_DWORD *)(v5 + 24) = 0; *(_DWORD *)(v5 + 28) = 0; *(_DWORD *)(v5 + 48) = 0; *(_DWORD *)(v5 + 52) = 0; *(_DWORD *)(v5 + 56) = 0; *(_DWORD *)(v5 + 32) = 0; *(_DWORD *)(v5 + 36) = 0; *(_DWORD *)(v5 + 40) = 0; *(_DWORD *)(v5 + 60) = 0; *(_DWORD *)(v5 + 64) = 0; *(_DWORD *)(v5 + 68) = 0; *(_WORD *)(v5 + 44) = 0; *(_BYTE *)(v5 + 46) = 0; } else { v5 = 0; } v6 = (_DWORD *)a3; *v3 = v5; *v6 = 1; } v7 = *v3; v8 = 0; HIBYTE(a3) = 0; v13 = 0; do { v9 = (unsigned __int8)v8; v10 = *(_DWORD *)(v7 + 4 * (unsigned __int8)v8 + 20); v14 = *(_DWORD *)(v7 + 4 * (unsigned __int8)v8 + 48); a2 = v10; if ( v10 ) { if ( ((unsigned __int8 (__cdecl *)(_DWORD, int *, int *))dword_BA3CA0[*(_DWORD *)(v7 + 4 * (unsigned __int8)v8 + 32)])( LODWORD(a1), &v14, &a2) ) { HIBYTE(a3) = 1; } v11 = a2; *(_DWORD *)(v7 + 4 * v9 + 48) = v14; v8 = v13; *(_DWORD *)(v7 + 4 * v9 + 20) = v11; *(_DWORD *)(v7 + 4 * v9 + 60) = 0; } v13 = ++v8; } while ( v8 < 3 ); return HIBYTE(a3) != 0; } // BA3CA0: using guessed type int dword_BA3CA0[]; //----- (00806F90) -------------------------------------------------------- int __thiscall sub_806F90(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST08_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax unsigned int v7; // ebx _DWORD *v8; // esi int (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // edx int v10; // ST08_4 int result; // eax int v12; // eax int v13; // ST08_4 void (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // eax int v15; // eax char *v16; // [esp+Ch] [ebp-8h] int v17; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v16 = this; if ( *(_DWORD *)(a2 + 28) < 0xA010068u ) { v4 = *(_DWORD *)(a2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, &v17, 4, &a2, 1); } v7 = 0; v8 = v3 + 20; do { v9 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v10 = *(_DWORD *)(v2 + 352); a2 = 4; result = v9(v10, v8, 4, &a2, 1); if ( *v8 ) { v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v12 + 4); a2 = 4; v14(v13, &v17, 4, &a2, 1); v15 = v17; v8[3] = v17; v16[v7 + 44] = byte_BA3BE8[v15]; result = ((int (__cdecl *)(signed int, _DWORD))dword_BA4240[v15])(v2, *v8); v8[7] = result; } ++v7; ++v8; } while ( v7 < 3 ); return result; } // BA4240: using guessed type int dword_BA4240[]; //----- (00807050) -------------------------------------------------------- int __cdecl sub_807050(signed int a1, unsigned int a2) { unsigned int v2; // esi int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // edi int v7; // esi unsigned int v8; // ebx char *v9; // esi int v10; // [esp+1Ch] [ebp-4h] int v11; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = 72 * a2 | -(72 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v6 = a2 - 1; v10 = result; if ( (signed int)(a2 - 1) >= 0 ) { v7 = result + 20; do { sub_874B00((float *)(v7 - 16), 0.0, 0.0, 0.0, 0.0); *(_DWORD *)v7 = 0; *(_DWORD *)(v7 + 4) = 0; *(_DWORD *)(v7 + 8) = 0; *(_DWORD *)(v7 + 28) = 0; *(_DWORD *)(v7 + 32) = 0; *(_DWORD *)(v7 + 36) = 0; *(_DWORD *)(v7 + 12) = 0; *(_DWORD *)(v7 + 16) = 0; *(_DWORD *)(v7 + 20) = 0; *(_DWORD *)(v7 + 40) = 0; *(_DWORD *)(v7 + 44) = 0; *(_DWORD *)(v7 + 48) = 0; *(_WORD *)(v7 + 24) = 0; *(_BYTE *)(v7 + 26) = 0; v7 += 72; --v6; } while ( v6 >= 0 ); v2 = a2; result = v10; } v11 = result; } else { v11 = 0; result = 0; } if ( v2 > 0 ) { v8 = a2; v9 = (char *)result; do { sub_806F90(v9, a1); v9 += 72; --v8; } while ( v8 ); result = v11; } return result; } //----- (00807120) -------------------------------------------------------- signed int __cdecl sub_807120(int a1, int a2, int a3) { signed int result; // eax _DWORD *v4; // esi void (__cdecl *v5)(int, _DWORD *, signed int, int *, signed int); // edx int v6; // ST0C_4 int v7; // eax void (__cdecl *v8)(int, _DWORD *, signed int, int *, signed int); // edx bool v9; // zf int v10; // [esp+0h] [ebp-8h] int v11; // [esp+4h] [ebp-4h] int v12; // [esp+14h] [ebp+Ch] signed int v13; // [esp+18h] [ebp+10h] result = a3; if ( a3 ) { v4 = (_DWORD *)(a2 + 20); v12 = a2 + 20; v11 = a3; do { v13 = 3; do { v5 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v6 = *(_DWORD *)(a1 + 356); v10 = 4; v5(v6, v4, 4, &v10, 1); if ( *v4 ) { v7 = *(_DWORD *)(a1 + 356); v8 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); v10 = 4; v8(v7, v4 + 3, 4, &v10, 1); ((void (__cdecl *)(int, _DWORD, _DWORD))dword_BA3EE0[v4[3]])(a1, v4[7], *v4); } result = 1; ++v4; --v13; } while ( v13 ); v4 = (_DWORD *)(v12 + 72); v9 = v11-- == 1; v12 += 72; } while ( !v9 ); } return result; } // BA3EE0: using guessed type int dword_BA3EE0[]; //----- (008071E0) -------------------------------------------------------- signed int sub_8071E0() { signed int result; // eax result = 0; if ( !byte_BA3B94 ) { dword_BA41F0 = 0; dword_BA40D0 = 0; dword_BA4040 = 0; byte_BA3B94 = 1; dword_BA4280 = (int)sub_807050; dword_BA3F20 = (int)sub_807120; dword_BA3E90 = (int)sub_806CF0; dword_BA3E00 = (int)sub_806DB0; dword_BA3D70 = (int)sub_805340; byte_BA3BF8 = 72; dword_BA4160 = (int)sub_806B30; dword_BA3FB0 = (int)sub_806C40; dword_BA3C50 = (int)sub_806E50; dword_BA3CE0 = (int)sub_806E90; result = 1; } return result; } // BA3B94: using guessed type char byte_BA3B94; // BA3BF8: using guessed type char byte_BA3BF8; // BA3C50: using guessed type int dword_BA3C50; // BA3CE0: using guessed type int dword_BA3CE0; // BA3D70: using guessed type int dword_BA3D70; // BA3E00: using guessed type int dword_BA3E00; // BA3E90: using guessed type int dword_BA3E90; // BA3F20: using guessed type int dword_BA3F20; // BA3FB0: using guessed type int dword_BA3FB0; // BA4040: using guessed type int dword_BA4040; // BA40D0: using guessed type int dword_BA40D0; // BA4160: using guessed type int dword_BA4160; // BA41F0: using guessed type int dword_BA41F0; // BA4280: using guessed type int dword_BA4280; //----- (00807270) -------------------------------------------------------- int __cdecl sub_807270(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12); result = *(_DWORD *)(a2 + 16); *(_DWORD *)(a1 + 16) = result; return result; } //----- (008072A0) -------------------------------------------------------- float *__cdecl sub_8072A0(int a1, float a2, int a3) { float *result; // eax int v4; // ecx result = (float *)a1; *(_DWORD *)a1 = *(_DWORD *)a3; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a3 + 4); v4 = *(_DWORD *)(a3 + 12); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a1 + 12) = v4; *result = *result * a2; result[1] = a2 * result[1]; result[2] = result[2] * a2; *(float *)(a1 + 12) = a2 * *(float *)(a1 + 12); return result; } //----- (008072F0) -------------------------------------------------------- int __cdecl sub_8072F0(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax int v3; // edx int result; // eax int v5; // ecx v1 = 20 * a1 | -(20 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; v3 = a1 - 1; result = (int)(v2 + 1); if ( (signed int)(a1 - 1) >= 0 ) { v5 = result + 12; do { *(float *)(v5 - 8) = 0.0; v5 += 20; --v3; *(float *)(v5 - 24) = 0.0; *(float *)(v5 - 20) = 0.0; *(float *)(v5 - 16) = 0.0; } while ( v3 >= 0 ); } return result; } //----- (00807350) -------------------------------------------------------- int __cdecl sub_807350(float a1, int a2, int a3, int a4) { double v4; // st7 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST18_4 float v8; // ST1C_4 float v9; // ST20_4 float v10; // ST24_4 float v11; // ST28_4 float v12; // ST2C_4 int result; // eax float v14; // ST00_4 float v15; // ST04_4 float v16; // ST08_4 float v17; // ST0C_4 float v18; // [esp+38h] [ebp+8h] v4 = a1; v18 = 1.0 - a1; v5 = *(float *)(a2 + 4) * v18; v6 = *(float *)(a2 + 8) * v18; v7 = *(float *)(a2 + 12) * v18; v8 = v18 * *(float *)(a2 + 16); v9 = *(float *)(a3 + 4) * v4; v10 = *(float *)(a3 + 8) * v4; v11 = *(float *)(a3 + 12) * v4; v12 = v4 * *(float *)(a3 + 16); result = a4; v14 = v9 + v5; *(float *)a4 = v14; v15 = v10 + v6; *(float *)(a4 + 4) = v15; v16 = v11 + v7; *(float *)(a4 + 8) = v16; v17 = v12 + v8; *(float *)(a4 + 12) = v17; return result; } //----- (00807440) -------------------------------------------------------- char *__cdecl sub_807440(signed int a1, unsigned int a2) { unsigned int v2; // edi int v3; // ecx unsigned int *v4; // eax int v5; // ecx int v6; // edx int v7; // eax char *result; // eax char *v9; // esi int v10; // [esp+10h] [ebp+Ch] v2 = a2; v3 = 20 * a2 | -(20 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { v5 = a2 - 1; *v4 = a2; v6 = (int)(v4 + 1); if ( (signed int)(a2 - 1) >= 0 ) { v7 = (int)(v4 + 4); do { *(float *)(v7 - 8) = 0.0; v7 += 20; --v5; *(float *)(v7 - 24) = 0.0; *(float *)(v7 - 20) = 0.0; *(float *)(v7 - 16) = 0.0; } while ( v5 >= 0 ); } result = (char *)v6; v10 = v6; } else { v10 = 0; result = 0; } if ( v2 ) { v9 = result; do { sub_8066A0(v9, a1); v9 += 20; --v2; } while ( v2 ); result = (char *)v10; } return result; } //----- (008074D0) -------------------------------------------------------- char __cdecl sub_8074D0(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax int v7; // edi int v8; // ecx int v9; // eax char *v10; // edi int v11; // eax int v13; // [esp+20h] [ebp-14h] int v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] int v16; // [esp+2Ch] [ebp-8h] int v17; // [esp+30h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v17, 20) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 20 * v4 | -(20 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = v4 - 1; v8 = (int)(v6 + 1); if ( v7 >= 0 ) { v9 = (int)(v6 + 4); do { *(float *)(v9 - 8) = 0.0; v9 += 20; --v7; *(float *)(v9 - 24) = 0.0; *(float *)(v9 - 20) = 0.0; *(float *)(v9 - 16) = 0.0; } while ( v7 >= 0 ); } v10 = (char *)v8; } else { v10 = 0; } memcpy_s(v10, 4 * (5 * *(_DWORD *)a3 + 5), v3, 20 * v17); if ( *(_DWORD *)a3 > (unsigned int)v17 ) memcpy_s(&v10[20 * v17 + 20], 20 * (*(_DWORD *)a3 - v17), &v3[20 * v17], 20 * (*(_DWORD *)a3 - v17)); sub_806930((int)&v13, a1, (int)v3, 1, *(_DWORD *)a3, 20); v11 = (int)&v10[20 * v17]; *(float *)v11 = a1; *(_DWORD *)(v11 + 4) = v13; *(_DWORD *)(v11 + 8) = v14; *(_DWORD *)(v11 + 12) = v15; *(_DWORD *)(v11 + 16) = v16; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v10; return 1; } //----- (00807610) -------------------------------------------------------- signed int sub_807610() { signed int result; // eax result = 0; if ( !byte_BA3B95 ) { dword_BA41FC = 0; dword_BA40DC = 0; dword_BA404C = 0; dword_BA3C5C = 0; byte_BA3B95 = 1; dword_BA428C = (int)sub_807440; dword_BA3F2C = (int)sub_809EC0; dword_BA3E9C = (int)sub_807270; dword_BA3E0C = (int)sub_8072F0; dword_BA3D7C = (int)sub_805340; byte_BA3BFB = 20; dword_BA416C = (int)sub_807350; dword_BA3FBC = (int)sub_809E70; dword_BA3CEC = (int)sub_8074D0; result = 1; } return result; } // BA3B95: using guessed type char byte_BA3B95; // BA3BFB: using guessed type char byte_BA3BFB; // BA3C5C: using guessed type int dword_BA3C5C; // BA3CEC: using guessed type int dword_BA3CEC; // BA3D7C: using guessed type int dword_BA3D7C; // BA3E0C: using guessed type int dword_BA3E0C; // BA3E9C: using guessed type int dword_BA3E9C; // BA3F2C: using guessed type int dword_BA3F2C; // BA3FBC: using guessed type int dword_BA3FBC; // BA404C: using guessed type int dword_BA404C; // BA40DC: using guessed type int dword_BA40DC; // BA416C: using guessed type int dword_BA416C; // BA41FC: using guessed type int dword_BA41FC; // BA428C: using guessed type int dword_BA428C; //----- (008076A0) -------------------------------------------------------- BOOL __cdecl sub_8076A0(float *a1, float *a2) { return sub_803D80(a1, a2); } //----- (008076B0) -------------------------------------------------------- float *__cdecl sub_8076B0(float *a1, float *a2) { float *result; // eax result = a2; *a1 = *a2; a1[1] = a2[1]; return result; } //----- (008076D0) -------------------------------------------------------- int __cdecl sub_8076D0(float a1, int a2, int a3, int a4) { int result; // eax *(float *)a4 = sub_8174C0(a1, *(float *)(a2 + 4), *(float *)(a3 + 4)); return result; } //----- (00807710) -------------------------------------------------------- int __cdecl sub_807710(signed int a1, unsigned int a2) { unsigned int v2; // edi int v3; // ecx unsigned int *v4; // eax int result; // eax char *v6; // esi int v7; // [esp+10h] [ebp+Ch] v2 = a2; v3 = 8 * a2 | -((unsigned __int64)a2 >> 29 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v7 = result; } else { v7 = 0; result = 0; } if ( v2 ) { v6 = (char *)result; do { sub_8040B0(v6, a1); v6 += 8; --v2; } while ( v2 ); result = v7; } return result; } //----- (00807780) -------------------------------------------------------- int __cdecl sub_807780(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_8040F0(a1, v4); v4 += 8; --v3; } while ( v3 ); } return result; } //----- (008077B0) -------------------------------------------------------- char __cdecl sub_8077B0(float a1, int a2, int a3) { char *v3; // edi int v4; // ebx int v5; // ecx int *v6; // eax char *v7; // ebx float v8; // ST20_4 float *v9; // eax int v11; // [esp+24h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v11, 8) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 8 * v4 | -((unsigned __int64)(unsigned int)v4 >> 29 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 8 * *(_DWORD *)a3 + 8, v3, 8 * v11); if ( *(_DWORD *)a3 > (unsigned int)v11 ) memcpy_s(&v7[8 * v11 + 8], 8 * (*(_DWORD *)a3 - v11), &v3[8 * v11], 8 * (*(_DWORD *)a3 - v11)); v8 = sub_803FA0(a1, (int)v3, 1, *(_DWORD *)a3, 8); v9 = (float *)&v7[8 * v11]; *v9 = a1; v9[1] = v8; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; return 1; } //----- (008078B0) -------------------------------------------------------- signed int sub_8078B0() { signed int result; // eax result = 0; if ( !byte_BA3B96 ) { dword_BA41B4 = 0; dword_BA4094 = 0; dword_BA4004 = 0; byte_BA3B96 = 1; dword_BA4244 = (int)sub_807710; dword_BA3EE4 = (int)sub_807780; dword_BA3E54 = (int)sub_8076B0; dword_BA3DC4 = (int)sub_809C30; dword_BA3D34 = (int)sub_805340; byte_BA3BE9 = 8; dword_BA4124 = (int)sub_8076D0; dword_BA3F74 = (int)sub_8076A0; dword_BA3C14 = (int)nullsub_6; dword_BA3CA4 = (int)sub_8077B0; result = 1; } return result; } // BA3B96: using guessed type char byte_BA3B96; // BA3BE9: using guessed type char byte_BA3BE9; // BA3C14: using guessed type int dword_BA3C14; // BA3CA4: using guessed type int dword_BA3CA4; // BA3D34: using guessed type int dword_BA3D34; // BA3DC4: using guessed type int dword_BA3DC4; // BA3E54: using guessed type int dword_BA3E54; // BA3EE4: using guessed type int dword_BA3EE4; // BA3F74: using guessed type int dword_BA3F74; // BA4004: using guessed type int dword_BA4004; // BA4094: using guessed type int dword_BA4094; // BA4124: using guessed type int dword_BA4124; // BA41B4: using guessed type int dword_BA41B4; // BA4244: using guessed type int dword_BA4244; //----- (00807940) -------------------------------------------------------- BOOL __cdecl sub_807940(float *a1, float *a2) { return sub_8048D0(a1, a2); } //----- (00807950) -------------------------------------------------------- int __cdecl sub_807950(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax v1 = 16 * a1 | -((unsigned __int64)a1 >> 28 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; return (int)(v2 + 1); } //----- (00807990) -------------------------------------------------------- int __cdecl sub_807990(float a1, int a2, int a3, int a4) { float *v4; // eax float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST1C_4 int result; // eax float v11; // ST20_4 float v12; // ST00_4 float v13; // ST04_4 float v14; // ST08_4 float v15; // [esp+30h] [ebp+Ch] v4 = (float *)a2; v15 = 1.0 - a1; v5 = v4[1] * v15; v6 = v4[2] * v15; v7 = v15 * v4[3]; v8 = *(float *)(a3 + 4) * a1; v9 = *(float *)(a3 + 8) * a1; result = a4; v11 = a1 * *(float *)(a3 + 12); v12 = v8 + v5; *(float *)a4 = v12; v13 = v6 + v9; *(float *)(a4 + 4) = v13; v14 = v11 + v7; *(float *)(a4 + 8) = v14; return result; } //----- (00807A10) -------------------------------------------------------- float *__cdecl sub_807A10(int a1, float *a2, float *a3, float *a4) { float v4; // ST00_4 float v5; // ST04_4 double v6; // st7 float *result; // eax float v8; // ST08_4 v4 = a3[1] - a2[1]; v5 = a3[2] - a2[2]; v6 = a3[3] - a2[3]; result = a4; *a4 = v4; a4[1] = v5; v8 = v6; a4[2] = v8; return result; } //----- (00807A50) -------------------------------------------------------- char __cdecl sub_807A50(float a1, int a2, int a3) { char *v3; // edi int v4; // ebx int v5; // ecx int *v6; // eax char *v7; // ebx int v8; // eax int v10; // [esp+20h] [ebp-10h] int v11; // [esp+24h] [ebp-Ch] int v12; // [esp+28h] [ebp-8h] int v13; // [esp+2Ch] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v13, 16) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 16 * v4 | -((unsigned __int64)(unsigned int)v4 >> 28 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 16 * (*(_DWORD *)a3 + 1), v3, 16 * v13); if ( *(_DWORD *)a3 > (unsigned int)v13 ) memcpy_s(&v7[16 * v13 + 16], 16 * (*(_DWORD *)a3 - v13), &v3[16 * v13], 16 * (*(_DWORD *)a3 - v13)); sub_804810((int)&v10, a1, (int)v3, 1, *(_DWORD *)a3, 16); v8 = (int)&v7[16 * v13]; *(float *)v8 = a1; *(_DWORD *)(v8 + 4) = v10; *(_DWORD *)(v8 + 8) = v11; *(_DWORD *)(v8 + 12) = v12; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; return 1; } //----- (00807B60) -------------------------------------------------------- signed int sub_807B60() { signed int result; // eax if ( byte_BA3B97 ) return 0; result = 1; byte_BA3B97 = 1; dword_BA425C = (int)sub_80A330; dword_BA3EFC = (int)sub_80A3A0; dword_BA3E6C = (int)sub_80A290; dword_BA3DDC = (int)sub_807950; dword_BA3D4C = (int)sub_805340; byte_BA3BEF = 16; dword_BA41CC = (int)sub_80A280; dword_BA413C = (int)sub_807990; dword_BA40AC = (int)sub_807A10; dword_BA401C = (int)sub_8045F0; dword_BA3F8C = (int)sub_807940; dword_BA3C2C = (int)nullsub_6; dword_BA3CBC = (int)sub_807A50; return result; } // BA3B97: using guessed type char byte_BA3B97; // BA3BEF: using guessed type char byte_BA3BEF; // BA3C2C: using guessed type int dword_BA3C2C; // BA3CBC: using guessed type int dword_BA3CBC; // BA3D4C: using guessed type int dword_BA3D4C; // BA3DDC: using guessed type int dword_BA3DDC; // BA3E6C: using guessed type int dword_BA3E6C; // BA3EFC: using guessed type int dword_BA3EFC; // BA3F8C: using guessed type int dword_BA3F8C; // BA401C: using guessed type int dword_BA401C; // BA40AC: using guessed type int dword_BA40AC; // BA413C: using guessed type int dword_BA413C; // BA41CC: using guessed type int dword_BA41CC; // BA425C: using guessed type int dword_BA425C; //----- (00807C00) -------------------------------------------------------- int __cdecl sub_807C00(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax int v3; // edi int v4; // ebx float *v5; // esi v1 = 20 * a1 | -(20 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; v3 = a1 - 1; *v2 = a1; v4 = (int)(v2 + 1); if ( (signed int)(a1 - 1) >= 0 ) { v5 = (float *)(v2 + 2); do { sub_874B00(v5, 0.0, 0.0, 0.0, 0.0); v5 += 5; --v3; } while ( v3 >= 0 ); } return v4; } //----- (00807C70) -------------------------------------------------------- int __cdecl sub_807C70(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int result; // eax int v6; // [esp+Ch] [ebp-10h] v4 = (_DWORD *)sub_878350((int)&v6, a1, a2 + 4, a3 + 4); *(_DWORD *)a4 = *v4; *(_DWORD *)(a4 + 4) = v4[1]; *(_DWORD *)(a4 + 8) = v4[2]; result = v4[3]; *(_DWORD *)(a4 + 12) = result; return result; } //----- (00807CC0) -------------------------------------------------------- char __cdecl sub_807CC0(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax int v7; // eax float *v8; // edi char *v9; // edi int v10; // eax int v12; // [esp+20h] [ebp-1Ch] int v13; // [esp+24h] [ebp-18h] int v14; // [esp+28h] [ebp-14h] int v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+30h] [ebp-Ch] int v17; // [esp+34h] [ebp-8h] int v18; // [esp+38h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v18, 20) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 20 * v4 | -(20 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (int)(v6 + 1); v16 = v7; v17 = v4 - 1; if ( v4 - 1 >= 0 ) { v8 = (float *)(v7 + 4); do { sub_874B00(v8, 0.0, 0.0, 0.0, 0.0); v8 += 5; --v17; } while ( v17 >= 0 ); v7 = v16; } v9 = (char *)v7; } else { v9 = 0; } memcpy_s(v9, 4 * (5 * *(_DWORD *)a3 + 5), v3, 20 * v18); if ( *(_DWORD *)a3 > (unsigned int)v18 ) memcpy_s(&v9[20 * v18 + 20], 20 * (*(_DWORD *)a3 - v18), &v3[20 * v18], 20 * (*(_DWORD *)a3 - v18)); sub_805A30((int)&v12, a1, (int)v3, 1, *(_DWORD *)a3, 20); v10 = (int)&v9[20 * v18]; *(float *)v10 = a1; *(_DWORD *)(v10 + 4) = v12; *(_DWORD *)(v10 + 8) = v13; *(_DWORD *)(v10 + 12) = v14; *(_DWORD *)(v10 + 16) = v15; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v9; sub_805B00((int)v9, *(_DWORD *)a3, 0x14u); return 1; } //----- (00807E20) -------------------------------------------------------- signed int sub_807E20() { signed int result; // eax result = 0; if ( !byte_BA3B98 ) { dword_BA41E4 = 0; dword_BA40C4 = 0; dword_BA4034 = 0; byte_BA3B98 = 1; dword_BA4274 = (int)sub_80A590; dword_BA3F14 = (int)sub_80A630; dword_BA3E84 = (int)sub_807270; dword_BA3DF4 = (int)sub_807C00; dword_BA3D64 = (int)sub_805340; byte_BA3BF5 = 20; dword_BA4154 = (int)sub_807C70; dword_BA3FA4 = (int)sub_809E70; dword_BA3C44 = (int)sub_80A580; dword_BA3CD4 = (int)sub_807CC0; result = 1; } return result; } // BA3B98: using guessed type char byte_BA3B98; // BA3BF5: using guessed type char byte_BA3BF5; // BA3C44: using guessed type int dword_BA3C44; // BA3CD4: using guessed type int dword_BA3CD4; // BA3D64: using guessed type int dword_BA3D64; // BA3DF4: using guessed type int dword_BA3DF4; // BA3E84: using guessed type int dword_BA3E84; // BA3F14: using guessed type int dword_BA3F14; // BA3FA4: using guessed type int dword_BA3FA4; // BA4034: using guessed type int dword_BA4034; // BA40C4: using guessed type int dword_BA40C4; // BA4154: using guessed type int dword_BA4154; // BA41E4: using guessed type int dword_BA41E4; // BA4274: using guessed type int dword_BA4274; //----- (00807EB0) -------------------------------------------------------- int __cdecl sub_807EB0(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12); *(float *)(a1 + 16) = *(float *)(a2 + 16); *(float *)(a1 + 20) = *(float *)(a2 + 20); *(float *)(a1 + 24) = *(float *)(a2 + 24); *(_DWORD *)(a1 + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(a1 + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 48); *(_DWORD *)(a1 + 52) = *(_DWORD *)(a2 + 52); *(_DWORD *)(a1 + 56) = *(_DWORD *)(a2 + 56); *(_DWORD *)(a1 + 60) = *(_DWORD *)(a2 + 60); *(_DWORD *)(a1 + 64) = *(_DWORD *)(a2 + 64); *(_DWORD *)(a1 + 68) = *(_DWORD *)(a2 + 68); result = *(_DWORD *)(a2 + 72); *(_DWORD *)(a1 + 72) = result; return result; } //----- (00807F30) -------------------------------------------------------- BOOL __cdecl sub_807F30(float *a1, float *a2) { BOOL result; // eax result = sub_8048D0(a1, a2); if ( (_BYTE)result ) result = a2[4] == a1[4] && a2[5] == a1[5] && a2[6] == a1[6] && (unsigned __int8)sub_4A37E0(a1 + 7, a2 + 7) && (unsigned __int8)sub_4A37E0(a1 + 10, a2 + 10) && (unsigned __int8)sub_4A37E0(a1 + 13, a2 + 13) && (unsigned __int8)sub_4A37E0(a1 + 16, a2 + 16); return result; } //----- (00807FD0) -------------------------------------------------------- int __cdecl sub_807FD0(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax v1 = 76 * a1 | -(76 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; return (int)(v2 + 1); } //----- (00808010) -------------------------------------------------------- int __cdecl sub_808010(float a1, int a2, int a3, int a4) { float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST00_4 float v8; // ST04_4 float v9; // ST08_4 float v10; // ST0C_4 float v11; // ST10_4 float v12; // ST14_4 float v13; // ST00_4 float v14; // ST04_4 float v15; // ST08_4 float v16; // ST0C_4 float v17; // ST10_4 float v18; // ST14_4 float v19; // ST00_4 float v20; // ST04_4 int result; // eax double v22; // st7 float v23; // ST08_4 v4 = *(float *)(a2 + 64) * a1; v5 = *(float *)(a2 + 68) * a1; v6 = *(float *)(a2 + 72) * a1; v7 = *(float *)(a2 + 52) + v4; v8 = *(float *)(a2 + 56) + v5; v9 = *(float *)(a2 + 60) + v6; v10 = v7 * a1; v11 = v8 * a1; v12 = v9 * a1; v13 = *(float *)(a2 + 40) + v10; v14 = *(float *)(a2 + 44) + v11; v15 = *(float *)(a2 + 48) + v12; v16 = v13 * a1; v17 = v14 * a1; v18 = a1 * v15; v19 = *(float *)(a2 + 4) + v16; v20 = *(float *)(a2 + 8) + v17; result = a4; v22 = *(float *)(a2 + 12) + v18; *(float *)a4 = v19; *(float *)(a4 + 4) = v20; v23 = v22; *(float *)(a4 + 8) = v23; return result; } //----- (008080D0) -------------------------------------------------------- int __cdecl sub_8080D0(float a1, int a2, int a3, int a4) { double v4; // st7 float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST20_4 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float v14; // ST0C_4 float v15; // ST10_4 float v16; // ST14_4 float v17; // ST00_4 float v18; // ST04_4 int result; // eax double v20; // st7 float v21; // ST08_4 float v22; // [esp+2Ch] [ebp+8h] v4 = a1; v22 = 3.0 * a1; v5 = *(float *)(a2 + 64) * v22; v6 = *(float *)(a2 + 68) * v22; v7 = v22 * *(float *)(a2 + 72); v8 = *(float *)(a2 + 52) * 2.0; v9 = *(float *)(a2 + 56) * 2.0; v10 = 2.0 * *(float *)(a2 + 60); v11 = v8 + v5; v12 = v9 + v6; v13 = v10 + v7; v14 = v11 * v4; v15 = v12 * v4; v16 = v4 * v13; v17 = *(float *)(a2 + 40) + v14; v18 = *(float *)(a2 + 44) + v15; result = a4; v20 = *(float *)(a2 + 48) + v16; *(float *)a4 = v17; *(float *)(a4 + 4) = v18; v21 = v20; *(float *)(a4 + 8) = v21; return result; } //----- (00808190) -------------------------------------------------------- int __cdecl sub_808190(float a1, int a2, int a3, int a4) { float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST18_4 float v8; // ST1C_4 int result; // eax float v10; // ST20_4 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float v14; // [esp+2Ch] [ebp+8h] v14 = a1 * 6.0; v4 = *(float *)(a2 + 64) * v14; v5 = *(float *)(a2 + 68) * v14; v6 = v14 * *(float *)(a2 + 72); v7 = *(float *)(a2 + 52) * 2.0; v8 = *(float *)(a2 + 56) * 2.0; result = a4; v10 = 2.0 * *(float *)(a2 + 60); v11 = v7 + v4; *(float *)a4 = v11; v12 = v5 + v8; *(float *)(a4 + 4) = v12; v13 = v10 + v6; *(float *)(a4 + 8) = v13; return result; } //----- (00808220) -------------------------------------------------------- int __thiscall sub_808220(float *this, int a2, int a3, float a4, float a5) { float v5; // ST24_4 float v6; // ST28_4 float v7; // ST2C_4 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST20_4 float v11; // ST30_4 float v12; // ST34_4 double v13; // st6 float v14; // ST34_4 double v15; // st6 float v16; // ST30_4 double v17; // st5 float v18; // ST0C_4 double v19; // st3 float v20; // ST10_4 double v21; // st4 float v22; // ST14_4 float v23; // ST30_4 float v24; // ST18_4 float v25; // ST1C_4 float v26; // ST20_4 float v27; // ST00_4 float v28; // ST04_4 float v29; // ST08_4 float v30; // ST0C_4 float v31; // ST10_4 float v32; // ST14_4 float v33; // ST00_4 float v34; // ST04_4 float v35; // ST08_4 float v36; // ST18_4 float v37; // ST1C_4 int result; // eax float v39; // ST20_4 double v40; // st7 float v41; // [esp+40h] [ebp+8h] float v42; // [esp+40h] [ebp+8h] float v43; // [esp+40h] [ebp+8h] float v44; // [esp+40h] [ebp+8h] float v45; // [esp+40h] [ebp+8h] float v46; // [esp+40h] [ebp+8h] float v47; // [esp+40h] [ebp+8h] float v48; // [esp+40h] [ebp+8h] float v49; // [esp+44h] [ebp+Ch] v5 = this[1] - *(float *)a2; v6 = this[2] - *(float *)(a2 + 4); v7 = this[3] - *(float *)(a2 + 8); v8 = *(float *)a3 - this[1]; v9 = *(float *)(a3 + 4) - this[2]; v10 = *(float *)(a3 + 8) - this[3]; v49 = this[6] + 1.0; v11 = 1.0 - this[6]; v12 = (1.0 - this[4]) * 0.5; v41 = this[5] + 1.0; v13 = v12; v14 = v41 * v12; v42 = 1.0 - this[5]; v43 = v13 * v42; v15 = v11; v16 = v14 * v11; v17 = v8; v18 = v8 * v16; v19 = v9; v20 = v9 * v16; v21 = v10; v22 = v16 * v10; v23 = v43 * v49; v24 = v23 * v5; v25 = v6 * v23; v26 = v23 * v7; v27 = v24 + v18; this[7] = v27; v28 = v25 + v20; this[8] = v28; v29 = v26 + v22; this[9] = v29; v44 = v15 * v43; v30 = v17 * v44; v31 = v19 * v44; v32 = v44 * v21; v45 = v14 * v49; v33 = v5 * v45; v34 = v6 * v45; v35 = v7 * v45; v36 = v33 + v30; this[10] = v36; v37 = v34 + v31; result = LODWORD(v37); this[11] = v37; v39 = v35 + v32; this[12] = v39; v46 = 2.0 / (a4 + a5); v40 = v46; v47 = a4 * v46; this[7] = this[7] * v47; this[8] = v47 * this[8]; this[9] = v47 * this[9]; v48 = v40 * a5; this[10] = v48 * this[10]; this[11] = v48 * this[11]; this[12] = v48 * this[12]; return result; } //----- (00808410) -------------------------------------------------------- float *__cdecl sub_808410(float *a1, unsigned int a2) { float *result; // eax double v3; // st7 float *v4; // edi unsigned int v5; // ebx int v6; // esi float v7; // ST0C_4 float *v8; // ecx int v9; // eax double v10; // st7 int v11; // eax double v12; // st5 double v13; // st5 double v14; // st5 double v15; // st5 int v16; // [esp+14h] [ebp-70h] float v17; // [esp+18h] [ebp-6Ch] float v18; // [esp+1Ch] [ebp-68h] float v19; // [esp+20h] [ebp-64h] float v20; // [esp+24h] [ebp-60h] float v21; // [esp+28h] [ebp-5Ch] float v22; // [esp+2Ch] [ebp-58h] float v23; // [esp+30h] [ebp-54h] float v24; // [esp+34h] [ebp-50h] float v25; // [esp+38h] [ebp-4Ch] float v26; // [esp+3Ch] [ebp-48h] float v27; // [esp+40h] [ebp-44h] float v28; // [esp+44h] [ebp-40h] float v29; // [esp+48h] [ebp-3Ch] float v30; // [esp+4Ch] [ebp-38h] float v31; // [esp+50h] [ebp-34h] float v32; // [esp+54h] [ebp-30h] float v33; // [esp+58h] [ebp-2Ch] float v34; // [esp+5Ch] [ebp-28h] float v35; // [esp+60h] [ebp-24h] float v36; // [esp+64h] [ebp-20h] float v37; // [esp+68h] [ebp-1Ch] float v38; // [esp+6Ch] [ebp-18h] float v39; // [esp+70h] [ebp-14h] float v40; // [esp+74h] [ebp-10h] float v41; // [esp+78h] [ebp-Ch] float v42; // [esp+7Ch] [ebp-8h] float v43; // [esp+80h] [ebp-4h] int v44; // [esp+8Ch] [ebp+8h] result = (float *)a2; v3 = 2.0; v4 = a1; v5 = a2 - 1; if ( a2 >= 2 ) { v6 = (int)(a1 + 1); v40 = a1[1] * 2.0; v41 = a1[2] * 2.0; v42 = 2.0 * a1[3]; *(float *)&v16 = v40 - a1[20]; v17 = v41 - a1[21]; v18 = v42 - a1[22]; sub_808220(a1, (int)&v16, (int)(a1 + 20), 1.0, 1.0); if ( v5 > 1 ) { v44 = a2 - 2; do { v43 = *(float *)(v6 + 148) - *(float *)(v6 + 72); v7 = v43; v43 = *(float *)(v6 + 72) - *(float *)(v6 - 4); sub_808220((float *)(v6 + 72), v6, v6 + 152, v43, v7); v6 += 76; --v44; } while ( v44 ); } v40 = v4[19 * v5 + 1] * 2.0; v8 = &v4[19 * v5]; v9 = 19 * (a2 - 2); v41 = v4[19 * v5 + 2] * 2.0; v42 = 2.0 * v8[3]; v10 = v40 - v4[v9 + 1]; v11 = (int)&v4[v9 + 1]; *(float *)&v16 = v10; v17 = v41 - *(float *)(v11 + 4); v18 = v42 - *(float *)(v11 + 8); result = (float *)sub_808220(v8, v11, (int)&v16, 1.0, 1.0); v3 = 2.0; } if ( a2 != 1 ) { result = v4 + 22; do { v40 = *(result - 12) * v3; v41 = *(result - 11) * v3; v42 = *(result - 10) * v3; v31 = result[4] + v40; v32 = result[5] + v41; v33 = result[6] + v42; v37 = *(result - 2) - *(result - 21); v38 = *(result - 1) - *(result - 20); v39 = *result - *(result - 19); v34 = v37 * 3.0; v35 = v38 * 3.0; v36 = v39 * 3.0; v28 = v34 - v31; v12 = v35; *(result - 9) = v28; v29 = v12 - v32; v13 = v36; *(result - 8) = v29; v30 = v13 - v33; *(result - 7) = v30; v25 = *(result - 2) - *(result - 21); v26 = *(result - 1) - *(result - 20); v27 = *result - *(result - 19); v19 = v25 * v3; v20 = v26 * v3; v21 = v27 * v3; v22 = result[4] + *(result - 12); v23 = result[5] + *(result - 11); v24 = result[6] + *(result - 10); *(float *)&v16 = v22 - v19; v14 = v23 - v20; *(result - 6) = *(float *)&v16; result += 19; --v5; v17 = v14; v15 = v24; *(result - 24) = v17; v18 = v15 - v21; *(result - 23) = v18; } while ( v5 ); } return result; } //----- (00808670) -------------------------------------------------------- double __cdecl sub_808670(int a1, int a2) { int v2; // esi int v3; // eax float *v4; // esi int v5; // edi double v6; // st7 int v8; // [esp+1Ch] [ebp-58h] float v9; // [esp+20h] [ebp-54h] float v10; // [esp+24h] [ebp-50h] float v11; // [esp+28h] [ebp-4Ch] float v12; // [esp+2Ch] [ebp-48h] float v13; // [esp+30h] [ebp-44h] float v14; // [esp+34h] [ebp-40h] float v15; // [esp+38h] [ebp-3Ch] float v16; // [esp+3Ch] [ebp-38h] float v17; // [esp+40h] [ebp-34h] float v18; // [esp+44h] [ebp-30h] float v19; // [esp+48h] [ebp-2Ch] float v20; // [esp+4Ch] [ebp-28h] float v21; // [esp+50h] [ebp-24h] float v22; // [esp+54h] [ebp-20h] double v23; // [esp+58h] [ebp-1Ch] double v24; // [esp+60h] [ebp-14h] double v25; // [esp+68h] [ebp-Ch] float v26; // [esp+70h] [ebp-4h] int v27; // [esp+7Ch] [ebp+8h] signed int v28; // [esp+80h] [ebp+Ch] float v29; // [esp+80h] [ebp+Ch] float v30; // [esp+80h] [ebp+Ch] float v31; // [esp+80h] [ebp+Ch] float v32; // [esp+80h] [ebp+Ch] float v33; // [esp+80h] [ebp+Ch] float v34; // [esp+80h] [ebp+Ch] v26 = 0.0; if ( a2 != 1 ) { v2 = a1; v27 = a2 - 1; v3 = dword_ABBE7C; v4 = (float *)(v2 + 72); do { v5 = 0; v28 = 0; if ( v3 >= 0 ) { do { v29 = (double)v28 * flt_BA3B5C; sub_8080D0(v29, (int)(v4 - 18), (int)(v4 + 1), (int)&v8); v30 = v29 * 6.0; v17 = *(v4 - 2) * v30; v18 = *(v4 - 1) * v30; v19 = v30 * *v4; v20 = *(v4 - 5) * 2.0; v21 = *(v4 - 4) * 2.0; v22 = 2.0 * *(v4 - 3); v14 = v20 + v17; v15 = v21 + v18; v16 = v22 + v19; v11 = v9 * v16 - v10 * v15; v12 = v10 * v14 - v16 * *(float *)&v8; v13 = v15 * *(float *)&v8 - v14 * v9; v24 = v9; v25 = *(float *)&v8; v23 = v10; v31 = v13 * v13 + v11 * v11 + v12 * v12; v32 = sqrt(v31); v6 = v32; v33 = v25 * v25 + v24 * v24 + v23 * v23; v34 = v6 / v33; if ( v26 < (double)v34 ) v26 = v34; v3 = dword_ABBE7C; v28 = ++v5; } while ( v5 <= dword_ABBE7C ); } v4 += 19; --v27; } while ( v27 ); } return v26; } // ABBE7C: using guessed type int dword_ABBE7C; // BA3B5C: using guessed type float flt_BA3B5C; //----- (00808810) -------------------------------------------------------- char __cdecl sub_808810(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax char *v7; // edi int v8; // eax int v9; // eax int v11; // [esp+20h] [ebp-10h] int v12; // [esp+24h] [ebp-Ch] int v13; // [esp+28h] [ebp-8h] int v14; // [esp+2Ch] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v14, 76) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 76 * v4 | -(76 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 76 * (*(_DWORD *)a3 + 1), v3, 76 * v14); if ( *(_DWORD *)a3 > (unsigned int)v14 ) memcpy_s(&v7[76 * v14 + 76], 76 * (*(_DWORD *)a3 - v14), &v3[76 * v14], 76 * (*(_DWORD *)a3 - v14)); sub_804810((int)&v11, a1, (int)v3, 3, *(_DWORD *)a3, 76); v8 = 76 * v14; *(float *)&v7[v8] = a1; v9 = (int)&v7[v8]; *(_DWORD *)(v9 + 4) = v11; *(_DWORD *)(v9 + 8) = v12; *(_DWORD *)(v9 + 12) = v13; *(float *)(v9 + 16) = 0.0; *(float *)(v9 + 20) = 0.0; *(float *)(v9 + 24) = 0.0; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; sub_808410((float *)v7, *(_DWORD *)a3); return 1; } //----- (00808940) -------------------------------------------------------- int __cdecl sub_808940(int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // esi int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int, signed int, int *, signed int); // eax void (__cdecl *v10)(int, int, signed int, int *, signed int); // edx int v11; // ST14_4 int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int, signed int, int *, signed int); // eax int v15; // [esp+4h] [ebp-4h] int v16; // [esp+14h] [ebp+Ch] v2 = a2; v3 = 76 * a2 | -(76 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v16 = result; } else { v16 = 0; result = 0; } if ( v2 ) { v6 = result + 20; do { sub_8045A0(a1); v7 = *(_DWORD *)(a1 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v7 + 4); v15 = 4; v9(v8, v6 - 4, 4, &v15, 1); v10 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a1 + 352) + 4); v11 = *(_DWORD *)(a1 + 352); v15 = 4; v10(v11, v6, 4, &v15, 1); v12 = *(_DWORD *)(a1 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v12 + 4); v15 = 4; v14(v13, v6 + 4, 4, &v15, 1); v6 += 76; --v2; } while ( v2 ); result = v16; } return result; } // 8045A0: using guessed type _DWORD __stdcall sub_8045A0(_DWORD); //----- (00808A10) -------------------------------------------------------- int __cdecl sub_808A10(signed int a1, signed int a2, int a3) { int result; // eax int v4; // esi int v5; // eax int v6; // ST28_4 void (__cdecl *v7)(int, int, signed int, signed int *, signed int); // eax void (__cdecl *v8)(int, int, signed int, signed int *, signed int); // edx int v9; // ST14_4 int v10; // eax int v11; // ST00_4 int (__cdecl *v12)(int, int, signed int, signed int *, signed int); // eax result = a3; if ( a3 ) { v4 = a2 + 20; do { sub_8045C0(a1, v4 - 20); v5 = *(_DWORD *)(a1 + 356); v6 = v5; v7 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(v5 + 8); a2 = 4; v7(v6, v4 - 4, 4, &a2, 1); v8 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v9 = *(_DWORD *)(a1 + 356); a2 = 4; v8(v9, v4, 4, &a2, 1); v10 = *(_DWORD *)(a1 + 356); v11 = v10; v12 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v10 + 8); a2 = 4; result = v12(v11, v4 + 4, 4, &a2, 1); v4 += 76; --a3; } while ( a3 ); } return result; } //----- (00808AA0) -------------------------------------------------------- signed int sub_808AA0() { signed int result; // eax if ( byte_BA3B99 ) return 0; result = 1; byte_BA3B99 = 1; dword_BA4264 = (int)sub_808940; dword_BA3F04 = (int)sub_808A10; dword_BA3E74 = (int)sub_807EB0; dword_BA3DE4 = (int)sub_807FD0; dword_BA3D54 = (int)sub_805340; byte_BA3BF1 = 76; dword_BA41D4 = (int)sub_808670; dword_BA4144 = (int)sub_808010; dword_BA40B4 = (int)sub_8080D0; dword_BA4024 = (int)sub_808190; dword_BA3F94 = (int)sub_807F30; dword_BA3C34 = (int)sub_808410; dword_BA3CC4 = (int)sub_808810; return result; } // BA3B99: using guessed type char byte_BA3B99; // BA3BF1: using guessed type char byte_BA3BF1; // BA3C34: using guessed type int dword_BA3C34; // BA3CC4: using guessed type int dword_BA3CC4; // BA3D54: using guessed type int dword_BA3D54; // BA3DE4: using guessed type int dword_BA3DE4; // BA3E74: using guessed type int dword_BA3E74; // BA3F04: using guessed type int dword_BA3F04; // BA3F94: using guessed type int dword_BA3F94; // BA4024: using guessed type int dword_BA4024; // BA40B4: using guessed type int dword_BA40B4; // BA4144: using guessed type int dword_BA4144; // BA41D4: using guessed type int dword_BA41D4; // BA4264: using guessed type int dword_BA4264; //----- (00808B40) -------------------------------------------------------- int __cdecl sub_808B40(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a1 + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(a1 + 16) = *(_DWORD *)(a2 + 16); *(float *)(a1 + 20) = *(float *)(a2 + 20); *(float *)(a1 + 24) = *(float *)(a2 + 24); *(float *)(a1 + 28) = *(float *)(a2 + 28); *(_DWORD *)(a1 + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(a1 + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(a1 + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(a1 + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(a1 + 48) = *(_DWORD *)(a2 + 48); *(_DWORD *)(a1 + 52) = *(_DWORD *)(a2 + 52); *(_DWORD *)(a1 + 56) = *(_DWORD *)(a2 + 56); result = *(_DWORD *)(a2 + 60); *(_DWORD *)(a1 + 60) = result; return result; } //----- (00808BB0) -------------------------------------------------------- int __cdecl sub_808BB0(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int result; // eax int v6; // [esp+14h] [ebp-10h] v4 = (_DWORD *)sub_874C70((int)&v6, a1, a2 + 4, a2 + 32, a3 + 48, a3 + 4); *(_DWORD *)a4 = *v4; *(_DWORD *)(a4 + 4) = v4[1]; *(_DWORD *)(a4 + 8) = v4[2]; result = v4[3]; *(_DWORD *)(a4 + 12) = result; return result; } //----- (00808C00) -------------------------------------------------------- int __thiscall sub_808C00(float *this, float *a2, float *a3) { float *v3; // esi float *v4; // edi float *v5; // ST10_4 float *v6; // eax float *v7; // eax float *v8; // eax float *v9; // eax float *v10; // ST10_4 float *v11; // eax float *v12; // eax float *v13; // eax float *v14; // eax float *v15; // eax float *v16; // ST10_4 float *v17; // eax float *v18; // eax float *v19; // eax float *v20; // eax float *v21; // eax int result; // eax char v23; // [esp+1Ch] [ebp-98h] char v24; // [esp+2Ch] [ebp-88h] int v25; // [esp+3Ch] [ebp-78h] int v26; // [esp+4Ch] [ebp-68h] int v27; // [esp+5Ch] [ebp-58h] int v28; // [esp+6Ch] [ebp-48h] int v29; // [esp+7Ch] [ebp-38h] char v30; // [esp+8Ch] [ebp-28h] double v31; // [esp+94h] [ebp-20h] float v32; // [esp+9Ch] [ebp-18h] float v33; // [esp+A0h] [ebp-14h] float v34; // [esp+A4h] [ebp-10h] float v35; // [esp+A8h] [ebp-Ch] float v36; // [esp+ACh] [ebp-8h] float v37; // [esp+B0h] [ebp-4h] float v38; // [esp+BCh] [ebp+8h] float v39; // [esp+BCh] [ebp+8h] float v40; // [esp+BCh] [ebp+8h] float v41; // [esp+BCh] [ebp+8h] float v42; // [esp+C0h] [ebp+Ch] float v43; // [esp+C0h] [ebp+Ch] v3 = this; v4 = this + 1; v5 = this + 1; v6 = sub_874C40((float *)&v29, a2 + 1); v7 = sub_874BB0(v6, (float *)&v30, v5); sub_874CE0((float *)&v27, v7); v8 = sub_874C40((float *)&v30, v4); v9 = sub_874BB0(v8, (float *)&v29, a3 + 1); sub_874CE0((float *)&v28, v9); v33 = 1.0 / (*a3 - *a2); v35 = 1.0 - v3[5]; v37 = 1.0 - v3[6]; v34 = v3[6] + 1.0; v32 = 1.0 - v3[7]; v36 = v3[7] + 1.0; v38 = (*v3 - *a2) * v33; v31 = v38 * v35; v39 = v31 * v34 * v36; v10 = (float *)sub_878150((int)&v29, v39, (int)&v27); v40 = v37 * v31 * v32; v11 = (float *)sub_878150((int)&v26, v40, (int)&v28); sub_874B20(v11, (float *)&v23, v10); v12 = sub_874B50((float *)&v23, (float *)&v26, (float *)&v28); v13 = (float *)sub_878150((int)&v29, 0.5, (int)v12); v14 = sub_878290((float *)&v30, v13); v15 = sub_874BB0(v4, (float *)&v25, v14); v3[8] = *v15; v3[9] = v15[1]; v3[10] = v15[2]; v3[11] = v15[3]; v41 = (*a3 - *v3) * v33; v31 = v41 * v35; v42 = v31 * v37 * v36; v16 = (float *)sub_878150((int)&v25, v42, (int)&v27); v43 = v34 * v31 * v32; v17 = (float *)sub_878150((int)&v26, v43, (int)&v28); sub_874B20(v17, (float *)&v24, v16); v18 = sub_874B50((float *)&v27, (float *)&v25, (float *)&v24); v19 = (float *)sub_878150((int)&v26, 0.5, (int)v18); v20 = sub_878290((float *)&v29, v19); v21 = sub_874BB0(v4, (float *)&v30, v20); v3[12] = *v21; v3[13] = v21[1]; v3[14] = v21[2]; result = *((_DWORD *)v21 + 3); *((_DWORD *)v3 + 15) = result; return result; } //----- (00808E30) -------------------------------------------------------- void __cdecl sub_808E30(int a1, unsigned int a2, unsigned __int8 a3) { unsigned int v3; // edi float *v4; // esi int v5; // eax float *v6; // esi float *v7; // eax float *v8; // eax float *v9; // eax float *v10; // eax float *v11; // ST10_4 float *v12; // eax float *v13; // eax float *v14; // eax float *v15; // eax float *v16; // eax float *v17; // ST10_4 float *v18; // eax float *v19; // eax float *v20; // eax float *v21; // eax float *v22; // eax char v23; // [esp+1Ch] [ebp-16Ch] char v24; // [esp+2Ch] [ebp-15Ch] char v25; // [esp+3Ch] [ebp-14Ch] char v26; // [esp+4Ch] [ebp-13Ch] int v27; // [esp+5Ch] [ebp-12Ch] int v28; // [esp+6Ch] [ebp-11Ch] char v29; // [esp+7Ch] [ebp-10Ch] int v30; // [esp+8Ch] [ebp-FCh] int v31; // [esp+9Ch] [ebp-ECh] int v32; // [esp+ACh] [ebp-DCh] int v33; // [esp+BCh] [ebp-CCh] char v34; // [esp+CCh] [ebp-BCh] char v35; // [esp+DCh] [ebp-ACh] char v36; // [esp+ECh] [ebp-9Ch] char v37; // [esp+FCh] [ebp-8Ch] char v38; // [esp+10Ch] [ebp-7Ch] char v39; // [esp+11Ch] [ebp-6Ch] char v40; // [esp+12Ch] [ebp-5Ch] int v41; // [esp+13Ch] [ebp-4Ch] int v42; // [esp+14Ch] [ebp-3Ch] double v43; // [esp+15Ch] [ebp-2Ch] int v44; // [esp+164h] [ebp-24h] float v45; // [esp+168h] [ebp-20h] float v46; // [esp+16Ch] [ebp-1Ch] float v47; // [esp+170h] [ebp-18h] float v48; // [esp+174h] [ebp-14h] unsigned int v49; // [esp+178h] [ebp-10h] float v50; // [esp+17Ch] [ebp-Ch] float v51; // [esp+180h] [ebp-8h] float v52; // [esp+184h] [ebp-4h] v3 = a2; if ( a2 >= 2 ) { v4 = (float *)a1; sub_805B00(a1, a2, a3); sub_808C00(v4, v4, v4 + 16); v5 = a2 - 1; v44 = a2 - 1; if ( a2 - 1 > 1 ) { v6 = (float *)(a1 + 128); v49 = a2 - 2; do { v7 = sub_874C40((float *)&v36, v6 - 31); v8 = sub_874BB0(v7, (float *)&v38, v6 - 15); sub_874CE0((float *)&v42, v8); v9 = sub_874C40((float *)&v34, v6 - 15); v10 = sub_874BB0(v9, (float *)&v26, v6 + 1); sub_874CE0((float *)&v41, v10); v47 = 1.0 / (*v6 - *(v6 - 32)); v45 = 1.0 - *(v6 - 11); v46 = 1.0 - *(v6 - 10); v48 = *(v6 - 10) + 1.0; v51 = 1.0 - *(v6 - 9); v50 = *(v6 - 9) + 1.0; v52 = (*(v6 - 16) - *(v6 - 32)) * v47; v43 = v52 * v45; v52 = v43 * v48 * v50; v11 = (float *)sub_878150((int)&v28, v52, (int)&v42); v52 = v46 * v43 * v51; v12 = (float *)sub_878150((int)&v32, v52, (int)&v41); sub_874B20(v12, (float *)&v40, v11); v13 = sub_874B50((float *)&v40, (float *)&v24, (float *)&v41); v14 = (float *)sub_878150((int)&v30, 0.5, (int)v13); v15 = sub_878290((float *)&v37, v14); v16 = sub_874BB0(v6 - 15, (float *)&v35, v15); *(v6 - 8) = *v16; *(v6 - 7) = v16[1]; *(v6 - 6) = v16[2]; *(v6 - 5) = v16[3]; v52 = (*v6 - *(v6 - 16)) * v47; v43 = v52 * v45; v50 = v43 * v46 * v50; v17 = (float *)sub_878150((int)&v33, v50, (int)&v42); v51 = v48 * v43 * v51; v18 = (float *)sub_878150((int)&v31, v51, (int)&v41); sub_874B20(v18, (float *)&v39, v17); v19 = sub_874B50((float *)&v42, (float *)&v29, (float *)&v39); v20 = (float *)sub_878150((int)&v27, 0.5, (int)v19); v21 = sub_878290((float *)&v25, v20); v22 = sub_874BB0(v6 - 15, (float *)&v23, v21); *(v6 - 4) = *v22; *(v6 - 3) = v22[1]; *(v6 - 2) = v22[2]; *(v6 - 1) = v22[3]; v6 += 16; --v49; } while ( v49 ); v3 = a2; v5 = v44; v4 = (float *)a1; } sub_808C00(&v4[16 * v5], &v4[16 * (v3 - 2)], &v4[16 * v5]); } } //----- (008090E0) -------------------------------------------------------- BOOL __cdecl sub_8090E0(float *a1, float *a2) { BOOL result; // eax result = sub_806A00(a1, a2); if ( (_BYTE)result ) result = a2[5] == a1[5] && a2[6] == a1[6] && a2[7] == a1[7] && (unsigned __int8)sub_805790(a1 + 8, a2 + 8) && (unsigned __int8)sub_805790(a1 + 12, a2 + 12); return result; } //----- (00809160) -------------------------------------------------------- int __cdecl sub_809160(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax int v3; // edi int v4; // ebx float *v5; // esi v1 = (a1 << 6) | -((unsigned __int64)a1 >> 26 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; v3 = a1 - 1; *v2 = a1; v4 = (int)(v2 + 1); if ( (signed int)(a1 - 1) >= 0 ) { v5 = (float *)(v2 + 2); do { sub_874B00(v5, 0.0, 0.0, 0.0, 0.0); v5 += 16; --v3; } while ( v3 >= 0 ); } return v4; } //----- (008091D0) -------------------------------------------------------- char __cdecl sub_8091D0(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax double v7; // st7 float *v8; // eax float *v9; // edi float v10; // ST14_4 float v11; // ST10_4 float v12; // ST0C_4 float v13; // ST08_4 char *v14; // edi int v15; // eax int v16; // edx int v18; // [esp+20h] [ebp-1Ch] int v19; // [esp+24h] [ebp-18h] int v20; // [esp+28h] [ebp-14h] int v21; // [esp+2Ch] [ebp-10h] void *Dst; // [esp+30h] [ebp-Ch] int v23; // [esp+34h] [ebp-8h] int v24; // [esp+38h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v24, 64) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = (v4 << 6) | -((unsigned __int64)(unsigned int)v4 >> 26 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); v7 = 0.0; if ( v6 ) { *v6 = v4; v8 = (float *)(v6 + 1); Dst = v8; v23 = v4 - 1; if ( v4 - 1 < 0 ) { v14 = (char *)v8; } else { v9 = v8 + 1; while ( 1 ) { v10 = v7; v11 = v7; v12 = v7; v13 = v7; sub_874B00(v9, v13, v12, v11, v10); v9 += 16; if ( --v23 < 0 ) break; v7 = 0.0; } v14 = (char *)Dst; } } else { v14 = 0; } memcpy_s(v14, (*(_DWORD *)a3 + 1) << 6, v3, v24 << 6); if ( *(_DWORD *)a3 > (unsigned int)v24 ) memcpy_s(&v14[64 * v24 + 64], (*(_DWORD *)a3 - v24) << 6, &v3[64 * v24], (*(_DWORD *)a3 - v24) << 6); sub_805A30((int)&v18, a1, (int)v3, 3, *(_DWORD *)a3, 64); v15 = (int)&v14[64 * v24]; *(float *)v15 = a1; *(_DWORD *)(v15 + 4) = v18; *(_DWORD *)(v15 + 8) = v19; *(_DWORD *)(v15 + 12) = v20; v16 = v21; *(float *)(v15 + 20) = 0.0; *(float *)(v15 + 24) = 0.0; *(_DWORD *)(v15 + 16) = v16; *(float *)(v15 + 28) = 0.0; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v14; sub_808E30((int)v14, *(_DWORD *)a3, 0x40u); return 1; } //----- (00809340) -------------------------------------------------------- int __cdecl sub_809340(signed int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // edi float *v7; // esi int v8; // esi int v9; // eax int v10; // ST28_4 void (__cdecl *v11)(int, int, signed int, int *, signed int); // eax void (__cdecl *v12)(int, int, signed int, int *, signed int); // edx int v13; // ST14_4 int v14; // eax int v15; // ST00_4 void (__cdecl *v16)(int, int, signed int, int *, signed int); // eax int v17; // [esp+1Ch] [ebp-4h] int v18; // [esp+2Ch] [ebp+Ch] int v19; // [esp+2Ch] [ebp+Ch] v2 = a2; v3 = (a2 << 6) | -((unsigned __int64)a2 >> 26 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v6 = a2 - 1; v18 = result; if ( (signed int)(v2 - 1) >= 0 ) { v7 = (float *)(result + 4); do { sub_874B00(v7, 0.0, 0.0, 0.0, 0.0); v7 += 16; --v6; } while ( v6 >= 0 ); result = v18; } v19 = result; } else { v19 = 0; result = 0; } if ( v2 ) { v8 = result + 24; do { sub_8066A0((char *)(v8 - 24), a1); v9 = *(_DWORD *)(a1 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v9 + 4); v17 = 4; v11(v10, v8 - 4, 4, &v17, 1); v12 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a1 + 352) + 4); v13 = *(_DWORD *)(a1 + 352); v17 = 4; v12(v13, v8, 4, &v17, 1); v14 = *(_DWORD *)(a1 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v14 + 4); v17 = 4; v16(v15, v8 + 4, 4, &v17, 1); v8 += 64; --v2; } while ( v2 ); result = v19; } return result; } //----- (00809440) -------------------------------------------------------- int __cdecl sub_809440(signed int a1, signed int a2, int a3) { int result; // eax int v4; // esi int v5; // eax int v6; // ST28_4 void (__cdecl *v7)(int, int, signed int, signed int *, signed int); // eax void (__cdecl *v8)(int, int, signed int, signed int *, signed int); // edx int v9; // ST14_4 int v10; // eax int v11; // ST00_4 int (__cdecl *v12)(int, int, signed int, signed int *, signed int); // eax result = a3; if ( a3 ) { v4 = a2 + 24; do { sub_805760(a1, v4 - 24); v5 = *(_DWORD *)(a1 + 356); v6 = v5; v7 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(v5 + 8); a2 = 4; v7(v6, v4 - 4, 4, &a2, 1); v8 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v9 = *(_DWORD *)(a1 + 356); a2 = 4; v8(v9, v4, 4, &a2, 1); v10 = *(_DWORD *)(a1 + 356); v11 = v10; v12 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v10 + 8); a2 = 4; result = v12(v11, v4 + 4, 4, &a2, 1); v4 += 64; --a3; } while ( a3 ); } return result; } //----- (008094D0) -------------------------------------------------------- signed int sub_8094D0() { signed int result; // eax result = 0; if ( !byte_BA3B9A ) { dword_BA41EC = 0; dword_BA40CC = 0; dword_BA403C = 0; byte_BA3B9A = 1; dword_BA427C = (int)sub_809340; dword_BA3F1C = (int)sub_809440; dword_BA3E8C = (int)sub_808B40; dword_BA3DFC = (int)sub_809160; dword_BA3D6C = (int)sub_805340; byte_BA3BF7 = 64; dword_BA415C = (int)sub_808BB0; dword_BA3FAC = (int)sub_8090E0; dword_BA3C4C = (int)sub_808E30; dword_BA3CDC = (int)sub_8091D0; result = 1; } return result; } // BA3B9A: using guessed type char byte_BA3B9A; // BA3BF7: using guessed type char byte_BA3BF7; // BA3C4C: using guessed type int dword_BA3C4C; // BA3CDC: using guessed type int dword_BA3CDC; // BA3D6C: using guessed type int dword_BA3D6C; // BA3DFC: using guessed type int dword_BA3DFC; // BA3E8C: using guessed type int dword_BA3E8C; // BA3F1C: using guessed type int dword_BA3F1C; // BA3FAC: using guessed type int dword_BA3FAC; // BA403C: using guessed type int dword_BA403C; // BA40CC: using guessed type int dword_BA40CC; // BA415C: using guessed type int dword_BA415C; // BA41EC: using guessed type int dword_BA41EC; // BA427C: using guessed type int dword_BA427C; //----- (00809560) -------------------------------------------------------- BOOL __cdecl sub_809560(float *a1, float *a2) { BOOL result; // eax result = sub_803D80(a1, a2); if ( (_BYTE)result ) result = a2[2] == a1[2] && a2[3] == a1[3] && a2[4] == a1[4] && a2[5] == a1[5] && a2[6] == a1[6]; return result; } //----- (008095E0) -------------------------------------------------------- float *__cdecl sub_8095E0(float *a1, float *a2) { float *result; // eax result = a2; *a1 = *a2; a1[1] = a2[1]; a1[2] = a2[2]; a1[3] = a2[3]; a1[4] = a2[4]; a1[5] = a2[5]; a1[6] = a2[6]; return result; } //----- (00809620) -------------------------------------------------------- int __cdecl sub_809620(float a1, int a2, int a3, int a4) { double v4; // st7 int result; // eax v4 = sub_8174E0(a1, *(float *)(a2 + 4), *(float *)(a2 + 24), *(float *)(a3 + 4), *(float *)(a3 + 20)); result = a4; *(float *)a4 = v4; return result; } //----- (00809670) -------------------------------------------------------- int __cdecl sub_809670(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax v1 = 28 * a1 | -(28 * (unsigned __int64)a1 >> 32 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; return (int)(v2 + 1); } //----- (008096B0) -------------------------------------------------------- float *__cdecl sub_8096B0(int a1, float a2, float a3, float a4, float a5) { float *result; // eax float v6; // ST08_4 float v7; // ST00_4 float v8; // ST04_4 double v9; // st6 double v10; // st7 double v11; // st5 float v12; // [esp+14h] [ebp+8h] float v13; // [esp+14h] [ebp+8h] float v14; // [esp+14h] [ebp+8h] float v15; // [esp+14h] [ebp+8h] float v16; // [esp+18h] [ebp+Ch] float v17; // [esp+1Ch] [ebp+10h] float v18; // [esp+1Ch] [ebp+10h] float v19; // [esp+1Ch] [ebp+10h] float v20; // [esp+20h] [ebp+14h] result = (float *)a1; v6 = *(float *)(a1 + 4) - a2; v7 = a3 - *(float *)(a1 + 4); v16 = *(float *)(a1 + 16) + 1.0; v8 = 1.0 - *(float *)(a1 + 16); v17 = (1.0 - *(float *)(a1 + 8)) * 0.5; v12 = *(float *)(a1 + 12) + 1.0; v9 = v17; v18 = v12 * v17; v13 = 1.0 - result[3]; v14 = v9 * v13; v10 = a4; v20 = 2.0 / (a4 + a5); v11 = v18; v19 = v18 * v8 * v7 + v14 * v16 * v6; result[5] = v10 * v20 * v19; v15 = v11 * v16 * v6 + v7 * (v8 * v14); result[6] = v15 * (a5 * v20); return result; } //----- (00809790) -------------------------------------------------------- void __cdecl sub_809790(int a1, unsigned int a2) { unsigned int v2; // ebx float *v3; // edx int v4; // esi float *v5; // eax int v6; // edi float v7; // ST10_4 float *v8; // ecx double v9; // st7 float *v10; // eax float v11; // [esp+28h] [ebp+Ch] float v12; // [esp+28h] [ebp+Ch] float v13; // [esp+28h] [ebp+Ch] float v14; // [esp+28h] [ebp+Ch] v2 = a2; if ( a2 >= 2 ) { v11 = *(float *)(a1 + 4) + *(float *)(a1 + 4) - *(float *)(a1 + 32); sub_8096B0(a1, v11, *(float *)(a1 + 32), 1.0, 1.0); v4 = v2 - 1; if ( v2 - 1 > 1 ) { v5 = v3; v6 = v2 - 2; do { v12 = v5[14] - v5[7]; v7 = v12; v13 = v5[7] - *v5; sub_8096B0((int)(v5 + 7), v5[1], v5[15], v13, v7); --v6; v5 = v8; } while ( v6 ); } v9 = v3[7 * v4 + 1]; v10 = &v3[7 * (v2 - 2) + 1]; v14 = v9 + v9 - *v10; sub_8096B0((int)&v3[7 * v4], *v10, v14, 1.0, 1.0); } } //----- (00809870) -------------------------------------------------------- char __cdecl sub_809870(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax char *v7; // edi float v8; // ST20_4 float *v9; // eax int v11; // [esp+24h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v11, 28) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 28 * v4 | -(28 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 28 * (*(_DWORD *)a3 + 1), v3, 28 * v11); if ( *(_DWORD *)a3 > (unsigned int)v11 ) memcpy_s(&v7[28 * v11 + 28], 28 * (*(_DWORD *)a3 - v11), &v3[28 * v11], 28 * (*(_DWORD *)a3 - v11)); v8 = sub_803FA0(a1, (int)v3, 3, *(_DWORD *)a3, 28); v9 = (float *)&v7[28 * v11]; *v9 = a1; v9[1] = v8; v9[2] = 0.0; v9[3] = 0.0; v9[4] = 0.0; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; sub_809790((int)v7, *(_DWORD *)a3); return 1; } //----- (008099C0) -------------------------------------------------------- int __cdecl sub_8099C0(signed int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // esi int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int, signed int, int *, signed int); // eax void (__cdecl *v10)(int, int, signed int, int *, signed int); // edx int v11; // ST14_4 int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int, signed int, int *, signed int); // eax int v15; // [esp+4h] [ebp-4h] int v16; // [esp+14h] [ebp+Ch] v2 = a2; v3 = 28 * a2 | -(28 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v16 = result; } else { v16 = 0; result = 0; } if ( v2 ) { v6 = result + 12; do { sub_8040B0((char *)(v6 - 12), a1); v7 = *(_DWORD *)(a1 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v7 + 4); v15 = 4; v9(v8, v6 - 4, 4, &v15, 1); v10 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a1 + 352) + 4); v11 = *(_DWORD *)(a1 + 352); v15 = 4; v10(v11, v6, 4, &v15, 1); v12 = *(_DWORD *)(a1 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v12 + 4); v15 = 4; v14(v13, v6 + 4, 4, &v15, 1); v6 += 28; --v2; } while ( v2 ); result = v16; } return result; } //----- (00809A90) -------------------------------------------------------- int __cdecl sub_809A90(signed int a1, signed int a2, int a3) { int result; // eax int v4; // esi int v5; // eax int v6; // ST28_4 void (__cdecl *v7)(int, int, signed int, signed int *, signed int); // eax void (__cdecl *v8)(int, int, signed int, signed int *, signed int); // edx int v9; // ST14_4 int v10; // eax int v11; // ST00_4 int (__cdecl *v12)(int, int, signed int, signed int *, signed int); // eax result = a3; if ( a3 ) { v4 = a2 + 12; do { sub_8040F0(a1, v4 - 12); v5 = *(_DWORD *)(a1 + 356); v6 = v5; v7 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(v5 + 8); a2 = 4; v7(v6, v4 - 4, 4, &a2, 1); v8 = *(void (__cdecl **)(int, int, signed int, signed int *, signed int))(*(_DWORD *)(a1 + 356) + 8); v9 = *(_DWORD *)(a1 + 356); a2 = 4; v8(v9, v4, 4, &a2, 1); v10 = *(_DWORD *)(a1 + 356); v11 = v10; v12 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v10 + 8); a2 = 4; result = v12(v11, v4 + 4, 4, &a2, 1); v4 += 28; --a3; } while ( a3 ); } return result; } //----- (00809B20) -------------------------------------------------------- signed int sub_809B20() { signed int result; // eax result = 0; if ( !byte_BA3B9B ) { dword_BA41BC = 0; dword_BA409C = 0; dword_BA400C = 0; byte_BA3B9B = 1; dword_BA424C = (int)sub_8099C0; dword_BA3EEC = (int)sub_809A90; dword_BA3E5C = (int)sub_8095E0; dword_BA3DCC = (int)sub_809670; dword_BA3D3C = (int)sub_805340; byte_BA3BEB = 28; dword_BA412C = (int)sub_809620; dword_BA3F7C = (int)sub_809560; dword_BA3C1C = (int)sub_809790; dword_BA3CAC = (int)sub_809870; result = 1; } return result; } // BA3B9B: using guessed type char byte_BA3B9B; // BA3BEB: using guessed type char byte_BA3BEB; // BA3C1C: using guessed type int dword_BA3C1C; // BA3CAC: using guessed type int dword_BA3CAC; // BA3D3C: using guessed type int dword_BA3D3C; // BA3DCC: using guessed type int dword_BA3DCC; // BA3E5C: using guessed type int dword_BA3E5C; // BA3EEC: using guessed type int dword_BA3EEC; // BA3F7C: using guessed type int dword_BA3F7C; // BA400C: using guessed type int dword_BA400C; // BA409C: using guessed type int dword_BA409C; // BA412C: using guessed type int dword_BA412C; // BA41BC: using guessed type int dword_BA41BC; // BA424C: using guessed type int dword_BA424C; //----- (00809BB0) -------------------------------------------------------- char __cdecl sub_809BB0(int a1, int a2) { char result; // al *(float *)a1 = *(float *)a2; result = *(_BYTE *)(a2 + 4); *(_BYTE *)(a1 + 4) = result; return result; } //----- (00809BD0) -------------------------------------------------------- bool __cdecl sub_809BD0(int a1, int a2) { return sub_806290(a1, a2); } //----- (00809BE0) -------------------------------------------------------- int __cdecl sub_809BE0(float a1, int a2, int a3, int a4) { int result; // eax result = a2; if ( a1 >= 1.0 ) result = a3; *(_BYTE *)a4 = *(_BYTE *)(result + 4); return result; } //----- (00809C00) -------------------------------------------------------- int __cdecl sub_809C00(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_806650(a1, v4); v4 += 8; --v3; } while ( v3 ); } return result; } //----- (00809C30) -------------------------------------------------------- int __cdecl sub_809C30(unsigned int a1) { int v1; // ecx unsigned int *v2; // eax v1 = 8 * a1 | -((unsigned __int64)a1 >> 29 != 0); v2 = (unsigned int *)operator new((v1 + 4) | -__CFADD__(v1, 4)); if ( !v2 ) return 0; *v2 = a1; return (int)(v2 + 1); } //----- (00809C70) -------------------------------------------------------- char __cdecl sub_809C70(float a1, int a2, int a3) { int v3; // ecx char *v4; // edi int v5; // ebx int v6; // ecx int *v7; // eax char *v8; // ebx char v9; // al int v10; // ecx int v12; // [esp+20h] [ebp-4h] v12 = v3; v4 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v12, 8) ) return 0; v5 = *(_DWORD *)a3 + 1; v6 = 8 * v5 | -((unsigned __int64)(unsigned int)v5 >> 29 != 0); v7 = (int *)operator new((v6 + 4) | -__CFADD__(v6, 4)); if ( v7 ) { *v7 = v5; v8 = (char *)(v7 + 1); } else { v8 = 0; } memcpy_s(v8, 8 * *(_DWORD *)a3 + 8, v4, 8 * v12); if ( *(_DWORD *)a3 > (unsigned int)v12 ) memcpy_s(&v8[8 * v12 + 8], 8 * (*(_DWORD *)a3 - v12), &v4[8 * v12], 8 * (*(_DWORD *)a3 - v12)); v9 = sub_8064A0(a1, (int)v4, 5, *(_DWORD *)a3, 8); v10 = (int)&v8[8 * v12]; *(float *)v10 = a1; *(_BYTE *)(v10 + 4) = v9; ++*(_DWORD *)a3; if ( v4 ) operator delete(v4 - 4); *(_DWORD *)a2 = v8; return 1; } //----- (00809D70) -------------------------------------------------------- int __cdecl sub_809D70(int a1, unsigned int a2) { unsigned int v2; // edi int v3; // ecx unsigned int *v4; // eax int result; // eax _BYTE *v6; // esi int v7; // [esp+10h] [ebp+Ch] v2 = a2; v3 = 8 * a2 | -((unsigned __int64)a2 >> 29 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v7 = result; } else { v7 = 0; result = 0; } if ( v2 ) { v6 = (_BYTE *)result; do { sub_8065F0(v6, a1); v6 += 8; --v2; } while ( v2 ); result = v7; } return result; } //----- (00809DE0) -------------------------------------------------------- signed int sub_809DE0() { signed int result; // eax result = 0; if ( !byte_BA3B9C ) { dword_BA423C = 0; dword_BA411C = 0; dword_BA408C = 0; byte_BA3B9C = 1; dword_BA42CC = (int)sub_809D70; dword_BA3F6C = (int)sub_809C00; dword_BA3EDC = (int)sub_809BB0; dword_BA3E4C = (int)sub_809C30; dword_BA3DBC = (int)sub_805340; byte_BA3C0B = 8; dword_BA41AC = (int)sub_809BE0; dword_BA3FFC = (int)sub_809BD0; dword_BA3C9C = (int)nullsub_6; dword_BA3D2C = (int)sub_809C70; result = 1; } return result; } // BA3B9C: using guessed type char byte_BA3B9C; // BA3C0B: using guessed type char byte_BA3C0B; // BA3C9C: using guessed type int dword_BA3C9C; // BA3D2C: using guessed type int dword_BA3D2C; // BA3DBC: using guessed type int dword_BA3DBC; // BA3E4C: using guessed type int dword_BA3E4C; // BA3EDC: using guessed type int dword_BA3EDC; // BA3F6C: using guessed type int dword_BA3F6C; // BA3FFC: using guessed type int dword_BA3FFC; // BA408C: using guessed type int dword_BA408C; // BA411C: using guessed type int dword_BA411C; // BA41AC: using guessed type int dword_BA41AC; // BA423C: using guessed type int dword_BA423C; // BA42CC: using guessed type int dword_BA42CC; //----- (00809E70) -------------------------------------------------------- BOOL __cdecl sub_809E70(float *a1, float *a2) { return sub_806A00(a1, a2); } //----- (00809E80) -------------------------------------------------------- int __cdecl sub_809E80(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int result; // eax v4 = (_DWORD *)a2; if ( a1 >= 1.0 ) v4 = (_DWORD *)a3; *(_DWORD *)a4 = v4[1]; *(_DWORD *)(a4 + 4) = v4[2]; *(_DWORD *)(a4 + 8) = v4[3]; result = v4[4]; *(_DWORD *)(a4 + 12) = result; return result; } //----- (00809EC0) -------------------------------------------------------- int __cdecl sub_809EC0(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_8066C0(a1, v4); v4 += 20; --v3; } while ( v3 ); } return result; } //----- (00809EF0) -------------------------------------------------------- char __cdecl sub_809EF0(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax int v7; // edi int v8; // ecx int v9; // eax char *v10; // edi int v11; // eax int v13; // [esp+20h] [ebp-14h] int v14; // [esp+24h] [ebp-10h] int v15; // [esp+28h] [ebp-Ch] int v16; // [esp+2Ch] [ebp-8h] int v17; // [esp+30h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v17, 20) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 20 * v4 | -(20 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = v4 - 1; v8 = (int)(v6 + 1); if ( v7 >= 0 ) { v9 = (int)(v6 + 4); do { *(float *)(v9 - 8) = 0.0; v9 += 20; --v7; *(float *)(v9 - 24) = 0.0; *(float *)(v9 - 20) = 0.0; *(float *)(v9 - 16) = 0.0; } while ( v7 >= 0 ); } v10 = (char *)v8; } else { v10 = 0; } memcpy_s(v10, 4 * (5 * *(_DWORD *)a3 + 5), v3, 20 * v17); if ( *(_DWORD *)a3 > (unsigned int)v17 ) memcpy_s(&v10[20 * v17 + 20], 20 * (*(_DWORD *)a3 - v17), &v3[20 * v17], 20 * (*(_DWORD *)a3 - v17)); sub_806930((int)&v13, a1, (int)v3, 5, *(_DWORD *)a3, 20); v11 = (int)&v10[20 * v17]; *(float *)v11 = a1; *(_DWORD *)(v11 + 4) = v13; *(_DWORD *)(v11 + 8) = v14; *(_DWORD *)(v11 + 12) = v15; *(_DWORD *)(v11 + 16) = v16; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v10; return 1; } //----- (0080A030) -------------------------------------------------------- signed int sub_80A030() { signed int result; // eax result = 0; if ( !byte_BA3B9D ) { dword_BA420C = 0; dword_BA40EC = 0; dword_BA405C = 0; dword_BA3C6C = 0; byte_BA3B9D = 1; dword_BA429C = (int)sub_807440; dword_BA3F3C = (int)sub_809EC0; dword_BA3EAC = (int)sub_807270; dword_BA3E1C = (int)sub_8072F0; dword_BA3D8C = (int)sub_805340; byte_BA3BFF = 20; dword_BA417C = (int)sub_809E80; dword_BA3FCC = (int)sub_809E70; dword_BA3CFC = (int)sub_809EF0; result = 1; } return result; } // BA3B9D: using guessed type char byte_BA3B9D; // BA3BFF: using guessed type char byte_BA3BFF; // BA3C6C: using guessed type int dword_BA3C6C; // BA3CFC: using guessed type int dword_BA3CFC; // BA3D8C: using guessed type int dword_BA3D8C; // BA3E1C: using guessed type int dword_BA3E1C; // BA3EAC: using guessed type int dword_BA3EAC; // BA3F3C: using guessed type int dword_BA3F3C; // BA3FCC: using guessed type int dword_BA3FCC; // BA405C: using guessed type int dword_BA405C; // BA40EC: using guessed type int dword_BA40EC; // BA417C: using guessed type int dword_BA417C; // BA420C: using guessed type int dword_BA420C; // BA429C: using guessed type int dword_BA429C; //----- (0080A0C0) -------------------------------------------------------- int __cdecl sub_80A0C0(float a1, int a2, int a3, int a4) { int result; // eax if ( a1 >= 1.0 ) { result = a4; *(float *)a4 = *(float *)(a3 + 4); } else { result = a2; *(float *)a4 = *(float *)(a2 + 4); } return result; } //----- (0080A0F0) -------------------------------------------------------- char __cdecl sub_80A0F0(float a1, int a2, int a3) { char *v3; // edi int v4; // ebx int v5; // ecx int *v6; // eax char *v7; // ebx float v8; // ST20_4 float *v9; // eax int v11; // [esp+24h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v11, 8) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 8 * v4 | -((unsigned __int64)(unsigned int)v4 >> 29 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 8 * *(_DWORD *)a3 + 8, v3, 8 * v11); if ( *(_DWORD *)a3 > (unsigned int)v11 ) memcpy_s(&v7[8 * v11 + 8], 8 * (*(_DWORD *)a3 - v11), &v3[8 * v11], 8 * (*(_DWORD *)a3 - v11)); v8 = sub_803FA0(a1, (int)v3, 5, *(_DWORD *)a3, 8); v9 = (float *)&v7[8 * v11]; *v9 = a1; v9[1] = v8; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; return 1; } //----- (0080A1F0) -------------------------------------------------------- signed int sub_80A1F0() { signed int result; // eax result = 0; if ( !byte_BA3B9E ) { dword_BA41C4 = 0; dword_BA40A4 = 0; dword_BA4014 = 0; byte_BA3B9E = 1; dword_BA4254 = (int)sub_807710; dword_BA3EF4 = (int)sub_807780; dword_BA3E64 = (int)sub_8076B0; dword_BA3DD4 = (int)sub_809C30; dword_BA3D44 = (int)sub_805340; byte_BA3BED = 8; dword_BA4134 = (int)sub_80A0C0; dword_BA3F84 = (int)sub_8076A0; dword_BA3C24 = (int)nullsub_6; dword_BA3CB4 = (int)sub_80A0F0; result = 1; } return result; } // BA3B9E: using guessed type char byte_BA3B9E; // BA3BED: using guessed type char byte_BA3BED; // BA3C24: using guessed type int dword_BA3C24; // BA3CB4: using guessed type int dword_BA3CB4; // BA3D44: using guessed type int dword_BA3D44; // BA3DD4: using guessed type int dword_BA3DD4; // BA3E64: using guessed type int dword_BA3E64; // BA3EF4: using guessed type int dword_BA3EF4; // BA3F84: using guessed type int dword_BA3F84; // BA4014: using guessed type int dword_BA4014; // BA40A4: using guessed type int dword_BA40A4; // BA4134: using guessed type int dword_BA4134; // BA41C4: using guessed type int dword_BA41C4; // BA4254: using guessed type int dword_BA4254; //----- (0080A280) -------------------------------------------------------- double sub_80A280() { return 0.0; } //----- (0080A290) -------------------------------------------------------- int __cdecl sub_80A290(int a1, int a2) { int result; // eax *(float *)a1 = *(float *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(a1 + 8) = *(_DWORD *)(a2 + 8); result = *(_DWORD *)(a2 + 12); *(_DWORD *)(a1 + 12) = result; return result; } //----- (0080A2C0) -------------------------------------------------------- int __cdecl sub_80A2C0(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int result; // eax v4 = (_DWORD *)a2; if ( a1 >= 1.0 ) v4 = (_DWORD *)a3; *(_DWORD *)a4 = v4[1]; *(_DWORD *)(a4 + 4) = v4[2]; result = v4[3]; *(_DWORD *)(a4 + 8) = result; return result; } //----- (0080A2F0) -------------------------------------------------------- float *__cdecl sub_80A2F0(int a1, float *a2, float *a3, float *a4) { float v4; // ST00_4 float v5; // ST04_4 double v6; // st7 float *result; // eax float v8; // ST08_4 v4 = a2[1] - a3[1]; v5 = a2[2] - a3[2]; v6 = a2[3] - a3[3]; result = a4; *a4 = v4; a4[1] = v5; v8 = v6; a4[2] = v8; return result; } //----- (0080A330) -------------------------------------------------------- int __cdecl sub_80A330(int a1, unsigned int a2) { unsigned int v2; // edi int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // esi int v7; // [esp+10h] [ebp+Ch] v2 = a2; v3 = 16 * a2 | -((unsigned __int64)a2 >> 28 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v7 = result; } else { v7 = 0; result = 0; } if ( v2 ) { v6 = result; do { sub_8045A0(a1); v6 += 16; --v2; } while ( v2 ); result = v7; } return result; } // 8045A0: using guessed type _DWORD __stdcall sub_8045A0(_DWORD); //----- (0080A3A0) -------------------------------------------------------- int __cdecl sub_80A3A0(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_8045C0(a1, v4); v4 += 16; --v3; } while ( v3 ); } return result; } //----- (0080A3D0) -------------------------------------------------------- char __cdecl sub_80A3D0(float a1, int a2, int a3) { char *v3; // edi int v4; // ebx int v5; // ecx int *v6; // eax char *v7; // ebx int v8; // eax int v10; // [esp+20h] [ebp-10h] int v11; // [esp+24h] [ebp-Ch] int v12; // [esp+28h] [ebp-8h] int v13; // [esp+2Ch] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v13, 16) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 16 * v4 | -((unsigned __int64)(unsigned int)v4 >> 28 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (char *)(v6 + 1); } else { v7 = 0; } memcpy_s(v7, 16 * (*(_DWORD *)a3 + 1), v3, 16 * v13); if ( *(_DWORD *)a3 > (unsigned int)v13 ) memcpy_s(&v7[16 * v13 + 16], 16 * (*(_DWORD *)a3 - v13), &v3[16 * v13], 16 * (*(_DWORD *)a3 - v13)); sub_804810((int)&v10, a1, (int)v3, 5, *(_DWORD *)a3, 16); v8 = (int)&v7[16 * v13]; *(float *)v8 = a1; *(_DWORD *)(v8 + 4) = v10; *(_DWORD *)(v8 + 8) = v11; *(_DWORD *)(v8 + 12) = v12; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v7; return 1; } //----- (0080A4E0) -------------------------------------------------------- signed int sub_80A4E0() { signed int result; // eax if ( byte_BA3B9F ) return 0; result = 1; byte_BA3B9F = 1; dword_BA426C = (int)sub_80A330; dword_BA3F0C = (int)sub_80A3A0; dword_BA3E7C = (int)sub_80A290; dword_BA3DEC = (int)sub_807950; dword_BA3D5C = (int)sub_805340; byte_BA3BF3 = 16; dword_BA41DC = (int)sub_80A280; dword_BA414C = (int)sub_80A2C0; dword_BA40BC = (int)sub_80A2F0; dword_BA402C = (int)sub_8045F0; dword_BA3F9C = (int)sub_807940; dword_BA3C3C = (int)nullsub_6; dword_BA3CCC = (int)sub_80A3D0; return result; } // BA3B9F: using guessed type char byte_BA3B9F; // BA3BF3: using guessed type char byte_BA3BF3; // BA3C3C: using guessed type int dword_BA3C3C; // BA3CCC: using guessed type int dword_BA3CCC; // BA3D5C: using guessed type int dword_BA3D5C; // BA3DEC: using guessed type int dword_BA3DEC; // BA3E7C: using guessed type int dword_BA3E7C; // BA3F0C: using guessed type int dword_BA3F0C; // BA3F9C: using guessed type int dword_BA3F9C; // BA402C: using guessed type int dword_BA402C; // BA40BC: using guessed type int dword_BA40BC; // BA414C: using guessed type int dword_BA414C; // BA41DC: using guessed type int dword_BA41DC; // BA426C: using guessed type int dword_BA426C; //----- (0080A580) -------------------------------------------------------- void __cdecl sub_80A580(int a1, signed int a2, unsigned __int8 a3) { sub_805B00(a1, a2, a3); } //----- (0080A590) -------------------------------------------------------- int __cdecl sub_80A590(signed int a1, unsigned int a2) { unsigned int v2; // ebx int v3; // ecx unsigned int *v4; // eax int result; // eax int v6; // edi float *v7; // esi char *v8; // esi int v9; // [esp+28h] [ebp+Ch] int v10; // [esp+28h] [ebp+Ch] v2 = a2; v3 = 20 * a2 | -(20 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( v4 ) { *v4 = a2; result = (int)(v4 + 1); v6 = a2 - 1; v9 = result; if ( (signed int)(v2 - 1) >= 0 ) { v7 = (float *)(result + 4); do { sub_874B00(v7, 0.0, 0.0, 0.0, 0.0); v7 += 5; --v6; } while ( v6 >= 0 ); result = v9; } v10 = result; } else { v10 = 0; result = 0; } if ( v2 ) { v8 = (char *)result; do { sub_8066A0(v8, a1); v8 += 20; --v2; } while ( v2 ); result = v10; } return result; } //----- (0080A630) -------------------------------------------------------- int __cdecl sub_80A630(signed int a1, int a2, int a3) { int v3; // edi int v4; // esi int result; // eax v3 = a3; if ( a3 ) { v4 = a2; do { result = sub_805760(a1, v4); v4 += 20; --v3; } while ( v3 ); } return result; } //----- (0080A660) -------------------------------------------------------- char __cdecl sub_80A660(float a1, int a2, int a3) { char *v3; // ebx int v4; // edi int v5; // ecx int *v6; // eax int v7; // eax float *v8; // edi char *v9; // edi int v10; // eax int v12; // [esp+20h] [ebp-1Ch] int v13; // [esp+24h] [ebp-18h] int v14; // [esp+28h] [ebp-14h] int v15; // [esp+2Ch] [ebp-10h] int v16; // [esp+30h] [ebp-Ch] int v17; // [esp+34h] [ebp-8h] int v18; // [esp+38h] [ebp-4h] v3 = *(char **)a2; if ( !sub_817010(a1, *(_DWORD *)a2, *(_DWORD *)a3, (int)&v18, 20) ) return 0; v4 = *(_DWORD *)a3 + 1; v5 = 20 * v4 | -(20 * (unsigned __int64)(unsigned int)v4 >> 32 != 0); v6 = (int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = v4; v7 = (int)(v6 + 1); v16 = v7; v17 = v4 - 1; if ( v4 - 1 >= 0 ) { v8 = (float *)(v7 + 4); do { sub_874B00(v8, 0.0, 0.0, 0.0, 0.0); v8 += 5; --v17; } while ( v17 >= 0 ); v7 = v16; } v9 = (char *)v7; } else { v9 = 0; } memcpy_s(v9, 4 * (5 * *(_DWORD *)a3 + 5), v3, 20 * v18); if ( *(_DWORD *)a3 > (unsigned int)v18 ) memcpy_s(&v9[20 * v18 + 20], 20 * (*(_DWORD *)a3 - v18), &v3[20 * v18], 20 * (*(_DWORD *)a3 - v18)); sub_805A30((int)&v12, a1, (int)v3, 5, *(_DWORD *)a3, 20); v10 = (int)&v9[20 * v18]; *(float *)v10 = a1; *(_DWORD *)(v10 + 4) = v12; *(_DWORD *)(v10 + 8) = v13; *(_DWORD *)(v10 + 12) = v14; *(_DWORD *)(v10 + 16) = v15; ++*(_DWORD *)a3; if ( v3 ) operator delete(v3 - 4); *(_DWORD *)a2 = v9; sub_805B00((int)v9, *(_DWORD *)a3, 0x14u); return 1; } //----- (0080A7C0) -------------------------------------------------------- signed int sub_80A7C0() { signed int result; // eax result = 0; if ( !byte_BA3BA0 ) { dword_BA41F4 = 0; dword_BA40D4 = 0; dword_BA4044 = 0; byte_BA3BA0 = 1; dword_BA4284 = (int)sub_80A590; dword_BA3F24 = (int)sub_80A630; dword_BA3E94 = (int)sub_807270; dword_BA3E04 = (int)sub_807C00; dword_BA3D74 = (int)sub_805340; byte_BA3BF9 = 20; dword_BA4164 = (int)sub_809E80; dword_BA3FB4 = (int)sub_809E70; dword_BA3C54 = (int)sub_80A580; dword_BA3CE4 = (int)sub_80A660; result = 1; } return result; } // BA3BA0: using guessed type char byte_BA3BA0; // BA3BF9: using guessed type char byte_BA3BF9; // BA3C54: using guessed type int dword_BA3C54; // BA3CE4: using guessed type int dword_BA3CE4; // BA3D74: using guessed type int dword_BA3D74; // BA3E04: using guessed type int dword_BA3E04; // BA3E94: using guessed type int dword_BA3E94; // BA3F24: using guessed type int dword_BA3F24; // BA3FB4: using guessed type int dword_BA3FB4; // BA4044: using guessed type int dword_BA4044; // BA40D4: using guessed type int dword_BA40D4; // BA4164: using guessed type int dword_BA4164; // BA41F4: using guessed type int dword_BA41F4; // BA4284: using guessed type int dword_BA4284; //----- (0080A850) -------------------------------------------------------- unsigned int sub_80A850() { unsigned int result; // eax if ( !byte_BA3BA1 ) { byte_BA3BA1 = 1; sub_875C70((int)"NiAlphaController", (int)sub_815BC0); sub_875C70((int)"NiBlendAccumTransformInterpolator", (int)sub_82E6C0); sub_875C70((int)"NiBlendBoolInterpolator", (int)sub_82DFD0); sub_875C70((int)"NiBlendColorInterpolator", (int)sub_82DA30); sub_875C70((int)"NiBlendFloatInterpolator", (int)sub_82D5E0); sub_875C70((int)"NiBlendPoint3Interpolator", (int)sub_82D090); sub_875C70((int)"NiBlendQuaternionInterpolator", (int)sub_82CA50); sub_875C70((int)"NiBlendTransformInterpolator", (int)sub_82C3C0); sub_875C70((int)"NiBoneLODController", (int)sub_811650); sub_875C70((int)"NiBoolData", (int)sub_82BF80); sub_875C70((int)"NiBoolInterpolator", (int)sub_82BCF0); sub_875C70((int)"NiBoolTimelineInterpolator", (int)sub_82B7A0); sub_875C70((int)"NiBSplineBasisData", (int)sub_82B360); sub_875C70((int)"NiBSplineData", (int)sub_82A6C0); sub_875C70((int)"NiBSplineColorInterpolator", (int)sub_82A520); sub_875C70((int)"NiBSplineCompColorInterpolator", (int)sub_82A160); sub_875C70((int)"NiBSplineCompFloatInterpolator", (int)sub_829E70); sub_875C70((int)"NiBSplineCompPoint3Interpolator", (int)sub_829BF0); sub_875C70((int)"NiBSplineCompTransformInterpolator", (int)sub_8296A0); sub_875C70((int)"NiBSplineFloatInterpolator", (int)sub_8292A0); sub_875C70((int)"NiBSplinePoint3Interpolator", (int)sub_829020); sub_875C70((int)"NiBSplineTransformInterpolator", (int)sub_828950); sub_875C70((int)"NiColorData", (int)sub_828320); sub_875C70((int)"NiColorExtraDataController", (int)sub_827FB0); sub_875C70((int)"NiColorInterpolator", (int)sub_827D10); sub_875C70((int)"NiControllerManager", (int)sub_816F40); sub_875C70((int)"NiControllerSequence", (int)sub_80C300); sub_875C70((int)"NiFlipController", (int)sub_8274C0); sub_875C70((int)"NiFloatData", (int)sub_826C40); sub_875C70((int)"NiFloatExtraDataController", (int)sub_826970); sub_875C70((int)"NiFloatInterpolator", (int)sub_826450); sub_875C70((int)"NiFloatsExtraDataController", (int)sub_825F20); sub_875C70((int)"NiFloatsExtraDataPoint3Controller", (int)sub_825AB0); sub_875C70((int)"NiGeomMorpherController", (int)sub_825680); sub_875C70((int)"NiKeyframeController", (int)sub_810600); sub_875C70((int)"NiKeyframeData", (int)sub_824340); sub_875C70((int)"NiKeyframeManager", (int)sub_824260); sub_875C70((int)"NiLightColorController", (int)sub_8236A0); sub_875C70((int)"NiLightDimmerController", (int)sub_8231A0); sub_875C70((int)"NiLookAtController", (int)sub_822EC0); sub_875C70((int)"NiLookAtInterpolator", (int)sub_822630); sub_875C70((int)"NiMaterialColorController", (int)sub_815950); sub_875C70((int)"NiMorphData", (int)sub_820E70); sub_875C70((int)"NiMultiTargetTransformController", (int)sub_820BC0); sub_875C70((int)"NiPathController", (int)sub_8202A0); sub_875C70((int)"NiPathInterpolator", (int)sub_81EA10); sub_875C70((int)"NiPoint3Interpolator", (int)sub_81CBD0); sub_875C70((int)"NiPosData", (int)sub_81C220); sub_875C70((int)"NiQuaternionInterpolator", (int)sub_81BFF0); sub_875C70((int)"NiRollController", (int)sub_81B800); sub_875C70((int)"NiRotData", (int)sub_81B270); sub_875C70((int)"NiSequence", (int)sub_81AC60); sub_875C70((int)"NiSequenceStreamHelper", (int)sub_81A6D0); sub_875C70((int)"NiStringPalette", (int)sub_81A530); sub_875C70((int)"NiTextKeyExtraData", (int)sub_80B050); sub_875C70((int)"NiTextureTransformController", (int)sub_815340); sub_875C70((int)"NiTransformController", (int)sub_810600); sub_875C70((int)"NiTransformData", (int)sub_824340); sub_875C70((int)"NiTransformInterpolator", (int)sub_81A2D0); sub_875C70((int)"NiUVController", (int)sub_819280); sub_875C70((int)"NiUVData", (int)sub_818490); sub_875C70((int)"NiVisController", (int)sub_818410); sub_875C70((int)"NiVisData", (int)sub_82BF80); result = sub_877000((unsigned int)sub_8181D0); } return result; } // 80C300: using guessed type int sub_80C300(); // 810600: using guessed type int sub_810600(); // 811650: using guessed type int sub_811650(); // 815BC0: using guessed type int sub_815BC0(); // 818410: using guessed type int sub_818410(); // 81B800: using guessed type int sub_81B800(); // 81EA10: using guessed type int sub_81EA10(); // 8202A0: using guessed type int sub_8202A0(); // 822EC0: using guessed type int sub_822EC0(); // 8231A0: using guessed type int sub_8231A0(); // 829020: using guessed type int sub_829020(); // 82A6C0: using guessed type int sub_82A6C0(); // 82BCF0: using guessed type int sub_82BCF0(); // 82E6C0: using guessed type int sub_82E6C0(); // BA3BA1: using guessed type char byte_BA3BA1; //----- (0080AC40) -------------------------------------------------------- _DWORD *sub_80AC40() { _DWORD *result; // eax int v1; // ebx _DWORD *v2; // esi _DWORD *v3; // ecx int v4; // edx int v5; // ebx int v6; // eax int *v7; // edi int v8; // esi int v9; // esi int v10; // [esp+4h] [ebp-8h] _DWORD *v11; // [esp+8h] [ebp-4h] result = (_DWORD *)dword_BA3B2C; if ( dword_BA3B2C ) { do { v1 = *(result - 1); v2 = (_DWORD *)*result; v3 = result - 1; v4 = 7 * v1; v5 = v1 - 1; v11 = (_DWORD *)*result; v10 = (int)(result - 1); v6 = (int)&result[v4]; if ( v5 >= 0 ) { v7 = (int *)(v6 + 20); do { v8 = *(v7 - 7); v7 -= 7; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *v7 = 0; } v9 = *v7; if ( *v7 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); --v5; } while ( v5 >= 0 ); v2 = v11; v3 = (_DWORD *)v10; } operator delete(v3); result = v2; } while ( v2 ); } dword_BA3B30 = 0; dword_BA3B2C = 0; return result; } // BA3B2C: using guessed type int dword_BA3B2C; // BA3B30: using guessed type int dword_BA3B30; //----- (0080AD00) -------------------------------------------------------- _DWORD *sub_80AD00() { _DWORD *result; // eax if ( byte_BA3BA1 ) { byte_BA3BA1 = 0; sub_875C90((int)"NiAlphaController"); sub_875C90((int)"NiBlendAccumTransformInterpolator"); sub_875C90((int)"NiBlendBoolInterpolator"); sub_875C90((int)"NiBlendColorInterpolator"); sub_875C90((int)"NiBlendFloatInterpolator"); sub_875C90((int)"NiBlendPoint3Interpolator"); sub_875C90((int)"NiBlendQuaternionInterpolator"); sub_875C90((int)"NiBlendTransformInterpolator"); sub_875C90((int)"NiBoneLODController"); sub_875C90((int)"NiBoolData"); sub_875C90((int)"NiBoolInterpolator"); sub_875C90((int)"NiBoolTimelineInterpolator"); sub_875C90((int)"NiBSplineBasisData"); sub_875C90((int)"NiBSplineData"); sub_875C90((int)"NiBSplineColorInterpolator"); sub_875C90((int)"NiBSplineCompColorInterpolator"); sub_875C90((int)"NiBSplineCompFloatInterpolator"); sub_875C90((int)"NiBSplineCompPoint3Interpolator"); sub_875C90((int)"NiBSplineCompTransformInterpolator"); sub_875C90((int)"NiBSplineFloatInterpolator"); sub_875C90((int)"NiBSplinePoint3Interpolator"); sub_875C90((int)"NiBSplineTransformInterpolator"); sub_875C90((int)"NiColorData"); sub_875C90((int)"NiColorExtraDataController"); sub_875C90((int)"NiColorInterpolator"); sub_875C90((int)"NiControllerManager"); sub_875C90((int)"NiControllerSequence"); sub_875C90((int)"NiFlipController"); sub_875C90((int)"NiFloatData"); sub_875C90((int)"NiFloatExtraDataController"); sub_875C90((int)"NiFloatInterpolator"); sub_875C90((int)"NiFloatsExtraDataController"); sub_875C90((int)"NiFloatsExtraDataPoint3Controller"); sub_875C90((int)"NiGeomMorpherController"); sub_875C90((int)"NiKeyframeController"); sub_875C90((int)"NiKeyframeData"); sub_875C90((int)"NiKeyframeManager"); sub_875C90((int)"NiLightColorController"); sub_875C90((int)"NiLightDimmerController"); sub_875C90((int)"NiLookAtController"); sub_875C90((int)"NiLookAtInterpolator"); sub_875C90((int)"NiMaterialColorController"); sub_875C90((int)"NiMorphData"); sub_875C90((int)"NiMultiTargetTransformController"); sub_875C90((int)"NiPathController"); sub_875C90((int)"NiPathInterpolator"); sub_875C90((int)"NiPoint3Interpolator"); sub_875C90((int)"NiPosData"); sub_875C90((int)"NiQuaternionInterpolator"); sub_875C90((int)"NiRollController"); sub_875C90((int)"NiRotData"); sub_875C90((int)"NiSequence"); sub_875C90((int)"NiSequenceStreamHelper"); sub_875C90((int)"NiStringPalette"); sub_875C90((int)"NiTextKeyExtraData"); sub_875C90((int)"NiTextureTransformController"); sub_875C90((int)"NiTransformController"); sub_875C90((int)"NiTransformData"); sub_875C90((int)"NiTransformInterpolator"); sub_875C90((int)"NiUVController"); sub_875C90((int)"NiUVData"); sub_875C90((int)"NiVisController"); sub_875C90((int)"NiVisData"); sub_875CB0((int)sub_8181D0); result = sub_80AC40(); } return result; } // BA3BA1: using guessed type char byte_BA3BA1; //----- (0080AFE0) -------------------------------------------------------- int __thiscall sub_80AFE0(const char **this, int a2) { int result; // eax if ( *(float *)a2 != *(float *)this || (result = strcmp(this[1], *(const char **)(a2 + 4))) != 0 ) result = 1; return result; } //----- (0080B040) -------------------------------------------------------- char *sub_80B040() { return dword_BA3BA8; } //----- (0080B050) -------------------------------------------------------- _DWORD *sub_80B050() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x14u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiTextKeyExtraData::`vftable'; v1[3] = 0; v1[4] = 0; return v1; } // A208AC: using guessed type void *NiTextKeyExtraData::`vftable'; //----- (0080B090) -------------------------------------------------------- char __thiscall sub_80B090(void *this, int a2) { void *v2; // esi unsigned int v4; // ebx unsigned int v5; // edi const char **v6; // esi int v7; // eax int v8; // [esp+10h] [ebp+8h] v2 = this; if ( !a2 || !sub_85BB20(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 3); if ( v4 == *(_DWORD *)(a2 + 12) ) { v5 = 0; if ( !v4 ) return 1; v6 = (const char **)*((_DWORD *)v2 + 4); v7 = *(_DWORD *)(a2 + 16) - (_DWORD)v6; v8 = *(_DWORD *)(a2 + 16) - (_DWORD)v6; while ( !(unsigned __int8)sub_80AFE0(v6, (int)v6 + v7) ) { ++v5; v6 += 2; if ( v5 >= v4 ) return 1; v7 = v8; } } return 0; } //----- (0080B100) -------------------------------------------------------- void __thiscall sub_80B100(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi int v4; // edi int v5; // ecx _DWORD *v6; // eax int v7; // ecx int v8; // edx _DWORD *v9; // eax int v10; // eax unsigned int v11; // edi v3 = this; sub_868EF0(this, a2, a3); *(_DWORD *)(a2 + 12) = v3[3]; if ( v3[3] && (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3) == (_DWORD)dword_BA3BA8 ) { v4 = v3[3]; v5 = 8 * v3[3] | -((unsigned __int64)(unsigned int)v3[3] >> 29 != 0); v6 = operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { v7 = v4 - 1; *v6 = v4; v8 = (int)(v6 + 1); if ( v4 - 1 >= 0 ) { v9 = v6 + 2; do { *v9 = 0; v9 += 2; --v7; } while ( v7 >= 0 ); } v10 = v8; } else { v10 = 0; } v11 = 0; *(_DWORD *)(a2 + 16) = v10; if ( v3[3] ) { do { *(float *)(8 * v11 + *(_DWORD *)(a2 + 16)) = *(float *)(8 * v11 + v3[4]); sub_810690((void **)(8 * v11 + *(_DWORD *)(a2 + 16)), *(const char **)(v3[4] + 8 * v11 + 4)); ++v11; } while ( v11 < v3[3] ); } } else { *(_DWORD *)(a2 + 16) = 0; } } //----- (0080B1E0) -------------------------------------------------------- int __thiscall sub_80B1E0(const char **this, _DWORD *a2) { const char **v2; // edi int (__cdecl *v3)(int, const char **, signed int, int *, signed int); // edx int v4; // ST00_4 int result; // eax unsigned int v6; // esi int v7; // [esp+Ch] [ebp-4h] v2 = this; sub_868DB0(this, a2); v3 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(a2[89] + 8); v4 = a2[89]; v7 = 4; result = v3(v4, v2 + 3, 4, &v7, 1); v6 = 0; if ( v2[3] ) { do result = sub_810730((const char **)&v2[4][8 * v6++], (signed int)a2); while ( v6 < (unsigned int)v2[3] ); } return result; } //----- (0080B240) -------------------------------------------------------- _DWORD *__thiscall sub_80B240(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiTextKeyExtraData::`vftable'; v4[3] = 0; v4[4] = 0; sub_80B100(v2, (int)v4, a2); result = v4; } else { sub_80B100(v2, 0, a2); result = 0; } return result; } // A208AC: using guessed type void *NiTextKeyExtraData::`vftable'; //----- (0080B2A0) -------------------------------------------------------- size_t __thiscall sub_80B2A0(int *this, size_t a2) { signed int v2; // ebx int v3; // eax int v4; // ST00_4 void (__cdecl *v5)(int, size_t *, signed int, _DWORD **, signed int); // eax size_t result; // eax size_t v7; // esi size_t v8; // ecx size_t *v9; // eax int v10; // ecx int v11; // edx _DWORD *v12; // eax size_t v13; // esi _DWORD *v14; // edi int v15; // edx int *v16; // [esp+4h] [ebp-8h] _DWORD *v17; // [esp+8h] [ebp-4h] v2 = a2; v16 = this; sub_868F80(this, a2); v3 = *(_DWORD *)(v2 + 352); v4 = v3; v5 = *(void (__cdecl **)(int, size_t *, signed int, _DWORD **, signed int))(v3 + 4); v17 = (_DWORD *)4; v5(v4, &a2, 4, &v17, 1); result = a2; if ( a2 ) { v7 = a2; v8 = 8 * a2 | -((unsigned __int64)a2 >> 29 != 0); v9 = (size_t *)operator new((v8 + 4) | -__CFADD__(v8, 4)); if ( v9 ) { v10 = v7 - 1; *v9 = v7; v11 = (int)(v9 + 1); if ( (signed int)(v7 - 1) >= 0 ) { v12 = v9 + 2; do { *v12 = 0; v12 += 2; --v10; } while ( v10 >= 0 ); } v17 = (_DWORD *)v11; } else { v17 = 0; } result = a2; v13 = 0; if ( a2 ) { v14 = v17; do { sub_8106F0(v14, v2); result = a2; ++v13; v14 += 2; } while ( v13 < a2 ); } v15 = (int)v17; v16[3] = result; v16[4] = v15; } return result; } //----- (0080B370) -------------------------------------------------------- unsigned int __thiscall sub_80B370(_DWORD *this, void *a2) { _DWORD *v2; // esi _DWORD *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx unsigned int result; // eax unsigned int v9; // ebx char *v10; // eax int v11; // ecx char *v12; // edi size_t v13; // edi char *v14; // ebx char *v15; // eax unsigned int v16; // edi char *v17; // [esp+10h] [ebp-10h] _DWORD *v18; // [esp+14h] [ebp-Ch] char *v19; // [esp+18h] [ebp-8h] unsigned int v20; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = this; v18 = this; sub_869050(this, (char *)a2); v4 = sub_8784D0(*(int *)dword_BA3BA8); v5 = v2[3]; a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[3]); v7 = v2[3]; a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); result = sub_823870(v2, v7, &a2); v9 = 0; v20 = 0; if ( v3[3] ) { while ( 1 ) { a2 = *(void **)(v3[4] + 8 * v9); v10 = sub_8786B0((int)"Time", *(float *)&a2); v11 = v3[4]; a2 = v10; v12 = sub_878740((int)"Text", *(_DWORD *)(v11 + 8 * v9 + 4)); v19 = v12; v13 = strlen(v12) + strlen((const char *)a2) + 4; v14 = (char *)operator new(v13); sub_7FF6E0(v14, v13, "%s : %s", a2, v19); v15 = sub_878740((int)"TextKey", (int)v14); v16 = v2[3]; v17 = v15; if ( v16 < v2[2] || (sub_8237A0(v2, v16 + v2[5]), v15 = v17, v16 < v2[2]) ) { if ( v16 < v2[3] ) { if ( v15 ) { if ( !*(_DWORD *)(v2[1] + 4 * v16) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v16) ) { --v2[4]; } } else { v2[3] = v16 + 1; if ( v15 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v16) = v15; } operator delete(a2); operator delete(v19); operator delete(v14); result = v20 + 1; v20 = result; if ( result >= v18[3] ) break; v9 = result; v3 = v18; } } return result; } //----- (0080B520) -------------------------------------------------------- _DWORD *__thiscall sub_80B520(_DWORD *this, char a2) { int v2; // eax int v3; // esi void *v4; // ebx void **v5; // edi int i; // esi _DWORD *v8; // [esp+4h] [ebp-4h] v2 = this[4]; v8 = this; *this = &NiTextKeyExtraData::`vftable'; if ( v2 ) { v3 = *(_DWORD *)(v2 - 4); v4 = (void *)(v2 - 4); v5 = (void **)(v2 + 8 * v3); for ( i = v3 - 1; i >= 0; --i ) { v5 -= 2; sub_810680(v5); } operator delete(v4); this = v8; } sub_868D20(this); if ( a2 & 1 ) operator delete(v8); return v8; } // A208AC: using guessed type void *NiTextKeyExtraData::`vftable'; //----- (0080B590) -------------------------------------------------------- char __thiscall sub_80B590(_DWORD *this, int a2) { _DWORD *v2; // eax v2 = *(_DWORD **)(a2 + 88); if ( !v2 ) return 1; while ( v2 != this ) { v2 = (_DWORD *)v2[22]; if ( !v2 ) return 1; } return 0; } //----- (0080B5C0) -------------------------------------------------------- _DWORD *__thiscall sub_80B5C0(_DWORD *this, size_t a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST08_4 v2 = this; sub_85BA50(this); *v2 = &NiStringPalette::`vftable'; v2[2] = 0; v2[3] = a2; v2[4] = 0; if ( a2 ) { v3 = operator new(a2); v4 = v2[3]; v2[2] = v3; memset(v3, 0, v4); } return v2; } // A20934: using guessed type void *NiStringPalette::`vftable'; //----- (0080B610) -------------------------------------------------------- void *sub_80B610() { return &unk_BA42F0; } //----- (0080B620) -------------------------------------------------------- char __thiscall sub_80B620(_DWORD *this, const char *a2, _DWORD *a3) { _DWORD *v3; // eax bool v4; // zf const char *v5; // ecx unsigned int v6; // eax _DWORD *v8; // [esp+Ch] [ebp-4h] v3 = this; *a3 = 0; v4 = this[4] == 0; v5 = (const char *)this[2]; v8 = v3; if ( v4 ) return 0; while ( strcmp(v5, a2) ) { v6 = strlen(v5) + 1; *a3 += v6; v5 += v6; if ( *a3 >= v8[4] ) return 0; } return 1; } //----- (0080B6B0) -------------------------------------------------------- errno_t __thiscall sub_80B6B0(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[2]); v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; return strcpy_s(v4, v3 + 1, Src); } //----- (0080B700) -------------------------------------------------------- void __thiscall sub_80B700(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[23]); v2[23] = 0; if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[23] = v4; strcpy_s(v4, v3 + 1, Src); } } //----- (0080B760) -------------------------------------------------------- char *sub_80B760() { return dword_BA4350; } //----- (0080B770) -------------------------------------------------------- void *__thiscall sub_80B770(void *this, char a2) { void *v2; // esi v2 = this; sub_820510(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0080B7A0) -------------------------------------------------------- void *__thiscall sub_80B7A0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A20928: using guessed type void *NiTArray::`vftable'; //----- (0080B7D0) -------------------------------------------------------- float *__thiscall sub_80B7D0(float *this) { float *v1; // esi v1 = this; sub_85BA50(this); v1[7] = 1.0; v1[2] = 0.0; v1[3] = 0.0; v1[4] = 0.0; v1[5] = 0.0; v1[6] = 0.0; *(_DWORD *)v1 = &NiControllerSequence::`vftable'; v1[8] = 0.0; v1[10] = 1.0; v1[9] = 0.0; v1[11] = 3.4028235e38; v1[12] = -3.4028235e38; v1[13] = -3.4028235e38; v1[14] = -3.4028235e38; v1[16] = 0.0; v1[17] = 0.0; v1[15] = -3.4028235e38; v1[18] = -3.4028235e38; v1[19] = -3.4028235e38; v1[20] = -3.4028235e38; v1[22] = 0.0; v1[23] = 0.0; v1[24] = 0.0; v1[21] = -3.4028235e38; v1[25] = 0.0; return v1; } // A20A0C: using guessed type void *NiControllerSequence::`vftable'; //----- (0080B880) -------------------------------------------------------- void *sub_80B880() { return &unk_BA3BB0; } //----- (0080B890) -------------------------------------------------------- double __thiscall sub_80B890(_DWORD *this, int a2) { int v2; // edx int v3; // eax unsigned int v4; // ebx int v5; // eax unsigned int v6; // esi _DWORD *v7; // edi int v9; // [esp+0h] [ebp-8h] v2 = a2; if ( !a2 ) return -3.4028235e38; v3 = this[8]; if ( !v3 ) return -3.4028235e38; v4 = *(_DWORD *)(v3 + 12); v5 = *(_DWORD *)(v3 + 16); v6 = 0; v9 = v5; if ( !v4 ) return -3.4028235e38; v7 = (_DWORD *)(v5 + 4); while ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 4))(v2, *v7) ) { ++v6; v7 += 2; if ( v6 >= v4 ) return -3.4028235e38; v2 = a2; } return *(float *)(v9 + 8 * v6); } //----- (0080B910) -------------------------------------------------------- int *__thiscall sub_80B910(int *this, int *a2) { int *v2; // esi int v3; // ebx int v4; // eax v2 = this; v3 = *this; if ( *this != *a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *a2; *v2 = *a2; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v2[1] = a2[1]; v2[2] = a2[2]; v2[3] = a2[3]; v2[4] = a2[4]; v2[5] = a2[5]; return v2; } //----- (0080B980) -------------------------------------------------------- _DWORD *__thiscall sub_80B980(_DWORD *this, int *a2) { _DWORD *v2; // edi int v3; // esi int v4; // eax int v5; // esi int v6; // eax v2 = this; v3 = *this; if ( *this != *a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *a2; *v2 = *a2; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = v2[1]; if ( v5 != a2[1] ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = a2[1]; v2[1] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } v2[2] = a2[2]; *((_BYTE *)v2 + 12) = *((_BYTE *)a2 + 12); return v2; } //----- (0080BA20) -------------------------------------------------------- void __thiscall sub_80BA20(_DWORD *this) { _DWORD *v1; // edi int v2; // ebx int v3; // eax int v4; // esi _DWORD *v5; // [esp+4h] [ebp-8h] unsigned int v6; // [esp+8h] [ebp-4h] v1 = this; v6 = 0; if ( this[3] ) { v2 = 0; do { v3 = v1[5]; v4 = *(_DWORD *)(v3 + v2 + 4); v5 = (_DWORD *)(v3 + v2 + 4); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } *v5 = 0; } *(_DWORD *)(v1[5] + v2 + 8) = 0; v2 += 16; ++v6; } while ( v6 < v1[3] ); } } //----- (0080BAA0) -------------------------------------------------------- void __thiscall sub_80BAA0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // edi int v4; // esi int v5; // eax int v6; // ecx unsigned int v7; // [esp+18h] [ebp-4h] v2 = 0; v3 = this; v7 = 0; if ( this[3] ) { do { v4 = v3[5]; v5 = *(_DWORD *)(v4 + v2); if ( v5 ) { v6 = *(_DWORD *)(v4 + v2 + 8); if ( v6 ) *(_BYTE *)(v4 + v2 + 12) = (*(int (__stdcall **)(int, _DWORD, int, _DWORD))(*(_DWORD *)v6 + 136))( v5, 0.0, a2, 1.0); } v2 += 16; ++v7; } while ( v7 < v3[3] ); } } //----- (0080BB00) -------------------------------------------------------- void __thiscall sub_80BB00(_DWORD *this) { int v1; // ebx _DWORD *v2; // edi int v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi int v5; // [esp+8h] [ebp-8h] unsigned int v6; // [esp+Ch] [ebp-4h] v1 = 0; v2 = this; v6 = 0; if ( this[3] ) { do { v3 = v2[5]; if ( *(_DWORD *)(v3 + v1 + 8) ) { (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(v3 + v1 + 8) + 140))( &v5, *(unsigned __int8 *)(v3 + v1 + 12)); if ( v5 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v4 ) (**v4)(v4, 1); } } } v1 += 16; ++v6; } while ( v6 < v2[3] ); } } //----- (0080BB80) -------------------------------------------------------- double __thiscall sub_80BB80(int this, float a2, char a3) { double v3; // st6 float v4; // ST0C_4 double v5; // st6 long double v6; // st7 float v7; // ST0C_4 float v8; // ST0C_4 double v9; // rt1 long double v10; // st6 double v11; // st7 double v12; // st7 double v13; // st7 double v14; // st6 double v15; // rtt double v16; // rt0 double v17; // st6 double result; // st7 float v19; // [esp+4h] [ebp-Ch] float v20; // [esp+8h] [ebp-8h] float v21; // [esp+8h] [ebp-8h] float v22; // [esp+Ch] [ebp-4h] v20 = *(float *)(this + 56); if ( -3.4028235e38 == *(float *)(this + 52) ) { v20 = 0.0; v3 = a2; } else { v3 = a2 - *(float *)(this + 52); } v4 = v3; v21 = *(float *)(this + 40) * v4 + v20; v5 = v21; v22 = v21; if ( *(_DWORD *)(this + 36) ) { v11 = v21; goto LABEL_11; } v19 = *(float *)(this + 48) - *(float *)(this + 44); v6 = v19; if ( v19 == 0.0 ) { v11 = v21; v10 = *(float *)(this + 44); goto LABEL_10; } if ( *(float *)(this + 48) != v5 ) { v7 = v5 - *(float *)(this + 44); v8 = fmod(v7, v6); v22 = v8 + *(float *)(this + 44); v6 = v19; v5 = v21; } if ( *(float *)(this + 44) > (double)v22 ) { v9 = v5; v10 = v6 + v22; v11 = v9; LABEL_10: v22 = v10; LABEL_11: v5 = v11; v12 = v22; goto LABEL_12; } v12 = v22; LABEL_12: if ( *(float *)(this + 48) >= v12 ) { if ( *(float *)(this + 44) <= v12 ) { v15 = v5; v14 = v12; v13 = v15; } else { v13 = v5; v14 = *(float *)(this + 44); } } else { v13 = v5; v14 = *(float *)(this + 48); } if ( !a3 ) return v14; v16 = v14; v17 = v13; result = v16; *(float *)(this + 56) = v17; *(float *)(this + 52) = a2; *(float *)(this + 60) = v16; return result; } //----- (0080BCA0) -------------------------------------------------------- char __thiscall sub_80BCA0(_DWORD *this, int a2) { int v2; // eax int v3; // ecx unsigned int v4; // ebx unsigned int v5; // esi int v6; // ecx int v7; // edi unsigned int v8; // esi const char **v9; // edi char result; // al const char **v11; // edi const char *v12; // ebx const char **v13; // esi unsigned int v14; // edi unsigned int v15; // [esp+0h] [ebp-1Ch] int v16; // [esp+4h] [ebp-18h] int v17; // [esp+8h] [ebp-14h] const char *v18; // [esp+Ch] [ebp-10h] unsigned int v19; // [esp+10h] [ebp-Ch] const char **v20; // [esp+14h] [ebp-8h] const char **v21; // [esp+14h] [ebp-8h] unsigned int v22; // [esp+18h] [ebp-4h] unsigned int v23; // [esp+18h] [ebp-4h] char v24; // [esp+27h] [ebp+Bh] char v25; // [esp+27h] [ebp+Bh] v2 = this[8]; if ( !v2 ) return 0; v3 = *(_DWORD *)(a2 + 32); if ( !v3 ) return 0; v4 = *(_DWORD *)(v2 + 12); v5 = *(_DWORD *)(v3 + 12); v6 = *(_DWORD *)(v3 + 16); v7 = *(_DWORD *)(v2 + 16); v19 = v5; v15 = *(_DWORD *)(v2 + 12); v17 = *(_DWORD *)(v2 + 16); v24 = 0; v22 = 0; if ( !v5 ) goto LABEL_23; v16 = v6 + 4; v20 = (const char **)(v6 + 4); do { v18 = *v20; if ( !strncmp(*v20, "morph:", 6u) ) { v8 = 0; v24 = 1; if ( !v4 ) goto LABEL_23; v9 = (const char **)(v7 + 4); while ( strcmp(v18, *v9) ) { ++v8; v9 += 2; if ( v8 >= v4 ) return 0; } v5 = v19; v7 = v17; } v20 += 2; ++v22; } while ( v22 < v5 ); if ( !v24 ) goto LABEL_23; v25 = 0; v23 = 0; if ( !v4 ) goto LABEL_23; v11 = (const char **)(v7 + 4); v21 = v11; do { v12 = *v11; if ( !strncmp(*v11, "morph:", 6u) ) { v13 = (const char **)v16; v25 = 1; v14 = 0; while ( strcmp(v12, *v13) ) { ++v14; v13 += 2; if ( v14 >= v19 ) return 0; } } v11 = v21 + 2; ++v23; v21 += 2; } while ( v23 < v15 ); if ( v25 ) result = 1; else LABEL_23: result = 0; return result; } //----- (0080BE40) -------------------------------------------------------- int __thiscall sub_80BE40(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ebx int v4; // esi int v5; // eax int v6; // ecx int v7; // eax int v8; // ebx int v9; // edi int v10; // eax int v11; // edi int v12; // ebx int v13; // eax int v14; // edi int v15; // edx int v16; // edi int v17; // eax int v18; // edx int v19; // edi _DWORD *v20; // esi _DWORD *v21; // edi _DWORD *v22; // esi _DWORD *v23; // edi _DWORD *v24; // esi int result; // eax _DWORD *v26; // edi int *v27; // [esp+Ch] [ebp-18h] int v28; // [esp+Ch] [ebp-18h] int v29; // [esp+Ch] [ebp-18h] int v30; // [esp+Ch] [ebp-18h] void (__stdcall ***v31)(signed int); // [esp+10h] [ebp-14h] int *v32; // [esp+10h] [ebp-14h] int *v33; // [esp+10h] [ebp-14h] unsigned int v34; // [esp+14h] [ebp-10h] _DWORD *v35; // [esp+18h] [ebp-Ch] _DWORD *v36; // [esp+1Ch] [ebp-8h] _DWORD *v37; // [esp+20h] [ebp-4h] v2 = a2; v3 = this; v35 = this; sub_85BAE0(this, (int)a2); sub_8C4C90((_DWORD *)*a2, (int)v3, &v36); v4 = 0; v37 = v36; v34 = 0; if ( v3[3] ) { do { v5 = v4 + v3[5]; if ( *(_DWORD *)v5 ) { if ( v3[16] ) { v7 = *(_DWORD *)v5; if ( v3[17] ) { if ( sub_8C4C90((_DWORD *)*v2, v7, &v36) ) { v8 = v37[5]; v9 = *(_DWORD *)(v8 + v4); v10 = (int)v36; if ( (_DWORD *)v9 != v36 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = (int)v36; } *(_DWORD *)(v8 + v4) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } } else { v11 = v3[5]; v12 = v37[5]; v13 = *(_DWORD *)(v12 + v4); v31 = (void (__stdcall ***)(signed int))v13; if ( v13 != *(_DWORD *)(v11 + v4) ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v31 ) (**v31)(1); v14 = *(_DWORD *)(v11 + v4); *(_DWORD *)(v12 + v4) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } } v3 = v35; } else { (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v7 + 40))(v7, v2); } if ( sub_8C4C90((_DWORD *)*a2, *(_DWORD *)(v4 + v3[5] + 4), &v36) ) { v15 = v37[5]; v16 = *(_DWORD *)(v4 + v15 + 4); v32 = (int *)(v4 + v15 + 4); v17 = (int)v36; if ( (_DWORD *)v16 != v36 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = (int)v36; } *v32 = v17; goto LABEL_39; } } else { v18 = v37[5]; v19 = *(_DWORD *)(v4 + v18 + 4); v33 = (int *)(v4 + v3[5] + 4); v27 = (int *)(v4 + v18 + 4); if ( v19 != *v33 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v17 = *v33; *v27 = *v33; LABEL_39: if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } } if ( sub_8C4C90((_DWORD *)*a2, *(_DWORD *)(v4 + v3[5] + 8), &v36) ) *(_DWORD *)(v4 + v37[5] + 8) = v36; else *(_DWORD *)(v4 + v37[5] + 8) = *(_DWORD *)(v4 + v3[5] + 8); goto LABEL_44; } (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)v5 + 40))(v2); v6 = *(_DWORD *)(v4 + v3[5] + 4); if ( v6 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v6 + 40))(v2); } LABEL_44: v2 = a2; v4 += 16; ++v34; } while ( v34 < v3[3] ); } v20 = (_DWORD *)*v2; v28 = v3[16]; v21 = *(_DWORD **)(v20[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*v2 + 4))(*v2, v3[16])); if ( v21 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v20 + 8))(v20, v28, v21[1]) ) { v21 = (_DWORD *)*v21; if ( !v21 ) goto LABEL_48; } v37[16] = v21[2]; } else { LABEL_48: v37[16] = v3[16]; } v22 = (_DWORD *)*a2; v29 = v3[22]; v23 = *(_DWORD **)(v22[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*a2 + 4))(*a2, v3[22])); if ( v23 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v22 + 8))(v22, v29, v23[1]) ) { v23 = (_DWORD *)*v23; if ( !v23 ) goto LABEL_52; } v37[22] = v23[2]; } else { LABEL_52: v37[22] = v3[22]; } v24 = (_DWORD *)*a2; v30 = v3[24]; result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*a2 + 4))(*a2, v3[24]); v26 = *(_DWORD **)(v24[2] + 4 * result); if ( v26 ) { while ( 1 ) { result = (*(int (__thiscall **)(_DWORD *, int, _DWORD))(*v24 + 8))(v24, v30, v26[1]); if ( (_BYTE)result ) break; v26 = (_DWORD *)*v26; if ( !v26 ) goto LABEL_56; } result = (int)v37; v37[24] = v26[2]; } else { LABEL_56: v37[24] = v3[24]; } return result; } //----- (0080C180) -------------------------------------------------------- char __thiscall sub_80C180(_DWORD *this, int *a2) { int v2; // eax _DWORD *v3; // edi int v4; // ecx int v6; // ecx v2 = *a2; v3 = this; v4 = *this; if ( v4 ) { if ( !v2 || v2 && !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v4 + 28))(*a2) ) return 0; } else if ( v2 ) { return 0; } v6 = v3[1]; if ( v6 ) { if ( !a2[1] ) return 0; if ( v6 ) goto LABEL_19; } if ( a2[1] ) return 0; if ( v6 ) { LABEL_19: if ( !a2[1] || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v6 + 28))(a2[1]) ) return 1; return 0; } return 1; } //----- (0080C1F0) -------------------------------------------------------- bool __thiscall sub_80C1F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; return (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)*this + 28))(*a2) && v2[1] == a2[1] && v2[2] == a2[2] && v2[3] == a2[3] && v2[4] == a2[4] && v2[5] == a2[5]; } //----- (0080C250) -------------------------------------------------------- char __thiscall sub_80C250(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi char result; // al int v5; // ebx _DWORD *v6; // edi int v7; // edi int v8; // ecx int v9; // esi unsigned int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; result = sub_85BA30(this, a2); if ( result ) { v5 = 0; v10 = 0; if ( v3[3] ) { v11 = 0; do { v6 = (_DWORD *)(v11 + v3[5]); if ( *v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)*v6 + 20))(a2); v7 = v6[1]; if ( v7 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 20))(v7, a2); (*(void (__stdcall **)(int))(**(_DWORD **)(v5 + v3[6]) + 20))(a2); v11 += 16; v5 += 24; ++v10; } while ( v10 < v3[3] ); v2 = a2; } v8 = v3[8]; if ( v8 ) (*(void (__stdcall **)(int))(*(_DWORD *)v8 + 20))(v2); v9 = v3[25]; if ( v9 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 20))(v9, v2); result = 1; } return result; } //----- (0080C320) -------------------------------------------------------- int __thiscall sub_80C320(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // esi int v5; // ebx int result; // eax int v7; // eax int v8; // ecx int v9; // esi int v10; // ebx int v11; // eax int v12; // esi int v13; // ebx int v14; // edi unsigned int v15; // ebx int v16; // edi unsigned int v17; // esi int *v18; // [esp+Ch] [ebp-Ch] int v19; // [esp+10h] [ebp-8h] int v20; // [esp+14h] [ebp-4h] v2 = this; nullsub_32(a2); if ( a2[7] >= 0xA010068u ) { v11 = sub_875AD0(a2); v12 = v2[8]; v13 = v11; if ( v12 != v11 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v2[8] = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } result = sub_875AD0(a2); v2[16] = result; v14 = v2[8]; v15 = *(_DWORD *)(v14 + 12); v16 = *(_DWORD *)(v14 + 16); v17 = 0; if ( v15 ) { do { result = (signed int)(*(float *)(v16 + 8 * v17++) * 10000.0); *(float *)(v16 + 8 * v17 - 8) = (double)result / 10000.0; } while ( v17 < v15 ); } } else { v3 = sub_875AD0(a2); v4 = v2[8]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[8] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = 0; v19 = 0; if ( v2[3] ) { v20 = 0; do { v7 = sub_875AD0(a2); v8 = v2[5]; v9 = *(_DWORD *)(v8 + v20 + 4); v10 = v7; v18 = (int *)(v8 + v20 + 4); if ( v9 != v7 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *v18 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v20 += 16; result = v19 + 1; v19 = result; } while ( (unsigned int)result < v2[3] ); } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0080C490) -------------------------------------------------------- bool __thiscall sub_80C490(float *this, float *a2) { float *v2; // esi float *v3; // edi const char *v5; // eax const char *v6; // ecx int v7; // eax unsigned int v8; // ebx int v9; // edi int v10; // esi int v11; // ecx int v12; // eax const char *v13; // eax const char *v14; // ecx float *v15; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; v15 = this; if ( !sub_85BB20(this, (int)a2) ) return 0; v5 = (const char *)*((_DWORD *)v3 + 2); if ( !v5 ) goto LABEL_48; if ( !*((_DWORD *)a2 + 2) ) return 0; if ( !v5 ) { LABEL_48: if ( !*((_DWORD *)a2 + 2) ) { if ( !v5 ) goto LABEL_10; goto LABEL_8; } return 0; } LABEL_8: v6 = (const char *)*((_DWORD *)a2 + 2); if ( v6 && strcmp(v5, v6) ) return 0; LABEL_10: v7 = *((_DWORD *)v3 + 3); if ( v7 != *((_DWORD *)a2 + 3) || *((_DWORD *)v3 + 4) != *((_DWORD *)a2 + 4) ) return 0; v8 = 0; if ( v7 ) { v9 = 0; v10 = 0; while ( sub_80C180((_DWORD *)(v10 + *((_DWORD *)v15 + 5)), (int *)(v10 + *((_DWORD *)a2 + 5))) && sub_80C1F0((_DWORD *)(v9 + *((_DWORD *)v15 + 6)), (_DWORD *)(v9 + *((_DWORD *)a2 + 6))) ) { ++v8; v10 += 16; v9 += 24; if ( v8 >= *((_DWORD *)v15 + 3) ) { v2 = a2; v3 = v15; goto LABEL_18; } } return 0; } LABEL_18: if ( v2[7] == v3[7] ) { v11 = *((_DWORD *)v3 + 8); if ( v11 ) { if ( !*((_DWORD *)v2 + 8) ) return 0; if ( v11 ) goto LABEL_49; } if ( *((_DWORD *)v2 + 8) ) return 0; if ( v11 ) { LABEL_49: if ( *((_DWORD *)v2 + 8) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 28))(*((_DWORD *)v2 + 8)) ) return 0; } if ( *((_DWORD *)v3 + 9) != *((_DWORD *)v2 + 9) || v2[10] != v3[10] || v2[11] != v3[11] || v2[12] != v3[12] ) return 0; v12 = *((_DWORD *)v3 + 16); if ( v12 ) { if ( !*((_DWORD *)v2 + 16) ) return 0; if ( v12 ) goto LABEL_50; } if ( *((_DWORD *)v2 + 16) ) return 0; if ( v12 ) { LABEL_50: if ( *((_DWORD *)v2 + 16) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 16) + 28))(*((_DWORD *)v2 + 16)) ) { return 0; } } v13 = (const char *)*((_DWORD *)v3 + 23); if ( !v13 ) goto LABEL_51; if ( !*((_DWORD *)v2 + 23) ) return 0; if ( !v13 ) { LABEL_51: if ( *((_DWORD *)v2 + 23) ) return 0; if ( !v13 ) return (*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 25) + 28))(*((_DWORD *)v2 + 25)) != 0; } v14 = (const char *)*((_DWORD *)v2 + 23); if ( !v14 || !strcmp(v13, v14) ) return (*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 25) + 28))(*((_DWORD *)v2 + 25)) != 0; } return 0; } //----- (0080C6B0) -------------------------------------------------------- unsigned int __thiscall sub_80C6B0(_DWORD *this) { _DWORD *v1; // edi unsigned int result; // eax int v3; // edx int v4; // esi _DWORD *v5; // ebx int v6; // [esp+4h] [ebp-4h] v1 = this; result = 0; v6 = 0; if ( this[3] ) { do { v3 = v1[1]; v4 = *(_DWORD *)(v3 + 4 * result); v5 = (_DWORD *)(v3 + 4 * result); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v6; *v5 = 0; } v6 = ++result; } while ( result < v1[3] ); } v1[4] = 0; v1[3] = 0; return result; } //----- (0080C710) -------------------------------------------------------- int __cdecl sub_80C710(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 352); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 4); a1 = 2; return v4(v3, a2, 2, &a1, 1); } //----- (0080C740) -------------------------------------------------------- void __thiscall sub_80C740(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[13]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[13] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0080C790) -------------------------------------------------------- _DWORD *__thiscall sub_80C790(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiStringPalette::`vftable'; operator delete(v3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A20934: using guessed type void *NiStringPalette::`vftable'; //----- (0080C7D0) -------------------------------------------------------- int __thiscall sub_80C7D0(_DWORD *this, const char *a2) { char *v2; // ebx _DWORD *v3; // esi int result; // eax unsigned int v5; // edi unsigned int v6; // eax unsigned int v7; // ecx size_t v8; // ebx void *v9; // edi _BYTE *v10; // edx char *v11; // ecx int v12; // edx char v13; // bl unsigned int v14; // [esp+8h] [ebp-4h] v2 = (char *)a2; v3 = this; if ( sub_80B620(this, a2, &v14) ) return v14; v5 = strlen(a2) + 1; v6 = v3[3]; v7 = v5 + v3[4]; v14 = v5; if ( v7 > v6 ) { v8 = 2 * v6; v9 = operator new(2 * v6); memset(v9, 0, v8); memcpy_s(v9, v8, (const void *)v3[2], v3[3]); operator delete((void *)v3[2]); v3[2] = v9; v5 = v14; v3[3] = v8; v2 = (char *)a2; } result = v3[4]; v10 = (_BYTE *)(result + v3[2]); *v10 = 0; v11 = v2; v12 = v10 - v2; do { v13 = *v11; v11[v12] = *v11; ++v11; } while ( v13 ); v3[4] += v5; return result; } //----- (0080C880) -------------------------------------------------------- int __thiscall sub_80C880(_DWORD *this) { int v1; // edx int result; // eax v1 = this[2]; if ( v1 == -1 ) result = 0; else result = v1 + *(_DWORD *)(*this + 8); return result; } //----- (0080C8A0) -------------------------------------------------------- int __thiscall sub_80C8A0(_DWORD *this) { int v1; // edx int result; // eax v1 = this[3]; if ( v1 == -1 ) result = 0; else result = v1 + *(_DWORD *)(*this + 8); return result; } //----- (0080C8C0) -------------------------------------------------------- int __thiscall sub_80C8C0(_DWORD *this) { int v1; // edx int result; // eax v1 = this[4]; if ( v1 == -1 ) result = 0; else result = v1 + *(_DWORD *)(*this + 8); return result; } //----- (0080C8E0) -------------------------------------------------------- float *__thiscall sub_80C8E0(float *this, char *Src, int a3, int a4, int a5) { float *v5; // esi _DWORD *v6; // ebx unsigned int v7; // kr00_4 char *v8; // eax _DWORD *v9; // eax int v10; // edi int v11; // edi int v12; // ecx _DWORD *v13; // eax int v14; // eax int v15; // ecx unsigned int v16; // edi int v17; // ecx unsigned int *v18; // eax char *v19; // eax int v20; // edx char *v21; // ebx int v22; // eax int v23; // edi char *Srca; // [esp+14h] [ebp+8h] char *Srcb; // [esp+14h] [ebp+8h] char *Srcc; // [esp+14h] [ebp+8h] int v28; // [esp+18h] [ebp+Ch] unsigned int v29; // [esp+1Ch] [ebp+10h] v5 = this; sub_85BA50(this); v5[7] = 1.0; v6 = 0; *((_DWORD *)v5 + 3) = a3; *(_DWORD *)v5 = &NiControllerSequence::`vftable'; v5[2] = 0.0; *((_DWORD *)v5 + 4) = a4; v5[5] = 0.0; v5[6] = 0.0; v5[8] = 0.0; v5[10] = 1.0; v5[9] = 0.0; v5[11] = 3.4028235e38; v5[12] = -3.4028235e38; v5[13] = -3.4028235e38; v5[14] = -3.4028235e38; v5[16] = 0.0; v5[17] = 0.0; v5[15] = -3.4028235e38; v5[18] = -3.4028235e38; v5[19] = -3.4028235e38; v5[20] = -3.4028235e38; v5[22] = 0.0; v5[23] = 0.0; v5[21] = -3.4028235e38; v5[24] = 0.0; *((_DWORD *)v5 + 25) = a5; if ( a5 ) InterlockedIncrement((volatile LONG *)(a5 + 4)); operator delete(*((void **)v5 + 2)); v7 = strlen(Src); v8 = (char *)operator new(v7 + 1); *((_DWORD *)v5 + 2) = v8; strcpy_s(v8, v7 + 1, Src); if ( *((_DWORD *)v5 + 3) > 0u ) { if ( !*((_DWORD *)v5 + 25) ) { v9 = operator new(0x14u); if ( v9 ) v6 = sub_80B5C0(v9, 320 * *((_DWORD *)v5 + 3)); v10 = *((_DWORD *)v5 + 25); if ( (_DWORD *)v10 != v6 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *((_DWORD *)v5 + 25) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } } v11 = *((_DWORD *)v5 + 3); v12 = 16 * *((_DWORD *)v5 + 3) | -((unsigned __int64)*((unsigned int *)v5 + 3) >> 28 != 0); v13 = operator new((v12 + 4) | -__CFADD__(v12, 4)); if ( v13 ) { *v13 = v11; v14 = (int)(v13 + 1); v15 = v11 - 1; Srca = (char *)v14; if ( v11 - 1 >= 0 ) { do { *(_DWORD *)v14 = 0; *(_DWORD *)(v14 + 4) = 0; *(_DWORD *)(v14 + 8) = 0; *(_BYTE *)(v14 + 12) = -1; v14 += 16; --v15; } while ( v15 >= 0 ); v14 = (int)Srca; } } else { v14 = 0; } v16 = *((_DWORD *)v5 + 3); *((_DWORD *)v5 + 5) = v14; v17 = 24 * v16 | -(24 * (unsigned __int64)v16 >> 32 != 0); v18 = (unsigned int *)operator new((v17 + 4) | -__CFADD__(v17, 4)); if ( v18 ) { *v18 = v16; v19 = (char *)(v18 + 1); v20 = v16 - 1; Srcb = v19; if ( (signed int)(v16 - 1) >= 0 ) { do { *(_DWORD *)v19 = 0; *((_DWORD *)v19 + 1) = -1; *((_DWORD *)v19 + 2) = -1; *((_DWORD *)v19 + 3) = -1; *((_DWORD *)v19 + 4) = -1; *((_DWORD *)v19 + 5) = -1; v19 += 24; --v20; } while ( v20 >= 0 ); v19 = Srcb; } } else { v19 = 0; } *((_DWORD *)v5 + 6) = v19; v29 = 0; if ( *((_DWORD *)v5 + 3) > 0u ) { Srcc = 0; do { v21 = &Srcc[*((_DWORD *)v5 + 6)]; v22 = *((_DWORD *)v5 + 25); v23 = *(_DWORD *)v21; v28 = v22; if ( *(_DWORD *)v21 != v22 ) { if ( v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v22 = v28; } *(_DWORD *)v21 = v22; if ( v22 ) InterlockedIncrement((volatile LONG *)(v22 + 4)); } Srcc += 24; ++v29; } while ( v29 < *((_DWORD *)v5 + 3) ); } } return v5; } // A20A0C: using guessed type void *NiControllerSequence::`vftable'; //----- (0080CB70) -------------------------------------------------------- int *__thiscall sub_80CB70(void *this, char a2) { int *v2; // ebx int v3; // eax char *v4; // ecx int *v5; // edi int v6; // esi int v7; // esi int *result; // eax int v9; // esi int v10; // esi int v11; // [esp+10h] [ebp-4h] v2 = (int *)this; if ( a2 & 2 ) { v3 = *((_DWORD *)this - 1); v4 = (char *)this - 4; v5 = &v2[4 * *(v2 - 1)]; v11 = v3 - 1; if ( v3 - 1 >= 0 ) { do { v6 = *(v5 - 3); v5 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = *v5; if ( *v5 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); --v11; } while ( v11 >= 0 ); v4 = (char *)(v2 - 1); } if ( a2 & 1 ) operator delete(v4); result = v2 - 1; } else { v9 = *((_DWORD *)this + 1); if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (0080CC70) -------------------------------------------------------- LONG __thiscall sub_80CC70(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 void *v3; // ecx int v4; // eax int v5; // edi void *v6; // ecx int v7; // edx int v8; // edi int v9; // ebx int v10; // esi int v11; // esi int v12; // esi int v14; // [esp+8h] [ebp-8h] _DWORD *v15; // [esp+Ch] [ebp-4h] v1 = this; v2 = (void *)this[2]; v15 = this; *this = &NiControllerSequence::`vftable'; operator delete(v2); v3 = (void *)v1[5]; if ( v3 ) sub_80CB70(v3, 3); v4 = v1[6]; if ( v4 ) { v5 = *(_DWORD *)(v4 - 4); v6 = (void *)(v4 - 4); v7 = 3 * v5; v8 = v5 - 1; v14 = v4 - 4; v9 = v4 + 8 * v7; if ( v8 >= 0 ) { do { v10 = *(_DWORD *)(v9 - 24); v9 -= 24; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); --v8; } while ( v8 >= 0 ); v1 = v15; v6 = (void *)v14; } operator delete(v6); } operator delete((void *)v1[23]); v11 = v1[25]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v15[8]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); return sub_85BA80(v15); } // A20A0C: using guessed type void *NiControllerSequence::`vftable'; //----- (0080CD60) -------------------------------------------------------- double __thiscall sub_80CD60(float *this, int a2, float a3) { float *v3; // edi float v4; // ST1C_4 int v5; // eax int v6; // ebx unsigned int v7; // esi double v8; // st7 unsigned int v10; // [esp+14h] [ebp-14h] float v11; // [esp+18h] [ebp-10h] float v12; // [esp+1Ch] [ebp-Ch] float v13; // [esp+20h] [ebp-8h] char v14; // [esp+26h] [ebp-2h] bool v15; // [esp+27h] [ebp-1h] v3 = this; v13 = this[11]; v4 = this[18] + a3; v12 = sub_80BB80((int)this, v4, 0); v5 = *((_DWORD *)v3 + 8); v15 = *((_DWORD *)v3 + 9) == 0; v14 = 0; if ( !v5 ) return -3.4028235e38; v6 = *(_DWORD *)(v5 + 16); v7 = 0; v10 = *(_DWORD *)(v5 + 12); if ( !v10 ) return -3.4028235e38; do { if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)a2 + 4))(*(_DWORD *)(v6 + 8 * v7 + 4)) ) { v14 = 1; v11 = *(float *)(v6 + 8 * v7); v8 = v11; if ( v12 <= (double)v11 ) goto LABEL_12; if ( v15 ) { v13 = v11; v15 = 0; } } ++v7; } while ( v7 < v10 ); if ( !v14 ) return -3.4028235e38; if ( !*((_DWORD *)v3 + 9) ) { v8 = v3[12] - v3[11] + v13; LABEL_12: v13 = v8; } return (float)((v13 - v12) / v3[10] + a3); } //----- (0080CE40) -------------------------------------------------------- double __thiscall sub_80CE40(_DWORD *this, int a2) { _DWORD *v2; // esi void **v4; // [esp+8h] [ebp-10h] int v5; // [esp+Ch] [ebp-Ch] int v6; // [esp+10h] [ebp-8h] int v7; // [esp+14h] [ebp-4h] float v8; // [esp+20h] [ebp+8h] v2 = this; if ( !a2 ) return -3.4028235e38; v5 = 0; InterlockedIncrement(&Addend); v4 = &NiTextKeyMatch::`vftable'; v6 = 0; v7 = a2; v8 = sub_80B890(v2, (int)&v4); v6 = 0; v4 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); return v8; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20114: using guessed type void *NiTextKeyMatch::`vftable'; //----- (0080CEC0) -------------------------------------------------------- void __thiscall sub_80CEC0(_DWORD *this) { _DWORD *v1; // esi int v2; // ebx int v3; // edi int v4; // eax int v5; // eax int v6; // eax char v7; // cl int *v8; // edi int v9; // eax int v10; // edi int v11; // ecx int v12; // eax int v13; // esi void (__stdcall ***v14)(_DWORD); // eax int v15; // eax int v16; // esi int v17; // esi void (__stdcall ***v18)(_DWORD); // eax int v19; // ecx _DWORD *v20; // esi int v21; // esi int *v22; // ST00_4 _DWORD *v23; // esi int v24; // eax int v25; // ecx int v26; // edx bool v27; // zf void (__thiscall ***v28)(_DWORD, signed int); // edi void (__thiscall ***v29)(_DWORD, signed int); // edi int v30; // [esp+8h] [ebp-40h] int v31; // [esp+Ch] [ebp-3Ch] int v32; // [esp+10h] [ebp-38h] int v33; // [esp+14h] [ebp-34h] int v34; // [esp+18h] [ebp-30h] int v35; // [esp+1Ch] [ebp-2Ch] int v36; // [esp+20h] [ebp-28h] int v37; // [esp+24h] [ebp-24h] int v38; // [esp+28h] [ebp-20h] char v39; // [esp+2Ch] [ebp-1Ch] unsigned int v40; // [esp+30h] [ebp-18h] void (__stdcall ***v41)(signed int); // [esp+34h] [ebp-14h] unsigned int v42; // [esp+38h] [ebp-10h] int v43; // [esp+3Ch] [ebp-Ch] _DWORD *v44; // [esp+40h] [ebp-8h] int v45; // [esp+44h] [ebp-4h] v1 = this; v2 = 0; v44 = this; v42 = 0; if ( this[3] ) { v45 = 0; do { v3 = v1[5] + v45; v4 = *(_DWORD *)v3; v41 = *(void (__stdcall ****)(signed int))(v3 + 8); v36 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = *(_DWORD *)(v3 + 4); v37 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = *(_DWORD *)(v3 + 8); v7 = *(_BYTE *)(v3 + 12); v8 = (int *)(v2 + v1[6]); v38 = v6; v9 = *v8; v39 = v7; v30 = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v9 = v30; } v31 = v8[1]; v33 = v8[3]; v35 = v8[5]; v32 = v8[2]; v34 = v8[4]; if ( v42 ) { v10 = 0; v11 = 0; v43 = 0; v40 = v42; do { v12 = v1[5]; if ( *(_DWORD *)(v11 + v12 + 8) > (unsigned int)v41 ) { sub_80B980((_DWORD *)(v12 + v45), (int *)(v12 + v11)); v13 = v1[6]; v14 = *(void (__stdcall ****)(_DWORD))(v2 + v13); v41 = v14; if ( v14 != *(void (__stdcall ****)(_DWORD))(v10 + v13) ) { if ( v14 && !InterlockedDecrement((volatile LONG *)v14 + 1) && v41 ) (**v41)(1); v15 = *(_DWORD *)(v10 + v13); *(_DWORD *)(v2 + v13) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } *(_DWORD *)(v2 + v13 + 4) = *(_DWORD *)(v10 + v13 + 4); *(_DWORD *)(v2 + v13 + 8) = *(_DWORD *)(v10 + v13 + 8); *(_DWORD *)(v2 + v13 + 12) = *(_DWORD *)(v10 + v13 + 12); *(_DWORD *)(v2 + v13 + 16) = *(_DWORD *)(v10 + v13 + 16); *(_DWORD *)(v2 + v13 + 20) = *(_DWORD *)(v10 + v13 + 20); v16 = (int)v44; sub_80B980((_DWORD *)(v43 + v44[5]), &v36); v17 = *(_DWORD *)(v16 + 24); v18 = *(void (__stdcall ****)(_DWORD))(v17 + v10); v19 = v30; v20 = (_DWORD *)(v10 + v17); v41 = v18; if ( v18 != (void (__stdcall ***)(_DWORD))v30 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)v18 + 1) && v41 ) (**v41)(1); v19 = v30; } *v20 = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); } v20[1] = v31; v20[2] = v32; v20[3] = v33; v20[4] = v34; v20[5] = v35; v21 = (int)v44; v22 = (int *)(v45 + v44[5]); v41 = *(void (__stdcall ****)(signed int))(v45 + v44[5] + 8); sub_80B980(&v36, v22); v23 = (_DWORD *)(v2 + *(_DWORD *)(v21 + 24)); if ( v30 != *v23 ) { if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) ) (**(void (__stdcall ***)(signed int))v30)(1); v30 = *v23; if ( *v23 ) InterlockedIncrement((volatile LONG *)(*v23 + 4)); } v24 = v23[3]; v31 = v23[1]; v25 = v23[4]; v32 = v23[2]; v26 = v23[5]; v1 = v44; v34 = v25; v11 = v43; v33 = v24; v35 = v26; } v11 += 16; v10 += 24; v27 = v40-- == 1; v43 = v11; } while ( !v27 ); v9 = v30; } if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__stdcall ***)(signed int))v30)(1); v28 = (void (__thiscall ***)(_DWORD, signed int))v37; if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) ) (**v28)(v28, 1); v29 = (void (__thiscall ***)(_DWORD, signed int))v36; if ( v36 ) { if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) ) (**v29)(v29, 1); } v45 += 16; v2 += 24; ++v42; } while ( v42 < v1[3] ); } } //----- (0080D180) -------------------------------------------------------- char __thiscall sub_80D180(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi volatile LONG *v4; // edi unsigned int v5; // ebx int v6; // esi int v7; // eax int v8; // ecx int v9; // eax const char *v10; // eax float *v12; // eax float *v13; // esi int v14; // ebx int v15; // esi int v16; // ebx volatile LONG *v17; // esi int v18; // eax _DWORD *v19; // esi int v20; // eax int v21; // ebx const char *v22; // eax int v23; // esi signed int v24; // eax _DWORD *v25; // esi _DWORD *v26; // eax unsigned __int16 v27; // dx unsigned __int16 v28; // cx int v29; // eax unsigned __int16 v30; // bx unsigned __int16 v31; // cx int v32; // edx volatile LONG *v33; // esi int v34; // eax int v35; // [esp+Ch] [ebp-18h] int v36; // [esp+10h] [ebp-14h] int v37; // [esp+14h] [ebp-10h] unsigned __int16 v38; // [esp+18h] [ebp-Ch] int v39; // [esp+18h] [ebp-Ch] _DWORD *v40; // [esp+1Ch] [ebp-8h] char v41; // [esp+23h] [ebp-1h] int v42; // [esp+2Ch] [ebp+8h] v3 = this; v40 = this; v41 = 0; v4 = sub_85B610(a2, (int)dword_BA4350); v5 = 0; if ( v4 ) { InterlockedIncrement(v4 + 1); } else { v38 = 0; if ( v3[3] <= 0u ) return 0; v6 = 0; do { v7 = v40[6]; v8 = *(_DWORD *)(v7 + v6 + 12); v9 = v6 + v7; if ( v8 != -1 ) { v10 = (const char *)(v8 + *(_DWORD *)(*(_DWORD *)v9 + 8)); if ( v10 ) { if ( !sub_96C4B0(v10, "NiTransformController") ) ++v38; } } ++v5; v6 += 24; } while ( v5 < v40[3] ); if ( !v38 ) return 0; v12 = (float *)operator new(0x48u); v13 = v12; if ( v12 ) { sub_82F610(v12); *(_DWORD *)v13 = &NiMultiTargetTransformController::`vftable'; v13[15] = 0.0; v13[16] = 0.0; *((_WORD *)v13 + 34) = 0; sub_820840(v13, v38); v4 = (volatile LONG *)v13; InterlockedIncrement((volatile LONG *)v13 + 1); } (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v4 + 72))(v4, a2); *((_WORD *)v4 + 4) |= 0x20u; v41 = 1; if ( a2 == *(_DWORD **)(v40[16] + 48) ) { sub_85B520(a2, (int)v4); v14 = *(_DWORD *)(v40[16] + 52); v15 = *((_DWORD *)v4 + 13); if ( v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *((_DWORD *)v4 + 13) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v16 = v40[16]; v17 = *(volatile LONG **)(v16 + 52); if ( v17 == v4 ) { v3 = v40; } else { if ( v17 && !InterlockedDecrement(v17 + 1) && v17 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v17)(v17, 1); *(_DWORD *)(v16 + 52) = v4; InterlockedIncrement(v4 + 1); v3 = v40; } } else { v3 = v40; } } v36 = 0; if ( v3[3] ) { v37 = 0; v39 = 0; while ( 1 ) { v18 = v39 + v3[5]; v19 = (_DWORD *)(v37 + v3[6]); v42 = v18; v20 = v19[3]; if ( v20 == -1 ) goto LABEL_63; v21 = *(_DWORD *)(*v19 + 8); v22 = (const char *)(v21 + v20); if ( !v22 || strcmp(v22, "NiTransformController") ) goto LABEL_63; v23 = v19[1]; v24 = v23 == -1 ? 0 : v23 + v21; v25 = (_DWORD *)(*(int (__stdcall **)(signed int))(*(_DWORD *)a3 + 60))(v24); if ( !v25 || (_DWORD *)v40[24] == v25 && *(_BYTE *)(v40[16] + 104) ) goto LABEL_63; v26 = sub_85B610(v25, (int)dword_BA3BB8); v27 = *((_WORD *)v4 + 34); v35 = (int)v26; v28 = 0; if ( v27 > 0u ) { v29 = *((_DWORD *)v4 + 16); while ( *(_DWORD **)(v29 + 4 * v28) != v25 ) { if ( ++v28 >= *((_WORD *)v4 + 34) ) goto LABEL_48; } v30 = v28; if ( v28 != -1 ) break; } LABEL_48: v31 = 0; if ( v27 > 0u ) { v32 = *((_DWORD *)v4 + 16); while ( *(_DWORD *)(v32 + 4 * v31) ) { if ( ++v31 >= *((_WORD *)v4 + 34) ) goto LABEL_63; } *(_DWORD *)(v32 + 4 * v31) = v25; v30 = v31; if ( v31 != -1 ) goto LABEL_56; } LABEL_63: v39 += 16; v37 += 24; if ( (unsigned int)++v36 >= v40[3] ) goto LABEL_64; v3 = v40; } *(_DWORD *)(v29 + 4 * v28) = v25; LABEL_56: sub_85B520(v25, v35); v33 = *(volatile LONG **)(v42 + 4); if ( v33 != v4 ) { if ( v33 && !InterlockedDecrement(v33 + 1) && v33 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v33)(v33, 1); *(_DWORD *)(v42 + 4) = v4; InterlockedIncrement(v4 + 1); } v34 = *((_DWORD *)v4 + 15) + 48 * v30; *(_DWORD *)(v42 + 8) = v34; *(_BYTE *)(v34 + 12) |= 1u; goto LABEL_63; } LABEL_64: if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); return v41; } // A20974: using guessed type void *NiMultiTargetTransformController::`vftable'; //----- (0080D4C0) -------------------------------------------------------- char __thiscall sub_80D4C0(float *this, int a2, char a3, float a4, float a5, int a6, char a7) { float *v7; // esi float *v9; // eax v7 = this; if ( *((_DWORD *)this + 17) ) return 0; this[22] = 0.0; if ( a6 ) { v9 = *(float **)(a6 + 88); if ( v9 && (v9 == this || !sub_80B590(this, *(_DWORD *)(a6 + 88))) || !sub_80BCA0(v7, a6) ) return 0; *((_DWORD *)v7 + 22) = a6; } sub_80BAA0(v7, a2); v7[7] = a4; if ( a5 <= 0.0 ) { *((_DWORD *)v7 + 17) = 1; } else { *((_DWORD *)v7 + 17) = a7 != 0 ? 5 : 2; v7[19] = -3.4028235e38; v7[20] = a5; } if ( a3 ) v7[18] = -3.4028235e38; return 1; } //----- (0080D580) -------------------------------------------------------- char __thiscall sub_80D580(int this, float a2, char a3) { char result; // al if ( !*(_DWORD *)(this + 68) ) return 0; if ( a2 <= 0.0 ) { if ( -3.4028235e38 != *(float *)(this + 52) ) *(float *)(this + 72) = *(float *)(this + 56) / *(float *)(this + 40) - *(float *)(this + 52) + *(float *)(this + 72); *(_DWORD *)(this + 68) = 0; *(_DWORD *)(this + 88) = 0; *(float *)(this + 84) = -3.4028235e38; if ( *(float *)(this + 48) != *(float *)(this + 60) ) { *(float *)(this + 60) = -3.4028235e38; *(float *)(this + 52) = -3.4028235e38; } sub_80BB00((_DWORD *)this); result = 1; } else { *(_DWORD *)(this + 68) = (a3 != 0) + 3; result = 1; *(float *)(this + 76) = -3.4028235e38; *(float *)(this + 80) = a2; } return result; } //----- (0080D630) -------------------------------------------------------- char __thiscall sub_80D630(void *this, int a2, float a3, float a4, int a5, float a6, float a7, int a8) { int v8; // edi int v9; // eax char result; // al v8 = (int)this; sub_80D580((int)this, 0.0, 1); if ( a3 <= 0.0 ) a3 = 0.000099999997; if ( *(_DWORD *)(v8 + 68) ) return 0; *(_DWORD *)(v8 + 88) = 0; sub_80BAA0((_DWORD *)v8, a5); *(float *)(v8 + 28) = a6; *(_DWORD *)(v8 + 68) = 1; if ( *(_DWORD *)(a2 + 68) ) return 0; *(_DWORD *)(a2 + 88) = 0; if ( a8 ) { v9 = *(_DWORD *)(a8 + 88); if ( (!v9 || v9 != a2 && sub_80B590((_DWORD *)a2, *(_DWORD *)(a8 + 88))) && sub_80BCA0((_DWORD *)a2, a8) ) { *(_DWORD *)(a2 + 88) = a8; goto LABEL_11; } return 0; } LABEL_11: sub_80BAA0((_DWORD *)a2, a5); *(float *)(a2 + 28) = a7; if ( a3 <= 0.0 ) { *(_DWORD *)(a2 + 68) = 1; } else { *(_DWORD *)(a2 + 68) = 5; *(float *)(a2 + 76) = -3.4028235e38; *(float *)(a2 + 80) = a3; } sub_80D580(v8, a3, 1); result = 1; *(float *)(v8 + 84) = *(float *)(v8 + 60) / *(float *)(v8 + 40); *(float *)(a2 + 84) = a4 / *(float *)(a2 + 40); return result; } //----- (0080D730) -------------------------------------------------------- char __thiscall sub_80D730(float *this, int a2, float a3, int a4, float a5, float a6) { float *v6; // esi float *v7; // eax char result; // al v6 = this; sub_80D580((int)this, 0.0, 1); if ( *((_DWORD *)v6 + 17) ) return 0; v6[22] = 0.0; if ( a2 ) { v7 = *(float **)(a2 + 88); if ( v7 && (v7 == v6 || !sub_80B590(v6, *(_DWORD *)(a2 + 88))) || !sub_80BCA0(v6, a2) ) return 0; *((_DWORD *)v6 + 22) = a2; } sub_80BAA0(v6, a4); v6[7] = a5; if ( a3 <= 0.0 ) { *((_DWORD *)v6 + 17) = 1; } else { *((_DWORD *)v6 + 17) = 5; v6[19] = -3.4028235e38; v6[20] = a3; } if ( *(_DWORD *)(a2 + 68) ) return 0; *(_DWORD *)(a2 + 88) = 0; sub_80BAA0((_DWORD *)a2, a4); *(float *)(a2 + 28) = a6; if ( a3 <= 0.0 ) { *(_DWORD *)(a2 + 68) = 1; } else { *(_DWORD *)(a2 + 68) = 5; *(float *)(a2 + 76) = -3.4028235e38; *(float *)(a2 + 80) = a3; } result = 1; *(float *)(a2 + 72) = -3.4028235e38; *((_DWORD *)v6 + 17) = 6; return result; } //----- (0080D840) -------------------------------------------------------- double __thiscall sub_80D840(float *this, int a2, float a3) { int v3; // edi int v4; // eax double v5; // st7 int v6; // ecx int v7; // eax float *v8; // edx float *v9; // esi float *v10; // ebx int v11; // esi const char *v12; // eax float *v13; // eax double v14; // st6 double v15; // st6 double v16; // st7 double v17; // st6 int v18; // eax unsigned int v19; // esi int v20; // eax float *v21; // edx float *v22; // ecx unsigned int v23; // ebx float v24; // ST18_4 int v25; // edi float *v26; // ecx double result; // st7 double v28; // st6 bool v29; // c0 bool v30; // c3 double v31; // st6 float *v32; // [esp+14h] [ebp-1Ch] float *v33; // [esp+18h] [ebp-18h] float *v34; // [esp+1Ch] [ebp-14h] float *v35; // [esp+20h] [ebp-10h] float *v36; // [esp+24h] [ebp-Ch] float *v37; // [esp+28h] [ebp-8h] char v38; // [esp+2Fh] [ebp-1h] int v39; // [esp+38h] [ebp+8h] int v40; // [esp+38h] [ebp+8h] bool v41; // [esp+3Bh] [ebp+Bh] float v42; // [esp+3Ch] [ebp+Ch] float v43; // [esp+3Ch] [ebp+Ch] float v44; // [esp+3Ch] [ebp+Ch] float v45; // [esp+3Ch] [ebp+Ch] float v46; // [esp+3Ch] [ebp+Ch] float v47; // [esp+3Ch] [ebp+Ch] float v48; // [esp+3Ch] [ebp+Ch] bool v49; // [esp+3Fh] [ebp+Fh] v3 = a2; v36 = this; v42 = sub_80BB80(a2, a3, 0); v4 = *(_DWORD *)(a2 + 32); v5 = v42; v6 = *(_DWORD *)(v4 + 12); v7 = *(_DWORD *)(v4 + 16); v8 = 0; v9 = 0; v10 = 0; v35 = 0; v37 = 0; v32 = 0; if ( v6 ) { v11 = v7; v39 = v6; do { v12 = *(const char **)(v11 + 4); if ( v12 && !strncmp(v12, "morph:", 6u) ) { v32 = (float *)v11; if ( !v10 ) v10 = (float *)v11; if ( v42 <= (double)*(float *)v11 ) { if ( !v37 ) v37 = (float *)v11; } else { v35 = (float *)v11; } } v11 += 8; --v39; } while ( v39 ); v5 = v42; v9 = v32; v13 = v37; v8 = v35; } else { v13 = 0; } v38 = 0; if ( v13 ) { if ( v8 ) { v14 = *v8; } else { v35 = v9; v14 = *(float *)(v3 + 44) - *(float *)(v3 + 48) + *v9; } v44 = v14; v16 = v5 - v44; v17 = *v13 - v44; } else { v37 = v10; v38 = 1; v15 = *v8; v16 = v5 - v15; v43 = *(float *)(v3 + 48) - *(float *)(v3 + 44) + *v10; v17 = v43 - v15; } v18 = *((_DWORD *)v36 + 8); v19 = *(_DWORD *)(v18 + 12); v20 = *(_DWORD *)(v18 + 16); v41 = v35 == 0; v49 = v37 == 0; v21 = 0; v22 = 0; v23 = 0; v33 = 0; v34 = 0; if ( v19 ) { v25 = v20; do { if ( v41 ) { if ( v49 ) break; } else { if ( !strcmp(*(const char **)(v25 + 4), *((const char **)v35 + 1)) ) { v33 = (float *)v25; v41 = 1; } if ( v49 ) goto LABEL_30; } if ( !strcmp(*(const char **)(v25 + 4), *((const char **)v37 + 1)) ) { v34 = (float *)v25; v49 = 1; } LABEL_30: v22 = v34; v21 = v33; ++v23; v25 += 8; } while ( v23 < v19 ); } v45 = 0.0; *(float *)&v40 = 0.0; if ( v21 == v22 ) { v40 = *(int *)v21; v45 = *v22; if ( v38 ) { v26 = v36; v45 = v36[12] - v36[11] + v45; } else { v26 = v36; *(float *)&v40 = *(float *)&v40 - (v36[12] - v36[11]); } } else { if ( v22 ) v45 = *v22; if ( v21 ) v40 = *(int *)v21; if ( v45 >= (double)*(float *)&v40 ) { v26 = v36; } else { v26 = v36; v45 = v45 + v36[12] - v36[11]; } } v24 = v16 / v17; v46 = (v45 - *(float *)&v40) * v24 + *(float *)&v40; result = v46; v28 = v26[11]; v29 = v28 < v46; v30 = v28 == v46; v31 = v26[12]; if ( v29 || v30 ) { if ( v31 < result ) { v48 = result - (v26[12] - v26[11]); result = v48; } } else { v47 = result + v31 - v26[11]; result = v47; } return result; } //----- (0080DAE0) -------------------------------------------------------- void __thiscall sub_80DAE0(_DWORD *this, float a2, float a3, float a4) { int v4; // ebx double v5; // st7 double v6; // st5 int v7; // esi int v8; // edx int v9; // esi unsigned __int8 v10; // al float *v11; // edi int v12; // edx unsigned __int8 v13; // al float *v14; // edi unsigned __int8 v15; // al int v16; // esi double v17; // rt2 double v18; // st5 double v19; // st7 double v20; // rtt double v21; // rt0 unsigned int v22; // [esp+4h] [ebp-4h] v4 = 0; v22 = 0; if ( this[3] ) { v5 = a4; v6 = a2; do { v7 = this[5]; v8 = *(_DWORD *)(v7 + v4 + 8); v9 = v4 + v7; if ( v8 ) { v10 = *(_BYTE *)(v9 + 12); if ( *(_BYTE *)(v8 + 14) != 1 || v10 != *(_BYTE *)(v8 + 15) ) { v11 = (float *)(*(_DWORD *)(v8 + 20) + 24 * v10 + 4); if ( v6 != *v11 ) { *v11 = v6; *(float *)(v8 + 36) = -3.4028235e38; *(float *)(v8 + 40) = -3.4028235e38; *(_BYTE *)(v8 + 12) |= 4u; *(float *)(v8 + 44) = -3.4028235e38; } } v12 = *(_DWORD *)(v9 + 8); v13 = *(_BYTE *)(v9 + 12); if ( *(_BYTE *)(v12 + 14) != 1 || v13 != *(_BYTE *)(v12 + 15) ) { v14 = (float *)(*(_DWORD *)(v12 + 20) + 24 * v13 + 16); if ( a3 != *v14 ) { *v14 = a3; *(float *)(v12 + 36) = -3.4028235e38; *(float *)(v12 + 40) = -3.4028235e38; *(_BYTE *)(v12 + 12) |= 4u; *(float *)(v12 + 44) = -3.4028235e38; } } v15 = *(_BYTE *)(v9 + 12); v16 = *(_DWORD *)(v9 + 8); if ( *(_BYTE *)(v16 + 14) != 1 || v15 != *(_BYTE *)(v16 + 15) ) { v20 = v6; v18 = v5; v19 = v20; *(float *)(*(_DWORD *)(v16 + 20) + 24 * v15 + 20) = v18; } else { v17 = v6; v18 = v5; v19 = v17; *(float *)(v16 + 32) = v18; } v21 = v18; v6 = v19; v5 = v21; } v4 += 16; ++v22; } while ( v22 < this[3] ); } } //----- (0080DC00) -------------------------------------------------------- char __thiscall sub_80DC00(_DWORD *this) { int v1; // eax unsigned int v3; // ebx signed __int64 v4; // rax unsigned int *v5; // eax int v6; // esi int v7; // edi int i; // eax int v9; // ecx unsigned int *v10; // eax int v11; // edx int v12; // esi _DWORD *j; // eax int v14; // eax int *v15; // edi _DWORD *v16; // esi int v17; // eax int v18; // esi void *v19; // ecx int v20; // eax int v21; // edi void *v22; // ecx int v23; // edx int v24; // edi int v25; // eax int v26; // esi int v27; // [esp+0h] [ebp-1Ch] int v28; // [esp+0h] [ebp-1Ch] int *v29; // [esp+4h] [ebp-18h] int v30; // [esp+8h] [ebp-14h] int v31; // [esp+Ch] [ebp-10h] int v32; // [esp+Ch] [ebp-10h] int k; // [esp+10h] [ebp-Ch] unsigned int v34; // [esp+14h] [ebp-8h] _DWORD *v35; // [esp+18h] [ebp-4h] v1 = this[4]; v35 = this; if ( !v1 ) return 0; v3 = v1 + this[3]; v4 = 16i64 * (unsigned int)(v1 + this[3]); v5 = (unsigned int *)operator new(((v4 | -(HIDWORD(v4) != 0)) + 4) | -__CFADD__(v4 | -(HIDWORD(v4) != 0), 4)); if ( v5 ) { v6 = v3 - 1; v7 = (int)(v5 + 1); *v5 = v3; for ( i = (int)(v5 + 1); v6 >= 0; --v6 ) { *(_DWORD *)i = 0; *(_DWORD *)(i + 4) = 0; *(_DWORD *)(i + 8) = 0; *(_BYTE *)(i + 12) = -1; i += 16; } v30 = v7; } else { v30 = 0; } v9 = 24 * v3 | -(24 * (unsigned __int64)v3 >> 32 != 0); v10 = (unsigned int *)operator new((v9 + 4) | -__CFADD__(v9, 4)); if ( v10 ) { v11 = v3 - 1; v12 = (int)(v10 + 1); *v10 = v3; for ( j = v10 + 1; v11 >= 0; --v11 ) { *j = 0; j[1] = -1; j[2] = -1; j[3] = -1; j[4] = -1; j[5] = -1; j += 6; } v29 = (int *)v12; } else { v29 = 0; } v34 = 0; if ( v3 <= 0 ) { v16 = v35; } else { v14 = 0; v31 = 0; v15 = v29; for ( k = 0; ; v14 = k ) { v16 = v35; if ( v34 >= v35[3] ) { v17 = v35[25]; v18 = *v15; v27 = v17; if ( *v15 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v17 = v27; } *v15 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } v16 = v35; } else { sub_80B980((_DWORD *)(v14 + v30), (int *)(v14 + v35[5])); sub_80B910(v15, (int *)(v31 + v35[6])); } k += 16; v31 += 24; v15 += 6; if ( ++v34 >= v3 ) break; } } v19 = (void *)v16[5]; if ( v19 ) sub_80CB70(v19, 3); v20 = v16[6]; if ( v20 ) { v21 = *(_DWORD *)(v20 - 4); v22 = (void *)(v20 - 4); v23 = 3 * v21; v24 = v21 - 1; v32 = v20 - 4; v25 = v20 + 8 * v23; if ( v24 >= 0 ) { while ( 1 ) { v26 = *(_DWORD *)(v25 - 24); v28 = v25 - 24; if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); } if ( --v24 < 0 ) break; v25 = v28; } v16 = v35; v22 = (void *)v32; } operator delete(v22); } v16[3] = v3; v16[5] = v30; v16[6] = v29; return 1; } //----- (0080DE10) -------------------------------------------------------- void __thiscall sub_80DE10(_DWORD *this, char *Src, char *a3) { char *v3; // ebx _DWORD *v4; // esi const char *v5; // edi unsigned int v6; // kr00_4 char *v7; // eax unsigned int v8; // esi int v9; // ecx unsigned int *v10; // eax int v11; // esi int v12; // edi int i; // eax int v14; // eax int v15; // esi int v16; // ecx _DWORD *v17; // eax int v18; // edx int v19; // edi _DWORD *j; // eax int v21; // eax float *v22; // esi int v23; // ecx int v24; // eax int *v25; // esi int v26; // edi int v27; // eax int v28; // eax int v29; // ecx int v30; // esi int v31; // edi int v32; // eax int *v33; // esi int v34; // edi void (__stdcall ****v35)(signed int); // edi void (__stdcall ****v36)(signed int); // esi void (__stdcall ***v37)(signed int); // eax void (__stdcall ***v38)(signed int); // eax int v39; // edi int v40; // eax void *v41; // edx const char *v42; // edi unsigned int v43; // kr04_4 char *v44; // eax int v45; // edi int v46; // esi unsigned int v47; // [esp+Ch] [ebp-10h] int v48; // [esp+10h] [ebp-Ch] char *v49; // [esp+10h] [ebp-Ch] int v50; // [esp+10h] [ebp-Ch] void (__stdcall ***v51)(signed int); // [esp+10h] [ebp-Ch] int v52; // [esp+14h] [ebp-8h] float *v53; // [esp+18h] [ebp-4h] char *Srcb; // [esp+24h] [ebp+8h] char *Srca; // [esp+24h] [ebp+8h] char *v56; // [esp+28h] [ebp+Ch] v3 = Src; v4 = this; v53 = (float *)this; sub_85BB00(this, (int)Src, (_DWORD **)a3); v5 = (const char *)v4[2]; Srcb = (char *)v4[2]; operator delete(*((void **)v3 + 2)); v6 = strlen(v5); v7 = (char *)operator new(v6 + 1); *((_DWORD *)v3 + 2) = v7; strcpy_s(v7, v6 + 1, Srcb); *((_DWORD *)v3 + 3) = v4[3]; *((_DWORD *)v3 + 4) = v4[4]; v8 = v4[3]; v9 = 16 * v8 | -((unsigned __int64)v8 >> 28 != 0); v10 = (unsigned int *)operator new((v9 + 4) | -__CFADD__(v9, 4)); if ( v10 ) { *v10 = v8; v11 = v8 - 1; v12 = (int)(v10 + 1); for ( i = (int)(v10 + 1); v11 >= 0; --v11 ) { *(_DWORD *)i = 0; *(_DWORD *)(i + 4) = 0; *(_DWORD *)(i + 8) = 0; *(_BYTE *)(i + 12) = -1; i += 16; } v14 = v12; } else { v14 = 0; } *((_DWORD *)v3 + 5) = v14; v15 = *((_DWORD *)v53 + 3); v16 = 24 * *((_DWORD *)v53 + 3) | -(24 * (unsigned __int64)*((unsigned int *)v53 + 3) >> 32 != 0); v17 = operator new((v16 + 4) | -__CFADD__(v16, 4)); if ( v17 ) { v18 = v15 - 1; v19 = (int)(v17 + 1); *v17 = v15; for ( j = v17 + 1; v18 >= 0; --v18 ) { *j = 0; j[1] = -1; j[2] = -1; j[3] = -1; j[4] = -1; j[5] = -1; j += 6; } v21 = v19; } else { v21 = 0; } v22 = v53; *((_DWORD *)v3 + 6) = v21; v47 = 0; if ( *((_DWORD *)v53 + 3) ) { v52 = 0; Srca = 0; do { v23 = *((_DWORD *)v22 + 5); if ( *(_DWORD *)&Srca[v23] ) { if ( *((_DWORD *)v22 + 16) ) { v32 = sub_85BAA0(*(void **)&Srca[v23], (_DWORD **)a3); v33 = (int *)&Srca[*((_DWORD *)v3 + 5)]; v50 = v32; v34 = *v33; if ( *v33 != v32 ) { if ( v34 ) { if ( !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); v32 = v50; } *v33 = v32; if ( v32 ) InterlockedIncrement((volatile LONG *)(v32 + 4)); } Srca[*((_DWORD *)v3 + 5) + 12] = Srca[*((_DWORD *)v53 + 5) + 12]; } else { v24 = sub_85BAA0(*(void **)&Srca[v23], (_DWORD **)a3); v25 = (int *)&Srca[*((_DWORD *)v3 + 5)]; v48 = v24; v26 = *v25; if ( *v25 != v24 ) { if ( v26 ) { if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v24 = v48; } *v25 = v24; if ( v24 ) InterlockedIncrement((volatile LONG *)(v24 + 4)); } v27 = (int)&Srca[*((_DWORD *)v53 + 5) + 4]; if ( *(_DWORD *)v27 ) { v28 = (*(int (__stdcall **)(char *))(**(_DWORD **)v27 + 8))(a3); v29 = *((_DWORD *)v3 + 5); v30 = *(_DWORD *)&Srca[v29 + 4]; v31 = v28; v49 = &Srca[v29 + 4]; if ( v30 != v28 ) { if ( v30 && !InterlockedDecrement((volatile LONG *)(v30 + 4)) && v30 ) (**(void (__thiscall ***)(int, signed int))v30)(v30, 1); *(_DWORD *)v49 = v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); } } } v22 = v53; } v35 = (void (__stdcall ****)(signed int))(v52 + *((_DWORD *)v3 + 6)); v36 = (void (__stdcall ****)(signed int))(v52 + *((_DWORD *)v22 + 6)); v37 = *v35; v51 = *v35; if ( *v35 != *v36 ) { if ( v37 && !InterlockedDecrement((volatile LONG *)v37 + 1) && v51 ) (**v51)(1); v38 = *v36; *v35 = *v36; if ( v38 ) InterlockedIncrement((volatile LONG *)v38 + 1); } Srca += 16; v52 += 24; v35[1] = v36[1]; v35[2] = v36[2]; v35[3] = v36[3]; v35[4] = v36[4]; v35[5] = v36[5]; ++v47; v22 = v53; } while ( v47 < *((_DWORD *)v53 + 3) ); } *((float *)v3 + 7) = v22[7]; v39 = *((_DWORD *)v3 + 8); if ( v39 != *((_DWORD *)v22 + 8) ) { if ( v39 && !InterlockedDecrement((volatile LONG *)(v39 + 4)) && v39 ) (**(void (__thiscall ***)(int, signed int))v39)(v39, 1); v40 = *((_DWORD *)v22 + 8); *((_DWORD *)v3 + 8) = v40; if ( v40 ) InterlockedIncrement((volatile LONG *)(v40 + 4)); } v41 = (void *)*((_DWORD *)v3 + 23); *((float *)v3 + 9) = v22[9]; *((float *)v3 + 10) = v22[10]; *((float *)v3 + 11) = v22[11]; *((float *)v3 + 12) = v22[12]; v42 = (const char *)*((_DWORD *)v22 + 23); v56 = (char *)*((_DWORD *)v22 + 23); operator delete(v41); *((_DWORD *)v3 + 23) = 0; if ( v42 ) { v43 = strlen(v42); v44 = (char *)operator new(v43 + 1); *((_DWORD *)v3 + 23) = v44; strcpy_s(v44, v43 + 1, v56); } v45 = *((_DWORD *)v3 + 25); if ( v45 != *((_DWORD *)v22 + 25) ) { if ( v45 && !InterlockedDecrement((volatile LONG *)(v45 + 4)) && v45 ) (**(void (__thiscall ***)(int, signed int))v45)(v45, 1); v46 = *((_DWORD *)v22 + 25); *((_DWORD *)v3 + 25) = v46; if ( v46 ) InterlockedIncrement((volatile LONG *)(v46 + 4)); } } //----- (0080E200) -------------------------------------------------------- int __thiscall sub_80E200(int *this, _DWORD *a2) { int *v2; // ebx int v3; // eax int v4; // esi int v5; // edi int result; // eax int v7; // esi int v8; // edi _DWORD *v9; // esi int v10; // eax int v11; // ST00_4 int (__cdecl *v12)(int, _DWORD **, signed int, int *, signed int); // eax int v13; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_876300(a2); v4 = *v2; v5 = v3; if ( *v2 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = sub_876300(a2); v7 = v2[1]; v8 = result; if ( v7 != result ) { if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { if ( v7 ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } v2[1] = v8; if ( v8 ) result = InterlockedIncrement((volatile LONG *)(v8 + 4)); } v9 = a2; if ( a2[7] < 0xA01006Fu ) { sub_876300(a2); v10 = v9[88]; v11 = v10; v12 = *(int (__cdecl **)(int, _DWORD **, signed int, int *, signed int))(v10 + 4); v13 = 2; result = v12(v11, &a2, 2, &v13, 1); } return result; } //----- (0080E2D0) -------------------------------------------------------- int __thiscall sub_80E2D0(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, _DWORD *, signed int, signed int *, signed int); // eax int v16; // edi int (__cdecl *v17)(int, _DWORD *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; (*(void (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *this); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 1, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 2, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 3, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 4, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v16 + 8); a2 = 4; return v17(v16, v3 + 5, 4, &a2, 1); } //----- (0080E380) -------------------------------------------------------- void __thiscall sub_80E380(volatile LONG **this, void *a2) { _DWORD *v2; // edi volatile LONG **v3; // esi _DWORD *v4; // ecx void *v5; // eax void *v6; // eax void *v7; // eax void *v8; // eax volatile LONG *v9; // eax volatile LONG *v10; // ebx int v11; // eax int v12; // ST3C_4 void (__cdecl *v13)(int, volatile LONG **, signed int, void **, signed int); // eax int v14; // eax int v15; // ST28_4 void (__cdecl *v16)(int, volatile LONG **, signed int, void **, signed int); // eax int v17; // eax int v18; // ST14_4 void (__cdecl *v19)(int, volatile LONG **, signed int, void **, signed int); // eax int v20; // eax int v21; // ST00_4 void (__cdecl *v22)(int, volatile LONG **, signed int, void **, signed int); // eax int v23; // edi void (__cdecl *v24)(int, volatile LONG **, signed int, void **, signed int); // edx v2 = a2; v3 = this; v4 = a2; if ( *((_DWORD *)a2 + 7) >= 0xA010071u ) { v9 = (volatile LONG *)sub_876300(a2); v10 = *v3; a2 = (void *)v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement(v10 + 1) && v10 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); v9 = (volatile LONG *)a2; } *v3 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v11 = v2[88]; v12 = v11; v13 = *(void (__cdecl **)(int, volatile LONG **, signed int, void **, signed int))(v11 + 4); a2 = (void *)4; v13(v12, v3 + 1, 4, &a2, 1); v14 = v2[88]; v15 = v14; v16 = *(void (__cdecl **)(int, volatile LONG **, signed int, void **, signed int))(v14 + 4); a2 = (void *)4; v16(v15, v3 + 2, 4, &a2, 1); v17 = v2[88]; v18 = v17; v19 = *(void (__cdecl **)(int, volatile LONG **, signed int, void **, signed int))(v17 + 4); a2 = (void *)4; v19(v18, v3 + 3, 4, &a2, 1); v20 = v2[88]; v21 = v20; v22 = *(void (__cdecl **)(int, volatile LONG **, signed int, void **, signed int))(v20 + 4); a2 = (void *)4; v22(v21, v3 + 4, 4, &a2, 1); v23 = v2[88]; v24 = *(void (__cdecl **)(int, volatile LONG **, signed int, void **, signed int))(v23 + 4); a2 = (void *)4; v24(v23, v3 + 5, 4, &a2, 1); } else { a2 = 0; sub_8769C0(v4, &a2); v5 = a2; if ( a2 ) { v3[1] = (volatile LONG *)sub_80C7D0(*v3, (const char *)a2); v5 = a2; } else { v3[1] = (volatile LONG *)-1; } operator delete(v5); a2 = 0; sub_8769C0(v2, &a2); v6 = a2; if ( a2 ) { v3[2] = (volatile LONG *)sub_80C7D0(*v3, (const char *)a2); v6 = a2; } else { v3[2] = (volatile LONG *)-1; } operator delete(v6); a2 = 0; sub_8769C0(v2, &a2); v7 = a2; if ( a2 ) { v3[3] = (volatile LONG *)sub_80C7D0(*v3, (const char *)a2); v7 = a2; } else { v3[3] = (volatile LONG *)-1; } operator delete(v7); a2 = 0; sub_8769C0(v2, &a2); v8 = a2; if ( a2 ) { v3[4] = (volatile LONG *)sub_80C7D0(*v3, (const char *)a2); v8 = a2; } else { v3[4] = (volatile LONG *)-1; } operator delete(v8); a2 = 0; sub_8769C0(v2, &a2); if ( a2 ) { v3[5] = (volatile LONG *)sub_80C7D0(*v3, (const char *)a2); operator delete(a2); } else { v3[5] = (volatile LONG *)-1; operator delete(0); } } } //----- (0080E590) -------------------------------------------------------- int __thiscall sub_80E590(const char **this, signed int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax const char *v10; // ebx int v11; // eax int v12; // ST3C_4 void (__cdecl *v13)(int, const char **, signed int, signed int *, signed int); // eax int v14; // eax int v15; // ST3C_4 void (__cdecl *v16)(int, const char **, signed int, signed int *, signed int); // eax int v17; // eax int v18; // ST28_4 void (__cdecl *v19)(int, const char **, signed int, signed int *, signed int); // eax int v20; // eax int v21; // ST14_4 void (__cdecl *v22)(int, const char **, signed int, signed int *, signed int); // eax int v23; // eax int v24; // ST00_4 void (__cdecl *v25)(int, const char **, signed int, signed int *, signed int); // eax int v27; // [esp+Ch] [ebp-8h] unsigned int v28; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; nullsub_32(a2); sub_876A50(v2, v3[2]); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); v28 = 0; if ( v3[3] ) { v27 = 0; a2 = 0; do { v10 = &v3[5][a2]; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)v10); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v10 + 1)); sub_80E2D0(&v3[6][v27], (signed int)v2); a2 += 16; ++v28; v27 += 24; } while ( v28 < (unsigned int)v3[3] ); } v11 = v2[89]; v12 = v11; v13 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v11 + 8); a2 = 4; v13(v12, v3 + 7, 4, &a2, 1); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[8]); v14 = v2[89]; v15 = v14; v16 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v14 + 8); a2 = 4; v16(v15, v3 + 9, 4, &a2, 1); v17 = v2[89]; v18 = v17; v19 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v17 + 8); a2 = 4; v19(v18, v3 + 10, 4, &a2, 1); v20 = v2[89]; v21 = v20; v22 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v20 + 8); a2 = 4; v22(v21, v3 + 11, 4, &a2, 1); v23 = v2[89]; v24 = v23; v25 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v23 + 8); a2 = 4; v25(v24, v3 + 12, 4, &a2, 1); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[16]); sub_876A50(v2, v3[23]); return (*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[25]); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0080E710) -------------------------------------------------------- unsigned int __thiscall sub_80E710(int *this, void *a2) { _DWORD *v2; // edi int *v3; // esi int v4; // eax int v5; // ST18_4 void (__cdecl *v6)(int, int *, signed int, void **, signed int); // eax int v7; // ebx int v8; // ecx int *v9; // eax int v10; // ebx int v11; // ecx int k; // eax int v13; // eax int v14; // ebx int v15; // ecx int *v16; // eax int v17; // ebx int v18; // edx _DWORD *l; // eax int v20; // eax _DWORD *v21; // eax volatile LONG *v22; // eax volatile LONG *v23; // ebx unsigned int result; // eax int *v25; // eax int v26; // ecx int v27; // ebx char *v28; // ebx void (__cdecl *v29)(int, int *, signed int, void **, signed int); // edx int v30; // ST18_4 int v31; // eax int v32; // ST04_4 void (__cdecl *v33)(int, int *, signed int, void **, signed int); // eax int v34; // ebx int v35; // ecx int *v36; // eax int v37; // ebx int v38; // ecx int i; // eax int v40; // eax int v41; // ebx int v42; // ecx int *v43; // eax int v44; // ebx int v45; // edx _DWORD *j; // eax int v47; // eax _DWORD *v48; // eax volatile LONG *v49; // eax volatile LONG *v50; // ebx int *v51; // ecx int v52; // eax int v53; // ebx int v54; // eax int v55; // ST18_4 void (__cdecl *v56)(int, int *, signed int, void **, signed int); // eax int v57; // eax int v58; // ST18_4 void (__cdecl *v59)(int, int **, signed int, void **, signed int); // eax void (__cdecl *v60)(int, int *, signed int, void **, signed int); // edx int v61; // ST04_4 int v62; // eax int v63; // ST18_4 void (__cdecl *v64)(int, int **, signed int, void **, signed int); // eax int v65; // eax int v66; // ST18_4 void (__cdecl *v67)(int, int *, signed int, void **, signed int); // eax int v68; // eax int v69; // ST04_4 void (__cdecl *v70)(int, int *, signed int, void **, signed int); // eax int v71; // eax int v72; // ST18_4 void (__cdecl *v73)(int, char *, signed int, int **, signed int); // eax int v74; // edi int v75; // ebx _DWORD *v76; // [esp-4h] [ebp-20h] int *v77; // [esp+Ch] [ebp-10h] int v78; // [esp+10h] [ebp-Ch] unsigned int v79; // [esp+14h] [ebp-8h] void *v80; // [esp+18h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, (signed int)a2); v76 = v3 + 2; if ( v2[7] >= 0xA010068u ) { sub_8769C0(v2, v76); v29 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v2[88] + 4); v30 = v2[88]; a2 = (void *)4; v29(v30, v3 + 3, 4, &a2, 1); v31 = v2[88]; v32 = v31; v33 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v31 + 4); a2 = (void *)4; v33(v32, v3 + 4, 4, &a2, 1); v34 = v3[3]; v35 = 16 * v34 | -((unsigned __int64)(unsigned int)v34 >> 28 != 0); v36 = (int *)operator new((v35 + 4) | -__CFADD__(v35, 4)); if ( v36 ) { *v36 = v34; v37 = v34 - 1; v38 = (int)(v36 + 1); for ( i = (int)(v36 + 1); v37 >= 0; --v37 ) { *(_DWORD *)i = 0; *(_DWORD *)(i + 4) = 0; *(_DWORD *)(i + 8) = 0; *(_BYTE *)(i + 12) = -1; i += 16; } v40 = v38; } else { v40 = 0; } v41 = v3[3]; v3[5] = v40; v42 = 24 * v41 | -(24 * (unsigned __int64)(unsigned int)v41 >> 32 != 0); v43 = (int *)operator new((v42 + 4) | -__CFADD__(v42, 4)); if ( v43 ) { *v43 = v41; v44 = v41 - 1; v45 = (int)(v43 + 1); for ( j = v43 + 1; v44 >= 0; --v44 ) { *j = 0; j[1] = -1; j[2] = -1; j[3] = -1; j[4] = -1; j[5] = -1; j += 6; } v47 = v45; } else { v47 = 0; } v3[6] = v47; if ( v2[7] < 0xA010071u ) { v48 = operator new(0x14u); if ( v48 ) { v49 = sub_80B5C0(v48, 320 * v3[3]); a2 = (void *)v49; } else { a2 = 0; v49 = 0; } v50 = (volatile LONG *)v3[25]; if ( v50 != v49 ) { if ( v50 ) { if ( !InterlockedDecrement(v50 + 1) && v50 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v50)(v50, 1); v49 = (volatile LONG *)a2; } v3[25] = (int)v49; if ( v49 ) InterlockedIncrement(v49 + 1); } } v79 = 0; if ( v3[3] ) { v80 = 0; a2 = 0; do { if ( v2[7] < 0xA010071u ) { v51 = (int *)((char *)v80 + v3[6]); v52 = v3[25]; v53 = *v51; v78 = v52; v77 = v51; if ( v53 != v52 ) { if ( v53 ) { if ( !InterlockedDecrement((volatile LONG *)(v53 + 4)) && v53 ) (**(void (__thiscall ***)(int, signed int))v53)(v53, 1); v52 = v78; v51 = v77; } *v51 = v52; if ( v52 ) InterlockedIncrement((volatile LONG *)(v52 + 4)); } } sub_80E200((int *)((char *)a2 + v3[5]), v2); sub_80E380((volatile LONG **)((char *)v80 + v3[6]), v2); a2 = (char *)a2 + 16; ++v79; v80 = (char *)v80 + 24; } while ( v79 < v3[3] ); } v54 = v2[88]; v55 = v54; v56 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v54 + 4); a2 = (void *)4; v56(v55, v3 + 7, 4, &a2, 1); sub_876290((void **)v2); v57 = v2[88]; v58 = v57; v59 = *(void (__cdecl **)(int, int **, signed int, void **, signed int))(v57 + 4); a2 = (void *)4; v59(v58, &v77, 4, &a2, 1); v3[9] = (int)v77; v60 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v2[88] + 4); v61 = v2[88]; a2 = (void *)4; v60(v61, v3 + 10, 4, &a2, 1); if ( v2[7] < 0xA030001u ) { v62 = v2[88]; v63 = v62; v64 = *(void (__cdecl **)(int, int **, signed int, void **, signed int))(v62 + 4); a2 = (void *)4; v64(v63, &v77, 4, &a2, 1); } v65 = v2[88]; v66 = v65; v67 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v65 + 4); a2 = (void *)4; v67(v66, v3 + 11, 4, &a2, 1); v68 = v2[88]; v69 = v68; v70 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v68 + 4); a2 = (void *)4; v70(v69, v3 + 12, 4, &a2, 1); if ( v2[7] < 0xA01006Bu ) { v71 = v2[88]; v72 = v71; v73 = *(void (__cdecl **)(int, char *, signed int, int **, signed int))(v71 + 4); v77 = (int *)1; v73(v72, (char *)&a2 + 3, 1, &v77, 1); } sub_876290((void **)v2); result = sub_8769C0(v2, v3 + 23); if ( v2[7] >= 0xA010071u ) { result = sub_876300(v2); v74 = v3[25]; v75 = result; if ( v74 != result ) { if ( v74 ) { result = InterlockedDecrement((volatile LONG *)(v74 + 4)); if ( !result ) { if ( v74 ) result = (**(int (__thiscall ***)(int, signed int))v74)(v74, 1); } } v3[25] = v75; if ( v75 ) result = InterlockedIncrement((volatile LONG *)(v75 + 4)); } } } else { sub_8769C0(v2, v76); sub_8769C0(v2, v3 + 23); sub_876290((void **)v2); v4 = v2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, void **, signed int))(v4 + 4); a2 = (void *)4; v6(v5, v3 + 3, 4, &a2, 1); v7 = v3[3]; v3[4] = 12; v8 = 16 * v7 | -((unsigned __int64)(unsigned int)v7 >> 28 != 0); v9 = (int *)operator new((v8 + 4) | -__CFADD__(v8, 4)); if ( v9 ) { *v9 = v7; v10 = v7 - 1; v11 = (int)(v9 + 1); for ( k = (int)(v9 + 1); v10 >= 0; --v10 ) { *(_DWORD *)k = 0; *(_DWORD *)(k + 4) = 0; *(_DWORD *)(k + 8) = 0; *(_BYTE *)(k + 12) = -1; k += 16; } v13 = v11; } else { v13 = 0; } v14 = v3[3]; v3[5] = v13; v15 = 24 * v14 | -(24 * (unsigned __int64)(unsigned int)v14 >> 32 != 0); v16 = (int *)operator new((v15 + 4) | -__CFADD__(v15, 4)); if ( v16 ) { *v16 = v14; v17 = v14 - 1; v18 = (int)(v16 + 1); for ( l = v16 + 1; v17 >= 0; --v17 ) { *l = 0; l[1] = -1; l[2] = -1; l[3] = -1; l[4] = -1; l[5] = -1; l += 6; } v20 = v18; } else { v20 = 0; } v3[6] = v20; v21 = operator new(0x14u); if ( v21 ) { v22 = sub_80B5C0(v21, 320 * v3[3]); a2 = (void *)v22; } else { a2 = 0; v22 = 0; } v23 = (volatile LONG *)v3[25]; if ( v23 != v22 ) { if ( v23 ) { if ( !InterlockedDecrement(v23 + 1) && v23 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v23)(v23, 1); v22 = (volatile LONG *)a2; } v3[25] = (int)v22; if ( v22 ) InterlockedIncrement(v22 + 1); } result = 0; v77 = 0; if ( v3[3] ) { a2 = 0; do { v25 = (int *)((char *)a2 + v3[6]); v26 = v3[25]; v27 = *v25; v78 = v26; v79 = (unsigned int)v25; if ( v27 != v26 ) { if ( v27 ) { if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v26 = v78; v25 = (int *)v79; } *v25 = v26; if ( v26 ) InterlockedIncrement((volatile LONG *)(v26 + 4)); } v80 = 0; sub_8769C0(v2, &v80); v28 = (char *)a2 + v3[6]; if ( v80 ) *((_DWORD *)v28 + 1) = sub_80C7D0(*(_DWORD **)v28, (const char *)v80); else *((_DWORD *)v28 + 1) = -1; operator delete(v80); sub_876290((void **)v2); a2 = (char *)a2 + 24; result = (unsigned int)v77 + 1; v77 = (int *)result; } while ( result < v3[3] ); } } return result; } //----- (0080ECD0) -------------------------------------------------------- void *__thiscall sub_80ECD0(void *this, char a2) { void *v2; // esi v2 = this; sub_80CC70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0080ED00) -------------------------------------------------------- double __thiscall sub_80ED00(float *this, int a2, float a3) { float *v3; // esi int v5; // [esp+8h] [ebp-10h] int v6; // [esp+Ch] [ebp-Ch] int v7; // [esp+10h] [ebp-8h] int v8; // [esp+14h] [ebp-4h] float v9; // [esp+20h] [ebp+8h] v3 = this; v6 = 0; InterlockedIncrement(&Addend); v5 = (int)&NiTextKeyMatch::`vftable'; v7 = 0; v8 = a2; v9 = sub_80CD60(v3, (int)&v5, a3); v7 = 0; v5 = (int)&NiRefObject::`vftable'; InterlockedDecrement(&Addend); return v9; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A20114: using guessed type void *NiTextKeyMatch::`vftable'; //----- (0080ED70) -------------------------------------------------------- signed int __thiscall sub_80ED70(_DWORD *this, int a2, int *a3) { _DWORD *v3; // ebx unsigned int v4; // eax unsigned int v5; // edi _DWORD *v6; // ecx int v8; // eax int *v9; // esi int v10; // ebx int v11; // eax int v12; // ebx int *v13; // esi int *v14; // eax int v15; // ecx _DWORD *v16; // [esp+8h] [ebp-4h] v3 = this; v4 = this[3]; v5 = 0; v16 = this; if ( v4 ) { v6 = (_DWORD *)this[5]; do { if ( !*v6 ) break; ++v5; v6 += 4; } while ( v5 < v4 ); } if ( v5 == v4 && !sub_80DC00(v3) ) return -1; v8 = a2; v9 = (int *)(v3[5] + 16 * v5); v10 = *v9; if ( *v9 != a2 ) { if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v8 = a2; } *v9 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } v11 = v16[6]; v12 = *(_DWORD *)(v11 + 24 * v5); v13 = (int *)(v11 + 24 * v5); v14 = a3; if ( v12 != *a3 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v14 = a3; } v15 = *v14; *v13 = *v14; if ( v15 ) { InterlockedIncrement((volatile LONG *)(v15 + 4)); v14 = a3; } } v13[1] = v14[1]; v13[2] = v14[2]; v13[3] = v14[3]; v13[4] = v14[4]; v13[5] = v14[5]; return v5; } //----- (0080EE70) -------------------------------------------------------- void __thiscall sub_80EE70(_DWORD *this, float a2, float a3) { int v3; // esi int v4; // ecx double v5; // st7 double v6; // st6 double v7; // st7 float v8; // ST10_4 float v9; // ST10_4 int v10; // eax float v11; // ST10_4 int v12; // ecx float v13; // ST04_4 float v14; // ST08_4 float v15; // [esp+10h] [ebp-8h] float v16; // [esp+14h] [ebp-4h] float v17; // [esp+24h] [ebp+Ch] float v18; // [esp+24h] [ebp+Ch] float v19; // [esp+24h] [ebp+Ch] float v20; // [esp+24h] [ebp+Ch] v3 = (int)this; v4 = this[17]; if ( v4 ) { v5 = a2; if ( -3.4028235e38 == *(float *)(v3 + 72) ) *(float *)(v3 + 72) = -v5; if ( -3.4028235e38 == *(float *)(v3 + 76) ) { *(float *)(v3 + 76) = a2; *(float *)(v3 + 80) = *(float *)(v3 + 80) + v5; } v16 = 1.0; v15 = 1.0; switch ( v4 ) { case 2: if ( *(float *)(v3 + 80) <= v5 ) goto LABEL_17; v6 = v5 - *(float *)(v3 + 76); goto LABEL_9; case 3: if ( *(float *)(v3 + 80) <= v5 ) { sub_80D580(v3, 0.0, 0); return; } v6 = *(float *)(v3 + 80) - v5; LABEL_9: v16 = v6 / (*(float *)(v3 + 80) - *(float *)(v3 + 76)); goto LABEL_10; case 4: goto LABEL_22; case 5: if ( *(float *)(v3 + 80) <= v5 ) { if ( -3.4028235e38 != *(float *)(v3 + 84) ) { *(float *)(v3 + 72) = *(float *)(v3 + 84) - v5; *(float *)(v3 + 84) = -3.4028235e38; } LABEL_17: *(_DWORD *)(v3 + 68) = 1; } else { v15 = (v5 - *(float *)(v3 + 76)) / (*(float *)(v3 + 80) - *(float *)(v3 + 76)); } goto LABEL_10; case 6: v8 = v5 + *(float *)(v3 + 72); v9 = sub_80D840((float *)*(_DWORD *)(v3 + 88), v3, v8); v10 = *(_DWORD *)(v3 + 88); v11 = v9 / *(float *)(v10 + 40); v5 = a2; *(float *)(v10 + 72) = v11 - a2; *(_DWORD *)(v3 + 68) = 4; LABEL_22: if ( *(float *)(v3 + 80) <= v5 ) { sub_80D580(v3, 0.0, 1); } else { v15 = (*(float *)(v3 + 80) - v5) / (*(float *)(v3 + 80) - *(float *)(v3 + 76)); LABEL_10: if ( LOBYTE(a3) ) { if ( -3.4028235e38 == *(float *)(v3 + 84) ) { v12 = *(_DWORD *)(v3 + 88); if ( v12 ) { if ( *(float *)(v12 + 72) + v5 != *(float *)(v12 + 52) ) { v13 = v5; sub_80EE70(v13, 0.0); v5 = a2; } v17 = v5 + *(float *)(*(_DWORD *)(v3 + 88) + 72); v18 = sub_80D840((float *)v3, *(_DWORD *)(v3 + 88), v17); v7 = v18 / *(float *)(v3 + 40); } else { v7 = v5 + *(float *)(v3 + 72); } } else { v7 = *(float *)(v3 + 84); } v19 = v7; v14 = sub_80BB80(v3, v19, 1); v20 = *(float *)(v3 + 28) * v15; sub_80DAE0((_DWORD *)v3, v20, v16, v14); } } break; default: goto LABEL_10; } } } //----- (0080F0C0) -------------------------------------------------------- char __thiscall sub_80F0C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax int v5; // ecx _DWORD *v6; // edi int v7; // ecx signed int v8; // eax int v9; // edx int v10; // ecx _DWORD *v11; // ebx _DWORD *v12; // edi const char **v13; // esi _DWORD *v14; // esi const char **v15; // ebx const char *v16; // ebx int v17; // eax int v18; // eax int v19; // ecx int v20; // eax unsigned __int16 v21; // ax int v22; // ebx int v23; // eax int v24; // edi _DWORD *v25; // eax int v27; // [esp+2Ch] [ebp-24h] int v28; // [esp+30h] [ebp-20h] char v29; // [esp+34h] [ebp-1Ch] int v30; // [esp+38h] [ebp-18h] _DWORD *v31; // [esp+3Ch] [ebp-14h] int v32; // [esp+40h] [ebp-10h] _DWORD *v33; // [esp+44h] [ebp-Ch] _DWORD *v34; // [esp+48h] [ebp-8h] char v35; // [esp+4Fh] [ebp-1h] v2 = this; v3 = *(_DWORD *)(this[16] + 120); v4 = this[23]; v34 = this; v27 = *(_DWORD *)(this[16] + 120); if ( v4 ) this[24] = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 60))(v3, v4); HIBYTE(a2) = sub_80D180(v2, a2, v3); v28 = 0; if ( v2[3] <= 0u ) goto LABEL_47; v32 = 0; v30 = 0; while ( 2 ) { v5 = *(_DWORD *)(v32 + v2[5]); if ( !v5 ) goto LABEL_46; v6 = (_DWORD *)(v30 + v2[6]); v31 = (_DWORD *)(v30 + v2[6]); if ( !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v5 + 124))(v3) || *(_DWORD *)(v32 + v2[5] + 8) ) goto LABEL_46; v7 = v6[1]; v8 = v7 == -1 ? 0 : v7 + *(_DWORD *)(*v6 + 8); v9 = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 60))(v3, v8); v33 = (_DWORD *)v9; if ( !v9 ) goto LABEL_46; v10 = v6[2]; if ( v10 != -1 && v10 + *(_DWORD *)(*v6 + 8) ) { v11 = *(_DWORD **)(v9 + 160); if ( v11 ) { while ( 1 ) { v12 = (_DWORD *)v11[2]; v11 = (_DWORD *)*v11; v13 = (const char **)(*(int (__thiscall **)(_DWORD *))(*v12 + 4))(v12); if ( !strcmp(*v13, (const char *)sub_80C880(v31)) ) break; if ( !v11 ) goto LABEL_20; } v33 = v12; LABEL_20: v9 = (int)v33; v6 = v31; } v2 = v34; } if ( !v9 ) goto LABEL_46; v14 = *(_DWORD **)(v9 + 12); if ( !v14 ) goto LABEL_31; do { v15 = (const char **)(*(int (__thiscall **)(_DWORD *))(*v14 + 4))(v14); if ( strcmp(*v15, (const char *)sub_80C8A0(v6)) ) goto LABEL_29; v16 = (const char *)(*(int (__thiscall **)(_DWORD *))(*v14 + 124))(v14); v17 = sub_80C8C0(v6); if ( v16 ) { if ( !v17 ) goto LABEL_29; v17 = strcmp(v16, (const char *)sub_80C8C0(v6)); } if ( !v17 ) goto LABEL_34; LABEL_29: v14 = (_DWORD *)v14[13]; } while ( v14 ); v9 = (int)v33; v2 = v34; LABEL_31: v14 = *(_DWORD **)(v32 + v2[5] + 4); if ( v14 ) { (*(void (__thiscall **)(_DWORD *, int))(*v14 + 72))(v14, v9); v18 = v2[16]; HIBYTE(a2) = 1; if ( v33 == *(_DWORD **)(v18 + 48) ) { sub_85B520(v33, (int)v14); sub_80C740(v14, *(_DWORD *)(v2[16] + 52)); sub_80C740((_DWORD *)v2[16], (int)v14); } LABEL_34: v19 = v6[5]; if ( v19 == -1 ) v20 = 0; else v20 = v19 + *(_DWORD *)(*v6 + 8); v21 = (*(int (__thiscall **)(_DWORD *, int))(*v14 + 108))(v14, v20); v22 = v21; if ( v21 == -1 ) goto LABEL_45; v23 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v14 + 112))(v14, v21); v24 = sub_402BA0((int)dword_BA4490, v23); v25 = v34; v29 = 0; if ( (_DWORD *)v34[24] == v33 && *(_BYTE *)(v34[16] + 104) ) v29 = 1; if ( v24 ) { LABEL_44: *((_WORD *)v14 + 4) |= 0x20u; sub_56FF80((_DWORD *)(v32 + v25[5] + 4), (int)v14); *(_DWORD *)(v32 + v34[5] + 8) = v24; v2 = v34; } else { v24 = (*(int (__thiscall **)(_DWORD *, int, signed int, char, _DWORD, signed int))(*v14 + 136))( v14, v22, 1, v29, 0.0, 2); (*(void (__thiscall **)(_DWORD *, int, int))(*v14 + 116))(v14, v24, v22); if ( v24 ) { v25 = v34; goto LABEL_44; } LABEL_45: v2 = v34; } } LABEL_46: v30 += 24; v32 += 16; if ( (unsigned int)++v28 < v2[3] ) { v3 = v27; continue; } break; } LABEL_47: if ( HIBYTE(a2) ) (*(void (__stdcall **)(char *, signed int, char *))(**(_DWORD **)(v2[16] + 48) + 76))(&v35, 1, (char *)&a2 + 3); sub_80CEC0(v2); return 1; } //----- (0080F3F0) -------------------------------------------------------- char __thiscall sub_80F3F0(void *this, int a2, float a3, int a4, int a5, float a6, float a7, int a8) { void *v8; // esi float v10; // [esp+20h] [ebp-4h] int v11; // [esp+34h] [ebp+10h] v10 = 0.0; v8 = this; if ( a4 ) { *(float *)&v11 = sub_80CE40((_DWORD *)a2, a4); if ( -3.402823466385289e38 != *(float *)&v11 ) v10 = *(float *)&v11; } return sub_80D630(v8, a2, a3, v10, a5, a6, a7, a8); } //----- (0080F470) -------------------------------------------------------- char __thiscall sub_80F470(_DWORD *this, char *Src, int a3) { _DWORD *v3; // ebx char *v4; // eax char *v5; // edi char *v6; // edi unsigned __int16 (__thiscall *v7)(int); // eax int v9; // edi const char *v10; // eax const char *v11; // eax const char *v12; // eax int v13; // eax signed int v14; // eax int v15; // edx int v16; // eax int v17; // edi int *v18; // ebx void (__thiscall ***v19)(_DWORD, signed int); // edi unsigned __int16 (__thiscall *v20)(int); // edx unsigned __int16 v21; // di _DWORD *v22; // [esp+Ch] [ebp-330h] int v23; // [esp+10h] [ebp-32Ch] int v24; // [esp+14h] [ebp-328h] int v25; // [esp+18h] [ebp-324h] int v26; // [esp+1Ch] [ebp-320h] int v27; // [esp+20h] [ebp-31Ch] int v28; // [esp+24h] [ebp-318h] int v29; // [esp+28h] [ebp-314h] char Dst; // [esp+2Ch] [ebp-310h] char v31; // [esp+130h] [ebp-20Ch] char v32; // [esp+234h] [ebp-108h] v3 = this; v22 = this; strcpy_s(&Dst, 0x104u, Src); v32 = 0; v31 = 0; v4 = strchr(&Dst, 10); v5 = v4; if ( v4 ) { strcpy_s(&v32, 0x104u, v4 + 1); *v5 = 0; v6 = strchr(&v32, 10); strcpy_s(&v31, 0x104u, v6 + 1); *v6 = 0; } v7 = *(unsigned __int16 (__thiscall **)(int))(*(_DWORD *)a3 + 100); v29 = 0; if ( v7(a3) <= 0u ) return 1; while ( 1 ) { v9 = v3[25]; v23 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v25 = -1; v24 = sub_80C7D0((_DWORD *)v9, &Dst); if ( !strcmp(&v32, "PROP") ) v25 = sub_80C7D0((_DWORD *)v9, &v31); v10 = *(const char **)(*(int (__thiscall **)(int))(*(_DWORD *)a3 + 4))(a3); v26 = v10 ? sub_80C7D0((_DWORD *)v9, v10) : -1; v11 = (const char *)(*(int (__thiscall **)(int))(*(_DWORD *)a3 + 124))(a3); v27 = v11 ? sub_80C7D0((_DWORD *)v9, v11) : -1; v12 = (const char *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a3 + 104))(a3, v29); v28 = v12 ? sub_80C7D0((_DWORD *)v9, v12) : -1; v13 = (*(int (__thiscall **)(int, int))(*(_DWORD *)a3 + 112))(a3, v29); v14 = sub_80ED70(v3, v13, &v23); if ( v14 == -1 ) break; v15 = v3[5]; v16 = 2 * v14; v17 = *(_DWORD *)(v15 + 8 * v16 + 4); v18 = (int *)(v15 + 8 * v16 + 4); if ( v17 != a3 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); *v18 = a3; InterlockedIncrement((volatile LONG *)(a3 + 4)); } v19 = (void (__thiscall ***)(_DWORD, signed int))v23; if ( v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) (**v19)(v19, 1); } v20 = *(unsigned __int16 (__thiscall **)(int))(*(_DWORD *)a3 + 100); v21 = ++v29; if ( v21 >= v20(a3) ) return 1; v3 = v22; } if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); return 0; } //----- (0080F720) -------------------------------------------------------- float *__thiscall sub_80F720(_DWORD *this, char *a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x68u); if ( v3 ) { v4 = sub_80B7D0(v3); sub_80DE10(v2, (char *)v4, a2); result = v4; } else { sub_80DE10(v2, 0, a2); result = 0; } return result; } //----- (0080F770) -------------------------------------------------------- char __thiscall sub_80F770(float *this, char *Src, int a3) { float *v3; // edi int v4; // eax v3 = this; if ( !Src ) return 0; if ( !a3 ) return 0; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 4))(a3); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4488 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } *(_WORD *)(a3 + 8) = *(_WORD *)(a3 + 8) & 0xFFF9 | 2 * *((_WORD *)v3 + 18); *(float *)(a3 + 12) = v3[10]; *(_WORD *)(a3 + 8) &= 0xFFEFu; return sub_80F470(v3, Src, a3); } //----- (0080F7F0) -------------------------------------------------------- void __thiscall sub_80F7F0(float *this, int a2) { float *v2; // esi unsigned int v3; // ebx unsigned int v4; // edi int v5; // edx int v6; // ecx unsigned int v7; // edi _DWORD *v8; // eax int v9; // ecx const char *v10; // ebx unsigned int v11; // kr00_4 _DWORD *v12; // eax char *v13; // edi int v14; // edi int v15; // ebx int v16; // ebx unsigned int v17; // ecx int v18; // edi unsigned int v19; // eax char *v20; // ebx int v21; // eax void **v22; // ebx unsigned int v23; // esi char v24; // [esp+8h] [ebp-40h] int v25; // [esp+Ch] [ebp-3Ch] unsigned int v26; // [esp+14h] [ebp-34h] void *v27; // [esp+24h] [ebp-24h] unsigned int v28; // [esp+2Ch] [ebp-1Ch] char *v29; // [esp+38h] [ebp-10h] unsigned int v30; // [esp+3Ch] [ebp-Ch] int v31; // [esp+40h] [ebp-8h] int v32; // [esp+44h] [ebp-4h] unsigned int v33; // [esp+50h] [ebp+8h] unsigned int v34; // [esp+50h] [ebp+8h] v2 = this; nullsub_32(a2); if ( *(_DWORD *)(a2 + 28) < 0xA010068u ) { v3 = *((_DWORD *)v2 + 3); v2[11] = 3.4028235e38; v4 = 0; v30 = v3; v2[12] = -3.4028235e38; if ( v3 ) { v5 = *((_DWORD *)v2 + 5) + 4; do { v6 = *(_DWORD *)v5; if ( v2[11] > (double)*(float *)(*(_DWORD *)v5 + 20) ) v2[11] = *(float *)(v6 + 20); if ( v2[12] < (double)*(float *)(v6 + 24) ) v2[12] = *(float *)(v6 + 24); ++v4; v5 += 16; } while ( v4 < v3 ); } if ( 3.4028235e38 == v2[11] && -3.4028235e38 == v2[12] ) { v2[12] = 0.0; v2[11] = 0.0; } v7 = 0; v28 = 0; if ( v3 ) v27 = operator new(4 * v3); else v27 = 0; sub_8008B0(&v24, *((_DWORD *)v2 + 3), 1); v33 = 0; if ( *((_DWORD *)v2 + 3) ) { v31 = 0; v32 = 0; do { v8 = (_DWORD *)(v32 + *((_DWORD *)v2 + 6)); v9 = v8[1]; if ( v9 == -1 ) v10 = 0; else v10 = (const char *)(v9 + *(_DWORD *)(*v8 + 8)); v11 = strlen(v10); v29 = (char *)operator new(v11 + 1); strcpy_s(v29, v11 + 1, v10); if ( v33 < v30 ) { if ( v33 >= v28 ) v28 = v33 + 1; *((_DWORD *)v27 + v33) = v29; } v12 = (_DWORD *)(v32 + *((_DWORD *)v2 + 6)); v12[1] = -1; v12[2] = -1; v12[3] = -1; v12[4] = -1; v12[5] = -1; v13 = *(char **)(v31 + *((_DWORD *)v2 + 5) + 4); v29 = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)v13 + 1); sub_7FFF10(&v24, v33, (LONG *)&v29); if ( v13 && !InterlockedDecrement((volatile LONG *)v13 + 1) ) (**(void (__thiscall ***)(char *, signed int))v13)(v13, 1); v14 = v31 + *((_DWORD *)v2 + 5); v15 = *(_DWORD *)v14; if ( *(_DWORD *)v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); *(_DWORD *)v14 = 0; } v16 = *(_DWORD *)(v14 + 4); if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(v14 + 4) = 0; } v32 += 24; v31 += 16; *(_DWORD *)(v14 + 8) = 0; *(_BYTE *)(v14 + 12) = -1; ++v33; } while ( v33 < *((_DWORD *)v2 + 3) ); v7 = v28; } v17 = 0; v34 = 0; if ( v26 ) { do { v18 = *(_DWORD *)(v25 + 4 * v17); if ( !v17 ) { v19 = ((unsigned int)*(unsigned __int16 *)(v18 + 8) >> 1) & 3; *((_DWORD *)v2 + 9) = v19; if ( v19 != 2 && v19 ) v2[9] = 0.0; v2[10] = *(float *)(v18 + 12); } v20 = (char *)*((_DWORD *)v27 + v17); if ( v20 && v18 ) { v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v18 + 4))(v18); if ( v21 ) { while ( (char *)v21 != dword_BA4488 ) { v21 = *(_DWORD *)(v21 + 4); if ( !v21 ) goto LABEL_54; } *(_WORD *)(v18 + 8) = *(_WORD *)(v18 + 8) & 0xFFF9 | 2 * *((_WORD *)v2 + 18); *(float *)(v18 + 12) = v2[10]; *(_WORD *)(v18 + 8) &= 0xFFEFu; sub_80F470(v2, v20, v18); } LABEL_54: v17 = v34; } v34 = ++v17; } while ( v17 < v26 ); v7 = v28; } v22 = (void **)v27; v23 = 0; if ( v7 ) { do operator delete(v22[v23++]); while ( v23 < v7 ); } sub_800940(&v24); operator delete(v22); } } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0080FB10) -------------------------------------------------------- float **__cdecl sub_80FB10(float **a1, int a2) { float *v2; // eax _DWORD *v3; // esi float *v4; // eax unsigned int v5; // edi char *v6; // ebx int v7; // edx unsigned int v8; // eax float *v9; // ecx int v10; // edi float *v11; // ebx int v12; // esi float *v13; // esi float **result; // eax char v15; // [esp+1Bh] [ebp+Fh] v2 = (float *)operator new(0x68u); v3 = (_DWORD *)a2; if ( v2 ) v4 = sub_80C8E0(v2, *(char **)(a2 + 8), *(_DWORD *)(a2 + 24), *(_DWORD *)(a2 + 24), 0); else v4 = 0; *a1 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)v4 + 1); v5 = 0; v15 = 1; if ( v3[6] ) { do { v6 = *(char **)(v3[4] + 4 * v5); v7 = *(_DWORD *)(v3[10] + 4 * v5); if ( v6 && v7 ) { if ( v15 ) { v8 = ((unsigned int)*(unsigned __int16 *)(v7 + 8) >> 1) & 3; if ( v8 != 2 && v8 ) v8 = 0; v9 = *a1; if ( v8 == 2 || !v8 ) *((_DWORD *)v9 + 9) = v8; v9[10] = *(float *)(v7 + 12); v9[11] = *(float *)(v7 + 20); v15 = 0; v9[12] = *(float *)(v7 + 24); } sub_80F770(*a1, v6, v7); } ++v5; } while ( v5 < v3[6] ); } v10 = v3[15]; v11 = *a1; v12 = *((_DWORD *)*a1 + 8); if ( v12 != v10 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *((_DWORD *)v11 + 8) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v13 = *a1; operator delete(*((void **)*a1 + 23)); result = a1; v13[23] = 0.0; return result; } //----- (0080FC40) -------------------------------------------------------- float **__cdecl sub_80FC40(float **a1, int a2, unsigned int a3) { float **result; // eax float *v4; // esi float *v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // edi void (__thiscall ***v7)(_DWORD, signed int); // edi int v8; // eax if ( a3 < *(_DWORD *)(a2 + 340) ) { v4 = 0; if ( *(_DWORD *)(a2 + 28) >= 0x5000000u ) { v8 = sub_402BA0((int)&unk_BA3BB0, *(_DWORD *)(*(_DWORD *)(a2 + 332) + 4 * a3)); if ( v8 ) { v4 = (float *)v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); } } else { sub_81B100((int)&a3, a2, a3, 0); v5 = *sub_80FB10((float **)&a2, a3); if ( v5 ) { v4 = v5; InterlockedIncrement((volatile LONG *)v5 + 1); } v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v6 ) (**v6)(v6, 1); v7 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) && v7 ) (**v7)(v7, 1); } *a1 = v4; if ( v4 ) { InterlockedIncrement((volatile LONG *)v4 + 1); if ( !InterlockedDecrement((volatile LONG *)v4 + 1) ) (**(void (__thiscall ***)(float *, signed int))v4)(v4, 1); } result = a1; } else { result = a1; *a1 = 0; } return result; } //----- (0080FD40) -------------------------------------------------------- int __cdecl sub_80FD40(int a1, char *Src, int a3) { char v4; // [esp+Ch] [ebp-3DCh] sub_877EC0(&v4); if ( sub_875BC0(&v4, Src) ) sub_80FC40((float **)a1, (int)&v4, a3); else *(_DWORD *)a1 = 0; sub_877120(&v4); return a1; } //----- (0080FDC0) -------------------------------------------------------- int __thiscall sub_80FDC0(_DWORD *this, signed int a2) { return sub_831300(this, a2); } //----- (0080FDD0) -------------------------------------------------------- bool __thiscall sub_80FDD0(float *this, int a2) { return sub_831330(this, a2) != 0; } //----- (0080FDF0) -------------------------------------------------------- _DWORD *__thiscall sub_80FDF0(_DWORD *this) { _DWORD *result; // eax result = this; *this = dword_ABCEB0; this[1] = dword_ABCEB4; this[2] = dword_ABCEB8; this[3] = dword_BA44A0; this[4] = dword_BA44A4; this[5] = dword_BA44A8; this[6] = dword_BA44AC; *((float *)this + 7) = -3.4028235e38; return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0080FE40) -------------------------------------------------------- void __thiscall sub_80FE40(float *this) { *this = -3.4028235e38; this[1] = -3.4028235e38; this[5] = -3.4028235e38; this[8] = -3.4028235e38; this[9] = -3.4028235e38; this[13] = -3.4028235e38; this[16] = -3.4028235e38; qmemcpy(this + 17, &unk_ABD440, 0x24u); } //----- (0080FEA0) -------------------------------------------------------- float *__thiscall sub_80FEA0(_DWORD *this, int a2) { int v2; // esi int v3; // ecx int v4; // edx int v5; // eax float *v6; // eax char v8; // [esp-20h] [ebp-58h] int v9; // [esp-1Ch] [ebp-54h] int v10; // [esp-18h] [ebp-50h] int v11; // [esp-14h] [ebp-4Ch] int v12; // [esp-10h] [ebp-48h] int v13; // [esp-Ch] [ebp-44h] int v14; // [esp-8h] [ebp-40h] int v15; // [esp-4h] [ebp-3Ch] int v16; // [esp+8h] [ebp-30h] int v17; // [esp+Ch] [ebp-2Ch] int v18; // [esp+10h] [ebp-28h] int v19; // [esp+14h] [ebp-24h] int v20; // [esp+18h] [ebp-20h] int v21; // [esp+1Ch] [ebp-1Ch] int v22; // [esp+20h] [ebp-18h] float v23; // [esp+24h] [ebp-14h] int v24; // [esp+28h] [ebp-10h] int v25; // [esp+2Ch] [ebp-Ch] int v26; // [esp+30h] [ebp-8h] int v27; // [esp+34h] [ebp-4h] v2 = this[12]; sub_874F50((float *)&v24, (float *)(v2 + 52)); v3 = *(_DWORD *)(v2 + 88); v23 = *(float *)(v2 + 100); v4 = *(_DWORD *)(v2 + 92); v5 = *(_DWORD *)(v2 + 96); v16 = v3; v17 = v4; v18 = v5; v19 = v24; v20 = v25; v21 = v26; v22 = v27; v6 = (float *)operator new(0x3Cu); if ( !v6 ) return 0; qmemcpy(&v8, &v16, 0x20u); return sub_819A30(v6, v8, v9, v10, v11, v12, v13, v14, v15); } //----- (0080FF20) -------------------------------------------------------- int __thiscall sub_80FF20(int *this, void **a2) { int result; // eax result = sub_831250(this, a2); if ( (unsigned int)a2[7] < 0xA010068 ) result = sub_876290(a2); return result; } //----- (0080FF50) -------------------------------------------------------- int __thiscall sub_80FF50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi float *v5; // eax float *v6; // edi int v7; // esi v2 = this; result = sub_820450(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); v5 = (float *)operator new(0x3Cu); if ( v5 ) v6 = sub_819990(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v2[15] + 108))(); } return result; } //----- (0080FFE0) -------------------------------------------------------- char __thiscall sub_80FFE0(float *this, float a2) { float *v2; // esi v2 = this; if ( (*((_BYTE *)this + 8) >> 3) & 1 && (a2 != this[8] || *((_BYTE *)this + 56)) ) { if ( !*((_BYTE *)this + 44) ) { *((_BYTE *)this + 56) = 0; return 0; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this + 84))(LODWORD(a2)); if ( a2 != v2[10] || *((_BYTE *)v2 + 56) ) { v2[10] = a2; *((_BYTE *)v2 + 56) = 0; return 0; } } return 1; } //----- (00810060) -------------------------------------------------------- _DWORD *__thiscall sub_810060(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = dword_ABCEB0; this[2] = dword_ABCEB4; this[3] = dword_ABCEB8; this[4] = dword_BA44A0; this[5] = dword_BA44A4; this[6] = dword_BA44A8; this[7] = dword_BA44AC; *((float *)this + 8) = -3.4028235e38; this[9] = dword_ABCEB0; this[10] = dword_ABCEB4; this[11] = dword_ABCEB8; this[12] = dword_BA44A0; this[13] = dword_BA44A4; this[14] = dword_BA44A8; this[15] = dword_BA44AC; *((float *)this + 16) = -3.4028235e38; *(float *)this = -3.4028235e38; *((float *)this + 1) = -3.4028235e38; *((float *)this + 5) = -3.4028235e38; *((float *)this + 8) = -3.4028235e38; *((float *)this + 9) = -3.4028235e38; *((float *)this + 13) = -3.4028235e38; *((float *)this + 16) = -3.4028235e38; qmemcpy(this + 17, &unk_ABD440, 0x24u); return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00810160) -------------------------------------------------------- float *__thiscall sub_810160(float *this, char a2, float a3, char a4) { float *v4; // esi unsigned __int8 v5; // al int v6; // ebx _DWORD *v7; // eax int v8; // ebx _DWORD *v9; // edi _DWORD *v11; // [esp+1Ch] [ebp+10h] v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendAccumTransformInterpolator::`vftable'; *((_DWORD *)v4 + 12) = dword_ABCEB0; *((_DWORD *)v4 + 13) = dword_ABCEB4; *((_DWORD *)v4 + 14) = dword_ABCEB8; *((_DWORD *)v4 + 15) = dword_BA44A0; *((_DWORD *)v4 + 16) = dword_BA44A4; *((_DWORD *)v4 + 17) = dword_BA44A8; *((_DWORD *)v4 + 18) = dword_BA44AC; v4[19] = -3.4028235e38; v5 = *((_BYTE *)v4 + 13); v4[20] = 0.0; *((_BYTE *)v4 + 84) = 0; if ( !v5 ) return v4; v6 = v5; v7 = operator new(104 * v5); v11 = v7; if ( !v7 ) { v4[20] = 0.0; return v4; } v8 = v6 - 1; v9 = v7; if ( v8 >= 0 ) { do { sub_810060(v9); v9 += 26; --v8; } while ( v8 >= 0 ); v7 = v11; } *((_DWORD *)v4 + 20) = v7; return v4; } // A20A64: using guessed type void *NiBlendAccumTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00810230) -------------------------------------------------------- char *sub_810230() { return dword_BA4480; } //----- (00810240) -------------------------------------------------------- void *__thiscall sub_810240(void *this, char a2) { void *v2; // esi v2 = this; sub_82E3B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00810270) -------------------------------------------------------- void __thiscall sub_810270(int this, float a2, int a3, int a4, int a5, float a6, int a7, int a8, float a9) { int v9; // esi int v10; // ecx _DWORD *v11; // ecx _DWORD *v12; // ecx v9 = this; if ( -3.4028235e38 != a6 ) { *(_DWORD *)(this + 24) = a5; *(float *)(this + 28) = a6; *(_DWORD *)(this + 32) = a7; *(_DWORD *)(this + 36) = a8; v10 = *(_DWORD *)(this + 44); if ( v10 ) sub_8245C0(v10, 0, 0, 0); } if ( -3.4028235e38 != a9 ) { v11 = *(_DWORD **)(v9 + 44); *(float *)(v9 + 40) = a9; if ( v11 ) sub_824690(v11, 0, 0, 0); } if ( -3.4028235e38 != a2 ) { *(float *)(v9 + 12) = a2; *(_DWORD *)(v9 + 16) = a3; *(_DWORD *)(v9 + 20) = a4; v12 = *(_DWORD **)(v9 + 44); if ( v12 ) sub_824630(v12, 0, 0, 0); } } //----- (00810320) -------------------------------------------------------- float *__thiscall sub_810320(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); *(_DWORD *)v1 = &NiTransformController::`vftable'; return v1; } // A20B04: using guessed type void *NiTransformController::`vftable'; //----- (00810340) -------------------------------------------------------- char *sub_810340() { return dword_BA3BB8; } //----- (00810350) -------------------------------------------------------- void __thiscall sub_810350(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi int v4; // ebx int v5; // eax char v6; // al int v7; // esi int v8; // ecx int v9; // edx int v10; // eax float v11; // [esp-20h] [ebp-5Ch] int v12; // [esp-1Ch] [ebp-58h] int v13; // [esp-18h] [ebp-54h] int v14; // [esp-14h] [ebp-50h] float v15; // [esp-10h] [ebp-4Ch] int v16; // [esp-Ch] [ebp-48h] int v17; // [esp-8h] [ebp-44h] float v18; // [esp-4h] [ebp-40h] int v19; // [esp+Ch] [ebp-30h] int v20; // [esp+10h] [ebp-2Ch] int v21; // [esp+14h] [ebp-28h] int v22; // [esp+18h] [ebp-24h] int v23; // [esp+1Ch] [ebp-20h] int v24; // [esp+20h] [ebp-1Ch] int v25; // [esp+24h] [ebp-18h] float v26; // [esp+28h] [ebp-14h] int v27; // [esp+2Ch] [ebp-10h] int v28; // [esp+30h] [ebp-Ch] int v29; // [esp+34h] [ebp-8h] int v30; // [esp+38h] [ebp-4h] v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA42E8 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = v6 != 0 ? a2 : 0; } else { v4 = 0; } v7 = v3[12]; sub_874F50((float *)&v27, (float *)(v7 + 52)); v8 = *(_DWORD *)(v7 + 88); v26 = *(float *)(v7 + 100); v9 = *(_DWORD *)(v7 + 92); v10 = *(_DWORD *)(v7 + 96); v19 = v8; v22 = v27; v20 = v9; v21 = v10; v25 = v30; v23 = v28; v24 = v29; qmemcpy(&v11, &v19, 0x20u); sub_810270(v4, v11, v12, v13, v14, v15, v16, v17, v18); } //----- (008103F0) -------------------------------------------------------- float *__stdcall sub_8103F0(int a1, char a2, char a3, float a4, char a5) { float *v5; // eax float *v7; // eax if ( a3 ) { v5 = (float *)operator new(0x58u); if ( v5 ) return sub_810160(v5, a2, a4, a5); } else { v7 = (float *)operator new(0x30u); if ( v7 ) return sub_82C350(v7, a2, a4, a5); } return 0; } //----- (00810450) -------------------------------------------------------- void __thiscall sub_810450(int this, float a2) { int v2; // esi int v3; // ecx int v4; // ecx double v5; // st7 int v6; // edx float v7; // ST00_4 int v8; // esi float v9; // [esp+10h] [ebp-20h] int v10; // [esp+14h] [ebp-1Ch] int v11; // [esp+18h] [ebp-18h] int v12; // [esp+1Ch] [ebp-14h] float v13; // [esp+20h] [ebp-10h] int v14; // [esp+24h] [ebp-Ch] int v15; // [esp+28h] [ebp-8h] float v16; // [esp+2Ch] [ebp-4h] float v17; // [esp+38h] [ebp+8h] v2 = this; if ( (*(_BYTE *)(this + 8) >> 5) & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else if ( sub_80FFE0((float *)this, a2) ) { v3 = *(_DWORD *)(v2 + 60); if ( !v3 || !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 132))() ) return; } v4 = *(_DWORD *)(v2 + 60); if ( v4 ) { v16 = -3.4028235e38; v5 = *(float *)(v2 + 40); v9 = *(float *)&dword_ABCEB0; v11 = dword_ABCEB8; v13 = *(float *)&dword_BA44A4; v10 = dword_ABCEB4; v15 = dword_BA44AC; v12 = dword_BA44A0; v6 = *(_DWORD *)(v2 + 48); v14 = dword_BA44A8; v7 = v5; if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v4 + 60))(LODWORD(v7), v6, &v9) ) { v8 = *(_DWORD *)(v2 + 48); if ( -3.4028235e38 != v9 ) { *(float *)(v8 + 88) = v9; *(_DWORD *)(v8 + 92) = v10; *(_DWORD *)(v8 + 96) = v11; } if ( -3.4028235e38 != v13 ) sub_694FD0((float *)&v12, (float *)(v8 + 52)); if ( -3.4028235e38 != v16 ) { v17 = fabs(v16); *(float *)(v8 + 100) = v17; } } } } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00810580) -------------------------------------------------------- char __stdcall sub_810580(int a1) { int v1; // eax if ( !a1 ) return 0; v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v1 ) return 0; while ( (char *)v1 != dword_BA457C ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } return 1; } //----- (008105B0) -------------------------------------------------------- float *__thiscall sub_8105B0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_8310C0(v3); *(_DWORD *)v4 = &NiTransformController::`vftable'; sub_8311B0(v2, (int)v4, a2); result = v4; } else { sub_8311B0(v2, 0, a2); result = 0; } return result; } // A20B04: using guessed type void *NiTransformController::`vftable'; //----- (00810630) -------------------------------------------------------- unsigned int __thiscall sub_810630(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831380(this, a2); v3 = sub_8784D0(*(int *)dword_BA3BB8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00810680) -------------------------------------------------------- void __thiscall sub_810680(void **this) { if ( this[1] ) operator delete(this[1]); } //----- (00810690) -------------------------------------------------------- void __thiscall sub_810690(void **this, const char *a2) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; if ( this[1] ) { operator delete(this[1]); v2[1] = 0; } if ( a2 ) { v3 = strlen(a2); v4 = (char *)operator new(v3 + 1); v2[1] = v4; strcpy_s(v4, v3 + 1, a2); } } //----- (008106F0) -------------------------------------------------------- int __thiscall sub_8106F0(_DWORD *this, signed int a2) { _DWORD *v2; // edi void (__cdecl *v3)(int, _DWORD *, signed int, signed int *, signed int); // edx _DWORD *v4; // esi int v5; // ST00_4 v2 = (_DWORD *)a2; v3 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = this; v5 = *(_DWORD *)(a2 + 352); a2 = 4; v3(v5, this, 4, &a2, 1); return sub_8769C0(v2, v4 + 1); } //----- (00810730) -------------------------------------------------------- int __thiscall sub_810730(const char **this, signed int a2) { _DWORD *v2; // edi void (__cdecl *v3)(int, const char **, signed int, signed int *, signed int); // edx const char **v4; // esi int v5; // ST00_4 v2 = (_DWORD *)a2; v3 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 356) + 8); v4 = this; v5 = *(_DWORD *)(a2 + 356); a2 = 4; v3(v5, this, 4, &a2, 1); return sub_876A50(v2, v4[1]); } //----- (00810770) -------------------------------------------------------- void *__thiscall sub_810770(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray *>::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A20BA0: using guessed type void *NiTArray *>::`vftable'; //----- (008107A0) -------------------------------------------------------- void *__thiscall sub_8107A0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray *>::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A20BA8: using guessed type void *NiTArray *>::`vftable'; //----- (008107D0) -------------------------------------------------------- char __thiscall sub_8107D0(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // ebx _DWORD *v5; // esi unsigned int v6; // edi int v7; // ecx _DWORD *v8; // [esp+4h] [ebp-4h] v2 = this; v8 = this; result = sub_86C250(this, a2); if ( result ) { v4 = 0; if ( v2[26] ) { do { v5 = *(_DWORD **)(v2[24] + 4 * v4); if ( v5 ) { v6 = 0; if ( v5[2] ) { do { v7 = *(_DWORD *)(*(_DWORD *)(*v5 + 4 * v6) + 4); if ( v7 ) (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 20))(a2); ++v6; } while ( v6 < v5[2] ); } v2 = v8; } ++v4; } while ( v4 < v2[26] ); } result = 1; } return result; } //----- (00810840) -------------------------------------------------------- unsigned int __thiscall sub_810840(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi unsigned int result; // eax _DWORD *v5; // esi unsigned int v6; // edi int v7; // eax unsigned int v8; // ecx int *v9; // edi int v10; // eax int v11; // esi int v12; // ebx unsigned int v13; // esi unsigned int v14; // [esp+Ch] [ebp-10h] _DWORD *v15; // [esp+10h] [ebp-Ch] unsigned int v16; // [esp+14h] [ebp-8h] unsigned int v17; // [esp+18h] [ebp-4h] int v18; // [esp+18h] [ebp-4h] v2 = a2; v3 = this; v15 = this; sub_86C590(this, a2); result = 0; v17 = 0; if ( v3[20] ) { do { v5 = *(_DWORD **)(v3[18] + 4 * result); if ( v5 ) { v6 = 0; if ( v5[2] ) { do { v7 = sub_875AD0(a2); if ( v6 < v5[2] ) *(_DWORD *)(*v5 + 4 * v6) = v7; ++v6; } while ( v6 < v5[2] ); result = v17; } v3 = v15; } v17 = ++result; } while ( result < v3[20] ); } v8 = 0; v18 = 0; if ( v3[26] ) { do { result = *(_DWORD *)(v3[24] + 4 * v8); v14 = result; if ( result ) { v16 = 0; if ( *(_DWORD *)(result + 8) ) { while ( 1 ) { v9 = *(int **)(*(_DWORD *)result + 4 * v16); *v9 = sub_875AD0(v2); v10 = sub_875AD0(v2); v11 = v9[1]; v12 = v10; if ( v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v9[1] = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); } v2 = a2; result = v16 + 1; v16 = result; if ( result >= *(_DWORD *)(v14 + 8) ) break; result = v14; } v8 = v18; v3 = v15; } } v18 = ++v8; } while ( v8 < v3[26] ); } v13 = 0; if ( v3[31] ) { do { result = sub_875AD0(v2); if ( v13 < v3[31] ) *(_DWORD *)(v3[29] + 4 * v13) = result; ++v13; } while ( v13 < v3[31] ); } return result; } //----- (00810970) -------------------------------------------------------- char __thiscall sub_810970(float *this, _DWORD *a2) { _DWORD *v2; // ebx float *v3; // edi int v5; // ecx unsigned int v6; // eax _DWORD *v7; // esi _DWORD *v8; // ebx int v9; // ecx unsigned int v10; // edi unsigned int v11; // edx _DWORD *v12; // eax _DWORD *v13; // ecx int v14; // edx int v15; // esi _DWORD **v16; // edi _DWORD *v17; // ebx int v18; // esi _DWORD *v19; // [esp+8h] [ebp-10h] _DWORD *v20; // [esp+Ch] [ebp-Ch] float *v21; // [esp+10h] [ebp-8h] int v22; // [esp+14h] [ebp-4h] int v23; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; v21 = this; if ( !sub_86BDE0(this, (int)a2) ) return 0; if ( *((_DWORD *)v3 + 15) != a2[15] ) return 0; if ( *((_DWORD *)v3 + 16) != a2[16] ) return 0; v5 = *((_DWORD *)v3 + 20); if ( v5 != a2[20] || *((_DWORD *)v3 + 26) != a2[26] || *((_DWORD *)v3 + 31) != a2[31] ) return 0; v6 = 0; v22 = 0; if ( v5 ) { do { v7 = *(_DWORD **)(*((_DWORD *)v3 + 18) + 4 * v6); v8 = *(_DWORD **)(v2[18] + 4 * v6); if ( v7 ) { if ( !v8 ) return 0; v9 = v7[2]; if ( v9 != v8[2] ) return 0; v10 = 0; if ( v9 ) { do { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(**(_DWORD **)(4 * v10 + *v7) + 28))(*(_DWORD *)(4 * v10 + *v8)) ) return 0; ++v10; } while ( v10 < v7[2] ); v6 = v22; } v3 = v21; } else if ( v8 ) { return 0; } v2 = a2; v22 = ++v6; } while ( v6 < *((_DWORD *)v3 + 20) ); } v11 = 0; v23 = 0; if ( *((_DWORD *)v3 + 26) ) { do { v12 = *(_DWORD **)(*((_DWORD *)v3 + 24) + 4 * v11); v13 = *(_DWORD **)(v2[24] + 4 * v11); v20 = v12; v19 = *(_DWORD **)(v2[24] + 4 * v11); if ( v12 ) { if ( !v13 ) return 0; v14 = v12[2]; if ( v14 != v13[2] ) return 0; v15 = 0; if ( v14 ) { while ( 1 ) { v16 = *(_DWORD ***)(*v12 + 4 * v15); v17 = *(_DWORD **)(*v13 + 4 * v15); if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(**v16 + 28))(*v17) || !(*(unsigned __int8 (__stdcall **)(_DWORD))(*v16[1] + 28))(v17[1]) ) { return 0; } if ( (unsigned int)++v15 >= v20[2] ) { v3 = v21; v2 = a2; break; } v13 = v19; v12 = v20; } } v11 = v23; } else if ( v13 ) { return 0; } v23 = ++v11; } while ( v11 < *((_DWORD *)v3 + 26) ); } v18 = 0; if ( *((_DWORD *)v3 + 31) ) { while ( (*(unsigned __int8 (__stdcall **)(_DWORD))(**(_DWORD **)(4 * v18 + *((_DWORD *)v3 + 29)) + 28))(*(_DWORD *)(4 * v18 + v2[29])) ) { if ( (unsigned int)++v18 >= *((_DWORD *)v3 + 31) ) return 1; } return 0; } return 1; } //----- (00810B10) -------------------------------------------------------- int __cdecl sub_810B10(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 352); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 4); a1 = 4; return v4(v3, a2, 4, &a1, 1); } //----- (00810B40) -------------------------------------------------------- float *__thiscall sub_810B40(float *this) { float *v1; // esi v1 = this; sub_86C310(this); *(_DWORD *)v1 = &NiBoneLODController::`vftable'; v1[15] = -6.8056469e38/*NaN*/; v1[16] = 0.0; v1[19] = 0.0; v1[20] = 0.0; v1[21] = 0.0; v1[18] = 0.0; *((_DWORD *)v1 + 17) = &NiTArray *>::`vftable'; *((_DWORD *)v1 + 22) = 1; v1[25] = 0.0; v1[26] = 0.0; v1[27] = 0.0; v1[24] = 0.0; *((_DWORD *)v1 + 23) = &NiTArray *>::`vftable'; *((_DWORD *)v1 + 28) = 1; v1[29] = 0.0; v1[30] = 0.0; v1[31] = 0.0; return v1; } // A20BA0: using guessed type void *NiTArray *>::`vftable'; // A20BA8: using guessed type void *NiTArray *>::`vftable'; // A20BB4: using guessed type void *NiBoneLODController::`vftable'; //----- (00810BA0) -------------------------------------------------------- char *sub_810BA0() { return dword_BA3BC0; } //----- (00810BB0) -------------------------------------------------------- char __thiscall sub_810BB0(_DWORD *this) { int v1; // ecx int v2; // eax v1 = this[12]; if ( !v1 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)v1 + 4))(); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA455C ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00810BE0) -------------------------------------------------------- char __thiscall sub_810BE0(_DWORD *this, signed int a2) { _DWORD *v2; // edx unsigned int v3; // eax signed int v4; // ecx unsigned int v5; // edi char v6; // bl _DWORD *v7; // esi unsigned int v8; // ecx int v9; // eax unsigned int v10; // eax int v11; // ecx _DWORD *v12; // eax int v13; // edi int v14; // esi int v15; // ebx int v16; // edi _DWORD *v18; // [esp+0h] [ebp-Ch] _DWORD *v19; // [esp+4h] [ebp-8h] int v20; // [esp+8h] [ebp-4h] int v21; // [esp+8h] [ebp-4h] v2 = this; v3 = this[16]; v18 = this; if ( !v3 ) return 0; v4 = a2; if ( v2[15] == a2 || a2 != -1 && (a2 <= -1 || a2 >= v3) ) return 0; v5 = 0; v6 = 0; v20 = 0; if ( v2[20] ) { do { v7 = *(_DWORD **)(v2[18] + 4 * v5); if ( v7 ) { if ( v5 == v4 ) v6 = 1; v8 = 0; if ( v7[2] ) { do { v9 = *(_DWORD *)(*v7 + 4 * v8); if ( v6 ) { *(_WORD *)(v9 + 28) |= 2u; } else { *(_WORD *)(v9 + 28) &= 0xFFFDu; v5 = v20; } ++v8; } while ( v8 < v7[2] ); } v4 = a2; } v20 = ++v5; } while ( v5 < v2[20] ); } v10 = 0; if ( v2[31] ) { do { v11 = *(_DWORD *)(v2[29] + 4 * v10++); *(_WORD *)(v11 + 28) = *(_WORD *)(v11 + 28) & 0xFFFD | 1; } while ( v10 < v2[31] ); v4 = a2; } if ( v4 != -1 ) { v12 = *(_DWORD **)(v2[24] + 4 * v4); v19 = v12; if ( v12 ) { v13 = 0; v21 = 0; if ( v12[2] ) { while ( 1 ) { v14 = **(_DWORD **)(*v12 + 4 * v13); *(_WORD *)(v14 + 28) = *(_WORD *)(v14 + 28) & 0xFFFE | 2; v15 = *(_DWORD *)(*(_DWORD *)(*v12 + 4 * v13) + 4); v16 = *(_DWORD *)(v14 + 188); if ( v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v2 = v18; v12 = v19; } *(_DWORD *)(v14 + 188) = v15; if ( v15 ) { InterlockedIncrement((volatile LONG *)(v15 + 4)); v12 = v19; v2 = v18; } } if ( (unsigned int)++v21 >= v12[2] ) break; v13 = v21; } v4 = a2; } } } v2[15] = v4; return 1; } //----- (00810D60) -------------------------------------------------------- float *__thiscall sub_810D60(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x80u); if ( v3 ) v4 = sub_810B40(v3); else v4 = 0; sub_86C130(v2, (int)v4, a2); v4[15] = *((float *)v2 + 15); v4[16] = *((float *)v2 + 16); return v4; } //----- (00810DB0) -------------------------------------------------------- char __thiscall sub_810DB0(_DWORD *this, _DWORD *a2) { int v2; // esi int v3; // ebx unsigned int v4; // edi void **v5; // eax void **v6; // esi _DWORD *v7; // edi _DWORD *v8; // ebx void *v9; // eax int v10; // ebx _DWORD *v11; // edi unsigned int v12; // eax void *v13; // eax unsigned int v14; // eax _DWORD *v15; // ecx unsigned int v16; // esi void **v17; // eax void **v18; // edi _DWORD *v19; // ebx _DWORD *v20; // eax _DWORD *v21; // esi unsigned int v22; // eax unsigned int v23; // ebx unsigned int v24; // eax _DWORD *v25; // esi _DWORD *v26; // ebx int v27; // ebx int v28; // esi bool v29; // zf _DWORD *v30; // esi _DWORD *v31; // edi int v32; // eax int v33; // edi _DWORD *v34; // esi unsigned int v35; // eax int v36; // edx int v37; // eax int v38; // edi _DWORD *v39; // esi unsigned int v40; // eax int v41; // eax int v42; // eax _DWORD *v43; // ecx signed int v44; // ST04_4 int v46; // [esp+Ch] [ebp-20h] int v47; // [esp+Ch] [ebp-20h] int v48; // [esp+10h] [ebp-1Ch] _DWORD *v49; // [esp+10h] [ebp-1Ch] int v50; // [esp+10h] [ebp-1Ch] unsigned int v51; // [esp+14h] [ebp-18h] int v52; // [esp+18h] [ebp-14h] int *v53; // [esp+18h] [ebp-14h] _DWORD *v54; // [esp+1Ch] [ebp-10h] _DWORD *v55; // [esp+20h] [ebp-Ch] _DWORD *v56; // [esp+24h] [ebp-8h] int v57; // [esp+28h] [ebp-4h] v2 = (int)this; v56 = this; sub_86C220(this, (int)a2); sub_8C4C90((_DWORD *)*a2, v2, &v54); v3 = (int)v54; v4 = 0; v57 = 0; if ( *(_DWORD *)(v2 + 80) ) { while ( 1 ) { v55 = *(_DWORD **)(*(_DWORD *)(v2 + 72) + 4 * v4); if ( v55 ) { v5 = (void **)operator new(0xCu); if ( v5 ) { *v5 = 0; v5[1] = 0; v5[2] = 0; v6 = v5; } else { v6 = 0; } if ( v4 < *(_DWORD *)(v3 + 76) || (sub_8237A0((_DWORD *)(v3 + 68), v4 + *(_DWORD *)(v3 + 88)), v4 < *(_DWORD *)(v3 + 76)) ) { if ( v4 < *(_DWORD *)(v3 + 80) ) { if ( v6 ) { if ( !*(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * v4) ) ++*(_DWORD *)(v3 + 84); } else if ( *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * v4) ) { --*(_DWORD *)(v3 + 84); } } else { *(_DWORD *)(v3 + 80) = v4 + 1; if ( v6 ) ++*(_DWORD *)(v3 + 84); } *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * v4) = v6; } v52 = 0; if ( v55[2] ) { while ( 1 ) { v7 = (_DWORD *)*a2; v48 = *(_DWORD *)(*v55 + 4 * v52); v8 = *(_DWORD **)(v7[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*a2 + 4))( *a2, *(_DWORD *)(*v55 + 4 * v52))); if ( v8 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v7 + 8))(v7, v48, v8[1]) ) { v8 = (_DWORD *)*v8; if ( !v8 ) goto LABEL_23; } v48 = v8[2]; v13 = v6[1]; if ( v6[2] != v13 ) goto LABEL_41; v10 = 2 * (_DWORD)v13; if ( !v13 ) v10 = 1; if ( (void *)v10 == v13 ) goto LABEL_41; if ( v10 ) { v11 = operator new(4 * v10); v14 = 0; if ( v6[2] ) { do { v11[v14] = *((_DWORD *)*v6 + v14); ++v14; } while ( v14 < (unsigned int)v6[2] ); } goto LABEL_40; } } else { LABEL_23: v9 = v6[1]; if ( v6[2] != v9 ) goto LABEL_41; v10 = 2 * (_DWORD)v9; if ( !v9 ) v10 = 1; if ( (void *)v10 == v9 ) goto LABEL_41; if ( v10 ) { v11 = operator new(4 * v10); v12 = 0; if ( v6[2] ) { do { v11[v12] = *((_DWORD *)*v6 + v12); ++v12; } while ( v12 < (unsigned int)v6[2] ); } goto LABEL_40; } } v11 = 0; LABEL_40: operator delete(*v6); v6[1] = (void *)v10; *v6 = v11; LABEL_41: *((_DWORD *)*v6 + (_DWORD)v6[2]) = v48; v15 = v55; v6[2] = (char *)v6[2] + 1; if ( (unsigned int)++v52 >= v15[2] ) { v4 = v57; v3 = (int)v54; break; } } } } else if ( v4 < *(_DWORD *)(v3 + 76) || (sub_8237A0((_DWORD *)(v3 + 68), v4 + *(_DWORD *)(v3 + 88)), v4 < *(_DWORD *)(v3 + 76)) ) { if ( v4 < *(_DWORD *)(v3 + 80) ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * v4) ) --*(_DWORD *)(v3 + 84); } else { *(_DWORD *)(v3 + 80) = v4 + 1; } *(_DWORD *)(*(_DWORD *)(v3 + 72) + 4 * v4) = 0; } v57 = ++v4; if ( v4 >= v56[20] ) break; v2 = (int)v56; } } v16 = 0; v57 = 0; if ( v56[26] ) { do { v49 = *(_DWORD **)(v56[24] + 4 * v16); if ( v49 ) { v17 = (void **)operator new(0xCu); if ( v17 ) { *v17 = 0; v17[1] = 0; v17[2] = 0; v18 = v17; } else { v18 = 0; } v19 = v54; if ( v16 < v54[25] || (sub_8237A0(v54 + 23, v16 + v54[28]), v16 < v19[25]) ) { if ( v16 < v19[26] ) { if ( v18 ) { if ( !*(_DWORD *)(v19[24] + 4 * v16) ) ++v19[27]; } else if ( *(_DWORD *)(v19[24] + 4 * v16) ) { --v19[27]; } } else { v19[26] = v16 + 1; if ( v18 ) ++v19[27]; } *(_DWORD *)(v19[24] + 4 * v16) = v18; } v51 = 0; if ( v49[2] ) { do { v53 = *(int **)(*v49 + 4 * v51); v20 = operator new(8u); v21 = 0; if ( v20 ) { v20[1] = 0; v55 = v20; } else { v55 = 0; } v22 = (unsigned int)v18[1]; if ( v18[2] == (void *)v22 ) { v23 = 2 * v22; if ( v22 <= 0 ) v23 = 1; if ( v23 != v22 ) { if ( v23 > 0 ) { v21 = operator new(4 * v23); v24 = 0; if ( v18[2] ) { do { v21[v24] = *((_DWORD *)*v18 + v24); ++v24; } while ( v24 < (unsigned int)v18[2] ); } } operator delete(*v18); *v18 = v21; v18[1] = (void *)v23; } } *((_DWORD *)*v18 + (_DWORD)v18[2]) = v55; v18[2] = (char *)v18[2] + 1; v25 = (_DWORD *)*a2; v46 = *v53; v26 = *(_DWORD **)(v25[2] + 4 * (*(int (__thiscall **)(_DWORD, int))(*(_DWORD *)*a2 + 4))(*a2, *v53)); if ( v26 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v25 + 8))(v25, v46, v26[1]) ) { v26 = (_DWORD *)*v26; if ( !v26 ) goto LABEL_82; } *v55 = v26[2]; } else { LABEL_82: *v55 = *v53; } v27 = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v53[1] + 8))(a2); v28 = v55[1]; if ( v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v55[1] = v27; if ( v27 ) InterlockedIncrement((volatile LONG *)(v27 + 4)); } (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v53[1] + 40))(a2); ++v51; } while ( v51 < v49[2] ); v16 = v57; } v3 = (int)v54; } else if ( v16 < *(_DWORD *)(v3 + 100) || (sub_8237A0((_DWORD *)(v3 + 92), v16 + *(_DWORD *)(v3 + 112)), v16 < *(_DWORD *)(v3 + 100)) ) { if ( v16 < *(_DWORD *)(v3 + 104) ) { if ( *(_DWORD *)(*(_DWORD *)(v3 + 96) + 4 * v16) ) --*(_DWORD *)(v3 + 108); *(_DWORD *)(*(_DWORD *)(v3 + 96) + 4 * v16) = 0; } else { v36 = *(_DWORD *)(v3 + 96); *(_DWORD *)(v3 + 104) = v16 + 1; *(_DWORD *)(v36 + 4 * v16) = 0; } } v57 = ++v16; } while ( v16 < v56[26] ); } v29 = v56[31] == 0; v57 = 0; if ( !v29 ) { do { v30 = (_DWORD *)*a2; v50 = *(_DWORD *)(v56[29] + 4 * v57); v31 = *(_DWORD **)(v30[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*a2 + 4))( *a2, *(_DWORD *)(v56[29] + 4 * v57))); if ( v31 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v30 + 8))(v30, v50, v31[1]) ) { v31 = (_DWORD *)*v31; if ( !v31 ) goto LABEL_98; } v47 = v31[2]; v37 = *(_DWORD *)(v3 + 120); if ( *(_DWORD *)(v3 + 124) == v37 ) { v38 = 2 * v37; if ( !v37 ) v38 = 1; if ( v38 != v37 ) { if ( v38 ) { v39 = operator new(4 * v38); v40 = 0; if ( *(_DWORD *)(v3 + 124) ) { do { v39[v40] = *(_DWORD *)(*(_DWORD *)(v3 + 116) + 4 * v40); ++v40; } while ( v40 < *(_DWORD *)(v3 + 124) ); } } else { v39 = 0; } operator delete(*(void **)(v3 + 116)); *(_DWORD *)(v3 + 116) = v39; *(_DWORD *)(v3 + 120) = v38; } } v41 = v47; } else { LABEL_98: v32 = *(_DWORD *)(v3 + 120); if ( *(_DWORD *)(v3 + 124) == v32 ) { v33 = 2 * v32; if ( !v32 ) v33 = 1; if ( v33 != v32 ) { if ( v33 ) { v34 = operator new(4 * v33); v35 = 0; if ( *(_DWORD *)(v3 + 124) ) { do { v34[v35] = *(_DWORD *)(*(_DWORD *)(v3 + 116) + 4 * v35); ++v35; } while ( v35 < *(_DWORD *)(v3 + 124) ); } } else { v34 = 0; } operator delete(*(void **)(v3 + 116)); *(_DWORD *)(v3 + 116) = v34; *(_DWORD *)(v3 + 120) = v33; } } v41 = v50; } *(_DWORD *)(*(_DWORD *)(v3 + 116) + 4 * *(_DWORD *)(v3 + 124)) = v41; v42 = v57; v43 = v56; ++*(_DWORD *)(v3 + 124); v57 = v42 + 1; } while ( (unsigned int)(v42 + 1) < v43[31] ); } v44 = *(_DWORD *)(v3 + 60); *(_DWORD *)(v3 + 60) = -1; return sub_810BE0((_DWORD *)v3, v44); } //----- (00811410) -------------------------------------------------------- int __thiscall sub_811410(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, _DWORD *, signed int, unsigned int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, _DWORD *, signed int, unsigned int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, unsigned int *, signed int, unsigned int *, signed int); // edx bool v12; // zf _DWORD *v13; // edi int v14; // eax int v15; // ST28_4 void (__cdecl *v16)(int, _DWORD **, signed int, unsigned int *, signed int); // eax int v17; // ST28_4 void (__cdecl *v18)(int, unsigned int *, signed int, _DWORD **, signed int); // eax int v19; // eax void (__cdecl *v20)(int, _DWORD **, signed int, unsigned int *, signed int); // edx _DWORD *v21; // edi int v22; // eax void (__thiscall *v23)(_DWORD *, _DWORD); // edx int v24; // eax int (__cdecl *v25)(int, _DWORD **, signed int, unsigned int *, signed int); // edx int result; // eax unsigned int v27; // edi _DWORD *v28; // [esp+Ch] [ebp-8h] unsigned int v29; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_86C780(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, unsigned int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 15, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, unsigned int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 16, 4, &a2, 1); v10 = v2[89]; v29 = v3[20]; v11 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v10 + 8); a2 = 4; v11(v10, &v29, 4, &a2, 1); v12 = v3[20] == 0; a2 = 0; if ( !v12 ) { do { v13 = *(_DWORD **)(v3[18] + 4 * a2); v14 = v2[89]; if ( v13 ) { v28 = (_DWORD *)v13[2]; v15 = v14; v16 = *(void (__cdecl **)(int, _DWORD **, signed int, unsigned int *, signed int))(v14 + 8); v29 = 4; v16(v15, &v28, 4, &v29, 1); v12 = v13[2] == 0; v29 = 0; if ( !v12 ) { do (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(*v13 + 4 * v29++)); while ( v29 < v13[2] ); } } else { v29 = 0; v17 = v14; v18 = *(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v14 + 8); v28 = (_DWORD *)4; v18(v17, &v29, 4, &v28, 1); } ++a2; } while ( a2 < v3[20] ); } v19 = v2[89]; v28 = (_DWORD *)v3[26]; v20 = *(void (__cdecl **)(int, _DWORD **, signed int, unsigned int *, signed int))(v19 + 8); a2 = 4; v20(v19, &v28, 4, &a2, 1); v12 = v3[26] == 0; a2 = 0; if ( !v12 ) { do { v21 = *(_DWORD **)(v3[24] + 4 * a2); v22 = v2[89]; v28 = (_DWORD *)4; if ( v21 ) { v29 = v21[2]; (*(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v22 + 8))(v22, &v29, 4, &v28, 1); v12 = v21[2] == 0; v29 = 0; if ( !v12 ) { do { v23 = *(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44); v28 = *(_DWORD **)(*v21 + 4 * v29); v23(v2, *v28); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v28[1]); ++v29; } while ( v29 < v21[2] ); } } else { v29 = 0; (*(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v22 + 8))(v22, &v29, 4, &v28, 1); } ++a2; } while ( a2 < v3[26] ); } v24 = v2[89]; v28 = (_DWORD *)v3[31]; v25 = *(int (__cdecl **)(int, _DWORD **, signed int, unsigned int *, signed int))(v24 + 8); a2 = 4; result = v25(v24, &v28, 4, &a2, 1); v27 = 0; if ( v3[31] ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(v3[29] + 4 * v27++)); while ( v27 < v3[31] ); } return result; } //----- (00811670) -------------------------------------------------------- unsigned int __thiscall sub_811670(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, unsigned int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, unsigned int *, signed int); // edx int v8; // ST14_4 int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, unsigned int *, signed int, unsigned int *, signed int); // eax void **v12; // eax void **v13; // esi int *v14; // ebx unsigned int v15; // eax int v16; // eax void (__cdecl *v17)(int, unsigned int *, signed int, unsigned int *, signed int); // edx void *v18; // eax int v19; // ebx _DWORD *v20; // edi unsigned int v21; // eax int v22; // edi unsigned int v23; // ebx void (__cdecl *v24)(int, unsigned int *, signed int, unsigned int *, signed int); // eax void **v25; // eax void **v26; // esi int *v27; // edi int v28; // eax int v29; // ST28_4 void (__cdecl *v30)(int, unsigned int *, signed int, unsigned int *, signed int); // eax _DWORD *v31; // eax unsigned int v32; // eax int v33; // ebx _DWORD *v34; // edi unsigned int v35; // eax int v36; // eax int (__cdecl *v37)(int, unsigned int *, signed int, unsigned int *, signed int); // edx unsigned int result; // eax int *v39; // esi int v40; // eax int v41; // ebx _DWORD *v42; // edi unsigned int v43; // eax unsigned int v44; // [esp+Ch] [ebp-20h] unsigned int j; // [esp+10h] [ebp-1Ch] unsigned int v46; // [esp+14h] [ebp-18h] unsigned int v47; // [esp+18h] [ebp-14h] unsigned int v48; // [esp+1Ch] [ebp-10h] unsigned int v49; // [esp+20h] [ebp-Ch] int *v50; // [esp+24h] [ebp-8h] unsigned int i; // [esp+28h] [ebp-4h] v2 = a2; v3 = this; v50 = this; sub_86C630(this, a2); v4 = *(_DWORD *)(a2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, unsigned int *, signed int))(v4 + 4); v44 = 4; v6(v5, v3 + 15, 4, &v44, 1); v7 = *(void (__cdecl **)(int, int *, signed int, unsigned int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v8 = *(_DWORD *)(a2 + 352); v44 = 4; v7(v8, v3 + 16, 4, &v44, 1); v9 = *(_DWORD *)(a2 + 352); v48 = 0; v10 = v9; v11 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v9 + 4); v44 = 4; v11(v10, &v48, 4, &v44, 1); for ( i = 0; i < v48; ++i ) { v12 = (void **)operator new(0xCu); v13 = 0; if ( v12 ) { *v12 = 0; v12[1] = 0; v12[2] = 0; v13 = v12; } v14 = v50; v15 = i; if ( i < v50[19] || (sub_8237A0(v50 + 17, i + v50[22]), v15 = i, i < v14[19]) ) { if ( v15 < v14[20] ) { if ( v13 ) { if ( !*(_DWORD *)(v14[18] + 4 * v15) ) ++v14[21]; } else if ( *(_DWORD *)(v14[18] + 4 * v15) ) { --v14[21]; } } else { v14[20] = v15 + 1; if ( v13 ) ++v14[21]; } *(_DWORD *)(v14[18] + 4 * v15) = v13; } v16 = *(_DWORD *)(v2 + 352); v49 = 0; v17 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v16 + 4); v44 = 4; v17(v16, &v49, 4, &v44, 1); for ( j = 0; j < v49; ++j ) { v18 = v13[1]; if ( v13[2] == v18 ) { v19 = 2 * (_DWORD)v18; if ( !v18 ) v19 = 1; if ( (void *)v19 != v18 ) { if ( v19 ) { v20 = operator new(4 * v19); v21 = 0; if ( v13[2] ) { do { v20[v21] = *((_DWORD *)*v13 + v21); ++v21; } while ( v21 < (unsigned int)v13[2] ); } } else { v20 = 0; } operator delete(*v13); *v13 = v20; v2 = a2; v13[1] = (void *)v19; } } *((_DWORD *)*v13 + (_DWORD)v13[2]) = v50; v13[2] = (char *)v13[2] + 1; sub_876290((void **)v2); } } v22 = *(_DWORD *)(v2 + 352); v23 = 0; v47 = 0; v24 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v22 + 4); v44 = 4; v24(v22, &v47, 4, &v44, 1); i = 0; if ( v47 > 0 ) { do { v25 = (void **)operator new(0xCu); v26 = 0; if ( v25 ) { *v25 = 0; v25[1] = 0; v25[2] = 0; v26 = v25; } v27 = v50; if ( v23 < v50[25] || (sub_8237A0(v50 + 23, v23 + v50[28]), v23 < v27[25]) ) { if ( v23 < v27[26] ) { if ( v26 ) { if ( !*(_DWORD *)(v27[24] + 4 * v23) ) ++v27[27]; } else if ( *(_DWORD *)(v27[24] + 4 * v23) ) { --v27[27]; } } else { v27[26] = v23 + 1; if ( v26 ) ++v27[27]; } *(_DWORD *)(v27[24] + 4 * v23) = v26; } v28 = *(_DWORD *)(a2 + 352); v49 = 0; v29 = v28; v30 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v28 + 4); v44 = 4; v30(v29, &v49, 4, &v44, 1); v44 = 0; if ( v49 ) { do { v31 = operator new(8u); if ( v31 ) { v31[1] = 0; j = (unsigned int)v31; } else { j = 0; } v32 = (unsigned int)v26[1]; if ( v26[2] == (void *)v32 ) { v33 = 2 * v32; if ( v32 <= 0 ) v33 = 1; if ( v33 != v32 ) { if ( v33 ) { v34 = operator new(4 * v33); v35 = 0; if ( v26[2] ) { do { v34[v35] = *((_DWORD *)*v26 + v35); ++v35; } while ( v35 < (unsigned int)v26[2] ); } } else { v34 = 0; } operator delete(*v26); *v26 = v34; v26[1] = (void *)v33; } } *((_DWORD *)*v26 + (_DWORD)v26[2]) = j; v26[2] = (char *)v26[2] + 1; sub_876290((void **)a2); sub_876290((void **)a2); ++v44; } while ( v44 < v49 ); v23 = i; } i = ++v23; } while ( v23 < v47 ); } v36 = *(_DWORD *)(a2 + 352); v46 = 0; v37 = *(int (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v36 + 4); v44 = 4; result = v37(v36, &v46, 4, &v44, 1); i = 0; if ( v46 > 0 ) { v39 = v50; do { v40 = v39[30]; if ( v39[31] == v40 ) { v41 = 2 * v40; if ( !v40 ) v41 = 1; if ( v41 != v40 ) { if ( v41 ) { v42 = operator new(4 * v41); v43 = 0; if ( v39[31] ) { do { v42[v43] = *(_DWORD *)(v39[29] + 4 * v43); ++v43; } while ( v43 < v39[31] ); } } else { v42 = 0; } operator delete((void *)v39[29]); v39[29] = (int)v42; v39[30] = v41; } } *(_DWORD *)(v39[29] + 4 * v39[31]++) = v39; sub_876290((void **)a2); result = i + 1; i = result; } while ( result < v46 ); } return result; } //----- (00811AB0) -------------------------------------------------------- char __thiscall sub_811AB0(_DWORD *this, int a2) { _DWORD *v2; // esi signed int v3; // ST00_4 v2 = this; nullsub_32(a2); v3 = v2[15]; v2[15] = -1; return sub_810BE0(v2, v3); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00811AE0) -------------------------------------------------------- char __thiscall sub_811AE0(_DWORD *this, int a2) { signed int v2; // eax int v3; // esi int v4; // edx v2 = dword_ABC03C; if ( dword_ABC03C != -1 ) { v3 = this[15]; if ( dword_ABC03C != v3 ) { v4 = this[16]; if ( dword_ABC03C > v4 ) v2 = v4 - 1; if ( v2 != v3 ) LOBYTE(v2) = sub_810BE0(this, v2); } } return v2; } // ABC03C: using guessed type int dword_ABC03C; //----- (00811B10) -------------------------------------------------------- unsigned int __thiscall sub_811B10(_DWORD *this, char *a2) { _DWORD *v2; // ebx char *v3; // eax char *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi char *v11; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA3BC0); v4 = a2; v5 = *((_DWORD *)a2 + 3); v11 = v3; if ( v5 >= *((_DWORD *)a2 + 2) ) sub_8237A0(a2, v5 + *((_DWORD *)a2 + 5)); sub_823870(v4, v5, &v11); v6 = sub_878630((int)"m_iLOD", v2[15]); v7 = *((_DWORD *)v4 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v7 + *((_DWORD *)v4 + 5)); sub_823870(v4, v7, &a2); v8 = sub_878670((int)"m_uiNumLODs", v2[16]); v9 = *((_DWORD *)v4 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v9 + *((_DWORD *)v4 + 5)); return sub_823870(v4, v9, &a2); } //----- (00811BD0) -------------------------------------------------------- unsigned int __thiscall sub_811BD0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi void **v3; // ebx unsigned int v4; // ebx unsigned int v5; // eax int v6; // esi unsigned int v7; // eax _DWORD *v8; // ebx int v9; // esi unsigned int result; // eax int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int v13; // [esp+14h] [ebp-4h] v1 = this; v2 = 0; if ( this[20] ) { do { v3 = *(void ***)(v1[18] + 4 * v2); if ( v3 ) { operator delete(*v3); operator delete(v3); } ++v2; } while ( v2 < v1[20] ); } v4 = 0; v5 = 0; if ( v1[20] ) { do *(_DWORD *)(v1[18] + 4 * v5++) = 0; while ( v5 < v1[20] ); } v1[20] = 0; v1[21] = 0; v12 = 0; if ( v1[26] > 0u ) { do { v6 = *(_DWORD *)(v1[24] + 4 * v4); v11 = v6; if ( v6 ) { v7 = 0; v13 = 0; if ( *(_DWORD *)(v6 + 8) ) { do { v8 = *(_DWORD **)(*(_DWORD *)v6 + 4 * v7); if ( v8 ) { v9 = v8[1]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); operator delete(v8); v7 = v13; v6 = v11; } v13 = ++v7; } while ( v7 < *(_DWORD *)(v6 + 8) ); v4 = v12; } operator delete(*(void **)v6); operator delete((void *)v6); } v12 = ++v4; } while ( v4 < v1[26] ); } result = 0; if ( v1[26] ) { do *(_DWORD *)(v1[24] + 4 * result++) = 0; while ( result < v1[26] ); } v1[26] = 0; v1[27] = 0; v1[31] = 0; return result; } //----- (00811CD0) -------------------------------------------------------- void **__thiscall sub_811CD0(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 void *v4; // ST00_4 v2 = (void **)this; *(_DWORD *)this = &NiBoneLODController::`vftable'; sub_811BD0(this); operator delete(v2[29]); v3 = v2[24]; v2[23] = &NiTArray *>::`vftable'; operator delete(v3); v4 = v2[18]; v2[17] = &NiTArray *>::`vftable'; operator delete(v4); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A20BA0: using guessed type void *NiTArray *>::`vftable'; // A20BA8: using guessed type void *NiTArray *>::`vftable'; // A20BB4: using guessed type void *NiBoneLODController::`vftable'; //----- (00811D30) -------------------------------------------------------- void __thiscall sub_811D30(void **this, void *a2) { void **v2; // esi _DWORD *v3; // edi unsigned int v4; // eax v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = operator new(4 * (_DWORD)a2); v4 = 0; if ( v2[2] ) { do { v3[v4] = *((_DWORD *)*v2 + v4); ++v4; } while ( v4 < (unsigned int)v2[2] ); } } else { v3 = 0; } operator delete(*v2); *v2 = v3; v2[1] = a2; } } //----- (00811DA0) -------------------------------------------------------- void __thiscall sub_811DA0(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[4]); v2[4] = 0; if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[4] = v4; strcpy_s(v4, v3 + 1, Src); } } //----- (00811DF0) -------------------------------------------------------- void __thiscall sub_811DF0(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[5]); v2[5] = 0; if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[5] = v4; strcpy_s(v4, v3 + 1, Src); } } //----- (00811E40) -------------------------------------------------------- _DWORD *__thiscall sub_811E40(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *result; // eax unsigned int v5; // ecx _DWORD *v6; // edi unsigned int v7; // eax int v8; // esi _DWORD *v9; // edx int v10; // ebx int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx int v15; // [esp+10h] [ebp+Ch] v3 = this; result = (_DWORD *)this[9]; *a3 = result; if ( result ) { *a2 = operator new(4 * (_DWORD)result); v5 = v3[7]; v6 = v3 + 6; v7 = 0; if ( v5 ) { v8 = v3[8]; v9 = (_DWORD *)v6[2]; while ( !*v9 ) { ++v7; ++v9; if ( v7 >= v5 ) goto LABEL_7; } result = *(_DWORD **)(v8 + 4 * v7); } else { LABEL_7: result = 0; } if ( result ) { v15 = 0; do { v10 = result[1]; result = (_DWORD *)*result; if ( !result ) { v11 = (*(int (__thiscall **)(_DWORD *, int))(*v6 + 4))(v6, v10); v12 = v6[1]; v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_15: result = 0; } else { v14 = (_DWORD *)(v6[2] + 4 * v13); while ( !*v14 ) { ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_15; } result = (_DWORD *)*v14; } } *(_DWORD *)(v15 + *a2) = v10; v15 += 4; } while ( result ); } } else { *a2 = 0; } return result; } //----- (00811F10) -------------------------------------------------------- void *__thiscall sub_811F10(void **this, char *a2, char *Src) { char *v3; // edi void **v4; // ebx char *v5; // eax size_t v6; // esi char *v7; // eax char Dst[260]; // [esp+Ch] [ebp-108h] char v10[260]; // [esp+Dh] [ebp-107h] v3 = a2; v4 = this; strcpy_s(Dst, 0x104u, Src); while ( strstr(v3, "..\\") ) { v3 += 3; v5 = strrchr(Dst, 92); if ( v5 && strlen(v5) == 1 && (unsigned int)(&Dst[strlen(Dst) + 1] - v10) > 3 ) { *v5 = 0; v5 = strrchr(Dst, 92); } v5[1] = 0; } operator delete(v4[3]); v6 = strlen(Dst) + strlen(v3) + 1; v7 = (char *)operator new(v6); v4[3] = v7; strcpy_s(v7, v6, Dst); strcat_s((char *)v4[3], v6, v3); return v4[3]; } // 811F10: using guessed type char Dst[260]; //----- (00812030) -------------------------------------------------------- int __thiscall sub_812030(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax void *v4; // eax int result; // eax v2 = this; v3 = this[1]; if ( this[2] == v3 ) { if ( v3 ) v4 = (void *)(2 * v3); else v4 = (void *)1; sub_811D30((void **)this, v4); } result = v2[2]; *(_DWORD *)(*v2 + 4 * result) = *a2; ++v2[2]; return result; } //----- (00812070) -------------------------------------------------------- int __cdecl sub_812070(int a1, int a2) { int v2; // ecx int (__cdecl *v3)(int, int, signed int, int *, signed int); // edx int v5; // [esp+0h] [ebp-4h] v5 = v2; v3 = *(int (__cdecl **)(int, int, signed int, int *, signed int))(a1 + 4); v5 = 1; return v3(a1, a2, 1, &v5, 1); } //----- (008120A0) -------------------------------------------------------- int __cdecl sub_8120A0(int a1, int a2) { int v2; // ecx int (__cdecl *v3)(int, int, signed int, int *, signed int); // edx int v5; // [esp+0h] [ebp-4h] v5 = v2; v3 = *(int (__cdecl **)(int, int, signed int, int *, signed int))(a1 + 8); v5 = 4; return v3(a1, a2, 4, &v5, 1); } //----- (008120D0) -------------------------------------------------------- void __thiscall sub_8120D0(float **this, float *a2) { float **v2; // edi float *v3; // eax int v4; // edx float *i; // ecx float *v6; // esi unsigned int v7; // eax float *v8; // ecx v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = (float *)operator new(8 * (_DWORD)a2); if ( v3 ) { v4 = (int)a2 - 1; for ( i = v3; v4 >= 0; --v4 ) { i[1] = 0.0; *i = 0.0; i += 2; } v6 = v3; } else { v6 = 0; } v7 = 0; if ( v2[2] ) { do { v8 = *v2; v6[2 * v7] = (*v2)[2 * v7]; v6[2 * v7 + 1] = v8[2 * v7 + 1]; ++v7; } while ( v7 < (unsigned int)v2[2] ); } } else { v6 = 0; } operator delete(*v2); *v2 = v6; v2[1] = a2; } } //----- (00812170) -------------------------------------------------------- void __thiscall sub_812170(void **this, void *a2) { void **v2; // esi char *v3; // eax int v4; // edx int v5; // ecx char *v6; // edi unsigned int v7; // edx int v8; // ecx _DWORD *v9; // eax char *v10; // edi char *v11; // [esp+8h] [ebp-4h] v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = (char *)operator new(24 * (_DWORD)a2); if ( v3 ) { v4 = (int)a2 - 1; if ( (_DWORD)((_DWORD)a2 - 1) >= 0 ) { v5 = (int)(v3 + 8); do { *(float *)v5 = 0.0; *(_DWORD *)(v5 - 8) = 0; *(float *)(v5 + 4) = 0.0; *(_DWORD *)(v5 - 4) = 0; *(float *)(v5 + 8) = 0.0; *(_DWORD *)(v5 + 12) = -2; v5 += 24; --v4; } while ( v4 >= 0 ); } v6 = v3; v11 = v3; } else { v6 = 0; v11 = 0; } v7 = 0; if ( (unsigned int)v2[2] > 0 ) { v8 = 0; do { v9 = (char *)*v2 + v8; *(_DWORD *)&v6[v8] = *(_DWORD *)((char *)*v2 + v8); v10 = &v6[v8]; *((_DWORD *)v10 + 1) = v9[1]; *((_DWORD *)v10 + 2) = v9[2]; *((_DWORD *)v10 + 3) = v9[3]; *((_DWORD *)v10 + 4) = v9[4]; *((_DWORD *)v10 + 5) = v9[5]; v6 = v11; ++v7; v8 += 24; } while ( v7 < (unsigned int)v2[2] ); } } else { v6 = 0; } operator delete(*v2); *v2 = v6; v2[1] = a2; } } //----- (00812250) -------------------------------------------------------- char **__thiscall sub_812250(char **this, char *Src, char *a3) { char **v3; // esi unsigned int v4; // kr00_4 char *v5; // eax unsigned int v6; // kr04_4 char *v7; // eax v3 = this; *this = 0; this[1] = 0; operator delete(0); *v3 = 0; if ( Src ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); *v3 = v5; strcpy_s(v5, v4 + 1, Src); } operator delete(v3[1]); v3[1] = 0; if ( a3 ) { v6 = strlen(a3); v7 = (char *)operator new(v6 + 1); v3[1] = v7; strcpy_s(v7, v6 + 1, a3); } return v3; } //----- (008122F0) -------------------------------------------------------- void **__thiscall sub_8122F0(void **this, int a2, char *Src) { void **v3; // esi unsigned int v4; // kr00_4 char *v5; // eax v3 = this; this[1] = 0; *this = (void *)a2; this[2] = 0; this[3] = 0; this[4] = 0; operator delete(this[1]); v3[1] = 0; if ( Src ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); v3[1] = v5; strcpy_s(v5, v4 + 1, Src); } return v3; } //----- (00812350) -------------------------------------------------------- int __thiscall sub_812350(_DWORD *this, int a2, int a3, char *Src, char *a5) { int v6; // ebx char *v7; // esi char *v8; // edi char **v9; // eax if ( !sub_8C4C90(this + 6, a2, &a2) || !a2 ) return 2; if ( !sub_8C4C90((_DWORD *)(a2 + 12), a3, &a2) ) return 3; v6 = a2; if ( !a2 ) return 3; if ( *(_DWORD *)a2 ) return 4; v7 = Src; v8 = a5; if ( !Src && !a5 ) return 6; v9 = (char **)operator new(8u); if ( v9 ) a2 = (int)sub_812250(v9, v7, v8); else a2 = 0; sub_812030((_DWORD *)(v6 + 8), &a2); return 0; } //----- (00812400) -------------------------------------------------------- void *__thiscall sub_812400(void **this) { void **v1; // esi const char *v2; // eax v1 = this; v2 = (const char *)this[4]; if ( v2 ) { if ( strstr(v2, ":") || !strncmp((const char *)v1[4], "\\\\", 2u) ) return v1[4]; if ( v1[2] ) return sub_811F10(v1, (char *)v1[4], (char *)v1[2]); } return 0; } //----- (00812460) -------------------------------------------------------- void *__thiscall sub_812460(void **this, int a2) { void **v2; // edi int v3; // esi const char *v4; // eax v2 = this; if ( sub_8C4C90(this + 6, a2, &a2) ) { v3 = a2; if ( a2 ) { v4 = *(const char **)(a2 + 4); if ( v4 ) { if ( strstr(v4, ":") || !strncmp(*(const char **)(v3 + 4), "\\\\", 2u) ) return *(void **)(v3 + 4); if ( v2[2] ) return sub_811F10(v2, *(char **)(v3 + 4), (char *)v2[2]); } } } return 0; } //----- (008124E0) -------------------------------------------------------- int __stdcall sub_8124E0(int a1, _DWORD *a2) { int v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx void *v4; // eax _DWORD *v5; // edi int v6; // ST08_4 void *v7; // ST04_4 int (__cdecl *v8)(int, void *, int, _DWORD **, signed int); // eax int result; // eax int v10; // [esp+4h] [ebp-4h] v2 = a1; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a1 + 4); v10 = 4; v3(a1, &a1, 4, &v10, 1); if ( a1 <= 0 ) { result = (int)a2; *a2 = 0; } else { v4 = operator new(a1 + 1); v5 = a2; v6 = a1; v7 = v4; *a2 = v4; v8 = *(int (__cdecl **)(int, void *, int, _DWORD **, signed int))(v2 + 4); a2 = (_DWORD *)1; result = v8(v2, v7, v6, &a2, 1); *(_BYTE *)(a1 + *v5) = 0; } return result; } //----- (00812560) -------------------------------------------------------- int __thiscall sub_812560(int *this, _DWORD *a2) { int *v2; // esi int v3; // eax float *v4; // eax int v5; // ecx int result; // eax v2 = this; v3 = this[1]; if ( this[2] == v3 ) { if ( v3 ) v4 = (float *)(2 * v3); else v4 = (float *)1; sub_8120D0((float **)this, v4); } v5 = v2[2]; result = *v2; *(_DWORD *)(result + 8 * v5) = *a2; *(_DWORD *)(result + 8 * v5 + 4) = a2[1]; ++v2[2]; return result; } //----- (008125A0) -------------------------------------------------------- _DWORD *__thiscall sub_8125A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax void *v4; // eax _DWORD *result; // eax v2 = this; v3 = this[1]; if ( this[2] == v3 ) { if ( v3 ) v4 = (void *)(2 * v3); else v4 = (void *)1; sub_812170((void **)this, v4); } result = (_DWORD *)(*v2 + 24 * v2[2]); *result = *a2; result[1] = a2[1]; result[2] = a2[2]; result[3] = a2[3]; result[4] = a2[4]; result[5] = a2[5]; ++v2[2]; return result; } //----- (00812600) -------------------------------------------------------- int __thiscall sub_812600(_DWORD *this, int a2, char *Src) { _DWORD *v3; // esi void **v4; // eax int v5; // edi void **v6; // ebx void **v8; // [esp+10h] [ebp+8h] v3 = this; v4 = (void **)operator new(0x14u); v5 = a2; if ( v4 ) v8 = sub_8122F0(v4, a2, Src); else v8 = 0; if ( sub_8C4C90(v3 + 10, v5, &Src) ) { v6 = (void **)Src; if ( Src ) { operator delete(*((void **)Src + 1)); operator delete(v6[2]); operator delete(v6); } } sub_815C70(v3 + 10, v5, (int)v8); return 0; } //----- (00812680) -------------------------------------------------------- int __thiscall sub_812680(_DWORD *this, int a2, int a3, int a4, float a5, float a6, float a7, int a8) { int v9; // [esp+0h] [ebp-18h] int v10; // [esp+4h] [ebp-14h] float v11; // [esp+8h] [ebp-10h] float v12; // [esp+Ch] [ebp-Ch] float v13; // [esp+10h] [ebp-8h] int v14; // [esp+14h] [ebp-4h] if ( !sub_8C4C90(this + 10, a2, &a2) || !a2 ) return 11; v11 = a5; v9 = a3; v12 = a6; v10 = a4; v13 = a7; v14 = a8; sub_8125A0((_DWORD *)(a2 + 8), &v9); return 0; } //----- (008126F0) -------------------------------------------------------- _DWORD *__thiscall sub_8126F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, unsigned int a5) { _DWORD *result; // eax bool v6; // zf unsigned int v7; // esi unsigned int v8; // ecx unsigned int v9; // ebx int v10; // eax void *v11; // eax int v12; // edi int v13; // ebx int v14; // eax void *v15; // eax int v16; // eax void *v17; // eax unsigned int v18; // [esp+0h] [ebp-Ch] _DWORD *v19; // [esp+4h] [ebp-8h] _DWORD *v20; // [esp+8h] [ebp-4h] result = a4; v6 = *a4 == 3; v20 = this; if ( v6 ) { v7 = a5; v8 = *(_DWORD *)(a5 + 8); if ( v8 <= 0x3E8 ) { v9 = a4[7]; v18 = v9; if ( v9 ) { v10 = *(_DWORD *)(a5 + 4); if ( v8 == v10 ) { if ( v10 ) v11 = (void *)(2 * v10); else v11 = (void *)1; sub_811D30((void **)a5, v11); } v12 = a2; *(_DWORD *)(*(_DWORD *)v7 + 4 * (*(_DWORD *)(v7 + 8))++) = a2; a5 = 0; if ( v9 ) { do { v13 = *(_DWORD *)(a4[5] + 8 * a5); if ( sub_8C4C90(v20 + 6, v12, &a2) && a2 && sub_8C4C90((_DWORD *)(a2 + 12), v13, &v19) && v19 && *v19 == 3 ) { sub_8126F0(v12, v13, v19, v7); } else { v14 = *(_DWORD *)(v7 + 4); if ( *(_DWORD *)(v7 + 8) == v14 ) { if ( v14 ) v15 = (void *)(2 * v14); else v15 = (void *)1; sub_811D30((void **)v7, v15); } *(_DWORD *)(*(_DWORD *)v7 + 4 * (*(_DWORD *)(v7 + 8))++) = v13; } v12 = v13; ++a5; } while ( a5 < v18 ); } v16 = *(_DWORD *)(v7 + 4); if ( *(_DWORD *)(v7 + 8) == v16 ) { if ( v16 ) v17 = (void *)(2 * v16); else v17 = (void *)1; sub_811D30((void **)v7, v17); } result = a3; *(_DWORD *)(*(_DWORD *)v7 + 4 * (*(_DWORD *)(v7 + 8))++) = a3; } } } return result; } //----- (00812830) -------------------------------------------------------- void __thiscall sub_812830(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // edi int v7; // eax unsigned int v8; // edx unsigned int v9; // eax _DWORD *v10; // ecx unsigned int v11; // edx _DWORD *v12; // ebx unsigned int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // eax int v16; // ecx _DWORD *v17; // edi _DWORD *v18; // eax int v19; // eax unsigned int v20; // edx unsigned int v21; // eax _DWORD *v22; // ecx unsigned int v23; // ecx unsigned int v24; // esi int v25; // edx double v26; // st7 float *v27; // edx int v28; // ebx int v29; // edi _DWORD *v30; // esi int v31; // esi _DWORD *v32; // edi int v33; // edi const char *v34; // eax int v35; // [esp+8h] [ebp-20h] _DWORD *v36; // [esp+Ch] [ebp-1Ch] float *v37; // [esp+10h] [ebp-18h] int v38; // [esp+14h] [ebp-14h] unsigned int v39; // [esp+18h] [ebp-10h] _DWORD *v40; // [esp+1Ch] [ebp-Ch] _DWORD *v41; // [esp+20h] [ebp-8h] _DWORD *v42; // [esp+24h] [ebp-4h] v1 = this + 6; v2 = this[7]; v3 = 0; v40 = v1; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } if ( v5 ) { while ( 1 ) { v6 = (_DWORD *)v5[2]; if ( *v5 ) { v41 = (_DWORD *)*v5; } else { v7 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 4))(v1, v5[1]); v8 = v1[1]; v9 = v7 + 1; if ( v9 >= v8 ) { LABEL_16: v41 = 0; } else { v10 = (_DWORD *)(v1[2] + 4 * v9); while ( !*v10 ) { ++v9; ++v10; if ( v9 >= v8 ) goto LABEL_16; } v41 = (_DWORD *)*v10; } } v11 = v6[4]; v12 = v6 + 3; v13 = 0; v35 = (int)(v6 + 3); if ( v11 ) { v14 = (_DWORD *)v6[5]; while ( !*v14 ) { ++v13; ++v14; if ( v13 >= v11 ) goto LABEL_21; } v15 = *(_DWORD **)(v6[5] + 4 * v13); } else { LABEL_21: v15 = 0; } if ( v15 ) { while ( 1 ) { v16 = v15[1]; v17 = (_DWORD *)v15[2]; v18 = (_DWORD *)*v15; v38 = v16; v36 = v17; if ( v18 ) { v42 = v18; } else { v19 = (*(int (__thiscall **)(_DWORD *, int))(*v12 + 4))(v12, v16); v20 = v12[1]; v21 = v19 + 1; if ( v21 >= v20 ) { LABEL_33: v42 = 0; } else { v22 = (_DWORD *)(v12[2] + 4 * v21); while ( !*v22 ) { ++v21; ++v22; if ( v21 >= v20 ) goto LABEL_33; } v42 = (_DWORD *)*v22; } } if ( *v17 == 3 ) { v23 = v17[7]; v24 = 0; v39 = 0; if ( v23 ) { do { v25 = v17[5]; v26 = *(float *)(v25 + 8 * v24 + 4); v27 = (float *)(v25 + 8 * v24); v37 = v27; if ( -1.0 == v26 ) { v28 = v24 + 1 >= v23 ? v38 : *((_DWORD *)v27 + 2); v29 = *(_DWORD *)v27; v30 = *(_DWORD **)(v40[2] + 4 * (*(int (__thiscall **)(_DWORD *, int))(*v40 + 4))(v40, *(_DWORD *)v27)); if ( v30 ) { while ( !(*(unsigned __int8 (__stdcall **)(int, _DWORD))(*v40 + 8))(v29, v30[1]) ) { v30 = (_DWORD *)*v30; if ( !v30 ) goto LABEL_56; } v31 = v30[2]; if ( v31 ) { v32 = *(_DWORD **)(*(_DWORD *)(v31 + 20) + 4 * (*(int (__thiscall **)(int, int))(*(_DWORD *)(v31 + 12) + 4))(v31 + 12, v28)); if ( v32 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(v31 + 12) + 8))( v31 + 12, v28, v32[1]) ) { v32 = (_DWORD *)*v32; if ( !v32 ) goto LABEL_56; } v33 = v32[2]; if ( v33 ) { if ( !*(_DWORD *)v33 && *(_DWORD *)(v33 + 16) == 1 ) { v34 = ***(const char ****)(v33 + 8); if ( v34 ) { if ( !strcmp(v34, "end") ) v37[1] = 0.0; } } } } } } } LABEL_56: v17 = v36; v23 = v36[7]; v24 = v39 + 1; v39 = v24; } while ( v24 < v23 ); v12 = (_DWORD *)v35; } } if ( !v42 ) break; v15 = v42; } } if ( !v41 ) break; v5 = v41; v1 = v40; } } } //----- (00812A90) -------------------------------------------------------- int *__thiscall sub_812A90(int *this, int a2, char *Src, int a4) { int *v4; // esi void *v5; // eax size_t v6; // ST0C_4 unsigned int v7; // kr00_4 char *v8; // eax v4 = this; *this = a2; this[2] = a4; this[1] = 0; this[4] = 37; this[3] = (int)&NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; this[6] = 0; v5 = operator new(0x94u); v6 = 4 * v4[4]; v4[5] = (int)v5; memset(v5, 0, v6); v4[3] = (int)&NiTPointerMap::`vftable'; operator delete((void *)v4[1]); v4[1] = 0; if ( Src ) { v7 = strlen(Src); v8 = (char *)operator new(v7 + 1); v4[1] = (int)v8; strcpy_s(v8, v7 + 1, Src); } return v4; } // A20290: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; // A202B0: using guessed type void *NiTPointerMap::`vftable'; //----- (00812B30) -------------------------------------------------------- char __thiscall sub_812B30(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4) { char result; // al void *v5; // [esp+0h] [ebp-Ch] int v6; // [esp+4h] [ebp-8h] unsigned int v7; // [esp+8h] [ebp-4h] v5 = 0; v6 = 0; v7 = 0; sub_8126F0(this, a2, a3, a4, (unsigned int)&v5); if ( v7 <= 0x3E8 ) { operator delete(v5); result = 1; } else { operator delete(v5); result = 0; } return result; } //----- (00812B90) -------------------------------------------------------- int __thiscall sub_812B90(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi void (__cdecl *v4)(int, char *, signed int, rsize_t *, signed int); // edx const char **v5; // ebx char *v6; // eax rsize_t v7; // ST44_4 void (__cdecl *v8)(int, rsize_t *, signed int, rsize_t *, signed int); // ecx void (__cdecl *v9)(int, rsize_t *, signed int, rsize_t *, signed int); // ecx void (__cdecl *v10)(int, int, signed int, rsize_t *, signed int); // eax int v11; // ST18_4 void (__cdecl *v12)(int, int, signed int, rsize_t *, signed int); // eax int v13; // ST04_4 void (__cdecl *v14)(int, unsigned int *, signed int, rsize_t *, signed int); // eax int *v15; // eax int *v16; // edi void *v17; // eax size_t v18; // ST48_4 void (__cdecl *v19)(int, int *, signed int, rsize_t *, signed int); // eax void (__cdecl *v20)(int, int *, signed int, rsize_t *, signed int); // eax _BYTE *v21; // ebx void (__cdecl *v22)(int, _BYTE *, int, rsize_t *, signed int); // eax void (__cdecl *v23)(int, int *, signed int, rsize_t *, signed int); // ecx void *v24; // eax int v25; // ST40_4 void (__cdecl *v26)(int, void *, int, rsize_t *, signed int); // edx unsigned int v27; // kr04_4 char *v28; // eax void (__cdecl *v29)(int, int *, signed int, rsize_t *, signed int); // eax void (__cdecl *v30)(int, rsize_t *, signed int, rsize_t *, signed int); // eax void (__cdecl *v31)(int, int *, signed int, _DWORD **, signed int); // eax void (__cdecl *v32)(int, _DWORD **, signed int, _DWORD **, signed int); // eax _DWORD *v33; // edi int v34; // ebx float *v35; // eax void (__cdecl *v36)(int, int, signed int, _DWORD **, signed int); // edx void (__cdecl *v37)(int, rsize_t **, signed int, _DWORD **, signed int); // edx _DWORD *v38; // eax _DWORD *v39; // edi void (__cdecl *v40)(int, int *, signed int, int *, signed int); // edx void *v41; // eax int v42; // ST40_4 void *v43; // ST3C_4 void (__cdecl *v44)(int, void *, int, int *, signed int); // eax void (__cdecl *v45)(int, int **, signed int, int *, signed int); // edx void *v46; // eax int v47; // ST40_4 void *v48; // ST3C_4 void (__cdecl *v49)(int, void *, int, int *, signed int); // eax int v50; // eax int v51; // ecx _DWORD *v52; // edi unsigned int v53; // eax int v54; // ecx int v55; // eax void (__cdecl *v56)(int, unsigned int *, signed int, _DWORD **, signed int); // eax void (__cdecl *v57)(int, int *, signed int, _DWORD **, signed int); // eax void (__cdecl *v58)(int, float *, signed int, _DWORD **, signed int); // eax void (__cdecl *v59)(int, int *, signed int, _DWORD **, signed int); // eax void (__cdecl *v60)(int, float *, signed int, _DWORD **, signed int); // eax int v61; // eax float *v62; // eax int v63; // eax int v64; // ecx int v65; // eax void (__cdecl *v66)(int, unsigned int *, signed int, int *, signed int); // ecx int *v67; // eax int *v68; // edi void (__cdecl *v69)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v70)(int, int *, signed int, int *, signed int); // ecx void *v71; // eax int v72; // ST40_4 void (__cdecl *v73)(int, void *, int, int *, signed int); // edx void (__cdecl *v74)(int, rsize_t *, signed int, int *, signed int); // ecx int v75; // edi void (__cdecl *v76)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v77)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v78)(int, float *, signed int, int *, signed int); // ecx void (__cdecl *v79)(int, float *, signed int, int *, signed int); // ecx void (__cdecl *v80)(int, float *, signed int, int *, signed int); // ecx void (__cdecl *v81)(int, int *, signed int, int *, signed int); // ecx int v82; // eax void *v83; // eax int v84; // edx int v85; // eax int v86; // eax rsize_t v87; // eax int v89; // [esp+Ch] [ebp-184h] float v90; // [esp+10h] [ebp-180h] unsigned int v91; // [esp+14h] [ebp-17Ch] unsigned int v92; // [esp+18h] [ebp-178h] int v93; // [esp+1Ch] [ebp-174h] float v94; // [esp+20h] [ebp-170h] int v95; // [esp+24h] [ebp-16Ch] int v96; // [esp+28h] [ebp-168h] float v97; // [esp+2Ch] [ebp-164h] float v98; // [esp+30h] [ebp-160h] float v99; // [esp+34h] [ebp-15Ch] int v100; // [esp+38h] [ebp-158h] int v101; // [esp+3Ch] [ebp-154h] _DWORD *v102; // [esp+40h] [ebp-150h] int v103; // [esp+44h] [ebp-14Ch] int v104; // [esp+48h] [ebp-148h] char *v105; // [esp+4Ch] [ebp-144h] char *Src; // [esp+50h] [ebp-140h] _DWORD *v107; // [esp+54h] [ebp-13Ch] int *v108; // [esp+58h] [ebp-138h] unsigned int v109; // [esp+5Ch] [ebp-134h] int v110; // [esp+60h] [ebp-130h] unsigned int v111; // [esp+64h] [ebp-12Ch] rsize_t *v112; // [esp+68h] [ebp-128h] char v113; // [esp+6Fh] [ebp-121h] int *v114; // [esp+70h] [ebp-120h] int v115; // [esp+74h] [ebp-11Ch] rsize_t SizeInBytes; // [esp+78h] [ebp-118h] _DWORD *v117; // [esp+7Ch] [ebp-114h] rsize_t i; // [esp+80h] [ebp-110h] int v119; // [esp+84h] [ebp-10Ch] char Dst; // [esp+88h] [ebp-108h] v3 = this; v107 = this; Src = 0; v105 = 0; if ( a3 < 0x1020300 ) { v4 = *(void (__cdecl **)(int, char *, signed int, rsize_t *, signed int))(a2 + 4); SizeInBytes = 1; v4(a2, &v113, 1, &SizeInBytes, 1); if ( v113 ) { sub_8124E0(a2, &Src); sub_8124E0(a2, &v105); } } v5 = (const char **)(v3 + 4); sub_8124E0(a2, v3 + 4); if ( Src ) { strcpy_s(&Dst, 0x104u, Src); strcat_s(&Dst, 0x104u, *v5); operator delete((void *)*v5); *v5 = 0; SizeInBytes = strlen(&Dst) + 1; v6 = (char *)operator new(SizeInBytes); v7 = SizeInBytes; *v5 = v6; strcpy_s(v6, v7, &Dst); } sub_8124E0(a2, v3 + 5); if ( a3 >= 0x1020200 ) { v112 = (rsize_t *)v3[14]; v8 = *(void (__cdecl **)(int, rsize_t *, signed int, rsize_t *, signed int))(a2 + 4); SizeInBytes = 4; v8(a2, &i, 4, &SizeInBytes, 1); *v112 = i; v112 = (rsize_t *)v3[15]; v9 = *(void (__cdecl **)(int, rsize_t *, signed int, rsize_t *, signed int))(a2 + 4); SizeInBytes = 4; v9(a2, &i, 4, &SizeInBytes, 1); *v112 = i; v10 = *(void (__cdecl **)(int, int, signed int, rsize_t *, signed int))(a2 + 4); v11 = v3[14] + 4; SizeInBytes = 4; v10(a2, v11, 4, &SizeInBytes, 1); v12 = *(void (__cdecl **)(int, int, signed int, rsize_t *, signed int))(a2 + 4); v13 = v3[15] + 4; SizeInBytes = 4; v12(a2, v13, 4, &SizeInBytes, 1); } v14 = *(void (__cdecl **)(int, unsigned int *, signed int, rsize_t *, signed int))(a2 + 4); SizeInBytes = 4; v14(a2, &v92, 4, &SizeInBytes, 1); v111 = 0; if ( v92 ) { do { v15 = (int *)operator new(0x1Cu); v16 = v15; if ( v15 ) { *v15 = 0; v15[1] = 0; v15[2] = 0; v15[4] = 37; v15[3] = (int)&NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; v15[6] = 0; v17 = operator new(0x94u); v18 = 4 * v16[4]; v16[5] = (int)v17; memset(v17, 0, v18); v16[3] = (int)&NiTPointerMap::`vftable'; v108 = v16; } else { v108 = 0; v16 = 0; } v19 = *(void (__cdecl **)(int, int *, signed int, rsize_t *, signed int))(a2 + 4); i = 4; v19(a2, v16, 4, &i, 1); if ( a3 < 0x1020500 ) { v20 = *(void (__cdecl **)(int, int *, signed int, rsize_t *, signed int))(a2 + 4); i = 4; v20(a2, &v103, 4, &i, 1); if ( v103 <= 0 ) { v21 = 0; } else { v21 = operator new(v103 + 1); v22 = *(void (__cdecl **)(int, _BYTE *, int, rsize_t *, signed int))(a2 + 4); i = 1; v22(a2, v21, v103, &i, 1); v21[v103] = 0; } operator delete(v21); } v23 = *(void (__cdecl **)(int, int *, signed int, rsize_t *, signed int))(a2 + 4); i = 4; v23(a2, &v104, 4, &i, 1); if ( v104 <= 0 ) { v16[1] = 0; } else { v24 = operator new(v104 + 1); v25 = v104; v16[1] = (int)v24; v26 = *(void (__cdecl **)(int, void *, int, rsize_t *, signed int))(a2 + 4); i = 1; v26(a2, v24, v25, &i, 1); *(_BYTE *)(v104 + v16[1]) = 0; } if ( v105 ) { strcpy_s(&Dst, 0x104u, v105); strcat_s(&Dst, 0x104u, (const char *)v16[1]); operator delete((void *)v16[1]); v16[1] = 0; v27 = strlen(&Dst); v28 = (char *)operator new(v27 + 1); v16[1] = (int)v28; strcpy_s(v28, v27 + 1, &Dst); } v29 = *(void (__cdecl **)(int, int *, signed int, rsize_t *, signed int))(a2 + 4); i = 4; v29(a2, v16 + 2, 4, &i, 1); v30 = *(void (__cdecl **)(int, rsize_t *, signed int, rsize_t *, signed int))(a2 + 4); i = 4; v30(a2, &SizeInBytes, 4, &i, 1); for ( i = 0; i < SizeInBytes; ++i ) { v31 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v31(a2, &v119, 4, &v117, 1); v32 = *(void (__cdecl **)(int, _DWORD **, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v32(a2, &v102, 4, &v117, 1); v33 = v102; if ( v102 == (_DWORD *)4 ) { v34 = v107[14]; } else if ( v102 == (_DWORD *)5 ) { v34 = v107[15]; } else { v35 = (float *)operator new(0x24u); if ( v35 ) { v35[1] = 0.0; *v35 = 0.0; v35[2] = 0.0; v35[3] = 0.0; v35[4] = 0.0; v35[5] = 0.0; v35[6] = 0.0; v35[7] = 0.0; *((_DWORD *)v35 + 8) = 6; v34 = (int)v35; } else { v34 = 0; } *(_DWORD *)v34 = v33; v36 = *(void (__cdecl **)(int, int, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v36(a2, v34 + 4, 4, &v117, 1); v37 = *(void (__cdecl **)(int, rsize_t **, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v37(a2, &v112, 4, &v117, 1); v110 = 0; if ( v112 ) { do { v38 = operator new(8u); if ( v38 ) { *v38 = 0; v38[1] = 0; v39 = v38; v117 = v38; } else { v39 = 0; v117 = 0; } v40 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v115 = 4; v40(a2, &v101, 4, &v115, 1); if ( v101 <= 0 ) { *v39 = 0; } else { v41 = operator new(v101 + 1); v42 = v101; v43 = v41; *v39 = v41; v44 = *(void (__cdecl **)(int, void *, int, int *, signed int))(a2 + 4); v115 = 1; v44(a2, v43, v42, &v115, 1); *(_BYTE *)(v101 + *v39) = 0; } v45 = *(void (__cdecl **)(int, int **, signed int, int *, signed int))(a2 + 4); v115 = 4; v45(a2, &v114, 4, &v115, 1); if ( (signed int)v114 <= 0 ) { v39[1] = 0; } else { v46 = operator new((size_t)v114 + 1); v47 = (int)v114; v48 = v46; v39[1] = v46; v49 = *(void (__cdecl **)(int, void *, int, int *, signed int))(a2 + 4); v115 = 1; v49(a2, v48, v47, &v115, 1); *((_BYTE *)v114 + v39[1]) = 0; } v50 = *(_DWORD *)(v34 + 12); if ( *(_DWORD *)(v34 + 16) == v50 ) { v51 = 2 * v50; if ( !v50 ) v51 = 1; v115 = v51; if ( v51 != v50 ) { if ( v51 ) { v52 = operator new(4 * v115); v53 = 0; if ( *(_DWORD *)(v34 + 16) ) { do { v52[v53] = *(_DWORD *)(*(_DWORD *)(v34 + 8) + 4 * v53); ++v53; } while ( v53 < *(_DWORD *)(v34 + 16) ); } } else { v52 = 0; } operator delete(*(void **)(v34 + 8)); v54 = v115; *(_DWORD *)(v34 + 8) = v52; v39 = v117; *(_DWORD *)(v34 + 12) = v54; } } *(_DWORD *)(*(_DWORD *)(v34 + 8) + 4 * *(_DWORD *)(v34 + 16)) = v39; v55 = v110; ++*(_DWORD *)(v34 + 16); v110 = v55 + 1; } while ( v55 + 1 < (unsigned int)v112 ); } v56 = *(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v56(a2, &v109, 4, &v117, 1); if ( a3 < 0x1020400 && v109 ) { v57 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(a2 + 4); v90 = 0.0; v89 = 0; v117 = (_DWORD *)4; v57(a2, &v89, 4, &v117, 1); v58 = *(void (__cdecl **)(int, float *, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v58(a2, &v90, 4, &v117, 1); --v109; } v110 = 0; if ( v109 ) { do { v59 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(a2 + 4); v94 = 0.0; v93 = 0; v117 = (_DWORD *)4; v59(a2, &v93, 4, &v117, 1); v60 = *(void (__cdecl **)(int, float *, signed int, _DWORD **, signed int))(a2 + 4); v117 = (_DWORD *)4; v60(a2, &v94, 4, &v117, 1); v61 = *(_DWORD *)(v34 + 24); if ( *(_DWORD *)(v34 + 28) == v61 ) { if ( v61 ) v62 = (float *)(2 * v61); else v62 = (float *)1; sub_8120D0((float **)(v34 + 20), v62); } v63 = *(_DWORD *)(v34 + 20); v64 = *(_DWORD *)(v34 + 28); *(_DWORD *)(v63 + 8 * v64) = v93; *(float *)(v63 + 8 * v64 + 4) = v94; v65 = v110; ++*(_DWORD *)(v34 + 28); v110 = v65 + 1; } while ( v65 + 1 < v109 ); } } sub_815C70(v108 + 3, v119, v34); } sub_815C70(v107 + 6, *v108, (int)v108); ++v111; } while ( v111 < v92 ); } v66 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v119 = 4; v66(a2, &v91, 4, &v119, 1); v111 = 0; if ( v91 ) { v102 = v107 + 10; do { v67 = (int *)operator new(0x14u); if ( v67 ) { *v67 = 0; v67[1] = 0; v67[2] = 0; v67[3] = 0; v67[4] = 0; v68 = v67; v114 = v67; } else { v68 = 0; v114 = 0; } v69 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v119 = 4; v69(a2, v68, 4, &v119, 1); v70 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v119 = 4; v70(a2, &v115, 4, &v119, 1); if ( v115 <= 0 ) { v68[1] = 0; } else { v71 = operator new(v115 + 1); v72 = v115; v68[1] = (int)v71; v73 = *(void (__cdecl **)(int, void *, int, int *, signed int))(a2 + 4); v119 = 1; v73(a2, v71, v72, &v119, 1); *(_BYTE *)(v115 + v68[1]) = 0; } v74 = *(void (__cdecl **)(int, rsize_t *, signed int, int *, signed int))(a2 + 4); v119 = 4; v74(a2, &i, 4, &v119, 1); SizeInBytes = 0; if ( i ) { v75 = (int)v114; do { v76 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v97 = 0.0; v98 = 0.0; v99 = 0.0; v95 = 0; v96 = 0; v100 = -2; v119 = 4; v76(a2, &v95, 4, &v119, 1); v77 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v119 = 4; v77(a2, &v96, 4, &v119, 1); v78 = *(void (__cdecl **)(int, float *, signed int, int *, signed int))(a2 + 4); v119 = 4; v78(a2, &v97, 4, &v119, 1); v79 = *(void (__cdecl **)(int, float *, signed int, int *, signed int))(a2 + 4); v119 = 4; v79(a2, &v98, 4, &v119, 1); v80 = *(void (__cdecl **)(int, float *, signed int, int *, signed int))(a2 + 4); v119 = 4; v80(a2, &v99, 4, &v119, 1); if ( a3 < 0x1020100 ) { v100 = -2; } else { v81 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v119 = 4; v81(a2, &v100, 4, &v119, 1); } v82 = *(_DWORD *)(v75 + 12); if ( *(_DWORD *)(v75 + 16) == v82 ) { if ( v82 ) v83 = (void *)(2 * v82); else v83 = (void *)1; sub_812170((void **)(v75 + 8), v83); } v84 = 3 * *(_DWORD *)(v75 + 16); v85 = *(_DWORD *)(v75 + 8); *(_DWORD *)(v85 + 8 * v84) = v95; v86 = v85 + 8 * v84; *(_DWORD *)(v86 + 4) = v96; *(float *)(v86 + 8) = v97; *(float *)(v86 + 12) = v98; *(float *)(v86 + 16) = v99; *(_DWORD *)(v86 + 20) = v100; v87 = SizeInBytes; ++*(_DWORD *)(v75 + 16); SizeInBytes = v87 + 1; } while ( v87 + 1 < i ); v68 = v114; } sub_815C70(v102, *v68, (int)v68); ++v111; } while ( v111 < v91 ); } operator delete(Src); operator delete(v105); return 0; } // A20290: using guessed type void *NiTMapBase,unsigned int,NiKFMTool::Transition *>::`vftable'; // A202B0: using guessed type void *NiTPointerMap::`vftable'; //----- (00813770) -------------------------------------------------------- int __thiscall sub_813770(_DWORD *this, void *a2, int a3, int a4, float a5) { _DWORD *v5; // ebx int v6; // edi int v8; // esi float *v9; // eax double v10; // st7 _DWORD *v11; // ebx void **v12; // esi _DWORD *v13; // [esp+8h] [ebp-4h] v5 = this; v13 = this; if ( !sub_8C4C90(this + 6, (int)a2, &a2) ) return 2; v6 = 0; if ( !a2 ) return 2; v8 = a4; if ( a4 == 4 ) { v6 = v5[14]; } else if ( a4 == 5 ) { v6 = v5[15]; } else { v9 = (float *)operator new(0x24u); if ( v9 ) { v10 = a5; *(_DWORD *)v9 = v8; v9[1] = v10; v9[2] = 0.0; v9[3] = 0.0; v9[4] = 0.0; v9[5] = 0.0; v9[6] = 0.0; v9[7] = 0.0; *((_DWORD *)v9 + 8) = 6; v6 = (int)v9; } } v11 = a2; if ( sub_8C4C90((_DWORD *)a2 + 3, a3, &a2) ) { v12 = (void **)a2; if ( a2 != (void *)v13[14] && a2 != (void *)v13[15] ) { if ( a2 ) { sub_801580(a2); operator delete(v12[5]); operator delete(v12[2]); operator delete(v12); } } } sub_815C70(v11 + 3, a3, v6); return 0; } //----- (00813860) -------------------------------------------------------- int __thiscall sub_813860(_DWORD *this, int a2, int a3, int a4, float a5) { _DWORD *v6; // ebx _DWORD *v7; // edi int *v8; // esi int v9; // edi int v10; // eax int v11; // esi _DWORD *v12; // [esp+0h] [ebp-Ch] int v13; // [esp+4h] [ebp-8h] float v14; // [esp+8h] [ebp-4h] v12 = this; if ( !sub_8C4C90(this + 6, a2, &v14) || v14 == 0.0 ) return 2; v6 = (_DWORD *)a3; if ( !sub_8C4C90((_DWORD *)(LODWORD(v14) + 12), a3, &a3) ) return 3; v7 = (_DWORD *)a3; if ( !a3 ) return 3; if ( *(_DWORD *)a3 != 3 ) return 4; v14 = a5; v8 = (int *)(a3 + 20); v13 = a4; sub_812560((int *)(a3 + 20), &v13); if ( sub_812B30(v12, a2, v6, v7) ) return 0; v9 = v7[7]; v10 = --v8[2]; v11 = *v8; *(_DWORD *)(v11 + 8 * v9) = *(_DWORD *)(v11 + 8 * v10); *(_DWORD *)(v11 + 8 * v9 + 4) = *(_DWORD *)(v11 + 8 * v10 + 4); return 10; } //----- (00813930) -------------------------------------------------------- int __thiscall sub_813930(_DWORD *this, void *a2, char *Src, int a4) { _DWORD *v4; // esi int *v5; // eax void *v6; // edi int *v7; // ebx v4 = this; v5 = (int *)operator new(0x1Cu); v6 = a2; if ( v5 ) v7 = sub_812A90(v5, (int)a2, Src, a4); else v7 = 0; if ( sub_8C4C90(v4 + 6, (int)v6, &a2) && a2 ) { sub_802C90((void **)a2); operator delete(a2); } sub_815C70(v4 + 6, (int)v6, (int)v7); return 0; } //----- (008139A0) -------------------------------------------------------- signed int __thiscall sub_8139A0(void **this, _DWORD *a2, unsigned int a3, char a4) { char *v4; // eax const char *v5; // esi char *v6; // eax char *v7; // eax char *v8; // eax const char *v9; // edi unsigned int v10; // kr00_4 char *v11; // eax char *v12; // eax const char *v13; // edi unsigned int v14; // kr04_4 char *v15; // eax const char *v16; // esi char *v17; // eax char *v18; // esi char *v19; // eax char *v20; // eax void *v21; // edi char *v22; // eax const char *v23; // esi char *v24; // eax char *v25; // eax int v26; // eax char *v27; // eax char *v28; // eax char *v29; // eax char *v30; // eax const char *v31; // edi char v32; // bl char *v33; // eax char *v34; // eax float v35; // ST40_4 unsigned int v36; // edi char *v37; // eax char *v38; // eax int v39; // esi char *v40; // eax int v41; // eax char *v42; // eax char *v43; // eax char *v44; // eax char *v45; // edi char *v46; // eax char *v47; // esi char *v48; // eax char *v49; // eax int v50; // eax int v51; // edi char *v52; // eax char *v53; // esi char *v54; // eax char *v55; // eax unsigned int v56; // ebx int v57; // esi char *v58; // eax int v59; // edi char *v60; // eax int v61; // eax char *v63; // [esp+Ch] [ebp-240h] void *v64; // [esp+1Ch] [ebp-230h] unsigned int v65; // [esp+24h] [ebp-228h] char *v66; // [esp+28h] [ebp-224h] char *Src; // [esp+2Ch] [ebp-220h] int v68; // [esp+30h] [ebp-21Ch] int v69; // [esp+34h] [ebp-218h] int v70; // [esp+34h] [ebp-218h] void **v71; // [esp+38h] [ebp-214h] char *Context; // [esp+3Ch] [ebp-210h] char Delim[2]; // [esp+40h] [ebp-20Ch] char Dst; // [esp+44h] [ebp-208h] char Str; // [esp+148h] [ebp-104h] strcpy(Delim, "#\n"); Src = 0; v66 = 0; v71 = this; if ( !sub_8AA4B0(a2, &Str, 0x100u) ) { LABEL_105: operator delete(Src); operator delete(v66); sub_812830(v71); return 0; } while ( 1 ) { v4 = strtok_s(&Str, Delim, &Context); v5 = v4; if ( !v4 || *v4 == 59 ) goto LABEL_104; if ( !strcmp(v4, "END_KFM_FILE") ) goto LABEL_105; if ( !strcmp(v5, "DEFAULTPATHS") ) { v6 = strtok_s(0, Delim, &Context); if ( !v6 ) return 14; if ( atoi(v6) == 1 && (!a4 || a3 >= 0x2010000) ) { if ( !sub_8AA4B0(a2, &Str, 0x100u) ) return 14; v7 = strtok_s(&Str, Delim, &Context); if ( !v7 ) return 14; if ( strcmp(v7, "DEFAULTNIFPATH") ) return 14; v8 = strtok_s(0, Delim, &Context); v9 = v8; if ( !v8 ) return 14; if ( strcmp(v8, "NULL") ) { v10 = strlen(v9); Src = (char *)operator new(v10 + 1); strcpy_s(Src, v10 + 1, v9); } if ( !sub_8AA4B0(a2, &Str, 0x100u) ) return 14; v11 = strtok_s(&Str, "#", &Context); if ( !v11 ) return 14; if ( strcmp(v11, "DEFAULTKFPATH") ) return 14; v12 = strtok_s(0, Delim, &Context); v13 = v12; if ( !v12 ) return 14; if ( strcmp(v12, "NULL") ) { v14 = strlen(v13); v66 = (char *)operator new(v14 + 1); strcpy_s(v66, v14 + 1, v13); } } goto LABEL_104; } if ( !strcmp(v5, "MODEL") ) { v15 = strtok_s(0, Delim, &Context); v16 = v15; if ( !v15 ) return 14; if ( !strcmp(v15, "NULL") ) v16 = 0; if ( Src ) { strcpy_s(&Dst, 0x104u, Src); strcat_s(&Dst, 0x104u, v16); v63 = &Dst; } else { v63 = (char *)v16; } sub_811DA0(v71, v63); v17 = strtok_s(0, Delim, &Context); v18 = v17; if ( !v17 ) return 14; if ( !strcmp(v17, "NULL") ) v18 = 0; sub_811DF0(v71, v18); goto LABEL_104; } if ( !strcmp(v5, "ANIMATION") ) { v19 = strtok_s(0, " \n", &Context); if ( !v19 ) return 14; if ( strcmp(v19, "EVENTCODE") ) return 14; v20 = strtok_s(0, Delim, &Context); if ( !v20 ) return 14; v21 = (void *)atoi(v20); if ( !strtok_s(0, Delim, &Context) ) return 14; v22 = strtok_s(0, Delim, &Context); v23 = v22; if ( !v22 ) return 14; if ( !strcmp(v22, "NULL") ) v23 = 0; if ( v66 ) { strcpy_s(&Dst, 0x104u, v66); strcat_s(&Dst, 0x104u, v23); } else { strcpy_s(&Dst, 0x104u, v23); } v24 = strtok_s(0, " \n", &Context); if ( !v24 ) return 14; if ( strcmp(v24, "INDEX") ) return 14; v25 = strtok_s(0, Delim, &Context); if ( !v25 ) return 14; v26 = atoi(v25); sub_813930(v71, v21, &Dst, v26); v64 = v21; goto LABEL_104; } if ( strcmp(v5, "\tTRANSITION") ) break; v27 = strtok_s(0, " \n", &Context); if ( !v27 ) return 14; if ( strcmp(v27, "EVENTCODE") ) return 14; v28 = strtok_s(0, Delim, &Context); if ( !v28 ) return 14; v68 = atoi(v28); v29 = strtok_s(0, " \n", &Context); if ( !v29 ) return 14; if ( strcmp(v29, "TYPE") ) return 14; v30 = strtok_s(0, Delim, &Context); v31 = v30; if ( !v30 ) return 14; if ( !strcmp(v30, "BLEND") ) { v32 = 1; } else { if ( strcmp(v31, "MORPH") ) return 14; v32 = 0; } v33 = strtok_s(0, " \n", &Context); if ( !v33 ) return 14; if ( strcmp(v33, "DURATION") ) return 14; v34 = strtok_s(0, Delim, &Context); if ( !v34 ) return 14; v35 = atof(v34); sub_813770(v71, v64, v68, v32 == 0, v35); v36 = 0; if ( !a4 || a3 >= 0x2000000 ) { v37 = strtok_s(0, " \n", &Context); if ( !v37 ) return 14; if ( strcmp(v37, "INTERMEDIATEANIMS") ) return 14; v38 = strtok_s(0, Delim, &Context); if ( !v38 ) return 14; v36 = atoi(v38); if ( v36 ) *(_DWORD *)sub_64EE80(v71, (int)v64, v68) = 3; } v39 = 0; if ( v36 ) { do { v40 = strtok_s(0, Delim, &Context); if ( !v40 ) return 14; v41 = atoi(v40); sub_813860(v71, (int)v64, v68, v41, -1.0); } while ( ++v39 < v36 ); } v65 = 1; if ( !a4 || a3 >= 0x2000000 ) { v42 = strtok_s(0, " \n", &Context); if ( !v42 ) return 14; if ( strcmp(v42, "TEXTKEYPAIRS") ) return 14; v43 = strtok_s(0, Delim, &Context); if ( !v43 ) return 14; v65 = atoi(v43); } v69 = 0; if ( v65 ) { do { v44 = strtok_s(0, Delim, &Context); v45 = v44; if ( !v44 ) return 14; if ( !strcmp(v44, "NULL") ) v45 = 0; v46 = strtok_s(0, Delim, &Context); v47 = v46; if ( !v46 ) return 14; if ( !strcmp(v46, "NULL") ) v47 = 0; if ( v45 || v47 ) sub_812350(v71, (int)v64, v68, v45, v47); } while ( ++v69 < v65 ); } LABEL_104: if ( !sub_8AA4B0(a2, &Str, 0x100u) ) goto LABEL_105; } if ( strcmp(v5, "LAYERGROUP") ) return 14; v48 = strtok_s(0, " \n", &Context); if ( !v48 ) return 14; if ( strcmp(v48, "GROUPID") ) return 14; v49 = strtok_s(0, Delim, &Context); if ( !v49 ) return 14; v50 = atoi(v49); v51 = v50; v70 = v50; v52 = strtok_s(0, Delim, &Context); v53 = v52; if ( !v52 ) return 14; if ( !strcmp(v52, "NULL") ) v53 = 0; sub_812600(v71, v51, v53); v54 = strtok_s(0, " \n", &Context); if ( !v54 ) return 14; if ( strcmp(v54, "LAYERS") ) return 14; v55 = strtok_s(0, Delim, &Context); if ( !v55 ) return 14; v56 = atoi(v55); v57 = 0; if ( !v56 ) goto LABEL_104; while ( 1 ) { v58 = strtok_s(0, Delim, &Context); if ( !v58 ) return 14; v59 = atoi(v58); v60 = strtok_s(0, Delim, &Context); if ( !v60 ) return 14; v61 = atoi(v60); sub_812680(v71, v70, v59, v61, 1.0, 0.0, 0.0, -2); if ( ++v57 >= v56 ) goto LABEL_104; } } //----- (00814780) -------------------------------------------------------- int __userpurge sub_814780@(void **a1@, int a2@, char *Src) { _DWORD *v3; // esi rsize_t v4; // edi bool v5; // bl unsigned int v6; // kr00_4 unsigned int v7; // eax unsigned int v8; // edi int result; // eax char *v10; // eax int v11; // edi signed int v12; // edi char v13; // [esp+4h] [ebp-224h] void **v14; // [esp+8h] [ebp-220h] char v15; // [esp+Fh] [ebp-219h] char Dst; // [esp+10h] [ebp-218h] char v17; // [esp+113h] [ebp-115h] char v18; // [esp+114h] [ebp-114h] char v19; // [esp+127h] [ebp-101h] char v20; // [esp+12Fh] [ebp-F9h] char v21[16]; // [esp+214h] [ebp-14h] v14 = a1; strcpy_s(&Dst, 0x104u, Src); nullsub_6(&Dst); v3 = (_DWORD *)sub_8AA270(); if ( !v3 ) return 13; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 4))(v3) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); return 13; } (*(void (__thiscall **)(_DWORD *, _DWORD, int))(*v3 + 8))(v3, 0, a2); sub_8AA4B0(v3, &v18, 0x100u); v4 = 3; v13 = 0; v5 = 0; if ( !strncmp(&v18, ";Gamebryo KFM File Version ", 0x1Bu) ) { v6 = strlen(&v18); v5 = *(&v17 + v6) == 98; v4 = v6 - (v5 + 27); strncpy_s(v21, 0x10u, &v20, v4); } else { if ( strncmp(&v18, ";AnImmerse Version ", 0x13u) ) goto LABEL_28; strncpy_s(v21, 0x10u, &v19, 3u); v13 = 1; } v21[v4] = 0; v15 = 0; v7 = sub_875E20(v21); v8 = v7; if ( v13 ) { if ( v7 < 0x1010000 || v7 > 0x5000000 ) { (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); return 15; } goto LABEL_15; } if ( v7 >= 0x1020000 ) { if ( v7 <= sub_875E20(off_ABC0E8) ) goto LABEL_15; LABEL_28: (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); return 15; } v15 = 1; LABEL_15: v10 = strrchr(&Dst, 92); if ( v10 ) { v10[1] = 0; sub_81A700(v14, &Dst); } else { operator delete(v14[2]); v14[2] = 0; } if ( v13 || v15 ) { v12 = sub_8139A0(v14, v3, v8, v13); (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = v12; } else if ( v5 ) { v15 = 1; if ( v8 >= 0x1020600 && (sub_812070((int)v3, (int)&v15), v15 != 1) && sub_8AA3C0() ) { (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 16; } else { (*(void (__thiscall **)(_DWORD *, bool))(*v3 + 8))(v3, v15 != 1); v11 = sub_812B90(v14, (int)v3, v8); (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = v11; } } else { (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 14; } return result; } // 814780: using guessed type char var_14[16]; //----- (00814AC0) -------------------------------------------------------- void __thiscall sub_814AC0(_DWORD *this, _DWORD *a2) { if ( (_DWORD *)this[12] != a2 ) this[17] = 0; sub_86C4F0((int)this, a2); } //----- (00814AE0) -------------------------------------------------------- bool __thiscall sub_814AE0(float *this, int a2) { float *v2; // esi v2 = this; return sub_831CF0(this, a2) && *(_DWORD *)(a2 + 64) == *((_DWORD *)v2 + 16) && *(_BYTE *)(a2 + 72) == *((_BYTE *)v2 + 72) && *(_DWORD *)(a2 + 76) == *((_DWORD *)v2 + 19) && *(_DWORD *)(a2 + 80) == *((_DWORD *)v2 + 20); } //----- (00814B30) -------------------------------------------------------- BOOL __thiscall sub_814B30(float *this, float *a2) { return *a2 != *this || a2[1] != this[1]; } //----- (00814B70) -------------------------------------------------------- float __userpurge sub_814B70@(float *this@, float *a2) { float result; // eax if ( *((_BYTE *)this + 28) || *a2 != *this || a2[1] != this[1] ) { *((_BYTE *)this + 28) = 1; result = *a2; *this = *a2; this[1] = a2[1]; } else { *((_BYTE *)this + 28) = 0; result = *a2; *this = *a2; this[1] = a2[1]; } return result; } //----- (00814BD0) -------------------------------------------------------- int __thiscall sub_814BD0(int this, float a2) { int result; // eax if ( *(_BYTE *)(this + 28) || a2 != *(float *)(this + 8) ) { result = 1; *(float *)(this + 8) = a2; *(_BYTE *)(this + 28) = 1; } else { result = 0; *(float *)(this + 8) = a2; *(_BYTE *)(this + 28) = 0; } return result; } //----- (00814C10) -------------------------------------------------------- float __userpurge sub_814C10@(int this@, float *a2) { float result; // eax if ( *(_BYTE *)(this + 28) || *a2 != *(float *)(this + 12) || a2[1] != *(float *)(this + 16) ) { *(_BYTE *)(this + 28) = 1; result = *a2; *(float *)(this + 12) = *a2; *(float *)(this + 16) = a2[1]; } else { *(_BYTE *)(this + 28) = 0; result = *a2; *(float *)(this + 12) = *a2; *(float *)(this + 16) = a2[1]; } return result; } //----- (00814C70) -------------------------------------------------------- int __thiscall sub_814C70(_DWORD *this) { _DWORD *v1; // esi int result; // eax char *v3; // eax int v4; // ecx v1 = this; result = this[21]; if ( !result ) { v3 = (char *)operator new(0x32u); v4 = v1[20]; v1[21] = v3; switch ( v4 ) { case 0: sub_7FF6E0(v3, 0x32u, "%d-%d-TT_TRANSLATE_U", *((unsigned __int8 *)v1 + 72), v1[19]); result = v1[21]; break; case 1: sub_7FF6E0(v3, 0x32u, "%d-%d-TT_TRANSLATE_V", *((unsigned __int8 *)v1 + 72), v1[19]); result = v1[21]; break; case 2: sub_7FF6E0(v3, 0x32u, "%d-%d-TT_ROTATE", *((unsigned __int8 *)v1 + 72), v1[19]); result = v1[21]; break; case 3: sub_7FF6E0(v3, 0x32u, "%d-%d-TT_SCALE_U", *((unsigned __int8 *)v1 + 72), v1[19]); result = v1[21]; break; case 4: sub_7FF6E0(v3, 0x32u, "%d-%d-TT_SCALE_V", *((unsigned __int8 *)v1 + 72), v1[19]); goto LABEL_8; default: LABEL_8: result = v1[21]; break; } } return result; } //----- (00814D50) -------------------------------------------------------- int __thiscall sub_814D50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi float *v5; // eax float *v6; // edi int v7; // esi v2 = this; result = sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); v5 = (float *)operator new(0x18u); if ( v5 ) v6 = sub_8261F0(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v2[15] + 108))(); } return result; } //----- (00814DE0) -------------------------------------------------------- int __thiscall sub_814DE0(_DWORD *this, unsigned int a2) { int v2; // eax int result; // eax v2 = this[16]; if ( v2 && a2 < *(_DWORD *)(v2 + 12) ) result = *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4 * a2); else result = 0; return result; } //----- (00814E10) -------------------------------------------------------- int __thiscall sub_814E10(_DWORD *this) { int result; // eax result = this[16]; if ( result ) result = *(_DWORD *)(result + 12); return result; } //----- (00814E20) -------------------------------------------------------- bool __thiscall sub_814E20(int this) { bool result; // al int v2; // eax unsigned int v3; // edx int v4; // eax int v5; // edx int v6; // edx if ( *(_DWORD *)(this + 68) ) return 1; v2 = *(_DWORD *)(this + 48); if ( !v2 ) return 0; v3 = *(_DWORD *)(this + 76); if ( *(_BYTE *)(this + 72) ) { v4 = *(_DWORD *)(v2 + 64); if ( v4 && v3 < *(_DWORD *)(v4 + 12) ) { v5 = *(_DWORD *)(*(_DWORD *)(v4 + 4) + 4 * v3); *(_DWORD *)(this + 68) = v5; result = v5 != 0; } else { *(_DWORD *)(this + 68) = 0; result = 0; } } else { v6 = *(_DWORD *)(*(_DWORD *)(v2 + 40) + 4 * v3); *(_DWORD *)(this + 68) = v6; result = v6 != 0; } return result; } //----- (00814E80) -------------------------------------------------------- char *sub_814E80() { return dword_BA3BC8; } //----- (00814E90) -------------------------------------------------------- char __stdcall sub_814E90(int a1) { int v1; // eax if ( !a1 ) return 0; v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v1 ) return 0; while ( (char *)v1 != dword_BA4768 ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } return 1; } //----- (00814EC0) -------------------------------------------------------- char __thiscall sub_814EC0(void **this, void *a2, int a3) { void **v3; // esi _DWORD *v5; // ebx unsigned int v6; // ecx unsigned int v7; // eax void **v8; // edx unsigned int v9; // edi unsigned int v10; // eax int v11; // ebx void *v12; // ecx void *v13; // ecx void *v14; // eax v3 = this; this[17] = a2; if ( !a2 ) { operator delete(this[21]); v3[21] = 0; return 1; } if ( a3 ) { if ( !this[12] ) (*((void (__stdcall **)(int))*this + 18))(a3); } else if ( !this[12] ) { return 0; } v5 = v3[12]; v6 = v5[12]; v7 = 0; if ( v6 ) { v8 = (void **)v5[10]; while ( *v8 != a2 ) { ++v7; ++v8; if ( v7 >= v6 ) goto LABEL_12; } v13 = v3[21]; *((_BYTE *)v3 + 72) = 0; v3[19] = (void *)v7; operator delete(v13); } else { LABEL_12: v9 = 0; v10 = sub_814E10(v3[12]); if ( !v10 ) return 0; v11 = v5[16]; while ( 1 ) { v12 = (void *)(v11 && v9 < *(_DWORD *)(v11 + 12) ? *(_DWORD *)(*(_DWORD *)(v11 + 4) + 4 * v9) : 0); if ( v12 == a2 ) break; if ( ++v9 >= v10 ) return 0; } v14 = v3[21]; *((_BYTE *)v3 + 72) = 1; v3[19] = (void *)v9; operator delete(v14); } v3[21] = 0; return 1; } //----- (00814FA0) -------------------------------------------------------- char __thiscall sub_814FA0(int this, float a2) { int v2; // esi int v3; // eax int v4; // ecx int v5; // ecx int v6; // ecx float v7; // eax float v8; // edx int v9; // eax int v10; // eax float v11; // edx int v12; // eax int v14; // [esp+20h] [ebp-20h] float v15; // [esp+24h] [ebp-1Ch] int v16; // [esp+28h] [ebp-18h] float v17; // [esp+2Ch] [ebp-14h] int v18; // [esp+30h] [ebp-10h] float v19; // [esp+34h] [ebp-Ch] float v20; // [esp+38h] [ebp-8h] float v21; // [esp+3Ch] [ebp-4h] v2 = this; LOBYTE(v3) = *(_BYTE *)(this + 8) >> 5; if ( v3 & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { LOBYTE(v3) = sub_80FFE0((float *)this, a2); if ( (_BYTE)v3 ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return v3; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !(_BYTE)v3 ) return v3; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOBYTE(v3) = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( (_BYTE)v3 ) { LOBYTE(v3) = sub_814E20(v2); if ( (_BYTE)v3 ) { v3 = *(_DWORD *)(v2 + 68); v6 = *(_DWORD *)(v3 + 20); if ( !v6 ) { v3 = (int)operator new(0x48u); if ( v3 ) { *(float *)&v18 = 0.5; v19 = 0.5; *(float *)&v16 = 1.0; v17 = 1.0; *(float *)&v14 = 0.0; v15 = 0.0; v3 = sub_878F50(v3, (int)&v14, 0.0, (int)&v16, (int)&v18, 0); v6 = v3; } else { v6 = 0; } *(_DWORD *)(*(_DWORD *)(v2 + 68) + 20) = v6; } switch ( *(_DWORD *)(v2 + 80) ) { case 0: v7 = *(float *)v6; v8 = *(float *)(v6 + 4); v20 = a2; v21 = v8; LOBYTE(v3) = COERCE_UNSIGNED_INT(sub_814B70((float *)v6, &v20)); break; case 1: v9 = *(_DWORD *)(v6 + 4); v20 = *(float *)v6; v21 = a2; LOBYTE(v3) = COERCE_UNSIGNED_INT(sub_814B70((float *)v6, &v20)); break; case 2: LOBYTE(v3) = sub_814BD0(v6, a2); break; case 3: v10 = *(_DWORD *)(v6 + 12); v11 = *(float *)(v6 + 16); v20 = a2; v21 = v11; LOBYTE(v3) = COERCE_UNSIGNED_INT(sub_814C10(v6, &v20)); break; case 4: v12 = *(_DWORD *)(v6 + 16); v20 = *(float *)(v6 + 12); v21 = a2; LOBYTE(v3) = COERCE_UNSIGNED_INT(sub_814C10(v6, &v20)); break; default: return v3; } } } } return v3; } //----- (00815140) -------------------------------------------------------- float __userpurge sub_815140@(int this@, float *a2) { float result; // eax unsigned int v3; // edx int v4; // eax int v5; // eax float v6; // edx float v7; // ecx int v8; // edx float v9; // edx float v10; // ecx float v11; // edx int v12; // edx result = *(float *)(this + 68); if ( result == 0.0 ) { result = *(float *)(this + 48); if ( result == 0.0 ) return result; v3 = *(_DWORD *)(this + 76); if ( *(_BYTE *)(this + 72) ) { v4 = *(_DWORD *)(LODWORD(result) + 64); if ( !v4 || v3 >= *(_DWORD *)(v4 + 12) ) { v6 = 0.0; goto LABEL_10; } v5 = *(_DWORD *)(v4 + 4); } else { v5 = *(_DWORD *)(LODWORD(result) + 40); } v6 = *(float *)(v5 + 4 * v3); LABEL_10: result = v6; *(float *)(this + 68) = v6; if ( v6 == 0.0 ) return result; } result = *(float *)(LODWORD(result) + 20); if ( result == 0.0 ) { result = *(float *)&a2; *a2 = 0.0; } else { switch ( *(_DWORD *)(this + 80) ) { case 0: v7 = *(float *)LODWORD(result); v8 = *(_DWORD *)(LODWORD(result) + 4); result = *(float *)&a2; *a2 = v7; break; case 1: v9 = *(float *)(LODWORD(result) + 4); v10 = *(float *)LODWORD(result); result = *(float *)&a2; *a2 = v9; break; case 2: *a2 = *(float *)(LODWORD(result) + 8); break; case 3: v11 = *(float *)(LODWORD(result) + 12); result = *(float *)(LODWORD(result) + 16); *a2 = v11; break; case 4: v12 = *(_DWORD *)(LODWORD(result) + 12); result = *(float *)(LODWORD(result) + 16); *a2 = result; break; default: return result; } } return result; } //----- (00815240) -------------------------------------------------------- _DWORD *__thiscall sub_815240(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi v2 = this; v3 = (void *)*((_DWORD *)this + 21); *(_DWORD *)this = &NiTextureTransformController::`vftable'; operator delete(v3); v2[21] = 0; v4 = v2[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A20DCC: using guessed type void *NiTextureTransformController::`vftable'; //----- (008152B0) -------------------------------------------------------- int __thiscall sub_8152B0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax int v4; // esi void *v5; // ST04_4 v2 = this; v3 = (float *)operator new(0x58u); v4 = (int)v3; if ( v3 ) { sub_831D00(v3); *(_DWORD *)v4 = &NiTextureTransformController::`vftable'; *(_DWORD *)(v4 + 80) = 0; *(_DWORD *)(v4 + 84) = 0; *(_DWORD *)(v4 + 64) = 0; *(_BYTE *)(v4 + 72) = 0; *(_DWORD *)(v4 + 76) = 0; if ( *(_DWORD *)(v4 + 48) ) *(_DWORD *)(v4 + 68) = 0; sub_86C4F0(v4, 0); v5 = *(void **)(v4 + 84); *(_DWORD *)(v4 + 68) = 0; operator delete(v5); *(_DWORD *)(v4 + 84) = 0; } else { v4 = 0; } sub_831CE0(v2, v4, a2); *(_DWORD *)(v4 + 64) = v2[16]; *(_BYTE *)(v4 + 72) = *((_BYTE *)v2 + 72); *(_DWORD *)(v4 + 76) = v2[19]; *(_DWORD *)(v4 + 80) = v2[20]; return v4; } // A20DCC: using guessed type void *NiTextureTransformController::`vftable'; //----- (00815340) -------------------------------------------------------- int sub_815340() { float *v0; // eax int v1; // esi void *v2; // ST00_4 v0 = (float *)operator new(0x58u); v1 = (int)v0; if ( !v0 ) return 0; sub_831D00(v0); *(_DWORD *)v1 = &NiTextureTransformController::`vftable'; *(_DWORD *)(v1 + 80) = 0; *(_DWORD *)(v1 + 84) = 0; *(_DWORD *)(v1 + 64) = 0; *(_BYTE *)(v1 + 72) = 0; *(_DWORD *)(v1 + 76) = 0; if ( *(_DWORD *)(v1 + 48) ) *(_DWORD *)(v1 + 68) = 0; sub_86C4F0(v1, 0); v2 = *(void **)(v1 + 84); *(_DWORD *)(v1 + 68) = 0; operator delete(v2); *(_DWORD *)(v1 + 84) = 0; return v1; } // A20DCC: using guessed type void *NiTextureTransformController::`vftable'; //----- (008153A0) -------------------------------------------------------- int __thiscall sub_8153A0(int *this, void **a2) { void **v2; // esi int *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ST28_4 void (__cdecl *v6)(_DWORD *, char *, signed int, int *, signed int); // eax void (__cdecl *v7)(void *, int *, signed int, int *, signed int); // edx void *v8; // ST14_4 _DWORD *v9; // eax _DWORD *v10; // ST00_4 int (__cdecl *v11)(_DWORD *, int *, signed int, int *, signed int); // eax int result; // eax int v13; // [esp+8h] [ebp-8h] int v14; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_831FA0(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v4[1]; v14 = 1; v6(v5, (char *)&a2 + 3, 1, &v14, 1); *((_BYTE *)v3 + 72) = HIBYTE(a2) != 0; v7 = (void (__cdecl *)(void *, int *, signed int, int *, signed int))*((_DWORD *)v2[88] + 1); v8 = v2[88]; v14 = 4; v7(v8, v3 + 19, 4, &v14, 1); v9 = v2[88]; v10 = v9; v11 = (int (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v9[1]; v14 = 4; result = v11(v10, &v13, 4, &v14, 1); v3[20] = v13; if ( (unsigned int)v2[7] < 0xA010068 ) result = sub_876290(v2); return result; } //----- (00815440) -------------------------------------------------------- int __thiscall sub_815440(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, _DWORD *, signed int, int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, _DWORD *, signed int, int *, signed int); // edx int v13; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_80FDC0(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 72); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v13 = 1; v6(v5, (char *)&a2 + 3, 1, &v13, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); v13 = 4; v9(v8, v3 + 19, 4, &v13, 1); v10 = *(_DWORD *)(v2 + 356); v11 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v10 + 8); v13 = 4; return v11(v10, v3 + 20, 4, &v13, 1); } //----- (008154C0) -------------------------------------------------------- unsigned int __thiscall sub_8154C0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831DA0(this, a2); v3 = sub_8784D0(*(int *)dword_BA3BC8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00815510) -------------------------------------------------------- float *__thiscall sub_815510(int this, float *a2) { float *v2; // eax float v3; // ecx float v4; // edx float v5; // eax float *result; // eax float v7; // [esp+0h] [ebp-Ch] float v8; // [esp+4h] [ebp-8h] float v9; // [esp+8h] [ebp-4h] v2 = *(float **)(this + 48); v7 = 0.0; v8 = 0.0; v9 = 0.0; switch ( *(_WORD *)(this + 64) & 7 ) { case 0: v3 = v2[8]; v4 = v2[9]; v5 = v2[10]; goto LABEL_6; case 1: v3 = v2[11]; v4 = v2[12]; v5 = v2[13]; goto LABEL_6; case 2: v3 = v2[14]; v4 = v2[15]; v5 = v2[16]; goto LABEL_6; case 3: v3 = v2[17]; v4 = v2[18]; v5 = v2[19]; LABEL_6: v9 = v5; v8 = v4; v7 = v3; break; default: break; } result = a2; *a2 = v7; a2[1] = v8; a2[2] = v9; return result; } //----- (008155A0) -------------------------------------------------------- const char *__thiscall sub_8155A0(_WORD *this) { const char *result; // eax switch ( this[32] & 7 ) { case 0: result = "AMB"; break; case 1: result = "DIFF"; break; case 2: result = "SPEC"; break; case 3: result = "SELF_ILLUM"; break; default: result = 0; break; } return result; } //----- (008155E0) -------------------------------------------------------- int __thiscall sub_8155E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi float *v5; // eax float *v6; // edi int v7; // esi v2 = this; result = sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); v5 = (float *)operator new(0x20u); if ( v5 ) v6 = sub_81C790(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v2[15] + 108))(); } return result; } //----- (00815670) -------------------------------------------------------- char __thiscall sub_815670(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_831CF0(this, a2); if ( result ) result = ((*((_BYTE *)v2 + 64) ^ *(_BYTE *)(a2 + 64)) & 7) == 0; return result; } //----- (008156A0) -------------------------------------------------------- char *sub_8156A0() { return dword_BA3BD0; } //----- (008156B0) -------------------------------------------------------- char __stdcall sub_8156B0(int a1) { int v1; // eax if ( !a1 ) return 0; v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v1 ) return 0; while ( (char *)v1 != dword_BA45A8 ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } return 1; } //----- (008156E0) -------------------------------------------------------- char __thiscall sub_8156E0(int this, float a2) { int v2; // esi float v3; // eax int v4; // ecx int v5; // ecx float *v6; // ecx double v7; // st7 double v8; // st5 double v9; // st6 float v10; // eax float v11; // edx float v12; // edx float v13; // edx float v14; // eax float v15; // edx float v16; // edx float v17; // edx float v19; // [esp+14h] [ebp-18h] float v20; // [esp+18h] [ebp-14h] float v21; // [esp+1Ch] [ebp-10h] float v22; // [esp+20h] [ebp-Ch] float v23; // [esp+24h] [ebp-8h] float v24; // [esp+28h] [ebp-4h] v2 = this; LOBYTE(v3) = *(_BYTE *)(this + 8) >> 5; if ( LOBYTE(v3) & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { LOBYTE(v3) = sub_80FFE0((float *)this, a2); if ( LOBYTE(v3) ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return LOBYTE(v3); LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !LOBYTE(v3) ) return LOBYTE(v3); } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOBYTE(v3) = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 68))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &v19); if ( LOBYTE(v3) ) { v6 = *(float **)(v2 + 48); v22 = v19; v23 = v20; v24 = v21; if ( v19 >= 0.0 ) { v7 = 1.0; if ( v19 > 1.0 ) v22 = 1.0; } else { v7 = 1.0; v22 = 0.0; } if ( v20 >= 0.0 ) { if ( v20 > v7 ) v23 = v7; v8 = 0.0; v9 = v21; } else { v8 = 0.0; v9 = v21; v23 = 0.0; } if ( v8 <= v9 ) { if ( v9 > v7 ) v24 = v7; } else { v24 = v8; } LODWORD(v3) = *(_WORD *)(v2 + 64) & 7; switch ( LODWORD(v3) ) { case 0: v10 = v22; v11 = v23; ++*((_DWORD *)v6 + 22); v6[8] = v10; v3 = v24; v6[9] = v11; v6[10] = v3; break; case 1: v12 = v22; v3 = v23; ++*((_DWORD *)v6 + 22); v6[11] = v12; v13 = v24; v6[12] = v3; v6[13] = v13; break; case 2: v14 = v22; v15 = v23; ++*((_DWORD *)v6 + 22); v6[14] = v14; v3 = v24; v6[15] = v15; v6[16] = v3; break; case 3: v16 = v22; v3 = v23; ++*((_DWORD *)v6 + 22); v6[17] = v16; v17 = v24; v6[18] = v3; v6[19] = v17; break; default: return LOBYTE(v3); } } } return LOBYTE(v3); } //----- (00815880) -------------------------------------------------------- int __cdecl sub_815880(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 356); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 8); a1 = 2; return v4(v3, a2, 2, &a1, 1); } //----- (008158B0) -------------------------------------------------------- _DWORD *__thiscall sub_8158B0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &NiMaterialColorController::`vftable'; v3 = *((_DWORD *)this + 15); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A20E8C: using guessed type void *NiMaterialColorController::`vftable'; //----- (00815900) -------------------------------------------------------- int __thiscall sub_815900(_WORD *this, _DWORD **a2) { _WORD *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x44u); v4 = (int)v3; if ( v3 ) { sub_831E60(v3); *(_DWORD *)v4 = &NiMaterialColorController::`vftable'; *(_WORD *)(v4 + 64) = 0; } else { v4 = 0; } sub_831CE0(v2, v4, a2); *(_WORD *)(v4 + 64) = v2[32]; return v4; } // A20E8C: using guessed type void *NiMaterialColorController::`vftable'; //----- (00815950) -------------------------------------------------------- float *sub_815950() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x44u); v1 = v0; if ( !v0 ) return 0; sub_831E60(v0); *((_WORD *)v1 + 32) = 0; *(_DWORD *)v1 = &NiMaterialColorController::`vftable'; return v1; } // A20E8C: using guessed type void *NiMaterialColorController::`vftable'; //----- (00815980) -------------------------------------------------------- __int16 __thiscall sub_815980(int *this, _DWORD *a2) { _DWORD *v2; // esi int *v3; // edi __int16 result; // ax int v5; // eax int v6; // ST00_4 int (__cdecl *v7)(int, int *, signed int, _DWORD **, signed int); // eax v2 = a2; v3 = this; sub_831FA0(this, a2); if ( v2[7] >= 0xA000102u ) { v5 = v2[88]; v6 = v5; v7 = *(int (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v5 + 4); a2 = (_DWORD *)2; result = v7(v6, v3 + 16, 2, &a2, 1); } else { result = (*((_WORD *)v2 + 207) >> 5) & 0xFF; *((_WORD *)v3 + 32) = result; } if ( v2[7] < 0xA010068u ) result = sub_876290((void **)v2); return result; } //----- (008159F0) -------------------------------------------------------- int __thiscall sub_8159F0(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_80FDC0(this, a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 2; return v4(v5, v3 + 16, 2, &a2, 1); } //----- (00815A30) -------------------------------------------------------- unsigned int __thiscall sub_815A30(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831F10(this, a2); v3 = sub_8784D0(*(int *)dword_BA3BD0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00815A80) -------------------------------------------------------- int __thiscall sub_815A80(_DWORD *this, signed int a2) { return sub_80FDC0(this, a2); } //----- (00815A90) -------------------------------------------------------- char __thiscall sub_815A90(float *this, int a2) { return sub_831CF0(this, a2); } //----- (00815AA0) -------------------------------------------------------- int __thiscall sub_815AA0(_DWORD *this, float *a2) { int result; // eax result = this[12]; *a2 = *(float *)(result + 84); return result; } //----- (00815AC0) -------------------------------------------------------- char __thiscall sub_815AC0(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx int v6; // esi double v7; // st7 v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( result ) { v6 = *(_DWORD *)(v2 + 48); v7 = a2; ++*(_DWORD *)(v6 + 88); *(float *)(v6 + 84) = v7; } } return result; } //----- (00815B40) -------------------------------------------------------- float *__thiscall sub_815B40(float *this) { float *v1; // esi v1 = this; sub_831D00(this); *(_DWORD *)v1 = &NiAlphaController::`vftable'; return v1; } // A20F2C: using guessed type void *NiAlphaController::`vftable'; //----- (00815B60) -------------------------------------------------------- char *sub_815B60() { return dword_BA3BD8; } //----- (00815B70) -------------------------------------------------------- float *__thiscall sub_815B70(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_831D00(v3); *(_DWORD *)v4 = &NiAlphaController::`vftable'; sub_831CE0(v2, (int)v4, a2); result = v4; } else { sub_831CE0(v2, 0, a2); result = 0; } return result; } // A20F2C: using guessed type void *NiAlphaController::`vftable'; //----- (00815BF0) -------------------------------------------------------- unsigned int __thiscall sub_815BF0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831DA0(this, a2); v3 = sub_8784D0(*(int *)dword_BA3BD8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00815C40) -------------------------------------------------------- char __stdcall sub_815C40(int a1, int a2, float a3, int a4, float a5, float a6) { return sub_80D730((float *)a1, a2, a3, a4, a5, a6); } //----- (00815C70) -------------------------------------------------------- int __thiscall sub_815C70(_DWORD *this, int a2, int a3) { int v3; // ebx _DWORD *v4; // esi int v5; // eax _DWORD *v6; // edi _DWORD *v7; // edi int result; // eax int v9; // [esp+14h] [ebp+8h] v3 = a2; v4 = this; v5 = (*(int (__stdcall **)(int))(*this + 4))(a2); v6 = *(_DWORD **)(v4[2] + 4 * v5); v9 = v5; if ( v6 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v4 + 8))(v4, v3, v6[1]) ) { v6 = (_DWORD *)*v6; if ( !v6 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 16))(v4, v6); result = (*(int (__thiscall **)(_DWORD *, _DWORD *, int, int))(*v4 + 12))(v4, v6, v3, a3); } else { LABEL_4: v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 20))(v4); (*(void (__thiscall **)(_DWORD *, _DWORD *, int, int))(*v4 + 12))(v4, v7, v3, a3); result = v9; *v7 = *(_DWORD *)(v4[2] + 4 * v9); *(_DWORD *)(v4[2] + 4 * v9) = v7; ++v4[3]; } return result; } //----- (00815D00) -------------------------------------------------------- char *sub_815D00() { return dword_BA49F0; } //----- (00815D10) -------------------------------------------------------- void *__thiscall sub_815D10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiAVObjectPalette::`vftable'; sub_85BA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A20FEC: using guessed type void *NiAVObjectPalette::`vftable'; //----- (00815D40) -------------------------------------------------------- void __thiscall sub_815D40(int this, float a2) { int v2; // edi unsigned int v3; // esi _DWORD *v4; // ecx v2 = this; if ( (*(_BYTE *)(this + 8) >> 3) & 1 ) { v3 = 0; if ( *(_DWORD *)(this + 72) ) { do { v4 = *(_DWORD **)(*(_DWORD *)(v2 + 64) + 4 * v3); if ( v4 ) sub_80EE70(v4, a2, COERCE_FLOAT(1)); ++v3; } while ( v3 < *(_DWORD *)(v2 + 72) ); } } } //----- (00815D80) -------------------------------------------------------- char __stdcall sub_815D80(int a1, int a2, float a3, int a4, char a5, float a6, int a7) { if ( !*(_DWORD *)(a1 + 68) || *(_DWORD *)(a2 + 68) ) return 0; sub_80D580(a1, a3, 1); return sub_80D4C0((float *)a2, a4, a5, a6, a3, a7, 1); } //----- (00815DE0) -------------------------------------------------------- char __thiscall sub_815DE0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al unsigned int v4; // edi int v5; // ecx int v6; // ecx v2 = this; result = sub_86C250(this, a2); if ( result ) { v4 = 0; if ( v2[18] ) { do { v5 = *(_DWORD *)(v2[16] + 4 * v4); if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); ++v4; } while ( v4 < v2[18] ); } v6 = v2[30]; if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(a2); result = 1; } return result; } //----- (00815E40) -------------------------------------------------------- char __thiscall sub_815E40(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al _DWORD *v4; // ebx unsigned int v5; // edi _DWORD *v6; // ecx v2 = this; result = nullsub_32(a2); v4 = (_DWORD *)v2[12]; v5 = 0; if ( v2[18] ) { do { v6 = *(_DWORD **)(v2[16] + 4 * v5); if ( v6 ) result = sub_80F0C0(v6, v4); ++v5; } while ( v5 < v2[18] ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00815E80) -------------------------------------------------------- char __thiscall sub_815E80(float *this, _DWORD *a2) { float *v2; // esi char result; // al unsigned int v4; // ecx unsigned int v5; // eax _DWORD *v6; // edx _DWORD *v7; // eax _DWORD *v8; // edi int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx _DWORD *v13; // esi unsigned int v14; // esi int v15; // ecx int v16; // eax float *v17; // [esp+8h] [ebp-8h] int v18; // [esp+Ch] [ebp-4h] v2 = this; v17 = this; if ( !sub_86BDE0(this, (int)a2) || *((_DWORD *)v2 + 18) != a2[18] ) return 0; v4 = *((_DWORD *)v2 + 22); v5 = 0; if ( v4 ) { v6 = (_DWORD *)*((_DWORD *)v2 + 23); while ( !*v6 ) { ++v5; ++v6; if ( v5 >= v4 ) goto LABEL_8; } v7 = *(_DWORD **)(*((_DWORD *)v2 + 23) + 4 * v5); } else { LABEL_8: v7 = 0; } v8 = v7; if ( v7 ) { while ( 1 ) { v18 = v8[1]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*((_DWORD *)v2 + 21) + 4))((_DWORD *)v2 + 21, v8[1]); v10 = *((_DWORD *)v2 + 22); v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_17: v8 = 0; } else { v12 = (_DWORD *)(*((_DWORD *)v2 + 23) + 4 * v11); while ( !*v12 ) { ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_17; } v8 = (_DWORD *)*v12; } } v13 = *(_DWORD **)(a2[23] + 4 * (*(int (__thiscall **)(_DWORD *, int))(a2[21] + 4))(a2 + 21, v18)); if ( !v13 ) break; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(a2[21] + 8))(a2 + 21, v18, v13[1]) ) { v13 = (_DWORD *)*v13; if ( !v13 ) goto LABEL_21; } if ( !v8 ) goto LABEL_25; v2 = v17; } LABEL_21: result = 0; } else { LABEL_25: v14 = 0; if ( *((_DWORD *)v17 + 18) ) { do { v15 = *(_DWORD *)(*((_DWORD *)v17 + 16) + 4 * v14); v16 = *(_DWORD *)(a2[16] + 4 * v14); if ( v15 && v16 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v15 + 28))(*(_DWORD *)(a2[16] + 4 * v14)) ) goto LABEL_21; } else if ( v15 != v16 ) { goto LABEL_21; } ++v14; } while ( v14 < *((_DWORD *)v17 + 18) ); } result = 1; } return result; } //----- (00815FC0) -------------------------------------------------------- void __thiscall sub_815FC0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiAVObject *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_7FF8A0(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiAVObject *>::`vftable'; sub_7FF8A0(v1); operator delete(*((void **)v1 + 2)); } // A21034: using guessed type void *NiTMapBase,char const *,NiAVObject *>::`vftable'; // A21054: using guessed type void *NiTPointerMap::`vftable'; // A21074: using guessed type void *NiTStringTemplateMap,NiAVObject *>::`vftable'; //----- (00816030) -------------------------------------------------------- int __thiscall sub_816030(_BYTE *this, int a2, char *Src, int a4) { unsigned int v4; // kr00_4 char *v5; // eax int result; // eax if ( this[16] ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); *(_DWORD *)(a2 + 4) = v5; strcpy_s(v5, v4 + 1, Src); result = a4; } else { result = a2; *(_DWORD *)(a2 + 4) = Src; } *(_DWORD *)(a2 + 8) = a4; return result; } //----- (00816090) -------------------------------------------------------- void __thiscall sub_816090(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,unsigned int>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_7FF8A0(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,unsigned int>::`vftable'; sub_7FF8A0(v1); operator delete(*((void **)v1 + 2)); } // A20FCC: using guessed type void *NiTMapBase,char const *,unsigned int>::`vftable'; // A21094: using guessed type void *NiTPointerMap::`vftable'; // A210B4: using guessed type void *NiTStringTemplateMap,unsigned int>::`vftable'; //----- (00816100) -------------------------------------------------------- void **__thiscall sub_816100(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiAVObject *>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A21034: using guessed type void *NiTMapBase,char const *,NiAVObject *>::`vftable'; //----- (00816140) -------------------------------------------------------- void **__thiscall sub_816140(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,char const *,NiAVObject *>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A21034: using guessed type void *NiTMapBase,char const *,NiAVObject *>::`vftable'; // A21054: using guessed type void *NiTPointerMap::`vftable'; //----- (00816180) -------------------------------------------------------- void **__thiscall sub_816180(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,unsigned int>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20FCC: using guessed type void *NiTMapBase,char const *,unsigned int>::`vftable'; //----- (008161C0) -------------------------------------------------------- void **__thiscall sub_8161C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,char const *,unsigned int>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A20FCC: using guessed type void *NiTMapBase,char const *,unsigned int>::`vftable'; // A21094: using guessed type void *NiTPointerMap::`vftable'; //----- (00816200) -------------------------------------------------------- int __thiscall sub_816200(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax void (__cdecl *v8)(int, unsigned int *, signed int, int *, signed int); // edx unsigned int v9; // ebx int v11; // [esp+Ch] [ebp-8h] unsigned int v12; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_86C780(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 104); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v11 = 1; v6(v5, (char *)&a2 + 3, 1, &v11, 1); v7 = v2[89]; v12 = v3[18]; v8 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v7 + 8); v11 = 4; v8(v7, &v12, 4, &v11, 1); v9 = 0; if ( v12 ) { do { if ( *(_DWORD *)(v3[16] + 4 * v9) ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(v3[16] + 4 * v9)); ++v9; } while ( v9 < v12 ); } return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[30]); } //----- (008162A0) -------------------------------------------------------- int __thiscall sub_8162A0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int result; // eax int v8; // esi int v9; // ebx int v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_86C630(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v10 = 1; v6(v5, (char *)&a2 + 3, 1, &v10, 1); *((_BYTE *)v3 + 104) = HIBYTE(a2) != 0; result = sub_876350((void **)v2); if ( *(_DWORD *)(v2 + 28) >= 0xA010068u ) { result = sub_876300((_DWORD *)v2); v8 = v3[30]; v9 = result; if ( v8 != result ) { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } v3[30] = v9; if ( v9 ) result = InterlockedIncrement((volatile LONG *)(v9 + 4)); } } return result; } //----- (00816340) -------------------------------------------------------- _DWORD *__thiscall sub_816340(_DWORD *this, _DWORD *a2, unsigned int a3) { _DWORD *v3; // esi _DWORD *result; // eax int v5; // ebx int *v6; // esi int v7; // edi int v8; // eax _DWORD *v9; // [esp+4h] [ebp-4h] v3 = this; v9 = this; if ( a3 < this[3] ) { v5 = *(_DWORD *)(4 * a3 + this[1]); if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = (int *)(4 * a3 + v3[1]); v7 = *v6; if ( *v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *v6 = 0; } if ( v5 ) --v9[4]; v8 = v9[3] - 1; if ( a3 == v8 ) v9[3] = v8; *a2 = v5; if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00816400) -------------------------------------------------------- void __thiscall sub_816400(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A210D4: using guessed type void *NiTArray>::`vftable'; //----- (00816460) -------------------------------------------------------- void *__thiscall sub_816460(void *this, char a2) { void *v2; // esi v2 = this; sub_816400(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00816490) -------------------------------------------------------- LONG __thiscall sub_816490(_DWORD *this) { _DWORD *v1; // esi int v2; // edi v1 = this; *this = &NiControllerManager::`vftable'; sub_80C6B0(this + 15); v1[29] = 0; v2 = v1[30]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); sub_8009A0(v1 + 27); sub_816090((_BYTE *)v1 + 84); sub_816400(v1 + 15); return sub_86C3C0(v1); } // A210DC: using guessed type void *NiControllerManager::`vftable'; //----- (008164F0) -------------------------------------------------------- void *sub_8164F0() { return &unk_BA3BE0; } //----- (00816500) -------------------------------------------------------- _DWORD *__thiscall sub_816500(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi unsigned int v4; // edi int v5; // ebx _DWORD *result; // eax void (__thiscall ***v7)(_DWORD, signed int); // edi unsigned int v8; // ecx _DWORD *v9; // edi unsigned int v10; // eax int v11; // esi _DWORD *v12; // edx _DWORD *v13; // eax int v14; // ecx int v15; // edx int v16; // eax unsigned int v17; // edx unsigned int v18; // eax _DWORD *v19; // ecx int v20; // [esp+Ch] [ebp-8h] unsigned int v21; // [esp+10h] [ebp-4h] v3 = this; v4 = 0; if ( this[18] ) { while ( 1 ) { v5 = *(_DWORD *)(v3[16] + 4 * v4); if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( v5 == a3 ) break; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } if ( ++v4 >= v3[18] ) goto LABEL_9; } v21 = v4; sub_816340(v3 + 15, &a3, v4); v7 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**v7)(v7, 1); v8 = v3[22]; v9 = v3 + 21; v10 = 0; if ( v8 ) { v11 = v3[23]; v12 = (_DWORD *)v9[2]; while ( !*v12 ) { ++v10; ++v12; if ( v10 >= v8 ) goto LABEL_17; } v13 = *(_DWORD **)(v11 + 4 * v10); } else { LABEL_17: v13 = 0; } if ( v13 ) { while ( 1 ) { v14 = v13[1]; v15 = v13[2]; v13 = (_DWORD *)*v13; v20 = v14; a3 = v15; if ( !v13 ) { v16 = (*(int (__thiscall **)(_DWORD *, int))(*v9 + 4))(v9, v14); v17 = v9[1]; v18 = v16 + 1; if ( v18 >= v17 ) { LABEL_24: v13 = 0; } else { v19 = (_DWORD *)(v9[2] + 4 * v18); while ( !*v19 ) { ++v18; ++v19; if ( v18 >= v17 ) goto LABEL_24; } v13 = (_DWORD *)*v19; } } if ( a3 == v21 ) break; if ( !v13 ) goto LABEL_31; } sub_916F40(v9, v20); } LABEL_31: sub_80BA20((_DWORD *)v5); *(_DWORD *)(v5 + 64) = 0; *a2 = v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = a2; } else { LABEL_9: result = a2; *a2 = 0; } return result; } //----- (00816650) -------------------------------------------------------- void *__thiscall sub_816650(void *this, char a2) { void *v2; // esi v2 = this; sub_815FC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00816680) -------------------------------------------------------- void *__thiscall sub_816680(void *this, char a2) { void *v2; // esi v2 = this; sub_816490(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008166B0) -------------------------------------------------------- char __thiscall sub_8166B0(_DWORD *this, int a2, char *Src, int a4) { int v4; // esi _DWORD *v5; // edi bool v6; // zf int v8; // eax int v9; // [esp+10h] [ebp+8h] v4 = a2; v5 = this; if ( this && *(_DWORD *)(a2 + 64) ) return 0; v6 = *(_DWORD *)(a2 + 92) == 0; *(_DWORD *)(a2 + 64) = this; if ( v6 ) sub_80B700((void **)a2, *(char **)(this[12] + 8)); if ( (_BYTE)a4 && !sub_80F0C0((_DWORD *)a2, (_DWORD *)v5[12]) ) { *(_DWORD *)(a2 + 64) = 0; return 0; } if ( Src ) sub_80B6B0((void **)a2, Src); a4 = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); v9 = *(_DWORD *)(a2 + 8); v8 = sub_9334C0(v5 + 15, &a4); sub_815C70(v5 + 21, v9, v8); if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return 1; } //----- (00816760) -------------------------------------------------------- unsigned int __thiscall sub_816760(void *this, int a2, _DWORD **a3) { int v3; // ebx int v4; // edi unsigned int result; // eax int v6; // ecx int v7; // eax int v8; // esi bool v9; // zf const char *v10; // ebx unsigned int v11; // kr00_4 char *v12; // eax int v13; // ebx int v14; // eax int v15; // edi int v16; // esi unsigned int v17; // edi int v18; // [esp+Ch] [ebp-Ch] unsigned int v19; // [esp+10h] [ebp-8h] int v20; // [esp+14h] [ebp-4h] v3 = a2; v4 = (int)this; v20 = (int)this; sub_86C130(this, a2, a3); result = 0; *(_BYTE *)(a2 + 104) = *(_BYTE *)(v4 + 104); v19 = 0; if ( *(_DWORD *)(v4 + 72) ) { do { v6 = *(_DWORD *)(*(_DWORD *)(v4 + 64) + 4 * result); if ( v6 ) { v7 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v6 + 8))(a3); v8 = v7; if ( !*(_DWORD *)(v7 + 64) ) { v9 = *(_DWORD *)(v7 + 92) == 0; *(_DWORD *)(v7 + 64) = v3; if ( v9 ) { v10 = *(const char **)(*(_DWORD *)(v3 + 48) + 8); operator delete(0); *(_DWORD *)(v8 + 92) = 0; if ( v10 ) { v11 = strlen(v10); v12 = (char *)operator new(v11 + 1); *(_DWORD *)(v8 + 92) = v12; strcpy_s(v12, v11 + 1, v10); } } v18 = v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); v13 = *(_DWORD *)(v8 + 8); v14 = sub_9334C0((_DWORD *)(a2 + 60), &v18); sub_815C70((_DWORD *)(a2 + 84), v13, v14); if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v4 = v20; v3 = a2; } } result = v19 + 1; v19 = result; } while ( result < *(_DWORD *)(v4 + 72) ); } v15 = *(_DWORD *)(v4 + 120); if ( v15 ) { result = (*(int (__thiscall **)(int, _DWORD **))(*(_DWORD *)v15 + 8))(v15, a3); v16 = *(_DWORD *)(v3 + 120); v17 = result; if ( v16 != result ) { if ( v16 ) { result = InterlockedDecrement((volatile LONG *)(v16 + 4)); if ( !result ) { if ( v16 ) result = (**(int (__thiscall ***)(int, signed int))v16)(v16, 1); } } *(_DWORD *)(v3 + 120) = v17; if ( v17 ) result = InterlockedIncrement((volatile LONG *)(v17 + 4)); } } return result; } //----- (008168B0) -------------------------------------------------------- unsigned int __thiscall sub_8168B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // edi _DWORD *v4; // ebx _DWORD *v5; // ebx unsigned int result; // eax _DWORD *v7; // edi int v8; // ebx _DWORD *v9; // esi _DWORD *v10; // edi int *v11; // edi int v12; // eax int v13; // eax int v14; // edi int v15; // eax int v16; // eax int v17; // eax int *v18; // ebx int v19; // esi int v20; // eax int *v21; // ebx int v22; // esi int v23; // edi int v24; // esi int v25; // [esp+Ch] [ebp-Ch] int *v26; // [esp+Ch] [ebp-Ch] _DWORD *v27; // [esp+10h] [ebp-8h] unsigned int v28; // [esp+14h] [ebp-4h] v2 = this; v27 = this; sub_86C220(this, (int)a2); v3 = 0; if ( v2[18] ) { do { v4 = *(_DWORD **)(v2[16] + 4 * v3); if ( v4 ) { (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 40))(v4, a2); sub_80F0C0(v4, (_DWORD *)v2[12]); } ++v3; } while ( v3 < v2[18] ); } v5 = (_DWORD *)*a2; result = (*(int (__thiscall **)(_DWORD, _DWORD *))(*(_DWORD *)*a2 + 4))(*a2, v2); v7 = *(_DWORD **)(v5[2] + 4 * result); if ( v7 ) { while ( 1 ) { result = (*(int (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v5 + 8))(v5, v2, v7[1]); if ( (_BYTE)result ) break; v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_10; } result = v7[2]; v25 = v7[2]; } LABEL_10: v28 = 0; if ( v2[29] ) { v26 = (int *)(v25 + 108); do { v8 = *(_DWORD *)(4 * v28 + v2[27]); v9 = (_DWORD *)*a2; v10 = *(_DWORD **)(v9[2] + 4 * (*(int (__thiscall **)(_DWORD, int))(*(_DWORD *)*a2 + 4))(*a2, v8)); if ( v10 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v9 + 8))(v9, v8, v10[1]) ) { v10 = (_DWORD *)*v10; if ( !v10 ) goto LABEL_15; } v14 = v10[2]; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); v15 = v26[1]; if ( v26[2] == v15 ) { if ( v15 ) v16 = 2 * v15; else v16 = 1; sub_7FFDC0(v26, v16); } v17 = v26[2]; v18 = (int *)(*v26 + 4 * v17); v26[2] = v17 + 1; v19 = *v18; if ( *v18 != v14 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *v18 = v14; if ( !v14 ) goto LABEL_44; InterlockedIncrement((volatile LONG *)(v14 + 4)); } if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); } else { LABEL_15: v11 = (int *)(4 * v28 + v27[27]); v12 = v26[1]; if ( v26[2] == v12 ) { if ( v12 ) v13 = 2 * v12; else v13 = 1; sub_7FFDC0(v26, v13); } v20 = v26[2]; v21 = (int *)(*v26 + 4 * v20); v26[2] = v20 + 1; v22 = *v21; if ( *v21 != *v11 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v23 = *v11; *v21 = v23; if ( v23 ) InterlockedIncrement((volatile LONG *)(v23 + 4)); } } LABEL_44: result = v28 + 1; v28 = result; v2 = v27; } while ( result < v27[29] ); } v24 = v2[30]; if ( v24 ) result = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)v24 + 40))(v24, a2); return result; } //----- (00816AD0) -------------------------------------------------------- void __thiscall sub_816AD0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int v3; // edi int v4; // esi int v5; // eax int v6; // esi bool v7; // zf const char *v8; // ebx unsigned int v9; // kr00_4 char *v10; // eax int v11; // ebx int v12; // eax int v13; // [esp+Ch] [ebp-Ch] int v14; // [esp+10h] [ebp-8h] _DWORD *v15; // [esp+14h] [ebp-4h] v2 = a2; v3 = (int)this; v15 = this; sub_86C590(this, a2); v4 = sub_875B00(a2); sub_81A750((_DWORD *)(v3 + 60), v4); if ( v4 ) { v14 = v4; while ( 1 ) { v5 = sub_875AD0(v2); v6 = v5; if ( !v3 || !*(_DWORD *)(v5 + 64) ) { v7 = *(_DWORD *)(v5 + 92) == 0; *(_DWORD *)(v5 + 64) = v3; if ( v7 ) { v8 = *(const char **)(*(_DWORD *)(v3 + 48) + 8); operator delete(0); *(_DWORD *)(v6 + 92) = 0; if ( v8 ) { v9 = strlen(v8); v10 = (char *)operator new(v9 + 1); *(_DWORD *)(v6 + 92) = v10; strcpy_s(v10, v9 + 1, v8); } } v13 = v6; InterlockedIncrement((volatile LONG *)(v6 + 4)); v11 = *(_DWORD *)(v6 + 8); v12 = sub_9334C0(v15 + 15, &v13); sub_815C70(v15 + 21, v11, v12); if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3 = (int)v15; } if ( !--v14 ) break; v2 = a2; } } } //----- (00816BD0) -------------------------------------------------------- void *__thiscall sub_816BD0(void *this, char a2) { void *v2; // esi v2 = this; sub_816090(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00816C00) -------------------------------------------------------- _DWORD *__thiscall sub_816C00(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST08_4 v2 = this; sub_85BA50(this); *v2 = &NiDefaultAVObjectPalette::`vftable'; v2[3] = 37; v2[2] = &NiTMapBase,char const *,NiAVObject *>::`vftable'; v2[5] = 0; v3 = operator new(0x94u); v4 = 4 * v2[3]; v2[4] = v3; memset(v3, 0, v4); *((_BYTE *)v2 + 24) = 1; v2[2] = &NiTStringPointerMap::`vftable'; v2[7] = a2; return v2; } // A21034: using guessed type void *NiTMapBase,char const *,NiAVObject *>::`vftable'; // A21148: using guessed type void *NiTStringPointerMap::`vftable'; // A2118C: using guessed type void *NiDefaultAVObjectPalette::`vftable'; //----- (00816C70) -------------------------------------------------------- char *sub_816C70() { return dword_BA49F8; } //----- (00816C80) -------------------------------------------------------- int __thiscall sub_816C80(_DWORD *this, int a2) { _DWORD *v2; // esi int v4; // edi int v5; // [esp+8h] [ebp-4h] v2 = this; v5 = 0; if ( !a2 ) return 0; if ( sub_8C4C90(this + 2, a2, &v5) ) return v5; if ( !v2[7] ) return 0; v4 = (*(int (__stdcall **)(int))(*(_DWORD *)v2[7] + 72))(a2); if ( v4 ) (*(void (__thiscall **)(_DWORD *, int, int))(*v2 + 64))(v2, a2, v4); return v4; } //----- (00816CF0) -------------------------------------------------------- char __thiscall sub_816CF0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ecx char result; // al v3 = this + 2; if ( a3 ) result = sub_815C70(v3, a2, a3); else result = sub_916F40(v3, a2); return result; } //----- (00816D20) -------------------------------------------------------- _DWORD *__thiscall sub_816D20(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiDefaultAVObjectPalette::`vftable'; sub_815FC0((_BYTE *)this + 8); *v2 = &NiAVObjectPalette::`vftable'; sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A20FEC: using guessed type void *NiAVObjectPalette::`vftable'; // A2118C: using guessed type void *NiDefaultAVObjectPalette::`vftable'; //----- (00816D60) -------------------------------------------------------- float *__thiscall sub_816D60(float *this) { float *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; sub_86C310(this); *(_DWORD *)v1 = &NiControllerManager::`vftable'; *((_DWORD *)v1 + 15) = &NiTArray>::`vftable'; v1[17] = 0.0; *((_DWORD *)v1 + 20) = 1; v1[18] = 0.0; v1[19] = 0.0; v1[16] = 0.0; *((_DWORD *)v1 + 22) = 37; *((_DWORD *)v1 + 21) = &NiTMapBase,char const *,unsigned int>::`vftable'; v1[24] = 0.0; v2 = operator new(0x94u); v3 = 4 * *((_DWORD *)v1 + 22); *((_DWORD *)v1 + 23) = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 100) = 1; *((_DWORD *)v1 + 21) = &NiTStringPointerMap::`vftable'; *((_BYTE *)v1 + 104) = 0; v1[27] = 0.0; v1[28] = 0.0; v1[29] = 0.0; v1[30] = 0.0; return v1; } // A20FCC: using guessed type void *NiTMapBase,char const *,unsigned int>::`vftable'; // A210D4: using guessed type void *NiTArray>::`vftable'; // A210DC: using guessed type void *NiControllerManager::`vftable'; // A21168: using guessed type void *NiTStringPointerMap::`vftable'; //----- (00816DF0) -------------------------------------------------------- int __thiscall sub_816DF0(float *this, _DWORD *a2, char a3) { int v3; // esi void *v4; // eax size_t v5; // ST08_4 _DWORD *v6; // eax _DWORD *v7; // eax int v8; // ebx _DWORD *v10; // [esp+18h] [ebp+Ch] v3 = (int)this; sub_86C310(this); *(_DWORD *)v3 = &NiControllerManager::`vftable'; *(_DWORD *)(v3 + 60) = &NiTArray>::`vftable'; *(_DWORD *)(v3 + 68) = 0; *(_DWORD *)(v3 + 80) = 1; *(_DWORD *)(v3 + 72) = 0; *(_DWORD *)(v3 + 76) = 0; *(_DWORD *)(v3 + 64) = 0; *(_DWORD *)(v3 + 88) = 37; *(_DWORD *)(v3 + 84) = &NiTMapBase,char const *,unsigned int>::`vftable'; *(_DWORD *)(v3 + 96) = 0; v4 = operator new(0x94u); v5 = 4 * *(_DWORD *)(v3 + 88); *(_DWORD *)(v3 + 92) = v4; memset(v4, 0, v5); *(_BYTE *)(v3 + 100) = 1; *(_DWORD *)(v3 + 84) = &NiTStringPointerMap::`vftable'; *(_BYTE *)(v3 + 104) = a3; *(_DWORD *)(v3 + 108) = 0; *(_DWORD *)(v3 + 112) = 0; *(_DWORD *)(v3 + 116) = 0; *(_DWORD *)(v3 + 120) = 0; sub_86C4F0(v3, a2); v6 = operator new(0x20u); if ( v6 ) { v7 = sub_816C00(v6, (int)a2); v10 = v7; } else { v10 = 0; v7 = 0; } v8 = *(_DWORD *)(v3 + 120); if ( (_DWORD *)v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = v10; } *(_DWORD *)(v3 + 120) = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } return v3; } // A20FCC: using guessed type void *NiTMapBase,char const *,unsigned int>::`vftable'; // A210D4: using guessed type void *NiTArray>::`vftable'; // A210DC: using guessed type void *NiControllerManager::`vftable'; // A21168: using guessed type void *NiTStringPointerMap::`vftable'; //----- (00816EF0) -------------------------------------------------------- float *__thiscall sub_816EF0(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x7Cu); if ( v3 ) { v4 = sub_816D60(v3); sub_816760(v2, (int)v4, a2); result = v4; } else { sub_816760(v2, 0, a2); result = 0; } return result; } //----- (00816F40) -------------------------------------------------------- float *sub_816F40() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x7Cu); if ( v0 ) result = sub_816D60(v0); else result = 0; return result; } //----- (00816F60) -------------------------------------------------------- BOOL __cdecl sub_816F60(float *a1, float *a2) { return *a2 == *a1; } //----- (00816F90) -------------------------------------------------------- _DWORD *__thiscall sub_816F90(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int *v10; // esi _DWORD *result; // eax _BYTE *v12; // ecx signed int v13; // esi v10 = this; sub_806AF0(this); v10[5] = a3; result = v10 + 8; v10[8] = a4; v10[12] = a2; v10[13] = a5; v10[6] = a6; v10[7] = a9; v10[9] = a7; v10[10] = a10; v10[14] = a8; v10[15] = 0; v10[16] = 0; v10[17] = 0; v12 = v10 + 11; v13 = 3; do { if ( *(result - 3) ) *v12 = byte_BA3BE8[*result]; else *v12 = 0; ++result; ++v12; --v13; } while ( v13 ); return result; } //----- (00817010) -------------------------------------------------------- char __cdecl sub_817010(float a1, int a2, int a3, int a4, char a5) { char result; // al double v6; // st7 int v7; // ecx unsigned int v8; // edx result = 1; *(_DWORD *)a4 = 0; if ( a3 ) { v6 = a1; while ( 1 ) { v7 = *(_DWORD *)a4 * (unsigned __int8)a5; if ( *(float *)(v7 + a2) >= v6 ) break; v8 = *(_DWORD *)a4 + 1; *(_DWORD *)a4 = v8; if ( v8 >= a3 ) return 1; } if ( *(float *)(v7 + a2) > v6 ) return 1; result = 0; } return result; } //----- (00817070) -------------------------------------------------------- void __cdecl sub_817070(int a1, int a2, int a3, int a4, float a5, float a6, int a7, int a8) { unsigned int v8; // ebx int v9; // ST10_4 int v10; // ST0C_4 int v11; // ST08_4 float *v12; // eax int v13; // esi int **v14; // eax int v15; // ST20_4 int v16; // ST1C_4 int v17; // ST18_4 int v18; // ST14_4 int v19; // ST10_4 int v20; // ST0C_4 int v21; // edx int v22; // ST08_4 int v23; // ecx unsigned int v24; // ebx double v25; // st7 double v26; // st6 unsigned __int8 v27; // al unsigned int v28; // edx int v29; // ecx float *v30; // ebx float *v31; // ecx int v32; // eax unsigned int v33; // edx float *v34; // ecx double v35; // st7 float *v36; // ebx float *v37; // esi int v38; // [esp+1Ch] [ebp-40h] int v39; // [esp+20h] [ebp-3Ch] int v40; // [esp+24h] [ebp-38h] float *v41; // [esp+28h] [ebp-34h] int *v42; // [esp+2Ch] [ebp-30h] unsigned int v43; // [esp+30h] [ebp-2Ch] float *v44; // [esp+34h] [ebp-28h] float *v45; // [esp+38h] [ebp-24h] unsigned __int8 v46; // [esp+3Fh] [ebp-1Dh] int v47; // [esp+40h] [ebp-1Ch] int v48; // [esp+44h] [ebp-18h] int v49; // [esp+48h] [ebp-14h] int v50; // [esp+4Ch] [ebp-10h] int v51; // [esp+50h] [ebp-Ch] int v52; // [esp+54h] [ebp-8h] v42 = (int *)a7; if ( a2 == 4 ) { v8 = 0; do { v9 = *(_DWORD *)(a3 + 4 * (unsigned __int8)v8 + 20); v10 = *(_DWORD *)(a3 + 4 * (unsigned __int8)v8 + 48); v11 = *(_DWORD *)(a3 + 4 * (unsigned __int8)v8 + 32); *(&v47 + v8) = v11; sub_817070(0, v11, v10, v9, a5, a6, (int)(&v38 + v8), (int)(&v50 + v8)); ++v8; } while ( v8 < 3 ); v12 = (float *)operator new(0x4Cu); if ( v12 ) { v13 = (int)(v12 + 1); *(_DWORD *)v12 = 1; sub_874B00(v12 + 2, 0.0, 0.0, 0.0, 0.0); *(_DWORD *)(v13 + 20) = 0; *(_DWORD *)(v13 + 24) = 0; *(_DWORD *)(v13 + 28) = 0; *(_DWORD *)(v13 + 48) = 0; *(_DWORD *)(v13 + 52) = 0; *(_DWORD *)(v13 + 56) = 0; *(_DWORD *)(v13 + 32) = 0; *(_DWORD *)(v13 + 36) = 0; *(_DWORD *)(v13 + 40) = 0; *(_DWORD *)(v13 + 60) = 0; *(_DWORD *)(v13 + 64) = 0; *(_DWORD *)(v13 + 68) = 0; *(_WORD *)(v13 + 44) = 0; *(_BYTE *)(v13 + 46) = 0; } else { v13 = 0; } v14 = (int **)v42; v15 = v49; v16 = v52; v17 = v40; v18 = v48; v19 = v51; v20 = v39; v21 = v50; v22 = v47; v23 = v38; *v42 = v13; *(_DWORD *)a8 = 1; sub_816F90(*v14, v23, v21, v22, v20, v19, v18, v17, v16, v15); } else { v24 = a4; v25 = a6; v26 = a5; *(_DWORD *)a8 = 0; v27 = byte_BA3BE8[6 * a1 + a2]; v28 = 0; v43 = a2 + 6 * a1; v46 = v27; if ( a4 >= 4 ) { v45 = (float *)(v27 + a3 + 2 * v27); v44 = (float *)(a3 + 2 * v27); v29 = 4 * v27; v41 = (float *)a3; v30 = (float *)(v27 + a3); while ( 1 ) { if ( *v41 >= v26 ) { if ( *v41 > v25 ) goto LABEL_31; ++*(_DWORD *)a8; } if ( *v30 >= v26 ) { if ( *v30 > v25 ) goto LABEL_31; ++*(_DWORD *)a8; } if ( *v44 >= v26 ) { if ( *v44 > v25 ) goto LABEL_31; ++*(_DWORD *)a8; } if ( *v45 >= v26 ) { if ( *v45 > v25 ) { LABEL_31: v24 = a4; goto LABEL_32; } ++*(_DWORD *)a8; } v41 = (float *)((char *)v41 + v29); v44 = (float *)((char *)v44 + v29); v45 = (float *)((char *)v45 + v29); v28 += 4; v30 = (float *)((char *)v30 + v29); if ( v28 >= a4 - 3 ) { v24 = a4; v27 = v46; break; } } } if ( v28 < v24 ) { v45 = (float *)v27; v31 = (float *)(a3 + v28 * v27); do { if ( *v31 >= v26 ) { if ( *v31 > v25 ) break; ++*(_DWORD *)a8; } v31 = (float *)((int)v31 + (_DWORD)v45); ++v28; } while ( v28 < v24 ); } LABEL_32: if ( *(_DWORD *)a8 ) { v32 = ((int (__cdecl *)(_DWORD))dword_BA3DC0[v43])(*(_DWORD *)a8); v33 = v43; *v42 = v32; v44 = (float *)dword_BA3E50[v33]; v43 = 0; *(_DWORD *)a8 = 0; if ( v24 ) { v34 = (float *)v46; v35 = a5; v45 = (float *)v46; v36 = (float *)a3; do { if ( *v36 >= v35 ) { if ( a6 < (double)*v36 ) return; v37 = (float *)(*v42 + (_DWORD)v34 * *(_DWORD *)a8); ((void (__cdecl *)(float *, float *))v44)(v37, v36); v34 = v45; v35 = a5; *v37 = *v36 - a5; ++*(_DWORD *)a8; } v36 = (float *)((int)v36 + (_DWORD)v34); ++v43; } while ( v43 < a4 ); } } else { *v42 = 0; } } } // BA3DC0: using guessed type int dword_BA3DC0[]; // BA3E50: using guessed type int dword_BA3E50[]; //----- (00817370) -------------------------------------------------------- void __cdecl sub_817370(int a1, int a2, int a3, int a4, float a5, float a6) { int v6; // edi unsigned int v7; // ecx int v8; // esi int v9; // eax int v10; // ebx int v11; // edi int v12; // ebx void (__cdecl *v13)(_DWORD, int, int); // esi unsigned int v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] if ( a2 == 4 ) { v6 = *(_DWORD *)a3; v7 = 0; v14 = 0; do { v8 = (unsigned __int8)v7; v9 = *(_DWORD *)(v6 + 4 * (unsigned __int8)v7 + 20); v10 = *(_DWORD *)(v6 + 4 * (unsigned __int8)v7 + 32); v15 = *(_DWORD *)(v6 + 4 * (unsigned __int8)v7 + 48); a2 = v9; if ( v9 ) { sub_817370(0, v10, (int)&v15, (int)&a2, a5, a6); v9 = a2; v7 = v14; } *(_DWORD *)(v6 + 4 * v8 + 48) = v15; *(_DWORD *)(v6 + 4 * v8 + 20) = v9; *(_DWORD *)(v6 + 4 * v8 + 32) = v10; *(_DWORD *)(v6 + 4 * v8 + 60) = 0; ++v7; *(_BYTE *)(v8 + v6 + 44) = byte_BA3BE8[v10]; v14 = v7; } while ( v7 < 3 ); } else { v11 = a4; v12 = a3; v13 = (void (__cdecl *)(_DWORD, int, int))dword_BA3CA0[a2 + 6 * a1]; if ( *(_DWORD *)a4 != 1 || a5 != **(float **)a3 ) { v13(LODWORD(a5), a3, a4); v13(LODWORD(a6), v12, v11); } } } // BA3CA0: using guessed type int dword_BA3CA0[]; //----- (00817460) -------------------------------------------------------- int __thiscall sub_817460(void *this, signed int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, void *, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a2 + 352); v3 = v2; v4 = *(int (__cdecl **)(int, void *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; return v4(v3, this, 4, &a2, 1); } //----- (00817490) -------------------------------------------------------- int __cdecl sub_817490(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 356); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 8); a1 = 4; return v4(v3, a2, 4, &a1, 1); } //----- (008174C0) -------------------------------------------------------- double __cdecl sub_8174C0(float a1, float a2, float a3) { return (float)(a1 * a3 + (1.0 - a1) * a2); } //----- (008174E0) -------------------------------------------------------- double __cdecl sub_8174E0(float a1, float a2, float a3, float a4, float a5) { double v5; // st7 double v6; // st4 float v8; // [esp+14h] [ebp+14h] float v9; // [esp+14h] [ebp+14h] v5 = a4 - a2; v8 = a3 + a5 - v5 * 2.0; v6 = v8 * a1; v9 = v5 * 3.0 - (a5 + 2.0 * a3); return (float)(a1 * (a3 + (v6 + v9) * a1) + a2); } //----- (00817540) -------------------------------------------------------- float *__cdecl sub_817540(float a1, float a2, int a3, float a4, float a5, int a6, float a7, int a8, int a9, int a10) { float *result; // eax float v11; // ST04_4 double v12; // st7 double v13; // st5 double v14; // st6 double v15; // st1 double v16; // st3 float v17; // [esp+Ch] [ebp+8h] float v18; // [esp+Ch] [ebp+8h] float v19; // [esp+Ch] [ebp+8h] float v20; // [esp+18h] [ebp+14h] float v21; // [esp+18h] [ebp+14h] float v22; // [esp+18h] [ebp+14h] float v23; // [esp+1Ch] [ebp+18h] result = (float *)a3; v11 = a4 - a1; v17 = a5 - a2; v20 = a7 - a2; v23 = a5 - a7; v12 = v20; v13 = v20 / v17; v14 = v17; v21 = v13; v18 = *(float *)a3 - v11 * 2.0 + *(float *)a6; v15 = *(float *)a6; v16 = v18 * 3.0 * v21; v19 = v11 * 3.0 - *(float *)a3 * 2.0 - v15; v22 = ((2.0 * v19 + v16) * v21 + *(float *)a3) / v14; *(float *)a9 = v22; *(float *)a10 = v22 * v23; *(float *)a9 = v12 * *(float *)a9; *result = v13 * *result; *(float *)a6 = v23 / v14 * v15; return result; } //----- (00817610) -------------------------------------------------------- char *sub_817610() { return dword_BA43C0; } //----- (00817620) -------------------------------------------------------- void *__thiscall sub_817620(void *this, char a2) { void *v2; // esi v2 = this; sub_826BC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00817650) -------------------------------------------------------- char *sub_817650() { return dword_BA4320; } //----- (00817660) -------------------------------------------------------- void *__thiscall sub_817660(void *this, char a2) { void *v2; // esi v2 = this; sub_81C1A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00817690) -------------------------------------------------------- void __thiscall sub_817690(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi int v8; // ebx v4 = this; if ( a3 ) { if ( !this[4] ) { v5 = operator new(0x18u); v6 = v5; if ( v5 ) { sub_85BA50(v5); *v6 = &NiFloatData::`vftable'; v6[2] = 0; v6[3] = 0; v6[4] = 0; *((_BYTE *)v6 + 20) = 0; } else { v6 = 0; } v7 = v4[4]; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[4] = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } } sub_826BF0(v4[4], a2, a3, a4); v4[5] = 0; } else { v8 = this[4]; if ( v8 ) sub_826BF0(v8, 0, 0, 0); } } // A211DC: using guessed type void *NiFloatData::`vftable'; //----- (00817750) -------------------------------------------------------- void __thiscall sub_817750(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = this[14]; if ( a2 ) { if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[14] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } else if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[14] = 0; } } //----- (008177D0) -------------------------------------------------------- void __thiscall sub_8177D0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = this[15]; if ( a2 ) { if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[15] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } else if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[15] = 0; } } //----- (00817850) -------------------------------------------------------- void __thiscall sub_817850(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = this[16]; if ( a2 ) { if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[16] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } else if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[16] = 0; } } //----- (008178D0) -------------------------------------------------------- void __thiscall sub_8178D0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi int v8; // ebx v4 = this; if ( a3 ) { if ( !this[6] ) { v5 = operator new(0x18u); v6 = v5; if ( v5 ) { sub_85BA50(v5); *v6 = &NiPosData::`vftable'; v6[2] = 0; v6[3] = 0; v6[4] = 0; *((_BYTE *)v6 + 20) = 0; } else { v6 = 0; } v7 = v4[6]; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[6] = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } } sub_81C1D0(v4[6], a2, a3, a4); v4[7] = 0; } else { v8 = this[6]; if ( v8 ) sub_81C1D0(v8, 0, 0, 0); } } // A2121C: using guessed type void *NiPosData::`vftable'; //----- (00817990) -------------------------------------------------------- int __thiscall sub_817990(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { int v4; // eax int result; // eax v4 = this[11]; if ( v4 ) { *a2 = *(_DWORD *)(v4 + 24); *a3 = *(_DWORD *)(v4 + 32); *a4 = *(_BYTE *)(v4 + 36); result = *(_DWORD *)(v4 + 28); } else { *a2 = 0; *a3 = 0; *a4 = 0; result = 0; } return result; } //----- (008179E0) -------------------------------------------------------- int __thiscall sub_8179E0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { int v4; // eax int result; // eax v4 = this[11]; if ( v4 ) { *a2 = *(_DWORD *)(v4 + 40); *a3 = *(_DWORD *)(v4 + 48); *a4 = *(_BYTE *)(v4 + 52); result = *(_DWORD *)(v4 + 44); } else { *a2 = 0; *a3 = 0; *a4 = 0; result = 0; } return result; } //----- (00817A30) -------------------------------------------------------- int __cdecl sub_817A30(int a1, int a2) { int result; // eax int v3; // edx __int16 v4; // cx __int16 v5; // cx __int16 v6; // cx __int16 v7; // cx result = a2; v3 = *(_WORD *)(a1 + 8) & 1; v4 = v3 | *(_WORD *)(a2 + 8) & 0xFFFE; *(_WORD *)(a2 + 8) = v4; if ( v3 ) v5 = v4 & 0xFFF7; else v5 = v4 | 8; *(_WORD *)(a2 + 8) = v5; *(_WORD *)(a2 + 8) ^= (*(_WORD *)(a1 + 8) ^ v5) & 6; v6 = *(_WORD *)(a2 + 8); if ( (*(_BYTE *)(a1 + 8) >> 4) & 1 ) v7 = v6 | 0x10; else v7 = v6 & 0xFFEF; *(_WORD *)(a2 + 8) = v7; *(float *)(a2 + 12) = *(float *)(a1 + 12); *(float *)(a2 + 20) = *(float *)(a1 + 20); *(float *)(a2 + 24) = *(float *)(a1 + 24); if ( (*(_BYTE *)(a1 + 8) >> 3) & 1 ) *(_WORD *)(a2 + 8) |= 8u; else *(_WORD *)(a2 + 8) &= 0xFFF7u; return result; } //----- (00817AD0) -------------------------------------------------------- void __cdecl sub_817AD0(int a1) { float *v1; // ebx float *v2; // esi int v3; // eax int v4; // eax float *v5; // eax float *v6; // eax int v7; // eax volatile LONG *v8; // edi int v9; // eax int v10; // eax float *v11; // eax float *v12; // ebx int v13; // eax int v14; // eax float *v15; // eax float *v16; // ebx int v17; // eax _DWORD *v18; // esi int v19; // [esp+Ch] [ebp-14h] int v20; // [esp+10h] [ebp-10h] _DWORD *v21; // [esp+14h] [ebp-Ch] float *v22; // [esp+18h] [ebp-8h] char v23; // [esp+1Eh] [ebp-2h] char v24; // [esp+1Fh] [ebp-1h] v21 = *(_DWORD **)(a1 + 48); v24 = 0; v1 = (float *)sub_85B610(v21, (int)dword_BA3BB8); v2 = 0; v22 = v1; if ( v1 && (v3 = (*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v1 + 112))(v1, 0)) != 0 && (v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3)) != 0 ) { while ( (char *)v4 != dword_BA42E8 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_6; } } else { LABEL_6: v24 = 1; v5 = (float *)operator new(0x40u); if ( v5 ) v22 = sub_810320(v5); else v22 = 0; sub_817A30(a1, (int)v22); v1 = v22; } v6 = (float *)operator new(0x44u); if ( v6 ) v2 = sub_821CA0(v6, 0, 0, 0); v2[4] = *(float *)(a1 + 64); sub_811DF0((void **)v2, 0); if ( *(_BYTE *)(a1 + 60) & 1 ) *((_WORD *)v2 + 6) |= 1u; else *((_WORD *)v2 + 6) &= 0xFFFEu; *((_WORD *)v2 + 6) ^= (*(_WORD *)(a1 + 60) ^ *((_WORD *)v2 + 6)) & 6; v7 = (*(int (__thiscall **)(float *, _DWORD))(*(_DWORD *)v1 + 112))(v1, 0); v8 = (volatile LONG *)v7; if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); v9 = (*(int (__thiscall **)(volatile LONG *))(*v8 + 4))(v8); if ( v9 ) { while ( (char *)v9 != dword_BA42E8 ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_32; } v10 = *((_DWORD *)v8 + 11); if ( v10 && *(_DWORD *)(v10 + 24) ) { v11 = (float *)operator new(0x20u); if ( v11 ) v12 = sub_81C790(v11, 0); else v12 = 0; v13 = sub_817990(v8, &v19, &v20, &v23); sub_8178D0(v12, v13, v19, v20); sub_8243A0(*((_DWORD *)v8 + 11), 0, 0, 0); sub_817750(v2, (int)v12); v1 = v22; } v14 = *((_DWORD *)v8 + 11); if ( v14 && *(_DWORD *)(v14 + 40) ) { v15 = (float *)operator new(0x18u); if ( v15 ) v16 = sub_8261F0(v15, 0); else v16 = 0; v17 = sub_8179E0(v8, &v20, &v19, &v23); sub_817690(v16, v17, v20, v19); sub_8243E0(*((_DWORD *)v8 + 11), 0, 0, 0); sub_817850(v2, (int)v16); v1 = v22; } } } LABEL_32: (*(void (__thiscall **)(float *, float *, _DWORD))(*(_DWORD *)v1 + 116))(v1, v2, 0); (*(void (__thiscall **)(float *))(*(_DWORD *)v2 + 108))(v2); v18 = v21; if ( v24 ) (*(void (__thiscall **)(float *, _DWORD *))(*(_DWORD *)v1 + 72))(v1, v21); if ( v18 ) sub_85B520(v18, a1); if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); } } //----- (00817D10) -------------------------------------------------------- void __cdecl sub_817D10(int a1) { int v1; // ebx _DWORD *v2; // edi int v3; // eax _DWORD *v4; // esi int v5; // eax int v6; // ebx float *v7; // eax float *v8; // eax _DWORD *v9; // [esp+20h] [ebp-Ch] float v10; // [esp+24h] [ebp-8h] float v11; // [esp+28h] [ebp-4h] v1 = a1; v2 = *(_DWORD **)(*(_DWORD *)(a1 + 48) + 12); v9 = *(_DWORD **)(a1 + 48); if ( v2 ) { while ( 1 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v3 ) { while ( (char *)v3 != dword_BA3BB8 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_10; } v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 112))(v2, 0); if ( v4 ) { v5 = (*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); if ( v5 ) break; } } LABEL_10: v2 = (_DWORD *)v2[13]; if ( !v2 ) { sub_85B520(v9, a1); return; } } while ( (char *)v5 != dword_BA4360 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_10; } v6 = *(_DWORD *)(a1 + 64); v7 = (float *)operator new(0x18u); if ( v7 ) v8 = sub_8261F0(v7, v6); else v8 = 0; sub_8177D0(v4, (int)v8); sub_817A30(a1, (int)v2); (*(void (__thiscall **)(_DWORD *, float *, float *))(*v4 + 112))(v4, &v10, &v11); (*(void (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 116))(v4, LODWORD(v10), LODWORD(v11)); (*(void (__thiscall **)(_DWORD *))(*v2 + 120))(v2); (*(void (__thiscall **)(_DWORD *))(*v4 + 108))(v4); v1 = a1; } sub_85B520(v9, v1); } //----- (00817E30) -------------------------------------------------------- LONG __cdecl sub_817E30(int a1) { int v1; // edi volatile LONG *v2; // esi float *v3; // eax float *v4; // ebx float *v5; // eax float *v6; // eax int v7; // eax int v8; // ecx int v9; // eax LONG result; // eax void (__stdcall ***v11)(signed int); // [esp+8h] [ebp-8h] _DWORD *v12; // [esp+Ch] [ebp-4h] float *v13; // [esp+18h] [ebp+8h] int v14; // [esp+18h] [ebp+8h] void (__stdcall ***v15)(signed int); // [esp+18h] [ebp+8h] v1 = a1; v12 = *(_DWORD **)(a1 + 48); v2 = sub_85B610(v12, (int)dword_BA3BB8); if ( v2 ) InterlockedIncrement(v2 + 1); v3 = (float *)operator new(0x5Cu); if ( v3 ) v4 = sub_81E560(v3, *(_DWORD *)(a1 + 72), *(_DWORD *)(a1 + 76)); else v4 = 0; if ( (*(_BYTE *)(a1 + 60) >> 2) & 1 ) *((_WORD *)v4 + 6) |= 4u; else *((_WORD *)v4 + 6) &= 0xFFFBu; if ( (*(_BYTE *)(a1 + 60) >> 3) & 1 ) *((_WORD *)v4 + 6) |= 8u; else *((_WORD *)v4 + 6) &= 0xFFF7u; v4[14] = *(float *)(a1 + 104); if ( (*(_BYTE *)(a1 + 60) >> 4) & 1 ) { *((_WORD *)v4 + 6) |= 0x10u; sub_81DEE0((int)v4); } else { *((_WORD *)v4 + 6) &= 0xFFEFu; } if ( (*(_BYTE *)(a1 + 60) >> 5) & 1 ) *((_WORD *)v4 + 6) |= 0x20u; else *((_WORD *)v4 + 6) &= 0xFFDFu; v4[10] = *(float *)(a1 + 88); v4[11] = *(float *)(a1 + 92); *((_WORD *)v4 + 24) = *(_WORD *)(a1 + 96); if ( (*(_BYTE *)(a1 + 60) >> 6) & 1 ) *((_WORD *)v4 + 6) |= 0x40u; else *((_WORD *)v4 + 6) &= 0xFFBFu; if ( (*(_BYTE *)(a1 + 60) >> 1) & 1 ) *((_WORD *)v4 + 6) |= 2u; else *((_WORD *)v4 + 6) &= 0xFFFDu; if ( !v2 || (*(int (__thiscall **)(volatile LONG *, _DWORD))(*v2 + 112))(v2, 0) ) { v5 = (float *)operator new(0x40u); if ( v5 ) { v6 = sub_810320(v5); v13 = v6; } else { v13 = 0; v6 = 0; } if ( v2 != (volatile LONG *)v6 ) { if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); v6 = v13; } v2 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } (*(void (__thiscall **)(volatile LONG *, float *, _DWORD))(*v2 + 116))(v2, v4, 0); (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v2 + 72))(v2, v12); sub_817A30(v1, (int)v2); sub_599BC0(v12, *((_DWORD *)v2 + 13)); v7 = *(_DWORD *)(v1 + 52); v8 = *((_DWORD *)v2 + 13); v14 = v7; v11 = (void (__stdcall ***)(signed int))v8; if ( v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v11 ) (**v11)(1); v7 = v14; } *((_DWORD *)v2 + 13) = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v9 = *(_DWORD *)(v1 + 52); v15 = (void (__stdcall ***)(signed int))v9; if ( (volatile LONG *)v9 != v2 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v15 ) (**v15)(1); *(_DWORD *)(v1 + 52) = v2; InterlockedIncrement(v2 + 1); } } else { (*(void (__thiscall **)(volatile LONG *, float *, _DWORD))(*v2 + 116))(v2, v4, 0); sub_817A30(a1, (int)v2); } (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 108))(v4); if ( v12 ) sub_85B520(v12, v1); result = InterlockedDecrement(v2 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); return result; } //----- (008180B0) -------------------------------------------------------- void __cdecl sub_8180B0(int a1, _DWORD *a2) { int v2; // eax _DWORD *v3; // esi _DWORD *v4; // edi int v5; // eax int v6; // eax int v7; // eax int v8; // eax unsigned int v9; // eax int v10; // esi int i; // eax if ( a2 ) { v2 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v2 ) { while ( (char *)v2 != dword_BA457C ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return; } v3 = (_DWORD *)a2[3]; if ( v3 ) { do { v4 = (_DWORD *)v3[13]; v5 = (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3); if ( v5 ) { while ( (char *)v5 != dword_BA4310 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_10; } sub_817D10((int)v3); } else { LABEL_10: v6 = (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3); if ( v6 ) { while ( (char *)v6 != dword_BA4368 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_13; } sub_817AD0((int)v3); } else { LABEL_13: v7 = (*(int (__thiscall **)(_DWORD *))(*v3 + 4))(v3); if ( v7 ) { while ( (char *)v7 != dword_BA4348 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_20; } sub_817E30((int)v3); } } } LABEL_20: v3 = v4; } while ( v4 ); } v8 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v8 ) { while ( (char *)v8 != dword_BA455C ) { v8 = *(_DWORD *)(v8 + 4); if ( !v8 ) return; } v9 = a2[47]; v10 = 0; if ( v9 ) { if ( v9 > 0 ) goto LABEL_28; for ( i = 0; ; i = *(_DWORD *)(a2[45] + 4 * v10) ) { sub_8180B0(a1, i); if ( a2[47] <= (unsigned int)++v10 ) break; LABEL_28: ; } } } } } } //----- (008181D0) -------------------------------------------------------- void __cdecl sub_8181D0(int a1, _DWORD *a2) { int v2; // eax if ( *(_DWORD *)(a1 + 28) < 0xA010068u ) { if ( a2 ) { v2 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( v2 ) { while ( (char *)v2 != dword_BA4568 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return; } sub_8180B0(a1, a2); } } } } //----- (00818220) -------------------------------------------------------- int __thiscall sub_818220(_DWORD *this, _BYTE *a2) { int result; // eax result = this[12]; *a2 = ~*(_BYTE *)(result + 28) & 1; return result; } //----- (00818240) -------------------------------------------------------- int __thiscall sub_818240(int *this, void **a2) { int result; // eax result = sub_831FA0(this, a2); if ( (unsigned int)a2[7] < 0xA010068 ) result = sub_876290(a2); return result; } //----- (00818270) -------------------------------------------------------- int __thiscall sub_818270(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi float *v5; // eax float *v6; // edi int v7; // esi v2 = this; result = sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); v5 = (float *)operator new(0x18u); if ( v5 ) v6 = sub_82BA70(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v2[15] + 108))(); } return result; } //----- (00818300) -------------------------------------------------------- char __thiscall sub_818300(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx int v6; // esi v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, char *))(*(_DWORD *)v5 + 80))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), (char *)&a2 + 3); if ( result ) { v6 = *(_DWORD *)(v2 + 48); if ( HIBYTE(a2) ) { result = -2; *(_WORD *)(v6 + 28) &= 0xFFFEu; } else { *(_WORD *)(v6 + 28) |= 1u; } } } return result; } //----- (00818390) -------------------------------------------------------- float *__thiscall sub_818390(float *this) { float *v1; // esi v1 = this; sub_831FB0(this); *(_DWORD *)v1 = &NiVisController::`vftable'; return v1; } // A2125C: using guessed type void *NiVisController::`vftable'; //----- (008183B0) -------------------------------------------------------- char *sub_8183B0() { return dword_BA42D0; } //----- (008183C0) -------------------------------------------------------- float *__thiscall sub_8183C0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_831FB0(v3); *(_DWORD *)v4 = &NiVisController::`vftable'; sub_831CE0(v2, (int)v4, a2); result = v4; } else { sub_831CE0(v2, 0, a2); result = 0; } return result; } // A2125C: using guessed type void *NiVisController::`vftable'; //----- (00818440) -------------------------------------------------------- unsigned int __thiscall sub_818440(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_832090(this, a2); v3 = sub_8784D0(*(int *)dword_BA42D0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00818490) -------------------------------------------------------- float *sub_818490() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x4Cu); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[14] = 0.0; v1[2] = 0.0; v1[15] = 0.0; v1[3] = 0.0; v1[4] = 0.0; v1[16] = 1.0; v1[5] = 0.0; v1[6] = 0.0; v1[17] = 1.0; v1[7] = 0.0; v1[8] = 0.0; v1[9] = 0.0; v1[10] = 0.0; v1[11] = 0.0; v1[12] = 0.0; v1[13] = 0.0; v1[18] = 0.0; *(_DWORD *)v1 = &NiUVData::`vftable'; return v1; } // A212FC: using guessed type void *NiUVData::`vftable'; //----- (00818500) -------------------------------------------------------- char *sub_818500() { return dword_BA42D8; } //----- (00818510) -------------------------------------------------------- LONG __thiscall sub_818510(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[3]; *this = &NiUVData::`vftable'; if ( v2 ) ((void (__cdecl *)(int))dword_BA3D30[this[4]])(v2); if ( v1[6] ) ((void (__cdecl *)(_DWORD))dword_BA3D30[v1[7]])(v1[6]); if ( v1[9] ) ((void (__cdecl *)(_DWORD))dword_BA3D30[v1[10]])(v1[9]); if ( v1[12] ) ((void (__cdecl *)(_DWORD))dword_BA3D30[v1[13]])(v1[12]); return sub_85BA80(v1); } // A212FC: using guessed type void *NiUVData::`vftable'; // BA3D30: using guessed type int dword_BA3D30[]; //----- (00818580) -------------------------------------------------------- char __thiscall sub_818580(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // ebx int v8; // ebx int v9; // ebx int v10; // ebx unsigned __int8 (__cdecl *v11)(int, int); // [esp+10h] [ebp+8h] unsigned __int8 (__cdecl *v12)(int, int); // [esp+10h] [ebp+8h] unsigned __int8 (__cdecl *v13)(int, int); // [esp+10h] [ebp+8h] unsigned __int8 (__cdecl *v14)(int, int); // [esp+10h] [ebp+8h] v2 = (_DWORD *)a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || v3[5] != *(_DWORD *)(a2 + 20) || v3[7] != *(_DWORD *)(a2 + 28) || v3[8] != *(_DWORD *)(a2 + 32) || v3[10] != *(_DWORD *)(a2 + 40) || v3[11] != *(_DWORD *)(a2 + 44) || v3[13] != *(_DWORD *)(a2 + 52) || *((_BYTE *)v3 + 72) != *(_BYTE *)(a2 + 72) || *((_BYTE *)v3 + 73) != *(_BYTE *)(a2 + 73) || *((_BYTE *)v3 + 74) != *(_BYTE *)(a2 + 74) || *((_BYTE *)v3 + 75) != *(_BYTE *)(a2 + 75) ) { return 0; } v7 = 0; v11 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v6]; if ( v5 ) { while ( v11(v7 * *((unsigned __int8 *)v3 + 72) + v3[3], v7 * *((unsigned __int8 *)v3 + 72) + v2[3]) ) { if ( (unsigned int)++v7 >= v3[2] ) goto LABEL_18; } } else { LABEL_18: v8 = 0; v12 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v3[7]]; if ( v3[5] ) { while ( v12(v8 * *((unsigned __int8 *)v3 + 73) + v3[6], v8 * *((unsigned __int8 *)v3 + 73) + v2[6]) ) { if ( (unsigned int)++v8 >= v3[5] ) goto LABEL_21; } } else { LABEL_21: v9 = 0; v13 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v3[10]]; if ( v3[8] ) { while ( v13(v9 * *((unsigned __int8 *)v3 + 74) + v3[9], v9 * *((unsigned __int8 *)v3 + 74) + v2[9]) ) { if ( (unsigned int)++v9 >= v3[8] ) goto LABEL_24; } } else { LABEL_24: v10 = 0; v14 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v3[13]]; if ( !v3[11] ) return 1; while ( v14(v10 * *((unsigned __int8 *)v3 + 75) + v3[12], v10 * *((unsigned __int8 *)v3 + 75) + v2[12]) ) { if ( (unsigned int)++v10 >= v3[11] ) return 1; } } } } return 0; } // BA3F70: using guessed type int dword_BA3F70[]; //----- (00818710) -------------------------------------------------------- void *__thiscall sub_818710(void *this, char a2) { void *v2; // esi v2 = this; sub_818510(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00818740) -------------------------------------------------------- char __thiscall sub_818740(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[3]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D30[this[4]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[2] = a3; v4[3] = a2; v4[4] = a4; LOBYTE(v5) = byte_BA3BE8[a4]; *((_BYTE *)v4 + 72) = v5; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 72) = 0; } return v5; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (008187A0) -------------------------------------------------------- char __thiscall sub_8187A0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[6]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D30[this[7]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[5] = a3; v4[6] = a2; v4[7] = a4; LOBYTE(v5) = byte_BA3BE8[a4]; *((_BYTE *)v4 + 73) = v5; } else { v4[5] = 0; v4[6] = 0; v4[7] = 0; *((_BYTE *)v4 + 73) = 0; } return v5; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (00818800) -------------------------------------------------------- char __thiscall sub_818800(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[9]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D30[this[10]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[8] = a3; v4[9] = a2; v4[10] = a4; LOBYTE(v5) = byte_BA3BE8[a4]; *((_BYTE *)v4 + 74) = v5; } else { v4[8] = 0; v4[9] = 0; v4[10] = 0; *((_BYTE *)v4 + 74) = 0; } return v5; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (00818860) -------------------------------------------------------- char __thiscall sub_818860(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[12]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D30[this[13]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[11] = a3; v4[12] = a2; v4[13] = a4; LOBYTE(v5) = byte_BA3BE8[a4]; *((_BYTE *)v4 + 75) = v5; } else { v4[11] = 0; v4[12] = 0; v4[13] = 0; *((_BYTE *)v4 + 75) = 0; } return v5; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (008188C0) -------------------------------------------------------- char __thiscall sub_8188C0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // ebx signed int v11; // ST10_4 int v12; // eax int v13; // ST08_4 int v14; // eax int v15; // ST14_4 void (__cdecl *v16)(int, signed int *, signed int, int *, signed int); // eax int v17; // eax int v18; // ST14_4 void (__cdecl *v19)(int, int *, signed int, int *, signed int); // eax int v20; // ebx signed int v21; // ST10_4 int v22; // eax int v23; // ST08_4 int v24; // eax int v25; // ST14_4 void (__cdecl *v26)(int, signed int *, signed int, int *, signed int); // eax int v27; // eax int v28; // ST14_4 void (__cdecl *v29)(int, int *, signed int, int *, signed int); // eax int v30; // ebx signed int v31; // ST10_4 int v32; // eax int v33; // ST08_4 int v34; // eax int v35; // ST14_4 int (__cdecl *v36)(int, signed int *, signed int, int *, signed int); // eax char result; // al int v38; // eax int v39; // ST14_4 void (__cdecl *v40)(int, int *, signed int, int *, signed int); // eax int v41; // ebx signed int v42; // ST10_4 int v43; // edi int v44; // [esp+Ch] [ebp-8h] int v45; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v45 = 4; v6(v5, &a2, 4, &v45, 1); if ( a2 ) { v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 4); v45 = 4; v9(v8, &v44, 4, &v45, 1); v10 = v44; v11 = a2; *((_BYTE *)v3 + 72) = byte_BA3BE8[v44]; v12 = ((int (__cdecl *)(signed int, signed int))dword_BA4240[v10])(v2, v11); v13 = *((unsigned __int8 *)v3 + 72); v44 = v12; ((void (__cdecl *)(int, signed int, int))dword_BA3C10[v10])(v12, a2, v13); sub_818740(v3, v44, a2, v10); } v14 = *(_DWORD *)(v2 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v14 + 4); v44 = 4; v16(v15, &a2, 4, &v44, 1); if ( a2 ) { v17 = *(_DWORD *)(v2 + 352); v18 = v17; v19 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v17 + 4); v44 = 4; v19(v18, &v45, 4, &v44, 1); v20 = v45; v21 = a2; *((_BYTE *)v3 + 73) = byte_BA3BE8[v45]; v22 = ((int (__cdecl *)(signed int, signed int))dword_BA4240[v20])(v2, v21); v23 = *((unsigned __int8 *)v3 + 73); v44 = v22; ((void (__cdecl *)(int, signed int, int))dword_BA3C10[v20])(v22, a2, v23); sub_8187A0(v3, v44, a2, v20); } v24 = *(_DWORD *)(v2 + 352); v25 = v24; v26 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v24 + 4); v44 = 4; v26(v25, &a2, 4, &v44, 1); if ( a2 ) { v27 = *(_DWORD *)(v2 + 352); v28 = v27; v29 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v27 + 4); v44 = 4; v29(v28, &v45, 4, &v44, 1); v30 = v45; v31 = a2; *((_BYTE *)v3 + 74) = byte_BA3BE8[v45]; v32 = ((int (__cdecl *)(signed int, signed int))dword_BA4240[v30])(v2, v31); v33 = *((unsigned __int8 *)v3 + 74); v44 = v32; ((void (__cdecl *)(int, signed int, int))dword_BA3C10[v30])(v32, a2, v33); sub_818800(v3, v44, a2, v30); } v34 = *(_DWORD *)(v2 + 352); v35 = v34; v36 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v34 + 4); v44 = 4; result = v36(v35, &a2, 4, &v44, 1); if ( a2 ) { v38 = *(_DWORD *)(v2 + 352); v39 = v38; v40 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v38 + 4); v44 = 4; v40(v39, &v45, 4, &v44, 1); v41 = v45; v42 = a2; *((_BYTE *)v3 + 75) = byte_BA3BE8[v45]; v43 = ((int (__cdecl *)(signed int, signed int))dword_BA4240[v41])(v2, v42); ((void (__cdecl *)(int, signed int, _DWORD))dword_BA3C10[v41])(v43, a2, *((unsigned __int8 *)v3 + 75)); result = sub_818860(v3, v43, a2, v41); } return result; } // BA3C10: using guessed type int dword_BA3C10[]; // BA4240: using guessed type int dword_BA4240[]; //----- (00818AF0) -------------------------------------------------------- int __thiscall sub_818AF0(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi void (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int v6; // eax int v7; // ST0C_4 void (__cdecl *v8)(int, _DWORD *, signed int, signed int *, signed int); // eax int v9; // eax int v10; // ST0C_4 void (__cdecl *v11)(int, _DWORD *, signed int, signed int *, signed int); // eax int v12; // eax int v13; // ST0C_4 void (__cdecl *v14)(int, _DWORD *, signed int, signed int *, signed int); // eax int v15; // eax int v16; // ST0C_4 void (__cdecl *v17)(int, _DWORD *, signed int, signed int *, signed int); // eax int v18; // eax int v19; // ST0C_4 void (__cdecl *v20)(int, _DWORD *, signed int, signed int *, signed int); // eax int v21; // eax int v22; // ST0C_4 int (__cdecl *v23)(int, _DWORD *, signed int, signed int *, signed int); // eax int result; // eax int v25; // eax int v26; // ST0C_4 void (__cdecl *v27)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v6 = *(_DWORD *)(v2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; v8(v7, v3 + 4, 4, &a2, 1); ((void (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[4]])(v2, v3[3], v3[2]); } v9 = *(_DWORD *)(v2 + 356); v10 = v9; v11 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; v11(v10, v3 + 5, 4, &a2, 1); if ( v3[5] ) { v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v12 + 8); a2 = 4; v14(v13, v3 + 7, 4, &a2, 1); ((void (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[7]])(v2, v3[6], v3[5]); } v15 = *(_DWORD *)(v2 + 356); v16 = v15; v17 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v15 + 8); a2 = 4; v17(v16, v3 + 8, 4, &a2, 1); if ( v3[8] ) { v18 = *(_DWORD *)(v2 + 356); v19 = v18; v20 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v18 + 8); a2 = 4; v20(v19, v3 + 10, 4, &a2, 1); ((void (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[10]])(v2, v3[9], v3[8]); } v21 = *(_DWORD *)(v2 + 356); v22 = v21; v23 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v21 + 8); a2 = 4; result = v23(v22, v3 + 11, 4, &a2, 1); if ( v3[11] ) { v25 = *(_DWORD *)(v2 + 356); v26 = v25; v27 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v25 + 8); a2 = 4; v27(v26, v3 + 13, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[13]])(v2, v3[12], v3[11]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3EE0: using guessed type int dword_BA3EE0[]; //----- (00818C80) -------------------------------------------------------- unsigned int __thiscall sub_818C80(int *this, int a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA42D8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumUOffsetKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiNumUTilingKeys", v3[8]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878670((int)"m_uiNumVOffsetKeys", v3[5]); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_878670((int)"m_uiNumVTilingKeys", v3[11]); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); return sub_823870(v2, v13, &a2); } //----- (00818DA0) -------------------------------------------------------- int __thiscall sub_818DA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_86C590(this, a2); result = sub_875AD0(a2); v4 = v2[20]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[20] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (00818E00) -------------------------------------------------------- char __thiscall sub_818E00(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_86C250(this, a2); if ( result ) { v4 = v2[20]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (00818E40) -------------------------------------------------------- bool __thiscall sub_818E40(float *this, int a2) { float *v2; // edi bool result; // al int v4; // esi int v5; // ecx v2 = this; result = 0; if ( sub_86BDE0(this, a2) ) { if ( *((_WORD *)v2 + 38) == *(_WORD *)(a2 + 76) ) { v4 = *(_DWORD *)(a2 + 80); v5 = *((_DWORD *)v2 + 20); if ( (v5 == 0) == (v4 == 0) && (!v5 || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v5 + 28))(v4)) ) result = 1; } } return result; } //----- (00818EA0) -------------------------------------------------------- char *sub_818EA0() { return dword_BA42E0; } //----- (00818EB0) -------------------------------------------------------- void __thiscall sub_818EB0(int this, _DWORD *a2) { float *v2; // eax v2 = *(float **)(this + 80); v2[14] = 0.0; v2[15] = 0.0; v2[16] = 1.0; v2[17] = 1.0; sub_86C4F0(this, a2); } //----- (00818ED0) -------------------------------------------------------- LONG __thiscall sub_818ED0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NiUVController::`vftable'; v2 = this[20]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[20] = 0; } v3 = v1[20]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_86C3C0(v1); } // A2138C: using guessed type void *NiUVController::`vftable'; //----- (00818F30) -------------------------------------------------------- void __thiscall sub_818F30(int this) { int v1; // edx float *v2; // esi int v3; // edi unsigned __int8 v4; // bl int v5; // eax double v6; // st7 float *v7; // esi float *v8; // esi int v9; // edi unsigned __int8 v10; // bl int v11; // eax double v12; // st7 float *v13; // esi float *v14; // esi int v15; // edi unsigned __int8 v16; // bl int v17; // eax double v18; // st7 float *v19; // esi int v20; // esi unsigned __int8 v21; // bl float *v22; // edx int v23; // eax double v24; // st7 float *v25; // edx v1 = *(_DWORD *)(this + 80); *(float *)(this + 20) = 3.4028235e38; *(float *)(this + 24) = -3.4028235e38; if ( v1 ) { v2 = *(float **)(v1 + 12); v3 = *(_DWORD *)(v1 + 8); v4 = *(_BYTE *)(v1 + 72); if ( v2 ) { if ( *v2 < 3.402823466385289e38 ) *(float *)(this + 20) = *v2; v5 = (v3 - 1) * v4; v6 = *(float *)((char *)v2 + v5); v7 = (float *)((char *)v2 + v5); if ( v6 > -3.402823466385289e38 ) *(float *)(this + 24) = *v7; } if ( v1 ) { v8 = *(float **)(v1 + 24); v9 = *(_DWORD *)(v1 + 20); v10 = *(_BYTE *)(v1 + 73); if ( v8 ) { if ( *(float *)(this + 20) > (double)*v8 ) *(float *)(this + 20) = *v8; v11 = (v9 - 1) * v10; v12 = *(float *)((char *)v8 + v11); v13 = (float *)((char *)v8 + v11); if ( *(float *)(this + 24) < v12 ) *(float *)(this + 24) = *v13; } if ( v1 ) { v14 = *(float **)(v1 + 36); v15 = *(_DWORD *)(v1 + 32); v16 = *(_BYTE *)(v1 + 74); if ( v14 ) { if ( *(float *)(this + 20) > (double)*v14 ) *(float *)(this + 20) = *v14; v17 = (v15 - 1) * v16; v18 = *(float *)((char *)v14 + v17); v19 = (float *)((char *)v14 + v17); if ( *(float *)(this + 24) < v18 ) *(float *)(this + 24) = *v19; } if ( v1 ) { v20 = *(_DWORD *)(v1 + 44); v21 = *(_BYTE *)(v1 + 75); v22 = *(float **)(v1 + 48); if ( v22 ) { if ( *(float *)(this + 20) > (double)*v22 ) *(float *)(this + 20) = *v22; v23 = (v20 - 1) * v21; v24 = *(float *)((char *)v22 + v23); v25 = (float *)((char *)v22 + v23); if ( *(float *)(this + 24) < v24 ) *(float *)(this + 24) = *v25; } } } } } } //----- (00819060) -------------------------------------------------------- char __thiscall sub_819060(float *this, float a2) { float *v2; // esi char result; // al v2 = this; result = sub_80FFE0(this, a2); if ( !result ) *((_BYTE *)v2 + 84) = 1; return result; } //----- (00819080) -------------------------------------------------------- void __thiscall sub_819080(int this) { int v1; // esi unsigned __int16 *v2; // ebx int v3; // eax char v4; // dl int v5; // ecx int v6; // edi int v7; // eax int v8; // eax char v9; // dl int v10; // ecx int v11; // edi int v12; // eax int v13; // eax char v14; // dl int v15; // ecx int v16; // edi int v17; // eax int v18; // eax char v19; // dl int v20; // ecx int v21; // edi int v22; // eax float *v23; // eax float v24; // ST30_4 float v25; // ST24_4 float v26; // ST28_4 float *v27; // eax int v28; // ecx float v29; // ST30_4 double v30; // st3 float v31; // ST30_4 double v32; // st2 float *v33; // eax float v34; // [esp+24h] [ebp-24h] float v35; // [esp+2Ch] [ebp-1Ch] float v36; // [esp+34h] [ebp-14h] float v37; // [esp+38h] [ebp-10h] float v38; // [esp+3Ch] [ebp-Ch] float v39; // [esp+40h] [ebp-8h] float v40; // [esp+44h] [ebp-4h] v1 = this; if ( *(_BYTE *)(this + 84) ) { v2 = *(unsigned __int16 **)(*(_DWORD *)(this + 48) + 184); if ( *(_WORD *)(this + 76) < (unsigned __int16)(v2[24] & 0x3F) ) { v3 = *(_DWORD *)(this + 80); v36 = 0.0; if ( v3 ) { v4 = *(_BYTE *)(v3 + 72); v5 = *(_DWORD *)(v3 + 8); v6 = *(_DWORD *)(v3 + 16); v7 = *(_DWORD *)(v3 + 12); if ( v7 ) v36 = sub_803DC0(*(float *)(v1 + 40), v7, v6, v5, v1 + 60, v4); } v8 = *(_DWORD *)(v1 + 80); v39 = 0.0; if ( v8 ) { v9 = *(_BYTE *)(v8 + 73); v10 = *(_DWORD *)(v8 + 20); v11 = *(_DWORD *)(v8 + 28); v12 = *(_DWORD *)(v8 + 24); if ( v12 ) v39 = sub_803DC0(*(float *)(v1 + 40), v12, v11, v10, v1 + 68, v9); } v13 = *(_DWORD *)(v1 + 80); v38 = 1.0; if ( v13 ) { v14 = *(_BYTE *)(v13 + 74); v15 = *(_DWORD *)(v13 + 32); v16 = *(_DWORD *)(v13 + 40); v17 = *(_DWORD *)(v13 + 36); if ( v17 ) v38 = sub_803DC0(*(float *)(v1 + 40), v17, v16, v15, v1 + 64, v14); } v18 = *(_DWORD *)(v1 + 80); v37 = 1.0; if ( v18 ) { v19 = *(_BYTE *)(v18 + 75); v20 = *(_DWORD *)(v18 + 44); v21 = *(_DWORD *)(v18 + 52); v22 = *(_DWORD *)(v18 + 48); if ( v22 ) v37 = sub_803DC0(*(float *)(v1 + 40), v22, v21, v20, v1 + 72, v19); } v23 = *(float **)(v1 + 80); v40 = v38 / v23[16]; v24 = v23[14]; v25 = v37 / v23[17]; v26 = v23[15]; v27 = (float *)sub_8795A0((int)v2, *(_WORD *)(v1 + 76)); v28 = v2[6]; v29 = v36 - v24 * v40; v35 = (1.0 - v40) * 0.5 - v29; v30 = v25; v34 = v39 - v26 * v25; if ( (unsigned __int16)v28 > 0u ) { do { v32 = *v27; v27 += 2; --v28; *(v27 - 2) = v32 * v40 + v35; v31 = 0.5 * (1.0 - v30) + v34; *(v27 - 1) = *(v27 - 1) * v30 + v31; } while ( v28 ); } v33 = *(float **)(v1 + 80); v33[14] = v36; v33[15] = v39; v33[16] = v38; v33[17] = v37; v2[25] |= 8u; *(_BYTE *)(v1 + 84) = 0; } } } //----- (00819280) -------------------------------------------------------- float *sub_819280() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x58u); v1 = v0; if ( !v0 ) return 0; sub_86C310(v0); *(_DWORD *)v1 = &NiUVController::`vftable'; v1[20] = 0.0; *((_WORD *)v1 + 38) = 0; v1[15] = 0.0; v1[17] = 0.0; v1[16] = 0.0; v1[18] = 0.0; *((_BYTE *)v1 + 84) = 0; return v1; } // A2138C: using guessed type void *NiUVController::`vftable'; //----- (008192D0) -------------------------------------------------------- void __thiscall sub_8192D0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = this; v3 = this[20]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[20] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v2[15] = 0; v2[17] = 0; v2[16] = 0; v2[18] = 0; sub_818F30((int)v2); } //----- (00819330) -------------------------------------------------------- void *__thiscall sub_819330(void *this, char a2) { void *v2; // esi v2 = this; sub_818ED0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00819360) -------------------------------------------------------- int __thiscall sub_819360(int *this, signed int a2) { signed int v2; // edi int *v3; // esi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_86C630(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 2; v4(v5, v3 + 19, 2, &a2, 1); return sub_876290((void **)v2); } //----- (008193A0) -------------------------------------------------------- int __thiscall sub_8193A0(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_86C780(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 19, 2, &a2, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[20]); } //----- (008193F0) -------------------------------------------------------- unsigned int __thiscall sub_8193F0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA42E0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00819440) -------------------------------------------------------- int __thiscall sub_819440(int *this, _DWORD **a2) { int *v2; // edi float *v3; // eax int v4; // esi int v5; // edi v2 = this; v3 = (float *)operator new(0x58u); v4 = (int)v3; if ( v3 ) { sub_86C310(v3); *(_DWORD *)v4 = &NiUVController::`vftable'; *(_DWORD *)(v4 + 80) = 0; *(_WORD *)(v4 + 76) = 0; *(_DWORD *)(v4 + 60) = 0; *(_DWORD *)(v4 + 68) = 0; *(_DWORD *)(v4 + 64) = 0; *(_DWORD *)(v4 + 72) = 0; *(_BYTE *)(v4 + 84) = 0; } else { v4 = 0; } sub_86C130(v2, v4, a2); *(_DWORD *)(v4 + 60) = v2[15]; *(_DWORD *)(v4 + 68) = v2[17]; *(_DWORD *)(v4 + 64) = v2[16]; *(_DWORD *)(v4 + 72) = v2[18]; *(_WORD *)(v4 + 76) = *((_WORD *)v2 + 38); v5 = v2[20]; if ( v5 ) sub_8192D0((_DWORD *)v4, v5); return v4; } // A2138C: using guessed type void *NiUVController::`vftable'; //----- (008194D0) -------------------------------------------------------- signed int __stdcall sub_8194D0(__int16 a1) { if ( !a1 ) return 1; if ( a1 == 1 ) return 2; return a1 == 2 ? 0 : 6; } //----- (00819510) -------------------------------------------------------- BOOL __thiscall sub_819510(float *this, float *a2) { return *a2 != *this || a2[1] != this[1] || a2[2] != this[2] || a2[3] != this[3]; } //----- (00819560) -------------------------------------------------------- BOOL __thiscall sub_819560(float *this) { float v1; // ST00_4 double v2; // st7 v1 = -3.4028235e38; v2 = v1; return v1 == this[7] && v2 == this[4] && *this == v2; } //----- (008195B0) -------------------------------------------------------- BOOL __thiscall sub_8195B0(float *this, float *a2) { return *a2 == *this && a2[1] == this[1] && a2[2] == this[2] && a2[3] == this[3] && a2[4] == this[4] && a2[5] == this[5] && a2[6] == this[6] && a2[7] == this[7]; } //----- (00819640) -------------------------------------------------------- int __thiscall sub_819640(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx int v5; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[11]; if ( v4 ) return *(_DWORD *)(v4 + 8); } else if ( a2 == 2 ) { v5 = this[11]; if ( v5 ) return *(_DWORD *)(v5 + 40); } } else { v2 = this[11]; if ( v2 ) return *(_DWORD *)(v2 + 24); } return 0; } //----- (00819690) -------------------------------------------------------- int __thiscall sub_819690(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx int v5; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[11]; if ( v4 ) return *(_DWORD *)(v4 + 16); } else if ( a2 == 2 ) { v5 = this[11]; if ( v5 ) return *(_DWORD *)(v5 + 48); } } else { v2 = this[11]; if ( v2 ) return *(_DWORD *)(v2 + 32); } return 0; } //----- (008196E0) -------------------------------------------------------- int __thiscall sub_8196E0(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx int v5; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[11]; if ( v4 ) return *(_DWORD *)(v4 + 12); } else if ( a2 == 2 ) { v5 = this[11]; if ( v5 ) return *(_DWORD *)(v5 + 44); } } else { v2 = this[11]; if ( v2 ) return *(_DWORD *)(v2 + 28); } return 0; } //----- (00819730) -------------------------------------------------------- char __thiscall sub_819730(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx int v5; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[11]; if ( v4 ) return *(_BYTE *)(v4 + 20); } else if ( a2 == 2 ) { v5 = this[11]; if ( v5 ) return *(_BYTE *)(v5 + 52); } } else { v2 = this[11]; if ( v2 ) return *(_BYTE *)(v2 + 36); } return 0; } //----- (00819780) -------------------------------------------------------- void __thiscall sub_819780(_DWORD *this, float a2, float a3) { _DWORD *v3; // ecx v3 = (_DWORD *)this[11]; if ( v3 ) sub_824280(v3, a2, a3); } //----- (008197B0) -------------------------------------------------------- bool __thiscall sub_8197B0(float *this, int a2) { float *v2; // esi double v3; // st7 v2 = this; if ( !(_WORD)a2 ) { if ( !*((_DWORD *)this + 11) || !(*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) { v3 = v2[3]; return -3.4028235e38 != v3; } return 0; } if ( (unsigned __int16)a2 == 1 ) { if ( !*((_DWORD *)this + 11) || !(*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) { v3 = v2[7]; return -3.4028235e38 != v3; } return 0; } if ( (unsigned __int16)a2 != 2 || *((_DWORD *)this + 11) && (*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) { return 0; } v3 = v2[10]; return -3.4028235e38 != v3; } //----- (00819850) -------------------------------------------------------- int __thiscall sub_819850(int *this, _DWORD *a2) { int *v2; // esi int result; // eax int v4; // edi int v5; // ebx v2 = this; sub_832110(this, (signed int)a2); sub_8319B0((char *)v2 + 12, (signed int)a2); result = sub_876300(a2); v4 = v2[11]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[11] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (008198C0) -------------------------------------------------------- char __thiscall sub_8198C0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_8A3660(this, a2); if ( result ) { v4 = v2[11]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (00819900) -------------------------------------------------------- int __thiscall sub_819900(char *this, int a2) { char *v2; // esi v2 = this; sub_8790E0(a2); sub_831960(v2 + 12, a2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *((_DWORD *)v2 + 11)); } //----- (00819930) -------------------------------------------------------- char __thiscall sub_819930(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || !(unsigned __int8)sub_8195B0(v2 + 3, (float *)(a2 + 12)) ) return 0; v4 = *((_DWORD *)v2 + 11); if ( v4 ) { if ( !*(_DWORD *)(a2 + 44) ) return 0; if ( v4 ) goto LABEL_13; } if ( *(_DWORD *)(a2 + 44) ) return 0; if ( v4 ) { LABEL_13: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 44)) ) return 1; return 0; } return 1; } //----- (00819990) -------------------------------------------------------- float *__thiscall sub_819990(float *this, int a2) { float *v2; // esi v2 = this; sub_8320E0(this); *(_DWORD *)v2 = &NiTransformInterpolator::`vftable'; *((_DWORD *)v2 + 3) = dword_ABCEB0; *((_DWORD *)v2 + 4) = dword_ABCEB4; *((_DWORD *)v2 + 5) = dword_ABCEB8; *((_DWORD *)v2 + 6) = dword_BA44A0; *((_DWORD *)v2 + 7) = dword_BA44A4; *((_DWORD *)v2 + 8) = dword_BA44A8; *((_DWORD *)v2 + 9) = dword_BA44AC; v2[10] = -3.4028235e38; *((_DWORD *)v2 + 11) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v2[12] = 0.0; v2[13] = 0.0; v2[14] = 0.0; return v2; } // A21404: using guessed type void *NiTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00819A20) -------------------------------------------------------- char *sub_819A20() { return dword_BA42E8; } //----- (00819A30) -------------------------------------------------------- float *__thiscall sub_819A30(float *this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { float *v9; // ebx v9 = this; sub_8320E0(this); qmemcpy(v9 + 3, &a2, 0x20u); *(_DWORD *)v9 = &NiTransformInterpolator::`vftable'; v9[11] = 0.0; v9[12] = 0.0; v9[13] = 0.0; v9[14] = 0.0; return v9; } // A21404: using guessed type void *NiTransformInterpolator::`vftable'; //----- (00819A70) -------------------------------------------------------- void __thiscall sub_819A70(_DWORD *this, float *a2, float *a3) { int v3; // ecx float *v4; // edi int v5; // edx unsigned __int8 v6; // bl float *v7; // esi int v8; // esi unsigned __int8 v9; // bl float *v10; // edx float **v11; // esi int v12; // edi float *v13; // edx unsigned __int8 v14; // bl int v15; // edx unsigned __int8 v16; // bl float *v17; // ecx signed int v18; // [esp+Ch] [ebp-10h] unsigned __int8 *v19; // [esp+10h] [ebp-Ch] float v20; // [esp+14h] [ebp-8h] float v21; // [esp+14h] [ebp-8h] float v22; // [esp+14h] [ebp-8h] float v23; // [esp+14h] [ebp-8h] char v24; // [esp+1Bh] [ebp-1h] float v25; // [esp+28h] [ebp+Ch] float v26; // [esp+28h] [ebp+Ch] float v27; // [esp+28h] [ebp+Ch] float v28; // [esp+28h] [ebp+Ch] v3 = this[11]; *a2 = 3.4028235e38; v4 = a3; *a3 = -3.4028235e38; v24 = 0; if ( !v3 ) goto LABEL_35; v5 = *(_DWORD *)(v3 + 24); v6 = *(_BYTE *)(v3 + 36); v7 = *(float **)(v3 + 28); if ( v5 ) { v20 = *v7; if ( *a2 > (double)v20 ) *a2 = v20; v21 = *(float *)((char *)v7 + v6 * (v5 - 1)); if ( *a3 < (double)v21 ) *a3 = v21; v24 = 1; } if ( !v3 ) goto LABEL_35; v8 = *(_DWORD *)(v3 + 8); v9 = *(_BYTE *)(v3 + 20); v10 = *(float **)(v3 + 12); if ( v8 ) { if ( *(_DWORD *)(v3 + 16) == 4 ) { v19 = (unsigned __int8 *)(v10 + 11); v11 = (float **)(v10 + 12); v18 = 3; do { v12 = (int)*(v11 - 7); if ( v12 ) { v13 = *v11; v14 = *v19; v22 = **v11; if ( *a2 > (double)v22 ) *a2 = v22; v23 = *(float *)((char *)v13 + v14 * (v12 - 1)); if ( *a3 < (double)v23 ) *a3 = v23; v24 = 1; } ++v19; ++v11; --v18; } while ( v18 ); v4 = a3; } else { v25 = *v10; if ( *a2 > (double)v25 ) *a2 = v25; v26 = *(float *)((char *)v10 + v9 * (v8 - 1)); if ( *v4 < (double)v26 ) *v4 = v26; v24 = 1; } } if ( v3 && (v15 = *(_DWORD *)(v3 + 40), v16 = *(_BYTE *)(v3 + 52), v17 = *(float **)(v3 + 44), v15) ) { v27 = *v17; if ( *a2 > (double)v27 ) *a2 = v27; v28 = *(float *)((char *)v17 + v16 * (v15 - 1)); if ( *v4 < (double)v28 ) *v4 = v28; } else { LABEL_35: if ( !v24 ) { *a2 = 0.0; *v4 = 0.0; } } } //----- (00819C50) -------------------------------------------------------- _DWORD *__thiscall sub_819C50(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi _DWORD *result; // eax _DWORD *v5; // ecx _DWORD *v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = (_DWORD *)sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[11]; v6 = result; if ( v5 ) { sub_8246F0(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = v6[11]; v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } v6[11] = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } v6[12] = 0; v6[13] = 0; v6[14] = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (00819D10) -------------------------------------------------------- char __thiscall sub_819D10(int this, float a2, int a3, int a4) { float *v4; // ebx double v5; // st7 double v6; // st7 int v8; // eax int v9; // esi char v10; // cl int v11; // edi int v12; // eax float *v13; // eax int v14; // eax int v15; // esi char v16; // cl int v17; // edi int v18; // eax float v19; // ST04_4 float *v20; // eax int v21; // eax int v22; // esi char v23; // cl int v24; // edi int v25; // eax float v26; // ST04_4 double v27; // st6 int v28; // [esp+24h] [ebp-14h] int v29; // [esp+28h] [ebp-10h] char v30[4]; // [esp+34h] [ebp-4h] float v31; // [esp+40h] [ebp+8h] float v32; // [esp+40h] [ebp+8h] v4 = (float *)this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { qmemcpy((void *)a4, (const void *)(this + 12), 0x20u); v31 = -3.4028235e38; v6 = v31; if ( v31 != *(float *)(this + 40) || v6 != *(float *)(this + 28) ) return 1; if ( *(float *)(this + 12) == v6 ) return 0; } else { v8 = *(_DWORD *)(this + 44); if ( v8 ) { v9 = *(_DWORD *)(v8 + 24); v10 = *(_BYTE *)(v8 + 36); v11 = *(_DWORD *)(v8 + 32); v12 = *(_DWORD *)(v8 + 28); v30[0] = v10; if ( v9 ) { v13 = (float *)sub_804620((int)&v29, a2, v12, v11, v9, (int)(v4 + 12), v30[0]); v5 = a2; v4[3] = *v13; v4[4] = v13[1]; v4[5] = v13[2]; } } v14 = *((_DWORD *)v4 + 11); if ( v14 ) { v15 = *(_DWORD *)(v14 + 8); v16 = *(_BYTE *)(v14 + 20); v17 = *(_DWORD *)(v14 + 16); v18 = *(_DWORD *)(v14 + 12); v30[0] = v16; if ( v15 ) { v19 = v5; v20 = (float *)sub_8057E0((int)&v28, v19, v18, v17, v15, (int)(v4 + 13), v30[0]); v5 = a2; v4[6] = *v20; v4[7] = v20[1]; v4[8] = v20[2]; v4[9] = v20[3]; } } v21 = *((_DWORD *)v4 + 11); if ( v21 ) { v22 = *(_DWORD *)(v21 + 40); v23 = *(_BYTE *)(v21 + 52); v24 = *(_DWORD *)(v21 + 48); v25 = *(_DWORD *)(v21 + 44); v30[0] = v23; if ( v22 ) { v26 = v5; v4[10] = sub_803DC0(v26, v25, v24, v22, (int)(v4 + 14), v30[0]); v5 = a2; } } qmemcpy((void *)a4, v4 + 3, 0x20u); v32 = -3.4028235e38; v27 = v32; if ( v32 == v4[10] && v27 == v4[7] && v4[3] == v27 ) return 0; v4[2] = v5; } return 1; } //----- (00819ED0) -------------------------------------------------------- void __thiscall sub_819ED0(_DWORD *this) { int v1; // ebx int v2; // esi int v3; // eax int *v4; // edi int v5; // ecx int v6; // edx int v7; // eax unsigned int v8; // ebx float v9; // edx float v10; // eax float v11; // ecx int v12; // ecx int v13; // eax int v14; // esi int *v15; // edx int v16; // ecx int v17; // eax int v18; // ecx unsigned int v19; // esi int v20; // eax int v21; // edi unsigned int v22; // edi char v23; // bl unsigned int v24; // edx double v25; // st7 int v26; // eax void (__thiscall ***v27)(_DWORD, signed int); // esi bool v28; // zf float v29; // [esp+8h] [ebp-3Ch] float v30; // [esp+Ch] [ebp-38h] float v31; // [esp+10h] [ebp-34h] float v32; // [esp+14h] [ebp-30h] float v33; // [esp+18h] [ebp-2Ch] float v34; // [esp+1Ch] [ebp-28h] float v35; // [esp+20h] [ebp-24h] float v36; // [esp+24h] [ebp-20h] float v37; // [esp+28h] [ebp-1Ch] float v38; // [esp+2Ch] [ebp-18h] float v39; // [esp+30h] [ebp-14h] float v40; // [esp+34h] [ebp-10h] float v41; // [esp+38h] [ebp-Ch] _DWORD *v42; // [esp+3Ch] [ebp-8h] char v43; // [esp+43h] [ebp-1h] v1 = (int)this; v2 = this[11]; v42 = this; if ( !v2 ) return; v36 = -3.4028235e38; v29 = *(float *)&dword_ABCEB0; v32 = *(float *)&dword_BA44A0; v30 = *(float *)&dword_ABCEB4; v35 = *(float *)&dword_BA44AC; v3 = *(_DWORD *)(v2 + 24); v31 = *(float *)&dword_ABCEB8; v4 = *(int **)(v2 + 28); v33 = *(float *)&dword_BA44A4; v5 = *(_DWORD *)(v2 + 32); v34 = *(float *)&dword_BA44A8; if ( v3 ) { v38 = *((float *)v4 + 1); v39 = *((float *)v4 + 2); v40 = *((float *)v4 + 3); if ( v3 != 1 ) { if ( v5 != 1 && v5 != 5 ) { LABEL_14: if ( -3.4028235e38 == *(float *)(v1 + 12) ) goto LABEL_17; v9 = *(float *)(v1 + 12); v10 = *(float *)(v1 + 16); v11 = *(float *)(v1 + 20); goto LABEL_16; } v43 = 1; v8 = 1; while ( v8 < *(_DWORD *)(v2 + 24) ) { if ( (unsigned __int8)sub_85ECE0((float *)((char *)v4 + v8 * *(unsigned __int8 *)(v2 + 36) + 4), &v38) ) v43 = 0; ++v8; if ( !v43 ) goto LABEL_13; } if ( !v43 ) { LABEL_13: v1 = (int)v42; goto LABEL_14; } v1 = (int)v42; } sub_824630((_DWORD *)v2, 0, 0, 0); v9 = v38; v10 = v39; v11 = v40; LABEL_16: v31 = v11; v30 = v10; v29 = v9; goto LABEL_17; } sub_824630((_DWORD *)v2, 0, 0, 0); if ( -3.4028235e38 != *(float *)(v1 + 12) ) { v6 = *(_DWORD *)(v1 + 16); v7 = *(_DWORD *)(v1 + 20); v29 = *(float *)(v1 + 12); v30 = *(float *)&v6; v31 = *(float *)&v7; } LABEL_17: v12 = *(_DWORD *)(v1 + 44); v13 = *(_DWORD *)(v12 + 8); v14 = *(_DWORD *)(v12 + 16); v15 = *(int **)(v12 + 12); if ( v13 ) { v37 = *((float *)v15 + 1); v38 = *((float *)v15 + 2); v39 = *((float *)v15 + 3); v40 = *((float *)v15 + 4); if ( v13 == 1 && v14 != 4 ) goto LABEL_68; if ( v14 == 1 || v14 == 5 ) { v43 = 1; v22 = 1; while ( v22 < *(_DWORD *)(v12 + 8) ) { if ( v37 != *(float *)((char *)v15 + v22 * *(unsigned __int8 *)(v12 + 20) + 4) || v38 != *(float *)((char *)v15 + v22 * *(unsigned __int8 *)(v12 + 20) + 8) || v39 != *(float *)((char *)v15 + v22 * *(unsigned __int8 *)(v12 + 20) + 12) || v40 != *(float *)((char *)v15 + v22 * *(unsigned __int8 *)(v12 + 20) + 16) ) { v43 = 0; } ++v22; if ( !v43 ) goto LABEL_19; } if ( v43 ) { LABEL_68: sub_8245C0(v12, 0, 0, 0); v32 = v37; v33 = v38; v34 = v39; v35 = v40; goto LABEL_21; } } } else { sub_8245C0(v12, 0, 0, 0); } LABEL_19: if ( -3.4028235e38 != *(float *)(v1 + 28) ) { v16 = *(_DWORD *)(v1 + 32); v17 = *(_DWORD *)(v1 + 28); v32 = *(float *)(v1 + 24); v35 = *(float *)(v1 + 36); v34 = *(float *)&v16; v33 = *(float *)&v17; } LABEL_21: v18 = *(_DWORD *)(v1 + 44); v19 = *(_DWORD *)(v18 + 40); v20 = *(_DWORD *)(v18 + 48); v21 = *(_DWORD *)(v18 + 44); if ( v19 ) { v41 = *(float *)(v21 + 4); if ( v19 == 1 ) { sub_824690((_DWORD *)v18, 0, 0, 0); v25 = v41; goto LABEL_52; } if ( v20 == 1 || v20 == 5 ) { v23 = 1; v24 = 1; while ( v24 < v19 ) { if ( v41 != *(float *)(v24 * *(unsigned __int8 *)(v18 + 52) + v21 + 4) ) v23 = 0; ++v24; if ( !v23 ) { v1 = (int)v42; goto LABEL_50; } } v28 = v23 == 0; v1 = (int)v42; if ( !v28 ) { sub_824690((_DWORD *)v18, 0, 0, 0); v25 = v41; goto LABEL_52; } } } else { sub_824690((_DWORD *)v18, 0, 0, 0); } LABEL_50: if ( -3.4028235e38 == *(float *)(v1 + 40) ) goto LABEL_53; v25 = *(float *)(v1 + 40); LABEL_52: v36 = v25; LABEL_53: v26 = *(_DWORD *)(v1 + 44); if ( !*(_DWORD *)(v26 + 24) && !*(_DWORD *)(v26 + 8) && !*(_DWORD *)(v26 + 40) ) { v27 = *(void (__thiscall ****)(_DWORD, signed int))(v1 + 44); if ( v26 ) { if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v27 ) (**v27)(v27, 1); } *(_DWORD *)(v1 + 44) = 0; } } qmemcpy((void *)(v1 + 12), &v29, 0x20u); } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0081A250) -------------------------------------------------------- int __thiscall sub_81A250(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // ebx int v4; // esi int v5; // eax int result; // eax v3 = this; sub_87F920(this, (int)a2, a3); qmemcpy(a2 + 3, v3 + 3, 0x20u); v4 = a2[11]; if ( v4 != v3[11] ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v3[11]; a2[11] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } a2[12] = v3[12]; a2[13] = v3[13]; result = v3[14]; a2[14] = result; return result; } //----- (0081A2D0) -------------------------------------------------------- float *sub_81A2D0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_8320E0(v0); *(_DWORD *)v1 = &NiTransformInterpolator::`vftable'; *((_DWORD *)v1 + 3) = dword_ABCEB0; *((_DWORD *)v1 + 4) = dword_ABCEB4; *((_DWORD *)v1 + 5) = dword_ABCEB8; *((_DWORD *)v1 + 6) = dword_BA44A0; *((_DWORD *)v1 + 7) = dword_BA44A4; *((_DWORD *)v1 + 8) = dword_BA44A8; *((_DWORD *)v1 + 9) = dword_BA44AC; v1[10] = -3.4028235e38; v1[11] = 0.0; v1[12] = 0.0; v1[13] = 0.0; v1[14] = 0.0; return v1; } // A21404: using guessed type void *NiTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0081A350) -------------------------------------------------------- _DWORD *__thiscall sub_81A350(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 11); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_832100(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081A3A0) -------------------------------------------------------- float *__thiscall sub_81A3A0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x3Cu); v4 = v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiTransformInterpolator::`vftable'; *((_DWORD *)v4 + 3) = dword_ABCEB0; *((_DWORD *)v4 + 4) = dword_ABCEB4; *((_DWORD *)v4 + 5) = dword_ABCEB8; *((_DWORD *)v4 + 6) = dword_BA44A0; *((_DWORD *)v4 + 7) = dword_BA44A4; *((_DWORD *)v4 + 8) = dword_BA44A8; *((_DWORD *)v4 + 9) = dword_BA44AC; v4[10] = -3.4028235e38; v4[11] = 0.0; v4[12] = 0.0; v4[13] = 0.0; v4[14] = 0.0; } else { v4 = 0; } sub_81A250(v2, v4, a2); return v4; } // A21404: using guessed type void *NiTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0081A440) -------------------------------------------------------- unsigned int __thiscall sub_81A440(float *this, int a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx unsigned int result; // eax int v7; // ecx v2 = (char *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA42E8); v5 = *((_DWORD *)v2 + 3); a2 = (int)v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); result = sub_831AA0(v3 + 3, v2); v7 = *((_DWORD *)v3 + 11); if ( v7 ) result = (*(int (__stdcall **)(char *))(*(_DWORD *)v7 + 32))(v2); return result; } //----- (0081A4B0) -------------------------------------------------------- char __thiscall sub_81A4B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // ecx int v5; // esi v2 = this; if ( sub_85BB20(this, (int)a2) ) { v3 = v2[3]; if ( a2[3] == v3 && a2[4] == v2[4] ) { if ( !v3 ) return 1; v4 = v2[2]; v5 = a2[2]; if ( v3 >= 4 ) { while ( *(_DWORD *)v5 == *(_DWORD *)v4 ) { v3 -= 4; v4 += 4; v5 += 4; if ( v3 < 4 ) goto LABEL_8; } return 0; } LABEL_8: if ( !v3 ) return 1; if ( *(_BYTE *)v4 == *(_BYTE *)v5 && (v3 <= 1 || *(_BYTE *)(v4 + 1) == *(_BYTE *)(v5 + 1) && (v3 <= 2 || *(_BYTE *)(v4 + 2) == *(_BYTE *)(v5 + 2))) ) { return 1; } } } return 0; } //----- (0081A530) -------------------------------------------------------- _DWORD *sub_81A530() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x14u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiStringPalette::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; return v1; } // A20934: using guessed type void *NiStringPalette::`vftable'; //----- (0081A570) -------------------------------------------------------- int __thiscall sub_81A570(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, int, int, int *, signed int); // edx int v8; // ST04_4 int v9; // ST00_4 int v10; // edi int (__cdecl *v11)(int, _DWORD *, signed int, int *, signed int); // ecx int v13; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); a2 = v3[4]; v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 8); v13 = 4; v6(v5, &a2, 4, &v13, 1); if ( a2 ) { v7 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v8 = v3[2]; v9 = *(_DWORD *)(v2 + 356); v13 = 1; v7(v9, v8, a2, &v13, 1); } v10 = *(_DWORD *)(v2 + 356); v11 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v10 + 8); v13 = 4; return v11(v10, v3 + 4, 4, &v13, 1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0081A600) -------------------------------------------------------- int __thiscall sub_81A600(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx size_t *v5; // edi int v6; // ST04_4 void *v7; // eax size_t v8; // ST08_4 void *v9; // ST04_4 void (__cdecl *v10)(int, void *, size_t, signed int *, signed int); // eax int v11; // ST00_4 int v12; // ebx int (__cdecl *v13)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = (size_t *)(v3 + 3); v6 = *(_DWORD *)(v2 + 352); a2 = 4; v4(v6, v3 + 3, 4, &a2, 1); if ( v3[3] ) { v7 = operator new(*v5); v8 = *v5; v3[2] = (int)v7; v9 = v7; v10 = *(void (__cdecl **)(int, void *, size_t, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); a2 = 1; v10(v11, v9, v8, &a2, 1); } v12 = *(_DWORD *)(v2 + 352); v13 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v12 + 4); a2 = 4; return v13(v12, v3 + 4, 4, &a2, 1); } //----- (0081A690) -------------------------------------------------------- char __thiscall sub_81A690(_DWORD *this, int a2) { return sub_85B240(this, a2); } //----- (0081A6A0) -------------------------------------------------------- int __thiscall sub_81A6A0(const char **this, _DWORD *a2) { return sub_85B660(this, a2); } //----- (0081A6B0) -------------------------------------------------------- char __thiscall sub_81A6B0(_DWORD *this, int a2) { return sub_85B7C0(this, a2); } //----- (0081A6C0) -------------------------------------------------------- void *sub_81A6C0() { return &unk_BA42F8; } //----- (0081A6D0) -------------------------------------------------------- _DWORD *sub_81A6D0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x1Cu); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *v1 = &NiSequenceStreamHelper::`vftable'; return v1; } // A214AC: using guessed type void *NiSequenceStreamHelper::`vftable'; //----- (0081A700) -------------------------------------------------------- void __thiscall sub_81A700(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[2]); v2[2] = 0; if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; strcpy_s(v4, v3 + 1, Src); } } //----- (0081A750) -------------------------------------------------------- void __thiscall sub_81A750(_DWORD *this, unsigned int a2) { unsigned int v2; // esi _DWORD *v3; // ebx unsigned int v4; // ecx int *v5; // edi int v6; // esi int v7; // eax int v8; // ecx unsigned int *v9; // eax int v10; // esi void *v11; // edx unsigned int v12; // eax int v13; // esi int v14; // eax int v15; // edi _DWORD *v16; // esi int v17; // eax unsigned int i; // edi int v19; // edx int v20; // esi int v21; // ebx void *v22; // ecx int v23; // edi int v24; // ebx int v25; // esi int v26; // [esp+8h] [ebp-4h] unsigned int v27; // [esp+8h] [ebp-4h] _DWORD *v28; // [esp+8h] [ebp-4h] int v29; // [esp+14h] [ebp+8h] int v30; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; if ( a2 != this[2] ) { if ( a2 < this[3] ) { v4 = a2; v26 = a2; do { v5 = (int *)(v3[1] + 4 * v4); if ( *v5 != 0 ) { v6 = *v5; if ( *v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4 = v26; *v5 = 0; } --v3[4]; v2 = a2; } v26 = ++v4; } while ( v4 < v3[3] ); v3[3] = v2; } v7 = v3[1]; v29 = v3[1]; v3[2] = v2; if ( v2 ) { v8 = 4 * v2 | -((unsigned __int64)v2 >> 30 != 0); v9 = (unsigned int *)operator new((v8 + 4) | -__CFADD__(v8, 4)); if ( v9 ) { *v9 = v2; v10 = v2 - 1; v11 = v9 + 1; if ( v10 >= 0 ) memset(v11, 0, 4 * (v10 + 1)); } else { v11 = 0; } v12 = 0; v3[1] = v11; v27 = 0; if ( v3[3] ) { do { v13 = v3[1]; v14 = 4 * v12; v15 = *(_DWORD *)(v13 + v14); v16 = (_DWORD *)(v14 + v13); if ( v15 != *(_DWORD *)(v14 + v29) ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v17 = *(_DWORD *)(4 * v27 + v29); *v16 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } v12 = v27 + 1; v27 = v12; } while ( v12 < v3[3] ); } for ( i = v3[3]; i < v3[2]; ++i ) { v19 = v3[1]; v20 = *(_DWORD *)(v19 + 4 * i); v28 = (_DWORD *)(v19 + 4 * i); if ( v20 ) { if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *v28 = 0; } } v7 = v29; } else { v3[1] = 0; } if ( v7 ) { v21 = *(_DWORD *)(v7 - 4); v22 = (void *)(v7 - 4); v23 = v7 + 4 * v21; v24 = v21 - 1; v30 = v7 - 4; if ( v24 >= 0 ) { do { v25 = *(_DWORD *)(v23 - 4); v23 -= 4; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); } --v24; } while ( v24 >= 0 ); v22 = (void *)v30; } operator delete(v22); } } } //----- (0081A920) -------------------------------------------------------- void __thiscall sub_81A920(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A214EC: using guessed type void *NiTArray>::`vftable'; //----- (0081A980) -------------------------------------------------------- void *__thiscall sub_81A980(void *this, char a2) { void *v2; // esi v2 = this; sub_81A920(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081A9B0) -------------------------------------------------------- _DWORD *__thiscall sub_81A9B0(_DWORD *this, char *Src, int a3, int a4) { _DWORD *v4; // esi unsigned int v5; // kr00_4 char *v6; // eax int v7; // edi v4 = this; sub_85BA50(this); *v4 = &NiSequence::`vftable'; v4[3] = &NiTArray::`vftable'; v4[5] = 0; v4[6] = 0; v4[7] = 0; v4[4] = 0; v4[8] = 1; v4[14] = 1; v4[9] = &NiTArray>::`vftable'; v4[11] = 0; v4[12] = 0; v4[13] = 0; v4[10] = 0; v4[15] = 0; if ( Src ) { v5 = strlen(Src); v6 = (char *)operator new(v5 + 1); v4[2] = v6; strcpy_s(v6, v5 + 1, Src); } else { v4[2] = 0; } sub_8237A0(v4 + 3, a3); v4[8] = a4; sub_81A750(v4 + 9, a3); v4[14] = a4; v7 = v4[15]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[15] = 0; } v4[16] = 0; return v4; } // A20928: using guessed type void *NiTArray::`vftable'; // A214EC: using guessed type void *NiTArray>::`vftable'; // A214F4: using guessed type void *NiSequence::`vftable'; //----- (0081AA90) -------------------------------------------------------- void *sub_81AA90() { return &unk_BA4300; } //----- (0081AAA0) -------------------------------------------------------- LONG __thiscall sub_81AAA0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 unsigned int v3; // ebx _DWORD *v4; // eax int v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // edi void *v7; // eax void **v8; // eax void *v9; // ecx int v10; // eax int v11; // edi void *v12; // ST04_4 int v14; // [esp+Ch] [ebp-8h] _DWORD *v15; // [esp+10h] [ebp-4h] v1 = this; v2 = (void *)this[2]; *this = &NiSequence::`vftable'; operator delete(v2); v3 = 0; if ( v1[12] ) { do { v4 = sub_816340(v1 + 9, &v14, v3); v5 = *v4; v15 = v4; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v15 = 0; } v6 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v6 ) (**v6)(v6, 1); if ( v3 < v1[6] ) { v8 = (void **)(v1[4] + 4 * v3); v9 = *v8; *v8 = 0; if ( v9 ) --v1[7]; v10 = v1[6] - 1; if ( v3 == v10 ) v1[6] = v10; v7 = v9; } else { v7 = 0; } operator delete(v7); ++v3; } while ( v3 < v1[12] ); } v11 = v1[15]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); sub_81A920(v1 + 9); v12 = (void *)v1[4]; v1[3] = &NiTArray::`vftable'; operator delete(v12); return sub_85BA80(v1); } // A20928: using guessed type void *NiTArray::`vftable'; // A214F4: using guessed type void *NiSequence::`vftable'; //----- (0081ABB0) -------------------------------------------------------- unsigned int __thiscall sub_81ABB0(_DWORD *this, char *Src, int a3) { _DWORD *v3; // ebx unsigned int v4; // esi unsigned int v5; // kr00_4 int v6; // edi char *v8; // [esp+Ch] [ebp-4h] v3 = this; v4 = this[6]; v5 = strlen(Src); v8 = (char *)operator new(v5 + 1); strcpy_s(v8, v5 + 1, Src); if ( v4 >= v3[5] ) sub_8237A0(v3 + 3, v4 + v3[8]); sub_823870(v3 + 3, v4, &v8); v6 = a3; Src = (char *)a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); if ( v4 >= v3[11] ) sub_81A750(v3 + 9, v4 + v3[14]); sub_7FFF10(v3 + 9, v4, (LONG *)&Src); if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); return v4; } //----- (0081AC60) -------------------------------------------------------- _DWORD *sub_81AC60() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x44u); if ( v0 ) result = sub_81A9B0(v0, 0, 12, 12); else result = 0; return result; } //----- (0081AC80) -------------------------------------------------------- void __thiscall sub_81AC80(int *this, signed int a2) { void **v2; // ebx int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST00_4 void (__cdecl *v6)(_DWORD *, int *, signed int, signed int *, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST00_4 void (__cdecl *v9)(_DWORD *, unsigned int *, signed int, signed int *, signed int); // eax unsigned int v10; // edi signed int v11; // eax unsigned int v12; // [esp+Ch] [ebp-4h] v2 = (void **)a2; v3 = this; sub_85BC50(this, a2); v3[2] = 0; sub_8769C0(v2, v3 + 2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, signed int *, signed int))v4[1]; a2 = 4; v6(v5, v3 + 16, 4, &a2, 1); sub_876290(v2); v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, unsigned int *, signed int, signed int *, signed int))v7[1]; a2 = 4; v9(v8, &v12, 4, &a2, 1); sub_8237A0(v3 + 3, v12); v10 = 0; if ( v12 ) { do { a2 = 0; sub_8769C0(v2, &a2); if ( v10 < v3[5] ) { if ( v10 < v3[6] ) { v11 = a2; if ( a2 ) { if ( !*(_DWORD *)(v3[4] + 4 * v10) ) ++v3[7]; } else if ( *(_DWORD *)(v3[4] + 4 * v10) ) { --v3[7]; } } else { v3[6] = v10 + 1; v11 = a2; if ( a2 ) ++v3[7]; } *(_DWORD *)(v3[4] + 4 * v10) = v11; } sub_876290(v2); ++v10; } while ( v10 < v12 ); } } //----- (0081AD70) -------------------------------------------------------- void __thiscall sub_81AD70(unsigned int *this, _DWORD *a2) { unsigned int *v2; // esi int v3; // eax unsigned int v4; // edi int v5; // ebx unsigned int v6; // ebx unsigned int v7; // edi int v8; // eax int v9; // esi _DWORD *v10; // [esp+Ch] [ebp-8h] int v11; // [esp+10h] [ebp-4h] v2 = this; nullsub_32(a2); v3 = sub_875AD0(a2); v4 = v2[15]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(unsigned int, signed int))v4)(v4, 1); v2[15] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = v2[6]; v10 = v2 + 9; sub_81A750(v2 + 9, v2[6]); v7 = 0; if ( v6 ) { do { v8 = sub_875AD0(a2); v9 = v8; v11 = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); sub_7FFF10(v10, v7, &v11); if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } ++v7; } while ( v7 < v6 ); } } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0081AE40) -------------------------------------------------------- void *__thiscall sub_81AE40(void *this, char a2) { void *v2; // esi v2 = this; sub_81AAA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081AE70) -------------------------------------------------------- _DWORD *__cdecl sub_81AE70(int a1, int a2, char *Src) { int v4; // eax _DWORD *v5; // edi char *v6; // esi _DWORD *v7; // eax unsigned int v8; // eax int v9; // ebx int v10; // eax char v11; // al int v12; // esi int v13; // ebx int v14; // ebx int v15; // ecx int v16; // edi int v17; // esi int v18; // eax char v19; // al int v20; // eax int v21; // eax char v22; // al int v23; // esi int v24; // edi _DWORD *v25; // [esp+0h] [ebp-8h] _DWORD *v26; // [esp+4h] [ebp-4h] int i; // [esp+10h] [ebp+8h] unsigned int v28; // [esp+10h] [ebp+8h] if ( *(_DWORD *)(a1 + 28) >= 0x4010003u || (unsigned int)a2 >= *(_DWORD *)(a1 + 340) ) return 0; v4 = sub_402BA0((int)&unk_BA42F8, *(_DWORD *)(*(_DWORD *)(a1 + 332) + 4 * a2)); v5 = (_DWORD *)v4; v25 = (_DWORD *)v4; if ( !v4 ) return 0; v6 = Src; if ( !Src ) v6 = *(char **)(v4 + 8); v7 = operator new(0x44u); if ( v7 ) v26 = sub_81A9B0(v7, v6, 12, 12); else v26 = 0; v8 = 0; v26[16] = 0; for ( i = 0; v8 < v5[5]; i = ++v8 ) { v9 = *(_DWORD *)(v5[4] + 4 * v8); if ( v9 ) { v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9); if ( v10 ) { while ( (char *)v10 != dword_BA3BA8 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_16; } v11 = 1; } else { LABEL_16: v11 = 0; } v12 = v11 != 0 ? v9 : 0; if ( v11 != 0 ? v9 : 0 ) { v13 = v26[15]; if ( v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v26[15] = v12; InterlockedIncrement((volatile LONG *)(v12 + 4)); } sub_85B050(v5, i); break; } v8 = i; } } v14 = v5[3]; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); v28 = 0; if ( v5[5] ) { do { v15 = v5[4]; v16 = *(_DWORD *)(v15 + 4 * v28); if ( v16 ) { v18 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v16 + 4))(*(_DWORD *)(v15 + 4 * v28)); if ( v18 ) { while ( (char *)v18 != dword_BA47F0 ) { v18 = *(_DWORD *)(v18 + 4); if ( !v18 ) goto LABEL_37; } v19 = 1; } else { LABEL_37: v19 = 0; } v17 = v19 != 0 ? v16 : 0; } else { v17 = 0; } if ( v14 ) { v21 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 4))(v14); if ( v21 ) { while ( (char *)v21 != dword_BA3BB8 ) { v21 = *(_DWORD *)(v21 + 4); if ( !v21 ) goto LABEL_45; } v22 = 1; } else { LABEL_45: v22 = 0; } v20 = v22 != 0 ? v14 : 0; } else { v20 = 0; } sub_81ABB0(v26, *(char **)(v17 + 12), v20); v23 = *(_DWORD *)(v14 + 52); if ( v23 ) InterlockedIncrement((volatile LONG *)(v23 + 4)); v24 = *(_DWORD *)(v14 + 52); if ( v24 ) { if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); *(_DWORD *)(v14 + 52) = 0; } if ( v14 != v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v14 = v23; if ( !v23 ) goto LABEL_62; InterlockedIncrement((volatile LONG *)(v23 + 4)); } if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); LABEL_62: ++v28; v5 = v25; } while ( v28 < v25[5] ); } sub_85B070(v5); if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); } return v26; } //----- (0081B100) -------------------------------------------------------- int __cdecl sub_81B100(int a1, int a2, int a3, char *Src) { _DWORD *v4; // eax int result; // eax volatile LONG *v6; // esi void **v7; // edi if ( *(_DWORD *)(a2 + 28) >= 0x4010003u ) { if ( (unsigned int)a3 >= *(_DWORD *)(a2 + 340) ) { LABEL_4: result = a1; *(_DWORD *)a1 = 0; return result; } v4 = (_DWORD *)sub_402BA0((int)&unk_BA4300, *(_DWORD *)(*(_DWORD *)(a2 + 332) + 4 * a3)); } else { v4 = sub_81AE70(a2, a3, Src); } if ( !v4 ) goto LABEL_4; v6 = v4 + 1; v7 = (void **)v4; InterlockedIncrement(v4 + 1); if ( Src ) sub_81A700(v7, Src); *(_DWORD *)a1 = v7; InterlockedIncrement(v6); if ( !InterlockedDecrement(v6) ) (*(void (__thiscall **)(void **, signed int))*v7)(v7, 1); return a1; } //----- (0081B1A0) -------------------------------------------------------- int __cdecl sub_81B1A0(int a1, char *a2, int a3, int a4) { char v5[984]; // [esp+10h] [ebp-3DCh] sub_877EC0(v5); if ( sub_875BC0(v5, a2) ) sub_81B100(a1, (int)v5, a3, (char *)a4); else *(_DWORD *)a1 = 0; sub_877120(v5); return a1; } //----- (0081B230) -------------------------------------------------------- void __thiscall sub_81B230(int *this, float a2, float a3) { int *v3; // esi int v4; // [esp+Ch] [ebp-4h] v4 = (int)this; v3 = this; v4 = this[3]; sub_817370(1, this[4], (int)&v4, (int)(this + 2), a2, a3); v3[3] = v4; } //----- (0081B270) -------------------------------------------------------- _DWORD *sub_81B270() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; *v1 = &NiRotData::`vftable'; return v1; } // A21534: using guessed type void *NiRotData::`vftable'; //----- (0081B2B0) -------------------------------------------------------- char *sub_81B2B0() { return dword_BA4308; } //----- (0081B2C0) -------------------------------------------------------- char __thiscall sub_81B2C0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi unsigned __int8 (__cdecl *v8)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v7 = 0; v8 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3FA0[v6]; if ( !v5 ) return 1; while ( v8(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12)) ) { if ( (unsigned int)++v7 >= v3[2] ) return 1; } return 0; } // BA3FA0: using guessed type int dword_BA3FA0[]; //----- (0081B340) -------------------------------------------------------- _DWORD *__thiscall sub_81B340(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 3); *(_DWORD *)this = &NiRotData::`vftable'; if ( v3 ) ((void (__cdecl *)(int))dword_BA3D60[*((_DWORD *)this + 4)])(v3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21534: using guessed type void *NiRotData::`vftable'; // BA3D60: using guessed type int dword_BA3D60[]; //----- (0081B380) -------------------------------------------------------- int __thiscall sub_81B380(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D60[this[4]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3BF4[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 20) = 0; } return result; } // BA3D60: using guessed type int dword_BA3D60[]; //----- (0081B3E0) -------------------------------------------------------- _DWORD **__thiscall sub_81B3E0(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax int v10; // [esp+1Ch] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v10); v6 = (_DWORD **)a2; *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v7 ) (**v7)(v7, 1); v8 = v4[2]; if ( v8 ) { v10 = 0; a2 = 0; sub_817070(2, v4[4], v4[3], v8, a3, a4, (int)&v10, (int)&a2); sub_81B380(*v6, v10, a2, v4[4]); } return v6; } //----- (0081B490) -------------------------------------------------------- int __thiscall sub_81B490(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int v4; // eax int v5; // ST14_4 int (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST14_4 void (__cdecl *v10)(int, int *, signed int, int *, signed int); // eax int v11; // edi signed int v12; // ST10_4 int v13; // ebx int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v15 = 4; result = v6(v5, &a2, 4, &v15, 1); if ( a2 ) { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v8 + 4); v15 = 4; v10(v9, &v14, 4, &v15, 1); v11 = v14; v12 = a2; *((_BYTE *)v3 + 20) = byte_BA3BF4[v14]; v13 = ((int (__cdecl *)(signed int, signed int))dword_BA4270[v11])(v2, v12); ((void (__cdecl *)(int, signed int, _DWORD))dword_BA3C40[v11])(v13, a2, *((unsigned __int8 *)v3 + 20)); result = sub_81B380(v3, v13, a2, v11); } return result; } // BA3C40: using guessed type int dword_BA3C40[]; // BA4270: using guessed type int dword_BA4270[]; //----- (0081B530) -------------------------------------------------------- int __thiscall sub_81B530(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int result; // eax int v7; // eax int v8; // ST0C_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3F10[v3[4]])(v2, v3[3], v3[2]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3F10: using guessed type int dword_BA3F10[]; //----- (0081B5B0) -------------------------------------------------------- unsigned int __thiscall sub_81B5B0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4308); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0081B630) -------------------------------------------------------- int __thiscall sub_81B630(int *this, void **a2) { return sub_832330(this, a2); } //----- (0081B640) -------------------------------------------------------- int __thiscall sub_81B640(_DWORD *this, _DWORD *a2) { return sub_832430(this, a2); } //----- (0081B650) -------------------------------------------------------- char __thiscall sub_81B650(_DWORD *this, int a2) { return sub_832490(this, a2); } //----- (0081B660) -------------------------------------------------------- int __thiscall sub_81B660(_DWORD *this, signed int a2) { return sub_8324C0(this, a2); } //----- (0081B670) -------------------------------------------------------- char __thiscall sub_81B670(float *this, int a2) { return sub_8324F0(this, a2); } //----- (0081B680) -------------------------------------------------------- char *sub_81B680() { return dword_BA44E8; } //----- (0081B690) -------------------------------------------------------- void *__thiscall sub_81B690(void *this, char a2) { void *v2; // esi v2 = this; sub_832350(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081B6C0) -------------------------------------------------------- char *sub_81B6C0() { return dword_BA4310; } //----- (0081B6D0) -------------------------------------------------------- void __thiscall sub_81B6D0(int this, float a2) { int v2; // ebx int v3; // eax double v4; // st7 int v5; // esi float v6; // ST14_4 char v7[4]; // [esp+24h] [ebp-80h] int v8; // [esp+28h] [ebp-7Ch] int v9; // [esp+2Ch] [ebp-78h] float v10; // [esp+30h] [ebp-74h] char v11; // [esp+34h] [ebp-70h] char v12; // [esp+58h] [ebp-4Ch] char v13; // [esp+7Ch] [ebp-28h] v2 = this; if ( *(_DWORD *)(this + 48) ) { if ( !sub_80FFE0((float *)this, a2) ) { v3 = sub_8323B0((_DWORD *)v2, &v8, &v9, v7); v4 = sub_803DC0(*(float *)(v2 + 40), v3, v9, v8, v2 + 60, v7[0]); v5 = *(_DWORD *)(v2 + 48); v10 = v4; v6 = -v10; qmemcpy(&v13, (const void *)(v5 + 52), 0x24u); sub_85D810((float *)&v12, v6); qmemcpy(&v13, sub_85D940((float *)&v13, (float *)&v11, (float *)&v12), 0x24u); qmemcpy((void *)(*(_DWORD *)(v2 + 48) + 52), &v13, 0x24u); } } } //----- (0081B7A0) -------------------------------------------------------- float *__thiscall sub_81B7A0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x44u); v4 = v3; if ( v3 ) { sub_86C310(v3); v4[16] = 0.0; v4[15] = 0.0; *(_DWORD *)v4 = &NiRollController::`vftable'; sub_832530(v2, (int)v4, a2); result = v4; } else { sub_832530(v2, 0, a2); result = 0; } return result; } // A215DC: using guessed type void *NiRollController::`vftable'; //----- (0081B840) -------------------------------------------------------- unsigned int __thiscall sub_81B840(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4310); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0081B890) -------------------------------------------------------- signed int __stdcall sub_81B890(int a1) { return 2; } //----- (0081B8A0) -------------------------------------------------------- int __stdcall sub_81B8A0(int a1) { return sub_8790E0(a1); } //----- (0081B8B0) -------------------------------------------------------- int __thiscall sub_81B8B0(_DWORD *this, int a2) { int result; // eax result = this[7]; if ( result ) result = *(_DWORD *)(result + 8); return result; } //----- (0081B8C0) -------------------------------------------------------- char __thiscall sub_81B8C0(_DWORD *this, int a2) { int v2; // eax char result; // al v2 = this[7]; if ( v2 ) result = *(_BYTE *)(v2 + 20); else result = 0; return result; } //----- (0081B8E0) -------------------------------------------------------- bool __thiscall sub_81B8E0(int this, int a2) { return !*(_DWORD *)(this + 28) && (*(float *)&dword_BA44B8 != *(float *)(this + 12) || *(float *)&dword_BA44BC != *(float *)(this + 16) || *(float *)&dword_BA44C0 != *(float *)(this + 20) || *(float *)&dword_BA44C4 != *(float *)(this + 24)); } // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081B940) -------------------------------------------------------- int __thiscall sub_81B940(_DWORD *this) { _DWORD *v1; // ebx int result; // eax unsigned int v3; // ecx unsigned __int8 v4; // dl _DWORD *v5; // esi int v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // eax int v9; // edx unsigned int v10; // edi int v11; // esi int v12; // edx int v13; // ecx int v14; // [esp+4h] [ebp-18h] int v15; // [esp+8h] [ebp-14h] int v16; // [esp+Ch] [ebp-10h] int v17; // [esp+10h] [ebp-Ch] unsigned int v18; // [esp+14h] [ebp-8h] unsigned __int8 v19; // [esp+1Ah] [ebp-2h] char v20; // [esp+1Bh] [ebp-1h] v1 = this; result = this[7]; if ( result ) { v3 = *(_DWORD *)(result + 8); v4 = *(_BYTE *)(result + 20); v5 = *(_DWORD **)(result + 12); v6 = *(_DWORD *)(result + 16); v18 = v3; v19 = v4; if ( v3 ) { v8 = v5[2]; v14 = v5[1]; v9 = v5[3]; v15 = v8; result = v5[4]; v16 = v9; v17 = result; if ( v3 == 1 && v6 != 4 ) goto LABEL_29; if ( v6 == 1 || v6 == 5 ) { v20 = 1; v10 = 1; while ( v10 < v3 ) { result = sub_819510((float *)((char *)v5 + v10 * v19 + 4), (float *)&v14); if ( (_BYTE)result ) v20 = 0; ++v10; if ( !v20 ) return result; v3 = v18; } if ( v20 ) { LABEL_29: v11 = v1[7]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[7] = 0; } v12 = v15; result = v16; v1[3] = v14; v13 = v17; v1[4] = v12; v1[5] = result; v1[6] = v13; } } } else { v7 = (void (__thiscall ***)(_DWORD, signed int))result; if ( result ) { if ( !InterlockedDecrement((volatile LONG *)(result + 4)) ) { if ( v7 ) (**v7)(v7, 1); } v1[7] = 0; } v1[3] = dword_BA44B8; v1[4] = dword_BA44BC; result = dword_BA44C0; v1[5] = dword_BA44C0; v1[6] = dword_BA44C4; } } return result; } // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081BA80) -------------------------------------------------------- void __thiscall sub_81BA80(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[7]; if ( v3 ) sub_81B230(v3, a2, a3); } //----- (0081BAB0) -------------------------------------------------------- int __thiscall sub_81BAB0(int *this, _DWORD *a2) { int *v2; // esi int result; // eax int v4; // edi int v5; // ebx v2 = this; sub_832110(this, (signed int)a2); sub_8752B0((char *)v2 + 12, (signed int)a2); result = sub_876300(a2); v4 = v2[7]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[7] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (0081BB20) -------------------------------------------------------- char __thiscall sub_81BB20(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_8A3660(this, a2); if ( result ) { v4 = v2[7]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0081BB60) -------------------------------------------------------- int __thiscall sub_81BB60(float *this, int a2) { float *v2; // esi v2 = this; sub_8790E0(a2); sub_875330(v2 + 3, a2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *((_DWORD *)v2 + 7)); } //----- (0081BB90) -------------------------------------------------------- char __thiscall sub_81BB90(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || *(float *)(a2 + 12) != v2[3] || *(float *)(a2 + 16) != v2[4] || *(float *)(a2 + 20) != v2[5] || *(float *)(a2 + 24) != v2[6] ) { return 0; } v4 = *((_DWORD *)v2 + 7); if ( v4 ) { if ( !*(_DWORD *)(a2 + 28) ) return 0; if ( v4 ) goto LABEL_16; } if ( *(_DWORD *)(a2 + 28) ) return 0; if ( v4 ) { LABEL_16: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 28)) ) return 1; return 0; } return 1; } //----- (0081BC20) -------------------------------------------------------- char *sub_81BC20() { return dword_BA4318; } //----- (0081BC30) -------------------------------------------------------- void __thiscall sub_81BC30(_DWORD *this, float *a2, float *a3) { int v3; // eax int v4; // ecx int v5; // esi unsigned __int8 v6; // dl float *v7; // eax unsigned __int8 *v8; // esi float **v9; // ecx signed int v10; // [esp+4h] [ebp-10h] float v11; // [esp+8h] [ebp-Ch] float v12; // [esp+Ch] [ebp-8h] float v13; // [esp+10h] [ebp-4h] float v14; // [esp+10h] [ebp-4h] v3 = this[7]; if ( v3 && (v4 = *(_DWORD *)(v3 + 8), v5 = *(_DWORD *)(v3 + 16), v6 = *(_BYTE *)(v3 + 20), v7 = *(float **)(v3 + 12), v4) ) { if ( v5 == 4 ) { v12 = 3.4028235e38; v8 = (unsigned __int8 *)(v7 + 11); v9 = (float **)(v7 + 12); v11 = -3.4028235e38; v10 = 3; do { v13 = **v9; if ( v12 > (double)v13 ) v12 = v13; v14 = *(float *)((char *)*v9 + *v8 * ((_DWORD)*(v9 - 7) - 1)); if ( v11 < (double)v14 ) v11 = v14; ++v9; ++v8; --v10; } while ( v10 ); *a2 = v12; *a3 = v11; } else { *a2 = *v7; *a3 = *(float *)((char *)v7 + v6 * (v4 - 1)); } } else { *a2 = 0.0; *a3 = 0.0; } } //----- (0081BD20) -------------------------------------------------------- int __thiscall sub_81BD20(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[7]; v6 = result; if ( v5 ) { sub_81B3E0(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 28); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 28) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 32) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (0081BDE0) -------------------------------------------------------- char __thiscall sub_81BDE0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 int v7; // eax int v8; // ecx char v9; // dl int v10; // edi int v11; // eax _DWORD *v12; // eax int v13; // [esp+20h] [ebp-14h] char v14[4]; // [esp+30h] [ebp-4h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 20); *(_DWORD *)(a4 + 12) = *(_DWORD *)(this + 24); if ( *(float *)&dword_BA44B8 == *(float *)(this + 12) && *(float *)&dword_BA44BC == *(float *)(this + 16) && *(float *)&dword_BA44C0 == *(float *)(this + 20) && *(float *)&dword_BA44C4 == *(float *)(this + 24) ) { return 0; } } else { v7 = *(_DWORD *)(this + 28); if ( v7 ) { v8 = *(_DWORD *)(v7 + 8); v9 = *(_BYTE *)(v7 + 20); v10 = *(_DWORD *)(v7 + 16); v11 = *(_DWORD *)(v7 + 12); v14[0] = v9; if ( v8 ) { v12 = (_DWORD *)sub_8057E0((int)&v13, a2, v11, v10, v8, v4 + 32, v14[0]); v5 = a2; *(_DWORD *)(v4 + 12) = *v12; *(_DWORD *)(v4 + 16) = v12[1]; *(_DWORD *)(v4 + 20) = v12[2]; *(_DWORD *)(v4 + 24) = v12[3]; } } if ( *(float *)&dword_BA44B8 == *(float *)(v4 + 12) && *(float *)&dword_BA44BC == *(float *)(v4 + 16) && *(float *)&dword_BA44C0 == *(float *)(v4 + 20) && *(float *)&dword_BA44C4 == *(float *)(v4 + 24) ) { return 0; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 20); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 24); *(float *)(v4 + 8) = v5; } return 1; } // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081BF50) -------------------------------------------------------- int __thiscall sub_81BF50(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi int result; // eax int v5; // ebx v3 = this; sub_87F920(this, (int)a2, a3); a2[3] = v3[3]; a2[4] = v3[4]; result = v3[5]; a2[5] = result; a2[6] = v3[6]; v5 = a2[7]; if ( v5 == v3[7] ) { a2[8] = v3[8]; } else { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v3[7]; a2[7] = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = v3[8]; a2[8] = result; } else { a2[8] = v3[8]; } } return result; } //----- (0081BFF0) -------------------------------------------------------- float *sub_81BFF0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_8320E0(v0); *(_DWORD *)v1 = &NiQuaternionInterpolator::`vftable'; *((_DWORD *)v1 + 3) = dword_BA44B8; *((_DWORD *)v1 + 4) = dword_BA44BC; *((_DWORD *)v1 + 5) = dword_BA44C0; *((_DWORD *)v1 + 6) = dword_BA44C4; v1[7] = 0.0; v1[8] = 0.0; return v1; } // A21644: using guessed type void *NiQuaternionInterpolator::`vftable'; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081C050) -------------------------------------------------------- float *__thiscall sub_81C050(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x24u); v4 = v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiQuaternionInterpolator::`vftable'; *((_DWORD *)v4 + 3) = dword_BA44B8; *((_DWORD *)v4 + 4) = dword_BA44BC; *((_DWORD *)v4 + 5) = dword_BA44C0; *((_DWORD *)v4 + 6) = dword_BA44C4; v4[7] = 0.0; v4[8] = 0.0; sub_81BF50(v2, v4, a2); result = v4; } else { sub_81BF50(v2, 0, a2); result = 0; } return result; } // A21644: using guessed type void *NiQuaternionInterpolator::`vftable'; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081C0D0) -------------------------------------------------------- unsigned int __thiscall sub_81C0D0(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4318); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_875200((float *)v3 + 3, (int)"m_kQuaternionValue"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_spQuaternionData", *((_DWORD *)v3 + 7)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0081C180) -------------------------------------------------------- int __stdcall sub_81C180(int a1) { return nullsub_32(a1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0081C190) -------------------------------------------------------- int __thiscall sub_81C190(void *this, int a2) { return sub_85BA30(this, a2); } //----- (0081C1A0) -------------------------------------------------------- LONG __thiscall sub_81C1A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[3]; *this = &NiPosData::`vftable'; if ( v2 ) ((void (__cdecl *)(int))dword_BA3D48[this[4]])(v2); return sub_85BA80(v1); } // A2121C: using guessed type void *NiPosData::`vftable'; // BA3D48: using guessed type int dword_BA3D48[]; //----- (0081C1D0) -------------------------------------------------------- int __thiscall sub_81C1D0(int this, int a2, int a3, int a4) { int result; // eax char v5; // dl result = 0; if ( a2 && a3 ) { result = a4; v5 = byte_BA3BEE[a4]; *(_DWORD *)(this + 12) = a2; *(_DWORD *)(this + 8) = a3; *(_BYTE *)(this + 20) = v5; *(_DWORD *)(this + 16) = a4; } else { *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_BYTE *)(this + 20) = 0; *(_DWORD *)(this + 16) = 0; } return result; } //----- (0081C220) -------------------------------------------------------- _DWORD *sub_81C220() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; *v1 = &NiPosData::`vftable'; return v1; } // A2121C: using guessed type void *NiPosData::`vftable'; //----- (0081C260) -------------------------------------------------------- char __thiscall sub_81C260(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi unsigned __int8 (__cdecl *v8)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v7 = 0; v8 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F88[v6]; if ( !v5 ) return 1; while ( v8(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12)) ) { if ( (unsigned int)++v7 >= v3[2] ) return 1; } return 0; } // BA3F88: using guessed type int dword_BA3F88[]; //----- (0081C2E0) -------------------------------------------------------- int __thiscall sub_81C2E0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D48[this[4]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3BEE[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 20) = 0; } return result; } // BA3D48: using guessed type int dword_BA3D48[]; //----- (0081C340) -------------------------------------------------------- _DWORD **__thiscall sub_81C340(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax int v10; // [esp+1Ch] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v10); v6 = (_DWORD **)a2; *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v7 ) (**v7)(v7, 1); v8 = v4[2]; if ( v8 ) { v10 = 0; a2 = 0; sub_817070(1, v4[4], v4[3], v8, a3, a4, (int)&v10, (int)&a2); sub_81C2E0(*v6, v10, a2, v4[4]); } return v6; } //----- (0081C3F0) -------------------------------------------------------- int __thiscall sub_81C3F0(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int v4; // eax int v5; // ST14_4 int (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST14_4 void (__cdecl *v10)(int, int *, signed int, int *, signed int); // eax int v11; // edi signed int v12; // ST10_4 int v13; // ebx int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v15 = 4; result = v6(v5, &a2, 4, &v15, 1); if ( a2 ) { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v8 + 4); v15 = 4; v10(v9, &v14, 4, &v15, 1); v11 = v14; v12 = a2; *((_BYTE *)v3 + 20) = byte_BA3BEE[v14]; v13 = ((int (__cdecl *)(signed int, signed int))dword_BA4258[v11])(v2, v12); ((void (__cdecl *)(int, signed int, _DWORD))dword_BA3C28[v11])(v13, a2, *((unsigned __int8 *)v3 + 20)); result = sub_81C2E0(v3, v13, a2, v11); } return result; } // BA3C28: using guessed type int dword_BA3C28[]; // BA4258: using guessed type int dword_BA4258[]; //----- (0081C490) -------------------------------------------------------- int __thiscall sub_81C490(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int result; // eax int v7; // eax int v8; // ST0C_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EF8[v3[4]])(v2, v3[3], v3[2]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3EF8: using guessed type int dword_BA3EF8[]; //----- (0081C510) -------------------------------------------------------- unsigned int __thiscall sub_81C510(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4320); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0081C590) -------------------------------------------------------- int __thiscall sub_81C590(_DWORD *this, int a2) { int result; // eax result = this[6]; if ( result ) result = *(_DWORD *)(result + 8); return result; } //----- (0081C5A0) -------------------------------------------------------- int __thiscall sub_81C5A0(_DWORD *this, int a2) { int result; // eax result = this[6]; if ( result ) result = *(_DWORD *)(result + 16); return result; } //----- (0081C5B0) -------------------------------------------------------- int __thiscall sub_81C5B0(_DWORD *this, int a2) { int result; // eax result = this[6]; if ( result ) result = *(_DWORD *)(result + 12); return result; } //----- (0081C5C0) -------------------------------------------------------- char __thiscall sub_81C5C0(_DWORD *this, int a2) { int v2; // eax char result; // al v2 = this[6]; if ( v2 ) result = *(_BYTE *)(v2 + 20); else result = 0; return result; } //----- (0081C5E0) -------------------------------------------------------- bool __thiscall sub_81C5E0(int this, int a2) { return !*(_DWORD *)(this + 24) && (*(float *)&dword_ABCEBC != *(float *)(this + 12) || *(float *)&dword_ABCEC0 != *(float *)(this + 16) || *(float *)&dword_ABCEC4 != *(float *)(this + 20)); } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081C630) -------------------------------------------------------- int __thiscall sub_81C630(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // edi int v5; // esi int result; // eax v4 = this; v5 = this[6]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4[6] = 0; } result = a4; v4[3] = a2; v4[4] = a3; v4[5] = a4; return result; } //----- (0081C680) -------------------------------------------------------- void __thiscall sub_81C680(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[6]; if ( v3 ) sub_81B230(v3, a2, a3); } //----- (0081C6B0) -------------------------------------------------------- int __thiscall sub_81C6B0(int *this, _DWORD *a2) { int *v2; // esi int result; // eax int v4; // edi int v5; // ebx v2 = this; sub_832110(this, (signed int)a2); sub_8608D0((char *)v2 + 12, (signed int)a2); result = sub_876300(a2); v4 = v2[6]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[6] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (0081C720) -------------------------------------------------------- char __thiscall sub_81C720(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_8A3660(this, a2); if ( result ) { v4 = v2[6]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0081C760) -------------------------------------------------------- int __thiscall sub_81C760(char *this, int a2) { char *v2; // esi v2 = this; sub_8790E0(a2); sub_860940(v2 + 12, a2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *((_DWORD *)v2 + 6)); } //----- (0081C790) -------------------------------------------------------- float *__thiscall sub_81C790(float *this, int a2) { float *v2; // esi float *result; // eax v2 = this; sub_8320E0(this); *(_DWORD *)v2 = &NiPoint3Interpolator::`vftable'; *((_DWORD *)v2 + 3) = dword_ABCEBC; *((_DWORD *)v2 + 4) = dword_ABCEC0; *((_DWORD *)v2 + 5) = dword_ABCEC4; *((_DWORD *)v2 + 6) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = v2; v2[7] = 0.0; return result; } // A21714: using guessed type void *NiPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081C7E0) -------------------------------------------------------- char *sub_81C7E0() { return dword_BA4328; } //----- (0081C7F0) -------------------------------------------------------- float *__thiscall sub_81C7F0(float *this, int a2, int a3, int a4) { float *v4; // esi v4 = this; sub_8320E0(this); *((_DWORD *)v4 + 3) = a2; *((_DWORD *)v4 + 4) = a3; *(_DWORD *)v4 = &NiPoint3Interpolator::`vftable'; *((_DWORD *)v4 + 5) = a4; v4[6] = 0.0; v4[7] = 0.0; return v4; } // A21714: using guessed type void *NiPoint3Interpolator::`vftable'; //----- (0081C830) -------------------------------------------------------- int __thiscall sub_81C830(_DWORD *this) { _DWORD *v1; // ebx int result; // eax unsigned int v3; // ecx unsigned __int8 v4; // dl int v5; // esi _DWORD *v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // edx char v9; // bl unsigned int v10; // esi int v11; // esi int v12; // ecx int v13; // edx int v14; // [esp+4h] [ebp-18h] int v15; // [esp+8h] [ebp-14h] int v16; // [esp+Ch] [ebp-10h] _DWORD *v17; // [esp+10h] [ebp-Ch] unsigned int v18; // [esp+14h] [ebp-8h] unsigned __int8 v19; // [esp+1Bh] [ebp-1h] v1 = this; result = this[6]; v17 = this; if ( !result ) return result; v3 = *(_DWORD *)(result + 8); v4 = *(_BYTE *)(result + 20); v5 = *(_DWORD *)(result + 16); v6 = *(_DWORD **)(result + 12); v18 = v3; v19 = v4; if ( !v3 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))result; if ( result ) { if ( !InterlockedDecrement((volatile LONG *)(result + 4)) ) { if ( v7 ) (**v7)(v7, 1); } v1[6] = 0; } v1[3] = dword_ABCEBC; v1[4] = dword_ABCEC0; result = dword_ABCEC4; v1[5] = dword_ABCEC4; return result; } result = v6[2]; v14 = v6[1]; v8 = v6[3]; v15 = result; v16 = v8; if ( v3 == 1 ) goto LABEL_21; if ( v5 == 1 || v5 == 5 ) { v9 = 1; v10 = 1; while ( v10 < v3 ) { result = sub_85ECE0((float *)((char *)v6 + v10 * v19 + 4), (float *)&v14); if ( (_BYTE)result ) v9 = 0; ++v10; if ( !v9 ) return result; v3 = v18; } if ( v9 ) { v1 = v17; LABEL_21: v11 = v1[6]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[6] = 0; } result = v14; v12 = v15; v13 = v16; v1[3] = v14; v1[4] = v12; v1[5] = v13; return result; } } return result; } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081C950) -------------------------------------------------------- int __thiscall sub_81C950(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[6]; v6 = result; if ( v5 ) { sub_81C340(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 24); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 24) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 28) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (0081CA10) -------------------------------------------------------- char __thiscall sub_81CA10(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 int v7; // eax int v8; // ecx char v9; // dl int v10; // edi int v11; // eax _DWORD *v12; // eax int v13; // [esp+20h] [ebp-10h] char v14[4]; // [esp+2Ch] [ebp-4h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 20); if ( *(float *)&dword_ABCEBC == *(float *)(this + 12) && *(float *)&dword_ABCEC0 == *(float *)(this + 16) && *(float *)&dword_ABCEC4 == *(float *)(this + 20) ) { return 0; } } else { v7 = *(_DWORD *)(this + 24); if ( v7 ) { v8 = *(_DWORD *)(v7 + 8); v9 = *(_BYTE *)(v7 + 20); v10 = *(_DWORD *)(v7 + 16); v11 = *(_DWORD *)(v7 + 12); v14[0] = v9; if ( v8 ) { v12 = (_DWORD *)sub_804620((int)&v13, a2, v11, v10, v8, v4 + 28, v14[0]); v5 = a2; *(_DWORD *)(v4 + 12) = *v12; *(_DWORD *)(v4 + 16) = v12[1]; *(_DWORD *)(v4 + 20) = v12[2]; } } if ( *(float *)&dword_ABCEBC == *(float *)(v4 + 12) && *(float *)&dword_ABCEC0 == *(float *)(v4 + 16) && *(float *)&dword_ABCEC4 == *(float *)(v4 + 20) ) { return 0; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 20); *(float *)(v4 + 8) = v5; } return 1; } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081CB40) -------------------------------------------------------- LONG __thiscall sub_81CB40(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi int v4; // ebx LONG result; // eax v3 = this; sub_87F920(this, (int)a2, a3); a2[3] = v3[3]; a2[4] = v3[4]; a2[5] = v3[5]; v4 = a2[6]; if ( v4 == v3[6] ) { result = v3[7]; a2[7] = result; } else { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = v3[6]; a2[6] = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); a2[7] = v3[7]; } return result; } //----- (0081CBD0) -------------------------------------------------------- float *sub_81CBD0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_8320E0(v0); *(_DWORD *)v1 = &NiPoint3Interpolator::`vftable'; *((_DWORD *)v1 + 3) = dword_ABCEBC; *((_DWORD *)v1 + 4) = dword_ABCEC0; *((_DWORD *)v1 + 5) = dword_ABCEC4; v1[6] = 0.0; v1[7] = 0.0; return v1; } // A21714: using guessed type void *NiPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081CC20) -------------------------------------------------------- char __thiscall sub_81CC20(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || *(float *)(a2 + 12) != v2[3] || *(float *)(a2 + 16) != v2[4] || *(float *)(a2 + 20) != v2[5] ) { return 0; } v4 = *((_DWORD *)v2 + 6); if ( v4 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v4 ) goto LABEL_15; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v4 ) { LABEL_15: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 24)) ) return 1; return 0; } return 1; } //----- (0081CCA0) -------------------------------------------------------- _DWORD *__thiscall sub_81CCA0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 6); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_832100(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081CCF0) -------------------------------------------------------- float *__thiscall sub_81CCF0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x20u); v4 = v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiPoint3Interpolator::`vftable'; *((_DWORD *)v4 + 3) = dword_ABCEBC; *((_DWORD *)v4 + 4) = dword_ABCEC0; *((_DWORD *)v4 + 5) = dword_ABCEC4; v4[6] = 0.0; v4[7] = 0.0; sub_81CB40(v2, v4, a2); result = v4; } else { sub_81CB40(v2, 0, a2); result = 0; } return result; } // A21714: using guessed type void *NiPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081CD70) -------------------------------------------------------- unsigned int __thiscall sub_81CD70(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4328); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_85F140((float *)v3 + 3, (int)"m_kPoint3Value"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_spPoint3Data", *((_DWORD *)v3 + 6)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0081CE20) -------------------------------------------------------- int __stdcall sub_81CE20(__int16 a1) { int result; // eax if ( a1 ) result = (unsigned __int16)(a1 - 1) != 0 ? 6 : 0; else result = 1; return result; } //----- (0081CE50) -------------------------------------------------------- int __thiscall sub_81CE50(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[7]; if ( v4 ) return *(_DWORD *)(v4 + 8); } } else { v2 = this[6]; if ( v2 ) return *(_DWORD *)(v2 + 8); } return 0; } //----- (0081CE90) -------------------------------------------------------- int __thiscall sub_81CE90(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[7]; if ( v4 ) return *(_DWORD *)(v4 + 16); } } else { v2 = this[6]; if ( v2 ) return *(_DWORD *)(v2 + 16); } return 0; } //----- (0081CED0) -------------------------------------------------------- int __thiscall sub_81CED0(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[7]; if ( v4 ) return *(_DWORD *)(v4 + 12); } } else { v2 = this[6]; if ( v2 ) return *(_DWORD *)(v2 + 12); } return 0; } //----- (0081CF10) -------------------------------------------------------- char __thiscall sub_81CF10(_DWORD *this, __int16 a2) { int v2; // ecx int v4; // ecx if ( a2 ) { if ( a2 == 1 ) { v4 = this[7]; if ( v4 ) return *(_BYTE *)(v4 + 20); } } else { v2 = this[6]; if ( v2 ) return *(_BYTE *)(v2 + 20); } return 0; } //----- (0081CF50) -------------------------------------------------------- void __thiscall sub_81CF50(int *this, float *a2, float *a3) { int *v3; // esi int v4; // edx float *v5; // edi int v6; // eax float *v7; // eax *a2 = 3.4028235e38; v3 = this; v4 = *this; *a3 = -3.4028235e38; if ( (*(int (__stdcall **)(signed int))(v4 + 140))(1) ) { v5 = (float *)sub_832170(v3, 0, 1); v6 = (*(int (__thiscall **)(int *, signed int))(*v3 + 140))(v3, 1); v7 = (float *)sub_832170(v3, v6 - 1, 1); if ( v5 ) { if ( v7 ) { if ( *a2 > (double)*v5 ) *a2 = *v5; if ( *a3 < (double)*v7 ) *a3 = *v7; } } } if ( 3.4028235e38 == *a2 && -3.4028235e38 == *a3 ) { *a2 = 0.0; *a3 = 0.0; } } //----- (0081D020) -------------------------------------------------------- void __thiscall sub_81D020(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[7]; if ( v3 ) sub_826B80(v3, a2, a3); } //----- (0081D050) -------------------------------------------------------- int __thiscall sub_81D050(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx int v5; // ecx v2 = this; result = sub_85BAE0(this, a2); v4 = v2[6]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); v5 = v2[7]; if ( v5 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v5 + 40))(a2); return result; } //----- (0081D090) -------------------------------------------------------- char __thiscall sub_81D090(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx int v5; // ecx v2 = this; result = sub_8A3660(this, a2); if ( result ) { v4 = v2[6]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); v5 = v2[7]; if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); result = 1; } return result; } //----- (0081D0D0) -------------------------------------------------------- int __thiscall sub_81D0D0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { int v4; // ecx int result; // eax v4 = this[6]; result = 0; if ( v4 ) { *a2 = *(_DWORD *)(v4 + 8); *a3 = *(_DWORD *)(v4 + 16); *a4 = *(_BYTE *)(v4 + 20); result = *(_DWORD *)(v4 + 12); } else { *a2 = 0; *a3 = 0; *a4 = 0; } return result; } //----- (0081D110) -------------------------------------------------------- LONG __thiscall sub_81D110(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &off_A217DC; v2 = this[6]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[6] = 0; } v3 = v1[7]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[7] = 0; } operator delete((void *)v1[8]); v4 = v1[7]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[6]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_832100(v1); } // A217DC: using guessed type int (__thiscall *off_A217DC)(void *, char); //----- (0081D1D0) -------------------------------------------------------- char *sub_81D1D0() { return dword_BA4338; } //----- (0081D1E0) -------------------------------------------------------- int __thiscall sub_81D1E0(_DWORD *this, int a2, int a3, int a4, float a5) { int v5; // eax int v6; // edx int v7; // ecx unsigned __int8 v8; // bl v5 = this[6]; v6 = 0; if ( v5 ) { v7 = *(_DWORD *)(v5 + 16); v8 = *(_BYTE *)(v5 + 20); v6 = *(_DWORD *)(v5 + 12); } else { v7 = 0; v8 = 0; } ((void (__cdecl *)(_DWORD, int, int, int))dword_BA4138[v7])(LODWORD(a5), v6 + a3 * v8, v6 + a4 * v8, a2); return a2; } // BA4138: using guessed type int dword_BA4138[]; //----- (0081D240) -------------------------------------------------------- float *__thiscall sub_81D240(_DWORD *this, int a2, int a3, float a4, int a5) { float *result; // eax _DWORD *v6; // ebx int v7; // esi unsigned __int8 v8; // dl int v9; // edi int v10; // ecx int v11; // esi double v12; // st7 int v13; // ST08_4 float v14; // edx float v15; // eax float v16; // ecx int *v17; // eax double v18; // st7 double v19; // st6 double v20; // st5 __int16 v21; // cx float v22; // ST1C_4 float v23; // ST18_4 float v24; // ST14_4 int v25; // [esp+2Ch] [ebp-F8h] float v26; // [esp+30h] [ebp-F4h] float v27; // [esp+34h] [ebp-F0h] int *v28; // [esp+38h] [ebp-ECh] float v29; // [esp+3Ch] [ebp-E8h] float v30; // [esp+40h] [ebp-E4h] float v31; // [esp+44h] [ebp-E0h] float v32; // [esp+48h] [ebp-DCh] float v33; // [esp+4Ch] [ebp-D8h] float v34; // [esp+50h] [ebp-D4h] int v35; // [esp+54h] [ebp-D0h] int v36; // [esp+58h] [ebp-CCh] int v37; // [esp+5Ch] [ebp-C8h] float v38; // [esp+60h] [ebp-C4h] float v39; // [esp+64h] [ebp-C0h] int v40; // [esp+68h] [ebp-BCh] float v41; // [esp+6Ch] [ebp-B8h] float v42; // [esp+70h] [ebp-B4h] int v43; // [esp+74h] [ebp-B0h] float v44; // [esp+78h] [ebp-ACh] float v45; // [esp+7Ch] [ebp-A8h] int v46; // [esp+80h] [ebp-A4h] float v47; // [esp+84h] [ebp-A0h] float v48; // [esp+88h] [ebp-9Ch] int v49; // [esp+8Ch] [ebp-98h] int v50; // [esp+90h] [ebp-94h] int v51; // [esp+94h] [ebp-90h] unsigned int v52; // [esp+98h] [ebp-8Ch] int v53; // [esp+9Ch] [ebp-88h] unsigned __int8 v54; // [esp+A3h] [ebp-81h] float v55; // [esp+A4h] [ebp-80h] int v56; // [esp+A8h] [ebp-7Ch] float v57; // [esp+ACh] [ebp-78h] float v58; // [esp+B0h] [ebp-74h] char v59; // [esp+B4h] [ebp-70h] char v60; // [esp+D8h] [ebp-4Ch] int v61; // [esp+FCh] [ebp-28h] int v62; // [esp+100h] [ebp-24h] int v63; // [esp+104h] [ebp-20h] float v64; // [esp+108h] [ebp-1Ch] float v65; // [esp+10Ch] [ebp-18h] float v66; // [esp+110h] [ebp-14h] float v67; // [esp+114h] [ebp-10h] float v68; // [esp+118h] [ebp-Ch] float v69; // [esp+11Ch] [ebp-8h] result = (float *)a2; v6 = this; v53 = a3; qmemcpy(&v61, &unk_ABD440, 0x24u); v7 = this[6]; v52 = a2; v28 = (int *)a5; if ( !v7 ) goto LABEL_34; v8 = *(_BYTE *)(v7 + 20); v9 = *(_DWORD *)(v7 + 12); v55 = *(float *)(v7 + 8); v10 = *(_DWORD *)(v7 + 16); v36 = *(_DWORD *)(v7 + 16); v54 = v8; if ( LODWORD(v55) < 2 ) goto LABEL_34; if ( !((*((_BYTE *)v6 + 12) >> 2) & 1) ) { sub_804930(a4, v9 + v54 * a2, v9 + v53 * v54, v10, (int)&v40, (int)&v46, (int)&v37, (int)&v50); v61 = v40; v64 = v41; v67 = v42; sub_443140((float *)&dword_ABD4A4, (float *)&v25, (float *)&v40); v62 = v25; v65 = v26; v68 = v27; *(float *)&v56 = v27 * v41 - v26 * v42; v57 = v42 * *(float *)&v25 - v27 * *(float *)&v40; v19 = v41; v58 = v26 * *(float *)&v40 - *(float *)&v25 * v41; v63 = v56; v66 = v57; v69 = v58; v20 = v42; v18 = *(float *)&v40; goto LABEL_21; } v11 = v54; v35 = v9 + v54 * a2; v51 = v9 + v53 * v54; sub_804930(a4, v9 + v54 * a2, v9 + v53 * v54, v10, (int)&v40, (int)&v46, (int)&v37, (int)&v50); if ( 0.0 != *((float *)v6 + 11) ) { v12 = a4; if ( 1.0 - *((float *)v6 + 11) > a4 ) { if ( *((float *)v6 + 11) < v12 ) goto LABEL_19; if ( !((*((_BYTE *)v6 + 12) >> 1) & 1) && !v52 ) v52 = LODWORD(v55) - 1; if ( v52 < 1 ) goto LABEL_19; *(float *)&v53 = (*((float *)v6 + 11) - v12) / (*((float *)v6 + 11) + *((float *)v6 + 11)); v55 = 1.0 - *(float *)&v53; sub_804930(*((float *)v6 + 11), v35, v51, v36, (int)&v25, (int)&v46, (int)&v37, (int)&v50); *(float *)&v51 = 1.0 - *((float *)v6 + 11); sub_804930(*(float *)&v51, v9 + v11 * (v52 - 1), v9 + v52 * v11, v36, (int)&v25, (int)&v43, (int)&v37, (int)&v49); v29 = *(float *)&v43 * *(float *)&v53; v30 = v44 * *(float *)&v53; v31 = *(float *)&v53 * v45; *(float *)&v56 = *(float *)&v46 * v55; v57 = v47 * v55; v58 = v55 * v48; v32 = *(float *)&v56 + v29; v14 = v32; v33 = v57 + v30; v15 = v33; v34 = v58 + v31; v16 = v34; } else { if ( (*((_BYTE *)v6 + 12) >> 1) & 1 || v53 != LODWORD(v55) - 1 ) v52 = v53; else v52 = 0; if ( v52 >= LODWORD(v55) - 1 ) goto LABEL_19; v13 = v51; v55 = (1.0 - v12 + *((float *)v6 + 11)) / (*((float *)v6 + 11) + *((float *)v6 + 11)); *(float *)&v53 = 1.0 - v55; *(float *)&v51 = 1.0 - *((float *)v6 + 11); sub_804930(*(float *)&v51, v35, v13, v36, (int)&v25, (int)&v46, (int)&v37, (int)&v50); sub_804930( *((float *)v6 + 11), v9 + v52 * v11, v9 + v11 * (v52 + 1), v36, (int)&v25, (int)&v43, (int)&v37, (int)&v49); v29 = *(float *)&v43 * *(float *)&v53; v30 = v44 * *(float *)&v53; v31 = *(float *)&v53 * v45; v32 = *(float *)&v46 * v55; v33 = v47 * v55; v34 = v55 * v48; *(float *)&v56 = v32 + v29; v14 = *(float *)&v56; v57 = v33 + v30; v15 = v57; v58 = v34 + v31; v16 = v58; } v48 = v16; v47 = v15; *(float *)&v46 = v14; sub_4430B0((float *)&v46); *(float *)&v50 = *(float *)&v49 * *(float *)&v53 + v55 * *(float *)&v50; v17 = (int *)sub_61E8E0((float *)&v40, (float *)&v56, (float *)&v46); v37 = *v17; v38 = *((float *)v17 + 1); v39 = *((float *)v17 + 2); } LABEL_19: v18 = *(float *)&v40; v61 = v40; v19 = v41; v64 = v41; v20 = v42; v67 = v42; *(float *)&v56 = -*(float *)&v46; v57 = -v47; v58 = -v48; v62 = v56; v65 = v57; v68 = v58; *(float *)&v56 = -*(float *)&v37; v57 = -v38; v58 = -v39; v63 = v56; v66 = v57; v69 = v58; LABEL_21: v21 = *((_WORD *)v6 + 6); if ( ((unsigned __int8)*((_WORD *)v6 + 6) >> 6) & 1 ) { *(float *)&v56 = -v18; v57 = -v19; v58 = -v20; v61 = v56; v64 = v57; v67 = v58; *(float *)&v56 = -*(float *)&v62; v57 = -v65; v58 = -v68; v62 = v56; v65 = v57; v68 = v58; } result = (float *)(*((signed __int16 *)v6 + 24) - 1); if ( *((_WORD *)v6 + 24) == 1 ) { v43 = v61; v44 = v64; v45 = v67; *(float *)&v56 = -*(float *)&v62; v57 = -v65; v58 = -v68; v61 = v56; v64 = v57; v67 = v58; v62 = v43; v65 = v44; v68 = v45; } else { result = (float *)(*((signed __int16 *)v6 + 24) - 2); if ( *((_WORD *)v6 + 24) == 2 ) { v43 = v61; v44 = v64; v45 = v67; *(float *)&v56 = -*(float *)&v63; v57 = -v66; v58 = -v69; v61 = v56; v64 = v57; v67 = v58; v63 = v43; v66 = v44; v69 = v45; } } if ( ((unsigned __int8)v21 >> 3) & 1 ) { if ( !(dword_BA4334 & 1) ) { dword_BA4334 |= 1u; flt_BA4330 = 4.0 / flt_BA45B4; } *(float *)&v49 = (double)(signed int)v6[14] * *((float *)v6 + 10); if ( *((float *)v6 + 13) > (double)*(float *)&v50 ) { *(float *)&v51 = *(float *)&v50 / *((float *)v6 + 13); *(float *)&v51 = atan(*(float *)&v51); *(float *)&v49 = *(float *)&v51 * flt_BA4330 * *(float *)&v49; v18 = *(float *)&v40; v20 = v42; v19 = v41; } v22 = v20; v23 = v19; v24 = v18; sub_85D860((float *)&v60, *(float *)&v49, v24, v23, v22); result = sub_85D940((float *)&v60, (float *)&v59, (float *)&v61); qmemcpy(&v61, result, 0x24u); } LABEL_34: qmemcpy(v28, &v61, 0x24u); return result; } // ABD4A4: using guessed type int dword_ABD4A4; // BA4330: using guessed type float flt_BA4330; // BA4334: using guessed type int dword_BA4334; // BA45B4: using guessed type float flt_BA45B4; //----- (0081DA90) -------------------------------------------------------- double __thiscall sub_81DA90(_DWORD *this, int a2, int a3, float a4) { int v4; // edi signed int v5; // esi int v6; // eax int v7; // ecx int v8; // edx unsigned __int8 v9; // bl float v11; // [esp+1Ch] [ebp-14h] float v12; // [esp+20h] [ebp-10h] float v13; // [esp+24h] [ebp-Ch] _DWORD *v14; // [esp+28h] [ebp-8h] float v15; // [esp+2Ch] [ebp-4h] float v16; // [esp+38h] [ebp+8h] float v17; // [esp+38h] [ebp+8h] float v18; // [esp+38h] [ebp+8h] v15 = 0.0; v4 = a2; v14 = this; v5 = 0; do { v6 = v14[6]; v7 = 0; if ( v6 ) { v8 = *(_DWORD *)(v6 + 16); v9 = *(_BYTE *)(v6 + 20); v7 = *(_DWORD *)(v6 + 12); } else { v8 = 0; v9 = 0; } v16 = flt_ABC6F4[v5] * a4; ((void (__cdecl *)(_DWORD, int, int, float *))dword_BA40A8[v8])(LODWORD(v16), v7 + v4 * v9, v7 + a3 * v9, &v11); v17 = v11 * v11 + v12 * v12 + v13 * v13; v18 = sqrt(v17); ++v5; v15 = v18 * flt_ABC6DC[v5] + v15; } while ( v5 < 5 ); return (float)(v15 * a4); } // ABC6DC: using guessed type float flt_ABC6DC[]; // ABC6F4: using guessed type float flt_ABC6F4[]; // BA40A8: using guessed type int dword_BA40A8[]; //----- (0081DB60) -------------------------------------------------------- int __thiscall sub_81DB60(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[7]; v6 = result; if ( v5 ) { sub_826D70(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 28); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 28) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 20) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (0081DC20) -------------------------------------------------------- char __thiscall sub_81DC20(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // ebx int v5; // ecx int v6; // ecx int v7; // esi int v8; // ecx unsigned int v9; // eax __int16 v10; // dx __int16 v11; // cx char v12; // [esp+8h] [ebp-Ch] float *v13; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v13 = (float *)this; if ( !sub_832120(this, a2) ) return 0; v5 = v3[6]; if ( v5 ) { if ( !*(_DWORD *)(v2 + 24) ) return 0; if ( v5 ) goto LABEL_45; } if ( *(_DWORD *)(v2 + 24) ) return 0; if ( v5 ) { LABEL_45: if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 28))(*(_DWORD *)(v2 + 24)) ) return 0; } v6 = v3[7]; if ( v6 ) { if ( !*(_DWORD *)(v2 + 28) ) return 0; if ( v6 ) goto LABEL_46; } if ( *(_DWORD *)(v2 + 28) ) return 0; if ( v6 ) { LABEL_46: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 28))(*(_DWORD *)(v2 + 28)) ) goto LABEL_15; return 0; } LABEL_15: v7 = v3[8]; if ( !v7 ) goto LABEL_48; if ( !*(_DWORD *)(v2 + 32) ) return 0; if ( !v7 ) { LABEL_48: if ( *(_DWORD *)(v2 + 32) ) return 0; if ( !v7 ) goto LABEL_47; } sub_81D0D0(v3, &v14, &v12, (_BYTE *)&a2 + 3); v8 = *(_DWORD *)(v2 + 32); v9 = 4 * v14; if ( (unsigned int)(4 * v14) >= 4 ) { while ( *(_DWORD *)v7 == *(_DWORD *)v8 ) { v9 -= 4; v8 += 4; v7 += 4; if ( v9 < 4 ) goto LABEL_23; } return 0; } LABEL_23: if ( !v9 ) goto LABEL_47; if ( *(_BYTE *)v8 == *(_BYTE *)v7 && (v9 <= 1 || *(_BYTE *)(v8 + 1) == *(_BYTE *)(v7 + 1) && (v9 <= 2 || *(_BYTE *)(v8 + 2) == *(_BYTE *)(v7 + 2))) ) { LABEL_47: if ( *(float *)(v2 + 36) == *((float *)v3 + 9) && !((*((_BYTE *)v3 + 12) ^ *(_BYTE *)(v2 + 12)) & 1) ) { v10 = *((_WORD *)v3 + 6); v11 = *(_WORD *)(v2 + 12); if ( !((((unsigned __int8)*((_WORD *)v3 + 6) >> 1) ^ ((unsigned __int8)*(_WORD *)(v2 + 12) >> 1)) & 1) && *((_DWORD *)v13 + 14) == *(_DWORD *)(v2 + 56) && !((((unsigned __int8)v10 >> 2) ^ ((unsigned __int8)v11 >> 2)) & 1) && !((((unsigned __int8)v10 >> 3) ^ ((unsigned __int8)v11 >> 3)) & 1) && !((((unsigned __int8)v10 >> 4) ^ ((unsigned __int8)v11 >> 4)) & 1) && !((((unsigned __int8)v10 >> 5) ^ ((unsigned __int8)v11 >> 5)) & 1) && *(float *)(v2 + 40) == v13[10] && *(float *)(v2 + 44) == v13[11] && *((_WORD *)v13 + 24) == *(_WORD *)(v2 + 48) && !((((unsigned __int8)v10 >> 6) ^ ((unsigned __int8)v11 >> 6)) & 1) ) { return 1; } } } return 0; } //----- (0081DE00) -------------------------------------------------------- void *__thiscall sub_81DE00(void *this, char a2) { void *v2; // esi v2 = this; sub_81D110(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081DE30) -------------------------------------------------------- double __thiscall sub_81DE30(int this) { int v1; // edi int v2; // eax unsigned int v3; // esi int v4; // ebx float *v5; // eax float v6; // ST18_4 int v8; // [esp+14h] [ebp-4h] v1 = this; if ( *(float *)(this + 36) < 0.0 ) { v2 = *(_DWORD *)(this + 24); v3 = 0; if ( v2 ) { v4 = *(_DWORD *)(v2 + 8); v8 = *(_DWORD *)(v2 + 8); } else { v8 = 0; v4 = 0; } operator delete(*(void **)(this + 32)); v5 = (float *)operator new(4 * v4); *(_DWORD *)(v1 + 32) = v5; *v5 = 0.0; if ( (unsigned int)(v4 - 1) > 0 ) { do { v6 = sub_81DA90((_DWORD *)v1, v3, v3 + 1, 1.0); *(float *)(*(_DWORD *)(v1 + 32) + 4 * v3 + 4) = *(float *)(*(_DWORD *)(v1 + 32) + 4 * v3) + v6; ++v3; } while ( v3 < v8 - 1 ); v4 = v8; } *(float *)(v1 + 36) = *(float *)(*(_DWORD *)(v1 + 32) + 4 * v4 - 4); } return *(float *)(v1 + 36); } //----- (0081DEE0) -------------------------------------------------------- signed int __thiscall sub_81DEE0(int this) { int v1; // esi signed int result; // eax v1 = this; if ( *(_BYTE *)(this + 12) & 1 ) { *(float *)(this + 36) = sub_81DE30(this); result = 65534; *(_WORD *)(v1 + 12) &= 0xFFFEu; } return result; } //----- (0081DF00) -------------------------------------------------------- int __thiscall sub_81DF00(int this, float a2, int a3, int a4, int a5) { _DWORD *v5; // ebx int v6; // eax int v7; // esi long double v8; // st7 int result; // eax long double v10; // st6 unsigned int v11; // esi int v12; // edi double v13; // st7 float *v14; // edx int v15; // eax double v16; // st7 int v17; // eax int v18; // ecx int v19; // edx unsigned __int8 v20; // bl float v21; // [esp+1Ch] [ebp-2Ch] float v22; // [esp+20h] [ebp-28h] float v23; // [esp+24h] [ebp-24h] double v24; // [esp+28h] [ebp-20h] double v25; // [esp+30h] [ebp-18h] _DWORD *v26; // [esp+38h] [ebp-10h] int v27; // [esp+3Ch] [ebp-Ch] float v28; // [esp+40h] [ebp-8h] float v29; // [esp+44h] [ebp-4h] float v30; // [esp+50h] [ebp+8h] float v31; // [esp+50h] [ebp+8h] float v32; // [esp+50h] [ebp+8h] float v33; // [esp+50h] [ebp+8h] float v34; // [esp+50h] [ebp+8h] float v35; // [esp+50h] [ebp+8h] v5 = (_DWORD *)this; v6 = *(_DWORD *)(this + 24); v26 = (_DWORD *)this; if ( v6 ) { v7 = *(_DWORD *)(v6 + 8); v29 = *(float *)(v6 + 8); } else { v29 = 0.0; v7 = 0; } v8 = a2; if ( 0.0 == a2 ) { result = a3; *(_DWORD *)a3 = 0; *(_DWORD *)a4 = 1; *(float *)a5 = 0.0; } else { v10 = 1.0; if ( v8 < 0.0 ) { v30 = fmod(v8, 1.0); v31 = v30 + 1.0; v10 = 1.0; v8 = v31; } if ( 1.0 == v8 ) { *(_DWORD *)a3 = v7 - 2; *(_DWORD *)a4 = v7 - 1; result = a5; *(float *)a5 = 1.0; } else { if ( v8 > 1.0 ) { v32 = fmod(v8, v10); v8 = v32; } v11 = 0; v33 = v8 * *(float *)(this + 36); v12 = 1; if ( LODWORD(v29) != 1 ) { v13 = v33; v14 = (float *)(*(_DWORD *)(this + 32) + 4); while ( *v14 < v13 ) { ++v11; ++v12; ++v14; if ( v11 >= LODWORD(v29) - 1 ) { v27 = 0; goto LABEL_20; } } v15 = *(_DWORD *)(this + 32); v29 = v13 - *(float *)(v15 + 4 * v11); v33 = v29 / (*(float *)(v15 + 4 * v12) - *(float *)(v15 + 4 * v11)); } v27 = 0; LABEL_20: while ( 1 ) { v16 = sub_81DA90(v5, v11, v12, v33); v28 = v16 - v29; *((float *)&v25 + 1) = fabs(v28); if ( *((float *)&v25 + 1) <= 0.00009999999747378752 ) break; v17 = v5[6]; v18 = 0; if ( v17 ) { v19 = *(_DWORD *)(v17 + 16); v20 = *(_BYTE *)(v17 + 20); v18 = *(_DWORD *)(v17 + 12); } else { v19 = 0; v20 = 0; } ((void (__cdecl *)(_DWORD, unsigned int, int, float *))dword_BA40A8[v19])( LODWORD(v33), v18 + v11 * v20, v18 + v12 * v20, &v21); v24 = v33; v25 = v28; v34 = v21 * v21 + v22 * v22 + v23 * v23; v35 = sqrt(v34); ++v27; v33 = v24 - v28 / v35; if ( v27 >= 32 ) break; v5 = v26; } result = a4; *(_DWORD *)a3 = v11; *(_DWORD *)a4 = v12; *(float *)a5 = v33; } } return result; } // BA40A8: using guessed type int dword_BA40A8[]; //----- (0081E110) -------------------------------------------------------- int __thiscall sub_81E110(int this, float a2, int a3, int a4, int a5) { int v5; // esi int result; // eax int v7; // eax float *v8; // edi int v9; // esi unsigned __int8 v10; // cl double v11; // st7 int v12; // edx unsigned int v13; // ebx unsigned int v14; // ecx int v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] char v17; // [esp+2Bh] [ebp+Bh] v5 = this; v15 = this; if ( (*(_BYTE *)(this + 12) >> 4) & 1 ) { sub_81DF00(this, a2, a3, a4, a5); result = *(_DWORD *)a3; *(_DWORD *)(v5 + 16) = *(_DWORD *)a3; } else { v7 = *(_DWORD *)(this + 24); v8 = 0; if ( v7 ) { v9 = *(_DWORD *)(v7 + 8); v10 = *(_BYTE *)(v7 + 20); v8 = *(float **)(v7 + 12); v16 = *(_DWORD *)(v7 + 8); } else { v16 = 0; v10 = 0; v9 = 0; } v11 = a2; if ( *v8 < (double)a2 ) { v12 = v10; v13 = v9 - 1; if ( *(float *)((char *)v8 + (v9 - 1) * v10) > v11 ) { v14 = *(_DWORD *)(v15 + 16); v17 = 1; if ( v14 >= v13 ) { LABEL_19: result = a5; } else { while ( *(float *)((char *)v8 + v14 * v12) != v11 && (*(float *)((char *)v8 + v14 * v12) >= v11 || *(float *)((char *)v8 + v12 * (v14 + 1)) <= v11) ) { if ( v14 == v16 - 2 && v17 ) { v14 = 0; v17 = 0; } else { ++v14; } if ( v14 >= v13 ) goto LABEL_19; } *(_DWORD *)(v15 + 16) = v14; result = v14 + 1; } *(float *)a5 = (v11 - *(float *)((char *)v8 + v14 * v12)) / (*(float *)((char *)v8 + result * v12) - *(float *)((char *)v8 + v14 * v12)); *(_DWORD *)a3 = v14; *(_DWORD *)a4 = result; } else { result = a4; *(_DWORD *)a3 = v9 - 2; *(_DWORD *)a4 = v13; *(float *)a5 = 1.0; } } else { result = a5; *(_DWORD *)a3 = 0; *(_DWORD *)a4 = 1; *(float *)a5 = 0.0; } } return result; } //----- (0081E270) -------------------------------------------------------- int __thiscall sub_81E270(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v10)(int, int *, signed int, signed int *, signed int); // edx int v11; // ST14_4 int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v15)(int, int *, signed int, signed int *, signed int); // edx int v16; // ST3C_4 int v18; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_832110(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, v3 + 3, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, &v18, 4, &a2, 1); v3[14] = v18; v10 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); a2 = 4; v10(v11, v3 + 10, 4, &a2, 1); v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v12 + 4); a2 = 4; v14(v13, v3 + 11, 4, &a2, 1); v15 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v16 = *(_DWORD *)(v2 + 352); a2 = 2; v15(v16, v3 + 12, 2, &a2, 1); sub_876290((void **)v2); return sub_876290((void **)v2); } //----- (0081E340) -------------------------------------------------------- _DWORD *__userpurge sub_81E340@(int a1@, double a2@, _DWORD *a3) { int v3; // esi int v4; // eax int v5; // edi int v6; // ebx int v7; // eax int v8; // edi int v9; // ebx _DWORD *result; // eax int v11; // ecx int v12; // edx v3 = a1; sub_8790E0((int)a3); v4 = sub_875AD0(a3); v5 = *(_DWORD *)(v3 + 24); v6 = v4; if ( v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v3 + 24) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } v7 = sub_875AD0(a3); v8 = *(_DWORD *)(v3 + 28); v9 = v7; if ( v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v3 + 28) = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } *(_WORD *)(v3 + 12) |= 1u; if ( (*(_BYTE *)(v3 + 12) >> 4) & 1 && *(_BYTE *)(v3 + 12) & 1 ) { a2 = sub_81DE30(v3); *(float *)(v3 + 36) = a2; *(_WORD *)(v3 + 12) &= 0xFFFEu; } result = *(_DWORD **)(v3 + 24); if ( result ) { v11 = result[2]; v12 = result[4]; result = (_DWORD *)result[3]; if ( v11 ) { result = (_DWORD *)((int (__cdecl *)(_DWORD *, int))dword_BA41C8[v12])(result, v11); *(float *)(v3 + 52) = a2; } } return result; } // BA41C8: using guessed type int dword_BA41C8[]; //----- (0081E430) -------------------------------------------------------- int __thiscall sub_81E430(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, _DWORD *, signed int, int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, _DWORD *, signed int, int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_8790E0(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 3, 2, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 14, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 10, 4, &a2, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 11, 4, &a2, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v16 + 8); a2 = 2; v18(v17, v3 + 12, 2, &a2, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[6]); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[7]); } //----- (0081E510) -------------------------------------------------------- unsigned int __thiscall sub_81E510(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8322E0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4338); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0081E560) -------------------------------------------------------- float *__thiscall sub_81E560(float *this, int a2, int a3) { float *v3; // esi int v4; // eax v3 = this; sub_8320E0(this); *(_DWORD *)v3 = &off_A217DC; *((_DWORD *)v3 + 6) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); *((_DWORD *)v3 + 7) = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); *((_DWORD *)v3 + 15) = dword_BA44B8; *((_DWORD *)v3 + 16) = dword_BA44BC; *((_DWORD *)v3 + 17) = dword_BA44C0; *((_DWORD *)v3 + 18) = dword_BA44C4; *((_DWORD *)v3 + 19) = dword_ABCEBC; *((_DWORD *)v3 + 20) = dword_ABCEC0; v4 = dword_ABCEC4; v3[10] = 0.0; v3[11] = 0.0; v3[13] = 0.0; *((_DWORD *)v3 + 21) = v4; v3[9] = -1.0; v3[4] = 0.0; v3[5] = 0.0; *((_DWORD *)v3 + 14) = 1; *((_WORD *)v3 + 24) = 0; v3[8] = 0.0; *((_WORD *)v3 + 6) = 3; v3[22] = -3.4028235e38; return v3; } // A217DC: using guessed type int (__thiscall *off_A217DC)(void *, char); // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081E630) -------------------------------------------------------- char __thiscall sub_81E630(int this, float a2, int a3, int a4) { int v4; // esi char result; // al int v6; // eax char v7; // cl int v8; // edx int v9; // ebx int v10; // eax int v11; // ecx int v12; // ebx _DWORD *v13; // eax int v14; // [esp+24h] [ebp-40h] int v15; // [esp+30h] [ebp-34h] int v16; // [esp+34h] [ebp-30h] char v17[4]; // [esp+38h] [ebp-2Ch] int v18; // [esp+3Ch] [ebp-28h] v4 = this; if ( a2 == *(float *)(this + 8) ) { if ( *(float *)&dword_ABCEBC != *(float *)(this + 76) || *(float *)&dword_ABCEC0 != *(float *)(this + 80) || *(float *)&dword_ABCEC4 != *(float *)(this + 84) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 76); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 80); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 84); if ( (*(_BYTE *)(this + 12) >> 5) & 1 ) { *(_DWORD *)(a4 + 12) = *(_DWORD *)(this + 60); *(_DWORD *)(a4 + 16) = *(_DWORD *)(this + 64); *(_DWORD *)(a4 + 20) = *(_DWORD *)(this + 68); *(_DWORD *)(a4 + 24) = *(_DWORD *)(this + 72); } result = 1; } else { result = 0; *(float *)a4 = -3.4028235e38; *(float *)(a4 + 16) = -3.4028235e38; *(float *)(a4 + 28) = -3.4028235e38; } } else { v6 = *(_DWORD *)(this + 28); if ( v6 && (v7 = *(_BYTE *)(v6 + 20), v8 = *(_DWORD *)(v6 + 8), v9 = *(_DWORD *)(v6 + 16), v10 = *(_DWORD *)(v6 + 12), v17[0] = v7, v10) && (v11 = *(_DWORD *)(v4 + 24)) != 0 && *(_DWORD *)(v11 + 12) ) { *(float *)v17 = sub_803DC0(a2, v10, v9, v8, v4 + 20, v17[0]); sub_81E110(v4, *(float *)v17, (int)v17, (int)&v15, (int)&v16); v12 = v15; if ( (*(_BYTE *)(v4 + 12) >> 5) & 1 ) { sub_81D240((_DWORD *)v4, *(int *)v17, v15, *(float *)&v16, (int)&v18); sub_874F50((float *)(v4 + 60), (float *)&v18); } v13 = (_DWORD *)sub_81D1E0((_DWORD *)v4, (int)&v14, *(int *)v17, v12, *(float *)&v16); *(_DWORD *)(v4 + 76) = *v13; *(_DWORD *)(v4 + 80) = v13[1]; *(_DWORD *)(v4 + 84) = v13[2]; *(_DWORD *)a4 = *(_DWORD *)(v4 + 76); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 80); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 84); if ( (*(_BYTE *)(v4 + 12) >> 5) & 1 ) { *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 60); *(_DWORD *)(a4 + 16) = *(_DWORD *)(v4 + 64); *(_DWORD *)(a4 + 20) = *(_DWORD *)(v4 + 68); *(_DWORD *)(a4 + 24) = *(_DWORD *)(v4 + 72); } *(float *)(v4 + 88) = a2; result = 1; } else { result = 0; } } return result; } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0081E830) -------------------------------------------------------- char __thiscall sub_81E830(void *this, int a2, _DWORD **a3) { int v3; // esi void *v4; // edi int v5; // ecx int v6; // eax int v7; // ebx int v8; // ecx int v9; // eax int v10; // ebx char result; // al int v12; // eax int v13; // ebx void *v14; // eax int v15; // [esp+14h] [ebp+8h] int v16; // [esp+18h] [ebp+Ch] v3 = a2; v4 = this; sub_87F920(this, a2, a3); *(_WORD *)(a2 + 12) = *((_WORD *)v4 + 6); v5 = *((_DWORD *)v4 + 6); if ( v5 ) { v6 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 8))(a3); v7 = *(_DWORD *)(a2 + 24); v15 = v6; if ( v7 != v6 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v6 = v15; } *(_DWORD *)(v3 + 24) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } } v8 = *((_DWORD *)v4 + 7); if ( v8 ) { v9 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v8 + 8))(a3); v10 = *(_DWORD *)(v3 + 28); v16 = v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v9 = v16; } *(_DWORD *)(v3 + 28) = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } } if ( (*((_BYTE *)v4 + 12) >> 2) & 1 ) *(_WORD *)(v3 + 12) |= 4u; else *(_WORD *)(v3 + 12) &= 0xFFFBu; if ( (*((_BYTE *)v4 + 12) >> 3) & 1 ) *(_WORD *)(v3 + 12) |= 8u; else *(_WORD *)(v3 + 12) &= 0xFFF7u; *(_DWORD *)(v3 + 56) = *((_DWORD *)v4 + 14); if ( (*((_BYTE *)v4 + 12) >> 4) & 1 ) { *(_WORD *)(v3 + 12) |= 0x10u; if ( *(_BYTE *)(v3 + 12) & 1 ) { *(float *)(v3 + 36) = sub_81DE30(v3); *(_WORD *)(v3 + 12) &= 0xFFFEu; } } else { *(_WORD *)(v3 + 12) &= 0xFFEFu; } if ( (*((_BYTE *)v4 + 12) >> 5) & 1 ) *(_WORD *)(v3 + 12) |= 0x20u; else *(_WORD *)(v3 + 12) &= 0xFFDFu; *(float *)(v3 + 40) = *((float *)v4 + 10); *(float *)(v3 + 44) = *((float *)v4 + 11); *(_WORD *)(v3 + 48) = *((_WORD *)v4 + 24); result = *((_BYTE *)v4 + 12) >> 6; if ( result & 1 ) *(_WORD *)(v3 + 12) |= 0x40u; else *(_WORD *)(v3 + 12) &= 0xFFBFu; if ( (*((_BYTE *)v4 + 12) >> 1) & 1 ) { *(_WORD *)(v3 + 12) |= 2u; } else { result = -3; *(_WORD *)(v3 + 12) &= 0xFFFDu; } if ( *((_DWORD *)v4 + 8) ) { v12 = *((_DWORD *)v4 + 6); if ( v12 ) v13 = *(_DWORD *)(v12 + 8); else v13 = 0; v14 = operator new(4 * v13); *(_DWORD *)(v3 + 32) = v14; result = memcpy_s(v14, 4 * v13, *((const void **)v4 + 8), 4 * v13); } *(float *)(v3 + 36) = *((float *)v4 + 9); return result; } //----- (0081EAC0) -------------------------------------------------------- int __thiscall sub_81EAC0(void *this, _DWORD **a2) { void *v2; // ebx float *v3; // eax int v4; // esi int v5; // eax v2 = this; v3 = (float *)operator new(0x5Cu); v4 = (int)v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &off_A217DC; *(_DWORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = 0; *(_DWORD *)(v4 + 60) = dword_BA44B8; *(_DWORD *)(v4 + 64) = dword_BA44BC; *(_DWORD *)(v4 + 68) = dword_BA44C0; *(_DWORD *)(v4 + 72) = dword_BA44C4; *(_DWORD *)(v4 + 76) = dword_ABCEBC; *(_DWORD *)(v4 + 80) = dword_ABCEC0; v5 = dword_ABCEC4; *(float *)(v4 + 40) = 0.0; *(float *)(v4 + 44) = 0.0; *(float *)(v4 + 52) = 0.0; *(_DWORD *)(v4 + 84) = v5; *(float *)(v4 + 36) = -1.0; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; *(_DWORD *)(v4 + 56) = 1; *(_WORD *)(v4 + 48) = 0; *(_DWORD *)(v4 + 32) = 0; *(_WORD *)(v4 + 12) = 3; *(float *)(v4 + 88) = -3.4028235e38; } else { v4 = 0; } sub_81E830(v2, v4, a2); return v4; } // A217DC: using guessed type int (__thiscall *off_A217DC)(void *, char); // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0081EB90) -------------------------------------------------------- int __thiscall sub_81EB90(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx int v5; // ecx v2 = this; result = sub_86C220(this, a2); v4 = v2[18]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); v5 = v2[19]; if ( v5 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v5 + 40))(a2); return result; } //----- (0081EBD0) -------------------------------------------------------- char __thiscall sub_81EBD0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx int v5; // ecx v2 = this; result = sub_86C250(this, a2); if ( result ) { v4 = v2[18]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); v5 = v2[19]; if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); result = 1; } return result; } //----- (0081EC10) -------------------------------------------------------- _DWORD *__thiscall sub_81EC10(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, _BYTE *a5) { int v5; // eax _DWORD *result; // eax v5 = this[18]; if ( v5 ) { *a3 = *(_DWORD *)(v5 + 8); *a4 = *(_DWORD *)(v5 + 16); *a5 = *(_BYTE *)(v5 + 20); result = *(_DWORD **)(v5 + 12); *a2 = result; } else { result = a4; *a3 = 0; *a4 = 0; *a2 = 0; *a5 = 0; } return result; } //----- (0081EC60) -------------------------------------------------------- LONG __thiscall sub_81EC60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &off_A21884; v2 = this[18]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[18] = 0; } v3 = v1[19]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[19] = 0; } operator delete((void *)v1[20]); v4 = v1[19]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[18]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_86C3C0(v1); } // A21884: using guessed type int (__thiscall *off_A21884)(void *, char); //----- (0081ED20) -------------------------------------------------------- char *sub_81ED20() { return dword_BA4348; } //----- (0081ED30) -------------------------------------------------------- int __thiscall sub_81ED30(_DWORD *this, int a2, int a3, int a4, float a5) { int v5; // eax int v6; // edx unsigned __int8 v7; // bl int v8; // ecx v5 = this[18]; if ( v5 ) { v6 = *(_DWORD *)(v5 + 16); v7 = *(_BYTE *)(v5 + 20); v8 = *(_DWORD *)(v5 + 12); } else { v6 = 0; v8 = 0; v7 = 0; } ((void (__cdecl *)(_DWORD, int, int, int))dword_BA4138[v6])(LODWORD(a5), v8 + a3 * v7, v8 + a4 * v7, a2); return a2; } // BA4138: using guessed type int dword_BA4138[]; //----- (0081ED90) -------------------------------------------------------- float *__thiscall sub_81ED90(_DWORD *this, int a2, int a3, float a4, int a5) { float *result; // eax _DWORD *v6; // ebx int v7; // esi unsigned __int8 v8; // dl int v9; // edi int v10; // ecx int v11; // esi double v12; // st7 int v13; // ST08_4 float v14; // edx float v15; // eax float v16; // ecx int *v17; // eax double v18; // st7 double v19; // st6 double v20; // st5 __int16 v21; // cx float v22; // ST1C_4 float v23; // ST18_4 float v24; // ST14_4 int v25; // [esp+2Ch] [ebp-F8h] float v26; // [esp+30h] [ebp-F4h] float v27; // [esp+34h] [ebp-F0h] int *v28; // [esp+38h] [ebp-ECh] float v29; // [esp+3Ch] [ebp-E8h] float v30; // [esp+40h] [ebp-E4h] float v31; // [esp+44h] [ebp-E0h] float v32; // [esp+48h] [ebp-DCh] float v33; // [esp+4Ch] [ebp-D8h] float v34; // [esp+50h] [ebp-D4h] int v35; // [esp+54h] [ebp-D0h] int v36; // [esp+58h] [ebp-CCh] int v37; // [esp+5Ch] [ebp-C8h] float v38; // [esp+60h] [ebp-C4h] float v39; // [esp+64h] [ebp-C0h] int v40; // [esp+68h] [ebp-BCh] float v41; // [esp+6Ch] [ebp-B8h] float v42; // [esp+70h] [ebp-B4h] int v43; // [esp+74h] [ebp-B0h] float v44; // [esp+78h] [ebp-ACh] float v45; // [esp+7Ch] [ebp-A8h] int v46; // [esp+80h] [ebp-A4h] float v47; // [esp+84h] [ebp-A0h] float v48; // [esp+88h] [ebp-9Ch] int v49; // [esp+8Ch] [ebp-98h] int v50; // [esp+90h] [ebp-94h] int v51; // [esp+94h] [ebp-90h] unsigned int v52; // [esp+98h] [ebp-8Ch] int v53; // [esp+9Ch] [ebp-88h] unsigned __int8 v54; // [esp+A3h] [ebp-81h] float v55; // [esp+A4h] [ebp-80h] int v56; // [esp+A8h] [ebp-7Ch] float v57; // [esp+ACh] [ebp-78h] float v58; // [esp+B0h] [ebp-74h] char v59; // [esp+B4h] [ebp-70h] char v60; // [esp+D8h] [ebp-4Ch] int v61; // [esp+FCh] [ebp-28h] int v62; // [esp+100h] [ebp-24h] int v63; // [esp+104h] [ebp-20h] float v64; // [esp+108h] [ebp-1Ch] float v65; // [esp+10Ch] [ebp-18h] float v66; // [esp+110h] [ebp-14h] float v67; // [esp+114h] [ebp-10h] float v68; // [esp+118h] [ebp-Ch] float v69; // [esp+11Ch] [ebp-8h] result = (float *)a2; v6 = this; v53 = a3; qmemcpy(&v61, &unk_ABD440, 0x24u); v7 = this[18]; v52 = a2; v28 = (int *)a5; if ( !v7 ) goto LABEL_34; v8 = *(_BYTE *)(v7 + 20); v9 = *(_DWORD *)(v7 + 12); v55 = *(float *)(v7 + 8); v10 = *(_DWORD *)(v7 + 16); v36 = *(_DWORD *)(v7 + 16); v54 = v8; if ( LODWORD(v55) < 2 ) goto LABEL_34; if ( !((*((_BYTE *)v6 + 60) >> 2) & 1) ) { sub_804930(a4, v9 + v54 * a2, v9 + v53 * v54, v10, (int)&v40, (int)&v46, (int)&v37, (int)&v50); v61 = v40; v64 = v41; v67 = v42; sub_443140((float *)&dword_ABD4A4, (float *)&v25, (float *)&v40); v62 = v25; v65 = v26; v68 = v27; *(float *)&v56 = v27 * v41 - v26 * v42; v57 = v42 * *(float *)&v25 - v27 * *(float *)&v40; v19 = v41; v58 = v26 * *(float *)&v40 - *(float *)&v25 * v41; v63 = v56; v66 = v57; v69 = v58; v20 = v42; v18 = *(float *)&v40; goto LABEL_21; } v11 = v54; v35 = v9 + v54 * a2; v51 = v9 + v53 * v54; sub_804930(a4, v9 + v54 * a2, v9 + v53 * v54, v10, (int)&v40, (int)&v46, (int)&v37, (int)&v50); if ( 0.0 != *((float *)v6 + 23) ) { v12 = a4; if ( 1.0 - *((float *)v6 + 23) > a4 ) { if ( *((float *)v6 + 23) < v12 ) goto LABEL_19; if ( !((*((_BYTE *)v6 + 60) >> 1) & 1) && !v52 ) v52 = LODWORD(v55) - 1; if ( v52 < 1 ) goto LABEL_19; *(float *)&v53 = (*((float *)v6 + 23) - v12) / (*((float *)v6 + 23) + *((float *)v6 + 23)); v55 = 1.0 - *(float *)&v53; sub_804930(*((float *)v6 + 23), v35, v51, v36, (int)&v25, (int)&v46, (int)&v37, (int)&v50); *(float *)&v51 = 1.0 - *((float *)v6 + 23); sub_804930(*(float *)&v51, v9 + v11 * (v52 - 1), v9 + v52 * v11, v36, (int)&v25, (int)&v43, (int)&v37, (int)&v49); v29 = *(float *)&v43 * *(float *)&v53; v30 = v44 * *(float *)&v53; v31 = *(float *)&v53 * v45; *(float *)&v56 = *(float *)&v46 * v55; v57 = v47 * v55; v58 = v55 * v48; v32 = *(float *)&v56 + v29; v14 = v32; v33 = v57 + v30; v15 = v33; v34 = v58 + v31; v16 = v34; } else { if ( (*((_BYTE *)v6 + 60) >> 1) & 1 || v53 != LODWORD(v55) - 1 ) v52 = v53; else v52 = 0; if ( v52 >= LODWORD(v55) - 1 ) goto LABEL_19; v13 = v51; v55 = (1.0 - v12 + *((float *)v6 + 23)) / (*((float *)v6 + 23) + *((float *)v6 + 23)); *(float *)&v53 = 1.0 - v55; *(float *)&v51 = 1.0 - *((float *)v6 + 23); sub_804930(*(float *)&v51, v35, v13, v36, (int)&v25, (int)&v46, (int)&v37, (int)&v50); sub_804930( *((float *)v6 + 23), v9 + v52 * v11, v9 + v11 * (v52 + 1), v36, (int)&v25, (int)&v43, (int)&v37, (int)&v49); v29 = *(float *)&v43 * *(float *)&v53; v30 = v44 * *(float *)&v53; v31 = *(float *)&v53 * v45; v32 = *(float *)&v46 * v55; v33 = v47 * v55; v34 = v55 * v48; *(float *)&v56 = v32 + v29; v14 = *(float *)&v56; v57 = v33 + v30; v15 = v57; v58 = v34 + v31; v16 = v58; } v48 = v16; v47 = v15; *(float *)&v46 = v14; sub_4430B0((float *)&v46); *(float *)&v50 = *(float *)&v49 * *(float *)&v53 + v55 * *(float *)&v50; v17 = (int *)sub_61E8E0((float *)&v40, (float *)&v56, (float *)&v46); v37 = *v17; v38 = *((float *)v17 + 1); v39 = *((float *)v17 + 2); } LABEL_19: v18 = *(float *)&v40; v61 = v40; v19 = v41; v64 = v41; v20 = v42; v67 = v42; *(float *)&v56 = -*(float *)&v46; v57 = -v47; v58 = -v48; v62 = v56; v65 = v57; v68 = v58; *(float *)&v56 = -*(float *)&v37; v57 = -v38; v58 = -v39; v63 = v56; v66 = v57; v69 = v58; LABEL_21: v21 = *((_WORD *)v6 + 30); if ( ((unsigned __int8)*((_WORD *)v6 + 30) >> 6) & 1 ) { *(float *)&v56 = -v18; v57 = -v19; v58 = -v20; v61 = v56; v64 = v57; v67 = v58; *(float *)&v56 = -*(float *)&v62; v57 = -v65; v58 = -v68; v62 = v56; v65 = v57; v68 = v58; } result = (float *)(*((signed __int16 *)v6 + 48) - 1); if ( *((_WORD *)v6 + 48) == 1 ) { v43 = v61; v44 = v64; v45 = v67; *(float *)&v56 = -*(float *)&v62; v57 = -v65; v58 = -v68; v61 = v56; v64 = v57; v67 = v58; v62 = v43; v65 = v44; v68 = v45; } else { result = (float *)(*((signed __int16 *)v6 + 48) - 2); if ( *((_WORD *)v6 + 48) == 2 ) { v43 = v61; v44 = v64; v45 = v67; *(float *)&v56 = -*(float *)&v63; v57 = -v66; v58 = -v69; v61 = v56; v64 = v57; v67 = v58; v63 = v43; v66 = v44; v69 = v45; } } if ( ((unsigned __int8)v21 >> 3) & 1 ) { if ( !(dword_BA4344 & 1) ) { dword_BA4344 |= 1u; flt_BA4340 = 4.0 / flt_BA45B4; } *(float *)&v49 = (double)(signed int)v6[26] * *((float *)v6 + 22); if ( *((float *)v6 + 25) > (double)*(float *)&v50 ) { *(float *)&v51 = *(float *)&v50 / *((float *)v6 + 25); *(float *)&v51 = atan(*(float *)&v51); *(float *)&v49 = *(float *)&v51 * flt_BA4340 * *(float *)&v49; v18 = *(float *)&v40; v20 = v42; v19 = v41; } v22 = v20; v23 = v19; v24 = v18; sub_85D860((float *)&v60, *(float *)&v49, v24, v23, v22); result = sub_85D940((float *)&v60, (float *)&v59, (float *)&v61); qmemcpy(&v61, result, 0x24u); } LABEL_34: qmemcpy(v28, &v61, 0x24u); return result; } // ABD4A4: using guessed type int dword_ABD4A4; // BA4340: using guessed type float flt_BA4340; // BA4344: using guessed type int dword_BA4344; // BA45B4: using guessed type float flt_BA45B4; //----- (0081F5E0) -------------------------------------------------------- double __thiscall sub_81F5E0(_DWORD *this, int a2, int a3, float a4) { int v4; // edi signed int v5; // esi int v6; // eax int v7; // edx unsigned __int8 v8; // bl int v9; // ecx float v11; // [esp+1Ch] [ebp-14h] float v12; // [esp+20h] [ebp-10h] float v13; // [esp+24h] [ebp-Ch] _DWORD *v14; // [esp+28h] [ebp-8h] float v15; // [esp+2Ch] [ebp-4h] float v16; // [esp+38h] [ebp+8h] float v17; // [esp+38h] [ebp+8h] float v18; // [esp+38h] [ebp+8h] v15 = 0.0; v4 = a2; v14 = this; v5 = 0; do { v6 = v14[18]; if ( v6 ) { v7 = *(_DWORD *)(v6 + 16); v8 = *(_BYTE *)(v6 + 20); v9 = *(_DWORD *)(v6 + 12); } else { v7 = 0; v9 = 0; v8 = 0; } v16 = flt_ABC73C[v5] * a4; ((void (__cdecl *)(_DWORD, int, int, float *))dword_BA40A8[v7])(LODWORD(v16), v9 + v4 * v8, v9 + a3 * v8, &v11); v17 = v11 * v11 + v12 * v12 + v13 * v13; v18 = sqrt(v17); ++v5; v15 = v18 * flt_ABC724[v5] + v15; } while ( v5 < 5 ); return (float)(v15 * a4); } // ABC724: using guessed type float flt_ABC724[]; // ABC73C: using guessed type float flt_ABC73C[]; // BA40A8: using guessed type int dword_BA40A8[]; //----- (0081F6B0) -------------------------------------------------------- char __thiscall sub_81F6B0(float *this, int a2) { float *v2; // edi int v4; // esi int v5; // ecx unsigned int v6; // eax __int16 v7; // cx __int16 v8; // dx char v9; // [esp+8h] [ebp-10h] char v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] char v12; // [esp+17h] [ebp-1h] v2 = this; if ( !sub_86BDE0(this, a2) || !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 18) + 28))(*(_DWORD *)(a2 + 72)) || !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 19) + 28))(*(_DWORD *)(a2 + 76)) ) { return 0; } v4 = *((_DWORD *)v2 + 20); if ( !v4 ) goto LABEL_36; if ( !*(_DWORD *)(a2 + 80) ) return 0; if ( !v4 ) { LABEL_36: if ( *(_DWORD *)(a2 + 80) ) return 0; if ( !v4 ) goto LABEL_35; } sub_81EC10(v2, &v9, &v11, &v10, &v12); v5 = *(_DWORD *)(a2 + 80); v6 = 4 * v11; if ( (unsigned int)(4 * v11) >= 4 ) { while ( *(_DWORD *)v4 == *(_DWORD *)v5 ) { v6 -= 4; v5 += 4; v4 += 4; if ( v6 < 4 ) goto LABEL_13; } return 0; } LABEL_13: if ( !v6 ) goto LABEL_35; if ( *(_BYTE *)v5 == *(_BYTE *)v4 && (v6 <= 1 || *(_BYTE *)(v5 + 1) == *(_BYTE *)(v4 + 1) && (v6 <= 2 || *(_BYTE *)(v5 + 2) == *(_BYTE *)(v4 + 2))) ) { LABEL_35: if ( *(float *)(a2 + 84) == v2[21] && !((*((_BYTE *)v2 + 60) ^ *(_BYTE *)(a2 + 60)) & 1) ) { v7 = *(_WORD *)(a2 + 60); v8 = *((_WORD *)v2 + 30); if ( !((((unsigned __int8)*((_WORD *)v2 + 30) >> 1) ^ ((unsigned __int8)*(_WORD *)(a2 + 60) >> 1)) & 1) && *((_DWORD *)v2 + 26) == *(_DWORD *)(a2 + 104) && !((((unsigned __int8)v8 >> 2) ^ ((unsigned __int8)v7 >> 2)) & 1) && !((((unsigned __int8)v8 >> 3) ^ ((unsigned __int8)v7 >> 3)) & 1) && !((((unsigned __int8)v8 >> 4) ^ ((unsigned __int8)v7 >> 4)) & 1) && !((((unsigned __int8)v8 >> 5) ^ ((unsigned __int8)v7 >> 5)) & 1) && *(float *)(a2 + 88) == v2[22] && *(float *)(a2 + 92) == v2[23] && *((_WORD *)v2 + 48) == *(_WORD *)(a2 + 96) && !((((unsigned __int8)v8 >> 6) ^ ((unsigned __int8)v7 >> 6)) & 1) ) { return 1; } } } return 0; } //----- (0081F860) -------------------------------------------------------- void *__thiscall sub_81F860(void *this, char a2) { void *v2; // esi v2 = this; sub_81EC60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0081F890) -------------------------------------------------------- double __thiscall sub_81F890(int this) { int v1; // edi int v2; // eax unsigned int v3; // esi int v4; // ebx float *v5; // eax float v6; // ST18_4 int v8; // [esp+14h] [ebp-4h] v1 = this; if ( *(float *)(this + 84) < 0.0 ) { v2 = *(_DWORD *)(this + 72); v3 = 0; if ( v2 ) { v4 = *(_DWORD *)(v2 + 8); v8 = *(_DWORD *)(v2 + 8); } else { v8 = 0; v4 = 0; } operator delete(*(void **)(this + 80)); v5 = (float *)operator new(4 * v4); *(_DWORD *)(v1 + 80) = v5; *v5 = 0.0; if ( (unsigned int)(v4 - 1) > 0 ) { do { v6 = sub_81F5E0((_DWORD *)v1, v3, v3 + 1, 1.0); *(float *)(*(_DWORD *)(v1 + 80) + 4 * v3 + 4) = *(float *)(*(_DWORD *)(v1 + 80) + 4 * v3) + v6; ++v3; } while ( v3 < v8 - 1 ); v4 = v8; } *(float *)(v1 + 84) = *(float *)(*(_DWORD *)(v1 + 80) + 4 * v4 - 4); } return *(float *)(v1 + 84); } //----- (0081F940) -------------------------------------------------------- int __thiscall sub_81F940(int this, float a2, int a3, int a4, int a5) { int v5; // eax int v6; // edi long double v7; // st7 int result; // eax long double v9; // st6 unsigned int v10; // esi int v11; // ebx double v12; // st7 float *v13; // edx int v14; // eax signed int v15; // edi double v16; // st7 int v17; // eax int v18; // edx unsigned __int8 v19; // bl int v20; // ecx double v21; // st7 float v22; // [esp+1Ch] [ebp-28h] float v23; // [esp+20h] [ebp-24h] float v24; // [esp+24h] [ebp-20h] float v25; // [esp+28h] [ebp-1Ch] double v26; // [esp+2Ch] [ebp-18h] float v27; // [esp+34h] [ebp-10h] _DWORD *v28; // [esp+38h] [ebp-Ch] double v29; // [esp+3Ch] [ebp-8h] float v30; // [esp+4Ch] [ebp+8h] float v31; // [esp+4Ch] [ebp+8h] float v32; // [esp+4Ch] [ebp+8h] signed int v33; // [esp+4Ch] [ebp+8h] v5 = *(_DWORD *)(this + 72); v28 = (_DWORD *)this; if ( v5 ) v6 = *(_DWORD *)(v5 + 8); else v6 = 0; v7 = a2; if ( 0.0 == a2 ) { result = a3; *(_DWORD *)a3 = 0; *(_DWORD *)a4 = 1; *(float *)a5 = 0.0; } else { v9 = 1.0; if ( v7 < 0.0 ) { v30 = fmod(v7, 1.0); v31 = v30 + 1.0; v9 = 1.0; v7 = v31; } if ( 1.0 == v7 ) { *(_DWORD *)a3 = v6 - 2; *(_DWORD *)a4 = v6 - 1; result = a5; *(float *)a5 = 1.0; } else { if ( v7 > 1.0 ) { v32 = fmod(v7, v9); v7 = v32; } v10 = 0; v11 = 1; *((float *)&v26 + 1) = v7 * *(float *)(this + 84); v33 = 1; if ( v6 != 1 ) { v12 = *((float *)&v26 + 1); v13 = (float *)(v28[20] + 4); while ( *v13 < v12 ) { ++v10; ++v11; ++v13; if ( v10 >= v6 - 1 ) goto LABEL_18; } v14 = v28[20]; v27 = v12 - *(float *)(v14 + 4 * v10); *((float *)&v29 + 1) = v27 / (*(float *)(v14 + 4 * v11) - *(float *)(v14 + 4 * v10)); LABEL_18: v33 = v11; } v15 = 0; do { v16 = sub_81F5E0(v28, v10, v11, *((float *)&v29 + 1)); *((float *)&v26 + 1) = v16 - v27; v25 = fabs(*((float *)&v26 + 1)); if ( v25 <= 0.00009999999747378752 ) break; v17 = v28[18]; if ( v17 ) { v18 = *(_DWORD *)(v17 + 16); v19 = *(_BYTE *)(v17 + 20); v20 = *(_DWORD *)(v17 + 12); } else { v18 = 0; v20 = 0; v19 = 0; } ((void (__cdecl *)(_DWORD, unsigned int, int, float *))dword_BA40A8[v18])( HIDWORD(v29), v20 + v10 * v19, v20 + v33 * v19, &v22); v29 = *((float *)&v29 + 1); v26 = *((float *)&v26 + 1); v25 = v22 * v22 + v23 * v23 + v24 * v24; v25 = sqrt(v25); v11 = v33; ++v15; *((float *)&v29 + 1) = v29 - v26 / v25; } while ( v15 < 32 ); result = a3; v21 = *((float *)&v29 + 1); *(_DWORD *)a3 = v10; *(_DWORD *)a4 = v11; *(float *)a5 = v21; } } return result; } // BA40A8: using guessed type int dword_BA40A8[]; //----- (0081FB40) -------------------------------------------------------- int __thiscall sub_81FB40(int this, float a2, int a3, int a4, int a5) { int v5; // esi int result; // eax int v7; // eax int v8; // edi unsigned __int8 v9; // cl float *v10; // esi double v11; // st7 int v12; // edx unsigned int v13; // ebx unsigned int v14; // ecx int v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] char v17; // [esp+2Bh] [ebp+Bh] v5 = this; v15 = this; if ( (*(_BYTE *)(this + 60) >> 4) & 1 ) { sub_81F940(this, a2, a3, a4, a5); result = *(_DWORD *)a3; *(_DWORD *)(v5 + 64) = *(_DWORD *)a3; } else { v7 = *(_DWORD *)(this + 72); if ( v7 ) { v8 = *(_DWORD *)(v7 + 8); v9 = *(_BYTE *)(v7 + 20); v10 = *(float **)(v7 + 12); v16 = *(_DWORD *)(v7 + 8); } else { v10 = 0; v16 = 0; v9 = 0; v8 = 0; } v11 = a2; if ( *v10 < (double)a2 ) { v12 = v9; v13 = v8 - 1; if ( *(float *)((char *)v10 + (v8 - 1) * v9) > v11 ) { v14 = *(_DWORD *)(v15 + 64); v17 = 1; if ( v14 >= v13 ) { LABEL_19: result = a5; } else { while ( *(float *)((char *)v10 + v14 * v12) != v11 && (*(float *)((char *)v10 + v14 * v12) >= v11 || *(float *)((char *)v10 + v12 * (v14 + 1)) <= v11) ) { if ( v14 == v16 - 2 && v17 ) { v14 = 0; v17 = 0; } else { ++v14; } if ( v14 >= v13 ) goto LABEL_19; } *(_DWORD *)(v15 + 64) = v14; result = v14 + 1; } *(float *)a5 = (v11 - *(float *)((char *)v10 + v14 * v12)) / (*(float *)((char *)v10 + result * v12) - *(float *)((char *)v10 + v14 * v12)); *(_DWORD *)a3 = v14; *(_DWORD *)a4 = result; } else { result = a4; *(_DWORD *)a3 = v8 - 2; *(_DWORD *)a4 = v13; *(float *)a5 = 1.0; } } else { result = a5; *(_DWORD *)a3 = 0; *(_DWORD *)a4 = 1; *(float *)a5 = 0.0; } } return result; } //----- (0081FCA0) -------------------------------------------------------- int __thiscall sub_81FCA0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST3C_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v10)(int, int *, signed int, signed int *, signed int); // edx int v11; // ST28_4 int v12; // eax int v13; // ST14_4 void (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v15)(int, int *, signed int, signed int *, signed int); // edx int v16; // ST00_4 int v18; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_86C630(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, v3 + 15, 2, &a2, 1); } else { *((_WORD *)v3 + 30) = *(_WORD *)(v2 + 414) >> 5; } v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, &v18, 4, &a2, 1); v3[26] = v18; v10 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); a2 = 4; v10(v11, v3 + 22, 4, &a2, 1); v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v12 + 4); a2 = 4; v14(v13, v3 + 23, 4, &a2, 1); v15 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v16 = *(_DWORD *)(v2 + 352); a2 = 2; v15(v16, v3 + 24, 2, &a2, 1); sub_876290((void **)v2); return sub_876290((void **)v2); } //----- (0081FD90) -------------------------------------------------------- _DWORD *__userpurge sub_81FD90@(_DWORD *a1@, double a2@, _DWORD *a3) { int v3; // esi int v4; // eax int v5; // edi int v6; // ebx int v7; // eax int v8; // edi int v9; // ebx _DWORD *result; // eax int v11; // ecx int v12; // edx v3 = (int)a1; sub_86C590(a1, a3); v4 = sub_875AD0(a3); v5 = *(_DWORD *)(v3 + 72); v6 = v4; if ( v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v3 + 72) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } v7 = sub_875AD0(a3); v8 = *(_DWORD *)(v3 + 76); v9 = v7; if ( v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v3 + 76) = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } *(_WORD *)(v3 + 60) |= 1u; if ( (*(_BYTE *)(v3 + 60) >> 4) & 1 && *(_BYTE *)(v3 + 60) & 1 ) { a2 = sub_81F890(v3); *(float *)(v3 + 84) = a2; *(_WORD *)(v3 + 60) &= 0xFFFEu; } result = *(_DWORD **)(v3 + 72); if ( result ) { v11 = result[2]; v12 = result[4]; result = (_DWORD *)result[3]; if ( v11 ) { result = (_DWORD *)((int (__cdecl *)(_DWORD *, int))dword_BA41C8[v12])(result, v11); *(float *)(v3 + 100) = a2; } } return result; } // BA41C8: using guessed type int dword_BA41C8[]; //----- (0081FE80) -------------------------------------------------------- int __thiscall sub_81FE80(_DWORD *this, signed int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, _DWORD *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_86C780(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 15, 2, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 26, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 22, 4, &a2, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 23, 4, &a2, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v16 + 8); a2 = 2; v18(v17, v3 + 24, 2, &a2, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[18]); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[19]); } //----- (0081FF60) -------------------------------------------------------- unsigned int __thiscall sub_81FF60(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4348); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0081FFB0) -------------------------------------------------------- char __thiscall sub_81FFB0(int this, int a2) { int v2; // ebx int v3; // eax int v4; // esi int v5; // edi bool v6; // zf _DWORD *v7; // ebx int v9; // [esp+24h] [ebp-38h] int v10; // [esp+48h] [ebp-14h] int v11; // [esp+4Ch] [ebp-10h] int v12; // [esp+50h] [ebp-Ch] char v13[4]; // [esp+54h] [ebp-8h] int v14; // [esp+58h] [ebp-4h] v2 = this; v3 = *(_DWORD *)(this + 76); if ( v3 ) { v4 = *(_DWORD *)(v3 + 12); v5 = *(_DWORD *)(v3 + 8); v14 = *(_DWORD *)(v3 + 16); if ( v4 ) { v3 = *(_DWORD *)(this + 72); if ( v3 ) { v6 = *(_DWORD *)(v3 + 12) == 0; v13[0] = *(_BYTE *)(v3 + 20); if ( !v6 ) { LOBYTE(v3) = sub_80FFE0((float *)this, *(float *)&a2); if ( !(_BYTE)v3 ) { *(float *)&a2 = sub_803DC0(*(float *)(v2 + 40), v4, v14, v5, v2 + 68, v13[0]); sub_81FB40(v2, *(float *)&a2, (int)v13, (int)&v14, (int)&a2); if ( (*(_BYTE *)(v2 + 60) >> 5) & 1 ) { sub_81ED90((_DWORD *)v2, *(int *)v13, v14, *(float *)&a2, (int)&v9); qmemcpy((void *)(*(_DWORD *)(v2 + 48) + 52), &v9, 0x24u); } sub_81ED30((_DWORD *)v2, (int)&v10, *(int *)v13, v14, *(float *)&a2); v7 = *(_DWORD **)(v2 + 48); v7[22] = v10; v7[23] = v11; LOBYTE(v3) = v12; v7[24] = v12; } } } } } return v3; } //----- (008200C0) -------------------------------------------------------- char __thiscall sub_8200C0(void *this, int a2, _DWORD **a3) { int v3; // esi void *v4; // edi int v5; // ecx int v6; // eax int v7; // ebx int v8; // ecx int v9; // eax int v10; // ebx char result; // al int v12; // eax int v13; // ebx void *v14; // eax int v15; // [esp+14h] [ebp+8h] int v16; // [esp+18h] [ebp+Ch] v3 = a2; v4 = this; sub_86C130(this, a2, a3); *(_WORD *)(a2 + 60) = *((_WORD *)v4 + 30); v5 = *((_DWORD *)v4 + 18); if ( v5 ) { v6 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 8))(a3); v7 = *(_DWORD *)(a2 + 72); v15 = v6; if ( v7 != v6 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v6 = v15; } *(_DWORD *)(v3 + 72) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } } v8 = *((_DWORD *)v4 + 19); if ( v8 ) { v9 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v8 + 8))(a3); v10 = *(_DWORD *)(v3 + 76); v16 = v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v9 = v16; } *(_DWORD *)(v3 + 76) = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } } if ( (*((_BYTE *)v4 + 60) >> 2) & 1 ) *(_WORD *)(v3 + 60) |= 4u; else *(_WORD *)(v3 + 60) &= 0xFFFBu; if ( (*((_BYTE *)v4 + 60) >> 3) & 1 ) *(_WORD *)(v3 + 60) |= 8u; else *(_WORD *)(v3 + 60) &= 0xFFF7u; *(_DWORD *)(v3 + 104) = *((_DWORD *)v4 + 26); if ( (*((_BYTE *)v4 + 60) >> 4) & 1 ) { *(_WORD *)(v3 + 60) |= 0x10u; if ( *(_BYTE *)(v3 + 60) & 1 ) { *(float *)(v3 + 84) = sub_81F890(v3); *(_WORD *)(v3 + 60) &= 0xFFFEu; } } else { *(_WORD *)(v3 + 60) &= 0xFFEFu; } if ( (*((_BYTE *)v4 + 60) >> 5) & 1 ) *(_WORD *)(v3 + 60) |= 0x20u; else *(_WORD *)(v3 + 60) &= 0xFFDFu; *(float *)(v3 + 88) = *((float *)v4 + 22); *(float *)(v3 + 92) = *((float *)v4 + 23); *(_WORD *)(v3 + 96) = *((_WORD *)v4 + 48); result = *((_BYTE *)v4 + 60) >> 6; if ( result & 1 ) *(_WORD *)(v3 + 60) |= 0x40u; else *(_WORD *)(v3 + 60) &= 0xFFBFu; if ( (*((_BYTE *)v4 + 60) >> 1) & 1 ) { *(_WORD *)(v3 + 60) |= 2u; } else { result = -3; *(_WORD *)(v3 + 60) &= 0xFFFDu; } if ( *((_DWORD *)v4 + 20) ) { v12 = *((_DWORD *)v4 + 18); if ( v12 ) v13 = *(_DWORD *)(v12 + 8); else v13 = 0; v14 = operator new(4 * v13); *(_DWORD *)(v3 + 80) = v14; result = memcpy_s(v14, 4 * v13, *((const void **)v4 + 20), 4 * v13); } *(float *)(v3 + 84) = *((float *)v4 + 21); return result; } //----- (00820310) -------------------------------------------------------- int __thiscall sub_820310(void *this, _DWORD **a2) { void *v2; // ebx float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x6Cu); v4 = (int)v3; if ( v3 ) { sub_86C310(v3); *(_DWORD *)v4 = &off_A21884; *(_DWORD *)(v4 + 72) = 0; *(_DWORD *)(v4 + 76) = 0; *(float *)(v4 + 88) = 0.0; *(float *)(v4 + 92) = 0.0; *(float *)(v4 + 100) = 0.0; *(_DWORD *)(v4 + 64) = 0; *(float *)(v4 + 84) = -1.0; *(_DWORD *)(v4 + 68) = 0; *(_DWORD *)(v4 + 104) = 1; *(_WORD *)(v4 + 96) = 0; *(_DWORD *)(v4 + 80) = 0; *(_WORD *)(v4 + 60) = 3; } else { v4 = 0; } sub_8200C0(v2, v4, a2); return v4; } // A21884: using guessed type int (__thiscall *off_A21884)(void *, char); //----- (00820390) -------------------------------------------------------- __int16 __thiscall sub_820390(_WORD *this) { return this[34]; } //----- (008203A0) -------------------------------------------------------- int __thiscall sub_8203A0(_DWORD *this, unsigned __int16 a2) { return this[15] + 48 * a2; } //----- (008203C0) -------------------------------------------------------- int __thiscall sub_8203C0(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, int a6) { return this[15] + 48 * a2; } //----- (008203E0) -------------------------------------------------------- int __thiscall sub_8203E0(_WORD *this, float a2, float a3) { _WORD *v3; // edi int result; // eax int v5; // esi v3 = this; result = 0; v5 = 0; if ( this[34] > 0u ) { do result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)(*((_DWORD *)v3 + 15) + 48 * (unsigned __int16)v5++) + 116))( LODWORD(a2), LODWORD(a3)); while ( (unsigned __int16)v5 < v3[34] ); } return result; } //----- (00820430) -------------------------------------------------------- int __stdcall sub_820430(int a1, int a2) { return (*(int (**)(void))(*(_DWORD *)a1 + 104))(); } //----- (00820450) -------------------------------------------------------- int __thiscall sub_820450(_DWORD *this, _DWORD *a2) { return sub_898380(this, a2); } //----- (00820460) -------------------------------------------------------- char __thiscall sub_820460(_DWORD *this, int a2) { return sub_823790(this, a2); } //----- (00820470) -------------------------------------------------------- char __thiscall sub_820470(float *this, int a2) { float *v2; // ebx unsigned __int16 v4; // ax unsigned __int16 v5; // si int v6; // edx int v7; // eax int v8; // ecx _DWORD *v9; // edx float *v10; // [esp+8h] [ebp-4h] v2 = this; v10 = this; if ( !sub_8983A0(this, a2) ) return 0; v4 = *((_WORD *)v2 + 34); if ( *(_WORD *)(a2 + 68) != v4 ) return 0; v5 = 0; if ( v4 <= 0u ) return 1; while ( 1 ) { v6 = *((_DWORD *)v2 + 16); v7 = 4 * v5; v8 = *(_DWORD *)(v6 + v7); v9 = (_DWORD *)(v7 + v6); if ( v8 ) { if ( !*(_DWORD *)(v7 + *(_DWORD *)(a2 + 64)) ) return 0; v2 = v10; if ( v8 ) goto LABEL_16; } if ( *(_DWORD *)(v7 + *(_DWORD *)(a2 + 64)) ) return 0; v2 = v10; if ( v8 ) { LABEL_16: if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v7 + *(_DWORD *)(a2 + 64)) + 28))( *(_DWORD *)(v7 + *(_DWORD *)(a2 + 64)), *v9) ) return 0; } if ( ++v5 >= *((_WORD *)v2 + 34) ) return 1; } } //----- (00820510) -------------------------------------------------------- LONG __thiscall sub_820510(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx v1 = this; v2 = (void (__stdcall ***)(signed int))this[15]; *v1 = &NiMultiTargetTransformController::`vftable'; if ( v2 ) { if ( *(v2 - 1) ) { (**v2)(3); operator delete((void *)v1[16]); return sub_86C3C0(v1); } operator delete(v2 - 1); } operator delete((void *)v1[16]); return sub_86C3C0(v1); } // A20974: using guessed type void *NiMultiTargetTransformController::`vftable'; //----- (00820570) -------------------------------------------------------- int __thiscall sub_820570(_WORD *this, float a2) { _WORD *v2; // edi int result; // eax int v4; // edx int v5; // esi bool v6; // zf int *v7; // eax int v8; // eax int v9; // eax int v10; // eax float v11; // [esp+18h] [ebp-28h] int v12; // [esp+1Ch] [ebp-24h] int v13; // [esp+20h] [ebp-20h] int v14; // [esp+24h] [ebp-1Ch] float v15; // [esp+28h] [ebp-18h] int v16; // [esp+2Ch] [ebp-14h] int v17; // [esp+30h] [ebp-10h] float v18; // [esp+34h] [ebp-Ch] float v19; // [esp+38h] [ebp-8h] int v20; // [esp+3Ch] [ebp-4h] v18 = -3.4028235e38; v2 = this; v11 = *(float *)&dword_ABCEB0; v12 = dword_ABCEB4; v14 = dword_BA44A0; v15 = *(float *)&dword_BA44A4; v13 = dword_ABCEB8; v17 = dword_BA44AC; result = 0; v16 = dword_BA44A8; v20 = 0; if ( this[34] > 0u ) { do { v4 = *((_DWORD *)v2 + 16); v5 = (unsigned __int16)result; v6 = *(_DWORD *)(v4 + 4 * (unsigned __int16)result) == 0; v7 = (int *)(v4 + 4 * (unsigned __int16)result); if ( !v6 ) { v8 = *v7; if ( (*(_BYTE *)(v8 + 28) >> 1) & 1 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)(48 * v5 + *((_DWORD *)v2 + 15)) + 60))( LODWORD(a2), v8, &v11) ) { if ( -3.4028235e38 != v11 ) { v9 = *(_DWORD *)(*((_DWORD *)v2 + 16) + 4 * v5); *(float *)(v9 + 88) = v11; *(_DWORD *)(v9 + 92) = v12; *(_DWORD *)(v9 + 96) = v13; } if ( -3.4028235e38 != v15 ) sub_694FD0((float *)&v14, (float *)(*(_DWORD *)(*((_DWORD *)v2 + 16) + 4 * v5) + 52)); if ( -3.4028235e38 != v18 ) { v10 = *(_DWORD *)(*((_DWORD *)v2 + 16) + 4 * v5); v19 = fabs(v18); *(float *)(v10 + 100) = v19; } } } } result = v20 + 1; v20 = result; } while ( (unsigned __int16)result < v2[34] ); } return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (008206C0) -------------------------------------------------------- int __thiscall sub_8206C0(_DWORD *this, unsigned __int16 a2) { return *(_DWORD *)(*(_DWORD *)(this[16] + 4 * a2) + 8); } //----- (008206E0) -------------------------------------------------------- unsigned __int16 __thiscall sub_8206E0(int this, const char *a2) { unsigned __int16 result; // ax unsigned __int16 v3; // si int v4; // edi if ( !a2 ) return -1; v3 = *(_WORD *)(this + 68); result = 0; if ( v3 <= 0u ) return -1; v4 = *(_DWORD *)(this + 64); while ( !*(_DWORD *)(v4 + 4 * result) || strcmp(*(const char **)(*(_DWORD *)(v4 + 4 * result) + 8), a2) ) { if ( ++result >= v3 ) return -1; } return result; } //----- (00820760) -------------------------------------------------------- void __thiscall sub_820760(int this) { int v1; // esi unsigned __int16 v2; // di int v3; // ecx float v4; // [esp+4h] [ebp-8h] float v5; // [esp+8h] [ebp-4h] v1 = this; if ( !((*(_BYTE *)(this + 8) >> 5) & 1) ) { *(float *)(this + 20) = 3.4028235e38; v2 = 0; *(float *)(this + 24) = -3.4028235e38; if ( *(_WORD *)(this + 68) > 0u ) { do { v3 = *(_DWORD *)(v1 + 60) + 48 * v2; v4 = -3.4028235e38; v5 = 3.4028235e38; (*(void (__stdcall **)(float *, float *))(*(_DWORD *)v3 + 112))(&v5, &v4); if ( *(float *)(v1 + 20) > (double)v5 ) *(float *)(v1 + 20) = v5; if ( *(float *)(v1 + 24) < (double)v4 ) *(float *)(v1 + 24) = v4; ++v2; } while ( v2 < *(_WORD *)(v1 + 68) ); } if ( 3.4028235e38 == *(float *)(v1 + 20) && -3.4028235e38 == *(float *)(v1 + 24) ) sub_82F640(v1); } } //----- (00820840) -------------------------------------------------------- void __thiscall sub_820840(_WORD *this, unsigned __int16 a2) { unsigned __int16 v2; // si _WORD *v3; // ebx int v4; // edi int v5; // ecx char *v6; // eax int v7; // eax int v8; // ebx float *v9; // esi int v10; // esi void *v11; // eax _WORD *v12; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] int v14; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; v12 = this; this[34] = a2; if ( a2 ) { v4 = a2; v5 = 48 * a2 | -(48 * (unsigned __int64)a2 >> 32 != 0); v6 = (char *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { v7 = (int)(v6 + 4); *(_DWORD *)(v7 - 4) = a2; v8 = a2 - 1; v13 = v7; v9 = (float *)v7; if ( v8 >= 0 ) { do { sub_82C380(v9); v9 += 12; --v8; } while ( v8 >= 0 ); v7 = v13; } v3 = v12; v2 = a2; } else { v7 = 0; } *((_DWORD *)v3 + 15) = v7; if ( v2 > 0u ) { v10 = 0; v14 = a2; do { InterlockedIncrement((volatile LONG *)(v10 + *((_DWORD *)v3 + 15) + 4)); v10 += 48; --v14; } while ( v14 ); } v11 = operator new(4 * v4); *((_DWORD *)v3 + 16) = v11; memset(v11, 0, 4 * v4); } } //----- (00820920) -------------------------------------------------------- char *__thiscall sub_820920(void *this, char a2) { char *v2; // ebx char *result; // eax int v4; // edi _DWORD *v5; // esi int v6; // edi char *v7; // [esp+4h] [ebp-4h] v2 = (char *)this; if ( a2 & 2 ) { result = (char *)this - 4; v4 = *((_DWORD *)this - 1); v5 = (char *)this + 48 * v4; v6 = v4 - 1; v7 = (char *)this - 4; if ( v6 >= 0 ) { do { v5 -= 12; sub_82FE50(v5); --v6; } while ( v6 >= 0 ); result = v7; } if ( a2 & 1 ) { operator delete(result); result = v7; } } else { sub_82FE50(this); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (00820990) -------------------------------------------------------- float *__thiscall sub_820990(_DWORD *this, unsigned __int16 a2) { int v2; // esi int v3; // eax int v4; // ecx int v5; // edx float *v6; // eax char v8; // [esp-20h] [ebp-58h] int v9; // [esp-1Ch] [ebp-54h] int v10; // [esp-18h] [ebp-50h] int v11; // [esp-14h] [ebp-4Ch] int v12; // [esp-10h] [ebp-48h] int v13; // [esp-Ch] [ebp-44h] int v14; // [esp-8h] [ebp-40h] int v15; // [esp-4h] [ebp-3Ch] int v16; // [esp+8h] [ebp-30h] int v17; // [esp+Ch] [ebp-2Ch] int v18; // [esp+10h] [ebp-28h] int v19; // [esp+14h] [ebp-24h] int v20; // [esp+18h] [ebp-20h] int v21; // [esp+1Ch] [ebp-1Ch] int v22; // [esp+20h] [ebp-18h] float v23; // [esp+24h] [ebp-14h] int v24; // [esp+28h] [ebp-10h] int v25; // [esp+2Ch] [ebp-Ch] int v26; // [esp+30h] [ebp-8h] int v27; // [esp+34h] [ebp-4h] v2 = *(_DWORD *)(this[16] + 4 * a2); sub_874F50((float *)&v24, (float *)(v2 + 52)); v3 = *(_DWORD *)(v2 + 88); v4 = *(_DWORD *)(v2 + 92); v5 = *(_DWORD *)(v2 + 96); v23 = *(float *)(v2 + 100); v16 = v3; v17 = v4; v18 = v5; v19 = v24; v20 = v25; v21 = v26; v22 = v27; v6 = (float *)operator new(0x3Cu); if ( !v6 ) return 0; qmemcpy(&v8, &v16, 0x20u); return sub_819A30(v6, v8, v9, v10, v11, v12, v13, v14, v15); } //----- (00820A20) -------------------------------------------------------- void __thiscall sub_820A20(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // edi unsigned __int16 i; // si v3 = this; sub_82F600(this, a2, a3); sub_820840((_WORD *)a2, v3[34]); for ( i = 0; i < v3[34]; ++i ) sub_82C490((float *)(48 * i + *((_DWORD *)v3 + 15)), 48 * i + *(_DWORD *)(a2 + 60), a3); } //----- (00820A80) -------------------------------------------------------- int __thiscall sub_820A80(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi int v3; // esi int result; // eax int v5; // ebx int v6; // ecx _DWORD *v7; // esi _DWORD *v8; // edi int v9; // [esp+8h] [ebp-10h] int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] _DWORD *v12; // [esp+14h] [ebp-4h] v2 = a2; v3 = (int)this; v12 = this; sub_86C220(this, (int)a2); sub_8C4C90(*a2, v3, &v11); result = 0; v9 = v11; v11 = 0; if ( *(_WORD *)(v3 + 68) > 0u ) { while ( 1 ) { v5 = (unsigned __int16)result; (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)(*(_DWORD *)(v3 + 60) + 48 * (unsigned __int16)result) + 40))( 48 * (unsigned __int16)result + *(_DWORD *)(v3 + 60), v2); v6 = *(_DWORD *)(v3 + 64); if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = (_DWORD *)*v2; v10 = *(_DWORD *)(v6 + 4 * v5); v8 = *(_DWORD **)(v7[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*v2 + 4))(*v2, *(_DWORD *)(v6 + 4 * v5))); if ( v8 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v7 + 8))(v7, v10, v8[1]) ) { v8 = (_DWORD *)*v8; if ( !v8 ) goto LABEL_10; } *(_DWORD *)(*(_DWORD *)(v9 + 64) + 4 * v5) = v8[2]; } LABEL_10: v3 = (int)v12; } result = v11 + 1; v11 = result; if ( (unsigned __int16)result >= *(_WORD *)(v3 + 68) ) break; v2 = a2; } } return result; } //----- (00820B50) -------------------------------------------------------- int __thiscall sub_820B50(_WORD *this, _DWORD **a2) { _WORD *v2; // ebx float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = (int)v3; if ( v3 ) { sub_82F610(v3); *(_DWORD *)v4 = &NiMultiTargetTransformController::`vftable'; *(_DWORD *)(v4 + 60) = 0; *(_DWORD *)(v4 + 64) = 0; *(_WORD *)(v4 + 68) = 0; sub_820A20(v2, v4, a2); result = v4; } else { sub_820A20(v2, 0, a2); result = 0; } return result; } // A20974: using guessed type void *NiMultiTargetTransformController::`vftable'; //----- (00820BC0) -------------------------------------------------------- float *sub_820BC0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_82F610(v0); *((_WORD *)v1 + 34) = 0; *(_DWORD *)v1 = &NiMultiTargetTransformController::`vftable'; v1[15] = 0.0; v1[16] = 0.0; return v1; } // A20974: using guessed type void *NiMultiTargetTransformController::`vftable'; //----- (00820C00) -------------------------------------------------------- void __thiscall sub_820C00(int *this, _DWORD *a2) { int *v2; // esi int v3; // eax void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx int v5; // ebx int v6; // eax int v7; // edx int v8; // [esp+Ch] [ebp-4h] v2 = this; sub_82F660(this, (signed int)a2); v3 = a2[88]; v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v3 + 4); v8 = 2; v4(v3, v2 + 17, 2, &v8, 1); sub_820840(v2, *((_WORD *)v2 + 34)); v5 = 0; if ( *((_WORD *)v2 + 34) > 0u ) { do { v6 = sub_876300(a2); v7 = (unsigned __int16)v5++; *(_DWORD *)(v2[16] + 4 * v7) = v6; } while ( (unsigned __int16)v5 < *((_WORD *)v2 + 34) ); } } //----- (00820C70) -------------------------------------------------------- int __thiscall sub_820C70(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // ebx int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax int result; // eax int v8; // esi v2 = (_DWORD *)a2; v3 = this; sub_898390(this, a2); v4 = v2[89]; v5 = v4; v6 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 2; result = v6(v5, v3 + 17, 2, &a2, 1); v8 = 0; if ( *((_WORD *)v3 + 34) > 0u ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))( v2, *(_DWORD *)(v3[16] + 4 * (unsigned __int16)v8++)); while ( (unsigned __int16)v8 < *((_WORD *)v3 + 34) ); } return result; } //----- (00820CE0) -------------------------------------------------------- int __thiscall sub_820CE0(unsigned __int16 *this, _DWORD *a2) { unsigned __int16 *v2; // ebx char *v3; // eax unsigned int v4; // edi char *v5; // eax unsigned int v6; // edi int result; // eax int v8; // edi char *v9; // eax unsigned int v10; // edi char *v11; // ebx unsigned __int16 *v12; // [esp+Ch] [ebp-40Ch] char *v13; // [esp+10h] [ebp-408h] char DstBuf; // [esp+14h] [ebp-404h] v2 = this; v12 = this; sub_82F6D0(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4350); v4 = a2[3]; v13 = v3; if ( v4 >= a2[2] ) sub_8237A0(a2, v4 + a2[5]); sub_823870(a2, v4, &v13); v5 = sub_8785F0((int)"m_usNumInterps", v2[34]); v6 = a2[3]; v13 = v5; if ( v6 >= a2[2] ) sub_8237A0(a2, v6 + a2[5]); sub_823870(a2, v6, &v13); result = 0; v13 = 0; if ( v2[34] > 0u ) { do { v8 = (unsigned __int16)result; if ( *(_DWORD *)(*((_DWORD *)v2 + 16) + 4 * (unsigned __int16)result) ) { sub_7FF6E0(&DstBuf, 0x400u, "Target%d", (unsigned __int16)result); v9 = sub_878700((int)&DstBuf, *(_DWORD *)(*((_DWORD *)v2 + 16) + 4 * v8)); v10 = a2[3]; v11 = v9; if ( v10 < a2[2] || (sub_8237A0(a2, v10 + a2[5]), v10 < a2[2]) ) { if ( v10 < a2[3] ) { if ( v11 ) { if ( !*(_DWORD *)(a2[1] + 4 * v10) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v10) ) { --a2[4]; } } else { a2[3] = v10 + 1; if ( v11 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v10) = v11; } v2 = v12; } result = (int)(v13 + 1); v13 = (char *)result; } while ( (unsigned __int16)result < v2[34] ); } return result; } //----- (00820E60) -------------------------------------------------------- double __thiscall sub_820E60(float *this) { return this[2]; } //----- (00820E70) -------------------------------------------------------- _DWORD *sub_820E70() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; *v1 = &NiMorphData::`vftable'; return v1; } // A2190C: using guessed type void *NiMorphData::`vftable'; //----- (00820EB0) -------------------------------------------------------- char *sub_820EB0() { return dword_BA4358; } //----- (00820EC0) -------------------------------------------------------- char *__thiscall sub_820EC0(void *this, char a2) { char *v2; // esi char *v3; // ecx int v4; // ebx char *v5; // edi void *v6; // eax int v7; // esi char *result; // eax int v9; // edi int v10; // [esp+8h] [ebp-4h] v2 = (char *)this; if ( a2 & 2 ) { v3 = (char *)this - 4; v4 = *((_DWORD *)v2 - 1) - 1; v10 = (int)(v2 - 4); if ( v4 >= 0 ) { v5 = &v2[16 * *((_DWORD *)v2 - 1) + 12]; do { v6 = (void *)*((_DWORD *)v5 - 7); v5 -= 16; operator delete(v6); operator delete(*((void **)v5 - 2)); v7 = *(_DWORD *)v5; if ( *(_DWORD *)v5 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); --v4; } while ( v4 >= 0 ); v3 = (char *)v10; } if ( a2 & 1 ) { operator delete(v3); v3 = (char *)v10; } result = v3; } else { operator delete(*(void **)this); operator delete(*((void **)v2 + 1)); v9 = *((_DWORD *)v2 + 3); if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (00820F90) -------------------------------------------------------- void __thiscall sub_820F90(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi _DWORD *v8; // ebx v4 = this; if ( a3 ) { if ( !this[4] ) { v5 = operator new(0x18u); v6 = v5; if ( v5 ) { sub_85BA50(v5); *v6 = &NiFloatData::`vftable'; v6[2] = 0; v6[3] = 0; v6[4] = 0; *((_BYTE *)v6 + 20) = 0; } else { v6 = 0; } v7 = v4[4]; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[4] = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } } sub_826D00((_DWORD *)v4[4], a2, a3, a4); v4[5] = 0; } else { v8 = (_DWORD *)this[4]; if ( v8 ) sub_826D00(v8, 0, 0, 0); } } // A211DC: using guessed type void *NiFloatData::`vftable'; //----- (00821050) -------------------------------------------------------- bool __thiscall sub_821050(float **this, int a2, unsigned int a3) { unsigned int v3; // esi float *v4; // edx int v5; // edi const char *v6; // eax v3 = 0; if ( a3 ) { v4 = *this; v5 = *(_DWORD *)a2 - (_DWORD)*this; while ( *(float *)((char *)v4 + v5) == *v4 && *(float *)((char *)v4 + v5 + 4) == v4[1] && *(float *)((char *)v4 + v5 + 8) == v4[2] ) { ++v3; v4 += 3; if ( v3 >= a3 ) goto LABEL_7; } return 0; } LABEL_7: v6 = (const char *)this[1]; if ( v6 ) { if ( *(_DWORD *)(a2 + 4) ) return sub_96C4B0(v6, *(const char **)(a2 + 4)) == 0; } else if ( !*(_DWORD *)(a2 + 4) ) { return sub_96C4B0(v6, *(const char **)(a2 + 4)) == 0; } return 0; } //----- (00821110) -------------------------------------------------------- char __thiscall sub_821110(_DWORD *this, int a2) { _DWORD *v2; // edi unsigned int v4; // eax unsigned int v5; // esi int v6; // ebx int v7; // edx float **v8; // ecx v2 = this; if ( !sub_85BB20(this, a2) ) return 0; v4 = v2[2]; if ( v4 != *(_DWORD *)(a2 + 8) || v2[3] != *(_DWORD *)(a2 + 12) || *((_BYTE *)v2 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v5 = 0; if ( !v4 ) return 1; v6 = 0; while ( 1 ) { v7 = v5 >= *(_DWORD *)(a2 + 8) ? 0 : v6 + *(_DWORD *)(a2 + 16); v8 = (float **)(v5 >= v4 ? 0 : v6 + v2[4]); if ( !sub_821050(v8, v7, v2[3]) ) break; v4 = v2[2]; ++v5; v6 += 16; if ( v5 >= v4 ) return 1; } return 0; } //----- (008211A0) -------------------------------------------------------- int __thiscall sub_8211A0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // edi int v5; // eax int v6; // ST04_4 void (__cdecl *v7)(int, _DWORD *, signed int, _DWORD **, signed int); // eax int v8; // esi void *v9; // eax void *v10; // ST04_4 int (__cdecl *v11)(int, void *, int, _DWORD **, signed int); // eax int v12; // ST00_4 v3 = a2; v4 = this; sub_8769C0(a2, this + 1); if ( v3[7] >= 0xA010068u ) { v5 = v3[88]; v6 = v5; v7 = *(void (__cdecl **)(int, _DWORD *, signed int, _DWORD **, signed int))(v5 + 4); a2 = (_DWORD *)4; v7(v6, v4 + 2, 4, &a2, 1); } v8 = a3; v9 = operator new(12 * a3); *v4 = v9; v10 = v9; v11 = *(int (__cdecl **)(int, void *, int, _DWORD **, signed int))(v3[88] + 4); v12 = v3[88]; a2 = (_DWORD *)4; return v11(v12, v10, 12 * v8, &a2, 1); } //----- (00821230) -------------------------------------------------------- _DWORD *__thiscall sub_821230(void *this, char a2) { _DWORD *v2; // esi void *v3; // ecx v2 = this; v3 = (void *)*((_DWORD *)this + 4); *v2 = &NiMorphData::`vftable'; if ( v3 ) sub_820EC0(v3, 3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2190C: using guessed type void *NiMorphData::`vftable'; //----- (00821270) -------------------------------------------------------- unsigned int __thiscall sub_821270(int *this, _DWORD *a2) { int *v2; // esi void (__cdecl *v3)(int, int *, signed int, char *, signed int); // edx unsigned int *v4; // edi int v5; // ST2C_4 int v6; // eax int v7; // ST18_4 void (__cdecl *v8)(int, int *, signed int, char *, signed int); // eax int v9; // eax int v10; // ST04_4 void (__cdecl *v11)(int, char *, signed int, char *, signed int); // eax int v12; // esi int v13; // ecx _DWORD *v14; // eax float *v15; // edi int v16; // ecx int v17; // edx int i; // eax unsigned int result; // eax int *v20; // esi int v21; // eax int v22; // ST2C_4 void (__cdecl *v23)(int, unsigned int *, signed int, char **, signed int); // eax int v24; // eax int v25; // ST18_4 void (__cdecl *v26)(int, int *, signed int, char **, signed int); // eax int v27; // esi char v28; // ST4C_1 float *v29; // eax int v30; // ecx int v31; // esi int v32; // esi unsigned int v33; // kr00_4 char *v34; // eax char *v35; // eax int v36; // edi unsigned int v37; // esi void **v38; // esi char *v39; // [esp+10h] [ebp-124h] int v40; // [esp+14h] [ebp-120h] unsigned int v41; // [esp+18h] [ebp-11Ch] int v42; // [esp+1Ch] [ebp-118h] int *v43; // [esp+20h] [ebp-114h] char v44; // [esp+27h] [ebp-10Dh] char ArgList[4]; // [esp+28h] [ebp-10Ch] char *v46; // [esp+2Ch] [ebp-108h] char Src; // [esp+30h] [ebp-104h] v2 = this; v43 = this; sub_85BC50(this, (signed int)a2); v3 = *(void (__cdecl **)(int, int *, signed int, char *, signed int))(a2[88] + 4); v4 = (unsigned int *)(v2 + 2); v5 = a2[88]; *(_DWORD *)ArgList = 4; v3(v5, v2 + 2, 4, ArgList, 1); v6 = a2[88]; v7 = v6; v8 = *(void (__cdecl **)(int, int *, signed int, char *, signed int))(v6 + 4); *(_DWORD *)ArgList = 4; v8(v7, v2 + 3, 4, ArgList, 1); v9 = a2[88]; v10 = v9; v11 = *(void (__cdecl **)(int, char *, signed int, char *, signed int))(v9 + 4); *(_DWORD *)ArgList = 1; v11(v10, &v44, 1, ArgList, 1); *((_BYTE *)v2 + 20) = v44 == 1; v12 = *v4; v13 = 16 * *v4 | -((unsigned __int64)*v4 >> 28 != 0); v14 = operator new((v13 + 4) | -__CFADD__(v13, 4)); v15 = 0; if ( v14 ) { v16 = v12 - 1; v17 = (int)(v14 + 1); *v14 = v12; for ( i = (int)(v14 + 1); v16 >= 0; --v16 ) { *(_DWORD *)(i + 12) = 0; *(float *)(i + 8) = 0.0; *(_DWORD *)i = 0; *(_DWORD *)(i + 4) = 0; i += 16; } result = v17; } else { result = 0; } v20 = v43; v43[4] = result; *(_DWORD *)ArgList = 0; if ( (unsigned int)v20[2] > 0 ) { v42 = 0; do { if ( a2[7] >= 0xA010068u ) { sub_8211A0((_DWORD *)(v42 + v20[4]), a2, v20[3]); } else { v21 = a2[88]; v22 = v21; v23 = *(void (__cdecl **)(int, unsigned int *, signed int, char **, signed int))(v21 + 4); v46 = (char *)4; v23(v22, &v41, 4, &v46, 1); v24 = a2[88]; v25 = v24; v26 = *(void (__cdecl **)(int, int *, signed int, char **, signed int))(v24 + 4); v46 = (char *)4; v26(v25, &v40, 4, &v46, 1); if ( v41 > 0 ) { v27 = v40; v28 = byte_BA3BE8[v40]; v46 = (char *)((int (__cdecl *)(_DWORD *, unsigned int))dword_BA4240[v40])(a2, v41); ((void (__cdecl *)(char *, unsigned int, char))dword_BA3C10[v27])(v46, v41, v28); v29 = (float *)operator new(0x18u); if ( v29 ) v15 = sub_8261F0(v29, 0); sub_820F90(v15, (int)v46, v41, v27); v30 = v43[4]; v31 = *(_DWORD *)(v42 + v30 + 12); v46 = (char *)(v42 + v30 + 12); if ( (float *)v31 != v15 ) { if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); *(_DWORD *)v46 = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)v15 + 1); } (*(void (__thiscall **)(float *))(*(_DWORD *)v15 + 108))(v15); v20 = v43; } sub_7FF6E0(&Src, 0x100u, "MT %d", *(_DWORD *)ArgList); v32 = v42 + v20[4]; operator delete(*(void **)(v32 + 4)); v33 = strlen(&Src); v34 = (char *)operator new(v33 + 1); *(_DWORD *)(v32 + 4) = v34; strcpy_s(v34, v33 + 1, &Src); v35 = (char *)operator new(12 * v43[3]); v36 = (int)v43; v37 = 0; v39 = v35; if ( v43[3] ) { v46 = v35; do { sub_8608D0(v46, (signed int)a2); v46 += 12; ++v37; } while ( v37 < *(_DWORD *)(v36 + 12) ); } v38 = (void **)(v42 + *(_DWORD *)(v36 + 16)); operator delete(*v38); *v38 = v39; v20 = v43; v15 = 0; } v42 += 16; result = *(_DWORD *)ArgList + 1; *(_DWORD *)ArgList = result; } while ( result < v20[2] ); } return result; } // BA3C10: using guessed type int dword_BA3C10[]; // BA4240: using guessed type int dword_BA4240[]; //----- (00821600) -------------------------------------------------------- unsigned int __thiscall sub_821600(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // esi void (__cdecl *v4)(int, int, signed int, unsigned int *, signed int); // edx int v5; // ST28_4 int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, int, signed int, unsigned int *, signed int); // eax int v9; // eax void (__cdecl *v10)(int, char *, signed int, unsigned int *, signed int); // edx unsigned int result; // eax int v12; // ebx int v13; // esi int v14; // eax int v15; // ST28_4 void (__cdecl *v16)(int, int, signed int, int *, signed int); // eax void (__cdecl *v17)(int, int, int, int *, signed int); // edx int v18; // ST2C_4 int v19; // ST28_4 int v20; // [esp+Ch] [ebp-10h] _DWORD *v21; // [esp+10h] [ebp-Ch] unsigned int v22; // [esp+14h] [ebp-8h] int v23; // [esp+18h] [ebp-4h] v2 = a2; v3 = (int)this; v21 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, int, signed int, unsigned int *, signed int))(v2[89] + 8); v5 = v2[89]; v22 = 4; v4(v5, v3 + 8, 4, &v22, 1); v6 = v2[89]; v7 = v6; v8 = *(void (__cdecl **)(int, int, signed int, unsigned int *, signed int))(v6 + 8); v22 = 4; v8(v7, v3 + 12, 4, &v22, 1); v9 = v2[89]; HIBYTE(a2) = *(_BYTE *)(v3 + 20); v10 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v9 + 8); v22 = 1; v10(v9, (char *)&a2 + 3, 1, &v22, 1); result = 0; v22 = 0; if ( *(_DWORD *)(v3 + 8) ) { v23 = 0; while ( 1 ) { v12 = *(_DWORD *)(v3 + 12); v13 = v23 + *(_DWORD *)(v3 + 16); sub_876A50(v2, *(const char **)(v13 + 4)); v14 = v2[89]; v15 = v14; v16 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v14 + 8); v20 = 4; v16(v15, v13 + 8, 4, &v20, 1); if ( v12 ) { v17 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v18 = *(_DWORD *)v13; v19 = v2[89]; v20 = 4; v17(v19, v18, 12 * v12, &v20, 1); } v23 += 16; result = v22 + 1; v22 = result; if ( result >= v21[2] ) break; v3 = (int)v21; } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00821710) -------------------------------------------------------- unsigned int __thiscall sub_821710(int *this, unsigned int a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi char *v10; // eax unsigned int v11; // edi unsigned int result; // eax int v13; // eax char *v14; // eax unsigned int v15; // edi char *v16; // ebx int *v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v17 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4358); v5 = v2[3]; a2 = (unsigned int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumTargets", v3[2]); v7 = v2[3]; a2 = (unsigned int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiNumVertsPerTarget", v3[3]); v9 = v2[3]; a2 = (unsigned int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8784D0((int)"MorphTargets"); v11 = v2[3]; a2 = (unsigned int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); result = v3[2]; a2 = 0; if ( result ) { v18 = 0; while ( 1 ) { if ( a2 >= result ) v13 = 0; else v13 = v18 + v3[4]; v14 = sub_878740((int)"m_pcName", *(_DWORD *)(v13 + 4)); v15 = v2[3]; v16 = v14; if ( v15 < v2[2] || (sub_8237A0(v2, v15 + v2[5]), v15 < v2[2]) ) { if ( v15 < v2[3] ) { if ( v16 ) { if ( !*(_DWORD *)(v2[1] + 4 * v15) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v15) ) { --v2[4]; } } else { v2[3] = v15 + 1; if ( v16 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v15) = v16; } result = v17[2]; v18 += 16; if ( ++a2 >= result ) break; v3 = v17; } } return result; } //----- (008218B0) -------------------------------------------------------- char __thiscall sub_8218B0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( this[4] ) return 1; v3 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)a2 + 60))(this[5]); if ( v3 ) { v2[4] = v3; return 1; } return 0; } //----- (008218E0) -------------------------------------------------------- int __thiscall sub_8218E0(char *this) { int v1; // esi signed int v2; // edi int result; // eax v1 = (int)(this + 56); v2 = 3; do { if ( *(_DWORD *)v1 ) result = (*(int (**)(void))(**(_DWORD **)v1 + 108))(); v1 += 4; --v2; } while ( v2 ); return result; } //----- (00821910) -------------------------------------------------------- void __thiscall sub_821910(char *this, float *a2, float *a3) { float *v3; // eax float *v4; // ebx int v5; // esi signed int v6; // edi double v7; // st7 float *v8; // ecx float v9; // [esp+Ch] [ebp-4h] v3 = a3; v4 = a2; *a2 = 3.4028235e38; v5 = (int)(this + 56); *v3 = -3.4028235e38; v6 = 3; do { if ( *(_DWORD *)v5 ) { (*(void (__stdcall **)(float **, float *))(**(_DWORD **)v5 + 112))(&a2, &v9); if ( v9 != *(float *)&a2 ) { if ( *v4 <= (double)*(float *)&a2 ) { v7 = v9; } else { v7 = v9; *v4 = *(float *)&a2; } if ( *a3 < v7 ) *a3 = v7; } } v5 += 4; --v6; } while ( v6 ); if ( 3.4028235e38 == *v4 ) { v8 = a3; if ( -3.4028235e38 == *a3 ) { *v4 = 0.0; *v8 = 0.0; } } } //----- (008219E0) -------------------------------------------------------- int __thiscall sub_8219E0(char *this, float a2, float a3) { int v3; // esi signed int v4; // edi int result; // eax v3 = (int)(this + 56); v4 = 3; do { if ( *(_DWORD *)v3 ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v3 + 116))(LODWORD(a2), LODWORD(a3)); v3 += 4; --v4; } while ( v4 ); return result; } //----- (00821A20) -------------------------------------------------------- int __thiscall sub_821A20(char *this, float a2, float a3) { char *v3; // esi int v4; // eax int v5; // esi int *v6; // ebx int v7; // ecx int v8; // eax int v9; // esi int v10; // edi int v12; // [esp+14h] [ebp-Ch] int v13; // [esp+18h] [ebp-8h] signed int v14; // [esp+1Ch] [ebp-4h] v3 = this; v4 = sub_831BF0(this, SLODWORD(a2), SLODWORD(a3)); v5 = (int)&v3[-v4]; v12 = v4; v6 = (int *)(v4 + 56); v13 = v5; v14 = 3; while ( 1 ) { v7 = *(int *)((char *)v6 + v5); if ( v7 ) { v8 = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v7 + 120))(LODWORD(a2), LODWORD(a3)); v9 = *v6; v10 = v8; if ( *v6 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *v6 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } } ++v6; if ( !--v14 ) break; v5 = v13; } return v12; } //----- (00821AD0) -------------------------------------------------------- char __thiscall sub_821AD0(int this) { int v1; // esi const char *v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax char result; // al v1 = this; v2 = *(const char **)(*(_DWORD *)(this + 16) + 8); if ( v2 ) { operator delete(*(void **)(this + 20)); *(_DWORD *)(v1 + 20) = 0; v3 = strlen(v2); v4 = (char *)operator new(v3 + 1); *(_DWORD *)(v1 + 20) = v4; strcpy_s(v4, v3 + 1, v2); *(_DWORD *)(v1 + 16) = 0; result = 1; } else { operator delete(*(void **)(this + 20)); *(_DWORD *)(v1 + 20) = 0; result = 0; } return result; } //----- (00821B40) -------------------------------------------------------- char __thiscall sub_821B40(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // ebx char result; // al v2 = (_DWORD **)a2; v3 = (int)this; sub_85BAE0(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = a2; result = sub_8C4C90(*v2, *(_DWORD *)(v3 + 16), &a2); if ( result ) { result = a2; *(_DWORD *)(v4 + 16) = a2; } else { *(_DWORD *)(v4 + 16) = *(_DWORD *)(v3 + 16); } return result; } //----- (00821B90) -------------------------------------------------------- char __thiscall sub_821B90(char *this, int a2) { char *v2; // edi char result; // al unsigned int v4; // esi int v5; // edi v2 = this; result = sub_81C190(this, a2); if ( result ) { v4 = 0; v5 = (int)(v2 + 56); while ( !*(_DWORD *)v5 || (*(unsigned __int8 (__stdcall **)(int))(**(_DWORD **)v5 + 20))(a2) ) { ++v4; v5 += 4; if ( v4 >= 3 ) return 1; } result = 0; } return result; } //----- (00821BE0) -------------------------------------------------------- char __thiscall sub_821BE0(char *this, int a2) { int v2; // edi char *v3; // ebx int v5; // eax int *v6; // esi int v7; // ebx int v8; // ecx int v9; // eax int v10; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_872A80(this, a2) || *((_WORD *)v3 + 6) != *(_WORD *)(a2 + 12) ) return 0; v5 = *((_DWORD *)v3 + 4); if ( !v5 ) goto LABEL_22; if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( !v5 ) { LABEL_22: if ( !*(_DWORD *)(a2 + 16) ) { if ( !v5 ) goto LABEL_11; goto LABEL_9; } return 0; } LABEL_9: if ( *(_DWORD *)(a2 + 16) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 4) + 28))(*(_DWORD *)(a2 + 16)) ) { return 0; } LABEL_11: if ( !(unsigned __int8)sub_8195B0((float *)v3 + 6, (float *)(a2 + 24)) ) return 0; v10 = 0; v6 = (int *)(v2 + 56); v7 = (int)&v3[-v2]; while ( 1 ) { v8 = *(int *)((char *)v6 + v7); v9 = *v6; if ( v8 ) break; if ( v9 ) return 0; LABEL_16: ++v6; if ( (unsigned int)++v10 >= 3 ) return 1; } if ( v9 && (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v8 + 28))(*v6) ) goto LABEL_16; return 0; } //----- (00821CA0) -------------------------------------------------------- float *__thiscall sub_821CA0(float *this, int a2, __int16 a3, char a4) { float *v4; // esi int v5; // edi int v6; // edi int v7; // edi v4 = this; sub_831B80(this); *(_DWORD *)v4 = &NiLookAtInterpolator::`vftable'; *((_DWORD *)v4 + 4) = a2; *((_WORD *)v4 + 6) = 0; v4[5] = 0.0; *((_DWORD *)v4 + 6) = dword_ABCEB0; *((_DWORD *)v4 + 7) = dword_ABCEB4; *((_DWORD *)v4 + 8) = dword_ABCEB8; *((_DWORD *)v4 + 9) = dword_BA44A0; *((_DWORD *)v4 + 10) = dword_BA44A4; *((_DWORD *)v4 + 11) = dword_BA44A8; *((_DWORD *)v4 + 12) = dword_BA44AC; v4[13] = -3.4028235e38; v4[14] = 0.0; v4[15] = 0.0; v4[16] = 0.0; if ( a4 ) *((_WORD *)v4 + 6) |= 1u; else *((_WORD *)v4 + 6) &= 0xFFFEu; *((_WORD *)v4 + 6) = 2 * a3 | (_WORD)v4[3] & 0xFFF9; v5 = *((_DWORD *)v4 + 14); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4[14] = 0.0; } v6 = *((_DWORD *)v4 + 15); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4[15] = 0.0; } v7 = *((_DWORD *)v4 + 16); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[16] = 0.0; } return v4; } // A2199C: using guessed type void *NiLookAtInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00821DC0) -------------------------------------------------------- char *sub_821DC0() { return dword_BA4360; } //----- (00821DD0) -------------------------------------------------------- LONG __thiscall sub_821DD0(_DWORD *this) { _DWORD *v1; // ebx void *v2; // ST00_4 int v3; // edi int v4; // esi signed int v6; // [esp+Ch] [ebp-4h] v1 = this; v2 = (void *)this[5]; *this = &NiLookAtInterpolator::`vftable'; operator delete(v2); v1[5] = 0; v3 = (int)(v1 + 17); v6 = 2; do { v4 = *(_DWORD *)(v3 - 4); v3 -= 4; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); --v6; } while ( v6 >= 0 ); return sub_831BA0(v1); } // A2199C: using guessed type void *NiLookAtInterpolator::`vftable'; //----- (00821E40) -------------------------------------------------------- char __thiscall sub_821E40(int this, float a2, int a3, int a4) { int v4; // ebx int *v5; // eax char result; // al float v7; // ecx float v8; // eax int v9; // esi int v10; // ecx float v11; // eax float v12; // ecx float v13; // edx float v14; // ecx float *v15; // esi float *v16; // eax double v17; // st7 double v18; // st7 double v19; // st7 double v20; // st6 double v21; // st6 double v22; // st7 double v23; // rt0 int v24; // edx double v25; // rt1 int v26; // eax int v27; // ecx double v28; // rt2 unsigned int v29; // eax int v30; // eax int v31; // ecx float v32; // ST14_4 int v33; // ecx int v34; // edx float *v35; // esi int v36; // eax int v37; // ecx float *v38; // eax int v39; // [esp+24h] [ebp-ECh] int v40; // [esp+28h] [ebp-E8h] int v41; // [esp+2Ch] [ebp-E4h] int v42; // [esp+30h] [ebp-E0h] float *v43; // [esp+34h] [ebp-DCh] float v44; // [esp+38h] [ebp-D8h] float v45; // [esp+3Ch] [ebp-D4h] float v46; // [esp+40h] [ebp-D0h] float v47; // [esp+44h] [ebp-CCh] float v48; // [esp+48h] [ebp-C8h] float v49; // [esp+4Ch] [ebp-C4h] float v50; // [esp+50h] [ebp-C0h] float v51; // [esp+54h] [ebp-BCh] float v52; // [esp+58h] [ebp-B8h] float v53; // [esp+5Ch] [ebp-B4h] float v54; // [esp+60h] [ebp-B0h] float v55; // [esp+64h] [ebp-ACh] float v56; // [esp+68h] [ebp-A8h] float v57; // [esp+6Ch] [ebp-A4h] float v58; // [esp+70h] [ebp-A0h] float v59; // [esp+74h] [ebp-9Ch] float v60; // [esp+78h] [ebp-98h] char v61; // [esp+7Ch] [ebp-94h] char v62; // [esp+A0h] [ebp-70h] char v63; // [esp+C4h] [ebp-4Ch] float v64; // [esp+E8h] [ebp-28h] float v65; // [esp+ECh] [ebp-24h] float v66; // [esp+F0h] [ebp-20h] float v67; // [esp+F4h] [ebp-1Ch] float v68; // [esp+F8h] [ebp-18h] float v69; // [esp+FCh] [ebp-14h] float v70; // [esp+100h] [ebp-10h] float v71; // [esp+104h] [ebp-Ch] float v72; // [esp+108h] [ebp-8h] v4 = this; v5 = *(int **)(this + 16); v47 = *(float *)&a3; v43 = (float *)a4; if ( !v5 ) { result = 0; *(float *)a4 = -3.4028235e38; *(float *)(a4 + 16) = -3.4028235e38; *(float *)(a4 + 28) = -3.4028235e38; *(float *)(this + 24) = -3.4028235e38; *(float *)(this + 40) = -3.4028235e38; *(float *)(this + 52) = -3.4028235e38; return result; } v57 = *((float *)v5 + 35); v7 = *((float *)v5 + 36); v8 = *((float *)v5 + 37); v9 = *(int *)(a3 + 32); v58 = v7; v10 = *(_DWORD *)(v4 + 56); v59 = v8; v60 = *(float *)&v9; if ( v10 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v10 + 68))(LODWORD(a2), a3, &v44) ) { LABEL_30: *(float *)(v4 + 24) = -3.4028235e38; result = 0; *(float *)(v4 + 40) = -3.4028235e38; *(float *)(v4 + 52) = -3.4028235e38; return result; } v11 = v44; v12 = v45; v13 = v46; *(float *)(v4 + 24) = v44; *(float *)(v4 + 28) = v12; *(float *)(v4 + 32) = v13; } else { v11 = *(float *)(a3 + 88); v14 = *(float *)(a3 + 92); v13 = *(float *)(a3 + 96); v44 = *(float *)(a3 + 88); v45 = v14; v46 = v13; } if ( *(float *)&v9 == 0.0 ) { qmemcpy(&v63, &unk_ABD440, 0x24u); v54 = v11; v55 = v45; v56 = v13; } else { qmemcpy(&v63, (const void *)(v9 + 104), 0x24u); v15 = (float *)LODWORD(v60); v60 = *(float *)(LODWORD(v60) + 152); v16 = sub_85DA90((float *)&v63, &v48, &v44); v54 = *v16 * v60; v55 = v16[1] * v60; v56 = v60 * v16[2]; v48 = v15[35] + v54; v17 = v15[36]; v54 = v48; v49 = v17 + v55; v18 = v15[37]; v55 = v49; v50 = v18 + v56; v56 = v50; } v51 = v57 - v54; v52 = v58 - v55; v53 = v59 - v56; v60 = v51 * v51 + v52 * v52 + v53 * v53; if ( v60 < 0.001 ) { sub_85D510(&v64); goto LABEL_32; } sub_4430B0(&v51); v19 = v53; v20 = v52; if ( v53 < 1.001 ) { v21 = v53; v22 = v52; if ( v53 > 0.9990000128746033 ) { LABEL_17: v24 = dword_ABD498; v25 = v21; v20 = v22; v19 = v25; v26 = dword_ABD49C; v60 = v20; v27 = dword_ABD4A0; goto LABEL_20; } v20 = v52; v19 = v53; } if ( v19 > -1.001 ) { v23 = v20; v21 = v19; v22 = v23; if ( v21 < -0.9990000128746033 ) goto LABEL_17; v28 = v21; v20 = v22; v19 = v28; } v24 = dword_ABD4A4; v26 = dword_ABD4A8; v60 = v19; v27 = dword_ABD4AC; LABEL_20: v57 = v51 * v60; v58 = v20 * v60; v59 = v19 * v60; v48 = *(float *)&v24 - v57; v49 = *(float *)&v26 - v58; v50 = *(float *)&v27 - v59; sub_4430B0(&v48); if ( !(*(_BYTE *)(v4 + 12) & 1) ) { v57 = -v51; v51 = v57; v58 = -v52; v52 = v58; v59 = -v53; v53 = v59; } v29 = ((unsigned int)*(unsigned __int16 *)(v4 + 12) >> 1) & 3; v54 = v49 * v53 - v50 * v52; v55 = v50 * v51 - v48 * v53; v56 = v48 * v52 - v49 * v51; if ( v29 ) { v30 = v29 - 1; if ( v30 ) { if ( v30 == 1 ) { v64 = v54; v67 = v55; v70 = v56; v65 = v48; v68 = v49; v71 = v50; v66 = v51; v69 = v52; v72 = v53; } } else { v64 = v54; v67 = v55; v70 = v56; v65 = v51; v68 = v52; v71 = v53; v57 = -v48; v58 = -v49; v59 = -v50; v66 = v57; v69 = v58; v72 = v59; } } else { v64 = v51; v67 = v52; v70 = v53; v65 = v48; v68 = v49; v71 = v50; v57 = -v54; v58 = -v55; v59 = -v56; v66 = v57; v69 = v58; v72 = v59; } qmemcpy(&v64, sub_85E050((float *)&v63, (float *)&v62, &v64), 0x24u); v31 = *(_DWORD *)(v4 + 60); if ( v31 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD, float, float *))(*(_DWORD *)v31 + 76))( LODWORD(a2), COERCE_FLOAT(LODWORD(v47)), &v60) ) goto LABEL_30; v32 = -v60; sub_85D810((float *)&v62, v32); qmemcpy(&v64, sub_85D940(&v64, (float *)&v61, (float *)&v62), 0x24u); } LABEL_32: sub_874F50((float *)&v39, &v64); v33 = v40; v34 = v41; v35 = (float *)(v4 + 24); *((_DWORD *)v35 + 3) = v39; v36 = v42; *((_DWORD *)v35 + 4) = v33; *((_DWORD *)v35 + 5) = v34; *((_DWORD *)v35 + 6) = v36; v37 = *(_DWORD *)(v4 + 64); if ( v37 ) { result = (*(int (__stdcall **)(_DWORD, float, float *))(*(_DWORD *)v37 + 76))( LODWORD(a2), COERCE_FLOAT(LODWORD(v47)), &v47); if ( !result ) { *v35 = -3.4028235e38; *(float *)(v4 + 40) = -3.4028235e38; *(float *)(v4 + 52) = -3.4028235e38; return result; } *(float *)(v4 + 52) = v47; } if ( (unsigned __int8)sub_819560((float *)(v4 + 24)) ) { v38 = v43; *v43 = -3.4028235e38; v38[4] = -3.4028235e38; v38[7] = -3.4028235e38; result = 0; } else { qmemcpy(v43, v35, 0x20u); *(float *)(v4 + 8) = a2; result = 1; } return result; } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (00822550) -------------------------------------------------------- int __thiscall sub_822550(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // esi __int16 v4; // ax __int16 v5; // ax __int16 v6; // cx void *v7; // eax int result; // eax int *v9; // edi void *v10; // ecx int v11; // esi int v12; // ebx char *v13; // [esp+Ch] [ebp-4h] int v14; // [esp+18h] [ebp+8h] signed int v15; // [esp+1Ch] [ebp+Ch] v3 = this; v13 = (char *)this; sub_872AA0(this, a2, a3); v4 = v3[6]; *(_WORD *)(a2 + 12) = v4; if ( v3[6] & 1 ) v5 = v4 | 1; else v5 = v4 & 0xFFFE; *(_WORD *)(a2 + 12) = v5; v6 = v3[6] ^ v5; v7 = *(void **)(a2 + 20); *(_WORD *)(a2 + 12) ^= v6 & 6; *(_DWORD *)(a2 + 16) = *((_DWORD *)v3 + 4); operator delete(v7); *(_DWORD *)(a2 + 20) = 0; result = (int)&v13[-a2]; qmemcpy((void *)(a2 + 24), v3 + 12, 0x20u); v9 = (int *)(a2 + 56); v14 = (int)&v13[-a2]; v15 = 3; while ( 1 ) { v10 = *(void **)((char *)v9 + result); if ( v10 ) { result = sub_85BD60(v10); v11 = *v9; v12 = result; if ( *v9 != result ) { if ( v11 ) { result = InterlockedDecrement((volatile LONG *)(v11 + 4)); if ( !result ) { if ( v11 ) result = (**(int (__thiscall ***)(int, signed int))v11)(v11, 1); } } *v9 = v12; if ( v12 ) result = InterlockedIncrement((volatile LONG *)(v12 + 4)); } } ++v9; if ( !--v15 ) break; result = v14; } return result; } //----- (00822630) -------------------------------------------------------- float *sub_822630() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x44u); if ( v0 ) result = sub_821CA0(v0, 0, 0, 0); else result = 0; return result; } //----- (00822650) -------------------------------------------------------- void *__thiscall sub_822650(void *this, char a2) { void *v2; // esi v2 = this; sub_821DD0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00822680) -------------------------------------------------------- float *__thiscall sub_822680(_WORD *this, _DWORD **a2) { _WORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x44u); if ( v3 ) { v4 = sub_821CA0(v3, 0, 0, 0); sub_822550(v2, (int)v4, a2); result = v4; } else { sub_822550(v2, 0, a2); result = 0; } return result; } //----- (008226D0) -------------------------------------------------------- int __thiscall sub_8226D0(int *this, int *a2) { int *v2; // ebx int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, int *, signed int, int **, signed int); // eax int result; // eax int v8; // esi int v9; // edi signed int v10; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_87FD80(this, (signed int)a2); v4 = v2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int **, signed int))(v4 + 4); a2 = (int *)2; v6(v5, v3 + 3, 2, &a2, 1); v3[4] = sub_876300(v2); sub_8769C0(v2, v3 + 5); sub_8319B0((char *)v3 + 24, (signed int)v2); a2 = v3 + 14; v10 = 3; do { result = sub_876300(v2); v8 = *a2; v9 = result; if ( *a2 != result ) { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } *a2 = v9; if ( v9 ) result = InterlockedIncrement((volatile LONG *)(v9 + 4)); } ++a2; --v10; } while ( v10 ); return result; } //----- (00822790) -------------------------------------------------------- int __thiscall sub_822790(char *this, int a2) { _DWORD *v2; // esi char *v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax _DWORD *v7; // edi signed int v8; // ebx int result; // eax v2 = (_DWORD *)a2; v3 = this; sub_81C180(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 12, 2, &a2, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 4)); sub_876A50(v2, *((const char **)v3 + 5)); sub_831960(v3 + 24, (signed int)v2); v7 = v3 + 56; v8 = 3; do { result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *v7); ++v7; --v8; } while ( v8 ); return result; } //----- (00822810) -------------------------------------------------------- unsigned int __thiscall sub_822810(char *this, int a2) { char *v2; // esi char *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx unsigned int result; // eax int v9; // edi signed int v10; // ebx v2 = (char *)a2; v3 = this; sub_831C50(this, a2); v4 = sub_8784D0(*(int *)dword_BA4360); v5 = *((_DWORD *)v2 + 3); a2 = (int)v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878700((int)"m_pkLookAt", *((_DWORD *)v3 + 4)); v7 = *((_DWORD *)v2 + 3); a2 = (int)v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); result = sub_831AA0((float *)v3 + 6, v2); v9 = (int)(v3 + 56); v10 = 3; do { if ( *(_DWORD *)v9 ) result = (*(int (__stdcall **)(char *))(**(_DWORD **)v9 + 32))(v2); v9 += 4; --v10; } while ( v10 ); return result; } //----- (008228C0) -------------------------------------------------------- int __thiscall sub_8228C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_86C590(this, a2); result = sub_875AD0(a2); v2[16] = result; return result; } //----- (008228E0) -------------------------------------------------------- char __thiscall sub_8228E0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_86C250(this, a2); if ( result ) { if ( v2[16] ) (*(void (__stdcall **)(int))(*(_DWORD *)v2[16] + 20))(a2); result = 1; } return result; } //----- (00822920) -------------------------------------------------------- char __thiscall sub_822920(float *this, int a2) { float *v2; // esi int v4; // eax v2 = this; if ( !sub_86BDE0(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 16); if ( v4 ) { if ( !*(_DWORD *)(a2 + 64) ) return 0; if ( v4 ) goto LABEL_12; } if ( *(_DWORD *)(a2 + 64) ) return 0; if ( v4 ) { LABEL_12: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 64)) ) return 1; return 0; } return 1; } //----- (00822970) -------------------------------------------------------- void __thiscall sub_822970(int this, int a2) { int *v2; // eax float v3; // edx int v4; // eax float *v5; // ebx float v6; // ST1C_4 float *v7; // eax double v8; // st7 double v9; // st7 float v10; // ecx float v11; // edx float v12; // ST1C_4 double v13; // st7 int v14; // eax int v15; // ecx int v16; // edx unsigned int v17; // eax int v18; // eax int v19; // [esp+0h] [ebp-ACh] int v20; // [esp+4h] [ebp-A8h] float v21; // [esp+8h] [ebp-A4h] float v22; // [esp+Ch] [ebp-A0h] float v23; // [esp+10h] [ebp-9Ch] float v24; // [esp+14h] [ebp-98h] float v25; // [esp+18h] [ebp-94h] float v26; // [esp+1Ch] [ebp-90h] float v27; // [esp+20h] [ebp-8Ch] float v28; // [esp+24h] [ebp-88h] float v29; // [esp+28h] [ebp-84h] float v30; // [esp+2Ch] [ebp-80h] float v31; // [esp+30h] [ebp-7Ch] float v32; // [esp+34h] [ebp-78h] float v33; // [esp+38h] [ebp-74h] char v34; // [esp+3Ch] [ebp-70h] char v35; // [esp+60h] [ebp-4Ch] float v36; // [esp+84h] [ebp-28h] float v37; // [esp+88h] [ebp-24h] float v38; // [esp+8Ch] [ebp-20h] float v39; // [esp+90h] [ebp-1Ch] float v40; // [esp+94h] [ebp-18h] float v41; // [esp+98h] [ebp-14h] float v42; // [esp+9Ch] [ebp-10h] float v43; // [esp+A0h] [ebp-Ch] float v44; // [esp+A4h] [ebp-8h] v2 = *(int **)(this + 64); v19 = this; if ( v2 && (*(_BYTE *)(this + 8) >> 3) & 1 ) { v31 = *((float *)v2 + 35); v3 = *((float *)v2 + 36); v33 = *((float *)v2 + 37); v4 = *(_DWORD *)(this + 48); v5 = *(float **)(v4 + 32); v32 = v3; v20 = v4; if ( v5 ) { qmemcpy(&v35, v5 + 26, 0x24u); v6 = v5[38]; v7 = sub_85DA90((float *)&v35, &v22, (float *)(v4 + 88)); v28 = *v7 * v6; v29 = v7[1] * v6; v30 = v6 * v7[2]; v22 = v5[35] + v28; v8 = v5[36]; v28 = v22; v23 = v8 + v29; v9 = v5[37]; v29 = v23; v24 = v9 + v30; v30 = v24; } else { qmemcpy(&v35, &unk_ABD440, 0x24u); v10 = *(float *)(v4 + 92); v28 = *(float *)(v4 + 88); v11 = *(float *)(v4 + 96); v29 = v10; v30 = v11; } v25 = v31 - v28; v26 = v32 - v29; v27 = v33 - v30; v12 = v25 * v25 + v26 * v26 + v27 * v27; if ( v12 >= 0.001 ) { sub_4430B0(&v25); v13 = v27; if ( v27 >= 1.001 || v13 <= 0.9990000128746033 ) { v14 = dword_ABD4A4; v15 = dword_ABD4A8; v21 = v27; v16 = dword_ABD4AC; } else { v14 = dword_ABD498; v21 = v26; v15 = dword_ABD49C; v16 = dword_ABD4A0; } v31 = v25 * v21; v32 = v26 * v21; v33 = v13 * v21; v22 = *(float *)&v14 - v31; v23 = *(float *)&v15 - v32; v24 = *(float *)&v16 - v33; sub_4430B0(&v22); if ( !(*(_BYTE *)(v19 + 60) & 1) ) { v31 = -v25; v25 = v31; v32 = -v26; v26 = v32; v33 = -v27; v27 = v33; } v17 = ((unsigned int)*(unsigned __int16 *)(v19 + 60) >> 1) & 3; v28 = v23 * v27 - v24 * v26; v29 = v24 * v25 - v22 * v27; v30 = v22 * v26 - v23 * v25; if ( v17 ) { v18 = v17 - 1; if ( v18 ) { if ( v18 == 1 ) { v36 = v28; v39 = v29; v42 = v30; v37 = v22; v40 = v23; v43 = v24; v38 = v25; v41 = v26; v44 = v27; } } else { v36 = v28; v39 = v29; v42 = v30; v37 = v25; v40 = v26; v43 = v27; v31 = -v22; v32 = -v23; v33 = -v24; v38 = v31; v41 = v32; v44 = v33; } } else { v36 = v25; v39 = v26; v42 = v27; v37 = v22; v40 = v23; v43 = v24; v31 = -v28; v32 = -v29; v33 = -v30; v38 = v31; v41 = v32; v44 = v33; } qmemcpy(&v36, sub_85E050((float *)&v35, (float *)&v34, &v36), 0x24u); } else { sub_85D510(&v36); } qmemcpy((void *)(v20 + 52), &v36, 0x24u); } } // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (00822DD0) -------------------------------------------------------- char __thiscall sub_822DD0(_DWORD *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // eax int v6; // [esp+8h] [ebp-4h] v2 = (_DWORD **)a2; v3 = (int)this; sub_86C220(this, a2); sub_8C4C90(*v2, v3, &v6); v4 = *(_DWORD *)(v3 + 64); if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &a2); if ( (_BYTE)v4 ) *(_DWORD *)(v6 + 64) = a2; else *(_DWORD *)(v6 + 64) = *(_DWORD *)(v3 + 64); } return v4; } //----- (00822E30) -------------------------------------------------------- char *sub_822E30() { return dword_BA4368; } //----- (00822E40) -------------------------------------------------------- int __thiscall sub_822E40(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi __int16 v5; // ax __int16 v6; // ax v2 = this; v3 = (float *)operator new(0x44u); v4 = (int)v3; if ( v3 ) { sub_86C310(v3); *(_DWORD *)v4 = &NiLookAtController::`vftable'; *(_DWORD *)(v4 + 64) = 0; *(_WORD *)(v4 + 60) = 0; *(_BYTE *)(v4 + 44) = 0; } else { v4 = 0; } sub_86C130(v2, v4, a2); v5 = *((_WORD *)v2 + 30); *(_WORD *)(v4 + 60) = v5; if ( *((_BYTE *)v2 + 60) & 1 ) v6 = v5 | 1; else v6 = v5 & 0xFFFE; *(_WORD *)(v4 + 60) = v6; *(_WORD *)(v4 + 60) ^= (*((_WORD *)v2 + 30) ^ v6) & 6; *(_DWORD *)(v4 + 64) = *((_DWORD *)v2 + 16); return v4; } // A21A54: using guessed type void *NiLookAtController::`vftable'; //----- (00822F00) -------------------------------------------------------- int __thiscall sub_822F00(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v5; // eax int v6; // ST00_4 void (__cdecl *v7)(int, int *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; sub_86C630(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v5 = *(_DWORD *)(v2 + 352); v6 = v5; v7 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v5 + 4); a2 = 2; v7(v6, v3 + 15, 2, &a2, 1); } else { *((_WORD *)v3 + 30) = (*(_WORD *)(v2 + 414) >> 5) & 0xFF; } return sub_876290((void **)v2); } //----- (00822F70) -------------------------------------------------------- int __thiscall sub_822F70(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_86C780(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 15, 2, &a2, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[16]); } //----- (00822FC0) -------------------------------------------------------- unsigned int __thiscall sub_822FC0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4368); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00823010) -------------------------------------------------------- int __thiscall sub_823010(_DWORD *this, _DWORD *a2) { return sub_831E50(this, a2); } //----- (00823020) -------------------------------------------------------- bool __thiscall sub_823020(float *this, int a2) { return sub_831CF0(this, a2) != 0; } //----- (00823040) -------------------------------------------------------- float *__thiscall sub_823040(_DWORD *this, float *a2) { float *result; // eax double v3; // st7 result = (float *)this[12]; if ( result ) { v3 = result[56]; result = a2; *a2 = v3; } return result; } //----- (00823060) -------------------------------------------------------- char *sub_823060() { return dword_BA4370; } //----- (00823070) -------------------------------------------------------- char __thiscall sub_823070(int this, float a2) { int v2; // esi int v3; // eax int v4; // ecx int v5; // ecx int v6; // esi v2 = this; LOBYTE(v3) = *(_BYTE *)(this + 8) >> 5; if ( v3 & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { LOBYTE(v3) = sub_80FFE0((float *)this, a2); if ( (_BYTE)v3 ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return v3; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !(_BYTE)v3 ) return v3; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOBYTE(v3) = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( (_BYTE)v3 ) { v6 = *(_DWORD *)(v2 + 48); if ( v6 ) { v3 = sub_402BA0((int)dword_BA4A28, v6); *(float *)(v3 + 224) = a2; ++*(_DWORD *)(v3 + 188); } } } return v3; } //----- (00823100) -------------------------------------------------------- _DWORD *__thiscall sub_823100(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &NiLightDimmerController::`vftable'; v3 = *((_DWORD *)this + 15); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21ABC: using guessed type void *NiLightDimmerController::`vftable'; //----- (00823150) -------------------------------------------------------- float *__thiscall sub_823150(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_831D00(v3); *(_DWORD *)v4 = &NiLightDimmerController::`vftable'; sub_831CE0(v2, (int)v4, a2); result = v4; } else { sub_831CE0(v2, 0, a2); result = 0; } return result; } // A21ABC: using guessed type void *NiLightDimmerController::`vftable'; //----- (008231D0) -------------------------------------------------------- unsigned int __thiscall sub_8231D0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831DA0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4370); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00823220) -------------------------------------------------------- bool __thiscall sub_823220(_DWORD *this, int a2) { return sub_831DF0(this, a2) != 0; } //----- (00823240) -------------------------------------------------------- float *__thiscall sub_823240(int this, float *a2) { float *result; // eax float v3; // ecx float v4; // edx float v5; // eax float v6; // ST08_4 result = *(float **)(this + 48); if ( result ) { if ( *(_BYTE *)(this + 64) & 1 ) { v3 = result[57]; v4 = result[58]; v5 = result[59]; } else { v3 = result[60]; v4 = result[61]; v5 = result[62]; } v6 = v5; result = a2; *a2 = v3; a2[1] = v4; a2[2] = v6; } return result; } //----- (008232A0) -------------------------------------------------------- const char *__thiscall sub_8232A0(_BYTE *this) { const char *result; // eax result = "Ambient"; if ( !(this[64] & 1) ) result = "Diffuse"; return result; } //----- (008232C0) -------------------------------------------------------- char __thiscall sub_8232C0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_831CF0(this, a2); if ( result ) result = (*((_BYTE *)v2 + 64) ^ ~*(_BYTE *)(a2 + 64)) & 1; return result; } //----- (008232F0) -------------------------------------------------------- char *sub_8232F0() { return dword_BA4378; } //----- (00823300) -------------------------------------------------------- char __stdcall sub_823300(int a1) { int v1; // eax if ( !a1 ) return 0; v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v1 ) return 0; while ( (char *)v1 != dword_BA4A28 ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } return 1; } //----- (00823330) -------------------------------------------------------- char __thiscall sub_823330(int this, float a2) { int v2; // esi int v3; // eax int v4; // ecx int v5; // ecx double v6; // st7 double v7; // st5 double v8; // st6 float v9; // edx float v10; // ecx int v11; // ecx int v12; // edx float v13; // esi int v14; // ecx float v15; // edx float v16; // ecx float v18; // [esp+10h] [ebp-18h] float v19; // [esp+14h] [ebp-14h] float v20; // [esp+18h] [ebp-10h] float v21; // [esp+1Ch] [ebp-Ch] float v22; // [esp+20h] [ebp-8h] float v23; // [esp+24h] [ebp-4h] v2 = this; LOBYTE(v3) = *(_BYTE *)(this + 8) >> 5; if ( v3 & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { LOBYTE(v3) = sub_80FFE0((float *)this, a2); if ( (_BYTE)v3 ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return v3; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !(_BYTE)v3 ) return v3; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOBYTE(v3) = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 68))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &v18); if ( (_BYTE)v3 ) { v21 = v18; v22 = v19; v23 = v20; if ( v18 >= 0.0 ) { v6 = 1.0; if ( v18 > 1.0 ) v21 = 1.0; } else { v6 = 1.0; v21 = 0.0; } if ( v19 >= 0.0 ) { if ( v19 > v6 ) v22 = v6; v7 = 0.0; v8 = v20; } else { v7 = 0.0; v8 = v20; v22 = 0.0; } if ( v7 <= v8 ) { if ( v8 > v6 ) v23 = v6; } else { v23 = v7; } v3 = *(_DWORD *)(v2 + 48); if ( v3 ) { v3 = sub_402BA0((int)dword_BA4A28, *(_DWORD *)(v2 + 48)); if ( *(_BYTE *)(v2 + 64) & 1 ) { ++*(_DWORD *)(v3 + 188); v9 = v22; *(float *)(v3 + 228) = v21; v10 = v23; *(float *)(v3 + 232) = v9; *(float *)(v3 + 236) = v10; v11 = *(_DWORD *)(v3 + 188); *(_DWORD *)(v3 + 240) = dword_BA4724; *(_DWORD *)(v3 + 244) = dword_BA4728; v12 = dword_BA472C; *(_DWORD *)(v3 + 188) = ++v11; *(_DWORD *)(v3 + 248) = v12; *(_DWORD *)(v3 + 252) = dword_BA4724; *(_DWORD *)(v3 + 256) = dword_BA4728; *(_DWORD *)(v3 + 260) = dword_BA472C; *(_DWORD *)(v3 + 188) = v11 + 1; } else { v13 = v23; *(_DWORD *)(v3 + 228) = dword_BA4724; *(_DWORD *)(v3 + 232) = dword_BA4728; v14 = dword_BA472C; v15 = v22; *(_DWORD *)(v3 + 188) += 3; *(_DWORD *)(v3 + 236) = v14; v16 = v21; *(float *)(v3 + 240) = v21; *(float *)(v3 + 252) = v16; *(float *)(v3 + 244) = v15; *(float *)(v3 + 256) = v15; *(float *)(v3 + 248) = v13; *(float *)(v3 + 260) = v13; } } } } return v3; } // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00823530) -------------------------------------------------------- int __thiscall sub_823530(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax int v4; // ebx float *v5; // eax float *v6; // edi int v7; // esi _DWORD *v8; // [esp+8h] [ebp-4h] v2 = this; v8 = this; result = sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = (float *)operator new(0x20u); if ( v5 ) v6 = sub_81C790(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v8[15] + 108))(); if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } return result; } //----- (00823600) -------------------------------------------------------- _DWORD *__thiscall sub_823600(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &NiLightColorController::`vftable'; v3 = *((_DWORD *)this + 15); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21B6C: using guessed type void *NiLightColorController::`vftable'; //----- (00823650) -------------------------------------------------------- int __thiscall sub_823650(_WORD *this, _DWORD **a2) { _WORD *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x44u); v4 = (int)v3; if ( v3 ) { sub_831E60(v3); *(_DWORD *)v4 = &NiLightColorController::`vftable'; *(_WORD *)(v4 + 64) = 0; } else { v4 = 0; } sub_831CE0(v2, v4, a2); *(_WORD *)(v4 + 64) = v2[32]; return v4; } // A21B6C: using guessed type void *NiLightColorController::`vftable'; //----- (008236A0) -------------------------------------------------------- float *sub_8236A0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x44u); v1 = v0; if ( !v0 ) return 0; sub_831E60(v0); *((_WORD *)v1 + 32) = 0; *(_DWORD *)v1 = &NiLightColorController::`vftable'; return v1; } // A21B6C: using guessed type void *NiLightColorController::`vftable'; //----- (008236D0) -------------------------------------------------------- __int16 __thiscall sub_8236D0(int *this, _DWORD *a2) { _DWORD *v2; // esi int *v3; // edi __int16 result; // ax int (__cdecl *v5)(int, int *, signed int, _DWORD **, signed int); // edx int v6; // ST00_4 v2 = a2; v3 = this; sub_831FA0(this, a2); if ( v2[7] >= 0xA000102u ) { v5 = *(int (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v2[88] + 4); v6 = v2[88]; a2 = (_DWORD *)2; result = v5(v6, v3 + 16, 2, &a2, 1); } else { result = (*((_WORD *)v2 + 207) >> 5) & 0x3F; *((_WORD *)v3 + 32) = result; } if ( v2[7] < 0xA010068u ) result = sub_876290((void **)v2); return result; } //----- (00823740) -------------------------------------------------------- unsigned int __thiscall sub_823740(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831F10(this, a2); v3 = sub_8784D0(*(int *)dword_BA4378); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00823790) -------------------------------------------------------- char __thiscall sub_823790(_DWORD *this, int a2) { return sub_86C250(this, a2); } //----- (008237A0) -------------------------------------------------------- void __thiscall sub_8237A0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // edx int v4; // ecx bool v5; // zf _DWORD *v6; // ecx void *v7; // edi unsigned int v8; // eax unsigned int v9; // eax v2 = this; if ( a2 == this[2] ) return; if ( a2 < this[3] ) { v3 = a2; do { v4 = v2[1]; v5 = *(_DWORD *)(v4 + 4 * v3) == 0; v6 = (_DWORD *)(v4 + 4 * v3); if ( !v5 ) { *v6 = 0; --v2[4]; } ++v3; } while ( v3 < v2[3] ); v2[3] = a2; } v7 = (void *)v2[1]; v2[2] = a2; if ( !a2 ) { v2[1] = 0; LABEL_15: operator delete(v7); return; } v2[1] = operator new(4 * a2); v8 = 0; if ( v2[3] ) { do { *(_DWORD *)(v2[1] + 4 * v8) = *((_DWORD *)v7 + v8); ++v8; } while ( v8 < v2[3] ); } v9 = v2[3]; if ( v9 >= v2[2] ) goto LABEL_15; do *(_DWORD *)(v2[1] + 4 * v9++) = 0; while ( v9 < v2[2] ); operator delete(v7); } //----- (00823870) -------------------------------------------------------- unsigned int __thiscall sub_823870(_DWORD *this, unsigned int a2, _DWORD *a3) { unsigned int result; // eax _DWORD *v4; // edx int v5; // esi result = a2; if ( a2 < this[2] ) { if ( a2 < this[3] ) { v4 = a3; v5 = this[1]; if ( *a3 ) { if ( !*(_DWORD *)(v5 + 4 * a2) ) { ++this[4]; *(_DWORD *)(this[1] + 4 * a2) = *a3; return result; } } else if ( *(_DWORD *)(v5 + 4 * a2) ) { --this[4]; } } else { this[3] = a2 + 1; v4 = a3; if ( *a3 ) { ++this[4]; *(_DWORD *)(this[1] + 4 * a2) = *a3; return result; } } *(_DWORD *)(this[1] + 4 * a2) = *v4; } return result; } //----- (008238E0) -------------------------------------------------------- void *__thiscall sub_8238E0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A21C0C: using guessed type void *NiTArray::`vftable'; //----- (00823910) -------------------------------------------------------- LONG __stdcall sub_823910(int a1, int a2, LONG a3) { int v3; // esi LONG result; // eax int (__thiscall ***v5)(_DWORD, signed int); // esi *(_DWORD *)(a1 + 4) = a2; v3 = *(_DWORD *)(a1 + 8); result = a3; if ( v3 == a3 ) { LABEL_9: if ( result ) { v5 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v5 ) result = (**v5)(v5, 1); } } return result; } if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); result = a3; } *(_DWORD *)(a1 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a3; goto LABEL_9; } return result; } //----- (00823990) -------------------------------------------------------- void __thiscall sub_823990(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_7FF8A0(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_7FF8A0(v1); operator delete(*((void **)v1 + 2)); } // A21C14: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A21C34: using guessed type void *NiTPointerMap>::`vftable'; // A21C54: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (00823A00) -------------------------------------------------------- void **__thiscall sub_823A00(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_7FF8A0(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A21C14: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (00823A40) -------------------------------------------------------- void **__thiscall sub_823A40(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_7FF8A0(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_7FF8A0(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A21C14: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A21C34: using guessed type void *NiTPointerMap>::`vftable'; //----- (00823A80) -------------------------------------------------------- char __thiscall sub_823A80(_DWORD *this) { int v1; // ecx int v2; // eax v1 = this[12]; if ( !v1 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)v1 + 4))(); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA457C ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00823AB0) -------------------------------------------------------- void __thiscall sub_823AB0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx _DWORD *v4; // esi unsigned int v5; // edi char *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // esi int v9; // eax int v10; // ebx int v11; // ebx char *v12; // edi int v13; // eax int v14; // ebx void *v15; // ST10_4 void *v16; // ST0C_4 void *v17; // ST08_4 void *v18; // ST04_4 int v19; // eax int v20; // edi int v21; // eax int v22; // esi LONG v23; // ST10_4 unsigned int v24; // [esp+Ch] [ebp-14h] _DWORD *v25; // [esp+10h] [ebp-10h] int v26; // [esp+14h] [ebp-Ch] int v27; // [esp+18h] [ebp-8h] int v28; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = this; sub_86C590(this, a2); if ( a2[7] >= 0x4010003u ) { v19 = sub_875B00(a2); if ( v19 ) { v20 = v19; while ( 1 ) { v21 = sub_875AD0(v2); v22 = *(_DWORD *)(v21 + 8); v23 = v21; InterlockedIncrement((volatile LONG *)(v21 + 4)); sub_923970(v3 + 15, v22, v23); if ( !--v20 ) break; v2 = a2; } } } else { v4 = dword_BA4380; v5 = 0; v24 = *((_DWORD *)dword_BA4380 + 15); v26 = 0; v28 = 0; if ( v24 ) { v25 = v3 + 15; do { v6 = *(char **)(v4[7] + 4 * v5); v7 = operator new(0x44u); if ( v7 ) v8 = sub_81A9B0(v7, v6, 12, 12); else v8 = 0; operator delete(v6); v8[16] = *(_DWORD *)(*((_DWORD *)dword_BA4380 + 1) + 4 * v5); v9 = sub_875AD0(a2); v10 = v8[15]; v27 = v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v9 = v27; } v8[15] = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } v11 = *(_DWORD *)(*((_DWORD *)dword_BA4380 + 13) + 4 * v5); if ( v11 ) { do { v12 = *(char **)(*((_DWORD *)dword_BA4380 + 19) + 4 * v28++); v13 = sub_875AD0(a2); sub_81ABB0(v8, v12, v13); operator delete(v12); --v11; } while ( v11 ); v5 = v26; } v14 = v8[2]; InterlockedIncrement(v8 + 1); sub_923970(v25, v14, (LONG)v8); v4 = dword_BA4380; v26 = ++v5; } while ( v5 < v24 ); } if ( v4 ) { v15 = (void *)v4[19]; v4[18] = &NiTArray::`vftable'; operator delete(v15); v16 = (void *)v4[13]; v4[12] = &NiTArray::`vftable'; operator delete(v16); v17 = (void *)v4[7]; v4[6] = &NiTArray::`vftable'; operator delete(v17); v18 = (void *)v4[1]; *v4 = &NiTArray::`vftable'; operator delete(v18); operator delete(v4); } dword_BA4380 = 0; } } // A20928: using guessed type void *NiTArray::`vftable'; // A21C0C: using guessed type void *NiTArray::`vftable'; //----- (00823CA0) -------------------------------------------------------- char __thiscall sub_823CA0(_DWORD *this, char *a2, char *Src, int a4) { char *v4; // esi _DWORD *v5; // edi char *v6; // ecx int v8; // esi char *v9; // esi LONG v10; // [esp-4h] [ebp-Ch] v4 = Src; v5 = this; sub_81B1A0((int)&Src, a2, a4, (int)Src); v6 = Src; if ( !Src ) return 0; if ( v4 ) { sub_81A700((void **)Src, v4); v6 = Src; } v8 = *((_DWORD *)v6 + 2); v10 = (LONG)v6; if ( Src ) InterlockedIncrement((volatile LONG *)Src + 1); sub_923970(v5 + 15, v8, v10); if ( Src ) { v9 = Src; if ( !InterlockedDecrement((volatile LONG *)Src + 1) ) { if ( v9 ) (**(void (__thiscall ***)(char *, signed int))v9)(v9, 1); } } return 1; } //----- (00823D30) -------------------------------------------------------- void __thiscall sub_823D30(int *this, void **a2) { void **v2; // ebx _DWORD *v3; // eax void *v4; // ST00_4 void (__cdecl *v5)(void *, char **, signed int, char **, signed int); // eax _DWORD *v6; // eax _DWORD *v7; // ST00_4 void (__cdecl *v8)(_DWORD *, char *, signed int, char **, signed int); // eax _DWORD *v9; // eax _DWORD *v10; // ST00_4 void (__cdecl *v11)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v12; // eax _DWORD *v13; // esi unsigned int v14; // eax _DWORD *v15; // eax _DWORD *v16; // ST00_4 void (__cdecl *v17)(_DWORD *, char **, signed int, int *, signed int); // eax unsigned int v18; // esi unsigned int *v19; // ebx _DWORD *v20; // edi void (__cdecl *v21)(void *, int *, signed int, int *, signed int); // edx void *v22; // ST00_4 _DWORD *v23; // esi unsigned int v24; // edi _DWORD *v25; // esi unsigned int v26; // edi void *v27; // ST00_4 void (__cdecl *v28)(void *, int *, signed int, void ***, signed int); // eax int v29; // edi _DWORD *v30; // eax void (__cdecl *v31)(_DWORD *, char *, signed int, int *, signed int); // edx void (__cdecl *v32)(void *, int *, signed int, int *, signed int); // edx void *v33; // ST00_4 int v34; // [esp+Ch] [ebp-28h] int v35; // [esp+10h] [ebp-24h] int *v36; // [esp+14h] [ebp-20h] char *v37; // [esp+18h] [ebp-1Ch] char *v38; // [esp+1Ch] [ebp-18h] char *v39; // [esp+20h] [ebp-14h] int v40; // [esp+24h] [ebp-10h] char *Src; // [esp+28h] [ebp-Ch] int v42; // [esp+2Ch] [ebp-8h] char v43; // [esp+33h] [ebp-1h] v2 = a2; v36 = this; sub_86C630(this, (signed int)a2); v3 = v2[88]; if ( (unsigned int)v2[7] >= 0x4010003 ) { v27 = v2[88]; v28 = (void (__cdecl *)(void *, int *, signed int, void ***, signed int))v3[1]; v29 = 0; a2 = (void **)4; v28(v27, &v40, 4, &a2, 1); while ( v40 ) { v30 = v2[88]; --v40; v31 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v30[1]; v34 = 1; v31(v30, (char *)&a2 + 3, 1, &v34, 1); if ( HIBYTE(a2) ) { v37 = 0; sub_8769C0(v2, &v37); v38 = 0; sub_8769C0(v2, &v38); v32 = (void (__cdecl *)(void *, int *, signed int, int *, signed int))*((_DWORD *)v2[88] + 1); v33 = v2[88]; v34 = 4; v32(v33, &v35, 4, &v34, 1); sub_823CA0(v36, v38, v37, v35); operator delete(v37); operator delete(v38); } else { sub_876290(v2); ++v29; } } --v40; sub_8764B0(v2, v29); } else { v4 = v2[88]; v5 = (void (__cdecl *)(void *, char **, signed int, char **, signed int))v3[1]; v37 = (char *)4; v5(v4, &v38, 4, &v37, 1); while ( v38 ) { v6 = v2[88]; --v38; v7 = v6; v8 = (void (__cdecl *)(_DWORD *, char *, signed int, char **, signed int))v6[1]; v39 = (char *)1; v8(v7, &v43, 1, &v39, 1); Src = 0; sub_8769C0(v2, &Src); if ( v43 ) { v39 = 0; sub_8769C0(v2, &v39); v9 = v2[88]; v10 = v9; v11 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v9[1]; v35 = 4; v11(v10, &v34, 4, &v35, 1); sub_823CA0(v36, v39, Src, v34); operator delete(v39); operator delete(Src); } else { v12 = operator new(0x60u); if ( v12 ) { *v12 = &NiTArray::`vftable'; v12[2] = 0; v12[5] = 1; v12[3] = 0; v12[4] = 0; v12[1] = 0; v12[8] = 0; v12[11] = 1; v12[9] = 0; v12[10] = 0; v12[7] = 0; v12[6] = &NiTArray::`vftable'; v12[12] = &NiTArray::`vftable'; v12[14] = 0; v12[17] = 1; v12[15] = 0; v12[16] = 0; v12[13] = 0; v12[18] = &NiTArray::`vftable'; v12[20] = 0; v12[23] = 1; v12[21] = 0; v12[22] = 0; v12[19] = 0; } else { v12 = 0; } v13 = v12 + 6; dword_BA4380 = v12; v14 = v12[9]; v35 = v14; if ( v14 < v13[2] || (sub_8237A0(v13, v14 + v13[5]), v14 = v35, (unsigned int)v35 < v13[2]) ) { if ( v14 < v13[3] ) { if ( Src ) { if ( !*(_DWORD *)(v13[1] + 4 * v14) ) ++v13[4]; } else if ( *(_DWORD *)(v13[1] + 4 * v14) ) { --v13[4]; } } else { v13[3] = v14 + 1; if ( Src ) ++v13[4]; } *(_DWORD *)(v13[1] + 4 * v14) = Src; } v15 = v2[88]; v16 = v15; v17 = (void (__cdecl *)(_DWORD *, char **, signed int, int *, signed int))v15[1]; v35 = 4; v17(v16, &v37, 4, &v35, 1); v18 = *((_DWORD *)dword_BA4380 + 3); v19 = (unsigned int *)((char *)dword_BA4380 + 12); v20 = dword_BA4380; v35 = (int)dword_BA4380 + 8; if ( v18 < *((_DWORD *)dword_BA4380 + 2) || (sub_8237A0(dword_BA4380, v18 + *((_DWORD *)dword_BA4380 + 5)), v18 < *(_DWORD *)v35) ) { if ( v18 < *v19 ) { if ( v37 ) { if ( !*(_DWORD *)(v20[1] + 4 * v18) ) ++v20[4]; } else if ( *(_DWORD *)(v20[1] + 4 * v18) ) { --v20[4]; } } else { *v19 = v18 + 1; if ( v37 ) ++v20[4]; } *(_DWORD *)(v20[1] + 4 * v18) = v37; } v2 = a2; sub_876290(a2); v21 = (void (__cdecl *)(void *, int *, signed int, int *, signed int))*((_DWORD *)v2[88] + 1); v22 = v2[88]; v35 = 4; v21(v22, &v42, 4, &v35, 1); v23 = dword_BA4380; v24 = *((_DWORD *)dword_BA4380 + 15); if ( v24 < *((_DWORD *)dword_BA4380 + 14) || (sub_8237A0((_DWORD *)dword_BA4380 + 12, v24 + *((_DWORD *)dword_BA4380 + 17)), v24 < v23[14]) ) { if ( v24 < v23[15] ) { if ( v42 ) { if ( !*(_DWORD *)(v23[13] + 4 * v24) ) ++v23[16]; } else if ( *(_DWORD *)(v23[13] + 4 * v24) ) { --v23[16]; } } else { v23[15] = v24 + 1; if ( v42 ) ++v23[16]; } *(_DWORD *)(v23[13] + 4 * v24) = v42; } while ( v42 ) { --v42; v39 = 0; sub_8769C0(v2, &v39); v25 = dword_BA4380; v26 = *((_DWORD *)dword_BA4380 + 21); if ( v26 < *((_DWORD *)dword_BA4380 + 20) || (sub_8237A0((_DWORD *)dword_BA4380 + 18, v26 + *((_DWORD *)dword_BA4380 + 23)), v26 < v25[20]) ) { if ( v26 < v25[21] ) { if ( v39 ) { if ( !*(_DWORD *)(v25[19] + 4 * v26) ) ++v25[22]; } else if ( *(_DWORD *)(v25[19] + 4 * v26) ) { --v25[22]; } } else { v25[21] = v26 + 1; if ( v39 ) ++v25[22]; } *(_DWORD *)(v25[19] + 4 * v26) = v39; } sub_876290(v2); } --v42; } } } } // A20928: using guessed type void *NiTArray::`vftable'; // A21C0C: using guessed type void *NiTArray::`vftable'; //----- (00824190) -------------------------------------------------------- void *__thiscall sub_824190(void *this, char a2) { void *v2; // esi v2 = this; sub_823990(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00824220) -------------------------------------------------------- void *sub_824220() { return &unk_BA4384; } //----- (00824230) -------------------------------------------------------- _DWORD *__thiscall sub_824230(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_823990((_BYTE *)this + 60); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00824260) -------------------------------------------------------- float *sub_824260() { float *v0; // esi void *v1; // eax size_t v2; // ST08_4 float *v4; // eax v4 = (float *)operator new(0x50u); if ( !v4 ) return 0; v0 = v4; sub_86C310(v4); *(_DWORD *)v0 = &NiKeyframeManager::`vftable'; *((_DWORD *)v0 + 16) = 37; *((_DWORD *)v0 + 15) = &NiTMapBase,char const *,NiPointer>::`vftable'; v0[18] = 0.0; v1 = operator new(0x94u); v2 = 4 * *((_DWORD *)v0 + 16); *((_DWORD *)v0 + 17) = v1; memset(v1, 0, v2); *((_BYTE *)v0 + 76) = 0; *((_DWORD *)v0 + 15) = &NiTStringPointerMap>::`vftable'; return v0; } // A21C14: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A21C74: using guessed type void *NiTStringPointerMap>::`vftable'; // A21C94: using guessed type void *NiKeyframeManager::`vftable'; //----- (00824280) -------------------------------------------------------- void __thiscall sub_824280(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi int v4; // ecx int v5; // [esp+Ch] [ebp-4h] v3 = this; if ( this[2] ) { v5 = this[3]; sub_817370(2, this[4], (int)&v5, (int)(this + 2), a2, a3); v3[3] = v5; } if ( v3[6] ) { v4 = v3[8]; v5 = v3[7]; sub_817370(1, v4, (int)&v5, (int)(v3 + 6), a2, a3); v3[7] = v5; } if ( v3[10] ) { v5 = v3[11]; sub_817370(0, v3[12], (int)&v5, (int)(v3 + 10), a2, a3); v3[11] = v5; } } //----- (00824340) -------------------------------------------------------- _DWORD *sub_824340() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x38u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; *((_BYTE *)v1 + 36) = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; *((_BYTE *)v1 + 52) = 0; *v1 = &NiTransformData::`vftable'; return v1; } // A21CFC: using guessed type void *NiTransformData::`vftable'; //----- (00824390) -------------------------------------------------------- char *sub_824390() { return dword_BA438C; } //----- (008243A0) -------------------------------------------------------- char __thiscall sub_8243A0(int this, int a2, int a3, int a4) { char result; // al if ( a2 && (result = a3, a3) ) { *(_DWORD *)(this + 24) = a3; *(_DWORD *)(this + 28) = a2; *(_DWORD *)(this + 32) = a4; result = byte_BA3BEE[a4]; *(_BYTE *)(this + 36) = result; } else { *(_DWORD *)(this + 24) = 0; *(_DWORD *)(this + 28) = 0; *(_DWORD *)(this + 32) = 0; *(_BYTE *)(this + 36) = 0; } return result; } //----- (008243E0) -------------------------------------------------------- char __thiscall sub_8243E0(int this, int a2, int a3, int a4) { char result; // al if ( a2 && (result = a3, a3) ) { *(_DWORD *)(this + 40) = a3; *(_DWORD *)(this + 44) = a2; *(_DWORD *)(this + 48) = a4; result = byte_BA3BE8[a4]; *(_BYTE *)(this + 52) = result; } else { *(_DWORD *)(this + 40) = 0; *(_DWORD *)(this + 44) = 0; *(_BYTE *)(this + 52) = 0; *(_DWORD *)(this + 48) = 0; } return result; } //----- (00824420) -------------------------------------------------------- char __thiscall sub_824420(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // ebx int v8; // ebx int v9; // ebx unsigned __int8 (__cdecl *v10)(int, int); // [esp+10h] [ebp+8h] unsigned __int8 (__cdecl *v11)(int, int); // [esp+10h] [ebp+8h] unsigned __int8 (__cdecl *v12)(int, int); // [esp+10h] [ebp+8h] v2 = (_DWORD *)a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || v3[6] != *(_DWORD *)(a2 + 24) || v3[8] != *(_DWORD *)(a2 + 32) || v3[10] != *(_DWORD *)(a2 + 40) || v3[12] != *(_DWORD *)(a2 + 48) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) || *((_BYTE *)v3 + 36) != *(_BYTE *)(a2 + 36) || *((_BYTE *)v3 + 52) != *(_BYTE *)(a2 + 52) ) { return 0; } v7 = 0; v10 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3FA0[v6]; if ( v5 ) { while ( v10(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + v2[3]) ) { if ( (unsigned int)++v7 >= v3[2] ) goto LABEL_15; } } else { LABEL_15: v8 = 0; v11 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F88[v3[8]]; if ( v3[6] ) { while ( v11(v8 * *((unsigned __int8 *)v3 + 36) + v3[7], v8 * *((unsigned __int8 *)v3 + 36) + v2[7]) ) { if ( (unsigned int)++v8 >= v3[6] ) goto LABEL_18; } } else { LABEL_18: v9 = 0; v12 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v3[12]]; if ( !v3[10] ) return 1; while ( v12(v9 * *((unsigned __int8 *)v3 + 52) + v3[11], v9 * *((unsigned __int8 *)v3 + 52) + v2[11]) ) { if ( (unsigned int)++v9 >= v3[10] ) return 1; } } } return 0; } // BA3F70: using guessed type int dword_BA3F70[]; // BA3F88: using guessed type int dword_BA3F88[]; // BA3FA0: using guessed type int dword_BA3FA0[]; //----- (00824550) -------------------------------------------------------- LONG __thiscall sub_824550(_DWORD *this) { _DWORD *v1; // esi int *v2; // edi v1 = this; v2 = (int *)this[3]; *this = &NiTransformData::`vftable'; if ( v2 ) { if ( this[4] == 4 ) sub_806AF0(v2); ((void (__cdecl *)(int *))dword_BA3D60[v1[4]])(v2); } if ( v1[7] ) ((void (__cdecl *)(_DWORD))dword_BA3D48[v1[8]])(v1[7]); if ( v1[11] ) ((void (__cdecl *)(_DWORD))dword_BA3D30[v1[12]])(v1[11]); return sub_85BA80(v1); } // A21CFC: using guessed type void *NiTransformData::`vftable'; // BA3D30: using guessed type int dword_BA3D30[]; // BA3D48: using guessed type int dword_BA3D48[]; // BA3D60: using guessed type int dword_BA3D60[]; //----- (008245C0) -------------------------------------------------------- int __thiscall sub_8245C0(int this, int a2, int a3, int a4) { int v4; // esi int v5; // edi int result; // eax v4 = this; v5 = *(_DWORD *)(this + 12); if ( v5 ) { if ( *(_DWORD *)(this + 16) == 4 ) sub_806AF0(*(int **)(this + 12)); result = ((int (__cdecl *)(int))dword_BA3D60[*(_DWORD *)(v4 + 16)])(v5); } if ( a2 && (result = a3) != 0 ) { *(_DWORD *)(v4 + 8) = a3; result = a4; *(_DWORD *)(v4 + 12) = a2; *(_DWORD *)(v4 + 16) = a4; *(_BYTE *)(v4 + 20) = byte_BA3BF4[a4]; } else { *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 16) = 0; *(_BYTE *)(v4 + 20) = 0; } return result; } // BA3D60: using guessed type int dword_BA3D60[]; //----- (00824630) -------------------------------------------------------- char __thiscall sub_824630(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[7]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D48[this[8]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[6] = a3; v4[7] = a2; v4[8] = a4; LOBYTE(v5) = byte_BA3BEE[a4]; *((_BYTE *)v4 + 36) = v5; } else { v4[6] = 0; v4[7] = 0; v4[8] = 0; *((_BYTE *)v4 + 36) = 0; } return v5; } // BA3D48: using guessed type int dword_BA3D48[]; //----- (00824690) -------------------------------------------------------- char __thiscall sub_824690(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax v4 = this; v5 = this[11]; if ( v5 ) LOBYTE(v5) = ((int (__cdecl *)(int))dword_BA3D30[this[12]])(v5); if ( a2 && (LOBYTE(v5) = a3, a3) ) { v4[10] = a3; v4[11] = a2; v4[12] = a4; LOBYTE(v5) = byte_BA3BE8[a4]; *((_BYTE *)v4 + 52) = v5; } else { v4[10] = 0; v4[11] = 0; *((_BYTE *)v4 + 52) = 0; v4[12] = 0; } return v5; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (008246F0) -------------------------------------------------------- int __thiscall sub_8246F0(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // ebx int v7; // eax int v8; // eax int v9; // eax int v11; // [esp+1Ch] [ebp-Ch] int v12; // [esp+20h] [ebp-8h] int v13; // [esp+24h] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v11); *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v6 ) (**v6)(v6, 1); v7 = v4[2]; v12 = 0; v13 = 0; if ( v7 ) { sub_817070(2, v4[4], v4[3], v7, a3, a4, (int)&v12, (int)&v13); sub_8245C0(*(_DWORD *)a2, v12, v13, v4[4]); } v8 = v4[6]; if ( v8 ) { sub_817070(1, v4[8], v4[7], v8, a3, a4, (int)&v12, (int)&v13); sub_824630(*(_DWORD **)a2, v12, v13, v4[8]); } v9 = v4[10]; if ( v9 ) { sub_817070(0, v4[12], v4[11], v9, a3, a4, (int)&v12, (int)&v13); sub_824690(*(_DWORD **)a2, v12, v13, v4[12]); } return a2; } //----- (00824820) -------------------------------------------------------- void *__thiscall sub_824820(void *this, char a2) { void *v2; // esi v2 = this; sub_824550(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00824850) -------------------------------------------------------- char __thiscall sub_824850(int *this, signed int a2) { signed int v2; // esi int *v3; // ebx int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // edi int (__cdecl *v11)(signed int, signed int); // eax int v12; // eax int v13; // ST14_4 void (__cdecl *v14)(int, signed int *, signed int, int *, signed int); // eax int v15; // eax int v16; // ST14_4 void (__cdecl *v17)(int, int *, signed int, int *, signed int); // eax int v18; // edi int (__cdecl *v19)(signed int, signed int); // eax int v20; // eax int v21; // ST14_4 int (__cdecl *v22)(int, signed int *, signed int, int *, signed int); // eax char result; // al int v24; // eax int v25; // ST14_4 void (__cdecl *v26)(int, int *, signed int, int *, signed int); // eax int v27; // edi int (__cdecl *v28)(signed int, signed int); // eax int v29; // esi int v30; // [esp+Ch] [ebp-8h] int v31; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v31 = 4; v6(v5, &a2, 4, &v31, 1); if ( a2 ) { v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 4); v31 = 4; v9(v8, &v30, 4, &v31, 1); v10 = v30; v11 = (int (__cdecl *)(signed int, signed int))dword_BA4270[v30]; LOBYTE(v30) = byte_BA3BF4[v30]; v31 = v11(v2, a2); ((void (__cdecl *)(int, signed int, int))dword_BA3C40[v10])(v31, a2, v30); sub_8245C0((int)v3, v31, a2, v10); } v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v12 + 4); v30 = 4; v14(v13, &a2, 4, &v30, 1); if ( a2 ) { v15 = *(_DWORD *)(v2 + 352); v16 = v15; v17 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v15 + 4); v30 = 4; v17(v16, &v31, 4, &v30, 1); v18 = v31; v19 = (int (__cdecl *)(signed int, signed int))dword_BA4258[v31]; LOBYTE(v30) = byte_BA3BEE[v31]; v31 = v19(v2, a2); ((void (__cdecl *)(int, signed int, int))dword_BA3C28[v18])(v31, a2, v30); sub_824630(v3, v31, a2, v18); } v20 = *(_DWORD *)(v2 + 352); v21 = v20; v22 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v20 + 4); v30 = 4; result = v22(v21, &a2, 4, &v30, 1); if ( a2 ) { v24 = *(_DWORD *)(v2 + 352); v25 = v24; v26 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v24 + 4); v30 = 4; v26(v25, &v31, 4, &v30, 1); v27 = v31; v28 = (int (__cdecl *)(signed int, signed int))dword_BA4240[v31]; LOBYTE(v30) = byte_BA3BE8[v31]; v29 = v28(v2, a2); ((void (__cdecl *)(int, signed int, int))dword_BA3C10[v27])(v29, a2, v30); result = sub_824690(v3, v29, a2, v27); } return result; } // BA3C10: using guessed type int dword_BA3C10[]; // BA3C28: using guessed type int dword_BA3C28[]; // BA3C40: using guessed type int dword_BA3C40[]; // BA4240: using guessed type int dword_BA4240[]; // BA4258: using guessed type int dword_BA4258[]; // BA4270: using guessed type int dword_BA4270[]; //----- (00824A00) -------------------------------------------------------- int __thiscall sub_824A00(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi void (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int v6; // eax int v7; // ST0C_4 void (__cdecl *v8)(int, _DWORD *, signed int, signed int *, signed int); // eax int v9; // eax int v10; // ST0C_4 void (__cdecl *v11)(int, _DWORD *, signed int, signed int *, signed int); // eax int v12; // eax int v13; // ST0C_4 void (__cdecl *v14)(int, _DWORD *, signed int, signed int *, signed int); // eax int v15; // eax int v16; // ST0C_4 int (__cdecl *v17)(int, _DWORD *, signed int, signed int *, signed int); // eax int result; // eax int v19; // eax int v20; // ST0C_4 void (__cdecl *v21)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v6 = *(_DWORD *)(v2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; v8(v7, v3 + 4, 4, &a2, 1); ((void (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3F10[v3[4]])(v2, v3[3], v3[2]); } v9 = *(_DWORD *)(v2 + 356); v10 = v9; v11 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; v11(v10, v3 + 6, 4, &a2, 1); if ( v3[6] ) { v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v12 + 8); a2 = 4; v14(v13, v3 + 8, 4, &a2, 1); ((void (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EF8[v3[8]])(v2, v3[7], v3[6]); } v15 = *(_DWORD *)(v2 + 356); v16 = v15; v17 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v15 + 8); a2 = 4; result = v17(v16, v3 + 10, 4, &a2, 1); if ( v3[10] ) { v19 = *(_DWORD *)(v2 + 356); v20 = v19; v21 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v19 + 8); a2 = 4; v21(v20, v3 + 12, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[12]])(v2, v3[11], v3[10]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3EE0: using guessed type int dword_BA3EE0[]; // BA3EF8: using guessed type int dword_BA3EF8[]; // BA3F10: using guessed type int dword_BA3F10[]; //----- (00824B30) -------------------------------------------------------- unsigned int __thiscall sub_824B30(int *this, int a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA438C); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumRotKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiNumPosKeys", v3[6]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878670((int)"m_uiNumScaleKeys", v3[10]); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (00824C20) -------------------------------------------------------- _DWORD *__thiscall sub_824C20(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi _DWORD *result; // eax unsigned int v5; // edi v3 = this; result = (_DWORD *)this[16]; v5 = 0; if ( result[2] ) { do { result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, unsigned int))(*v3 + 112))(v3, v5); if ( result ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*result + 116))( result, LODWORD(a2), LODWORD(a3)); ++v5; } while ( v5 < *(_DWORD *)(v3[16] + 8) ); } return result; } //----- (00824C70) -------------------------------------------------------- int __thiscall sub_824C70(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned __int16 v3; // di int result; // eax int v5; // ecx v2 = this; sub_86C220(this, a2); v3 = 0; result = (*(int (__thiscall **)(_DWORD *))(*v2 + 100))(v2); if ( (unsigned __int16)result > 0u ) { do { v5 = *(_DWORD *)(v2[17] + 4 * v3); if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 40))(a2); ++v3; result = (*(int (__thiscall **)(_DWORD *))(*v2 + 100))(v2); } while ( v3 < (unsigned __int16)result ); } return result; } //----- (00824CC0) -------------------------------------------------------- char __thiscall sub_824CC0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx int v5; // edi int v6; // eax v2 = this; result = sub_823790(this, a2); if ( result ) { v4 = v2[16]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); v5 = 0; if ( (*(unsigned __int16 (__thiscall **)(_DWORD *))(*v2 + 100))(v2) > 0u ) { do { v6 = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 112))(v2, v5); if ( v6 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 20))(v6, a2); ++v5; } while ( (unsigned __int16)v5 < (*(unsigned __int16 (__thiscall **)(_DWORD *))(*v2 + 100))(v2) ); } result = 1; } return result; } //----- (00824D30) -------------------------------------------------------- char __thiscall sub_824D30(float *this, int a2) { int v2; // edi float *v3; // esi int v5; // ebx _DWORD *v6; // eax int v7; // edi _DWORD *v8; // ST10_4 int v9; // eax v2 = a2; v3 = this; if ( !sub_8983A0(this, a2) || !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 16) + 28))(*(_DWORD *)(a2 + 64)) ) { return 0; } v5 = 0; if ( (*(unsigned __int16 (__thiscall **)(float *))(*(_DWORD *)v3 + 100))(v3) <= 0u ) return 1; while ( 1 ) { v6 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 112))(v2, v5); v7 = *v6; v8 = v6; v9 = (*(int (__thiscall **)(float *, int))(*(_DWORD *)v3 + 112))(v3, v5); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int))(v7 + 28))(v8, v9) ) break; if ( (unsigned __int16)++v5 >= (*(unsigned __int16 (__thiscall **)(float *))(*(_DWORD *)v3 + 100))(v3) ) return 1; v2 = a2; } return 0; } //----- (00824DD0) -------------------------------------------------------- int __thiscall sub_824DD0(_DWORD *this, unsigned __int16 a2) { int v2; // ecx int result; // eax v2 = this[16]; if ( (unsigned int)a2 >= *(_DWORD *)(v2 + 8) ) result = sub_965050(0); else result = sub_965050((_DWORD *)(*(_DWORD *)(v2 + 16) + 16 * a2)); return result; } //----- (00824E00) -------------------------------------------------------- int __thiscall sub_824E00(_DWORD *this, unsigned __int16 a2) { return *(_DWORD *)(this[17] + 4 * a2); } //----- (00824E20) -------------------------------------------------------- LONG __thiscall sub_824E20(_DWORD *this, int a2, unsigned __int16 a3) { LONG result; // eax int v4; // ecx int v5; // esi _DWORD *v6; // edi result = a3; v4 = this[17]; v5 = *(_DWORD *)(v4 + 4 * a3); v6 = (_DWORD *)(v4 + 4 * a3); if ( v5 != a2 ) { if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) { if ( v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } *v6 = a2; if ( a2 ) result = InterlockedIncrement((volatile LONG *)(a2 + 4)); } return result; } //----- (00824E80) -------------------------------------------------------- int __thiscall sub_824E80(_DWORD *this) { int v1; // eax int result; // eax v1 = this[16]; if ( v1 ) result = *(_DWORD *)(v1 + 8); else result = 0; return result; } //----- (00824E90) -------------------------------------------------------- void __thiscall sub_824E90(int this) { float *v1; // esi int v2; // eax unsigned int v3; // ebx unsigned int v4; // edi int v5; // eax void (__thiscall *v6)(int, float *, float *); // edx float v7; // [esp+4h] [ebp-8h] float v8; // [esp+8h] [ebp-4h] v1 = (float *)this; if ( !((*(_BYTE *)(this + 8) >> 5) & 1) ) { v2 = *(_DWORD *)(this + 64); v3 = v2 ? *(_DWORD *)(v2 + 8) : 0; *(float *)(this + 20) = 3.4028235e38; v4 = 0; *(float *)(this + 24) = -3.4028235e38; if ( v3 ) { do { v5 = (*(int (__thiscall **)(float *, unsigned int))(*(_DWORD *)v1 + 112))(v1, v4); if ( v5 ) { v6 = *(void (__thiscall **)(int, float *, float *))(*(_DWORD *)v5 + 112); v7 = -3.4028235e38; v8 = 3.4028235e38; v6(v5, &v8, &v7); if ( v1[5] > (double)v8 ) v1[5] = v8; if ( v1[6] < (double)v7 ) v1[6] = v7; } ++v4; } while ( v4 < v3 ); } } } //----- (00824F40) -------------------------------------------------------- void __thiscall sub_824F40(int this, float a2) { int v2; // esi v2 = this; if ( *(_DWORD *)(this + 64) ) { if ( (*(_BYTE *)(this + 8) >> 5) & 1 ) { *(_BYTE *)(this + 72) = 1; *(float *)(this + 40) = -3.4028235e38; } else if ( !sub_80FFE0((float *)this, a2) || *(_BYTE *)(v2 + 74) ) { *(_BYTE *)(v2 + 72) = 1; } } } //----- (00824F90) -------------------------------------------------------- void __thiscall sub_824F90(float *this, int a2) { float *v2; // esi int v3; // eax int v4; // edx int v5; // ecx unsigned int v6; // edi int v7; // ebx int v8; // eax float *v9; // ecx int v10; // eax float *v11; // ecx unsigned int v12; // ebx int v13; // edi int v14; // eax float *v15; // ecx void *v16; // [esp+28h] [ebp-10h] int v17; // [esp+2Ch] [ebp-Ch] unsigned int v18; // [esp+30h] [ebp-8h] float v19; // [esp+34h] [ebp-4h] v2 = this; v3 = (*(int (**)(void))(*(_DWORD *)this + 148))(); v4 = *(_DWORD *)(*((_DWORD *)v2 + 12) + 184); v5 = *(unsigned __int16 *)(v4 + 12); v16 = (void *)v3; v6 = 0; v18 = *(_DWORD *)(*((_DWORD *)v2 + 16) + 8); v17 = *(unsigned __int16 *)(v4 + 12); if ( v18 ) { while ( 1 ) { v7 = (*(int (__thiscall **)(float *, unsigned int))(*(_DWORD *)v2 + 112))(v2, v6); v8 = *((_DWORD *)v2 + 16); v9 = (float *)(v6 >= *(_DWORD *)(v8 + 8) ? 0 : *(_DWORD *)(v8 + 16) + 16 * v6); v19 = sub_820E60(v9); if ( !v6 ) { if ( *(_BYTE *)(*((_DWORD *)v2 + 16) + 20) ) break; } if ( v7 && (*(unsigned __int8 (__thiscall **)(int, float, _DWORD, float *))(*(_DWORD *)v7 + 76))( v7, v2[10], *((_DWORD *)v2 + 12), &v19) ) { goto LABEL_12; } LABEL_16: if ( ++v6 >= v18 ) { v5 = v17; goto LABEL_18; } } if ( *((_BYTE *)v2 + 73) ) v19 = 0.0; else v19 = 1.0; LABEL_12: v10 = *((_DWORD *)v2 + 16); if ( v6 >= *(_DWORD *)(v10 + 8) ) v11 = 0; else v11 = (float *)(*(_DWORD *)(v10 + 16) + 16 * v6); sub_6A2610(v11, v19); goto LABEL_16; } LABEL_18: if ( !*((_BYTE *)v2 + 73) ) memset(v16, 0, 12 * v5); v12 = 0; if ( v18 ) { v13 = 0; do { v14 = *((_DWORD *)v2 + 16); if ( v12 >= *(_DWORD *)(v14 + 8) ) v15 = 0; else v15 = (float *)(v13 + *(_DWORD *)(v14 + 16)); v19 = sub_820E60(v15); if ( v19 >= 0.001 || v19 <= -0.001 ) sub_87B3A0((int)v16, v19, *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v2 + 16) + 16) + v13), v17); ++v12; v13 += 16; } while ( v12 < v18 ); } } //----- (00825100) -------------------------------------------------------- void __thiscall sub_825100(void *this, _DWORD *a2) { int v2; // esi int v3; // eax v2 = (int)this; if ( a2 && (v3 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2)) != 0 ) { while ( (char *)v3 != dword_BA4840 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } sub_86C4F0(v2, a2); if ( *(_DWORD *)(v2 + 64) ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 152))(v2); *(_BYTE *)(v2 + 75) = 1; } } else { LABEL_5: sub_86C4F0(v2, 0); } } //----- (00825170) -------------------------------------------------------- int __thiscall sub_825170(int this) { int v1; // esi int v2; // ecx int result; // eax v1 = this; if ( *(_BYTE *)(this + 72) ) { sub_824F90((float *)this, COERCE_INT(*(float *)(this + 40))); v2 = *(_DWORD *)(*(_DWORD *)(v1 + 48) + 184); result = 1; *(_WORD *)(v2 + 50) |= 1u; if ( *(_BYTE *)(v1 + 60) & 1 ) { if ( *(_DWORD *)(v2 + 36) ) result = (*(int (**)(void))(*(_DWORD *)v2 + 68))(); } *(_BYTE *)(v1 + 72) = 0; } return result; } //----- (008251B0) -------------------------------------------------------- int __thiscall sub_8251B0(_DWORD *this) { int v1; // edi _DWORD *v2; // eax unsigned int v3; // ebx float **v4; // ecx unsigned int v5; // esi signed int v6; // edi _DWORD *v7; // ecx float **v8; // eax int result; // eax char v10; // [esp+Ch] [ebp-24h] int v11; // [esp+1Ch] [ebp-14h] int v12; // [esp+20h] [ebp-10h] int v13; // [esp+24h] [ebp-Ch] float v14; // [esp+28h] [ebp-8h] _DWORD *v15; // [esp+2Ch] [ebp-4h] v1 = (int)this; v2 = (_DWORD *)this[16]; v3 = v2[2]; v15 = this; if ( v3 ) { if ( v3 ) v4 = (float **)v2[4]; else v4 = 0; sub_86B6C0((float *)&v11, v2[3], *v4); v5 = 1; if ( v3 > 1 ) { v6 = 16; do { v7 = (_DWORD *)v15[16]; if ( v5 >= v7[2] ) v8 = 0; else v8 = (float **)(v6 + v7[4]); sub_86B6C0((float *)&v10, v7[3], *v8); sub_86BC10((float *)&v11, (float *)&v10); ++v5; v6 += 16; } while ( v5 < v3 ); v1 = (int)v15; } } else { v14 = 0.0; v11 = dword_BA45C0; v12 = dword_BA45C4; v13 = dword_BA45C8; } result = *(_DWORD *)(*(_DWORD *)(v1 + 48) + 184); *(_DWORD *)(result + 16) = v11; *(_DWORD *)(result + 20) = v12; *(_DWORD *)(result + 24) = v13; *(float *)(result + 28) = v14; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00825280) -------------------------------------------------------- __int16 __thiscall sub_825280(_DWORD *this) { int v1; // eax __int16 result; // ax v1 = this[16]; if ( v1 ) result = *(_WORD *)(v1 + 8); else result = 0; return result; } //----- (00825290) -------------------------------------------------------- signed __int16 __thiscall sub_825290(_DWORD *this, const char *a2) { _DWORD *v2; // edi unsigned __int16 v4; // bx unsigned int v5; // esi int v6; // eax _DWORD *v7; // ecx const char *v8; // eax v2 = this; if ( !a2 ) return -1; v4 = 0; if ( !sub_824E80(this) ) return -1; v5 = 0; while ( 1 ) { v6 = v2[16]; v7 = (_DWORD *)(v5 >= *(_DWORD *)(v6 + 8) ? 0 : *(_DWORD *)(v6 + 16) + 16 * v5); v8 = (const char *)sub_965050(v7); if ( !sub_96C4B0(v8, a2) ) break; v5 = ++v4; if ( v4 >= (unsigned int)sub_824E80(v2) ) return -1; } return v4; } //----- (00825310) -------------------------------------------------------- float *__thiscall sub_825310(_DWORD *this, float a2) { int v2; // ecx float *v3; // eax double v4; // st7 float *v5; // eax float *result; // eax float v7; // [esp+Ch] [ebp+8h] v2 = this[16]; if ( (unsigned int)LOWORD(a2) < *(_DWORD *)(v2 + 8) && (v3 = (float *)(*(_DWORD *)(v2 + 16) + 16 * LOWORD(a2))) != 0 ) v4 = sub_820E60(v3); else v4 = 0.0; v7 = v4; v5 = (float *)operator new(0x18u); if ( v5 ) result = sub_826240(v5, v7); else result = 0; return result; } //----- (00825360) -------------------------------------------------------- void __thiscall sub_825360(_DWORD *this, int a2, float a3) { int v3; // ecx float *v4; // eax double v5; // st7 int v6; // eax char v7; // al float v8; // [esp+14h] [ebp+Ch] v3 = this[16]; if ( (unsigned int)LOWORD(a3) < *(_DWORD *)(v3 + 8) && (v4 = (float *)(*(_DWORD *)(v3 + 16) + 16 * LOWORD(a3))) != 0 ) v5 = sub_820E60(v4); else v5 = 0.0; v8 = v5; if ( a2 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v6 ) { while ( (char *)v6 != dword_BA43B0 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_10; } v7 = 1; } else { LABEL_10: v7 = 0; } sub_8263E0((float *)(v7 != 0 ? a2 : 0), v8); } else { sub_8263E0(0, v8); } } //----- (008253E0) -------------------------------------------------------- __int16 __thiscall sub_8253E0(_DWORD *this, unsigned __int16 a2) { _DWORD *v2; // esi int v3; // eax void *v4; // ecx int v5; // ebx int v6; // edi int v7; // ebx int v8; // esi _DWORD *v9; // eax int v10; // ecx void *v11; // edx int v13; // [esp+8h] [ebp-8h] _DWORD *v14; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[17]; v14 = this; if ( v3 ) { v4 = (void *)(v3 - 4); v5 = *(_DWORD *)(v3 - 4); v6 = v3 + 4 * v5; v7 = v5 - 1; v13 = v3 - 4; if ( v7 >= 0 ) { do { v8 = *(_DWORD *)(v6 - 4); v6 -= 4; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); --v7; } while ( v7 >= 0 ); v2 = v14; v4 = (void *)v13; } operator delete(v4); } LOWORD(v9) = a2; if ( !a2 ) { v2[17] = 0; return (signed __int16)v9; } v10 = 4 * a2 | -(a2 / 0x40000000u != 0); v9 = operator new((v10 + 4) | -__CFADD__(v10, 4)); if ( !v9 ) { v11 = 0; goto LABEL_15; } *v9 = a2; v11 = v9 + 1; LOWORD(v9) = a2 - 1; if ( a2 - 1 < 0 ) { LABEL_15: v14[17] = v11; return (signed __int16)v9; } LOWORD(v9) = 0; memset(v11, 0, 4 * a2); v14[17] = v11; return (signed __int16)v9; } //----- (008254C0) -------------------------------------------------------- __int16 __thiscall sub_8254C0(_DWORD *this, int a2, char a3) { _DWORD *v3; // edi int v4; // esi int v5; // eax int v6; // eax __int16 result; // ax v3 = this; v4 = this[16]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[16] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v5 = v3[16]; if ( v5 && (v6 = *(_DWORD *)(v5 + 8)) != 0 ) result = sub_8253E0(v3, v6); else result = sub_8253E0(v3, 0); if ( a3 ) result = (*(int (__thiscall **)(_DWORD *))(*v3 + 152))(v3); return result; } //----- (00825540) -------------------------------------------------------- void *sub_825540() { return &unk_BA4398; } //----- (00825550) -------------------------------------------------------- int __thiscall sub_825550(_DWORD *this) { return *(_DWORD *)(*(_DWORD *)(this[12] + 184) + 32); } //----- (00825560) -------------------------------------------------------- LONG __thiscall sub_825560(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &NiGeomMorpherController::`vftable'; v2 = this[16]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[16] = 0; } sub_8253E0(v1, 0); v3 = v1[16]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_86C3C0(v1); } // A21D74: using guessed type void *NiGeomMorpherController::`vftable'; //----- (008255D0) -------------------------------------------------------- int __thiscall sub_8255D0(void *this, int a2, _DWORD **a3) { void *v3; // esi int v4; // eax int v5; // ebx int result; // eax void *v7; // ecx int v8; // esi int v9; // eax void *v10; // [esp+Ch] [ebp-4h] v3 = this; v10 = this; sub_82F600(this, a2, a3); *(_WORD *)(a2 + 60) = *((_WORD *)v3 + 30); v4 = *((_DWORD *)v3 + 16); if ( v4 ) sub_8254C0((_DWORD *)a2, v4, *(_DWORD *)(a2 + 48) != 0); if ( byte_BA4394 ) { *((_BYTE *)v3 + 74) = 1; *(_BYTE *)(a2 + 74) = 1; } v5 = 0; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 100))(v3); if ( (unsigned __int16)result > 0u ) { do { v7 = *(void **)(*((_DWORD *)v3 + 17) + 4 * (unsigned __int16)v5); if ( v7 ) { v8 = *(_DWORD *)a2; v9 = sub_85BAA0(v7, a3); (*(void (__thiscall **)(int, int, int))(v8 + 116))(a2, v9, v5); v3 = v10; } else { (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)a2 + 116))(a2, 0, v5); } ++v5; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 100))(v3); } while ( (unsigned __int16)v5 < (unsigned __int16)result ); } return result; } // BA4394: using guessed type char byte_BA4394; //----- (00825680) -------------------------------------------------------- float *sub_825680() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x4Cu); v1 = v0; if ( !v0 ) return 0; sub_82F610(v0); *(_DWORD *)v1 = &NiGeomMorpherController::`vftable'; v1[16] = 0.0; *((_WORD *)v1 + 30) = 0; v1[17] = 0.0; v1[18] = 0.0; return v1; } // A21D74: using guessed type void *NiGeomMorpherController::`vftable'; //----- (008256C0) -------------------------------------------------------- int __thiscall sub_8256C0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST00_4 int (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax int v11; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_82F660(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, v3 + 15, 2, &a2, 1); } else { *((_WORD *)v3 + 30) = (*(_WORD *)(v2 + 414) >> 5) & 0x3F; } result = sub_876290((void **)v2); if ( *(_DWORD *)(v2 + 28) >= 0x4000002u ) { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v8 + 4); v11 = 1; result = v10(v9, (char *)&a2 + 3, 1, &v11, 1); *((_BYTE *)v3 + 74) = HIBYTE(a2) != 0; } if ( *(_DWORD *)(v2 + 28) >= 0xA010068u ) result = sub_876350((void **)v2); return result; } //----- (00825770) -------------------------------------------------------- int __thiscall sub_825770(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // ebx int v5; // edi int v6; // eax int v7; // eax int v8; // eax int v9; // ebx int v10; // edi int v11; // eax int v12; // eax int v13; // eax int result; // eax unsigned int v15; // edi int v16; // ebx int v17; // eax _DWORD *v18; // ecx int v19; // eax unsigned int v20; // ebx unsigned int v21; // edi int v22; // eax unsigned int v23; // [esp+20h] [ebp-4h] v2 = this; sub_898380(this, a2); if ( v2[12] ) { v3 = sub_875AD0(a2); v4 = v2[16]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[16] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = v2[16]; if ( v6 && (v7 = *(_DWORD *)(v6 + 8)) != 0 ) sub_8253E0(v2, v7); else sub_8253E0(v2, 0); (*(void (__thiscall **)(_DWORD *))(*v2 + 152))(v2); *((_BYTE *)v2 + 75) = 1; } else { v8 = sub_875AD0(a2); v9 = v2[16]; v10 = v8; if ( v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v2[16] = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v11 = v2[16]; if ( v11 && (v12 = *(_DWORD *)(v11 + 8)) != 0 ) sub_8253E0(v2, v12); else sub_8253E0(v2, 0); } if ( a2[7] < 0xA010068u && (v13 = v2[16]) != 0 ) { result = *(_DWORD *)(v13 + 8); v15 = 0; v23 = result; if ( result ) { v16 = 0; do { v17 = v2[16]; if ( v15 >= *(_DWORD *)(v17 + 8) ) v18 = 0; else v18 = (_DWORD *)(v16 + *(_DWORD *)(v17 + 16)); v19 = sub_965070(v18); result = (*(int (__thiscall **)(_DWORD *, int, unsigned int))(*v2 + 116))(v2, v19, v15++); v16 += 16; } while ( v15 < v23 ); } } else { result = sub_875B00(a2); v20 = result; if ( result ) { v21 = 0; if ( result ) { do { v22 = sub_875AD0(a2); result = (*(int (__thiscall **)(_DWORD *, int, unsigned int))(*v2 + 116))(v2, v22, v21++); } while ( v21 < v20 ); } } } if ( v2[16] ) { if ( a2[7] <= 0x401000Cu ) result = (*(int (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v2 + 140))(v2, *((float *)v2 + 5), *((float *)v2 + 6)); } return result; } //----- (00825900) -------------------------------------------------------- int __thiscall sub_825900(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax unsigned int v10; // ecx int v11; // eax int (__cdecl *v12)(int, unsigned int *, signed int, int *, signed int); // edx int result; // eax int v14; // ebx int v15; // eax int v16; // [esp+Ch] [ebp-8h] unsigned int v17; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_898390(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); v16 = 2; v6(v5, v3 + 15, 2, &v16, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[16]); HIBYTE(a2) = *((_BYTE *)v3 + 74); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v16 = 1; v9(v8, (char *)&a2 + 3, 1, &v16, 1); v10 = (*(unsigned __int16 (__thiscall **)(_DWORD *))(*v3 + 100))(v3); v11 = v2[89]; v17 = v10; v12 = *(int (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v11 + 8); v16 = 4; result = v12(v11, &v17, 4, &v16, 1); v14 = 0; if ( v17 ) { do { v15 = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 112))(v3, v14); result = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v15); ++v14; } while ( (unsigned __int16)v14 < v17 ); } return result; } //----- (008259D0) -------------------------------------------------------- void *__thiscall sub_8259D0(void *this, char a2) { void *v2; // esi v2 = this; sub_825560(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00825A00) -------------------------------------------------------- int __thiscall sub_825A00(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x4Cu); v4 = (int)v3; if ( v3 ) { sub_82F610(v3); *(_DWORD *)v4 = &NiGeomMorpherController::`vftable'; *(_DWORD *)(v4 + 64) = 0; *(_DWORD *)(v4 + 68) = 0; *(_WORD *)(v4 + 60) = 0; *(_DWORD *)(v4 + 72) = 0; } else { v4 = 0; } sub_8255D0(v2, v4, a2); return v4; } // A21D74: using guessed type void *NiGeomMorpherController::`vftable'; //----- (00825A50) -------------------------------------------------------- float *__stdcall sub_825A50(int a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *result; // eax v5 = (float *)operator new(0x40u); if ( v5 ) result = sub_82D020(v5, a2, a4, a5); else result = 0; return result; } //----- (00825A90) -------------------------------------------------------- int __stdcall sub_825A90(int a1, int a2) { return (*(int (**)(void))(*(_DWORD *)a1 + 96))(); } //----- (00825AB0) -------------------------------------------------------- float *sub_825AB0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x50u); v1 = v0; if ( !v0 ) return 0; sub_832840(v0); *(_DWORD *)v1 = &NiFloatsExtraDataPoint3Controller::`vftable'; v1[18] = -6.8056469e38/*NaN*/; v1[19] = 0.0; return v1; } // A21E14: using guessed type void *NiFloatsExtraDataPoint3Controller::`vftable'; //----- (00825AF0) -------------------------------------------------------- bool __thiscall sub_825AF0(_DWORD *this, int a2) { return sub_832600(this, a2); } //----- (00825B00) -------------------------------------------------------- char __thiscall sub_825B00(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_832730(this, a2); if ( result ) result = *((_DWORD *)v2 + 18) == *(_DWORD *)(a2 + 72); return result; } //----- (00825B30) -------------------------------------------------------- char *sub_825B30() { return dword_BA43A0; } //----- (00825B40) -------------------------------------------------------- _DWORD *__thiscall sub_825B40(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 19); *(_DWORD *)this = &NiFloatsExtraDataPoint3Controller::`vftable'; operator delete(v3); sub_832860(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21E14: using guessed type void *NiFloatsExtraDataPoint3Controller::`vftable'; //----- (00825B80) -------------------------------------------------------- float *__thiscall sub_825B80(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi float *v4; // eax float *result; // eax int v6; // [esp+8h] [ebp-Ch] int v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[17]; *(float *)&v6 = sub_87B540(v3, this[18]); *(float *)&v7 = sub_87B540(v3, v2[18] + 1); *(float *)&v8 = sub_87B540(v3, v2[18] + 2); v4 = (float *)operator new(0x20u); if ( v4 ) result = sub_81C7F0(v4, v6, v7, v8); else result = 0; return result; } //----- (00825C00) -------------------------------------------------------- int __thiscall sub_825C00(_DWORD *this) { _DWORD *v1; // esi int result; // eax const char *v3; // ebx unsigned int v4; // kr00_4 char *v5; // eax int v6; // ST10_4 v1 = this; result = this[19]; if ( !result ) { operator delete(0); v3 = (const char *)v1[16]; v1[19] = 0; if ( v3 ) { v4 = strlen(v3); v5 = (char *)operator new(v4 + 15); v6 = v1[18]; v1[19] = v5; sub_7FF6E0(v5, v4 + 15, "%s[%d]", v3, v6); } result = v1[19]; } return result; } //----- (00825C60) -------------------------------------------------------- float *__thiscall sub_825C60(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x50u); v4 = v3; if ( v3 ) { sub_832840(v3); *(_DWORD *)v4 = &NiFloatsExtraDataPoint3Controller::`vftable'; v4[18] = -6.8056469e38/*NaN*/; v4[19] = 0.0; } else { v4 = 0; } sub_832650(v2, (int)v4, a2); v4[18] = v2[18]; return v4; } // A21E14: using guessed type void *NiFloatsExtraDataPoint3Controller::`vftable'; //----- (00825CB0) -------------------------------------------------------- int __thiscall sub_825CB0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // esi int v5; // eax char v6; // al _DWORD *v7; // edi int v8; // ST18_4 int v9; // ST1C_4 int v10; // ST20_4 v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA4328 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (_DWORD *)(v6 != 0 ? a2 : 0); } else { v4 = 0; } v7 = (_DWORD *)v3[17]; *(float *)&v8 = sub_87B540(v7, v3[18]); *(float *)&v9 = sub_87B540(v7, v3[18] + 1); *(float *)&v10 = sub_87B540(v7, v3[18] + 2); return sub_81C630(v4, v8, v9, v10); } //----- (00825D50) -------------------------------------------------------- char __thiscall sub_825D50(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx _DWORD *v6; // edi float v7; // [esp+18h] [ebp-Ch] float v8; // [esp+1Ch] [ebp-8h] float v9; // [esp+20h] [ebp-4h] v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 68))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &v7); if ( result ) { v6 = *(_DWORD **)(v2 + 68); if ( v6 ) { sub_87B520(v6, *(_DWORD *)(v2 + 72), v7); sub_87B520(v6, *(_DWORD *)(v2 + 72) + 1, v8); result = sub_87B520(v6, *(_DWORD *)(v2 + 72) + 2, v9); } } } return result; } //----- (00825E00) -------------------------------------------------------- int __thiscall sub_825E00(int *this, _DWORD *a2) { _DWORD *v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8A7990(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v2[88] + 4); v5 = v2[88]; a2 = (_DWORD *)4; return v4(v5, v3 + 18, 4, &a2, 1); } //----- (00825E40) -------------------------------------------------------- int __thiscall sub_825E40(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_832620(this, a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)4; return v4(v5, v3 + 18, 4, &a2, 1); } //----- (00825E80) -------------------------------------------------------- unsigned int __thiscall sub_825E80(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_832A20(this, a2); v4 = sub_8784D0(*(int *)dword_BA43A0); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878630((int)"m_iFloatsExtraDataIndex", *((_DWORD *)v3 + 18)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (00825F00) -------------------------------------------------------- int __stdcall sub_825F00(int a1, int a2) { return (*(int (**)(void))(*(_DWORD *)a1 + 88))(); } //----- (00825F20) -------------------------------------------------------- float *sub_825F20() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x50u); v1 = v0; if ( !v0 ) return 0; sub_832840(v0); *(_DWORD *)v1 = &NiFloatsExtraDataController::`vftable'; v1[18] = -6.8056469e38/*NaN*/; v1[19] = 0.0; return v1; } // A21ED4: using guessed type void *NiFloatsExtraDataController::`vftable'; //----- (00825F60) -------------------------------------------------------- char *sub_825F60() { return dword_BA43A8; } //----- (00825F70) -------------------------------------------------------- _DWORD *__thiscall sub_825F70(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 19); *(_DWORD *)this = &NiFloatsExtraDataController::`vftable'; operator delete(v3); sub_832860(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21ED4: using guessed type void *NiFloatsExtraDataController::`vftable'; //----- (00825FB0) -------------------------------------------------------- float *__thiscall sub_825FB0(_DWORD *this, int a2) { _DWORD *v2; // esi float *v3; // edi float v4; // ST00_4 v2 = this; v3 = (float *)operator new(0x18u); if ( !v3 ) return 0; v4 = sub_87B540((_DWORD *)v2[17], v2[18]); return sub_826240(v3, v4); } //----- (00825FF0) -------------------------------------------------------- float *__thiscall sub_825FF0(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x50u); v4 = v3; if ( v3 ) { sub_832840(v3); *(_DWORD *)v4 = &NiFloatsExtraDataController::`vftable'; v4[18] = -6.8056469e38/*NaN*/; v4[19] = 0.0; } else { v4 = 0; } sub_832650(v2, (int)v4, a2); v4[18] = v2[18]; return v4; } // A21ED4: using guessed type void *NiFloatsExtraDataController::`vftable'; //----- (00826040) -------------------------------------------------------- void __thiscall sub_826040(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx float *v4; // esi int v5; // eax char v6; // al float v7; // ST00_4 v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA43B0 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (float *)(v6 != 0 ? a2 : 0); } else { v4 = 0; } v7 = sub_87B540((_DWORD *)v3[17], v3[18]); sub_8263E0(v4, v7); } //----- (008260A0) -------------------------------------------------------- char __thiscall sub_8260A0(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx _DWORD *v6; // ecx v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( result ) { v6 = *(_DWORD **)(v2 + 68); if ( v6 ) result = sub_87B520(v6, *(_DWORD *)(v2 + 72), a2); } } return result; } //----- (00826120) -------------------------------------------------------- int __thiscall sub_826120(int *this, void **a2) { void **v2; // esi int *v3; // edi int (__cdecl *v4)(void *, int *, signed int, void ***, signed int); // edx void *v5; // ST00_4 int result; // eax v2 = a2; v3 = this; sub_8A7990(this, a2); v4 = (int (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v5 = v2[88]; a2 = (void **)4; result = v4(v5, v3 + 18, 4, &a2, 1); if ( (unsigned int)v2[7] < 0xA010068 ) result = sub_876290(v2); return result; } //----- (00826170) -------------------------------------------------------- unsigned int __thiscall sub_826170(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_832A20(this, a2); v4 = sub_8784D0(*(int *)dword_BA43A8); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878630((int)"m_iFloatsExtraDataIndex", *((_DWORD *)v3 + 18)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (008261F0) -------------------------------------------------------- float *__thiscall sub_8261F0(float *this, int a2) { float *v2; // esi float *result; // eax v2 = this; sub_8320E0(this); *(_DWORD *)v2 = &NiFloatInterpolator::`vftable'; v2[3] = -3.4028235e38; *((_DWORD *)v2 + 4) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = v2; v2[5] = 0.0; return result; } // A21F74: using guessed type void *NiFloatInterpolator::`vftable'; //----- (00826230) -------------------------------------------------------- char *sub_826230() { return dword_BA43B0; } //----- (00826240) -------------------------------------------------------- float *__thiscall sub_826240(float *this, float a2) { float *v2; // esi v2 = this; sub_8320E0(this); v2[3] = a2; *(_DWORD *)v2 = &NiFloatInterpolator::`vftable'; v2[4] = 0.0; v2[5] = 0.0; return v2; } // A21F74: using guessed type void *NiFloatInterpolator::`vftable'; //----- (00826270) -------------------------------------------------------- int __thiscall sub_826270(_DWORD *this, int a2) { int result; // eax result = this[4]; if ( result ) result = *(_DWORD *)(result + 8); return result; } //----- (00826280) -------------------------------------------------------- int __thiscall sub_826280(_DWORD *this, int a2) { int result; // eax result = this[4]; if ( result ) result = *(_DWORD *)(result + 12); return result; } //----- (00826290) -------------------------------------------------------- char __thiscall sub_826290(_DWORD *this, int a2) { int v2; // eax char result; // al v2 = this[4]; if ( v2 ) result = *(_BYTE *)(v2 + 20); else result = 0; return result; } //----- (008262B0) -------------------------------------------------------- bool __thiscall sub_8262B0(int this, int a2) { return !*(_DWORD *)(this + 16) && -3.4028235e38 != *(float *)(this + 12); } //----- (008262E0) -------------------------------------------------------- void __thiscall sub_8262E0(float *this) { float *v1; // edx int v2; // eax int v3; // ecx unsigned int v4; // esi int v5; // edi void (__thiscall ***v6)(_DWORD, signed int); // esi double v7; // st7 char v8; // dl unsigned int v9; // ecx int v10; // esi float v11; // [esp+0h] [ebp-8h] float *v12; // [esp+4h] [ebp-4h] v1 = this; v2 = *((_DWORD *)this + 4); v12 = this; if ( !v2 ) return; v3 = *(_DWORD *)(v2 + 16); v4 = *(_DWORD *)(v2 + 8); v5 = *(_DWORD *)(v2 + 12); if ( !v4 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v2; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } v12[4] = 0.0; v1 = v12; } v1[3] = -3.4028235e38; return; } v11 = *(float *)(v5 + 4); v7 = v11; if ( v4 == 1 ) goto LABEL_20; if ( v3 == 1 || v3 == 5 ) { v8 = 1; v9 = 1; while ( v9 < v4 ) { if ( v7 != *(float *)(v9 * *(unsigned __int8 *)(v2 + 20) + v5 + 4) ) v8 = 0; ++v9; if ( !v8 ) return; } if ( v8 ) { v1 = v12; LABEL_20: v10 = *((_DWORD *)v1 + 4); if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v7 = v11; v12[4] = 0.0; v1 = v12; } v1[3] = v7; return; } } } //----- (008263E0) -------------------------------------------------------- void __thiscall sub_8263E0(float *this, float a2) { float *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 4); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[4] = 0.0; } v2[3] = a2; } //----- (00826420) -------------------------------------------------------- void __thiscall sub_826420(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[4]; if ( v3 ) sub_826B80(v3, a2, a3); } //----- (00826450) -------------------------------------------------------- float *sub_826450() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_8320E0(v0); *(_DWORD *)v1 = &NiFloatInterpolator::`vftable'; v1[3] = -3.4028235e38; v1[4] = 0.0; v1[5] = 0.0; return v1; } // A21F74: using guessed type void *NiFloatInterpolator::`vftable'; //----- (00826490) -------------------------------------------------------- char __thiscall sub_826490(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || *(float *)(a2 + 12) != v2[3] ) return 0; v4 = *((_DWORD *)v2 + 4); if ( v4 ) { if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( v4 ) goto LABEL_13; } if ( *(_DWORD *)(a2 + 16) ) return 0; if ( v4 ) { LABEL_13: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 16)) ) return 1; return 0; } return 1; } //----- (008264F0) -------------------------------------------------------- int __thiscall sub_8264F0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { int v4; // eax int result; // eax v4 = this[4]; if ( v4 ) { *a2 = *(_DWORD *)(v4 + 8); *a3 = *(_DWORD *)(v4 + 16); *a4 = *(_BYTE *)(v4 + 20); result = *(_DWORD *)(v4 + 12); } else { *a2 = 0; *a3 = 0; *a4 = 0; result = 0; } return result; } //----- (00826540) -------------------------------------------------------- int __thiscall sub_826540(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[4]; v6 = result; if ( v5 ) { sub_826D70(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 16); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 16) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 20) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (00826600) -------------------------------------------------------- char __thiscall sub_826600(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 int v7; // eax int v8; // ecx char v9; // dl int v10; // edi int v11; // eax v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(float *)a4 = *(float *)(this + 12); if ( -3.4028235e38 == *(float *)(this + 12) ) return 0; } else { v7 = *(_DWORD *)(this + 16); if ( v7 ) { v8 = *(_DWORD *)(v7 + 8); v9 = *(_BYTE *)(v7 + 20); v10 = *(_DWORD *)(v7 + 16); v11 = *(_DWORD *)(v7 + 12); if ( v8 ) { *(float *)(v4 + 12) = sub_803DC0(a2, v11, v10, v8, v4 + 20, v9); v5 = a2; } } if ( -3.4028235e38 == *(float *)(v4 + 12) ) return 0; *(float *)a4 = *(float *)(v4 + 12); *(float *)(v4 + 8) = v5; } return 1; } //----- (008266B0) -------------------------------------------------------- LONG __thiscall sub_8266B0(void *this, int a2, _DWORD **a3) { void *v3; // esi int v4; // ebx LONG result; // eax v3 = this; sub_87F920(this, a2, a3); *(float *)(a2 + 12) = *((float *)v3 + 3); v4 = *(_DWORD *)(a2 + 16); if ( v4 == *((_DWORD *)v3 + 4) ) { result = *((_DWORD *)v3 + 5); *(_DWORD *)(a2 + 20) = result; } else { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = *((_DWORD *)v3 + 4); *(_DWORD *)(a2 + 16) = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); *(_DWORD *)(a2 + 20) = *((_DWORD *)v3 + 5); } return result; } //----- (00826730) -------------------------------------------------------- int __thiscall sub_826730(int *this, signed int a2) { _DWORD *v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v8; // edi int v9; // ebx v2 = (_DWORD *)a2; v3 = this; sub_832110(this, a2); v4 = v2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); result = sub_876300(v2); v8 = v3[4]; v9 = result; if ( v8 != result ) { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } v3[4] = v9; if ( v9 ) result = InterlockedIncrement((volatile LONG *)(v9 + 4)); } return result; } //----- (008267B0) -------------------------------------------------------- int __thiscall sub_8267B0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_8790E0(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[4]); } //----- (00826800) -------------------------------------------------------- int __thiscall sub_826800(void *this, _DWORD **a2) { void *v2; // ebx float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x18u); v4 = (int)v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiFloatInterpolator::`vftable'; *(float *)(v4 + 12) = -3.4028235e38; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; sub_8266B0(v2, v4, a2); result = v4; } else { sub_8266B0(v2, 0, a2); result = 0; } return result; } // A21F74: using guessed type void *NiFloatInterpolator::`vftable'; //----- (00826870) -------------------------------------------------------- unsigned int __thiscall sub_826870(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA43B0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fFloatValue", *((float *)v3 + 3)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_spFloatData", *((_DWORD *)v3 + 4)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (00826930) -------------------------------------------------------- float *__stdcall sub_826930(int a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *result; // eax v5 = (float *)operator new(0x34u); if ( v5 ) result = sub_82D580(v5, a2, a4, a5); else result = 0; return result; } //----- (00826970) -------------------------------------------------------- float *sub_826970() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_832840(v0); *(_DWORD *)v1 = &NiFloatExtraDataController::`vftable'; return v1; } // A2203C: using guessed type void *NiFloatExtraDataController::`vftable'; //----- (008269A0) -------------------------------------------------------- char __thiscall sub_8269A0(float *this, int a2) { return sub_832730(this, a2); } //----- (008269B0) -------------------------------------------------------- char *sub_8269B0() { return dword_BA43B8; } //----- (008269C0) -------------------------------------------------------- float *__thiscall sub_8269C0(_DWORD *this, int a2) { _DWORD *v2; // esi float *v3; // eax float *result; // eax v2 = this; v3 = (float *)operator new(0x18u); if ( v3 ) result = sub_826240(v3, *(float *)(v2[17] + 12)); else result = 0; return result; } //----- (00826A00) -------------------------------------------------------- float *__thiscall sub_826A00(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_832840(v3); *(_DWORD *)v4 = &NiFloatExtraDataController::`vftable'; sub_832650(v2, (int)v4, a2); result = v4; } else { sub_832650(v2, 0, a2); result = 0; } return result; } // A2203C: using guessed type void *NiFloatExtraDataController::`vftable'; //----- (00826A50) -------------------------------------------------------- void __thiscall sub_826A50(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi float *v4; // ecx int v5; // eax char v6; // al v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA43B0 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (float *)(v6 != 0 ? a2 : 0); } else { v4 = 0; } sub_8263E0(v4, *(float *)(v3[17] + 12)); } //----- (00826AB0) -------------------------------------------------------- char __thiscall sub_826AB0(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx int v6; // esi v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( result ) { v6 = *(_DWORD *)(v2 + 68); if ( v6 ) *(float *)(v6 + 12) = a2; } } return result; } //----- (00826B30) -------------------------------------------------------- unsigned int __thiscall sub_826B30(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_832A20(this, a2); v3 = sub_8784D0(*(int *)dword_BA43B8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00826B80) -------------------------------------------------------- void __thiscall sub_826B80(int *this, float a2, float a3) { int *v3; // esi int v4; // [esp+Ch] [ebp-4h] v4 = (int)this; v3 = this; v4 = this[3]; sub_817370(0, this[4], (int)&v4, (int)(this + 2), a2, a3); v3[3] = v4; } //----- (00826BC0) -------------------------------------------------------- LONG __thiscall sub_826BC0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[3]; *this = &NiFloatData::`vftable'; if ( v2 ) ((void (__cdecl *)(int))dword_BA3D30[this[4]])(v2); return sub_85BA80(v1); } // A211DC: using guessed type void *NiFloatData::`vftable'; // BA3D30: using guessed type int dword_BA3D30[]; //----- (00826BF0) -------------------------------------------------------- void __thiscall sub_826BF0(int this, int a2, int a3, int a4) { char v4; // dl if ( a2 && a3 && a4 ) { v4 = byte_BA3BE8[a4]; *(_DWORD *)(this + 12) = a2; *(_DWORD *)(this + 8) = a3; *(_DWORD *)(this + 16) = a4; *(_BYTE *)(this + 20) = v4; } else { *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_DWORD *)(this + 16) = 0; *(_BYTE *)(this + 20) = 0; } } //----- (00826C40) -------------------------------------------------------- _DWORD *sub_826C40() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; *v1 = &NiFloatData::`vftable'; return v1; } // A211DC: using guessed type void *NiFloatData::`vftable'; //----- (00826C80) -------------------------------------------------------- char __thiscall sub_826C80(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi unsigned __int8 (__cdecl *v8)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v7 = 0; v8 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v6]; if ( !v5 ) return 1; while ( v8(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12)) ) { if ( (unsigned int)++v7 >= v3[2] ) return 1; } return 0; } // BA3F70: using guessed type int dword_BA3F70[]; //----- (00826D00) -------------------------------------------------------- int __thiscall sub_826D00(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D30[this[4]])(result); if ( a2 && a3 && (result = a4) != 0 ) { v6 = byte_BA3BE8[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; *((_BYTE *)v4 + 20) = 0; v4[4] = 0; } return result; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (00826D70) -------------------------------------------------------- _DWORD **__thiscall sub_826D70(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax int v9; // edx int v11; // [esp+1Ch] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v11); v6 = (_DWORD **)a2; *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v7 ) (**v7)(v7, 1); v8 = v4[2]; if ( v8 ) { v9 = v4[4]; v11 = 0; a2 = 0; sub_817070(0, v9, v4[3], v8, a3, a4, (int)&v11, (int)&a2); sub_826D00(*v6, v11, a2, v4[4]); } return v6; } //----- (00826E20) -------------------------------------------------------- int __thiscall sub_826E20(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int v4; // eax int v5; // ST14_4 int (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST14_4 void (__cdecl *v10)(int, int *, signed int, int *, signed int); // eax int v11; // edi signed int v12; // ST10_4 int v13; // ebx int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v15 = 4; result = v6(v5, &a2, 4, &v15, 1); if ( a2 ) { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v8 + 4); v15 = 4; v10(v9, &v14, 4, &v15, 1); v11 = v14; v12 = a2; *((_BYTE *)v3 + 20) = byte_BA3BE8[v14]; v13 = ((int (__cdecl *)(signed int, signed int))dword_BA4240[v11])(v2, v12); ((void (__cdecl *)(int, signed int, _DWORD))dword_BA3C10[v11])(v13, a2, *((unsigned __int8 *)v3 + 20)); result = sub_826D00(v3, v13, a2, v11); } return result; } // BA3C10: using guessed type int dword_BA3C10[]; // BA4240: using guessed type int dword_BA4240[]; //----- (00826EC0) -------------------------------------------------------- int __thiscall sub_826EC0(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int result; // eax int v7; // eax int v8; // ST0C_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3EE0[v3[4]])(v2, v3[3], v3[2]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3EE0: using guessed type int dword_BA3EE0[]; //----- (00826F40) -------------------------------------------------------- unsigned int __thiscall sub_826F40(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA43C0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00826FC0) -------------------------------------------------------- int __thiscall sub_826FC0(_DWORD *this, float *a2) { int result; // eax result = this[22]; *a2 = (double)(unsigned int)this[22]; return result; } //----- (00826FE0) -------------------------------------------------------- char __thiscall sub_826FE0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_831CF0(this, a2); if ( result ) result = *((_DWORD *)v2 + 23) == *(_DWORD *)(a2 + 92); return result; } //----- (00827010) -------------------------------------------------------- float *__stdcall sub_827010(int a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *result; // eax v5 = (float *)operator new(0x34u); if ( v5 ) { result = sub_82D580(v5, a2, a4, a5); *((_BYTE *)result + 12) |= 2u; } else { result = 0; MEMORY[0xC] |= 2u; } return result; } //----- (00827050) -------------------------------------------------------- int __thiscall sub_827050(_DWORD *this) { _DWORD *v1; // esi int result; // eax char *v3; // eax int v4; // ST0C_4 v1 = this; result = this[24]; if ( !result ) { v3 = (char *)operator new(0xFu); v4 = v1[23]; v1[24] = v3; sub_7FF6E0(v3, 0xFu, "%d", v4); result = v1[24]; } return result; } //----- (00827080) -------------------------------------------------------- char __thiscall sub_827080(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // ebx unsigned int v5; // esi int v6; // ecx v2 = this; result = sub_831DF0(this, a2); if ( result ) { v4 = v2[19]; v5 = 0; if ( v4 ) { do { v6 = *(_DWORD *)(v2[17] + 4 * v5); if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(a2); ++v5; } while ( v5 < v4 ); } result = 1; } return result; } //----- (008270D0) -------------------------------------------------------- void __thiscall sub_8270D0(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A220D8: using guessed type void *NiTArray>::`vftable'; //----- (00827130) -------------------------------------------------------- void *__thiscall sub_827130(void *this, char a2) { void *v2; // esi v2 = this; sub_8270D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00827160) -------------------------------------------------------- void *sub_827160() { return &unk_BA43C8; } //----- (00827170) -------------------------------------------------------- void __thiscall sub_827170(int this, float a2) { int v2; // esi int v3; // ecx int v4; // ecx unsigned int v5; // ecx unsigned int v6; // eax _DWORD *v7; // edi unsigned int v8; // eax int v9; // ecx bool v10; // zf _DWORD **v11; // ecx unsigned int v12; // ebx int v13; // eax int v14; // ST04_4 _DWORD *v15; // eax float v16; // [esp+18h] [ebp-4h] v2 = this; if ( (*(_BYTE *)(this + 8) >> 5) & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else if ( sub_80FFE0((float *)this, a2) ) { v3 = *(_DWORD *)(v2 + 60); if ( !v3 || !(*(unsigned __int8 (**)(void))(*(_DWORD *)v3 + 132))() ) return; } v4 = *(_DWORD *)(v2 + 60); if ( v4 && (*(unsigned __int8 (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v4 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &v16) ) { v5 = *(_DWORD *)(v2 + 76); v6 = (signed __int64)(v16 + 0.009999999776482582); *(_DWORD *)(v2 + 88) = v6; if ( v6 >= v5 ) *(_DWORD *)(v2 + 88) = v5 - 1; v7 = *(_DWORD **)(v2 + 48); if ( v7 ) { v8 = *(_DWORD *)(v2 + 92); if ( v8 >= v7[12] || (v9 = v7[10], v10 = *(_DWORD *)(v9 + 4 * v8) == 0, v11 = (_DWORD **)(v9 + 4 * v8), v10) ) { v12 = v8 - 1024; v13 = v7[16]; if ( v13 && v12 < *(_DWORD *)(v13 + 12) ) { if ( sub_814DE0(v7, v12) ) { v14 = *(_DWORD *)(*(_DWORD *)(v2 + 68) + 4 * *(_DWORD *)(v2 + 88)); v15 = (_DWORD *)sub_814DE0(v7, v12); sub_42AAF0(v15, v14); } } } else { sub_42AAF0(*v11, *(_DWORD *)(*(_DWORD *)(v2 + 68) + 4 * *(_DWORD *)(v2 + 88))); } } } } //----- (00827290) -------------------------------------------------------- int __thiscall sub_827290(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int (__cdecl *v8)(int, unsigned int *, signed int, int *, signed int); // edx int result; // eax unsigned int v10; // ebx int v11; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_80FDC0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); v11 = 4; v6(v5, v3 + 23, 4, &v11, 1); v7 = v2[89]; a2 = v3[19]; v8 = *(int (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v7 + 8); v11 = 4; result = v8(v7, &a2, 4, &v11, 1); v10 = 0; if ( a2 ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(v3[17] + 4 * v10++)); while ( v10 < a2 ); } return result; } //----- (00827310) -------------------------------------------------------- float *__thiscall sub_827310(float *this) { float *v1; // esi _DWORD *v2; // eax v1 = this; sub_831D00(this); *(_DWORD *)v1 = &NiFlipController::`vftable'; *((_DWORD *)v1 + 16) = &NiTArray>::`vftable'; *((_DWORD *)v1 + 18) = 1; *((_DWORD *)v1 + 21) = 1; v1[19] = 0.0; v1[20] = 0.0; v2 = operator new(8u); if ( v2 ) { *v2 = 1; v2[1] = 0; *((_DWORD *)v1 + 17) = v2 + 1; } else { v1[17] = 0.0; } v1[22] = 0.0; v1[23] = 0.0; v1[24] = 0.0; return v1; } // A220D8: using guessed type void *NiTArray>::`vftable'; // A220E4: using guessed type void *NiFlipController::`vftable'; //----- (008273A0) -------------------------------------------------------- _DWORD *__thiscall sub_8273A0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi v2 = this; v3 = (void *)*((_DWORD *)this + 24); *(_DWORD *)this = &NiFlipController::`vftable'; operator delete(v3); v2[24] = 0; sub_8270D0(v2 + 16); v4 = v2[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A220E4: using guessed type void *NiFlipController::`vftable'; //----- (00827410) -------------------------------------------------------- unsigned int __thiscall sub_827410(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // ebx unsigned int result; // eax unsigned int v5; // esi int v6; // edi v3 = this; sub_831CE0(this, (int)a2, a3); a2[23] = v3[23]; result = v3[19]; v5 = 0; if ( result ) { if ( result <= 0 ) { v6 = 0; goto LABEL_5; } do { v6 = *(_DWORD *)(v3[17] + 4 * v5); LABEL_5: if ( a2[19] <= v5 ) sub_81A750(a2 + 16, v5 + 1); a3 = (_DWORD **)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); if ( v5 >= a2[18] ) sub_81A750(a2 + 16, v5 + a2[21]); sub_7FFF10(a2 + 16, v5, (LONG *)&a3); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } result = v3[19]; ++v5; } while ( v5 < result ); } return result; } //----- (008274C0) -------------------------------------------------------- float *sub_8274C0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x64u); if ( v0 ) result = sub_827310(v0); else result = 0; return result; } //----- (008274E0) -------------------------------------------------------- unsigned int __thiscall sub_8274E0(int *this, float a2) { float v2; // esi int *v3; // edi void (__cdecl *v4)(int, int *, signed int, float *, signed int); // edx int v5; // ST14_4 int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, float *, signed int, float *, signed int); // eax int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, float *, signed int, float *, signed int); // eax unsigned int v12; // edi _DWORD *v13; // eax _DWORD *v14; // esi int v15; // ecx _DWORD *v16; // eax int v17; // ecx unsigned int v18; // eax double v19; // st7 int v20; // ebx float *v21; // eax float *v22; // edi int v23; // esi float v25; // [esp+10h] [ebp-10h] int *v26; // [esp+14h] [ebp-Ch] float v27; // [esp+18h] [ebp-8h] _DWORD *v28; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = this; v26 = this; sub_831FA0(this, (_DWORD *)LODWORD(a2)); v4 = *(void (__cdecl **)(int, int *, signed int, float *, signed int))(*(_DWORD *)(LODWORD(v2) + 352) + 4); v5 = *(_DWORD *)(LODWORD(v2) + 352); LODWORD(a2) = 4; v4(v5, v3 + 23, 4, &a2, 1); if ( *(_DWORD *)(LODWORD(v2) + 28) >= 0xA010068u ) return sub_876350((void **)LODWORD(v2)); v6 = *(_DWORD *)(LODWORD(v2) + 352); v7 = v6; v8 = *(void (__cdecl **)(int, float *, signed int, float *, signed int))(v6 + 4); LODWORD(a2) = 4; v8(v7, &v27, 4, &a2, 1); v9 = *(_DWORD *)(LODWORD(v2) + 352); v10 = v9; v11 = *(void (__cdecl **)(int, float *, signed int, float *, signed int))(v9 + 4); LODWORD(a2) = 4; v11(v10, &v25, 4, &a2, 1); v12 = sub_876350((void **)LODWORD(v2)); v13 = operator new(0x18u); v14 = v13; if ( v13 ) { sub_85BA50(v13); *v14 = &NiFloatData::`vftable'; v14[2] = 0; v14[3] = 0; v14[4] = 0; *((_BYTE *)v14 + 20) = 0; v28 = v14; } else { v28 = 0; } if ( v12 ) { v15 = 8 * (v12 + 1) | -((unsigned __int64)(v12 + 1) >> 29 != 0); v16 = operator new((v15 + 4) | -__CFADD__(v15, 4)); if ( v16 ) { *v16 = v12 + 1; v17 = (int)(v16 + 1); } else { v17 = 0; } v18 = 0; a2 = v27; if ( v12 ) { do { v19 = a2; *(float *)(v17 + 8 * v18) = a2; *(float *)(v17 + 8 * v18 + 4) = (double)v18; ++v18; a2 = v19 + v25; } while ( v18 < v12 ); } *(float *)(v17 + 8 * v12) = a2; *(float *)(v17 + 8 * v12 + 4) = (double)(v12 - 1); sub_826D00(v28, v17, v12 + 1, 5); v20 = (int)v26; *((float *)v26 + 5) = v27; *(float *)(v20 + 24) = a2; } else { v20 = (int)v26; } v21 = (float *)operator new(0x18u); if ( v21 ) v22 = sub_8261F0(v21, (int)v28); else v22 = 0; v23 = *(_DWORD *)(v20 + 60); if ( (float *)v23 != v22 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); *(_DWORD *)(v20 + 60) = v22; if ( v22 ) InterlockedIncrement((volatile LONG *)v22 + 1); } return (*(int (**)(void))(**(_DWORD **)(v20 + 60) + 108))(); } // A211DC: using guessed type void *NiFloatData::`vftable'; //----- (008276D0) -------------------------------------------------------- void __thiscall sub_8276D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // ebx unsigned int v4; // edi int v5; // esi _DWORD *v6; // [esp+8h] [ebp-8h] int v7; // [esp+Ch] [ebp-4h] v2 = this; sub_831E50(this, a2); if ( v2[12] ) { v3 = sub_875B00(a2); v6 = v2 + 16; sub_81A750(v2 + 16, v3); v4 = 0; if ( v3 ) { do { v5 = sub_875AD0(a2); v7 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); sub_7FFF10(v6, v4, &v7); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } ++v4; } while ( v4 < v3 ); } } } //----- (00827760) -------------------------------------------------------- float *__thiscall sub_827760(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x64u); if ( v3 ) { v4 = sub_827310(v3); sub_827410(v2, v4, a2); result = v4; } else { sub_827410(v2, 0, a2); result = 0; } return result; } //----- (008277B0) -------------------------------------------------------- signed int __stdcall sub_8277B0(int a1) { return 3; } //----- (008277C0) -------------------------------------------------------- int __thiscall sub_8277C0(_DWORD *this, int a2) { int result; // eax result = this[7]; if ( result ) result = *(_DWORD *)(result + 16); return result; } //----- (008277D0) -------------------------------------------------------- int __thiscall sub_8277D0(_DWORD *this, int a2) { int result; // eax result = this[7]; if ( result ) result = *(_DWORD *)(result + 12); return result; } //----- (008277E0) -------------------------------------------------------- bool __thiscall sub_8277E0(int this, int a2) { return !*(_DWORD *)(this + 28) && (*(float *)&dword_ABCEC8 != *(float *)(this + 12) || *(float *)&dword_ABCECC != *(float *)(this + 16) || *(float *)&dword_ABCED0 != *(float *)(this + 20) || *(float *)&dword_ABCED4 != *(float *)(this + 24)); } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827840) -------------------------------------------------------- int __thiscall sub_827840(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // edi int v6; // esi int result; // eax v5 = this; v6 = this[7]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5[7] = 0; } result = a4; v5[3] = a2; v5[4] = a3; v5[5] = a4; v5[6] = a5; return result; } //----- (00827890) -------------------------------------------------------- void __thiscall sub_827890(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[7]; if ( v3 ) sub_8282D0(v3, a2, a3); } //----- (008278C0) -------------------------------------------------------- int __thiscall sub_8278C0(char *this, int a2) { char *v2; // esi v2 = this; sub_8790E0(a2); sub_8609B0(v2 + 12, a2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *((_DWORD *)v2 + 7)); } //----- (008278F0) -------------------------------------------------------- float *__thiscall sub_8278F0(float *this, int a2) { float *v2; // esi float *result; // eax v2 = this; sub_8320E0(this); *(_DWORD *)v2 = &NiColorInterpolator::`vftable'; *((_DWORD *)v2 + 3) = dword_ABCEC8; *((_DWORD *)v2 + 4) = dword_ABCECC; *((_DWORD *)v2 + 5) = dword_ABCED0; *((_DWORD *)v2 + 6) = dword_ABCED4; *((_DWORD *)v2 + 7) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = v2; v2[8] = 0.0; return result; } // A22184: using guessed type void *NiColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827950) -------------------------------------------------------- char *sub_827950() { return dword_BA43D0; } //----- (00827960) -------------------------------------------------------- float *__thiscall sub_827960(float *this, int a2, int a3, int a4, int a5) { float *v5; // esi v5 = this; sub_8320E0(this); *((_DWORD *)v5 + 3) = a2; *((_DWORD *)v5 + 4) = a3; *((_DWORD *)v5 + 5) = a4; *((_DWORD *)v5 + 6) = a5; *(_DWORD *)v5 = &NiColorInterpolator::`vftable'; v5[7] = 0.0; v5[8] = 0.0; return v5; } // A22184: using guessed type void *NiColorInterpolator::`vftable'; //----- (008279A0) -------------------------------------------------------- int __thiscall sub_8279A0(_DWORD *this) { _DWORD *v1; // ebx int result; // eax unsigned int v3; // ecx unsigned __int8 v4; // dl _DWORD *v5; // esi int v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // esi int v8; // eax int v9; // edx unsigned int v10; // edi int v11; // esi int v12; // edx int v13; // ecx int v14; // [esp+4h] [ebp-18h] int v15; // [esp+8h] [ebp-14h] int v16; // [esp+Ch] [ebp-10h] int v17; // [esp+10h] [ebp-Ch] unsigned int v18; // [esp+14h] [ebp-8h] unsigned __int8 v19; // [esp+1Ah] [ebp-2h] char v20; // [esp+1Bh] [ebp-1h] v1 = this; result = this[7]; if ( result ) { v3 = *(_DWORD *)(result + 8); v4 = *(_BYTE *)(result + 20); v5 = *(_DWORD **)(result + 12); v6 = *(_DWORD *)(result + 16); v18 = v3; v19 = v4; if ( v3 ) { v8 = v5[2]; v14 = v5[1]; v9 = v5[3]; v15 = v8; result = v5[4]; v16 = v9; v17 = result; if ( v3 == 1 ) goto LABEL_28; if ( v6 == 1 || v6 == 5 ) { v20 = 1; v10 = 1; while ( v10 < v3 ) { result = sub_883690((float *)((char *)v5 + v10 * v19 + 4), (float *)&v14); if ( (_BYTE)result ) v20 = 0; ++v10; if ( !v20 ) return result; v3 = v18; } if ( v20 ) { LABEL_28: v11 = v1[7]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[7] = 0; } v12 = v15; result = v16; v1[3] = v14; v13 = v17; v1[4] = v12; v1[5] = result; v1[6] = v13; } } } else { v7 = (void (__thiscall ***)(_DWORD, signed int))result; if ( result ) { if ( !InterlockedDecrement((volatile LONG *)(result + 4)) ) { if ( v7 ) (**v7)(v7, 1); } v1[7] = 0; } v1[3] = dword_ABCEC8; v1[4] = dword_ABCECC; result = dword_ABCED0; v1[5] = dword_ABCED0; v1[6] = dword_ABCED4; } } return result; } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827AE0) -------------------------------------------------------- int __thiscall sub_827AE0(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[7]; v6 = result; if ( v5 ) { sub_828480(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 28); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 28) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 32) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (00827BA0) -------------------------------------------------------- char __thiscall sub_827BA0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 int v7; // eax int v8; // ecx char v9; // dl int v10; // edi int v11; // eax _DWORD *v12; // eax int v13; // [esp+20h] [ebp-14h] char v14[4]; // [esp+30h] [ebp-4h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 20); *(_DWORD *)(a4 + 12) = *(_DWORD *)(this + 24); if ( *(float *)&dword_ABCEC8 == *(float *)(this + 12) && *(float *)&dword_ABCECC == *(float *)(this + 16) && *(float *)&dword_ABCED0 == *(float *)(this + 20) && *(float *)&dword_ABCED4 == *(float *)(this + 24) ) { return 0; } } else { v7 = *(_DWORD *)(this + 28); if ( v7 ) { v8 = *(_DWORD *)(v7 + 8); v9 = *(_BYTE *)(v7 + 20); v10 = *(_DWORD *)(v7 + 16); v11 = *(_DWORD *)(v7 + 12); v14[0] = v9; if ( v8 ) { v12 = (_DWORD *)sub_806720((int)&v13, a2, v11, v10, v8, v4 + 32, v14[0]); v5 = a2; *(_DWORD *)(v4 + 12) = *v12; *(_DWORD *)(v4 + 16) = v12[1]; *(_DWORD *)(v4 + 20) = v12[2]; *(_DWORD *)(v4 + 24) = v12[3]; } } if ( *(float *)&dword_ABCEC8 == *(float *)(v4 + 12) && *(float *)&dword_ABCECC == *(float *)(v4 + 16) && *(float *)&dword_ABCED0 == *(float *)(v4 + 20) && *(float *)&dword_ABCED4 == *(float *)(v4 + 24) ) { return 0; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 16); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 20); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 24); *(float *)(v4 + 8) = v5; } return 1; } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827D10) -------------------------------------------------------- float *sub_827D10() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_8320E0(v0); *(_DWORD *)v1 = &NiColorInterpolator::`vftable'; *((_DWORD *)v1 + 3) = dword_ABCEC8; *((_DWORD *)v1 + 4) = dword_ABCECC; *((_DWORD *)v1 + 5) = dword_ABCED0; *((_DWORD *)v1 + 6) = dword_ABCED4; v1[7] = 0.0; v1[8] = 0.0; return v1; } // A22184: using guessed type void *NiColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827D70) -------------------------------------------------------- char __thiscall sub_827D70(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || (unsigned __int8)sub_883690(v2 + 3, (float *)(a2 + 12)) ) return 0; v4 = *((_DWORD *)v2 + 7); if ( v4 ) { if ( !*(_DWORD *)(a2 + 28) ) return 0; if ( v4 ) goto LABEL_13; } if ( *(_DWORD *)(a2 + 28) ) return 0; if ( v4 ) { LABEL_13: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 28)) ) return 1; return 0; } return 1; } //----- (00827DD0) -------------------------------------------------------- _DWORD *__thiscall sub_827DD0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 7); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_832100(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00827E20) -------------------------------------------------------- float *__thiscall sub_827E20(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x24u); v4 = v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiColorInterpolator::`vftable'; *((_DWORD *)v4 + 3) = dword_ABCEC8; *((_DWORD *)v4 + 4) = dword_ABCECC; *((_DWORD *)v4 + 5) = dword_ABCED0; *((_DWORD *)v4 + 6) = dword_ABCED4; v4[7] = 0.0; v4[8] = 0.0; sub_81BF50(v2, v4, a2); result = v4; } else { sub_81BF50(v2, 0, a2); result = 0; } return result; } // A22184: using guessed type void *NiColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (00827EA0) -------------------------------------------------------- unsigned int __thiscall sub_827EA0(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA43D0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_860870((float *)v3 + 3, (int)"m_kColorValue"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_spColorData", *((_DWORD *)v3 + 7)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (00827F50) -------------------------------------------------------- float *__stdcall sub_827F50(int a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *result; // eax v5 = (float *)operator new(0x44u); if ( v5 ) result = sub_82D9C0(v5, a2, a4, a5); else result = 0; return result; } //----- (00827F90) -------------------------------------------------------- int __stdcall sub_827F90(int a1, int a2) { return (*(int (**)(void))(*(_DWORD *)a1 + 100))(); } //----- (00827FB0) -------------------------------------------------------- float *sub_827FB0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_832840(v0); *(_DWORD *)v1 = &NiColorExtraDataController::`vftable'; return v1; } // A2224C: using guessed type void *NiColorExtraDataController::`vftable'; //----- (00827FE0) -------------------------------------------------------- int __thiscall sub_827FE0(_DWORD *this, _DWORD *a2) { return sub_832620(this, a2); } //----- (00827FF0) -------------------------------------------------------- char *sub_827FF0() { return dword_BA43D8; } //----- (00828000) -------------------------------------------------------- float *__thiscall sub_828000(_DWORD *this, int a2) { _DWORD *v2; // esi float *v3; // eax float *result; // eax v2 = this; v3 = (float *)operator new(0x24u); if ( v3 ) result = sub_827960( v3, *(_DWORD *)(v2[17] + 12), *(_DWORD *)(v2[17] + 16), *(_DWORD *)(v2[17] + 20), *(_DWORD *)(v2[17] + 24)); else result = 0; return result; } //----- (00828050) -------------------------------------------------------- float *__thiscall sub_828050(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_832840(v3); *(_DWORD *)v4 = &NiColorExtraDataController::`vftable'; sub_832650(v2, (int)v4, a2); result = v4; } else { sub_832650(v2, 0, a2); result = 0; } return result; } // A2224C: using guessed type void *NiColorExtraDataController::`vftable'; //----- (008280A0) -------------------------------------------------------- int __thiscall sub_8280A0(int *this, void **a2) { int result; // eax result = sub_8A7990(this, a2); if ( (unsigned int)a2[7] < 0xA010068 ) result = sub_876290(a2); return result; } //----- (008280D0) -------------------------------------------------------- int __thiscall sub_8280D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi float *v5; // eax float *v6; // edi int v7; // esi v2 = this; result = sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); v5 = (float *)operator new(0x24u); if ( v5 ) v6 = sub_8278F0(v5, v4); else v6 = 0; v7 = v2[15]; if ( (float *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v2[15] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)v6 + 1); } result = (*(int (**)(void))(*(_DWORD *)v2[15] + 108))(); } return result; } //----- (00828160) -------------------------------------------------------- int __thiscall sub_828160(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // ecx int v5; // eax char v6; // al v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA43D0 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (_DWORD *)(v6 != 0 ? a2 : 0); } else { v4 = 0; } return sub_827840( v4, *(_DWORD *)(v3[17] + 12), *(_DWORD *)(v3[17] + 16), *(_DWORD *)(v3[17] + 20), *(_DWORD *)(v3[17] + 24)); } //----- (008281D0) -------------------------------------------------------- char __thiscall sub_8281D0(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx int v6; // eax _DWORD *v7; // ecx int v8; // [esp+10h] [ebp-10h] int v9; // [esp+14h] [ebp-Ch] int v10; // [esp+18h] [ebp-8h] int v11; // [esp+1Ch] [ebp-4h] v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { *(float *)&v8 = 0.0; v6 = *(_DWORD *)(v2 + 48); *(float *)&v9 = 0.0; *(float *)&v10 = 0.0; *(float *)&v11 = 0.0; result = (*(int (__stdcall **)(_DWORD, int, int *))(*(_DWORD *)v5 + 64))(*(float *)(v2 + 40), v6, &v8); if ( result ) { v7 = *(_DWORD **)(v2 + 68); if ( v7 ) result = sub_87B8F0(v7, v8, v9, v10, v11); } } return result; } //----- (00828280) -------------------------------------------------------- unsigned int __thiscall sub_828280(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_832A20(this, a2); v3 = sub_8784D0(*(int *)dword_BA43D8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008282D0) -------------------------------------------------------- void __thiscall sub_8282D0(int *this, float a2, float a3) { int *v3; // esi int v4; // [esp+Ch] [ebp-4h] v4 = (int)this; v3 = this; v4 = this[3]; sub_817370(3, this[4], (int)&v4, (int)(this + 2), a2, a3); v3[3] = v4; } //----- (00828310) -------------------------------------------------------- char *sub_828310() { return dword_BA43E0; } //----- (00828320) -------------------------------------------------------- _DWORD *sub_828320() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiColorData::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; return v1; } // A222EC: using guessed type void *NiColorData::`vftable'; //----- (00828360) -------------------------------------------------------- char __thiscall sub_828360(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi unsigned __int8 (__cdecl *v8)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v7 = 0; v8 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3FB8[v6]; if ( !v5 ) return 1; while ( v8(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12)) ) { if ( (unsigned int)++v7 >= v3[2] ) return 1; } return 0; } // BA3FB8: using guessed type int dword_BA3FB8[]; //----- (008283E0) -------------------------------------------------------- _DWORD *__thiscall sub_8283E0(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 3); *(_DWORD *)this = &NiColorData::`vftable'; if ( v3 ) ((void (__cdecl *)(int))dword_BA3D78[*((_DWORD *)this + 4)])(v3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A222EC: using guessed type void *NiColorData::`vftable'; // BA3D78: using guessed type int dword_BA3D78[]; //----- (00828420) -------------------------------------------------------- int __thiscall sub_828420(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D78[this[4]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3BFA[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 20) = 0; } return result; } // BA3D78: using guessed type int dword_BA3D78[]; //----- (00828480) -------------------------------------------------------- _DWORD **__thiscall sub_828480(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax int v10; // [esp+1Ch] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v10); v6 = (_DWORD **)a2; *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v7 ) (**v7)(v7, 1); v8 = v4[2]; if ( v8 ) { v10 = 0; a2 = 0; sub_817070(3, v4[4], v4[3], v8, a3, a4, (int)&v10, (int)&a2); sub_828420(*v6, v10, a2, v4[4]); } return v6; } //----- (00828530) -------------------------------------------------------- int __thiscall sub_828530(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST08_4 int (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST08_4 void (__cdecl *v10)(int, int *, signed int, int *, signed int); // eax int v11; // ebx int v12; // eax int v13; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v14 = 4; result = v6(v5, &a2, 4, &v14, 1); if ( a2 ) { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v8 + 4); v14 = 4; v10(v9, &v13, 4, &v14, 1); v11 = v13; v12 = ((int (__cdecl *)(signed int, signed int))dword_BA4288[v13])(v2, a2); result = sub_828420(v3, v12, a2, v11); } return result; } // BA4288: using guessed type int dword_BA4288[]; //----- (008285B0) -------------------------------------------------------- int __thiscall sub_8285B0(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int result; // eax int v7; // eax int v8; // ST0C_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3F28[v3[4]])(v2, v3[3], v3[2]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3F28: using guessed type int dword_BA3F28[]; //----- (00828630) -------------------------------------------------------- unsigned int __thiscall sub_828630(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA43E0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (008286B0) -------------------------------------------------------- signed int __stdcall sub_8286B0(__int16 a1) { if ( !a1 ) return 3; if ( a1 == 1 ) return 4; return a1 == 2; } //----- (008286F0) -------------------------------------------------------- signed int __stdcall sub_8286F0(__int16 a1) { signed int result; // eax if ( a1 && a1 != 1 && a1 != 2 ) result = 0; else result = 3; return result; } //----- (00828720) -------------------------------------------------------- signed int __thiscall sub_828720(_DWORD *this, __int16 a2) { switch ( a2 ) { case 0: return this[15]; case 1: return this[16]; case 2: return this[17]; } return 0xFFFF; } //----- (00828750) -------------------------------------------------------- int __thiscall sub_828750(_DWORD *this, int a2, unsigned __int16 a3) { int result; // eax if ( a3 ) { result = a3 - 1; if ( a3 == 1 ) { this[16] = a2; } else { result = a3 - 2; if ( a3 == 2 ) { result = a2; this[17] = a2; } } } else { result = a2; this[15] = a2; } return result; } //----- (00828780) -------------------------------------------------------- int __thiscall sub_828780(char *this, int a2, _DWORD **a3) { char *v3; // ebx int result; // eax v3 = this; sub_832D60(this, a2, a3); result = a2; qmemcpy((void *)(a2 + 28), v3 + 28, 0x2Cu); return result; } //----- (008287C0) -------------------------------------------------------- char *sub_8287C0() { return dword_BA43E8; } //----- (008287D0) -------------------------------------------------------- float *__thiscall sub_8287D0(float *this, int a2, int a3, int a4, int a5, int a6) { float *v6; // esi v6 = this; sub_832C90(this, a2, a6); *(_DWORD *)v6 = &NiBSplineTransformInterpolator::`vftable'; *((_DWORD *)v6 + 7) = dword_ABCEB0; *((_DWORD *)v6 + 8) = dword_ABCEB4; *((_DWORD *)v6 + 9) = dword_ABCEB8; *((_DWORD *)v6 + 10) = dword_BA44A0; *((_DWORD *)v6 + 11) = dword_BA44A4; *((_DWORD *)v6 + 12) = dword_BA44A8; *((_DWORD *)v6 + 13) = dword_BA44AC; v6[14] = -3.4028235e38; *((_DWORD *)v6 + 15) = a3; *((_DWORD *)v6 + 16) = a4; *((_DWORD *)v6 + 17) = a5; return v6; } // A2232C: using guessed type void *NiBSplineTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00828850) -------------------------------------------------------- bool __thiscall sub_828850(float *this, int a2) { float *v2; // esi double v3; // st7 v2 = this; if ( !(_WORD)a2 ) { if ( !(*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) { v3 = v2[7]; return -3.4028235e38 != v3; } return 0; } if ( (unsigned __int16)a2 == 1 ) { if ( !(*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) { v3 = v2[11]; return -3.4028235e38 != v3; } return 0; } if ( (unsigned __int16)a2 != 2 || (*(int (__thiscall **)(float *, int))(*(_DWORD *)this + 140))(this, a2) ) return 0; v3 = v2[14]; return -3.4028235e38 != v3; } //----- (008288D0) -------------------------------------------------------- float *__thiscall sub_8288D0(float *this, _DWORD **a2) { float *v2; // esi float *v3; // eax float *v4; // ebx float *v6; // [esp+Ch] [ebp-4h] v2 = this; v6 = this; v3 = (float *)operator new(0x48u); if ( v3 ) v4 = sub_8287D0(v3, 0, 0xFFFF, 0xFFFF, 0xFFFF, 0); else v4 = 0; sub_832D60(v2, (int)v4, a2); qmemcpy(v4 + 7, v2 + 7, 0x20u); v4[15] = v6[15]; v4[16] = v6[16]; v4[17] = v6[17]; return v4; } //----- (00828950) -------------------------------------------------------- float *sub_828950() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x48u); if ( v0 ) result = sub_8287D0(v0, 0, 0xFFFF, 0xFFFF, 0xFFFF, 0); else result = 0; return result; } //----- (00828980) -------------------------------------------------------- bool __thiscall sub_828980(float *this, int a2) { float *v2; // esi v2 = this; return sub_832BF0(this, a2) && (unsigned __int8)sub_8195B0(v2 + 7, (float *)(a2 + 28)) && *(_DWORD *)(a2 + 60) == *((_DWORD *)v2 + 15) && *(_DWORD *)(a2 + 64) == *((_DWORD *)v2 + 16) && *(_DWORD *)(a2 + 68) == *((_DWORD *)v2 + 17); } //----- (008289D0) -------------------------------------------------------- char __thiscall sub_8289D0(int this, float a2, int a3, int a4) { int v4; // ebx double v5; // st7 int v7; // eax double v8; // st7 double v9; // st7 int v10; // edx float v11; // eax float v12; // ecx double v13; // st7 int v14; // [esp+20h] [ebp-28h] int v15; // [esp+24h] [ebp-24h] float v16; // [esp+28h] [ebp-20h] float v17; // [esp+2Ch] [ebp-1Ch] float v18; // [esp+30h] [ebp-18h] int v19; // [esp+34h] [ebp-14h] float v20; // [esp+38h] [ebp-10h] float v21; // [esp+3Ch] [ebp-Ch] float v22; // [esp+40h] [ebp-8h] v4 = this; if ( a2 == *(float *)(this + 8) ) { qmemcpy((void *)a4, (const void *)(this + 28), 0x20u); v18 = -3.4028235e38; v5 = v18; if ( v18 == *(float *)(this + 56) && v5 == *(float *)(this + 44) && *(float *)(this + 28) == v5 ) return 0; } else { v7 = *(_DWORD *)(this + 60); v18 = (a2 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); if ( v7 != 0xFFFF ) { sub_82AD70(*(_DWORD **)(this + 20), v18, (int)&v19, 3, *(_DWORD *)(this + 24), v7); v15 = v19; v8 = v20; *(float *)(v4 + 28) = *(float *)&v19; v16 = v8; v9 = v21; *(float *)(v4 + 32) = v16; v17 = v9; *(float *)(v4 + 36) = v17; } if ( *(_DWORD *)(v4 + 64) != 0xFFFF ) { sub_82AD70(*(_DWORD **)(v4 + 20), v18, (int)&v19, 4, *(_DWORD *)(v4 + 24), *(_DWORD *)(v4 + 64)); sub_874B00((float *)&v14, *(float *)&v19, v20, v21, v22); sub_8781B0((float *)&v14); v10 = v15; v11 = v16; *(_DWORD *)(v4 + 40) = v14; v12 = v17; *(_DWORD *)(v4 + 44) = v10; *(float *)(v4 + 48) = v11; *(float *)(v4 + 52) = v12; } if ( *(_DWORD *)(v4 + 68) != 0xFFFF ) { sub_82AD70(*(_DWORD **)(v4 + 20), v18, (int)&v19, 1, *(_DWORD *)(v4 + 24), *(_DWORD *)(v4 + 68)); *(float *)(v4 + 56) = *(float *)&v19; } qmemcpy((void *)a4, (const void *)(v4 + 28), 0x20u); v18 = -3.4028235e38; v13 = v18; if ( v18 == *(float *)(v4 + 56) && v13 == *(float *)(v4 + 44) && *(float *)(v4 + 28) == v13 ) return 0; *(float *)(v4 + 8) = a2; } return 1; } //----- (00828BC0) -------------------------------------------------------- int __thiscall sub_828BC0(char *this, int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, char *, signed int, int *, signed int); // edx v2 = a2; v3 = this; sub_832EF0(this, a2); sub_831960(v3 + 28, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 60, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 64, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); a2 = 4; return v11(v10, v3 + 68, 4, &a2, 1); } //----- (00828C40) -------------------------------------------------------- int __thiscall sub_828C40(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_832E10(this, a2); sub_8319B0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 15, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 16, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; return v11(v10, v3 + 17, 4, &a2, 1); } //----- (00828CC0) -------------------------------------------------------- unsigned int __thiscall sub_828CC0(float *this, int a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (char *)a2; v3 = this; sub_832FF0(this, a2); v4 = sub_8784D0(*(int *)dword_BA43E8); v5 = *((_DWORD *)v2 + 3); a2 = (int)v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); sub_831AA0(v3 + 7, v2); v6 = sub_878670((int)"m_kTransCPHandle", *((_DWORD *)v3 + 15)); v7 = *((_DWORD *)v2 + 3); a2 = (int)v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_kRotCPHandle", *((_DWORD *)v3 + 16)); v9 = *((_DWORD *)v2 + 3); a2 = (int)v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = sub_878670((int)"m_kScaleCPHandle", *((_DWORD *)v3 + 17)); v11 = *((_DWORD *)v2 + 3); a2 = (int)v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v11, &a2); } //----- (00828DC0) -------------------------------------------------------- bool __thiscall sub_828DC0(void *this, __int16 a2) { BOOL v2; // eax if ( a2 ) LOBYTE(v2) = 0; else v2 = (unsigned int)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)this + 140))(0) <= 0; return v2; } //----- (00828DF0) -------------------------------------------------------- signed int __thiscall sub_828DF0(_DWORD *this, __int16 a2) { signed int result; // eax result = 0xFFFF; if ( !a2 ) result = this[10]; return result; } //----- (00828E10) -------------------------------------------------------- int __thiscall sub_828E10(_DWORD *this, int a2, __int16 a3) { int result; // eax if ( !a3 ) { result = a2; this[10] = a2; } return result; } //----- (00828E30) -------------------------------------------------------- int __thiscall sub_828E30(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi int result; // eax v3 = this; sub_832D60(this, (int)a2, a3); a2[7] = v3[7]; a2[8] = v3[8]; result = v3[9]; a2[9] = result; a2[10] = v3[10]; return result; } //----- (00828E70) -------------------------------------------------------- char *sub_828E70() { return dword_BA43F0; } //----- (00828E80) -------------------------------------------------------- float *__thiscall sub_828E80(float *this, int a2, int a3, int a4) { float *v4; // esi v4 = this; sub_832C90(this, a2, a4); *(_DWORD *)v4 = &NiBSplinePoint3Interpolator::`vftable'; *((_DWORD *)v4 + 10) = a3; return v4; } // A22414: using guessed type void *NiBSplinePoint3Interpolator::`vftable'; //----- (00828EB0) -------------------------------------------------------- void *__thiscall sub_828EB0(void *this, char a2) { void *v2; // esi v2 = this; sub_832D00(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00828EE0) -------------------------------------------------------- char __thiscall sub_828EE0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al float v7; // ST1C_4 float v8; // ST24_4 float v9; // ST28_4 int v10; // [esp+2Ch] [ebp-10h] float v11; // [esp+30h] [ebp-Ch] float v12; // [esp+34h] [ebp-8h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 36); result = 1; } else { if ( *(_DWORD *)(this + 40) != 0xFFFF ) { v7 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AD70(*(_DWORD **)(this + 20), v7, (int)&v10, 3, *(_DWORD *)(this + 24), *(_DWORD *)(this + 40)); v8 = v11; *(_DWORD *)(v4 + 28) = v10; v9 = v12; *(float *)(v4 + 32) = v8; v5 = a2; *(float *)(v4 + 36) = v9; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 36); *(float *)(v4 + 8) = v5; result = 1; } return result; } //----- (00828FC0) -------------------------------------------------------- float *__thiscall sub_828FC0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x2Cu); v4 = v3; if ( v3 ) { sub_832C90(v3, 0, 0); *(_DWORD *)v4 = &NiBSplinePoint3Interpolator::`vftable'; *((_DWORD *)v4 + 10) = 0xFFFF; } else { v4 = 0; } sub_832D60(v2, (int)v4, a2); v4[7] = *((float *)v2 + 7); v4[8] = *((float *)v2 + 8); v4[9] = *((float *)v2 + 9); v4[10] = *((float *)v2 + 10); return v4; } // A22414: using guessed type void *NiBSplinePoint3Interpolator::`vftable'; //----- (00829060) -------------------------------------------------------- int __thiscall sub_829060(char *this, int a2) { signed int v2; // edi char *v3; // esi int v4; // edi int (__cdecl *v5)(int, char *, signed int, int *, signed int); // ecx v2 = a2; v3 = this; sub_832EF0(this, a2); sub_860940(v3 + 28, v2); v4 = *(_DWORD *)(v2 + 356); v5 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); a2 = 4; return v5(v4, v3 + 40, 4, &a2, 1); } //----- (008290B0) -------------------------------------------------------- bool __thiscall sub_8290B0(float *this, int a2) { float *v2; // esi bool result; // al v2 = this; if ( sub_832BF0(this, a2) && *(float *)(a2 + 28) == v2[7] && *(float *)(a2 + 32) == v2[8] && *(float *)(a2 + 36) == v2[9] ) { result = *(_DWORD *)(a2 + 40) == *((_DWORD *)v2 + 10); } else { result = 0; } return result; } //----- (00829110) -------------------------------------------------------- int __thiscall sub_829110(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // edi int (__cdecl *v5)(int, int *, signed int, signed int *, signed int); // ecx v2 = a2; v3 = this; sub_832E10(this, a2); sub_8608D0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; return v5(v4, v3 + 10, 4, &a2, 1); } //----- (00829160) -------------------------------------------------------- unsigned int __thiscall sub_829160(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_832FF0(this, a2); v4 = sub_8784D0(*(int *)dword_BA43F0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_kPoint3CPHandle", *((_DWORD *)v3 + 10)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (008291E0) -------------------------------------------------------- float *__thiscall sub_8291E0(float *this, int a2, int a3, int a4) { float *v4; // esi v4 = this; sub_832C90(this, a2, a4); *(_DWORD *)v4 = &NiBSplineFloatInterpolator::`vftable'; *((_DWORD *)v4 + 8) = a3; return v4; } // A224DC: using guessed type void *NiBSplineFloatInterpolator::`vftable'; //----- (00829210) -------------------------------------------------------- BOOL __stdcall sub_829210(__int16 a1) { return a1 == 0; } //----- (00829230) -------------------------------------------------------- signed int __thiscall sub_829230(_DWORD *this, __int16 a2) { signed int result; // eax result = 0xFFFF; if ( !a2 ) result = this[8]; return result; } //----- (00829250) -------------------------------------------------------- int __thiscall sub_829250(_DWORD *this, int a2, __int16 a3) { int result; // eax if ( !a3 ) { result = a2; this[8] = a2; } return result; } //----- (00829270) -------------------------------------------------------- int __thiscall sub_829270(float *this, int a2, _DWORD **a3) { float *v3; // esi int result; // eax v3 = this; result = sub_832D60(this, a2, a3); *(float *)(a2 + 28) = v3[7]; *(float *)(a2 + 32) = v3[8]; return result; } //----- (008292A0) -------------------------------------------------------- float *sub_8292A0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_832C90(v0, 0, 0); *(_DWORD *)v1 = &NiBSplineFloatInterpolator::`vftable'; *((_DWORD *)v1 + 8) = 0xFFFF; return v1; } // A224DC: using guessed type void *NiBSplineFloatInterpolator::`vftable'; //----- (008292E0) -------------------------------------------------------- bool __thiscall sub_8292E0(float *this, int a2) { float *v2; // esi bool result; // al v2 = this; if ( sub_832BF0(this, a2) && *(float *)(a2 + 28) == v2[7] ) result = *(_DWORD *)(a2 + 32) == *((_DWORD *)v2 + 8); else result = 0; return result; } //----- (00829320) -------------------------------------------------------- char *sub_829320() { return dword_BA43F8; } //----- (00829330) -------------------------------------------------------- char __thiscall sub_829330(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al float v7; // ST18_4 v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(float *)a4 = *(float *)(this + 28); result = 1; } else { if ( *(_DWORD *)(this + 32) != 0xFFFF ) { v7 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AD70(*(_DWORD **)(this + 20), v7, this + 28, 1, *(_DWORD *)(this + 24), *(_DWORD *)(this + 32)); v5 = a2; } *(float *)a4 = *(float *)(v4 + 28); result = 1; *(float *)(v4 + 8) = v5; } return result; } //----- (008293B0) -------------------------------------------------------- int __thiscall sub_8293B0(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x24u); v4 = (int)v3; if ( v3 ) { sub_832C90(v3, 0, 0); *(_DWORD *)v4 = &NiBSplineFloatInterpolator::`vftable'; *(_DWORD *)(v4 + 32) = 0xFFFF; } else { v4 = 0; } sub_832D60(v2, v4, a2); *(float *)(v4 + 28) = *((float *)v2 + 7); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); return v4; } // A224DC: using guessed type void *NiBSplineFloatInterpolator::`vftable'; //----- (00829410) -------------------------------------------------------- int __thiscall sub_829410(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, _DWORD *, signed int, int *, signed int); // edx v2 = a2; v3 = this; sub_832EF0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 7, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); a2 = 4; return v8(v7, v3 + 8, 4, &a2, 1); } //----- (00829470) -------------------------------------------------------- int __thiscall sub_829470(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_832E10(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 7, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; return v8(v7, v3 + 8, 4, &a2, 1); } //----- (008294D0) -------------------------------------------------------- unsigned int __thiscall sub_8294D0(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_832FF0(this, a2); v4 = sub_8784D0(*(int *)dword_BA43F8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fFloatValue", v3[7]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_kFloatCPHandle", *((_DWORD *)v3 + 8)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (00829590) -------------------------------------------------------- char __thiscall sub_829590(float *this, int a2) { float *v2; // edi unsigned int v4; // ecx float *v5; // edx int v6; // edi v2 = this; if ( sub_828980(this, a2) ) { v4 = 0; v5 = (float *)(a2 + 72); v6 = (int)v2 - a2; while ( *v5 == *(float *)((char *)v5 + v6) ) { ++v4; ++v5; if ( v4 >= 6 ) return 1; } } return 0; } //----- (008295E0) -------------------------------------------------------- char *sub_8295E0() { return dword_BA4400; } //----- (008295F0) -------------------------------------------------------- int __thiscall sub_8295F0(char *this, _DWORD **a2) { char *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x60u); v4 = (int)v3; if ( v3 ) { sub_8287D0(v3, 0, 0xFFFF, 0xFFFF, 0xFFFF, 0); *(_DWORD *)v4 = &NiBSplineCompTransformInterpolator::`vftable'; *(float *)(v4 + 72) = 3.4028235e38; *(float *)(v4 + 76) = 3.4028235e38; *(float *)(v4 + 80) = 3.4028235e38; *(float *)(v4 + 84) = 3.4028235e38; *(float *)(v4 + 88) = 3.4028235e38; *(float *)(v4 + 92) = 3.4028235e38; } else { v4 = 0; } sub_828780(v2, v4, a2); *(float *)(v4 + 72) = *((float *)v2 + 18); result = v4; *(float *)(v4 + 76) = *((float *)v2 + 19); *(float *)(v4 + 80) = *((float *)v2 + 20); *(float *)(v4 + 84) = *((float *)v2 + 21); *(float *)(v4 + 88) = *((float *)v2 + 22); *(float *)(v4 + 92) = *((float *)v2 + 23); return result; } // A225A4: using guessed type void *NiBSplineCompTransformInterpolator::`vftable'; //----- (008296A0) -------------------------------------------------------- float *sub_8296A0() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x60u); v1 = v0; if ( !v0 ) return 0; sub_8287D0(v0, 0, 0xFFFF, 0xFFFF, 0xFFFF, 0); *(_DWORD *)v1 = &NiBSplineCompTransformInterpolator::`vftable'; v1[18] = 3.4028235e38; result = v1; v1[19] = 3.4028235e38; v1[20] = 3.4028235e38; v1[21] = 3.4028235e38; v1[22] = 3.4028235e38; v1[23] = 3.4028235e38; return result; } // A225A4: using guessed type void *NiBSplineCompTransformInterpolator::`vftable'; //----- (00829710) -------------------------------------------------------- char __thiscall sub_829710(int this, float a2, int a3, int a4) { int v4; // ebx double v5; // st7 int v7; // eax double v8; // st7 double v9; // st7 int v10; // eax int v11; // edx float v12; // eax float v13; // ecx int v14; // eax double v15; // st7 int v16; // [esp+28h] [ebp-28h] int v17; // [esp+2Ch] [ebp-24h] float v18; // [esp+30h] [ebp-20h] float v19; // [esp+34h] [ebp-1Ch] float v20; // [esp+38h] [ebp-18h] int v21; // [esp+3Ch] [ebp-14h] float v22; // [esp+40h] [ebp-10h] float v23; // [esp+44h] [ebp-Ch] float v24; // [esp+48h] [ebp-8h] v4 = this; if ( a2 == *(float *)(this + 8) ) { qmemcpy((void *)a4, (const void *)(this + 28), 0x20u); v20 = -3.4028235e38; v5 = v20; if ( v20 == *(float *)(this + 56) && v5 == *(float *)(this + 44) && *(float *)(this + 28) == v5 ) return 0; } else { v7 = *(_DWORD *)(this + 60); v20 = (a2 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); if ( v7 != 0xFFFF ) { sub_82AEC0( *(_DWORD **)(this + 20), v20, (int)&v21, 3, *(_DWORD *)(this + 24), v7, *(float *)(this + 72), *(float *)(this + 76)); v17 = v21; v8 = v22; *(float *)(v4 + 28) = *(float *)&v21; v18 = v8; v9 = v23; *(float *)(v4 + 32) = v18; v19 = v9; *(float *)(v4 + 36) = v19; } v10 = *(_DWORD *)(v4 + 64); if ( v10 != 0xFFFF ) { sub_82AEC0( *(_DWORD **)(v4 + 20), v20, (int)&v21, 4, *(_DWORD *)(v4 + 24), v10, *(float *)(v4 + 80), *(float *)(v4 + 84)); sub_874B00((float *)&v16, *(float *)&v21, v22, v23, v24); sub_8781B0((float *)&v16); v11 = v17; v12 = v18; *(_DWORD *)(v4 + 40) = v16; v13 = v19; *(_DWORD *)(v4 + 44) = v11; *(float *)(v4 + 48) = v12; *(float *)(v4 + 52) = v13; } v14 = *(_DWORD *)(v4 + 68); if ( v14 != 0xFFFF ) { sub_82AEC0( *(_DWORD **)(v4 + 20), v20, (int)&v21, 1, *(_DWORD *)(v4 + 24), v14, *(float *)(v4 + 88), *(float *)(v4 + 92)); *(float *)(v4 + 56) = *(float *)&v21; } qmemcpy((void *)a4, (const void *)(v4 + 28), 0x20u); v20 = -3.4028235e38; v15 = v20; if ( v20 == *(float *)(v4 + 56) && v15 == *(float *)(v4 + 44) && *(float *)(v4 + 28) == v15 ) return 0; *(float *)(v4 + 8) = a2; } return 1; } //----- (00829930) -------------------------------------------------------- int __thiscall sub_829930(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_828C40(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 18, 24, &a2, 1); } //----- (00829970) -------------------------------------------------------- int __thiscall sub_829970(char *this, int a2) { int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_828BC0(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 72, 24, &a2, 1); } //----- (008299B0) -------------------------------------------------------- unsigned int __thiscall sub_8299B0(float *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_828CC0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4400); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00829A00) -------------------------------------------------------- int __stdcall sub_829A00(int a1) { return sub_81B8A0(a1); } //----- (00829A10) -------------------------------------------------------- bool __thiscall sub_829A10(_DWORD *this, int a2) { return sub_82A340(this, a2) != 0; } //----- (00829A30) -------------------------------------------------------- char __thiscall sub_829A30(float *this, int a2) { float *v2; // edi unsigned int v4; // ecx float *v5; // edx int v6; // edi v2 = this; if ( sub_8290B0(this, a2) ) { v4 = 0; v5 = (float *)(a2 + 44); v6 = (int)v2 - a2; while ( *v5 == *(float *)((char *)v5 + v6) ) { ++v4; ++v5; if ( v4 >= 2 ) return 1; } } return 0; } //----- (00829A80) -------------------------------------------------------- char *sub_829A80() { return dword_BA4408; } //----- (00829A90) -------------------------------------------------------- char __thiscall sub_829A90(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al int v7; // eax float v8; // ST24_4 float v9; // ST2C_4 float v10; // ST30_4 int v11; // [esp+34h] [ebp-14h] float v12; // [esp+38h] [ebp-10h] float v13; // [esp+3Ch] [ebp-Ch] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 36); result = 1; } else { v7 = *(_DWORD *)(this + 40); if ( v7 != 0xFFFF ) { v8 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AEC0( *(_DWORD **)(this + 20), v8, (int)&v11, 3, *(_DWORD *)(this + 24), v7, *(float *)(this + 44), *(float *)(this + 48)); v9 = v12; *(_DWORD *)(v4 + 28) = v11; v10 = v13; *(float *)(v4 + 32) = v9; v5 = a2; *(float *)(v4 + 36) = v10; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 36); *(float *)(v4 + 8) = v5; result = 1; } return result; } //----- (00829B80) -------------------------------------------------------- float *__thiscall sub_829B80(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x34u); v4 = v3; if ( v3 ) { sub_828E80(v3, 0, 0xFFFF, 0); *(_DWORD *)v4 = &NiBSplineCompPoint3Interpolator::`vftable'; v4[11] = 3.4028235e38; v4[12] = 3.4028235e38; } else { v4 = 0; } sub_828E30(v2, v4, a2); v4[11] = v2[11]; result = v4; v4[12] = v2[12]; return result; } // A22654: using guessed type void *NiBSplineCompPoint3Interpolator::`vftable'; //----- (00829BF0) -------------------------------------------------------- float *sub_829BF0() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_828E80(v0, 0, 0xFFFF, 0); *(_DWORD *)v1 = &NiBSplineCompPoint3Interpolator::`vftable'; v1[11] = 3.4028235e38; result = v1; v1[12] = 3.4028235e38; return result; } // A22654: using guessed type void *NiBSplineCompPoint3Interpolator::`vftable'; //----- (00829C40) -------------------------------------------------------- int __thiscall sub_829C40(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_829110(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 11, 8, &a2, 1); } //----- (00829C80) -------------------------------------------------------- int __thiscall sub_829C80(char *this, int a2) { int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_829060(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 44, 8, &a2, 1); } //----- (00829CC0) -------------------------------------------------------- unsigned int __thiscall sub_829CC0(float *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_829160(this, a2); v3 = sub_8784D0(*(int *)dword_BA4408); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00829D10) -------------------------------------------------------- char __thiscall sub_829D10(float *this, int a2) { float *v2; // edi unsigned int v4; // ecx float *v5; // edx int v6; // edi v2 = this; if ( sub_8292E0(this, a2) ) { v4 = 0; v5 = (float *)(a2 + 36); v6 = (int)v2 - a2; while ( *v5 == *(float *)((char *)v5 + v6) ) { ++v4; ++v5; if ( v4 >= 2 ) return 1; } } return 0; } //----- (00829D60) -------------------------------------------------------- char *sub_829D60() { return dword_BA4410; } //----- (00829D70) -------------------------------------------------------- char __thiscall sub_829D70(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al int v7; // eax float v8; // ST20_4 v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(float *)a4 = *(float *)(this + 28); result = 1; } else { v7 = *(_DWORD *)(this + 32); if ( v7 != 0xFFFF ) { v8 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AEC0( *(_DWORD **)(this + 20), v8, this + 28, 1, *(_DWORD *)(this + 24), v7, *(float *)(this + 36), *(float *)(this + 40)); v5 = a2; } *(float *)a4 = *(float *)(v4 + 28); result = 1; *(float *)(v4 + 8) = v5; } return result; } //----- (00829E00) -------------------------------------------------------- int __thiscall sub_829E00(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x2Cu); v4 = (int)v3; if ( v3 ) { sub_8291E0(v3, 0, 0xFFFF, 0); *(_DWORD *)v4 = &NiBSplineCompFloatInterpolator::`vftable'; *(float *)(v4 + 36) = 3.4028235e38; *(float *)(v4 + 40) = 3.4028235e38; } else { v4 = 0; } sub_829270(v2, v4, a2); *(float *)(v4 + 36) = v2[9]; result = v4; *(float *)(v4 + 40) = v2[10]; return result; } // A22704: using guessed type void *NiBSplineCompFloatInterpolator::`vftable'; //----- (00829E70) -------------------------------------------------------- float *sub_829E70() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x2Cu); v1 = v0; if ( !v0 ) return 0; sub_8291E0(v0, 0, 0xFFFF, 0); *(_DWORD *)v1 = &NiBSplineCompFloatInterpolator::`vftable'; v1[9] = 3.4028235e38; result = v1; v1[10] = 3.4028235e38; return result; } // A22704: using guessed type void *NiBSplineCompFloatInterpolator::`vftable'; //----- (00829EC0) -------------------------------------------------------- int __thiscall sub_829EC0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_829470(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 9, 8, &a2, 1); } //----- (00829F00) -------------------------------------------------------- int __thiscall sub_829F00(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_829410(this, a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 9, 8, &a2, 1); } //----- (00829F40) -------------------------------------------------------- unsigned int __thiscall sub_829F40(float *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8294D0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4410); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00829F90) -------------------------------------------------------- char __thiscall sub_829F90(float *this, int a2) { float *v2; // edi unsigned int v4; // ecx float *v5; // edx int v6; // edi v2 = this; if ( sub_82A5B0(this, a2) ) { v4 = 0; v5 = (float *)(a2 + 52); v6 = (int)v2 - a2; while ( *v5 == *(float *)((char *)v5 + v6) ) { ++v4; ++v5; if ( v4 >= 2 ) return 1; } } return 0; } //----- (00829FE0) -------------------------------------------------------- char *sub_829FE0() { return dword_BA4418; } //----- (00829FF0) -------------------------------------------------------- char __thiscall sub_829FF0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al int v7; // eax float v8; // ST24_4 float v9; // ST2C_4 float v10; // ST30_4 float v11; // ST34_4 int v12; // [esp+38h] [ebp-14h] float v13; // [esp+3Ch] [ebp-10h] float v14; // [esp+40h] [ebp-Ch] float v15; // [esp+44h] [ebp-8h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 36); *(_DWORD *)(a4 + 12) = *(_DWORD *)(this + 40); result = 1; } else { v7 = *(_DWORD *)(this + 44); if ( v7 != 0xFFFF ) { v8 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AEC0( *(_DWORD **)(this + 20), v8, (int)&v12, 4, *(_DWORD *)(this + 24), v7, *(float *)(this + 52), *(float *)(this + 56)); v9 = v13; *(_DWORD *)(v4 + 28) = v12; v10 = v14; *(float *)(v4 + 32) = v9; v11 = v15; *(float *)(v4 + 36) = v10; v5 = a2; *(float *)(v4 + 40) = v11; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 36); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 40); *(float *)(v4 + 8) = v5; result = 1; } return result; } //----- (0082A0F0) -------------------------------------------------------- float *__thiscall sub_82A0F0(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x3Cu); v4 = v3; if ( v3 ) { sub_82A370(v3, 0, 0xFFFF, 0); *(_DWORD *)v4 = &NiBSplineCompColorInterpolator::`vftable'; v4[13] = 3.4028235e38; v4[14] = 3.4028235e38; } else { v4 = 0; } sub_82A300(v2, v4, a2); v4[13] = v2[13]; result = v4; v4[14] = v2[14]; return result; } // A227B4: using guessed type void *NiBSplineCompColorInterpolator::`vftable'; //----- (0082A160) -------------------------------------------------------- float *sub_82A160() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_82A370(v0, 0, 0xFFFF, 0); *(_DWORD *)v1 = &NiBSplineCompColorInterpolator::`vftable'; v1[13] = 3.4028235e38; result = v1; v1[14] = 3.4028235e38; return result; } // A227B4: using guessed type void *NiBSplineCompColorInterpolator::`vftable'; //----- (0082A1B0) -------------------------------------------------------- int __thiscall sub_82A1B0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_82A5F0(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 13, 8, &a2, 1); } //----- (0082A1F0) -------------------------------------------------------- int __thiscall sub_82A1F0(char *this, int a2) { int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_82A560(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 52, 8, &a2, 1); } //----- (0082A230) -------------------------------------------------------- unsigned int __thiscall sub_82A230(float *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_82A640(this, a2); v3 = sub_8784D0(*(int *)dword_BA4418); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0082A280) -------------------------------------------------------- signed int __stdcall sub_82A280(__int16 a1) { return a1 != 0 ? 0 : 4; } //----- (0082A2A0) -------------------------------------------------------- signed int __stdcall sub_82A2A0(__int16 a1) { return a1 != 0 ? 0 : 3; } //----- (0082A2C0) -------------------------------------------------------- signed int __thiscall sub_82A2C0(_DWORD *this, __int16 a2) { signed int result; // eax result = 0xFFFF; if ( !a2 ) result = this[11]; return result; } //----- (0082A2E0) -------------------------------------------------------- int __thiscall sub_82A2E0(_DWORD *this, int a2, __int16 a3) { int result; // eax if ( !a3 ) { result = a2; this[11] = a2; } return result; } //----- (0082A300) -------------------------------------------------------- int __thiscall sub_82A300(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi int result; // eax v3 = this; sub_832D60(this, (int)a2, a3); a2[7] = v3[7]; a2[8] = v3[8]; result = v3[9]; a2[9] = result; a2[10] = v3[10]; a2[11] = v3[11]; return result; } //----- (0082A340) -------------------------------------------------------- bool __thiscall sub_82A340(_DWORD *this, int a2) { return sub_832BB0(this, a2) != 0; } //----- (0082A360) -------------------------------------------------------- char *sub_82A360() { return dword_BA4420; } //----- (0082A370) -------------------------------------------------------- float *__thiscall sub_82A370(float *this, int a2, int a3, int a4) { float *v4; // esi float *result; // eax v4 = this; sub_832C90(this, a2, a4); *(_DWORD *)v4 = &NiBSplineColorInterpolator::`vftable'; v4[7] = 0.0; v4[8] = 0.0; result = v4; v4[9] = 0.0; v4[10] = 0.0; *((_DWORD *)v4 + 11) = a3; return result; } // A22864: using guessed type void *NiBSplineColorInterpolator::`vftable'; //----- (0082A3B0) -------------------------------------------------------- char __thiscall sub_82A3B0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char result; // al float v7; // ST1C_4 float v8; // ST24_4 float v9; // ST28_4 float v10; // ST2C_4 int v11; // [esp+30h] [ebp-14h] float v12; // [esp+34h] [ebp-10h] float v13; // [esp+38h] [ebp-Ch] float v14; // [esp+3Ch] [ebp-8h] v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { *(_DWORD *)a4 = *(_DWORD *)(this + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(this + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(this + 36); *(_DWORD *)(a4 + 12) = *(_DWORD *)(this + 40); result = 1; } else { if ( *(_DWORD *)(this + 44) != 0xFFFF ) { v7 = (v5 - *(float *)(this + 12)) / (*(float *)(this + 16) - *(float *)(this + 12)); sub_82AD70(*(_DWORD **)(this + 20), v7, (int)&v11, 4, *(_DWORD *)(this + 24), *(_DWORD *)(this + 44)); v8 = v12; *(_DWORD *)(v4 + 28) = v11; v9 = v13; *(float *)(v4 + 32) = v8; v10 = v14; *(float *)(v4 + 36) = v9; v5 = a2; *(float *)(v4 + 40) = v10; } *(_DWORD *)a4 = *(_DWORD *)(v4 + 28); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 32); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 36); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 40); *(float *)(v4 + 8) = v5; result = 1; } return result; } //----- (0082A4A0) -------------------------------------------------------- int __thiscall sub_82A4A0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_832C90(v3, 0, 0); *(_DWORD *)v4 = &NiBSplineColorInterpolator::`vftable'; *(float *)(v4 + 28) = 0.0; *(float *)(v4 + 32) = 0.0; *(float *)(v4 + 36) = 0.0; *(float *)(v4 + 40) = 0.0; *(_DWORD *)(v4 + 44) = 0xFFFF; } else { v4 = 0; } sub_832D60(v2, v4, a2); *(_DWORD *)(v4 + 28) = v2[7]; *(_DWORD *)(v4 + 32) = v2[8]; *(_DWORD *)(v4 + 36) = v2[9]; *(_DWORD *)(v4 + 40) = v2[10]; *(_DWORD *)(v4 + 44) = v2[11]; return v4; } // A22864: using guessed type void *NiBSplineColorInterpolator::`vftable'; //----- (0082A520) -------------------------------------------------------- float *sub_82A520() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_832C90(v0, 0, 0); *(_DWORD *)v1 = &NiBSplineColorInterpolator::`vftable'; v1[7] = 0.0; v1[8] = 0.0; result = v1; v1[9] = 0.0; v1[10] = 0.0; *((_DWORD *)v1 + 11) = 0xFFFF; return result; } // A22864: using guessed type void *NiBSplineColorInterpolator::`vftable'; //----- (0082A560) -------------------------------------------------------- int __thiscall sub_82A560(char *this, int a2) { signed int v2; // edi char *v3; // esi int v4; // edi int (__cdecl *v5)(int, char *, signed int, int *, signed int); // ecx v2 = a2; v3 = this; sub_832EF0(this, a2); sub_8609B0(v3 + 28, v2); v4 = *(_DWORD *)(v2 + 356); v5 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); a2 = 4; return v5(v4, v3 + 44, 4, &a2, 1); } //----- (0082A5B0) -------------------------------------------------------- bool __thiscall sub_82A5B0(float *this, int a2) { float *v2; // esi bool result; // al v2 = this; if ( !sub_832BF0(this, a2) || (unsigned __int8)sub_883690(v2 + 7, (float *)(a2 + 28)) ) result = 0; else result = *(_DWORD *)(a2 + 44) == *((_DWORD *)v2 + 11); return result; } //----- (0082A5F0) -------------------------------------------------------- int __thiscall sub_82A5F0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // edi int (__cdecl *v5)(int, int *, signed int, signed int *, signed int); // ecx v2 = a2; v3 = this; sub_832E10(this, a2); sub_8752B0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; return v5(v4, v3 + 11, 4, &a2, 1); } //----- (0082A640) -------------------------------------------------------- unsigned int __thiscall sub_82A640(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_832FF0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4420); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_kColorACPHandle", *((_DWORD *)v3 + 11)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0082A700) -------------------------------------------------------- bool __thiscall sub_82A700(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_85BB20(this, a2) && *(_DWORD *)(a2 + 16) == v2[4] && *(_DWORD *)(a2 + 20) == v2[5]; } //----- (0082A740) -------------------------------------------------------- int __thiscall sub_82A740(float *this, float a2, _DWORD *a3, int *a4) { float *v4; // esi int result; // eax int v6; // ecx double v7; // st6 int v8; // edi signed int v9; // ecx double v10; // st5 double v11; // st6 double v12; // st5 int v13; // ecx int v14; // edx float v15; // ST10_4 float v16; // ST0C_4 double v17; // st6 double v18; // st7 double v19; // st5 double v20; // st6 double v21; // rt2 double v22; // st5 double v23; // st7 double v24; // st5 double v25; // st7 double v26; // rt1 double v27; // st5 double v28; // st7 double v29; // rt2 double v30; // st5 double v31; // rtt double v32; // rt0 double v33; // st5 double v34; // rt1 double v35; // st7 float v36; // ST10_4 float v37; // ST0C_4 float v38; // ST24_4 double v39; // st6 float v40; // ST0C_4 double v41; // st5 float v42; // ST10_4 float v43; // ST0C_4 double v44; // st3 double v45; // st6 double v46; // st7 double v47; // st5 double v48; // st4 double v49; // st6 double v50; // st6 float v51; // ST0C_4 double v52; // st4 double v53; // st5 double v54; // st7 double v55; // st6 double v56; // st4 float v57; // ST0C_4 double v58; // st3 double v59; // st7 double v60; // st6 double v61; // st5 double v62; // st4 double v63; // st6 double v64; // st4 double v65; // st6 double v66; // st5 double v67; // st5 float v68; // ST0C_4 double v69; // st4 double v70; // st7 double v71; // st6 float v72; // [esp+Ch] [ebp-1Ch] float v73; // [esp+10h] [ebp-18h] float v74; // [esp+14h] [ebp-14h] float v75; // [esp+18h] [ebp-10h] float v76; // [esp+1Ch] [ebp-Ch] float v77; // [esp+20h] [ebp-8h] int v78; // [esp+24h] [ebp-4h] float v79; // [esp+24h] [ebp-4h] float v80; // [esp+30h] [ebp+8h] float v81; // [esp+30h] [ebp+8h] float v82; // [esp+30h] [ebp+8h] float v83; // [esp+30h] [ebp+8h] float v84; // [esp+30h] [ebp+8h] float v85; // [esp+30h] [ebp+8h] float v86; // [esp+30h] [ebp+8h] float v87; // [esp+30h] [ebp+8h] float v88; // [esp+30h] [ebp+8h] float v89; // [esp+30h] [ebp+8h] float v90; // [esp+30h] [ebp+8h] float v91; // [esp+30h] [ebp+8h] float v92; // [esp+30h] [ebp+8h] float v93; // [esp+30h] [ebp+8h] float v94; // [esp+30h] [ebp+8h] float v95; // [esp+30h] [ebp+8h] float v96; // [esp+30h] [ebp+8h] float v97; // [esp+30h] [ebp+8h] float v98; // [esp+30h] [ebp+8h] float v99; // [esp+34h] [ebp+Ch] float v100; // [esp+34h] [ebp+Ch] float v101; // [esp+34h] [ebp+Ch] float v102; // [esp+34h] [ebp+Ch] float v103; // [esp+34h] [ebp+Ch] float v104; // [esp+34h] [ebp+Ch] float v105; // [esp+34h] [ebp+Ch] float v106; // [esp+34h] [ebp+Ch] float v107; // [esp+34h] [ebp+Ch] float v108; // [esp+34h] [ebp+Ch] float v109; // [esp+34h] [ebp+Ch] float v110; // [esp+34h] [ebp+Ch] float v111; // [esp+34h] [ebp+Ch] float v112; // [esp+34h] [ebp+Ch] float v113; // [esp+34h] [ebp+Ch] float v114; // [esp+34h] [ebp+Ch] float v115; // [esp+38h] [ebp+10h] float v116; // [esp+38h] [ebp+10h] float v117; // [esp+38h] [ebp+10h] float v118; // [esp+38h] [ebp+10h] float v119; // [esp+38h] [ebp+10h] float v120; // [esp+38h] [ebp+10h] float v121; // [esp+38h] [ebp+10h] float v122; // [esp+38h] [ebp+10h] float v123; // [esp+38h] [ebp+10h] float v124; // [esp+38h] [ebp+10h] v4 = this; if ( LODWORD(a2) == *((_DWORD *)this + 5) ) { *a3 = *((_DWORD *)this + 6); result = (int)a4; *a4 = *((_DWORD *)this + 7); } else { v6 = *(_DWORD *)this; v7 = a2; v4[5] = a2; v8 = v6 - 3; v78 = v6 - 3; if ( a2 >= 1.0 ) result = v6 - 1; else result = (signed int)((double)v78 * v7) + 3; *a3 = result - 3; v80 = (double)v78; *((_DWORD *)v4 + 6) = result - 3; *a4 = result; v9 = *(_DWORD *)v4; v10 = v7 * v80; v11 = v80; v81 = v10; *((_DWORD *)v4 + 7) = result; if ( v9 < 7 ) { switch ( v9 ) { case 6: v46 = v81; if ( result == 3 ) { v83 = 1.0 - v46; v117 = 2.0 - v46; v103 = v46 * 0.5; v47 = v83; v84 = v83 * v83; v48 = v103; v49 = v117; v104 = 0.5 * (v103 * v117 + v47 * v46); v118 = v48 * (v46 * 0.3333333432674408); v4[1] = v47 * v84; v4[2] = v84 * v46 + v49 * v104; v85 = 3.0 - v46; v4[3] = v104 * v46 + v85 * v118; v4[4] = v46 * v118; } else { if ( result == 4 ) { v105 = v46 - 1.0; v119 = 3.0 - v46; v86 = v46 * 0.5; v87 = 1.0 - v86; v50 = v105; v106 = 0.5 * v105; v51 = v87 * v87; v52 = v106; v53 = v119; v107 = (v87 * v46 + v106 * v119) * 0.3333333432674408; v120 = v52 * v52; v88 = 2.0 - v46; v4[1] = v88 * v51; v4[2] = v51 * v46 + v107 * v53; v4[3] = v46 * v107 + v53 * v120; v54 = v120 * v50; } else { v121 = v46 - 1.0; v108 = v46 - 2.0; v89 = 3.0 - v46; v55 = v89; v90 = v89 * 0.5; v56 = v108; v57 = v108 * v108; v58 = v90; v91 = v55 * 0.3333333432674408 * v90; v109 = 0.5 * (v58 * v121 + v55 * v108); v4[1] = v91 * v55; v4[2] = v46 * v91 + v109 * v55; v4[3] = v121 * v109 + v55 * v57; v54 = v57 * v56; } v4[4] = v54; } break; case 5: v59 = v81; v60 = v81; if ( result == 3 ) { v92 = 1.0 - v60; v122 = 2.0 - v59; v110 = v59 * 0.5; v61 = v92; v93 = v92 * v92; v62 = v110; v63 = v122; v111 = 0.5 * (v110 * v122 + v61 * v59); v123 = v62 * v62; v4[1] = v61 * v93; v4[2] = v93 * v59 + v111 * v63; v64 = v63 * v123; v65 = v123; v66 = v111 * v59 + v64; } else { v94 = v60 - 1.0; v124 = 2.0 - v59; v112 = v59 * 0.5; v67 = v94; v68 = v94 * v94; v95 = 1.0 - v112; v69 = v95; v96 = v95 * v95; v65 = v67; v113 = (v112 + v67) * v69; v4[1] = v96 * v124; v4[2] = v96 * v59 + v113 * v124; v66 = v59 * v113 + v124 * v68; v59 = v68; } v4[3] = v66; v4[4] = v59 * v65; break; case 4: v70 = v81; v97 = 1.0 - v81; v114 = v70 * v70; v71 = v97; v98 = v97 * v97; v4[1] = v98 * v71; v4[2] = v98 * (v70 * 3.0); v4[3] = v71 * (3.0 * v114); v4[4] = v70 * v114; break; } } else { v12 = 0.0; v13 = v8 + 1; v14 = v8 + 2; if ( result <= 5 ) v73 = 0.0; else v73 = (double)(result - 5); if ( result > 4 ) v12 = (double)(result - 4); v79 = v12; if ( result >= v13 ) v76 = v11; else v76 = (double)(result - 1); if ( result < v8 ) v11 = (double)result; v72 = v11; if ( result == 3 ) { v17 = 1.0; v18 = 0.5; v77 = 1.0; } else { v77 = 0.5; v17 = 1.0; v18 = 0.5; } if ( result == v14 ) v75 = v17; else v75 = v18; if ( result == 3 ) { v19 = v17; v20 = 0.33333334; v99 = v19; v21 = v19; v22 = v18; v23 = v21; v74 = v22; } else { if ( result == 4 ) { v24 = v18; v25 = 0.33333334; v99 = v24; } else { v99 = 0.33333334; v24 = v18; v25 = 0.33333334; } v26 = v24; v27 = v25; v28 = v26; if ( result == v14 ) { v32 = v27; v33 = v17; v20 = v32; v34 = v33; v22 = v28; v23 = v34; v74 = v22; } else { v74 = v27; v29 = v27; v30 = v17; v20 = v29; v31 = v30; v22 = v28; v23 = v31; } } if ( result != v14 ) { v23 = v22; if ( result != v13 ) v23 = v20; } v115 = v23; v35 = v81; v82 = v81 - v79; v15 = (double)(result - 3); v36 = v35 - v15; v16 = (double)(result - 2); v37 = v16 - v35; v38 = v76 - v35; v39 = v37; v40 = v37 * v77; v41 = v36; v42 = v36 * v75; v100 = v39 * v99 * v40; v43 = (v40 * v82 + v42 * v38) * v74; v116 = v42 * (v41 * v115); v44 = v39 * v100; v45 = v100; v4[1] = v44; v101 = v35 - v73; v4[2] = v38 * v43 + v45 * v101; v102 = v72 - v35; v4[3] = v43 * v82 + v102 * v116; v4[4] = v41 * v116; } } return result; } //----- (0082AD20) -------------------------------------------------------- char *sub_82AD20() { return dword_BA4428; } //----- (0082AD30) -------------------------------------------------------- void **__thiscall sub_82AD30(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiBSplineData::`vftable'; operator delete(v3); operator delete(v2[3]); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2292C: using guessed type void *NiBSplineData::`vftable'; //----- (0082AD70) -------------------------------------------------------- float *__thiscall sub_82AD70(_DWORD *this, float a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi float *v7; // eax float *v8; // ebx int v9; // edi double v10; // st7 float *result; // eax unsigned int v12; // edx unsigned int v13; // esi int v14; // ecx double v15; // st6 double v16; // st6 unsigned int v17; // edx double v18; // st7 unsigned int v19; // esi int v20; // ecx double v21; // st6 double v22; // st6 float *v23; // [esp+18h] [ebp-8h] int v24; // [esp+1Ch] [ebp-4h] int v25; // [esp+28h] [ebp+8h] int v26; // [esp+30h] [ebp+10h] v6 = this; v7 = (float *)sub_6FE7C0((char *)a5); v8 = v7; v23 = v7; sub_82A740(v7, a2, &a5, &v24); v9 = a4; v10 = v8[1]; result = (float *)(v6[2] + 4 * (a6 + a4 * a5)); v12 = 0; if ( a4 >= 4 ) { v13 = ((unsigned int)(a4 - 4) >> 2) + 1; v14 = a3 + 8; v12 = 4 * v13; do { v15 = *result; result += 4; v14 += 16; --v13; *(float *)(v14 - 24) = v15 * v10; *(float *)(v14 - 20) = *(result - 3) * v10; *(float *)(v14 - 16) = *(result - 2) * v10; *(float *)(v14 - 12) = *(result - 1) * v10; } while ( v13 ); } for ( ; v12 < a4; *(float *)(a3 + 4 * v12 - 4) = v16 ) { ++v12; v16 = *result * v10; ++result; } v25 = a5 + 1; if ( a5 + 1 <= v24 ) { a5 = (int)(v23 + 2); v26 = v24 - v25 + 1; do { v17 = 0; v18 = *(float *)a5; if ( v9 >= 4 ) { v19 = ((unsigned int)(v9 - 4) >> 2) + 1; v20 = a3 + 8; v17 = 4 * v19; do { v21 = *result; result += 4; v20 += 16; --v19; *(float *)(v20 - 24) = v21 * v18 + *(float *)(v20 - 24); *(float *)(v20 - 20) = *(result - 3) * v18 + *(float *)(v20 - 20); *(float *)(v20 - 16) = *(result - 2) * v18 + *(float *)(v20 - 16); *(float *)(v20 - 12) = *(result - 1) * v18 + *(float *)(v20 - 12); } while ( v19 ); } for ( ; v17 < v9; *(float *)(a3 + 4 * v17 - 4) = v22 + *(float *)(a3 + 4 * v17 - 4) ) { ++v17; v22 = *result * v18; ++result; } a5 += 4; --v26; } while ( v26 ); } return result; } //----- (0082AEC0) -------------------------------------------------------- float *__thiscall sub_82AEC0(_DWORD *this, float a2, int a3, int a4, int a5, int a6, float a7, float a8) { _DWORD *v8; // ST2C_4 float *v9; // eax float *v10; // edi double v11; // st7 int v12; // ecx unsigned int v13; // eax unsigned int v14; // edx int v15; // eax double v16; // st6 char *v17; // edi double v18; // st6 float *result; // eax char **v20; // edi unsigned int v21; // edx double v22; // st7 unsigned int v23; // edi double v24; // st6 double v25; // st6 bool v26; // zf int v27; // [esp+1Ch] [ebp-5Ch] float *v28; // [esp+20h] [ebp-58h] int v29; // [esp+20h] [ebp-58h] int v30; // [esp+28h] [ebp-50h] char **v31; // [esp+2Ch] [ebp-4Ch] char *v32; // [esp+30h] [ebp-48h] int v33; // [esp+34h] [ebp-44h] char v34[60]; // [esp+38h] [ebp-40h] v8 = this; v32 = (char *)a6; v9 = (float *)sub_6FE7C0((char *)a5); v10 = v9; v28 = v9; sub_82A740(v9, a2, &v31, &v30); sub_87BB70(v8[3] + 2 * (_DWORD)&v32[(_DWORD)v31 * a4], 4 * a4, a7, a8, (int)&v33, 4 * a4); v32 = *((char **)v10 + 1); v11 = *(float *)&v32; v12 = 0; v13 = 0; if ( a4 >= 4 ) { v32 = &v34[-a3]; v14 = ((unsigned int)(a4 - 4) >> 2) + 1; v15 = a3 + 8; v27 = 4 * v14; do { v16 = *((float *)&v33 + v12) * v11; v12 += 4; v15 += 16; --v14; *(float *)(v15 - 24) = v16; *(float *)(v15 - 20) = *((float *)&v30 + v12) * v11; v17 = v32; *(float *)(v15 - 16) = *(float *)((char *)&v33 + v15 - a3 - 16) * v11; *(float *)(v15 - 12) = *(float *)&v17[v15 - 16] * v11; } while ( v14 ); v13 = v27; v10 = v28; } for ( ; v13 < a4; *(float *)(a3 + 4 * v13 - 4) = v18 ) { ++v13; v18 = *((float *)&v33 + v12++) * v11; } result = (float *)((char *)v31 + 1); v29 = (int)v31 + 1; if ( (signed int)v31 + 1 <= v30 ) { v20 = (char **)(v10 + 2); v31 = v20; result = (float *)(v30 - v29 + 1); v30 = v30 - v29 + 1; do { v21 = 0; v32 = *v20; v22 = *(float *)&v32; if ( a4 >= 4 ) { v23 = ((unsigned int)(a4 - 4) >> 2) + 1; result = (float *)(a3 + 8); v21 = 4 * v23; do { v24 = *((float *)&v33 + v12); v12 += 4; result += 4; --v23; *(result - 6) = v24 * v22 + *(result - 6); *(result - 5) = *((float *)&v30 + v12) * v22 + *(result - 5); *(result - 4) = *(float *)&(&v31)[v12] * v22 + *(result - 4); *(result - 3) = *(float *)&(&v32)[v12] * v22 + *(result - 3); } while ( v23 ); } for ( ; v21 < a4; *(float *)(a3 + 4 * v21 - 4) = v25 + *(float *)(a3 + 4 * v21 - 4) ) { ++v21; v25 = *((float *)&v33 + v12++) * v22; } v20 = v31 + 1; v26 = v30-- == 1; ++v31; } while ( !v26 ); } return result; } // 82AEC0: using guessed type char var_40[60]; //----- (0082B080) -------------------------------------------------------- int __thiscall sub_82B080(int *this, signed int a2) { signed int v2; // edi int *v3; // esi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx _DWORD *v5; // ebx int v6; // ST04_4 void *v7; // eax int v8; // ST08_4 void *v9; // ST04_4 void (__cdecl *v10)(int, void *, int, signed int *, signed int); // eax int v11; // ST00_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // edx int v13; // ST04_4 int result; // eax void *v15; // eax int v16; // ST08_4 int v17; // edi void *v18; // ST04_4 int (__cdecl *v19)(int, void *, int, signed int *, signed int); // eax v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = v3 + 4; v6 = *(_DWORD *)(v2 + 352); a2 = 4; v4(v6, v3 + 4, 4, &a2, 1); if ( v3[4] ) { v7 = operator new(4 * *v5); v8 = 4 * *v5; v3[2] = (int)v7; v9 = v7; v10 = *(void (__cdecl **)(int, void *, int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); a2 = 4; v10(v11, v9, v8, &a2, 1); } v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v13 = *(_DWORD *)(v2 + 352); a2 = 4; v12(v13, v3 + 5, 4, &a2, 1); result = v3[5]; if ( v3[5] ) { v15 = operator new(2 * result); v16 = 2 * v3[5]; v3[3] = (int)v15; v17 = *(_DWORD *)(v2 + 352); v18 = v15; v19 = *(int (__cdecl **)(int, void *, int, signed int *, signed int))(v17 + 4); a2 = 2; result = v19(v17, v18, v16, &a2, 1); } return result; } //----- (0082B160) -------------------------------------------------------- int __thiscall sub_82B160(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi void (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST00_4 int v6; // ebx void (__cdecl *v7)(int, int, int, signed int *, signed int); // edx int v8; // ST04_4 int v9; // ST00_4 int (__cdecl *v10)(int, _DWORD *, signed int, signed int *, signed int); // edx int v11; // ST00_4 int result; // eax int v13; // ebx int v14; // edi int (__cdecl *v15)(int, int, int, signed int *, signed int); // eax int v16; // ST04_4 v2 = a2; v3 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; v4(v5, v3 + 4, 4, &a2, 1); v6 = v3[4]; if ( v6 ) { v7 = *(void (__cdecl **)(int, int, int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v8 = v3[2]; v9 = *(_DWORD *)(v2 + 356); a2 = 4; v7(v9, v8, 4 * v6, &a2, 1); } v10 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v11 = *(_DWORD *)(v2 + 356); a2 = 4; result = v10(v11, v3 + 5, 4, &a2, 1); v13 = v3[5]; if ( v13 ) { v14 = *(_DWORD *)(v2 + 356); v15 = *(int (__cdecl **)(int, int, int, signed int *, signed int))(v14 + 8); v16 = v3[3]; a2 = 2; result = v15(v14, v16, 2 * v13, &a2, 1); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0082B220) -------------------------------------------------------- unsigned int __thiscall sub_82B220(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4428); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiControlPointCount", v3[4]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiCompactControlPointCount", v3[5]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0082B2E0) -------------------------------------------------------- char *sub_82B2E0() { return dword_BA4430; } //----- (0082B2F0) -------------------------------------------------------- int __thiscall sub_82B2F0(char *this, _DWORD **a2) { char *v2; // edi float *v3; // eax float *v4; // esi int v5; // ebx v2 = this; v3 = (float *)operator new(0x28u); v4 = v3; v5 = 0; if ( v3 ) { sub_85BA50(v3); *(_DWORD *)v4 = &NiBSplineBasisData::`vftable'; v4[7] = -1.0; v4[2] = 0.0; v4[8] = 0.0; *((_DWORD *)v4 + 9) = 3; v5 = (int)v4; } sub_85BB00(v2, v5, a2); qmemcpy((void *)(v5 + 8), v2 + 8, 0x20u); return v5; } // A229B4: using guessed type void *NiBSplineBasisData::`vftable'; //----- (0082B360) -------------------------------------------------------- float *sub_82B360() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x28u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *(_DWORD *)v1 = &NiBSplineBasisData::`vftable'; v1[7] = -1.0; v1[2] = 0.0; v1[8] = 0.0; *((_DWORD *)v1 + 9) = 3; return v1; } // A229B4: using guessed type void *NiBSplineBasisData::`vftable'; //----- (0082B3B0) -------------------------------------------------------- bool __thiscall sub_82B3B0(_DWORD *this, int a2) { _DWORD *v2; // esi bool result; // al v2 = this; result = sub_85BB20(this, a2); if ( result ) result = *(_DWORD *)(a2 + 8) == v2[2]; return result; } //----- (0082B3E0) -------------------------------------------------------- void *__thiscall sub_82B3E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiBSplineBasisData::`vftable'; sub_85BA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A229B4: using guessed type void *NiBSplineBasisData::`vftable'; //----- (0082B410) -------------------------------------------------------- unsigned int __thiscall sub_82B410(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA4430); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0082B460) -------------------------------------------------------- int __thiscall sub_82B460(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 2, 4, &a2, 1); } //----- (0082B4A0) -------------------------------------------------------- int __thiscall sub_82B4A0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 8, 4, &a2, 1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0082B4E0) -------------------------------------------------------- int __thiscall sub_82B4E0(int *this, signed int a2) { return sub_82BDA0(this, a2); } //----- (0082B4F0) -------------------------------------------------------- char __thiscall sub_82B4F0(_DWORD *this, int a2) { return sub_82B9D0(this, a2); } //----- (0082B500) -------------------------------------------------------- int __thiscall sub_82B500(_DWORD *this, int a2) { return sub_82BE20(this, a2); } //----- (0082B510) -------------------------------------------------------- char __thiscall sub_82B510(_BYTE *this, int a2) { return sub_82BA10(this, a2); } //----- (0082B520) -------------------------------------------------------- char *sub_82B520() { return dword_BA4438; } //----- (0082B530) -------------------------------------------------------- char __thiscall sub_82B530(int this, float a2, int a3, int a4) { int v4; // ebx double v5; // st7 char v6; // bl char result; // al int v8; // eax char v9; // dl int v10; // ecx unsigned int v11; // edi int v12; // eax char v13; // cl unsigned int v14; // eax int v15; // edx unsigned int v16; // ecx _BYTE *v17; // edx bool v18; // bl unsigned int v19; // ecx _BYTE *v20; // edx unsigned int v21; // ecx char v22; // al int v23; // [esp+24h] [ebp-10h] unsigned __int8 v24; // [esp+28h] [ebp-Ch] int v25; // [esp+2Ch] [ebp-8h] char v26; // [esp+31h] [ebp-3h] char v27; // [esp+32h] [ebp-2h] bool v28; // [esp+33h] [ebp-1h] v4 = this; v25 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { v6 = *(_BYTE *)(this + 12); if ( v6 == 2 ) { *(_BYTE *)a4 = 0; result = 0; } else { *(_BYTE *)a4 = v6 != 0; result = 1; } return result; } v8 = *(_DWORD *)(this + 16); if ( v8 ) { v9 = *(_BYTE *)(v8 + 20); v10 = *(_DWORD *)(v8 + 16); v11 = *(_DWORD *)(v8 + 8); v12 = *(_DWORD *)(v8 + 12); v24 = v9; v23 = v12; if ( v11 ) { *(_DWORD *)(v4 + 24) = *(_DWORD *)(v4 + 20); v13 = sub_8062D0(a2, v12, v10, v11, v4 + 20, v9); v14 = *(_DWORD *)(v4 + 20); v26 = v13; v27 = v13; if ( v13 == *(_BYTE *)(v4 + 28) ) { v15 = *(_DWORD *)(v4 + 24); v28 = v13 == 0; if ( v15 == v14 || (v16 = v15 + 1, v15 + 1 <= v14) ) { v21 = v15 + 1; if ( v15 + 1 < v14 ) { while ( v21 < v11 ) { if ( *(_BYTE *)(v21 * v24 + v23 + 4) == v28 ) { v27 = v28; goto LABEL_28; } v4 = v25; if ( ++v21 >= v14 ) goto LABEL_29; } } goto LABEL_29; } if ( v16 < v11 ) { v17 = (_BYTE *)(v16 * v24 + v23 + 4); while ( 1 ) { v18 = v28; if ( *v17 == v28 ) break; ++v16; v17 += v24; if ( v16 >= v11 ) { v4 = v25; goto LABEL_15; } } LABEL_21: v27 = v18; LABEL_28: v4 = v25; goto LABEL_29; } LABEL_15: if ( v26 != v28 ) { v19 = 0; if ( v14 ) { v20 = (_BYTE *)(v23 + 4); while ( 1 ) { v18 = v28; if ( *v20 == v28 ) goto LABEL_21; ++v19; v20 += v24; if ( v19 >= v14 ) goto LABEL_28; } } } } LABEL_29: v5 = a2; *(_BYTE *)(v4 + 12) = v27 != 0; *(_BYTE *)(v4 + 28) = v26; goto LABEL_30; } } LABEL_30: v22 = *(_BYTE *)(v4 + 12); if ( v22 == 2 ) { *(_BYTE *)a4 = 0; result = 0; } else { *(_BYTE *)a4 = v22 != 0; *(float *)(v4 + 8) = v5; result = 1; } return result; } //----- (0082B6C0) -------------------------------------------------------- float *__thiscall sub_82B6C0(float *this, int a2) { float *v2; // esi v2 = this; sub_82BA70(this, a2); v2[6] = 0.0; *((_BYTE *)v2 + 28) = 0; *(_DWORD *)v2 = &NiBoolTimelineInterpolator::`vftable'; return v2; } // A229F4: using guessed type void *NiBoolTimelineInterpolator::`vftable'; //----- (0082B6F0) -------------------------------------------------------- _DWORD *__thiscall sub_82B6F0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 4); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_832100(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0082B740) -------------------------------------------------------- int __thiscall sub_82B740(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_82BA70(v3, 0); *(_DWORD *)v4 = &NiBoolTimelineInterpolator::`vftable'; *(_DWORD *)(v4 + 24) = 0; *(_BYTE *)(v4 + 28) = 0; sub_82BC70(v2, v4, a2); result = v4; } else { sub_82BC70(v2, 0, a2); result = 0; } return result; } // A229F4: using guessed type void *NiBoolTimelineInterpolator::`vftable'; //----- (0082B7A0) -------------------------------------------------------- float *sub_82B7A0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_82BA70(v0, 0); *(_DWORD *)v1 = &NiBoolTimelineInterpolator::`vftable'; v1[6] = 0.0; *((_BYTE *)v1 + 28) = 0; return v1; } // A229F4: using guessed type void *NiBoolTimelineInterpolator::`vftable'; //----- (0082B7E0) -------------------------------------------------------- unsigned int __thiscall sub_82B7E0(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_82BE70(this, a2); v3 = sub_8784D0(*(int *)dword_BA4438); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0082B830) -------------------------------------------------------- signed int __stdcall sub_82B830(int a1) { return 5; } //----- (0082B840) -------------------------------------------------------- int __thiscall sub_82B840(_DWORD *this, int a2) { int result; // eax result = this[4]; if ( result ) result = *(_DWORD *)(result + 16); return result; } //----- (0082B850) -------------------------------------------------------- bool __thiscall sub_82B850(int this, int a2) { bool result; // al if ( *(_DWORD *)(this + 16) ) result = 0; else result = *(_BYTE *)(this + 12) != 2; return result; } //----- (0082B870) -------------------------------------------------------- char __thiscall sub_82B870(_DWORD *this) { _DWORD *v1; // ebx LONG v2; // eax int v3; // ecx unsigned int v4; // esi int v5; // edi int (__thiscall ***v6)(_DWORD, signed int); // esi char v7; // dl unsigned int v8; // ecx int v9; // esi _DWORD *v11; // [esp+4h] [ebp-8h] char v12; // [esp+Ah] [ebp-2h] unsigned __int8 v13; // [esp+Bh] [ebp-1h] v1 = this; v2 = this[4]; v11 = this; if ( v2 ) { v3 = *(_DWORD *)(v2 + 16); v4 = *(_DWORD *)(v2 + 8); v5 = *(_DWORD *)(v2 + 12); v13 = *(_BYTE *)(v2 + 20); if ( v4 ) { LOBYTE(v2) = *(_BYTE *)(v5 + 4); v12 = *(_BYTE *)(v5 + 4); if ( v4 == 1 ) goto LABEL_29; if ( v3 == 1 || v3 == 5 ) { v7 = 1; v8 = 1; while ( v8 < v4 ) { if ( *(_BYTE *)(v8 * v13 + v5 + 4) != (_BYTE)v2 ) v7 = 0; ++v8; if ( !v7 ) return v2; v1 = v11; } if ( v7 ) { LABEL_29: v9 = v1[4]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); LOBYTE(v2) = v12; v1[4] = 0; } *((_BYTE *)v1 + 12) = v2; } } } else { v6 = (int (__thiscall ***)(_DWORD, signed int))v2; if ( v2 ) { v2 = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !v2 && v6 ) LOBYTE(v2) = (**v6)(v6, 1); v1[4] = 0; } *((_BYTE *)v1 + 12) = 2; } } return v2; } //----- (0082B950) -------------------------------------------------------- void __thiscall sub_82B950(int this, char a2) { int v2; // edi int v3; // esi v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *(_DWORD *)(v2 + 16) = 0; *(_BYTE *)(v2 + 12) = a2; } else { *(_BYTE *)(this + 12) = a2; } } //----- (0082B9A0) -------------------------------------------------------- void __thiscall sub_82B9A0(_DWORD *this, float a2, float a3) { int *v3; // ecx v3 = (int *)this[4]; if ( v3 ) sub_82BF30(v3, a2, a3); } //----- (0082B9D0) -------------------------------------------------------- char __thiscall sub_82B9D0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_8A3660(this, a2); if ( result ) { v4 = v2[4]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0082BA10) -------------------------------------------------------- char __thiscall sub_82BA10(_BYTE *this, int a2) { _BYTE *v2; // esi int v4; // ecx v2 = this; if ( !sub_832120(this, a2) || v2[12] != *(_BYTE *)(a2 + 12) ) return 0; v4 = *((_DWORD *)v2 + 4); if ( v4 ) { if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( v4 ) goto LABEL_13; } if ( *(_DWORD *)(a2 + 16) ) return 0; if ( v4 ) { LABEL_13: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 16)) ) return 1; return 0; } return 1; } //----- (0082BA70) -------------------------------------------------------- float *__thiscall sub_82BA70(float *this, int a2) { float *v2; // esi float *result; // eax v2 = this; sub_8320E0(this); *(_DWORD *)v2 = &NiBoolInterpolator::`vftable'; *((_BYTE *)v2 + 12) = 2; *((_DWORD *)v2 + 4) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = v2; v2[5] = 0.0; return result; } // A22A9C: using guessed type void *NiBoolInterpolator::`vftable'; //----- (0082BAB0) -------------------------------------------------------- char *sub_82BAB0() { return dword_BA4440; } //----- (0082BAC0) -------------------------------------------------------- float *__thiscall sub_82BAC0(float *this, char a2) { float *v2; // esi v2 = this; sub_8320E0(this); *((_BYTE *)v2 + 12) = a2; *(_DWORD *)v2 = &NiBoolInterpolator::`vftable'; v2[4] = 0.0; v2[5] = 0.0; return v2; } // A22A9C: using guessed type void *NiBoolInterpolator::`vftable'; //----- (0082BAF0) -------------------------------------------------------- int __thiscall sub_82BAF0(_DWORD *this, float a2, int a3) { _DWORD *v3; // esi int result; // eax _DWORD *v5; // ecx int v6; // edi int v7; // eax int v8; // esi int v9; // ebx void (__thiscall ***v10)(_DWORD, signed int); // esi v3 = this; result = sub_831BF0(this, SLODWORD(a2), a3); v5 = (_DWORD *)v3[4]; v6 = result; if ( v5 ) { sub_82C0A0(v5, (int)&a3, a2, *(float *)&a3); v7 = a3; v8 = *(_DWORD *)(v6 + 16); v9 = a3; if ( v8 != a3 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v7 = a3; } *(_DWORD *)(v6 + 16) = v9; if ( v9 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); v7 = a3; } } *(_DWORD *)(v6 + 20) = 0; if ( v7 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } result = v6; } return result; } //----- (0082BBB0) -------------------------------------------------------- char __thiscall sub_82BBB0(int this, float a2, int a3, int a4) { int v4; // esi double v5; // st7 char v6; // al char result; // al int v8; // eax int v9; // ecx char v10; // dl int v11; // edi int v12; // eax char v13; // al v4 = this; v5 = a2; if ( a2 == *(float *)(this + 8) ) { v6 = *(_BYTE *)(this + 12); if ( v6 == 2 ) { *(_BYTE *)a4 = 0; result = 0; } else { *(_BYTE *)a4 = v6 != 0; result = 1; } } else { v8 = *(_DWORD *)(this + 16); if ( v8 ) { v9 = *(_DWORD *)(v8 + 8); v10 = *(_BYTE *)(v8 + 20); v11 = *(_DWORD *)(v8 + 16); v12 = *(_DWORD *)(v8 + 12); if ( v9 ) { v5 = a2; *(_BYTE *)(v4 + 12) = sub_8062D0(a2, v12, v11, v9, v4 + 20, v10) != 0; } } v13 = *(_BYTE *)(v4 + 12); if ( v13 == 2 ) { *(_BYTE *)a4 = 0; result = 0; } else { *(_BYTE *)a4 = v13 != 0; *(float *)(v4 + 8) = v5; result = 1; } } return result; } //----- (0082BC70) -------------------------------------------------------- int __thiscall sub_82BC70(void *this, int a2, _DWORD **a3) { void *v3; // esi int result; // eax int v5; // ebx v3 = this; result = sub_87F920(this, a2, a3); *(_BYTE *)(a2 + 12) = *((_BYTE *)v3 + 12); v5 = *(_DWORD *)(a2 + 16); if ( v5 == *((_DWORD *)v3 + 4) ) { *(_DWORD *)(a2 + 20) = *((_DWORD *)v3 + 5); } else { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = *((_DWORD *)v3 + 4); *(_DWORD *)(a2 + 16) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = *((_DWORD *)v3 + 5); *(_DWORD *)(a2 + 20) = result; } else { *(_DWORD *)(a2 + 20) = *((_DWORD *)v3 + 5); } } return result; } //----- (0082BD30) -------------------------------------------------------- int __thiscall sub_82BD30(void *this, _DWORD **a2) { void *v2; // ebx float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x18u); v4 = (int)v3; if ( v3 ) { sub_8320E0(v3); *(_DWORD *)v4 = &NiBoolInterpolator::`vftable'; *(_BYTE *)(v4 + 12) = 2; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; sub_82BC70(v2, v4, a2); result = v4; } else { sub_82BC70(v2, 0, a2); result = 0; } return result; } // A22A9C: using guessed type void *NiBoolInterpolator::`vftable'; //----- (0082BDA0) -------------------------------------------------------- int __thiscall sub_82BDA0(int *this, signed int a2) { _DWORD *v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v8; // edi int v9; // ebx v2 = (_DWORD *)a2; v3 = this; sub_832110(this, a2); v4 = v2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 1; v6(v5, v3 + 3, 1, &a2, 1); result = sub_876300(v2); v8 = v3[4]; v9 = result; if ( v8 != result ) { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } v3[4] = v9; if ( v9 ) result = InterlockedIncrement((volatile LONG *)(v9 + 4)); } return result; } //----- (0082BE20) -------------------------------------------------------- int __thiscall sub_82BE20(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_8790E0(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 1; v6(v5, v3 + 3, 1, &a2, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[4]); } //----- (0082BE70) -------------------------------------------------------- unsigned int __thiscall sub_82BE70(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8322E0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4440); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878570((int)"m_bBoolValue", *((_BYTE *)v3 + 12)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_spBoolData", *((_DWORD *)v3 + 4)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0082BF30) -------------------------------------------------------- void __thiscall sub_82BF30(int *this, float a2, float a3) { int *v3; // esi int v4; // [esp+Ch] [ebp-4h] v4 = (int)this; v3 = this; v4 = this[3]; sub_817370(5, this[4], (int)&v4, (int)(this + 2), a2, a3); v3[3] = v4; } //----- (0082BF70) -------------------------------------------------------- char *sub_82BF70() { return dword_BA4448; } //----- (0082BF80) -------------------------------------------------------- _DWORD *sub_82BF80() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; *((_BYTE *)v1 + 20) = 0; *v1 = &NiBoolData::`vftable'; return v1; } // A22B64: using guessed type void *NiBoolData::`vftable'; //----- (0082BFC0) -------------------------------------------------------- char __thiscall sub_82BFC0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi unsigned __int8 (__cdecl *v8)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( v5 != *(_DWORD *)(a2 + 8) ) return 0; v6 = v3[4]; if ( v6 != *(_DWORD *)(a2 + 16) || *((_BYTE *)v3 + 20) != *(_BYTE *)(a2 + 20) ) return 0; v7 = 0; v8 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3FE8[v6]; if ( !v5 ) return 1; while ( v8(v7 * *((unsigned __int8 *)v3 + 20) + v3[3], v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12)) ) { if ( (unsigned int)++v7 >= v3[2] ) return 1; } return 0; } //----- (0082C040) -------------------------------------------------------- int __thiscall sub_82C040(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3DA8[this[4]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3C06[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 20) = 0; } return result; } //----- (0082C0A0) -------------------------------------------------------- _DWORD **__thiscall sub_82C0A0(_DWORD *this, int a2, float a3, float a4) { _DWORD *v4; // esi int v5; // eax _DWORD **v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax int v10; // [esp+1Ch] [ebp-4h] v4 = this; v5 = *sub_85BB90(this, &v10); v6 = (_DWORD **)a2; *(_DWORD *)a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v7 ) (**v7)(v7, 1); v8 = v4[2]; if ( v8 ) { v10 = 0; a2 = 0; sub_817070(5, v4[4], v4[3], v8, a3, a4, (int)&v10, (int)&a2); sub_82C040(*v6, v10, a2, v4[4]); } return v6; } //----- (0082C150) -------------------------------------------------------- _DWORD *__thiscall sub_82C150(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 3); *(_DWORD *)this = &NiBoolData::`vftable'; if ( v3 ) operator delete((void *)(v3 - 4)); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A22B64: using guessed type void *NiBoolData::`vftable'; //----- (0082C190) -------------------------------------------------------- int __thiscall sub_82C190(int *this, signed int a2) { signed int v2; // ebx int *v3; // edi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax int v7; // esi int result; // eax int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, int *, signed int, int *, signed int); // eax signed int v12; // ST10_4 int v13; // ebx int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 4); v7 = 5; v15 = 4; result = v6(v5, &a2, 4, &v15, 1); if ( a2 ) { if ( *(_DWORD *)(v2 + 28) >= 0xA010068u ) { v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v9 + 4); v15 = 4; v11(v10, &v14, 4, &v15, 1); v7 = v14; } v12 = a2; *((_BYTE *)v3 + 20) = byte_BA3C06[v7]; v13 = ((int (__cdecl *)(signed int, signed int))dword_BA42B8[v7])(v2, v12); ((void (__cdecl *)(int, signed int, _DWORD))dword_BA3C88[v7])(v13, a2, *((unsigned __int8 *)v3 + 20)); result = sub_82C040(v3, v13, a2, v7); } return result; } //----- (0082C250) -------------------------------------------------------- int __thiscall sub_82C250(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST0C_4 int result; // eax int v7; // eax int v8; // ST0C_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); result = ((int (__cdecl *)(signed int, _DWORD, _DWORD))dword_BA3F58[v3[4]])(v2, v3[3], v3[2]); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0082C2D0) -------------------------------------------------------- unsigned int __thiscall sub_82C2D0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4448); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiNumKeys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0082C350) -------------------------------------------------------- float *__thiscall sub_82C350(float *this, char a2, float a3, char a4) { float *v4; // esi v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendTransformInterpolator::`vftable'; return v4; } // A22BA4: using guessed type void *NiBlendTransformInterpolator::`vftable'; //----- (0082C380) -------------------------------------------------------- float *__thiscall sub_82C380(float *this) { float *v1; // esi v1 = this; sub_82F760(this); *(_DWORD *)v1 = &NiBlendTransformInterpolator::`vftable'; return v1; } // A22BA4: using guessed type void *NiBlendTransformInterpolator::`vftable'; //----- (0082C3A0) -------------------------------------------------------- int __stdcall sub_82C3A0(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 104))(); } //----- (0082C3C0) -------------------------------------------------------- float *sub_82C3C0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x30u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendTransformInterpolator::`vftable'; return v1; } // A22BA4: using guessed type void *NiBlendTransformInterpolator::`vftable'; //----- (0082C3F0) -------------------------------------------------------- char __thiscall sub_82C3F0(_DWORD *this, int a2) { return sub_82FD20(this, a2); } //----- (0082C400) -------------------------------------------------------- int __thiscall sub_82C400(char *this, int a2) { return sub_830D40(this, a2); } //----- (0082C410) -------------------------------------------------------- bool __thiscall sub_82C410(_BYTE *this, int a2) { return sub_82FD80(this, a2) != 0; } //----- (0082C430) -------------------------------------------------------- char *sub_82C430() { return dword_BA4450; } //----- (0082C440) -------------------------------------------------------- float *__thiscall sub_82C440(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x30u); v4 = v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendTransformInterpolator::`vftable'; sub_830570(v2, (int)v4, a2); result = v4; } else { sub_830570(v2, 0, a2); result = 0; } return result; } // A22BA4: using guessed type void *NiBlendTransformInterpolator::`vftable'; //----- (0082C490) -------------------------------------------------------- int __thiscall sub_82C490(float *this, int a2, _DWORD **a3) { return sub_830570(this, a2, a3); } //----- (0082C4A0) -------------------------------------------------------- int __thiscall sub_82C4A0(int *this, signed int a2) { int result; // eax int v3; // [esp+4h] [ebp-20h] int v4; // [esp+8h] [ebp-1Ch] int v5; // [esp+Ch] [ebp-18h] int v6; // [esp+10h] [ebp-14h] int v7; // [esp+14h] [ebp-10h] int v8; // [esp+18h] [ebp-Ch] int v9; // [esp+1Ch] [ebp-8h] float v10; // [esp+20h] [ebp-4h] result = sub_8308A0(this, a2); if ( *(_DWORD *)(a2 + 28) < 0xA01006Eu ) { v10 = -3.4028235e38; v3 = dword_ABCEB0; v4 = dword_ABCEB4; v5 = dword_ABCEB8; v6 = dword_BA44A0; v7 = dword_BA44A4; v8 = dword_BA44A8; v9 = dword_BA44AC; result = sub_8319B0((char *)&v3, a2); } return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0082C510) -------------------------------------------------------- char __thiscall sub_82C510(int this, float a2, int a3, int a4) { char result; // al if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) { *(float *)a4 = -3.4028235e38; *(float *)(a4 + 16) = -3.4028235e38; *(float *)(a4 + 28) = -3.4028235e38; result = 0; } else if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(this + 24) + 60))(LODWORD(a2), a3, a4) ) { result = 1; } else { result = 0; *(float *)a4 = -3.4028235e38; *(float *)(a4 + 16) = -3.4028235e38; *(float *)(a4 + 28) = -3.4028235e38; } return result; } //----- (0082C5B0) -------------------------------------------------------- bool __thiscall sub_82C5B0(_DWORD *this, float a2, int a3, int a4) { _DWORD *v4; // edi double v5; // st7 char v6; // al unsigned __int8 v7; // bl bool v8; // zf int v9; // esi int v10; // ecx double v11; // st6 double v12; // st5 double v13; // st7 int *v14; // eax int v15; // eax float v16; // edx double v17; // st7 double v18; // st6 float v19; // eax float v20; // ecx float v21; // edx double v22; // st7 char v24; // [esp+1Ch] [ebp-8Ch] int v25; // [esp+2Ch] [ebp-7Ch] float v26; // [esp+3Ch] [ebp-6Ch] float v27; // [esp+40h] [ebp-68h] float v28; // [esp+44h] [ebp-64h] float v29; // [esp+48h] [ebp-60h] float v30; // [esp+4Ch] [ebp-5Ch] float v31; // [esp+50h] [ebp-58h] int v32; // [esp+54h] [ebp-54h] float v33; // [esp+58h] [ebp-50h] float v34; // [esp+5Ch] [ebp-4Ch] int v35; // [esp+60h] [ebp-48h] float v36; // [esp+64h] [ebp-44h] float v37; // [esp+68h] [ebp-40h] int v38; // [esp+6Ch] [ebp-3Ch] float v39; // [esp+70h] [ebp-38h] float v40; // [esp+74h] [ebp-34h] int v41; // [esp+78h] [ebp-30h] float v42; // [esp+7Ch] [ebp-2Ch] float v43; // [esp+80h] [ebp-28h] float v44; // [esp+84h] [ebp-24h] float v45; // [esp+88h] [ebp-20h] float v46; // [esp+8Ch] [ebp-1Ch] float v47; // [esp+90h] [ebp-18h] float v48; // [esp+94h] [ebp-14h] float v49; // [esp+98h] [ebp-10h] float v50; // [esp+9Ch] [ebp-Ch] float v51; // [esp+A0h] [ebp-8h] char v52; // [esp+A4h] [ebp-4h] char v53; // [esp+A5h] [ebp-3h] char v54; // [esp+A6h] [ebp-2h] char v55; // [esp+A7h] [ebp-1h] float v56; // [esp+B0h] [ebp+8h] v49 = 1.0; v50 = 1.0; v4 = this; v47 = *(float *)&dword_BA45C4; v46 = *(float *)&dword_BA45C0; v48 = *(float *)&dword_BA45C8; sub_874B00(&v42, 0.0, 0.0, 0.0, 0.0); v5 = 0.0; v6 = 0; v37 = 0.0; v7 = 0; v52 = 0; v53 = 0; v55 = 0; v54 = 1; if ( *((_BYTE *)v4 + 13) ) { while ( 1 ) { v9 = v4[5] + 24 * v7; v10 = *(_DWORD *)v9; if ( *(_DWORD *)v9 && v5 < *(float *)(v9 + 8) ) { v51 = a2; if ( *(float *)(v9 + 8) == v5 ) goto LABEL_39; if ( v4[3] & 1 ) v51 = *(float *)(v9 + 20); if ( -3.4028235e38 == v51 ) goto LABEL_39; v36 = -3.4028235e38; v29 = *(float *)&dword_ABCEB0; v31 = *(float *)&dword_ABCEB8; v33 = *(float *)&dword_BA44A4; v30 = *(float *)&dword_ABCEB4; v35 = dword_BA44AC; v32 = dword_BA44A0; v34 = *(float *)&dword_BA44A8; if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v10 + 60))(LODWORD(v51), a3, &v29) ) { v51 = -3.4028235e38; v11 = v51; if ( v51 == v29 ) { v13 = v51; v49 = v49 - *(float *)(v9 + 8); } else { v12 = *(float *)(v9 + 8); v52 = 1; v51 = v12; v26 = v29 * v51; v27 = v30 * v51; v13 = v11; v28 = v51 * v31; v46 = v26 + v46; v47 = v47 + v27; v48 = v48 + v28; } if ( v33 != v13 ) { v38 = v32; v39 = v33; v40 = v34; v41 = v35; if ( v54 ) { v54 = 0; } else { v51 = v33 * v43 + *(float *)&v32 * v42 + v34 * v44 + *(float *)&v35 * v45; if ( v51 < 0.0 ) { v14 = (int *)sub_874B80((float *)&v38, (float *)&v24); v38 = *v14; v39 = *((float *)v14 + 1); v40 = *((float *)v14 + 2); v41 = v14[3]; } } v15 = sub_8780F0((float *)&v38, (int)&v25, *(float *)(v9 + 8)); v38 = *(int *)v15; v39 = *(float *)(v15 + 4); v40 = *(float *)(v15 + 8); v16 = *(float *)(v15 + 12); v42 = *(float *)&v38 + v42; v41 = LODWORD(v16); v53 = 1; v43 = v43 + v39; v44 = v44 + v40; v45 = v45 + v16; } if ( -3.4028235e38 == v36 ) { v50 = v50 - *(float *)(v9 + 8); } else { v17 = v36 * *(float *)(v9 + 8); v55 = 1; v37 = v17 + v37; } } else { LABEL_39: v49 = v49 - *(float *)(v9 + 8); v50 = v50 - *(float *)(v9 + 8); } } if ( ++v7 >= *((_BYTE *)v4 + 13) ) break; v5 = 0.0; } v6 = v53; } v8 = v52 == 0; *(float *)a4 = -3.4028235e38; *(float *)(a4 + 16) = -3.4028235e38; *(float *)(a4 + 28) = -3.4028235e38; if ( !v8 ) { v56 = 1.0 / v49; v46 = v56 * v46; v18 = v47; *(float *)a4 = v46; v47 = v18 * v56; *(float *)(a4 + 4) = v47; v48 = v56 * v48; *(float *)(a4 + 8) = v48; if ( !v6 ) goto LABEL_30; goto LABEL_29; } if ( v6 ) { LABEL_29: sub_875190(&v42); v19 = v43; v20 = v44; *(float *)(a4 + 12) = v42; v21 = v45; *(float *)(a4 + 16) = v19; *(float *)(a4 + 20) = v20; *(float *)(a4 + 24) = v21; } LABEL_30: if ( v55 ) *(float *)(a4 + 28) = v37 / v50; v51 = -3.4028235e38; v22 = v51; return v51 != *(float *)(a4 + 28) || v22 != *(float *)(a4 + 16) || *(float *)a4 != v22; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0082C980) -------------------------------------------------------- char __thiscall sub_82C980(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82C510(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82C5B0((_DWORD *)v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082C9E0) -------------------------------------------------------- unsigned int __thiscall sub_82C9E0(void *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_830ED0(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4450); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0082CA30) -------------------------------------------------------- int __stdcall sub_82CA30(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 92))(); } //----- (0082CA50) -------------------------------------------------------- float *sub_82CA50() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x40u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendQuaternionInterpolator::`vftable'; *((_DWORD *)v1 + 12) = dword_BA44B8; *((_DWORD *)v1 + 13) = dword_BA44BC; *((_DWORD *)v1 + 14) = dword_BA44C0; *((_DWORD *)v1 + 15) = dword_BA44C4; return v1; } // A22C44: using guessed type void *NiBlendQuaternionInterpolator::`vftable'; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0082CAA0) -------------------------------------------------------- int __thiscall sub_82CAA0(int *this, signed int a2) { int *v2; // esi v2 = this; sub_8308A0(this, a2); return sub_8752B0((char *)v2 + 48, a2); } //----- (0082CAC0) -------------------------------------------------------- int __thiscall sub_82CAC0(char *this, int a2) { char *v2; // esi v2 = this; sub_830D40(this, a2); return sub_875330((float *)v2 + 12, a2); } //----- (0082CAE0) -------------------------------------------------------- char *sub_82CAE0() { return dword_BA4458; } //----- (0082CAF0) -------------------------------------------------------- void *__thiscall sub_82CAF0(void *this, char a2) { void *v2; // esi v2 = this; sub_82FE50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0082CB20) -------------------------------------------------------- float *__thiscall sub_82CB20(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendQuaternionInterpolator::`vftable'; *((_DWORD *)v4 + 12) = dword_BA44B8; *((_DWORD *)v4 + 13) = dword_BA44BC; *((_DWORD *)v4 + 14) = dword_BA44C0; *((_DWORD *)v4 + 15) = dword_BA44C4; } else { v4 = 0; } sub_830570(v2, (int)v4, a2); v4[12] = v2[12]; v4[13] = v2[13]; v4[14] = v2[14]; v4[15] = v2[15]; return v4; } // A22C44: using guessed type void *NiBlendQuaternionInterpolator::`vftable'; // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0082CBA0) -------------------------------------------------------- bool __thiscall sub_82CBA0(float *this, float *a2) { float *v2; // esi v2 = this; return sub_82FD80(this, (int)a2) && a2[12] == v2[12] && a2[13] == v2[13] && a2[14] == v2[14] && a2[15] == v2[15]; } //----- (0082CC00) -------------------------------------------------------- char __thiscall sub_82CC00(int this, float a2, int a3, int a4) { char result; // al _DWORD *v5; // esi if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) { *(_DWORD *)a4 = dword_BA44B8; *(_DWORD *)(a4 + 4) = dword_BA44BC; *(_DWORD *)(a4 + 8) = dword_BA44C0; *(_DWORD *)(a4 + 12) = dword_BA44C4; *(_DWORD *)(this + 48) = *(_DWORD *)a4; *(_DWORD *)(this + 52) = *(_DWORD *)(a4 + 4); *(_DWORD *)(this + 56) = *(_DWORD *)(a4 + 8); *(_DWORD *)(this + 60) = *(_DWORD *)(a4 + 12); result = 0; } else { v5 = (_DWORD *)(this + 48); if ( (*(unsigned __int8 (__thiscall **)(_DWORD, _DWORD, int, int))(**(_DWORD **)(this + 24) + 72))( *(_DWORD *)(this + 24), LODWORD(a2), a3, this + 48) ) { *(_DWORD *)a4 = *v5; *(_DWORD *)(a4 + 4) = v5[1]; *(_DWORD *)(a4 + 8) = v5[2]; *(_DWORD *)(a4 + 12) = v5[3]; result = 1; } else { *(_DWORD *)a4 = dword_BA44B8; *(_DWORD *)(a4 + 4) = dword_BA44BC; *(_DWORD *)(a4 + 8) = dword_BA44C0; *(_DWORD *)(a4 + 12) = dword_BA44C4; *v5 = *(_DWORD *)a4; v5[1] = *(_DWORD *)(a4 + 4); v5[2] = *(_DWORD *)(a4 + 8); v5[3] = *(_DWORD *)(a4 + 12); result = 0; } } return result; } // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0082CCF0) -------------------------------------------------------- char __thiscall sub_82CCF0(int this, float a2, int a3, int a4) { double v4; // st7 int v5; // edi unsigned __int8 v6; // al int v7; // ebx int v8; // eax int v9; // ebx int v10; // ecx int v11; // edx float *v12; // eax float *v13; // eax _DWORD *v14; // eax double v15; // st7 char result; // al int v17; // [esp+1Ch] [ebp-54h] int v18; // [esp+2Ch] [ebp-44h] char v19; // [esp+3Ch] [ebp-34h] float v20; // [esp+4Ch] [ebp-24h] float v21; // [esp+50h] [ebp-20h] float v22; // [esp+54h] [ebp-1Ch] float v23; // [esp+58h] [ebp-18h] float v24; // [esp+5Ch] [ebp-14h] float v25; // [esp+60h] [ebp-10h] float v26; // [esp+64h] [ebp-Ch] float v27; // [esp+68h] [ebp-8h] char v28; // [esp+6Eh] [ebp-2h] unsigned __int8 v29; // [esp+6Fh] [ebp-1h] v4 = 0.0; v5 = this; *(float *)(this + 48) = 0.0; v6 = 0; *(float *)(this + 52) = 0.0; v28 = 0; *(float *)(this + 56) = 0.0; v29 = 0; *(float *)(this + 60) = 0.0; v27 = 0.0; if ( !*(_BYTE *)(this + 13) ) goto LABEL_20; do { v7 = v6; v8 = *(_DWORD *)(v5 + 20); v9 = 24 * v7; v10 = *(_DWORD *)(v8 + v9); v11 = v8 + v9; if ( v10 ) { if ( v4 < *(float *)(v11 + 8) ) { v26 = a2; if ( v10 ) { if ( v4 != *(float *)(v11 + 8) ) { if ( *(_BYTE *)(v5 + 12) & 1 ) v26 = *(float *)(v11 + 20); if ( -3.4028235e38 != v26 ) { v4 = 0.0; if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v10 + 72))( LODWORD(v26), a3, &v20) ) { if ( v27 > 0.0 ) { v26 = *(float *)(v5 + 52) * v21 + v20 * *(float *)(v5 + 48) + *(float *)(v5 + 56) * v22 + *(float *)(v5 + 60) * v23; if ( v26 < 0.0 ) { v12 = sub_874B80(&v20, (float *)&v19); v20 = *v12; v21 = v12[1]; v22 = v12[2]; v23 = v12[3]; } } v13 = (float *)sub_8780F0(&v20, (int)&v18, *(float *)(*(_DWORD *)(v5 + 20) + v9 + 8)); v20 = *v13; v21 = v13[1]; v22 = v13[2]; v23 = v13[3]; v14 = (_DWORD *)sub_8780F0((float *)(v5 + 48), (int)&v17, v27); *(_DWORD *)(v5 + 48) = *v14; *(_DWORD *)(v5 + 52) = v14[1]; *(_DWORD *)(v5 + 56) = v14[2]; *(_DWORD *)(v5 + 60) = v14[3]; v24 = *(float *)(v5 + 60); v25 = *(float *)(v5 + 56); v26 = *(float *)(v5 + 52); *(float *)(v5 + 48) = v20 + *(float *)(v5 + 48); *(float *)(v5 + 52) = v21 + v26; *(float *)(v5 + 56) = v22 + v25; *(float *)(v5 + 60) = v23 + v24; sub_875190((float *)(v5 + 48)); v15 = *(float *)(*(_DWORD *)(v5 + 20) + v9 + 8); v28 = 1; v27 = v15 + v27; v4 = 0.0; } } } } } } v6 = v29 + 1; v29 = v6; } while ( v6 < *(_BYTE *)(v5 + 13) ); if ( v28 ) { *(_DWORD *)a4 = *(_DWORD *)(v5 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v5 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v5 + 56); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v5 + 60); result = 1; } else { LABEL_20: *(_DWORD *)(v5 + 48) = dword_BA44B8; *(_DWORD *)(v5 + 52) = dword_BA44BC; *(_DWORD *)(v5 + 56) = dword_BA44C0; *(_DWORD *)(v5 + 60) = dword_BA44C4; *(_DWORD *)a4 = *(_DWORD *)(v5 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v5 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v5 + 56); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v5 + 60); result = 0; } return result; } // BA44B8: using guessed type int dword_BA44B8; // BA44BC: using guessed type int dword_BA44BC; // BA44C0: using guessed type int dword_BA44C0; // BA44C4: using guessed type int dword_BA44C4; //----- (0082CF40) -------------------------------------------------------- char __thiscall sub_82CF40(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82CC00(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82CCF0(v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082CFA0) -------------------------------------------------------- unsigned int __thiscall sub_82CFA0(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4458); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_875200(v3 + 12, (int)"m_kQuaternionValue"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0082D020) -------------------------------------------------------- float *__thiscall sub_82D020(float *this, char a2, float a3, char a4) { float *v4; // esi v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendPoint3Interpolator::`vftable'; *((_DWORD *)v4 + 12) = dword_ABCEBC; *((_DWORD *)v4 + 13) = dword_ABCEC0; *((_DWORD *)v4 + 14) = dword_ABCEC4; *((_BYTE *)v4 + 60) = 0; return v4; } // A22CE4: using guessed type void *NiBlendPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0082D070) -------------------------------------------------------- int __stdcall sub_82D070(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 96))(); } //----- (0082D090) -------------------------------------------------------- float *sub_82D090() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x40u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendPoint3Interpolator::`vftable'; *((_DWORD *)v1 + 12) = dword_ABCEBC; *((_DWORD *)v1 + 13) = dword_ABCEC0; *((_DWORD *)v1 + 14) = dword_ABCEC4; *((_BYTE *)v1 + 60) = 0; return v1; } // A22CE4: using guessed type void *NiBlendPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0082D0E0) -------------------------------------------------------- int __thiscall sub_82D0E0(char *this, int a2) { char *v2; // esi v2 = this; sub_830D40(this, a2); return sub_860940(v2 + 48, a2); } //----- (0082D100) -------------------------------------------------------- char *sub_82D100() { return dword_BA4460; } //----- (0082D110) -------------------------------------------------------- int __thiscall sub_82D110(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x40u); v4 = (int)v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendPoint3Interpolator::`vftable'; *(_DWORD *)(v4 + 48) = dword_ABCEBC; *(_DWORD *)(v4 + 52) = dword_ABCEC0; *(_DWORD *)(v4 + 56) = dword_ABCEC4; *(_BYTE *)(v4 + 60) = 0; } else { v4 = 0; } sub_830570(v2, v4, a2); *(float *)(v4 + 48) = v2[12]; *(float *)(v4 + 52) = v2[13]; *(float *)(v4 + 56) = v2[14]; *(_BYTE *)(v4 + 60) = *((_BYTE *)v2 + 60); return v4; } // A22CE4: using guessed type void *NiBlendPoint3Interpolator::`vftable'; // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0082D190) -------------------------------------------------------- char __thiscall sub_82D190(int this, float a2, int a3, int a4) { char result; // al _DWORD *v5; // esi if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) return 0; v5 = (_DWORD *)(this + 48); if ( (*(unsigned __int8 (__thiscall **)(_DWORD, _DWORD, int, int))(**(_DWORD **)(this + 24) + 68))( *(_DWORD *)(this + 24), LODWORD(a2), a3, this + 48) ) { *(_DWORD *)a4 = *v5; *(_DWORD *)(a4 + 4) = v5[1]; *(_DWORD *)(a4 + 8) = v5[2]; result = 1; } else { *v5 = dword_ABCEBC; v5[1] = dword_ABCEC0; v5[2] = dword_ABCEC4; *(_DWORD *)a4 = *v5; *(_DWORD *)(a4 + 4) = v5[1]; *(_DWORD *)(a4 + 8) = v5[2]; result = 0; } return result; } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0082D230) -------------------------------------------------------- char __thiscall sub_82D230(int this, float a2, int a3, int a4) { int v4; // esi unsigned __int8 v5; // bl int v6; // edx int v7; // edi int v8; // ecx int v9; // edx char result; // al float v11; // [esp+18h] [ebp-20h] float v12; // [esp+1Ch] [ebp-1Ch] float v13; // [esp+20h] [ebp-18h] float v14; // [esp+24h] [ebp-14h] float v15; // [esp+28h] [ebp-10h] float v16; // [esp+2Ch] [ebp-Ch] float v17; // [esp+30h] [ebp-8h] float v18; // [esp+34h] [ebp-4h] float v19; // [esp+40h] [ebp+8h] v18 = 1.0; v4 = this; *(_BYTE *)(this + 60) = 0; *(_DWORD *)(this + 48) = dword_BA45C0; *(_DWORD *)(this + 52) = dword_BA45C4; v5 = 0; *(_DWORD *)(this + 56) = dword_BA45C8; if ( *(_BYTE *)(this + 13) ) { do { v6 = *(_DWORD *)(v4 + 20); v7 = 24 * v5; v8 = *(_DWORD *)(v6 + v7); v9 = v7 + v6; if ( v8 && *(float *)(v9 + 8) > 0.0 ) { v17 = a2; if ( !v8 || *(float *)(v9 + 8) == 0.0 ) goto LABEL_19; if ( *(_BYTE *)(v4 + 12) & 1 ) v17 = *(float *)(v9 + 20); if ( -3.4028235e38 != v17 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v8 + 68))(LODWORD(v17), a3, &v11) ) { v17 = *(float *)(*(_DWORD *)(v4 + 20) + v7 + 8); v14 = v11 * v17; v15 = v12 * v17; v16 = v17 * v13; *(float *)(v4 + 48) = *(float *)(v4 + 48) + v14; *(float *)(v4 + 52) = v15 + *(float *)(v4 + 52); *(float *)(v4 + 56) = v16 + *(float *)(v4 + 56); *(_BYTE *)(v4 + 60) = 1; } else { v18 = v18 - *(float *)(*(_DWORD *)(v4 + 20) + v7 + 8); } } else { LABEL_19: v18 = v18 - *(float *)(v9 + 8); } } ++v5; } while ( v5 < *(_BYTE *)(v4 + 13) ); } if ( *(_BYTE *)(v4 + 60) ) { v19 = 1.0 / v18; *(float *)(v4 + 48) = *(float *)(v4 + 48) * v19; *(float *)(v4 + 52) = v19 * *(float *)(v4 + 52); *(float *)(v4 + 56) = v19 * *(float *)(v4 + 56); *(_DWORD *)a4 = *(_DWORD *)(v4 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 56); result = 1; } else { *(_DWORD *)(v4 + 48) = dword_ABCEBC; *(_DWORD *)(v4 + 52) = dword_ABCEC0; *(_DWORD *)(v4 + 56) = dword_ABCEC4; *(_DWORD *)a4 = *(_DWORD *)(v4 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 56); result = 0; } return result; } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0082D3E0) -------------------------------------------------------- char __thiscall sub_82D3E0(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82D190(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82D230(v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082D440) -------------------------------------------------------- void __thiscall sub_82D440(int *this, signed int a2) { int *v2; // edi v2 = this; sub_8308A0(this, a2); sub_8608D0((char *)v2 + 48, a2); if ( *(float *)&dword_ABCEBC != *((float *)v2 + 12) || *(float *)&dword_ABCEC0 != *((float *)v2 + 13) || *(float *)&dword_ABCEC4 != *((float *)v2 + 14) ) { *((_BYTE *)v2 + 60) = 1; } } // ABCEBC: using guessed type int dword_ABCEBC; // ABCEC0: using guessed type int dword_ABCEC0; // ABCEC4: using guessed type int dword_ABCEC4; //----- (0082D4A0) -------------------------------------------------------- bool __thiscall sub_82D4A0(float *this, float *a2) { float *v2; // esi v2 = this; return sub_82FD80(this, (int)a2) && a2[12] == v2[12] && a2[13] == v2[13] && a2[14] == v2[14]; } //----- (0082D500) -------------------------------------------------------- unsigned int __thiscall sub_82D500(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4460); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_85F140(v3 + 12, (int)"m_kPoint3Value"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0082D580) -------------------------------------------------------- float *__thiscall sub_82D580(float *this, char a2, float a3, char a4) { float *v4; // esi v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendFloatInterpolator::`vftable'; v4[12] = -3.4028235e38; return v4; } // A22D84: using guessed type void *NiBlendFloatInterpolator::`vftable'; //----- (0082D5C0) -------------------------------------------------------- int __stdcall sub_82D5C0(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 88))(); } //----- (0082D5E0) -------------------------------------------------------- float *sub_82D5E0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendFloatInterpolator::`vftable'; v1[12] = -3.4028235e38; return v1; } // A22D84: using guessed type void *NiBlendFloatInterpolator::`vftable'; //----- (0082D610) -------------------------------------------------------- bool __thiscall sub_82D610(float *this, int a2) { float *v2; // esi v2 = this; return sub_82FD80(this, a2) && *(float *)(a2 + 48) == v2[12]; } //----- (0082D650) -------------------------------------------------------- char *sub_82D650() { return dword_BA4468; } //----- (0082D660) -------------------------------------------------------- int __thiscall sub_82D660(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendFloatInterpolator::`vftable'; *(float *)(v4 + 48) = -3.4028235e38; } else { v4 = 0; } sub_830570(v2, v4, a2); *(float *)(v4 + 48) = v2[12]; return v4; } // A22D84: using guessed type void *NiBlendFloatInterpolator::`vftable'; //----- (0082D6B0) -------------------------------------------------------- char __thiscall sub_82D6B0(int this, float a2, int a3, int a4) { char result; // al float *v5; // esi if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) return 0; v5 = (float *)(this + 48); if ( (*(unsigned __int8 (__thiscall **)(_DWORD, _DWORD, int, int))(**(_DWORD **)(this + 24) + 76))( *(_DWORD *)(this + 24), LODWORD(a2), a3, this + 48) ) { *(float *)a4 = *v5; result = 1; } else { *v5 = -3.4028235e38; result = 0; *(float *)a4 = -3.4028235e38; } return result; } //----- (0082D720) -------------------------------------------------------- char __thiscall sub_82D720(int this, float a2, int a3, int a4) { double v4; // st7 int v5; // esi unsigned __int8 v6; // bl int v7; // eax int v8; // edi int v9; // ecx int v10; // edx double v11; // st7 bool v12; // zf char result; // al float v14; // [esp+18h] [ebp-10h] float v15; // [esp+1Ch] [ebp-Ch] float v16; // [esp+20h] [ebp-8h] char v17; // [esp+27h] [ebp-1h] float v18; // [esp+30h] [ebp+8h] v4 = 0.0; v5 = this; *(float *)(this + 48) = 0.0; v6 = 0; v17 = 0; v16 = 1.0; if ( *(_BYTE *)(this + 13) ) { while ( 1 ) { v7 = *(_DWORD *)(v5 + 20); v8 = 24 * v6; v9 = *(_DWORD *)(v8 + v7); v10 = v8 + v7; if ( v9 && v4 < *(float *)(v10 + 8) ) { v15 = a2; if ( !v9 || *(float *)(v10 + 8) == v4 ) goto LABEL_21; if ( *(_BYTE *)(v5 + 12) & 1 ) v15 = *(float *)(v10 + 20); if ( -3.4028235e38 != v15 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v9 + 76))(LODWORD(v15), a3, &v14) ) { v11 = *(float *)(v8 + *(_DWORD *)(v5 + 20) + 8); v17 = 1; *(float *)(v5 + 48) = v11 * v14 + *(float *)(v5 + 48); } else { v16 = v16 - *(float *)(v8 + *(_DWORD *)(v5 + 20) + 8); } } else { LABEL_21: v16 = v16 - *(float *)(v10 + 8); } } if ( ++v6 >= *(_BYTE *)(v5 + 13) ) break; v4 = 0.0; } } v12 = v17 == 0; v18 = *(float *)(v5 + 48) / v16; *(float *)(v5 + 48) = v18; if ( v12 ) { result = 0; *(float *)a4 = -3.4028235e38; *(float *)(v5 + 48) = -3.4028235e38; } else { *(float *)a4 = v18; result = 1; } return result; } //----- (0082D850) -------------------------------------------------------- char __thiscall sub_82D850(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82D6B0(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82D720(v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082D8B0) -------------------------------------------------------- int __thiscall sub_82D8B0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8308A0(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 12, 4, &a2, 1); } //----- (0082D8F0) -------------------------------------------------------- int __thiscall sub_82D8F0(char *this, int a2) { int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_830D40(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 48, 4, &a2, 1); } //----- (0082D930) -------------------------------------------------------- unsigned int __thiscall sub_82D930(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4468); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fFloatValue", v3[12]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0082D9C0) -------------------------------------------------------- float *__thiscall sub_82D9C0(float *this, char a2, float a3, char a4) { float *v4; // esi v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendColorInterpolator::`vftable'; *((_DWORD *)v4 + 12) = dword_ABCEC8; *((_DWORD *)v4 + 13) = dword_ABCECC; *((_DWORD *)v4 + 14) = dword_ABCED0; *((_DWORD *)v4 + 15) = dword_ABCED4; *((_BYTE *)v4 + 64) = 0; return v4; } // A22E24: using guessed type void *NiBlendColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (0082DA10) -------------------------------------------------------- int __stdcall sub_82DA10(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 100))(); } //----- (0082DA30) -------------------------------------------------------- float *sub_82DA30() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x44u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendColorInterpolator::`vftable'; *((_DWORD *)v1 + 12) = dword_ABCEC8; *((_DWORD *)v1 + 13) = dword_ABCECC; *((_DWORD *)v1 + 14) = dword_ABCED0; *((_DWORD *)v1 + 15) = dword_ABCED4; *((_BYTE *)v1 + 64) = 0; return v1; } // A22E24: using guessed type void *NiBlendColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (0082DA80) -------------------------------------------------------- int __thiscall sub_82DA80(char *this, int a2) { char *v2; // esi v2 = this; sub_830D40(this, a2); return sub_8609B0(v2 + 48, a2); } //----- (0082DAA0) -------------------------------------------------------- char *sub_82DAA0() { return dword_BA4470; } //----- (0082DAB0) -------------------------------------------------------- int __thiscall sub_82DAB0(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x44u); v4 = (int)v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendColorInterpolator::`vftable'; *(_DWORD *)(v4 + 48) = dword_ABCEC8; *(_DWORD *)(v4 + 52) = dword_ABCECC; *(_DWORD *)(v4 + 56) = dword_ABCED0; *(_DWORD *)(v4 + 60) = dword_ABCED4; *(_BYTE *)(v4 + 64) = 0; } else { v4 = 0; } sub_830570(v2, v4, a2); *(float *)(v4 + 48) = v2[12]; *(float *)(v4 + 52) = v2[13]; *(float *)(v4 + 56) = v2[14]; *(float *)(v4 + 60) = v2[15]; *(_BYTE *)(v4 + 64) = *((_BYTE *)v2 + 64); return v4; } // A22E24: using guessed type void *NiBlendColorInterpolator::`vftable'; // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (0082DB30) -------------------------------------------------------- char __thiscall sub_82DB30(int this, float a2, int a3, int a4) { char result; // al _DWORD *v5; // esi if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) return 0; v5 = (_DWORD *)(this + 48); if ( (*(unsigned __int8 (__thiscall **)(_DWORD, _DWORD, int, int))(**(_DWORD **)(this + 24) + 64))( *(_DWORD *)(this + 24), LODWORD(a2), a3, this + 48) ) { *(_DWORD *)a4 = *v5; *(_DWORD *)(a4 + 4) = v5[1]; *(_DWORD *)(a4 + 8) = v5[2]; *(_DWORD *)(a4 + 12) = v5[3]; result = 1; } else { *(_DWORD *)a4 = dword_ABCEC8; *(_DWORD *)(a4 + 4) = dword_ABCECC; *(_DWORD *)(a4 + 8) = dword_ABCED0; *(_DWORD *)(a4 + 12) = dword_ABCED4; *v5 = *(_DWORD *)a4; v5[1] = *(_DWORD *)(a4 + 4); v5[2] = *(_DWORD *)(a4 + 8); v5[3] = *(_DWORD *)(a4 + 12); result = 0; } return result; } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (0082DBE0) -------------------------------------------------------- char __thiscall sub_82DBE0(int this, float a2, int a3, int a4) { int v4; // esi unsigned __int8 v5; // bl double v6; // st7 int v7; // edx int v8; // edi int v9; // ecx int v10; // edx char result; // al double v12; // st7 float v13; // [esp+18h] [ebp-28h] float v14; // [esp+1Ch] [ebp-24h] float v15; // [esp+20h] [ebp-20h] float v16; // [esp+24h] [ebp-1Ch] float v17; // [esp+28h] [ebp-18h] float v18; // [esp+2Ch] [ebp-14h] float v19; // [esp+30h] [ebp-10h] float v20; // [esp+34h] [ebp-Ch] float v21; // [esp+38h] [ebp-8h] float v22; // [esp+3Ch] [ebp-4h] v22 = 1.0; v4 = this; *(_BYTE *)(this + 64) = 0; *(_DWORD *)(this + 48) = dword_ABD508; *(_DWORD *)(this + 52) = dword_ABD50C; *(_DWORD *)(this + 56) = dword_ABD510; v5 = 0; *(_DWORD *)(this + 60) = dword_ABD514; if ( *(_BYTE *)(this + 13) ) { v6 = 0.0; do { v7 = *(_DWORD *)(v4 + 20); v8 = 24 * v5; v9 = *(_DWORD *)(v7 + v8); v10 = v8 + v7; if ( v9 && v6 < *(float *)(v10 + 8) ) { v13 = v6; v14 = v6; v15 = v6; v16 = v6; v21 = a2; if ( !v9 || v6 == *(float *)(v10 + 8) ) goto LABEL_21; if ( *(_BYTE *)(v4 + 12) & 1 ) v21 = *(float *)(v10 + 20); if ( -3.4028235e38 != v21 ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v9 + 64))(LODWORD(v21), a3, &v13) ) { v21 = *(float *)(*(_DWORD *)(v4 + 20) + v8 + 8); v17 = v13 * v21; v18 = v14 * v21; v19 = v15 * v21; v20 = v21 * v16; *(float *)(v4 + 48) = *(float *)(v4 + 48) + v17; *(float *)(v4 + 52) = *(float *)(v4 + 52) + v18; *(float *)(v4 + 56) = *(float *)(v4 + 56) + v19; *(float *)(v4 + 60) = *(float *)(v4 + 60) + v20; *(_BYTE *)(v4 + 64) = 1; } else { v22 = v22 - *(float *)(*(_DWORD *)(v4 + 20) + v8 + 8); } v6 = 0.0; } else { LABEL_21: v22 = v22 - *(float *)(v10 + 8); } } ++v5; } while ( v5 < *(_BYTE *)(v4 + 13) ); } if ( *(_BYTE *)(v4 + 64) ) { v12 = v22; *(float *)(v4 + 48) = *(float *)(v4 + 48) / v22; *(float *)(v4 + 52) = *(float *)(v4 + 52) / v12; *(float *)(v4 + 56) = *(float *)(v4 + 56) / v12; *(float *)(v4 + 60) = *(float *)(v4 + 60) / v12; *(_DWORD *)a4 = *(_DWORD *)(v4 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 56); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 60); result = 1; } else { *(_DWORD *)(v4 + 48) = dword_ABCEC8; *(_DWORD *)(v4 + 52) = dword_ABCECC; *(_DWORD *)(v4 + 56) = dword_ABCED0; *(_DWORD *)(v4 + 60) = dword_ABCED4; *(_DWORD *)a4 = *(_DWORD *)(v4 + 48); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v4 + 52); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v4 + 56); *(_DWORD *)(a4 + 12) = *(_DWORD *)(v4 + 60); result = 0; } return result; } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; //----- (0082DDE0) -------------------------------------------------------- char __thiscall sub_82DDE0(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82DB30(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82DBE0(v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082DE40) -------------------------------------------------------- void __thiscall sub_82DE40(int *this, signed int a2) { int *v2; // edi v2 = this; sub_8308A0(this, a2); sub_8752B0((char *)v2 + 48, a2); if ( *(float *)&dword_ABCEC8 != *((float *)v2 + 12) || *(float *)&dword_ABCECC != *((float *)v2 + 13) || *(float *)&dword_ABCED0 != *((float *)v2 + 14) || *(float *)&dword_ABCED4 != *((float *)v2 + 15) ) { *((_BYTE *)v2 + 64) = 1; } } // ABCEC8: using guessed type int dword_ABCEC8; // ABCECC: using guessed type int dword_ABCECC; // ABCED0: using guessed type int dword_ABCED0; // ABCED4: using guessed type int dword_ABCED4; //----- (0082DEB0) -------------------------------------------------------- char __thiscall sub_82DEB0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_82FD80(this, a2); if ( result ) result = (unsigned __int8)sub_883690(v2 + 12, (float *)(a2 + 48)) == 0; return result; } //----- (0082DEF0) -------------------------------------------------------- unsigned int __thiscall sub_82DEF0(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4470); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_860870(v3 + 12, (int)"m_kColorValue"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0082DF70) -------------------------------------------------------- float *__thiscall sub_82DF70(float *this, char a2, float a3, char a4) { float *v4; // esi v4 = this; sub_8302F0(this, a2, a3, a4); *(_DWORD *)v4 = &NiBlendBoolInterpolator::`vftable'; *((_BYTE *)v4 + 48) = 2; return v4; } // A22EC4: using guessed type void *NiBlendBoolInterpolator::`vftable'; //----- (0082DFB0) -------------------------------------------------------- int __stdcall sub_82DFB0(int a1) { return (*(int (**)(void))(*(_DWORD *)a1 + 84))(); } //----- (0082DFD0) -------------------------------------------------------- float *sub_82DFD0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_82F760(v0); *(_DWORD *)v1 = &NiBlendBoolInterpolator::`vftable'; *((_BYTE *)v1 + 48) = 2; return v1; } // A22EC4: using guessed type void *NiBlendBoolInterpolator::`vftable'; //----- (0082E000) -------------------------------------------------------- char __thiscall sub_82E000(_BYTE *this, int a2) { _BYTE *v2; // esi char result; // al v2 = this; result = sub_82FD80(this, a2); if ( result ) result = v2[48] == *(_BYTE *)(a2 + 48); return result; } //----- (0082E030) -------------------------------------------------------- char *sub_82E030() { return dword_BA4478; } //----- (0082E040) -------------------------------------------------------- int __thiscall sub_82E040(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_82F760(v3); *(_DWORD *)v4 = &NiBlendBoolInterpolator::`vftable'; *(_BYTE *)(v4 + 48) = 2; } else { v4 = 0; } sub_830570(v2, v4, a2); *(_BYTE *)(v4 + 48) = *((_BYTE *)v2 + 48); return v4; } // A22EC4: using guessed type void *NiBlendBoolInterpolator::`vftable'; //----- (0082E090) -------------------------------------------------------- char __thiscall sub_82E090(int this, float a2, int a3, int a4) { int v4; // esi char result; // al v4 = this; if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) return 0; if ( (*(unsigned __int8 (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(this + 24) + 80))(LODWORD(a2), a3, a4) ) { *(_BYTE *)(v4 + 48) = *(_BYTE *)a4; result = 1; } else { *(_BYTE *)a4 = 0; *(_BYTE *)(v4 + 48) = 2; result = 0; } return result; } //----- (0082E100) -------------------------------------------------------- char __thiscall sub_82E100(_BYTE *this, float a2, int a3, int a4) { double v4; // st7 _BYTE *v5; // edi unsigned __int8 v6; // bl int v7; // edx int v8; // esi int v9; // ecx int v10; // edx int v11; // eax char result; // al float v13; // [esp+18h] [ebp-10h] float v14; // [esp+1Ch] [ebp-Ch] float v15; // [esp+20h] [ebp-8h] unsigned __int8 v16; // [esp+26h] [ebp-2h] char v17; // [esp+27h] [ebp-1h] float v18; // [esp+30h] [ebp+8h] v4 = 0.0; v14 = 0.0; v5 = this; v6 = 0; v15 = 1.0; v17 = 0; if ( !this[13] ) goto LABEL_24; while ( 1 ) { v7 = *((_DWORD *)v5 + 5); v8 = 24 * v6; v9 = *(_DWORD *)(v7 + v8); v10 = v8 + v7; if ( v9 && v4 < *(float *)(v10 + 8) ) { v13 = a2; if ( !v9 || *(float *)(v10 + 8) == v4 ) goto LABEL_25; if ( v5[12] & 1 ) v13 = *(float *)(v10 + 20); if ( -3.4028235e38 != v13 ) { if ( (*(unsigned __int8 (__stdcall **)(float, int, unsigned __int8 *))(*(_DWORD *)v9 + 80))( COERCE_FLOAT(LODWORD(v13)), a3, &v16) ) { v11 = *((_DWORD *)v5 + 5); v17 = 1; v14 = *(float *)(v11 + v8 + 8) * (double)v16 + v14; } else { v15 = v15 - *(float *)(*((_DWORD *)v5 + 5) + v8 + 8); } } else { LABEL_25: v15 = v15 - *(float *)(v10 + 8); } } if ( ++v6 >= v5[13] ) break; v4 = 0.0; } if ( v17 ) { v18 = v14 / v15; if ( v18 >= 0.5 ) { v5[48] = 1; *(_BYTE *)a4 = 1; } else { v5[48] = 0; *(_BYTE *)a4 = 0; } result = 1; } else { LABEL_24: *(_BYTE *)a4 = 0; v5[48] = 2; result = 0; } return result; } //----- (0082E250) -------------------------------------------------------- char __thiscall sub_82E250(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82E090(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); result = sub_82E100((_BYTE *)v4, a2, a3, a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082E2B0) -------------------------------------------------------- int __thiscall sub_82E2B0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8308A0(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 1; return v4(v5, v3 + 12, 1, &a2, 1); } //----- (0082E2F0) -------------------------------------------------------- int __thiscall sub_82E2F0(char *this, int a2) { int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_830D40(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 1; return v4(v5, v3 + 48, 1, &a2, 1); } //----- (0082E330) -------------------------------------------------------- unsigned int __thiscall sub_82E330(_BYTE *this, char *a2) { char *v2; // esi _BYTE *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4478); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878570((int)"m_bBoolValue", v3[48]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0082E3B0) -------------------------------------------------------- LONG __thiscall sub_82E3B0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 v1 = this; v2 = (void *)this[20]; *this = &NiBlendAccumTransformInterpolator::`vftable'; operator delete(v2); return sub_82FE50(v1); } // A20A64: using guessed type void *NiBlendAccumTransformInterpolator::`vftable'; //----- (0082E3D0) -------------------------------------------------------- float *__thiscall sub_82E3D0(float *this) { float *v1; // esi v1 = this; sub_82F760(this); *(_DWORD *)v1 = &NiBlendAccumTransformInterpolator::`vftable'; *((_DWORD *)v1 + 12) = dword_ABCEB0; *((_DWORD *)v1 + 13) = dword_ABCEB4; *((_DWORD *)v1 + 14) = dword_ABCEB8; *((_DWORD *)v1 + 15) = dword_BA44A0; *((_DWORD *)v1 + 16) = dword_BA44A4; *((_DWORD *)v1 + 17) = dword_BA44A8; *((_DWORD *)v1 + 18) = dword_BA44AC; v1[19] = -3.4028235e38; v1[20] = 0.0; *((_BYTE *)v1 + 84) = 0; return v1; } // A20A64: using guessed type void *NiBlendAccumTransformInterpolator::`vftable'; // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0082E430) -------------------------------------------------------- unsigned __int8 __thiscall sub_82E430(_BYTE *this, int a2, float a3, char a4, float a5) { _BYTE *v5; // ebx unsigned __int8 result; // al char v7; // al float *v8; // esi char v9; // [esp+10h] [ebp-24h] unsigned __int8 v10; // [esp+33h] [ebp-1h] unsigned __int8 v11; // [esp+4Bh] [ebp+17h] v5 = this; v10 = this[15]; result = sub_82F830((int)this, a2, a3, a4, a5); v11 = result; if ( result != -1 ) { sub_80FE40((float *)(*((_DWORD *)v5 + 20) + 104 * result)); v7 = v5[14]; if ( v7 == 1 ) { v5[84] = 1; result = v11; } else { if ( v7 == 2 ) { if ( !(unsigned __int8)sub_819560((float *)v5 + 12) ) { v8 = (float *)(104 * v10 + *((_DWORD *)v5 + 20) + 4); if ( !(unsigned __int8)sub_819560(v8) ) qmemcpy(v5 + 48, (const void *)sub_831630((float *)v5 + 12, (int)&v9, v8), 0x20u); } sub_80FE40((float *)(*((_DWORD *)v5 + 20) + 104 * v10)); } result = v11; } } return result; } //----- (0082E4F0) -------------------------------------------------------- char __thiscall sub_82E4F0(int this, float *a2) { float *v2; // esi double v3; // st7 char v5; // [esp+4h] [ebp-24h] float v6; // [esp+24h] [ebp-4h] v2 = (float *)(this + 48); v6 = -3.4028235e38; v3 = v6; if ( v6 == *(float *)(this + 76) && v3 == *(float *)(this + 64) && *v2 == v3 ) return 0; if ( *(_BYTE *)(this + 14) == 1 ) v2 = (float *)sub_831630( (float *)(this + 48), (int)&v5, (float *)(104 * *(unsigned __int8 *)(this + 15) + *(_DWORD *)(this + 80) + 4)); qmemcpy(a2, v2, 0x20u); return 1; } //----- (0082E580) -------------------------------------------------------- void __thiscall sub_82E580(int this, float a2, int a3) { int v3; // edi int v4; // eax int v5; // ebx float *v6; // esi double v7; // st7 const void *v8; // eax void *v9; // edi float v10; // ST20_4 char v11; // [esp+38h] [ebp-94h] float v12[8]; // [esp+58h] [ebp-74h] float v13[8]; // [esp+78h] [ebp-54h] float v14[8]; // [esp+98h] [ebp-34h] float v15; // [esp+B8h] [ebp-14h] float v16; // [esp+BCh] [ebp-10h] void *v17; // [esp+C0h] [ebp-Ch] int v18; // [esp+C4h] [ebp-8h] float *v19; // [esp+C8h] [ebp-4h] v3 = this; v4 = *(unsigned __int8 *)(this + 15); v5 = *(_DWORD *)(*(_DWORD *)(this + 20) + 24 * v4); v6 = (float *)(*(_DWORD *)(this + 80) + 104 * v4); v18 = this; v19 = v6; v7 = a2; if ( a2 != *v6 ) { if ( *v6 > v7 ) { v17 = v6 + 9; if ( (unsigned __int8)sub_819560(v6 + 9) ) { (*(void (__thiscall **)(int, float *, float *))(*(_DWORD *)v5 + 112))(v5, &v15, &v16); sub_80FDF0(v14); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v5 + 60))(v5, LODWORD(v15), a3, v14); sub_80FDF0(v13); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v5 + 60))(v5, LODWORD(v16), a3, v13); sub_80FDF0(v12); sub_8314C0(v14, (int)v12); v8 = (const void *)sub_831630(v13, (int)&v11, v12); qmemcpy(v17, v8, 0x20u); v6 = v19; v3 = v18; } v9 = (void *)(v3 + 48); if ( !(unsigned __int8)sub_819560((float *)v9) ) { qmemcpy(v9, (const void *)sub_831630((float *)v9, (int)&v11, v6 + 9), 0x20u); v6 = v19; } v7 = a2; } v10 = v7; (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v5 + 60))(v5, LODWORD(v10), a3, v6 + 1); v7 = a2; } *v6 = v7; } //----- (0082E6E0) -------------------------------------------------------- int __thiscall sub_82E6E0(char *this, int a2) { char *v2; // esi unsigned __int8 v3; // bl int v4; // esi char *v6; // [esp+Ch] [ebp-4h] v2 = this; v6 = this; sub_830D40(this, a2); v3 = 0; if ( v2[13] ) { do { v4 = *((_DWORD *)v6 + 20) + 104 * v3; sub_831960((char *)(v4 + 4), a2); sub_831960((char *)(v4 + 36), a2); sub_85EAE0((float *)(v4 + 68), a2); ++v3; } while ( v3 < (unsigned __int8)v6[13] ); v2 = v6; } return sub_831960(v2 + 48, a2); } //----- (0082E750) -------------------------------------------------------- char __thiscall sub_82E750(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_82FD80(this, a2); if ( result ) result = (unsigned __int8)sub_8195B0(v2 + 12, (float *)(a2 + 48)) != 0; return result; } //----- (0082E790) -------------------------------------------------------- _DWORD *__thiscall sub_82E790(float *this, _DWORD *a2, unsigned __int8 a3) { float *v3; // ebx void *v4; // edi float *v5; // esi float *v6; // ecx char v8; // [esp+8h] [ebp-20h] v3 = this; if ( *((_BYTE *)this + 14) == 1 && a3 == *((_BYTE *)this + 15) ) { v4 = this + 12; if ( !(unsigned __int8)sub_819560(this + 12) ) { v5 = (float *)(104 * *((unsigned __int8 *)v3 + 15) + *((_DWORD *)v3 + 20) + 4); if ( !(unsigned __int8)sub_819560(v5) ) qmemcpy(v4, (const void *)sub_831630(v3 + 12, (int)&v8, v5), 0x20u); } } sub_82FED0(v3, a2, a3); if ( *((_BYTE *)v3 + 14) == 1 && *a2 ) { v6 = (float *)(*((_DWORD *)v3 + 20) + 104 * *((unsigned __int8 *)v3 + 15)); *((_BYTE *)v3 + 84) = 1; sub_80FE40(v6); } return a2; } //----- (0082E820) -------------------------------------------------------- char __thiscall sub_82E820(int this, float a2, int a3, int a4) { int v4; // ebx int v6; // eax int v7; // ecx int *v8; // esi float *v9; // ecx double v10; // st7 char v11; // [esp+14h] [ebp-40h] int v12; // [esp+34h] [ebp-20h] int v13; // [esp+38h] [ebp-1Ch] int v14; // [esp+3Ch] [ebp-18h] int v15; // [esp+40h] [ebp-14h] int v16; // [esp+44h] [ebp-10h] int v17; // [esp+48h] [ebp-Ch] int v18; // [esp+4Ch] [ebp-8h] float v19; // [esp+50h] [ebp-4h] float v20; // [esp+5Ch] [ebp+8h] v4 = this; if ( *(_BYTE *)(this + 12) & 1 ) a2 = *(float *)(this + 32); if ( -3.4028235e38 == a2 ) return 0; sub_82E580(this, a2, a3); if ( *(_BYTE *)(v4 + 84) || (unsigned __int8)sub_819560((float *)(v4 + 48)) ) { v19 = -3.4028235e38; v14 = dword_ABCEB8; v17 = dword_BA44A8; v6 = *(unsigned __int8 *)(v4 + 15); v12 = dword_ABCEB0; v15 = dword_BA44A0; v13 = dword_ABCEB4; v18 = dword_BA44AC; v7 = *(_DWORD *)(v4 + 80); v16 = dword_BA44A4; sub_8314C0((float *)(104 * v6 + v7 + 4), (int)&v12); if ( (unsigned __int8)sub_819560((float *)(v4 + 48)) ) v8 = &v12; else v8 = (int *)sub_831630((float *)(v4 + 48), (int)&v11, (float *)&v12); qmemcpy((void *)(v4 + 48), v8, 0x20u); *(_BYTE *)(v4 + 84) = 0; } v9 = (float *)(v4 + 48); v20 = -3.4028235e38; v10 = v20; if ( v20 == *(float *)(v4 + 76) && v10 == *(float *)(v4 + 64) && *v9 == v10 ) return 0; qmemcpy( (void *)a4, (const void *)sub_831630(v9, (int)&v11, (float *)(104 * *(unsigned __int8 *)(v4 + 15) + *(_DWORD *)(v4 + 80) + 4)), 0x20u); return 1; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (0082E980) -------------------------------------------------------- char __fastcall sub_82E980(float a1, int a2, int a3, int a4, float *a5) { int v5; // esi double v6; // st7 float *v7; // edi double v8; // st6 double v9; // st5 unsigned __int8 v10; // dl int v11; // ebx bool v12; // zf int v13; // ebx int v14; // ecx double v15; // rt0 double v16; // st6 double v17; // st7 const void *v18; // esi double v19; // st4 double v20; // st3 double v21; // st5 int *v22; // eax int *v23; // eax float v24; // edx double v25; // st5 double v26; // rt0 const void *v27; // eax float *v28; // edx double v29; // st7 char v31; // [esp+18h] [ebp-A8h] float v32; // [esp+28h] [ebp-98h] float v33; // [esp+2Ch] [ebp-94h] float v34; // [esp+30h] [ebp-90h] float v35; // [esp+34h] [ebp-8Ch] float v36; // [esp+38h] [ebp-88h] float v37; // [esp+3Ch] [ebp-84h] float v38; // [esp+40h] [ebp-80h] float v39; // [esp+44h] [ebp-7Ch] float v40; // [esp+48h] [ebp-78h] float v41; // [esp+4Ch] [ebp-74h] float v42; // [esp+50h] [ebp-70h] int v43; // [esp+54h] [ebp-6Ch] int v44; // [esp+58h] [ebp-68h] int v45; // [esp+5Ch] [ebp-64h] int v46; // [esp+60h] [ebp-60h] int v47; // [esp+64h] [ebp-5Ch] int v48; // [esp+68h] [ebp-58h] int v49; // [esp+6Ch] [ebp-54h] float v50; // [esp+70h] [ebp-50h] float v51; // [esp+74h] [ebp-4Ch] float v52; // [esp+78h] [ebp-48h] int v53; // [esp+7Ch] [ebp-44h] float v54; // [esp+80h] [ebp-40h] float v55; // [esp+84h] [ebp-3Ch] float v56; // [esp+88h] [ebp-38h] int v57; // [esp+8Ch] [ebp-34h] int v58; // [esp+90h] [ebp-30h] int v59; // [esp+94h] [ebp-2Ch] int v60; // [esp+98h] [ebp-28h] float *v61; // [esp+9Ch] [ebp-24h] float v62; // [esp+A0h] [ebp-20h] int v63; // [esp+A4h] [ebp-1Ch] int v64; // [esp+A8h] [ebp-18h] int v65; // [esp+ACh] [ebp-14h] float v66; // [esp+B0h] [ebp-10h] float v67; // [esp+B4h] [ebp-Ch] char v68; // [esp+BAh] [ebp-6h] char v69; // [esp+BBh] [ebp-5h] unsigned __int8 v70; // [esp+BCh] [ebp-4h] char v71; // [esp+BDh] [ebp-3h] char v72; // [esp+BEh] [ebp-2h] char v73; // [esp+BFh] [ebp-1h] v52 = 1.0; v66 = 1.0; v5 = LODWORD(a1); v64 = dword_BA45C4; v62 = a1; v63 = dword_BA45C0; v65 = dword_BA45C8; sub_874B00((float *)&v57, 0.0, 0.0, 0.0, 0.0); v6 = 0.0; v51 = 0.0; v7 = (float *)(v5 + 48); v8 = 3.4028235e38; v69 = 0; v73 = 0; v72 = 0; v67 = -3.4028235e38; v61 = (float *)(v5 + 48); v9 = v67; if ( v67 != *(float *)(v5 + 76) || v9 != *(float *)(v5 + 64) || *v7 != v9 ) { v68 = 0; } else { *(_DWORD *)v7 = dword_BA45C0; *(_DWORD *)(v5 + 52) = dword_BA45C4; *(_DWORD *)(v5 + 56) = dword_BA45C8; *(_DWORD *)(v5 + 60) = dword_ABEC34; *(_DWORD *)(v5 + 64) = dword_ABEC38; *(_DWORD *)(v5 + 68) = dword_ABEC3C; *(_DWORD *)(v5 + 72) = dword_ABEC40; *(float *)(v5 + 76) = 1.0; v8 = 3.4028235e38; v68 = 1; } v10 = 0; v71 = 1; v70 = 0; if ( !*(_BYTE *)(v5 + 13) ) return 0; do { v11 = *(_DWORD *)(v5 + 20); v12 = *(_DWORD *)(v11 + 24 * v10) == 0; v13 = v11 + 24 * v10; v14 = *(_DWORD *)(v5 + 80) + 104 * v10; if ( !v12 ) { v15 = v8; v16 = v6; v17 = v15; if ( v16 < *(float *)(v13 + 8) ) { v18 = (const void *)(v14 + 4); if ( !v68 ) v18 = (const void *)(v14 + 36); qmemcpy(&v32, v18, 0x20u); v67 = -v17; v19 = v67; if ( v67 == v32 ) { v21 = v67; v52 = v52 - *(float *)(v13 + 8); } else { v20 = *(float *)(v13 + 8); v69 = 1; v67 = v20; v40 = v32 * v67; v41 = v33 * v67; v21 = v19; v42 = v67 * v34; *(float *)&v63 = v40 + *(float *)&v63; *(float *)&v64 = *(float *)&v64 + v41; *(float *)&v65 = *(float *)&v65 + v42; } if ( v36 != v21 ) { *(float *)&v53 = v35; v54 = v36; v55 = v37; v56 = v38; if ( v71 ) { v71 = 0; } else { v67 = v36 * *(float *)&v58 + v35 * *(float *)&v57 + v37 * *(float *)&v59 + v38 * *(float *)&v60; if ( v16 > v67 ) { v22 = (int *)sub_874B80((float *)&v53, (float *)&v31); v53 = *v22; v54 = *((float *)v22 + 1); v55 = *((float *)v22 + 2); v56 = *((float *)v22 + 3); } } v23 = (int *)sub_8780F0((float *)&v53, (int)&v47, *(float *)(v13 + 8)); v53 = *v23; v54 = *((float *)v23 + 1); v55 = *((float *)v23 + 2); v24 = *((float *)v23 + 3); *(float *)&v57 = *(float *)&v53 + *(float *)&v57; v56 = v24; v10 = v70; v73 = 1; *(float *)&v58 = *(float *)&v58 + v54; *(float *)&v59 = *(float *)&v59 + v55; *(float *)&v60 = *(float *)&v60 + v56; v17 = 3.4028235e38; v16 = 0.0; } v5 = LODWORD(v62); v7 = v61; if ( -v17 == v39 ) { v66 = v66 - *(float *)(v13 + 8); } else { v25 = v39 * *(float *)(v13 + 8); v72 = 1; v51 = v25 + v51; } } v26 = v16; v8 = v17; v6 = v26; } v70 = ++v10; } while ( v10 < *(_BYTE *)(v5 + 13) ); if ( !v69 && !v73 && v72 == v69 ) return 0; v43 = dword_ABCEB0; v44 = dword_ABCEB4; v45 = dword_ABCEB8; v46 = dword_BA44A0; v47 = dword_BA44A4; v48 = dword_BA44A8; v49 = dword_BA44AC; v62 = 1.0 / v52; v66 = 1.0 / v66; v50 = -3.4028235e38; if ( v69 ) { *(float *)&v63 = *(float *)&v63 * v62; v43 = v63; *(float *)&v64 = *(float *)&v64 * v62; v44 = v64; *(float *)&v65 = v62 * *(float *)&v65; v45 = v65; } if ( v73 ) { sub_875190((float *)&v57); v7 = v61; v46 = v57; v47 = v58; v48 = v59; v49 = v60; } if ( v72 ) v50 = v66 * v51; v27 = (const void *)sub_831810(v7, (int)&v32, (float *)&v43); v28 = v61; qmemcpy(v61, v27, 0x20u); v67 = -3.4028235e38; v29 = v67; if ( v67 == v28[7] && v29 == v28[4] && *v28 == v29 ) return 0; qmemcpy(a5, v28, 0x20u); return 1; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // ABEC34: using guessed type int dword_ABEC34; // ABEC38: using guessed type int dword_ABEC38; // ABEC3C: using guessed type int dword_ABEC3C; // ABEC40: using guessed type int dword_ABEC40; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0082EE00) -------------------------------------------------------- char __thiscall sub_82EE00(_BYTE *this) { _BYTE *v1; // ebx char result; // al int v3; // edi _DWORD *v4; // eax int v5; // edi _DWORD *v6; // esi int v7; // eax int v8; // edx const void *v9; // esi _DWORD *v10; // edi _DWORD *v11; // [esp+4h] [ebp-8h] _DWORD *v12; // [esp+4h] [ebp-8h] char v13; // [esp+Ah] [ebp-2h] unsigned __int8 v14; // [esp+Bh] [ebp-1h] v1 = this; v14 = this[13]; result = sub_8303D0(this); v13 = result; if ( result ) { v3 = (unsigned __int8)v1[13]; v4 = operator new(104 * v3); v11 = v4; if ( v4 ) { v5 = v3 - 1; v6 = v4; if ( v5 >= 0 ) { do { sub_810060(v6); v6 += 26; --v5; } while ( v5 >= 0 ); v4 = v11; } v12 = v4; } else { v12 = 0; } if ( v14 ) { v7 = 0; v8 = v14; do { v9 = (const void *)(v7 * 4 + *((_DWORD *)v1 + 20)); v10 = &v12[v7]; v7 += 26; --v8; qmemcpy(v10, v9, 0x68u); } while ( v8 ); } operator delete(*((void **)v1 + 20)); *((_DWORD *)v1 + 20) = v12; result = v13; } return result; } //----- (0082EEB0) -------------------------------------------------------- void __thiscall sub_82EEB0(int this, float a2, float a3, int a4) { double v4; // st7 int v5; // edi int v6; // esi int v7; // ebx float v8; // ST2C_4 double v9; // st7 double v10; // st6 int *v11; // eax float *v12; // eax double v13; // st7 int v14; // ecx int *v15; // eax float *v16; // eax float *v17; // eax float v18[3]; // [esp+44h] [ebp-DCh] char v19; // [esp+50h] [ebp-D0h] float v20; // [esp+54h] [ebp-CCh] float v21[8]; // [esp+64h] [ebp-BCh] float v22[8]; // [esp+84h] [ebp-9Ch] char v23; // [esp+A4h] [ebp-7Ch] float v24[8]; // [esp+B4h] [ebp-6Ch] float v25; // [esp+D4h] [ebp-4Ch] int v26; // [esp+D8h] [ebp-48h] char v27; // [esp+DCh] [ebp-44h] int v28; // [esp+ECh] [ebp-34h] int v29; // [esp+F0h] [ebp-30h] int v30; // [esp+F4h] [ebp-2Ch] int v31; // [esp+F8h] [ebp-28h] float v32; // [esp+FCh] [ebp-24h] int v33; // [esp+100h] [ebp-20h] int v34; // [esp+104h] [ebp-1Ch] int v35; // [esp+108h] [ebp-18h] int v36; // [esp+10Ch] [ebp-14h] int v37; // [esp+110h] [ebp-10h] int v38; // [esp+114h] [ebp-Ch] int v39; // [esp+118h] [ebp-8h] int v40; // [esp+11Ch] [ebp-4h] float v41; // [esp+128h] [ebp+8h] float v42; // [esp+128h] [ebp+8h] v4 = a3; v5 = this; v6 = *(_DWORD *)(*(_DWORD *)(this + 20) + 24 * LOBYTE(a2)); v7 = *(_DWORD *)(this + 80) + 104 * LOBYTE(a2); v26 = this; if ( !v6 || v4 == *(float *)v7 ) { *(_DWORD *)(v7 + 36) = dword_BA45C0; *(_DWORD *)(v7 + 40) = dword_BA45C4; *(_DWORD *)(v7 + 44) = dword_BA45C8; *(_DWORD *)(v7 + 48) = dword_ABEC34; *(_DWORD *)(v7 + 52) = dword_ABEC38; *(_DWORD *)(v7 + 56) = dword_ABEC3C; *(_DWORD *)(v7 + 60) = dword_ABEC40; *(float *)(v7 + 64) = 1.0; *(float *)v7 = a3; return; } if ( *(_BYTE *)(this + 84) ) goto LABEL_6; if ( (unsigned __int8)sub_819560((float *)(v7 + 4)) ) { v4 = a3; LABEL_6: *(_BYTE *)(v5 + 84) = 0; v8 = v4; (*(void (__thiscall **)(int, _DWORD, int, int))(*(_DWORD *)v6 + 60))(v6, LODWORD(v8), a4, v7 + 4); v41 = -3.4028235e38; v9 = *(float *)(v5 + 64); v39 = dword_ABEC3C; v40 = dword_ABEC40; v37 = dword_ABEC34; v38 = dword_ABEC38; if ( v41 != v9 ) { v37 = *(_DWORD *)(v5 + 60); v38 = *(_DWORD *)(v5 + 64); v39 = *(_DWORD *)(v5 + 68); v40 = *(_DWORD *)(v5 + 72); } v10 = *(float *)(v7 + 20); v28 = dword_ABEC34; v29 = dword_ABEC38; v30 = dword_ABEC3C; v31 = dword_ABEC40; if ( v10 != v41 ) { v11 = (int *)sub_874C40((float *)&v23, (float *)(v7 + 16)); v28 = *v11; v29 = v11[1]; v30 = v11[2]; v31 = v11[3]; } sub_874BB0((float *)&v37, (float *)&v33, (float *)&v28); sub_694FD0((float *)&v33, (float *)(v7 + 68)); } if ( *(float *)v7 <= (double)a3 ) { sub_80FDF0(v24); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v6 + 60))(v6, LODWORD(a3), a4, v24); sub_80FDF0(v22); sub_8313E0((float *)(v7 + 4), v22); qmemcpy((void *)(v7 + 36), (const void *)sub_831810(v22, (int)v21, v24), 0x20u); if ( -3.4028235e38 != *(float *)(v7 + 36) ) { v17 = sub_85DA90((float *)(v7 + 68), (float *)&v29, (float *)(v7 + 36)); *(float *)(v7 + 36) = *v17; *(float *)(v7 + 40) = v17[1]; *(float *)(v7 + 44) = v17[2]; } } else { (*(void (__thiscall **)(int, float *, float *))(*(_DWORD *)v6 + 112))(v6, &v32, &v25); sub_80FDF0(v22); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v6 + 60))(v6, LODWORD(v25), a4, v22); sub_80FDF0(v18); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v6 + 60))(v6, LODWORD(v32), a4, v18); sub_80FDF0(v24); (*(void (__thiscall **)(int, _DWORD, int, float *))(*(_DWORD *)v6 + 60))(v6, LODWORD(a3), a4, v24); sub_80FDF0(v21); sub_8313E0((float *)(v7 + 4), v21); qmemcpy((void *)(v7 + 36), (const void *)sub_831810(v21, (int)&v27, v22), 0x20u); if ( -3.4028235e38 != *(float *)(v7 + 36) ) { v12 = sub_85DA90((float *)(v7 + 68), (float *)&v29, (float *)(v7 + 36)); *(float *)(v7 + 36) = *v12; *(float *)(v7 + 40) = v12[1]; *(float *)(v7 + 44) = v12[2]; } v42 = -3.4028235e38; v36 = dword_ABEC40; v13 = *(float *)(v26 + 64); v33 = dword_ABEC34; v34 = dword_ABEC38; v35 = dword_ABEC3C; if ( v42 != v13 ) { v33 = *(_DWORD *)(v26 + 60); v34 = *(_DWORD *)(v26 + 64); v14 = *(_DWORD *)(v26 + 72); v35 = *(_DWORD *)(v26 + 68); v36 = v14; } v37 = dword_ABEC34; v38 = dword_ABEC38; v39 = dword_ABEC3C; v40 = dword_ABEC40; if ( v20 != v42 ) { v15 = (int *)sub_874C40((float *)&v28, (float *)&v19); v37 = *v15; v38 = v15[1]; v39 = v15[2]; v40 = v15[3]; } sub_874BB0((float *)&v33, (float *)&v23, (float *)&v37); sub_694FD0((float *)&v23, (float *)(v7 + 68)); sub_8313E0(v18, v21); qmemcpy((void *)(v7 + 4), (const void *)sub_831810(v21, (int)&v27, v24), 0x20u); if ( -3.4028235e38 != *(float *)(v7 + 4) ) { v16 = sub_85DA90((float *)(v7 + 68), (float *)&v29, (float *)(v7 + 4)); *(float *)(v7 + 4) = *v16; *(float *)(v7 + 8) = v16[1]; *(float *)(v7 + 12) = v16[2]; } qmemcpy((void *)(v7 + 36), (const void *)sub_831810((float *)(v7 + 36), (int)&v27, (float *)(v7 + 4)), 0x20u); } *(float *)v7 = a3; qmemcpy((void *)(v7 + 4), v24, 0x20u); } // ABEC34: using guessed type int dword_ABEC34; // ABEC38: using guessed type int dword_ABEC38; // ABEC3C: using guessed type int dword_ABEC3C; // ABEC40: using guessed type int dword_ABEC40; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0082F320) -------------------------------------------------------- int __thiscall sub_82F320(float *this, int a2, _DWORD **a3) { float *v3; // ebx int v4; // edi int result; // eax int v6; // edi _DWORD *v7; // esi unsigned __int8 v8; // dl int v9; // [esp+18h] [ebp+Ch] v3 = this; sub_830570(this, a2, a3); v4 = *((unsigned __int8 *)v3 + 13); result = (int)operator new(104 * v4); v9 = result; if ( result ) { v6 = v4 - 1; v7 = (_DWORD *)result; if ( v6 >= 0 ) { do { sub_810060(v7); v7 += 26; --v6; } while ( v6 >= 0 ); result = v9; } } else { result = 0; } v8 = 0; *(_DWORD *)(a2 + 80) = result; if ( *((_BYTE *)v3 + 13) ) { do { result = 104 * v8++; qmemcpy((void *)(result + *(_DWORD *)(a2 + 80)), (const void *)(result + *((_DWORD *)v3 + 20)), 0x68u); } while ( v8 < *((_BYTE *)v3 + 13) ); } qmemcpy((void *)(a2 + 48), v3 + 12, 0x20u); return result; } //----- (0082F3C0) -------------------------------------------------------- int __thiscall sub_82F3C0(int *this, signed int a2) { int *v2; // edi int v3; // ebx _DWORD *v4; // eax int v5; // ebx _DWORD *v6; // esi unsigned __int8 v7; // bl char *v8; // esi _DWORD *v10; // [esp+Ch] [ebp-4h] v2 = this; sub_8308A0(this, a2); v3 = *((unsigned __int8 *)v2 + 13); v4 = operator new(104 * v3); v10 = v4; if ( v4 ) { v5 = v3 - 1; v6 = v4; if ( v5 >= 0 ) { do { sub_810060(v6); v6 += 26; --v5; } while ( v5 >= 0 ); v4 = v10; } } else { v4 = 0; } v7 = 0; v2[20] = (int)v4; if ( *((_BYTE *)v2 + 13) ) { do { v8 = (char *)(v2[20] + 104 * v7); sub_8319B0(v8 + 4, a2); sub_8319B0(v8 + 36, a2); sub_85EA80(v8 + 68, a2); ++v7; } while ( v7 < *((_BYTE *)v2 + 13) ); } return sub_8319B0((char *)v2 + 48, a2); } //----- (0082F470) -------------------------------------------------------- char __thiscall sub_82F470(_BYTE *this, float a2, int a3, int a4) { int v4; // esi char v5; // cl char result; // al int v7; // edi unsigned __int8 v8; // bl int v9; // ecx float v10; // [esp+18h] [ebp-4h] int v11; // [esp+28h] [ebp+Ch] v4 = (int)this; v5 = this[14]; result = 0; if ( v5 == 1 ) { result = sub_82E820(v4, a2, a3, a4); *(float *)(v4 + 8) = a2; } else { if ( v5 ) { sub_830040(v4); v7 = a3; v8 = 0; LOBYTE(v10) = 0; if ( *(_BYTE *)(v4 + 13) ) { do { *(float *)&v11 = a2; v9 = *(_DWORD *)(v4 + 20) + 24 * v8; if ( *(_DWORD *)v9 && 0.0 != *(float *)(v9 + 8) ) { if ( *(_BYTE *)(v4 + 12) & 1 ) v11 = *(int *)(v9 + 20); if ( -3.4028235e38 != *(float *)&v11 ) sub_82EEB0(v4, v10, *(float *)&v11, v7); } LOBYTE(v10) = ++v8; } while ( v8 < *(_BYTE *)(v4 + 13) ); } result = sub_82E980(a2, v4, a4, v7, (float *)a4); } *(float *)(v4 + 8) = a2; } return result; } //----- (0082F550) -------------------------------------------------------- float *__thiscall sub_82F550(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x58u); if ( v3 ) { v4 = sub_82E3D0(v3); sub_82F320(v2, (int)v4, a2); result = v4; } else { sub_82F320(v2, 0, a2); result = 0; } return result; } //----- (0082F5A0) -------------------------------------------------------- unsigned int __thiscall sub_82F5A0(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi v2 = a2; v3 = this; sub_830ED0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4480); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); return sub_831AA0(v3 + 12, v2); } //----- (0082F600) -------------------------------------------------------- char __thiscall sub_82F600(void *this, int a2, _DWORD **a3) { return sub_86C130(this, a2, a3); } //----- (0082F610) -------------------------------------------------------- float *__thiscall sub_82F610(float *this) { float *v1; // esi v1 = this; sub_86C310(this); *((_WORD *)v1 + 4) &= 0xFFDFu; *(_DWORD *)v1 = &NiInterpController::`vftable'; return v1; } // A22F6C: using guessed type void *NiInterpController::`vftable'; //----- (0082F630) -------------------------------------------------------- char *sub_82F630() { return dword_BA4488; } //----- (0082F640) -------------------------------------------------------- char __thiscall sub_82F640(int this) { char result; // al result = *(_BYTE *)(this + 8) >> 5; if ( !(result & 1) ) { *(float *)(this + 20) = 0.0; *(float *)(this + 24) = 0.0; } return result; } //----- (0082F660) -------------------------------------------------------- unsigned int __thiscall sub_82F660(int *this, signed int a2) { signed int v2; // esi int *v3; // edi unsigned int result; // eax int v5; // eax int v6; // ST00_4 int (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_86C630(this, a2); result = *(_DWORD *)(v2 + 28); if ( result >= 0xA010068 && result < 0xA01006D ) { v5 = *(_DWORD *)(v2 + 352); v6 = v5; v7 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v5 + 4); v8 = 1; result = v7(v6, (char *)&a2 + 3, 1, &v8, 1); if ( HIBYTE(a2) ) *((_WORD *)v3 + 4) |= 0x20u; else *((_WORD *)v3 + 4) &= 0xFFDFu; } return result; } //----- (0082F6D0) -------------------------------------------------------- unsigned int __thiscall sub_82F6D0(unsigned __int16 *this, char a2) { _DWORD *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_86C860(this, a2); v4 = sub_8784D0(*(int *)dword_BA4488); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = (*((_BYTE *)v3 + 8) >> 5) & 1; v6 = sub_878510((int)"IsManagerControlled", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0082F760) -------------------------------------------------------- float *__thiscall sub_82F760(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_831B80(this); v1[7] = 0.0; v1[5] = 0.0; v1[8] = -3.4028235e38; v1[6] = 0.0; *(_DWORD *)v1 = &NiBlendInterpolator::`vftable'; v1[3] = -1.7014118e38; *((_WORD *)v1 + 8) = -32640; result = v1; v1[9] = -3.4028235e38; v1[10] = -3.4028235e38; v1[11] = -3.4028235e38; return result; } // A23034: using guessed type void *NiBlendInterpolator::`vftable'; //----- (0082F7C0) -------------------------------------------------------- char __thiscall sub_82F7C0(int this) { char result; // al unsigned __int8 v2; // bl unsigned __int8 v3; // dl float *v4; // ecx float v5; // [esp+0h] [ebp-8h] char v6; // [esp+7h] [ebp-1h] if ( *(_BYTE *)(this + 14) == 1 ) return *(_BYTE *)(this + 15); v2 = *(_BYTE *)(this + 13); v5 = 0.0; v3 = 0; v6 = -1; if ( !v2 ) return -1; v4 = (float *)(*(_DWORD *)(this + 20) + 8); do { if ( v5 < (double)*v4 ) { v6 = v3; v5 = *v4; } ++v3; v4 += 6; } while ( v3 < v2 ); result = v6; if ( v6 == -1 ) return -1; return result; } //----- (0082F820) -------------------------------------------------------- char *sub_82F820() { return dword_BA4490; } //----- (0082F830) -------------------------------------------------------- char __thiscall sub_82F830(int this, int a2, float a3, char a4, float a5) { int v5; // esi char v6; // dl unsigned __int8 v7; // bl int v8; // ecx char result; // al int v10; // eax int v11; // edx int v12; // edi char v13; // al int v14; // [esp+8h] [ebp-4h] v5 = this; v6 = *(_BYTE *)(this + 13); v7 = 0; if ( v6 ) { v8 = *(_DWORD *)(this + 20); do { if ( !*(_DWORD *)(v8 + 24 * v7) ) break; ++v7; } while ( v7 < *(_BYTE *)(v5 + 13) ); } if ( v7 == v6 && !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 148))(v5) ) return -1; v10 = *(_DWORD *)(v5 + 20) + 24 * v7; v11 = a2; v12 = *(_DWORD *)v10; v14 = *(_DWORD *)(v5 + 20) + 24 * v7; if ( *(_DWORD *)v10 != a2 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v11 = a2; v10 = v14; } *(_DWORD *)v10 = v11; if ( v11 ) { InterlockedIncrement((volatile LONG *)(v11 + 4)); v10 = v14; v11 = a2; } } *(float *)(v10 + 4) = a3; *(_BYTE *)(v10 + 12) = a4; *(float *)(v10 + 16) = a5; if ( a4 > *(_BYTE *)(v5 + 17) ) { v13 = *(_BYTE *)(v5 + 16); if ( a4 <= v13 ) { if ( a4 != v13 ) *(_BYTE *)(v5 + 17) = a4; } else { *(_BYTE *)(v5 + 17) = v13; *(_BYTE *)(v5 + 16) = a4; } } if ( ++*(_BYTE *)(v5 + 14) == 1 ) { *(_BYTE *)(v5 + 15) = v7; *(_DWORD *)(v5 + 24) = v11; } else { *(_BYTE *)(v5 + 15) = -1; *(float *)(v5 + 32) = -3.4028235e38; *(_DWORD *)(v5 + 24) = 0; } result = v7; *(float *)(v5 + 36) = -3.4028235e38; *(float *)(v5 + 40) = -3.4028235e38; *(_BYTE *)(v5 + 12) |= 4u; *(float *)(v5 + 44) = -3.4028235e38; return result; } //----- (0082F950) -------------------------------------------------------- void __thiscall sub_82F950(_BYTE *this) { _BYTE *v1; // edi unsigned __int8 v2; // cl int v3; // edx int v4; // esi unsigned __int8 v5; // bl int v6; // edi float v7; // ST10_4 float v8; // ST0C_4 double v9; // st7 double v10; // st6 double v11; // st5 char v12; // al char v13; // bl double v14; // st7 float v15; // ST0C_4 double v16; // st7 double v17; // st5 float v18; // ST0C_4 double v19; // st5 float v20; // ST0C_4 double v21; // st7 float v22; // ST0C_4 float v23; // ST0C_4 double v24; // st6 double v25; // st7 char v26; // cl _BYTE *v27; // [esp+10h] [ebp-4h] v1 = this; v2 = this[13]; v3 = 0; v4 = 0; v5 = 0; v27 = v1; if ( !v2 ) goto LABEL_10; v6 = *((_DWORD *)v1 + 5); while ( !*(_DWORD *)(v6 + 24 * v5) ) { LABEL_6: if ( ++v5 >= v2 ) goto LABEL_9; } if ( !v3 ) { v3 = v6 + 24 * v5; goto LABEL_6; } v4 = v6 + 24 * v5; LABEL_9: v1 = v27; LABEL_10: v7 = *(float *)(v3 + 4) * *(float *)(v3 + 16); v8 = *(float *)(v4 + 4) * *(float *)(v4 + 16); v9 = v7; v10 = 0.0; v11 = v8; if ( 0.0 == v7 && 0.0 == v11 ) { *(float *)(v3 + 8) = 0.0; *(float *)(v4 + 8) = 0.0; return; } v12 = *(_BYTE *)(v3 + 12); v13 = *(_BYTE *)(v4 + 12); if ( v12 <= v13 ) { if ( v12 >= v13 ) { v23 = 1.0 / (v11 + v9); *(float *)(v3 + 8) = v9 * v23; v14 = 1.0; v19 = v11 * v23; goto LABEL_23; } if ( 1.0 != *(float *)(v4 + 16) ) { v20 = 1.0 - *(float *)(v4 + 16); v21 = v9 * v20; v22 = 1.0 / (*(float *)(v4 + 16) * v11 + v21); *(float *)(v3 + 8) = v21 * v22; v19 = v22 * (v11 * *(float *)(v4 + 16)); v14 = 1.0; goto LABEL_23; } *(float *)(v3 + 8) = 0.0; *(float *)(v4 + 8) = 1.0; } else { if ( 1.0 == *(float *)(v3 + 16) ) { v10 = 1.0; v14 = 0.0; goto LABEL_16; } v15 = 1.0 - *(float *)(v3 + 16); v16 = v9 * *(float *)(v3 + 16); v17 = v11 * v15; v18 = 1.0 / (v17 + v16); *(float *)(v3 + 8) = v16 * v18; v14 = 1.0; v19 = v17 * v18; LABEL_23: *(float *)(v4 + 8) = v19; if ( v1[12] & 2 ) { if ( *(float *)(v4 + 8) > (double)*(float *)(v3 + 8) ) { LABEL_16: *(float *)(v3 + 8) = v10; *(float *)(v4 + 8) = v14; } else { v24 = v14; v25 = 0.0; *(float *)(v3 + 8) = v24; *(float *)(v4 + 8) = *(float *)&v25; } } else if ( *((float *)v1 + 7) > 0.0 ) { v26 = 0; if ( *((float *)v1 + 7) > (double)*(float *)(v3 + 8) ) { *(float *)(v3 + 8) = 0.0; v26 = 1; } if ( *((float *)v1 + 7) <= (double)*(float *)(v4 + 8) ) { if ( v26 ) *(float *)(v4 + 8) = v14; } else { *(float *)(v4 + 8) = 0.0; *(float *)(v4 + 8) = v14; } } } } //----- (0082FB40) -------------------------------------------------------- int __usercall sub_82FB40@(int result@, int a2@) { int v2; // esi unsigned __int8 v3; // bl v2 = a2; if ( *(_BYTE *)(a2 + 14) == 1 ) return (*(int (**)(void))(**(_DWORD **)(a2 + 24) + 108))(); v3 = 0; if ( *(_BYTE *)(a2 + 13) ) { do { result = *(_DWORD *)(v2 + 20) + 24 * v3; if ( *(_DWORD *)result ) result = (*(int (**)(void))(**(_DWORD **)result + 108))(); ++v3; } while ( v3 < *(_BYTE *)(v2 + 13) ); } return result; } //----- (0082FB90) -------------------------------------------------------- int __userpurge sub_82FB90@(int result@, int a2@, float a3, float a4) { int v4; // esi unsigned __int8 v5; // bl v4 = a2; if ( *(_BYTE *)(a2 + 14) == 1 ) return (*(int (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(a2 + 24) + 116))(LODWORD(a3), LODWORD(a4)); v5 = 0; if ( *(_BYTE *)(a2 + 13) ) { do { result = *(_DWORD *)(v4 + 20) + 24 * v5; if ( *(_DWORD *)result ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)result + 116))(LODWORD(a3), LODWORD(a4)); ++v5; } while ( v5 < *(_BYTE *)(v4 + 13) ); } return result; } //----- (0082FC00) -------------------------------------------------------- int __thiscall sub_82FC00(void *this, _DWORD **a2) { _DWORD **v2; // esi int v3; // ebx unsigned __int8 v4; // dl int v5; // ecx int result; // eax _DWORD *v7; // esi _DWORD *v8; // edi int v9; // [esp+8h] [ebp-4h] int v10; // [esp+14h] [ebp+8h] char v11; // [esp+17h] [ebp+Bh] v2 = a2; v3 = (int)this; sub_85BAE0(this, (int)a2); sub_8C4C90(*a2, v3, &v9); v4 = 0; v11 = 0; if ( *(_BYTE *)(v3 + 13) ) { do { v5 = *(_DWORD *)(*(_DWORD *)(v3 + 20) + 24 * v4); if ( v5 ) { (*(void (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 40))(v2); v4 = v11; } v11 = ++v4; } while ( v4 < *(_BYTE *)(v3 + 13) ); } result = *(_DWORD *)(v3 + 24); v10 = result; if ( result ) { v7 = *v2; v8 = *(_DWORD **)(v7[2] + 4 * (*(int (__thiscall **)(_DWORD *, int))(*v7 + 4))(v7, result)); if ( v8 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v7 + 8))(v7, v10, v8[1]) ) { v8 = (_DWORD *)*v8; if ( !v8 ) goto LABEL_9; } result = v9; *(_DWORD *)(v9 + 24) = v8[2]; } else { LABEL_9: result = v9; *(_DWORD *)(v9 + 24) = *(_DWORD *)(v3 + 24); } } return result; } //----- (0082FCB0) -------------------------------------------------------- char __thiscall sub_82FCB0(float *this, float *a2) { int v2; // eax float *v3; // edi int v4; // ecx v2 = *(_DWORD *)a2; v3 = this; v4 = *(_DWORD *)this; if ( v4 ) { if ( !v2 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v4 + 28))(*(_DWORD *)a2) ) return 0; } else if ( v2 ) { return 0; } if ( a2[1] != v3[1] || a2[2] != v3[2] || *((_BYTE *)v3 + 12) != *((_BYTE *)a2 + 12) || a2[4] != v3[4] ) return 0; return 1; } //----- (0082FD20) -------------------------------------------------------- char __thiscall sub_82FD20(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al unsigned __int8 v4; // bl int v5; // ecx v2 = this; result = sub_81C190(this, a2); if ( result ) { if ( !(v2[3] & 1) ) { v4 = 0; if ( *((_BYTE *)v2 + 13) ) { do { v5 = *(_DWORD *)(v2[5] + 24 * v4); if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); ++v4; } while ( v4 < *((_BYTE *)v2 + 13) ); } } result = 1; } return result; } //----- (0082FD80) -------------------------------------------------------- char __thiscall sub_82FD80(_BYTE *this, int a2) { _BYTE *v2; // esi char v4; // al unsigned __int8 v5; // bl v2 = this; if ( !sub_872A80(this, a2) ) return 0; v4 = v2[13]; if ( v4 != *(_BYTE *)(a2 + 13) ) return 0; v5 = 0; if ( v4 ) { while ( sub_82FCB0((float *)(24 * v5 + *((_DWORD *)v2 + 5)), (float *)(24 * v5 + *(_DWORD *)(a2 + 20))) ) { if ( ++v5 >= v2[13] ) goto LABEL_7; } } else { LABEL_7: if ( v2[12] == *(_BYTE *)(a2 + 12) && *(float *)(a2 + 28) == *((float *)v2 + 7) && v2[14] == *(_BYTE *)(a2 + 14) && v2[15] == *(_BYTE *)(a2 + 15) && (!*((_DWORD *)v2 + 6) || (*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 28))(*(_DWORD *)(a2 + 24))) && *((_DWORD *)v2 + 6) == *(_DWORD *)(a2 + 24) && *(float *)(a2 + 32) == *((float *)v2 + 8) && v2[16] == *(_BYTE *)(a2 + 16) && v2[17] == *(_BYTE *)(a2 + 17) ) { return 1; } } return 0; } //----- (0082FE50) -------------------------------------------------------- LONG __thiscall sub_82FE50(_DWORD *this) { _DWORD *v1; // esi int v2; // eax void *v3; // ecx int v4; // edi int v5; // edx int v6; // edi int v7; // ebx int v8; // esi int v10; // [esp+4h] [ebp-8h] _DWORD *v11; // [esp+8h] [ebp-4h] v1 = this; v2 = this[5]; v11 = this; *this = &NiBlendInterpolator::`vftable'; if ( v2 ) { v3 = (void *)(v2 - 4); v4 = *(_DWORD *)(v2 - 4); v5 = 3 * v4; v6 = v4 - 1; v10 = v2 - 4; v7 = v2 + 8 * v5; if ( v6 >= 0 ) { do { v8 = *(_DWORD *)(v7 - 24); v7 -= 24; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); --v6; } while ( v6 >= 0 ); v1 = v11; v3 = (void *)v10; } operator delete(v3); } return sub_831BA0(v1); } // A23034: using guessed type void *NiBlendInterpolator::`vftable'; //----- (0082FED0) -------------------------------------------------------- _DWORD *__thiscall sub_82FED0(_DWORD *this, _DWORD *a2, unsigned __int8 a3) { _DWORD *v3; // esi int v4; // edi int v5; // eax char v6; // al int v7; // ebx unsigned __int8 v8; // bl int v9; // edi int v10; // eax char v11; // cl char v12; // dl char v13; // al char v14; // cl unsigned __int8 v15; // al int v16; // edx int v17; // eax int v18; // ecx int v19; // eax double v20; // st7 _DWORD *result; // eax char v22; // [esp+Bh] [ebp-1h] v3 = this; v4 = this[5] + 24 * a3; v5 = *(_DWORD *)v4; *a2 = *(_DWORD *)v4; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = *(_BYTE *)(v4 + 12); v7 = *(_DWORD *)v4; v22 = *(_BYTE *)(v4 + 12); if ( *(_DWORD *)v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v6 = v22; *(_DWORD *)v4 = 0; } *(_BYTE *)(v4 + 12) = 0; *(float *)(v4 + 4) = 0.0; *(float *)(v4 + 8) = 0.0; *(float *)(v4 + 16) = 0.0; *(float *)(v4 + 20) = -3.4028235e38; if ( v6 == *((_BYTE *)v3 + 16) || v6 == *((_BYTE *)v3 + 17) ) { v8 = 0; *((_WORD *)v3 + 8) = -32640; if ( *((_BYTE *)v3 + 13) ) { v9 = v3[5]; do { v10 = v9 + 24 * v8; if ( *(_DWORD *)(v9 + 24 * v8) ) { v11 = *(_BYTE *)(v10 + 12); if ( v11 > *((_BYTE *)v3 + 17) ) { v12 = *((_BYTE *)v3 + 16); if ( v11 <= v12 ) { if ( v11 < v12 ) *((_BYTE *)v3 + 17) = v11; } else { *((_BYTE *)v3 + 17) = v12; *((_BYTE *)v3 + 16) = *(_BYTE *)(v10 + 12); } } } ++v8; } while ( v8 < *((_BYTE *)v3 + 13) ); } } v13 = --*((_BYTE *)v3 + 14); if ( v13 == 1 ) { v14 = *((_BYTE *)v3 + 13); if ( v14 == 2 ) { *((_BYTE *)v3 + 15) = a3 == 0; } else { v15 = 0; if ( v14 ) { v16 = v3[5]; do { if ( *(_DWORD *)(v16 + 24 * v15) ) *((_BYTE *)v3 + 15) = v15; ++v15; } while ( v15 < *((_BYTE *)v3 + 13) ); } } v17 = v3[5]; v18 = *(_DWORD *)(v17 + 24 * *((unsigned __int8 *)v3 + 15)); v19 = v17 + 24 * *((unsigned __int8 *)v3 + 15); v3[6] = v18; v20 = *(float *)(v19 + 20); goto LABEL_30; } if ( !v13 ) { v20 = -3.4028235e38; *((_BYTE *)v3 + 15) = -1; v3[6] = 0; LABEL_30: *((float *)v3 + 8) = v20; } result = a2; *((float *)v3 + 9) = -3.4028235e38; *((float *)v3 + 10) = -3.4028235e38; *((_BYTE *)v3 + 12) |= 4u; *((float *)v3 + 11) = -3.4028235e38; return result; } //----- (00830040) -------------------------------------------------------- void __thiscall sub_830040(int this) { char v1; // al char v2; // al unsigned __int8 v3; // bl int v4; // esi int v5; // edx char v6; // al float v7; // ST08_4 double v8; // st5 double v9; // st4 unsigned __int8 v10; // dl float v11; // ST08_4 double v12; // st3 int v13; // eax char v14; // bl double v15; // st7 unsigned __int8 v16; // bl int v17; // edx double v18; // st3 double v19; // st6 unsigned __int8 v20; // dl double v21; // st5 double v22; // st7 float v23; // ST08_4 int v24; // esi double v25; // rt2 double v26; // st6 double v27; // st7 unsigned __int8 v28; // dl unsigned __int8 v29; // bl double v30; // rtt float *v31; // esi double v32; // rt0 double v33; // st6 double v34; // st7 float v35; // [esp+0h] [ebp-4h] float v36; // [esp+0h] [ebp-4h] float v37; // [esp+0h] [ebp-4h] float v38; // [esp+0h] [ebp-4h] v1 = *(_BYTE *)(this + 12); if ( !(v1 & 4) ) return; *(_BYTE *)(this + 12) = v1 & 0xFB; v2 = *(_BYTE *)(this + 14); if ( v2 == 1 ) { *(float *)(*(_DWORD *)(this + 20) + 24 * *(unsigned __int8 *)(this + 15) + 8) = 1.0; return; } if ( v2 == 2 ) { sub_82F950((_BYTE *)this); return; } if ( -3.4028235e38 == *(float *)(this + 36) ) { v3 = 0; *(float *)(this + 36) = 0.0; *(float *)(this + 40) = 0.0; *(float *)(this + 44) = 0.0; if ( *(_BYTE *)(this + 13) ) { v4 = *(_DWORD *)(this + 20); do { v5 = v4 + 24 * v3; if ( *(_DWORD *)(v4 + 24 * v3) ) { v6 = *(_BYTE *)(v5 + 12); v35 = *(float *)(v5 + 4) * *(float *)(v5 + 16); if ( v6 == *(_BYTE *)(this + 16) ) { *(float *)(this + 36) = *(float *)(this + 36) + v35; if ( *(float *)(this + 44) < (double)*(float *)(v5 + 16) ) *(float *)(this + 44) = *(float *)(v5 + 16); } else if ( v6 == *(_BYTE *)(this + 17) ) { *(float *)(this + 40) = v35 + *(float *)(this + 40); } } ++v3; } while ( v3 < *(_BYTE *)(this + 13) ); } } v7 = 1.0 - *(float *)(this + 44); v8 = v7; v36 = *(float *)(this + 40) * v7 + *(float *)(this + 44) * *(float *)(this + 36); if ( v36 <= 0.0 ) v9 = 0.0; else v9 = 1.0 / v36; v10 = 0; if ( *(_BYTE *)(this + 13) ) { v11 = v9; v12 = v11; do { v13 = *(_DWORD *)(this + 20) + 24 * v10; if ( *(_DWORD *)v13 ) { v14 = *(_BYTE *)(v13 + 12); if ( v14 == *(_BYTE *)(this + 16) ) { *(float *)(v13 + 8) = *(float *)(v13 + 4) * *(float *)(this + 44) * *(float *)(v13 + 16) * v12; } else if ( v14 == *(_BYTE *)(this + 17) ) { *(float *)(v13 + 8) = *(float *)(v13 + 4) * v8 * *(float *)(v13 + 16) * v12; } else { *(float *)(v13 + 8) = 0.0; } } ++v10; } while ( v10 < *(_BYTE *)(this + 13) ); } v15 = 0.0; if ( *(float *)(this + 28) > 0.0 ) { v16 = 0; v37 = 0.0; if ( !*(_BYTE *)(this + 13) ) goto LABEL_57; do { v17 = *(_DWORD *)(this + 20) + 24 * v16; if ( *(_DWORD *)v17 && 0.0 != *(float *)(v17 + 8) ) { if ( *(float *)(this + 28) > (double)*(float *)(v17 + 8) ) *(float *)(v17 + 8) = 0.0; v37 = *(float *)(v17 + 8) + v37; } ++v16; } while ( v16 < *(_BYTE *)(this + 13) ); v18 = v37; if ( 1.0 == v37 ) { v19 = 0.0; v22 = 1.0; LABEL_44: v25 = v19; v26 = v22; v27 = v25; goto LABEL_45; } if ( v18 > 0.0 ) { v19 = 0.0; v15 = 1.0 / v18; } else { LABEL_57: v19 = 0.0; } v20 = 0; v21 = v15; v22 = 1.0; if ( *(_BYTE *)(this + 13) ) { do { v24 = *(_DWORD *)(this + 20) + 24 * v20; if ( v19 != *(float *)(v24 + 8) ) { v23 = v21; *(float *)(v24 + 8) = *(float *)(v24 + 8) * v23; } ++v20; } while ( v20 < *(_BYTE *)(this + 13) ); } goto LABEL_44; } v26 = 1.0; v27 = 0.0; LABEL_45: if ( *(_BYTE *)(this + 12) & 2 ) { v28 = 0; v29 = -1; v38 = -1.0; if ( *(_BYTE *)(this + 13) ) { while ( 1 ) { v31 = (float *)(*(_DWORD *)(this + 20) + 24 * v28 + 8); if ( v38 < (double)*v31 ) { v29 = v28; v38 = *v31; } v32 = v26; v33 = v27; v34 = v32; ++v28; *v31 = v33; if ( v28 >= *(_BYTE *)(this + 13) ) break; v30 = v33; v26 = v34; v27 = v30; } *(float *)(*(_DWORD *)(this + 20) + 24 * v29 + 8) = v34; } else { *(float *)(*(_DWORD *)(this + 20) + 6128) = v26; } } } //----- (008302F0) -------------------------------------------------------- float *__thiscall sub_8302F0(float *this, char a2, float a3, char a4) { float *v4; // esi int v5; // ecx _DWORD *v6; // eax int v7; // ecx int v8; // edx int v9; // eax v4 = this; sub_831B80(this); v4[7] = a3; v4[8] = -3.4028235e38; *((_BYTE *)v4 + 12) = 0; *(_DWORD *)v4 = &NiBlendInterpolator::`vftable'; *((_BYTE *)v4 + 13) = a4; *(float *)((char *)v4 + 14) = -1.184642e-38; v4[5] = 0.0; v4[6] = 0.0; v4[9] = -3.4028235e38; v4[10] = -3.4028235e38; *((_BYTE *)v4 + 12) = a2 != 0; v4[11] = -3.4028235e38; if ( !a4 ) return v4; v5 = 24 * (unsigned __int8)a4 | -(24 * (unsigned __int64)(unsigned __int8)a4 >> 32 != 0); v6 = operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( !v6 ) { v8 = 0; goto LABEL_7; } v7 = (unsigned __int8)a4 - 1; v8 = (int)(v6 + 1); *v6 = (unsigned __int8)a4; v9 = (int)(v6 + 1); if ( v7 < 0 ) { LABEL_7: *((_DWORD *)v4 + 5) = v8; return v4; } do { *(float *)(v9 + 4) = 0.0; *(_DWORD *)v9 = 0; *(float *)(v9 + 8) = 0.0; *(_BYTE *)(v9 + 12) = 0; *(float *)(v9 + 16) = 0.0; v9 += 24; --v7; *(float *)(v9 - 4) = -3.4028235e38; } while ( v7 >= 0 ); *((_DWORD *)v4 + 5) = v8; return v4; } // A23034: using guessed type void *NiBlendInterpolator::`vftable'; //----- (008303D0) -------------------------------------------------------- char __thiscall sub_8303D0(_BYTE *this) { _BYTE *v1; // edi unsigned __int8 v3; // al int v4; // esi int v5; // ecx _DWORD *v6; // eax int v7; // ecx int v8; // ebx int i; // eax unsigned __int8 v10; // al int v11; // esi int v12; // eax int v13; // edi int v14; // eax double v15; // st7 int v16; // eax int v17; // edi void *v18; // ecx int v19; // edx int v20; // edi int v21; // eax int v22; // esi int v23; // [esp+4h] [ebp-10h] void (__stdcall ***v24)(signed int); // [esp+8h] [ebp-Ch] int v25; // [esp+8h] [ebp-Ch] _BYTE *v26; // [esp+Ch] [ebp-8h] unsigned __int8 v27; // [esp+12h] [ebp-2h] unsigned __int8 v28; // [esp+13h] [ebp-1h] v1 = this; v26 = this; if ( !byte_ABCEAE ) return 0; v3 = byte_ABCEAE + this[13]; v27 = v3; v4 = v3; v5 = 24 * v3 | -(24 * (unsigned __int64)v3 >> 32 != 0); v6 = operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { v7 = v4 - 1; v8 = (int)(v6 + 1); *v6 = v4; for ( i = (int)(v6 + 1); v7 >= 0; *(float *)(i - 4) = -3.4028235e38 ) { *(float *)(i + 4) = 0.0; *(_DWORD *)i = 0; *(float *)(i + 8) = 0.0; *(_BYTE *)(i + 12) = 0; *(float *)(i + 16) = 0.0; i += 24; --v7; } } else { v8 = 0; } v10 = 0; v28 = 0; if ( v1[13] ) { do { v11 = 24 * v10; v12 = *(_DWORD *)(v11 + v8); v13 = v11 + *((_DWORD *)v1 + 5); v24 = (void (__stdcall ***)(signed int))v12; if ( v12 != *(_DWORD *)v13 ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v24 ) (**v24)(1); v14 = *(_DWORD *)v13; *(_DWORD *)(v11 + v8) = *(_DWORD *)v13; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } *(float *)(v11 + v8 + 4) = *(float *)(v13 + 4); v10 = v28 + 1; *(float *)(v11 + v8 + 8) = *(float *)(v13 + 8); *(_BYTE *)(v11 + v8 + 12) = *(_BYTE *)(v13 + 12); *(float *)(v11 + v8 + 16) = *(float *)(v13 + 16); v28 = v10; v15 = *(float *)(v13 + 20); v1 = v26; *(float *)(v11 + v8 + 20) = v15; } while ( v10 < v26[13] ); } v16 = *((_DWORD *)v1 + 5); if ( v16 ) { v17 = *(_DWORD *)(v16 - 4); v18 = (void *)(v16 - 4); v19 = 3 * v17; v20 = v17 - 1; v23 = v16 - 4; v21 = v16 + 8 * v19; if ( v20 >= 0 ) { while ( 1 ) { v22 = *(_DWORD *)(v21 - 24); v25 = v21 - 24; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) { if ( v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); } if ( --v20 < 0 ) break; v21 = v25; } v18 = (void *)v23; } operator delete(v18); v1 = v26; } *((_DWORD *)v1 + 5) = v8; v1[13] = v27; return 1; } // ABCEAE: using guessed type char byte_ABCEAE; //----- (00830570) -------------------------------------------------------- int __thiscall sub_830570(float *this, int a2, _DWORD **a3) { float *v3; // ebx int v4; // esi int v5; // ecx _DWORD *v6; // eax int v7; // ecx int v8; // edx int i; // eax int result; // eax int v11; // edx int v12; // edi int v13; // eax int v14; // ecx int v15; // edi int v16; // esi int v17; // eax void (__stdcall ***v18)(signed int); // ecx void (__stdcall ***v19)(signed int); // [esp+8h] [ebp-Ch] int v20; // [esp+Ch] [ebp-8h] unsigned __int8 v21; // [esp+13h] [ebp-1h] v3 = this; sub_872AA0(this, a2, a3); *(_BYTE *)(a2 + 12) = *((_BYTE *)v3 + 12); *(_BYTE *)(a2 + 13) = *((_BYTE *)v3 + 13); v4 = *((unsigned __int8 *)v3 + 13); v5 = 24 * v4 | -(24 * (unsigned __int64)*((unsigned __int8 *)v3 + 13) >> 32 != 0); v6 = operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { v7 = v4 - 1; v8 = (int)(v6 + 1); *v6 = v4; for ( i = (int)(v6 + 1); v7 >= 0; *(float *)(i - 4) = -3.4028235e38 ) { *(float *)(i + 4) = 0.0; *(_DWORD *)i = 0; *(float *)(i + 8) = 0.0; *(_BYTE *)(i + 12) = 0; *(float *)(i + 16) = 0.0; i += 24; --v7; } result = v8; } else { result = 0; } v11 = a2; *(_DWORD *)(a2 + 20) = result; *(float *)(a2 + 28) = v3[7]; if ( !((_BYTE)v3[3] & 1) ) { v21 = 0; if ( *((_BYTE *)v3 + 13) ) { do { v12 = *((_DWORD *)v3 + 5); v13 = 24 * v21; v14 = *(_DWORD *)(v12 + v13); v15 = v13 + v12; v16 = v13 + *(_DWORD *)(v11 + 20); if ( v14 ) { v17 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v14 + 8))(a3); v18 = *(void (__stdcall ****)(signed int))v16; v20 = v17; v19 = *(void (__stdcall ****)(signed int))v16; if ( *(_DWORD *)v16 != v17 ) { if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)v18 + 1) && v19 ) (**v19)(1); v17 = v20; } *(_DWORD *)v16 = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } v11 = a2; } *(float *)(v16 + 4) = *(float *)(v15 + 4); *(float *)(v16 + 8) = *(float *)(v15 + 8); *(_BYTE *)(v16 + 12) = *(_BYTE *)(v15 + 12); *(float *)(v16 + 16) = *(float *)(v15 + 16); ++v21; *(float *)(v16 + 20) = *(float *)(v15 + 20); } while ( v21 < *((_BYTE *)v3 + 13) ); } *(_BYTE *)(v11 + 14) = *((_BYTE *)v3 + 14); *(_BYTE *)(v11 + 15) = *((_BYTE *)v3 + 15); *(float *)(v11 + 32) = v3[8]; *(_BYTE *)(v11 + 16) = *((_BYTE *)v3 + 16); result = *((unsigned __int8 *)v3 + 17); *(_BYTE *)(v11 + 17) = result; } return result; } //----- (008306F0) -------------------------------------------------------- int __thiscall sub_8306F0(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ebx int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, char *, signed int, _DWORD **, signed int); // eax int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, char *, signed int, _DWORD **, signed int); // eax int v12; // eax int v13; // ST14_4 void (__cdecl *v14)(int, int *, signed int, _DWORD **, signed int); // eax int v15; // ST14_4 void (__cdecl *v16)(int, char *, signed int, _DWORD **, signed int); // eax int v17; // edi int (__cdecl *v18)(int, char *, signed int, _DWORD **, signed int); // edx int v20; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = sub_876300(a2); v5 = *(_DWORD *)v3; a2 = (_DWORD *)v4; if ( v5 != v4 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4 = (int)a2; } *(_DWORD *)v3 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v6 = v2[88]; v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v6 + 4); a2 = (_DWORD *)4; v8(v7, v3 + 4, 4, &a2, 1); v9 = v2[88]; v10 = v9; v11 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v9 + 4); a2 = (_DWORD *)4; v11(v10, v3 + 8, 4, &a2, 1); v12 = v2[88]; if ( v2[7] >= 0xA01006Eu ) { v15 = v2[88]; v16 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v12 + 4); a2 = (_DWORD *)1; v16(v15, v3 + 12, 1, &a2, 1); } else { v13 = v2[88]; v14 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v12 + 4); a2 = (_DWORD *)4; v14(v13, &v20, 4, &a2, 1); if ( v20 == 0x80000000 ) v3[12] = -128; else v3[12] = v20; } v17 = v2[88]; v18 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v17 + 4); a2 = (_DWORD *)4; return v18(v17, v3 + 16, 4, &a2, 1); } //----- (00830800) -------------------------------------------------------- int __thiscall sub_830800(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, signed int *, signed int); // eax int v13; // edi int (__cdecl *v14)(int, _DWORD *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; (*(void (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 44))(a2, *this); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 1, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 2, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v10 + 8); a2 = 1; v12(v11, v3 + 3, 1, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; return v14(v13, v3 + 4, 4, &a2, 1); } //----- (008308A0) -------------------------------------------------------- int __thiscall sub_8308A0(int *this, signed int a2) { _DWORD *v2; // esi int *v3; // edi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST3C_4 int v6; // eax int v7; // ST3C_4 void (__cdecl *v8)(int, signed int *, signed int, int *, signed int); // eax void (__cdecl *v9)(int, int *, signed int, int *, signed int); // edx _BYTE *v10; // ebx int v11; // ST28_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // edx signed int v13; // eax int v14; // ecx signed int *v15; // eax signed int v16; // ecx int v17; // ecx int v18; // edx int i; // eax bool v20; // zf int v21; // eax int v22; // ST3C_4 void (__cdecl *v23)(int, char *, signed int, signed int *, signed int); // eax int v24; // eax int v25; // ST3C_4 void (__cdecl *v26)(int, int *, signed int, signed int *, signed int); // eax int v27; // eax int v28; // ST28_4 void (__cdecl *v29)(int, char *, signed int, signed int *, signed int); // eax int v30; // eax int v31; // ST3C_4 void (__cdecl *v32)(int, signed int *, signed int, int *, signed int); // eax void (__cdecl *v33)(int, int *, signed int, int *, signed int); // edx int v34; // ST28_4 int v35; // ST3C_4 void (__cdecl *v36)(int, char *, signed int, signed int *, signed int); // eax int v37; // eax int v38; // ST28_4 void (__cdecl *v39)(int, char *, signed int, signed int *, signed int); // eax int v40; // eax int v41; // ST3C_4 void (__cdecl *v42)(int, int *, signed int, signed int *, signed int); // eax int v43; // eax int v44; // ST3C_4 void (__cdecl *v45)(int, int *, signed int, signed int *, signed int); // eax int v46; // esi void (__cdecl *v47)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v49; // ST3C_4 void (__cdecl *v50)(int, int *, signed int, signed int *, signed int); // eax int v51; // esi int (__cdecl *v52)(int, char *, signed int, signed int *, signed int); // edx int v53; // eax int v54; // ST3C_4 int (__cdecl *v55)(int, int *, signed int, signed int *, signed int); // eax int v56; // eax int v57; // ST3C_4 void (__cdecl *v58)(int, char *, signed int, signed int *, signed int); // eax int v59; // eax int v60; // ST28_4 void (__cdecl *v61)(int, char *, signed int, signed int *, signed int); // eax int v62; // eax int v63; // ST14_4 void (__cdecl *v64)(int, int *, signed int, signed int *, signed int); // eax int v65; // eax int v66; // ST00_4 void (__cdecl *v67)(int, char *, signed int, signed int *, signed int); // eax int v68; // eax int v69; // ST3C_4 void (__cdecl *v70)(int, int *, signed int, signed int *, signed int); // eax int v71; // eax int v72; // ST28_4 void (__cdecl *v73)(int, int *, signed int, signed int *, signed int); // eax int v74; // eax int v75; // ST14_4 void (__cdecl *v76)(int, int *, signed int, signed int *, signed int); // eax int v77; // eax int v78; // [esp+Ch] [ebp-Ch] int v79; // [esp+10h] [ebp-8h] char v80; // [esp+16h] [ebp-2h] char v81; // [esp+17h] [ebp-1h] v2 = (_DWORD *)a2; v3 = this; sub_87FD80(this, a2); if ( v2[7] >= 0xA010070u ) { v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v2[88] + 4); v5 = v2[88]; a2 = 1; v4(v5, v3 + 3, 1, &a2, 1); *((_BYTE *)v3 + 12) &= 0xFBu; } v6 = v2[88]; if ( v2[7] >= 0xA01006Eu ) { v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 4); v10 = (char *)v3 + 13; a2 = 1; v12(v6, (char *)v3 + 13, 1, &a2, 1); } else { v7 = v2[88]; v8 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v6 + 4); v78 = 2; v8(v7, &a2, 2, &v78, 1); *((_BYTE *)v3 + 13) = a2; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2[88] + 4); v10 = (char *)v3 + 13; v11 = v2[88]; v78 = 2; v9(v11, &v79, 2, &v78, 1); } v13 = (unsigned __int8)*v10; a2 = v13; v14 = 24 * v13 | -(24 * (unsigned __int64)(unsigned int)v13 >> 32 != 0); v15 = (signed int *)operator new((v14 + 4) | -__CFADD__(v14, 4)); if ( v15 ) { v16 = a2; *v15 = a2; v17 = v16 - 1; v18 = (int)(v15 + 1); for ( i = (int)(v15 + 1); v17 >= 0; *(float *)(i - 4) = -3.4028235e38 ) { *(float *)(i + 4) = 0.0; *(_DWORD *)i = 0; *(float *)(i + 8) = 0.0; *(_BYTE *)(i + 12) = 0; *(float *)(i + 16) = 0.0; i += 24; --v17; } } else { v18 = 0; } v3[5] = v18; if ( v2[7] >= 0xA010070u ) { v53 = v2[88]; v54 = v53; v55 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v53 + 4); a2 = 4; result = v55(v54, v3 + 7, 4, &a2, 1); if ( !(v3[3] & 1) ) { v56 = v2[88]; v57 = v56; v58 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v56 + 4); a2 = 1; v58(v57, (char *)v3 + 14, 1, &a2, 1); v59 = v2[88]; v60 = v59; v61 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v59 + 4); a2 = 1; v61(v60, (char *)v3 + 15, 1, &a2, 1); v62 = v2[88]; v63 = v62; v64 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v62 + 4); a2 = 1; v64(v63, v3 + 4, 1, &a2, 1); v65 = v2[88]; v66 = v65; v67 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v65 + 4); a2 = 1; v67(v66, (char *)v3 + 17, 1, &a2, 1); v68 = v2[88]; v69 = v68; v70 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v68 + 4); a2 = 4; v70(v69, v3 + 8, 4, &a2, 1); v71 = v2[88]; v72 = v71; v73 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v71 + 4); a2 = 4; v73(v72, v3 + 9, 4, &a2, 1); v74 = v2[88]; v75 = v74; v76 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v74 + 4); a2 = 4; v76(v75, v3 + 10, 4, &a2, 1); v77 = v2[88]; a2 = 4; (*(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v77 + 4))(v77, v3 + 11, 4, &a2, 1); v20 = *v10 == 0; HIBYTE(a2) = 0; if ( !v20 ) { do { sub_8306F0((char *)(v3[5] + 24 * HIBYTE(a2)), v2); ++HIBYTE(a2); } while ( HIBYTE(a2) < *v10 ); } result = sub_876300(v2); v3[6] = result; } } else { v20 = *v10 == 0; HIBYTE(a2) = 0; if ( !v20 ) { do { sub_8306F0((char *)(v3[5] + 24 * HIBYTE(a2)), v2); ++HIBYTE(a2); } while ( HIBYTE(a2) < *v10 ); } v21 = v2[88]; v22 = v21; v23 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v21 + 4); a2 = 1; v23(v22, &v81, 1, &a2, 1); if ( v81 ) *((_BYTE *)v3 + 12) |= 1u; else *((_BYTE *)v3 + 12) &= 0xFEu; v24 = v2[88]; v25 = v24; v26 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v24 + 4); a2 = 4; v26(v25, v3 + 7, 4, &a2, 1); v27 = v2[88]; v28 = v27; v29 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v27 + 4); a2 = 1; v29(v28, &v80, 1, &a2, 1); if ( v80 ) *((_BYTE *)v3 + 12) |= 2u; else *((_BYTE *)v3 + 12) &= 0xFDu; v30 = v2[88]; if ( v2[7] >= 0xA01006Eu ) { v35 = v2[88]; v36 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v30 + 4); a2 = 1; v36(v35, (char *)v3 + 14, 1, &a2, 1); v37 = v2[88]; v38 = v37; v39 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v37 + 4); a2 = 1; v39(v38, (char *)v3 + 15, 1, &a2, 1); } else { v31 = v2[88]; v32 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v30 + 4); v78 = 2; v32(v31, &a2, 2, &v78, 1); *((_BYTE *)v3 + 14) = a2; v33 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2[88] + 4); v34 = v2[88]; v78 = 2; v33(v34, &v79, 2, &v78, 1); *((_BYTE *)v3 + 15) = v79; } if ( v2[7] >= 0xA01006Cu ) { v3[6] = sub_876300(v2); v40 = v2[88]; v41 = v40; v42 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v40 + 4); a2 = 4; v42(v41, v3 + 8, 4, &a2, 1); } v43 = v2[88]; if ( v2[7] >= 0xA01006Eu ) { v49 = v2[88]; v50 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v43 + 4); a2 = 1; v50(v49, v3 + 4, 1, &a2, 1); v51 = v2[88]; v52 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v51 + 4); a2 = 1; result = v52(v51, (char *)v3 + 17, 1, &a2, 1); } else { v44 = v2[88]; v45 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v43 + 4); a2 = 4; v45(v44, &v78, 4, &a2, 1); if ( v78 == 0x80000000 ) *((_BYTE *)v3 + 16) = -128; else *((_BYTE *)v3 + 16) = v78; v46 = v2[88]; v47 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v46 + 4); a2 = 4; v47(v46, &v79, 4, &a2, 1); result = v79; if ( v79 == 0x80000000 ) *((_BYTE *)v3 + 17) = -128; else *((_BYTE *)v3 + 17) = v79; } } return result; } //----- (00830D40) -------------------------------------------------------- int __thiscall sub_830D40(char *this, int a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 int (__cdecl *v12)(int, _DWORD *, signed int, int *, signed int); // eax int result; // eax int v14; // eax int v15; // ST3C_4 void (__cdecl *v16)(int, char *, signed int, int *, signed int); // eax int v17; // eax int v18; // ST28_4 void (__cdecl *v19)(int, char *, signed int, int *, signed int); // eax int v20; // eax int v21; // ST14_4 void (__cdecl *v22)(int, _DWORD *, signed int, int *, signed int); // eax int v23; // eax int v24; // ST00_4 void (__cdecl *v25)(int, char *, signed int, int *, signed int); // eax int v26; // eax int v27; // ST3C_4 void (__cdecl *v28)(int, _DWORD *, signed int, int *, signed int); // eax int v29; // eax int v30; // ST28_4 void (__cdecl *v31)(int, _DWORD *, signed int, int *, signed int); // eax int v32; // eax int v33; // ST14_4 void (__cdecl *v34)(int, _DWORD *, signed int, int *, signed int); // eax int v35; // eax unsigned __int8 v36; // bl v2 = (_DWORD *)a2; v3 = this; sub_81C180(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 1; v6(v5, (_DWORD *)v3 + 3, 1, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); a2 = 1; v9(v8, v3 + 13, 1, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v10 + 8); a2 = 4; result = v12(v11, (_DWORD *)v3 + 7, 4, &a2, 1); if ( !(v3[12] & 1) ) { v14 = v2[89]; v15 = v14; v16 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v14 + 8); a2 = 1; v16(v15, v3 + 14, 1, &a2, 1); v17 = v2[89]; v18 = v17; v19 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v17 + 8); a2 = 1; v19(v18, v3 + 15, 1, &a2, 1); v20 = v2[89]; v21 = v20; v22 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v20 + 8); a2 = 1; v22(v21, (_DWORD *)v3 + 4, 1, &a2, 1); v23 = v2[89]; v24 = v23; v25 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v23 + 8); a2 = 1; v25(v24, v3 + 17, 1, &a2, 1); v26 = v2[89]; v27 = v26; v28 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v26 + 8); a2 = 4; v28(v27, (_DWORD *)v3 + 8, 4, &a2, 1); v29 = v2[89]; v30 = v29; v31 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v29 + 8); a2 = 4; v31(v30, (_DWORD *)v3 + 9, 4, &a2, 1); v32 = v2[89]; v33 = v32; v34 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v32 + 8); a2 = 4; v34(v33, (_DWORD *)v3 + 10, 4, &a2, 1); v35 = v2[89]; a2 = 4; (*(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v35 + 8))(v35, (_DWORD *)v3 + 11, 4, &a2, 1); v36 = 0; if ( v3[13] ) { do sub_830800((_DWORD *)(*((_DWORD *)v3 + 5) + 24 * v36++), (signed int)v2); while ( v36 < (unsigned __int8)v3[13] ); } result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 6)); } return result; } //----- (00830ED0) -------------------------------------------------------- unsigned int __thiscall sub_830ED0(void *this, char a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // edi v2 = (_DWORD *)a2; v3 = this; sub_831C50(this, a2); v4 = sub_8784D0(*(int *)dword_BA4490); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878570((int)"m_ucArraySize", *((_BYTE *)v3 + 13)); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878570((int)"ms_ucArrayGrowBy", byte_ABCEAE); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); a2 = *((_BYTE *)v3 + 12) & 1; v10 = sub_878510((int)"ManagerControlled", a2); v11 = v2[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"m_fWeightThreshold", *((float *)v3 + 7)); v13 = v2[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); a2 = (*((_BYTE *)v3 + 12) >> 1) & 1; v14 = sub_878510((int)"m_bOnlyUseHighestWeight", a2); v15 = v2[3]; *(_DWORD *)&a2 = v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878570((int)"m_ucInterpCount", *((_BYTE *)v3 + 14)); v17 = v2[3]; *(_DWORD *)&a2 = v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_878570((int)"m_ucSingleIdx", *((_BYTE *)v3 + 15)); v19 = v2[3]; *(_DWORD *)&a2 = v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); return sub_823870(v2, v19, &a2); } // ABCEAE: using guessed type char byte_ABCEAE; //----- (008310B0) -------------------------------------------------------- int __thiscall sub_8310B0(_DWORD *this) { return (*(int (__stdcall **)(_DWORD))(*this + 148))(this[12]); } //----- (008310C0) -------------------------------------------------------- float *__thiscall sub_8310C0(float *this) { float *v1; // esi v1 = this; sub_82F610(this); *(_DWORD *)v1 = &NiSingleInterpController::`vftable'; v1[15] = 0.0; return v1; } // A2316C: using guessed type void *NiSingleInterpController::`vftable'; //----- (008310E0) -------------------------------------------------------- char *sub_8310E0() { return dword_BA4498; } //----- (008310F0) -------------------------------------------------------- int __thiscall sub_8310F0(_DWORD *this, int a2) { return this[15]; } //----- (00831100) -------------------------------------------------------- void __thiscall sub_831100(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx int v4; // esi v3 = this; v4 = this[15]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[15] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (00831150) -------------------------------------------------------- int __thiscall sub_831150(_DWORD *this, float a2, float a3) { int v3; // ecx int result; // eax v3 = this[15]; if ( v3 ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 116))(LODWORD(a2), LODWORD(a3)); return result; } //----- (00831180) -------------------------------------------------------- char __thiscall sub_831180(_BYTE *this) { _BYTE *v1; // esi char result; // al int v3; // ecx v1 = this; result = this[8] >> 5; if ( !(result & 1) ) { result = sub_82F640((int)this); v3 = *((_DWORD *)v1 + 15); if ( v3 ) result = (*(int (__stdcall **)(_BYTE *, _BYTE *))(*(_DWORD *)v3 + 112))(v1 + 20, v1 + 24); } return result; } //----- (008311B0) -------------------------------------------------------- char __thiscall sub_8311B0(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi int v4; // eax void *v5; // ecx int v6; // esi int v7; // edi v3 = this; LOBYTE(v4) = sub_82F600(this, a2, a3); v5 = (void *)v3[15]; if ( v5 ) { v4 = sub_85BAA0(v5, a3); v6 = *(_DWORD *)(a2 + 60); v7 = v4; if ( v6 != v4 ) { if ( v6 ) { v4 = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v4 ) { if ( v6 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(a2 + 60) = v7; if ( v7 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } return v4; } //----- (00831220) -------------------------------------------------------- int __thiscall sub_831220(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_86C220(this, a2); v4 = v2[15]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (00831250) -------------------------------------------------------- int __thiscall sub_831250(int *this, _DWORD *a2) { int *v2; // ebx int result; // eax int v4; // esi int v5; // edi v2 = this; result = sub_82F660(this, (signed int)a2); if ( a2[7] >= 0xA010068u ) { result = sub_876300(a2); v4 = v2[15]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[15] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } } return result; } //----- (008312C0) -------------------------------------------------------- char __thiscall sub_8312C0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_823790(this, a2); if ( result ) { v4 = v2[15]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (00831300) -------------------------------------------------------- int __thiscall sub_831300(_DWORD *this, signed int a2) { _DWORD *v2; // esi v2 = this; sub_898390(this, a2); return (*(int (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 44))(a2, v2[15]); } //----- (00831330) -------------------------------------------------------- char __thiscall sub_831330(float *this, int a2) { float *v2; // esi int v4; // ecx v2 = this; if ( !sub_8983A0(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 15); if ( v4 ) { if ( !*(_DWORD *)(a2 + 60) ) return 0; if ( v4 ) goto LABEL_12; } if ( *(_DWORD *)(a2 + 60) ) return 0; if ( v4 ) { LABEL_12: if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 60)) ) return 1; return 0; } return 1; } //----- (00831380) -------------------------------------------------------- unsigned int __thiscall sub_831380(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi unsigned int result; // eax int v7; // ecx v2 = a2; v3 = this; sub_82F6D0(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4498); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); result = sub_823870(v2, v5, &a2); v7 = *((_DWORD *)v3 + 15); if ( v7 ) result = (*(int (__stdcall **)(char *))(*(_DWORD *)v7 + 32))(v2); return result; } //----- (008313E0) -------------------------------------------------------- void __thiscall sub_8313E0(float *this, float *a2) { float *v2; // edi double v3; // st7 float *v4; // eax float v5; // edx double v6; // st7 char v7; // [esp+4h] [ebp-14h] float v8; // [esp+8h] [ebp-10h] float v9; // [esp+Ch] [ebp-Ch] float v10; // [esp+10h] [ebp-8h] float v11; // [esp+14h] [ebp-4h] v11 = -3.4028235e38; v2 = this; v3 = v11; if ( v11 != this[7] ) v3 = 1.0 / this[7]; a2[7] = v3; v11 = -3.4028235e38; if ( v11 == this[4] ) { a2[4] = v11; } else { v4 = sub_874C40((float *)&v7, this + 3); a2[3] = *v4; a2[4] = v4[1]; a2[5] = v4[2]; a2[6] = v4[3]; } v11 = -3.4028235e38; if ( v11 == *v2 ) { *a2 = v11; } else { v8 = -*v2; v9 = -v2[1]; v5 = v9; v6 = v2[2]; *a2 = v8; a2[1] = v5; v10 = -v6; a2[2] = v10; } } //----- (008314C0) -------------------------------------------------------- void __thiscall sub_8314C0(float *this, int a2) { float *v2; // edx float *v3; // ebx double v4; // st7 double v5; // st7 float *v6; // eax int v7; // ecx float *v8; // eax float v9; // ecx double v10; // st7 int v11; // eax char v12; // [esp+0h] [ebp-5Ch] char v13; // [esp+4h] [ebp-58h] float v14; // [esp+10h] [ebp-4Ch] float v15; // [esp+14h] [ebp-48h] float v16; // [esp+18h] [ebp-44h] float v17; // [esp+1Ch] [ebp-40h] float v18; // [esp+20h] [ebp-3Ch] float v19; // [esp+24h] [ebp-38h] float *v20; // [esp+28h] [ebp-34h] float v21; // [esp+2Ch] [ebp-30h] float v22; // [esp+30h] [ebp-2Ch] char v23; // [esp+34h] [ebp-28h] v2 = (float *)a2; v21 = 1.0; v3 = this; v20 = (float *)a2; v22 = -3.4028235e38; if ( v22 == this[7] ) { *(float *)(a2 + 28) = v22; } else { v21 = 1.0 / this[7]; v4 = v21; *(float *)(a2 + 28) = v21; v21 = v4; } v22 = -3.4028235e38; v5 = this[4]; qmemcpy(&v23, &unk_ABD440, 0x24u); if ( v22 == v5 ) { *(float *)(a2 + 16) = v22; } else { v6 = sub_874C40((float *)&v12, this + 3); v7 = (int)v20; v20[3] = *v6; v7 += 12; *(float *)(v7 + 4) = v6[1]; *(float *)(v7 + 8) = v6[2]; *(float *)(v7 + 12) = v6[3]; sub_694FD0((float *)v7, (float *)&v23); v2 = v20; } v22 = -3.4028235e38; if ( v22 == *v3 ) { *v2 = v22; } else { v14 = -*v3; v15 = -v3[1]; v16 = -v3[2]; v8 = sub_85DA90((float *)&v23, (float *)&v13, &v14); v17 = *v8 * v21; v18 = v8[1] * v21; v9 = v18; v10 = v21 * v8[2]; v11 = (int)v20; *v20 = v17; *(float *)(v11 + 4) = v9; v19 = v10; *(float *)(v11 + 8) = v19; } } //----- (00831630) -------------------------------------------------------- int __thiscall sub_831630(float *this, int a2, float *a3) { float *v3; // edx int v4; // eax double v5; // st7 float *v6; // ecx float *v7; // esi float v8; // eax float v9; // ecx float v10; // edx float *v11; // eax float v12; // ST14_4 float v13; // ST18_4 float v14; // ST1C_4 float v15; // eax double v16; // st7 int result; // eax int v18; // [esp+14h] [ebp-44h] float v19; // [esp+18h] [ebp-40h] float v20; // [esp+1Ch] [ebp-3Ch] float v21; // [esp+20h] [ebp-38h] float *v22; // [esp+24h] [ebp-34h] float v23; // [esp+28h] [ebp-30h] float v24; // [esp+2Ch] [ebp-2Ch] char v25; // [esp+30h] [ebp-28h] *(_DWORD *)a2 = dword_ABCEB0; *(_DWORD *)(a2 + 4) = dword_ABCEB4; *(_DWORD *)(a2 + 8) = dword_ABCEB8; *(_DWORD *)(a2 + 12) = dword_BA44A0; *(_DWORD *)(a2 + 16) = dword_BA44A4; v3 = a3; *(_DWORD *)(a2 + 20) = dword_BA44A8; v4 = dword_BA44AC; *(float *)(a2 + 28) = -3.4028235e38; *(_DWORD *)(a2 + 24) = v4; v23 = 1.0; v22 = this; v24 = -3.4028235e38; if ( v24 == this[7] || v24 == a3[7] ) { *(float *)(a2 + 28) = v24; } else { v23 = a3[7] * this[7]; v5 = v23; *(float *)(a2 + 28) = v23; v23 = v5; } v24 = -3.4028235e38; qmemcpy(&v25, &unk_ABD440, 0x24u); v6 = v22; if ( v24 == v22[4] || v24 == a3[4] ) { *(float *)(a2 + 16) = v24; } else { v7 = v22 + 3; sub_874BB0(v22 + 3, (float *)&v18, a3 + 3); sub_875190((float *)&v18); v8 = v19; v9 = v20; *(_DWORD *)(a2 + 12) = v18; v10 = v21; *(float *)(a2 + 16) = v8; *(float *)(a2 + 20) = v9; *(float *)(a2 + 24) = v10; sub_694FD0(v7, (float *)&v25); v3 = a3; v6 = v22; } v24 = -3.4028235e38; if ( v24 == *v6 || v24 == *v3 ) { *(float *)a2 = v24; result = a2; } else { v11 = sub_85DA90((float *)&v25, &v19, v3); v12 = *v11 * v23; v13 = v11[1] * v23; v14 = v23 * v11[2]; v19 = *v22 + v12; v20 = v22[1] + v13; v15 = v20; v16 = v22[2] + v14; *(float *)a2 = v19; *(float *)(a2 + 4) = v15; result = a2; v21 = v16; *(float *)(a2 + 8) = v21; } return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00831810) -------------------------------------------------------- int __thiscall sub_831810(float *this, int a2, float *a3) { int v3; // eax int v4; // edx int v5; // esi float *v6; // edi int v7; // ecx double v8; // st7 int v9; // eax bool v10; // c3 int v11; // ecx int v12; // edx double v13; // st7 float v14; // ecx float v15; // edx float v16; // eax double v17; // st7 double v18; // st7 int result; // eax int v20; // [esp+Ch] [ebp-10h] float v21; // [esp+10h] [ebp-Ch] float v22; // [esp+14h] [ebp-8h] float v23; // [esp+18h] [ebp-4h] float v24; // [esp+24h] [ebp+8h] float v25; // [esp+24h] [ebp+8h] v3 = dword_ABCEB0; v4 = dword_ABCEB8; v5 = a2; *(float *)(a2 + 28) = -3.4028235e38; v6 = this; v7 = dword_ABCEB4; v24 = -3.4028235e38; *(_DWORD *)v5 = v3; v8 = v6[7]; *(_DWORD *)(v5 + 12) = dword_BA44A0; v9 = dword_BA44AC; *(_DWORD *)(v5 + 4) = v7; v10 = v24 == v8; v11 = dword_BA44A4; *(_DWORD *)(v5 + 8) = v4; v12 = dword_BA44A8; *(_DWORD *)(v5 + 16) = v11; *(_DWORD *)(v5 + 20) = v12; *(_DWORD *)(v5 + 24) = v9; v13 = v24; if ( v10 || v13 == a3[7] ) *(float *)(v5 + 28) = v24; else *(float *)(v5 + 28) = a3[7] * v6[7]; if ( v13 == v6[4] || v13 == a3[4] ) { *(float *)(v5 + 16) = v24; } else { sub_874BB0(v6 + 3, (float *)&v20, a3 + 3); sub_875190((float *)&v20); v14 = v21; v15 = v22; *(_DWORD *)(v5 + 12) = v20; v16 = v23; *(float *)(v5 + 16) = v14; *(float *)(v5 + 20) = v15; *(float *)(v5 + 24) = v16; } v25 = -3.4028235e38; if ( v25 == *v6 || v25 == *a3 ) { *(float *)v5 = v25; result = v5; } else { v21 = *a3 + *v6; v17 = a3[1]; *(float *)v5 = v21; v22 = v17 + v6[1]; v18 = a3[2]; *(float *)(v5 + 4) = v22; v23 = v18 + v6[2]; *(float *)(v5 + 8) = v23; result = v5; } return result; } // ABCEB0: using guessed type int dword_ABCEB0; // ABCEB4: using guessed type int dword_ABCEB4; // ABCEB8: using guessed type int dword_ABCEB8; // BA44A0: using guessed type int dword_BA44A0; // BA44A4: using guessed type int dword_BA44A4; // BA44A8: using guessed type int dword_BA44A8; // BA44AC: using guessed type int dword_BA44AC; //----- (00831960) -------------------------------------------------------- int __thiscall sub_831960(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // edi int (__cdecl *v5)(int, char *, signed int, signed int *, signed int); // ecx v2 = a2; v3 = this; sub_860940(this, a2); sub_875330((float *)v3 + 3, v2); v4 = *(_DWORD *)(v2 + 356); v5 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; return v5(v4, v3 + 28, 4, &a2, 1); } //----- (008319B0) -------------------------------------------------------- int __thiscall sub_8319B0(char *this, signed int a2) { signed int v2; // esi char *v3; // edi int (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // edx int v5; // ST00_4 int result; // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST00_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int v13; // esi int (__cdecl *v14)(int, char *, signed int, int *, signed int); // eax int v15; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_8608D0(this, a2); sub_8752B0(v3 + 12, v2); v4 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; result = v4(v5, v3 + 28, 4, &a2, 1); if ( *(_DWORD *)(v2 + 28) < 0xA01006Eu ) { v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v15 = 1; v9(v8, (char *)&a2 + 3, 1, &v15, 1); if ( !HIBYTE(a2) ) *(float *)v3 = -3.4028235e38; v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 4); v15 = 1; v12(v11, (char *)&a2 + 3, 1, &v15, 1); if ( !HIBYTE(a2) ) *((float *)v3 + 4) = -3.4028235e38; v13 = *(_DWORD *)(v2 + 352); v14 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 4); v15 = 1; result = v14(v13, (char *)&a2 + 3, 1, &v15, 1); if ( !HIBYTE(a2) ) *((float *)v3 + 7) = -3.4028235e38; } return result; } //----- (00831AA0) -------------------------------------------------------- unsigned int __thiscall sub_831AA0(float *this, char *a2) { float *v2; // ebx char *v3; // eax char *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi char *v10; // eax unsigned int v11; // edi char *v13; // [esp+10h] [ebp-4h] v2 = this; v3 = sub_8784D0((int)"NiQuatTransform"); v4 = a2; v5 = *((_DWORD *)a2 + 3); v13 = v3; if ( v5 >= *((_DWORD *)a2 + 2) ) sub_8237A0(a2, v5 + *((_DWORD *)a2 + 5)); sub_823870(v4, v5, &v13); v6 = sub_85F140(v2, (int)"m_kTranslate"); v7 = *((_DWORD *)v4 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v7 + *((_DWORD *)v4 + 5)); sub_823870(v4, v7, &a2); v8 = sub_875200(v2 + 3, (int)"m_kRotate"); v9 = *((_DWORD *)v4 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v9 + *((_DWORD *)v4 + 5)); sub_823870(v4, v9, &a2); v10 = sub_8786B0((int)"m_fScale", v2[7]); v11 = *((_DWORD *)v4 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v11 + *((_DWORD *)v4 + 5)); return sub_823870(v4, v11, &a2); } //----- (00831B80) -------------------------------------------------------- float *__thiscall sub_831B80(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_85BA50(this); *(_DWORD *)v1 = &NiInterpolator::`vftable'; result = v1; v1[2] = -3.4028235e38; return result; } // A2326C: using guessed type void *NiInterpolator::`vftable'; //----- (00831BA0) -------------------------------------------------------- LONG __thiscall sub_831BA0(_DWORD *this) { *this = &NiInterpolator::`vftable'; return sub_85BA80(this); } // A2326C: using guessed type void *NiInterpolator::`vftable'; //----- (00831BB0) -------------------------------------------------------- char sub_831BB0() { return 0; } //----- (00831BC0) -------------------------------------------------------- float *__stdcall sub_831BC0(float *a1, float *a2) { float *result; // eax result = a1; *a1 = 0.0; *a2 = 0.0; return result; } //----- (00831BE0) -------------------------------------------------------- char __stdcall sub_831BE0(int a1) { return 1; } //----- (00831BF0) -------------------------------------------------------- int __thiscall sub_831BF0(void *this, int a2, int a3) { int v3; // esi v3 = sub_85BD60(this); (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 128))(v3); return v3; } //----- (00831C10) -------------------------------------------------------- char *sub_831C10() { return dword_BA44B0; } //----- (00831C20) -------------------------------------------------------- void *__thiscall sub_831C20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiInterpolator::`vftable'; sub_85BA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2326C: using guessed type void *NiInterpolator::`vftable'; //----- (00831C50) -------------------------------------------------------- unsigned int __thiscall sub_831C50(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA44B0); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00831CA0) -------------------------------------------------------- float *__thiscall sub_831CA0(void *this, int a2) { float *v2; // eax float *result; // eax float v4; // [esp+8h] [ebp-4h] v4 = *(float *)&this; (*(void (__stdcall **)(float *, void *))(*(_DWORD *)this + 152))(&v4, this); v2 = (float *)operator new(0x18u); if ( v2 ) result = sub_826240(v2, v4); else result = 0; return result; } //----- (00831CE0) -------------------------------------------------------- char __thiscall sub_831CE0(_DWORD *this, int a2, _DWORD **a3) { return sub_8311B0(this, a2, a3); } //----- (00831CF0) -------------------------------------------------------- char __thiscall sub_831CF0(float *this, int a2) { return sub_831330(this, a2); } //----- (00831D00) -------------------------------------------------------- float *__thiscall sub_831D00(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); *(_DWORD *)v1 = &NiFloatInterpController::`vftable'; return v1; } // A2330C: using guessed type void *NiFloatInterpController::`vftable'; //----- (00831D20) -------------------------------------------------------- char *sub_831D20() { return dword_BA44C8; } //----- (00831D30) -------------------------------------------------------- void __thiscall sub_831D30(void *this, float a2, int a3) { float v3; // edi void *v4; // ebx float *v5; // esi int v6; // eax char v7; // al v3 = a2; v4 = this; if ( a2 == 0.0 ) { v5 = 0; } else { v6 = (*(int (__thiscall **)(float))(*(_DWORD *)LODWORD(a2) + 4))(COERCE_FLOAT(LODWORD(a2))); if ( v6 ) { while ( (char *)v6 != dword_BA43B0 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = (float *)(v7 != 0 ? LODWORD(v3) : 0); } (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v4 + 152))(v4, &a2); sub_8263E0(v5, a2); } //----- (00831DA0) -------------------------------------------------------- unsigned int __thiscall sub_831DA0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831380(this, a2); v3 = sub_8784D0(*(int *)dword_BA44C8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00831DF0) -------------------------------------------------------- char __thiscall sub_831DF0(_DWORD *this, int a2) { return sub_8312C0(this, a2); } //----- (00831E00) -------------------------------------------------------- float *__thiscall sub_831E00(void *this, int a2) { float *v2; // eax float *result; // eax int v4; // [esp+0h] [ebp-Ch] int v5; // [esp+4h] [ebp-8h] int v6; // [esp+8h] [ebp-4h] (*(void (__stdcall **)(int *))(*(_DWORD *)this + 152))(&v4); v2 = (float *)operator new(0x20u); if ( v2 ) result = sub_81C7F0(v2, v4, v5, v6); else result = 0; return result; } //----- (00831E50) -------------------------------------------------------- int __thiscall sub_831E50(_DWORD *this, _DWORD *a2) { return sub_820450(this, a2); } //----- (00831E60) -------------------------------------------------------- float *__thiscall sub_831E60(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); *(_DWORD *)v1 = &NiPoint3InterpController::`vftable'; return v1; } // A233C4: using guessed type void *NiPoint3InterpController::`vftable'; //----- (00831E80) -------------------------------------------------------- char *sub_831E80() { return dword_BA44D0; } //----- (00831E90) -------------------------------------------------------- int __thiscall sub_831E90(void *this, int a2, int a3) { void *v3; // ebx _DWORD *v4; // esi int v5; // eax char v6; // al int v8; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] int v10; // [esp+14h] [ebp-4h] v3 = this; if ( a2 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v5 ) { while ( (char *)v5 != dword_BA4328 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (_DWORD *)(v6 != 0 ? a2 : 0); } else { v4 = 0; } (*(void (__thiscall **)(void *, int *))(*(_DWORD *)v3 + 152))(v3, &v8); return sub_81C630(v4, v8, v9, v10); } //----- (00831F10) -------------------------------------------------------- unsigned int __thiscall sub_831F10(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831380(this, a2); v3 = sub_8784D0(*(int *)dword_BA44D0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00831F60) -------------------------------------------------------- float *__thiscall sub_831F60(void *this, int a2) { float *v2; // eax float *result; // eax void *v4; // [esp+0h] [ebp-4h] v4 = this; (*(void (__stdcall **)(void **, void *))(*(_DWORD *)this + 152))(&v4, this); v2 = (float *)operator new(0x18u); if ( v2 ) result = sub_82BAC0(v2, (char)v4); else result = 0; return result; } //----- (00831FA0) -------------------------------------------------------- int __thiscall sub_831FA0(int *this, _DWORD *a2) { return sub_831250(this, a2); } //----- (00831FB0) -------------------------------------------------------- float *__thiscall sub_831FB0(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); *(_DWORD *)v1 = &NiBoolInterpController::`vftable'; return v1; } // A23484: using guessed type void *NiBoolInterpController::`vftable'; //----- (00831FD0) -------------------------------------------------------- char *sub_831FD0() { return dword_BA44D8; } //----- (00831FE0) -------------------------------------------------------- _DWORD *__thiscall sub_831FE0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 15); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00832030) -------------------------------------------------------- void __thiscall sub_832030(void *this, int a2, int a3) { int v3; // edi void *v4; // ebx int v5; // esi int v6; // eax char v7; // al v3 = a2; v4 = this; if ( a2 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v6 ) { while ( (char *)v6 != dword_BA4440 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = v7 != 0 ? v3 : 0; } else { v5 = 0; } (*(void (__thiscall **)(void *, int *))(*(_DWORD *)v4 + 152))(v4, &a2); sub_82B950(v5, a2); } //----- (00832090) -------------------------------------------------------- unsigned int __thiscall sub_832090(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_831380(this, a2); v3 = sub_8784D0(*(int *)dword_BA44D8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008320E0) -------------------------------------------------------- float *__thiscall sub_8320E0(float *this) { float *v1; // esi v1 = this; sub_831B80(this); *(_DWORD *)v1 = &NiKeyBasedInterpolator::`vftable'; return v1; } // A2353C: using guessed type void *NiKeyBasedInterpolator::`vftable'; //----- (00832100) -------------------------------------------------------- LONG __thiscall sub_832100(_DWORD *this) { *this = &NiKeyBasedInterpolator::`vftable'; return sub_831BA0(this); } // A2353C: using guessed type void *NiKeyBasedInterpolator::`vftable'; //----- (00832110) -------------------------------------------------------- unsigned int __thiscall sub_832110(int *this, signed int a2) { return sub_87FD80(this, a2); } //----- (00832120) -------------------------------------------------------- bool __thiscall sub_832120(void *this, int a2) { return sub_872A80(this, a2); } //----- (00832130) -------------------------------------------------------- char *sub_832130() { return dword_BA44E0; } //----- (00832140) -------------------------------------------------------- void *__thiscall sub_832140(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiKeyBasedInterpolator::`vftable'; sub_831BA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2353C: using guessed type void *NiKeyBasedInterpolator::`vftable'; //----- (00832170) -------------------------------------------------------- int __thiscall sub_832170(void *this, int a2, int a3) { void *v3; // esi unsigned __int8 v4; // bl v3 = this; v4 = (*(int (__stdcall **)(int))(*(_DWORD *)this + 156))(a3); return a2 * v4 + (*(int (__thiscall **)(void *, int))(*(_DWORD *)v3 + 152))(v3, a3); } //----- (008321B0) -------------------------------------------------------- void __thiscall sub_8321B0(void *this, float *a2, float *a3) { float *v3; // ebx float *v4; // edi void *v5; // esi unsigned __int16 (*v6)(void); // edx int v7; // ebx unsigned __int8 v8; // ST18_1 float *v9; // ecx float *v10; // [esp+Ch] [ebp-Ch] unsigned int v11; // [esp+10h] [ebp-8h] v3 = a3; v4 = a2; *a2 = 3.4028235e38; v5 = this; v6 = *(unsigned __int16 (**)(void))(*(_DWORD *)this + 136); *a3 = -3.4028235e38; v11 = 0; if ( v6() > 0u ) { do { (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 156))(v5, (unsigned __int16)v11); v10 = (float *)(*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 152))(v5, (unsigned __int16)v11); v7 = (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 140))(v5, (unsigned __int16)v11) - 1; v8 = (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 156))(v5, (unsigned __int16)v11); v9 = (float *)((*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 152))(v5, (unsigned __int16)v11) + v7 * v8); if ( v10 && v9 ) { if ( *a2 > (double)*v10 ) *a2 = *v10; if ( *a3 < (double)*v9 ) *a3 = *v9; } ++v11; } while ( v11 < (*(unsigned __int16 (__thiscall **)(void *))(*(_DWORD *)v5 + 136))(v5) ); v3 = a3; v4 = a2; } if ( 3.4028235e38 == *v4 && -3.4028235e38 == *v3 ) { *v4 = 0.0; *v3 = 0.0; } } //----- (008322E0) -------------------------------------------------------- unsigned int __thiscall sub_8322E0(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_831C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA44E0); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00832330) -------------------------------------------------------- int __thiscall sub_832330(int *this, void **a2) { sub_86C630(this, (signed int)a2); return sub_876290(a2); } //----- (00832350) -------------------------------------------------------- LONG __thiscall sub_832350(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NiFloatController::`vftable'; v2 = this[16]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[16] = 0; } v3 = v1[16]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_86C3C0(v1); } // A21574: using guessed type void *NiFloatController::`vftable'; //----- (008323B0) -------------------------------------------------------- int __thiscall sub_8323B0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { int v4; // eax int result; // eax v4 = this[16]; if ( v4 ) { *a2 = *(_DWORD *)(v4 + 8); *a3 = *(_DWORD *)(v4 + 16); *a4 = *(_BYTE *)(v4 + 20); result = *(_DWORD *)(v4 + 12); } else { *a2 = 0; *a3 = 0; *a4 = 0; result = 0; } return result; } //----- (00832400) -------------------------------------------------------- int __thiscall sub_832400(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_86C220(this, a2); v4 = v2[16]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (00832430) -------------------------------------------------------- int __thiscall sub_832430(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_86C590(this, a2); result = sub_875AD0(a2); v4 = v2[16]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[16] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (00832490) -------------------------------------------------------- char __thiscall sub_832490(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_86C250(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2[16] + 20))(a2); result = 1; } return result; } //----- (008324C0) -------------------------------------------------------- int __thiscall sub_8324C0(_DWORD *this, signed int a2) { _DWORD *v2; // esi v2 = this; sub_86C780(this, a2); return (*(int (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 44))(a2, v2[16]); } //----- (008324F0) -------------------------------------------------------- char __thiscall sub_8324F0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_86BDE0(this, a2); if ( result ) result = (*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 16) + 28))(*(_DWORD *)(a2 + 64)) != 0; return result; } //----- (00832530) -------------------------------------------------------- char __thiscall sub_832530(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi LONG v4; // eax int v5; // ecx int v6; // esi LONG v7; // edi v3 = this; LOBYTE(v4) = sub_86C130(this, a2, a3); v5 = v3[16]; if ( v5 ) { v4 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 8))(a3); v6 = *(_DWORD *)(a2 + 64); v7 = v4; if ( v6 != v4 ) { if ( v6 ) { v4 = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v4 ) { if ( v6 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(a2 + 64) = v7; if ( v7 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } return v4; } //----- (008325A0) -------------------------------------------------------- unsigned int __thiscall sub_8325A0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA44E8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008325F0) -------------------------------------------------------- int __thiscall sub_8325F0(_DWORD *this) { return this[16]; } //----- (00832600) -------------------------------------------------------- bool __thiscall sub_832600(_DWORD *this, int a2) { return sub_8312C0(this, a2) != 0; } //----- (00832620) -------------------------------------------------------- int __thiscall sub_832620(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_831300(this, (signed int)a2); return sub_876A50(a2, (const char *)v2[16]); } //----- (00832650) -------------------------------------------------------- errno_t __thiscall sub_832650(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi const char *v4; // ebx unsigned int v5; // kr00_4 char *v6; // eax v3 = this; sub_8311B0(this, a2, a3); v4 = (const char *)v3[16]; operator delete(*(void **)(a2 + 64)); v5 = strlen(v4); v6 = (char *)operator new(v5 + 1); *(_DWORD *)(a2 + 64) = v6; return strcpy_s(v6, v5 + 1, v4); } //----- (008326B0) -------------------------------------------------------- char __thiscall sub_8326B0(_DWORD *this, int a2) { _DWORD **v2; // edi int v3; // esi LONG v4; // eax int v5; // ebx int v6; // esi int v7; // edi v2 = (_DWORD **)a2; v3 = (int)this; sub_831220(this, a2); LOBYTE(v4) = sub_8C4C90(*v2, v3, &a2); if ( *(_DWORD *)(v3 + 48) ) { v5 = a2; if ( *(_DWORD *)(a2 + 48) ) { LOBYTE(v4) = sub_8C4C90(*v2, *(_DWORD *)(v3 + 68), &a2); v6 = *(_DWORD *)(v5 + 68); v7 = a2; if ( v6 != a2 ) { if ( v6 ) { v4 = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v4 ) { if ( v6 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(v5 + 68) = v7; if ( v7 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } } return v4; } //----- (00832730) -------------------------------------------------------- char __thiscall sub_832730(float *this, int a2) { float *v2; // edi int v4; // ecx const char *v5; // eax const char *v6; // ecx v2 = this; if ( !sub_831330(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 17); if ( v4 ) { if ( !*(_DWORD *)(a2 + 68) ) return 0; if ( v4 ) goto LABEL_20; } if ( *(_DWORD *)(a2 + 68) ) return 0; if ( v4 ) { LABEL_20: if ( *(_DWORD *)(a2 + 68) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 68)) ) return 0; } v5 = (const char *)*((_DWORD *)v2 + 16); if ( v5 ) { if ( !*(_DWORD *)(a2 + 64) ) return 0; if ( v5 ) goto LABEL_21; } if ( *(_DWORD *)(a2 + 64) ) return 0; if ( v5 ) { LABEL_21: v6 = *(const char **)(a2 + 64); if ( !v6 || !strcmp(v5, v6) ) return 1; return 0; } return 1; } //----- (008327E0) -------------------------------------------------------- int __thiscall sub_8327E0(int this) { int v1; // edi int result; // eax int v3; // esi int v4; // ebx v1 = this; result = sub_85AA60(*(_DWORD **)(this + 48), *(const char **)(this + 64)); v3 = *(_DWORD *)(v1 + 68); v4 = result; if ( v3 != result ) { if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } } *(_DWORD *)(v1 + 68) = v4; if ( v4 ) result = InterlockedIncrement((volatile LONG *)(v4 + 4)); } return result; } //----- (00832830) -------------------------------------------------------- char *sub_832830() { return dword_BA44F0; } //----- (00832840) -------------------------------------------------------- float *__thiscall sub_832840(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); v1[16] = 0.0; *(_DWORD *)v1 = &NiExtraDataController::`vftable'; v1[17] = 0.0; return v1; } // A23614: using guessed type void *NiExtraDataController::`vftable'; //----- (00832860) -------------------------------------------------------- LONG __thiscall sub_832860(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 int v3; // edi int v4; // edi v1 = this; v2 = (void *)this[16]; *this = &NiExtraDataController::`vftable'; operator delete(v2); v3 = v1[17]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_86C3C0(v1); } // A23614: using guessed type void *NiExtraDataController::`vftable'; //----- (008328D0) -------------------------------------------------------- void __thiscall sub_8328D0(_DWORD *this, _DWORD *a2) { int v2; // esi int v3; // edi v2 = (int)this; v3 = this[17]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v2 + 68) = 0; } sub_86C4F0(v2, a2); if ( *(_DWORD *)(v2 + 48) ) sub_8327E0(v2); } //----- (00832920) -------------------------------------------------------- char __thiscall sub_832920(void *this, _DWORD *a2) { void *v2; // ebx int v3; // eax int v5; // esi const char *v6; // eax v2 = this; if ( !a2 ) return 0; v3 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( !v3 ) return 0; while ( (char *)v3 != dword_BA4568 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } if ( !*((_DWORD *)v2 + 16) ) return 0; v5 = 0; if ( !a2[5] ) return 0; while ( 1 ) { v6 = (const char *)sub_879520(*(_DWORD **)(a2[4] + 4 * v5)); if ( v6 ) { if ( !strcmp(*((const char **)v2 + 16), v6) ) break; } if ( (unsigned int)++v5 >= a2[5] ) return 0; } return 1; } //----- (008329C0) -------------------------------------------------------- int __thiscall sub_8329C0(void *this, int a2) { int v2; // esi int result; // eax v2 = (int)this; result = nullsub_32(a2); if ( *(_DWORD *)(v2 + 48) ) result = sub_8327E0(v2); return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008329F0) -------------------------------------------------------- void *__thiscall sub_8329F0(void *this, char a2) { void *v2; // esi v2 = this; sub_832860(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00832A20) -------------------------------------------------------- unsigned int __thiscall sub_832A20(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_831380(this, a2); v4 = sub_8784D0(*(int *)dword_BA44F0); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878740((int)"Extra Data Name", *((_DWORD *)v3 + 16)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (00832AA0) -------------------------------------------------------- void __thiscall sub_832AA0(float *this, float *a2, float *a3) { if ( 3.4028235e38 != *a2 || -3.4028235e38 != *a3 ) { *a2 = this[3]; *a3 = this[4]; } else { *a2 = 0.0; *a3 = 0.0; } } //----- (00832AF0) -------------------------------------------------------- int __thiscall sub_832AF0(void *this, int a2) { void *v2; // esi bool v3; // zf int (__thiscall *v4)(void *, int); // edx int v5; // ebx int result; // eax int v7; // ebx int v8; // [esp+0h] [ebp-Ch] v2 = this; v3 = (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)this + 156))(v8) == 0; v4 = *(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 144); if ( v3 ) { v7 = v4(v2, a2); result = 4 * (*(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 140))(v2, a2) * v7; } else { v5 = v4(v2, a2); result = 2 * (*(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 140))(v2, a2) * v5; } return result; } //----- (00832B60) -------------------------------------------------------- int __thiscall sub_832B60(char **this, int a2) { char **v2; // esi int result; // eax v2 = this; if ( (unsigned __int16)a2 < (*((unsigned __int16 (**)(void))*this + 34))() && v2[5] && (*((int (__thiscall **)(char **, int))*v2 + 41))(v2, a2) != 0xFFFF ) { result = *(_DWORD *)sub_6FE7C0(v2[6]); } else { result = 0; } return result; } //----- (00832BB0) -------------------------------------------------------- char __thiscall sub_832BB0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx int v5; // ecx v2 = this; result = sub_81C190(this, a2); if ( result ) { v4 = v2[5]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); v5 = v2[6]; if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); result = 1; } return result; } //----- (00832BF0) -------------------------------------------------------- char __thiscall sub_832BF0(float *this, int a2) { float *v2; // edi int v4; // ecx int v5; // ecx v2 = this; if ( !sub_872A80(this, a2) ) return 0; if ( *(float *)(a2 + 12) == v2[3] && *(float *)(a2 + 16) == v2[4] ) return 1; v4 = *((_DWORD *)v2 + 5); if ( v4 ) { if ( !*(_DWORD *)(a2 + 20) ) return 0; if ( v4 ) goto LABEL_20; } if ( *(_DWORD *)(a2 + 20) ) return 0; if ( v4 ) { LABEL_20: if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 20)) ) return 0; } v5 = *((_DWORD *)v2 + 6); if ( !v5 ) goto LABEL_14; if ( *(_DWORD *)(a2 + 24) ) { if ( v5 ) { LABEL_16: (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 28))(*(_DWORD *)(a2 + 24)); return 0; } LABEL_14: if ( *(_DWORD *)(a2 + 24) || !v5 ) return 0; goto LABEL_16; } return 0; } //----- (00832C90) -------------------------------------------------------- float *__thiscall sub_832C90(float *this, int a2, int a3) { float *v3; // esi v3 = this; sub_831B80(this); *(_DWORD *)v3 = &NiBSplineInterpolator::`vftable'; v3[3] = 3.4028235e38; v3[4] = -3.4028235e38; *((_DWORD *)v3 + 5) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); *((_DWORD *)v3 + 6) = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); return v3; } // A236DC: using guessed type void *NiBSplineInterpolator::`vftable'; //----- (00832CF0) -------------------------------------------------------- char *sub_832CF0() { return dword_BA44F8; } //----- (00832D00) -------------------------------------------------------- LONG __thiscall sub_832D00(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NiBSplineInterpolator::`vftable'; v2 = this[6]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[5]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_831BA0(v1); } // A236DC: using guessed type void *NiBSplineInterpolator::`vftable'; //----- (00832D60) -------------------------------------------------------- int __thiscall sub_832D60(void *this, int a2, _DWORD **a3) { void *v3; // esi int result; // eax int v5; // ebx void *v6; // esi int v7; // esi int v8; // ebx v3 = this; result = sub_872AA0(this, a2, a3); *(float *)(a2 + 16) = *((float *)v3 + 4); *(float *)(a2 + 12) = *((float *)v3 + 3); v5 = *(_DWORD *)(a2 + 20); if ( v5 != *((_DWORD *)v3 + 5) ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = *((_DWORD *)v3 + 5); *(_DWORD *)(a2 + 20) = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); } v6 = (void *)*((_DWORD *)v3 + 6); if ( v6 ) { result = sub_85BAA0(v6, a3); v7 = *(_DWORD *)(a2 + 24); v8 = result; if ( v7 != result ) { if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { if ( v7 ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } *(_DWORD *)(a2 + 24) = v8; if ( v8 ) result = InterlockedIncrement((volatile LONG *)(v8 + 4)); } } return result; } //----- (00832E10) -------------------------------------------------------- int __thiscall sub_832E10(int *this, signed int a2) { _DWORD *v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ebx int result; // eax int v13; // edi int v14; // ebx v2 = (_DWORD *)a2; v3 = this; sub_87FD80(this, a2); v4 = v2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); v7 = v2[88]; v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); v10 = sub_876300(v2); v11 = v3[5]; a2 = v10; if ( v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v10 = a2; } v3[5] = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } result = sub_876300(v2); v13 = v3[6]; v14 = result; if ( v13 != result ) { if ( v13 ) { result = InterlockedDecrement((volatile LONG *)(v13 + 4)); if ( !result ) { if ( v13 ) result = (**(int (__thiscall ***)(int, signed int))v13)(v13, 1); } } v3[6] = v14; if ( v14 ) result = InterlockedIncrement((volatile LONG *)(v14 + 4)); } return result; } //----- (00832EF0) -------------------------------------------------------- int __thiscall sub_832EF0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, _DWORD *, signed int, int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_81C180(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 4, 4, &a2, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[5]); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[6]); } //----- (00832F70) -------------------------------------------------------- _DWORD *__thiscall sub_832F70(void *this, char a2) { _DWORD *v2; // edi int v3; // esi int v4; // esi v2 = this; *(_DWORD *)this = &NiBSplineInterpolator::`vftable'; v3 = *((_DWORD *)this + 6); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v2[5]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_831BA0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A236DC: using guessed type void *NiBSplineInterpolator::`vftable'; //----- (00832FF0) -------------------------------------------------------- unsigned int __thiscall sub_832FF0(float *this, int a2) { _DWORD *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx unsigned int result; // eax int v11; // ecx int v12; // ecx v2 = (_DWORD *)a2; v3 = this; sub_831C50(this, a2); v4 = sub_8784D0(*(int *)dword_BA44F8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fStartTime", v3[3]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"m_fEndTime", v3[4]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); result = sub_823870(v2, v9, &a2); v11 = *((_DWORD *)v3 + 5); if ( v11 ) result = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v11 + 32))(v2); v12 = *((_DWORD *)v3 + 6); if ( v12 ) result = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v12 + 32))(v2); return result; } //----- (008330D0) -------------------------------------------------------- void *__thiscall sub_8330D0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A237C0: using guessed type void *NiTArray::`vftable'; //----- (00833100) -------------------------------------------------------- _DWORD *__thiscall sub_833100(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTArray::`vftable'; this[2] = 1; this[5] = 1; this[3] = 0; this[4] = 0; this[1] = operator new(4u); v1[6] = &NiTArray::`vftable'; v1[8] = 1; v1[11] = 1; v1[9] = 0; v1[10] = 0; v1[7] = operator new(4u); return v1; } // A237C0: using guessed type void *NiTArray::`vftable'; //----- (00833170) -------------------------------------------------------- void __thiscall sub_833170(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi unsigned int i; // edi unsigned int j; // eax unsigned int k; // eax void *v6; // ST04_4 void *v7; // ST00_4 v1 = this; v2 = 0; if ( this[3] ) { do operator delete(*(void **)(v1[1] + 4 * v2++)); while ( v2 < v1[3] ); } for ( i = 0; i < v1[9]; ++i ) operator delete(*(void **)(v1[7] + 4 * i)); for ( j = 0; j < v1[3]; ++j ) *(_DWORD *)(v1[1] + 4 * j) = 0; v1[3] = 0; v1[4] = 0; for ( k = 0; k < v1[9]; ++k ) *(_DWORD *)(v1[7] + 4 * k) = 0; v1[9] = 0; v1[10] = 0; v6 = (void *)v1[7]; v1[6] = &NiTArray::`vftable'; operator delete(v6); v7 = (void *)v1[1]; *v1 = &NiTArray::`vftable'; operator delete(v7); } // A237C0: using guessed type void *NiTArray::`vftable'; //----- (00833220) -------------------------------------------------------- void __thiscall sub_833220(_DWORD *this, int a2) { unsigned int v2; // eax int v3; // esi _DWORD **v4; // edx _DWORD *v5; // ebx unsigned int v6; // eax _DWORD **v7; // edx unsigned int v8; // edx int v9; // edx int v10; // edi unsigned int v11; // esi int v12; // edx int v13; // esi int v14; // edi v2 = 0; if ( this[3] ) { v3 = this[1]; v4 = (_DWORD **)this[1]; while ( 1 ) { v5 = *v4; if ( *v4 ) { if ( v5[3] == a2 ) break; } ++v2; ++v4; if ( v2 >= this[3] ) goto LABEL_6; } v8 = this[3]; if ( v2 < v8 ) { v9 = v8 - 1; this[3] = v9; v10 = *(_DWORD *)(v3 + 4 * v2); *(_DWORD *)(v3 + 4 * v2) = *(_DWORD *)(v3 + 4 * v9); *(_DWORD *)(this[1] + 4 * this[3]) = 0; if ( v10 ) { --this[4]; operator delete(v5); return; } } } else { LABEL_6: v6 = 0; if ( !this[9] ) return; v7 = (_DWORD **)this[7]; while ( 1 ) { v5 = *v7; if ( *v7 ) { if ( v5[3] == a2 ) break; } ++v6; ++v7; if ( v6 >= this[9] ) return; } v11 = this[9]; if ( v6 < v11 ) { v12 = this[7]; v13 = v11 - 1; this[9] = v13; v14 = *(_DWORD *)(v12 + 4 * v6); *(_DWORD *)(v12 + 4 * v6) = *(_DWORD *)(v12 + 4 * v13); *(_DWORD *)(this[7] + 4 * this[9]) = 0; if ( v14 ) --this[10]; } } operator delete(v5); } //----- (008332F0) -------------------------------------------------------- void __thiscall sub_8332F0(_DWORD *this, int a2) { unsigned int v2; // eax int v3; // esi _DWORD **v4; // edx _DWORD *v5; // ebx unsigned int v6; // edx int v7; // edx int v8; // edi v2 = 0; if ( this[3] ) { v3 = this[1]; v4 = (_DWORD **)this[1]; while ( 1 ) { v5 = *v4; if ( *v4 ) { if ( v5[3] == a2 ) break; } ++v2; ++v4; if ( v2 >= this[3] ) return; } v6 = this[3]; if ( v2 < v6 ) { v7 = v6 - 1; this[3] = v7; v8 = *(_DWORD *)(v3 + 4 * v2); *(_DWORD *)(v3 + 4 * v2) = *(_DWORD *)(v3 + 4 * v7); *(_DWORD *)(this[1] + 4 * this[3]) = 0; if ( v8 ) --this[4]; } operator delete(v5); } } //----- (00833360) -------------------------------------------------------- void __thiscall sub_833360(_DWORD *this, int a2) { unsigned int v2; // esi unsigned int v3; // eax _DWORD **v4; // edx _DWORD *v5; // ebx int v6; // esi int v7; // edx int v8; // edi v2 = this[9]; v3 = 0; if ( v2 ) { v4 = (_DWORD **)this[7]; while ( 1 ) { v5 = *v4; if ( *v4 ) { if ( v5[3] == a2 ) break; } ++v3; ++v4; if ( v3 >= v2 ) return; } if ( v3 < v2 ) { v6 = v2 - 1; v7 = this[7]; this[9] = v6; v8 = *(_DWORD *)(v7 + 4 * v3); *(_DWORD *)(v7 + 4 * v3) = *(_DWORD *)(v7 + 4 * v6); *(_DWORD *)(this[7] + 4 * this[9]) = 0; if ( v8 ) --this[10]; } operator delete(v5); } } //----- (008333D0) -------------------------------------------------------- unsigned int __thiscall sub_8333D0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi void *i; // eax int v4; // eax void *v5; // ecx int v6; // eax unsigned int j; // eax int v8; // edi void *k; // eax int v10; // edx void *v11; // ecx int v12; // eax unsigned int result; // eax v1 = this; v2 = 0; if ( this[3] ) { if ( this[3] > 0u ) goto LABEL_4; for ( i = 0; ; i = v5 ) { operator delete(i); if ( (unsigned int)++v2 >= v1[3] ) break; LABEL_4: v4 = v1[1]; v5 = *(void **)(v4 + 4 * v2); *(_DWORD *)(v4 + 4 * v2) = 0; if ( v5 ) --v1[4]; v6 = v1[3] - 1; if ( v2 == v6 ) v1[3] = v6; } } for ( j = 0; j < v1[3]; ++j ) *(_DWORD *)(v1[1] + 4 * j) = 0; v8 = 0; v1[3] = 0; v1[4] = 0; if ( v1[9] > 0u ) { if ( v1[9] > 0u ) goto LABEL_15; for ( k = 0; ; k = v11 ) { operator delete(k); if ( (unsigned int)++v8 >= v1[9] ) break; LABEL_15: v10 = v1[7]; v11 = *(void **)(v10 + 4 * v8); *(_DWORD *)(v10 + 4 * v8) = 0; if ( v11 ) --v1[10]; v12 = v1[9] - 1; if ( v8 == v12 ) v1[9] = v12; } } for ( result = 0; result < v1[9]; ++result ) *(_DWORD *)(v1[7] + 4 * result) = 0; v1[10] = 0; v1[9] = 0; return result; } //----- (00833490) -------------------------------------------------------- void __thiscall sub_833490(_DWORD *this, float a2) { _DWORD *v2; // esi unsigned int v3; // ecx unsigned int v4; // edx int v5; // ebx int v6; // eax unsigned int v7; // edi int v8; // eax unsigned int v9; // edi int v10; // eax signed int v11; // [esp+18h] [ebp-8h] int v12; // [esp+1Ch] [ebp-4h] v2 = this; v3 = this[3]; if ( v3 ) { v4 = 1; v11 = 1; v12 = 0; do { v5 = *(_DWORD *)(v12 + v2[1]); v6 = *(_DWORD *)(*(_DWORD *)(v5 + 12) + 172); if ( !v6 || *(_DWORD *)(v6 + 40) != 3 || *(_DWORD *)(v6 + 36) == 2 ) { v7 = v4; if ( v4 < v3 ) { do { v8 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2[1] + 4 * v7) + 12) + 172); if ( !v8 || *(_DWORD *)(v8 + 40) != 3 || *(_DWORD *)(v8 + 36) == 2 ) sub_836C10(a2, v5, *(_DWORD *)(v2[1] + 4 * v7)); ++v7; } while ( v7 < v2[3] ); v4 = v11; } v9 = 0; if ( v2[9] ) { do { v10 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2[7] + 4 * v9) + 12) + 172); if ( !v10 || *(_DWORD *)(v10 + 40) != 3 || *(_DWORD *)(v10 + 36) == 2 ) sub_836C10(a2, v5, *(_DWORD *)(v2[7] + 4 * v9)); ++v9; } while ( v9 < v2[9] ); v4 = v11; } } v3 = v2[3]; v12 += 4; v11 = ++v4; } while ( v4 - 1 < v3 ); } } //----- (00833580) -------------------------------------------------------- unsigned int __stdcall sub_833580(_DWORD *a1, _DWORD *a2, _DWORD *a3, int a4, int a5) { _DWORD *v5; // eax int v6; // ecx int v7; // edx unsigned int v8; // edi if ( (_BYTE)a3 ) sub_835F20(a1, 0); v5 = operator new(0x18u); if ( v5 ) { v6 = a4; v7 = a5; v5[2] = a1; v5[3] = a1; v5[4] = v6; v5[5] = v7; *(_BYTE *)v5 = 0; v5[1] = 2; a3 = v5; } else { a3 = 0; } v8 = a2[3]; if ( v8 >= a2[2] ) sub_8237A0(a2, v8 + a2[5]); return sub_823870(a2, v8, &a3); } //----- (00833600) -------------------------------------------------------- unsigned int __thiscall sub_833600(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5) { return sub_833580(a2, this, a3, a4, a5); } //----- (00833620) -------------------------------------------------------- unsigned int __thiscall sub_833620(_DWORD *this, _DWORD *a2, _DWORD *a3, int a4, int a5) { return sub_833580(a2, this + 6, a3, a4, a5); } //----- (00833640) -------------------------------------------------------- void sub_833640() { BOOL (__cdecl **v0)(float, int, int, int, int); // esi char (__cdecl **v1)(float, int, int, int, int, int, int, char, int, int); // edi BOOL (__cdecl **v2)(float, int, int, int, int, int, int); // ST24_4 char (__cdecl **v3)(float, int, int, int, int, int, int, int, int, char, int, int); // eax if ( !byte_BA4500 ) { byte_BA4500 = 1; sub_875C70((int)"NiCollisionData", (int)sub_833E80); dword_BA452C = (int)sub_840F50; dword_BA4530 = (int)sub_83A610; dword_BA453C = (int)sub_838C30; dword_BA4534 = (int)sub_835C60; dword_BA4528[0] = (int)sub_835460; dword_BA4538 = (int)sub_839310; v0 = (BOOL (__cdecl **)(float, int, int, int, int))operator new(0x90u); v0[24] = (BOOL (__cdecl *)(float, int, int, int, int))sub_839050; v0[25] = (BOOL (__cdecl *)(float, int, int, int, int))sub_839050; v0[26] = (BOOL (__cdecl *)(float, int, int, int, int))sub_839050; v0[29] = (BOOL (__cdecl *)(float, int, int, int, int))sub_839050; *v0 = sub_834D80; v0[1] = 0; v0[2] = 0; v0[3] = 0; v0[4] = 0; v0[5] = 0; v0[6] = (BOOL (__cdecl *)(float, int, int, int, int))sub_8410D0; v0[7] = (BOOL (__cdecl *)(float, int, int, int, int))sub_83AE20; v0[8] = (BOOL (__cdecl *)(float, int, int, int, int))sub_83C050; v0[9] = 0; v0[10] = 0; v0[11] = 0; v0[12] = sub_8399B0; v0[13] = 0; v0[14] = sub_839AD0; v0[15] = 0; v0[16] = 0; v0[17] = 0; v0[18] = 0; v0[19] = 0; v0[20] = 0; v0[21] = 0; v0[22] = 0; v0[23] = 0; v0[27] = 0; v0[28] = (BOOL (__cdecl *)(float, int, int, int, int))sub_8390A0; v0[30] = (BOOL (__cdecl *)(float, int, int, int, int))sub_837260; v0[31] = (BOOL (__cdecl *)(float, int, int, int, int))sub_837320; v0[32] = (BOOL (__cdecl *)(float, int, int, int, int))sub_837470; v0[33] = 0; v0[34] = 0; v0[35] = (BOOL (__cdecl *)(float, int, int, int, int))sub_837580; v1 = (char (__cdecl **)(float, int, int, int, int, int, int, char, int, int))operator new(0x90u); *v1 = sub_834EC0; v1[1] = 0; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = sub_83D5D0; v1[7] = sub_8417E0; v1[8] = sub_83AB10; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[24] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_839180; v1[25] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_839180; v1[26] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_839180; v1[27] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_839180; v1[29] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_839180; v1[12] = sub_8397C0; v1[13] = 0; v1[14] = sub_8398A0; v1[15] = 0; v1[16] = 0; v1[17] = 0; v1[18] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; v1[23] = 0; v1[28] = (char (__cdecl *)(float, int, int, int, int, int, int, char, int, int))sub_8391F0; v1[30] = sub_8377B0; v1[31] = sub_8379F0; v1[32] = sub_837E80; v1[33] = 0; v1[34] = 0; v1[35] = sub_838440; v2 = (BOOL (__cdecl **)(float, int, int, int, int, int, int))operator new(0x18u); *v2 = sub_835500; v2[1] = (BOOL (__cdecl *)(float, int, int, int, int, int, int))sub_83C1B0; v2[2] = (BOOL (__cdecl *)(float, int, int, int, int, int, int))sub_839C00; v2[3] = 0; v2[4] = (BOOL (__cdecl *)(float, int, int, int, int, int, int))sub_839120; v2[5] = (BOOL (__cdecl *)(float, int, int, int, int, int, int))sub_837650; v3 = (char (__cdecl **)(float, int, int, int, int, int, int, int, int, char, int, int))operator new(0x18u); *v3 = sub_835680; v3[1] = sub_83D6F0; v3[2] = sub_83A040; v3[3] = 0; v3[4] = (char (__cdecl *)(float, int, int, int, int, int, int, int, int, char, int, int))sub_839280; v3[5] = sub_838700; dword_BA4544 = v1; dword_BA4540 = v0; dword_BA4548 = v2; dword_BA454C = v3; dword_BA4550 = (int (__cdecl *)(_DWORD, _DWORD))sub_836CB0; dword_BA4554 = (int (__cdecl *)(_DWORD, _DWORD))sub_836CE0; dword_BA4558 = (int (*)(void))sub_836D30; } } // BA4500: using guessed type char byte_BA4500; // BA4528: using guessed type int dword_BA4528[]; // BA452C: using guessed type int dword_BA452C; // BA4530: using guessed type int dword_BA4530; // BA4534: using guessed type int dword_BA4534; // BA4538: using guessed type int dword_BA4538; // BA453C: using guessed type int dword_BA453C; // BA4550: using guessed type int (__cdecl *dword_BA4550)(_DWORD, _DWORD); // BA4554: using guessed type int (__cdecl *dword_BA4554)(_DWORD, _DWORD); // BA4558: using guessed type int (*dword_BA4558)(void); //----- (00833900) -------------------------------------------------------- void sub_833900() { if ( byte_BA4500 ) { byte_BA4500 = 0; sub_875C90((int)"NiCollisionData"); dword_BA452C = 0; dword_BA4530 = 0; dword_BA453C = 0; dword_BA4534 = 0; dword_BA4528[0] = 0; dword_BA4538 = 0; operator delete(dword_BA4540); operator delete(dword_BA4544); operator delete(dword_BA4548); operator delete(dword_BA454C); dword_BA4540 = 0; dword_BA4544 = 0; dword_BA4548 = 0; dword_BA454C = 0; dword_BA4550 = 0; dword_BA4554 = 0; dword_BA4558 = 0; } } // BA4500: using guessed type char byte_BA4500; // BA4528: using guessed type int dword_BA4528[]; // BA452C: using guessed type int dword_BA452C; // BA4530: using guessed type int dword_BA4530; // BA4534: using guessed type int dword_BA4534; // BA4538: using guessed type int dword_BA4538; // BA453C: using guessed type int dword_BA453C; // BA4550: using guessed type int (__cdecl *dword_BA4550)(_DWORD, _DWORD); // BA4554: using guessed type int (__cdecl *dword_BA4554)(_DWORD, _DWORD); // BA4558: using guessed type int (*dword_BA4558)(void); //----- (008339D0) -------------------------------------------------------- bool __thiscall sub_8339D0(_DWORD **this, int a2) { return sub_872AF0(this, a2) != 0; } //----- (008339F0) -------------------------------------------------------- _DWORD *__thiscall sub_8339F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // edx v2 = this; sub_872BE0(this, a2); v2[16] = 0; v2[17] = 0; *((_WORD *)v2 + 36) = 0; *v2 = &NiCollisionData::`vftable'; v2[3] = dword_BA45C0; v2[4] = dword_BA45C4; v2[5] = dword_BA45C8; v2[6] = dword_BA45C0; v2[7] = dword_BA45C4; v3 = dword_BA45C8; v2[11] = 0; v2[12] = 0; v2[13] = 0; v2[14] = 0; v2[15] = 0; *((_BYTE *)v2 + 78) = 0; v2[8] = v3; v2[9] = 2; v2[10] = 3; *((_WORD *)v2 + 38) = 0; return v2; } // A237DC: using guessed type void *NiCollisionData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00833A80) -------------------------------------------------------- char *sub_833A80() { return dword_BA450C; } //----- (00833A90) -------------------------------------------------------- _DWORD *__thiscall sub_833A90(_DWORD *this) { _DWORD *v1; // esi int v2; // edx v1 = this; sub_872BE0(this, 0); v1[16] = 0; v1[17] = 0; *((_WORD *)v1 + 36) = 0; *v1 = &NiCollisionData::`vftable'; v1[3] = dword_BA45C0; v1[4] = dword_BA45C4; v1[5] = dword_BA45C8; v1[6] = dword_BA45C0; v1[7] = dword_BA45C4; v2 = dword_BA45C8; *((_WORD *)v1 + 38) = 0; v1[11] = 0; v1[12] = 0; v1[13] = 0; v1[14] = 0; v1[15] = 0; *((_BYTE *)v1 + 78) = 0; v1[8] = v2; v1[9] = 2; v1[10] = 3; return v1; } // A237DC: using guessed type void *NiCollisionData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00833B10) -------------------------------------------------------- LONG __thiscall sub_833B10(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 int v3; // ecx int v4; // ecx void (__stdcall ***v5)(signed int); // ecx v1 = this; v2 = (void *)this[16]; *this = &NiCollisionData::`vftable'; operator delete(v2); operator delete((void *)v1[17]); v3 = v1[11]; if ( v3 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 8))(1); v4 = v1[12]; if ( v4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v4 + 8))(1); v5 = (void (__stdcall ***)(signed int))v1[13]; if ( v5 ) (**v5)(1); v1[13] = 0; *v1 = &NiCollisionObject::`vftable'; return sub_85BA80(v1); } // A237DC: using guessed type void *NiCollisionData::`vftable'; // A25884: using guessed type void *NiCollisionObject::`vftable'; //----- (00833B70) -------------------------------------------------------- int __thiscall sub_833B70(int this, float a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v10; // esi _DWORD *v11; // eax _DWORD *v12; // eax v10 = this; *(float *)(*(_DWORD *)(this + 52) + 4) = a2; v11 = *(_DWORD **)(this + 52); v11[4] = *(_DWORD *)(this + 24); v11[5] = *(_DWORD *)(this + 28); v11[6] = *(_DWORD *)(this + 32); sub_844C10(*(float **)(this + 52), (float *)(*(_DWORD *)(this + 8) + 104)); *(float *)(*(_DWORD *)(a3 + 52) + 4) = a2; v12 = *(_DWORD **)(a3 + 52); v12[4] = *(_DWORD *)(a3 + 24); v12[5] = *(_DWORD *)(a3 + 28); v12[6] = *(_DWORD *)(a3 + 32); sub_844C10(*(float **)(a3 + 52), (float *)(a7 + 104)); return (*(int (__stdcall **)(_DWORD, int, int, int, int, int, int, int))(**(_DWORD **)(v10 + 52) + 8))( *(_DWORD *)(a3 + 52), a4, a5, a6, a7, a8, a9, a10); } //----- (00833C10) -------------------------------------------------------- void __thiscall sub_833C10(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx int v4; // ecx int v5; // eax int v6; // ecx v2 = this; v3 = this[11]; if ( v3 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 8))(1); v4 = v2[12]; if ( v4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v4 + 8))(1); v2[11] = a2; if ( a2 ) { v5 = (*(int (**)(void))(*(_DWORD *)a2 + 24))(); v6 = v2[2]; v2[12] = v5; if ( v6 ) (*(void (__thiscall **)(int, _DWORD, int))(*(_DWORD *)v5 + 20))(v5, v2[11], v6 + 104); } else { v2[12] = 0; } } //----- (00833C80) -------------------------------------------------------- void __thiscall sub_833C80(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax v2 = this; (*(void (__thiscall **)(_DWORD *, _DWORD))(*this + 60))(this, *a2); v2[9] = a2[1]; if ( a2[2] ) { v3 = sub_837030(a2[3]); sub_833C10(v2, v3); } } //----- (00833CC0) -------------------------------------------------------- char *__stdcall sub_833CC0(int ArgList, int a2) { size_t v2; // edi char *v3; // esi char *result; // eax v2 = strlen((const char *)ArgList) + 17; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = USE_OBB", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = USE_TRI", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = USE_ABV", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = NOTEST", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = USE_NIBOUND", ArgList); result = v3; break; default: sub_7FF6E0(v3, v2, "%s = UNKNOWN!!!", ArgList); result = v3; break; } return result; } //----- (00833DB0) -------------------------------------------------------- char *__stdcall sub_833DB0(int ArgList, int a2) { size_t v2; // edi char *v3; // esi char *result; // eax v2 = strlen((const char *)ArgList) + 32; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = PROPAGATE_ON_SUCCESS", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = PROPAGATE_ON_FAILURE", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = PROPAGATE_ALWAYS", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = PROPAGATE_NEVER", ArgList); result = v3; break; default: sub_7FF6E0(v3, v2, "%s = UNKNOWN!!!", ArgList); result = v3; break; } return result; } //----- (00833E80) -------------------------------------------------------- _DWORD *sub_833E80() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x50u); if ( v0 ) result = sub_833A90(v0); else result = 0; return result; } //----- (00833EA0) -------------------------------------------------------- void *__thiscall sub_833EA0(void *this, char a2) { void *v2; // esi v2 = this; sub_833B10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00833ED0) -------------------------------------------------------- int __stdcall sub_833ED0(int a1) { int result; // eax result = a1; if ( a1 ) { while ( 1 ) { result = *(_DWORD *)(result + 32); if ( !result ) break; if ( *(_DWORD *)(result + 172) ) return result; } } return 0; } //----- (00833F00) -------------------------------------------------------- int __thiscall sub_833F00(int this) { int v1; // esi int result; // eax int v3; // eax int v4; // edx int v5; // eax float *v6; // edi float *v7; // eax float v8; // ecx float v9; // edx float *v10; // eax char v11; // [esp+8h] [ebp-18h] float v12; // [esp+14h] [ebp-Ch] float v13; // [esp+18h] [ebp-8h] int v14; // [esp+1Ch] [ebp-4h] v1 = this; result = *(_DWORD *)(this + 44); if ( result ) result = (*(int (__stdcall **)(int, int))(**(_DWORD **)(this + 48) + 20))(result, *(_DWORD *)(this + 8) + 104); if ( byte_BA4508 ) { v3 = *(_DWORD *)(v1 + 8); v4 = *(_DWORD *)(v3 + 32); if ( v4 ) { if ( !v3 ) goto LABEL_18; v5 = *(_DWORD *)(v3 + 32); if ( !v4 ) goto LABEL_18; if ( !*(_DWORD *)(v4 + 172) ) v5 = sub_833ED0(v4); if ( !v5 || (v6 = *(float **)(v5 + 172)) == 0 ) { LABEL_18: v10 = sub_85DA90((float *)(v4 + 104), (float *)&v11, (float *)(v1 + 12)); *(float *)(v1 + 24) = *v10; *(float *)(v1 + 28) = v10[1]; result = *((_DWORD *)v10 + 2); *(_DWORD *)(v1 + 32) = result; *(_WORD *)(v1 + 72) = 257; return result; } v7 = sub_85DA90((float *)(v4 + 104), (float *)&v11, (float *)(v1 + 12)); v12 = v6[6] + *v7; v8 = v12; v13 = v6[7] + v7[1]; v9 = v13; *(float *)&v14 = v6[8] + v7[2]; result = v14; } else { v8 = *(float *)(v1 + 12); v9 = *(float *)(v1 + 16); result = *(_DWORD *)(v1 + 20); } *(float *)(v1 + 24) = v8; *(float *)(v1 + 28) = v9; *(_DWORD *)(v1 + 32) = result; } *(_WORD *)(v1 + 72) = 257; return result; } // BA4508: using guessed type char byte_BA4508; //----- (00833FF0) -------------------------------------------------------- signed int __thiscall sub_833FF0(_BYTE *this, int *a2, int a3, int a4) { int v4; // eax int v5; // eax int (__cdecl *v6)(int *); // eax int v7; // eax bool v8; // zf int v9; // edx int v10; // ecx int v11; // esi int v12; // edi int v13; // eax int v14; // edx int v15; // eax int v16; // ecx int v17; // edx int v18; // eax int v19; // eax int (__cdecl *v20)(int *); // eax int v21; // eax int v22; // ecx int v23; // edx int v24; // eax int v25; // ecx int v26; // eax int v27; // ecx int v28; // edx int v29; // ecx int v30; // edx signed int result; // eax int v32; // [esp+Ch] [ebp-4Ch] int v33; // [esp+10h] [ebp-48h] int v34; // [esp+14h] [ebp-44h] int v35; // [esp+18h] [ebp-40h] int v36; // [esp+2Ch] [ebp-2Ch] int v37; // [esp+30h] [ebp-28h] int v38; // [esp+34h] [ebp-24h] int v39; // [esp+38h] [ebp-20h] int v40; // [esp+3Ch] [ebp-1Ch] int v41; // [esp+40h] [ebp-18h] int v42; // [esp+44h] [ebp-14h] int v43; // [esp+48h] [ebp-10h] int v44; // [esp+4Ch] [ebp-Ch] int v45; // [esp+50h] [ebp-8h] char v46; // [esp+57h] [ebp-1h] v44 = 0; v45 = 0; v46 = 1; if ( this[78] || a3 && a3 != 1 && a4 && a4 != 1 ) { v4 = a2[2]; if ( v4 ) { v5 = *(_DWORD *)(v4 + 172); if ( v5 ) { v6 = *(int (__cdecl **)(int *))(v5 + 56); if ( v6 || *a2 && (v7 = *(_DWORD *)(*a2 + 172)) != 0 && (v6 = *(int (__cdecl **)(int *))(v7 + 56)) != 0 ) v44 = v6(a2); } } } else { v46 = 0; } v8 = v46 == 0; qmemcpy(&v32, a2, 0x40u); v9 = v39; v10 = v42; v11 = v35; v12 = v33; a2[14] = v43; v13 = v40; a2[8] = v9; v14 = v36; a2[9] = v13; v15 = v37; a2[15] = v10; v16 = v41; a2[11] = v14; v17 = v34; a2[12] = v15; v18 = v32; a2[10] = v16; a2[13] = v38; a2[2] = v11; a2[3] = v17; *a2 = v12; a2[1] = v18; if ( !v8 ) { if ( v11 ) { v19 = *(_DWORD *)(v11 + 172); if ( v19 ) { v20 = *(int (__cdecl **)(int *))(v19 + 56); if ( v20 || v12 && (v21 = *(_DWORD *)(v12 + 172)) != 0 && (v20 = *(int (__cdecl **)(int *))(v21 + 56)) != 0 ) v45 = v20(a2); } } } v22 = v42; v23 = v43; a2[8] = v36; v24 = v39; a2[14] = v22; v25 = v37; a2[11] = v24; v26 = v34; a2[9] = v25; v27 = v40; a2[15] = v23; v28 = v38; a2[12] = v27; v29 = v32; a2[1] = v12; a2[10] = v28; v30 = v41; a2[2] = v26; result = v44; a2[3] = v11; a2[13] = v30; *a2 = v29; if ( result ) { if ( result == 1 ) return 1; LABEL_26: result = 2; if ( v45 != 1 ) return result; return 1; } if ( v45 ) goto LABEL_26; return result; } //----- (00834160) -------------------------------------------------------- void __thiscall sub_834160(_DWORD *this) { _DWORD *v1; // edi int v2; // ebx int v3; // eax char v4; // al int v5; // esi int v6; // eax v1 = this; v2 = this[2]; if ( v2 ) { v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[2]); if ( v3 ) { while ( (char *)v3 != dword_BA4858 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v4 = 1; } else { LABEL_5: v4 = 0; } v5 = v4 != 0 ? v2 : 0; if ( (v4 != 0 ? v2 : 0) && !v1[16] ) { v6 = *(unsigned __int16 *)(*(_DWORD *)(v4 != 0 ? v2 + 0xB8 : 184) + 12); if ( (_WORD)v6 ) { *((_WORD *)v1 + 37) = v6; v1[16] = operator new(12 * v6); *((_BYTE *)v1 + 72) = 1; *((_WORD *)v1 + 38) = *(_WORD *)(*(_DWORD *)(v5 + 184) + 64); } } } } //----- (008341F0) -------------------------------------------------------- void __thiscall sub_8341F0(_DWORD *this) { _DWORD *v1; // edi int v2; // ebx int v3; // eax char v4; // al int v5; // esi _DWORD *v6; // ecx int v7; // ebx __int16 v8; // ax v1 = this; v2 = this[2]; if ( v2 ) { v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[2]); if ( v3 ) { while ( (char *)v3 != dword_BA4840 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v4 = 1; } else { LABEL_5: v4 = 0; } v5 = v4 != 0 ? v2 : 0; if ( (v4 != 0 ? v2 : 0) && v1[16] ) { if ( *((_BYTE *)v1 + 72) ) { v6 = *(_DWORD **)(v4 != 0 ? v2 + 0xB8 : 184); v7 = v6[8]; v8 = (*(int (**)(void))(*v6 + 64))(); off_ABEFD4(v8, v7, v1[16], v5 + 104); *((_BYTE *)v1 + 72) = 0; } } } } // ABEFD4: using guessed type int (__cdecl *off_ABEFD4)(__int16, int, int, int); //----- (00834270) -------------------------------------------------------- char __thiscall sub_834270(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { _DWORD *v5; // esi unsigned __int16 v6; // cx unsigned __int16 v7; // dx char result; // al _DWORD *v9; // eax _DWORD *v10; // ecx unsigned __int16 v11; // [esp+4h] [ebp-8h] unsigned __int16 v12; // [esp+8h] [ebp-4h] v5 = this; if ( this[16] && ((*(void (__stdcall **)(int, int *, unsigned __int16 *, unsigned __int16 *))(**(_DWORD **)(this[2] + 184) + 80))( a2, &a2, &v12, &v11), v6 = v12, (_WORD)a2 != v12) && (v7 = v11, (_WORD)a2 != v11) && v12 != v11 ) { *a3 = v5[16] + 12 * (unsigned __int16)a2; *a4 = v5[16] + 12 * v6; *a5 = v5[16] + 12 * v7; result = 1; } else { v9 = a4; v10 = a5; *a3 = 0; *v9 = 0; *v10 = 0; result = 0; } return result; } //----- (00834320) -------------------------------------------------------- signed int __cdecl sub_834320(int a1, int a2) { int v2; // eax int v3; // ecx signed int result; // eax v2 = *(_DWORD *)(*(_DWORD *)(a1 + 172) + 40); v3 = *(_DWORD *)(*(_DWORD *)(a2 + 172) + 40); if ( v2 == 3 || v3 == 3 ) return 10; if ( v3 < v2 ) { v2 = *(_DWORD *)(*(_DWORD *)(a2 + 172) + 40); v3 = *(_DWORD *)(*(_DWORD *)(a1 + 172) + 40); } switch ( v3 + 4 * v2 + v2 ) { case 1: result = 1; break; case 2: result = 2; break; case 4: result = 3; break; case 6: result = 4; break; case 7: result = 5; break; case 9: result = 6; break; case 12: result = 7; break; case 14: result = 8; break; case 24: result = 9; break; default: result = 0; break; } return result; } //----- (00834400) -------------------------------------------------------- char __thiscall sub_834400(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v5; // ecx int v6; // esi int v7; // edi v2 = this; if ( !sub_872B60(this, (int)a2) ) return 0; if ( !a2 ) return 0; v3 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( !v3 ) return 0; while ( (char *)v3 != dword_BA450C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } if ( a2[10] != v2[10] || a2[9] != v2[9] ) return 0; v5 = a2[11]; if ( !v5 || (v6 = v2[11]) == 0 ) { if ( v5 == v2[11] ) return 1; return 0; } v7 = (*(int (**)(void))(*(_DWORD *)v5 + 12))(); if ( v7 != (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 12))(v6) ) return 0; return 1; } //----- (00834490) -------------------------------------------------------- void __cdecl sub_834490(_DWORD *a1, int a2) { int v2; // eax int v3; // eax if ( a1 ) { v2 = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( v2 ) { while ( (char *)v2 != dword_BA4840 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return; } v3 = a1[46]; if ( v3 && (!a2 || a2 == 1) ) *(_BYTE *)(v3 + 52) |= 0x33u; } } } //----- (008344E0) -------------------------------------------------------- int __cdecl sub_8344E0(signed int a1, int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int, signed int, signed int *, signed int); // eax v2 = *(_DWORD *)(a1 + 356); v3 = v2; v4 = *(int (__cdecl **)(int, int, signed int, signed int *, signed int))(v2 + 8); a1 = 1; return v4(v3, a2, 1, &a1, 1); } //----- (00834510) -------------------------------------------------------- void __thiscall sub_834510(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // esi int v5; // eax int v6; // esi v2 = this; sub_872BB0(this, a2); v3 = v2[10]; v4 = (_DWORD *)v2[2]; if ( v4 ) { v5 = (*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); if ( v5 ) { while ( (char *)v5 != dword_BA4840 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) return; } v6 = v4[46]; if ( v6 && (!v3 || v3 == 1) ) *(_BYTE *)(v6 + 52) |= 0x33u; } } } //----- (00834570) -------------------------------------------------------- void __thiscall sub_834570(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // eax int v5; // ecx int v6; // eax int v7; // esi void *v8; // eax int v9; // ebx _WORD *v10; // eax _WORD *v11; // esi void (__stdcall *v12)(unsigned int, _WORD *, _WORD *, _WORD *); // eax _WORD *v13; // ebx void *v14; // eax int v15; // eax unsigned int v16; // [esp+10h] [ebp-14h] void *v17; // [esp+14h] [ebp-10h] int v18; // [esp+18h] [ebp-Ch] char *v19; // [esp+1Ch] [ebp-8h] unsigned int v20; // [esp+20h] [ebp-4h] v2 = this; v3 = this[2]; if ( v3 && (v4 = (*(int (**)(void))(*(_DWORD *)v3 + 4))()) != 0 ) { while ( (char *)v4 != dword_BA478C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_5; } if ( !v2[13] ) { if ( !v2[16] ) { sub_834160(v2); sub_8341F0(v2); } v7 = v2[2]; v8 = operator new(0x54u); if ( v8 ) v2[13] = sub_844C60( (int)v8, (void *)*(unsigned __int16 *)(*(_DWORD *)(v7 + 184) + 64), *(_DWORD *)(*(_DWORD *)(v7 + 184) + 72), *(_DWORD *)(*(_DWORD *)(v7 + 184) + 32), v2[16], a2); else v2[13] = 0; } } else { LABEL_5: v5 = v2[2]; if ( v5 ) { v6 = (*(int (**)(void))(*(_DWORD *)v5 + 4))(); if ( v6 ) { while ( (char *)v6 != dword_BA4A50 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return; } if ( !v2[13] ) { if ( !v2[16] ) { sub_834160(v2); sub_8341F0(v2); } v9 = v2[2]; v18 = v2[2]; v19 = 0; v16 = *(unsigned __int16 *)(*(_DWORD *)(v9 + 184) + 64); v10 = operator new(6 * v16); v17 = v10; v20 = 0; if ( v16 ) { v11 = v10 + 1; do { v12 = *(void (__stdcall **)(unsigned int, _WORD *, _WORD *, _WORD *))(**(_DWORD **)(v9 + 184) + 80); v13 = v11 + 1; v12(v20, v11 - 1, v11, v11 + 1); if ( *(v11 - 1) != *v11 && *(v11 - 1) != *v13 && *v11 != *v13 ) { v11 += 3; ++v19; } v9 = v18; ++v20; } while ( v20 < v16 ); } v14 = operator new(0x54u); if ( v14 ) v15 = sub_844C60((int)v14, v19, (int)v17, *(_DWORD *)(*(_DWORD *)(v9 + 184) + 32), v2[16], a2); else v15 = 0; v2[13] = v15; operator delete(v17); } } } } } //----- (00834740) -------------------------------------------------------- void __thiscall sub_834740(_DWORD *this, unsigned int a2, int a3) { bool v3; // zf int v4; // ecx int i; // eax int v6; // ecx int j; // eax int v8; // ecx int k; // eax if ( a2 < 0xA000106 ) { switch ( this[9] ) { case 0: v3 = this[11] == 0; this[9] = 3; if ( v3 ) goto LABEL_9; this[10] = 2; v4 = this[2]; if ( v4 ) { for ( i = (*(int (**)(void))(*(_DWORD *)v4 + 4))(); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA4840 ) break; } } break; case 1: this[9] = 3; break; case 2: v3 = this[11] == 0; this[9] = 0; if ( v3 ) goto LABEL_9; this[10] = 2; v6 = this[2]; if ( v6 ) { for ( j = (*(int (**)(void))(*(_DWORD *)v6 + 4))(); j; j = *(_DWORD *)(j + 4) ) { if ( (char *)j == dword_BA4840 ) break; } } break; case 3: v3 = this[11] == 0; this[9] = 2; if ( v3 ) { LABEL_9: sub_660DD0((int)this, 0); } else { this[10] = 2; v8 = this[2]; if ( v8 ) { for ( k = (*(int (**)(void))(*(_DWORD *)v8 + 4))(); k; k = *(_DWORD *)(k + 4) ) { if ( (char *)k == dword_BA4840 ) break; } } } break; case 4: this[9] = 2; break; default: return; } } } //----- (00834850) -------------------------------------------------------- int __thiscall sub_834850(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx v2 = (_DWORD *)a2; v3 = this; sub_872C10(this, a2); v4 = sub_8784D0(*(int *)dword_BA450C); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); return (*(int (__thiscall **)(void *, _DWORD *))(*(_DWORD *)v3 + 36))(v3, v2); } //----- (008348B0) -------------------------------------------------------- unsigned int __thiscall sub_8348B0(float *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = a2; v3 = this; sub_872C70(this, a2); v4 = sub_8784D0(*(int *)dword_BA450C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_833DB0((int)"m_ePropagationMode", *((_DWORD *)v3 + 9)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_833CC0((int)"m_eCollisionMode", *((_DWORD *)v3 + 10)); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); if ( *((_DWORD *)v3 + 11) ) (*(void (__stdcall **)(const char *, char *))(**((_DWORD **)v3 + 11) + 44))("m_pkModelABV->Type", v2); v10 = sub_85F140(v3 + 3, (int)"m_kLocalVelocity"); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); sub_823870(v2, v11, &a2); v12 = sub_85F140(v3 + 6, (int)"m_kWorldVelocity"); v13 = *((_DWORD *)v2 + 3); a2 = v12; if ( v13 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v13 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v13, &a2); } //----- (008349E0) -------------------------------------------------------- int __thiscall sub_8349E0(int *this, void **a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, int *, signed int); // edx int v8; // ST00_4 int v9; // ST14_4 void (__cdecl *v10)(int, int *, signed int, int *, signed int); // eax int (__cdecl *v11)(int, char *, signed int, int *, signed int); // edx int v12; // ST14_4 int result; // eax int v14; // eax int v15; // [esp+8h] [ebp-8h] int v16; // [esp+Ch] [ebp-4h] v2 = (signed int)a2; v3 = this; sub_872AB0(this, a2); v4 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) < 0xA000106u ) { v9 = *(_DWORD *)(v2 + 352); v10 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v15 = 4; v10(v9, &v16, 4, &v15, 1); v3[9] = v16; } else { v5 = *(_DWORD *)(v2 + 352); v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v16 = 4; v6(v5, &v15, 4, &v16, 1); v3[9] = v15; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); v15 = 4; v7(v8, &v16, 4, &v15, 1); v3[10] = v16; } v11 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v12 = *(_DWORD *)(v2 + 352); v15 = 1; result = v11(v12, (char *)&a2 + 3, 1, &v15, 1); if ( HIBYTE(a2) ) { v14 = sub_837030(v2); v3[11] = v14; result = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 24))(v14); v3[12] = result; } return result; } //----- (00834AC0) -------------------------------------------------------- void __thiscall sub_834AC0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_872AD0(this, a2); if ( a2[7] < 0xA000110u ) sub_834490((_DWORD *)v2[2], v2[10]); } //----- (00834AF0) -------------------------------------------------------- int __thiscall sub_834AF0(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, _DWORD *, signed int, int *, signed int); // eax bool v10; // zf int v11; // eax int result; // eax int v13; // edi int v14; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_872B30(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 9, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 10, 4, &a2, 1); v10 = v3[11] == 0; v14 = 1; if ( v10 ) { v13 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = 0; result = (*(int (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 8))( v13, (char *)&a2 + 3, 1, &v14, 1); } else { v11 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = 1; (*(void (__cdecl **)(int, char *, signed int, int *, signed int))(v11 + 8))(v11, (char *)&a2 + 3, 1, &v14, 1); result = (*(int (__stdcall **)(int))(*(_DWORD *)v3[11] + 4))(v2); } return result; } //----- (00834BA0) -------------------------------------------------------- _DWORD *__thiscall sub_834BA0(void *this, _DWORD **a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // eax v2 = this; v3 = operator new(0x50u); if ( v3 ) v4 = sub_833A90(v3); else v4 = 0; sub_872AA0(v2, (int)v4, a2); v4[9] = *((_DWORD *)v2 + 9); v4[10] = *((_DWORD *)v2 + 10); if ( *((_DWORD *)v2 + 11) ) { v5 = (*(int (**)(void))(**((_DWORD **)v2 + 11) + 28))(); sub_833C10(v4, v5); } if ( *((_DWORD *)v2 + 13) ) { if ( !v4[16] ) { sub_834160(v4); sub_8341F0(v4); } sub_834570(v4, 1); } return v4; } //----- (00834C20) -------------------------------------------------------- BOOL __thiscall sub_834C20(float *this, float *a2) { float *v2; // edi v2 = this; return !(*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 12))(a2) && (unsigned __int8)sub_805790(a2 + 1, v2 + 1); } //----- (00834C60) -------------------------------------------------------- int __thiscall sub_834C60(char *this, signed int a2) { char *v2; // esi v2 = this; nullsub_32(a2); return sub_87D5D0(v2 + 4, a2); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00834C80) -------------------------------------------------------- int __thiscall sub_834C80(char *this, signed int a2) { char *v2; // esi v2 = this; sub_837080(this, a2); return sub_8737A0(v2 + 4, a2); } //----- (00834CA0) -------------------------------------------------------- float *__thiscall sub_834CA0(float *this, float a2, int a3) { float *result; // eax int v4; // ecx result = this; *(_DWORD *)this = &NiSphereBV::`vftable'; this[1] = *(float *)a3; this[2] = *(float *)(a3 + 4); v4 = *(_DWORD *)(a3 + 8); result[4] = a2; *((_DWORD *)result + 3) = v4; return result; } // A23990: using guessed type void *NiSphereBV::`vftable'; //----- (00834CD0) -------------------------------------------------------- int __thiscall sub_834CD0(_DWORD *this, _DWORD *a2) { int result; // eax this[1] = a2[1]; this[2] = a2[2]; this[3] = a2[3]; result = a2[4]; this[4] = result; return result; } //----- (00834D00) -------------------------------------------------------- float __userpurge sub_834D00@(float *this@, int a2, float *a3) { int v3; // ebx float *v4; // edi float *v5; // eax float result; // eax double v7; // st7 double v8; // st7 float v9; // [esp+Ch] [ebp-18h] float v10; // [esp+10h] [ebp-14h] float v11; // [esp+14h] [ebp-10h] float v12; // [esp+18h] [ebp-Ch] float v13; // [esp+1Ch] [ebp-8h] float v14; // [esp+20h] [ebp-4h] float v15; // [esp+2Ch] [ebp+8h] v3 = a2; v4 = this; v5 = sub_85DA90(a3, &v9, (float *)(a2 + 4)); v15 = a3[12]; v12 = v15 * *v5; v13 = v5[1] * v15; v14 = v15 * v5[2]; v9 = a3[9] + v12; v10 = a3[10] + v13; result = v10; v7 = a3[11]; v4[1] = v9; v8 = v7 + v14; v4[2] = result; v11 = v8; v4[3] = v11; v4[4] = *(float *)(v3 + 16) * a3[12]; return result; } //----- (00834D80) -------------------------------------------------------- BOOL __cdecl sub_834D80(float a1, int a2, int a3, int a4, int a5) { float v5; // ST00_4 float v6; // ST04_4 float v7; // ST08_4 double v8; // st7 double v9; // st5 double v10; // st6 double v11; // st5 double v12; // st6 double v13; // st7 double v14; // st7 double v15; // st6 float v17; // [esp+0h] [ebp-10h] float v18; // [esp+4h] [ebp-Ch] float v19; // [esp+8h] [ebp-8h] float v20; // [esp+Ch] [ebp-4h] float v21; // [esp+1Ch] [ebp+Ch] float v22; // [esp+20h] [ebp+10h] int v23; // [esp+20h] [ebp+10h] int v24; // [esp+28h] [ebp+18h] v5 = *(float *)a5 - *(float *)a3; v6 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v7 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v8 = v6; v9 = v5; v10 = v7; v20 = v7 * v7 + v6 * v6 + v5 * v5; v17 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v18 = *(float *)(a4 + 8) - *(float *)(a2 + 8); v19 = *(float *)(a4 + 12) - *(float *)(a2 + 12); *(float *)&v24 = v18 * v18 + v17 * v17 + v19 * v19; v22 = *(float *)(a2 + 16) + *(float *)(a4 + 16); *(float *)&v23 = v22 * v22; if ( v20 <= 0.0 || (v11 = v10 * v19 + v9 * v17 + v8 * v18, v12 = v20, v21 = v11, v13 = v21, v21 > 0.0) ) { v14 = *(float *)&v24; goto LABEL_7; } if ( -a1 * v12 > v13 ) { v14 = a1 * (v12 * a1 + v13 + v13) + *(float *)&v24; LABEL_7: v15 = *(float *)&v23; return v15 >= v14; } v14 = *(float *)&v24 * v12 - v13 * v13; v15 = v12 * *(float *)&v23; return v15 >= v14; } //----- (00834EC0) -------------------------------------------------------- char __cdecl sub_834EC0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { float *v10; // ecx float *v11; // ebx float *v12; // esi float *v13; // edi double v14; // st7 double v15; // st6 double v16; // st5 double v17; // st3 bool v18; // c0 bool v19; // c3 double v20; // st3 double v21; // st4 char result; // al double v23; // rtt double v24; // st3 double v25; // st5 double v26; // st4 double v27; // st6 float v28; // ST24_4 float v29; // ST28_4 float v30; // ST2C_4 float v31; // ST18_4 float v32; // ST1C_4 float v33; // ST20_4 float v34; // ST18_4 float v35; // ST1C_4 double v36; // st7 float v37; // ST20_4 float v38; // ST18_4 float v39; // ST1C_4 float v40; // ST20_4 float v41; // ST0C_4 float v42; // ST10_4 float v43; // ST14_4 float v44; // ST18_4 float v45; // ST1C_4 float v46; // ST20_4 float v47; // ST30_4 float v48; // ST34_4 float v49; // ST38_4 float v50; // ST18_4 float v51; // ST1C_4 float v52; // ST20_4 float v53; // ST0C_4 float v54; // ST10_4 double v55; // st7 float v56; // ST14_4 double v57; // st7 float v58; // ST0C_4 float v59; // ST10_4 double v60; // st7 float v61; // ST14_4 double v62; // st5 float v63; // ST0C_4 float v64; // ST10_4 float v65; // ST14_4 float v66; // ST18_4 float v67; // ST1C_4 double v68; // st7 float v69; // ST20_4 float *v70; // eax double v71; // st7 float v72; // ST0C_4 float v73; // ST10_4 double v74; // st7 float v75; // ST14_4 float v76; // ST0C_4 float v77; // ST10_4 float v78; // ST14_4 float v79; // ST18_4 float v80; // ST1C_4 double v81; // st7 float v82; // ST20_4 float v83; // ST14_4 float v84; // [esp+Ch] [ebp-34h] float v85; // [esp+10h] [ebp-30h] float v86; // [esp+24h] [ebp-1Ch] float v87; // [esp+24h] [ebp-1Ch] float v88; // [esp+28h] [ebp-18h] float v89; // [esp+28h] [ebp-18h] float v90; // [esp+2Ch] [ebp-14h] float v91; // [esp+2Ch] [ebp-14h] float v92; // [esp+30h] [ebp-10h] float v93; // [esp+34h] [ebp-Ch] float v94; // [esp+38h] [ebp-8h] float v95; // [esp+3Ch] [ebp-4h] int v96; // [esp+4Ch] [ebp+Ch] int v97; // [esp+50h] [ebp+10h] int v98; // [esp+54h] [ebp+14h] float v99; // [esp+54h] [ebp+14h] int v100; // [esp+54h] [ebp+14h] float v101; // [esp+54h] [ebp+14h] int v102; // [esp+58h] [ebp+18h] float v103; // [esp+58h] [ebp+18h] float v104; // [esp+58h] [ebp+18h] float v105; // [esp+58h] [ebp+18h] float v106; // [esp+58h] [ebp+18h] float v107; // [esp+58h] [ebp+18h] float v108; // [esp+58h] [ebp+18h] float v109; // [esp+58h] [ebp+18h] v10 = (float *)a5; v11 = (float *)a3; v12 = (float *)a2; v86 = *(float *)a5 - *(float *)a3; v13 = (float *)a4; v88 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v90 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v97 = v90 * v90 + v88 * v88 + v86 * v86; v92 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v93 = *(float *)(a4 + 8) - *(float *)(a2 + 8); v94 = *(float *)(a4 + 12) - *(float *)(a2 + 12); *(float *)&v98 = v92 * v92 + v93 * v93 + v94 * v94; *(float *)&v96 = v13[4] + *(float *)(a2 + 16); v95 = *(float *)&v96 * *(float *)&v96; if ( *(float *)&v97 <= 0.0 ) { v14 = 0.0; goto LABEL_24; } v14 = 0.0; v15 = *(float *)&v97; *(float *)&v102 = v90 * v94 + v86 * v92 + v88 * v93; v16 = *(float *)&v102; if ( *(float *)&v102 > 0.0 ) { LABEL_24: if ( v95 < (double)*(float *)&v98 ) return 0; *(float *)a6 = v14; v107 = v10[2] * v10[2] + *v10 * *v10 + v10[1] * v10[1]; v57 = v107; v108 = v11[2] * v11[2] + *v11 * *v11 + v11[1] * v11[1]; if ( v108 >= v57 ) { v72 = v12[1] - v13[1]; v73 = v12[2] - v13[2]; v74 = v12[3] - v13[3]; *(float *)a10 = v72; *(float *)(a10 + 4) = v73; v75 = v74; *(float *)(a10 + 8) = v75; sub_4430B0((float *)a10); v109 = v13[4]; v76 = v109 * *(float *)a10; v77 = *(float *)(a10 + 4) * v109; v78 = v109 * *(float *)(a10 + 8); v79 = v76 + v13[1]; v80 = v13[2] + v77; v81 = v13[3]; *(float *)a7 = v79; *(float *)(a7 + 4) = v80; v82 = v81 + v78; *(float *)(a7 + 8) = v82; v70 = (float *)a9; v84 = -*(float *)a10; v85 = -*(float *)(a10 + 4); v71 = *(float *)(a10 + 8); } else { v58 = v13[1] - v12[1]; v59 = v13[2] - v12[2]; v60 = v13[3] - v12[3]; *(float *)a9 = v58; *(float *)(a9 + 4) = v59; v61 = v60; *(float *)(a9 + 8) = v61; sub_4430B0((float *)a9); v62 = v12[4]; v63 = *(float *)a9 * v62; v64 = *(float *)(a9 + 4) * v62; v65 = v62 * *(float *)(a9 + 8); v66 = v12[1] + v63; v67 = v12[2] + v64; v68 = v12[3]; *(float *)a7 = v66; *(float *)(a7 + 4) = v67; v69 = v68 + v65; *(float *)(a7 + 8) = v69; v70 = (float *)a10; v84 = -*(float *)a9; v85 = -*(float *)(a9 + 4); v71 = *(float *)(a9 + 8); } v83 = -v71; *v70 = v84; v70[1] = v85; v70[2] = v83; return 1; } v17 = -a1 * v15; v18 = v17 < v16; v19 = v17 == v16; v20 = *(float *)&v98; if ( v18 || v19 ) { v21 = v95; } else { v21 = v95; if ( v95 + 0.000009999999747378752 < a1 * (v15 * a1 + v16 + v16) + v20 ) return 0; } v23 = *(float *)&v98; v99 = v20 - v21; v24 = v16 * v16; v25 = v99; v26 = v24 - v15 * v99; v27 = v23; *(float *)&v100 = v26; if ( *(float *)&v100 < 0.0 ) return 0; if ( v25 > 0.0 ) { v101 = sqrt(*(float *)&v100); v103 = -((v101 + *(float *)&v102) / *(float *)&v97); *(float *)a6 = v103; if ( v103 >= 0.0 ) { if ( a1 < (double)v103 ) *(float *)a6 = a1; } else { *(float *)a6 = 0.0; } v104 = *(float *)a6; v38 = v104 * v86; v39 = v88 * v104; v40 = v104 * v90; v87 = v38 + v92; v89 = v39 + v93; v91 = v40 + v94; v105 = v12[4] / *(float *)&v96; v41 = v87 * v105; v42 = v89 * v105; v43 = v105 * v91; v106 = *(float *)a6; v44 = v106 * *v11; v45 = v106 * v11[1]; v46 = v106 * v11[2]; v47 = v12[1] + v44; v48 = v12[2] + v45; v49 = v12[3] + v46; v50 = v47 + v41; *(float *)a7 = v50; v51 = v48 + v42; *(float *)(a7 + 4) = v51; v52 = v49 + v43; *(float *)(a7 + 8) = v52; if ( a8 ) { *(float *)a9 = v87; *(float *)(a9 + 4) = v89; *(float *)(a9 + 8) = v91; sub_4430B0((float *)a9); v53 = -*(float *)a9; v54 = -*(float *)(a9 + 4); v55 = *(float *)(a9 + 8); *(float *)a10 = v53; *(float *)(a10 + 4) = v54; v56 = -v55; *(float *)(a10 + 8) = v56; } result = 1; } else { *(float *)a6 = 0.0; v28 = v12[1] + v13[1]; v29 = v12[2] + v13[2]; v30 = v12[3] + v13[3]; v31 = v28 * 0.5; *(float *)a7 = v31; v32 = v29 * 0.5; *(float *)(a7 + 4) = v32; v33 = 0.5 * v30; *(float *)(a7 + 8) = v33; if ( a8 ) { if ( v27 <= 0.00000011920929 ) { *(_DWORD *)a9 = dword_ABD48C; *(_DWORD *)(a9 + 4) = dword_ABD490; *(_DWORD *)(a9 + 8) = dword_ABD494; } else { *(float *)a9 = v92; *(float *)(a9 + 4) = v93; *(float *)(a9 + 8) = v94; sub_4430B0((float *)a9); } v34 = -*(float *)a9; v35 = -*(float *)(a9 + 4); v36 = *(float *)(a9 + 8); *(float *)a10 = v34; *(float *)(a10 + 4) = v35; v37 = -v36; *(float *)(a10 + 8) = v37; result = 1; } else { result = 1; } } return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (00835460) -------------------------------------------------------- float *__cdecl sub_835460(int a1) { float *v1; // eax int v2; // ecx float *v3; // esi float *result; // eax v1 = (float *)operator new(0x14u); if ( v1 ) { *(_DWORD *)v1 = &NiSphereBV::`vftable'; *((_DWORD *)v1 + 1) = dword_BA45C0; *((_DWORD *)v1 + 2) = dword_BA45C4; v2 = dword_BA45C8; v1[4] = 1.0; v3 = v1; *((_DWORD *)v1 + 3) = v2; (**(void (__thiscall ***)(float *, int))v1)(v1, a1); result = v3; } else { (*(void (__thiscall **)(_DWORD, int))MEMORY[0])(0, a1); result = 0; } return result; } // A23990: using guessed type void *NiSphereBV::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008354C0) -------------------------------------------------------- float *sub_8354C0() { float *result; // eax int v1; // ecx result = (float *)operator new(0x14u); if ( !result ) return 0; *(_DWORD *)result = &NiSphereBV::`vftable'; *((_DWORD *)result + 1) = dword_BA45C0; *((_DWORD *)result + 2) = dword_BA45C4; v1 = dword_BA45C8; result[4] = 1.0; *((_DWORD *)result + 3) = v1; return result; } // A23990: using guessed type void *NiSphereBV::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00835500) -------------------------------------------------------- BOOL __cdecl sub_835500(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // edx double v8; // st7 double v9; // st7 double v10; // st7 double v11; // st7 double v12; // st7 double v13; // st7 double v14; // st7 double v15; // st6 double v16; // st5 int v17; // esi int v18; // ecx int v19; // edx double v20; // st7 int v22; // [esp+4h] [ebp-48h] int v23; // [esp+8h] [ebp-44h] int v24; // [esp+Ch] [ebp-40h] int v25; // [esp+10h] [ebp-3Ch] int v26; // [esp+14h] [ebp-38h] int v27; // [esp+18h] [ebp-34h] int v28; // [esp+1Ch] [ebp-30h] int v29; // [esp+20h] [ebp-2Ch] int v30; // [esp+24h] [ebp-28h] int v31; // [esp+28h] [ebp-24h] int v32; // [esp+2Ch] [ebp-20h] int v33; // [esp+30h] [ebp-1Ch] float v34; // [esp+34h] [ebp-18h] float v35; // [esp+38h] [ebp-14h] float v36; // [esp+3Ch] [ebp-10h] int v37; // [esp+40h] [ebp-Ch] int v38; // [esp+44h] [ebp-8h] int v39; // [esp+48h] [ebp-4h] v7 = *(_DWORD *)(a4 + 4); v22 = *(_DWORD *)a4; v24 = *(_DWORD *)(a4 + 8); v8 = *(float *)a5; v23 = v7; *(float *)&v37 = v8 - *(float *)a4; v9 = *(float *)(a5 + 4); v25 = v37; *(float *)&v38 = v9 - *(float *)(a4 + 4); v10 = *(float *)(a5 + 8) - *(float *)(a4 + 8); v26 = v38; *(float *)&v39 = v10; v11 = *(float *)a6; v27 = v39; *(float *)&v37 = v11 - *(float *)a4; *(float *)&v38 = *(float *)(a6 + 4) - *(float *)(a4 + 4); v12 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v28 = v37; *(float *)&v39 = v12; v13 = *(float *)a3; v29 = v38; v14 = v13 - *(float *)a7; v30 = v39; *(float *)&v37 = v14; *(float *)&v38 = *(float *)(a3 + 4) - *(float *)(a7 + 4); *(float *)&v39 = *(float *)(a3 + 8) - *(float *)(a7 + 8); v15 = *(float *)&v39; v16 = *(float *)&v38; if ( *(float *)&dword_BA45C0 == *(float *)&v37 && *(float *)&dword_BA45C4 == v16 && *(float *)&dword_BA45C8 == v15 ) { v17 = a2; v20 = sub_844DE0((float *)(a2 + 4), (float *)&v22, (float *)&a4, (float *)&a2); } else { v17 = a2; v18 = *(_DWORD *)(a2 + 8); v19 = *(_DWORD *)(a2 + 12); v31 = *(_DWORD *)(a2 + 4); *(float *)&v37 = *(float *)&v37 * a1; v32 = v18; v34 = *(float *)&v37; v33 = v19; *(float *)&v38 = v16 * a1; v35 = *(float *)&v38; *(float *)&v39 = a1 * v15; v36 = *(float *)&v39; v20 = sub_8454B0((float *)&v31, (float *)&v22, (float *)&a5, (float *)&a4, (float *)&a2); } *(float *)&a2 = v20; return *(float *)&a2 <= *(float *)(v17 + 16) * *(float *)(v17 + 16); } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00835680) -------------------------------------------------------- char __cdecl sub_835680(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12) { int v12; // ebx float *v13; // esi int v14; // edi double v15; // st7 float v16; // ecx float v17; // edx float v18; // eax double v19; // st7 double v20; // st7 float v21; // edx double v22; // st7 double v23; // st7 double v24; // st7 double v25; // st7 double v26; // st7 double v27; // st7 float *v28; // eax float v29; // edx double v30; // st7 float v31; // ecx double v33; // st7 double v34; // st7 double v35; // st7 double v36; // st6 double v37; // st7 double v38; // st5 double v39; // st4 double v40; // st6 double v41; // st2 float v42; // edx float v43; // eax float v44; // ecx double v45; // st4 double v46; // st3 double v47; // st4 double v48; // st3 float v49; // ST10_4 _DWORD *v50; // eax _DWORD *v51; // eax float v52; // edx double v53; // st7 float v54; // ecx float v55[27]; // [esp+1Ch] [ebp-E4h] float v56; // [esp+88h] [ebp-78h] float v57; // [esp+8Ch] [ebp-74h] float v58; // [esp+90h] [ebp-70h] float v59; // [esp+94h] [ebp-6Ch] float v60; // [esp+98h] [ebp-68h] float v61; // [esp+9Ch] [ebp-64h] float v62; // [esp+A0h] [ebp-60h] float v63; // [esp+A4h] [ebp-5Ch] float v64; // [esp+A8h] [ebp-58h] float v65; // [esp+ACh] [ebp-54h] float v66; // [esp+B0h] [ebp-50h] float v67; // [esp+B4h] [ebp-4Ch] float v68; // [esp+B8h] [ebp-48h] float v69; // [esp+BCh] [ebp-44h] float v70; // [esp+C0h] [ebp-40h] float v71; // [esp+C4h] [ebp-3Ch] float v72; // [esp+C8h] [ebp-38h] float v73; // [esp+CCh] [ebp-34h] float v74; // [esp+D0h] [ebp-30h] float v75; // [esp+D4h] [ebp-2Ch] float v76; // [esp+D8h] [ebp-28h] float v77; // [esp+DCh] [ebp-24h] float v78; // [esp+E0h] [ebp-20h] float v79; // [esp+E4h] [ebp-1Ch] float v80; // [esp+E8h] [ebp-18h] float v81; // [esp+ECh] [ebp-14h] float v82; // [esp+F0h] [ebp-10h] int v83; // [esp+F4h] [ebp-Ch] int v84; // [esp+F8h] [ebp-8h] int v85; // [esp+FCh] [ebp-4h] float v86; // [esp+10Ch] [ebp+Ch] float v87; // [esp+10Ch] [ebp+Ch] int v88; // [esp+10Ch] [ebp+Ch] float v89; // [esp+10Ch] [ebp+Ch] float v90; // [esp+10Ch] [ebp+Ch] float v91; // [esp+10Ch] [ebp+Ch] float v92; // [esp+10Ch] [ebp+Ch] float v93; // [esp+10Ch] [ebp+Ch] float v94; // [esp+10Ch] [ebp+Ch] int v95; // [esp+114h] [ebp+14h] float v96; // [esp+118h] [ebp+18h] float v97; // [esp+118h] [ebp+18h] float v98; // [esp+118h] [ebp+18h] v12 = a5; v13 = (float *)a4; v14 = a2; v15 = *(float *)(a2 + 16) * *(float *)(a2 + 16); v16 = *(float *)(a2 + 8); v17 = *(float *)(a2 + 12); v56 = *(float *)(a2 + 4); v18 = *(float *)a4; v71 = v15; v19 = *(float *)a5; v62 = v18; v57 = v16; v63 = *(float *)(a4 + 4); *(float *)&v83 = v19 - v18; v20 = *(float *)(a5 + 4); v65 = *(float *)&v83; v58 = v17; v21 = *(float *)(a4 + 8); *(float *)&v84 = v20 - v63; v22 = *(float *)(a5 + 8); v64 = v21; v66 = *(float *)&v84; *(float *)&v85 = v22 - v21; v23 = *(float *)a6; v67 = *(float *)&v85; *(float *)&v83 = v23 - *(float *)a4; *(float *)&v84 = *(float *)(a6 + 4) - *(float *)(a4 + 4); v24 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v68 = *(float *)&v83; *(float *)&v85 = v24; v69 = *(float *)&v84; v70 = *(float *)&v85; v25 = sub_844DE0(&v56, &v62, &v72, &v73); v86 = v25 - v71; if ( v86 <= 0.0 ) { *(float *)a8 = 0.0; v80 = v68 * v73; v81 = v69 * v73; v82 = v73 * v70; *(float *)&v83 = v65 * v72; *(float *)&v84 = v66 * v72; *(float *)&v85 = v72 * v67; v74 = v62 + *(float *)&v83; v75 = v63 + *(float *)&v84; v76 = v64 + *(float *)&v85; *(float *)&v83 = v74 + v80; v26 = v75; *(float *)a9 = *(float *)&v83; *(float *)&v84 = v26 + v81; v27 = v76; *(float *)(a9 + 4) = *(float *)&v84; *(float *)&v85 = v27 + v82; *(float *)(a9 + 8) = *(float *)&v85; if ( a10 ) { v28 = sub_846DB0(&v62, &v77); *(float *)a12 = *v28; *(float *)(a12 + 4) = v28[1]; *(float *)(a12 + 8) = v28[2]; v80 = -*(float *)a12; v81 = -*(float *)(a12 + 4); v29 = v81; v30 = *(float *)(a12 + 8); *(float *)a11 = v80; v82 = -v30; v31 = v82; *(float *)(a11 + 4) = v29; *(float *)(a11 + 8) = v31; return 1; } return 1; } v74 = *(float *)a3 - *(float *)a7; v33 = *(float *)(a3 + 4); v59 = v74; v75 = v33 - *(float *)(a7 + 4); v34 = *(float *)(a3 + 8) - *(float *)(a7 + 8); v60 = v75; v76 = v34; v61 = v76; v87 = v74 * v74 + v75 * v75 + v76 * v76; v35 = a1; if ( v87 * a1 <= 0.000009999999747378752 ) return 0; v80 = v66 * v70 - v67 * v69; v81 = v67 * v68 - v70 * v65; v82 = v69 * v65 - v66 * v68; *(float *)&v83 = -v80; *(float *)&v84 = -v81; *(float *)&v85 = -v82; *(float *)&v95 = v58 * *(float *)&v85 + v57 * *(float *)&v84 + *(float *)&v83 * v56; *(float *)&v88 = *(float *)&v83 * *v13 + v13[1] * *(float *)&v84 + *(float *)&v85 * v13[2]; v96 = *(float *)&v95 - *(float *)&v88; v36 = v96 * v96; v97 = *(float *)&v83 * *(float *)&v83 + *(float *)&v84 * *(float *)&v84 + *(float *)&v85 * *(float *)&v85; v98 = v97 * v71; if ( v98 < v36 ) { sub_4430B0((float *)&v83); v37 = *(float *)&v83; v38 = *(float *)&v84; v39 = *(float *)&v83 * v74 + *(float *)&v84 * v75 + *(float *)&v85 * v76; v40 = *(float *)&v85; if ( *(float *)&v88 >= (double)*(float *)&v95 ) { v90 = v39; if ( v90 <= 0.0 ) return 0; v91 = *(float *)(v14 + 16); v77 = v91 * v37; v78 = v38 * v91; v79 = v91 * v40; v80 = v77 + v56; v42 = v80; v81 = v78 + v57; v43 = v81; v82 = v79 + v58; v44 = v82; } else { v89 = v39; if ( v89 >= 0.0 ) return 0; v41 = *(float *)(v14 + 16); v80 = v37 * v41; v81 = v38 * v41; v82 = v41 * v40; v77 = v56 - v80; v42 = v77; v78 = v57 - v81; v43 = v78; v79 = v58 - v82; v44 = v79; } *(float *)&v83 = v42; v45 = v37 * *v13; *(float *)&v84 = v43; v46 = v13[1]; *(float *)&v85 = v44; v92 = v45 + v46 * v38 + v40 * v13[2]; v47 = v92 + 0.001000000047497451; v93 = v42 * v37 + v43 * v38 + v44 * v40; if ( v93 <= v47 ) { v35 = a1; } else { v77 = v74 * a1; v78 = v75 * a1; v79 = v76 * a1; v80 = v42 + v77; v81 = v78 + *(float *)&v84; v82 = v79 + *(float *)&v85; v48 = v37 * v80; v35 = a1; v94 = v40 * v82 + v38 * v81 + v48; if ( v94 > v47 ) return 0; } } v49 = v35; sub_846CE0(v55, v14, (int)v13, v12, a6, v49, 0.001, 0.000099999997, 32); sub_8468D0(v55, (float *)a3, (float *)a7); *(float *)a8 = sub_846830(v55); if ( sub_956CD0(v55) != 3 && sub_956CD0(v55) != 2 ) return 0; v50 = (_DWORD *)sub_61F9D0((char *)v55); *(_DWORD *)a9 = *v50; *(_DWORD *)(a9 + 4) = v50[1]; *(_DWORD *)(a9 + 8) = v50[2]; if ( a10 ) { v51 = (_DWORD *)sub_846840((char *)v55); *(_DWORD *)a11 = *v51; *(_DWORD *)(a11 + 4) = v51[1]; *(_DWORD *)(a11 + 8) = v51[2]; v77 = -*(float *)a11; v78 = -*(float *)(a11 + 4); v52 = v78; v53 = -*(float *)(a11 + 8); *(float *)a12 = v77; v79 = v53; v54 = v79; *(float *)(a12 + 4) = v52; *(float *)(a12 + 8) = v54; } return 1; } //----- (00835C20) -------------------------------------------------------- _DWORD *__thiscall sub_835C20(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax v1 = this; result = operator new(0x14u); if ( !result ) return 0; *result = &NiSphereBV::`vftable'; result[1] = v1[1]; result[2] = v1[2]; result[3] = v1[3]; result[4] = v1[4]; return result; } // A23990: using guessed type void *NiSphereBV::`vftable'; //----- (00835C60) -------------------------------------------------------- float *__cdecl sub_835C60(signed int a1) { signed int v1; // esi int v2; // eax int v3; // ST2C_4 void (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // eax int v5; // eax int v6; // ST18_4 void (__cdecl *v7)(int, char *, signed int, signed int *, signed int); // eax int v8; // esi void (__cdecl *v9)(int, float *, signed int, signed int *, signed int); // eax float *result; // eax double v11; // st7 double v12; // st7 int v13; // ecx char v14; // [esp+4h] [ebp-30h] char v15; // [esp+10h] [ebp-24h] int v16; // [esp+1Ch] [ebp-18h] int v17; // [esp+20h] [ebp-14h] int v18; // [esp+24h] [ebp-10h] char v19; // [esp+28h] [ebp-Ch] char v20; // [esp+2Ch] [ebp-8h] float v21; // [esp+30h] [ebp-4h] v1 = a1; sub_8608D0((char *)&v16, a1); sub_8608D0(&v15, v1); sub_8608D0(&v14, v1); v2 = *(_DWORD *)(v1 + 352); v3 = v2; v4 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v2 + 4); a1 = 4; v4(v3, &v20, 4, &a1, 1); v5 = *(_DWORD *)(v1 + 352); v6 = v5; v7 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v5 + 4); a1 = 4; v7(v6, &v19, 4, &a1, 1); v8 = *(_DWORD *)(v1 + 352); v9 = *(void (__cdecl **)(int, float *, signed int, signed int *, signed int))(v8 + 4); a1 = 4; v9(v8, &v21, 4, &a1, 1); result = (float *)operator new(0x14u); if ( !result ) return 0; v11 = v21; *(_DWORD *)result = &NiSphereBV::`vftable'; *(float *)&a1 = v11; v12 = *(float *)&a1; *((_DWORD *)result + 1) = v16; *((_DWORD *)result + 2) = v17; v13 = v18; result[4] = v12; *((_DWORD *)result + 3) = v13; return result; } // A23990: using guessed type void *NiSphereBV::`vftable'; //----- (00835D20) -------------------------------------------------------- unsigned int __thiscall sub_835D20(float *this, char ArgList, int a3) { const char *v3; // ebx unsigned int v4; // kr00_4 _DWORD *v5; // esi unsigned int v6; // edi char *v7; // eax unsigned int v8; // edi unsigned int v9; // kr04_4 char *v10; // eax double v11; // st7 unsigned int v12; // edi float *v14; // [esp+14h] [ebp-4h] v3 = (const char *)ArgList; v14 = this; v4 = strlen((const char *)ArgList); *(_DWORD *)&ArgList = operator new(v4 + 13); sub_7FF6E0((char *)ArgList, v4 + 13, "%s = SPHERE_BV", v3); v5 = (_DWORD *)a3; v6 = *(_DWORD *)(a3 + 12); if ( v6 >= *(_DWORD *)(a3 + 8) ) sub_8237A0((_DWORD *)a3, v6 + *(_DWORD *)(a3 + 20)); sub_823870(v5, v6, &ArgList); v7 = sub_85F140(v14 + 1, (int)" center"); v8 = v5[3]; *(_DWORD *)&ArgList = v7; if ( v8 >= v5[2] ) sub_8237A0(v5, v8 + v5[5]); sub_823870(v5, v8, &ArgList); v9 = strlen(v3); v10 = (char *)operator new(v9 + 30); v11 = v14[4]; *(_DWORD *)&ArgList = v10; a3 = (signed int)(v11 * 100.0); sub_7FF6E0(v10, v9 + 30, " radius = %g", (double)a3 / 100.0); v12 = v5[3]; if ( v12 >= v5[2] ) sub_8237A0(v5, v12 + v5[5]); return sub_823870(v5, v12, &ArgList); } //----- (00835E30) -------------------------------------------------------- char __cdecl sub_835E30(int a1, char a2) { if ( a1 ) { if ( a1 == 1 ) { if ( !a2 ) return 1; } else if ( a1 == 2 ) { return 1; } } else if ( a2 ) { return 1; } return 0; } //----- (00835E60) -------------------------------------------------------- int __cdecl sub_835E60(float a1, int a2, int a3, int a4, int a5, int a6) { return sub_8476D0(a1, a2, a3, 1, a5, a6); } //----- (00835E90) -------------------------------------------------------- _DWORD *__thiscall sub_835E90(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // edi v2 = this; *this = 0; this[1] = 0; *((float *)this + 13) = 0.0; *((float *)this + 14) = 0.0; *((float *)this + 15) = 0.0; *((float *)this + 16) = 0.0; v3 = *this; if ( *this != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v4 = v2[1]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[1] = 0; } return v2; } //----- (00835F20) -------------------------------------------------------- int __cdecl sub_835F20(_DWORD *a1, int a2) { int v2; // esi int v3; // eax _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // ST04_4 int result; // eax unsigned int v8; // ebx unsigned int v9; // esi v2 = a1[43]; v3 = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA4858 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_10; } if ( !v2 ) { v4 = operator new(0x50u); if ( v4 ) v5 = sub_8339F0(v4, a1); else v5 = 0; v5[10] = a2; v6 = (_DWORD *)v5[2]; v5[9] = 3; sub_834490(v6, a2); sub_697160(a1, (int)v5); } } LABEL_10: result = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( result ) { while ( (char *)result != dword_BA455C ) { result = *(_DWORD *)(result + 4); if ( !result ) return result; } v8 = a1[47]; v9 = 0; if ( v8 ) { do { if ( a1[47] > v9 ) { result = *(_DWORD *)(a1[45] + 4 * v9); if ( result ) result = sub_835F20(result, a2); } ++v9; } while ( v9 < v8 ); } } return result; } //----- (00835FF0) -------------------------------------------------------- int __cdecl sub_835FF0(float a1, int a2, int a3, int a4) { _DWORD *v4; // eax int v5; // esi _DWORD *v6; // ecx int v7; // eax int v8; // ecx int v9; // edi float v10; // eax int v11; // edx float v12; // eax float *v13; // eax double v14; // st6 float *v15; // eax float v16; // ecx float v17; // edx float v18; // esi int v19; // eax float v20; // edx float v21; // eax int v22; // edx float *v23; // eax double v24; // st6 int v25; // eax int v27; // eax int v28; // ST08_4 int v29; // ST04_4 int v30; // eax int v31; // eax int v32; // ST08_4 int v33; // ST04_4 int v34; // eax int v35; // [esp+18h] [ebp-ACh] int v36; // [esp+1Ch] [ebp-A8h] float v37; // [esp+20h] [ebp-A4h] float v38; // [esp+24h] [ebp-A0h] float v39; // [esp+28h] [ebp-9Ch] float v40; // [esp+2Ch] [ebp-98h] float v41; // [esp+30h] [ebp-94h] float v42; // [esp+34h] [ebp-90h] float v43; // [esp+38h] [ebp-8Ch] float v44; // [esp+3Ch] [ebp-88h] float v45; // [esp+40h] [ebp-84h] float v46; // [esp+44h] [ebp-80h] _DWORD *v47; // [esp+48h] [ebp-7Ch] _DWORD *v48; // [esp+4Ch] [ebp-78h] int v49; // [esp+50h] [ebp-74h] int v50; // [esp+54h] [ebp-70h] char v51; // [esp+58h] [ebp-6Ch] float v52; // [esp+7Ch] [ebp-48h] float v53; // [esp+80h] [ebp-44h] float v54; // [esp+84h] [ebp-40h] float v55; // [esp+88h] [ebp-3Ch] char v56; // [esp+8Ch] [ebp-38h] v4 = *(_DWORD **)(a2 + 172); v5 = a3; v6 = *(_DWORD **)(a3 + 172); v47 = v4; v7 = v4[10]; v48 = v6; v8 = v6[10]; v9 = 0; v49 = a3; v35 = v7; v36 = v8; v50 = 0; if ( a4 != 6 ) { if ( (unsigned int)a4 > 0xA ) return 1; goto LABEL_9; } if ( v7 != 4 ) { if ( v8 != 4 ) goto LABEL_9; v20 = *(float *)(a3 + 36); v21 = *(float *)(a3 + 40); v45 = *(float *)(a3 + 44); v43 = v20; v22 = *(int *)(a3 + 48); v44 = v21; qmemcpy(&v56, (const void *)(a3 + 104), 0x34u); v46 = *(float *)&v22; sub_87C3F0((float *)&v56, v22, (float *)&v51); v23 = sub_85DA90((float *)&v51, &v40, &v43); v37 = *v23 * v55; v38 = v23[1] * v55; v24 = v23[2]; v15 = (float *)v48[11]; v39 = v24 * v55; v40 = v37 + v52; v16 = v40; v43 = v40; v41 = v38 + v53; v17 = v41; v44 = v41; v42 = v39 + v54; v18 = v42; v45 = v42; v46 = v55 * v46; if ( !v15 ) { v25 = sub_837000((int)&v43); if ( !v25 ) goto LABEL_8; sub_833C10(v48, v25); goto LABEL_7; } goto LABEL_4; } v10 = *(float *)(a2 + 36); v11 = *(_DWORD *)(a2 + 44); v44 = *(float *)(a2 + 40); qmemcpy(&v56, (const void *)(a2 + 104), 0x34u); v43 = v10; v12 = *(float *)(a2 + 48); v45 = *(float *)&v11; v46 = v12; sub_87C3F0((float *)&v56, v11, (float *)&v51); v13 = sub_85DA90((float *)&v51, &v37, &v43); v40 = *v13 * v55; v41 = v13[1] * v55; v14 = v13[2]; v15 = (float *)v47[11]; v42 = v14 * v55; v37 = v52 + v40; v16 = v37; v43 = v37; v38 = v53 + v41; v17 = v38; v44 = v38; v39 = v54 + v42; v18 = v39; v45 = v39; v46 = v55 * v46; if ( v15 ) { LABEL_4: v15[1] = v16; v15[2] = v17; v15[3] = v18; v15[4] = v46; LABEL_7: v50 = 1; goto LABEL_8; } v19 = sub_837000((int)&v43); if ( v19 ) { sub_833C10(v47, v19); goto LABEL_7; } LABEL_8: v5 = v49; v9 = v50; LABEL_9: switch ( byte_836388[a4] ) { case 0: if ( v35 == 1 || !v35 ) { if ( !v47[11] ) { v27 = *(_DWORD *)(a2 + 184); if ( *(_WORD *)(v27 + 12) <= 0x19u ) goto LABEL_27; v28 = *(_DWORD *)(v27 + 32); v29 = *(unsigned __int16 *)(v27 + 12); v30 = sub_836FB0(); if ( !v30 ) goto LABEL_27; sub_833C10(v47, v30); } LABEL_26: ++v9; goto LABEL_27; } if ( v35 == 2 && v47[11] ) goto LABEL_26; LABEL_27: if ( v36 == 1 || !v36 ) { if ( !v48[11] ) { v31 = *(_DWORD *)(v5 + 184); if ( *(_WORD *)(v31 + 12) <= 0x19u ) goto LABEL_37; v32 = *(_DWORD *)(v31 + 32); v33 = *(unsigned __int16 *)(v31 + 12); v34 = sub_836FB0(); if ( !v34 ) goto LABEL_37; sub_833C10(v48, v34); } LABEL_36: ++v9; goto LABEL_37; } if ( v36 == 2 && v48[11] ) goto LABEL_36; LABEL_37: if ( v9 != 2 ) return 1; return (unsigned __int8)sub_847300(a1, a2, v5); case 1: return 1; case 2: return 0; } } //----- (008363A0) -------------------------------------------------------- int __cdecl sub_8363A0(float a1, int a2, int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // esi int v6; // eax int (__thiscall *v8)(_DWORD *); // eax unsigned int v9; // edi int v10; // eax int v11; // eax int v12; // ecx int v13; // edx unsigned int v14; // edi int v15; // eax int v16; // eax int v17; // edx int v18; // [esp+18h] [ebp-1Ch] int v19; // [esp+1Ch] [ebp-18h] int v20; // [esp+20h] [ebp-14h] int v21; // [esp+24h] [ebp-10h] int v22; // [esp+28h] [ebp-Ch] int v23; // [esp+2Ch] [ebp-8h] unsigned int v24; // [esp+30h] [ebp-4h] v3 = *(_DWORD **)(a2 + 12); if ( !v3[43] ) { v4 = (*(int (__thiscall **)(_DWORD))(*v3 + 4))(*(_DWORD *)(a2 + 12)); if ( v4 ) { while ( (char *)v4 != dword_BA455C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_5; } v8 = *(int (__thiscall **)(_DWORD *))(*v3 + 4); v24 = v3[47]; v9 = 0; v10 = v8(v3); if ( v10 ) { while ( (char *)v10 != dword_BA4A58 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_15; } v9 = v3[59]; v24 = v9 + 1; } LABEL_15: if ( v9 < v24 ) { while ( 1 ) { if ( v3[47] > v9 ) { v11 = *(_DWORD *)(v3[45] + 4 * v9); if ( v11 ) { v20 = *(_DWORD *)(a2 + 8); v21 = v11; v12 = *(_DWORD *)(a2 + 20); v22 = *(_DWORD *)(a2 + 16); v23 = v12; LOBYTE(v18) = 0; v19 = 2; if ( sub_836C10(a1, (int)&v18, a3) == 1 ) break; } } if ( ++v9 >= v24 ) return 0; } return 1; } return 0; } } LABEL_5: v5 = *(_DWORD **)(a3 + 12); if ( v5[43] ) return 0; v6 = (*(int (__thiscall **)(_DWORD))(*v5 + 4))(*(_DWORD *)(a3 + 12)); if ( !v6 ) return 0; while ( (char *)v6 != dword_BA455C ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } v13 = *v5; v24 = v5[47]; v14 = 0; v15 = (*(int (__thiscall **)(_DWORD *))(v13 + 4))(v5); if ( v15 ) { while ( (char *)v15 != dword_BA4A58 ) { v15 = *(_DWORD *)(v15 + 4); if ( !v15 ) goto LABEL_26; } v14 = v5[59]; v24 = v14 + 1; } LABEL_26: if ( v14 >= v24 ) return 0; while ( 1 ) { if ( v5[47] > v14 ) { v16 = *(_DWORD *)(v5[45] + 4 * v14); if ( v16 ) { v17 = *(_DWORD *)(a3 + 16); v20 = *(_DWORD *)(a3 + 8); v22 = v17; v21 = v16; v23 = *(_DWORD *)(a3 + 20); LOBYTE(v18) = 0; v19 = 2; if ( sub_836C10(a1, a2, (int)&v18) == 1 ) break; } } if ( ++v14 >= v24 ) return 0; } return 1; } //----- (00836560) -------------------------------------------------------- int __cdecl sub_836560(int a1, float a2, int a3, int a4) { int v4; // ebx unsigned int v5; // ecx unsigned int v6; // edi int v7; // eax int v8; // edx int v10; // [esp+18h] [ebp-18h] int v11; // [esp+1Ch] [ebp-14h] int v12; // [esp+20h] [ebp-10h] int v13; // [esp+24h] [ebp-Ch] int v14; // [esp+28h] [ebp-8h] int v15; // [esp+2Ch] [ebp-4h] int v16; // [esp+38h] [ebp+8h] v4 = a1; v5 = *(_DWORD *)(a1 + 188); v6 = 0; v16 = v5; if ( !v5 ) return 0; while ( 1 ) { if ( *(_DWORD *)(v4 + 188) <= v6 ) goto LABEL_6; v7 = *(_DWORD *)(*(_DWORD *)(v4 + 180) + 4 * v6); if ( !v7 ) goto LABEL_6; v8 = *(_DWORD *)(a3 + 16); v12 = *(_DWORD *)(a3 + 8); v14 = v8; v13 = v7; v15 = *(_DWORD *)(a3 + 20); LOBYTE(v10) = 0; v11 = 2; if ( sub_836C10(a2, (int)&v10, a4) == 1 ) return 1; v5 = v16; LABEL_6: if ( ++v6 >= v5 ) return 0; } } //----- (008365F0) -------------------------------------------------------- int __cdecl sub_8365F0(int a1, float a2, int a3, int a4) { int v4; // ebx unsigned int v5; // ecx unsigned int v6; // edi int v7; // eax int v8; // edx int v10; // [esp+18h] [ebp-18h] int v11; // [esp+1Ch] [ebp-14h] int v12; // [esp+20h] [ebp-10h] int v13; // [esp+24h] [ebp-Ch] int v14; // [esp+28h] [ebp-8h] int v15; // [esp+2Ch] [ebp-4h] int v16; // [esp+38h] [ebp+8h] v4 = a1; v5 = *(_DWORD *)(a1 + 188); v6 = 0; v16 = v5; if ( !v5 ) return 0; while ( 1 ) { if ( *(_DWORD *)(v4 + 188) <= v6 ) goto LABEL_6; v7 = *(_DWORD *)(*(_DWORD *)(v4 + 180) + 4 * v6); if ( !v7 ) goto LABEL_6; v8 = *(_DWORD *)(a4 + 16); v12 = *(_DWORD *)(a4 + 8); v14 = v8; v13 = v7; v15 = *(_DWORD *)(a4 + 20); LOBYTE(v10) = 0; v11 = 2; if ( sub_836C10(a2, a3, (int)&v10) == 1 ) return 1; v5 = v16; LABEL_6: if ( ++v6 >= v5 ) return 0; } } //----- (00836680) -------------------------------------------------------- int __cdecl sub_836680(float a1, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *v5; // ebx int v6; // eax int v7; // eax unsigned int v8; // ecx unsigned int v9; // edi int v10; // eax int v11; // edx int result; // eax int v13; // eax _DWORD *v14; // edi int v15; // eax int v16; // ecx _DWORD *v17; // edi int v18; // ebx int v19; // [esp+1Ch] [ebp-18h] int v20; // [esp+20h] [ebp-14h] int v21; // [esp+24h] [ebp-10h] int v22; // [esp+28h] [ebp-Ch] int v23; // [esp+2Ch] [ebp-8h] int v24; // [esp+30h] [ebp-4h] int v25; // [esp+40h] [ebp+Ch] int v26; // [esp+40h] [ebp+Ch] v4 = (_DWORD *)a2; if ( !*(_BYTE *)a2 ) { v5 = *(_DWORD **)(a2 + 12); v6 = v5[43]; if ( v6 ) { v7 = *(_DWORD *)(v6 + 36); if ( !v7 || v7 == 1 ) { v8 = v5[47]; v9 = 0; v25 = v8; if ( v8 ) { do { if ( v5[47] > v9 ) { v10 = *(_DWORD *)(v5[45] + 4 * v9); if ( v10 ) { v11 = v4[4]; v21 = v4[2]; v23 = v11; v22 = v10; v24 = v4[5]; LOBYTE(v19) = 0; v20 = 2; if ( sub_836C10(a1, (int)&v19, a3) == 1 ) return 1; v8 = v25; } } ++v9; } while ( v9 < v8 ); } return 0; } } *(_BYTE *)a2 = 1; v13 = sub_836680(a1, a2, a3, a4); *(_BYTE *)a2 = 0; if ( v13 == 1 ) return 1; v14 = *(_DWORD **)(a2 + 12); if ( v14 ) { result = (*(int (__thiscall **)(_DWORD))(*v14 + 4))(*(_DWORD *)(a2 + 12)); if ( result ) { while ( (char *)result != dword_BA455C ) { result = *(_DWORD *)(result + 4); if ( !result ) return result; } v15 = v14[43]; if ( !v15 ) return sub_836560((int)v14, a1, a2, a3); v16 = *(_DWORD *)(v15 + 36); if ( *(_DWORD *)(v15 + 40) == 3 ) { if ( v16 != 2 ) return 0; return sub_836560((int)v14, a1, a2, a3); } if ( sub_835E30(v16, a4) ) return sub_836560((int)v14, a1, a2, a3); } } return 0; } v17 = *(_DWORD **)(a3 + 12); v18 = v17[43]; if ( v18 ) { v26 = *(_DWORD *)(v18 + 36); result = (*(int (__thiscall **)(_DWORD *))(*v17 + 4))(v17); if ( !result ) return 0; while ( (char *)result != dword_BA455C ) { result = *(_DWORD *)(result + 4); if ( !result ) return result; } if ( *(_DWORD *)(v18 + 40) == 3 ) { if ( v26 != 2 ) return 0; } else if ( !sub_835E30(v26, a4) ) { return 0; } } return sub_8365F0((int)v17, a1, (int)v4, a3); } //----- (00836850) -------------------------------------------------------- int __cdecl sub_836850(float a1, int a2, int a3, int a4, int a5, int a6) { int v6; // ebx int v7; // edi v6 = *(_DWORD *)(a3 + 172); v7 = *(_DWORD *)(a2 + 172); if ( !sub_8473E0(a1, a2, a3, a5 + 16, a5 + 20, a4, a5 + 32, a5 + 44) ) return 0; *(_BYTE *)a6 = 1; return sub_833FF0((_BYTE *)v7, (int *)a5, *(_DWORD *)(v7 + 36), *(_DWORD *)(v6 + 36)); } //----- (008368C0) -------------------------------------------------------- int __cdecl sub_8368C0(float a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // ebx _DWORD *v7; // esi _DWORD *v9; // [esp+3Ch] [ebp+Ch] v6 = *(_DWORD **)(a2 + 172); v7 = *(_DWORD **)(a3 + 172); v9 = *(_DWORD **)(a3 + 172); if ( !v6[16] ) sub_834160(v6); if ( !v7[16] ) sub_834160(v7); sub_8341F0(v6); sub_8341F0(v7); sub_834570(v6, *(_DWORD *)(a4 + 20)); sub_834570(v9, *(_DWORD *)(a5 + 20)); return sub_833B70( (int)v6, a1, (int)v9, *(_DWORD *)(a4 + 8), *(_DWORD *)(a5 + 8), *(_DWORD *)(a4 + 12), *(_DWORD *)(a5 + 12), *(_DWORD *)(a4 + 16), *(_DWORD *)(a5 + 16), a6); } //----- (00836960) -------------------------------------------------------- int __cdecl sub_836960(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // eax _DWORD *v9; // ebx _DWORD *v10; // esi _DWORD *v12; // [esp+40h] [ebp+Ch] v8 = a2; v9 = *(_DWORD **)(a2 + 172); v10 = *(_DWORD **)(a3 + 172); v12 = *(_DWORD **)(a3 + 172); if ( !v9[16] || !v10[16] ) return sub_8476D0(a1, v8, a3, 1, a7, a8); sub_8341F0(v9); sub_8341F0(v10); sub_834570(v9, *(_DWORD *)(a4 + 20)); sub_834570(v12, *(_DWORD *)(a5 + 20)); return sub_833B70( (int)v9, a1, (int)v12, *(_DWORD *)(a4 + 8), *(_DWORD *)(a5 + 8), *(_DWORD *)(a4 + 12), *(_DWORD *)(a5 + 12), *(_DWORD *)(a4 + 16), *(_DWORD *)(a5 + 16), a8); } //----- (00836A20) -------------------------------------------------------- int __cdecl sub_836A20(float a1, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi _DWORD *v7; // edi v6 = *(_DWORD **)(a2 + 172); v7 = *(_DWORD **)(a3 + 172); if ( !v6[16] ) sub_834160(*(_DWORD **)(a2 + 172)); if ( !v7[16] ) sub_834160(v7); sub_8341F0(v6); sub_8341F0(v7); return sub_847500(a1, a2, a3, 1, a5, a6); } //----- (00836A90) -------------------------------------------------------- int __cdecl sub_836A90(float a1, int a2, int a3, int a4, int a5) { int v5; // ebx int v6; // esi int v7; // edi int result; // eax signed int v9; // [esp+40h] [ebp+14h] *(_BYTE *)a5 = 0; v5 = a4; v6 = *(_DWORD *)(a2 + 12); v7 = *(_DWORD *)(a3 + 12); *(_DWORD *)a4 = *(_DWORD *)(a2 + 8); *(_DWORD *)(a4 + 8) = *(_DWORD *)(a2 + 12); *(_DWORD *)(a4 + 4) = *(_DWORD *)(a3 + 8); *(_DWORD *)(a4 + 12) = *(_DWORD *)(a3 + 12); v9 = sub_834320(v6, v7); if ( !sub_835FF0(a1, v6, v7, v9) ) return 0; switch ( v9 ) { case 0: result = sub_8368C0(a1, v6, v7, a2, a3, a5); break; case 1: result = sub_8368C0(a1, v6, v7, a2, a3, a5); break; case 2: result = sub_836960(a1, v6, v7, a2, a3, 1, v5, a5); break; case 3: case 8: case 9: result = sub_836850(a1, v6, v7, 1, v5, a5); break; case 4: result = sub_836A20(a1, v6, v7, 1, v5, a5); break; case 5: case 6: result = sub_835E60(a1, v6, v7, 1, v5, a5); break; case 7: result = sub_836850(a1, v6, v7, 1, v5, a5); break; default: return 0; } return result; } //----- (00836C10) -------------------------------------------------------- int __cdecl sub_836C10(float a1, int a2, int a3) { int v3; // esi int v4; // eax int v5; // edi int v6; // ecx int v7; // eax int v8; // ecx int result; // eax int v10; // [esp+1Ch] [ebp-40h] float v11; // [esp+2Ch] [ebp-30h] int v12; // [esp+54h] [ebp-8h] int v13; // [esp+58h] [ebp-4h] v3 = a2; v4 = *(_DWORD *)(*(_DWORD *)(a2 + 12) + 172); v5 = a3; v6 = *(_DWORD *)(*(_DWORD *)(a3 + 12) + 172); if ( !v4 || !v6 ) return sub_8363A0(a1, a2, a3); v7 = *(_DWORD *)(v4 + 40); v8 = *(_DWORD *)(v6 + 40); LOBYTE(a2) = 0; if ( v7 == 3 || v8 == 3 || (v12 = 0, v13 = 0, v11 = 0.0, result = sub_836A90(a1, v3, a3, (int)&v10, (int)&a2), result != 1) ) { result = sub_836680(a1, v3, v5, a2); } return result; } //----- (00836CB0) -------------------------------------------------------- int *__cdecl sub_836CB0(float a1, int a2) { flt_BA4524 = a1; dword_BA4518 = *(_DWORD *)a2; dword_BA451C = *(_DWORD *)(a2 + 4); dword_BA4520 = *(_DWORD *)(a2 + 8); return &dword_BA4514; } // BA4514: using guessed type int dword_BA4514; // BA4518: using guessed type int dword_BA4518; // BA451C: using guessed type int dword_BA451C; // BA4520: using guessed type int dword_BA4520; // BA4524: using guessed type float flt_BA4524; //----- (00836CE0) -------------------------------------------------------- float *__cdecl sub_836CE0(float a1, int a2) { float *v2; // eax float *result; // eax v2 = (float *)operator new(0x14u); if ( v2 ) result = sub_834CA0(v2, 1.0, (int)&dword_BA45C0); else result = 0; result[4] = a1; result[1] = *(float *)a2; result[2] = *(float *)(a2 + 4); result[3] = *(float *)(a2 + 8); return result; } // BA45C0: using guessed type int dword_BA45C0; //----- (00836D30) -------------------------------------------------------- _DWORD *__cdecl sub_836D30(unsigned __int16 a1, float *a2) { _DWORD *v2; // eax _DWORD *result; // eax char v4; // [esp+0h] [ebp-40h] if ( !a1 || !a2 ) return 0; sub_8478B0((float *)&v4, a1, a2); v2 = operator new(0x40u); if ( v2 ) result = sub_83AC70(v2, &flt_ABD4B0, &dword_BA45C0, &dword_ABD48C, &dword_ABD498, &dword_ABD4A4); else result = 0; qmemcpy(result + 1, &v4, 0x3Cu); return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD498: using guessed type int dword_ABD498; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4B0: using guessed type float flt_ABD4B0; // BA45C0: using guessed type int dword_BA45C0; //----- (00836DC0) -------------------------------------------------------- int __cdecl sub_836DC0(float a1, int a2, int a3, int a4, int a5) { int v5; // ebx int (__cdecl *v6)(_DWORD, int, int, int, int); // eax int v8; // ebx int v9; // eax v5 = 6 * (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); v6 = (int (__cdecl *)(_DWORD, int, int, int, int))*((_DWORD *)dword_BA4540 + v5 + (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 12))(a4)); if ( v6 ) return v6(LODWORD(a1), a2, a3, a4, a5); v8 = 6 * (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 12))(a4); v9 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); return (*((int (__cdecl **)(_DWORD, int, int, int, int))dword_BA4540 + v8 + v9))(LODWORD(a1), a4, a5, a2, a3); } //----- (00836E50) -------------------------------------------------------- int __cdecl sub_836E50(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v10; // ebx int (__cdecl *v11)(_DWORD, int, int, int, int, int, int, int, int, int); // eax int v13; // ebx int v14; // eax v10 = 6 * (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); v11 = (int (__cdecl *)(_DWORD, int, int, int, int, int, int, int, int, int))*((_DWORD *)dword_BA4544 + v10 + (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 12))(a4)); if ( v11 ) return v11(LODWORD(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10); v13 = 6 * (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 12))(a4); v14 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); return (*((int (__cdecl **)(_DWORD, int, int, int, int, int, int, int, int, int))dword_BA4544 + v13 + v14))( LODWORD(a1), a4, a5, a2, a3, a6, a7, a8, a10, a9); } //----- (00836F10) -------------------------------------------------------- int __cdecl sub_836F10(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // eax v7 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); return (*((int (__cdecl **)(_DWORD, int, int, int, int, int, int))dword_BA4548 + v7))( LODWORD(a1), a2, a3, a4, a5, a6, a7); } //----- (00836F50) -------------------------------------------------------- int __cdecl sub_836F50(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { int v12; // eax v12 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 12))(a2); return (*((int (__cdecl **)(_DWORD, int, int, int, int, int, int, int, int, int, int, int))dword_BA454C + v12))( LODWORD(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); } //----- (00836FB0) -------------------------------------------------------- int sub_836FB0() { int result; // eax if ( dword_BA4558 ) result = dword_BA4558(); else result = 0; return result; } // BA4558: using guessed type int (*dword_BA4558)(void); //----- (00836FD0) -------------------------------------------------------- int __cdecl sub_836FD0(int a1) { int result; // eax if ( dword_BA4550 ) result = dword_BA4550(*(float *)(a1 + 12), a1); else result = 0; return result; } // BA4550: using guessed type int (__cdecl *dword_BA4550)(_DWORD, _DWORD); //----- (00837000) -------------------------------------------------------- int __cdecl sub_837000(int a1) { int result; // eax if ( dword_BA4554 ) result = dword_BA4554(*(float *)(a1 + 12), a1); else result = 0; return result; } // BA4554: using guessed type int (__cdecl *dword_BA4554)(_DWORD, _DWORD); //----- (00837030) -------------------------------------------------------- int __cdecl sub_837030(signed int a1) { signed int v1; // esi int v2; // eax int v3; // ST00_4 void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v6; // [esp+4h] [ebp-4h] v1 = a1; v2 = *(_DWORD *)(a1 + 352); v3 = v2; v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v2 + 4); a1 = 4; v4(v3, &v6, 4, &a1, 1); if ( v6 < 0 || v6 >= 6 ) result = 0; else result = ((int (__cdecl *)(signed int))dword_BA4528[v6])(v1); return result; } // BA4528: using guessed type int dword_BA4528[]; //----- (00837080) -------------------------------------------------------- int __thiscall sub_837080(void *this, signed int a2) { int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int *, signed int, signed int *, int); // eax int v6; // [esp+0h] [ebp-4h] v6 = (*(int (__stdcall **)(void *))(*(_DWORD *)this + 12))(this); v2 = *(_DWORD *)(a2 + 356); v3 = v2; v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, int))(v2 + 8); a2 = 4; return v4(v3, &v6, 4, &a2, v6); } //----- (008370C0) -------------------------------------------------------- int __thiscall sub_8370C0(char *this, signed int a2) { char *v2; // esi v2 = this; nullsub_32(a2); sub_87D5D0(v2 + 4, a2); return sub_8608D0(v2 + 20, a2); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008370F0) -------------------------------------------------------- int __thiscall sub_8370F0(char *this, signed int a2) { char *v2; // esi v2 = this; sub_837080(this, a2); sub_8737A0(v2 + 4, a2); return sub_860940(v2 + 20, a2); } //----- (00837120) -------------------------------------------------------- int __thiscall sub_837120(float *this, int a2) { int v2; // edx float *v3; // esi double v4; // st7 double v5; // st7 int result; // eax int v7; // ecx int v8; // [esp+4h] [ebp-14h] int v9; // [esp+8h] [ebp-10h] int v10; // [esp+Ch] [ebp-Ch] double v11; // [esp+10h] [ebp-8h] float v12; // [esp+20h] [ebp+8h] v2 = *(_DWORD *)(a2 + 8); v11 = *(float *)(a2 + 16); v3 = this; v8 = *(_DWORD *)(a2 + 4); v10 = *(_DWORD *)(a2 + 12); v9 = v2; v4 = sub_4430B0((float *)&v8); v5 = v11 / v4; result = v9; v7 = v10; *((_DWORD *)v3 + 1) = v8; *((_DWORD *)v3 + 2) = result; *((_DWORD *)v3 + 3) = v7; v12 = v5; v3[4] = v12; return result; } //----- (00837180) -------------------------------------------------------- BOOL __thiscall sub_837180(float *this, float *a2) { float *v2; // edi v2 = this; return (*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 12))(a2) == 5 && v2[1] == a2[1] && v2[2] == a2[2] && v2[3] == a2[3] && v2[4] == a2[4]; } //----- (008371F0) -------------------------------------------------------- float __userpurge sub_8371F0@(float *this@, int a2, float *a3) { int v3; // ebx float *v4; // esi float result; // eax float v6; // ecx double v7; // st6 float v8; // [esp+Ch] [ebp-Ch] float v9; // [esp+10h] [ebp-8h] float v10; // [esp+14h] [ebp-4h] float v11; // [esp+20h] [ebp+8h] float v12; // [esp+20h] [ebp+8h] v3 = a2; v4 = this; sub_85DA90(a3, &v8, (float *)(a2 + 4)); result = v9; v6 = v10; v11 = a3[10] * v9 + a3[9] * v8 + a3[11] * v10; v7 = a3[12] * *(float *)(v3 + 16); v4[1] = v8; v4[2] = result; v4[3] = v6; v12 = v11 + v7; v4[4] = v12; return result; } //----- (00837260) -------------------------------------------------------- bool __cdecl sub_837260(float a1, int a2, int a3, int a4, int a5) { float *v5; // ecx double v6; // st7 bool result; // al float v8; // ST00_4 float v9; // ST04_4 float v10; // ST08_4 float v11; // [esp+18h] [ebp+Ch] float v12; // [esp+18h] [ebp+Ch] int v13; // [esp+18h] [ebp+Ch] int v14; // [esp+20h] [ebp+14h] v5 = (float *)a2; v11 = *(float *)(a4 + 8) * *(float *)(a2 + 8) + *(float *)(a4 + 4) * *(float *)(a2 + 4) + *(float *)(a4 + 12) * *(float *)(a2 + 12); v12 = v11 - v5[4]; *(float *)&v14 = -*(float *)(a4 + 16); v6 = v12; if ( *(float *)&v14 <= (double)v12 ) return 1; v8 = *(float *)a5 - *(float *)a3; v9 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v10 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v13 = v5[2] * v9 + v8 * v5[1] + v5[3] * v10; if ( *(float *)&v13 > 0.0 ) result = *(float *)&v14 <= v6 + *(float *)&v13 * a1; else result = 0; return result; } //----- (00837320) -------------------------------------------------------- bool __cdecl sub_837320(float a1, int a2, int a3, int a4, int a5) { float *v5; // ecx float *v6; // eax float v7; // ST00_4 float v8; // ST04_4 float v9; // ST08_4 double v10; // st7 double v11; // st7 double v12; // st7 bool result; // al float v14; // ST00_4 float v15; // ST04_4 float v16; // ST08_4 float v17; // [esp+18h] [ebp+Ch] float v18; // [esp+18h] [ebp+Ch] float v19; // [esp+18h] [ebp+Ch] float v20; // [esp+18h] [ebp+Ch] float v21; // [esp+18h] [ebp+Ch] float v22; // [esp+18h] [ebp+Ch] float v23; // [esp+18h] [ebp+Ch] float v24; // [esp+18h] [ebp+Ch] int v25; // [esp+18h] [ebp+Ch] float v26; // [esp+20h] [ebp+14h] int v27; // [esp+20h] [ebp+14h] v5 = (float *)a2; v6 = (float *)a4; v17 = *(float *)(a4 + 20) * *(float *)(a2 + 8) + *(float *)(a4 + 16) * *(float *)(a2 + 4) + *(float *)(a4 + 24) * *(float *)(a2 + 12); v7 = v17 * *(float *)(a4 + 52); v18 = *(float *)(a4 + 32) * v5[2] + *(float *)(a4 + 28) * v5[1] + *(float *)(a4 + 36) * v5[3]; v8 = v18 * *(float *)(a4 + 56); v19 = *(float *)(a4 + 44) * v5[2] + *(float *)(a4 + 40) * v5[1] + *(float *)(a4 + 48) * v5[3]; v9 = v19 * *(float *)(a4 + 60); v20 = fabs(v8); v10 = v20; v21 = fabs(v7); v11 = v10 + v21; v22 = fabs(v9); v26 = v11 + v22; v23 = v6[2] * v5[2] + v6[1] * v5[1] + v6[3] * v5[3]; v24 = v23 - v5[4]; *(float *)&v27 = -v26; v12 = v24; if ( *(float *)&v27 <= (double)v24 ) return 1; v14 = *(float *)a5 - *(float *)a3; v15 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v16 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v25 = v5[2] * v15 + v14 * v5[1] + v16 * v5[3]; if ( *(float *)&v25 > 0.0 ) result = *(float *)&v27 <= v12 + *(float *)&v25 * a1; else result = 0; return result; } //----- (00837470) -------------------------------------------------------- bool __cdecl sub_837470(float a1, int a2, int a3, int a4, int a5) { float *v5; // edx float *v6; // ecx double v7; // st7 double v9; // st6 float v10; // ST04_4 float v11; // ST08_4 float v12; // ST0C_4 float v13; // [esp+18h] [ebp+Ch] float v14; // [esp+18h] [ebp+Ch] float v15; // [esp+18h] [ebp+Ch] float v16; // [esp+18h] [ebp+Ch] int v17; // [esp+18h] [ebp+Ch] int v18; // [esp+18h] [ebp+Ch] int v19; // [esp+20h] [ebp+14h] v5 = (float *)a4; v6 = (float *)a2; v13 = *(float *)(a4 + 36) * *(float *)(a2 + 8) + *(float *)(a4 + 32) * *(float *)(a2 + 4) + *(float *)(a4 + 40) * *(float *)(a2 + 12); v14 = v13 - v6[4]; *(float *)&v19 = -*(float *)(a4 + 56); v7 = v14; if ( *(float *)&v19 <= (double)v14 ) return 1; v15 = v5[12] * v6[2] + v5[11] * v6[1] + v5[13] * v6[3]; v16 = v15 + v7; v9 = v16; if ( v16 >= (double)*(float *)&v19 ) return 1; v10 = *(float *)a5 - *(float *)a3; v11 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v12 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v17 = v6[2] * v11 + v10 * v6[1] + v6[3] * v12; if ( *(float *)&v17 <= 0.0 ) return 0; *(float *)&v18 = -(*(float *)&v17 * a1 + v5[14]); return *(float *)&v18 <= v7 || v9 >= *(float *)&v18; } //----- (00837580) -------------------------------------------------------- bool __cdecl sub_837580(float a1, int a2, int a3, int a4, int a5) { float *v5; // ecx bool result; // al float v7; // ST04_4 float v8; // ST08_4 float v9; // ST0C_4 float v10; // [esp+1Ch] [ebp+Ch] int v11; // [esp+1Ch] [ebp+Ch] v5 = (float *)a2; v10 = *(float *)(a4 + 8) * *(float *)(a2 + 8) + *(float *)(a2 + 4) * *(float *)(a4 + 4) + *(float *)(a4 + 12) * *(float *)(a2 + 12); if ( v10 > -0.9999989867210388 || -*(float *)(a4 + 16) >= v5[4] ) return 1; v7 = *(float *)a5 - *(float *)a3; v8 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v9 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v11 = v5[1] * v7 + v5[2] * v8 + v5[3] * v9; if ( *(float *)&v11 > 0.0 ) result = v5[4] <= *(float *)&v11 * a1 - *(float *)(a4 + 16); else result = 0; return result; } //----- (00837650) -------------------------------------------------------- bool __cdecl sub_837650(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { float *v7; // ecx double v8; // st6 double v9; // st5 bool result; // al double v11; // st4 float v12; // ST00_4 float v13; // ST04_4 float v14; // ST08_4 bool v15; // c0 bool v16; // c3 double v17; // st6 float v18; // [esp+18h] [ebp+Ch] float v19; // [esp+18h] [ebp+Ch] float v20; // [esp+18h] [ebp+Ch] float v21; // [esp+18h] [ebp+Ch] float v22; // [esp+18h] [ebp+Ch] float v23; // [esp+18h] [ebp+Ch] int v24; // [esp+18h] [ebp+Ch] float v25; // [esp+18h] [ebp+Ch] v7 = (float *)a2; v18 = *(float *)(a4 + 4) * *(float *)(a2 + 8) + *(float *)a4 * *(float *)(a2 + 4) + *(float *)(a4 + 8) * *(float *)(a2 + 12); v19 = v18 - v7[4]; v8 = v19; if ( v19 >= 0.0 ) return 1; v20 = *(float *)(a5 + 4) * v7[2] + *(float *)a5 * v7[1] + *(float *)(a5 + 8) * v7[3]; v21 = v20 - v7[4]; v9 = v21; if ( v21 >= 0.0 ) return 1; v22 = *(float *)(a6 + 4) * v7[2] + *(float *)a6 * v7[1] + *(float *)(a6 + 8) * v7[3]; v23 = v22 - v7[4]; v11 = v23; if ( v23 >= 0.0 ) return 1; v12 = *(float *)a7 - *(float *)a3; v13 = *(float *)(a7 + 4) - *(float *)(a3 + 4); v14 = *(float *)(a7 + 8) - *(float *)(a3 + 8); *(float *)&v24 = v7[2] * v13 + v7[1] * v12 + v7[3] * v14; if ( *(float *)&v24 <= 0.0 ) return 0; v25 = *(float *)&v24 * -a1; v15 = v25 < v8; v16 = v25 == v8; v17 = v25; if ( v15 || v16 ) result = 1; else result = v9 >= v17 || v17 <= v11; return result; } //----- (008377B0) -------------------------------------------------------- char __cdecl sub_8377B0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { float *v10; // edx float *v11; // ecx double v12; // st7 float v13; // ST24_4 float v14; // ST28_4 float v15; // ST2C_4 float v16; // ST18_4 float v17; // ST1C_4 double v18; // st7 float v19; // ST20_4 float v20; // ST18_4 float v21; // ST1C_4 double v22; // st7 float v23; // ST20_4 char result; // al float v25; // ST18_4 float v26; // ST1C_4 float v27; // ST20_4 float v28; // ST18_4 float v29; // ST1C_4 double v30; // st7 float v31; // ST20_4 float v32; // ST0C_4 float v33; // ST10_4 float v34; // ST14_4 float v35; // ST18_4 float v36; // ST1C_4 float v37; // ST20_4 float v38; // ST24_4 float v39; // ST28_4 float v40; // ST2C_4 float v41; // ST18_4 float v42; // ST1C_4 float v43; // ST20_4 float v44; // [esp+30h] [ebp+Ch] float v45; // [esp+30h] [ebp+Ch] int v46; // [esp+30h] [ebp+Ch] float v47; // [esp+30h] [ebp+Ch] float v48; // [esp+30h] [ebp+Ch] int v49; // [esp+38h] [ebp+14h] v10 = (float *)a4; v11 = (float *)a2; v44 = *(float *)(a4 + 8) * *(float *)(a2 + 8) + *(float *)(a2 + 4) * *(float *)(a4 + 4) + *(float *)(a4 + 12) * *(float *)(a2 + 12); v45 = v44 - v11[4]; *(float *)&v49 = -*(float *)(a4 + 16); v12 = v45; if ( *(float *)&v49 > (double)v45 ) { v25 = *(float *)a5 - *(float *)a3; v26 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v27 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v46 = v11[1] * v25 + v11[2] * v26 + v11[3] * v27; if ( *(float *)&v46 <= 0.0 || *(float *)&v46 * a1 + v12 < *(float *)&v49 ) { result = 0; } else { *(float *)a6 = -((v12 + v10[4]) / *(float *)&v46); if ( a8 ) { *(float *)a10 = v11[1]; *(float *)(a10 + 4) = v11[2]; *(float *)(a10 + 8) = v11[3]; v28 = -*(float *)a10; v29 = -*(float *)(a10 + 4); v30 = *(float *)(a10 + 8); *(float *)a9 = v28; *(float *)(a9 + 4) = v29; v31 = -v30; *(float *)(a9 + 8) = v31; } v47 = v10[4]; v32 = v47 * *(float *)a10; v33 = *(float *)(a10 + 4) * v47; v34 = v47 * *(float *)(a10 + 8); v48 = *(float *)a6; v35 = *(float *)a5 * v48; v36 = v48 * *(float *)(a5 + 4); v37 = v48 * *(float *)(a5 + 8); v38 = v35 + v10[1]; v39 = v10[2] + v36; v40 = v10[3] + v37; v41 = v38 + v32; *(float *)a7 = v41; v42 = v39 + v33; *(float *)(a7 + 4) = v42; v43 = v40 + v34; *(float *)(a7 + 8) = v43; result = 1; } } else { *(float *)a6 = 0.0; v13 = v11[1] * v12; v14 = v11[2] * v12; v15 = v12 * v11[3]; v16 = v10[1] - v13; v17 = v10[2] - v14; v18 = v10[3] - v15; *(float *)a7 = v16; *(float *)(a7 + 4) = v17; v19 = v18; *(float *)(a7 + 8) = v19; if ( a8 ) { *(float *)a10 = v11[1]; *(float *)(a10 + 4) = v11[2]; *(float *)(a10 + 8) = v11[3]; v20 = -*(float *)a10; v21 = -*(float *)(a10 + 4); v22 = -*(float *)(a10 + 8); *(float *)a9 = v20; v23 = v22; *(float *)(a9 + 4) = v21; *(float *)(a9 + 8) = v23; } result = 1; } return result; } //----- (008379F0) -------------------------------------------------------- char __cdecl sub_8379F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { float v10; // ST2C_4 float v11; // ST2C_4 float v12; // ST2C_4 float v13; // ST18_4 double v14; // st6 float v15; // ST14_4 float v16; // ST18_4 float v17; // ST18_4 double v18; // st5 double v19; // st4 float v20; // ST40_4 float v21; // ST44_4 float v22; // ST48_4 float v23; // ST30_4 float v24; // ST34_4 double v25; // st7 float v26; // ST38_4 float v27; // ST40_4 float v28; // ST44_4 double v29; // st7 float v30; // ST48_4 char result; // al float v32; // ST30_4 float v33; // ST34_4 float v34; // ST38_4 float v35; // ST28_4 double v36; // st2 float v37; // ST28_4 float v38; // ST30_4 float v39; // ST34_4 float v40; // ST38_4 float v41; // ST1C_4 float v42; // ST20_4 double v43; // st5 float v44; // ST24_4 bool v45; // c0 double v46; // st6 double v47; // st7 float v48; // ST3C_4 double v49; // st4 double v50; // st5 float v51; // ST1C_4 float v52; // ST20_4 float v53; // ST24_4 double v54; // st5 float v55; // ST30_4 float v56; // ST34_4 float v57; // ST38_4 float v58; // ST3C_4 double v59; // st4 double v60; // st5 float v61; // ST1C_4 float v62; // ST20_4 float v63; // ST24_4 double v64; // st5 float v65; // ST30_4 float v66; // ST34_4 float v67; // ST38_4 bool v68; // c0 float v69; // ST3C_4 double v70; // st6 double v71; // st7 float v72; // ST1C_4 float v73; // ST20_4 float v74; // ST24_4 double v75; // st7 float v76; // ST30_4 float v77; // ST34_4 float v78; // ST38_4 float v79; // ST40_4 float v80; // ST44_4 double v81; // st7 float v82; // ST48_4 float v83; // ST40_4 float v84; // ST44_4 double v85; // st7 float v86; // ST48_4 float v87; // [esp+10h] [ebp-40h] float v88; // [esp+14h] [ebp-3Ch] float v89; // [esp+2Ch] [ebp-24h] float v90; // [esp+40h] [ebp-10h] float v91; // [esp+44h] [ebp-Ch] float v92; // [esp+48h] [ebp-8h] v10 = *(float *)(a4 + 20) * *(float *)(a2 + 8) + *(float *)(a2 + 4) * *(float *)(a4 + 16) + *(float *)(a4 + 24) * *(float *)(a2 + 12); v90 = v10 * *(float *)(a4 + 52); v11 = *(float *)(a4 + 32) * *(float *)(a2 + 8) + *(float *)(a2 + 4) * *(float *)(a4 + 28) + *(float *)(a4 + 36) * *(float *)(a2 + 12); v91 = v11 * *(float *)(a4 + 56); v12 = *(float *)(a4 + 44) * *(float *)(a2 + 8) + *(float *)(a4 + 40) * *(float *)(a2 + 4) + *(float *)(a4 + 48) * *(float *)(a2 + 12); v92 = v12 * *(float *)(a4 + 60); v87 = fabs(v91); v13 = fabs(v90); v89 = fabs(v92); v14 = v13; v15 = v13 + v87 + v89; v16 = *(float *)(a4 + 8) * *(float *)(a2 + 8) + *(float *)(a2 + 4) * *(float *)(a4 + 4) + *(float *)(a4 + 12) * *(float *)(a2 + 12); v17 = v16 - *(float *)(a2 + 16); v18 = v15; v88 = -v15; v19 = v17; if ( v88 > (double)v17 ) { v32 = *(float *)a5 - *(float *)a3; v33 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v34 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v35 = *(float *)(a2 + 8) * v33 + *(float *)(a2 + 4) * v32 + v34 * *(float *)(a2 + 12); v36 = v35; if ( v35 <= 0.0 || v36 * a1 + v19 < v88 ) { result = 0; } else { v37 = -((v18 + v19) / v36); *(float *)a6 = v37; v38 = *(float *)a5 * v37; v39 = *(float *)(a5 + 4) * v37; v40 = v37 * *(float *)(a5 + 8); v41 = *(float *)(a4 + 4) + v38; v42 = v39 + *(float *)(a4 + 8); v43 = v40 + *(float *)(a4 + 12); *(float *)a7 = v41; *(float *)(a7 + 4) = v42; v44 = v43; *(float *)(a7 + 8) = v44; v45 = 0.001 < v14; v46 = 0.001; if ( v45 ) { v47 = 0.0; v48 = *(float *)(a4 + 52); v49 = *(float *)(a4 + 16) * v48; v50 = v48; if ( v90 <= 0.0 ) { v55 = v49; v56 = *(float *)(a4 + 20) * v50; v57 = v50 * *(float *)(a4 + 24); *(float *)a7 = *(float *)a7 - v55; *(float *)(a7 + 4) = *(float *)(a7 + 4) - v56; v54 = *(float *)(a7 + 8) - v57; } else { v51 = v49; v52 = *(float *)(a4 + 20) * v50; v53 = v50 * *(float *)(a4 + 24); *(float *)a7 = v51 + *(float *)a7; *(float *)(a7 + 4) = *(float *)(a7 + 4) + v52; v54 = v53 + *(float *)(a7 + 8); } *(float *)(a7 + 8) = v54; } else { v47 = 0.0; } if ( v87 > 0.001 ) { v58 = *(float *)(a4 + 56); v59 = *(float *)(a4 + 28) * v58; v60 = v58; if ( v47 >= v91 ) { v65 = v59; v66 = *(float *)(a4 + 32) * v60; v67 = v60 * *(float *)(a4 + 36); *(float *)a7 = *(float *)a7 - v65; *(float *)(a7 + 4) = *(float *)(a7 + 4) - v66; v64 = *(float *)(a7 + 8) - v67; } else { v61 = v59; v62 = *(float *)(a4 + 32) * v60; v63 = v60 * *(float *)(a4 + 36); *(float *)a7 = v61 + *(float *)a7; *(float *)(a7 + 4) = *(float *)(a7 + 4) + v62; v64 = v63 + *(float *)(a7 + 8); } *(float *)(a7 + 8) = v64; v46 = 0.001; } if ( v46 < v89 ) { v68 = v47 < v92; v69 = *(float *)(a4 + 60); v70 = *(float *)(a4 + 40) * v69; v71 = v69; if ( v68 ) { v72 = v70; v73 = *(float *)(a4 + 44) * v71; v74 = v71 * *(float *)(a4 + 48); *(float *)a7 = v72 + *(float *)a7; *(float *)(a7 + 4) = *(float *)(a7 + 4) + v73; v75 = v74 + *(float *)(a7 + 8); } else { v76 = v70; v77 = *(float *)(a4 + 44) * v71; v78 = v71 * *(float *)(a4 + 48); *(float *)a7 = *(float *)a7 - v76; *(float *)(a7 + 4) = *(float *)(a7 + 4) - v77; v75 = *(float *)(a7 + 8) - v78; } *(float *)(a7 + 8) = v75; } if ( a8 ) { v79 = -*(float *)(a2 + 4); v80 = -*(float *)(a2 + 8); v81 = *(float *)(a2 + 12); *(float *)a9 = v79; v82 = -v81; *(float *)(a9 + 4) = v80; *(float *)(a9 + 8) = v82; v83 = *(float *)a7 - *(float *)(a4 + 4); v84 = *(float *)(a7 + 4) - *(float *)(a4 + 8); v85 = *(float *)(a7 + 8) - *(float *)(a4 + 12); *(float *)a10 = v83; *(float *)(a10 + 4) = v84; v86 = v85; *(float *)(a10 + 8) = v86; } result = 1; } } else { *(float *)a6 = 0.0; v20 = *(float *)(a2 + 4) * v19; v21 = *(float *)(a2 + 8) * v19; v22 = v19 * *(float *)(a2 + 12); v23 = *(float *)(a4 + 4) - v20; v24 = *(float *)(a4 + 8) - v21; v25 = *(float *)(a4 + 12) - v22; *(float *)a7 = v23; *(float *)(a7 + 4) = v24; v26 = v25; *(float *)(a7 + 8) = v26; if ( a8 ) { *(_DWORD *)a10 = *(_DWORD *)(a2 + 4); *(_DWORD *)(a10 + 4) = *(_DWORD *)(a2 + 8); *(_DWORD *)(a10 + 8) = *(_DWORD *)(a2 + 12); v27 = -*(float *)a10; v28 = -*(float *)(a10 + 4); v29 = *(float *)(a10 + 8); *(float *)a9 = v27; *(float *)(a9 + 4) = v28; v30 = -v29; *(float *)(a9 + 8) = v30; } result = 1; } return result; } //----- (00837E80) -------------------------------------------------------- char __cdecl sub_837E80(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { int v10; // esi float *v11; // edi double v12; // st6 double v13; // st5 double v14; // st5 double v15; // st6 float v16; // edx double v17; // st7 double v18; // st7 float v19; // edx double v20; // st7 float v21; // ecx char result; // al float v23; // eax float v24; // ecx float v25; // ecx float v26; // edx double v27; // st7 double v28; // st7 double v29; // st7 int v30; // eax double v31; // st4 double v32; // st7 float v33; // edx float v34; // ecx double v35; // st7 double v36; // st4 double v37; // st7 double v38; // st4 float v39; // edx double v40; // st7 float v41; // ecx int v42; // [esp+34h] [ebp-38h] float v43; // [esp+38h] [ebp-34h] float v44; // [esp+3Ch] [ebp-30h] float v45; // [esp+40h] [ebp-2Ch] float v46; // [esp+44h] [ebp-28h] float v47; // [esp+48h] [ebp-24h] float v48; // [esp+4Ch] [ebp-20h] float v49; // [esp+50h] [ebp-1Ch] float v50; // [esp+54h] [ebp-18h] float v51; // [esp+58h] [ebp-14h] float v52; // [esp+5Ch] [ebp-10h] float v53; // [esp+60h] [ebp-Ch] float v54; // [esp+64h] [ebp-8h] float v55; // [esp+68h] [ebp-4h] float v56; // [esp+78h] [ebp+Ch] float v57; // [esp+78h] [ebp+Ch] int v58; // [esp+78h] [ebp+Ch] float v59; // [esp+78h] [ebp+Ch] float v60; // [esp+78h] [ebp+Ch] int v61; // [esp+78h] [ebp+Ch] float v62; // [esp+78h] [ebp+Ch] float v63; // [esp+78h] [ebp+Ch] float v64; // [esp+78h] [ebp+Ch] int v65; // [esp+80h] [ebp+14h] int v66; // [esp+80h] [ebp+14h] v10 = a4; v11 = (float *)a2; v56 = *(float *)(a4 + 36) * *(float *)(a2 + 8) + *(float *)(a4 + 32) * *(float *)(a2 + 4) + *(float *)(a4 + 40) * *(float *)(a2 + 12); *(float *)&v65 = v56 - v11[4]; v53 = *(float *)(v10 + 32) + *(float *)(v10 + 44); v54 = *(float *)(v10 + 36) + *(float *)(v10 + 48); v55 = *(float *)(v10 + 40) + *(float *)(v10 + 52); v57 = v11[1] * v53 + v11[2] * v54 + v11[3] * v55; *(float *)&v58 = v57 - v11[4]; v12 = *(float *)&v65; v13 = *(float *)&v58; if ( *(float *)&v65 < 0.0 && v13 > 0.0 ) { LABEL_5: *(float *)a6 = 0.0; v59 = v12 / (v12 - v13); v53 = *(float *)(v10 + 44) * v59; v54 = *(float *)(v10 + 48) * v59; v55 = v59 * *(float *)(v10 + 52); v50 = *(float *)(v10 + 32) + v53; v51 = *(float *)(v10 + 36) + v54; v16 = v51; v17 = *(float *)(v10 + 40); *(float *)a7 = v50; v18 = v17 + v55; *(float *)(a7 + 4) = v16; v52 = v18; *(float *)(a7 + 8) = v52; if ( a8 ) { *(float *)a10 = v11[1]; *(float *)(a10 + 4) = v11[2]; *(float *)(a10 + 8) = v11[3]; v50 = -*(float *)a10; v51 = -*(float *)(a10 + 4); v19 = v51; v20 = -*(float *)(a10 + 8); *(float *)a9 = v50; v52 = v20; v21 = v52; *(float *)(a9 + 4) = v19; *(float *)(a9 + 8) = v21; } return 1; } v14 = *(float *)&v65; v15 = *(float *)&v58; if ( *(float *)&v65 > 0.0 ) { v13 = *(float *)&v58; v12 = *(float *)&v65; if ( *(float *)&v58 < 0.0 ) goto LABEL_5; v14 = *(float *)&v65; v15 = *(float *)&v58; } *(float *)&v66 = -*(float *)(v10 + 56); if ( *(float *)&v66 > v14 ) { if ( *(float *)&v66 > v15 ) { v50 = *(float *)a5 - *(float *)a3; v51 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v52 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v60 = v11[2] * v51 + v11[1] * v50 + v11[3] * v52; v29 = v60; if ( v60 > 0.0 && ((*(float *)&v61 = -(v29 * a1 + *(float *)(v10 + 56)), *(float *)&v61 <= v14) || *(float *)&v61 <= v15) ) { if ( v15 + 0.0000009999999974752427 >= v14 ) { v35 = -((v15 + *(float *)(v10 + 56)) / v29); if ( v14 + 0.0000009999999974752427 >= v15 ) { v64 = v35; *(float *)a6 = v64; v38 = *(float *)(v10 + 56); v53 = v11[1] * v38; v54 = v11[2] * v38; v55 = v38 * v11[3]; v50 = *(float *)a5 * v64; v51 = *(float *)(a5 + 4) * v64; v52 = v64 * *(float *)(a5 + 8); v44 = *(float *)(v10 + 44) * 0.5; v45 = *(float *)(v10 + 48) * 0.5; v46 = 0.5 * *(float *)(v10 + 52); v47 = *(float *)(v10 + 32) + v44; v48 = *(float *)(v10 + 36) + v45; v49 = *(float *)(v10 + 40) + v46; v44 = v47 + v50; v45 = v48 + v51; v46 = v49 + v52; v47 = v44 + v53; v48 = v45 + v54; v37 = v46 + v55; } else { v63 = v35; *(float *)a6 = v63; v36 = *(float *)(v10 + 56); v44 = v11[1] * v36; v45 = v11[2] * v36; v46 = v36 * v11[3]; v50 = *(float *)a5 * v63; v51 = *(float *)(a5 + 4) * v63; v52 = v63 * *(float *)(a5 + 8); v47 = *(float *)(v10 + 32) + *(float *)(v10 + 44); v48 = *(float *)(v10 + 36) + *(float *)(v10 + 48); v49 = *(float *)(v10 + 40) + *(float *)(v10 + 52); v53 = v47 + v50; v54 = v48 + v51; v55 = v49 + v52; v47 = v53 + v44; v48 = v54 + v45; v37 = v55 + v46; } v49 = v37; v30 = a7; v33 = v48; *(float *)a7 = v47; v34 = v49; } else { v30 = a7; v62 = -((v14 + *(float *)(v10 + 56)) / v29); *(float *)a6 = v62; v31 = *(float *)(v10 + 56); v47 = v11[1] * v31; v48 = v11[2] * v31; v49 = v31 * v11[3]; v50 = *(float *)a5 * v62; v51 = *(float *)(a5 + 4) * v62; v52 = v62 * *(float *)(a5 + 8); v53 = *(float *)(v10 + 32) + v50; v54 = *(float *)(v10 + 36) + v51; v55 = *(float *)(v10 + 40) + v52; v50 = v53 + v47; v32 = v54; *(float *)a7 = v50; v51 = v32 + v48; v33 = v51; v52 = v55 + v49; v34 = v52; } *(float *)(v30 + 4) = v33; *(float *)(v30 + 8) = v34; if ( a8 ) { *(float *)a10 = v11[1]; *(float *)(a10 + 4) = v11[2]; *(float *)(a10 + 8) = v11[3]; v44 = -*(float *)a10; v45 = -*(float *)(a10 + 4); v39 = v45; v40 = -*(float *)(a10 + 8); *(float *)a9 = v44; v46 = v40; v41 = v46; *(float *)(a9 + 4) = v39; *(float *)(a9 + 8) = v41; } result = 1; } else { result = 0; } } else { *(float *)a6 = 0.0; sub_834CA0((float *)&v42, 1.0, (int)&dword_BA45C0); v46 = *(float *)(v10 + 56); v50 = *(float *)(v10 + 32) + *(float *)(v10 + 44); v27 = *(float *)(v10 + 36); v43 = v50; v51 = v27 + *(float *)(v10 + 48); v28 = *(float *)(v10 + 40); v44 = v51; v52 = v28 + *(float *)(v10 + 52); v45 = v52; result = sub_8377B0(a1, (int)v11, a3, (int)&v42, a5, a6, a7, a8, a9, a10); } } else { *(float *)a6 = 0.0; sub_834CA0((float *)&v42, 1.0, (int)&dword_BA45C0); v46 = *(float *)(v10 + 56); if ( -v46 > *(float *)&v58 ) { v25 = *(float *)(v10 + 36); v26 = *(float *)(v10 + 40); v43 = *(float *)(v10 + 32); v44 = v25; v45 = v26; } else { v23 = *(float *)(v10 + 8); v24 = *(float *)(v10 + 12); v43 = *(float *)(v10 + 4); v44 = v23; v45 = v24; } result = sub_8377B0(a1, (int)v11, a3, (int)&v42, a5, a6, a7, a8, a9, a10); } return result; } // BA45C0: using guessed type int dword_BA45C0; //----- (00838440) -------------------------------------------------------- char __cdecl sub_838440(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { float *v10; // edx float *v11; // ecx double v12; // st7 float v13; // ST10_4 float v14; // ST14_4 float v15; // ST18_4 float v16; // ST1C_4 float v17; // ST20_4 float v18; // ST24_4 float v19; // ST04_4 float v20; // ST08_4 float v21; // ST0C_4 float v22; // ST04_4 float v23; // ST08_4 double v24; // st7 float v25; // ST0C_4 float v26; // ST04_4 float v27; // ST08_4 double v28; // st7 float v29; // ST0C_4 char result; // al int v31; // eax float v32; // ST04_4 float v33; // ST08_4 double v34; // st7 float v35; // ST0C_4 float v36; // esi float v37; // ST04_4 float v38; // ST08_4 float v39; // ST0C_4 double v40; // st7 float v41; // ST10_4 float v42; // ST14_4 float v43; // ST18_4 double v44; // st5 float v45; // ST04_4 float v46; // ST08_4 float v47; // ST0C_4 float v48; // ST1C_4 float v49; // ST20_4 float v50; // ST24_4 float v51; // [esp+34h] [ebp+Ch] float v52; // [esp+34h] [ebp+Ch] float v53; // [esp+34h] [ebp+Ch] float v54; // [esp+34h] [ebp+Ch] float v55; // [esp+34h] [ebp+Ch] float v56; // [esp+34h] [ebp+Ch] float v57; // [esp+3Ch] [ebp+14h] v10 = (float *)a4; v11 = (float *)a2; v51 = *(float *)(a4 + 4) * *(float *)(a2 + 4) + *(float *)(a4 + 8) * *(float *)(a2 + 8) + *(float *)(a4 + 12) * *(float *)(a2 + 12); v12 = v51; if ( v51 <= -0.9999989867210388 ) { if ( -*(float *)(a4 + 16) < v11[4] ) { v37 = *(float *)a5 - *(float *)a3; v38 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v39 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v55 = v11[2] * v38 + v11[1] * v37 + v11[3] * v39; v40 = v55; if ( v55 <= 0.0 || v40 * a1 - *(float *)(a4 + 16) < v11[4] ) return 0; v56 = (*(float *)(a4 + 16) + v11[4]) / v40; *(float *)a6 = v56; v31 = a7; v41 = v56 * *(float *)a3; v42 = *(float *)(a3 + 4) * v56; v43 = v56 * *(float *)(a3 + 8); v44 = v11[4]; v45 = v11[1] * v44; v46 = v11[2] * v44; v47 = v44 * v11[3]; v48 = v45 + v41; *(float *)a7 = v48; v49 = v46 + v42; *(float *)(a7 + 4) = v49; v50 = v47 + v43; v36 = v50; } else { *(float *)a6 = 0.0; v31 = a7; v54 = v11[4] - *(float *)(a4 + 16); v32 = v11[1] * v54; v33 = v11[2] * v54; v34 = v54 * v11[3]; *(float *)a7 = v32; *(float *)(a7 + 4) = v33; v35 = v34; v36 = v35; } *(float *)(v31 + 8) = v36; if ( a8 ) { *(float *)a10 = v11[1]; *(float *)(a10 + 4) = v11[2]; *(float *)(a10 + 8) = v11[3]; *(_DWORD *)a9 = *(_DWORD *)(a4 + 4); *(_DWORD *)(a9 + 4) = *(_DWORD *)(a4 + 8); *(_DWORD *)(a9 + 8) = *(_DWORD *)(a4 + 12); } result = 1; } else { v52 = 1.0 / (1.0 - v12 * v12); v57 = (v11[4] - *(float *)(a4 + 16) * v12) * v52; v53 = (v10[4] - v12 * v11[4]) * v52; *(float *)a6 = 0.0; v13 = v10[1] * v53; v14 = v10[2] * v53; v15 = v53 * v10[3]; v16 = v11[1] * v57; v17 = v11[2] * v57; v18 = v57 * v11[3]; v19 = v16 + v13; *(float *)a7 = v19; v20 = v14 + v17; *(float *)(a7 + 4) = v20; v21 = v18 + v15; *(float *)(a7 + 8) = v21; if ( a8 ) { v22 = -v11[1]; v23 = -v11[2]; v24 = v11[3]; *(float *)a9 = v22; v25 = -v24; *(float *)(a9 + 4) = v23; *(float *)(a9 + 8) = v25; v26 = -v10[1]; v27 = -v10[2]; v28 = -v10[3]; *(float *)a10 = v26; v29 = v28; *(float *)(a10 + 4) = v27; *(float *)(a10 + 8) = v29; } result = 1; } return result; } //----- (00838700) -------------------------------------------------------- char __cdecl sub_838700(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12) { int v12; // ecx double v13; // st6 float v14; // ST18_4 float v15; // ST1C_4 double v16; // st7 float v17; // ST20_4 double v19; // st5 float v20; // ST18_4 float v21; // ST1C_4 double v22; // st7 float v23; // ST20_4 double v24; // st4 float v25; // ST18_4 float v26; // ST1C_4 double v27; // st7 float v28; // ST20_4 float v29; // ST18_4 float v30; // ST1C_4 float v31; // ST20_4 double v32; // st7 double v33; // st2 double v34; // st3 double v35; // st6 float *v36; // eax int v37; // eax float v38; // ST18_4 float v39; // ST1C_4 float v40; // ST20_4 float v41; // ST0C_4 float v42; // ST10_4 double v43; // st7 float v44; // ST14_4 float v45; // edx float v46; // ST0C_4 float v47; // ST10_4 float v48; // ST14_4 double v49; // st7 float v50; // ST0C_4 float v51; // ST10_4 float v52; // ST14_4 float v53; // ST20_4 float v54; // ST0C_4 float v55; // ST10_4 double v56; // st7 float v57; // ST14_4 float v58; // [esp+10h] [ebp-Ch] float v59; // [esp+14h] [ebp-8h] float v60; // [esp+28h] [ebp+Ch] float v61; // [esp+28h] [ebp+Ch] float v62; // [esp+28h] [ebp+Ch] float v63; // [esp+28h] [ebp+Ch] float v64; // [esp+28h] [ebp+Ch] float v65; // [esp+28h] [ebp+Ch] float v66; // [esp+28h] [ebp+Ch] float v67; // [esp+28h] [ebp+Ch] v12 = a2; v60 = *(float *)(a2 + 8) * *(float *)(a4 + 4) + *(float *)(a2 + 4) * *(float *)a4 + *(float *)(a2 + 12) * *(float *)(a4 + 8); v61 = v60 - *(float *)(v12 + 16); v13 = v61; if ( v61 >= 0.0 ) { *(float *)a8 = 0.0; *(_DWORD *)a9 = *(_DWORD *)a4; *(_DWORD *)(a9 + 4) = *(_DWORD *)(a4 + 4); *(_DWORD *)(a9 + 8) = *(_DWORD *)(a4 + 8); if ( a10 ) { *(_DWORD *)a12 = *(_DWORD *)(v12 + 4); *(_DWORD *)(a12 + 4) = *(_DWORD *)(v12 + 8); *(_DWORD *)(a12 + 8) = *(_DWORD *)(v12 + 12); v14 = -*(float *)a12; v15 = -*(float *)(a12 + 4); v16 = -*(float *)(a12 + 8); *(float *)a11 = v14; v17 = v16; *(float *)(a11 + 4) = v15; *(float *)(a11 + 8) = v17; } return 1; } v62 = *(float *)(v12 + 4) * *(float *)a5 + *(float *)(a5 + 4) * *(float *)(v12 + 8) + *(float *)(v12 + 12) * *(float *)(a5 + 8); v63 = v62 - *(float *)(v12 + 16); v19 = v63; if ( v63 < 0.0 ) { v64 = *(float *)(v12 + 8) * *(float *)(a6 + 4) + *(float *)a6 * *(float *)(v12 + 4) + *(float *)(a6 + 8) * *(float *)(v12 + 12); v65 = v64 - *(float *)(v12 + 16); v24 = v65; if ( v65 >= 0.0 ) { *(float *)a8 = 0.0; *(_DWORD *)a9 = *(_DWORD *)a6; *(_DWORD *)(a9 + 4) = *(_DWORD *)(a6 + 4); *(_DWORD *)(a9 + 8) = *(_DWORD *)(a6 + 8); if ( a10 ) { *(_DWORD *)a12 = *(_DWORD *)(v12 + 4); *(_DWORD *)(a12 + 4) = *(_DWORD *)(v12 + 8); *(_DWORD *)(a12 + 8) = *(_DWORD *)(v12 + 12); v25 = -*(float *)a12; v26 = -*(float *)(a12 + 4); v27 = *(float *)(a12 + 8); *(float *)a11 = v25; v28 = -v27; *(float *)(a11 + 4) = v26; *(float *)(a11 + 8) = v28; return 1; } return 1; } v29 = *(float *)a7 - *(float *)a3; v30 = *(float *)(a7 + 4) - *(float *)(a3 + 4); v31 = *(float *)(a7 + 8) - *(float *)(a3 + 8); v66 = *(float *)(v12 + 8) * v30 + *(float *)(v12 + 4) * v29 + *(float *)(v12 + 12) * v31; v32 = v66; if ( v66 <= 0.0 ) return 0; v67 = -a1 * v32; v33 = v67; if ( v67 > v13 && v33 > v19 && v33 > v24 ) return 0; v34 = v13; v35 = a1; if ( v34 < v19 ) { v36 = (float *)a8; if ( v24 <= v19 ) { *(float *)a8 = -v19 / v32; v46 = *(float *)a7 * v35; v47 = *(float *)(a7 + 4) * v35; v48 = v35 * *(float *)(a7 + 8); v58 = v46 + *(float *)a5; v59 = *(float *)(a5 + 4) + v47; v49 = v48 + *(float *)(a5 + 8); LABEL_23: v37 = a9; v53 = v49; *(float *)a9 = v58; *(float *)(a9 + 4) = v59; v45 = v53; LABEL_24: *(float *)(v37 + 8) = v45; if ( a10 ) { *(_DWORD *)a12 = *(_DWORD *)(v12 + 4); *(_DWORD *)(a12 + 4) = *(_DWORD *)(v12 + 8); *(_DWORD *)(a12 + 8) = *(_DWORD *)(v12 + 12); v54 = -*(float *)a12; v55 = -*(float *)(a12 + 4); v56 = -*(float *)(a12 + 8); *(float *)a11 = v54; v57 = v56; *(float *)(a11 + 4) = v55; *(float *)(a11 + 8) = v57; } return 1; } } else { v36 = (float *)a8; if ( v24 <= v34 ) { *(float *)a8 = -v34 / v32; v37 = a9; v38 = *(float *)a7 * v35; v39 = *(float *)(a7 + 4) * v35; v40 = v35 * *(float *)(a7 + 8); v41 = v38 + *(float *)a4; v42 = *(float *)(a4 + 4) + v39; v43 = *(float *)(a4 + 8); *(float *)a9 = v41; *(float *)(a9 + 4) = v42; v44 = v43 + v40; v45 = v44; goto LABEL_24; } } *v36 = -v24 / v32; v50 = *(float *)a7 * v35; v51 = *(float *)(a7 + 4) * v35; v52 = a1 * *(float *)(a7 + 8); v58 = *(float *)a6 + v50; v59 = v51 + *(float *)(a6 + 4); v49 = *(float *)(a6 + 8) + v52; goto LABEL_23; } *(float *)a8 = 0.0; *(_DWORD *)a9 = *(_DWORD *)a5; *(_DWORD *)(a9 + 4) = *(_DWORD *)(a5 + 4); *(_DWORD *)(a9 + 8) = *(_DWORD *)(a5 + 8); if ( a10 ) { *(_DWORD *)a12 = *(_DWORD *)(v12 + 4); *(_DWORD *)(a12 + 4) = *(_DWORD *)(v12 + 8); *(_DWORD *)(a12 + 8) = *(_DWORD *)(v12 + 12); v20 = -*(float *)a12; v21 = -*(float *)(a12 + 4); v22 = -*(float *)(a12 + 8); *(float *)a11 = v20; v23 = v22; *(float *)(a11 + 4) = v21; *(float *)(a11 + 8) = v23; } return 1; } //----- (00838AB0) -------------------------------------------------------- float *__thiscall sub_838AB0(float *this, int a2) { float *v2; // esi float *v3; // ebx int v4; // ecx int v5; // eax int v6; // edx double v7; // st7 double v8; // st7 int v9; // ecx int v10; // edx int v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] int v14; // [esp+14h] [ebp-Ch] double v15; // [esp+18h] [ebp-8h] float v16; // [esp+28h] [ebp+8h] v2 = this; *(_DWORD *)this = &NiHalfSpaceBV::`vftable'; sub_8736A0(this + 1); v3 = (float *)a2; v4 = *(_DWORD *)(a2 + 8); v5 = *(_DWORD *)(a2 + 4); v15 = *(float *)(a2 + 16); v6 = *(_DWORD *)(a2 + 12); v13 = v4; v12 = v5; v14 = v6; v7 = sub_4430B0((float *)&v12); v8 = v15 / v7; v9 = v13; v10 = v14; *((_DWORD *)v2 + 1) = v12; *((_DWORD *)v2 + 2) = v9; *((_DWORD *)v2 + 3) = v10; v16 = v8; v2[4] = v16; v2[5] = v3[5]; v2[6] = v3[6]; v2[7] = v3[7]; return v2; } // A23A04: using guessed type void *NiHalfSpaceBV::`vftable'; //----- (00838B40) -------------------------------------------------------- float *__thiscall sub_838B40(float *this, float *a2, float *a3) { float *v3; // esi double v4; // st7 int v5; // edx double v6; // st6 double v7; // st7 double v8; // st6 int v9; // edx double v10; // st7 int v11; // eax float *result; // eax char v13; // [esp+Ch] [ebp-1Ch] float v14; // [esp+18h] [ebp-10h] float v15; // [esp+1Ch] [ebp-Ch] int v16; // [esp+20h] [ebp-8h] int v17; // [esp+24h] [ebp-4h] float v18; // [esp+30h] [ebp+8h] v3 = this; *(_DWORD *)this = &NiHalfSpaceBV::`vftable'; sub_8736A0(this + 1); v3[5] = *a2; v3[6] = a2[1]; v3[7] = a2[2]; sub_8736A0((float *)&v13); v4 = a2[1] * a3[1]; v5 = *((_DWORD *)a3 + 1); v6 = *a2 * *a3; v15 = *a3; v16 = v5; v7 = v4 + v6; v8 = a2[2] * a3[2]; v17 = *((_DWORD *)a3 + 2); v14 = v7 + v8; v18 = sub_4430B0(&v15); v9 = v16; v10 = v14 / v18; v11 = v17; v3[1] = v15; *((_DWORD *)v3 + 2) = v9; *((_DWORD *)v3 + 3) = v11; result = v3; v3[4] = v10; return result; } // A23A04: using guessed type void *NiHalfSpaceBV::`vftable'; //----- (00838BE0) -------------------------------------------------------- float *sub_838BE0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x20u); if ( v0 ) result = sub_838B40(v0, (float *)&dword_BA45C0, (float *)&dword_ABD498); else result = 0; return result; } // ABD498: using guessed type int dword_ABD498; // BA45C0: using guessed type int dword_BA45C0; //----- (00838C10) -------------------------------------------------------- float *__thiscall sub_838C10(void *this) { int v1; // esi float *v2; // eax float *result; // eax v1 = (int)this; v2 = (float *)operator new(0x20u); if ( v2 ) result = sub_838AB0(v2, v1); else result = 0; return result; } //----- (00838C30) -------------------------------------------------------- float *__cdecl sub_838C30(int a1) { float *v1; // eax float *v2; // esi float *result; // eax v1 = (float *)operator new(0x20u); if ( v1 ) { v2 = sub_838B40(v1, (float *)&dword_BA45C0, (float *)&dword_ABD498); (**(void (__thiscall ***)(float *, int))v2)(v2, a1); result = v2; } else { (*(void (__thiscall **)(_DWORD, int))MEMORY[0])(0, a1); result = 0; } return result; } // ABD498: using guessed type int dword_ABD498; // BA45C0: using guessed type int dword_BA45C0; //----- (00838C80) -------------------------------------------------------- unsigned int __stdcall sub_838C80(char ArgList, int a2) { int v2; // edi unsigned int v3; // kr00_4 _DWORD *v4; // esi unsigned int v5; // edi v2 = ArgList; v3 = strlen((const char *)ArgList); *(_DWORD *)&ArgList = operator new(v3 + 16); sub_7FF6E0((char *)ArgList, v3 + 16, "%s = HALFSPACE_BV", v2); v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 12); if ( v5 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v5 + *(_DWORD *)(a2 + 20)); return sub_823870(v4, v5, &ArgList); } //----- (00838CE0) -------------------------------------------------------- void *__thiscall sub_838CE0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A23A4C: using guessed type void *NiTArray::`vftable'; //----- (00838D10) -------------------------------------------------------- _DWORD *__thiscall sub_838D10(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiUnionBV::`vftable'; this[3] = 2; this[1] = &NiTArray::`vftable'; this[6] = 1; this[4] = 0; this[5] = 0; this[2] = operator new(8u); v1[7] = 0; return v1; } // A23A4C: using guessed type void *NiTArray::`vftable'; // A23A54: using guessed type void *NiUnionBV::`vftable'; //----- (00838D70) -------------------------------------------------------- _DWORD *__thiscall sub_838D70(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // edi int v4; // ecx int v5; // eax _DWORD *v7; // [esp+Ch] [ebp-4h] *this = &NiUnionBV::`vftable'; v2 = this + 1; v3 = 0; *v2 = &NiTArray::`vftable'; v2[2] = 0; v2[5] = 1; v2[3] = 0; v2[4] = 0; v2[1] = 0; v7 = this; sub_8237A0(this + 1, *(_DWORD *)(a2 + 16)); if ( *(_DWORD *)(a2 + 16) > 0u ) { do { v4 = *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v3); if ( v4 ) { v5 = (*(int (**)(void))(*(_DWORD *)v4 + 28))(); if ( v3 < v2[2] ) { if ( v3 < v2[3] ) { if ( v5 ) { if ( !*(_DWORD *)(v2[1] + 4 * v3) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v3) ) { --v2[4]; } } else { v2[3] = v3 + 1; if ( v5 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v3) = v5; } } ++v3; } while ( v3 < *(_DWORD *)(a2 + 16) ); } return v7; } // A23A4C: using guessed type void *NiTArray::`vftable'; // A23A54: using guessed type void *NiUnionBV::`vftable'; //----- (00838E20) -------------------------------------------------------- unsigned int __thiscall sub_838E20(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v3; // ecx unsigned int result; // eax v1 = this; v2 = 0; if ( this[4] ) { do { v3 = *(_DWORD *)(v1[2] + 4 * v2); if ( v3 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v3 + 8))(1); ++v2; } while ( v2 < v1[4] ); } for ( result = 0; result < v1[4]; ++result ) *(_DWORD *)(v1[2] + 4 * result) = 0; v1[5] = 0; v1[4] = 0; return result; } //----- (00838E70) -------------------------------------------------------- _DWORD *__thiscall sub_838E70(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax unsigned int v3; // edi int v4; // eax _DWORD *v6; // [esp+Ch] [ebp-4h] v1 = this; v2 = operator new(0x20u); v3 = 0; if ( v2 ) v6 = sub_838D10(v2); else v6 = 0; sub_8237A0(v6 + 1, v1[4]); if ( v1[4] > 0u ) { do { v4 = (*(int (**)(void))(**(_DWORD **)(v1[2] + 4 * v3) + 24))(); if ( v3 < v6[3] ) { if ( v3 < v6[4] ) { if ( v4 ) { if ( !*(_DWORD *)(v6[2] + 4 * v3) ) ++v6[5]; } else if ( *(_DWORD *)(v6[2] + 4 * v3) ) { --v6[5]; } } else { v6[4] = v3 + 1; if ( v4 ) ++v6[5]; } *(_DWORD *)(v6[2] + 4 * v3) = v4; } ++v3; } while ( v3 < v1[4] ); } return v6; } //----- (00838F10) -------------------------------------------------------- void __thiscall sub_838F10(_DWORD *this, unsigned int *a2) { unsigned int *v2; // ebx _DWORD *v3; // esi unsigned int v4; // edi int v5; // ebx int v6; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( (*(int (__thiscall **)(unsigned int *))(*a2 + 12))(a2) == 4 ) { sub_838E20(v3); sub_8237A0(v3 + 1, a2[4]); v4 = 0; if ( a2[4] ) { while ( 1 ) { v5 = *(_DWORD *)(v2[2] + 4 * v4); v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 24))(v5); (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 32))(v6, v5); if ( v4 >= v3[3] ) goto LABEL_11; if ( v4 >= v3[4] ) break; if ( !*(_DWORD *)(v3[2] + 4 * v4) ) goto LABEL_9; LABEL_10: *(_DWORD *)(v3[2] + 4 * v4) = v6; LABEL_11: if ( ++v4 >= a2[4] ) return; v2 = a2; } v3[4] = v4 + 1; LABEL_9: ++v3[5]; goto LABEL_10; } } } //----- (00838FA0) -------------------------------------------------------- char __thiscall sub_838FA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v4; // eax int v5; // esi v2 = this; if ( (*(int (__thiscall **)(_DWORD *))(*a2 + 12))(a2) != 4 ) return 0; v4 = v2[4]; if ( v4 != a2[4] ) return 0; v5 = 0; if ( !v4 ) return 1; while ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(**(_DWORD **)(4 * v5 + v2[2]) + 40))(*(_DWORD *)(4 * v5 + a2[2])) ) { if ( (unsigned int)++v5 >= v2[4] ) return 1; } return 0; } //----- (00839010) -------------------------------------------------------- int __thiscall sub_839010(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi unsigned int v4; // esi int result; // eax v3 = this; v4 = 0; if ( this[4] ) { do { result = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(v3[2] + 4 * v4) + 20))( *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v4), a3); ++v4; } while ( v4 < v3[4] ); } return result; } //----- (00839050) -------------------------------------------------------- char __cdecl sub_839050(float a1, int a2, int a3, int a4, int a5) { int v5; // esi v5 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( !(unsigned __int8)sub_836DC0(a1, *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v5), a3, a4, a5) ) { if ( (unsigned int)++v5 >= *(_DWORD *)(a2 + 16) ) return 0; } *(_DWORD *)(a2 + 28) = v5; return 1; } //----- (008390A0) -------------------------------------------------------- char __cdecl sub_8390A0(float a1, int a2, int a3, int a4, int a5) { int v5; // ecx unsigned int v6; // eax int v7; // ebx int v8; // esi int v10; // [esp+20h] [ebp-4h] v5 = a2; v6 = 0; v10 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( 1 ) { v7 = *(_DWORD *)(*(_DWORD *)(v5 + 8) + 4 * v6); v8 = 0; if ( *(_DWORD *)(a4 + 16) ) break; LABEL_6: v10 = ++v6; if ( v6 >= *(_DWORD *)(v5 + 16) ) return 0; } while ( !(unsigned __int8)sub_836DC0(a1, v7, a3, *(_DWORD *)(*(_DWORD *)(a4 + 8) + 4 * v8), a5) ) { if ( (unsigned int)++v8 >= *(_DWORD *)(a4 + 16) ) { v5 = a2; v6 = v10; goto LABEL_6; } } *(_DWORD *)(a2 + 28) = v10; *(_DWORD *)(a4 + 28) = v8; return 1; } //----- (00839120) -------------------------------------------------------- char __cdecl sub_839120(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // esi v7 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( !(unsigned __int8)sub_836F10(a1, *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v7), a3, a4, a5, a6, a7) ) { if ( (unsigned int)++v7 >= *(_DWORD *)(a2 + 16) ) return 0; } *(_DWORD *)(a2 + 28) = v7; return 1; } //----- (00839180) -------------------------------------------------------- char __cdecl sub_839180(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v10; // esi v10 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( !(unsigned __int8)sub_836E50(a1, *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v10), a3, a4, a5, a6, a7, a8, a9, a10) ) { if ( (unsigned int)++v10 >= *(_DWORD *)(a2 + 16) ) return 0; } *(_DWORD *)(a2 + 28) = v10; return 1; } //----- (008391F0) -------------------------------------------------------- char __cdecl sub_8391F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v10; // ecx unsigned int v11; // eax int v12; // ebx int v13; // esi int v15; // [esp+34h] [ebp-4h] v10 = a2; v11 = 0; v15 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( 1 ) { v12 = *(_DWORD *)(*(_DWORD *)(v10 + 8) + 4 * v11); v13 = 0; if ( *(_DWORD *)(a4 + 16) ) break; LABEL_6: v15 = ++v11; if ( v11 >= *(_DWORD *)(v10 + 16) ) return 0; } while ( !(unsigned __int8)sub_836E50(a1, v12, a3, *(_DWORD *)(*(_DWORD *)(a4 + 8) + 4 * v13), a5, a6, a7, a8, a9, a10) ) { if ( (unsigned int)++v13 >= *(_DWORD *)(a4 + 16) ) { v10 = a2; v11 = v15; goto LABEL_6; } } *(_DWORD *)(a2 + 28) = v15; *(_DWORD *)(a4 + 28) = v13; return 1; } //----- (00839280) -------------------------------------------------------- char __cdecl sub_839280(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { int v12; // esi v12 = 0; if ( !*(_DWORD *)(a2 + 16) ) return 0; while ( !(unsigned __int8)sub_836F50( a1, *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4 * v12), a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) ) { if ( (unsigned int)++v12 >= *(_DWORD *)(a2 + 16) ) return 0; } *(_DWORD *)(a2 + 28) = v12; return 1; } //----- (008392F0) -------------------------------------------------------- _DWORD *__thiscall sub_8392F0(void *this) { int v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = (int)this; v2 = operator new(0x20u); if ( v2 ) result = sub_838D70(v2, v1); else result = 0; return result; } //----- (00839310) -------------------------------------------------------- _DWORD *__cdecl sub_839310(int a1) { _DWORD *v1; // eax _DWORD *v2; // esi _DWORD *result; // eax v1 = operator new(0x20u); if ( v1 ) { v2 = sub_838D10(v1); (*(void (__thiscall **)(_DWORD *, int))*v2)(v2, a1); result = v2; } else { (*(void (__thiscall **)(_DWORD, int))MEMORY[0])(0, a1); result = 0; } return result; } //----- (00839350) -------------------------------------------------------- void __thiscall sub_839350(_DWORD *this, int a2) { unsigned int v2; // edx unsigned int v3; // eax _DWORD *v4; // esi unsigned int v5; // edi _DWORD *v6; // esi unsigned int v7; // eax int v8; // edx _DWORD *v9; // ecx int v10; // edx if ( a2 ) { v2 = this[4]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)this[2]; while ( a2 != *v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_6; } } else { LABEL_6: v5 = this[4]; v6 = this + 1; v7 = 0; if ( v5 ) { v8 = this[2]; v9 = (_DWORD *)this[2]; while ( *v9 ) { ++v7; ++v9; if ( v7 >= v5 ) goto LABEL_10; } *(_DWORD *)(v8 + 4 * v7) = a2; ++v6[4]; } else { LABEL_10: if ( v5 < v6[2] || (sub_8237A0(v6, v5 + v6[5]), v5 < v6[2]) ) { if ( v5 < v6[3] ) { if ( !*(_DWORD *)(v6[1] + 4 * v5) ) ++v6[4]; *(_DWORD *)(v6[1] + 4 * v5) = a2; } else { ++v6[4]; v10 = v6[1]; v6[3] = v5 + 1; *(_DWORD *)(v10 + 4 * v5) = a2; } } } } } } //----- (00839400) -------------------------------------------------------- int __thiscall sub_839400(_DWORD *this, signed int a2) { signed int v2; // ebx _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int result; // eax unsigned int v8; // edi int v9; // ecx int v10; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_837080(this, a2); v10 = v3[4]; v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; result = v6(v5, &v10, 4, &a2, 1); v8 = 0; if ( v3[4] ) { do { v9 = *(_DWORD *)(v3[2] + 4 * v8); if ( v9 ) result = (*(int (__stdcall **)(signed int))(*(_DWORD *)v9 + 4))(v2); ++v8; } while ( v8 < v3[4] ); } return result; } //----- (00839470) -------------------------------------------------------- _DWORD *__thiscall sub_839470(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; *(_DWORD *)this = &NiUnionBV::`vftable'; sub_838E20(this); v3 = (void *)v2[2]; v2[1] = &NiTArray::`vftable'; operator delete(v3); *v2 = &NiBoundingVolume::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // A2395C: using guessed type void *NiBoundingVolume::`vftable'; // A23A4C: using guessed type void *NiTArray::`vftable'; // A23A54: using guessed type void *NiUnionBV::`vftable'; //----- (008394B0) -------------------------------------------------------- void __thiscall sub_8394B0(_DWORD *this, unsigned int a2) { signed int v2; // ebx _DWORD *v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int v7; // esi int v8; // eax int v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 4); v9 = 4; v6(v5, &a2, 4, &v9, 1); v7 = 0; if ( a2 ) { do { v8 = sub_837030(v2); sub_839350(v3, v8); ++v7; } while ( v7 < a2 ); } } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00839510) -------------------------------------------------------- unsigned int __thiscall sub_839510(_DWORD *this, char ArgList, int a3) { int v3; // ebx _DWORD *v4; // edi unsigned int v5; // kr00_4 _DWORD *v6; // ebx unsigned int v7; // esi unsigned int result; // eax unsigned int v9; // esi char *v10; // edi int v11; // ecx int v12; // [esp+Ch] [ebp-4h] v3 = ArgList; v4 = this; v12 = (int)this; v5 = strlen((const char *)ArgList); *(_DWORD *)&ArgList = operator new(v5 + 12); sub_7FF6E0((char *)ArgList, v5 + 12, "%s = UNION_BV", v3); v6 = (_DWORD *)a3; v7 = *(_DWORD *)(a3 + 12); if ( v7 >= *(_DWORD *)(a3 + 8) ) sub_8237A0((_DWORD *)a3, v7 + *(_DWORD *)(a3 + 20)); result = sub_823870(v6, v7, &ArgList); v9 = 0; if ( v4[4] ) { do { v10 = (char *)operator new(0xDu); sub_7FF6E0(v10, 0xDu, " child %i", v9); if ( v9 >= *(_DWORD *)(v12 + 16) ) v11 = 0; else v11 = *(_DWORD *)(*(_DWORD *)(v12 + 8) + 4 * v9); (*(void (__stdcall **)(char *, _DWORD *))(*(_DWORD *)v11 + 44))(v10, v6); result = v12; ++v9; } while ( v9 < *(_DWORD *)(v12 + 16) ); } return result; } //----- (008395C0) -------------------------------------------------------- BOOL __thiscall sub_8395C0(float *this, float *a2) { float *v2; // edi v2 = this; return (*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 12))(a2) == 2 && (unsigned __int8)sub_847F80(a2 + 8, v2 + 8); } //----- (00839600) -------------------------------------------------------- float __userpurge sub_839600@(float *this@) { float v1; // ST18_4 float v2; // ST0C_4 float v3; // ST10_4 float v4; // ST14_4 float v5; // ST00_4 float v6; // ST04_4 double v7; // st6 float v8; // ST08_4 float v9; // ST00_4 float v10; // ST04_4 float v11; // ST08_4 float v12; // ST0C_4 float v13; // ST10_4 float result; // eax float v15; // ST14_4 v1 = this[7] - this[14]; v2 = this[4] * v1; v3 = this[5] * v1; v4 = v1 * this[6]; v5 = this[1] - v2; v6 = this[2] - v3; v7 = this[3]; this[8] = v5; this[9] = v6; v8 = v7 - v4; this[10] = v8; v9 = this[4] * v1; v10 = this[5] * v1; v11 = v1 * this[6]; v12 = v9 * 2.0; this[11] = v12; v13 = v10 * 2.0; result = v13; this[12] = v13; v15 = 2.0 * v11; this[13] = v15; return result; } //----- (008396C0) -------------------------------------------------------- float __userpurge sub_8396C0@(int this@, int a2) { *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(this + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(this + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(this + 20) = *(_DWORD *)(a2 + 20); *(_DWORD *)(this + 24) = *(_DWORD *)(a2 + 24); *(float *)(this + 28) = *(float *)(a2 + 28); *(float *)(this + 56) = *(float *)(a2 + 56); return sub_839600((float *)this); } //----- (00839700) -------------------------------------------------------- float __userpurge sub_839700@(float *this@, float *a2, float *a3) { float *v3; // ebx float *v4; // esi float *v5; // eax float v6; // eax double v7; // st7 double v8; // st7 float *v9; // eax float v11; // [esp+Ch] [ebp-18h] float v12; // [esp+10h] [ebp-14h] float v13; // [esp+14h] [ebp-10h] float v14; // [esp+18h] [ebp-Ch] float v15; // [esp+1Ch] [ebp-8h] float v16; // [esp+20h] [ebp-4h] float v17; // [esp+2Ch] [ebp+8h] v3 = a2; v4 = this; v5 = sub_85DA90(a3, &v11, a2 + 1); v17 = a3[12]; v14 = *v5 * v17; v15 = v5[1] * v17; v16 = v17 * v5[2]; v11 = a3[9] + v14; v12 = a3[10] + v15; v6 = v12; v7 = a3[11]; v4[1] = v11; v8 = v7 + v16; v4[2] = v6; v13 = v8; v4[3] = v13; v9 = sub_85DA90(a3, &v11, v3 + 4); v4[4] = *v9; v4[5] = v9[1]; v4[6] = v9[2]; v4[7] = v3[7] * a3[12]; v4[14] = v3[14] * a3[12]; return sub_839600(v4); } //----- (008397C0) -------------------------------------------------------- char __cdecl sub_8397C0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { _DWORD *v11; // eax _DWORD *v12; // eax float v13; // edx double v14; // st7 float v15; // ecx float v16[18]; // [esp+10h] [ebp-54h] float v17; // [esp+58h] [ebp-Ch] float v18; // [esp+5Ch] [ebp-8h] float v19; // [esp+60h] [ebp-4h] sub_847FC0(v16, a2, a4, a1, 0.001, 0.000099999997, 32); sub_8468D0(v16, (float *)a3, (float *)a5); *(float *)a6 = sub_846830(v16); if ( sub_956CD0(v16) != 3 && sub_956CD0(v16) != 2 ) return 0; v11 = (_DWORD *)sub_61F9D0((char *)v16); *(_DWORD *)a7 = *v11; *(_DWORD *)(a7 + 4) = v11[1]; *(_DWORD *)(a7 + 8) = v11[2]; if ( a8 ) { v12 = (_DWORD *)sub_846840((char *)v16); *(_DWORD *)a9 = *v12; *(_DWORD *)(a9 + 4) = v12[1]; *(_DWORD *)(a9 + 8) = v12[2]; v17 = -*(float *)a9; v18 = -*(float *)(a9 + 4); v13 = v18; v14 = -*(float *)(a9 + 8); *(float *)a10 = v17; v19 = v14; v15 = v19; *(float *)(a10 + 4) = v13; *(float *)(a10 + 8) = v15; } return 1; } //----- (008398A0) -------------------------------------------------------- char __cdecl sub_8398A0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { _DWORD *v11; // eax _DWORD *v12; // eax float v13; // edx double v14; // st7 float v15; // ecx float v16[19]; // [esp+10h] [ebp-58h] float v17; // [esp+5Ch] [ebp-Ch] float v18; // [esp+60h] [ebp-8h] float v19; // [esp+64h] [ebp-4h] sub_848340(v16, a2, a4, a1, 0.001, 0.000099999997, 32); sub_8468D0(v16, (float *)a3, (float *)a5); *(float *)a6 = sub_846830(v16); if ( sub_956CD0(v16) != 3 && sub_956CD0(v16) != 2 ) return 0; v11 = (_DWORD *)sub_61F9D0((char *)v16); *(_DWORD *)a7 = *v11; *(_DWORD *)(a7 + 4) = v11[1]; *(_DWORD *)(a7 + 8) = v11[2]; if ( a8 ) { v12 = (_DWORD *)sub_846840((char *)v16); *(_DWORD *)a9 = *v12; *(_DWORD *)(a9 + 4) = v12[1]; *(_DWORD *)(a9 + 8) = v12[2]; v17 = -*(float *)a9; v18 = -*(float *)(a9 + 4); v13 = v18; v14 = -*(float *)(a9 + 8); *(float *)a10 = v17; v19 = v14; v15 = v19; *(float *)(a10 + 4) = v13; *(float *)(a10 + 8) = v15; } return 1; } //----- (00839980) -------------------------------------------------------- void *__thiscall sub_839980(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiBoundingVolume::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2395C: using guessed type void *NiBoundingVolume::`vftable'; //----- (008399B0) -------------------------------------------------------- BOOL __cdecl sub_8399B0(float a1, int a2, int a3, int a4, int a5) { double v5; // st6 double v6; // st5 int v7; // esi int v8; // eax int v9; // ecx int v10; // edx int v11; // edi double v12; // st7 double v13; // st7 int v15; // [esp+8h] [ebp-24h] int v16; // [esp+Ch] [ebp-20h] int v17; // [esp+10h] [ebp-1Ch] float v18; // [esp+14h] [ebp-18h] float v19; // [esp+18h] [ebp-14h] float v20; // [esp+1Ch] [ebp-10h] float v21; // [esp+20h] [ebp-Ch] float v22; // [esp+24h] [ebp-8h] float v23; // [esp+28h] [ebp-4h] v21 = *(float *)a5 - *(float *)a3; v22 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v23 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v5 = v23; v6 = v22; if ( *(float *)&dword_BA45C0 == v21 && *(float *)&dword_BA45C4 == v6 && *(float *)&dword_BA45C8 == v5 ) { v11 = a2; v7 = a4; v12 = sub_8486F0((float *)(a4 + 4), (float *)(a2 + 32), (float *)&a2); } else { v7 = a4; v8 = *(_DWORD *)(a4 + 4); v9 = *(_DWORD *)(a4 + 8); v10 = *(_DWORD *)(a4 + 12); v11 = a2; v21 = v21 * a1; v15 = v8; v16 = v9; v18 = v21; v17 = v10; v22 = v6 * a1; v19 = v22; v23 = a1 * v5; v20 = v23; v12 = sub_848800((float *)&v15, (float *)(a2 + 32), (float *)&a2, (float *)&a4); } *(float *)&a2 = v12; *(float *)&a4 = *(float *)(v11 + 56) + *(float *)(v7 + 16); v13 = *(float *)&a2; *(float *)&a2 = *(float *)&a4 * *(float *)&a4; return *(float *)&a2 >= v13; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00839AD0) -------------------------------------------------------- BOOL __cdecl sub_839AD0(float a1, int a2, int a3, int a4, int a5) { double v5; // st6 double v6; // st5 int v7; // esi int v8; // eax int v9; // ecx int v10; // edx int v11; // edi int v12; // eax int v13; // ecx int v14; // edx double v15; // st7 double v16; // st7 int v18; // [esp+8h] [ebp-30h] int v19; // [esp+Ch] [ebp-2Ch] int v20; // [esp+10h] [ebp-28h] int v21; // [esp+14h] [ebp-24h] int v22; // [esp+18h] [ebp-20h] int v23; // [esp+1Ch] [ebp-1Ch] float v24; // [esp+20h] [ebp-18h] float v25; // [esp+24h] [ebp-14h] float v26; // [esp+28h] [ebp-10h] float v27; // [esp+2Ch] [ebp-Ch] float v28; // [esp+30h] [ebp-8h] float v29; // [esp+34h] [ebp-4h] v27 = *(float *)a5 - *(float *)a3; v28 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v29 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v5 = v29; v6 = v28; if ( *(float *)&dword_BA45C0 == v27 && *(float *)&dword_BA45C4 == v6 && *(float *)&dword_BA45C8 == v5 ) { v7 = a4; v11 = a2; v15 = sub_848800((float *)(a2 + 32), (float *)(a4 + 32), (float *)&a4, (float *)&a2); } else { v7 = a4; v8 = *(_DWORD *)(a4 + 32); v9 = *(_DWORD *)(a4 + 36); v10 = *(_DWORD *)(a4 + 40); v11 = a2; v27 = v27 * a1; v18 = v8; v12 = *(_DWORD *)(a4 + 44); v19 = v9; v13 = *(_DWORD *)(a4 + 48); v21 = v12; v28 = v6 * a1; v20 = v10; v14 = *(_DWORD *)(a4 + 52); v22 = v13; v24 = v27; v29 = a1 * v5; v23 = v14; v25 = v28; v26 = v29; v15 = sub_8492D0((float *)(a2 + 32), (float *)&v18, (float *)&a4, (float *)&a5, (float *)&a2); } *(float *)&a4 = v15; *(float *)&a2 = *(float *)(v11 + 56) + *(float *)(v7 + 56); v16 = *(float *)&a4; *(float *)&a4 = *(float *)&a2 * *(float *)&a2; return *(float *)&a4 >= v16; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00839C00) -------------------------------------------------------- bool __cdecl sub_839C00(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { float *v7; // esi double v8; // st7 double v9; // st7 double v10; // st7 double v11; // st7 double v12; // st7 double v13; // st6 double v14; // st7 double v15; // st5 double v16; // st4 double v17; // st4 double v18; // st7 bool v19; // c0 double v20; // st7 double v21; // st6 double v22; // st7 double v23; // st5 double v24; // st4 double v25; // st3 double v27; // st3 double v28; // st3 double v29; // st2 double v30; // st3 double v31; // st2 int v32; // eax int v33; // ecx int v34; // edx int v35; // eax int v36; // ecx int v37; // edx double v38; // st7 int v39; // [esp+4h] [ebp-78h] int v40; // [esp+8h] [ebp-74h] int v41; // [esp+Ch] [ebp-70h] int v42; // [esp+10h] [ebp-6Ch] int v43; // [esp+14h] [ebp-68h] int v44; // [esp+18h] [ebp-64h] int v45; // [esp+1Ch] [ebp-60h] int v46; // [esp+20h] [ebp-5Ch] int v47; // [esp+24h] [ebp-58h] int v48; // [esp+28h] [ebp-54h] int v49; // [esp+2Ch] [ebp-50h] int v50; // [esp+30h] [ebp-4Ch] float v51; // [esp+34h] [ebp-48h] float v52; // [esp+38h] [ebp-44h] float v53; // [esp+3Ch] [ebp-40h] float v54; // [esp+40h] [ebp-3Ch] float v55; // [esp+44h] [ebp-38h] float v56; // [esp+48h] [ebp-34h] int v57; // [esp+4Ch] [ebp-30h] int v58; // [esp+50h] [ebp-2Ch] int v59; // [esp+54h] [ebp-28h] float v60; // [esp+58h] [ebp-24h] float v61; // [esp+5Ch] [ebp-20h] float v62; // [esp+60h] [ebp-1Ch] float v63; // [esp+64h] [ebp-18h] float v64; // [esp+68h] [ebp-14h] float v65; // [esp+6Ch] [ebp-10h] float v66; // [esp+70h] [ebp-Ch] float v67; // [esp+74h] [ebp-8h] float v68; // [esp+78h] [ebp-4h] v7 = (float *)a4; v48 = *(_DWORD *)a4; v8 = *(float *)a5 - *(float *)a4; v49 = *(_DWORD *)(a4 + 4); v50 = *(_DWORD *)(a4 + 8); v60 = v8; v61 = *(float *)(a5 + 4) - *(float *)(a4 + 4); v9 = *(float *)(a5 + 8) - *(float *)(a4 + 8); v51 = v60; v52 = v61; v62 = v9; v10 = *(float *)a6; v53 = v62; v63 = v10 - *(float *)a4; v64 = *(float *)(a6 + 4) - *(float *)(a4 + 4); v11 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v54 = v63; v55 = v64; v65 = v11; v12 = *(float *)a3 - *(float *)a7; v56 = v65; v66 = v12; v67 = *(float *)(a3 + 4) - *(float *)(a7 + 4); v68 = *(float *)(a3 + 8) - *(float *)(a7 + 8); *(float *)&v57 = v65 * v61 - v64 * v62; *(float *)&v58 = v62 * v63 - v65 * v60; *(float *)&v59 = v60 * v64 - v63 * v61; v63 = -*(float *)&v57; v64 = -*(float *)&v58; v65 = -*(float *)&v59; v13 = v64; v14 = v63; v15 = v65; *(float *)&a6 = *(float *)(a2 + 12) * v65 + *(float *)(a2 + 4) * v63 + *(float *)(a2 + 8) * v64; if ( *(float *)(a2 + 56) >= (double)*(float *)(a2 + 28) ) v16 = *(float *)(a2 + 56); else v16 = *(float *)(a2 + 28); *(float *)&a4 = v16; *(float *)&a5 = *v7 * v14 + v13 * v7[1] + v7[2] * v15; *(float *)&a3 = *(float *)&a6 - *(float *)&a5; v17 = v14 * v14; v18 = *(float *)&a3 * *(float *)&a3; *(float *)&a3 = v13 * v13 + v17 + v15 * v15; *(float *)&a3 = *(float *)&a3 * *(float *)&a4 * *(float *)&a4; v19 = *(float *)&a3 < v18; v20 = a1; v21 = v68; if ( v19 ) { sub_4430B0(&v63); v22 = v64; v23 = v63; v24 = v65; v21 = v68; v25 = v65 * v68 + v64 * v67 + v63 * v66; if ( *(float *)&a5 >= (double)*(float *)&a6 ) { *(float *)&a5 = v25; if ( *(float *)&a5 <= 0.0 ) return 0; *(float *)&v57 = v23 * *(float *)&a4; *(float *)&v58 = v22 * *(float *)&a4; *(float *)&v59 = *(float *)&a4 * v24; v60 = *(float *)(a2 + 4) + *(float *)&v57; v61 = *(float *)(a2 + 8) + *(float *)&v58; v27 = *(float *)(a2 + 12) + *(float *)&v59; } else { *(float *)&a5 = v25; if ( *(float *)&a5 >= 0.0 ) return 0; *(float *)&v57 = v23 * *(float *)&a4; *(float *)&v58 = v22 * *(float *)&a4; *(float *)&v59 = *(float *)&a4 * v24; v60 = *(float *)(a2 + 4) - *(float *)&v57; v61 = *(float *)(a2 + 8) - *(float *)&v58; v27 = *(float *)(a2 + 12) - *(float *)&v59; } v62 = v27; v28 = *v7 * v23; v64 = v61; v29 = v22 * v7[1]; v63 = v60; v65 = v62; *(float *)&a5 = v28 + v29 + v7[2] * v24; v30 = *(float *)&a5 + 0.001000000047497451; *(float *)&a4 = v61 * v22 + v60 * v23 + v62 * v24; if ( *(float *)&a4 <= v30 ) { v20 = a1; } else { *(float *)&a4 = v66 * a1; *(float *)&a5 = v67 * a1; *(float *)&a6 = v21 * a1; *(float *)&v57 = v63 + *(float *)&a4; *(float *)&v58 = v64 + *(float *)&a5; *(float *)&v59 = v65 + *(float *)&a6; v31 = v22 * *(float *)&v58; v20 = a1; *(float *)&a4 = v24 * *(float *)&v59 + v23 * *(float *)&v57 + v31; if ( *(float *)&a4 > v30 ) return 0; } } if ( *(float *)&dword_BA45C0 == v66 && *(float *)&dword_BA45C4 == v67 && *(float *)&dword_BA45C8 == v21 ) { v38 = sub_8454B0((float *)(a2 + 32), (float *)&v48, (float *)&a6, (float *)&a5, (float *)&a4); } else { v32 = *(_DWORD *)(a2 + 32); v33 = *(_DWORD *)(a2 + 36); v34 = *(_DWORD *)(a2 + 40); *(float *)&a4 = v66 * v20; v39 = v32; v35 = *(_DWORD *)(a2 + 44); v57 = a4; v40 = v33; v36 = *(_DWORD *)(a2 + 48); v41 = v34; v37 = *(_DWORD *)(a2 + 52); v42 = v35; *(float *)&a5 = v67 * v20; v43 = v36; v58 = a5; v44 = v37; v45 = a4; v46 = a5; *(float *)&a6 = v20 * v21; v59 = a6; v47 = a6; v38 = sub_84A590(&v48, (float *)&v39, (float *)&a5, (float *)&a4, (float *)&a3, (float *)&a6); } *(float *)&a4 = v38; return *(float *)&a4 <= *(float *)(a2 + 56) * *(float *)(a2 + 56); } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0083A040) -------------------------------------------------------- char __cdecl sub_83A040(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12) { int v12; // ebx float *v13; // esi int v14; // eax int v15; // ecx float *v16; // edi int v17; // edx double v18; // st7 double v19; // st7 float v20; // eax double v21; // st7 int v22; // ecx double v23; // st7 double v24; // st7 float v25; // ecx int v26; // edx double v27; // st7 double v28; // st7 double v29; // st7 double v30; // st7 double v31; // st7 double v32; // st7 double v33; // st7 float *v34; // eax float v35; // edx double v36; // st7 float v37; // ecx double v39; // st7 double v40; // st7 double v41; // st7 double v42; // st5 double v43; // st6 double v44; // st4 double v45; // st3 double v46; // st3 double v47; // st6 double v48; // st7 double v49; // st5 double v50; // st4 double v51; // st6 float v52; // edx float v53; // eax float v54; // ecx double v55; // st4 double v56; // st3 double v57; // st4 double v58; // st3 float v59; // ST10_4 _DWORD *v60; // eax _DWORD *v61; // eax float v62; // edx double v63; // st7 float v64; // ecx float v65[27]; // [esp+1Ch] [ebp-F8h] int v66; // [esp+88h] [ebp-8Ch] int v67; // [esp+8Ch] [ebp-88h] int v68; // [esp+90h] [ebp-84h] int v69; // [esp+94h] [ebp-80h] int v70; // [esp+98h] [ebp-7Ch] int v71; // [esp+9Ch] [ebp-78h] float v72; // [esp+A0h] [ebp-74h] float v73; // [esp+A4h] [ebp-70h] float v74; // [esp+A8h] [ebp-6Ch] float v75; // [esp+ACh] [ebp-68h] float v76; // [esp+B0h] [ebp-64h] float v77; // [esp+B4h] [ebp-60h] float v78; // [esp+B8h] [ebp-5Ch] float v79; // [esp+BCh] [ebp-58h] float v80; // [esp+C0h] [ebp-54h] float v81; // [esp+C4h] [ebp-50h] float v82; // [esp+C8h] [ebp-4Ch] float v83; // [esp+CCh] [ebp-48h] float v84; // [esp+D0h] [ebp-44h] char v85; // [esp+D4h] [ebp-40h] float v86; // [esp+D8h] [ebp-3Ch] float v87; // [esp+DCh] [ebp-38h] float v88; // [esp+E0h] [ebp-34h] float v89; // [esp+E4h] [ebp-30h] float v90; // [esp+E8h] [ebp-2Ch] float v91; // [esp+ECh] [ebp-28h] float v92; // [esp+F0h] [ebp-24h] float v93; // [esp+F4h] [ebp-20h] float v94; // [esp+F8h] [ebp-1Ch] float v95; // [esp+FCh] [ebp-18h] float v96; // [esp+100h] [ebp-14h] float v97; // [esp+104h] [ebp-10h] int v98; // [esp+108h] [ebp-Ch] int v99; // [esp+10Ch] [ebp-8h] int v100; // [esp+110h] [ebp-4h] float v101; // [esp+120h] [ebp+Ch] float v102; // [esp+120h] [ebp+Ch] int v103; // [esp+120h] [ebp+Ch] float v104; // [esp+120h] [ebp+Ch] float v105; // [esp+120h] [ebp+Ch] int v106; // [esp+128h] [ebp+14h] float v107; // [esp+128h] [ebp+14h] float v108; // [esp+128h] [ebp+14h] float v109; // [esp+128h] [ebp+14h] int v110; // [esp+12Ch] [ebp+18h] v12 = a5; v13 = (float *)a2; v14 = *(_DWORD *)(a2 + 32); v15 = *(_DWORD *)(a2 + 36); v16 = (float *)a4; v84 = *(float *)(a2 + 56) * *(float *)(a2 + 56); v17 = *(_DWORD *)(a2 + 40); v18 = *(float *)a5; v66 = v14; v19 = v18 - *(float *)a4; v69 = *(_DWORD *)(a2 + 44); v20 = *(float *)a4; *(float *)&v98 = v19; v75 = v20; v21 = *(float *)(a5 + 4) - *(float *)(a4 + 4); v78 = *(float *)&v98; v67 = v15; v22 = *(_DWORD *)(a2 + 48); *(float *)&v99 = v21; v23 = *(float *)(a5 + 8); v70 = v22; v24 = v23 - *(float *)(a4 + 8); v25 = *(float *)(a4 + 4); v68 = v17; v26 = *(_DWORD *)(a2 + 52); *(float *)&v100 = v24; v76 = v25; v27 = *(float *)a6 - *(float *)a4; v71 = v26; v77 = *(float *)(a4 + 8); *(float *)&v98 = v27; v28 = *(float *)(a6 + 4); v79 = *(float *)&v99; v29 = v28 - *(float *)(a4 + 4); v80 = *(float *)&v100; *(float *)&v99 = v29; v30 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v81 = *(float *)&v98; v82 = *(float *)&v99; *(float *)&v100 = v30; v83 = *(float *)&v100; v31 = sub_8454B0((float *)&v66, &v75, (float *)&v85, &v86, &v87); v101 = v31 - v84; if ( v101 <= 0.0 ) { *(float *)a8 = 0.0; v95 = v81 * v87; v96 = v82 * v87; v97 = v87 * v83; *(float *)&v98 = v78 * v86; *(float *)&v99 = v79 * v86; *(float *)&v100 = v86 * v80; v89 = v75 + *(float *)&v98; v90 = v76 + *(float *)&v99; v91 = v77 + *(float *)&v100; *(float *)&v98 = v89 + v95; v32 = v90; *(float *)a9 = *(float *)&v98; *(float *)&v99 = v32 + v96; v33 = v91; *(float *)(a9 + 4) = *(float *)&v99; *(float *)&v100 = v33 + v97; *(float *)(a9 + 8) = *(float *)&v100; if ( a10 ) { v34 = sub_846DB0(&v75, &v92); *(float *)a12 = *v34; *(float *)(a12 + 4) = v34[1]; *(float *)(a12 + 8) = v34[2]; v95 = -*(float *)a12; v96 = -*(float *)(a12 + 4); v35 = v96; v36 = *(float *)(a12 + 8); *(float *)a11 = v95; v97 = -v36; v37 = v97; *(float *)(a11 + 4) = v35; *(float *)(a11 + 8) = v37; return 1; } return 1; } v89 = *(float *)a3 - *(float *)a7; v39 = *(float *)(a3 + 4); v72 = v89; v90 = v39 - *(float *)(a7 + 4); v40 = *(float *)(a3 + 8) - *(float *)(a7 + 8); v73 = v90; v91 = v40; v74 = v91; v102 = v89 * v89 + v90 * v90 + v91 * v91; v41 = a1; if ( v102 * a1 <= 0.000009999999747378752 ) return 0; v95 = v79 * v83 - v80 * v82; v96 = v80 * v81 - v83 * v78; v97 = v82 * v78 - v79 * v81; *(float *)&v98 = -v95; *(float *)&v99 = -v96; *(float *)&v100 = -v97; v42 = *(float *)&v99; v43 = *(float *)&v98; v44 = *(float *)&v100; *(float *)&v110 = v13[3] * *(float *)&v100 + v13[1] * *(float *)&v98 + v13[2] * *(float *)&v99; if ( v13[14] >= (double)v13[7] ) v45 = v13[14]; else v45 = v13[7]; *(float *)&v103 = v45; *(float *)&v106 = v43 * *(float *)a4 + *(float *)(a4 + 4) * v42 + v44 * *(float *)(a4 + 8); v88 = *(float *)&v110 - *(float *)&v106; v46 = v43 * v43; v47 = v88 * v88; v88 = v42 * v42 + v46 + v44 * v44; v88 = v88 * *(float *)&v103 * *(float *)&v103; if ( v88 < v47 ) { sub_4430B0((float *)&v98); v48 = *(float *)&v98; v49 = *(float *)&v99; v50 = *(float *)&v98 * v89 + *(float *)&v99 * v90 + *(float *)&v100 * v91; v51 = *(float *)&v100; if ( *(float *)&v106 >= (double)*(float *)&v110 ) { v108 = v50; if ( v108 <= 0.0 ) return 0; v92 = v48 * *(float *)&v103; v93 = v49 * *(float *)&v103; v94 = *(float *)&v103 * v51; v95 = v92 + v13[1]; v52 = v95; v96 = v13[2] + v93; v53 = v96; v97 = v13[3] + v94; v54 = v97; } else { v107 = v50; if ( v107 >= 0.0 ) return 0; v95 = v48 * *(float *)&v103; v96 = v49 * *(float *)&v103; v97 = *(float *)&v103 * v51; v92 = v13[1] - v95; v52 = v92; v93 = v13[2] - v96; v53 = v93; v94 = v13[3] - v97; v54 = v94; } *(float *)&v98 = v52; v55 = v48 * *v16; *(float *)&v99 = v53; v56 = v16[1]; *(float *)&v100 = v54; v109 = v55 + v56 * v49 + v51 * v16[2]; v57 = v109 + 0.001000000047497451; v104 = v52 * v48 + v53 * v49 + v54 * v51; if ( v104 <= v57 ) { v41 = a1; } else { v92 = v89 * a1; v93 = v90 * a1; v94 = v91 * a1; v95 = v52 + v92; v96 = v93 + *(float *)&v99; v97 = v94 + *(float *)&v100; v58 = v48 * v95; v41 = a1; v105 = v51 * v97 + v49 * v96 + v58; if ( v105 > v57 ) return 0; } } v59 = v41; sub_84AA00(v65, (int)v13, (int)v16, v12, a6, v59, 0.001, 0.000099999997, 32); sub_8468D0(v65, (float *)a3, (float *)a7); *(float *)a8 = sub_846830(v65); if ( sub_956CD0(v65) != 3 && sub_956CD0(v65) != 2 ) return 0; v60 = (_DWORD *)sub_61F9D0((char *)v65); *(_DWORD *)a9 = *v60; *(_DWORD *)(a9 + 4) = v60[1]; *(_DWORD *)(a9 + 8) = v60[2]; if ( a10 ) { v61 = (_DWORD *)sub_846840((char *)v65); *(_DWORD *)a11 = *v61; *(_DWORD *)(a11 + 4) = v61[1]; *(_DWORD *)(a11 + 8) = v61[2]; v92 = -*(float *)a11; v93 = -*(float *)(a11 + 4); v62 = v93; v63 = -*(float *)(a11 + 8); *(float *)a12 = v92; v94 = v63; v64 = v94; *(float *)(a12 + 4) = v62; *(float *)(a12 + 8) = v64; } return 1; } //----- (0083A610) -------------------------------------------------------- float *__cdecl sub_83A610(int a1) { float *v1; // esi int v2; // eax int v3; // ecx int v4; // edx int v5; // edi int v6; // ST10_4 int v7; // ebx float *result; // eax v1 = (float *)operator new(0x3Cu); if ( v1 ) { v2 = dword_BA45C0; v3 = dword_BA45C4; v4 = dword_BA45C8; v5 = dword_ABD48C; v6 = dword_ABD490; v7 = dword_ABD494; v1[7] = 1.0; *((_DWORD *)v1 + 1) = v2; v1[14] = 1.0; *((_DWORD *)v1 + 2) = v3; *((_DWORD *)v1 + 4) = v5; *((_DWORD *)v1 + 5) = v6; *(_DWORD *)v1 = &NiCapsuleBV::`vftable'; *((_DWORD *)v1 + 3) = v4; *((_DWORD *)v1 + 6) = v7; sub_839600(v1); (**(void (__thiscall ***)(void *, int))v1)(v1, a1); result = v1; } else { (*(void (__thiscall **)(_DWORD, int))MEMORY[0])(0, a1); result = 0; } return result; } // A23AA4: using guessed type void *NiCapsuleBV::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0083A6B0) -------------------------------------------------------- float __userpurge sub_83A6B0@(char *this@, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // edi void (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; nullsub_32(a2); sub_8608D0(v3 + 4, v2); sub_8608D0(v3 + 16, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 28, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v8(v7, v3 + 56, 4, &a2, 1); return sub_839600((float *)v3); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0083A720) -------------------------------------------------------- int __thiscall sub_83A720(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_837080(this, a2); sub_860940(v3 + 4, v2); sub_860940(v3 + 16, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 28, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; return v8(v7, v3 + 56, 4, &a2, 1); } //----- (0083A790) -------------------------------------------------------- float *sub_83A790() { float *v0; // esi int v1; // eax int v2; // ecx int v3; // edx int v4; // edi int v5; // ST10_4 int v6; // ebx v0 = (float *)operator new(0x3Cu); if ( !v0 ) return 0; v1 = dword_BA45C0; v2 = dword_BA45C4; v3 = dword_BA45C8; v4 = dword_ABD48C; v5 = dword_ABD490; v6 = dword_ABD494; v0[7] = 1.0; *((_DWORD *)v0 + 1) = v1; v0[14] = 1.0; *((_DWORD *)v0 + 2) = v2; *((_DWORD *)v0 + 4) = v4; *((_DWORD *)v0 + 5) = v5; *(_DWORD *)v0 = &NiCapsuleBV::`vftable'; *((_DWORD *)v0 + 3) = v3; *((_DWORD *)v0 + 6) = v6; sub_839600(v0); return v0; } // A23AA4: using guessed type void *NiCapsuleBV::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0083A810) -------------------------------------------------------- _DWORD *__thiscall sub_83A810(float *this) { float *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi v1 = this; v2 = operator new(0x3Cu); v3 = v2; if ( !v2 ) return 0; *v2 = &NiCapsuleBV::`vftable'; v2[1] = *((_DWORD *)v1 + 1); v2[2] = *((_DWORD *)v1 + 2); v2[3] = *((_DWORD *)v1 + 3); v2[4] = *((_DWORD *)v1 + 4); v2[5] = *((_DWORD *)v1 + 5); v2[6] = *((_DWORD *)v1 + 6); *((float *)v2 + 7) = v1[7]; *((float *)v2 + 14) = v1[14]; sub_839600((float *)v2); return v3; } // A23AA4: using guessed type void *NiCapsuleBV::`vftable'; //----- (0083A870) -------------------------------------------------------- unsigned int __stdcall sub_83A870(char ArgList, int a2) { int v2; // edi unsigned int v3; // kr00_4 _DWORD *v4; // esi unsigned int v5; // edi v2 = ArgList; v3 = strlen((const char *)ArgList); *(_DWORD *)&ArgList = operator new(v3 + 14); sub_7FF6E0((char *)ArgList, v3 + 14, "%s = CAPSULE_BV", v2); v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 12); if ( v5 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v5 + *(_DWORD *)(a2 + 20)); return sub_823870(v4, v5, &ArgList); } //----- (0083A8D0) -------------------------------------------------------- BOOL __thiscall sub_83A8D0(float *this, float *a2) { float *v2; // edi v2 = this; return (*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 12))(a2) == 1 && sub_847E00(a2 + 1, v2 + 1); } //----- (0083A910) -------------------------------------------------------- bool __thiscall sub_83A910(void *this, int a2) { return (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)this + 36))(a2) == 0; } //----- (0083A930) -------------------------------------------------------- float *__thiscall sub_83A930(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8) { double v8; // st7 float *v9; // esi signed int v10; // edx double v11; // st6 double v12; // st5 bool v13; // al double v14; // st3 double v15; // st3 double v16; // st7 float v18; // [esp+8h] [ebp+8h] float v19; // [esp+8h] [ebp+8h] float v20; // [esp+8h] [ebp+8h] float v21; // [esp+8h] [ebp+8h] float v22; // [esp+8h] [ebp+8h] float v23; // [esp+8h] [ebp+8h] v8 = a6; v9 = (float *)a2; *(_DWORD *)a2 = dword_BA45C0; *(_DWORD *)(a2 + 4) = dword_BA45C4; *(_DWORD *)(a2 + 8) = dword_BA45C8; v10 = 0; v11 = a8; v12 = a7; v13 = *(float *)&dword_BA45C0 == a6 && *(float *)&dword_BA45C4 == v12 && *(float *)&dword_BA45C8 == v11; if ( !v13 ) { v18 = this[5] * v12 + v8 * this[4] + this[6] * v11; v19 = fabs(v18); if ( v19 <= 0.00000011920929 ) goto LABEL_14; } if ( a3 == 1 ) { *v9 = *v9 + this[4]; v9[1] = this[5] + v9[1]; v14 = this[6] + v9[2]; } else { if ( a3 != -1 ) goto LABEL_13; *v9 = *v9 - this[4]; v9[1] = v9[1] - this[5]; v14 = v9[2] - this[6]; } v9[2] = v14; v10 = 1; LABEL_13: if ( v13 ) goto LABEL_15; LABEL_14: v20 = this[8] * v12 + this[7] * v8 + this[9] * v11; v21 = fabs(v20); if ( v21 > 0.00000011920929 ) { LABEL_15: if ( a4 == 1 ) { *v9 = *v9 + this[7]; v9[1] = this[8] + v9[1]; v15 = this[9] + v9[2]; } else { if ( a4 != -1 ) goto LABEL_20; *v9 = *v9 - this[7]; v9[1] = v9[1] - this[8]; v15 = v9[2] - this[9]; } v9[2] = v15; ++v10; LABEL_20: if ( v13 ) goto LABEL_22; } v22 = v11 * this[12] + v8 * this[10] + v12 * this[11]; v23 = fabs(v22); if ( v23 <= 0.00000011920929 ) goto LABEL_27; LABEL_22: if ( a5 == 1 ) { *v9 = *v9 + this[10]; v9[1] = this[11] + v9[1]; v16 = this[12] + v9[2]; } else { if ( a5 != -1 ) goto LABEL_27; *v9 = *v9 - this[10]; v9[1] = v9[1] - this[11]; v16 = v9[2] - this[12]; } v9[2] = v16; ++v10; LABEL_27: if ( v10 != 1 ) sub_4430B0(v9); return v9; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0083AB10) -------------------------------------------------------- char __cdecl sub_83AB10(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { _DWORD *v11; // eax _DWORD *v12; // eax float v13; // ST2C_4 float v14; // ST30_4 double v15; // st7 float v16; // ST34_4 float v17[20]; // [esp+34h] [ebp-54h] sub_84AAD0(v17, a2, a4, a1, 0.001, 0.000099999997, 32); sub_8468D0(v17, (float *)a3, (float *)a5); *(float *)a6 = sub_846830(v17); if ( sub_956CD0(v17) != 3 && sub_956CD0(v17) != 2 ) return 0; v11 = (_DWORD *)sub_61F9D0((char *)v17); *(_DWORD *)a7 = *v11; *(_DWORD *)(a7 + 4) = v11[1]; *(_DWORD *)(a7 + 8) = v11[2]; if ( a8 ) { v12 = (_DWORD *)sub_846840((char *)v17); *(_DWORD *)a9 = *v12; *(_DWORD *)(a9 + 4) = v12[1]; *(_DWORD *)(a9 + 8) = v12[2]; v13 = -*(float *)a9; v14 = -*(float *)(a9 + 4); v15 = *(float *)(a9 + 8); *(float *)a10 = v13; *(float *)(a10 + 4) = v14; v16 = -v15; *(float *)(a10 + 8) = v16; } return 1; } //----- (0083AC30) -------------------------------------------------------- int __thiscall sub_83AC30(char *this, signed int a2) { char *v2; // esi v2 = this; nullsub_32(a2); return sub_847EC0(v2 + 4, a2); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0083AC50) -------------------------------------------------------- int __thiscall sub_83AC50(char *this, signed int a2) { char *v2; // esi v2 = this; sub_837080(this, a2); return sub_847F20(v2 + 4, a2); } //----- (0083AC70) -------------------------------------------------------- _DWORD *__thiscall sub_83AC70(_DWORD *this, float *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6) { _DWORD *result; // eax result = this; *this = &NiBoxBV::`vftable'; this[1] = *a3; this[2] = a3[1]; this[3] = a3[2]; *((float *)this + 13) = *a2; *((float *)this + 14) = a2[1]; *((float *)this + 15) = a2[2]; this[4] = *a4; this[5] = a4[1]; this[6] = a4[2]; this[7] = *a5; this[8] = a5[1]; this[9] = a5[2]; this[10] = *a6; this[11] = a6[1]; this[12] = a6[2]; return result; } // A23AE8: using guessed type void *NiBoxBV::`vftable'; //----- (0083AD00) -------------------------------------------------------- void __thiscall sub_83AD00(int this, int a2) { qmemcpy((void *)(this + 4), (const void *)(a2 + 4), 0x3Cu); } //----- (0083AD20) -------------------------------------------------------- int __thiscall sub_83AD20(float *this, float *a2, float *a3) { float *v3; // ebx float *v4; // esi float *v5; // eax float v6; // eax double v7; // st7 double v8; // st7 float *v9; // eax float *v10; // eax float *v11; // eax int result; // eax float v13; // [esp+Ch] [ebp-18h] float v14; // [esp+10h] [ebp-14h] float v15; // [esp+14h] [ebp-10h] float v16; // [esp+18h] [ebp-Ch] float v17; // [esp+1Ch] [ebp-8h] float v18; // [esp+20h] [ebp-4h] float v19; // [esp+2Ch] [ebp+8h] v3 = a2; v4 = this; v5 = sub_85DA90(a3, &v13, a2 + 1); v19 = a3[12]; v16 = *v5 * v19; v17 = v5[1] * v19; v18 = v19 * v5[2]; v13 = a3[9] + v16; v14 = a3[10] + v17; v6 = v14; v7 = a3[11]; v4[1] = v13; v8 = v7 + v18; v4[2] = v6; v15 = v8; v4[3] = v15; v9 = sub_85DA90(a3, &v13, v3 + 4); v4[4] = *v9; v4[5] = v9[1]; v4[6] = v9[2]; v4[13] = v3[13] * a3[12]; v10 = sub_85DA90(a3, &v13, v3 + 7); v4[7] = *v10; v4[8] = v10[1]; v4[9] = v10[2]; v4[14] = v3[14] * a3[12]; v11 = sub_85DA90(a3, &v13, v3 + 10); v4[10] = *v11; v4[11] = v11[1]; result = *((_DWORD *)v11 + 2); *((_DWORD *)v4 + 12) = result; v4[15] = v3[15] * a3[12]; return result; } //----- (0083AE20) -------------------------------------------------------- char __cdecl sub_83AE20(float a1, int a2, int a3, int a4, int a5) { float *v5; // esi float *v6; // edi double v7; // st7 double v8; // st7 double v9; // st7 double v10; // st7 double v11; // st7 double v12; // st6 double v13; // st5 double v14; // st4 double v15; // st3 double v16; // st2 double v18; // st2 double v19; // st2 double v20; // st3 double v21; // st6 double v22; // st4 double v23; // st7 double v24; // st4 double v25; // st6 double v26; // st5 double v27; // st7 double v28; // st4 double v29; // st6 double v30; // st5 double v31; // st6 double v32; // st4 double v33; // st5 double v34; // st3 double v35; // st3 bool v36; // c0 double v37; // st5 bool v38; // c0 bool v39; // c3 double v40; // st3 double v41; // st5 bool v42; // c0 bool v43; // c3 double v44; // st4 double v45; // st3 double v46; // st7 double v47; // st3 double v48; // st4 double v49; // st7 double v50; // st4 double v51; // st4 double v52; // st5 double v53; // st3 double v54; // st5 double v55; // st4 double v56; // st3 double v57; // st2 double v58; // st5 double v59; // st2 double v60; // st3 double v61; // st3 double v62; // st6 double v63; // st3 double v64; // st4 double v65; // st7 double v66; // st6 double v67; // st4 double v68; // st4 double v69; // st5 double v70; // st3 double v71; // st4 double v72; // st5 double v73; // st3 double v74; // st3 bool v75; // c0 double v76; // st5 bool v77; // c0 bool v78; // c3 double v79; // st3 double v80; // st5 bool v81; // c0 bool v82; // c3 double v83; // st4 double v84; // st3 double v85; // st7 double v86; // st3 double v87; // st2 double v88; // st6 double v89; // st4 double v90; // st3 double v91; // st3 double v92; // st3 double v93; // st7 double v94; // st5 double v95; // st4 double v96; // st3 double v97; // st3 double v98; // st2 double v99; // st6 double v100; // st4 double v101; // st3 double v102; // rt0 double v103; // st5 double v104; // st4 double v105; // st5 double v106; // st7 double v107; // st3 double v108; // st3 double v109; // st3 bool v110; // c0 double v111; // st7 double v112; // st3 double v113; // st2 double v114; // st6 double v115; // st6 double v116; // st4 double v117; // st6 double v118; // st4 double v119; // st3 double v120; // rt0 double v121; // st7 float v122; // [esp+8h] [ebp-90h] float v123; // [esp+Ch] [ebp-8Ch] float v124; // [esp+10h] [ebp-88h] float v125; // [esp+14h] [ebp-84h] float v126; // [esp+18h] [ebp-80h] float v127; // [esp+1Ch] [ebp-7Ch] float v128; // [esp+20h] [ebp-78h] float v129; // [esp+24h] [ebp-74h] float v130; // [esp+28h] [ebp-70h] float v131; // [esp+2Ch] [ebp-6Ch] float v132; // [esp+30h] [ebp-68h] float v133; // [esp+34h] [ebp-64h] float v134; // [esp+38h] [ebp-60h] float v135; // [esp+3Ch] [ebp-5Ch] float v136; // [esp+40h] [ebp-58h] float v137; // [esp+44h] [ebp-54h] float v138; // [esp+48h] [ebp-50h] float v139; // [esp+4Ch] [ebp-4Ch] float v140; // [esp+50h] [ebp-48h] float v141; // [esp+54h] [ebp-44h] float v142; // [esp+58h] [ebp-40h] float v143; // [esp+5Ch] [ebp-3Ch] float v144; // [esp+60h] [ebp-38h] float v145; // [esp+64h] [ebp-34h] float v146; // [esp+68h] [ebp-30h] float v147; // [esp+6Ch] [ebp-2Ch] float v148; // [esp+70h] [ebp-28h] float v149; // [esp+74h] [ebp-24h] float v150; // [esp+78h] [ebp-20h] float v151; // [esp+7Ch] [ebp-1Ch] float v152; // [esp+80h] [ebp-18h] float v153; // [esp+84h] [ebp-14h] float v154; // [esp+88h] [ebp-10h] float v155; // [esp+8Ch] [ebp-Ch] float v156; // [esp+90h] [ebp-8h] float v157; // [esp+94h] [ebp-4h] float v158; // [esp+A4h] [ebp+Ch] float v159; // [esp+A4h] [ebp+Ch] float v160; // [esp+A4h] [ebp+Ch] float v161; // [esp+A4h] [ebp+Ch] float v162; // [esp+A4h] [ebp+Ch] int v163; // [esp+A4h] [ebp+Ch] float v164; // [esp+A4h] [ebp+Ch] float v165; // [esp+A4h] [ebp+Ch] float v166; // [esp+A4h] [ebp+Ch] float v167; // [esp+A4h] [ebp+Ch] float v168; // [esp+A4h] [ebp+Ch] int v169; // [esp+A4h] [ebp+Ch] float v170; // [esp+A4h] [ebp+Ch] float v171; // [esp+A4h] [ebp+Ch] float v172; // [esp+A4h] [ebp+Ch] float v173; // [esp+A4h] [ebp+Ch] float v174; // [esp+A4h] [ebp+Ch] int v175; // [esp+A4h] [ebp+Ch] float v176; // [esp+A4h] [ebp+Ch] int v177; // [esp+A4h] [ebp+Ch] int v178; // [esp+A4h] [ebp+Ch] float v179; // [esp+A4h] [ebp+Ch] int v180; // [esp+A4h] [ebp+Ch] int v181; // [esp+A4h] [ebp+Ch] float v182; // [esp+A4h] [ebp+Ch] int v183; // [esp+A4h] [ebp+Ch] float v184; // [esp+A4h] [ebp+Ch] int v185; // [esp+A4h] [ebp+Ch] float v186; // [esp+A4h] [ebp+Ch] float v187; // [esp+A4h] [ebp+Ch] float v188; // [esp+A4h] [ebp+Ch] int v189; // [esp+A4h] [ebp+Ch] float v190; // [esp+A4h] [ebp+Ch] float v191; // [esp+A4h] [ebp+Ch] float v192; // [esp+A4h] [ebp+Ch] int v193; // [esp+A4h] [ebp+Ch] int v194; // [esp+A4h] [ebp+Ch] float v195; // [esp+A4h] [ebp+Ch] float v196; // [esp+A4h] [ebp+Ch] int v197; // [esp+A4h] [ebp+Ch] int v198; // [esp+A4h] [ebp+Ch] float v199; // [esp+A4h] [ebp+Ch] float v200; // [esp+A4h] [ebp+Ch] int v201; // [esp+A4h] [ebp+Ch] int v202; // [esp+A4h] [ebp+Ch] float v203; // [esp+A4h] [ebp+Ch] float v204; // [esp+A4h] [ebp+Ch] int v205; // [esp+A4h] [ebp+Ch] int v206; // [esp+A4h] [ebp+Ch] float v207; // [esp+A4h] [ebp+Ch] float v208; // [esp+A4h] [ebp+Ch] int v209; // [esp+A4h] [ebp+Ch] int v210; // [esp+A4h] [ebp+Ch] float v211; // [esp+A4h] [ebp+Ch] float v212; // [esp+A4h] [ebp+Ch] int v213; // [esp+A4h] [ebp+Ch] int v214; // [esp+A4h] [ebp+Ch] float v215; // [esp+A4h] [ebp+Ch] float v216; // [esp+A4h] [ebp+Ch] int v217; // [esp+A4h] [ebp+Ch] float v218; // [esp+A4h] [ebp+Ch] float v219; // [esp+A4h] [ebp+Ch] float v220; // [esp+A4h] [ebp+Ch] float v221; // [esp+A4h] [ebp+Ch] int v222; // [esp+A4h] [ebp+Ch] int v223; // [esp+A4h] [ebp+Ch] float v224; // [esp+A4h] [ebp+Ch] float v225; // [esp+A4h] [ebp+Ch] float v226; // [esp+A4h] [ebp+Ch] float v227; // [esp+A4h] [ebp+Ch] float v228; // [esp+A4h] [ebp+Ch] float v229; // [esp+A4h] [ebp+Ch] float v230; // [esp+A4h] [ebp+Ch] float v231; // [esp+A4h] [ebp+Ch] float v232; // [esp+A4h] [ebp+Ch] float v233; // [esp+A4h] [ebp+Ch] float v234; // [esp+A4h] [ebp+Ch] float v235; // [esp+A4h] [ebp+Ch] float v236; // [esp+A4h] [ebp+Ch] int v237; // [esp+A4h] [ebp+Ch] float v238; // [esp+A4h] [ebp+Ch] float v239; // [esp+A4h] [ebp+Ch] float v240; // [esp+A4h] [ebp+Ch] float v241; // [esp+A4h] [ebp+Ch] float v242; // [esp+A4h] [ebp+Ch] float v243; // [esp+A4h] [ebp+Ch] float v244; // [esp+A4h] [ebp+Ch] float v245; // [esp+A4h] [ebp+Ch] float v246; // [esp+A4h] [ebp+Ch] float v247; // [esp+A4h] [ebp+Ch] float v248; // [esp+A4h] [ebp+Ch] float v249; // [esp+A4h] [ebp+Ch] float v250; // [esp+A4h] [ebp+Ch] float v251; // [esp+A8h] [ebp+10h] float v252; // [esp+A8h] [ebp+10h] float v253; // [esp+A8h] [ebp+10h] float v254; // [esp+A8h] [ebp+10h] float v255; // [esp+A8h] [ebp+10h] float v256; // [esp+A8h] [ebp+10h] float v257; // [esp+A8h] [ebp+10h] float v258; // [esp+A8h] [ebp+10h] float v259; // [esp+A8h] [ebp+10h] int v260; // [esp+A8h] [ebp+10h] int v261; // [esp+ACh] [ebp+14h] float v262; // [esp+ACh] [ebp+14h] float v263; // [esp+ACh] [ebp+14h] int v264; // [esp+ACh] [ebp+14h] float v265; // [esp+ACh] [ebp+14h] float v266; // [esp+ACh] [ebp+14h] int v267; // [esp+ACh] [ebp+14h] float v268; // [esp+ACh] [ebp+14h] int v269; // [esp+ACh] [ebp+14h] int v270; // [esp+ACh] [ebp+14h] int v271; // [esp+ACh] [ebp+14h] int v272; // [esp+ACh] [ebp+14h] int v273; // [esp+ACh] [ebp+14h] int v274; // [esp+ACh] [ebp+14h] float v275; // [esp+ACh] [ebp+14h] int v276; // [esp+ACh] [ebp+14h] float v277; // [esp+ACh] [ebp+14h] float v278; // [esp+ACh] [ebp+14h] float v279; // [esp+ACh] [ebp+14h] float v280; // [esp+ACh] [ebp+14h] float v281; // [esp+ACh] [ebp+14h] float v282; // [esp+ACh] [ebp+14h] float v283; // [esp+ACh] [ebp+14h] float v284; // [esp+ACh] [ebp+14h] float v285; // [esp+ACh] [ebp+14h] float v286; // [esp+ACh] [ebp+14h] float v287; // [esp+ACh] [ebp+14h] int v288; // [esp+ACh] [ebp+14h] int v289; // [esp+ACh] [ebp+14h] int v290; // [esp+B0h] [ebp+18h] float v291; // [esp+B0h] [ebp+18h] float v292; // [esp+B0h] [ebp+18h] float v293; // [esp+B0h] [ebp+18h] float v294; // [esp+B0h] [ebp+18h] float v295; // [esp+B0h] [ebp+18h] float v296; // [esp+B0h] [ebp+18h] float v297; // [esp+B0h] [ebp+18h] float v298; // [esp+B0h] [ebp+18h] float v299; // [esp+B0h] [ebp+18h] float v300; // [esp+B0h] [ebp+18h] float v301; // [esp+B0h] [ebp+18h] float v302; // [esp+B0h] [ebp+18h] float v303; // [esp+B0h] [ebp+18h] float v304; // [esp+B0h] [ebp+18h] float v305; // [esp+B0h] [ebp+18h] float v306; // [esp+B0h] [ebp+18h] float v307; // [esp+B0h] [ebp+18h] float v308; // [esp+B0h] [ebp+18h] float v309; // [esp+B0h] [ebp+18h] float v310; // [esp+B0h] [ebp+18h] v5 = (float *)a2; v128 = *(float *)a5 - *(float *)a3; v6 = (float *)a4; v129 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v7 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v122 = v128; v123 = v129; v130 = v7; v8 = *(float *)(a4 + 4); v124 = v130; v149 = v8 - *(float *)(a2 + 4); v9 = *(float *)(a4 + 8); v125 = v149; v150 = v9 - *(float *)(a2 + 8); v10 = *(float *)(a4 + 12); v126 = v150; v151 = v10 - *(float *)(a2 + 12); v127 = v151; v155 = v128 * a1; v156 = v129 * a1; v157 = a1 * v130; v11 = v149; v152 = v155 + v149; v12 = v150; v153 = v156 + v150; v13 = v151; v154 = v157 + v151; v140 = *(float *)(a4 + 16) * *(float *)(a2 + 16) + *(float *)(a4 + 20) * *(float *)(a2 + 20) + *(float *)(a4 + 24) * *(float *)(a2 + 24); v141 = *(float *)(a2 + 16) * *(float *)(a4 + 28) + *(float *)(a4 + 32) * *(float *)(a2 + 20) + *(float *)(a2 + 24) * *(float *)(a4 + 36); v142 = *(float *)(a4 + 40) * *(float *)(a2 + 16) + *(float *)(a4 + 44) * *(float *)(a2 + 20) + *(float *)(a4 + 48) * *(float *)(a2 + 24); v149 = v150 * *(float *)(a2 + 20) + v149 * *(float *)(a2 + 16) + *(float *)(a2 + 24) * v151; v14 = v153; v15 = v152; v155 = v153 * *(float *)(a2 + 20) + v152 * *(float *)(a2 + 16) + *(float *)(a2 + 24) * v154; v158 = fabs(v140); v131 = v158; v159 = fabs(v141); v132 = v159; v160 = fabs(v142); v133 = v160; v161 = *(float *)(a4 + 56) * v132 + *(float *)(a4 + 52) * v131 + v160 * *(float *)(a4 + 60); v162 = v161 + v5[13]; v16 = v162; if ( v162 >= (double)v149 ) { *(float *)&v163 = -v16; if ( *(float *)&v163 > (double)v149 && v155 < (double)*(float *)&v163 ) return 0; } else if ( v155 > v16 ) { return 0; } v143 = *(float *)(a4 + 16) * v5[7] + v5[8] * *(float *)(a4 + 20) + *(float *)(a4 + 24) * v5[9]; v144 = v5[7] * *(float *)(a4 + 28) + *(float *)(a4 + 32) * v5[8] + *(float *)(a4 + 36) * v5[9]; v145 = *(float *)(a4 + 44) * v5[8] + *(float *)(a4 + 40) * v5[7] + *(float *)(a4 + 48) * v5[9]; v150 = v11 * v5[7] + v12 * v5[8] + v13 * v5[9]; v156 = v15 * v5[7] + v14 * v5[8] + v154 * v5[9]; v164 = fabs(v143); v134 = v164; v165 = fabs(v144); v135 = v165; v166 = fabs(v145); v136 = v166; v167 = *(float *)(a4 + 56) * v135 + *(float *)(a4 + 52) * v134 + v166 * *(float *)(a4 + 60); v168 = v167 + v5[14]; v18 = v168; if ( v168 >= (double)v150 ) { *(float *)&v169 = -v18; if ( *(float *)&v169 > (double)v150 && v156 < (double)*(float *)&v169 ) return 0; } else if ( v156 > v18 ) { return 0; } v146 = v5[11] * *(float *)(a4 + 20) + v5[10] * *(float *)(a4 + 16) + *(float *)(a4 + 24) * v5[12]; v147 = v5[10] * *(float *)(a4 + 28) + *(float *)(a4 + 32) * v5[11] + *(float *)(a4 + 36) * v5[12]; v148 = *(float *)(a4 + 44) * v5[11] + *(float *)(a4 + 40) * v5[10] + *(float *)(a4 + 48) * v5[12]; v151 = v11 * v5[10] + v12 * v5[11] + v13 * v5[12]; v157 = v15 * v5[10] + v14 * v5[11] + v154 * v5[12]; v170 = fabs(v146); v137 = v170; v171 = fabs(v147); v138 = v171; v172 = fabs(v148); v139 = v172; v173 = *(float *)(a4 + 56) * v138 + *(float *)(a4 + 52) * v137 + v172 * *(float *)(a4 + 60); v174 = v173 + v5[15]; v19 = v174; if ( v174 >= (double)v151 ) { *(float *)&v175 = -v19; if ( *(float *)&v175 > (double)v151 && v157 < (double)*(float *)&v175 ) return 0; } else if ( v157 > v19 ) { return 0; } *(float *)&v261 = v11 * *(float *)(a4 + 16) + v12 * *(float *)(a4 + 20) + *(float *)(a4 + 24) * v13; v176 = v5[14] * v134 + v5[13] * v131 + v5[15] * v137; *(float *)&v177 = v176 + v6[13]; if ( *(float *)&v177 >= (double)*(float *)&v261 ) { *(float *)&v178 = -*(float *)&v177; if ( *(float *)&v178 > (double)*(float *)&v261 ) { v263 = v15 * v6[4] + v14 * v6[5] + v6[6] * v154; if ( *(float *)&v178 > (double)v263 ) return 0; } } else { v262 = v15 * v6[4] + v14 * v6[5] + v6[6] * v154; if ( *(float *)&v177 < (double)v262 ) return 0; } *(float *)&v264 = v11 * v6[7] + v12 * v6[8] + v13 * v6[9]; v179 = v5[14] * v135 + v5[13] * v132 + v5[15] * v138; *(float *)&v180 = v179 + v6[14]; if ( *(float *)&v180 >= (double)*(float *)&v264 ) { *(float *)&v181 = -*(float *)&v180; if ( *(float *)&v181 > (double)*(float *)&v264 ) { v266 = v15 * v6[7] + v14 * v6[8] + v154 * v6[9]; if ( *(float *)&v181 > (double)v266 ) return 0; } } else { v265 = v15 * v6[7] + v14 * v6[8] + v154 * v6[9]; if ( *(float *)&v180 < (double)v265 ) return 0; } v20 = v12 * v6[11]; v21 = v152; v22 = v11 * v6[10] + v20; v23 = v153; *(float *)&v267 = v13 * v6[12] + v22; v182 = v5[13] * v133 + v5[14] * v136 + v5[15] * v139; *(float *)&v183 = v182 + v6[15]; if ( *(float *)&v183 >= (double)*(float *)&v267 ) { *(float *)&v185 = -*(float *)&v183; if ( *(float *)&v185 <= (double)*(float *)&v267 ) { v27 = v133; } else { v28 = v21 * v6[10]; v29 = *(float *)&v185; v30 = v23 * v6[11] + v28 + v6[12] * v154; v27 = v133; v186 = v30; if ( v186 < v29 ) return 0; } } else { v24 = v21 * v6[10]; v25 = *(float *)&v183; v26 = v23 * v6[11] + v24 + v6[12] * v154; v27 = v133; v184 = v26; if ( v184 > v25 ) return 0; } v31 = v151; v32 = v143; v33 = v146; v268 = v151 * v143 - v146 * v150; v187 = v6[14] * v27 + v132 * v6[15]; v34 = v187; v188 = v5[15] * v134 + v5[14] * v137; *(float *)&v189 = v34 + v188; v35 = v268; if ( *(float *)&v189 >= (double)v268 ) { v190 = -*(float *)&v189; v38 = v190 < v35; v39 = v190 == v35; v40 = v190; if ( v38 || v39 ) { v37 = v157; } else { v41 = v32 * v157 - v33 * v156; v42 = v40 < v41; v43 = v40 == v41; v37 = v157; if ( !v42 && !v43 ) return 0; } } else { v36 = *(float *)&v189 < v32 * v157 - v33 * v156; v37 = v157; if ( v36 ) return 0; } v44 = v147; *(float *)&v269 = v31 * v144 - v147 * v150; v45 = v27 * v6[13] + v131 * v6[15]; v46 = v144; v191 = v45; v47 = v191; v192 = v5[15] * v135 + v5[14] * v138; *(float *)&v193 = v47 + v192; if ( *(float *)&v193 >= (double)*(float *)&v269 ) { *(float *)&v194 = -*(float *)&v193; if ( *(float *)&v194 <= (double)*(float *)&v269 ) { v49 = v37; } else { v50 = v46 * v37 - v44 * v156; v49 = v37; if ( v50 < *(float *)&v194 ) return 0; } } else { v48 = v46 * v37 - v44 * v156; v49 = v37; if ( v48 > *(float *)&v193 ) return 0; } v51 = v145; v52 = v148; *(float *)&v270 = v31 * v145 - v148 * v150; v195 = v6[13] * v132 + v6[14] * v131; v53 = v195; v196 = v5[15] * v136 + v5[14] * v139; *(float *)&v197 = v53 + v196; if ( *(float *)&v197 >= (double)*(float *)&v270 ) { *(float *)&v198 = -*(float *)&v197; if ( *(float *)&v198 > (double)*(float *)&v270 && *(float *)&v198 > v51 * v49 - v52 * v156 ) return 0; } else if ( *(float *)&v197 < v51 * v49 - v52 * v156 ) { return 0; } v54 = v146; v55 = v149; *(float *)&v271 = v146 * v149 - v31 * v140; v199 = v5[15] * v131 + v5[13] * v137; v56 = v199; v200 = v6[14] * v136 + v135 * v6[15]; *(float *)&v201 = v56 + v200; if ( *(float *)&v201 >= (double)*(float *)&v271 ) { *(float *)&v202 = -*(float *)&v201; if ( *(float *)&v202 <= (double)*(float *)&v271 ) { v58 = v155; } else { v59 = v54 * v155 - v49 * v140; v58 = v155; if ( v59 < *(float *)&v202 ) return 0; } } else { v57 = v54 * v155 - v49 * v140; v58 = v155; if ( v57 > *(float *)&v201 ) return 0; } *(float *)&v272 = v147 * v55 - v31 * v141; v203 = v5[15] * v132 + v5[13] * v138; v60 = v203; v204 = v6[13] * v136 + v134 * v6[15]; *(float *)&v205 = v60 + v204; if ( *(float *)&v205 >= (double)*(float *)&v272 ) { *(float *)&v206 = -*(float *)&v205; if ( *(float *)&v206 > (double)*(float *)&v272 && v147 * v58 - v49 * v141 < *(float *)&v206 ) return 0; } else if ( v147 * v58 - v49 * v141 > *(float *)&v205 ) { return 0; } v61 = v148 * v55 - v31 * v142; v62 = v148; *(float *)&v273 = v61; v207 = v5[15] * v133 + v5[13] * v139; v63 = v207; v208 = v6[13] * v135 + v6[14] * v134; *(float *)&v209 = v63 + v208; if ( *(float *)&v209 >= (double)*(float *)&v273 ) { *(float *)&v210 = -*(float *)&v209; if ( *(float *)&v210 <= (double)*(float *)&v273 ) { v65 = v149; v66 = v58; } else { v67 = v62 * v58 - v49 * v142; v65 = v149; v66 = v58; if ( v67 < *(float *)&v210 ) return 0; } } else { v64 = v62 * v58 - v49 * v142; v65 = v149; v66 = v58; if ( v64 > *(float *)&v209 ) return 0; } v68 = v140; v69 = v143; *(float *)&v274 = v150 * v140 - v143 * v65; v211 = v6[14] * v139 + v138 * v6[15]; v70 = v211; v212 = v5[13] * v134 + v5[14] * v131; *(float *)&v213 = v70 + v212; if ( *(float *)&v213 >= (double)*(float *)&v274 ) { *(float *)&v214 = -*(float *)&v213; if ( *(float *)&v214 > (double)*(float *)&v274 && *(float *)&v214 > v68 * v156 - v69 * v66 ) return 0; } else if ( *(float *)&v213 < v68 * v156 - v69 * v66 ) { return 0; } v71 = v141; v72 = v144; v275 = v150 * v141 - v144 * v65; v215 = v6[13] * v139 + v137 * v6[15]; v73 = v215; v216 = v5[13] * v135 + v5[14] * v132; *(float *)&v217 = v73 + v216; v74 = v275; if ( *(float *)&v217 >= (double)v275 ) { v218 = -*(float *)&v217; v77 = v218 < v74; v78 = v218 == v74; v79 = v218; if ( v77 || v78 ) { v76 = v156; } else { v80 = v71 * v156 - v72 * v66; v81 = v79 < v80; v82 = v79 == v80; v76 = v156; if ( !v81 && !v82 ) return 0; } } else { v75 = *(float *)&v217 < v71 * v156 - v72 * v66; v76 = v156; if ( v75 ) return 0; } v83 = v145; v84 = v150 * v142 - v65 * v145; v85 = v142; *(float *)&v276 = v84; v219 = v5[13] * v136 + v5[14] * v133; v86 = v219; v220 = v6[13] * v138 + v6[14] * v137; v221 = v86 + v220; v87 = v221; if ( v221 >= (double)*(float *)&v276 ) { *(float *)&v222 = -v87; if ( *(float *)&v222 > (double)*(float *)&v276 && v85 * v76 - v66 * v83 < *(float *)&v222 ) return 0; } else if ( v85 * v76 - v66 * v83 > v87 ) { return 0; } sub_61E8E0(&v122, &v155, &v125); v153 = v128 * v5[7] + v129 * v5[8] + v130 * v5[9]; v154 = v130 * v5[12] + v129 * v5[11] + v128 * v5[10]; v88 = v154; *(float *)&v223 = fabs(v154); *(float *)&v290 = fabs(v153); v277 = v156 * v5[5] + v5[4] * v155 + v157 * v5[6]; v278 = fabs(v277); v89 = v278; v279 = v154 * v144 - v153 * v147; v280 = fabs(v279); v90 = v280 * v6[14]; v281 = v154 * v143 - v153 * v146; v282 = fabs(v281); v91 = v90 + v282 * v6[13]; v283 = v154 * v145 - v153 * v148; v284 = fabs(v283); v285 = v91 + v284 * v6[15]; v92 = v285; v286 = *(float *)&v223 * v5[14] + v5[15] * *(float *)&v290; v287 = v92 + v286; if ( v287 < v89 ) return 0; v93 = v153; v152 = v128 * v5[4] + v129 * v5[5] + v5[6] * v130; v94 = v152; *(float *)&v288 = fabs(v152); v251 = v156 * v5[8] + v5[7] * v155 + v157 * v5[9]; v252 = fabs(v251); v95 = v252; v253 = v152 * v147 - v88 * v141; v254 = fabs(v253); v96 = v254 * v6[14]; v255 = v152 * v146 - v88 * v140; v256 = fabs(v255); v97 = v96 + v256 * v6[13]; v98 = v152 * v148 - v88 * v142; v99 = v142; v257 = v98; v258 = fabs(v257); v259 = v97 + v258 * v6[15]; v224 = *(float *)&v223 * v5[13] + *(float *)&v288 * v5[15]; v225 = v259 + v224; if ( v225 < v95 ) return 0; v226 = v5[10] * v155 + v156 * v5[11] + v157 * v5[12]; v227 = fabs(v226); v100 = v227; v228 = v93 * v141 - v94 * v144; v229 = fabs(v228); v101 = v229 * v6[14]; v230 = v93 * v140 - v94 * v143; v231 = fabs(v230); v102 = v101 + v231 * v6[13]; v232 = v93 * v99 - v94 * v145; v233 = fabs(v232); v103 = v100; v234 = v102 + v233 * v6[15]; v104 = v234; v235 = *(float *)&v288 * v5[14] + *(float *)&v290 * v5[13]; v236 = v104 + v235; if ( v236 < v103 ) return 0; v153 = v128 * v6[7] + v129 * v6[8] + v130 * v6[9]; v154 = v128 * v6[10] + v129 * v6[11] + v130 * v6[12]; v105 = v154; *(float *)&v237 = fabs(v154); *(float *)&v289 = fabs(v153); v291 = v156 * v6[5] + v6[4] * v155 + v157 * v6[6]; v292 = fabs(v291); v106 = v292; v293 = v154 * v144 - v145 * v153; v294 = fabs(v293); v107 = v294 * v5[14]; v295 = v154 * v141 - v153 * v99; v296 = fabs(v295); v108 = v107 + v296 * v5[13]; v297 = v154 * v147 - v153 * v148; v298 = fabs(v297); v299 = v108 + v298 * v5[15]; v109 = v299; v300 = *(float *)&v289 * v6[15] + *(float *)&v237 * v6[14]; v301 = v109 + v300; v110 = v301 < v106; v111 = v153; if ( v110 ) return 0; v152 = v128 * v6[4] + v129 * v6[5] + v6[6] * v130; *(float *)&v260 = fabs(v152); v302 = v156 * v6[8] + v155 * v6[7] + v157 * v6[9]; v303 = fabs(v302); v112 = v303; v304 = v152 * v145 - v105 * v143; v305 = fabs(v304); v113 = v99 * v152 - v105 * v140; v114 = v305 * v5[14]; v306 = v113; v307 = fabs(v306); v115 = v114 + v307 * v5[13]; v308 = v152 * v148 - v105 * v146; v309 = fabs(v308); v116 = v115 + v309 * v5[15]; v117 = v152; v310 = v116; v238 = *(float *)&v260 * v6[15] + *(float *)&v237 * v6[13]; v239 = v310 + v238; if ( v239 < v112 ) return 0; v240 = v6[10] * v155 + v6[11] * v156 + v6[12] * v157; v241 = fabs(v240); v118 = v241; v242 = v111 * v143 - v117 * v144; v243 = fabs(v242); v119 = v243 * v5[14]; v244 = v111 * v140 - v117 * v141; v245 = fabs(v244); v120 = v119 + v245 * v5[13]; v246 = v111 * v146 - v117 * v147; v247 = fabs(v246); v248 = v120 + v247 * v5[15]; v121 = v248; v249 = *(float *)&v260 * v6[14] + v6[13] * *(float *)&v289; v250 = v121 + v249; if ( v250 < v118 ) return 0; return 1; } //----- (0083C050) -------------------------------------------------------- bool __cdecl sub_83C050(float a1, int a2, int a3, int a4) { float v4; // ST20_4 float v5; // ST24_4 double v6; // st6 double v7; // st7 float v8; // ST2C_4 float v9; // ST2C_4 float v10; // ST2C_4 float v11; // ST2C_4 float v12; // ST2C_4 float v13; // ST2C_4 float v15; // [esp+20h] [ebp-5Ch] float v16[20]; // [esp+28h] [ebp-54h] v4 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v5 = *(float *)(a4 + 8) - *(float *)(a2 + 8); v15 = *(float *)(a4 + 12) - *(float *)(a2 + 12); v6 = v5; v7 = v4; v8 = *(float *)(a2 + 24) * v15 + *(float *)(a2 + 16) * v4 + *(float *)(a2 + 20) * v5; v9 = fabs(v8); if ( *(float *)(a2 + 52) >= (double)v9 ) { v10 = *(float *)(a2 + 32) * v6 + *(float *)(a2 + 28) * v7 + *(float *)(a2 + 36) * v15; v11 = fabs(v10); if ( *(float *)(a2 + 56) >= (double)v11 ) { v12 = v7 * *(float *)(a2 + 40) + v6 * *(float *)(a2 + 44) + v15 * *(float *)(a2 + 48); v13 = fabs(v12); if ( *(float *)(a2 + 60) >= (double)v13 ) return 1; } } sub_84AAD0(v16, a2, a4, a1, 0.001, 0.000099999997, 32); sub_846820(v16); return sub_956CD0(v16) == 3 || sub_956CD0(v16) == 2; } //----- (0083C1B0) -------------------------------------------------------- char __cdecl sub_83C1B0(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { float *v7; // esi double v8; // st7 double v9; // st7 double v10; // st7 double v11; // st7 float *v12; // ecx double v13; // st5 double v14; // st4 double v15; // st6 double v16; // st3 double v17; // st3 double v18; // st3 double v19; // st2 double v20; // st5 double v21; // st6 double v23; // rt1 double v24; // st5 double v25; // st4 double v26; // st3 double v27; // st4 double v28; // st5 __int16 v29; // fps double v30; // st3 bool v31; // c0 char v32; // c2 bool v33; // c3 char v34; // ah double v35; // st5 double v36; // rt0 double v37; // st4 double v38; // st4 __int16 v39; // fps double v40; // st3 bool v41; // c0 char v42; // c2 bool v43; // c3 double v44; // st3 double v45; // st5 bool v46; // c0 bool v47; // c3 double v48; // st3 double v49; // st5 double v50; // st3 double v51; // st4 double v52; // st5 double v53; // st4 double v54; // st3 double v55; // st2 double v56; // st3 double v57; // st4 __int16 v58; // fps double v59; // st3 bool v60; // c0 char v61; // c2 bool v62; // c3 char v63; // ah double v64; // st4 double v65; // st3 double v66; // st3 bool v67; // c0 double v68; // st5 double v69; // st5 bool v70; // c0 double v71; // st5 __int16 v72; // fps double v73; // st3 bool v74; // c0 char v75; // c2 bool v76; // c3 __int16 v77; // fps double v78; // st3 bool v79; // c0 char v80; // c2 bool v81; // c3 double v82; // st5 double v83; // st5 double v84; // st5 double v85; // st5 double v86; // st4 double v87; // st3 double v88; // st4 double v89; // st3 double v90; // st7 double v91; // st5 double v92; // st5 double v93; // st4 double v94; // st3 double v95; // st2 bool v96; // c0 bool v97; // c3 double v98; // st4 double v99; // st3 double v100; // st3 double v101; // st5 double v102; // st5 double v103; // st4 double v104; // rt0 double v105; // st4 double v106; // st5 double v107; // st4 double v108; // rt1 double v109; // st4 double v110; // st5 double v111; // st7 double v112; // st6 double v113; // st6 double v114; // st5 double v115; // st4 double v116; // st6 bool v117; // c0 bool v118; // c3 double v119; // st4 double v120; // st6 double v121; // st7 float *v122; // eax float v123; // edx float v124; // ecx float v125; // eax double v126; // st7 double v127; // st6 double v128; // st5 double v129; // st4 double v130; // st2 double v131; // st3 bool v132; // c0 bool v133; // c3 double v134; // st5 double v135; // st5 double v136; // st4 double v137; // st2 double v138; // st3 bool v139; // c0 double v140; // st4 double v141; // rt1 double v142; // st7 double v143; // st6 double v144; // st6 double v145; // st5 double v146; // rt2 double v147; // st5 double v148; // st6 double v149; // st5 double v150; // rt0 double v151; // st5 double v152; // st6 float *v153; // eax float v154; // edx float v155; // ecx float v156; // eax double v157; // st7 double v158; // st7 double v159; // st6 double v160; // st6 double v161; // st5 double v162; // st7 float *v163; // eax float v164; // edx float v165; // ecx float v166; // eax double v167; // st7 double v168; // st7 double v169; // st6 double v170; // st5 double v171; // st4 double v172; // st2 double v173; // st3 bool v174; // c0 bool v175; // c3 double v176; // st6 double v177; // st6 double v178; // st5 double v179; // st2 double v180; // st3 double v181; // st5 double v182; // st4 double v183; // rt0 double v184; // st4 double v185; // st7 double v186; // st5 double v187; // st5 double v188; // st4 double v189; // st4 float v190; // [esp+8h] [ebp-74h] float v191; // [esp+Ch] [ebp-70h] float v192; // [esp+10h] [ebp-6Ch] float v193; // [esp+14h] [ebp-68h] float v194; // [esp+18h] [ebp-64h] float v195; // [esp+1Ch] [ebp-60h] float v196; // [esp+20h] [ebp-5Ch] float v197; // [esp+24h] [ebp-58h] float v198; // [esp+28h] [ebp-54h] float v199; // [esp+2Ch] [ebp-50h] float v200; // [esp+30h] [ebp-4Ch] float v201; // [esp+34h] [ebp-48h] float v202; // [esp+38h] [ebp-44h] float v203; // [esp+3Ch] [ebp-40h] float v204; // [esp+40h] [ebp-3Ch] float v205; // [esp+44h] [ebp-38h] float v206; // [esp+48h] [ebp-34h] float v207; // [esp+4Ch] [ebp-30h] float v208; // [esp+50h] [ebp-2Ch] float v209; // [esp+54h] [ebp-28h] float v210; // [esp+58h] [ebp-24h] float v211; // [esp+5Ch] [ebp-20h] float v212; // [esp+60h] [ebp-1Ch] float v213; // [esp+64h] [ebp-18h] float v214; // [esp+68h] [ebp-14h] float v215; // [esp+6Ch] [ebp-10h] float v216; // [esp+70h] [ebp-Ch] float v217; // [esp+74h] [ebp-8h] float v218; // [esp+78h] [ebp-4h] float v219; // [esp+88h] [ebp+Ch] float v220; // [esp+88h] [ebp+Ch] float v221; // [esp+88h] [ebp+Ch] float v222; // [esp+88h] [ebp+Ch] float v223; // [esp+88h] [ebp+Ch] float v224; // [esp+88h] [ebp+Ch] int v225; // [esp+88h] [ebp+Ch] float v226; // [esp+88h] [ebp+Ch] int v227; // [esp+88h] [ebp+Ch] float v228; // [esp+88h] [ebp+Ch] int v229; // [esp+88h] [ebp+Ch] int v230; // [esp+88h] [ebp+Ch] int v231; // [esp+88h] [ebp+Ch] float v232; // [esp+88h] [ebp+Ch] float v233; // [esp+88h] [ebp+Ch] float v234; // [esp+88h] [ebp+Ch] float v235; // [esp+88h] [ebp+Ch] int v236; // [esp+88h] [ebp+Ch] int v237; // [esp+88h] [ebp+Ch] float v238; // [esp+88h] [ebp+Ch] int v239; // [esp+88h] [ebp+Ch] float v240; // [esp+88h] [ebp+Ch] float v241; // [esp+88h] [ebp+Ch] float v242; // [esp+88h] [ebp+Ch] float v243; // [esp+88h] [ebp+Ch] int v244; // [esp+88h] [ebp+Ch] int v245; // [esp+88h] [ebp+Ch] int v246; // [esp+88h] [ebp+Ch] float v247; // [esp+88h] [ebp+Ch] int v248; // [esp+88h] [ebp+Ch] int v249; // [esp+88h] [ebp+Ch] float v250; // [esp+88h] [ebp+Ch] float v251; // [esp+88h] [ebp+Ch] float v252; // [esp+88h] [ebp+Ch] float v253; // [esp+88h] [ebp+Ch] float v254; // [esp+88h] [ebp+Ch] int v255; // [esp+88h] [ebp+Ch] int v256; // [esp+88h] [ebp+Ch] float v257; // [esp+88h] [ebp+Ch] int v258; // [esp+88h] [ebp+Ch] int v259; // [esp+88h] [ebp+Ch] float v260; // [esp+88h] [ebp+Ch] float v261; // [esp+88h] [ebp+Ch] float v262; // [esp+88h] [ebp+Ch] float v263; // [esp+88h] [ebp+Ch] int v264; // [esp+88h] [ebp+Ch] int v265; // [esp+88h] [ebp+Ch] int v266; // [esp+88h] [ebp+Ch] int v267; // [esp+88h] [ebp+Ch] float v268; // [esp+88h] [ebp+Ch] float v269; // [esp+88h] [ebp+Ch] float v270; // [esp+88h] [ebp+Ch] float v271; // [esp+88h] [ebp+Ch] int v272; // [esp+88h] [ebp+Ch] int v273; // [esp+88h] [ebp+Ch] int v274; // [esp+88h] [ebp+Ch] float v275; // [esp+88h] [ebp+Ch] int v276; // [esp+88h] [ebp+Ch] int v277; // [esp+88h] [ebp+Ch] float v278; // [esp+88h] [ebp+Ch] float v279; // [esp+88h] [ebp+Ch] float v280; // [esp+88h] [ebp+Ch] float v281; // [esp+88h] [ebp+Ch] float v282; // [esp+88h] [ebp+Ch] int v283; // [esp+88h] [ebp+Ch] int v284; // [esp+88h] [ebp+Ch] float v285; // [esp+88h] [ebp+Ch] int v286; // [esp+88h] [ebp+Ch] int v287; // [esp+88h] [ebp+Ch] float v288; // [esp+88h] [ebp+Ch] float v289; // [esp+88h] [ebp+Ch] float v290; // [esp+88h] [ebp+Ch] float v291; // [esp+88h] [ebp+Ch] int v292; // [esp+88h] [ebp+Ch] int v293; // [esp+88h] [ebp+Ch] int v294; // [esp+88h] [ebp+Ch] int v295; // [esp+88h] [ebp+Ch] float v296; // [esp+88h] [ebp+Ch] float v297; // [esp+88h] [ebp+Ch] float v298; // [esp+88h] [ebp+Ch] float v299; // [esp+88h] [ebp+Ch] int v300; // [esp+88h] [ebp+Ch] int v301; // [esp+88h] [ebp+Ch] int v302; // [esp+88h] [ebp+Ch] float v303; // [esp+88h] [ebp+Ch] int v304; // [esp+88h] [ebp+Ch] int v305; // [esp+88h] [ebp+Ch] float v306; // [esp+88h] [ebp+Ch] float v307; // [esp+88h] [ebp+Ch] float v308; // [esp+88h] [ebp+Ch] float v309; // [esp+88h] [ebp+Ch] float v310; // [esp+88h] [ebp+Ch] int v311; // [esp+88h] [ebp+Ch] int v312; // [esp+88h] [ebp+Ch] float v313; // [esp+88h] [ebp+Ch] int v314; // [esp+88h] [ebp+Ch] int v315; // [esp+88h] [ebp+Ch] int v316; // [esp+8Ch] [ebp+10h] int v317; // [esp+8Ch] [ebp+10h] int v318; // [esp+90h] [ebp+14h] float v319; // [esp+90h] [ebp+14h] int v320; // [esp+90h] [ebp+14h] int v321; // [esp+90h] [ebp+14h] int v322; // [esp+90h] [ebp+14h] int v323; // [esp+90h] [ebp+14h] float v324; // [esp+90h] [ebp+14h] float v325; // [esp+90h] [ebp+14h] int v326; // [esp+90h] [ebp+14h] int v327; // [esp+90h] [ebp+14h] int v328; // [esp+90h] [ebp+14h] int v329; // [esp+90h] [ebp+14h] float v330; // [esp+90h] [ebp+14h] int v331; // [esp+90h] [ebp+14h] int v332; // [esp+90h] [ebp+14h] int v333; // [esp+90h] [ebp+14h] int v334; // [esp+90h] [ebp+14h] int v335; // [esp+90h] [ebp+14h] float v336; // [esp+90h] [ebp+14h] float v337; // [esp+90h] [ebp+14h] int v338; // [esp+94h] [ebp+18h] int v339; // [esp+98h] [ebp+1Ch] int v340; // [esp+98h] [ebp+1Ch] int v341; // [esp+9Ch] [ebp+20h] int v342; // [esp+9Ch] [ebp+20h] int v343; // [esp+9Ch] [ebp+20h] int v344; // [esp+9Ch] [ebp+20h] int v345; // [esp+9Ch] [ebp+20h] v7 = (float *)a2; v208 = *(float *)a7 - *(float *)a3; v209 = *(float *)(a7 + 4) - *(float *)(a3 + 4); v210 = *(float *)(a7 + 8) - *(float *)(a3 + 8); v202 = *(float *)a5 - *(float *)a4; v203 = *(float *)(a5 + 4) - *(float *)(a4 + 4); v8 = *(float *)(a5 + 8) - *(float *)(a4 + 8); v190 = v202; v191 = v203; v204 = v8; v192 = v204; v199 = *(float *)a6 - *(float *)a4; v9 = *(float *)(a6 + 4); v193 = v199; v200 = v9 - *(float *)(a4 + 4); v10 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v194 = v200; v201 = v10; v11 = v201; v195 = v201; v196 = v201 * v203 - v200 * v204; v197 = v204 * v199 - v202 * v201; v198 = v200 * v202 - v203 * v199; v205 = *(float *)a4 - *(float *)(a2 + 4); v206 = *(float *)(a4 + 4) - *(float *)(a2 + 8); v12 = (float *)(a2 + 28); v207 = *(float *)(a4 + 8) - *(float *)(a2 + 12); v13 = v197; v14 = v196; v15 = v198; *(float *)&v341 = *(float *)(a2 + 24) * v198 + *(float *)(a2 + 20) * v197 + v196 * *(float *)(a2 + 16); *(float *)&v316 = *(float *)(a2 + 32) * v197 + v196 * *(float *)(a2 + 28) + *(float *)(a2 + 36) * v198; *(float *)&v338 = v196 * *(float *)(a2 + 40) + v197 * *(float *)(a2 + 44) + v198 * *(float *)(a2 + 48); v219 = *(float *)(a2 + 56) * *(float *)&v316; v220 = fabs(v219); v16 = v220; v221 = v7[13] * *(float *)&v341; v222 = fabs(v221); v17 = v16 + v222; v223 = *(float *)&v338 * v7[15]; v224 = fabs(v223); *(float *)&v225 = v17 + v224; *(float *)&v318 = v206 * v197 + v205 * v196 + v207 * v198; v18 = *(float *)&v318; if ( *(float *)&v225 >= (double)*(float *)&v318 ) { *(float *)&v227 = -*(float *)&v225; if ( *(float *)&v227 <= v18 ) { v21 = a1; } else { v23 = *(float *)&v227; v228 = v15 * v210 + v13 * v209 + v14 * v208; v21 = a1; if ( *(float *)&v318 + v228 * a1 < v23 ) return 0; } } else { v19 = v13 * v209 + v14 * v208; v20 = *(float *)&v225; v226 = v15 * v210 + v19; v21 = a1; if ( v18 + v226 * a1 > v20 ) return 0; } v319 = v7[5] * v206 + v205 * v7[4] + v7[6] * v207; v217 = v7[5] * v203 + v202 * v7[4] + v7[6] * v204; v214 = v7[5] * v200 + v199 * v7[4] + v7[6] * v11; *(float *)&v229 = v7[5] * v209 + v208 * v7[4] + v7[6] * v210; v24 = v319; v25 = v217; v26 = v214; if ( v7[13] < (double)v319 ) { if ( v25 <= 0.0 ) { if ( v214 <= v25 ) v25 = v214; v26 = v25; v27 = 0.0; } else { v27 = 0.0; if ( v26 >= 0.0 ) { v28 = v24 + *(float *)&v229 * v21; v30 = v7[13]; v31 = v30 < v28; v32 = 0; v33 = v30 == v28; LABEL_12: v34 = HIBYTE(v29); v35 = v27; LABEL_13: if ( !__SETP__(v34 & 5, 0) ) return 0; goto LABEL_37; } } v36 = v27; v37 = v24 + v26; v35 = v36; *(float *)&v320 = v37; if ( v7[13] >= (double)*(float *)&v320 ) goto LABEL_37; v38 = *(float *)&v320 + *(float *)&v229 * v21; v40 = v7[13]; v41 = v40 < v38; v42 = 0; v43 = v40 == v38; v34 = HIBYTE(v39); goto LABEL_13; } *(float *)&v321 = -v7[13]; if ( *(float *)&v321 <= v24 ) { v35 = 0.0; goto LABEL_37; } if ( v25 > 0.0 ) { if ( v26 >= v25 ) v25 = v214; v51 = v24 + v25; v52 = *(float *)&v321; *(float *)&v323 = v51; if ( *(float *)&v323 < v52 && *(float *)&v323 + *(float *)&v229 * v21 < v52 ) return 0; v35 = 0.0; } else { v27 = 0.0; v44 = *(float *)&v321; if ( v214 > 0.0 ) { v48 = v24 + v214; v49 = *(float *)&v321; *(float *)&v322 = v48; if ( *(float *)&v322 >= v49 ) { v35 = 0.0; goto LABEL_37; } v50 = *(float *)&v322 + *(float *)&v229 * v21; v31 = v50 < v49; v32 = 0; v33 = v50 == v49; goto LABEL_12; } v45 = v24 + *(float *)&v229 * v21; v46 = v44 < v45; v47 = v44 == v45; v35 = 0.0; if ( !v46 && !v47 ) return 0; } LABEL_37: v324 = v12[1] * v206 + v205 * *v12 + v12[2] * v207; v218 = v202 * *v12 + v12[1] * v203 + v12[2] * v204; v216 = v199 * *v12 + v12[1] * v200 + v12[2] * v11; *(float *)&v230 = v208 * *v12 + v12[1] * v209 + v12[2] * v210; v53 = v324; v54 = v218; if ( v7[14] < (double)v324 ) { v56 = v216; if ( v218 <= v35 ) { if ( v218 < v56 ) v56 = v218; } else if ( v56 >= v35 ) { LABEL_40: v57 = v53 + *(float *)&v230 * v21; v59 = v7[14]; v60 = v59 < v57; v61 = 0; v62 = v59 == v57; v63 = HIBYTE(v58); LABEL_41: if ( !__SETP__(v63 & 5, 0) ) return 0; goto LABEL_46; } v325 = v53 + v56; v53 = v325; if ( v7[14] >= (double)v325 ) goto LABEL_46; goto LABEL_40; } v55 = v216; *(float *)&v327 = -v7[14]; if ( *(float *)&v327 <= v53 ) { v35 = 0.0; goto LABEL_46; } if ( v54 <= 0.0 ) { v71 = *(float *)&v327; if ( v55 > 0.0 ) { *(float *)&v328 = v53 + v55; if ( *(float *)&v328 >= v71 ) { v35 = 0.0; goto LABEL_46; } v78 = *(float *)&v328 + *(float *)&v230 * v21; v79 = v78 < v71; v80 = 0; v81 = v78 == v71; v63 = HIBYTE(v77); v35 = 0.0; } else { v73 = v53 + *(float *)&v230 * v21; v74 = v73 < v71; v75 = 0; v76 = v73 == v71; v63 = HIBYTE(v72); v35 = 0.0; } goto LABEL_41; } v82 = *(float *)&v327; if ( v55 >= v54 ) v54 = v216; *(float *)&v329 = v53 + v54; if ( *(float *)&v329 < v82 && *(float *)&v329 + *(float *)&v230 * v21 < v82 ) return 0; v35 = 0.0; LABEL_46: *(float *)&v326 = v205 * v7[10] + v206 * v7[11] + v207 * v7[12]; v215 = v202 * v7[10] + v203 * v7[11] + v204 * v7[12]; *(float *)&v339 = v199 * v7[10] + v200 * v7[11] + v11 * v7[12]; *(float *)&v231 = v208 * v7[10] + v209 * v7[11] + v210 * v7[12]; v64 = *(float *)&v326; v65 = v215; if ( v7[15] < (double)*(float *)&v326 ) { v66 = *(float *)&v339; if ( v215 <= v35 ) { v68 = v215; if ( v66 <= v215 ) v68 = *(float *)&v339; } else { v67 = v66 < v35; v68 = *(float *)&v339; if ( !v67 ) { v69 = *(float *)&v326; LABEL_50: v70 = v7[15] < v69 + *(float *)&v231 * v21; goto LABEL_51; } } v330 = v68 + v64; v69 = v330; if ( v7[15] >= (double)v330 ) goto LABEL_83; goto LABEL_50; } *(float *)&v331 = -v7[15]; if ( *(float *)&v331 <= v64 ) goto LABEL_83; if ( v65 > 0.0 ) { v83 = *(float *)&v331; if ( *(float *)&v339 >= v65 ) v65 = *(float *)&v339; } else { if ( *(float *)&v339 <= 0.0 ) { v70 = v64 + *(float *)&v231 * v21 < *(float *)&v331; goto LABEL_51; } v65 = *(float *)&v339; v83 = *(float *)&v331; } *(float *)&v332 = v64 + v65; if ( *(float *)&v332 >= v83 ) goto LABEL_83; v70 = *(float *)&v332 + *(float *)&v231 * v21 < v83; LABEL_51: if ( v70 ) return 0; LABEL_83: v196 = v7[5] * v204 - v7[6] * v203; v197 = v202 * v7[6] - v204 * v7[4]; v198 = v203 * v7[4] - v202 * v7[5]; v213 = v197 * v206 + v196 * v205 + v198 * v207; *(float *)&v333 = v197 * v209 + v196 * v208 + v198 * v210; v232 = v7[14] * v215; v233 = fabs(v232); v84 = v233; v234 = v218 * v7[15]; v235 = fabs(v234); *(float *)&v236 = v84 + v235; v85 = v213; v86 = *(float *)&v236; v87 = *(float *)&v333; if ( *(float *)&v236 >= (double)v213 ) { v88 = *(float *)&v333; v238 = -*(float *)&v236; v89 = v238; if ( v238 > v85 ) { if ( *(float *)&v341 > 0.0 ) { *(float *)&v239 = *(float *)&v341 + v85; if ( *(float *)&v239 < v89 && v89 > v88 * v21 + *(float *)&v239 ) return 0; } else if ( v89 > v88 * v21 + v85 ) { return 0; } } } else if ( *(float *)&v341 < 0.0 ) { *(float *)&v237 = *(float *)&v341 + v85; if ( *(float *)&v237 > v86 && v87 * v21 + *(float *)&v237 > v86 ) return 0; } else if ( v87 * v21 + v85 > v86 ) { return 0; } v196 = v7[5] * v11 - v7[6] * v200; v197 = v199 * v7[6] - v11 * v7[4]; v90 = v213; v198 = v200 * v7[4] - v199 * v7[5]; v213 = v197 * v206 + v196 * v205 + v198 * v207; v212 = v197 * v209 + v196 * v208 + v198 * v210; v240 = v7[14] * *(float *)&v339; v241 = fabs(v240); v91 = v241; v242 = v216 * v7[15]; v243 = fabs(v242); *(float *)&v244 = v91 + v243; v92 = v213; v93 = *(float *)&v244; v94 = v212; if ( *(float *)&v244 >= (double)v213 ) { v98 = v212; v247 = -*(float *)&v244; v99 = v247; if ( v247 > v92 ) { *(float *)&v248 = -*(float *)&v341; if ( *(float *)&v248 > 0.0 ) { *(float *)&v249 = *(float *)&v248 + v92; if ( *(float *)&v249 < v99 && *(float *)&v249 + v98 * v21 < v99 ) return 0; } else if ( v98 * v21 + v92 < v99 ) { return 0; } } } else { *(float *)&v245 = -*(float *)&v341; if ( *(float *)&v245 < 0.0 ) { *(float *)&v246 = *(float *)&v245 + v92; if ( *(float *)&v246 <= v93 ) { v98 = v212; goto LABEL_112; } v95 = *(float *)&v246 + v94 * v21; } else { v95 = v94 * v21 + v92; } v96 = v95 < v93; v97 = v95 == v93; v98 = v212; if ( !v96 && !v97 ) return 0; } LABEL_112: v213 = v216 - v218; v100 = v215; v215 = *(float *)&v339 - v215; v212 = v92 - v90; *(float *)&v334 = v98 - *(float *)&v333; v250 = v7[14] * v215; v251 = fabs(v250); v101 = v251; v252 = v213 * v7[15]; v253 = fabs(v252); v254 = v101 + v253; v102 = v212; v103 = v254; if ( v254 >= (double)v212 ) { v257 = -v103; v107 = v257; if ( v257 > v102 ) { *(float *)&v258 = -*(float *)&v341; if ( *(float *)&v258 > 0.0 ) { v108 = v107; v109 = v102 + *(float *)&v258; v110 = v108; *(float *)&v259 = v109; if ( *(float *)&v259 < v108 && *(float *)&v259 + *(float *)&v334 * v21 < v110 ) return 0; } else if ( v107 > v102 + *(float *)&v334 * v21 ) { return 0; } } } else { *(float *)&v255 = -*(float *)&v341; if ( *(float *)&v255 < 0.0 ) { v104 = v103; v105 = v102 + *(float *)&v255; v106 = v104; *(float *)&v256 = v105; if ( *(float *)&v256 > v104 && *(float *)&v256 + *(float *)&v334 * v21 > v106 ) return 0; } else if ( v103 < v102 + *(float *)&v334 * v21 ) { return 0; } } v196 = v12[1] * v204 - v12[2] * v203; v197 = v202 * v12[2] - v204 * *v12; v198 = v203 * *v12 - v202 * v12[1]; *(float *)&v342 = v205 * v196 + v197 * v206 + v198 * v207; *(float *)&v335 = v198 * v210 + v196 * v208 + v197 * v209; v111 = v21; v260 = v100 * v7[13]; v261 = fabs(v260); v112 = v261; v262 = v217 * v7[15]; v263 = fabs(v262); *(float *)&v264 = v112 + v263; v113 = *(float *)&v342; v114 = *(float *)&v264; v115 = *(float *)&v335; if ( *(float *)&v264 < (double)*(float *)&v342 ) { if ( *(float *)&v316 < 0.0 ) { *(float *)&v265 = v113 + *(float *)&v316; if ( *(float *)&v265 <= v114 ) goto LABEL_139; v115 = *(float *)&v335; v113 = *(float *)&v265; } v116 = v113 + v111 * v115; v117 = v116 < v114; v118 = v116 == v114; LABEL_129: if ( !v117 && !v118 ) return 0; goto LABEL_139; } *(float *)&v266 = -*(float *)&v264; if ( *(float *)&v266 <= v113 ) goto LABEL_139; if ( *(float *)&v316 > 0.0 ) { v119 = v113 + *(float *)&v316; v120 = *(float *)&v266; *(float *)&v267 = v119; if ( *(float *)&v267 >= v120 ) goto LABEL_139; v121 = v111 * *(float *)&v335 + *(float *)&v267; v117 = v120 < v121; v118 = v120 == v121; goto LABEL_129; } if ( v113 + v111 * *(float *)&v335 < *(float *)&v266 ) return 0; LABEL_139: v122 = sub_61E8E0(v12, &v199, &v193); v123 = v122[1]; v124 = *v122; v125 = v122[2]; v197 = v123; v196 = v124; v198 = v125; v212 = v205 * v124 + v123 * v206 + v125 * v207; v211 = v125 * v210 + v124 * v208 + v123 * v209; v268 = v7[13] * *(float *)&v339; v269 = fabs(v268); v126 = v269; v270 = v214 * v7[15]; v271 = fabs(v270); *(float *)&v272 = v126 + v271; v127 = v212; v128 = *(float *)&v272; v129 = v211; if ( *(float *)&v272 >= (double)v212 ) { v135 = v211; v275 = -*(float *)&v272; v136 = v275; if ( v275 > v127 ) { *(float *)&v276 = -*(float *)&v316; if ( *(float *)&v276 > 0.0 ) { *(float *)&v277 = *(float *)&v276 + v127; if ( *(float *)&v277 >= v136 ) goto LABEL_155; v137 = a1; v138 = *(float *)&v277 + v135 * a1; } else { v137 = a1; v138 = v135 * a1 + v127; } v139 = v138 < v136; v140 = v137; if ( v139 ) return 0; goto LABEL_156; } LABEL_155: v140 = a1; LABEL_156: v141 = v140; v129 = v135; v134 = v141; goto LABEL_157; } *(float *)&v273 = -*(float *)&v316; if ( *(float *)&v273 >= 0.0 ) { v130 = a1; v131 = v129 * a1 + v127; goto LABEL_142; } *(float *)&v274 = *(float *)&v273 + v127; if ( *(float *)&v274 <= v128 ) { v135 = v211; goto LABEL_155; } v130 = a1; v131 = *(float *)&v274 + v129 * a1; LABEL_142: v132 = v131 < v128; v133 = v131 == v128; v134 = v130; if ( !v132 && !v133 ) return 0; LABEL_157: *(float *)&v340 = v214 - v217; v211 = v127 - *(float *)&v342; v142 = v134; *(float *)&v343 = v129 - *(float *)&v335; v278 = v7[13] * v215; v279 = fabs(v278); v143 = v279; v280 = *(float *)&v340 * v7[15]; v281 = fabs(v280); v282 = v143 + v281; v144 = v211; v145 = v282; if ( v282 >= (double)v211 ) { v285 = -v145; v149 = v285; if ( v285 > v144 ) { *(float *)&v286 = -*(float *)&v316; if ( *(float *)&v286 > 0.0 ) { v150 = v149; v151 = v144 + *(float *)&v286; v152 = v150; *(float *)&v287 = v151; if ( *(float *)&v287 < v150 && v152 > v142 * *(float *)&v343 + *(float *)&v287 ) return 0; } else if ( v144 + v142 * *(float *)&v343 < v149 ) { return 0; } } } else { *(float *)&v283 = -*(float *)&v316; if ( *(float *)&v283 < 0.0 ) { v146 = v145; v147 = v144 + *(float *)&v283; v148 = v146; *(float *)&v284 = v147; if ( *(float *)&v284 > v146 && v148 < v142 * *(float *)&v343 + *(float *)&v284 ) return 0; } else if ( v144 + v142 * *(float *)&v343 > v145 ) { return 0; } } v153 = sub_61E8E0(v7 + 10, &v199, &v190); v154 = v153[1]; v155 = *v153; v156 = v153[2]; v197 = v154; v196 = v155; v198 = v156; *(float *)&v344 = v205 * v155 + v154 * v206 + v156 * v207; *(float *)&v317 = v156 * v210 + v155 * v208 + v154 * v209; v288 = v7[13] * v218; v289 = fabs(v288); v157 = v289; v290 = v7[14] * v217; v291 = fabs(v290); *(float *)&v292 = v157 + v291; v158 = *(float *)&v344; v159 = *(float *)&v292; if ( *(float *)&v292 >= (double)*(float *)&v344 ) { v160 = *(float *)&v317; *(float *)&v294 = -*(float *)&v292; if ( *(float *)&v294 > v158 ) { if ( *(float *)&v338 > 0.0 ) { v161 = v158 + *(float *)&v338; v162 = *(float *)&v294; *(float *)&v295 = v161; if ( *(float *)&v295 < v162 && v160 * a1 + *(float *)&v295 < v162 ) return 0; } else if ( *(float *)&v294 > v158 + v160 * a1 ) { return 0; } } } else if ( *(float *)&v338 < 0.0 ) { *(float *)&v293 = v158 + *(float *)&v338; if ( *(float *)&v293 > v159 && v159 < *(float *)&v317 * a1 + *(float *)&v293 ) return 0; } else if ( v159 < v158 + *(float *)&v317 * a1 ) { return 0; } v163 = sub_61E8E0(v7 + 10, &v199, &v193); v164 = v163[1]; v165 = *v163; v166 = v163[2]; v197 = v164; v196 = v165; v198 = v166; v336 = v205 * v165 + v164 * v206 + v166 * v207; v211 = v166 * v210 + v165 * v208 + v164 * v209; v296 = v7[13] * v216; v297 = fabs(v296); v167 = v297; v298 = v7[14] * v214; v299 = fabs(v298); *(float *)&v300 = v167 + v299; v168 = v336; v169 = *(float *)&v300; v170 = v211; if ( *(float *)&v300 >= (double)v336 ) { v177 = v211; v303 = -*(float *)&v300; v178 = v303; if ( v303 <= v168 ) { v181 = 0.0; v182 = a1; } else { *(float *)&v304 = -*(float *)&v338; if ( *(float *)&v304 <= 0.0 ) { v179 = a1; v180 = v177 * a1 + v168; LABEL_195: if ( v180 < v178 ) return 0; v182 = v179; v181 = 0.0; goto LABEL_203; } *(float *)&v305 = *(float *)&v304 + v168; if ( *(float *)&v305 < v178 ) { v179 = a1; v180 = *(float *)&v305 + v177 * a1; goto LABEL_195; } v181 = 0.0; v182 = a1; } LABEL_203: v176 = v182; v171 = v181; v170 = v211; goto LABEL_204; } *(float *)&v301 = -*(float *)&v338; v171 = 0.0; if ( *(float *)&v301 < 0.0 ) { *(float *)&v302 = *(float *)&v301 + v168; if ( *(float *)&v302 <= v169 ) { v176 = a1; goto LABEL_204; } v172 = a1; v173 = *(float *)&v302 + v170 * a1; } else { v172 = a1; v173 = v170 * a1 + v168; } v174 = v173 < v169; v175 = v173 == v169; v176 = v172; if ( !v174 && !v175 ) return 0; LABEL_204: v183 = v171; v184 = v168 - *(float *)&v344; v185 = v183; v337 = v184; *(float *)&v345 = v170 - *(float *)&v317; v306 = v7[13] * v213; v307 = fabs(v306); v186 = v307; v308 = *(float *)&v340 * v7[14]; v309 = fabs(v308); v310 = v186 + v309; v187 = v337; v188 = v310; if ( v310 >= (double)v337 ) { v313 = -v188; v189 = v313; if ( v313 <= v187 ) return 1; *(float *)&v314 = -*(float *)&v338; if ( *(float *)&v314 > v185 ) { *(float *)&v315 = v187 + *(float *)&v314; if ( *(float *)&v315 < v189 && v176 * *(float *)&v345 + *(float *)&v315 < v189 ) return 0; } else if ( v176 * *(float *)&v345 + v187 < v189 ) { return 0; } } else { *(float *)&v311 = -*(float *)&v338; if ( *(float *)&v311 < v185 ) { *(float *)&v312 = v187 + *(float *)&v311; if ( *(float *)&v312 > v188 && v176 * *(float *)&v345 + *(float *)&v312 > v188 ) return 0; } else if ( v176 * *(float *)&v345 + v187 > v188 ) { return 0; } } return 1; } //----- (0083D5D0) -------------------------------------------------------- char __cdecl sub_83D5D0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { _DWORD *v11; // eax _DWORD *v12; // eax float v13; // ST2C_4 float v14; // ST30_4 double v15; // st7 float v16; // ST34_4 float v17[20]; // [esp+34h] [ebp-54h] sub_84AE80(v17, a2, a4, a1, 0.001, 0.000099999997, 32); sub_8468D0(v17, (float *)a3, (float *)a5); *(float *)a6 = sub_846830(v17); if ( sub_956CD0(v17) != 3 && sub_956CD0(v17) != 2 ) return 0; v11 = (_DWORD *)sub_61F9D0((char *)v17); *(_DWORD *)a7 = *v11; *(_DWORD *)(a7 + 4) = v11[1]; *(_DWORD *)(a7 + 8) = v11[2]; if ( a8 ) { v12 = (_DWORD *)sub_846840((char *)v17); *(_DWORD *)a9 = *v12; *(_DWORD *)(a9 + 4) = v12[1]; *(_DWORD *)(a9 + 8) = v12[2]; v13 = -*(float *)a9; v14 = -*(float *)(a9 + 4); v15 = *(float *)(a9 + 8); *(float *)a10 = v13; *(float *)(a10 + 4) = v14; v16 = -v15; *(float *)(a10 + 8) = v16; } return 1; } //----- (0083D6F0) -------------------------------------------------------- char __cdecl sub_83D6F0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12) { double v12; // st7 double v13; // st7 double v14; // st7 double v15; // st7 float *v16; // ebx double v17; // st7 double v18; // st7 double v19; // st7 double v20; // st6 float v21; // eax signed int v22; // ecx double v23; // st6 double v24; // st5 signed int v25; // edi double v26; // st4 double v27; // st3 double v28; // st6 double v29; // st3 double v30; // st3 double v32; // st6 double v33; // st7 float *v34; // edx double v35; // st5 float v36; // edx float *v37; // eax double v38; // st4 double v39; // st3 double v40; // st4 float *v41; // eax double v42; // st5 double v43; // st5 double v44; // st4 double v45; // rt1 double v46; // st4 double v47; // st5 double v48; // st4 double v49; // st4 float *v50; // edx double v51; // rt1 double v52; // st6 double v53; // st7 double v54; // st6 double v55; // st5 double v56; // st4 double v57; // st4 double v58; // st7 double v59; // st3 double v60; // st7 bool v61; // c0 bool v62; // c3 double v63; // st5 double v64; // st4 double v65; // st3 double v66; // st2 double v67; // st4 double v68; // st2 double v69; // st3 double v70; // st4 double v71; // st3 double v72; // st2 double v73; // st7 double v74; // st6 double v75; // st7 double v76; // st6 double v77; // st5 double v78; // st4 double v79; // st6 double v80; // st4 double v81; // st4 double v82; // st4 double v83; // st3 double v84; // st3 double v85; // st5 double v86; // st4 double v87; // st3 double v88; // st6 double v89; // st7 double v90; // st3 double v91; // st7 double v92; // st6 double v93; // rt2 double v94; // st5 double v95; // st4 double v96; // st3 double v97; // st2 double v98; // st4 double v99; // st2 double v100; // rtt double v101; // st3 double v102; // st4 double v103; // rt1 double v104; // st3 double v105; // st2 double v106; // st6 double v107; // rtt double v108; // st4 double v109; // st7 double v110; // st6 double v111; // st5 double v112; // st4 double v113; // st6 double v114; // st4 double v115; // st4 double v116; // st4 double v117; // st3 double v118; // st3 double v119; // st5 double v120; // st4 double v121; // st3 double v122; // st6 double v123; // st7 double v124; // st3 double v125; // st7 double v126; // st6 double v127; // rtt double v128; // st5 double v129; // st4 double v130; // st3 double v131; // st2 double v132; // st4 double v133; // st2 double v134; // st3 double v135; // st4 double v136; // st3 double v137; // st2 double v138; // st6 double v139; // rtt double v140; // st4 double v141; // st7 double v142; // st6 double v143; // st5 double v144; // st4 double v145; // st6 double v146; // st4 double v147; // st4 double v148; // st4 double v149; // st3 double v150; // st3 float *v151; // eax double v152; // st6 double v153; // st7 float *v154; // eax float *v155; // ecx double v156; // st6 double v157; // st7 double v158; // st5 double v159; // st7 double v160; // st6 float v161; // ecx double v162; // st7 float *v163; // eax float *v164; // eax double v165; // st7 double v166; // st7 double v167; // st7 double v168; // st7 double v169; // st7 float *v170; // eax float v171; // edx float v172; // ecx float v173; // eax double v174; // st7 double v175; // st6 float *v176; // ecx float *v177; // eax float *v178; // edx double v179; // st5 double v180; // st7 float *v181; // eax float v182; // ecx float v183; // edx float v184; // eax double v185; // st7 double v186; // st6 double v187; // st5 float *v188; // ecx float *v189; // eax float *v190; // edx double v191; // st5 float *v192; // eax float v193; // ecx float v194; // edx float v195; // eax float *v196; // eax float v197; // ecx float v198; // edx float v199; // eax float *v200; // eax double v201; // st7 float v202; // ecx float v203; // edx double v204; // st7 float *v205; // eax float v206; // ecx float v207; // edx float v208; // eax double v209; // st7 double v210; // st6 float *v211; // ecx float *v212; // eax float *v213; // edx double v214; // st5 double v215; // st7 float *v216; // eax float v217; // edx float v218; // ecx float v219; // eax double v220; // st7 double v221; // st6 double v222; // st5 float *v223; // ecx float *v224; // eax float *v225; // edx double v226; // st5 double v227; // st7 float *v228; // eax float v229; // edx float v230; // ecx float v231; // eax double v232; // st7 double v233; // st6 double v234; // st5 float *v235; // ecx float *v236; // eax float *v237; // edx double v238; // st5 float *v239; // eax float v240; // ecx float v241; // edx float v242; // eax float *v243; // eax float v244; // ecx float v245; // edx float v246; // eax float *v247; // eax double v248; // st7 float v249; // ecx float v250; // edx double v251; // st7 float *v252; // eax float v253; // ecx float v254; // edx float v255; // eax double v256; // st7 float *v257; // eax float v258; // edx float v259; // ecx float v260; // eax double v261; // st7 double v262; // st6 double v263; // st6 double v264; // st5 double v265; // st7 double v266; // rt1 float *v267; // ecx float *v268; // eax float *v269; // edx double v270; // st5 double v271; // st7 float *v272; // eax float v273; // edx float v274; // ecx float v275; // eax double v276; // st5 float *v277; // eax float v278; // ecx float v279; // edx float v280; // eax float *v281; // eax float v282; // ecx float v283; // edx float v284; // eax float *v285; // eax double v286; // st7 float v287; // ecx float v288; // edx double v289; // st7 float *v290; // eax float v291; // ecx float v292; // edx float v293; // eax float v294; // edx float v295; // eax float v296; // edx double v297; // st7 float v298; // [esp+18h] [ebp-134h] float v299; // [esp+1Ch] [ebp-130h] float v300; // [esp+20h] [ebp-12Ch] float v301; // [esp+28h] [ebp-124h] float v302; // [esp+2Ch] [ebp-120h] float v303; // [esp+30h] [ebp-11Ch] float *v304; // [esp+34h] [ebp-118h] float v305; // [esp+38h] [ebp-114h] float v306; // [esp+3Ch] [ebp-110h] float v307; // [esp+40h] [ebp-10Ch] float v308; // [esp+44h] [ebp-108h] float v309; // [esp+48h] [ebp-104h] float v310; // [esp+4Ch] [ebp-100h] float v311; // [esp+50h] [ebp-FCh] float v312; // [esp+54h] [ebp-F8h] float v313; // [esp+58h] [ebp-F4h] float v314; // [esp+5Ch] [ebp-F0h] float v315; // [esp+60h] [ebp-ECh] float v316; // [esp+64h] [ebp-E8h] float v317; // [esp+68h] [ebp-E4h] float v318; // [esp+6Ch] [ebp-E0h] float v319; // [esp+70h] [ebp-DCh] float v320; // [esp+74h] [ebp-D8h] float v321; // [esp+78h] [ebp-D4h] float v322; // [esp+7Ch] [ebp-D0h] float *v323; // [esp+80h] [ebp-CCh] float v324; // [esp+84h] [ebp-C8h] float v325; // [esp+88h] [ebp-C4h] float v326; // [esp+8Ch] [ebp-C0h] float *v327; // [esp+90h] [ebp-BCh] float v328; // [esp+94h] [ebp-B8h] float v329; // [esp+98h] [ebp-B4h] float v330; // [esp+9Ch] [ebp-B0h] float v331; // [esp+A0h] [ebp-ACh] float v332; // [esp+A4h] [ebp-A8h] float v333; // [esp+A8h] [ebp-A4h] float v334; // [esp+ACh] [ebp-A0h] float v335; // [esp+B0h] [ebp-9Ch] float v336; // [esp+B4h] [ebp-98h] float v337; // [esp+B8h] [ebp-94h] float v338; // [esp+BCh] [ebp-90h] float v339; // [esp+C0h] [ebp-8Ch] float v340; // [esp+C4h] [ebp-88h] float *v341; // [esp+C8h] [ebp-84h] float v342; // [esp+CCh] [ebp-80h] float v343; // [esp+D0h] [ebp-7Ch] float v344; // [esp+D4h] [ebp-78h] float v345; // [esp+D8h] [ebp-74h] float v346; // [esp+DCh] [ebp-70h] int v347; // [esp+E0h] [ebp-6Ch] float v348; // [esp+E4h] [ebp-68h] float v349; // [esp+E8h] [ebp-64h] float v350; // [esp+ECh] [ebp-60h] float v351; // [esp+F0h] [ebp-5Ch] float v352; // [esp+F4h] [ebp-58h] float v353; // [esp+F8h] [ebp-54h] float v354; // [esp+FCh] [ebp-50h] float v355; // [esp+100h] [ebp-4Ch] float v356; // [esp+104h] [ebp-48h] float v357; // [esp+108h] [ebp-44h] float v358; // [esp+10Ch] [ebp-40h] float v359; // [esp+110h] [ebp-3Ch] float v360; // [esp+114h] [ebp-38h] float v361; // [esp+118h] [ebp-34h] float v362; // [esp+11Ch] [ebp-30h] float v363; // [esp+120h] [ebp-2Ch] float v364; // [esp+124h] [ebp-28h] float v365; // [esp+128h] [ebp-24h] float v366; // [esp+12Ch] [ebp-20h] float v367; // [esp+130h] [ebp-1Ch] float v368; // [esp+134h] [ebp-18h] float v369; // [esp+138h] [ebp-14h] float v370; // [esp+13Ch] [ebp-10h] float v371; // [esp+140h] [ebp-Ch] float v372; // [esp+144h] [ebp-8h] v12 = *(float *)a7; v304 = (float *)a7; v323 = (float *)a3; v335 = v12 - *(float *)a3; v13 = *(float *)(a7 + 4) - *(float *)(a3 + 4); v349 = *(float *)&a6; v336 = v13; v14 = *(float *)(a7 + 8) - *(float *)(a3 + 8); v327 = (float *)a9; v337 = v14; v15 = *(float *)a5 - *(float *)a4; v341 = (float *)a2; v344 = v15; v16 = (float *)(a2 + 16); v345 = *(float *)(a5 + 4) - *(float *)(a4 + 4); v17 = *(float *)(a5 + 8) - *(float *)(a4 + 8); v361 = v344; v362 = v345; v346 = v17; v363 = v346; v331 = *(float *)a6 - *(float *)a4; v332 = *(float *)(a6 + 4) - *(float *)(a4 + 4); v18 = *(float *)(a6 + 8) - *(float *)(a4 + 8); v364 = v331; v365 = v332; v333 = v18; v366 = v333; v313 = v333 * v345 - v332 * v346; v314 = v346 * v331 - v333 * v344; v19 = v345; v315 = v344 * v332 - v331 * v345; v320 = *(float *)a4 - *(float *)(a2 + 4); v321 = *(float *)(a4 + 4) - *(float *)(a2 + 8); v20 = *(float *)(a4 + 8) - *(float *)(a2 + 12); v338 = v320; v339 = v321; v322 = v20; v21 = v322; v22 = 0; *(float *)a8 = 0.0; v340 = v21; v23 = *(float *)(a2 + 16); v347 = 0; v24 = v313; *(float *)&v25 = 0.0; v26 = v314; v27 = v23 * v313 + v314 * *(float *)(a2 + 20) + v315 * *(float *)(a2 + 24); v28 = v315; v324 = v27; v325 = v314 * *(float *)(a2 + 32) + v313 * *(float *)(a2 + 28) + v315 * *(float *)(a2 + 36); v326 = v314 * *(float *)(a2 + 44) + v313 * *(float *)(a2 + 40) + v315 * *(float *)(a2 + 48); v342 = fabs(v325); v29 = v342 * *(float *)(a2 + 56); v342 = fabs(v324); v30 = v29 + v342 * *(float *)(a2 + 52); v342 = fabs(v326); v348 = v30 + v342 * *(float *)(a2 + 60); v342 = v321 * v314 + v320 * v313 + v322 * v315; if ( v348 >= (double)v342 ) { v33 = v348; v348 = -v348; if ( v348 <= (double)v342 ) { v19 = v345; v32 = a1; } else { v343 = v28 * v337 + v24 * v335 + v26 * v336; if ( v343 * a1 + v342 < v348 ) return 0; v343 = -((v33 + v342) / v343); if ( v343 > 0.0 ) { *(float *)a8 = v343; v22 = 1; *(float *)&v25 = -6.8056469e38/*NaN*/; } v32 = a1; v19 = v345; } } else { v343 = v28 * v337 + v24 * v335 + v26 * v336; if ( v343 * a1 + v342 > v348 ) return 0; v32 = a1; v343 = (v348 - v342) / v343; if ( v343 > 0.0 ) { v22 = 1; *(float *)a8 = v343; v25 = 1; } } v334 = COERCE_FLOAT(&v353); LODWORD(v343) = a2 + 24; LODWORD(v351) = a2 + 52; v34 = (float *)(a2 + 24); LODWORD(v350) = 2; LODWORD(v312) = (char *)&v370 - a2 - 52; do { v342 = v321 * *(v34 - 1) + v320 * *(v34 - 2) + v322 * *v34; v35 = v342; *(float *)(LODWORD(v351) + LODWORD(v312)) = v342; v36 = v343; v37 = (float *)LODWORD(v334); v342 = v19 * *(float *)(LODWORD(v343) - 4) + v344 * *(float *)(LODWORD(v343) - 8) + v346 * *(float *)LODWORD(v343); v38 = v342; *(float *)(LODWORD(v334) - 4) = v342; v342 = v332 * *(float *)(LODWORD(v36) - 4) + v331 * *(float *)(LODWORD(v36) - 8) + v333 * *(float *)LODWORD(v36); v39 = v342; *v37 = v342; v348 = v336 * *(float *)(LODWORD(v36) - 4) + v335 * *(float *)(LODWORD(v36) - 8) + v337 * *(float *)LODWORD(v36); if ( *(float *)LODWORD(v351) >= v35 ) { v342 = -*(float *)LODWORD(v351); if ( v342 <= v35 ) goto LABEL_47; if ( v38 <= 0.0 ) { v44 = v342; if ( v39 <= 0.0 ) { if ( v348 * v32 + v35 < v44 ) return 0; v348 = -((v35 + *(float *)LODWORD(v351)) / v348); if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v347 = 0; *(float *)&v25 = -6.8056469e38/*NaN*/; } goto LABEL_47; } goto LABEL_39; } if ( v39 >= v38 ) { v44 = v342; LABEL_39: v45 = v44; v46 = v35 + v39; v47 = v45; v343 = v46; v48 = v343; if ( v343 < v45 ) { if ( v348 * v32 + v48 < v47 ) return 0; v348 = -((v48 + *(float *)LODWORD(v351)) / v348); if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v347 = 2; *(float *)&v25 = -6.8056469e38/*NaN*/; } } goto LABEL_47; } v343 = v35 + v38; v49 = v343; if ( v343 < (double)v342 ) { if ( v348 * v32 + v49 < v342 ) return 0; v348 = -((v49 + *(float *)LODWORD(v351)) / v348); if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v347 = 1; *(float *)&v25 = -6.8056469e38/*NaN*/; } } } else { if ( v38 > 0.0 ) { v40 = v39; v41 = (float *)LODWORD(v351); if ( v39 >= 0.0 ) { if ( *(float *)LODWORD(v351) < v348 * v32 + v35 ) return 0; v348 = (*(float *)LODWORD(v351) - v35) / v348; if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v347 = 0; v25 = 1; } goto LABEL_47; } goto LABEL_23; } v41 = (float *)LODWORD(v351); if ( v39 <= v38 ) { v40 = v39; LABEL_23: v343 = v35 + v40; v42 = v343; if ( *v41 < (double)v343 ) { if ( *(float *)LODWORD(v351) < v348 * v32 + v42 ) return 0; v348 = (*(float *)LODWORD(v351) - v42) / v348; if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v347 = 2; v25 = 1; } } goto LABEL_47; } v343 = v35 + v38; v43 = v343; if ( *(float *)LODWORD(v351) < (double)v343 ) { if ( *(float *)LODWORD(v351) < v348 * v32 + v43 ) return 0; v348 = (*(float *)LODWORD(v351) - v43) / v348; if ( *(float *)a8 < (double)v348 ) { v22 = LODWORD(v350); *(float *)a8 = v348; v25 = 1; v347 = 1; } } } LABEL_47: LODWORD(v334) += 12; LODWORD(v351) += 4; ++LODWORD(v350); v34 = (float *)(LODWORD(v36) + 12); v343 = *(float *)&v34; } while ( LODWORD(v350) - 2 < 3 ); v50 = v341; v351 = *(float *)&v25; v298 = v346 * *(float *)(a2 + 20) - v19 * *(float *)(a2 + 24); v299 = v344 * *(float *)(a2 + 24) - v346 * *(float *)(a2 + 16); v51 = v32; v52 = v19 * *(float *)(a2 + 16) - v344 * *(float *)(a2 + 20); v53 = v51; v300 = v52; v342 = v298 * v320 + v299 * v321 + v300 * v322; v334 = v298 * v335 + v299 * v336 + v300 * v337; v306 = fabs(v355); v307 = fabs(v358); v348 = v341[14] * v307 + v306 * v341[15]; v54 = v342; v55 = v348; v56 = v334; if ( v348 >= (double)v342 ) { v348 = -v55; v59 = v348; if ( v348 > v54 ) { if ( v324 > 0.0 ) { v342 = v324 + v54; if ( v342 >= v59 ) { v58 = v334; goto LABEL_69; } if ( v53 * v56 + v342 < v59 ) return 0; v58 = v334; v350 = -((v55 + v342) / v334); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 5; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } else { v60 = v53 * v56 + v54; v61 = v59 < v60; v62 = v59 == v60; v58 = v334; if ( !v61 && !v62 ) return 0; v350 = -((v55 + v54) / v56); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 5; v347 = 0; v351 = -6.8056469e38/*NaN*/; } } goto LABEL_69; } LABEL_67: v58 = v334; goto LABEL_69; } if ( v324 < 0.0 ) { v342 = v324 + v54; if ( v342 > v55 ) { if ( v53 * v56 + v342 > v55 ) return 0; v58 = v334; v350 = (v55 - v342) / v56; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 5; v347 = 1; LODWORD(v351) = 1; } LABEL_69: v328 = v333 * *(float *)(a2 + 20) - v332 * *(float *)(a2 + 24); v329 = v331 * *(float *)(a2 + 24) - v333 * *(float *)(a2 + 16); v330 = v332 * *(float *)(a2 + 16) - v331 * *(float *)(a2 + 20); v342 = v328 * v320 + v329 * v321 + v330 * v322; v319 = v328 * v335 + v329 * v336 + v330 * v337; v312 = fabs(v356); v308 = fabs(v359); v348 = v312 * v50[15] + v50[14] * v308; v63 = v342; v64 = v348; v65 = v319; if ( v348 >= (double)v342 ) { v348 = -v64; if ( v348 > v63 ) { v350 = -v324; if ( v350 > 0.0 ) { v342 = v350 + v63; v72 = v342; if ( v342 >= (double)v348 ) { v73 = v319; } else { if ( v65 * a1 + v72 < v348 ) return 0; v73 = v319; v350 = -((v64 + v72) / v319); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 6; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } v67 = a1; v65 = v73; v58 = v334; LABEL_91: v357 = v356 - v355; v360 = v359 - v358; v319 = v63 - v54; v74 = v65 - v58; v75 = v67; v343 = v74; v305 = fabs(v360); v342 = fabs(v357); v348 = v342 * v50[15] + v50[14] * v305; v76 = v319; v77 = v348; if ( v348 >= (double)v319 ) { v348 = -v77; v82 = v348; if ( v348 <= v76 ) { v79 = 0.0; } else { v350 = -v324; if ( v350 > 0.0 ) { v83 = v76 + v350; v79 = 0.0; v319 = v83; v84 = v319; if ( v319 < v82 ) { if ( v343 * v75 + v84 < v82 ) return 0; v350 = -((v77 + v84) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 7; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } } else { if ( v343 * v75 + v76 < v82 ) return 0; v79 = 0.0; v350 = -((v77 + v319) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 7; v347 = 0; v351 = -6.8056469e38/*NaN*/; } } } } else { v350 = -v324; if ( v350 < 0.0 ) { v80 = v76 + v350; v79 = 0.0; v319 = v80; v81 = v319; if ( v319 > v77 ) { if ( v343 * v75 + v81 > v77 ) return 0; v350 = (v77 - v81) / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 7; v347 = 1; LODWORD(v351) = 1; } } } else { if ( v343 * v67 + v76 > v77 ) return 0; v78 = v77 - v76; v79 = 0.0; v350 = v78 / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 7; v347 = 0; LODWORD(v351) = 1; } } } v316 = v346 * *(float *)(a2 + 32) - v345 * *(float *)(a2 + 36); v317 = v344 * *(float *)(a2 + 36) - v346 * *(float *)(a2 + 28); v318 = v345 * *(float *)(a2 + 28) - v344 * *(float *)(a2 + 32); v343 = v316 * v320 + v317 * v321 + v318 * v322; v334 = v316 * v335 + v317 * v336 + v318 * v337; v319 = fabs(v352); v348 = v319 * v50[15] + v307 * v50[13]; v85 = v343; v86 = v348; v87 = v334; if ( v348 >= (double)v343 ) { v348 = -v86; if ( v348 <= v85 ) { v88 = v334; v89 = v343; } else if ( v325 > v79 ) { v307 = v325 + v85; if ( v307 >= (double)v348 ) { v88 = v334; v89 = v343; } else { v88 = v334; if ( v75 * v87 + v307 < v348 ) return 0; v89 = v343; v350 = -((v307 + v86) / v87); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 8; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } } else { v90 = v75 * v87 + v85; v91 = v334; if ( v90 < v348 ) return 0; v92 = v343; v350 = -((v86 + v85) / v91); if ( *(float *)a8 >= (double)v350 ) { v88 = v334; v89 = v343; } else { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 8; v93 = v92; v88 = v91; v89 = v93; v347 = 0; v351 = -6.8056469e38/*NaN*/; } } } else if ( v325 < v79 ) { v88 = v334; v307 = v325 + v85; if ( v307 <= v86 ) { v89 = v343; } else { if ( v75 * v88 + v307 > v86 ) return 0; v89 = v343; v350 = (v86 - v307) / v88; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 8; v347 = 1; LODWORD(v351) = 1; } } } else { v88 = v334; if ( v86 < v75 * v87 + v85 ) return 0; v89 = v343; v350 = (v86 - v85) / v88; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 8; v347 = 0; LODWORD(v351) = 1; } } v370 = v333 * *(float *)(a2 + 32) - v332 * *(float *)(a2 + 36); v371 = v331 * *(float *)(a2 + 36) - v333 * *(float *)(a2 + 28); v372 = v332 * *(float *)(a2 + 28) - v331 * *(float *)(a2 + 32); v343 = v320 * v370 + v371 * v321 + v372 * v322; v350 = v371 * v336 + v370 * v335 + v372 * v337; v307 = fabs(v353); v348 = v307 * v50[15] + v308 * v50[13]; v94 = v343; v95 = v348; v96 = v350; if ( v348 >= (double)v343 ) { v348 = -v95; if ( v348 > v94 ) { v350 = -v325; if ( v350 > 0.0 ) { v308 = v350 + v94; v105 = v308; if ( v308 >= (double)v348 ) { v106 = v96; } else { if ( v96 * a1 + v105 < v348 ) return 0; v106 = v96; v350 = -((v95 + v105) / v96); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 9; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } v98 = a1; v96 = v106; v88 = v334; goto LABEL_163; } if ( v96 * a1 + v94 < v348 ) return 0; v103 = v96; v104 = (v95 + v94) / v96; v102 = v103; v350 = -v104; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; *(float *)&v25 = -6.8056469e38/*NaN*/; v22 = 9; v347 = 0; v96 = v102; v98 = a1; v351 = -6.8056469e38/*NaN*/; goto LABEL_163; } LABEL_172: v96 = v102; v98 = a1; goto LABEL_163; } } else { v350 = -v325; if ( v350 >= 0.0 ) { if ( v96 * a1 + v94 > v95 ) return 0; v97 = (v95 - v94) / v96; v98 = a1; v350 = v97; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 9; v347 = 0; LODWORD(v351) = 1; } goto LABEL_163; } v308 = v350 + v94; v99 = v308; if ( v308 > v95 ) { if ( v96 * a1 + v99 > v95 ) return 0; v100 = v96; v101 = (v95 - v99) / v96; v102 = v100; v350 = v101; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; v25 = 1; v22 = 9; v347 = 1; v96 = v102; v98 = a1; LODWORD(v351) = 1; LABEL_163: v354 = v353 - v352; v107 = v98; v108 = v94 - v89; v109 = v107; v334 = v108; v343 = v96 - v88; v308 = fabs(v354); v348 = v308 * v50[15] + v305 * v50[13]; v110 = v334; v111 = v348; if ( v348 >= (double)v334 ) { v348 = -v111; v116 = v348; if ( v348 <= v110 ) { v113 = 0.0; } else { v350 = -v325; if ( v350 > 0.0 ) { v117 = v110 + v350; v113 = 0.0; v305 = v117; v118 = v305; if ( v305 < v116 ) { if ( v343 * v109 + v118 < v116 ) return 0; v350 = -((v111 + v118) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 10; v347 = 1; v351 = -6.8056469e38/*NaN*/; } } } else { if ( v343 * v109 + v110 < v116 ) return 0; v113 = 0.0; v350 = -((v111 + v334) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 10; v347 = 0; v351 = -6.8056469e38/*NaN*/; } } } } else { v350 = -v325; if ( v350 < 0.0 ) { v114 = v110 + v350; v113 = 0.0; v305 = v114; v115 = v305; if ( v305 > v111 ) { if ( v343 * v109 + v115 > v111 ) return 0; v350 = (v111 - v115) / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 10; v347 = 1; LODWORD(v351) = 1; } } } else { if ( v343 * v109 + v110 > v111 ) return 0; v112 = v111 - v110; v113 = 0.0; v350 = v112 / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 10; v347 = 0; LODWORD(v351) = 1; } } } v309 = v346 * *(float *)(a2 + 44) - v345 * *(float *)(a2 + 48); v310 = v344 * *(float *)(a2 + 48) - v346 * *(float *)(a2 + 40); v311 = v345 * *(float *)(a2 + 40) - v344 * *(float *)(a2 + 44); v305 = v320 * v309 + v310 * v321 + v311 * v322; v334 = v310 * v336 + v309 * v335 + v311 * v337; v348 = v50[14] * v319 + v306 * v50[13]; v119 = v305; v120 = v348; v121 = v334; if ( v348 < (double)v305 ) { if ( v326 >= v113 ) { v122 = v334; if ( v120 >= v109 * v121 + v119 ) { v123 = v305; v350 = (v120 - v119) / v122; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 11; v347 = 0; LODWORD(v351) = 1; } goto LABEL_209; } return 0; } v122 = v334; v306 = v326 + v119; if ( v306 > v120 ) { if ( v109 * v122 + v306 <= v120 ) { v123 = v305; v350 = (v120 - v306) / v122; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 11; v347 = 1; LODWORD(v351) = 1; } goto LABEL_209; } return 0; } v123 = v305; LABEL_209: v301 = v333 * *(float *)(a2 + 44) - v332 * *(float *)(a2 + 48); v302 = v331 * *(float *)(a2 + 48) - v333 * *(float *)(a2 + 40); v303 = v332 * *(float *)(a2 + 40) - v331 * *(float *)(a2 + 44); v306 = v320 * v301 + v302 * v321 + v303 * v322; v319 = v302 * v336 + v301 * v335 + v303 * v337; v348 = v307 * v50[14] + v312 * v50[13]; v128 = v306; v129 = v348; v130 = v319; if ( v348 < (double)v306 ) { v350 = -v326; if ( v350 >= 0.0 ) { if ( v130 * a1 + v128 > v129 ) return 0; v131 = (v129 - v128) / v130; v132 = 0.0; v350 = v131; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 12; v347 = 0; LODWORD(v351) = 1; } goto LABEL_228; } v312 = v350 + v128; v133 = v312; if ( v312 > v129 ) { if ( v130 * a1 + v133 > v129 ) return 0; v134 = (v129 - v133) / v130; v135 = v319; v350 = v134; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; v25 = 1; v22 = 12; v347 = 1; v130 = v135; v132 = 0.0; LODWORD(v351) = 1; LABEL_228: v139 = v132; v140 = v128 - v123; v141 = v139; v312 = v140; v343 = v130 - v122; v348 = v308 * v50[14] + v342 * v50[13]; v142 = v312; v143 = v348; if ( v348 < (double)v312 ) { v350 = -v326; if ( v350 >= v141 ) { if ( v343 * a1 + v142 > v143 ) return 0; v144 = v143 - v142; v145 = v326; v350 = v144 / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 13; v347 = 0; LODWORD(v351) = 1; } goto LABEL_252; } v146 = v142 + v350; v145 = v326; v342 = v146; v147 = v342; if ( v342 > v143 ) { if ( v343 * a1 + v147 <= v143 ) { v350 = (v143 - v147) / v343; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 13; v347 = 1; LODWORD(v351) = 1; } goto LABEL_252; } return 0; } LABEL_252: switch ( v22 ) { case 0: v370 = *(float *)a5 + *(float *)a4; v371 = *(float *)(a5 + 4) + *(float *)(a4 + 4); v372 = *(float *)(a5 + 8) + *(float *)(a4 + 8); v328 = v370 + *(float *)LODWORD(v349); v329 = v371 + *(float *)(LODWORD(v349) + 4); v330 = v372 + *(float *)(LODWORD(v349) + 8); v370 = v328 * flt_ABD074; v371 = v329 * flt_ABD074; v372 = flt_ABD074 * v330; v328 = v50[1] + v370; v329 = v50[2] + v371; v151 = v327; v330 = v50[3] + v372; v370 = v328 * 0.5; v152 = v329; *v327 = v370; v371 = v152 * 0.5; v151[1] = v371; v372 = 0.5 * v330; v151[2] = v372; goto LABEL_402; case 1: if ( v324 <= v141 ) { if ( v324 >= v141 ) { v344 = v141; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v50[13]; } } else { v344 = (double)SLODWORD(v351) * v50[13]; } if ( v325 <= v141 ) { if ( v325 >= v141 ) { v345 = v141; } else { LODWORD(v349) = -v25; v345 = (double)-v25 * v50[14]; } } else { v345 = (double)SLODWORD(v351) * v50[14]; } if ( v145 <= v141 ) { if ( v145 >= v141 ) goto LABEL_269; LODWORD(v349) = -v25; v153 = (double)-v25; } else { v153 = (double)SLODWORD(v351); } v141 = v153 * v50[15]; LABEL_269: v346 = v141; v154 = v323; v155 = v327; v156 = v344; v157 = v345; v158 = v346; *v327 = *(float *)(a2 + 40) * v346 + *(float *)(a2 + 28) * v345 + *v323 * *(float *)a8 + v50[1] + v344 * *(float *)(a2 + 16); v155[1] = v154[1] * *(float *)a8 + v50[2] + *(float *)(a2 + 20) * v156 + *(float *)(a2 + 32) * v157 + *(float *)(a2 + 44) * v158; v155[2] = v157 * *(float *)(a2 + 36) + v156 * *(float *)(a2 + 24) + *(float *)a8 * v154[2] + v50[3] + v158 * *(float *)(a2 + 48); goto LABEL_402; case 2: case 3: case 4: v349 = *(float *)a8; v159 = v349; v160 = v349; if ( v347 ) { v370 = v160 * *v304; v371 = v304[1] * v159; v372 = v159 * v304[2]; v328 = v370 + *(float *)a4; v329 = v371 + *(float *)(a4 + 4); v164 = v327; v330 = v372 + *(float *)(a4 + 8); if ( v347 == 1 ) { v370 = v344 + v328; v165 = v329; *v327 = v370; v371 = v165 + v345; v166 = v330; v164[1] = v371; v372 = v166 + v346; } else { v370 = v331 + v328; v167 = v329; *v327 = v370; v371 = v167 + v332; v168 = v330; v164[1] = v371; v372 = v168 + v333; } v164[2] = v372; } else { v370 = v160 * *v304; v371 = v304[1] * v159; v372 = v159 * v304[2]; v328 = v370 + *(float *)a4; v329 = v371 + *(float *)(a4 + 4); v161 = v329; v162 = v372 + *(float *)(a4 + 8); v163 = v327; *v327 = v328; v163[1] = v161; v330 = v162; v163[2] = v330; } goto LABEL_402; case 5: if ( v358 <= v141 ) { if ( v358 >= v141 ) v345 = v141; else v345 = (double)SLODWORD(v351) * v50[14]; } else { LODWORD(v349) = -v25; v345 = (double)-v25 * v50[14]; } if ( v355 <= v141 ) { if ( v355 >= v141 ) goto LABEL_286; LODWORD(v349) = -v25; v169 = (double)-v25; } else { v169 = (double)SLODWORD(v351); } v141 = v169 * v50[15]; LABEL_286: v346 = v141; v349 = *(float *)a8; v370 = v335 * v349; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v170 = sub_61E8E0(&v338, &v370, &v361); v171 = v170[1]; v172 = *v170; v173 = v170[2]; v353 = v171; v352 = v172; v354 = v173; v361 = v300 * v300 + v299 * v299 + v298 * v298; v364 = v316 * v298 + v317 * v299 + v318 * v300; v367 = v310 * v299 + v298 * v309 + v311 * v300; v349 = v171 * v299 + v298 * v172 + v173 * v300; v351 = v349 - v345 * v364 - v346 * v367; if ( v347 ) { v349 = v300 * v315 + v299 * v314 + v298 * v313; v344 = (v351 - v349) / v361; v175 = v345; v174 = v346; } else { v174 = v346; v175 = v345; v344 = v351 / v361; } v176 = v323; v177 = v341; v178 = v327; v179 = v344; *v327 = *v323 * *(float *)a8 + v341[1] + v344 * *(float *)(a2 + 16) + *(float *)(a2 + 28) * v175 + *(float *)(a2 + 40) * v174; v178[1] = v176[1] * *(float *)a8 + v177[2] + *(float *)(a2 + 20) * v179 + *(float *)(a2 + 32) * v175 + *(float *)(a2 + 44) * v174; v178[2] = v174 * *(float *)(a2 + 48) + v175 * *(float *)(a2 + 36) + v179 * *(float *)(a2 + 24) + *(float *)a8 * v176[2] + v177[3]; goto LABEL_402; case 6: if ( v359 <= v141 ) { if ( v359 >= v141 ) v345 = v141; else v345 = (double)SLODWORD(v351) * v50[14]; } else { LODWORD(v349) = -v25; v345 = (double)-v25 * v50[14]; } if ( v356 <= v141 ) { if ( v356 >= v141 ) goto LABEL_300; LODWORD(v349) = -v25; v180 = (double)-v25; } else { v180 = (double)SLODWORD(v351); } v141 = v180 * v50[15]; LABEL_300: v346 = v141; v349 = *(float *)a8; v316 = v335 * v349; v317 = v336 * v349; v318 = v349 * v337; v338 = v320 + v316; v339 = v317 + v339; v340 = v318 + v340; v181 = sub_61E8E0(&v338, &v316, &v364); v182 = *v181; v183 = v181[1]; v184 = v181[2]; v355 = v182; v356 = v183; v357 = v184; v362 = v330 * v330 + v328 * v328 + v329 * v329; v365 = v371 * v329 + v328 * v370 + v372 * v330; v368 = v302 * v329 + v328 * v301 + v303 * v330; v349 = v328 * v182 + v183 * v329 + v184 * v330; v351 = v349 - v345 * v365 - v346 * v368; if ( v347 ) { v185 = v345; v186 = v346; v349 = v330 * v315 + v329 * v314 + v328 * v313; v187 = v349 + v351; } else { v185 = v345; v186 = v346; v187 = v351; } v188 = v323; v189 = v341; v190 = v327; v344 = v187 / v362; v191 = v344; *v327 = *v323 * *(float *)a8 + v341[1] + v344 * *(float *)(a2 + 16) + *(float *)(a2 + 28) * v185 + *(float *)(a2 + 40) * v186; v190[1] = v188[1] * *(float *)a8 + v189[2] + *(float *)(a2 + 20) * v191 + *(float *)(a2 + 32) * v185 + *(float *)(a2 + 44) * v186; v190[2] = v185 * *(float *)(a2 + 36) + v191 * *(float *)(a2 + 24) + *(float *)a8 * v188[2] + v189[3] + v186 * *(float *)(a2 + 48); goto LABEL_402; case 7: v370 = v331 - v344; v367 = v370; v371 = v332 - v345; v368 = v371; v372 = v333 - v346; v369 = v372; v192 = sub_61E8E0(v16, &v328, &v367); v193 = *v192; v194 = v192[1]; v195 = v192[2]; v331 = v193; v332 = v194; v333 = v195; v196 = sub_61E8E0((float *)(a2 + 28), &v301, &v367); v197 = *v196; v198 = v196[1]; v199 = v196[2]; v309 = v197; v310 = v198; v311 = v199; v200 = sub_61E8E0((float *)(a2 + 40), &v316, &v367); v201 = 0.0; v202 = *v200; v203 = v200[1]; v326 = v200[2]; v324 = v202; v325 = v203; if ( v360 <= 0.0 ) { if ( v360 >= 0.0 ) v345 = 0.0; else v345 = (double)SLODWORD(v351) * v341[14]; } else { LODWORD(v349) = -v25; v345 = (double)-v25 * v341[14]; } if ( v357 <= 0.0 ) { if ( v357 >= 0.0 ) goto LABEL_314; LODWORD(v349) = -v25; v204 = (double)-v25; } else { v204 = (double)SLODWORD(v351); } v201 = v204 * v341[15]; LABEL_314: v346 = v201; v349 = *(float *)a8; v370 = v335 * v349; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v205 = sub_61E8E0(&v338, &v370, &v367); v206 = *v205; v207 = v205[1]; v208 = v205[2]; v358 = v206; v359 = v207; v360 = v208; v363 = v333 * v333 + v332 * v332 + v331 * v331; v366 = v310 * v332 + v309 * v331 + v311 * v333; v369 = v325 * v332 + v324 * v331 + v326 * v333; v349 = v206 * v331 + v207 * v332 + v333 * v208; v351 = v349 - v345 * v366 - v346 * v369; if ( v347 ) { v349 = v333 * v315 + v332 * v314 + v331 * v313; v344 = (v349 + v351) / v363; v210 = v346; v209 = v345; } else { v209 = v345; v210 = v346; v344 = v351 / v363; } v211 = v323; v212 = v341; v213 = v327; v214 = v344; *v327 = *v323 * *(float *)a8 + v341[1] + v344 * *(float *)(a2 + 16) + *(float *)(a2 + 28) * v209 + *(float *)(a2 + 40) * v210; v213[1] = v211[1] * *(float *)a8 + v212[2] + *(float *)(a2 + 20) * v214 + *(float *)(a2 + 32) * v209 + *(float *)(a2 + 44) * v210; v213[2] = v209 * *(float *)(a2 + 36) + v214 * *(float *)(a2 + 24) + *(float *)a8 * v211[2] + v212[3] + v210 * *(float *)(a2 + 48); goto LABEL_402; case 8: if ( v358 <= v141 ) { if ( v358 >= v141 ) { v344 = v141; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v50[13]; } } else { v344 = (double)SLODWORD(v351) * v50[13]; } if ( v352 <= v141 ) { if ( v352 >= v141 ) goto LABEL_328; v215 = (double)SLODWORD(v351); } else { LODWORD(v349) = -v25; v215 = (double)-v25; } v141 = v215 * v50[15]; LABEL_328: v346 = v141; v349 = *(float *)a8; v370 = v335 * v349; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v216 = sub_61E8E0(&v338, &v370, &v361); v217 = v216[1]; v218 = *v216; v219 = v216[2]; v353 = v217; v352 = v218; v354 = v219; v361 = v316 * v298 + v317 * v299 + v318 * v300; v364 = v316 * v316 + v317 * v317 + v318 * v318; v367 = v310 * v317 + v316 * v309 + v311 * v318; v349 = v217 * v317 + v316 * v218 + v219 * v318; v351 = v349 - v344 * v361 - v346 * v367; if ( v347 ) { v221 = v346; v349 = v318 * v315 + v317 * v314 + v316 * v313; v222 = (v351 - v349) / v364; v220 = v344; } else { v220 = v344; v221 = v346; v222 = v351 / v364; } goto LABEL_331; case 9: if ( v359 <= v141 ) { if ( v359 >= v141 ) { v344 = v141; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v50[13]; } } else { v344 = (double)SLODWORD(v351) * v50[13]; } if ( v353 <= v141 ) { if ( v353 >= v141 ) goto LABEL_343; v227 = (double)SLODWORD(v351); } else { LODWORD(v349) = -v25; v227 = (double)-v25; } v141 = v227 * v50[15]; LABEL_343: v346 = v141; v349 = *(float *)a8; v316 = v335 * v349; v317 = v336 * v349; v318 = v349 * v337; v338 = v320 + v316; v339 = v317 + v339; v340 = v318 + v340; v228 = sub_61E8E0(&v338, &v316, &v364); v229 = v228[1]; v230 = *v228; v231 = v228[2]; v356 = v229; v355 = v230; v357 = v231; v362 = v328 * v370 + v371 * v329 + v372 * v330; v365 = v371 * v371 + v370 * v370 + v372 * v372; v368 = v302 * v371 + v301 * v370 + v303 * v372; v349 = v229 * v371 + v230 * v370 + v231 * v372; v351 = v349 - v344 * v362 - v346 * v368; if ( v347 ) { v232 = v344; v233 = v346; v349 = v372 * v315 + v370 * v313 + v371 * v314; v234 = v349 + v351; } else { v232 = v344; v233 = v346; v234 = v351; } v235 = v323; v236 = v341; v237 = v327; v345 = v234 / v365; v238 = v345; *v327 = *(float *)(a2 + 28) * v345 + *v323 * *(float *)a8 + v341[1] + v232 * *(float *)(a2 + 16) + *(float *)(a2 + 40) * v233; v237[1] = v235[1] * *(float *)a8 + v236[2] + *(float *)(a2 + 20) * v232 + *(float *)(a2 + 32) * v238 + *(float *)(a2 + 44) * v233; v237[2] = v232 * *(float *)(a2 + 24) + *(float *)a8 * v235[2] + v236[3] + v238 * *(float *)(a2 + 36) + v233 * *(float *)(a2 + 48); goto LABEL_402; case 10: v370 = v331 - v344; v367 = v370; v371 = v332 - v345; v368 = v371; v372 = v333 - v346; v369 = v372; v239 = sub_61E8E0(v16, &v328, &v367); v240 = *v239; v241 = v239[1]; v242 = v239[2]; v331 = v240; v332 = v241; v333 = v242; v243 = sub_61E8E0((float *)(a2 + 28), &v301, &v367); v244 = *v243; v245 = v243[1]; v246 = v243[2]; v309 = v244; v310 = v245; v311 = v246; v247 = sub_61E8E0((float *)(a2 + 40), &v316, &v367); v248 = 0.0; v249 = *v247; v250 = v247[1]; v326 = v247[2]; v324 = v249; v325 = v250; if ( v360 <= 0.0 ) { if ( v360 >= 0.0 ) { v344 = 0.0; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v341[13]; } } else { v344 = (double)SLODWORD(v351) * v341[13]; } if ( v354 <= 0.0 ) { if ( v354 >= 0.0 ) goto LABEL_357; v251 = (double)SLODWORD(v351); } else { LODWORD(v349) = -v25; v251 = (double)-v25; } v248 = v251 * v341[15]; LABEL_357: v346 = v248; v349 = *(float *)a8; v370 = v335 * v349; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v252 = sub_61E8E0(&v338, &v370, &v367); v253 = *v252; v254 = v252[1]; v255 = v252[2]; v358 = v253; v359 = v254; v360 = v255; v363 = v310 * v332 + v309 * v331 + v311 * v333; v366 = v310 * v310 + v309 * v309 + v311 * v311; v369 = v325 * v310 + v324 * v309 + v326 * v311; v349 = v253 * v309 + v254 * v310 + v311 * v255; v351 = v349 - v344 * v363 - v346 * v369; if ( v347 ) { v349 = v311 * v315 + v310 * v314 + v309 * v313; v345 = (v349 + v351) / v366; v221 = v346; v220 = v344; } else { v220 = v344; v221 = v346; v222 = v351 / v366; LABEL_331: v345 = v222; } v223 = v323; v224 = v341; v225 = v327; v226 = v345; *v327 = *(float *)(a2 + 28) * v345 + *v323 * *(float *)a8 + v341[1] + v220 * *(float *)(a2 + 16) + *(float *)(a2 + 40) * v221; v225[1] = v223[1] * *(float *)a8 + v224[2] + *(float *)(a2 + 20) * v220 + *(float *)(a2 + 32) * v226 + *(float *)(a2 + 44) * v221; v225[2] = v220 * *(float *)(a2 + 24) + *(float *)a8 * v223[2] + v224[3] + v226 * *(float *)(a2 + 36) + v221 * *(float *)(a2 + 48); goto LABEL_402; case 11: if ( v355 <= v141 ) { if ( v355 >= v141 ) v344 = v141; else v344 = (double)SLODWORD(v351) * v50[13]; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v50[13]; } if ( v352 <= v141 ) { if ( v352 >= v141 ) goto LABEL_370; LODWORD(v349) = -v25; v256 = (double)-v25; } else { v256 = (double)SLODWORD(v351); } v141 = v256 * v50[14]; LABEL_370: v345 = v141; v349 = *(float *)a8; v370 = v335 * v349; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v257 = sub_61E8E0(&v338, &v370, &v361); v258 = v257[1]; v259 = *v257; v260 = v257[2]; v353 = v258; v352 = v259; v354 = v260; v361 = v298 * v309 + v310 * v299 + v311 * v300; v364 = v310 * v317 + v316 * v309 + v311 * v318; v367 = v310 * v310 + v309 * v309 + v311 * v311; v349 = v258 * v310 + v259 * v309 + v260 * v311; v351 = v349 - v344 * v361 - v345 * v364; if ( !v347 ) { v261 = v344; v262 = v345; v346 = v351 / v367; goto LABEL_374; } v263 = v344; v349 = v311 * v315 + v309 * v313 + v310 * v314; v264 = (v351 - v349) / v367; v265 = v345; goto LABEL_373; case 12: if ( v356 <= v141 ) { if ( v356 >= v141 ) v344 = v141; else v344 = (double)SLODWORD(v351) * v50[13]; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v50[13]; } if ( v353 <= v141 ) { if ( v353 >= v141 ) goto LABEL_385; LODWORD(v349) = -v25; v271 = (double)-v25; } else { v271 = (double)SLODWORD(v351); } v141 = v271 * v50[14]; LABEL_385: v345 = v141; v349 = *(float *)a8; v316 = v335 * v349; v317 = v336 * v349; v318 = v349 * v337; v338 = v320 + v316; v339 = v317 + v339; v340 = v318 + v340; v272 = sub_61E8E0(&v338, &v316, &v364); v273 = v272[1]; v274 = *v272; v275 = v272[2]; v356 = v273; v355 = v274; v357 = v275; v362 = v328 * v301 + v302 * v329 + v303 * v330; v365 = v302 * v371 + v301 * v370 + v303 * v372; v368 = v302 * v302 + v301 * v301 + v303 * v303; v349 = v273 * v302 + v274 * v301 + v275 * v303; v351 = v349 - v344 * v362 - v345 * v365; if ( v347 ) { v261 = v344; v262 = v345; v349 = v303 * v315 + v301 * v313 + v302 * v314; v276 = (v349 + v351) / v368; } else { v261 = v344; v262 = v345; v276 = v351 / v368; } v346 = v276; goto LABEL_374; case 13: v370 = v331 - v344; v367 = v370; v371 = v332 - v345; v368 = v371; v372 = v333 - v346; v369 = v372; v277 = sub_61E8E0(v16, &v328, &v367); v278 = *v277; v279 = v277[1]; v280 = v277[2]; v331 = v278; v332 = v279; v333 = v280; v281 = sub_61E8E0((float *)(a2 + 28), &v301, &v367); v282 = *v281; v283 = v281[1]; v284 = v281[2]; v309 = v282; v310 = v283; v311 = v284; v285 = sub_61E8E0((float *)(a2 + 40), &v316, &v367); v286 = 0.0; v287 = *v285; v288 = v285[1]; v326 = v285[2]; v324 = v287; v325 = v288; if ( v357 <= 0.0 ) { if ( v357 >= 0.0 ) v344 = 0.0; else v344 = (double)SLODWORD(v351) * v341[13]; } else { LODWORD(v349) = -v25; v344 = (double)-v25 * v341[13]; } if ( v354 <= 0.0 ) { if ( v354 >= 0.0 ) goto LABEL_399; LODWORD(v349) = -v25; v289 = (double)-v25; } else { v289 = (double)SLODWORD(v351); } v286 = v289 * v341[14]; LABEL_399: v345 = v286; v349 = *(float *)a8; v370 = v349 * v335; v371 = v336 * v349; v372 = v349 * v337; v338 = v320 + v370; v339 = v371 + v339; v340 = v372 + v340; v290 = sub_61E8E0(&v338, &v370, &v367); v291 = *v290; v292 = v290[1]; v293 = v290[2]; v358 = v291; v359 = v292; v360 = v293; v363 = v325 * v332 + v324 * v331 + v326 * v333; v366 = v325 * v310 + v324 * v309 + v326 * v311; v369 = v325 * v325 + v324 * v324 + v326 * v326; v349 = v291 * v324 + v292 * v325 + v326 * v293; v351 = v349 - v344 * v363 - v345 * v366; if ( v347 ) { v265 = v345; v263 = v344; v349 = v326 * v315 + v325 * v314 + v324 * v313; v264 = (v349 + v351) / v369; LABEL_373: v346 = v264; v266 = v263; v262 = v265; v261 = v266; } else { v261 = v344; v262 = v345; v346 = v351 / v369; } LABEL_374: v267 = v323; v268 = v341; v269 = v327; v270 = v346; *v327 = *(float *)(a2 + 40) * v346 + *v323 * *(float *)a8 + v341[1] + v261 * *(float *)(a2 + 16) + *(float *)(a2 + 28) * v262; v269[1] = v267[1] * *(float *)a8 + v268[2] + *(float *)(a2 + 20) * v261 + *(float *)(a2 + 32) * v262 + *(float *)(a2 + 44) * v270; v269[2] = v270 * *(float *)(a2 + 48) + v262 * *(float *)(a2 + 36) + v261 * *(float *)(a2 + 24) + *(float *)a8 * v267[2] + v268[3]; LABEL_402: if ( a10 ) { v294 = v314; v295 = v315; *(float *)a12 = v313; *(float *)(a12 + 4) = v294; *(float *)(a12 + 8) = v295; sub_4430B0((float *)a12); v370 = -*(float *)a12; v371 = -*(float *)(a12 + 4); v296 = v371; v297 = *(float *)(a12 + 8); *(float *)a11 = v370; *(float *)(a11 + 4) = v296; v372 = -v297; *(float *)(a11 + 8) = v372; } return 1; default: goto LABEL_402; } } v348 = -v143; v148 = v348; if ( v348 <= v142 ) { v145 = v326; goto LABEL_252; } v350 = -v326; if ( v350 <= v141 ) { if ( v343 * a1 + v142 >= v148 ) { v145 = v326; v350 = -((v143 + v312) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 13; v347 = 0; v351 = -6.8056469e38/*NaN*/; } goto LABEL_252; } return 0; } v149 = v142 + v350; v145 = v326; v342 = v149; v150 = v342; if ( v342 >= v148 ) goto LABEL_252; if ( v343 * a1 + v150 >= v148 ) { v350 = -((v143 + v150) / v343); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 13; v347 = 1; v351 = -6.8056469e38/*NaN*/; } goto LABEL_252; } return 0; } goto LABEL_237; } LABEL_235: v132 = 0.0; goto LABEL_228; } v348 = -v129; if ( v348 <= v128 ) goto LABEL_235; v350 = -v326; if ( v350 <= 0.0 ) { if ( v130 * a1 + v128 >= v348 ) { v136 = (v129 + v128) / v130; v135 = v319; v350 = -v136; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; *(float *)&v25 = -6.8056469e38/*NaN*/; v22 = 12; v347 = 0; v130 = v135; v132 = 0.0; v351 = -6.8056469e38/*NaN*/; goto LABEL_228; } LABEL_237: v130 = v135; v132 = 0.0; goto LABEL_228; } return 0; } v312 = v350 + v128; v137 = v312; if ( v312 >= (double)v348 ) { v138 = v319; LABEL_227: v132 = 0.0; v130 = v138; v122 = v334; goto LABEL_228; } if ( v130 * a1 + v137 >= v348 ) { v138 = v319; v350 = -((v129 + v137) / v319); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 12; v347 = 1; v351 = -6.8056469e38/*NaN*/; } goto LABEL_227; } return 0; } v348 = -v120; if ( v348 <= v119 ) { v122 = v334; v123 = v305; goto LABEL_209; } if ( v326 > v113 ) { v306 = v326 + v119; if ( v306 < (double)v348 ) { v122 = v334; if ( v109 * v121 + v306 >= v348 ) { v123 = v305; v350 = -((v306 + v120) / v121); if ( *(float *)a8 < (double)v350 ) { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 11; v347 = 1; v351 = -6.8056469e38/*NaN*/; } goto LABEL_209; } return 0; } v122 = v334; v123 = v305; goto LABEL_209; } v124 = v109 * v121 + v119; v125 = v334; if ( v124 >= v348 ) { v126 = v305; v350 = -((v120 + v119) / v125); if ( *(float *)a8 >= (double)v350 ) { v122 = v334; v123 = v305; } else { *(float *)&v25 = -6.8056469e38/*NaN*/; *(float *)a8 = v350; v22 = 11; v127 = v126; v122 = v125; v123 = v127; v347 = 0; v351 = -6.8056469e38/*NaN*/; } goto LABEL_209; } return 0; } goto LABEL_172; } } v98 = a1; goto LABEL_163; } if ( v65 * a1 + v63 < v348 ) return 0; v71 = (v64 + v63) / v65; v70 = v319; v350 = -v71; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; *(float *)&v25 = -6.8056469e38/*NaN*/; v22 = 6; v347 = 0; v65 = v70; v67 = a1; v351 = -6.8056469e38/*NaN*/; goto LABEL_91; } LABEL_99: v65 = v70; v67 = a1; goto LABEL_91; } } else { v350 = -v324; if ( v350 >= 0.0 ) { if ( v65 * a1 + v63 > v64 ) return 0; v66 = (v64 - v63) / v65; v67 = a1; v350 = v66; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 6; v347 = 0; LODWORD(v351) = 1; } goto LABEL_91; } v342 = v350 + v63; v68 = v342; if ( v342 > v64 ) { if ( v65 * a1 + v68 > v64 ) return 0; v69 = (v64 - v68) / v65; v70 = v319; v350 = v69; if ( *(float *)a8 < (double)v350 ) { *(float *)a8 = v350; v25 = 1; v22 = 6; v347 = 1; v65 = v70; v67 = a1; LODWORD(v351) = 1; goto LABEL_91; } goto LABEL_99; } } v67 = a1; goto LABEL_91; } goto LABEL_67; } v57 = v53 * v56 + v54; v58 = v334; if ( v57 <= v55 ) { v350 = (v55 - v54) / v58; if ( *(float *)a8 < (double)v350 ) { v25 = 1; *(float *)a8 = v350; v22 = 5; v347 = 0; LODWORD(v351) = 1; } goto LABEL_69; } return 0; } // ABD074: using guessed type float flt_ABD074; //----- (00840F50) -------------------------------------------------------- float *__cdecl sub_840F50(int a1) { float *v1; // eax float *v2; // esi float *result; // eax v1 = (float *)operator new(0x40u); if ( v1 ) { *(_DWORD *)v1 = &NiBoxBV::`vftable'; *((_DWORD *)v1 + 1) = dword_BA45C0; *((_DWORD *)v1 + 2) = dword_BA45C4; *((_DWORD *)v1 + 3) = dword_BA45C8; v1[13] = flt_ABD4B0; v2 = v1; v1[14] = flt_ABD4B4; v1[15] = flt_ABD4B8; *((_DWORD *)v1 + 4) = dword_ABD48C; *((_DWORD *)v1 + 5) = dword_ABD490; *((_DWORD *)v1 + 6) = dword_ABD494; *((_DWORD *)v1 + 7) = dword_ABD498; *((_DWORD *)v1 + 8) = dword_ABD49C; *((_DWORD *)v1 + 9) = dword_ABD4A0; *((_DWORD *)v1 + 10) = dword_ABD4A4; *((_DWORD *)v1 + 11) = dword_ABD4A8; *((_DWORD *)v1 + 12) = dword_ABD4AC; (**(void (__thiscall ***)(float *, int))v1)(v1, a1); result = v2; } else { (*(void (__thiscall **)(_DWORD, int))MEMORY[0])(0, a1); result = 0; } return result; } // A23AE8: using guessed type void *NiBoxBV::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; // ABD4B0: using guessed type float flt_ABD4B0; // ABD4B4: using guessed type float flt_ABD4B4; // ABD4B8: using guessed type float flt_ABD4B8; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00841020) -------------------------------------------------------- float *sub_841020() { float *result; // eax result = (float *)operator new(0x40u); if ( !result ) return 0; *(_DWORD *)result = &NiBoxBV::`vftable'; *((_DWORD *)result + 1) = dword_BA45C0; *((_DWORD *)result + 2) = dword_BA45C4; *((_DWORD *)result + 3) = dword_BA45C8; result[13] = flt_ABD4B0; result[14] = flt_ABD4B4; result[15] = flt_ABD4B8; *((_DWORD *)result + 4) = dword_ABD48C; *((_DWORD *)result + 5) = dword_ABD490; *((_DWORD *)result + 6) = dword_ABD494; *((_DWORD *)result + 7) = dword_ABD498; *((_DWORD *)result + 8) = dword_ABD49C; *((_DWORD *)result + 9) = dword_ABD4A0; *((_DWORD *)result + 10) = dword_ABD4A4; *((_DWORD *)result + 11) = dword_ABD4A8; *((_DWORD *)result + 12) = dword_ABD4AC; return result; } // A23AE8: using guessed type void *NiBoxBV::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; // ABD4B0: using guessed type float flt_ABD4B0; // ABD4B4: using guessed type float flt_ABD4B4; // ABD4B8: using guessed type float flt_ABD4B8; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008410D0) -------------------------------------------------------- bool __cdecl sub_8410D0(float a1, int a2, int a3, int a4, int a5) { float *v5; // ecx int v6; // edi float *v7; // esi double v8; // st6 double v9; // st7 double v11; // st6 double v12; // st5 int v13; // ecx int v14; // edx double v15; // st7 int v16; // [esp+8h] [ebp-2Ch] int v17; // [esp+Ch] [ebp-28h] int v18; // [esp+10h] [ebp-24h] float v19; // [esp+14h] [ebp-20h] float v20; // [esp+18h] [ebp-1Ch] float v21; // [esp+1Ch] [ebp-18h] float v22; // [esp+20h] [ebp-14h] float v23; // [esp+24h] [ebp-10h] float v24; // [esp+28h] [ebp-Ch] char v25; // [esp+2Ch] [ebp-8h] char v26; // [esp+30h] [ebp-4h] v5 = (float *)a2; v6 = a4; v7 = (float *)(a2 + 4); v22 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v23 = *(float *)(a4 + 8) - *(float *)(a2 + 8); v24 = *(float *)(a4 + 12) - *(float *)(a2 + 12); v8 = v23; v9 = v22; *(float *)&a2 = *(float *)(a2 + 24) * v24 + *(float *)(a2 + 16) * v22 + *(float *)(a2 + 20) * v23; *(float *)&a2 = fabs(*(float *)&a2); if ( v5[13] >= (double)*(float *)&a2 ) { *(float *)&a2 = v5[8] * v8 + v5[7] * v9 + v5[9] * v24; *(float *)&a2 = fabs(*(float *)&a2); if ( v5[14] >= (double)*(float *)&a2 ) { *(float *)&a2 = v9 * v5[10] + v8 * v5[11] + v24 * v5[12]; *(float *)&a2 = fabs(*(float *)&a2); if ( v5[15] >= (double)*(float *)&a2 ) return 1; } } v22 = *(float *)a5 - *(float *)a3; v23 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v24 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v11 = v24; v12 = v23; if ( *(float *)&dword_BA45C0 == v22 && *(float *)&dword_BA45C4 == v12 && *(float *)&dword_BA45C8 == v11 ) { v15 = sub_84B480((float *)(a4 + 4), v7, (float *)&v26, (float *)&a4, (float *)&a2); } else { v13 = *(_DWORD *)(a4 + 8); v14 = *(_DWORD *)(a4 + 12); v16 = *(_DWORD *)(a4 + 4); v17 = v13; v22 = v22 * a1; v19 = v22; v18 = v14; v23 = v12 * a1; v20 = v23; v24 = a1 * v11; v21 = v24; v15 = sub_84C110((float *)&v16, v7, (float *)&v25, (float *)&v26, (float *)&a4, (float *)&a2); } *(float *)&a2 = v15; return *(float *)&a2 <= *(float *)(v6 + 16) * *(float *)(v6 + 16); } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008412A0) -------------------------------------------------------- char __cdecl sub_8412A0(float a1, int a2, int a3, int a4, int a5, int a6, int a7) { float *v7; // edi int v8; // ecx int v9; // edx double v10; // st4 double v11; // st5 double v12; // st5 double v13; // st4 double v14; // st7 double v15; // st4 double v16; // rtt double v17; // st7 double v18; // st7 char result; // al double v20; // st6 double v21; // st5 double v22; // st4 double v23; // st6 double v24; // st4 double v25; // rt2 double v26; // st7 double v27; // st7 int v28; // [esp+20h] [ebp-50h] int v29; // [esp+24h] [ebp-4Ch] int v30; // [esp+28h] [ebp-48h] int v31; // [esp+2Ch] [ebp-44h] float v32; // [esp+30h] [ebp-40h] float v33; // [esp+34h] [ebp-3Ch] float v34; // [esp+38h] [ebp-38h] float v35; // [esp+3Ch] [ebp-34h] float v36; // [esp+40h] [ebp-30h] float v37; // [esp+44h] [ebp-2Ch] float v38; // [esp+48h] [ebp-28h] float v39; // [esp+4Ch] [ebp-24h] float v40; // [esp+50h] [ebp-20h] float v41; // [esp+54h] [ebp-1Ch] float v42; // [esp+58h] [ebp-18h] float v43; // [esp+5Ch] [ebp-14h] float v44; // [esp+60h] [ebp-10h] float v45; // [esp+64h] [ebp-Ch] float v46; // [esp+68h] [ebp-8h] float v47; // [esp+6Ch] [ebp-4h] float v48; // [esp+90h] [ebp+20h] float v49; // [esp+90h] [ebp+20h] float v50; // [esp+90h] [ebp+20h] float v51; // [esp+90h] [ebp+20h] int v52; // [esp+90h] [ebp+20h] int v53; // [esp+90h] [ebp+20h] int v54; // [esp+90h] [ebp+20h] float v55; // [esp+90h] [ebp+20h] float v56; // [esp+90h] [ebp+20h] float v57; // [esp+90h] [ebp+20h] float v58; // [esp+90h] [ebp+20h] int v59; // [esp+90h] [ebp+20h] int v60; // [esp+90h] [ebp+20h] int v61; // [esp+90h] [ebp+20h] sub_834CA0((float *)&v28, 1.0, (int)&dword_BA45C0); v7 = (float *)a7; v32 = 0.0099999998; v8 = *(_DWORD *)(a7 + 4); v9 = *(_DWORD *)(a7 + 8); v29 = *(_DWORD *)a7; v30 = v8; v31 = v9; if ( !sub_8410D0(a1, a2, a3, (int)&v28, (int)&dword_BA45C0) ) { v48 = *(float *)a6; v45 = *(float *)a3 * v48; v46 = *(float *)(a3 + 4) * v48; v47 = v48 * *(float *)(a3 + 8); v42 = v45 + *(float *)(a2 + 4); v43 = *(float *)(a2 + 8) + v46; v44 = *(float *)(a2 + 12) + v47; v45 = *v7 - v42; v46 = v7[1] - v43; v47 = v7[2] - v44; v10 = v46; v11 = v45; v49 = *(float *)(a2 + 24) * v47 + *(float *)(a2 + 16) * v45 + *(float *)(a2 + 20) * v46; v45 = v49; v50 = *(float *)(a2 + 28) * v11 + *(float *)(a2 + 32) * v46 + *(float *)(a2 + 36) * v47; v46 = v50; v51 = v11 * *(float *)(a2 + 40) + v10 * *(float *)(a2 + 44) + v47 * *(float *)(a2 + 48); v47 = v51; v12 = v45; if ( *(float *)(a2 + 52) * 0.9900000095367432 >= v45 ) { *(float *)&v52 = -*(float *)(a2 + 52); if ( *(float *)&v52 * 0.9900000095367432 > v12 ) { v45 = -*(float *)(a2 + 52); v12 = *(float *)&v52; } } else { v45 = *(float *)(a2 + 52); v12 = v45; } v13 = v46; if ( *(float *)(a2 + 56) * 0.9900000095367432 >= v46 ) { *(float *)&v53 = -*(float *)(a2 + 56); if ( *(float *)&v53 * 0.9900000095367432 > v13 ) { v46 = -*(float *)(a2 + 56); v13 = *(float *)&v53; } } else { v46 = *(float *)(a2 + 56); v13 = v46; } if ( *(float *)(a2 + 60) * 0.9900000095367432 >= v47 ) { *(float *)&v54 = -*(float *)(a2 + 60); if ( 0.9900000095367432 * *(float *)&v54 <= v47 ) { v16 = v13; v15 = v47; v14 = v16; } else { v14 = v13; v47 = -*(float *)(a2 + 60); v15 = *(float *)&v54; } } else { v14 = v13; v47 = *(float *)(a2 + 60); v15 = v47; } v33 = v15 * *(float *)(a2 + 40); v34 = *(float *)(a2 + 44) * v15; v35 = v15 * *(float *)(a2 + 48); v36 = *(float *)(a2 + 28) * v14; v37 = *(float *)(a2 + 32) * v14; v38 = v14 * *(float *)(a2 + 36); v45 = *(float *)(a2 + 16) * v12; v46 = *(float *)(a2 + 20) * v12; v47 = v12 * *(float *)(a2 + 24); v39 = v42 + v45; v40 = v46 + v43; v41 = v47 + v44; v42 = v39 + v36; v43 = v40 + v37; v44 = v41 + v38; v36 = v42 + v33; v17 = v43; *v7 = v36; v37 = v17 + v34; v18 = v44; v7[1] = v37; v38 = v18 + v35; v7[2] = v38; } result = sub_8410D0(a1, a4, a5, (int)&v28, (int)&dword_BA45C0); if ( !result ) { v55 = *(float *)a6; v33 = *(float *)a5 * v55; v34 = *(float *)(a5 + 4) * v55; v35 = v55 * *(float *)(a5 + 8); v42 = v33 + *(float *)(a4 + 4); v43 = *(float *)(a4 + 8) + v34; v44 = *(float *)(a4 + 12) + v35; v33 = *v7 - v42; v34 = v7[1] - v43; v35 = v7[2] - v44; v56 = v34 * *(float *)(a4 + 20) + v33 * *(float *)(a4 + 16) + v35 * *(float *)(a4 + 24); v45 = v56; v57 = v34 * *(float *)(a4 + 32) + *(float *)(a4 + 28) * v33 + v35 * *(float *)(a4 + 36); v46 = v57; v58 = v34 * *(float *)(a4 + 44) + v33 * *(float *)(a4 + 40) + v35 * *(float *)(a4 + 48); v47 = v58; if ( *(float *)(a4 + 52) * 0.9900000095367432 >= v45 ) { *(float *)&v59 = -*(float *)(a4 + 52); if ( *(float *)&v59 * 0.9900000095367432 <= v45 ) { v21 = v45; v20 = 0.9900000095367432; } else { v20 = 0.9900000095367432; v45 = -*(float *)(a4 + 52); v21 = *(float *)&v59; } } else { v20 = 0.9900000095367432; v45 = *(float *)(a4 + 52); v21 = v45; } v22 = v46; if ( *(float *)(a4 + 56) * v20 >= v46 ) { *(float *)&v60 = -*(float *)(a4 + 56); if ( *(float *)&v60 * v20 > v22 ) { v46 = -*(float *)(a4 + 56); v22 = *(float *)&v60; } } else { v46 = *(float *)(a4 + 56); v22 = v46; } if ( *(float *)(a4 + 60) * v20 >= v47 ) { *(float *)&v61 = -*(float *)(a4 + 60); if ( v20 * *(float *)&v61 <= v47 ) { v25 = v22; v24 = v47; v23 = v25; } else { v23 = v22; v47 = -*(float *)(a4 + 60); v24 = *(float *)&v61; } } else { v23 = v22; v47 = *(float *)(a4 + 60); v24 = v47; } v45 = *(float *)(a4 + 40) * v24; v46 = *(float *)(a4 + 44) * v24; v47 = v24 * *(float *)(a4 + 48); v39 = *(float *)(a4 + 28) * v23; v40 = *(float *)(a4 + 32) * v23; v41 = v23 * *(float *)(a4 + 36); v33 = *(float *)(a4 + 16) * v21; v34 = *(float *)(a4 + 20) * v21; v35 = v21 * *(float *)(a4 + 24); v36 = v42 + v33; v37 = v34 + v43; v38 = v35 + v44; v33 = v36 + v39; v34 = v37 + v40; v35 = v38 + v41; v36 = v33 + v45; v26 = v34; *v7 = v36; v37 = v26 + v46; v27 = v35; v7[1] = v37; v38 = v27 + v47; result = LOBYTE(v38); v7[2] = v38; } return result; } // BA45C0: using guessed type int dword_BA45C0; //----- (008417B0) -------------------------------------------------------- _DWORD *__thiscall sub_8417B0(char *this) { char *v1; // esi _DWORD *result; // eax v1 = this; result = operator new(0x40u); if ( !result ) return 0; *result = &NiBoxBV::`vftable'; qmemcpy(result + 1, v1 + 4, 0x3Cu); return result; } // A23AE8: using guessed type void *NiBoxBV::`vftable'; //----- (008417E0) -------------------------------------------------------- char __cdecl sub_8417E0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { double v10; // st7 float *v11; // edi double v12; // st7 double v13; // st6 double v14; // st5 double v15; // st4 double v16; // st3 double v17; // st3 double v18; // st2 double v19; // st5 double v20; // st4 double v21; // st3 double v22; // st2 double v24; // st2 double v25; // st2 double v26; // st2 double v27; // st2 double v28; // rt2 double v29; // st3 double v30; // st7 double v31; // st2 double v32; // st3 double v33; // st2 double v34; // st6 double v35; // st4 double v36; // rtt double v37; // st4 double v38; // st3 double v39; // st4 double v40; // st3 double v41; // rt2 double v42; // st4 double v43; // st6 double v44; // st5 double v45; // st7 double v46; // st5 double v47; // st4 double v48; // st3 double v49; // st2 double v50; // st5 double v51; // st3 double v52; // st5 double v53; // st3 double v54; // st4 double v55; // st4 double v56; // st4 double v57; // st3 double v58; // st3 double v59; // st5 double v60; // st5 double v61; // st5 double v62; // st3 double v63; // st3 double v64; // st3 double v65; // st5 double v66; // st4 double v67; // st4 double v68; // st3 double v69; // st3 double v70; // st5 double v71; // st5 double v72; // st3 double v73; // st3 double v74; // st4 double v75; // st3 double v76; // st3 double v77; // st7 double v78; // st4 double v79; // st7 double v80; // st3 double v81; // st3 double v82; // st4 double v83; // st3 double v84; // st3 double v85; // st4 double v86; // st4 double v87; // st3 double v88; // st3 double v89; // st5 double v90; // st4 double v91; // st4 float *v92; // esi double v93; // st7 float *v94; // eax double v95; // st6 float v96; // edx double v97; // st7 float *v98; // eax double v99; // st7 double v100; // st7 bool v101; // c0 double v102; // st7 double v103; // st6 double v104; // st7 double v105; // st5 int v106; // ST18_4 int v107; // ST08_4 double v108; // st7 float *v109; // eax float v110; // ecx float v111; // edx float v112; // ecx int v113; // ecx float v114; // ecx double v115; // st7 float *v116; // eax float v117; // edx double v118; // st7 double v119; // st7 int v120; // eax int v121; // ST18_4 double v122; // st6 double v123; // st7 double v124; // st5 int v125; // ST10_4 int v126; // eax double v127; // st7 int v128; // eax float v129; // edx int v130; // ecx double v131; // st7 double v132; // st6 double v133; // st7 double v134; // st6 int v135; // eax int v136; // ST18_4 double v137; // st5 int v138; // ST10_4 float *v139; // eax float v140; // ecx double v141; // st7 float *v142; // eax float v143; // edx float *v144; // ecx float *v145; // eax float *v146; // ecx double v147; // st7 double v148; // st6 double v149; // st7 double v150; // st6 int v151; // eax int v152; // ST18_4 double v153; // st5 int v154; // ST10_4 float *v155; // eax float v156; // ecx double v157; // st7 float *v158; // eax float v159; // edx double v160; // rt1 double v161; // st4 double v162; // st5 double v163; // st7 double v164; // st6 double v165; // st7 double v166; // st6 int v167; // eax int v168; // ST18_4 double v169; // st5 int v170; // ST10_4 float *v171; // eax float v172; // ecx double v173; // st7 float *v174; // eax float v175; // edx double v176; // st7 double v177; // st6 double v178; // st7 double v179; // st6 int v180; // eax int v181; // ST18_4 double v182; // st5 int v183; // ST10_4 char *v184; // ecx float *v185; // eax float v186; // ecx double v187; // st7 float *v188; // eax float v189; // edx double v190; // st7 double v191; // st6 double v192; // st7 double v193; // st6 int v194; // eax int v195; // ST18_4 double v196; // st5 int v197; // ST10_4 double v198; // rtt double v199; // st4 double v200; // st7 double v201; // rt2 double v202; // st4 double v203; // st7 double v204; // st7 double v205; // st6 double v206; // st7 double v207; // st6 int v208; // eax int v209; // ST18_4 double v210; // st5 int v211; // ST10_4 double v212; // st7 double v213; // st6 double v214; // st7 double v215; // st6 int v216; // eax int v217; // ST18_4 double v218; // st5 int v219; // ST10_4 char *v220; // ecx double v221; // st7 double v222; // st6 double v223; // st7 double v224; // st6 int v225; // eax int v226; // ST18_4 double v227; // st5 int v228; // ST10_4 double v229; // rt0 double v230; // st4 double v231; // st5 double v232; // rtt double v233; // st4 double v234; // st7 double v235; // rt2 double v236; // st4 double v237; // st5 double v238; // st7 double v239; // st6 double v240; // st7 double v241; // st6 int v242; // eax int v243; // ST18_4 double v244; // st5 int v245; // ST10_4 float *v246; // eax float v247; // ecx double v248; // st7 float *v249; // eax float v250; // edx float *v251; // eax float v252; // edx double v253; // st7 float *v254; // [esp+18h] [ebp-178h] float *v255; // [esp+18h] [ebp-178h] float *v256; // [esp+18h] [ebp-178h] char v257; // [esp+28h] [ebp-168h] char v258; // [esp+34h] [ebp-15Ch] char v259; // [esp+40h] [ebp-150h] char v260; // [esp+4Ch] [ebp-144h] char v261; // [esp+58h] [ebp-138h] char v262; // [esp+64h] [ebp-12Ch] char v263; // [esp+70h] [ebp-120h] char v264; // [esp+7Ch] [ebp-114h] char v265; // [esp+88h] [ebp-108h] char v266; // [esp+94h] [ebp-FCh] char v267; // [esp+A0h] [ebp-F0h] char v268; // [esp+ACh] [ebp-E4h] float v269; // [esp+B8h] [ebp-D8h] float *v270; // [esp+C4h] [ebp-CCh] float v271; // [esp+C8h] [ebp-C8h] float v272; // [esp+CCh] [ebp-C4h] float v273; // [esp+D0h] [ebp-C0h] float v274; // [esp+D4h] [ebp-BCh] float v275; // [esp+D8h] [ebp-B8h] float v276; // [esp+DCh] [ebp-B4h] float v277; // [esp+E0h] [ebp-B0h] float v278; // [esp+E4h] [ebp-ACh] float v279; // [esp+E8h] [ebp-A8h] float v280; // [esp+ECh] [ebp-A4h] float v281; // [esp+F0h] [ebp-A0h] float v282; // [esp+F4h] [ebp-9Ch] int v283; // [esp+F8h] [ebp-98h] int v284; // [esp+FCh] [ebp-94h] float v285; // [esp+100h] [ebp-90h] float v286; // [esp+104h] [ebp-8Ch] float v287; // [esp+108h] [ebp-88h] float *v288; // [esp+10Ch] [ebp-84h] float *v289; // [esp+110h] [ebp-80h] float *v290; // [esp+114h] [ebp-7Ch] float v291; // [esp+118h] [ebp-78h] float v292; // [esp+11Ch] [ebp-74h] float v293; // [esp+120h] [ebp-70h] float v294; // [esp+124h] [ebp-6Ch] float v295; // [esp+128h] [ebp-68h] unsigned int v296; // [esp+12Ch] [ebp-64h] float v297; // [esp+130h] [ebp-60h] float v298; // [esp+134h] [ebp-5Ch] float v299; // [esp+138h] [ebp-58h] float v300; // [esp+13Ch] [ebp-54h] float v301; // [esp+140h] [ebp-50h] float v302; // [esp+144h] [ebp-4Ch] float v303; // [esp+148h] [ebp-48h] float v304; // [esp+14Ch] [ebp-44h] float v305; // [esp+150h] [ebp-40h] float v306; // [esp+154h] [ebp-3Ch] float v307; // [esp+158h] [ebp-38h] int v308; // [esp+15Ch] [ebp-34h] float v309; // [esp+160h] [ebp-30h] float v310; // [esp+164h] [ebp-2Ch] float v311; // [esp+168h] [ebp-28h] float v312; // [esp+16Ch] [ebp-24h] float v313; // [esp+170h] [ebp-20h] float v314; // [esp+174h] [ebp-1Ch] float v315; // [esp+178h] [ebp-18h] float v316; // [esp+17Ch] [ebp-14h] float v317; // [esp+180h] [ebp-10h] float v318; // [esp+184h] [ebp-Ch] float v319; // [esp+188h] [ebp-8h] v295 = a1; v284 = a5; v283 = a7; v290 = (float *)a9; v270 = (float *)a10; v289 = (float *)(a4 + 16); v10 = *(float *)a5 - *(float *)a3; v11 = (float *)(a2 + 16); v296 = 0; v280 = v10; v308 = 0; v281 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v282 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v285 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v286 = *(float *)(a4 + 8) - *(float *)(a2 + 8); v287 = *(float *)(a4 + 12) - *(float *)(a2 + 12); v12 = a1; v291 = v280 * a1; v292 = v281 * a1; v293 = v282 * a1; v13 = v285; v297 = v285 + v291; v14 = v286; v298 = v292 + v286; v15 = v287; v299 = v293 + v287; *(float *)a6 = 0.0; v311 = *(float *)(a2 + 16) * *(float *)(a4 + 16) + *(float *)(a4 + 20) * *(float *)(a2 + 20) + *(float *)(a4 + 24) * *(float *)(a2 + 24); v16 = *(float *)(a2 + 16) * *(float *)(a4 + 28); LODWORD(v306) = a4 + 28; v17 = v16 + *(float *)(a2 + 20) * *(float *)(a4 + 32); v18 = *(float *)(a2 + 24) * *(float *)(a4 + 36); LODWORD(v294) = v289 + 6; v312 = v17 + v18; v313 = *(float *)(a2 + 16) * v289[6] + v289[7] * *(float *)(a2 + 20) + v289[8] * *(float *)(a2 + 24); v300 = v14 * *(float *)(a2 + 20) + *(float *)(a2 + 16) * v13 + v15 * *(float *)(a2 + 24); v19 = v298; v20 = v297; v21 = v299; v297 = *(float *)(a2 + 16) * v297 + v298 * *(float *)(a2 + 20) + v299 * *(float *)(a2 + 24); v310 = fabs(v311); v271 = v310; v310 = fabs(v312); v272 = v310; v310 = fabs(v313); v273 = v310; v303 = *(float *)(a4 + 56) * v272 + *(float *)(a4 + 52) * v271 + v310 * *(float *)(a4 + 60); v309 = *(float *)(a2 + 52) + v303; v22 = v309; if ( v309 >= (double)v300 ) { v309 = -v22; if ( v309 > (double)v300 ) { if ( v309 > (double)v297 ) return 0; v310 = (v22 + v300) * -v12 / (v297 - v300); if ( v310 > 0.0 ) { *(float *)a6 = v310; v296 = 1; v308 = -1; } } } else { if ( v297 > v22 ) return 0; v310 = (v22 - v300) * v12 / (v297 - v300); if ( v310 > 0.0 ) { *(float *)a6 = v310; v296 = 1; v308 = 1; } } v24 = *(float *)(a2 + 32); v288 = (float *)(a2 + 28); v314 = v24 * v289[1] + *(float *)(a2 + 28) * *v289 + v289[2] * *(float *)(a2 + 36); v315 = *(float *)(a2 + 32) * *(float *)(LODWORD(v306) + 4) + *(float *)(a2 + 28) * *(float *)LODWORD(v306) + *(float *)(a2 + 36) * *(float *)(LODWORD(v306) + 8); v316 = *(float *)LODWORD(v294) * *(float *)(a2 + 28) + *(float *)(LODWORD(v294) + 4) * *(float *)(a2 + 32) + *(float *)(LODWORD(v294) + 8) * *(float *)(a2 + 36); v301 = v13 * *(float *)(a2 + 28) + v286 * *(float *)(a2 + 32) + v287 * *(float *)(a2 + 36); v298 = *(float *)(a2 + 28) * v20 + v19 * *(float *)(a2 + 32) + v21 * *(float *)(a2 + 36); v310 = fabs(v314); v274 = v310; v310 = fabs(v315); v275 = v310; v310 = fabs(v316); v276 = v310; v310 = *(float *)(a4 + 56) * v275 + *(float *)(a4 + 52) * v274 + v310 * *(float *)(a4 + 60); v309 = v310 + *(float *)(a2 + 56); v25 = v309; if ( v309 >= (double)v301 ) { v309 = -v25; if ( v309 > (double)v301 ) { if ( v309 > (double)v298 ) return 0; v310 = (v25 + v301) * -v12 / (v298 - v301); if ( *(float *)a6 < (double)v310 ) { *(float *)a6 = v310; v296 = 2; v308 = -1; } } } else { if ( v298 > v25 ) return 0; v310 = (v25 - v301) * v12 / (v298 - v301); if ( *(float *)a6 < (double)v310 ) { *(float *)a6 = v310; v296 = 2; v308 = 1; } } v26 = *(float *)(a2 + 44); LODWORD(v310) = a2 + 40; v317 = v26 * v289[1] + *(float *)(a2 + 40) * *v289 + v289[2] * *(float *)(a2 + 48); v318 = *(float *)(a2 + 44) * *(float *)(LODWORD(v306) + 4) + *(float *)LODWORD(v306) * *(float *)(a2 + 40) + *(float *)(a2 + 48) * *(float *)(LODWORD(v306) + 8); v319 = *(float *)LODWORD(v294) * *(float *)(a2 + 40) + *(float *)(LODWORD(v294) + 4) * *(float *)(a2 + 44) + *(float *)(LODWORD(v294) + 8) * *(float *)(a2 + 48); v302 = v13 * *(float *)(a2 + 40) + v286 * *(float *)(a2 + 44) + v287 * *(float *)(a2 + 48); v299 = v19 * *(float *)(a2 + 44) + v20 * *(float *)(a2 + 40) + v21 * *(float *)(a2 + 48); v307 = fabs(v317); v277 = v307; v307 = fabs(v318); v278 = v307; v307 = fabs(v319); v279 = v307; v307 = *(float *)(a4 + 56) * v278 + *(float *)(a4 + 52) * v277 + v307 * *(float *)(a4 + 60); v309 = v307 + *(float *)(a2 + 60); v27 = v309; if ( v309 >= (double)v302 ) { v309 = -v27; if ( v309 <= (double)v302 ) { v30 = v21; } else { if ( v309 > (double)v299 ) return 0; v31 = (v27 + v302) * -v12; v30 = v21; v307 = v31 / (v299 - v302); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 3; v308 = -1; } } } else { if ( v299 > v27 ) return 0; v28 = v21; v29 = v12 * (v27 - v302) / (v299 - v302); v30 = v28; v307 = v29; if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 3; v308 = 1; } } v303 = v13 * *v289 + v286 * v289[1] + v287 * v289[2]; v291 = v19 * v289[1] + v20 * *v289 + v30 * v289[2]; v269 = *(float *)(a2 + 56) * v274 + *(float *)(a2 + 52) * v271 + v277 * *(float *)(a2 + 60); v309 = v269 + *(float *)(a4 + 52); v32 = v303; v33 = v309; if ( v309 < (double)v303 ) { if ( v291 > (double)v309 ) return 0; v34 = v20; v307 = (v309 - v32) * v295 / (v291 - v32); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 4; v35 = v285; v308 = 1; goto LABEL_38; } LABEL_36: v35 = v285; goto LABEL_38; } v309 = -v33; if ( v309 > v32 ) { if ( v309 > (double)v291 ) return 0; v34 = v20; v307 = (v33 + v32) * -v295 / (v291 - v32); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 4; v35 = v285; v308 = -1; goto LABEL_38; } goto LABEL_36; } v36 = v20; v35 = v13; v34 = v36; LABEL_38: v304 = v35 * *(float *)LODWORD(v306) + v286 * *(float *)(LODWORD(v306) + 4) + v287 * *(float *)(LODWORD(v306) + 8); v292 = v19 * *(float *)(LODWORD(v306) + 4) + *(float *)LODWORD(v306) * v34 + v30 * *(float *)(LODWORD(v306) + 8); v307 = *(float *)(a2 + 56) * v275 + *(float *)(a2 + 52) * v272 + v278 * *(float *)(a2 + 60); v309 = v307 + *(float *)(a4 + 56); v37 = v304; v38 = v309; if ( v309 >= (double)v304 ) { v309 = -v38; if ( v309 > v37 ) { if ( v292 < (double)v309 ) return 0; v307 = (v38 + v37) * -v295 / (v292 - v37); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 5; v308 = -1; } } v40 = v299; v39 = 0.0; } else { if ( v292 > v38 ) return 0; v307 = (v38 - v37) * v295 / (v292 - v37); if ( *(float *)a6 >= (double)v307 ) { v39 = 0.0; } else { *(float *)a6 = v307; v296 = 5; v39 = 0.0; v308 = 1; } v40 = v299; } v305 = v286 * *(float *)(LODWORD(v294) + 4) + v285 * *(float *)LODWORD(v294) + v287 * *(float *)(LODWORD(v294) + 8); v41 = v39; v42 = v34 * *(float *)LODWORD(v294) + v19 * *(float *)(LODWORD(v294) + 4); v43 = v41; v44 = v30 * *(float *)(LODWORD(v294) + 8) + v42; v45 = v40; v293 = v44; v46 = v273; v307 = *(float *)(a2 + 52) * v273 + *(float *)(a2 + 56) * v276 + v279 * *(float *)(a2 + 60); v309 = v307 + *(float *)(a4 + 60); v47 = v305; v48 = v309; if ( v309 >= (double)v305 ) { v309 = -v48; if ( v309 > v47 ) { if ( v293 < (double)v309 ) return 0; v307 = (v48 + v47) * -v295 / (v293 - v47); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 6; v308 = -1; } } } else { if ( v293 > v48 ) return 0; v307 = (v48 - v47) * v295 / (v293 - v47); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 6; v308 = 1; } } v307 = v302 * v314 - v317 * v301; v309 = *(float *)(a2 + 56) * v277 + v274 * *(float *)(a2 + 60); v49 = v46 * *(float *)(a4 + 56) + v272 * *(float *)(a4 + 60); v50 = v309; v309 = v49; v51 = v50 + v309; v52 = v314; v309 = v51; v53 = v307; if ( v309 >= (double)v307 ) { v55 = v309; v309 = -v309; if ( v309 > v53 ) { v307 = v52 * v45 - v317 * v298; if ( v307 < (double)v309 ) return 0; v307 = (v55 + v53) * -v295 / (v307 - v53); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 7; v308 = -1; } } } else { v54 = v307; v307 = v52 * v45 - v317 * v298; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v54) * v295 / (v307 - v54); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 7; v308 = 1; } } v56 = v315; v307 = v302 * v315 - v318 * v301; v309 = *(float *)(a2 + 56) * v278 + v275 * *(float *)(a2 + 60); v57 = v309; v309 = *(float *)(a4 + 52) * v273 + v271 * *(float *)(a4 + 60); v309 = v57 + v309; v58 = v307; if ( v309 >= (double)v307 ) { v60 = v309; v309 = -v309; if ( v309 > v58 ) { v307 = v56 * v45 - v318 * v298; if ( v307 < (double)v309 ) return 0; v307 = (v60 + v58) * -v295 / (v307 - v58); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 8; v308 = -1; } } } else { v59 = v307; v307 = v56 * v45 - v318 * v298; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v59) * v295 / (v307 - v59); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 8; v308 = 1; } } v61 = v319; v307 = v302 * v316 - v319 * v301; v309 = *(float *)(a2 + 56) * v279 + v276 * *(float *)(a2 + 60); v62 = v309; v309 = *(float *)(a4 + 56) * v271 + *(float *)(a4 + 52) * v272; v309 = v62 + v309; v63 = v307; if ( v309 >= (double)v307 ) { v66 = v309; v309 = -v309; if ( v309 > v63 ) { v307 = v45 * v316 - v61 * v298; if ( v307 < (double)v309 ) return 0; v307 = (v66 + v63) * -v295 / (v307 - v63); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 9; v308 = -1; } } } else { v64 = v316 * v45 - v61 * v298; v65 = v307; v307 = v64; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v65) * v295 / (v307 - v65); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 9; v308 = 1; } } v67 = v311; v307 = v317 * v300 - v302 * v311; v309 = *(float *)(a4 + 56) * v276 + v275 * *(float *)(a4 + 60); v68 = v309; v309 = *(float *)(a2 + 52) * v277 + v271 * *(float *)(a2 + 60); v309 = v68 + v309; v69 = v307; if ( v309 >= (double)v307 ) { v71 = v309; v309 = -v309; if ( v309 <= v69 ) { LABEL_96: v70 = v297; goto LABEL_97; } v307 = v317 * v297 - v67 * v45; if ( v307 >= (double)v309 ) { v307 = (v71 + v69) * -v295 / (v307 - v69); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 10; v70 = v297; v308 = -1; goto LABEL_97; } goto LABEL_96; } return 0; } v70 = v297; v307 = v317 * v297 - v67 * v45; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v69) * v295 / (v307 - v69); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 10; v308 = 1; } LABEL_97: v307 = v318 * v300 - v302 * v312; v309 = *(float *)(a4 + 52) * v276 + v274 * *(float *)(a4 + 60); v72 = v309; v309 = *(float *)(a2 + 52) * v278 + v272 * *(float *)(a2 + 60); v309 = v72 + v309; v73 = v307; if ( v309 >= (double)v307 ) { v74 = v309; v309 = -v309; if ( v309 > v73 ) { v307 = v70 * v318 - v45 * v312; if ( v307 < (double)v309 ) return 0; v307 = (v74 + v73) * -v295 / (v307 - v73); if ( *(float *)a6 >= (double)v307 ) { v70 = v297; } else { *(float *)a6 = v307; v296 = 11; v70 = v297; v308 = -1; } } } else { v307 = v318 * v70 - v312 * v45; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v73) * v295 / (v307 - v73); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 11; v308 = 1; } } v307 = v319 * v300 - v302 * v313; v309 = *(float *)(a4 + 56) * v274 + *(float *)(a4 + 52) * v275; v75 = v309; v309 = *(float *)(a2 + 52) * v279 + v273 * *(float *)(a2 + 60); v309 = v75 + v309; v76 = v307; if ( v309 >= (double)v307 ) { v78 = v309; v309 = -v309; if ( v309 <= v76 ) { v79 = v70; } else { v307 = v319 * v70 - v45 * v313; if ( v307 < (double)v309 ) return 0; v79 = v70; v307 = (v78 + v76) * -v295 / (v307 - v76); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 12; v308 = -1; } } v70 = v79; v77 = v313; } else { v307 = v319 * v70 - v45 * v313; if ( v307 > (double)v309 ) return 0; v77 = v313; v307 = (v309 - v76) * v295 / (v307 - v76); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 12; v308 = 1; } } v307 = v301 * v311 - v314 * v300; v309 = *(float *)(a4 + 56) * v279 + v278 * *(float *)(a4 + 60); v80 = v309; v309 = *(float *)(a2 + 56) * v271 + *(float *)(a2 + 52) * v274; v309 = v80 + v309; v81 = v307; if ( v309 >= (double)v307 ) { v82 = v309; v309 = -v309; if ( v309 > v81 ) { v307 = v298 * v311 - v314 * v70; if ( v307 < (double)v309 ) return 0; v307 = (v82 + v81) * -v295 / (v307 - v81); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 13; v308 = -1; } v77 = v313; } } else { v307 = v298 * v311 - v314 * v70; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v81) * v295 / (v307 - v81); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 13; v308 = 1; } } v307 = v301 * v312 - v315 * v300; v309 = *(float *)(a4 + 52) * v279 + v277 * *(float *)(a4 + 60); v83 = v309; v309 = *(float *)(a2 + 56) * v272 + *(float *)(a2 + 52) * v275; v309 = v83 + v309; v84 = v307; if ( v309 < (double)v307 ) { v307 = v298 * v312 - v315 * v70; if ( v307 > (double)v309 ) return 0; v307 = (v309 - v84) * v295 / (v307 - v84); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 14; v85 = v316; v308 = 1; goto LABEL_141; } goto LABEL_145; } v86 = v309; v309 = -v309; if ( v309 <= v84 ) { LABEL_145: v85 = v316; goto LABEL_141; } v307 = v298 * v312 - v315 * v70; if ( v307 < (double)v309 ) return 0; v307 = (v86 + v84) * -v295 / (v307 - v84); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 14; v308 = -1; } v77 = v313; v85 = v316; LABEL_141: v307 = v301 * v77 - v85 * v300; v309 = *(float *)(a4 + 56) * v277 + *(float *)(a4 + 52) * v278; v87 = v309; v309 = *(float *)(a2 + 56) * v273 + *(float *)(a2 + 52) * v276; v309 = v87 + v309; v88 = v307; if ( v309 >= (double)v307 ) { v91 = v309; v309 = -v309; if ( v309 <= v88 ) { LABEL_153: v90 = 1.0; v89 = v316; goto LABEL_154; } v307 = v298 * v77 - v70 * v316; if ( v307 >= (double)v309 ) { v307 = (v91 + v88) * -v295 / (v307 - v88); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 15; v308 = -1; v90 = 1.0; v89 = v316; goto LABEL_152; } goto LABEL_153; } return 0; } v307 = v298 * v77 - v70 * v85; if ( v307 > (double)v309 ) return 0; v89 = v85; v307 = (v309 - v88) * v295 / (v307 - v88); if ( *(float *)a6 < (double)v307 ) { *(float *)a6 = v307; v296 = 15; v90 = 1.0; v308 = 1; goto LABEL_152; } v90 = 1.0; LABEL_154: if ( v296 <= 0xF ) { LABEL_152: switch ( v296 ) { case 0u: v94 = (float *)v283; v303 = *(float *)(a4 + 4) + *(float *)(a2 + 4); v304 = *(float *)(a4 + 8) + *(float *)(a2 + 8); v305 = *(float *)(a4 + 12) + *(float *)(a2 + 12); v291 = v303 * 0.5; v95 = v304; *(float *)v283 = v291; v292 = v95 * 0.5; v94[1] = v292; v293 = 0.5 * v305; v94[2] = v293; if ( !a8 ) return 1; v303 = *v94 - *(float *)(a2 + 4); v304 = v94[1] - *(float *)(a2 + 8); v96 = v304; v97 = v94[2]; v98 = v290; v99 = v97 - *(float *)(a2 + 12); *v290 = v303; v98[1] = v96; v305 = v99; v98[2] = v305; break; case 1u: case 2u: case 3u: v100 = v43; v101 = v43 < *(&v311 + 3 * v296 - 3); LODWORD(v310) = 4 * (3 * v296 - 3); if ( v101 ) { LODWORD(v306) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } else if ( v43 <= *(float *)((char *)&v311 + LODWORD(v310)) ) { v297 = v43; } else { v297 = (double)v308 * *(float *)(a4 + 52); } if ( v43 >= *(float *)((char *)&v312 + LODWORD(v310)) ) { if ( v43 <= *(float *)((char *)&v312 + LODWORD(v310)) ) v298 = v43; else v298 = (double)v308 * *(float *)(a4 + 56); } else { LODWORD(v306) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } if ( v43 >= *(float *)((char *)&v313 + LODWORD(v310)) ) { if ( v43 <= *(float *)((char *)&v313 + LODWORD(v310)) ) goto LABEL_177; v102 = (double)v308; } else { LODWORD(v306) = -v308; v102 = (double)-v308; } v100 = v102 * *(float *)(a4 + 60); LABEL_177: v299 = v100; v103 = v297; v104 = v298; v105 = v299; *(float *)v283 = *(float *)(a4 + 40) * v299 + *(float *)(a4 + 28) * v298 + *(float *)a6 * *(float *)v284 + *(float *)(a4 + 4) + v297 * *v289; *(float *)(v283 + 4) = *(float *)a6 * *(float *)(v284 + 4) + *(float *)(a4 + 8) + *(float *)(a4 + 20) * v103 + *(float *)(a4 + 32) * v104 + *(float *)(a4 + 44) * v105; v106 = v283; v107 = v284; *(float *)(v283 + 8) = v104 * *(float *)(a4 + 36) + v103 * *(float *)(a4 + 24) + *(float *)a6 * *(float *)(v284 + 8) + *(float *)(a4 + 12) + v105 * *(float *)(a4 + 48); sub_8412A0(v295, a4, v107, a2, a3, a6, v106); if ( !a8 ) return 1; if ( v308 < 0 ) { v303 = -*(float *)((char *)v11 + LODWORD(v310)); v304 = -*(float *)((char *)v11 + LODWORD(v310) + 4); v108 = *(float *)((char *)v11 + LODWORD(v310) + 8); goto LABEL_180; } v112 = v310; v109 = v290; *v290 = *(float *)((char *)v11 + LODWORD(v310)); v109[1] = *(float *)((char *)v11 + LODWORD(v112) + 4); v113 = *(_DWORD *)((char *)v11 + LODWORD(v112) + 8); goto LABEL_182; case 4u: case 5u: case 6u: v118 = v43; if ( v43 >= *(&v307 + v296) ) { if ( v43 <= *(&v307 + v296) ) { v300 = v43; } else { LODWORD(v310) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } } else { v300 = (double)v308 * *(float *)(a2 + 52); } if ( v43 >= *(&v310 + v296) ) { if ( v43 <= *(&v310 + v296) ) { v301 = v43; } else { LODWORD(v310) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } } else { v301 = (double)v308 * *(float *)(a2 + 56); } if ( v43 >= *(&v313 + v296) ) { if ( v43 <= *(&v313 + v296) ) goto LABEL_199; LODWORD(v310) = -v308; v119 = (double)-v308; } else { v119 = (double)v308; } v118 = v119 * *(float *)(a2 + 60); LABEL_199: v302 = v118; v120 = v283; v121 = v283; v122 = v300; v123 = v301; v124 = v302; *(float *)v283 = *(float *)(a2 + 40) * v302 + *(float *)(a2 + 28) * v301 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v300 * *v11; *(float *)(v120 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v122 + *(float *)(a2 + 32) * v123 + *(float *)(a2 + 44) * v124; v125 = v284; *(float *)(v120 + 8) = v123 * *(float *)(a2 + 36) + v122 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v124 * *(float *)(a2 + 48); sub_8412A0(v295, a2, a3, a4, v125, a6, v121); if ( !a8 ) return 1; v126 = 3 * v296 - 12; if ( v308 >= 0 ) { v129 = v289[v126]; v130 = (int)&v289[v126]; v109 = v290; *v290 = v129; v109[1] = *(float *)(v130 + 4); v113 = *(_DWORD *)(v130 + 8); LABEL_182: *((_DWORD *)v109 + 2) = v113; } else { v127 = v289[v126]; v128 = (int)&v289[v126]; v303 = -v127; v304 = -*(float *)(v128 + 4); v108 = *(float *)(v128 + 8); LABEL_180: v109 = v290; v305 = -v108; v110 = v304; *v290 = v303; v111 = v305; v109[1] = v110; v109[2] = v111; } v303 = -*v109; v304 = -v109[1]; v114 = v304; v115 = v109[2]; v116 = v270; *v270 = v303; v305 = -v115; v117 = v305; v116[1] = v114; v116[2] = v117; return 1; case 7u: if ( v317 <= v43 ) { if ( v317 >= v43 ) v301 = v43; else v301 = (double)v308 * *(float *)(a2 + 56); } else { LODWORD(v310) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } if ( v314 <= v43 ) { if ( v314 >= v43 ) { v302 = v43; } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } } else { v302 = (double)v308 * *(float *)(a2 + 60); } if ( v77 <= v43 ) { if ( v77 >= v43 ) v298 = v43; else v298 = (double)v308 * *(float *)(a4 + 56); } else { LODWORD(v310) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } if ( v312 <= v43 ) { if ( v312 >= v43 ) { v299 = v43; } else { LODWORD(v310) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } } else { v299 = (double)v308 * *(float *)(a4 + 60); } v309 = v90 - v311 * v311; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v300 = v43; v134 = v301; v133 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = v291 * *v289 + v292 * v289[1] + v293 * v289[2]; v310 = v301 * v314 + v302 * v317 - v310; v131 = v310 * v311; v310 = v292 * *(float *)(a2 + 20) + v291 * *(float *)(a2 + 16) + v293 * *(float *)(a2 + 24); v132 = (v131 + v310 + v298 * v312 + v299 * v313) / v309; v133 = v302; v300 = v132; v134 = v301; } v135 = v283; v136 = v283; v137 = v300; *(float *)v283 = *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v300 * *v11 + *(float *)(a2 + 28) * v134 + *(float *)(a2 + 40) * v133; *(float *)(v135 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v137 + *(float *)(a2 + 32) * v134 + *(float *)(a2 + 44) * v133; v138 = v284; *(float *)(v135 + 8) = v133 * *(float *)(a2 + 48) + v134 * *(float *)(a2 + 36) + v137 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12); sub_8412A0(v295, a2, a3, a4, v138, a6, v136); if ( !a8 ) return 1; v254 = v289; if ( v308 < 0 ) { v139 = sub_61E8E0(v11, &v269, v289); v303 = -*v139; v304 = -v139[1]; v140 = v304; v141 = v139[2]; v142 = v290; *v290 = v303; v305 = -v141; v143 = v305; v142[1] = v140; v142[2] = v143; break; } v144 = &v291; goto LABEL_230; case 8u: if ( v318 <= v43 ) { if ( v318 >= v43 ) v301 = v43; else v301 = (double)v308 * *(float *)(a2 + 56); } else { LODWORD(v310) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } if ( v315 <= v43 ) { if ( v315 >= v43 ) { v302 = v43; } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } } else { v302 = (double)v308 * *(float *)(a2 + 60); } if ( v77 <= v43 ) { if ( v77 >= v43 ) { v297 = v43; } else { LODWORD(v310) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } } else { v297 = (double)v308 * *(float *)(a4 + 52); } if ( v311 <= v43 ) { if ( v311 >= v43 ) v299 = v43; else v299 = (double)v308 * *(float *)(a4 + 60); } else { LODWORD(v310) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } v309 = v90 - v312 * v312; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v300 = v43; v150 = v301; v149 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = v291 * *(float *)LODWORD(v306) + v292 * *(float *)(LODWORD(v306) + 4) + v293 * *(float *)(LODWORD(v306) + 8); v310 = v301 * v315 + v302 * v318 - v310; v147 = v310 * v312; v310 = v292 * *(float *)(a2 + 20) + v291 * *(float *)(a2 + 16) + v293 * *(float *)(a2 + 24); v148 = (v147 + v310 + v297 * v311 + v299 * v313) / v309; v149 = v302; v300 = v148; v150 = v301; } v151 = v283; v152 = v283; v153 = v300; *(float *)v283 = *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v300 * *v11 + *(float *)(a2 + 28) * v150 + *(float *)(a2 + 40) * v149; *(float *)(v151 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v153 + *(float *)(a2 + 32) * v150 + *(float *)(a2 + 44) * v149; v154 = v284; *(float *)(v151 + 8) = v149 * *(float *)(a2 + 48) + v150 * *(float *)(a2 + 36) + v153 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12); sub_8412A0(v295, a2, a3, a4, v154, a6, v152); if ( !a8 ) return 1; v254 = (float *)LODWORD(v306); if ( v308 < 0 ) { v155 = sub_61E8E0(v11, &v280, (float *)LODWORD(v306)); v303 = -*v155; v304 = -v155[1]; v156 = v304; v157 = v155[2]; v158 = v290; *v290 = v303; v305 = -v157; v159 = v305; v158[1] = v156; v158[2] = v159; break; } v144 = &v285; goto LABEL_230; case 9u: if ( v319 <= v43 ) { if ( v319 >= v43 ) v301 = v43; else v301 = (double)v308 * *(float *)(a2 + 56); } else { LODWORD(v310) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } v160 = v90; v161 = v89; v162 = v160; if ( v161 <= v43 ) { if ( v161 >= v43 ) { v302 = v43; } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } } else { v302 = (double)v308 * *(float *)(a2 + 60); } if ( v312 <= v43 ) { if ( v312 >= v43 ) v297 = v43; else v297 = (double)v308 * *(float *)(a4 + 52); } else { LODWORD(v310) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } if ( v311 <= v43 ) { if ( v311 >= v43 ) { v298 = v43; } else { LODWORD(v310) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } } else { v298 = (double)v308 * *(float *)(a4 + 56); } v309 = v162 - v77 * v77; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v300 = v43; v166 = v301; v165 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = *(float *)LODWORD(v294) * v291 + v292 * *(float *)(LODWORD(v294) + 4) + v293 * *(float *)(LODWORD(v294) + 8); v310 = v161 * v301 + v302 * v319 - v310; v163 = v310 * v313; v310 = v293 * *(float *)(a2 + 24) + v292 * *(float *)(a2 + 20) + v291 * *(float *)(a2 + 16); v164 = (v163 + v310 + v297 * v311 + v298 * v312) / v309; v165 = v302; v300 = v164; v166 = v301; } v167 = v283; v168 = v283; v169 = v300; *(float *)v283 = *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v300 * *v11 + *(float *)(a2 + 28) * v166 + *(float *)(a2 + 40) * v165; *(float *)(v167 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v169 + *(float *)(a2 + 32) * v166 + *(float *)(a2 + 44) * v165; v170 = v284; *(float *)(v167 + 8) = v165 * *(float *)(a2 + 48) + v166 * *(float *)(a2 + 36) + v169 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12); sub_8412A0(v295, a2, a3, a4, v170, a6, v168); if ( !a8 ) return 1; v254 = (float *)LODWORD(v294); if ( v308 < 0 ) { v171 = sub_61E8E0(v11, &v297, (float *)LODWORD(v294)); v303 = -*v171; v304 = -v171[1]; v172 = v304; v173 = v171[2]; v174 = v290; *v290 = v303; v305 = -v173; v175 = v305; v174[1] = v172; v174[2] = v175; break; } v144 = &v300; LABEL_230: v145 = sub_61E8E0(v11, v144, v254); goto LABEL_231; case 0xAu: if ( v317 <= v43 ) { if ( v317 >= v43 ) { v300 = v43; } else { LODWORD(v310) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } } else { v300 = (double)v308 * *(float *)(a2 + 52); } if ( v311 <= v43 ) { if ( v311 >= v43 ) v302 = v43; else v302 = (double)v308 * *(float *)(a2 + 60); } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } if ( v89 <= v43 ) { if ( v89 >= v43 ) v298 = v43; else v298 = (double)v308 * *(float *)(a4 + 56); } else { LODWORD(v310) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } if ( v315 <= v43 ) { if ( v315 >= v43 ) { v299 = v43; } else { LODWORD(v310) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } } else { v299 = (double)v308 * *(float *)(a4 + 60); } v309 = v90 - v314 * v314; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v301 = v43; v179 = v300; v178 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = v291 * *v289 + v292 * v289[1] + v293 * v289[2]; v310 = v300 * v311 + v302 * v317 - v310; v176 = v310 * v314; v310 = v292 * v288[1] + v291 * *v288 + v293 * v288[2]; v177 = (v176 + v310 + v298 * v315 + v299 * v316) / v309; v178 = v302; v301 = v177; v179 = v300; } v180 = v283; v181 = v283; v182 = v301; *(float *)v283 = *(float *)(a2 + 28) * v301 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v179 * *v11 + *(float *)(a2 + 40) * v178; *(float *)(v180 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v179 + *(float *)(a2 + 32) * v182 + *(float *)(a2 + 44) * v178; v183 = v284; *(float *)(v180 + 8) = v178 * *(float *)(a2 + 48) + v179 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v182 * *(float *)(a2 + 36); sub_8412A0(v295, a2, a3, a4, v183, a6, v181); if ( !a8 ) return 1; v255 = v289; if ( v308 < 0 ) { v184 = &v260; goto LABEL_312; } v145 = sub_61E8E0(v288, (float *)&v259, v289); goto LABEL_231; case 0xBu: if ( v318 <= v43 ) { if ( v318 >= v43 ) { v300 = v43; } else { LODWORD(v310) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } } else { v300 = (double)v308 * *(float *)(a2 + 52); } if ( v312 <= v43 ) { if ( v312 >= v43 ) v302 = v43; else v302 = (double)v308 * *(float *)(a2 + 60); } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } if ( v89 <= v43 ) { if ( v89 >= v43 ) { v297 = v43; } else { LODWORD(v310) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } } else { v297 = (double)v308 * *(float *)(a4 + 52); } if ( v314 <= v43 ) { if ( v314 >= v43 ) v299 = v43; else v299 = (double)v308 * *(float *)(a4 + 60); } else { LODWORD(v310) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } v309 = v90 - v315 * v315; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v301 = v43; v193 = v300; v192 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = v292 * *(float *)(LODWORD(v306) + 4) + v291 * *(float *)LODWORD(v306) + v293 * *(float *)(LODWORD(v306) + 8); v310 = v300 * v312 + v302 * v318 - v310; v190 = v310 * v315; v310 = v292 * v288[1] + v291 * *v288 + v293 * v288[2]; v191 = (v190 + v310 + v297 * v314 + v299 * v316) / v309; v192 = v302; v301 = v191; v193 = v300; } v194 = v283; v195 = v283; v196 = v301; *(float *)v283 = *(float *)(a2 + 28) * v301 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v193 * *v11 + *(float *)(a2 + 40) * v192; *(float *)(v194 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v193 + *(float *)(a2 + 32) * v196 + *(float *)(a2 + 44) * v192; v197 = v284; *(float *)(v194 + 8) = v192 * *(float *)(a2 + 48) + v193 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v196 * *(float *)(a2 + 36); sub_8412A0(v295, a2, a3, a4, v197, a6, v195); if ( !a8 ) return 1; v255 = (float *)LODWORD(v306); if ( v308 < 0 ) { v184 = &v257; goto LABEL_312; } v145 = sub_61E8E0(v288, (float *)&v266, (float *)LODWORD(v306)); goto LABEL_231; case 0xCu: if ( v319 <= v43 ) { if ( v319 >= v43 ) { v300 = v43; } else { LODWORD(v310) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } } else { v300 = (double)v308 * *(float *)(a2 + 52); } v198 = v90; v199 = v77; v200 = v198; if ( v199 <= v43 ) { if ( v199 >= v43 ) v302 = v43; else v302 = (double)v308 * *(float *)(a2 + 60); } else { LODWORD(v310) = -v308; v302 = (double)-v308 * *(float *)(a2 + 60); } if ( v315 <= v43 ) { if ( v315 >= v43 ) v297 = v43; else v297 = (double)v308 * *(float *)(a4 + 52); } else { LODWORD(v310) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } if ( v314 <= v43 ) { if ( v314 >= v43 ) { v298 = v43; } else { LODWORD(v310) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } } else { v298 = (double)v308 * *(float *)(a4 + 56); } v201 = v199; v202 = v200; v203 = v201; v309 = v202 - v89 * v89; v310 = fabs(v309); if ( v310 <= 0.000001 ) { v301 = v43; v207 = v300; v206 = v302; } else { v310 = *(float *)a6; v303 = v280 * v310; v304 = v281 * v310; v305 = v310 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v310 = *(float *)LODWORD(v294) * v291 + v292 * *(float *)(LODWORD(v294) + 4) + v293 * *(float *)(LODWORD(v294) + 8); v310 = v203 * v300 + v302 * v319 - v310; v204 = v310 * v316; v310 = v293 * v288[2] + v292 * v288[1] + v291 * *v288; v205 = (v204 + v310 + v297 * v314 + v298 * v315) / v309; v206 = v302; v301 = v205; v207 = v300; } v208 = v283; v209 = v283; v210 = v301; *(float *)v283 = *(float *)(a2 + 28) * v301 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v207 * *v11 + *(float *)(a2 + 40) * v206; *(float *)(v208 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v207 + *(float *)(a2 + 32) * v210 + *(float *)(a2 + 44) * v206; v211 = v284; *(float *)(v208 + 8) = v206 * *(float *)(a2 + 48) + v207 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v210 * *(float *)(a2 + 36); sub_8412A0(v295, a2, a3, a4, v211, a6, v209); if ( !a8 ) return 1; v255 = (float *)LODWORD(v294); if ( v308 >= 0 ) { v145 = sub_61E8E0(v288, (float *)&v264, (float *)LODWORD(v294)); goto LABEL_231; } v184 = &v258; LABEL_312: v185 = sub_61E8E0(v288, (float *)v184, v255); v303 = -*v185; v304 = -v185[1]; v186 = v304; v187 = v185[2]; v188 = v290; *v290 = v303; v305 = -v187; v189 = v305; v188[1] = v186; v188[2] = v189; break; case 0xDu: if ( v314 <= v43 ) { if ( v314 >= v43 ) v300 = v43; else v300 = (double)v308 * *(float *)(a2 + 52); } else { LODWORD(v306) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } if ( v311 <= v43 ) { if ( v311 >= v43 ) { v301 = v43; } else { LODWORD(v306) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } } else { v301 = (double)v308 * *(float *)(a2 + 56); } if ( v319 <= v43 ) { if ( v319 >= v43 ) v298 = v43; else v298 = (double)v308 * *(float *)(a4 + 56); } else { LODWORD(v306) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } if ( v318 <= v43 ) { if ( v318 >= v43 ) { v299 = v43; } else { LODWORD(v306) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } } else { v299 = (double)v308 * *(float *)(a4 + 60); } v309 = v90 - v317 * v317; v306 = fabs(v309); if ( v306 <= 0.000001 ) { v302 = v43; v215 = v300; v214 = v301; } else { v306 = *(float *)a6; v303 = v280 * v306; v304 = v281 * v306; v305 = v306 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v306 = v291 * *v289 + v292 * v289[1] + v293 * v289[2]; v306 = v300 * v311 + v301 * v314 - v306; v212 = v306 * v317; v306 = v292 * *(float *)(LODWORD(v310) + 4) + v291 * *(float *)LODWORD(v310) + v293 * *(float *)(LODWORD(v310) + 8); v213 = (v212 + v306 + v298 * v318 + v299 * v319) / v309; v214 = v301; v302 = v213; v215 = v300; } v216 = v283; v217 = v283; v218 = v302; *(float *)v283 = *(float *)(a2 + 40) * v302 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v215 * *v11 + *(float *)(a2 + 28) * v214; *(float *)(v216 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v215 + *(float *)(a2 + 32) * v214 + *(float *)(a2 + 44) * v218; v219 = v284; *(float *)(v216 + 8) = v214 * *(float *)(a2 + 36) + v215 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v218 * *(float *)(a2 + 48); sub_8412A0(v295, a2, a3, a4, v219, a6, v217); if ( !a8 ) return 1; v256 = v289; if ( v308 < 0 ) { v220 = &v268; goto LABEL_448; } v145 = sub_61E8E0((float *)LODWORD(v310), (float *)&v262, v289); goto LABEL_231; case 0xEu: if ( v315 <= v43 ) { if ( v315 >= v43 ) v300 = v43; else v300 = (double)v308 * *(float *)(a2 + 52); } else { LODWORD(v294) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } if ( v312 <= v43 ) { if ( v312 >= v43 ) { v301 = v43; } else { LODWORD(v294) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } } else { v301 = (double)v308 * *(float *)(a2 + 56); } if ( v319 <= v43 ) { if ( v319 >= v43 ) { v297 = v43; } else { LODWORD(v294) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } } else { v297 = (double)v308 * *(float *)(a4 + 52); } if ( v317 <= v43 ) { if ( v317 >= v43 ) v299 = v43; else v299 = (double)v308 * *(float *)(a4 + 60); } else { LODWORD(v294) = -v308; v299 = (double)-v308 * *(float *)(a4 + 60); } v309 = v90 - v318 * v318; v294 = fabs(v309); if ( v294 <= 0.000001 ) { v302 = v43; v224 = v300; v223 = v301; } else { v294 = *(float *)a6; v303 = v280 * v294; v304 = v281 * v294; v305 = v294 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v294 = v292 * *(float *)(LODWORD(v306) + 4) + v291 * *(float *)LODWORD(v306) + v293 * *(float *)(LODWORD(v306) + 8); v294 = v300 * v312 + v301 * v315 - v294; v221 = v294 * v318; v294 = v292 * *(float *)(LODWORD(v310) + 4) + v291 * *(float *)LODWORD(v310) + v293 * *(float *)(LODWORD(v310) + 8); v222 = (v221 + v294 + v297 * v317 + v299 * v319) / v309; v223 = v301; v302 = v222; v224 = v300; } v225 = v283; v226 = v283; v227 = v302; *(float *)v283 = *(float *)(a2 + 40) * v302 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v224 * *v11 + *(float *)(a2 + 28) * v223; *(float *)(v225 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v224 + *(float *)(a2 + 32) * v223 + *(float *)(a2 + 44) * v227; v228 = v284; *(float *)(v225 + 8) = v223 * *(float *)(a2 + 36) + v224 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v227 * *(float *)(a2 + 48); sub_8412A0(v295, a2, a3, a4, v228, a6, v226); if ( !a8 ) return 1; v256 = (float *)LODWORD(v306); if ( v308 < 0 ) { v220 = &v267; goto LABEL_448; } v145 = sub_61E8E0((float *)LODWORD(v310), (float *)&v265, (float *)LODWORD(v306)); goto LABEL_231; case 0xFu: v229 = v90; v230 = v89; v231 = v229; if ( v230 <= v43 ) { if ( v230 >= v43 ) v300 = v43; else v300 = (double)v308 * *(float *)(a2 + 52); } else { LODWORD(v306) = -v308; v300 = (double)-v308 * *(float *)(a2 + 52); } v232 = v230; v233 = v77; v234 = v232; if ( v233 <= v43 ) { if ( v233 >= v43 ) { v301 = v43; } else { LODWORD(v306) = -v308; v301 = (double)-v308 * *(float *)(a2 + 56); } } else { v301 = (double)v308 * *(float *)(a2 + 56); } if ( v318 <= v43 ) { if ( v318 >= v43 ) v297 = v43; else v297 = (double)v308 * *(float *)(a4 + 52); } else { LODWORD(v306) = -v308; v297 = (double)-v308 * *(float *)(a4 + 52); } if ( v317 <= v43 ) { if ( v317 >= v43 ) { v298 = v43; } else { LODWORD(v306) = -v308; v298 = (double)-v308 * *(float *)(a4 + 56); } } else { v298 = (double)v308 * *(float *)(a4 + 56); } v235 = v233; v236 = v231 - v319 * v319; v237 = v235; v309 = v236; v306 = fabs(v309); if ( v306 <= 0.000001 ) { v302 = v43; v241 = v300; v240 = v301; } else { v306 = *(float *)a6; v303 = v280 * v306; v304 = v281 * v306; v305 = v306 * v282; v291 = v285 + v303; v292 = v304 + v286; v293 = v305 + v287; v306 = v292 * *(float *)(LODWORD(v294) + 4) + v291 * *(float *)LODWORD(v294) + v293 * *(float *)(LODWORD(v294) + 8); v306 = v234 * v301 + v237 * v300 - v306; v238 = v306 * v319; v306 = v292 * *(float *)(LODWORD(v310) + 4) + v291 * *(float *)LODWORD(v310) + v293 * *(float *)(LODWORD(v310) + 8); v239 = (v238 + v306 + v297 * v317 + v298 * v318) / v309; v240 = v301; v302 = v239; v241 = v300; } v242 = v283; v243 = v283; v244 = v302; *(float *)v283 = *(float *)(a2 + 40) * v302 + *(float *)a3 * *(float *)a6 + *(float *)(a2 + 4) + v241 * *v11 + *(float *)(a2 + 28) * v240; *(float *)(v242 + 4) = *(float *)a6 * *(float *)(a3 + 4) + *(float *)(a2 + 8) + *(float *)(a2 + 20) * v241 + *(float *)(a2 + 32) * v240 + *(float *)(a2 + 44) * v244; v245 = v284; *(float *)(v242 + 8) = v240 * *(float *)(a2 + 36) + v241 * *(float *)(a2 + 24) + *(float *)a6 * *(float *)(a3 + 8) + *(float *)(a2 + 12) + v244 * *(float *)(a2 + 48); sub_8412A0(v295, a2, a3, a4, v245, a6, v243); if ( !a8 ) return 1; v256 = (float *)LODWORD(v294); if ( v308 >= 0 ) { v145 = sub_61E8E0((float *)LODWORD(v310), (float *)&v261, (float *)LODWORD(v294)); LABEL_231: v146 = v290; *v290 = *v145; v146[1] = v145[1]; v146[2] = v145[2]; } else { v220 = &v263; LABEL_448: v246 = sub_61E8E0((float *)LODWORD(v310), (float *)v220, v256); v303 = -*v246; v304 = -v246[1]; v247 = v304; v248 = v246[2]; v249 = v290; *v290 = v303; v305 = -v248; v250 = v305; v249[1] = v247; v249[2] = v250; } break; } } if ( a8 ) { v92 = v290; v310 = sub_4E1760(v290); v93 = v310; v310 = v310 - 1.0; v310 = fabs(v310); if ( v310 > 0.00000011920929 ) { if ( v93 <= 0.00000011920929 ) { *(_DWORD *)v92 = dword_ABD48C; *((_DWORD *)v92 + 1) = dword_ABD490; *((_DWORD *)v92 + 2) = dword_ABD494; } else { sub_4430B0(v92); } } v251 = v270; v303 = -*v92; v304 = -v92[1]; v252 = v304; v253 = v92[2]; *v270 = v303; v251[1] = v252; v305 = -v253; v251[2] = v305; } return 1; } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (00844BB0) -------------------------------------------------------- unsigned int __stdcall sub_844BB0(char ArgList, int a2) { int v2; // edi unsigned int v3; // kr00_4 _DWORD *v4; // esi unsigned int v5; // edi v2 = ArgList; v3 = strlen((const char *)ArgList); *(_DWORD *)&ArgList = operator new(v3 + 10); sub_7FF6E0((char *)ArgList, v3 + 10, "%s = BOX_BV", v2); v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 12); if ( v5 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v5 + *(_DWORD *)(a2 + 20)); return sub_823870(v4, v5, &ArgList); } //----- (00844C10) -------------------------------------------------------- BOOL __thiscall sub_844C10(float *this, float *a2) { float *v2; // ebx float *v3; // edi BOOL result; // eax v2 = this; v3 = this + 7; result = sub_87C4A0(this + 7, a2); if ( (_BYTE)result ) { result = 1; qmemcpy(v3, a2, 0x34u); ++*((_DWORD *)v2 + 20); *((_BYTE *)v2 + 12) = 1; } return result; } //----- (00844C50) -------------------------------------------------------- int __thiscall sub_844C50(_DWORD **this) { return (*(int (**)(void))(*this[2] + 16))(); } //----- (00844C60) -------------------------------------------------------- int __thiscall sub_844C60(int this, void *a2, int a3, int a4, int a5, int a6) { int v6; // esi float *v7; // eax float *v8; // eax float *v9; // eax v6 = this; *(_DWORD *)this = &NiOBBRoot::`vftable'; if ( (unsigned __int16)a2 <= 1u ) { v9 = (float *)operator new(0x98u); if ( v9 ) { v8 = sub_84C460(v9, v6, a3, a4, a5, 0); goto LABEL_7; } LABEL_6: v8 = 0; goto LABEL_7; } v7 = (float *)operator new(0x8Cu); if ( !v7 ) goto LABEL_6; v8 = sub_84F6E0(v7, v6, a2, a3, a4, a5, a6); LABEL_7: *(_DWORD *)(v6 + 8) = v8; *(float *)(v6 + 4) = 0.0; *(_DWORD *)(v6 + 16) = dword_BA45C0; *(_DWORD *)(v6 + 20) = dword_BA45C4; *(_DWORD *)(v6 + 24) = dword_BA45C8; sub_87C3C0((float *)(v6 + 28)); *(_BYTE *)(v6 + 12) = 0; *(_DWORD *)(v6 + 80) = 0; return v6; } // A23B30: using guessed type void *NiOBBRoot::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00844D10) -------------------------------------------------------- _DWORD *__thiscall sub_844D10(void *this, char a2) { _DWORD *v2; // esi void (__stdcall ***v3)(signed int); // ecx v2 = this; v3 = (void (__stdcall ***)(signed int))*((_DWORD *)this + 2); *v2 = &NiOBBRoot::`vftable'; if ( v3 ) (**v3)(1); if ( a2 & 1 ) operator delete(v2); return v2; } // A23B30: using guessed type void *NiOBBRoot::`vftable'; //----- (00844D50) -------------------------------------------------------- char __thiscall sub_844D50(int this, int a2, int a3, int a4, int a5, int a6) { char result; // al if ( this == a2 ) result = 0; else result = (*(int (__thiscall **)(_DWORD, _DWORD, int, int, int, int, _DWORD, _DWORD))(**(_DWORD **)(this + 8) + 8))( *(_DWORD *)(this + 8), *(_DWORD *)(a2 + 8), a3, a4, a5, a6, *(_DWORD *)(this + 80), *(_DWORD *)(a2 + 80)); return result; } //----- (00844D90) -------------------------------------------------------- int __thiscall sub_844D90(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { int result; // eax if ( this == a2 ) result = 0; else result = (*(int (__thiscall **)(_DWORD, _DWORD, int, int, int, int, int, int, _DWORD, _DWORD, int))(**(_DWORD **)(this + 8) + 12))( *(_DWORD *)(this + 8), *(_DWORD *)(a2 + 8), a3, a4, a5, a6, a7, a8, *(_DWORD *)(this + 80), *(_DWORD *)(a2 + 80), a9); return result; } //----- (00844DE0) -------------------------------------------------------- double __cdecl sub_844DE0(float *a1, float *a2, float *a3, float *a4) { float v4; // ST00_4 float v5; // ST04_4 float v6; // ST08_4 float v7; // ST14_4 float v8; // ST0C_4 float v9; // ST10_4 double v10; // st7 double v11; // st5 double v12; // st6 float *v13; // ecx double v14; // st4 double v15; // st3 double v16; // st2 double v17; // st1 __int16 v18; // fps bool v19; // c0 char v20; // c2 bool v21; // c3 char v22; // ah bool v23; // c0 bool v24; // c3 double result; // st7 double v26; // st2 double v27; // st2 float v28; // [esp+18h] [ebp-4h] float v29; // [esp+24h] [ebp+8h] float v30; // [esp+24h] [ebp+8h] float v31; // [esp+24h] [ebp+8h] float v32; // [esp+24h] [ebp+8h] float v33; // [esp+24h] [ebp+8h] float v34; // [esp+24h] [ebp+8h] float v35; // [esp+24h] [ebp+8h] float v36; // [esp+24h] [ebp+8h] float v37; // [esp+24h] [ebp+8h] float v38; // [esp+24h] [ebp+8h] float v39; // [esp+24h] [ebp+8h] float v40; // [esp+24h] [ebp+8h] float v41; // [esp+24h] [ebp+8h] float v42; // [esp+24h] [ebp+8h] float v43; // [esp+24h] [ebp+8h] float v44; // [esp+24h] [ebp+8h] float v45; // [esp+24h] [ebp+8h] float v46; // [esp+24h] [ebp+8h] float v47; // [esp+24h] [ebp+8h] float v48; // [esp+24h] [ebp+8h] float v49; // [esp+24h] [ebp+8h] float v50; // [esp+24h] [ebp+8h] float v51; // [esp+24h] [ebp+8h] float v52; // [esp+28h] [ebp+Ch] float v53; // [esp+28h] [ebp+Ch] float v54; // [esp+28h] [ebp+Ch] float v55; // [esp+28h] [ebp+Ch] float v56; // [esp+28h] [ebp+Ch] float v57; // [esp+28h] [ebp+Ch] float v58; // [esp+28h] [ebp+Ch] float v59; // [esp+28h] [ebp+Ch] float v60; // [esp+28h] [ebp+Ch] float v61; // [esp+28h] [ebp+Ch] float v62; // [esp+28h] [ebp+Ch] float v63; // [esp+28h] [ebp+Ch] float v64; // [esp+28h] [ebp+Ch] float v65; // [esp+28h] [ebp+Ch] float v66; // [esp+28h] [ebp+Ch] float v67; // [esp+28h] [ebp+Ch] float v68; // [esp+28h] [ebp+Ch] float v69; // [esp+28h] [ebp+Ch] float v70; // [esp+28h] [ebp+Ch] float v71; // [esp+28h] [ebp+Ch] float v72; // [esp+28h] [ebp+Ch] float v73; // [esp+28h] [ebp+Ch] float v74; // [esp+28h] [ebp+Ch] float v75; // [esp+28h] [ebp+Ch] float v76; // [esp+28h] [ebp+Ch] float v77; // [esp+28h] [ebp+Ch] float v78; // [esp+28h] [ebp+Ch] float v79; // [esp+28h] [ebp+Ch] float v80; // [esp+2Ch] [ebp+10h] float v81; // [esp+2Ch] [ebp+10h] float v82; // [esp+2Ch] [ebp+10h] float v83; // [esp+2Ch] [ebp+10h] float v84; // [esp+2Ch] [ebp+10h] float v85; // [esp+2Ch] [ebp+10h] v4 = *a2 - *a1; v5 = a2[1] - a1[1]; v6 = a2[2] - a1[2]; v7 = a2[4] * a2[4] + a2[3] * a2[3] + a2[5] * a2[5]; v29 = a2[7] * a2[4] + a2[6] * a2[3] + a2[8] * a2[5]; v28 = a2[6] * a2[6] + a2[7] * a2[7] + a2[8] * a2[8]; v8 = v5 * a2[4] + v4 * a2[3] + v6 * a2[5]; v9 = a2[6] * v4 + a2[7] * v5 + v6 * a2[8]; v52 = v5 * v5 + v4 * v4 + v6 * v6; v10 = v29; v11 = v28; v12 = v7; v30 = v28 * v7 - v29 * v29; v13 = a3; v31 = fabs(v30); v14 = v9; v15 = v8; *a3 = v9 * v10 - v8 * v28; v80 = v8 * v10 - v9 * v7; v16 = v80; *a4 = v80; v17 = v80 + *v13; v19 = v31 < v17; v20 = 0; v21 = v31 == v17; v22 = HIBYTE(v18); v23 = 0.0 < *v13; v24 = 0.0 == *v13; if ( v22 & 1 ) { if ( v23 || v24 ) { if ( v16 >= 0.0 ) { v85 = v14 + v11 - (v15 + v10); if ( v85 > 0.0 ) { v50 = v12 - v10 * 2.0 + v11; if ( v50 > (double)v85 ) { v51 = v85 / v50; *v13 = v51; *a4 = 1.0 - v51; v78 = 2.0 * v14 + v11 + v52 - v85 * *v13; } else { *v13 = 1.0; *a4 = 0.0; v78 = 2.0 * v15 + v12 + v52; } v79 = fabs(v78); result = v79; } else { *v13 = 0.0; *a4 = 1.0; v76 = v11 + v14 + v14 + v52; v77 = fabs(v76); result = v77; } } else { v46 = v14 + v10; v83 = v15 + v12; v27 = v83; if ( v46 >= (double)v83 ) { *a4 = 0.0; if ( v27 > 0.0 ) { if ( v15 < 0.0 ) { v49 = -v15 / v12; *v13 = v49; v52 = v15 * v49 + v52; } else { *v13 = 0.0; } v75 = fabs(v52); result = v75; } else { *v13 = 1.0; v73 = v12 + v15 + v15 + v52; v74 = fabs(v73); result = v74; } } else { v84 = v27 - v46; v47 = v12 - v10 * 2.0 + v11; if ( v47 > (double)v84 ) { v48 = v84 / v47; *a4 = v48; *v13 = 1.0 - v48; v71 = v12 + 2.0 * v15 + v52 - v84 * *a4; } else { *a4 = 1.0; *v13 = 0.0; v71 = 2.0 * v14 + v11 + v52; } v72 = fabs(v71); result = v72; } } } else { v42 = v15 + v10; v81 = v14 + v11; v26 = v81; if ( v42 >= (double)v81 ) { *v13 = 0.0; if ( v26 > 0.0 ) { if ( v14 < 0.0 ) { v45 = -v14 / v28; *a4 = v45; v52 = v14 * v45 + v52; } else { *a4 = 0.0; } v70 = fabs(v52); result = v70; } else { *a4 = 1.0; v68 = v11 + v14 + v14 + v52; v69 = fabs(v68); result = v69; } } else { v82 = v26 - v42; v43 = v12 - v10 * 2.0 + v11; if ( v43 > (double)v82 ) { v44 = v82 / v43; *v13 = v44; *a4 = 1.0 - v44; v66 = 2.0 * v14 + v11 + v52 - v82 * *v13; } else { *v13 = 1.0; *a4 = 0.0; v66 = 2.0 * v15 + v12 + v52; } v67 = fabs(v66); result = v67; } } } else if ( v23 || v24 ) { if ( v16 >= 0.0 ) { v40 = 1.0 / v31; *v13 = *v13 * v40; v41 = v40 * *a4; *a4 = v41; v64 = (v10 * *a4 + v12 * *v13 + 2.0 * v15) * *v13 + (v14 * 2.0 + v11 * v41 + *v13 * v10) * v41 + v52; v65 = fabs(v64); result = v65; } else { *a4 = 0.0; if ( v15 < 0.0 ) { v38 = -v15; if ( v38 < v12 ) { v39 = v38 / v12; *v13 = v39; v62 = v15 * v39 + v52; } else { *v13 = 1.0; v62 = v12 + v15 + v15 + v52; } v63 = fabs(v62); result = v63; } else { *v13 = 0.0; v61 = fabs(v52); result = v61; } } } else if ( v16 >= 0.0 ) { *v13 = 0.0; if ( v14 < 0.0 ) { v36 = -v14; if ( v36 < v11 ) { v37 = v36 / v11; *a4 = v37; v59 = v14 * v37 + v52; } else { *a4 = 1.0; v59 = v11 + v14 + v14 + v52; } v60 = fabs(v59); result = v60; } else { *a4 = 0.0; v58 = fabs(v52); result = v58; } } else if ( v15 >= 0.0 ) { *v13 = 0.0; if ( v14 < 0.0 ) { v34 = -v14; if ( v34 < v11 ) { v35 = v34 / v11; *a4 = v35; v56 = v14 * v35 + v52; } else { *a4 = 1.0; v56 = v11 + v14 + v14 + v52; } v57 = fabs(v56); result = v57; } else { *a4 = 0.0; v55 = fabs(v52); result = v55; } } else { *a4 = 0.0; v32 = -v15; if ( v32 < v12 ) { v33 = v32 / v12; *v13 = v33; v53 = v15 * v33 + v52; } else { *v13 = 1.0; v53 = v12 + v15 + v15 + v52; } v54 = fabs(v53); result = v54; } return result; } //----- (008454B0) -------------------------------------------------------- double __cdecl sub_8454B0(float *a1, float *a2, float *a3, float *a4, float *a5) { float *v5; // esi float *v6; // edi float v7; // ST2C_4 float v8; // ST30_4 float v9; // ST34_4 double v10; // st5 double v11; // st6 double v12; // st3 double v13; // st4 double v14; // st7 double v15; // rt0 double v16; // st3 double v17; // st4 double v18; // st7 __int16 v19; // fps double v20; // st5 bool v21; // c0 char v22; // c2 bool v23; // c3 char v24; // ah bool v25; // c0 char v26; // c2 bool v27; // c3 unsigned __int8 v28; // pf char v29; // ah bool v30; // c0 bool v31; // c3 float v32; // edx float v33; // eax float v34; // edx float v35; // eax float v36; // ecx float v37; // edx float v38; // eax float v39; // ecx float v41; // eax float v42; // edx float v43; // eax float v44; // edx float v45; // eax double v46; // st7 float v47; // eax float v48; // edx float v49; // eax float v50; // edx float v51; // eax float v52; // ST2C_4 double v53; // st7 float v54; // ST30_4 double v55; // st7 float v56; // ST34_4 double v57; // st7 float v58; // ST2C_4 double v59; // st7 float v60; // ST30_4 double v61; // st7 float v62; // ST34_4 double v63; // st7 double v64; // st7 float v65; // ST2C_4 double v66; // st7 float v67; // ST30_4 double v68; // st7 float v69; // ST34_4 double v70; // st7 float v71; // ST2C_4 double v72; // st7 float v73; // ST30_4 double v74; // st7 float v75; // ST34_4 double v76; // st7 float v77; // ST2C_4 double v78; // st7 float v79; // ST30_4 double v80; // st7 float v81; // ST34_4 double v82; // st7 float v83; // ST2C_4 double v84; // st7 float v85; // ST30_4 double v86; // st7 float v87; // ST34_4 double v88; // st7 __int16 v89; // fps bool v90; // c0 char v91; // c2 bool v92; // c3 char v93; // ah __int16 v94; // fps double v95; // st5 bool v96; // zf bool v97; // c0 char v98; // c2 bool v99; // c3 char v100; // ah bool v101; // c0 char v102; // c2 bool v103; // c3 float v104; // edx float v105; // eax float v106; // edx float v107; // eax float v108; // ecx float v109; // edx float v110; // eax float v111; // ecx float v112; // edx float v113; // eax float v114; // edx float v115; // eax float v116; // edx float v117; // eax float v118; // ST2C_4 double v119; // st7 float v120; // ST30_4 double v121; // st7 float v122; // ST34_4 double v123; // st7 float v124; // ST2C_4 double v125; // st7 float v126; // ST30_4 double v127; // st7 float v128; // ST34_4 double v129; // st7 float v130; // ST2C_4 double v131; // st7 float v132; // ST30_4 double v133; // st7 float v134; // ST34_4 double v135; // st7 float v136; // ST2C_4 double v137; // st7 float v138; // ST30_4 double v139; // st7 float v140; // ST34_4 double v141; // st7 float v142; // ST2C_4 double v143; // st7 float v144; // ST30_4 double v145; // st7 float v146; // ST34_4 double v147; // st7 float v148; // ST2C_4 double v149; // st7 float v150; // ST30_4 double v151; // st7 float v152; // ST34_4 char v153; // ah bool v154; // c0 bool v155; // c3 float v156; // edx float v157; // eax float v158; // edx float v159; // eax float v160; // ecx float v161; // edx float v162; // eax float v163; // ecx double v164; // st7 double v165; // st6 double v166; // st7 float v167; // ST2C_4 double v168; // st7 float v169; // ST30_4 double v170; // st7 float v171; // ST34_4 float v172; // ST2C_4 double v173; // st7 float v174; // ST30_4 double v175; // st7 float v176; // ST34_4 float v177; // ST2C_4 double v178; // st7 float v179; // ST30_4 double v180; // st7 float v181; // ST34_4 float v182; // eax float v183; // edx float v184; // eax float v185; // edx float v186; // eax float v187; // ST2C_4 double v188; // st7 float v189; // ST30_4 double v190; // st7 float v191; // ST34_4 double v192; // st7 float v193; // ST2C_4 double v194; // st7 float v195; // ST30_4 double v196; // st7 float v197; // ST34_4 double v198; // st7 float v199; // ST2C_4 double v200; // st7 float v201; // ST30_4 double v202; // st7 float v203; // ST34_4 float v204; // ST2C_4 double v205; // st7 float v206; // ST30_4 double v207; // st7 float v208; // ST34_4 double v209; // st7 float v210; // ST2C_4 double v211; // st7 float v212; // ST30_4 double v213; // st7 float v214; // ST34_4 float v215; // ST2C_4 double v216; // st7 float v217; // ST30_4 double v218; // st7 float v219; // ST34_4 float v220; // ST2C_4 double v221; // st7 float v222; // ST30_4 double v223; // st7 float v224; // ST34_4 double v225; // st7 float v226; // ST2C_4 double v227; // st7 float v228; // ST30_4 double v229; // st7 float v230; // ST34_4 float v231; // edx float v232; // eax float v233; // ecx float v234; // edx float v235; // edx float v236; // eax float v237; // ST2C_4 float v238; // ST30_4 float v239; // ST34_4 float v240; // ST2C_4 float v241; // ST30_4 float v242; // ST34_4 double v243; // st7 float v244; // ST2C_4 double v245; // st7 float v246; // ST30_4 double v247; // st7 float v248; // ST34_4 float v249; // [esp+18h] [ebp-50h] float v250; // [esp+1Ch] [ebp-4Ch] float v251; // [esp+20h] [ebp-48h] float v252; // [esp+24h] [ebp-44h] float v253; // [esp+28h] [ebp-40h] float v254; // [esp+2Ch] [ebp-3Ch] float v255; // [esp+30h] [ebp-38h] double v256; // [esp+34h] [ebp-34h] double v257; // [esp+3Ch] [ebp-2Ch] double v258; // [esp+44h] [ebp-24h] float v259; // [esp+4Ch] [ebp-1Ch] float v260; // [esp+50h] [ebp-18h] float v261; // [esp+54h] [ebp-14h] float v262; // [esp+58h] [ebp-10h] float v263; // [esp+5Ch] [ebp-Ch] float v264; // [esp+60h] [ebp-8h] float v265; // [esp+64h] [ebp-4h] float v266; // [esp+70h] [ebp+8h] float v267; // [esp+70h] [ebp+8h] float v268; // [esp+70h] [ebp+8h] float v269; // [esp+70h] [ebp+8h] float v270; // [esp+70h] [ebp+8h] float v271; // [esp+70h] [ebp+8h] float v272; // [esp+70h] [ebp+8h] float v273; // [esp+70h] [ebp+8h] float v274; // [esp+70h] [ebp+8h] float v275; // [esp+70h] [ebp+8h] float v276; // [esp+70h] [ebp+8h] float v277; // [esp+70h] [ebp+8h] float v278; // [esp+70h] [ebp+8h] float v279; // [esp+70h] [ebp+8h] float v280; // [esp+70h] [ebp+8h] float v281; // [esp+70h] [ebp+8h] float v282; // [esp+70h] [ebp+8h] float v283; // [esp+70h] [ebp+8h] float v284; // [esp+70h] [ebp+8h] float v285; // [esp+70h] [ebp+8h] float v286; // [esp+70h] [ebp+8h] float v287; // [esp+70h] [ebp+8h] float v288; // [esp+70h] [ebp+8h] float v289; // [esp+70h] [ebp+8h] float v290; // [esp+70h] [ebp+8h] float v291; // [esp+74h] [ebp+Ch] float v292; // [esp+74h] [ebp+Ch] float v293; // [esp+74h] [ebp+Ch] float v294; // [esp+74h] [ebp+Ch] float v295; // [esp+74h] [ebp+Ch] float v296; // [esp+74h] [ebp+Ch] float v297; // [esp+74h] [ebp+Ch] float v298; // [esp+74h] [ebp+Ch] float v299; // [esp+74h] [ebp+Ch] float v300; // [esp+74h] [ebp+Ch] float v301; // [esp+74h] [ebp+Ch] float v302; // [esp+74h] [ebp+Ch] float v303; // [esp+74h] [ebp+Ch] float v304; // [esp+74h] [ebp+Ch] float v305; // [esp+74h] [ebp+Ch] float v306; // [esp+74h] [ebp+Ch] float v307; // [esp+74h] [ebp+Ch] float v308; // [esp+74h] [ebp+Ch] float v309; // [esp+74h] [ebp+Ch] float v310; // [esp+74h] [ebp+Ch] float v311; // [esp+74h] [ebp+Ch] v5 = a2; v6 = a1; v252 = *a2 - *a1; v253 = a2[1] - a1[1]; v254 = a2[2] - a1[2]; v259 = a1[4] * a1[4] + a1[3] * a1[3] + a1[5] * a1[5]; v291 = a2[4] * a1[4] + a2[3] * a1[3] + a2[5] * a1[5]; v260 = -v291; v292 = v5[7] * a1[4] + v5[6] * a1[3] + a1[5] * v5[8]; v265 = -v292; v264 = v5[3] * v5[3] + v5[4] * v5[4] + v5[5] * v5[5]; v262 = v5[4] * v5[7] + v5[3] * v5[6] + v5[5] * v5[8]; v263 = v5[7] * v5[7] + v5[6] * v5[6] + v5[8] * v5[8]; v7 = v5[4] * v5[8] - v5[7] * v5[5]; v8 = v5[5] * v5[6] - v5[3] * v5[8]; v9 = v5[7] * v5[3] - v5[4] * v5[6]; v258 = a1[4]; v257 = a1[3]; v256 = a1[5]; v293 = v8 * a1[4] + v7 * a1[3] + v9 * v256; v294 = fabs(v293); v261 = v294; v295 = v9 * v9 + v8 * v8 + v7 * v7; v296 = sqrt(v295); v266 = v296; v297 = v258 * v258 + v257 * v257 + v256 * v256; v298 = sqrt(v297); v299 = v298 * v266 * 0.000009999999747378752; if ( v261 > (double)v299 ) { v10 = v263; v11 = v264; v264 = v263 * v264 - v262 * v262; v12 = v265; v13 = v260; v267 = v262 * v265 - v263 * v260; v263 = v262 * v260 - v11 * v265; v14 = v259; v261 = v265 * v260 - v262 * v259; v300 = v267 * v260 + v264 * v259 + v263 * v265; v301 = 1.0 / v300; v259 = v252 * v6[3] + v253 * v6[4] + v254 * v6[5]; v262 = --v259 * v301; v259 = v252 * v5[3] + v253 * v5[4] + v254 * v5[5]; v265 = -v259 * v301; v259 = v253 * v5[7] + v252 * v5[6] + v254 * v5[8]; v302 = -v259 * v301; *a3 = v265 * v267 + v262 * v264 + v302 * v263; v15 = v13; v259 = v10 * v14 - v12 * v12; v16 = v265; v17 = v262; *a4 = v259 * v265 + v262 * v267 + v302 * v261; v268 = v14 * v11 - v15 * v15; v303 = v17 * v263 + v16 * v261 + v268 * v302; v18 = v303; *a5 = v303; if ( *a3 < 0.0 ) { v20 = v18 + *a4; v21 = v20 < 1.0; v22 = 0; v23 = v20 == 1.0; v24 = HIBYTE(v19); v25 = 0.0 < *a4; v26 = 0; v27 = 0.0 == *a4; v28 = __SETP__(v24 & 0x41, 0); v29 = HIBYTE(v19); if ( !v28 ) { v30 = 0.0 < v18; v31 = 0.0 == v18; if ( !(v29 & 0x41) ) { if ( v30 || v31 ) { v41 = v5[1]; v249 = *v5; v42 = v5[2]; v250 = v41; v43 = v5[6]; v251 = v42; v44 = v5[7]; v252 = v43; v45 = v5[8]; v253 = v44; v254 = v45; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v271 = sub_844DE0(v6, v5, &v265, &v264); if ( v304 > (double)v271 ) { *a3 = 0.0; *a4 = v265; *a5 = v264; return v271; } } else { v32 = v5[1]; v249 = *v5; v251 = v5[2]; v33 = v5[7]; v250 = v32; v34 = v5[6]; v253 = v33; v252 = v34; v254 = v5[8]; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v35 = v5[1]; v36 = v5[2]; v249 = *v5; v37 = v5[3]; v250 = v35; v38 = v5[4]; v251 = v36; v39 = v5[5]; v252 = v37; v253 = v38; v254 = v39; v269 = sub_848800(v6, &v249, &v263, &v265); v264 = 0.0; if ( v304 > (double)v269 ) { v304 = v269; *a3 = v263; *a4 = v265; *a5 = 0.0; } v270 = sub_844DE0(v6, v5, &v265, &v264); if ( v304 > (double)v270 ) { *a3 = 0.0; *a4 = v265; *a5 = v264; return v270; } } return v304; } if ( v30 || v31 ) { v305 = sub_844DE0(v6, v5, a4, a5); *a3 = 0.0; return v305; } v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v46 = sub_844DE0(v6, v5, &v265, &v264); LABEL_19: v273 = v46; if ( v304 > (double)v273 ) { v306 = v46; v64 = 0.0; LABEL_68: *a3 = v64; *a4 = v265; *a5 = v264; return v306; } return v304; } if ( !v25 && !v27 ) { v47 = v5[1]; v249 = *v5; v48 = v5[2]; v250 = v47; v49 = v5[6]; v251 = v48; v50 = v5[7]; v252 = v49; v51 = v5[8]; v253 = v50; v254 = v51; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v52 = *v5 + v5[3]; v53 = v5[4]; v249 = v52; v54 = v53 + v5[1]; v55 = v5[2]; v250 = v54; v56 = v55 + v5[5]; v57 = v5[6]; v251 = v56; v58 = v57 - v5[3]; v59 = v5[7]; v252 = v58; v60 = v59 - v5[4]; v61 = v5[8]; v253 = v60; v62 = v61 - v5[5]; v254 = v62; v272 = sub_848800(v6, &v249, &v263, &v264); v63 = v264; v265 = 1.0 - v264; if ( v304 > (double)v272 ) { v304 = v272; *a3 = v263; *a4 = v265; *a5 = v63; } v46 = sub_844DE0(v6, v5, &v265, &v264); goto LABEL_19; } if ( v18 < 0.0 ) { v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v65 = *v5 + v5[3]; v66 = v5[4]; v249 = v65; v67 = v66 + v5[1]; v68 = v5[2]; v250 = v67; v69 = v68 + v5[5]; v70 = v5[6]; v251 = v69; v71 = v70 - v5[3]; v72 = v5[7]; v252 = v71; v73 = v72 - v5[4]; v74 = v5[8]; v253 = v73; v75 = v74 - v5[5]; v254 = v75; v274 = sub_848800(v6, &v249, &v263, &v264); v76 = v264; v265 = 1.0 - v264; if ( v304 > (double)v274 ) { v304 = v274; *a3 = v263; *a4 = v265; *a5 = v76; } v275 = sub_844DE0(v6, v5, &v265, &v264); if ( v304 > (double)v275 ) { *a3 = 0.0; *a4 = v265; *a5 = v264; return v275; } return v304; } v77 = *v5 + v5[3]; v78 = v5[4]; v249 = v77; v79 = v78 + v5[1]; v80 = v5[2]; v250 = v79; v81 = v80 + v5[5]; v82 = v5[6]; v251 = v81; v83 = v82 - v5[3]; v84 = v5[7]; v252 = v83; v85 = v84 - v5[4]; v86 = v5[8]; v253 = v85; v87 = v86 - v5[5]; v254 = v87; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 1.0 - *a5; v276 = sub_844DE0(v6, v5, &v265, &v264); if ( v304 <= (double)v276 ) return v304; v307 = v276; v88 = 0.0; LABEL_62: *a3 = v88; *a4 = v265; *a5 = v264; return v307; } v90 = 1.0 < *a3; v91 = 0; v92 = 1.0 == *a3; v93 = HIBYTE(v89); v95 = v18 + *a4; v96 = (v93 & 1) == 0; v97 = v95 < 1.0; v98 = 0; v99 = v95 == 1.0; v100 = HIBYTE(v94); v101 = 0.0 < *a4; v102 = 0; v103 = 0.0 == *a4; if ( v96 ) { if ( __SETP__(v100 & 0x41, 0) ) { if ( v101 || v103 ) { if ( v18 >= 0.0 ) { v142 = *v5 + v5[3]; v143 = v5[4]; v249 = v142; v144 = v143 + v5[1]; v145 = v5[2]; v250 = v144; v146 = v145 + v5[5]; v147 = v5[6]; v251 = v146; v148 = v147 - v5[3]; v149 = v5[7]; v252 = v148; v150 = v149 - v5[4]; v151 = v5[8]; v253 = v150; v152 = v151 - v5[5]; v254 = v152; v310 = sub_848800(v6, &v249, a3, a5); *a4 = 1.0 - *a5; return v310; } v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v130 = *v5 + v5[3]; v131 = v5[4]; v249 = v130; v132 = v131 + v5[1]; v133 = v5[2]; v250 = v132; v134 = v133 + v5[5]; v135 = v5[6]; v251 = v134; v136 = v135 - v5[3]; v137 = v5[7]; v252 = v136; v138 = v137 - v5[4]; v139 = v5[8]; v253 = v138; v140 = v139 - v5[5]; v254 = v140; v279 = sub_848800(v6, &v249, &v263, &v264); v141 = v264; v265 = 1.0 - v264; if ( v304 > (double)v279 ) { *a3 = v263; *a4 = v265; *a5 = v141; return v279; } } else { v113 = v5[1]; v249 = *v5; v114 = v5[2]; v250 = v113; v115 = v5[6]; v251 = v114; v116 = v5[7]; v252 = v115; v117 = v5[8]; v253 = v116; v254 = v117; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v118 = *v5 + v5[3]; v119 = v5[4]; v249 = v118; v120 = v119 + v5[1]; v121 = v5[2]; v250 = v120; v122 = v121 + v5[5]; v123 = v5[6]; v251 = v122; v124 = v123 - v5[3]; v125 = v5[7]; v252 = v124; v126 = v125 - v5[4]; v127 = v5[8]; v253 = v126; v128 = v127 - v5[5]; v254 = v128; v278 = sub_848800(v6, &v249, &v263, &v264); v129 = v264; v265 = 1.0 - v264; if ( v304 > (double)v278 ) { *a3 = v263; *a4 = v265; *a5 = v129; return v278; } } return v304; } if ( !v101 && !v103 ) { v249 = *v5; v104 = v5[2]; v250 = v5[1]; v105 = v5[6]; v251 = v104; v106 = v5[7]; v252 = v105; v107 = v5[8]; v253 = v106; v254 = v107; if ( v18 >= 0.0 ) { v308 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; return v308; } v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v108 = v5[1]; v109 = v5[2]; v249 = *v5; v110 = v5[3]; v250 = v108; v111 = v5[4]; v251 = v109; v112 = v5[5]; v252 = v110; v253 = v111; v254 = v112; v277 = sub_848800(v6, &v249, &v263, &v265); if ( v304 > (double)v277 ) { *a3 = v263; *a4 = v265; *a5 = 0.0; return v277; } return v304; } if ( v18 >= 0.0 ) return (float)0.0; v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v309 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; return v309; } v28 = __SETP__(v100 & 0x41, 0); v153 = HIBYTE(v94); if ( v28 ) { if ( !v101 && !v103 ) { v182 = v5[1]; v249 = *v5; v183 = v5[2]; v250 = v182; v184 = v5[6]; v251 = v183; v185 = v5[7]; v252 = v184; v186 = v5[8]; v253 = v185; v254 = v186; v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v187 = *v5 + v5[3]; v188 = v5[4]; v249 = v187; v189 = v188 + v5[1]; v190 = v5[2]; v250 = v189; v191 = v190 + v5[5]; v192 = v5[6]; v251 = v191; v193 = v192 - v5[3]; v194 = v5[7]; v252 = v193; v195 = v194 - v5[4]; v196 = v5[8]; v253 = v195; v197 = v196 - v5[5]; v254 = v197; v283 = sub_848800(v6, &v249, &v263, &v264); v198 = v264; v265 = 1.0 - v264; if ( v304 > (double)v283 ) { v304 = v283; *a3 = v263; *a4 = v265; *a5 = v198; } v199 = *v6 + v6[3]; v200 = v6[4]; v255 = v199; v201 = v200 + v6[1]; v202 = v6[2]; *(float *)&v256 = v201; v203 = v202 + v6[5]; *((float *)&v256 + 1) = v203; v284 = sub_844DE0(&v255, v5, &v265, &v264); if ( v304 <= (double)v284 ) return v304; v307 = v284; v88 = 1.0; goto LABEL_62; } if ( v18 < 0.0 ) { v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v204 = *v5 + v5[3]; v205 = v5[4]; v249 = v204; v206 = v205 + v5[1]; v207 = v5[2]; v250 = v206; v208 = v207 + v5[5]; v209 = v5[6]; v251 = v208; v210 = v209 - v5[3]; v211 = v5[7]; v252 = v210; v212 = v211 - v5[4]; v213 = v5[8]; v253 = v212; v214 = v213 - v5[5]; v254 = v214; v285 = sub_848800(v6, &v249, &v263, &v264); v164 = v264; v265 = 1.0 - v264; v165 = v285; if ( v304 <= (double)v285 ) goto LABEL_66; goto LABEL_65; } v220 = *v5 + v5[3]; v221 = v5[4]; v249 = v220; v222 = v221 + v5[1]; v223 = v5[2]; v250 = v222; v224 = v223 + v5[5]; v225 = v5[6]; v251 = v224; v226 = v225 - v5[3]; v227 = v5[7]; v252 = v226; v228 = v227 - v5[4]; v229 = v5[8]; v253 = v228; v230 = v229 - v5[5]; v254 = v230; v304 = sub_848800(v6, &v249, a3, a5); v166 = 1.0 - *a5; } else { v154 = 0.0 < v18; v155 = 0.0 == v18; if ( v153 & 0x41 ) { if ( v154 || v155 ) { v177 = *v6 + v6[3]; v178 = v6[4]; v255 = v177; v179 = v178 + v6[1]; v180 = v6[2]; *(float *)&v256 = v179; v181 = v180 + v6[5]; *((float *)&v256 + 1) = v181; v311 = sub_844DE0(&v255, v5, a4, a5); *a3 = 1.0; return v311; } v249 = *v5; v250 = v5[1]; v251 = v5[2]; v252 = v5[3]; v253 = v5[4]; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v172 = *v6 + v6[3]; v173 = v6[4]; v255 = v172; v174 = v173 + v6[1]; v175 = v6[2]; *(float *)&v256 = v174; v176 = v175 + v6[5]; *((float *)&v256 + 1) = v176; v282 = sub_844DE0(&v255, v5, &v265, &v264); if ( v304 > (double)v282 ) { *a3 = 1.0; *a4 = v265; *a5 = v264; return v282; } return v304; } v156 = v5[1]; v249 = *v5; v251 = v5[2]; v157 = v5[7]; v250 = v156; v158 = v5[6]; v253 = v157; v252 = v158; v254 = v5[8]; if ( !v154 && !v155 ) { v304 = sub_848800(v6, &v249, a3, a5); *a4 = 0.0; v159 = v5[1]; v160 = v5[2]; v249 = *v5; v161 = v5[3]; v250 = v159; v162 = v5[4]; v251 = v160; v163 = v5[5]; v252 = v161; v253 = v162; v254 = v163; v280 = sub_848800(v6, &v249, &v263, &v265); v164 = 0.0; v264 = 0.0; v165 = v280; if ( v304 <= (double)v280 ) { LABEL_66: v215 = *v6 + v6[3]; v216 = v6[4]; v255 = v215; v217 = v216 + v6[1]; v218 = v6[2]; *(float *)&v256 = v217; v219 = v218 + v6[5]; *((float *)&v256 + 1) = v219; v286 = sub_844DE0(&v255, v5, &v265, &v264); if ( v304 > (double)v286 ) { v306 = v286; v64 = 1.0; goto LABEL_68; } return v304; } LABEL_65: v304 = v165; *a3 = v263; *a4 = v265; *a5 = v164; goto LABEL_66; } v304 = sub_848800(v6, &v249, a3, a5); v166 = 0.0; } *a4 = v166; v167 = *v6 + v6[3]; v168 = v6[4]; v255 = v167; v169 = v168 + v6[1]; v170 = v6[2]; *(float *)&v256 = v169; v171 = v170 + v6[5]; *((float *)&v256 + 1) = v171; v281 = sub_844DE0(&v255, v5, &v265, &v264); if ( v304 > (double)v281 ) { *a3 = 1.0; *a4 = v265; *a5 = v264; return v281; } return v304; } v231 = v5[1]; v232 = v5[2]; v249 = *v5; v233 = v5[3]; v250 = v231; v234 = v5[4]; v252 = v233; v253 = v234; v251 = v232; v254 = v5[5]; v304 = sub_848800(v6, &v249, a3, a4); *a5 = 0.0; v235 = v5[7]; v236 = v5[8]; v252 = v5[6]; v253 = v235; v254 = v236; v287 = sub_848800(v6, &v249, &v263, &v264); v265 = 0.0; if ( v304 > (double)v287 ) { v304 = v287; *a3 = v263; *a4 = 0.0; *a5 = v264; } v237 = v249 + v5[3]; v249 = v237; v238 = v250 + v5[4]; v250 = v238; v239 = v251 + v5[5]; v251 = v239; v240 = v252 - v5[3]; v252 = v240; v241 = v253 - v5[4]; v253 = v241; v242 = v254 - v5[5]; v254 = v242; v288 = sub_848800(v6, &v249, &v263, &v264); v243 = v264; v265 = 1.0 - v264; if ( v304 > (double)v288 ) { v304 = v288; *a3 = v263; *a4 = v265; *a5 = v243; } v289 = sub_844DE0(v6, v5, &v265, &v264); v263 = 0.0; if ( v304 > (double)v289 ) { v304 = v289; *a3 = 0.0; *a4 = v265; *a5 = v264; } v244 = *v6 + v6[3]; v245 = v6[4]; v255 = v244; v246 = v245 + v6[1]; v247 = v6[2]; *(float *)&v256 = v246; v248 = v247 + v6[5]; *((float *)&v256 + 1) = v248; v290 = sub_844DE0(&v255, v5, &v265, &v264); if ( v304 <= (double)v290 ) return v304; *a3 = 1.0; *a4 = v265; *a5 = v264; return v290; } //----- (00846820) -------------------------------------------------------- int __thiscall sub_846820(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 4))(); } //----- (00846830) -------------------------------------------------------- double __thiscall sub_846830(float *this) { return this[7]; } //----- (00846840) -------------------------------------------------------- int __thiscall sub_846840(char *this) { return (int)(this + 44); } //----- (00846850) -------------------------------------------------------- float *__thiscall sub_846850(float *this, float a2, float a3, float a4, int a5) { float *result; // eax result = this; *(_DWORD *)this = &NiIntersector::`vftable'; this[8] = 3.4028235e38; this[9] = 3.4028235e38; this[10] = 3.4028235e38; this[11] = 3.4028235e38; this[12] = 3.4028235e38; this[13] = 3.4028235e38; *((_DWORD *)this + 5) = a5; this[6] = 0.0; this[1] = a2; this[2] = a3; this[3] = 1.0 / a3; this[4] = a4; this[7] = 3.4028235e38; return result; } // A23B44: using guessed type void *NiIntersector::`vftable'; //----- (008468D0) -------------------------------------------------------- void __thiscall sub_8468D0(float *this, float *a2, float *a3) { float *v3; // ebx float *v4; // edi float *v5; // esi double v6; // st7 double v7; // st7 double v8; // st7 double v9; // st6 int v10; // eax float v11; // ST50_4 void (__thiscall *v12)(float *, float *, float *); // edx float v13; // [esp+4Ch] [ebp-Ch] signed int v14; // [esp+4Ch] [ebp-Ch] float v15; // [esp+50h] [ebp-8h] float v16; // [esp+54h] [ebp-4h] float v17; // [esp+60h] [ebp+8h] float v18; // [esp+60h] [ebp+8h] float v19; // [esp+60h] [ebp+8h] float v20; // [esp+60h] [ebp+8h] float v21; // [esp+64h] [ebp+Ch] v3 = a2; v16 = 0.0; v4 = a3; v5 = this; (*(void (__stdcall **)(float *, float *, _DWORD))(*(_DWORD *)this + 8))(a2, a3, 0.0); v21 = 0.0; if ( -v5[4] >= (float)0.0 ) { *((_DWORD *)v5 + 6) = 3; v6 = 0.0; goto LABEL_19; } if ( (float)0.0 > 0.00000011920929 ) { if ( *v4 != *a2 || v4[1] != a2[1] || v4[2] != a2[2] ) { v17 = 0.0 - v5[2]; (*(void (__thiscall **)(float *, float *, float *, _DWORD))(*(_DWORD *)v5 + 8))(v5, v3, v4, LODWORD(v17)); v15 = (v21 - v17) * v5[3]; if ( v15 < 0.0 ) { v7 = v5[1]; (*(void (__thiscall **)(float *, float *, float *, float))(*(_DWORD *)v5 + 8))(v5, v3, v4, v5[1]); v13 = v7; if ( v13 <= 0.0 || (v18 = v5[1] - v5[2], (*(void (__thiscall **)(float *, float *, float *, _DWORD))(*(_DWORD *)v5 + 8))(v5, v3, v4, LODWORD(v18)), v19 = (v13 - v18) * v5[3], v19 >= 0.0) ) { v14 = 1; if ( *((_DWORD *)v5 + 5) < 1 ) { LABEL_17: v6 = v16; goto LABEL_18; } v8 = v21; v9 = v15; while ( 1 ) { v16 = v16 - v8 / v9; if ( v5[1] < (double)v16 ) break; (*(void (__thiscall **)(float *, float *, float *, float))(*(_DWORD *)v5 + 8))( v5, v3, v4, COERCE_FLOAT(LODWORD(v16))); v10 = *(_DWORD *)v5; if ( v5[4] >= (double)v16 ) { v6 = v16; *((_DWORD *)v5 + 6) = 2; goto LABEL_20; } v20 = v16 - v5[2]; (*(void (__thiscall **)(float *, float *, float *, _DWORD))(v10 + 8))(v5, v3, v4, LODWORD(v20)); v8 = v16; v11 = (v16 - v20) * v5[3]; v9 = v11; if ( v11 >= 0.0 ) break; if ( ++v14 > *((_DWORD *)v5 + 5) ) goto LABEL_17; } } } } *((_DWORD *)v5 + 6) = 1; v5[7] = 3.4028235e38; return; } v6 = 0.0; LABEL_18: *((_DWORD *)v5 + 6) = 2; LABEL_19: v10 = *(_DWORD *)v5; LABEL_20: v12 = *(void (__thiscall **)(float *, float *, float *))(v10 + 12); v5[7] = v6; v12(v5, v3, v4); } //----- (00846AF0) -------------------------------------------------------- double __thiscall sub_846AF0(int this, int a2, int a3, float a4) { double v4; // st7 float *v5; // eax double v6; // st6 float v8; // [esp+4h] [ebp-3Ch] float v9; // [esp+8h] [ebp-38h] float v10; // [esp+Ch] [ebp-34h] float v11; // [esp+28h] [ebp-18h] float v12; // [esp+2Ch] [ebp-14h] float v13; // [esp+30h] [ebp-10h] float v14; // [esp+34h] [ebp-Ch] float v15; // [esp+38h] [ebp-8h] float v16; // [esp+3Ch] [ebp-4h] float v17; // [esp+48h] [ebp+8h] float v19; // [esp+50h] [ebp+10h] v4 = a4; v14 = *(float *)a2 * a4; v15 = *(float *)(a2 + 4) * a4; v5 = *(float **)(this + 56); v16 = *(float *)(a2 + 8) * a4; v17 = v5[2] + v15; v19 = v5[3] + v16; v6 = v5[1]; qmemcpy(&v8, (const void *)(this + 60), 0x24u); v11 = v6 + v14; v12 = v17; v13 = v19; v14 = *(float *)a3 * v4; v15 = *(float *)(a3 + 4) * v4; v16 = v4 * *(float *)(a3 + 8); v8 = v14 + v8; v9 = v9 + v15; v10 = v10 + v16; return (float)(sub_844DE0(&v11, &v8, (float *)(this + 100), (float *)(this + 104)) * *(float *)(this + 96) - 1.0); } //----- (00846BC0) -------------------------------------------------------- float __userpurge sub_846BC0@(float *this@, int a2, float *a3) { float *v3; // esi double v4; // st7 float *v5; // ecx float v6; // ST08_4 float v7; // ST0C_4 float v8; // ST10_4 double v9; // st7 double v10; // st7 float *v11; // eax bool v12; // zf float v13; // ST08_4 float v14; // ST0C_4 double v15; // st7 float result; // eax float v17; // ST10_4 float v18; // ST08_4 float v19; // ST0C_4 float v20; // ST10_4 float v21; // [esp+10h] [ebp-1Ch] float v22; // [esp+14h] [ebp-18h] float v23; // [esp+18h] [ebp-14h] float v24; // [esp+1Ch] [ebp-10h] float v25; // [esp+20h] [ebp-Ch] float v26; // [esp+24h] [ebp-8h] float v27; // [esp+28h] [ebp-4h] v3 = this; v4 = this[26]; v5 = this + 15; v27 = v4; v6 = v3[21] * v27; v7 = v3[22] * v27; v8 = v27 * v3[23]; v27 = v3[25]; v24 = v3[18] * v27; v25 = v3[19] * v27; v26 = v27 * v3[20]; v21 = v24 + *v5; v22 = v5[1] + v25; v23 = v5[2] + v26; v24 = v21 + v6; v9 = v22; v3[8] = v24; v25 = v9 + v7; v10 = v23; v3[9] = v25; v26 = v10 + v8; v3[10] = v26; v11 = sub_846DB0(v5, &v21); v12 = *((_DWORD *)v3 + 6) == 2; v13 = -*v11; v14 = -v11[1]; v15 = v11[2]; result = v13; v3[11] = v13; v17 = -v15; v3[12] = v14; v3[13] = v17; if ( v12 ) { result = *(float *)&a3; v27 = v3[7]; v18 = *a3 * v27; v19 = a3[1] * v27; v20 = v27 * a3[2]; v3[8] = v3[8] + v18; v3[9] = v3[9] + v19; v3[10] = v3[10] + v20; } return result; } //----- (00846CE0) -------------------------------------------------------- int __thiscall sub_846CE0(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8, int a9) { int v9; // esi float v10; // ST14_4 float v11; // ST18_4 double v12; // st7 float v13; // ST1C_4 float v14; // ST14_4 float v15; // ST18_4 double v16; // st7 float v17; // ST1C_4 int result; // eax v9 = (int)this; sub_846850(this, a6, a7, a8, a9); *(_DWORD *)v9 = &NiSphereTriIntersector::`vftable'; *(_DWORD *)(v9 + 56) = a2; *(_DWORD *)(v9 + 60) = *(_DWORD *)a3; *(_DWORD *)(v9 + 64) = *(_DWORD *)(a3 + 4); *(_DWORD *)(v9 + 68) = *(_DWORD *)(a3 + 8); v10 = *(float *)a4 - *(float *)a3; v11 = *(float *)(a4 + 4) - *(float *)(a3 + 4); v12 = *(float *)(a4 + 8) - *(float *)(a3 + 8); *(float *)(v9 + 72) = v10; *(float *)(v9 + 76) = v11; v13 = v12; *(float *)(v9 + 80) = v13; v14 = *(float *)a5 - *(float *)a3; v15 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v16 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)(v9 + 84) = v14; *(float *)(v9 + 88) = v15; v17 = v16; *(float *)(v9 + 92) = v17; result = v9; *(float *)(v9 + 96) = 1.0 / (*(float *)(a2 + 16) * *(float *)(a2 + 16)); *(float *)(v9 + 100) = 3.4028235e38; *(float *)(v9 + 104) = 3.4028235e38; return result; } // A23B58: using guessed type void *NiSphereTriIntersector::`vftable'; //----- (00846DB0) -------------------------------------------------------- float *__thiscall sub_846DB0(float *this, float *a2) { float v2; // ST08_4 float v3; // ST04_4 v2 = this[6] * this[5] - this[8] * this[3]; v3 = this[3] * this[7] - this[6] * this[4]; *a2 = this[8] * this[4] - this[5] * this[7]; a2[1] = v2; a2[2] = v3; sub_4430B0(a2); return a2; } //----- (00846E10) -------------------------------------------------------- bool __cdecl sub_846E10(float *a1, float *a2, float *a3) { float v3; // ST0C_4 double v4; // st3 double v6; // st7 float v7; // [esp+10h] [ebp-Ch] float v8; // [esp+14h] [ebp-8h] float v9; // [esp+18h] [ebp-4h] float v10; // [esp+24h] [ebp+8h] float v11; // [esp+24h] [ebp+8h] float v12; // [esp+24h] [ebp+8h] float v13; // [esp+24h] [ebp+8h] v3 = a1[12]; v7 = *a2 - a1[9]; v8 = a2[1] - a1[10]; v9 = a2[2] - a1[11]; v10 = v7 * v7 + v8 * v8 + v9 * v9; v11 = v10 - v3 * v3; v4 = v11; if ( v11 <= 0.0 ) return 1; v12 = v9 * a3[2] + v7 * *a3 + v8 * a3[1]; if ( v12 >= 0.0 ) return 0; v6 = v12 * v12; v13 = a3[2] * a3[2] + *a3 * *a3 + a3[1] * a3[1]; return v4 * v13 <= v6; } //----- (00846F10) -------------------------------------------------------- char __cdecl sub_846F10(float *a1, float *a2, float *a3, float *a4, float *a5, char a6, float *a7, float *a8, float *a9, float *a10) { double v10; // st7 double v11; // st5 double v12; // st4 double v13; // st6 double v14; // st3 double v15; // st2 float *v16; // edi float *v17; // ebx double v18; // st1 double v19; // st7 double v20; // st1 double v21; // st4 double v22; // st2 double v23; // st3 float *v24; // edx double v25; // st7 double v26; // st5 double v27; // st6 float *v28; // ecx double v29; // st4 double v30; // st7 double v32; // st6 double v33; // st7 double v34; // st6 double v35; // st5 double v36; // st4 double v37; // st6 float v38; // ecx double v39; // st7 float v40; // [esp+8h] [ebp-30h] float v41; // [esp+Ch] [ebp-2Ch] float v42; // [esp+10h] [ebp-28h] float v43; // [esp+14h] [ebp-24h] float v44; // [esp+18h] [ebp-20h] float v45; // [esp+1Ch] [ebp-1Ch] float v46; // [esp+20h] [ebp-18h] float v47; // [esp+24h] [ebp-14h] float v48; // [esp+28h] [ebp-10h] float v49; // [esp+2Ch] [ebp-Ch] float v50; // [esp+30h] [ebp-8h] float v51; // [esp+34h] [ebp-4h] float v52; // [esp+48h] [ebp+10h] float v53; // [esp+48h] [ebp+10h] float v54; // [esp+48h] [ebp+10h] float v55; // [esp+48h] [ebp+10h] float v56; // [esp+4Ch] [ebp+14h] float v57; // [esp+4Ch] [ebp+14h] float v58; // [esp+4Ch] [ebp+14h] float v59; // [esp+4Ch] [ebp+14h] float v60; // [esp+4Ch] [ebp+14h] v46 = *a4 - *a3; v47 = a4[1] - a3[1]; v48 = a4[2] - a3[2]; v49 = *a5 - *a3; v50 = a5[1] - a3[1]; v51 = a5[2] - a3[2]; v43 = a2[1] * v51 - a2[2] * v50; v44 = a2[2] * v49 - v51 * *a2; v45 = v50 * *a2 - v49 * a2[1]; v10 = v44; v11 = v47; v12 = v43; v13 = v46; v14 = v45; v56 = v43 * v46 + v44 * v47 + v45 * v48; v15 = v56; if ( v56 >= 0.0000099999997 ) { v16 = a1; v17 = a9; v43 = *a1 - *a3; v44 = a1[1] - a3[1]; v45 = a1[2] - a3[2]; v18 = v10 * v44; v19 = v43; v20 = v12 * v43 + v18; v21 = v45; v22 = v14 * v45 + v20; v23 = v44; v52 = v22; *a9 = v52; if ( v52 < 0.0 ) return 0; if ( v56 < (double)v52 ) return 0; v24 = a10; v43 = v23 * v48 - v21 * v11; v44 = v21 * v13 - v48 * v19; v45 = v11 * v19 - v13 * v23; v25 = v44; v26 = v43; v27 = v45; v53 = a2[2] * v45 + v44 * a2[1] + v43 * *a2; *a10 = v53; if ( v53 < 0.0 ) return 0; if ( v56 < v53 + *a9 ) return 0; v28 = a8; v29 = v25 * v50 + v26 * v49; v30 = v56; v57 = v27 * v51 + v29; *a8 = v57; if ( v57 < 0.0 ) return 0; goto LABEL_19; } v32 = v45; if ( v15 <= -0.0000099999997 && !a6 ) { v16 = a1; v17 = a9; v43 = *a1 - *a3; v44 = a1[1] - a3[1]; v45 = a1[2] - a3[2]; v54 = v32 * v45 + v10 * v44 + v12 * v43; *a9 = v54; if ( v54 <= 0.0 && v54 >= v15 ) { sub_61E8E0(&v43, &v40, &v46); v33 = v41; v24 = a10; v34 = v40; v35 = v42; v55 = a2[2] * v42 + *a2 * v40 + v41 * a2[1]; *a10 = v55; if ( v55 > 0.0 ) return 0; if ( v56 > v55 + *a9 ) return 0; v28 = a8; v36 = v34 * v49 + v33 * v50; v37 = v56; v58 = v35 * v51 + v36; *a8 = v58; v30 = v37; if ( v58 <= 0.0 ) { LABEL_19: v59 = 1.0 / v30; *v17 = *v17 * v59; *v24 = *v24 * v59; v60 = v59 * *v28; *v28 = v60; v43 = *a2 * v60; v44 = a2[1] * v60; v45 = v60 * a2[2]; v46 = *v16 + v43; v47 = v16[1] + v44; v38 = v47; v39 = v45 + v16[2]; *a7 = v46; a7[1] = v38; v48 = v39; a7[2] = v48; return 1; } } } return 0; } //----- (00847300) -------------------------------------------------------- char __cdecl sub_847300(float a1, int a2, int a3) { int v3; // eax int v4; // esi char result; // al int v6; // edi int v7; // ST10_4 int v8; // eax int v9; // esi int v10; // ecx int v11; // ST14_4 int v12; // ST10_4 int v13; // eax v3 = *(_DWORD *)(a3 + 172); v4 = *(_DWORD *)(a2 + 172); if ( !v4 || !v3 ) return 0; if ( *(_DWORD *)(v4 + 44) ) { if ( *(_DWORD *)(v3 + 44) ) { result = sub_836DC0(a1, *(_DWORD *)(v4 + 48), v4 + 24, *(_DWORD *)(v3 + 48), v3 + 24); } else { v6 = *(_DWORD *)(v4 + 48); v7 = v3 + 24; v8 = sub_836FD0(a3 + 36); result = sub_836DC0(a1, v6, v4 + 24, v8, v7); } } else { v9 = v4 + 24; v10 = a2 + 36; if ( *(_DWORD *)(v3 + 44) ) { v11 = v3 + 24; v12 = *(_DWORD *)(v3 + 48); v13 = sub_836FD0(v10); result = sub_836DC0(a1, v13, v9, v12, v11); } else { result = sub_87CFF0(a1, v10, v9, a3 + 36, v3 + 24); } } return result; } //----- (008473E0) -------------------------------------------------------- char __cdecl sub_8473E0(float a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // eax int v9; // esi char result; // al int v11; // edi int v12; // ST10_4 int v13; // eax int v14; // esi int v15; // ecx int v16; // ST10_4 int v17; // ST0C_4 int v18; // eax v8 = *(_DWORD *)(a3 + 172); v9 = *(_DWORD *)(a2 + 172); if ( !v9 || !v8 ) return 0; if ( *(_DWORD *)(v9 + 44) ) { if ( *(_DWORD *)(v8 + 44) ) { result = sub_836E50(a1, *(_DWORD *)(v9 + 48), v9 + 24, *(_DWORD *)(v8 + 48), v8 + 24, a4, a5, a6, a7, a8); } else { v11 = *(_DWORD *)(v9 + 48); v12 = v8 + 24; v13 = sub_836FD0(a3 + 36); result = sub_836E50(a1, v11, v9 + 24, v13, v12, a4, a5, a6, a7, a8); } } else { v14 = v9 + 24; v15 = a2 + 36; if ( *(_DWORD *)(v8 + 44) ) { v16 = v8 + 24; v17 = *(_DWORD *)(v8 + 48); v18 = sub_836FD0(v15); result = sub_836E50(a1, v18, v14, v17, v16, a4, a5, a6, a7, a8); } else { result = sub_87D130(a1, v15, v14, a3 + 36, v8 + 24, a4, a5, a6, a7, a8); } } return result; } //----- (00847500) -------------------------------------------------------- int __cdecl sub_847500(float a1, int a2, int a3, char a4, int a5, int a6) { int v6; // ebx int v7; // edi int v8; // eax int v9; // ecx _BYTE *v10; // eax signed int v11; // eax char Src; // [esp+24h] [ebp-270h] char v14; // [esp+28h] [ebp-26Ch] char v15; // [esp+2Ch] [ebp-268h] char v16; // [esp+30h] [ebp-264h] char v17; // [esp+34h] [ebp-260h] char v18; // [esp+38h] [ebp-25Ch] int v19; // [esp+3Ch] [ebp-258h] _BYTE *v20; // [esp+40h] [ebp-254h] int v21; // [esp+44h] [ebp-250h] int v22; // [esp+48h] [ebp-24Ch] int v23; // [esp+4Ch] [ebp-248h] char Dst; // [esp+50h] [ebp-244h] v6 = *(_DWORD *)(a3 + 172); v7 = *(_DWORD *)(a2 + 172); v20 = (_BYTE *)a6; if ( !v7 ) return 0; if ( !v6 ) return 0; v8 = *(unsigned __int16 *)(v7 + 76); v9 = *(unsigned __int16 *)(v6 + 76); v19 = v8; v21 = v9; v23 = 0; if ( (unsigned __int16)v8 <= 0u ) return 0; while ( 1 ) { v22 = 0; if ( (unsigned __int16)v21 > 0u ) break; LABEL_12: if ( (unsigned __int16)++v23 >= (unsigned __int16)v8 ) return 0; } while ( 1 ) { if ( sub_834270((_DWORD *)v7, v23, &Src, &v14, &v15) ) { if ( sub_834270((_DWORD *)v6, v22, &v16, &v17, &v18) ) { sub_84FAA0(&Dst, &Src, v7 + 24, &v16, v6 + 24); if ( sub_853910((float *)&Dst, a1, a5 + 16, a5 + 20, a4, a5 + 32, a5 + 44) ) break; } } LABEL_10: if ( (unsigned __int16)++v22 >= (unsigned __int16)v21 ) { LOWORD(v8) = v19; goto LABEL_12; } } v10 = v20; *(_DWORD *)(a5 + 56) = &Src; *(_DWORD *)(a5 + 60) = &v16; *v10 = 1; v11 = sub_833FF0((_BYTE *)v7, (int *)a5, *(_DWORD *)(v7 + 36), *(_DWORD *)(v6 + 36)); if ( v11 != 1 ) { if ( v11 == 2 ) return 0; goto LABEL_10; } return 1; } //----- (008476D0) -------------------------------------------------------- int __cdecl sub_8476D0(float a1, int a2, int a3, int a4, int a5, int a6) { int v6; // esi int v7; // edx int v8; // edi int v9; // ebx const void *v10; // esi int v11; // eax int v12; // edi void (__stdcall *v13)(int, char *); // edx int v14; // ST30_4 int v15; // eax int *v16; // esi int v17; // eax signed int v18; // eax int v20; // [esp+44h] [ebp-78h] int v21; // [esp+48h] [ebp-74h] int v22; // [esp+4Ch] [ebp-70h] int v23; // [esp+50h] [ebp-6Ch] int v24; // [esp+54h] [ebp-68h] int v25; // [esp+58h] [ebp-64h] int *v26; // [esp+5Ch] [ebp-60h] int v27; // [esp+60h] [ebp-5Ch] _BYTE *v28; // [esp+64h] [ebp-58h] int v29; // [esp+68h] [ebp-54h] int v30; // [esp+6Ch] [ebp-50h] int v31; // [esp+70h] [ebp-4Ch] int v32; // [esp+74h] [ebp-48h] int v33; // [esp+78h] [ebp-44h] char v34; // [esp+7Ch] [ebp-40h] unsigned __int16 v35; // [esp+B0h] [ebp-Ch] unsigned __int16 v36; // [esp+B2h] [ebp-Ah] unsigned __int16 v37; // [esp+B4h] [ebp-8h] v26 = (int *)a5; v6 = *(_DWORD *)(a2 + 172); v28 = (_BYTE *)a6; v7 = *(_DWORD *)(v6 + 40); v8 = *(_DWORD *)(a3 + 172); v31 = v6; if ( v7 != 1 && v7 ) { v33 = v6; v9 = v8; v10 = (const void *)(a2 + 104); } else { v9 = v6; v33 = v8; v10 = (const void *)(a3 + 104); } qmemcpy(&v34, v10, 0x34u); if ( !*(_DWORD *)(v33 + 44) ) return 0; if ( !*(_DWORD *)(v9 + 64) ) sub_834160((_DWORD *)v9); sub_8341F0((_DWORD *)v9); v11 = sub_879520((_DWORD *)v9); v12 = *(_DWORD *)(*(_DWORD *)(v11 + 184) + 32); v27 = v11; v13 = *(void (__stdcall **)(int, char *))(**(_DWORD **)(v33 + 48) + 20); v14 = *(_DWORD *)(v33 + 44); v29 = *(_DWORD *)(v33 + 48); v13(v14, &v34); v15 = 0; v30 = *(unsigned __int16 *)(v9 + 76); v32 = 0; if ( (unsigned __int16)v30 <= 0u ) return 0; while ( 1 ) { if ( sub_834270((_DWORD *)v9, v15, &v20, &v21, &v22) ) { v16 = v26; if ( (unsigned __int8)sub_836F50( a1, v29, v33 + 24, v20, v21, v22, v9 + 24, (int)(v26 + 4), (int)(v26 + 5), a4, (int)(v26 + 8), (int)(v26 + 11)) ) break; } LABEL_16: v15 = v32 + 1; v32 = v15; if ( (unsigned __int16)v15 >= (unsigned __int16)v30 ) return 0; } (*(void (__stdcall **)(int, unsigned __int16 *, unsigned __int16 *, unsigned __int16 *))(**(_DWORD **)(v27 + 184) + 80))( v32, &v35, &v36, &v37); v24 = v12 + 12 * v36; v23 = v12 + 12 * v35; v25 = v12 + 12 * v37; if ( v9 == v31 ) v16[14] = (int)&v20; else v16[15] = (int)&v20; v17 = v33; *v28 = 1; v18 = sub_833FF0((_BYTE *)v9, v16, *(_DWORD *)(v9 + 36), *(_DWORD *)(v17 + 36)); if ( v18 != 1 ) { if ( v18 == 2 ) return 0; goto LABEL_16; } return 1; } //----- (008478B0) -------------------------------------------------------- void __thiscall sub_8478B0(float *this, unsigned __int16 a2, float *a3) { float v3; // ST44_4 double v4; // st7 float *v5; // ebx float v6; // ST44_4 double v7; // st6 double v8; // st5 float v9; // ST44_4 double v10; // st5 float *v11; // ecx int v12; // esi float v13; // ST44_4 float v14; // ST20_4 float v15; // ST24_4 double v16; // st4 float v17; // ST28_4 int v18; // eax double v19; // st7 double v20; // st6 double v21; // st5 double v22; // st4 double v23; // st3 double v24; // st2 float *v25; // ecx int v26; // edx double v27; // st6 double v28; // st7 double v29; // st5 float v30; // ST48_4 float v31; // ST38_4 float v32; // ST3C_4 float v33; // ST40_4 float v34; // ST48_4 double v35; // st6 float v36; // ST48_4 double v37; // st5 float v38; // ST48_4 double v39; // st4 float v40; // ST48_4 float v41; // ST38_4 float v42; // ST3C_4 float v43; // ST40_4 float v44; // ST48_4 double v45; // rt1 float v46; // ST48_4 double v47; // rt2 float v48; // ST48_4 double v49; // st4 float v50; // ST48_4 float v51; // ST38_4 float v52; // ST3C_4 float v53; // ST40_4 double v54; // st7 float v55; // [esp+4h] [ebp-6Ch] float v56; // [esp+8h] [ebp-68h] float v57; // [esp+Ch] [ebp-64h] float v58; // [esp+10h] [ebp-60h] float v59; // [esp+14h] [ebp-5Ch] float v60; // [esp+18h] [ebp-58h] float v61; // [esp+1Ch] [ebp-54h] float v62; // [esp+1Ch] [ebp-54h] float v63; // [esp+20h] [ebp-50h] float v64; // [esp+20h] [ebp-50h] float v65; // [esp+24h] [ebp-4Ch] float v66; // [esp+24h] [ebp-4Ch] float v67; // [esp+24h] [ebp-4Ch] float v68; // [esp+24h] [ebp-4Ch] float v69; // [esp+28h] [ebp-48h] float v70; // [esp+2Ch] [ebp-44h] float v71; // [esp+30h] [ebp-40h] float v72; // [esp+34h] [ebp-3Ch] float v73; // [esp+3Ch] [ebp-34h] float v74; // [esp+40h] [ebp-30h] float v75; // [esp+44h] [ebp-2Ch] float v76; // [esp+48h] [ebp-28h] float v77; // [esp+4Ch] [ebp-24h] float v78; // [esp+50h] [ebp-20h] float v79; // [esp+54h] [ebp-1Ch] float v80; // [esp+58h] [ebp-18h] float v81; // [esp+5Ch] [ebp-14h] char v82; // [esp+60h] [ebp-10h] v3 = *a3; v4 = v3; v5 = this; v61 = v3; v6 = a3[1]; v7 = v6; v65 = v6; v8 = a3[2]; *this = *a3; v9 = v8; v10 = v9; this[1] = a3[1]; v63 = v9; this[2] = a3[2]; if ( a2 > 1u ) { v11 = a3 + 5; v12 = (unsigned __int16)(a2 - 1); do { *v5 = *(v11 - 2) + *v5; v5[1] = v5[1] + *(v11 - 1); v5[2] = *v11 + v5[2]; if ( v61 <= (double)*(v11 - 2) ) { if ( *(v11 - 2) > v4 ) v4 = *(v11 - 2); } else { v61 = *(v11 - 2); } if ( v65 <= (double)*(v11 - 1) ) { if ( *(v11 - 1) > v7 ) v7 = *(v11 - 1); } else { v65 = *(v11 - 1); } if ( v63 <= (double)*v11 ) { if ( *v11 > v10 ) v10 = *v11; } else { v63 = *v11; } v11 += 3; --v12; } while ( v12 ); } v13 = 1.0 / (double)a2; v14 = v13 * *v5; v15 = v5[1] * v13; v16 = v13 * v5[2]; *v5 = v14; v5[1] = v15; v17 = v16; v5[2] = v17; if ( v4 == v61 || v7 == v65 || v10 == v63 ) { v5[3] = 1.0; v5[4] = 0.0; v5[5] = 0.0; v5[6] = 0.0; v5[7] = 1.0; v5[9] = 0.0; v5[10] = 0.0; v5[8] = 0.0; v5[11] = 1.0; v62 = (v4 - v61) * 0.5; v72 = (v7 - v65) * 0.5; v64 = 0.5 * (v10 - v63); if ( v62 <= 0.0 ) v62 = 0.1; if ( v72 <= 0.0 ) v72 = 0.1; if ( v64 <= 0.0 ) v64 = 0.1; v5[12] = v62; v5[13] = v72; v54 = v64; } else { qmemcpy(&v73, &unk_BA4584, 0x24u); if ( a2 > 0u ) { v18 = a2; v19 = *v5 * *v5; v20 = v5[1] * *v5; v21 = v5[2] * *v5; v22 = v5[1] * v5[1]; v23 = v5[1] * v5[2]; v24 = v5[2] * v5[2]; do { --v18; v73 = v73 + v19; v74 = v74 + v20; v75 = v75 + v21; v77 = v77 + v22; v78 = v78 + v23; v81 = v81 + v24; } while ( v18 ); } v76 = v74; v79 = v75; v80 = v78; sub_85E9D0(&v73, (float *)&v82, v5 + 3); v55 = *a3 - *v5; v58 = v55; v56 = a3[1] - v5[1]; v59 = v56; v57 = a3[2] - v5[2]; v60 = v57; if ( a2 > 1u ) { v25 = a3 + 5; v26 = (unsigned __int16)(a2 - 1); do { v69 = *(v25 - 2) - *v5; v70 = *(v25 - 1) - v5[1]; v71 = *v25 - v5[2]; v27 = v69; v28 = v70; v29 = v71; v66 = v5[5] * v71 + v5[4] * v70 + v5[3] * v69; if ( v55 <= (double)v66 ) { if ( v58 < (double)v66 ) v58 = v5[5] * v71 + v5[4] * v70 + v5[3] * v69; } else { v55 = v5[5] * v71 + v5[4] * v70 + v5[3] * v69; } v67 = v5[6] * v27 + v5[7] * v28 + v5[8] * v29; if ( v56 <= (double)v67 ) { if ( v59 < (double)v67 ) v59 = v5[6] * v27 + v5[7] * v28 + v5[8] * v29; } else { v56 = v5[6] * v27 + v5[7] * v28 + v5[8] * v29; } v68 = v28 * v5[10] + v27 * v5[9] + v71 * v5[11]; if ( v57 <= (double)v68 ) { if ( v60 < (double)v68 ) v60 = v28 * v5[10] + v27 * v5[9] + v71 * v5[11]; } else { v57 = v28 * v5[10] + v27 * v5[9] + v71 * v5[11]; } v25 += 3; --v26; } while ( v26 ); } v30 = (v58 + v55) * 0.5; v31 = v5[3] * v30; v32 = v5[4] * v30; v33 = v30 * v5[5]; v34 = v31 + *v5; v35 = v34; *v5 = v34; v36 = v5[1] + v32; v37 = v36; v5[1] = v36; v38 = v33 + v5[2]; v39 = v38; v5[2] = v38; v40 = (v59 + v56) * 0.5; v41 = v5[6] * v40; v42 = v5[7] * v40; v43 = v40 * v5[8]; v44 = v35 + v41; *v5 = v44; v45 = v44; v46 = v37 + v42; v5[1] = v46; v47 = v46; v48 = v39 + v43; v49 = v48; v5[2] = v48; v50 = (v60 + v57) * 0.5; v51 = v50 * v5[9]; v52 = v5[10] * v50; v53 = v50 * v5[11]; *v5 = v45 + v51; v5[1] = v47 + v52; v5[2] = v49 + v53; v5[12] = (v58 - v55) * 0.5; v5[13] = (v59 - v56) * 0.5; v54 = 0.5 * (v60 - v57); } v5[14] = v54; } //----- (00847E00) -------------------------------------------------------- char __thiscall sub_847E00(float *this, float *a2) { signed int v3; // esi float *v4; // ebx float *v5; // ecx float *v6; // edx float *v7; // [esp+8h] [ebp-4h] int v8; // [esp+14h] [ebp+8h] v7 = this; if ( *a2 != *this || a2[1] != this[1] || a2[2] != this[2] ) return 0; v3 = 0; v4 = this + 3; v5 = a2 + 12; v6 = a2 + 4; v8 = (char *)v7 - (char *)a2; while ( *(v6 - 1) == *v4 && *v6 == *(float *)((char *)v6 + v8) && v6[1] == v4[2] && *v5 == *(float *)((char *)v5 + v8) ) { ++v3; ++v5; v6 += 3; v4 += 3; if ( v3 >= 3 ) return 1; } return 0; } //----- (00847EC0) -------------------------------------------------------- int __thiscall sub_847EC0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi char *v4; // esi signed int v5; // ebx int v6; // edi int (__cdecl *v7)(int, char *, signed int, signed int *, signed int); // edx char *v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = this; sub_8608D0(this, a2); v4 = v3 + 12; v5 = 3; do { sub_8608D0(v4, v2); v4 += 12; --v5; } while ( v5 ); v6 = *(_DWORD *)(v2 + 352); v7 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 4); a2 = 4; return v7(v6, v9 + 48, 12, &a2, 1); } //----- (00847F20) -------------------------------------------------------- int __thiscall sub_847F20(char *this, signed int a2) { signed int v2; // edi char *v3; // esi char *v4; // esi signed int v5; // ebx int v6; // edi int (__cdecl *v7)(int, char *, signed int, signed int *, signed int); // edx char *v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = this; sub_860940(this, a2); v4 = v3 + 12; v5 = 3; do { sub_860940(v4, v2); v4 += 12; --v5; } while ( v5 ); v6 = *(_DWORD *)(v2 + 356); v7 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; return v7(v6, v9 + 48, 12, &a2, 1); } //----- (00847F80) -------------------------------------------------------- BOOL __thiscall sub_847F80(float *this, float *a2) { float *v2; // esi v2 = this; return (unsigned __int8)sub_853C00(this, a2) && a2[6] == v2[6]; } //----- (00847FC0) -------------------------------------------------------- int __thiscall sub_847FC0(float *this, int a2, int a3, float a4, float a5, float a6, int a7) { int v7; // esi int result; // eax float v9; // [esp+30h] [ebp+1Ch] v7 = (int)this; sub_846850(this, a4, a5, a6, a7); *(_DWORD *)(v7 + 56) = a2; *(_DWORD *)v7 = &NiCapsuleSphereIntersector::`vftable'; *(_DWORD *)(v7 + 60) = a3; result = v7; v9 = *(float *)(a2 + 56) + *(float *)(a3 + 16); *(float *)(v7 + 64) = 1.0 / (v9 * v9); *(float *)(v7 + 68) = 3.4028235e38; return result; } // A23B6C: using guessed type void *NiCapsuleSphereIntersector::`vftable'; //----- (00848020) -------------------------------------------------------- double __thiscall sub_848020(int this, int a2, int a3, float a4) { int *v4; // eax double v5; // st7 float *v6; // eax float v8; // [esp+4h] [ebp-24h] float v9; // [esp+8h] [ebp-20h] float v10; // [esp+Ch] [ebp-1Ch] int v11; // [esp+10h] [ebp-18h] int v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] float v14; // [esp+1Ch] [ebp-Ch] float v15; // [esp+20h] [ebp-8h] float v16; // [esp+24h] [ebp-4h] float v17; // [esp+30h] [ebp+8h] float v19; // [esp+38h] [ebp+10h] v4 = *(int **)(this + 56); v8 = *((float *)v4 + 8); v9 = *((float *)v4 + 9); v10 = *((float *)v4 + 10); v11 = v4[11]; v12 = v4[12]; v5 = *(float *)a2; v13 = v4[13]; v14 = v5 * a4; v15 = *(float *)(a2 + 4) * a4; v16 = *(float *)(a2 + 8) * a4; v8 = v14 + v8; v9 = v9 + v15; v10 = v10 + v16; v14 = *(float *)a3 * a4; v15 = *(float *)(a3 + 4) * a4; v6 = *(float **)(this + 60); v16 = a4 * *(float *)(a3 + 8); v17 = v6[2] + v15; v19 = v6[3] + v16; v14 = v6[1] + v14; v15 = v17; v16 = v19; return (float)(sub_8486F0(&v14, &v8, (float *)(this + 68)) * *(float *)(this + 64) - 1.0); } //----- (00848100) -------------------------------------------------------- void __thiscall sub_848100(int this, float *a2, float *a3) { int v3; // esi float *v4; // eax float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST0C_4 float v9; // ST10_4 float v10; // ST14_4 float v11; // ST18_4 float v12; // ST1C_4 float v13; // ST20_4 float v14; // ST0C_4 float v15; // ST10_4 float v16; // ST14_4 double v17; // st5 float v18; // ST0C_4 float v19; // ST10_4 float v20; // ST14_4 float v21; // ST18_4 float v22; // ST1C_4 float v23; // ST20_4 double v24; // st7 double v25; // st6 float v26; // ST0C_4 double v27; // st5 double v28; // st4 float v29; // ST10_4 double v30; // st3 double v31; // st2 float v32; // ST14_4 float v33; // ST18_4 float v34; // ST1C_4 float v35; // ST20_4 float *v36; // ecx float v37; // ST0C_4 float v38; // ST10_4 float v39; // ST14_4 float v40; // [esp+14h] [ebp-1Ch] float v41; // [esp+18h] [ebp-18h] float v42; // [esp+1Ch] [ebp-14h] int v43; // [esp+20h] [ebp-10h] float v44; // [esp+24h] [ebp-Ch] float v45; // [esp+28h] [ebp-8h] float v46; // [esp+2Ch] [ebp-4h] float v47; // [esp+38h] [ebp+8h] v3 = this; sub_853BB0((float *)(*(_DWORD *)(this + 56) + 32), (int)&v43, *(float *)(this + 68)); v4 = *(float **)(v3 + 60); v40 = v4[1]; v41 = v4[2]; v42 = v4[3]; if ( *(_DWORD *)(v3 + 24) == 2 ) { v46 = *(float *)(v3 + 28); v5 = *a2 * v46; v6 = a2[1] * v46; v7 = v46 * a2[2]; *(float *)&v43 = v5 + *(float *)&v43; v44 = v6 + v44; v45 = v7 + v45; v47 = *(float *)(v3 + 28); v8 = *a3 * v47; v9 = a3[1] * v47; v10 = v47 * a3[2]; v11 = v8 + v40; v12 = v41 + v9; v13 = v42 + v10; v14 = v11 - *(float *)&v43; *(float *)(v3 + 44) = v14; v15 = v12 - v44; *(float *)(v3 + 48) = v15; v16 = v13 - v45; *(float *)(v3 + 52) = v16; sub_4430B0((float *)(v3 + 44)); v17 = *(float *)(*(_DWORD *)(v3 + 56) + 56); v18 = *(float *)(v3 + 44) * v17; v19 = *(float *)(v3 + 48) * v17; v20 = v17 * *(float *)(v3 + 52); v21 = v18 + *(float *)&v43; *(float *)(v3 + 32) = v21; v22 = v19 + v44; *(float *)(v3 + 36) = v22; v23 = v20 + v45; *(float *)(v3 + 40) = v23; } else { v24 = v40; v25 = *(float *)&v43; v26 = v40 + *(float *)&v43; v27 = v41; v28 = v44; v29 = v41 + v44; v30 = v42; v31 = v45; v32 = v42 + v45; v33 = v26 * 0.5; *(float *)(v3 + 32) = v33; v34 = v29 * 0.5; *(float *)(v3 + 36) = v34; v35 = 0.5 * v32; *(float *)(v3 + 40) = v35; if ( v24 == v25 && v27 == v28 && v30 == v31 ) { *(_DWORD *)(v3 + 44) = dword_ABD4A4; *(_DWORD *)(v3 + 48) = dword_ABD4A8; *(_DWORD *)(v3 + 52) = dword_ABD4AC; } else { v36 = (float *)(v3 + 44); v37 = v24 - v25; *v36 = v37; v38 = v27 - v28; v36[1] = v38; v39 = v30 - v31; v36[2] = v39; sub_4430B0((float *)(v3 + 44)); } } } // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (00848340) -------------------------------------------------------- int __thiscall sub_848340(float *this, int a2, int a3, float a4, float a5, float a6, int a7) { int v7; // esi int result; // eax float v9; // [esp+30h] [ebp+1Ch] v7 = (int)this; sub_846850(this, a4, a5, a6, a7); *(_DWORD *)(v7 + 56) = a2; *(_DWORD *)v7 = &NiCapsuleCapsuleIntersector::`vftable'; *(_DWORD *)(v7 + 60) = a3; result = v7; v9 = *(float *)(a2 + 56) + *(float *)(a3 + 56); *(float *)(v7 + 64) = 1.0 / (v9 * v9); *(float *)(v7 + 68) = 3.4028235e38; *(float *)(v7 + 72) = 3.4028235e38; return result; } // A23B80: using guessed type void *NiCapsuleCapsuleIntersector::`vftable'; //----- (008483B0) -------------------------------------------------------- double __thiscall sub_8483B0(int this, int a2, int a3, float a4) { int *v4; // eax int v5; // edx int *v6; // eax double v7; // st7 float v9; // [esp+4h] [ebp-3Ch] float v10; // [esp+8h] [ebp-38h] float v11; // [esp+Ch] [ebp-34h] int v12; // [esp+10h] [ebp-30h] int v13; // [esp+14h] [ebp-2Ch] int v14; // [esp+18h] [ebp-28h] float v15; // [esp+1Ch] [ebp-24h] float v16; // [esp+20h] [ebp-20h] float v17; // [esp+24h] [ebp-1Ch] int v18; // [esp+28h] [ebp-18h] int v19; // [esp+2Ch] [ebp-14h] int v20; // [esp+30h] [ebp-10h] float v21; // [esp+34h] [ebp-Ch] float v22; // [esp+38h] [ebp-8h] float v23; // [esp+3Ch] [ebp-4h] v4 = *(int **)(this + 56); v9 = *((float *)v4 + 8); v10 = *((float *)v4 + 9); v11 = *((float *)v4 + 10); v12 = v4[11]; v13 = v4[12]; v5 = v4[13]; v6 = *(int **)(this + 60); v14 = v5; v15 = *((float *)v6 + 8); v16 = *((float *)v6 + 9); v17 = *((float *)v6 + 10); v18 = v6[11]; v19 = v6[12]; v7 = *(float *)a2; v20 = v6[13]; v21 = v7 * a4; v22 = *(float *)(a2 + 4) * a4; v23 = *(float *)(a2 + 8) * a4; v9 = v21 + v9; v10 = v10 + v22; v11 = v11 + v23; v21 = *(float *)a3 * a4; v22 = *(float *)(a3 + 4) * a4; v23 = a4 * *(float *)(a3 + 8); v15 = v21 + v15; v16 = v16 + v22; v17 = v17 + v23; return (float)(sub_848800(&v9, &v15, (float *)(this + 68), (float *)(this + 72)) * *(float *)(this + 64) - 1.0); } //----- (008484B0) -------------------------------------------------------- void __thiscall sub_8484B0(int this, float *a2, float *a3) { int v3; // esi float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST0C_4 float v8; // ST10_4 float v9; // ST14_4 float v10; // ST0C_4 double v11; // st7 float v12; // ST10_4 double v13; // st7 float v14; // ST14_4 float v15; // ST0C_4 float v16; // ST10_4 float v17; // ST14_4 double v18; // st7 double v19; // st7 double v20; // st6 float v21; // ST0C_4 double v22; // st5 double v23; // st4 float v24; // ST10_4 double v25; // st3 double v26; // st2 float v27; // ST14_4 float *v28; // ecx float v29; // ST0C_4 float v30; // ST10_4 float v31; // ST14_4 int v32; // [esp+14h] [ebp-1Ch] float v33; // [esp+18h] [ebp-18h] float v34; // [esp+1Ch] [ebp-14h] int v35; // [esp+20h] [ebp-10h] float v36; // [esp+24h] [ebp-Ch] float v37; // [esp+28h] [ebp-8h] float v38; // [esp+2Ch] [ebp-4h] float v39; // [esp+38h] [ebp+8h] float v40; // [esp+38h] [ebp+8h] v3 = this; sub_853BB0((float *)(*(_DWORD *)(this + 56) + 32), (int)&v35, *(float *)(this + 68)); sub_853BB0((float *)(*(_DWORD *)(v3 + 60) + 32), (int)&v32, *(float *)(v3 + 72)); if ( *(_DWORD *)(v3 + 24) == 2 ) { v38 = *(float *)(v3 + 28); v4 = *a2 * v38; v5 = a2[1] * v38; v6 = v38 * a2[2]; *(float *)&v35 = v4 + *(float *)&v35; v36 = v5 + v36; v37 = v6 + v37; v39 = *(float *)(v3 + 28); v7 = *a3 * v39; v8 = a3[1] * v39; v9 = v39 * a3[2]; *(float *)&v32 = v7 + *(float *)&v32; v33 = v33 + v8; v34 = v34 + v9; v10 = *(float *)&v32 - *(float *)&v35; v11 = v33; *(float *)(v3 + 44) = v10; v12 = v11 - v36; v13 = v34; *(float *)(v3 + 48) = v12; v14 = v13 - v37; *(float *)(v3 + 52) = v14; sub_4430B0((float *)(v3 + 44)); v40 = *(float *)(*(_DWORD *)(v3 + 56) + 56); v15 = v40 * *(float *)(v3 + 44); v16 = *(float *)(v3 + 48) * v40; v17 = v40 * *(float *)(v3 + 52); *(float *)&v32 = v15 + *(float *)&v35; v18 = v16 + v36; *(float *)(v3 + 32) = *(float *)&v32; v33 = v18; *(float *)(v3 + 36) = v33; v34 = v17 + v37; *(float *)(v3 + 40) = v34; } else { v19 = *(float *)&v32; v20 = *(float *)&v35; v21 = *(float *)&v32 + *(float *)&v35; v22 = v33; v23 = v36; v24 = v33 + v36; v25 = v34; v26 = v37; v27 = v34 + v37; *(float *)&v32 = v21 * 0.5; *(float *)(v3 + 32) = *(float *)&v32; v33 = v24 * 0.5; *(float *)(v3 + 36) = v33; v34 = 0.5 * v27; *(float *)(v3 + 40) = v34; if ( v20 == v19 && v23 == v22 && v26 == v25 ) { *(_DWORD *)(v3 + 44) = dword_ABD4A4; *(_DWORD *)(v3 + 48) = dword_ABD4A8; *(_DWORD *)(v3 + 52) = dword_ABD4AC; } else { v28 = (float *)(v3 + 44); v29 = v19 - v20; *v28 = v29; v30 = v22 - v23; v28[1] = v30; v31 = v25 - v26; v28[2] = v31; sub_4430B0((float *)(v3 + 44)); } } } // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (008486F0) -------------------------------------------------------- double __cdecl sub_8486F0(float *a1, float *a2, float *a3) { float v3; // ST0C_4 float v4; // ST10_4 float v5; // ST14_4 double v6; // st6 double v7; // st5 double v8; // st7 double v9; // st4 double v10; // st7 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float v14; // ST14_4 float v16; // [esp+Ch] [ebp-Ch] float v17; // [esp+10h] [ebp-8h] float v18; // [esp+20h] [ebp+8h] float v19; // [esp+20h] [ebp+8h] float v20; // [esp+20h] [ebp+8h] v3 = *a1 - *a2; v4 = a1[1] - a2[1]; v5 = a1[2] - a2[2]; v6 = v4; v7 = v3; v8 = v5; v18 = a2[5] * v5 + a2[4] * v4 + v3 * a2[3]; v9 = v18; *a3 = v18; if ( v18 > 0.0 ) { v19 = a2[5] * a2[5] + a2[3] * a2[3] + a2[4] * a2[4]; if ( v19 > v9 ) { v20 = v9 / v19; *a3 = v20; v11 = v20 * a2[3]; v12 = a2[4] * v20; v13 = v20 * a2[5]; v16 = v7 - v11; v17 = v6 - v12; v10 = v8 - v13; } else { *a3 = 1.0; v16 = v7 - a2[3]; v17 = v6 - a2[4]; v10 = v8 - a2[5]; } v14 = v10; v8 = v14; v6 = v17; v7 = v16; } else { *a3 = 0.0; } return (float)(v8 * v8 + v6 * v6 + v7 * v7); } //----- (00848800) -------------------------------------------------------- double __cdecl sub_848800(float *a1, float *a2, float *a3, float *a4) { float *v4; // eax float *v5; // ecx float v6; // ST00_4 float v7; // ST04_4 float v8; // ST08_4 float v9; // ST0C_4 float v10; // ST10_4 double v11; // st7 double v12; // st5 double v13; // st6 float v14; // ST00_4 float v15; // ST04_4 float v16; // ST08_4 float v17; // ST0C_4 double v18; // st4 double v19; // st3 double v20; // st2 double v21; // st1 double result; // st7 double v23; // st2 double v24; // st2 float v25; // ST18_4 double v26; // st2 double v27; // st2 double v28; // st7 double v29; // st3 double v30; // st5 double v31; // st6 double v32; // st4 float v33; // ST18_4 double v34; // st2 double v35; // st6 float v36; // [esp+14h] [ebp-8h] float v37; // [esp+14h] [ebp-8h] float v38; // [esp+18h] [ebp-4h] float v39; // [esp+18h] [ebp-4h] float v40; // [esp+18h] [ebp-4h] float v41; // [esp+18h] [ebp-4h] float v42; // [esp+18h] [ebp-4h] float v43; // [esp+18h] [ebp-4h] float v44; // [esp+24h] [ebp+8h] float v45; // [esp+24h] [ebp+8h] float v46; // [esp+24h] [ebp+8h] float v47; // [esp+24h] [ebp+8h] float v48; // [esp+24h] [ebp+8h] float v49; // [esp+24h] [ebp+8h] float v50; // [esp+24h] [ebp+8h] float v51; // [esp+24h] [ebp+8h] float v52; // [esp+24h] [ebp+8h] float v53; // [esp+24h] [ebp+8h] float v54; // [esp+24h] [ebp+8h] float v55; // [esp+24h] [ebp+8h] float v56; // [esp+24h] [ebp+8h] float v57; // [esp+24h] [ebp+8h] float v58; // [esp+24h] [ebp+8h] float v59; // [esp+24h] [ebp+8h] float v60; // [esp+24h] [ebp+8h] float v61; // [esp+24h] [ebp+8h] float v62; // [esp+24h] [ebp+8h] float v63; // [esp+24h] [ebp+8h] float v64; // [esp+24h] [ebp+8h] float v65; // [esp+24h] [ebp+8h] float v66; // [esp+24h] [ebp+8h] float v67; // [esp+24h] [ebp+8h] float v68; // [esp+24h] [ebp+8h] float v69; // [esp+24h] [ebp+8h] float v70; // [esp+24h] [ebp+8h] float v71; // [esp+24h] [ebp+8h] float v72; // [esp+24h] [ebp+8h] float v73; // [esp+24h] [ebp+8h] float v74; // [esp+24h] [ebp+8h] float v75; // [esp+24h] [ebp+8h] float v76; // [esp+24h] [ebp+8h] float v77; // [esp+24h] [ebp+8h] float v78; // [esp+24h] [ebp+8h] float v79; // [esp+24h] [ebp+8h] float v80; // [esp+24h] [ebp+8h] float v81; // [esp+24h] [ebp+8h] float v82; // [esp+24h] [ebp+8h] float v83; // [esp+24h] [ebp+8h] float v84; // [esp+24h] [ebp+8h] float v85; // [esp+24h] [ebp+8h] float v86; // [esp+24h] [ebp+8h] float v87; // [esp+24h] [ebp+8h] float v88; // [esp+24h] [ebp+8h] float v89; // [esp+24h] [ebp+8h] float v90; // [esp+24h] [ebp+8h] float v91; // [esp+24h] [ebp+8h] float v92; // [esp+24h] [ebp+8h] float v93; // [esp+24h] [ebp+8h] float v94; // [esp+24h] [ebp+8h] float v95; // [esp+28h] [ebp+Ch] float v96; // [esp+28h] [ebp+Ch] float v97; // [esp+28h] [ebp+Ch] float v98; // [esp+28h] [ebp+Ch] float v99; // [esp+28h] [ebp+Ch] float v100; // [esp+28h] [ebp+Ch] float v101; // [esp+28h] [ebp+Ch] float v102; // [esp+28h] [ebp+Ch] float v103; // [esp+28h] [ebp+Ch] float v104; // [esp+28h] [ebp+Ch] float v105; // [esp+28h] [ebp+Ch] float v106; // [esp+28h] [ebp+Ch] float v107; // [esp+28h] [ebp+Ch] float v108; // [esp+28h] [ebp+Ch] float v109; // [esp+28h] [ebp+Ch] float v110; // [esp+28h] [ebp+Ch] float v111; // [esp+28h] [ebp+Ch] float v112; // [esp+28h] [ebp+Ch] float v113; // [esp+28h] [ebp+Ch] float v114; // [esp+28h] [ebp+Ch] float v115; // [esp+28h] [ebp+Ch] float v116; // [esp+28h] [ebp+Ch] float v117; // [esp+28h] [ebp+Ch] float v118; // [esp+28h] [ebp+Ch] float v119; // [esp+28h] [ebp+Ch] float v120; // [esp+28h] [ebp+Ch] float v121; // [esp+28h] [ebp+Ch] float v122; // [esp+28h] [ebp+Ch] float v123; // [esp+28h] [ebp+Ch] float v124; // [esp+28h] [ebp+Ch] float v125; // [esp+28h] [ebp+Ch] float v126; // [esp+28h] [ebp+Ch] float v127; // [esp+28h] [ebp+Ch] float v128; // [esp+28h] [ebp+Ch] v4 = a1; v5 = a2; v6 = *a1 - *a2; v7 = a1[1] - a2[1]; v8 = a1[2] - a2[2]; v9 = a1[4] * a1[4] + a1[3] * a1[3] + a1[5] * a1[5]; v44 = a1[4] * a2[4] + a2[3] * a1[3] + a2[5] * a1[5]; v95 = -v44; v10 = v5[4] * v5[4] + v5[3] * v5[3] + v5[5] * v5[5]; v38 = v4[5] * v8 + v4[4] * v7 + v6 * v4[3]; v45 = v7 * v5[4] + v5[3] * v6 + v5[5] * v8; v36 = -v45; v46 = v8 * v8 + v7 * v7 + v6 * v6; v11 = v95; v12 = v10; v13 = v9; v96 = v10 * v9 - v95 * v95; v97 = fabs(v96); v14 = v4[4] * v5[5] - v4[5] * v5[4]; v15 = v4[5] * v5[3] - v5[5] * v4[3]; v16 = v5[4] * v4[3] - v4[4] * v5[3]; v17 = v15 * v15 + v14 * v14 + v16 * v16; if ( v17 <= 0.000001 ) { v29 = v38; if ( v11 <= 0.0 ) { v127 = -v29; if ( v127 < v13 ) { v34 = v38; if ( v38 > 0.0 ) { *a3 = 0.0; if ( -v11 > v34 ) { v128 = v127 / v11; *a4 = v128; v93 = (v12 * v128 + v36 + v36) * v128 + v46; } else { *a4 = 1.0; v93 = v12 + v36 + v36 + v46; } v94 = fabs(v93); result = v94; } else { *a3 = v127 / v13; v35 = 0.0; *a4 = *(float *)&v35; v91 = v34 * *a3 + v46; v92 = fabs(v91); result = v92; } } else { *a3 = 1.0; *a4 = 0.0; v89 = v13 + v29 + v29 + v46; v90 = fabs(v89); result = v90; } } else if ( v29 < 0.0 ) { v124 = -v29; if ( v124 > v13 ) { v32 = v38; *a3 = 1.0; v33 = v38 + v13; v125 = -v33; if ( v125 < v11 ) { v126 = v125 / v11; *a4 = v126; v87 = (v12 * v126 + (v11 + v36) * 2.0) * v126 + v13 + 2.0 * v32 + v46; } else { *a4 = 1.0; v87 = v11 + v32 + v36 + v11 + v32 + v36 + v13 + v12 + v46; } v88 = fabs(v87); result = v88; } else { v30 = v124 / v13; v31 = 0.0; *a3 = v30; *a4 = *(float *)&v31; v85 = v29 * *a3 + v46; v86 = fabs(v85); result = v86; } } else { *a3 = 0.0; *a4 = 0.0; v84 = fabs(v46); result = v84; } } else { v18 = v36; v19 = v38; *a3 = v36 * v11 - v38 * v12; v37 = v38 * v11 - v36 * v13; v20 = v37; *a4 = v37; if ( *a3 < 0.0 ) { if ( v20 < 0.0 ) { if ( v19 >= 0.0 ) { *a3 = 0.0; if ( v18 < 0.0 ) { v122 = -v18; if ( v122 < v12 ) { v123 = v122 / v12; *a4 = v123; v82 = v18 * v123 + v46; } else { *a4 = 1.0; v82 = v12 + v18 + v18 + v46; } v83 = fabs(v82); result = v83; } else { *a4 = 0.0; v81 = fabs(v46); result = v81; } } else { *a4 = 0.0; v120 = -v19; if ( v120 < v13 ) { v121 = v120 / v13; *a3 = v121; v79 = v19 * v121 + v46; } else { *a3 = 1.0; v79 = v13 + v19 + v19 + v46; } v80 = fabs(v79); result = v80; } } else if ( v97 < v20 ) { v43 = v11 + v19; if ( v43 >= 0.0 ) { *a3 = 0.0; v118 = v18 + v12; if ( v118 > 0.0 ) { if ( v18 < 0.0 ) { v119 = -v18 / v12; *a4 = v119; v46 = v18 * v119 + v46; } else { *a4 = 0.0; } v78 = fabs(v46); result = v78; } else { *a4 = 1.0; v76 = v12 + v18 + v18 + v46; v77 = fabs(v76); result = v77; } } else { v28 = v43; *a4 = 1.0; v116 = -v43; if ( v116 < v13 ) { v117 = v116 / v13; *a3 = v117; v74 = v28 * v117 + v12 + v18 + v18 + v46; } else { *a3 = 1.0; v74 = v13 + v12 + v46 + v28 + v18 + v28 + v18; } v75 = fabs(v74); result = v75; } } else { *a3 = 0.0; if ( v18 < 0.0 ) { v114 = -v18; if ( v114 < v12 ) { v115 = v114 / v12; *a4 = v115; v72 = v18 * v115 + v46; } else { *a4 = 1.0; v72 = v12 + v18 + v18 + v46; } v73 = fabs(v72); result = v73; } else { *a4 = 0.0; v71 = fabs(v46); result = v71; } } } else { v21 = v37; if ( v97 < (double)*a3 ) { if ( v37 < 0.0 ) { v110 = -v19; if ( v110 >= v13 ) { *a3 = 1.0; v42 = v11 + v18; if ( v42 < 0.0 ) { v27 = v42; v112 = -v42; if ( v112 < v12 ) { v113 = v112 / v12; *a4 = v113; v69 = v13 + v27 * v113 + v19 + v19 + v46; } else { *a4 = 1.0; v69 = v13 + v12 + v46 + v27 + v19 + v27 + v19; } v70 = fabs(v69); result = v70; } else { *a4 = 0.0; v67 = v13 + v19 + v19 + v46; v68 = fabs(v67); result = v68; } } else { *a4 = 0.0; if ( v19 < 0.0 ) { v111 = v110 / v13; *a3 = v111; v46 = v19 * v111 + v46; } else { *a3 = 0.0; } v66 = fabs(v46); result = v66; } } else if ( v97 < v21 ) { v41 = v19 + v11; v106 = -v41; if ( v106 > v13 ) { *a3 = 1.0; v25 = v11 + v18; v26 = v25; v108 = -v25; if ( v108 < v12 ) { if ( v26 <= 0.0 ) { v109 = v108 / v12; *a4 = v109; v64 = v13 + v26 * v109 + v19 + v19 + v46; } else { *a4 = 0.0; v64 = v13 + v19 + v19 + v46; } v65 = fabs(v64); result = v65; } else { *a4 = 1.0; v62 = v13 + v12 + v46 + v26 + v19 + v26 + v19; v63 = fabs(v62); result = v63; } } else { *a4 = 1.0; if ( v41 < 0.0 ) { v107 = v106 / v13; *a3 = v107; v60 = v41 * v107 + v12 + v18 + v18 + v46; } else { *a3 = 0.0; v60 = v12 + v18 + v18 + v46; } v61 = fabs(v60); result = v61; } } else { *a3 = 1.0; v40 = v11 + v18; if ( v40 < 0.0 ) { v24 = v40; v104 = -v40; if ( v104 < v12 ) { v105 = v104 / v12; *a4 = v105; v58 = v13 + v24 * v105 + v19 + v19 + v46; } else { *a4 = 1.0; v58 = v13 + v12 + v46 + v24 + v19 + v24 + v19; } v59 = fabs(v58); result = v59; } else { *a4 = 0.0; v56 = v13 + v19 + v19 + v46; v57 = fabs(v56); result = v57; } } } else if ( v37 < 0.0 ) { *a4 = 0.0; if ( v19 < 0.0 ) { v102 = -v19; if ( v102 < v13 ) { v103 = v102 / v13; *a3 = v103; v54 = v19 * v103 + v46; } else { *a3 = 1.0; v54 = v13 + v19 + v19 + v46; } v55 = fabs(v54); result = v55; } else { *a3 = 0.0; v53 = fabs(v46); result = v53; } } else if ( v97 < v21 ) { *a4 = 1.0; v39 = v11 + v19; if ( v39 < 0.0 ) { v23 = v39; v100 = -v39; if ( v100 < v13 ) { v101 = v100 / v13; *a3 = v101; v51 = v23 * v101 + v12 + v18 + v18 + v46; } else { *a3 = 1.0; v51 = v13 + v12 + v46 + v23 + v18 + v23 + v18; } v52 = fabs(v51); result = v52; } else { *a3 = 0.0; v49 = v12 + v18 + v18 + v46; v50 = fabs(v49); result = v50; } } else { v98 = 1.0 / v97; *a3 = *a3 * v98; v99 = v98 * *a4; *a4 = v99; v47 = (v11 * *a4 + v13 * *a3 + 2.0 * v19) * *a3 + (v18 * 2.0 + v12 * v99 + *a3 * v11) * v99 + v46; v48 = fabs(v47); result = v48; } } } return result; } //----- (008492D0) -------------------------------------------------------- double __cdecl sub_8492D0(float *a1, float *a2, float *a3, float *a4, float *a5) { float *v5; // esi float *v6; // edi double v7; // st7 double v8; // st4 double v9; // st5 double v10; // st6 double v11; // st3 float *v12; // ebx double v13; // st4 double v14; // rtt double v15; // st3 double v16; // st4 double v17; // st3 double v18; // st7 float v19; // eax float v20; // ecx int v21; // edx int v22; // eax int v23; // ecx double v24; // st7 double v25; // st7 double v26; // st7 __int16 v27; // fps bool v28; // c0 char v29; // c2 bool v30; // c3 char v31; // ah bool v32; // c0 bool v33; // c3 float v34; // eax float v35; // edx int v36; // eax int v37; // edx int v38; // eax double v39; // st7 double result; // st7 double v41; // st7 double v42; // st7 double v43; // st7 int v44; // eax double v45; // st7 double v46; // st7 double v47; // st7 double v48; // st7 double v49; // st7 double v50; // st7 double v51; // st7 double v52; // st7 double v53; // st7 double v54; // st7 double v55; // st7 double v56; // st7 double v57; // st7 double v58; // st7 float v59; // eax float v60; // edx int v61; // eax int v62; // edx int v63; // eax double v64; // st7 double v65; // st7 double v66; // st7 int v67; // edx double v68; // st7 double v69; // st7 float v70; // eax float v71; // ecx int v72; // edx int v73; // eax int v74; // ecx double v75; // st7 double v76; // st7 double v77; // st7 double v78; // st7 double v79; // st7 double v80; // st7 double v81; // st7 double v82; // st7 double v83; // st7 double v84; // st7 double v85; // st7 double v86; // st7 double v87; // st7 double v88; // st7 double v89; // st7 double v90; // st7 __int16 v91; // fps bool v92; // c0 char v93; // c2 bool v94; // c3 char v95; // ah bool v96; // c0 bool v97; // c3 float v98; // edx int v99; // eax int v100; // edx double v101; // st7 double v102; // st7 double v103; // st7 double v104; // st7 double v105; // st7 int v106; // eax double v107; // st7 double v108; // st7 double v109; // st7 double v110; // st7 float v111; // eax float v112; // ecx int v113; // edx int v114; // eax int v115; // ecx double v116; // st7 double v117; // st7 double v118; // st7 double v119; // st7 float v120; // ecx float v121; // edx int v122; // eax int v123; // ecx int v124; // ecx int v125; // edx double v126; // st7 double v127; // st7 double v128; // st7 double v129; // st7 double v130; // st7 double v131; // st7 double v132; // st7 double v133; // st7 double v134; // st7 double v135; // st7 float v136; // [esp+Ch] [ebp-60h] float v137; // [esp+10h] [ebp-5Ch] float v138; // [esp+14h] [ebp-58h] int v139; // [esp+18h] [ebp-54h] int v140; // [esp+1Ch] [ebp-50h] int v141; // [esp+20h] [ebp-4Ch] float v142; // [esp+24h] [ebp-48h] float v143; // [esp+28h] [ebp-44h] float v144; // [esp+2Ch] [ebp-40h] float v145; // [esp+30h] [ebp-3Ch] double v146; // [esp+34h] [ebp-38h] float v147; // [esp+3Ch] [ebp-30h] double v148; // [esp+40h] [ebp-2Ch] double v149; // [esp+48h] [ebp-24h] double v150; // [esp+50h] [ebp-1Ch] float v151; // [esp+58h] [ebp-14h] float v152; // [esp+5Ch] [ebp-10h] float v153; // [esp+60h] [ebp-Ch] float v154; // [esp+64h] [ebp-8h] float v155; // [esp+68h] [ebp-4h] float v156; // [esp+74h] [ebp+8h] float v157; // [esp+74h] [ebp+8h] float v158; // [esp+74h] [ebp+8h] float v159; // [esp+74h] [ebp+8h] float v160; // [esp+74h] [ebp+8h] float v161; // [esp+74h] [ebp+8h] float v162; // [esp+74h] [ebp+8h] float v163; // [esp+74h] [ebp+8h] float v164; // [esp+74h] [ebp+8h] float v165; // [esp+74h] [ebp+8h] float v166; // [esp+74h] [ebp+8h] float v167; // [esp+74h] [ebp+8h] float v168; // [esp+74h] [ebp+8h] float v169; // [esp+74h] [ebp+8h] float v170; // [esp+74h] [ebp+8h] float v171; // [esp+74h] [ebp+8h] float v172; // [esp+74h] [ebp+8h] float v173; // [esp+74h] [ebp+8h] float v174; // [esp+74h] [ebp+8h] float v175; // [esp+74h] [ebp+8h] float v176; // [esp+74h] [ebp+8h] float v177; // [esp+78h] [ebp+Ch] float v178; // [esp+78h] [ebp+Ch] float v179; // [esp+78h] [ebp+Ch] float v180; // [esp+78h] [ebp+Ch] float v181; // [esp+78h] [ebp+Ch] float v182; // [esp+78h] [ebp+Ch] float v183; // [esp+78h] [ebp+Ch] float v184; // [esp+78h] [ebp+Ch] float v185; // [esp+78h] [ebp+Ch] float v186; // [esp+78h] [ebp+Ch] float v187; // [esp+78h] [ebp+Ch] float v188; // [esp+78h] [ebp+Ch] float v189; // [esp+78h] [ebp+Ch] float v190; // [esp+78h] [ebp+Ch] float v191; // [esp+78h] [ebp+Ch] float v192; // [esp+78h] [ebp+Ch] float v193; // [esp+78h] [ebp+Ch] float v194; // [esp+78h] [ebp+Ch] float v195; // [esp+78h] [ebp+Ch] float v196; // [esp+78h] [ebp+Ch] float v197; // [esp+78h] [ebp+Ch] float v198; // [esp+78h] [ebp+Ch] float v199; // [esp+78h] [ebp+Ch] float v200; // [esp+78h] [ebp+Ch] float v201; // [esp+78h] [ebp+Ch] float v202; // [esp+78h] [ebp+Ch] v5 = a2; v6 = a1; v142 = a2[8] * a2[4] - a2[7] * a2[5]; v143 = a2[5] * a2[6] - a2[8] * a2[3]; v144 = a2[7] * a2[3] - a2[4] * a2[6]; v148 = a1[4]; v146 = a1[3]; v149 = a1[5]; v177 = v142 * a1[3] + v143 * a1[4] + v144 * v149; v178 = fabs(v177); v147 = v178; v179 = v144 * v144 + v143 * v143 + v142 * v142; v180 = sqrt(v179); v156 = v180; v181 = v146 * v146 + v148 * v148 + v149 * v149; v182 = sqrt(v181); v183 = v182 * v156 * 0.000009999999747378752; if ( v147 <= (double)v183 ) goto LABEL_95; v142 = *v5 - *v6; v143 = v5[1] - v6[1]; v144 = v5[2] - v6[2]; *((float *)&v146 + 1) = v6[4] * v6[4] + v6[3] * v6[3] + v6[5] * v6[5]; v184 = v5[3] * v6[3] + v5[4] * v6[4] + v5[5] * v6[5]; v151 = -v184; v185 = v5[7] * v6[4] + v5[6] * v6[3] + v5[8] * v6[5]; *((float *)&v150 + 1) = -v185; v154 = v5[3] * v5[3] + v5[4] * v5[4] + v5[5] * v5[5]; v157 = v5[7] * v5[4] + v5[3] * v5[6] + v5[8] * v5[5]; v155 = v5[7] * v5[7] + v5[6] * v5[6] + v5[8] * v5[8]; v186 = v143 * v6[4] + v142 * v6[3] + v144 * v6[5]; *((float *)&v149 + 1) = -v186; *((float *)&v148 + 1) = v143 * v5[4] + v142 * v5[3] + v144 * v5[5]; v147 = v143 * v5[7] + v142 * v5[6] + v144 * v5[8]; v7 = v157; v152 = v155 * v154 - v157 * v157; v8 = v151; v9 = *((float *)&v150 + 1); v151 = v157 * *((float *)&v150 + 1) - v155 * v151; v10 = v8; v153 = v157 * v8 - v154 * *((float *)&v150 + 1); v11 = *((float *)&v146 + 1); v187 = v152 * *((float *)&v146 + 1) + v151 * v8 + v153 * *((float *)&v150 + 1); v158 = fabs(v187); if ( v158 < 0.0000099999997 ) { LABEL_95: v120 = v5[1]; v12 = a4; v121 = v5[2]; v136 = *v5; v122 = *((_DWORD *)v5 + 3); v137 = v120; v123 = *((_DWORD *)v5 + 4); v139 = v122; v140 = v123; v138 = v121; v141 = *((_DWORD *)v5 + 5); v191 = sub_848800(v6, &v136, a3, a4); *a5 = 0.0; v124 = *((_DWORD *)v5 + 7); v125 = *((_DWORD *)v5 + 8); v139 = *((_DWORD *)v5 + 6); v140 = v124; v141 = v125; v172 = sub_848800(v6, &v136, &v153, &v154); v155 = 0.0; if ( v191 > (double)v172 ) { v191 = v172; *a3 = v153; *a4 = 0.0; *a5 = v154; } v142 = *v5 + v5[6]; v126 = v5[7]; v136 = v142; v127 = v126 + v5[1]; v139 = *((_DWORD *)v5 + 3); v143 = v127; v128 = v5[8]; v137 = v143; v129 = v128 + v5[2]; v140 = *((_DWORD *)v5 + 4); v144 = v129; v138 = v144; v141 = *((_DWORD *)v5 + 5); v173 = sub_848800(v6, &v136, &v153, &v155); v154 = 1.0; if ( v191 > (double)v173 ) { v191 = v173; *a3 = v153; *a4 = v155; *a5 = 1.0; } v142 = *v5 + v5[3]; v130 = v5[1]; v136 = v142; v131 = v130 + v5[4]; v139 = *((_DWORD *)v5 + 6); v143 = v131; v132 = v5[5]; v137 = v143; v133 = v132 + v5[2]; v140 = *((_DWORD *)v5 + 7); v144 = v133; v138 = v144; v141 = *((_DWORD *)v5 + 8); v174 = sub_848800(v6, &v136, &v153, &v154); v155 = 1.0; if ( v191 > (double)v174 ) { v191 = v174; *a3 = v153; *a4 = 1.0; *a5 = v154; } v175 = sub_853C70(v6, v5, &v155, &v154); v153 = 0.0; if ( v191 > (double)v175 ) { v191 = v175; *a3 = 0.0; *a4 = v155; *a5 = v154; } goto LABEL_88; } v12 = a4; *((float *)&v150 + 1) = v9 * v8 - v7 * v11; v188 = 1.0 / v187; v159 = -*((float *)&v149 + 1) * v188; *((float *)&v146 + 1) = -*((float *)&v148 + 1) * v188; v189 = v188 * -v147; v13 = *((float *)&v146 + 1); *a3 = v151 * *((float *)&v146 + 1) + v159 * v152 + v189 * v153; *((float *)&v146 + 1) = v155 * v11 - v9 * v9; *a4 = *((float *)&v146 + 1) * v13 + v159 * v151 + v189 * *((float *)&v150 + 1); *((float *)&v146 + 1) = v154 * v11 - v10 * v10; v14 = v11; v15 = v13 * *((float *)&v150 + 1) + v159 * v153 + *((float *)&v146 + 1) * v189; v16 = v14; v190 = v15; v17 = v190; *a5 = v190; if ( *a3 < 0.0 ) { if ( *a4 < 0.0 ) { if ( v17 < 0.0 ) { v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v18 = 0.0; LABEL_7: *a4 = v18; v19 = v5[1]; v20 = v5[2]; v136 = *v5; v21 = *((_DWORD *)v5 + 3); v137 = v19; v22 = *((_DWORD *)v5 + 4); v138 = v20; v23 = *((_DWORD *)v5 + 5); v139 = v21; v140 = v22; v141 = v23; v160 = sub_848800(v6, &v136, &v153, &v155); v24 = 0.0; goto LABEL_27; } v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 <= 1.0 ) { v191 = sub_848800(v6, &v136, a3, a5); *a4 = 0.0; v161 = sub_853C70(v6, v5, &v155, &v154); if ( v191 > (double)v161 ) { v192 = v161; v25 = 0.0; LABEL_91: *a3 = v25; *v12 = v155; *a5 = v154; return v192; } return v191; } v191 = sub_848800(v6, &v136, a3, a5); v26 = 0.0; goto LABEL_26; } v28 = 1.0 < *a4; v29 = 0; v30 = 1.0 == *a4; v31 = HIBYTE(v27); v32 = 0.0 < v17; v33 = 0.0 == v17; if ( v31 & 1 ) { if ( !v32 && !v33 ) { v142 = *v5 + v5[3]; v45 = v5[1]; v136 = v142; v143 = v45 + v5[4]; v46 = v5[5]; v137 = v143; v144 = v46 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v18 = 1.0; goto LABEL_7; } v142 = *v5 + v5[3]; v47 = v5[1]; v136 = v142; v143 = v47 + v5[4]; v48 = v5[5]; v137 = v143; v144 = v48 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 <= 1.0 ) { v191 = sub_848800(v6, &v136, a3, a5); *a4 = 1.0; v164 = sub_853C70(v6, v5, &v155, &v154); if ( v191 > (double)v164 ) { v192 = v164; v25 = 0.0; goto LABEL_91; } return v191; } v191 = sub_848800(v6, &v136, a3, a5); v26 = 1.0; LABEL_26: *a4 = v26; v142 = *v5 + v5[6]; v49 = v5[7]; v136 = v142; v50 = v49 + v5[1]; v139 = *((_DWORD *)v5 + 3); v143 = v50; v51 = v5[8]; v137 = v143; v52 = v51 + v5[2]; v140 = *((_DWORD *)v5 + 4); v144 = v52; v138 = v144; v141 = *((_DWORD *)v5 + 5); v160 = sub_848800(v6, &v136, &v153, &v155); v24 = 1.0; LABEL_27: v154 = v24; if ( v191 > (double)v160 ) { v191 = v160; *a3 = v153; *a4 = v155; *a5 = v24; } v165 = sub_853C70(v6, v5, &v155, &v154); if ( v191 > (double)v165 ) { v195 = v165; v53 = 0.0; LABEL_68: *a3 = v53; *a4 = v155; *a5 = v154; return v195; } return v191; } if ( v32 || v33 ) { if ( v17 <= 1.0 ) { v194 = sub_853C70(v6, v5, a4, a5); *a3 = 0.0; return v194; } v142 = *v5 + v5[6]; v41 = v5[7]; v136 = v142; v143 = v41 + v5[1]; v42 = v5[8]; v137 = v143; v43 = v42 + v5[2]; v139 = *((_DWORD *)v5 + 3); v44 = *((_DWORD *)v5 + 5); v144 = v43; v138 = v144; v140 = *((_DWORD *)v5 + 4); v141 = v44; v191 = sub_848800(v6, &v136, a3, a4); *a5 = 1.0; v163 = sub_853C70(v6, v5, &v155, &v154); if ( v191 <= (double)v163 ) return v191; v193 = v163; v39 = 0.0; } else { v34 = v5[1]; v136 = *v5; v35 = v5[2]; v137 = v34; v36 = *((_DWORD *)v5 + 3); v138 = v35; v37 = *((_DWORD *)v5 + 4); v139 = v36; v38 = *((_DWORD *)v5 + 5); v140 = v37; v141 = v38; v191 = sub_848800(v6, &v136, a3, a4); *a5 = 0.0; v162 = sub_853C70(v6, v5, &v155, &v154); if ( v191 <= (double)v162 ) return v191; v193 = v162; v39 = 0.0; } LABEL_78: *a3 = v39; *a4 = v155; *a5 = v154; return v193; } if ( *a3 > 1.0 ) { if ( *a4 < 0.0 ) { if ( v17 < 0.0 ) { v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v81 = 0.0; LABEL_71: *a4 = v81; v111 = v5[1]; v112 = v5[2]; v136 = *v5; v113 = *((_DWORD *)v5 + 3); v137 = v111; v114 = *((_DWORD *)v5 + 4); v138 = v112; v115 = *((_DWORD *)v5 + 5); v139 = v113; v140 = v114; v141 = v115; v169 = sub_848800(v6, &v136, &v153, &v155); v90 = 0.0; LABEL_72: v154 = v90; if ( v191 > (double)v169 ) { v191 = v169; *a3 = v153; *a4 = v155; *a5 = v90; } LABEL_88: v142 = *v6 + v6[3]; v134 = v6[1]; v145 = v142; v143 = v134 + v6[4]; v135 = v6[2]; *(float *)&v146 = v143; v144 = v135 + v6[5]; *((float *)&v146 + 1) = v144; v84 = sub_853C70(&v145, v5, &v155, &v154); LABEL_89: v176 = v84; if ( v191 > (double)v176 ) { v192 = v84; v25 = 1.0; goto LABEL_91; } return v191; } v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 <= 1.0 ) { v191 = sub_848800(v6, &v136, a3, a5); *a4 = 0.0; sub_853C70(v6, v5, &v155, &v154); v142 = *v6 + v6[3]; v82 = v6[1]; v145 = v142; v143 = v82 + v6[4]; v83 = v6[2]; *(float *)&v146 = v143; v144 = v83 + v6[5]; *((float *)&v146 + 1) = v144; v84 = sub_853C70(&v145, v5, &v155, &v154); goto LABEL_89; } v191 = sub_848800(v6, &v136, a3, a5); v85 = 0.0; LABEL_60: *a4 = v85; v142 = *v5 + v5[6]; v86 = v5[7]; v136 = v142; v87 = v86 + v5[1]; v139 = *((_DWORD *)v5 + 3); v143 = v87; v88 = v5[8]; v137 = v143; v89 = v88 + v5[2]; v140 = *((_DWORD *)v5 + 4); v144 = v89; v138 = v144; v141 = *((_DWORD *)v5 + 5); v169 = sub_848800(v6, &v136, &v153, &v155); v90 = 1.0; goto LABEL_72; } v92 = 1.0 < *a4; v93 = 0; v94 = 1.0 == *a4; v95 = HIBYTE(v91); v96 = 0.0 < v17; v97 = 0.0 == v17; if ( v95 & 1 ) { if ( !v96 && !v97 ) { v142 = *v5 + v5[3]; v109 = v5[1]; v136 = v142; v143 = v109 + v5[4]; v110 = v5[5]; v137 = v143; v144 = v110 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v81 = 1.0; goto LABEL_71; } v142 = *v5 + v5[3]; v116 = v5[1]; v136 = v142; v143 = v116 + v5[4]; v117 = v5[5]; v137 = v143; v144 = v117 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 > 1.0 ) { v191 = sub_848800(v6, &v136, a3, a5); v85 = 1.0; goto LABEL_60; } v191 = sub_848800(v6, &v136, a3, a5); *a4 = 1.0; } else { if ( v96 || v97 ) { if ( v17 <= 1.0 ) { v142 = *v6 + v6[3]; v101 = v6[1]; v145 = v142; v143 = v101 + v6[4]; v102 = v6[2]; *(float *)&v146 = v143; v144 = v102 + v6[5]; *((float *)&v146 + 1) = v144; v202 = sub_853C70(&v145, v5, a4, a5); *a3 = 1.0; return v202; } v142 = *v5 + v5[6]; v103 = v5[7]; v136 = v142; v143 = v103 + v5[1]; v104 = v5[8]; v137 = v143; v105 = v104 + v5[2]; v139 = *((_DWORD *)v5 + 3); v106 = *((_DWORD *)v5 + 5); v144 = v105; v138 = v144; v140 = *((_DWORD *)v5 + 4); v141 = v106; v191 = sub_848800(v6, &v136, a3, a4); *a5 = 1.0; v142 = *v6 + v6[3]; v107 = v6[1]; v145 = v142; v143 = v107 + v6[4]; v108 = v6[2]; *(float *)&v146 = v143; v144 = v108 + v6[5]; *((float *)&v146 + 1) = v144; v170 = sub_853C70(&v145, v5, &v155, &v154); if ( v191 > (double)v170 ) { v195 = v170; v53 = 1.0; goto LABEL_68; } return v191; } v98 = v5[1]; v136 = *v5; v138 = v5[2]; v99 = *((_DWORD *)v5 + 4); v137 = v98; v100 = *((_DWORD *)v5 + 3); v140 = v99; v139 = v100; v141 = *((_DWORD *)v5 + 5); v191 = sub_848800(v6, &v136, a3, a4); *a5 = 0.0; } v142 = *v6 + v6[3]; v118 = v6[1]; v145 = v142; v143 = v118 + v6[4]; v119 = v6[2]; *(float *)&v146 = v143; v144 = v119 + v6[5]; *((float *)&v146 + 1) = v144; v171 = sub_853C70(&v145, v5, &v155, &v154); if ( v191 <= (double)v171 ) return v191; v193 = v171; v39 = 1.0; goto LABEL_78; } if ( *a4 < 0.0 ) { if ( v17 >= 0.0 ) { v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 <= 1.0 ) { v196 = sub_848800(v6, &v136, a3, a5); *a4 = 0.0; return v196; } v191 = sub_848800(v6, &v136, a3, a5); *a4 = 0.0; v142 = *v5 + v5[6]; v55 = v5[7]; v136 = v142; v56 = v55 + v5[1]; v139 = *((_DWORD *)v5 + 3); v143 = v56; v57 = v5[8]; v137 = v143; v58 = v57 + v5[2]; v140 = *((_DWORD *)v5 + 4); v144 = v58; v138 = v144; v141 = *((_DWORD *)v5 + 5); v166 = sub_848800(v6, &v136, &v153, &v155); if ( v191 > (double)v166 ) { *a3 = v153; *a4 = v155; *a5 = 1.0; return v166; } return v191; } v136 = *v5; v137 = v5[1]; v138 = v5[2]; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v54 = 0.0; LABEL_48: *a4 = v54; v70 = v5[1]; v71 = v5[2]; v136 = *v5; v72 = *((_DWORD *)v5 + 3); v137 = v70; v73 = *((_DWORD *)v5 + 4); v138 = v71; v74 = *((_DWORD *)v5 + 5); v139 = v72; v140 = v73; v141 = v74; v167 = sub_848800(v6, &v136, &v153, &v155); if ( v191 > (double)v167 ) { *a3 = v153; *a4 = v155; *a5 = 0.0; return v167; } return v191; } if ( *a4 > 1.0 ) { if ( v17 >= 0.0 ) { v142 = *v5 + v5[3]; v75 = v5[1]; v136 = v142; v143 = v75 + v5[4]; v76 = v5[5]; v137 = v143; v144 = v76 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); if ( v17 <= 1.0 ) { v201 = sub_848800(v6, &v136, a3, a5); *a4 = 1.0; return v201; } v191 = sub_848800(v6, &v136, a3, a5); *a4 = 1.0; v142 = *v5 + v5[6]; v77 = v5[7]; v136 = v142; v78 = v77 + v5[1]; v139 = *((_DWORD *)v5 + 3); v143 = v78; v79 = v5[8]; v137 = v143; v80 = v79 + v5[2]; v140 = *((_DWORD *)v5 + 4); v144 = v80; v138 = v144; v141 = *((_DWORD *)v5 + 5); v168 = sub_848800(v6, &v136, &v153, &v155); if ( v191 > (double)v168 ) { *a3 = v153; *a4 = v155; *a5 = 1.0; return v168; } return v191; } v142 = *v5 + v5[3]; v68 = v5[1]; v136 = v142; v143 = v68 + v5[4]; v69 = v5[5]; v137 = v143; v144 = v69 + v5[2]; v138 = v144; v139 = *((_DWORD *)v5 + 6); v140 = *((_DWORD *)v5 + 7); v141 = *((_DWORD *)v5 + 8); v191 = sub_848800(v6, &v136, a3, a5); v54 = 1.0; goto LABEL_48; } if ( v17 >= 0.0 ) { if ( v17 > 1.0 ) { v142 = *v5 + v5[6]; v64 = v5[7]; v136 = v142; v143 = v64 + v5[1]; v65 = v5[8]; v137 = v143; v66 = v65 + v5[2]; v139 = *((_DWORD *)v5 + 3); v67 = *((_DWORD *)v5 + 5); v144 = v66; v138 = v144; v140 = *((_DWORD *)v5 + 4); v141 = v67; v200 = sub_848800(v6, &v136, a3, a4); *a5 = 1.0; } else { v146 = v142; v150 = v144; v198 = v143 * v143 + v142 * v142 + v144 * v144; v199 = v17 * (2.0 * v147 + v7 * *a4 + v9 * *a3 + v17 * v155) + (v16 * *a3 + *a4 * v10 + v17 * v9 + *((float *)&v149 + 1) + *((float *)&v149 + 1)) * *a3 + (*((float *)&v148 + 1) * 2.0 + v10 * *a3 + *a4 * v154 + v17 * v7) * *a4 + v198; v200 = fabs(v199); } result = v200; } else { v59 = v5[1]; v136 = *v5; v60 = v5[2]; v137 = v59; v61 = *((_DWORD *)v5 + 3); v138 = v60; v62 = *((_DWORD *)v5 + 4); v139 = v61; v63 = *((_DWORD *)v5 + 5); v140 = v62; v141 = v63; v197 = sub_848800(v6, &v136, a3, a4); *a5 = 0.0; result = v197; } return result; } //----- (0084A590) -------------------------------------------------------- double __cdecl sub_84A590(int *a1, float *a2, float *a3, float *a4, float *a5, float *a6) { float *v6; // esi float v7; // ecx float v8; // edx float *v9; // edi float v10; // eax float v11; // ecx float v12; // edx float v13; // edx float v14; // eax double v15; // st7 double v16; // st7 double v17; // st7 float v18; // ecx float v19; // edx float v20; // eax float v21; // ecx float v22; // edx float v23; // edx float v24; // eax double v25; // st7 double v26; // st7 double v27; // st7 double v28; // st7 double v29; // st7 double v30; // st7 double v31; // st7 double v32; // st7 float v34; // [esp+Ch] [ebp-34h] float v35; // [esp+10h] [ebp-30h] float v36; // [esp+14h] [ebp-2Ch] float v37; // [esp+18h] [ebp-28h] float v38; // [esp+1Ch] [ebp-24h] float v39; // [esp+20h] [ebp-20h] float v40; // [esp+24h] [ebp-1Ch] float v41; // [esp+28h] [ebp-18h] float v42; // [esp+2Ch] [ebp-14h] float v43; // [esp+30h] [ebp-10h] float v44; // [esp+34h] [ebp-Ch] float v45; // [esp+38h] [ebp-8h] float v46; // [esp+3Ch] [ebp-4h] float v47; // [esp+48h] [ebp+8h] float v48; // [esp+4Ch] [ebp+Ch] float v49; // [esp+4Ch] [ebp+Ch] float v50; // [esp+4Ch] [ebp+Ch] float v51; // [esp+4Ch] [ebp+Ch] float v52; // [esp+4Ch] [ebp+Ch] float v53; // [esp+4Ch] [ebp+Ch] v6 = (float *)a1; v7 = *((float *)a1 + 1); v8 = *((float *)a1 + 2); v9 = a2; v34 = *(float *)a1; v10 = *((float *)a1 + 3); v35 = v7; v11 = *((float *)a1 + 4); v37 = v10; v36 = v8; v12 = *((float *)a1 + 5); v38 = v11; v39 = v12; v47 = sub_8492D0(&v34, a2, a3, a5, a6); *a4 = 0.0; v13 = v6[7]; v14 = v6[8]; v37 = v6[6]; v38 = v13; v39 = v14; v48 = sub_8492D0(&v34, a2, &v46, &v43, &v44); v45 = 0.0; if ( v47 > (double)v48 ) { v47 = v48; *a3 = 0.0; *a4 = v46; *a5 = v43; *a6 = v44; } v40 = v6[3] + v34; v15 = v6[4]; v34 = v40; v41 = v15 + v35; v16 = v6[5]; v35 = v41; v42 = v16 + v36; v36 = v42; v40 = v37 - v6[3]; v37 = v40; v41 = v38 - v6[4]; v38 = v41; v42 = v39 - v6[5]; v39 = v42; v49 = sub_8492D0(&v34, v9, &v46, &v43, &v44); v17 = v46; v45 = 1.0 - v46; if ( v47 > (double)v49 ) { v47 = v49; *a3 = v45; *a4 = v17; *a5 = v43; *a6 = v44; } v18 = v9[1]; v19 = v9[2]; v34 = *v9; v20 = v9[3]; v35 = v18; v21 = v9[4]; v37 = v20; v36 = v19; v22 = v9[5]; v38 = v21; v39 = v22; v50 = sub_8454B0(&v34, v6, &v43, &v45, &v46); v44 = 0.0; if ( v47 > (double)v50 ) { v47 = v50; *a3 = v45; *a4 = v46; *a5 = v43; *a6 = 0.0; } v23 = v9[7]; v24 = v9[8]; v37 = v9[6]; v38 = v23; v39 = v24; v51 = sub_8454B0(&v34, v6, &v44, &v45, &v46); v43 = 0.0; if ( v47 > (double)v51 ) { v47 = v51; *a3 = v45; *a4 = v46; *a5 = 0.0; *a6 = v44; } v40 = *v9 + v9[6]; v25 = v9[7]; v34 = v40; v26 = v25 + v9[1]; v37 = v9[3]; v41 = v26; v27 = v9[8]; v35 = v41; v28 = v27 + v9[2]; v38 = v9[4]; v42 = v28; v36 = v42; v39 = v9[5]; v52 = sub_8454B0(&v34, v6, &v43, &v45, &v46); v44 = 1.0; if ( v47 > (double)v52 ) { v47 = v52; *a3 = v45; *a4 = v46; *a5 = v43; *a6 = 1.0; } v40 = *v9 + v9[3]; v29 = v9[4]; v34 = v40; v30 = v29 + v9[1]; v37 = v9[6]; v41 = v30; v31 = v9[5]; v35 = v41; v32 = v31 + v9[2]; v38 = v9[7]; v42 = v32; v36 = v42; v39 = v9[8]; v53 = sub_8454B0(&v34, v6, &v44, &v45, &v46); if ( v47 <= (double)v53 ) return v47; *a3 = v45; *a4 = v46; *a5 = 1.0; *a6 = v44; return v53; } //----- (0084A910) -------------------------------------------------------- double __thiscall sub_84A910(int this, int a2, int a3, float a4) { int *v4; // eax int v5; // edx double v6; // st6 float v8; // [esp+8h] [ebp-48h] float v9; // [esp+Ch] [ebp-44h] float v10; // [esp+10h] [ebp-40h] float v11; // [esp+2Ch] [ebp-24h] float v12; // [esp+30h] [ebp-20h] float v13; // [esp+34h] [ebp-1Ch] int v14; // [esp+38h] [ebp-18h] int v15; // [esp+3Ch] [ebp-14h] int v16; // [esp+40h] [ebp-10h] float v17; // [esp+44h] [ebp-Ch] float v18; // [esp+48h] [ebp-8h] float v19; // [esp+4Ch] [ebp-4h] v4 = *(int **)(this + 56); v11 = *((float *)v4 + 8); v12 = *((float *)v4 + 9); v13 = *((float *)v4 + 10); v14 = v4[11]; v15 = v4[12]; v5 = v4[13]; v6 = *(float *)a2 * a4; qmemcpy(&v8, (const void *)(this + 60), 0x24u); v17 = v6; v18 = *(float *)(a2 + 4) * a4; v19 = *(float *)(a2 + 8) * a4; v16 = v5; v11 = v17 + v11; v12 = v12 + v18; v13 = v13 + v19; v17 = *(float *)a3 * a4; v18 = *(float *)(a3 + 4) * a4; v19 = a4 * *(float *)(a3 + 8); v8 = v17 + v8; v9 = v9 + v18; v10 = v10 + v19; *(float *)&a2 = sub_8454B0(&v11, &v8, (float *)&a2, (float *)(this + 100), (float *)(this + 104)) * *(float *)(this + 96) - 1.0; return *(float *)&a2; } //----- (0084AA00) -------------------------------------------------------- int __thiscall sub_84AA00(float *this, int a2, int a3, int a4, int a5, float a6, float a7, float a8, int a9) { int v9; // esi float v10; // ST14_4 float v11; // ST18_4 double v12; // st7 float v13; // ST1C_4 float v14; // ST14_4 float v15; // ST18_4 double v16; // st7 float v17; // ST1C_4 int result; // eax v9 = (int)this; sub_846850(this, a6, a7, a8, a9); *(_DWORD *)v9 = &NiCapsuleTriIntersector::`vftable'; *(_DWORD *)(v9 + 56) = a2; *(_DWORD *)(v9 + 60) = *(_DWORD *)a3; *(_DWORD *)(v9 + 64) = *(_DWORD *)(a3 + 4); *(_DWORD *)(v9 + 68) = *(_DWORD *)(a3 + 8); v10 = *(float *)a4 - *(float *)a3; v11 = *(float *)(a4 + 4) - *(float *)(a3 + 4); v12 = *(float *)(a4 + 8) - *(float *)(a3 + 8); *(float *)(v9 + 72) = v10; *(float *)(v9 + 76) = v11; v13 = v12; *(float *)(v9 + 80) = v13; v14 = *(float *)a5 - *(float *)a3; v15 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v16 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)(v9 + 84) = v14; *(float *)(v9 + 88) = v15; v17 = v16; *(float *)(v9 + 92) = v17; result = v9; *(float *)(v9 + 96) = 1.0 / (*(float *)(a2 + 56) * *(float *)(a2 + 56)); *(float *)(v9 + 100) = 3.4028235e38; *(float *)(v9 + 104) = 3.4028235e38; return result; } // A23B94: using guessed type void *NiCapsuleTriIntersector::`vftable'; //----- (0084AAD0) -------------------------------------------------------- int __thiscall sub_84AAD0(float *this, int a2, int a3, float a4, float a5, float a6, int a7) { int v7; // esi int result; // eax v7 = (int)this; sub_846850(this, a4, a5, a6, a7); *(_DWORD *)(v7 + 60) = a3; *(_DWORD *)v7 = &NiBoxCapsuleIntersector::`vftable'; *(_DWORD *)(v7 + 56) = a2; result = v7; *(float *)(v7 + 64) = 1.0 / (*(float *)(a3 + 56) * *(float *)(a3 + 56)); *(float *)(v7 + 68) = 3.4028235e38; *(float *)(v7 + 72) = 3.4028235e38; *(float *)(v7 + 76) = 3.4028235e38; return result; } // A23BA8: using guessed type void *NiBoxCapsuleIntersector::`vftable'; //----- (0084AB40) -------------------------------------------------------- void __thiscall sub_84AB40(float *this, int a2, int a3, float a4) { float *v4; // ebx const void *v5; // esi double v6; // st6 int v7; // eax double v8; // st6 float v9; // ecx double v10; // st6 int v11; // eax double v12; // st7 char v13; // [esp+0h] [ebp-6Ch] float v14; // [esp+4h] [ebp-68h] float v15; // [esp+8h] [ebp-64h] float v16; // [esp+Ch] [ebp-60h] int v17; // [esp+10h] [ebp-5Ch] int v18; // [esp+14h] [ebp-58h] int v19; // [esp+18h] [ebp-54h] float v20; // [esp+1Ch] [ebp-50h] float v21; // [esp+20h] [ebp-4Ch] float v22; // [esp+24h] [ebp-48h] float v23; // [esp+28h] [ebp-44h] float v24; // [esp+2Ch] [ebp-40h] float v25; // [esp+30h] [ebp-3Ch] float v26; // [esp+34h] [ebp-38h] v20 = a4; v4 = this; v5 = (const void *)(*((_DWORD *)this + 14) + 4); v21 = *(float *)a2 * a4; v6 = *(float *)(a2 + 4) * a4; qmemcpy(&v24, v5, 0x3Cu); v22 = v6; v23 = *(float *)(a2 + 8) * a4; v7 = *((_DWORD *)this + 15); v24 = v21 + v24; v25 = v25 + v22; v26 = v26 + v23; v8 = *(float *)a3; v14 = *(float *)(v7 + 32); v15 = *(float *)(v7 + 36); v9 = *(float *)(v7 + 40); v21 = v8 * a4; v16 = v9; v10 = *(float *)(a3 + 4) * a4; v17 = *(_DWORD *)(v7 + 44); v18 = *(_DWORD *)(v7 + 48); v11 = *(_DWORD *)(v7 + 52); v22 = v10; v12 = a4 * *(float *)(a3 + 8); v19 = v11; v23 = v12; v14 = v21 + v14; v15 = v15 + v22; v16 = v9 + v23; v20 = sub_84C110(&v14, &v24, (float *)&v13, v4 + 17, v4 + 18, v4 + 19) * v4[16] - 1.0; } //----- (0084AC50) -------------------------------------------------------- int __thiscall sub_84AC50(int this, float *a2, float *a3) { int v3; // esi float v4; // ST34_4 float *v5; // eax float v6; // ST38_4 float v7; // ST3C_4 float v8; // ST40_4 float v9; // ST28_4 float v10; // ST2C_4 double v11; // st7 float v12; // ST30_4 float *v13; // eax float v14; // ST34_4 float v15; // ST38_4 float v16; // ST3C_4 float v17; // ST40_4 float *v18; // edx double v19; // st7 float v20; // ST34_4 float v21; // ST38_4 float v22; // ST3C_4 float v23; // ST40_4 float *v24; // edx int v25; // ebx float v26; // ST34_4 float v27; // ST38_4 float v28; // ST3C_4 float v29; // ST40_4 int v30; // edx int v31; // edx float v32; // ST28_4 float v33; // ST2C_4 float v34; // ST30_4 float *v35; // eax int result; // eax int v37; // [esp+24h] [ebp-10h] v3 = this; v4 = *(float *)(this + 28); v5 = *(float **)(this + 56); v6 = *a2 * v4; v7 = a2[1] * v4; v8 = v4 * a2[2]; v9 = v5[1] + v6; v10 = v5[2] + v7; v11 = v5[3] + v8; *(float *)(this + 32) = v9; *(float *)(this + 36) = v10; v12 = v11; *(float *)(this + 40) = v12; v13 = *(float **)(this + 56); v14 = *(float *)(this + 68); v15 = v13[4] * v14; v16 = v13[5] * v14; v17 = v14 * v13[6]; *(float *)(v3 + 32) = *(float *)(v3 + 32) + v15; *(float *)(v3 + 36) = *(float *)(v3 + 36) + v16; *(float *)(v3 + 40) = *(float *)(v3 + 40) + v17; v18 = *(float **)(this + 56); if ( -v18[13] == *(float *)(this + 68) ) { v37 = -1; } else { v19 = *(float *)(this + 68); v37 = 1; if ( v18[13] != v19 ) v37 = 0; } v20 = *(float *)(this + 72); v21 = v18[7] * v20; v22 = v18[8] * v20; v23 = v20 * v18[9]; *(float *)(this + 32) = *(float *)(this + 32) + v21; *(float *)(this + 36) = *(float *)(this + 36) + v22; *(float *)(this + 40) = *(float *)(this + 40) + v23; v24 = *(float **)(this + 56); if ( -v24[14] == *(float *)(this + 72) ) v25 = -1; else v25 = v24[14] == *(float *)(this + 72); v26 = *(float *)(this + 76); v27 = v24[10] * v26; v28 = v24[11] * v26; v29 = v26 * v24[12]; *(float *)(this + 32) = *(float *)(this + 32) + v27; *(float *)(this + 36) = *(float *)(this + 36) + v28; *(float *)(this + 40) = *(float *)(this + 40) + v29; v30 = *(_DWORD *)(this + 56); if ( -*(float *)(v30 + 60) == *(float *)(this + 76) ) v31 = -1; else v31 = *(float *)(v30 + 60) == *(float *)(this + 76); v32 = *a3 - *a2; v33 = a3[1] - a2[1]; v34 = a3[2] - a2[2]; v35 = sub_83A930(*(float **)(this + 56), (int)&v37, v37, v25, v31, v32, v33, v34); *(float *)(v3 + 44) = *v35; *(float *)(v3 + 48) = v35[1]; result = *((_DWORD *)v35 + 2); *(_DWORD *)(v3 + 52) = result; return result; } //----- (0084AE80) -------------------------------------------------------- int __thiscall sub_84AE80(float *this, int a2, int a3, float a4, float a5, float a6, int a7) { int v7; // esi int result; // eax v7 = (int)this; sub_846850(this, a4, a5, a6, a7); *(_DWORD *)(v7 + 60) = a3; *(_DWORD *)v7 = &NiBoxSphereIntersector::`vftable'; *(_DWORD *)(v7 + 56) = a2; result = v7; *(float *)(v7 + 64) = 1.0 / (*(float *)(a3 + 16) * *(float *)(a3 + 16)); *(float *)(v7 + 68) = 3.4028235e38; *(float *)(v7 + 72) = 3.4028235e38; *(float *)(v7 + 76) = 3.4028235e38; return result; } // A23BBC: using guessed type void *NiBoxSphereIntersector::`vftable'; //----- (0084AEF0) -------------------------------------------------------- void __thiscall sub_84AEF0(int this, int a2, int a3, float a4) { double v4; // st6 float *v5; // eax float v6; // ST20_4 float v7; // ST24_4 float v8; // ST24_4 float v9; // [esp+8h] [ebp-4Ch] float v10; // [esp+Ch] [ebp-48h] float v11; // [esp+10h] [ebp-44h] float v12; // [esp+14h] [ebp-40h] float v13; // [esp+18h] [ebp-3Ch] float v14; // [esp+1Ch] [ebp-38h] v4 = *(float *)a2 * a4; qmemcpy(&v12, (const void *)(*(_DWORD *)(this + 56) + 4), 0x3Cu); v9 = v4; v10 = *(float *)(a2 + 4) * a4; v11 = *(float *)(a2 + 8) * a4; v5 = *(float **)(this + 60); v12 = v9 + v12; v13 = v13 + v10; v14 = v14 + v11; v9 = *(float *)a3 * a4; v10 = *(float *)(a3 + 4) * a4; v11 = a4 * *(float *)(a3 + 8); v6 = v5[2] + v10; v7 = v5[3] + v11; v9 = v5[1] + v9; v10 = v6; v11 = v7; v8 = sub_84B480(&v9, &v12, (float *)(this + 68), (float *)(this + 72), (float *)(this + 76)) * *(float *)(this + 64) - 1.0; } //----- (0084AFE0) -------------------------------------------------------- void __thiscall sub_84AFE0(int this, float *a2, float *a3) { int v3; // esi float *v4; // eax float v5; // ST14_4 float v6; // ST18_4 double v7; // st7 float v8; // ST1C_4 float *v9; // eax float *v10; // eax float *v11; // eax float *v12; // ecx float v13; // ST14_4 float v14; // ST18_4 float *v15; // eax float v16; // ST1C_4 float v17; // ST14_4 float v18; // ST18_4 double v19; // st7 float v20; // ST1C_4 double v21; // st7 float v22; // edx float v23; // eax float *v24; // edi float *v25; // eax float v26; // ST14_4 float v27; // ST18_4 float v28; // ST1C_4 float v29; // ST08_4 float v30; // ST0C_4 float v31; // ST10_4 double v32; // st7 float v33; // ST08_4 double v34; // st5 float v35; // ST0C_4 double v36; // st6 float v37; // ST10_4 float v38; // ST14_4 float v39; // ST18_4 double v40; // st4 float v41; // ST1C_4 float v42; // ST08_4 float v43; // ST0C_4 float v44; // ST10_4 float *v45; // eax float *v46; // eax float *v47; // eax float *v48; // ecx float v49; // ST08_4 float v50; // ST0C_4 float v51; // ST10_4 float v52; // ST14_4 float v53; // ST18_4 float v54; // ST1C_4 float *v55; // eax float *v56; // ecx float v57; // ST08_4 float v58; // ST0C_4 double v59; // st7 float v60; // ST10_4 float v61; // [esp+1Ch] [ebp-10h] float v62; // [esp+20h] [ebp-Ch] float v63; // [esp+24h] [ebp-8h] float v64; // [esp+28h] [ebp-4h] float v65; // [esp+34h] [ebp+8h] float v66; // [esp+34h] [ebp+8h] float v67; // [esp+34h] [ebp+8h] float v68; // [esp+34h] [ebp+8h] float v69; // [esp+38h] [ebp+Ch] float v70; // [esp+38h] [ebp+Ch] float v71; // [esp+38h] [ebp+Ch] float v72; // [esp+38h] [ebp+Ch] float v73; // [esp+38h] [ebp+Ch] float v74; // [esp+38h] [ebp+Ch] float v75; // [esp+38h] [ebp+Ch] float v76; // [esp+38h] [ebp+Ch] v3 = this; if ( *(_DWORD *)(this + 24) == 2 ) { v64 = *(float *)(this + 28); v61 = *a2 * v64; v62 = a2[1] * v64; v4 = *(float **)(this + 56); v63 = v64 * a2[2]; v5 = v61 + v4[1]; v6 = v4[2] + v62; v7 = v4[3] + v63; *(float *)(this + 32) = v5; *(float *)(this + 36) = v6; v8 = v7; *(float *)(this + 40) = v8; v65 = *(float *)(this + 68); v9 = *(float **)(this + 56); v61 = v9[4] * v65; v62 = v9[5] * v65; v63 = v65 * v9[6]; *(float *)(this + 32) = *(float *)(this + 32) + v61; *(float *)(this + 36) = *(float *)(this + 36) + v62; *(float *)(this + 40) = *(float *)(this + 40) + v63; v10 = *(float **)(this + 56); v66 = *(float *)(this + 72); v61 = v10[7] * v66; v62 = v10[8] * v66; v63 = v66 * v10[9]; *(float *)(this + 32) = *(float *)(this + 32) + v61; *(float *)(this + 36) = *(float *)(this + 36) + v62; *(float *)(this + 40) = *(float *)(this + 40) + v63; v11 = *(float **)(this + 56); v67 = *(float *)(this + 76); v12 = (float *)(this + 44); v61 = v11[10] * v67; v62 = v11[11] * v67; v63 = v67 * v11[12]; *(float *)(v3 + 32) = *(float *)(v3 + 32) + v61; *(float *)(v3 + 36) = *(float *)(v3 + 36) + v62; *(float *)(v3 + 40) = *(float *)(v3 + 40) + v63; v68 = *(float *)(v3 + 28); v13 = *a3 * v68; v14 = a3[1] * v68; v15 = *(float **)(v3 + 60); v16 = v68 * a3[2]; v61 = v15[1] + v13; v62 = v15[2] + v14; v63 = v15[3] + v16; v17 = v61 - *(float *)(v3 + 32); v18 = v62 - *(float *)(v3 + 36); v19 = v63 - *(float *)(v3 + 40); *v12 = v17; v12[1] = v18; v20 = v19; v12[2] = v20; sub_4430B0((float *)(v3 + 44)); } else { v69 = a3[2] * a3[2] + *a3 * *a3 + a3[1] * a3[1]; v21 = v69; v70 = a2[2] * a2[2] + *a2 * *a2 + a2[1] * a2[1]; v71 = v21 - v70; if ( v71 >= -0.0000099999997 ) { v45 = *(float **)(this + 56); if ( v71 <= 0.0000099999997 ) { v48 = *(float **)(this + 60); v49 = v48[1] + v45[1]; v50 = v48[2] + v45[2]; v51 = v48[3] + v45[3]; v52 = v49 * 0.5; *(float *)(v3 + 32) = v52; v53 = v50 * 0.5; *(float *)(v3 + 36) = v53; v54 = 0.5 * v51; *(float *)(v3 + 40) = v54; } else { *(float *)(this + 32) = v45[1]; *(float *)(this + 36) = v45[2]; *(float *)(this + 40) = v45[3]; v74 = *(float *)(this + 68); v61 = v45[4] * v74; v62 = v45[5] * v74; v63 = v74 * v45[6]; *(float *)(this + 32) = v61 + *(float *)(this + 32); *(float *)(this + 36) = *(float *)(this + 36) + v62; *(float *)(this + 40) = *(float *)(this + 40) + v63; v46 = *(float **)(this + 56); v75 = *(float *)(this + 72); v61 = v46[7] * v75; v62 = v46[8] * v75; v63 = v75 * v46[9]; *(float *)(this + 32) = v61 + *(float *)(this + 32); *(float *)(this + 36) = *(float *)(this + 36) + v62; *(float *)(this + 40) = *(float *)(this + 40) + v63; v47 = *(float **)(this + 56); v76 = *(float *)(this + 76); v61 = v47[10] * v76; v62 = v47[11] * v76; v63 = v76 * v47[12]; *(float *)(this + 32) = v61 + *(float *)(this + 32); *(float *)(this + 36) = *(float *)(this + 36) + v62; *(float *)(this + 40) = *(float *)(this + 40) + v63; } v55 = *(float **)(v3 + 60); v56 = (float *)(v3 + 44); v57 = v55[1] - *(float *)(v3 + 32); v58 = v55[2] - *(float *)(v3 + 36); v59 = v55[3] - *(float *)(v3 + 40); *v56 = v57; v56[1] = v58; v60 = v59; v56[2] = v60; sub_4430B0((float *)(v3 + 44)); } else { v22 = *a2; v23 = a2[1]; v63 = a2[2]; v61 = v22; v62 = v23; sub_4430B0(&v61); v24 = *(float **)(v3 + 60); v25 = *(float **)(v3 + 56); v72 = v24[4] + v24[4]; v26 = v61 * v72; v27 = v62 * v72; v28 = v72 * v63; v29 = v25[1] - v26; v30 = v25[2] - v27; v31 = v25[3] - v28; v61 = v29 - v24[1]; v62 = v30 - v24[2]; v63 = v31 - v24[3]; sub_4430B0(&v61); v73 = v24[4]; v32 = v61; v33 = v61 * v73; v34 = v62; v35 = v62 * v73; v36 = v63; v37 = v73 * v63; v38 = v24[1] + v33; v39 = v24[2] + v35; v40 = v24[3]; *(float *)(v3 + 32) = v38; *(float *)(v3 + 36) = v39; v41 = v40 + v37; *(float *)(v3 + 40) = v41; v42 = -v32; *(float *)(v3 + 44) = v42; v43 = -v34; *(float *)(v3 + 48) = v43; v44 = -v36; *(float *)(v3 + 52) = v44; } } } //----- (0084B480) -------------------------------------------------------- double __cdecl sub_84B480(float *a1, float *a2, float *a3, float *a4, float *a5) { float v5; // ST00_4 float v6; // ST04_4 float v7; // ST08_4 double v8; // st6 double v9; // st7 double v10; // st5 float v11; // ST00_4 double v12; // st4 double v13; // st4 float v14; // ST00_4 float v15; // ST04_4 double v16; // st3 double v17; // st3 float v18; // ST04_4 double v19; // rt2 double v20; // st3 double v21; // st6 double v22; // rtt double v23; // st4 double v24; // st7 float v25; // ST08_4 double v26; // st5 double v27; // st5 float v28; // ST08_4 float v30; // [esp+Ch] [ebp-4h] float v31; // [esp+18h] [ebp+8h] float v32; // [esp+18h] [ebp+8h] float v33; // [esp+18h] [ebp+8h] float v34; // [esp+18h] [ebp+8h] float v35; // [esp+18h] [ebp+8h] float v36; // [esp+18h] [ebp+8h] v30 = 0.0; v5 = *a1 - *a2; v6 = a1[1] - a2[1]; v7 = a1[2] - a2[2]; v8 = v6; v9 = v5; v10 = v7; v11 = a2[5] * v7 + a2[3] * v5 + a2[4] * v6; v12 = v11; if ( -a2[12] <= v11 ) { if ( a2[12] >= v12 ) goto LABEL_6; v32 = v12 - a2[12]; v30 = v32 * v32 + 0.0; v13 = a2[12]; } else { v31 = v12 + a2[12]; v30 = v31 * v31 + 0.0; v13 = -a2[12]; } v14 = v13; v12 = v14; LABEL_6: v15 = a2[7] * v8 + a2[6] * v9 + a2[8] * v10; v16 = v15; if ( -a2[13] <= v15 ) { if ( a2[13] >= v16 ) goto LABEL_11; v34 = v16 - a2[13]; v30 = v34 * v34 + v30; v17 = a2[13]; } else { v33 = v16 + a2[13]; v30 = v33 * v33 + v30; v17 = -a2[13]; } v18 = v17; v16 = v18; LABEL_11: v19 = v16; v20 = v8 * a2[10]; v21 = v19; v22 = v12; v23 = v9 * a2[9] + v20; v24 = v22; v25 = v10 * a2[11] + v23; v26 = v25; if ( -a2[14] > v25 ) { v35 = v26 + a2[14]; v30 = v35 * v35 + v30; v27 = -a2[14]; LABEL_15: v28 = v27; v26 = v28; goto LABEL_16; } if ( a2[14] < v26 ) { v36 = v26 - a2[14]; v30 = v36 * v36 + v30; v27 = a2[14]; goto LABEL_15; } LABEL_16: *a3 = v24; *a4 = v21; *a5 = v26; return v30; } //----- (0084B610) -------------------------------------------------------- void __usercall sub_84B610(float *a1@, float *a2@, float *a3@) { float v3; // ST00_4 double v4; // st7 float v5; // ST00_4 float v6; // ST00_4 double v7; // st7 float v8; // ST00_4 float v9; // ST00_4 float v10; // ST00_4 if ( -a1[12] <= *a2 ) { if ( a1[12] >= (double)*a2 ) goto LABEL_6; v5 = *a2 - a1[12]; *a3 = v5 * v5 + *a3; v4 = a1[12]; } else { v3 = a1[12] + *a2; *a3 = v3 * v3 + *a3; v4 = -a1[12]; } *a2 = v4; LABEL_6: if ( -a1[13] <= a2[1] ) { if ( a1[13] >= (double)a2[1] ) goto LABEL_11; v8 = a2[1] - a1[13]; *a3 = v8 * v8 + *a3; v7 = a1[13]; } else { v6 = a1[13] + a2[1]; *a3 = v6 * v6 + *a3; v7 = -a1[13]; } a2[1] = v7; LABEL_11: if ( -a1[14] <= a2[2] ) { if ( a1[14] < (double)a2[2] ) { v10 = a2[2] - a1[14]; *a3 = v10 * v10 + *a3; a2[2] = a1[14]; } } else { v9 = a1[14] + a2[2]; *a3 = v9 * v9 + *a3; a2[2] = -a1[14]; } } //----- (0084B710) -------------------------------------------------------- int __usercall sub_84B710@(int a1@, int a2@, int a3@, int a4@, int a5, int a6, int a7, float *a8, float *a9) { int v9; // ecx double v10; // st7 double v11; // st6 bool v12; // c0 bool v13; // c3 double v14; // st7 bool v15; // pf double v16; // st6 bool v17; // c0 bool v18; // c3 int result; // eax double v20; // st7 double v21; // st6 double v22; // st5 double v23; // st4 double v24; // st3 double v25; // st7 double v26; // rt1 double v27; // st4 double v28; // st6 double v29; // st4 double v30; // st3 double v31; // st5 float *v32; // eax double v33; // st4 double v34; // st7 double v35; // st5 int v36; // eax double v37; // st7 double v38; // st6 double v39; // st7 double v40; // st7 double v41; // st6 int v42; // eax double v43; // st5 double v44; // st4 double v45; // st7 double v46; // st4 double v47; // st3 double v48; // st6 double v49; // st6 double v50; // st7 double v51; // st7 double v52; // st6 double v53; // st7 double v54; // st6 double v55; // st5 double v56; // st4 double v57; // st3 double v58; // st1 double v59; // st7 double v60; // rt0 double v61; // st4 double v62; // st3 double v63; // st5 double v64; // st6 double v65; // rt0 double v66; // st4 double v67; // st4 double v68; // st3 double v69; // st7 double v70; // st5 double v71; // st3 double v72; // st7 double v73; // rt1 double v74; // st4 double v75; // st3 double v76; // st5 double v77; // st7 double v78; // st3 double v79; // st6 double v80; // rtt double v81; // st4 double v82; // st5 double v83; // st7 double v84; // st5 double v85; // st6 float v86[3]; // [esp+0h] [ebp-Ch] float v87; // [esp+14h] [ebp+8h] float v88; // [esp+18h] [ebp+Ch] float v89; // [esp+18h] [ebp+Ch] float v90; // [esp+18h] [ebp+Ch] float v91; // [esp+18h] [ebp+Ch] float v92; // [esp+18h] [ebp+Ch] float v93; // [esp+18h] [ebp+Ch] float v94; // [esp+18h] [ebp+Ch] float v95; // [esp+18h] [ebp+Ch] float v96; // [esp+18h] [ebp+Ch] float v97; // [esp+18h] [ebp+Ch] float v98; // [esp+18h] [ebp+Ch] float v99; // [esp+18h] [ebp+Ch] float v100; // [esp+18h] [ebp+Ch] float v101; // [esp+18h] [ebp+Ch] float v102; // [esp+18h] [ebp+Ch] float v103; // [esp+18h] [ebp+Ch] float v104; // [esp+18h] [ebp+Ch] float v105; // [esp+18h] [ebp+Ch] float v106; // [esp+18h] [ebp+Ch] float v107; // [esp+18h] [ebp+Ch] float v108; // [esp+18h] [ebp+Ch] float v109; // [esp+18h] [ebp+Ch] float v110; // [esp+18h] [ebp+Ch] float v111; // [esp+18h] [ebp+Ch] float v112; // [esp+18h] [ebp+Ch] float v113; // [esp+18h] [ebp+Ch] float v114; // [esp+18h] [ebp+Ch] float v115; // [esp+18h] [ebp+Ch] float v116; // [esp+18h] [ebp+Ch] float v117; // [esp+18h] [ebp+Ch] float v118; // [esp+18h] [ebp+Ch] float v119; // [esp+18h] [ebp+Ch] float v120; // [esp+18h] [ebp+Ch] float v121; // [esp+18h] [ebp+Ch] float v122; // [esp+18h] [ebp+Ch] float v123; // [esp+18h] [ebp+Ch] float v124; // [esp+18h] [ebp+Ch] float v125; // [esp+1Ch] [ebp+10h] float v126; // [esp+1Ch] [ebp+10h] float v127; // [esp+1Ch] [ebp+10h] float v128; // [esp+1Ch] [ebp+10h] v9 = a6; v86[a1] = *(float *)(a2 + 4 * a1) + *(float *)(a5 + 4 * a1 + 48); v86[a4] = *(float *)(a2 + 4 * a4) + *(float *)(a5 + 4 * a4 + 48); v10 = *(float *)(a3 + 4 * a6) * v86[a1]; v11 = *(float *)(a3 + 4 * a1) * *(float *)(a7 + 4 * a6); v12 = v11 < v10; v13 = v11 == v10; v14 = *(float *)(a3 + 4 * a6) * v86[a4]; v15 = (v12 || v13) == 0; v16 = *(float *)(a7 + 4 * a6) * *(float *)(a3 + 4 * a4); v17 = v16 < v14; v18 = v16 == v14; if ( !v15 ) { if ( v17 || v18 ) { result = a7; *(float *)(a2 + 4 * a6) = *(float *)(a5 + 4 * a6 + 48); v87 = 1.0 / *(float *)(a3 + 4 * a6); *(float *)(a2 + 4 * a1) = *(float *)(a2 + 4 * a1) - *(float *)(a3 + 4 * a1) * *(float *)(a7 + 4 * a6) * v87; *(float *)(a2 + 4 * a4) = *(float *)(a2 + 4 * a4) - *(float *)(a7 + 4 * a6) * *(float *)(a3 + 4 * a4) * v87; *a8 = v87 * -*(float *)(a7 + 4 * a6); return result; } v88 = *(float *)(a3 + 4 * a6) * *(float *)(a3 + 4 * a6) + *(float *)(a3 + 4 * a4) * *(float *)(a3 + 4 * a4); v20 = *(float *)(a3 + 4 * v9) * *(float *)(a7 + 4 * v9); v21 = *(float *)(a3 + 4 * a4) * v86[a4]; v22 = v88; v89 = v86[a1] * v88 - (v21 + v20) * *(float *)(a3 + 4 * a1); if ( (v22 + v22) * *(float *)(a5 + 4 * a1 + 48) >= v89 ) { v90 = v89 / v22; v23 = v90; v91 = v86[a1] - v90; v24 = v20 + *(float *)(a3 + 4 * a1) * v91; v25 = v91; v26 = v23; v27 = v21 + v24; v28 = v26; v92 = v27; v29 = -v92; v30 = v22 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v31 = v92; v93 = v30; v94 = v29 / v93; v32 = a9; v33 = v86[a4] * v86[a4] + *(float *)(a7 + 4 * v9) * *(float *)(a7 + 4 * v9) + v25 * v25; v34 = v94; v35 = v31 * v94 + v33 + *a9; LABEL_6: *v32 = v35; *a8 = v34; result = a5; *(float *)(a2 + 4 * v9) = *(float *)(a5 + 4 * v9 + 48); *(float *)(a2 + 4 * a1) = v28 - *(float *)(a5 + 4 * a1 + 48); *(float *)(a2 + 4 * a4) = -*(float *)(a5 + 4 * a4 + 48); return result; } v36 = a7; v95 = v21 + v20 + *(float *)(a3 + 4 * a1) * *(float *)(a7 + 4 * a1); v37 = v95; v125 = v22 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v38 = -v95 / v125; LABEL_8: v96 = v38; *a9 = v37 * v96 + *(float *)(v36 + 4 * v9) * *(float *)(v36 + 4 * v9) + *(float *)(v36 + 4 * a1) * *(float *)(v36 + 4 * a1) + v86[a4] * v86[a4] + *a9; *a8 = v96; result = a5; *(float *)(a2 + 4 * v9) = *(float *)(a5 + 4 * v9 + 48); *(float *)(a2 + 4 * a1) = *(float *)(a5 + 4 * a1 + 48); *(float *)(a2 + 4 * a4) = -*(float *)(a5 + 4 * a4 + 48); return result; } v39 = *(float *)(a3 + 4 * a6); if ( v17 || v18 ) { v97 = v39 * v39 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v40 = *(float *)(a3 + 4 * v9) * *(float *)(a7 + 4 * v9) + *(float *)(a3 + 4 * a1) * v86[a1]; v41 = v97; v98 = v97 * v86[a4] - *(float *)(a3 + 4 * a4) * v40; v42 = a7; if ( (v41 + v41) * *(float *)(a5 + 4 * a4 + 48) >= v98 ) { v99 = v98 / v41; v43 = v99; v100 = v86[a4] - v99; v44 = v40 + *(float *)(a3 + 4 * a4) * v100; v45 = v100; v101 = v44; v46 = -v101; v47 = v41 + *(float *)(a3 + 4 * a4) * *(float *)(a3 + 4 * a4); v48 = v101; v102 = v47; v103 = v46 / v102; *a9 = v48 * v103 + v45 * v45 + *(float *)(a7 + 4 * v9) * *(float *)(a7 + 4 * v9) + v86[a1] * v86[a1] + *a9; v49 = v103; v50 = v43; LABEL_12: *a8 = v49; result = a5; *(float *)(a2 + 4 * v9) = *(float *)(a5 + 4 * v9 + 48); *(float *)(a2 + 4 * a1) = -*(float *)(a5 + 4 * a1 + 48); *(float *)(a2 + 4 * a4) = v50 - *(float *)(a5 + 4 * a4 + 48); return result; } v104 = v40 + *(float *)(a3 + 4 * a4) * *(float *)(a7 + 4 * a4); v51 = v104; v126 = v41 + *(float *)(a3 + 4 * a4) * *(float *)(a3 + 4 * a4); v52 = -v104 / v126; LABEL_14: v105 = v52; *a9 = v51 * v105 + *(float *)(v42 + 4 * a4) * *(float *)(v42 + 4 * a4) + v86[a1] * v86[a1] + *(float *)(v42 + 4 * v9) * *(float *)(v42 + 4 * v9) + *a9; *a8 = v105; result = a5; *(float *)(a2 + 4 * v9) = *(float *)(a5 + 4 * v9 + 48); *(float *)(a2 + 4 * a1) = -*(float *)(a5 + 4 * a1 + 48); *(float *)(a2 + 4 * a4) = *(float *)(a5 + 4 * a4 + 48); return result; } v53 = v39 * v39; v54 = *(float *)(a3 + 4 * a4) * *(float *)(a3 + 4 * a4); v106 = v54 + v53; v55 = *(float *)(a3 + 4 * v9) * *(float *)(a7 + 4 * v9); v56 = *(float *)(a3 + 4 * a4) * v86[a4]; v57 = v106; v107 = v86[a1] * v106 - (v56 + v55) * *(float *)(a3 + 4 * a1); v58 = v107; if ( v107 >= 0.0 ) { v59 = v57; if ( (v57 + v57) * *(float *)(a5 + 4 * a1 + 48) >= v58 ) { v60 = v56; v108 = v58 / v57; v61 = v108; v109 = v86[a1] - v108; v62 = v55 + *(float *)(a3 + 4 * a1) * v109; v63 = v109; v64 = v60 + v62; v65 = v61; v66 = v64; v28 = v65; v110 = v66; v67 = -v110; v68 = v59 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v69 = v110; v111 = v68; v112 = v67 / v111; v32 = a9; v35 = v69 * v112 + v86[a4] * v86[a4] + *(float *)(a7 + 4 * v9) * *(float *)(a7 + 4 * v9) + v63 * v63 + *a9; v34 = v112; goto LABEL_6; } v36 = a7; v113 = v56 + v55 + *(float *)(a3 + 4 * a1) * *(float *)(a7 + 4 * a1); v37 = v113; v127 = v57 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v38 = -v113 / v127; goto LABEL_8; } v114 = v53 + *(float *)(a3 + 4 * a1) * *(float *)(a3 + 4 * a1); v70 = v55 + *(float *)(a3 + 4 * a1) * v86[a1]; v71 = v114; v115 = v114 * v86[a4] - *(float *)(a3 + 4 * a4) * v70; v72 = v115; if ( v115 >= 0.0 ) { v42 = a7; if ( (v71 + v71) * *(float *)(a5 + 4 * a4 + 48) >= v72 ) { v73 = v71; v116 = v72 / v71; v74 = v116; v117 = v86[a4] - v116; v75 = v70 + *(float *)(a3 + 4 * a4) * v117; v76 = v117; v118 = v75; v77 = -v118; v78 = v54 + v73; v79 = v118; v119 = v78; v80 = v74; v81 = v77 / v119; v50 = v80; v120 = v81; v82 = v79 * v120 + v76 * v76 + *(float *)(a7 + 4 * v9) * *(float *)(a7 + 4 * v9) + v86[a1] * v86[a1] + *a9; v49 = v120; *a9 = v82; goto LABEL_12; } v121 = v70 + *(float *)(a3 + 4 * a4) * *(float *)(a7 + 4 * a4); v128 = v54 + v71; v52 = -v121 / v128; v51 = v121; goto LABEL_14; } v122 = v70 + v56; v83 = -v122; v84 = v54 + v71; v85 = v122; v123 = v84; v124 = v83 / v123; *a9 = v85 * v124 + v86[a4] * v86[a4] + v86[a1] * v86[a1] + *(float *)(a7 + 4 * v9) * *(float *)(a7 + 4 * v9) + *a9; *a8 = v124; result = a5; *(float *)(a2 + 4 * v9) = *(float *)(a5 + 4 * v9 + 48); *(float *)(a2 + 4 * a1) = -*(float *)(a5 + 4 * a1 + 48); *(float *)(a2 + 4 * a4) = -*(float *)(a5 + 4 * a4 + 48); return result; } // 84B710: using guessed type float var_C[3]; //----- (0084BD30) -------------------------------------------------------- int __usercall sub_84BD30@(float *a1@, float *a2@, float *a3@, float *a4, float *a5) { float *v5; // edi double v6; // st6 double v7; // st7 double v9; // st7 float v10; // [esp+Ch] [ebp-Ch] float v11; // [esp+10h] [ebp-8h] float v12; // [esp+14h] [ebp-4h] float v13; // [esp+24h] [ebp+Ch] float v14; // [esp+24h] [ebp+Ch] float v15; // [esp+24h] [ebp+Ch] float v16; // [esp+24h] [ebp+Ch] float v17; // [esp+24h] [ebp+Ch] float v18; // [esp+24h] [ebp+Ch] v5 = a5; v10 = *a4 - a3[12]; v11 = a4[1] - a3[13]; v12 = a4[2] - a3[14]; v13 = a5[1] * v10; v6 = v13; v14 = *v5 * v11; if ( v14 > v6 ) { v17 = v11 * v5[2]; v9 = v17; v18 = v5[1] * v12; if ( v18 <= v9 ) return sub_84B710(2, (int)a4, (int)v5, 0, (int)a3, 1, (int)&v10, a1, a2); } else { v15 = v10 * v5[2]; v7 = v15; v16 = *v5 * v12; if ( v16 <= v7 ) return sub_84B710(1, (int)a4, (int)v5, 2, (int)a3, 0, (int)&v10, a1, a2); } return sub_84B710(0, (int)a4, (int)v5, 1, (int)a3, 2, (int)&v10, a1, a2); } //----- (0084BE20) -------------------------------------------------------- void __usercall sub_84BE20(int a1@, int a2@, int a3@, int a4@, int a5, int a6, float *a7, float *a8) { int v8; // ebx float v9; // ST04_4 double v10; // st7 double v11; // st6 double v12; // st6 double v13; // st5 double v14; // st6 double v15; // st7 double v16; // st5 double v17; // st7 double v18; // st7 double v19; // st6 bool v20; // c0 bool v21; // c3 double v22; // st7 float v23; // [esp+4h] [ebp-4h] float v24; // [esp+10h] [ebp+8h] float v25; // [esp+10h] [ebp+8h] float v26; // [esp+10h] [ebp+8h] float v27; // [esp+10h] [ebp+8h] float v28; // [esp+10h] [ebp+8h] float v29; // [esp+10h] [ebp+8h] float v30; // [esp+10h] [ebp+8h] float v31; // [esp+10h] [ebp+8h] float v32; // [esp+10h] [ebp+8h] float v33; // [esp+10h] [ebp+8h] float v34; // [esp+10h] [ebp+8h] float v35; // [esp+10h] [ebp+8h] v8 = a5; v24 = *(float *)(a3 + 4 * a1) - *(float *)(a5 + 4 * a1 + 48); v9 = *(float *)(a3 + 4 * a2) - *(float *)(v8 + 4 * a2 + 48); v10 = v24; v25 = *(float *)(a4 + 4 * a2) * v24; v11 = v9; v23 = *(float *)(a4 + 4 * a1) * v9; if ( v23 > (double)v25 ) { *(float *)(a3 + 4 * a2) = *(float *)(v8 + 4 * a2 + 48); v30 = *(float *)(v8 + 4 * a1 + 48) + *(float *)(a3 + 4 * a1); v16 = v30; v31 = v23 - *(float *)(a4 + 4 * a2) * v30; if ( v31 >= 0.0 ) { v17 = v31; v32 = 1.0 / (*(float *)(a4 + 4 * a1) * *(float *)(a4 + 4 * a1) + *(float *)(a4 + 4 * a2) * *(float *)(a4 + 4 * a2)); *a8 = v17 * v17 * v32 + *a8; *(float *)(a3 + 4 * a1) = -*(float *)(v8 + 4 * a1 + 48); *a7 = -(v32 * (v11 * *(float *)(a4 + 4 * a2) + v16 * *(float *)(a4 + 4 * a1))); goto LABEL_9; } v33 = 1.0 / *(float *)(a4 + 4 * a2); *(float *)(a3 + 4 * a1) = *(float *)(a3 + 4 * a1) - v23 * v33; v15 = v33 * -v11; } else { v12 = v25; *(float *)(a3 + 4 * a1) = *(float *)(v8 + 4 * a1 + 48); v26 = *(float *)(a3 + 4 * a2) + *(float *)(v8 + 4 * a2 + 48); v13 = v26; v27 = v12 - *(float *)(a4 + 4 * a1) * v26; if ( v27 < 0.0 ) { v29 = 1.0 / *(float *)(a4 + 4 * a1); *(float *)(a3 + 4 * a2) = *(float *)(a3 + 4 * a2) - v12 * v29; *a7 = v29 * -v10; goto LABEL_9; } v14 = v27; v28 = 1.0 / (*(float *)(a4 + 4 * a1) * *(float *)(a4 + 4 * a1) + *(float *)(a4 + 4 * a2) * *(float *)(a4 + 4 * a2)); *a8 = v14 * v14 * v28 + *a8; *(float *)(a3 + 4 * a2) = -*(float *)(v8 + 4 * a2 + 48); v15 = -((v10 * *(float *)(a4 + 4 * a1) + v13 * *(float *)(a4 + 4 * a2)) * v28); } *a7 = v15; LABEL_9: v18 = *(float *)(a3 + 4 * a6); v19 = -*(float *)(v8 + 4 * a6 + 48); v20 = v19 < v18; v21 = v19 == v18; v22 = *(float *)(a3 + 4 * a6); if ( v20 || v21 ) { if ( *(float *)(v8 + 4 * a6 + 48) < v22 ) { v35 = *(float *)(a3 + 4 * a6) - *(float *)(v8 + 4 * a6 + 48); *a8 = v35 * v35 + *a8; *(float *)(a3 + 4 * a6) = *(float *)(v8 + 4 * a6 + 48); } } else { v34 = v22 + *(float *)(v8 + 4 * a6 + 48); *a8 = v34 * v34 + *a8; *(float *)(a3 + 4 * a6) = -*(float *)(v8 + 4 * a6 + 48); } } //----- (0084C030) -------------------------------------------------------- void __usercall sub_84C030(int a1@, int a2@, int a3@, int a4@, int a5, int a6, float *a7, float *a8) { int v8; // edx double v9; // st7 double v10; // st6 bool v11; // c0 bool v12; // c3 double v13; // st7 double v14; // st7 float v15; // [esp+Ch] [ebp+8h] float v16; // [esp+Ch] [ebp+8h] float v17; // [esp+Ch] [ebp+8h] float v18; // [esp+Ch] [ebp+8h] v8 = a5; *a7 = (*(float *)(a5 + 4 * a1 + 48) - *(float *)(a2 + 4 * a1)) / *(float *)(a6 + 4 * a1); *(float *)(a2 + 4 * a1) = *(float *)(a5 + 4 * a1 + 48); v9 = *(float *)(a2 + 4 * a4); v10 = -*(float *)(a5 + 4 * a4 + 48); v11 = v10 < v9; v12 = v10 == v9; v13 = *(float *)(a2 + 4 * a4); if ( v11 || v12 ) { if ( *(float *)(a5 + 4 * a4 + 48) >= v13 ) goto LABEL_6; v16 = *(float *)(a2 + 4 * a4) - *(float *)(a5 + 4 * a4 + 48); *a8 = v16 * v16 + *a8; v14 = *(float *)(v8 + 4 * a4 + 48); } else { v15 = v13 + *(float *)(a5 + 4 * a4 + 48); *a8 = v15 * v15 + *a8; v14 = -*(float *)(v8 + 4 * a4 + 48); } *(float *)(a2 + 4 * a4) = v14; LABEL_6: if ( -*(float *)(v8 + 4 * a3 + 48) <= *(float *)(a2 + 4 * a3) ) { if ( *(float *)(v8 + 4 * a3 + 48) < (double)*(float *)(a2 + 4 * a3) ) { v18 = *(float *)(a2 + 4 * a3) - *(float *)(v8 + 4 * a3 + 48); *a8 = v18 * v18 + *a8; *(float *)(a2 + 4 * a3) = *(float *)(v8 + 4 * a3 + 48); } } else { v17 = *(float *)(v8 + 4 * a3 + 48) + *(float *)(a2 + 4 * a3); *a8 = v17 * v17 + *a8; *(float *)(a2 + 4 * a3) = -*(float *)(v8 + 4 * a3 + 48); } } //----- (0084C110) -------------------------------------------------------- double __cdecl sub_84C110(float *a1, float *a2, float *a3, float *a4, float *a5, float *a6) { float *v6; // ebx float *v7; // edi signed int v8; // ecx double v9; // st6 float *v10; // esi float *v11; // edx float *v12; // eax float *v14; // ecx float *v16; // edx float *v17; // eax float v18; // [esp+Ch] [ebp-1Ch] float v19; // [esp+10h] [ebp-18h] float v20; // [esp+14h] [ebp-14h] float v21; // [esp+18h] [ebp-10h] float v22; // [esp+1Ch] [ebp-Ch] float v23; // [esp+20h] [ebp-8h] float v24; // [esp+24h] [ebp-4h] v6 = a2; v7 = a1; v8 = 0; v18 = *a1 - *a2; v19 = a1[1] - a2[1]; v20 = a1[2] - a2[2]; v21 = a2[5] * v20 + a2[4] * v19 + a2[3] * v18; v22 = a2[7] * v19 + a2[6] * v18 + a2[8] * v20; v23 = v20 * a2[11] + v18 * a2[9] + v19 * a2[10]; v18 = a2[4] * a1[4] + a2[3] * a1[3] + a2[5] * a1[5]; v19 = a1[4] * a2[7] + a2[6] * a1[3] + a1[5] * a2[8]; v20 = a2[10] * a1[4] + a1[3] * a2[9] + a2[11] * a1[5]; do { if ( *(&v18 + v8) >= 0.0 ) { *((_BYTE *)&a2 + v8) = 0; } else { v9 = *(&v21 + v8); *((_BYTE *)&a2 + v8) = 1; *(&v21 + v8) = -v9; *(&v18 + v8) = -*(&v18 + v8); } ++v8; } while ( v8 < 3 ); v10 = a3; v24 = 0.0; *a3 = 0.0; if ( v18 <= 0.0 ) { if ( v19 <= 0.0 ) { if ( v20 <= 0.0 ) { sub_84B610(v6, &v21, &v24); } else { sub_84C030(2, (int)&v21, 1, 0, (int)v6, (int)&v18, v10, &v24); v7 = a1; } } else { if ( v20 <= 0.0 ) sub_84C030(1, (int)&v21, 2, 0, (int)v6, (int)&v18, v10, &v24); else sub_84BE20(1, 2, (int)&v21, (int)&v18, (int)v6, 0, v10, &v24); v7 = a1; } } else if ( v19 <= 0.0 ) { if ( v20 <= 0.0 ) sub_84C030(0, (int)&v21, 2, 1, (int)v6, (int)&v18, v10, &v24); else sub_84BE20(0, 2, (int)&v21, (int)&v18, (int)v6, 1, v10, &v24); v7 = a1; } else { if ( v20 > 0.0 ) { sub_84BD30(v10, &v24, v6, &v21, &v18); goto LABEL_24; } sub_84BE20(0, 1, (int)&v21, (int)&v18, (int)v6, 2, v10, &v24); v7 = a1; } v10 = a3; LABEL_24: if ( *v10 < 0.0 ) { v16 = a6; v17 = a5; *v10 = 0.0; return (float)sub_84B480(v7, v6, a4, v17, v16); } if ( *v10 > 1.0 ) { v14 = a6; *v10 = 1.0; v18 = *v7 + v7[3]; v19 = v7[4] + v7[1]; v20 = v7[5] + v7[2]; return (float)sub_84B480(&v18, v6, a4, a5, v14); } if ( (_BYTE)a2 ) v21 = -v21; if ( BYTE1(a2) ) v22 = -v22; if ( BYTE2(a2) ) v23 = -v23; v11 = a5; *a4 = v21; v12 = a6; *v11 = v22; *v12 = v23; return v24; } //----- (0084C410) -------------------------------------------------------- void *__thiscall sub_84C410(void *this, char a2) { void *v2; // esi v2 = this; sub_84E050(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0084C440) -------------------------------------------------------- BOOL __thiscall sub_84C440(_DWORD *this) { return this[32] || this[33]; } //----- (0084C460) -------------------------------------------------------- float *__thiscall sub_84C460(float *this, int a2, int a3, int a4, int a5, __int16 a6) { float *v6; // esi int v7; // ebx int v8; // eax float *v9; // ebx int v10; // edi float v11; // ST58_4 float v12; // ST5C_4 float v13; // ST60_4 float v14; // ST40_4 float v15; // ST44_4 float v16; // ST48_4 float v17; // ST58_4 float v18; // ST5C_4 float v19; // ST60_4 float *v20; // ecx float v21; // ST58_4 float v22; // ST5C_4 double v23; // st7 float v24; // ST60_4 float v25; // ST58_4 float v26; // ST5C_4 double v27; // st7 float v28; // ST60_4 double v29; // st7 float v30; // ST3C_4 float v31; // ST58_4 float v32; // ST5C_4 float v33; // ST60_4 float v34; // ST58_4 float v35; // ST5C_4 double v36; // st7 double v37; // st6 float v38; // ST60_4 double v39; // st7 double v40; // st6 double v41; // st7 double v42; // st6 double v43; // rt2 double v44; // st5 double v45; // st7 double v46; // st5 double v47; // rt1 double v48; // st4 float v49; // ST4C_4 double v50; // st3 float v51; // ST50_4 double v52; // st2 float v53; // ST54_4 float v54; // ST58_4 float v55; // ST5C_4 float v56; // ST60_4 float v57; // ST4C_4 float v58; // ST50_4 float v59; // ST54_4 float v60; // ST40_4 float v61; // ST44_4 float v62; // ST2C_4 float v63; // ST14_4 float v64; // ST18_4 float v65; // ST1C_4 float v66; // ST58_4 float v67; // ST5C_4 float v68; // ST60_4 float v69; // ST4C_4 float v70; // ST50_4 float v71; // ST54_4 float v72; // ST40_4 float v73; // ST44_4 float v74; // ST48_4 float v75; // ST4C_4 float v76; // ST50_4 float v77; // ST54_4 float *v79; // [esp+Ch] [ebp-8Ch] float *v80; // [esp+1Ch] [ebp-7Ch] float *v81; // [esp+2Ch] [ebp-6Ch] float v82; // [esp+30h] [ebp-68h] float v83; // [esp+30h] [ebp-68h] float v84; // [esp+30h] [ebp-68h] float v85; // [esp+34h] [ebp-64h] float v86; // [esp+34h] [ebp-64h] float v87; // [esp+34h] [ebp-64h] float v88; // [esp+38h] [ebp-60h] float v89; // [esp+38h] [ebp-60h] float v90; // [esp+38h] [ebp-60h] float v91; // [esp+3Ch] [ebp-5Ch] float v92; // [esp+40h] [ebp-58h] float v93; // [esp+44h] [ebp-54h] float v94; // [esp+48h] [ebp-50h] float v95; // [esp+48h] [ebp-50h] float v96; // [esp+48h] [ebp-50h] float v97; // [esp+4Ch] [ebp-4Ch] float v98; // [esp+4Ch] [ebp-4Ch] float v99; // [esp+4Ch] [ebp-4Ch] float v100; // [esp+50h] [ebp-48h] float v101; // [esp+50h] [ebp-48h] float v102; // [esp+50h] [ebp-48h] float v103; // [esp+54h] [ebp-44h] float v104; // [esp+58h] [ebp-40h] float v105; // [esp+5Ch] [ebp-3Ch] char v106; // [esp+60h] [ebp-38h] v6 = this; this[31] = 0.0; this[34] = 0.0; this[32] = 0.0; this[33] = 0.0; *(_DWORD *)this = &NiOBBLeaf::`vftable'; v7 = 12 * *(unsigned __int16 *)(a3 + 2 * (unsigned __int16)(3 * a6)); *((_DWORD *)this + 35) = v7 + a5; v8 = 12 * *(unsigned __int16 *)(a3 + 2 * (unsigned __int16)(3 * a6 + 1)); *((_DWORD *)this + 36) = v8 + a5; v9 = (float *)(a4 + v7); v10 = 12 * *(unsigned __int16 *)(a3 + 2 * (unsigned __int16)(3 * a6 + 2)); *((_DWORD *)this + 37) = v10 + a5; v80 = (float *)(v10 + a4 + 4); v79 = (float *)(a4 + v8); v11 = *(float *)(a4 + v8) + *v9; v12 = *(float *)(a4 + v8 + 4) + v9[1]; v13 = *(float *)(a4 + v8 + 8) + v9[2]; v81 = (float *)(v10 + a4 + 8); v14 = *(float *)(v10 + a4) + v11; v15 = *v80 + v12; v16 = v13 + *v81; v17 = v14 * 0.3333333432674408; v18 = v15 * 0.3333333432674408; v19 = 0.3333333432674408 * v16; v20 = this + 1; *v20 = v17; v20[1] = v18; v20[2] = v19; v21 = *(float *)(a4 + v8) - *v9; v22 = *(float *)(a4 + v8 + 4) - v9[1]; v23 = *(float *)(a4 + v8 + 8) - v9[2]; v6[4] = v21; v6[5] = v22; v24 = v23; v6[6] = v24; sub_4430B0(v6 + 4); v25 = *(float *)(v10 + a4) - *v9; v26 = *v80 - v9[1]; v27 = *v81 - v9[2]; v6[7] = v25; v6[8] = v26; v28 = v27; v29 = v6[4]; v6[9] = v28; v30 = v29 * v6[7] + v6[8] * v6[5] + v6[6] * v6[9]; v31 = v6[4] * v30; v32 = v6[5] * v30; v33 = v30 * v6[6]; v6[7] = v6[7] - v31; v6[8] = v6[8] - v32; v6[9] = v6[9] - v33; sub_4430B0(v6 + 7); v34 = v6[9] * v6[5] - v6[6] * v6[8]; v35 = v6[6] * v6[7] - v6[4] * v6[9]; v36 = v6[4] * v6[8]; v37 = v6[5] * v6[7]; v6[10] = v34; v6[11] = v35; v38 = v36 - v37; v6[12] = v38; v91 = 0.0; v92 = 0.0; v93 = 0.0; v103 = 0.0; v104 = 0.0; v105 = 0.0; v94 = *v9 - v6[1]; v97 = v9[1] - v6[2]; v100 = v9[2] - v6[3]; v85 = v6[6] * v100 + v6[4] * v94 + v6[5] * v97; v82 = v6[8] * v97 + v94 * v6[7] + v6[9] * v100; v88 = v94 * v6[10] + v97 * v6[11] + v100 * v6[12]; if ( v85 >= 0.0 ) { if ( v85 > 0.0 ) v103 = v6[6] * v100 + v6[4] * v94 + v6[5] * v97; } else { v91 = v6[6] * v100 + v6[4] * v94 + v6[5] * v97; } if ( v82 >= 0.0 ) { if ( v82 > 0.0 ) v104 = v6[8] * v97 + v94 * v6[7] + v6[9] * v100; } else { v92 = v6[8] * v97 + v94 * v6[7] + v6[9] * v100; } if ( v88 >= 0.0 ) { if ( v88 > 0.0 ) v105 = v94 * v6[10] + v97 * v6[11] + v100 * v6[12]; } else { v93 = v94 * v6[10] + v97 * v6[11] + v100 * v6[12]; } v95 = *v79 - v6[1]; v98 = v79[1] - v6[2]; v101 = v79[2] - v6[3]; v86 = v6[6] * v101 + v6[4] * v95 + v6[5] * v98; v83 = v6[8] * v98 + v95 * v6[7] + v6[9] * v101; v89 = v95 * v6[10] + v98 * v6[11] + v101 * v6[12]; if ( v91 <= (double)v86 ) { if ( v103 >= (double)v86 ) { v39 = v91; } else { v39 = v91; v103 = v6[6] * v101 + v6[4] * v95 + v6[5] * v98; } } else { v39 = v86; } if ( v92 <= (double)v83 ) { if ( v104 < (double)v83 ) v104 = v6[8] * v98 + v95 * v6[7] + v6[9] * v101; } else { v92 = v6[8] * v98 + v95 * v6[7] + v6[9] * v101; } if ( v93 <= (double)v89 ) { if ( v105 >= (double)v89 ) { v40 = v93; } else { v40 = v93; v105 = v95 * v6[10] + v98 * v6[11] + v101 * v6[12]; } } else { v40 = v89; } v96 = *(float *)(v10 + a4) - v6[1]; v99 = *v80 - v6[2]; v102 = *v81 - v6[3]; v87 = v6[6] * v102 + v6[4] * v96 + v6[5] * v99; v84 = v6[8] * v99 + v96 * v6[7] + v6[9] * v102; v90 = v96 * v6[10] + v99 * v6[11] + v102 * v6[12]; if ( v87 >= v39 ) { if ( v103 < (double)v87 ) v103 = v6[6] * v102 + v6[4] * v96 + v6[5] * v99; v43 = v40; v42 = v39; v41 = v43; } else { v41 = v40; v42 = v87; } if ( v92 <= (double)v84 ) { if ( v104 >= (double)v84 ) { v44 = v92; } else { v44 = v92; v104 = v6[8] * v99 + v96 * v6[7] + v6[9] * v102; } } else { v44 = v84; } if ( v90 >= v41 ) { if ( v105 < (double)v90 ) v105 = v96 * v6[10] + v99 * v6[11] + v102 * v6[12]; v47 = v44; v46 = v41; v45 = v47; } else { v45 = v44; v46 = v90; } v48 = v103; v49 = v103 - v42; v50 = v104; v51 = v104 - v45; v52 = v105; v53 = v105 - v46; v54 = v49 * 0.5; v55 = v51 * 0.5; v56 = v53 * 0.5; v6[13] = v54; v6[14] = v55; v6[15] = v56; v57 = v42 + v48; v58 = v45 + v50; v59 = v52 + v46; v60 = v57 * 0.5; v61 = v58 * 0.5; v62 = 0.5 * v59; v63 = v62 * v6[10]; v64 = v62 * v6[11]; v65 = v62 * v6[12]; v66 = v61 * v6[7]; v67 = v6[8] * v61; v68 = v61 * v6[9]; v69 = v6[4] * v60; v70 = v6[5] * v60; v71 = v60 * v6[6]; v72 = v69 + v66; v73 = v70 + v67; v74 = v71 + v68; v75 = v72 + v63; v76 = v73 + v64; v77 = v74 + v65; v6[1] = v6[1] + v75; v6[2] = v6[2] + v76; v6[3] = v77 + v6[3]; sub_87C3C0((float *)&v106); sub_854560(v6 + 1, (float *)&v106); *((_DWORD *)v6 + 31) = a2; return v6; } // A23BE8: using guessed type void *NiOBBLeaf::`vftable'; //----- (0084CAC0) -------------------------------------------------------- float *__cdecl sub_84CAC0(float *a1, float *a2, float *a3, float *a4, float *a5) { float v5; // ST18_4 float v6; // ST1C_4 float v7; // ST20_4 float v8; // ST0C_4 float v9; // ST10_4 float v10; // ST14_4 float v11; // ST00_4 float v12; // ST04_4 float v13; // ST08_4 float *result; // eax float v15; // ST20_4 double v16; // st7 double v17; // st5 double v18; // st1 float v19; // [esp+2Ch] [ebp+8h] float v20; // [esp+2Ch] [ebp+8h] float v21; // [esp+2Ch] [ebp+8h] float v22; // [esp+2Ch] [ebp+8h] float v23; // [esp+30h] [ebp+Ch] float v24; // [esp+34h] [ebp+10h] float v25; // [esp+38h] [ebp+14h] v5 = *a1 - *a3; v6 = a1[1] - a3[1]; v7 = a1[2] - a3[2]; v8 = *a2 - *a3; v9 = a2[1] - a3[1]; v10 = a2[2] - a3[2]; v11 = *a4 - *a3; v12 = a4[1] - a3[1]; v13 = a4[2] - a3[2]; v23 = v7 * v7 + v5 * v5 + v6 * v6; v19 = v8 * v5 + v9 * v6 + v10 * v7; v24 = v8 * v8 + v9 * v9 + v10 * v10; result = a5; v25 = v7 * v13 + v6 * v12 + v5 * v11; v15 = v13 * v10 + v9 * v12 + v8 * v11; v16 = v19; v20 = 1.0 / (v24 * v23 - v19 * v19); v17 = v20; v21 = (v24 * v25 - v15 * v16) * v20; v18 = v21; *a5 = v21; v22 = v17 * (v23 * v15 - v16 * v25); a5[1] = v22; a5[2] = 1.0 - v18 - v22; return result; } //----- (0084CC30) -------------------------------------------------------- int __cdecl sub_84CC30(float a1, int a2, float a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { double v10; // st7 float *v11; // ecx float *v12; // eax float *v13; // esi float *v14; // edi double v15; // st5 float v16; // ST3C_4 double v17; // st4 float v18; // ST40_4 double v19; // st3 float v20; // ST30_4 float v21; // ST34_4 float v22; // ST38_4 double v23; // st2 double v24; // st5 float v25; // ST30_4 float v26; // ST34_4 float v27; // ST38_4 float v28; // ST3C_4 float v29; // ST40_4 float v30; // ST44_4 double v31; // st4 float v32; // ST30_4 double v33; // st3 float v34; // ST34_4 float v35; // ST3C_4 float v36; // ST40_4 float v37; // ST44_4 double v38; // st2 float v39; // ST30_4 float v40; // ST34_4 float v41; // ST3C_4 float v42; // ST40_4 float v43; // ST44_4 double v44; // st5 double v45; // st4 float v46; // ST30_4 float v47; // ST34_4 float v48; // ST38_4 float v49; // ST3C_4 float v50; // ST40_4 double v51; // st7 float v52; // ST44_4 double v53; // st5 float v54; // ST30_4 float v55; // ST34_4 float v56; // ST38_4 float v57; // ST3C_4 float v58; // ST40_4 double v59; // st7 float v60; // ST44_4 float v62; // ST18_4 float v63; // ST1C_4 float v64; // ST20_4 float v65; // ST3C_4 float v66; // ST40_4 float v67; // ST44_4 float v68; // ST30_4 float v69; // ST34_4 float v70; // ST38_4 float v71; // ST24_4 float v72; // ST28_4 float v73; // ST2C_4 float v74; // ST30_4 float v75; // ST34_4 float v76; // ST38_4 double v77; // st2 float v78; // ST18_4 float v79; // ST1C_4 float v80; // ST20_4 float v81; // ST24_4 float v82; // ST28_4 double v83; // st7 float v84; // ST2C_4 double v85; // st5 float v86; // ST18_4 float v87; // ST1C_4 float v88; // ST20_4 float v89; // ST24_4 float v90; // ST28_4 double v91; // st7 float v92; // ST2C_4 double v93; // st2 double v94; // st4 double v95; // st2 float v96; // ST18_4 float v97; // ST1C_4 float v98; // ST20_4 float v99; // eax int v100; // eax int v101; // esi int v102; // edi double v103; // st2 float v104; // ST18_4 float v105; // ST1C_4 float v106; // ST20_4 float v107; // ST24_4 float v108; // ST28_4 double v109; // st7 float v110; // ST2C_4 double v111; // st5 float v112; // ST18_4 float v113; // ST1C_4 float v114; // ST20_4 float v115; // ST24_4 float v116; // ST28_4 double v117; // st7 float v118; // ST2C_4 double v119; // st2 double v120; // st5 float v121; // ST18_4 float v122; // ST1C_4 float v123; // ST20_4 double v124; // st6 float v125; // ST18_4 float v126; // ST1C_4 float v127; // ST20_4 float v128; // ST24_4 float v129; // ST28_4 double v130; // st7 float v131; // ST2C_4 double v132; // st5 float v133; // ST18_4 float v134; // ST1C_4 float v135; // ST20_4 float v136; // ST24_4 float v137; // ST28_4 double v138; // st7 float v139; // ST2C_4 float v140; // ST10_4 float v141; // ST14_4 float v142; // ST24_4 float v143; // ST28_4 float v144; // ST2C_4 float v145; // ST18_4 float v146; // ST1C_4 float v147; // ST20_4 float v148; // ST34_4 float v149; // ST38_4 float v150; // ST3C_4 float v151; // [esp+0h] [ebp-40h] float v152; // [esp+24h] [ebp-1Ch] float v153; // [esp+30h] [ebp-10h] float v154; // [esp+30h] [ebp-10h] float v155; // [esp+34h] [ebp-Ch] float v156; // [esp+38h] [ebp-8h] float v157; // [esp+3Ch] [ebp-4h] float v158; // [esp+48h] [ebp+8h] float v159; // [esp+48h] [ebp+8h] float v160; // [esp+48h] [ebp+8h] float v161; // [esp+48h] [ebp+8h] float v162; // [esp+48h] [ebp+8h] float v163; // [esp+48h] [ebp+8h] float v164; // [esp+48h] [ebp+8h] float v165; // [esp+48h] [ebp+8h] float v166; // [esp+48h] [ebp+8h] float v167; // [esp+48h] [ebp+8h] float v168; // [esp+48h] [ebp+8h] float v169; // [esp+48h] [ebp+8h] float v170; // [esp+48h] [ebp+8h] float v171; // [esp+48h] [ebp+8h] float v172; // [esp+48h] [ebp+8h] float v173; // [esp+48h] [ebp+8h] float v174; // [esp+48h] [ebp+8h] float v175; // [esp+48h] [ebp+8h] float v176; // [esp+48h] [ebp+8h] float v177; // [esp+48h] [ebp+8h] float v178; // [esp+4Ch] [ebp+Ch] float v179; // [esp+50h] [ebp+10h] float v180; // [esp+54h] [ebp+14h] int v181; // [esp+54h] [ebp+14h] float v182; // [esp+58h] [ebp+18h] int v183; // [esp+5Ch] [ebp+1Ch] v10 = a1; v11 = (float *)a4; v12 = (float *)a2; v13 = (float *)a5; v14 = (float *)a6; v157 = a1 - 0.0; v158 = *(float *)a4 * 0.0; v15 = v158; v16 = v158; v159 = *(float *)(a4 + 4) * 0.0; v17 = v159; v18 = v159; v160 = *(float *)(a4 + 8) * 0.0; v19 = v160; v20 = *(float *)a5 + v16; v21 = *(float *)(a5 + 4) + v18; v22 = *(float *)(a5 + 8) + v160; v161 = v21 * *(float *)(a2 + 4) + v20 * *(float *)a2 + v22 * *(float *)(a2 + 8); v178 = v161 - a3; v23 = v15; v24 = a3; v25 = v23; v26 = v17; v27 = v19; v28 = *(float *)a6 + v25; v29 = *(float *)(a6 + 4) + v26; v30 = v27 + *(float *)(a6 + 8); v162 = v28 * *v12 + v29 * v12[1] + v30 * v12[2]; v182 = v162 - a3; v163 = *(float *)a4 * v10; v31 = v163; v32 = v163; v164 = *(float *)(a4 + 4) * v10; v33 = v164; v34 = v164; v165 = *(float *)(a4 + 8) * v10; v35 = *v13 + v32; v36 = v13[1] + v34; v37 = v165 + v13[2]; v180 = v35 * *v12 + v36 * v12[1] + v37 * v12[2]; v38 = v180; v181 = 0; v179 = v38 - a3; v39 = v31; v40 = v33; v41 = *(float *)a6 + v39; v42 = *(float *)(a6 + 4) + v40; v43 = v165 + *(float *)(a6 + 8); v166 = v41 * *v12 + v42 * v12[1] + v43 * v12[2]; *(float *)&v183 = v166 - v24; v44 = v182; v45 = v178; if ( v182 * v178 <= 0.0 ) { if ( 0.0 == v45 && 0.0 == v44 ) { *(float *)a7 = 0.0; *(float *)a9 = 0.0; v167 = *(float *)a7; v46 = *v11 * v167; v47 = v11[1] * v167; v48 = v167 * v11[2]; v49 = *v13 + v46; v50 = v13[1] + v47; v51 = v48 + v13[2]; *(float *)a8 = v49; v52 = v51; *(float *)(a8 + 4) = v50; *(float *)(a8 + 8) = v52; v53 = *(float *)a9; v54 = *v11 * v53; v55 = v11[1] * v53; v56 = v53 * v11[2]; v57 = *v14 + v54; v58 = v14[1] + v55; v59 = v56 + v14[2]; *(float *)a10 = v57; *(float *)(a10 + 4) = v58; v60 = v59; *(float *)(a10 + 8) = v60; return 1; } *(float *)a7 = 0.0; v181 = 1; v168 = v45 / (v45 - v44); v62 = *v11 * 0.0; v63 = v11[1] * 0.0; v64 = v11[2] * 0.0; v65 = *v14 * v168; v66 = v14[1] * v168; v67 = v14[2] * v168; v169 = 1.0 - v168; v68 = v169 * *v13; v69 = v169 * v13[1]; v70 = v169 * v13[2]; v71 = v68 + v65; v72 = v69 + v66; v73 = v70 + v67; v74 = v71 + v62; *(float *)a8 = v74; v75 = v72 + v63; *(float *)(a8 + 4) = v75; v76 = v73 + v64; *(float *)(a8 + 8) = v76; } v77 = v179; if ( v179 * v45 > 0.0 ) { v94 = v179; LABEL_17: v103 = *(float *)&v183; if ( *(float *)&v183 * v44 > 0.0 ) { v120 = *(float *)&v183; } else { if ( 0.0 == v44 && 0.0 == v103 ) { *(float *)a7 = 0.0; *(float *)a9 = v10; v173 = *(float *)a7; v104 = *v11 * v173; v105 = v173 * v11[1]; v106 = v173 * v11[2]; v107 = *v14 + v104; v108 = v14[1] + v105; v109 = v106 + v14[2]; *(float *)a8 = v107; *(float *)(a8 + 4) = v108; v110 = v109; *(float *)(a8 + 8) = v110; v111 = *(float *)a9; v112 = *v11 * v111; v113 = v111 * v11[1]; v114 = v111 * v11[2]; v115 = *v14 + v112; v116 = v14[1] + v113; v117 = v114 + v14[2]; *(float *)a10 = v115; *(float *)(a10 + 4) = v116; v118 = v117; *(float *)(a10 + 8) = v118; return 1; } v119 = v44 * v157 / (v44 - v103); v120 = *(float *)&v183; v174 = v119 + 0.0; v95 = v174; v121 = *v11 * v174; v122 = v11[1] * v174; v123 = v11[2] * v174; v154 = *v14 + v121; v99 = v154; v155 = v14[1] + v122; v156 = v123 + v14[2]; if ( v181 ) goto LABEL_11; *(float *)a7 = v174; *(float *)a8 = v154; *(float *)(a8 + 4) = v155; *(float *)(a8 + 8) = v156; v181 = 1; } if ( v120 * v94 > 0.0 ) { if ( !v181 ) return 0; } else { if ( 0.0 == v94 ) { v124 = v94; if ( v120 == 0.0 ) { *(float *)a7 = v10; *(float *)a9 = v10; v175 = *(float *)a7; v125 = *v11 * v175; v126 = v175 * v11[1]; v127 = v175 * v11[2]; v128 = *v13 + v125; v129 = v13[1] + v126; v130 = v127 + v13[2]; *(float *)a8 = v128; v131 = v130; *(float *)(a8 + 4) = v129; *(float *)(a8 + 8) = v131; v132 = *(float *)a9; v133 = *v11 * v132; v134 = v132 * v11[1]; v135 = v132 * v11[2]; v136 = *v14 + v133; v137 = v14[1] + v134; v138 = v135 + v14[2]; *(float *)a10 = v136; *(float *)(a10 + 4) = v137; v139 = v138; *(float *)(a10 + 8) = v139; return 1; } } else { v124 = v94; } v176 = v124 / (v124 - v120); v151 = *v11 * v10; v140 = v11[1] * v10; v141 = v11[2] * v10; v142 = *v14 * v176; v143 = v14[1] * v176; v144 = v14[2] * v176; v177 = 1.0 - v176; v145 = v177 * *v13; v146 = v177 * v13[1]; v147 = v177 * v13[2]; v152 = v145 + v142; v148 = v146 + v143; v149 = v147 + v144; v155 = v148 + v140; v156 = v149 + v141; if ( v181 ) { v99 = v152 + v151; goto LABEL_12; } *(float *)a7 = v10; v150 = v152 + v151; *(float *)a8 = v150; *(float *)(a8 + 4) = v155; *(float *)(a8 + 8) = v156; } *(float *)a9 = *(float *)a7; *(_DWORD *)a10 = *(_DWORD *)a8; *(_DWORD *)(a10 + 4) = *(_DWORD *)(a8 + 4); *(_DWORD *)(a10 + 8) = *(_DWORD *)(a8 + 8); return 1; } if ( 0.0 == v45 && 0.0 == v77 ) { *(float *)a7 = 0.0; *(float *)a9 = v10; v170 = *(float *)a7; v78 = *v11 * v170; v79 = v11[1] * v170; v80 = v170 * v11[2]; v81 = *v13 + v78; v82 = v13[1] + v79; v83 = v80 + v13[2]; *(float *)a8 = v81; *(float *)(a8 + 4) = v82; v84 = v83; *(float *)(a8 + 8) = v84; v85 = *(float *)a9; v86 = *v11 * v85; v87 = v85 * v11[1]; v88 = v85 * v11[2]; v89 = *v13 + v86; v90 = v13[1] + v87; v91 = v88 + v13[2]; *(float *)a10 = v89; *(float *)(a10 + 4) = v90; v92 = v91; *(float *)(a10 + 8) = v92; return 1; } v93 = v45 * v157 / (v45 - v77); v94 = v179; v171 = v93 + 0.0; v95 = v171; v96 = *v11 * v171; v97 = v11[1] * v171; v98 = v11[2] * v171; v153 = *v13 + v96; v99 = v153; v155 = v13[1] + v97; v156 = v98 + v13[2]; if ( !v181 ) { *(float *)a7 = v171; *(float *)a8 = v153; *(float *)(a8 + 4) = v155; *(float *)(a8 + 8) = v156; v181 = 1; goto LABEL_17; } LABEL_11: v10 = v95; LABEL_12: *(float *)a9 = v10; *(float *)a10 = v99; *(float *)(a10 + 4) = v155; *(float *)(a10 + 8) = v156; if ( *(float *)a9 < (double)*(float *)a7 ) { v172 = *(float *)a7; *(float *)a7 = *(float *)a9; *(float *)a9 = v172; v100 = *(_DWORD *)a8; v101 = *(_DWORD *)(a8 + 4); v102 = *(_DWORD *)(a8 + 8); *(_DWORD *)a8 = *(_DWORD *)a10; *(_DWORD *)(a8 + 4) = *(_DWORD *)(a10 + 4); *(_DWORD *)(a8 + 8) = *(_DWORD *)(a10 + 8); *(_DWORD *)a10 = v100; *(_DWORD *)(a10 + 4) = v101; *(_DWORD *)(a10 + 8) = v102; } return 1; } //----- (0084D460) -------------------------------------------------------- int __cdecl sub_84D460(int a1, int a2, int a3, int a4, float a5, int a6, float a7, int a8, int a9) { float *v9; // esi float *v10; // edi float *v11; // edx double v12; // st6 int result; // eax double v14; // st6 double v15; // st5 double v16; // st7 double v17; // st7 double v18; // st5 double v19; // st5 double v20; // st4 double v21; // st7 double v22; // st7 double v23; // st4 double v24; // st3 double v25; // st7 double v26; // st7 float v27; // edx float v28; // ecx float v29; // [esp+28h] [ebp-3Ch] float v30; // [esp+2Ch] [ebp-38h] float v31; // [esp+30h] [ebp-34h] float v32; // [esp+34h] [ebp-30h] float v33; // [esp+38h] [ebp-2Ch] float v34; // [esp+3Ch] [ebp-28h] int v35; // [esp+40h] [ebp-24h] float v36; // [esp+44h] [ebp-20h] float v37; // [esp+48h] [ebp-1Ch] int v38; // [esp+4Ch] [ebp-18h] float v39; // [esp+50h] [ebp-14h] float v40; // [esp+54h] [ebp-10h] int v41; // [esp+58h] [ebp-Ch] int v42; // [esp+5Ch] [ebp-8h] float v43; // [esp+60h] [ebp-4h] if ( !sub_84CC30(a7, a4, a5, a6, a1, a2, (int)&v42, (int)&v38, (int)&v41, (int)&v35) ) return 0; v9 = *(float **)(a3 + 4); v10 = *(float **)a3; sub_84CAC0(*(float **)a3, *(float **)(a3 + 4), *(float **)(a3 + 8), (float *)&v38, &v29); sub_84CAC0(v10, v9, v11, (float *)&v35, &v32); v12 = v29; if ( v29 < 0.0 ) { if ( v32 < 0.0 ) return 0; v43 = v12 / (v12 - v32); v14 = v43; v15 = 1.0 - v43; v43 = v33 * v43 + v30 * v15; if ( v43 >= 0.0 ) { v43 = v34 * v14 + v31 * v15; if ( v43 >= 0.0 ) { v43 = v14 * *(float *)&v41 + *(float *)&v42 * v15; if ( *(float *)a8 > (double)v43 ) { *(float *)a8 = v43; v32 = *(float *)&v35 * v14; v33 = v36 * v14; v34 = v14 * v37; v43 = v15; v29 = v43 * *(float *)&v38; v30 = v43 * v39; v31 = v43 * v40; *(float *)&v35 = v29 + v32; v16 = v30; *(float *)a9 = *(float *)&v35; v36 = v16 + v33; v17 = v31; *(float *)(a9 + 4) = v36; v37 = v17 + v34; *(float *)(a9 + 8) = v37; return 1; } return 1; } } return 0; } v18 = v30; if ( v30 < 0.0 ) { if ( v33 >= 0.0 ) { v43 = v18 / (v18 - v33); v19 = v43; v20 = 1.0 - v43; v43 = v43 * v32 + v12 * v20; if ( v43 < 0.0 ) return 0; v43 = v34 * v19 + v31 * v20; if ( v43 < 0.0 ) return 0; v43 = v19 * *(float *)&v41 + *(float *)&v42 * v20; if ( *(float *)a8 > (double)v43 ) { *(float *)a8 = v43; v32 = *(float *)&v35 * v19; v33 = v36 * v19; v34 = v19 * v37; v43 = v20; v29 = v43 * *(float *)&v38; v30 = v43 * v39; v31 = v43 * v40; *(float *)&v35 = v29 + v32; v21 = v30; *(float *)a9 = *(float *)&v35; v36 = v21 + v33; v22 = v31; *(float *)(a9 + 4) = v36; v37 = v22 + v34; *(float *)(a9 + 8) = v37; return 1; } return 1; } return 0; } if ( v31 >= 0.0 ) { if ( *(float *)a8 <= (double)*(float *)&v42 ) return 1; *(float *)a8 = *(float *)&v42; v27 = v39; *(float *)a9 = *(float *)&v38; v28 = v40; *(float *)(a9 + 4) = v27; *(float *)(a9 + 8) = v28; result = 1; } else { if ( v34 < 0.0 ) return 0; v43 = v31 / (v31 - v34); v23 = v43; v24 = 1.0 - v43; v43 = v43 * v32 + v12 * v24; if ( v43 < 0.0 ) return 0; v43 = v33 * v23 + v18 * v24; if ( v43 < 0.0 ) return 0; v43 = v23 * *(float *)&v41 + *(float *)&v42 * v24; if ( *(float *)a8 <= (double)v43 ) return 1; *(float *)a8 = v43; v32 = *(float *)&v35 * v23; v33 = v36 * v23; v34 = v23 * v37; v43 = v24; v29 = v43 * *(float *)&v38; v30 = v43 * v39; v31 = v43 * v40; *(float *)&v35 = v29 + v32; v25 = v30; *(float *)a9 = *(float *)&v35; v36 = v25 + v33; v26 = v31; *(float *)(a9 + 4) = v36; v37 = v26 + v34; *(float *)(a9 + 8) = v37; result = 1; } return result; } //----- (0084D860) -------------------------------------------------------- int __cdecl sub_84D860(int a1, int a2, int a3, float a4, int a5, int a6) { int v6; // esi float *v7; // eax float *v8; // ecx int *v9; // edi float v10; // ST30_4 float v11; // ST34_4 double v12; // st7 float *v13; // ecx float v14; // ST38_4 float v15; // ST3C_4 float v16; // ST40_4 float v17; // ST44_4 int v19; // [esp+38h] [ebp-Ch] float v20; // [esp+3Ch] [ebp-8h] float v21; // [esp+40h] [ebp-4h] int v22; // [esp+4Ch] [ebp+8h] int v23; // [esp+4Ch] [ebp+8h] float v24; // [esp+50h] [ebp+Ch] v6 = a2; v7 = *(float **)a2; v8 = *(float **)(a2 + 4); v9 = (int *)a1; v10 = *v8 - **(float **)a2; v11 = v8[1] - *(float *)(*(_DWORD *)a2 + 4); v12 = v8[2]; v13 = *(float **)(a2 + 8); v14 = v12 - *(float *)(*(_DWORD *)a2 + 8); v15 = *v13 - **(float **)a2; v16 = v13[1] - *(float *)(*(_DWORD *)a2 + 4); v17 = v13[2] - *(float *)(*(_DWORD *)a2 + 8); *(float *)&v19 = v17 * v11 - v16 * v14; v20 = v14 * v15 - v17 * v10; v21 = v10 * v16 - v15 * v11; v24 = v7[1] * v20 + *v7 * *(float *)&v19 + v7[2] * v21; v22 = sub_84D460(*(_DWORD *)a1, *(_DWORD *)(a1 + 4), v6, (int)&v19, v24, a3, a4, a5, a6); v23 = sub_84D460(*v9, v9[2], v6, (int)&v19, v24, a3, a4, a5, a6) | v22; return v23 | sub_84D460(v9[1], v9[2], v6, (int)&v19, v24, a3, a4, a5, a6); } //----- (0084D9A0) -------------------------------------------------------- signed int __cdecl sub_84D9A0(float a1, float a2, float *a3, float *a4) { float *v4; // esi float *v5; // edi int v6; // ebx double v7; // st7 double v8; // st7 int v9; // eax double v10; // st7 double v11; // st7 int v12; // eax double v13; // st7 double v14; // st6 float *v15; // eax double v16; // st7 double v17; // st7 double v19; // st7 double v20; // st7 float *v21; // eax float v22; // edx float v23; // ecx double v24; // st7 int v25; // [esp+18h] [ebp-30h] float v26; // [esp+1Ch] [ebp-2Ch] float v27; // [esp+20h] [ebp-28h] int v28; // [esp+24h] [ebp-24h] float v29; // [esp+28h] [ebp-20h] float v30; // [esp+2Ch] [ebp-1Ch] int v31; // [esp+30h] [ebp-18h] float v32; // [esp+34h] [ebp-14h] float v33; // [esp+38h] [ebp-10h] int v34; // [esp+3Ch] [ebp-Ch] int v35; // [esp+40h] [ebp-8h] float v36; // [esp+44h] [ebp-4h] v4 = *(float **)(LODWORD(a2) + 124); v5 = *(float **)(LODWORD(a1) + 124); v6 = LODWORD(a2) + 140; v36 = v5[1]; v35 = LODWORD(a1) + 140; a1 = 3.4028235e38; *(float *)&v25 = v5[4] - v4[4]; v7 = v5[5]; v31 = v25; v26 = v7 - v4[5]; v8 = v5[6]; v32 = v26; v27 = v8 - v4[6]; v33 = v27; v9 = sub_84D860(v35, LODWORD(a2) + 140, (int)&v31, v36, (int)&a1, (int)&v28); a2 = 3.4028235e38; v34 = v9; *(float *)&v25 = v4[4] - v5[4]; v10 = v4[5]; v31 = v25; v26 = v10 - v5[5]; v11 = v4[6]; v32 = v26; v27 = v11 - v5[6]; v33 = v27; v12 = sub_84D860(v6, v35, (int)&v31, v36, (int)&a2, (int)&v25); if ( v34 ) { v13 = a1; if ( v12 ) { v14 = a2; if ( a2 >= v13 ) { *a3 = a1; v15 = a4; *(float *)&v25 = v4[4] * v13; v26 = v4[5] * v13; v27 = v13 * v4[6]; *(float *)&v31 = *(float *)&v28 + *(float *)&v25; v16 = v29; *a4 = *(float *)&v31; v32 = v16 + v26; v17 = v30; v15[1] = v32; v33 = v17 + v27; v15[2] = v33; return 1; } v19 = a2; *a3 = a2; *(float *)&v28 = v5[4] * v14; v29 = v5[5] * v14; v30 = v19 * v5[6]; } else { *a3 = a1; *(float *)&v25 = v4[4] * v13; v26 = v4[5] * v13; v27 = v13 * v4[6]; } *(float *)&v31 = *(float *)&v25 + *(float *)&v28; v32 = v26 + v29; v20 = v27 + v30; goto LABEL_8; } if ( v12 ) { v24 = a2; *a3 = a2; *(float *)&v28 = v5[4] * v24; v29 = v5[5] * v24; v30 = v24 * v5[6]; *(float *)&v31 = *(float *)&v28 + *(float *)&v25; v32 = v29 + v26; v20 = v30 + v27; LABEL_8: v21 = a4; v33 = v20; v22 = v32; *a4 = *(float *)&v31; v23 = v33; v21[1] = v22; v21[2] = v23; return 1; } return 0; } //----- (0084DBB0) -------------------------------------------------------- signed int __thiscall sub_84DBB0(float *this, float a2, int a3, int a4, int a5, int a6, _BYTE *a7) { float *v7; // esi int v9; // [esp+8h] [ebp-40h] int v10; // [esp+Ch] [ebp-3Ch] int v11; // [esp+10h] [ebp-38h] int v12; // [esp+14h] [ebp-34h] char v13; // [esp+18h] [ebp-30h] char v14; // [esp+1Ch] [ebp-2Ch] char v15; // [esp+28h] [ebp-20h] char v16; // [esp+34h] [ebp-14h] char *v17; // [esp+40h] [ebp-8h] int v18; // [esp+44h] [ebp-4h] v7 = this; v10 = a4; v11 = a5; v17 = 0; v18 = 0; v9 = a3; v12 = a6; if ( !sub_84D9A0(*(float *)&this, a2, (float *)&v13, (float *)&v14) ) return 0; *a7 = 1; v17 = (char *)(v7 + 35); v18 = LODWORD(a2) + 140; sub_858A40(v7 + 1, (float *)&v14, (float *)&v15); sub_858A40((float *)(LODWORD(a2) + 4), (float *)&v14, (float *)&v16); return sub_84EFB0(&v9); } //----- (0084DC50) -------------------------------------------------------- char __thiscall sub_84DC50(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi int v10; // eax v8 = this; if ( a7 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a3 + 104)); *(_DWORD *)(v8 + 136) = a7; } if ( a8 != *(_DWORD *)(a2 + 136) ) { sub_854560((float *)(a2 + 4), (float *)(a4 + 104)); *(_DWORD *)(a2 + 136) = a8; } if ( !sub_854650((float *)(v8 + 4), a2 + 4) ) return 0; if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2) ) return 1; if ( !a6 ) return 1; v10 = *(_DWORD *)(a2 + 128); if ( !v10 && !*(_DWORD *)(a2 + 132) ) return 1; if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)v8 + 8))( v8, v10, a3, a4, a5, a6 - 1, a7, a8) || (*(unsigned __int8 (__thiscall **)(int, _DWORD, int, int, int, int, int, int))(*(_DWORD *)v8 + 8))( v8, *(_DWORD *)(a2 + 132), a3, a4, a5, a6 - 1, a7, a8) ) { return 1; } return 0; } //----- (0084DD50) -------------------------------------------------------- signed int __thiscall sub_84DD50(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _BYTE *a11) { int v11; // esi signed int result; // eax int v13; // eax int v14; // eax v11 = this; if ( a9 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a5 + 104)); *(_DWORD *)(v11 + 136) = a9; } if ( a10 != *(_DWORD *)(a2 + 136) ) { sub_854560((float *)(a2 + 4), (float *)(a6 + 104)); *(_DWORD *)(a2 + 136) = a10; } result = sub_854650((float *)(v11 + 4), a2 + 4); if ( result ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2) ) { if ( a7 >= 0 || a8 >= 0 ) result = sub_84F080((float *)v11, a2, a3, a4, a5, a6, a11); else result = sub_84DBB0((float *)v11, *(float *)&a2, a3, a4, a5, a6, a11); } else if ( a8 && ((v13 = *(_DWORD *)(a2 + 128)) != 0 || *(_DWORD *)(a2 + 132)) ) { result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v11 + 12))( v11, v13, a3, a4, a5, a6, a7, a8 - 1, a9, a10, a11); if ( result < 1 ) { v14 = (*(int (__thiscall **)(int, _DWORD, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v11 + 12))( v11, *(_DWORD *)(a2 + 132), a3, a4, a5, a6, a7, a8 - 1, a9, a10, a11); result = v14 < 1 ? 0 : v14; } } else { result = sub_84F080((float *)v11, a2, a3, a4, a5, a6, a11); } } return result; } //----- (0084DED0) -------------------------------------------------------- int __thiscall sub_84DED0(int this, float *a2, float *a3, int a4, char *a5, int a6, int a7) { int v7; // esi int v8; // edi char v9; // al _DWORD *v10; // eax float *v11; // esi float *v12; // eax float *v13; // ecx float *v14; // edi float v15; // ecx float v16; // edx int v18; // [esp+Ch] [ebp-3Ch] int v19; // [esp+10h] [ebp-38h] int v20; // [esp+14h] [ebp-34h] float v21; // [esp+18h] [ebp-30h] float v22; // [esp+1Ch] [ebp-2Ch] float v23; // [esp+20h] [ebp-28h] float v24; // [esp+24h] [ebp-24h] float v25; // [esp+28h] [ebp-20h] float v26; // [esp+2Ch] [ebp-1Ch] float v27; // [esp+30h] [ebp-18h] float v28; // [esp+34h] [ebp-14h] float v29; // [esp+38h] [ebp-10h] char v30; // [esp+3Ch] [ebp-Ch] char v31; // [esp+40h] [ebp-8h] float v32; // [esp+44h] [ebp-4h] v7 = a7; v8 = this; if ( a7 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a6 + 104)); *(_DWORD *)(v8 + 136) = v7; } LOBYTE(a7) = *(_BYTE *)(a4 + 16); v9 = sub_846F10( a2, a3, *(float **)(v8 + 140), *(float **)(v8 + 144), *(float **)(v8 + 148), a7, (float *)&v18, &v32, (float *)&v30, (float *)&v31); *a5 = v9; if ( v9 ) { v10 = operator new(0x44u); if ( v10 ) v11 = (float *)sub_835E90(v10, a6); else v11 = 0; *((_DWORD *)v11 + 2) = v18; *((_DWORD *)v11 + 3) = v19; *((_DWORD *)v11 + 4) = v20; v11[5] = v32; if ( *(_BYTE *)(a4 + 53) ) { v12 = *(float **)(v8 + 140); v13 = *(float **)(v8 + 144); v14 = *(float **)(v8 + 148); v21 = *v13 - *v12; v22 = v13[1] - v12[1]; v23 = v13[2] - v12[2]; v24 = *v14 - *v12; v25 = v14[1] - v12[1]; v26 = v14[2] - v12[2]; v27 = v26 * v22 - v25 * v23; v28 = v23 * v24 - v26 * v21; v29 = v21 * v25 - v24 * v22; sub_4430B0(&v27); v15 = v28; v16 = v29; v11[10] = v27; v11[11] = v15; v11[12] = v16; } a6 = (int)v11; *(_DWORD *)(a4 + 48) = v11; sub_8D51C0((_DWORD *)(a4 + 24), &a6); } return 0; } //----- (0084E050) -------------------------------------------------------- int __thiscall sub_84E050(_DWORD *this) { _DWORD *v1; // esi int (__stdcall ***v2)(signed int); // ecx int result; // eax int (__stdcall ***v4)(signed int); // ecx v1 = this; v2 = (int (__stdcall ***)(signed int))this[32]; *v1 = &NiOBBNode::`vftable'; if ( v2 ) { result = (**v2)(1); v4 = (int (__stdcall ***)(signed int))v1[33]; if ( v4 ) result = (**v4)(1); } return result; } // A23BD0: using guessed type void *NiOBBNode::`vftable'; //----- (0084E080) -------------------------------------------------------- float *__thiscall sub_84E080(float *this, float *a2, int a3, int a4, int a5, int a6, int a7, signed int a8, int a9) { int v9; // eax int v10; // ecx float *v11; // edx float *v12; // esi float *v13; // edi float *v14; // eax float v15; // ST40_4 float v16; // ST24_4 float v17; // ST28_4 float v18; // ST2C_4 double v19; // st6 double v20; // st7 float v21; // ST24_4 float v22; // ST28_4 float *result; // eax float v24; // ST2C_4 double v25; // st7 double v26; // st6 double v27; // st5 double v28; // st4 double v29; // st7 float v30; // [esp+0h] [ebp-3Ch] float v31; // [esp+4h] [ebp-38h] float v32; // [esp+8h] [ebp-34h] float v33; // [esp+Ch] [ebp-30h] float v34; // [esp+10h] [ebp-2Ch] float v35; // [esp+14h] [ebp-28h] float v36; // [esp+24h] [ebp-18h] float v37; // [esp+28h] [ebp-14h] float v38; // [esp+2Ch] [ebp-10h] float *v39; // [esp+30h] [ebp-Ch] float v40; // [esp+38h] [ebp-4h] float v41; // [esp+48h] [ebp+Ch] float v42; // [esp+48h] [ebp+Ch] float v43; // [esp+48h] [ebp+Ch] float v44; // [esp+48h] [ebp+Ch] float v45; // [esp+48h] [ebp+Ch] int v46; // [esp+58h] [ebp+1Ch] v36 = 0.0; v37 = 0.0; v9 = (unsigned __int16)a7; v38 = 0.0; v40 = 0.0; v30 = 0.0; v39 = this; v31 = 0.0; a7 = (unsigned __int16)a7; v32 = 0.0; v33 = 0.0; v34 = 0.0; v35 = 0.0; if ( (unsigned __int16)a7 <= a8 ) { do { v10 = *(_DWORD *)(a9 + 4 * v9); v11 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 6 * v10)); v12 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 6 * v10 + 2)); v13 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 6 * v10 + 4)); v14 = (float *)(a6 + 12 * v10); v15 = *(float *)(a5 + 4 * v10); v40 = v15 + v40; v16 = v15 * *v14; v17 = v15 * v14[1]; v18 = v14[2] * v15; v36 = v16 + v36; v37 = v17 + v37; v38 = v18 + v38; v30 = (*v13 * *v13 + *v14 * *v14 + *v11 * *v11 + *v12 * *v12) * v15 + v30; v31 = (*v11 * v11[1] + v14[1] * *v14 + *v12 * v12[1] + *v13 * v13[1]) * v15 + v31; v32 = (v14[2] * *v14 + *v11 * v11[2] + *v12 * v12[2] + *v13 * v13[2]) * v15 + v32; v33 = (v14[1] * v14[1] + v11[1] * v11[1] + v12[1] * v12[1] + v13[1] * v13[1]) * v15 + v33; v34 = (v11[2] * v11[1] + v14[2] * v14[1] + v12[2] * v12[1] + v13[2] * v13[1]) * v15 + v34; v19 = v14[2]; v9 = v46 + 1; v46 = v9; v9 = (unsigned __int16)v9; v35 = v15 * (v19 * v19 + v11[2] * v11[2] + v12[2] * v12[2] + v13[2] * v13[2]) + v35; } while ( (unsigned __int16)v9 <= a8 ); this = v39; } v41 = 1.0 / v40; v20 = v41; v42 = 0.25 * v41; v21 = v36 * v20; this[1] = v21; v22 = v37 * v20; this[2] = v22; result = a2; v24 = v20 * v38; this[3] = v24; v25 = v42; *a2 = v42 * v30 - this[1] * this[1]; v43 = v42 * v31 - this[1] * this[2]; v26 = v43; a2[1] = v43; v44 = v25 * v32 - this[1] * this[3]; v27 = v44; a2[2] = v44; a2[4] = v25 * v33 - this[2] * this[2]; v45 = v25 * v34 - this[2] * this[3]; a2[5] = v45; v28 = v25 * v35 - this[3] * this[3]; v29 = v45; a2[8] = v28; a2[3] = v26; a2[6] = v27; a2[7] = *(float *)&v29; return result; } //----- (0084E310) -------------------------------------------------------- int __thiscall sub_84E310(float *this, int a2, int a3, int a4, int a5, int *a6, int *a7, int a8) { int i; // ebx int *v9; // edx int *v10; // esi float *v11; // ecx int v12; // edi int result; // eax int v14; // eax double v15; // st6 int v16; // eax float v17; // ST0C_4 float v18; // ST10_4 float v19; // ST14_4 int v20; // eax int v21; // eax double v22; // st6 int v23; // eax float v24; // ST0C_4 float v25; // ST10_4 float v26; // ST14_4 int v27; // eax int v28; // eax float v29; // ST0C_4 float v30; // ST10_4 float v31; // ST14_4 int v32; // eax int v33; // ebx int v34; // eax float v35; // ST0C_4 float v36; // ST10_4 float v37; // ST14_4 int v38; // eax int v39; // ebx int v40; // eax float v41; // ST0C_4 float v42; // ST10_4 float v43; // ST14_4 int v44; // eax int *v45; // ecx int v46; // ebx signed int v47; // [esp+18h] [ebp-18h] float *v48; // [esp+1Ch] [ebp-14h] int v49; // [esp+20h] [ebp-10h] int v50; // [esp+24h] [ebp-Ch] int *v51; // [esp+28h] [ebp-8h] float *v52; // [esp+2Ch] [ebp-4h] int v53; // [esp+48h] [ebp+18h] int v54; // [esp+48h] [ebp+18h] int v55; // [esp+48h] [ebp+18h] float v56; // [esp+4Ch] [ebp+1Ch] float v57; // [esp+4Ch] [ebp+1Ch] float v58; // [esp+4Ch] [ebp+1Ch] float v59; // [esp+4Ch] [ebp+1Ch] float v60; // [esp+4Ch] [ebp+1Ch] int v61; // [esp+50h] [ebp+20h] i = a4; v9 = a6; v50 = (a3 + a4) / 2; v10 = a7; *a6 = a3 - 1; v48 = this; v11 = this + 4; v12 = a8; *a7 = a4 + 1; v47 = 0; v52 = v11; while ( 1 ) { result = a3; if ( *v9 >= a3 && *v10 <= i ) break; *v9 = a3 - 1; *v10 = i + 1; v61 = a3; if ( a3 <= i ) { if ( i - a3 + 1 >= 4 ) { v49 = a3 + 2; v51 = (int *)(a5 + 4 * (a3 + 2)); do { v14 = *(v51 - 2); v53 = v14; v14 *= 3; v15 = *(float *)(a2 + 4 * v14); v16 = a2 + 4 * v14; v17 = v15 - v48[1]; v18 = *(float *)(v16 + 4) - v48[2]; v19 = *(float *)(v16 + 8) - v48[3]; v56 = v11[1] * v18 + *v11 * v17 + v11[2] * v19; if ( v56 <= 0.0 ) { if ( v56 < 0.0 || v61 > v50 ) v20 = --*v10; else v20 = ++*v9; } else { v20 = ++*v9; } *(_DWORD *)(v12 + 4 * v20) = v53; v21 = *(v51 - 1); v54 = v21; v21 *= 3; v22 = *(float *)(a2 + 4 * v21); v23 = a2 + 4 * v21; v24 = v22 - v48[1]; v25 = *(float *)(v23 + 4) - v48[2]; v26 = *(float *)(v23 + 8) - v48[3]; v57 = v11[1] * v25 + *v11 * v24 + v11[2] * v26; if ( v57 <= 0.0 ) { if ( v57 < 0.0 || v49 - 1 > v50 ) v27 = --*v10; else v27 = ++*v9; } else { v27 = ++*v9; } *(_DWORD *)(v12 + 4 * v27) = v54; v55 = *v51; v28 = a2 + 12 * *v51; v29 = *(float *)(a2 + 12 * *v51) - v48[1]; v30 = *(float *)(v28 + 4) - v48[2]; v31 = *(float *)(v28 + 8) - v48[3]; v58 = v11[1] * v30 + *v11 * v29 + v11[2] * v31; if ( v58 <= 0.0 ) { if ( v58 < 0.0 || v49 > v50 ) v32 = --*v10; else v32 = ++*v9; } else { v32 = ++*v9; } *(_DWORD *)(v12 + 4 * v32) = v55; v33 = v51[1]; v34 = a2 + 12 * v33; v35 = *(float *)(a2 + 12 * v33) - v48[1]; v36 = *(float *)(v34 + 4) - v48[2]; v11 = v52; v37 = *(float *)(v34 + 8) - v48[3]; v59 = v52[1] * v36 + *v52 * v35 + v52[2] * v37; if ( v59 <= 0.0 ) { if ( v59 < 0.0 || (v11 = v52, v49 + 1 > v50) ) v38 = --*v10; else v38 = ++*v9; } else { v38 = ++*v9; } v51 += 4; v49 += 4; *(_DWORD *)(v12 + 4 * v38) = v33; v61 += 4; } while ( v61 <= a4 - 3 ); } for ( i = a4; v61 <= a4; ++v61 ) { v39 = *(_DWORD *)(a5 + 4 * v61); v40 = a2 + 12 * v39; v41 = *(float *)(a2 + 12 * v39) - v48[1]; v42 = *(float *)(v40 + 4) - v48[2]; v11 = v52; v43 = *(float *)(v40 + 8) - v48[3]; v60 = v52[1] * v42 + *v52 * v41 + v52[2] * v43; if ( v60 <= 0.0 ) { if ( v60 < 0.0 || (v11 = v52, v61 > v50) ) v44 = --*v10; else v44 = ++*v9; } else { v44 = ++*v9; } *(_DWORD *)(v12 + 4 * v44) = v39; i = a4; } } ++v47; v11 += 3; v52 = v11; if ( v47 >= 3 ) { result = a3; break; } } if ( v47 == 3 && (*v9 < result || *v10 > i) ) { *v9 = v50; *v10 = v50 + 1; if ( result <= i ) { v45 = (int *)(v12 + 4 * result); v46 = i - result + 1; do { result = *(int *)((char *)v45 + a5 - v12); *v45 = result; ++v45; --v46; } while ( v46 ); } } return result; } //----- (0084E6A0) -------------------------------------------------------- char __thiscall sub_84E6A0(int this, float *a2, int a3, int a4, int a5, int a6, int a7, int a8) { float *v8; // esi int v9; // edi char v11; // al int v12; // ecx int v13; // eax int v14; // [esp+10h] [ebp+8h] int v15; // [esp+1Ch] [ebp+14h] int v16; // [esp+1Ch] [ebp+14h] int v17; // [esp+20h] [ebp+18h] v8 = a2; v9 = this; if ( !a2 ) return 0; if ( a7 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a3 + 104)); *(_DWORD *)(v9 + 136) = a7; } if ( a8 != *((_DWORD *)a2 + 34) ) { sub_854560(a2 + 1, (float *)(a4 + 104)); *((_DWORD *)a2 + 34) = a8; } if ( !sub_854650((float *)(v9 + 4), (int)(a2 + 1)) ) return 0; if ( a5 && a6 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) ) { if ( !(*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)a2 + 4))(a2) && (unsigned __int8)sub_84C440(a2) ) { v17 = a6 - 1; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD, int, int, int, int, int, int))(*(_DWORD *)v9 + 8))( v9, *((_DWORD *)a2 + 32), a3, a4, a5, v17, a7, a8) && !(*(unsigned __int8 (__thiscall **)(int, _DWORD, int, int, int, int, int, int))(*(_DWORD *)v9 + 8))( v9, *((_DWORD *)a2 + 33), a3, a4, a5, v17, a7, a8) ) { return 0; } return 1; } } else { v11 = (*(int (__thiscall **)(float *))(*(_DWORD *)a2 + 4))(a2); v12 = *(_DWORD *)(v9 + 128); if ( v11 ) { if ( v12 && *(_DWORD *)(v9 + 132) ) { v15 = a5 - 1; if ( !(*(unsigned __int8 (__stdcall **)(float *, int, int, int, int, int, int))(*(_DWORD *)v12 + 8))( a2, a3, a4, v15, a6, a7, a8) && !(*(unsigned __int8 (__stdcall **)(float *, int, int, int, int, int, int))(**(_DWORD **)(v9 + 132) + 8))( a2, a3, a4, v15, a6, a7, a8) ) { return 0; } return 1; } } else if ( v12 && *(_DWORD *)(v9 + 132) ) { v13 = a5; v16 = a6 - 1; v14 = v13 - 1; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD, int, int, int, int, int, int))(*(_DWORD *)v12 + 8))( *((_DWORD *)v8 + 32), a3, a4, v13 - 1, a6 - 1, a7, a8) && !(*(unsigned __int8 (__stdcall **)(_DWORD, int, int, int, int, int, int))(**(_DWORD **)(v9 + 128) + 8))( *((_DWORD *)v8 + 33), a3, a4, v14, v16, a7, a8) && !(*(unsigned __int8 (__stdcall **)(_DWORD, int, int, int, int, int, int))(**(_DWORD **)(v9 + 132) + 8))( *((_DWORD *)v8 + 32), a3, a4, v14, v16, a7, a8) && !(*(unsigned __int8 (__stdcall **)(_DWORD, int, int, int, int, int, int))(**(_DWORD **)(v9 + 132) + 8))( *((_DWORD *)v8 + 33), a3, a4, v14, v16, a7, a8) ) { return 0; } return 1; } } } return 1; } //----- (0084E940) -------------------------------------------------------- signed int __thiscall sub_84E940(int this, float *a2, float *a3, int a4, int a5, int a6, int a7) { int v7; // esi signed int result; // eax int v9; // ecx int v10; // ecx v7 = this; if ( a7 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a6 + 104)); *(_DWORD *)(v7 + 136) = a7; } result = sub_858BA0((float *)(v7 + 4), a2, a3); if ( result ) { v9 = *(_DWORD *)(v7 + 128); if ( !v9 || (result = (*(int (__stdcall **)(float *, float *, int, int, int, int))(*(_DWORD *)v9 + 16))( a2, a3, a4, a5, a6, a7), result < 1) ) { v10 = *(_DWORD *)(v7 + 132); if ( !v10 || (result = (*(int (__stdcall **)(float *, float *, int, int, int, int))(*(_DWORD *)v10 + 16))( a2, a3, a4, a5, a6, a7), result < 1) ) { result = 0; } } } return result; } //----- (0084E9E0) -------------------------------------------------------- int __thiscall sub_84E9E0(float *this, int a2, int a3, int a4, int a5, int a6, int a7, signed int a8, int a9) { float *v9; // edi float *v10; // esi int v11; // eax int v12; // eax float *v13; // ecx float *v14; // edx float *v15; // ebx float v16; // ST70_4 float v17; // ST74_4 float v18; // ST78_4 float v19; // ST58_4 float v20; // ST5C_4 float v21; // ST60_4 float v22; // ST70_4 float v23; // ST74_4 float v24; // ST78_4 float v25; // ST40_4 float v26; // ST44_4 float v27; // ST3C_4 float v28; // ST7C_4 float v29; // ST80_4 float v30; // ST84_4 float v31; // ST58_4 float v32; // ST5C_4 float v33; // ST60_4 float v34; // ST70_4 float v35; // ST74_4 float v36; // ST78_4 float v37; // ST40_4 float v38; // ST44_4 float v39; // ST48_4 float v40; // ST70_4 float v41; // ST74_4 float v42; // ST78_4 int result; // eax float *v44; // [esp+Ch] [ebp-C4h] int v45; // [esp+14h] [ebp-BCh] float *v46; // [esp+1Ch] [ebp-B4h] float v47; // [esp+20h] [ebp-B0h] float v48; // [esp+24h] [ebp-ACh] float v49; // [esp+28h] [ebp-A8h] float v50; // [esp+2Ch] [ebp-A4h] float v51; // [esp+2Ch] [ebp-A4h] float v52; // [esp+2Ch] [ebp-A4h] float v53; // [esp+30h] [ebp-A0h] float v54; // [esp+30h] [ebp-A0h] float v55; // [esp+30h] [ebp-A0h] float v56; // [esp+34h] [ebp-9Ch] float v57; // [esp+34h] [ebp-9Ch] float v58; // [esp+34h] [ebp-9Ch] float v59; // [esp+38h] [ebp-98h] float v60; // [esp+3Ch] [ebp-94h] float v61; // [esp+40h] [ebp-90h] float v62; // [esp+44h] [ebp-8Ch] float v63; // [esp+48h] [ebp-88h] float v64; // [esp+4Ch] [ebp-84h] float v65; // [esp+50h] [ebp-80h] float v66; // [esp+54h] [ebp-7Ch] float v67; // [esp+58h] [ebp-78h] float v68; // [esp+5Ch] [ebp-74h] float v69; // [esp+60h] [ebp-70h] float v70; // [esp+64h] [ebp-6Ch] char v71; // [esp+68h] [ebp-68h] char v72; // [esp+9Ch] [ebp-34h] char v73; // [esp+C0h] [ebp-10h] v46 = this; v9 = this + 1; v10 = this + 4; sub_84E080(this, (float *)&v72, a3, a4, a5, a6, a7, a8, a9); sub_85E9D0(&v72, (float *)&v73, v10); v68 = 0.0; v69 = 0.0; v11 = (unsigned __int16)a7; v70 = 0.0; v62 = 0.0; v63 = 0.0; v64 = 0.0; v45 = (unsigned __int16)a7; if ( (unsigned __int16)a7 <= a8 ) { do { v12 = 3 * *(_DWORD *)(a9 + 4 * v11); v13 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 2 * v12)); v44 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 2 * v12 + 2)); v47 = *v13 - *v9; v48 = v13[1] - v9[1]; v14 = (float *)(a4 + 12 * *(unsigned __int16 *)(a3 + 2 * v12 + 4)); v49 = v13[2] - v9[2]; v53 = *v10 * v47 + v48 * v10[1] + v49 * v10[2]; v56 = v10[4] * v48 + v47 * v10[3] + v10[5] * v49; v50 = v49 * v10[8] + v47 * v10[6] + v48 * v10[7]; if ( v68 <= (double)v53 ) { if ( v62 < (double)v53 ) v62 = *v10 * v47 + v48 * v10[1] + v49 * v10[2]; } else { v68 = *v10 * v47 + v48 * v10[1] + v49 * v10[2]; } if ( v69 <= (double)v56 ) { if ( v63 < (double)v56 ) v63 = v10[4] * v48 + v47 * v10[3] + v10[5] * v49; } else { v69 = v10[4] * v48 + v47 * v10[3] + v10[5] * v49; } if ( v70 <= (double)v50 ) { if ( v64 < (double)v50 ) v64 = v49 * v10[8] + v47 * v10[6] + v48 * v10[7]; } else { v70 = v49 * v10[8] + v47 * v10[6] + v48 * v10[7]; } v59 = *v44 - *v9; v60 = v44[1] - v9[1]; v61 = v44[2] - v9[2]; v54 = *v10 * v59 + v60 * v10[1] + v61 * v10[2]; v57 = v10[4] * v60 + v59 * v10[3] + v10[5] * v61; v51 = v61 * v10[8] + v59 * v10[6] + v60 * v10[7]; if ( v68 <= (double)v54 ) { if ( v62 < (double)v54 ) v62 = *v10 * v59 + v60 * v10[1] + v61 * v10[2]; } else { v68 = *v10 * v59 + v60 * v10[1] + v61 * v10[2]; } if ( v69 <= (double)v57 ) { if ( v63 < (double)v57 ) v63 = v10[4] * v60 + v59 * v10[3] + v10[5] * v61; } else { v69 = v10[4] * v60 + v59 * v10[3] + v10[5] * v61; } if ( v70 <= (double)v51 ) { if ( v64 < (double)v51 ) v64 = v61 * v10[8] + v59 * v10[6] + v60 * v10[7]; } else { v70 = v61 * v10[8] + v59 * v10[6] + v60 * v10[7]; } v65 = *v14 - *v9; v66 = v14[1] - v9[1]; v67 = v14[2] - v9[2]; v55 = *v10 * v65 + v66 * v10[1] + v67 * v10[2]; v58 = v10[4] * v66 + v65 * v10[3] + v10[5] * v67; v52 = v67 * v10[8] + v65 * v10[6] + v66 * v10[7]; if ( v68 <= (double)v55 ) { if ( v62 < (double)v55 ) v62 = *v10 * v65 + v66 * v10[1] + v67 * v10[2]; } else { v68 = *v10 * v65 + v66 * v10[1] + v67 * v10[2]; } if ( v69 <= (double)v58 ) { if ( v63 < (double)v58 ) v63 = v10[4] * v66 + v65 * v10[3] + v10[5] * v67; } else { v69 = v10[4] * v66 + v65 * v10[3] + v10[5] * v67; } if ( v70 <= (double)v52 ) { if ( v64 < (double)v52 ) v64 = v67 * v10[8] + v65 * v10[6] + v66 * v10[7]; } else { v70 = v67 * v10[8] + v65 * v10[6] + v66 * v10[7]; } v11 = v45 + 1; v45 = v11; v11 = (unsigned __int16)v11; } while ( (unsigned __int16)v11 <= a8 ); } v15 = v46; v16 = v62 - v68; v17 = v63 - v69; v18 = v64 - v70; v19 = v16 * 0.5; v20 = v17 * 0.5; v21 = v18 * 0.5; v46[13] = v19; v46[14] = v20; v46[15] = v21; v22 = v68 + v62; v23 = v69 + v63; v24 = v70 + v64; v25 = v22 * 0.5; v26 = v23 * 0.5; v27 = 0.5 * v24; v28 = v10[6] * v27; v29 = v10[7] * v27; v30 = v27 * v10[8]; v31 = v26 * v10[3]; v32 = v10[4] * v26; v33 = v26 * v10[5]; v34 = *v10 * v25; v35 = v10[1] * v25; v36 = v25 * v10[2]; v37 = v34 + v31; v38 = v35 + v32; v39 = v36 + v33; v40 = v37 + v28; v41 = v38 + v29; v42 = v39 + v30; *v9 = *v9 + v40; v9[1] = v41 + v9[1]; v9[2] = v9[2] + v42; sub_87C3C0((float *)&v71); result = sub_854560(v9, (float *)&v71); *((_DWORD *)v15 + 31) = a2; return result; } //----- (0084EFB0) -------------------------------------------------------- signed int __stdcall sub_84EFB0(_DWORD *a1) { int v1; // edx int v2; // ebx int v3; // eax int (__cdecl *v4)(_DWORD *); // eax int v5; // ecx int v6; // eax int (__cdecl *v7)(_DWORD *); // edi int v8; // eax int v9; // ebx int v10; // edx int v11; // ecx int v12; // eax int v13; // ebx int v14; // eax signed int result; // eax int v16; // [esp+8h] [ebp-4h] v1 = 0; v2 = 0; v16 = 0; if ( *a1 ) { v3 = *(_DWORD *)(*a1 + 172); if ( v3 || (v3 = *(_DWORD *)(a1[2] + 172)) != 0 ) { v4 = *(int (__cdecl **)(_DWORD *))(v3 + 56); if ( v4 ) { v1 = v4(a1); v16 = v1; } } } v5 = a1[1]; if ( v5 ) { v6 = *(_DWORD *)(v5 + 172); if ( v6 || (v6 = *(_DWORD *)(a1[3] + 172)) != 0 ) { v7 = *(int (__cdecl **)(_DWORD *))(v6 + 56); if ( v7 ) { v8 = *a1; v9 = a1[11]; v10 = a1[10]; *a1 = v5; v11 = a1[9]; a1[1] = v8; v12 = a1[8]; a1[8] = v9; a1[9] = a1[12]; v13 = a1[13]; a1[11] = v12; a1[12] = v11; a1[10] = v13; a1[13] = v10; v14 = v7(a1); v1 = v16; v2 = v14; } } } if ( !v1 ) { if ( !v2 ) return 0; LABEL_15: result = 1; if ( v2 != 2 ) return result; return 2; } if ( v1 != 2 ) goto LABEL_15; return 2; } //----- (0084F080) -------------------------------------------------------- signed int __thiscall sub_84F080(float *this, int a2, int a3, int a4, int a5, int a6, _BYTE *a7) { float *v7; // esi float *v8; // eax float v9; // ecx float v10; // edx float v11; // eax bool v12; // c3 float *v13; // eax float v14; // ecx float v15; // edx int v17; // [esp+4h] [ebp-58h] int v18; // [esp+8h] [ebp-54h] int v19; // [esp+Ch] [ebp-50h] int v20; // [esp+10h] [ebp-4Ch] float v21; // [esp+14h] [ebp-48h] float v22; // [esp+18h] [ebp-44h] float v23; // [esp+1Ch] [ebp-40h] float v24; // [esp+20h] [ebp-3Ch] char v25; // [esp+24h] [ebp-38h] char v26; // [esp+30h] [ebp-2Ch] int v27; // [esp+3Ch] [ebp-20h] int v28; // [esp+40h] [ebp-1Ch] float v29; // [esp+44h] [ebp-18h] float v30; // [esp+48h] [ebp-14h] float v31; // [esp+4Ch] [ebp-10h] float v32; // [esp+50h] [ebp-Ch] float v33; // [esp+54h] [ebp-8h] float v34; // [esp+58h] [ebp-4h] v17 = a3; v20 = a6; v7 = this; v8 = (float *)*((_DWORD *)this + 31); v27 = 0; v28 = 0; v18 = a4; v19 = a5; v9 = v8[4]; v10 = v8[5]; v11 = v8[6]; v32 = v9; v34 = v11; v12 = *(float *)&dword_BA45C0 == v9; v13 = *(float **)(a2 + 124); v14 = v13[4]; v33 = v10; v15 = v13[5]; v31 = v13[6]; v29 = v14; v30 = v15; if ( v12 && *(float *)&dword_BA45C4 == v33 && *(float *)&dword_BA45C8 == v34 && v29 == *(float *)&dword_BA45C0 && v30 == *(float *)&dword_BA45C4 && v31 == *(float *)&dword_BA45C8 ) { v21 = 0.0; v29 = *(float *)(a2 + 64) + v7[16]; v30 = *(float *)(a2 + 68) + v7[17]; v31 = *(float *)(a2 + 72) + v7[18]; v32 = v29 * 0.5; v22 = v32; v33 = v30 * 0.5; v23 = v33; v34 = 0.5 * v31; v24 = v34; LABEL_9: *a7 = 1; sub_858A40(v7 + 1, &v22, (float *)&v25); sub_858A40((float *)(a2 + 4), &v22, (float *)&v26); return sub_84EFB0(&v17); } if ( sub_855AE0((int)(v7 + 1), a2 + 4, (int)&v21, &v22) ) goto LABEL_9; return 0; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0084F210) -------------------------------------------------------- int __thiscall sub_84F210(int this, float *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, _BYTE *a11) { int v11; // esi int result; // eax bool v13; // zf unsigned __int8 (__thiscall *v14)(float *); // eax int v15; // ecx int v16; // ecx int v17; // [esp+24h] [ebp+1Ch] int v18; // [esp+24h] [ebp+1Ch] int v19; // [esp+28h] [ebp+20h] v11 = this; if ( !a2 ) return 0; if ( a9 != *(_DWORD *)(this + 136) ) { sub_854560((float *)(this + 4), (float *)(a5 + 104)); *(_DWORD *)(v11 + 136) = a9; } if ( a10 != *((_DWORD *)a2 + 34) ) { sub_854560(a2 + 1, (float *)(a6 + 104)); *((_DWORD *)a2 + 34) = a10; } if ( !sub_854650((float *)(v11 + 4), (int)(a2 + 1)) ) return 0; if ( !a7 || !a8 ) return sub_84F080((float *)v11, (int)a2, a3, a4, a5, a6, a11); v13 = (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11) == 0; v14 = *(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)a2 + 4); if ( !v13 ) { if ( v14(a2) || !(unsigned __int8)sub_84C440(a2) ) { result = sub_84F080((float *)v11, (int)a2, a3, a4, a5, a6, a11); if ( result >= 1 ) return result; } else { v19 = a8 - 1; result = (*(int (__thiscall **)(int, _DWORD, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v11 + 12))( v11, *((_DWORD *)a2 + 32), a3, a4, a5, a6, a7, v19, a9, a10, a11); if ( result >= 1 ) return result; result = (*(int (__thiscall **)(int, _DWORD, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v11 + 12))( v11, *((_DWORD *)a2 + 33), a3, a4, a5, a6, a7, v19, a9, a10, a11); if ( result >= 1 ) return result; } return 0; } if ( v14(a2) ) { v15 = *(_DWORD *)(v11 + 128); if ( !v15 || !*(_DWORD *)(v11 + 132) ) return sub_84F080((float *)v11, (int)a2, a3, a4, a5, a6, a11); v17 = a7 - 1; result = (*(int (__stdcall **)(float *, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v15 + 12))( a2, a3, a4, a5, a6, v17, a8, a9, a10, a11); if ( result < 1 ) { result = (*(int (__stdcall **)(float *, int, int, int, int, int, int, int, int, _BYTE *))(**(_DWORD **)(v11 + 132) + 12))( a2, a3, a4, a5, a6, v17, a8, a9, a10, a11); if ( result < 1 ) return 0; } } else { v18 = a7 - 1; v16 = *(_DWORD *)(v11 + 128); if ( !v16 || !*(_DWORD *)(v11 + 132) ) return sub_84F080((float *)v11, (int)a2, a3, a4, a5, a6, a11); result = (*(int (__stdcall **)(float *, int, int, int, int, int, int, int, int, _BYTE *))(*(_DWORD *)v16 + 12))( a2, a3, a4, a5, a6, v18, a8, a9, a10, a11); if ( result < 1 ) { result = (*(int (__stdcall **)(float *, int, int, int, int, int, int, int, int, _BYTE *))(**(_DWORD **)(v11 + 132) + 12))( a2, a3, a4, a5, a6, v18, a8, a9, a10, a11); if ( result < 1 ) return 0; } } return result; } //----- (0084F4F0) -------------------------------------------------------- float *__thiscall sub_84F4F0(float *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, signed int a9, int a10, int a11, int a12) { int v12; // ebx int v13; // edi float *v14; // esi _DWORD *v15; // eax _DWORD *v16; // ecx int v17; // ST28_4 int v18; // ST20_4 int v19; // ST1C_4 float *v20; // eax float *v21; // eax float *result; // eax float *v23; // eax int v24; // ecx int v25; // ST28_4 float *v26; // eax v12 = a10; v13 = a8; v14 = this; sub_84E9E0(this, a2, a3, a4, a6, a7, a8, a9, a10); if ( a9 - v13 < a12 ) { LABEL_16: result = 0; v14[32] = 0.0; v14[33] = 0.0; } else { while ( 1 ) { sub_84E310(v14, a7, v13, a9, v12, &a10, &a8, a11); if ( v13 >= a10 ) { if ( v13 == a10 ) { v20 = (float *)operator new(0x98u); if ( v20 ) v21 = sub_84C460(v20, a2, a3, a4, a5, *(_WORD *)(a11 + 4 * v13)); else v21 = 0; *((_DWORD *)v14 + 32) = v21; } } else { v15 = operator new(0x8Cu); v16 = 0; if ( v15 ) { *v15 = &NiOBBNode::`vftable'; v15[31] = 0; v15[32] = 0; v15[33] = 0; v15[34] = 0; v16 = v15; } v17 = a12; v18 = a11; v19 = a10; *((_DWORD *)v14 + 32) = v16; sub_84F4F0(a2, a3, a4, a5, a6, a7, v13, v19, v18, v12, v17); } v13 = a8; result = (float *)a9; if ( a8 >= a9 ) break; v23 = (float *)operator new(0x8Cu); if ( v23 ) { *(_DWORD *)v23 = &NiOBBNode::`vftable'; v23[31] = 0.0; v23[32] = 0.0; v23[33] = 0.0; v23[34] = 0.0; } else { v23 = 0; } *((_DWORD *)v14 + 33) = v23; v24 = v12; v12 = a11; v25 = a11; v14 = v23; a11 = v24; sub_84E9E0(v23, a2, a3, a4, a6, a7, v13, a9, v25); if ( a9 - a8 < a12 ) goto LABEL_16; } if ( a8 == a9 ) { v26 = (float *)operator new(0x98u); if ( v26 ) { result = sub_84C460(v26, a2, a3, a4, a5, *(_WORD *)(a11 + 4 * a9)); *((_DWORD *)v14 + 33) = result; } else { result = 0; v14[33] = 0.0; } } } return result; } // A23BD0: using guessed type void *NiOBBNode::`vftable'; //----- (0084F6E0) -------------------------------------------------------- float *__thiscall sub_84F6E0(float *this, int a2, void *a3, int a4, int a5, int a6, int a7) { int v7; // esi float *v8; // edi void *v9; // ecx int v10; // eax int v11; // edx int v12; // eax int v13; // edi int v14; // eax float *v15; // esi float *v16; // edi float *v17; // ebx float v18; // ST68_4 float v19; // ST6C_4 float v20; // ST70_4 float v21; // ST74_4 float v22; // ST78_4 float v23; // ST7C_4 float v24; // ST5C_4 float v25; // ST60_4 float v26; // ST64_4 float v27; // ST88_4 float v28; // ST88_4 bool v29; // zf float v30; // ST50_4 float v31; // ST54_4 float v32; // ST58_4 float v33; // ST44_4 float v34; // ST48_4 float v35; // ST4C_4 float v36; // ST38_4 float v37; // ST3C_4 float v38; // ST40_4 _DWORD *v39; // ebx int i; // eax float *v42; // [esp+54h] [ebp-20h] int v43; // [esp+58h] [ebp-1Ch] void *v44; // [esp+64h] [ebp-10h] float *v45; // [esp+68h] [ebp-Ch] int v46; // [esp+6Ch] [ebp-8h] float *v47; // [esp+70h] [ebp-4h] float *v48; // [esp+80h] [ebp+Ch] void *v49; // [esp+80h] [ebp+Ch] v7 = (unsigned __int16)a3; v8 = this; *(_DWORD *)this = &NiOBBNode::`vftable'; v42 = this; this[31] = 0.0; v43 = (unsigned __int16)a3; v45 = (float *)operator new(4 * (unsigned __int16)a3); v9 = operator new(12 * (unsigned __int16)a3); v10 = 0; v44 = v9; if ( (unsigned __int16)a3 > 0u ) { v47 = (float *)v9; v48 = v45; v46 = v7; while ( 1 ) { v11 = *(unsigned __int16 *)(a4 + 2 * (unsigned __int16)v10); v12 = v10 + 1; v13 = *(unsigned __int16 *)(a4 + 2 * (unsigned __int16)v12); v14 = v12 + 1; v15 = (float *)(a5 + 12 * v11); v16 = (float *)(a5 + 12 * v13); v17 = (float *)(a5 + 12 * *(unsigned __int16 *)(a4 + 2 * (unsigned __int16)v14)); v18 = *v16 - *v15; v19 = v16[1] - v15[1]; v20 = v16[2] - v15[2]; v21 = *v17 - *v15; v22 = v17[1] - v15[1]; v23 = v17[2] - v15[2]; v24 = v23 * v19 - v20 * v22; v25 = v20 * v21 - v23 * v18; v26 = v22 * v18 - v21 * v19; v27 = v25 * v25 + v24 * v24 + v26 * v26; v28 = sqrt(v27); v29 = v46-- == 1; *v48 = v28 * 0.5; ++v48; v47 += 3; v30 = *v15 + *v16; v31 = v16[1] + v15[1]; v32 = v16[2] + v15[2]; v33 = *v17 + v30; v34 = v17[1] + v31; v35 = v17[2] + v32; v36 = v33 * 0.3333333432674408; *(v47 - 3) = v36; v37 = v34 * 0.3333333432674408; *(v47 - 2) = v37; v38 = 0.3333333432674408 * v35; *(v47 - 1) = v38; if ( v29 ) break; v10 = v14 + 1; } v7 = v43; v8 = v42; } v39 = operator new(4 * v7); for ( i = 0; i < v7; ++i ) v39[i] = i; v49 = operator new(4 * v7); sub_84F4F0(v8, a2, a4, a5, a6, (int)v45, (int)v44, 0, v7 - 1, (int)v39, (int)v49, a7); operator delete(v49); operator delete(v39); operator delete(v44); operator delete(v45); v8[34] = 0.0; return v8; } // A23BD0: using guessed type void *NiOBBNode::`vftable'; //----- (0084F970) -------------------------------------------------------- int __stdcall sub_84F970(float a1, float a2, float a3, int a4, int a5) { double v5; // st7 double v6; // st6 double v7; // st5 int result; // eax double v9; // st7 double v10; // st7 double v11; // st7 v5 = a3; v6 = a2; v7 = a1; if ( a2 > (double)a3 ) { if ( v7 > v5 ) { *(float *)a4 = a3; if ( v7 > v6 ) { *(float *)(a4 + 4) = a2; *(float *)(a4 + 8) = a1; result = a5; *(_DWORD *)a5 = 2; *(_DWORD *)(a5 + 8) = 0; *(_DWORD *)(a5 + 4) = 1; } else { v11 = a2; *(float *)(a4 + 4) = a1; *(float *)(a4 + 8) = *(float *)&v11; result = a5; *(_DWORD *)a5 = 2; *(_DWORD *)(a5 + 4) = 0; *(_DWORD *)(a5 + 8) = 1; } } else { *(float *)a4 = a1; v10 = a2; *(float *)(a4 + 4) = a3; *(float *)(a4 + 8) = *(float *)&v10; result = a5; *(_DWORD *)a5 = 0; *(_DWORD *)(a5 + 4) = 2; *(_DWORD *)(a5 + 8) = 1; } } else if ( v7 > v6 ) { *(float *)a4 = a2; if ( v7 > v5 ) { v9 = a1; *(float *)(a4 + 4) = a3; *(float *)(a4 + 8) = *(float *)&v9; result = a5; *(_DWORD *)a5 = 1; *(_DWORD *)(a5 + 4) = 2; *(_DWORD *)(a5 + 8) = 0; } else { *(float *)(a4 + 4) = a1; *(float *)(a4 + 8) = a3; result = a5; *(_DWORD *)a5 = 1; *(_DWORD *)(a5 + 4) = 0; *(_DWORD *)(a5 + 8) = 2; } } else { *(float *)a4 = a1; *(float *)(a4 + 4) = a2; *(float *)(a4 + 8) = a3; result = a5; *(_DWORD *)a5 = 0; *(_DWORD *)(a5 + 8) = 2; *(_DWORD *)(a5 + 4) = 1; } return result; } //----- (0084FAA0) -------------------------------------------------------- char *__thiscall sub_84FAA0(void *Dst, void *Src, int a3, void *a4, int a5) { char *v5; // esi float v6; // ST2C_4 float v7; // ST30_4 double v8; // st7 float *v9; // eax float v10; // ST34_4 float *v11; // ecx float v12; // ST2C_4 float v13; // ST30_4 double v14; // st7 float *v15; // ecx float v16; // ST34_4 float v17; // ST2C_4 float v18; // ST30_4 double v19; // st7 float *v20; // edx float v21; // ST34_4 float *v22; // ecx float v23; // ST2C_4 float v24; // ST30_4 float v25; // ST34_4 float *v26; // edx float v27; // ST2C_4 float v28; // ST30_4 double v29; // st7 float v30; // ST34_4 float v31; // ST2C_4 float v32; // ST30_4 double v33; // st7 float v34; // ST34_4 v5 = (char *)Dst; *((_DWORD *)Dst + 3) = a3; *((_DWORD *)Dst + 7) = a5; memcpy_s(Dst, 0xCu, Src, 0xCu); memcpy_s(v5 + 16, 0xCu, a4, 0xCu); v6 = *(float *)a5 - *(float *)a3; v7 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v8 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *((float *)v5 + 11) = v6; *((float *)v5 + 12) = v7; v9 = *(float **)v5; v10 = v8; *((float *)v5 + 13) = v10; v11 = (float *)*((_DWORD *)v5 + 1); v12 = *v11 - *v9; v13 = v11[1] - v9[1]; v14 = v11[2] - v9[2]; *((float *)v5 + 48) = v12; *((float *)v5 + 49) = v13; v15 = (float *)*((_DWORD *)v5 + 2); v16 = v14; *((float *)v5 + 50) = v16; v17 = *v15 - *v9; v18 = v15[1] - v9[1]; v19 = v15[2] - v9[2]; *((float *)v5 + 51) = v17; *((float *)v5 + 52) = v18; v20 = (float *)*((_DWORD *)v5 + 5); v21 = v19; *((float *)v5 + 53) = v21; v22 = (float *)*((_DWORD *)v5 + 4); v23 = *v20 - *v22; v24 = v20[1] - v22[1]; v25 = v20[2] - v22[2]; *((float *)v5 + 87) = v23; *((float *)v5 + 88) = v24; *((float *)v5 + 89) = v25; v26 = (float *)*((_DWORD *)v5 + 6); v27 = *v26 - *v22; v28 = v26[1] - v22[1]; v29 = v26[2] - v22[2]; *((float *)v5 + 90) = v27; *((float *)v5 + 91) = v28; v30 = v29; *((float *)v5 + 92) = v30; v31 = *v22 - *v9; v32 = v22[1] - v9[1]; v33 = v22[2] - v9[2]; *((float *)v5 + 8) = v31; *((float *)v5 + 9) = v32; v34 = v33; *((float *)v5 + 10) = v34; *((_DWORD *)v5 + 126) = 0; return v5; } //----- (0084FC30) -------------------------------------------------------- char __thiscall sub_84FC30(int this, int a2, void *Src, void *a4, void *a5, void *a6, float a7) { int v7; // esi double v8; // st7 double v10; // st6 double v11; // st7 double v12; // st5 bool v13; // c0 bool v14; // c3 float v15; // [esp+24h] [ebp+1Ch] v7 = this; if ( *((float *)Src + 2) >= (double)*(float *)a5 ) { if ( *(float *)Src <= (double)*((float *)a5 + 2) ) return 1; v11 = *(float *)(this + 556) * a7 + *((float *)a5 + 2); v12 = *(float *)Src; v13 = v12 < v11; v14 = v12 == v11; v8 = a7; if ( !v13 && !v14 ) return 0; v10 = *(float *)Src - *((float *)a5 + 2); } else { v8 = a7; if ( *((float *)Src + 2) < *(float *)(this + 556) * a7 + *(float *)a5 ) return 0; v10 = *((float *)Src + 2) - *(float *)a5; } v15 = v10 / v8; if ( *(float *)(this + 560) < (double)v15 ) { *(float *)(this + 560) = v15; *(_DWORD *)(this + 504) = a2; memcpy_s((void *)(this + 508), 0xCu, Src, 0xCu); memcpy_s((void *)(v7 + 532), 0xCu, a4, 0xCu); memcpy_s((void *)(v7 + 520), 0xCu, a5, 0xCu); memcpy_s((void *)(v7 + 544), 0xCu, a6, 0xCu); return 1; } return 1; } //----- (0084FD50) -------------------------------------------------------- char __thiscall sub_84FD50(int this) { float v1; // eax double v2; // st7 signed int v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 double v8; // st6 float v9; // ST18_4 float v10; // ST1C_4 float v11; // ST0C_4 float v12; // ST1C_4 void *v13; // edx int v14; // ecx int v16; // [esp+1Ch] [ebp-34h] int v17; // [esp+28h] [ebp-28h] float Src; // [esp+34h] [ebp-1Ch] float v19; // [esp+38h] [ebp-18h] float v20; // [esp+3Ch] [ebp-14h] float v21; // [esp+40h] [ebp-10h] signed int v22; // [esp+44h] [ebp-Ch] float v23; // [esp+48h] [ebp-8h] v21 = *(float *)(this + 212) * *(float *)(this + 196) - *(float *)(this + 208) * *(float *)(this + 200); v1 = v21; v2 = *(float *)(this + 200); v21 = 0.0; *(float *)&v22 = v2 * *(float *)(this + 204) - *(float *)(this + 212) * *(float *)(this + 192); v3 = v22; v4 = *(float *)(this + 208); v22 = 1; v5 = v4 * *(float *)(this + 192); v6 = *(float *)(this + 196) * *(float *)(this + 204); *(float *)(this + 216) = v1; *(_DWORD *)(this + 220) = v3; v23 = v5 - v6; *(float *)(this + 224) = v23; v7 = *(float *)(this + 352) * *(float *)(this + 220); v8 = *(float *)(this + 348) * *(float *)(this + 216); LODWORD(v23) = 2; *(float *)(this + 268) = v7 + v8 + *(float *)(this + 356) * *(float *)(this + 224); *(float *)(this + 272) = *(float *)(this + 364) * *(float *)(this + 220) + *(float *)(this + 360) * *(float *)(this + 216) + *(float *)(this + 368) * *(float *)(this + 224); *(float *)(this + 280) = *(float *)(this + 36) * *(float *)(this + 220) + *(float *)(this + 32) * *(float *)(this + 216) + *(float *)(this + 40) * *(float *)(this + 224); v9 = *(float *)(this + 48) * *(float *)(this + 220) + *(float *)(this + 44) * *(float *)(this + 216) + *(float *)(this + 52) * *(float *)(this + 224); *(float *)(this + 284) = v9; Src = 0.0; v19 = 0.0; v20 = 0.0; v10 = *(float *)(this + 272) + *(float *)(this + 280); v11 = v10; v12 = *(float *)(this + 280) + *(float *)(this + 268); sub_84F970(*(float *)(this + 280), v12, v11, (int)&v17, (int)&v16); return sub_84FC30(v14, 1, &Src, &v21, &v17, v13, v9); } //----- (0084FF10) -------------------------------------------------------- char __thiscall sub_84FF10(int this) { float v1; // eax double v2; // st7 signed int v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 double v8; // st6 float v9; // ST18_4 int v10; // ecx int Src; // [esp+18h] [ebp-34h] int v13; // [esp+24h] [ebp-28h] float v14; // [esp+30h] [ebp-1Ch] float v15; // [esp+34h] [ebp-18h] float v16; // [esp+38h] [ebp-14h] float v17; // [esp+3Ch] [ebp-10h] signed int v18; // [esp+40h] [ebp-Ch] float v19; // [esp+44h] [ebp-8h] v17 = *(float *)(this + 368) * *(float *)(this + 352) - *(float *)(this + 364) * *(float *)(this + 356); v1 = v17; v2 = *(float *)(this + 356); v17 = 0.0; *(float *)&v18 = v2 * *(float *)(this + 360) - *(float *)(this + 368) * *(float *)(this + 348); v3 = v18; v4 = *(float *)(this + 364); v18 = 1; v5 = v4 * *(float *)(this + 348); v6 = *(float *)(this + 352) * *(float *)(this + 360); *(float *)(this + 372) = v1; *(_DWORD *)(this + 376) = v3; v19 = v5 - v6; *(float *)(this + 380) = v19; v7 = *(float *)(this + 196) * *(float *)(this + 376); v8 = *(float *)(this + 192) * *(float *)(this + 372); LODWORD(v19) = 2; *(float *)(this + 424) = v7 + v8 + *(float *)(this + 200) * *(float *)(this + 380); *(float *)(this + 428) = *(float *)(this + 208) * *(float *)(this + 376) + *(float *)(this + 204) * *(float *)(this + 372) + *(float *)(this + 212) * *(float *)(this + 380); *(float *)(this + 436) = *(float *)(this + 36) * *(float *)(this + 376) + *(float *)(this + 32) * *(float *)(this + 372) + *(float *)(this + 40) * *(float *)(this + 380); v9 = *(float *)(this + 48) * *(float *)(this + 376) + *(float *)(this + 44) * *(float *)(this + 372) + *(float *)(this + 52) * *(float *)(this + 380); *(float *)(this + 440) = v9; v14 = *(float *)(this + 436); v15 = v14; v16 = *(float *)(this + 436); sub_84F970(0.0, *(float *)(this + 424), *(float *)(this + 428), (int)&Src, (int)&v13); return sub_84FC30(v10, 2, &Src, &v13, &v14, &v17, v9); } //----- (008500D0) -------------------------------------------------------- char __thiscall sub_8500D0(float *this) { float v1; // edx double v2; // st7 double v3; // st6 float v4; // ST1C_4 float v5; // ST0C_4 int v6; // ecx float v7; // ST18_4 void *v8; // edx int v9; // ecx int Src; // [esp+1Ch] [ebp-34h] int v12; // [esp+28h] [ebp-28h] int v13; // [esp+34h] [ebp-1Ch] int v14; // [esp+40h] [ebp-10h] float v15; // [esp+44h] [ebp-Ch] float v16; // [esp+48h] [ebp-8h] *(float *)&v14 = this[89] * this[49] - this[88] * this[50]; v15 = this[50] * this[87] - this[89] * this[48]; v1 = v15; v2 = this[88] * this[48]; v3 = this[49] * this[87]; this[18] = *(float *)&v14; this[19] = v1; v16 = v2 - v3; this[20] = v16; this[30] = this[9] * this[19] + this[8] * this[18] + this[10] * this[20]; v4 = this[12] * this[19] + this[18] * this[11] + this[13] * this[20]; this[39] = v4; v5 = -this[67]; sub_84F970(0.0, 0.0, v5, (int)&Src, (int)&v12); v7 = *(float *)(v6 + 424) + *(float *)(v6 + 120); sub_84F970(*(float *)(v6 + 120), *(float *)(v6 + 120), v7, (int)&v13, (int)&v14); return sub_84FC30(v9, 4, &Src, &v12, &v13, v8, v4); } //----- (00850210) -------------------------------------------------------- char __thiscall sub_850210(float *this) { float v1; // edx double v2; // st7 double v3; // st6 float v4; // ST1C_4 float v5; // ST0C_4 int v6; // ecx float v7; // ST18_4 void *v8; // edx int v9; // ecx int Src; // [esp+1Ch] [ebp-34h] int v12; // [esp+28h] [ebp-28h] int v13; // [esp+34h] [ebp-1Ch] int v14; // [esp+40h] [ebp-10h] float v15; // [esp+44h] [ebp-Ch] float v16; // [esp+48h] [ebp-8h] *(float *)&v14 = this[92] * this[49] - this[91] * this[50]; v15 = this[50] * this[90] - this[92] * this[48]; v1 = v15; v2 = this[91] * this[48]; v3 = this[49] * this[90]; this[21] = *(float *)&v14; this[22] = v1; v16 = v2 - v3; this[23] = v16; this[31] = this[9] * this[22] + this[8] * this[21] + this[10] * this[23]; v4 = this[12] * this[22] + this[21] * this[11] + this[13] * this[23]; this[40] = v4; v5 = -this[68]; sub_84F970(0.0, 0.0, v5, (int)&Src, (int)&v12); v7 = *(float *)(v6 + 124) - *(float *)(v6 + 424); sub_84F970(*(float *)(v6 + 124), v7, *(float *)(v6 + 124), (int)&v13, (int)&v14); return sub_84FC30(v9, 8, &Src, &v12, &v13, v8, v4); } //----- (00850350) -------------------------------------------------------- char __thiscall sub_850350(float *this) { float v1; // ST1C_4 float v2; // ST18_4 float v3; // ST20_4 float v4; // ST0C_4 int v5; // ecx float v6; // ST20_4 void *v7; // edx int v8; // ecx int v10; // [esp+20h] [ebp-34h] int v11; // [esp+2Ch] [ebp-28h] int Src; // [esp+38h] [ebp-1Ch] int v13; // [esp+44h] [ebp-10h] v1 = this[31] - this[30]; this[32] = v1; v2 = this[40] - this[39]; this[41] = v2; v3 = this[68] - this[67]; this[69] = v3; v4 = -v3; sub_84F970(0.0, 0.0, v4, (int)&Src, (int)&v11); v6 = v1 - *(float *)(v5 + 424); sub_84F970(v1, v6, v6, (int)&v10, (int)&v13); return sub_84FC30(v8, 16, &Src, &v11, v7, &v13, v2); } //----- (00850420) -------------------------------------------------------- char __thiscall sub_850420(float *this) { float v1; // edx double v2; // st7 double v3; // st6 float v4; // ST1C_4 int v5; // ecx float v6; // ST18_4 void *v7; // edx int v8; // ecx int Src; // [esp+1Ch] [ebp-34h] int v11; // [esp+28h] [ebp-28h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+40h] [ebp-10h] float v14; // [esp+44h] [ebp-Ch] float v15; // [esp+48h] [ebp-8h] *(float *)&v13 = this[89] * this[52] - this[88] * this[53]; v14 = this[53] * this[87] - this[89] * this[51]; v1 = v14; v2 = this[88] * this[51]; v3 = this[52] * this[87]; this[24] = *(float *)&v13; this[25] = v1; v15 = v2 - v3; this[26] = v15; this[33] = this[9] * this[25] + this[8] * this[24] + this[10] * this[26]; v4 = this[12] * this[25] + this[24] * this[11] + this[13] * this[26]; this[42] = v4; sub_84F970(0.0, this[67], 0.0, (int)&Src, (int)&v11); v6 = *(float *)(v5 + 428) + *(float *)(v5 + 132); sub_84F970(*(float *)(v5 + 132), *(float *)(v5 + 132), v6, (int)&v12, (int)&v13); return sub_84FC30(v8, 32, &Src, &v11, &v12, v7, v4); } //----- (00850560) -------------------------------------------------------- char __thiscall sub_850560(float *this) { float v1; // edx double v2; // st7 double v3; // st6 float v4; // ST1C_4 int v5; // ecx float v6; // ST18_4 void *v7; // edx int v8; // ecx int Src; // [esp+1Ch] [ebp-34h] int v11; // [esp+28h] [ebp-28h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+40h] [ebp-10h] float v14; // [esp+44h] [ebp-Ch] float v15; // [esp+48h] [ebp-8h] *(float *)&v13 = this[92] * this[52] - this[91] * this[53]; v14 = this[53] * this[90] - this[92] * this[51]; v1 = v14; v2 = this[91] * this[51]; v3 = this[52] * this[90]; this[27] = *(float *)&v13; this[28] = v1; v15 = v2 - v3; this[29] = v15; this[34] = this[9] * this[28] + this[8] * this[27] + this[10] * this[29]; v4 = this[12] * this[28] + this[27] * this[11] + this[13] * this[29]; this[43] = v4; sub_84F970(0.0, this[68], 0.0, (int)&Src, (int)&v11); v6 = *(float *)(v5 + 136) - *(float *)(v5 + 428); sub_84F970(*(float *)(v5 + 136), v6, *(float *)(v5 + 136), (int)&v12, (int)&v13); return sub_84FC30(v8, 64, &Src, &v11, &v12, v7, v4); } //----- (008506A0) -------------------------------------------------------- char __thiscall sub_8506A0(float *this) { float v1; // ST1C_4 float v2; // ST18_4 double v3; // st7 int v4; // ecx float v5; // ST1C_4 float v6; // ST04_4 void *v7; // edx int v8; // ecx int Src; // [esp+1Ch] [ebp-34h] int v11; // [esp+28h] [ebp-28h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+40h] [ebp-10h] v1 = this[34] - this[33]; this[35] = v1; v2 = this[43] - this[42]; this[44] = v2; sub_84F970(0.0, this[69], 0.0, (int)&Src, (int)&v11); v3 = v1; v5 = v1 - *(float *)(v4 + 428); v6 = v3; sub_84F970(v6, v5, v5, (int)&v12, (int)&v13); return sub_84FC30(v8, 128, &Src, &v11, v7, &v13, v2); } //----- (00850760) -------------------------------------------------------- char __thiscall sub_850760(float *this) { float v1; // ST20_4 float v2; // ST18_4 float v3; // ST1C_4 double v4; // st7 float v5; // ST20_4 float v6; // ST08_4 float v7; // ST04_4 void *v8; // edx int v9; // ecx int v11; // [esp+20h] [ebp-34h] int v12; // [esp+2Ch] [ebp-28h] int Src; // [esp+38h] [ebp-1Ch] int v14; // [esp+44h] [ebp-10h] v1 = this[33] - this[30]; this[36] = v1; v2 = this[42] - this[39]; this[45] = v2; v3 = this[107] - this[106]; this[108] = v3; sub_84F970(0.0, this[67], this[67], (int)&Src, (int)&v12); v4 = v1; v5 = v3 + v1; v6 = v4; v7 = v4; sub_84F970(v7, v6, v5, (int)&v11, (int)&v14); return sub_84FC30(v9, 256, &Src, &v12, v8, &v14, v2); } //----- (00850840) -------------------------------------------------------- char __thiscall sub_850840(float *this) { float v1; // ST1C_4 float v2; // ST18_4 double v3; // st7 float v4; // ST0C_4 int v5; // ecx float v6; // ST1C_4 float v7; // ST04_4 void *v8; // edx int v9; // ecx int Src; // [esp+1Ch] [ebp-34h] int v12; // [esp+28h] [ebp-28h] int v13; // [esp+34h] [ebp-1Ch] int v14; // [esp+40h] [ebp-10h] v1 = this[34] - this[31]; this[37] = v1; v2 = this[43] - this[40]; this[46] = v2; sub_84F970(0.0, this[68], this[68], (int)&Src, (int)&v12); v3 = v1; v4 = v1; v6 = v1 - *(float *)(v5 + 432); v7 = v3; sub_84F970(v7, v6, v4, (int)&v13, (int)&v14); return sub_84FC30(v9, 512, &Src, &v12, v8, &v14, v2); } //----- (00850900) -------------------------------------------------------- char __thiscall sub_850900(float *this) { float v1; // ST1C_4 float v2; // ST18_4 double v3; // st7 int v4; // ecx float v5; // ST1C_4 float v6; // ST04_4 void *v7; // edx int v8; // ecx int Src; // [esp+1Ch] [ebp-34h] int v11; // [esp+28h] [ebp-28h] int v12; // [esp+34h] [ebp-1Ch] int v13; // [esp+40h] [ebp-10h] v1 = this[37] - this[36]; this[38] = v1; v2 = this[46] - this[45]; this[47] = v2; sub_84F970(0.0, this[69], this[69], (int)&Src, (int)&v11); v3 = v1; v5 = v1 - *(float *)(v4 + 432); v6 = v3; sub_84F970(v6, v5, v5, (int)&v12, (int)&v13); return sub_84FC30(v8, 1024, &Src, &v11, v7, &v13, v2); } //----- (008509D0) -------------------------------------------------------- char __thiscall sub_8509D0(int this) { float v1; // eax double v2; // st7 signed int v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 float v8; // ST18_4 int v9; // ecx int Src; // [esp+18h] [ebp-34h] int v12; // [esp+24h] [ebp-28h] float v13; // [esp+30h] [ebp-1Ch] float v14; // [esp+34h] [ebp-18h] float v15; // [esp+38h] [ebp-14h] float v16; // [esp+3Ch] [ebp-10h] signed int v17; // [esp+40h] [ebp-Ch] float v18; // [esp+44h] [ebp-8h] *(float *)(this + 420) = *(float *)(this + 376) * *(float *)(this + 376) + *(float *)(this + 372) * *(float *)(this + 372) + *(float *)(this + 380) * *(float *)(this + 380); v16 = *(float *)(this + 356) * *(float *)(this + 376) - *(float *)(this + 352) * *(float *)(this + 380); v1 = v16; v2 = *(float *)(this + 348); v16 = 0.0; *(float *)&v17 = v2 * *(float *)(this + 380) - *(float *)(this + 356) * *(float *)(this + 372); v3 = v17; v4 = *(float *)(this + 352); v17 = 1; v5 = v4 * *(float *)(this + 372); v6 = *(float *)(this + 348) * *(float *)(this + 376); *(float *)(this + 384) = v1; *(_DWORD *)(this + 388) = v3; v18 = v5 - v6; *(float *)(this + 392) = v18; v7 = *(float *)(this + 196) * *(float *)(this + 388); LODWORD(v18) = 2; *(float *)(this + 468) = v7 + *(float *)(this + 192) * *(float *)(this + 384) + *(float *)(this + 200) * *(float *)(this + 392); *(float *)(this + 472) = *(float *)(this + 208) * *(float *)(this + 388) + *(float *)(this + 384) * *(float *)(this + 204) + *(float *)(this + 212) * *(float *)(this + 392); *(float *)(this + 444) = *(float *)(this + 36) * *(float *)(this + 388) + *(float *)(this + 32) * *(float *)(this + 384) + *(float *)(this + 40) * *(float *)(this + 392); v8 = *(float *)(this + 48) * *(float *)(this + 388) + *(float *)(this + 384) * *(float *)(this + 44) + *(float *)(this + 52) * *(float *)(this + 392); *(float *)(this + 456) = v8; v13 = *(float *)(this + 444); v14 = v13; v15 = *(float *)(this + 420) + *(float *)(this + 444); sub_84F970(0.0, *(float *)(this + 468), *(float *)(this + 472), (int)&Src, (int)&v12); return sub_84FC30(v9, 0x4000, &Src, &v12, &v13, &v16, v8); } //----- (00850BC0) -------------------------------------------------------- char __thiscall sub_850BC0(int this) { signed int v1; // eax double v2; // st7 float v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 double v8; // st6 float v9; // ST18_4 int v10; // ecx int Src; // [esp+18h] [ebp-34h] int v13; // [esp+24h] [ebp-28h] float v14; // [esp+30h] [ebp-1Ch] float v15; // [esp+34h] [ebp-18h] float v16; // [esp+38h] [ebp-14h] signed int v17; // [esp+3Ch] [ebp-10h] float v18; // [esp+40h] [ebp-Ch] float v19; // [esp+44h] [ebp-8h] *(float *)&v17 = *(float *)(this + 368) * *(float *)(this + 376) - *(float *)(this + 364) * *(float *)(this + 380); v1 = v17; v2 = *(float *)(this + 380); v17 = 1; v18 = v2 * *(float *)(this + 360) - *(float *)(this + 368) * *(float *)(this + 372); v3 = v18; v4 = *(float *)(this + 364); v18 = 0.0; v5 = v4 * *(float *)(this + 372); v6 = *(float *)(this + 376) * *(float *)(this + 360); *(_DWORD *)(this + 396) = v1; *(float *)(this + 400) = v3; v19 = v5 - v6; *(float *)(this + 404) = v19; v7 = *(float *)(this + 196) * *(float *)(this + 400); v8 = *(float *)(this + 192) * *(float *)(this + 396); LODWORD(v19) = 2; *(float *)(this + 480) = v7 + v8 + *(float *)(this + 200) * *(float *)(this + 404); *(float *)(this + 484) = *(float *)(this + 208) * *(float *)(this + 400) + *(float *)(this + 204) * *(float *)(this + 396) + *(float *)(this + 212) * *(float *)(this + 404); *(float *)(this + 448) = *(float *)(this + 36) * *(float *)(this + 400) + *(float *)(this + 32) * *(float *)(this + 396) + *(float *)(this + 40) * *(float *)(this + 404); v9 = *(float *)(this + 48) * *(float *)(this + 400) + *(float *)(this + 44) * *(float *)(this + 396) + *(float *)(this + 52) * *(float *)(this + 404); *(float *)(this + 460) = v9; v14 = *(float *)(this + 448) - *(float *)(this + 420); v15 = *(float *)(this + 448); v16 = v15; sub_84F970(0.0, *(float *)(this + 480), *(float *)(this + 484), (int)&Src, (int)&v13); return sub_84FC30(v10, 0x8000, &Src, &v13, &v14, &v17, v9); } //----- (00850D80) -------------------------------------------------------- char __thiscall sub_850D80(float *this) { float v1; // ST1C_4 double v2; // st7 double v3; // st6 float v4; // ST1C_4 double v5; // st6 float v6; // ST1C_4 double v7; // st5 float v8; // ST1C_4 float v9; // ST18_4 float v10; // ST0C_4 float v11; // ST08_4 int v12; // ecx int Src; // [esp+1Ch] [ebp-34h] int v15; // [esp+28h] [ebp-28h] float v16; // [esp+34h] [ebp-1Ch] float v17; // [esp+38h] [ebp-18h] float v18; // [esp+3Ch] [ebp-14h] int v19; // [esp+40h] [ebp-10h] int v20; // [esp+44h] [ebp-Ch] int v21; // [esp+48h] [ebp-8h] v1 = this[120] - this[117]; v2 = v1; v19 = 1; this[123] = v1; v20 = 2; v3 = this[121]; v21 = 0; v4 = v3 - this[118]; v5 = v4; this[124] = v4; v6 = this[112] - this[111]; v7 = v6; this[113] = v6; v8 = this[115] - this[114]; this[116] = v8; v9 = v7 - this[105]; v16 = v9; v17 = v9; v18 = v7; v10 = v5; v11 = v2; sub_84F970(0.0, v11, v10, (int)&Src, (int)&v15); return sub_84FC30(v12, 0x10000, &Src, &v15, &v16, &v19, v8); } //----- (00850E70) -------------------------------------------------------- char __thiscall sub_850E70(int this) { float v1; // eax double v2; // st7 signed int v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST0C_4 float v11; // ST1C_4 void *v12; // edx int v13; // ecx int v15; // [esp+1Ch] [ebp-34h] int v16; // [esp+28h] [ebp-28h] float Src; // [esp+34h] [ebp-1Ch] float v18; // [esp+38h] [ebp-18h] float v19; // [esp+3Ch] [ebp-14h] float v20; // [esp+40h] [ebp-10h] signed int v21; // [esp+44h] [ebp-Ch] float v22; // [esp+48h] [ebp-8h] *(float *)(this + 264) = *(float *)(this + 220) * *(float *)(this + 220) + *(float *)(this + 216) * *(float *)(this + 216) + *(float *)(this + 224) * *(float *)(this + 224); v20 = *(float *)(this + 220) * *(float *)(this + 200) - *(float *)(this + 224) * *(float *)(this + 196); v1 = v20; v2 = *(float *)(this + 224); v20 = 0.0; *(float *)&v21 = v2 * *(float *)(this + 192) - *(float *)(this + 200) * *(float *)(this + 216); v3 = v21; v4 = *(float *)(this + 196); v21 = 1; v5 = v4 * *(float *)(this + 216); v6 = *(float *)(this + 220) * *(float *)(this + 192); *(float *)(this + 228) = v1; *(_DWORD *)(this + 232) = v3; v22 = v5 - v6; *(float *)(this + 236) = v22; v7 = *(float *)(this + 352) * *(float *)(this + 232); LODWORD(v22) = 2; *(float *)(this + 312) = v7 + *(float *)(this + 348) * *(float *)(this + 228) + *(float *)(this + 356) * *(float *)(this + 236); *(float *)(this + 316) = *(float *)(this + 364) * *(float *)(this + 232) + *(float *)(this + 228) * *(float *)(this + 360) + *(float *)(this + 368) * *(float *)(this + 236); *(float *)(this + 288) = *(float *)(this + 36) * *(float *)(this + 232) + *(float *)(this + 32) * *(float *)(this + 228) + *(float *)(this + 40) * *(float *)(this + 236); v8 = *(float *)(this + 48) * *(float *)(this + 232) + *(float *)(this + 228) * *(float *)(this + 44) + *(float *)(this + 52) * *(float *)(this + 236); *(float *)(this + 300) = v8; Src = 0.0; v18 = 0.0; v19 = *(float *)(this + 264); v9 = *(float *)(this + 316) + *(float *)(this + 288); v10 = v9; v11 = *(float *)(this + 312) + *(float *)(this + 288); sub_84F970(*(float *)(this + 288), v11, v10, (int)&v16, (int)&v15); return sub_84FC30(v13, 2048, &Src, &v20, &v16, v12, v8); } //----- (00851070) -------------------------------------------------------- char __thiscall sub_851070(int this) { signed int v1; // eax double v2; // st7 float v3; // edx double v4; // st7 double v5; // st7 double v6; // st6 double v7; // st7 double v8; // st6 float v9; // ST18_4 float v10; // ST1C_4 float v11; // ST0C_4 float v12; // ST1C_4 void *v13; // edx int v14; // ecx int v16; // [esp+1Ch] [ebp-34h] int v17; // [esp+28h] [ebp-28h] float Src; // [esp+34h] [ebp-1Ch] float v19; // [esp+38h] [ebp-18h] float v20; // [esp+3Ch] [ebp-14h] signed int v21; // [esp+40h] [ebp-10h] float v22; // [esp+44h] [ebp-Ch] float v23; // [esp+48h] [ebp-8h] *(float *)&v21 = *(float *)(this + 212) * *(float *)(this + 220) - *(float *)(this + 208) * *(float *)(this + 224); v1 = v21; v2 = *(float *)(this + 224); v21 = 1; v22 = v2 * *(float *)(this + 204) - *(float *)(this + 212) * *(float *)(this + 216); v3 = v22; v4 = *(float *)(this + 208); v22 = 0.0; v5 = v4 * *(float *)(this + 216); v6 = *(float *)(this + 220) * *(float *)(this + 204); *(_DWORD *)(this + 240) = v1; *(float *)(this + 244) = v3; v23 = v5 - v6; *(float *)(this + 248) = v23; v7 = *(float *)(this + 352) * *(float *)(this + 244); v8 = *(float *)(this + 348) * *(float *)(this + 240); LODWORD(v23) = 2; *(float *)(this + 324) = v7 + v8 + *(float *)(this + 356) * *(float *)(this + 248); *(float *)(this + 328) = *(float *)(this + 364) * *(float *)(this + 244) + *(float *)(this + 360) * *(float *)(this + 240) + *(float *)(this + 368) * *(float *)(this + 248); *(float *)(this + 292) = *(float *)(this + 36) * *(float *)(this + 244) + *(float *)(this + 32) * *(float *)(this + 240) + *(float *)(this + 40) * *(float *)(this + 248); v9 = *(float *)(this + 48) * *(float *)(this + 244) + *(float *)(this + 44) * *(float *)(this + 240) + *(float *)(this + 52) * *(float *)(this + 248); *(float *)(this + 304) = v9; Src = -*(float *)(this + 264); v19 = 0.0; v20 = 0.0; v10 = *(float *)(this + 328) + *(float *)(this + 292); v11 = v10; v12 = *(float *)(this + 292) + *(float *)(this + 324); sub_84F970(*(float *)(this + 292), v12, v11, (int)&v17, (int)&v16); return sub_84FC30(v14, 4096, &Src, &v21, &v17, v13, v9); } //----- (00851240) -------------------------------------------------------- char __thiscall sub_851240(float *this) { float v1; // ST1C_4 double v2; // st7 double v3; // st6 float v4; // ST1C_4 double v5; // st6 float v6; // ST1C_4 double v7; // st5 float v8; // ST1C_4 float v9; // ST18_4 float v10; // ST18_4 float v11; // ST0C_4 float v12; // ST18_4 float v13; // ST04_4 void *v14; // edx int v15; // ecx int v17; // [esp+1Ch] [ebp-34h] int v18; // [esp+28h] [ebp-28h] float Src; // [esp+34h] [ebp-1Ch] float v20; // [esp+38h] [ebp-18h] float v21; // [esp+3Ch] [ebp-14h] int v22; // [esp+40h] [ebp-10h] int v23; // [esp+44h] [ebp-Ch] int v24; // [esp+48h] [ebp-8h] v1 = this[81] - this[78]; v2 = v1; v22 = 1; this[84] = v1; v23 = 2; v3 = this[82]; v24 = 0; v4 = v3 - this[79]; v5 = v4; this[85] = v4; v6 = this[73] - this[72]; v7 = v6; this[74] = v6; v8 = this[76] - this[75]; this[77] = v8; v9 = -this[66]; Src = v9; v20 = v9; v21 = 0.0; v10 = v5 + v7; v11 = v10; v12 = v2 + v7; v13 = v7; sub_84F970(v13, v12, v11, (int)&v17, (int)&v18); return sub_84FC30(v15, 0x2000, &Src, &v22, v14, &v18, v8); } //----- (00851340) -------------------------------------------------------- float __userpurge sub_851340@(int this@, float *a2, float *a3, float *a4, float *a5) { float *v5; // edx float *v6; // edi float v7; // ST0C_4 float v8; // ST10_4 float v9; // ST18_4 float v10; // ST1C_4 float v11; // ST20_4 double v12; // st5 double v13; // st4 double v14; // st3 double v15; // st2 float *v16; // eax float v17; // ST24_4 float v18; // ST28_4 float v19; // ST2C_4 float v20; // ST0C_4 float v21; // ST10_4 float v22; // ST14_4 float v23; // ST18_4 float v24; // ST1C_4 float v25; // ST20_4 float v26; // ST0C_4 float v27; // ST10_4 float v28; // ST14_4 float result; // eax float v30; // ST0C_4 float v31; // ST10_4 float v32; // ST14_4 float v33; // ST18_4 float v34; // ST1C_4 float v35; // ST20_4 double v36; // st7 float *v37; // eax float v38; // ST0C_4 float v39; // ST10_4 float v40; // ST14_4 double v41; // st7 float *v42; // eax float v43; // ST0C_4 float v44; // ST10_4 float v45; // ST14_4 float v46; // ST20_4 float *v47; // eax float v48; // ST0C_4 float v49; // ST10_4 float v50; // ST14_4 float v51; // ST18_4 float v52; // ST1C_4 double v53; // st7 float v54; // ST20_4 float v55; // [esp+10h] [ebp-28h] float v56; // [esp+14h] [ebp-24h] float v57; // [esp+18h] [ebp-20h] float v58; // [esp+20h] [ebp-18h] float v59; // [esp+24h] [ebp-14h] float v60; // [esp+28h] [ebp-10h] float v61; // [esp+2Ch] [ebp-Ch] float v62; // [esp+30h] [ebp-8h] float v63; // [esp+34h] [ebp-4h] float v64; // [esp+40h] [ebp+8h] float v65; // [esp+44h] [ebp+Ch] float v66; // [esp+44h] [ebp+Ch] float v67; // [esp+44h] [ebp+Ch] float v68; // [esp+44h] [ebp+Ch] float v69; // [esp+44h] [ebp+Ch] float v70; // [esp+44h] [ebp+Ch] float v71; // [esp+44h] [ebp+Ch] float v72; // [esp+44h] [ebp+Ch] v5 = a2; v6 = a3; v7 = *a3 - *a2; v8 = a3[1] - a2[1]; v55 = a3[2] - a2[2]; v65 = *(float *)(this + 560); v58 = *(float *)(this + 44) * v65; v59 = *(float *)(this + 48) * v65; v60 = v65 * *(float *)(this + 52); v9 = *a4 + v58; v10 = v59 + a4[1]; v11 = a4[2] + v60; v61 = v9 - *a2; v62 = v10 - a2[1]; v63 = v11 - a2[2]; v12 = v8; v13 = v7; v14 = v55; v66 = *(float *)(this + 372) * v7 + v8 * *(float *)(this + 376) + v55 * *(float *)(this + 380); v15 = v66; v67 = fabs(v66); if ( flt_ABD1D4 < (double)v67 ) { v16 = *(float **)(this + 12); v68 = v62 * *(float *)(this + 376) + *(float *)(this + 372) * v61 + v63 * *(float *)(this + 380); v69 = v68 / v15; v17 = v13 * v69; v18 = v12 * v69; v19 = v69 * v55; v70 = *(float *)(this + 560); v20 = v70 * *v16; v21 = v16[1] * v70; v22 = v70 * v16[2]; v23 = *a2 + v20; v24 = v21 + a2[1]; v25 = a2[2] + v22; v26 = v23 + v17; *(float *)(this + 564) = v26; v27 = v24 + v18; *(float *)(this + 568) = v27; v28 = v25 + v19; result = v28; *(float *)(this + 572) = v28; return result; } v30 = v58 + *a5; v31 = v59 + a5[1]; v32 = v60 + a5[2]; v33 = v30 - *v6; v34 = v31 - v6[1]; v35 = v32 - v6[2]; v71 = v62 * v12 + v61 * v13 + v63 * v14; v64 = v14 * v35 + v13 * v33 + v12 * v34; v36 = v71; if ( v64 < (double)v71 ) { v72 = *(float *)(this + 560); if ( v64 >= 0.0 ) { v42 = *(float **)(this + 28); v43 = *v42 * v72; v44 = v42[1] * v72; v45 = v72 * v42[2]; v56 = v43 + *a5; v57 = a5[1] + v44; v41 = v45 + a5[2]; goto LABEL_8; } } else { v72 = *(float *)(this + 560); if ( v36 >= 0.0 ) { v37 = *(float **)(this + 28); v38 = *v37 * v72; v39 = v37[1] * v72; v40 = v72 * v37[2]; v56 = *a4 + v38; v57 = v39 + a4[1]; v41 = a4[2] + v40; LABEL_8: v46 = v41; result = v57; *(float *)(this + 564) = v56; *(float *)(this + 568) = v57; *(float *)(this + 572) = v46; return result; } } v47 = *(float **)(this + 12); v48 = *v47 * v72; v49 = v47[1] * v72; v50 = v72 * v47[2]; v51 = *v5 + v48; v52 = v49 + v5[1]; v53 = v5[2]; *(float *)(this + 564) = v51; *(float *)(this + 568) = v52; v54 = v53 + v50; result = v54; *(float *)(this + 572) = v54; return result; } // ABD1D4: using guessed type float flt_ABD1D4; //----- (00851680) -------------------------------------------------------- float __userpurge sub_851680@(int this@, float *a2, float *a3) { float *v3; // edx float v4; // ST28_4 float *v5; // esi float v6; // ST1C_4 float v7; // ST20_4 float v8; // ST24_4 float v9; // ST1C_4 float v10; // ST20_4 float v11; // ST24_4 double v12; // st6 double v13; // st5 float v14; // ST04_4 double v15; // st4 float v16; // ST08_4 float v17; // ST0C_4 float v18; // ST04_4 float v19; // ST08_4 float v20; // ST0C_4 float *v21; // eax double v22; // st5 float v23; // ST04_4 float v24; // ST08_4 float v25; // ST0C_4 double v26; // st7 float v27; // ST24_4 double v28; // st3 float v29; // ST04_4 float v30; // ST08_4 float v31; // ST0C_4 float v32; // ST04_4 float v33; // ST08_4 float v34; // ST0C_4 float *v35; // eax double v36; // st5 float v37; // ST04_4 float v38; // ST08_4 float v39; // ST0C_4 float v40; // ST10_4 float v41; // ST14_4 float result; // eax double v43; // st7 float v44; // ST18_4 double v45; // st3 double v46; // st2 float *v47; // eax float v48; // ST1C_4 float v49; // ST20_4 float v50; // ST24_4 double v51; // st5 float v52; // ST04_4 float v53; // ST08_4 float v54; // ST0C_4 float v55; // ST10_4 float v56; // ST14_4 float v57; // ST18_4 float v58; // ST04_4 float v59; // ST08_4 float v60; // ST0C_4 double v61; // st2 float *v62; // eax double v63; // st5 float v64; // ST04_4 double v65; // st7 float v66; // ST10_4 float v67; // ST14_4 float v68; // ST18_4 float v69; // ST04_4 float v70; // ST08_4 float v71; // ST0C_4 float v72; // ST28_4 double v73; // st7 float *v74; // eax float v75; // ST28_4 float v76; // ST1C_4 float v77; // ST20_4 float v78; // ST24_4 float v79; // ST04_4 float v80; // ST08_4 float v81; // ST0C_4 float v82; // ST10_4 float v83; // ST14_4 float v84; // ST18_4 float v85; // ST04_4 float v86; // ST08_4 float v87; // ST0C_4 float v88; // ST28_4 double v89; // st7 float *v90; // eax float v91; // ST28_4 float v92; // ST04_4 float *v93; // eax float v94; // ST04_4 float v95; // ST08_4 float v96; // ST0C_4 float v97; // ST18_4 float v98; // [esp+4h] [ebp-24h] float v99; // [esp+8h] [ebp-20h] float v100; // [esp+Ch] [ebp-1Ch] float v101; // [esp+Ch] [ebp-1Ch] float v102; // [esp+10h] [ebp-18h] float v103; // [esp+10h] [ebp-18h] float v104; // [esp+14h] [ebp-14h] float v105; // [esp+18h] [ebp-10h] float v106; // [esp+18h] [ebp-10h] float v107; // [esp+1Ch] [ebp-Ch] float v108; // [esp+1Ch] [ebp-Ch] float v109; // [esp+20h] [ebp-8h] float v110; // [esp+24h] [ebp-4h] float v111; // [esp+24h] [ebp-4h] float v112; // [esp+30h] [ebp+8h] float v113; // [esp+30h] [ebp+8h] float v114; // [esp+30h] [ebp+8h] float v115; // [esp+30h] [ebp+8h] float v116; // [esp+30h] [ebp+8h] float v117; // [esp+30h] [ebp+8h] float v118; // [esp+30h] [ebp+8h] float v119; // [esp+30h] [ebp+8h] float v120; // [esp+30h] [ebp+8h] float v121; // [esp+30h] [ebp+8h] float v122; // [esp+30h] [ebp+8h] v3 = *(float **)(this + 16); v4 = *(float *)(this + 560); v5 = a2; v6 = *(float *)(this + 44) * v4; v7 = *(float *)(this + 48) * v4; v8 = v4 * *(float *)(this + 52); v100 = *v3 + v6; v102 = v3[1] + v7; v104 = v3[2] + v8; v9 = *a2 - v100; v10 = a2[1] - v102; v11 = a2[2] - v104; v12 = v11; v13 = v10; v14 = v11 * *(float *)(this + 364) - v10 * *(float *)(this + 368); v15 = v9; v16 = v9 * *(float *)(this + 368) - v11 * *(float *)(this + 360); v17 = v10 * *(float *)(this + 360) - *(float *)(this + 364) * v9; v112 = v14 * *(float *)(this + 372) + v16 * *(float *)(this + 376) + v17 * *(float *)(this + 380); v113 = -v112; if ( v113 < 0.0 || (v18 = *(float *)(this + 352) * v12 - v13 * *(float *)(this + 356), v19 = *(float *)(this + 356) * v15 - v12 * *(float *)(this + 348), v20 = v13 * *(float *)(this + 348) - *(float *)(this + 352) * v15, v110 = v18 * *(float *)(this + 372) + v19 * *(float *)(this + 376) + v20 * *(float *)(this + 380), v110 < 0.0) || *(float *)(this + 420) < v110 + v113 ) { v105 = *a3 - v100; v107 = a3[1] - v102; v27 = a3[2] - v104; v28 = v27; v29 = v27 * *(float *)(this + 364) - v107 * *(float *)(this + 368); v30 = v105 * *(float *)(this + 368) - v27 * *(float *)(this + 360); v31 = v107 * *(float *)(this + 360) - v105 * *(float *)(this + 364); v114 = v29 * *(float *)(this + 372) + v30 * *(float *)(this + 376) + v31 * *(float *)(this + 380); v115 = -v114; if ( v115 >= 0.0 ) { v32 = *(float *)(this + 352) * v28 - v107 * *(float *)(this + 356); v33 = *(float *)(this + 356) * v105 - v28 * *(float *)(this + 348); v34 = v107 * *(float *)(this + 348) - v105 * *(float *)(this + 352); v111 = v32 * *(float *)(this + 372) + v33 * *(float *)(this + 376) + v34 * *(float *)(this + 380); if ( v111 >= 0.0 && *(float *)(this + 420) >= v111 + v115 ) { v35 = *(float **)(this + 12); v36 = *(float *)(this + 560); v37 = *v35 * v36; v38 = v35[1] * v36; v39 = v36 * v35[2]; v40 = v37 + *a3; v41 = a3[1] + v38; result = v41; v43 = v39 + a3[2]; *(float *)(this + 564) = v40; *(float *)(this + 568) = v41; v44 = v43; *(float *)(this + 572) = v44; return result; } } v45 = flt_ABD1D4; if ( flt_ABD1D4 >= (double)*(float *)(this + 268) ) { if ( -v45 > *(float *)(this + 268) ) { v118 = *(float *)(this + 220) * v13 + *(float *)(this + 216) * v15 + *(float *)(this + 224) * v12; v61 = v118; if ( v118 >= (double)*(float *)(this + 268) && v61 <= 0.0 ) { v62 = *(float **)(this + 28); v119 = v61 / *(float *)(this + 268); v106 = v119 * *(float *)(this + 348); v108 = *(float *)(this + 352) * v119; v109 = v119 * *(float *)(this + 356); v63 = *(float *)(this + 560); v64 = *v62 * v63; v98 = v62[1] * v63; v99 = v63 * v62[2]; v65 = *v3 + v64; goto LABEL_17; } } } else { v116 = *(float *)(this + 220) * v13 + *(float *)(this + 216) * v15 + *(float *)(this + 224) * v12; v46 = v116; if ( v116 >= 0.0 && *(float *)(this + 268) >= v46 ) { v47 = *(float **)(this + 28); v117 = v46 / *(float *)(this + 268); v48 = v117 * *(float *)(this + 348); v49 = *(float *)(this + 352) * v117; v50 = v117 * *(float *)(this + 356); v51 = *(float *)(this + 560); v52 = *v47 * v51; v53 = v47[1] * v51; v54 = v51 * v47[2]; v55 = v52 + *v3; v56 = v3[1] + v53; v57 = v3[2] + v54; v58 = v55 + v48; *(float *)(this + 564) = v58; v59 = v56 + v49; *(float *)(this + 568) = v59; v60 = v57 + v50; result = v60; *(float *)(this + 572) = v60; return result; } } if ( *(float *)(this + 272) > v45 ) { v72 = v12 * *(float *)(this + 224) + v13 * *(float *)(this + 220) + v15 * *(float *)(this + 216); v73 = v72; if ( v72 >= 0.0 && *(float *)(this + 272) >= v73 ) { v74 = *(float **)(this + 28); v75 = v73 / *(float *)(this + 272); v76 = *(float *)(this + 360) * v75; v77 = *(float *)(this + 364) * v75; v78 = v75 * *(float *)(this + 368); v120 = *(float *)(this + 560); v79 = v120 * *v74; v80 = v74[1] * v120; v81 = v120 * v74[2]; v82 = v79 + *v3; v83 = v3[1] + v80; v84 = v3[2] + v81; v85 = v82 + v76; *(float *)(this + 564) = v85; v86 = v83 + v77; *(float *)(this + 568) = v86; v87 = v84 + v78; result = v87; *(float *)(this + 572) = v87; return result; } goto LABEL_26; } if ( -v45 <= *(float *)(this + 272) || (v88 = v15 * *(float *)(this + 216) + v13 * *(float *)(this + 220) + v12 * *(float *)(this + 224), v89 = v88, v88 < (double)*(float *)(this + 272)) || v89 > 0.0 ) { LABEL_26: v93 = *(float **)(this + 28); v122 = *(float *)(this + 560); v94 = v122 * *v93; v95 = v93[1] * v122; v96 = v122 * v93[2]; v101 = *v3 + v94; v103 = v3[1] + v95; v26 = v3[2] + v96; goto LABEL_27; } v90 = *(float **)(this + 28); v91 = v89 / *(float *)(this + 272); v106 = *(float *)(this + 360) * v91; v108 = *(float *)(this + 364) * v91; v109 = v91 * *(float *)(this + 368); v121 = *(float *)(this + 560); v92 = v121 * *v90; v98 = v90[1] * v121; v99 = v121 * v90[2]; v65 = v92 + *v3; LABEL_17: v66 = v65; v67 = v3[1] + v98; v68 = v3[2] + v99; v69 = v66 + v106; *(float *)(this + 564) = v69; v70 = v67 + v108; result = v70; *(float *)(this + 568) = v70; v71 = v68 + v109; *(float *)(this + 572) = v71; return result; } v21 = *(float **)(this + 12); v22 = *(float *)(this + 560); v23 = *v21 * v22; v24 = v21[1] * v22; v25 = v22 * v21[2]; v101 = *v5 + v23; v103 = v5[1] + v24; v26 = v25 + v5[2]; LABEL_27: v97 = v26; *(float *)(this + 564) = v101; result = v97; *(float *)(this + 568) = v103; *(float *)(this + 572) = v97; return result; } // ABD1D4: using guessed type float flt_ABD1D4; //----- (00851E20) -------------------------------------------------------- float __userpurge sub_851E20@(float **this@, float *a2, float *a3) { float *v3; // edx float v4; // ST28_4 float *v5; // esi float v6; // ST1C_4 float v7; // ST20_4 float v8; // ST24_4 float v9; // ST1C_4 float v10; // ST20_4 float v11; // ST24_4 double v12; // st6 double v13; // st5 float v14; // ST04_4 double v15; // st4 float v16; // ST08_4 float v17; // ST0C_4 float v18; // ST04_4 float v19; // ST08_4 float v20; // ST0C_4 float *v21; // eax double v22; // st5 float v23; // ST04_4 float v24; // ST08_4 float v25; // ST0C_4 double v26; // st7 float v27; // ST24_4 double v28; // st3 float v29; // ST04_4 float v30; // ST08_4 float v31; // ST0C_4 float v32; // ST04_4 float v33; // ST08_4 float v34; // ST0C_4 float *v35; // eax double v36; // st5 float v37; // ST04_4 float v38; // ST08_4 float v39; // ST0C_4 float v40; // ST10_4 float v41; // ST14_4 float result; // eax double v43; // st7 float v44; // ST18_4 double v45; // st3 double v46; // st2 float *v47; // eax float v48; // ST1C_4 float v49; // ST20_4 float v50; // ST24_4 double v51; // st5 float v52; // ST04_4 float v53; // ST08_4 float v54; // ST0C_4 float v55; // ST10_4 float v56; // ST14_4 float v57; // ST18_4 float v58; // ST04_4 float v59; // ST08_4 float v60; // ST0C_4 double v61; // st2 float *v62; // eax double v63; // st5 float v64; // ST04_4 double v65; // st7 float v66; // ST10_4 float v67; // ST14_4 float v68; // ST18_4 float v69; // ST04_4 float v70; // ST08_4 float v71; // ST0C_4 float v72; // ST28_4 double v73; // st7 float *v74; // eax float v75; // ST28_4 float v76; // ST1C_4 float v77; // ST20_4 float v78; // ST24_4 float v79; // ST04_4 float v80; // ST08_4 float v81; // ST0C_4 float v82; // ST10_4 float v83; // ST14_4 float v84; // ST18_4 float v85; // ST04_4 float v86; // ST08_4 float v87; // ST0C_4 float v88; // ST28_4 double v89; // st7 float *v90; // eax float v91; // ST28_4 float v92; // ST04_4 float *v93; // eax float v94; // ST04_4 float v95; // ST08_4 float v96; // ST0C_4 float v97; // ST18_4 float v98; // [esp+4h] [ebp-24h] float v99; // [esp+8h] [ebp-20h] float v100; // [esp+Ch] [ebp-1Ch] float v101; // [esp+Ch] [ebp-1Ch] float v102; // [esp+10h] [ebp-18h] float v103; // [esp+10h] [ebp-18h] float v104; // [esp+14h] [ebp-14h] float v105; // [esp+18h] [ebp-10h] float v106; // [esp+18h] [ebp-10h] float v107; // [esp+1Ch] [ebp-Ch] float v108; // [esp+1Ch] [ebp-Ch] float v109; // [esp+20h] [ebp-8h] float v110; // [esp+24h] [ebp-4h] float v111; // [esp+24h] [ebp-4h] float v112; // [esp+30h] [ebp+8h] float v113; // [esp+30h] [ebp+8h] float v114; // [esp+30h] [ebp+8h] float v115; // [esp+30h] [ebp+8h] float v116; // [esp+30h] [ebp+8h] float v117; // [esp+30h] [ebp+8h] float v118; // [esp+30h] [ebp+8h] float v119; // [esp+30h] [ebp+8h] float v120; // [esp+30h] [ebp+8h] float v121; // [esp+30h] [ebp+8h] float v122; // [esp+30h] [ebp+8h] v3 = *this; v4 = *((float *)this + 140); v5 = a2; v6 = *((float *)this + 11) * v4; v7 = *((float *)this + 12) * v4; v8 = v4 * *((float *)this + 13); v100 = v6 - **this; v102 = v7 - (*this)[1]; v104 = v8 - (*this)[2]; v9 = *a2 + v100; v10 = v102 + a2[1]; v11 = v104 + a2[2]; v12 = v11; v13 = v10; v14 = v11 * *((float *)this + 52) - *((float *)this + 53) * v10; v15 = v9; v16 = *((float *)this + 53) * v9 - v11 * *((float *)this + 51); v17 = v10 * *((float *)this + 51) - v9 * *((float *)this + 52); v112 = v16 * *((float *)this + 55) + *((float *)this + 54) * v14 + v17 * *((float *)this + 56); v113 = -v112; if ( v113 < 0.0 || (v18 = v12 * *((float *)this + 49) - v13 * *((float *)this + 50), v19 = *((float *)this + 50) * v15 - *((float *)this + 48) * v12, v20 = *((float *)this + 48) * v13 - *((float *)this + 49) * v15, v110 = v19 * *((float *)this + 55) + *((float *)this + 54) * v18 + v20 * *((float *)this + 56), v110 < 0.0) || *((float *)this + 66) < v110 + v113 ) { v105 = v100 + *a3; v107 = v102 + a3[1]; v27 = v104 + a3[2]; v28 = v27; v29 = v27 * *((float *)this + 52) - *((float *)this + 53) * v107; v30 = *((float *)this + 53) * v105 - v27 * *((float *)this + 51); v31 = v107 * *((float *)this + 51) - v105 * *((float *)this + 52); v114 = v30 * *((float *)this + 55) + *((float *)this + 54) * v29 + v31 * *((float *)this + 56); v115 = -v114; if ( v115 >= 0.0 ) { v32 = v28 * *((float *)this + 49) - v107 * *((float *)this + 50); v33 = v105 * *((float *)this + 50) - v28 * *((float *)this + 48); v34 = *((float *)this + 48) * v107 - v105 * *((float *)this + 49); v111 = v33 * *((float *)this + 55) + *((float *)this + 54) * v32 + v34 * *((float *)this + 56); if ( v111 >= 0.0 && *((float *)this + 66) >= v111 + v115 ) { v35 = this[7]; v36 = *((float *)this + 140); v37 = *v35 * v36; v38 = v35[1] * v36; v39 = v36 * v35[2]; v40 = v37 + *a3; v41 = v38 + a3[1]; result = v41; v43 = v39 + a3[2]; *((float *)this + 141) = v40; *((float *)this + 142) = v41; v44 = v43; *((float *)this + 143) = v44; return result; } } v45 = flt_ABD1D4; if ( flt_ABD1D4 >= (double)*((float *)this + 106) ) { if ( -v45 > *((float *)this + 106) ) { v118 = *((float *)this + 94) * v13 + v15 * *((float *)this + 93) + *((float *)this + 95) * v12; v61 = v118; if ( v118 >= (double)*((float *)this + 106) && v61 <= 0.0 ) { v62 = this[3]; v119 = v61 / *((float *)this + 106); v106 = *((float *)this + 48) * v119; v108 = *((float *)this + 49) * v119; v109 = v119 * *((float *)this + 50); v63 = *((float *)this + 140); v64 = *v62 * v63; v98 = v62[1] * v63; v99 = v63 * v62[2]; v65 = *v3 + v64; goto LABEL_17; } } } else { v116 = *((float *)this + 94) * v13 + v15 * *((float *)this + 93) + *((float *)this + 95) * v12; v46 = v116; if ( v116 >= 0.0 && *((float *)this + 106) >= v46 ) { v47 = this[3]; v117 = v46 / *((float *)this + 106); v48 = *((float *)this + 48) * v117; v49 = *((float *)this + 49) * v117; v50 = v117 * *((float *)this + 50); v51 = *((float *)this + 140); v52 = *v47 * v51; v53 = v47[1] * v51; v54 = v51 * v47[2]; v55 = v52 + *v3; v56 = v3[1] + v53; v57 = v3[2] + v54; v58 = v55 + v48; *((float *)this + 141) = v58; v59 = v56 + v49; *((float *)this + 142) = v59; v60 = v57 + v50; result = v60; *((float *)this + 143) = v60; return result; } } if ( *((float *)this + 107) > v45 ) { v72 = v12 * *((float *)this + 95) + v13 * *((float *)this + 94) + v15 * *((float *)this + 93); v73 = v72; if ( v72 >= 0.0 && *((float *)this + 107) >= v73 ) { v74 = this[3]; v75 = v73 / *((float *)this + 107); v76 = v75 * *((float *)this + 51); v77 = v75 * *((float *)this + 52); v78 = v75 * *((float *)this + 53); v120 = *((float *)this + 140); v79 = v120 * *v74; v80 = v74[1] * v120; v81 = v120 * v74[2]; v82 = v79 + *v3; v83 = v3[1] + v80; v84 = v3[2] + v81; v85 = v82 + v76; *((float *)this + 141) = v85; v86 = v83 + v77; *((float *)this + 142) = v86; v87 = v84 + v78; result = v87; *((float *)this + 143) = v87; return result; } goto LABEL_26; } if ( -v45 <= *((float *)this + 107) || (v88 = v15 * *((float *)this + 93) + v13 * *((float *)this + 94) + v12 * *((float *)this + 95), v89 = v88, v88 < (double)*((float *)this + 107)) || v89 > 0.0 ) { LABEL_26: v93 = this[3]; v122 = *((float *)this + 140); v94 = v122 * *v93; v95 = v93[1] * v122; v96 = v122 * v93[2]; v101 = *v3 + v94; v103 = v3[1] + v95; v26 = v3[2] + v96; goto LABEL_27; } v90 = this[3]; v91 = v89 / *((float *)this + 107); v106 = v91 * *((float *)this + 51); v108 = v91 * *((float *)this + 52); v109 = v91 * *((float *)this + 53); v121 = *((float *)this + 140); v92 = v121 * *v90; v98 = v90[1] * v121; v99 = v121 * v90[2]; v65 = v92 + *v3; LABEL_17: v66 = v65; v67 = v3[1] + v98; v68 = v3[2] + v99; v69 = v66 + v106; *((float *)this + 141) = v69; v70 = v67 + v108; result = v70; *((float *)this + 142) = v70; v71 = v68 + v109; *((float *)this + 143) = v71; return result; } v21 = this[7]; v22 = *((float *)this + 140); v23 = *v21 * v22; v24 = v21[1] * v22; v25 = v22 * v21[2]; v101 = *v5 + v23; v103 = v24 + v5[1]; v26 = v25 + v5[2]; LABEL_27: v97 = v26; *((float *)this + 141) = v101; result = v97; *((float *)this + 142) = v103; *((float *)this + 143) = v97; return result; } // ABD1D4: using guessed type float flt_ABD1D4; //----- (008525C0) -------------------------------------------------------- float __userpurge sub_8525C0@(void *this@) { float v1; // ST24_4 float v2; // ST28_4 long double v3; // st6 long double v4; // st5 float *v5; // eax float v6; // ST24_4 float v7; // ST0C_4 float v8; // ST10_4 double v9; // st7 float *v10; // eax float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 double v14; // st7 float v15; // ST20_4 float result; // eax double v17; // st4 double v18; // st3 float *v19; // eax float v20; // ST24_4 float v21; // ST0C_4 float v22; // ST10_4 double v23; // st7 float *v24; // eax float v25; // ST14_4 float v26; // ST18_4 float v27; // ST1C_4 double v28; // st7 float v29; // ST20_4 float v30; // ST24_4 double v31; // st2 long double v32; // st1 double v33; // st7 double v34; // st1 double v35; // st4 float *v36; // eax double v37; // st5 float v38; // ST0C_4 float v39; // ST10_4 double v40; // st7 float *v41; // eax float v42; // ST14_4 float v43; // ST18_4 float v44; // ST1C_4 double v45; // st7 float v46; // ST20_4 double v47; // rtt double v48; // st1 double v49; // st3 double v50; // rt1 double v51; // st3 double v52; // st4 double v53; // st2 float *v54; // eax float v55; // ST34_4 float v56; // ST24_4 float v57; // ST00_4 float v58; // ST04_4 float v59; // ST0C_4 float v60; // ST10_4 float v61; // ST14_4 float v62; // ST18_4 float v63; // ST1C_4 float v64; // ST20_4 double v65; // st7 double v66; // rt1 double v67; // st7 float *v68; // eax double v69; // st7 double v70; // st6 double v71; // st7 double v72; // st6 double v73; // st7 float *v74; // eax double v75; // st7 float v76; // ST0C_4 float v77; // ST10_4 float v78; // ST14_4 float v79; // ST00_4 float v80; // ST04_4 float v81; // ST08_4 float v82; // ST30_4 __int16 v83; // fps bool v84; // c0 char v85; // c2 bool v86; // c3 char v87; // ah double v88; // st7 __int16 v89; // fps double v90; // st6 bool v91; // c0 char v92; // c2 bool v93; // c3 double v94; // st7 float *v95; // eax float v96; // ST34_4 float v97; // ST24_4 double v98; // st7 float v99; // eax double v100; // st7 float v101; // ST0C_4 float v102; // ST10_4 float v103; // ST14_4 float v104; // ST00_4 float v105; // ST04_4 float v106; // ST08_4 double v107; // st2 double v108; // rt2 double v109; // st1 double v110; // st5 float *v111; // eax double v112; // st7 double v113; // st6 float v114; // ST30_4 double v115; // st2 float *v116; // eax float v117; // ST24_4 double v118; // st6 double v119; // st7 float v120; // ST30_4 double v121; // st7 float *v122; // eax float v123; // ST30_4 float v124; // ST24_4 double v125; // rt0 double v126; // st2 double v127; // st4 double v128; // st4 float v129; // ST30_4 double v130; // st2 float v131; // ST2C_4 __int16 v132; // fps bool v133; // c0 char v134; // c2 bool v135; // c3 char v136; // ah bool v137; // c0 bool v138; // c3 __int16 v139; // fps double v140; // st6 bool v141; // c0 char v142; // c2 bool v143; // c3 double v144; // st2 double v145; // rt1 double v146; // rt2 double v147; // st2 double v148; // st7 double v149; // rtt long double v150; // st2 double v151; // st6 double v152; // rt0 long double v153; // st2 float v154; // ST30_4 double v155; // st2 double v156; // rt1 long double v157; // st2 float v158; // ST2C_4 double v159; // st6 float *v160; // eax double v161; // st7 double v162; // st6 double v163; // st7 float v164; // ST00_4 double v165; // st7 double v166; // st6 double v167; // st5 long double v168; // st4 double v169; // st3 float v170; // ST30_4 double v171; // st2 float *v172; // eax float v173; // ST34_4 float v174; // ST24_4 double v175; // st7 float v176; // ST00_4 double v177; // st4 long double v178; // st6 double v179; // st3 float v180; // ST30_4 double v181; // st2 float v182; // ST24_4 float v183; // ST24_4 double v184; // st3 double v185; // st3 double v186; // st6 double v187; // st2 long double v188; // st2 float *v189; // eax float v190; // ST34_4 float v191; // ST24_4 float v192; // ST18_4 float v193; // ST1C_4 float v194; // ST20_4 float v195; // ST00_4 float v196; // ST04_4 float v197; // ST08_4 float v198; // ST0C_4 float v199; // ST10_4 float v200; // ST14_4 float v201; // ST00_4 float v202; // ST04_4 float v203; // ST08_4 double v204; // st3 double v205; // rt1 double v206; // rt2 double v207; // st3 double v208; // st5 float v209; // ST30_4 bool v210; // c0 double v211; // st7 float v212; // ST24_4 double v213; // rt0 long double v214; // st3 long double v215; // rt2 float v216; // ST30_4 bool v217; // c0 bool v218; // c3 double v219; // st7 float *v220; // eax float v221; // ST30_4 float v222; // ST24_4 double v223; // st7 float v224; // ST00_4 float v225; // ST24_4 double v226; // rt0 double v227; // st5 double v228; // st6 double v229; // rt1 double v230; // st5 double v231; // st7 bool v232; // c0 float v233; // ST24_4 float *v234; // eax double v235; // st5 float v236; // ST00_4 float v237; // ST04_4 float v238; // ST14_4 float v239; // [esp+0h] [ebp-38h] float v240; // [esp+0h] [ebp-38h] float v241; // [esp+4h] [ebp-34h] float v242; // [esp+4h] [ebp-34h] float v243; // [esp+8h] [ebp-30h] float v244; // [esp+8h] [ebp-30h] float v245; // [esp+8h] [ebp-30h] float v246; // [esp+Ch] [ebp-2Ch] double v247; // [esp+10h] [ebp-28h] float v248; // [esp+10h] [ebp-28h] float v249; // [esp+18h] [ebp-20h] float v250; // [esp+18h] [ebp-20h] double v251; // [esp+1Ch] [ebp-1Ch] float v252; // [esp+1Ch] [ebp-1Ch] float v253; // [esp+1Ch] [ebp-1Ch] float v254; // [esp+20h] [ebp-18h] float v255; // [esp+20h] [ebp-18h] float v256; // [esp+24h] [ebp-14h] float v257; // [esp+28h] [ebp-10h] float v258; // [esp+28h] [ebp-10h] float v259; // [esp+2Ch] [ebp-Ch] float v260; // [esp+2Ch] [ebp-Ch] float v261; // [esp+30h] [ebp-8h] float v262; // [esp+30h] [ebp-8h] float v263; // [esp+30h] [ebp-8h] float v264; // [esp+30h] [ebp-8h] float v265; // [esp+30h] [ebp-8h] float v266; // [esp+30h] [ebp-8h] float v267; // [esp+30h] [ebp-8h] float v268; // [esp+30h] [ebp-8h] float v269; // [esp+30h] [ebp-8h] float v270; // [esp+30h] [ebp-8h] float v271; // [esp+30h] [ebp-8h] float v272; // [esp+30h] [ebp-8h] float v273; // [esp+30h] [ebp-8h] float v274; // [esp+30h] [ebp-8h] float v275; // [esp+30h] [ebp-8h] float v276; // [esp+34h] [ebp-4h] float v277; // [esp+34h] [ebp-4h] float v278; // [esp+34h] [ebp-4h] float v279; // [esp+34h] [ebp-4h] float v280; // [esp+34h] [ebp-4h] float v281; // [esp+34h] [ebp-4h] float v282; // [esp+34h] [ebp-4h] float v283; // [esp+34h] [ebp-4h] float v284; // [esp+34h] [ebp-4h] float v285; // [esp+34h] [ebp-4h] float v286; // [esp+34h] [ebp-4h] float v287; // [esp+34h] [ebp-4h] float v288; // [esp+34h] [ebp-4h] float v289; // [esp+34h] [ebp-4h] v1 = -(*((float *)this + 76) * *((float *)this + 140) + *((float *)this + 73)); v2 = *((float *)this + 75) * *((float *)this + 140) + *((float *)this + 72); v3 = v1; v4 = v2; if ( v1 >= 0.0 && v4 >= 0.0 && *((float *)this + 66) >= v4 + v3 ) { v5 = (float *)*((_DWORD *)this + 7); v6 = *((float *)this + 140); v7 = v6 * *v5; v8 = v5[1] * v6; v9 = v6 * v5[2]; v10 = (float *)*((_DWORD *)this + 4); v11 = v9; v12 = v7 + *v10; v13 = v10[1] + v8; v14 = v10[2] + v11; *((float *)this + 141) = v12; *((float *)this + 142) = v13; v15 = v14; result = v15; *((float *)this + 143) = v15; return result; } v257 = -*((float *)this + 81); v259 = *((float *)this + 78); v17 = v257; v251 = v257 + v3; v276 = v251; if ( v276 < 0.0 || (v261 = v259 + v4, v261 < 0.0) ) { v18 = v259; } else { v18 = v259; if ( *((float *)this + 66) >= v276 + v261 ) { v19 = (float *)*((_DWORD *)this + 7); v20 = *((float *)this + 140); v21 = v20 * *v19; v22 = v19[1] * v20; v23 = v20 * v19[2]; v24 = (float *)*((_DWORD *)this + 5); v25 = v23; v26 = v21 + *v24; v27 = v24[1] + v22; v28 = v24[2]; result = v27; *((float *)this + 141) = v26; *((float *)this + 142) = v27; v29 = v28 + v25; *((float *)this + 143) = v29; return result; } } v30 = -*((float *)this + 82); v262 = *((float *)this + 79); v31 = v30; v32 = v30 + v3; v247 = v32; v256 = v32; v33 = v31; v34 = v262; if ( v256 >= 0.0 ) { v35 = v262; v263 = v34 + v4; if ( v263 >= 0.0 && *((float *)this + 66) >= v263 + v256 ) { v36 = (float *)*((_DWORD *)this + 7); v37 = *((float *)this + 140); v38 = *v36 * v37; v39 = v36[1] * v37; v40 = v37 * v36[2]; v41 = (float *)*((_DWORD *)this + 6); v42 = v40; v43 = v38 + *v41; v44 = v41[1] + v39; v45 = v41[2] + v42; *((float *)this + 141) = v43; *((float *)this + 142) = v44; v46 = v45; result = v46; *((float *)this + 143) = v46; return result; } v34 = v35; v17 = v257; } v47 = v34; v48 = v18; v49 = v47; if ( v48 <= 0.0 ) { if ( v48 >= 0.0 ) { v82 = fabs(v4); if ( flt_ABD1D4 >= (double)v82 ) { if ( v257 <= 0.0 ) { v88 = v3; if ( v257 >= 0.0 ) goto LABEL_36; v90 = *((float *)this + 66); v91 = v90 < v88; v92 = 0; v93 = v90 == v88; v87 = HIBYTE(v89); } else { v84 = v3 < 0.0; v85 = 0; v86 = v3 == 0.0; v87 = HIBYTE(v83); v88 = v3; } if ( v87 & 1 ) v88 = v251; v280 = v88; goto LABEL_37; } v107 = v49; v51 = 0.0; v108 = v107; v53 = v48; v52 = v108; } else { v265 = v48 * v3 - v17 * v4; v66 = v49; v51 = 0.0; v52 = v66; if ( v265 > 0.0 ) goto LABEL_41; v53 = v259; v278 = *((float *)this + 66) * v259; if ( v265 >= (double)v278 ) { v67 = v265; goto LABEL_23; } } LABEL_43: v109 = v257; if ( v257 > v51 ) { v266 = v109 * v4 - v53 * v3; if ( v266 >= v51 ) { v281 = *((float *)this + 66) * v257; if ( v281 >= (double)v266 ) { v110 = v266; LABEL_47: v111 = (float *)*((_DWORD *)this + 3); v267 = v110 / v281; v112 = *((float *)this + 140); v113 = v112 * *v111; LABEL_48: v249 = v113; v252 = v111[1] * v112; v254 = v112 * v111[2]; v239 = *((float *)this + 51) * v267; v241 = *((float *)this + 52) * v267; v73 = v267 * *((float *)this + 53); goto LABEL_26; } } LABEL_63: v53 = v259; goto LABEL_64; } if ( v109 < v51 ) { v114 = v109 * v4 - v53 * v3; v115 = v114; if ( v114 <= v51 ) { v282 = *((float *)this + 66) * v257; if ( v282 <= v115 ) { v116 = (float *)*((_DWORD *)this + 3); v268 = v115 / v282; v117 = *((float *)this + 140); v118 = *v116 * v117; v119 = v117; goto LABEL_53; } } goto LABEL_63; } v120 = fabs(v3); if ( flt_ABD1D4 < (double)v120 ) { LABEL_64: v125 = v53; v126 = v52; v127 = v125; if ( v126 > v51 ) { v128 = v126; v129 = v126 * v3 - v33 * v4; v130 = v129; if ( v129 >= v51 ) { v283 = *((float *)this + 66) * v128; if ( v283 >= v130 ) { v94 = v130 / v283; goto LABEL_38; } } goto LABEL_80; } if ( v126 < v51 ) { v128 = v126; v270 = v126 * v3 - v33 * v4; if ( v270 > v51 || (v278 = *((float *)this + 66) * v126, v278 > (double)v270) ) { LABEL_80: v144 = v259; goto LABEL_82; } v67 = v270; LABEL_23: v68 = (float *)*((_DWORD *)this + 3); v279 = v67 / v278; v69 = *((float *)this + 140); v70 = v69 * *v68; LABEL_24: v249 = v70; v252 = v68[1] * v69; v254 = v69 * v68[2]; v71 = *((float *)this + 48); v72 = v279; LABEL_25: v239 = v71 * v72; v241 = *((float *)this + 49) * v72; v73 = v72 * *((float *)this + 50); LABEL_26: v74 = *(float **)this; v244 = v73; v75 = v239 + **(float **)this; LABEL_27: v76 = v75; v77 = v74[1] + v241; v78 = v74[2] + v244; v79 = v76 + v249; *((float *)this + 141) = v79; v80 = v77 + v252; *((float *)this + 142) = v80; v81 = v78 + v254; result = v81; *((float *)this + 143) = v81; return result; } v131 = fabs(v4); if ( flt_ABD1D4 < (double)v131 ) { v145 = v126; v144 = v127; v128 = v145; LABEL_82: v146 = v144; v147 = v33; v148 = v146; if ( v147 > v51 ) { v149 = v147; v150 = v147 * v4 - v3 * v128; v151 = v149; v271 = v150; if ( v271 >= v51 ) { v281 = *((float *)this + 66) * v151; if ( v281 >= (double)v271 ) { v110 = v271; goto LABEL_47; } } LABEL_100: v274 = v257 - v151; v260 = v148 - v128; v165 = v51; v258 = v128 + v4; v166 = v260; v167 = v274; v168 = v256; if ( v260 > v51 ) { v169 = v258; v170 = v168 * v166 - v258 * v167; v171 = v170; if ( v170 >= v165 ) { v285 = *((float *)this + 66) * v166; if ( v285 >= v171 ) { v172 = (float *)*((_DWORD *)this + 3); v173 = v171 / v285; v174 = *((float *)this + 140); v250 = *v172 * v174; v253 = v172[1] * v174; v175 = v174 * v172[2]; v99 = *(float *)this; v255 = v175; v176 = *((float *)this + 48) * v173; v242 = *((float *)this + 49) * v173; v245 = v173 * *((float *)this + 50); v100 = **(float **)this + v176; goto LABEL_40; } } LABEL_118: v206 = v169; v207 = v167; v208 = v206; if ( v207 > v165 ) { v209 = v208 * v207 - v166 * v168; v210 = v209 < v165; v211 = v209; if ( !v210 ) { v288 = v207 * *((float *)this + 66); if ( v288 >= v211 ) { v111 = (float *)*((_DWORD *)this + 3); v267 = v211 / v288; v212 = *((float *)this + 140); v113 = *v111 * v212; v112 = v212; goto LABEL_48; } } goto LABEL_138; } if ( v207 < v165 ) { v216 = v208 * v207 - v166 * v168; v217 = v216 < v165; v218 = v216 == v165; v219 = v216; if ( v217 || v218 ) { v289 = v207 * *((float *)this + 66); if ( v289 <= v219 ) { v220 = (float *)*((_DWORD *)this + 3); v221 = v219 / v289; v222 = *((float *)this + 140); v250 = *v220 * v222; v253 = v220[1] * v222; v223 = v222 * v220[2]; v99 = *(float *)this; v255 = v223; v224 = *((float *)this + 51) * v221; v242 = *((float *)this + 52) * v221; v245 = v221 * *((float *)this + 53); v100 = **(float **)this + v224; goto LABEL_40; } } LABEL_138: v234 = (float *)*((_DWORD *)this + 3); v235 = *((float *)this + 140); v236 = *v234 * v235; v237 = v234[1] * v235; v243 = v235 * v234[2]; v246 = **(float **)this + v236; v248 = *(float *)(*(_DWORD *)this + 4) + v237; v65 = *(float *)(*(_DWORD *)this + 8); goto LABEL_139; } v225 = fabs(v168); if ( flt_ABD1D4 < (double)v225 ) goto LABEL_138; v226 = v208; v227 = v166; v228 = v226; if ( v227 <= v165 ) { v232 = v227 < v165; v231 = v227; if ( !v232 ) { v275 = v228; goto LABEL_137; } if ( *((float *)this + 66) >= v228 ) goto LABEL_132; } else { v229 = v227; v230 = v165; v231 = v229; if ( v230 <= v228 ) { LABEL_132: v275 = v228; LABEL_137: v160 = (float *)*((_DWORD *)this + 3); v273 = v275 / *((float *)this + 66); v233 = *((float *)this + 140); v162 = *v160 * v233; v161 = v233; goto LABEL_99; } } v275 = v231 + v228; goto LABEL_137; } v177 = v260; v178 = v256; if ( v260 >= v51 ) { v179 = v258; v183 = fabs(v258); if ( flt_ABD1D4 >= (double)v183 ) { v184 = v274; if ( v274 <= v165 ) { if ( v184 >= v165 ) { v185 = v178; v186 = v274; v287 = v185; } else { v188 = v178; if ( *((float *)this + 66) < v178 ) v188 = v178 + v184; v287 = v188; v185 = v178; v186 = v274; } } else { v185 = v178; v186 = v274; v187 = v185; if ( v185 < v165 ) v187 = v185 + v186; v287 = v187; } v189 = (float *)*((_DWORD *)this + 3); v190 = v287 / *((float *)this + 66); v191 = *((float *)this + 140); v192 = *v189 * v191; v193 = v189[1] * v191; v194 = v191 * v189[2]; v195 = *((float *)this + 48) * v190; v196 = *((float *)this + 49) * v190; v197 = v190 * *((float *)this + 50); v198 = v195 + **(float **)this; v199 = *(float *)(*(_DWORD *)this + 4) + v196; v200 = *(float *)(*(_DWORD *)this + 8) + v197; v201 = v198 + v192; *((float *)this + 141) = v201; v202 = v199 + v193; *((float *)this + 142) = v202; v203 = v200 + v194; v168 = v185; *((float *)this + 143) = v203; v204 = v186; v166 = v260; v205 = v204; v169 = v258; v167 = v205; goto LABEL_118; } } else { v179 = v258; v180 = v178 * v177 - v258 * v167; v181 = v180; if ( v180 <= v165 ) { v286 = *((float *)this + 66) * v177; if ( v286 <= v181 ) { v68 = (float *)*((_DWORD *)this + 3); v279 = v181 / v286; v182 = *((float *)this + 140); v70 = *v68 * v182; v69 = v182; goto LABEL_24; } } } v213 = v179; v214 = v178; v166 = v260; v215 = v214; v169 = v213; v168 = v215; goto LABEL_118; } if ( v147 < v51 ) { v152 = v147; v153 = v147 * v4 - v3 * v128; v151 = v152; v154 = v153; v155 = v154; if ( v154 > v51 ) goto LABEL_100; v284 = *((float *)this + 66) * v151; if ( v284 > v155 ) goto LABEL_100; v116 = (float *)*((_DWORD *)this + 3); v268 = v155 / v284; v119 = *((float *)this + 140); v118 = v119 * *v116; LABEL_53: v250 = v118; v253 = v116[1] * v119; v255 = v119 * v116[2]; v240 = *((float *)this + 51) * v268; v242 = *((float *)this + 52) * v268; v98 = v268 * *((float *)this + 53); goto LABEL_39; } v156 = v147; v157 = v3; v151 = v156; v158 = fabs(v157); if ( flt_ABD1D4 < (double)v158 ) goto LABEL_100; if ( v128 <= v51 ) { v159 = v128; if ( v128 >= v51 ) { v272 = v4; goto LABEL_98; } if ( *((float *)this + 66) >= v4 ) goto LABEL_93; } else { v159 = v128; if ( v51 <= v4 ) { LABEL_93: v272 = v4; LABEL_98: v160 = (float *)*((_DWORD *)this + 3); v273 = v272 / *((float *)this + 66); v161 = *((float *)this + 140); v162 = v161 * *v160; LABEL_99: v249 = v162; v252 = v160[1] * v161; v163 = v161 * v160[2]; v74 = *(float **)this; v254 = v163; v164 = *((float *)this + 48) * v273; v241 = *((float *)this + 49) * v273; v244 = v273 * *((float *)this + 50); v75 = **(float **)this + v164; goto LABEL_27; } } v272 = v4 + v159; goto LABEL_98; } if ( v51 < v33 ) { v133 = v3 < v51; v134 = 0; v135 = v3 == v51; v136 = HIBYTE(v132); v88 = v3; LABEL_77: if ( v136 & 1 ) v88 = v247; v280 = v88; goto LABEL_37; } v137 = v51 < v33; v138 = v51 == v33; v88 = v3; if ( !v137 && !v138 ) { v140 = *((float *)this + 66); v141 = v140 < v88; v142 = 0; v143 = v140 == v88; v136 = HIBYTE(v139); goto LABEL_77; } LABEL_36: v280 = v88; LABEL_37: v94 = v280 / *((float *)this + 66); LABEL_38: v95 = (float *)*((_DWORD *)this + 3); v96 = v94; v97 = *((float *)this + 140); v250 = v97 * *v95; v253 = v95[1] * v97; v255 = v97 * v95[2]; v240 = *((float *)this + 48) * v96; v242 = *((float *)this + 49) * v96; v98 = v96 * *((float *)this + 50); LABEL_39: v99 = *(float *)this; v245 = v98; v100 = v240 + **(float **)this; LABEL_40: v101 = v100; v102 = *(float *)(LODWORD(v99) + 4) + v242; v103 = *(float *)(LODWORD(v99) + 8) + v245; v104 = v101 + v250; *((float *)this + 141) = v104; v105 = v102 + v253; result = v105; *((float *)this + 142) = v105; v106 = v103 + v255; *((float *)this + 143) = v106; return result; } if ( v53 <= v51 ) { v121 = v53; if ( v53 >= v51 ) { v269 = v4; goto LABEL_62; } if ( *((float *)this + 66) >= v4 ) goto LABEL_57; } else { v121 = v53; if ( v51 <= v4 ) { LABEL_57: v269 = v4; LABEL_62: v122 = (float *)*((_DWORD *)this + 3); v123 = v269 / *((float *)this + 66); v124 = *((float *)this + 140); v249 = v124 * *v122; v252 = v122[1] * v124; v254 = v124 * v122[2]; v71 = *((float *)this + 48); v72 = v123; goto LABEL_25; } } v269 = v121 + v4; goto LABEL_62; } v264 = v48 * v3 - v17 * v4; v50 = v49; v51 = 0.0; v52 = v50; if ( v264 < 0.0 ) { LABEL_41: v53 = v259; goto LABEL_43; } v53 = v259; v277 = *((float *)this + 66) * v259; if ( v277 < (double)v264 ) goto LABEL_43; v54 = (float *)*((_DWORD *)this + 3); v55 = v264 / v277; v56 = *((float *)this + 140); v57 = v56 * *v54; v58 = v54[1] * v56; v243 = v56 * v54[2]; v59 = *((float *)this + 48) * v55; v60 = *((float *)this + 49) * v55; v61 = v55 * *((float *)this + 50); v62 = v59 + **(float **)this; v63 = *(float *)(*(_DWORD *)this + 4) + v60; v64 = *(float *)(*(_DWORD *)this + 8) + v61; v246 = v62 + v57; v248 = v63 + v58; v65 = v64; LABEL_139: result = v248; *((float *)this + 141) = v246; v238 = v65 + v243; *((float *)this + 142) = v248; *((float *)this + 143) = v238; return result; } // ABD1D4: using guessed type float flt_ABD1D4; //----- (00853430) -------------------------------------------------------- void __thiscall sub_853430(int this) { float v1; // ST28_4 float *v2; // eax float v3; // ST1C_4 float v4; // ST20_4 double v5; // st7 float *v6; // eax float v7; // ST24_4 float v8; // ST10_4 float v9; // ST14_4 float v10; // ST18_4 float v11; // ST1C_4 float v12; // ST20_4 float v13; // ST24_4 float *v14; // edx float *v15; // eax float v16; // ST10_4 float v17; // ST14_4 double v18; // st7 float *v19; // eax float v20; // ST18_4 float v21; // ST1C_4 float v22; // ST20_4 float v23; // ST24_4 float v24; // ST10_4 float v25; // ST14_4 float v26; // ST18_4 float *v27; // eax float v28; // ST28_4 float v29; // ST10_4 double v30; // st7 float *v31; // eax double v32; // st7 double v33; // st7 __int16 v34; // fps double v35; // st6 bool v36; // c0 char v37; // c2 bool v38; // c3 char v39; // ah double v40; // st7 double v41; // st6 bool v42; // c0 bool v43; // c3 float *v44; // eax double v45; // st5 float v46; // ST10_4 double v47; // st7 float *v48; // eax double v49; // st5 double v50; // st7 int v51; // eax float *v52; // eax double v53; // st5 float v54; // ST10_4 double v55; // st7 double v56; // st7 __int16 v57; // fps double v58; // st6 bool v59; // c0 char v60; // c2 bool v61; // c3 char v62; // ah double v63; // st7 double v64; // st6 bool v65; // c0 bool v66; // c3 float *v67; // eax double v68; // st7 double v69; // st6 float v70; // ST28_4 float v71; // ST1C_4 float v72; // ST20_4 double v73; // st7 float v74; // ST24_4 float v75; // [esp+0h] [ebp-1Ch] float v76; // [esp+4h] [ebp-18h] float v77; // [esp+8h] [ebp-14h] if ( !*(_DWORD *)(this + 504) ) { *(float *)(this + 264) = *(float *)(this + 220) * *(float *)(this + 220) + *(float *)(this + 216) * *(float *)(this + 216) + *(float *)(this + 224) * *(float *)(this + 224); v1 = *(float *)(this + 376) * *(float *)(this + 376) + *(float *)(this + 372) * *(float *)(this + 372) + *(float *)(this + 380) * *(float *)(this + 380); *(float *)(this + 420) = v1; if ( *(float *)(this + 264) > (double)v1 ) { v14 = *(float **)(this + 16); v15 = *(float **)(this + 20); v16 = *v14 + *v15; v17 = v15[1] + v14[1]; v18 = v15[2]; v19 = *(float **)(this + 24); v20 = v18 + v14[2]; v21 = *v19 + v16; v22 = v19[1] + v17; v23 = v19[2] + v20; v24 = v21 * 0.3333333432674408; *(float *)(this + 564) = v24; v25 = v22 * 0.3333333432674408; *(float *)(this + 568) = v25; v26 = 0.3333333432674408 * v23; *(float *)(this + 572) = v26; } else { v2 = *(float **)(this + 4); v3 = *v2 + **(float **)this; v4 = v2[1] + *(float *)(*(_DWORD *)this + 4); v5 = v2[2]; v6 = *(float **)(this + 8); v7 = v5 + *(float *)(*(_DWORD *)this + 8); v8 = *v6 + v3; v9 = v6[1] + v4; v10 = v6[2] + v7; v11 = v8 * 0.3333333432674408; *(float *)(this + 564) = v11; v12 = v9 * 0.3333333432674408; *(float *)(this + 568) = v12; v13 = 0.3333333432674408 * v10; *(float *)(this + 572) = v13; } return; } if ( *(float *)(this + 516) >= (double)*(float *)(this + 520) ) { if ( *(float *)(this + 508) <= (double)*(float *)(this + 528) ) return; if ( *(float *)(this + 512) > (double)*(float *)(this + 508) ) { v52 = *(float **)(this + 12); v53 = *(float *)(this + 560); v54 = *v52 * v53; v76 = v52[1] * v53; v55 = v53 * v52[2]; v31 = *(float **)(this + 4 * *(_DWORD *)(this + 532)); v77 = v55; v32 = *v31 + v54; goto LABEL_31; } v56 = *(float *)(this + 512); v58 = *(float *)(this + 516); v59 = v58 < v56; v60 = 0; v61 = v58 == v56; v62 = HIBYTE(v57); v63 = *(float *)(this + 524); v64 = *(float *)(this + 528); v65 = v64 < v63; v66 = v64 == v63; if ( v62 & 0x41 ) { if ( v65 || v66 ) { if ( *(float *)(this + 524) > (double)*(float *)(this + 520) ) { sub_851E20( (float **)this, *(float **)(this + 4 * *(_DWORD *)(this + 548) + 16), *(float **)(this + 4 * *(_DWORD *)(this + 552) + 16)); return; } goto LABEL_34; } v67 = *(float **)(this + 28); v70 = *(float *)(this + 560); v69 = *v67 * v70; v68 = v70; } else { if ( v65 || v66 ) { if ( *(float *)(this + 524) <= (double)*(float *)(this + 520) ) sub_851680( this, *(float **)(this + 4 * *(_DWORD *)(this + 532)), *(float **)(this + 4 * *(_DWORD *)(this + 536))); else sub_851340( this, *(float **)(this + 4 * *(_DWORD *)(this + 532)), *(float **)(this + 4 * *(_DWORD *)(this + 536)), *(float **)(this + 4 * *(_DWORD *)(this + 548) + 16), *(float **)(this + 4 * *(_DWORD *)(this + 552) + 16)); return; } v67 = *(float **)(this + 28); v68 = *(float *)(this + 560); v69 = v68 * *v67; } v75 = v69; v76 = v67[1] * v68; v50 = v68 * v67[2]; v51 = *(_DWORD *)(this + 552); goto LABEL_30; } if ( *(float *)(this + 516) > (double)*(float *)(this + 512) ) { v27 = *(float **)(this + 12); v28 = *(float *)(this + 560); v29 = v28 * *v27; v76 = v27[1] * v28; v30 = v28 * v27[2]; v31 = *(float **)(this + 4 * *(_DWORD *)(this + 540)); v77 = v30; v32 = *v31 + v29; LABEL_31: v71 = v32; v72 = v31[1] + v76; v73 = v31[2]; *(float *)(this + 564) = v71; *(float *)(this + 568) = v72; v74 = v73 + v77; *(float *)(this + 572) = v74; return; } v33 = *(float *)(this + 508); v35 = *(float *)(this + 512); v36 = v35 < v33; v37 = 0; v38 = v35 == v33; v39 = HIBYTE(v34); v40 = *(float *)(this + 520); v41 = *(float *)(this + 524); v42 = v41 < v40; v43 = v41 == v40; if ( v39 & 0x41 ) { if ( !v42 && !v43 ) { v48 = *(float **)(this + 28); v49 = *(float *)(this + 560); v75 = *v48 * v49; v76 = v48[1] * v49; v50 = v49 * v48[2]; v51 = *(_DWORD *)(this + 544); LABEL_30: v31 = *(float **)(this + 4 * v51 + 16); v77 = v50; v32 = v75 + *v31; goto LABEL_31; } if ( *(float *)(this + 528) > (double)*(float *)(this + 524) ) { sub_851E20( (float **)this, *(float **)(this + 4 * *(_DWORD *)(this + 544) + 16), *(float **)(this + 4 * *(_DWORD *)(this + 548) + 16)); return; } LABEL_34: sub_8525C0((void *)this); return; } if ( !v42 && !v43 ) { v44 = *(float **)(this + 28); v45 = *(float *)(this + 560); v46 = *v44 * v45; v76 = v44[1] * v45; v47 = v45 * v44[2]; v31 = *(float **)(this + 4 * *(_DWORD *)(this + 544) + 16); v77 = v47; v32 = *v31 + v46; goto LABEL_31; } if ( *(float *)(this + 528) <= (double)*(float *)(this + 524) ) sub_851680(this, *(float **)(this + 4 * *(_DWORD *)(this + 536)), *(float **)(this + 4 * *(_DWORD *)(this + 540))); else sub_851340( this, *(float **)(this + 4 * *(_DWORD *)(this + 536)), *(float **)(this + 4 * *(_DWORD *)(this + 540)), *(float **)(this + 4 * *(_DWORD *)(this + 544) + 16), *(float **)(this + 4 * *(_DWORD *)(this + 548) + 16)); } //----- (00853910) -------------------------------------------------------- char __thiscall sub_853910(float *this, float a2, int a3, int a4, char a5, int a6, int a7) { int v7; // esi float v8; // ST04_4 float v9; // ST08_4 double v10; // st7 double v11; // st6 float v12; // ST0C_4 char result; // al float v14; // ST04_4 float v15; // ST08_4 float v16; // ST0C_4 float v17; // [esp+14h] [ebp+8h] float v18; // [esp+14h] [ebp+8h] float v19; // [esp+14h] [ebp+8h] v7 = (int)this; this[139] = a2; this[140] = 0.0; if ( !sub_84FD50((int)this) || !sub_84FF10(v7) ) return 0; v8 = *(float *)(v7 + 220) * *(float *)(v7 + 380) - *(float *)(v7 + 376) * *(float *)(v7 + 224); v9 = *(float *)(v7 + 372) * *(float *)(v7 + 224) - *(float *)(v7 + 216) * *(float *)(v7 + 380); v10 = *(float *)(v7 + 216) * *(float *)(v7 + 376); v11 = *(float *)(v7 + 220) * *(float *)(v7 + 372); *(float *)(v7 + 56) = v8; *(float *)(v7 + 60) = v9; v12 = v10 - v11; *(float *)(v7 + 64) = v12; v17 = *(float *)(v7 + 60) * *(float *)(v7 + 60) + *(float *)(v7 + 56) * *(float *)(v7 + 56) + *(float *)(v7 + 64) * *(float *)(v7 + 64); *(float *)(v7 + 68) = v17; if ( flt_ABD1D4 < (double)v17 ) { if ( !sub_8500D0((float *)v7) || !sub_850210((float *)v7) || !sub_850350((float *)v7) || !sub_850420((float *)v7) || !sub_850560((float *)v7) || !sub_8506A0((float *)v7) || !sub_850760((float *)v7) || !sub_850840((float *)v7) || !sub_850900((float *)v7) ) { return 0; } goto LABEL_22; } v18 = fabs(*(float *)(v7 + 284)); if ( v18 > (double)flt_ABD1D4 ) { v19 = -*(float *)(v7 + 280) / *(float *)(v7 + 284); v14 = v19 * *(float *)(v7 + 44); v15 = *(float *)(v7 + 48) * v19; v16 = v19 * *(float *)(v7 + 52); *(float *)(v7 + 32) = *(float *)(v7 + 32) + v14; *(float *)(v7 + 36) = *(float *)(v7 + 36) + v15; *(float *)(v7 + 40) = *(float *)(v7 + 40) + v16; *(_DWORD *)(v7 + 44) = dword_BA45C0; *(_DWORD *)(v7 + 48) = dword_BA45C4; *(_DWORD *)(v7 + 52) = dword_BA45C8; } if ( !sub_8509D0(v7) || !sub_850BC0(v7) || !sub_850D80((float *)v7) || !sub_850E70(v7) || !sub_851070(v7) ) return 0; result = sub_851240((float *)v7); if ( result ) { LABEL_22: sub_853430(v7); *(float *)a3 = *(float *)(v7 + 560); *(_DWORD *)a4 = *(_DWORD *)(v7 + 564); *(_DWORD *)(a4 + 4) = *(_DWORD *)(v7 + 568); *(_DWORD *)(a4 + 8) = *(_DWORD *)(v7 + 572); if ( a5 ) { *(_DWORD *)a6 = *(_DWORD *)(v7 + 216); *(_DWORD *)(a6 + 4) = *(_DWORD *)(v7 + 220); *(_DWORD *)(a6 + 8) = *(_DWORD *)(v7 + 224); sub_4430B0((float *)a6); *(_DWORD *)a7 = *(_DWORD *)(v7 + 372); *(_DWORD *)(a7 + 4) = *(_DWORD *)(v7 + 376); *(_DWORD *)(a7 + 8) = *(_DWORD *)(v7 + 380); sub_4430B0((float *)a7); } result = 1; } return result; } // ABD1D4: using guessed type float flt_ABD1D4; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00853BB0) -------------------------------------------------------- int __thiscall sub_853BB0(float *this, int a2, float a3) { int result; // eax float v4; // ST00_4 float v5; // ST04_4 float v6; // ST08_4 result = a2; v4 = this[3] * a3; v5 = this[4] * a3; v6 = a3 * this[5]; *(float *)a2 = *this + v4; *(float *)(a2 + 4) = this[1] + v5; *(float *)(a2 + 8) = this[2] + v6; return result; } //----- (00853C00) -------------------------------------------------------- BOOL __thiscall sub_853C00(float *this, float *a2) { return *a2 == *this && a2[1] == this[1] && a2[2] == this[2] && a2[3] == this[3] && a2[4] == this[4] && a2[5] == this[5]; } //----- (00853C70) -------------------------------------------------------- double __cdecl sub_853C70(float *a1, float *a2, float *a3, float *a4) { float *v4; // ecx float *v5; // edx double v6; // st6 double v7; // st7 double v8; // st5 double v9; // st6 double v10; // st4 double v11; // st3 double v12; // st2 double result; // st7 double v14; // st3 double v15; // st2 double v16; // st1 double v17; // st2 double v18; // st7 double v19; // st2 double v20; // st2 double v21; // st7 double v22; // st7 int v23; // [esp+0h] [ebp-24h] int v24; // [esp+4h] [ebp-20h] int v25; // [esp+8h] [ebp-1Ch] float v26; // [esp+Ch] [ebp-18h] double v27; // [esp+10h] [ebp-14h] float v28; // [esp+18h] [ebp-Ch] float v29; // [esp+1Ch] [ebp-8h] float v30; // [esp+20h] [ebp-4h] float v31; // [esp+2Ch] [ebp+8h] float v32; // [esp+2Ch] [ebp+8h] float v33; // [esp+2Ch] [ebp+8h] float v34; // [esp+2Ch] [ebp+8h] float v35; // [esp+2Ch] [ebp+8h] float v36; // [esp+2Ch] [ebp+8h] float v37; // [esp+2Ch] [ebp+8h] float v38; // [esp+2Ch] [ebp+8h] float v39; // [esp+2Ch] [ebp+8h] float v40; // [esp+2Ch] [ebp+8h] float v41; // [esp+2Ch] [ebp+8h] float v42; // [esp+2Ch] [ebp+8h] float v43; // [esp+2Ch] [ebp+8h] float v44; // [esp+2Ch] [ebp+8h] float v45; // [esp+2Ch] [ebp+8h] float v46; // [esp+2Ch] [ebp+8h] float v47; // [esp+2Ch] [ebp+8h] float v48; // [esp+2Ch] [ebp+8h] float v49; // [esp+2Ch] [ebp+8h] float v50; // [esp+2Ch] [ebp+8h] float v51; // [esp+2Ch] [ebp+8h] float v52; // [esp+2Ch] [ebp+8h] float v53; // [esp+2Ch] [ebp+8h] float v54; // [esp+2Ch] [ebp+8h] float v55; // [esp+2Ch] [ebp+8h] float v56; // [esp+2Ch] [ebp+8h] float v57; // [esp+2Ch] [ebp+8h] float v58; // [esp+2Ch] [ebp+8h] float v59; // [esp+2Ch] [ebp+8h] float v60; // [esp+30h] [ebp+Ch] float v61; // [esp+30h] [ebp+Ch] float v62; // [esp+30h] [ebp+Ch] float v63; // [esp+30h] [ebp+Ch] float v64; // [esp+30h] [ebp+Ch] float v65; // [esp+30h] [ebp+Ch] float v66; // [esp+30h] [ebp+Ch] float v67; // [esp+30h] [ebp+Ch] float v68; // [esp+30h] [ebp+Ch] float v69; // [esp+30h] [ebp+Ch] float v70; // [esp+30h] [ebp+Ch] float v71; // [esp+30h] [ebp+Ch] float v72; // [esp+30h] [ebp+Ch] float v73; // [esp+30h] [ebp+Ch] float v74; // [esp+30h] [ebp+Ch] float v75; // [esp+30h] [ebp+Ch] float v76; // [esp+30h] [ebp+Ch] float v77; // [esp+30h] [ebp+Ch] float v78; // [esp+30h] [ebp+Ch] float v79; // [esp+30h] [ebp+Ch] float v80; // [esp+30h] [ebp+Ch] float v81; // [esp+30h] [ebp+Ch] float v82; // [esp+30h] [ebp+Ch] float v83; // [esp+30h] [ebp+Ch] float v84; // [esp+30h] [ebp+Ch] float v85; // [esp+30h] [ebp+Ch] float v86; // [esp+30h] [ebp+Ch] float v87; // [esp+30h] [ebp+Ch] float v88; // [esp+30h] [ebp+Ch] float v89; // [esp+30h] [ebp+Ch] float v90; // [esp+30h] [ebp+Ch] float v91; // [esp+30h] [ebp+Ch] float v92; // [esp+30h] [ebp+Ch] float v93; // [esp+30h] [ebp+Ch] float v94; // [esp+30h] [ebp+Ch] float v95; // [esp+30h] [ebp+Ch] float v96; // [esp+30h] [ebp+Ch] float v97; // [esp+30h] [ebp+Ch] v4 = a2; v5 = a1; v26 = *a2 - *a1; *(float *)&v27 = a2[1] - a1[1]; *((float *)&v27 + 1) = a2[2] - a1[2]; v29 = a2[4] * a2[4] + a2[3] * a2[3] + a2[5] * a2[5]; v31 = a2[7] * a2[4] + a2[6] * a2[3] + a2[8] * a2[5]; v30 = a2[6] * a2[6] + a2[7] * a2[7] + a2[8] * a2[8]; v6 = *((float *)&v27 + 1); *((float *)&v27 + 1) = *(float *)&v27 * a2[4] + v26 * a2[3] + *((float *)&v27 + 1) * a2[5]; v28 = a2[7] * *(float *)&v27 + a2[6] * v26 + v6 * a2[8]; v60 = *(float *)&v27 * *(float *)&v27 + v26 * v26 + v6 * v6; v7 = v31; v8 = v30; v9 = v29; v32 = v30 * v29 - v31 * v31; v33 = fabs(v32); if ( v33 < 0.0000099999997 ) { v23 = *(_DWORD *)v4; v24 = *((_DWORD *)v4 + 1); v25 = *((_DWORD *)v4 + 2); if ( v9 < v8 ) { v26 = v4[6]; v27 = *(double *)(v4 + 7); *a3 = 0.0; result = sub_8486F0(v5, (float *)&v23, a4); } else { v26 = v4[3]; v27 = *((double *)v4 + 2); *a4 = 0.0; result = sub_8486F0(v5, (float *)&v23, a3); } } else { v10 = v28; v11 = *((float *)&v27 + 1); *a3 = v28 * v7 - *((float *)&v27 + 1) * v8; v30 = v11 * v7 - v10 * v9; v12 = v30; *a4 = v30; if ( *a3 >= 0.0 ) { v16 = v30; if ( v33 < (double)*a3 ) { if ( v30 >= 0.0 ) { if ( v33 < v16 ) { v27 = v11 + v7; v30 = v27; v56 = -v30; if ( v56 >= v9 ) { *a3 = 1.0; v30 = v7 + v10; if ( v30 < 0.0 ) { v22 = v30; v58 = -v30; if ( v58 < v8 ) { v59 = v58 / v8; *a4 = v59; v96 = v9 + v22 * v59 + v11 + v11 + v60; } else { *a4 = 1.0; v96 = v9 + v8 + v60 + v10 + v27 + v10 + v27; } v97 = fabs(v96); result = v97; } else { *a4 = 0.0; v94 = v9 + v11 + v11 + v60; v95 = fabs(v94); result = v95; } } else { *a4 = 1.0; if ( v30 < 0.0 ) { v21 = v30; v57 = v56 / v9; *a3 = v57; v92 = v21 * v57 + v8 + v10 + v10 + v60; } else { *a3 = 0.0; v92 = v8 + v10 + v10 + v60; } v93 = fabs(v92); result = v93; } } else { *a3 = 1.0; v30 = v10 + v7; if ( v30 < 0.0 ) { v20 = v30; v54 = -v30; if ( v54 < v8 ) { v55 = v54 / v8; *a4 = v55; v90 = v9 + v20 * v55 + v11 + v11 + v60; } else { *a4 = 1.0; v90 = v7 + v11 + v10 + v7 + v11 + v10 + v9 + v8 + v60; } v91 = fabs(v90); result = v91; } else { *a4 = 0.0; v88 = v9 + v11 + v11 + v60; v89 = fabs(v88); result = v89; } } } else { v50 = -v11; if ( v50 >= v9 ) { *a3 = 1.0; v30 = v10 + v7; if ( v30 < 0.0 ) { v19 = v30; v52 = -v30; if ( v52 < v8 ) { v53 = v52 / v8; *a4 = v53; v86 = v9 + v19 * v53 + v11 + v11 + v60; } else { *a4 = 1.0; v86 = v7 + v11 + v10 + v7 + v11 + v10 + v9 + v8 + v60; } v87 = fabs(v86); result = v87; } else { *a4 = 0.0; v84 = v9 + v11 + v11 + v60; v85 = fabs(v84); result = v85; } } else { *a4 = 0.0; if ( v11 < 0.0 ) { v51 = v50 / v9; *a3 = v51; v60 = v11 * v51 + v60; } else { *a3 = 0.0; } v83 = fabs(v60); result = v83; } } } else if ( v30 >= 0.0 ) { if ( v33 < v16 ) { *a4 = 1.0; v17 = v7 + v11; v30 = v17; if ( v30 < 0.0 ) { v18 = v30; v48 = -v30; if ( v48 < v9 ) { v49 = v48 / v9; *a3 = v49; v81 = v18 * v49 + v8 + v10 + v10 + v60; } else { *a3 = 1.0; v81 = v9 + v8 + v60 + v17 + v10 + v17 + v10; } v82 = fabs(v81); result = v82; } else { *a3 = 0.0; v79 = v8 + v10 + v10 + v60; v80 = fabs(v79); result = v80; } } else { v46 = 1.0 / v33; *a3 = *a3 * v46; v47 = v46 * *a4; *a4 = v47; v77 = (v7 * *a4 + v9 * *a3 + 2.0 * v11) * *a3 + (v10 * 2.0 + v8 * v47 + *a3 * v7) * v47 + v60; v78 = fabs(v77); result = v78; } } else { *a4 = 0.0; if ( v11 < 0.0 ) { v44 = -v11; if ( v44 < v9 ) { v45 = v44 / v9; *a3 = v45; v75 = v11 * v45 + v60; } else { *a3 = 1.0; v75 = v9 + v11 + v11 + v60; } v76 = fabs(v75); result = v76; } else { *a3 = 0.0; v74 = fabs(v60); result = v74; } } } else if ( v12 >= 0.0 ) { if ( v33 < v12 ) { v14 = v7 + v11; v30 = v14; v15 = v30; if ( v30 >= 0.0 ) { *a3 = 0.0; if ( v10 < 0.0 ) { v42 = -v10; if ( v42 < v8 ) { v43 = v42 / v8; *a4 = v43; v72 = v10 * v43 + v60; } else { *a4 = 1.0; v72 = v8 + v10 + v10 + v60; } v73 = fabs(v72); result = v73; } else { *a4 = 0.0; v71 = fabs(v60); result = v71; } } else { *a4 = 1.0; v40 = -v15; if ( v40 < v9 ) { v41 = v40 / v9; *a3 = v41; v69 = v15 * v41 + v8 + v10 + v10 + v60; } else { *a3 = 1.0; v69 = v9 + v8 + v60 + v14 + v10 + v14 + v10; } v70 = fabs(v69); result = v70; } } else { *a3 = 0.0; if ( v10 < 0.0 ) { v38 = -v10; if ( v38 < v8 ) { v39 = v38 / v8; *a4 = v39; v67 = v10 * v39 + v60; } else { *a4 = 1.0; v67 = v8 + v10 + v10 + v60; } v68 = fabs(v67); result = v68; } else { *a4 = 0.0; v66 = fabs(v60); result = v66; } } } else if ( v11 >= 0.0 ) { *a3 = 0.0; if ( v10 < 0.0 ) { v36 = -v10; if ( v36 < v8 ) { v37 = v36 / v8; *a4 = v37; v64 = v10 * v37 + v60; } else { *a4 = 1.0; v64 = v8 + v10 + v10 + v60; } v65 = fabs(v64); result = v65; } else { *a4 = 0.0; v63 = fabs(v60); result = v63; } } else { *a4 = 0.0; v34 = -v11; if ( v34 < v9 ) { v35 = v34 / v9; *a3 = v35; v61 = v11 * v35 + v60; } else { *a3 = 1.0; v61 = v9 + v11 + v11 + v60; } v62 = fabs(v61); result = v62; } } return result; } //----- (00854560) -------------------------------------------------------- int __thiscall sub_854560(float *this, float *a2) { float *v2; // edi float *v3; // esi float *v4; // eax float v5; // edx double v6; // st7 double v7; // st7 float *v8; // eax float *v9; // eax float *v10; // eax double v11; // st7 int result; // eax float v13; // [esp+8h] [ebp-18h] float v14; // [esp+Ch] [ebp-14h] float v15; // [esp+10h] [ebp-10h] float v16; // [esp+14h] [ebp-Ch] float v17; // [esp+18h] [ebp-8h] float v18; // [esp+1Ch] [ebp-4h] float v19; // [esp+28h] [ebp+8h] v2 = a2; v3 = this; v4 = sub_85DA90(a2, &v13, this); v19 = a2[12]; v16 = *v4 * v19; v17 = v4[1] * v19; v18 = v19 * v4[2]; v13 = v2[9] + v16; v14 = v2[10] + v17; v5 = v14; v6 = v2[11]; v3[15] = v13; v7 = v6 + v18; v3[16] = v5; v15 = v7; v3[17] = v15; v8 = sub_85DA90(v2, &v13, v3 + 3); v3[18] = *v8; v3[19] = v8[1]; v3[20] = v8[2]; v9 = sub_85DA90(v2, &v13, v3 + 6); v3[21] = *v9; v3[22] = v9[1]; v3[23] = v9[2]; v10 = sub_85DA90(v2, &v13, v3 + 9); v11 = v3[12]; v3[24] = *v10; v3[25] = v10[1]; result = *((_DWORD *)v10 + 2); *((_DWORD *)v3 + 26) = result; v3[27] = v11 * v2[12]; v3[28] = v3[13] * v2[12]; v3[29] = v3[14] * v2[12]; return result; } //----- (00854650) -------------------------------------------------------- signed int __thiscall sub_854650(float *this, int a2) { float *v2; // esi float *v3; // ecx float *v4; // edi float *v5; // eax double v6; // st7 double v7; // st6 double v8; // st5 double v9; // st3 double v10; // st4 double v11; // st2 double v12; // st3 double v13; // st2 double v14; // st2 double v15; // st2 double v16; // st2 double v18; // st2 double v19; // st2 double v20; // st2 double v21; // st2 double v22; // st2 double v23; // st2 double v24; // st2 double v25; // st2 double v26; // st2 double v27; // st2 double v28; // st2 double v29; // st2 double v30; // st2 double v31; // st2 double v32; // st2 double v33; // st2 double v34; // st2 double v35; // st2 double v36; // st2 double v37; // st2 double v38; // st7 double v39; // st6 double v40; // st6 double v41; // st5 double v42; // st4 double v43; // st4 double v44; // st6 double v45; // st3 double v46; // st6 double v47; // st4 double v48; // st5 double v49; // st3 double v50; // st4 double v51; // st5 double v52; // st7 double v53; // st6 double v54; // st5 double v55; // st6 double v56; // st5 double v57; // st4 double v58; // st3 double v59; // st3 double v60; // st5 double v61; // st3 double v62; // st5 double v63; // st3 double v64; // st5 double v65; // st5 double v66; // st5 double v67; // st4 double v68; // st3 double v69; // st3 double v70; // st5 double v71; // st3 double v72; // st3 bool v73; // c0 bool v74; // c3 double v75; // st3 double v76; // st3 double v77; // st3 double v78; // st2 double v79; // st3 double v80; // st2 double v81; // st3 double v82; // st2 double v83; // rt1 double v84; // st3 double v85; // st5 double v86; // st3 double v87; // st3 double v88; // st2 double v89; // st3 double v90; // st2 double v91; // st3 double v92; // st2 double v93; // st3 double v94; // st3 double v95; // st3 double v96; // st2 double v97; // st3 double v98; // rt2 double v99; // st7 double v100; // rt0 double v101; // st4 double v102; // st4 double v103; // st2 double v104; // st3 double v105; // st4 double v106; // st2 double v107; // st6 double v108; // st3 double v109; // st4 double v110; // st2 double v111; // st3 double v112; // st4 double v113; // rt0 double v114; // st5 double v115; // st7 double v116; // st5 double v117; // st5 double v118; // st4 double v119; // st3 double v120; // st3 double v121; // st5 double v122; // st3 double v123; // st5 double v124; // st3 double v125; // st5 double v126; // st5 double v127; // st5 double v128; // st4 double v129; // st3 double v130; // st3 double v131; // st5 double v132; // st2 double v133; // st6 double v134; // st7 double v135; // st7 double v136; // st6 double v137; // st4 double v138; // st3 double v139; // st3 double v140; // st3 double v141; // st5 double v142; // st4 double v143; // st3 double v144; // st3 double v145; // st2 double v146; // st7 double v147; // st4 double v148; // st3 double v149; // rtt double v150; // st5 double v151; // st4 double v152; // st5 double v153; // st4 double v154; // st6 double v155; // st3 double v156; // st3 double v157; // st3 bool v158; // c0 double v159; // st6 double v160; // st3 double v161; // st2 double v162; // st7 double v163; // st7 double v164; // st4 double v165; // st7 double v166; // st4 double v167; // st3 double v168; // rtt double v169; // st6 float v170; // [esp+8h] [ebp-7Ch] float v171; // [esp+Ch] [ebp-78h] float v172; // [esp+10h] [ebp-74h] float v173; // [esp+14h] [ebp-70h] float v174; // [esp+18h] [ebp-6Ch] float v175; // [esp+1Ch] [ebp-68h] float v176; // [esp+20h] [ebp-64h] float v177; // [esp+24h] [ebp-60h] float v178; // [esp+28h] [ebp-5Ch] float v179; // [esp+2Ch] [ebp-58h] float v180; // [esp+30h] [ebp-54h] float v181; // [esp+34h] [ebp-50h] float v182; // [esp+38h] [ebp-4Ch] float v183; // [esp+3Ch] [ebp-48h] float v184; // [esp+40h] [ebp-44h] float v185; // [esp+44h] [ebp-40h] float v186; // [esp+48h] [ebp-3Ch] float v187; // [esp+4Ch] [ebp-38h] float v188; // [esp+50h] [ebp-34h] float v189; // [esp+54h] [ebp-30h] float v190; // [esp+58h] [ebp-2Ch] double v191; // [esp+5Ch] [ebp-28h] double v192; // [esp+64h] [ebp-20h] float v193; // [esp+6Ch] [ebp-18h] float v194; // [esp+70h] [ebp-14h] float v195; // [esp+74h] [ebp-10h] float v196; // [esp+78h] [ebp-Ch] float v197; // [esp+7Ch] [ebp-8h] float v198; // [esp+80h] [ebp-4h] float v199; // [esp+8Ch] [ebp+8h] float v200; // [esp+8Ch] [ebp+8h] float v201; // [esp+8Ch] [ebp+8h] float v202; // [esp+8Ch] [ebp+8h] float v203; // [esp+8Ch] [ebp+8h] float v204; // [esp+8Ch] [ebp+8h] float v205; // [esp+8Ch] [ebp+8h] float v206; // [esp+8Ch] [ebp+8h] float v207; // [esp+8Ch] [ebp+8h] float v208; // [esp+8Ch] [ebp+8h] float v209; // [esp+8Ch] [ebp+8h] float v210; // [esp+8Ch] [ebp+8h] float v211; // [esp+8Ch] [ebp+8h] float v212; // [esp+8Ch] [ebp+8h] float v213; // [esp+8Ch] [ebp+8h] float v214; // [esp+8Ch] [ebp+8h] float v215; // [esp+8Ch] [ebp+8h] float v216; // [esp+8Ch] [ebp+8h] float v217; // [esp+8Ch] [ebp+8h] float v218; // [esp+8Ch] [ebp+8h] float v219; // [esp+8Ch] [ebp+8h] float v220; // [esp+8Ch] [ebp+8h] float v221; // [esp+8Ch] [ebp+8h] float v222; // [esp+8Ch] [ebp+8h] float v223; // [esp+8Ch] [ebp+8h] float v224; // [esp+8Ch] [ebp+8h] float v225; // [esp+8Ch] [ebp+8h] float v226; // [esp+8Ch] [ebp+8h] float v227; // [esp+8Ch] [ebp+8h] float v228; // [esp+8Ch] [ebp+8h] float v229; // [esp+8Ch] [ebp+8h] float v230; // [esp+8Ch] [ebp+8h] float v231; // [esp+8Ch] [ebp+8h] float v232; // [esp+8Ch] [ebp+8h] float v233; // [esp+8Ch] [ebp+8h] float v234; // [esp+8Ch] [ebp+8h] float v235; // [esp+8Ch] [ebp+8h] float v236; // [esp+8Ch] [ebp+8h] float v237; // [esp+8Ch] [ebp+8h] float v238; // [esp+8Ch] [ebp+8h] float v239; // [esp+8Ch] [ebp+8h] float v240; // [esp+8Ch] [ebp+8h] float v241; // [esp+8Ch] [ebp+8h] float v242; // [esp+8Ch] [ebp+8h] float v243; // [esp+8Ch] [ebp+8h] float v244; // [esp+8Ch] [ebp+8h] float v245; // [esp+8Ch] [ebp+8h] float v246; // [esp+8Ch] [ebp+8h] float v247; // [esp+8Ch] [ebp+8h] float v248; // [esp+8Ch] [ebp+8h] float v249; // [esp+8Ch] [ebp+8h] float v250; // [esp+8Ch] [ebp+8h] float v251; // [esp+8Ch] [ebp+8h] float v252; // [esp+8Ch] [ebp+8h] float v253; // [esp+8Ch] [ebp+8h] float v254; // [esp+8Ch] [ebp+8h] float v255; // [esp+8Ch] [ebp+8h] float v256; // [esp+8Ch] [ebp+8h] float v257; // [esp+8Ch] [ebp+8h] float v258; // [esp+8Ch] [ebp+8h] float v259; // [esp+8Ch] [ebp+8h] float v260; // [esp+8Ch] [ebp+8h] float v261; // [esp+8Ch] [ebp+8h] float v262; // [esp+8Ch] [ebp+8h] float v263; // [esp+8Ch] [ebp+8h] float v264; // [esp+8Ch] [ebp+8h] float v265; // [esp+8Ch] [ebp+8h] float v266; // [esp+8Ch] [ebp+8h] float v267; // [esp+8Ch] [ebp+8h] float v268; // [esp+8Ch] [ebp+8h] float v269; // [esp+8Ch] [ebp+8h] float v270; // [esp+8Ch] [ebp+8h] float v271; // [esp+8Ch] [ebp+8h] float v272; // [esp+8Ch] [ebp+8h] float v273; // [esp+8Ch] [ebp+8h] float v274; // [esp+8Ch] [ebp+8h] float v275; // [esp+8Ch] [ebp+8h] float v276; // [esp+8Ch] [ebp+8h] float v277; // [esp+8Ch] [ebp+8h] float v278; // [esp+8Ch] [ebp+8h] float v279; // [esp+8Ch] [ebp+8h] float v280; // [esp+8Ch] [ebp+8h] float v281; // [esp+8Ch] [ebp+8h] float v282; // [esp+8Ch] [ebp+8h] float v283; // [esp+8Ch] [ebp+8h] float v284; // [esp+8Ch] [ebp+8h] float v285; // [esp+8Ch] [ebp+8h] float v286; // [esp+8Ch] [ebp+8h] float v287; // [esp+8Ch] [ebp+8h] float v288; // [esp+8Ch] [ebp+8h] float v289; // [esp+8Ch] [ebp+8h] float v290; // [esp+8Ch] [ebp+8h] float v291; // [esp+8Ch] [ebp+8h] float v292; // [esp+8Ch] [ebp+8h] float v293; // [esp+8Ch] [ebp+8h] float v294; // [esp+8Ch] [ebp+8h] float v295; // [esp+8Ch] [ebp+8h] float v296; // [esp+8Ch] [ebp+8h] float v297; // [esp+8Ch] [ebp+8h] float v298; // [esp+8Ch] [ebp+8h] float v299; // [esp+8Ch] [ebp+8h] float v300; // [esp+8Ch] [ebp+8h] float v301; // [esp+8Ch] [ebp+8h] float v302; // [esp+8Ch] [ebp+8h] float v303; // [esp+8Ch] [ebp+8h] float v304; // [esp+8Ch] [ebp+8h] float v305; // [esp+8Ch] [ebp+8h] float v306; // [esp+8Ch] [ebp+8h] float v307; // [esp+8Ch] [ebp+8h] float v308; // [esp+8Ch] [ebp+8h] float v309; // [esp+8Ch] [ebp+8h] float v310; // [esp+8Ch] [ebp+8h] float v311; // [esp+8Ch] [ebp+8h] float v312; // [esp+8Ch] [ebp+8h] float v313; // [esp+8Ch] [ebp+8h] float v314; // [esp+8Ch] [ebp+8h] float v315; // [esp+8Ch] [ebp+8h] float v316; // [esp+8Ch] [ebp+8h] float v317; // [esp+8Ch] [ebp+8h] float v318; // [esp+8Ch] [ebp+8h] float v319; // [esp+8Ch] [ebp+8h] float v320; // [esp+8Ch] [ebp+8h] float v321; // [esp+8Ch] [ebp+8h] float v322; // [esp+8Ch] [ebp+8h] float v323; // [esp+8Ch] [ebp+8h] float v324; // [esp+8Ch] [ebp+8h] float v325; // [esp+8Ch] [ebp+8h] float v326; // [esp+8Ch] [ebp+8h] float v327; // [esp+8Ch] [ebp+8h] float v328; // [esp+8Ch] [ebp+8h] float v329; // [esp+8Ch] [ebp+8h] float v330; // [esp+8Ch] [ebp+8h] float v331; // [esp+8Ch] [ebp+8h] float v332; // [esp+8Ch] [ebp+8h] float v333; // [esp+8Ch] [ebp+8h] float v334; // [esp+8Ch] [ebp+8h] float v335; // [esp+8Ch] [ebp+8h] float v336; // [esp+8Ch] [ebp+8h] float v337; // [esp+8Ch] [ebp+8h] float v338; // [esp+8Ch] [ebp+8h] float v339; // [esp+8Ch] [ebp+8h] float v340; // [esp+8Ch] [ebp+8h] float v341; // [esp+8Ch] [ebp+8h] float v342; // [esp+8Ch] [ebp+8h] float v343; // [esp+8Ch] [ebp+8h] float v344; // [esp+8Ch] [ebp+8h] float v345; // [esp+8Ch] [ebp+8h] float v346; // [esp+8Ch] [ebp+8h] float v347; // [esp+8Ch] [ebp+8h] float v348; // [esp+8Ch] [ebp+8h] float v349; // [esp+8Ch] [ebp+8h] float v350; // [esp+8Ch] [ebp+8h] float v351; // [esp+8Ch] [ebp+8h] float v352; // [esp+8Ch] [ebp+8h] float v353; // [esp+8Ch] [ebp+8h] float v354; // [esp+8Ch] [ebp+8h] float v355; // [esp+8Ch] [ebp+8h] float v356; // [esp+8Ch] [ebp+8h] float v357; // [esp+8Ch] [ebp+8h] float v358; // [esp+8Ch] [ebp+8h] float v359; // [esp+8Ch] [ebp+8h] float v360; // [esp+8Ch] [ebp+8h] float v361; // [esp+8Ch] [ebp+8h] float v362; // [esp+8Ch] [ebp+8h] float v363; // [esp+8Ch] [ebp+8h] float v364; // [esp+8Ch] [ebp+8h] float v365; // [esp+8Ch] [ebp+8h] float v366; // [esp+8Ch] [ebp+8h] float v367; // [esp+8Ch] [ebp+8h] float v368; // [esp+8Ch] [ebp+8h] float v369; // [esp+8Ch] [ebp+8h] float v370; // [esp+8Ch] [ebp+8h] float v371; // [esp+8Ch] [ebp+8h] float v372; // [esp+8Ch] [ebp+8h] float v373; // [esp+8Ch] [ebp+8h] float v374; // [esp+8Ch] [ebp+8h] float v375; // [esp+8Ch] [ebp+8h] float v376; // [esp+8Ch] [ebp+8h] float v377; // [esp+8Ch] [ebp+8h] float v378; // [esp+8Ch] [ebp+8h] float v379; // [esp+8Ch] [ebp+8h] float v380; // [esp+8Ch] [ebp+8h] float v381; // [esp+8Ch] [ebp+8h] float v382; // [esp+8Ch] [ebp+8h] float v383; // [esp+8Ch] [ebp+8h] float v384; // [esp+8Ch] [ebp+8h] float v385; // [esp+8Ch] [ebp+8h] float v386; // [esp+8Ch] [ebp+8h] float v387; // [esp+8Ch] [ebp+8h] float v388; // [esp+8Ch] [ebp+8h] float v389; // [esp+8Ch] [ebp+8h] float v390; // [esp+8Ch] [ebp+8h] float v391; // [esp+8Ch] [ebp+8h] float v392; // [esp+8Ch] [ebp+8h] float v393; // [esp+8Ch] [ebp+8h] float v394; // [esp+8Ch] [ebp+8h] float v395; // [esp+8Ch] [ebp+8h] float v396; // [esp+8Ch] [ebp+8h] float v397; // [esp+8Ch] [ebp+8h] float v398; // [esp+8Ch] [ebp+8h] float v399; // [esp+8Ch] [ebp+8h] float v400; // [esp+8Ch] [ebp+8h] float v401; // [esp+8Ch] [ebp+8h] float v402; // [esp+8Ch] [ebp+8h] float v403; // [esp+8Ch] [ebp+8h] float v404; // [esp+8Ch] [ebp+8h] float v405; // [esp+8Ch] [ebp+8h] float v406; // [esp+8Ch] [ebp+8h] float v407; // [esp+8Ch] [ebp+8h] float v408; // [esp+8Ch] [ebp+8h] float v409; // [esp+8Ch] [ebp+8h] float v410; // [esp+8Ch] [ebp+8h] float v411; // [esp+8Ch] [ebp+8h] v2 = this; v3 = (float *)*((_DWORD *)this + 30); v4 = (float *)a2; v5 = *(float **)(a2 + 120); v179 = *(float *)(a2 + 60) - v2[15]; v180 = *(float *)(a2 + 64) - v2[16]; v181 = *(float *)(a2 + 68) - v2[17]; v182 = v5[4] - v3[4]; v183 = v5[5] - v3[5]; v184 = v5[6] - v3[6]; v197 = v3[1]; v170 = *(float *)(a2 + 76) * v2[19] + *(float *)(a2 + 72) * v2[18] + *(float *)(a2 + 80) * v2[20]; v171 = *(float *)(a2 + 88) * v2[19] + v2[18] * *(float *)(a2 + 84) + *(float *)(a2 + 92) * v2[20]; v172 = *(float *)(a2 + 100) * v2[19] + *(float *)(a2 + 96) * v2[18] + v2[20] * *(float *)(a2 + 104); v6 = v180; v7 = v179; v8 = v181; v188 = v2[20] * v181 + v2[18] * v179 + v180 * v2[19]; v9 = v2[18] * v182; v10 = v182; v192 = v9; v11 = v9 + v183 * v2[19] + v2[20] * v184; v12 = v183; v199 = v11; v185 = v199 * v197 + v188; v200 = v4[27] * v170; v201 = fabs(v200); v13 = v201; v202 = v4[28] * v171; v203 = fabs(v202); v14 = v13 + v203; v204 = v172 * v4[29]; v205 = fabs(v204); v206 = v14 + v205; v15 = v206; v207 = fabs(v2[27]); v208 = v15 + v207; v16 = v208; if ( v208 < (double)v188 && v185 > v16 ) return 0; v209 = -v16; if ( v209 > (double)v188 && v185 < (double)v209 ) return 0; v173 = v4[18] * v2[21] + v2[22] * v4[19] + v2[23] * v4[20]; v174 = v4[22] * v2[22] + v2[21] * v4[21] + v4[23] * v2[23]; v175 = v4[24] * v2[21] + v2[22] * v4[25] + v2[23] * v4[26]; v189 = v2[21] * v7 + v2[22] * v6 + v2[23] * v8; v196 = v2[21] * v10 + v2[22] * v12 + v2[23] * v184; v186 = v196 * v197 + v189; v210 = v4[27] * v173; v211 = fabs(v210); v18 = v211; v212 = v4[28] * v174; v213 = fabs(v212); v19 = v18 + v213; v214 = v175 * v4[29]; v215 = fabs(v214); v216 = v19 + v215; v20 = v216; v217 = fabs(v2[28]); v218 = v20 + v217; v21 = v218; if ( v218 < (double)v189 && v186 > v21 ) return 0; v219 = -v21; if ( v219 > (double)v189 && v186 < (double)v219 ) return 0; v176 = v2[25] * v4[19] + v2[24] * v4[18] + v4[20] * v2[26]; v177 = v4[22] * v2[25] + v2[24] * v4[21] + v4[23] * v2[26]; v178 = v4[25] * v2[25] + v4[24] * v2[24] + v4[26] * v2[26]; v190 = v6 * v2[25] + v2[24] * v7 + v8 * v2[26]; v195 = v12 * v2[25] + v2[24] * v10 + v184 * v2[26]; v187 = v195 * v197 + v190; v220 = v4[27] * v176; v221 = fabs(v220); v22 = v221; v222 = v4[28] * v177; v223 = fabs(v222); v23 = v22 + v223; v224 = v178 * v4[29]; v225 = fabs(v224); v226 = v23 + v225; v24 = v226; v227 = fabs(v2[29]); v228 = v24 + v227; v25 = v228; if ( v228 < (double)v190 && v187 > v25 ) return 0; v229 = -v25; if ( v229 > (double)v190 && v187 < (double)v229 ) return 0; v230 = v2[27] * v170; v231 = fabs(v230); v26 = v231; v232 = v2[28] * v173; v233 = fabs(v232); v27 = v26 + v233; v234 = v2[29] * v176; v235 = fabs(v234); v236 = v27 + v235; v28 = v236; v237 = fabs(v4[27]); v238 = v28 + v237; v198 = v6 * v4[19] + v4[18] * v7 + v4[20] * v8; v29 = v4[18] * v10; v191 = v29; v193 = v29 + v12 * v4[19] + v4[20] * v184; v30 = v198; v198 = v193 * v197 + v198; if ( v238 < v30 && v238 < (double)v198 ) return 0; v239 = -v238; if ( v239 > v30 && v198 < (double)v239 ) return 0; v240 = v2[27] * v171; v241 = fabs(v240); v31 = v241; v242 = v2[28] * v174; v243 = fabs(v242); v32 = v31 + v243; v244 = v2[29] * v177; v245 = fabs(v244); v246 = v32 + v245; v33 = v246; v247 = fabs(v4[28]); v248 = v33 + v247; v198 = v4[22] * v6 + v4[21] * v7 + v4[23] * v8; v194 = v4[22] * v12 + v4[21] * v10 + v4[23] * v184; v34 = v198; v198 = v194 * v197 + v198; if ( v248 < v34 && v248 < (double)v198 ) return 0; v249 = -v248; if ( v249 > v34 && v198 < (double)v249 ) return 0; v250 = v2[27] * v172; v251 = fabs(v250); v35 = v251; v252 = v2[28] * v175; v253 = fabs(v252); v36 = v35 + v253; v254 = v2[29] * v178; v255 = fabs(v254); v256 = v36 + v255; v37 = v256; v257 = fabs(v4[29]); v258 = v37 + v257; v198 = v8 * v4[26] + v7 * v4[24] + v6 * v4[25]; v193 = v183 * v4[25] + v182 * v4[24] + v184 * v4[26]; v38 = v198; v198 = v193 * v197 + v198; if ( v258 < v38 && v198 > (double)v258 ) return 0; v259 = -v258; if ( v259 > v38 && v198 < (double)v259 ) return 0; v260 = v4[28] * v172; v261 = fabs(v260); v39 = v261; v262 = v171 * v4[29]; v263 = fabs(v262); v264 = v39 + v263; v40 = v264; v41 = v176; v265 = v2[28] * v176; v266 = fabs(v265); v42 = v266; v267 = v2[29] * v173; v268 = fabs(v267); v269 = v42 + v268; v43 = v40 + v269; v44 = v173; v270 = v43; v198 = v190 * v173 - v176 * v189; if ( v270 >= (double)v198 ) { v272 = -v270; if ( v272 <= (double)v198 ) { v46 = v187; } else { v49 = v44 * v187; v46 = v187; v50 = v49 - v41 * v186; v51 = v272; v273 = v50; if ( v273 < v51 ) return 0; } } else { v45 = v44 * v187; v46 = v187; v47 = v45 - v41 * v186; v48 = v270; v271 = v47; if ( v271 > v48 ) return 0; } v52 = v46; v274 = v172 * v4[27]; v275 = fabs(v274); v53 = v275; v276 = v170 * v4[29]; v277 = fabs(v276); v54 = v53 + v277; v55 = v170; v278 = v54; v56 = v278; v57 = v177; v279 = v2[28] * v177; v280 = fabs(v279); v58 = v280; v281 = v2[29] * v174; v282 = fabs(v281); v283 = v58 + v282; v59 = v56 + v283; v60 = v174; v284 = v59; v198 = v190 * v174 - v177 * v189; if ( v284 >= (double)v198 ) { v286 = -v284; if ( v286 > (double)v198 ) { v63 = v60 * v52; v64 = v286; v287 = v63 - v57 * v186; if ( v287 < v64 ) return 0; } } else { v61 = v60 * v52; v62 = v284; v285 = v61 - v57 * v186; if ( v285 > v62 ) return 0; } v288 = v4[27] * v171; v289 = fabs(v288); v65 = v289; v290 = v4[28] * v55; v291 = fabs(v290); v292 = v65 + v291; v66 = v292; v67 = v178; v293 = v2[28] * v178; v294 = fabs(v293); v68 = v294; v295 = v2[29] * v175; v296 = fabs(v295); v297 = v68 + v296; v69 = v66 + v297; v70 = v175; v298 = v69; v198 = v190 * v175 - v178 * v189; v71 = v198; if ( v298 >= (double)v198 ) { v300 = -v298; v73 = v300 < v71; v74 = v300 == v71; v75 = v300; if ( !v73 && !v74 ) { v301 = v52 * v70 - v67 * v186; if ( v301 < v75 ) return 0; } } else { v72 = v298; v299 = v52 * v70 - v67 * v186; if ( v299 > v72 ) return 0; } v302 = v2[27] * v176; v303 = fabs(v302); v76 = v303; v304 = v2[29] * v55; v305 = fabs(v304); v306 = v76 + v305; v77 = v306; v307 = v4[28] * v70; v308 = fabs(v307); v78 = v308; v309 = v174 * v4[29]; v310 = fabs(v309); v311 = v78 + v310; v312 = v77 + v311; v79 = v176; v198 = v176 * v188 - v190 * v55; if ( v312 >= (double)v198 ) { v313 = -v312; if ( v313 <= (double)v198 ) { v81 = v185; } else { v82 = v79 * v185 - v52 * v55; v81 = v185; v197 = v82; if ( v313 > (double)v197 ) return 0; } } else { v80 = v79 * v185 - v52 * v55; v81 = v185; v197 = v80; if ( v312 < (double)v197 ) return 0; } v83 = v81; v84 = v70 * v4[27]; v85 = v83; v314 = v84; v315 = fabs(v314); v86 = v315; v316 = v173 * v4[29]; v317 = fabs(v316); v318 = v86 + v317; v87 = v318; v319 = v2[27] * v177; v320 = fabs(v319); v88 = v320; v321 = v2[29] * v171; v322 = fabs(v321); v323 = v88 + v322; v324 = v87 + v323; v89 = v177; v198 = v177 * v188 - v190 * v171; if ( v324 >= (double)v198 ) { v326 = -v324; if ( v326 > (double)v198 ) { v92 = v89 * v85 - v52 * v171; v93 = v326; v327 = v92; if ( v327 < v93 ) return 0; } } else { v90 = v89 * v85 - v52 * v171; v91 = v324; v325 = v90; if ( v325 > v91 ) return 0; } v328 = v4[27] * v174; v329 = fabs(v328); v94 = v329; v330 = v4[28] * v173; v331 = fabs(v330); v332 = v94 + v331; v95 = v332; v333 = v2[27] * v67; v334 = fabs(v333); v96 = v334; v335 = v2[29] * v172; v336 = fabs(v335); v337 = v96 + v336; v338 = v95 + v337; v97 = v172; v198 = v67 * v188 - v190 * v172; if ( v338 >= (double)v198 ) { v340 = -v338; if ( v340 <= (double)v198 ) { v99 = v178; } else { v100 = v340; v341 = v67 * v85 - v97 * v52; v99 = v178; if ( v341 < v100 ) return 0; } } else { v98 = v338; v339 = v67 * v85 - v97 * v52; v99 = v178; if ( v339 > v98 ) return 0; } v342 = v4[28] * v99; v343 = fabs(v342); v101 = v343; v344 = v177 * v4[29]; v345 = fabs(v344); v346 = v101 + v345; v102 = v346; v347 = v2[27] * v173; v348 = fabs(v347); v103 = v348; v349 = v2[28] * v55; v350 = fabs(v349); v351 = v103 + v350; v104 = v102 + v351; v105 = v173; v352 = v104; v198 = v189 * v55 - v173 * v188; if ( v352 >= (double)v198 ) { v354 = -v352; if ( v354 <= (double)v198 ) { v107 = v186; } else { v110 = v55 * v186; v107 = v186; v111 = v110 - v105 * v85; v112 = v354; v355 = v111; if ( v355 < v112 ) return 0; } } else { v106 = v55 * v186; v107 = v186; v108 = v106 - v105 * v85; v109 = v352; v353 = v108; if ( v353 > v109 ) return 0; } v113 = v85; v114 = v99 * v4[27]; v115 = v113; v356 = v114; v357 = fabs(v356); v116 = v357; v358 = v176 * v4[29]; v359 = fabs(v358); v360 = v116 + v359; v117 = v360; v118 = v174; v361 = v2[27] * v174; v362 = fabs(v361); v119 = v362; v363 = v2[28] * v171; v364 = fabs(v363); v365 = v119 + v364; v120 = v117 + v365; v121 = v171; v366 = v120; v198 = v189 * v171 - v174 * v188; if ( v366 >= (double)v198 ) { v368 = -v366; if ( v368 > (double)v198 ) { v124 = v121 * v107; v125 = v368; v369 = v124 - v118 * v115; if ( v369 < v125 ) return 0; } } else { v122 = v121 * v107; v123 = v366; v367 = v122 - v118 * v115; if ( v367 > v123 ) return 0; } v370 = v4[27] * v177; v371 = fabs(v370); v126 = v371; v372 = v4[28] * v176; v373 = fabs(v372); v374 = v126 + v373; v127 = v374; v128 = v175; v375 = v2[27] * v175; v376 = fabs(v375); v129 = v376; v377 = v2[28] * v172; v378 = fabs(v377); v379 = v129 + v378; v130 = v127 + v379; v131 = v172; v380 = v130; v198 = v189 * v172 - v175 * v188; v132 = v380; if ( v380 >= (double)v198 ) { v382 = -v132; if ( v382 > (double)v198 ) { v133 = v131 * v107 - v115 * v128; v134 = v382; v383 = v133; if ( v383 < v134 ) return 0; } } else { v381 = v131 * v107 - v115 * v128; if ( v381 > v132 ) return 0; } sub_61E8E0(&v182, &v185, &v179); v180 = v196; v181 = v195; v135 = v195; v384 = fabs(v195); v136 = v196; v196 = fabs(v196); v195 = v186 * v2[19] + v2[18] * v185 + v2[20] * v187; v195 = fabs(v195); v137 = v195; v195 = v135 * v174 - v136 * v177; v195 = fabs(v195); v138 = v195 * v4[28]; v195 = v135 * v173 - v136 * v176; v195 = fabs(v195); v139 = v138 + v195 * v4[27]; v195 = v135 * v175 - v136 * v178; v195 = fabs(v195); v195 = v139 + v195 * v4[29]; v140 = v195; v195 = v196 * v2[29] + v384 * v2[28]; v195 = v140 + v195; if ( v195 < v137 ) return 0; v179 = v183 * v2[19] + v192 + v2[20] * v184; v195 = fabs(v179); v141 = v179; v197 = v186 * v2[22] + v2[21] * v185 + v2[23] * v187; v197 = fabs(v197); v142 = v197; v197 = v179 * v177 - v135 * v171; v197 = fabs(v197); v143 = v197 * v4[28]; v197 = v179 * v176 - v135 * v170; v197 = fabs(v197); v144 = v143 + v197 * v4[27]; v145 = v179 * v178 - v135 * v172; v146 = v172; v197 = v145; v197 = fabs(v197); v197 = v144 + v197 * v4[29]; v385 = v195 * v2[29] + v384 * v2[27]; v386 = v197 + v385; if ( v386 < v142 ) return 0; v387 = v186 * v2[25] + v2[24] * v185 + v187 * v2[26]; v388 = fabs(v387); v147 = v388; v389 = v136 * v171 - v141 * v174; v390 = fabs(v389); v148 = v390 * v4[28]; v391 = v136 * v170 - v141 * v173; v392 = fabs(v391); v149 = v148 + v392 * v4[27]; v393 = v136 * v146 - v141 * v175; v394 = fabs(v393); v150 = v147; v395 = v149 + v394 * v4[29]; v151 = v395; v396 = v195 * v2[28] + v196 * v2[27]; v397 = v151 + v396; if ( v397 < v150 ) return 0; v180 = v194; v181 = v193; v152 = v193; v398 = fabs(v193); v153 = v194; v193 = fabs(v194); v194 = v186 * v4[19] + v4[18] * v185 + v4[20] * v187; v194 = fabs(v194); v154 = v194; v194 = v152 * v174 - v175 * v153; v194 = fabs(v194); v155 = v194 * v2[28]; v194 = v152 * v171 - v153 * v146; v194 = fabs(v194); v156 = v155 + v194 * v2[27]; v194 = v152 * v177 - v153 * v178; v194 = fabs(v194); v194 = v156 + v194 * v2[29]; v157 = v194; v194 = v4[28] * v398 + v193 * v4[29]; v194 = v157 + v194; v158 = v194 < v154; v159 = v153; if ( v158 ) return 0; v179 = v183 * v4[19] + v191 + v4[20] * v184; v195 = fabs(v179); v194 = v185 * v4[21] + v4[22] * v186 + v4[23] * v187; v194 = fabs(v194); v160 = v194; v194 = v179 * v175 - v152 * v173; v194 = fabs(v194); v161 = v146 * v179 - v152 * v170; v162 = v194 * v2[28]; v194 = v161; v194 = fabs(v194); v163 = v162 + v194 * v2[27]; v194 = v179 * v178 - v152 * v176; v194 = fabs(v194); v164 = v163 + v194 * v2[29]; v165 = v179; v194 = v164; v399 = v4[27] * v398 + v195 * v4[29]; v400 = v194 + v399; if ( v400 < v160 ) return 0; v401 = v186 * v4[25] + v4[24] * v185 + v187 * v4[26]; v402 = fabs(v401); v166 = v402; v403 = v159 * v173 - v165 * v174; v404 = fabs(v403); v167 = v404 * v2[28]; v405 = v159 * v170 - v165 * v171; v406 = fabs(v405); v168 = v167 + v406 * v2[27]; v407 = v159 * v176 - v165 * v177; v408 = fabs(v407); v409 = v168 + v408 * v2[29]; v169 = v409; v410 = v195 * v4[28] + v4[27] * v193; v411 = v169 + v410; if ( v411 < v166 ) return 0; return 1; } //----- (00855AE0) -------------------------------------------------------- signed int __thiscall sub_855AE0(int this, int a2, int a3, float *a4) { float *v4; // edi double v5; // st7 double v6; // st7 float *v7; // edx float *v8; // esi double v9; // st7 float *v10; // eax double v11; // st7 signed int v12; // edx double v13; // st7 double v14; // st7 double v15; // st4 double v16; // st5 double v17; // st3 double v18; // st3 double v19; // st3 double v20; // st3 double v21; // st2 signed int result; // eax double v23; // st2 double v24; // st3 double v25; // st2 double v26; // st6 double v27; // st3 double v28; // st3 double v29; // st3 double v30; // st3 double v31; // st2 double v32; // st3 double v33; // st3 float *v34; // ebx double v35; // st2 double v36; // st2 double v37; // st2 double v38; // st2 double v39; // rt1 double v40; // st3 double v41; // st6 double v42; // st6 double v43; // st3 double v44; // st3 double v45; // st3 double v46; // st3 double v47; // st2 double v48; // st6 double v49; // st3 double v50; // st3 double v51; // st3 double v52; // st3 double v53; // st2 double v54; // st6 double v55; // st3 double v56; // st3 double v57; // st3 double v58; // st3 double v59; // st2 double v60; // st6 double v61; // st3 double v62; // st3 double v63; // st2 double v64; // st3 double v65; // st2 double v66; // st6 double v67; // st3 double v68; // st3 double v69; // st2 double v70; // st3 double v71; // st2 double v72; // st6 double v73; // st3 double v74; // st3 double v75; // st2 double v76; // st3 double v77; // st2 double v78; // st6 double v79; // st3 double v80; // st3 double v81; // st2 double v82; // st3 double v83; // st2 double v84; // st6 double v85; // st3 double v86; // st3 double v87; // st2 double v88; // st3 double v89; // st2 double v90; // st2 double v91; // rt2 double v92; // st3 double v93; // st2 double v94; // st2 double v95; // st2 double v96; // st2 double v97; // st2 double v98; // st2 double v99; // st2 double v100; // st3 double v101; // st3 double v102; // st2 double v103; // st3 double v104; // st7 double v105; // st6 double v106; // st5 double v107; // st4 double v108; // st4 double v109; // rt2 double v110; // rtt double v111; // st4 double v112; // rt1 double v113; // st3 double v114; // st3 double v115; // st2 double v116; // st3 double v117; // st3 double v118; // st3 double v119; // st2 double v120; // st3 double v121; // st3 double v122; // st3 double v123; // st2 double v124; // st3 double v125; // rt0 double v126; // st4 double v127; // st7 double v128; // st6 double v129; // st5 double v130; // st4 double v131; // rtt double v132; // st4 double v133; // rt0 double v134; // st4 double v135; // st6 int v136; // eax int v137; // esi double v138; // st6 bool v139; // c0 float *v140; // esi double v141; // st6 float *v142; // eax double v143; // st6 float *v144; // eax float v145; // edx float v146; // ecx double v147; // st6 double v148; // st6 float *v149; // eax double v150; // st7 double v151; // st7 double v152; // st5 double v153; // st4 double v154; // st3 double v155; // st2 double v156; // st7 double v157; // st6 double v158; // st7 double v159; // st6 double v160; // st5 float *v161; // eax double v162; // st7 double v163; // st7 double v164; // st4 double v165; // st7 double v166; // st6 double v167; // st7 double v168; // st6 double v169; // st6 double v170; // st5 double v171; // rt2 double v172; // st4 float *v173; // eax double v174; // st7 double v175; // st7 double v176; // st6 double v177; // st4 double v178; // st3 double v179; // st2 double v180; // st7 double v181; // rt0 double v182; // st6 double v183; // st7 double v184; // st6 double v185; // st5 float *v186; // eax double v187; // st7 double v188; // st7 double v189; // st4 double v190; // st7 double v191; // rt0 double v192; // st6 double v193; // st7 double v194; // st6 double v195; // st6 double v196; // st5 double v197; // rtt double v198; // st4 float *v199; // eax double v200; // st7 double v201; // st7 double v202; // st6 double v203; // st5 double v204; // st4 double v205; // st7 double v206; // rtt double v207; // st6 double v208; // st7 double v209; // st6 double v210; // st5 double v211; // st5 double v212; // rt2 float *v213; // eax float *v214; // eax float *v215; // eax float *v216; // eax float *v217; // ecx float v218; // ST1C_4 float *v219; // eax float *v220; // eax float v221; // ecx float v222; // edx float v223; // eax double v224; // st7 double v225; // st7 float *v226; // ST08_4 double v227; // rt0 double v228; // st4 double v229; // st5 double v230; // rtt double v231; // st5 double v232; // st6 float v233; // ST1C_4 float *v234; // eax float *v235; // eax float v236; // ecx float v237; // edx float v238; // eax double v239; // st7 double v240; // st7 float *v241; // ST08_4 float *v242; // [esp+8h] [ebp-1B8h] int *v243; // [esp+Ch] [ebp-1B4h] float *v244; // [esp+10h] [ebp-1B0h] float *v245; // [esp+14h] [ebp-1ACh] float *v246; // [esp+18h] [ebp-1A8h] float *v247; // [esp+1Ch] [ebp-1A4h] int v248; // [esp+2Ch] [ebp-194h] char v249; // [esp+38h] [ebp-188h] char v250; // [esp+44h] [ebp-17Ch] char v251; // [esp+50h] [ebp-170h] int v252; // [esp+5Ch] [ebp-164h] char v253; // [esp+68h] [ebp-158h] char v254; // [esp+74h] [ebp-14Ch] char v255; // [esp+80h] [ebp-140h] int v256; // [esp+8Ch] [ebp-134h] char v257; // [esp+98h] [ebp-128h] char v258; // [esp+A4h] [ebp-11Ch] int v259; // [esp+B0h] [ebp-110h] int v260; // [esp+BCh] [ebp-104h] int v261; // [esp+C8h] [ebp-F8h] char v262; // [esp+D4h] [ebp-ECh] int v263; // [esp+E0h] [ebp-E0h] int v264; // [esp+ECh] [ebp-D4h] int v265; // [esp+F8h] [ebp-C8h] char v266; // [esp+104h] [ebp-BCh] int v267; // [esp+110h] [ebp-B0h] char v268; // [esp+11Ch] [ebp-A4h] float *v269; // [esp+128h] [ebp-98h] float *v270; // [esp+12Ch] [ebp-94h] float *v271; // [esp+130h] [ebp-90h] float *v272; // [esp+134h] [ebp-8Ch] int v273; // [esp+138h] [ebp-88h] int v274; // [esp+13Ch] [ebp-84h] float v275; // [esp+140h] [ebp-80h] float v276; // [esp+144h] [ebp-7Ch] float v277; // [esp+148h] [ebp-78h] float v278; // [esp+14Ch] [ebp-74h] float v279; // [esp+150h] [ebp-70h] float v280; // [esp+154h] [ebp-6Ch] float v281; // [esp+158h] [ebp-68h] float v282; // [esp+15Ch] [ebp-64h] float v283; // [esp+160h] [ebp-60h] float v284; // [esp+164h] [ebp-5Ch] double v285; // [esp+168h] [ebp-58h] int v286; // [esp+170h] [ebp-50h] float v287; // [esp+174h] [ebp-4Ch] float v288; // [esp+178h] [ebp-48h] int v289; // [esp+17Ch] [ebp-44h] float v290; // [esp+180h] [ebp-40h] float v291; // [esp+184h] [ebp-3Ch] float v292; // [esp+188h] [ebp-38h] float v293; // [esp+18Ch] [ebp-34h] float v294; // [esp+190h] [ebp-30h] float v295; // [esp+194h] [ebp-2Ch] float v296; // [esp+198h] [ebp-28h] float v297; // [esp+19Ch] [ebp-24h] float v298; // [esp+1A0h] [ebp-20h] float v299; // [esp+1A4h] [ebp-1Ch] float v300; // [esp+1A8h] [ebp-18h] float v301; // [esp+1ACh] [ebp-14h] float v302; // [esp+1B0h] [ebp-10h] float v303; // [esp+1B4h] [ebp-Ch] float v304; // [esp+1B8h] [ebp-8h] v4 = (float *)this; v5 = *(float *)(a2 + 60); HIDWORD(v285) = a3; v6 = v5 - *(float *)(this + 60); v272 = a4; v7 = *(float **)(a2 + 120); v280 = v6; v271 = (float *)(this + 60); v8 = (float *)(this + 72); v9 = *(float *)(a2 + 64) - *(float *)(this + 64); v269 = (float *)(a2 + 84); v281 = v9; v10 = *(float **)(this + 120); v282 = *(float *)(a2 + 68) - *(float *)(this + 68); *(float *)&v274 = v7[4] - v10[4]; v275 = v7[5] - v10[5]; v11 = v7[6]; v12 = 0; v13 = v11 - v10[6]; v273 = 0; v286 = 0; v276 = v13; v287 = v10[1]; v270 = (float *)(a2 + 96); v14 = 0.0; v283 = 0.0; v290 = *(float *)(a2 + 76) * v4[19] + *(float *)(a2 + 72) * v4[18] + *(float *)(a2 + 80) * v4[20]; v291 = v4[19] * *(float *)(a2 + 88) + v4[18] * *(float *)(a2 + 84) + v4[20] * *(float *)(a2 + 92); v292 = v4[18] * *(float *)(a2 + 96) + *(float *)(a2 + 100) * v4[19] + *(float *)(a2 + 104) * v4[20]; v299 = v4[19] * v281 + v280 * v4[18] + v4[20] * v282; *(float *)&v289 = v4[19] * v275 + *(float *)&v274 * v4[18] + v4[20] * v276; v15 = v287; v16 = v299; v302 = *(float *)&v289 * v287 + v299; *(float *)&v289 = *(float *)(a2 + 112) * v291; *(float *)&v289 = fabs(*(float *)&v289); v17 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 108) * v290; *(float *)&v289 = fabs(*(float *)&v289); v18 = v17 + *(float *)&v289; *(float *)&v289 = v292 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v18 + *(float *)&v289; v19 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(this + 108)); v287 = v19 + *(float *)&v289; v20 = v287; v21 = v302; if ( v287 >= (double)v299 ) { v24 = v302; v287 = -v287; v25 = v287; if ( v287 > v16 ) { if ( v25 > v24 ) return 0; v288 = (v25 - v16) * v15 / (v24 - v16); if ( v288 > 0.0 ) { v12 = -1; v283 = v288; v273 = 1; v286 = -1; } } } else { if ( v21 > v20 ) return 0; v23 = (v20 - v16) * v15 / (v21 - v16); v24 = v302; v288 = v23; if ( v288 > 0.0 ) { v12 = 1; v283 = v288; v273 = 1; v286 = 1; } } v293 = *(float *)(a2 + 72) * *(float *)(this + 84) + *(float *)(a2 + 76) * *(float *)(this + 88) + *(float *)(a2 + 80) * *(float *)(this + 92); v294 = *(float *)(a2 + 88) * *(float *)(this + 88) + *(float *)(this + 84) * *(float *)(a2 + 84) + *(float *)(a2 + 92) * *(float *)(this + 92); v295 = *v270 * *(float *)(this + 84) + v270[1] * *(float *)(this + 88) + v270[2] * *(float *)(this + 92); v26 = v24; v300 = v281 * *(float *)(this + 88) + v280 * *(float *)(this + 84) + v282 * *(float *)(this + 92); *(float *)&v289 = *(float *)&v274 * *(float *)(this + 84) + v275 * *(float *)(this + 88) + v276 * *(float *)(this + 92); v303 = *(float *)&v289 * v15 + v300; *(float *)&v289 = *(float *)(a2 + 112) * v294; *(float *)&v289 = fabs(*(float *)&v289); v27 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 108) * v293; *(float *)&v289 = fabs(*(float *)&v289); v28 = v27 + *(float *)&v289; *(float *)&v289 = v295 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v28 + *(float *)&v289; v29 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(this + 112)); v287 = v29 + *(float *)&v289; v30 = v287; if ( v287 >= v16 ) { v287 = -v30; v33 = v287; if ( v287 <= v16 ) { v32 = v283; goto LABEL_21; } if ( v33 <= v26 ) { v288 = (v33 - v16) * v15 / (v26 - v16); v31 = v283; if ( v283 < (double)v288 ) { v12 = -1; v283 = v288; v273 = 2; v32 = v288; v286 = -1; goto LABEL_21; } goto LABEL_20; } return 0; } if ( v30 < v26 ) return 0; v288 = (v30 - v16) * v15 / (v26 - v16); v31 = v283; if ( v283 < (double)v288 ) { v12 = 1; v283 = v288; v273 = 2; v32 = v288; v286 = 1; goto LABEL_21; } LABEL_20: v32 = v31; LABEL_21: v34 = (float *)(this + 96); v296 = *(float *)(a2 + 72) * *(float *)(this + 96) + *(float *)(this + 100) * *(float *)(a2 + 76) + *(float *)(this + 104) * *(float *)(a2 + 80); v297 = *(float *)(this + 100) * v269[1] + *(float *)(this + 96) * *v269 + *(float *)(this + 104) * v269[2]; v298 = *v270 * *(float *)(this + 96) + v270[1] * *(float *)(this + 100) + v270[2] * *(float *)(this + 104); v301 = v280 * *(float *)(this + 96) + *(float *)(this + 100) * v281 + *(float *)(this + 104) * v282; *(float *)&v289 = *(float *)&v274 * *(float *)(this + 96) + *(float *)(this + 100) * v275 + *(float *)(this + 104) * v276; v304 = *(float *)&v289 * v15 + v301; *(float *)&v289 = *(float *)(a2 + 112) * v297; *(float *)&v289 = fabs(*(float *)&v289); v35 = *(float *)&v289; *(float *)&v289 = v296 * *(float *)(a2 + 108); *(float *)&v289 = fabs(*(float *)&v289); v36 = v35 + *(float *)&v289; *(float *)&v289 = v298 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v36 + *(float *)&v289; v37 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(this + 116)); v287 = v37 + *(float *)&v289; v38 = v287; if ( v287 >= v16 ) { v287 = -v38; v90 = v287; if ( v287 <= v16 ) { v41 = v32; } else { if ( v90 > v26 ) return 0; v91 = v32; v92 = (v90 - v16) * v15 / (v26 - v16); v41 = v91; v288 = v92; if ( v288 > v91 ) { v273 = 3; v42 = v15; v12 = -1; v283 = v288; goto LABEL_26; } } } else { if ( v38 < v26 ) return 0; v39 = v32; v40 = (v38 - v16) * v15 / (v26 - v16); v41 = v39; v288 = v40; if ( v288 > v39 ) { v273 = 3; v42 = v15; v12 = 1; v283 = v288; LABEL_26: v286 = v12; v15 = v42; v41 = v283; goto LABEL_27; } } LABEL_27: *(float *)&v289 = *(float *)(this + 112) * v293; *(float *)&v289 = fabs(*(float *)&v289); v43 = *(float *)&v289; *(float *)&v289 = v290 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v44 = v43 + *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v296; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v44 + *(float *)&v289; v45 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(a2 + 108)); v287 = v45 + *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 72) * v280 + *(float *)(a2 + 76) * v281 + *(float *)(a2 + 80) * v282; v288 = *(float *)(a2 + 72) * *(float *)&v274 + *(float *)(a2 + 76) * v275 + *(float *)(a2 + 80) * v276; v46 = *(float *)&v289; v288 = v288 * v15 + *(float *)&v289; v47 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v47; v93 = v287; if ( v287 > v46 ) { if ( v288 < v93 ) return 0; v288 = (v93 - v46) * v15 / (v288 - v46); if ( v288 > v41 ) { v273 = 4; v48 = v15; v12 = -1; v283 = v288; goto LABEL_31; } } } else { if ( v288 > v47 ) return 0; v288 = (v47 - v46) * v15 / (v288 - v46); if ( v288 > v41 ) { v273 = 4; v48 = v15; v12 = 1; v283 = v288; LABEL_31: v286 = v12; v15 = v48; v41 = v283; goto LABEL_32; } } LABEL_32: *(float *)&v289 = *(float *)(this + 112) * v294; *(float *)&v289 = fabs(*(float *)&v289); v49 = *(float *)&v289; *(float *)&v289 = v291 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v50 = v49 + *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v297; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v50 + *(float *)&v289; v51 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(a2 + 112)); v287 = v51 + *(float *)&v289; *(float *)&v289 = v280 * *v269 + v281 * v269[1] + v282 * v269[2]; v288 = *(float *)&v274 * *v269 + v275 * v269[1] + v276 * v269[2]; v52 = *(float *)&v289; v288 = v288 * v15 + *(float *)&v289; v53 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v53; v94 = v287; if ( v287 > v52 ) { if ( v288 < v94 ) return 0; v288 = (v94 - v52) * v15 / (v288 - v52); if ( v288 > v41 ) { v273 = 5; v54 = v15; v12 = -1; v283 = v288; goto LABEL_36; } } } else { if ( v288 > v53 ) return 0; v288 = (v53 - v52) * v15 / (v288 - v52); if ( v288 > v41 ) { v273 = 5; v54 = v15; v12 = 1; v283 = v288; LABEL_36: v286 = v12; v15 = v54; v41 = v283; goto LABEL_37; } } LABEL_37: *(float *)&v289 = *(float *)(this + 112) * v295; *(float *)&v289 = fabs(*(float *)&v289); v55 = *(float *)&v289; *(float *)&v289 = v292 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v56 = v55 + *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v298; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v56 + *(float *)&v289; v57 = *(float *)&v289; *(float *)&v289 = fabs(*(float *)(a2 + 116)); v287 = v57 + *(float *)&v289; *(float *)&v289 = v270[1] * v281 + v280 * *v270 + v270[2] * v282; v288 = v270[1] * v275 + *(float *)&v274 * *v270 + v270[2] * v276; v58 = *(float *)&v289; v288 = v288 * v15 + *(float *)&v289; v59 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v59; v95 = v287; if ( v287 > v58 ) { if ( v288 < v95 ) return 0; v288 = (v95 - v58) * v15 / (v288 - v58); if ( v288 > v41 ) { v273 = 6; v60 = v15; v12 = -1; v283 = v288; goto LABEL_41; } } } else { if ( v288 > v59 ) return 0; v288 = (v59 - v58) * v15 / (v288 - v58); if ( v288 > v41 ) { v273 = 6; v60 = v15; v12 = 1; v283 = v288; LABEL_41: v286 = v12; v15 = v60; v41 = v283; goto LABEL_42; } } LABEL_42: *(float *)&v289 = *(float *)(a2 + 112) * v292; *(float *)&v289 = fabs(*(float *)&v289); v61 = *(float *)&v289; *(float *)&v289 = v291 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v61 + *(float *)&v289; v62 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 112) * v296; *(float *)&v289 = fabs(*(float *)&v289); v63 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v293; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v63 + *(float *)&v289; v287 = v62 + *(float *)&v289; *(float *)&v289 = v301 * v293 - v296 * v300; v288 = v304 * v293 - v296 * v303; v64 = *(float *)&v289; v65 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v65; v96 = v287; if ( v287 > v64 ) { if ( v288 < v96 ) return 0; v288 = (v96 - v64) * v15 / (v288 - v64); if ( v288 > v41 ) { v273 = 7; v66 = v15; v12 = -1; v283 = v288; goto LABEL_46; } } } else { if ( v288 > v65 ) return 0; v288 = (v65 - v64) * v15 / (v288 - v64); if ( v288 > v41 ) { v273 = 7; v66 = v15; v12 = 1; v283 = v288; LABEL_46: v286 = v12; v15 = v66; v41 = v283; goto LABEL_47; } } LABEL_47: *(float *)&v289 = *(float *)(a2 + 108) * v292; *(float *)&v289 = fabs(*(float *)&v289); v67 = *(float *)&v289; *(float *)&v289 = v290 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v67 + *(float *)&v289; v68 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 112) * v297; *(float *)&v289 = fabs(*(float *)&v289); v69 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v294; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v69 + *(float *)&v289; v287 = v68 + *(float *)&v289; *(float *)&v289 = v301 * v294 - v297 * v300; v288 = v304 * v294 - v297 * v303; v70 = *(float *)&v289; v71 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v71; v97 = v287; if ( v287 > v70 ) { if ( v288 < v97 ) return 0; v288 = (v97 - v70) * v15 / (v288 - v70); if ( v288 > v41 ) { v273 = 8; v72 = v15; v12 = -1; v283 = v288; goto LABEL_51; } } } else { if ( v288 > v71 ) return 0; v288 = (v71 - v70) * v15 / (v288 - v70); if ( v288 > v41 ) { v273 = 8; v72 = v15; v12 = 1; v283 = v288; LABEL_51: v286 = v12; v15 = v72; v41 = v283; goto LABEL_52; } } LABEL_52: *(float *)&v289 = *(float *)(this + 112) * v298; *(float *)&v289 = fabs(*(float *)&v289); v73 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v295; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v73 + *(float *)&v289; v74 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 108) * v291; *(float *)&v289 = fabs(*(float *)&v289); v75 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 112) * v290; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v75 + *(float *)&v289; v287 = v74 + *(float *)&v289; *(float *)&v289 = v301 * v295 - v298 * v300; v288 = v304 * v295 - v298 * v303; v76 = *(float *)&v289; v77 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v77; v98 = v287; if ( v287 > v76 ) { if ( v288 < v98 ) return 0; v288 = (v98 - v76) * v15 / (v288 - v76); if ( v288 > v41 ) { v273 = 9; v78 = v15; v12 = -1; v283 = v288; goto LABEL_56; } } } else { if ( v288 > v77 ) return 0; v288 = (v77 - v76) * v15 / (v288 - v76); if ( v288 > v41 ) { v273 = 9; v78 = v15; v12 = 1; v283 = v288; LABEL_56: v286 = v12; v15 = v78; v41 = v283; goto LABEL_57; } } LABEL_57: *(float *)&v289 = *(float *)(a2 + 112) * v295; *(float *)&v289 = fabs(*(float *)&v289); v79 = *(float *)&v289; *(float *)&v289 = v294 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v79 + *(float *)&v289; v80 = *(float *)&v289; *(float *)&v289 = v296 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v81 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v290; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v81 + *(float *)&v289; v287 = v80 + *(float *)&v289; *(float *)&v289 = v296 * v16 - v301 * v290; v288 = v296 * v302 - v304 * v290; v82 = *(float *)&v289; v83 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v83; v99 = v287; if ( v287 > v82 ) { if ( v288 < v99 ) return 0; v288 = (v99 - v82) * v15 / (v288 - v82); if ( v288 > v41 ) { v273 = 10; v84 = v15; v12 = -1; v283 = v288; goto LABEL_61; } } } else { if ( v288 > v83 ) return 0; v288 = (v83 - v82) * v15 / (v288 - v82); if ( v288 > v41 ) { v273 = 10; v84 = v15; v12 = 1; v283 = v288; LABEL_61: v286 = v12; v15 = v84; v41 = v283; goto LABEL_62; } } LABEL_62: *(float *)&v289 = v297 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v85 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v291; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v85 + *(float *)&v289; v86 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 108) * v295; *(float *)&v289 = fabs(*(float *)&v289); v87 = *(float *)&v289; *(float *)&v289 = v293 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v87 + *(float *)&v289; v287 = v86 + *(float *)&v289; *(float *)&v289 = v297 * v16 - v301 * v291; v288 = v297 * v302 - v304 * v291; v88 = *(float *)&v289; v89 = v287; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v89; if ( v287 > v88 ) { if ( v288 < (double)v287 ) return 0; v288 = (v287 - v88) * v15 / (v288 - v88); if ( v288 <= v41 ) { v14 = 0.0; } else { v12 = -1; v273 = 11; v283 = v288; v286 = -1; v14 = 0.0; v41 = v288; } } } else { if ( v288 > v89 ) return 0; v288 = (v89 - v88) * v15 / (v288 - v88); if ( v288 > v41 ) { v12 = 1; v273 = 11; v283 = v288; v286 = 1; v41 = v288; } } *(float *)&v289 = v298 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v100 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 116) * v292; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v100 + *(float *)&v289; v101 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 108) * v294; *(float *)&v289 = fabs(*(float *)&v289); v102 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 112) * v293; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v102 + *(float *)&v289; v287 = v101 + *(float *)&v289; *(float *)&v289 = v298 * v16 - v301 * v292; v288 = v298 * v302 - v304 * v292; v103 = *(float *)&v289; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v287; if ( v287 <= v103 ) { v109 = v15; v108 = v14; v104 = v109; goto LABEL_124; } if ( v288 >= (double)v287 ) { v104 = v15; v288 = (v287 - v103) * v15 / (v288 - v103); if ( v288 > v41 ) { v12 = -1; v105 = v299; v273 = 12; v283 = v288; v286 = -1; v106 = v288; v107 = 0.0; goto LABEL_125; } goto LABEL_122; } return 0; } if ( v288 > (double)v287 ) return 0; v104 = v15; v288 = (v287 - v103) * v15 / (v288 - v103); if ( v288 > v41 ) { v12 = 1; v105 = v299; v273 = 12; v283 = v288; v286 = 1; v106 = v288; v107 = 0.0; goto LABEL_125; } LABEL_122: v108 = 0.0; LABEL_124: v110 = v108; v111 = v41; v105 = v299; v112 = v111; v107 = v110; v106 = v112; LABEL_125: *(float *)&v289 = v293 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v113 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 112) * v290; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v113 + *(float *)&v289; v114 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 112) * v298; *(float *)&v289 = fabs(*(float *)&v289); v115 = *(float *)&v289; *(float *)&v289 = v297 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v115 + *(float *)&v289; v287 = v114 + *(float *)&v289; *(float *)&v289 = v300 * v290 - v293 * v105; v288 = v303 * v290 - v293 * v302; v116 = *(float *)&v289; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v287; if ( v287 <= v116 ) goto LABEL_135; if ( v288 < (double)v287 ) return 0; v288 = (v287 - v116) * v104 / (v288 - v116); if ( v288 > v106 ) { v12 = -1; v283 = v288; v273 = 13; v106 = v288; v286 = -1; v107 = 0.0; goto LABEL_135; } } else { if ( v288 > (double)v287 ) return 0; v288 = (v287 - v116) * v104 / (v288 - v116); if ( v288 > v106 ) { v12 = 1; v283 = v288; v273 = 13; v106 = v288; v286 = 1; v107 = 0.0; goto LABEL_135; } } v107 = 0.0; LABEL_135: *(float *)&v289 = v298 * *(float *)(a2 + 108); *(float *)&v289 = fabs(*(float *)&v289); v117 = *(float *)&v289; *(float *)&v289 = v296 * *(float *)(a2 + 116); *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v117 + *(float *)&v289; v118 = *(float *)&v289; *(float *)&v289 = v294 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v119 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 112) * v291; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v119 + *(float *)&v289; v287 = v118 + *(float *)&v289; *(float *)&v289 = v300 * v291 - v294 * v105; v288 = v303 * v291 - v294 * v302; v120 = *(float *)&v289; if ( v287 >= (double)*(float *)&v289 ) { v287 = -v287; if ( v287 <= v120 ) goto LABEL_144; if ( v288 < (double)v287 ) return 0; v288 = (v287 - v120) * v104 / (v288 - v120); if ( v288 > v106 ) { v12 = -1; v283 = v288; v273 = 14; v106 = v288; v286 = -1; v107 = 0.0; goto LABEL_144; } } else { if ( v288 > (double)v287 ) return 0; v288 = (v287 - v120) * v104 / (v288 - v120); if ( v288 > v106 ) { v12 = 1; v283 = v288; v273 = 14; v106 = v288; v286 = 1; v107 = 0.0; goto LABEL_144; } } v107 = 0.0; LABEL_144: *(float *)&v289 = v297 * *(float *)(a2 + 108); *(float *)&v289 = fabs(*(float *)&v289); v121 = *(float *)&v289; *(float *)&v289 = *(float *)(a2 + 112) * v296; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v121 + *(float *)&v289; v122 = *(float *)&v289; *(float *)&v289 = v295 * *(float *)(this + 108); *(float *)&v289 = fabs(*(float *)&v289); v123 = *(float *)&v289; *(float *)&v289 = *(float *)(this + 112) * v292; *(float *)&v289 = fabs(*(float *)&v289); *(float *)&v289 = v123 + *(float *)&v289; v287 = v122 + *(float *)&v289; *(float *)&v289 = v300 * v292 - v105 * v295; v288 = v292 * v303 - v295 * v302; v124 = *(float *)&v289; if ( v287 < (double)*(float *)&v289 ) { if ( v288 > (double)v287 ) return 0; v125 = v107; v126 = v104 * (v287 - v124); v127 = v125; v128 = v106; v288 = v126 / (v288 - v124); if ( v288 > v106 ) { v12 = 1; v283 = v288; v273 = 15; v128 = v288; v286 = 1; v129 = v295; v130 = v292; goto LABEL_155; } LABEL_153: v129 = v295; v130 = v292; goto LABEL_155; } v287 = -v287; if ( v287 > v124 ) { if ( v288 < (double)v287 ) return 0; v131 = v107; v132 = v104 * (v287 - v124); v127 = v131; v128 = v106; v288 = v132 / (v288 - v124); if ( v288 > v106 ) { v12 = -1; v283 = v288; v273 = 15; v128 = v288; v286 = -1; v129 = v295; v130 = v292; goto LABEL_155; } goto LABEL_153; } v127 = v107; v128 = v106; v130 = v292; v129 = v295; LABEL_155: v133 = v130; v134 = v128; v135 = v133; *(float *)HIDWORD(v285) = v134; v289 = *(_DWORD *)(this + 120) + 16; v136 = v273 - 1; switch ( v273 ) { case 1: case 2: case 3: v137 = 12 * v136; v138 = v127; if ( v127 >= *(&v290 + 3 * v136) ) { if ( v127 <= *(float *)((char *)&v290 + v137) ) v302 = v127; else v302 = (double)v286 * *(float *)(a2 + 108); } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } if ( v127 >= *(float *)((char *)&v291 + v137) ) { if ( v127 <= *(float *)((char *)&v291 + v137) ) v303 = v127; else v303 = (double)v286 * *(float *)(a2 + 112); } else { HIDWORD(v285) = -v12; v303 = (double)-v12 * *(float *)(a2 + 112); } v139 = v127 < *(float *)((char *)&v292 + v137); v140 = (float *)((char *)&v292 + v137); if ( v139 ) { HIDWORD(v285) = -v12; v141 = (double)-v12; } else { if ( v127 <= *v140 ) goto LABEL_171; v141 = (double)v286; } v138 = v141 * *(float *)(a2 + 116); LABEL_171: v304 = v138; v284 = *v270 * v304; *(float *)&v285 = v270[1] * v304; *((float *)&v285 + 1) = v304 * v270[2]; v299 = *v269 * v303; v300 = v303 * v269[1]; v142 = *(float **)(a2 + 120); v301 = v303 * v269[2]; v143 = v302; v302 = *(float *)(a2 + 72) * v302; v303 = *(float *)(a2 + 76) * v143; v304 = v143 * *(float *)(a2 + 80); v280 = v142[4] * v134; v281 = v142[5] * v134; v282 = v134 * v142[6]; *(float *)&v274 = *(float *)(a2 + 60) + v280; v275 = *(float *)(a2 + 64) + v281; v276 = *(float *)(a2 + 68) + v282; v280 = *(float *)&v274 + v302; v281 = v275 + v303; v282 = v276 + v304; *(float *)&v274 = v280 + v299; v275 = v281 + v300; v276 = v282 + v301; v280 = *(float *)&v274 + v284; v281 = v275 + *(float *)&v285; v282 = v276 + *((float *)&v285 + 1); v144 = v272; v145 = v281; *v272 = v280; v146 = v282; v144[1] = v145; v144[2] = v146; goto LABEL_399; case 4: case 5: case 6: v147 = v127; if ( v127 >= *((float *)&v286 + v273) ) { if ( v127 <= *((float *)&v286 + v273) ) { v299 = v127; } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } } else { v299 = (double)v286 * *(float *)(this + 108); } if ( v127 >= *((float *)&v289 + v273) ) { if ( v127 <= *((float *)&v289 + v273) ) { v300 = v127; } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } } else { v300 = (double)v286 * *(float *)(this + 112); } if ( v127 >= *(&v292 + v273) ) { if ( v127 <= *(&v292 + v273) ) goto LABEL_187; HIDWORD(v285) = -v12; v148 = (double)-v12; } else { v148 = (double)v286; } v147 = v148 * *(float *)(this + 116); LABEL_187: v301 = v147; v277 = v301 * *v34; v278 = v301 * *(float *)(this + 100); v279 = v301 * *(float *)(this + 104); v284 = v300 * *(float *)(this + 84); *(float *)&v285 = v300 * *(float *)(this + 88); *((float *)&v285 + 1) = v300 * *(float *)(this + 92); v302 = *v8 * v299; v303 = *(float *)(this + 76) * v299; v304 = v299 * *(float *)(this + 80); v280 = *(float *)v289 * v134; v281 = *(float *)(v289 + 4) * v134; v282 = v134 * *(float *)(v289 + 8); *(float *)&v274 = v280 + *v271; v275 = v271[1] + v281; v149 = v272; v276 = v282 + v271[2]; v280 = *(float *)&v274 + v302; v281 = v275 + v303; v282 = v276 + v304; *(float *)&v274 = v280 + v284; v275 = v281 + *(float *)&v285; v276 = v282 + *((float *)&v285 + 1); v280 = *(float *)&v274 + v277; v150 = v275; *v272 = v280; v281 = v150 + v278; v151 = v276; v149[1] = v281; v282 = v151 + v279; v149[2] = v282; LABEL_399: result = 1; break; case 7: v152 = v134; v153 = v296; if ( v296 <= v127 ) { if ( v153 >= v127 ) v300 = v127; else v300 = (double)v286 * *(float *)(this + 112); } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } if ( v293 <= v127 ) { if ( v293 >= v127 ) { v301 = v127; } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } } else { v301 = (double)v286 * *(float *)(this + 116); } if ( v135 <= v127 ) { if ( v135 >= v127 ) v303 = v127; else v303 = (double)v286 * *(float *)(a2 + 112); } else { HIDWORD(v285) = -v12; v303 = (double)-v12 * *(float *)(a2 + 112); } if ( v291 <= v127 ) { if ( v291 >= v127 ) v304 = v127; else v304 = (double)-v12 * *(float *)(a2 + 116); } else { v304 = (double)v286 * *(float *)(a2 + 116); } v287 = 1.0 - v290 * v290; *((float *)&v285 + 1) = fabs(v287); v154 = v301; v155 = v300; if ( *((float *)&v285 + 1) <= 0.000001 ) goto LABEL_210; v277 = *(float *)&v274 * v152; v278 = v275 * v152; v279 = v276 * v152; *(float *)&v274 = v280 + v277; v275 = v278 + v281; v276 = v279 + v282; *((float *)&v285 + 1) = *(float *)(a2 + 80) * v276 + *(float *)(a2 + 76) * v275 + *(float *)(a2 + 72) * *(float *)&v274; *((float *)&v285 + 1) = v154 * v153 + v293 * v155 - *((float *)&v285 + 1); v156 = *((float *)&v285 + 1) * v290; *((float *)&v285 + 1) = v276 * *(float *)(this + 80) + *(float *)&v274 * *v8 + v275 * *(float *)(this + 76); v157 = (v156 + *((float *)&v285 + 1) + v303 * v291 + v304 * v292) / v287; v158 = v152; v299 = v157; v159 = v301; v160 = v300; goto LABEL_211; case 8: v152 = v134; v164 = v297; if ( v297 <= v127 ) { if ( v164 >= v127 ) v300 = v127; else v300 = (double)v286 * *(float *)(this + 112); } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } if ( v294 <= v127 ) { if ( v294 >= v127 ) { v301 = v127; } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } } else { v301 = (double)v286 * *(float *)(this + 116); } if ( v135 <= v127 ) { if ( v135 >= v127 ) { v302 = v127; } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } } else { v302 = (double)v286 * *(float *)(a2 + 108); } if ( v290 <= v127 ) { if ( v290 >= v127 ) v304 = v127; else v304 = (double)v286 * *(float *)(a2 + 116); } else { v304 = (double)-v12 * *(float *)(a2 + 116); } v287 = 1.0 - v291 * v291; *((float *)&v285 + 1) = fabs(v287); v154 = v301; v155 = v300; if ( *((float *)&v285 + 1) <= 0.000001 ) { LABEL_210: v299 = v127; v158 = v152; v160 = v155; v159 = v154; } else { v277 = *(float *)&v274 * v152; v278 = v275 * v152; v279 = v276 * v152; *(float *)&v274 = v280 + v277; v275 = v278 + v281; v276 = v279 + v282; *((float *)&v285 + 1) = *(float *)&v274 * *v269 + v275 * v269[1] + v276 * v269[2]; *((float *)&v285 + 1) = v154 * v164 + v294 * v155 - *((float *)&v285 + 1); v165 = *((float *)&v285 + 1) * v291; *((float *)&v285 + 1) = v275 * *(float *)(this + 76) + *(float *)&v274 * *v8 + v276 * *(float *)(this + 80); v166 = (v165 + *((float *)&v285 + 1) + v302 * v290 + v304 * v292) / v287; v158 = v152; v299 = v166; v159 = v301; v160 = v300; } LABEL_211: v284 = v159 * *v34; *(float *)&v285 = v159 * *(float *)(this + 100); *((float *)&v285 + 1) = v159 * *(float *)(this + 104); v302 = v160 * *(float *)(this + 84); v303 = v160 * *(float *)(this + 88); v304 = v160 * *(float *)(this + 92); *(float *)&v274 = *v8 * v299; v275 = *(float *)(this + 76) * v299; v276 = v299 * *(float *)(this + 80); v277 = *(float *)v289 * v158; v278 = *(float *)(v289 + 4) * v158; v279 = v158 * *(float *)(v289 + 8); v280 = v277 + *v271; v281 = v271[1] + v278; v161 = v272; v282 = v279 + v271[2]; v277 = v280 + *(float *)&v274; v278 = v281 + v275; v279 = v282 + v276; v280 = v277 + v302; v281 = v278 + v303; v282 = v279 + v304; v277 = v280 + v284; v162 = v281; *v272 = v277; v278 = v162 + *(float *)&v285; v163 = v282; v161[1] = v278; v279 = v163 + *((float *)&v285 + 1); v161[2] = v279; goto LABEL_399; case 9: if ( v298 <= v127 ) { if ( v298 >= v127 ) v300 = v127; else v300 = (double)v286 * *(float *)(this + 112); } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } if ( v129 <= v127 ) { if ( v129 >= v127 ) { v301 = v127; } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } } else { v301 = (double)v286 * *(float *)(this + 116); } if ( v291 <= v127 ) { if ( v291 >= v127 ) v302 = v127; else v302 = (double)v286 * *(float *)(a2 + 108); } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } if ( v290 <= v127 ) { if ( v290 >= v127 ) v303 = v127; else v303 = (double)-v12 * *(float *)(a2 + 112); } else { v303 = (double)v286 * *(float *)(a2 + 112); } v287 = 1.0 - v135 * v135; *((float *)&v285 + 1) = fabs(v287); if ( *((float *)&v285 + 1) <= 0.000001 ) { v170 = v300; v169 = v301; v171 = v134; v172 = v127; v167 = v171; v299 = v172; } else { v277 = *(float *)&v274 * v134; v278 = v275 * v134; v279 = v276 * v134; *(float *)&v274 = v280 + v277; v275 = v278 + v281; v276 = v279 + v282; v167 = v134; *((float *)&v285 + 1) = v270[2] * v276 + v270[1] * v275 + *v270 * *(float *)&v274; *((float *)&v285 + 1) = v129 * v300 + v298 * v301 - *((float *)&v285 + 1); v168 = *((float *)&v285 + 1) * v292; *((float *)&v285 + 1) = v276 * *(float *)(this + 80) + v275 * *(float *)(this + 76) + *(float *)&v274 * *v8; v299 = (v168 + *((float *)&v285 + 1) + v302 * v290 + v303 * v291) / v287; v169 = v301; v170 = v300; } v284 = v169 * *v34; *(float *)&v285 = v169 * *(float *)(this + 100); *((float *)&v285 + 1) = v169 * *(float *)(this + 104); v302 = v170 * *(float *)(this + 84); v303 = v170 * *(float *)(this + 88); v304 = v170 * *(float *)(this + 92); *(float *)&v274 = *v8 * v299; v275 = *(float *)(this + 76) * v299; v276 = v299 * *(float *)(this + 80); v277 = *(float *)v289 * v167; v278 = *(float *)(v289 + 4) * v167; v279 = v167 * *(float *)(v289 + 8); v280 = v277 + *v271; v281 = v271[1] + v278; v173 = v272; v282 = v279 + v271[2]; v277 = v280 + *(float *)&v274; v278 = v281 + v275; v279 = v282 + v276; v280 = v277 + v302; v281 = v278 + v303; v282 = v279 + v304; v277 = v280 + v284; v174 = v281; *v272 = v277; v278 = v174 + *(float *)&v285; v175 = v282; v173[1] = v278; v279 = v175 + *((float *)&v285 + 1); v173[2] = v279; goto LABEL_399; case 10: v176 = v134; v177 = v296; if ( v296 <= v127 ) { if ( v177 >= v127 ) { v299 = v127; } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } } else { v299 = (double)v286 * *(float *)(this + 108); } if ( v290 <= v127 ) { if ( v290 >= v127 ) v301 = v127; else v301 = (double)v286 * *(float *)(this + 116); } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } if ( v129 <= v127 ) { if ( v129 >= v127 ) v303 = v127; else v303 = (double)v286 * *(float *)(a2 + 112); } else { HIDWORD(v285) = -v12; v303 = (double)-v12 * *(float *)(a2 + 112); } if ( v294 <= v127 ) { if ( v294 >= v127 ) v304 = v127; else v304 = (double)-v12 * *(float *)(a2 + 116); } else { v304 = (double)v286 * *(float *)(a2 + 116); } v287 = 1.0 - v293 * v293; *((float *)&v285 + 1) = fabs(v287); v178 = v301; v179 = v299; if ( *((float *)&v285 + 1) <= 0.000001 ) goto LABEL_280; v277 = *(float *)&v274 * v176; v278 = v275 * v176; v279 = v276 * v176; *(float *)&v274 = v280 + v277; v275 = v278 + v281; v276 = v279 + v282; *((float *)&v285 + 1) = *(float *)(a2 + 80) * v276 + *(float *)(a2 + 72) * *(float *)&v274 + *(float *)(a2 + 76) * v275; *((float *)&v285 + 1) = v177 * v178 + v290 * v179 - *((float *)&v285 + 1); v180 = *((float *)&v285 + 1) * v293; *((float *)&v285 + 1) = v276 * *(float *)(this + 92) + v275 * *(float *)(this + 88) + *(float *)&v274 * *(float *)(this + 84); v181 = v176; v182 = (v180 + *((float *)&v285 + 1) + v303 * v294 + v304 * v295) / v287; v183 = v181; v300 = v182; v184 = v301; v185 = v299; goto LABEL_281; case 11: v176 = v134; v189 = v297; if ( v297 <= v127 ) { if ( v189 >= v127 ) { v299 = v127; } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } } else { v299 = (double)v286 * *(float *)(this + 108); } if ( v291 <= v127 ) { if ( v291 >= v127 ) v301 = v127; else v301 = (double)v286 * *(float *)(this + 116); } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } if ( v129 <= v127 ) { if ( v129 >= v127 ) { v302 = v127; } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } } else { v302 = (double)v286 * *(float *)(a2 + 108); } if ( v293 <= v127 ) { if ( v293 >= v127 ) v304 = v127; else v304 = (double)v286 * *(float *)(a2 + 116); } else { v304 = (double)-v12 * *(float *)(a2 + 116); } v287 = 1.0 - v294 * v294; *((float *)&v285 + 1) = fabs(v287); v178 = v301; v179 = v299; if ( *((float *)&v285 + 1) <= 0.000001 ) { LABEL_280: v300 = v127; v183 = v176; v185 = v179; v184 = v178; } else { v277 = *(float *)&v274 * v176; v278 = v275 * v176; v279 = v276 * v176; *(float *)&v274 = v280 + v277; v275 = v278 + v281; v276 = v279 + v282; *((float *)&v285 + 1) = *(float *)&v274 * *v269 + v275 * v269[1] + v276 * v269[2]; *((float *)&v285 + 1) = v189 * v178 + v291 * v179 - *((float *)&v285 + 1); v190 = *((float *)&v285 + 1) * v294; *((float *)&v285 + 1) = v275 * *(float *)(this + 88) + *(float *)&v274 * *(float *)(this + 84) + v276 * *(float *)(this + 92); v191 = v176; v192 = (v190 + *((float *)&v285 + 1) + v302 * v293 + v304 * v295) / v287; v183 = v191; v300 = v192; v184 = v301; v185 = v299; } LABEL_281: v284 = v184 * *v34; *(float *)&v285 = v184 * *(float *)(this + 100); *((float *)&v285 + 1) = v184 * *(float *)(this + 104); v302 = v300 * *(float *)(this + 84); v303 = v300 * *(float *)(this + 88); v304 = v300 * *(float *)(this + 92); *(float *)&v274 = *v8 * v185; v275 = *(float *)(this + 76) * v185; v276 = v185 * *(float *)(this + 80); v277 = *(float *)v289 * v183; v278 = *(float *)(v289 + 4) * v183; v279 = v183 * *(float *)(v289 + 8); v280 = v277 + *v271; v281 = v271[1] + v278; v186 = v272; v282 = v279 + v271[2]; v277 = v280 + *(float *)&v274; v278 = v281 + v275; v279 = v282 + v276; v280 = v277 + v302; v281 = v278 + v303; v282 = v279 + v304; v277 = v280 + v284; v187 = v281; *v272 = v277; v278 = v187 + *(float *)&v285; v188 = v282; v186[1] = v278; v279 = v188 + *((float *)&v285 + 1); v186[2] = v279; goto LABEL_399; case 12: if ( v298 <= v127 ) { if ( v298 >= v127 ) { v299 = v127; } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } } else { v299 = (double)v286 * *(float *)(this + 108); } if ( v135 <= v127 ) { if ( v135 >= v127 ) v301 = v127; else v301 = (double)v286 * *(float *)(this + 116); } else { HIDWORD(v285) = -v12; v301 = (double)-v12 * *(float *)(this + 116); } if ( v294 <= v127 ) { if ( v294 >= v127 ) v302 = v127; else v302 = (double)v286 * *(float *)(a2 + 108); } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } if ( v293 <= v127 ) { if ( v293 >= v127 ) v303 = v127; else v303 = (double)-v12 * *(float *)(a2 + 112); } else { v303 = (double)v286 * *(float *)(a2 + 112); } v287 = 1.0 - v129 * v129; *((float *)&v285 + 1) = fabs(v287); if ( *((float *)&v285 + 1) <= 0.000001 ) { v197 = v134; v198 = v127; v193 = v197; v300 = v198; v196 = v299; v195 = v301; } else { v277 = *(float *)&v274 * v134; v278 = v275 * v134; v279 = v276 * v134; *(float *)&v274 = v277 + v280; v275 = v278 + v281; v276 = v279 + v282; v193 = v134; *((float *)&v285 + 1) = v270[2] * v276 + v270[1] * v275 + *(float *)&v274 * *v270; *((float *)&v285 + 1) = v298 * v301 + v135 * v299 - *((float *)&v285 + 1); v194 = *((float *)&v285 + 1) * v295; *((float *)&v285 + 1) = v276 * *(float *)(this + 92) + v275 * *(float *)(this + 88) + *(float *)&v274 * *(float *)(this + 84); v300 = (v194 + *((float *)&v285 + 1) + v302 * v293 + v303 * v294) / v287; v195 = v301; v196 = v299; } v284 = v195 * *v34; *(float *)&v285 = v195 * *(float *)(this + 100); *((float *)&v285 + 1) = v195 * *(float *)(this + 104); v302 = v300 * *(float *)(this + 84); v303 = v300 * *(float *)(this + 88); v304 = v300 * *(float *)(this + 92); *(float *)&v274 = *v8 * v196; v275 = *(float *)(this + 76) * v196; v276 = v196 * *(float *)(this + 80); v277 = *(float *)v289 * v193; v278 = *(float *)(v289 + 4) * v193; v279 = v193 * *(float *)(v289 + 8); v280 = v277 + *v271; v281 = v271[1] + v278; v199 = v272; v282 = v279 + v271[2]; v277 = v280 + *(float *)&v274; v278 = v281 + v275; v279 = v282 + v276; v280 = v277 + v302; v281 = v278 + v303; v282 = v279 + v304; v277 = v280 + v284; v200 = v281; *v272 = v277; v278 = v200 + *(float *)&v285; v201 = v282; v199[1] = v278; v279 = v201 + *((float *)&v285 + 1); v199[2] = v279; goto LABEL_399; case 13: v202 = v134; v203 = v293; if ( v293 <= v127 ) { if ( v203 >= v127 ) v299 = v127; else v299 = (double)v286 * *(float *)(this + 108); } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } v204 = v290; if ( v290 <= v127 ) { if ( v204 >= v127 ) { v300 = v127; } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } } else { v300 = (double)v286 * *(float *)(this + 112); } if ( v298 <= v127 ) { if ( v298 >= v127 ) v303 = v127; else v303 = (double)v286 * *(float *)(a2 + 112); } else { HIDWORD(v285) = -v12; v303 = (double)-v12 * *(float *)(a2 + 112); } if ( v297 <= v127 ) { if ( v297 >= v127 ) v304 = v127; else v304 = (double)-v12 * *(float *)(a2 + 116); } else { v304 = (double)v286 * *(float *)(a2 + 116); } v287 = 1.0 - v296 * v296; *((float *)&v285 + 1) = fabs(v287); if ( *((float *)&v285 + 1) <= 0.000001 ) { v301 = v127; v211 = v202; v209 = v300; v212 = v211; v210 = v299; v208 = v212; } else { v277 = *(float *)&v274 * v202; v278 = v275 * v202; v279 = v276 * v202; *(float *)&v274 = v277 + v280; v275 = v278 + v281; v276 = v279 + v282; *((float *)&v285 + 1) = *(float *)(a2 + 80) * v276 + *(float *)(a2 + 76) * v275 + *(float *)(a2 + 72) * *(float *)&v274; *((float *)&v285 + 1) = v299 * v204 + v203 * v300 - *((float *)&v285 + 1); v205 = *((float *)&v285 + 1) * v296; *((float *)&v285 + 1) = v276 * *(float *)(this + 104) + *(float *)&v274 * *v34 + v275 * *(float *)(this + 100); v206 = v202; v207 = (v205 + *((float *)&v285 + 1) + v303 * v297 + v304 * v298) / v287; v208 = v206; v301 = v207; v209 = v300; v210 = v299; } v247 = &v277; v246 = &v299; v277 = v301 * *v34; v278 = v301 * *(float *)(this + 100); v279 = v301 * *(float *)(this + 104); v280 = v209 * *(float *)(this + 84); v281 = v209 * *(float *)(this + 88); v282 = v209 * *(float *)(this + 92); *(float *)&v274 = *v8 * v210; v275 = *(float *)(this + 76) * v210; v276 = v210 * *(float *)(this + 80); v302 = *(float *)v289 * v208; v303 = *(float *)(v289 + 4) * v208; v245 = &v280; v244 = &v284; v243 = &v274; v304 = v208 * *(float *)(v289 + 8); v242 = &v302; v213 = sub_404460(v271, (float *)&v257, &v302); goto LABEL_352; case 14: if ( v294 <= v127 ) { if ( v294 >= v127 ) v299 = v127; else v299 = (double)v286 * *(float *)(this + 108); } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } if ( v291 <= v127 ) { if ( v291 >= v127 ) { v300 = v127; } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } } else { v300 = (double)v286 * *(float *)(this + 112); } if ( v298 <= v127 ) { if ( v298 >= v127 ) { v302 = v127; } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } } else { v302 = (double)v286 * *(float *)(a2 + 108); } if ( v296 <= v127 ) { if ( v296 >= v127 ) v304 = v127; else v304 = (double)v286 * *(float *)(a2 + 116); } else { v304 = (double)-v12 * *(float *)(a2 + 116); } v287 = 1.0 - v297 * v297; *((float *)&v285 + 1) = fabs(v287); if ( *((float *)&v285 + 1) > 0.000001 ) { v218 = v134; v219 = (float *)sub_660DA0((int)&v248, v218, (int)&v274); v220 = sub_404460(&v280, (float *)&v268, v219); v221 = *v220; v222 = v220[1]; v223 = v220[2]; v280 = v221; v281 = v222; v285 = v300 * v294 + v299 * v291; v282 = v223; v224 = sub_69C760(v269, &v280); *((float *)&v285 + 1) = v285 - v224; v285 = *((float *)&v285 + 1) * v297; v225 = sub_69C760(v4 + 24, &v280); v127 = (v225 + v285 + v302 * v296 + v304 * v298) / v287; } v301 = v127; v247 = (float *)sub_660DA0((int)&v265, v301, (int)(v4 + 24)); v246 = (float *)&v249; v245 = (float *)sub_660DA0((int)&v263, v300, (int)(v4 + 21)); v244 = (float *)&v255; v243 = (int *)sub_660DA0((int)&v261, v299, (int)(v4 + 18)); v242 = (float *)&v251; v226 = (float *)sub_660DA0((int)&v259, v283, v289); v213 = sub_404460(v271, (float *)&v253, v226); goto LABEL_352; case 15: v227 = v134; v228 = v129; v229 = v227; if ( v228 <= v127 ) { if ( v228 >= v127 ) v299 = v127; else v299 = (double)v286 * *(float *)(this + 108); } else { HIDWORD(v285) = -v12; v299 = (double)-v12 * *(float *)(this + 108); } v230 = v229; v231 = v135; v232 = v230; if ( v231 <= v127 ) { if ( v231 >= v127 ) { v300 = v127; } else { HIDWORD(v285) = -v12; v300 = (double)-v12 * *(float *)(this + 112); } } else { v300 = (double)v286 * *(float *)(this + 112); } if ( v297 <= v127 ) { if ( v297 >= v127 ) v302 = v127; else v302 = (double)v286 * *(float *)(a2 + 108); } else { HIDWORD(v285) = -v12; v302 = (double)-v12 * *(float *)(a2 + 108); } if ( v296 <= v127 ) { if ( v296 >= v127 ) v303 = v127; else v303 = (double)-v12 * *(float *)(a2 + 112); } else { v303 = (double)v286 * *(float *)(a2 + 112); } v287 = 1.0 - v298 * v298; *((float *)&v285 + 1) = fabs(v287); if ( *((float *)&v285 + 1) > 0.000001 ) { v233 = v232; v234 = (float *)sub_660DA0((int)&v267, v233, (int)&v274); v235 = sub_404460(&v280, (float *)&v266, v234); v236 = *v235; v237 = v235[1]; v238 = v235[2]; v280 = v236; v281 = v237; v285 = v300 * v295 + v299 * v292; v282 = v238; v239 = sub_69C760(v270, &v280); *((float *)&v285 + 1) = v285 - v239; v285 = *((float *)&v285 + 1) * v298; v240 = sub_69C760(v4 + 24, &v280); v127 = (v240 + v285 + v302 * v296 + v303 * v297) / v287; } v301 = v127; v247 = (float *)sub_660DA0((int)&v264, v301, (int)(v4 + 24)); v246 = (float *)&v262; v245 = (float *)sub_660DA0((int)&v260, v300, (int)(v4 + 21)); v244 = (float *)&v258; v243 = (int *)sub_660DA0((int)&v256, v299, (int)(v4 + 18)); v242 = (float *)&v254; v241 = (float *)sub_660DA0((int)&v252, v283, v289); v213 = sub_404460(v271, (float *)&v250, v241); LABEL_352: v214 = sub_404460(v213, v242, (float *)v243); v215 = sub_404460(v214, v244, v245); v216 = sub_404460(v215, v246, v247); v217 = v272; *v272 = *v216; v217[1] = v216[1]; v217[2] = v216[2]; goto LABEL_399; default: goto LABEL_399; } return result; } //----- (00858A40) -------------------------------------------------------- void __thiscall sub_858A40(float *this, float *a2, float *a3) { float *v3; // esi float *v4; // ecx double v5; // st5 double v6; // st6 double v7; // st7 float v8; // [esp+4h] [ebp-Ch] float v9; // [esp+8h] [ebp-8h] float v10; // [esp+Ch] [ebp-4h] float v11; // [esp+18h] [ebp+8h] float v12; // [esp+1Ch] [ebp+Ch] float v13; // [esp+1Ch] [ebp+Ch] v3 = this; v8 = this[27]; v9 = this[28]; v10 = this[29]; sub_4430B0(&v8); if ( v8 > 0.00009999999747378752 ) { if ( v9 > 0.00009999999747378752 ) { if ( v10 > 0.00009999999747378752 ) { v4 = a3; v8 = *a2 - v3[15]; v9 = a2[1] - v3[16]; v10 = a2[2] - v3[17]; v5 = v9; v6 = v10; v11 = v3[20] * v10 + v3[19] * v9 + v8 * v3[18]; v7 = v8; *a3 = v11 / (v3[27] * v3[27]); v12 = v3[22] * v5 + v3[21] * v7 + v3[23] * v6; v4[1] = v12 / (v3[28] * v3[28]); v13 = v6 * v3[26] + v7 * v3[24] + v5 * v3[25]; v4[2] = v13 / (v3[29] * v3[29]); sub_4430B0(v4); } else { *a3 = v3[24]; a3[1] = v3[25]; a3[2] = v3[26]; } } else { *a3 = v3[21]; a3[1] = v3[22]; a3[2] = v3[23]; } } else { *a3 = v3[18]; a3[1] = v3[19]; a3[2] = v3[20]; } } //----- (00858BA0) -------------------------------------------------------- signed int __thiscall sub_858BA0(float *this, float *a2, float *a3) { signed int v3; // edx float v4; // ST18_4 float v5; // ST18_4 float v6; // ST18_4 double v7; // st7 float *v8; // ecx float v9; // ST0C_4 double v10; // st4 float v11; // ST18_4 double v12; // st3 float v13; // ST18_4 float v14; // ST18_4 double v15; // st3 float v16; // ST14_4 double v17; // st3 double v18; // st2 float v19; // ST14_4 float v20; // ST18_4 double v21; // rt2 double v22; // st2 double v23; // st3 float v24; // ST14_4 float v26; // ST14_4 float v27; // [esp+0h] [ebp-28h] float v28; // [esp+4h] [ebp-24h] float v29; // [esp+Ch] [ebp-1Ch] float v30; // [esp+10h] [ebp-18h] float v31; // [esp+14h] [ebp-14h] float v32; // [esp+18h] [ebp-10h] float v33; // [esp+1Ch] [ebp-Ch] float v34; // [esp+20h] [ebp-8h] v29 = -3.4028235e38; v3 = 0; v4 = fabs(this[27]); v32 = v4; v5 = fabs(this[28]); v33 = v5; v6 = fabs(this[29]); v34 = v6; v27 = this[15] - *a2; v28 = this[16] - a2[1]; v7 = this[17] - a2[2]; v8 = this + 20; v10 = (float)3.4028235e38; do { v9 = v7; v30 = *(v8 - 1) * v28 + *(v8 - 2) * v27 + *v8 * v9; v11 = *(v8 - 1) * a3[1] + *(v8 - 2) * *a3 + *v8 * a3[2]; v12 = v11; v13 = fabs(v11); if ( v13 <= 0.0000001000000011686097 ) { v26 = fabs(v30); if ( *(&v32 + v3) < (double)v26 ) return 0; } else { v14 = 1.0 / v12; v15 = v14; v31 = (*(&v32 + v3) + v30) * v14; v16 = v15 * (v30 - *(&v32 + v3)); v17 = v31; v18 = v16; if ( v16 < (double)v31 ) { v19 = v31; v20 = v18; v17 = v20; v18 = v19; } if ( v29 >= v17 ) { v23 = v18; } else { v21 = v18; v22 = v17; v23 = v21; v29 = v22; } if ( v23 < v10 ) { v24 = v23; v10 = v24; } if ( v29 > v10 || v10 < 0.0 ) return 0; } ++v3; v8 += 3; } while ( v3 < 3 ); return 1; } //----- (00858D60) -------------------------------------------------------- unsigned int __thiscall sub_858D60(int *this, void **a2) { sub_85CDA0(this, (signed int)a2); sub_876350(a2); return sub_876350(a2); } //----- (00858D80) -------------------------------------------------------- _DWORD *__thiscall sub_858D80(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *((_BYTE *)v1 + 8) = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; *v1 = &NiDynamicEffectState::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A23C14: using guessed type void *NiDynamicEffectState::`vftable'; //----- (00858DC0) -------------------------------------------------------- void *__thiscall sub_858DC0(void *this, char a2) { void *v2; // esi v2 = this; sub_87D660(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00858DF0) -------------------------------------------------------- void *__thiscall sub_858DF0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiDynamicEffect *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A23C04: using guessed type void *NiTListBase,NiDynamicEffect *>::`vftable'; //----- (00858E20) -------------------------------------------------------- float *__thiscall sub_858E20(int this, float *a2, float *a3, char a4) { float *result; // eax int v5; // esi float *v6; // eax float *v7; // eax unsigned int v8; // edi double v9; // st7 float v10; // ecx unsigned int v11; // ebx float v12; // ecx char v13; // [esp+Ch] [ebp-90h] char v14; // [esp+18h] [ebp-84h] float v15; // [esp+24h] [ebp-78h] float v16; // [esp+28h] [ebp-74h] float v17; // [esp+2Ch] [ebp-70h] float v18; // [esp+30h] [ebp-6Ch] float v19; // [esp+34h] [ebp-68h] float *v20; // [esp+38h] [ebp-64h] float v21; // [esp+3Ch] [ebp-60h] float v22; // [esp+40h] [ebp-5Ch] float v23; // [esp+44h] [ebp-58h] float *v24; // [esp+48h] [ebp-54h] float v25; // [esp+4Ch] [ebp-50h] char v26; // [esp+50h] [ebp-4Ch] float v27[9]; // [esp+74h] [ebp-28h] result = a3; v5 = this; v25 = *(float *)&a2; v24 = a3; if ( a4 ) { v6 = sub_85D940(a2, (float *)&v26, (float *)(this + 52)); sub_85E050((float *)(v5 + 52), v27, v6); v7 = sub_85DA90((float *)LODWORD(v25), (float *)&v13, (float *)(v5 + 88)); v21 = *v7 + *v24; v22 = v24[1] + v7[1]; v23 = v24[2] + v7[2]; v15 = v21 - *(float *)(v5 + 88); v16 = v22 - *(float *)(v5 + 92); v17 = v23 - *(float *)(v5 + 96); v25 = *(float *)(v5 + 100); result = sub_85DAF0((float *)&v14, &v15, (float *)(v5 + 52)); v8 = 0; v25 = 1.0 / v25; v9 = v25; v25 = result[1] * v25; *(float *)&v24 = result[2] * v9; v18 = v9 * *result; v19 = v25; v20 = v24; if ( *(_DWORD *)(v5 + 188) ) { do { result = *(float **)(v5 + 180); v10 = result[v8]; if ( v10 != 0.0 ) result = (float *)(*(int (__stdcall **)(float *, float *, signed int))(*(_DWORD *)LODWORD(v10) + 68))( v27, &v18, 1); ++v8; } while ( v8 < *(_DWORD *)(v5 + 188) ); } } else { v11 = 0; if ( *(_DWORD *)(this + 188) ) { do { result = *(float **)(v5 + 180); v12 = result[v11]; if ( v12 != 0.0 ) result = (float *)(*(int (__stdcall **)(float *, float *, signed int))(*(_DWORD *)LODWORD(v12) + 68))( a2, v24, 1); ++v11; } while ( v11 < *(_DWORD *)(v5 + 188) ); } } return result; } //----- (00858F90) -------------------------------------------------------- int __thiscall sub_858F90(_DWORD *this) { int v1; // esi int result; // eax v1 = this[8]; result = (*(int (**)(void))(*this + 104))(); if ( v1 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 132))(v1); return result; } //----- (00858FB0) -------------------------------------------------------- void __thiscall sub_858FB0(int this) { double v1; // st7 int v2; // esi unsigned int v3; // edi int v4; // ecx v1 = 0.0; v2 = this; v3 = 0; *(float *)(this + 48) = 0.0; if ( *(_DWORD *)(this + 188) ) { do { v4 = *(_DWORD *)(*(_DWORD *)(v2 + 180) + 4 * v3); if ( v4 && v1 != *(float *)(v4 + 48) ) { if ( v1 == *(float *)(v2 + 48) ) { *(_DWORD *)(v2 + 36) = *(_DWORD *)(v4 + 36); *(_DWORD *)(v2 + 40) = *(_DWORD *)(v4 + 40); *(_DWORD *)(v2 + 44) = *(_DWORD *)(v4 + 44); *(_DWORD *)(v2 + 48) = *(_DWORD *)(v4 + 48); } else { sub_86BC10((float *)(v2 + 36), (float *)(v4 + 36)); v1 = 0.0; } } ++v3; } while ( v3 < *(_DWORD *)(v2 + 188) ); } } //----- (00859030) -------------------------------------------------------- int *__thiscall sub_859030(_DWORD *this, int a2) { _DWORD *v2; // esi int *result; // eax unsigned int v4; // edi int v5; // ecx int (__thiscall ***v6)(_DWORD, signed int); // esi v2 = this; result = sub_85C5E0(this, &a2, a2, 1); v4 = 0; if ( v2[47] ) { do { v5 = *(_DWORD *)(v2[45] + 4 * v4); if ( v5 ) result = (int *)(*(int (__stdcall **)(int))(*(_DWORD *)v5 + 92))(a2); ++v4; } while ( v4 < v2[47] ); } v6 = (int (__thiscall ***)(_DWORD, signed int))a2; if ( a2 ) { result = (int *)InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v6 ) result = (int *)(**v6)(v6, 1); } } return result; } //----- (008590A0) -------------------------------------------------------- float __userpurge sub_8590A0@(int a1@, int a2@) { int v2; // esi unsigned int v3; // edi int v4; // ecx char v6; // [esp+8h] [ebp-38h] v2 = a1; v3 = 0; if ( *(_DWORD *)(a1 + 188) ) { do { v4 = *(_DWORD *)(*(_DWORD *)(v2 + 180) + 4 * v3); if ( v4 ) (*(void (**)(void))(*(_DWORD *)v4 + 64))(); ++v3; } while ( v3 < *(_DWORD *)(v2 + 188) ); } sub_87C3F0((float *)(v2 + 104), a2, (float *)&v6); return sub_86BD60((float *)(v2 + 216), (float *)(v2 + 36), (float *)&v6); } //----- (00859110) -------------------------------------------------------- void __thiscall sub_859110(int this, int a2) { int v2; // edi unsigned int v3; // esi _BYTE *v4; // ecx v2 = this; if ( 0.0 != *(float *)(this + 48) ) { v3 = 0; if ( *(_DWORD *)(this + 188) ) { do { v4 = *(_BYTE **)(*(_DWORD *)(v2 + 180) + 4 * v3); if ( v4 ) sub_85C0A0(v4, a2); ++v3; } while ( v3 < *(_DWORD *)(v2 + 188) ); } } } //----- (00859160) -------------------------------------------------------- void __thiscall sub_859160(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax unsigned int v5; // esi int v6; // ecx v2 = this; sub_85C120(this, a2); v3 = (_DWORD *)v2[51]; while ( v3 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(int, int))(*(_DWORD *)a2 + 164))(a2, v4); } v5 = 0; if ( v2[47] ) { do { v6 = *(_DWORD *)(v2[45] + 4 * v5); if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 112))(a2); ++v5; } while ( v5 < v2[47] ); } } //----- (008591D0) -------------------------------------------------------- void __thiscall sub_8591D0(_DWORD *this) { _DWORD *i; // edi _DWORD *v2; // ebx int *v3; // ecx int v4; // eax for ( i = this; i[53]; sub_861670(v2, i) ) { v2 = *(_DWORD **)(i[51] + 8); v3 = (int *)i[51]; v4 = *v3; i[51] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else i[52] = 0; (*(void (__thiscall **)(_DWORD *, int *))(i[50] + 8))(i + 50, v3); --i[53]; } } //----- (00859240) -------------------------------------------------------- void __thiscall sub_859240(_WORD *this, int a2, _DWORD **a3) { int v3; // ebx _WORD *v4; // edi unsigned int v5; // esi int v6; // ecx int v7; // eax void (__thiscall ***v8)(_DWORD, signed int); // edi _WORD *v9; // [esp+Ch] [ebp-4h] v3 = a2; v4 = this; v9 = this; sub_85CD30(this, a2, a3); v5 = 0; if ( *((_DWORD *)v4 + 47) ) { do { v6 = *(_DWORD *)(*((_DWORD *)v4 + 45) + 4 * v5); if ( v6 ) { v7 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v6 + 8))(a3); (*(void (__thiscall **)(int, int *, unsigned int, int))(*(_DWORD *)v3 + 128))(v3, &a2, v5, v7); if ( a2 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } v4 = v9; } } ++v5; } while ( v5 < *((_DWORD *)v4 + 47) ); } } //----- (008592D0) -------------------------------------------------------- _DWORD *__thiscall sub_8592D0(_DWORD *this, float a2, char a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v5; // ecx _DWORD *result; // eax _DWORD *i; // esi v3 = this; if ( a3 ) { v4 = (_DWORD *)this[40]; while ( v4 ) { v5 = (_DWORD *)v4[2]; result = v4 + 2; v4 = (_DWORD *)*v4; if ( v5 && v5[3] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*v5 + 64))(LODWORD(a2)); } } for ( i = (_DWORD *)v3[3]; i; i = (_DWORD *)i[13] ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD))(*i + 68))(i, LODWORD(a2)); return result; } //----- (00859330) -------------------------------------------------------- int __thiscall sub_859330(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiDynamicEffect *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiDynamicEffect *>::`vftable'; return result; } // A23C04: using guessed type void *NiTListBase,NiDynamicEffect *>::`vftable'; // A23C1C: using guessed type void *NiTPointerListBase,NiDynamicEffect *>::`vftable'; //----- (00859370) -------------------------------------------------------- void *__thiscall sub_859370(void *this, char a2) { void *v2; // esi v2 = this; sub_859330(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008593A0) -------------------------------------------------------- _DWORD *__thiscall sub_8593A0(_DWORD *this, _DWORD *a2, unsigned int a3) { unsigned int v3; // ebx _DWORD *v4; // edi int v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // edi _DWORD *result; // eax v3 = a3; v4 = this; if ( a3 >= this[47] ) { result = a2; *a2 = 0; } else { v5 = *(_DWORD *)(this[45] + 4 * a3); if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); *(_DWORD *)(v5 + 32) = 0; sub_816340(v4 + 44, &a3, v3); v6 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**v6)(v6, 1); } } *a2 = v5; if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } result = a2; } return result; } //----- (00859440) -------------------------------------------------------- _DWORD *__thiscall sub_859440(_DWORD *this, _DWORD *a2, int a3) { unsigned int v3; // ebx int v4; // esi _DWORD *result; // eax void (__thiscall ***v6)(_DWORD, signed int); // edi _DWORD *v7; // [esp+Ch] [ebp-4h] v3 = 0; v7 = this; if ( !this[47] ) { LABEL_8: result = a2; *a2 = 0; return result; } while ( 1 ) { v4 = *(_DWORD *)(this[45] + 4 * v3); if ( v4 ) break; LABEL_7: if ( ++v3 >= this[47] ) goto LABEL_8; } InterlockedIncrement((volatile LONG *)(v4 + 4)); if ( v4 != a3 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); this = v7; goto LABEL_7; } *(_DWORD *)(v4 + 32) = 0; sub_816340(v7 + 44, &a3, v3); v6 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**v6)(v6, 1); *a2 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return a2; } //----- (00859510) -------------------------------------------------------- void __thiscall sub_859510(float *this, float a2, int a3) { float *v3; // esi unsigned int v4; // ebx float *v5; // edi v3 = this; if ( (_BYTE)a3 ) sub_8592D0(this, a2, 1); (*(void (__thiscall **)(float *))(*(_DWORD *)v3 + 100))(v3); v4 = 0; v3[12] = 0.0; if ( *((_DWORD *)v3 + 47) ) { do { v5 = *(float **)(*((_DWORD *)v3 + 45) + 4 * v4); if ( v5 ) { (*(void (__thiscall **)(float *, _DWORD, int))(*(_DWORD *)v5 + 80))(v5, LODWORD(a2), a3); if ( 0.0 != v5[12] ) { if ( v3[12] == 0.0 ) { v3[9] = v5[9]; v3[10] = v5[10]; v3[11] = v5[11]; v3[12] = v5[12]; } else { sub_86BC10(v3 + 9, v5 + 9); } } } ++v4; } while ( v4 < *((_DWORD *)v3 + 47) ); } } //----- (008595C0) -------------------------------------------------------- void __thiscall sub_8595C0(int this, float a2) { int v2; // edi unsigned int v3; // ebx int *v4; // esi __int16 v5; // ax int v6; // edx void (__thiscall *v7)(int *, _DWORD); // eax v2 = this; sub_8592D0((_DWORD *)this, a2, (*(_BYTE *)(this + 28) >> 3) & 1); if ( (*(_BYTE *)(v2 + 28) >> 2) & 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2); v3 = 0; *(float *)(v2 + 48) = 0.0; if ( *(_DWORD *)(v2 + 188) ) { do { v4 = *(int **)(*(_DWORD *)(v2 + 180) + 4 * v3); if ( v4 ) { v5 = *((_WORD *)v4 + 14); if ( ((unsigned __int8)*((_WORD *)v4 + 14) >> 1) & 1 ) { v6 = *v4; if ( ((unsigned __int8)v5 >> 4) & 1 ) v7 = *(void (__thiscall **)(int *, _DWORD))(v6 + 88); else v7 = *(void (__thiscall **)(int *, _DWORD))(v6 + 84); v7(v4, LODWORD(a2)); } if ( 0.0 != *((float *)v4 + 12) ) { if ( *(float *)(v2 + 48) == 0.0 ) { *(_DWORD *)(v2 + 36) = v4[9]; *(_DWORD *)(v2 + 40) = v4[10]; *(_DWORD *)(v2 + 44) = v4[11]; *(_DWORD *)(v2 + 48) = v4[12]; } else { sub_86BC10((float *)(v2 + 36), (float *)v4 + 9); } } } ++v3; } while ( v3 < *(_DWORD *)(v2 + 188) ); } } //----- (008596B0) -------------------------------------------------------- char __thiscall sub_8596B0(int this, float a2) { int v2; // esi char result; // al unsigned int v4; // edi _BYTE *v5; // ecx v2 = this; result = (unsigned int)sub_8592D0((_DWORD *)this, a2, (*(_BYTE *)(this + 28) >> 3) & 1); if ( (*(_BYTE *)(v2 + 28) >> 2) & 1 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 100))(v2); result = COERCE_UNSIGNED_INT(sub_86BD60((float *)(v2 + 36), (float *)(v2 + 216), (float *)(v2 + 104))); } v4 = 0; if ( *(_DWORD *)(v2 + 188) ) { do { v5 = *(_BYTE **)(*(_DWORD *)(v2 + 180) + 4 * v4); if ( v5 ) { result = v5[28] >> 1; if ( result & 1 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 88))(LODWORD(a2)); } ++v4; } while ( v4 < *(_DWORD *)(v2 + 188) ); } return result; } //----- (00859740) -------------------------------------------------------- _DWORD *__thiscall sub_859740(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ecx _DWORD *result; // eax _DWORD *i; // esi unsigned int v7; // esi int v8; // ecx v2 = this; v3 = (_DWORD *)this[40]; while ( v3 ) { v4 = (_DWORD *)v3[2]; result = v3 + 2; v3 = (_DWORD *)*v3; if ( v4 && v4[3] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*v4 + 64))(LODWORD(a2)); } for ( i = (_DWORD *)v2[3]; i; i = (_DWORD *)i[13] ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD))(*i + 68))(i, LODWORD(a2)); v7 = 0; if ( v2[47] ) { do { result = (_DWORD *)v2[45]; v8 = result[v7]; if ( v8 ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 60))(LODWORD(a2)); ++v7; } while ( v7 < v2[47] ); } return result; } //----- (008597D0) -------------------------------------------------------- int *__thiscall sub_8597D0(_DWORD *this, int *a2) { _DWORD *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // eax _DWORD *v7; // eax int v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = 0; if ( this[8] ) { v4 = *(_DWORD *)sub_8597D0(&v9); if ( v4 ) { v3 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v5 ) (**v5)(v5, 1); } else { v6 = operator new(0x38u); if ( v6 ) { v7 = sub_87DE20(v6); if ( v7 ) { v3 = (int)v7; InterlockedIncrement(v7 + 1); } } } sub_85C5E0(v2, a2, v3, 0); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return a2; } //----- (00859880) -------------------------------------------------------- int *__thiscall sub_859880(void *this, int *a2, int a3, char a4) { int v4; // edi int v5; // esi _DWORD *v6; // ebx _DWORD *v7; // ecx _DWORD *v8; // edi _DWORD *v9; // ebx _DWORD *v10; // ecx _DWORD *v11; // edi _DWORD *v12; // ebx _DWORD *v13; // edi _DWORD *v14; // edi _DWORD *v15; // edi _DWORD *v16; // eax _DWORD *v17; // eax _DWORD *v18; // eax _DWORD *v19; // edi _DWORD *v20; // ST00_4 _DWORD *v21; // edi _DWORD *v22; // edx _DWORD *v24; // [esp+Ch] [ebp-10h] _DWORD *v25; // [esp+Ch] [ebp-10h] _DWORD *v26; // [esp+Ch] [ebp-10h] _DWORD *v27; // [esp+Ch] [ebp-10h] int v28; // [esp+10h] [ebp-Ch] int v29; // [esp+14h] [ebp-8h] char v30; // [esp+1Bh] [ebp-1h] v4 = a3; v5 = a3; v28 = (int)this; v29 = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); v30 = 0; if ( a3 ) { v6 = *(_DWORD **)(a3 + 12); if ( v6 ) { do { v7 = (_DWORD *)v6[1]; v6 = (_DWORD *)*v6; v24 = v7; if ( v7 && sub_861390(v7, v28) ) { if ( !v30 ) { v8 = sub_87D6E0((_BYTE *)v4); if ( (_DWORD *)v5 != v8 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v5 = (int)v8; if ( v8 ) InterlockedIncrement(v8 + 1); } v4 = a3; v30 = 1; } sub_87D900((_DWORD **)v5, v24); } } while ( v6 ); v29 = v5; } v9 = *(_DWORD **)(v4 + 16); if ( v9 ) { do { v10 = (_DWORD *)v9[1]; v9 = (_DWORD *)*v9; v25 = v10; if ( v10 && sub_861390(v10, v28) ) { if ( !v30 ) { v11 = sub_87D6E0((_BYTE *)v4); if ( (_DWORD *)v5 != v11 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v5 = (int)v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v4 = a3; v30 = 1; } sub_87D900((_DWORD **)v5, v25); } } while ( v9 ); v29 = v5; } v12 = *(_DWORD **)(v4 + 20); if ( v12 ) { do { v13 = (_DWORD *)v12[1]; v12 = (_DWORD *)*v12; v26 = v13; if ( v13 && sub_861390(v13, v28) ) { if ( !v30 ) { v14 = sub_87D6E0((_BYTE *)a3); if ( (_DWORD *)v5 != v14 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v5 = (int)v14; if ( v14 ) InterlockedIncrement(v14 + 1); } v13 = v26; v30 = 1; } sub_87D900((_DWORD **)v5, v13); } } while ( v12 ); v4 = a3; v29 = v5; } v15 = *(_DWORD **)(v4 + 24); v27 = *(_DWORD **)(a3 + 28); if ( v15 && sub_861390(v15, v28) ) { if ( !v30 ) { v16 = sub_87D6E0((_BYTE *)a3); sub_56FF80(&v29, (int)v16); v5 = v29; v30 = 1; } sub_87D900((_DWORD **)v5, v15); } if ( v27 && sub_861390(v27, v28) ) { if ( !v30 ) { v17 = sub_87D6E0((_BYTE *)a3); sub_56FF80(&v29, (int)v17); v5 = v29; v30 = 1; } sub_87D900((_DWORD **)v5, v27); } v4 = a3; } if ( *(_DWORD *)(v28 + 212) ) { if ( !v4 ) { v18 = operator new(0x20u); if ( v18 ) v19 = sub_858D80(v18); else v19 = 0; if ( (_DWORD *)v5 != v19 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v5 = (int)v19; if ( v19 ) InterlockedIncrement(v19 + 1); } goto LABEL_74; } if ( a4 ) { if ( v30 ) goto LABEL_74; v20 = sub_87D6E0((_BYTE *)v4); sub_56FF80(&v29, (int)v20); } else { if ( v30 ) goto LABEL_74; sub_56FF80(&v29, v4); } v5 = v29; LABEL_74: v21 = *(_DWORD **)(v28 + 204); while ( v21 ) { v22 = (_DWORD *)v21[2]; v21 = (_DWORD *)*v21; sub_87D860((void **)v5, v22); } } *a2 = v5; if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } return a2; } //----- (00859B80) -------------------------------------------------------- int *__thiscall sub_859B80(_DWORD *this, int a2) { _DWORD *v2; // esi int *result; // eax int v4; // ebx unsigned int v5; // edi int v6; // ecx v2 = this; result = sub_859880(this, &a2, a2, 1); v4 = a2; v5 = 0; if ( v2[47] ) { do { v6 = *(_DWORD *)(v2[45] + 4 * v5); if ( v6 ) result = (int *)(*(int (__stdcall **)(int))(*(_DWORD *)v6 + 96))(v4); ++v5; } while ( v5 < v2[47] ); } if ( v4 ) { result = (int *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (int *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } return result; } //----- (00859C00) -------------------------------------------------------- _BYTE *__thiscall sub_859C00(_DWORD *this, _BYTE *a2, int a3, _BYTE *a4) { _DWORD *v4; // esi char v5; // al _BYTE *v6; // ecx _BYTE *v7; // ebx unsigned int v8; // edi int v9; // ecx void (__stdcall *v10)(char *, int, char *); // eax char v11; // al _BYTE *result; // eax char v13; // [esp+6h] [ebp-2h] char v14; // [esp+7h] [ebp-1h] v4 = this; v5 = sub_85C580(this); v13 = v5; if ( !(_BYTE)a3 ) LOBYTE(a3) = v5; v6 = a4; v7 = a2; *a2 = a3; v8 = 0; *v6 = 1; if ( v4[47] ) { do { v9 = *(_DWORD *)(v4[45] + 4 * v8); if ( v9 ) { v10 = *(void (__stdcall **)(char *, int, char *))(*(_DWORD *)v9 + 76); HIBYTE(a2) = 0; v14 = 1; v10((char *)&a2 + 3, a3, &v14); if ( HIBYTE(a2) ) *v7 = 1; if ( !v14 ) *a4 = 0; } ++v8; } while ( v4[47] > v8 ); } v11 = sub_85C5B0(v4); if ( v11 || v4[3] ) { *v7 = 1; *((_WORD *)v4 + 14) |= 2u; } else if ( *v7 ) { *((_WORD *)v4 + 14) |= 2u; } else { *((_WORD *)v4 + 14) &= 0xFFFDu; } if ( (_BYTE)a3 ) *((_WORD *)v4 + 14) |= 4u; else *((_WORD *)v4 + 14) &= 0xFFFBu; if ( v11 ) *((_WORD *)v4 + 14) |= 8u; else *((_WORD *)v4 + 14) &= 0xFFF7u; result = a4; if ( *a4 ) *((_WORD *)v4 + 14) |= 0x10u; else *((_WORD *)v4 + 14) &= 0xFFEFu; if ( v13 ) *result = 0; return result; } //----- (00859D00) -------------------------------------------------------- _DWORD *__thiscall sub_859D00(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *result; // eax _DWORD *v4; // ecx _DWORD *v5; // edx _DWORD *v6; // eax int v7; // ecx v2 = this; result = (_DWORD *)this[51]; if ( !result ) goto LABEL_6; while ( 1 ) { v4 = result + 2; v5 = result; result = (_DWORD *)*result; if ( a2 == (_DWORD *)*v4 ) break; if ( !result ) goto LABEL_6; } if ( !v5 ) { LABEL_6: v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[50] + 4))(v2 + 50); v6[2] = a2; v6[1] = 0; *v6 = v2[51]; v7 = v2[51]; if ( v7 ) *(_DWORD *)(v7 + 4) = v6; else v2[52] = v6; ++v2[53]; v2[51] = v6; result = sub_861480(a2, (int)v2); } return result; } //----- (00859D80) -------------------------------------------------------- _DWORD *__thiscall sub_859D80(_DWORD *this, const char *a2) { _DWORD *v2; // edi _DWORD *result; // eax unsigned int v4; // eax int v5; // esi int v6; // ecx v2 = this; result = sub_85C0C0(this, a2); if ( !result ) { v4 = v2[47]; v5 = 0; if ( v4 ) { if ( v4 <= 0 ) goto LABEL_6; while ( 1 ) { v6 = *(_DWORD *)(v2[45] + 4 * v5); if ( v6 ) { result = (_DWORD *)(*(int (__stdcall **)(const char *))(*(_DWORD *)v6 + 72))(a2); if ( result ) break; } LABEL_6: if ( v2[47] <= (unsigned int)++v5 ) goto LABEL_7; } } else { LABEL_7: result = 0; } } return result; } //----- (00859DE0) -------------------------------------------------------- _DWORD *__thiscall sub_859DE0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax int v4; // ebx _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // edi _DWORD *v8; // edi _DWORD *i; // [esp+4h] [ebp-4h] _DWORD *v10; // [esp+10h] [ebp+8h] result = a2; v4 = a2[2]; for ( i = this; v4; result = sub_859D00(i, v8) ) { v5 = (_DWORD *)*a3; v6 = *(_DWORD **)(v4 + 8); v4 = *(_DWORD *)(v4 + 4); v10 = v6; v7 = *(_DWORD **)(v5[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD *))(*(_DWORD *)*a3 + 4))(*a3, v6)); if ( v7 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v5 + 8))(v5, v10, v7[1]) ) { v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_5; } v8 = (_DWORD *)v7[2]; } else { LABEL_5: v8 = v10; } } return result; } //----- (00859E60) -------------------------------------------------------- char __thiscall sub_859E60(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // eax unsigned int v5; // esi int v6; // ecx _DWORD *v7; // esi int v8; // ecx v2 = this; result = sub_85C230(this, a2); if ( result ) { v4 = v2[47]; v5 = 0; if ( v4 ) { if ( v4 <= 0 ) goto LABEL_6; do { v6 = *(_DWORD *)(v2[45] + 4 * v5); if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(a2); LABEL_6: ++v5; } while ( v2[47] > v5 ); } v7 = (_DWORD *)v2[51]; while ( v7 ) { v8 = v7[2]; v7 = (_DWORD *)*v7; if ( v8 ) (*(void (__stdcall **)(int))(*(_DWORD *)v8 + 20))(a2); } result = 1; } return result; } //----- (00859EE0) -------------------------------------------------------- int __thiscall sub_859EE0(const char **this, unsigned int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int v7; // ebx int v8; // eax int v9; // eax int (__cdecl *v10)(int, const char **, signed int, int *, signed int); // edx int result; // eax const char *i; // edi int v13; // eax int v14; // [esp+Ch] [ebp-8h] const char *v15; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85D030(this, a2); a2 = (unsigned int)v3[47]; v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 8); v14 = 4; v6(v5, &a2, 4, &v14, 1); v7 = 0; if ( a2 ) { do { if ( (unsigned int)v3[47] > v7 ) v8 = *(_DWORD *)&v3[45][4 * v7]; else v8 = 0; (*(void (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v8); ++v7; } while ( v7 < a2 ); } v9 = v2[89]; v15 = v3[53]; v10 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(v9 + 8); v14 = 4; result = v10(v9, &v15, 4, &v14, 1); if ( (signed int)v15 > 0 ) { for ( i = v3[52]; i; result = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v13) ) { v13 = *((_DWORD *)i + 2); i = (const char *)*((_DWORD *)i + 1); } } return result; } //----- (00859FB0) -------------------------------------------------------- char __thiscall sub_859FB0(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // edi unsigned int v5; // edx unsigned int v6; // esi int v7; // ecx int v8; // eax int v9; // eax _DWORD *v10; // esi _DWORD *v11; // edi int v12; // ecx int *v13; // eax int v14; // eax unsigned int v15; // [esp+10h] [ebp+8h] v2 = (_DWORD *)a2; v3 = this; if ( !sub_85C8D0(this, a2) ) return 0; v5 = v3[47]; v15 = v5; if ( v5 != v2[47] ) return 0; v6 = 0; if ( v5 ) { do { if ( v3[47] > v6 ) v7 = *(_DWORD *)(v3[45] + 4 * v6); else v7 = 0; if ( v2[47] > v6 ) v8 = *(_DWORD *)(v2[45] + 4 * v6); else v8 = 0; if ( v7 ) { if ( !v8 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v7 + 28))(v8) ) return 0; v5 = v15; } else if ( v8 ) { return 0; } ++v6; } while ( v6 < v5 ); } v9 = v3[53]; if ( v9 != v2[53] ) return 0; if ( v9 ) { v10 = (_DWORD *)v3[51]; v11 = (_DWORD *)v2[51]; while ( v10 ) { v12 = v10[2]; v10 = (_DWORD *)*v10; v13 = v11 + 2; v11 = (_DWORD *)*v11; v14 = *v13; if ( v12 ) { if ( !v14 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v12 + 28))(v14) ) return 0; } else if ( v14 ) { return 0; } } } return 1; } //----- (0085A0A0) -------------------------------------------------------- _DWORD *__thiscall sub_85A0A0(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // ecx unsigned int *v5; // eax void *v6; // edx _DWORD *result; // eax v3 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( a2 ) { v4 = 4 * a2 | -((unsigned __int64)a2 >> 30 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = v5 + 1; if ( (signed int)(a2 - 1) >= 0 ) { memset(v6, 0, 4 * a2); v3[1] = v6; return v3; } } else { v6 = 0; } v3[1] = v6; result = v3; } else { this[1] = 0; result = this; } return result; } // A23C3C: using guessed type void *NiTArray>::`vftable'; //----- (0085A130) -------------------------------------------------------- void __thiscall sub_85A130(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A23C3C: using guessed type void *NiTArray>::`vftable'; //----- (0085A190) -------------------------------------------------------- void *__thiscall sub_85A190(void *this, char a2) { void *v2; // esi v2 = this; sub_85A130(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0085A1C0) -------------------------------------------------------- _DWORD *__thiscall sub_85A1C0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi v2 = this; sub_85C9A0(this); *v2 = &NiNode::`vftable'; sub_85A0A0(v2 + 44, a2, 1); v2[53] = 0; v2[51] = 0; v2[52] = 0; v2[50] = &NiTPointerList::`vftable'; return v2; } // A23C2C: using guessed type void *NiTPointerList::`vftable'; // A23C44: using guessed type void *NiNode::`vftable'; //----- (0085A210) -------------------------------------------------------- LONG __thiscall sub_85A210(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi void (__thiscall ***v3)(_DWORD, signed int); // esi _DWORD *v4; // esi _DWORD *v5; // ST04_4 int v7; // [esp+Ch] [ebp-4h] v1 = this; *this = &NiNode::`vftable'; sub_8591D0(this); v2 = 0; if ( v1[47] ) { do { sub_8593A0(v1, &v7, v2); v3 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**v3)(v3, 1); ++v2; } while ( v2 < v1[47] ); } v4 = (_DWORD *)v1[51]; v1[50] = &NiTPointerListBase,NiDynamicEffect *>::`vftable'; while ( v4 ) { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[50] + 8))(v1 + 50, v5); } v1[53] = 0; v1[51] = 0; v1[52] = 0; v1[50] = &NiTListBase,NiDynamicEffect *>::`vftable'; sub_85A130(v1 + 44); return sub_85C320(v1); } // A23C04: using guessed type void *NiTListBase,NiDynamicEffect *>::`vftable'; // A23C1C: using guessed type void *NiTPointerListBase,NiDynamicEffect *>::`vftable'; // A23C44: using guessed type void *NiNode::`vftable'; //----- (0085A2D0) -------------------------------------------------------- int *__thiscall sub_85A2D0(_DWORD *this, int *a2) { void *v2; // ebx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = 0; if ( this[8] ) { v4 = *(_DWORD *)sub_85A2D0(&v7); if ( v4 ) { v3 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v5 ) (**v5)(v5, 1); } sub_859880(v2, a2, v3, 0); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return a2; } //----- (0085A360) -------------------------------------------------------- _DWORD *__thiscall sub_85A360(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *result; // eax _DWORD *v4; // edi _DWORD **v5; // ecx _DWORD *v6; // edx _DWORD *v7; // eax _DWORD **v8; // edx _DWORD *v9; // esi v2 = this; result = (_DWORD *)this[51]; if ( result ) { v4 = a2; while ( 1 ) { v5 = (_DWORD **)(result + 2); v6 = result; result = (_DWORD *)*result; if ( a2 == *v5 ) break; if ( !result ) return result; } if ( v6 ) { v7 = (_DWORD *)v2[51]; if ( v7 ) { while ( 1 ) { v8 = (_DWORD **)(v7 + 2); v9 = v7; v7 = (_DWORD *)*v7; if ( a2 == *v8 ) break; if ( !v7 ) goto LABEL_10; } } else { LABEL_10: v9 = 0; } a2 = v9; if ( v9 ) sub_403620(v2 + 50, &a2); result = sub_861670(v4, v2); } } return result; } //----- (0085A3D0) -------------------------------------------------------- _DWORD *__thiscall sub_85A3D0(_WORD *this, _DWORD **a2) { _WORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi unsigned int v5; // edi _DWORD *result; // eax v2 = this; v3 = operator new(0xE8u); v4 = v3; if ( v3 ) { v5 = *((_DWORD *)v2 + 47); sub_85C9A0(v3); *v4 = &NiNode::`vftable'; sub_85A0A0(v4 + 44, v5, 1); v4[53] = 0; v4[51] = 0; v4[52] = 0; v4[50] = &NiTPointerList::`vftable'; sub_859240(v2, (int)v4, a2); result = v4; } else { sub_859240(v2, 0, a2); result = 0; } return result; } // A23C2C: using guessed type void *NiTPointerList::`vftable'; // A23C44: using guessed type void *NiNode::`vftable'; //----- (0085A460) -------------------------------------------------------- _DWORD *__thiscall sub_85A460(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *result; // eax unsigned int v5; // edi int v6; // ecx v2 = a2; v3 = this; sub_85C1F0(this, (int)a2); sub_8C4C90((_DWORD *)*v2, (int)v3, &a2); result = v3 + 50; if ( v3[53] ) result = sub_859DE0(a2, v3 + 50, v2); v5 = 0; if ( v3[47] ) { do { v6 = *(_DWORD *)(v3[45] + 4 * v5); if ( v6 ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v6 + 40))(v2); ++v5; } while ( v5 < v3[47] ); } return result; } //----- (0085A4D0) -------------------------------------------------------- _DWORD *sub_85A4D0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xE8u); v1 = v0; if ( !v0 ) return 0; sub_85C9A0(v0); *v1 = &NiNode::`vftable'; v1[46] = 0; v1[47] = 0; v1[48] = 0; v1[45] = 0; v1[44] = &NiTArray>::`vftable'; v1[49] = 1; v1[53] = 0; v1[51] = 0; v1[52] = 0; v1[50] = &NiTPointerList::`vftable'; return v1; } // A23C2C: using guessed type void *NiTPointerList::`vftable'; // A23C3C: using guessed type void *NiTArray>::`vftable'; // A23C44: using guessed type void *NiNode::`vftable'; //----- (0085A550) -------------------------------------------------------- _DWORD *__thiscall sub_85A550(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi int v4; // eax unsigned int v5; // esi int v6; // eax _DWORD *result; // eax unsigned int v8; // esi _DWORD *v9; // ebx _DWORD *v10; // eax _DWORD *v11; // ecx _DWORD *v12; // ebx _DWORD *v13; // eax int v14; // ecx void (__stdcall ***v15)(signed int); // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] unsigned int v17; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; sub_85C770(this, a2); v4 = sub_875B00(a2); v17 = v4; if ( v4 ) { sub_81A750(v3 + 44, v4); v5 = 0; if ( v17 ) { do { v6 = sub_875AD0(a2); (*(void (__thiscall **)(_DWORD *, int *, unsigned int, int))(*v3 + 128))(v3, &v16, v5, v6); if ( v16 ) { v15 = (void (__stdcall ***)(signed int))v16; if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) { if ( v15 ) (**v15)(1); } } ++v5; } while ( v5 < v17 ); } } result = (_DWORD *)sub_875B00(a2); v8 = (unsigned int)result; if ( a2[7] >= 0x4010008u ) { if ( result ) { while ( 1 ) { v17 = --v8; result = (_DWORD *)sub_875AD0(v2); v12 = result; if ( result ) { v13 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[50] + 4))(v3 + 50); v13[2] = v12; v13[1] = 0; *v13 = v3[51]; v14 = v3[51]; if ( v14 ) *(_DWORD *)(v14 + 4) = v13; else v3[52] = v13; ++v3[53]; v3[51] = v13; result = sub_861480(v12, (int)v3); v8 = v17; } if ( !v8 ) break; v2 = a2; } } } else if ( result ) { while ( 1 ) { v17 = --v8; result = (_DWORD *)sub_875AD0(v2); v9 = result; if ( result ) { v10 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[50] + 4))(v3 + 50); v10[2] = v9; *v10 = 0; v10[1] = v3[52]; v11 = (_DWORD *)v3[52]; if ( v11 ) *v11 = v10; else v3[51] = v10; ++v3[53]; v3[52] = v10; result = sub_861480(v9, (int)v3); v8 = v17; } if ( !v8 ) break; v2 = a2; } } return result; } //----- (0085A6D0) -------------------------------------------------------- unsigned int __thiscall sub_85A6D0(int *this, _DWORD *a2) { int *v2; // edi char *v3; // eax unsigned int v4; // ebx char *v5; // eax unsigned int v6; // ebx unsigned int result; // eax _DWORD *v8; // ebx int v9; // edi unsigned int v10; // edi unsigned int v11; // [esp+Ch] [ebp-4Ch] char ArgList[4]; // [esp+10h] [ebp-48h] char DstBuf; // [esp+14h] [ebp-44h] v2 = this; sub_85D140(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA455C); v4 = a2[3]; *(_DWORD *)ArgList = v3; if ( v4 >= a2[2] ) sub_8237A0(a2, v4 + a2[5]); sub_823870(a2, v4, ArgList); v5 = sub_878510((int)"m_bVisual", 0.0 != *((float *)v2 + 12)); v6 = a2[3]; *(_DWORD *)ArgList = v5; if ( v6 >= a2[2] ) sub_8237A0(a2, v6 + a2[5]); result = sub_823870(a2, v6, ArgList); if ( v2[53] ) { v8 = (_DWORD *)v2[51]; for ( *(_DWORD *)ArgList = 0; v8; ++*(_DWORD *)ArgList ) { v9 = v8[2]; v8 = (_DWORD *)*v8; sub_7FF6E0(&DstBuf, 0x40u, "effect[%d]", *(_DWORD *)ArgList); result = (unsigned int)sub_878700((int)&DstBuf, v9); v10 = a2[3]; v11 = result; if ( v10 >= a2[2] ) { sub_8237A0(a2, v10 + a2[5]); result = v11; if ( v10 >= a2[2] ) continue; } if ( v10 < a2[3] ) { if ( result ) { if ( !*(_DWORD *)(a2[1] + 4 * v10) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v10) ) { --a2[4]; } } else { a2[3] = v10 + 1; if ( result ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v10) = result; } } return result; } //----- (0085A830) -------------------------------------------------------- void *__thiscall sub_85A830(void *this, char a2) { void *v2; // esi v2 = this; sub_85A210(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0085A860) -------------------------------------------------------- void __thiscall sub_85A860(_DWORD *this, unsigned int a2, unsigned int a3) { unsigned int v3; // esi _DWORD *v4; // ebx LONG (__stdcall *v5)(volatile LONG *); // ebx unsigned int v6; // eax volatile LONG *v7; // [esp-8h] [ebp-10h] v3 = a2; v4 = this; if ( a2 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_85BFD0((_DWORD *)v3, (int)v4); v7 = (volatile LONG *)(v3 + 4); if ( (_BYTE)a3 ) { a3 = v3; InterlockedIncrement(v7); sub_9334C0(v4 + 44, (LONG *)&a3); v5 = InterlockedDecrement; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(unsigned int, signed int))v3)(v3, 1); } else { a2 = v3; InterlockedIncrement(v7); v6 = v4[47]; a3 = v6; if ( v6 >= v4[46] ) { sub_81A750(v4 + 44, v6 + v4[49]); v6 = a3; } sub_7FFF10(v4 + 44, v6, (LONG *)&a2); v5 = InterlockedDecrement; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(unsigned int, signed int))v3)(v3, 1); } if ( !v5((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(unsigned int, signed int))v3)(v3, 1); } } //----- (0085A930) -------------------------------------------------------- _DWORD *__thiscall sub_85A930(_DWORD *this, _DWORD *a2, unsigned int a3, _DWORD *a4) { _DWORD *v4; // ebx _DWORD *v5; // esi _DWORD *result; // eax int v7; // edi _DWORD *v8; // esi v4 = this; if ( this[47] > a3 ) { v7 = *(_DWORD *)(this[45] + 4 * a3); if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); *(_DWORD *)(v7 + 32) = 0; } v8 = a4; if ( a4 ) sub_85BFD0(a4, (int)v4); a4 = v8; if ( v8 ) InterlockedIncrement(v8 + 1); sub_7FFF10(v4 + 44, a3, (LONG *)&a4); if ( v8 && !InterlockedDecrement(v8 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); *a2 = v7; if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } result = a2; } else { v5 = a4; if ( a4 ) sub_85BFD0(a4, (int)this); a4 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); if ( a3 >= v4[46] ) sub_81A750(v4 + 44, a3 + v4[49]); sub_7FFF10(v4 + 44, a3, (LONG *)&a4); if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); } result = a2; *a2 = 0; } return result; } //----- (0085AA60) -------------------------------------------------------- int __thiscall sub_85AA60(_DWORD *this, const char *a2) { int v2; // ebx int v3; // edi int v5; // esi int v6; // eax _DWORD *v7; // [esp+8h] [ebp-4h] v2 = 0; v3 = this[5] - 1; v7 = this; if ( !a2 ) return 0; if ( v3 < 0 ) return 0; while ( 1 ) { v5 = (v3 + v2) >> 1; v6 = strcmp(a2, (const char *)sub_879520(*(_DWORD **)(this[4] + 4 * v5))); if ( !v6 ) break; if ( v6 <= 0 ) v3 = v5 - 1; else v2 = v5 + 1; if ( v2 > v3 ) return 0; this = v7; } return *(_DWORD *)(v7[4] + 4 * v5); } //----- (0085AB00) -------------------------------------------------------- int __thiscall sub_85AB00(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax unsigned int v4; // edi int v5; // esi v2 = this; result = sub_85BAE0(this, a2); v4 = 0; if ( v2[5] ) { do result = (*(int (__stdcall **)(int))(**(_DWORD **)(v2[4] + 4 * v4++) + 40))(a2); while ( v4 < v2[5] ); } v5 = v2[3]; if ( v5 ) result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 40))(v5, a2); return result; } //----- (0085AB50) -------------------------------------------------------- void __thiscall sub_85AB50(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[2]); if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; strcpy_s(v4, v3 + 1, Src); } else { v2[2] = 0; } } //----- (0085ABB0) -------------------------------------------------------- void __thiscall sub_85ABB0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v3; // eax bool v4; // zf int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // ebx unsigned int i; // eax v2 = this; if ( a2 < this[5] ) { v3 = this[4]; v4 = *(_DWORD *)(v3 + 4 * a2) == 0; v5 = v3 + 4 * a2; if ( !v4 ) { v6 = *(void (__thiscall ****)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } for ( i = a2; i < v2[5] - 1; ++i ) *(_DWORD *)(v2[4] + 4 * i) = *(_DWORD *)(v2[4] + 4 * i + 4); *(_DWORD *)(v2[4] + 4 * --v2[5]) = 0; } } //----- (0085AC20) -------------------------------------------------------- char __thiscall sub_85AC20(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v4; // eax _DWORD *v5; // eax int v6; // eax void *v7; // ebx unsigned int i; // eax unsigned int v9; // ebx const char *v10; // edi int v11; // eax int v12; // edx int v13; // ecx _DWORD *v14; // eax v2 = this; if ( !a2 ) return 0; InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = v2[6]; if ( v4 < 1 ) { v2[6] = 1; v2[5] = 1; v5 = operator new(4u); v2[4] = v5; *v5 = a2; return 1; } if ( v2[5] == v4 ) { v6 = 2 * v4 + 1; v2[6] = v6; v7 = operator new(4 * v6); memcpy_s(v7, 4 * v2[6], (const void *)v2[4], 4 * v2[5]); operator delete((void *)v2[4]); v2[4] = v7; } *(_DWORD *)(v2[4] + 4 * v2[5]++) = a2; for ( i = v2[5]; i < v2[6]; ++i ) *(_DWORD *)(v2[4] + 4 * i) = 0; v9 = v2[5] - 1; if ( v2[5] == 1 ) return 1; while ( 1 ) { v10 = (const char *)sub_879520(*(_DWORD **)(v2[4] + 4 * v9)); v11 = strcmp((const char *)sub_879520(*(_DWORD **)(v2[4] + 4 * v9 - 4)), v10); if ( !v11 ) break; if ( v11 <= 0 ) return 1; v12 = v2[4]; v13 = *(_DWORD *)(v12 + 4 * v9 - 4); v14 = (_DWORD *)(v12 + 4 * v9--); *(v14 - 1) = *v14; *(_DWORD *)(v2[4] + 4 * v9 + 4) = v13; if ( !v9 ) return 1; } sub_85ABB0(v2, v9); return 0; } //----- (0085AD90) -------------------------------------------------------- char __thiscall sub_85AD90(void *this, unsigned int a2) { void *v2; // esi int v4; // ecx bool v5; // zf signed __int64 v6; // rax signed __int64 v7; // rax void *v8; // edi v2 = this; if ( !a2 ) return 0; v4 = 0; v5 = *((_DWORD *)v2 + 6) == 0; *((_DWORD *)v2 + 6) = a2; if ( v5 ) { v6 = 4i64 * a2; LOBYTE(v4) = HIDWORD(v6) != 0; *((_DWORD *)v2 + 4) = operator new(v6 | -v4); *((_DWORD *)v2 + 5) = 0; } else { v7 = 4i64 * a2; LOBYTE(v4) = HIDWORD(v7) != 0; v8 = operator new(v7 | -v4); memcpy_s(v8, 4 * *((_DWORD *)v2 + 6), *((const void **)v2 + 4), 4 * *((_DWORD *)v2 + 5)); operator delete(*((void **)v2 + 4)); *((_DWORD *)v2 + 4) = v8; } return 1; } //----- (0085AE20) -------------------------------------------------------- char __thiscall sub_85AE20(_DWORD *this, char *Src, int a3) { _DWORD *v3; // ebx v3 = this; if ( !Src ) return 0; if ( a3 ) { if ( !sub_879520((_DWORD *)a3) ) { sub_868E90((void **)a3, Src); return sub_85AC20(v3, a3); } if ( !strcmp(Src, (const char *)sub_879520((_DWORD *)a3)) ) return sub_85AC20(v3, a3); } return 0; } //----- (0085AEA0) -------------------------------------------------------- char __thiscall sub_85AEA0(_DWORD *this, void **a2) { int v2; // edi _DWORD *v3; // ebx const char **v5; // eax const char *v6; // esi char *v7; // eax rsize_t v8; // ebx size_t v9; // edi char *v10; // esi _DWORD *v11; // [esp+8h] [ebp-18h] char *v12; // [esp+Ch] [ebp-14h] char Src; // [esp+14h] [ebp-Ch] v2 = (int)a2; v3 = this; v11 = this; if ( !a2 ) return 0; if ( !sub_879520(a2) ) { v5 = (const char **)(*((int (__thiscall **)(void **))*a2 + 1))(a2); v6 = *v5; v12 = (char *)*v5; if ( *v5 ) { if ( strlen(v6) ) { sub_7FF6E0(&Src, 6u, "ED%03d", v3[5]); v7 = strstr(v6, "ExtraData"); v8 = 0; if ( v7 > v6 ) v8 = v7 - v6; v9 = strlen(&Src) + v8 + 1; v10 = (char *)operator new(v9); strncpy_s(v10, v9, v12, v8); v10[v8] = 0; strcat_s(v10, v9, &Src); sub_868E90(a2, v10); operator delete(v10); v3 = v11; v2 = (int)a2; } } } return sub_85AC20(v3, v2); } //----- (0085AFB0) -------------------------------------------------------- char __thiscall sub_85AFB0(_DWORD *this, const char *a2) { int v2; // ebx int v3; // edi int v5; // esi int v6; // eax _DWORD *v7; // [esp+8h] [ebp-4h] v2 = 0; v3 = this[5] - 1; v7 = this; if ( !a2 ) return 0; if ( v3 < 0 ) return 0; while ( 1 ) { v5 = (v3 + v2) >> 1; v6 = strcmp(a2, (const char *)sub_879520(*(_DWORD **)(this[4] + 4 * v5))); if ( !v6 ) break; if ( v6 <= 0 ) v3 = v5 - 1; else v2 = v5 + 1; if ( v2 > v3 ) return 0; this = v7; } sub_85ABB0(v7, (v3 + v2) >> 1); return 1; } //----- (0085B050) -------------------------------------------------------- char __thiscall sub_85B050(_DWORD *this, unsigned int a2) { if ( a2 >= this[5] ) return 0; sub_85ABB0(this, a2); return 1; } //----- (0085B070) -------------------------------------------------------- int __thiscall sub_85B070(_DWORD *this) { _DWORD *v1; // esi int i; // edi int v3; // eax bool v4; // zf int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // ebx unsigned int j; // eax int result; // eax v1 = this; for ( i = this[5] - 1; i >= 0; --i ) { if ( (unsigned int)i < v1[5] ) { v3 = v1[4]; v4 = *(_DWORD *)(v3 + 4 * i) == 0; v5 = v3 + 4 * i; if ( !v4 ) { v6 = *(void (__thiscall ****)(_DWORD, signed int))v5; if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v5 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } for ( j = i; j < v1[5] - 1; ++j ) *(_DWORD *)(v1[4] + 4 * j) = *(_DWORD *)(v1[4] + 4 * j + 4); *(_DWORD *)(v1[4] + 4 * --v1[5]) = 0; } } operator delete((void *)v1[4]); result = 0; v1[4] = 0; v1[6] = 0; v1[5] = 0; return result; } //----- (0085B110) -------------------------------------------------------- void __thiscall sub_85B110(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = this[3]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } v1[3] = 0; } } //----- (0085B150) -------------------------------------------------------- int __thiscall sub_85B150(int *this, void **a2) { int *v2; // edi v2 = this; sub_85BC50(this, (signed int)a2); sub_8769C0(a2, v2 + 2); if ( (unsigned int)a2[7] >= 0x500000B ) sub_876350(a2); else sub_876290(a2); return sub_876290(a2); } //----- (0085B1A0) -------------------------------------------------------- int __thiscall sub_85B1A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ebx void **v4; // eax int result; // eax int v6; // esi int v7; // ebx v2 = this; nullsub_32(a2); if ( a2[7] >= 0x500000Bu ) { v3 = sub_875B00(a2); sub_85AD90(v2, v3); for ( ; v3; --v3 ) { v4 = (void **)sub_875AD0(a2); sub_85AEA0(v2, v4); } } else { v2[4] = sub_875AD0(a2); } result = sub_875AD0(a2); v6 = v2[3]; v7 = result; if ( v6 != result ) { if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } v2[3] = v7; if ( v7 ) result = InterlockedIncrement((volatile LONG *)(v7 + 4)); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0085B240) -------------------------------------------------------- char __thiscall sub_85B240(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // ebx int v5; // ecx int v6; // esi int v7; // edi v2 = this; result = sub_85BA30(this, a2); if ( result ) { v4 = 0; if ( v2[5] ) { do { v5 = v2[4]; v6 = *(_DWORD *)(v5 + 4 * v4); if ( v6 && (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v6 + 60))(*(_DWORD *)(v5 + 4 * v4)) ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 20))(v6, a2); ++v4; } while ( v4 < v2[5] ); } v7 = v2[3]; if ( v7 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 20))(v7, a2); result = 1; } return result; } //----- (0085B2B0) -------------------------------------------------------- _DWORD *__thiscall sub_85B2B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiObjectNET::`vftable'; v1[3] = 0; v1[2] = 0; v1[4] = 0; v1[6] = 0; v1[5] = 0; return v1; } // A23D04: using guessed type void *NiObjectNET::`vftable'; //----- (0085B2E0) -------------------------------------------------------- char *sub_85B2E0() { return dword_BA4568; } //----- (0085B2F0) -------------------------------------------------------- LONG __thiscall sub_85B2F0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 int v3; // edi v1 = this; v2 = (void *)this[2]; *this = &NiObjectNET::`vftable'; operator delete(v2); sub_85B070(v1); v3 = v1[3]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_85BA80(v1); } // A23D04: using guessed type void *NiObjectNET::`vftable'; //----- (0085B340) -------------------------------------------------------- void __thiscall sub_85B340(void *this, int a2, int a3) { void *v3; // ebx int v4; // eax const char *v5; // edi unsigned int v6; // kr00_4 char *v7; // eax const char *v8; // eax size_t v9; // edi char *v10; // esi unsigned int v11; // edi int v12; // esi void **v13; // eax int v14; // ebx int v15; // edi int v16; // esi v3 = this; sub_85BB00(this, a2, (_DWORD **)a3); v4 = *(_DWORD *)(a3 + 8); if ( v4 == 1 ) { v5 = (const char *)*((_DWORD *)v3 + 2); operator delete(*(void **)(a2 + 8)); if ( v5 ) { v6 = strlen(v5); v7 = (char *)operator new(v6 + 1); *(_DWORD *)(a2 + 8) = v7; strcpy_s(v7, v6 + 1, v5); } else { *(_DWORD *)(a2 + 8) = 0; } } else if ( v4 == 2 ) { v8 = (const char *)*((_DWORD *)v3 + 2); if ( v8 ) { v9 = strlen(v8) + 2; v10 = (char *)operator new(v9); strcpy_s(v10, v9, *((const char **)v3 + 2)); v10[v9 - 2] = *(_BYTE *)(a3 + 12); v10[v9 - 1] = 0; sub_85AB50((void **)a2, v10); operator delete(v10); } } v11 = 0; if ( *((_DWORD *)v3 + 5) ) { do { v12 = *(_DWORD *)(*((_DWORD *)v3 + 4) + 4 * v11); if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v12 + 64))(*(_DWORD *)(*((_DWORD *)v3 + 4) + 4 * v11)) ) { v13 = (void **)(*(int (__thiscall **)(int, int))(*(_DWORD *)v12 + 8))(v12, a3); sub_85AEA0((_DWORD *)a2, v13); } ++v11; } while ( v11 < *((_DWORD *)v3 + 5) ); } v14 = *((_DWORD *)v3 + 3); if ( v14 ) { v15 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v14 + 8))(v14, a3); v16 = *(_DWORD *)(a2 + 12); if ( v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *(_DWORD *)(a2 + 12) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } } } //----- (0085B490) -------------------------------------------------------- void __thiscall sub_85B490(_DWORD *this, int a2) { int v2; // esi int v3; // edi int v4; // esi _DWORD *v5; // [esp+4h] [ebp-4h] v5 = this; if ( a2 ) { v2 = *(_DWORD *)(a2 + 52); v3 = this[3]; if ( v2 != v3 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(a2 + 52) = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } v4 = v5[3]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v5[3] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } } //----- (0085B520) -------------------------------------------------------- void __thiscall sub_85B520(_DWORD *this, int a2) { int v2; // esi int v3; // eax _DWORD *v4; // edi int v5; // edi _DWORD *v6; // edi _DWORD *v7; // eax int v8; // edi v2 = a2; if ( a2 ) { v3 = this[3]; v4 = this + 3; if ( v3 ) { if ( v3 == a2 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_56FF80(v4, *(_DWORD *)(v2 + 52)); v5 = *(_DWORD *)(v2 + 52); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v2 + 52) = 0; } if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } else { v6 = (_DWORD *)this[3]; v7 = *(_DWORD **)(v3 + 52); if ( v7 ) { while ( v7 != (_DWORD *)a2 ) { v6 = v7; v7 = (_DWORD *)v7[13]; if ( !v7 ) return; } if ( v7 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_80C740(v6, *(_DWORD *)(v2 + 52)); v8 = *(_DWORD *)(v2 + 52); if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(v2 + 52) = 0; } sub_410C00(&a2); } } } } } } //----- (0085B610) -------------------------------------------------------- _DWORD *__thiscall sub_85B610(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = (_DWORD *)this[3]; if ( !v2 ) return 0; while ( 1 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v3 ) break; LABEL_5: v2 = (_DWORD *)v2[13]; if ( !v2 ) return 0; } while ( v3 != a2 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } return v2; } //----- (0085B660) -------------------------------------------------------- int __thiscall sub_85B660(const char **this, _DWORD *a2) { _DWORD *v2; // ebx const char **v3; // esi unsigned int v4; // edi int v5; // eax int v6; // ST00_4 void (__cdecl *v7)(int, int *, signed int, int *, signed int); // eax unsigned int v8; // edi int v9; // ebx char *i; // esi int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); sub_876A50(a2, v3[2]); v4 = 0; v13 = 0; if ( v3[5] ) { do { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)&v3[4][4 * v4] + 60))() ) ++v13; ++v4; } while ( v4 < (unsigned int)v3[5] ); } v5 = a2[89]; v6 = v5; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v5 + 8); v12 = 4; v7(v6, &v13, 4, &v12, 1); v8 = 0; if ( v3[5] ) { do { v9 = *(_DWORD *)&v3[4][4 * v8]; if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*(_DWORD *)v9 + 60))(*(_DWORD *)&v3[4][4 * v8]) ) (*(void (__stdcall **)(int))(*a2 + 44))(v9); ++v8; } while ( v8 < (unsigned int)v3[5] ); v2 = a2; } for ( i = (char *)v3[3]; i; i = (char *)*((_DWORD *)i + 13) ) { if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)i + 92))(i) ) break; } return (*(int (__thiscall **)(_DWORD *, char *))(*v2 + 44))(v2, i); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0085B730) -------------------------------------------------------- void __thiscall sub_85B730(_DWORD *this, int a2) { _DWORD *v2; // edi void **v3; // esi int v4; // ebx unsigned int v5; // esi int v6; // ecx v2 = this; nullsub_32(a2); if ( *(_DWORD *)(a2 + 28) < 0x500000Bu ) { v3 = (void **)v2[4]; if ( v3 ) { v2[4] = 0; do { v4 = sub_879520(v3); sub_868D50(v3); sub_85AEA0(v2, v3); v3 = (void **)v4; } while ( v4 ); } } v5 = 0; if ( v2[5] ) { do { v6 = *(_DWORD *)(v2[4] + 4 * v5); if ( v6 && (*(int (**)(void))(*(_DWORD *)v6 + 4))() == (_DWORD)dword_BA4A60 ) { if ( v5 < v2[5] ) sub_85ABB0(v2, v5); v5 = -1; } ++v5; } while ( v5 < v2[5] ); } } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0085B7C0) -------------------------------------------------------- char __thiscall sub_85B7C0(_DWORD *this, int a2) { _DWORD *v2; // edi const char *v4; // eax int v5; // eax int v6; // esi _DWORD *v7; // esi int v8; // edi int v9; // ebx int v10; // eax v2 = this; if ( !sub_85BB20(this, a2) ) return 0; v4 = (const char *)v2[2]; if ( v4 ) { if ( !*(_DWORD *)(a2 + 8) ) return 0; if ( v4 ) goto LABEL_8; } if ( *(_DWORD *)(a2 + 8) ) return 0; if ( !v4 ) goto LABEL_9; LABEL_8: if ( strcmp(v4, *(const char **)(a2 + 8)) ) return 0; LABEL_9: v5 = v2[5]; if ( v5 != *(_DWORD *)(a2 + 20) ) return 0; v6 = 0; if ( v5 ) { while ( (*(unsigned __int8 (__stdcall **)(_DWORD))(**(_DWORD **)(v2[4] + 4 * v6) + 28))(*(_DWORD *)(*(_DWORD *)(a2 + 16) + 4 * v6)) ) { if ( (unsigned int)++v6 >= v2[5] ) goto LABEL_13; } return 0; } LABEL_13: v7 = (_DWORD *)v2[3]; v8 = *(_DWORD *)(a2 + 12); if ( v7 ) v9 = sub_86BE70((int)v7); else v9 = 0; if ( v8 ) v10 = sub_86BE70(v8); else v10 = 0; if ( v9 != v10 ) return 0; for ( ; v7; v8 = *(_DWORD *)(v8 + 52) ) { if ( !v8 ) break; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v7 + 28))(v7, v8) ) return 0; v7 = (_DWORD *)v7[13]; } return 1; } //----- (0085B8C0) -------------------------------------------------------- _DWORD *__thiscall sub_85B8C0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiObjectNET::`vftable'; operator delete(v3); sub_85B070(v2); v4 = v2[3]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A23D04: using guessed type void *NiObjectNET::`vftable'; //----- (0085B930) -------------------------------------------------------- unsigned int __thiscall sub_85B930(int *this, int a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx unsigned int result; // eax unsigned int v9; // ebx _DWORD *i; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4568); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878740((int)"m_pcName", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); result = sub_823870(v2, v7, &a2); v9 = 0; if ( v3[5] ) { do result = (*(int (__stdcall **)(_DWORD *))(**(_DWORD **)(v3[4] + 4 * v9++) + 32))(v2); while ( v9 < v3[5] ); } for ( i = (_DWORD *)v3[3]; i; i = (_DWORD *)i[13] ) result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*i + 32))(i, v2); return result; } //----- (0085B9F0) -------------------------------------------------------- int __thiscall sub_85B9F0(void *this, int a2) { void *v2; // esi int v3; // ebx v2 = this; v3 = (*(int (__stdcall **)(int))(*(_DWORD *)this + 8))(a2); (*(void (__thiscall **)(void *, int))(*(_DWORD *)v2 + 40))(v2, a2); return v3; } //----- (0085BA20) -------------------------------------------------------- void *__thiscall sub_85BA20(void *this, int a2) { return this; } //----- (0085BA30) -------------------------------------------------------- int __thiscall sub_85BA30(void *this, int a2) { return (*(int (__stdcall **)(void *))(*(_DWORD *)a2 + 32))(this); } //----- (0085BA50) -------------------------------------------------------- _DWORD *__thiscall sub_85BA50(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiObject::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A23D54: using guessed type void *NiObject::`vftable'; //----- (0085BA80) -------------------------------------------------------- LONG __thiscall sub_85BA80(_DWORD *this) { *this = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (0085BAA0) -------------------------------------------------------- int __thiscall sub_85BAA0(void *this, _DWORD **a2) { _DWORD **v2; // edi void *v3; // esi int result; // eax v2 = a2; v3 = this; if ( sub_8C4C90(*a2, (int)this, &a2) ) result = (int)a2; else result = (*(int (__thiscall **)(void *, _DWORD **))(*(_DWORD *)v3 + 8))(v3, v2); return result; } //----- (0085BAE0) -------------------------------------------------------- int __thiscall sub_85BAE0(void *this, int a2) { return sub_815C70(*(_DWORD **)(a2 + 4), (int)this, 1); } //----- (0085BB00) -------------------------------------------------------- int __thiscall sub_85BB00(void *this, int a2, _DWORD **a3) { return sub_815C70(*a3, (int)this, a2); } //----- (0085BB20) -------------------------------------------------------- bool __thiscall sub_85BB20(void *this, int a2) { void *v2; // esi const char *v4; // edi v2 = this; if ( !a2 ) return 0; v4 = *(const char **)(*(int (**)(void))(*(_DWORD *)a2 + 4))(); return strcmp(*(const char **)(*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 4))(v2), v4) == 0; } //----- (0085BB90) -------------------------------------------------------- int *__thiscall sub_85BB90(void *this, int *a2) { int v2; // edi int v3; // eax int v5; // [esp+8h] [ebp-3E4h] void *v6; // [esp+Ch] [ebp-3E0h] char v7; // [esp+10h] [ebp-3DCh] int *v8; // [esp+15Ch] [ebp-290h] v2 = (int)this; sub_877EC0(&v7); sub_8772E0(&v7, v2); v6 = 0; v5 = 0; sub_875DD0(&v7, (int *)&v6, &v5); sub_875990(&v7, (int)v6, v5); v3 = *v8; *a2 = *v8; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); operator delete(v6); sub_877120(&v7); return a2; } //----- (0085BC50) -------------------------------------------------------- unsigned int __thiscall sub_85BC50(int *this, signed int a2) { _DWORD *v2; // edi unsigned int result; // eax int *v4; // esi int v5; // eax int v6; // ST00_4 void (__cdecl *v7)(int, int *, signed int, signed int *, signed int); // eax int v8; // ebx int v9; // eax int v10; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; result = *(_DWORD *)(a2 + 28); v4 = this; if ( result >= 0x5000006 && result < 0xA010072 ) { v5 = *(_DWORD *)(a2 + 352); v6 = v5; v7 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v5 + 4); a2 = 4; v7(v6, &v10, 4, &a2, 1); v8 = *v4; v9 = sub_875B80(v2, v10); result = (*(int (__thiscall **)(int *, int))(v8 + 56))(v4, v9); } return result; } //----- (0085BCB0) -------------------------------------------------------- unsigned int __thiscall sub_85BCB0(int this, int a2) { int v2; // ebx char *v3; // eax _DWORD *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi char *v11; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA4574); v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 12); v11 = v3; if ( v5 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v5 + *(_DWORD *)(a2 + 20)); sub_823870(v4, v5, &v11); v6 = sub_878700((int)"this", v2); v7 = v4[3]; a2 = (int)v6; if ( v7 >= v4[2] ) sub_8237A0(v4, v7 + v4[5]); sub_823870(v4, v7, &a2); v8 = sub_878670((int)"m_uiRefCount", *(_DWORD *)(v2 + 4)); v9 = v4[3]; a2 = (int)v8; if ( v9 >= v4[2] ) sub_8237A0(v4, v9 + v4[5]); return sub_823870(v4, v9, &a2); } //----- (0085BD60) -------------------------------------------------------- int __thiscall sub_85BD60(void *this) { void *v1; // esi int v2; // edi void (__stdcall ***v4)(signed int); // [esp+8h] [ebp-10h] void (__stdcall ***v5)(signed int); // [esp+Ch] [ebp-Ch] v1 = this; sub_8012C0(&v4); v2 = (*(int (__thiscall **)(void *, void (__stdcall ****)(signed int)))(*(_DWORD *)v1 + 8))(v1, &v4); (*(void (__thiscall **)(void *, void (__stdcall ****)(signed int)))(*(_DWORD *)v1 + 40))(v1, &v4); if ( v4 ) (**v4)(1); if ( v5 ) (**v5)(1); return v2; } //----- (0085BDC0) -------------------------------------------------------- float *__thiscall sub_85BDC0(float *this, float *a2, float *a3) { float *v3; // ebx double v4; // st7 float *v5; // eax float v6; // ST18_4 float v7; // ST1C_4 double v8; // st7 float *result; // eax float v10; // ST20_4 float v11; // edx double v12; // st7 float v13; // [esp+1Ch] [ebp-38h] float v14; // [esp+20h] [ebp-34h] float v15; // [esp+24h] [ebp-30h] float v16; // [esp+28h] [ebp-2Ch] char v17; // [esp+2Ch] [ebp-28h] v3 = this; v4 = a3[12] * this[12]; v16 = *(float *)&a3; a2[12] = v4; qmemcpy(a2, sub_85D940(this, (float *)&v17, a3), 0x24u); v5 = sub_85DA90(v3, &v13, (float *)(LODWORD(v16) + 36)); v16 = v3[12]; v6 = *v5 * v16; v7 = v5[1] * v16; v8 = v16 * v5[2]; result = a2; v10 = v8; v13 = v3[9] + v6; v14 = v3[10] + v7; v11 = v14; v12 = v3[11]; a2[9] = v13; a2[10] = v11; v15 = v12 + v10; a2[11] = v15; return result; } //----- (0085BE80) -------------------------------------------------------- float *__thiscall sub_85BE80(int this) { int v1; // ebx float *result; // eax float *v3; // esi float *v4; // edi int v5; // ebx char v6; // [esp+Ch] [ebp-34h] v1 = this; result = *(float **)(this + 32); if ( result ) { result = sub_85BDC0(result + 26, (float *)&v6, (float *)(this + 52)); v3 = result; } else { v3 = (float *)(this + 52); } v4 = (float *)(v1 + 104); v5 = *(_DWORD *)(v1 + 172); qmemcpy(v4, v3, 0x34u); if ( v5 ) result = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 64))(v5); return result; } //----- (0085BED0) -------------------------------------------------------- int __thiscall sub_85BED0(_DWORD **this, float a2, int a3) { _DWORD **v3; // esi int result; // eax v3 = this; result = ((int (__thiscall *)(_DWORD **, _DWORD, int))(*this)[20])(this, LODWORD(a2), a3); if ( v3[8] ) result = (*(int (**)(void))(*v3[8] + 132))(); return result; } //----- (0085BF10) -------------------------------------------------------- int __thiscall sub_85BF10(_DWORD **this, float a2) { _DWORD **v2; // esi int result; // eax v2 = this; result = ((int (__stdcall *)(_DWORD))(*this)[21])(LODWORD(a2)); if ( v2[8] ) result = (*(int (**)(void))(*v2[8] + 132))(); return result; } //----- (0085BF50) -------------------------------------------------------- int __thiscall sub_85BF50(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A23DB8: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A23DC8: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (0085BF90) -------------------------------------------------------- void *__thiscall sub_85BF90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A23DB8: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (0085BFD0) -------------------------------------------------------- void __thiscall sub_85BFD0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx void (__thiscall ***v4)(_DWORD, signed int); // edi int v5; // [esp+4h] [ebp-4h] v2 = this; v3 = this[8]; if ( v3 ) { (*(void (__stdcall **)(int *, _DWORD *))(*(_DWORD *)v3 + 120))(&v5, v2); v4 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !v5 ) { LABEL_6: v2[8] = a2; return; } if ( InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { v2[8] = a2; } else { if ( v4 ) { (**v4)(v4, 1); goto LABEL_6; } v2[8] = a2; } } else { v2[8] = a2; } } //----- (0085C050) -------------------------------------------------------- int __thiscall sub_85C050(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = (_DWORD *)this[40]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 60))(v3) == a2 ) break; } if ( !v2 ) return 0; } return v3; } //----- (0085C0A0) -------------------------------------------------------- int __thiscall sub_85C0A0(_BYTE *this, int a2) { int result; // eax if ( !(this[28] & 1) ) result = (*(int (__thiscall **)(int, _BYTE *))(*(_DWORD *)a2 + 4))(a2, this); return result; } //----- (0085C0C0) -------------------------------------------------------- _DWORD *__thiscall sub_85C0C0(_DWORD *this, const char *a2) { const char *v2; // edx if ( !a2 ) return 0; v2 = (const char *)this[2]; if ( !v2 ) return 0; if ( !strcmp(a2, v2) ) return this; return 0; } //----- (0085C120) -------------------------------------------------------- void __thiscall sub_85C120(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi v2 = (_DWORD *)this[40]; if ( v2 ) { while ( 1 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 60))(v3) == 3 ) break; } if ( !v2 ) return; } (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 160))(v3); } } //----- (0085C170) -------------------------------------------------------- int __stdcall sub_85C170(int a1, int a2) { int result; // eax int v3; // ecx _DWORD *v4; // esi int v5; // ebx _DWORD *v6; // edi int v7; // [esp+8h] [ebp+8h] result = a1; v3 = *(_DWORD *)(a1 + 8); if ( v3 ) { while ( 1 ) { v4 = *(_DWORD **)(a2 + 4); v5 = *(_DWORD *)(v3 + 8); v7 = *(_DWORD *)(v3 + 4); v6 = *(_DWORD **)(v4[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*v4 + 4))(*(_DWORD *)(a2 + 4), *(_DWORD *)(v3 + 8))); if ( v6 ) { while ( 1 ) { result = (*(int (__thiscall **)(_DWORD *, int, _DWORD))(*v4 + 8))(v4, v5, v6[1]); if ( (_BYTE)result ) break; v6 = (_DWORD *)*v6; if ( !v6 ) goto LABEL_7; } } else { LABEL_7: result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 40))(v5, a2); } if ( !v7 ) break; v3 = v7; } } return result; } //----- (0085C1F0) -------------------------------------------------------- int __thiscall sub_85C1F0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_85AB00(this, a2); if ( v2[42] ) result = sub_85C170((int)(v2 + 39), a2); v4 = v2[43]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (0085C230) -------------------------------------------------------- char __thiscall sub_85C230(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al _DWORD *v4; // esi int v5; // ecx int v6; // ecx v2 = this; result = sub_85B240(this, a2); if ( result ) { v4 = (_DWORD *)v2[40]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); } v6 = v2[43]; if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(a2); result = 1; } return result; } //----- (0085C290) -------------------------------------------------------- void __thiscall sub_85C290(char *this, volatile LONG *a2) { volatile LONG **v2; // ebx volatile LONG *v3; // edi if ( a2 ) { v2 = (volatile LONG **)&this[4 * (*(int (__thiscall **)(volatile LONG *))(*a2 + 60))(a2) + 8]; v3 = *v2; if ( *v2 != a2 ) { if ( v3 && !InterlockedDecrement(v3 + 1) ) { if ( v3 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } *v2 = a2; InterlockedIncrement(a2 + 1); } } } //----- (0085C2F0) -------------------------------------------------------- void *__thiscall sub_85C2F0(void *this, char a2) { void *v2; // esi v2 = this; sub_85BF50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0085C320) -------------------------------------------------------- LONG __thiscall sub_85C320(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi _DWORD *v3; // ST00_4 int v4; // esi int v5; // esi v1 = this; *this = &NiAVObject::`vftable'; v2 = (_DWORD *)this[40]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[39] + 8))(v1 + 39, v3); } v1[42] = 0; v1[40] = 0; v1[41] = 0; v4 = v1[43]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[43] = 0; } v5 = v1[43]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); sub_85BF50(v1 + 39); return sub_85B2F0(v1); } // A23DEC: using guessed type void *NiAVObject::`vftable'; //----- (0085C3D0) -------------------------------------------------------- char *sub_85C3D0() { return dword_BA457C; } //----- (0085C3E0) -------------------------------------------------------- int __thiscall sub_85C3E0(_DWORD *this, float a2, char a3) { _DWORD *v3; // esi v3 = this; if ( a3 ) sub_8592D0(this, a2, 1); (*(void (__thiscall **)(_DWORD *))(*v3 + 100))(v3); return (*(int (__thiscall **)(_DWORD *))(*v3 + 104))(v3); } //----- (0085C420) -------------------------------------------------------- _DWORD *__thiscall sub_85C420(_BYTE *this, float a2) { _BYTE *v2; // esi _DWORD *result; // eax v2 = this; result = sub_8592D0(this, a2, (this[28] >> 3) & 1); if ( (v2[28] >> 2) & 1 ) { (*(void (__thiscall **)(_BYTE *))(*(_DWORD *)v2 + 100))(v2); result = (_DWORD *)(*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v2 + 104))(v2); } return result; } //----- (0085C470) -------------------------------------------------------- _DWORD *__thiscall sub_85C470(_DWORD *this, float a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v4; // ecx _DWORD *result; // eax _DWORD *i; // esi v2 = this; v3 = (_DWORD *)this[40]; while ( v3 ) { v4 = (_DWORD *)v3[2]; result = v3 + 2; v3 = (_DWORD *)*v3; if ( v4 && v4[3] ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD))(*v4 + 64))(LODWORD(a2)); } for ( i = (_DWORD *)v2[3]; i; i = (_DWORD *)i[13] ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD))(*i + 68))(i, LODWORD(a2)); return result; } //----- (0085C4D0) -------------------------------------------------------- LONG __thiscall sub_85C4D0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx _DWORD *v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // edi _DWORD *v6; // eax _DWORD *v7; // eax LONG result; // eax int v9; // [esp+Ch] [ebp-4h] v1 = this; v2 = (_DWORD *)this[8]; v3 = 0; if ( v2 ) { v4 = *sub_8597D0(v2, &v9); if ( v4 ) { v3 = (_DWORD *)v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v5 ) (**v5)(v5, 1); } else { v6 = operator new(0x38u); if ( v6 ) { v7 = sub_87DE20(v6); if ( v7 ) { v3 = v7; InterlockedIncrement(v7 + 1); } } } result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 92))(v1, v3); if ( v3 ) { result = InterlockedDecrement(v3 + 1); if ( !result ) result = (*(int (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); } return result; } //----- (0085C580) -------------------------------------------------------- char __thiscall sub_85C580(_DWORD *this) { _DWORD *v1; // esi v1 = (_DWORD *)this[3]; if ( !v1 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v1 + 76))(v1) ) { v1 = (_DWORD *)v1[13]; if ( !v1 ) return 0; } return 1; } //----- (0085C5B0) -------------------------------------------------------- char __thiscall sub_85C5B0(_DWORD *this) { _DWORD *v1; // eax int v2; // ecx v1 = (_DWORD *)this[40]; if ( !v1 ) return 0; while ( 1 ) { v2 = v1[2]; v1 = (_DWORD *)*v1; if ( v2 ) { if ( *(_DWORD *)(v2 + 12) ) break; } if ( !v1 ) return 0; } return 1; } //----- (0085C5E0) -------------------------------------------------------- int *__thiscall sub_85C5E0(_DWORD *this, int *a2, int a3, char a4) { _DWORD *v4; // esi _DWORD *v6; // edi _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // ebx volatile LONG *v10; // esi volatile LONG **v11; // edi volatile LONG *v12; // edi _DWORD *v13; // [esp+4h] [ebp-4h] volatile LONG **v14; // [esp+18h] [ebp+10h] v4 = this; if ( !this[42] ) { *a2 = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); return a2; } v6 = 0; v13 = 0; if ( !a4 ) { v8 = (_DWORD *)a3; LABEL_9: if ( v8 ) { v13 = v8; InterlockedIncrement(v8 + 1); v6 = v13; } goto LABEL_11; } v7 = operator new(0x38u); if ( v7 ) { v8 = sub_87D9C0(v7, a3); goto LABEL_9; } LABEL_11: v9 = (_DWORD *)v4[40]; while ( v9 ) { v10 = (volatile LONG *)v9[2]; v9 = (_DWORD *)*v9; if ( v10 ) { v11 = (volatile LONG **)&v6[(*(int (__thiscall **)(volatile LONG *))(*v10 + 60))(v10) + 2]; v14 = v11; v12 = *v11; if ( v12 != v10 ) { if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); *v14 = v10; InterlockedIncrement(v10 + 1); } v6 = v13; } } *a2 = (int)v6; if ( v6 ) { InterlockedIncrement(v6 + 1); if ( !InterlockedDecrement(v6 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); } return a2; } //----- (0085C6F0) -------------------------------------------------------- LONG __thiscall sub_85C6F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx int v3; // esi int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // ebx LONG result; // eax int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[8]; v3 = 0; if ( v2 ) { v4 = *sub_85A2D0(v2, &v7); if ( v4 ) { v3 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); } v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v5 ) (**v5)(v5, 1); } result = (*(int (__thiscall **)(_DWORD *, int))(*v1 + 96))(v1, v3); if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } return result; } //----- (0085C770) -------------------------------------------------------- _DWORD *__thiscall sub_85C770(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // esi _DWORD *result; // eax _DWORD *v5; // edi int v6; // esi int v7; // esi int v8; // esi _DWORD *v9; // edi int v10; // ecx _DWORD *v11; // [esp+Ch] [ebp-4h] _DWORD *v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v11 = this; sub_85B1A0(this, a2); result = (_DWORD *)sub_875B00(v2); v5 = result; if ( v2[7] >= 0x4010008u ) { if ( result ) { do { v5 = (_DWORD *)((char *)v5 - 1); v7 = sub_875AD0(v2); a2 = (_DWORD *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); result = (_DWORD *)sub_8A6330(v11 + 39, (int *)&a2); if ( v7 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } while ( v5 ); v3 = v11; } if ( v2[7] >= 0x5000013u ) { result = (_DWORD *)sub_875AD0(v2); v8 = v3[43]; v9 = result; if ( (_DWORD *)v8 != result ) { if ( v8 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } v11[43] = v9; if ( v9 ) result = (_DWORD *)InterlockedIncrement(v9 + 1); } v10 = v11[43]; if ( v10 ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v10 + 76))(v2[7], 0); } } else if ( result ) { v12 = v3 + 39; do { v5 = (_DWORD *)((char *)v5 - 1); v6 = sub_875AD0(v2); a2 = (_DWORD *)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); result = sub_8B8EC0(v12, (int *)&a2); if ( v6 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } while ( v5 ); } return result; } //----- (0085C8D0) -------------------------------------------------------- char __thiscall sub_85C8D0(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // ebx int v5; // eax _DWORD *v6; // esi _DWORD *v7; // edi int v8; // ecx int *v9; // eax int v10; // eax int v11; // ecx int v12; // eax v2 = a2; v3 = this; if ( !sub_85B7C0(this, a2) ) return 0; if ( (*((_BYTE *)v3 + 28) ^ *(_BYTE *)(a2 + 28)) & 1 ) return 0; if ( (unsigned __int8)sub_87C4A0((float *)v3 + 13, (float *)(a2 + 52)) ) return 0; v5 = v3[42]; if ( v5 != *(_DWORD *)(a2 + 168) ) return 0; if ( v5 ) { v6 = (_DWORD *)v3[40]; v7 = *(_DWORD **)(a2 + 160); while ( v6 ) { v8 = v6[2]; v6 = (_DWORD *)*v6; v9 = v7 + 2; v7 = (_DWORD *)*v7; v10 = *v9; if ( v8 ) { if ( !v10 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v8 + 28))(v10) ) return 0; } else if ( v10 ) { return 0; } } v2 = a2; } v11 = v3[43]; v12 = *(_DWORD *)(v2 + 172); if ( v11 && v12 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v11 + 28))(*(_DWORD *)(v2 + 172)) ) return 0; } else if ( v11 != v12 ) { return 0; } return 1; } //----- (0085C9A0) -------------------------------------------------------- _DWORD *__thiscall sub_85C9A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi v1 = this; sub_85B2B0(this); *v1 = &NiAVObject::`vftable'; v1[42] = 0; v1[40] = 0; v1[41] = 0; v1[39] = &NiTPointerList>::`vftable'; v1[43] = 0; v1[8] = 0; *((_WORD *)v1 + 14) = 0; sub_87C3C0((float *)v1 + 13); sub_87C3C0((float *)v1 + 26); v1[9] = dword_BA45C0; v1[10] = dword_BA45C4; v2 = dword_BA45C8; *((float *)v1 + 12) = 0.0; v1[11] = v2; *((_WORD *)v1 + 14) = v1[7] & 0xFFF1 | 0x10; v3 = v1[43]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[43] = 0; } return v1; } // A23DD8: using guessed type void *NiTPointerList>::`vftable'; // A23DEC: using guessed type void *NiAVObject::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0085CA60) -------------------------------------------------------- void *__thiscall sub_85CA60(void *this, char a2) { void *v2; // esi v2 = this; sub_85C320(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0085CA90) -------------------------------------------------------- volatile LONG **__thiscall sub_85CA90(_DWORD *this, volatile LONG **a2, int a3) { _DWORD *v3; // edi volatile LONG *v4; // esi int v5; // eax volatile LONG **result; // eax void (__thiscall ***v7)(_DWORD, signed int); // edi _DWORD *v8; // [esp+Ch] [ebp-8h] volatile LONG *v9; // [esp+10h] [ebp-4h] v3 = (_DWORD *)this[40]; v8 = this; if ( !v3 ) { LABEL_7: result = a2; *a2 = 0; return result; } while ( 1 ) { v4 = (volatile LONG *)v3[2]; v3 = (_DWORD *)*v3; v9 = v4; if ( v4 ) break; LABEL_6: if ( !v3 ) goto LABEL_7; } InterlockedIncrement(v4 + 1); v5 = (*(int (__thiscall **)(volatile LONG *))(*v4 + 60))(v4); if ( v5 != a3 ) { if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); goto LABEL_6; } sub_6BB9F0(v8 + 39, &a3, &v9); v7 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**v7)(v7, 1); *a2 = v4; InterlockedIncrement(v4 + 1); if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); return a2; } //----- (0085CB60) -------------------------------------------------------- int __thiscall sub_85CB60(_DWORD *this, _BYTE *a2, char a3, bool *a4) { _DWORD *v4; // edi _DWORD *v5; // esi char v6; // al char v7; // dl bool v8; // al _DWORD *v9; // eax int v10; // ecx char v11; // cl int result; // eax int v13; // eax v4 = this; v5 = (_DWORD *)this[3]; if ( v5 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v5 + 76))(v5) ) { v5 = (_DWORD *)v5[13]; if ( !v5 ) goto LABEL_4; } v6 = 1; } else { LABEL_4: v6 = 0; } v7 = a3; v8 = v6 == 0; *a4 = v8; if ( !a3 ) v7 = v8 == 0; v9 = (_DWORD *)v4[40]; if ( v9 ) { while ( 1 ) { v10 = v9[2]; v9 = (_DWORD *)*v9; if ( v10 ) { if ( *(_DWORD *)(v10 + 12) ) break; } if ( !v9 ) goto LABEL_11; } v11 = 1; } else { LABEL_11: v11 = 0; if ( !v7 && !v4[3] ) { *a2 = 0; *((_WORD *)v4 + 14) &= 0xFFFDu; LABEL_14: result = 65531; *((_WORD *)v4 + 14) &= 0xFFFBu; goto LABEL_15; } } HIWORD(v13) = HIWORD(a2); *a2 = 1; *((_WORD *)v4 + 14) |= 2u; if ( !v7 ) goto LABEL_14; LOWORD(v13) = *((_WORD *)v4 + 14); result = v13 | 4; *((_WORD *)v4 + 14) = result; LABEL_15: if ( v11 ) { *((_WORD *)v4 + 14) |= 0x18u; } else { *((_WORD *)v4 + 14) &= 0xFFF7u; *((_WORD *)v4 + 14) |= 0x10u; } return result; } //----- (0085CC30) -------------------------------------------------------- LONG __stdcall sub_85CC30(_DWORD *a1, LONG a2, _DWORD **a3) { LONG result; // eax int v4; // ecx _DWORD *v5; // ebx int v6; // esi int v7; // eax _DWORD *v8; // edi int v9; // eax void (__stdcall ***v10)(signed int); // [esp+8h] [ebp+8h] int v11; // [esp+Ch] [ebp+Ch] result = a2; v4 = *(_DWORD *)(a2 + 8); if ( v4 ) { v5 = a1; while ( 1 ) { v11 = *(_DWORD *)(v4 + 4); v6 = sub_85BAA0(*(void **)(v4 + 8), a3); if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v7 = (*(int (__thiscall **)(_DWORD *))(v5[39] + 4))(v5 + 39); v8 = (_DWORD *)v7; v9 = *(_DWORD *)(v7 + 8); v10 = (void (__stdcall ***)(signed int))v9; if ( v9 != v6 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v10 ) (**v10)(1); v8[2] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } v8[1] = 0; *v8 = v5[40]; result = v5[40]; if ( result ) *(_DWORD *)(result + 4) = v8; else v5[41] = v8; ++v5[42]; v5[40] = v8; if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } if ( !v11 ) break; v4 = v11; } } return result; } //----- (0085CD30) -------------------------------------------------------- void __thiscall sub_85CD30(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // ebx int v4; // ebx int v5; // eax v3 = this; sub_85B340(this, a2, (int)a3); *(_WORD *)(a2 + 28) = v3[14]; qmemcpy((void *)(a2 + 52), v3 + 26, 0x34u); if ( *((_DWORD *)v3 + 42) ) sub_85CC30((_DWORD *)a2, (LONG)(v3 + 78), a3); v4 = *((_DWORD *)v3 + 43); if ( v4 ) { v5 = (*(int (__thiscall **)(int, _DWORD **))(*(_DWORD *)v4 + 8))(v4, a3); sub_697160((_DWORD *)a2, v5); } } //----- (0085CDA0) -------------------------------------------------------- unsigned int __thiscall sub_85CDA0(int *this, signed int a2) { int v2; // ebx void (__cdecl *v3)(int, int, signed int, int *, signed int); // edx _WORD *v4; // edi int v5; // ST00_4 void (__cdecl *v6)(int, int, signed int, int *, signed int); // edx int v7; // ST00_4 unsigned int v8; // eax unsigned int v9; // ecx int v10; // eax int v11; // ST00_4 void (__cdecl *v12)(int, int *, signed int, int *, signed int); // eax int v13; // ST00_4 void (__cdecl *v14)(int, bool *, signed int, int *, signed int); // eax int v15; // eax int v16; // edx int v17; // ebx unsigned int result; // eax int v19; // ecx float v20; // [esp+Ch] [ebp-34h] float v21; // [esp+10h] [ebp-30h] float v22; // [esp+14h] [ebp-2Ch] int v23; // [esp+18h] [ebp-28h] int *v24; // [esp+1Ch] [ebp-24h] int v25; // [esp+20h] [ebp-20h] unsigned int v26; // [esp+24h] [ebp-1Ch] bool v27; // [esp+2Bh] [ebp-15h] int v28; // [esp+2Ch] [ebp-14h] int v29; // [esp+30h] [ebp-10h] BOOL v30; // [esp+34h] [ebp-Ch] int v31; // [esp+38h] [ebp-8h] v2 = (int)this; v24 = this; sub_85B150(this, (void **)a2); v3 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = (_WORD *)(v2 + 28); v5 = *(_DWORD *)(a2 + 352); v26 = 2; v3(v5, v2 + 28, 2, (int *)&v26, 1); if ( *(_DWORD *)(a2 + 28) < 0x401000Bu ) *v4 = *v4 & 7 | 2 * (*v4 & 0xFFF8); if ( *(_DWORD *)(a2 + 28) < 0x401000Cu ) *v4 = *v4 & 0xF | 16 * (*v4 & 0xFFF7 | 7); if ( *(_DWORD *)(a2 + 28) < 0x5000001u ) *v4 = (unsigned __int8)*v4 | (unsigned __int16)(2 * (*v4 & 0xFF00)); sub_8608D0((char *)(v2 + 88), a2); sub_85EA80((char *)(v2 + 52), a2); v6 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v7 = *(_DWORD *)(a2 + 352); v26 = 4; v6(v7, v2 + 100, 4, (int *)&v26, 1); if ( *(_DWORD *)(a2 + 28) >= 0x5000013u ) { sub_876350((void **)a2); sub_876290((void **)a2); } else { v8 = (unsigned __int16)*v4; v9 = (unsigned __int16)*v4; v20 = 0.0; v21 = 0.0; v22 = 0.0; v26 = (v9 >> 1) & 7; *v4 = ((unsigned __int16)v8 >> 3) ^ ((unsigned __int8)v8 ^ (unsigned __int8)(v8 >> 3)) & 1; sub_8608D0((char *)&v20, a2); sub_876350((void **)a2); v10 = *(_DWORD *)(a2 + 352); if ( *(_DWORD *)(a2 + 28) >= 0x4010000u ) { v13 = *(_DWORD *)(a2 + 352); v14 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v10 + 4); v25 = 1; v14(v13, &v27, 1, &v25, 1); } else { v11 = *(_DWORD *)(a2 + 352); v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v10 + 4); v25 = 4; v12(v11, &v23, 4, &v25, 1); v27 = v23 != 0; } if ( !strcmp((const char *)(a2 + 724), "NiCollisionSwitch") && !((*(_BYTE *)v4 >> 3) & 1) ) v26 = 4; if ( v27 || (unsigned __int8)sub_85ECE0(&v20, (float *)&dword_BA45C0) || (_WORD)v26 != 2 ) { v15 = sub_875B50((int)"NiCollisionData"); if ( v15 ) { sub_56FF80((_DWORD *)(v2 + 172), v15); v16 = v2; v17 = *(_DWORD *)(v2 + 172); v28 = v16; v29 = (unsigned __int16)v26; v30 = v27; v31 = a2; (*(void (__thiscall **)(int, int *))(*(_DWORD *)v17 + 72))(v17, &v28); v2 = (int)v24; } } } if ( *(_DWORD *)(a2 + 28) < 0xA000102u ) { *(_WORD *)(a2 + 412) = *v4; *v4 &= 0x3Fu; } result = *(_DWORD *)(a2 + 28); if ( result < 0xA000106 ) { v19 = *(_DWORD *)(v2 + 172); if ( v19 ) result = (*(int (__stdcall **)(unsigned int, _DWORD))(*(_DWORD *)v19 + 76))(result, 0); } if ( *(_DWORD *)(a2 + 28) < 0x14000004u ) *v4 &= 0xFFBFu; return result; } // BA45C0: using guessed type int dword_BA45C0; //----- (0085D030) -------------------------------------------------------- int __thiscall sub_85D030(const char **this, signed int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, const char **, signed int, _DWORD **, signed int); // eax int v10; // eax void (__cdecl *v11)(int, signed int *, signed int, _DWORD **, signed int); // edx _DWORD *v12; // edx const char *v13; // eax _DWORD *v14; // ecx _DWORD *v15; // ebx int i; // ebx _DWORD *v18; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85B660(this, (_DWORD *)a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); v18 = (_DWORD *)2; v6(v5, v3 + 7, 2, &v18, 1); sub_860940((char *)v3 + 88, (signed int)v2); sub_85EAE0((float *)v3 + 13, (int)v2); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); v18 = (_DWORD *)4; v9(v8, v3 + 25, 4, &v18, 1); v10 = v2[89]; a2 = (signed int)v3[42]; v11 = *(void (__cdecl **)(int, signed int *, signed int, _DWORD **, signed int))(v10 + 8); v18 = (_DWORD *)4; v11(v10, &a2, 4, &v18, 1); if ( a2 > 0 ) { v12 = operator new(4 * a2); v13 = v3[40]; v18 = v12; if ( v13 ) { v14 = v12; do { v15 = v13 + 8; v13 = *(const char **)v13; *v14 = *v15; ++v14; } while ( v13 ); } for ( i = a2 - 1; i >= 0; v12 = v18 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v12[i--]); operator delete(v12); } return (*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[43]); } //----- (0085D140) -------------------------------------------------------- unsigned int __thiscall sub_85D140(int *this, char a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // ebx char *v22; // eax unsigned int v23; // ebx char *v24; // eax unsigned int v25; // ebx char *v26; // eax unsigned int v27; // ebx char *v28; // eax unsigned int v29; // ebx unsigned int result; // eax _DWORD *v31; // ebx int v32; // edi int *v33; // eax unsigned int v34; // edi int v35; // edi char *v36; // eax unsigned int v37; // edi int *v38; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v38 = this; sub_85B930(this, a2); v4 = sub_8784D0(*(int *)dword_BA457C); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bAppCulled", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_85F140((float *)v3 + 22, (int)"m_localTranslate"); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_85D6E0((float *)v3 + 13, (int)"m_localRotate"); v11 = v2[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"m_fLocalScale", *((float *)v3 + 25)); v13 = v2[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_85F140((float *)v3 + 35, (int)"m_worldTranslate"); v15 = v2[3]; *(_DWORD *)&a2 = v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_85D6E0((float *)v3 + 26, (int)"m_worldRotate"); v17 = v2[3]; *(_DWORD *)&a2 = v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8786B0((int)"m_worldScale", *((float *)v3 + 38)); v19 = v2[3]; *(_DWORD *)&a2 = v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_87D570((float *)v3 + 9, (int)"m_kWorldBound"); v21 = v2[3]; *(_DWORD *)&a2 = v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); sub_823870(v2, v21, &a2); a2 = (*((_BYTE *)v3 + 28) >> 1) & 1; v22 = sub_878510((int)"SelUpdate", a2); v23 = v2[3]; *(_DWORD *)&a2 = v22; if ( v23 >= v2[2] ) sub_8237A0(v2, v23 + v2[5]); sub_823870(v2, v23, &a2); a2 = (*((_BYTE *)v3 + 28) >> 2) & 1; v24 = sub_878510((int)"SelUpdateTransforms", a2); v25 = v2[3]; *(_DWORD *)&a2 = v24; if ( v25 >= v2[2] ) sub_8237A0(v2, v25 + v2[5]); sub_823870(v2, v25, &a2); a2 = (*((_BYTE *)v3 + 28) >> 4) & 1; v26 = sub_878510((int)"SelUpdateRigid", a2); v27 = v2[3]; *(_DWORD *)&a2 = v26; if ( v27 >= v2[2] ) sub_8237A0(v2, v27 + v2[5]); sub_823870(v2, v27, &a2); a2 = (*((_BYTE *)v3 + 28) >> 3) & 1; v28 = sub_878510((int)"SelUpdatePropControllers", a2); v29 = v2[3]; *(_DWORD *)&a2 = v28; if ( v29 >= v2[2] ) sub_8237A0(v2, v29 + v2[5]); result = sub_823870(v2, v29, &a2); if ( v3[42] ) { v31 = (_DWORD *)v3[40]; if ( v31 ) { do { v32 = v31[2]; v31 = (_DWORD *)*v31; v33 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v32 + 4))(v32); result = (unsigned int)sub_878700(*v33, v32); v34 = v2[3]; *(_DWORD *)&a2 = result; if ( v34 >= v2[2] ) { sub_8237A0(v2, v34 + v2[5]); result = a2; if ( v34 >= v2[2] ) continue; } if ( v34 < v2[3] ) { if ( result ) { if ( !*(_DWORD *)(v2[1] + 4 * v34) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v34) ) { --v2[4]; } } else { v2[3] = v34 + 1; if ( result ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v34) = result; } while ( v31 ); v3 = v38; } } v35 = v3[43]; if ( v35 ) { v36 = sub_878700((int)"m_spCollisionObject", v35); v37 = v2[3]; *(_DWORD *)&a2 = v36; if ( v37 >= v2[2] ) sub_8237A0(v2, v37 + v2[5]); result = sub_823870(v2, v37, &a2); } return result; } //----- (0085D510) -------------------------------------------------------- void __thiscall sub_85D510(float *this) { *this = 1.0; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; this[5] = 0.0; this[6] = 0.0; this[7] = 0.0; this[4] = 1.0; this[8] = 1.0; } //----- (0085D530) -------------------------------------------------------- void __thiscall sub_85D530(float *this, float a2, float a3, float a4) { *this = a2; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; this[4] = a3; this[5] = 0.0; this[6] = 0.0; this[7] = 0.0; this[8] = a4; } //----- (0085D560) -------------------------------------------------------- BOOL __thiscall sub_85D560(float *this, float *a2) { return *a2 == *this && a2[1] == this[1] && a2[2] == this[2] && a2[3] == this[3] && a2[4] == this[4] && a2[5] == this[5] && a2[6] == this[6] && a2[7] == this[7] && a2[8] == this[8]; } //----- (0085D600) -------------------------------------------------------- float *__thiscall sub_85D600(const void *this, float *a2, float *a3) { float *result; // eax result = a2; qmemcpy(a2, this, 0x24u); *result = *result + *a3; result[1] = a3[1] + result[1]; result[2] = a3[2] + result[2]; result[3] = a3[3] + result[3]; result[4] = a3[4] + result[4]; result[5] = a3[5] + result[5]; result[6] = a3[6] + result[6]; result[7] = a3[7] + result[7]; result[8] = a3[8] + result[8]; return result; } //----- (0085D670) -------------------------------------------------------- float *__thiscall sub_85D670(const void *this, float *a2, float *a3) { float *result; // eax result = a2; qmemcpy(a2, this, 0x24u); *result = *result - *a3; result[1] = result[1] - a3[1]; result[2] = result[2] - a3[2]; result[3] = result[3] - a3[3]; result[4] = result[4] - a3[4]; result[5] = result[5] - a3[5]; result[6] = result[6] - a3[6]; result[7] = result[7] - a3[7]; result[8] = result[8] - a3[8]; return result; } //----- (0085D6E0) -------------------------------------------------------- char *__thiscall sub_85D6E0(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 128); sub_7FF6E0( v4, v3 + 128, "%s = ((%g,%g,%g),(%g,%g,%g),(%g,%g,%g))", ArgList, *v2, v2[1], v2[2], v2[3], v2[4], v2[5], v2[6], v2[7], v2[8]); return v4; } //----- (0085D770) -------------------------------------------------------- float *__thiscall sub_85D770(float *this, float *a2, float *a3, float *a4) { float *result; // eax result = this; *this = *a2; this[3] = a2[1]; this[6] = a2[2]; this[1] = *a3; this[4] = a3[1]; this[7] = a3[2]; this[2] = *a4; this[5] = a4[1]; this[8] = a4[2]; return result; } //----- (0085D7C0) -------------------------------------------------------- void __thiscall sub_85D7C0(float *this, float a2) { float v2; // ST04_4 float v3; // ST00_4 double v4; // st6 v2 = cos(a2); v3 = sin(a2); *this = v2; this[1] = 0.0; this[2] = -v3; v4 = v3; this[3] = 0.0; this[4] = 1.0; this[5] = 0.0; this[7] = 0.0; this[6] = *(float *)&v4; this[8] = v2; } //----- (0085D810) -------------------------------------------------------- void __thiscall sub_85D810(float *this, float a2) { float v2; // ST04_4 float v3; // ST00_4 v2 = cos(a2); v3 = sin(a2); *this = v2; this[1] = v3; this[2] = 0.0; this[3] = -v3; this[4] = v2; this[5] = 0.0; this[6] = 0.0; this[7] = 0.0; this[8] = 1.0; } //----- (0085D860) -------------------------------------------------------- void __thiscall sub_85D860(float *this, float a2, float a3, float a4, float a5) { float v5; // ST08_4 float v6; // ST04_4 double v7; // st7 double v8; // st6 double v9; // st4 double v10; // st5 float v11; // ST08_4 double v12; // st3 float v13; // ST00_4 double v14; // st2 float v15; // ST04_4 float v16; // [esp+14h] [ebp+8h] float v17; // [esp+14h] [ebp+8h] float v18; // [esp+14h] [ebp+8h] float v19; // [esp+18h] [ebp+Ch] float v20; // [esp+1Ch] [ebp+10h] float v21; // [esp+1Ch] [ebp+10h] float v22; // [esp+20h] [ebp+14h] v5 = cos(a2); v6 = sin(a2); v7 = v5; v16 = 1.0 - v5; v8 = a3; v9 = a4; v10 = v16; v11 = a3 * a4 * v16; v12 = a5; v19 = a3 * a5 * v16; v13 = a4 * a5 * v16; v14 = v6; v15 = v6 * v8; v17 = v14 * a4; v22 = v14 * a5; v20 = v8 * v8; *this = v20 * v10 + v7; this[1] = v22 + v11; this[2] = v19 - v17; this[3] = v11 - v22; v21 = v9 * v9; this[4] = v21 * v10 + v7; this[5] = v15 + v13; this[6] = v17 + v19; this[7] = v13 - v15; v18 = v12 * v12; this[8] = v7 + v10 * v18; } //----- (0085D940) -------------------------------------------------------- float *__thiscall sub_85D940(float *this, float *a2, float *a3) { float *v3; // edx float *result; // eax v3 = a3; result = a2; *a2 = *a3 * *this + a3[3] * this[1] + a3[6] * this[2]; a2[3] = this[4] * v3[3] + this[3] * *v3 + v3[6] * this[5]; a2[6] = this[7] * v3[3] + this[6] * *v3 + v3[6] * this[8]; a2[1] = v3[4] * this[1] + v3[1] * *this + this[2] * v3[7]; a2[4] = v3[4] * this[4] + v3[1] * this[3] + v3[7] * this[5]; a2[7] = v3[4] * this[7] + this[6] * v3[1] + v3[7] * this[8]; a2[2] = v3[5] * this[1] + v3[2] * *this + this[2] * v3[8]; a2[5] = v3[5] * this[4] + v3[2] * this[3] + v3[8] * this[5]; a2[8] = v3[5] * this[7] + this[6] * v3[2] + v3[8] * this[8]; return result; } //----- (0085DA30) -------------------------------------------------------- int __thiscall sub_85DA30(float *this, int a2, float a3) { int result; // eax result = a2; *(float *)a2 = *this * a3; *(float *)(a2 + 4) = this[1] * a3; *(float *)(a2 + 8) = this[2] * a3; *(float *)(a2 + 12) = this[3] * a3; *(float *)(a2 + 16) = this[4] * a3; *(float *)(a2 + 20) = this[5] * a3; *(float *)(a2 + 24) = this[6] * a3; *(float *)(a2 + 28) = this[7] * a3; *(float *)(a2 + 32) = a3 * this[8]; return result; } //----- (0085DA90) -------------------------------------------------------- float *__thiscall sub_85DA90(float *this, float *a2, float *a3) { float *v3; // edx float *result; // eax v3 = a3; result = a2; *a2 = this[1] * a3[1] + *a3 * *this + this[2] * a3[2]; a2[1] = this[3] * *v3 + this[4] * v3[1] + this[5] * v3[2]; a2[2] = this[6] * *v3 + this[7] * v3[1] + this[8] * v3[2]; return result; } //----- (0085DAF0) -------------------------------------------------------- float *__cdecl sub_85DAF0(float *a1, float *a2, float *a3) { float *v3; // edx float *v4; // ecx float *result; // eax v3 = a3; v4 = a2; result = a1; *a1 = a3[3] * a2[1] + *a2 * *a3 + a3[6] * a2[2]; a1[1] = v3[1] * *v4 + v3[4] * v4[1] + v3[7] * v4[2]; a1[2] = v3[2] * *v4 + v3[5] * v4[1] + v3[8] * v4[2]; return result; } //----- (0085DB50) -------------------------------------------------------- char __thiscall sub_85DB50(float *this, float *a2) { float *v2; // edx double v3; // st7 char result; // al float v5; // [esp+8h] [ebp+8h] float v6; // [esp+8h] [ebp+8h] float v7; // [esp+8h] [ebp+8h] v2 = a2; *a2 = this[8] * this[4] - this[7] * this[5]; a2[1] = this[7] * this[2] - this[1] * this[8]; a2[2] = this[1] * this[5] - this[2] * this[4]; a2[3] = this[6] * this[5] - this[3] * this[8]; a2[4] = *this * this[8] - this[6] * this[2]; a2[5] = this[3] * this[2] - this[5] * *this; a2[6] = this[3] * this[7] - this[6] * this[4]; a2[7] = this[1] * this[6] - this[7] * *this; a2[8] = *this * this[4] - this[3] * this[1]; v5 = *v2 * *this + this[1] * v2[3] + v2[6] * this[2]; v3 = v5; v6 = fabs(v5); if ( v6 <= 0.000001 ) return 0; result = 1; v7 = 1.0 / v3; *v2 = *v2 * v7; v2[1] = v2[1] * v7; v2[2] = v2[2] * v7; v2[3] = v2[3] * v7; v2[4] = v2[4] * v7; v2[5] = v7 * v2[5]; v2[6] = v2[6] * v7; v2[7] = v7 * v2[7]; v2[8] = v7 * v2[8]; return result; } //----- (0085DC80) -------------------------------------------------------- float *__thiscall sub_85DC80(float *this, float *a2) { bool v2; // zf float *result; // eax v2 = sub_85DB50(this, a2) == 0; result = a2; if ( v2 ) { *a2 = 0.0; a2[3] = 0.0; a2[6] = 0.0; a2[1] = 0.0; a2[4] = 0.0; a2[7] = 0.0; a2[2] = 0.0; a2[5] = 0.0; a2[8] = 0.0; } return result; } //----- (0085DCC0) -------------------------------------------------------- float *__thiscall sub_85DCC0(float *this, float *a2) { float *result; // eax float v3; // ST04_4 float v4; // ST08_4 float v5; // ST0C_4 float v6; // ST10_4 float v7; // ST14_4 float v8; // ST18_4 float v9; // ST1C_4 float v10; // ST20_4 result = a2; v3 = this[1]; v4 = this[2]; v5 = this[3]; v6 = this[4]; v7 = this[5]; v8 = this[6]; v9 = this[7]; v10 = this[8]; *a2 = *this; a2[3] = v3; a2[6] = v4; a2[1] = v5; a2[4] = v6; a2[7] = v7; a2[2] = v8; a2[5] = v9; a2[8] = v10; return result; } //----- (0085DD50) -------------------------------------------------------- void __thiscall sub_85DD50(float *this, float *a2, float *a3, float *a4, float *a5) { float *v5; // esi float v6; // ST10_4 float v7; // ST10_4 long double v8; // st7 float v9; // ST10_4 double v10; // st7 float v11; // ST10_4 float *v12; // edi float *v13; // ecx double v14; // st7 double v15; // st6 double v16; // st7 float v17; // [esp+1Ch] [ebp+8h] float v18; // [esp+1Ch] [ebp+8h] float v19; // [esp+1Ch] [ebp+8h] float v20; // [esp+1Ch] [ebp+8h] float v21; // [esp+1Ch] [ebp+8h] float v22; // [esp+1Ch] [ebp+8h] float v23; // [esp+1Ch] [ebp+8h] float v24; // [esp+1Ch] [ebp+8h] float v25; // [esp+1Ch] [ebp+8h] float v26; // [esp+1Ch] [ebp+8h] float v27; // [esp+20h] [ebp+Ch] float v28; // [esp+20h] [ebp+Ch] float v29; // [esp+20h] [ebp+Ch] float v30; // [esp+20h] [ebp+Ch] float v31; // [esp+20h] [ebp+Ch] float v32; // [esp+20h] [ebp+Ch] float v33; // [esp+28h] [ebp+14h] float v34; // [esp+28h] [ebp+14h] float v35; // [esp+28h] [ebp+14h] float v36; // [esp+28h] [ebp+14h] float v37; // [esp+28h] [ebp+14h] float v38; // [esp+28h] [ebp+14h] float v39; // [esp+28h] [ebp+14h] v5 = this; v6 = *this + this[4] + this[8]; v7 = (v6 - 1.0) * 0.5; v8 = v7; if ( v7 <= -1.0 ) { v10 = flt_BA45B4; } else if ( v8 >= 1.0 ) { v10 = 0.0; } else { v9 = acos(v8); v10 = v9; } v11 = v10; v12 = a3; *a2 = v11; *a3 = this[5] - this[7]; *a4 = this[6] - this[2]; v27 = this[1] - this[3]; *a5 = v27; v28 = v27 * v27 + *v12 * *v12 + *a4 * *a4; v29 = sqrt(v28); if ( v29 <= 0.000001 ) { if ( *a2 <= 1.0 ) { *v12 = 1.0; *a4 = 0.0; *a5 = 0.0; } else { v18 = (*this + 1.0) * 0.5; v19 = sqrt(v18); *v12 = v19; v20 = (this[4] + 1.0) * 0.5; v21 = sqrt(v20); *a4 = v21; v22 = (this[8] + 1.0) * 0.5; v23 = sqrt(v22); v13 = a5; v14 = v23; *a5 = v23; v24 = *v12 * *v5 + v5[1] * *a4 + v5[2] * v23 - *v12; v33 = v5[3] * *v12 + *a4 * v5[4] + v14 * v5[5] - *a4; v30 = v5[6] * *v12 + *a4 * v5[7] + v14 * v5[8] - v14; v34 = v33 * v33 + v24 * v24 + v30 * v30; if ( v34 >= 0.000001 ) { v35 = -v14; v15 = v35; *v13 = v35; v25 = *v12 * *v5 + v5[1] * *a4 + v35 * v5[2] - *v12; v36 = v5[3] * *v12 + *a4 * v5[4] + v35 * v5[5] - *a4; v31 = v5[6] * *v12 + *a4 * v5[7] + v15 * v5[8] - v15; v37 = v36 * v36 + v25 * v25 + v31 * v31; if ( v37 >= 0.000001 ) { v38 = -*a4; v16 = v38; *a4 = v38; v26 = *v12 * *v5 + v38 * v5[1] + v5[2] * *v13 - *v12; v39 = v16 * v5[4] + v5[3] * *v12 + *v13 * v5[5] - v16; v32 = v16 * v5[7] + v5[6] * *v12 + *v13 * v5[8] - *v13; } } } } else { v17 = 1.0 / v29; *v12 = *v12 * v17; *a4 = *a4 * v17; *a5 = v17 * *a5; } } // BA45B4: using guessed type float flt_BA45B4; //----- (0085E050) -------------------------------------------------------- float *__thiscall sub_85E050(float *this, float *a2, float *a3) { float *v3; // edx float *result; // eax v3 = a3; result = a2; *a2 = *a3 * *this + a3[3] * this[3] + a3[6] * this[6]; a2[3] = this[4] * v3[3] + this[1] * *v3 + v3[6] * this[7]; a2[6] = this[5] * v3[3] + this[2] * *v3 + v3[6] * this[8]; a2[1] = v3[4] * this[3] + v3[1] * *this + this[6] * v3[7]; a2[4] = v3[4] * this[4] + v3[1] * this[1] + v3[7] * this[7]; a2[7] = v3[4] * this[5] + v3[1] * this[2] + v3[7] * this[8]; a2[2] = v3[5] * this[3] + v3[2] * *this + this[6] * v3[8]; a2[5] = v3[5] * this[4] + v3[2] * this[1] + v3[8] * this[7]; a2[8] = v3[5] * this[5] + v3[2] * this[2] + v3[8] * this[8]; return result; } //----- (0085E140) -------------------------------------------------------- char __thiscall sub_85E140(float *this, float *a2, float *a3) { float *v3; // edi float *v4; // eax float v5; // ST18_4 float v6; // ST14_4 double v7; // st1 char result; // al double v9; // st6 float v10; // [esp+8h] [ebp-14h] float v11; // [esp+Ch] [ebp-10h] float v12; // [esp+10h] [ebp-Ch] float v13; // [esp+14h] [ebp-8h] float v14; // [esp+18h] [ebp-4h] float v15; // [esp+24h] [ebp+8h] float v16; // [esp+24h] [ebp+8h] float v17; // [esp+24h] [ebp+8h] float v18; // [esp+28h] [ebp+Ch] float v19; // [esp+28h] [ebp+Ch] v3 = a2; v14 = this[1]; v13 = this[2]; v12 = this[4]; v10 = this[5]; v11 = this[8]; *a2 = *this; v15 = fabs(v13); if ( v15 < 0.0000000099999999 ) { v3[1] = v12; v3[2] = v11; *a3 = v14; a3[1] = v10; result = 0; *this = 1.0; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; this[5] = 0.0; this[6] = 0.0; this[7] = 0.0; this[4] = 1.0; this[8] = 1.0; } else { v16 = v13 * v13 + v14 * v14; v17 = sqrt(v16); v4 = a3; *a3 = v17; v18 = 1.0 / v17; v5 = v18 * v14; v6 = v18 * v13; v19 = (v5 + v5) * v10 + (v11 - v12) * v6; v7 = v19 * v6; v3[1] = v12 + v7; v3[2] = v11 - v7; v4[1] = v10 - v19 * v5; result = 1; *this = 1.0; this[1] = 0.0; this[2] = 0.0; this[3] = 0.0; this[6] = 0.0; this[4] = v5; v9 = v6; this[5] = *(float *)&v9; this[7] = *(float *)&v9; this[8] = -v5; } return result; } //----- (0085E290) -------------------------------------------------------- char __thiscall sub_85E290(float *this, float *a2, float *a3) { double v3; // st7 float *v4; // ebx float *v5; // edi double v6; // st5 double v7; // st7 double v8; // st6 double v9; // st7 double v10; // st7 double v11; // st6 bool v12; // c0 bool v13; // c3 double v14; // st6 double v15; // st7 double v16; // st6 float v17; // ST1C_4 double v18; // st5 float v19; // ST1C_4 double v20; // st4 double v21; // st4 double v22; // st4 float v23; // ST18_4 double v24; // st6 double v25; // st5 bool v26; // c0 bool v27; // c3 double v28; // st5 double v29; // st6 float v30; // ST1C_4 double v31; // st5 float v32; // ST14_4 float v33; // ST14_4 float v34; // ST1C_4 double v35; // st4 double v36; // st4 double v37; // st4 float v38; // ST18_4 float v39; // ST18_4 double v41; // st7 double v42; // st6 float v43; // ST0C_4 float v44; // ST0C_4 double v45; // st7 float v46; // ST1C_4 double v47; // st5 double v48; // st5 double v49; // st5 double v50; // st7 double v51; // st6 float v52; // ST0C_4 float v53; // ST0C_4 double v54; // st7 float v55; // ST1C_4 double v56; // st5 double v57; // st5 float v58; // [esp+Ch] [ebp-14h] signed int v59; // [esp+10h] [ebp-10h] float v60; // [esp+14h] [ebp-Ch] float v61; // [esp+14h] [ebp-Ch] float v62; // [esp+14h] [ebp-Ch] float v63; // [esp+14h] [ebp-Ch] float v64; // [esp+18h] [ebp-8h] float v65; // [esp+18h] [ebp-8h] float v66; // [esp+18h] [ebp-8h] float v67; // [esp+1Ch] [ebp-4h] float v68; // [esp+1Ch] [ebp-4h] float v69; // [esp+28h] [ebp+8h] float v70; // [esp+28h] [ebp+8h] float v71; // [esp+28h] [ebp+8h] float v72; // [esp+28h] [ebp+8h] float v73; // [esp+28h] [ebp+8h] float v74; // [esp+28h] [ebp+8h] float v75; // [esp+28h] [ebp+8h] float v76; // [esp+28h] [ebp+8h] float v77; // [esp+28h] [ebp+8h] float v78; // [esp+28h] [ebp+8h] float v79; // [esp+28h] [ebp+8h] float v80; // [esp+28h] [ebp+8h] float v81; // [esp+28h] [ebp+8h] float v82; // [esp+28h] [ebp+8h] float v83; // [esp+28h] [ebp+8h] float v84; // [esp+28h] [ebp+8h] float v85; // [esp+28h] [ebp+8h] float v86; // [esp+28h] [ebp+8h] float v87; // [esp+28h] [ebp+8h] float v88; // [esp+28h] [ebp+8h] float v89; // [esp+28h] [ebp+8h] float v90; // [esp+28h] [ebp+8h] float v91; // [esp+28h] [ebp+8h] float v92; // [esp+28h] [ebp+8h] float v93; // [esp+28h] [ebp+8h] float v94; // [esp+28h] [ebp+8h] float v95; // [esp+28h] [ebp+8h] float v96; // [esp+28h] [ebp+8h] float v97; // [esp+28h] [ebp+8h] float v98; // [esp+2Ch] [ebp+Ch] float v99; // [esp+2Ch] [ebp+Ch] float v100; // [esp+2Ch] [ebp+Ch] float v101; // [esp+2Ch] [ebp+Ch] float v102; // [esp+2Ch] [ebp+Ch] float v103; // [esp+2Ch] [ebp+Ch] float v104; // [esp+2Ch] [ebp+Ch] float v105; // [esp+2Ch] [ebp+Ch] float v106; // [esp+2Ch] [ebp+Ch] float v107; // [esp+2Ch] [ebp+Ch] float v108; // [esp+2Ch] [ebp+Ch] float v109; // [esp+2Ch] [ebp+Ch] float v110; // [esp+2Ch] [ebp+Ch] float v111; // [esp+2Ch] [ebp+Ch] float v112; // [esp+2Ch] [ebp+Ch] float v113; // [esp+2Ch] [ebp+Ch] float v114; // [esp+2Ch] [ebp+Ch] float v115; // [esp+2Ch] [ebp+Ch] float v116; // [esp+2Ch] [ebp+Ch] float v117; // [esp+2Ch] [ebp+Ch] float v118; // [esp+2Ch] [ebp+Ch] float v119; // [esp+2Ch] [ebp+Ch] float v120; // [esp+2Ch] [ebp+Ch] float v121; // [esp+2Ch] [ebp+Ch] float v122; // [esp+2Ch] [ebp+Ch] float v123; // [esp+2Ch] [ebp+Ch] v3 = 1.0; v4 = a3; v5 = a2; v59 = 0; while ( 1 ) { v98 = fabs(v5[1]); v69 = fabs(*v5); v6 = v98; v70 = v69 + v98; v99 = fabs(*v4); if ( v70 == v99 + v70 ) break; v71 = fabs(v5[2]); v72 = v6 + v71; v100 = fabs(v4[1]); if ( v72 == v100 + v72 ) { v50 = 0.0; v4[1] = 0.0; v90 = fabs(*v5); v51 = v90; v91 = fabs(v5[1]); v92 = v51 + v91; v120 = fabs(*v4); if ( v92 != v120 + v92 ) { v93 = *v5 + v5[1]; v121 = *v5 - v5[1]; v52 = v121 * v121 + *v4 * 4.0 * *v4; v53 = sqrt(v52); v66 = (v93 - v53) * 0.5; v63 = (v93 + v53) * 0.5; if ( v121 < 0.0 ) { v68 = v5[1] - v66; v54 = *v4; } else { v68 = *v4; v54 = *v5 - v66; } v122 = v54; v94 = v122 * v122 + v68 * v68; v95 = sqrt(v94); v96 = 1.0 / v95; v55 = v96 * v68; v123 = v96 * v122; v56 = this[1]; this[1] = v56 * v55 + *this * v123; *this = *this * v55 - v56 * v123; v57 = this[4]; this[4] = v57 * v55 + v123 * this[3]; this[3] = v55 * this[3] - v57 * v123; v97 = this[7]; this[7] = this[6] * v123 + v97 * v55; this[6] = v55 * this[6] - v123 * v97; *v5 = v66; v5[1] = v63; v50 = 0.0; } *v4 = v50; return 1; } v73 = (v5[1] - *v5) / (*v4 + *v4); v101 = v3 + v73 * v73; v102 = sqrt(v101); v60 = v4[1]; v7 = v73; v8 = v102; if ( v73 < 0.0 ) v9 = v7 - v8; else v9 = v7 + v8; v103 = v5[2] - *v5; v104 = *v4 / v9 + v103; v10 = v60; v74 = fabs(v60); v11 = v74; v75 = fabs(v104); v12 = v75 < v11; v13 = v75 == v11; v14 = v104; if ( v12 || v13 ) { v76 = v14 / v10; v105 = v76 * v76 + 1.0; v106 = sqrt(v105); v15 = 1.0; v107 = 1.0 / v106; v16 = v107; v17 = v76 * v107; v18 = v17; } else { v77 = v10 / v14; v108 = v77 * v77 + 1.0; v109 = sqrt(v108); v15 = 1.0; v19 = 1.0 / v109; v110 = v77 * v19; v18 = v19; v16 = v110; } v20 = this[2]; this[2] = this[1] * v16 + v20 * v18; this[1] = this[1] * v18 - v20 * v16; v21 = this[5]; this[5] = this[4] * v16 + v21 * v18; this[4] = this[4] * v18 - v21 * v16; v22 = this[8]; this[8] = v22 * v18 + v16 * this[7]; this[7] = v18 * this[7] - v22 * v16; v23 = (v5[1] - v5[2]) * v16 + (v4[1] + v4[1]) * v18; v58 = *v4 * v18; v61 = *v4 * v16; v111 = v18 * v23 - v4[1]; v64 = v16 * v23; v24 = v61; v78 = fabs(v61); v25 = v78; v79 = fabs(v111); v26 = v79 < v25; v27 = v79 == v25; v28 = v111; if ( v26 || v27 ) { v80 = v28 / v24; v112 = v15 + v80 * v80; v113 = sqrt(v112); v4[1] = v61 * v113; v3 = 1.0; v114 = 1.0 / v113; v29 = v114; v30 = v80 * v114; v31 = v30; } else { v81 = v24 / v28; v32 = v15 + v81 * v81; v33 = sqrt(v32); v4[1] = v111 * v33; v3 = 1.0; v34 = 1.0 / v33; v115 = v81 * v34; v31 = v34; v29 = v115; } v35 = this[1]; this[1] = *this * v29 + v35 * v31; *this = *this * v31 - v35 * v29; v36 = this[4]; this[4] = v36 * v31 + v29 * this[3]; this[3] = v31 * this[3] - v36 * v29; v37 = this[7]; this[7] = this[6] * v29 + v37 * v31; this[6] = this[6] * v31 - v37 * v29; v82 = v5[1] - v64; v5[2] = v64 + v5[2]; v38 = (*v5 - v82) * v29 + (v58 + v58) * v31; *v4 = v31 * v38 - v58; v39 = v29 * v38; ++v59; v5[1] = v82 + v39; *v5 = *v5 - v39; if ( v59 >= 32 ) return 0; } v41 = 0.0; *v4 = 0.0; v83 = fabs(v5[1]); v42 = v83; v84 = fabs(v5[2]); v85 = v42 + v84; v116 = fabs(v4[1]); if ( v85 != v116 + v85 ) { v86 = v5[2] + v5[1]; v117 = v5[1] - v5[2]; v43 = v117 * v117 + v4[1] * 4.0 * v4[1]; v44 = sqrt(v43); v65 = (v86 - v44) * 0.5; v62 = (v86 + v44) * 0.5; if ( v117 < 0.0 ) { v67 = v5[2] - v65; v45 = v4[1]; } else { v67 = v4[1]; v45 = v5[1] - v65; } v118 = v45; v87 = v118 * v118 + v67 * v67; v88 = sqrt(v87); v89 = 1.0 / v88; v46 = v89 * v67; v119 = v89 * v118; v47 = this[2]; this[2] = v47 * v46 + this[1] * v119; this[1] = this[1] * v46 - v47 * v119; v48 = this[5]; this[5] = this[4] * v119 + v48 * v46; this[4] = this[4] * v46 - v48 * v119; v49 = this[8]; this[8] = v49 * v46 + v119 * this[7]; this[7] = v46 * this[7] - v119 * v49; v5[1] = v65; v5[2] = v62; v41 = 0.0; } v4[1] = v41; return 1; } //----- (0085E980) -------------------------------------------------------- int __fastcall sub_85E980(float *a1) { signed int v1; // esi signed int v2; // edx float v3; // ST04_4 __int16 v4; // fps bool v5; // c0 char v6; // c2 bool v7; // c3 int result; // eax double v9; // st5 __int16 v10; // fps bool v11; // c0 char v12; // c2 bool v13; // c3 v1 = 3; do { v2 = 3; do { v3 = fabs(*a1); v5 = v3 < 0.0000000099999999; v6 = 0; v7 = v3 == 0.0000000099999999; LOWORD(result) = v4; if ( v3 <= 0.0000000099999999 ) { v9 = *a1; v11 = 0.0 < v9; v12 = 0; v13 = 0.0 == v9; LOWORD(result) = v10; if ( 0.0 != v9 ) *a1 = 0.0; } ++a1; --v2; } while ( v2 ); --v1; } while ( v1 ); return result; } //----- (0085E9D0) -------------------------------------------------------- char __thiscall sub_85E9D0(const void *this, float *a2, float *a3) { char result; // al bool v4; // zf double v5; // st7 char v6; // [esp+Ch] [ebp-38h] float *v7; // [esp+14h] [ebp-30h] char v8; // [esp+1Bh] [ebp-29h] float v9; // [esp+1Ch] [ebp-28h] float v10; // [esp+20h] [ebp-24h] float v11; // [esp+24h] [ebp-20h] float v12; // [esp+28h] [ebp-1Ch] float v13; // [esp+2Ch] [ebp-18h] float v14; // [esp+30h] [ebp-14h] float v15; // [esp+34h] [ebp-10h] float v16; // [esp+38h] [ebp-Ch] float v17; // [esp+3Ch] [ebp-8h] qmemcpy(&v9, this, 0x24u); v7 = a2; v8 = sub_85E140(&v9, a2, (float *)&v6); result = sub_85E290(&v9, v7, (float *)&v6); v4 = v8 == 0; *a3 = v9; a3[1] = v12; a3[2] = v15; a3[3] = v10; a3[4] = v13; a3[5] = v16; if ( v4 ) { a3[6] = v11; a3[7] = v14; v5 = v17; } else { a3[6] = -v11; a3[7] = -v14; v5 = -v17; } a3[8] = v5; return result; } //----- (0085EA80) -------------------------------------------------------- int __thiscall sub_85EA80(char *this, int a2) { int v2; // ebx char *v3; // esi signed int v4; // edi int (__cdecl *v5)(int, char *, signed int, int *, signed int); // edx int v6; // ST00_4 int result; // eax int v8; // [esp+Ch] [ebp-4h] signed int v9; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; v9 = 3; do { v4 = 3; do { v5 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v6 = *(_DWORD *)(v2 + 352); v8 = 4; result = v5(v6, v3, 4, &v8, 1); v3 += 4; --v4; } while ( v4 ); --v9; } while ( v9 ); return result; } //----- (0085EAE0) -------------------------------------------------------- int __thiscall sub_85EAE0(float *this, int a2) { float *v2; // esi int v3; // ebx signed int v4; // edi int (__cdecl *v5)(int, float *, signed int, int *, signed int); // edx int v6; // ST00_4 int result; // eax int v8; // [esp+Ch] [ebp-4h] signed int v9; // [esp+18h] [ebp+8h] v2 = this; sub_85E980(this); v3 = a2; v9 = 3; do { v4 = 3; do { v5 = *(int (__cdecl **)(int, float *, signed int, int *, signed int))(*(_DWORD *)(v3 + 356) + 8); v6 = *(_DWORD *)(v3 + 356); v8 = 4; result = v5(v6, v2, 4, &v8, 1); ++v2; --v4; } while ( v4 ); --v9; } while ( v9 ); return result; } //----- (0085EB40) -------------------------------------------------------- int __thiscall sub_85EB40(float *this, int a2, int a3) { float *v3; // esi int result; // eax v3 = this; sub_85FBB0(this, a2, a3); *(float *)(a2 + 32) = v3[8]; *(float *)(a2 + 36) = v3[9]; *(float *)(a2 + 40) = v3[10]; *(float *)(a2 + 44) = v3[11]; *(float *)(a2 + 48) = v3[12]; *(float *)(a2 + 52) = v3[13]; *(float *)(a2 + 56) = v3[14]; *(float *)(a2 + 60) = v3[15]; *(float *)(a2 + 64) = v3[16]; *(float *)(a2 + 68) = v3[17]; *(float *)(a2 + 72) = v3[18]; result = *((_DWORD *)v3 + 19); *(_DWORD *)(a2 + 76) = result; *(float *)(a2 + 80) = v3[20]; *(float *)(a2 + 84) = v3[21]; return result; } //----- (0085EBB0) -------------------------------------------------------- int __thiscall sub_85EBB0(_DWORD *this, _DWORD *a2) { return sub_872D20(this, a2); } //----- (0085EBC0) -------------------------------------------------------- float *__thiscall sub_85EBC0(float *this) { float *v1; // esi v1 = this; sub_85B2B0(this); *(_DWORD *)v1 = &NiMaterialProperty::`vftable'; v1[8] = 0.0; v1[9] = 0.0; v1[10] = 0.0; v1[11] = 0.0; v1[12] = 0.0; v1[13] = 0.0; v1[14] = 0.0; v1[15] = 0.0; v1[16] = 0.0; v1[17] = 0.0; v1[18] = 0.0; v1[19] = 0.0; v1[10] = 0.5; v1[9] = 0.5; v1[8] = 0.5; v1[13] = 0.5; v1[12] = 0.5; v1[11] = 0.5; v1[16] = 0.0; v1[15] = 0.0; v1[14] = 0.0; v1[19] = 0.0; v1[18] = 0.0; v1[17] = 0.0; v1[20] = 4.0; v1[21] = 1.0; *((_DWORD *)v1 + 7) = InterlockedIncrement(&dword_ABD464); *((_DWORD *)v1 + 22) = 1; v1[23] = 0.0; return v1; } // A23F9C: using guessed type void *NiMaterialProperty::`vftable'; //----- (0085EC50) -------------------------------------------------------- char *sub_85EC50() { return dword_BA45A8; } //----- (0085EC60) -------------------------------------------------------- signed int sub_85EC60() { return 3; } //----- (0085EC70) -------------------------------------------------------- float *__thiscall sub_85EC70(float *this, int a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x60u); if ( v3 ) { v4 = sub_85EBC0(v3); sub_85EB40(v2, (int)v4, a2); result = v4; } else { sub_85EB40(v2, 0, a2); result = 0; } return result; } //----- (0085ECC0) -------------------------------------------------------- float *sub_85ECC0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x60u); if ( v0 ) result = sub_85EBC0(v0); else result = 0; return result; } //----- (0085ECE0) -------------------------------------------------------- BOOL __thiscall sub_85ECE0(float *this, float *a2) { return *a2 != *this || a2[1] != this[1] || a2[2] != this[2]; } //----- (0085ED30) -------------------------------------------------------- _DWORD *__thiscall sub_85ED30(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiMaterialProperty::`vftable'; sub_85F2F0((int)this); sub_85B2F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A23F9C: using guessed type void *NiMaterialProperty::`vftable'; //----- (0085ED70) -------------------------------------------------------- int __thiscall sub_85ED70(int *this, void **a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, void ***, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, void ***, signed int); // edx v2 = (signed int)a2; v3 = (char *)this; sub_85FBF0(this, a2); sub_8608D0(v3 + 32, v2); sub_8608D0(v3 + 44, v2); sub_8608D0(v3 + 56, v2); sub_8608D0(v3 + 68, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, void ***, signed int))(v4 + 4); a2 = (void **)4; v6(v5, v3 + 80, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = *(int (__cdecl **)(int, char *, signed int, void ***, signed int))(v7 + 4); a2 = (void **)4; return v8(v7, v3 + 84, 4, &a2, 1); } //----- (0085EDF0) -------------------------------------------------------- int __thiscall sub_85EDF0(const char **this, _DWORD *a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, _DWORD **, signed int); // edx v2 = (signed int)a2; v3 = (char *)this; sub_81A6A0(this, a2); sub_860940(v3 + 32, v2); sub_860940(v3 + 44, v2); sub_860940(v3 + 56, v2); sub_860940(v3 + 68, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)4; v6(v5, v3 + 80, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; return v8(v7, v3 + 84, 4, &a2, 1); } //----- (0085EE70) -------------------------------------------------------- bool __thiscall sub_85EE70(float *this, float *a2) { float *v2; // esi v2 = this; return sub_81A6B0(this, (int)a2) && a2[8] == v2[8] && a2[9] == v2[9] && a2[10] == v2[10] && !(unsigned __int8)sub_85ECE0(v2 + 11, a2 + 11) && !(unsigned __int8)sub_85ECE0(v2 + 14, a2 + 14) && !(unsigned __int8)sub_85ECE0(v2 + 17, a2 + 17) && a2[20] == v2[20] && a2[21] == v2[21]; } //----- (0085EF20) -------------------------------------------------------- LONG sub_85EF20() { float *v0; // eax float *v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = (float *)operator new(0x60u); if ( v0 ) v1 = sub_85EBC0(v0); else v1 = 0; result = dword_BA45B0; if ( (float *)dword_BA45B0 != v1 ) { if ( dword_BA45B0 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA45B0; result = InterlockedDecrement((volatile LONG *)(dword_BA45B0 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA45B0 = (int)v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)v1 + 1); } return result; } // BA45B0: using guessed type int dword_BA45B0; //----- (0085EF80) -------------------------------------------------------- void sub_85EF80() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA45B0; if ( dword_BA45B0 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA45B0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA45B0 = 0; } } // BA45B0: using guessed type int dword_BA45B0; //----- (0085EFC0) -------------------------------------------------------- unsigned int __thiscall sub_85EFC0(int *this, int a2) { _DWORD *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = (float *)this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA45A8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_860810(v3 + 8, (int)"m_amb"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_860810(v3 + 11, (int)"m_diff"); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_860810(v3 + 14, (int)"m_spec"); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_860810(v3 + 17, (int)"m_emit"); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"m_fShine", v3[20]); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"m_fAlpha", v3[21]); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (0085F140) -------------------------------------------------------- char *__thiscall sub_85F140(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 64); sub_7FF6E0(v4, v3 + 64, "%s = (%g,%g,%g)", ArgList, *v2, v2[1], v2[2]); return v4; } //----- (0085F1A0) -------------------------------------------------------- _DWORD *sub_85F1A0() { _DWORD *v0; // edi unsigned int v1; // esi float v2; // ST0C_4 float v3; // ST0C_4 v0 = operator new(0x400u); v1 = 0; do { v2 = sqrt(COERCE_FLOAT((v1 | 0x3F80) << 16)); v0[v1] = LODWORD(v2) & 0x7FFFFF; v3 = sqrt(COERCE_FLOAT((v1++ | 0x4000) << 16)); v0[v1 + 127] = LODWORD(v3) & 0x7FFFFF; } while ( v1 < 0x80 ); return v0; } //----- (0085F230) -------------------------------------------------------- void __thiscall sub_85F230(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi void *v3; // edi void *v4; // eax int v5; // esi v2 = this; if ( a2 != this[2] ) { if ( a2 < this[1] ) this[1] = a2; v3 = (void *)*this; this[2] = a2; if ( a2 ) { v4 = operator new(4 * a2); *v2 = v4; v5 = v2[1]; if ( v5 ) { memcpy_s(v4, 4 * v5, v3, 4 * v5); operator delete(v3); return; } } else { *this = 0; } operator delete(v3); } } //----- (0085F2B0) -------------------------------------------------------- int __cdecl sub_85F2B0(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 164))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F2D0) -------------------------------------------------------- int __cdecl sub_85F2D0(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 156))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F2F0) -------------------------------------------------------- int __cdecl sub_85F2F0(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 160))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F310) -------------------------------------------------------- int __cdecl sub_85F310(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 168))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F330) -------------------------------------------------------- int __cdecl sub_85F330(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 172))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F350) -------------------------------------------------------- int __cdecl sub_85F350(int a1) { int result; // eax if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 176))(a1); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F370) -------------------------------------------------------- char __thiscall sub_85F370(void *this, unsigned int a2, unsigned int a3, float *a4, float *a5) { int v5; // esi unsigned int v6; // edi unsigned int v7; // eax double v8; // st7 char result; // al v5 = (*(int (**)(void))(*(_DWORD *)this + 108))(); v6 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 60))(v5, 0); v7 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 64))(v5, 0); if ( !v6 || !v7 ) return 0; *a4 = (double)a2 / (double)v6; v8 = (double)a3 / (double)v7; result = 1; *a5 = 1.0 - v8; return result; } //----- (0085F400) -------------------------------------------------------- int __thiscall sub_85F400(void *this, int a2) { return (*(int (__stdcall **)(int, signed int, signed int))(*(_DWORD *)this + 124))(a2, 32, 8); } //----- (0085F420) -------------------------------------------------------- void sub_85F420() { dword_BA46D0 = 0; } // BA46D0: using guessed type int dword_BA46D0; //----- (0085F430) -------------------------------------------------------- int __thiscall sub_85F430(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[3] = a2; this[4] = a3; return result; } //----- (0085F450) -------------------------------------------------------- _DWORD *__thiscall sub_85F450(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[44]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (0085F480) -------------------------------------------------------- _DWORD *__thiscall sub_85F480(_DWORD *this, _DWORD *a2) { int v2; // eax v2 = this[45]; *a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); return a2; } //----- (0085F4B0) -------------------------------------------------------- int __thiscall sub_85F4B0(_DWORD *this) { int v1; // esi int v2; // ST00_4 int v3; // ST00_4 int v4; // ST00_4 v1 = (int)this; sub_85BA50(this); *(_DWORD *)v1 = &NiRenderer::`vftable'; *(_DWORD *)(v1 + 8) = 0; v2 = v1 + 20; *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(v1 + 20)); v3 = v1 + 52; *(_DWORD *)(v3 + 24) = 0; *(_DWORD *)(v3 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(v1 + 52)); v4 = v1 + 84; *(_DWORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(v1 + 84)); *(_DWORD *)(v1 + 116) = 0; *(_DWORD *)(v1 + 120) = 0; *(_DWORD *)(v1 + 124) = 0; *(_WORD *)(v1 + 128) = 0; dword_BA46D0 = v1; return v1; } // A24044: using guessed type void *NiRenderer::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (0085F510) -------------------------------------------------------- char *sub_85F510() { return dword_BA46D4; } //----- (0085F520) -------------------------------------------------------- LONG __thiscall sub_85F520(char *this) { char *v1; // esi int v2; // edi v1 = this; *(_DWORD *)this = &NiRenderer::`vftable'; dword_BA46D0 = 0; DeleteCriticalSection((LPCRITICAL_SECTION)(this + 84)); DeleteCriticalSection((LPCRITICAL_SECTION)(v1 + 52)); DeleteCriticalSection((LPCRITICAL_SECTION)(v1 + 20)); v2 = *((_DWORD *)v1 + 2); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return sub_85BA80(v1); } // A24044: using guessed type void *NiRenderer::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (0085F580) -------------------------------------------------------- int __thiscall sub_85F580(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi int v4; // esi int result; // eax v2 = *(_DWORD *)(a2 + 176); v3 = this; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v3[3] = v2; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v4 = *(_DWORD *)(a2 + 180); if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v3[4] = v4; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 1; if ( (v3[29] == 1 || v3[30] == 1) && *((_BYTE *)v3 + 128) == 1 ) result = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 312))(v3, a2); return result; } //----- (0085F620) -------------------------------------------------------- int __thiscall sub_85F620(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi int v4; // esi int result; // eax v2 = *(_DWORD *)(a2 + 176); v3 = this; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v3[3] = v2; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v4 = *(_DWORD *)(a2 + 180); if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v3[4] = v4; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 1; if ( (v3[29] == 1 || v3[30] == 1) && *((_BYTE *)v3 + 128) == 1 ) result = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 316))(v3, a2); return result; } //----- (0085F6C0) -------------------------------------------------------- int __thiscall sub_85F6C0(_DWORD *this, float *a2) { int result; // eax float v3; // [esp+0h] [ebp-24h] float v4; // [esp+4h] [ebp-20h] float v5; // [esp+8h] [ebp-1Ch] float v6; // [esp+Ch] [ebp-18h] float v7; // [esp+10h] [ebp-14h] float v8; // [esp+14h] [ebp-10h] float v9; // [esp+18h] [ebp-Ch] float v10; // [esp+1Ch] [ebp-8h] float v11; // [esp+20h] [ebp-4h] result = (int)a2; v9 = a2[28]; v10 = a2[31]; v11 = a2[34]; v6 = a2[27]; v7 = a2[30]; v8 = a2[33]; v3 = a2[26]; v4 = a2[29]; v5 = a2[32]; if ( (this[29] == 1 || this[30] == 1) && *((_BYTE *)this + 128) == 1 ) result = (*(int (__stdcall **)(float *, float *, float *, float *, float *, float *))(*this + 280))( a2 + 35, &v3, &v6, &v9, a2 + 60, a2 + 69); return result; } //----- (0085F760) -------------------------------------------------------- void *__thiscall sub_85F760(void *this, char a2) { void *v2; // esi v2 = this; sub_85F520((char *)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0085F790) -------------------------------------------------------- unsigned int __thiscall sub_85F790(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA46D4); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0085F7E0) -------------------------------------------------------- void __thiscall sub_85F7E0(_DWORD *this) { *this = &NiCullingProcess::`vftable'; } // A241A0: using guessed type void *NiCullingProcess::`vftable'; //----- (0085F7F0) -------------------------------------------------------- void *__thiscall sub_85F7F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiCullingProcess::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A241A0: using guessed type void *NiCullingProcess::`vftable'; //----- (0085F820) -------------------------------------------------------- void __thiscall sub_85F820(_DWORD *this, float *a2) { _DWORD *v2; // ebx int v3; // eax float *v4; // ecx unsigned int v5; // edi signed int v6; // edx float *v7; // esi int v8; // [esp+4h] [ebp-4h] float v9; // [esp+10h] [ebp+8h] float v10; // [esp+10h] [ebp+8h] v2 = this; v3 = this[35]; v4 = a2; v8 = v3; if ( v3 ) { v5 = 0; v6 = 1; v7 = (float *)(v2 + 13); do { if ( v6 & v2[35] ) { v9 = *(v7 - 1) * v4[10] + *(v7 - 2) * v4[9] + v4[11] * *v7; v10 = v9 - v7[1]; if ( -v4[12] >= v10 ) break; if ( v4[12] <= (double)v10 ) v2[35] &= ~v6; } ++v5; v7 += 4; v6 = __ROL4__(v6, 1); } while ( v5 < 6 ); if ( v5 == 6 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v4 + 108))(v2); v2[35] = v8; } else { (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)a2 + 108))(v2); } } //----- (0085F8D0) -------------------------------------------------------- void __thiscall sub_85F8D0(_DWORD *this, const void *a2) { _DWORD *v2; // ebx int v3; // edx v2 = this; v3 = this[3]; if ( v3 ) { qmemcpy(this + 4, a2, 0x1Cu); sub_8737E0(this + 11, (int)(this + 4), (float *)(v3 + 104)); v2[35] = 63; } } //----- (0085F910) -------------------------------------------------------- _DWORD *__thiscall sub_85F910(_DWORD *this, int a2) { _DWORD *v2; // esi float *v3; // edi signed int v4; // ebx v2 = this; *this = &NiCullingProcess::`vftable'; *((_BYTE *)this + 4) = 0; sub_86B1E0((_BYTE *)this + 16, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0); v3 = (float *)(v2 + 11); v4 = 5; do { sub_8736A0(v3); v3 += 4; --v4; } while ( v4 >= 0 ); v2[35] = 63; v2[2] = a2; v2[3] = 0; return v2; } // A241A0: using guessed type void *NiCullingProcess::`vftable'; //----- (0085F980) -------------------------------------------------------- _DWORD *__thiscall sub_85F980(_DWORD *this, int a2, char a3) { _DWORD *v3; // esi float *v4; // edi signed int v5; // ebx v3 = this; *this = &NiCullingProcess::`vftable'; *((_BYTE *)this + 4) = a3; sub_86B1E0((_BYTE *)this + 16, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0); v4 = (float *)(v3 + 11); v5 = 5; do { sub_8736A0(v4); v4 += 4; --v5; } while ( v5 >= 0 ); v3[35] = 63; v3[2] = a2; v3[3] = 0; return v3; } // A241A0: using guessed type void *NiCullingProcess::`vftable'; //----- (0085F9F0) -------------------------------------------------------- int __thiscall sub_85F9F0(_DWORD *this, int a2, _BYTE *a3, int a4) { int result; // eax _DWORD *v5; // ebx _BYTE *v6; // edi result = a2; v5 = this; if ( a2 && a3 ) { this[3] = a2; qmemcpy(this + 4, (const void *)(a2 + 240), 0x1Cu); result = sub_8737E0(this + 11, (int)(this + 4), (float *)(a2 + 104)); v5[35] = 63; if ( a4 ) { v6 = (_BYTE *)v5[2]; v5[2] = a4; } else { v6 = a3; } if ( v5[2] ) result = sub_85C0A0(a3, (int)v5); if ( a4 ) v5[2] = v6; v5[3] = 0; } return result; } //----- (0085FA70) -------------------------------------------------------- void __cdecl sub_85FA70(_DWORD *a1) { int v1; // ebx volatile LONG *v2; // esi unsigned int v3; // edi unsigned int v4; // esi v1 = dword_BA46D0; if ( dword_BA46D0 ) { v2 = *(volatile LONG **)(dword_BA46D0 + 8); if ( v2 ) { InterlockedIncrement(v2 + 1); (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v2 + 68))(v2, a1); if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } else { v3 = a1[1]; v4 = 0; if ( v3 ) { do (*(void (__stdcall **)(int))(**(_DWORD **)(*a1 + 4 * v4++) + 116))(v1); while ( v4 < v3 ); } } } } // BA46D0: using guessed type int dword_BA46D0; //----- (0085FAE0) -------------------------------------------------------- void __cdecl sub_85FAE0(int a1, _DWORD *a2) { volatile LONG *v2; // esi if ( dword_BA46D0 && a1 ) { v2 = *(volatile LONG **)(dword_BA46D0 + 8); if ( v2 ) { InterlockedIncrement(v2 + 1); (*(void (__thiscall **)(volatile LONG *, int))(*v2 + 60))(v2, a1); } sub_85FA70(a2); if ( v2 ) { (*(void (__thiscall **)(volatile LONG *))(*v2 + 64))(v2); if ( !InterlockedDecrement(v2 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v2)(v2, 1); } } } // BA46D0: using guessed type int dword_BA46D0; //----- (0085FB50) -------------------------------------------------------- void __cdecl sub_85FB50(float *a1, int a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi if ( dword_BA46D0 ) { if ( a1 ) { if ( a2 ) { v4 = a4; if ( a4 || (v4 = (_DWORD *)a3[2]) != 0 ) { sub_85F6C0((_DWORD *)dword_BA46D0, a1); v4[1] = 0; (*(void (__thiscall **)(_DWORD *, float *, int, _DWORD *))(*a3 + 8))(a3, a1, a2, v4); sub_85FAE0((int)a1, v4); } } } } } // BA46D0: using guessed type int dword_BA46D0; //----- (0085FBB0) -------------------------------------------------------- void __thiscall sub_85FBB0(void *this, int a2, int a3) { sub_85B340(this, a2, a3); } //----- (0085FBC0) -------------------------------------------------------- int __thiscall sub_85FBC0(_DWORD *this, float a2) { _DWORD *i; // esi int result; // eax for ( i = (_DWORD *)this[3]; i; i = (_DWORD *)i[13] ) result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*i + 68))(i, LODWORD(a2)); return result; } //----- (0085FBF0) -------------------------------------------------------- int __thiscall sub_85FBF0(int *this, void **a2) { void **v2; // esi int result; // eax _DWORD *v4; // eax _DWORD *v5; // ST00_4 int (__cdecl *v6)(_DWORD *, void ***, signed int, int *, signed int); // eax int v7; // [esp+4h] [ebp-4h] v2 = a2; result = sub_85B150(this, a2); if ( (unsigned int)v2[7] < 0xA000102 ) { v4 = v2[88]; v5 = v4; v6 = (int (__cdecl *)(_DWORD *, void ***, signed int, int *, signed int))v4[1]; v7 = 2; result = v6(v5, &a2, 2, &v7, 1); *((_WORD *)v2 + 208) = (_WORD)a2; } return result; } //----- (0085FC40) -------------------------------------------------------- unsigned int __thiscall sub_85FC40(int *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85B930(this, a2); v3 = sub_8784D0(*(int *)dword_BA46DC); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0085FC90) -------------------------------------------------------- int __thiscall sub_85FC90(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x28u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v4 + 28) = 0; *(_DWORD *)(v4 + 32) = 0; *(_DWORD *)(v4 + 36) = 1; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = *((_WORD *)v2 + 14); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); *(_DWORD *)(v4 + 36) = *((_DWORD *)v2 + 9); return v4; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; //----- (0085FD30) -------------------------------------------------------- bool __thiscall sub_85FD30(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_81A6B0(this, a2) && v2[8] == *(_DWORD *)(a2 + 32) && v2[9] == *(_DWORD *)(a2 + 36); } //----- (0085FD70) -------------------------------------------------------- char *__cdecl sub_85FD70(int ArgList, int a2) { size_t v2; // edi char *v3; // esi v2 = strlen((const char *)ArgList) + 26; v3 = (char *)operator new(v2); if ( a2 ) { if ( a2 == 1 ) { sub_7FF6E0(v3, v2, "%s = SOURCE_EMISSIVE", ArgList); return v3; } if ( a2 == 2 ) { sub_7FF6E0(v3, v2, "%s = SOURCE_AMB_DIFF", ArgList); return v3; } } else { sub_7FF6E0(v3, v2, "%s = SOURCE_IGNORE", ArgList); } return v3; } //----- (0085FDF0) -------------------------------------------------------- _DWORD *sub_85FDF0() { _DWORD *result; // eax int v1; // esi int (__thiscall ***v2)(_DWORD, signed int); // edi result = operator new(0x28u); v1 = (int)result; if ( result ) { sub_85B2B0(result); result = 0; *(_DWORD *)v1 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v1 + 28) = 0; *(_DWORD *)(v1 + 32) = 0; *(_DWORD *)(v1 + 36) = 1; } else { v1 = 0; } v2 = (int (__thiscall ***)(_DWORD, signed int))dword_BA46EC; if ( dword_BA46EC != v1 ) { if ( dword_BA46EC ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(dword_BA46EC + 4)); if ( !result ) { if ( v2 ) result = (_DWORD *)(**v2)(v2, 1); } } dword_BA46EC = v1; if ( v1 ) result = (_DWORD *)InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // BA46EC: using guessed type int dword_BA46EC; //----- (0085FE70) -------------------------------------------------------- void sub_85FE70() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA46EC; if ( dword_BA46EC ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA46EC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA46EC = 0; } } // BA46EC: using guessed type int dword_BA46EC; //----- (0085FEB0) -------------------------------------------------------- int __thiscall sub_85FEB0(int *this, void **a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST14_4 void (__cdecl *v6)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST14_4 void (__cdecl *v9)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v10; // edi int (__cdecl *v11)(_DWORD *, int *, signed int, void ***, signed int); // ecx int result; // eax int v13; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_85FBF0(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v4[1]; a2 = (void **)2; v6(v5, v3 + 7, 2, &a2, 1); } else { *((_WORD *)v3 + 14) = (_WORD)v2[104] & 7; } v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v7[1]; a2 = (void **)4; v9(v8, &v13, 4, &a2, 1); v3[8] = v13; v10 = v2[88]; v11 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v10[1]; a2 = (void **)4; result = v11(v10, &v13, 4, &a2, 1); v3[9] = v13; return result; } //----- (0085FF60) -------------------------------------------------------- int __thiscall sub_85FF60(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, const char **, signed int, _DWORD **, signed int); // eax int v10; // edi int (__cdecl *v11)(int, const char **, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 7, 2, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v9(v8, v3 + 8, 4, &a2, 1); v10 = v2[89]; v11 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v10 + 8); a2 = (_DWORD *)4; return v11(v10, v3 + 9, 4, &a2, 1); } //----- (0085FFE0) -------------------------------------------------------- unsigned int __thiscall sub_85FFE0(int *this, int a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi int v8; // ebx char *v9; // edi unsigned int v10; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA46E4); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_85FD70((int)"m_eSource", v3[8]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = v3[9]; v9 = (char *)operator new(0x25u); if ( v8 ) { if ( v8 == 1 ) sub_7FF6E0(v9, 0x25u, "%s = LIGHTING_E_A_D", "m_eLighting"); } else { sub_7FF6E0(v9, 0x25u, "%s = LIGHTING_E", "m_eLighting"); } a2 = (int)v9; v10 = v2[3]; if ( v10 >= v2[2] ) sub_8237A0(v2, v10 + v2[5]); return sub_823870(v2, v10, &a2); } //----- (008600C0) -------------------------------------------------------- bool __thiscall sub_8600C0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // eax unsigned int v4; // ecx bool result; // al v2 = this; result = 0; if ( sub_81A6B0(this, a2) ) { if ( !((*(_BYTE *)(a2 + 28) ^ *((_BYTE *)v2 + 28)) & 1) ) { v3 = *(unsigned __int16 *)(a2 + 28); v4 = *((unsigned __int16 *)v2 + 14); if ( !(((unsigned __int8)v4 ^ (unsigned __int8)*(_WORD *)(a2 + 28)) & 0x1E) && !((v4 ^ v3) & 0x1E0) && !(((unsigned __int8)(v4 >> 9) ^ (unsigned __int8)(v3 >> 9)) & 1) && !((v4 ^ v3) & 0x1C00) && *((_BYTE *)v2 + 30) == *(_BYTE *)(a2 + 30) && !(((unsigned __int8)(v4 >> 13) ^ (unsigned __int8)(v3 >> 13)) & 1) ) { result = 1; } } } return result; } //----- (00860140) -------------------------------------------------------- char *__cdecl sub_860140(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = ALPHA_ONE", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = ALPHA_ZERO", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = ALPHA_SRCCOLOR", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = ALPHA_INVSRCCOLOR", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = ALPHA_DESTCOLOR", ArgList); result = v3; break; case 5: sub_7FF6E0(v3, v2, "%s = ALPHA_INVDESTCOLOR", ArgList); result = v3; break; case 6: sub_7FF6E0(v3, v2, "%s = ALPHA_SRCALPHA", ArgList); result = v3; break; case 7: sub_7FF6E0(v3, v2, "%s = ALPHA_INVSRCALPHA", ArgList); result = v3; break; case 8: sub_7FF6E0(v3, v2, "%s = ALPHA_DESTALPHA", ArgList); result = v3; break; case 9: sub_7FF6E0(v3, v2, "%s = ALPHA_INVDESTALPHA", ArgList); result = v3; break; case 10: sub_7FF6E0(v3, v2, "%s = ALPHA_SRCALPHASAT", ArgList); goto LABEL_13; default: LABEL_13: result = v3; break; } return result; } //----- (008602B0) -------------------------------------------------------- char *__cdecl sub_8602B0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = TEST_ALWAYS", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = TEST_LESS", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = TEST_EQUAL", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = TEST_LESSEQUAL", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = TEST_GREATER", ArgList); result = v3; break; case 5: sub_7FF6E0(v3, v2, "%s = TEST_NOTEQUAL", ArgList); result = v3; break; case 6: sub_7FF6E0(v3, v2, "%s = TEST_GREATEREQUAL", ArgList); result = v3; break; case 7: sub_7FF6E0(v3, v2, "%s = TEST_NEVER", ArgList); goto LABEL_10; default: LABEL_10: result = v3; break; } return result; } //----- (008603D0) -------------------------------------------------------- int __thiscall sub_8603D0(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiAlphaProperty::`vftable'; *(_WORD *)(v4 + 28) = 236; *(_BYTE *)(v4 + 30) = 0; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = *((_WORD *)v2 + 14); *(_BYTE *)(v4 + 30) = *((_BYTE *)v2 + 30); return v4; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (00860430) -------------------------------------------------------- _DWORD *sub_860430() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_WORD *)v1 + 14) = 236; *v1 = &NiAlphaProperty::`vftable'; *((_BYTE *)v1 + 30) = 0; return v1; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (00860470) -------------------------------------------------------- LONG sub_860470() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x20u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiAlphaProperty::`vftable'; *(_WORD *)(v1 + 28) = 236; *(_BYTE *)(v1 + 30) = 0; } else { v1 = 0; } result = dword_BA4720; if ( dword_BA4720 != v1 ) { if ( dword_BA4720 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4720; result = InterlockedDecrement((volatile LONG *)(dword_BA4720 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4720 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // BA4720: using guessed type int dword_BA4720; //----- (008604F0) -------------------------------------------------------- void sub_8604F0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4720; if ( dword_BA4720 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4720 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4720 = 0; } } // BA4720: using guessed type int dword_BA4720; //----- (00860530) -------------------------------------------------------- int __thiscall sub_860530(int *this, void **a2) { void **v2; // edi int *v3; // esi void (__cdecl *v4)(void *, int *, signed int, void ***, signed int); // edx void *v5; // ST00_4 _DWORD *v6; // edi int (__cdecl *v7)(_DWORD *, char *, signed int, void ***, signed int); // ecx v2 = a2; v3 = this; sub_85FBF0(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v4 = (void (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v5 = v2[88]; a2 = (void **)2; v4(v5, v3 + 7, 2, &a2, 1); } else { *((_WORD *)v3 + 14) = (_WORD)v2[104] & 0x3FFF; } v6 = v2[88]; v7 = (int (__cdecl *)(_DWORD *, char *, signed int, void ***, signed int))v6[1]; a2 = (void **)1; return v7(v6, (char *)v3 + 30, 1, &a2, 1); } //----- (008605B0) -------------------------------------------------------- int __thiscall sub_8605B0(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 7, 2, &a2, 1); v7 = v2[89]; v8 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)1; return v8(v7, (char *)v3 + 30, 1, &a2, 1); } //----- (00860610) -------------------------------------------------------- unsigned int __thiscall sub_860610(int *this, char a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4718); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bAlpha", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_860140((int)"m_eSrcBlend", ((unsigned int)*((unsigned __int16 *)v3 + 14) >> 1) & 0xF); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_860140((int)"m_eDestBlend", ((unsigned int)*((unsigned __int16 *)v3 + 14) >> 5) & 0xF); v11 = v2[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); a2 = (*((_WORD *)v3 + 14) >> 9) & 1; v12 = sub_878510((int)"m_bAlphaTest", a2); v13 = v2[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8602B0((int)"m_eTestMode", ((unsigned int)*((unsigned __int16 *)v3 + 14) >> 10) & 7); v15 = v2[3]; *(_DWORD *)&a2 = v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); a2 = *((_BYTE *)v3 + 30); v16 = sub_878570((int)"m_ucTestRef", a2); v17 = v2[3]; *(_DWORD *)&a2 = v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); a2 = (*((_WORD *)v3 + 14) >> 13) & 1; v18 = sub_878510((int)"m_bNoSorter", a2); v19 = v2[3]; *(_DWORD *)&a2 = v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); return sub_823870(v2, v19, &a2); } //----- (00860810) -------------------------------------------------------- char *__thiscall sub_860810(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 28); sub_7FF6E0(v4, v3 + 28, "%s = (%5.3f,%5.3f,%5.3f)", ArgList, *v2, v2[1], v2[2]); return v4; } //----- (00860870) -------------------------------------------------------- char *__thiscall sub_860870(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 36); sub_7FF6E0(v4, v3 + 36, "%s = (%5.3f,%5.3f,%5.3f,%5.3f)", ArgList, *v2, v2[1], v2[2], v2[3]); return v4; } //----- (008608D0) -------------------------------------------------------- int __thiscall sub_8608D0(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST28_4 int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // eax int v9; // edi int (__cdecl *v10)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = this; v5 = *(_DWORD *)(a2 + 352); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 4); a2 = 4; v8(v7, v4 + 4, 4, &a2, 1); v9 = *(_DWORD *)(v2 + 352); v10 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v9 + 4); a2 = 4; return v10(v9, v4 + 8, 4, &a2, 1); } //----- (00860940) -------------------------------------------------------- int __thiscall sub_860940(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST28_4 int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // eax int v9; // edi int (__cdecl *v10)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 356) + 8); v4 = this; v5 = *(_DWORD *)(a2 + 356); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(_DWORD *)(v2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; v8(v7, v4 + 4, 4, &a2, 1); v9 = *(_DWORD *)(v2 + 356); v10 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; return v10(v9, v4 + 8, 4, &a2, 1); } //----- (008609B0) -------------------------------------------------------- int __thiscall sub_8609B0(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST3C_4 int v6; // eax int v7; // ST28_4 void (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // eax int v9; // eax int v10; // ST14_4 void (__cdecl *v11)(int, char *, signed int, signed int *, signed int); // eax int v12; // edi int (__cdecl *v13)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 356) + 8); v4 = this; v5 = *(_DWORD *)(a2 + 356); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(_DWORD *)(v2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; v8(v7, v4 + 4, 4, &a2, 1); v9 = *(_DWORD *)(v2 + 356); v10 = v9; v11 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; v11(v10, v4 + 8, 4, &a2, 1); v12 = *(_DWORD *)(v2 + 356); v13 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v12 + 8); a2 = 4; return v13(v12, v4 + 12, 4, &a2, 1); } //----- (00860A30) -------------------------------------------------------- char *__cdecl sub_860A30(int ArgList, int a2) { size_t v2; // edi char *v3; // esi v2 = strlen((const char *)ArgList) + 20; v3 = (char *)operator new(v2); if ( a2 ) { if ( a2 == 1 ) { sub_7FF6E0(v3, v2, "%s = FOG_RANGE_SQ", ArgList); return v3; } if ( a2 == 2 ) { sub_7FF6E0(v3, v2, "%s = FOG_VERTEX_ALPHA", ArgList); return v3; } } else { sub_7FF6E0(v3, v2, "%s = FOG_Z_LINEAR", ArgList); } return v3; } //----- (00860AB0) -------------------------------------------------------- int __thiscall sub_860AB0(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x30u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiFogProperty::`vftable'; *(float *)(v4 + 36) = 0.0; *(float *)(v4 + 40) = 0.0; *(float *)(v4 + 44) = 0.0; *(_WORD *)(v4 + 28) = 0; *(float *)(v4 + 32) = 1.0; *(_DWORD *)(v4 + 36) = dword_BA4724; *(_DWORD *)(v4 + 40) = dword_BA4728; *(_DWORD *)(v4 + 44) = dword_BA472C; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = *((_WORD *)v2 + 14); *(float *)(v4 + 32) = *((float *)v2 + 8); *(_DWORD *)(v4 + 36) = *((_DWORD *)v2 + 9); *(_DWORD *)(v4 + 40) = *((_DWORD *)v2 + 10); *(_DWORD *)(v4 + 44) = *((_DWORD *)v2 + 11); return v4; } // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00860BA0) -------------------------------------------------------- bool __thiscall sub_860BA0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_81A6B0(this, a2) && !((*(_BYTE *)(a2 + 28) ^ *((_BYTE *)v2 + 28)) & 1) && *(float *)(a2 + 32) == *((float *)v2 + 8) && !((*(_BYTE *)(a2 + 28) ^ *((_BYTE *)v2 + 28)) & 6) && !(unsigned __int8)sub_85ECE0((float *)v2 + 9, (float *)(a2 + 36)); } //----- (00860C00) -------------------------------------------------------- LONG sub_860C00() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x30u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiFogProperty::`vftable'; *(float *)(v1 + 36) = 0.0; *(float *)(v1 + 40) = 0.0; *(float *)(v1 + 44) = 0.0; *(_WORD *)(v1 + 28) = 0; *(float *)(v1 + 32) = 1.0; *(_DWORD *)(v1 + 36) = dword_BA4724; *(_DWORD *)(v1 + 40) = dword_BA4728; *(_DWORD *)(v1 + 44) = dword_BA472C; } else { v1 = 0; } result = dword_BA4738; if ( dword_BA4738 != v1 ) { if ( dword_BA4738 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4738; result = InterlockedDecrement((volatile LONG *)(dword_BA4738 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4738 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; // BA4738: using guessed type int dword_BA4738; //----- (00860CA0) -------------------------------------------------------- void sub_860CA0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4738; if ( dword_BA4738 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4738 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4738 = 0; } } // BA4738: using guessed type int dword_BA4738; //----- (00860CE0) -------------------------------------------------------- int __thiscall sub_860CE0(int *this, void **a2) { signed int v2; // edi int *v3; // esi unsigned int v4; // eax unsigned __int8 v5; // cl int v6; // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, int *, signed int, void ***, signed int); // eax int v10; // eax int v11; // ST00_4 void (__cdecl *v12)(int, int *, signed int, void ***, signed int); // eax v2 = (signed int)a2; v3 = this; sub_85FBF0(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, void ***, signed int))(v7 + 4); a2 = (void **)2; v9(v8, v3 + 7, 2, &a2, 1); } else { v4 = *(unsigned __int16 *)(v2 + 416); *((_WORD *)v3 + 14) = v4; if ( *(_DWORD *)(v2 + 28) >= 0x5000016u ) { *((_WORD *)v3 + 14) = v4 & 7; } else { v5 = v4; v6 = (v4 >> 3) & 3; *((_WORD *)v3 + 14) = 0; if ( (v5 >> 1) & 1 ) *((_WORD *)v3 + 14) = 1; else *((_WORD *)v3 + 14) = 0; *((_WORD *)v3 + 14) = 2 * v6 | v3[7] & 0xFFF9; } } v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, void ***, signed int))(v10 + 4); a2 = (void **)4; v12(v11, v3 + 8, 4, &a2, 1); return sub_8608D0((char *)v3 + 36, v2); } //----- (00860DB0) -------------------------------------------------------- int __thiscall sub_860DB0(const char **this, _DWORD *a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, const char **, signed int, _DWORD **, signed int); // eax v2 = (signed int)a2; v3 = this; sub_81A6A0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 7, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v9(v8, v3 + 8, 4, &a2, 1); return sub_860940((char *)v3 + 36, v2); } //----- (00860E10) -------------------------------------------------------- unsigned int __thiscall sub_860E10(int *this, char a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4730); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"Enable", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Depth", *((float *)v3 + 8)); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_860A30((int)"Function", ((unsigned int)*((unsigned __int16 *)v3 + 14) >> 1) & 3); v11 = v2[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_860810((float *)v3 + 9, (int)"Color"); v13 = v2[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); return sub_823870(v2, v13, &a2); } //----- (00860F40) -------------------------------------------------------- int __thiscall sub_860F40(int *this, signed int a2) { return sub_87AE00(this, a2); } //----- (00860F50) -------------------------------------------------------- _DWORD *__thiscall sub_860F50(_DWORD *this, _DWORD *a2) { return sub_87ACF0(this, a2); } //----- (00860F60) -------------------------------------------------------- char __thiscall sub_860F60(_DWORD *this, int a2) { return sub_87AD00(this, a2); } //----- (00860F70) -------------------------------------------------------- int __thiscall sub_860F70(const char **this, signed int a2) { return sub_87AE60(this, a2); } //----- (00860F80) -------------------------------------------------------- bool __thiscall sub_860F80(float *this, int a2) { return sub_87AEC0(this, a2); } //----- (00860F90) -------------------------------------------------------- float *__thiscall sub_860F90(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_87AD20(this); *(_DWORD *)v1 = &NiDirectionalLight::`vftable'; v1[67] = 1.0; result = v1; v1[68] = 0.0; v1[69] = 0.0; return result; } // A244FC: using guessed type void *NiDirectionalLight::`vftable'; //----- (00860FE0) -------------------------------------------------------- char *sub_860FE0() { return dword_BA473C; } //----- (00860FF0) -------------------------------------------------------- void *__thiscall sub_860FF0(void *this, char a2) { void *v2; // esi v2 = this; sub_87AC30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00861020) -------------------------------------------------------- float *__thiscall sub_861020(float *this) { float *v1; // esi float *result; // eax v1 = this; result = sub_85BE80((int)this); v1[67] = v1[26]; v1[68] = v1[29]; v1[69] = v1[32]; ++*((_DWORD *)v1 + 47); return result; } //----- (00861050) -------------------------------------------------------- int __thiscall sub_861050(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x118u); v4 = (int)v3; if ( v3 ) { sub_87AD20(v3); *(_DWORD *)v4 = &NiDirectionalLight::`vftable'; *(float *)(v4 + 268) = 1.0; *(float *)(v4 + 272) = 0.0; *(float *)(v4 + 276) = 0.0; } else { v4 = 0; } sub_87AC50(v2, v4, a2); *(float *)(v4 + 268) = v2[67]; *(float *)(v4 + 272) = v2[68]; *(float *)(v4 + 276) = v2[69]; return v4; } // A244FC: using guessed type void *NiDirectionalLight::`vftable'; //----- (008610E0) -------------------------------------------------------- float *sub_8610E0() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x118u); v1 = v0; if ( !v0 ) return 0; sub_87AD20(v0); *(_DWORD *)v1 = &NiDirectionalLight::`vftable'; v1[67] = 1.0; result = v1; v1[68] = 0.0; v1[69] = 0.0; return result; } // A244FC: using guessed type void *NiDirectionalLight::`vftable'; //----- (00861140) -------------------------------------------------------- unsigned int __thiscall sub_861140(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_87AF40(this, a2); v3 = sub_8784D0(*(int *)dword_BA473C); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00861190) -------------------------------------------------------- char __thiscall sub_861190(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // esi char result; // al v3 = this; sub_85CD30(this, a2, a3); *(_DWORD *)(a2 + 184) = *((_DWORD *)v3 + 46); *(_DWORD *)(a2 + 188) = *((_DWORD *)v3 + 47); result = *((_BYTE *)v3 + 176); *(_BYTE *)(a2 + 176) = result; return result; } //----- (008611D0) -------------------------------------------------------- void *__thiscall sub_8611D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiNode *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2458C: using guessed type void *NiTListBase,NiNode *>::`vftable'; //----- (00861200) -------------------------------------------------------- void __thiscall sub_861200(_DWORD *this) { _DWORD *i; // edi _DWORD *v2; // ebx int *v3; // ecx int v4; // eax for ( i = this; i[51]; sub_85A360(v2, i) ) { v2 = *(_DWORD **)(i[49] + 8); v3 = (int *)i[49]; v4 = *v3; i[49] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else i[50] = 0; (*(void (__thiscall **)(_DWORD *, int *))(i[48] + 8))(i + 48, v3); --i[51]; } } //----- (00861270) -------------------------------------------------------- void __thiscall sub_861270(_DWORD *this) { _DWORD *i; // edi int *v2; // ecx int v3; // eax for ( i = this; i[55]; --i[55] ) { v2 = (int *)i[53]; v3 = *v2; i[53] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else i[54] = 0; (*(void (__thiscall **)(_DWORD *, int *))(i[52] + 8))(i + 52, v2); } } //----- (008612D0) -------------------------------------------------------- char __thiscall sub_8612D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // ecx int v7; // edx int *v8; // esi int v9; // esi int v10; // eax _DWORD *v11; // eax _DWORD *v12; // ecx int v13; // edx int *v14; // esi int v15; // esi v2 = this; if ( !sub_85C8D0(this, (int)a2) ) return 0; v4 = v2[51]; if ( v4 != a2[51] ) return 0; if ( v4 ) { v5 = (_DWORD *)v2[49]; v6 = (_DWORD *)a2[49]; while ( v5 ) { v7 = v5[2]; v5 = (_DWORD *)*v5; v8 = v6 + 2; v6 = (_DWORD *)*v6; v9 = *v8; if ( v7 ) { if ( !v9 ) return 0; } else if ( v9 ) { return 0; } } } v10 = v2[55]; if ( v10 != a2[55] ) return 0; if ( v10 ) { v11 = (_DWORD *)v2[53]; v12 = (_DWORD *)a2[53]; while ( v11 ) { v13 = v11[2]; v11 = (_DWORD *)*v11; v14 = v12 + 2; v12 = (_DWORD *)*v12; v15 = *v14; if ( v13 ) { if ( !v15 ) return 0; } else if ( v15 ) { return 0; } } } return 1; } //----- (00861390) -------------------------------------------------------- char __thiscall sub_861390(_DWORD *this, int a2) { _DWORD *v2; // eax _DWORD *v3; // ecx v2 = (_DWORD *)this[53]; if ( !v2 ) return 0; while ( 1 ) { v3 = v2 + 2; v2 = (_DWORD *)*v2; if ( *v3 == a2 ) break; if ( !v2 ) return 0; } return 1; } //----- (008613C0) -------------------------------------------------------- int __thiscall sub_8613C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiNode *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiNode *>::`vftable'; return result; } // A2458C: using guessed type void *NiTListBase,NiNode *>::`vftable'; // A2459C: using guessed type void *NiTPointerListBase,NiNode *>::`vftable'; //----- (00861400) -------------------------------------------------------- void *__thiscall sub_861400(void *this, char a2) { void *v2; // esi v2 = this; sub_8613C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00861430) -------------------------------------------------------- LONG __thiscall sub_861430(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiDynamicEffect::`vftable'; sub_861200(this); sub_861270(v1); sub_8613C0(v1 + 52); sub_8613C0(v1 + 48); return sub_85C320(v1); } // A245BC: using guessed type void *NiDynamicEffect::`vftable'; //----- (00861470) -------------------------------------------------------- char *sub_861470() { return dword_BA4744; } //----- (00861480) -------------------------------------------------------- _DWORD *__thiscall sub_861480(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *result; // eax _DWORD *v4; // ecx _DWORD *v5; // edx _DWORD *v6; // eax int v7; // ecx v2 = this; result = (_DWORD *)this[49]; if ( !result ) goto LABEL_6; while ( 1 ) { v4 = result + 2; v5 = result; result = (_DWORD *)*result; if ( a2 == *v4 ) break; if ( !result ) goto LABEL_6; } if ( !v5 ) { LABEL_6: v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[48] + 4))(v2 + 48); v6[2] = a2; v6[1] = 0; *v6 = v2[49]; v7 = v2[49]; if ( v7 ) *(_DWORD *)(v7 + 4) = v6; else v2[50] = v6; ++v2[51]; v2[49] = v6; result = sub_859D00((_DWORD *)a2, v2); } return result; } //----- (00861500) -------------------------------------------------------- _DWORD *__thiscall sub_861500(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *result; // eax _DWORD *v4; // ebx _DWORD *v5; // edi int v6; // ecx _DWORD *v7; // [esp+4h] [ebp-4h] v2 = a2; v7 = this; result = sub_85C770(this, a2); if ( a2[7] >= 0xA00010Eu ) { result = (_DWORD *)sub_875B00(a2); v4 = result; while ( v4 ) { v4 = (_DWORD *)((char *)v4 - 1); result = (_DWORD *)sub_875AD0(v2); v5 = result; if ( result ) { result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v7[52] + 4))(v7 + 52); result[2] = v5; result[1] = 0; *result = v7[53]; v6 = v7[53]; if ( v6 ) *(_DWORD *)(v6 + 4) = result; else v7[54] = result; ++v7[55]; v7[53] = result; v2 = a2; } } } return result; } //----- (008615A0) -------------------------------------------------------- _DWORD *__thiscall sub_8615A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85C9A0(this); *v1 = &NiDynamicEffect::`vftable'; v1[46] = 0; *((_BYTE *)v1 + 176) = 1; v1[47] = 1; v1[51] = 0; v1[49] = 0; v1[50] = 0; v1[48] = &NiTPointerList::`vftable'; v1[55] = 0; v1[53] = 0; v1[54] = 0; v1[52] = &NiTPointerList::`vftable'; v1[45] = InterlockedIncrement(&dword_ABD584); return v1; } // A245AC: using guessed type void *NiTPointerList::`vftable'; // A245BC: using guessed type void *NiDynamicEffect::`vftable'; //----- (00861620) -------------------------------------------------------- _DWORD *__thiscall sub_861620(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiDynamicEffect::`vftable'; sub_861200(this); sub_861270(v2); sub_8613C0(v2 + 52); sub_8613C0(v2 + 48); sub_85C320(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A245BC: using guessed type void *NiDynamicEffect::`vftable'; //----- (00861670) -------------------------------------------------------- _DWORD *__thiscall sub_861670(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *result; // eax _DWORD *v4; // edi _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // eax _DWORD *v8; // edx _DWORD *v9; // esi v2 = this; result = (_DWORD *)this[49]; if ( result ) { v4 = a2; while ( 1 ) { v5 = result + 2; v6 = result; result = (_DWORD *)*result; if ( a2 == (_DWORD *)*v5 ) break; if ( !result ) return result; } if ( v6 ) { v7 = (_DWORD *)v2[49]; if ( v7 ) { while ( 1 ) { v8 = v7 + 2; v9 = v7; v7 = (_DWORD *)*v7; if ( a2 == (_DWORD *)*v8 ) break; if ( !v7 ) goto LABEL_10; } } else { LABEL_10: v9 = 0; } a2 = v9; if ( v9 ) sub_403620(v2 + 48, &a2); result = sub_85A360(v4, v2); } } return result; } //----- (008616E0) -------------------------------------------------------- unsigned int __thiscall sub_8616E0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi unsigned int result; // eax int v5; // eax int v6; // ST00_4 int (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax int (__cdecl *v8)(int, signed int *, signed int, int *, signed int); // edx int v9; // ST00_4 signed int i; // edi int v11; // eax int v12; // ST00_4 int (__cdecl *v13)(int, char *, signed int, int *, signed int); // eax char v14; // [esp+8h] [ebp-8h] int v15; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; result = sub_85CDA0(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA010066u ) { v5 = *(_DWORD *)(v2 + 352); v6 = v5; v7 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v5 + 4); v15 = 1; result = v7(v6, (char *)&a2 + 3, 1, &v15, 1); *((_BYTE *)v3 + 176) = HIBYTE(a2) != 0; } if ( *(_DWORD *)(v2 + 28) < 0x4010000u ) { v8 = *(int (__cdecl **)(int, signed int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v9 = *(_DWORD *)(v2 + 352); v15 = 4; result = v8(v9, &a2, 4, &v15, 1); for ( i = 0; i < a2; ++i ) { v11 = *(_DWORD *)(v2 + 352); v12 = v11; v13 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v11 + 4); v15 = 4; result = v13(v12, &v14, 4, &v15, 1); } } if ( *(_DWORD *)(v2 + 28) >= 0xA00010Eu ) result = sub_876350((void **)v2); return result; } //----- (008617A0) -------------------------------------------------------- int __thiscall sub_8617A0(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int (__cdecl *v8)(int, const char **, signed int, int *, signed int); // edx int result; // eax const char *i; // esi int v11; // eax int v12; // [esp+8h] [ebp-8h] const char *v13; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85D030(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 176); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v12 = 1; v6(v5, (char *)&a2 + 3, 1, &v12, 1); v7 = v2[89]; v13 = v3[55]; v8 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v12 = 4; result = v8(v7, &v13, 4, &v12, 1); if ( (signed int)v13 > 0 ) { for ( i = v3[54]; i; result = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v11) ) { v11 = *((_DWORD *)i + 2); i = (const char *)*((_DWORD *)i + 1); } } return result; } //----- (00861840) -------------------------------------------------------- unsigned int __thiscall sub_861840(int *this, _DWORD *a2) { int *v2; // edi char *v3; // eax unsigned int v4; // ebx unsigned int result; // eax _DWORD *v6; // ebx int v7; // edi unsigned int v8; // edi _DWORD *i; // ebx int v10; // edi unsigned int v11; // edi unsigned int v12; // [esp+Ch] [ebp-50h] int *v13; // [esp+10h] [ebp-4Ch] unsigned int v14; // [esp+10h] [ebp-4Ch] char ArgList[4]; // [esp+14h] [ebp-48h] char DstBuf; // [esp+18h] [ebp-44h] v2 = this; v13 = this; sub_85D140(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4744); v4 = a2[3]; *(_DWORD *)ArgList = v3; if ( v4 >= a2[2] ) sub_8237A0(a2, v4 + a2[5]); result = sub_823870(a2, v4, ArgList); if ( v2[51] ) { v6 = (_DWORD *)v2[49]; *(_DWORD *)ArgList = 0; if ( v6 ) { do { v7 = v6[2]; v6 = (_DWORD *)*v6; sub_7FF6E0(&DstBuf, 0x40u, "affected node[%d]", *(_DWORD *)ArgList); result = (unsigned int)sub_878700((int)&DstBuf, v7); v8 = a2[3]; v12 = result; if ( v8 < a2[2] || (sub_8237A0(a2, v8 + a2[5]), result = v12, v8 < a2[2]) ) { if ( v8 < a2[3] ) { if ( result ) { if ( !*(_DWORD *)(a2[1] + 4 * v8) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v8) ) { --a2[4]; } } else { a2[3] = v8 + 1; if ( result ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v8) = result; } ++*(_DWORD *)ArgList; } while ( v6 ); v2 = v13; } for ( i = (_DWORD *)v2[53]; i; ++*(_DWORD *)ArgList ) { v10 = i[2]; i = (_DWORD *)*i; sub_7FF6E0(&DstBuf, 0x40u, "unaffected node[%d]", *(_DWORD *)ArgList); result = (unsigned int)sub_878700((int)&DstBuf, v10); v11 = a2[3]; v14 = result; if ( v11 >= a2[2] ) { sub_8237A0(a2, v11 + a2[5]); result = v14; if ( v11 >= a2[2] ) continue; } if ( v11 < a2[3] ) { if ( result ) { if ( !*(_DWORD *)(a2[1] + 4 * v11) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v11) ) { --a2[4]; } } else { a2[3] = v11 + 1; if ( result ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v11) = result; } } return result; } //----- (00861A00) -------------------------------------------------------- float *__thiscall sub_861A00(float *this) { float *v1; // esi v1 = this; sub_87AD20(this); *(_DWORD *)v1 = &NiAmbientLight::`vftable'; return v1; } // A24674: using guessed type void *NiAmbientLight::`vftable'; //----- (00861A20) -------------------------------------------------------- float *sub_861A20() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x10Cu); v1 = v0; if ( !v0 ) return 0; sub_87AD20(v0); *(_DWORD *)v1 = &NiAmbientLight::`vftable'; return v1; } // A24674: using guessed type void *NiAmbientLight::`vftable'; //----- (00861A50) -------------------------------------------------------- char *sub_861A50() { return dword_BA474C; } //----- (00861A60) -------------------------------------------------------- float *__thiscall sub_861A60(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x10Cu); v4 = v3; if ( v3 ) { sub_87AD20(v3); *(_DWORD *)v4 = &NiAmbientLight::`vftable'; sub_87AC50(v2, (int)v4, a2); result = v4; } else { sub_87AC50(v2, 0, a2); result = 0; } return result; } // A24674: using guessed type void *NiAmbientLight::`vftable'; //----- (00861AC0) -------------------------------------------------------- unsigned int __thiscall sub_861AC0(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_87AF40(this, a2); v3 = sub_8784D0(*(int *)dword_BA474C); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00861B10) -------------------------------------------------------- _DWORD *__thiscall sub_861B10(_DWORD *this, int a2, int a3) { _DWORD *result; // eax result = this; *this = a2; this[1] = a3; return result; } //----- (00861B30) -------------------------------------------------------- _DWORD *__thiscall sub_861B30(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85A1C0(this, 0); *v1 = &NiSortAdjustNode::`vftable'; v1[58] = 0; return v1; } // A24704: using guessed type void *NiSortAdjustNode::`vftable'; //----- (00861B50) -------------------------------------------------------- _DWORD *__thiscall sub_861B50(_DWORD *this, _DWORD *a2) { return sub_85A460(this, a2); } //----- (00861B60) -------------------------------------------------------- _DWORD *sub_861B60() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xECu); v1 = v0; if ( !v0 ) return 0; sub_85A1C0(v0, 0); *v1 = &NiSortAdjustNode::`vftable'; v1[58] = 0; return v1; } // A24704: using guessed type void *NiSortAdjustNode::`vftable'; //----- (00861BA0) -------------------------------------------------------- char __thiscall sub_861BA0(_DWORD *this, int a2) { return sub_859E60(this, a2); } //----- (00861BB0) -------------------------------------------------------- char __thiscall sub_861BB0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_859FB0(this, a2); if ( result ) result = v2[58] == *(_DWORD *)(a2 + 232); return result; } //----- (00861BE0) -------------------------------------------------------- void *sub_861BE0() { return &unk_BA4754; } //----- (00861BF0) -------------------------------------------------------- void *__thiscall sub_861BF0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiSortAdjustNode::`vftable'; sub_85A210(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A24704: using guessed type void *NiSortAdjustNode::`vftable'; //----- (00861C20) -------------------------------------------------------- void __thiscall sub_861C20(_DWORD *this, int a2) { unsigned int v2; // edi bool v3; // bl _DWORD *v4; // esi unsigned int v5; // edx unsigned int i; // ecx int v7; // eax v2 = *(_DWORD *)(*(_DWORD *)(a2 + 8) + 4); v3 = this[58] != 1; sub_859110((int)this, a2); v4 = *(_DWORD **)(a2 + 8); v5 = v4[1]; for ( i = v2; i < v5; ++i ) { v7 = *(_DWORD *)(*v4 + 4 * i); if ( v3 ) *(_WORD *)(v7 + 28) &= 0xFFBFu; else *(_WORD *)(v7 + 28) |= 0x40u; } } //----- (00861C80) -------------------------------------------------------- _DWORD *__thiscall sub_861C80(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0xECu); v4 = v3; if ( v3 ) { sub_85A1C0(v3, 0); *v4 = &NiSortAdjustNode::`vftable'; v4[58] = 0; } else { v4 = 0; } sub_859240(v2, (int)v4, a2); v4[58] = v2[58]; return v4; } // A24704: using guessed type void *NiSortAdjustNode::`vftable'; //----- (00861CE0) -------------------------------------------------------- _DWORD *__thiscall sub_861CE0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = sub_85A550(this, a2); if ( a2[7] < 0x14000004u ) result = (_DWORD *)sub_875AD0(a2); return result; } //----- (00861D10) -------------------------------------------------------- int __thiscall sub_861D10(int *this, void **a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST00_4 void (__cdecl *v6)(_DWORD *, int *, signed int, void ***, signed int); // eax int result; // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_858D60(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v4[1]; a2 = (void **)4; v6(v5, &v8, 4, &a2, 1); result = v8; v3[58] = v8; if ( result >= 2 ) v3[58] = 0; if ( (unsigned int)v2[7] < 0x14000004 ) result = sub_876290(v2); return result; } //----- (00861D80) -------------------------------------------------------- int __thiscall sub_861D80(const char **this, unsigned int a2) { unsigned int v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, unsigned int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_859EE0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, unsigned int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 58, 4, &a2, 1); } //----- (00861DC0) -------------------------------------------------------- LONG __thiscall sub_861DC0(_DWORD *this) { *this = &NiCamera::`vftable'; return sub_85C320(this); } // A247A4: using guessed type void *NiCamera::`vftable'; //----- (00861DD0) -------------------------------------------------------- char __thiscall sub_861DD0(int this, int a2) { int v2; // edx double v3; // st7 char result; // al float v5; // [esp+8h] [ebp+8h] float v6; // [esp+8h] [ebp+8h] v2 = a2; v5 = *(float *)(a2 + 16); v3 = v5; *(float *)(this + 256) = v5; v6 = *(float *)(v2 + 20) / *(float *)(this + 272); if ( v6 > v3 ) *(float *)(this + 256) = v6; if ( *(float *)(this + 268) > (double)*(float *)(this + 256) ) *(float *)(this + 256) = *(float *)(this + 268); *(float *)(this + 240) = *(float *)v2; *(float *)(this + 244) = *(float *)(v2 + 4); *(float *)(this + 248) = *(float *)(v2 + 8); *(float *)(this + 252) = *(float *)(v2 + 12); *(float *)(this + 260) = *(float *)(v2 + 20); result = *(_BYTE *)(v2 + 24); *(_BYTE *)(this + 264) = result; return result; } //----- (00861E70) -------------------------------------------------------- char __thiscall sub_861E70(float *this, int a2, int a3, int a4, float a5) { float *v5; // edx double v6; // st7 char result; // al int v8; // [esp+Ch] [ebp+8h] float v9; // [esp+Ch] [ebp+8h] float v10; // [esp+Ch] [ebp+8h] v5 = (float *)a2; *(float *)&v8 = this[56] * *(float *)a2 + this[57] * *(float *)(a2 + 4) + this[58] * *(float *)(a2 + 8) + this[59]; if ( a5 < (double)*(float *)&v8 ) { v9 = 1.0 / *(float *)&v8; *(float *)a3 = this[44] * *v5 + this[45] * v5[1] + this[46] * v5[2] + this[47]; *(float *)a4 = this[48] * *v5 + this[49] * v5[1] + this[50] * v5[2] + this[51]; *(float *)a3 = *(float *)a3 * v9; v10 = v9 * *(float *)a4; v6 = v10; *(float *)a4 = v10; if ( *(float *)a3 >= -1.0 ) { if ( *(float *)a3 > 1.0 ) return 0; if ( v6 >= -1.0 && v6 <= 1.0 ) { result = 1; *(float *)a3 = (this[70] - this[69]) * 0.5 * *(float *)a3; *(float *)a4 = (this[71] - this[72]) * 0.5 * *(float *)a4; *(float *)a3 = (this[70] + this[69]) * 0.5 + *(float *)a3; *(float *)a4 = 0.5 * (this[72] + this[71]) + *(float *)a4; return result; } } } return 0; } //----- (00861FD0) -------------------------------------------------------- bool __thiscall sub_861FD0(float *this, float *a2) { float *v2; // esi v2 = this; return sub_85C8D0(this, (int)a2) && a2[60] == v2[60] && a2[61] == v2[61] && a2[62] == v2[62] && a2[63] == v2[63] && a2[64] == v2[64] && a2[65] == v2[65] && a2[69] == v2[69] && a2[70] == v2[70] && a2[71] == v2[71] && a2[72] == v2[72] && a2[67] == v2[67] && a2[68] == v2[68] && a2[73] == v2[73]; } //----- (00862130) -------------------------------------------------------- char *sub_862130() { return dword_BA475C; } //----- (00862140) -------------------------------------------------------- void *__thiscall sub_862140(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiCamera::`vftable'; sub_85C320(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A247A4: using guessed type void *NiCamera::`vftable'; //----- (00862170) -------------------------------------------------------- char __thiscall sub_862170(float *this, float *a2, float *a3) { float *v3; // ebx int v5; // eax void (__thiscall *v6)(float *); // edx float v7; // [esp+8h] [ebp-80h] float v8; // [esp+Ch] [ebp-7Ch] float v9; // [esp+10h] [ebp-78h] float v10; // [esp+14h] [ebp-74h] float v11; // [esp+18h] [ebp-70h] float v12; // [esp+1Ch] [ebp-6Ch] float v13; // [esp+20h] [ebp-68h] float v14; // [esp+24h] [ebp-64h] float v15; // [esp+28h] [ebp-60h] float v16; // [esp+2Ch] [ebp-5Ch] float v17; // [esp+30h] [ebp-58h] float v18; // [esp+34h] [ebp-54h] float v19; // [esp+38h] [ebp-50h] char v20; // [esp+3Ch] [ebp-4Ch] char v21; // [esp+60h] [ebp-28h] v3 = this; v16 = this[35] - *a2; v17 = this[36] - a2[1]; v18 = this[37] - a2[2]; v19 = v17 * v17 + v16 * v16 + v18 * v18; if ( v19 < 1.000000013351432e-10 ) return 0; sub_4430B0(&v16); sub_443140(a3, &v13, &v16); v19 = v14 * v14 + v13 * v13 + v15 * v15; if ( v19 < 0.5 ) return 0; sub_443140(&v16, &v10, &v13); v19 = v11 * v11 + v10 * v10 + v12 * v12; if ( v19 < 0.5 ) return 0; v7 = -v16; v8 = -v17; v9 = -v18; sub_85D770((float *)&v21, &v7, &v10, &v13); v5 = *((_DWORD *)v3 + 8); if ( v5 ) qmemcpy(&v21, sub_85E050((float *)(v5 + 104), (float *)&v20, (float *)&v21), 0x24u); v6 = *(void (__thiscall **)(float *))(*(_DWORD *)v3 + 100); qmemcpy(v3 + 13, &v21, 0x24u); v6(v3); (*(void (__thiscall **)(float *))(*(_DWORD *)v3 + 104))(v3); return 1; } //----- (00862300) -------------------------------------------------------- int __thiscall sub_862300(int this, float a2, float a3, int a4, int a5) { float *v5; // esi float v6; // edx double v7; // st7 float v8; // ST30_4 int result; // eax float v10; // ST10_4 float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 float v14; // ST20_4 float v15; // ST24_4 float v16; // ST28_4 float v17; // ST2C_4 float v18; // ST30_4 float v19; // ST1C_4 float v20; // ST20_4 float v21; // ST24_4 float v22; // ST04_4 float v23; // ST08_4 float v24; // ST0C_4 float v25; // ST1C_4 float v26; // ST20_4 float v27; // ST24_4 float v28; // ST28_4 float v29; // ST2C_4 float v30; // ST30_4 float v31; // ST10_4 float v32; // ST14_4 float v33; // ST18_4 v5 = (float *)this; if ( *(_BYTE *)(this + 264) ) { v6 = *(float *)(this + 116); v7 = *(float *)(this + 128); *(float *)a5 = *(float *)(this + 104); v8 = v7; *(float *)(a5 + 4) = v6; *(float *)(a5 + 8) = v8; sub_4430B0((float *)a5); result = a4; v10 = v5[27] * a3; v11 = v5[30] * a3; v12 = a3 * v5[33]; v13 = v5[28] * a2; v14 = v5[31] * a2; v15 = a2 * v5[34]; v16 = v13 + v5[35]; v17 = v5[36] + v14; v18 = v5[37] + v15; v19 = v16 + v10; *(float *)a4 = v19; v20 = v17 + v11; *(float *)(a4 + 4) = v20; v21 = v18 + v12; *(float *)(a4 + 8) = v21; } else { v22 = *(float *)(this + 108) * a3; v23 = *(float *)(this + 120) * a3; v24 = a3 * *(float *)(this + 132); v25 = *(float *)(this + 112) * a2; v26 = *(float *)(this + 124) * a2; v27 = a2 * *(float *)(this + 136); v28 = *(float *)(this + 104) + v25; v29 = *(float *)(this + 116) + v26; v30 = *(float *)(this + 128) + v27; v31 = v28 + v22; *(float *)a5 = v31; v32 = v29 + v23; *(float *)(a5 + 4) = v32; v33 = v30 + v24; *(float *)(a5 + 8) = v33; sub_4430B0((float *)a5); result = a4; *(float *)a4 = v5[35]; *(float *)(a4 + 4) = v5[36]; *(float *)(a4 + 8) = v5[37]; } return result; } //----- (00862500) -------------------------------------------------------- int __thiscall sub_862500(_DWORD *this) { int result; // eax result = this[37]; this[9] = this[35]; this[10] = this[36]; this[11] = result; return result; } //----- (00862520) -------------------------------------------------------- float __userpurge sub_862520@(int this@) { float v1; // ST0C_4 float result; // eax float v3; // ST10_4 double v4; // st5 float v5; // ST38_4 float v6; // ST38_4 double v7; // st4 double v8; // st7 double v9; // st6 float v10; // ST40_4 float v11; // ST54_4 double v12; // st3 double v13; // st1 float v14; // ST54_4 double v15; // st2 float v16; // ST34_4 float v17; // ST4C_4 double v18; // st3 float v19; // ST34_4 float v20; // ST34_4 float v21; // ST30_4 float v22; // ST34_4 float v23; // ST54_4 float v24; // ST48_4 float v25; // ST44_4 float v26; // ST30_4 double v27; // st6 double v28; // st7 float v29; // [esp+1Ch] [ebp-3Ch] float v30; // [esp+20h] [ebp-38h] float v31; // [esp+24h] [ebp-34h] float v32; // [esp+28h] [ebp-30h] float v33; // [esp+2Ch] [ebp-2Ch] float v34; // [esp+38h] [ebp-20h] float v35; // [esp+3Ch] [ebp-1Ch] float v36; // [esp+40h] [ebp-18h] float v37; // [esp+44h] [ebp-14h] float v38; // [esp+48h] [ebp-10h] float v39; // [esp+4Ch] [ebp-Ch] float v40; // [esp+50h] [ebp-8h] v1 = *(float *)(this + 140); result = *(float *)(this + 148); v3 = *(float *)(this + 144); v31 = *(float *)(this + 108); v32 = *(float *)(this + 120); v33 = *(float *)(this + 132); v29 = *(float *)(this + 124); v30 = *(float *)(this + 136); v4 = *(float *)(this + 112); v5 = v1 * v4 + v3 * v29 + result * v30; v35 = -v5; v6 = v1 * v31 + v3 * v32 + result * v33; v34 = -v6; v7 = *(float *)(this + 104); v8 = *(float *)(this + 128); v9 = *(float *)(this + 116); v10 = result * v8 + v1 * v7 + v3 * v9; v36 = -v10; v40 = *(float *)(this + 244) + *(float *)(this + 240); v38 = *(float *)(this + 252) + *(float *)(this + 248); v11 = 1.0 / (*(float *)(this + 244) - *(float *)(this + 240)); v39 = 1.0 / (*(float *)(this + 248) - *(float *)(this + 252)); v37 = 1.0 / (*(float *)(this + 260) - *(float *)(this + 256)); v12 = v11; v13 = v11 * 2.0; if ( *(_BYTE *)(this + 264) ) { v14 = v13; v15 = v39; v16 = 2.0 * v39; *(float *)(this + 176) = v4 * v14; *(float *)(this + 180) = v29 * v14; *(float *)(this + 184) = v30 * v14; v17 = v12 * v40; *(float *)(this + 188) = v14 * v35 + v17; v18 = v16; *(float *)(this + 192) = v31 * v16; *(float *)(this + 196) = v32 * v16; *(float *)(this + 200) = v33 * v16; v19 = v15 * v38; *(float *)(this + 204) = v18 * v34 + v19; *(float *)(this + 208) = v7 * v37; *(float *)(this + 212) = v9 * v37; *(float *)(this + 216) = v8 * v37; v20 = -*(float *)(this + 256) * v37; *(float *)(this + 220) = v37 * v36 + v20; *(float *)(this + 224) = 0.0; *(float *)(this + 228) = 0.0; *(float *)(this + 232) = 0.0; *(float *)(this + 236) = 1.0; } else { v21 = v13; v22 = v12 * -v40; v23 = 2.0 * v39; v24 = v39 * -v38; v25 = *(float *)(this + 260) * v37; *(float *)(this + 176) = v4 * v21 + v22 * v7; *(float *)(this + 180) = v22 * v9 + v21 * v29; *(float *)(this + 184) = v22 * v8 + v21 * v30; *(float *)(this + 188) = v21 * v35 + v22 * v36; *(float *)(this + 192) = v24 * v7 + v23 * v31; *(float *)(this + 196) = v24 * v9 + v23 * v32; *(float *)(this + 200) = v24 * v8 + v23 * v33; *(float *)(this + 204) = v24 * v36 + v23 * v34; *(float *)(this + 208) = v25 * v7; *(float *)(this + 212) = v25 * v9; *(float *)(this + 216) = v25 * v8; v26 = -*(float *)(this + 256) * v25; *(float *)(this + 220) = v25 * v36 + v26; *(float *)(this + 224) = v7; *(float *)(this + 228) = v9; v27 = v8; v28 = v36; *(float *)(this + 232) = v27; *(float *)(this + 236) = *(float *)&v28; } return result; } //----- (00862890) -------------------------------------------------------- int __thiscall sub_862890(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // ebx int result; // eax v3 = this; sub_85CD30(this, a2, a3); memcpy_s((void *)(a2 + 176), 0x40u, v3 + 88, 0x40u); *(_DWORD *)(a2 + 140) = *((_DWORD *)v3 + 35); result = a2; *(_DWORD *)(a2 + 144) = *((_DWORD *)v3 + 36); *(_DWORD *)(a2 + 148) = *((_DWORD *)v3 + 37); qmemcpy((void *)(a2 + 240), v3 + 120, 0x1Cu); *(_DWORD *)(a2 + 276) = *((_DWORD *)v3 + 69); *(_DWORD *)(a2 + 280) = *((_DWORD *)v3 + 70); *(_DWORD *)(a2 + 284) = *((_DWORD *)v3 + 71); *(_DWORD *)(a2 + 288) = *((_DWORD *)v3 + 72); *(float *)(a2 + 292) = *((float *)v3 + 73); *(float *)(a2 + 268) = *((float *)v3 + 67); *(float *)(a2 + 272) = *((float *)v3 + 68); return result; } //----- (00862960) -------------------------------------------------------- char __thiscall sub_862960(float *this, float a2, float a3, int a4, float a5) { float *v5; // esi double v6; // st7 double v7; // st6 int v8; // ST0C_4 float v9; // ST04_4 v5 = this; if ( !dword_BA46D0 ) return 0; if ( !sub_85F370((void *)dword_BA46D0, LODWORD(a2), LODWORD(a3), &a3, &a2) ) return 0; v6 = a3; if ( v5[70] < (double)a3 ) return 0; if ( v5[69] > v6 ) return 0; v7 = a2; if ( v5[71] < (double)a2 || v5[72] > v7 ) return 0; v8 = LODWORD(a5); a5 = (v7 - v5[72]) / (v5[71] - v5[72]); a5 = a5 * (v5[62] - v5[63]) + v5[63]; v9 = a5; a5 = (v6 - v5[69]) / (v5[70] - v5[69]); a5 = a5 * (v5[61] - v5[60]) + v5[60]; sub_862300((int)v5, a5, v9, a4, v8); return 1; } // BA46D0: using guessed type int dword_BA46D0; //----- (00862A80) -------------------------------------------------------- float __userpurge sub_862A80@(void *this@) { int v1; // esi v1 = (int)this; sub_85BE80((int)this); return sub_862520(v1); } //----- (00862A90) -------------------------------------------------------- unsigned int __thiscall sub_862A90(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int v3; // edi unsigned int result; // eax unsigned int v5; // esi int v6; // eax int v7; // eax int v8; // esi unsigned int v9; // esi unsigned int v10; // [esp+18h] [ebp+8h] int v11; // [esp+18h] [ebp+8h] v2 = a2; sub_85C770(this, a2); v3 = sub_875AD0(a2); if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); result = sub_875B00(a2); if ( result ) { v10 = result; do { result = sub_875AD0(v2); v5 = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) result = (**(int (__thiscall ***)(unsigned int, signed int))v5)(v5, 1); } --v10; } while ( v10 ); } if ( v2[7] >= 0x4010004u ) { v6 = sub_875B00(v2); if ( v6 ) { v11 = v6; do { v7 = sub_875AD0(v2); v8 = v7; if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } --v11; } while ( v11 ); } result = v2[7]; if ( result >= 0xA000107 && result < 0xA00010F ) { result = sub_875B00(v2); if ( result ) { v9 = result; do { result = sub_875AD0(v2); --v9; } while ( v9 ); } } } if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } return result; } //----- (00862BA0) -------------------------------------------------------- int __thiscall sub_862BA0(_DWORD *this) { int v1; // esi int v2; // ecx int v3; // edx v1 = (int)this; sub_85C9A0(this); *(_DWORD *)v1 = &NiCamera::`vftable'; sub_86B1D0((_BYTE *)(v1 + 240), 0); *(float *)(v1 + 276) = 0.0; *(float *)(v1 + 280) = 0.0; *(float *)(v1 + 284) = 0.0; *(float *)(v1 + 288) = 0.0; *(_BYTE *)(v1 + 264) = 0; *(float *)(v1 + 256) = 1.0; *(float *)(v1 + 260) = 2.0; *(float *)(v1 + 248) = 0.5; *(float *)(v1 + 252) = -0.5; *(float *)(v1 + 240) = -0.5; *(float *)(v1 + 244) = 0.5; *(float *)(v1 + 268) = 0.1; *(float *)(v1 + 272) = 10000.0; *(float *)(v1 + 284) = 1.0; *(float *)(v1 + 280) = 1.0; *(float *)(v1 + 292) = 1.0; *(float *)(v1 + 288) = 0.0; *(float *)(v1 + 276) = 0.0; sub_85BE80(v1); sub_862520(v1); v2 = *(_DWORD *)(v1 + 144); v3 = *(_DWORD *)(v1 + 148); *(_DWORD *)(v1 + 36) = *(_DWORD *)(v1 + 140); *(_DWORD *)(v1 + 40) = v2; *(_DWORD *)(v1 + 44) = v3; return v1; } // A247A4: using guessed type void *NiCamera::`vftable'; //----- (00862C80) -------------------------------------------------------- int __thiscall sub_862C80(_WORD *this, _DWORD **a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = operator new(0x128u); if ( v3 ) { v4 = sub_862BA0(v3); sub_862890(v2, v4, a2); result = v4; } else { sub_862890(v2, 0, a2); result = 0; } return result; } //----- (00862CD0) -------------------------------------------------------- int sub_862CD0() { _DWORD *v0; // eax int result; // eax v0 = operator new(0x128u); if ( v0 ) result = sub_862BA0(v0); else result = 0; return result; } //----- (00862CF0) -------------------------------------------------------- unsigned int __thiscall sub_862CF0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST40_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST3C_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST28_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST14_4 void (__cdecl *v15)(int, int *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST00_4 void (__cdecl *v18)(int, int *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST3C_4 void (__cdecl *v21)(int, int *, signed int, signed int *, signed int); // eax int v22; // eax int v23; // ST28_4 void (__cdecl *v24)(int, int *, signed int, signed int *, signed int); // eax int v25; // eax int v26; // ST3C_4 void (__cdecl *v27)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v28)(int, int *, signed int, signed int *, signed int); // edx int v29; // ST3C_4 int v30; // eax int v31; // ST28_4 void (__cdecl *v32)(int, int *, signed int, signed int *, signed int); // eax int v33; // eax int v34; // ST14_4 void (__cdecl *v35)(int, int *, signed int, signed int *, signed int); // eax int v36; // eax int v37; // ST00_4 void (__cdecl *v38)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v39)(int, int *, signed int, signed int *, signed int); // edx int v40; // ST3C_4 unsigned int result; // eax int v42; // [esp+8h] [ebp-8h] int v43; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_85CDA0(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, &v43, 2, &a2, 1); } else { v43 = *(unsigned __int16 *)(v2 + 412); } v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 60, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v3 + 61, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v13 + 4); a2 = 4; v15(v14, v3 + 62, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v16 + 4); a2 = 4; v18(v17, v3 + 63, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v19 + 4); a2 = 4; v21(v20, v3 + 64, 4, &a2, 1); v22 = *(_DWORD *)(v2 + 352); v23 = v22; v24 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v22 + 4); a2 = 4; v24(v23, v3 + 65, 4, &a2, 1); if ( *(_DWORD *)(v2 + 28) >= 0xA000105u ) { v25 = *(_DWORD *)(v2 + 352); v26 = v25; v27 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v25 + 4); v42 = 1; v27(v26, (char *)&a2 + 3, 1, &v42, 1); *((_BYTE *)v3 + 264) = HIBYTE(a2) != 0; } else { *((_BYTE *)v3 + 264) = 0; } v28 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v29 = *(_DWORD *)(v2 + 352); a2 = 4; v28(v29, v3 + 69, 4, &a2, 1); v30 = *(_DWORD *)(v2 + 352); v31 = v30; v32 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v30 + 4); a2 = 4; v32(v31, v3 + 70, 4, &a2, 1); v33 = *(_DWORD *)(v2 + 352); v34 = v33; v35 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v33 + 4); a2 = 4; v35(v34, v3 + 71, 4, &a2, 1); v36 = *(_DWORD *)(v2 + 352); v37 = v36; v38 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v36 + 4); a2 = 4; v38(v37, v3 + 72, 4, &a2, 1); v39 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v40 = *(_DWORD *)(v2 + 352); a2 = 4; v39(v40, v3 + 73, 4, &a2, 1); sub_876290((void **)v2); result = sub_876350((void **)v2); if ( *(_DWORD *)(v2 + 28) >= 0x4010004u ) { sub_876350((void **)v2); result = *(_DWORD *)(v2 + 28); if ( result >= 0xA000107 && result < 0xA00010F ) result = sub_876350((void **)v2); } return result; } //----- (00862F10) -------------------------------------------------------- int __thiscall sub_862F10(const char **this, signed int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, const char **, signed int, int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, const char **, signed int, int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, const char **, signed int, int *, signed int); // eax int v22; // eax int v23; // eax void (__cdecl *v24)(int, char *, signed int, int *, signed int); // edx int v25; // eax int v26; // ST3C_4 void (__cdecl *v27)(int, const char **, signed int, int *, signed int); // eax int v28; // eax int v29; // ST28_4 void (__cdecl *v30)(int, const char **, signed int, int *, signed int); // eax int v31; // eax int v32; // ST14_4 void (__cdecl *v33)(int, const char **, signed int, int *, signed int); // eax int v34; // eax int v35; // ST00_4 void (__cdecl *v36)(int, const char **, signed int, int *, signed int); // eax void (__cdecl *v37)(int, const char **, signed int, int *, signed int); // edx int v38; // ST3C_4 int v39; // eax int v40; // ST3C_4 void (__cdecl *v41)(int, int *, signed int, int *, signed int); // eax int v42; // esi int (__cdecl *v43)(int, int *, signed int, int *, signed int); // eax int v45; // [esp+Ch] [ebp-Ch] int v46; // [esp+10h] [ebp-8h] int v47; // [esp+14h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85D030(this, a2); v4 = v2[89]; v45 = 0; v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 8); v46 = 2; v6(v5, &v45, 2, &v46, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v46 = 4; v9(v8, v3 + 60, 4, &v46, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v10 + 8); v46 = 4; v12(v11, v3 + 61, 4, &v46, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v13 + 8); v46 = 4; v15(v14, v3 + 62, 4, &v46, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v16 + 8); v46 = 4; v18(v17, v3 + 63, 4, &v46, 1); v19 = v2[89]; v20 = v19; v21 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v19 + 8); v46 = 4; v21(v20, v3 + 64, 4, &v46, 1); v22 = v2[89]; v46 = 4; (*(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v22 + 8))(v22, v3 + 65, 4, &v46, 1); v23 = v2[89]; HIBYTE(a2) = *((_BYTE *)v3 + 264); v24 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v23 + 8); v46 = 1; v24(v23, (char *)&a2 + 3, 1, &v46, 1); v25 = v2[89]; v26 = v25; v27 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v25 + 8); v46 = 4; v27(v26, v3 + 69, 4, &v46, 1); v28 = v2[89]; v29 = v28; v30 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v28 + 8); v46 = 4; v30(v29, v3 + 70, 4, &v46, 1); v31 = v2[89]; v32 = v31; v33 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v31 + 8); v46 = 4; v33(v32, v3 + 71, 4, &v46, 1); v34 = v2[89]; v35 = v34; v36 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v34 + 8); v46 = 4; v36(v35, v3 + 72, 4, &v46, 1); v37 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v2[89] + 8); v38 = v2[89]; v46 = 4; v37(v38, v3 + 73, 4, &v46, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, 0); v39 = v2[89]; v47 = 0; v40 = v39; v41 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v39 + 8); v46 = 4; v41(v40, &v47, 4, &v46, 1); v42 = v2[89]; v43 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v42 + 8); v46 = 4; return v43(v42, &v47, 4, &v46, 1); } //----- (00863120) -------------------------------------------------------- unsigned int __thiscall sub_863120(int *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // ebx unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // edi float v21; // [esp+2Ch] [ebp-Ch] float v22; // [esp+30h] [ebp-8h] float v23; // [esp+34h] [ebp-4h] v2 = a2; v3 = (float *)this; sub_85D140(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA475C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_86B220(v3 + 60, (int)"m_kViewFrustum"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = (char *)operator new(0x47u); sub_7FF6E0(v8, 0x47u, "%s = (L=%g,R=%g,T=%g,B=%g)", "m_kPort", v3[69], v3[70], v3[71], v3[72]); a2 = v8; v9 = *((_DWORD *)v2 + 3); if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v21 = v3[26]; v22 = v3[29]; v23 = v3[32]; v10 = sub_85F140(&v21, (int)"m_kWorldDir"); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); sub_823870(v2, v11, &a2); v21 = v3[27]; v22 = v3[30]; v23 = v3[33]; v12 = sub_85F140(&v21, (int)"m_kWorldUp"); v13 = *((_DWORD *)v2 + 3); a2 = v12; if ( v13 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v13 + *((_DWORD *)v2 + 5)); sub_823870(v2, v13, &a2); v21 = v3[28]; v22 = v3[31]; v23 = v3[34]; v14 = sub_85F140(&v21, (int)"m_kWorldRight"); v15 = *((_DWORD *)v2 + 3); a2 = v14; if ( v15 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v15 + *((_DWORD *)v2 + 5)); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"m_fMinNearPlaneDist", v3[67]); v17 = *((_DWORD *)v2 + 3); a2 = v16; if ( v17 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v17 + *((_DWORD *)v2 + 5)); sub_823870(v2, v17, &a2); v18 = sub_8786B0((int)"m_fMaxFarNearRatio", v3[68]); v19 = *((_DWORD *)v2 + 3); a2 = v18; if ( v19 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v19 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v19, &a2); } //----- (00863360) -------------------------------------------------------- int sub_863360() { return dword_BA4764; } // BA4764: using guessed type int dword_BA4764; //----- (00863370) -------------------------------------------------------- char __cdecl sub_863370(int a1, int a2, int a3) { char result; // al if ( a1 && dword_BA4764 ) result = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)dword_BA4764 + 16))(a1, a2, a3); else result = 0; return result; } // BA4764: using guessed type int dword_BA4764; //----- (008633A0) -------------------------------------------------------- char __cdecl sub_8633A0(int a1, int a2) { char result; // al if ( a1 && dword_BA4764 && a2 ) result = (*(int (__stdcall **)(int, int))(*(_DWORD *)dword_BA4764 + 12))(a1, a2); else result = 0; return result; } // BA4764: using guessed type int dword_BA4764; //----- (008633D0) -------------------------------------------------------- char __cdecl sub_8633D0(int a1) { char result; // al if ( a1 && dword_BA4764 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA4764 + 20))(a1); else result = 0; return result; } // BA4764: using guessed type int dword_BA4764; //----- (00863400) -------------------------------------------------------- int sub_863400() { int result; // eax if ( dword_BA4764 ) result = (*(int (**)(void))(*(_DWORD *)dword_BA4764 + 32))(); return result; } // BA4764: using guessed type int dword_BA4764; //----- (00863420) -------------------------------------------------------- char __cdecl sub_863420(int a1) { if ( !dword_BA4764 ) return 0; *(_DWORD *)(dword_BA4764 + 8) = a1; return 1; } // BA4764: using guessed type int dword_BA4764; //----- (00863440) -------------------------------------------------------- char __cdecl sub_863440(int a1) { if ( !dword_BA4764 ) return 0; *(_DWORD *)(dword_BA4764 + 12) = a1; return 1; } // BA4764: using guessed type int dword_BA4764; //----- (00863460) -------------------------------------------------------- int sub_863460(int a1, int a2, char *Format, ...) { int result; // eax char DstBuf; // [esp+0h] [ebp-804h] va_list va; // [esp+818h] [ebp+14h] va_start(va, Format); if ( dword_BA4764 && (vsprintf_s(&DstBuf, 0x800u, Format, va), *(_DWORD *)(dword_BA4764 + 16)) ) result = (*(int (__cdecl **)(char *, int, int))(dword_BA4764 + 16))(&DstBuf, a1, a2); else result = 0; return result; } // BA4764: using guessed type int dword_BA4764; //----- (008634E0) -------------------------------------------------------- _DWORD *__thiscall sub_8634E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v1[2] = 0; v1[3] = 0; v1[4] = 0; *v1 = &NiShaderFactory::`vftable'; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A248BC: using guessed type void *NiShaderFactory::`vftable'; //----- (00863510) -------------------------------------------------------- LONG __thiscall sub_863510(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiShaderFactory::`vftable'; if ( dword_BA4764 ) { (*(void (**)(void))(*(_DWORD *)dword_BA4764 + 32))(); if ( dword_BA4764 ) (*(void (**)(void))(*(_DWORD *)dword_BA4764 + 48))(); } *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A248BC: using guessed type void *NiShaderFactory::`vftable'; // BA4764: using guessed type int dword_BA4764; //----- (00863550) -------------------------------------------------------- char __cdecl sub_863550(int a1, int a2, int a3, int a4) { int v4; // esi char v6; // bl int v7; // [esp+4h] [ebp-4h] v4 = dword_BA4764; if ( !dword_BA4764 ) return 0; if ( !*(_DWORD *)(dword_BA4764 + 8) ) { sub_863460(1, 0, "LoadAndRegisterShaderLibrary: No valid ClassCreate call\n"); return 0; } v7 = 0; v6 = (*(int (__cdecl **)(int, int, int, int, int, int *))(dword_BA4764 + 8))(a1, dword_BA46D0, a2, a3, a4, &v7); if ( v6 ) { if ( v7 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 36))(v4, v7); } return v6; } // BA46D0: using guessed type int dword_BA46D0; // BA4764: using guessed type int dword_BA4764; //----- (008635D0) -------------------------------------------------------- int __cdecl sub_8635D0(int a1, int a2, int a3) { if ( !dword_BA4764 ) return 0; if ( !*(_DWORD *)(dword_BA4764 + 12) ) { sub_863460(1, 0, "LoadAndRegisterShaderLibrary: No valid RunParser call\n"); return 0; } return (*(int (__cdecl **)(int, int, int, int))(dword_BA4764 + 12))(a1, dword_BA46D0, a2, a3); } // BA46D0: using guessed type int dword_BA46D0; // BA4764: using guessed type int dword_BA4764; //----- (00863620) -------------------------------------------------------- _DWORD *__thiscall sub_863620(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiShaderFactory::`vftable'; if ( dword_BA4764 ) { (*(void (**)(void))(*(_DWORD *)dword_BA4764 + 32))(); if ( dword_BA4764 ) (*(void (**)(void))(*(_DWORD *)dword_BA4764 + 48))(); } *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A248BC: using guessed type void *NiShaderFactory::`vftable'; // BA4764: using guessed type int dword_BA4764; //----- (00863680) -------------------------------------------------------- void *__thiscall sub_863680(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A249A0: using guessed type void *NiTArray::`vftable'; //----- (008636B0) -------------------------------------------------------- void *__thiscall sub_8636B0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A249A8: using guessed type void *NiTArray::`vftable'; //----- (008636E0) -------------------------------------------------------- LONG __thiscall sub_8636E0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi void (__stdcall ***v3)(signed int); // ecx int v4; // eax unsigned int v5; // edi void (__stdcall ***v6)(signed int); // ecx void (__stdcall ***v7)(signed int); // ecx void *v8; // ST00_4 v1 = this; v2 = 0; *this = &NiTexturingProperty::`vftable'; if ( this[12] ) { do { v3 = *(void (__stdcall ****)(signed int))(v1[10] + 4 * v2); if ( v3 ) (**v3)(1); ++v2; } while ( v2 < v1[12] ); } v4 = v1[16]; if ( v4 ) { v5 = 0; if ( *(_DWORD *)(v4 + 12) ) { do { v6 = *(void (__stdcall ****)(signed int))(*(_DWORD *)(v1[16] + 4) + 4 * v5); if ( v6 ) (**v6)(1); ++v5; } while ( v5 < *(_DWORD *)(v1[16] + 12) ); } v7 = (void (__stdcall ***)(signed int))v1[16]; if ( v7 ) (**v7)(1); } v8 = (void *)v1[10]; v1[9] = &NiTArray::`vftable'; operator delete(v8); return sub_85B2F0(v1); } // A249A0: using guessed type void *NiTArray::`vftable'; // A249B4: using guessed type void *NiTexturingProperty::`vftable'; //----- (00863760) -------------------------------------------------------- char *sub_863760() { return dword_BA4768; } //----- (00863770) -------------------------------------------------------- char __thiscall sub_863770(int this, int a2) { _DWORD *v2; // eax unsigned int v3; // esi unsigned int v4; // edx LOBYTE(v2) = a2 != 0; *(_BYTE *)(this + 32) = a2 != 0; if ( a2 == 0 ) { v3 = *(_DWORD *)(this + 48); v4 = 1; if ( v3 > 1 ) { v2 = (_DWORD *)(*(_DWORD *)(this + 40) + 4); while ( !*v2 ) { ++v4; ++v2; if ( v4 >= v3 ) return (char)v2; } *(_BYTE *)(this + 32) = 1; } } return (char)v2; } //----- (008637B0) -------------------------------------------------------- char *__cdecl sub_8637B0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 20; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = CLAMP_S_CLAMP_T", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = CLAMP_S_WRAP_T", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = WRAP_S_CLAMP_T", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = WRAP_S_WRAP_T", ArgList); goto LABEL_6; default: LABEL_6: result = v3; break; } return result; } //----- (00863860) -------------------------------------------------------- char *__cdecl sub_863860(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 30; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = FILTER_NEAREST", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = FILTER_BILERP", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = FILTER_TRILERP", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = FILTER_NEAREST_MIPNEAREST", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = FILTER_NEAREST_MIPLERP", ArgList); result = v3; break; case 5: sub_7FF6E0(v3, v2, "%s = FILTER_BILERP_MIPNEAREST", ArgList); goto LABEL_8; default: LABEL_8: result = v3; break; } return result; } //----- (00863940) -------------------------------------------------------- _DWORD *__thiscall sub_863940(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiTexturingProperty::Map::`vftable'; this[1] = 0; this[2] = 3; this[3] = 1; this[4] = 0; this[5] = 0; return result; } // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; //----- (00863970) -------------------------------------------------------- _DWORD *__thiscall sub_863970(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi v6 = this; *this = &NiTexturingProperty::Map::`vftable'; this[1] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v6[2] = a4; v6[5] = a6; v6[3] = a5; v6[4] = a3; return v6; } // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; //----- (008639B0) -------------------------------------------------------- _DWORD *__thiscall sub_8639B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ebx int v4; // eax void *v5; // eax int *v6; // edx int v7; // ebx int v8; // esi _DWORD *result; // eax int v10; // [esp+20h] [ebp-18h] int v11; // [esp+24h] [ebp-14h] int v12; // [esp+28h] [ebp-10h] int v13; // [esp+2Ch] [ebp-Ch] int v14; // [esp+30h] [ebp-8h] int v15; // [esp+34h] [ebp-4h] float v16; // [esp+40h] [ebp+8h] v2 = this; *this = &NiTexturingProperty::Map::`vftable'; this[1] = 0; v3 = this[1]; if ( v3 != a2[1] ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = a2[1]; v2[1] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v2[2] = a2[2]; v2[3] = a2[3]; v2[4] = a2[4]; if ( a2[5] ) { v5 = operator new(0x48u); if ( v5 ) { v6 = (int *)a2[5]; v7 = v6[17]; v14 = v6[5]; v15 = v6[6]; v8 = a2[5]; v12 = *(_DWORD *)(v8 + 12); v13 = *(_DWORD *)(v8 + 16); v16 = *(float *)(v8 + 8); v10 = *(_DWORD *)v8; v11 = *(_DWORD *)(v8 + 4); v2[5] = sub_878F50((int)v5, (int)&v10, v16, (int)&v12, (int)&v14, v7); } else { v2[5] = 0; } result = v2; } else { v2[5] = 0; result = v2; } return result; } // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; //----- (00863AB0) -------------------------------------------------------- char __thiscall sub_863AB0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ecx float *v4; // ecx v2 = this; v3 = this[1]; if ( !v3 ) { if ( !a2[1] ) goto LABEL_5; return 0; } if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 28))(a2[1]) ) return 0; LABEL_5: if ( v2[2] != a2[2] || v2[3] != a2[3] || v2[4] != a2[4] ) return 0; v4 = (float *)v2[5]; if ( !v4 ) { LABEL_13: if ( a2[5] ) return 0; if ( !v4 ) return 1; LABEL_15: if ( !a2[5] ) return 0; return 1; } if ( !a2[5] ) { if ( v4 ) goto LABEL_15; goto LABEL_13; } if ( (unsigned __int8)sub_878D90(v4, a2[5]) ) return 0; return 1; } //----- (00863B30) -------------------------------------------------------- bool __thiscall sub_863B30(float *this, int a2) { float *v2; // esi v2 = this; return sub_863AB0(this, (_DWORD *)a2) && *(float *)(a2 + 24) == v2[6] && *(float *)(a2 + 28) == v2[7] && *(float *)(a2 + 32) == v2[8] && *(float *)(a2 + 36) == v2[9] && *(float *)(a2 + 40) == v2[10] && *(float *)(a2 + 44) == v2[11]; } //----- (00863BB0) -------------------------------------------------------- _DWORD *__thiscall sub_863BB0(_DWORD *this) { _DWORD *v1; // edi bool v2; // cf bool v3; // zf int v5; // [esp+Ch] [ebp-4h] v1 = this; sub_85B2B0(this); *v1 = &NiTexturingProperty::`vftable'; v1[11] = 7; v1[9] = &NiTArray::`vftable'; v1[14] = 1; v1[12] = 0; v1[13] = 0; v1[10] = operator new(0x1Cu); v5 = 0; if ( v1[11] <= 0u ) sub_8237A0(v1 + 9, v1[14]); sub_823870(v1 + 9, 0, &v5); v2 = v1[11] < 1u; v3 = v1[11] == 1; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 1); sub_823870(v1 + 9, 1u, &v5); v2 = v1[11] < 2u; v3 = v1[11] == 2; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 2); sub_823870(v1 + 9, 2u, &v5); v2 = v1[11] < 3u; v3 = v1[11] == 3; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 3); sub_823870(v1 + 9, 3u, &v5); v2 = v1[11] < 4u; v3 = v1[11] == 4; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 4); sub_823870(v1 + 9, 4u, &v5); v2 = v1[11] < 5u; v3 = v1[11] == 5; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 5); sub_823870(v1 + 9, 5u, &v5); v2 = v1[11] < 6u; v3 = v1[11] == 6; v5 = 0; if ( v2 || v3 ) sub_8237A0(v1 + 9, v1[14] + 6); sub_823870(v1 + 9, 6u, &v5); v1[15] = 0; *((_BYTE *)v1 + 32) = 0; v1[16] = 0; v1[7] = 2; return v1; } // A249A0: using guessed type void *NiTArray::`vftable'; // A249B4: using guessed type void *NiTexturingProperty::`vftable'; //----- (00863D20) -------------------------------------------------------- void *__thiscall sub_863D20(void *this, char a2) { void *v2; // esi v2 = this; sub_8636E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00863D50) -------------------------------------------------------- _DWORD *__thiscall sub_863D50(_DWORD *this, char *Src) { _DWORD *v2; // ebx char *v3; // edi char *v4; // eax bool v5; // cf bool v6; // zf v2 = this; sub_85B2B0(this); *v2 = &NiTexturingProperty::`vftable'; v2[12] = 0; v2[13] = 0; v2[9] = &NiTArray::`vftable'; v2[11] = 7; v2[14] = 1; v2[10] = operator new(0x1Cu); Src = (char *)sub_865EB0(Src, (int)&unk_ABD7DC, 0); v3 = (char *)operator new(0x18u); if ( v3 ) { v4 = Src; *(_DWORD *)v3 = &NiTexturingProperty::Map::`vftable'; *((_DWORD *)v3 + 1) = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)v4 + 1); *((_DWORD *)v3 + 2) = 3; *((_DWORD *)v3 + 3) = 1; *((_DWORD *)v3 + 4) = 0; *((_DWORD *)v3 + 5) = 0; Src = v3; } else { Src = 0; } if ( v2[11] <= 0u ) sub_8237A0(v2 + 9, v2[14]); sub_823870(v2 + 9, 0, &Src); v5 = v2[11] < 1u; v6 = v2[11] == 1; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 1); sub_823870(v2 + 9, 1u, &Src); v5 = v2[11] < 2u; v6 = v2[11] == 2; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 2); sub_823870(v2 + 9, 2u, &Src); v5 = v2[11] < 3u; v6 = v2[11] == 3; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 3); sub_823870(v2 + 9, 3u, &Src); v5 = v2[11] < 4u; v6 = v2[11] == 4; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 4); sub_823870(v2 + 9, 4u, &Src); v5 = v2[11] < 5u; v6 = v2[11] == 5; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 5); sub_823870(v2 + 9, 5u, &Src); v5 = v2[11] < 6u; v6 = v2[11] == 6; Src = 0; if ( v5 || v6 ) sub_8237A0(v2 + 9, v2[14] + 6); sub_823870(v2 + 9, 6u, &Src); v2[15] = 0; v2[16] = 0; *((_BYTE *)v2 + 32) = 0; v2[7] = 2; return v2; } // A249A0: using guessed type void *NiTArray::`vftable'; // A249B4: using guessed type void *NiTexturingProperty::`vftable'; // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; //----- (00863F20) -------------------------------------------------------- char __thiscall sub_863F20(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi unsigned int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // ebx bool v6; // zf _DWORD *v7; // eax unsigned int v8; // edx unsigned int v9; // ecx v3 = this; v4 = a2 + 6; if ( (unsigned int)(a2 + 6) < this[12] ) { v5 = *(void (__thiscall ****)(_DWORD, signed int))(this[10] + 4 * v4); if ( a3 ) { if ( !v5 ) ++this[15]; } else if ( v5 ) { --this[15]; } sub_823870(this + 9, v4, &a3); if ( v5 ) (**v5)(v5, 1); goto LABEL_13; } if ( v4 >= this[11] ) sub_8237A0(this + 9, v4 + this[14]); sub_823870(v3 + 9, v4, &a3); v6 = a3 == 0; if ( a3 ) { ++v3[15]; LABEL_13: v6 = a3 == 0; } LOBYTE(v7) = !v6; *((_BYTE *)v3 + 32) = !v6; if ( v6 ) { v8 = v3[12]; v9 = 1; if ( v8 > 1 ) { v7 = (_DWORD *)(v3[10] + 4); while ( !*v7 ) { ++v9; ++v7; if ( v9 >= v8 ) return (char)v7; } *((_BYTE *)v3 + 32) = 1; } } return (char)v7; } //----- (00863FF0) -------------------------------------------------------- void __thiscall sub_863FF0(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // ebx v3 = this; if ( !this[16] ) { v4 = operator new(0x18u); if ( v4 ) { *v4 = &NiTArray::`vftable'; v4[2] = 0; v4[5] = 1; v4[3] = 0; v4[4] = 0; v4[1] = 0; } else { v4 = 0; } v3[16] = v4; } v5 = (_DWORD *)v3[16]; if ( a2 >= v5[3] ) { if ( a3 ) { if ( a2 >= v5[2] ) sub_8237A0(v5, a2 + v5[5]); sub_823870(v5, a2, &a3); } } else { v6 = *(void (__thiscall ****)(_DWORD, signed int))(v5[1] + 4 * a2); sub_823870(v5, a2, &a3); if ( v6 ) (**v6)(v6, 1); } } // A249A8: using guessed type void *NiTArray::`vftable'; //----- (00864090) -------------------------------------------------------- _DWORD *sub_864090() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x44u); if ( v0 ) result = sub_863BB0(v0); else result = 0; return result; } //----- (008640B0) -------------------------------------------------------- void __thiscall sub_8640B0(int *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ebx int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, float **, signed int, unsigned int *, signed int); // eax int v7; // eax int v8; // eax int v9; // ST00_4 void (__cdecl *v10)(int, unsigned int *, signed int, unsigned int *, signed int); // eax _DWORD *v11; // esi bool v12; // cf unsigned int v13; // ebx int v14; // eax int v15; // ST00_4 void (__cdecl *v16)(int, float **, signed int, int *, signed int); // eax int v17; // ST00_4 void (__cdecl *v18)(int, bool *, signed int, int *, signed int); // eax float *v19; // eax float *v20; // eax int v21; // eax int v22; // edx int v23; // edx int v24; // eax void (__cdecl *v25)(int, unsigned int *, signed int, int *, signed int); // edx int v26; // ST00_4 _DWORD *v27; // eax unsigned int v28; // ebx int v29; // eax int v30; // ST00_4 void (__cdecl *v31)(int, bool *, signed int, int *, signed int); // eax _DWORD *v32; // edi _DWORD *v33; // eax _DWORD *v34; // esi unsigned int v35; // edx unsigned int v36; // ecx _DWORD *v37; // eax int v38; // [esp+Ch] [ebp-18h] int *v39; // [esp+10h] [ebp-14h] unsigned int v40; // [esp+14h] [ebp-10h] unsigned int v41; // [esp+18h] [ebp-Ch] float *v42; // [esp+1Ch] [ebp-8h] bool v43; // [esp+23h] [ebp-1h] v2 = a2; v3 = (int)this; v39 = this; sub_85FBF0(this, (void **)a2); v4 = a2[88]; v5 = v4; v6 = *(void (__cdecl **)(int, float **, signed int, unsigned int *, signed int))(v4 + 4); v40 = 4; v6(v5, &v42, 4, &v40, 1); v7 = (int)v42; *(_DWORD *)(v3 + 28) = v42; if ( v7 == 3 || v7 == 4 ) *(_DWORD *)(v3 + 28) = 2; v8 = a2[88]; v9 = v8; v10 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v8 + 4); v40 = 4; v10(v9, &v41, 4, &v40, 1); v11 = (_DWORD *)(v3 + 36); sub_8237A0((_DWORD *)(v3 + 36), v41); if ( a2[7] >= 0x303000Du ) sub_8764B0(a2, v41); else sub_8764B0(a2, v41 + 1); v40 = 0; if ( v41 ) { while ( 1 ) { v12 = a2[7] < 0x4010000u; v13 = v40; v14 = a2[88]; v42 = 0; if ( v12 ) { v15 = v14; v16 = *(void (__cdecl **)(int, float **, signed int, int *, signed int))(v14 + 4); v38 = 4; v16(v15, &v42, 4, &v38, 1); v43 = v42 != 0; } else { v17 = v14; v18 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v14 + 4); v38 = 1; v18(v17, &v43, 1, &v38, 1); } if ( a2[7] < 0x303000Du ) { if ( v40 >= 5 ) { sub_8764B0(a2, 0); v13 = v40 + 1; } LABEL_14: sub_8764B0(a2, v43); if ( v43 ) { v19 = (float *)operator new(0x18u); if ( v19 ) { *(_DWORD *)v19 = &NiTexturingProperty::Map::`vftable'; v19[1] = 0.0; *((_DWORD *)v19 + 2) = 3; *((_DWORD *)v19 + 3) = 1; v19[4] = 0.0; v19[5] = 0.0; } else { v19 = 0; } v42 = v19; (*(void (__thiscall **)(float *, _DWORD *))(*(_DWORD *)v19 + 4))(v19, a2); } if ( v13 < v11[2] || (sub_8237A0(v11, v13 + v11[5]), v13 < v11[2]) ) { v24 = (int)v42; if ( v13 < v11[3] ) { if ( v42 ) { if ( !*(_DWORD *)(v11[1] + 4 * v13) ) ++v11[4]; } else if ( *(_DWORD *)(v11[1] + 4 * v13) ) { --v11[4]; } } else { v11[3] = v13 + 1; if ( v24 ) ++v11[4]; } *(_DWORD *)(v11[1] + 4 * v13) = v24; } goto LABEL_47; } if ( v40 != 5 ) goto LABEL_14; sub_8764B0(a2, v43); if ( v43 ) { v20 = (float *)operator new(0x30u); if ( v20 ) { v20[1] = 0.0; v20[6] = 1.0; *((_DWORD *)v20 + 2) = 3; *((_DWORD *)v20 + 3) = 1; v20[7] = 0.0; v20[4] = 0.0; v20[5] = 0.0; v20[8] = 0.5; *(_DWORD *)v20 = &NiTexturingProperty::BumpMap::`vftable'; v20[11] = 0.5; v20[9] = 0.0; v20[10] = 0.0; } else { v20 = 0; } v42 = v20; (*(void (__thiscall **)(float *, _DWORD *))(*(_DWORD *)v20 + 4))(v20, a2); } if ( v11[2] <= 5u ) { sub_8237A0(v11, v11[5] + 5); if ( v11[2] <= 5u ) goto LABEL_47; } v21 = (int)v42; if ( v11[3] > 5u ) { if ( !v42 ) { if ( *(_DWORD *)(v11[1] + 20) ) --v11[4]; LABEL_33: *(_DWORD *)(v11[1] + 20) = v21; goto LABEL_47; } v23 = v11[1]; if ( *(_DWORD *)(v23 + 20) ) goto LABEL_33; ++v11[4]; *(_DWORD *)(v23 + 20) = v21; } else { v11[3] = 6; if ( !v21 ) goto LABEL_33; v22 = v11[1]; ++v11[4]; *(_DWORD *)(v22 + 20) = v21; } LABEL_47: if ( ++v40 >= v41 ) { v3 = (int)v39; break; } } } if ( a2[7] >= 0x5000011u ) { v25 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2[88] + 4); v26 = a2[88]; v38 = 4; v25(v26, &v41, 4, &v38, 1); sub_8764B0(a2, v41); if ( v41 ) { v27 = operator new(0x18u); if ( v27 ) { *v27 = &NiTArray::`vftable'; v27[2] = 0; v27[5] = 1; v27[3] = 0; v27[4] = 0; v27[1] = 0; } else { v27 = 0; } *(_DWORD *)(v3 + 64) = v27; v28 = 0; if ( v41 > 0 ) { while ( 1 ) { v29 = v2[88]; v30 = v29; v31 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v29 + 4); v38 = 1; v31(v30, &v43, 1, &v38, 1); sub_8764B0(v2, v43); v32 = 0; if ( v43 ) { v33 = operator new(0x1Cu); if ( v33 ) { v33[1] = 0; v33[4] = 0; v33[5] = 0; v33[6] = 0; v33[2] = 3; v33[3] = 1; *v33 = &NiTexturingProperty::ShaderMap::`vftable'; v32 = v33; } (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v32 + 4))(v32, a2); } v34 = (_DWORD *)v39[16]; if ( v28 < v34[2] || (sub_8237A0(v34, v28 + v34[5]), v28 < v34[2]) ) { if ( v28 < v34[3] ) { if ( v32 ) { if ( !*(_DWORD *)(v34[1] + 4 * v28) ) ++v34[4]; } else if ( *(_DWORD *)(v34[1] + 4 * v28) ) { --v34[4]; } } else { v34[3] = v28 + 1; if ( v32 ) ++v34[4]; } *(_DWORD *)(v34[1] + 4 * v28) = v32; } if ( ++v28 >= v41 ) break; v2 = a2; } } v3 = (int)v39; } } v35 = *(_DWORD *)(v3 + 48); v36 = 1; *(_BYTE *)(v3 + 32) = 0; if ( v35 > 1 ) { v37 = (_DWORD *)(*(_DWORD *)(v3 + 40) + 4); while ( !*v37 ) { ++v36; ++v37; if ( v36 >= v35 ) return; } *(_BYTE *)(v3 + 32) = 1; } } // A249A8: using guessed type void *NiTArray::`vftable'; // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; // A24AF8: using guessed type void *NiTexturingProperty::BumpMap::`vftable'; // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; //----- (00864510) -------------------------------------------------------- int __thiscall sub_864510(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int result; // eax unsigned int v5; // ebx int v6; // edi int v7; // esi int v8; // edi int v9; // ebx unsigned int v10; // ebx int v11; // edi int v12; // esi int v13; // edi int v14; // ebx unsigned int v15; // [esp+Ch] [ebp-Ch] unsigned int v16; // [esp+Ch] [ebp-Ch] _DWORD *v17; // [esp+10h] [ebp-8h] unsigned int v18; // [esp+14h] [ebp-4h] unsigned int v19; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; v17 = this; sub_872D20(this, a2); result = sub_875B00(a2); v5 = 0; v15 = result; v3[15] = 0; v18 = 0; if ( result ) { do { result = sub_875B00(v2); if ( result ) { v6 = v3[10] + 4 * v5; result = sub_875AD0(v2); v7 = *(_DWORD *)v6; v8 = *(_DWORD *)(*(_DWORD *)v6 + 4); v9 = result; if ( v8 != result ) { if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } *(_DWORD *)(v7 + 4) = v9; if ( v9 ) result = InterlockedIncrement((volatile LONG *)(v9 + 4)); } v2 = a2; if ( v18 >= 6 ) { result = (int)v17; ++*(_DWORD *)(result + 60); } } v3 = v17; v5 = v18 + 1; v18 = v5; } while ( v5 < v15 ); } if ( v2[7] >= 0x5000011u ) { result = sub_875B00(v2); v10 = 0; v16 = result; v19 = 0; if ( result ) { while ( 1 ) { result = sub_875B00(v2); if ( result ) { v11 = *(_DWORD *)(v3[16] + 4) + 4 * v10; result = sub_875AD0(v2); v12 = *(_DWORD *)v11; v13 = *(_DWORD *)(*(_DWORD *)v11 + 4); v14 = result; if ( v13 != result ) { if ( v13 ) { result = InterlockedDecrement((volatile LONG *)(v13 + 4)); if ( !result ) { if ( v13 ) result = (**(int (__thiscall ***)(int, signed int))v13)(v13, 1); } } *(_DWORD *)(v12 + 4) = v14; if ( v14 ) result = InterlockedIncrement((volatile LONG *)(v14 + 4)); } v2 = a2; } v10 = v19 + 1; v19 = v10; if ( v10 >= v16 ) break; v3 = v17; } } } return result; } //----- (00864650) -------------------------------------------------------- char __thiscall sub_864650(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // esi int v5; // eax int v6; // eax int v7; // eax unsigned int v8; // esi int v9; // eax int v10; // eax v2 = this; result = sub_81A690(this, a2); if ( result ) { v4 = 0; if ( v2[12] ) { do { v5 = *(_DWORD *)(v2[10] + 4 * v4); if ( v5 ) { v6 = *(_DWORD *)(v5 + 4); if ( v6 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 20))(v6, a2); } ++v4; } while ( v4 < v2[12] ); } v7 = v2[16]; if ( v7 ) { v8 = 0; if ( *(_DWORD *)(v7 + 12) ) { do { v9 = *(_DWORD *)(*(_DWORD *)(v7 + 4) + 4 * v8); if ( v9 ) { v10 = *(_DWORD *)(v9 + 4); if ( v10 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v10 + 20))(v10, a2); } v7 = v2[16]; ++v8; } while ( v8 < *(_DWORD *)(v7 + 12) ); } } result = 1; } return result; } //----- (008646D0) -------------------------------------------------------- unsigned int __thiscall sub_8646D0(const char **this, _DWORD *a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax void (__cdecl *v8)(int, unsigned int *, signed int, _DWORD **, signed int); // edx int v9; // ebx int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax const char *v13; // eax unsigned int v14; // ecx int v15; // eax unsigned int result; // eax int v17; // ebx int v18; // eax int v19; // ST14_4 void (__cdecl *v20)(int, char *, signed int, int *, signed int); // eax int v21; // esi int v22; // [esp+Ch] [ebp-Ch] unsigned int v23; // [esp+10h] [ebp-8h] unsigned int v24; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)4; v6(v5, v3 + 7, 4, &a2, 1); v7 = v2[89]; v24 = (unsigned int)v3[12]; v8 = *(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v8(v7, &v24, 4, &a2, 1); v23 = 0; if ( v24 ) { do { v9 = *(_DWORD *)&v3[10][4 * v23]; v10 = v2[89]; HIBYTE(a2) = v9 != 0; v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); v22 = 1; v12(v11, (char *)&a2 + 3, 1, &v22, 1); if ( HIBYTE(a2) ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v9 + 8))(v9, v2); ++v23; } while ( v23 < v24 ); } v13 = v3[16]; a2 = (_DWORD *)4; if ( v13 ) { v14 = *((_DWORD *)v13 + 3); v15 = v2[89]; v24 = v14; result = (*(int (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v15 + 8))( v15, &v24, 4, &a2, 1); v23 = 0; if ( v24 ) { do { v17 = *(_DWORD *)(*((_DWORD *)v3[16] + 1) + 4 * v23); HIBYTE(a2) = v17 != 0; v18 = v2[89]; v19 = v18; v20 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v18 + 8); v22 = 1; v20(v19, (char *)&a2 + 3, 1, &v22, 1); if ( HIBYTE(a2) ) (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v17 + 8))(v17, v2); result = v23 + 1; v23 = result; } while ( result < v24 ); } } else { v21 = v2[89]; v24 = 0; result = (*(int (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v21 + 8))( v21, &v24, 4, &a2, 1); } return result; } //----- (00864850) -------------------------------------------------------- char __thiscall sub_864850(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi unsigned int v5; // eax unsigned int v6; // esi float *v7; // ecx int v8; // edx int v9; // eax int v10; // ecx int v11; // eax unsigned int v12; // ecx int v13; // esi _DWORD *v14; // edi int v15; // edx int v16; // ebx _DWORD *v17; // [esp-8h] [ebp-18h] _DWORD *v18; // [esp+8h] [ebp-8h] unsigned int v19; // [esp+Ch] [ebp-4h] unsigned int v20; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v18 = this; if ( !sub_81A6B0(this, (int)a2) ) return 0; if ( v3[7] != a2[7] ) return 0; v5 = v3[12]; v19 = v5; if ( v5 != a2[12] ) return 0; v6 = 0; if ( v5 ) { do { v7 = *(float **)(v3[10] + 4 * v6); v8 = a2[10]; v9 = *(_DWORD *)(v8 + 4 * v6); if ( v7 ) { if ( !v9 ) return 0; v17 = *(_DWORD **)(v8 + 4 * v6); if ( v6 == 5 ) { if ( !sub_863B30(v7, (int)v17) ) return 0; } else if ( !sub_863AB0(v7, v17) ) { return 0; } } else if ( v9 ) { return 0; } ++v6; } while ( v6 < v19 ); } v10 = v3[16]; if ( v10 ) { v11 = a2[16]; if ( v11 ) { v12 = *(_DWORD *)(v10 + 12); v20 = v12; if ( v12 == *(_DWORD *)(v11 + 12) ) { v13 = 0; if ( v12 ) { while ( 1 ) { v14 = *(_DWORD **)(*(_DWORD *)(v3[16] + 4) + 4 * v13); v15 = *(_DWORD *)(v2[16] + 4); v16 = *(_DWORD *)(v15 + 4 * v13); if ( v14 ) { if ( !v16 || !sub_863AB0(v14, *(_DWORD **)(v15 + 4 * v13)) || v14[6] != *(_DWORD *)(v16 + 24) ) return 0; v12 = v20; } else if ( v16 ) { return 0; } if ( ++v13 >= v12 ) return 1; v2 = a2; v3 = v18; } } return 1; } } return 0; } if ( a2[16] ) return 0; return 1; } //----- (00864960) -------------------------------------------------------- LONG sub_864960() { _DWORD *v0; // eax _DWORD *v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x44u); if ( v0 ) v1 = sub_863BB0(v0); else v1 = 0; result = dword_BA4770; if ( (_DWORD *)dword_BA4770 != v1 ) { if ( dword_BA4770 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4770; result = InterlockedDecrement((volatile LONG *)(dword_BA4770 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4770 = (int)v1; if ( v1 ) result = InterlockedIncrement(v1 + 1); } return result; } // BA4770: using guessed type int dword_BA4770; //----- (008649C0) -------------------------------------------------------- void sub_8649C0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4770; if ( dword_BA4770 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4770 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4770 = 0; } } // BA4770: using guessed type int dword_BA4770; //----- (00864A00) -------------------------------------------------------- int __thiscall sub_864A00(_DWORD *this, void **a2) { signed int v2; // esi _DWORD *v3; // edi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, void ***, signed int); // eax void (__cdecl *v7)(int, int *, signed int, void ***, signed int); // edx int v8; // ST14_4 int v9; // eax int v10; // ST00_4 int (__cdecl *v11)(int, _DWORD *, signed int, void ***, signed int); // eax int result; // eax int v13; // eax int v14; // ST28_4 void (__cdecl *v15)(int, void ***, signed int, int *, signed int); // eax int v16; // eax int v17; // ST14_4 int (__cdecl *v18)(int, void ***, signed int, int *, signed int); // eax int v19; // eax int v20; // ST28_4 int (__cdecl *v21)(int, void ***, signed int, int *, signed int); // eax int v22; // eax int v23; // ST28_4 int (__cdecl *v24)(int, char *, signed int, int *, signed int); // eax float *v25; // eax int v26; // edx int v27; // [esp+Ch] [ebp-4h] v2 = (signed int)a2; v3 = this; sub_876290(a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, void ***, signed int))(v4 + 4); a2 = (void **)4; v6(v5, &v27, 4, &a2, 1); v3[2] = v27; v7 = *(void (__cdecl **)(int, int *, signed int, void ***, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); a2 = (void **)4; v7(v8, &v27, 4, &a2, 1); v3[3] = v27; v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(int (__cdecl **)(int, _DWORD *, signed int, void ***, signed int))(v9 + 4); a2 = (void **)4; result = v11(v10, v3 + 4, 4, &a2, 1); if ( *(_DWORD *)(v2 + 28) < 0xA030004u ) { v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, void ***, signed int, int *, signed int))(v13 + 4); v27 = 2; v15(v14, &a2, 2, &v27, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(int (__cdecl **)(int, void ***, signed int, int *, signed int))(v16 + 4); v27 = 2; result = v18(v17, &a2, 2, &v27, 1); } if ( *(_DWORD *)(v2 + 28) < 0x4010010u ) { v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(int (__cdecl **)(int, void ***, signed int, int *, signed int))(v19 + 4); v27 = 2; result = v21(v20, &a2, 2, &v27, 1); } if ( *(_DWORD *)(v2 + 28) >= 0xA00010Au ) { v3[5] = 0; v22 = *(_DWORD *)(v2 + 352); v23 = v22; v24 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v22 + 4); v27 = 1; result = v24(v23, (char *)&a2 + 3, 1, &v27, 1); if ( HIBYTE(a2) == 1 ) { v25 = (float *)operator new(0x48u); if ( v25 ) { *(_DWORD *)v25 = dword_BA4828; v26 = dword_BA482C; v25[2] = 0.0; *((_DWORD *)v25 + 1) = v26; v25[3] = 1.0; v25[4] = 1.0; v25[5] = 0.5; v25[6] = 0.5; *((_BYTE *)v25 + 28) = 1; v25[17] = 0.0; v3[5] = v25; result = sub_878FA0((char *)v25, v2); } else { v3[5] = 0; result = sub_878FA0(0, v2); } } } return result; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (00864B90) -------------------------------------------------------- int __thiscall sub_864B90(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, int *, signed int); // eax int v13; // eax int (__cdecl *v14)(int, char *, signed int, int *, signed int); // edx int result; // eax char *v16; // ecx int v17; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; (*(void (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 44))(a2, this[1]); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v4 + 8); v17 = 4; v6(v5, v3 + 2, 4, &v17, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v7 + 8); v17 = 4; v9(v8, v3 + 3, 4, &v17, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v10 + 8); v17 = 4; v12(v11, v3 + 4, 4, &v17, 1); v13 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = v3[5] != 0; v14 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 8); v17 = 1; result = v14(v13, (char *)&a2 + 3, 1, &v17, 1); v16 = (char *)v3[5]; if ( v16 ) result = sub_879020(v16, v2); return result; } //----- (00864C50) -------------------------------------------------------- int __thiscall sub_864C50(_DWORD *this, void **a2) { void **v2; // edi _DWORD *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST3C_4 void (__cdecl *v6)(_DWORD *, _DWORD *, signed int, void ***, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST28_4 void (__cdecl *v9)(_DWORD *, _DWORD *, signed int, void ***, signed int); // eax _DWORD *v10; // eax _DWORD *v11; // ST14_4 void (__cdecl *v12)(_DWORD *, _DWORD *, signed int, void ***, signed int); // eax _DWORD *v13; // eax _DWORD *v14; // ST00_4 void (__cdecl *v15)(_DWORD *, _DWORD *, signed int, void ***, signed int); // eax _DWORD *v16; // eax _DWORD *v17; // ST3C_4 void (__cdecl *v18)(_DWORD *, _DWORD *, signed int, void ***, signed int); // eax _DWORD *v19; // edi int (__cdecl *v20)(_DWORD *, _DWORD *, signed int, void ***, signed int); // edx v2 = a2; v3 = this; sub_864A00(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v4[1]; a2 = (void **)4; v6(v5, v3 + 6, 4, &a2, 1); v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v7[1]; a2 = (void **)4; v9(v8, v3 + 7, 4, &a2, 1); v10 = v2[88]; v11 = v10; v12 = (void (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v10[1]; a2 = (void **)4; v12(v11, v3 + 8, 4, &a2, 1); v13 = v2[88]; v14 = v13; v15 = (void (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v13[1]; a2 = (void **)4; v15(v14, v3 + 9, 4, &a2, 1); v16 = v2[88]; v17 = v16; v18 = (void (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v16[1]; a2 = (void **)4; v18(v17, v3 + 10, 4, &a2, 1); v19 = v2[88]; v20 = (int (__cdecl *)(_DWORD *, _DWORD *, signed int, void ***, signed int))v19[1]; a2 = (void **)4; return v20(v19, v3 + 11, 4, &a2, 1); } //----- (00864D10) -------------------------------------------------------- int __thiscall sub_864D10(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, _DWORD *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, _DWORD *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, _DWORD *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, _DWORD *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, _DWORD *, signed int, signed int *, signed int); // eax int v19; // edi int (__cdecl *v20)(int, _DWORD *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_864B90(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 6, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 7, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 8, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 9, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = v16; v18 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v16 + 8); a2 = 4; v18(v17, v3 + 10, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 356); v20 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v19 + 8); a2 = 4; return v20(v19, v3 + 11, 4, &a2, 1); } //----- (00864DD0) -------------------------------------------------------- int __thiscall sub_864DD0(_DWORD *this, void **a2) { void **v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(void *, _DWORD *, signed int, void ***, signed int); // edx void *v5; // ST00_4 v2 = a2; v3 = this; sub_864A00(this, a2); v4 = (int (__cdecl *)(void *, _DWORD *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v5 = v2[88]; a2 = (void **)4; return v4(v5, v3 + 6, 4, &a2, 1); } //----- (00864E10) -------------------------------------------------------- int __thiscall sub_864E10(_DWORD *this, signed int a2) { signed int v2; // edi _DWORD *v3; // esi int (__cdecl *v4)(int, _DWORD *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_864B90(this, a2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 6, 4, &a2, 1); } //----- (00864E50) -------------------------------------------------------- _DWORD *__thiscall sub_864E50(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi v2 = this; v3 = (void *)*((_DWORD *)this + 5); *(_DWORD *)this = &NiTexturingProperty::Map::`vftable'; operator delete(v3); v4 = v2[1]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( a2 & 1 ) operator delete(v2); return v2; } // A24AE8: using guessed type void *NiTexturingProperty::Map::`vftable'; //----- (00864EB0) -------------------------------------------------------- void __thiscall sub_864EB0(_DWORD *this, int a2, int a3) { int v3; // esi _DWORD *v4; // ebx unsigned int v5; // eax int v6; // edi float *v7; // eax float *v8; // esi int v9; // edi int v10; // ecx int v11; // edx _DWORD *v12; // eax _DWORD *v13; // ebx _DWORD *v14; // eax unsigned int v15; // edi _DWORD *v16; // esi _DWORD *v17; // ebx _DWORD *v18; // ebx _DWORD *v19; // esi unsigned int v20; // [esp+Ch] [ebp-8h] unsigned int v21; // [esp+Ch] [ebp-8h] _DWORD *v22; // [esp+10h] [ebp-4h] unsigned int v23; // [esp+20h] [ebp+Ch] v3 = a2; v4 = this; v22 = this; sub_85FBB0(this, a2, a3); *(_DWORD *)(a2 + 28) = v4[7]; *(_DWORD *)(a2 + 60) = v4[15]; *(_BYTE *)(a2 + 32) = *((_BYTE *)v4 + 32); v5 = 0; v20 = v4[12]; v23 = 0; if ( v20 ) { while ( 1 ) { v6 = 4 * v5; if ( *(_DWORD *)(4 * v5 + v4[10]) ) { if ( v5 != 5 ) { v12 = operator new(0x18u); if ( v12 ) v13 = sub_8639B0(v12, *(_DWORD **)(v4[10] + v6)); else v13 = 0; if ( v23 < *(_DWORD *)(a2 + 44) || (sub_8237A0((_DWORD *)(a2 + 36), v23 + *(_DWORD *)(a2 + 56)), v23 < *(_DWORD *)(a2 + 44)) ) { if ( v23 < *(_DWORD *)(a2 + 48) ) { if ( v13 ) { if ( !*(_DWORD *)(v6 + *(_DWORD *)(a2 + 40)) ) ++*(_DWORD *)(a2 + 52); } else if ( *(_DWORD *)(v6 + *(_DWORD *)(a2 + 40)) ) { --*(_DWORD *)(a2 + 52); } } else { *(_DWORD *)(a2 + 48) = v23 + 1; if ( v13 ) ++*(_DWORD *)(a2 + 52); } *(_DWORD *)(v6 + *(_DWORD *)(a2 + 40)) = v13; } v4 = v22; goto LABEL_33; } v7 = (float *)operator new(0x30u); v8 = v7; if ( v7 ) { v9 = *(_DWORD *)(v4[10] + 20); sub_8639B0(v7, (_DWORD *)v9); *(_DWORD *)v8 = &NiTexturingProperty::BumpMap::`vftable'; v8[6] = *(float *)(v9 + 24); v8[7] = *(float *)(v9 + 28); v8[8] = *(float *)(v9 + 32); v8[9] = *(float *)(v9 + 36); v8[10] = *(float *)(v9 + 40); v8[11] = *(float *)(v9 + 44); } else { v8 = 0; } if ( *(_DWORD *)(a2 + 44) > 5u || (sub_8237A0((_DWORD *)(a2 + 36), *(_DWORD *)(a2 + 56) + 5), *(_DWORD *)(a2 + 44) > 5u) ) { if ( *(_DWORD *)(a2 + 48) > 5u ) { if ( !v8 ) { if ( *(_DWORD *)(*(_DWORD *)(a2 + 40) + 20) ) --*(_DWORD *)(a2 + 52); LABEL_17: *(_DWORD *)(*(_DWORD *)(a2 + 40) + 20) = v8; goto LABEL_33; } v11 = *(_DWORD *)(a2 + 40); if ( *(_DWORD *)(v11 + 20) ) goto LABEL_17; ++*(_DWORD *)(a2 + 52); *(_DWORD *)(v11 + 20) = v8; } else { *(_DWORD *)(a2 + 48) = 6; if ( !v8 ) goto LABEL_17; v10 = *(_DWORD *)(a2 + 40); ++*(_DWORD *)(a2 + 52); *(_DWORD *)(v10 + 20) = v8; } } } LABEL_33: v5 = v23 + 1; v23 = v5; if ( v5 >= v20 ) { v3 = a2; break; } } } if ( v4[16] ) { if ( !*(_DWORD *)(v3 + 64) ) { v14 = operator new(0x18u); if ( v14 ) { *v14 = &NiTArray::`vftable'; v14[2] = 0; v14[5] = 1; v14[3] = 0; v14[4] = 0; v14[1] = 0; } else { v14 = 0; } *(_DWORD *)(v3 + 64) = v14; } v15 = 0; v21 = *(_DWORD *)(v4[16] + 12); if ( v21 ) { do { if ( *(_DWORD *)(*(_DWORD *)(v4[16] + 4) + 4 * v15) ) { v16 = operator new(0x1Cu); if ( v16 ) { v17 = *(_DWORD **)(*(_DWORD *)(v4[16] + 4) + 4 * v15); sub_8639B0(v16, v17); *v16 = &NiTexturingProperty::ShaderMap::`vftable'; v16[6] = v17[6]; v18 = v16; } else { v18 = 0; } v19 = *(_DWORD **)(a2 + 64); if ( v15 < v19[2] || (sub_8237A0(v19, v15 + v19[5]), v15 < v19[2]) ) { if ( v15 < v19[3] ) { if ( v18 ) { if ( !*(_DWORD *)(v19[1] + 4 * v15) ) ++v19[4]; } else if ( *(_DWORD *)(v19[1] + 4 * v15) ) { --v19[4]; } } else { v19[3] = v15 + 1; if ( v18 ) ++v19[4]; } *(_DWORD *)(v19[1] + 4 * v15) = v18; } v4 = v22; } ++v15; } while ( v15 < v21 ); } } } // A249A8: using guessed type void *NiTArray::`vftable'; // A24AF8: using guessed type void *NiTexturingProperty::BumpMap::`vftable'; // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; //----- (00865170) -------------------------------------------------------- unsigned int __thiscall sub_865170(int *this, _DWORD *a2) { int *v2; // ebx char *v3; // eax unsigned int v4; // edi int *v5; // ebx char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi char *v10; // eax unsigned int v11; // edi char *v12; // eax unsigned int v13; // edi char *v14; // eax unsigned int v15; // edi char *v16; // eax unsigned int v17; // edi char *v18; // eax unsigned int v19; // edi char *v20; // eax unsigned int v21; // edi char *v22; // eax unsigned int v23; // edi char *v24; // eax unsigned int v25; // edi char *v26; // eax unsigned int v27; // edi char *v28; // eax unsigned int v29; // edi char *v30; // ebx char *v31; // eax unsigned int v32; // edi char *v33; // ebx char *v34; // eax unsigned int v35; // edi char *v36; // ebx char *v37; // eax unsigned int v38; // edi char *v39; // ebx char *v40; // eax unsigned int v41; // edi char *v42; // ebx unsigned int result; // eax char *v44; // eax unsigned int v45; // edi char *v46; // ebx char *v47; // eax unsigned int v48; // edi char *v49; // ebx char *v50; // eax unsigned int v51; // edi char *v52; // ebx char *v53; // eax unsigned int v54; // edi char *v55; // ebx char *v56; // eax unsigned int v57; // edi char *v58; // ebx char *v59; // eax unsigned int v60; // edi char *v61; // ebx int *v62; // [esp+10h] [ebp-58h] unsigned int v63; // [esp+14h] [ebp-54h] int v64; // [esp+18h] [ebp-50h] int *v65; // [esp+1Ch] [ebp-4Ch] float v66; // [esp+20h] [ebp-48h] char DstBuf; // [esp+24h] [ebp-44h] v2 = this; v62 = this; sub_85FC40(this, (int)a2); v3 = sub_8784D0(*(int *)dword_BA4768); v4 = a2[3]; v63 = (unsigned int)v3; if ( v4 >= a2[2] ) sub_8237A0(a2, v4 + a2[5]); sub_823870(a2, v4, &v63); v63 = v2[12]; v64 = 0; if ( v63 ) { do { v5 = *(int **)(v62[10] + 4 * v64); v65 = v5; if ( v5 ) { switch ( v64 ) { case 1: v6 = sub_878670((int)"MultiTexture Dark Map", v64); v7 = a2[3]; v66 = *(float *)&v6; if ( v7 >= a2[2] ) sub_8237A0(a2, v7 + a2[5]); sub_823870(a2, v7, &v66); break; case 2: v8 = sub_878670((int)"MultiTexture Detail Map", v64); v9 = a2[3]; v66 = *(float *)&v8; if ( v9 >= a2[2] ) sub_8237A0(a2, v9 + a2[5]); sub_823870(a2, v9, &v66); break; case 3: v10 = sub_878670((int)"MultiTexture Gloss Map", v64); v11 = a2[3]; v66 = *(float *)&v10; if ( v11 >= a2[2] ) sub_8237A0(a2, v11 + a2[5]); sub_823870(a2, v11, &v66); break; case 4: v12 = sub_878670((int)"MultiTexture Glow Map", v64); v13 = a2[3]; v66 = *(float *)&v12; if ( v13 >= a2[2] ) sub_8237A0(a2, v13 + a2[5]); sub_823870(a2, v13, &v66); break; case 5: v14 = sub_878670((int)"MultiTexture Bump Map", v64); v15 = a2[3]; v66 = *(float *)&v14; if ( v15 >= a2[2] ) sub_8237A0(a2, v15 + a2[5]); sub_823870(a2, v15, &v66); v66 = *((float *)v5 + 6); v16 = sub_8786B0((int)"m_fLumaScale", v66); v17 = a2[3]; v66 = *(float *)&v16; if ( v17 >= a2[2] ) sub_8237A0(a2, v17 + a2[5]); sub_823870(a2, v17, &v66); v66 = *((float *)v5 + 7); v18 = sub_8786B0((int)"m_fLumaOffset", v66); v19 = a2[3]; v66 = *(float *)&v18; if ( v19 >= a2[2] ) sub_8237A0(a2, v19 + a2[5]); sub_823870(a2, v19, &v66); v66 = *((float *)v5 + 8); v20 = sub_8786B0((int)"m_fBumpMat00", v66); v21 = a2[3]; v66 = *(float *)&v20; if ( v21 >= a2[2] ) sub_8237A0(a2, v21 + a2[5]); sub_823870(a2, v21, &v66); v66 = *((float *)v5 + 9); v22 = sub_8786B0((int)"m_fBumpMat01", v66); v23 = a2[3]; v66 = *(float *)&v22; if ( v23 >= a2[2] ) sub_8237A0(a2, v23 + a2[5]); sub_823870(a2, v23, &v66); v66 = *((float *)v5 + 10); v24 = sub_8786B0((int)"m_fBumpMat10", v66); v25 = a2[3]; v66 = *(float *)&v24; if ( v25 >= a2[2] ) sub_8237A0(a2, v25 + a2[5]); sub_823870(a2, v25, &v66); v66 = *((float *)v5 + 11); v26 = sub_8786B0((int)"m_fBumpMat11", v66); v27 = a2[3]; v66 = *(float *)&v26; if ( v27 >= a2[2] ) sub_8237A0(a2, v27 + a2[5]); sub_823870(a2, v27, &v66); break; default: v28 = sub_878670((int)"MultiTexture Decal Map", v64); v29 = a2[3]; v30 = v28; if ( v29 < a2[2] || (sub_8237A0(a2, v29 + a2[5]), v29 < a2[2]) ) { if ( v29 < a2[3] ) { if ( v30 ) { if ( !*(_DWORD *)(a2[1] + 4 * v29) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v29) ) { --a2[4]; } } else { a2[3] = v29 + 1; if ( v30 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v29) = v30; } break; } sub_7FF6E0(&DstBuf, 0x40u, "m_spTexture "); v31 = sub_878700((int)&DstBuf, v65[1]); v32 = a2[3]; v33 = v31; if ( v32 < a2[2] || (sub_8237A0(a2, v32 + a2[5]), v32 < a2[2]) ) { if ( v32 < a2[3] ) { if ( v33 ) { if ( !*(_DWORD *)(a2[1] + 4 * v32) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v32) ) { --a2[4]; } } else { a2[3] = v32 + 1; if ( v33 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v32) = v33; } sub_7FF6E0(&DstBuf, 0x40u, "m_eClamp "); v34 = sub_8637B0((int)&DstBuf, v65[2]); v35 = a2[3]; v36 = v34; if ( v35 < a2[2] || (sub_8237A0(a2, v35 + a2[5]), v35 < a2[2]) ) { if ( v35 < a2[3] ) { if ( v36 ) { if ( !*(_DWORD *)(a2[1] + 4 * v35) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v35) ) { --a2[4]; } } else { a2[3] = v35 + 1; if ( v36 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v35) = v36; } sub_7FF6E0(&DstBuf, 0x40u, "m_eFilter "); v37 = sub_863860((int)&DstBuf, v65[3]); v38 = a2[3]; v39 = v37; if ( v38 < a2[2] || (sub_8237A0(a2, v38 + a2[5]), v38 < a2[2]) ) { if ( v38 < a2[3] ) { if ( v39 ) { if ( !*(_DWORD *)(a2[1] + 4 * v38) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v38) ) { --a2[4]; } } else { a2[3] = v38 + 1; if ( v39 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v38) = v39; } sub_7FF6E0(&DstBuf, 0x40u, "m_uiTexCoord "); v40 = sub_878670((int)&DstBuf, v65[4]); v41 = a2[3]; v42 = v40; if ( v41 < a2[2] || (sub_8237A0(a2, v41 + a2[5]), v41 < a2[2]) ) { if ( v41 < a2[3] ) { if ( v42 ) { if ( !*(_DWORD *)(a2[1] + 4 * v41) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v41) ) { --a2[4]; } } else { a2[3] = v41 + 1; if ( v42 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v41) = v42; } } ++v64; } while ( v64 < v63 ); } result = v62[16]; if ( result ) { result = *(_DWORD *)(result + 12); v63 = result; v64 = 0; if ( result ) { do { v65 = *(int **)(*(_DWORD *)(v62[16] + 4) + 4 * v64); if ( v65 ) { v44 = sub_878670((int)"Shader Map", v64); v45 = a2[3]; v46 = v44; if ( v45 < a2[2] || (sub_8237A0(a2, v45 + a2[5]), v45 < a2[2]) ) { if ( v45 < a2[3] ) { if ( v46 ) { if ( !*(_DWORD *)(a2[1] + 4 * v45) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v45) ) { --a2[4]; } } else { a2[3] = v45 + 1; if ( v46 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v45) = v46; } v47 = sub_878670((int)"m_uiID", v65[6]); v48 = a2[3]; v49 = v47; if ( v48 < a2[2] || (sub_8237A0(a2, v48 + a2[5]), v48 < a2[2]) ) { if ( v48 < a2[3] ) { if ( v49 ) { if ( !*(_DWORD *)(a2[1] + 4 * v48) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v48) ) { --a2[4]; } } else { a2[3] = v48 + 1; if ( v49 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v48) = v49; } sub_7FF6E0(&DstBuf, 0x40u, "m_spTexture "); v50 = sub_878700((int)&DstBuf, v65[1]); v51 = a2[3]; v52 = v50; if ( v51 < a2[2] || (sub_8237A0(a2, v51 + a2[5]), v51 < a2[2]) ) { if ( v51 < a2[3] ) { if ( v52 ) { if ( !*(_DWORD *)(a2[1] + 4 * v51) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v51) ) { --a2[4]; } } else { a2[3] = v51 + 1; if ( v52 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v51) = v52; } sub_7FF6E0(&DstBuf, 0x40u, "m_eClamp "); v53 = sub_8637B0((int)&DstBuf, v65[2]); v54 = a2[3]; v55 = v53; if ( v54 < a2[2] || (sub_8237A0(a2, v54 + a2[5]), v54 < a2[2]) ) { if ( v54 < a2[3] ) { if ( v55 ) { if ( !*(_DWORD *)(a2[1] + 4 * v54) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v54) ) { --a2[4]; } } else { a2[3] = v54 + 1; if ( v55 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v54) = v55; } sub_7FF6E0(&DstBuf, 0x40u, "m_eFilter "); v56 = sub_863860((int)&DstBuf, v65[3]); v57 = a2[3]; v58 = v56; if ( v57 < a2[2] || (sub_8237A0(a2, v57 + a2[5]), v57 < a2[2]) ) { if ( v57 < a2[3] ) { if ( v58 ) { if ( !*(_DWORD *)(a2[1] + 4 * v57) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v57) ) { --a2[4]; } } else { a2[3] = v57 + 1; if ( v58 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v57) = v58; } sub_7FF6E0(&DstBuf, 0x40u, "m_uiTexCoord "); v59 = sub_878670((int)&DstBuf, v65[4]); v60 = a2[3]; v61 = v59; if ( v60 < a2[2] || (sub_8237A0(a2, v60 + a2[5]), v60 < a2[2]) ) { if ( v60 < a2[3] ) { if ( v61 ) { if ( !*(_DWORD *)(a2[1] + 4 * v60) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v60) ) { --a2[4]; } } else { a2[3] = v60 + 1; if ( v61 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v60) = v61; } } result = v64 + 1; v64 = result; } while ( result < v63 ); } } return result; } //----- (00865A00) -------------------------------------------------------- _DWORD *__thiscall sub_865A00(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x44u); if ( v3 ) { v4 = sub_863BB0(v3); sub_864EB0(v2, (int)v4, a2); result = v4; } else { sub_864EB0(v2, 0, a2); result = 0; } return result; } //----- (00865A50) -------------------------------------------------------- void __thiscall sub_865A50(void *this) { int v1; // esi DWORD v2; // eax v1 = (int)this; EnterCriticalSection(&stru_BA488C); v2 = GetCurrentThreadId(); ++dword_BA48A8; dword_BA48A4 = v2; if ( !dword_BA4878 ) dword_BA4878 = v1; if ( dword_BA487C ) { *(_DWORD *)(dword_BA487C + 48) = v1; *(_DWORD *)(v1 + 44) = dword_BA487C; } else { *(_DWORD *)(v1 + 44) = 0; } dword_BA487C = v1; *(_DWORD *)(v1 + 48) = 0; if ( !--dword_BA48A8 ) dword_BA48A4 = 0; LeaveCriticalSection(&stru_BA488C); } // BA4878: using guessed type int dword_BA4878; // BA487C: using guessed type int dword_BA487C; // BA48A4: using guessed type int dword_BA48A4; // BA48A8: using guessed type int dword_BA48A8; //----- (00865AD0) -------------------------------------------------------- void __thiscall sub_865AD0(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax int v3; // eax int v4; // eax v1 = this; EnterCriticalSection(&stru_BA488C); v2 = GetCurrentThreadId(); ++dword_BA48A8; dword_BA48A4 = v2; if ( (_DWORD *)dword_BA4878 == v1 ) dword_BA4878 = v1[12]; if ( (_DWORD *)dword_BA487C == v1 ) dword_BA487C = v1[11]; v3 = v1[11]; if ( v3 ) *(_DWORD *)(v3 + 48) = v1[12]; v4 = v1[12]; if ( v4 ) *(_DWORD *)(v4 + 44) = v1[11]; if ( !--dword_BA48A8 ) dword_BA48A4 = 0; LeaveCriticalSection(&stru_BA488C); } // BA4878: using guessed type int dword_BA4878; // BA487C: using guessed type int dword_BA487C; // BA48A4: using guessed type int dword_BA48A4; // BA48A8: using guessed type int dword_BA48A8; //----- (00865B50) -------------------------------------------------------- char __thiscall sub_865B50(_BYTE *this) { _BYTE *v1; // esi char result; // al v1 = this; if ( !dword_BA46D0 || (result = (*(int (__stdcall **)(_BYTE *))(*(_DWORD *)dword_BA46D0 + 220))(this)) != 0 ) { if ( byte_BA4774 && *((_DWORD *)v1 + 10) ) { if ( v1[64] ) (*(void (__thiscall **)(_BYTE *))(*(_DWORD *)v1 + 72))(v1); } result = 1; } return result; } // BA46D0: using guessed type int dword_BA46D0; // BA4774: using guessed type char byte_BA4774; //----- (00865B90) -------------------------------------------------------- int __thiscall sub_865B90(int this) { int result; // eax int v2; // ecx if ( *(_DWORD *)(this + 40) ) return (*(int (**)(void))(**(_DWORD **)(this + 40) + 4))(); v2 = *(_DWORD *)(this + 60); if ( v2 ) result = **(_DWORD **)(v2 + 84); else result = 0; return result; } //----- (00865BB0) -------------------------------------------------------- int __thiscall sub_865BB0(int this) { int result; // eax int v2; // ecx if ( *(_DWORD *)(this + 40) ) return (*(int (**)(void))(**(_DWORD **)(this + 40) + 8))(); v2 = *(_DWORD *)(this + 60); if ( v2 ) result = **(_DWORD **)(v2 + 88); else result = 0; return result; } //----- (00865BD0) -------------------------------------------------------- void __thiscall sub_865BD0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = this[15]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } v1[15] = 0; } } //----- (00865C10) -------------------------------------------------------- int __thiscall sub_865C10(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi int v5; // edi v2 = this; sub_872D20(this, a2); result = sub_875B00(a2); if ( result ) { result = sub_875AD0(a2); v4 = v2[15]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[15] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } } return result; } //----- (00865C80) -------------------------------------------------------- void __thiscall sub_865C80(void *this, int a2) { void *v2; // esi DWORD v3; // eax v2 = this; if ( byte_ABD7D8 ) { EnterCriticalSection(&stru_BA4974); v3 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v3; (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 76))(v2); if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); } } // ABD7D8: using guessed type char byte_ABD7D8; // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (00865CE0) -------------------------------------------------------- char __thiscall sub_865CE0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_81A690(this, a2); if ( result ) { v4 = v2[15]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); else result = 1; } return result; } //----- (00865D20) -------------------------------------------------------- char __thiscall sub_865D20(_DWORD *this, int a2) { _DWORD *v2; // edi const char *v3; // eax int v4; // ecx v2 = this; if ( !sub_81A6B0(this, a2) ) return 0; v3 = (const char *)v2[13]; if ( v3 ) { if ( !*(_DWORD *)(a2 + 52) ) return 0; if ( v3 ) goto LABEL_23; } if ( *(_DWORD *)(a2 + 52) ) return 0; if ( v3 ) { LABEL_23: if ( strcmp(v3, *(const char **)(a2 + 52)) ) return 0; } v4 = v2[15]; if ( v4 ) { if ( !*(_DWORD *)(a2 + 60) ) return 0; if ( v4 ) goto LABEL_24; } if ( *(_DWORD *)(a2 + 60) ) return 0; if ( v4 ) { LABEL_24: if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 60)) ) return 0; } if ( v2[7] == *(_DWORD *)(a2 + 28) && v2[9] == *(_DWORD *)(a2 + 36) && v2[8] == *(_DWORD *)(a2 + 32) && *((_BYTE *)v2 + 64) == *(_BYTE *)(a2 + 64) && *((_BYTE *)v2 + 65) == *(_BYTE *)(a2 + 65) ) { return 1; } return 0; } //----- (00865DF0) -------------------------------------------------------- char *sub_865DF0() { return dword_BA4884; } //----- (00865E00) -------------------------------------------------------- char *sub_865E00() { return dword_BA4778; } //----- (00865E10) -------------------------------------------------------- LONG __thiscall sub_865E10(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 int v3; // edi int v4; // edi void (__stdcall ***v5)(signed int); // ecx v1 = this; v2 = (void *)this[13]; *this = &NiSourceTexture::`vftable'; operator delete(v2); operator delete((void *)v1[14]); v3 = v1[15]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[15] = 0; } v4 = v1[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = (void (__stdcall ***)(signed int))v1[10]; *v1 = &NiTexture::`vftable'; if ( v5 ) (**v5)(1); sub_865AD0(v1); return sub_85B2F0(v1); } // A24C6C: using guessed type void *NiTexture::`vftable'; // A24CB4: using guessed type void *NiSourceTexture::`vftable'; //----- (00865EB0) -------------------------------------------------------- _DWORD *__cdecl sub_865EB0(char *Src, int a2, char a3) { _DWORD *v3; // eax _DWORD *v4; // esi unsigned int v5; // kr00_4 char *v6; // eax void *v7; // ecx int v8; // ST04_4 v3 = operator new(0x44u); v4 = v3; if ( v3 ) { sub_85B2B0(v3); *v4 = &NiTexture::`vftable'; v4[7] = 6; v4[8] = 3; v4[9] = 2; v4[10] = 0; sub_865A50(v4); *v4 = &NiSourceTexture::`vftable'; v4[13] = 0; v4[14] = 0; v4[15] = 0; *((_WORD *)v4 + 32) = 1; } else { v4 = 0; } v4[7] = *(_DWORD *)a2; v4[8] = *(_DWORD *)(a2 + 4); v4[9] = *(_DWORD *)(a2 + 8); *((_BYTE *)v4 + 65) = a3; v5 = strlen(Src); v6 = (char *)operator new(v5 + 1); v4[13] = v6; strcpy_s(v6, v5 + 1, Src); v8 = v4[13]; nullsub_6(v7); v4[14] = sub_866A20((char *)v4[13]); if ( !byte_ABD7D8 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 76))(v4) ) return v4; (*(void (__thiscall **)(_DWORD *, signed int))*v4)(v4, 1); return 0; } // A24C6C: using guessed type void *NiTexture::`vftable'; // A24CB4: using guessed type void *NiSourceTexture::`vftable'; // ABD7D8: using guessed type char byte_ABD7D8; //----- (00865FA0) -------------------------------------------------------- _DWORD *__cdecl sub_865FA0(int a1, _DWORD *a2) { _DWORD *v2; // eax _DWORD *v3; // esi int v4; // edi v2 = operator new(0x44u); v3 = v2; if ( v2 ) { sub_85B2B0(v2); *v3 = &NiTexture::`vftable'; v3[7] = 6; v3[8] = 3; v3[9] = 2; v3[10] = 0; sub_865A50(v3); *v3 = &NiSourceTexture::`vftable'; v3[13] = 0; v3[14] = 0; v3[15] = 0; *((_WORD *)v3 + 32) = 1; } else { v3 = 0; } v3[7] = *a2; v3[8] = a2[1]; v3[9] = a2[2]; v4 = v3[15]; if ( v4 != a1 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[15] = a1; if ( a1 ) InterlockedIncrement((volatile LONG *)(a1 + 4)); } if ( !byte_ABD7D8 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 76))(v3) ) return v3; (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); return 0; } // A24C6C: using guessed type void *NiTexture::`vftable'; // A24CB4: using guessed type void *NiSourceTexture::`vftable'; // ABD7D8: using guessed type char byte_ABD7D8; //----- (00866080) -------------------------------------------------------- void __thiscall sub_866080(int *this) { int *v1; // esi int *v2; // edi int v3; // eax int v4; // esi int v5; // [esp+4h] [ebp-4h] v1 = this; if ( this[13] ) { v2 = this + 15; if ( !this[15] ) { v3 = sub_8667C0(); v4 = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 8))(v3, v1[14], *v2); v5 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); if ( *v2 ) { if ( v4 != *v2 ) sub_65AD50(v2, &v5); } else { sub_65AD50(v2, &v5); } if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } } } //----- (00866100) -------------------------------------------------------- _DWORD *sub_866100() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x44u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *v1 = &NiTexture::`vftable'; v1[7] = 6; v1[8] = 3; v1[9] = 2; v1[10] = 0; sub_865A50(v1); v1[13] = 0; v1[14] = 0; *v1 = &NiSourceTexture::`vftable'; v1[15] = 0; *((_WORD *)v1 + 32) = 1; return v1; } // A24C6C: using guessed type void *NiTexture::`vftable'; // A24CB4: using guessed type void *NiSourceTexture::`vftable'; //----- (00866160) -------------------------------------------------------- _DWORD *__thiscall sub_866160(void *this, char a2) { _DWORD *v2; // esi void (__stdcall ***v3)(signed int); // ecx v2 = this; v3 = (void (__stdcall ***)(signed int))*((_DWORD *)this + 10); *v2 = &NiTexture::`vftable'; if ( v3 ) (**v3)(1); sub_865AD0(v2); sub_85B2F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A24C6C: using guessed type void *NiTexture::`vftable'; //----- (008661A0) -------------------------------------------------------- void *__thiscall sub_8661A0(void *this, char a2) { void *v2; // esi v2 = this; sub_865E10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008661D0) -------------------------------------------------------- LONG __thiscall sub_8661D0(int *this, int a2) { int v2; // edi bool v3; // cf int v4; // eax char **v5; // ebx void (__stdcall ***v6)(_DWORD); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, void (__stdcall ****)(signed int), signed int); // eax _DWORD *v10; // ecx char *v11; // ebx int v12; // ebx char *v13; // eax char *v14; // eax int v15; // ST34_4 int v16; // eax int v17; // eax int v18; // ST34_4 int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, int *, signed int, void (__stdcall ****)(signed int), signed int); // eax void (__cdecl *v22)(int, void (__stdcall ****)(signed int), signed int, int *, signed int); // edx int v23; // ST14_4 int v24; // eax int v25; // ST00_4 void (__cdecl *v26)(int, void (__stdcall ****)(signed int), signed int, int *, signed int); // eax unsigned int v27; // eax bool v28; // zf void (__cdecl *v29)(int, char *, signed int, int *, signed int); // edx int v30; // ST28_4 int v31; // esi void (__cdecl *v32)(int, char *, signed int, int *, signed int); // eax LONG result; // eax char v34; // [esp+Eh] [ebp-116h] char v35; // [esp+Fh] [ebp-115h] int v36; // [esp+10h] [ebp-114h] char v37; // [esp+16h] [ebp-10Eh] char v38; // [esp+17h] [ebp-10Dh] void (__stdcall ***v39)(signed int); // [esp+18h] [ebp-10Ch] char Src; // [esp+1Ch] [ebp-108h] v2 = (int)this; sub_872D10(this, (void **)a2); InterlockedIncrement((volatile LONG *)(v2 + 4)); v3 = *(_DWORD *)(a2 + 28) < 0xA000104u; v4 = *(_DWORD *)(a2 + 352); v38 = 0; v39 = (void (__stdcall ***)(signed int))1; if ( !v3 ) { (*(void (__cdecl **)(int, char *, signed int, void (__stdcall ****)(signed int), signed int))(v4 + 4))( v4, &v38, 1, &v39, 1); v5 = (char **)(v2 + 52); sub_8769C0((_DWORD *)a2, (_DWORD *)(v2 + 52)); v10 = (_DWORD *)a2; LABEL_12: sub_8764B0(v10, 1); sub_876290((void **)a2); goto LABEL_13; } (*(void (__cdecl **)(int, char *, signed int, void (__stdcall ****)(signed int), signed int))(v4 + 4))( v4, &v34, 1, &v39, 1); v5 = (char **)(v2 + 52); if ( !v34 ) { *v5 = 0; v7 = *(_DWORD *)(a2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, void (__stdcall ****)(signed int), signed int))(v7 + 4); v39 = (void (__stdcall ***)(signed int))1; v9(v8, &v37, 1, &v39, 1); v10 = (_DWORD *)a2; if ( !v37 ) { sub_8764B0((_DWORD *)a2, 0); goto LABEL_13; } goto LABEL_12; } sub_8769C0((_DWORD *)a2, (_DWORD *)(v2 + 52)); v6 = *(void (__stdcall ****)(_DWORD))(v2 + 60); v39 = v6; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)v6 + 1) && v39 ) (**v39)(1); *(_DWORD *)(v2 + 60) = 0; } v38 = 1; sub_8764B0((_DWORD *)a2, 0); LABEL_13: v11 = *v5; if ( v11 ) *(_DWORD *)(v2 + 56) = sub_866A20(v11); if ( v38 ) { v12 = *(_DWORD *)(a2 + 300); sub_8AA600(*(char **)(a2 + 300), *(char **)(v2 + 56)); (*(void (__thiscall **)(int))(*(_DWORD *)v12 + 4))(v12); v39 = 0; while ( (*(unsigned __int8 (__thiscall **)(int, char *, signed int))(*(_DWORD *)v12 + 8))(v12, &Src, 260) ) { v39 = (void (__stdcall ***)(signed int))sub_875EC0((_DWORD *)a2, (int)&Src, v2); if ( v39 ) goto LABEL_21; } if ( v39 ) { LABEL_21: operator delete(*(void **)(v2 + 56)); v13 = (char *)operator new(0x104u); *(_DWORD *)(v2 + 56) = v13; strcpy_s(v13, 0x104u, &Src); (*(void (__thiscall **)(int, void (__stdcall ***)(signed int)))(*(_DWORD *)a2 + 36))(a2, v39); goto LABEL_31; } (*(void (__thiscall **)(int))(*(_DWORD *)v12 + 4))(v12); if ( (*(unsigned __int8 (__thiscall **)(int, char *, signed int))(*(_DWORD *)v12 + 8))(v12, &Src, 260) ) { while ( !(unsigned __int8)sub_8AA2B0() ) { if ( !(*(unsigned __int8 (__thiscall **)(int, char *, signed int))(*(_DWORD *)v12 + 8))(v12, &Src, 260) ) goto LABEL_31; } operator delete(*(void **)(v2 + 56)); v14 = (char *)operator new(0x104u); *(_DWORD *)(v2 + 56) = v14; strcpy_s(v14, 0x104u, &Src); v15 = *(_DWORD *)(v2 + 56); sub_875EA0((_DWORD **)a2); } } else { v16 = *(_DWORD *)(v2 + 56); if ( v16 ) { v17 = sub_875EC0((_DWORD *)a2, v16, v2); if ( v17 ) { (*(void (__thiscall **)(int, int))(*(_DWORD *)a2 + 36))(a2, v17); } else { v18 = *(_DWORD *)(v2 + 56); sub_875EA0((_DWORD **)a2); } } } LABEL_31: v19 = *(_DWORD *)(a2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, int *, signed int, void (__stdcall ****)(signed int), signed int))(v19 + 4); v39 = (void (__stdcall ***)(signed int))4; v21(v20, &v36, 4, &v39, 1); *(_DWORD *)(v2 + 28) = v36; v22 = *(void (__cdecl **)(int, void (__stdcall ****)(signed int), signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v23 = *(_DWORD *)(a2 + 352); v36 = 4; v22(v23, &v39, 4, &v36, 1); *(_DWORD *)(v2 + 36) = v39; v24 = *(_DWORD *)(a2 + 352); v25 = v24; v26 = *(void (__cdecl **)(int, void (__stdcall ****)(signed int), signed int, int *, signed int))(v24 + 4); v36 = 4; v26(v25, &v39, 4, &v36, 1); *(_DWORD *)(v2 + 32) = v39; v27 = *(_DWORD *)(a2 + 28); if ( v27 >= 0x303000C ) { if ( v27 >= 0x5000001 ) goto LABEL_37; v28 = *(_DWORD *)(v2 + 28) == 5; } else { v28 = *(_DWORD *)(v2 + 28) == 4; } if ( v28 ) *(_DWORD *)(v2 + 28) = 6; LABEL_37: v29 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v30 = *(_DWORD *)(a2 + 352); v36 = 1; v29(v30, &v35, 1, &v36, 1); *(_BYTE *)(v2 + 64) = v35 != 0; if ( *(_DWORD *)(a2 + 28) >= 0xA010067u ) { v31 = *(_DWORD *)(a2 + 352); v32 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v31 + 4); v36 = 1; v32(v31, &v37, 1, &v36, 1); *(_BYTE *)(v2 + 65) = v37 != 0; } result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); return result; } //----- (008665E0) -------------------------------------------------------- int __thiscall sub_8665E0(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST3C_4 void (__cdecl *v9)(int, const char **, signed int, int *, signed int); // eax int v10; // eax int v11; // ST28_4 void (__cdecl *v12)(int, const char **, signed int, int *, signed int); // eax int v13; // eax int v14; // ST14_4 void (__cdecl *v15)(int, const char **, signed int, int *, signed int); // eax int v16; // eax void (__cdecl *v17)(int, char *, signed int, int *, signed int); // edx int v18; // edi int (__cdecl *v19)(int, char *, signed int, int *, signed int); // eax int v21; // [esp+Ch] [ebp-8h] char v22; // [esp+12h] [ebp-2h] char v23; // [esp+13h] [ebp-1h] v2 = a2; v3 = this; sub_81A6A0(this, a2); HIBYTE(a2) = v3[15] == 0; v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v21 = 1; v6(v5, (char *)&a2 + 3, 1, &v21, 1); sub_876A50(v2, v3[13]); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[15]); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v21 = 4; v9(v8, v3 + 7, 4, &v21, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v10 + 8); v21 = 4; v12(v11, v3 + 9, 4, &v21, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v13 + 8); v21 = 4; v15(v14, v3 + 8, 4, &v21, 1); v16 = v2[89]; v23 = *((_BYTE *)v3 + 64); v17 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 8); v21 = 1; v17(v16, &v23, 1, &v21, 1); v18 = v2[89]; v22 = *((_BYTE *)v3 + 65); v19 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v18 + 8); v21 = 1; return v19(v18, &v22, 1, &v21, 1); } //----- (008666E0) -------------------------------------------------------- unsigned int __thiscall sub_8666E0(int *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_873650(this, a2); v3 = sub_8784D0(*(int *)dword_BA4778); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00866730) -------------------------------------------------------- char __thiscall sub_866730(_DWORD *this, int a2) { int v2; // edx int v3; // eax signed int v5; // edi _BYTE *v6; // edx int v7; // eax if ( *(_DWORD *)(a2 + 4) != this[1] ) return 1; if ( *(_BYTE *)a2 != *(_BYTE *)this ) return 1; if ( *(_DWORD *)(a2 + 8) != this[2] ) return 1; if ( *(_BYTE *)(a2 + 1) != *((_BYTE *)this + 1) ) return 1; v2 = *(_DWORD *)(a2 + 12); v3 = this[3]; if ( v2 != v3 && v3 != -1 && v2 != -1 ) return 1; v5 = 0; v6 = (_BYTE *)(a2 + 28); v7 = (int)(this + 5); while ( *(_DWORD *)(a2 - (_DWORD)this + v7) == *(_DWORD *)v7 && *((_DWORD *)v6 - 1) == *(_DWORD *)(v7 + 4) && *v6 == *(_BYTE *)(v7 + 8) && v6[1] == *(_BYTE *)(v7 + 9) ) { ++v5; v6 += 12; v7 += 12; if ( v5 >= 4 ) return 0; } return 1; } //----- (008667C0) -------------------------------------------------------- int sub_8667C0() { return dword_BA4784; } // BA4784: using guessed type int dword_BA4784; //----- (008667D0) -------------------------------------------------------- char *__thiscall sub_8667D0(char *this) { char *v1; // esi v1 = this; *(_DWORD *)this = &NiRefObject::`vftable'; *((_DWORD *)this + 1) = 0; InterlockedIncrement(&Addend); *(_DWORD *)v1 = &NiImageConverter::`vftable'; sub_87EA60(v1 + 8); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A24D18: using guessed type void *NiImageConverter::`vftable'; //----- (00866840) -------------------------------------------------------- char __thiscall sub_866840(_DWORD *this, char *FullPath, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // esi void (__thiscall ***v8)(_DWORD, signed int); // edi bool v9; // zf void (__thiscall *v10)(_DWORD, signed int); // eax void (__thiscall ***v11)(_DWORD, _DWORD); // ecx char Dir; // [esp+1Ch] [ebp-408h] char v14; // [esp+11Fh] [ebp-305h] v7 = this; sub_8A9F60(&Dir, FullPath); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, char *))(v7[2] + 4))(v7 + 2, &v14) ) { v8 = (void (__thiscall ***)(_DWORD, signed int))sub_8AA270(); if ( v8 ) { if ( ((unsigned __int8 (__thiscall *)(void (__thiscall ***)(_DWORD, signed int)))(*v8)[1])(v8) ) { v9 = (*(unsigned __int8 (__thiscall **)(_DWORD *, void (__thiscall ***)(_DWORD, signed int), int, int, int, int, int))(v7[2] + 12))( v7 + 2, v8, a5, a6, a3, a4, a7) == 0; v10 = **v8; v11 = v8; if ( !v9 ) { v10(v8, 1); return 1; } } else { v10 = **v8; v11 = v8; } v10(v11, 1); } } return 0; } //----- (00866940) -------------------------------------------------------- int __thiscall sub_866940(_DWORD *this, char *FullPath, int a3) { _DWORD *v3; // esi int v4; // edi int v5; // esi char Dir; // [esp+Ch] [ebp-408h] char v8; // [esp+10Fh] [ebp-305h] v3 = this; sub_8A9F60(&Dir, FullPath); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, char *))(v3[2] + 4))(v3 + 2, &v8) ) { v4 = sub_8AA270(); if ( v4 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4) ) { v5 = (*(int (__thiscall **)(_DWORD *, int, int))(v3[2] + 8))(v3 + 2, v4, a3); (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( v5 ) return v5; } else { (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } } return 0; } //----- (00866A00) -------------------------------------------------------- char __stdcall sub_866A00(_DWORD *a1, int a2) { return sub_75A550(a1, a2); } //----- (00866A20) -------------------------------------------------------- char *__cdecl sub_866A20(char *Src) { char *v1; // esi char Dir; // [esp+8h] [ebp-408h] char Dst; // [esp+30Bh] [ebp-105h] v1 = (char *)operator new(0x104u); if ( dword_BA4780 ) { sub_8A9F60(&Dir, Src); strcpy_s(&Dst, 0x100u, dword_BA4780); sub_8AA0C0(&Dir, v1, 260); } else { strncpy_s(v1, 0x104u, Src, strlen(Src) + 1); } return v1; } //----- (00866AD0) -------------------------------------------------------- LONG sub_866AD0() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x404u); v1 = (int)v0; if ( v0 ) { *v0 = &NiRefObject::`vftable'; v0[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)v1 = &NiImageConverter::`vftable'; sub_87EA60((char *)(v1 + 8)); } else { v1 = 0; } result = dword_BA4784; if ( dword_BA4784 != v1 ) { if ( dword_BA4784 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4784; result = InterlockedDecrement((volatile LONG *)(dword_BA4784 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4784 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A24D18: using guessed type void *NiImageConverter::`vftable'; // BA4784: using guessed type int dword_BA4784; //----- (00866B60) -------------------------------------------------------- void sub_866B60() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4784; if ( dword_BA4784 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4784 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4784 = 0; } } // BA4784: using guessed type int dword_BA4784; //----- (00866BA0) -------------------------------------------------------- LONG __cdecl sub_866BA0(int a1) { LONG result; // eax int (__thiscall ***v2)(_DWORD, signed int); // esi result = dword_BA4784; if ( dword_BA4784 != a1 ) { if ( dword_BA4784 ) { v2 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4784; result = InterlockedDecrement((volatile LONG *)(dword_BA4784 + 4)); if ( !result ) { if ( v2 ) result = (**v2)(v2, 1); } } dword_BA4784 = a1; if ( a1 ) result = InterlockedIncrement((volatile LONG *)(a1 + 4)); } return result; } // BA4784: using guessed type int dword_BA4784; //----- (00866BF0) -------------------------------------------------------- _DWORD *__thiscall sub_866BF0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiImageConverter::`vftable'; if ( dword_BA4780 ) operator delete(dword_BA4780); dword_BA4780 = 0; sub_87E9B0(v2 + 2); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A24D18: using guessed type void *NiImageConverter::`vftable'; //----- (00866C50) -------------------------------------------------------- _DWORD *__stdcall sub_866C50(int a1, int a2, int a3, int a4) { _DWORD *result; // eax unsigned int v5; // eax unsigned int v6; // esi _DWORD *v7; // ecx _DWORD *v8; // eax _BYTE *v9; // eax _DWORD *v10; // eax unsigned int v11; // [esp+14h] [ebp+Ch] if ( sub_866730((_DWORD *)(a1 + 8), a2) ) return 0; if ( !a3 ) goto LABEL_24; if ( a3 == a1 ) return (_DWORD *)a3; if ( !sub_75A550((_DWORD *)(a3 + 8), a2) || **(_DWORD **)(a3 + 84) != **(_DWORD **)(a1 + 84) || **(_DWORD **)(a3 + 88) != **(_DWORD **)(a1 + 88) || (v5 = *(_DWORD *)(a3 + 96), v11 = v5, v5 > *(_DWORD *)(a1 + 96)) ) { LABEL_24: v10 = operator new(0x70u); if ( v10 ) result = sub_869700(v10, a1); else result = 0; return result; } v6 = 0; if ( v5 ) { do { memcpy_s( (void *)(*(_DWORD *)(*(_DWORD *)(a3 + 92) + 4 * v6) + *(_DWORD *)(a3 + 80)), *(_DWORD *)(*(_DWORD *)(a3 + 92) + 4 * v6 + 4) - *(_DWORD *)(*(_DWORD *)(a3 + 92) + 4 * v6), (const void *)(*(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * v6) + *(_DWORD *)(a1 + 80)), *(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * v6 + 4) - *(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * v6)); ++v6; } while ( v6 < v11 ); } if ( !*(_DWORD *)(a1 + 76) ) return (_DWORD *)a3; v7 = *(_DWORD **)(a3 + 76); if ( v7 ) { sub_875560(v7, *(_DWORD *)(a1 + 76)); return (_DWORD *)a3; } v8 = operator new(0x24u); if ( v8 ) { v9 = sub_875690(v8, *(_DWORD *)(a1 + 76)); sub_75A740((_DWORD *)a3, (int)v9); } else { sub_75A740((_DWORD *)a3, 0); } return (_DWORD *)a3; } //----- (00866D90) -------------------------------------------------------- _DWORD *__thiscall sub_866D90(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9, int a10) { _DWORD *v10; // esi _DWORD *v11; // eax _DWORD *v12; // eax v10 = this; v11 = operator new(0x58u); if ( v11 ) v12 = sub_87EB90(v11, a2, a3, a4, a5, a6, a7, a8, a9, a10); else v12 = 0; sub_8713C0(v10, (int)v12); *v10 = &NiTriShape::`vftable'; return v10; } // A24D34: using guessed type void *NiTriShape::`vftable'; //----- (00866DF0) -------------------------------------------------------- _DWORD *__thiscall sub_866DF0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_8713C0(this, a2); *v2 = &NiTriShape::`vftable'; return v2; } // A24D34: using guessed type void *NiTriShape::`vftable'; //----- (00866E10) -------------------------------------------------------- _DWORD *__thiscall sub_866E10(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8713E0(this); *v1 = &NiTriShape::`vftable'; return v1; } // A24D34: using guessed type void *NiTriShape::`vftable'; //----- (00866E30) -------------------------------------------------------- void __thiscall sub_866E30(_DWORD *this, int a2, _DWORD **a3) { sub_88A6A0(this, a2, a3); } //----- (00866E40) -------------------------------------------------------- _DWORD *sub_866E40() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_8713E0(v0); *v1 = &NiTriShape::`vftable'; return v1; } // A24D34: using guessed type void *NiTriShape::`vftable'; //----- (00866E70) -------------------------------------------------------- char *sub_866E70() { return dword_BA478C; } //----- (00866E80) -------------------------------------------------------- int __thiscall sub_866E80(_DWORD *this, __int16 a2, _DWORD *a3, _DWORD *a4, int *a5) { int v5; // eax int v6; // ecx int v7; // edx int v8; // eax int result; // eax v5 = this[46]; v6 = *(_DWORD *)(v5 + 32); v7 = *(_DWORD *)(v5 + 72); v8 = (unsigned __int16)(3 * a2); *a3 = v6 + 12 * *(unsigned __int16 *)(v7 + 2 * v8); LOWORD(v8) = v8 + 1; *a4 = v6 + 12 * *(unsigned __int16 *)(v7 + 2 * (unsigned __int16)v8); result = v6 + 12 * *(unsigned __int16 *)(v7 + 2 * (unsigned __int16)(v8 + 1)); *a5 = result; return result; } //----- (00866EE0) -------------------------------------------------------- _DWORD *__thiscall sub_866EE0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_8713E0(v3); *v4 = &NiTriShape::`vftable'; sub_88A6A0(v2, (int)v4, a2); result = v4; } else { sub_88A6A0(v2, 0, a2); result = 0; } return result; } // A24D34: using guessed type void *NiTriShape::`vftable'; //----- (00866F40) -------------------------------------------------------- int __thiscall sub_866F40(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; sub_86E250(this, a2); result = 1; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)a2 + 312))(a2, v2); return result; } //----- (00866F80) -------------------------------------------------------- unsigned int __thiscall sub_866F80(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_871490(this, a2); v3 = sub_8784D0(*(int *)dword_BA478C); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00866FD0) -------------------------------------------------------- int __thiscall sub_866FD0(_DWORD *this) { return this[8]; } //----- (00866FE0) -------------------------------------------------------- int __thiscall sub_866FE0(_DWORD *this, int a2) { _DWORD *v2; // esi void (__stdcall ***v3)(signed int); // ecx int result; // eax v2 = this; v3 = (void (__stdcall ***)(signed int))this[8]; if ( v3 ) { (**v3)(1); result = a2; } v2[8] = a2; return result; } //----- (00867010) -------------------------------------------------------- bool __thiscall sub_867010(void *this, int a2) { return sub_85BB20(this, a2) != 0; } //----- (00867030) -------------------------------------------------------- int __thiscall sub_867030(_DWORD *this, int a2) { int v2; // eax int result; // eax v2 = this[a2 + 2]; if ( v2 ) result = *(_DWORD *)(v2 + 8); else result = 0; return result; } //----- (00867050) -------------------------------------------------------- int __thiscall sub_867050(_DWORD *this, int a2) { int v2; // eax int result; // eax v2 = this[a2 + 2]; if ( v2 ) result = *(_DWORD *)(v2 + 12); else result = 0; return result; } //----- (00867070) -------------------------------------------------------- int __thiscall sub_867070(_DWORD *this) { int v1; // eax int result; // eax v1 = this[7]; if ( v1 ) result = *(_DWORD *)(v1 + 8); else result = 0; return result; } //----- (00867080) -------------------------------------------------------- int __thiscall sub_867080(_DWORD *this) { int v1; // eax int result; // eax v1 = this[7]; if ( v1 ) result = *(_DWORD *)(v1 + 12); else result = 0; return result; } //----- (00867090) -------------------------------------------------------- int __thiscall sub_867090(_DWORD *this, int a2) { return this[a2 + 2]; } //----- (008670A0) -------------------------------------------------------- _DWORD *__thiscall sub_8670A0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiRenderTargetGroup::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; return v1; } // A24DCC: using guessed type void *NiRenderTargetGroup::`vftable'; //----- (008670D0) -------------------------------------------------------- char *sub_8670D0() { return dword_BA4794; } //----- (008670E0) -------------------------------------------------------- LONG __thiscall sub_8670E0(_DWORD *this) { _DWORD *v1; // ebx void (__stdcall ***v2)(signed int); // ecx int v3; // esi int v4; // edi int v5; // esi signed int v7; // [esp+Ch] [ebp-4h] v1 = this; v2 = (void (__stdcall ***)(signed int))this[8]; *v1 = &NiRenderTargetGroup::`vftable'; if ( v2 ) (**v2)(1); v3 = v1[7]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (int)(v1 + 6); v7 = 3; do { v5 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); --v7; } while ( v7 >= 0 ); return sub_85BA80(v1); } // A24DCC: using guessed type void *NiRenderTargetGroup::`vftable'; //----- (00867170) -------------------------------------------------------- int __thiscall sub_867170(_DWORD *this, int a2) { int v2; // eax int v3; // ecx int result; // eax v2 = this[a2 + 2]; if ( v2 && (v3 = *(_DWORD *)(v2 + 16)) != 0 ) result = (*(int (**)(void))(*(_DWORD *)v3 + 12))(); else result = 0; return result; } //----- (008671A0) -------------------------------------------------------- int __thiscall sub_8671A0(_DWORD *this) { int v1; // eax int v2; // ecx int result; // eax v1 = this[7]; if ( v1 && (v2 = *(_DWORD *)(v1 + 16)) != 0 ) result = (*(int (**)(void))(*(_DWORD *)v2 + 12))(); else result = 0; return result; } //----- (008671C0) -------------------------------------------------------- char __thiscall sub_8671C0(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi int v4; // esi v3 = this; (*(void (__stdcall **)(_DWORD))(*this + 108))(0); if ( a3 >= v3[6] ) return 0; v4 = v3[a3 + 2]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[a3 + 2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } return 1; } //----- (00867230) -------------------------------------------------------- char __thiscall sub_867230(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; (*(void (__stdcall **)(_DWORD))(*this + 108))(0); v3 = v2[7]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[7] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } return 1; } //----- (00867290) -------------------------------------------------------- int __thiscall sub_867290(_DWORD *this, int a2) { int v2; // eax int result; // eax v2 = this[a2 + 2]; if ( v2 ) result = *(_DWORD *)(v2 + 16); else result = 0; return result; } //----- (008672B0) -------------------------------------------------------- int __thiscall sub_8672B0(_DWORD *this) { int v1; // eax int result; // eax v1 = this[7]; if ( v1 ) result = *(_DWORD *)(v1 + 16); else result = 0; return result; } //----- (008672C0) -------------------------------------------------------- _DWORD *__cdecl sub_8672C0(unsigned int a1, int a2) { _DWORD *result; // eax _DWORD *v3; // eax if ( !a2 ) return 0; if ( (*(int (**)(void))(*(_DWORD *)a2 + 132))() < a1 || a1 > 4 ) return 0; v3 = operator new(0x24u); if ( v3 ) { result = sub_8670A0(v3); result[6] = a1; } else { result = 0; MEMORY[0x18] = a1; } return result; } //----- (00867310) -------------------------------------------------------- _DWORD *__cdecl sub_867310(int a1, int a2, int a3) { _DWORD *v4; // eax _DWORD *v5; // esi void (__thiscall *v6)(_DWORD *, int, _DWORD); // edx if ( !a2 ) return 0; if ( !a1 || (unsigned int)(*(int (**)(void))(*(_DWORD *)a2 + 132))() < 1 ) return 0; v4 = operator new(0x24u); if ( v4 ) v5 = sub_8670A0(v4); else v5 = 0; v6 = *(void (__thiscall **)(_DWORD *, int, _DWORD))(*v5 + 88); v5[6] = 1; v6(v5, a1, 0); if ( a3 ) (*(void (__thiscall **)(_DWORD *, int))(*v5 + 92))(v5, a3); return v5; } //----- (00867380) -------------------------------------------------------- void *__thiscall sub_867380(void *this, char a2) { void *v2; // esi v2 = this; sub_8670E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008673B0) -------------------------------------------------------- unsigned int __thiscall sub_8673B0(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA4794); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00867400) -------------------------------------------------------- _DWORD *__cdecl sub_867400(int *a1, int a2, char a3, char a4) { int v4; // esi v4 = 0; if ( a3 ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 112))(a2); if ( (*(unsigned __int8 (__thiscall **)(int, int *, int))(*(_DWORD *)a2 + 100))(a2, a1, v4) ) { if ( v4 ) return sub_867310((int)a1, a2, v4); } else { v4 = 0; } } if ( a4 ) v4 = sub_87F410(a1, a2); return sub_867310((int)a1, a2, v4); } //----- (00867460) -------------------------------------------------------- bool __cdecl sub_867460(int a1) { bool result; // al if ( a1 ) result = (a1 & (a1 - 1)) == 0; else result = 0; return result; } //----- (00867480) -------------------------------------------------------- int __thiscall sub_867480(_DWORD *this) { return this[13]; } //----- (00867490) -------------------------------------------------------- _DWORD *__thiscall sub_867490(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85B2B0(this); *v1 = &NiTexture::`vftable'; v1[7] = 6; v1[8] = 3; v1[9] = 2; v1[10] = 0; sub_865A50(v1); *v1 = &NiRenderedTexture::`vftable'; v1[13] = 0; return v1; } // A24C6C: using guessed type void *NiTexture::`vftable'; // A24E5C: using guessed type void *NiRenderedTexture::`vftable'; //----- (008674E0) -------------------------------------------------------- void *sub_8674E0() { return &unk_BA479C; } //----- (008674F0) -------------------------------------------------------- int __thiscall sub_8674F0(_DWORD *this) { int v1; // eax int result; // eax v1 = this[13]; if ( v1 ) result = *(_DWORD *)(v1 + 8); else result = 0; return result; } //----- (00867500) -------------------------------------------------------- int __thiscall sub_867500(_DWORD *this) { int v1; // eax int result; // eax v1 = this[13]; if ( v1 ) result = *(_DWORD *)(v1 + 12); else result = 0; return result; } //----- (00867510) -------------------------------------------------------- _DWORD *__cdecl sub_867510(rsize_t a1, int a2, int a3, _DWORD *a4) { _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax int v8; // edi _DWORD *v9; // ebx if ( !a3 ) return 0; if ( (!a1 || (a1 - 1) & a1 || !a2 || (a2 - 1) & a2) && !((*(int (__thiscall **)(int))(*(_DWORD *)a3 + 64))(a3) & 8) && !((*(int (__thiscall **)(int))(*(_DWORD *)a3 + 64))(a3) & 4) ) { return 0; } v5 = operator new(0x38u); if ( v5 ) v6 = sub_867490(v5); else v6 = 0; v6[7] = *a4; v6[8] = a4[1]; v6[9] = a4[2]; v7 = sub_87F690(a1, a2); v8 = v6[13]; v9 = v7; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v6[13] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)a3 + 224))(v6) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return 0; } return v6; } //----- (00867610) -------------------------------------------------------- _DWORD *__thiscall sub_867610(void *this, char a2) { _DWORD *v2; // esi int v3; // edi void (__stdcall ***v4)(signed int); // ecx v2 = this; v3 = *((_DWORD *)this + 13); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (void (__stdcall ***)(signed int))v2[10]; *v2 = &NiTexture::`vftable'; if ( v4 ) (**v4)(1); sub_865AD0(v2); sub_85B2F0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A24C6C: using guessed type void *NiTexture::`vftable'; //----- (00867680) -------------------------------------------------------- int __thiscall sub_867680(int this) { int result; // eax result = *(unsigned __int16 *)(this + 12); *(_BYTE *)(this + 110) = 0; if ( (_WORD)result ) result = sub_86B6C0((float *)(this + 16), result, *(float **)(this + 32)); return result; } //----- (008676A0) -------------------------------------------------------- _DWORD *sub_8676A0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x70u); v1 = v0; if ( !v0 ) return 0; sub_87EBF0(v0); v1[24] = 0; *((_WORD *)v1 + 54) = 0; *((_BYTE *)v1 + 110) = 0; *v1 = &NiScreenElementsData::`vftable'; v1[22] = 0; v1[23] = 0; v1[25] = 0; v1[26] = 0; return v1; } // A24EC4: using guessed type void *NiScreenElementsData::`vftable'; //----- (008676F0) -------------------------------------------------------- bool __thiscall sub_8676F0(_DWORD *this, int a2) { return sub_8A1580(this, a2); } //----- (00867700) -------------------------------------------------------- char __thiscall sub_867700(float **this, int a2) { int v2; // ebx float **v3; // edi int v5; // ecx unsigned int v6; // eax float *v7; // esi int v8; // ecx float *v9; // esi unsigned int v10; // eax int v11; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_87ED20(this, a2) || v3[24] != *(float **)(a2 + 96) || *((_WORD *)v3 + 50) != *(_WORD *)(a2 + 100) || *((_WORD *)v3 + 51) != *(_WORD *)(a2 + 102) || *((_WORD *)v3 + 52) != *(_WORD *)(a2 + 104) || *((_WORD *)v3 + 53) != *(_WORD *)(a2 + 106) || *((_WORD *)v3 + 54) != *(_WORD *)(a2 + 108) ) { return 0; } v5 = *(_DWORD *)(a2 + 88); v11 = *((unsigned __int16 *)v3 + 48); v6 = 8 * v11; v7 = v3[22]; if ( v6 >= 4 ) { while ( *(_DWORD *)v7 == *(_DWORD *)v5 ) { v6 -= 4; v5 += 4; ++v7; if ( v6 < 4 ) goto LABEL_12; } return 0; } LABEL_12: if ( v6 && (*(_BYTE *)v5 != *(_BYTE *)v7 || v6 > 1 && (*(_BYTE *)(v5 + 1) != *((_BYTE *)v7 + 1) || v6 > 2 && *(_BYTE *)(v5 + 2) != *((_BYTE *)v7 + 2))) ) { return 0; } v8 = *(_DWORD *)(v2 + 92); v9 = v3[23]; v10 = 2 * v11; if ( (unsigned int)(2 * v11) >= 4 ) { while ( *(_DWORD *)v9 == *(_DWORD *)v8 ) { v10 -= 4; v8 += 4; ++v9; if ( v10 < 4 ) goto LABEL_21; } return 0; } LABEL_21: if ( v10 ) { if ( *(_BYTE *)v8 != *(_BYTE *)v9 || v10 > 1 && (*(_BYTE *)(v8 + 1) != *((_BYTE *)v9 + 1) || v10 > 2 && *(_BYTE *)(v8 + 2) != *((_BYTE *)v9 + 2)) ) { return 0; } } return 1; } //----- (00867820) -------------------------------------------------------- __int16 __thiscall sub_867820(_WORD *this) { return this[32]; } //----- (00867830) -------------------------------------------------------- char *sub_867830() { return dword_BA47A4; } //----- (00867840) -------------------------------------------------------- void **__thiscall sub_867840(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 22); *(_DWORD *)this = &NiScreenElementsData::`vftable'; operator delete(v3); operator delete(v2[23]); sub_87EDF0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A24EC4: using guessed type void *NiScreenElementsData::`vftable'; //----- (00867880) -------------------------------------------------------- int __thiscall sub_867880(_WORD *this, int a2, int a3, void *Src) { __int16 v4; // dx _WORD *v5; // esi int result; // eax unsigned __int16 v7; // bx unsigned __int16 v8; // ax unsigned __int16 v9; // cx unsigned __int16 v10; // ax unsigned __int16 v11; // ax int v12; // edi unsigned __int16 v13; // ST60_2 void *v14; // ebx char *v15; // ebx _WORD *v16; // edi unsigned __int16 v17; // ax int v18; // ecx __int16 v19; // dx __int16 v20; // cx rsize_t v21; // ST58_4 int v22; // edi void *v23; // eax rsize_t v24; // ebx bool v25; // zf int v26; // eax int v27; // ecx int v28; // edx int v29; // eax float v30; // ST48_4 float v31; // ST4C_4 double v32; // st7 float v33; // ST50_4 char *v34; // eax int v35; // edx int v36; // ecx void *v37; // ebx unsigned __int16 v38; // cx unsigned __int16 v39; // bx rsize_t v40; // edi int v41; // ebx int v42; // eax int v43; // eax int v44; // ecx unsigned __int16 v45; // ST60_2 _WORD *v46; // eax int v47; // ecx _WORD *v48; // [esp+10h] [ebp-10h] char *DstSize; // [esp+14h] [ebp-Ch] unsigned __int16 v50; // [esp+18h] [ebp-8h] unsigned __int16 v51; // [esp+1Ch] [ebp-4h] int v52; // [esp+28h] [ebp+8h] float v53; // [esp+28h] [ebp+8h] int v54; // [esp+28h] [ebp+8h] void *v55; // [esp+28h] [ebp+8h] int v56; // [esp+28h] [ebp+8h] int v57; // [esp+28h] [ebp+8h] float v58; // [esp+2Ch] [ebp+Ch] void *v59; // [esp+2Ch] [ebp+Ch] v4 = a2; v5 = this; if ( (unsigned __int16)a2 < 3u ) return -1; v7 = a3; if ( !(_WORD)a3 ) goto LABEL_45; if ( !Src ) return -1; if ( !(_WORD)a3 ) { LABEL_45: a3 = (unsigned __int16)(a2 - 2); v7 = a2 - 2; } v8 = this[50]; v50 = v8; v9 = v8 + 1; v10 = v5[48]; v5[50] = v9; if ( v9 > v10 ) { v11 = v10 + v5[49]; v12 = v11; v13 = v11; v14 = operator new(8 * v11); memcpy_s(v14, 8 * (unsigned __int16)v5[48], *((const void **)v5 + 22), 8 * (unsigned __int16)v5[48]); operator delete(*((void **)v5 + 22)); *((_DWORD *)v5 + 22) = v14; v15 = (char *)operator new(2 * v12); memcpy_s(v15, 2 * v12, *((const void **)v5 + 23), 2 * (unsigned __int16)v5[48]); memset(&v15[2 * (unsigned __int16)v5[48]], 255, 2 * (v12 - (unsigned __int16)v5[48])); operator delete(*((void **)v5 + 23)); *((_DWORD *)v5 + 23) = v15; v7 = a3; v5[48] = v13; v4 = a2; } v16 = (_WORD *)(*((_DWORD *)v5 + 22) + 8 * v50); *v16 = v4; v16[1] = v5[6]; v16[2] = v7; v16[3] = 3 * v5[32]; v17 = 0; v48 = v16; if ( v5[50] > 0u ) { v18 = *((_DWORD *)v5 + 23); while ( *(_WORD *)(v18 + 2 * v17) != -1 ) { if ( ++v17 >= v5[50] ) goto LABEL_16; } *(_WORD *)(v18 + 2 * v17) = v50; v50 = v17; LABEL_16: v7 = a3; } v5[6] += *v16; v19 = v5[51]; v52 = (unsigned __int16)v5[6] - (unsigned __int16)v5[51]; if ( v52 > 0 ) { v20 = v5[52]; v53 = (double)v52 / (double)(unsigned __int16)v5[52]; v21 = (signed int)(v53 + 0.5); v22 = (unsigned __int16)(v19 + v20 * (v21 + 1)); v51 = v19 + v20 * (v21 + 1); v23 = operator new(12 * v22); v24 = 12 * (unsigned __int16)v5[51]; v54 = (int)v23; memcpy_s(v23, 12 * v22, *((const void **)v5 + 8), 12 * (unsigned __int16)v5[51]); operator delete(*((void **)v5 + 8)); v25 = *((_DWORD *)v5 + 9) == 0; *((_DWORD *)v5 + 8) = v54; if ( !v25 ) { v55 = operator new(12 * v22); memcpy_s(v55, 12 * v22, *((const void **)v5 + 9), v24); operator delete(*((void **)v5 + 9)); v26 = (unsigned __int16)v5[51]; *((_DWORD *)v5 + 9) = v55; if ( (unsigned __int16)v26 < v51 ) { v27 = 12 * v26; v28 = (unsigned __int16)(v51 - v26); do { v29 = *((_DWORD *)v5 + 9); v27 += 12; --v28; v30 = -*(float *)&dword_ABD4A4; v31 = -*(float *)&dword_ABD4A8; v32 = *(float *)&dword_ABD4AC; *(float *)(v29 + v27 - 12) = v30; *(float *)(v29 + v27 - 8) = v31; v33 = -v32; *(float *)(v29 + v27 - 4) = v33; } while ( v28 ); } } if ( *((_DWORD *)v5 + 10) ) { v34 = (char *)operator new(16 * v22); if ( v34 ) { v35 = v22 - 1; if ( v22 - 1 >= 0 ) { v36 = (int)(v34 + 8); do { *(float *)(v36 - 8) = 0.0; v36 += 16; --v35; *(float *)(v36 - 20) = 0.0; *(float *)(v36 - 16) = 0.0; *(float *)(v36 - 12) = 0.0; } while ( v35 >= 0 ); } v37 = v34; } else { v37 = 0; } memcpy_s(v37, 16 * v22, *((const void **)v5 + 10), 16 * (unsigned __int16)v5[51]); operator delete(*((void **)v5 + 10)); *((_DWORD *)v5 + 10) = v37; } v38 = v5[24] & 0x3F; v39 = v38; if ( v38 ) { v56 = v38; DstSize = (char *)operator new(8 * v22 * v38); v40 = 8 * (unsigned __int16)v5[51]; if ( v39 > 0u ) { v41 = 0; do { v42 = 8 * v41 * (unsigned __int16)v5[6]; memcpy_s(&DstSize[v42], v40, (const void *)(v42 + *((_DWORD *)v5 + 11)), v40); ++v41; --v56; } while ( v56 ); } operator delete(*((void **)v5 + 11)); *((_DWORD *)v5 + 11) = DstSize; } v16 = v48; v7 = a3; v5[51] = v51; } v5[32] += v7; v43 = (unsigned __int16)v5[32]; v44 = v7; *((_DWORD *)v5 + 17) += 3 * v7; v57 = 3 * v43 - (unsigned __int16)v5[53]; if ( v57 > 0 ) { v58 = (double)v57 / (double)(unsigned __int16)v5[54]; v45 = v5[53] + v5[54] * ((signed int)(v58 + 0.5) + 1); v59 = operator new(2 * v45); memcpy_s(v59, 2 * v45, *((const void **)v5 + 18), 2 * (unsigned __int16)v5[53]); operator delete(*((void **)v5 + 18)); v5[53] = v45; v44 = v7; *((_DWORD *)v5 + 18) = v59; } v46 = (_WORD *)(*((_DWORD *)v5 + 18) + 2 * (unsigned __int16)v16[3]); if ( Src ) { memcpy_s(v46, 6 * v44, Src, 6 * v44); result = v50; } else { v47 = 0; if ( v7 > 0u ) { do { *v46 = v16[1]; v46[1] = v47 + v16[1] + 1; v46[2] = v47++ + v16[1] + 2; v46 += 3; } while ( (unsigned __int16)v47 < v7 ); } result = v50; } return result; } // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (00867D90) -------------------------------------------------------- int __thiscall sub_867D90(int this) { int v1; // esi int result; // eax v1 = this; result = *(unsigned __int16 *)(this + 100); if ( (_WORD)result ) { memset(*(void **)(this + 88), 0, 8 * result); *(_WORD *)(v1 + 100) = 0; result = 0; *(_WORD *)(v1 + 50) |= 0xFFFu; *(_WORD *)(v1 + 12) = 0; *(_WORD *)(v1 + 64) = 0; *(_BYTE *)(v1 + 110) = 1; } return result; } //----- (00867DE0) -------------------------------------------------------- char __thiscall sub_867DE0(int this, signed int a2, signed int a3, float *a4) { int v4; // eax unsigned __int16 *v5; // eax int v6; // eax char result; // al if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v4 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v4 == -1 ) return 0; v5 = (unsigned __int16 *)(*(_DWORD *)(this + 88) + 8 * v4); if ( a3 < 0 || a3 >= *v5 ) return 0; v6 = 12 * (a3 + v5[1]); *(float *)(v6 + *(_DWORD *)(this + 32)) = *a4; *(float *)(v6 + *(_DWORD *)(this + 32) + 4) = a4[1]; *(float *)(v6 + *(_DWORD *)(this + 32) + 8) = 0.0; result = 1; *(_WORD *)(this + 50) |= 1u; *(_BYTE *)(this + 110) = 1; return result; } //----- (00867E60) -------------------------------------------------------- char __thiscall sub_867E60(int this, int a2, float a3, float a4, float a5, float a6) { int v6; // eax int v7; // edx bool v8; // zf int v9; // eax int v10; // edx double v11; // st7 int v12; // eax char result; // al int v14; // esi int v15; // esi double v16; // st4 double v17; // st5 int v18; // edx float v19; // [esp+8h] [ebp+8h] float v20; // [esp+Ch] [ebp+Ch] if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v6 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v6 == -1 ) return 0; v7 = *(_DWORD *)(this + 88); v8 = *(_WORD *)(v7 + 8 * v6) == 4; v9 = v7 + 8 * v6; if ( !v8 ) return 0; v10 = *(unsigned __int16 *)(v9 + 2); v11 = a3; v20 = a3 + a5; v12 = 12 * v10; v19 = a4 + a6; *(float *)(v12 + *(_DWORD *)(this + 32)) = v11; *(float *)(*(_DWORD *)(this + 32) + v12 + 4) = a4; *(float *)(*(_DWORD *)(this + 32) + v12 + 8) = 0.0; result = 1; v14 = 12 * ++v10; *(float *)(v14 + *(_DWORD *)(this + 32)) = v11; ++v10; *(float *)(*(_DWORD *)(this + 32) + v14 + 4) = v19; *(float *)(*(_DWORD *)(this + 32) + v14 + 8) = 0.0; v15 = 12 * v10; *(float *)(v15 + *(_DWORD *)(this + 32)) = v20; v16 = v19; *(float *)(*(_DWORD *)(this + 32) + v15 + 4) = *(float *)&v16; *(float *)(*(_DWORD *)(this + 32) + v15 + 8) = 0.0; v17 = v20; v18 = 12 * (v10 + 1); *(float *)(v18 + *(_DWORD *)(this + 32)) = *(float *)&v17; *(float *)(*(_DWORD *)(this + 32) + v18 + 4) = a4; *(float *)(*(_DWORD *)(this + 32) + v18 + 8) = 0.0; *(_WORD *)(this + 50) |= 1u; *(_BYTE *)(this + 110) = 1; return result; } //----- (00867F60) -------------------------------------------------------- char __thiscall sub_867F60(int this, signed int a2, float *a3, float *a4, float *a5, float *a6) { int v6; // eax int v7; // edx bool v8; // zf int v9; // eax int v10; // eax int v11; // edx double v12; // st7 int v13; // eax double v14; // st7 char result; // al if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v6 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v6 == -1 ) return 0; v7 = *(_DWORD *)(this + 88); v8 = *(_WORD *)(v7 + 8 * v6) == 4; v9 = v7 + 8 * v6; if ( !v8 ) return 0; v10 = *(unsigned __int16 *)(v9 + 2); v11 = 12 * v10; v12 = *(float *)(12 * v10 + *(_DWORD *)(this + 32)); v13 = 4 * (3 * v10 + 6); *a3 = v12; *a4 = *(float *)(*(_DWORD *)(this + 32) + v11 + 4); *a5 = *(float *)(*(_DWORD *)(this + 32) + v13) - *a3; v14 = *(float *)(*(_DWORD *)(this + 32) + v13 + 4); result = 1; *a6 = v14 - *a4; return result; } //----- (00867FF0) -------------------------------------------------------- char __thiscall sub_867FF0(int this, signed int a2, _DWORD *a3) { int v3; // edx int v4; // eax _WORD *v5; // ebx int v6; // edi int v7; // esi _DWORD *v8; // eax v3 = *(_DWORD *)(this + 40); if ( !v3 ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v4 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v4 == -1 ) return 0; v5 = (_WORD *)(*(_DWORD *)(this + 88) + 8 * v4); if ( !*v5 ) return 0; v6 = v3 + 16 * (unsigned __int16)v5[1]; v7 = 0; if ( *v5 > 0u ) { do { v8 = (_DWORD *)(v6 + 16 * (unsigned __int16)v7); *v8 = *a3; v8[1] = a3[1]; v8[2] = a3[2]; ++v7; v8[3] = a3[3]; } while ( (unsigned __int16)v7 < *v5 ); } *(_WORD *)(this + 50) |= 4u; return 1; } //----- (00868090) -------------------------------------------------------- char __thiscall sub_868090(int this, signed int a2, signed int a3, unsigned __int16 a4, _DWORD *a5) { int v5; // esi int v6; // eax unsigned __int16 *v7; // edi int v8; // eax int v9; // ecx v5 = this; if ( !*(_DWORD *)(this + 44) ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v6 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v6 == -1 ) return 0; v7 = (unsigned __int16 *)(*(_DWORD *)(this + 88) + 8 * v6); if ( a4 >= (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) return 0; v8 = sub_8795A0(this, a4); if ( a3 < 0 || a3 >= *v7 ) return 0; v9 = a3 + v7[1]; *(_DWORD *)(v8 + 8 * v9) = *a5; *(_DWORD *)(v8 + 8 * v9 + 4) = a5[1]; *(_WORD *)(v5 + 50) |= 8u; return 1; } //----- (00868120) -------------------------------------------------------- char __thiscall sub_868120(int this, signed int a2, signed int a3, unsigned __int16 a4, _DWORD *a5) { int v5; // eax unsigned __int16 *v6; // esi int v7; // eax int v8; // ecx if ( !*(_DWORD *)(this + 44) ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v5 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v5 == -1 ) return 0; v6 = (unsigned __int16 *)(*(_DWORD *)(this + 88) + 8 * v5); if ( a4 >= (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) return 0; v7 = sub_8795A0(this, a4); if ( a3 < 0 || a3 >= *v6 ) return 0; v8 = a3 + v6[1]; *a5 = *(_DWORD *)(v7 + 8 * v8); a5[1] = *(_DWORD *)(v7 + 8 * v8 + 4); return 1; } //----- (008681A0) -------------------------------------------------------- char __thiscall sub_8681A0(int this, int a2, int a3, float a4, float a5, float a6, float a7) { int v7; // eax _WORD *v8; // esi int v9; // eax int v10; // ecx float *v11; // eax double v12; // st7 if ( !*(_DWORD *)(this + 44) ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v7 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v7 == -1 ) return 0; v8 = (_WORD *)(*(_DWORD *)(this + 88) + 8 * v7); if ( *v8 != 4 || (unsigned __int16)a3 >= (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) return 0; v9 = sub_8795A0(this, a3); v10 = (unsigned __int16)v8[1]; *(float *)(v9 + 8 * v10) = a4; v11 = (float *)(v9 + 8 * v10); v11[1] = a5; v12 = a5; v11[2] = a4; v11[3] = a7; v11[4] = a6; v11[6] = a6; v11[5] = a7; v11[7] = *(float *)&v12; return 1; } //----- (00868230) -------------------------------------------------------- char __thiscall sub_868230(int this, signed int a2, unsigned __int16 a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7) { int v7; // eax _WORD *v8; // esi _DWORD *v9; // eax if ( !*(_DWORD *)(this + 44) ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v7 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v7 == -1 ) return 0; v8 = (_WORD *)(*(_DWORD *)(this + 88) + 8 * v7); if ( *v8 != 4 || a3 >= (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) return 0; v9 = (_DWORD *)(sub_8795A0(this, a3) + 8 * (unsigned __int16)v8[1]); *v9 = *a4; v9[1] = a4[1]; v9[2] = *a5; v9[3] = a5[1]; v9[4] = *a6; v9[5] = a6[1]; v9[6] = *a7; v9[7] = a7[1]; return 1; } //----- (008682E0) -------------------------------------------------------- char __thiscall sub_8682E0(int this, signed int a2, unsigned __int16 a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7) { int v7; // eax _WORD *v8; // esi int v9; // eax int v10; // ecx int v11; // edx _DWORD *v12; // eax if ( !*(_DWORD *)(this + 44) ) return 0; if ( a2 < 0 ) return 0; if ( a2 >= *(unsigned __int16 *)(this + 96) ) return 0; v7 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2); if ( (_WORD)v7 == -1 ) return 0; v8 = (_WORD *)(*(_DWORD *)(this + 88) + 8 * v7); if ( *v8 != 4 || a3 >= (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) return 0; v9 = sub_8795A0(this, a3); v10 = (unsigned __int16)v8[1]; v11 = *(_DWORD *)(v9 + 8 * v10); v12 = (_DWORD *)(v9 + 8 * v10); *a4 = v11; a4[1] = v12[1]; *a5 = v12[2]; a5[1] = v12[3]; *a6 = v12[4]; a6[1] = v12[5]; *a7 = v12[6]; a7[1] = v12[7]; return 1; } //----- (00868390) -------------------------------------------------------- int __thiscall sub_868390(int this, signed int a2) { int v2; // eax int v3; // edx bool v4; // zf int v5; // eax int result; // eax if ( a2 < 0 || a2 >= *(unsigned __int16 *)(this + 96) || (v2 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2), (_WORD)v2 == -1) || (v3 = *(_DWORD *)(this + 88), v4 = *(_WORD *)(v3 + 8 * v2) == 0, v5 = v3 + 8 * v2, v4) ) { result = 0; } else { result = *(_DWORD *)(this + 32) + 12 * *(unsigned __int16 *)(v5 + 2); } return result; } //----- (008683E0) -------------------------------------------------------- int __thiscall sub_8683E0(int this, signed int a2, unsigned __int16 a3) { int v3; // eax _WORD *v4; // esi int result; // eax if ( *(_DWORD *)(this + 44) && a2 >= 0 && a2 < *(unsigned __int16 *)(this + 96) && (v3 = *(unsigned __int16 *)(*(_DWORD *)(this + 92) + 2 * a2), (_WORD)v3 != -1) && (v4 = (_WORD *)(*(_DWORD *)(this + 88) + 8 * v3), *v4) && a3 < (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) { result = sub_8795A0(this, a3) + 8 * (unsigned __int16)v4[1]; } else { result = 0; } return result; } //----- (00868440) -------------------------------------------------------- _DWORD *__thiscall sub_868440(_DWORD *this, char a2, char a3, unsigned __int16 a4, int a5, int a6, int a7, int a8, int a9, int a10) { _DWORD *v10; // esi unsigned __int16 v11; // ax signed __int16 v12; // cx void *v13; // eax size_t v14; // ST08_4 unsigned __int16 v15; // ax signed __int16 v16; // cx int v17; // ecx float v18; // ST1C_4 float *v19; // eax float v20; // ST20_4 double v21; // st7 float v22; // ST24_4 int v23; // edi char *v24; // eax int v25; // edx int v26; // ecx unsigned __int16 v27; // ax signed __int16 v28; // cx v10 = this; sub_87EBF0(this); v11 = a5; *v10 = &NiScreenElementsData::`vftable'; if ( a5 <= 0 ) v11 = 1; v12 = a6; *((_WORD *)v10 + 48) = v11; if ( a6 <= 0 ) v12 = 1; *((_WORD *)v10 + 49) = v12; *((_WORD *)v10 + 50) = 0; v10[22] = operator new(8 * v11); v13 = operator new(2 * *((unsigned __int16 *)v10 + 48)); v14 = 2 * *((unsigned __int16 *)v10 + 48); v10[23] = v13; memset(v13, 255, v14); v15 = a7; if ( a7 <= 0 ) v15 = 1; v16 = a8; *((_WORD *)v10 + 51) = v15; if ( a8 <= 0 ) v16 = 1; *((_WORD *)v10 + 52) = v16; *((_WORD *)v10 + 6) = 0; v10[8] = operator new(12 * v15); if ( a2 ) { v10[9] = operator new(12 * *((unsigned __int16 *)v10 + 51)); v17 = 0; if ( *((_WORD *)v10 + 51) > 0u ) { do { v18 = -*(float *)&dword_ABD4A4; v19 = (float *)(v10[9] + 12 * (unsigned __int16)v17); v20 = -*(float *)&dword_ABD4A8; ++v17; v21 = *(float *)&dword_ABD4AC; *v19 = v18; v19[1] = v20; v22 = -v21; v19[2] = v22; } while ( (unsigned __int16)v17 < *((_WORD *)v10 + 51) ); } } else { v10[9] = 0; } if ( a3 && (v23 = *((unsigned __int16 *)v10 + 51), (v24 = (char *)operator new(16 * v23)) != 0) ) { v25 = v23 - 1; if ( v23 - 1 >= 0 ) { v26 = (int)(v24 + 8); do { *(float *)(v26 - 8) = 0.0; v26 += 16; --v25; *(float *)(v26 - 20) = 0.0; *(float *)(v26 - 16) = 0.0; *(float *)(v26 - 12) = 0.0; } while ( v25 >= 0 ); } } else { v24 = 0; } v10[10] = v24; if ( a4 <= 0u ) { v10[11] = 0; } else { v10[11] = operator new(8 * a4 * *((unsigned __int16 *)v10 + 51)); *((_WORD *)v10 + 24) ^= ((unsigned __int8)a4 ^ (unsigned __int8)*((_WORD *)v10 + 24)) & 0x3F; } v27 = 3 * a9; if ( a9 <= 0 ) v27 = 3; *((_WORD *)v10 + 53) = v27; v28 = 3 * a10; if ( a10 <= 0 ) v28 = 3; *((_WORD *)v10 + 54) = v28; *((_WORD *)v10 + 32) = 0; v10[17] = 0; v10[18] = operator new(2 * v27); *((_BYTE *)v10 + 110) = 0; return v10; } // A24EC4: using guessed type void *NiScreenElementsData::`vftable'; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; //----- (00868680) -------------------------------------------------------- int __thiscall sub_868680(int *this, signed int a2) { signed int v2; // edi int *v3; // esi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST3C_4 void *v6; // eax int v7; // ST5C_4 int v8; // edx int v9; // eax int v10; // ST20_4 void (__cdecl *v11)(int, int, int, signed int *, signed int); // eax int v12; // eax int v13; // ST10_4 int v14; // ST0C_4 void (__cdecl *v15)(int, int, int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, char *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, int *, signed int, signed int *, signed int); // eax int v22; // eax int v23; // ST14_4 void (__cdecl *v24)(int, char *, signed int, signed int *, signed int); // eax int v25; // eax int v26; // ST00_4 void (__cdecl *v27)(int, int *, signed int, signed int *, signed int); // eax int v28; // eax int v29; // ST3C_4 void (__cdecl *v30)(int, char *, signed int, signed int *, signed int); // eax int v31; // edi int (__cdecl *v32)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_87EEC0(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 2; v4(v5, v3 + 24, 2, &a2, 1); v3[22] = (int)operator new(8 * *((unsigned __int16 *)v3 + 48)); v6 = operator new(2 * *((unsigned __int16 *)v3 + 48)); v7 = *((unsigned __int16 *)v3 + 48); v8 = v3[22]; v3[23] = (int)v6; v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int, int, signed int *, signed int))(v9 + 4); a2 = 8; v11(v10, v8, 8 * v7, &a2, 1); v12 = *(_DWORD *)(v2 + 352); v13 = v3[23]; v14 = v12; v15 = *(void (__cdecl **)(int, int, int, signed int *, signed int))(v12 + 4); a2 = 2; v15(v14, v13, 2 * v7, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 4); a2 = 2; v18(v17, (char *)v3 + 98, 2, &a2, 1); v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v19 + 4); a2 = 2; v21(v20, v3 + 25, 2, &a2, 1); v22 = *(_DWORD *)(v2 + 352); v23 = v22; v24 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v22 + 4); a2 = 2; v24(v23, (char *)v3 + 102, 2, &a2, 1); v25 = *(_DWORD *)(v2 + 352); v26 = v25; v27 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v25 + 4); a2 = 2; v27(v26, v3 + 26, 2, &a2, 1); v28 = *(_DWORD *)(v2 + 352); v29 = v28; v30 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v28 + 4); a2 = 2; v30(v29, (char *)v3 + 106, 2, &a2, 1); v31 = *(_DWORD *)(v2 + 352); v32 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v31 + 4); a2 = 2; return v32(v31, v3 + 27, 2, &a2, 1); } //----- (008687F0) -------------------------------------------------------- int __thiscall sub_8687F0(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST5C_4 int v9; // ST2C_4 int v10; // ST28_4 void (__cdecl *v11)(int, int, int, _DWORD **, signed int); // eax int v12; // eax int v13; // ST18_4 int v14; // ST14_4 void (__cdecl *v15)(int, int, int, _DWORD **, signed int); // eax int v16; // eax int v17; // ST00_4 void (__cdecl *v18)(int, char *, signed int, _DWORD **, signed int); // eax int v19; // eax int v20; // ST3C_4 void (__cdecl *v21)(int, char *, signed int, _DWORD **, signed int); // eax int v22; // eax int v23; // ST28_4 void (__cdecl *v24)(int, char *, signed int, _DWORD **, signed int); // eax int v25; // eax int v26; // ST14_4 void (__cdecl *v27)(int, char *, signed int, _DWORD **, signed int); // eax int v28; // eax int v29; // ST00_4 void (__cdecl *v30)(int, char *, signed int, _DWORD **, signed int); // eax int v31; // edi int (__cdecl *v32)(int, char *, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_87F160(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 96, 2, &a2, 1); v7 = v2[89]; v8 = *((unsigned __int16 *)v3 + 48); v9 = *((_DWORD *)v3 + 22); v10 = v7; v11 = *(void (__cdecl **)(int, int, int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)8; v11(v10, v9, 8 * v8, &a2, 1); v12 = v2[89]; v13 = *((_DWORD *)v3 + 23); v14 = v12; v15 = *(void (__cdecl **)(int, int, int, _DWORD **, signed int))(v12 + 8); a2 = (_DWORD *)2; v15(v14, v13, 2 * v8, &a2, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v16 + 8); a2 = (_DWORD *)2; v18(v17, v3 + 98, 2, &a2, 1); v19 = v2[89]; v20 = v19; v21 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v19 + 8); a2 = (_DWORD *)2; v21(v20, v3 + 100, 2, &a2, 1); v22 = v2[89]; v23 = v22; v24 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v22 + 8); a2 = (_DWORD *)2; v24(v23, v3 + 102, 2, &a2, 1); v25 = v2[89]; v26 = v25; v27 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v25 + 8); a2 = (_DWORD *)2; v27(v26, v3 + 104, 2, &a2, 1); v28 = v2[89]; v29 = v28; v30 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v28 + 8); a2 = (_DWORD *)2; v30(v29, v3 + 106, 2, &a2, 1); v31 = v2[89]; v32 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v31 + 8); a2 = (_DWORD *)2; return v32(v31, v3 + 108, 2, &a2, 1); } //----- (00868920) -------------------------------------------------------- unsigned int __thiscall sub_868920(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // ebx char *v22; // eax unsigned int v23; // edi v2 = (_DWORD *)a2; v3 = this; sub_87F2A0(this, a2); v4 = sub_8784D0(*(int *)dword_BA47A4); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878700((int)"m_akPolygon", *((_DWORD *)v3 + 22)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_ausPIndexer", *((_DWORD *)v3 + 23)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8785F0((int)"m_usMaxPQuantity", v3[48]); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8785F0((int)"m_usPGrowBy", v3[49]); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8785F0((int)"m_usPQuantity", v3[50]); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8785F0((int)"m_usMaxVQuantity", v3[51]); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8785F0((int)"m_usVGrowBy", v3[52]); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_8785F0((int)"m_usMaxIQuantity", v3[53]); v21 = v2[3]; a2 = (int)v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); sub_823870(v2, v21, &a2); v22 = sub_8785F0((int)"m_usIGrowBy", v3[54]); v23 = v2[3]; a2 = (int)v22; if ( v23 >= v2[2] ) sub_8237A0(v2, v23 + v2[5]); return sub_823870(v2, v23, &a2); } //----- (00868B50) -------------------------------------------------------- LONG __thiscall sub_868B50(_DWORD *this) { *this = &NiScreenElements::`vftable'; return sub_871400(this); } // A24FC4: using guessed type void *NiScreenElements::`vftable'; //----- (00868B60) -------------------------------------------------------- int __thiscall sub_868B60(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 116))(); } //----- (00868B70) -------------------------------------------------------- _DWORD *sub_868B70() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_866E10(v0); *v1 = &NiScreenElements::`vftable'; return v1; } // A24FC4: using guessed type void *NiScreenElements::`vftable'; //----- (00868BA0) -------------------------------------------------------- int __thiscall sub_868BA0(int *this, signed int a2) { return sub_87C200(this, a2); } //----- (00868BB0) -------------------------------------------------------- int __thiscall sub_868BB0(_DWORD *this, _DWORD *a2) { return sub_888250(this, a2); } //----- (00868BC0) -------------------------------------------------------- char __thiscall sub_868BC0(_DWORD *this, int a2) { return sub_888260(this, a2); } //----- (00868BD0) -------------------------------------------------------- int __thiscall sub_868BD0(const char **this, signed int a2) { return sub_87C210(this, a2); } //----- (00868BE0) -------------------------------------------------------- char __thiscall sub_868BE0(_DWORD *this, int a2) { return sub_87C220(this, a2); } //----- (00868BF0) -------------------------------------------------------- char *sub_868BF0() { return dword_BA47AC; } //----- (00868C00) -------------------------------------------------------- _DWORD *__thiscall sub_868C00(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_866DF0(this, a2); *v2 = &NiScreenElements::`vftable'; return v2; } // A24FC4: using guessed type void *NiScreenElements::`vftable'; //----- (00868C20) -------------------------------------------------------- void *__thiscall sub_868C20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiScreenElements::`vftable'; sub_871400(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A24FC4: using guessed type void *NiScreenElements::`vftable'; //----- (00868C50) -------------------------------------------------------- _DWORD *__thiscall sub_868C50(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_866E10(v3); *v4 = &NiScreenElements::`vftable'; sub_866E30(v2, (int)v4, a2); result = v4; } else { sub_866E30(v2, 0, a2); result = 0; } return result; } // A24FC4: using guessed type void *NiScreenElements::`vftable'; //----- (00868CB0) -------------------------------------------------------- unsigned int __thiscall sub_868CB0(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_866F80(this, a2); v3 = sub_8784D0(*(int *)dword_BA47AC); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00868D00) -------------------------------------------------------- _DWORD *__thiscall sub_868D00(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiExtraData::`vftable'; v1[2] = 0; return v1; } // A25064: using guessed type void *NiExtraData::`vftable'; //----- (00868D20) -------------------------------------------------------- LONG __thiscall sub_868D20(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 v1 = this; v2 = (void *)this[2]; *this = &NiExtraData::`vftable'; operator delete(v2); v1[2] = 0; return sub_85BA80(v1); } // A25064: using guessed type void *NiExtraData::`vftable'; //----- (00868D50) -------------------------------------------------------- void __thiscall sub_868D50(_DWORD *this) { this[2] = 0; } //----- (00868D60) -------------------------------------------------------- _DWORD *sub_868D60() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xCu); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiExtraData::`vftable'; v1[2] = 0; return v1; } // A25064: using guessed type void *NiExtraData::`vftable'; //----- (00868D90) -------------------------------------------------------- bool __thiscall sub_868D90(void *this, int a2) { return (unsigned __int8)sub_85BA30(this, a2) != 0; } //----- (00868DB0) -------------------------------------------------------- int __thiscall sub_868DB0(const char **this, _DWORD *a2) { const char **v2; // esi v2 = this; nullsub_32(a2); return sub_876A50(a2, v2[2]); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00868DE0) -------------------------------------------------------- bool __thiscall sub_868DE0(const char **this, int a2) { const char **v2; // esi bool result; // al v2 = this; result = sub_85BB20(this, a2); if ( result ) result = strcmp(v2[2], *(const char **)(a2 + 8)) == 0; return result; } //----- (00868E40) -------------------------------------------------------- char *sub_868E40() { return dword_BA47B4; } //----- (00868E50) -------------------------------------------------------- _DWORD *__thiscall sub_868E50(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiExtraData::`vftable'; operator delete(v3); v2[2] = 0; sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A25064: using guessed type void *NiExtraData::`vftable'; //----- (00868E90) -------------------------------------------------------- void __thiscall sub_868E90(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; if ( this[2] ) { operator delete(this[2]); v2[2] = 0; } if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (00868EF0) -------------------------------------------------------- void __thiscall sub_868EF0(void *this, int a2, _DWORD **a3) { void *v3; // esi const char *v4; // edi unsigned int v5; // kr00_4 char *v6; // eax v3 = this; sub_85BB00(this, a2, a3); v4 = (const char *)*((_DWORD *)v3 + 2); if ( *(_DWORD *)(a2 + 8) ) { operator delete(*(void **)(a2 + 8)); *(_DWORD *)(a2 + 8) = 0; } if ( v4 ) { if ( *v4 ) { v5 = strlen(v4); v6 = (char *)operator new(v5 + 1); *(_DWORD *)(a2 + 8) = v6; strcpy_s(v6, v5 + 1, v4); } } } //----- (00868F60) -------------------------------------------------------- void __thiscall sub_868F60(_DWORD *this, _DWORD *a2) { if ( a2[7] < 0x500000Bu ) this[2] = sub_875AD0(a2); } //----- (00868F80) -------------------------------------------------------- char __thiscall sub_868F80(int *this, size_t a2) { void **v2; // esi int *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ST08_4 int (__cdecl *v6)(_DWORD *, size_t *, signed int, int *, signed int); // eax _DWORD *v7; // eax void *v8; // edi void (__cdecl *v9)(void *, void *, size_t, int *, signed int); // edx void *v10; // ST04_4 int v12; // [esp+8h] [ebp-4h] v2 = (void **)a2; v3 = this; sub_85BC50(this, a2); if ( (unsigned int)v2[7] >= 0x500000B ) { LOBYTE(v7) = sub_8769C0(v2, v3 + 2); } else { sub_876290(v2); v4 = v2[88]; v5 = v4; v6 = (int (__cdecl *)(_DWORD *, size_t *, signed int, int *, signed int))v4[1]; v12 = 4; LOBYTE(v7) = v6(v5, &a2, 4, &v12, 1); if ( a2 ) { if ( v3 ) { LOBYTE(v7) = (*(int (__thiscall **)(int *))(*v3 + 4))(v3) == (_DWORD)dword_BA47B4; if ( (_BYTE)v7 ) { v8 = operator new(a2); v9 = (void (__cdecl *)(void *, void *, size_t, int *, signed int))*((_DWORD *)v2[88] + 1); v10 = v2[88]; v12 = 1; v9(v10, v8, a2, &v12, 1); v7 = operator new(0x14u); if ( v7 ) { v7 = sub_460900(v7, a2, (int)v8); if ( v7 ) LOBYTE(v7) = (*((int (__thiscall **)(void **, _DWORD *))*v2 + 9))(v2, v7); } } } } } return (char)v7; } //----- (00869050) -------------------------------------------------------- unsigned int __thiscall sub_869050(_DWORD *this, char *a2) { _DWORD *v2; // ebx char *v3; // eax char *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA47B4); v4 = a2; v5 = *((_DWORD *)a2 + 3); v9 = v3; if ( v5 >= *((_DWORD *)a2 + 2) ) sub_8237A0(a2, v5 + *((_DWORD *)a2 + 5)); sub_823870(v4, v5, &v9); v6 = sub_878740((int)"m_pcName", v2[2]); v7 = *((_DWORD *)v4 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v7 + *((_DWORD *)v4 + 5)); return sub_823870(v4, v7, &a2); } //----- (008690D0) -------------------------------------------------------- char __thiscall sub_8690D0(_DWORD *this, int a2) { unsigned int v3; // eax int v4; // edx int v5; // esi if ( !a2 ) return 0; v3 = this[4]; if ( v3 != *(_DWORD *)(a2 + 16) ) return 0; v4 = *(_DWORD *)(a2 + 12); v5 = this[3]; if ( v3 >= 4 ) { while ( *(_DWORD *)v5 == *(_DWORD *)v4 ) { v3 -= 4; v4 += 4; v5 += 4; if ( v3 < 4 ) goto LABEL_7; } return 0; } LABEL_7: if ( v3 && (*(_BYTE *)v4 != *(_BYTE *)v5 || v3 > 1 && (*(_BYTE *)(v4 + 1) != *(_BYTE *)(v5 + 1) || v3 > 2 && *(_BYTE *)(v4 + 2) != *(_BYTE *)(v5 + 2))) ) { return 0; } return 1; } //----- (00869140) -------------------------------------------------------- _DWORD *sub_869140() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x14u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiBinaryExtraData::`vftable'; v1[4] = 0; v1[3] = 0; return v1; } // 9B3F9C: using guessed type void *NiBinaryExtraData::`vftable'; //----- (00869180) -------------------------------------------------------- _DWORD *__thiscall sub_869180(void *this, _DWORD **a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi void *v5; // eax v2 = this; v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiBinaryExtraData::`vftable'; v4[4] = 0; v4[3] = 0; } else { v4 = 0; } sub_868EF0(v2, (int)v4, a2); if ( *((_DWORD *)v2 + 4) <= 0u ) { v4[4] = 0; v4[3] = 0; } else { v5 = operator new(*((_DWORD *)v2 + 4)); v4[3] = v5; memcpy_s(v5, *((_DWORD *)v2 + 4), *((const void **)v2 + 3), *((_DWORD *)v2 + 4)); v4[4] = *((_DWORD *)v2 + 4); } return v4; } // 9B3F9C: using guessed type void *NiBinaryExtraData::`vftable'; //----- (00869200) -------------------------------------------------------- int __thiscall sub_869200(int *this, size_t a2) { size_t v2; // ebx int *v3; // esi void (__cdecl *v4)(int, int *, signed int, size_t *, signed int); // edx size_t *v5; // edi int v6; // ST04_4 int result; // eax void *v8; // eax size_t v9; // ST08_4 void *v10; // ST04_4 int (__cdecl *v11)(int, void *, size_t, size_t *, signed int); // eax int v12; // ST00_4 v2 = a2; v3 = this; sub_868F80(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, size_t *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = (size_t *)(v3 + 4); v6 = *(_DWORD *)(v2 + 352); a2 = 4; v4(v6, v3 + 4, 4, &a2, 1); result = v3[4]; if ( v3[4] ) { v8 = operator new(*v5); v9 = *v5; v3[3] = (int)v8; v10 = v8; v11 = *(int (__cdecl **)(int, void *, size_t, size_t *, signed int))(*(_DWORD *)(v2 + 352) + 4); v12 = *(_DWORD *)(v2 + 352); a2 = 1; result = v11(v12, v10, v9, &a2, 1); } return result; } //----- (00869270) -------------------------------------------------------- int __thiscall sub_869270(const char **this, _DWORD *a2) { _DWORD *v2; // ebx const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 int result; // eax const char *v7; // edi int v8; // ebx int (__cdecl *v9)(int, const char *, const char *, _DWORD **, signed int); // edx const char *v10; // ST04_4 v2 = a2; v3 = this; sub_868DB0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)4; result = v4(v5, v3 + 4, 4, &a2, 1); v7 = v3[4]; if ( v7 ) { v8 = v2[89]; v9 = *(int (__cdecl **)(int, const char *, const char *, _DWORD **, signed int))(v8 + 8); v10 = v3[3]; a2 = (_DWORD *)1; result = v9(v8, v10, v7, &a2, 1); } return result; } //----- (008692E0) -------------------------------------------------------- unsigned int __thiscall sub_8692E0(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA47BC); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiSize", v3[4]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (00869360) -------------------------------------------------------- _DWORD *__thiscall sub_869360(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiShader::`vftable'; v1[2] = 0; v1[3] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A250D8: using guessed type void *NiShader::`vftable'; //----- (008693A0) -------------------------------------------------------- void *sub_8693A0() { return &unk_BA47C4; } //----- (008693B0) -------------------------------------------------------- LONG __thiscall sub_8693B0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 v1 = this; v2 = (void *)this[2]; *this = &NiShader::`vftable'; operator delete(v2); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A250D8: using guessed type void *NiShader::`vftable'; //----- (008693E0) -------------------------------------------------------- void __thiscall sub_8693E0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[2]); v2[2] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (00869460) -------------------------------------------------------- _DWORD *__thiscall sub_869460(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiShader::`vftable'; operator delete(v3); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A250D8: using guessed type void *NiShader::`vftable'; //----- (008694A0) -------------------------------------------------------- int __thiscall sub_8694A0(const char **this, _DWORD *a2) { const char **v2; // esi _DWORD *v3; // edi int (__cdecl *v4)(int, const char **, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = this; v3 = a2; sub_876A50(a2, this[2]); v4 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v3[89] + 8); v5 = v3[89]; a2 = (_DWORD *)4; return v4(v5, v2 + 3, 4, &a2, 1); } //----- (008694E0) -------------------------------------------------------- int __thiscall sub_8694E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int (__cdecl *v4)(int, _DWORD *, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = this; v3 = a2; sub_8769C0(a2, this + 2); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, _DWORD **, signed int))(v3[88] + 4); v5 = v3[88]; a2 = (_DWORD *)4; return v4(v5, v2 + 3, 4, &a2, 1); } //----- (00869520) -------------------------------------------------------- BOOL __thiscall sub_869520(_DWORD *this) { signed int v1; // eax v1 = this[1]; return v1 >= 4 && v1 <= 6; } //----- (00869540) -------------------------------------------------------- int __thiscall sub_869540(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; nullsub_32(a2); result = sub_875AD0(a2); v4 = v2[19]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[19] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008695A0) -------------------------------------------------------- char __thiscall sub_8695A0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_85BA30(this, a2); if ( result ) { v4 = v2[19]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (008695E0) -------------------------------------------------------- char __thiscall sub_8695E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v4; // ecx unsigned int v5; // ecx int v6; // eax unsigned int v7; // eax int v8; // edi int v9; // esi v2 = this; if ( !sub_85BB20(this, (int)a2) ) return 0; if ( sub_866730(v2 + 2, (int)(a2 + 2)) ) return 0; v4 = v2[19]; if ( v4 ) { if ( !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(a2[19]) ) return 0; } v5 = v2[24]; if ( v5 != a2[24] || v2[25] != a2[25] ) return 0; v6 = 0; if ( v5 ) { while ( *(_DWORD *)(v2[21] + 4 * v6) == *(_DWORD *)(a2[21] - v2[21] + v2[21] + 4 * v6) && *(_DWORD *)(v2[22] + 4 * v6) == *(_DWORD *)(a2[22] + 4 * v6) && *(_DWORD *)(v2[23] + 4 * v6) == *(_DWORD *)(a2[23] + 4 * v6) ) { v5 = v2[24]; if ( ++v6 >= v5 ) goto LABEL_13; } return 0; } LABEL_13: if ( *(_DWORD *)(4 * v2[24] + v2[23]) != *(_DWORD *)(4 * v2[24] + a2[23]) || v2[27] != a2[27] ) return 0; v7 = *(_DWORD *)(v2[23] + 4 * v5); v8 = a2[20]; v9 = v2[20]; if ( v7 >= 4 ) { while ( *(_DWORD *)v9 == *(_DWORD *)v8 ) { v7 -= 4; v8 += 4; v9 += 4; if ( v7 < 4 ) goto LABEL_18; } return 0; } LABEL_18: if ( v7 ) { if ( *(_BYTE *)v8 != *(_BYTE *)v9 || v7 > 1 && (*(_BYTE *)(v8 + 1) != *(_BYTE *)(v9 + 1) || v7 > 2 && *(_BYTE *)(v8 + 2) != *(_BYTE *)(v9 + 2)) ) { return 0; } } return 1; } //----- (008696F0) -------------------------------------------------------- char *sub_8696F0() { return dword_BA47CC; } //----- (00869700) -------------------------------------------------------- _DWORD *__thiscall sub_869700(_DWORD *this, int a2) { _DWORD *v2; // ebx _DWORD *v3; // eax volatile LONG *v4; // eax volatile LONG *v5; // esi int v6; // ecx unsigned int v7; // eax int v8; // edx char *v9; // ecx int v10; // eax int v11; // ST4C_4 rsize_t v12; // esi rsize_t DstSize; // [esp+Ch] [ebp-C8h] rsize_t DstSizea; // [esp+Ch] [ebp-C8h] int v16[16]; // [esp+10h] [ebp-C4h] int v17[16]; // [esp+50h] [ebp-84h] char Src[64]; // [esp+90h] [ebp-44h] v2 = this; sub_85BA50(this); *v2 = &NiPixelData::`vftable'; sub_86A420(v2 + 2); v2[19] = 0; qmemcpy(v2 + 2, (const void *)(a2 + 8), 0x44u); if ( *(_DWORD *)(a2 + 76) ) { v3 = operator new(0x24u); if ( v3 ) { v4 = (volatile LONG *)sub_875690(v3, *(_DWORD *)(a2 + 76)); DstSize = (rsize_t)v4; } else { DstSize = 0; v4 = 0; } v5 = (volatile LONG *)v2[19]; if ( v5 != v4 ) { if ( v5 ) { if ( !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); v4 = (volatile LONG *)DstSize; } v2[19] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } } v6 = *(_DWORD *)(a2 + 96); v2[24] = v6; v2[27] = *(_DWORD *)(a2 + 108); v2[25] = *(_DWORD *)(a2 + 100); v7 = 0; if ( v6 ) { v8 = *(_DWORD *)(a2 + 84) - (_DWORD)Src; DstSizea = *(_DWORD *)(a2 + 88) - (_DWORD)Src; do { v9 = &Src[4 * v7]; *(_DWORD *)v9 = *(_DWORD *)&v9[v8]; v16[v7] = *(_DWORD *)&v9[DstSizea]; v17[v7] = *(_DWORD *)(*(_DWORD *)(a2 + 92) + 4 * v7); ++v7; } while ( v7 < v2[24] ); } v10 = v2[24]; v11 = *(_DWORD *)(*(_DWORD *)(a2 + 92) + 4 * v10); v17[v10] = v11; sub_87F810(v2, v10, v2[27], v11); v12 = 4 * v2[24]; memcpy_s((void *)v2[21], 4 * v2[24], Src, v12); memcpy_s((void *)v2[22], v12, v16, v12); memcpy_s((void *)v2[23], 4 * v2[24] + 4, v17, 4 * v2[24] + 4); memcpy_s((void *)v2[20], v11, *(const void **)(a2 + 80), v11); v2[26] = 1; return v2; } // A250F4: using guessed type void *NiPixelData::`vftable'; // 869700: using guessed type int var_C4[16]; // 869700: using guessed type int var_84[16]; // 869700: using guessed type char Src[64]; //----- (008698C0) -------------------------------------------------------- _DWORD *__thiscall sub_8698C0(_DWORD *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, int a6) { _DWORD *v6; // ebx _DWORD *v7; // eax unsigned int v8; // edx unsigned int v9; // ecx unsigned int v10; // esi signed int v11; // edi unsigned int v12; // eax unsigned int v13; // eax signed int v14; // ecx unsigned int v15; // eax int v16; // edi int v17; // ecx int v18; // edx unsigned int v19; // ecx int v20; // edi int v21; // eax unsigned int v22; // eax BOOL v23; // ecx unsigned int v24; // eax int v25; // edi int v26; // ecx unsigned int v27; // ecx rsize_t v28; // esi unsigned int v30; // [esp+Ch] [ebp-C8h] unsigned int v31; // [esp+Ch] [ebp-C8h] int v32; // [esp+Ch] [ebp-C8h] int v33[16]; // [esp+10h] [ebp-C4h] int Src[16]; // [esp+50h] [ebp-84h] int v35; // [esp+90h] [ebp-44h] int v36[15]; // [esp+94h] [ebp-40h] v6 = this; sub_85BA50(this); *v6 = &NiPixelData::`vftable'; sub_86A420(v6 + 2); v7 = a4; v8 = a2; v6[19] = 0; qmemcpy(v6 + 2, a4, 0x44u); v9 = a5; v10 = a3; if ( !a5 ) { if ( a2 && a3 ) { v11 = 1; v30 = 1; if ( a2 >> 1 ) { v12 = a2 >> 1; do { ++v11; v12 >>= 1; } while ( v12 ); v7 = a4; v30 = v11; } v9 = 1; if ( a3 >> 1 ) { v13 = a3 >> 1; do { ++v9; v13 >>= 1; } while ( v13 ); v7 = a4; } if ( v9 < v30 ) v9 = v30; } else { v9 = 0; } } v6[24] = v9; v6[27] = a6; v14 = v7[1]; v35 = 0; if ( v14 >= 4 && v14 <= 6 ) { v6[25] = 0; v23 = v7[1] != 4; v24 = 0; v32 = 8 * v23 + 8; if ( v6[24] ) { do { v25 = v8; if ( !v8 ) v25 = 1; Src[v24] = v25; v26 = v10; if ( !v10 ) v26 = 1; v33[v24] = v26; v27 = *(&v35 + v24++) + v32 * (((v25 + 3) & 0xFFFFFFFC) * ((v26 + 3) & 0xFFFFFFFC) >> 4); *(&v35 + v24) = v27; v8 >>= 1; v10 >>= 1; } while ( v24 < v6[24] ); } } else { v31 = (unsigned int)*((unsigned __int8 *)v7 + 1) >> 3; v6[25] = v31; if ( v31 ) { v15 = 0; if ( v6[24] ) { do { v16 = v8; if ( !v8 ) v16 = 1; Src[v15] = v16; v17 = v10; if ( !v10 ) v17 = 1; v18 = *(&v35 + v15) + v16 * v17 * v31; v33[v15] = v17; v36[v15] = v18; v8 = a2 >> 1; ++v15; v10 >>= 1; a2 >>= 1; } while ( v15 < v6[24] ); } } else { v19 = 0; if ( v6[24] ) { do { v20 = v8; if ( !v8 ) v20 = 1; Src[v19] = v20; v21 = v10; if ( !v10 ) v21 = 1; v33[v19] = v21; v22 = *(&v35 + v19++) + ((unsigned int)(v20 * v21) >> 1); *(&v35 + v19) = v22; v8 >>= 1; v10 >>= 1; } while ( v19 < v6[24] ); } } } sub_87F810(v6, v6[24], a6, *(&v35 + v6[24])); v28 = 4 * v6[24]; memcpy_s((void *)v6[21], 4 * v6[24], Src, v28); memcpy_s((void *)v6[22], v28, v33, v28); memcpy_s((void *)v6[23], 4 * v6[24] + 4, &v35, 4 * v6[24] + 4); v6[26] = 1; return v6; } // A250F4: using guessed type void *NiPixelData::`vftable'; // 8698C0: using guessed type int Src[16]; // 8698C0: using guessed type int var_C4[16]; // 8698C0: using guessed type int var_40[15]; //----- (00869B20) -------------------------------------------------------- LONG __thiscall sub_869B20(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi v1 = this; *this = &NiPixelData::`vftable'; v2 = (volatile LONG *)this[19]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[19] = 0; } sub_87F860(v1); v3 = (volatile LONG *)v1[19]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); return sub_85BA80(v1); } // A250F4: using guessed type void *NiPixelData::`vftable'; //----- (00869B90) -------------------------------------------------------- _DWORD *sub_869B90() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x70u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiPixelData::`vftable'; sub_86A420(v1 + 2); v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; v1[23] = 0; v1[24] = 0; v1[27] = 0; v1[25] = 0; v1[26] = 1; return v1; } // A250F4: using guessed type void *NiPixelData::`vftable'; //----- (00869BF0) -------------------------------------------------------- void *__thiscall sub_869BF0(void *this, char a2) { void *v2; // esi v2 = this; sub_869B20((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00869C20) -------------------------------------------------------- int __thiscall sub_869C20(int *this, signed int a2) { int *v2; // edi int v3; // eax int v4; // ST30_4 void (__cdecl *v5)(int, int *, signed int, int *, signed int); // eax int v6; // eax int v7; // ST1C_4 void (__cdecl *v8)(int, int *, signed int, int *, signed int); // eax unsigned int v9; // ebx int v10; // eax int v11; // ST30_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int v13; // eax int v14; // ST1C_4 void (__cdecl *v15)(int, char *, signed int, int *, signed int); // eax int v16; // eax int v17; // ST08_4 void (__cdecl *v18)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v19)(int, int *, signed int, int *, signed int); // edx int *v20; // ST34_4 int v21; // ST30_4 int v22; // eax int v23; // ST30_4 void (__cdecl *v24)(int, int *, signed int, int *, signed int); // eax rsize_t v25; // ebx int v26; // esi int (__cdecl *v27)(int, int, int, int *, signed int); // edx int v28; // ST08_4 int v29; // ST04_4 int v31; // [esp+Ch] [ebp-C8h] char v32[64]; // [esp+10h] [ebp-C4h] char Src[64]; // [esp+50h] [ebp-84h] int v34[16]; // [esp+90h] [ebp-44h] v2 = this; sub_85BC50(this, a2); sub_86A6B0((char *)v2 + 8, a2); sub_876290((void **)a2); v3 = *(_DWORD *)(a2 + 352); v4 = v3; v5 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v3 + 4); v31 = 4; v5(v4, v2 + 24, 4, &v31, 1); v6 = *(_DWORD *)(a2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v6 + 4); v31 = 4; v8(v7, v2 + 25, 4, &v31, 1); v9 = 0; if ( v2[24] ) { do { v10 = *(_DWORD *)(a2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 4); v31 = 4; v12(v11, &Src[4 * v9], 4, &v31, 1); v13 = *(_DWORD *)(a2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 4); v31 = 4; v15(v14, &v32[4 * v9], 4, &v31, 1); v16 = *(_DWORD *)(a2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v16 + 4); v31 = 4; v18(v17, &v34[v9++], 4, &v31, 1); } while ( v9 < v2[24] ); } v19 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v20 = &v34[v2[24]]; v21 = *(_DWORD *)(a2 + 352); v31 = 4; v19(v21, v20, 4, &v31, 1); if ( *(_DWORD *)(a2 + 28) >= 0xA030006u ) { v22 = *(_DWORD *)(a2 + 352); v23 = v22; v24 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v22 + 4); v31 = 4; v24(v23, v2 + 27, 4, &v31, 1); } else { v2[27] = 1; } sub_87F810(v2, v2[24], v2[27], v34[v2[24]]); v25 = 4 * v2[24]; memcpy_s((void *)v2[21], 4 * v2[24], Src, v25); memcpy_s((void *)v2[22], v25, v32, v25); memcpy_s((void *)v2[23], 4 * v2[24] + 4, v34, 4 * v2[24] + 4); v26 = *(_DWORD *)(a2 + 352); v27 = *(int (__cdecl **)(int, int, int, int *, signed int))(v26 + 4); v28 = v2[27] * *(_DWORD *)(v2[23] + 4 * v2[24]); v29 = v2[20]; v31 = 1; return v27(v26, v29, v28, &v31, 1); } // 869C20: using guessed type char Src[64]; // 869C20: using guessed type char var_C4[64]; // 869C20: using guessed type int var_44[16]; //----- (00869E40) -------------------------------------------------------- int __thiscall sub_869E40(char *this, unsigned int a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, char *, signed int, unsigned int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, char *, signed int, unsigned int *, signed int); // eax bool v10; // zf int v11; // edx int v12; // eax int v13; // ebx int v14; // eax int v15; // ST18_4 int v16; // ST14_4 void (__cdecl *v17)(int, int, signed int, int *, signed int); // eax int v18; // eax int v19; // ST04_4 int v20; // ST00_4 void (__cdecl *v21)(int, int, signed int, int *, signed int); // eax int v22; // eax int v23; // ST2C_4 int v24; // ST28_4 void (__cdecl *v25)(int, int, signed int, unsigned int *, signed int); // eax int v26; // eax int v27; // ST14_4 void (__cdecl *v28)(int, char *, signed int, unsigned int *, signed int); // eax int v29; // edi int (__cdecl *v30)(int, int, int, unsigned int *, signed int); // eax int v31; // ST08_4 int v32; // ST04_4 int v34; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; nullsub_32(a2); sub_86A940(v3 + 8, (signed int)v2); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 19)); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 96, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 100, 4, &a2, 1); v10 = *((_DWORD *)v3 + 24) == 0; a2 = 0; if ( !v10 ) { do { v11 = *((_DWORD *)v3 + 21); v12 = v2[89]; v34 = 4; v13 = 4 * a2; (*(void (__cdecl **)(int, unsigned int, signed int, int *, signed int))(v12 + 8))(v12, 4 * a2 + v11, 4, &v34, 1); v14 = v2[89]; v15 = v13 + *((_DWORD *)v3 + 22); v16 = v14; v17 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v14 + 8); v34 = 4; v17(v16, v15, 4, &v34, 1); v18 = v2[89]; v19 = v13 + *((_DWORD *)v3 + 23); v20 = v18; v21 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v18 + 8); v34 = 4; v21(v20, v19, 4, &v34, 1); ++a2; } while ( a2 < *((_DWORD *)v3 + 24) ); } v22 = v2[89]; v23 = *((_DWORD *)v3 + 23) + 4 * *((_DWORD *)v3 + 24); v24 = v22; v25 = *(void (__cdecl **)(int, int, signed int, unsigned int *, signed int))(v22 + 8); a2 = 4; v25(v24, v23, 4, &a2, 1); v26 = v2[89]; v27 = v26; v28 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v26 + 8); a2 = 4; v28(v27, v3 + 108, 4, &a2, 1); v29 = v2[89]; v30 = *(int (__cdecl **)(int, int, int, unsigned int *, signed int))(v29 + 8); v31 = *((_DWORD *)v3 + 27) * *(_DWORD *)(*((_DWORD *)v3 + 23) + 4 * *((_DWORD *)v3 + 24)); v32 = *((_DWORD *)v3 + 20); a2 = 1; return v30(v29, v32, v31, &a2, 1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00869FA0) -------------------------------------------------------- unsigned int __thiscall sub_869FA0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA47CC); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"Width", **((_DWORD **)v3 + 21)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"Height", **((_DWORD **)v3 + 22)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878670((int)"m_uiMipmapLevels", *((_DWORD *)v3 + 24)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_878670((int)"m_uiFaces", *((_DWORD *)v3 + 27)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_878670( (int)"TotalSizeInBytes", *((_DWORD *)v3 + 27) * *(_DWORD *)(*((_DWORD *)v3 + 23) + 4 * *((_DWORD *)v3 + 24))); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878670((int)"FaceSizeInBytes", *(_DWORD *)(*((_DWORD *)v3 + 23) + 4 * *((_DWORD *)v3 + 24))); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (0086A140) -------------------------------------------------------- void *__thiscall sub_86A140(void *this, const void *a2) { void *result; // eax result = this; qmemcpy(this, a2, 0x44u); return result; } //----- (0086A160) -------------------------------------------------------- char __thiscall sub_86A160(_DWORD *this, int a2, char a3, int *a4) { char result; // al _DWORD *v5; // edi int v6; // ecx result = a3; v5 = this; *((_BYTE *)this + 1) = a3; this[1] = a2; this[3] = -1; this[4] = 0; *(_BYTE *)this = 1; this[2] = 0; switch ( a2 ) { case 0: if ( a3 == 16 ) { result = (char)a4; if ( *a4 != 63488 || a4[1] != 2016 || a4[2] != 31 || a4[3] ) goto LABEL_19; qmemcpy(this, &unk_ABE0B8, 0x44u); } else { if ( a3 != 24 ) goto LABEL_19; result = (char)a4; if ( *a4 != 255 || a4[1] != 65280 || a4[2] != 16711680 || a4[3] ) { if ( *a4 != 16711680 || a4[1] != 65280 || a4[2] != 255 || a4[3] ) goto LABEL_19; qmemcpy(this, &unk_ABE268, 0x44u); } else { qmemcpy(this, &unk_ABDB18, 0x44u); } } return result; case 1: if ( a3 == 16 ) { result = (char)a4; v6 = *a4; if ( *a4 == 31 && a4[1] == 992 && a4[2] == 31744 && a4[3] == 0x8000 ) { qmemcpy(v5, &unk_ABDB60, 0x44u); return result; } if ( v6 == 31744 && a4[1] == 992 && a4[2] == 31 && a4[3] == 0x8000 ) { qmemcpy(v5, &unk_ABDBA8, 0x44u); return result; } if ( v6 == 3840 && a4[1] == 240 && a4[2] == 15 && a4[3] == 61440 ) { qmemcpy(v5, &unk_ABE1D8, 0x44u); return result; } LABEL_19: v5[1] = 16; return result; } if ( a3 != 32 ) goto LABEL_19; result = (char)a4; if ( *a4 != 16711680 || a4[1] != 65280 || a4[2] != 255 || a4[3] != -16777216 ) qmemcpy(this, &unk_ABDAD0, 0x44u); else qmemcpy(this, &unk_ABE2B0, 0x44u); return result; case 2: if ( a3 != 8 ) goto LABEL_52; qmemcpy(this, &unk_ABDA40, 0x44u); return result; case 3: if ( a3 != 8 ) goto LABEL_52; qmemcpy(this, &unk_ABDA88, 0x44u); return result; case 4: qmemcpy(this, &unk_ABDC80, 0x44u); return result; case 5: qmemcpy(this, &unk_ABDCC8, 0x44u); return result; case 6: qmemcpy(this, &unk_ABDD10, 0x44u); return result; case 8: qmemcpy(this, &unk_ABDBF0, 0x44u); return result; case 9: qmemcpy(this, &unk_ABDC38, 0x44u); return result; default: LABEL_52: this[1] = 16; return result; } } //----- (0086A420) -------------------------------------------------------- _DWORD *__thiscall sub_86A420(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 2; this[3] = -1; this[4] = 0; *(_WORD *)this = 2049; this[2] = 0; this[5] = 16; this[6] = 3; *((_WORD *)this + 14) = 264; this[8] = 19; this[9] = 5; *((_WORD *)this + 20) = 256; this[11] = 19; this[12] = 5; *((_WORD *)this + 26) = 256; this[14] = 19; this[15] = 5; *((_WORD *)this + 32) = 256; return result; } //----- (0086A490) -------------------------------------------------------- _DWORD *__cdecl sub_86A490(_DWORD *a1, char a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // edx char v7; // cl unsigned int v8; // eax unsigned int v9; // ecx char v10; // al unsigned int v11; // ecx char v12; // al char v13; // cl unsigned int v14; // eax signed int v15; // esi int v16; // edi char *v17; // ecx char *v18; // eax unsigned int v19; // edi char v20; // dl int v21; // ST10_4 int v22; // ebx unsigned int v23; // eax int v24; // ecx int v25; // esi char v26; // cl int v27; // esi char v28; // cl int v29; // esi char v30; // cl int v31; // esi _WORD *v32; // ecx char v34; // [esp+18h] [ebp-28h] char v35; // [esp+19h] [ebp-27h] char v36; // [esp+1Ah] [ebp-26h] char v37; // [esp+1Bh] [ebp-25h] int v38; // [esp+1Ch] [ebp-24h] int v39; // [esp+20h] [ebp-20h] int v40; // [esp+24h] [ebp-1Ch] int v41; // [esp+28h] [ebp-18h] int v42; // [esp+2Ch] [ebp-14h] int v43; // [esp+30h] [ebp-10h] int v44; // [esp+34h] [ebp-Ch] int v45; // [esp+38h] [ebp-8h] sub_86A420(a1); v7 = 0; *((_BYTE *)v6 + 1) = a2; *(_BYTE *)v6 |= 1u; v6[3] = -1; v6[2] = 0; v38 = 0; v6[1] = a6 != 0; v8 = a3; v42 = a3; if ( a3 ) { do { v7 += v8 & 1; v8 >>= 1; } while ( v8 ); } v34 = v7; v9 = a4; v10 = 0; v43 = a4; v39 = 1; if ( a4 ) { do { v10 += v9 & 1; v9 >>= 1; } while ( v9 ); } v11 = a5; v35 = v10; v12 = 0; v44 = a5; v40 = 2; if ( a5 ) { do { v12 += v11 & 1; v11 >>= 1; } while ( v11 ); } v13 = 0; v36 = v12; v45 = a6; v41 = 3; v14 = a6; if ( a6 ) { do { v13 += v14 & 1; v14 >>= 1; } while ( v14 ); } v37 = v13; v15 = 0; v16 = 4 - (_DWORD)&v42; do { if ( *(&v42 + v15) && v15 < 2 ) { v17 = &v35 + v15; v18 = (char *)&v42 + 4 * v15 + v16; do { v19 = *(int *)((char *)&v42 + (_DWORD)v18); if ( *(&v42 + v15) > v19 ) { v20 = *v17; v21 = *(int *)((char *)&v38 + (_DWORD)v18); *(int *)((char *)&v42 + (_DWORD)v18) = *(&v42 + v15); *v17 = *(&v34 + v15); v22 = *(&v38 + v15); *(&v34 + v15) = v20; *(int *)((char *)&v38 + (_DWORD)v18) = v22; *(&v38 + v15) = v21; v6 = a1; *(&v42 + v15) = v19; } v18 += 4; ++v17; } while ( (signed int)v18 < 12 ); v16 = 4 - (_DWORD)&v42; } ++v15; } while ( v15 < 3 ); v23 = 0; if ( v42 ) { v24 = v38; *((_BYTE *)v6 + 28) = v34; *((_BYTE *)v6 + 29) = 1; v6[6] = 0; v6[5] = v24; v23 = 1; } if ( v43 ) { v25 = (int)&v6[3 * v23]; v26 = v35; *(_BYTE *)(v25 + 29) = 1; *(_BYTE *)(v25 + 28) = v26; v6[3 * v23 + 6] = 0; *(_DWORD *)(v25 + 20) = v39; ++v23; } if ( v44 ) { v27 = (int)&v6[3 * v23]; v28 = v36; *(_BYTE *)(v27 + 29) = 1; *(_BYTE *)(v27 + 28) = v28; v6[3 * v23 + 6] = 0; *(_DWORD *)(v27 + 20) = v40; ++v23; } if ( v45 ) { v29 = (int)&v6[3 * v23]; v30 = v37; *(_BYTE *)(v29 + 29) = 1; *(_BYTE *)(v29 + 28) = v30; v6[3 * v23 + 6] = 0; *(_DWORD *)(v29 + 20) = v41; ++v23; } if ( v23 < 4 ) { v31 = 4 - v23; v32 = &v6[3 * v23 + 7]; do { *v32 = 256; *((_DWORD *)v32 - 1) = 5; *((_DWORD *)v32 - 2) = 19; v32 += 6; --v31; } while ( v31 ); } return v6; } //----- (0086A6B0) -------------------------------------------------------- char __thiscall sub_86A6B0(char *this, int a2) { int v2; // eax char *v3; // edi int v4; // ST3C_4 void (__cdecl *v5)(int, char **, signed int, int *, signed int); // eax int v6; // eax int v7; // ST3C_4 void (__cdecl *v8)(int, char *, signed int, int *, signed int); // eax int v9; // eax int v10; // ST3C_4 void (__cdecl *v11)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v12)(int, int *, signed int, int *, signed int); // edx int v13; // ST28_4 int v14; // eax int v15; // ST14_4 void (__cdecl *v16)(int, int *, signed int, int *, signed int); // eax int v17; // esi void (__cdecl *v18)(int, int *, signed int, int *, signed int); // eax char result; // al int v20; // ST3C_4 void (__cdecl *v21)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v22)(int, char *, signed int, int *, signed int); // edx int v23; // ST28_4 int v24; // eax int v25; // ST14_4 void (__cdecl *v26)(int, char *, signed int, int *, signed int); // eax int v27; // eax int v28; // ST00_4 void (__cdecl *v29)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v30)(int, char *, signed int, int *, signed int); // edx int v31; // ST3C_4 int v32; // eax int v33; // ST28_4 void (__cdecl *v34)(int, int *, signed int, int *, signed int); // eax int v35; // edi void (__cdecl *v36)(int, int *, signed int, int *, signed int); // edx int v37; // ST3C_4 int v38; // eax int v39; // ST28_4 void (__cdecl *v40)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v41)(int, int, signed int, int *, signed int); // edx int v42; // ST14_4 int v43; // eax int v44; // ST00_4 int (__cdecl *v45)(int, char *, signed int, int *, signed int); // eax char *v46; // [esp+Ch] [ebp-2Ch] char v47; // [esp+13h] [ebp-25h] int v48; // [esp+14h] [ebp-24h] int v49; // [esp+18h] [ebp-20h] int v50; // [esp+1Ch] [ebp-1Ch] int v51; // [esp+20h] [ebp-18h] char v52; // [esp+24h] [ebp-14h] v2 = *(_DWORD *)(a2 + 352); v3 = this; if ( *(_DWORD *)(a2 + 28) >= 0xA030003u ) { v20 = *(_DWORD *)(a2 + 352); v21 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v51 = 4; v21(v20, &v48, 4, &v51, 1); *((_DWORD *)v3 + 1) = v48; v22 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v23 = *(_DWORD *)(a2 + 352); v51 = 1; v22(v23, v3 + 1, 1, &v51, 1); v24 = *(_DWORD *)(a2 + 352); v25 = v24; v26 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v24 + 4); v51 = 4; v26(v25, v3 + 12, 4, &v51, 1); v27 = *(_DWORD *)(a2 + 352); v28 = v27; v29 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v27 + 4); v51 = 4; v29(v28, v3 + 16, 4, &v51, 1); v30 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v31 = *(_DWORD *)(a2 + 352); v51 = 1; v30(v31, v3, 1, &v51, 1); v32 = *(_DWORD *)(a2 + 352); v33 = v32; v34 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v32 + 4); v51 = 4; v34(v33, &v48, 4, &v51, 1); *((_DWORD *)v3 + 2) = v48; v35 = (int)(v3 + 24); v49 = 4; do { v36 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v37 = *(_DWORD *)(a2 + 352); v51 = 4; v36(v37, &v48, 4, &v51, 1); *(_DWORD *)(v35 - 4) = v48; v38 = *(_DWORD *)(a2 + 352); v39 = v38; v40 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v38 + 4); v51 = 4; v40(v39, &v50, 4, &v51, 1); *(_DWORD *)v35 = v50; v41 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v42 = *(_DWORD *)(a2 + 352); v51 = 1; v41(v42, v35 + 4, 1, &v51, 1); v43 = *(_DWORD *)(a2 + 352); v44 = v43; v45 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v43 + 4); v51 = 1; result = v45(v44, &v47, 1, &v51, 1); *(_BYTE *)(v35 + 5) = v47 != 0; v35 += 12; --v49; } while ( v49 ); } else { v4 = *(_DWORD *)(a2 + 352); v5 = *(void (__cdecl **)(int, char **, signed int, int *, signed int))(v2 + 4); v49 = 4; v5(v4, &v46, 4, &v49, 1); *((_DWORD *)v3 + 1) = v46; v46 = &v52; v49 = 4; do { v6 = *(_DWORD *)(a2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v6 + 4); v50 = 4; v8(v7, v46, 4, &v50, 1); v46 += 4; --v49; } while ( v49 ); v9 = *(_DWORD *)(a2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v9 + 4); v50 = 4; v11(v10, &v48, 4, &v50, 1); v3[1] = v48; v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v13 = *(_DWORD *)(a2 + 352); v50 = 4; v12(v13, &v51, 4, &v50, 1); v14 = *(_DWORD *)(a2 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v14 + 4); v50 = 4; v16(v15, &v51, 4, &v50, 1); if ( *(_DWORD *)(a2 + 28) >= 0xA00010Bu ) { v17 = *(_DWORD *)(a2 + 352); v18 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v17 + 4); v50 = 4; v18(v17, &v49, 4, &v50, 1); } result = sub_86A160(v3, *((_DWORD *)v3 + 1), v3[1], (int *)&v52); } return result; } //----- (0086A940) -------------------------------------------------------- int __thiscall sub_86A940(char *this, signed int a2) { signed int v2; // esi int v3; // eax char *v4; // edi int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax void (__cdecl *v16)(int, char *, signed int, signed int *, signed int); // edx int v17; // ST3C_4 int v18; // eax int v19; // ST28_4 void (__cdecl *v20)(int, char *, signed int, signed int *, signed int); // eax int v21; // edi int v22; // eax int v23; // ST3C_4 void (__cdecl *v24)(int, int, signed int, int *, signed int); // eax void (__cdecl *v25)(int, int, signed int, int *, signed int); // edx int v26; // ST28_4 int v27; // eax int v28; // ST14_4 void (__cdecl *v29)(int, int, signed int, int *, signed int); // eax int v30; // eax int (__cdecl *v31)(int, char *, signed int, int *, signed int); // edx int result; // eax int v33; // [esp+Ch] [ebp-8h] int v34; // [esp+10h] [ebp-4h] v2 = a2; v3 = *(_DWORD *)(a2 + 356); v4 = this; v5 = v3; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v3 + 8); a2 = 4; v6(v5, this + 4, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 1; v9(v8, v4 + 1, 1, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v4 + 12, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v4 + 16, 4, &a2, 1); v16 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v17 = *(_DWORD *)(v2 + 356); a2 = 1; v16(v17, v4, 1, &a2, 1); v18 = *(_DWORD *)(v2 + 356); v19 = v18; v20 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v18 + 8); a2 = 4; v20(v19, v4 + 8, 4, &a2, 1); v21 = (int)(v4 + 24); v34 = 4; do { v22 = *(_DWORD *)(v2 + 356); v23 = v22; v24 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v22 + 8); v33 = 4; v24(v23, v21 - 4, 4, &v33, 1); v25 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v26 = *(_DWORD *)(v2 + 356); v33 = 4; v25(v26, v21, 4, &v33, 1); v27 = *(_DWORD *)(v2 + 356); v28 = v27; v29 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v27 + 8); v33 = 1; v29(v28, v21 + 4, 1, &v33, 1); v30 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = *(_BYTE *)(v21 + 5); v31 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v30 + 8); v33 = 1; result = v31(v30, (char *)&a2 + 3, 1, &v33, 1); v21 += 12; --v34; } while ( v34 ); return result; } //----- (0086AA90) -------------------------------------------------------- bool __thiscall sub_86AA90(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_81A6B0(this, a2) && !((*(_BYTE *)(a2 + 28) ^ *((_BYTE *)v2 + 28)) & 1) && !(((unsigned __int8)(*(_BYTE *)(a2 + 28) >> 1) ^ (unsigned __int8)(*((_BYTE *)v2 + 28) >> 1)) & 1) && v2[8] == *(_DWORD *)(a2 + 32); } //----- (0086AAE0) -------------------------------------------------------- int __thiscall sub_86AAE0(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x24u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiZBufferProperty::`vftable'; *(_WORD *)(v4 + 28) = 3; *(_DWORD *)(v4 + 32) = 3; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = *((_WORD *)v2 + 14); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); return v4; } // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; //----- (0086AB40) -------------------------------------------------------- _DWORD *sub_86AB40() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_WORD *)v1 + 14) = 3; v1[8] = 3; *v1 = &NiZBufferProperty::`vftable'; return v1; } // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; //----- (0086AB80) -------------------------------------------------------- LONG sub_86AB80() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x24u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiZBufferProperty::`vftable'; *(_WORD *)(v1 + 28) = 3; *(_DWORD *)(v1 + 32) = 3; } else { v1 = 0; } result = dword_BA47DC; if ( dword_BA47DC != v1 ) { if ( dword_BA47DC ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA47DC; result = InterlockedDecrement((volatile LONG *)(dword_BA47DC + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA47DC = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9B5B1C: using guessed type void *NiZBufferProperty::`vftable'; // BA47DC: using guessed type int dword_BA47DC; //----- (0086AC00) -------------------------------------------------------- void sub_86AC00() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA47DC; if ( dword_BA47DC ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA47DC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA47DC = 0; } } // BA47DC: using guessed type int dword_BA47DC; //----- (0086AC40) -------------------------------------------------------- __int16 __thiscall sub_86AC40(int *this, void **a2) { void **v2; // esi int *v3; // edi __int16 result; // ax _DWORD *v5; // eax _DWORD *v6; // ST00_4 int (__cdecl *v7)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v8; // esi int (__cdecl *v9)(_DWORD *, int *, signed int, void ***, signed int); // eax int v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_85FBF0(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v5 = v2[88]; v6 = v5; v7 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v5[1]; a2 = (void **)2; result = v7(v6, v3 + 7, 2, &a2, 1); } else { result = (_WORD)v2[104] & 3; *((_WORD *)v3 + 14) = result; } if ( (unsigned int)v2[7] >= 0x4010005 ) { v8 = v2[88]; v9 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v8[1]; a2 = (void **)4; result = v9(v8, &v10, 4, &a2, 1); v3[8] = v10; } return result; } //----- (0086ACD0) -------------------------------------------------------- int __thiscall sub_86ACD0(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // edi int (__cdecl *v8)(int, const char **, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 7, 2, &a2, 1); v7 = v2[89]; v8 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; return v8(v7, v3 + 8, 4, &a2, 1); } //----- (0086AD30) -------------------------------------------------------- unsigned int __thiscall sub_86AD30(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi int v10; // edx char *v11; // eax unsigned int v12; // edi int v14; // [esp+Ch] [ebp-20h] const char *v15; // [esp+10h] [ebp-1Ch] const char *v16; // [esp+14h] [ebp-18h] const char *v17; // [esp+18h] [ebp-14h] const char *v18; // [esp+1Ch] [ebp-10h] const char *v19; // [esp+20h] [ebp-Ch] const char *v20; // [esp+24h] [ebp-8h] const char *v21; // [esp+28h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA47D4); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bZTest", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); a2 = (*((_BYTE *)v3 + 28) >> 1) & 1; v8 = sub_878510((int)"m_bZWrite", a2); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = v3[8]; v14 = (int)"TEST_ALWAYS"; v15 = "TEST_LESS"; v16 = "TEST_EQUAL"; v17 = "TEST_LESSEQUAL"; v18 = "TEST_GREATER"; v19 = "TEST_NOTEQUAL"; v20 = "TEST_GREATEREQUAL"; v21 = "TEST_NEVER"; v11 = sub_878740((int)"m_eTest", *(&v14 + v10)); v12 = v2[3]; *(_DWORD *)&a2 = v11; if ( v12 >= v2[2] ) sub_8237A0(v2, v12 + v2[5]); return sub_823870(v2, v12, &a2); } //----- (0086AE70) -------------------------------------------------------- _DWORD *__thiscall sub_86AE70(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_87FC90(this); *v1 = &NiAlphaAccumulator::`vftable'; *((_WORD *)v1 + 24) = 1; return v1; } // A2523C: using guessed type void *NiAlphaAccumulator::`vftable'; //----- (0086AE90) -------------------------------------------------------- _DWORD *sub_86AE90() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_87FC90(v0); *v1 = &NiAlphaAccumulator::`vftable'; *((_WORD *)v1 + 24) = 1; return v1; } // A2523C: using guessed type void *NiAlphaAccumulator::`vftable'; //----- (0086AEC0) -------------------------------------------------------- unsigned int __thiscall sub_86AEC0(int *this, signed int a2) { return sub_832110(this, a2); } //----- (0086AED0) -------------------------------------------------------- bool __thiscall sub_86AED0(void *this, int a2) { return sub_87F930(this, a2) != 0; } //----- (0086AEF0) -------------------------------------------------------- void *sub_86AEF0() { return &unk_BA47E0; } //----- (0086AF00) -------------------------------------------------------- void *__thiscall sub_86AF00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiAlphaAccumulator::`vftable'; sub_87FAB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2523C: using guessed type void *NiAlphaAccumulator::`vftable'; //----- (0086AF30) -------------------------------------------------------- int __thiscall sub_86AF30(int this) { int v1; // esi int result; // eax int v3; // eax float *v4; // eax _DWORD *v5; // ecx int i; // eax int v7; // edx float *v8; // edx float v9; // ST20_4 float v10; // ST20_4 int j; // edx int v12; // eax float *v13; // eax float v14; // ST20_4 float v15; // [esp+4h] [ebp-10h] float v16; // [esp+8h] [ebp-Ch] float v17; // [esp+Ch] [ebp-8h] v1 = this; result = *(_DWORD *)(this + 24); *(_DWORD *)(this + 28) = result; if ( result ) { if ( result > *(_DWORD *)(this + 32) ) { operator delete(*(void **)(this + 36)); v3 = *(_DWORD *)(v1 + 28); *(_DWORD *)(v1 + 32) = v3; *(_DWORD *)(v1 + 36) = operator new(4 * v3); operator delete(*(void **)(v1 + 40)); *(_DWORD *)(v1 + 40) = operator new(4 * *(_DWORD *)(v1 + 32)); } v4 = *(float **)(v1 + 8); v5 = *(_DWORD **)(v1 + 16); v15 = v4[26]; v16 = v4[29]; v17 = v4[32]; if ( *(_BYTE *)(v1 + 49) ) { for ( i = 0; i < *(_DWORD *)(v1 + 28); *(float *)(*(_DWORD *)(v1 + 40) + 4 * i - 4) = v10 ) { v7 = v5[2]; v5 = (_DWORD *)*v5; *(_DWORD *)(*(_DWORD *)(v1 + 36) + 4 * i) = v7; v8 = *(float **)(*(_DWORD *)(v1 + 36) + 4 * i++); v9 = v8[10] * v16 + v15 * v8[9] + v8[11] * v17; v10 = v9 - v8[12]; } } else { for ( j = 0; j < *(_DWORD *)(v1 + 28); *(float *)(*(_DWORD *)(v1 + 40) + 4 * j - 4) = v14 ) { v12 = v5[2]; v5 = (_DWORD *)*v5; *(_DWORD *)(*(_DWORD *)(v1 + 36) + 4 * j) = v12; v13 = *(float **)(*(_DWORD *)(v1 + 36) + 4 * j++); v14 = v13[10] * v16 + v13[9] * v15 + v13[11] * v17; } } result = sub_87F9E0((_DWORD *)v1, 0, *(_DWORD *)(v1 + 28) - 1); } return result; } //----- (0086B080) -------------------------------------------------------- int __thiscall sub_86B080(_BYTE *this, _DWORD **a2) { _BYTE *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_87FC90(v3); *(_DWORD *)v4 = &NiAlphaAccumulator::`vftable'; *(_WORD *)(v4 + 48) = 1; } else { v4 = 0; } sub_87F920(v2, v4, a2); *(_BYTE *)(v4 + 48) = v2[48]; *(_BYTE *)(v4 + 49) = v2[49]; return v4; } // A2523C: using guessed type void *NiAlphaAccumulator::`vftable'; //----- (0086B0D0) -------------------------------------------------------- unsigned int __thiscall sub_86B0D0(_DWORD *this, _DWORD *a2) { unsigned int result; // eax int v3; // edi int v4; // esi int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ecx unsigned int v8; // [esp+0h] [ebp-10h] int v9; // [esp+4h] [ebp-Ch] _DWORD *v10; // [esp+8h] [ebp-8h] unsigned int v11; // [esp+Ch] [ebp-4h] v10 = this; v9 = dword_BA46D0; result = 0; v8 = a2[1]; v11 = 0; if ( v8 ) { do { v3 = *(_DWORD *)(*a2 + 4 * result); v4 = *(_DWORD *)(v3 + 176); if ( v4 ) { InterlockedIncrement((volatile LONG *)(v4 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *(_DWORD *)(v4 + 8); if ( v5 ) { if ( !(*(_BYTE *)(v5 + 28) & 1) || *((_BYTE *)v10 + 48) && (*(_WORD *)(v5 + 28) >> 13) & 1 || !(~(*(_BYTE *)(v3 + 28) >> 6) & 1) ) { (*(void (__thiscall **)(int, int))(*(_DWORD *)v3 + 116))(v3, v9); } else { v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v10[3] + 4))(v10 + 3); v6[2] = v3; *v6 = 0; v6[1] = v10[5]; v7 = (_DWORD *)v10[5]; if ( v7 ) { *v7 = v6; ++v10[6]; } else { ++v10[6]; v10[4] = v6; } v10[5] = v6; } } } result = v11 + 1; v11 = result; } while ( result < v8 ); } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0086B1D0) -------------------------------------------------------- _BYTE *__thiscall sub_86B1D0(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[24] = a2; return result; } //----- (0086B1E0) -------------------------------------------------------- _BYTE *__thiscall sub_86B1E0(_BYTE *this, float a2, float a3, float a4, float a5, float a6, float a7, char a8) { _BYTE *result; // eax result = this; *(float *)this = a2; this[24] = a8; *((float *)this + 1) = a3; *((float *)this + 2) = a4; *((float *)this + 3) = a5; *((float *)this + 4) = a6; *((float *)this + 5) = a7; return result; } //----- (0086B220) -------------------------------------------------------- char *__thiscall sub_86B220(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 80); sub_7FF6E0( v4, v3 + 80, "%s = (N=%g,F=%g,L=%g,R=%g,T=%g,B=%g,O=%u)", ArgList, v2[4], v2[5], *v2, v2[1], v2[2], v2[3], *((unsigned __int8 *)v2 + 24)); return v4; } //----- (0086B2A0) -------------------------------------------------------- bool __thiscall sub_86B2A0(_DWORD *this, int a2) { bool result; // al if ( a2 ) result = this[3] == *(_DWORD *)(a2 + 12); else result = 0; return result; } //----- (0086B2C0) -------------------------------------------------------- _DWORD *__thiscall sub_86B2C0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x10u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiIntegerExtraData::`vftable'; v4[3] = 0; } else { v4 = 0; } sub_868EF0(v2, (int)v4, a2); v4[3] = v2[3]; return v4; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; //----- (0086B310) -------------------------------------------------------- _DWORD *sub_86B310() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x10u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiIntegerExtraData::`vftable'; v1[3] = 0; return v1; } // 9BBB24: using guessed type void *NiIntegerExtraData::`vftable'; //----- (0086B340) -------------------------------------------------------- unsigned int __thiscall sub_86B340(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA47E8); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878630((int)"m_iValue", v3[3]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0086B3C0) -------------------------------------------------------- int __thiscall sub_86B3C0(int *this, size_t a2) { int *v2; // esi v2 = this; sub_868F80(this, a2); return sub_8769C0((_DWORD *)a2, v2 + 3); } //----- (0086B3F0) -------------------------------------------------------- int __thiscall sub_86B3F0(const char **this, _DWORD *a2) { const char **v2; // esi v2 = this; sub_868DB0(this, a2); return sub_876A50(a2, v2[3]); } //----- (0086B420) -------------------------------------------------------- char __thiscall sub_86B420(_DWORD *this, int a2) { const char *v3; // eax if ( !a2 ) return 0; v3 = (const char *)this[3]; if ( v3 ) { if ( !*(_DWORD *)(a2 + 12) ) return 0; if ( v3 ) goto LABEL_12; } if ( *(_DWORD *)(a2 + 12) ) return 0; if ( v3 ) { LABEL_12: if ( !strcmp(v3, *(const char **)(a2 + 12)) ) return 1; return 0; } return 1; } //----- (0086B480) -------------------------------------------------------- char *sub_86B480() { return dword_BA47F0; } //----- (0086B490) -------------------------------------------------------- _DWORD *sub_86B490() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x10u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiStringExtraData::`vftable'; v1[3] = 0; return v1; } // A252EC: using guessed type void *NiStringExtraData::`vftable'; //----- (0086B4C0) -------------------------------------------------------- _DWORD *__thiscall sub_86B4C0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 3); *(_DWORD *)this = &NiStringExtraData::`vftable'; operator delete(v3); v2[3] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A252EC: using guessed type void *NiStringExtraData::`vftable'; //----- (0086B500) -------------------------------------------------------- _DWORD *__thiscall sub_86B500(_DWORD *this, char *Src) { _DWORD *v2; // esi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; sub_868D00(this); *v2 = &NiStringExtraData::`vftable'; v2[3] = 0; operator delete(0); if ( Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[3] = v4; strcpy_s(v4, v3 + 1, Src); } else { v2[3] = 0; } return v2; } // A252EC: using guessed type void *NiStringExtraData::`vftable'; //----- (0086B570) -------------------------------------------------------- _DWORD *__thiscall sub_86B570(const char **this, _DWORD **a2) { const char **v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi const char *v5; // eax unsigned int v6; // kr00_4 char *v7; // eax v2 = this; v3 = operator new(0x10u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiStringExtraData::`vftable'; v4[3] = 0; } else { v4 = 0; } sub_868EF0(v2, (int)v4, a2); v5 = v2[3]; if ( v5 ) { v6 = strlen(v5); v7 = (char *)operator new(v6 + 1); v4[3] = v7; strcpy_s(v7, v6 + 1, v2[3]); } else { v4[3] = 0; } return v4; } // A252EC: using guessed type void *NiStringExtraData::`vftable'; //----- (0086B5F0) -------------------------------------------------------- unsigned int __thiscall sub_86B5F0(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA47F0); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878740((int)"m_pString", v3[3]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0086B670) -------------------------------------------------------- BOOL __thiscall sub_86B670(float *this, float *a2) { return a2[3] == this[3] && *a2 == *this && a2[1] == this[1] && a2[2] == this[2]; } //----- (0086B6C0) -------------------------------------------------------- int __thiscall sub_86B6C0(float *this, signed int a2, float *a3) { int v3; // edx float *v4; // edi int result; // eax int v6; // edx float *v7; // ebx int v8; // esi unsigned int v9; // edx float *v10; // ecx float *v11; // ecx int v12; // edx int v13; // esi float v14; // ST0C_4 float v15; // ST10_4 float v16; // ST14_4 float v17; // ST18_4 int v18; // edx int v19; // ST1C_4 float v20; // ST20_4 unsigned int v21; // edx float *v22; // ecx float v23; // ST30_4 float v24; // ST30_4 float v25; // ST30_4 float v26; // ST30_4 __int16 v27; // fps bool v28; // c0 char v29; // c2 bool v30; // c3 float *v31; // ecx int v32; // edx float v33; // ST30_4 __int16 v34; // fps bool v35; // c0 char v36; // c2 bool v37; // c3 float v38; // [esp+10h] [ebp-1Ch] float v39; // [esp+10h] [ebp-1Ch] float v40; // [esp+10h] [ebp-1Ch] float v41; // [esp+10h] [ebp-1Ch] float v42; // [esp+10h] [ebp-1Ch] float v43; // [esp+10h] [ebp-1Ch] float v44; // [esp+14h] [ebp-18h] float v45; // [esp+14h] [ebp-18h] float v46; // [esp+14h] [ebp-18h] float v47; // [esp+14h] [ebp-18h] float v48; // [esp+14h] [ebp-18h] float v49; // [esp+14h] [ebp-18h] float v50; // [esp+18h] [ebp-14h] float v51; // [esp+18h] [ebp-14h] float v52; // [esp+18h] [ebp-14h] float v53; // [esp+18h] [ebp-14h] float v54; // [esp+18h] [ebp-14h] float v55; // [esp+18h] [ebp-14h] float v56; // [esp+1Ch] [ebp-10h] float v57; // [esp+20h] [ebp-Ch] float v58; // [esp+24h] [ebp-8h] float v59; // [esp+34h] [ebp+8h] float v60; // [esp+38h] [ebp+Ch] v3 = a2; v4 = this; if ( a2 > 0 ) { v7 = a3; v38 = *a3; v44 = a3[1]; v50 = a3[2]; v56 = *a3; v8 = 1; v57 = a3[1]; v58 = a3[2]; if ( a2 > 1 ) { if ( a2 - 1 >= 4 ) { v9 = ((unsigned int)(a2 - 5) >> 2) + 1; v10 = a3 + 5; v8 = 4 * v9 + 1; do { if ( *(v10 - 2) < (double)v38 ) v38 = *(v10 - 2); if ( *(v10 - 1) < (double)v44 ) v44 = *(v10 - 1); if ( *v10 < (double)v50 ) v50 = *v10; if ( *(v10 - 2) > (double)v56 ) v56 = *(v10 - 2); if ( *(v10 - 1) > (double)v57 ) v57 = *(v10 - 1); if ( *v10 > (double)v58 ) v58 = *v10; if ( v10[1] < (double)v38 ) v38 = v10[1]; if ( v10[2] < (double)v44 ) v44 = v10[2]; if ( v10[3] < (double)v50 ) v50 = v10[3]; if ( v10[1] > (double)v56 ) v56 = v10[1]; if ( v10[2] > (double)v57 ) v57 = v10[2]; if ( v10[3] > (double)v58 ) v58 = v10[3]; if ( v10[4] < (double)v38 ) v38 = v10[4]; if ( v10[5] < (double)v44 ) v44 = v10[5]; if ( v10[6] < (double)v50 ) v50 = v10[6]; if ( v10[4] > (double)v56 ) v56 = v10[4]; if ( v10[5] > (double)v57 ) v57 = v10[5]; if ( v10[6] > (double)v58 ) v58 = v10[6]; if ( v10[7] < (double)v38 ) v38 = v10[7]; if ( v10[8] < (double)v44 ) v44 = v10[8]; if ( v10[9] < (double)v50 ) v50 = v10[9]; if ( v10[7] > (double)v56 ) v56 = v10[7]; if ( v10[8] > (double)v57 ) v57 = v10[8]; if ( v10[9] > (double)v58 ) v58 = v10[9]; v10 += 12; --v9; } while ( v9 ); v3 = a2; } if ( v8 < v3 ) { v11 = &a3[3 * v8 + 2]; v12 = a2 - v8; do { if ( *(v11 - 2) < (double)v38 ) v38 = *(v11 - 2); if ( *(v11 - 1) < (double)v44 ) v44 = *(v11 - 1); if ( *v11 < (double)v50 ) v50 = *v11; if ( *(v11 - 2) > (double)v56 ) v56 = *(v11 - 2); if ( *(v11 - 1) > (double)v57 ) v57 = *(v11 - 1); if ( *v11 > (double)v58 ) v58 = *v11; v11 += 3; --v12; } while ( v12 ); } } v13 = 0; v14 = v56 + v38; v15 = v57 + v44; v16 = v58 + v50; v17 = v14 * 0.5; *v4 = v17; v18 = a2; *(float *)&v19 = v15 * 0.5; result = v19; v4[1] = *(float *)&v19; v20 = 0.5 * v16; v4[2] = v20; v60 = 0.0; if ( a2 >= 4 ) { v21 = ((unsigned int)(a2 - 4) >> 2) + 1; v22 = v7 + 5; v13 = 4 * v21; do { v39 = *(v22 - 5) - *v4; v45 = *(v22 - 4) - v4[1]; v51 = *(v22 - 3) - v4[2]; v23 = v45 * v45 + v39 * v39 + v51 * v51; if ( v60 < (double)v23 ) v60 = v45 * v45 + v39 * v39 + v51 * v51; v40 = *(v22 - 2) - *v4; v46 = *(v22 - 1) - v4[1]; v52 = *v22 - v4[2]; v24 = v46 * v46 + v40 * v40 + v52 * v52; if ( v60 < (double)v24 ) v60 = v46 * v46 + v40 * v40 + v52 * v52; v41 = v22[1] - *v4; v47 = v22[2] - v4[1]; v53 = v22[3] - v4[2]; v25 = v47 * v47 + v41 * v41 + v53 * v53; if ( v60 < (double)v25 ) v60 = v47 * v47 + v41 * v41 + v53 * v53; v42 = v22[4] - *v4; v48 = v22[5] - v4[1]; v54 = v22[6] - v4[2]; v26 = v48 * v48 + v42 * v42 + v54 * v54; v28 = v60 < (double)v26; v29 = 0; v30 = v60 == v26; LOWORD(result) = v27; if ( v60 < (double)v26 ) v60 = v48 * v48 + v42 * v42 + v54 * v54; v22 += 12; --v21; } while ( v21 ); v18 = a2; } if ( v13 < v18 ) { v31 = &v7[3 * v13 + 2]; v32 = a2 - v13; do { v43 = *(v31 - 2) - *v4; v49 = *(v31 - 1) - v4[1]; v55 = *v31 - v4[2]; v33 = v49 * v49 + v43 * v43 + v55 * v55; v35 = v60 < (double)v33; v36 = 0; v37 = v60 == v33; LOWORD(result) = v34; if ( v60 < (double)v33 ) v60 = v49 * v49 + v43 * v43 + v55 * v55; v31 += 3; --v32; } while ( v32 ); } v59 = sqrt(v60); v4[3] = v59; } else { result = dword_BA45C0; *(_DWORD *)this = dword_BA45C0; *((_DWORD *)this + 1) = dword_BA45C4; v6 = dword_BA45C8; this[3] = 0.0; *((_DWORD *)this + 2) = v6; } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0086BC10) -------------------------------------------------------- void __thiscall sub_86BC10(float *this, float *a2) { float *v2; // edi float v3; // ST14_4 bool v4; // c0 bool v5; // c3 long double v6; // st7 double v7; // st7 double v8; // st7 double v9; // st6 float v10; // ST18_4 float v11; // ST14_4 float v12; // ST08_4 float v13; // ST0C_4 double v14; // st6 float v15; // ST10_4 float v16; // [esp+8h] [ebp-14h] float v17; // [esp+Ch] [ebp-10h] float v18; // [esp+10h] [ebp-Ch] float v19; // [esp+18h] [ebp-4h] float v20; // [esp+24h] [ebp+8h] float v21; // [esp+24h] [ebp+8h] float v22; // [esp+24h] [ebp+8h] float v23; // [esp+24h] [ebp+8h] float v24; // [esp+24h] [ebp+8h] float v25; // [esp+24h] [ebp+8h] v2 = a2; v16 = *this - *a2; v17 = this[1] - a2[1]; v18 = this[2] - a2[2]; v3 = v16 * v16 + v17 * v17 + v18 * v18; v19 = a2[3] - this[3]; v20 = v19 * v19; v4 = v3 < (double)v20; v5 = v3 == v20; v6 = v3; if ( v19 < 0.0 ) { if ( v4 || v5 ) return; v25 = sqrt(v6); v7 = v25; } else { if ( v4 || v5 ) { *this = *v2; this[1] = v2[1]; this[2] = v2[2]; this[3] = v2[3]; return; } v21 = sqrt(v6); v7 = v21; } v22 = v7; v8 = v22; if ( flt_ABF014 < (double)v22 ) { v23 = (v8 - v19) / (v8 + v8); v9 = v23; v24 = v16 * v23; v10 = v17 * v9; v11 = v9 * v18; v12 = v24 + *v2; v13 = v10 + v2[1]; v14 = v2[2]; *this = v12; this[1] = v13; v15 = v14 + v11; this[2] = v15; } this[3] = (v8 + v2[3] + this[3]) * 0.5; } // ABF014: using guessed type float flt_ABF014; //----- (0086BD60) -------------------------------------------------------- float __userpurge sub_86BD60@(float *this@, float *a2, float *a3) { float *v3; // edi float *v4; // eax double v5; // st5 float v6; // edx double v7; // st7 double v8; // st7 float result; // eax float v10; // [esp+Ch] [ebp-18h] float v11; // [esp+10h] [ebp-14h] float v12; // [esp+14h] [ebp-10h] float v13; // [esp+18h] [ebp-Ch] float v14; // [esp+1Ch] [ebp-8h] float v15; // [esp+20h] [ebp-4h] v3 = this; v4 = sub_85DA90(a3, &v10, a2); v5 = a3[12]; v13 = *v4 * v5; v14 = v4[1] * v5; v15 = v5 * v4[2]; v10 = a3[9] + v13; v11 = a3[10] + v14; v6 = v11; v7 = a3[11]; *v3 = v10; v8 = v7 + v15; v3[1] = v6; v12 = v8; result = v12; v3[2] = v12; v3[3] = a2[3] * a3[12]; return result; } //----- (0086BDE0) -------------------------------------------------------- char __thiscall sub_86BDE0(float *this, int a2) { float *v2; // esi int v3; // esi v2 = this; if ( !sub_85BB20(this, a2) || *((_WORD *)v2 + 4) != *(_WORD *)(a2 + 8) || *(float *)(a2 + 12) != v2[3] || *(float *)(a2 + 16) != v2[4] || *(float *)(a2 + 20) != v2[5] || *(float *)(a2 + 24) != v2[6] ) { return 0; } v3 = *((_DWORD *)v2 + 12); if ( v3 ) { if ( !*(_DWORD *)(a2 + 48) ) return 0; if ( v3 ) return 1; } if ( !*(_DWORD *)(a2 + 48) ) return 1; return 0; } //----- (0086BE70) -------------------------------------------------------- int __fastcall sub_86BE70(int a1) { int result; // eax for ( result = 0; a1; ++result ) a1 = *(_DWORD *)(a1 + 52); return result; } //----- (0086BE80) -------------------------------------------------------- __int16 __thiscall sub_86BE80(int this, float a2) { __int16 result; // ax *(_WORD *)(this + 8) |= 8u; result = *(_WORD *)(this + 8); *(float *)(this + 32) = -3.4028235e38; if ( result & 1 ) *(float *)(this + 28) = a2; return result; } //----- (0086BEB0) -------------------------------------------------------- __int16 __thiscall sub_86BEB0(int this) { __int16 result; // ax *(_WORD *)(this + 8) &= 0xFFF7u; result = *(_WORD *)(this + 8); *(float *)(this + 32) = -3.4028235e38; if ( result & 1 ) *(float *)(this + 28) = -3.4028235e38; return result; } //----- (0086BEE0) -------------------------------------------------------- double __thiscall sub_86BEE0(int this, float a2) { int v2; // esi double v3; // st7 double v4; // st6 bool v5; // zf unsigned int v6; // edi long double v7; // st7 double v8; // st6 double v9; // st7 double v10; // st7 float v12; // [esp+8h] [ebp-8h] float v13; // [esp+8h] [ebp-8h] float v14; // [esp+Ch] [ebp-4h] float v15; // [esp+18h] [ebp+8h] float v16; // [esp+18h] [ebp+8h] float v17; // [esp+18h] [ebp+8h] float v18; // [esp+18h] [ebp+8h] float v19; // [esp+18h] [ebp+8h] float v20; // [esp+18h] [ebp+8h] v2 = this; v3 = a2; if ( -3.4028235e38 == *(float *)(this + 28) ) *(float *)(this + 28) = a2; v4 = 0.0; if ( -3.4028235e38 == *(float *)(this + 32) ) { v5 = (*(_BYTE *)(this + 8) & 1) == 0; *(float *)(this + 36) = 0.0; if ( v5 ) goto LABEL_8; } else { v4 = v3 - *(float *)(this + 32); } a2 = v4; LABEL_8: v6 = ((unsigned int)*(unsigned __int16 *)(this + 8) >> 1) & 3; v15 = *(float *)(this + 12) * a2 + *(float *)(this + 36); *(float *)(this + 36) = v15; v16 = v15 + *(float *)(this + 16); *(float *)(this + 32) = v3; EnterCriticalSection(&stru_BA4810); v7 = v16; if ( *(float *)(v2 + 24) == flt_BA4804 && *(float *)(v2 + 20) == flt_BA4800 && v7 == flt_BA47FC && dword_ABEAB0 == v6 ) { v16 = flt_BA47F8; goto LABEL_35; } v8 = *(float *)(v2 + 24); dword_ABEAB0 = v6; flt_BA4804 = v8; flt_BA4800 = *(float *)(v2 + 20); flt_BA47FC = v16; if ( -3.4028235e38 != *(float *)(v2 + 24) && *(float *)(v2 + 20) != 3.4028235e38 ) { if ( v6 ) { if ( v6 != 1 ) goto LABEL_27; v12 = *(float *)(v2 + 24) - *(float *)(v2 + 20); if ( 0.0 != v12 ) { v14 = v12 + v12; v17 = fmod(v7, v14); v9 = v17; if ( v17 < 0.0 ) { v18 = v9 + v14; v9 = v18; } if ( v12 < v9 ) v9 = v14 - v9; v16 = v9 + *(float *)(v2 + 20); goto LABEL_27; } LABEL_23: v16 = *(float *)(v2 + 20); goto LABEL_27; } v13 = *(float *)(v2 + 24) - *(float *)(v2 + 20); if ( 0.0 == v13 ) goto LABEL_23; v19 = v7 - *(float *)(v2 + 20); v20 = fmod(v19, v13); v16 = v20 + *(float *)(v2 + 20); if ( *(float *)(v2 + 20) > (double)v16 ) v16 = v16 + v13; } LABEL_27: if ( *(float *)(v2 + 24) < (double)v16 ) { v10 = *(float *)(v2 + 24); LABEL_31: v16 = v10; goto LABEL_32; } if ( *(float *)(v2 + 20) > (double)v16 ) { v10 = *(float *)(v2 + 20); goto LABEL_31; } LABEL_32: if ( (*(_BYTE *)(v2 + 8) >> 4) & 1 ) v16 = *(float *)(v2 + 24) - (v16 - *(float *)(v2 + 20)); flt_BA47F8 = v16; LABEL_35: LeaveCriticalSection(&stru_BA4810); return v16; } // ABEAB0: using guessed type int dword_ABEAB0; // BA47F8: using guessed type float flt_BA47F8; // BA47FC: using guessed type float flt_BA47FC; // BA4800: using guessed type float flt_BA4800; // BA4804: using guessed type float flt_BA4804; //----- (0086C130) -------------------------------------------------------- char __thiscall sub_86C130(void *this, int a2, _DWORD **a3) { _DWORD **v3; // ebx int v4; // edi void *v5; // esi int v6; // eax int v7; // ebx int v8; // ST14_4 int v9; // esi int v10; // esi int v11; // ebx v3 = a3; v4 = a2; v5 = this; sub_85BB00(this, a2, a3); *(_WORD *)(v4 + 8) = *((_WORD *)v5 + 4); *(float *)(v4 + 12) = *((float *)v5 + 3); *(float *)(v4 + 16) = *((float *)v5 + 4); *(float *)(v4 + 20) = *((float *)v5 + 5); *(float *)(v4 + 24) = *((float *)v5 + 6); *(float *)(v4 + 28) = *((float *)v5 + 7); *(float *)(v4 + 32) = *((float *)v5 + 8); *(float *)(v4 + 36) = *((float *)v5 + 9); v6 = *((_DWORD *)v5 + 12); if ( v6 ) { LOBYTE(v6) = sub_8C4C90(*v3, v6, &a2); if ( (_BYTE)v6 && (v7 = *((_DWORD *)v5 + 12), v8 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(), v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7), v6 == v8) ) { LOBYTE(v6) = a2; *(_DWORD *)(v4 + 48) = a2; } else { *(_DWORD *)(v4 + 48) = 0; } } v9 = *((_DWORD *)v5 + 13); if ( v9 ) { v6 = (*(int (__thiscall **)(int, _DWORD **))(*(_DWORD *)v9 + 8))(v9, a3); v10 = *(_DWORD *)(v4 + 52); v11 = v6; if ( v10 != v6 ) { if ( v10 ) { v6 = InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !v6 ) { if ( v10 ) LOBYTE(v6) = (**(int (__thiscall ***)(int, signed int))v10)(v10, 1); } } *(_DWORD *)(v4 + 52) = v11; if ( v11 ) LOBYTE(v6) = InterlockedIncrement((volatile LONG *)(v11 + 4)); } } return v6; } //----- (0086C220) -------------------------------------------------------- int __thiscall sub_86C220(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_85BAE0(this, a2); v4 = v2[13]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (0086C250) -------------------------------------------------------- char __thiscall sub_86C250(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_85BA30(this, a2); if ( result ) { v4 = v2[13]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0086C290) -------------------------------------------------------- char *__cdecl sub_86C290(int ArgList, int a2) { size_t v2; // edi char *v3; // esi v2 = strlen((const char *)ArgList) + 11; v3 = (char *)operator new(v2); if ( a2 ) { if ( a2 == 1 ) { sub_7FF6E0(v3, v2, "%s = REVERSE", ArgList); return v3; } if ( a2 == 2 ) { sub_7FF6E0(v3, v2, "%s = CLAMP", ArgList); return v3; } } else { sub_7FF6E0(v3, v2, "%s = LOOP", ArgList); } return v3; } //----- (0086C310) -------------------------------------------------------- float *__thiscall sub_86C310(float *this) { float *v1; // esi int v2; // edi v1 = this; sub_85BA50(this); *(_DWORD *)v1 = &NiTimeController::`vftable'; v1[13] = 0.0; v1[3] = 1.0; v1[4] = 0.0; *((_WORD *)v1 + 4) = 12; v1[5] = 3.4028235e38; v1[6] = -3.4028235e38; v1[7] = -3.4028235e38; v1[8] = -3.4028235e38; v1[9] = 0.0; v1[12] = 0.0; v1[10] = -3.4028235e38; v2 = *((_DWORD *)v1 + 13); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[13] = 0.0; } *((_BYTE *)v1 + 56) = 0; *((_BYTE *)v1 + 44) = 1; return v1; } // A2539C: using guessed type void *NiTimeController::`vftable'; //----- (0086C3B0) -------------------------------------------------------- char *sub_86C3B0() { return dword_BA4808; } //----- (0086C3C0) -------------------------------------------------------- LONG __thiscall sub_86C3C0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NiTimeController::`vftable'; v2 = this[13]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[13] = 0; } v3 = v1[13]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_85BA80(v1); } // A2539C: using guessed type void *NiTimeController::`vftable'; //----- (0086C420) -------------------------------------------------------- unsigned int __cdecl sub_86C420(int a1, float a2) { _DWORD *i; // esi int v3; // eax _DWORD *v4; // esi int v5; // eax unsigned int result; // eax unsigned int v7; // esi int v8; // eax for ( i = *(_DWORD **)(a1 + 12); i; i = (_DWORD *)i[13] ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*i + 60))(i, LODWORD(a2)); v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA457C ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_12; } v4 = *(_DWORD **)(a1 + 160); while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 && *(_DWORD *)(v5 + 12) ) sub_86C420(v5, a2); } } LABEL_12: result = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( result ) { while ( (char *)result != dword_BA455C ) { result = *(_DWORD *)(result + 4); if ( !result ) return result; } result = *(_DWORD *)(a1 + 188); v7 = 0; if ( result ) { if ( result <= 0 ) goto LABEL_20; do { v8 = *(_DWORD *)(*(_DWORD *)(a1 + 180) + 4 * v7); if ( v8 ) sub_86C420(v8, a2); LABEL_20: result = *(_DWORD *)(a1 + 188); ++v7; } while ( result > v7 ); } } return result; } //----- (0086C4F0) -------------------------------------------------------- void __thiscall sub_86C4F0(int this, _DWORD *a2) { int v2; // esi _DWORD *v3; // ecx int v4; // eax v2 = this; if ( *(_DWORD **)(this + 48) == a2 ) return; InterlockedIncrement((volatile LONG *)(this + 4)); v3 = *(_DWORD **)(v2 + 48); if ( v3 && v3[3] ) sub_85B520(v3, v2); *(_DWORD *)(v2 + 48) = a2; if ( !a2 ) { LABEL_11: if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return; } v4 = a2[3]; if ( !v4 ) { LABEL_9: sub_85B490(a2, v2); if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v2 + 80))(v2) ) *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 48) + 184) + 50) = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 48) + 184) + 50) & 0xFFF | 0x8000; goto LABEL_11; } while ( v4 != v2 ) { v4 = *(_DWORD *)(v4 + 52); if ( !v4 ) goto LABEL_9; } } //----- (0086C590) -------------------------------------------------------- int __thiscall sub_86C590(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // esi int v5; // ebx int result; // eax int v7; // edi v2 = this; v3 = sub_875AD0(a2); v4 = v2[13]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[13] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = sub_875AD0(a2); v2[12] = result; if ( a2[7] < 0xA000110u ) { result = (*(int (__thiscall **)(_DWORD *))(*v2 + 80))(v2); if ( (_BYTE)result ) { v7 = v2[12]; if ( v7 ) { result = 0x8000; *(_WORD *)(*(_DWORD *)(v7 + 184) + 50) = *(_WORD *)(*(_DWORD *)(v7 + 184) + 50) & 0xFFF | 0x8000; } } } return result; } //----- (0086C630) -------------------------------------------------------- unsigned int __thiscall sub_86C630(int *this, signed int a2) { signed int v2; // esi int *v3; // edi void (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx _WORD *v5; // ebx int v6; // ST3C_4 int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v16)(int, int *, signed int, signed int *, signed int); // edx int v17; // ST3C_4 unsigned int result; // eax int v19; // eax int v20; // ST3C_4 int (__cdecl *v21)(int, char *, signed int, int *, signed int); // eax int v22; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); sub_876290((void **)v2); v4 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = v3 + 2; v6 = *(_DWORD *)(v2 + 352); a2 = 2; v4(v6, v3 + 2, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 3, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v3 + 4, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v13 + 4); a2 = 4; v15(v14, v3 + 5, 4, &a2, 1); v16 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v17 = *(_DWORD *)(v2 + 352); a2 = 4; v16(v17, v3 + 6, 4, &a2, 1); sub_876290((void **)v2); result = *(_DWORD *)(v2 + 28); if ( result == 167772417 ) { v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v19 + 4); v22 = 1; result = v21(v20, (char *)&a2 + 3, 1, &v22, 1); if ( HIBYTE(a2) ) *v5 |= 0x10u; else *v5 &= 0xFFEFu; } else if ( result < 0xA000101 ) { result = *v5 & 0xF | 2 * (*v5 & 0xFFF0); *v5 = *v5 & 0xF | 2 * (*v5 & 0xFFF0); } if ( *(_DWORD *)(v2 + 28) < 0xA000102u ) { *(_WORD *)(v2 + 414) = *v5; *v5 &= 0x1Fu; } if ( *(_DWORD *)(v2 + 28) < 0xA01006Du ) { result = 65503; *v5 &= 0xFFDFu; } return result; } //----- (0086C780) -------------------------------------------------------- int __thiscall sub_86C780(_DWORD *this, signed int a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *i; // ebx int v5; // eax int v6; // ST3C_4 void (__cdecl *v7)(int, _DWORD *, signed int, signed int *, signed int); // eax int v8; // eax int v9; // ST28_4 void (__cdecl *v10)(int, _DWORD *, signed int, signed int *, signed int); // eax int v11; // eax int v12; // ST14_4 void (__cdecl *v13)(int, _DWORD *, signed int, signed int *, signed int); // eax int v14; // eax int v15; // ST00_4 void (__cdecl *v16)(int, _DWORD *, signed int, signed int *, signed int); // eax int v17; // eax int v18; // ST3C_4 void (__cdecl *v19)(int, _DWORD *, signed int, signed int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; nullsub_32(a2); for ( i = (_DWORD *)v3[13]; i; i = (_DWORD *)i[13] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*i + 92))(i) ) break; } (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 44))(v2, i); v5 = v2[89]; v6 = v5; v7 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v5 + 8); a2 = 2; v7(v6, v3 + 2, 2, &a2, 1); v8 = v2[89]; v9 = v8; v10 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v8 + 8); a2 = 4; v10(v9, v3 + 3, 4, &a2, 1); v11 = v2[89]; v12 = v11; v13 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v11 + 8); a2 = 4; v13(v12, v3 + 4, 4, &a2, 1); v14 = v2[89]; v15 = v14; v16 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v14 + 8); a2 = 4; v16(v15, v3 + 5, 4, &a2, 1); v17 = v2[89]; v18 = v17; v19 = *(void (__cdecl **)(int, _DWORD *, signed int, signed int *, signed int))(v17 + 8); a2 = 4; v19(v18, v3 + 6, 4, &a2, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[12]); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0086C860) -------------------------------------------------------- unsigned int __thiscall sub_86C860(unsigned __int16 *this, char a2) { unsigned __int16 *v2; // edi char *v3; // eax _DWORD *v4; // esi unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx int v20; // ebx char *v21; // eax unsigned int v22; // ebx char *v23; // eax unsigned int v24; // ebx char *v25; // eax unsigned int v26; // ebx char *v27; // eax unsigned int v28; // edi char *v30; // [esp+10h] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA4808); v4 = (_DWORD *)a2; v5 = *(_DWORD *)(a2 + 12); v30 = v3; if ( v5 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v5 + *(_DWORD *)(a2 + 20)); sub_823870(v4, v5, &v30); v6 = sub_8786B0((int)"m_fFrequency", *((float *)v2 + 3)); v7 = v4[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v4[2] ) sub_8237A0(v4, v7 + v4[5]); sub_823870(v4, v7, &a2); v8 = sub_8786B0((int)"m_fPhase", *((float *)v2 + 4)); v9 = v4[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v4[2] ) sub_8237A0(v4, v9 + v4[5]); sub_823870(v4, v9, &a2); v10 = sub_8786B0((int)"m_fLoKeyTime", *((float *)v2 + 5)); v11 = v4[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v4[2] ) sub_8237A0(v4, v11 + v4[5]); sub_823870(v4, v11, &a2); v12 = sub_8786B0((int)"m_fHiKeyTime", *((float *)v2 + 6)); v13 = v4[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v4[2] ) sub_8237A0(v4, v13 + v4[5]); sub_823870(v4, v13, &a2); v14 = sub_8786B0((int)"m_fStartTime", *((float *)v2 + 7)); v15 = v4[3]; *(_DWORD *)&a2 = v14; if ( v15 >= v4[2] ) sub_8237A0(v4, v15 + v4[5]); sub_823870(v4, v15, &a2); v16 = sub_8786B0((int)"m_fLastTime", *((float *)v2 + 8)); v17 = v4[3]; *(_DWORD *)&a2 = v16; if ( v17 >= v4[2] ) sub_8237A0(v4, v17 + v4[5]); sub_823870(v4, v17, &a2); v18 = sub_878700((int)"m_pTarget", *((_DWORD *)v2 + 12)); v19 = v4[3]; *(_DWORD *)&a2 = v18; if ( v19 >= v4[2] ) sub_8237A0(v4, v19 + v4[5]); sub_823870(v4, v19, &a2); v20 = v2[4] & 1; v21 = (char *)operator new(0x15u); *(_DWORD *)&a2 = v21; if ( v20 ) { if ( v20 != 1 ) goto LABEL_22; sub_7FF6E0(v21, 0x15u, "%s = APP_INIT", "anim type"); } else { sub_7FF6E0(v21, 0x15u, "%s = APP_TIME", "anim type"); } v21 = (char *)a2; LABEL_22: v22 = v4[3]; *(_DWORD *)&a2 = v21; if ( v22 >= v4[2] ) sub_8237A0(v4, v22 + v4[5]); sub_823870(v4, v22, &a2); v23 = sub_86C290((int)"cycle type", ((unsigned int)v2[4] >> 1) & 3); v24 = v4[3]; *(_DWORD *)&a2 = v23; if ( v24 >= v4[2] ) sub_8237A0(v4, v24 + v4[5]); sub_823870(v4, v24, &a2); a2 = (*((_BYTE *)v2 + 8) >> 3) & 1; v25 = sub_878510((int)"Active", a2); v26 = v4[3]; *(_DWORD *)&a2 = v25; if ( v26 >= v4[2] ) sub_8237A0(v4, v26 + v4[5]); sub_823870(v4, v26, &a2); a2 = (*((_BYTE *)v2 + 8) >> 4) & 1; v27 = sub_878510((int)"Play Backwards", a2); v28 = v4[3]; *(_DWORD *)&a2 = v27; if ( v28 >= v4[2] ) sub_8237A0(v4, v28 + v4[5]); return sub_823870(v4, v28, &a2); } //----- (0086CB50) -------------------------------------------------------- int __thiscall sub_86CB50(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST14_4 int (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // edx int v7; // ST00_4 v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = this; v5 = *(_DWORD *)(a2 + 352); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v7 = *(_DWORD *)(v2 + 352); a2 = 4; return v6(v7, v4 + 4, 4, &a2, 1); } //----- (0086CBA0) -------------------------------------------------------- int __thiscall sub_86CBA0(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST14_4 int (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // edx int v7; // ST00_4 v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 356) + 8); v4 = this; v5 = *(_DWORD *)(a2 + 356); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v7 = *(_DWORD *)(v2 + 356); a2 = 4; return v6(v7, v4 + 4, 4, &a2, 1); } //----- (0086CBF0) -------------------------------------------------------- char __thiscall sub_86CBF0(_DWORD *this, int a2) { unsigned int v2; // edi unsigned int v4; // edx int v5; // eax float *v6; // ecx float *v7; // esi int v8; // ebx v2 = this[8]; if ( v2 != *(_DWORD *)(a2 + 32) ) return 0; v4 = 0; if ( !v2 ) return 1; v5 = *(_DWORD *)(a2 + 36); v6 = (float *)this[9]; v7 = (float *)(v5 + 4); v8 = v5 - (_DWORD)v6; while ( *v6 == *(float *)((char *)v6 + v8) && v6[1] == *v7 ) { ++v4; v7 += 4; v6 += 4; if ( v4 >= v2 ) return 1; } return 0; } //----- (0086CC60) -------------------------------------------------------- char *sub_86CC60() { return dword_BA4830; } //----- (0086CC70) -------------------------------------------------------- _DWORD *__thiscall sub_86CC70(_DWORD *this) { _DWORD *v1; // esi int v2; // edx v1 = this; sub_87FD50(this); *v1 = &NiRangeLODData::`vftable'; v1[2] = dword_BA45C0; v1[3] = dword_BA45C4; v2 = dword_BA45C8; v1[8] = 0; v1[9] = 0; v1[4] = v2; return v1; } // A2549C: using guessed type void *NiRangeLODData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0086CCB0) -------------------------------------------------------- _DWORD *__thiscall sub_86CCB0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 9); *(_DWORD *)this = &NiRangeLODData::`vftable'; operator delete(v3); sub_87FD70(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2549C: using guessed type void *NiRangeLODData::`vftable'; //----- (0086CCF0) -------------------------------------------------------- float __userpurge sub_86CCF0@(float *this@, float *a2) { float *v2; // edi float *v3; // esi float *v4; // eax double v5; // st7 float result; // eax unsigned int v7; // edx float v8; // ecx int v9; // ecx double v10; // st7 char v11; // [esp+8h] [ebp-24h] float v12; // [esp+14h] [ebp-18h] float v13; // [esp+18h] [ebp-14h] float v14; // [esp+1Ch] [ebp-10h] float v15; // [esp+20h] [ebp-Ch] float v16; // [esp+24h] [ebp-8h] float v17; // [esp+28h] [ebp-4h] float v18; // [esp+34h] [ebp+8h] v2 = a2; v3 = this; v18 = a2[38]; v12 = v18 * this[2]; v13 = this[3] * v18; v14 = v18 * this[4]; v4 = sub_85DA90(v2 + 26, (float *)&v11, &v12); v15 = v2[35] + *v4; v16 = v2[36] + v4[1]; v5 = v2[37] + v4[2]; result = v16; v3[5] = v15; v7 = 0; v17 = v5; v8 = v17; v3[6] = result; v3[7] = v8; if ( *((_DWORD *)v3 + 8) ) { result = 0.0; do { v9 = *((_DWORD *)v3 + 9); v10 = v2[38] * *(float *)(v9 + LODWORD(result)); ++v7; LODWORD(result) += 16; *(float *)(v9 + LODWORD(result) - 8) = v10; *(float *)(*((_DWORD *)v3 + 9) + LODWORD(result) - 4) = *(float *)(*((_DWORD *)v3 + 9) + LODWORD(result) - 12) * v2[38]; } while ( v7 < *((_DWORD *)v3 + 8) ); } return result; } //----- (0086CDB0) -------------------------------------------------------- void __thiscall sub_86CDB0(int this, int a2) { int v2; // esi void *v3; // eax const void *v4; // ecx void *v5; // ebx int v6; // eax v2 = this; if ( a2 != *(_DWORD *)(this + 32) ) { if ( a2 ) { v3 = operator new(16 * a2); v4 = *(const void **)(v2 + 36); v5 = v3; if ( v4 ) { v6 = *(_DWORD *)(v2 + 32); if ( v6 >= a2 ) v6 = a2; memcpy_s(v5, 16 * v6, v4, 16 * v6); } operator delete(*(void **)(v2 + 36)); *(_DWORD *)(v2 + 36) = v5; *(_DWORD *)(v2 + 32) = a2; } else { operator delete(*(void **)(this + 36)); *(_DWORD *)(v2 + 32) = 0; *(_DWORD *)(v2 + 36) = 0; } } } //----- (0086CE40) -------------------------------------------------------- signed int __thiscall sub_86CE40(int this, float *a2, int a3) { float *v3; // eax unsigned int v4; // esi unsigned int v5; // edx float v6; // ST04_4 float v7; // ST08_4 float v8; // ST0C_4 double v9; // st7 float *v10; // ecx float v12; // [esp+24h] [ebp+8h] float v13; // [esp+24h] [ebp+8h] float v14; // [esp+24h] [ebp+8h] v3 = a2; v4 = *(_DWORD *)(this + 32); v5 = 0; v6 = *(float *)(this + 20) - a2[35]; v7 = *(float *)(this + 24) - a2[36]; v8 = *(float *)(this + 28) - a2[37]; v12 = a2[29] * v7 + a2[26] * v6 + a2[32] * v8; v13 = v12 * v3[73]; v14 = fabs(v13); if ( !v4 ) return -1; v9 = v14; v10 = (float *)(*(_DWORD *)(this + 36) + 12); while ( *(v10 - 1) > v9 || *v10 <= v9 ) { ++v5; v10 += 4; if ( v5 >= v4 ) return -1; } return v5; } //----- (0086CF00) -------------------------------------------------------- int __thiscall sub_86CF00(_DWORD *this, int a2) { int v2; // eax signed int v3; // esi int v4; // ebx int v5; // edx int v6; // edi float *v7; // esi int v8; // edi int v9; // ebx int v10; // eax double v11; // st6 float *v12; // eax int v13; // edi int v14; // esi int v16; // [esp+0h] [ebp-10h] signed int v17; // [esp+4h] [ebp-Ch] int v18; // [esp+8h] [ebp-8h] float v19; // [esp+Ch] [ebp-4h] float v20; // [esp+18h] [ebp+8h] v2 = a2; if ( a2 <= 0 ) v2 = 0; v3 = this[8]; v18 = this[8]; if ( v2 >= v3 - 1 ) v2 = v3 - 1; v4 = -1; v20 = -3.4028235e38; if ( v2 >= 0 ) { v16 = v2 + 1; do { v5 = 0; v19 = 3.4028235e38; if ( v3 >= 4 ) { v6 = this[9]; v7 = (float *)(v6 + 32); v17 = 32; v8 = -v6; do { if ( v20 < (double)*(v7 - 8) && v19 >= (double)*(v7 - 8) ) { v20 = *(float *)((char *)v7 + v8 + this[9] - 32); v4 = v5; v19 = v20; } if ( v20 < (double)*(v7 - 4) && v19 >= (double)*(v7 - 4) ) { v9 = this[9]; v10 = (int)v7 + v8 - 32; v11 = *(float *)(v10 + v9 + 16); v12 = (float *)(v10 + v9 + 16); v20 = v11; v4 = v5 + 1; v19 = *v12; } if ( v20 < (double)*v7 && v19 >= (double)*v7 ) { v20 = *(float *)(this[9] + v17); v4 = v5 + 2; v19 = v20; } if ( v20 < (double)v7[4] && v19 >= (double)v7[4] ) { v20 = *(float *)((char *)v7 + v8 + this[9] + 16); v4 = v5 + 3; v19 = v20; } v17 += 64; v5 += 4; v7 += 16; } while ( v5 < v18 - 3 ); v3 = this[8]; } if ( v5 < v3 ) { v13 = this[9]; v14 = 16 * v5; do { if ( v20 < (double)*(float *)(v14 + v13) && v19 >= (double)*(float *)(v14 + v13) ) { v4 = v5; v20 = *(float *)(v13 + v14); v19 = v20; } ++v5; v14 += 16; } while ( v5 < v18 ); v3 = this[8]; } --v16; } while ( v16 ); } return v4; } //----- (0086D0B0) -------------------------------------------------------- _DWORD *sub_86D0B0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x28u); v1 = v0; if ( !v0 ) return 0; sub_87FD50(v0); *v1 = &NiRangeLODData::`vftable'; v1[2] = dword_BA45C0; v1[3] = dword_BA45C4; v1[4] = dword_BA45C8; v1[8] = 0; v1[9] = 0; return v1; } // A2549C: using guessed type void *NiRangeLODData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0086D100) -------------------------------------------------------- int __thiscall sub_86D100(void *this) { void *v1; // edi _DWORD *v2; // eax int v3; // esi v1 = this; v2 = operator new(0x28u); v3 = (int)v2; if ( v2 ) { sub_87FD50(v2); *(_DWORD *)v3 = &NiRangeLODData::`vftable'; *(_DWORD *)(v3 + 8) = dword_BA45C0; *(_DWORD *)(v3 + 12) = dword_BA45C4; *(_DWORD *)(v3 + 16) = dword_BA45C8; *(_DWORD *)(v3 + 32) = 0; *(_DWORD *)(v3 + 36) = 0; } else { v3 = 0; } *(_DWORD *)(v3 + 8) = *((_DWORD *)v1 + 2); *(_DWORD *)(v3 + 12) = *((_DWORD *)v1 + 3); *(_DWORD *)(v3 + 16) = *((_DWORD *)v1 + 4); sub_86CDB0(v3, *((_DWORD *)v1 + 8)); memcpy_s(*(void **)(v3 + 36), 16 * *((_DWORD *)v1 + 8), *((const void **)v1 + 9), 16 * *((_DWORD *)v1 + 8)); return v3; } // A2549C: using guessed type void *NiRangeLODData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0086D190) -------------------------------------------------------- int __thiscall sub_86D190(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x28u); v4 = (int)v3; if ( v3 ) { sub_87FD50(v3); *(_DWORD *)v4 = &NiRangeLODData::`vftable'; *(_DWORD *)(v4 + 8) = dword_BA45C0; *(_DWORD *)(v4 + 12) = dword_BA45C4; *(_DWORD *)(v4 + 16) = dword_BA45C8; *(_DWORD *)(v4 + 32) = 0; *(_DWORD *)(v4 + 36) = 0; } else { v4 = 0; } *(_DWORD *)(v4 + 8) = *((_DWORD *)v2 + 2); *(_DWORD *)(v4 + 12) = *((_DWORD *)v2 + 3); *(_DWORD *)(v4 + 16) = *((_DWORD *)v2 + 4); *(_DWORD *)(v4 + 20) = *((_DWORD *)v2 + 5); *(_DWORD *)(v4 + 24) = *((_DWORD *)v2 + 6); *(_DWORD *)(v4 + 28) = *((_DWORD *)v2 + 7); sub_86CDB0(v4, *((_DWORD *)v2 + 8)); memcpy_s(*(void **)(v4 + 36), 16 * *((_DWORD *)v2 + 8), *((const void **)v2 + 9), 16 * *((_DWORD *)v2 + 8)); return v4; } // A2549C: using guessed type void *NiRangeLODData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0086D230) -------------------------------------------------------- unsigned int __thiscall sub_86D230(char *this, int a2) { signed int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST14_4 unsigned int result; // eax bool v7; // zf int v8; // ebx int v9; // eax int v10; // ST18_4 int v11; // ST14_4 void (__cdecl *v12)(int, int, signed int, int *, signed int); // eax void (__cdecl *v13)(int, int, signed int, int *, signed int); // edx int v14; // ST04_4 int v15; // ST00_4 int v16; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_81C180(a2); sub_860940(v3 + 8, v2); v4 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; result = v4(v5, v3 + 32, 4, &a2, 1); v7 = *((_DWORD *)v3 + 8) == 0; a2 = 0; if ( !v7 ) { v8 = 0; do { v9 = *(_DWORD *)(v2 + 356); v10 = v8 + *((_DWORD *)v3 + 9); v11 = v9; v12 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v9 + 8); v16 = 4; v12(v11, v10, 4, &v16, 1); v13 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v14 = *((_DWORD *)v3 + 9) + v8 + 4; v15 = *(_DWORD *)(v2 + 356); v16 = 4; v13(v15, v14, 4, &v16, 1); result = a2 + 1; v8 += 16; a2 = result; } while ( result < *((_DWORD *)v3 + 8) ); } return result; } //----- (0086D2E0) -------------------------------------------------------- void __thiscall sub_86D2E0(int *this, unsigned int a2) { signed int v2; // ebx int v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, unsigned int *, signed int, unsigned int *, signed int); // eax int v7; // edi void (__cdecl *v8)(int, int, signed int, int *, signed int); // edx int v9; // ST18_4 int v10; // ST14_4 void (__cdecl *v11)(int, int, signed int, int *, signed int); // edx int v12; // ST04_4 int v13; // ST00_4 int v14; // [esp+Ch] [ebp-8h] unsigned int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = (int)this; sub_87FD80(this, a2); sub_8608D0((char *)(v3 + 8), v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v4 + 4); v15 = 4; v6(v5, &a2, 4, &v15, 1); sub_86CDB0(v3, a2); v7 = 0; v15 = 0; if ( a2 ) { do { v8 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v9 = v7 + *(_DWORD *)(v3 + 36); v10 = *(_DWORD *)(v2 + 352); v14 = 4; v8(v10, v9, 4, &v14, 1); v11 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v12 = v7 + *(_DWORD *)(v3 + 36) + 4; v13 = *(_DWORD *)(v2 + 352); v14 = 4; v11(v13, v12, 4, &v14, 1); v7 += 16; ++v15; } while ( v15 < a2 ); } } //----- (0086D3A0) -------------------------------------------------------- unsigned int __thiscall sub_86D3A0(float *this, char ArgList) { float *v2; // edi char *v3; // eax _DWORD *v4; // esi unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx unsigned int result; // eax char *v11; // ebx unsigned int v12; // edi float *v13; // [esp+1Ch] [ebp-8h] char *v14; // [esp+20h] [ebp-4h] v2 = this; v13 = this; v3 = sub_8784D0(*(int *)dword_BA4830); v4 = (_DWORD *)ArgList; v5 = *(_DWORD *)(ArgList + 12); v14 = v3; if ( v5 >= *(_DWORD *)(ArgList + 8) ) sub_8237A0((_DWORD *)ArgList, v5 + *(_DWORD *)(ArgList + 20)); sub_823870(v4, v5, &v14); v6 = sub_85F140(v2 + 2, (int)"m_kCenter"); v7 = v4[3]; *(_DWORD *)&ArgList = v6; if ( v7 >= v4[2] ) sub_8237A0(v4, v7 + v4[5]); sub_823870(v4, v7, &ArgList); v8 = sub_85F140(v2 + 5, (int)"m_kWorldCenter"); v9 = v4[3]; *(_DWORD *)&ArgList = v8; if ( v9 >= v4[2] ) sub_8237A0(v4, v9 + v4[5]); sub_823870(v4, v9, &ArgList); result = 0; *(_DWORD *)&ArgList = 0; if ( *((_DWORD *)v2 + 8) ) { v14 = 0; while ( 1 ) { v11 = (char *)operator new(0x80u); sub_7FF6E0( v11, 0x80u, "range[%d] = %g %g", ArgList, *(float *)&v14[*((_DWORD *)v2 + 9)], *(float *)&v14[*((_DWORD *)v2 + 9) + 4]); v12 = v4[3]; if ( v12 < v4[2] || (sub_8237A0(v4, v12 + v4[5]), v12 < v4[2]) ) { if ( v12 < v4[3] ) { if ( v11 ) { if ( !*(_DWORD *)(v4[1] + 4 * v12) ) ++v4[4]; } else if ( *(_DWORD *)(v4[1] + 4 * v12) ) { --v4[4]; } } else { v4[3] = v12 + 1; if ( v11 ) ++v4[4]; } *(_DWORD *)(v4[1] + 4 * v12) = v11; } v14 += 16; result = ArgList + 1; *(_DWORD *)&ArgList = result; if ( result >= *((_DWORD *)v13 + 8) ) break; v2 = v13; } } return result; } //----- (0086D510) -------------------------------------------------------- float *__thiscall sub_86D510(_DWORD *this) { _DWORD *v1; // esi float *result; // eax int v3; // ecx v1 = this; result = sub_85BE80((int)this); v3 = v1[69]; if ( v3 ) result = (float *)(*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v3 + 64))(v1); return result; } //----- (0086D530) -------------------------------------------------------- int __thiscall sub_86D530(int this, int a2) { int v2; // esi int v3; // ecx int v4; // ecx int v5; // eax int v6; // eax v2 = this; if ( *(_BYTE *)(this + 280) ) { v3 = *(_DWORD *)(this + 276); if ( v3 ) { *(_DWORD *)(v2 + 236) = (*(int (__stdcall **)(_DWORD, int))(*(_DWORD *)v3 + 60))(*(_DWORD *)(a2 + 12), v2); if ( dword_ABEAFC >= 0 ) *(_DWORD *)(v2 + 236) = (*(int (__stdcall **)(int))(**(_DWORD **)(v2 + 276) + 72))(dword_ABEAFC); if ( *(_DWORD *)(v2 + 236) >= 0 ) { v4 = *(_DWORD *)(v2 + 188); do { v5 = *(_DWORD *)(v2 + 236); if ( v5 < v4 && *(_DWORD *)(*(_DWORD *)(v2 + 180) + 4 * v5) ) break; v6 = v5 - 1; *(_DWORD *)(v2 + 236) = v6; } while ( v6 >= 0 ); } } } return sub_87C7E0((float *)v2, a2); } // ABEAFC: using guessed type int dword_ABEAFC; //----- (0086D5C0) -------------------------------------------------------- void __thiscall sub_86D5C0(float *this) { float *v1; // esi unsigned int v2; // edi int v3; // ecx int v4; // eax int v5; // edx v1 = this; v2 = 0; if ( *((_DWORD *)this + 47) > 0 ) { do { v3 = *(_DWORD *)(*((_DWORD *)v1 + 45) + 4 * v2); if ( v3 ) { v4 = *((_DWORD *)v1 + 61); v5 = *((_DWORD *)v1 + 63); if ( *(_DWORD *)(v5 + 4 * v2) != v4 ) { if ( v2 < *((_DWORD *)v1 + 64) ) { if ( v2 < *((_DWORD *)v1 + 65) ) { if ( v4 ) { if ( !*(_DWORD *)(v5 + 4 * v2) ) ++*((_DWORD *)v1 + 66); } else if ( *(_DWORD *)(v5 + 4 * v2) ) { --*((_DWORD *)v1 + 66); } } else { *((_DWORD *)v1 + 65) = v2 + 1; if ( *((_DWORD *)v1 + 61) ) ++*((_DWORD *)v1 + 66); } *(float *)(*((_DWORD *)v1 + 63) + 4 * v2) = v1[61]; } (*(void (__stdcall **)(float, _DWORD))(*(_DWORD *)v3 + 80))(v1[60], *((unsigned __int8 *)v1 + 272)); } } ++v2; } while ( (signed int)v2 < *((_DWORD *)v1 + 47) ); } } //----- (0086D690) -------------------------------------------------------- _DWORD *__thiscall sub_86D690(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *result; // eax int v4; // esi _DWORD *v5; // edi v2 = this; result = sub_87C5F0(this, a2); if ( a2[7] >= 0xA00010Cu ) { result = (_DWORD *)sub_875AD0(a2); v4 = v2[69]; v5 = result; if ( (_DWORD *)v4 != result ) { if ( v4 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[69] = v5; if ( v5 ) result = (_DWORD *)InterlockedIncrement(v5 + 1); } } return result; } //----- (0086D700) -------------------------------------------------------- char __thiscall sub_86D700(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_861BA0(this, a2); if ( result ) { v4 = v2[69]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0086D740) -------------------------------------------------------- int __thiscall sub_86D740(const char **this, unsigned int a2) { const char **v2; // esi v2 = this; sub_87CEC0(this, a2); return (*(int (__thiscall **)(unsigned int, const char *))(*(_DWORD *)a2 + 44))(a2, v2[69]); } //----- (0086D770) -------------------------------------------------------- char *sub_86D770() { return dword_BA4838; } //----- (0086D780) -------------------------------------------------------- int __thiscall sub_86D780(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // esi int result; // eax int v5; // ecx int v6; // esi int v7; // edi int v8; // esi v3 = this; result = sub_87C5B0(this, a2, a3); v5 = *((_DWORD *)v3 + 69); if ( v5 ) { result = (*(int (**)(void))(*(_DWORD *)v5 + 68))(); v6 = *(_DWORD *)(a2 + 276); v7 = result; if ( v6 != result ) { if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(a2 + 276) = v7; if ( v7 ) result = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } else { v8 = *(_DWORD *)(a2 + 276); if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result && v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)(a2 + 276) = 0; } } return result; } //----- (0086D830) -------------------------------------------------------- float *sub_86D830() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x11Cu); v1 = v0; if ( !v0 ) return 0; sub_87C600(v0); *(_DWORD *)v1 = &NiLODNode::`vftable'; v1[69] = 0.0; v1[59] = 0.0; *((_BYTE *)v1 + 280) = 1; return v1; } // A2552C: using guessed type void *NiLODNode::`vftable'; //----- (0086D880) -------------------------------------------------------- char __thiscall sub_86D880(_DWORD *this, int a2) { _DWORD *v2; // edi int v4; // ecx int v5; // esi int v6; // ebx v2 = this; if ( !sub_87CA20(this, a2) ) return 0; v4 = v2[69]; v5 = *(_DWORD *)(a2 + 276); if ( v4 ) { if ( !v5 ) return 0; if ( v4 ) goto LABEL_14; } if ( v5 ) return 0; if ( v4 ) { LABEL_14: if ( !v5 ) return 1; v6 = (*(int (**)(void))(*(_DWORD *)v4 + 4))(); if ( v6 != (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v2[69] + 28))(v5) ) { return 1; } return 0; } return 1; } //----- (0086D900) -------------------------------------------------------- _DWORD *__thiscall sub_86D900(void *this, char a2) { _DWORD *v2; // esi int v3; // edi void *v4; // ST00_4 v2 = this; *(_DWORD *)this = &NiLODNode::`vftable'; v3 = *((_DWORD *)this + 69); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = (void *)v2[63]; v2[62] = &NiTArray::`vftable'; operator delete(v4); sub_85A210(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21C0C: using guessed type void *NiTArray::`vftable'; // A2552C: using guessed type void *NiLODNode::`vftable'; //----- (0086D970) -------------------------------------------------------- int __thiscall sub_86D970(_WORD *this, _DWORD **a2) { _WORD *v2; // ebx float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x11Cu); v4 = (int)v3; if ( v3 ) { sub_87C600(v3); *(_DWORD *)v4 = &NiLODNode::`vftable'; *(_DWORD *)(v4 + 276) = 0; *(_DWORD *)(v4 + 236) = 0; *(_BYTE *)(v4 + 280) = 1; sub_86D780(v2, v4, a2); result = v4; } else { sub_86D780(v2, 0, a2); result = 0; } return result; } // A2552C: using guessed type void *NiLODNode::`vftable'; //----- (0086D9E0) -------------------------------------------------------- void __thiscall sub_86D9E0(int *this, void **a2) { signed int v2; // ebx int v3; // edi _DWORD *v4; // eax _DWORD *v5; // esi int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, void ***, signed int, int *, signed int); // eax unsigned int v9; // edi int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, float *, signed int, float *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, float *, signed int, float *, signed int); // eax int v16; // eax int v17; // ebx int v18; // [esp+8h] [ebp-24h] int v19; // [esp+Ch] [ebp-20h] int v20; // [esp+10h] [ebp-1Ch] float v21; // [esp+14h] [ebp-18h] float v22; // [esp+18h] [ebp-14h] float v23; // [esp+1Ch] [ebp-10h] float v24; // [esp+20h] [ebp-Ch] int *v25; // [esp+24h] [ebp-8h] int v26; // [esp+28h] [ebp-4h] v2 = (signed int)a2; v3 = (int)this; v25 = this; sub_87CE30(this, a2); if ( *(_DWORD *)(v2 + 28) > 0xA00010Bu ) { sub_876290((void **)v2); } else { v4 = operator new(0x28u); if ( v4 ) v5 = sub_86CC70(v4); else v5 = 0; sub_8608D0((char *)&v18, v2); v5[2] = v18; v5[3] = v19; v5[4] = v20; v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, void ***, signed int, int *, signed int))(v6 + 4); v26 = 4; v8(v7, &a2, 4, &v26, 1); if ( a2 ) { sub_86CDB0((int)v5, (int)a2); v9 = 0; if ( a2 ) { v26 = 0; do { v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, float *, signed int, float *, signed int))(v10 + 4); LODWORD(v24) = 4; v12(v11, &v23, 4, &v24, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, float *, signed int, float *, signed int))(v13 + 4); LODWORD(v24) = 4; v15(v14, &v22, 4, &v24, 1); v24 = v23; v21 = v22; if ( v9 >= v5[8] ) sub_86CDB0((int)v5, v9 + 1); v16 = v26; *(float *)(v26 + v5[9]) = v24; ++v9; *(float *)(v16 + v5[9] + 4) = v21; v26 = v16 + 16; } while ( v9 < (unsigned int)a2 ); } v3 = (int)v25; } v17 = *(_DWORD *)(v3 + 276); if ( (_DWORD *)v17 != v5 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } *(_DWORD *)(v3 + 276) = v5; InterlockedIncrement(v5 + 1); } } } //----- (0086DB60) -------------------------------------------------------- unsigned int __thiscall sub_86DB60(int *this, const char *a2) { char *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi int v6; // ecx unsigned int v8; // edi v2 = (char *)a2; v3 = this; sub_87CF20(this, (char)a2); v4 = sub_8784D0(*(int *)dword_BA4838); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = v3[69]; if ( v6 ) return (*(int (__stdcall **)(char *))(*(_DWORD *)v6 + 32))(v2); v8 = *((_DWORD *)v2 + 3); a2 = "NULL LOD Data"; if ( v8 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v8 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v8, &a2); } //----- (0086DBF0) -------------------------------------------------------- int __thiscall sub_86DBF0(void *this, int a2) { void *v2; // edi int result; // eax int *v4; // esi int v5; // eax v2 = this; if ( *(_BYTE *)(a2 + 4) ) return (*(int (__stdcall **)(void *))(*(_DWORD *)a2 + 12))(this); v4 = *(int **)(a2 + 8); v5 = v4[2]; if ( v4[1] == v5 ) sub_85F230(v4, v5 + v4[3]); result = *v4; *(_DWORD *)(*v4 + 4 * v4[1]++) = v2; return result; } //----- (0086DC40) -------------------------------------------------------- int __thiscall sub_86DC40(_DWORD **this) { return (*(int (**)(void))(*this[46] + 68))(); } //----- (0086DC50) -------------------------------------------------------- float __userpurge sub_86DC50@(float *this@) { float *v1; // esi _DWORD *v2; // ecx char v4; // [esp+4h] [ebp-10h] v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 47); if ( !v2 ) return sub_86BD60(v1 + 9, (float *)(*((_DWORD *)v1 + 46) + 16), v1 + 26); sub_8717F0(v2, (float *)&v4); return sub_86BD60(v1 + 9, (float *)&v4, v1 + 26); } //----- (0086DCA0) -------------------------------------------------------- void __thiscall sub_86DCA0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = this[45]; if ( a2 ) { if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2[45] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } else if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[45] = 0; } } //----- (0086DD30) -------------------------------------------------------- int __thiscall sub_86DD30(float *this, float a2, float *a3, char a4) { int v4; // edi int v5; // edx unsigned __int16 (*v6)(void); // eax int v7; // ebx int v8; // eax float *v9; // ecx int v10; // edx float *v11; // ebx float *v12; // eax float *v13; // edi float *v14; // eax float *v15; // eax float *v16; // esi int v17; // edi float *v18; // eax float v19; // ecx double v20; // st7 int v21; // esi int v22; // edi float *v23; // eax float *v25; // edi float *v26; // eax float v27; // edx double v28; // st7 int v29; // esi float *v30; // eax char v31; // [esp+Ch] [ebp-90h] char v32; // [esp+18h] [ebp-84h] float *v33; // [esp+24h] [ebp-78h] float v34; // [esp+28h] [ebp-74h] float v35; // [esp+2Ch] [ebp-70h] float v36; // [esp+30h] [ebp-6Ch] float *v37; // [esp+34h] [ebp-68h] float v38; // [esp+38h] [ebp-64h] float v39; // [esp+3Ch] [ebp-60h] float v40; // [esp+40h] [ebp-5Ch] int v41; // [esp+44h] [ebp-58h] int v42; // [esp+48h] [ebp-54h] float v43; // [esp+4Ch] [ebp-50h] char v44; // [esp+50h] [ebp-4Ch] char v45; // [esp+74h] [ebp-28h] v4 = (int)this; v5 = **((_DWORD **)this + 46); v43 = a2; v6 = *(unsigned __int16 (**)(void))(v5 + 64); v37 = this; v7 = v6(); v8 = *(_DWORD *)(v4 + 184); v9 = *(float **)(v8 + 32); v10 = *(_DWORD *)(v8 + 36); v41 = v7; v33 = v9; v42 = v10; if ( a4 ) { v11 = (float *)(v4 + 52); v12 = sub_85D940((float *)LODWORD(v43), (float *)&v45, (float *)(v4 + 52)); sub_85E050((float *)(v4 + 52), (float *)&v44, v12); v13 = (float *)(v4 + 88); v14 = sub_85DA90((float *)LODWORD(v43), (float *)&v31, v13); v34 = *v14 + *a3; v35 = a3[1] + v14[1]; v36 = a3[2] + v14[2]; v38 = v34 - *v13; v39 = v35 - v13[1]; v40 = v36 - v13[2]; v43 = v37[25]; v15 = sub_85DAF0((float *)&v32, &v38, v11); v16 = v33; v43 = 1.0 / v43; v34 = *v15 * v43; v35 = v15[1] * v43; v36 = v43 * v15[2]; if ( v33 && (unsigned __int16)v41 > 0u ) { v17 = (unsigned __int16)v41; do { v18 = sub_85DA90((float *)&v44, (float *)&v32, v16); v16 += 3; --v17; v38 = *v18 + v34; v39 = v18[1] + v35; v19 = v39; v20 = v18[2] + v36; *(v16 - 3) = v38; *(v16 - 2) = v19; v40 = v20; *(v16 - 1) = v40; } while ( v17 ); } v21 = v42; if ( v42 ) { sub_85DB50((float *)&v44, (float *)&v45); if ( (unsigned __int16)v41 > 0u ) { v22 = (unsigned __int16)v41; do { v23 = sub_85DAF0((float *)&v32, (float *)v21, (float *)&v45); *(float *)v21 = *v23; *(float *)(v21 + 4) = v23[1]; *(float *)(v21 + 8) = v23[2]; v21 += 12; --v22; } while ( v22 ); } } LOWORD(v7) = v41; v4 = (int)v37; } else { if ( v9 && (unsigned __int16)v7 > 0u ) { v25 = v9; v7 = (unsigned __int16)v7; do { v26 = sub_85DA90((float *)LODWORD(v43), (float *)&v32, v25); v25 += 3; --v7; v38 = *v26 + *a3; v39 = v26[1] + a3[1]; v27 = v39; v28 = v26[2] + a3[2]; *(v25 - 3) = v38; *(v25 - 2) = v27; v40 = v28; *(v25 - 1) = v40; } while ( v7 ); v4 = (int)v37; LOWORD(v7) = v41; } if ( v42 ) { sub_85DB50((float *)LODWORD(v43), (float *)&v45); if ( (unsigned __int16)v7 > 0u ) { v29 = v42; v42 = (unsigned __int16)v7; do { v30 = sub_85DAF0((float *)&v32, (float *)v29, (float *)&v45); *(float *)v29 = *v30; *(float *)(v29 + 4) = v30[1]; *(float *)(v29 + 8) = v30[2]; v29 += 12; --v42; } while ( v42 ); } } } return sub_86B6C0((float *)(*(_DWORD *)(v4 + 184) + 16), (unsigned __int16)v7, v33); } //----- (0086DFC0) -------------------------------------------------------- void __thiscall sub_86DFC0(_DWORD *this, int a2, _DWORD **a3) { _WORD *v3; // esi v3 = this; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 120))(a2, this[46]); sub_85CD30(v3, a2, a3); } //----- (0086DFF0) -------------------------------------------------------- char __thiscall sub_86DFF0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_85C230(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2[46] + 20))(a2); v4 = v2[47]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (0086E040) -------------------------------------------------------- char __thiscall sub_86E040(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al int v4; // ecx v2 = this; result = sub_85C8D0(this, a2); if ( result ) { v4 = v2[47]; if ( (v4 == 0) == (*(_DWORD *)(a2 + 188) == 0) && (!v4 || (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 188))) ) { result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[46] + 28))(*(_DWORD *)(a2 + 184)); } else { result = 0; } } return result; } //----- (0086E0B0) -------------------------------------------------------- _DWORD *__thiscall sub_86E0B0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_85C9A0(this); *v2 = &NiGeometry::`vftable'; v2[44] = 0; v2[45] = 0; v2[46] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v2[47] = 0; v2[48] = 0; return v2; } // A255D4: using guessed type void *NiGeometry::`vftable'; //----- (0086E100) -------------------------------------------------------- char *sub_86E100() { return dword_BA4840; } //----- (0086E110) -------------------------------------------------------- _DWORD *__thiscall sub_86E110(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85C9A0(this); *v1 = &NiGeometry::`vftable'; v1[44] = 0; v1[45] = 0; v1[46] = 0; v1[47] = 0; v1[48] = 0; return v1; } // A255D4: using guessed type void *NiGeometry::`vftable'; //----- (0086E150) -------------------------------------------------------- LONG __thiscall sub_86E150(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi v1 = this; *this = &NiGeometry::`vftable'; sub_8633D0((int)this); v2 = v1[46]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[46] = 0; } v3 = v1[48]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[47]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[46]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[45]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[44]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); return sub_85C320(v1); } // A255D4: using guessed type void *NiGeometry::`vftable'; //----- (0086E250) -------------------------------------------------------- int __thiscall sub_86E250(_DWORD *this, int a2) { int result; // eax _DWORD *i; // esi result = a2; *(_DWORD *)(a2 + 12) = this[44]; *(_DWORD *)(a2 + 16) = this[45]; for ( i = (_DWORD *)this[3]; i; i = (_DWORD *)i[13] ) result = (*(int (__thiscall **)(_DWORD *))(*i + 88))(i); return result; } //----- (0086E290) -------------------------------------------------------- void __thiscall sub_86E290(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ecx int v4; // esi v2 = this; if ( a2 ) { v3 = this[43]; if ( v3 ) { (*(void (**)(void))(*(_DWORD *)v3 + 68))(); (*(void (**)(void))(*(_DWORD *)v2[43] + 64))(); } v4 = v2[46]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v2[46] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } } } //----- (0086E300) -------------------------------------------------------- int *__thiscall sub_86E300(_DWORD *this, int a2) { _DWORD *v2; // edi int *result; // eax int v4; // esi int **v5; // ebx int (__thiscall ***v6)(_DWORD, signed int); // esi v2 = this; result = sub_85C5E0(this, &a2, a2, 1); v4 = v2[44]; v5 = (int **)result; if ( v4 != *result ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = *v5; v2[44] = *v5; if ( result ) result = (int *)InterlockedIncrement(result + 1); } v6 = (int (__thiscall ***)(_DWORD, signed int))a2; if ( a2 ) { result = (int *)InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( v6 ) result = (int *)(**v6)(v6, 1); } } return result; } //----- (0086E390) -------------------------------------------------------- int __thiscall sub_86E390(_DWORD *this, _BYTE *a2, char a3, bool *a4) { _DWORD *v4; // esi int result; // eax v4 = this; result = sub_85CB60(this, a2, a3, a4); if ( v4[47] ) { *((_WORD *)v4 + 14) |= 4u; *a2 = 1; *((_WORD *)v4 + 14) |= 2u; *a4 = 0; } return result; } //----- (0086E3D0) -------------------------------------------------------- int __thiscall sub_86E3D0(_DWORD *this, char a2) { _DWORD *v2; // ebx _DWORD *v3; // esi signed __int16 v4; // di int v5; // eax bool v6; // zf int result; // eax v2 = this; v3 = (_DWORD *)this[3]; v4 = 0x4000; if ( v3 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 80))(v3) ) { v3 = (_DWORD *)v3[13]; if ( !v3 ) goto LABEL_6; } v4 = -32768; } LABEL_6: v5 = v2[47]; if ( !v5 ) goto LABEL_14; if ( a2 ) { v6 = *(_DWORD *)(v5 + 12) == 0; goto LABEL_12; } if ( !*(_DWORD *)(v5 + 12) ) { LABEL_13: v4 = -32768; goto LABEL_14; } if ( dword_BA46D0 ) { v6 = ((*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 64))() & 2) == 0; LABEL_12: if ( v6 ) goto LABEL_13; } LABEL_14: result = v2[46]; *(_WORD *)(result + 50) = v4 | *(_WORD *)(result + 50) & 0xFFF; return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0086E460) -------------------------------------------------------- int __thiscall sub_86E460(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; sub_85C120(this, a2); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 156))(a2, v2[46]); result = v2[47]; if ( result ) { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 176))(a2, v2[47]); result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 172))(a2, *(_DWORD *)(v2[47] + 12)); } return result; } //----- (0086E4C0) -------------------------------------------------------- char __thiscall sub_86E4C0(_DWORD *this, _DWORD **a2) { _DWORD **v2; // ebx int v3; // esi int v4; // eax int v5; // edi int v6; // ebx int v7; // edi int v8; // eax int v9; // edi int v10; // ecx _DWORD *v11; // eax _DWORD *v12; // edi char *v13; // eax int v14; // eax int v15; // esi _DWORD *v16; // esi int v17; // ST08_4 int v18; // eax int v20; // [esp+Ch] [ebp-4h] int v21; // [esp+18h] [ebp+8h] v2 = a2; v3 = (int)this; sub_85C1F0(this, (int)a2); sub_8C4C90(*a2, v3, &v20); v4 = *(_DWORD *)(v3 + 188); v5 = v20; v21 = v20; if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &v20); if ( (_BYTE)v4 ) { v6 = *(_DWORD *)(v5 + 188); v7 = v20; if ( v6 != v20 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); LOBYTE(v4) = v21; *(_DWORD *)(v21 + 188) = v7; if ( v7 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } else { v8 = (*(int (__stdcall **)(_DWORD **))(**(_DWORD **)(v3 + 188) + 8))(v2); v9 = *(_DWORD *)(v5 + 188); v20 = v8; if ( v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8 = v20; } *(_DWORD *)(v21 + 188) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } LOBYTE(v4) = (*(int (__stdcall **)(_DWORD **))(**(_DWORD **)(v3 + 188) + 40))(v2); } } v10 = *(_DWORD *)(v3 + 192); if ( v10 ) { if ( (*(int (**)(void))(*(_DWORD *)v10 + 4))() == (_DWORD)&unk_BA47C4 ) { v11 = operator new(0x10u); if ( v11 ) v12 = sub_869360(v11); else v12 = 0; v13 = (char *)sub_879520(*(_DWORD **)(v3 + 192)); sub_8693E0((void **)v12, v13); v14 = sub_965070(*(_DWORD **)(v3 + 192)); LOBYTE(v4) = sub_92BCF0(v12, v14); v15 = *(_DWORD *)(v21 + 192); if ( (_DWORD *)v15 != v12 ) { if ( v15 ) { v4 = InterlockedDecrement((volatile LONG *)(v15 + 4)); if ( !v4 ) { if ( v15 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v15)(v15, 1); } } *(_DWORD *)(v21 + 192) = v12; if ( v12 ) LOBYTE(v4) = InterlockedIncrement(v12 + 1); } } else { v16 = *(_DWORD **)(v3 + 192); v17 = sub_965070(v16); v18 = sub_879520(v16); LOBYTE(v4) = sub_863370(v21, v18, v17); } } return v4; } //----- (0086E690) -------------------------------------------------------- void __thiscall sub_86E690(_DWORD *this, int a2) { int v2; // ebx int v3; // esi int v4; // ST08_4 int v5; // eax v2 = (int)this; sub_85B730(this, a2); v3 = *(_DWORD *)(v2 + 192); if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); v4 = sub_965070((_DWORD *)v3); v5 = sub_879520((_DWORD *)v3); sub_863370(v2, v5, v4); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (0086E6F0) -------------------------------------------------------- int __thiscall sub_86E6F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // esi int v5; // ebx int result; // eax int v7; // esi int v8; // ebx v2 = this; sub_85C770(this, a2); v3 = sub_875AD0(a2); v4 = v2[46]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[46] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = sub_875AD0(a2); v7 = v2[47]; v8 = result; if ( v7 != result ) { if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { if ( v7 ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } v2[47] = v8; if ( v8 ) result = InterlockedIncrement((volatile LONG *)(v8 + 4)); } return result; } //----- (0086E7A0) -------------------------------------------------------- void *__thiscall sub_86E7A0(void *this, char a2) { void *v2; // esi v2 = this; sub_86E150(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0086E7D0) -------------------------------------------------------- int __thiscall sub_86E7D0(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int result; // eax int v5; // eax int v6; // ST00_4 int (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax _DWORD *v8; // eax _DWORD *v9; // edi int v10; // esi int v11; // [esp+8h] [ebp-8h] int *v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v12 = this; sub_85CDA0(this, a2); sub_876290((void **)v2); result = sub_876290((void **)v2); if ( *(_DWORD *)(v2 + 28) >= 0x5000015u ) { v5 = *(_DWORD *)(v2 + 352); HIBYTE(a2) = 0; v6 = v5; v7 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v5 + 4); v11 = 1; result = v7(v6, (char *)&a2 + 3, 1, &v11, 1); if ( HIBYTE(a2) ) { v8 = operator new(0x10u); if ( v8 ) v9 = sub_869360(v8); else v9 = 0; v10 = v3[48]; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v12[48] = (int)v9; if ( v9 ) InterlockedIncrement(v9 + 1); } result = sub_8694E0((_DWORD *)v12[48], (_DWORD *)v2); } } return result; } //----- (0086E8B0) -------------------------------------------------------- int __thiscall sub_86E8B0(const char **this, signed int a2) { _DWORD *v2; // esi const char **v3; // edi char *v4; // ecx int v5; // eax int v6; // ST00_4 int (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax int result; // eax int v9; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85D030(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[46]); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[47]); v4 = (char *)v3[48]; HIBYTE(a2) = 0; if ( v4 && sub_879520(v4) ) HIBYTE(a2) = 1; v5 = v2[89]; v6 = v5; v7 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v5 + 8); v9 = 1; result = v7(v6, (char *)&a2 + 3, 1, &v9, 1); if ( HIBYTE(a2) ) result = sub_8694A0((const char **)v3[48], v2); return result; } //----- (0086E940) -------------------------------------------------------- unsigned int __thiscall sub_86E940(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_85D140(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4840); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0086E990) -------------------------------------------------------- int __cdecl sub_86E990(const void *a1, const void *a2) { double v2; // st7 int result; // eax float v4; // [esp+Ch] [ebp+Ch] v4 = *((float *)a2 + 1); v2 = *((float *)a1 + 1); if ( v4 >= v2 ) result = v4 > v2; else result = -1; return result; } //----- (0086E9E0) -------------------------------------------------------- int __cdecl sub_86E9E0(const void *a1, const void *a2) { int result; // eax if ( *(_WORD *)a2 <= *(_WORD *)a1 ) result = *(_WORD *)a2 < *(_WORD *)a1; else result = -1; return result; } //----- (0086EA00) -------------------------------------------------------- int __thiscall sub_86EA00(int this) { signed int v1; // edx int v2; // ebx int v3; // esi int v4; // edi unsigned int v5; // eax unsigned __int16 *v6; // eax unsigned int v7; // edx int v9; // [esp+Ch] [ebp-8h] v1 = *(unsigned __int16 *)(this + 34); v2 = 0; v3 = 0; v4 = 0; v5 = 0; if ( v1 >= 2 ) { v6 = *(unsigned __int16 **)(this + 24); v7 = ((unsigned int)(v1 - 2) >> 1) + 1; v9 = 2 * v7; do { v3 += *v6; v4 += v6[1]; v6 += 2; --v7; } while ( v7 ); v2 = 0; v5 = v9; } if ( v5 < *(unsigned __int16 *)(this + 34) ) v2 = *(unsigned __int16 *)(*(_DWORD *)(this + 24) + 2 * v5); return v2 + v4 + v3; } //----- (0086EA70) -------------------------------------------------------- _DWORD *__thiscall sub_86EA70(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiSkinPartition::`vftable'; v1[3] = 0; return v1; } // A25674: using guessed type void *NiSkinPartition::`vftable'; //----- (0086EA90) -------------------------------------------------------- _DWORD *sub_86EA90() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x10u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiSkinPartition::`vftable'; v1[3] = 0; return v1; } // A25674: using guessed type void *NiSkinPartition::`vftable'; //----- (0086EAC0) -------------------------------------------------------- char __thiscall sub_86EAC0(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v4; // eax int v5; // ebx int v6; // ecx int v7; // edi int v8; // ecx int v9; // esi unsigned int v10; // eax int v11; // ecx int v12; // esi unsigned int v13; // eax int v14; // eax int v15; // ecx int v16; // esi unsigned int v17; // eax int v18; // eax int v19; // ecx int v20; // esi unsigned int v21; // eax int v22; // ecx int v23; // esi signed int v24; // edi unsigned int v25; // eax int v26; // ecx int v27; // edx int v28; // esi unsigned int v29; // eax unsigned __int16 *v30; // eax unsigned int v31; // ecx int v32; // eax int v33; // eax int v34; // ecx int v35; // esi unsigned int v36; // eax unsigned int v37; // [esp+8h] [ebp-18h] unsigned int v38; // [esp+Ch] [ebp-14h] int v39; // [esp+10h] [ebp-10h] int v40; // [esp+18h] [ebp-8h] unsigned int v41; // [esp+1Ch] [ebp-4h] int *i; // [esp+28h] [ebp+8h] v2 = this; if ( !sub_85BB20(this, a2) ) return 0; v4 = v2[2]; v37 = v4; if ( v4 != *(_DWORD *)(a2 + 8) ) return 0; v41 = 0; if ( !v4 ) return 1; v5 = v2[3]; v6 = *(_DWORD *)(a2 + 12) + 8; v40 = v2[3]; for ( i = (int *)(*(_DWORD *)(a2 + 12) + 8); ; v6 = (int)i ) { v7 = *(unsigned __int16 *)(v5 + 28); if ( *(_DWORD *)(v5 + 28) != *(_DWORD *)(v6 + 20) || *(_DWORD *)(v5 + 32) != *(_DWORD *)(v6 + 24) || *(_WORD *)(v5 + 36) != *(_WORD *)(v6 + 28) ) { break; } v8 = *(_DWORD *)(v6 - 4); v9 = *(_DWORD *)(v5 + 4); v10 = 2 * *(unsigned __int16 *)(v5 + 32); if ( v10 >= 4 ) { while ( *(_DWORD *)v9 == *(_DWORD *)v8 ) { v10 -= 4; v8 += 4; v9 += 4; if ( v10 < 4 ) goto LABEL_12; } return 0; } LABEL_12: if ( v10 && (*(_BYTE *)v8 != *(_BYTE *)v9 || v10 > 1 && (*(_BYTE *)(v8 + 1) != *(_BYTE *)(v9 + 1) || v10 > 2 && *(_BYTE *)(v8 + 2) != *(_BYTE *)(v9 + 2))) ) { return 0; } v11 = i[1]; v12 = *(_DWORD *)(v5 + 12); v13 = 2 * v7; if ( (unsigned int)(2 * v7) >= 4 ) { while ( *(_DWORD *)v12 == *(_DWORD *)v11 ) { v13 -= 4; v11 += 4; v12 += 4; if ( v13 < 4 ) goto LABEL_21; } return 0; } LABEL_21: if ( v13 && (*(_BYTE *)v11 != *(_BYTE *)v12 || v13 > 1 && (*(_BYTE *)(v11 + 1) != *(_BYTE *)(v12 + 1) || v13 > 2 && *(_BYTE *)(v11 + 2) != *(_BYTE *)(v12 + 2))) ) { return 0; } v14 = v7 * *(unsigned __int16 *)(v5 + 36); v15 = *i; v16 = *(_DWORD *)(v5 + 8); v38 = v14; v17 = 4 * v14; if ( v17 >= 4 ) { while ( *(_DWORD *)v16 == *(_DWORD *)v15 ) { v17 -= 4; v15 += 4; v16 += 4; if ( v17 < 4 ) goto LABEL_30; } return 0; } LABEL_30: if ( v17 && (*(_BYTE *)v15 != *(_BYTE *)v16 || v17 > 1 && (*(_BYTE *)(v15 + 1) != *(_BYTE *)(v16 + 1) || v17 > 2 && *(_BYTE *)(v15 + 2) != *(_BYTE *)(v16 + 2))) ) { return 0; } v18 = *(unsigned __int16 *)(v5 + 34); if ( (_WORD)v18 ) { v22 = i[4]; v23 = *(_DWORD *)(v5 + 24); v24 = *(unsigned __int16 *)(v5 + 34); v25 = 2 * v18; if ( v25 >= 4 ) { while ( *(_DWORD *)v23 == *(_DWORD *)v22 ) { v25 -= 4; v22 += 4; v23 += 4; if ( v25 < 4 ) goto LABEL_44; } return 0; } LABEL_44: if ( v25 && (*(_BYTE *)v22 != *(_BYTE *)v23 || v25 > 1 && (*(_BYTE *)(v22 + 1) != *(_BYTE *)(v23 + 1) || v25 > 2 && *(_BYTE *)(v22 + 2) != *(_BYTE *)(v23 + 2))) ) { return 0; } v26 = 0; v27 = 0; v28 = 0; v29 = 0; if ( v24 >= 2 ) { v30 = *(unsigned __int16 **)(v5 + 24); v31 = ((unsigned int)(v24 - 2) >> 1) + 1; v39 = 2 * v31; do { v27 += *v30; v28 += v30[1]; v30 += 2; --v31; } while ( v31 ); v26 = 0; v29 = v39; v5 = v40; } if ( v29 < v24 ) v26 = *(unsigned __int16 *)(*(_DWORD *)(v5 + 24) + 2 * v29); v32 = v27 + v28; v20 = *(_DWORD *)(v5 + 20); v33 = v26 + v32; v19 = i[3]; v21 = 2 * v33; if ( v21 >= 4 ) { while ( *(_DWORD *)v20 == *(_DWORD *)v19 ) { v21 -= 4; v19 += 4; v20 += 4; if ( v21 < 4 ) goto LABEL_59; } return 0; } } else { v19 = i[3]; v20 = *(_DWORD *)(v5 + 20); v21 = 6 * *(unsigned __int16 *)(v5 + 30); if ( v21 >= 4 ) { while ( *(_DWORD *)v20 == *(_DWORD *)v19 ) { v21 -= 4; v19 += 4; v20 += 4; if ( v21 < 4 ) goto LABEL_59; } return 0; } } LABEL_59: if ( v21 && (*(_BYTE *)v19 != *(_BYTE *)v20 || v21 > 1 && (*(_BYTE *)(v19 + 1) != *(_BYTE *)(v20 + 1) || v21 > 2 && *(_BYTE *)(v19 + 2) != *(_BYTE *)(v20 + 2))) ) { return 0; } v34 = i[2]; v35 = *(_DWORD *)(v5 + 16); if ( (v35 == 0) != (v34 == 0) ) return 0; if ( v35 ) { v36 = v38; if ( v38 >= 4 ) { while ( *(_DWORD *)v35 == *(_DWORD *)v34 ) { v36 -= 4; v34 += 4; v35 += 4; if ( v36 < 4 ) goto LABEL_70; } return 0; } LABEL_70: if ( v36 && (*(_BYTE *)v34 != *(_BYTE *)v35 || v36 > 1 && (*(_BYTE *)(v34 + 1) != *(_BYTE *)(v35 + 1) || v36 > 2 && *(_BYTE *)(v34 + 2) != *(_BYTE *)(v35 + 2))) ) { return 0; } } i += 11; v5 += 44; ++v41; v40 = v5; if ( v41 >= v37 ) return 1; } return 0; } //----- (0086EE40) -------------------------------------------------------- int __thiscall sub_86EE40(_DWORD *this, int a2, float a3) { int v3; // ebx _DWORD *v4; // esi int v5; // eax _DWORD *v6; // edi _DWORD *v7; // edi int result; // eax int v9; // [esp+28h] [ebp+8h] v3 = a2; v4 = this; v5 = (*(int (__stdcall **)(int))(*this + 4))(a2); v6 = *(_DWORD **)(v4[2] + 4 * v5); v9 = v5; if ( v6 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v4 + 8))(v4, v3, v6[1]) ) { v6 = (_DWORD *)*v6; if ( !v6 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 16))(v4, v6); result = (*(int (__thiscall **)(_DWORD *, _DWORD *, int, _DWORD))(*v4 + 12))(v4, v6, v3, LODWORD(a3)); } else { LABEL_4: v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 20))(v4); (*(void (__thiscall **)(_DWORD *, _DWORD *, int, _DWORD))(*v4 + 12))(v4, v7, v3, LODWORD(a3)); result = v9; *v7 = *(_DWORD *)(v4[2] + 4 * v9); *(_DWORD *)(v4[2] + 4 * v9) = v7; ++v4[3]; } return result; } //----- (0086EEE0) -------------------------------------------------------- int __stdcall sub_86EEE0(int a1, int a2, float a3) { int result; // eax result = a1; *(float *)(a1 + 8) = a3; *(_DWORD *)(a1 + 4) = a2; return result; } //----- (0086EF00) -------------------------------------------------------- void __thiscall sub_86EF00(void **this, void *a2) { void **v2; // esi _WORD *v3; // edi unsigned int v4; // eax v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = operator new(2 * (_DWORD)a2); v4 = 0; if ( v2[2] ) { do { v3[v4] = *((_WORD *)*v2 + v4); ++v4; } while ( v4 < (unsigned int)v2[2] ); } } else { v3 = 0; } operator delete(*v2); *v2 = v3; v2[1] = a2; } } //----- (0086EF70) -------------------------------------------------------- void *sub_86EF70() { return &unk_BA4848; } //----- (0086EF80) -------------------------------------------------------- unsigned int __thiscall sub_86EF80(_DWORD *this) { signed int v1; // edi unsigned int v2; // esi int v3; // eax unsigned int v4; // edx double v5; // st7 float v6; // ST08_4 float v7; // ST08_4 float v8; // ST08_4 float *v9; // edx int v10; // eax double v11; // st7 unsigned int result; // eax double v13; // st6 float *v14; // edx float v15; // [esp+8h] [ebp-4h] float v16; // [esp+8h] [ebp-4h] v15 = 0.0; v1 = this[2]; v2 = 0; if ( v1 >= 4 ) { v3 = *this + 12; v4 = ((unsigned int)(v1 - 4) >> 2) + 1; v2 = 4 * v4; do { v5 = *(float *)(v3 - 8); v3 += 32; --v4; v6 = v5 + v15; v7 = v6 + *(float *)(v3 - 32); v8 = v7 + *(float *)(v3 - 24); v15 = v8 + *(float *)(v3 - 16); } while ( v4 ); } if ( v2 < v1 ) { v9 = (float *)(*this + 8 * v2 + 4); v10 = v1 - v2; do { v11 = *v9; v9 += 2; --v10; v15 = v11 + v15; } while ( v10 ); } result = 0; v16 = 1.0 / v15; if ( v1 ) { do { v13 = v16 * *(float *)(*this + 8 * result + 4); v14 = (float *)(*this + 8 * result++ + 4); *v14 = v13; } while ( result < this[2] ); } return result; } //----- (0086F020) -------------------------------------------------------- char __thiscall sub_86F020(_DWORD *this, _DWORD *a2) { unsigned int v2; // eax unsigned int v3; // esi unsigned int v4; // edi bool v5; // zf _WORD *v6; // edx unsigned int v8; // [esp+Ch] [ebp-4h] v2 = 0; v3 = 0; v8 = a2[2]; if ( !v8 ) return 1; v4 = this[2]; while ( 1 ) { v5 = v2 == v4; if ( v2 < v4 ) { v6 = (_WORD *)(*this + 2 * v2); do { if ( *v6 >= *(_WORD *)(*a2 + 2 * v3) ) break; ++v2; ++v6; } while ( v2 < v4 ); v5 = v2 == v4; } if ( v5 || *(_WORD *)(*this + 2 * v2) != *(_WORD *)(*a2 + 2 * v3) ) break; ++v3; ++v2; if ( v3 >= v8 ) return 1; } return 0; } //----- (0086F0A0) -------------------------------------------------------- char __thiscall sub_86F0A0(const void **this, _DWORD *a2) { _DWORD *v2; // ebx int v3; // esi const void **v4; // edi size_t v5; // ST08_4 const void *v6; // ST04_4 unsigned int v8; // [esp+Ch] [ebp-4h] v2 = a2; v3 = 0; v4 = this; v8 = a2[2]; if ( !v8 ) return 1; while ( 1 ) { v5 = (size_t)v4[2]; v6 = *v4; a2 = (_DWORD *)*(unsigned __int16 *)(*v2 + 8 * v3); if ( !bsearch(&a2, v6, v5, 2u, sub_86E9E0) ) break; if ( ++v3 >= v8 ) return 1; } return 0; } //----- (0086F110) -------------------------------------------------------- int __thiscall sub_86F110(unsigned __int16 *this) { int v1; // edx unsigned __int16 v2; // si _DWORD *v3; // esi int result; // eax unsigned int v5; // edx unsigned int v6; // edx _DWORD *v7; // esi signed __int16 v8; // dx _DWORD *v9; // esi v1 = this[5]; v2 = this[4]; if ( (unsigned __int16)v1 >= v2 ) { result = this[4]; if ( (_WORD)v1 == v2 ) { v6 = ++*((_DWORD *)this + 1); v7 = (_DWORD *)*((_DWORD *)this + 4); if ( v6 >= v7[2] ) v8 = -1; else v8 = *(_WORD *)(*v7 + 2 * v6); this[5] = v8; } ++*(_DWORD *)this; v9 = (_DWORD *)*((_DWORD *)this + 3); if ( *(_DWORD *)this >= v9[2] ) this[4] = -1; else this[4] = *(_WORD *)(*v9 + 2 * *(_DWORD *)this); } else { ++*((_DWORD *)this + 1); v3 = (_DWORD *)*((_DWORD *)this + 4); result = v1; v5 = *((_DWORD *)this + 1); if ( v5 >= v3[2] ) this[5] = -1; else this[5] = *(_WORD *)(*v3 + 2 * v5); } return result; } //----- (0086F190) -------------------------------------------------------- char *__thiscall sub_86F190(_WORD *this, _DWORD *a2, unsigned __int16 *a3) { char *v3; // eax char *v4; // esi char *v5; // edi int i; // ecx int v7; // edi unsigned int v8; // ecx int v9; // eax void *v10; // eax unsigned int v11; // eax int v12; // ecx unsigned int v14; // [esp+10h] [ebp-18h] unsigned int j; // [esp+14h] [ebp-14h] _WORD *v16; // [esp+18h] [ebp-10h] __int16 v17; // [esp+1Ch] [ebp-Ch] char v18; // [esp+1Eh] [ebp-Ah] char v19; // [esp+20h] [ebp-8h] v16 = this; v14 = a3[6]; v3 = (char *)operator new(2 * v14); v4 = v3; if ( v14 ) { memset(v3, 0xFFu, 4 * (v14 >> 1)); v5 = &v3[4 * (v14 >> 1)]; for ( i = v14 & 1; i; --i ) { *(_WORD *)v5 = -1; v5 += 2; } } v7 = 0; for ( j = 0; j < (unsigned __int16)v16[15]; ++j ) { (*(void (__thiscall **)(unsigned __int16 *, _DWORD, __int16 *, char *, char *))(*(_DWORD *)a3 + 80))( a3, *(unsigned __int16 *)(*a2 + 2 * j), &v17, &v18, &v19); v8 = 0; do { v9 = (unsigned __int16)*(&v17 + v8); if ( *(_WORD *)&v4[2 * v9] == -1 ) *(_WORD *)&v4[2 * v9] = v7++; ++v8; } while ( v8 < 3 ); } v10 = operator new(2 * v7); v16[14] = v7; *((_DWORD *)v16 + 3) = v10; v11 = 0; if ( v14 ) { do { v12 = *(unsigned __int16 *)&v4[2 * v11]; if ( (_WORD)v12 != -1 ) *(_WORD *)(*((_DWORD *)v16 + 3) + 2 * v12) = v11; ++v11; } while ( v11 < v14 ); } return v4; } //----- (0086F2C0) -------------------------------------------------------- unsigned int __thiscall sub_86F2C0(int this, _DWORD *a2, int a3, int a4) { int v4; // esi unsigned int result; // eax unsigned int v6; // edi int v7; // eax int v8; // [esp+10h] [ebp-10h] unsigned __int16 v9; // [esp+14h] [ebp-Ch] unsigned __int16 v10; // [esp+16h] [ebp-Ah] unsigned __int16 v11; // [esp+18h] [ebp-8h] v4 = this; *(_DWORD *)(this + 20) = operator new(6 * *(unsigned __int16 *)(this + 30)); result = 0; v6 = 0; if ( *(_WORD *)(v4 + 30) > 0u ) { v8 = 0; do { (*(void (__stdcall **)(_DWORD, unsigned __int16 *, unsigned __int16 *, unsigned __int16 *))(*(_DWORD *)a3 + 80))( *(unsigned __int16 *)(*a2 + 2 * v6), &v9, &v10, &v11); v7 = *(_DWORD *)(v4 + 20); *(_WORD *)(v7 + v8) = *(_WORD *)(a4 + 2 * v9); *(_WORD *)(v7 + v8 + 2) = *(_WORD *)(a4 + 2 * v10); *(_WORD *)(v7 + v8 + 4) = *(_WORD *)(a4 + 2 * v11); result = *(unsigned __int16 *)(v4 + 30); ++v6; v8 += 6; } while ( v6 < result ); } return result; } //----- (0086F390) -------------------------------------------------------- _DWORD *__thiscall sub_86F390(void *this, char a2) { _DWORD *v2; // esi void (__stdcall ***v3)(signed int); // ecx v2 = this; *(_DWORD *)this = &NiSkinPartition::`vftable'; sub_85F330((int)this); v3 = (void (__stdcall ***)(signed int))v2[3]; if ( v3 ) { if ( *(v3 - 1) ) (**v3)(3); else operator delete(v3 - 1); } sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A25674: using guessed type void *NiSkinPartition::`vftable'; //----- (0086F3F0) -------------------------------------------------------- _DWORD *__stdcall sub_86F3F0(_DWORD *a1, int a2, int a3) { unsigned int v3; // edx _DWORD *v4; // edi _DWORD *result; // eax int v6; // ebx float *v7; // esi double v8; // st7 int v9; // esi __int16 v10; // fps double v11; // st6 bool v12; // c0 char v13; // c2 bool v14; // c3 unsigned int v15; // [esp+1Ch] [ebp-10h] unsigned int v16; // [esp+24h] [ebp-8h] _DWORD *v17; // [esp+28h] [ebp-4h] int v18; // [esp+34h] [ebp+8h] v3 = 0; v4 = a1; v16 = 0; do { result = (_DWORD *)(a3 + 12 * *(unsigned __int16 *)(a2 + 2 * v3)); v17 = (_DWORD *)(a3 + 12 * *(unsigned __int16 *)(a2 + 2 * v3)); v15 = result[2]; v18 = 0; if ( v15 ) { while ( 1 ) { v6 = *(_DWORD *)(*result + 8 * v18); v7 = *(float **)(v4[2] + 4 * (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 4))(v4, *(_DWORD *)(*result + 8 * v18))); if ( !v7 ) goto LABEL_10; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, int))(*v4 + 8))(v4, v6, *((_DWORD *)v7 + 1)) ) { v7 = *(float **)v7; if ( !v7 ) goto LABEL_10; } HIWORD(result) = HIWORD(v17); v8 = v7[2]; v9 = v18; v11 = *(float *)(*v17 + 8 * v18 + 4); v12 = v11 < v8; v13 = 0; v14 = v11 == v8; LOWORD(result) = v10; if ( v11 > v8 ) { LABEL_10: v9 = v18; result = (_DWORD *)sub_86EE40(v4, v6, *(float *)(*v17 + 8 * v18 + 4)); } v18 = v9 + 1; if ( v9 + 1 >= v15 ) break; result = v17; } v3 = v16; } v16 = ++v3; } while ( v3 < 3 ); return result; } //----- (0086F4C0) -------------------------------------------------------- void **__thiscall sub_86F4C0(void *this, char a2) { void **v2; // esi char *v3; // ebx int v4; // edi void **v5; // esi void *v6; // eax void **result; // eax void *v8; // ST1C_4 char *v9; // [esp+4h] [ebp-4h] v2 = (void **)this; if ( a2 & 2 ) { v3 = (char *)this - 4; v4 = *((_DWORD *)this - 1) - 1; v9 = (char *)this - 4; if ( v4 >= 0 ) { v5 = (void **)((char *)this + 44 * *((_DWORD *)this - 1) + 8); do { v6 = *(v5 - 12); v5 -= 11; *(v5 - 2) = &NiSkinPartition::Partition::`vftable'; operator delete(v6); operator delete(*v5); operator delete(v5[1]); operator delete(v5[2]); operator delete(v5[3]); operator delete(v5[4]); --v4; } while ( v4 >= 0 ); v3 = v9; } if ( a2 & 1 ) operator delete(v3); result = (void **)v3; } else { v8 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiSkinPartition::Partition::`vftable'; operator delete(v8); operator delete(v2[2]); operator delete(v2[3]); operator delete(v2[4]); operator delete(v2[5]); operator delete(v2[6]); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } // A25668: using guessed type void *NiSkinPartition::Partition::`vftable'; //----- (0086F5A0) -------------------------------------------------------- void __stdcall sub_86F5A0(int a1) { bool v1; // zf *(float *)(a1 + 8) = 0.0; EnterCriticalSection(&CriticalSection); dword_BA4710 = GetCurrentThreadId(); ++dword_BA4714; *(_DWORD *)(a1 + 4) = 0; *(_DWORD *)a1 = dword_BA46F4; v1 = dword_BA4714-- == 1; dword_BA46F4 = a1; if ( v1 ) dword_BA4710 = 0; LeaveCriticalSection(&CriticalSection); } // BA46F4: using guessed type int dword_BA46F4; // BA4710: using guessed type int dword_BA4710; // BA4714: using guessed type int dword_BA4714; //----- (0086F600) -------------------------------------------------------- void **__thiscall sub_86F600(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,float>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A256B4: using guessed type void *NiTMapBase,unsigned int,float>::`vftable'; //----- (0086F640) -------------------------------------------------------- void __thiscall sub_86F640(__int16 **this, int a2) { int v2; // esi __int16 v3; // dx __int16 *v4; // ecx int v5; // ebx __int16 v6; // dx int v7; // edi int v8; // [esp+Ch] [ebp-14h] int v9; // [esp+10h] [ebp-10h] __int16 v10; // [esp+14h] [ebp-Ch] __int16 v11; // [esp+16h] [ebp-Ah] int v12; // [esp+18h] [ebp-8h] int v13; // [esp+1Ch] [ebp-4h] _WORD *v14; // [esp+28h] [ebp+8h] v2 = (int)this; v3 = **this; v4 = *(__int16 **)a2; v5 = *(_DWORD *)(v2 + 8) + *(_DWORD *)(a2 + 8); v10 = v3; v6 = *v4; v13 = a2; v11 = v6; v7 = 0; v12 = v2; v9 = 0; v8 = 0; v14 = operator new(2 * v5); while ( v10 != -1 || v11 != -1 ) v14[v7++] = sub_86F110((unsigned __int16 *)&v8); operator delete(*(void **)v2); *(_DWORD *)(v2 + 8) = v7; *(_DWORD *)(v2 + 4) = v5; *(_DWORD *)v2 = v14; } //----- (0086F6E0) -------------------------------------------------------- void __thiscall sub_86F6E0(void **this, int a2, int a3, unsigned int a4) { unsigned int v4; // edi void **v5; // esi void *v6; // eax void *v7; // eax v4 = 0; v5 = this; if ( a4 ) { do { if ( *(_DWORD *)(a3 + 4 * v4) == a2 ) { v6 = v5[1]; if ( v5[2] == v6 ) { if ( v6 ) v7 = (void *)(2 * (_DWORD)v6); else v7 = (void *)1; sub_86EF00(v5, v7); } *((_WORD *)*v5 + (_DWORD)v5[2]) = v4; v5[2] = (char *)v5[2] + 1; } ++v4; } while ( v4 < a4 ); } } //----- (0086F740) -------------------------------------------------------- void __thiscall sub_86F740(int this, int a2, int a3, int a4, int a5, void *a6, int a7, int a8, size_t a9) { _DWORD *v9; // ebx signed int v10; // eax int v11; // esi unsigned int i; // eax __int16 v13; // cx char *v14; // edi int v15; // edi int v16; // ecx size_t v17; // edi signed __int64 v18; // rax _BYTE *v19; // eax unsigned int v20; // ecx float *v21; // edi int v22; // ebx int *v23; // edx unsigned int v24; // eax float *v25; // ecx int v26; // edx int v27; // ebx unsigned int v28; // ebx unsigned int v29; // edx unsigned int v30; // ecx int v31; // eax int v32; // edi signed __int64 v33; // rax float *v34; // edi unsigned int v35; // ecx int v36; // edx unsigned int v37; // eax unsigned int v38; // edi unsigned int v39; // ecx int v40; // ebx _DWORD *v41; // edx _BYTE *v42; // eax _BYTE *v43; // ecx unsigned int l; // edx unsigned int m; // eax int v46; // [esp+14h] [ebp+8h] unsigned int v47; // [esp+14h] [ebp+8h] float v48; // [esp+14h] [ebp+8h] float *v49; // [esp+18h] [ebp+Ch] _BYTE *v50; // [esp+1Ch] [ebp+10h] _DWORD *v51; // [esp+1Ch] [ebp+10h] _BYTE *v52; // [esp+24h] [ebp+18h] float *v53; // [esp+24h] [ebp+18h] _BYTE *v54; // [esp+28h] [ebp+1Ch] int v55; // [esp+28h] [ebp+1Ch] unsigned int j; // [esp+2Ch] [ebp+20h] int k; // [esp+2Ch] [ebp+20h] _BYTE *v58; // [esp+30h] [ebp+24h] size_t v59; // [esp+30h] [ebp+24h] v9 = (_DWORD *)a3; v10 = *(_DWORD *)(a3 + 8); v11 = this; if ( v10 <= (unsigned __int8)a8 ) LOWORD(v10) = (unsigned __int8)a8; *(_WORD *)(this + 32) = v10; *(_WORD *)(this + 30) = *(_WORD *)(a2 + 8); *(_DWORD *)(this + 4) = operator new(2 * (unsigned __int16)v10); for ( i = 0; i < *(unsigned __int16 *)(v11 + 32); *(_WORD *)(*(_DWORD *)(v11 + 4) + 2 * i++) = v13 ) { if ( i >= *(_DWORD *)(a3 + 8) ) v13 = 0; else v13 = *(_WORD *)(*(_DWORD *)a3 + 2 * i); } v14 = sub_86F190((_WORD *)v11, (_DWORD *)a2, (unsigned __int16 *)a4); sub_86F2C0(v11, (_DWORD *)a2, a4, (int)v14); operator delete(v14); v15 = *(unsigned __int16 *)(v11 + 28); v16 = 0; if ( (_BYTE)a6 ) { v17 = (unsigned __int8)a8 * v15; *(_WORD *)(v11 + 36) = (unsigned __int8)a8; v18 = 4i64 * v17; LOBYTE(v16) = HIDWORD(v18) != 0; *(_DWORD *)(v11 + 8) = operator new(v18 | -v16); *(_DWORD *)(v11 + 16) = operator new(v17); v19 = operator new(4 * a9); v20 = 0; v58 = v19; if ( *(_DWORD *)(a3 + 8) ) { do { *(_DWORD *)&v19[4 * *(unsigned __int16 *)(*(_DWORD *)(v11 + 4) + 2 * v20)] = v20; ++v20; } while ( v20 < *(_DWORD *)(a3 + 8) ); } v49 = *(float **)(v11 + 8); v50 = *(_BYTE **)(v11 + 16); v21 = (float *)operator new(4 * *(unsigned __int16 *)(v11 + 36)); v52 = operator new(*(unsigned __int16 *)(v11 + 36)); for ( j = 0; j < *(unsigned __int16 *)(v11 + 28); ++j ) { v22 = (int)v52; v23 = (int *)(a5 + 12 * *(unsigned __int16 *)(*(_DWORD *)(v11 + 12) + 2 * j)); v24 = 0; v46 = (int)v23; v25 = v21; v54 = v52; if ( v23[2] ) { do { v26 = *v23; *v25 = *(float *)(v26 + 8 * v24 + 4); *v54 = v58[4 * *(_DWORD *)(v26 + 8 * v24)]; v23 = (int *)v46; v22 = (int)(v54 + 1); ++v24; ++v25; ++v54; } while ( v24 < *(_DWORD *)(v46 + 8) ); } if ( v24 < *(unsigned __int16 *)(v11 + 36) ) { v27 = v22 - v24; do { ++v24; *v25 = 0.0; *(_BYTE *)(v27 + v24 - 1) = 0; ++v25; } while ( v24 < *(unsigned __int16 *)(v11 + 36) ); } v47 = 0; if ( *(_WORD *)(v11 + 36) > 0u ) { v28 = *(unsigned __int16 *)(v11 + 36); do { v29 = 1; v55 = *(int *)v21; v30 = 0; if ( *(_WORD *)(v11 + 36) > 1u ) { do { if ( *(float *)&v55 < (double)v21[v29] ) { v30 = v29; v55 = SLODWORD(v21[v29]); } ++v29; } while ( v29 < v28 ); } *v49 = v21[v30]; ++v49; *v50 = v52[v30]; v21[v30] = -3.4028235e38; v28 = *(unsigned __int16 *)(v11 + 36); ++v50; ++v47; } while ( v47 < v28 ); } } operator delete(v21); operator delete(v52); operator delete(v58); } else { v31 = *(unsigned __int16 *)(v11 + 32); v32 = v31 * v15; *(_WORD *)(v11 + 36) = v31; v33 = 4i64 * (unsigned int)v32; LOBYTE(v16) = HIDWORD(v33) != 0; v59 = v32; v34 = (float *)operator new(v33 | -v16); *(_DWORD *)(v11 + 8) = v34; v35 = 0; v53 = v34; for ( k = 0; v35 < *(unsigned __int16 *)(v11 + 28); k = ++v35 ) { v36 = a5 + 12 * *(unsigned __int16 *)(*(_DWORD *)(v11 + 12) + 2 * v35); v37 = 0; v51 = (_DWORD *)(a5 + 12 * *(unsigned __int16 *)(*(_DWORD *)(v11 + 12) + 2 * v35)); if ( v9[2] ) { do { v38 = *(_DWORD *)(v36 + 8); v39 = 0; if ( v38 ) { v40 = *(unsigned __int16 *)(*v9 + 2 * v37); v41 = *(_DWORD **)v36; while ( *v41 != v40 ) { ++v39; v41 += 2; if ( v39 >= v38 ) { v9 = (_DWORD *)a3; v36 = (int)v51; goto LABEL_33; } } v36 = (int)v51; v9 = (_DWORD *)a3; v48 = *(float *)(*v51 + 8 * v39 + 4); } else { LABEL_33: v48 = 0.0; } *v53 = v48; ++v37; ++v53; } while ( v37 < v9[2] ); v35 = k; v34 = v53; } if ( v37 < *(unsigned __int16 *)(v11 + 32) ) { do { *v34 = 0.0; ++v37; ++v34; } while ( v37 < *(unsigned __int16 *)(v11 + 32) ); v53 = v34; } } if ( (_BYTE)a7 ) { v42 = operator new(v59); *(_DWORD *)(v11 + 16) = v42; v43 = v42; for ( l = 0; l < *(unsigned __int16 *)(v11 + 28); ++l ) { for ( m = 0; m < *(unsigned __int16 *)(v11 + 32); *v43++ = m++ ) ; } } } } //----- (0086FAE0) -------------------------------------------------------- int __thiscall sub_86FAE0(char *this, int a2) { int v2; // esi int v3; // eax int v4; // edi int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int, signed int, int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, int, signed int, int *, signed int); // edx int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int, signed int, int *, signed int); // eax int v15; // eax int v16; // ST3C_4 void (__cdecl *v17)(int, int, signed int, int *, signed int); // eax void *v18; // eax int v19; // ST2C_4 int v20; // ecx int v21; // eax int v22; // ST3C_4 void (__cdecl *v23)(int, char *, signed int, int *, signed int); // eax void *v24; // eax int v25; // ST40_4 void *v26; // ST3C_4 void (__cdecl *v27)(int, void *, int, int *, signed int); // eax int v28; // ST38_4 int v29; // ecx int v30; // ebx bool v31; // cf void (__cdecl *v32)(int, char *, signed int, int *, signed int); // edx int v33; // ST3C_4 void *v34; // eax void *v35; // ST3C_4 void (__cdecl *v36)(int, void *, int, int *, signed int); // eax int v37; // ST38_4 int v38; // ebx void *v39; // eax int v40; // ST40_4 void *v41; // ST3C_4 void (__cdecl *v42)(int, void *, int, int *, signed int); // eax int v43; // ST38_4 int v44; // eax int v45; // ST3C_4 void (__cdecl *v46)(int, char *, signed int, int *, signed int); // eax void *v47; // eax void *v48; // ST3C_4 void (__cdecl *v49)(int, void *, int, int *, signed int); // eax int v50; // ST38_4 int v51; // eax int v52; // ST3C_4 int (__cdecl *v53)(int, char *, signed int, int *, signed int); // eax int result; // eax size_t v55; // ebx void *v56; // eax int v57; // esi int (__cdecl *v58)(int, void *, size_t, size_t *, signed int); // edx size_t v59; // [esp+Ch] [ebp-Ch] int v60; // [esp+10h] [ebp-8h] char v61; // [esp+15h] [ebp-3h] char v62; // [esp+16h] [ebp-2h] char v63; // [esp+17h] [ebp-1h] v2 = a2; v3 = *(_DWORD *)(a2 + 352); v4 = (int)this; v5 = v3; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v3 + 4); v60 = 2; v6(v5, this + 28, 2, &v60, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v7 + 4); v60 = 2; v9(v8, v4 + 30, 2, &v60, 1); v10 = *(_DWORD *)(v2 + 352); v11 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v10 + 4); v60 = 2; v11(v10, v4 + 32, 2, &v60, 1); v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v12 + 4); v60 = 2; v14(v13, v4 + 34, 2, &v60, 1); v15 = *(_DWORD *)(v2 + 352); v16 = v15; v17 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v15 + 4); v60 = 2; v17(v16, v4 + 36, 2, &v60, 1); v18 = operator new(2 * *(unsigned __int16 *)(v4 + 32)); v19 = 2 * *(unsigned __int16 *)(v4 + 32); *(_DWORD *)(v4 + 4) = v18; v20 = *(_DWORD *)(v2 + 352); v60 = 2; (*(void (__cdecl **)(int, void *, int, int *, signed int))(v20 + 4))(v20, v18, v19, &v60, 1); if ( *(_DWORD *)(v2 + 28) < 0xA000112u ) { HIBYTE(a2) = 1; } else { v21 = *(_DWORD *)(v2 + 352); v22 = v21; v23 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v21 + 4); v60 = 1; v23(v22, (char *)&a2 + 3, 1, &v60, 1); if ( !HIBYTE(a2) ) goto LABEL_4; } v24 = operator new(2 * *(unsigned __int16 *)(v4 + 28)); v25 = 2 * *(unsigned __int16 *)(v4 + 28); *(_DWORD *)(v4 + 12) = v24; v26 = v24; v27 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v28 = *(_DWORD *)(v2 + 352); v60 = 2; v27(v28, v26, v25, &v60, 1); LABEL_4: v29 = *(unsigned __int16 *)(v4 + 28); v30 = v29 * *(unsigned __int16 *)(v4 + 36); v31 = *(_DWORD *)(v2 + 28) < 0xA000112u; v59 = v29 * *(unsigned __int16 *)(v4 + 36); if ( v31 ) { v63 = 1; } else { v32 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v33 = *(_DWORD *)(v2 + 352); v60 = 1; v32(v33, &v63, 1, &v60, 1); if ( !v63 ) goto LABEL_7; } v34 = operator new(4 * v30); *(_DWORD *)(v4 + 8) = v34; v35 = v34; v36 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v37 = *(_DWORD *)(v2 + 352); v60 = 4; v36(v37, v35, 4 * v30, &v60, 1); LABEL_7: if ( *(_WORD *)(v4 + 34) ) { v39 = operator new(2 * *(unsigned __int16 *)(v4 + 34)); v40 = 2 * *(unsigned __int16 *)(v4 + 34); *(_DWORD *)(v4 + 24) = v39; v41 = v39; v42 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v43 = *(_DWORD *)(v2 + 352); v60 = 2; v42(v43, v41, v40, &v60, 1); v38 = sub_86EA00(v4); } else { v38 = 3 * *(unsigned __int16 *)(v4 + 30); } if ( *(_DWORD *)(v2 + 28) < 0xA000112u ) { v62 = 1; } else { v44 = *(_DWORD *)(v2 + 352); v45 = v44; v46 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v44 + 4); v60 = 1; v46(v45, &v62, 1, &v60, 1); if ( !v62 ) goto LABEL_15; } v47 = operator new(2 * v38); *(_DWORD *)(v4 + 20) = v47; v48 = v47; v49 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v50 = *(_DWORD *)(v2 + 352); v60 = 2; v49(v50, v48, 2 * v38, &v60, 1); LABEL_15: v51 = *(_DWORD *)(v2 + 352); v52 = v51; v53 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v51 + 4); v60 = 1; result = v53(v52, &v61, 1, &v60, 1); if ( v61 ) { v55 = v59; v56 = operator new(v59); *(_DWORD *)(v4 + 16) = v56; v57 = *(_DWORD *)(v2 + 352); v58 = *(int (__cdecl **)(int, void *, size_t, size_t *, signed int))(v57 + 4); v59 = 1; result = v58(v57, v56, v55, &v59, 1); } return result; } //----- (0086FE00) -------------------------------------------------------- int __thiscall sub_86FE00(char *this, int a2) { int v2; // edi int v3; // eax int v4; // esi int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int, signed int, int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, int, signed int, int *, signed int); // edx int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int, signed int, int *, signed int); // eax int v15; // eax int v16; // ST3C_4 void (__cdecl *v17)(int, int, signed int, int *, signed int); // eax int v18; // ST30_4 void (__cdecl *v19)(int, int, int, int *, signed int); // edx int v20; // ST2C_4 int v21; // ST28_4 bool v22; // zf int v23; // ST44_4 void (__cdecl *v24)(int, int, int, int *, signed int); // edx int v25; // ST40_4 int v26; // ST3C_4 int v27; // ebx int v28; // eax void (__cdecl *v29)(int, bool *, signed int, int *, signed int); // edx void (__cdecl *v30)(int, int, int, int *, signed int); // edx int v31; // ST40_4 int v32; // ST3C_4 int v33; // ecx int v34; // eax int v35; // eax int v36; // ST40_4 int v37; // ST3C_4 void (__cdecl *v38)(int, int, int, int *, signed int); // eax void (__cdecl *v39)(int, bool *, signed int, int *, signed int); // edx int v40; // ST3C_4 int v41; // eax int v42; // ST40_4 int v43; // ST3C_4 void (__cdecl *v44)(int, int, int, int *, signed int); // eax int v45; // eax int (__cdecl *v46)(int, bool *, signed int, int *, signed int); // edx int result; // eax int v48; // edi int (__cdecl *v49)(int, int, int, int *, signed int); // edx int v50; // ST40_4 int v51; // [esp+Ch] [ebp-Ch] int v52; // [esp+10h] [ebp-8h] bool v53; // [esp+15h] [ebp-3h] bool v54; // [esp+16h] [ebp-2h] bool v55; // [esp+17h] [ebp-1h] v2 = a2; v3 = *(_DWORD *)(a2 + 356); v4 = (int)this; v5 = v3; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v3 + 8); v52 = 2; v6(v5, this + 28, 2, &v52, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v7 + 8); v52 = 2; v9(v8, v4 + 30, 2, &v52, 1); v10 = *(_DWORD *)(v2 + 356); v11 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v10 + 8); v52 = 2; v11(v10, v4 + 32, 2, &v52, 1); v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v12 + 8); v52 = 2; v14(v13, v4 + 34, 2, &v52, 1); v15 = *(_DWORD *)(v2 + 356); v16 = v15; v17 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v15 + 8); v52 = 2; v17(v16, v4 + 36, 2, &v52, 1); v18 = 2 * *(unsigned __int16 *)(v4 + 32); v19 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v20 = *(_DWORD *)(v4 + 4); v21 = *(_DWORD *)(v2 + 356); v52 = 2; v19(v21, v20, v18, &v52, 1); v22 = *(_DWORD *)(v4 + 12) == 0; v52 = 1; HIBYTE(a2) = !v22; (*(void (__cdecl **)(_DWORD, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8))( *(_DWORD *)(v2 + 356), (char *)&a2 + 3, 1, &v52, 1); if ( HIBYTE(a2) ) { v23 = 2 * *(unsigned __int16 *)(v4 + 28); v24 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v25 = *(_DWORD *)(v4 + 12); v26 = *(_DWORD *)(v2 + 356); v52 = 2; v24(v26, v25, v23, &v52, 1); } v27 = *(unsigned __int16 *)(v4 + 28) * *(unsigned __int16 *)(v4 + 36); v28 = *(_DWORD *)(v2 + 356); v55 = *(_DWORD *)(v4 + 8) != 0; v29 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v28 + 8); v52 = 1; v29(v28, &v55, 1, &v52, 1); if ( v55 ) { v30 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v31 = *(_DWORD *)(v4 + 8); v32 = *(_DWORD *)(v2 + 356); v52 = 4; v30(v32, v31, 4 * v27, &v52, 1); } v33 = *(unsigned __int16 *)(v4 + 34); if ( (_WORD)v33 ) { v35 = *(_DWORD *)(v2 + 356); v36 = *(_DWORD *)(v4 + 24); v37 = v35; v38 = *(void (__cdecl **)(int, int, int, int *, signed int))(v35 + 8); v52 = 2; v38(v37, v36, 2 * v33, &v52, 1); v34 = sub_86EA00(v4); } else { v34 = 3 * *(unsigned __int16 *)(v4 + 30); } v54 = *(_DWORD *)(v4 + 20) != 0; v52 = v34; v39 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v40 = *(_DWORD *)(v2 + 356); v51 = 1; v39(v40, &v54, 1, &v51, 1); if ( v54 ) { v41 = *(_DWORD *)(v2 + 356); v42 = *(_DWORD *)(v4 + 20); v43 = v41; v44 = *(void (__cdecl **)(int, int, int, int *, signed int))(v41 + 8); v51 = 2; v44(v43, v42, 2 * v52, &v51, 1); } v45 = *(_DWORD *)(v2 + 356); v53 = *(_DWORD *)(v4 + 16) != 0; v46 = *(int (__cdecl **)(int, bool *, signed int, int *, signed int))(v45 + 8); v51 = 1; result = v46(v45, &v53, 1, &v51, 1); if ( v53 ) { v48 = *(_DWORD *)(v2 + 356); v49 = *(int (__cdecl **)(int, int, int, int *, signed int))(v48 + 8); v50 = *(_DWORD *)(v4 + 16); v51 = 1; result = v49(v48, v50, v27, &v51, 1); } return result; } //----- (00870080) -------------------------------------------------------- _DWORD *__stdcall sub_870080(unsigned int a1, int a2) { unsigned int v2; // esi int v3; // ecx unsigned int *v4; // eax unsigned int v5; // edi int v6; // ecx int v7; // edx _DWORD *i; // eax unsigned int v9; // eax int v10; // edx int v11; // eax int v12; // esi int v13; // eax int v14; // ebx _DWORD *v15; // edi unsigned int v16; // eax _DWORD *v17; // ecx _DWORD *v18; // eax int v19; // ecx _DWORD *v20; // ecx int v21; // ecx float v23; // [esp+Ch] [ebp-1Ch] unsigned int v24; // [esp+10h] [ebp-18h] int v25; // [esp+14h] [ebp-14h] unsigned int v26; // [esp+18h] [ebp-10h] int v27; // [esp+1Ch] [ebp-Ch] unsigned int v28; // [esp+20h] [ebp-8h] _DWORD *v29; // [esp+24h] [ebp-4h] v2 = a1; v3 = 12 * a1 | -(12 * (unsigned __int64)a1 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); v5 = 0; if ( v4 ) { v6 = a1 - 1; v7 = (int)(v4 + 1); *v4 = a1; for ( i = v4 + 1; v6 >= 0; --v6 ) { *i = 0; i[1] = 0; i[2] = 0; i += 3; } v29 = (_DWORD *)v7; } else { v29 = 0; } v9 = *(_DWORD *)(a2 + 64); v24 = v9; v28 = 0; if ( v9 > 0 ) { v27 = 0; do { v10 = v27 + *(_DWORD *)(a2 + 68); v25 = v10; v26 = 0; if ( *(_WORD *)(v10 + 72) > 0u ) { do { v11 = *(_DWORD *)(v10 + 68); v23 = *(float *)(v11 + 8 * v5 + 4); v12 = (int)&v29[3 * *(unsigned __int16 *)(v11 + 8 * v5)]; v13 = *(_DWORD *)(v12 + 4); if ( *(_DWORD *)(v12 + 8) == v13 ) { v14 = 2 * v13; if ( !v13 ) v14 = 1; if ( v14 != v13 ) { if ( v14 ) { v15 = operator new(8 * v14); v16 = 0; if ( *(_DWORD *)(v12 + 8) ) { do { v17 = *(_DWORD **)v12; v15[2 * v16] = *(_DWORD *)(*(_DWORD *)v12 + 8 * v16); v15[2 * v16 + 1] = v17[2 * v16 + 1]; ++v16; } while ( v16 < *(_DWORD *)(v12 + 8) ); } } else { v15 = 0; } operator delete(*(void **)v12); v10 = v25; *(_DWORD *)v12 = v15; v5 = v26; *(_DWORD *)(v12 + 4) = v14; } } v18 = *(_DWORD **)v12; v19 = *(_DWORD *)(v12 + 8); v18[2 * v19] = v28; *(float *)&v18[2 * v19 + 1] = v23; ++*(_DWORD *)(v12 + 8); v26 = ++v5; } while ( v5 < *(unsigned __int16 *)(v10 + 72) ); v2 = a1; v9 = v24; } v27 += 76; v5 = 0; ++v28; } while ( v28 < v9 ); } if ( v2 <= 0 ) return v29; v20 = v29; do { sub_86EF80(v20); v20 = (_DWORD *)(v21 + 12); --v2; } while ( v2 ); return v29; } //----- (00870210) -------------------------------------------------------- char *__stdcall sub_870210(unsigned __int8 a1, int a2) { int v2; // ebx unsigned int v3; // edi char *result; // eax unsigned __int16 ***v5; // ecx unsigned int v6; // esi unsigned __int16 **v7; // edx unsigned __int16 **v8; // esi unsigned __int16 *v9; // edi unsigned __int16 v10; // dx unsigned __int16 v11; // ax int v12; // ecx unsigned int v13; // edx void **v14; // eax void **v15; // ecx unsigned int v16; // esi void **v17; // edi unsigned int v18; // [esp+Ch] [ebp-50h] char *v19; // [esp+20h] [ebp-3Ch] char *v20; // [esp+24h] [ebp-38h] char *v21; // [esp+28h] [ebp-34h] void **v22; // [esp+28h] [ebp-34h] void **v23; // [esp+28h] [ebp-34h] unsigned int v24; // [esp+2Ch] [ebp-30h] unsigned int v25; // [esp+30h] [ebp-2Ch] unsigned __int16 *v26; // [esp+38h] [ebp-24h] unsigned __int16 v27; // [esp+3Ch] [ebp-20h] unsigned __int16 ***v28; // [esp+40h] [ebp-1Ch] char *v29; // [esp+44h] [ebp-18h] unsigned __int16 **v30; // [esp+48h] [ebp-14h] signed int v31; // [esp+4Ch] [ebp-10h] unsigned __int16 ***v32; // [esp+50h] [ebp-Ch] char *v33; // [esp+54h] [ebp-8h] unsigned int v34; // [esp+58h] [ebp-4h] v2 = a2; while ( 1 ) { v3 = *(_DWORD *)(v2 + 8); result = 0; v31 = -1; v29 = 0; v24 = v3; if ( !v3 ) break; v5 = *(unsigned __int16 ****)v2; v6 = *(_DWORD *)(v2 + 8); v25 = *(_DWORD *)(v2 + 8); v28 = *(unsigned __int16 ****)v2; do { v7 = *v5; ++result; v30 = *v5; v21 = result; v33 = result; if ( (unsigned int)result < v3 ) { v26 = *v7; v27 = **v7; v32 = v5 + 1; do { v8 = *v32; v9 = **v32; v10 = v27; v11 = *v9; v12 = 0; v18 = 0; v34 = 0; while ( v10 != -1 || v11 != -1 ) { if ( v11 >= v10 ) { if ( v11 == v10 ) { if ( ++v12 >= (unsigned int)v8[2] ) v11 = -1; else v11 = v9[v12]; } v13 = v18 + 1; v18 = v13; if ( v13 >= (unsigned int)v30[2] ) { ++v34; v10 = -1; } else { v10 = v26[v13]; ++v34; } } else if ( ++v12 >= (unsigned int)v8[2] ) { ++v34; v11 = -1; } else { v11 = v9[v12]; ++v34; } } if ( v34 <= a1 && (signed int)((signed int)v8[2] + (_DWORD)v30[2] - v34) > v31 ) { v19 = v29; v20 = v33; v31 = (signed int)v8[2] + (_DWORD)v30[2] - v34; } v6 = v25; ++v32; ++v33; } while ( (unsigned int)v33 < v25 ); v2 = a2; v3 = v24; result = v21; v5 = v28; } ++v5; v29 = result; v28 = v5; } while ( (unsigned int)result < v6 ); if ( v31 < 0 ) break; sub_86F640(*(__int16 ***)(*(_DWORD *)v2 + 4 * (_DWORD)v19), *(_DWORD *)(*(_DWORD *)v2 + 4 * (_DWORD)v20)); v14 = *(void ***)(*(_DWORD *)v2 + 4 * (_DWORD)v20); v22 = v14; if ( v14 ) { operator delete(*v14); operator delete(v22); } *(_DWORD *)(*(_DWORD *)v2 + 4 * (_DWORD)v20) = *(_DWORD *)(*(_DWORD *)v2 + 4 * --*(_DWORD *)(v2 + 8)); v15 = *(void ***)(*(_DWORD *)v2 + 4 * (_DWORD)v19); v16 = 0; v23 = *(void ***)(*(_DWORD *)v2 + 4 * (_DWORD)v19); if ( *(_DWORD *)(v2 + 8) ) { while ( 1 ) { v17 = *(void ***)(*(_DWORD *)v2 + 4 * v16); if ( v17 != v15 && sub_86F020(v15, *(_DWORD **)(*(_DWORD *)v2 + 4 * v16)) ) { if ( v17 ) { operator delete(*v17); operator delete(v17); } *(_DWORD *)(*(_DWORD *)v2 + 4 * v16) = *(_DWORD *)(*(_DWORD *)v2 + 4 * --*(_DWORD *)(v2 + 8)); } else { ++v16; } if ( v16 >= *(_DWORD *)(v2 + 8) ) break; v15 = v23; } } } return result; } //----- (00870400) -------------------------------------------------------- signed int __cdecl sub_870400(_DWORD *a1, int a2, int a3, int a4, char a5) { _DWORD *v5; // eax unsigned int v6; // ebx const void **v7; // edi int v8; // esi v5 = a1; v6 = 0; if ( a1[2] ) { do { if ( *(_BYTE *)(v6 + a4) == a5 ) { v7 = *(const void ***)(*v5 + 4 * v6); v8 = 0; while ( sub_86F0A0(v7, (_DWORD *)(a3 + 12 * *(unsigned __int16 *)(a2 + 2 * v8))) ) { if ( (unsigned int)++v8 >= 3 ) { *(_BYTE *)(v6 + a4) = 1; return v6; } } v5 = a1; } ++v6; } while ( v6 < v5[2] ); } return -1; } //----- (00870470) -------------------------------------------------------- int __thiscall sub_870470(int *this, signed int a2) { int *v2; // esi int v3; // eax void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx unsigned int *v5; // edi int v6; // ebx int v7; // ecx _DWORD *v8; // eax int result; // eax int v10; // ebx unsigned int v11; // ebx int v12; // [esp+Ch] [ebp-4h] v2 = this; sub_85BC50(this, a2); v3 = *(_DWORD *)(a2 + 352); v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v3 + 4); v5 = (unsigned int *)(v2 + 2); v12 = 4; v4(v3, v2 + 2, 4, &v12, 1); v6 = *v5; v7 = 44 * *v5 | -(44 * (unsigned __int64)*v5 >> 32 != 0); v8 = operator new((v7 + 4) | -__CFADD__(v7, 4)); if ( v8 ) { *v8 = v6; result = (int)(v8 + 1); v10 = v6 - 1; v12 = result; if ( v10 >= 0 ) { do { *(_DWORD *)result = &NiSkinPartition::Partition::`vftable'; *(_DWORD *)(result + 4) = 0; *(_DWORD *)(result + 8) = 0; *(_DWORD *)(result + 12) = 0; *(_DWORD *)(result + 16) = 0; *(_DWORD *)(result + 20) = 0; *(_DWORD *)(result + 24) = 0; *(_WORD *)(result + 34) = 0; *(_DWORD *)(result + 40) = 0; result += 44; --v10; } while ( v10 >= 0 ); result = v12; } } else { result = 0; } v11 = 0; v2[3] = result; if ( *v5 > 0 ) { v12 = 0; do { result = sub_86FAE0((char *)(v12 + v2[3]), a2); v12 += 44; ++v11; } while ( v11 < *v5 ); } return result; } // A25668: using guessed type void *NiSkinPartition::Partition::`vftable'; //----- (00870550) -------------------------------------------------------- int __thiscall sub_870550(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int (__cdecl *v4)(int, _DWORD *, signed int, int *, signed int); // edx int result; // eax unsigned int v6; // ebx int v7; // [esp+Ch] [ebp-4h] v2 = this; nullsub_32(a2); v3 = *(_DWORD *)(a2 + 356); v4 = *(int (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v3 + 8); v7 = 4; result = v4(v3, v2 + 2, 4, &v7, 1); v6 = 0; if ( v2[2] ) { v7 = 0; do { result = sub_86FE00((char *)(v7 + v2[3]), a2); v7 += 44; ++v6; } while ( v6 < v2[2] ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008705C0) -------------------------------------------------------- void **__thiscall sub_8705C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,float>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A256B4: using guessed type void *NiTMapBase,unsigned int,float>::`vftable'; // A256D4: using guessed type void *NiTPointerMap::`vftable'; //----- (00870600) -------------------------------------------------------- char __stdcall sub_870600(unsigned __int16 *a1, unsigned __int8 a2, unsigned __int8 a3, int a4) { unsigned __int16 *v4; // edi int v5; // ecx unsigned int v6; // esi unsigned int v7; // ebx int v8; // eax float *v9; // eax float *v10; // ecx double v11; // st7 int v12; // edi unsigned int v13; // eax float v14; // eax int v15; // ebx void *v16; // esi int v17; // eax unsigned int v18; // ecx _DWORD *v19; // edi int v20; // esi unsigned __int16 v21; // ST04_2 int v22; // eax unsigned int v23; // edx unsigned int v24; // ecx _DWORD *v25; // eax int v26; // esi int v27; // edi _DWORD *v28; // eax void *v29; // esi unsigned int v30; // edx char *v31; // ecx unsigned int v32; // eax float v33; // ebx unsigned __int16 v34; // ST04_2 _DWORD *v35; // esi unsigned int v36; // edx unsigned int v37; // ecx _DWORD *v38; // eax int v39; // esi int v40; // edi _DWORD *v41; // eax void *v42; // esi unsigned int v43; // edx char *v44; // ecx unsigned int v45; // eax unsigned int v46; // ebx unsigned int v47; // esi _DWORD *v48; // ecx unsigned int v49; // eax _DWORD *v50; // edx unsigned int v51; // edx _DWORD *v52; // eax size_t *v53; // esi int v55; // [esp+10h] [ebp-68h] unsigned int v56; // [esp+14h] [ebp-64h] unsigned __int16 v57; // [esp+1Ch] [ebp-5Ch] unsigned int v58; // [esp+20h] [ebp-58h] int v59; // [esp+24h] [ebp-54h] unsigned int v60; // [esp+28h] [ebp-50h] void *v61; // [esp+2Ch] [ebp-4Ch] unsigned __int16 *v62; // [esp+30h] [ebp-48h] void *v63; // [esp+34h] [ebp-44h] float v64; // [esp+38h] [ebp-40h] int v65; // [esp+3Ch] [ebp-3Ch] unsigned int v66; // [esp+40h] [ebp-38h] unsigned int v67; // [esp+44h] [ebp-34h] void **v68; // [esp+48h] [ebp-30h] unsigned int v69; // [esp+4Ch] [ebp-2Ch] void *v70; // [esp+50h] [ebp-28h] unsigned int v71; // [esp+54h] [ebp-24h] float v72; // [esp+58h] [ebp-20h] int v73; // [esp+5Ch] [ebp-1Ch] void *v74; // [esp+60h] [ebp-18h] int v75; // [esp+64h] [ebp-14h] unsigned int v76; // [esp+68h] [ebp-10h] __int16 v77; // [esp+6Ch] [ebp-Ch] __int16 v78; // [esp+6Eh] [ebp-Ah] __int16 v79; // [esp+70h] [ebp-8h] v4 = a1; v5 = a1[6]; v6 = a1[32]; v73 = a4; v65 = v5; v69 = 37; v7 = 0; v62 = a1; v56 = v6; v71 = 0; v70 = operator new(0x94u); memset(v70, 0, 0x94u); v68 = &NiTPointerMap::`vftable'; v74 = 0; v75 = 0; sub_87AAD0(a1, (int *)&v63, &v61, 1); v67 = 0; if ( v6 ) { do { (*(void (__thiscall **)(unsigned __int16 *, unsigned int, __int16 *, __int16 *, __int16 *))(*(_DWORD *)v4 + 80))( v4, v7, &v77, &v78, &v79); if ( v77 != v78 && v78 != v79 && v79 != v77 ) { sub_86F3F0(&v68, (int)&v77, v73); v58 = v71; if ( v71 > a2 ) { while ( 1 ) { v8 = 0; if ( v69 ) { while ( !*((_DWORD *)v70 + v8) ) { if ( ++v8 >= v69 ) goto LABEL_9; } v9 = (float *)*((_DWORD *)v70 + v8); } else { LABEL_9: v9 = 0; } v10 = v9; v72 = 3.4028235e38; do { v11 = v10[2]; v12 = *((_DWORD *)v10 + 1); v10 = *(float **)v10; v64 = v11; if ( !v10 ) { v13 = ((int (__thiscall *)(void ***, int))v68[1])(&v68, v12) + 1; if ( v13 >= v69 ) { LABEL_15: v10 = 0; } else { while ( 1 ) { v10 = (float *)*((_DWORD *)v70 + v13); if ( v10 ) break; if ( ++v13 >= v69 ) goto LABEL_15; } } } if ( v72 > (double)v64 ) { v72 = v64; v55 = v12; } } while ( v10 ); v14 = 0.0; v64 = 0.0; do { v15 = (unsigned __int16)*(&v77 + LODWORD(v14)); v57 = *(&v77 + LODWORD(v14)); if ( !v75 ) { v16 = operator new(4u); operator delete(v74); v74 = v16; v75 = 1; } v17 = v73; *(_DWORD *)v74 = v15; v18 = *((unsigned __int16 *)v61 + v15); v19 = (_DWORD *)(v17 + 12 * v15); v76 = 1; v59 = v17 + 12 * v15; v66 = v18; v60 = v18; if ( v18 ) { while ( 1 ) { v20 = *((unsigned __int16 *)v63 + v60 - 1); v21 = *((_WORD *)v63 + v60 - 1); LODWORD(v72) = *((unsigned __int16 *)v63 + v60 - 1); if ( sub_8795E0(v62, v21, v15, 1) ) break; v22 = v73 + 12 * v20; v23 = v19[2]; if ( v23 == *(_DWORD *)(v22 + 8) ) { v24 = 0; if ( v23 ) { v25 = *(_DWORD **)v22; v26 = *v19 - (_DWORD)v25; while ( *(_DWORD *)((char *)v25 + v26) == *v25 ) { ++v24; v25 += 2; if ( v24 >= v23 ) goto LABEL_32; } } else { LABEL_32: if ( v76 == v75 ) { v27 = v75 ? 2 * v75 : 1; if ( v27 != v75 ) { if ( v27 ) { v28 = operator new(4 * v27); v29 = v28; if ( v76 ) { v30 = v76; v31 = (char *)((_BYTE *)v74 - (_BYTE *)v28); do { *v28 = *(_DWORD *)((char *)v28 + (_DWORD)v31); ++v28; --v30; } while ( v30 ); } } else { v29 = 0; } operator delete(v74); LOWORD(v15) = v57; v74 = v29; v75 = v27; } } v32 = v76; *((float *)v74 + v76) = v72; v76 = v32 + 1; } } if ( !--v60 ) break; v19 = (_DWORD *)v59; } v18 = v66; } if ( v18 < v65 - 1 ) { do { LODWORD(v33) = *((unsigned __int16 *)v63 + v66 + 1); v34 = *((_WORD *)v63 + v66 + 1); LODWORD(v72) = *((unsigned __int16 *)v63 + v66 + 1); if ( sub_8795E0(v62, v34, v57, 1) ) break; v35 = (_DWORD *)(v73 + 12 * LODWORD(v33)); v36 = *(_DWORD *)(v59 + 8); if ( v36 == v35[2] ) { v37 = 0; if ( v36 ) { v38 = *(_DWORD **)v59; v39 = *v35 - *(_DWORD *)v59; while ( *v38 == *(_DWORD *)((char *)v38 + v39) ) { ++v37; v38 += 2; if ( v37 >= v36 ) goto LABEL_54; } } else { LABEL_54: if ( v76 == v75 ) { v40 = v75 ? 2 * v75 : 1; if ( v40 != v75 ) { if ( v40 ) { v41 = operator new(4 * v40); v42 = v41; if ( v76 ) { v43 = v76; v44 = (char *)((_BYTE *)v74 - (_BYTE *)v41); do { *v41 = *(_DWORD *)((char *)v41 + (_DWORD)v44); ++v41; --v43; } while ( v43 ); v33 = v72; } } else { v42 = 0; } operator delete(v74); v74 = v42; v75 = v40; } } v45 = v76; *((float *)v74 + v76) = v33; v76 = v45 + 1; } } ++v66; } while ( v66 < v65 - 1 ); } v46 = 0; if ( v76 ) { do { v47 = *(_DWORD *)(v73 + 12 * *((_DWORD *)v74 + v46) + 8); v48 = (_DWORD *)(v73 + 12 * *((_DWORD *)v74 + v46)); v49 = 0; if ( v47 ) { v50 = (_DWORD *)*v48; while ( *v50 != v55 ) { ++v49; v50 += 2; if ( v49 >= v47 ) goto LABEL_78; } v51 = v49; if ( v49 < v47 - 1 ) { do { v52 = (_DWORD *)(*v48 + 8 * v51); *v52 = v52[2]; v52[1] = v52[3]; ++v51; } while ( v51 < v48[2] - 1 ); } if ( !--v48[2] ) { operator delete(v63); operator delete(v61); operator delete(v74); v68 = &NiTPointerMap::`vftable'; sub_940360(&v68); v68 = &NiTMapBase,unsigned int,float>::`vftable'; sub_940360(&v68); operator delete(v70); return 0; } sub_86EF80(v48); } LABEL_78: ++v46; } while ( v46 < v76 ); } LODWORD(v14) = LODWORD(v64) + 1; v64 = v14; } while ( LODWORD(v14) < 3 ); if ( --v58 == a2 ) break; sub_940360(&v68); sub_86F3F0(&v68, (int)&v77, v73); } v7 = v67; v6 = v56; } sub_940360(&v68); v4 = v62; } v67 = ++v7; } while ( v7 < v6 ); } if ( v65 ) { v53 = (size_t *)(v73 + 8); v67 = v65; do { if ( *v53 > a3 ) { qsort((void *)*(v53 - 2), *v53, 8u, sub_86E990); *v53 = a3; sub_86EF80(v53 - 2); } v53 += 3; --v67; } while ( v67 ); } operator delete(v63); operator delete(v61); operator delete(v74); v68 = &NiTPointerMap::`vftable'; sub_940360(&v68); v68 = &NiTMapBase,unsigned int,float>::`vftable'; sub_940360(&v68); operator delete(v70); return 1; } // A256B4: using guessed type void *NiTMapBase,unsigned int,float>::`vftable'; // A256D4: using guessed type void *NiTPointerMap::`vftable'; //----- (00870BC0) -------------------------------------------------------- unsigned int __stdcall sub_870BC0(int a1, int a2, _DWORD *a3) { int v3; // esi unsigned int result; // eax _DWORD *v5; // eax unsigned int v6; // edx _DWORD *v7; // esi _DWORD *v8; // eax unsigned int v9; // ebx __int16 v10; // di unsigned int v11; // edx unsigned int v12; // eax _WORD *v13; // ecx int v14; // eax int v15; // ebx _WORD *v16; // edi unsigned int v17; // eax unsigned int v18; // ebx void **v19; // edi _DWORD *v20; // ecx int v21; // edx _DWORD *v22; // eax int v23; // ecx int v24; // edi _DWORD *v25; // eax void **v26; // ecx _DWORD *v27; // ebx unsigned int v28; // eax int v29; // [esp+4h] [ebp-30h] unsigned int v30; // [esp+8h] [ebp-2Ch] unsigned int v31; // [esp+Ch] [ebp-28h] __int16 v32; // [esp+10h] [ebp-24h] unsigned int v33; // [esp+18h] [ebp-1Ch] int v34; // [esp+1Ch] [ebp-18h] unsigned int v35; // [esp+20h] [ebp-14h] __int16 v36; // [esp+28h] [ebp-Ch] __int16 v37; // [esp+2Ah] [ebp-Ah] __int16 v38; // [esp+2Ch] [ebp-8h] v3 = a1; result = 0; v31 = *(unsigned __int16 *)(a1 + 64); v35 = 0; if ( *(_WORD *)(a1 + 64) ) { do { (*(void (__thiscall **)(int, unsigned int, __int16 *, __int16 *, __int16 *))(*(_DWORD *)v3 + 80))( v3, result, &v36, &v37, &v38); if ( v36 != v37 && v37 != v38 && v38 != v36 ) { v5 = operator new(0xCu); v6 = 0; if ( v5 ) { *v5 = 0; v5[1] = 0; v5[2] = 0; v7 = v5; } else { v7 = 0; } v33 = 0; do { v8 = (_DWORD *)(a2 + 12 * (unsigned __int16)*(&v36 + v6)); v9 = 0; v29 = a2 + 12 * (unsigned __int16)*(&v36 + v6); v30 = v8[2]; v34 = 0; if ( v30 ) { while ( 1 ) { v10 = *(_WORD *)(*v8 + 8 * v9); v11 = v7[2]; v12 = 0; v32 = v10; if ( !v11 ) goto LABEL_18; v13 = (_WORD *)*v7; while ( *v13 != v10 ) { ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_18; } if ( v12 == -1 ) { LABEL_18: v14 = v7[1]; if ( v11 == v14 ) { v15 = 2 * v14; if ( !v14 ) v15 = 1; if ( v15 != v14 ) { if ( v15 ) { v16 = operator new(2 * v15); v17 = 0; if ( v7[2] ) { do { v16[v17] = *(_WORD *)(*v7 + 2 * v17); ++v17; } while ( v17 < v7[2] ); } } else { v16 = 0; } operator delete((void *)*v7); *v7 = v16; v10 = v32; v7[1] = v15; } } v9 = v34; *(_WORD *)(*v7 + 2 * v7[2]++) = v10; } v34 = ++v9; if ( v9 >= v30 ) break; v8 = (_DWORD *)v29; } v6 = v33; } v33 = ++v6; } while ( v6 < 3 ); qsort((void *)*v7, v7[2], 2u, sub_86E9E0); v18 = 0; if ( a3[2] ) { while ( 1 ) { v19 = *(void ***)(*a3 + 4 * v18); if ( sub_86F020(*(_DWORD **)(*a3 + 4 * v18), v7) ) break; if ( sub_86F020(v7, v19) ) { if ( v19 ) { operator delete(*v19); operator delete(v19); } v20 = a3; *(_DWORD *)(*v20 + 4 * v18) = *(_DWORD *)(*v20 + 4 * --v20[2]); } else { v20 = a3; ++v18; } if ( v18 >= v20[2] ) goto LABEL_42; } operator delete((void *)*v7); operator delete(v7); } LABEL_42: v21 = a3[2]; if ( v18 == v21 ) { v22 = a3; v23 = a3[1]; if ( v21 == v23 ) { v24 = 2 * v23; if ( !v23 ) v24 = 1; if ( v24 != v23 ) { if ( v24 ) { v25 = operator new(4 * v24); v26 = (void **)a3; v27 = v25; v28 = 0; if ( a3[2] ) { do { v27[v28] = *(_DWORD *)(*a3 + 4 * v28); ++v28; } while ( v28 < a3[2] ); } } else { v27 = 0; v26 = (void **)a3; } operator delete(*v26); v22 = a3; *a3 = v27; a3[1] = v24; } } *(_DWORD *)(*v22 + 4 * v22[2]++) = v7; } v3 = a1; } result = v35 + 1; v35 = result; } while ( result < v31 ); } return result; } //----- (00870E60) -------------------------------------------------------- void __thiscall sub_870E60(_DWORD *this, unsigned __int16 *a2, int a3, unsigned __int8 a4, int a5, _DWORD *a6, _DWORD *a7) { _BYTE *v7; // ecx unsigned int v8; // eax unsigned int v9; // ebx signed int v10; // eax unsigned int v11; // edx int v12; // edi unsigned int v13; // eax _DWORD *v14; // [esp+10h] [ebp-1Ch] _BYTE *v15; // [esp+18h] [ebp-14h] unsigned int v16; // [esp+1Ch] [ebp-10h] __int16 v17; // [esp+20h] [ebp-Ch] __int16 v18; // [esp+22h] [ebp-Ah] __int16 v19; // [esp+24h] [ebp-8h] v14 = this; v16 = a2[32]; sub_870BC0((int)a2, a5, a6); sub_870210(a4, (int)a6); *a7 = operator new(4 * v16); v7 = operator new(a6[2]); v8 = 0; v15 = v7; if ( a6[2] ) { do v7[v8++] = 0; while ( v8 < a6[2] ); } v9 = 0; if ( v16 ) { do { (*(void (__stdcall **)(unsigned int, __int16 *, __int16 *, __int16 *))(*(_DWORD *)a2 + 80))(v9, &v17, &v18, &v19); if ( v17 != v18 && v18 != v19 && v19 != v17 ) { v10 = sub_870400(a6, (int)&v17, a5, (int)v15, 1); if ( v10 < 0 ) v10 = sub_870400(a6, (int)&v17, a5, (int)v15, 0); *(_DWORD *)(*a7 + 4 * v9) = v10; } else { *(_DWORD *)(*a7 + 4 * v9) = -1; } ++v9; } while ( v9 < v16 ); } v11 = 0; if ( a6[2] ) { do { if ( v15[v11] ) { ++v11; } else { *(_DWORD *)(*a6 + 4 * v11) = *(_DWORD *)(*a6 + 4 * --a6[2]); v12 = a6[2]; v13 = 0; if ( v16 ) { do { if ( *(_DWORD *)(*a7 + 4 * v13) == v12 ) *(_DWORD *)(*a7 + 4 * v13) = v11; ++v13; } while ( v13 < v16 ); } } } while ( v11 < a6[2] ); } v14[2] = a6[2]; operator delete(v15); } //----- (00870FE0) -------------------------------------------------------- char __thiscall sub_870FE0(_DWORD *this, unsigned __int16 *a2, int a3, unsigned __int8 a4, int a5, int a6) { _DWORD *v6; // esi unsigned int v7; // ST18_4 _DWORD *v8; // edi unsigned int v9; // esi int v10; // ecx unsigned int *v11; // eax int v12; // ecx int v13; // edx int i; // eax unsigned int v15; // edi void **v16; // esi void *v17; // ST18_4 int v18; // esi _DWORD *v19; // ebx int v20; // edx int v21; // esi int j; // edi void *v23; // eax void *v25; // [esp+Ch] [ebp-30h] int v26; // [esp+10h] [ebp-2Ch] int v27; // [esp+14h] [ebp-28h] void *v28; // [esp+18h] [ebp-24h] int v29; // [esp+1Ch] [ebp-20h] int v30; // [esp+20h] [ebp-1Ch] void *v31; // [esp+24h] [ebp-18h] int v32; // [esp+28h] [ebp-14h] void *v33; // [esp+2Ch] [ebp-10h] _DWORD *v34; // [esp+30h] [ebp-Ch] int v35; // [esp+34h] [ebp-8h] char v36; // [esp+3Bh] [ebp-1h] int v37; // [esp+4Ch] [ebp+10h] v6 = this; v7 = a2[6]; v34 = this; v25 = 0; v26 = 0; v27 = 0; v8 = sub_870080(v7, a3); v32 = (int)v8; v36 = sub_870600(a2, a4, a5, (int)v8); if ( v36 ) { sub_870E60(v6, a2, a3, a4, (int)v8, &v25, &v33); v9 = v6[2]; v10 = 44 * v9 | -(44 * (unsigned __int64)v9 >> 32 != 0); v11 = (unsigned int *)operator new((v10 + 4) | -__CFADD__(v10, 4)); if ( v11 ) { v12 = v9 - 1; v13 = (int)(v11 + 1); *v11 = v9; for ( i = (int)(v11 + 1); v12 >= 0; --v12 ) { *(_DWORD *)i = &NiSkinPartition::Partition::`vftable'; *(_DWORD *)(i + 4) = 0; *(_DWORD *)(i + 8) = 0; *(_DWORD *)(i + 12) = 0; *(_DWORD *)(i + 16) = 0; *(_DWORD *)(i + 20) = 0; *(_DWORD *)(i + 24) = 0; *(_WORD *)(i + 34) = 0; *(_DWORD *)(i + 40) = 0; i += 44; } v35 = v13; } else { v35 = 0; } v15 = 0; LOBYTE(v31) = a4 != (_BYTE)a5; v28 = 0; v29 = 0; v30 = 0; if ( v34[2] > 0u ) { v37 = v35; do { sub_86F6E0(&v28, v15, (int)v33, a2[32]); v16 = (void **)*((_DWORD *)v25 + v15); sub_86F740(v37, (int)&v28, *((_DWORD *)v25 + v15), (int)a2, v32, v31, a6, a5, *(_DWORD *)(a3 + 64)); v30 = 0; if ( v16 ) { operator delete(*v16); operator delete(v16); } v37 += 44; ++v15; } while ( v15 < v34[2] ); } operator delete(v33); v17 = v28; v34[3] = v35; operator delete(v17); v8 = (_DWORD *)v32; } if ( v8 ) { v18 = *(v8 - 1); v19 = v8 - 1; v20 = 3 * v18; v21 = v18 - 1; for ( j = (int)&v8[v20]; v21 >= 0; --v21 ) { v23 = *(void **)(j - 12); j -= 12; operator delete(v23); } operator delete(v19); } operator delete(v25); return v36; } // A25668: using guessed type void *NiSkinPartition::Partition::`vftable'; //----- (008711C0) -------------------------------------------------------- _DWORD *__thiscall sub_8711C0(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9) { _DWORD *v9; // esi v9 = this; sub_879810(this, a2, a3, a4, a5, a6, a7, a8); *v9 = &NiTriBasedGeomData::`vftable'; *((_WORD *)v9 + 32) = a9; return v9; } // A25704: using guessed type void *NiTriBasedGeomData::`vftable'; //----- (00871200) -------------------------------------------------------- _DWORD *__thiscall sub_871200(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_879900(this); *((_WORD *)v1 + 32) = 0; *v1 = &NiTriBasedGeomData::`vftable'; return v1; } // A25704: using guessed type void *NiTriBasedGeomData::`vftable'; //----- (00871220) -------------------------------------------------------- LONG __thiscall sub_871220(_DWORD *this) { *this = &NiTriBasedGeomData::`vftable'; return sub_879E60(this); } // A25704: using guessed type void *NiTriBasedGeomData::`vftable'; //----- (00871240) -------------------------------------------------------- int __thiscall sub_871240(_DWORD *this, _DWORD *a2) { return sub_879B90(this, a2); } //----- (00871250) -------------------------------------------------------- char __thiscall sub_871250(float **this, int a2) { float **v2; // esi char result; // al v2 = this; result = sub_879C00(this, a2); if ( result ) result = *((_WORD *)v2 + 32) == *(_WORD *)(a2 + 64); return result; } //----- (00871280) -------------------------------------------------------- char *sub_871280() { return dword_BA4850; } //----- (00871290) -------------------------------------------------------- void *__thiscall sub_871290(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTriBasedGeomData::`vftable'; sub_879E60(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A25704: using guessed type void *NiTriBasedGeomData::`vftable'; //----- (008712C0) -------------------------------------------------------- int __thiscall sub_8712C0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_87A050(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 2; return v4(v5, v3 + 16, 2, &a2, 1); } //----- (00871300) -------------------------------------------------------- int __thiscall sub_871300(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_87A530(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)2; return v4(v5, v3 + 64, 2, &a2, 1); } //----- (00871340) -------------------------------------------------------- unsigned int __thiscall sub_871340(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_87A7B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4850); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usTriangles", v3[32]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (008713C0) -------------------------------------------------------- _DWORD *__thiscall sub_8713C0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_86E0B0(this, a2); *v2 = &NiTriBasedGeom::`vftable'; return v2; } // A25784: using guessed type void *NiTriBasedGeom::`vftable'; //----- (008713E0) -------------------------------------------------------- _DWORD *__thiscall sub_8713E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_86E110(this); *v1 = &NiTriBasedGeom::`vftable'; return v1; } // A25784: using guessed type void *NiTriBasedGeom::`vftable'; //----- (00871400) -------------------------------------------------------- LONG __thiscall sub_871400(_DWORD *this) { *this = &NiTriBasedGeom::`vftable'; return sub_86E150(this); } // A25784: using guessed type void *NiTriBasedGeom::`vftable'; //----- (00871410) -------------------------------------------------------- void __thiscall sub_871410(_DWORD *this, int a2) { sub_86E290(this, a2); } //----- (00871420) -------------------------------------------------------- int __thiscall sub_871420(int *this, signed int a2) { return sub_86E7D0(this, a2); } //----- (00871430) -------------------------------------------------------- int __thiscall sub_871430(const char **this, signed int a2) { return sub_86E8B0(this, a2); } //----- (00871440) -------------------------------------------------------- char __thiscall sub_871440(_DWORD *this, int a2) { return sub_86E040(this, a2); } //----- (00871450) -------------------------------------------------------- char *sub_871450() { return dword_BA4858; } //----- (00871460) -------------------------------------------------------- void *__thiscall sub_871460(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTriBasedGeom::`vftable'; sub_86E150(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A25784: using guessed type void *NiTriBasedGeom::`vftable'; //----- (00871490) -------------------------------------------------------- unsigned int __thiscall sub_871490(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86E940(this, a2); v3 = sub_8784D0(*(int *)dword_BA4858); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008714E0) -------------------------------------------------------- int __cdecl sub_8714E0(const void *a1, const void *a2) { if ( !a1 ) return 1; if ( a2 ) return strcmp(*(const char **)a1, *(const char **)a2); return -1; } //----- (00871530) -------------------------------------------------------- char __thiscall sub_871530(int *this, _DWORD *a2) { int *v2; // esi int v4; // ecx _DWORD *v5; // esi int v6; // ebx _DWORD *v7; // edi int *v8; // [esp+4h] [ebp-Ch] unsigned int v9; // [esp+8h] [ebp-8h] int v10; // [esp+Ch] [ebp-4h] v2 = this; v8 = this; if ( sub_8C4C90((_DWORD *)*a2, this[4], &v9) ) return 1; v9 = *(_DWORD *)(v2[2] + 64); v10 = 0; if ( !v9 ) return 0; while ( 1 ) { v4 = v2[5]; v5 = (_DWORD *)*a2; v6 = *(_DWORD *)(v4 + 4 * v10); v7 = *(_DWORD **)(v5[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*a2 + 4))(*a2, *(_DWORD *)(v4 + 4 * v10))); if ( v7 ) break; LABEL_7: if ( ++v10 >= v9 ) return 0; v2 = v8; } while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v5 + 8))(v5, v6, v7[1]) ) { v7 = (_DWORD *)*v7; if ( !v7 ) goto LABEL_7; } return 1; } //----- (008715E0) -------------------------------------------------------- unsigned int __thiscall sub_8715E0(int *this, signed int a2) { sub_85BC50(this, a2); sub_876290((void **)a2); if ( *(_DWORD *)(a2 + 28) >= 0xA010065u ) sub_876290((void **)a2); sub_876290((void **)a2); return sub_876350((void **)a2); } //----- (00871620) -------------------------------------------------------- void *__thiscall sub_871620(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // esi int v4; // eax int v5; // edi int v6; // eax int v7; // edi int v8; // eax void *result; // eax unsigned int v10; // edi int v11; // [esp+14h] [ebp+8h] int v12; // [esp+14h] [ebp+8h] unsigned int v13; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; nullsub_32(a2); v4 = sub_875AD0(a2); v5 = v3[2]; v11 = v4; if ( v5 != v4 ) { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4 = v11; } v3[2] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } if ( v2[7] >= 0xA010065u ) { v6 = sub_875AD0(v2); v7 = v3[3]; v12 = v6; if ( v7 != v6 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v6 = v12; } v3[3] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } } v3[4] = sub_875AD0(v2); v8 = sub_875B00(v2); v13 = v8; result = operator new(4 * v8); v10 = 0; v3[5] = result; if ( v13 ) { do { result = (void *)sub_875AD0(v2); *(_DWORD *)(v3[5] + 4 * v10++) = result; } while ( v10 < v13 ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00871720) -------------------------------------------------------- char __thiscall sub_871720(_DWORD **this, int a2) { int v2; // ebx _DWORD **v3; // edi char result; // al _DWORD *v5; // ecx unsigned int v6; // esi unsigned int v7; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; result = sub_85BA30(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*v3[2] + 20))(a2); v5 = v3[3]; if ( v5 ) (*(void (__stdcall **)(int))(*v5 + 20))(a2); (*(void (__stdcall **)(int))(*v3[4] + 20))(a2); v6 = 0; v7 = v3[2][16]; if ( v7 ) { do (*(void (__stdcall **)(int))(*(_DWORD *)v3[5][v6++] + 20))(v2); while ( v6 < v7 ); } result = 1; } return result; } //----- (00871790) -------------------------------------------------------- bool __thiscall sub_871790(_DWORD **this, int a2) { _DWORD **v2; // esi _DWORD *v4; // ecx v2 = this; return sub_85BB20(this, a2) && (*(unsigned __int8 (__stdcall **)(_DWORD))(*v2[2] + 28))(*(_DWORD *)(a2 + 8)) && ((v4 = v2[3]) == 0 || (*(unsigned __int8 (__stdcall **)(_DWORD))(*v4 + 28))(*(_DWORD *)(a2 + 12))) && (v2[3] || !*(_DWORD *)(a2 + 12)); } //----- (008717F0) -------------------------------------------------------- float __userpurge sub_8717F0@(_DWORD *this@, float *a2) { _DWORD *v2; // esi int v3; // edx int v4; // ebx int v5; // edx unsigned int v6; // edi float *v7; // ebx char v9; // [esp+Ch] [ebp-C8h] char v10; // [esp+40h] [ebp-94h] char v11; // [esp+50h] [ebp-84h] unsigned int v12; // [esp+60h] [ebp-74h] float *v13; // [esp+64h] [ebp-70h] char v14; // [esp+68h] [ebp-6Ch] char v15; // [esp+9Ch] [ebp-38h] v2 = this; v3 = this[5]; v4 = *(_DWORD *)(this[2] + 68); v13 = a2; sub_86BD60((float *)&v11, (float *)(v4 + 52), (float *)(*(_DWORD *)v3 + 104)); v5 = v2[2]; v6 = 1; v12 = *(_DWORD *)(v5 + 64); if ( v12 > 1 ) { v7 = (float *)(v4 + 128); do { sub_86BD60((float *)&v10, v7, (float *)(*(_DWORD *)(v2[5] + 4 * v6) + 104)); sub_86BC10((float *)&v11, (float *)&v10); ++v6; v7 += 19; } while ( v6 < v12 ); } sub_87C3F0((float *)(v2[4] + 104), v5, (float *)&v14); qmemcpy(&v15, sub_85BDC0((float *)(v2[2] + 12), (float *)&v9, (float *)&v14), 0x34u); return sub_86BD60(v13, (float *)&v11, (float *)&v15); } //----- (008718D0) -------------------------------------------------------- int __thiscall sub_8718D0(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // edi int result; // eax int v5; // esi int v6; // esi int v7; // edi v3 = this; result = sub_85BB00(this, a2, a3); v5 = *(_DWORD *)(a2 + 8); if ( v5 != v3[2] ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = v3[2]; *(_DWORD *)(a2 + 8) = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); } v6 = *(_DWORD *)(a2 + 12); if ( v6 != v3[3] ) { if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } v7 = v3[3]; *(_DWORD *)(a2 + 12) = v7; if ( v7 ) result = InterlockedIncrement((volatile LONG *)(v7 + 4)); } return result; } //----- (00871970) -------------------------------------------------------- _DWORD *sub_871970() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x2Cu); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiSkinInstance::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[6] = -1; return v1; } // 9F4264: using guessed type void *NiSkinInstance::`vftable'; //----- (008719C0) -------------------------------------------------------- LONG __thiscall sub_8719C0(_DWORD *this, LONG a2) { LONG result; // eax _DWORD *v3; // ebx int v4; // esi int v5; // edi int v6; // edi int v7; // esi result = a2; v3 = this; if ( *(_DWORD *)(a2 + 28) < 0xA010065u ) { result = this[2]; if ( result ) { v4 = this[3]; v5 = *(_DWORD *)(result + 8); if ( v4 != v5 ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v3[3] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = v3[2]; v7 = *(_DWORD *)(v6 + 8); if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { if ( v7 ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } *(_DWORD *)(v6 + 8) = 0; } } } return result; } //----- (00871A50) -------------------------------------------------------- int __thiscall sub_871A50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax int (__cdecl *v5)(int, _DWORD **, signed int, int *, signed int); // edx int result; // eax unsigned int v7; // ebx int v8; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[2]); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[3]); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[4]); v4 = v2[89]; a2 = *(_DWORD **)(v3[2] + 64); v5 = *(int (__cdecl **)(int, _DWORD **, signed int, int *, signed int))(v4 + 8); v8 = 4; result = v5(v4, &a2, 4, &v8, 1); v7 = 0; if ( a2 ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(v3[5] + 4 * v7++)); while ( v7 < (unsigned int)a2 ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00871AE0) -------------------------------------------------------- int __thiscall sub_871AE0(int *this, int **a2) { int *v2; // edi _DWORD *v4; // eax _DWORD *v5; // esi int v6; // ebx bool v7; // zf int v8; // eax int v9; // esi unsigned int v10; // ebx int *v11; // esi int v12; // edx _DWORD *v13; // edi int v14; // edi unsigned int v15; // [esp+4h] [ebp-10h] int v16; // [esp+8h] [ebp-Ch] int *v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v2 = this; v17 = this; if ( !sub_871530(this, a2) ) return (int)v2; v4 = operator new(0x2Cu); v5 = v4; v6 = 0; if ( v4 ) { sub_85BA50(v4); *v5 = &NiSkinInstance::`vftable'; v5[2] = 0; v5[3] = 0; v5[4] = 0; v5[5] = 0; v5[7] = 0; v5[8] = 0; v5[9] = 0; v5[10] = 0; v5[6] = -1; v6 = (int)v5; } v18 = v6; sub_8718D0(v2, v6, a2); v7 = sub_8C4C90(*a2, v2[4], &v16) == 0; v8 = v16; if ( v7 ) v8 = v2[4]; *(_DWORD *)(v6 + 16) = v8; v9 = *(_DWORD *)(v2[2] + 64); v15 = *(_DWORD *)(v2[2] + 64); *(_DWORD *)(v6 + 20) = operator new(4 * *(_DWORD *)(v2[2] + 64)); v10 = 0; if ( v9 ) { while ( 1 ) { v11 = *a2; v12 = **a2; v16 = *(_DWORD *)(v2[5] + 4 * v10); v13 = *(_DWORD **)(v11[2] + 4 * (*(int (__thiscall **)(int *, int))(v12 + 4))(v11, v16)); if ( v13 ) { while ( !(*(unsigned __int8 (__thiscall **)(int *, int, _DWORD))(*v11 + 8))(v11, v16, v13[1]) ) { v13 = (_DWORD *)*v13; if ( !v13 ) goto LABEL_13; } v14 = v13[2]; } else { LABEL_13: v14 = *(_DWORD *)(v17[5] + 4 * v10); } *(_DWORD *)(*(_DWORD *)(v18 + 20) + 4 * v10++) = v14; if ( v10 >= v15 ) break; v2 = v17; } } return v18; } // 9F4264: using guessed type void *NiSkinInstance::`vftable'; //----- (00871C10) -------------------------------------------------------- void __thiscall sub_871C10(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx char *v3; // eax unsigned int v4; // edi int v5; // eax char *v6; // eax unsigned int v7; // edi int v8; // eax char *v9; // eax unsigned int v10; // edi char *v11; // eax unsigned int v12; // edi char *v13; // edi size_t v14; // eax int v15; // ebx const char *v16; // eax char *v17; // eax unsigned int v18; // edi char *v19; // ebx size_t v20; // [esp+Ch] [ebp-1Ch] int v21; // [esp+10h] [ebp-18h] int v22; // [esp+10h] [ebp-18h] char *v23; // [esp+14h] [ebp-14h] char DstBuf; // [esp+18h] [ebp-10h] v2 = this; sub_85BCB0((int)this, (int)a2); v3 = sub_8784D0(*(int *)dword_BA4860); v4 = a2[3]; v23 = v3; if ( v4 >= a2[2] ) sub_8237A0(a2, v4 + a2[5]); sub_823870(a2, v4, &v23); v5 = v2[4]; if ( v5 ) { v6 = sub_878740((int)"Root Parent", *(_DWORD *)(v5 + 8)); v7 = a2[3]; v23 = v6; if ( v7 >= a2[2] ) sub_8237A0(a2, v7 + a2[5]); sub_823870(a2, v7, &v23); } v21 = v2[2]; if ( v21 ) { v8 = v2[3]; if ( v8 ) v8 = *(_DWORD *)(v8 + 8); v9 = sub_878670((int)"Hardware partitions", v8); v10 = a2[3]; v23 = v9; if ( v10 >= a2[2] ) sub_8237A0(a2, v10 + a2[5]); sub_823870(a2, v10, &v23); v20 = *(_DWORD *)(v21 + 64); v11 = sub_878670((int)"Bone Count", v20); v12 = a2[3]; v23 = v11; if ( v12 >= a2[2] ) sub_8237A0(a2, v12 + a2[5]); sub_823870(a2, v12, &v23); v13 = (char *)operator new(4 * v20); v14 = 0; v23 = v13; if ( v20 ) { do { *(_DWORD *)&v13[4 * v14] = *(_DWORD *)(*(_DWORD *)(v2[5] + 4 * v14) + 8); ++v14; } while ( v14 < v20 ); } qsort(v13, v20, 4u, sub_8714E0); v15 = 0; v22 = 0; if ( v20 ) { while ( 1 ) { sub_7FF6E0(&DstBuf, 0xAu, " %3d", v15); v16 = *(const char **)&v13[4 * v15]; if ( !v16 ) v16 = ""; v17 = sub_878740((int)&DstBuf, (int)v16); v18 = a2[3]; v19 = v17; if ( v18 < a2[2] || (sub_8237A0(a2, v18 + a2[5]), v18 < a2[2]) ) { if ( v18 < a2[3] ) { if ( v19 ) { if ( !*(_DWORD *)(a2[1] + 4 * v18) ) ++a2[4]; } else if ( *(_DWORD *)(a2[1] + 4 * v18) ) { --a2[4]; } } else { a2[3] = v18 + 1; if ( v19 ) ++a2[4]; } *(_DWORD *)(a2[1] + 4 * v18) = v19; } v13 = v23; if ( ++v22 >= v20 ) break; v15 = v22; } } operator delete(v13); } } //----- (00871E40) -------------------------------------------------------- LONG __thiscall sub_871E40(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 int v3; // edi int v4; // edi v1 = this; v2 = (void *)this[5]; *this = &NiSkinInstance::`vftable'; operator delete(v2); sub_85F350((int)v1); v3 = v1[3]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[2]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); return sub_85BA80(v1); } // 9F4264: using guessed type void *NiSkinInstance::`vftable'; //----- (00871EB0) -------------------------------------------------------- _DWORD *__thiscall sub_871EB0(_DWORD *this, int a2, int a3, int a4, void *a5, void *a6, void *a7, char *a8, int a9) { _DWORD *v9; // esi int v10; // ecx float *v11; // esi int v12; // eax int v13; // edi unsigned int v14; // esi _DWORD *v15; // ecx _DWORD *v16; // edx signed int v17; // edi size_t v18; // esi int v19; // eax _DWORD *v20; // eax _DWORD *v21; // esi int v22; // ecx float *v23; // ST2C_4 float *v24; // eax int v25; // edi unsigned int v26; // esi int v27; // eax int v28; // ecx float *v29; // edi float v30; // ST48_4 float v31; // ST4C_4 double v32; // st6 float *v33; // edi float v34; // ST50_4 float v35; // ST54_4 float v36; // ST58_4 float v37; // ST5C_4 float v38; // ST80_4 float v39; // ST84_4 double v40; // st2 double v41; // st1 float v42; // ST88_4 float v43; // ST8C_4 float *v44; // edi float v45; // ST90_4 double v46; // st7 float *v47; // edx char *v48; // eax float v49; // ST94_4 double v50; // st7 float v51; // ST60_4 float v52; // ST64_4 float v53; // ST68_4 char *v54; // eax float v55; // ST3C_4 float v56; // ST40_4 float v57; // ST44_4 char *v58; // eax float v59; // ST74_4 float v60; // ST78_4 float v61; // ST7C_4 _DWORD *result; // eax int v63; // edi _DWORD *v64; // eax int v65; // edx unsigned __int16 *v66; // ecx float *v67; // ST2C_4 float *v68; // eax float v69; // edi unsigned int v70; // esi int v71; // eax float v72; // STAC_4 int v73; // ecx float *v74; // edi float *v75; // edx double v76; // st6 float *v77; // edi float v78; // ST74_4 float v79; // ST78_4 float v80; // ST7C_4 float v81; // ST8C_4 float v82; // ST90_4 float v83; // ST94_4 char *v84; // eax char *v85; // eax float v86; // ST80_4 float v87; // ST84_4 float v88; // ST88_4 int v89; // edx int v90; // ecx unsigned __int16 *v91; // ecx unsigned int v92; // ebx float *v93; // ST2C_4 float *v94; // eax float v95; // esi unsigned int v96; // edx int v97; // eax float *v98; // ST9C_4 float *v99; // eax double v100; // st7 double v101; // st6 double v102; // st7 int v103; // [esp+40h] [ebp-1A4h] int v104; // [esp+70h] [ebp-174h] _DWORD *v105; // [esp+74h] [ebp-170h] int *i; // [esp+78h] [ebp-16Ch] int v107; // [esp+80h] [ebp-164h] float v108; // [esp+84h] [ebp-160h] float v109; // [esp+88h] [ebp-15Ch] float v110; // [esp+8Ch] [ebp-158h] float v111; // [esp+90h] [ebp-154h] unsigned int v112; // [esp+94h] [ebp-150h] float *v113; // [esp+98h] [ebp-14Ch] void *v114; // [esp+9Ch] [ebp-148h] unsigned int v115; // [esp+A0h] [ebp-144h] void *v116; // [esp+A4h] [ebp-140h] int v117; // [esp+A8h] [ebp-13Ch] int v118; // [esp+ACh] [ebp-138h] int v119; // [esp+B0h] [ebp-134h] void *j; // [esp+B4h] [ebp-130h] char v121; // [esp+B8h] [ebp-12Ch] char v122; // [esp+ECh] [ebp-F8h] char v123; // [esp+120h] [ebp-C4h] char v124; // [esp+154h] [ebp-90h] int v125; // [esp+188h] [ebp-5Ch] float v126; // [esp+18Ch] [ebp-58h] float v127; // [esp+190h] [ebp-54h] float v128; // [esp+194h] [ebp-50h] float v129; // [esp+198h] [ebp-4Ch] float v130; // [esp+19Ch] [ebp-48h] float v131; // [esp+1A0h] [ebp-44h] float v132; // [esp+1A4h] [ebp-40h] float v133; // [esp+1A8h] [ebp-3Ch] float v134; // [esp+1ACh] [ebp-38h] float v135; // [esp+1B0h] [ebp-34h] float v136; // [esp+1B4h] [ebp-30h] float v137; // [esp+1B8h] [ebp-2Ch] float v138; // [esp+1BCh] [ebp-28h] float v139; // [esp+1C0h] [ebp-24h] float v140; // [esp+1C4h] [ebp-20h] float v141; // [esp+1C8h] [ebp-1Ch] float v142; // [esp+1CCh] [ebp-18h] float v143; // [esp+1D0h] [ebp-14h] float v144; // [esp+1D4h] [ebp-10h] float v145; // [esp+1D8h] [ebp-Ch] float v146; // [esp+1DCh] [ebp-8h] v9 = this; v117 = a4; j = a7; v10 = this[4]; v116 = a5; v114 = a6; v105 = v9; v119 = a9; sub_87C3F0((float *)(v10 + 104), (int)a8, (float *)&v123); v11 = sub_85BDC0((float *)(v9[2] + 12), &v134, (float *)&v123); v12 = v105[2]; qmemcpy(&v124, v11, 0x34u); v13 = *(_DWORD *)(v12 + 68); v14 = *(_DWORD *)(v12 + 64); v115 = *(_DWORD *)(v12 + 68); v112 = v14; if ( a3 && (v15 = v114) != 0 ) { v16 = j; if ( j && a8 ) { v17 = v117; v18 = 12 * v117; v19 = a3 + 12 * v117; v104 = v19; v107 = 12 * v117 + v19; v20 = v116; if ( v119 == 12 ) { memset(v116, 0, 12 * v117); memset(v114, 0, v18); memset(j, 0, v18); memset(a8, 0, v18); } else { v21 = a8; if ( v117 ) { v113 = (float *)v117; do { *v20 = dword_BA45C0; v20[1] = dword_BA45C4; v20[2] = dword_BA45C8; *v15 = dword_BA45C0; v15[1] = dword_BA45C4; v20 = (_DWORD *)((char *)v20 + v119); v15[2] = dword_BA45C8; v15 = (_DWORD *)((char *)v15 + v119); *v16 = dword_BA45C0; v16[1] = dword_BA45C4; v16[2] = dword_BA45C8; v16 = (_DWORD *)((char *)v16 + v119); *v21 = dword_BA45C0; v21[1] = dword_BA45C4; v21[2] = dword_BA45C8; v21 = (_DWORD *)((char *)v21 + v119); v113 = (float *)((char *)v113 - 1); } while ( v113 ); v17 = v117; } } v118 = 0; if ( v112 ) { v22 = v115 + 68; for ( i = (int *)(v115 + 68); ; v22 = (int)i ) { v115 = *(unsigned __int16 *)(v22 + 4); v23 = (float *)(v22 - 68); v24 = sub_85BDC0((float *)&v124, (float *)&v122, (float *)(*(_DWORD *)(v105[5] + 4 * v118) + 104)); qmemcpy(&v134, sub_85BDC0(v24, (float *)&v121, v23), 0x34u); v25 = *i; v103 = *i; sub_85DA30(&v134, (int)&v125, v146); v26 = 0; if ( v115 ) { while ( 1 ) { v27 = *(unsigned __int16 *)(v25 + 8 * v26); v111 = *(float *)(v25 + 8 * v26 + 4); v28 = v27 * v119; v27 *= 12; v29 = (float *)(a2 + v27 + 8); v30 = v126 * *(float *)(a2 + v27 + 4) + *(float *)&v125 * *(float *)(a2 + v27) + v127 * *v29 + v143; v31 = v129 * *(float *)(a2 + v27 + 4) + v128 * *(float *)(a2 + v27) + v130 * *v29 + v144; v32 = v133 * *v29; v33 = (float *)(v104 + v27 + 8); v34 = v132 * *(float *)(a2 + v27 + 4) + v131 * *(float *)(a2 + v27) + v32 + v145; v35 = v134 * *(float *)(a3 + v27) + v135 * *(float *)(a3 + v27 + 4) + v136 * *(float *)(a3 + v27 + 8); v36 = v137 * *(float *)(a3 + v27) + v138 * *(float *)(a3 + v27 + 4) + v139 * *(float *)(a3 + v27 + 8); v37 = v140 * *(float *)(a3 + v27) + v141 * *(float *)(a3 + v27 + 4) + v142 * *(float *)(a3 + v27 + 8); v38 = v135 * *(float *)(v104 + v27 + 4) + v134 * *(float *)(v104 + v27) + v136 * *v33; v39 = v138 * *(float *)(v104 + v27 + 4) + v137 * *(float *)(v104 + v27) + v139 * *v33; v40 = v141 * *(float *)(v104 + v27 + 4) + v140 * *(float *)(v104 + v27); v41 = v142 * *v33; v113 = (float *)(v107 + v27 + 4); v42 = v40 + v41; v43 = v136 * *(float *)(v107 + v27 + 8) + v135 * *v113 + v134 * *(float *)(v107 + v27); v44 = (float *)(v107 + v27 + 8); v45 = v138 * *v113 + v137 * *(float *)(v107 + v27) + v139 * *v44; v46 = v140 * *(float *)(v107 + v27); v47 = (float *)(v107 + v27 + 4); v48 = (char *)v116; v49 = v46 + v141 * *v47 + v142 * *v44; v50 = v111; v51 = v30 * v111; v52 = v31 * v111; v53 = v34 * v111; *(float *)((char *)v116 + v28) = v51 + *(float *)((char *)v116 + v28); *(float *)&v48[v28 + 4] = v52 + *(float *)&v48[v28 + 4]; ++v26; *(float *)&v48[v28 + 8] = v53 + *(float *)&v48[v28 + 8]; v54 = (char *)v114; v55 = v35 * v50; v56 = v36 * v50; v57 = v37 * v50; *(float *)((char *)v114 + v28) = *(float *)((char *)v114 + v28) + v55; *(float *)&v54[v28 + 4] = v56 + *(float *)&v54[v28 + 4]; *(float *)&v54[v28 + 8] = v57 + *(float *)&v54[v28 + 8]; v58 = (char *)j; v59 = v38 * v50; v60 = v39 * v50; v61 = v42 * v50; *(float *)((char *)j + v28) = *(float *)((char *)j + v28) + v59; *(float *)&v58[v28 + 4] = v60 + *(float *)&v58[v28 + 4]; *(float *)&v58[v28 + 8] = v61 + *(float *)&v58[v28 + 8]; v108 = v43 * v50; v109 = v45 * v50; v110 = v50 * v49; *(float *)&a8[v28] = v108 + *(float *)&a8[v28]; *(float *)&a8[v28 + 4] = v109 + *(float *)&a8[v28 + 4]; *(float *)&a8[v28 + 8] = v110 + *(float *)&a8[v28 + 8]; if ( v26 >= v115 ) break; v25 = v103; } } i += 19; if ( ++v118 >= v112 ) break; } v17 = v117; } sub_87B0A0((float *)v114, v17, v119); sub_87B0A0((float *)j, v17, v119); result = sub_87B0A0((float *)a8, v17, v119); } else { v63 = v119; v64 = v116; if ( v119 == 12 ) { memset(v116, 0, 12 * v117); memset(v114, 0, 12 * v117); } else if ( v117 ) { v65 = v117; do { *v64 = dword_BA45C0; v64[1] = dword_BA45C4; v64[2] = dword_BA45C8; *v15 = dword_BA45C0; v15[1] = dword_BA45C4; v15[2] = dword_BA45C8; v64 = (_DWORD *)((char *)v64 + v63); v15 = (_DWORD *)((char *)v15 + v63); --v65; } while ( v65 ); } v118 = 0; if ( v112 ) { v66 = (unsigned __int16 *)(v115 + 68); for ( j = (void *)(v115 + 68); ; v66 = (unsigned __int16 *)j ) { v115 = v66[2]; v67 = (float *)(v66 - 34); v68 = sub_85BDC0((float *)&v124, (float *)&v121, (float *)(*(_DWORD *)(v105[5] + 4 * v118) + 104)); qmemcpy(&v134, sub_85BDC0(v68, (float *)&v122, v67), 0x34u); v69 = *(float *)j; v111 = *(float *)j; sub_85DA30(&v134, (int)&v125, v146); v70 = 0; if ( v115 ) { while ( 1 ) { v71 = *(unsigned __int16 *)(LODWORD(v69) + 8 * v70); v72 = *(float *)(LODWORD(v69) + 8 * v70 + 4); v73 = v71 * v119; v71 *= 12; v74 = (float *)(a2 + v71 + 8); v108 = v126 * *(float *)(a2 + v71 + 4) + *(float *)&v125 * *(float *)(a2 + v71) + v127 * *v74 + v143; v109 = v129 * *(float *)(a2 + v71 + 4) + v128 * *(float *)(a2 + v71) + v130 * *v74 + v144; v75 = (float *)(a3 + v71 + 4); v76 = v133 * *v74; v77 = (float *)(a3 + v71 + 8); v110 = v132 * *(float *)(a2 + v71 + 4) + v131 * *(float *)(a2 + v71) + v76 + v145; v78 = v134 * *(float *)(a3 + v71) + v135 * *v75 + v136 * *v77; v79 = v137 * *(float *)(a3 + v71) + v138 * *v75 + v139 * *v77; v80 = v140 * *(float *)(a3 + v71) + v141 * *v75 + v142 * *v77; v81 = v108 * v72; v82 = v109 * v72; v83 = v110 * v72; v84 = (char *)v116; ++v70; *(float *)((char *)v116 + v73) = v81 + *(float *)((char *)v116 + v73); *(float *)&v84[v73 + 4] = v82 + *(float *)&v84[v73 + 4]; *(float *)&v84[v73 + 8] = v83 + *(float *)&v84[v73 + 8]; v85 = (char *)v114; v86 = v78 * v72; v87 = v79 * v72; v88 = v72 * v80; *(float *)((char *)v114 + v73) = v86 + *(float *)((char *)v114 + v73); *(float *)&v85[v73 + 4] = v87 + *(float *)&v85[v73 + 4]; *(float *)&v85[v73 + 8] = v88 + *(float *)&v85[v73 + 8]; if ( v70 >= v115 ) break; v69 = v111; } } j = (char *)j + 76; if ( ++v118 >= v112 ) break; } v63 = v119; } result = sub_87B0A0((float *)v114, v117, v63); } } else { v89 = v119; if ( v119 == 12 ) { result = memset(v116, 0, 12 * v117); } else { v90 = v117; for ( result = v116; v90; --v90 ) { *result = dword_BA45C0; result[1] = dword_BA45C4; result[2] = dword_BA45C8; result = (_DWORD *)((char *)result + v89); } } v118 = 0; if ( v14 ) { v91 = (unsigned __int16 *)(v13 + 68); for ( j = (void *)(v13 + 68); ; v91 = (unsigned __int16 *)j ) { v92 = v91[2]; v93 = (float *)(v91 - 34); v94 = sub_85BDC0((float *)&v124, (float *)&v121, (float *)(*(_DWORD *)(v105[5] + 4 * v118) + 104)); qmemcpy(&v134, sub_85BDC0(v94, (float *)&v122, v93), 0x34u); sub_85DA30(&v134, (int)&v125, v146); v95 = *(float *)j; v96 = 0; if ( v92 ) { do { v97 = *(unsigned __int16 *)(LODWORD(v95) + 8 * v96); v111 = *(float *)(LODWORD(v95) + 8 * v96 + 4); v98 = (float *)((char *)v116 + v97 * v119); v99 = (float *)(a2 + 12 * v97); v108 = v126 * v99[1] + *(float *)&v125 * *v99 + v127 * v99[2] + v143; v109 = v129 * v99[1] + v128 * *v99 + v130 * v99[2] + v144; v110 = *v99 * v131 + v132 * v99[1] + v99[2] * v133 + v145; v100 = v110 * v111; v101 = v109 * v111 + v98[1]; *v98 = v108 * v111 + *v98; v102 = v100 + v98[2]; v98[1] = *(float *)&v101; v98[2] = *(float *)&v102; ++v96; } while ( v96 < v92 ); } j = (char *)j + 76; result = (_DWORD *)(v118 + 1); v118 = (int)result; if ( (unsigned int)result >= v112 ) break; } } } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00872A60) -------------------------------------------------------- _DWORD *__thiscall sub_872A60(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiAccumulator::`vftable'; v1[2] = 0; return v1; } // 9F62D4: using guessed type void *NiAccumulator::`vftable'; //----- (00872A80) -------------------------------------------------------- bool __thiscall sub_872A80(void *this, int a2) { return sub_85BB20(this, a2); } //----- (00872AA0) -------------------------------------------------------- int __thiscall sub_872AA0(void *this, int a2, _DWORD **a3) { return sub_85BB00(this, a2, a3); } //----- (00872AB0) -------------------------------------------------------- int __thiscall sub_872AB0(int *this, void **a2) { sub_85BC50(this, (signed int)a2); return sub_876290(a2); } //----- (00872AD0) -------------------------------------------------------- int __thiscall sub_872AD0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; nullsub_32(a2); result = sub_875AD0(a2); v2[2] = result; return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00872AF0) -------------------------------------------------------- char __thiscall sub_872AF0(_DWORD **this, int a2) { _DWORD **v2; // esi char result; // al v2 = this; result = sub_85BA30(this, a2); if ( result ) { if ( v2[2] ) (*(void (__stdcall **)(int))(*v2[2] + 20))(a2); result = 1; } return result; } //----- (00872B30) -------------------------------------------------------- int __thiscall sub_872B30(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; nullsub_32(a2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 44))(a2, v2[2]); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00872B60) -------------------------------------------------------- char __thiscall sub_872B60(_DWORD *this, int a2) { _DWORD *v2; // esi int v4; // eax v2 = this; if ( !sub_85BB20(this, a2) ) return 0; v4 = v2[2]; if ( !v4 ) goto LABEL_10; if ( !a2 ) return 0; if ( !v4 ) { LABEL_10: if ( !a2 ) return 1; return 0; } return 1; } //----- (00872BA0) -------------------------------------------------------- char *sub_872BA0() { return dword_BA4870; } //----- (00872BB0) -------------------------------------------------------- void __thiscall sub_872BB0(_DWORD *this, _DWORD *a2) { this[2] = a2; if ( a2 ) { if ( (_DWORD *)a2[43] != this ) sub_697160(a2, (int)this); } } //----- (00872BE0) -------------------------------------------------------- _DWORD *__thiscall sub_872BE0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_85BA50(this); *v2 = &NiCollisionObject::`vftable'; v2[2] = a2; if ( a2 && (_DWORD *)a2[43] != v2 ) sub_697160(a2, (int)v2); return v2; } // A25884: using guessed type void *NiCollisionObject::`vftable'; //----- (00872C10) -------------------------------------------------------- int __thiscall sub_872C10(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4870); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); return (*(int (__thiscall **)(void *, _DWORD *))(*(_DWORD *)v3 + 36))(v3, v2); } //----- (00872C70) -------------------------------------------------------- unsigned int __thiscall sub_872C70(_DWORD *this, char *a2) { _DWORD *v2; // ebx char *v3; // eax char *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v9; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA4870); v4 = a2; v5 = *((_DWORD *)a2 + 3); v9 = v3; if ( v5 >= *((_DWORD *)a2 + 2) ) sub_8237A0(a2, v5 + *((_DWORD *)a2 + 5)); sub_823870(v4, v5, &v9); v6 = sub_878700((int)"m_pkSceneObject", v2[2]); v7 = *((_DWORD *)v4 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v7 + *((_DWORD *)v4 + 5)); return sub_823870(v4, v7, &a2); } //----- (00872CF0) -------------------------------------------------------- void sub_872CF0() { qmemcpy(&unk_BA48D8, &unk_ABDAD0, 0x44u); } //----- (00872D10) -------------------------------------------------------- int __thiscall sub_872D10(int *this, void **a2) { return sub_85B150(this, a2); } //----- (00872D20) -------------------------------------------------------- int __thiscall sub_872D20(_DWORD *this, _DWORD *a2) { return sub_85B1A0(this, a2); } //----- (00872D30) -------------------------------------------------------- int __thiscall sub_872D30(char *this, int a2) { _BYTE *v2; // esi char v3; // di unsigned int v4; // eax _BYTE *v5; // ecx int result; // eax char v7; // al int v8; // edx char v9; // cl char v10; // cl char v11; // dl unsigned int v12; // [esp+14h] [ebp+8h] v2 = this; v3 = 0; v4 = 0; v5 = this + 28; while ( *((_DWORD *)v5 - 2) != a2 ) { ++v4; v3 += *v5; v5 += 12; if ( v4 >= 4 ) return 0; } v7 = v2[12 * v4 + 28]; v8 = 0; v9 = v7 - 1; if ( !v7 ) return 0; if ( v7 != 1 ) { do v8 += 1 << v9--; while ( v9 ); } result = (v8 + 1) << v3; v12 = (v8 + 1) << v3; if ( !(*v2 & 1) ) { v10 = HIBYTE(v12); v11 = BYTE2(v12); HIBYTE(v12) = result; BYTE2(v12) = BYTE1(v12); LOBYTE(v12) = v10; BYTE1(v12) = v11; result = v12 >> (32 - v2[1]); } return result; } //----- (00872DC0) -------------------------------------------------------- void sub_872DC0() { unsigned int v0; // edi int v1; // esi v0 = 0; do { v1 = dword_BA48AC[v0]; if ( v1 ) { if ( !InterlockedDecrement((volatile LONG *)(v1 + 4)) ) { if ( v1 ) (**(void (__thiscall ***)(int, signed int))v1)(v1, 1); } dword_BA48AC[v0] = 0; } ++v0; } while ( v0 < 10 ); } // BA48AC: using guessed type int dword_BA48AC[]; //----- (00872E00) -------------------------------------------------------- void __cdecl sub_872E00(const void *a1) { unsigned int v1; // edi int v2; // esi qmemcpy(&unk_BA48D8, a1, 0x44u); v1 = 0; do { v2 = dword_BA48AC[v1]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } dword_BA48AC[v1] = 0; } ++v1; } while ( v1 < 10 ); } // BA48AC: using guessed type int dword_BA48AC[]; //----- (00872E60) -------------------------------------------------------- _DWORD *__cdecl sub_872E60(float *a1, float *a2, int a3, unsigned int a4) { _DWORD *v4; // eax int v5; // edi char v6; // dl unsigned int v7; // eax _BYTE *v8; // ecx char v9; // bl int v10; // eax _BYTE *v11; // ecx char v12; // dl unsigned int v13; // eax char v14; // bl int v15; // eax _BYTE *v16; // ecx char v17; // dl unsigned int v18; // eax char v19; // bl int v20; // eax _BYTE *v21; // ecx char v22; // dl unsigned int v23; // eax char v24; // bl int v25; // eax _BYTE *v26; // ecx char v27; // dl unsigned int v28; // eax char v29; // bl int v30; // eax float *v31; // esi _BYTE *v32; // ecx char v33; // dl unsigned int v34; // eax char v35; // bl int v36; // eax _BYTE *v37; // ecx char v38; // dl unsigned int v39; // eax char v40; // bl int v41; // eax _BYTE *v42; // ecx char v43; // dl unsigned int v44; // eax char v45; // bl int v46; // eax char *v47; // esi rsize_t v48; // ebx unsigned int v49; // eax unsigned int v50; // edi int Src; // [esp+Ch] [ebp-14h] int v53; // [esp+10h] [ebp-10h] __int64 v54; // [esp+14h] [ebp-Ch] _DWORD *v55; // [esp+1Ch] [ebp-4h] unsigned int v56; // [esp+28h] [ebp+8h] int v57; // [esp+2Ch] [ebp+Ch] v4 = operator new(0x70u); v5 = a3; if ( v4 ) v55 = sub_8698C0(v4, 0x20u, 0x20u, (_DWORD *)a3, 1u, a4); else v55 = 0; v6 = 0; v7 = 0; v8 = (_BYTE *)(a3 + 28); while ( *((_DWORD *)v8 - 2) ) { v6 += *v8; ++v7; v8 += 12; if ( v7 >= 4 ) { v9 = 0; goto LABEL_8; } } if ( *(_BYTE *)a3 & 1 ) v9 = v6; else v9 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v7 + 28) - v6; LABEL_8: v10 = sub_872D30((char *)a3, 0); v54 = (signed __int64)(*a1 * 255.0); v11 = (_BYTE *)(a3 + 28); Src = ((_DWORD)v54 << v9) & v10; v12 = 0; v13 = 0; while ( *((_DWORD *)v11 - 2) != 1 ) { v12 += *v11; ++v13; v11 += 12; if ( v13 >= 4 ) { v14 = 0; goto LABEL_12; } } if ( *(_BYTE *)a3 & 1 ) v14 = v12; else v14 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v13 + 28) - v12; LABEL_12: v15 = sub_872D30((char *)a3, 1); v54 = (signed __int64)(a1[1] * 255.0); v16 = (_BYTE *)(a3 + 28); Src |= ((_DWORD)v54 << v14) & v15; v17 = 0; v18 = 0; while ( *((_DWORD *)v16 - 2) != 2 ) { v17 += *v16; ++v18; v16 += 12; if ( v18 >= 4 ) { v19 = 0; goto LABEL_16; } } if ( *(_BYTE *)a3 & 1 ) v19 = v17; else v19 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v18 + 28) - v17; LABEL_16: v20 = sub_872D30((char *)a3, 2); v54 = (signed __int64)(a1[2] * 255.0); v21 = (_BYTE *)(a3 + 28); Src |= ((_DWORD)v54 << v19) & v20; v22 = 0; v23 = 0; while ( *((_DWORD *)v21 - 2) != 3 ) { v22 += *v21; ++v23; v21 += 12; if ( v23 >= 4 ) { v24 = 0; goto LABEL_20; } } if ( *(_BYTE *)a3 & 1 ) v24 = v22; else v24 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v23 + 28) - v22; LABEL_20: v25 = sub_872D30((char *)a3, 3); v54 = (signed __int64)(a1[3] * 255.0); v26 = (_BYTE *)(a3 + 28); Src |= ((_DWORD)v54 << v24) & v25; v27 = 0; v28 = 0; while ( *((_DWORD *)v26 - 2) ) { v27 += *v26; ++v28; v26 += 12; if ( v28 >= 4 ) { v29 = 0; goto LABEL_24; } } if ( *(_BYTE *)a3 & 1 ) v29 = v27; else v29 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v28 + 28) - v27; LABEL_24: v30 = sub_872D30((char *)a3, 0); v31 = a2; v54 = (signed __int64)(*a2 * 255.0); v32 = (_BYTE *)(a3 + 28); v53 = ((_DWORD)v54 << v29) & v30; v33 = 0; v34 = 0; while ( *((_DWORD *)v32 - 2) != 1 ) { v33 += *v32; ++v34; v32 += 12; if ( v34 >= 4 ) { v35 = 0; goto LABEL_28; } } if ( *(_BYTE *)a3 & 1 ) v35 = v33; else v35 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v34 + 28) - v33; LABEL_28: v36 = sub_872D30((char *)a3, 1); v54 = (signed __int64)(a2[1] * 255.0); v37 = (_BYTE *)(a3 + 28); v53 |= ((_DWORD)v54 << v35) & v36; v38 = 0; v39 = 0; while ( *((_DWORD *)v37 - 2) != 2 ) { v38 += *v37; ++v39; v37 += 12; if ( v39 >= 4 ) { v40 = 0; goto LABEL_32; } } if ( *(_BYTE *)a3 & 1 ) v40 = v38; else v40 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v39 + 28) - v38; LABEL_32: v41 = sub_872D30((char *)a3, 2); v54 = (signed __int64)(a2[2] * 255.0); v42 = (_BYTE *)(a3 + 28); v53 |= ((_DWORD)v54 << v40) & v41; v43 = 0; v44 = 0; while ( *((_DWORD *)v42 - 2) != 3 ) { v43 += *v42; ++v44; v42 += 12; if ( v44 >= 4 ) { v45 = 0; goto LABEL_36; } } if ( *(_BYTE *)a3 & 1 ) v45 = v43; else v45 = *(_BYTE *)(a3 + 1) - *(_BYTE *)(a3 + 12 * v44 + 28) - v43; LABEL_36: v46 = sub_872D30((char *)a3, 3); v57 = 0; v54 = (signed __int64)(v31[3] * 255.0); v53 |= ((_DWORD)v54 << v45) & v46; if ( a4 ) { while ( 1 ) { v47 = (char *)(v55[20] + *(_DWORD *)v55[23] + v57 * *(_DWORD *)(v55[23] + 4 * v55[24])); v56 = 0; v48 = (unsigned __int8)(*(_BYTE *)(v5 + 1) >> 3); do { v49 = v56 >> 4; HIDWORD(v54) = v56 >> 4; v50 = 0; while ( 1 ) { memcpy_s(v47, v48, &Src + (v49 != v50++ >> 4), v48); v47 += v48; if ( v50 >= 0x20 ) break; v49 = HIDWORD(v54); } ++v56; } while ( v56 < 0x20 ); if ( ++v57 >= a4 ) break; v5 = a3; } } return v55; } //----- (008732F0) -------------------------------------------------------- int __cdecl sub_8732F0(int a1, int a2) { unsigned int v3; // eax float v4; // ecx float v5; // eax float v6; // edx double v7; // st7 double v8; // st6 float v9; // ecx float v10; // ST28_4 float v11; // edx float v12; // ecx float v13; // edx _DWORD *v14; // eax int v15; // esi int v16; // ebx float v17; // [esp+4h] [ebp-30h] float v18; // [esp+4h] [ebp-30h] float v19; // [esp+4h] [ebp-30h] float v20; // [esp+8h] [ebp-2Ch] float v21; // [esp+8h] [ebp-2Ch] float v22; // [esp+8h] [ebp-2Ch] float v23; // [esp+Ch] [ebp-28h] float v24; // [esp+Ch] [ebp-28h] float v25; // [esp+Ch] [ebp-28h] float v26; // [esp+10h] [ebp-24h] float v27; // [esp+14h] [ebp-20h] float v28; // [esp+18h] [ebp-1Ch] float v29; // [esp+1Ch] [ebp-18h] float v30; // [esp+20h] [ebp-14h] float v31; // [esp+24h] [ebp-10h] float v32; // [esp+28h] [ebp-Ch] float v33; // [esp+2Ch] [ebp-8h] float v34; // [esp+30h] [ebp-4h] if ( (a2 & 0x7FFFFFFFu) >= 0xA ) return 0; v3 = 1; if ( !dword_BA48AC[a2] ) { switch ( a2 ) { case -2147483647: v27 = 0.0; v28 = 0.0; v29 = 1.0; v30 = 1.0; v31 = 1.0; v32 = 1.0; v33 = 0.0; v34 = 1.0; goto LABEL_18; case -2147483646: v27 = 0.0; v4 = 1.0; v5 = 1.0; v6 = 0.0; v17 = 1.0; v26 = 1.0; v20 = 0.0; v23 = 0.0; goto LABEL_7; case -2147483645: v7 = 0.0; v18 = 0.0; v8 = 1.0; v21 = 1.0; v24 = 1.0; goto LABEL_9; case -2147483644: v18 = 1.0; v21 = 0.0; v24 = 0.0; v8 = 1.0; v7 = 0.0; LABEL_9: v9 = v21; v10 = v8; v11 = v18; v19 = v8; v22 = v8; v28 = v9; v12 = v10; v26 = v8; v27 = v11; v13 = v24; v25 = v7; goto LABEL_16; case -2147483642: v27 = 0.0; v13 = 1.0; v19 = 0.0; v28 = 1.0; v12 = 1.0; v22 = 1.0; v25 = 1.0; v26 = 1.0; goto LABEL_16; case -2147483641: v27 = 0.0; v28 = 1.0; v29 = 0.0; v31 = 1.0; v30 = 1.0; v34 = 1.0; v32 = 1.0; v33 = 0.0; v3 = 6; goto LABEL_18; case -2147483640: v27 = 0.0; v28 = 1.0; v29 = 0.0; v30 = 1.0; v31 = 1.0; v32 = 0.0; v33 = 1.0; v34 = 1.0; v3 = 6; goto LABEL_18; case -2147483639: v27 = 0.0; v4 = 1.0; v5 = 1.0; v17 = 0.0; v6 = 0.0; v20 = 1.0; v23 = 1.0; v26 = 1.0; LABEL_7: v30 = v5; v29 = v6; v28 = v4; v33 = v23; v31 = v17; v32 = v20; v3 = 6; break; default: v27 = 1.0; v28 = 0.0; v13 = 1.0; v19 = 1.0; v12 = 1.0; v25 = 1.0; v26 = 1.0; v22 = 0.0; LABEL_16: v29 = v13; v31 = v19; v30 = v12; v33 = v25; v32 = v22; break; } v34 = v26; LABEL_18: v14 = sub_872E60(&v27, &v31, (int)&unk_BA48D8, v3); v15 = dword_BA48AC[a2]; v16 = (int)v14; if ( (_DWORD *)v15 != v14 ) { if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); dword_BA48AC[a2] = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } } return dword_BA48AC[a2]; } // BA48AC: using guessed type int dword_BA48AC[]; //----- (00873620) -------------------------------------------------------- int __cdecl sub_873620(int a1, int a2) { int (__cdecl *v3)(int, int); // eax if ( a2 >= 0 ) return 0; v3 = off_ABEBD8[0]; if ( !off_ABEBD8[0] ) { v3 = sub_8732F0; off_ABEBD8[0] = sub_8732F0; } return v3(a1, a2); } // ABEBD8: using guessed type int (__cdecl *off_ABEBD8[2])(int, int); //----- (00873650) -------------------------------------------------------- unsigned int __thiscall sub_873650(int *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85B930(this, a2); v3 = sub_8784D0(*(int *)dword_BA4884); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (008736A0) -------------------------------------------------------- float *__thiscall sub_8736A0(float *this) { float *result; // eax int v2; // ecx result = this; *(_DWORD *)this = dword_BA45C0; *((_DWORD *)this + 1) = dword_BA45C4; v2 = dword_BA45C8; result[3] = 0.0; *((_DWORD *)result + 2) = v2; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008736D0) -------------------------------------------------------- float *__thiscall sub_8736D0(float *this, int a2, float a3) { float *result; // eax int v4; // ecx result = this; *this = *(float *)a2; this[1] = *(float *)(a2 + 4); v4 = *(_DWORD *)(a2 + 8); result[3] = a3; *((_DWORD *)result + 2) = v4; return result; } //----- (00873700) -------------------------------------------------------- _DWORD *__thiscall sub_873700(_DWORD *this, float *a2, float *a3) { _DWORD *result; // eax result = this; *this = *(_DWORD *)a2; this[1] = *((_DWORD *)a2 + 1); this[2] = *((_DWORD *)a2 + 2); *((float *)this + 3) = a2[1] * a3[1] + *a2 * *a3 + a2[2] * a3[2]; return result; } //----- (00873740) -------------------------------------------------------- char *__thiscall sub_873740(float *this, const char *a2) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen(a2); v4 = (char *)operator new(v3 + 56); sub_7FF6E0(v4, v3 + 56, "(%g,%g,%g), %g", *v2, v2[1], v2[2], v2[3]); return v4; } //----- (008737A0) -------------------------------------------------------- int __thiscall sub_8737A0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_860940(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 12, 4, &a2, 1); } //----- (008737E0) -------------------------------------------------------- int __thiscall sub_8737E0(_DWORD *this, int a2, float *a3) { int v3; // edi float v4; // edx _DWORD *v5; // esi double v6; // st7 float v7; // ecx double v8; // st7 _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax float *v14; // eax float *v15; // ecx double v16; // st7 _DWORD *v17; // eax double v18; // st7 _DWORD *v19; // eax double v20; // st7 _DWORD *v21; // eax double v22; // st7 _DWORD *v23; // eax int result; // eax char v25; // [esp+4h] [ebp-74h] float v26; // [esp+8h] [ebp-70h] float v27; // [esp+Ch] [ebp-6Ch] float v28; // [esp+10h] [ebp-68h] char v29; // [esp+14h] [ebp-64h] float v30; // [esp+18h] [ebp-60h] float v31; // [esp+1Ch] [ebp-5Ch] float v32; // [esp+20h] [ebp-58h] float v33; // [esp+24h] [ebp-54h] float v34; // [esp+28h] [ebp-50h] float v35; // [esp+2Ch] [ebp-4Ch] float v36; // [esp+30h] [ebp-48h] float v37; // [esp+34h] [ebp-44h] float v38; // [esp+38h] [ebp-40h] float v39; // [esp+3Ch] [ebp-3Ch] float v40; // [esp+40h] [ebp-38h] float v41; // [esp+44h] [ebp-34h] float v42; // [esp+48h] [ebp-30h] float v43; // [esp+4Ch] [ebp-2Ch] float v44; // [esp+50h] [ebp-28h] float v45; // [esp+54h] [ebp-24h] float v46; // [esp+58h] [ebp-20h] float v47; // [esp+5Ch] [ebp-1Ch] float v48; // [esp+60h] [ebp-18h] float v49; // [esp+64h] [ebp-14h] float v50; // [esp+68h] [ebp-10h] float v51; // [esp+6Ch] [ebp-Ch] float v52; // [esp+70h] [ebp-8h] float v53; // [esp+74h] [ebp-4h] float v54; // [esp+80h] [ebp+8h] float v55; // [esp+80h] [ebp+8h] float v56; // [esp+84h] [ebp+Ch] float v57; // [esp+84h] [ebp+Ch] float v58; // [esp+84h] [ebp+Ch] float v59; // [esp+84h] [ebp+Ch] float v60; // [esp+84h] [ebp+Ch] float v61; // [esp+84h] [ebp+Ch] float v62; // [esp+84h] [ebp+Ch] float v63; // [esp+84h] [ebp+Ch] float v64; // [esp+84h] [ebp+Ch] float v65; // [esp+84h] [ebp+Ch] float v66; // [esp+84h] [ebp+Ch] float v67; // [esp+84h] [ebp+Ch] float v68; // [esp+84h] [ebp+Ch] float v69; // [esp+84h] [ebp+Ch] float v70; // [esp+84h] [ebp+Ch] float v71; // [esp+84h] [ebp+Ch] float v72; // [esp+84h] [ebp+Ch] float v73; // [esp+84h] [ebp+Ch] float v74; // [esp+84h] [ebp+Ch] float v75; // [esp+84h] [ebp+Ch] float v76; // [esp+84h] [ebp+Ch] float v77; // [esp+84h] [ebp+Ch] float v78; // [esp+84h] [ebp+Ch] float v79; // [esp+84h] [ebp+Ch] float v80; // [esp+84h] [ebp+Ch] float v81; // [esp+84h] [ebp+Ch] v45 = *a3; v3 = a2; v46 = a3[3]; v4 = a3[10]; v5 = this; v47 = a3[6]; v6 = a3[1]; v51 = a3[9]; v39 = v6; v7 = a3[11]; v8 = a3[4]; v52 = v4; v40 = v8; v53 = v7; v41 = a3[7]; v42 = a3[2]; v43 = a3[5]; v44 = a3[8]; v56 = *(float *)(a2 + 16); v36 = v45 * v56; v37 = v46 * v56; v38 = v56 * v47; v48 = v51 + v36; v49 = v4 + v37; v50 = v7 + v38; v9 = sub_873700(&v25, &v45, &v48); *v5 = *v9; v5[1] = v9[1]; v5[2] = v9[2]; v5[3] = v9[3]; v57 = *(float *)(a2 + 20); v36 = v57 * v45; v37 = v46 * v57; v38 = v57 * v47; v33 = v36 + v51; v48 = v33; v34 = v37 + v52; v49 = v34; v35 = v38 + v53; v50 = v35; v26 = -v45; v27 = -v46; v28 = -v47; v10 = sub_873700(&v29, &v26, &v48); v5[4] = *v10; v5[5] = v10[1]; v5[6] = v10[2]; v5[7] = v10[3]; if ( *(_BYTE *)(a2 + 24) ) { v58 = *(float *)a2; v33 = v42 * v58; v34 = v43 * v58; v35 = v58 * v44; v36 = v33 + v51; v48 = v36; v37 = v34 + v52; v49 = v37; v38 = v35 + v53; v50 = v38; v11 = sub_873700(&v25, &v42, &v48); v5[8] = *v11; v5[9] = v11[1]; v5[10] = v11[2]; v5[11] = v11[3]; v59 = *(float *)(a2 + 4); v33 = v59 * v42; v34 = v43 * v59; v35 = v59 * v44; v36 = v33 + v51; v48 = v36; v37 = v34 + v52; v49 = v37; v38 = v35 + v53; v50 = v38; v26 = -v42; v27 = -v43; v28 = -v44; v12 = sub_873700(&v29, &v26, &v48); v5[12] = *v12; v5[13] = v12[1]; v5[14] = v12[2]; v5[15] = v12[3]; v60 = *(float *)(a2 + 8); v33 = v60 * v39; v34 = v40 * v60; v35 = v60 * v41; v36 = v33 + v51; v48 = v36; v37 = v34 + v52; v49 = v37; v38 = v35 + v53; v50 = v38; v26 = -v39; v27 = -v40; v28 = -v41; v13 = sub_873700(&v29, &v26, &v48); v5[16] = *v13; v5[17] = v13[1]; v5[18] = v13[2]; v5[19] = v13[3]; v61 = *(float *)(a2 + 12); v33 = v39 * v61; v34 = v40 * v61; v35 = v61 * v41; v36 = v33 + v51; v48 = v36; v14 = &v48; v37 = v34 + v52; v49 = v37; v15 = &v39; v38 = v35 + v53; v50 = v38; } else { v62 = *(float *)a2 * *(float *)a2; v63 = v62 + 1.0; v64 = sqrt(v63); v65 = 1.0 / v64; v16 = v65; v66 = -*(float *)a2 * v65; v30 = v42 * v16; v31 = v43 * v16; v32 = v16 * v44; v33 = v45 * v66; v34 = v46 * v66; v35 = v66 * v47; v36 = v33 + v30; v37 = v34 + v31; v38 = v35 + v32; v17 = sub_873700(&v25, &v36, &v51); v5[8] = *v17; v5[9] = v17[1]; v5[10] = v17[2]; v5[11] = v17[3]; v67 = *(float *)(a2 + 4) * *(float *)(a2 + 4); v68 = v67 + 1.0; v69 = sqrt(v68); v70 = 1.0 / v69; v18 = v70; v71 = *(float *)(a2 + 4) * v70; v54 = -v18; v33 = v42 * v54; v34 = v43 * v54; v35 = v54 * v44; v30 = v45 * v71; v31 = v46 * v71; v32 = v71 * v47; v26 = v30 + v33; v36 = v26; v27 = v31 + v34; v37 = v27; v28 = v32 + v35; v38 = v28; v19 = sub_873700(&v25, &v36, &v51); v5[12] = *v19; v5[13] = v19[1]; v5[14] = v19[2]; v5[15] = v19[3]; v72 = *(float *)(v3 + 8) * *(float *)(v3 + 8); v73 = v72 + 1.0; v74 = sqrt(v73); v75 = 1.0 / v74; v20 = v75; v76 = v75 * *(float *)(v3 + 8); v55 = -v20; v30 = v39 * v55; v31 = v40 * v55; v32 = v55 * v41; v26 = v45 * v76; v27 = v46 * v76; v28 = v76 * v47; v33 = v26 + v30; v36 = v33; v34 = v27 + v31; v37 = v34; v35 = v28 + v32; v38 = v35; v21 = sub_873700(&v25, &v36, &v51); v5[16] = *v21; v5[17] = v21[1]; v5[18] = v21[2]; v5[19] = v21[3]; v77 = *(float *)(v3 + 12) * *(float *)(v3 + 12); v78 = v77 + 1.0; v79 = sqrt(v78); v80 = 1.0 / v79; v22 = v80; v81 = -*(float *)(v3 + 12) * v80; v30 = v39 * v22; v31 = v40 * v22; v32 = v22 * v41; v26 = v45 * v81; v27 = v46 * v81; v28 = v81 * v47; v33 = v26 + v30; v36 = v33; v14 = &v51; v34 = v27 + v31; v37 = v34; v15 = &v36; v35 = v28 + v32; v38 = v35; } v23 = sub_873700(&v25, v15, v14); v5[20] = *v23; v5[21] = v23[1]; v5[22] = v23[2]; result = v23[3]; v5[23] = result; return result; } //----- (00873E40) -------------------------------------------------------- bool __thiscall sub_873E40(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_81A6B0(this, a2) && *(_BYTE *)(a2 + 28) == *((_BYTE *)v2 + 28) && *(_DWORD *)(a2 + 32) == v2[8] && *(_DWORD *)(a2 + 36) == v2[9] && *(_DWORD *)(a2 + 40) == v2[10] && *(_DWORD *)(a2 + 44) == v2[11] && *(_DWORD *)(a2 + 48) == v2[12] && *(_DWORD *)(a2 + 52) == v2[13] && *(_DWORD *)(a2 + 56) == v2[14]; } //----- (00873EB0) -------------------------------------------------------- int __thiscall sub_873EB0(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x3Cu); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiStencilProperty::`vftable'; *(_BYTE *)(v4 + 28) = 0; *(_DWORD *)(v4 + 32) = 4; *(_DWORD *)(v4 + 36) = 0; *(_DWORD *)(v4 + 40) = -1; *(_DWORD *)(v4 + 44) = 0; *(_DWORD *)(v4 + 48) = 0; *(_DWORD *)(v4 + 52) = 3; *(_DWORD *)(v4 + 56) = 0; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_BYTE *)(v4 + 28) = *((_BYTE *)v2 + 28); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); *(_DWORD *)(v4 + 36) = *((_DWORD *)v2 + 9); *(_DWORD *)(v4 + 40) = *((_DWORD *)v2 + 10); *(_DWORD *)(v4 + 44) = *((_DWORD *)v2 + 11); *(_DWORD *)(v4 + 48) = *((_DWORD *)v2 + 12); *(_DWORD *)(v4 + 52) = *((_DWORD *)v2 + 13); *(_DWORD *)(v4 + 56) = *((_DWORD *)v2 + 14); return v4; } // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; //----- (00873F50) -------------------------------------------------------- _DWORD *sub_873F50() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_BYTE *)v1 + 28) = 0; v1[9] = 0; v1[11] = 0; v1[12] = 0; v1[14] = 0; *v1 = &NiStencilProperty::`vftable'; v1[8] = 4; v1[10] = -1; v1[13] = 3; return v1; } // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; //----- (00873FA0) -------------------------------------------------------- char *__cdecl sub_873FA0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = TEST_NEVER", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = TEST_LESS", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = TEST_EQUAL", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = TEST_LESSEQUAL", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = TEST_GREATER", ArgList); result = v3; break; case 5: sub_7FF6E0(v3, v2, "%s = TEST_NOTEQUAL", ArgList); result = v3; break; case 6: sub_7FF6E0(v3, v2, "%s = TEST_GREATEREQUAL", ArgList); result = v3; break; case 7: sub_7FF6E0(v3, v2, "%s = TEST_ALWAYS", ArgList); goto LABEL_10; default: LABEL_10: result = v3; break; } return result; } //----- (008740C0) -------------------------------------------------------- char *__cdecl sub_8740C0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = ACTION_KEEP", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = ACTION_ZERO", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = ACTION_REPLACE", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = ACTION_INCREMENT", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = ACTION_DECREMENT", ArgList); result = v3; break; case 5: sub_7FF6E0(v3, v2, "%s = ACTION_INVERT", ArgList); goto LABEL_8; default: LABEL_8: result = v3; break; } return result; } //----- (008741A0) -------------------------------------------------------- char *__cdecl sub_8741A0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = DRAW_CCW_OR_BOTH", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = DRAW_CCW", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = DRAW_CW", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = DRAW_BOTH", ArgList); goto LABEL_6; default: LABEL_6: result = v3; break; } return result; } //----- (00874250) -------------------------------------------------------- LONG sub_874250() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x3Cu); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiStencilProperty::`vftable'; *(_BYTE *)(v1 + 28) = 0; *(_DWORD *)(v1 + 32) = 4; *(_DWORD *)(v1 + 36) = 0; *(_DWORD *)(v1 + 40) = -1; *(_DWORD *)(v1 + 44) = 0; *(_DWORD *)(v1 + 48) = 0; *(_DWORD *)(v1 + 52) = 3; *(_DWORD *)(v1 + 56) = 0; } else { v1 = 0; } result = dword_BA4924; if ( dword_BA4924 != v1 ) { if ( dword_BA4924 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4924; result = InterlockedDecrement((volatile LONG *)(dword_BA4924 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4924 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // 9F6C2C: using guessed type void *NiStencilProperty::`vftable'; // BA4924: using guessed type int dword_BA4924; //----- (008742E0) -------------------------------------------------------- void sub_8742E0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4924; if ( dword_BA4924 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4924 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4924 = 0; } } // BA4924: using guessed type int dword_BA4924; //----- (00874320) -------------------------------------------------------- int __thiscall sub_874320(int *this, void **a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST3C_4 void (__cdecl *v6)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST28_4 void (__cdecl *v9)(_DWORD *, int *, signed int, void ***, signed int); // eax void (__cdecl *v10)(void *, int *, signed int, void ***, signed int); // edx void *v11; // ST14_4 _DWORD *v12; // eax _DWORD *v13; // ST00_4 void (__cdecl *v14)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v15; // eax _DWORD *v16; // ST3C_4 void (__cdecl *v17)(_DWORD *, int *, signed int, void ***, signed int); // eax void (__cdecl *v18)(void *, int *, signed int, void ***, signed int); // edx void *v19; // ST28_4 _DWORD *v20; // eax _DWORD *v21; // ST14_4 void (__cdecl *v22)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v23; // edi int (__cdecl *v24)(_DWORD *, int *, signed int, void ***, signed int); // ecx int result; // eax int v26; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_85FBF0(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v4[1]; a2 = (void **)1; v6(v5, v3 + 7, 1, &a2, 1); v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v7[1]; a2 = (void **)4; v9(v8, &v26, 4, &a2, 1); v3[8] = v26; v10 = (void (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v11 = v2[88]; a2 = (void **)4; v10(v11, v3 + 9, 4, &a2, 1); v12 = v2[88]; v13 = v12; v14 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v12[1]; a2 = (void **)4; v14(v13, v3 + 10, 4, &a2, 1); v15 = v2[88]; v16 = v15; v17 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v15[1]; a2 = (void **)4; v17(v16, &v26, 4, &a2, 1); v3[11] = v26; v18 = (void (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v19 = v2[88]; a2 = (void **)4; v18(v19, &v26, 4, &a2, 1); v3[12] = v26; v20 = v2[88]; v21 = v20; v22 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v20[1]; a2 = (void **)4; v22(v21, &v26, 4, &a2, 1); v3[13] = v26; v23 = v2[88]; v24 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v23[1]; a2 = (void **)4; result = v24(v23, &v26, 4, &a2, 1); v3[14] = v26; return result; } //----- (00874440) -------------------------------------------------------- int __thiscall sub_874440(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, _DWORD **, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, _DWORD **, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, const char **, signed int, _DWORD **, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, const char **, signed int, _DWORD **, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, const char **, signed int, _DWORD **, signed int); // eax int v22; // eax int v23; // edi int (__cdecl *v24)(int, const char **, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)1; v6(v5, v3 + 7, 1, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v9(v8, v3 + 8, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v10 + 8); a2 = (_DWORD *)4; v12(v11, v3 + 9, 4, &a2, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v13 + 8); a2 = (_DWORD *)4; v15(v14, v3 + 10, 4, &a2, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v16 + 8); a2 = (_DWORD *)4; v18(v17, v3 + 11, 4, &a2, 1); v19 = v2[89]; v20 = v19; v21 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v19 + 8); a2 = (_DWORD *)4; v21(v20, v3 + 12, 4, &a2, 1); v22 = v2[89]; a2 = (_DWORD *)4; (*(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v22 + 8))(v22, v3 + 13, 4, &a2, 1); v23 = v2[89]; v24 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v23 + 8); a2 = (_DWORD *)4; return v24(v23, v3 + 14, 4, &a2, 1); } //----- (00874540) -------------------------------------------------------- unsigned int __thiscall sub_874540(int *this, char a2) { _DWORD *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA491C); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = *((_BYTE *)v3 + 28); v6 = sub_878570((int)"m_bEnable", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiRef", v3[9]); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878670((int)"m_uiMask", v3[10]); v11 = v2[3]; *(_DWORD *)&a2 = v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_873FA0((int)"m_eTest", v3[8]); v13 = v2[3]; *(_DWORD *)&a2 = v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8740C0((int)"m_eFailAct", v3[11]); v15 = v2[3]; *(_DWORD *)&a2 = v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8740C0((int)"m_eZFailAct", v3[12]); v17 = v2[3]; *(_DWORD *)&a2 = v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8740C0((int)"m_ePassAct", v3[13]); v19 = v2[3]; *(_DWORD *)&a2 = v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_8741A0((int)"m_eDrawMode", v3[14]); v21 = v2[3]; *(_DWORD *)&a2 = v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); return sub_823870(v2, v21, &a2); } //----- (00874740) -------------------------------------------------------- _DWORD *__thiscall sub_874740(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiGeometryGroupManager::`vftable'; dword_BA4928 = (int)this; return result; } // A25A44: using guessed type void *NiGeometryGroupManager::`vftable'; // BA4928: using guessed type int dword_BA4928; //----- (00874770) -------------------------------------------------------- int __stdcall sub_874770(int a1) { return 0; } //----- (00874780) -------------------------------------------------------- char __stdcall sub_874780(int a1) { return 0; } //----- (00874790) -------------------------------------------------------- char __stdcall sub_874790(int a1, int a2, int a3) { return 0; } //----- (008747A0) -------------------------------------------------------- char __stdcall sub_8747A0(int a1, int a2) { return 0; } //----- (008747B0) -------------------------------------------------------- void *__thiscall sub_8747B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiGeometryGroupManager::`vftable'; dword_BA4928 = 0; if ( a2 & 1 ) operator delete(this); return v2; } // A25A44: using guessed type void *NiGeometryGroupManager::`vftable'; // BA4928: using guessed type int dword_BA4928; //----- (008747E0) -------------------------------------------------------- _DWORD *__thiscall sub_8747E0(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, unsigned __int16 a9, int a10, __int16 a11, __int16 a12) { _DWORD *v12; // esi v12 = this; sub_87EB90(this, a11, a3, a4, a5, a6, a7, a8, a12, a10); *((_WORD *)v12 + 32) = a9; *((_WORD *)v12 + 45) = a12; *((_WORD *)v12 + 44) = a11; *v12 = &NiTriShapeDynamicData::`vftable'; *((_WORD *)v12 + 6) = a2; v12[17] = 3 * a9; return v12; } // A25A6C: using guessed type void *NiTriShapeDynamicData::`vftable'; //----- (00874850) -------------------------------------------------------- __int16 __thiscall sub_874850(_WORD *this) { return this[44]; } //----- (00874860) -------------------------------------------------------- __int16 __thiscall sub_874860(_WORD *this) { return this[45]; } //----- (00874870) -------------------------------------------------------- int __thiscall sub_874870(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { int result; // eax *a2 = *(_WORD *)(this + 90); *a3 = 0; *a4 = *(_DWORD *)(this + 72); result = *(unsigned __int16 *)(this + 90); *a5 = 3 * result; return result; } //----- (008748D0) -------------------------------------------------------- int __thiscall sub_8748D0(_DWORD *this, _DWORD *a2) { return sub_87ED10(this, a2); } //----- (008748E0) -------------------------------------------------------- bool __thiscall sub_8748E0(float **this, int a2) { float **v2; // esi v2 = this; return sub_87ED20(this, a2) && *((_WORD *)v2 + 44) == *(_WORD *)(a2 + 88) && *((_WORD *)v2 + 45) == *(_WORD *)(a2 + 90); } //----- (00874920) -------------------------------------------------------- char *sub_874920() { return dword_BA492C; } //----- (00874930) -------------------------------------------------------- __int16 __thiscall sub_874930(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[44] = a2; return result; } //----- (00874940) -------------------------------------------------------- __int16 __thiscall sub_874940(_WORD *this, __int16 a2) { __int16 result; // ax result = a2; this[45] = a2; return result; } //----- (00874950) -------------------------------------------------------- void *__thiscall sub_874950(void *this, char a2) { void *v2; // esi v2 = this; sub_87EDF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00874980) -------------------------------------------------------- int __thiscall sub_874980(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_87EEC0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, v3 + 22, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 4); a2 = 2; return v8(v7, (char *)v3 + 90, 2, &a2, 1); } //----- (008749E0) -------------------------------------------------------- int __thiscall sub_8749E0(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_87F160(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)2; v6(v5, v3 + 88, 2, &a2, 1); v7 = v2[89]; v8 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)2; return v8(v7, v3 + 90, 2, &a2, 1); } //----- (00874A40) -------------------------------------------------------- unsigned int __thiscall sub_874A40(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_87F2A0(this, a2); v4 = sub_8784D0(*(int *)dword_BA492C); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usActiveVertices", v3[44]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8785F0((int)"m_usActiveTriangles", v3[45]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (00874B00) -------------------------------------------------------- float *__thiscall sub_874B00(float *this, float a2, float a3, float a4, float a5) { float *result; // eax result = this; *this = a2; this[1] = a3; this[2] = a4; this[3] = a5; return result; } //----- (00874B20) -------------------------------------------------------- float *__thiscall sub_874B20(float *this, float *a2, float *a3) { float *result; // eax result = a2; *a2 = *a3 + *this; a2[1] = a3[1] + this[1]; a2[2] = a3[2] + this[2]; a2[3] = a3[3] + this[3]; return result; } //----- (00874B50) -------------------------------------------------------- float *__thiscall sub_874B50(float *this, float *a2, float *a3) { float *result; // eax result = a2; *a2 = *this - *a3; a2[1] = this[1] - a3[1]; a2[2] = this[2] - a3[2]; a2[3] = this[3] - a3[3]; return result; } //----- (00874B80) -------------------------------------------------------- float *__thiscall sub_874B80(float *this, float *a2) { float *result; // eax result = a2; *a2 = -*this; a2[1] = -this[1]; a2[2] = -this[2]; a2[3] = -this[3]; return result; } //----- (00874BB0) -------------------------------------------------------- float *__thiscall sub_874BB0(float *this, float *a2, float *a3) { float *v3; // edx float *result; // eax v3 = a3; result = a2; *a2 = *a3 * *this - a3[1] * this[1] - a3[2] * this[2] - a3[3] * this[3]; a2[1] = this[1] * *v3 + v3[1] * *this + v3[3] * this[2] - this[3] * v3[2]; a2[2] = this[2] * *v3 + v3[2] * *this + v3[1] * this[3] - v3[3] * this[1]; a2[3] = this[3] * *v3 + v3[3] * *this + this[1] * v3[2] - v3[1] * this[2]; return result; } //----- (00874C40) -------------------------------------------------------- float *__cdecl sub_874C40(float *a1, float *a2) { float *result; // eax result = a1; *a1 = *a2; a1[1] = -a2[1]; a1[2] = -a2[2]; a1[3] = -a2[3]; return result; } //----- (00874C70) -------------------------------------------------------- int __cdecl sub_874C70(int a1, float a2, int a3, int a4, int a5, int a6) { int v6; // ST10_4 int v7; // eax int v9; // [esp+14h] [ebp-20h] int v10; // [esp+24h] [ebp-10h] float v11; // [esp+40h] [ebp+Ch] v6 = sub_878350((int)&v10, a2, a4, a5); v7 = sub_878350((int)&v9, a2, a3, a6); v11 = (1.0 - a2) * (a2 + a2); sub_878350(a1, v11, v7, v6); return a1; } //----- (00874CE0) -------------------------------------------------------- float *__cdecl sub_874CE0(float *a1, float *a2) { float *v2; // esi long double v3; // st7 double v4; // st7 float v5; // ST04_4 double v6; // st7 float v7; // ST04_4 double v8; // st7 float *result; // eax float v10; // [esp+14h] [ebp+Ch] float v11; // [esp+14h] [ebp+Ch] float v12; // [esp+14h] [ebp+Ch] v2 = a2; v3 = *a2; if ( v3 <= -1.0 ) { v4 = flt_BA45B4; } else if ( v3 >= 1.0 ) { v4 = 0.0; } else { v10 = acos(v3); v4 = v10; } v11 = v4; v5 = sin(v11); v6 = v5; v7 = fabs(v5); if ( v7 >= 0.001 ) v8 = v11 / v6; else v8 = 1.0; result = a1; v12 = v8; *a1 = 0.0; a1[1] = v2[1] * v12; a1[2] = v2[2] * v12; a1[3] = v12 * v2[3]; return result; } // BA45B4: using guessed type float flt_BA45B4; //----- (00874D90) -------------------------------------------------------- float *__cdecl sub_874D90(float *a1, float *a2, float *a3, float *a4) { float *v4; // esi float *v5; // eax float *v6; // edi float *v7; // eax float *v8; // eax float *v9; // eax int v11; // [esp+10h] [ebp-88h] char v12; // [esp+20h] [ebp-78h] char v13; // [esp+30h] [ebp-68h] char v14; // [esp+40h] [ebp-58h] char v15; // [esp+50h] [ebp-48h] char v16; // [esp+60h] [ebp-38h] int v17; // [esp+70h] [ebp-28h] float v18; // [esp+74h] [ebp-24h] float v19; // [esp+78h] [ebp-20h] float v20; // [esp+7Ch] [ebp-1Ch] float v21; // [esp+80h] [ebp-18h] float v22; // [esp+84h] [ebp-14h] float v23; // [esp+88h] [ebp-10h] float v24; // [esp+8Ch] [ebp-Ch] float v25; // [esp+90h] [ebp-8h] float v26; // [esp+94h] [ebp-4h] float v27; // [esp+A8h] [ebp+10h] v4 = a3; v21 = *a3; v22 = -a3[1]; v23 = -a3[2]; v24 = -a3[3]; v5 = sub_874BB0(&v21, (float *)&v14, a4); v6 = sub_874CE0((float *)&v12, v5); v7 = sub_874BB0(&v21, (float *)&v15, a2); v8 = sub_874CE0((float *)&v13, v7); v27 = v6[1] + v8[1]; v25 = v6[2] + v8[2]; v26 = v6[3] + v8[3]; *(float *)&v17 = *v6 + *v8; v18 = v27; v19 = v25; v20 = v26; v9 = (float *)sub_878150((int)&v11, -0.25, (int)&v17); sub_878290((float *)&v16, v9); sub_874BB0(v4, a1, (float *)&v16); return a1; } //----- (00874E70) -------------------------------------------------------- float *__thiscall sub_874E70(float *this, float *a2, float *a3) { float v3; // ST04_4 float *result; // eax long double v5; // st7 float v6; // ST08_4 double v7; // st7 float v8; // ST08_4 float v9; // [esp+4h] [ebp-8h] float v10; // [esp+14h] [ebp+8h] v3 = this[2] * this[2] + this[1] * this[1] + this[3] * this[3]; v9 = sqrt(v3); if ( v9 >= 0.001 ) { v5 = *this; if ( v5 <= -1.0 ) { v7 = flt_BA45B4; } else if ( v5 >= 1.0 ) { v7 = 0.0; } else { v6 = acos(v5); v7 = v6; } v8 = v7; result = a3; *a2 = v8 + v8; v10 = 1.0 / v9; *a3 = this[1] * v10; a3[1] = v10 * this[2]; a3[2] = v10 * this[3]; } else { *a2 = 0.0; result = a3; *a3 = 0.0; a3[1] = 0.0; a3[2] = 0.0; } return result; } // BA45B4: using guessed type float flt_BA45B4; //----- (00874F50) -------------------------------------------------------- void __thiscall sub_874F50(float *this, float *a2) { float *v2; // esi double v3; // st7 signed int v4; // ebx int v5; // edi double v6; // st7 float *v7; // ecx double v8; // st7 int v9; // eax double v10; // st7 float *v11; // [esp+8h] [ebp-14h] float *v12; // [esp+Ch] [ebp-10h] float *v13; // [esp+10h] [ebp-Ch] int v14; // [esp+14h] [ebp-8h] float *v15; // [esp+18h] [ebp-4h] float v16; // [esp+24h] [ebp+8h] float v17; // [esp+24h] [ebp+8h] float v18; // [esp+24h] [ebp+8h] float v19; // [esp+24h] [ebp+8h] float v20; // [esp+24h] [ebp+8h] float v21; // [esp+24h] [ebp+8h] float v22; // [esp+24h] [ebp+8h] float v23; // [esp+24h] [ebp+8h] float v24; // [esp+24h] [ebp+8h] float v25; // [esp+24h] [ebp+8h] v2 = a2; v3 = *a2 + a2[4]; v15 = this; v16 = v3 + a2[8]; if ( v16 <= 0.0 ) { v4 = 0; if ( *v2 < (double)v2[4] ) v4 = 1; if ( v2[4 * v4] < (double)v2[8] ) v4 = 2; v5 = dword_ABEC28[v4]; v6 = v2[4 * v4] - v2[4 * dword_ABEC28[v4]]; v14 = dword_ABEC28[v5]; v20 = v6 - v2[4 * v14] + 1.0; v21 = sqrt(v20); v7 = v15; v8 = v21; v12 = v15 + 2; v11 = v15 + 1; v13 = v15 + 3; v22 = v21 * 0.5; v9 = v14; *(&v11)[v4] = v22; v23 = 0.5 / v8; v10 = v23; *v7 = (v2[v5 + 3 * v9] - v2[v9 + 3 * v5]) * v23; v24 = (v2[3 * v4 + v5] + v2[v4 + 3 * v5]) * v23; *(&v11)[v5] = v24; v25 = v10 * (v2[v9 + 3 * v4] + v2[v4 + 3 * v9]); *(&v11)[v9] = v25; } else { v17 = v16 + 1.0; v18 = sqrt(v17); *this = v18 * 0.5; v19 = 0.5 / v18; this[1] = (v2[7] - v2[5]) * v19; this[2] = (v2[2] - v2[6]) * v19; this[3] = v19 * (v2[3] - v2[1]); } } //----- (008750E0) -------------------------------------------------------- void __thiscall sub_8750E0(float *this) { float v1; // ST00_4 float v2; // ST00_4 float v3; // ST00_4 float v4; // ST00_4 v1 = fabs(this[1]); if ( v1 <= 0.0000000099999999 && 0.0 != this[1] ) this[1] = 0.0; v2 = fabs(this[2]); if ( v2 <= 0.0000000099999999 && 0.0 != this[2] ) this[2] = 0.0; v3 = fabs(this[3]); if ( v3 <= 0.0000000099999999 && 0.0 != this[3] ) this[3] = 0.0; v4 = fabs(*this); if ( v4 <= 0.0000000099999999 && 0.0 != *this ) *this = 0.0; } //----- (00875190) -------------------------------------------------------- float *__thiscall sub_875190(float *this) { float *v1; // esi float *result; // eax int v3; // [esp+8h] [ebp-14h] float v4; // [esp+18h] [ebp-4h] v1 = this; v4 = this[1] * this[1] + *this * *this + this[2] * this[2] + this[3] * this[3]; v4 = sqrt(v4); v4 = 1.0 / v4; result = (float *)sub_8780F0(this, (int)&v3, v4); *v1 = *result; v1[1] = result[1]; v1[2] = result[2]; v1[3] = result[3]; return result; } //----- (00875200) -------------------------------------------------------- char *__thiscall sub_875200(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 128); sub_7FF6E0(v4, v3 + 128, "%s: (w=%g,x=%g,y=%g,z=%g)", ArgList, *v2, v2[1], v2[2], v2[3]); return v4; } //----- (00875260) -------------------------------------------------------- float *__thiscall sub_875260(float *this, float a2, int a3) { float *result; // eax float v4; // ST00_4 float v5; // ST04_4 float v6; // [esp+10h] [ebp+8h] result = this; v4 = a2 * 0.5; v6 = cos(v4); v5 = sin(v4); *this = v6; this[1] = *(float *)a3 * v5; this[2] = *(float *)(a3 + 4) * v5; this[3] = v5 * *(float *)(a3 + 8); return result; } //----- (008752B0) -------------------------------------------------------- int __thiscall sub_8752B0(char *this, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, char *, signed int, signed int *, signed int); // edx char *v4; // esi int v5; // ST3C_4 int v6; // eax int v7; // ST28_4 void (__cdecl *v8)(int, char *, signed int, signed int *, signed int); // eax int v9; // eax int v10; // ST14_4 void (__cdecl *v11)(int, char *, signed int, signed int *, signed int); // eax int v12; // edi int (__cdecl *v13)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = this; v5 = *(_DWORD *)(a2 + 352); a2 = 4; v3(v5, this, 4, &a2, 1); v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v6 + 4); a2 = 4; v8(v7, v4 + 4, 4, &a2, 1); v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v9 + 4); a2 = 4; v11(v10, v4 + 8, 4, &a2, 1); v12 = *(_DWORD *)(v2 + 352); v13 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v12 + 4); a2 = 4; return v13(v12, v4 + 12, 4, &a2, 1); } //----- (00875330) -------------------------------------------------------- int __thiscall sub_875330(float *this, signed int a2) { float *v2; // esi signed int v3; // edi void (__cdecl *v4)(int, float *, signed int, signed int *, signed int); // edx int v5; // ST3C_4 int v6; // eax int v7; // ST28_4 void (__cdecl *v8)(int, float *, signed int, signed int *, signed int); // eax int v9; // eax int v10; // ST14_4 void (__cdecl *v11)(int, float *, signed int, signed int *, signed int); // eax int v12; // edi int (__cdecl *v13)(int, float *, signed int, signed int *, signed int); // edx v2 = this; sub_8750E0(this); v3 = a2; v4 = *(void (__cdecl **)(int, float *, signed int, signed int *, signed int))(*(_DWORD *)(a2 + 356) + 8); v5 = *(_DWORD *)(a2 + 356); a2 = 4; v4(v5, v2, 4, &a2, 1); v6 = *(_DWORD *)(v3 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, float *, signed int, signed int *, signed int))(v6 + 8); a2 = 4; v8(v7, v2 + 1, 4, &a2, 1); v9 = *(_DWORD *)(v3 + 356); v10 = v9; v11 = *(void (__cdecl **)(int, float *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; v11(v10, v2 + 2, 4, &a2, 1); v12 = *(_DWORD *)(v3 + 356); v13 = *(int (__cdecl **)(int, float *, signed int, signed int *, signed int))(v12 + 8); a2 = 4; return v13(v12, v2 + 3, 4, &a2, 1); } //----- (008753C0) -------------------------------------------------------- char __thiscall sub_8753C0(_BYTE *this, int a2) { _BYTE *v2; // esi int v4; // eax int v5; // ecx int v6; // esi unsigned int v7; // eax v2 = this; if ( !sub_85BB20(this, a2) ) return 0; if ( v2[8] != *(_BYTE *)(a2 + 8) ) return 0; v4 = *((_DWORD *)v2 + 3); if ( v4 != *(_DWORD *)(a2 + 12) ) return 0; v5 = *(_DWORD *)(a2 + 20); v6 = *((_DWORD *)v2 + 5); v7 = -4 * v4 != 0; if ( v7 >= 4 ) { while ( *(_DWORD *)v6 == *(_DWORD *)v5 ) { v7 -= 4; v5 += 4; v6 += 4; if ( v7 < 4 ) goto LABEL_8; } return 0; } LABEL_8: if ( v7 ) { if ( *(_BYTE *)v5 != *(_BYTE *)v6 || v7 > 1 && (*(_BYTE *)(v5 + 1) != *(_BYTE *)(v6 + 1) || v7 > 2 && *(_BYTE *)(v5 + 2) != *(_BYTE *)(v6 + 2)) ) { return 0; } } return 1; } //----- (00875450) -------------------------------------------------------- void __thiscall sub_875450(void *this) { int v1; // esi DWORD v2; // eax v1 = (int)this; EnterCriticalSection(&stru_BA4944); v2 = GetCurrentThreadId(); ++dword_BA4960; dword_BA495C = v2; if ( !dword_BA4934 ) dword_BA4934 = v1; if ( dword_BA4938 ) { *(_DWORD *)(dword_BA4938 + 32) = v1; *(_DWORD *)(v1 + 28) = dword_BA4938; } else { *(_DWORD *)(v1 + 28) = 0; } dword_BA4938 = v1; *(_DWORD *)(v1 + 32) = 0; if ( !--dword_BA4960 ) dword_BA495C = 0; LeaveCriticalSection(&stru_BA4944); } // BA4934: using guessed type int dword_BA4934; // BA4938: using guessed type int dword_BA4938; // BA495C: using guessed type int dword_BA495C; // BA4960: using guessed type int dword_BA4960; //----- (008754D0) -------------------------------------------------------- void __thiscall sub_8754D0(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax int v3; // eax int v4; // eax v1 = this; EnterCriticalSection(&stru_BA4944); v2 = GetCurrentThreadId(); ++dword_BA4960; dword_BA495C = v2; if ( (_DWORD *)dword_BA4934 == v1 ) dword_BA4934 = v1[8]; if ( (_DWORD *)dword_BA4938 == v1 ) dword_BA4938 = v1[7]; v3 = v1[7]; if ( v3 ) *(_DWORD *)(v3 + 32) = v1[8]; v4 = v1[8]; if ( v4 ) *(_DWORD *)(v4 + 28) = v1[7]; if ( !--dword_BA4960 ) dword_BA495C = 0; LeaveCriticalSection(&stru_BA4944); } // BA4934: using guessed type int dword_BA4934; // BA4938: using guessed type int dword_BA4938; // BA495C: using guessed type int dword_BA495C; // BA4960: using guessed type int dword_BA4960; //----- (00875550) -------------------------------------------------------- char *sub_875550() { return dword_BA493C; } //----- (00875560) -------------------------------------------------------- _DWORD *__thiscall sub_875560(_DWORD *this, int a2) { _DWORD *v2; // esi void (__stdcall ***v3)(signed int); // ecx int v4; // ecx int v5; // eax v2 = this; if ( this != (_DWORD *)a2 ) { v3 = (void (__stdcall ***)(signed int))this[6]; if ( v3 ) { (**v3)(1); v2[6] = 0; } v4 = v2[3]; *((_BYTE *)v2 + 8) = *(_BYTE *)(a2 + 8); v2[4] = 1; if ( v4 != *(_DWORD *)(a2 + 12) ) { operator delete((void *)v2[5]); v5 = *(_DWORD *)(a2 + 12); v2[3] = v5; v2[5] = operator new(4 * v5); } memcpy_s((void *)v2[5], 4 * v2[3], *(const void **)(a2 + 20), 4 * *(_DWORD *)(a2 + 12)); } return v2; } //----- (008755F0) -------------------------------------------------------- _BYTE *sub_8755F0() { _DWORD *v0; // eax _BYTE *v1; // esi v0 = operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *(_DWORD *)v1 = &NiPalette::`vftable'; v1[8] = 0; *((_DWORD *)v1 + 3) = 0; *((_DWORD *)v1 + 5) = 0; *((_DWORD *)v1 + 4) = 1; *((_DWORD *)v1 + 6) = 0; sub_875450(v1); return v1; } // A25B2C: using guessed type void *NiPalette::`vftable'; //----- (00875640) -------------------------------------------------------- _DWORD *__thiscall sub_875640(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 void (__stdcall ***v4)(signed int); // ecx v2 = this; v3 = (void *)*((_DWORD *)this + 5); *(_DWORD *)this = &NiPalette::`vftable'; operator delete(v3); v4 = (void (__stdcall ***)(signed int))v2[6]; if ( v4 ) (**v4)(1); sub_8754D0(v2); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A25B2C: using guessed type void *NiPalette::`vftable'; //----- (00875690) -------------------------------------------------------- _BYTE *__thiscall sub_875690(_DWORD *this, int a2) { _BYTE *v2; // esi int v3; // ecx void *v4; // eax v2 = this; sub_85BA50(this); *(_DWORD *)v2 = &NiPalette::`vftable'; v2[8] = *(_BYTE *)(a2 + 8); v3 = *(_DWORD *)(a2 + 12); *((_DWORD *)v2 + 3) = v3; *((_DWORD *)v2 + 4) = 1; v4 = operator new(4 * v3); *((_DWORD *)v2 + 5) = v4; memcpy_s(v4, 4 * *((_DWORD *)v2 + 3), *(const void **)(a2 + 20), 4 * *(_DWORD *)(a2 + 12)); *((_DWORD *)v2 + 6) = 0; if ( dword_BA46D0 ) (*(void (__stdcall **)(_BYTE *))(*(_DWORD *)dword_BA46D0 + 240))(v2); sub_875450(v2); return v2; } // A25B2C: using guessed type void *NiPalette::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (00875720) -------------------------------------------------------- _BYTE *__thiscall sub_875720(_DWORD *this, char a2, int a3, void *Src) { _BYTE *v4; // esi void *v5; // eax rsize_t v6; // ST04_4 v4 = this; sub_85BA50(this); v4[8] = a2; *((_DWORD *)v4 + 3) = a3; *(_DWORD *)v4 = &NiPalette::`vftable'; *((_DWORD *)v4 + 4) = 1; v5 = operator new(4 * a3); v6 = 4 * *((_DWORD *)v4 + 3); *((_DWORD *)v4 + 5) = v5; memcpy_s(v5, v6, Src, v6); *((_DWORD *)v4 + 6) = 0; if ( dword_BA46D0 ) (*(void (__stdcall **)(_BYTE *))(*(_DWORD *)dword_BA46D0 + 240))(v4); sub_875450(v4); return v4; } // A25B2C: using guessed type void *NiPalette::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008757A0) -------------------------------------------------------- int __thiscall sub_8757A0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, int *, signed int); // edx int v8; // ST00_4 int v9; // eax int v10; // edi int (__cdecl *v11)(int, int, int, int *, signed int); // eax int v12; // ST1C_4 int v13; // ST18_4 int result; // eax int v15; // [esp+8h] [ebp-8h] int v16; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v15 = 1; v6(v5, (char *)&a2 + 3, 1, &v15, 1); *((_BYTE *)v3 + 8) = HIBYTE(a2) != 0; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); v15 = 4; v7(v8, &v16, 4, &v15, 1); if ( v16 != v3[3] ) { operator delete((void *)v3[5]); v9 = v16; v3[3] = v16; v3[5] = (int)operator new(4 * v9); } v10 = *(_DWORD *)(v2 + 352); v11 = *(int (__cdecl **)(int, int, int, int *, signed int))(v10 + 4); v12 = 4 * v3[3]; v13 = v3[5]; v15 = 1; result = v11(v10, v13, v12, &v15, 1); if ( dword_BA46D0 ) result = (*(int (__stdcall **)(int *))(*(_DWORD *)dword_BA46D0 + 240))(v3); return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (00875880) -------------------------------------------------------- int __thiscall sub_875880(_BYTE *this, signed int a2) { signed int v2; // edi _BYTE *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, _BYTE *, signed int, signed int *, signed int); // edx int v8; // ST14_4 int v9; // edi int (__cdecl *v10)(int, int, int, signed int *, signed int); // eax int v11; // ST08_4 int v12; // ST04_4 int v14; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); HIBYTE(a2) = v3[8]; v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v14 = 1; v6(v5, (char *)&a2 + 3, 1, &v14, 1); v7 = *(void (__cdecl **)(int, _BYTE *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v8 = *(_DWORD *)(v2 + 356); a2 = 4; v7(v8, v3 + 12, 4, &a2, 1); v9 = *(_DWORD *)(v2 + 356); v10 = *(int (__cdecl **)(int, int, int, signed int *, signed int))(v9 + 8); v11 = 4 * *((_DWORD *)v3 + 3); v12 = *((_DWORD *)v3 + 5); a2 = 1; return v10(v9, v12, v11, &a2, 1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00875910) -------------------------------------------------------- unsigned int __thiscall sub_875910(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA493C); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00875960) -------------------------------------------------------- int sub_875960() { int result; // eax if ( dword_BA4964 ) result = (**(int (__stdcall ***)(signed int))dword_BA4964)(1); if ( dword_BA4968 ) result = (**(int (__stdcall ***)(signed int))dword_BA4968)(1); return result; } // BA4964: using guessed type int dword_BA4964; // BA4968: using guessed type int dword_BA4968; //----- (00875990) -------------------------------------------------------- char __thiscall sub_875990(void *this, int a2, int a3) { void *v3; // esi char v4; // bl char v6; // [esp+8h] [ebp-20h] v3 = this; sub_8AA890(&v6, a2, a3); v4 = (*(int (__thiscall **)(void *, char *))(*(_DWORD *)v3 + 4))(v3, &v6); sub_8AA920(&v6); return v4; } //----- (008759D0) -------------------------------------------------------- int __thiscall sub_8759D0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int (__thiscall *v4)(_DWORD *); // edx v2 = this; result = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( (_BYTE)result ) { v4 = *(int (__thiscall **)(_DWORD *))(*v2 + 56); v2[88] = a2; result = v4(v2); } v2[88] = 0; return result; } //----- (00875A20) -------------------------------------------------------- int __thiscall sub_875A20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edx int result; // eax v2 = this; v3 = *this; this[89] = a2; result = (*(int (**)(void))(v3 + 60))(); v2[89] = 0; return result; } //----- (00875A50) -------------------------------------------------------- void *__thiscall sub_875A50(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A25BA4: using guessed type void *NiTArray::`vftable'; //----- (00875A80) -------------------------------------------------------- int __stdcall sub_875A80(int a1, int a2, __int16 a3) { int result; // eax result = a1; *(_DWORD *)(a1 + 4) = a2; *(_WORD *)(a1 + 8) = a3; return result; } //----- (00875AA0) -------------------------------------------------------- void *__thiscall sub_875AA0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A25B7C: using guessed type void *NiTArray::`vftable'; //----- (00875AD0) -------------------------------------------------------- int __thiscall sub_875AD0(_DWORD *this) { int v1; // eax int v2; // eax int result; // eax v1 = this[93]; this[93] = v1 + 1; v2 = *(_DWORD *)(this[90] + 4 * v1); if ( v2 == -1 ) result = 0; else result = *(_DWORD *)(this[77] + 4 * v2); return result; } //----- (00875B00) -------------------------------------------------------- int __thiscall sub_875B00(_DWORD *this) { int v1; // eax v1 = this[97]; this[97] = v1 + 1; return *(_DWORD *)(this[94] + 4 * v1); } //----- (00875B20) -------------------------------------------------------- signed int __thiscall sub_875B20(_DWORD *this, signed int a2) { int v3; // ST00_4 if ( !a2 ) return -1; v3 = a2; a2 = -1; sub_8C4C90(this + 98, v3, &a2); return a2; } //----- (00875B50) -------------------------------------------------------- int __cdecl sub_875B50(int a1) { int (__stdcall *v1)(_DWORD); // ecx int result; // eax int (__stdcall *v3)(_DWORD); // [esp+0h] [ebp-4h] v3 = v1; if ( sub_8C4C90((_DWORD *)dword_BA4964, a1, &v3) ) result = v3(v3); else result = 0; return result; } // BA4964: using guessed type int dword_BA4964; //----- (00875B80) -------------------------------------------------------- int __thiscall sub_875B80(_DWORD *this, int a2) { return *(_DWORD *)(this[2] + 4 * a2); } //----- (00875B90) -------------------------------------------------------- unsigned int __thiscall sub_875B90(_DWORD *this, int a2) { unsigned int v2; // edx unsigned int result; // eax _DWORD *v4; // ecx v2 = this[4]; result = 0; if ( !v2 ) return 0; v4 = (_DWORD *)this[2]; while ( a2 != *v4 ) { ++result; ++v4; if ( result >= v2 ) return 0; } return result; } //----- (00875BC0) -------------------------------------------------------- char __thiscall sub_875BC0(char *this, char *Src) { char *v2; // edi char *v3; // esi void *v4; // ecx int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi char v7; // bl v2 = this; v3 = this + 36; strcpy_s(this + 36, 0x104u, Src); nullsub_6(v4); sub_8AA640(*((_BYTE **)v2 + 75), v3); v5 = sub_8AA270(); v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( v5 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) ) { v7 = (*(int (__thiscall **)(char *, _DWORD))(*(_DWORD *)v2 + 4))(v2, v6); (**v6)(v6, 1); return v7; } (**v6)(v6, 1); } *((_DWORD *)v2 + 180) = 1; strcpy_s(v2 + 724, 0x104u, "Cannot open file."); return 0; } //----- (00875C70) -------------------------------------------------------- int __cdecl sub_875C70(int a1, int a2) { sub_815C70((_DWORD *)dword_BA4964, a1, a2); return 0; } // BA4964: using guessed type int dword_BA4964; //----- (00875C90) -------------------------------------------------------- char __cdecl sub_875C90(int a1) { return sub_916F40((_DWORD *)dword_BA4964, a1); } // BA4964: using guessed type int dword_BA4964; //----- (00875CB0) -------------------------------------------------------- unsigned int __cdecl sub_875CB0(int a1) { int v1; // esi unsigned int v2; // edx unsigned int result; // eax _DWORD *v4; // ecx int v5; // ecx int v6; // edx int v7; // ecx v1 = dword_BA4968; v2 = *(_DWORD *)(dword_BA4968 + 12); result = 0; if ( v2 ) { v4 = *(_DWORD **)(dword_BA4968 + 4); while ( *v4 != a1 ) { ++result; ++v4; if ( result >= v2 ) return result; } if ( result < v2 ) { v5 = *(_DWORD *)(dword_BA4968 + 4); v6 = *(_DWORD *)(v5 + 4 * result); *(_DWORD *)(v5 + 4 * result) = 0; if ( v6 ) --*(_DWORD *)(v1 + 16); v7 = *(_DWORD *)(v1 + 12) - 1; if ( result == v7 ) *(_DWORD *)(v1 + 12) = v7; } } return result; } // BA4968: using guessed type int dword_BA4968; //----- (00875D10) -------------------------------------------------------- int __thiscall sub_875D10(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int result; // eax v1 = this; v2 = 0; if ( this[85] ) { do result = (*(int (__stdcall **)(_DWORD *))(**(_DWORD **)(v1[83] + 4 * v2++) + 20))(v1); while ( v2 < v1[85] ); } return result; } //----- (00875D40) -------------------------------------------------------- char __thiscall sub_875D40(char *this, char *Src) { char *v2; // edi char *v3; // esi void *v4; // ecx int v5; // esi char v6; // bl v2 = this; v3 = this + 36; strcpy_s(this + 36, 0x104u, Src); nullsub_6(v4); sub_8AA640(*((_BYTE **)v2 + 75), v3); v5 = sub_8AA270(); if ( v5 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) ) { v6 = (*(int (__thiscall **)(char *, int))(*(_DWORD *)v2 + 16))(v2, v5); (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return v6; } (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } return 0; } //----- (00875DD0) -------------------------------------------------------- char __thiscall sub_875DD0(void *this, int *a2, _DWORD *a3) { void *v3; // esi char v4; // bl char v6; // [esp+8h] [ebp-20h] int v7; // [esp+1Ch] [ebp-Ch] v3 = this; sub_8AA8D0(&v6); v4 = (*(int (__thiscall **)(void *, char *))(*(_DWORD *)v3 + 16))(v3, &v6); *a3 = v7; *a2 = sub_8AA950((int)&v6); sub_8AA920(&v6); return v4; } //----- (00875E20) -------------------------------------------------------- int __cdecl sub_875E20(char *Src) { signed int v1; // esi int v2; // edi char *i; // eax int v4; // eax char *Context; // [esp+8h] [ebp-18h] char Dst; // [esp+Ch] [ebp-14h] strcpy_s(&Dst, 0x10u, Src); v1 = 24; v2 = 0; for ( i = strtok_s(&Dst, ".", &Context); i; i = strtok_s(0, ".", &Context) ) { v4 = atoi(i) << v1; v1 -= 8; v2 |= v4; } return v2; } //----- (00875EA0) -------------------------------------------------------- int __thiscall sub_875EA0(_DWORD **this) { return (*(int (**)(void))(*this[102] + 8))(); } //----- (00875EC0) -------------------------------------------------------- int __thiscall sub_875EC0(_DWORD *this, int a2, int a3) { int v3; // ecx int result; // eax v3 = this[102]; if ( v3 ) result = (*(int (__stdcall **)(int, int))(*(_DWORD *)v3 + 4))(a2, a3); else result = 0; return result; } //----- (00875EE0) -------------------------------------------------------- void __thiscall sub_875EE0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiObject * (__cdecl *)(void)>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A25BAC: using guessed type void *NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; // A25C20: using guessed type void *NiTPointerMap::`vftable'; // A25C40: using guessed type void *NiTStringTemplateMap,NiObject * (__cdecl *)(void)>::`vftable'; //----- (00875F50) -------------------------------------------------------- int __thiscall sub_875F50(_DWORD *this, _BYTE *a2) { _BYTE *v2; // esi char v3; // dl unsigned int i; // eax int v5; // edi int v6; // eax v2 = a2; v3 = *a2; for ( i = 0; v3; i = v5 + v6 ) { v5 = 33 * i; v6 = v3; v3 = (v2++)[1]; } return i % this[1]; } //----- (00875F90) -------------------------------------------------------- void __thiscall sub_875F90(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,unsigned short>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,unsigned short>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A25BCC: using guessed type void *NiTMapBase,char const *,unsigned short>::`vftable'; // A25C60: using guessed type void *NiTPointerMap::`vftable'; // A25C80: using guessed type void *NiTStringTemplateMap,unsigned short>::`vftable'; //----- (00876000) -------------------------------------------------------- bool __stdcall sub_876000(const char *a1, const char *a2) { return strcmp(a1, a2) == 0; } //----- (00876050) -------------------------------------------------------- __int16 __thiscall sub_876050(_BYTE *this, int a2, char *Src, __int16 a4) { unsigned int v4; // kr00_4 char *v5; // eax __int16 result; // ax if ( this[16] ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); *(_DWORD *)(a2 + 4) = v5; strcpy_s(v5, v4 + 1, Src); result = a4; } else { result = a2; *(_DWORD *)(a2 + 4) = Src; } *(_WORD *)(a2 + 8) = a4; return result; } //----- (008760B0) -------------------------------------------------------- void **__thiscall sub_8760B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25BAC: using guessed type void *NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; //----- (008760F0) -------------------------------------------------------- void **__thiscall sub_8760F0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25BAC: using guessed type void *NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; // A25C20: using guessed type void *NiTPointerMap::`vftable'; //----- (00876130) -------------------------------------------------------- void *__thiscall sub_876130(void *this, char a2) { void *v2; // esi v2 = this; sub_875EE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00876160) -------------------------------------------------------- void **__thiscall sub_876160(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,unsigned short>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25BCC: using guessed type void *NiTMapBase,char const *,unsigned short>::`vftable'; //----- (008761A0) -------------------------------------------------------- void **__thiscall sub_8761A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,unsigned short>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25BCC: using guessed type void *NiTMapBase,char const *,unsigned short>::`vftable'; // A25C60: using guessed type void *NiTPointerMap::`vftable'; //----- (008761E0) -------------------------------------------------------- void *__thiscall sub_8761E0(void *this, char a2) { void *v2; // esi v2 = this; sub_875F90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00876210) -------------------------------------------------------- void **__thiscall sub_876210(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiObject const *,unsigned int>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25B84: using guessed type void *NiTMapBase,NiObject const *,unsigned int>::`vftable'; //----- (00876250) -------------------------------------------------------- void **__thiscall sub_876250(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiObject const *,unsigned int>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A25B84: using guessed type void *NiTMapBase,NiObject const *,unsigned int>::`vftable'; // A25CA0: using guessed type void *NiTPointerMap::`vftable'; //----- (00876290) -------------------------------------------------------- int __thiscall sub_876290(void **this) { void **v1; // esi void (__cdecl **v2)(void *, int *, signed int, int *, signed int); // eax void (__cdecl **v3)(void *, int *, signed int, int *, signed int); // ST00_4 void (__cdecl *v4)(void *, int *, signed int, int *, signed int); // eax void *v5; // eax void *v6; // eax int result; // eax int v8; // [esp+4h] [ebp-8h] int v9; // [esp+8h] [ebp-4h] v1 = this; v2 = (void (__cdecl **)(void *, int *, signed int, int *, signed int))this[88]; v3 = v2; v4 = v2[1]; v9 = 4; v4(v3, &v8, 4, &v9, 1); v5 = v1[91]; if ( v1[92] == v5 ) { if ( v5 ) v6 = (void *)(2 * (_DWORD)v5); else v6 = (void *)1; sub_811D30(v1 + 90, v6); } result = v8; *((_DWORD *)v1[90] + (_DWORD)v1[92]) = v8; v1[92] = (char *)v1[92] + 1; return result; } //----- (00876300) -------------------------------------------------------- int __thiscall sub_876300(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ST00_4 void (__cdecl *v4)(int, int *, signed int, int *, signed int); // eax int result; // eax int v6; // [esp+4h] [ebp-8h] int v7; // [esp+8h] [ebp-4h] v1 = this; v2 = this[88]; v3 = v2; v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v7 = 4; v4(v3, &v6, 4, &v7, 1); if ( v6 == -1 ) result = 0; else result = *(_DWORD *)(v1[77] + 4 * v6); return result; } //----- (00876350) -------------------------------------------------------- unsigned int __thiscall sub_876350(void **this) { void **v1; // esi void (__cdecl **v2)(void *, unsigned int *, signed int, int *, signed int); // eax int v3; // ebx void (__cdecl **v4)(void *, unsigned int *, signed int, int *, signed int); // ST00_4 void (__cdecl *v5)(void *, unsigned int *, signed int, int *, signed int); // eax void *v6; // eax void *v7; // eax unsigned int result; // eax _DWORD *v9; // eax _DWORD *v10; // ST00_4 void (__cdecl *v11)(_DWORD *, int *, signed int, int *, signed int); // eax void *v12; // eax _DWORD *v13; // edi unsigned int v14; // eax int v15; // ecx int v16; // [esp+Ch] [ebp-10h] int v17; // [esp+10h] [ebp-Ch] int v18; // [esp+14h] [ebp-8h] unsigned int v19; // [esp+18h] [ebp-4h] v1 = this; v2 = (void (__cdecl **)(void *, unsigned int *, signed int, int *, signed int))this[88]; v3 = 1; v4 = v2; v5 = v2[1]; v18 = 4; v5(v4, &v19, 4, &v18, 1); v6 = v1[95]; if ( v1[96] == v6 ) { if ( v6 ) v7 = (void *)(2 * (_DWORD)v6); else v7 = (void *)1; sub_811D30(v1 + 94, v7); } *((_DWORD *)v1[94] + (_DWORD)v1[96]) = v19; result = v19; v1[96] = (char *)v1[96] + 1; v18 = 0; if ( result ) { do { v9 = v1[88]; v10 = v9; v11 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v9[1]; v17 = 4; v11(v10, &v16, 4, &v17, 1); v12 = v1[91]; if ( v1[92] == v12 ) { if ( v12 ) v3 = 2 * (_DWORD)v12; if ( (void *)v3 != v12 ) { if ( v3 ) { v13 = operator new(4 * v3); v14 = 0; if ( v1[92] ) { do { v13[v14] = *((_DWORD *)v1[90] + v14); ++v14; } while ( v14 < (unsigned int)v1[92] ); } } else { v13 = 0; } operator delete(v1[90]); v1[90] = v13; v1[91] = (void *)v3; } } *((_DWORD *)v1[90] + (_DWORD)v1[92]) = v16; v15 = v18; result = v19; v3 = 1; v1[92] = (char *)v1[92] + 1; v18 = v15 + 1; } while ( v15 + 1 < result ); } return result; } //----- (008764B0) -------------------------------------------------------- int __thiscall sub_8764B0(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi void *v4; // eax int result; // eax v2 = this[95]; v3 = this + 94; if ( this[96] == v2 ) { if ( v2 ) v4 = (void *)(2 * v2); else v4 = (void *)1; sub_811D30((void **)this + 94, v4); } result = v3[2]; *(_DWORD *)(*v3 + 4 * result) = a2; ++v3[2]; return result; } //----- (008764F0) -------------------------------------------------------- unsigned int __thiscall sub_8764F0(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax int v3; // ST04_4 void (__cdecl *v4)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int result; // eax unsigned int i; // edi void (__cdecl *v7)(int, size_t *, signed int, int *, signed int); // edx int v8; // ST04_4 size_t *v9; // eax size_t v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] unsigned int v12; // [esp+14h] [ebp-4h] v1 = this; v2 = this[88]; v3 = v2; v4 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v2 + 4); v11 = 4; v4(v3, &v12, 4, &v11, 1); sub_8237A0(v1 + 1, ++v12); v11 = 0; result = sub_823870(v1 + 1, 0, &v11); for ( i = 1; i < v12; ++i ) { v7 = *(void (__cdecl **)(int, size_t *, signed int, int *, signed int))(v1[88] + 4); v8 = v1[88]; v11 = 4; v7(v8, &v10, 4, &v11, 1); v9 = (size_t *)operator new(0x10u); if ( v9 ) result = (unsigned int)sub_8800E0(v9, v10); else result = 0; if ( i < v1[3] ) { if ( i < v1[4] ) { if ( result ) { if ( !*(_DWORD *)(v1[2] + 4 * i) ) ++v1[5]; } else if ( *(_DWORD *)(v1[2] + 4 * i) ) { --v1[5]; } } else { v1[4] = i + 1; if ( result ) ++v1[5]; } *(_DWORD *)(v1[2] + 4 * i) = result; } } return result; } //----- (008765E0) -------------------------------------------------------- char __stdcall sub_8765E0(int *a1) { int v1; // edx int v2; // eax unsigned int v3; // eax int v4; // esi unsigned int v5; // edi int v6; // ecx v1 = *a1; *((_WORD *)a1 + 14) = a1[7] & 0xFFEF | 0xE; v2 = (*(int (__thiscall **)(int *))(v1 + 4))(a1); if ( v2 ) { while ( (char *)v2 != dword_BA455C ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) goto LABEL_4; } LOBYTE(v3) = 1; } else { LABEL_4: LOBYTE(v3) = 0; } v4 = (unsigned __int8)v3 != 0 ? (unsigned int)a1 : 0; if ( (unsigned __int8)v3 != 0 ? (unsigned int)a1 : 0 ) { v3 = *((unsigned __int8)v3 != 0 ? a1 + 47 : 188); v5 = 0; if ( v3 ) { if ( v3 <= 0 ) goto LABEL_10; do { v6 = *(_DWORD *)(v4 + 180); if ( *(_DWORD *)(v6 + 4 * v5) ) sub_8765E0(*(_DWORD *)(v6 + 4 * v5)); LABEL_10: v3 = *(_DWORD *)(v4 + 188); ++v5; } while ( v3 > v5 ); } } return v3; } //----- (00876670) -------------------------------------------------------- void __thiscall sub_876670(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ebx int *v3; // esi int v4; // eax v1 = this; if ( this[7] < 0x401000Cu ) { v2 = 0; if ( this[79] ) { do { v3 = *(int **)(v1[77] + 4 * v2); if ( v3 ) { v4 = (*(int (__thiscall **)(int *))(*v3 + 4))(v3); if ( v4 ) { while ( (char *)v4 != dword_BA457C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_10; } if ( !v3[8] ) sub_8765E0(v3); } } LABEL_10: ++v2; } while ( v2 < v1[79] ); } } } //----- (008766E0) -------------------------------------------------------- int __thiscall sub_8766E0(_DWORD **this) { _DWORD **v1; // esi void (__cdecl *v2)(_DWORD *, int *, signed int, int *, signed int); // edx _DWORD *v3; // ST3C_4 void (__cdecl *v4)(_DWORD *, _DWORD **, signed int, int *, signed int); // edx _DWORD *v5; // ST28_4 void (__cdecl *v6)(_DWORD *, int *, signed int, int *, signed int); // edx _DWORD *v7; // ST14_4 _DWORD *v8; // eax _DWORD *v9; // ST00_4 void (__cdecl *v10)(_DWORD *, _DWORD **, signed int, int *, signed int); // eax _DWORD *v12; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] v1 = this; (*(void (__stdcall **)(_DWORD))(*this[89] + 8))(0); sub_8AA560(v1[89], (signed int)"Gamebryo File Format, Version 20.0.0.4\n"); v2 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v1[89][2]; v3 = v1[89]; v13 = 4; v2(v3, &dword_ABEF6C, 4, &v13, 1); v4 = (void (__cdecl *)(_DWORD *, _DWORD **, signed int, int *, signed int))v1[89][2]; v5 = v1[89]; v13 = 1; v4(v5, v1 + 74, 1, &v13, 1); v6 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v1[89][2]; v7 = v1[89]; v13 = 4; v6(v7, &dword_BA4970, 4, &v13, 1); v12 = v1[79]; v8 = v1[89]; v9 = v8; v10 = (void (__cdecl *)(_DWORD *, _DWORD **, signed int, int *, signed int))v8[2]; v13 = 4; v10(v9, &v12, 4, &v13, 1); return (*(int (__stdcall **)(_DWORD))(*v1[89] + 8))((unsigned __int8)(*((_BYTE *)v1 + 296) ^ 1)); } // ABEF6C: using guessed type int dword_ABEF6C; // BA4970: using guessed type int dword_BA4970; //----- (008767C0) -------------------------------------------------------- int __thiscall sub_8767C0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, unsigned int *, signed int, int *, signed int); // eax int result; // eax unsigned int v6; // edi int v7; // [esp+8h] [ebp-8h] unsigned int v8; // [esp+Ch] [ebp-4h] v1 = this; v8 = this[85]; v2 = this[89]; v3 = v2; v4 = *(int (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v2 + 8); v7 = 4; result = v4(v3, &v8, 4, &v7, 1); v6 = 0; if ( v8 ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 44))(v1, *(_DWORD *)(v1[83] + 4 * v6++)); while ( v6 < v8 ); } return result; } //----- (00876820) -------------------------------------------------------- unsigned int __thiscall sub_876820(_DWORD *this) { _DWORD *v1; // ebx unsigned int result; // eax _DWORD *v3; // edx unsigned int v4; // edi unsigned int v5; // eax _DWORD *v6; // ecx unsigned int v7; // edi _DWORD *v8; // esi int v9; // ST14_4 _DWORD *v10; // [esp+Ch] [ebp-8h] unsigned int v11; // [esp+10h] [ebp-4h] v1 = this; sub_8237A0(this + 1, 1u); v11 = 0; sub_823870(v1 + 1, 0, &v11); result = 0; v11 = 0; if ( v1[79] ) { while ( 1 ) { v3 = (_DWORD *)(*(int (**)(void))(**(_DWORD **)(v1[77] + 4 * result) + 52))(); v10 = v3; if ( !v3 ) goto LABEL_17; v4 = v1[4]; v5 = 0; if ( v4 ) { v6 = (_DWORD *)v1[2]; while ( v3 != (_DWORD *)*v6 ) { ++v5; ++v6; if ( v5 >= v4 ) goto LABEL_9; } if ( v5 ) goto LABEL_17; } LABEL_9: if ( v4 < v1[3] ) break; sub_8237A0(v1 + 1, v4 + v1[6]); v3 = v10; if ( v4 < v1[3] ) break; LABEL_16: *v3 = 0; LABEL_17: result = v11 + 1; v11 = result; if ( result >= v1[79] ) goto LABEL_18; } if ( v4 < v1[4] ) { if ( *(_DWORD *)(v1[2] + 4 * v4) ) { LABEL_15: *(_DWORD *)(v1[2] + 4 * v4) = v3; goto LABEL_16; } } else { v1[4] = v4 + 1; } ++v1[5]; goto LABEL_15; } LABEL_18: v7 = 0; if ( v1[79] ) { do { result = (*(int (**)(void))(**(_DWORD **)(v1[77] + 4 * v7) + 52))(); v8 = (_DWORD *)result; if ( result ) { v9 = *(_DWORD *)result; result = v9 + (*(int (**)(void))(**(_DWORD **)(v1[77] + 4 * v7) + 48))(); *v8 = result; } ++v7; } while ( v7 < v1[79] ); } return result; } //----- (00876940) -------------------------------------------------------- int __thiscall sub_876940(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ST00_4 int (__cdecl *v4)(int, int *, signed int, int *, signed int); // eax int result; // eax unsigned int i; // edi int v7; // eax int v8; // ST00_4 int (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v1 = this; v10 = this[4] - 1; v2 = this[89]; v3 = v2; v4 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v11 = 4; result = v4(v3, &v10, 4, &v11, 1); for ( i = 1; i < v1[4]; ++i ) { v11 = **(_DWORD **)(v1[2] + 4 * i); v7 = v1[89]; v8 = v7; v9 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 8); v10 = 4; result = v9(v8, &v11, 4, &v10, 1); } return result; } //----- (008769C0) -------------------------------------------------------- int __thiscall sub_8769C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // ST08_4 void (__cdecl *v5)(int, int *, signed int, int *, signed int); // eax void *v6; // eax _DWORD *v7; // edi int v8; // ST08_4 void *v9; // ST04_4 int (__cdecl *v10)(int, void *, int, _DWORD **, signed int); // eax int v11; // ST00_4 int result; // eax int v13; // [esp+4h] [ebp-8h] int v14; // [esp+8h] [ebp-4h] v2 = this; v3 = this[88]; v4 = v3; v5 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v3 + 4); v13 = 4; v5(v4, &v14, 4, &v13, 1); if ( v14 <= 0 ) { result = (int)a2; *a2 = 0; } else { v6 = operator new(v14 + 1); v7 = a2; v8 = v14; *a2 = v6; v9 = v6; v10 = *(int (__cdecl **)(int, void *, int, _DWORD **, signed int))(v2[88] + 4); v11 = v2[88]; a2 = (_DWORD *)1; result = v10(v11, v9, v8, &a2, 1); *(_BYTE *)(v14 + *v7) = 0; } return result; } //----- (00876A50) -------------------------------------------------------- int __thiscall sub_876A50(_DWORD *this, const char *a2) { const char *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, const char **, signed int, int *, signed int); // eax int result; // eax int v8; // eax int v9; // ST00_4 int (__cdecl *v10)(int, const char *, const char *, int *, signed int); // eax int v11; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 ) a2 = (const char *)strlen(a2); else a2 = 0; v4 = v3[89]; v5 = v4; v6 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(v4 + 8); v11 = 4; result = v6(v5, &a2, 4, &v11, 1); if ( a2 ) { v8 = v3[89]; v9 = v8; v10 = *(int (__cdecl **)(int, const char *, const char *, int *, signed int))(v8 + 8); v11 = 1; result = v10(v9, v2, a2, &v11, 1); } return result; } //----- (00876AD0) -------------------------------------------------------- void __thiscall sub_876AD0(_DWORD *this, int a2) { _DWORD *v2; // edi DWORD v3; // eax int v4; // esi v2 = this; EnterCriticalSection(&stru_BA4974); v3 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v3; v4 = v2[102]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[102] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); } // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (00876B60) -------------------------------------------------------- void __thiscall sub_876B60(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A25CE8: using guessed type void *NiTArray>::`vftable'; //----- (00876BC0) -------------------------------------------------------- void *__thiscall sub_876BC0(void *this, char a2) { void *v2; // esi v2 = this; sub_876B60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00876BF0) -------------------------------------------------------- void __thiscall sub_876BF0(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax v1 = this; EnterCriticalSection(&stru_BA4974); v2 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v2; sub_80C6B0(v1 + 82); if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); } // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (00876C40) -------------------------------------------------------- LONG __thiscall sub_876C40(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi LONG result; // eax v2 = a2; v3 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); result = sub_7FFF10(v3 + 76, v3[107], &a2); if ( v2 ) { result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } return result; } //----- (00876CA0) -------------------------------------------------------- char __thiscall sub_876CA0(_DWORD **this) { signed int v1; // esi char result; // al void (__cdecl *v3)(int, int, signed int, int *, signed int); // edx int v4; // ST00_4 unsigned int v5; // eax _BYTE *v6; // ebx const char *v7; // eax unsigned int v8; // eax int v9; // [esp+4h] [ebp-8Ch] unsigned int v10; // [esp+8h] [ebp-88h] char v11; // [esp+Ch] [ebp-84h] v1 = (signed int)this; sub_8AA4B0(this[88], &v11, 0x80u); if ( !strstr(&v11, "File Format") ) { *(_DWORD *)(v1 + 720) = 2; strcpy_s((char *)(v1 + 724), 0x104u, "Not a NIF file"); return 0; } (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 352) + 8))(0); v3 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v1 + 352) + 4); v4 = *(_DWORD *)(v1 + 352); v9 = 4; v3(v4, v1 + 28, 4, &v9, 1); v5 = *(_DWORD *)(v1 + 28); if ( *(_DWORD *)(v1 + 28) < (unsigned int)dword_ABEF68 ) { *(_DWORD *)(v1 + 720) = 3; strcpy_s((char *)(v1 + 724), 0x104u, "NIF version is too old."); return 0; } if ( v5 > dword_ABEF6C ) { *(_DWORD *)(v1 + 720) = 4; strcpy_s((char *)(v1 + 724), 0x104u, "Unknown NIF version."); return 0; } v6 = (_BYTE *)(v1 + 297); *(_BYTE *)(v1 + 297) = 1; if ( v5 >= 0x14000003 ) sub_8065C0(v1, v1 + 297); if ( *v6 != 1 ) { if ( sub_8AA3C0() ) { *(_DWORD *)(v1 + 720) = 6; strcpy_s((char *)(v1 + 724), 0x104u, "Endian mismatch."); return 0; } v7 = (const char *)(v1 + 36); if ( v1 == -36 ) v7 = "Stream"; sub_7FF6E0((char *)(v1 + 724), 0x104u, "Warning: %s has to be endian swapped.\n", v7); } if ( *(_DWORD *)(v1 + 28) >= 0xA000108u ) sub_810B10(v1, v1 + 32); v8 = *(_DWORD *)(v1 + 32); if ( v8 >= dword_BA496C ) { if ( v8 <= dword_BA4970 ) { sub_810B10(v1, (int)&v10); sub_81A750((_DWORD *)(v1 + 304), v10); (*(void (__stdcall **)(bool))(**(_DWORD **)(v1 + 352) + 8))(*v6 != 1); result = 1; } else { *(_DWORD *)(v1 + 720) = 4; strcpy_s((char *)(v1 + 724), 0x104u, "Unknown NIF user defined version."); result = 0; } } else { *(_DWORD *)(v1 + 720) = 3; strcpy_s((char *)(v1 + 724), 0x104u, "NIF user defined version is too old."); result = 0; } return result; } // ABEF68: using guessed type int dword_ABEF68; // ABEF6C: using guessed type int dword_ABEF6C; // BA496C: using guessed type int dword_BA496C; // BA4970: using guessed type int dword_BA4970; //----- (00876F30) -------------------------------------------------------- void __thiscall sub_876F30(_DWORD *this) { _DWORD *v1; // edi int v2; // eax int v3; // ST04_4 void (__cdecl *v4)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int v5; // ebx int v6; // eax int v7; // ST00_4 void (__cdecl *v8)(int, int *, signed int, int *, signed int); // eax int v9; // esi int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] unsigned int v12; // [esp+10h] [ebp-4h] v1 = this; v2 = this[88]; v3 = v2; v4 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v2 + 4); v11 = 4; v4(v3, &v12, 4, &v11, 1); sub_81A750(v1 + 82, v12); v5 = 0; if ( v12 ) { do { v6 = v1[88]; v7 = v6; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v6 + 4); v11 = 4; v8(v7, &v10, 4, &v11, 1); if ( v10 == -1 ) v9 = 0; else v9 = *(_DWORD *)(v1[77] + 4 * v10); v11 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); sub_7FFF10(v1 + 82, v5, &v11); if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } ++v5; } while ( v5 < v12 ); } } //----- (00877000) -------------------------------------------------------- unsigned int __cdecl sub_877000(char a1) { return sub_8D51C0((_DWORD *)dword_BA4968, &a1); } // BA4968: using guessed type int dword_BA4968; //----- (00877020) -------------------------------------------------------- void __thiscall sub_877020(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax v1 = this; EnterCriticalSection(&stru_BA4974); v2 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v2; sub_80C6B0(v1 + 76); v1[92] = 0; v1[96] = 0; v1[93] = 0; v1[97] = 0; if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); } // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (00877080) -------------------------------------------------------- _DWORD *sub_877080() { _DWORD *v0; // eax int v1; // esi void *v2; // eax size_t v3; // ST08_4 _DWORD *result; // eax v0 = operator new(0x14u); v1 = (int)v0; if ( v0 ) { v0[1] = 59; *v0 = &NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; v0[3] = 0; v2 = operator new(0xECu); v3 = 4 * *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 8) = v2; memset(v2, 0, v3); *(_BYTE *)(v1 + 16) = 0; *(_DWORD *)v1 = &NiTStringPointerMap::`vftable'; dword_BA4964 = v1; } else { dword_BA4964 = 0; } result = operator new(0x18u); if ( result ) { result[2] = 0; result[3] = 0; result[4] = 0; result[1] = 0; *result = &NiTArray::`vftable'; result[5] = 3; dword_BA4968 = (int)result; } else { dword_BA4968 = 0; } return result; } // A25BA4: using guessed type void *NiTArray::`vftable'; // A25BAC: using guessed type void *NiTMapBase,char const *,NiObject * (__cdecl *)(void)>::`vftable'; // A25DCC: using guessed type void *NiTStringPointerMap::`vftable'; // BA4964: using guessed type int dword_BA4964; // BA4968: using guessed type int dword_BA4968; //----- (00877120) -------------------------------------------------------- void __thiscall sub_877120(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx DWORD v4; // eax int v5; // edi void (__stdcall ***v6)(signed int); // ecx void (__stdcall ***v7)(signed int); // ecx int v8; // edi void *v9; // ST08_4 v1 = this; v2 = (void (__stdcall ***)(signed int))this[88]; *v1 = &NiStream::`vftable'; if ( v2 ) (**v2)(1); v3 = (void (__stdcall ***)(signed int))v1[89]; if ( v3 ) (**v3)(1); EnterCriticalSection(&stru_BA4974); v4 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v4; sub_80C6B0(v1 + 82); if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); v5 = v1[102]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[102] = 0; } v6 = (void (__stdcall ***)(signed int))v1[75]; if ( v6 ) (**v6)(1); v7 = (void (__stdcall ***)(signed int))v1[114]; if ( v7 ) (**v7)(1); CloseHandle((HANDLE)v1[112]); v8 = v1[102]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[98] = &NiTPointerMap::`vftable'; sub_940360(v1 + 98); v1[98] = &NiTMapBase,NiObject const *,unsigned int>::`vftable'; sub_940360(v1 + 98); operator delete((void *)v1[100]); operator delete((void *)v1[94]); operator delete((void *)v1[90]); sub_876B60(v1 + 82); sub_876B60(v1 + 76); v9 = (void *)v1[2]; v1[1] = &NiTArray::`vftable'; operator delete(v9); } // A25B7C: using guessed type void *NiTArray::`vftable'; // A25B84: using guessed type void *NiTMapBase,NiObject const *,unsigned int>::`vftable'; // A25CA0: using guessed type void *NiTPointerMap::`vftable'; // A25E0C: using guessed type void *NiStream::`vftable'; // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (008772A0) -------------------------------------------------------- int __thiscall sub_8772A0(_DWORD *this, signed int a2) { _DWORD *v2; // esi int v3; // eax int v4; // esi int (__cdecl *v5)(int, int *, signed int, signed int *, signed int); // edx int v7; // [esp+4h] [ebp-4h] v2 = this; v3 = (*(int (__thiscall **)(_DWORD *, signed int))(*this + 40))(this, a2); v4 = v2[89]; v7 = v3; v5 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; return v5(v4, &v7, 4, &a2, 1); } //----- (008772E0) -------------------------------------------------------- LONG __thiscall sub_8772E0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi unsigned int v4; // edi LONG result; // eax v2 = a2; v3 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = v3[85]; if ( v4 >= v3[84] ) sub_81A750(v3 + 82, v4 + v3[87]); result = sub_7FFF10(v3 + 82, v4, &a2); if ( v2 ) { result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } return result; } //----- (00877360) -------------------------------------------------------- char __thiscall sub_877360(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi unsigned int v5; // ebx v2 = a2; v3 = this; if ( sub_8C4C90(this + 98, a2, &a2) ) return 0; sub_815C70(v3 + 98, v2, v3[79]); a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); v5 = v3[79]; if ( v5 >= v3[78] ) sub_81A750(v3 + 76, v5 + v3[81]); sub_7FFF10(v3 + 76, v5, &a2); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } return 1; } //----- (00877410) -------------------------------------------------------- char __thiscall sub_877410(char *this) { char *v1; // edi int v2; // eax int v3; // ST14_4 void (__cdecl *v4)(int, unsigned __int16 *, signed int, void **, signed int); // eax int v5; // eax int v6; // ST14_4 void (__cdecl *v7)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v8)(int, char *, int, int *, signed int); // edx int v9; // ST00_4 _DWORD *v10; // ecx _DWORD *v11; // ebx _DWORD *v12; // esi char result; // al unsigned int v14; // eax bool v15; // zf int v16; // eax int v17; // ST14_4 void (__cdecl *v18)(int, int *, signed int, int *, signed int); // eax int v19; // eax int v20; // esi unsigned int v21; // ebx int v22; // [esp+Ch] [ebp-118h] unsigned int v23; // [esp+10h] [ebp-114h] void *v24; // [esp+14h] [ebp-110h] int v25; // [esp+18h] [ebp-10Ch] unsigned __int16 v26; // [esp+1Ch] [ebp-108h] char Src[256]; // [esp+20h] [ebp-104h] v1 = this; v2 = *((_DWORD *)this + 88); v3 = v2; v4 = *(void (__cdecl **)(int, unsigned __int16 *, signed int, void **, signed int))(v2 + 4); v24 = (void *)2; v4(v3, &v26, 2, &v24, 1); v24 = operator new(4 * v26); v23 = 0; if ( v26 <= 0u ) { LABEL_7: v15 = *((_DWORD *)v1 + 78) == 0; v23 = 0; if ( !v15 ) { do { v16 = *((_DWORD *)v1 + 88); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v16 + 4); v25 = 2; v18(v17, &v22, 2, &v25, 1); v19 = (*((int (**)(void))v24 + (unsigned __int16)v22))(); v20 = v19; v25 = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); v21 = *((_DWORD *)v1 + 79); if ( v21 >= *((_DWORD *)v1 + 78) ) sub_81A750((_DWORD *)v1 + 76, v21 + *((_DWORD *)v1 + 81)); sub_7FFF10((_DWORD *)v1 + 76, v21, &v25); if ( v20 ) { if ( !InterlockedDecrement((volatile LONG *)(v20 + 4)) ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); } ++v23; } while ( v23 < *((_DWORD *)v1 + 78) ); } operator delete(v24); result = 1; } else { while ( 1 ) { v5 = *((_DWORD *)v1 + 88); v6 = v5; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v5 + 4); v25 = 4; v7(v6, &v22, 4, &v25, 1); v8 = *(void (__cdecl **)(int, char *, int, int *, signed int))(*((_DWORD *)v1 + 88) + 4); v9 = *((_DWORD *)v1 + 88); v25 = 1; v8(v9, Src, v22, &v25, 1); v10 = (_DWORD *)dword_BA4964; Src[v22] = 0; v11 = v10; v12 = *(_DWORD **)(v10[2] + 4 * (*(int (__stdcall **)(char *))(*v10 + 4))(Src)); if ( !v12 ) break; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, char *, _DWORD))(*v11 + 8))(v11, Src, v12[1]) ) { v12 = (_DWORD *)*v12; if ( !v12 ) goto LABEL_5; } v14 = v23; *((_DWORD *)v24 + v23) = v12[2]; v23 = v14 + 1; if ( v14 + 1 >= v26 ) goto LABEL_7; } LABEL_5: *((_DWORD *)v1 + 180) = 5; strcpy_s(v1 + 724, 0x104u, Src); strcat_s(v1 + 724, 0x104u, ": cannot find create function."); operator delete(v24); result = 0; } return result; } // BA4964: using guessed type int dword_BA4964; // 877410: using guessed type char Src[256]; //----- (008776B0) -------------------------------------------------------- char __usercall sub_8776B0@(_DWORD *a1@, int a2@) { _DWORD *v2; // esi int v3; // eax int v4; // ST14_4 void (__cdecl *v5)(int, int *, signed int, int (__stdcall **)(int), signed int); // eax void (__cdecl *v6)(int, char *, int, int (__stdcall **)(int), signed int); // edx int v7; // ST00_4 _DWORD *v8; // ecx char *v9; // esi char result; // al int v11; // eax volatile LONG *v12; // edi unsigned int v13; // eax int v14; // [esp+4h] [ebp-10Ch] int (__stdcall *v15)(int); // [esp+8h] [ebp-108h] char Src[256]; // [esp+Ch] [ebp-104h] v2 = a1; v3 = a1[88]; v4 = v3; v5 = *(void (__cdecl **)(int, int *, signed int, int (__stdcall **)(int), signed int))(v3 + 4); v15 = (int (__stdcall *)(int))4; v5(v4, &v14, 4, &v15, 1); v6 = *(void (__cdecl **)(int, char *, int, int (__stdcall **)(int), signed int))(v2[88] + 4); v7 = v2[88]; v15 = (int (__stdcall *)(int))1; v6(v7, Src, v14, &v15, 1); v8 = (_DWORD *)dword_BA4964; Src[v14] = 0; if ( sub_8C4C90(v8, (int)Src, &v15) ) { v11 = v15(a2); v12 = (volatile LONG *)v11; v14 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); v13 = v2[79]; v15 = (int (__stdcall *)(int))v13; if ( v13 >= v2[78] ) { sub_81A750(v2 + 76, v13 + v2[81]); v13 = (unsigned int)v15; } sub_7FFF10(v2 + 76, v13, &v14); if ( v12 ) { if ( !InterlockedDecrement(v12 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v12)(v12, 1); } (*(void (__thiscall **)(volatile LONG *, _DWORD *))(*v12 + 12))(v12, v2); result = 1; } else { v2[180] = 5; v9 = (char *)(v2 + 181); strcpy_s(v9, 0x104u, Src); strcat_s(v9, 0x104u, ": cannot find create function."); result = 0; } return result; } // BA4964: using guessed type int dword_BA4964; // 8776B0: using guessed type char Src[256]; //----- (00877830) -------------------------------------------------------- char __thiscall sub_877830(char *this) { char *v1; // esi char result; // al DWORD v3; // eax unsigned int v4; // edi int v5; // eax int v6; // ecx int v7; // ecx int v8; // ecx int v9; // eax int v10; // ecx int v11; // ecx unsigned int v12; // eax int v13; // ebx unsigned int v14; // edi void (__cdecl *v15)(char *, int); // eax DWORD v16; // eax DWORD v17; // eax int i; // [esp+4h] [ebp-8h] bool v19; // [esp+Bh] [ebp-1h] v1 = this; result = (*(int (**)(void))(*(_DWORD *)this + 48))(); if ( !result ) return result; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 107) = 0; EnterCriticalSection(&stru_BA4974); v3 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v3; sub_80C6B0((_DWORD *)v1 + 82); if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); v19 = *((_DWORD *)v1 + 7) >= 0x5000001u; if ( v19 && !sub_877410(v1) ) return 0; if ( *((_DWORD *)v1 + 7) >= 0x5000006u ) sub_8764F0(v1); v4 = *((_DWORD *)v1 + 78); if ( *((_DWORD *)v1 + 107) >= v4 ) { LABEL_16: (*(void (__thiscall **)(char *))(*(_DWORD *)v1 + 68))(v1); for ( ; *((_DWORD *)v1 + 108) < v4; ++*((_DWORD *)v1 + 108) ) { if ( *((_DWORD *)v1 + 105) == 3 ) { v7 = *((_DWORD *)v1 + 113); *((_DWORD *)v1 + 105) = 4; sub_8AAA70(v7); } (*(void (__stdcall **)(char *))(**(_DWORD **)(*((_DWORD *)v1 + 77) + 4 * *((_DWORD *)v1 + 108)) + 16))(v1); } for ( ; *((_DWORD *)v1 + 109) < v4; ++*((_DWORD *)v1 + 109) ) { if ( *((_DWORD *)v1 + 105) == 3 ) { v8 = *((_DWORD *)v1 + 113); *((_DWORD *)v1 + 105) = 4; sub_8AAA70(v8); } (*(void (__stdcall **)(char *))(**(_DWORD **)(*((_DWORD *)v1 + 77) + 4 * *((_DWORD *)v1 + 109)) + 44))(v1); } v9 = *((_DWORD *)v1 + 105); if ( v9 != 2 ) { if ( v9 == 3 ) { v10 = *((_DWORD *)v1 + 113); *((_DWORD *)v1 + 105) = 4; sub_8AAA70(v10); } v11 = dword_BA4968; if ( *(_DWORD *)(dword_BA4968 + 16) > 0u ) { v12 = 0; for ( i = 0; v12 < *((_DWORD *)v1 + 85); i = v12 ) { v13 = *(_DWORD *)(*((_DWORD *)v1 + 83) + 4 * v12); if ( v13 ) { v14 = 0; if ( *(_DWORD *)(v11 + 12) ) { do { v15 = *(void (__cdecl **)(char *, int))(*(_DWORD *)(v11 + 4) + 4 * v14); if ( v15 ) { v15(v1, v13); v11 = dword_BA4968; } ++v14; } while ( v14 < *(_DWORD *)(v11 + 12) ); v12 = i; } } ++v12; } } if ( *((_DWORD *)v1 + 105) != 2 ) { sub_876670(v1); EnterCriticalSection(&stru_BA4974); v17 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v17; sub_80C6B0((_DWORD *)v1 + 76); *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 97) = 0; if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); return 1; } } EnterCriticalSection(&stru_BA4974); v16 = GetCurrentThreadId(); ++dword_BA4990; dword_BA498C = v16; sub_80C6B0((_DWORD *)v1 + 76); *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 96) = 0; *((_DWORD *)v1 + 93) = 0; *((_DWORD *)v1 + 97) = 0; if ( !--dword_BA4990 ) dword_BA498C = 0; LeaveCriticalSection(&stru_BA4974); return 0; } while ( 1 ) { v5 = *((_DWORD *)v1 + 105); if ( v5 == 2 ) break; if ( v5 == 3 ) { v6 = *((_DWORD *)v1 + 113); *((_DWORD *)v1 + 105) = 4; sub_8AAA70(v6); } if ( v19 ) { (*(void (__stdcall **)(char *))(**(_DWORD **)(*((_DWORD *)v1 + 77) + 4 * *((_DWORD *)v1 + 107)) + 12))(v1); } else if ( !(*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v1 + 76))(v1) ) { break; } if ( ++*((_DWORD *)v1 + 107) >= v4 ) goto LABEL_16; } sub_877020(v1); return 0; } // 8AAA70: using guessed type int __thiscall sub_8AAA70(_DWORD); // BA4968: using guessed type int dword_BA4968; // BA498C: using guessed type int dword_BA498C; // BA4990: using guessed type int dword_BA4990; //----- (00877B60) -------------------------------------------------------- void __thiscall sub_877B60(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx int *v3; // eax int v4; // edi int v5; // eax _DWORD *v6; // esi int v7; // eax int **v8; // eax int *v9; // ebx int v10; // edi unsigned int v11; // eax int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, int *, signed int, unsigned int *, signed int); // eax unsigned int i; // ebx int v16; // esi _DWORD *v17; // edi int v18; // eax int v19; // ST00_4 void (__cdecl *v20)(int, unsigned int *, signed int, int *, signed int); // eax int v21; // eax int v22; // ST00_4 void (__cdecl *v23)(int, int, unsigned int, int *, signed int); // eax unsigned int v24; // ebx int *v25; // eax int v26; // edi int v27; // eax int **v28; // esi _DWORD *v29; // esi int v30; // eax int v31; // ST00_4 void (__cdecl *v32)(int, void **, signed int, int *, signed int); // eax void **v33; // [esp+Ch] [ebp-28h] unsigned int v34; // [esp+10h] [ebp-24h] void *v35; // [esp+14h] [ebp-20h] int v36; // [esp+18h] [ebp-1Ch] char v37; // [esp+1Ch] [ebp-18h] int v38; // [esp+20h] [ebp-14h] void *v39; // [esp+24h] [ebp-10h] int v40; // [esp+28h] [ebp-Ch] unsigned int v41; // [esp+2Ch] [ebp-8h] _DWORD *v42; // [esp+30h] [ebp-4h] v1 = this; v34 = 37; v2 = 0; v42 = this; v36 = 0; v35 = operator new(0x94u); memset(v35, 0, 0x94u); v37 = 0; v33 = &NiTStringPointerMap::`vftable'; if ( v1[79] > 0u ) { do { v3 = (int *)(*(int (**)(void))(**(_DWORD **)(v42[77] + 4 * v2) + 4))(); v4 = *v3; v5 = ((int (__thiscall *)(void ***, int))v33[1])(&v33, *v3); v6 = (_DWORD *)*((_DWORD *)v35 + v5); if ( v6 ) { while ( !((unsigned __int8 (__thiscall *)(void ***, int, _DWORD))v33[2])(&v33, v4, v6[1]) ) { v6 = (_DWORD *)*v6; if ( !v6 ) goto LABEL_5; } } else { LABEL_5: sub_815C70(&v33, v4, v36); } ++v2; } while ( v2 < v42[79] ); } v40 = (unsigned __int16)v36; v39 = operator new(4 * (unsigned __int16)v36); v7 = 0; if ( v34 ) { while ( !*((_DWORD *)v35 + v7) ) { if ( ++v7 >= v34 ) goto LABEL_10; } v8 = (int **)*((_DWORD *)v35 + v7); } else { LABEL_10: v8 = 0; } for ( ; v8; *((_DWORD *)v39 + v10) = v9 ) { v9 = v8[1]; v10 = *((unsigned __int16 *)v8 + 4); v8 = (int **)*v8; if ( !v8 ) { v11 = ((int (__thiscall *)(void ***, int *))v33[1])(&v33, v9) + 1; if ( v11 >= v34 ) { LABEL_16: v8 = 0; } else { while ( !*((_DWORD *)v35 + v11) ) { if ( ++v11 >= v34 ) goto LABEL_16; } v8 = (int **)*((_DWORD *)v35 + v11); } } } v12 = v42[89]; v13 = v12; v14 = *(void (__cdecl **)(int, int *, signed int, unsigned int *, signed int))(v12 + 8); v41 = 2; v14(v13, &v40, 2, &v41, 1); for ( i = 0; i < (unsigned __int16)v40; ++i ) { v16 = *((_DWORD *)v39 + i); if ( v16 ) v41 = strlen(*((const char **)v39 + i)); else v41 = 0; v17 = v42; v18 = v42[89]; v19 = v18; v20 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v18 + 8); v38 = 4; v20(v19, &v41, 4, &v38, 1); if ( v41 ) { v21 = v17[89]; v22 = v21; v23 = *(void (__cdecl **)(int, int, unsigned int, int *, signed int))(v21 + 8); v38 = 1; v23(v22, v16, v41, &v38, 1); } } operator delete(v39); v24 = 0; if ( v42[79] ) { do { v25 = (int *)(*(int (**)(void))(**(_DWORD **)(v42[77] + 4 * v24) + 4))(); v26 = *v25; v27 = ((int (__thiscall *)(void ***, int))v33[1])(&v33, *v25); v28 = (int **)*((_DWORD *)v35 + v27); if ( v28 ) { while ( !((unsigned __int8 (__thiscall *)(void ***, int, int *))v33[2])(&v33, v26, v28[1]) ) { v28 = (int **)*v28; if ( !v28 ) goto LABEL_33; } v39 = (void *)*((unsigned __int16 *)v28 + 4); } LABEL_33: v29 = v42; v30 = v42[89]; v31 = v30; v32 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v30 + 8); v38 = 2; v32(v31, &v39, 2, &v38, 1); ++v24; } while ( v24 < v29[79] ); } sub_875F90(&v33); } // A25DEC: using guessed type void *NiTStringPointerMap::`vftable'; //----- (00877E40) -------------------------------------------------------- char __thiscall sub_877E40(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi v1 = this; (*(void (**)(void))(*this + 64))(); (*(void (__thiscall **)(_DWORD *))(*v1 + 52))(v1); sub_877B60(v1); sub_876820(v1); sub_876940(v1); v2 = 0; if ( v1[79] ) { do (*(void (__stdcall **)(_DWORD *))(**(_DWORD **)(v1[77] + 4 * v2++) + 24))(v1); while ( v2 < v1[79] ); } (*(void (__thiscall **)(_DWORD *))(*v1 + 72))(v1); sub_80C6B0(v1 + 76); sub_940360(v1 + 98); return 1; } //----- (00877EC0) -------------------------------------------------------- _DWORD *__thiscall sub_877EC0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 _DWORD *v4; // eax _DWORD *v5; // eax int v6; // edi _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v10; // [esp+8h] [ebp-4h] v1 = this; *this = &NiStream::`vftable'; this[1] = &NiTArray::`vftable'; this[3] = 0; this[4] = 0; this[5] = 0; this[2] = 0; this[6] = 1; this[78] = 0; this[81] = 1024; this[79] = 0; this[80] = 0; this[77] = 0; this[76] = &NiTArray>::`vftable'; this[82] = &NiTArray>::`vftable'; this[87] = 1; this[84] = 0; this[85] = 0; this[86] = 0; this[83] = 0; this[90] = 0; this[91] = 0; this[92] = 0; this[94] = 0; this[95] = 0; this[96] = 0; this[99] = 37; this[98] = &NiTMapBase,NiObject const *,unsigned int>::`vftable'; this[101] = 0; v2 = operator new(0x94u); v3 = 4 * v1[99]; v1[100] = v2; memset(v2, 0, v3); v1[98] = &NiTPointerMap::`vftable'; v1[102] = 0; v1[110] = 0; v1[111] = 1; v1[112] = CreateSemaphoreA(0, 0, 1, 0); v1[113] = 0; v1[114] = 0; v1[180] = 0; *((_BYTE *)v1 + 724) = 0; v1[88] = 0; v1[89] = 0; v1[7] = 0; v1[8] = 0; *((_WORD *)v1 + 148) = 257; *((_BYTE *)v1 + 36) = 0; v4 = operator new(0x20u); if ( v4 ) { v5 = sub_698F20(v4, 0); v10 = v5; } else { v10 = 0; v5 = 0; } v6 = v1[102]; if ( (_DWORD *)v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5 = v10; } v1[102] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } v1[93] = 0; v1[97] = 0; v7 = operator new(0x210u); if ( v7 ) v8 = sub_8AA5A0(v7); else v8 = 0; v1[75] = v8; v1[105] = 0; v1[180] = 0; *((_BYTE *)v1 + 724) = 0; return v1; } // A25B7C: using guessed type void *NiTArray::`vftable'; // A25B84: using guessed type void *NiTMapBase,NiObject const *,unsigned int>::`vftable'; // A25CA0: using guessed type void *NiTPointerMap::`vftable'; // A25CE8: using guessed type void *NiTArray>::`vftable'; // A25E0C: using guessed type void *NiStream::`vftable'; //----- (008780C0) -------------------------------------------------------- void *__thiscall sub_8780C0(void *this, char a2) { void *v2; // esi v2 = this; sub_877120(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008780F0) -------------------------------------------------------- int __thiscall sub_8780F0(float *this, int a2, float a3) { double v3; // st7 float v4; // ST0C_4 float v5; // ST08_4 float v6; // ST04_4 float v8; // [esp+20h] [ebp+Ch] float v9; // [esp+20h] [ebp+Ch] float v10; // [esp+20h] [ebp+Ch] float v11; // [esp+20h] [ebp+Ch] v3 = a3; v8 = this[3] * a3; v4 = v8; v9 = this[2] * v3; v5 = v9; v10 = this[1] * v3; v6 = v10; v11 = v3 * *this; sub_874B00((float *)a2, v11, v6, v5, v4); return a2; } //----- (00878150) -------------------------------------------------------- int __cdecl sub_878150(int a1, float a2, int a3) { float *v3; // eax float v4; // ST0C_4 float v5; // ST08_4 float v6; // ST04_4 float v8; // [esp+24h] [ebp+10h] float v9; // [esp+24h] [ebp+10h] float v10; // [esp+24h] [ebp+10h] float v11; // [esp+24h] [ebp+10h] v3 = (float *)a3; v8 = *(float *)(a3 + 12) * a2; v4 = v8; v9 = v3[2] * a2; v5 = v9; v10 = v3[1] * a2; v6 = v10; v11 = a2 * *v3; sub_874B00((float *)a1, v11, v6, v5, v4); return a1; } //----- (008781B0) -------------------------------------------------------- void __thiscall sub_8781B0(float *this) { float v1; // ST00_4 double v2; // st7 double v3; // st6 double v4; // st4 double v5; // st7 double v6; // st3 float v7; // ST00_4 float v8; // ST00_4 double v9; // st3 double v10; // st4 float v11; // ST00_4 float v12; // ST00_4 float v13; // [esp+0h] [ebp-4h] v1 = this[2] * this[2] + this[1] * this[1] + this[3] * this[3] + *this * *this; v2 = v1; v3 = flt_BA4994; v13 = (v1 - 0.9590659737586975) * flt_BA4998 + flt_BA4994; v4 = v2; v5 = flt_BA4998; if ( v4 <= 0.9152119755744934 ) { v6 = v13; v7 = v13 * v13 * v4; v8 = (v7 - 0.9590659737586975) * v5 + v3; v13 = v6 * v8; if ( v4 <= 0.6521197 ) { v9 = v4 * (v13 * v13); v10 = v13; v11 = v9; v12 = v3 + v5 * (v11 - 0.9590659737586975); v13 = v10 * v12; } } this[1] = this[1] * v13; this[2] = v13 * this[2]; this[3] = this[3] * v13; *this = v13 * *this; } // BA4994: using guessed type float flt_BA4994; // BA4998: using guessed type float flt_BA4998; //----- (00878290) -------------------------------------------------------- float *__cdecl sub_878290(float *a1, float *a2) { float *v2; // esi double v3; // st7 double v4; // st7 double v5; // st7 float v6; // ST0C_4 float v7; // ST08_4 float v9; // [esp+14h] [ebp-8h] float v10; // [esp+18h] [ebp-4h] float v11; // [esp+28h] [ebp+Ch] float v12; // [esp+28h] [ebp+Ch] float v13; // [esp+28h] [ebp+Ch] float v14; // [esp+28h] [ebp+Ch] float v15; // [esp+28h] [ebp+Ch] float v16; // [esp+28h] [ebp+Ch] float v17; // [esp+28h] [ebp+Ch] float v18; // [esp+28h] [ebp+Ch] v2 = a2; v11 = a2[2] * a2[2] + a2[1] * a2[1] + a2[3] * a2[3]; v12 = sqrt(v11); v10 = v12; v9 = cos(v12); v13 = sin(v12); v3 = v13; v14 = fabs(v13); if ( v14 >= 0.001 ) v4 = v3 / v10; else v4 = 1.0; v15 = v4; v5 = v15; v16 = v2[3] * v15; v6 = v16; v17 = v5 * v2[2]; v7 = v17; v18 = v5 * v2[1]; sub_874B00(a1, v9, v18, v7, v6); return a1; } //----- (00878350) -------------------------------------------------------- int __cdecl sub_878350(int a1, float a2, int a3, int a4) { float *v4; // ecx float *v5; // edx double v6; // st7 double v7; // st7 double v8; // st7 float v9; // ST0C_4 float v10; // ST08_4 float v11; // ST04_4 int v13; // [esp+2Ch] [ebp+10h] float v14; // [esp+2Ch] [ebp+10h] float v15; // [esp+2Ch] [ebp+10h] float v16; // [esp+2Ch] [ebp+10h] float v17; // [esp+2Ch] [ebp+10h] float v18; // [esp+2Ch] [ebp+10h] float v19; // [esp+2Ch] [ebp+10h] float v20; // [esp+2Ch] [ebp+10h] float v21; // [esp+2Ch] [ebp+10h] float v22; // [esp+2Ch] [ebp+10h] float v23; // [esp+2Ch] [ebp+10h] float v24; // [esp+2Ch] [ebp+10h] float v25; // [esp+2Ch] [ebp+10h] float v26; // [esp+30h] [ebp+14h] v4 = (float *)a3; v5 = (float *)a4; *(float *)&v13 = *(float *)a3 * *(float *)a4 + *(float *)(a3 + 4) * *(float *)(a4 + 4) + *(float *)(a3 + 8) * *(float *)(a4 + 8) + *(float *)(a3 + 12) * *(float *)(a4 + 12); v6 = a2; if ( a2 > 0.5 ) { v26 = 1.0 - v6; v17 = 1.0 - *(float *)&v13 * 0.8227968811988831; v18 = v17 * v17; v19 = v18 * 0.5854921936988831; v20 = (v19 + v19 * v26 * (v26 + v26 - 3.0) + 1.0) * v26; v7 = 1.0 - v20; } else { v14 = 1.0 - *(float *)&v13 * 0.8227968811988831; v15 = v14 * v14; v16 = v15 * 0.5854921936988831; v7 = v6 * (v16 * v6 * (v6 + v6 - 3.0) + 1.0 + v16); } v21 = v7; v8 = v21; v22 = v4[3] + (v5[3] - v4[3]) * v21; v9 = v22; v23 = (v5[2] - v4[2]) * v8 + v4[2]; v10 = v23; v24 = (v5[1] - v4[1]) * v8 + v4[1]; v11 = v24; v25 = v8 * (*v5 - *v4) + *v4; sub_874B00((float *)a1, v25, v11, v10, v9); sub_8781B0((float *)a1); return a1; } //----- (008784D0) -------------------------------------------------------- char *__cdecl sub_8784D0(int ArgList) { unsigned int v1; // kr00_4 char *v2; // edi v1 = strlen((const char *)ArgList); v2 = (char *)operator new(v1 + 9); sub_7FF6E0(v2, v1 + 9, "--- %s ---", ArgList); return v2; } //----- (00878510) -------------------------------------------------------- char *__cdecl sub_878510(int ArgList, char a2) { size_t v2; // esi char *v3; // eax char *v4; // edi v2 = strlen((const char *)ArgList) + 9; v3 = (char *)operator new(v2); v4 = v3; if ( a2 ) sub_7FF6E0(v3, v2, "%s = true", ArgList); else sub_7FF6E0(v3, v2, "%s = false", ArgList); return v4; } //----- (00878570) -------------------------------------------------------- char *__cdecl sub_878570(int ArgList, char a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 7); sub_7FF6E0(v3, v2 + 7, "%s = %u", ArgList, (unsigned __int8)a2); return v3; } //----- (008785B0) -------------------------------------------------------- char *__cdecl sub_8785B0(int ArgList, __int16 a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 10); sub_7FF6E0(v3, v2 + 10, "%s = %hd", ArgList, a2); return v3; } //----- (008785F0) -------------------------------------------------------- char *__cdecl sub_8785F0(int ArgList, __int16 a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 9); sub_7FF6E0(v3, v2 + 9, "%s = %hu", ArgList, (unsigned __int16)a2); return v3; } //----- (00878630) -------------------------------------------------------- char *__cdecl sub_878630(int ArgList, int a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 15); sub_7FF6E0(v3, v2 + 15, "%s = %d", ArgList, a2); return v3; } //----- (00878670) -------------------------------------------------------- char *__cdecl sub_878670(int ArgList, int a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 14); sub_7FF6E0(v3, v2 + 14, "%s = %u", ArgList, a2); return v3; } //----- (008786B0) -------------------------------------------------------- char *__cdecl sub_8786B0(int ArgList, float a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 20); sub_7FF6E0(v3, v2 + 20, "%s = %g", ArgList, a2); return v3; } //----- (00878700) -------------------------------------------------------- char *__cdecl sub_878700(int ArgList, int a2) { unsigned int v2; // kr00_4 char *v3; // edi v2 = strlen((const char *)ArgList); v3 = (char *)operator new(v2 + 16); sub_7FF6E0(v3, v2 + 16, "%s = %p", ArgList, a2); return v3; } //----- (00878740) -------------------------------------------------------- char *__cdecl sub_878740(int ArgList, int a2) { size_t v2; // esi char *v3; // edi unsigned int v5; // kr04_4 if ( a2 ) { v2 = strlen((const char *)a2) + strlen((const char *)ArgList) + 4; v3 = (char *)operator new(v2); sub_7FF6E0(v3, v2, "%s = %s", ArgList, a2); } else { v5 = strlen((const char *)ArgList); v3 = (char *)operator new(v5 + 8); sub_7FF6E0(v3, v5 + 8, "%s = NULL", ArgList); } return v3; } //----- (008787D0) -------------------------------------------------------- int __thiscall sub_8787D0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx int v3; // edi int result; // eax v1 = this; if ( this[17] ) { v2 = 0; if ( this[16] ) { v3 = 0; do { operator delete(*(void **)(v3 + v1[17] + 68)); *(_DWORD *)(v3 + v1[17] + 68) = 0; ++v2; v3 += 76; } while ( v2 < v1[16] ); } } return result; } //----- (00878810) -------------------------------------------------------- void *sub_878810() { return &unk_BA499C; } //----- (00878820) -------------------------------------------------------- unsigned int __thiscall sub_878820(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx unsigned int result; // eax int v4; // esi unsigned int v5; // edi v2 = this; nullsub_32(a2); result = a2[7]; if ( result >= 0x4000001 && result < 0xA010065 ) { result = sub_875AD0(a2); v4 = v2[2]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[2] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00878890) -------------------------------------------------------- char __thiscall sub_878890(float *this, int a2) { int v2; // edi float *v3; // esi int v5; // eax int v6; // eax int v7; // esi int v8; // edi unsigned int v9; // ebx unsigned int v10; // edx int v11; // esi int v12; // ecx float *v13; // edi int v14; // esi float *v15; // [esp+8h] [ebp-Ch] int v16; // [esp+Ch] [ebp-8h] int v17; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v15 = this; if ( !sub_85BB20(this, a2) ) return 0; if ( (unsigned __int8)sub_87C4A0(v3 + 3, (float *)(a2 + 12)) ) return 0; v5 = *((_DWORD *)v3 + 16); if ( v5 != *(_DWORD *)(a2 + 64) ) return 0; v16 = 0; if ( !v5 ) return 1; v6 = 0; v17 = 0; while ( 1 ) { v7 = v6 + *((_DWORD *)v3 + 17); v8 = v6 + *(_DWORD *)(v2 + 68); if ( (unsigned __int8)sub_87C4A0((float *)v7, (float *)v8) || !(unsigned __int8)sub_86B670((float *)(v7 + 52), (float *)(v8 + 52)) || *(_WORD *)(v7 + 72) != *(_WORD *)(v8 + 72) ) { return 0; } v9 = *(unsigned __int16 *)(v7 + 72); v10 = 0; if ( *(_WORD *)(v7 + 72) ) { v11 = *(_DWORD *)(v7 + 68); v12 = *(_DWORD *)(v8 + 68); v13 = (float *)(v11 + 4); v14 = v11 - v12; while ( *(_WORD *)(v14 + v12) == *(_WORD *)v12 && *(float *)(v12 + 4) == *v13 ) { ++v10; v13 += 2; v12 += 8; if ( v10 >= v9 ) goto LABEL_16; } return 0; } LABEL_16: v17 += 76; if ( (unsigned int)++v16 >= *((_DWORD *)v15 + 16) ) return 1; v6 = v17; v2 = a2; v3 = v15; } } //----- (00878980) -------------------------------------------------------- void **__thiscall sub_878980(void *this, char a2) { void **v2; // esi volatile LONG *v3; // edi v2 = (void **)this; *(_DWORD *)this = &NiSkinData::`vftable'; sub_8787D0(this); operator delete(v2[17]); v3 = (volatile LONG *)v2[2]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A25F14: using guessed type void *NiSkinData::`vftable'; //----- (008789E0) -------------------------------------------------------- _DWORD *sub_8789E0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiSkinData::`vftable'; v1[2] = 0; v1[17] = 0; return v1; } // A25F14: using guessed type void *NiSkinData::`vftable'; //----- (00878A20) -------------------------------------------------------- unsigned int __thiscall sub_878A20(int *this, signed int a2) { int v2; // ebx int *v3; // esi void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx int v5; // ST14_4 int v6; // esi char *v7; // eax int v8; // edx _WORD *v9; // ecx int v10; // esi unsigned int result; // eax int v12; // eax int v13; // ST14_4 int (__cdecl *v14)(int, char *, signed int, int *, signed int); // eax int v15; // esi void (__cdecl *v16)(int, int, signed int, int *, signed int); // edx int v17; // ST14_4 int v18; // edi _WORD *v19; // eax int v20; // edx _WORD *i; // ecx unsigned int j; // edi int v23; // eax int v24; // ST14_4 void (__cdecl *v25)(int, unsigned int, signed int, int *, signed int); // eax int v26; // eax int v27; // ST00_4 void (__cdecl *v28)(int, unsigned int, signed int, int *, signed int); // eax int v29; // ebx int (__cdecl *v30)(int, char *, signed int, unsigned int *, signed int); // ecx unsigned int v31; // [esp+Ch] [ebp-18h] int v32; // [esp+10h] [ebp-14h] int v33; // [esp+14h] [ebp-10h] int *v34; // [esp+18h] [ebp-Ch] int v35; // [esp+1Ch] [ebp-8h] char v36; // [esp+23h] [ebp-1h] v2 = a2; v3 = this; v34 = this; sub_85BC50(this, a2); sub_87C510((char *)v3 + 12, v2); v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v3 += 16; v5 = *(_DWORD *)(v2 + 352); v33 = 4; v4(v5, v3, 4, &v33, 1); v6 = *v3; v7 = (char *)operator new(76 * v6); if ( v7 ) { v8 = v6 - 1; if ( v6 - 1 >= 0 ) { v9 = v7 + 72; do { *((_DWORD *)v9 - 1) = 0; *v9 = 0; v9 += 38; --v8; } while ( v8 >= 0 ); } } else { v7 = 0; } v10 = (int)v34; v34[17] = (int)v7; result = *(_DWORD *)(v2 + 28); if ( result >= 0x4000001 && result < 0xA010065 ) result = sub_876290((void **)v2); if ( *(_DWORD *)(v2 + 28) < 0x401000Du ) { HIBYTE(a2) = 1; } else { v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v12 + 4); v33 = 1; result = v14(v13, (char *)&a2 + 3, 1, &v33, 1); } v33 = 0; if ( *(_DWORD *)(v10 + 64) > 0u ) { v35 = 0; while ( 1 ) { v15 = v35 + *(_DWORD *)(v10 + 68); sub_87C510((char *)v15, v2); sub_87D5D0((char *)(v15 + 52), v2); v16 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v17 = *(_DWORD *)(v2 + 352); v32 = 2; v16(v17, v15 + 72, 2, &v32, 1); if ( HIBYTE(a2) ) { v18 = *(unsigned __int16 *)(v15 + 72); v19 = operator new(8 * v18); if ( v19 ) { v20 = v18 - 1; for ( i = v19; v20 >= 0; --v20 ) { *i = 0; i += 4; } } else { v19 = 0; } *(_DWORD *)(v15 + 68) = v19; for ( j = 0; j < *(unsigned __int16 *)(v15 + 72); ++j ) { v23 = *(_DWORD *)(v2 + 352); v24 = v23; v25 = *(void (__cdecl **)(int, unsigned int, signed int, int *, signed int))(v23 + 4); v31 = *(_DWORD *)(v15 + 68) + 8 * j; v32 = 2; v25(v24, v31, 2, &v32, 1); v26 = *(_DWORD *)(v2 + 352); v27 = v26; v28 = *(void (__cdecl **)(int, unsigned int, signed int, int *, signed int))(v26 + 4); v32 = 4; v28(v27, v31 + 4, 4, &v32, 1); } } else { *(_DWORD *)(v15 + 68) = 0; } result = (unsigned int)v34; v35 += 76; if ( ++v33 >= (unsigned int)v34[16] ) break; v10 = (int)v34; } } if ( *(_DWORD *)(v2 + 28) == 67174409 ) { v29 = *(_DWORD *)(v2 + 352); v30 = *(int (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v29 + 4); v31 = 1; result = v30(v29, &v36, 1, &v31, 1); } return result; } //----- (00878C40) -------------------------------------------------------- unsigned int __thiscall sub_878C40(void *this, int a2) { int v2; // esi int v3; // ebx void (__cdecl *v4)(int, int, signed int, unsigned int *, signed int); // edx int v5; // ST14_4 int v6; // eax void (__cdecl *v7)(int, char *, signed int, unsigned int *, signed int); // edx unsigned int result; // eax int v9; // edi int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int, signed int, int *, signed int); // eax unsigned int i; // ebx int v14; // eax int v15; // ST18_4 int v16; // ST14_4 void (__cdecl *v17)(int, int, signed int, int *, signed int); // eax int v18; // ST34_4 int v19; // eax int v20; // ST00_4 void (__cdecl *v21)(int, int, signed int, int *, signed int); // eax int v22; // [esp+10h] [ebp-10h] unsigned int v23; // [esp+14h] [ebp-Ch] int v24; // [esp+18h] [ebp-8h] int v25; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = (int)this; v24 = (int)this; nullsub_32(a2); sub_87C560((float *)(v3 + 12), v2); v4 = *(void (__cdecl **)(int, int, signed int, unsigned int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); v23 = 4; v4(v5, v3 + 64, 4, &v23, 1); v6 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = *(_DWORD *)(*(_DWORD *)(v3 + 68) + 68) != 0; v7 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v6 + 8); v23 = 1; v7(v6, (char *)&a2 + 3, 1, &v23, 1); result = 0; v23 = 0; if ( *(_DWORD *)(v3 + 64) ) { v25 = 0; do { v9 = v25 + *(_DWORD *)(v3 + 68); sub_87C560((float *)(v25 + *(_DWORD *)(v3 + 68)), v2); sub_8737A0((char *)(v9 + 52), v2); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v10 + 8); v22 = 2; v12(v11, v9 + 72, 2, &v22, 1); if ( HIBYTE(a2) ) { for ( i = 0; i < *(unsigned __int16 *)(v9 + 72); ++i ) { v14 = *(_DWORD *)(v2 + 356); v15 = *(_DWORD *)(v9 + 68) + 8 * i; v16 = v14; v17 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v14 + 8); v18 = *(_DWORD *)(v9 + 68) + 8 * i; v22 = 2; v17(v16, v15, 2, &v22, 1); v19 = *(_DWORD *)(v2 + 356); v20 = v19; v21 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v19 + 8); v22 = 4; v21(v20, v18 + 4, 4, &v22, 1); } v3 = v24; } v25 += 76; result = v23 + 1; v23 = result; } while ( result < *(_DWORD *)(v3 + 64) ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00878D90) -------------------------------------------------------- BOOL __thiscall sub_878D90(float *this, int a2) { return *(float *)(a2 + 8) != this[2] || *(float *)a2 != *this || *(float *)(a2 + 4) != this[1] || *(float *)(a2 + 12) != this[3] || *(float *)(a2 + 16) != this[4] || *((_DWORD *)this + 17) != *(_DWORD *)(a2 + 68) || (unsigned __int8)sub_814B30(this + 5, (float *)(a2 + 20)); } //----- (00878E10) -------------------------------------------------------- int __thiscall sub_878E10(float *this) { int result; // eax double v2; // st7 float v3; // ST08_4 double v4; // st6 float v5; // ST04_4 double v6; // st5 double v7; // st4 double v8; // st7 double v9; // st7 float v10; // ST08_4 double v11; // st6 float v12; // ST08_4 float v13; // ST04_4 double v14; // rtt double v15; // st4 double v16; // st3 float v17; // [esp+4h] [ebp-8h] float v18; // [esp+4h] [ebp-8h] float v19; // [esp+8h] [ebp-4h] v17 = cos(this[2]); v19 = sin(this[2]); result = *((_DWORD *)this + 17); if ( !result ) { v9 = v19; v10 = this[3] * v19; v11 = v17; this[8] = this[3] * v17; this[11] = v10; this[14] = 0.0; v12 = this[4] * v17; v13 = -v9; this[9] = v13 * this[4]; this[12] = v12; v14 = v13; this[15] = 0.0; v15 = this[1] - this[6]; v16 = *this - this[5]; v18 = v11 * v15 + v9 * v16 + this[6]; v8 = v16 * v11 + v14 * v15; goto LABEL_5; } if ( !--result ) { v2 = v19; v3 = -v19 * this[4]; v4 = v17; this[8] = this[3] * v17; this[11] = v3; this[14] = 0.0; v5 = this[4] * v17; this[9] = this[3] * v2; this[12] = v5; this[15] = 0.0; v6 = this[1] - this[6]; v7 = -this[5] - *this; v18 = (v4 * v6 - v2 * v7) * this[4] + this[6]; v8 = (v2 * v6 + v4 * v7) * this[3]; LABEL_5: this[10] = v8 + this[5]; this[13] = v18; this[16] = 1.0; } *((_BYTE *)this + 28) = 0; return result; } //----- (00878F50) -------------------------------------------------------- int __thiscall sub_878F50(int this, int a2, float a3, int a4, int a5, int a6) { int v6; // esi int v7; // edx v6 = this; *(_DWORD *)this = *(_DWORD *)a2; v7 = *(_DWORD *)(a2 + 4); *(float *)(this + 8) = a3; *(_DWORD *)(this + 4) = v7; *(_DWORD *)(this + 12) = *(_DWORD *)a4; *(_DWORD *)(this + 16) = *(_DWORD *)(a4 + 4); *(_DWORD *)(this + 20) = *(_DWORD *)a5; *(_DWORD *)(this + 24) = *(_DWORD *)(a5 + 4); *(_DWORD *)(this + 68) = a6; sub_878E10((float *)this); return v6; } //----- (00878FA0) -------------------------------------------------------- int __thiscall sub_878FA0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int result; // eax int v11; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_86CB50(this, a2); sub_86CB50(v3 + 12, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 8, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, &v11, 4, &a2, 1); *((_DWORD *)v3 + 17) = v11; result = sub_86CB50(v3 + 20, v2); v3[28] = 1; return result; } //----- (00879020) -------------------------------------------------------- int __thiscall sub_879020(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; sub_86CBA0(this, a2); sub_86CBA0(v3 + 12, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 8, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 68, 4, &a2, 1); return sub_86CBA0(v3 + 20, v2); } //----- (00879090) -------------------------------------------------------- unsigned int __thiscall sub_879090(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA49F0); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (008790E0) -------------------------------------------------------- int __stdcall sub_8790E0(int a1) { return sub_81C180(a1); } //----- (008790F0) -------------------------------------------------------- char __thiscall sub_8790F0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // esi unsigned int v3; // eax int v4; // ebx unsigned int v5; // ecx _DWORD *v6; // edi unsigned int v7; // eax _DWORD *v8; // edx _DWORD *v9; // esi int v10; // ebx int v11; // eax unsigned int v12; // edx _DWORD *v13; // ecx int v15; // [esp+Ch] [ebp-Ch] int v16; // [esp+10h] [ebp-8h] int v17; // [esp+14h] [ebp-4h] v2 = this; sub_85BAE0(this, (int)a2); sub_8C4C90(*a2, (int)v2, &v17); v3 = v2[7]; v4 = v17; v16 = v17; if ( v3 ) { LOBYTE(v3) = sub_8C4C90(*a2, v3, &v17); *(_DWORD *)(v4 + 28) = v17; } if ( v2[5] ) { v5 = v2[3]; v6 = v2 + 2; v7 = 0; if ( v5 ) { v8 = (_DWORD *)v2[4]; while ( !*v8 ) { ++v7; ++v8; if ( v7 >= v5 ) goto LABEL_8; } v3 = *(_DWORD *)(v2[4] + 4 * v7); } else { LABEL_8: v3 = 0; } v9 = (_DWORD *)v3; if ( v3 ) { do { v3 = v9[2]; v10 = v9[1]; v9 = (_DWORD *)*v9; v17 = v3; if ( !v9 ) { v11 = (*(int (__thiscall **)(_DWORD *, int))(*v6 + 4))(v6, v10); v12 = v6[1]; v3 = v11 + 1; if ( v3 >= v12 ) { LABEL_15: v9 = 0; } else { v13 = (_DWORD *)(v6[2] + 4 * v3); while ( 1 ) { v9 = (_DWORD *)*v13; if ( *v13 ) break; ++v3; ++v13; if ( v3 >= v12 ) goto LABEL_15; } } } if ( v10 ) { LOBYTE(v3) = v17; if ( v17 ) { LOBYTE(v3) = sub_8C4C90(*a2, v17, &v15); if ( (_BYTE)v3 ) LOBYTE(v3) = (*(int (__stdcall **)(int, int))(*(_DWORD *)v16 + 64))(v10, v15); } } } while ( v9 ); } } return v3; } //----- (008791F0) -------------------------------------------------------- char __thiscall sub_8791F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v4; // eax _DWORD *v5; // edi _DWORD *v6; // esi int v7; // ebx int v8; // eax unsigned int v9; // edx unsigned int v10; // eax _DWORD *v11; // ecx v2 = this; if ( !sub_867010(this, (int)a2) ) return 0; v4 = v2[5]; if ( a2[5] != v4 ) return 0; if ( !v4 ) return 1; v5 = v2 + 2; v6 = (_DWORD *)sub_8A5CB0(v2 + 2); if ( !v6 ) return 1; while ( 1 ) { v7 = v6[1]; v6 = (_DWORD *)*v6; if ( !v6 ) { v8 = (*(int (__thiscall **)(_DWORD *, int))(*v5 + 4))(v5, v7); v9 = v5[1]; v10 = v8 + 1; if ( v10 >= v9 ) { LABEL_11: v6 = 0; } else { v11 = (_DWORD *)(v5[2] + 4 * v10); while ( 1 ) { v6 = (_DWORD *)*v11; if ( *v11 ) break; ++v10; ++v11; if ( v10 >= v9 ) goto LABEL_11; } } } if ( !(*(int (__stdcall **)(int))(*a2 + 60))(v7) ) return 0; if ( !v6 ) return 1; } } //----- (00879290) -------------------------------------------------------- int __thiscall sub_879290(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // ST00_4 int (__cdecl *v5)(int, int *, signed int, int *, signed int); // eax int result; // eax unsigned int v7; // edx _DWORD *v8; // edi unsigned int v9; // eax _DWORD *v10; // ecx _DWORD *v11; // esi int v12; // ecx const char *v13; // ebx int v14; // eax unsigned int v15; // edx unsigned int v16; // eax _DWORD *v17; // ecx int v18; // [esp+8h] [ebp-8h] int v19; // [esp+Ch] [ebp-4h] v2 = this; sub_81C180((int)a2); (*(void (__thiscall **)(_DWORD *, _DWORD))(*a2 + 44))(a2, v2[7]); v18 = v2[5]; v3 = a2[89]; v4 = v3; v5 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v3 + 8); v19 = 4; result = v5(v4, &v18, 4, &v19, 1); if ( v2[5] ) { v7 = v2[3]; v8 = v2 + 2; v9 = 0; if ( v7 ) { v10 = (_DWORD *)v2[4]; while ( !*v10 ) { ++v9; ++v10; if ( v9 >= v7 ) goto LABEL_6; } result = *(_DWORD *)(v2[4] + 4 * v9); } else { LABEL_6: result = 0; } v11 = (_DWORD *)result; if ( result ) { do { v12 = v11[2]; v13 = (const char *)v11[1]; v11 = (_DWORD *)*v11; v19 = v12; if ( !v11 ) { v14 = (*(int (__thiscall **)(_DWORD *, const char *))(*v8 + 4))(v8, v13); v15 = v8[1]; v16 = v14 + 1; if ( v16 >= v15 ) { LABEL_13: v11 = 0; } else { v17 = (_DWORD *)(v8[2] + 4 * v16); while ( 1 ) { v11 = (_DWORD *)*v17; if ( *v17 ) break; ++v16; ++v17; if ( v16 >= v15 ) goto LABEL_13; } } } sub_876A50(a2, v13); result = (*(int (__thiscall **)(_DWORD *, int))(*a2 + 44))(a2, v19); } while ( v11 ); } } return result; } //----- (00879370) -------------------------------------------------------- void __thiscall sub_879370(int *this, signed int a2) { _DWORD *v2; // esi int *v3; // edi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, signed int *, signed int, void **, signed int); // eax int v7; // eax void *v8; // ecx void *v9; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_87FD80(this, a2); v3[7] = sub_876300(v2); v4 = v2[88]; a2 = 0; v5 = v4; v6 = *(void (__cdecl **)(int, signed int *, signed int, void **, signed int))(v4 + 4); v9 = (void *)4; v6(v5, &a2, 4, &v9, 1); while ( a2 ) { --a2; v9 = 0; sub_8769C0(v2, &v9); v7 = sub_876300(v2); v8 = v9; if ( v9 ) { if ( v7 ) { (*(void (__thiscall **)(int *, void *, int))(*v3 + 64))(v3, v9, v7); v8 = v9; } } operator delete(v8); } } //----- (00879410) -------------------------------------------------------- unsigned int __thiscall sub_879410(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_879090(this, a2); v3 = sub_8784D0(*(int *)dword_BA49F8); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00879460) -------------------------------------------------------- _DWORD *__thiscall sub_879460(void *this, _DWORD **a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x20u); if ( v3 ) { v4 = sub_816C00(v3, 0); sub_872AA0(v2, (int)v4, a2); result = v4; } else { sub_872AA0(v2, 0, a2); result = 0; } return result; } //----- (008794B0) -------------------------------------------------------- _DWORD *sub_8794B0() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x20u); if ( v0 ) result = sub_816C00(v0, 0); else result = 0; return result; } //----- (008794D0) -------------------------------------------------------- signed int __usercall sub_8794D0@(int a1@, float *a2@, unsigned int a3@) { unsigned int v3; // edx int v4; // esi v3 = 0; if ( !a3 ) return 0; v4 = a1 - (_DWORD)a2; while ( 1 ) { if ( *a2 > (double)*(float *)((char *)a2 + v4) ) return -1; if ( *a2 < (double)*(float *)((char *)a2 + v4) ) break; ++v3; ++a2; if ( v3 >= a3 ) return 0; } return 1; } //----- (00879520) -------------------------------------------------------- int __thiscall sub_879520(_DWORD *this) { return this[2]; } //----- (00879530) -------------------------------------------------------- void *__thiscall sub_879530(int this, char a2) { int v2; // esi void *result; // eax signed int v4; // edi v2 = this; result = (void *)61440; v4 = 1; if ( *(_WORD *)(this + 48) & 0xF000 ) v4 = 3; if ( !*(_DWORD *)(this + 36) ) { result = operator new(12 * v4 * *(unsigned __int16 *)(this + 12)); *(_DWORD *)(v2 + 36) = result; } if ( a2 ) result = memset(*(void **)(v2 + 36), 0, 12 * v4 * *(unsigned __int16 *)(v2 + 12)); return result; } //----- (008795A0) -------------------------------------------------------- int __thiscall sub_8795A0(int this, unsigned __int16 a2) { int v2; // eax int result; // eax v2 = *(_DWORD *)(this + 44); if ( v2 && a2 < (unsigned __int16)(*(_WORD *)(this + 48) & 0x3F) ) result = v2 + 8 * a2 * *(unsigned __int16 *)(this + 12); else result = 0; return result; } //----- (008795E0) -------------------------------------------------------- signed int __thiscall sub_8795E0(_DWORD *this, unsigned __int16 a2, unsigned __int16 a3, char a4) { _DWORD *v4; // edi int v5; // edx float *v6; // ecx int v7; // esi unsigned int v8; // edx int v9; // esi int v10; // edx signed int result; // eax int v12; // edx int v13; // edi unsigned __int16 v14; // dx unsigned __int16 v15; // bx float *v16; // ecx unsigned int v17; // edx int v18; // esi unsigned __int16 v19; // [esp+Ch] [ebp-8h] _DWORD *v20; // [esp+10h] [ebp-4h] __int16 v21; // [esp+10h] [ebp-4h] int v22; // [esp+24h] [ebp+10h] v4 = this; v5 = this[8]; v20 = this; if ( a4 & 1 ) { v6 = (float *)(v5 + 12 * a3); v7 = v5 + 12 * a2; v8 = 0; v9 = v7 - (_DWORD)v6; while ( *v6 <= (double)*(float *)((char *)v6 + v9) ) { if ( *v6 < (double)*(float *)((char *)v6 + v9) ) return 1; ++v8; ++v6; if ( v8 >= 3 ) goto LABEL_6; } return -1; } LABEL_6: v10 = v4[9]; if ( v10 && a4 & 2 ) { result = sub_8794D0(v10 + 12 * a2, (float *)(v10 + 12 * a3), 3u); if ( result ) return result; v4 = v20; } v12 = v4[10]; if ( v12 && a4 & 4 ) { result = sub_8794D0(v12 + 16 * a2, (float *)(v12 + 16 * a3), 4u); if ( result ) return result; v4 = v20; } v13 = v4[11]; if ( v13 ) { if ( a4 & 8 ) { v14 = v20[12] & 0x3F; v21 = *((_WORD *)v20 + 6); v15 = 0; v19 = v14; v22 = 0; if ( v14 > 0u ) { LABEL_17: v16 = (float *)(v13 + 8 * (v15 + a3)); v17 = 0; v18 = 8 * (a2 + v15) - 8 * (v15 + a3); while ( *v16 <= (double)*(float *)((char *)v16 + v18) ) { if ( *v16 < (double)*(float *)((char *)v16 + v18) ) return 1; ++v17; ++v16; if ( v17 >= 2 ) { v15 += v21; if ( (unsigned __int16)++v22 < v19 ) goto LABEL_17; return 0; } } return -1; } } } return 0; } //----- (00879760) -------------------------------------------------------- bool __thiscall sub_879760(_DWORD *this, int a2) { _DWORD *v2; // esi bool result; // al int v4; // ecx v2 = this; result = 0; if ( (unsigned __int8)sub_85BA30(this, a2) ) { v4 = v2[14]; if ( !v4 || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2) ) result = 1; } return result; } //----- (008797A0) -------------------------------------------------------- int __thiscall sub_8797A0(int this) { int v1; // esi if ( *(_DWORD *)(this + 32) ) v1 = 12 * *(unsigned __int16 *)(this + 12); else v1 = 0; if ( *(_DWORD *)(this + 36) ) v1 += 12 * *(unsigned __int16 *)(this + 12) * (2 * ((*(_WORD *)(this + 48) & 0xF000) != 0) + 1); if ( *(_DWORD *)(this + 40) ) v1 += 16 * *(unsigned __int16 *)(this + 12); if ( *(_DWORD *)(this + 44) ) v1 += 8 * *(unsigned __int16 *)(this + 12) * (*(_WORD *)(this + 48) & 0x3F); return v1 + sub_8B6190(); } //----- (00879810) -------------------------------------------------------- _DWORD *__thiscall sub_879810(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8) { _DWORD *v8; // esi signed int v9; // ecx v8 = this; sub_85BA50(this); v8[8] = a3; *((_WORD *)v8 + 6) = a2; v8[9] = a4; v8[11] = a6; v8[12] = 0; v8[10] = a5; *v8 = &NiGeometryData::`vftable'; v8[2] = 0; *((_WORD *)v8 + 26) = 0; v8[14] = 0; *((_WORD *)v8 + 24) = a8 | a7 & 0x3F | v8[12] & 0xFC0; v9 = *((unsigned __int16 *)v8 + 6); if ( (_WORD)v9 && v8[8] ) sub_86B6C0((float *)v8 + 4, v9, (float *)v8[8]); v8[15] = 0; EnterCriticalSection(&stru_BA4A08); dword_BA4A20 = GetCurrentThreadId(); ++dword_BA4A24; *((_WORD *)v8 + 7) = word_ABEF8C++; if ( !--dword_BA4A24 ) dword_BA4A20 = 0; LeaveCriticalSection(&stru_BA4A08); *((_WORD *)v8 + 25) &= 0xFFFu; return v8; } // A25F94: using guessed type void *NiGeometryData::`vftable'; // ABEF8C: using guessed type __int16 word_ABEF8C; // BA4A20: using guessed type int dword_BA4A20; // BA4A24: using guessed type int dword_BA4A24; //----- (008798F0) -------------------------------------------------------- char *sub_8798F0() { return dword_BA4A00; } //----- (00879900) -------------------------------------------------------- _DWORD *__thiscall sub_879900(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiGeometryData::`vftable'; v1[2] = 0; *((_WORD *)v1 + 6) = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; *((_WORD *)v1 + 26) = 0; v1[14] = 0; v1[15] = 0; EnterCriticalSection(&stru_BA4A08); dword_BA4A20 = GetCurrentThreadId(); ++dword_BA4A24; *((_WORD *)v1 + 7) = word_ABEF8C++; if ( !--dword_BA4A24 ) dword_BA4A20 = 0; LeaveCriticalSection(&stru_BA4A08); *((_WORD *)v1 + 25) &= 0xFFFu; return v1; } // A25F94: using guessed type void *NiGeometryData::`vftable'; // ABEF8C: using guessed type __int16 word_ABEF8C; // BA4A20: using guessed type int dword_BA4A20; // BA4A24: using guessed type int dword_BA4A24; //----- (00879990) -------------------------------------------------------- int __thiscall sub_879990(int *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8) { int *v8; // esi int v9; // eax _DWORD *v10; // edi bool v11; // zf int v12; // eax _DWORD *v13; // edi int v14; // eax _DWORD *v15; // edi int v16; // eax _DWORD *v17; // edi int v18; // edx signed int v19; // eax __int16 v20; // cx int result; // eax v8 = this; if ( (*(int (**)(void))(*this + 52))() ) { if ( a3 != v8[8] ) { v9 = (*(int (__thiscall **)(int *))(*v8 + 52))(v8); v10 = (_DWORD *)v9; v11 = *(_DWORD *)(v9 + 12) == 1; --v10[3]; if ( v11 ) { sub_4E6690((void **)v9); operator delete(v10); } } if ( a4 != v8[9] ) { v12 = (*(int (__thiscall **)(int *))(*v8 + 52))(v8); v13 = (_DWORD *)v12; v11 = *(_DWORD *)(v12 + 12) == 1; --v13[3]; if ( v11 ) { sub_4E6690((void **)v12); operator delete(v13); } } if ( a5 != v8[10] ) { v14 = (*(int (__thiscall **)(int *))(*v8 + 52))(v8); v15 = (_DWORD *)v14; v11 = *(_DWORD *)(v14 + 12) == 1; --v15[3]; if ( v11 ) { sub_4E6690((void **)v14); operator delete(v15); } } if ( a6 != v8[11] ) { v16 = (*(int (__thiscall **)(int *))(*v8 + 52))(v8); v17 = (_DWORD *)v16; v11 = *(_DWORD *)(v16 + 12) == 1; --v17[3]; if ( v11 ) { sub_4E6690((void **)v16); operator delete(v17); } } } else { if ( a3 != v8[8] ) operator delete((void *)v8[8]); if ( a4 != v8[9] ) operator delete((void *)v8[9]); if ( a5 != v8[10] ) operator delete((void *)v8[10]); if ( a6 != v8[11] ) operator delete((void *)v8[11]); } v8[8] = a3; v18 = *v8; *((_WORD *)v8 + 6) = a2; v8[9] = a4; v19 = (*(unsigned __int16 (__thiscall **)(int *))(v18 + 64))(v8); if ( (_WORD)v19 && v8[8] ) sub_86B6C0((float *)v8 + 4, v19, (float *)v8[8]); v20 = *((_WORD *)v8 + 24); v8[11] = a6; v8[10] = a5; result = a7 & 0x3F; *((_WORD *)v8 + 24) = a8 | result | v20 & 0xFC0; return result; } //----- (00879AF0) -------------------------------------------------------- int __thiscall sub_879AF0(_DWORD *this, int a2, char a3, int a4, int a5) { _DWORD *v5; // esi int v6; // edi int v7; // eax unsigned __int16 v8; // ST04_2 int v9; // edi int result; // eax unsigned __int16 v11; // bx signed int v12; // eax bool v13; // sf int v14; // [esp+14h] [ebp+8h] int v15; // [esp+1Ch] [ebp+10h] v5 = this; v6 = a2; v7 = *(unsigned __int16 *)(a2 + 2 * ((a4 + a5) >> 1)); v8 = *(_WORD *)(a2 + 2 * ((a4 + a5) >> 1)); v15 = *(unsigned __int16 *)(a2 + 2 * a4); v14 = v7; if ( sub_8795E0(this, v15, v8, a3) >= 0 ) { v9 = *(unsigned __int16 *)(v6 + 2 * a5); if ( sub_8795E0(v5, v15, v9, a3) < 0 ) return (unsigned __int16)v15; v11 = v14; v12 = sub_8795E0(v5, v14, v9, a3); } else { v9 = *(unsigned __int16 *)(v6 + 2 * a5); if ( sub_8795E0(v5, v14, v9, a3) < 0 ) return (unsigned __int16)v14; v11 = v15; v12 = sub_8795E0(v5, v15, v9, a3); } v13 = v12 < 0; result = v9; if ( !v13 ) result = v11; return result; } //----- (00879B90) -------------------------------------------------------- int __thiscall sub_879B90(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx int result; // eax int v4; // esi int v5; // edi v2 = this; result = nullsub_32(a2); if ( a2[7] >= 0xA030007u ) { result = sub_875AD0(a2); v4 = v2[14]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[14] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00879C00) -------------------------------------------------------- char __thiscall sub_879C00(float **this, int a2) { int v2; // ebx float **v3; // esi unsigned __int16 v5; // dx float *v6; // eax unsigned int v7; // edi int v8; // ecx float *v9; // esi float *v10; // ecx __int16 v11; // si unsigned int v12; // ebx unsigned int v13; // edi int v14; // eax float *v15; // esi float *v16; // ecx unsigned int v17; // edi int v18; // eax float *v19; // esi float *v20; // eax unsigned __int16 v21; // ax unsigned int v22; // ebx unsigned int v23; // esi float *v24; // edi int v25; // eax float *v26; // ecx int v27; // ebx int v28; // [esp+8h] [ebp-Ch] int v29; // [esp+8h] [ebp-Ch] int v30; // [esp+8h] [ebp-Ch] int v31; // [esp+8h] [ebp-Ch] unsigned __int16 v32; // [esp+Ch] [ebp-8h] unsigned int v33; // [esp+Ch] [ebp-8h] float **v34; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v34 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = *((_WORD *)v3 + 6); v32 = v5; if ( v5 != *(_WORD *)(a2 + 12) ) return 0; v6 = v3[8]; if ( !v6 ) goto LABEL_66; if ( !*(_DWORD *)(a2 + 32) ) return 0; if ( !v6 ) { LABEL_66: if ( !*(_DWORD *)(a2 + 32) ) goto LABEL_8; return 0; } LABEL_8: if ( *((_BYTE *)v3 + 52) != *(_BYTE *)(a2 + 52) || *((_BYTE *)v3 + 53) != *(_BYTE *)(a2 + 53) ) return 0; if ( v6 ) { v7 = 0; if ( v5 ) { v8 = *(_DWORD *)(a2 + 32) - (_DWORD)v6; v9 = v3[8]; v28 = *(_DWORD *)(a2 + 32) - (_DWORD)v6; while ( !(unsigned __int8)sub_85ECE0(v9, (float *)((char *)v9 + v8)) ) { ++v7; v9 += 3; if ( v7 >= v32 ) { v3 = v34; v5 = v32; goto LABEL_17; } v8 = v28; } return 0; } } LABEL_17: v10 = v3[9]; if ( v10 ) { if ( !*(_DWORD *)(a2 + 36) ) return 0; if ( v10 ) goto LABEL_67; } if ( *(_DWORD *)(a2 + 36) ) return 0; if ( v10 ) { LABEL_67: v11 = (_WORD)v3[12] & 0xF000; if ( v11 != (*(_WORD *)(a2 + 48) & 0xF000) ) return 0; v12 = v5; if ( v11 ) v12 = 3 * v5; v13 = 0; if ( v12 ) { v14 = *(_DWORD *)(a2 + 36) - (_DWORD)v10; v15 = v10; v29 = *(_DWORD *)(a2 + 36) - (_DWORD)v10; while ( !(unsigned __int8)sub_85ECE0(v15, (float *)((char *)v15 + v14)) ) { ++v13; v15 += 3; if ( v13 >= v12 ) goto LABEL_30; v14 = v29; } return 0; } LABEL_30: v3 = v34; v2 = a2; } if ( !(unsigned __int8)sub_86B670((float *)v3 + 4, (float *)(v2 + 16)) ) return 0; v16 = v3[10]; if ( v16 ) { if ( !*(_DWORD *)(v2 + 40) ) return 0; } if ( !v3[11] && *(_DWORD *)(v2 + 44) ) return 0; if ( v16 ) { v17 = 0; v33 = *((unsigned __int16 *)v3 + 6); if ( *((_WORD *)v3 + 6) ) { v18 = *(_DWORD *)(v2 + 40) - (_DWORD)v16; v19 = v3[10]; v30 = *(_DWORD *)(v2 + 40) - (_DWORD)v16; while ( !(unsigned __int8)sub_883690(v19, (float *)((char *)v19 + v18)) ) { ++v17; v19 += 4; if ( v17 >= v33 ) { v3 = v34; goto LABEL_43; } v18 = v30; } return 0; } } LABEL_43: v20 = v3[11]; if ( v20 ) { if ( !*(_DWORD *)(v2 + 44) ) return 0; if ( v20 ) goto LABEL_68; } if ( *(_DWORD *)(v2 + 44) ) return 0; if ( v20 ) { LABEL_68: v21 = *((_WORD *)v3 + 24); if ( ((unsigned __int8)v21 ^ *(_BYTE *)(v2 + 48)) & 0x3F ) return 0; v22 = *((unsigned __int16 *)v3 + 6) * (v21 & 0x3F); v23 = 0; if ( v22 ) { v24 = v34[11]; v25 = *(_DWORD *)(a2 + 44) - (_DWORD)v24; v31 = *(_DWORD *)(a2 + 44) - (_DWORD)v24; while ( !(unsigned __int8)sub_814B30(v24, (float *)((char *)v24 + v25)) ) { ++v23; v24 += 2; if ( v23 >= v22 ) goto LABEL_54; v25 = v31; } return 0; } LABEL_54: v3 = v34; v2 = a2; } v26 = v3[14]; if ( !v26 ) goto LABEL_69; if ( !*(_DWORD *)(v2 + 56) ) return 0; if ( !v26 ) { LABEL_69: if ( !*(_DWORD *)(v2 + 56) ) { if ( !v26 ) return 1; goto LABEL_60; } return 0; } LABEL_60: v27 = *(_DWORD *)(v2 + 56); if ( v27 && !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v26 + 28))(v27) ) return 0; return 1; } //----- (00879E60) -------------------------------------------------------- LONG __thiscall sub_879E60(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi bool v4; // zf int v5; // edi int v6; // edi int v7; // edi int v8; // edi v1 = this; *this = &NiGeometryData::`vftable'; sub_85F2D0((int)this); v2 = v1[14]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[14] = 0; } v3 = v1[2]; if ( v3 ) { if ( v1[8] ) { v4 = (*(_DWORD *)(v3 + 12))-- == 1; if ( v4 ) { sub_4E6690((void **)v3); operator delete((void *)v3); } } if ( v1[9] ) { v5 = v1[2]; v4 = (*(_DWORD *)(v5 + 12))-- == 1; if ( v4 ) { sub_4E6690((void **)v5); operator delete((void *)v5); } } if ( v1[10] ) { v6 = v1[2]; v4 = (*(_DWORD *)(v6 + 12))-- == 1; if ( v4 ) { sub_4E6690((void **)v6); operator delete((void *)v6); } } if ( v1[11] ) { v7 = v1[2]; v4 = (*(_DWORD *)(v7 + 12))-- == 1; if ( v4 ) { sub_4E6690((void **)v7); operator delete((void *)v7); } } } else { operator delete((void *)v1[8]); operator delete((void *)v1[9]); operator delete((void *)v1[10]); operator delete((void *)v1[11]); } v8 = v1[14]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); return sub_85BA80(v1); } // A25F94: using guessed type void *NiGeometryData::`vftable'; //----- (00879F80) -------------------------------------------------------- int __thiscall sub_879F80(_DWORD *this, int a2, int a3, int a4, int a5) { int result; // eax int v6; // ecx int v7; // esi int v8; // ebx int v9; // edi unsigned __int16 v10; // dx unsigned __int16 v11; // ax __int16 v12; // ax _DWORD *v13; // [esp+0h] [ebp-4h] int v14; // [esp+Ch] [ebp+8h] result = a4; v13 = this; v6 = a5; if ( a5 > a4 ) { v7 = a2; while ( 1 ) { v8 = result - 1; v9 = v6 + 1; v14 = sub_879AF0(v13, v7, a3, result, v6); while ( 1 ) { do v10 = *(_WORD *)(v7 + 2 * v9-- - 2); while ( sub_8795E0(v13, v14, v10, a3) < 0 ); do { v11 = *(_WORD *)(v7 + 2 * v8++ + 2); result = sub_8795E0(v13, v11, v14, a3); } while ( result < 0 ); if ( v8 >= v9 ) break; v12 = *(_WORD *)(v7 + 2 * v8); *(_WORD *)(v7 + 2 * v8) = *(_WORD *)(v7 + 2 * v9); *(_WORD *)(v7 + 2 * v9) = v12; } if ( v9 == a5 ) { a5 = v9 - 1; } else { result = sub_879F80(v7, a3, a4, v9); a4 = v9 + 1; } if ( a5 <= a4 ) break; v6 = a5; result = a4; } } return result; } //----- (0087A050) -------------------------------------------------------- int __thiscall sub_87A050(int *this, signed int a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST18_4 void (__cdecl *v6)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST14_4 void (__cdecl *v9)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v10; // eax _DWORD *v11; // ST14_4 void (__cdecl *v12)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v13; // eax _DWORD *v14; // ST00_4 void (__cdecl *v15)(_DWORD *, char *, signed int, int *, signed int); // eax _DWORD *v16; // eax void (__cdecl *v17)(_DWORD *, int *, signed int, int *, signed int); // edx void *v18; // ST14_4 void (__cdecl *v19)(void *, char *, signed int, int *, signed int); // eax int v20; // ebx int v21; // eax int v22; // ecx int v23; // ST1C_4 void (__cdecl *v24)(void *, int, int, int *, signed int); // edx int v25; // ST18_4 void *v26; // ST14_4 bool v27; // cf int v28; // ebx _DWORD *v29; // eax _DWORD *v30; // ST14_4 void (__cdecl *v31)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v32; // eax void (__cdecl *v33)(_DWORD *, int *, signed int, int *, signed int); // edx void *v34; // ST14_4 void (__cdecl *v35)(void *, bool *, signed int, int *, signed int); // eax int v36; // eax int v37; // ecx void (__cdecl *v38)(void *, int, int, int *, signed int); // edx int v39; // ST18_4 void *v40; // ST14_4 _DWORD *v41; // eax void (__cdecl *v42)(_DWORD *, int *, signed int, int *, signed int); // edx void *v43; // ST14_4 void (__cdecl *v44)(void *, bool *, signed int, int *, signed int); // eax int v45; // eax int v46; // ebx int v47; // eax int v48; // ecx char *v49; // eax int v50; // edx int v51; // ecx int v52; // ST1C_4 void (__cdecl *v53)(void *, int, int, int *, signed int); // edx int v54; // ST18_4 void *v55; // ST14_4 unsigned int v56; // eax _DWORD *v57; // eax _DWORD *v58; // ST14_4 void (__cdecl *v59)(_DWORD *, int *, signed int, int *, signed int); // eax void (__cdecl *v60)(void *, int *, signed int, int *, signed int); // edx void *v61; // ST14_4 _DWORD *v62; // eax _DWORD *v63; // ST14_4 void (__cdecl *v64)(_DWORD *, int *, signed int, int *, signed int); // eax int result; // eax int v66; // ebx int v67; // eax int v68; // ecx int (__cdecl *v69)(void *, int, int, int *, signed int); // edx int v70; // ST18_4 void *v71; // ST14_4 int (__cdecl *v72)(void *, char *, signed int, int *, signed int); // edx void *v73; // ST18_4 int v74; // [esp+8h] [ebp-Ch] int v75; // [esp+Ch] [ebp-8h] bool v76; // [esp+12h] [ebp-2h] bool v77; // [esp+13h] [ebp-1h] v2 = (void **)a2; v3 = this; sub_85BC50(this, a2); if ( (unsigned int)v2[7] >= 0xA010072 ) { v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v4[1]; v75 = 4; v6(v5, &v74, 4, &v75, 1); v3[2] = sub_875B80(v2, v74); } v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v7[1]; v74 = 2; v9(v8, v3 + 3, 2, &v74, 1); if ( (unsigned int)v2[7] >= 0xA000110 ) { v10 = v2[88]; v11 = v10; v12 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v10[1]; v74 = 1; v12(v11, v3 + 13, 1, &v74, 1); v13 = v2[88]; v14 = v13; v15 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v13[1]; v74 = 1; v15(v14, (char *)v3 + 53, 1, &v74, 1); } v16 = v2[88]; if ( (unsigned int)v2[7] >= 0x4010000 ) { v18 = v2[88]; v19 = (void (__cdecl *)(void *, char *, signed int, int *, signed int))v16[1]; v74 = 1; v19(v18, (char *)&a2 + 3, 1, &v74, 1); } else { v17 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v16[1]; v74 = 4; v17(v16, v3 + 8, 4, &v74, 1); HIBYTE(a2) = v3[8] != 0; } if ( HIBYTE(a2) ) { if ( (*(int (__thiscall **)(int *))(*v3 + 52))(v3) ) { v20 = 12 * *((unsigned __int16 *)v3 + 6); v21 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v22 = *(_DWORD *)(v21 + 8); ++*(_DWORD *)(v21 + 12); *(_DWORD *)(v21 + 8) = v22 + v20; v3[8] = v22; } else { v3[8] = (int)operator new(12 * *((unsigned __int16 *)v3 + 6)); } v23 = 12 * *((unsigned __int16 *)v3 + 6); v24 = (void (__cdecl *)(void *, int, int, int *, signed int))*((_DWORD *)v2[88] + 1); v25 = v3[8]; v26 = v2[88]; v74 = 4; v24(v26, v25, v23, &v74, 1); } v27 = (unsigned int)v2[7] < 0xA000002; v28 = *((unsigned __int16 *)v3 + 6); v75 = *((unsigned __int16 *)v3 + 6); if ( !v27 ) { v29 = v2[88]; v30 = v29; v31 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v29[1]; v74 = 2; v31(v30, v3 + 12, 2, &v74, 1); if ( v3[12] & 0xF000 ) { v75 = 3 * v28; v28 *= 3; } } v32 = v2[88]; if ( (unsigned int)v2[7] >= 0x4010000 ) { v34 = v2[88]; v35 = (void (__cdecl *)(void *, bool *, signed int, int *, signed int))v32[1]; v74 = 1; v35(v34, &v77, 1, &v74, 1); } else { v33 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v32[1]; v74 = 4; v33(v32, v3 + 9, 4, &v74, 1); v28 = v75; v77 = v3[9] != 0; } if ( v77 ) { if ( (*(int (__thiscall **)(int *))(*v3 + 52))(v3) ) { v36 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v37 = *(_DWORD *)(v36 + 8); ++*(_DWORD *)(v36 + 12); *(_DWORD *)(v36 + 8) = v37 + 12 * v28; v3[9] = v37; } else { v3[9] = (int)operator new(12 * v28); } v38 = (void (__cdecl *)(void *, int, int, int *, signed int))*((_DWORD *)v2[88] + 1); v39 = v3[9]; v40 = v2[88]; v74 = 4; v38(v40, v39, 12 * v28, &v74, 1); } sub_87D5D0((char *)v3 + 16, (signed int)v2); v41 = v2[88]; if ( (unsigned int)v2[7] >= 0x4010000 ) { v43 = v2[88]; v44 = (void (__cdecl *)(void *, bool *, signed int, int *, signed int))v41[1]; v74 = 1; v44(v43, &v76, 1, &v74, 1); } else { v42 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v41[1]; v74 = 4; v42(v41, v3 + 10, 4, &v74, 1); v76 = v3[10] != 0; } if ( v76 ) { v45 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v46 = *((unsigned __int16 *)v3 + 6); if ( v45 ) { v47 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v48 = *(_DWORD *)(v47 + 8); ++*(_DWORD *)(v47 + 12); *(_DWORD *)(v47 + 8) = v48 + 16 * v46; v3[10] = v48; } else { v49 = (char *)operator new(16 * *((unsigned __int16 *)v3 + 6)); if ( v49 ) { v50 = v46 - 1; if ( v46 - 1 >= 0 ) { v51 = (int)(v49 + 8); do { *(float *)(v51 - 8) = 0.0; v51 += 16; --v50; *(float *)(v51 - 20) = 0.0; *(float *)(v51 - 16) = 0.0; *(float *)(v51 - 12) = 0.0; } while ( v50 >= 0 ); } } else { v49 = 0; } v3[10] = (int)v49; } v52 = 16 * *((unsigned __int16 *)v3 + 6); v53 = (void (__cdecl *)(void *, int, int, int *, signed int))*((_DWORD *)v2[88] + 1); v54 = v3[10]; v55 = v2[88]; v74 = 4; v53(v55, v54, v52, &v74, 1); } v56 = (unsigned int)v2[7]; if ( v56 >= 0x500000A ) { if ( v56 < 0xA000002 ) { v60 = (void (__cdecl *)(void *, int *, signed int, int *, signed int))*((_DWORD *)v2[88] + 1); v61 = v2[88]; v74 = 2; v60(v61, v3 + 12, 2, &v74, 1); } } else { v57 = v2[88]; v58 = v57; v59 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v57[1]; v74 = 2; v59(v58, &v75, 2, &v74, 1); *((_WORD *)v3 + 24) ^= ((unsigned __int8)v75 ^ (unsigned __int8)*((_WORD *)v3 + 24)) & 0x3F; } if ( (unsigned int)v2[7] < 0x4010000 ) { v62 = v2[88]; v63 = v62; v64 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v62[1]; v74 = 4; v64(v63, v3 + 11, 4, &v74, 1); } result = *((unsigned __int16 *)v3 + 24); if ( result & 0x3F ) { v66 = (result & 0x3F) * *((unsigned __int16 *)v3 + 6); if ( (*(int (__thiscall **)(int *))(*v3 + 52))(v3) ) { v67 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v68 = *(_DWORD *)(v67 + 8); ++*(_DWORD *)(v67 + 12); *(_DWORD *)(v67 + 8) = v68 + 8 * v66; v3[11] = v68; } else { v3[11] = (int)operator new(8 * v66); } v69 = (int (__cdecl *)(void *, int, int, int *, signed int))*((_DWORD *)v2[88] + 1); v70 = v3[11]; v71 = v2[88]; v74 = 4; result = v69(v71, v70, 8 * v66, &v74, 1); } if ( (unsigned int)v2[7] >= 0x500000A ) { v72 = (int (__cdecl *)(void *, char *, signed int, int *, signed int))*((_DWORD *)v2[88] + 1); v73 = v2[88]; v74 = 2; result = v72(v73, (char *)v3 + 50, 2, &v74, 1); } if ( (unsigned int)v2[7] >= 0xA030007 ) result = sub_876290(v2); return result; } //----- (0087A530) -------------------------------------------------------- int __thiscall sub_87A530(char *this, _DWORD *a2) { _DWORD *v2; // esi char *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, char *, signed int, int *, signed int); // edx unsigned __int16 *v8; // ebx int v9; // ST28_4 int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, int *, signed int); // eax int v16; // eax void (__cdecl *v17)(int, char *, signed int, int *, signed int); // edx int v18; // ST44_4 void (__cdecl *v19)(int, int, int, int *, signed int); // edx int v20; // ST40_4 int v21; // ST3C_4 int v22; // eax int v23; // ST3C_4 void (__cdecl *v24)(int, char *, signed int, int *, signed int); // eax int v25; // eax int v26; // eax int v27; // ST3C_4 void (__cdecl *v28)(int, bool *, signed int, int *, signed int); // eax void (__cdecl *v29)(int, int, int, int *, signed int); // edx int v30; // ST40_4 int v31; // ST3C_4 int v32; // eax int v33; // ST3C_4 void (__cdecl *v34)(int, bool *, signed int, int *, signed int); // eax int v35; // ST44_4 void (__cdecl *v36)(int, int, int, int *, signed int); // edx int v37; // ST40_4 int v38; // ST3C_4 int v39; // eax int v40; // ST44_4 void (__cdecl *v41)(int, int, int, int *, signed int); // eax int v42; // ST40_4 int v43; // ST3C_4 int v44; // eax int v45; // ST3C_4 void (__cdecl *v46)(int, int *, signed int, int *, signed int); // eax int v48; // [esp+Ch] [ebp-10h] unsigned int v49; // [esp+10h] [ebp-Ch] int v50; // [esp+14h] [ebp-8h] bool v51; // [esp+1Ah] [ebp-2h] bool v52; // [esp+1Bh] [ebp-1h] v2 = a2; v3 = this; nullsub_32(a2); v49 = sub_875B90(v2, *((_DWORD *)v3 + 2)); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 8); v50 = 4; v6(v5, &v49, 4, &v50, 1); v7 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2[89] + 8); v8 = (unsigned __int16 *)(v3 + 12); v9 = v2[89]; v50 = 2; v7(v9, v3 + 12, 2, &v50, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); v50 = 1; v12(v11, v3 + 52, 1, &v50, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 8); v50 = 1; v15(v14, v3 + 53, 1, &v50, 1); v16 = v2[89]; HIBYTE(a2) = *((_DWORD *)v3 + 8) != 0; v17 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 8); v50 = 1; v17(v16, (char *)&a2 + 3, 1, &v50, 1); if ( HIBYTE(a2) ) { v18 = 12 * *v8; v19 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v20 = *((_DWORD *)v3 + 8); v21 = v2[89]; v50 = 4; v19(v21, v20, v18, &v50, 1); } v22 = v2[89]; v23 = v22; v24 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v22 + 8); v50 = 2; v24(v23, v3 + 48, 2, &v50, 1); v25 = *v8; v50 = *v8; if ( *((_WORD *)v3 + 24) & 0xF000 ) v50 = 3 * v25; v52 = *((_DWORD *)v3 + 9) != 0; v26 = v2[89]; v27 = v26; v28 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v26 + 8); v48 = 1; v28(v27, &v52, 1, &v48, 1); if ( v52 ) { v29 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v30 = *((_DWORD *)v3 + 9); v31 = v2[89]; v48 = 4; v29(v31, v30, 12 * v50, &v48, 1); } sub_8737A0(v3 + 16, (signed int)v2); v51 = *((_DWORD *)v3 + 10) != 0; v32 = v2[89]; v33 = v32; v34 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v32 + 8); v48 = 1; v34(v33, &v51, 1, &v48, 1); if ( v51 ) { v35 = 16 * *v8; v36 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v37 = *((_DWORD *)v3 + 10); v38 = v2[89]; v48 = 4; v36(v38, v37, v35, &v48, 1); } v39 = *v8 * (*((_WORD *)v3 + 24) & 0x3F); if ( v39 ) { v40 = 8 * v39; v41 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v42 = *((_DWORD *)v3 + 11); v43 = v2[89]; v48 = 4; v41(v43, v42, v40, &v48, 1); } v50 = *((_WORD *)v3 + 25) & 0xF000; v44 = v2[89]; v45 = v44; v46 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v44 + 8); v48 = 2; v46(v45, &v50, 2, &v48, 1); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 14)); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0087A7B0) -------------------------------------------------------- unsigned int __thiscall sub_87A7B0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // ebx char *v22; // eax unsigned int v23; // ebx char *v24; // eax unsigned int v25; // ebx char *v26; // eax unsigned int v27; // ebx int v28; // ecx char *v30; // eax unsigned int v31; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4A00); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usVertices", *((_WORD *)v3 + 6)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_pkVertex", *((_DWORD *)v3 + 8)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878700((int)"m_pkNormal", *((_DWORD *)v3 + 9)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_878630((int)"NormalBinormalTangent", *((_WORD *)v3 + 24) & 0xF000); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_87D570((float *)v3 + 4, (int)"m_kBound"); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878700((int)"m_pkColor", *((_DWORD *)v3 + 10)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8785F0((int)"Num Texture Sets", *((_WORD *)v3 + 24) & 0x3F); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_878700((int)"m_pkTexture", *((_DWORD *)v3 + 11)); v21 = v2[3]; a2 = (int)v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); sub_823870(v2, v21, &a2); v22 = sub_8785F0((int)"m_usDirtyFlags", *((_WORD *)v3 + 25)); v23 = v2[3]; a2 = (int)v22; if ( v23 >= v2[2] ) sub_8237A0(v2, v23 + v2[5]); sub_823870(v2, v23, &a2); v24 = sub_878570((int)"m_ucKeepFlags", *((_BYTE *)v3 + 52)); v25 = v2[3]; a2 = (int)v24; if ( v25 >= v2[2] ) sub_8237A0(v2, v25 + v2[5]); sub_823870(v2, v25, &a2); v26 = sub_878570((int)"m_ucCompressFlags", *((_BYTE *)v3 + 53)); v27 = v2[3]; a2 = (int)v26; if ( v27 >= v2[2] ) sub_8237A0(v2, v27 + v2[5]); sub_823870(v2, v27, &a2); v28 = *((_DWORD *)v3 + 14); if ( v28 ) return (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v28 + 32))(v2); v30 = sub_878630((int)"m_spAdditionalGeomData", 0); v31 = v2[3]; a2 = (int)v30; if ( v31 >= v2[2] ) sub_8237A0(v2, v31 + v2[5]); return sub_823870(v2, v31, &a2); } //----- (0087AAA0) -------------------------------------------------------- void *__thiscall sub_87AAA0(void *this, char a2) { void *v2; // esi v2 = this; sub_879E60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087AAD0) -------------------------------------------------------- int __thiscall sub_87AAD0(unsigned __int16 *this, int *a2, _DWORD *a3, int a4) { unsigned __int16 *v4; // ebx int v5; // esi void *v6; // eax unsigned __int16 v7; // dx int v8; // ecx int v9; // eax int v10; // eax int v11; // esi int v12; // edi unsigned __int16 v13; // cx __int16 v14; // cx int v15; // ecx int result; // eax int v17; // [esp+Ch] [ebp-10h] unsigned __int16 v18; // [esp+10h] [ebp-Ch] unsigned __int16 v19; // [esp+14h] [ebp-8h] signed int v20; // [esp+18h] [ebp-4h] v4 = this; v5 = this[6]; v19 = this[6]; *a2 = (int)operator new(2 * v5); v6 = operator new(2 * v5); v7 = v19; *a3 = v6; v8 = 0; v9 = 0; if ( v19 > 0u ) { do { *(_WORD *)(v8 + *a2) = v9++; v8 += 2; } while ( (unsigned __int16)v9 < v19 ); } v10 = v5 - 1; v11 = *a2; v17 = v10; if ( v10 > 0 ) { v20 = -1; v12 = v10 + 1; v18 = sub_879AF0(v4, v11, a4, 0, v10); while ( 1 ) { do v13 = *(_WORD *)(v11 + 2 * v12-- - 2); while ( sub_8795E0(v4, v18, v13, a4) < 0 ); do ++v20; while ( sub_8795E0(v4, *(_WORD *)(v11 + 2 * v20), v18, a4) < 0 ); if ( v20 >= v12 ) break; v14 = *(_WORD *)(v11 + 2 * v20); *(_WORD *)(v11 + 2 * v20) = *(_WORD *)(v11 + 2 * v12); *(_WORD *)(v11 + 2 * v12) = v14; } if ( v12 == v17 ) { sub_879F80(v4, v11, a4, 0, v12 - 1); } else { sub_879F80(v4, v11, a4, 0, v12); sub_879F80(v4, v11, a4, v12 + 1, v17); } v7 = v19; } v15 = 0; result = 0; if ( v7 > 0u ) { do { *(_WORD *)(*a3 + 2 * *(unsigned __int16 *)(*a2 + v15)) = result++; v15 += 2; } while ( (unsigned __int16)result < v7 ); } return result; } //----- (0087AC30) -------------------------------------------------------- LONG __thiscall sub_87AC30(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiLight::`vftable'; sub_85F2B0((int)this); return sub_861430(v1); } // A260B4: using guessed type void *NiLight::`vftable'; //----- (0087AC50) -------------------------------------------------------- int __thiscall sub_87AC50(float *this, int a2, _DWORD **a3) { float *v3; // esi int result; // eax v3 = this; sub_861190(this, a2, a3); *(float *)(a2 + 224) = v3[56]; *(float *)(a2 + 228) = v3[57]; *(float *)(a2 + 232) = v3[58]; *(float *)(a2 + 236) = v3[59]; *(float *)(a2 + 240) = v3[60]; *(float *)(a2 + 244) = v3[61]; *(float *)(a2 + 248) = v3[62]; *(float *)(a2 + 252) = v3[63]; *(float *)(a2 + 256) = v3[64]; result = *((_DWORD *)v3 + 65); *(_DWORD *)(a2 + 260) = result; return result; } //----- (0087ACF0) -------------------------------------------------------- _DWORD *__thiscall sub_87ACF0(_DWORD *this, _DWORD *a2) { return sub_861500(this, a2); } //----- (0087AD00) -------------------------------------------------------- char __thiscall sub_87AD00(_DWORD *this, int a2) { return sub_8AD9A0(this, a2); } //----- (0087AD10) -------------------------------------------------------- char *sub_87AD10() { return dword_BA4A28; } //----- (0087AD20) -------------------------------------------------------- float *__thiscall sub_87AD20(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_8615A0(this); *(_DWORD *)v1 = &NiLight::`vftable'; v1[57] = 0.0; v1[58] = 0.0; result = v1; v1[59] = 0.0; v1[60] = 0.0; v1[61] = 0.0; v1[62] = 0.0; v1[63] = 0.0; v1[64] = 0.0; v1[65] = 0.0; v1[66] = 0.0; v1[56] = 1.0; v1[57] = 1.0; v1[58] = 1.0; v1[59] = 1.0; v1[60] = 1.0; v1[61] = 1.0; v1[62] = 1.0; v1[63] = 1.0; v1[64] = 1.0; v1[65] = 1.0; return result; } // A260B4: using guessed type void *NiLight::`vftable'; //----- (0087ADC0) -------------------------------------------------------- _DWORD *__thiscall sub_87ADC0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiLight::`vftable'; sub_85F2B0((int)this); sub_861430(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A260B4: using guessed type void *NiLight::`vftable'; //----- (0087AE00) -------------------------------------------------------- int __thiscall sub_87AE00(int *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax v2 = a2; v3 = (char *)this; sub_8616E0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 224, 4, &a2, 1); sub_8608D0(v3 + 228, v2); sub_8608D0(v3 + 240, v2); return sub_8608D0(v3 + 252, v2); } //----- (0087AE60) -------------------------------------------------------- int __thiscall sub_87AE60(const char **this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax v2 = a2; v3 = (char *)this; sub_8617A0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 224, 4, &a2, 1); sub_860940(v3 + 228, v2); sub_860940(v3 + 240, v2); return sub_860940(v3 + 252, v2); } //----- (0087AEC0) -------------------------------------------------------- bool __thiscall sub_87AEC0(float *this, int a2) { float *v2; // esi v2 = this; return sub_8612D0(this, (_DWORD *)a2) && *(float *)(a2 + 224) == v2[56] && !(unsigned __int8)sub_85ECE0(v2 + 57, (float *)(a2 + 228)) && !(unsigned __int8)sub_85ECE0(v2 + 60, (float *)(a2 + 240)) && !(unsigned __int8)sub_85ECE0(v2 + 63, (float *)(a2 + 252)); } //----- (0087AF40) -------------------------------------------------------- unsigned int __thiscall sub_87AF40(int *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = a2; v3 = (float *)this; sub_861840(this, a2); v4 = sub_8784D0(*(int *)dword_BA4A28); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fDimmer", v3[56]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_860810(v3 + 57, (int)"m_kAmb"); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = sub_860810(v3 + 60, (int)"m_kDiff"); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); sub_823870(v2, v11, &a2); v12 = sub_860810(v3 + 63, (int)"m_kSpec"); v13 = *((_DWORD *)v2 + 3); a2 = v12; if ( v13 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v13 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v13, &a2); } //----- (0087B070) -------------------------------------------------------- _DWORD *sub_87B070() { _DWORD *result; // eax result = sub_85F1A0(); dword_BA4A30 = result; return result; } //----- (0087B080) -------------------------------------------------------- void sub_87B080() { operator delete(dword_BA4A30); dword_BA4A30 = 0; } //----- (0087B0A0) -------------------------------------------------------- float *__cdecl sub_87B0A0(float *a1, signed int a2, int a3) { double v3; // st7 double v4; // st6 unsigned int v5; // esi unsigned int v6; // ecx unsigned int v7; // ebx float *result; // eax double v9; // rt0 double v10; // rt2 double v11; // st6 double v12; // st7 unsigned int v13; // ecx double v14; // rtt float *v15; // eax unsigned int v16; // ecx float *v17; // eax unsigned int v18; // ecx float *v19; // eax unsigned int v20; // ecx int v21; // esi unsigned int v22; // ecx int v23; // [esp+Ch] [ebp-8h] float v24; // [esp+10h] [ebp-4h] float v25; // [esp+10h] [ebp-4h] float v26; // [esp+10h] [ebp-4h] float v27; // [esp+10h] [ebp-4h] float v28; // [esp+10h] [ebp-4h] float v29; // [esp+10h] [ebp-4h] float v30; // [esp+10h] [ebp-4h] float v31; // [esp+10h] [ebp-4h] float v32; // [esp+10h] [ebp-4h] float v33; // [esp+10h] [ebp-4h] v3 = 0.0; v4 = 1.0; v5 = a2; v6 = 0; if ( a2 < 4 ) { result = a1; v11 = 0.0; v12 = 1.0; } else { v7 = ((unsigned int)(a2 - 4) >> 2) + 1; v23 = 4 * v7; result = a1; while ( 1 ) { v24 = result[1] * result[1] + *result * *result + result[2] * result[2]; if ( v24 == 0.0 ) { v10 = v4; v11 = v3; v12 = v10; v25 = v11; } else { v13 = LODWORD(v24) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v24) >> 23) - 127) & 1 ) v13 |= (unsigned int)sub_800000; v25 = v4 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + (v13 >> 16)) | (((signed __int16)((signed __int16)((LODWORD(v24) >> 23) - 127) >> 1) + 127) << 23)); v14 = v4; v11 = v3; v12 = v14; } *result = *result * v25; result[1] = result[1] * v25; result[2] = v25 * result[2]; v15 = (float *)((char *)result + a3); v26 = v15[1] * v15[1] + *v15 * *v15 + v15[2] * v15[2]; if ( v26 == 0.0 ) { v27 = v11; } else { v16 = LODWORD(v26) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v26) >> 23) - 127) & 1 ) v16 |= (unsigned int)sub_800000; v27 = v12 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + (v16 >> 16)) | (((signed __int16)((signed __int16)((LODWORD(v26) >> 23) - 127) >> 1) + 127) << 23)); } *v15 = *v15 * v27; v15[1] = v15[1] * v27; v15[2] = v27 * v15[2]; v17 = (float *)((char *)v15 + a3); v28 = v17[1] * v17[1] + *v17 * *v17 + v17[2] * v17[2]; if ( v28 == 0.0 ) { v29 = v11; } else { v18 = LODWORD(v28) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v28) >> 23) - 127) & 1 ) v18 |= (unsigned int)sub_800000; v29 = v12 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + (v18 >> 16)) | (((signed __int16)((signed __int16)((LODWORD(v28) >> 23) - 127) >> 1) + 127) << 23)); } *v17 = *v17 * v29; v17[1] = v17[1] * v29; v17[2] = v29 * v17[2]; v19 = (float *)((char *)v17 + a3); v30 = v19[1] * v19[1] + *v19 * *v19 + v19[2] * v19[2]; if ( v30 == 0.0 ) { v31 = v11; } else { v20 = LODWORD(v30) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v30) >> 23) - 127) & 1 ) v20 |= (unsigned int)sub_800000; v31 = v12 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + (v20 >> 16)) | (((signed __int16)((signed __int16)((LODWORD(v30) >> 23) - 127) >> 1) + 127) << 23)); } *v19 = *v19 * v31; v19[1] = v19[1] * v31; v19[2] = v31 * v19[2]; result = (float *)((char *)v19 + a3); if ( !--v7 ) break; v9 = v11; v4 = v12; v3 = v9; } v5 = a2; v6 = v23; } if ( v6 < v5 ) { result += 2; v21 = v5 - v6; do { v32 = *(result - 1) * *(result - 1) + *(result - 2) * *(result - 2) + *result * *result; if ( v32 == 0.0 ) { v33 = v11; } else { v22 = LODWORD(v32) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v32) >> 23) - 127) & 1 ) v22 |= (unsigned int)sub_800000; v33 = v12 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + (v22 >> 16)) | (((signed __int16)((signed __int16)((LODWORD(v32) >> 23) - 127) >> 1) + 127) << 23)); } *(result - 2) = *(result - 2) * v33; *(result - 1) = v33 * *(result - 1); *result = v33 * *result; result = (float *)((char *)result + a3); --v21; } while ( v21 ); } return result; } //----- (0087B3A0) -------------------------------------------------------- void __cdecl sub_87B3A0(int a1, float a2, int a3, int a4) { double v4; // st7 unsigned int v5; // edi int v6; // eax int v7; // ecx int v8; // esi unsigned int v9; // edx double v10; // st6 float v11; // ST0C_4 float v12; // ST10_4 float v13; // ST14_4 float v14; // ST0C_4 float v15; // ST10_4 float v16; // ST14_4 float v17; // ST0C_4 float v18; // ST10_4 float v19; // ST14_4 float v20; // ST0C_4 float v21; // ST10_4 float v22; // ST14_4 float *v23; // edx int v24; // ecx int v25; // eax int v26; // ebx double v27; // st6 float v28; // ST0C_4 float v29; // ST10_4 float v30; // ST14_4 v4 = a2; v5 = 0; if ( a4 >= 4 ) { v6 = a1 + 20; v7 = a3 + 32; v8 = a3 - a1; v9 = ((unsigned int)(a4 - 4) >> 2) + 1; v5 = 4 * v9; do { v6 += 48; v10 = *(float *)(v7 - 32) * v4; v7 += 48; --v9; v11 = v10; v12 = *(float *)(v7 - 76) * v4; v13 = *(float *)(v7 - 72) * v4; *(float *)(v6 - 68) = v11 + *(float *)(v6 - 68); *(float *)(v6 - 64) = *(float *)(v6 - 64) + v12; *(float *)(v6 - 60) = v13 + *(float *)(v6 - 60); v14 = *(float *)(v7 - 68) * v4; v15 = *(float *)(v8 + v6 - 52) * v4; v16 = v4 * *(float *)(v8 + v6 - 48); *(float *)(v6 - 56) = *(float *)(v6 - 56) + v14; *(float *)(v6 - 52) = *(float *)(v6 - 52) + v15; *(float *)(v6 - 48) = *(float *)(v6 - 48) + v16; v17 = *(float *)(v7 - 56) * v4; v18 = *(float *)(v7 - 52) * v4; v19 = *(float *)(v7 - 48) * v4; *(float *)(v6 - 44) = *(float *)(v6 - 44) + v17; *(float *)(v6 - 40) = *(float *)(v6 - 40) + v18; *(float *)(v6 - 36) = v19 + *(float *)(v6 - 36); v20 = *(float *)(v7 - 44) * v4; v21 = *(float *)(v7 - 40) * v4; v22 = *(float *)(v7 - 36) * v4; *(float *)(v6 - 32) = *(float *)(v6 - 32) + v20; *(float *)(v6 - 28) = *(float *)(v6 - 28) + v21; *(float *)(v6 - 24) = *(float *)(v6 - 24) + v22; } while ( v9 ); } if ( v5 < a4 ) { v23 = (float *)(12 * v5 + a3); v24 = a3 - a1; v25 = 12 * v5 + a1 + 8; v26 = a4 - v5; do { v27 = *v23; v23 += 3; v25 += 12; --v26; v28 = v27 * v4; v29 = *(float *)(v24 + v25 - 16) * v4; v30 = *(float *)(v24 + v25 - 12) * v4; *(float *)(v25 - 20) = *(float *)(v25 - 20) + v28; *(float *)(v25 - 16) = *(float *)(v25 - 16) + v29; *(float *)(v25 - 12) = *(float *)(v25 - 12) + v30; } while ( v26 ); } } //----- (0087B520) -------------------------------------------------------- char __thiscall sub_87B520(_DWORD *this, int a2, float a3) { if ( (unsigned int)a2 >= this[3] ) return 0; *(float *)(this[4] + 4 * a2) = a3; return 1; } //----- (0087B540) -------------------------------------------------------- double __thiscall sub_87B540(_DWORD *this, unsigned int a2) { double result; // st7 if ( a2 >= this[3] ) result = 0.0; else result = *(float *)(this[4] + 4 * a2); return result; } //----- (0087B560) -------------------------------------------------------- void __thiscall sub_87B560(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi unsigned int v4; // eax v3 = this; sub_868EF0(this, a2, a3); if ( v3[4] && v3[3] ) { *(_DWORD *)(a2 + 12) = v3[3]; *(_DWORD *)(a2 + 16) = operator new(4 * v3[3]); v4 = 0; if ( v3[3] ) { do { *(float *)(*(_DWORD *)(a2 + 16) + 4 * v4) = *(float *)(v3[4] + 4 * v4); ++v4; } while ( v4 < v3[3] ); } } else { *(_DWORD *)(a2 + 16) = 0; *(_DWORD *)(a2 + 12) = 0; } } //----- (0087B5E0) -------------------------------------------------------- char __thiscall sub_87B5E0(_DWORD *this, int a2) { unsigned int v3; // esi int v4; // eax unsigned int v5; // edx float *v6; // ecx int v7; // edi if ( !a2 ) return 0; v3 = this[3]; if ( v3 != *(_DWORD *)(a2 + 12) ) return 0; v4 = this[4]; if ( v4 ) { if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( v4 ) { LABEL_9: v5 = 0; if ( v3 ) { v6 = *(float **)(a2 + 16); v7 = v4 - (_DWORD)v6; while ( *v6 == *(float *)((char *)v6 + v7) ) { ++v5; ++v6; if ( v5 >= v3 ) return 1; } return 0; } return 1; } } if ( !*(_DWORD *)(a2 + 16) ) { if ( !v4 ) return 1; goto LABEL_9; } return 0; } //----- (0087B650) -------------------------------------------------------- char *sub_87B650() { return dword_BA4A34; } //----- (0087B660) -------------------------------------------------------- _DWORD *__thiscall sub_87B660(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiFloatsExtraData::`vftable'; v4[4] = 0; v4[3] = 0; sub_87B560(v2, (int)v4, a2); result = v4; } else { sub_87B560(v2, 0, a2); result = 0; } return result; } // A2615C: using guessed type void *NiFloatsExtraData::`vftable'; //----- (0087B700) -------------------------------------------------------- _DWORD *__thiscall sub_87B700(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 4); *(_DWORD *)this = &NiFloatsExtraData::`vftable'; operator delete(v3); v2[4] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2615C: using guessed type void *NiFloatsExtraData::`vftable'; //----- (0087B740) -------------------------------------------------------- int __thiscall sub_87B740(int *this, size_t a2) { size_t v2; // ebx int *v3; // esi void (__cdecl *v4)(int, int *, signed int, size_t *, signed int); // edx int v5; // ST04_4 int result; // eax void *v7; // eax int v8; // ST08_4 void *v9; // ST04_4 int (__cdecl *v10)(int, void *, int, size_t *, signed int); // eax int v11; // ST00_4 v2 = a2; v3 = this; sub_868F80(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, size_t *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; v4(v5, v3 + 3, 4, &a2, 1); result = v3[3]; if ( v3[3] ) { v7 = operator new(4 * result); v8 = 4 * v3[3]; v3[4] = (int)v7; v9 = v7; v10 = *(int (__cdecl **)(int, void *, int, size_t *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); a2 = 4; result = v10(v11, v9, v8, &a2, 1); } else { v3[4] = 0; } return result; } //----- (0087B7D0) -------------------------------------------------------- unsigned int __thiscall sub_87B7D0(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi unsigned int result; // eax bool v9; // zf char *v10; // eax unsigned int v11; // edi char *v12; // ebx _DWORD *v13; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v13 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4A34); v5 = v2[3]; a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiSize", v3[3]); v7 = v2[3]; a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); result = sub_823870(v2, v7, &a2); v9 = v3[3] == 0; a2 = 0; if ( !v9 ) { while ( 1 ) { v10 = sub_8786B0((int)"m_pfValue[i]", *(float *)(v3[4] + 4 * (_DWORD)a2)); v11 = v2[3]; v12 = v10; if ( v11 < v2[2] || (sub_8237A0(v2, v11 + v2[5]), v11 < v2[2]) ) { if ( v11 < v2[3] ) { if ( v12 ) { if ( !*(_DWORD *)(v2[1] + 4 * v11) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v11) ) { --v2[4]; } } else { v2[3] = v11 + 1; if ( v12 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v11) = v12; } result = (unsigned int)(a2 + 1); a2 = (char *)result; if ( result >= v13[3] ) break; v3 = v13; } } return result; } //----- (0087B8F0) -------------------------------------------------------- int __thiscall sub_87B8F0(_DWORD *this, int a2, int a3, int a4, int a5) { int result; // eax this[3] = a2; result = a4; this[4] = a3; this[5] = a4; this[6] = a5; return result; } //----- (0087B910) -------------------------------------------------------- int __thiscall sub_87B910(const char **this, _DWORD *a2) { const char **v2; // esi v2 = this; sub_868DB0(this, a2); return sub_8609B0((char *)v2 + 12, (signed int)a2); } //----- (0087B930) -------------------------------------------------------- char *sub_87B930() { return dword_BA4A3C; } //----- (0087B940) -------------------------------------------------------- int __thiscall sub_87B940(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x1Cu); v4 = (int)v3; if ( v3 ) { sub_868D00(v3); *(_DWORD *)v4 = &NiColorExtraData::`vftable'; *(float *)(v4 + 12) = 0.0; *(float *)(v4 + 16) = 0.0; *(float *)(v4 + 20) = 0.0; *(float *)(v4 + 24) = 0.0; *(_DWORD *)(v4 + 12) = dword_ABD508; *(_DWORD *)(v4 + 16) = dword_ABD50C; *(_DWORD *)(v4 + 20) = dword_ABD510; *(_DWORD *)(v4 + 24) = dword_ABD514; } else { v4 = 0; } sub_868EF0(v2, v4, a2); *(_DWORD *)(v4 + 12) = v2[3]; *(_DWORD *)(v4 + 16) = v2[4]; *(_DWORD *)(v4 + 20) = v2[5]; *(_DWORD *)(v4 + 24) = v2[6]; return v4; } // A261CC: using guessed type void *NiColorExtraData::`vftable'; // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; //----- (0087B9D0) -------------------------------------------------------- float *sub_87B9D0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x1Cu); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *(_DWORD *)v1 = &NiColorExtraData::`vftable'; v1[3] = 0.0; v1[4] = 0.0; v1[5] = 0.0; v1[6] = 0.0; *((_DWORD *)v1 + 3) = dword_ABD508; *((_DWORD *)v1 + 4) = dword_ABD50C; *((_DWORD *)v1 + 5) = dword_ABD510; *((_DWORD *)v1 + 6) = dword_ABD514; return v1; } // A261CC: using guessed type void *NiColorExtraData::`vftable'; // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; //----- (0087BA30) -------------------------------------------------------- int __thiscall sub_87BA30(int *this, size_t a2) { int *v2; // esi int result; // eax float v4; // [esp+8h] [ebp-Ch] float v5; // [esp+Ch] [ebp-8h] float v6; // [esp+10h] [ebp-4h] v2 = this; sub_868F80(this, a2); if ( *(_DWORD *)(a2 + 28) >= 0x500000Eu ) return sub_8752B0((char *)v2 + 12, a2); v4 = 0.0; v5 = 0.0; v6 = 0.0; result = sub_8608D0((char *)&v4, a2); *((float *)v2 + 3) = v4; *((float *)v2 + 4) = v5; *((float *)v2 + 5) = v6; *((float *)v2 + 6) = 1.0; return result; } //----- (0087BA90) -------------------------------------------------------- void *__thiscall sub_87BA90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiColorExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A261CC: using guessed type void *NiColorExtraData::`vftable'; //----- (0087BAC0) -------------------------------------------------------- bool __thiscall sub_87BAC0(float *this, int a2) { bool result; // al if ( a2 ) result = (unsigned __int8)sub_883690(this + 3, (float *)(a2 + 12)) == 0; else result = 0; return result; } //----- (0087BAF0) -------------------------------------------------------- unsigned int __thiscall sub_87BAF0(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4A3C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_860870(v3 + 3, (int)"Color = "); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0087BB70) -------------------------------------------------------- int __cdecl sub_87BB70(int a1, int a2, float a3, float a4, int a5, int a6) { double v6; // st7 int v7; // ecx double v8; // st6 int result; // eax unsigned int v10; // edi unsigned int v11; // esi int v12; // ecx int v13; // eax unsigned int v14; // edx int v15; // [esp+1Ch] [ebp+1Ch] int v16; // [esp+1Ch] [ebp+1Ch] v6 = a4; v7 = a5; v8 = a3; result = a1; v10 = a6; v11 = 0; if ( a6 >= 4 ) { v12 = a5 + 8; v13 = a1 + 4; v14 = ((unsigned int)(a6 - 4) >> 2) + 1; v11 = 4 * v14; do { v15 = *(signed __int16 *)(v13 - 4); v13 += 8; v12 += 16; --v14; *(float *)(v12 - 24) = (double)v15 / 32767.0 * v6 + v8; *(float *)(v12 - 20) = (double)*(signed __int16 *)(v13 - 10) / 32767.0 * v6 + v8; *(float *)(v12 - 16) = (double)*(signed __int16 *)(v13 - 8) / 32767.0 * v6 + v8; *(float *)(v12 - 12) = (double)*(signed __int16 *)(v13 - 6) / 32767.0 * v6 + v8; } while ( v14 ); v7 = a5; result = a1; } for ( ; v11 < v10; *(float *)(v7 + 4 * v11 - 4) = (double)v16 / 32767.0 * v6 + v8 ) v16 = *(signed __int16 *)(result + 2 * v11++); return result; } //----- (0087BC30) -------------------------------------------------------- float *__cdecl sub_87BC30(unsigned __int16 a1, float *a2, float *a3, float *a4) { float *result; // eax int v5; // edx float *v6; // ebx double v7; // st6 double v8; // st5 double v9; // st7 double v10; // st6 double v11; // st5 double v12; // st7 double v13; // st5 double v14; // st6 result = (float *)a1; v5 = a1; if ( a1 ) { result = a2; v6 = a3; do { v7 = *result * a4[3]; v8 = result[1] * a4[4]; v9 = result[2] * a4[5]; *v6 = result[2] * a4[2] + *result * *a4 + result[1] * a4[1]; v10 = v7 + v8; v11 = v9; v12 = *result * a4[6] + result[1] * a4[7]; v13 = v10 + v11; v14 = result[2] * a4[8]; v6[1] = v13; result += 3; v6 += 3; *(v6 - 1) = v12 + v14; --v5; } while ( v5 ); } return result; } //----- (0087BCB0) -------------------------------------------------------- float *__cdecl sub_87BCB0(unsigned __int16 a1, float *a2, float *a3, float *a4) { float *result; // eax float v5; // ST10_4 int v6; // edx float *v7; // ebx double v8; // st7 double v9; // st5 double v10; // st6 float v11; // [esp+0h] [ebp-48h] float v12; // [esp+4h] [ebp-44h] float v13; // [esp+14h] [ebp-34h] float v14; // [esp+20h] [ebp-28h] float v15; // [esp+24h] [ebp-24h] float v16; // [esp+28h] [ebp-20h] float v17; // [esp+2Ch] [ebp-1Ch] float v18; // [esp+30h] [ebp-18h] float v19; // [esp+34h] [ebp-14h] float v20; // [esp+38h] [ebp-10h] float v21; // [esp+3Ch] [ebp-Ch] float v22; // [esp+40h] [ebp-8h] result = a4; v12 = a4[9]; v13 = a4[10]; v11 = a4[11]; v5 = a4[12]; v14 = v5 * *a4; v15 = a4[1] * v5; v16 = a4[2] * v5; v17 = a4[3] * v5; v18 = a4[4] * v5; v19 = a4[5] * v5; v20 = a4[6] * v5; v21 = a4[7] * v5; v22 = v5 * a4[8]; v6 = a1; if ( a1 ) { result = a2; v7 = a3; do { v8 = v22 * result[2]; v9 = v20 * *result + v21 * result[1]; v10 = result[2] * v19 + *result * v17 + result[1] * v18 + v13; *v7 = result[2] * v16 + *result * v14 + result[1] * v15 + v12; v7[1] = v10; result += 3; v7 += 3; *(v7 - 1) = v8 + v9 + v11; --v6; } while ( v6 ); } return result; } //----- (0087BEC8) -------------------------------------------------------- signed int sub_87BEC8() { return 1; } //----- (0087BECE) -------------------------------------------------------- #error "87BF6C: positive sp value has been found (funcsize=7)" //----- (0087BF80) -------------------------------------------------------- int __cdecl sub_87BF80(unsigned __int16 a1, float *a2, float *a3, float *a4) { int result; // eax unsigned int v5; // [esp+0h] [ebp-8h] result = (int)a4; v5 = 0; while ( v5 < a1 ) { *a3 = (*a4 * *a2 + a2[1] * a4[1] + a2[2] * a4[2]) * a4[12] + a4[9]; a3[1] = (a4[3] * *a2 + a2[1] * a4[4] + a2[2] * a4[5]) * a4[12] + a4[10]; a3[2] = (a4[6] * *a2 + a2[1] * a4[7] + a2[2] * a4[8]) * a4[12] + a4[11]; ++v5; a2 += 3; result = (int)(a3 + 3); a3 += 3; } return result; } //----- (0087C070) -------------------------------------------------------- int __cdecl sub_87C070(unsigned __int16 a1, float *a2, float *a3, float *a4) { int result; // eax unsigned int v5; // [esp+0h] [ebp-8h] result = (int)a4; v5 = 0; while ( v5 < a1 ) { *a3 = *a4 * *a2 + a2[1] * a4[1] + a2[2] * a4[2]; a3[1] = a4[3] * *a2 + a2[1] * a4[4] + a2[2] * a4[5]; a3[2] = a4[6] * *a2 + a2[1] * a4[7] + a2[2] * a4[8]; ++v5; a2 += 3; result = (int)(a3 + 3); a3 += 3; } return result; } //----- (0087C140) -------------------------------------------------------- int (__cdecl *__cdecl sub_87C140(int (__cdecl *a1)(__int16, int, int, int)))(__int16, int, int, int) { int (__cdecl *result)(__int16, int, int, int); // eax result = a1; off_ABEFD0[0] = a1; return result; } // ABEFD0: using guessed type int (__cdecl *off_ABEFD0[2])(__int16, int, int, int); //----- (0087C150) -------------------------------------------------------- int (__cdecl *__cdecl sub_87C150(int (__cdecl *a1)(__int16, int, int, int)))(__int16, int, int, int) { int (__cdecl *result)(__int16, int, int, int); // eax result = a1; off_ABEFD4 = a1; return result; } // ABEFD4: using guessed type int (__cdecl *off_ABEFD4)(__int16, int, int, int); //----- (0087C160) -------------------------------------------------------- int (__cdecl *__thiscall sub_87C160(void *this))(__int16, int, int, int) { int (__cdecl *result)(__int16, int, int, int); // eax if ( !byte_BA4A48 ) ((void (__cdecl *)(void *))loc_87BDD0)(this); sub_87C150((int (__cdecl *)(__int16, int, int, int))sub_87BF80); result = sub_87C140((int (__cdecl *)(__int16, int, int, int))sub_87C070); if ( dword_BA4A44 > 0 && dword_BA4A44 <= 6 ) { sub_87C150((int (__cdecl *)(__int16, int, int, int))sub_87BCB0); result = sub_87C140((int (__cdecl *)(__int16, int, int, int))sub_87BC30); } return result; } // BA4A44: using guessed type int dword_BA4A44; // BA4A48: using guessed type char byte_BA4A48; //----- (0087C1D0) -------------------------------------------------------- _DWORD *sub_87C1D0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_8713E0(v0); *v1 = &NiTriStrips::`vftable'; return v1; } // A262A4: using guessed type void *NiTriStrips::`vftable'; //----- (0087C200) -------------------------------------------------------- int __thiscall sub_87C200(int *this, signed int a2) { return sub_871420(this, a2); } //----- (0087C210) -------------------------------------------------------- int __thiscall sub_87C210(const char **this, signed int a2) { return sub_871430(this, a2); } //----- (0087C220) -------------------------------------------------------- char __thiscall sub_87C220(_DWORD *this, int a2) { return sub_871440(this, a2); } //----- (0087C230) -------------------------------------------------------- char *sub_87C230() { return dword_BA4A50; } //----- (0087C240) -------------------------------------------------------- void *__thiscall sub_87C240(void *this, char a2) { void *v2; // esi v2 = this; sub_871400(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087C270) -------------------------------------------------------- _DWORD *__thiscall sub_87C270(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_8713E0(v3); *v4 = &NiTriStrips::`vftable'; sub_88A6A0(v2, (int)v4, a2); result = v4; } else { sub_88A6A0(v2, 0, a2); result = 0; } return result; } // A262A4: using guessed type void *NiTriStrips::`vftable'; //----- (0087C2D0) -------------------------------------------------------- _DWORD *__thiscall sub_87C2D0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { _DWORD *v5; // ecx int v6; // esi _DWORD *result; // eax unsigned __int16 v8; // [esp+4h] [ebp-8h] unsigned __int16 v9; // [esp+8h] [ebp-4h] v5 = (_DWORD *)this[46]; v6 = v5[8]; (*(void (__stdcall **)(int, int *, unsigned __int16 *, unsigned __int16 *))(*v5 + 80))(a2, &a2, &v9, &v8); *a3 = v6 + 12 * (unsigned __int16)a2; *a4 = v6 + 12 * v9; result = a5; *a5 = v6 + 12 * v8; return result; } //----- (0087C330) -------------------------------------------------------- int __thiscall sub_87C330(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; sub_86E250(this, a2); result = 1; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)a2 + 316))(a2, v2); return result; } //----- (0087C370) -------------------------------------------------------- unsigned int __thiscall sub_87C370(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_871490(this, a2); v3 = sub_8784D0(*(int *)dword_BA4A50); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0087C3C0) -------------------------------------------------------- int __thiscall sub_87C3C0(float *this) { float *v1; // esi int result; // eax int v3; // edx v1 = this; sub_85D510(this); result = dword_BA45C0; *((_DWORD *)v1 + 9) = dword_BA45C0; *((_DWORD *)v1 + 10) = dword_BA45C4; v3 = dword_BA45C8; v1[12] = 1.0; *((_DWORD *)v1 + 11) = v3; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0087C3F0) -------------------------------------------------------- float __userpurge sub_87C3F0@(float *a1@, int a2@, float *a3) { float *v3; // esi float *v4; // eax float *v5; // eax float v6; // ecx double v7; // st7 float result; // eax char v9; // [esp+Ch] [ebp-50h] float v10; // [esp+18h] [ebp-44h] float v11; // [esp+1Ch] [ebp-40h] float v12; // [esp+20h] [ebp-3Ch] float v13; // [esp+24h] [ebp-38h] float v14; // [esp+28h] [ebp-34h] float v15; // [esp+2Ch] [ebp-30h] float v16; // [esp+30h] [ebp-2Ch] char v17; // [esp+34h] [ebp-28h] v16 = *(float *)&a1; v3 = sub_85DCC0(a1, (float *)&v17); v4 = (float *)LODWORD(v16); qmemcpy(a3, v3, 0x24u); a3[12] = 1.0 / *(float *)(LODWORD(v16) + 48); v10 = -v4[9]; v11 = -v4[10]; v12 = -v4[11]; v5 = sub_85DA90(a3, (float *)&v9, &v10); v16 = a3[12]; v13 = *v5 * v16; v14 = v5[1] * v16; v6 = v14; v7 = v16 * v5[2]; result = v13; a3[9] = v13; a3[10] = v6; v15 = v7; a3[11] = v15; return result; } //----- (0087C4A0) -------------------------------------------------------- BOOL __thiscall sub_87C4A0(float *this, float *a2) { float *v2; // esi v2 = this; return !(unsigned __int8)sub_85D560(this, a2) || a2[9] != v2[9] || a2[10] != v2[10] || a2[11] != v2[11] || a2[12] != v2[12]; } //----- (0087C510) -------------------------------------------------------- int __thiscall sub_87C510(char *this, int a2) { signed int v2; // edi char *v3; // esi int v4; // edi int (__cdecl *v5)(int, char *, signed int, int *, signed int); // ecx v2 = a2; v3 = this; sub_85EA80(this, a2); sub_8608D0(v3 + 36, v2); v4 = *(_DWORD *)(v2 + 352); v5 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); a2 = 4; return v5(v4, v3 + 48, 4, &a2, 1); } //----- (0087C560) -------------------------------------------------------- int __thiscall sub_87C560(float *this, int a2) { signed int v2; // edi float *v3; // esi int v4; // edi int (__cdecl *v5)(int, float *, signed int, int *, signed int); // ecx v2 = a2; v3 = this; sub_85EAE0(this, a2); sub_860940((char *)v3 + 36, v2); v4 = *(_DWORD *)(v2 + 356); v5 = *(int (__cdecl **)(int, float *, signed int, int *, signed int))(v4 + 8); a2 = 4; return v5(v4, v3 + 12, 4, &a2, 1); } //----- (0087C5B0) -------------------------------------------------------- int __thiscall sub_87C5B0(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // esi int result; // eax v3 = this; sub_859240(this, a2, a3); *(_WORD *)(a2 + 232) = v3[116]; *(_DWORD *)(a2 + 236) = *((_DWORD *)v3 + 59); return result; } //----- (0087C5F0) -------------------------------------------------------- _DWORD *__thiscall sub_87C5F0(_DWORD *this, _DWORD *a2) { return sub_85A550(this, a2); } //----- (0087C600) -------------------------------------------------------- float *__thiscall sub_87C600(float *this) { float *v1; // esi v1 = this; sub_85A1C0(this, 0); *(_DWORD *)v1 = &NiSwitchNode::`vftable'; *((_DWORD *)v1 + 62) = &NiTArray::`vftable'; *((_DWORD *)v1 + 64) = 1; *((_DWORD *)v1 + 67) = 1; v1[65] = 0.0; v1[66] = 0.0; *((_DWORD *)v1 + 63) = operator new(4u); v1[60] = 0.0; *((_WORD *)v1 + 116) = 1; *((_DWORD *)v1 + 61) = 1; *((_BYTE *)v1 + 272) = 1; v1[59] = -6.8056469e38/*NaN*/; return v1; } // A21C0C: using guessed type void *NiTArray::`vftable'; // A2633C: using guessed type void *NiSwitchNode::`vftable'; //----- (0087C690) -------------------------------------------------------- char *sub_87C690() { return dword_BA4A58; } //----- (0087C6A0) -------------------------------------------------------- _DWORD *__thiscall sub_87C6A0(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // esi int v4; // ecx unsigned int v5; // eax _DWORD *v6; // ecx int v7; // ecx int v8; // edx int v9; // ecx signed int v10; // eax v3 = this; v4 = this[47]; v5 = 0; v3[61] = 1; if ( v4 ) { v6 = (_DWORD *)v3[45]; while ( a3 != *v6 ) { ++v5; ++v6; if ( v5 >= v3[47] ) goto LABEL_11; } if ( v5 < v3[65] ) { v7 = v3[63]; v8 = *(_DWORD *)(v7 + 4 * v5); *(_DWORD *)(v7 + 4 * v5) = 0; if ( v8 ) --v3[66]; v9 = v3[65] - 1; if ( v5 == v9 ) v3[65] = v9; } } LABEL_11: sub_859440(v3, a2, a3); v10 = v3[59]; if ( v10 > -1 && (v10 >= v3[47] || !*(_DWORD *)(v3[45] + 4 * v10)) ) v3[59] = -1; return a2; } //----- (0087C750) -------------------------------------------------------- _DWORD *__thiscall sub_87C750(_DWORD *this, _DWORD *a2, unsigned int a3) { _DWORD *v3; // esi int v4; // ecx int v5; // edx int v6; // ecx signed int v7; // eax v3 = this; this[61] = 1; if ( a3 < this[47] && a3 < this[65] ) { v4 = this[63]; v5 = *(_DWORD *)(v4 + 4 * a3); *(_DWORD *)(v4 + 4 * a3) = 0; if ( v5 ) --v3[66]; v6 = v3[65] - 1; if ( a3 == v6 ) v3[65] = v6; } sub_8593A0(v3, a2, a3); v7 = v3[59]; if ( v7 > -1 && (v7 >= v3[47] || !*(_DWORD *)(v3[45] + 4 * v7)) ) v3[59] = -1; return a2; } //----- (0087C7E0) -------------------------------------------------------- int __thiscall sub_87C7E0(float *this, int a2) { float *v2; // esi int result; // eax _BYTE *v4; // edi v2 = this; result = *((_DWORD *)this + 59); if ( result >= 0 ) { v4 = *(_BYTE **)(*((_DWORD *)this + 45) + 4 * result); if ( v4 ) { if ( *(_DWORD *)(*((_DWORD *)this + 63) + 4 * result) != *((_DWORD *)this + 61) ) { sub_823870((_DWORD *)this + 62, result, (_DWORD *)this + 61); (*(void (__thiscall **)(_BYTE *, float, _DWORD))(*(_DWORD *)v4 + 80))( v4, v2[60], *((unsigned __int8 *)v2 + 272)); } result = sub_85C0A0(v4, a2); } } return result; } //----- (0087C850) -------------------------------------------------------- void __thiscall sub_87C850(int this) { int v1; // eax _DWORD *v2; // eax if ( *(_BYTE *)(this + 232) & 1 ) { v1 = *(_DWORD *)(this + 236); if ( v1 >= 0 && (v2 = *(_DWORD **)(*(_DWORD *)(this + 180) + 4 * v1)) != 0 ) { *(_DWORD *)(this + 36) = v2[9]; *(_DWORD *)(this + 40) = v2[10]; *(_DWORD *)(this + 44) = v2[11]; *(_DWORD *)(this + 48) = v2[12]; } else { *(float *)(this + 48) = 0.0; } } else { sub_858FB0(this); } } //----- (0087C8A0) -------------------------------------------------------- float __userpurge sub_87C8A0@(int a1@, int a2@) { int v2; // esi unsigned int v3; // edi int v4; // ebx int v5; // eax int v6; // ecx char v8; // [esp+14h] [ebp-38h] v2 = a1; v3 = 0; if ( *(_DWORD *)(a1 + 188) ) { do { v4 = *(_DWORD *)(*(_DWORD *)(v2 + 180) + 4 * v3); if ( v4 ) { v5 = *(_DWORD *)(v2 + 244); v6 = *(_DWORD *)(v2 + 252); if ( *(_DWORD *)(v6 + 4 * v3) != v5 ) { if ( v3 < *(_DWORD *)(v2 + 256) ) { if ( v3 < *(_DWORD *)(v2 + 260) ) { if ( v5 ) { if ( !*(_DWORD *)(v6 + 4 * v3) ) ++*(_DWORD *)(v2 + 264); } else if ( *(_DWORD *)(v6 + 4 * v3) ) { --*(_DWORD *)(v2 + 264); } } else { *(_DWORD *)(v2 + 260) = v3 + 1; if ( *(_DWORD *)(v2 + 244) ) ++*(_DWORD *)(v2 + 264); } *(_DWORD *)(*(_DWORD *)(v2 + 252) + 4 * v3) = *(_DWORD *)(v2 + 244); } (*(void (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v4 + 80))( v4, *(float *)(v2 + 240), *(unsigned __int8 *)(v2 + 272)); } (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 64))(v4); } ++v3; } while ( v3 < *(_DWORD *)(v2 + 188) ); } sub_87C3F0((float *)(v2 + 104), a2, (float *)&v8); return sub_86BD60((float *)(v2 + 216), (float *)(v2 + 36), (float *)&v8); } //----- (0087C9A0) -------------------------------------------------------- float *__thiscall sub_87C9A0(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x114u); if ( v3 ) v4 = sub_87C600(v3); else v4 = 0; sub_859240(v2, (int)v4, a2); *((_WORD *)v4 + 116) = *((_WORD *)v2 + 116); v4[59] = v2[59]; return v4; } //----- (0087CA00) -------------------------------------------------------- float *sub_87CA00() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x114u); if ( v0 ) result = sub_87C600(v0); else result = 0; return result; } //----- (0087CA20) -------------------------------------------------------- bool __thiscall sub_87CA20(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_859FB0(this, a2) && v2[59] == *(_DWORD *)(a2 + 236) && !((*((_BYTE *)v2 + 232) ^ *(_BYTE *)(a2 + 232)) & 1); } //----- (0087CA70) -------------------------------------------------------- _DWORD *__thiscall sub_87CA70(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 63); *((_DWORD *)this + 62) = &NiTArray::`vftable'; operator delete(v3); sub_85A210(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A21C0C: using guessed type void *NiTArray::`vftable'; //----- (0087CAB0) -------------------------------------------------------- unsigned int __thiscall sub_87CAB0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *v3; // esi unsigned int v4; // edi v3 = this; sub_85A860(this, a2, a3); v3[61] = 1; v4 = v3[65]; a3 = 0; if ( v4 >= v3[64] ) sub_8237A0(v3 + 62, v4 + v3[67]); return sub_823870(v3 + 62, v4, &a3); } //----- (0087CB10) -------------------------------------------------------- _DWORD *__thiscall sub_87CB10(_DWORD *this, _DWORD *a2, unsigned int a3, _DWORD *a4) { _DWORD *v4; // ebx int v6; // [esp+Ch] [ebp-4h] v4 = this; this[61] = 1; v6 = 0; if ( a3 >= this[64] ) sub_8237A0(this + 62, a3 + this[67]); sub_823870(v4 + 62, a3, &v6); sub_85A930(v4, a2, a3, a4); return a2; } //----- (0087CB80) -------------------------------------------------------- void __thiscall sub_87CB80(int this, float a2, int a3) { _DWORD *v3; // esi bool v4; // zf int v5; // eax _DWORD *v6; // edi v3 = (_DWORD *)this; v4 = (*(_BYTE *)(this + 232) & 1) == 0; *(float *)(this + 240) = a2; *(_BYTE *)(this + 272) = a3; if ( v4 ) { sub_859510((float *)this, a2, a3); } else { ++*(_DWORD *)(this + 244); if ( (_BYTE)a3 ) sub_8592D0((_DWORD *)this, a2, 1); (*(void (__thiscall **)(_DWORD *))(*v3 + 100))(v3); v5 = v3[59]; if ( v5 >= 0 ) { v6 = *(_DWORD **)(v3[45] + 4 * v5); if ( v6 ) { (*(void (__thiscall **)(_DWORD *, _DWORD, int))(*v6 + 80))(v6, LODWORD(a2), a3); sub_823870(v3 + 62, v3[59], v3 + 61); v3[9] = v6[9]; v3[10] = v6[10]; v3[11] = v6[11]; v3[12] = v6[12]; } } } } //----- (0087CC40) -------------------------------------------------------- void __thiscall sub_87CC40(int this, float a2) { _DWORD *v2; // esi bool v3; // zf unsigned __int8 v4; // al int v5; // eax int *v6; // edi __int16 v7; // ax int v8; // eax void (__thiscall *v9)(int *, _DWORD); // edx v2 = (_DWORD *)this; v3 = (*(_BYTE *)(this + 232) & 1) == 0; *(float *)(this + 240) = a2; if ( v3 ) { sub_8595C0(this, a2); } else { v4 = *(_BYTE *)(this + 28); ++*(_DWORD *)(this + 244); sub_8592D0((_DWORD *)this, a2, (v4 >> 3) & 1); (*(void (__thiscall **)(_DWORD *))(*v2 + 100))(v2); v5 = v2[59]; if ( v5 >= 0 ) { v6 = *(int **)(v2[45] + 4 * v5); if ( v6 ) { v7 = *((_WORD *)v6 + 14); if ( ((unsigned __int8)*((_WORD *)v6 + 14) >> 1) & 1 ) { v3 = (((unsigned __int8)v7 >> 4) & 1) == 0; v8 = *v6; if ( v3 ) v9 = *(void (__thiscall **)(int *, _DWORD))(v8 + 84); else v9 = *(void (__thiscall **)(int *, _DWORD))(v8 + 88); v9(v6, LODWORD(a2)); } sub_823870(v2 + 62, v2[59], v2 + 61); v2[9] = v6[9]; v2[10] = v6[10]; v2[11] = v6[11]; v2[12] = v6[12]; } } } } //----- (0087CD10) -------------------------------------------------------- char __thiscall sub_87CD10(int this, float a2) { _DWORD *v2; // esi bool v3; // zf unsigned __int8 v4; // al int v5; // eax int v6; // edi v2 = (_DWORD *)this; v3 = (*(_BYTE *)(this + 232) & 1) == 0; *(float *)(this + 240) = a2; if ( v3 ) { LOBYTE(v5) = sub_8596B0(this, a2); } else { v4 = *(_BYTE *)(this + 28); ++*(_DWORD *)(this + 244); sub_8592D0((_DWORD *)this, a2, (v4 >> 3) & 1); (*(void (__thiscall **)(_DWORD *))(*v2 + 100))(v2); v5 = v2[59]; if ( v5 >= 0 ) { v6 = *(_DWORD *)(v2[45] + 4 * v5); if ( v6 ) { if ( (*(_BYTE *)(v6 + 28) >> 1) & 1 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v6 + 88))(v6, LODWORD(a2)); sub_823870(v2 + 62, v2[59], v2 + 61); v2[9] = *(_DWORD *)(v6 + 36); v2[10] = *(_DWORD *)(v6 + 40); v2[11] = *(_DWORD *)(v6 + 44); v5 = *(_DWORD *)(v6 + 48); v2[12] = v5; } } } return v5; } //----- (0087CDD0) -------------------------------------------------------- int __thiscall sub_87CDD0(int this, float a2) { int v2; // esi int result; // eax int v4; // ecx v2 = this; if ( !(*(_BYTE *)(this + 232) & 1) ) return (int)sub_859740((_DWORD *)this, a2); if ( *(_DWORD *)(this + 236) >= 0 ) { sub_8592D0((_DWORD *)this, a2, 1); result = *(_DWORD *)(v2 + 236); v4 = *(_DWORD *)(*(_DWORD *)(v2 + 180) + 4 * result); if ( v4 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 60))(LODWORD(a2)); } return result; } //----- (0087CE30) -------------------------------------------------------- int __thiscall sub_87CE30(int *this, void **a2) { void **v2; // edi int *v3; // esi void (__cdecl *v4)(void *, int *, signed int, void ***, signed int); // edx void *v5; // ST00_4 _DWORD *v6; // edi int (__cdecl *v7)(_DWORD *, int *, signed int, void ***, signed int); // ecx v2 = a2; v3 = this; sub_858D60(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v4 = (void (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v5 = v2[88]; a2 = (void **)2; v4(v5, v3 + 58, 2, &a2, 1); } else { *((_WORD *)v3 + 116) = *((unsigned __int8 *)v2 + 413); } v6 = v2[88]; v7 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v6[1]; a2 = (void **)4; return v7(v6, v3 + 59, 4, &a2, 1); } //----- (0087CEC0) -------------------------------------------------------- int __thiscall sub_87CEC0(const char **this, unsigned int a2) { unsigned int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, unsigned int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, const char **, signed int, unsigned int *, signed int); // edx v2 = a2; v3 = this; sub_859EE0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, unsigned int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 58, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, const char **, signed int, unsigned int *, signed int))(v7 + 8); a2 = 4; return v8(v7, v3 + 59, 4, &a2, 1); } //----- (0087CF20) -------------------------------------------------------- unsigned int __thiscall sub_87CF20(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_85A6D0(this, (_DWORD *)a2); v4 = sub_8784D0(*(int *)dword_BA4A58); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878630((int)"m_iIndex", v3[59]); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); a2 = v3[58] & 1; v8 = sub_878510((int)"m_bUpdateOnlyActive", a2); v9 = v2[3]; *(_DWORD *)&a2 = v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0087CFF0) -------------------------------------------------------- BOOL __cdecl sub_87CFF0(float a1, int a2, int a3, int a4, int a5) { float v5; // ST00_4 float v6; // ST04_4 float v7; // ST08_4 double v8; // st7 double v9; // st5 double v10; // st6 double v11; // st5 double v12; // st6 double v13; // st7 double v14; // st7 double v15; // st6 float v17; // [esp+0h] [ebp-10h] float v18; // [esp+4h] [ebp-Ch] float v19; // [esp+8h] [ebp-8h] float v20; // [esp+Ch] [ebp-4h] float v21; // [esp+20h] [ebp+10h] int v22; // [esp+20h] [ebp+10h] float v23; // [esp+24h] [ebp+14h] int v24; // [esp+28h] [ebp+18h] v5 = *(float *)a5 - *(float *)a3; v6 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v7 = *(float *)(a5 + 8) - *(float *)(a3 + 8); v8 = v5; v9 = v6; v10 = v7; v20 = v7 * v7 + v5 * v5 + v6 * v6; v17 = *(float *)a4 - *(float *)a2; v18 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v19 = *(float *)(a4 + 8) - *(float *)(a2 + 8); *(float *)&v24 = v18 * v18 + v17 * v17 + v19 * v19; v21 = *(float *)(a2 + 12) + *(float *)(a4 + 12); *(float *)&v22 = v21 * v21; if ( v20 <= 0.0 || (v11 = v10 * v19 + v9 * v18 + v8 * v17, v12 = v20, v23 = v11, v13 = v23, v23 > 0.0) ) { v14 = *(float *)&v24; goto LABEL_7; } if ( -a1 * v12 > v13 ) { v14 = a1 * (v12 * a1 + v13 + v13) + *(float *)&v24; LABEL_7: v15 = *(float *)&v22; return v15 >= v14; } v14 = *(float *)&v24 * v12 - v13 * v13; v15 = v12 * *(float *)&v22; return v15 >= v14; } //----- (0087D130) -------------------------------------------------------- char __cdecl sub_87D130(float a1, int a2, int a3, int a4, int a5, int a6, int a7, char a8, int a9, int a10) { float *v10; // edi float *v11; // ecx float *v12; // esi double v13; // st7 double v14; // st5 double v15; // st3 bool v16; // c0 bool v17; // c3 double v18; // st3 double v19; // st4 double v21; // st5 double v22; // st7 float v23; // ST20_4 float v24; // ST24_4 float v25; // ST28_4 float v26; // ST14_4 float v27; // ST18_4 float v28; // ST1C_4 float v29; // ST14_4 float v30; // ST18_4 double v31; // st7 float v32; // ST1C_4 float v33; // ST14_4 float v34; // ST18_4 float v35; // ST1C_4 float v36; // ST08_4 float v37; // ST0C_4 float v38; // ST10_4 float v39; // ST14_4 float v40; // ST18_4 float v41; // ST1C_4 float v42; // ST2C_4 float v43; // ST30_4 float v44; // ST34_4 float v45; // ST14_4 float v46; // ST18_4 float v47; // ST1C_4 float v48; // ST08_4 float v49; // ST0C_4 double v50; // st7 float v51; // ST10_4 double v52; // st7 float v53; // ST08_4 float v54; // ST0C_4 float v55; // ST10_4 float v56; // ST14_4 float v57; // ST18_4 float v58; // ST1C_4 float v59; // ST08_4 float v60; // ST0C_4 double v61; // st7 float v62; // ST10_4 float v63; // [esp+20h] [ebp-1Ch] float v64; // [esp+20h] [ebp-1Ch] float v65; // [esp+24h] [ebp-18h] float v66; // [esp+24h] [ebp-18h] float v67; // [esp+28h] [ebp-14h] float v68; // [esp+28h] [ebp-14h] float v69; // [esp+2Ch] [ebp-10h] float v70; // [esp+30h] [ebp-Ch] float v71; // [esp+34h] [ebp-8h] float v72; // [esp+38h] [ebp-4h] int v73; // [esp+48h] [ebp+Ch] float v74; // [esp+48h] [ebp+Ch] int v75; // [esp+48h] [ebp+Ch] float v76; // [esp+48h] [ebp+Ch] int v77; // [esp+4Ch] [ebp+10h] int v78; // [esp+50h] [ebp+14h] int v79; // [esp+54h] [ebp+18h] float v80; // [esp+54h] [ebp+18h] float v81; // [esp+54h] [ebp+18h] float v82; // [esp+54h] [ebp+18h] float v83; // [esp+54h] [ebp+18h] v10 = (float *)a3; v11 = (float *)a4; v12 = (float *)a2; v63 = *(float *)a5 - *(float *)a3; v65 = *(float *)(a5 + 4) - *(float *)(a3 + 4); v67 = *(float *)(a5 + 8) - *(float *)(a3 + 8); *(float *)&v77 = v67 * v67 + v65 * v65 + v63 * v63; v69 = *(float *)a4 - *(float *)a2; v70 = *(float *)(a4 + 4) - *(float *)(a2 + 4); v71 = *(float *)(a4 + 8) - *(float *)(a2 + 8); *(float *)&v73 = v70 * v70 + v69 * v69 + v71 * v71; *(float *)&v78 = *(float *)(a4 + 12) + v12[3]; v72 = *(float *)&v78 * *(float *)&v78; if ( *(float *)&v77 <= 0.0 ) { v52 = 0.0; goto LABEL_21; } v13 = *(float *)&v77; *(float *)&v79 = v67 * v71 + v63 * v69 + v70 * v65; v14 = *(float *)&v79; if ( *(float *)&v79 > 0.0 ) { v52 = 0.0; LABEL_21: if ( v72 >= (double)*(float *)&v73 ) { *(float *)a6 = v52; v53 = *v11 + *v12; v54 = v12[1] + v11[1]; v55 = v12[2] + v11[2]; v56 = v53 * 0.5; *(float *)a7 = v56; v57 = v54 * 0.5; *(float *)(a7 + 4) = v57; v58 = 0.5 * v55; *(float *)(a7 + 8) = v58; if ( a8 ) { *(float *)a9 = v69; *(float *)(a9 + 4) = v70; *(float *)(a9 + 8) = v71; sub_4430B0((float *)a9); v59 = -*(float *)a9; v60 = -*(float *)(a9 + 4); v61 = *(float *)(a9 + 8); *(float *)a10 = v59; *(float *)(a10 + 4) = v60; v62 = -v61; *(float *)(a10 + 8) = v62; } return 1; } return 0; } v15 = -a1 * v13; v16 = v15 < v14; v17 = v15 == v14; v18 = *(float *)&v73; if ( v16 || v17 ) { v19 = v72; } else { v19 = v72; if ( v72 < a1 * (v13 * a1 + v14 + v14) + v18 ) return 0; } v74 = v18 - v19; v21 = v14 * v14 - v13 * v74; v22 = v74; *(float *)&v75 = v21; if ( *(float *)&v75 < 0.0 ) return 0; if ( v22 > 0.0 ) { v76 = sqrt(*(float *)&v75); v80 = -((v76 + *(float *)&v79) / *(float *)&v77); *(float *)a6 = v80; if ( v80 >= 0.0 ) { if ( a1 < (double)v80 ) *(float *)a6 = a1; } else { *(float *)a6 = 0.0; } v81 = *(float *)a6; v33 = v63 * v81; v34 = v65 * v81; v35 = v81 * v67; v64 = v33 + v69; v66 = v34 + v70; v68 = v35 + v71; v82 = v12[3] / *(float *)&v78; v36 = v64 * v82; v37 = v66 * v82; v38 = v82 * v68; v83 = *(float *)a6; v39 = v83 * *v10; v40 = v83 * v10[1]; v41 = v83 * v10[2]; v42 = v39 + *v12; v43 = v40 + v12[1]; v44 = v12[2] + v41; v45 = v42 + v36; *(float *)a7 = v45; v46 = v43 + v37; *(float *)(a7 + 4) = v46; v47 = v44 + v38; *(float *)(a7 + 8) = v47; if ( a8 ) { *(float *)a9 = v64; *(float *)(a9 + 4) = v66; *(float *)(a9 + 8) = v68; sub_4430B0((float *)a9); v48 = -*(float *)a9; v49 = -*(float *)(a9 + 4); v50 = *(float *)(a9 + 8); *(float *)a10 = v48; *(float *)(a10 + 4) = v49; v51 = -v50; *(float *)(a10 + 8) = v51; } } else { *(float *)a6 = 0.0; v23 = *v11 + *v12; v24 = v12[1] + v11[1]; v25 = v12[2] + v11[2]; v26 = v23 * 0.5; *(float *)a7 = v26; v27 = v24 * 0.5; *(float *)(a7 + 4) = v27; v28 = 0.5 * v25; *(float *)(a7 + 8) = v28; if ( a8 ) { *(float *)a9 = v69; *(float *)(a9 + 4) = v70; *(float *)(a9 + 8) = v71; sub_4430B0((float *)a9); v29 = -*(float *)a9; v30 = -*(float *)(a9 + 4); v31 = *(float *)(a9 + 8); *(float *)a10 = v29; *(float *)(a10 + 4) = v30; v32 = -v31; *(float *)(a10 + 8) = v32; return 1; } } return 1; } //----- (0087D570) -------------------------------------------------------- char *__thiscall sub_87D570(float *this, int ArgList) { float *v2; // esi unsigned int v3; // kr00_4 char *v4; // ebx v2 = this; v3 = strlen((const char *)ArgList); v4 = (char *)operator new(v3 + 65); sub_7FF6E0(v4, v3 + 65, "%s = (%g, %g, %g) , %g", ArgList, *v2, v2[1], v2[2], v2[3]); return v4; } //----- (0087D5D0) -------------------------------------------------------- int __thiscall sub_87D5D0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8608D0(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 12, 4, &a2, 1); } //----- (0087D610) -------------------------------------------------------- void __cdecl sub_87D610(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *v5; // eax v2 = a1; if ( a1 ) { v3 = operator new(8u); *a2 = v3; v3[1] = a1[1]; v4 = (_DWORD *)*a2; if ( *a1 ) { do { v5 = operator new(8u); *v4 = v5; v2 = (_DWORD *)*v2; v4 = v5; v5[1] = v2[1]; } while ( *v2 ); } *v4 = 0; } } //----- (0087D660) -------------------------------------------------------- LONG __thiscall sub_87D660(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 void *v3; // ST00_4 void *v4; // ST00_4 v1 = this; *this = &NiDynamicEffectState::`vftable'; while ( v1[3] ) { v2 = (void *)v1[3]; v1[3] = *(_DWORD *)v1[3]; operator delete(v2); } while ( v1[4] ) { v3 = (void *)v1[4]; v1[4] = *(_DWORD *)v1[4]; operator delete(v3); } while ( v1[5] ) { v4 = (void *)v1[5]; v1[5] = *(_DWORD *)v1[5]; operator delete(v4); } *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A23C14: using guessed type void *NiDynamicEffectState::`vftable'; //----- (0087D6E0) -------------------------------------------------------- _DWORD *__thiscall sub_87D6E0(_BYTE *this) { _BYTE *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi v1 = this; v2 = operator new(0x20u); v3 = v2; if ( v2 ) { *v2 = &NiRefObject::`vftable'; v2[1] = 0; InterlockedIncrement(&Addend); *v3 = &NiDynamicEffectState::`vftable'; *((_BYTE *)v3 + 8) = 0; v3[3] = 0; v3[4] = 0; v3[5] = 0; v3[6] = 0; v3[7] = 0; } else { v3 = 0; } *((_BYTE *)v3 + 8) = v1[8]; sub_87D610(*((_DWORD **)v1 + 3), v3 + 3); sub_87D610(*((_DWORD **)v1 + 4), v3 + 4); sub_87D610(*((_DWORD **)v1 + 5), v3 + 5); v3[6] = *((_DWORD *)v1 + 6); v3[7] = *((_DWORD *)v1 + 7); return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A23C14: using guessed type void *NiDynamicEffectState::`vftable'; //----- (0087D770) -------------------------------------------------------- _DWORD *__cdecl sub_87D770(void **a1, int a2) { int v2; // ecx _DWORD *result; // eax int v4; // edx _DWORD *v5; // esi _DWORD *v6; // edi v2 = *(_DWORD *)(a2 + 180); result = *a1; if ( *a1 && (v4 = *(_DWORD *)(result[1] + 180), v2 >= v4) ) { if ( v2 != v4 ) { v5 = (_DWORD *)*result; v6 = *a1; if ( !*result ) goto LABEL_9; while ( 1 ) { result = (_DWORD *)v5[1]; if ( v2 <= result[45] ) break; v6 = v5; v5 = (_DWORD *)*v5; if ( !v5 ) goto LABEL_9; } if ( v2 != result[45] ) { LABEL_9: result = operator new(8u); result[1] = a2; *result = v5; *v6 = result; } } } else { result = operator new(8u); result[1] = a2; *result = *a1; *a1 = result; } return result; } //----- (0087D7F0) -------------------------------------------------------- void __cdecl sub_87D7F0(_DWORD **a1, int a2) { int v2; // ecx _DWORD *v3; // eax int v4; // edx _DWORD *v5; // ST00_4 _DWORD *v6; // edx _DWORD *v7; // eax int v8; // esi v2 = *(_DWORD *)(a2 + 180); v3 = *a1; if ( *a1 ) { v4 = *(_DWORD *)(v3[1] + 180); if ( v2 >= v4 ) { if ( v2 == v4 ) { v5 = *a1; *a1 = (_DWORD *)*v3; operator delete(v5); } else { v6 = *a1; v7 = (_DWORD *)*v3; if ( v7 ) { while ( 1 ) { v8 = v7[1]; if ( v2 <= *(_DWORD *)(v8 + 180) ) break; v6 = v7; v7 = (_DWORD *)*v7; if ( !v7 ) return; } if ( v2 == *(_DWORD *)(v8 + 180) ) { *v6 = *v7; operator delete(v7); } } } } } } //----- (0087D860) -------------------------------------------------------- void __thiscall sub_87D860(void **this, _DWORD *a2) { void **v2; // edi v2 = this; if ( a2 ) { if ( (*(int (__thiscall **)(_DWORD *))(*a2 + 116))(a2) > 3 ) { switch ( a2[83] ) { case 0: sub_87D770(v2 + 4, (int)a2); *((_BYTE *)v2 + 8) = 1; break; case 1: sub_87D770(v2 + 5, (int)a2); *((_BYTE *)v2 + 8) = 1; break; case 2: v2[6] = a2; *((_BYTE *)v2 + 8) = 1; break; case 3: v2[7] = a2; goto LABEL_9; default: LABEL_9: *((_BYTE *)v2 + 8) = 1; break; } } else { sub_87D770(v2 + 3, (int)a2); } } } //----- (0087D900) -------------------------------------------------------- void __thiscall sub_87D900(_DWORD **this, _DWORD *a2) { _DWORD **v2; // esi v2 = this; if ( a2 ) { if ( (*(int (__thiscall **)(_DWORD *))(*a2 + 116))(a2) > 3 ) { switch ( a2[83] ) { case 0: sub_87D7F0(v2 + 4, (int)a2); break; case 1: sub_87D7F0(v2 + 5, (int)a2); break; case 2: if ( a2 == v2[6] ) v2[6] = 0; break; case 3: if ( a2 == v2[7] ) v2[7] = 0; break; default: break; } *((_BYTE *)v2 + 8) = v2[4] || v2[5] || v2[6] || v2[7]; } else { sub_87D7F0(v2 + 3, (int)a2); } } } //----- (0087D9C0) -------------------------------------------------------- _DWORD *__thiscall sub_87D9C0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // eax int *v4; // esi int v5; // edi int v6; // eax signed int v8; // [esp+Ch] [ebp-4h] int v9; // [esp+18h] [ebp+8h] v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiPropertyState::`vftable'; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[8] = 0; v2[9] = 0; v2[10] = 0; v2[11] = 0; v3 = a2 - (_DWORD)v2; v2[12] = 0; v2[13] = 0; v4 = v2 + 2; v9 = a2 - (_DWORD)v2; v8 = 12; while ( 1 ) { v5 = *v4; if ( *v4 != *(int *)((char *)v4 + v3) ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = *(int *)((char *)v4 + v9); *v4 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } ++v4; if ( !--v8 ) break; v3 = v9; } return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26410: using guessed type void *NiPropertyState::`vftable'; //----- (0087DA80) -------------------------------------------------------- LONG __thiscall sub_87DA80(_DWORD *this) { _DWORD *v1; // ebx int v2; // edi int v3; // esi signed int v5; // [esp+Ch] [ebp-4h] v1 = this; *this = &NiPropertyState::`vftable'; v2 = (int)(this + 14); v5 = 11; do { v3 = *(_DWORD *)(v2 - 4); v2 -= 4; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); --v5; } while ( v5 >= 0 ); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26410: using guessed type void *NiPropertyState::`vftable'; //----- (0087DAF0) -------------------------------------------------------- void *__thiscall sub_87DAF0(void *this, char a2) { void *v2; // esi v2 = this; sub_87DA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087DB20) -------------------------------------------------------- LONG __thiscall sub_87DB20(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // ebx int v4; // edi int v5; // ebx int v6; // edi int v7; // ebx int v8; // edi int v9; // ebx int v10; // edi int v11; // ebx int v12; // edi int v13; // ebx int v14; // edi int v15; // ebx int v16; // edi int v17; // ebx int v18; // edi int v19; // ebx int v20; // edi int v21; // ebx int v22; // edi int v23; // ebx LONG result; // eax int v25; // edi int v26; // ebx v1 = this; v2 = this[2]; v3 = dword_BA4720; if ( v2 != dword_BA4720 ) { if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[2] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } v4 = v1[3]; v5 = dword_BA4AB4; if ( v4 != dword_BA4AB4 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[3] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = v1[4]; v7 = dword_BA4738; if ( v6 != dword_BA4738 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[4] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v8 = v1[5]; v9 = dword_BA45B0; if ( v8 != dword_BA45B0 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[5] = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } v10 = v1[6]; v11 = dword_BA4AC0; if ( v10 != dword_BA4AC0 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[6] = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); } v12 = v1[7]; v13 = dword_BA4ACC; if ( v12 != dword_BA4ACC ) { if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v1[7] = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } v14 = v1[8]; v15 = dword_BA4AD8; if ( v14 != dword_BA4AD8 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v1[8] = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } v16 = v1[9]; v17 = dword_BA4924; if ( v16 != dword_BA4924 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v1[9] = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); } v18 = v1[10]; v19 = dword_BA4770; if ( v18 != dword_BA4770 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v1[10] = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); } v20 = v1[11]; v21 = dword_BA46EC; if ( v20 != dword_BA46EC ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v1[11] = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); } v22 = v1[12]; v23 = dword_BA4AE4; if ( v22 != dword_BA4AE4 ) { if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v1[12] = v23; if ( v23 ) InterlockedIncrement((volatile LONG *)(v23 + 4)); } result = dword_BA47DC; v25 = v1[13]; v26 = dword_BA47DC; if ( v25 != dword_BA47DC ) { if ( v25 ) { result = InterlockedDecrement((volatile LONG *)(v25 + 4)); if ( !result ) { if ( v25 ) result = (**(int (__thiscall ***)(int, signed int))v25)(v25, 1); } } v1[13] = v26; if ( v26 ) result = InterlockedIncrement((volatile LONG *)(v26 + 4)); } return result; } // BA45B0: using guessed type int dword_BA45B0; // BA46EC: using guessed type int dword_BA46EC; // BA4720: using guessed type int dword_BA4720; // BA4738: using guessed type int dword_BA4738; // BA4770: using guessed type int dword_BA4770; // BA47DC: using guessed type int dword_BA47DC; // BA4924: using guessed type int dword_BA4924; // BA4AB4: using guessed type int dword_BA4AB4; // BA4AC0: using guessed type int dword_BA4AC0; // BA4ACC: using guessed type int dword_BA4ACC; // BA4AD8: using guessed type int dword_BA4AD8; // BA4AE4: using guessed type int dword_BA4AE4; //----- (0087DE20) -------------------------------------------------------- _DWORD *__thiscall sub_87DE20(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiPropertyState::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; v1[13] = 0; sub_87DB20(v1); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26410: using guessed type void *NiPropertyState::`vftable'; //----- (0087DE80) -------------------------------------------------------- bool __thiscall sub_87DE80(const char **this, int a2) { return sub_868DE0(this, a2) != 0; } //----- (0087DEA0) -------------------------------------------------------- char *sub_87DEA0() { return dword_BA4A60; } //----- (0087DEB0) -------------------------------------------------------- _DWORD *__thiscall sub_87DEB0(void *this, _DWORD **a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xCu); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiVertWeightsExtraData::`vftable'; sub_868EF0(v2, (int)v4, a2); result = v4; } else { sub_868EF0(v2, 0, a2); result = 0; } return result; } // A2641C: using guessed type void *NiVertWeightsExtraData::`vftable'; //----- (0087DF30) -------------------------------------------------------- void *__thiscall sub_87DF30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiVertWeightsExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2641C: using guessed type void *NiVertWeightsExtraData::`vftable'; //----- (0087DF60) -------------------------------------------------------- int __thiscall sub_87DF60(int *this, size_t a2) { size_t v2; // edi int v3; // eax int v4; // ST00_4 int (__cdecl *v5)(int, size_t *, signed int, int *, signed int); // eax int result; // eax size_t v7; // esi int v8; // eax int v9; // ST00_4 int (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax char v11; // [esp+4h] [ebp-8h] int v12; // [esp+8h] [ebp-4h] v2 = a2; if ( *(_DWORD *)(a2 + 28) < 0x5000010u ) { sub_868F80(this, a2); v3 = *(_DWORD *)(v2 + 352); v4 = v3; v5 = *(int (__cdecl **)(int, size_t *, signed int, int *, signed int))(v3 + 4); v12 = 4; result = v5(v4, &a2, 4, &v12, 1); v7 = 0; if ( a2 ) { do { v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v8 + 4); v12 = 4; result = v10(v9, &v11, 4, &v12, 1); ++v7; } while ( v7 < a2 ); } } return result; } //----- (0087DFE0) -------------------------------------------------------- unsigned int __thiscall sub_87DFE0(_DWORD *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_869050(this, a2); v3 = sub_8784D0(*(int *)dword_BA4A60); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0087E030) -------------------------------------------------------- int (__cdecl *sub_87E030())(__int16, int, int, int) { void *v0; // ecx int (__cdecl *result)(__int16, int, int, int); // eax if ( !byte_BA4A68 ) { byte_BA4A68 = 1; sub_860470(); sub_8808C0(); sub_860C00(); sub_85EF20(); sub_880B40(); sub_880CE0(); sub_880F20(); sub_874250(); sub_864960(); sub_85FDF0(); sub_8810F0(); sub_86AB80(); sub_866AD0(); sub_877080(); sub_875C70((int)"NiAdditionalGeometryData", (int)sub_88AFB0); sub_875C70((int)"NiAlphaAccumulator", (int)sub_86AE90); sub_875C70((int)"NiAlphaProperty", (int)sub_860430); sub_875C70((int)"NiAmbientLight", (int)sub_861A20); sub_875C70((int)"NiAutoNormalParticles", (int)sub_88A6B0); sub_875C70((int)"NiAutoNormalParticlesData", (int)sub_886E20); sub_875C70((int)"NiBillboardNode", (int)sub_88A4D0); sub_875C70((int)"NiBinaryExtraData", (int)sub_869140); sub_875C70((int)"NiBooleanExtraData", (int)sub_889670); sub_875C70((int)"NiBSPNode", (int)sub_889590); sub_875C70((int)"NiCamera", (int)sub_862CD0); sub_875C70((int)"NiClusterAccumulator", (int)sub_86AE90); sub_875C70((int)"NiCollisionSwitch", (int)sub_85A4D0); sub_875C70((int)"NiColorExtraData", (int)sub_87B9D0); sub_875C70((int)"NiDefaultAVObjectPalette", (int)sub_8794B0); sub_875C70((int)"NiDirectionalLight", (int)sub_8610E0); sub_875C70((int)"NiDitherProperty", (int)sub_880890); sub_875C70((int)"NiExtraData", (int)sub_868D60); sub_875C70((int)"NiFloatExtraData", (int)sub_888E00); sub_875C70((int)"NiFloatsExtraData", (int)sub_87B6C0); sub_875C70((int)"NiFogProperty", (int)sub_860B40); sub_875C70((int)"NiIntegerExtraData", (int)sub_86B310); sub_875C70((int)"NiIntegersExtraData", (int)sub_888B60); sub_875C70((int)"NiLODNode", (int)sub_86D830); sub_875C70((int)"NiLines", (int)sub_888790); sub_875C70((int)"NiLinesData", (int)sub_888540); sub_875C70((int)"NiMaterialProperty", (int)sub_85ECC0); sub_875C70((int)"NiNode", (int)sub_85A4D0); sub_875C70((int)"NiPalette", (int)sub_8755F0); sub_875C70((int)"NiParticleMeshes", (int)sub_888220); sub_875C70((int)"NiParticleMeshesData", (int)sub_8880C0); sub_875C70((int)"NiParticles", (int)sub_88A6B0); sub_875C70((int)"NiParticlesData", (int)sub_886E20); sub_875C70((int)"NiPixelData", (int)sub_869B90); sub_875C70((int)"NiPointLight", (int)sub_887A90); sub_875C70((int)"NiRangeLODData", (int)sub_86D0B0); sub_875C70((int)"NiRendererSpecificProperty", (int)sub_880AE0); sub_875C70((int)"NiRotatingParticles", (int)sub_88A6B0); sub_875C70((int)"NiRotatingParticlesData", (int)sub_886E80); sub_875C70((int)"NiScreenLODData", (int)sub_886640); sub_875C70((int)"NiScreenElements", (int)sub_868B70); sub_875C70((int)"NiScreenElementsData", (int)sub_8676A0); sub_875C70((int)"NiScreenTexture", (int)sub_885D20); sub_875C70((int)"NiShadeProperty", (int)sub_880CB0); sub_875C70((int)"NiSkinData", (int)sub_8789E0); sub_875C70((int)"NiSkinInstance", (int)sub_871970); sub_875C70((int)"NiSkinPartition", (int)sub_86EA90); sub_875C70((int)"NiSortAdjustNode", (int)sub_861B60); sub_875C70((int)"NiSourceTexture", (int)sub_866100); sub_875C70((int)"NiSourceCubeMap", (int)sub_885920); sub_875C70((int)"NiSpecularProperty", (int)sub_880EF0); sub_875C70((int)"NiSpotLight", (int)sub_884FF0); sub_875C70((int)"NiStencilProperty", (int)sub_873F50); sub_875C70((int)"NiStringExtraData", (int)sub_86B490); sub_875C70((int)"NiStringsExtraData", (int)sub_884B10); sub_875C70((int)"NiSwitchNode", (int)sub_87CA00); sub_875C70((int)"NiSwitchStringExtraData", (int)sub_884580); sub_875C70((int)"NiTextureEffect", (int)sub_883B80); sub_875C70((int)"NiTexturingProperty", (int)sub_864090); sub_875C70((int)"NiTriShape", (int)sub_866E40); sub_875C70((int)"NiTriShapeData", (int)sub_87ECD0); sub_875C70((int)"NiTriShapeDynamicData", (int)sub_8748A0); sub_875C70((int)"NiTriStrips", (int)sub_87C1D0); sub_875C70((int)"NiTriStripsData", (int)sub_880270); sub_875C70((int)"NiVectorExtraData", (int)sub_883340); sub_875C70((int)"NiVertexColorProperty", (int)sub_85FCF0); sub_875C70((int)"NiVertWeightsExtraData", (int)sub_87DF00); sub_875C70((int)"NiWireframeProperty", (int)sub_8810C0); sub_875C70((int)"NiZBufferProperty", (int)sub_86AB40); sub_875C70((int)"NiScreenSpaceCamera", (int)sub_882C20); sub_875C70((int)"NiScreenGeometry", (int)sub_8812B0); sub_875C70((int)"NiScreenGeometryData", (int)sub_8813C0); sub_875C70((int)"NiScreenPolygon", (int)sub_881D40); sub_881760(); sub_872CF0(); sub_87B070(); result = sub_87C160(v0); } return result; } // 85FCF0: using guessed type int sub_85FCF0(); // 860B40: using guessed type int sub_860B40(); // 8748A0: using guessed type int sub_8748A0(); // 87B6C0: using guessed type int sub_87B6C0(); // 87DF00: using guessed type int sub_87DF00(); // 87ECD0: using guessed type int sub_87ECD0(); // 880AE0: using guessed type int sub_880AE0(); // 880CB0: using guessed type int sub_880CB0(); // 885D20: using guessed type int sub_885D20(); // 888540: using guessed type int sub_888540(); // 888B60: using guessed type int sub_888B60(); // 889590: using guessed type int sub_889590(); // 88AFB0: using guessed type int sub_88AFB0(); // BA4A68: using guessed type char byte_BA4A68; //----- (0087E510) -------------------------------------------------------- void sub_87E510() { _DWORD *v0; // eax _DWORD *v1; // esi if ( byte_BA4A68 ) { byte_BA4A68 = 0; sub_875C90((int)"NiAdditionalGeometryData"); sub_875C90((int)"NiAlphaAccumulator"); sub_875C90((int)"NiAlphaProperty"); sub_875C90((int)"NiAmbientLight"); sub_875C90((int)"NiAutoNormalParticles"); sub_875C90((int)"NiAutoNormalParticlesData"); sub_875C90((int)"NiBillboardNode"); sub_875C90((int)"NiBinaryExtraData"); sub_875C90((int)"NiBooleanExtraData"); sub_875C90((int)"NiBSPNode"); sub_875C90((int)"NiCamera"); sub_875C90((int)"NiClusterAccumulator"); sub_875C90((int)"NiCollisionSwitch"); sub_875C90((int)"NiColorExtraData"); sub_875C90((int)"NiDefaultAVObjectPalette"); sub_875C90((int)"NiDirectionalLight"); sub_875C90((int)"NiDitherProperty"); sub_875C90((int)"NiExtraData"); sub_875C90((int)"NiFloatExtraData"); sub_875C90((int)"NiFloatsExtraData"); sub_875C90((int)"NiFogProperty"); sub_875C90((int)"NiIntegerExtraData"); sub_875C90((int)"NiIntegersExtraData"); sub_875C90((int)"NiLODNode"); sub_875C90((int)"NiLines"); sub_875C90((int)"NiLinesData"); sub_875C90((int)"NiMaterialProperty"); sub_875C90((int)"NiNode"); sub_875C90((int)"NiPalette"); sub_875C90((int)"NiParticleMeshes"); sub_875C90((int)"NiParticleMeshesData"); sub_875C90((int)"NiParticles"); sub_875C90((int)"NiParticlesData"); sub_875C90((int)"NiPixelData"); sub_875C90((int)"NiPointLight"); sub_875C90((int)"NiRangeLODData"); sub_875C90((int)"NiRendererSpecificProperty"); sub_875C90((int)"NiRotatingParticles"); sub_875C90((int)"NiRotatingParticlesData"); sub_875C90((int)"NiScreenLODData"); sub_875C90((int)"NiScreenTexture"); sub_875C90((int)"NiShadeProperty"); sub_875C90((int)"NiSkinData"); sub_875C90((int)"NiSkinInstance"); sub_875C90((int)"NiSkinPartition"); sub_875C90((int)"NiSortAdjustNode"); sub_875C90((int)"NiScreenElements"); sub_875C90((int)"NiScreenElementsData"); sub_875C90((int)"NiSourceTexture"); sub_875C90((int)"NiSpecularProperty"); sub_875C90((int)"NiSpotLight"); sub_875C90((int)"NiStencilProperty"); sub_875C90((int)"NiStringExtraData"); sub_875C90((int)"NiStringsExtraData"); sub_875C90((int)"NiSwitchNode"); sub_875C90((int)"NiSwitchStringExtraData"); sub_875C90((int)"NiTextureEffect"); sub_875C90((int)"NiTexturingProperty"); sub_875C90((int)"NiTriShape"); sub_875C90((int)"NiTriShapeData"); sub_875C90((int)"NiTriShapeDynamicData"); sub_875C90((int)"NiTriStrips"); sub_875C90((int)"NiTriStripsData"); sub_875C90((int)"NiVectorExtraData"); sub_875C90((int)"NiVertexColorProperty"); sub_875C90((int)"NiVertWeightsExtraData"); sub_875C90((int)"NiWireframeProperty"); sub_875C90((int)"NiZBufferProperty"); sub_875C90((int)"NiScreenGeometry"); sub_875C90((int)"NiScreenGeometryData"); sub_875C90((int)"NiScreenPolygon"); sub_875C90((int)"NiScreenSpaceCamera"); sub_8604F0(); sub_880930(); sub_860CA0(); sub_85EF80(); sub_880BB0(); sub_880D50(); sub_880F90(); sub_8742E0(); sub_8649C0(); sub_85FE70(); sub_881160(); sub_86AC00(); sub_866B60(); sub_875960(); sub_85F420(); sub_882580(); sub_872DC0(); sub_87B080(); v0 = dword_BA46F0; if ( dword_BA46F0 ) { do { v1 = (_DWORD *)*v0; operator delete(v0); v0 = v1; } while ( v1 ); } dword_BA46F0 = 0; dword_BA46F4 = 0; } } // BA46F4: using guessed type int dword_BA46F4; // BA4A68: using guessed type char byte_BA4A68; //----- (0087E8C0) -------------------------------------------------------- int __stdcall sub_87E8C0(int a1, int a2, int a3) { return 0; } //----- (0087E900) -------------------------------------------------------- void **__thiscall sub_87E900(void **this, char *Src) { void **v2; // esi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiShaderLibrary::`vftable'; v2[2] = 0; sub_8693E0(v2, Src); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26738: using guessed type void *NiShaderLibrary::`vftable'; //----- (0087E940) -------------------------------------------------------- _DWORD *__thiscall sub_87E940(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiShaderLibrary::`vftable'; operator delete(v3); v2[2] = 0; *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26738: using guessed type void *NiShaderLibrary::`vftable'; //----- (0087E990) -------------------------------------------------------- bool __stdcall sub_87E990(const char *a1) { return sub_96C4B0(a1, ".nif") == 0; } //----- (0087E9B0) -------------------------------------------------------- void __thiscall sub_87E9B0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiNIFImageReader::`vftable'; sub_877120(this + 9); *v1 = &NiImageReader::`vftable'; DeleteCriticalSection((LPCRITICAL_SECTION)(v1 + 1)); } // A0C924: using guessed type void *NiImageReader::`vftable'; // A26754: using guessed type void *NiNIFImageReader::`vftable'; //----- (0087E9E0) -------------------------------------------------------- char __thiscall sub_87E9E0(void *this, int a2, _DWORD *a3, _DWORD *a4, void *a5, bool *a6, _DWORD *a7) { int v7; // ebx v7 = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)this + 8))(a2, 0); if ( !v7 ) return 0; InterlockedIncrement((volatile LONG *)(v7 + 4)); *a3 = **(_DWORD **)(v7 + 84); *a4 = **(_DWORD **)(v7 + 88); qmemcpy(a5, (const void *)(v7 + 8), 0x44u); *a6 = *(_DWORD *)(v7 + 96) > 1u; *a7 = *(_DWORD *)(v7 + 108); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); return 1; } //----- (0087EA60) -------------------------------------------------------- _DWORD *__thiscall sub_87EA60(char *this) { _DWORD *v1; // esi int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *v1 = &NiNIFImageReader::`vftable'; sub_877EC0(v1 + 9); return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A26754: using guessed type void *NiNIFImageReader::`vftable'; //----- (0087EA90) -------------------------------------------------------- char *__thiscall sub_87EA90(void *this, char a2) { char *v2; // esi v2 = (char *)this; *(_DWORD *)this = &NiNIFImageReader::`vftable'; sub_877120((_DWORD *)this + 9); *(_DWORD *)v2 = &NiImageReader::`vftable'; DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 4)); if ( a2 & 1 ) operator delete(v2); return v2; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A26754: using guessed type void *NiNIFImageReader::`vftable'; //----- (0087EAD0) -------------------------------------------------------- int __thiscall sub_87EAD0(int this, int a2, int a3) { int v3; // edi struct _RTL_CRITICAL_SECTION *v4; // esi DWORD v5; // eax bool v6; // zf int result; // eax int v8; // edi int v9; // eax v3 = this; v4 = (struct _RTL_CRITICAL_SECTION *)(this + 4); EnterCriticalSection((LPCRITICAL_SECTION)(this + 4)); v5 = GetCurrentThreadId(); ++v4[1].LockCount; v4[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v5; sub_876BF0((_DWORD *)(v3 + 36)); (*(void (__thiscall **)(int, int))(*(_DWORD *)(v3 + 36) + 4))(v3 + 36, a2); if ( *(_DWORD *)(v3 + 376) == 1 ) { v8 = **(_DWORD **)(v3 + 368); if ( v8 && (v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 4))(v8)) != 0 ) { while ( (char *)v9 != dword_BA47CC ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_9; } v6 = v4[1].LockCount-- == 1; if ( v6 ) v4[1].DebugInfo = 0; LeaveCriticalSection(v4); result = v8; } else { LABEL_9: v6 = v4[1].LockCount-- == 1; if ( v6 ) v4[1].DebugInfo = 0; LeaveCriticalSection(v4); result = 0; } } else { v6 = v4[1].LockCount-- == 1; if ( v6 ) v4[1].DebugInfo = 0; LeaveCriticalSection(v4); result = 0; } return result; } //----- (0087EB90) -------------------------------------------------------- _DWORD *__thiscall sub_87EB90(_DWORD *this, __int16 a2, int a3, int a4, int a5, int a6, char a7, __int16 a8, __int16 a9, int a10) { _DWORD *v10; // esi int v11; // edx v10 = this; sub_8711C0(this, a2, a3, a4, a5, a6, a7, a8, a9); v11 = 3 * *((unsigned __int16 *)v10 + 32); v10[18] = a10; v10[19] = 0; v10[21] = 0; *v10 = &NiTriShapeData::`vftable'; v10[17] = v11; *((_WORD *)v10 + 40) = 0; return v10; } // A2676C: using guessed type void *NiTriShapeData::`vftable'; //----- (0087EBF0) -------------------------------------------------------- _DWORD *__thiscall sub_87EBF0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_871200(this); v1[17] = 0; v1[18] = 0; v1[19] = 0; v1[21] = 0; *v1 = &NiTriShapeData::`vftable'; *((_WORD *)v1 + 40) = 0; return v1; } // A2676C: using guessed type void *NiTriShapeData::`vftable'; //----- (0087EC20) -------------------------------------------------------- int __thiscall sub_87EC20(void **this, unsigned __int16 a2, void *a3) { void **v3; // esi int result; // eax v3 = this; if ( a3 != this[18] ) operator delete(this[18]); *((_WORD *)v3 + 32) = a2; v3[18] = a3; result = 3 * a2; v3[17] = (void *)result; return result; } //----- (0087EC60) -------------------------------------------------------- _WORD *__thiscall sub_87EC60(_DWORD *this, unsigned __int16 a2, _WORD *a3, _WORD *a4, _WORD *a5) { _WORD *result; // eax *a3 = *(_WORD *)(this[18] + 6 * a2); *a4 = *(_WORD *)(this[18] + 6 * a2 + 2); result = a5; *a5 = *(_WORD *)(this[18] + 6 * a2 + 4); return result; } //----- (0087ECA0) -------------------------------------------------------- int __thiscall sub_87ECA0(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { int result; // eax *a2 = *(_WORD *)(this + 64); *a3 = 0; *a4 = *(_DWORD *)(this + 72); result = *(unsigned __int16 *)(this + 64); *a5 = 3 * result; return result; } //----- (0087ED10) -------------------------------------------------------- int __thiscall sub_87ED10(_DWORD *this, _DWORD *a2) { return sub_871240(this, a2); } //----- (0087ED20) -------------------------------------------------------- char __thiscall sub_87ED20(float **this, int a2) { float **v2; // esi float *v4; // eax int v5; // ecx float *v6; // esi unsigned int v7; // eax v2 = this; if ( !sub_871250(this, a2) ) return 0; v4 = v2[17]; if ( v4 != *(float **)(a2 + 68) ) return 0; v5 = *(_DWORD *)(a2 + 72); v6 = v2[18]; v7 = 2 * (_DWORD)v4; if ( v7 >= 4 ) { while ( *(_DWORD *)v6 == *(_DWORD *)v5 ) { v7 -= 4; v5 += 4; ++v6; if ( v7 < 4 ) goto LABEL_7; } return 0; } LABEL_7: if ( v7 ) { if ( *(_BYTE *)v5 != *(_BYTE *)v6 || v7 > 1 && (*(_BYTE *)(v5 + 1) != *((_BYTE *)v6 + 1) || v7 > 2 && *(_BYTE *)(v5 + 2) != *((_BYTE *)v6 + 2)) ) { return 0; } } return 1; } //----- (0087EDA0) -------------------------------------------------------- char *sub_87EDA0() { return dword_BA4A70; } //----- (0087EDB0) -------------------------------------------------------- void **__thiscall sub_87EDB0(void **this, char a2) { void **v2; // esi v2 = this; operator delete(*this); if ( v2[4] ) sub_87EDB0(1); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087EDF0) -------------------------------------------------------- LONG __thiscall sub_87EDF0(_DWORD *this) { _DWORD *v1; // edi void *v2; // ST00_4 int v3; // esi void **v4; // ecx v1 = this; v2 = (void *)this[18]; *this = &NiTriShapeData::`vftable'; operator delete(v2); v3 = v1[21]; if ( v3 ) { operator delete(*(void **)v3); v4 = *(void ***)(v3 + 16); if ( v4 ) sub_87EDB0(v4, 1); operator delete((void *)v3); } operator delete((void *)v1[19]); return sub_871220(v1); } // A2676C: using guessed type void *NiTriShapeData::`vftable'; //----- (0087EE50) -------------------------------------------------------- _DWORD *__thiscall sub_87EE50(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi void **v5; // ecx v2 = this; v3 = (void *)*((_DWORD *)this + 18); *(_DWORD *)this = &NiTriShapeData::`vftable'; operator delete(v3); v4 = v2[21]; if ( v4 ) { operator delete(*(void **)v4); v5 = *(void ***)(v4 + 16); if ( v5 ) sub_87EDB0(v5, 1); operator delete((void *)v4); } operator delete((void *)v2[19]); sub_871220(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2676C: using guessed type void *NiTriShapeData::`vftable'; //----- (0087EEC0) -------------------------------------------------------- int __thiscall sub_87EEC0(int *this, signed int a2) { int *v2; // ebx void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx _DWORD *v4; // edi int v5; // ST04_4 int v6; // eax int v7; // ST04_4 void (__cdecl *v8)(int, char *, signed int, int *, signed int); // eax void *v9; // eax int v10; // ST08_4 void *v11; // ST04_4 void (__cdecl *v12)(int, void *, int, int *, signed int); // eax int v13; // ST00_4 int v14; // esi void (__cdecl *v15)(int, int *, signed int, int *, signed int); // edx int result; // eax int v17; // esi _DWORD *v18; // eax int v19; // edx _DWORD *i; // ecx _DWORD *v21; // esi int v22; // edi void *v23; // eax int v24; // edi void (__cdecl *v25)(int, unsigned __int16 *, signed int, int *, signed int); // edx int v26; // ST04_4 int v27; // esi unsigned __int16 v28; // cx _DWORD *v29; // eax _DWORD *v30; // esi int v31; // edi void *v32; // eax int v33; // eax int v34; // ST04_4 void (__cdecl *v35)(int, int, int, int *, signed int); // eax int v36; // [esp+Ch] [ebp-10h] int v37; // [esp+10h] [ebp-Ch] unsigned __int16 v38; // [esp+14h] [ebp-8h] char v39; // [esp+1Bh] [ebp-1h] v2 = this; sub_8712C0(this, a2); v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = v2 + 17; v5 = *(_DWORD *)(a2 + 352); v37 = 4; v3(v5, v2 + 17, 4, &v37, 1); if ( *(_DWORD *)(a2 + 28) < 0xA000111u ) { v39 = 1; } else { v6 = *(_DWORD *)(a2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v6 + 4); v37 = 1; v8(v7, &v39, 1, &v37, 1); if ( !v39 ) goto LABEL_5; } if ( *v4 ) { v9 = operator new(2 * *v4); v10 = 2 * *v4; v2[18] = (int)v9; v11 = v9; v12 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v13 = *(_DWORD *)(a2 + 352); v37 = 2; v12(v13, v11, v10, &v37, 1); } LABEL_5: v14 = *(_DWORD *)(a2 + 352); v15 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v14 + 4); v37 = 2; v15(v14, v2 + 20, 2, &v37, 1); result = *((unsigned __int16 *)v2 + 40); if ( (_WORD)result ) { v17 = *((unsigned __int16 *)v2 + 40); v18 = operator new(8 * v17); if ( v18 ) { v19 = v17 - 1; for ( i = v18; v19 >= 0; --v19 ) { *(_WORD *)i = 0; i[1] = 0; i += 2; } } else { v18 = 0; } v2[19] = (int)v18; v21 = operator new(0x14u); if ( v21 ) { v22 = *((unsigned __int16 *)v2 + 40); v23 = operator new(2 * v22); *v21 = v23; v21[1] = v23; v21[2] = v22; v21[3] = v22; v21[4] = 0; } else { v21 = 0; } v24 = 0; result = 0; v2[21] = (int)v21; v37 = 0; if ( *((_WORD *)v2 + 40) > 0u ) { do { v25 = *(void (__cdecl **)(int, unsigned __int16 *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v26 = *(_DWORD *)(a2 + 352); v27 = 0; v36 = 2; v25(v26, &v38, 2, &v36, 1); v28 = v38; if ( v38 ) { v29 = (_DWORD *)v2[21]; if ( v29 ) { while ( (unsigned int)v38 > v29[3] ) { v29 = (_DWORD *)v29[4]; if ( !v29 ) goto LABEL_20; } } else { LABEL_20: v30 = operator new(0x14u); if ( v30 ) { v31 = 2 * *(_DWORD *)(v2[21] + 8); v32 = operator new(4 * *(_DWORD *)(v2[21] + 8)); *v30 = v32; v30[1] = v32; v30[2] = v31; v30[3] = v31; v24 = v37; v30[4] = 0; v29 = v30; } else { v29 = 0; } v29[4] = v2[21]; v28 = v38; v2[21] = (int)v29; } v27 = v29[1]; v29[3] -= v28; v29[1] = v27 + 2 * v38; v33 = *(_DWORD *)(a2 + 352); v34 = v33; v35 = *(void (__cdecl **)(int, int, int, int *, signed int))(v33 + 4); v36 = 2; v35(v34, v27, 2 * v38, &v36, 1); v28 = v38; } result = v2[19] + 8 * (unsigned __int16)v24; if ( v28 && v27 ) { *(_DWORD *)(result + 4) = v27; } else { v28 = 0; *(_DWORD *)(result + 4) = 0; } ++v24; *(_WORD *)result = v28; v37 = v24; } while ( (unsigned __int16)v24 < *((_WORD *)v2 + 40) ); } } return result; } //----- (0087F160) -------------------------------------------------------- int __thiscall sub_87F160(char *this, _DWORD *a2) { _DWORD *v2; // ebx char *v3; // edi void (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx int v5; // ST14_4 int v6; // eax int v7; // ST00_4 void (__cdecl *v8)(int, char *, signed int, int *, signed int); // eax int v9; // ST1C_4 void (__cdecl *v10)(int, int, int, int *, signed int); // edx int v11; // ST18_4 int v12; // ST14_4 void (__cdecl *v13)(int, char *, signed int, int *, signed int); // edx int v14; // ST14_4 int result; // eax int v16; // eax int v17; // esi int v18; // ST14_4 void (__cdecl *v19)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v20)(int, int, int, int *, signed int); // edx int v21; // ST18_4 int v22; // ST14_4 int v23; // [esp+Ch] [ebp-Ch] int v24; // [esp+10h] [ebp-8h] int v25; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; sub_871300(this, a2); v4 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2[89] + 8); v5 = v2[89]; v24 = 4; v4(v5, v3 + 68, 4, &v24, 1); HIBYTE(a2) = *((_DWORD *)v3 + 18) != 0; v6 = v2[89]; v7 = v6; v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v6 + 8); v24 = 1; v8(v7, (char *)&a2 + 3, 1, &v24, 1); if ( HIBYTE(a2) ) { v9 = 2 * *((_DWORD *)v3 + 17); v10 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v11 = *((_DWORD *)v3 + 18); v12 = v2[89]; v24 = 2; v10(v12, v11, v9, &v24, 1); } v13 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2[89] + 8); v14 = v2[89]; v24 = 2; v13(v14, v3 + 80, 2, &v24, 1); result = 0; v25 = 0; if ( *((_WORD *)v3 + 40) > 0u ) { do { v16 = v2[89]; v17 = 8 * (unsigned __int16)v25; v24 = *(unsigned __int16 *)(v17 + *((_DWORD *)v3 + 19)); v18 = v16; v19 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v16 + 8); v23 = 2; v19(v18, &v24, 2, &v23, 1); if ( (_WORD)v24 ) { v20 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2[89] + 8); v21 = *(_DWORD *)(*((_DWORD *)v3 + 19) + v17 + 4); v22 = v2[89]; v23 = 2; v20(v22, v21, 2 * (unsigned __int16)v24, &v23, 1); } result = v25 + 1; v25 = result; } while ( (unsigned __int16)result < *((_WORD *)v3 + 40) ); } return result; } //----- (0087F2A0) -------------------------------------------------------- unsigned int __thiscall sub_87F2A0(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_871340(this, a2); v4 = sub_8784D0(*(int *)dword_BA4A70); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiTriListLength", *((_DWORD *)v3 + 17)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_pusTriList", *((_DWORD *)v3 + 18)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (0087F360) -------------------------------------------------------- void *sub_87F360() { return &unk_BA4A78; } //----- (0087F370) -------------------------------------------------------- void *__thiscall sub_87F370(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiDepthStencilBuffer::`vftable'; sub_87F630(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A267EC: using guessed type void *NiDepthStencilBuffer::`vftable'; //----- (0087F3A0) -------------------------------------------------------- _DWORD *__cdecl sub_87F3A0(int a1, int a2, int a3, int a4) { _DWORD *v5; // eax _DWORD *v6; // esi void (__thiscall **v7)(_DWORD *, signed int); // edx unsigned __int8 (__thiscall *v8)(_DWORD *, int); // eax if ( *(_DWORD *)(a4 + 4) != 15 ) return 0; v5 = operator new(0x14u); v6 = v5; if ( v5 ) { sub_87F600(v5); *v6 = &NiDepthStencilBuffer::`vftable'; } else { v6 = 0; } v7 = (void (__thiscall **)(_DWORD *, signed int))*v6; v6[2] = a1; v8 = (unsigned __int8 (__thiscall *)(_DWORD *, int))v7[17]; v6[3] = a2; if ( v8(v6, a4) ) return v6; (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return 0; } // A267EC: using guessed type void *NiDepthStencilBuffer::`vftable'; //----- (0087F410) -------------------------------------------------------- int __cdecl sub_87F410(int *a1, int a2) { int v2; // ecx int v3; // eax int result; // eax void *v5; // esi _DWORD *v6; // edi if ( !a1 || !a2 ) return 0; v2 = a1[4]; if ( v2 ) v3 = (*(int (**)(void))(*(_DWORD *)v2 + 12))(); else v3 = 0; result = (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 128))(a2, v3); v5 = (void *)result; if ( result ) { v6 = sub_87F3A0(a1[2], a1[3], a2, result); operator delete(v5); result = (int)v6; } return result; } //----- (0087F480) -------------------------------------------------------- _DWORD *__cdecl sub_87F480(int a1, int a2, int a3) { _DWORD *v3; // eax _DWORD *v4; // esi int v5; // edi v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_87F600(v3); *v4 = &NiDepthStencilBuffer::`vftable'; } else { v4 = 0; } v4[2] = a1; v4[3] = a2; v5 = v4[4]; if ( v5 != a3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4[4] = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); } return v4; } // A267EC: using guessed type void *NiDepthStencilBuffer::`vftable'; //----- (0087F500) -------------------------------------------------------- int __thiscall sub_87F500(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[2] = a2; this[3] = a3; return result; } //----- (0087F520) -------------------------------------------------------- char __thiscall sub_87F520(_DWORD *this, int a2) { char result; // al if ( this[4] || !dword_BA46D0 || (result = (*(int (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)dword_BA46D0 + 244))(dword_BA46D0, this, a2)) != 0 ) { result = 1; } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0087F560) -------------------------------------------------------- char __thiscall sub_87F560(_DWORD *this, int a2, int a3, int a4, int a5) { char result; // al if ( this[4] && dword_BA46D0 && *(_DWORD *)(a2 + 16) ) result = (*(int (__thiscall **)(int, _DWORD *, int, int, int, int))(*(_DWORD *)dword_BA46D0 + 192))( dword_BA46D0, this, a2, a3, a4, a5); else result = 0; return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0087F5B0) -------------------------------------------------------- char __thiscall sub_87F5B0(_DWORD *this, int a2, int a3, int a4, int a5) { char result; // al if ( this[4] && dword_BA46D0 && *(_DWORD *)(a2 + 16) ) result = (*(int (__thiscall **)(int, _DWORD *, int, int, int, int))(*(_DWORD *)dword_BA46D0 + 196))( dword_BA46D0, this, a2, a3, a4, a5); else result = 0; return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (0087F600) -------------------------------------------------------- _DWORD *__thiscall sub_87F600(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); v1[2] = 0; v1[3] = 0; *v1 = &Ni2DBuffer::`vftable'; v1[4] = 0; return v1; } // A26854: using guessed type void *Ni2DBuffer::`vftable'; //----- (0087F620) -------------------------------------------------------- char *sub_87F620() { return dword_BA4A80; } //----- (0087F630) -------------------------------------------------------- LONG __thiscall sub_87F630(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &Ni2DBuffer::`vftable'; v2 = this[4]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[4] = 0; } v3 = v1[4]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_85BA80(v1); } // A26854: using guessed type void *Ni2DBuffer::`vftable'; //----- (0087F690) -------------------------------------------------------- _DWORD *__cdecl sub_87F690(rsize_t a1, int a2) { _DWORD *v2; // eax _DWORD *v3; // esi _DWORD *result; // eax v2 = operator new(0x14u); v3 = v2; if ( v2 ) { sub_85BA50(v2); *v3 = &Ni2DBuffer::`vftable'; v3[2] = 0; v3[3] = 0; result = v3; v3[4] = 0; v3[2] = a1; v3[3] = a2; } else { result = 0; MEMORY[8] = a1; MEMORY[0xC] = a2; } return result; } // A26854: using guessed type void *Ni2DBuffer::`vftable'; //----- (0087F6F0) -------------------------------------------------------- _DWORD *__cdecl sub_87F6F0(int a1, int a2, volatile LONG *a3) { _DWORD *v4; // eax _DWORD *v5; // esi volatile LONG *v6; // edi if ( !a3 || !(*(int (__thiscall **)(volatile LONG *))(*a3 + 12))(a3) ) return 0; v4 = operator new(0x14u); v5 = v4; if ( v4 ) { sub_85BA50(v4); *v5 = &Ni2DBuffer::`vftable'; v5[2] = 0; v5[3] = 0; v5[4] = 0; } else { v5 = 0; } v5[2] = a1; v5[3] = a2; v6 = (volatile LONG *)v5[4]; if ( v6 != a3 ) { if ( v6 && !InterlockedDecrement(v6 + 1) ) { if ( v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } v5[4] = a3; InterlockedIncrement(a3 + 1); } sub_40DB00(v5, (int)a3); return v5; } // A26854: using guessed type void *Ni2DBuffer::`vftable'; //----- (0087F790) -------------------------------------------------------- void *__thiscall sub_87F790(void *this, char a2) { void *v2; // esi v2 = this; sub_87F630(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087F7C0) -------------------------------------------------------- unsigned int __thiscall sub_87F7C0(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85BCB0((int)this, a2); v3 = sub_8784D0(*(int *)dword_BA4A80); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0087F810) -------------------------------------------------------- int __thiscall sub_87F810(_DWORD *this, int a2, int a3, int a4) { unsigned int v4; // edi _DWORD *v5; // esi char *v6; // eax int v7; // eax int result; // eax v4 = ((a4 + 3) & 0xFFFFFFFC) * a3; v5 = this; v6 = (char *)operator new(v4 + 12 * a2 + 4); v5[20] = v6; v7 = (int)&v6[v4]; v5[21] = v7; result = v7 + 4 * a2; v5[22] = result; v5[23] = result + 4 * a2; return result; } //----- (0087F860) -------------------------------------------------------- int __thiscall sub_87F860(void **this) { void **v1; // esi int result; // eax v1 = this; operator delete(this[20]); result = 0; v1[23] = 0; v1[22] = 0; v1[21] = 0; v1[20] = 0; return result; } //----- (0087F880) -------------------------------------------------------- double __thiscall sub_87F880(_DWORD *this, int a2, int a3) { int v3; // eax double v4; // st7 int v5; // edx double v6; // st6 int v7; // eax double v8; // st7 double v9; // st6 int v10; // eax double v12; // st7 double v13; // st6 int v14; // eax v3 = this[10]; v4 = *(float *)(v3 + 4 * a2); v5 = (a2 + a3) >> 1; v6 = *(float *)(v3 + 4 * v5); v7 = this[10]; if ( v6 <= v4 ) { v12 = *(float *)(v7 + 4 * a2); v13 = *(float *)(v7 + 4 * a3); v14 = this[10]; if ( v13 > v12 ) return *(float *)(v14 + 4 * a2); if ( *(float *)(v14 + 4 * a3) > (double)*(float *)(v14 + 4 * v5) ) return *(float *)(this[10] + 4 * a3); v10 = this[10]; return *(float *)(v10 + 4 * v5); } v8 = *(float *)(v7 + 4 * v5); v9 = *(float *)(v7 + 4 * a3); v10 = this[10]; if ( v9 > v8 ) return *(float *)(v10 + 4 * v5); if ( *(float *)(v10 + 4 * a3) > (double)*(float *)(v10 + 4 * a2) ) return *(float *)(this[10] + 4 * a3); return *(float *)(this[10] + 4 * a2); } //----- (0087F920) -------------------------------------------------------- int __thiscall sub_87F920(void *this, int a2, _DWORD **a3) { return sub_872AA0(this, a2, a3); } //----- (0087F930) -------------------------------------------------------- bool __thiscall sub_87F930(void *this, int a2) { return sub_872A80(this, a2) != 0; } //----- (0087F950) -------------------------------------------------------- void __thiscall sub_87F950(_DWORD *this) { int v1; // edi _DWORD *v2; // esi int v3; // eax int v4; // ecx int v5; // eax int i; // ecx int v7; // eax int v8; // ecx int v9; // eax int *v10; // ecx int v11; // eax v1 = dword_BA46D0; v2 = this; if ( dword_BA46D0 ) { (*(void (**)(void))(*this + 72))(); v3 = v2[7]; v2[11] = v3; if ( v3 ) { v4 = v2[9]; v5 = v3 - 1; v2[11] = v5; for ( i = *(_DWORD *)(v4 + 4 * v5); i; i = *(_DWORD *)(v8 + 4 * v9) ) { (*(void (__stdcall **)(int))(*(_DWORD *)i + 116))(v1); v7 = v2[11]; if ( !v7 ) break; v8 = v2[9]; v9 = v7 - 1; v2[11] = v9; } } for ( ; v2[6]; --v2[6] ) { v10 = (int *)v2[4]; v11 = *v10; v2[4] = *v10; if ( v11 ) *(_DWORD *)(v11 + 4) = 0; else v2[5] = 0; (*(void (__thiscall **)(_DWORD *, int *))(v2[3] + 8))(v2 + 3, v10); } sub_868D50(v2); } } // BA46D0: using guessed type int dword_BA46D0; //----- (0087F9E0) -------------------------------------------------------- int __thiscall sub_87F9E0(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // ebx int v5; // ecx int v6; // esi int v7; // edi float v8; // ST14_4 double v9; // st7 int v10; // edx int v11; // ecx double v12; // st6 int v13; // ecx double v14; // st6 int v15; // eax int v16; // ecx int v17; // eax float v18; // ST14_4 result = a2; v4 = this; v5 = a3; if ( a3 > a2 ) { while ( 1 ) { v6 = v5 + 1; v7 = result - 1; v8 = sub_87F880(v4, result, v5); v9 = v8; while ( 1 ) { v10 = v4[10]; v11 = v10 + 4 * v6; do { v12 = *(float *)(v11 - 4); v11 -= 4; --v6; } while ( v12 > v9 ); v13 = v10 + 4 * v7; do { v14 = *(float *)(v13 + 4); v13 += 4; ++v7; } while ( v14 < v9 ); if ( v7 >= v6 ) break; v15 = v4[9]; v16 = *(_DWORD *)(v15 + 4 * v7); *(_DWORD *)(v15 + 4 * v7) = *(_DWORD *)(v15 + 4 * v6); *(_DWORD *)(v4[9] + 4 * v6) = v16; v17 = v4[10]; v18 = *(float *)(v17 + 4 * v7); *(float *)(v17 + 4 * v7) = *(float *)(v17 + 4 * v6); *(float *)(v4[10] + 4 * v6) = v18; } if ( v6 == a3 ) { a3 = v6 - 1; } else { sub_87F9E0(a2, v6); a2 = v6 + 1; } result = a2; if ( a3 <= a2 ) break; result = a2; v5 = a3; } } return result; } //----- (0087FAB0) -------------------------------------------------------- LONG __thiscall sub_87FAB0(_DWORD *this) { _DWORD *v1; // edi void *v2; // ST04_4 int *v3; // ecx int v4; // eax v1 = this; v2 = (void *)this[9]; *this = &NiBackToFrontAccumulator::`vftable'; operator delete(v2); operator delete((void *)v1[10]); for ( ; v1[6]; --v1[6] ) { v3 = (int *)v1[4]; v4 = *v3; v1[4] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else v1[5] = 0; (*(void (__thiscall **)(_DWORD *, int *))(v1[3] + 8))(v1 + 3, v3); } sub_67AA90(v1 + 3); *v1 = &NiAccumulator::`vftable'; return sub_85BA80(v1); } // 9F62D4: using guessed type void *NiAccumulator::`vftable'; // A268AC: using guessed type void *NiBackToFrontAccumulator::`vftable'; //----- (0087FB20) -------------------------------------------------------- void *sub_87FB20() { return &unk_BA4A88; } //----- (0087FB30) -------------------------------------------------------- _DWORD *__thiscall sub_87FB30(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax unsigned int v3; // edi _DWORD *v4; // esi int v5; // ebx _DWORD *v6; // ecx _DWORD *v7; // [esp+4h] [ebp-4h] result = (_DWORD *)a2[1]; v3 = 0; v7 = result; if ( result ) { v4 = this + 3; do { v5 = *(_DWORD *)(*a2 + 4 * v3); result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); result[2] = v5; *result = 0; result[1] = v4[2]; v6 = (_DWORD *)v4[2]; if ( v6 ) *v6 = result; else v4[1] = result; ++v4[3]; ++v3; v4[2] = result; } while ( v3 < (unsigned int)v7 ); } return result; } //----- (0087FBA0) -------------------------------------------------------- int __thiscall sub_87FBA0(int this) { int v1; // esi int result; // eax int v3; // eax float *v4; // eax _DWORD *v5; // edx int v6; // ecx int v7; // eax float *v8; // eax float v9; // ST20_4 float v10; // [esp+4h] [ebp-10h] float v11; // [esp+8h] [ebp-Ch] float i; // [esp+Ch] [ebp-8h] v1 = this; result = *(_DWORD *)(this + 24); *(_DWORD *)(this + 28) = result; if ( result ) { if ( result > *(_DWORD *)(this + 32) ) { operator delete(*(void **)(this + 36)); v3 = *(_DWORD *)(v1 + 28); *(_DWORD *)(v1 + 32) = v3; *(_DWORD *)(v1 + 36) = operator new(4 * v3); operator delete(*(void **)(v1 + 40)); *(_DWORD *)(v1 + 40) = operator new(4 * *(_DWORD *)(v1 + 32)); } v4 = *(float **)(v1 + 8); v5 = *(_DWORD **)(v1 + 16); v10 = v4[26]; v6 = 0; v11 = v4[29]; for ( i = v4[32]; v6 < *(_DWORD *)(v1 + 28); *(float *)(*(_DWORD *)(v1 + 40) + 4 * v6 - 4) = v9 ) { v7 = v5[2]; v5 = (_DWORD *)*v5; *(_DWORD *)(*(_DWORD *)(v1 + 36) + 4 * v6) = v7; v8 = *(float **)(*(_DWORD *)(v1 + 36) + 4 * v6++); v9 = v8[10] * v11 + v8[9] * v10 + v8[11] * i; } result = sub_87F9E0((_DWORD *)v1, 0, *(_DWORD *)(v1 + 28) - 1); } return result; } //----- (0087FC90) -------------------------------------------------------- _DWORD *__thiscall sub_87FC90(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_872A60(this); *v1 = &NiBackToFrontAccumulator::`vftable'; v1[6] = 0; v1[4] = 0; v1[5] = 0; v1[3] = &NiTPointerList::`vftable'; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; return v1; } // 9F42A4: using guessed type void *NiTPointerList::`vftable'; // A268AC: using guessed type void *NiBackToFrontAccumulator::`vftable'; //----- (0087FCC0) -------------------------------------------------------- void *__thiscall sub_87FCC0(void *this, char a2) { void *v2; // esi v2 = this; sub_87FAB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0087FCF0) -------------------------------------------------------- _DWORD *__thiscall sub_87FCF0(void *this, _DWORD **a2) { void *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x30u); v4 = v3; if ( v3 ) { sub_872A60(v3); *v4 = &NiBackToFrontAccumulator::`vftable'; v4[6] = 0; v4[4] = 0; v4[5] = 0; v4[3] = &NiTPointerList::`vftable'; v4[7] = 0; v4[8] = 0; v4[9] = 0; v4[10] = 0; } else { v4 = 0; } sub_872AA0(v2, (int)v4, a2); return v4; } // 9F42A4: using guessed type void *NiTPointerList::`vftable'; // A268AC: using guessed type void *NiBackToFrontAccumulator::`vftable'; //----- (0087FD50) -------------------------------------------------------- _DWORD *__thiscall sub_87FD50(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); *v1 = &NiLODData::`vftable'; return v1; } // A2691C: using guessed type void *NiLODData::`vftable'; //----- (0087FD70) -------------------------------------------------------- LONG __thiscall sub_87FD70(_DWORD *this) { *this = &NiLODData::`vftable'; return sub_85BA80(this); } // A2691C: using guessed type void *NiLODData::`vftable'; //----- (0087FD80) -------------------------------------------------------- unsigned int __thiscall sub_87FD80(int *this, signed int a2) { return sub_85BC50(this, a2); } //----- (0087FD90) -------------------------------------------------------- void *sub_87FD90() { return &unk_BA4A90; } //----- (0087FDA0) -------------------------------------------------------- void *__thiscall sub_87FDA0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiLODData::`vftable'; sub_85BA80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2691C: using guessed type void *NiLODData::`vftable'; //----- (0087FDD0) -------------------------------------------------------- float __usercall sub_87FDD0@(float *a1) { float *v1; // edx float result; // eax double v3; // st7 unsigned int v4; // eax float v5; // [esp+8h] [ebp+8h] float v6; // [esp+8h] [ebp+8h] v1 = a1; v5 = a1[1] * a1[1] + *a1 * *a1 + a1[2] * a1[2]; result = v5; if ( v5 == 0.0 ) { v3 = 0.0; } else { v4 = LODWORD(v5) & 0x7FFFFF; if ( ((unsigned __int8)(LODWORD(v5) >> 23) - 127) & 1 ) v4 |= (unsigned int)sub_800000; LODWORD(result) = v4 >> 16; v3 = 1.0 / COERCE_FLOAT(*((_DWORD *)dword_BA4A30 + LODWORD(result)) | (((signed __int16)((signed __int16)((LODWORD(v5) >> 23) - 127) >> 1) + 127) << 23)); } v6 = v3; *v1 = *v1 * v6; v1[1] = v6 * v1[1]; v1[2] = v6 * v1[2]; return result; } //----- (0087FE60) -------------------------------------------------------- float *__thiscall sub_87FE60(void *this) { void *v1; // edi unsigned __int16 *v2; // esi int v3; // eax int v4; // ebx int v5; // ecx int v6; // edx int v7; // eax int v8; // esi double v9; // st7 float v10; // ST14_4 float v11; // ST18_4 float v12; // ST1C_4 float v13; // ST20_4 float v14; // ST24_4 float v15; // ST28_4 int v16; // eax double v17; // st7 float *v18; // eax double v19; // st6 double v20; // st7 double v21; // st6 double v22; // st5 int v23; // eax double v24; // st4 float *v25; // eax float *v26; // eax int v27; // eax int v28; // edx int i; // ecx float *v30; // eax unsigned __int16 *v31; // eax int v32; // ecx int j; // edx float *v34; // eax unsigned __int16 *v35; // eax int v36; // ecx int k; // edx float *v38; // eax unsigned __int16 v39; // ax float *result; // eax float v41; // [esp+20h] [ebp-24h] float v42; // [esp+24h] [ebp-20h] float v43; // [esp+28h] [ebp-1Ch] int v44; // [esp+2Ch] [ebp-18h] int v45; // [esp+30h] [ebp-14h] int v46; // [esp+34h] [ebp-10h] int v47; // [esp+38h] [ebp-Ch] unsigned __int16 *v48; // [esp+3Ch] [ebp-8h] int v49; // [esp+40h] [ebp-4h] v1 = this; sub_879530((int)this, 1); v2 = (unsigned __int16 *)*((_DWORD *)v1 + 18); v3 = (*(unsigned __int16 (__thiscall **)(void *))(*(_DWORD *)v1 + 76))(v1); if ( (unsigned __int16)v3 > 0u ) { v49 = v3; while ( 1 ) { v4 = *v2; v5 = v2[1]; v6 = v2[2]; v7 = *((_DWORD *)v1 + 8); v48 = v2 + 3; v45 = v5; v46 = v4; v8 = 12 * v5; v4 *= 12; v9 = *(float *)(12 * v5 + v7); v44 = v6; v10 = v9 - *(float *)(v7 + v4); v47 = 12 * v6; v11 = *(float *)(12 * v5 + v7 + 4) - *(float *)(v7 + v4 + 4); v12 = *(float *)(12 * v5 + v7 + 8) - *(float *)(v7 + v4 + 8); v13 = *(float *)(12 * v6 + v7) - *(float *)(12 * v5 + v7); v14 = *(float *)(12 * v6 + v7 + 4) - *(float *)(12 * v5 + v7 + 4); v15 = *(float *)(12 * v6 + v7 + 8) - *(float *)(12 * v5 + v7 + 8); v41 = v15 * v11 - v14 * v12; v42 = v12 * v13 - v15 * v10; v43 = v10 * v14 - v13 * v11; sub_87FDD0(&v41); v16 = *((_DWORD *)v1 + 9); v17 = *(float *)(v16 + v4); v18 = (float *)(v4 + v16); v19 = v17 + v41; v20 = v41; *v18 = v19; v21 = v42; v18[1] = v42 + v18[1]; v22 = v43; v18[2] = v18[2] + v43; v23 = *((_DWORD *)v1 + 9); v24 = *(float *)(v23 + v8); v25 = (float *)(v8 + v23); *v25 = v24 + v20; v25[1] = v21 + v25[1]; v25[2] = v25[2] + v22; v26 = (float *)(v47 + *((_DWORD *)v1 + 9)); *v26 = *v26 + v20; v26[1] = v26[1] + v21; v26[2] = v22 + v26[2]; v27 = *((_DWORD *)v1 + 19); if ( v27 && *((_WORD *)v1 + 40) == *((_WORD *)v1 + 6) ) { v28 = *(_DWORD *)(v27 + 8 * v46 + 4); for ( i = *(unsigned __int16 *)(v27 + 8 * v46); (_WORD)i; v30[2] = v30[2] + v22 ) { i += 0xFFFF; v30 = (float *)(*((_DWORD *)v1 + 9) + 12 * *(unsigned __int16 *)(v28 + 2 * (unsigned __int16)i)); *v30 = *v30 + v20; v30[1] = v30[1] + v21; } v31 = (unsigned __int16 *)(*((_DWORD *)v1 + 19) + 8 * v45); v32 = *v31; for ( j = *((_DWORD *)v31 + 1); (_WORD)v32; v34[2] = v34[2] + v22 ) { v32 += 0xFFFF; v34 = (float *)(*((_DWORD *)v1 + 9) + 12 * *(unsigned __int16 *)(j + 2 * (unsigned __int16)v32)); *v34 = v20 + *v34; v34[1] = v21 + v34[1]; } v35 = (unsigned __int16 *)(*((_DWORD *)v1 + 19) + 8 * v44); v36 = *v35; for ( k = *((_DWORD *)v35 + 1); (_WORD)v36; v38[2] = v38[2] + v22 ) { v36 += 0xFFFF; v38 = (float *)(*((_DWORD *)v1 + 9) + 12 * *(unsigned __int16 *)(k + 2 * (unsigned __int16)v36)); *v38 = *v38 + v20; v38[1] = v21 + v38[1]; } } if ( !--v49 ) break; v2 = v48; } } v39 = (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 64))(v1); result = sub_87B0A0(*((float **)v1 + 9), v39, 12); *((_WORD *)v1 + 25) |= 2u; return result; } //----- (008800E0) -------------------------------------------------------- size_t *__thiscall sub_8800E0(size_t *this, size_t a2) { size_t *v2; // esi void *v3; // eax size_t *result; // eax v2 = this; *this = a2; if ( a2 ) { v3 = operator new(a2); v2[1] = (size_t)v3; v2[2] = (size_t)v3; v2[3] = 0; result = v2; } else { this[1] = 0; this[2] = this[1]; this[3] = 0; result = this; } return result; } //----- (00880130) -------------------------------------------------------- unsigned __int16 __thiscall sub_880130(int this, unsigned __int16 a2, _WORD *a3, _WORD *a4, _WORD *a5) { unsigned __int16 v5; // si int v6; // edi unsigned __int16 v7; // bx int v8; // eax unsigned __int16 i; // dx unsigned __int16 result; // ax if ( word_ABF0E0 != *(_WORD *)(this + 14) || (unsigned __int16)word_ABF0E4 + 1 != a2 ) { v7 = a2; v5 = 0; word_ABF0E0 = *(_WORD *)(this + 14); word_BA4AA0 = 0; v6 = *(_DWORD *)(this + 76); dword_BA4A98 = *(_DWORD *)(this + 76); } else { v5 = word_BA4AA0; v6 = dword_BA4A98; v7 = word_BA4A9C + 1; } word_BA4A9C = v7; v8 = 2 * v5; for ( i = *(_WORD *)(*(_DWORD *)(this + 72) + v8) - 2; v7 >= i; i = *(_WORD *)(*(_DWORD *)(this + 72) + v8) - 2 ) { v7 -= i; word_BA4A9C = v7; ++v5; v6 += 2 * *(unsigned __int16 *)(*(_DWORD *)(this + 72) + v8); dword_BA4A98 = v6; word_BA4AA0 = v5; v8 = 2 * v5; } if ( v7 & 1 ) { *a3 = *(_WORD *)(v6 + 2 * v7 + 2); *a4 = *(_WORD *)(dword_BA4A98 + 2 * (unsigned __int16)word_BA4A9C); } else { *a3 = *(_WORD *)(v6 + 2 * v7); *a4 = *(_WORD *)(dword_BA4A98 + 2 * (unsigned __int16)word_BA4A9C + 2); } result = a2; *a5 = *(_WORD *)(dword_BA4A98 + 2 * (unsigned __int16)word_BA4A9C + 4); word_ABF0E4 = a2; return result; } // ABF0E0: using guessed type __int16 word_ABF0E0; // ABF0E4: using guessed type __int16 word_ABF0E4; // BA4A98: using guessed type int dword_BA4A98; // BA4A9C: using guessed type __int16 word_BA4A9C; // BA4AA0: using guessed type __int16 word_BA4AA0; //----- (00880270) -------------------------------------------------------- _DWORD *sub_880270() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x50u); v1 = v0; if ( !v0 ) return 0; sub_871200(v0); *((_WORD *)v1 + 34) = 0; v1[18] = 0; v1[19] = 0; *v1 = &NiTriStripsData::`vftable'; return v1; } // A2697C: using guessed type void *NiTriStripsData::`vftable'; //----- (008802B0) -------------------------------------------------------- char *sub_8802B0() { return dword_BA4AA4; } //----- (008802C0) -------------------------------------------------------- unsigned __int16 __thiscall sub_8802C0(int this, _WORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { unsigned __int16 result; // ax *a2 = *(_WORD *)(this + 68); *a3 = *(_DWORD *)(this + 72); *a4 = *(_DWORD *)(this + 76); result = *(_WORD *)(this + 64) + 2 * *(_WORD *)(this + 68); *a5 = result; return result; } //----- (00880300) -------------------------------------------------------- char __thiscall sub_880300(float **this, int a2) { int v2; // edi float **v3; // esi unsigned int v5; // ecx float *v6; // eax int v7; // edi __int16 v8; // ax unsigned int v9; // ecx unsigned int v10; // edx float *v11; // eax int v12; // edi v2 = a2; v3 = this; if ( !sub_871250(this, a2) || *((_WORD *)v3 + 34) != *(_WORD *)(a2 + 68) ) return 0; v5 = 0; if ( *((_WORD *)v3 + 34) ) { v6 = v3[18]; v7 = *(_DWORD *)(a2 + 72) - (_DWORD)v6; while ( *(_WORD *)v6 == *(_WORD *)((char *)v6 + v7) ) { ++v5; v6 = (float *)((char *)v6 + 2); if ( v5 >= *((unsigned __int16 *)v3 + 34) ) { v2 = a2; goto LABEL_9; } } } else { LABEL_9: v8 = 2 * *((_WORD *)v3 + 34); v9 = 0; v10 = (unsigned __int16)(*((_WORD *)v3 + 32) + v8); if ( !(*((_WORD *)v3 + 32) + v8) ) return 1; v11 = v3[19]; v12 = *(_DWORD *)(v2 + 76) - (_DWORD)v11; while ( *(_WORD *)v11 == *(_WORD *)((char *)v11 + v12) ) { ++v9; v11 = (float *)((char *)v11 + 2); if ( v9 >= v10 ) return 1; } } return 0; } //----- (00880390) -------------------------------------------------------- int __thiscall sub_880390(_WORD *this) { int v1; // esi v1 = 2 * ((unsigned __int16)this[34] + (unsigned __int16)(this[32] + 2 * this[34])); return v1 + sub_8797A0((int)this); } //----- (008803B0) -------------------------------------------------------- LONG __thiscall sub_8803B0(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // esi bool v4; // zf int v5; // eax _DWORD *v6; // esi v1 = this; *this = &NiTriStripsData::`vftable'; if ( sub_879520(this) ) { v2 = sub_879520(v1); v3 = (_DWORD *)v2; v4 = *(_DWORD *)(v2 + 12) == 1; --v3[3]; if ( v4 ) { sub_4E6690((void **)v2); operator delete(v3); } v5 = sub_879520(v1); v6 = (_DWORD *)v5; v4 = *(_DWORD *)(v5 + 12) == 1; --v6[3]; if ( v4 ) { sub_4E6690((void **)v5); operator delete(v6); return sub_871220(v1); } } else { operator delete((void *)v1[18]); operator delete((void *)v1[19]); } return sub_871220(v1); } // A2697C: using guessed type void *NiTriStripsData::`vftable'; //----- (00880430) -------------------------------------------------------- int __thiscall sub_880430(void *this, __int16 a2, int a3, int a4) { void *v4; // esi int result; // eax _DWORD *v6; // edi bool v7; // zf int v8; // ebx _DWORD *v9; // edi v4 = this; if ( (*(int (**)(void))(*(_DWORD *)this + 52))() ) { result = a3; if ( a3 != *((_DWORD *)v4 + 18) ) { result = (*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 52))(v4); v6 = (_DWORD *)result; v7 = *(_DWORD *)(result + 12) == 1; --v6[3]; if ( v7 ) { sub_4E6690((void **)result); operator delete(v6); } } v8 = a4; if ( a4 != *((_DWORD *)v4 + 19) ) { result = (*(int (__thiscall **)(void *))(*(_DWORD *)v4 + 52))(v4); v9 = (_DWORD *)result; v7 = *(_DWORD *)(result + 12) == 1; --v9[3]; if ( v7 ) { sub_4E6690((void **)result); operator delete(v9); } } } else { if ( a3 != *((_DWORD *)v4 + 18) ) operator delete(*((void **)v4 + 18)); result = *((_DWORD *)v4 + 19); v8 = a4; if ( a4 != result ) operator delete(*((void **)v4 + 19)); } *((_DWORD *)v4 + 19) = v8; *((_WORD *)v4 + 34) = a2; *((_DWORD *)v4 + 18) = a3; return result; } //----- (008804D0) -------------------------------------------------------- void *__thiscall sub_8804D0(void *this, char a2) { void *v2; // esi v2 = this; sub_8803B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00880500) -------------------------------------------------------- int __thiscall sub_880500(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx _WORD *v5; // edi int v6; // ST00_4 int result; // eax int v8; // ebx int v9; // eax int v10; // ecx int v11; // edx int v12; // ST08_4 void (__cdecl *v13)(int, int, int, signed int *, signed int); // edx int v14; // ST04_4 int v15; // ST00_4 int v16; // eax int v17; // ST00_4 int (__cdecl *v18)(int, char *, signed int, signed int *, signed int); // eax int v19; // edi int v20; // eax int v21; // ecx int v22; // ebx int (__cdecl *v23)(int, int, int, signed int *, signed int); // eax int v24; // ST04_4 int v25; // [esp+Ch] [ebp-8h] char v26; // [esp+13h] [ebp-1h] v2 = a2; v3 = this; sub_8712C0(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = v3 + 17; v6 = *(_DWORD *)(v2 + 352); v25 = 2; result = v4(v6, v3 + 17, 2, &v25, 1); if ( *((_WORD *)v3 + 34) ) { if ( (*(int (__thiscall **)(int *))(*v3 + 52))(v3) ) { v8 = 2 * (unsigned __int16)*v5; v9 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v10 = *(_DWORD *)(v9 + 8); ++*(_DWORD *)(v9 + 12); v11 = v10 + v8; v2 = a2; *(_DWORD *)(v9 + 8) = v11; v3[18] = v10; } else { v3[18] = (int)operator new(2 * (unsigned __int16)*v5); } v12 = 2 * (unsigned __int16)*v5; v13 = *(void (__cdecl **)(int, int, int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v14 = v3[18]; v15 = *(_DWORD *)(v2 + 352); a2 = 2; v13(v15, v14, v12, &a2, 1); if ( *(_DWORD *)(v2 + 28) < 0xA000111u ) { v26 = 1; } else { v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 4); a2 = 1; result = v18(v17, &v26, 1, &a2, 1); if ( !v26 ) return result; } v19 = (unsigned __int16)(*((_WORD *)v3 + 32) + 2 * *v5); if ( (*(int (__thiscall **)(int *))(*v3 + 52))(v3) ) { v20 = (*(int (__thiscall **)(int *))(*v3 + 52))(v3); v21 = *(_DWORD *)(v20 + 8); ++*(_DWORD *)(v20 + 12); *(_DWORD *)(v20 + 8) = v21 + 2 * v19; v3[19] = v21; } else { v3[19] = (int)operator new(2 * v19); } v22 = *(_DWORD *)(v2 + 352); v23 = *(int (__cdecl **)(int, int, int, signed int *, signed int))(v22 + 4); v24 = v3[19]; a2 = 2; result = v23(v22, v24, 2 * v19, &a2, 1); } return result; } //----- (00880670) -------------------------------------------------------- int __thiscall sub_880670(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int (__cdecl *v4)(int, char *, signed int, _DWORD **, signed int); // edx int v5; // ST14_4 int result; // eax int v7; // ecx int v8; // eax int v9; // ST18_4 int v10; // ST14_4 void (__cdecl *v11)(int, int, int, int *, signed int); // eax int v12; // eax int (__cdecl *v13)(int, char *, signed int, int *, signed int); // edx int v14; // edi int (__cdecl *v15)(int, int, int, int *, signed int); // ecx int v16; // ST1C_4 int v17; // ST18_4 int v18; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_871300(this, a2); v4 = *(int (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)2; result = v4(v5, v3 + 68, 2, &a2, 1); v7 = *((unsigned __int16 *)v3 + 34); if ( (_WORD)v7 ) { v8 = v2[89]; v9 = *((_DWORD *)v3 + 18); v10 = v8; v11 = *(void (__cdecl **)(int, int, int, int *, signed int))(v8 + 8); v18 = 2; v11(v10, v9, 2 * v7, &v18, 1); v12 = v2[89]; HIBYTE(a2) = *((_DWORD *)v3 + 19) != 0; v13 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v12 + 8); v18 = 1; result = v13(v12, (char *)&a2 + 3, 1, &v18, 1); if ( HIBYTE(a2) ) { v14 = v2[89]; v15 = *(int (__cdecl **)(int, int, int, int *, signed int))(v14 + 8); v16 = 2 * (unsigned __int16)(*((_WORD *)v3 + 32) + 2 * *((_WORD *)v3 + 34)); v17 = *((_DWORD *)v3 + 19); v18 = 2; result = v15(v14, v17, v16, &v18, 1); } } return result; } //----- (00880740) -------------------------------------------------------- unsigned int __thiscall sub_880740(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_871340(this, a2); v4 = sub_8784D0(*(int *)dword_BA4AA4); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usStrips", v3[34]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_pusStripLengths", *((_DWORD *)v3 + 18)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878700((int)"m_pusStripLists", *((_DWORD *)v3 + 19)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (00880830) -------------------------------------------------------- char *sub_880830() { return dword_BA4AAC; } //----- (00880840) -------------------------------------------------------- int __thiscall sub_880840(_WORD *this, int a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiDitherProperty::`vftable'; *(_WORD *)(v4 + 28) = 0; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = v2[14]; return v4; } // A26A0C: using guessed type void *NiDitherProperty::`vftable'; //----- (00880890) -------------------------------------------------------- _DWORD *sub_880890() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_WORD *)v1 + 14) = 0; *v1 = &NiDitherProperty::`vftable'; return v1; } // A26A0C: using guessed type void *NiDitherProperty::`vftable'; //----- (008808C0) -------------------------------------------------------- LONG sub_8808C0() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x20u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiDitherProperty::`vftable'; *(_WORD *)(v1 + 28) = 0; } else { v1 = 0; } result = dword_BA4AB4; if ( dword_BA4AB4 != v1 ) { if ( dword_BA4AB4 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4AB4; result = InterlockedDecrement((volatile LONG *)(dword_BA4AB4 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4AB4 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // A26A0C: using guessed type void *NiDitherProperty::`vftable'; // BA4AB4: using guessed type int dword_BA4AB4; //----- (00880930) -------------------------------------------------------- void sub_880930() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AB4; if ( dword_BA4AB4 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4AB4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4AB4 = 0; } } // BA4AB4: using guessed type int dword_BA4AB4; //----- (00880970) -------------------------------------------------------- unsigned int __thiscall sub_880970(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4AAC); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bDither", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00880A00) -------------------------------------------------------- int __thiscall sub_880A00(int *this, void **a2) { return sub_85FBF0(this, a2); } //----- (00880A10) -------------------------------------------------------- bool __thiscall sub_880A10(_DWORD *this, int a2) { return sub_81A690(this, a2) != 0; } //----- (00880A30) -------------------------------------------------------- int __thiscall sub_880A30(const char **this, _DWORD *a2) { return sub_81A6A0(this, a2); } //----- (00880A40) -------------------------------------------------------- bool __thiscall sub_880A40(_DWORD *this, int a2) { return sub_81A6B0(this, a2) != 0; } //----- (00880A60) -------------------------------------------------------- _DWORD *__thiscall sub_880A60(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85B2B0(this); *v1 = &NiRendererSpecificProperty::`vftable'; return v1; } // A26A64: using guessed type void *NiRendererSpecificProperty::`vftable'; //----- (00880A80) -------------------------------------------------------- char *sub_880A80() { return dword_BA4AB8; } //----- (00880A90) -------------------------------------------------------- _DWORD *__thiscall sub_880A90(void *this, int a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x1Cu); v4 = v3; if ( v3 ) { sub_85B2B0(v3); *v4 = &NiRendererSpecificProperty::`vftable'; sub_85FBB0(v2, (int)v4, a2); result = v4; } else { sub_85FBB0(v2, 0, a2); result = 0; } return result; } // A26A64: using guessed type void *NiRendererSpecificProperty::`vftable'; //----- (00880B10) -------------------------------------------------------- void *__thiscall sub_880B10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiRendererSpecificProperty::`vftable'; sub_85B2F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A26A64: using guessed type void *NiRendererSpecificProperty::`vftable'; //----- (00880B40) -------------------------------------------------------- LONG sub_880B40() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x1Cu); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiRendererSpecificProperty::`vftable'; } else { v1 = 0; } result = dword_BA4AC0; if ( dword_BA4AC0 != v1 ) { if ( dword_BA4AC0 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4AC0; result = InterlockedDecrement((volatile LONG *)(dword_BA4AC0 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4AC0 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // A26A64: using guessed type void *NiRendererSpecificProperty::`vftable'; // BA4AC0: using guessed type int dword_BA4AC0; //----- (00880BB0) -------------------------------------------------------- void sub_880BB0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AC0; if ( dword_BA4AC0 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4AC0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4AC0 = 0; } } // BA4AC0: using guessed type int dword_BA4AC0; //----- (00880BF0) -------------------------------------------------------- unsigned int __thiscall sub_880BF0(int *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_85FC40(this, a2); v3 = sub_8784D0(*(int *)dword_BA4AB8); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00880C40) -------------------------------------------------------- char __thiscall sub_880C40(_DWORD *this, int a2) { return sub_81A690(this, a2); } //----- (00880C50) -------------------------------------------------------- char *sub_880C50() { return dword_BA4AC4; } //----- (00880C60) -------------------------------------------------------- int __thiscall sub_880C60(_WORD *this, int a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiShadeProperty::`vftable'; *(_WORD *)(v4 + 28) = 1; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = v2[14]; return v4; } // A26AAC: using guessed type void *NiShadeProperty::`vftable'; //----- (00880CE0) -------------------------------------------------------- _DWORD *sub_880CE0() { _DWORD *result; // eax int v1; // esi int (__thiscall ***v2)(_DWORD, signed int); // edi result = operator new(0x20u); v1 = (int)result; if ( result ) { sub_85B2B0(result); result = (_DWORD *)1; *(_DWORD *)v1 = &NiShadeProperty::`vftable'; *(_WORD *)(v1 + 28) = 1; } else { v1 = 0; } v2 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4ACC; if ( dword_BA4ACC != v1 ) { if ( dword_BA4ACC ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(dword_BA4ACC + 4)); if ( !result ) { if ( v2 ) result = (_DWORD *)(**v2)(v2, 1); } } dword_BA4ACC = v1; if ( v1 ) result = (_DWORD *)InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // A26AAC: using guessed type void *NiShadeProperty::`vftable'; // BA4ACC: using guessed type int dword_BA4ACC; //----- (00880D50) -------------------------------------------------------- void sub_880D50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4ACC; if ( dword_BA4ACC ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4ACC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4ACC = 0; } } // BA4ACC: using guessed type int dword_BA4ACC; //----- (00880D90) -------------------------------------------------------- int __thiscall sub_880D90(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_81A6A0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)2; return v4(v5, v3 + 7, 2, &a2, 1); } //----- (00880DD0) -------------------------------------------------------- unsigned int __thiscall sub_880DD0(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4AC4); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bSmooth", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00880E60) -------------------------------------------------------- char __thiscall sub_880E60(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_81A6B0(this, a2); if ( result ) result = (*((_BYTE *)v2 + 28) ^ ~*(_BYTE *)(a2 + 28)) & 1; return result; } //----- (00880E90) -------------------------------------------------------- char *sub_880E90() { return dword_BA4AD0; } //----- (00880EA0) -------------------------------------------------------- int __thiscall sub_880EA0(_WORD *this, int a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiSpecularProperty::`vftable'; *(_WORD *)(v4 + 28) = 0; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = v2[14]; return v4; } // A26B04: using guessed type void *NiSpecularProperty::`vftable'; //----- (00880EF0) -------------------------------------------------------- _DWORD *sub_880EF0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_WORD *)v1 + 14) = 0; *v1 = &NiSpecularProperty::`vftable'; return v1; } // A26B04: using guessed type void *NiSpecularProperty::`vftable'; //----- (00880F20) -------------------------------------------------------- LONG sub_880F20() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x20u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiSpecularProperty::`vftable'; *(_WORD *)(v1 + 28) = 0; } else { v1 = 0; } result = dword_BA4AD8; if ( dword_BA4AD8 != v1 ) { if ( dword_BA4AD8 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4AD8; result = InterlockedDecrement((volatile LONG *)(dword_BA4AD8 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4AD8 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // A26B04: using guessed type void *NiSpecularProperty::`vftable'; // BA4AD8: using guessed type int dword_BA4AD8; //----- (00880F90) -------------------------------------------------------- void sub_880F90() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AD8; if ( dword_BA4AD8 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4AD8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4AD8 = 0; } } // BA4AD8: using guessed type int dword_BA4AD8; //----- (00880FD0) -------------------------------------------------------- unsigned int __thiscall sub_880FD0(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4AD0); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bSpec", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00881060) -------------------------------------------------------- char *sub_881060() { return dword_BA4ADC; } //----- (00881070) -------------------------------------------------------- int __thiscall sub_881070(_WORD *this, int a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85B2B0(v3); *(_DWORD *)v4 = &NiWireframeProperty::`vftable'; *(_WORD *)(v4 + 28) = 0; } else { v4 = 0; } sub_85FBB0(v2, v4, a2); *(_WORD *)(v4 + 28) = v2[14]; return v4; } // A26B54: using guessed type void *NiWireframeProperty::`vftable'; //----- (008810C0) -------------------------------------------------------- _DWORD *sub_8810C0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *((_WORD *)v1 + 14) = 0; *v1 = &NiWireframeProperty::`vftable'; return v1; } // A26B54: using guessed type void *NiWireframeProperty::`vftable'; //----- (008810F0) -------------------------------------------------------- LONG sub_8810F0() { _DWORD *v0; // eax int v1; // esi LONG result; // eax int (__thiscall ***v3)(_DWORD, signed int); // edi v0 = operator new(0x20u); v1 = (int)v0; if ( v0 ) { sub_85B2B0(v0); *(_DWORD *)v1 = &NiWireframeProperty::`vftable'; *(_WORD *)(v1 + 28) = 0; } else { v1 = 0; } result = dword_BA4AE4; if ( dword_BA4AE4 != v1 ) { if ( dword_BA4AE4 ) { v3 = (int (__thiscall ***)(_DWORD, signed int))dword_BA4AE4; result = InterlockedDecrement((volatile LONG *)(dword_BA4AE4 + 4)); if ( !result ) { if ( v3 ) result = (**v3)(v3, 1); } } dword_BA4AE4 = v1; if ( v1 ) result = InterlockedIncrement((volatile LONG *)(v1 + 4)); } return result; } // A26B54: using guessed type void *NiWireframeProperty::`vftable'; // BA4AE4: using guessed type int dword_BA4AE4; //----- (00881160) -------------------------------------------------------- void sub_881160() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AE4; if ( dword_BA4AE4 ) { if ( !InterlockedDecrement((volatile LONG *)(dword_BA4AE4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } dword_BA4AE4 = 0; } } // BA4AE4: using guessed type int dword_BA4AE4; //----- (008811A0) -------------------------------------------------------- __int16 __thiscall sub_8811A0(int *this, void **a2) { void **v2; // edi int *v3; // esi __int16 result; // ax int (__cdecl *v5)(void *, int *, signed int, void ***, signed int); // edx void *v6; // ST00_4 v2 = a2; v3 = this; sub_85FBF0(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v5 = (int (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v6 = v2[88]; a2 = (void **)2; result = v5(v6, v3 + 7, 2, &a2, 1); } else { result = (_WORD)v2[104] & 1; *((_WORD *)v3 + 14) = result; } return result; } //----- (00881200) -------------------------------------------------------- unsigned int __thiscall sub_881200(int *this, char a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_85FC40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4ADC); v5 = v2[3]; *(_DWORD *)&a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); a2 = v3[7] & 1; v6 = sub_878510((int)"m_bWireframe", a2); v7 = v2[3]; *(_DWORD *)&a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00881290) -------------------------------------------------------- bool __thiscall sub_881290(_DWORD *this, int a2) { return sub_879760(this, a2); } //----- (008812A0) -------------------------------------------------------- char *sub_8812A0() { return dword_BA4AF4; } //----- (008812B0) -------------------------------------------------------- _DWORD *sub_8812B0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_866E10(v0); *v1 = &NiScreenGeometry::`vftable'; return v1; } // A26BB4: using guessed type void *NiScreenGeometry::`vftable'; //----- (008812E0) -------------------------------------------------------- unsigned int __thiscall sub_8812E0(int *this, signed int a2) { return sub_862CF0(this, a2); } //----- (008812F0) -------------------------------------------------------- int __thiscall sub_8812F0(const char **this, signed int a2) { return sub_862F10(this, a2); } //----- (00881300) -------------------------------------------------------- bool __thiscall sub_881300(float *this, float *a2) { return sub_861FD0(this, a2); } //----- (00881310) -------------------------------------------------------- void *__thiscall sub_881310(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A26C40: using guessed type void *NiTArray::`vftable'; //----- (00881340) -------------------------------------------------------- void *__thiscall sub_881340(void *this, char a2) { void *v2; // esi v2 = this; sub_881370((void (__stdcall ****)(signed int))this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00881370) -------------------------------------------------------- void __thiscall sub_881370(void (__stdcall ****this)(signed int)) { void (__stdcall ****v1)(signed int); // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // esi v1 = this; v2 = *this; if ( v2 ) { if ( *(v2 - 1) ) (**v2)(3); else operator delete(v2 - 1); } v3 = v1[2]; if ( v3 ) { sub_881370(v3); operator delete(v3); } } //----- (008813B0) -------------------------------------------------------- char *sub_8813B0() { return dword_BA4AEC; } //----- (008813C0) -------------------------------------------------------- _DWORD *sub_8813C0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x78u); v1 = v0; if ( !v0 ) return 0; sub_87EBF0(v0); *v1 = &NiScreenGeometryData::`vftable'; *((_WORD *)v1 + 44) = 0; v1[23] = 0; v1[26] = 4; v1[29] = 4; v1[24] = &NiTArray::`vftable'; v1[27] = 0; v1[28] = 0; v1[25] = operator new(0x10u); return v1; } // A26C40: using guessed type void *NiTArray::`vftable'; // A26C4C: using guessed type void *NiScreenGeometryData::`vftable'; //----- (00881430) -------------------------------------------------------- void *__thiscall sub_881430(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiScreenGeometry::`vftable'; sub_871400(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A26BB4: using guessed type void *NiScreenGeometry::`vftable'; //----- (00881460) -------------------------------------------------------- _DWORD *__thiscall sub_881460(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_866E10(v3); *v4 = &NiScreenGeometry::`vftable'; sub_866E30(v2, (int)v4, a2); result = v4; } else { sub_866E30(v2, 0, a2); result = 0; } return result; } // A26BB4: using guessed type void *NiScreenGeometry::`vftable'; //----- (008814C0) -------------------------------------------------------- char *sub_8814C0() { return dword_BA4AFC; } //----- (008814D0) -------------------------------------------------------- _DWORD *__thiscall sub_8814D0(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi _DWORD *result; // eax _DWORD *v5; // edi int v6; // esi v3 = this; sub_85BB00(this, a2, a3); result = operator new(0x38u); if ( result ) { result = sub_87D9C0(result, v3[2]); v5 = result; } else { v5 = 0; } v6 = *(_DWORD *)(a2 + 8); if ( (_DWORD *)v6 != v5 ) { if ( v6 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(a2 + 8) = v5; if ( v5 ) result = (_DWORD *)InterlockedIncrement(v5 + 1); } return result; } //----- (00881550) -------------------------------------------------------- char __thiscall sub_881550(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // esi v2 = this; result = sub_85BA30(this, a2); if ( result ) { v4 = 8; do { (*(void (__stdcall **)(int))(**(_DWORD **)(v4 + v2[2]) + 20))(a2); v4 += 4; } while ( v4 < 0x38 ); result = 1; } return result; } //----- (00881590) -------------------------------------------------------- int __thiscall sub_881590(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax unsigned int v4; // edi int v5; // ecx unsigned int v6; // edi int v7; // ecx v2 = this; result = sub_85C1F0(this, a2); v4 = 0; if ( v2[77] ) { do { result = v2[75]; v5 = *(_DWORD *)(result + 4 * v4); if ( v5 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v5 + 40))(a2); ++v4; } while ( v4 < v2[77] ); } v6 = 0; if ( v2[83] ) { do { v7 = *(_DWORD *)(v2[81] + 4 * v6); if ( v7 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v7 + 40))(a2); ++v6; } while ( v6 < v2[83] ); } return result; } //----- (00881610) -------------------------------------------------------- int *__thiscall sub_881610(int *this, unsigned int a2) { int *v2; // ebx int v3; // ecx unsigned int *v4; // eax int v5; // ecx int v6; // edx int v7; // eax v2 = this; this[1] = a2; this[2] = 0; if ( !a2 ) { *this = 0; return this; } v3 = 20 * a2 | -(20 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( !v4 ) { v6 = 0; goto LABEL_7; } v5 = a2 - 1; v6 = (int)(v4 + 1); *v4 = a2; v7 = (int)(v4 + 1); if ( (signed int)(a2 - 1) < 0 ) { LABEL_7: *v2 = v6; return v2; } do { *(_DWORD *)v7 = &NiScreenGeometryData::ScreenElement::`vftable'; *(_WORD *)(v7 + 4) = 0; *(_WORD *)(v7 + 6) = 0; *(_DWORD *)(v7 + 8) = 0; *(_DWORD *)(v7 + 12) = 0; *(_DWORD *)(v7 + 16) = 0; v7 += 20; --v5; } while ( v5 >= 0 ); *v2 = v6; return v2; } // A26BAC: using guessed type void *NiScreenGeometryData::ScreenElement::`vftable'; //----- (008816B0) -------------------------------------------------------- void **__thiscall sub_8816B0(void *this, char a2) { void **v2; // esi char *v3; // ebx int v4; // edi int v5; // eax int v6; // edi char *v7; // eax void **v8; // esi void *v9; // ecx void **result; // eax void *v11; // ST10_4 char *v12; // [esp+4h] [ebp-4h] v2 = (void **)this; if ( a2 & 2 ) { v3 = (char *)this - 4; v4 = *((_DWORD *)this - 1); v5 = 5 * v4; v6 = v4 - 1; v12 = (char *)this - 4; v7 = (char *)this + 4 * v5; if ( v6 >= 0 ) { v8 = (void **)(v7 + 12); do { v9 = *(v8 - 6); v8 -= 5; *(v8 - 3) = &NiScreenGeometryData::ScreenElement::`vftable'; operator delete(v9); operator delete(*v8); operator delete(v8[1]); --v6; } while ( v6 >= 0 ); v3 = v12; } if ( a2 & 1 ) operator delete(v3); result = (void **)v3; } else { v11 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiScreenGeometryData::ScreenElement::`vftable'; operator delete(v11); operator delete(v2[3]); operator delete(v2[4]); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } // A26BAC: using guessed type void *NiScreenGeometryData::ScreenElement::`vftable'; //----- (00881760) -------------------------------------------------------- _DWORD *sub_881760() { _DWORD *result; // eax result = operator new(0x18u); if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 8; result[4] = 8; result[5] = 0; dword_BA4AE8 = result; } else { dword_BA4AE8 = 0; } return result; } //----- (008817A0) -------------------------------------------------------- unsigned int __thiscall sub_8817A0(char *this, _DWORD *a2) { signed int v2; // esi int v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax int v7; // eax void (__cdecl *v8)(int, unsigned int *, signed int, _DWORD **, signed int); // edx unsigned int result; // eax int v10; // edi unsigned int v11; // ebx int v12; // eax int v13; // ST10_4 void (__cdecl *v14)(int, int *, signed int, _DWORD **, signed int); // eax int v15; // eax char *v16; // edx int v17; // eax int v18; // ST10_4 void (__cdecl *v19)(int, char *, signed int, int *, signed int); // eax char *v20; // edi int v21; // eax int v22; // ST10_4 void (__cdecl *v23)(int, bool *, signed int, char **, signed int); // eax unsigned int v24; // ebx char *v25; // edi int v26; // eax int v27; // ST10_4 void (__cdecl *v28)(int, int *, signed int, char **, signed int); // eax char *v29; // edi int v30; // ebx char *v31; // [esp+8h] [ebp-28h] char *v32; // [esp+Ch] [ebp-24h] int v33; // [esp+10h] [ebp-20h] char *v34; // [esp+14h] [ebp-1Ch] unsigned int v35; // [esp+18h] [ebp-18h] int v36; // [esp+1Ch] [ebp-14h] char *v37; // [esp+20h] [ebp-10h] unsigned int v38; // [esp+24h] [ebp-Ch] int v39; // [esp+28h] [ebp-8h] char v40; // [esp+2Eh] [ebp-2h] bool v41; // [esp+2Fh] [ebp-1h] v2 = (signed int)a2; v3 = (int)this; v34 = this; sub_87F160(this, a2); v40 = *(_BYTE *)(v3 + 88); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)1; v6(v5, &v40, 1, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v38 = *(_DWORD *)(v3 + 108); v8 = *(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v8(v7, &v38, 4, &a2, 1); result = 0; v35 = 0; if ( v38 ) { while ( 1 ) { v10 = *(_DWORD *)(*(_DWORD *)(v3 + 100) + 4 * result); v11 = 0; if ( v10 ) v39 = *(unsigned __int16 *)(v10 + 4); else v39 = 0; v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v12 + 8); a2 = (_DWORD *)2; v14(v13, &v39, 2, &a2, 1); if ( (_WORD)v39 ) { v15 = *(_DWORD *)(v10 + 8); v16 = *(char **)(v10 + 16); v37 = *(char **)(v10 + 12); v36 = *(unsigned __int16 *)(v10 + 6); v31 = v16; HIBYTE(a2) = v15 != 0; v32 = (char *)v15; v17 = *(_DWORD *)(v2 + 356); v18 = v17; v19 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v17 + 8); v33 = 1; v19(v18, (char *)&a2 + 3, 1, &v33, 1); if ( HIBYTE(a2) && (unsigned __int16)v39 > 0u ) { v20 = v32; do { sub_86CBA0(v20, v2); ++v11; v20 += 8; } while ( v11 < (unsigned __int16)v39 ); } v41 = v37 != 0; v21 = *(_DWORD *)(v2 + 356); v22 = v21; v23 = *(void (__cdecl **)(int, bool *, signed int, char **, signed int))(v21 + 8); v32 = (char *)1; v23(v22, &v41, 1, &v32, 1); if ( v41 ) { v24 = 0; if ( (unsigned __int16)v39 > 0u ) { v25 = v37; do { sub_8609B0(v25, v2); ++v24; v25 += 16; } while ( v24 < (unsigned __int16)v39 ); } } v26 = *(_DWORD *)(v2 + 356); v27 = v26; v28 = *(void (__cdecl **)(int, int *, signed int, char **, signed int))(v26 + 8); v32 = (char *)2; v28(v27, &v36, 2, &v32, 1); if ( (_WORD)v36 && (unsigned __int16)v39 * (unsigned __int16)v36 ) { v29 = v31; v30 = (unsigned __int16)v39 * (unsigned __int16)v36; do { sub_86CBA0(v29, v2); v29 += 8; --v30; } while ( v30 ); } } result = v35 + 1; v35 = result; if ( result >= v38 ) break; v3 = (int)v34; } } return result; } //----- (00881980) -------------------------------------------------------- char __thiscall sub_881980(float **this, int a2) { float **v2; // esi float *v4; // eax float *v5; // edx int v6; // edi int v7; // eax int v8; // ecx float *v9; // edx float *v10; // esi int v11; // ebx float *v12; // eax int v13; // edi float *v14; // ecx int v15; // ebx unsigned int v16; // edi int v17; // eax float *v18; // esi float *v19; // [esp+8h] [ebp-38h] float *v20; // [esp+10h] [ebp-30h] int v21; // [esp+14h] [ebp-2Ch] unsigned int v22; // [esp+18h] [ebp-28h] int v23; // [esp+1Ch] [ebp-24h] int v24; // [esp+20h] [ebp-20h] int i; // [esp+24h] [ebp-1Ch] unsigned int v26; // [esp+28h] [ebp-18h] unsigned int v27; // [esp+2Ch] [ebp-14h] int v28; // [esp+30h] [ebp-10h] float *v29; // [esp+34h] [ebp-Ch] float *v30; // [esp+38h] [ebp-8h] float *v31; // [esp+3Ch] [ebp-4h] float *v32; // [esp+48h] [ebp+8h] v2 = this; if ( !sub_87ED20(this, a2) ) return 0; if ( *(_BYTE *)(a2 + 88) != *((_BYTE *)v2 + 88) ) return 0; v4 = *(float **)(a2 + 112); v19 = v4; if ( v4 != v2[28] || *(float **)(a2 + 108) != v2[27] ) return 0; v26 = 0; if ( !v4 ) return 1; v5 = v2[25]; v6 = *(_DWORD *)(a2 + 100) - (_DWORD)v5; v29 = v2[25]; for ( i = *(_DWORD *)(a2 + 100) - (_DWORD)v5; ; v6 = i ) { v7 = *(_DWORD *)((char *)v5 + v6); v8 = *(_DWORD *)v5; if ( v7 ) break; if ( v8 ) return 0; LABEL_25: ++v5; ++v26; v29 = v5; if ( v26 >= (unsigned int)v19 ) return 1; } if ( !v8 ) return 0; v27 = *(unsigned __int16 *)(v7 + 4); v22 = *(unsigned __int16 *)(v7 + 6); if ( v27 != *(unsigned __int16 *)(v8 + 4) || *(unsigned __int16 *)(v7 + 6) != *(unsigned __int16 *)(v8 + 6) ) return 0; v9 = *(float **)(v7 + 8); v10 = *(float **)(v7 + 12); v11 = *(_DWORD *)(v8 + 12); v12 = *(float **)(v7 + 16); v20 = v12; v21 = *(_DWORD *)(v8 + 16); v28 = 0; if ( !v27 ) { LABEL_24: v5 = v29; goto LABEL_25; } v13 = *(_DWORD *)(v8 + 8) - (_DWORD)v9; v14 = v9; v15 = v11 - (_DWORD)v10; v31 = v10; v32 = v9; v30 = v12; v24 = v13; v23 = v15; while ( !(unsigned __int8)sub_814B30(v14, (float *)((char *)v14 + v13)) && !(unsigned __int8)sub_883690(v31, (float *)((char *)v31 + v15)) ) { v16 = 0; if ( v22 ) { v17 = v21 - (_DWORD)v20; v18 = v30; while ( !(unsigned __int8)sub_814B30(v18, (float *)((char *)v18 + v17)) ) { ++v16; v18 += 2; if ( v16 >= v22 ) goto LABEL_23; v17 = v21 - (_DWORD)v20; } return 0; } LABEL_23: v32 += 2; v31 += 4; v30 += 2 * v22; if ( ++v28 >= v27 ) goto LABEL_24; v13 = v24; v14 = v32; v15 = v23; } return 0; } //----- (00881B10) -------------------------------------------------------- _DWORD *__thiscall sub_881B10(_DWORD *this, __int16 a2, void *Src, void *a4, void *a5) { _DWORD *v5; // edi void *v6; // eax void *v7; // eax char *v8; // eax int v9; // edx int v10; // ecx _DWORD *v11; // eax _DWORD *v12; // ebx int v13; // esi v5 = this; sub_85BA50(this); *v5 = &NiScreenPolygon::`vftable'; v5[2] = 0; *((_WORD *)v5 + 6) = a2; v6 = operator new(12 * (unsigned __int16)a2); v5[4] = v6; memcpy_s(v6, 12 * (unsigned __int16)a2, Src, 12 * (unsigned __int16)a2); if ( a4 ) { v7 = operator new(8 * (unsigned __int16)a2); v5[5] = v7; memcpy_s(v7, 8 * (unsigned __int16)a2, a4, 8 * (unsigned __int16)a2); } else { v5[5] = 0; } if ( a5 ) { v8 = (char *)operator new(16 * (unsigned __int16)a2); if ( v8 ) { v9 = (unsigned __int16)a2 - 1; if ( v9 >= 0 ) { v10 = (int)(v8 + 8); do { *(float *)(v10 - 8) = 0.0; v10 += 16; --v9; *(float *)(v10 - 20) = 0.0; *(float *)(v10 - 16) = 0.0; *(float *)(v10 - 12) = 0.0; } while ( v9 >= 0 ); } } else { v8 = 0; } v5[6] = v8; memcpy_s(v8, 16 * (unsigned __int16)a2, a5, 16 * (unsigned __int16)a2); } else { v5[6] = 0; } v11 = operator new(0x38u); if ( v11 ) v12 = sub_87DE20(v11); else v12 = 0; v13 = v5[2]; if ( (_DWORD *)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v5[2] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } return v5; } // A26CAC: using guessed type void *NiScreenPolygon::`vftable'; //----- (00881C70) -------------------------------------------------------- void **__thiscall sub_881C70(void *this, char a2) { void **v2; // esi void *v3; // ST08_4 volatile LONG *v4; // edi v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 4); *(_DWORD *)this = &NiScreenPolygon::`vftable'; operator delete(v3); operator delete(v2[5]); operator delete(v2[6]); v4 = (volatile LONG *)v2[2]; if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A26CAC: using guessed type void *NiScreenPolygon::`vftable'; //----- (00881CE0) -------------------------------------------------------- _DWORD *__thiscall sub_881CE0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *result; // eax v2 = this; v3 = operator new(0x1Cu); if ( v3 ) { v4 = sub_881B10(v3, *((_WORD *)v2 + 6), (void *)v2[4], (void *)v2[5], (void *)v2[6]); sub_8814D0(v2, (int)v4, a2); result = v4; } else { sub_8814D0(v2, 0, a2); result = 0; } return result; } //----- (00881D40) -------------------------------------------------------- _DWORD *sub_881D40() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x1Cu); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); *v1 = &NiScreenPolygon::`vftable'; v1[2] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; *((_WORD *)v1 + 6) = 0; return v1; } // A26CAC: using guessed type void *NiScreenPolygon::`vftable'; //----- (00881D80) -------------------------------------------------------- unsigned int __thiscall sub_881D80(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx _WORD *v5; // edi int v6; // ST04_4 int v7; // eax int v8; // ST04_4 void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // ST04_4 void (__cdecl *v11)(int, char *, signed int, int *, signed int); // eax int v12; // eax int v13; // ST04_4 void (__cdecl *v14)(int, int *, signed int, int *, signed int); // eax int v15; // ST04_4 void (__cdecl *v16)(int, bool *, signed int, int *, signed int); // eax char *v17; // eax int v18; // edx int v19; // ecx int v21; // [esp+Ch] [ebp-8h] bool v22; // [esp+13h] [ebp-1h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = v3 + 3; v6 = *(_DWORD *)(v2 + 352); v21 = 2; v4(v6, v3 + 3, 2, &v21, 1); v3[4] = (int)operator new(12 * *((unsigned __int16 *)v3 + 6)); v21 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do sub_8608D0((char *)(v3[4] + 12 * (unsigned __int16)v21++), v2); while ( (unsigned __int16)v21 < *v5 ); } v7 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) >= 0x4010000u ) { v10 = *(_DWORD *)(v2 + 352); v11 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v21 = 1; v11(v10, (char *)&a2 + 3, 1, &v21, 1); } else { v8 = *(_DWORD *)(v2 + 352); v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 4); v21 = 4; v9(v8, v3 + 5, 4, &v21, 1); HIBYTE(a2) = v3[5] != 0; } if ( HIBYTE(a2) ) { v3[5] = (int)operator new(8 * (unsigned __int16)*v5); v21 = 0; if ( *v5 > 0u ) { do sub_86CB50((char *)(v3[5] + 8 * (unsigned __int16)v21++), v2); while ( (unsigned __int16)v21 < *v5 ); } } v12 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) >= 0x4010000u ) { v15 = *(_DWORD *)(v2 + 352); v16 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v12 + 4); v21 = 1; v16(v15, &v22, 1, &v21, 1); } else { v13 = *(_DWORD *)(v2 + 352); v14 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v12 + 4); v21 = 4; v14(v13, v3 + 6, 4, &v21, 1); v22 = v3[6] != 0; } if ( v22 ) { v21 = (unsigned __int16)*v5; v17 = (char *)operator new(16 * v21); if ( v17 ) { v18 = v21 - 1; if ( v21 - 1 >= 0 ) { v19 = (int)(v17 + 8); do { *(float *)(v19 - 8) = 0.0; v19 += 16; --v18; *(float *)(v19 - 20) = 0.0; *(float *)(v19 - 16) = 0.0; *(float *)(v19 - 12) = 0.0; } while ( v18 >= 0 ); } } else { v17 = 0; } v3[6] = (int)v17; v21 = 0; if ( *v5 > 0u ) { do sub_8752B0((char *)(v3[6] + 16 * (unsigned __int16)v21++), v2); while ( (unsigned __int16)v21 < *v5 ); } } return sub_876350((void **)v2); } //----- (00881F80) -------------------------------------------------------- int __thiscall sub_881F80(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // esi int result; // eax int v5; // edi volatile LONG *v6; // esi volatile LONG **v7; // ebx volatile LONG *v8; // edi int v9; // [esp+8h] [ebp-8h] _DWORD *v10; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v10 = this; nullsub_32(a2); result = sub_875B00(a2); if ( result ) { while ( 1 ) { v5 = v3[2]; v9 = result - 1; v6 = (volatile LONG *)sub_875AD0(v2); if ( v6 ) { v7 = (volatile LONG **)(v5 + 4 * (*(int (__thiscall **)(volatile LONG *))(*v6 + 60))(v6) + 8); v8 = *v7; if ( *v7 != v6 ) { if ( v8 && !InterlockedDecrement(v8 + 1) ) { if ( v8 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v8)(v8, 1); } *v7 = v6; InterlockedIncrement(v6 + 1); } } result = v9; if ( !v9 ) break; v2 = a2; v3 = v10; } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00882010) -------------------------------------------------------- unsigned int __thiscall sub_882010(char *this, _DWORD *a2) { _DWORD *v2; // esi char *v3; // edi void (__cdecl *v4)(int, char *, signed int, int *, signed int); // edx _WORD *v5; // ebx int v6; // ST00_4 int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, bool *, signed int, int *, signed int); // edx int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int result; // eax int v16; // ebx unsigned int v17; // [esp+Ch] [ebp-Ch] int v18; // [esp+10h] [ebp-8h] bool v19; // [esp+17h] [ebp-1h] v2 = a2; v3 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2[89] + 8); v5 = v3 + 12; v6 = v2[89]; v18 = 2; v4(v6, v3 + 12, 2, &v18, 1); v18 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do sub_860940((char *)(*((_DWORD *)v3 + 4) + 12 * (unsigned __int16)v18++), (signed int)v2); while ( (unsigned __int16)v18 < *v5 ); } HIBYTE(a2) = *((_DWORD *)v3 + 5) != 0; v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v18 = 1; v9(v8, (char *)&a2 + 3, 1, &v18, 1); if ( HIBYTE(a2) ) { v18 = 0; if ( *v5 > 0u ) { do sub_86CBA0((char *)(*((_DWORD *)v3 + 5) + 8 * (unsigned __int16)v18++), (signed int)v2); while ( (unsigned __int16)v18 < *v5 ); } } v10 = v2[89]; v19 = *((_DWORD *)v3 + 6) != 0; v11 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v10 + 8); v18 = 1; v11(v10, &v19, 1, &v18, 1); if ( v19 ) { v18 = 0; if ( *v5 > 0u ) { do sub_8609B0((char *)(*((_DWORD *)v3 + 6) + 16 * (unsigned __int16)v18++), (signed int)v2); while ( (unsigned __int16)v18 < *v5 ); } } v12 = v2[89]; v17 = 12; v13 = v12; v14 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v12 + 8); v18 = 4; v14(v13, &v17, 4, &v18, 1); result = v17; if ( v17 ) { v16 = 0; if ( v17 ) { result = 0; do { (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)(*((_DWORD *)v3 + 2) + 4 * result + 8)); result = (unsigned __int16)++v16; } while ( (unsigned __int16)v16 < v17 ); } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00882190) -------------------------------------------------------- char __thiscall sub_882190(_WORD *this, int a2) { _WORD *v2; // esi unsigned __int16 v4; // ax unsigned __int16 v5; // di int v6; // edx int v7; // esi int v8; // ecx int v9; // esi int v10; // ecx unsigned __int16 v11; // bx unsigned __int16 v12; // dx int v13; // edi int v14; // ecx _DWORD *v15; // esi int v16; // edx unsigned __int16 v17; // bx unsigned __int16 v18; // di int v19; // esi int v20; // esi unsigned __int16 v21; // ax _WORD *v22; // [esp+8h] [ebp-4h] v2 = this; v22 = this; if ( !sub_85BB20(this, a2) ) return 0; v4 = v2[6]; if ( v4 != *(_WORD *)(a2 + 12) ) return 0; v5 = 0; if ( v4 > 0u ) { v6 = *(_DWORD *)(a2 + 16); v7 = *((_DWORD *)v2 + 4); while ( 1 ) { v8 = 12 * v5; if ( *(float *)(v6 + v8) != *(float *)(v7 + v8) || *(float *)(v6 + v8 + 4) != *(float *)(v7 + v8 + 4) || *(float *)(v6 + v8 + 8) != *(float *)(v7 + v8 + 8) ) { return 0; } if ( ++v5 >= v4 ) { v2 = v22; break; } } } v9 = *((_DWORD *)v2 + 5); v10 = a2; if ( v9 ) { if ( !*(_DWORD *)(a2 + 20) ) return 0; if ( v9 ) goto LABEL_42; } if ( *(_DWORD *)(a2 + 20) ) return 0; if ( v9 ) { LABEL_42: v11 = v22[6]; v12 = 0; if ( v11 > 0u ) { v13 = *(_DWORD *)(a2 + 20); do { v14 = 8 * v12; if ( *(float *)(v13 + v14) != *(float *)(v14 + v9) || *(float *)(v13 + v14 + 4) != *(float *)(v14 + v9 + 4) ) return 0; } while ( ++v12 < v11 ); } v10 = a2; } v15 = v22; v16 = *((_DWORD *)v22 + 6); if ( v16 ) { if ( !*(_DWORD *)(v10 + 24) ) return 0; if ( v16 ) goto LABEL_27; } if ( !*(_DWORD *)(v10 + 24) ) { if ( !v16 ) { LABEL_35: v20 = v15[2]; v21 = 0; while ( *(_DWORD *)(v20 + 4 * v21 + 8) == *(_DWORD *)(*(_DWORD *)(v10 + 8) + 4 * v21 + 8) ) { if ( ++v21 >= 0xCu ) return 1; } return 0; } LABEL_27: v17 = v22[6]; v18 = 0; if ( v17 > 0u ) { v19 = *(_DWORD *)(v10 + 24); while ( *(float *)(v19 + 16 * v18) == *(float *)(v16 + 16 * v18) && *(float *)(v19 + 16 * v18 + 4) == *(float *)(v16 + 16 * v18 + 4) && *(float *)(v19 + 16 * v18 + 8) == *(float *)(v16 + 16 * v18 + 8) && *(float *)(v19 + 16 * v18 + 12) == *(float *)(v16 + 16 * v18 + 12) ) { if ( ++v18 >= v17 ) { v15 = v22; v10 = a2; goto LABEL_35; } } return 0; } goto LABEL_35; } return 0; } //----- (00882370) -------------------------------------------------------- void __thiscall sub_882370(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A26CEC: using guessed type void *NiTArray>::`vftable'; //----- (008823D0) -------------------------------------------------------- void __thiscall sub_8823D0(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A26CF4: using guessed type void *NiTArray>::`vftable'; //----- (00882430) -------------------------------------------------------- void *__thiscall sub_882430(void *this, char a2) { void *v2; // esi v2 = this; sub_882370(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00882460) -------------------------------------------------------- void *__thiscall sub_882460(void *this, char a2) { void *v2; // esi v2 = this; sub_8823D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00882490) -------------------------------------------------------- int *__thiscall sub_882490(void **this, unsigned int a2) { void **v2; // esi int *v3; // eax _DWORD *v4; // edi int *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = (int *)operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_881610(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 20; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = (int)v2[5]; v2[5] = result; return result; } //----- (00882580) -------------------------------------------------------- void sub_882580() { void *v0; // esi v0 = dword_BA4AE8; if ( dword_BA4AE8 ) { sub_8B6100((void **)dword_BA4AE8); operator delete(v0); } } //----- (008825A0) -------------------------------------------------------- unsigned int __thiscall sub_8825A0(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_87A7B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4AEC); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"m_bPixelAccurate", *((_BYTE *)v3 + 88)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"Num Elements", *((_DWORD *)v3 + 28)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (00882660) -------------------------------------------------------- unsigned int __thiscall sub_882660(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_866F80(this, a2); v3 = sub_8784D0(*(int *)dword_BA4AF4); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008826B0) -------------------------------------------------------- unsigned int __thiscall sub_8826B0(void *this, signed int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx int v14; // edi int *v15; // eax char *v16; // eax unsigned int v17; // edi char *v18; // ebx unsigned int result; // eax void *v20; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v20 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4AFC); v5 = v2[3]; a2 = (signed int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usVertices", *((_WORD *)v3 + 6)); v7 = v2[3]; a2 = (signed int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_pkVertex", *((_DWORD *)v3 + 4)); v9 = v2[3]; a2 = (signed int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878700((int)"m_pkTexture", *((_DWORD *)v3 + 5)); v11 = v2[3]; a2 = (signed int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_878700((int)"m_pkColor", *((_DWORD *)v3 + 6)); v13 = v2[3]; a2 = (signed int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); a2 = 8; while ( 1 ) { v14 = *(_DWORD *)(a2 + *((_DWORD *)v3 + 2)); v15 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v14 + 4))(v14); v16 = sub_878700(*v15, v14); v17 = v2[3]; v18 = v16; if ( v17 < v2[2] || (sub_8237A0(v2, v17 + v2[5]), v17 < v2[2]) ) { if ( v17 < v2[3] ) { if ( v18 ) { if ( !*(_DWORD *)(v2[1] + 4 * v17) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v17) ) { --v2[4]; } } else { v2[3] = v17 + 1; if ( v18 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v17) = v18; } result = a2 + 4; a2 = result; if ( result >= 0x38 ) break; v3 = v20; } return result; } //----- (00882870) -------------------------------------------------------- _DWORD *__thiscall sub_882870(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax v1 = this; sub_862BA0(this); *v1 = &NiScreenSpaceCamera::`vftable'; v1[74] = &NiTArray>::`vftable'; v1[76] = 5; v1[79] = 5; v1[77] = 0; v1[78] = 0; v2 = operator new(0x18u); if ( v2 ) { *v2 = 5; v3 = v2 + 1; *v3 = 0; v3[1] = 0; v3[2] = 0; v3[3] = 0; v3[4] = 0; } else { v3 = 0; } v1[75] = v3; v1[80] = &NiTArray>::`vftable'; v1[82] = 5; v1[85] = 5; v1[83] = 0; v1[84] = 0; v4 = operator new(0x18u); if ( v4 ) { *v4 = 5; v5 = v4 + 1; *v5 = 0; v5[1] = 0; v5[2] = 0; v5[3] = 0; v5[4] = 0; } else { v5 = 0; } v1[81] = v5; *((_BYTE *)v1 + 264) = 1; sub_862A80(v1); sub_862500(v1); return v1; } // A26CEC: using guessed type void *NiTArray>::`vftable'; // A26CF4: using guessed type void *NiTArray>::`vftable'; // A26D24: using guessed type void *NiScreenSpaceCamera::`vftable'; //----- (00882980) -------------------------------------------------------- char *sub_882980() { return dword_BA4B04; } //----- (00882990) -------------------------------------------------------- LONG __thiscall sub_882990(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx unsigned int v3; // edi int v5; // [esp+Ch] [ebp-4h] v1 = this; v2 = 0; *this = &NiScreenSpaceCamera::`vftable'; if ( this[77] ) { v5 = 0; do sub_7FFF10(v1 + 74, v2++, &v5); while ( v2 < v1[77] ); } sub_80C6B0(v1 + 74); v3 = 0; if ( v1[83] ) { v5 = 0; do sub_7FFF10(v1 + 80, v3++, &v5); while ( v3 < v1[83] ); } sub_80C6B0(v1 + 80); sub_8823D0(v1 + 80); sub_882370(v1 + 74); return sub_861DC0(v1); } // A26D24: using guessed type void *NiScreenSpaceCamera::`vftable'; //----- (00882A30) -------------------------------------------------------- LONG __thiscall sub_882A30(_WORD *this, int a2, _DWORD **a3) { int v3; // edi _DWORD *v4; // ebx unsigned int v5; // esi volatile LONG *v6; // edi int v7; // esi LONG result; // eax unsigned int v9; // esi volatile LONG *v10; // edi int v11; // esi int v12; // [esp+Ch] [ebp-8h] unsigned int v13; // [esp+10h] [ebp-4h] _DWORD *v14; // [esp+1Ch] [ebp+8h] v3 = a2; v4 = this; sub_862890(this, a2, a3); sub_81A750((_DWORD *)(a2 + 296), v4[77]); v5 = 0; *(_DWORD *)(a2 + 316) = v4[79]; v13 = 0; if ( v4[77] ) { do { v6 = *(volatile LONG **)(v4[75] + 4 * v5); if ( v6 ) { InterlockedIncrement(v6 + 1); v7 = (*(int (__thiscall **)(volatile LONG *, _DWORD **))(*v6 + 8))(v6, a3); v12 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); sub_7FFF10((_DWORD *)(a2 + 296), v13, &v12); if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); if ( !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v5 = v13; } else { v12 = 0; sub_7FFF10((_DWORD *)(a2 + 296), v5, &v12); } v13 = ++v5; } while ( v5 < v4[77] ); v3 = a2; } v14 = (_DWORD *)(v3 + 320); sub_81A750((_DWORD *)(v3 + 320), v4[83]); result = v4[85]; v9 = 0; *(_DWORD *)(v3 + 340) = result; v13 = 0; if ( v4[83] ) { do { v10 = *(volatile LONG **)(v4[81] + 4 * v9); if ( v10 ) { InterlockedIncrement(v10 + 1); v11 = (*(int (__thiscall **)(volatile LONG *, _DWORD **))(*v10 + 8))(v10, a3); v12 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); sub_7FFF10(v14, v13, &v12); if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); result = InterlockedDecrement(v10 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); v9 = v13; } else { v12 = 0; result = sub_7FFF10(v14, v9, &v12); } v13 = ++v9; } while ( v9 < v4[83] ); } return result; } //----- (00882C20) -------------------------------------------------------- _DWORD *sub_882C20() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x158u); if ( v0 ) result = sub_882870(v0); else result = 0; return result; } //----- (00882C40) -------------------------------------------------------- unsigned int __thiscall sub_882C40(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_863120(this, a2); v3 = sub_8784D0(*(int *)dword_BA4B04); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00882C90) -------------------------------------------------------- LONG __thiscall sub_882C90(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // eax void **v3; // ebx unsigned int v4; // eax unsigned int *v5; // edi void ***v6; // edx int v7; // eax void *v8; // eax unsigned int v9; // ecx int v10; // eax bool v11; // zf _DWORD *v12; // eax void *v13; // ST10_4 void *v14; // ST10_4 _DWORD *v16; // [esp+4h] [ebp-8h] int v17; // [esp+8h] [ebp-4h] v1 = this; v2 = 0; *this = &NiScreenGeometryData::`vftable'; v17 = 0; if ( this[27] ) { do { v3 = *(void ***)(v1[25] + 4 * v2); if ( v2 < v1[26] ) { if ( v2 < v1[27] ) { if ( v3 ) --v1[28]; } else { v1[27] = v2 + 1; } *(_DWORD *)(v1[25] + 4 * v2) = 0; } if ( v3 ) { operator delete(v3[2]); operator delete(v3[3]); operator delete(v3[4]); v4 = 0; v5 = (unsigned int *)((char *)dword_BA4AE8 + 8); v16 = dword_BA4AE8; if ( !*((_DWORD *)dword_BA4AE8 + 2) ) goto LABEL_15; v6 = *(void ****)dword_BA4AE8; while ( *v6 != v3 ) { ++v4; ++v6; if ( v4 >= *v5 ) goto LABEL_15; } if ( v4 == -1 ) { LABEL_15: v7 = *((_DWORD *)dword_BA4AE8 + 1); if ( *v5 == v7 ) { if ( v7 ) v8 = (void *)(2 * v7); else v8 = (void *)1; sub_811D30((void **)dword_BA4AE8, v8); } *(_DWORD *)(*v16 + 4 * (*v5)++) = v3; } v2 = v17; } v17 = ++v2; } while ( v2 < v1[27] ); } if ( v1[26] ) { if ( v1[27] > 0u ) { v9 = 0; do { v10 = v1[25]; v11 = *(_DWORD *)(v10 + 4 * v9) == 0; v12 = (_DWORD *)(v10 + 4 * v9); if ( !v11 ) { *v12 = 0; --v1[28]; } ++v9; } while ( v9 < v1[27] ); v1[27] = 0; } v13 = (void *)v1[25]; v1[26] = 0; v1[25] = 0; operator delete(v13); } v14 = (void *)v1[25]; v1[24] = &NiTArray::`vftable'; operator delete(v14); return sub_87EDF0(v1); } // A26C40: using guessed type void *NiTArray::`vftable'; // A26C4C: using guessed type void *NiScreenGeometryData::`vftable'; //----- (00882DC0) -------------------------------------------------------- void __thiscall sub_882DC0(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax void (__cdecl *v7)(int, unsigned __int16 *, signed int, _DWORD **, signed int); // edx int v8; // ST14_4 int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, int *, signed int, _DWORD **, signed int); // eax int v12; // eax int v13; // ST14_4 void (__cdecl *v14)(int, unsigned __int16 *, signed int, _DWORD **, signed int); // eax unsigned __int16 v15; // ax int v16; // edi void *v17; // eax int v18; // ST18_4 void *v19; // ST14_4 void (__cdecl *v20)(int, void *, int, _DWORD **, signed int); // eax int v21; // ST10_4 int v22; // eax int v23; // ST14_4 void (__cdecl *v24)(int, unsigned int *, signed int, _DWORD **, signed int); // eax int v25; // eax int v26; // ST14_4 void (__cdecl *v27)(int, int *, signed int, signed int *, signed int); // eax int v28; // eax int v29; // ST14_4 void (__cdecl *v30)(int, char *, signed int, _DWORD **, signed int); // eax void *v31; // eax int v32; // ecx void *v33; // ST14_4 void (__cdecl *v34)(int, void *, int, _DWORD **, signed int); // eax int v35; // eax int v36; // ST14_4 void (__cdecl *v37)(int, char *, signed int, _DWORD **, signed int); // eax int v38; // esi char *v39; // eax int v40; // edx int v41; // ecx void (__cdecl *v42)(int, char *, int, _DWORD **, signed int); // edx int v43; // ST14_4 int v44; // eax int v45; // ST14_4 void (__cdecl *v46)(int, int *, signed int, _DWORD **, signed int); // eax int v47; // esi void *v48; // eax int v49; // ecx void *v50; // ST14_4 void (__cdecl *v51)(int, void *, int, _DWORD **, signed int); // eax _DWORD *v52; // edi int **v53; // esi unsigned int v54; // ST24_4 int *v55; // eax int v56; // esi int v57; // edx void *v58; // ST20_4 void *v59; // ST1C_4 unsigned int v60; // edx _DWORD *v61; // eax _DWORD *v62; // [esp+Ch] [ebp-2Ch] _DWORD *v63; // [esp+10h] [ebp-28h] signed int v64; // [esp+14h] [ebp-24h] int v65; // [esp+18h] [ebp-20h] int v66; // [esp+1Ch] [ebp-1Ch] unsigned int v67; // [esp+20h] [ebp-18h] unsigned int v68; // [esp+24h] [ebp-14h] char *v69; // [esp+28h] [ebp-10h] int v70; // [esp+2Ch] [ebp-Ch] unsigned __int16 v71; // [esp+30h] [ebp-8h] char v72; // [esp+37h] [ebp-1h] v2 = a2; v3 = this; if ( *(_DWORD *)(a2 + 28) >= 0xA00010Fu ) sub_87EEC0(this, a2); else sub_87A050(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 4); v63 = (_DWORD *)1; v6(v5, (char *)&a2 + 3, 1, &v63, 1); *((_BYTE *)v3 + 88) = HIBYTE(a2) != 0; if ( *(_DWORD *)(v2 + 28) < 0xA00010Fu ) { v7 = *(void (__cdecl **)(int, unsigned __int16 *, signed int, _DWORD **, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); v63 = (_DWORD *)2; v7(v8, &v71, 2, &v63, 1); *((_WORD *)v3 + 6) = v71; v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v9 + 4); v63 = (_DWORD *)2; v11(v10, v3 + 16, 2, &v63, 1); } if ( *(_DWORD *)(v2 + 28) < 0xA00010Fu ) { v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(void (__cdecl **)(int, unsigned __int16 *, signed int, _DWORD **, signed int))(v12 + 4); v63 = (_DWORD *)2; v14(v13, &v71, 2, &v63, 1); v15 = v71; v16 = v71; v3[17] = v71; if ( v15 ) { v17 = operator new(2 * v16); v18 = 2 * v71; v3[18] = (int)v17; v19 = v17; v20 = *(void (__cdecl **)(int, void *, int, _DWORD **, signed int))(*(_DWORD *)(v2 + 352) + 4); v21 = *(_DWORD *)(v2 + 352); v63 = (_DWORD *)2; v20(v21, v19, v18, &v63, 1); } } v22 = *(_DWORD *)(v2 + 352); v67 = 0; v23 = v22; v24 = *(void (__cdecl **)(int, unsigned int *, signed int, _DWORD **, signed int))(v22 + 4); v63 = (_DWORD *)4; v24(v23, &v67, 4, &v63, 1); if ( v67 ) { v63 = v3 + 24; sub_8237A0(v3 + 24, v67); v68 = 0; if ( v67 > 0 ) { while ( 1 ) { v25 = *(_DWORD *)(v2 + 352); v70 = 0; v26 = v25; v27 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v25 + 4); v64 = 2; v27(v26, &v70, 2, &v64, 1); if ( !(_WORD)v70 ) goto LABEL_32; v28 = *(_DWORD *)(v2 + 352); v66 = 0; v29 = v28; v30 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v28 + 4); v65 = 0; v69 = 0; v64 = 0; v62 = (_DWORD *)1; v30(v29, &v72, 1, &v62, 1); if ( v72 ) { v31 = operator new(8 * (unsigned __int16)v70); v32 = *(_DWORD *)(v2 + 352); v33 = v31; v65 = (int)v31; v34 = *(void (__cdecl **)(int, void *, int, _DWORD **, signed int))(v32 + 4); v62 = (_DWORD *)8; v34(v32, v33, 8 * (unsigned __int16)v70, &v62, 1); } v35 = *(_DWORD *)(v2 + 352); v36 = v35; v37 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v35 + 4); v62 = (_DWORD *)1; v37(v36, (char *)&v71 + 1, 1, &v62, 1); if ( HIBYTE(v71) ) { v38 = (unsigned __int16)v70; v39 = (char *)operator new(16 * (unsigned __int16)v70); if ( v39 ) { v40 = v38 - 1; if ( v38 - 1 >= 0 ) { v41 = (int)(v39 + 8); do { *(float *)(v41 - 8) = 0.0; v41 += 16; --v40; *(float *)(v41 - 20) = 0.0; *(float *)(v41 - 16) = 0.0; *(float *)(v41 - 12) = 0.0; } while ( v40 >= 0 ); } v69 = v39; } else { v69 = 0; } v42 = *(void (__cdecl **)(int, char *, int, _DWORD **, signed int))(*(_DWORD *)(v2 + 352) + 4); v43 = *(_DWORD *)(v2 + 352); v62 = (_DWORD *)16; v42(v43, v69, 16 * (unsigned __int16)v70, &v62, 1); } v44 = *(_DWORD *)(v2 + 352); v45 = v44; v46 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v44 + 4); v62 = (_DWORD *)2; v46(v45, &v66, 2, &v62, 1); if ( (_WORD)v66 ) { v47 = (unsigned __int16)v70 * (unsigned __int16)v66; v48 = operator new(8 * v47); v49 = *(_DWORD *)(v2 + 352); v50 = v48; v64 = (signed int)v48; v51 = *(void (__cdecl **)(int, void *, int, _DWORD **, signed int))(v49 + 4); v62 = (_DWORD *)8; v51(v49, v50, 8 * v47, &v62, 1); } v52 = (char *)dword_BA4AE8 + 8; v53 = (int **)dword_BA4AE8; if ( !*((_DWORD *)dword_BA4AE8 + 2) ) { v54 = *((_DWORD *)dword_BA4AE8 + 3); v62 = (char *)dword_BA4AE8 + 12; sub_882490((void **)dword_BA4AE8, v54); *v62 *= 2; } v55 = *v53; v56 = **v53; *v55 = v55[--*v52]; operator delete(*(void **)(v56 + 8)); v57 = v65; v58 = *(void **)(v56 + 12); *(_WORD *)(v56 + 4) = v70; *(_DWORD *)(v56 + 8) = v57; operator delete(v58); v59 = *(void **)(v56 + 16); *(_DWORD *)(v56 + 12) = v69; operator delete(v59); v60 = v68; *(_DWORD *)(v56 + 16) = v64; v61 = v63; *(_WORD *)(v56 + 6) = v66; if ( v60 >= v61[2] ) goto LABEL_32; if ( v60 >= v61[3] ) break; if ( !*(_DWORD *)(v61[1] + 4 * v60) ) goto LABEL_30; LABEL_31: *(_DWORD *)(v61[1] + 4 * v60) = v56; LABEL_32: if ( ++v68 >= v67 ) return; } v61[3] = v60 + 1; LABEL_30: ++v61[4]; goto LABEL_31; } } } //----- (008831A0) -------------------------------------------------------- void *__thiscall sub_8831A0(void *this, char a2) { void *v2; // esi v2 = this; sub_882990(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008831D0) -------------------------------------------------------- _DWORD *__thiscall sub_8831D0(_WORD *this, _DWORD **a2) { _WORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x158u); if ( v3 ) { v4 = sub_882870(v3); sub_882A30(v2, (int)v4, a2); result = v4; } else { sub_882A30(v2, 0, a2); result = 0; } return result; } //----- (00883220) -------------------------------------------------------- unsigned int __thiscall sub_883220(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx unsigned int v3; // edi unsigned int v4; // eax unsigned int v5; // edi _DWORD *v6; // esi int v7; // eax unsigned int v8; // ebx LONG *v10; // [esp+Ch] [ebp-Ch] LONG *v11; // [esp+Ch] [ebp-Ch] unsigned int v12; // [esp+10h] [ebp-8h] _DWORD *v13; // [esp+14h] [ebp-4h] unsigned int v14; // [esp+20h] [ebp+8h] unsigned int v15; // [esp+20h] [ebp+8h] v2 = this; v13 = this; sub_862A90(this, a2); v3 = 0; v14 = v2[77]; if ( v14 ) { do { v4 = v2[77]; v10 = (LONG *)(v2[75] + 4 * v3); v12 = v4; if ( v4 >= v2[76] ) { sub_81A750(v2 + 74, v4 + v2[79]); v4 = v12; } sub_7FFF10(v2 + 74, v4, v10); ++v3; } while ( v3 < v14 ); } sub_80C6B0(v2 + 74); v5 = 0; v15 = v2[83]; if ( v15 ) { v6 = v2 + 80; do { v7 = v2[81]; v8 = v6[3]; v11 = (LONG *)(v7 + 4 * v5); if ( v8 >= v6[2] ) sub_81A750(v6, v8 + v6[5]); sub_7FFF10(v6, v8, v11); v2 = v13; ++v5; } while ( v5 < v15 ); } return sub_80C6B0(v2 + 80); } //----- (00883310) -------------------------------------------------------- void *__thiscall sub_883310(void *this, char a2) { void *v2; // esi v2 = this; sub_882C90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00883340) -------------------------------------------------------- float *sub_883340() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x1Cu); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); v1[6] = 0.0; *(_DWORD *)v1 = &NiVectorExtraData::`vftable'; v1[5] = 0.0; result = v1; v1[4] = 0.0; v1[3] = 0.0; return result; } // A26D9C: using guessed type void *NiVectorExtraData::`vftable'; //----- (00883380) -------------------------------------------------------- bool __thiscall sub_883380(float *this, float *a2) { return a2 && a2[3] == this[3] && a2[4] == this[4] && a2[5] == this[5] && a2[6] == this[6]; } //----- (008833E0) -------------------------------------------------------- char *sub_8833E0() { return dword_BA4B0C; } //----- (008833F0) -------------------------------------------------------- void *__thiscall sub_8833F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiVectorExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A26D9C: using guessed type void *NiVectorExtraData::`vftable'; //----- (00883420) -------------------------------------------------------- int __thiscall sub_883420(float *this, _DWORD **a2) { float *v2; // edi _DWORD *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = operator new(0x1Cu); v4 = (int)v3; if ( v3 ) { sub_868D00(v3); *(float *)(v4 + 24) = 0.0; *(_DWORD *)v4 = &NiVectorExtraData::`vftable'; *(float *)(v4 + 20) = 0.0; *(float *)(v4 + 16) = 0.0; *(float *)(v4 + 12) = 0.0; } else { v4 = 0; } sub_868EF0(v2, v4, a2); *(float *)(v4 + 12) = v2[3]; result = v4; *(float *)(v4 + 16) = v2[4]; *(float *)(v4 + 20) = v2[5]; *(float *)(v4 + 24) = v2[6]; return result; } // A26D9C: using guessed type void *NiVectorExtraData::`vftable'; //----- (00883490) -------------------------------------------------------- int __thiscall sub_883490(int *this, size_t a2) { signed int v2; // edi float *v3; // esi int result; // eax int v5; // eax int v6; // ST3C_4 void (__cdecl *v7)(int, float *, signed int, size_t *, signed int); // eax int v8; // eax int v9; // ST28_4 void (__cdecl *v10)(int, float *, signed int, size_t *, signed int); // eax int v11; // eax int v12; // ST14_4 void (__cdecl *v13)(int, float *, signed int, size_t *, signed int); // eax int v14; // edi int (__cdecl *v15)(int, float *, signed int, size_t *, signed int); // edx float v16; // [esp+8h] [ebp-Ch] float v17; // [esp+Ch] [ebp-8h] float v18; // [esp+10h] [ebp-4h] v2 = a2; v3 = (float *)this; sub_868F80(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0x500000Eu ) { v5 = *(_DWORD *)(v2 + 352); v6 = v5; v7 = *(void (__cdecl **)(int, float *, signed int, size_t *, signed int))(v5 + 4); a2 = 4; v7(v6, v3 + 3, 4, &a2, 1); v8 = *(_DWORD *)(v2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, float *, signed int, size_t *, signed int))(v8 + 4); a2 = 4; v10(v9, v3 + 4, 4, &a2, 1); v11 = *(_DWORD *)(v2 + 352); v12 = v11; v13 = *(void (__cdecl **)(int, float *, signed int, size_t *, signed int))(v11 + 4); a2 = 4; v13(v12, v3 + 5, 4, &a2, 1); v14 = *(_DWORD *)(v2 + 352); v15 = *(int (__cdecl **)(int, float *, signed int, size_t *, signed int))(v14 + 4); a2 = 4; result = v15(v14, v3 + 6, 4, &a2, 1); } else { result = sub_8608D0((char *)&v16, v2); v3[3] = v16; v3[4] = v17; v3[5] = v18; v3[6] = 0.0; } return result; } //----- (00883550) -------------------------------------------------------- int __thiscall sub_883550(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, _DWORD **, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, _DWORD **, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, _DWORD **, signed int); // eax int v13; // edi int (__cdecl *v14)(int, const char **, signed int, _DWORD **, signed int); // edx v2 = a2; v3 = this; sub_868DB0(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)4; v6(v5, v3 + 3, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v7 + 8); a2 = (_DWORD *)4; v9(v8, v3 + 4, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v10 + 8); a2 = (_DWORD *)4; v12(v11, v3 + 5, 4, &a2, 1); v13 = v2[89]; v14 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v13 + 8); a2 = (_DWORD *)4; return v14(v13, v3 + 6, 4, &a2, 1); } //----- (008835E0) -------------------------------------------------------- unsigned int __thiscall sub_8835E0(float *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax double v7; // ST24_8 unsigned int v8; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B0C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = (char *)operator new(0x37u); v7 = v3[6]; a2 = v6; sub_7FF6E0(v6, 0x37u, "Vector = (%5.3f,%5.3f,%5.3f,%5.3f)", v3[3], v3[4], v3[5], v7); v8 = *((_DWORD *)v2 + 3); if ( v8 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v8 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v8, &a2); } //----- (00883690) -------------------------------------------------------- BOOL __thiscall sub_883690(float *this, float *a2) { return *a2 != *this || a2[1] != this[1] || a2[2] != this[2] || a2[3] != this[3]; } //----- (008836F0) -------------------------------------------------------- float *__thiscall sub_8836F0(float *this) { float *v1; // ebx v1 = this; sub_8615A0(this); *(_DWORD *)v1 = &NiTextureEffect::`vftable'; qmemcpy(v1 + 56, &unk_ABD440, 0x24u); v1[65] = 0.0; v1[66] = 0.0; v1[67] = 0.0; qmemcpy(v1 + 68, &unk_ABD440, 0x24u); v1[77] = 0.0; v1[78] = 0.0; v1[79] = 0.0; v1[80] = 0.0; sub_8736D0(v1 + 86, (int)&dword_ABD48C, 0.0); sub_8736D0(v1 + 90, (int)&dword_ABD48C, 0.0); v1[81] = 0.0; v1[83] = 0.0; v1[84] = 0.0; *((_DWORD *)v1 + 82) = 3; *((_BYTE *)v1 + 340) = 0; return v1; } // A26E0C: using guessed type void *NiTextureEffect::`vftable'; // ABD48C: using guessed type int dword_ABD48C; //----- (008837B0) -------------------------------------------------------- char *sub_8837B0() { return dword_BA4B14; } //----- (008837D0) -------------------------------------------------------- float __userpurge sub_8837D0@(int this@) { int v1; // ebx int v2; // eax float *v3; // eax float *v4; // eax float *v5; // eax float v6; // edx double v7; // st7 float *v8; // eax float v9; // edx float result; // eax float v11; // ecx double v12; // st7 double v13; // st6 double v14; // st6 char v15; // [esp+10h] [ebp-98h] float v16; // [esp+1Ch] [ebp-8Ch] float v17; // [esp+20h] [ebp-88h] float v18; // [esp+24h] [ebp-84h] float v19; // [esp+28h] [ebp-80h] float v20; // [esp+2Ch] [ebp-7Ch] float v21; // [esp+30h] [ebp-78h] float v22; // [esp+34h] [ebp-74h] int v23; // [esp+38h] [ebp-70h] char v24; // [esp+5Ch] [ebp-4Ch] char v25; // [esp+80h] [ebp-28h] v1 = this; v2 = *(_DWORD *)(this + 336); if ( v2 == 2 ) { *(float *)(this + 312) = 0.5; *(float *)(this + 308) = 0.5; *(float *)(this + 316) = 0.0; v22 = *(float *)(this + 108); *(float *)(this + 272) = *(float *)(this + 112) * 0.5; *(float *)(this + 284) = v22 * -0.5; *(float *)(this + 296) = 0.0; v22 = *(float *)(this + 120); *(float *)(this + 276) = *(float *)(this + 124) * 0.5; *(float *)(this + 288) = v22 * -0.5; *(float *)(this + 300) = 0.0; v22 = *(float *)(this + 132); *(float *)(this + 280) = 0.5 * *(float *)(this + 136); *(float *)(this + 292) = -0.5 * v22; *(float *)(this + 304) = 0.0; } else if ( v2 == 3 || v2 == 4 ) { *(float *)(this + 316) = 0.0; *(float *)(this + 312) = 0.0; *(float *)(this + 308) = 0.0; v8 = sub_85DCC0((float *)(this + 104), (float *)&v25); qmemcpy((void *)(v1 + 272), sub_85D940((float *)(v1 + 224), (float *)&v24, v8), 0x24u); } else { v22 = 1.0 / *(float *)(this + 152); v3 = sub_85DCC0((float *)(this + 104), (float *)&v24); v4 = sub_85D940((float *)(v1 + 224), (float *)&v25, v3); qmemcpy((void *)(v1 + 272), (const void *)sub_85DA30(v4, (int)&v23, v22), 0x24u); v5 = sub_85DA90((float *)(v1 + 272), (float *)&v15, (float *)(v1 + 140)); v16 = *(float *)(v1 + 260) - *v5; v17 = *(float *)(v1 + 264) - v5[1]; v6 = v17; v7 = *(float *)(v1 + 268) - v5[2]; *(float *)(v1 + 308) = v16; *(float *)(v1 + 312) = v6; v18 = v7; *(float *)(v1 + 316) = v18; } sub_85DA90((float *)(v1 + 104), &v19, (float *)(v1 + 344)); v9 = v19; result = v20; v11 = v21; v12 = *(float *)(v1 + 144) * v20 + v19 * *(float *)(v1 + 140); v13 = *(float *)(v1 + 148); ++*(_DWORD *)(v1 + 188); v14 = v13 * v21; *(float *)(v1 + 360) = v9; *(float *)(v1 + 364) = result; *(float *)(v1 + 368) = v11; v22 = v12 + v14; v22 = v22 + *(float *)(v1 + 356) * *(float *)(v1 + 152); *(float *)(v1 + 372) = v22; return result; } //----- (00883A30) -------------------------------------------------------- float __userpurge sub_883A30@(void *this@) { int v1; // esi v1 = (int)this; sub_85BE80((int)this); return sub_8837D0(v1); } //----- (00883A40) -------------------------------------------------------- int __thiscall sub_883A40(_WORD *this, int a2, _DWORD **a3) { _WORD *v3; // ebx int v4; // esi int v5; // eax int result; // eax v3 = this; sub_861190(this, a2, a3); v4 = *(_DWORD *)(a2 + 320); if ( v4 != *((_DWORD *)v3 + 80) ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *((_DWORD *)v3 + 80); *(_DWORD *)(a2 + 320) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = a2; qmemcpy((void *)(a2 + 224), v3 + 112, 0x30u); *(_DWORD *)(a2 + 324) = *((_DWORD *)v3 + 81); *(_DWORD *)(a2 + 328) = *((_DWORD *)v3 + 82); *(_DWORD *)(a2 + 332) = *((_DWORD *)v3 + 83); *(_DWORD *)(a2 + 336) = *((_DWORD *)v3 + 84); *(_BYTE *)(a2 + 340) = *((_BYTE *)v3 + 340); *(_DWORD *)(a2 + 344) = *((_DWORD *)v3 + 86); *(_DWORD *)(a2 + 348) = *((_DWORD *)v3 + 87); *(_DWORD *)(a2 + 352) = *((_DWORD *)v3 + 88); *(_DWORD *)(a2 + 356) = *((_DWORD *)v3 + 89); *(_DWORD *)(a2 + 360) = *((_DWORD *)v3 + 90); *(_DWORD *)(a2 + 364) = *((_DWORD *)v3 + 91); *(_DWORD *)(a2 + 368) = *((_DWORD *)v3 + 92); *(_DWORD *)(a2 + 372) = *((_DWORD *)v3 + 93); return result; } //----- (00883B80) -------------------------------------------------------- float *sub_883B80() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x178u); if ( v0 ) result = sub_8836F0(v0); else result = 0; return result; } //----- (00883BA0) -------------------------------------------------------- int __thiscall sub_883BA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_861500(this, a2); result = sub_875AD0(a2); v4 = v2[80]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[80] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (00883C00) -------------------------------------------------------- char __thiscall sub_883C00(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_8AD9A0(this, a2); if ( result ) { v4 = v2[80]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (00883C40) -------------------------------------------------------- char *__cdecl sub_883C40(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 25; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = PROJECTED_LIGHT", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = PROJECTED_SHADOW", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = ENVIRONMENT_MAP", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = FOG_MAP", ArgList); goto LABEL_6; default: LABEL_6: result = v3; break; } return result; } //----- (00883CF0) -------------------------------------------------------- char *__cdecl sub_883CF0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 25; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = WORLD_PARALLEL", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = WORLD_PERSPECTIVE", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = SPHERE_MAP", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = SPECULAR_CUBE_MAP", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = DIFFUSE_CUBE_MAP", ArgList); goto LABEL_7; default: LABEL_7: result = v3; break; } return result; } //----- (00883DB0) -------------------------------------------------------- _DWORD *__thiscall sub_883DB0(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &NiTextureEffect::`vftable'; sub_85F2B0((int)this); v3 = v2[80]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_861430(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A26E0C: using guessed type void *NiTextureEffect::`vftable'; //----- (00883E10) -------------------------------------------------------- float *__thiscall sub_883E10(_WORD *this, _DWORD **a2) { _WORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x178u); if ( v3 ) { v4 = sub_8836F0(v3); sub_883A40(v2, (int)v4, a2); result = v4; } else { sub_883A40(v2, 0, a2); result = 0; } return result; } //----- (00883E60) -------------------------------------------------------- bool __thiscall sub_883E60(float *this, int a2) { float *v2; // esi v2 = this; return sub_8612D0(this, (_DWORD *)a2) && (unsigned __int8)sub_85D560((float *)(a2 + 224), v2 + 56) && !(unsigned __int8)sub_85ECE0((float *)(a2 + 260), v2 + 65) && *(_DWORD *)(a2 + 324) == *((_DWORD *)v2 + 81) && *(_DWORD *)(a2 + 328) == *((_DWORD *)v2 + 82) && *(_DWORD *)(a2 + 332) == *((_DWORD *)v2 + 83) && *(_DWORD *)(a2 + 336) == *((_DWORD *)v2 + 84) && *(_BYTE *)(a2 + 340) == *((_BYTE *)v2 + 340) && !(unsigned __int8)sub_883690((float *)(a2 + 344), v2 + 86); } //----- (00883F10) -------------------------------------------------------- int __thiscall sub_883F10(int *this, signed int a2) { int v2; // esi int *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, int *, signed int); // edx int v8; // ST28_4 int v9; // eax int v10; // ST14_4 void (__cdecl *v11)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v12)(int, int *, signed int, int *, signed int); // edx int v13; // ST00_4 int v14; // eax int v15; // ST3C_4 void (__cdecl *v16)(int, char *, signed int, int *, signed int); // eax int result; // eax void (__cdecl *v18)(int, int *, signed int, int *, signed int); // edx int v19; // ST3C_4 int v20; // eax int v21; // ST28_4 int (__cdecl *v22)(int, int *, signed int, int *, signed int); // eax int v23; // esi int (__cdecl *v24)(int, int *, signed int, int *, signed int); // eax int v25; // [esp+Ch] [ebp-8h] int v26; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_8616E0(this, a2); sub_85EA80((char *)v3 + 224, v2); sub_8608D0((char *)v3 + 260, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v26 = 4; v6(v5, &v25, 4, &v26, 1); v3[81] = v25; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); v25 = 4; v7(v8, &v26, 4, &v25, 1); v3[82] = v26; v9 = *(_DWORD *)(v2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v9 + 4); v25 = 4; v11(v10, &v26, 4, &v25, 1); v3[83] = v26; v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v13 = *(_DWORD *)(v2 + 352); v25 = 4; v12(v13, &v26, 4, &v25, 1); v3[84] = v26; sub_876290((void **)v2); v14 = *(_DWORD *)(v2 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v14 + 4); v25 = 1; v16(v15, (char *)&a2 + 3, 1, &v25, 1); *((_BYTE *)v3 + 340) = HIBYTE(a2) != 0; result = sub_87D5D0((char *)v3 + 344, v2); if ( *(_DWORD *)(v2 + 28) < 0xA030004u ) { v18 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v19 = *(_DWORD *)(v2 + 352); v25 = 2; v18(v19, &v26, 2, &v25, 1); v20 = *(_DWORD *)(v2 + 352); v21 = v20; v22 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v20 + 4); v25 = 2; result = v22(v21, &v26, 2, &v25, 1); } if ( *(_DWORD *)(v2 + 28) < 0x4010010u ) { v23 = *(_DWORD *)(v2 + 352); v24 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v23 + 4); v25 = 2; result = v24(v23, &v26, 2, &v25, 1); } return result; } //----- (00884090) -------------------------------------------------------- int __thiscall sub_884090(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, const char **, signed int, int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, char *, signed int, int *, signed int); // eax int v20; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_8617A0(this, a2); sub_85EAE0((float *)v3 + 56, (int)v2); sub_860940((char *)v3 + 260, (signed int)v2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v4 + 8); v20 = 4; v6(v5, v3 + 81, 4, &v20, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v20 = 4; v9(v8, v3 + 82, 4, &v20, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v10 + 8); v20 = 4; v12(v11, v3 + 83, 4, &v20, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v13 + 8); v20 = 4; v15(v14, v3 + 84, 4, &v20, 1); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[80]); HIBYTE(a2) = *((_BYTE *)v3 + 340); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 8); v20 = 1; v18(v17, (char *)&a2 + 3, 1, &v20, 1); return sub_8737A0((char *)v3 + 344, (signed int)v2); } //----- (00884190) -------------------------------------------------------- unsigned int __thiscall sub_884190(int *this, char *a2) { char *v2; // esi int *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // ebx char *v22; // eax unsigned int v23; // edi v2 = a2; v3 = this; sub_861840(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B14); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_85D6E0((float *)v3 + 56, (int)"m_kModelProjMat"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_85F140((float *)v3 + 65, (int)"m_kModelProjTrans"); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = sub_883C40((int)"m_eTextureMode", v3[83]); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); sub_823870(v2, v11, &a2); v12 = sub_863860((int)"m_eFilter", v3[81]); v13 = *((_DWORD *)v2 + 3); a2 = v12; if ( v13 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v13 + *((_DWORD *)v2 + 5)); sub_823870(v2, v13, &a2); v14 = sub_8637B0((int)"m_eClamp", v3[82]); v15 = *((_DWORD *)v2 + 3); a2 = v14; if ( v15 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v15 + *((_DWORD *)v2 + 5)); sub_823870(v2, v15, &a2); v16 = sub_883C40((int)"m_eTextureMode", v3[83]); v17 = *((_DWORD *)v2 + 3); a2 = v16; if ( v17 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v17 + *((_DWORD *)v2 + 5)); sub_823870(v2, v17, &a2); v18 = sub_883CF0((int)"m_eCoordMode", v3[84]); v19 = *((_DWORD *)v2 + 3); a2 = v18; if ( v19 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v19 + *((_DWORD *)v2 + 5)); sub_823870(v2, v19, &a2); v20 = sub_878510((int)"m_bPlaneEnable", *((_BYTE *)v3 + 340)); v21 = *((_DWORD *)v2 + 3); a2 = v20; if ( v21 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v21 + *((_DWORD *)v2 + 5)); sub_823870(v2, v21, &a2); v22 = sub_873740((float *)v3 + 86, "m_kModelPlane"); v23 = *((_DWORD *)v2 + 3); a2 = v22; if ( v23 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v23 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v23, &a2); } //----- (008843D0) -------------------------------------------------------- char __thiscall sub_8843D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi unsigned int v4; // edx int v5; // ebx int v6; // esi const char *v7; // eax unsigned int v8; // [esp+Ch] [ebp+8h] v2 = a2; if ( !a2 ) return 0; v4 = this[3]; v8 = v4; if ( v4 != v2[3] || this[5] != v2[5] ) return 0; v5 = this[4]; if ( !v5 ) goto LABEL_24; if ( !v2[4] ) return 0; if ( !v5 ) { LABEL_24: if ( v2[4] ) return 0; } if ( !v5 ) return 1; v6 = 0; if ( !v4 ) return 1; while ( 1 ) { v7 = *(const char **)(v5 + 4 * v6); if ( v7 ) { if ( !*(_DWORD *)(v2[4] + 4 * v6) ) return 0; if ( v7 ) break; } if ( *(_DWORD *)(v2[4] + 4 * v6) ) return 0; if ( v7 ) break; LABEL_19: if ( ++v6 >= v4 ) return 1; } if ( !strcmp(v7, *(const char **)(v2[4] + 4 * v6)) ) { v4 = v8; goto LABEL_19; } return 0; } //----- (00884490) -------------------------------------------------------- char *sub_884490() { return dword_BA4B1C; } //----- (008844A0) -------------------------------------------------------- void __thiscall sub_8844A0(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // ebx unsigned int v4; // eax signed int v5; // eax unsigned int v6; // esi int v7; // edx unsigned int v8; // kr00_4 v3 = this; sub_868EF0(this, (int)a2, a3); if ( v3[4] && (v4 = v3[3], v4 > 0) ) { a2[3] = v4; v5 = v3[5]; if ( v5 <= -1 || v5 >= v3[3] ) a2[5] = -1; else a2[5] = v5; v6 = 0; a2[4] = operator new(4 * v3[3]); if ( v3[3] ) { do { v7 = v3[4]; if ( *(_DWORD *)(v7 + 4 * v6) ) { v8 = strlen(*(const char **)(v7 + 4 * v6)); *(_DWORD *)(a2[4] + 4 * v6) = operator new(v8 + 1); strcpy_s(*(char **)(a2[4] + 4 * v6), v8 + 1, *(const char **)(v3[4] + 4 * v6)); } else { *(_DWORD *)(a2[4] + 4 * v6) = 0; } ++v6; } while ( v6 < v3[3] ); } } else { a2[4] = 0; a2[3] = 0; } } //----- (00884580) -------------------------------------------------------- _DWORD *sub_884580() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiSwitchStringExtraData::`vftable'; v1[4] = 0; v1[3] = 0; v1[5] = -1; return v1; } // A26FCC: using guessed type void *NiSwitchStringExtraData::`vftable'; //----- (008845C0) -------------------------------------------------------- _DWORD *__thiscall sub_8845C0(void *this, char a2) { _DWORD *v2; // esi unsigned int v3; // edi v2 = this; v3 = 0; *(_DWORD *)this = &NiSwitchStringExtraData::`vftable'; if ( *((_DWORD *)this + 3) ) { do operator delete(*(void **)(v2[4] + 4 * v3++)); while ( v3 < v2[3] ); } operator delete((void *)v2[4]); v2[4] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A26FCC: using guessed type void *NiSwitchStringExtraData::`vftable'; //----- (00884620) -------------------------------------------------------- _DWORD *__thiscall sub_884620(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x18u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiSwitchStringExtraData::`vftable'; v4[4] = 0; v4[3] = 0; v4[5] = -1; sub_8844A0(v2, v4, a2); result = v4; } else { sub_8844A0(v2, 0, a2); result = 0; } return result; } // A26FCC: using guessed type void *NiSwitchStringExtraData::`vftable'; //----- (00884690) -------------------------------------------------------- int __thiscall sub_884690(int *this, size_t a2) { size_t v2; // edi int *v3; // esi int v4; // eax void (__cdecl *v5)(int, int *, signed int, int *, signed int); // edx unsigned int *v6; // edi unsigned int v7; // ebx int (__cdecl *v8)(int, int *, signed int, size_t *, signed int); // edx int v9; // ST00_4 int v11; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_868F80(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v6 = (unsigned int *)(v3 + 3); v11 = 4; v5(v4, v3 + 3, 4, &v11, 1); v7 = 0; if ( v3[3] ) { v3[4] = (int)operator new(4 * *v6); if ( *v6 > 0 ) { do sub_8769C0((_DWORD *)a2, (_DWORD *)(v3[4] + 4 * v7++)); while ( v7 < *v6 ); } } else { v3[4] = 0; } v8 = *(int (__cdecl **)(int, int *, signed int, size_t *, signed int))(*(_DWORD *)(a2 + 352) + 4); v9 = *(_DWORD *)(a2 + 352); a2 = 4; return v8(v9, v3 + 5, 4, &a2, 1); } //----- (00884740) -------------------------------------------------------- int __thiscall sub_884740(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi void (__cdecl *v4)(int, const char **, signed int, int *, signed int); // edx int v5; // ST00_4 unsigned int v6; // edi int (__cdecl *v7)(int, const char **, signed int, _DWORD **, signed int); // edx int v8; // ST00_4 int v10; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_868DB0(this, a2); v4 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v2[89] + 8); v5 = v2[89]; v10 = 4; v4(v5, v3 + 3, 4, &v10, 1); v6 = 0; if ( v3[3] ) { do sub_876A50(a2, *(const char **)&v3[4][4 * v6++]); while ( v6 < (unsigned int)v3[3] ); } v7 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(a2[89] + 8); v8 = a2[89]; a2 = (_DWORD *)4; return v7(v8, v3 + 5, 4, &a2, 1); } //----- (008847D0) -------------------------------------------------------- void __thiscall sub_8847D0(int *this, char *a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi bool v8; // zf char *v9; // eax unsigned int v10; // edi char *v11; // ebx char *v12; // eax unsigned int v13; // edi char *v14; // ebx int v15; // edx int v16; // eax int *v17; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v17 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B1C); v5 = v2[3]; a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiSize", v3[3]); v7 = v2[3]; a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = v3[3] == 0; a2 = 0; if ( !v8 ) { do { v9 = sub_878740((int)"m_ppcValue[i]", *(_DWORD *)(v3[4] + 4 * (_DWORD)a2)); v10 = v2[3]; v11 = v9; if ( v10 < v2[2] || (sub_8237A0(v2, v10 + v2[5]), v10 < v2[2]) ) { if ( v10 < v2[3] ) { if ( v11 ) { if ( !*(_DWORD *)(v2[1] + 4 * v10) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v10) ) { --v2[4]; } } else { v2[3] = v10 + 1; if ( v11 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v10) = v11; } ++a2; v3 = v17; } while ( (unsigned int)a2 < v17[3] ); } v12 = sub_878630((int)"m_iIndex", v3[5]); v13 = v2[3]; v14 = v12; if ( v13 < v2[2] || (sub_8237A0(v2, v13 + v2[5]), v13 < v2[2]) ) { if ( v13 < v2[3] ) { if ( v14 ) { v16 = v2[1]; if ( !*(_DWORD *)(v16 + 4 * v13) ) { ++v2[4]; *(_DWORD *)(v16 + 4 * v13) = v14; return; } } else if ( *(_DWORD *)(v2[1] + 4 * v13) ) { --v2[4]; } } else { v2[3] = v13 + 1; if ( v14 ) { v15 = v2[1]; ++v2[4]; *(_DWORD *)(v15 + 4 * v13) = v14; return; } } *(_DWORD *)(v2[1] + 4 * v13) = v14; } } //----- (00884970) -------------------------------------------------------- char __thiscall sub_884970(_DWORD *this, int a2) { int v2; // edi unsigned int v4; // edx int v5; // ebx int v6; // esi const char *v7; // eax unsigned int v8; // [esp+Ch] [ebp+8h] v2 = a2; if ( !a2 ) return 0; v4 = this[3]; v8 = v4; if ( v4 != *(_DWORD *)(v2 + 12) ) return 0; v5 = this[4]; if ( !v5 ) goto LABEL_23; if ( !*(_DWORD *)(v2 + 16) ) return 0; if ( !v5 ) { LABEL_23: if ( *(_DWORD *)(v2 + 16) ) return 0; } if ( !v5 ) return 1; v6 = 0; if ( !v4 ) return 1; while ( 1 ) { v7 = *(const char **)(v5 + 4 * v6); if ( v7 ) { if ( !*(_DWORD *)(*(_DWORD *)(v2 + 16) + 4 * v6) ) return 0; if ( v7 ) break; } if ( *(_DWORD *)(*(_DWORD *)(v2 + 16) + 4 * v6) ) return 0; if ( v7 ) break; LABEL_18: if ( ++v6 >= v4 ) return 1; } if ( !strcmp(v7, *(const char **)(*(_DWORD *)(v2 + 16) + 4 * v6)) ) { v4 = v8; goto LABEL_18; } return 0; } //----- (00884A30) -------------------------------------------------------- char *sub_884A30() { return dword_BA4B24; } //----- (00884A40) -------------------------------------------------------- _DWORD *__thiscall sub_884A40(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // ebx _DWORD *result; // eax unsigned int v5; // esi int v6; // edx unsigned int v7; // kr00_4 v3 = this; sub_868EF0(this, a2, a3); result = 0; if ( v3[4] && v3[3] > 0u ) { *(_DWORD *)(a2 + 12) = v3[3]; result = operator new(4 * v3[3]); v5 = 0; *(_DWORD *)(a2 + 16) = result; if ( v3[3] ) { do { v6 = v3[4]; if ( *(_DWORD *)(v6 + 4 * v5) ) { v7 = strlen(*(const char **)(v6 + 4 * v5)); *(_DWORD *)(*(_DWORD *)(a2 + 16) + 4 * v5) = operator new(v7 + 1); result = (_DWORD *)strcpy_s( *(char **)(*(_DWORD *)(a2 + 16) + 4 * v5), v7 + 1, *(const char **)(v3[4] + 4 * v5)); } else { result = *(_DWORD **)(a2 + 16); result[v5] = 0; } ++v5; } while ( v5 < v3[3] ); } } else { *(_DWORD *)(a2 + 16) = 0; *(_DWORD *)(a2 + 12) = 0; } return result; } //----- (00884B10) -------------------------------------------------------- _DWORD *sub_884B10() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x14u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiStringsExtraData::`vftable'; v1[4] = 0; v1[3] = 0; return v1; } // A27024: using guessed type void *NiStringsExtraData::`vftable'; //----- (00884B50) -------------------------------------------------------- _DWORD *__thiscall sub_884B50(void *this, char a2) { _DWORD *v2; // esi unsigned int v3; // edi v2 = this; v3 = 0; *(_DWORD *)this = &NiStringsExtraData::`vftable'; if ( *((_DWORD *)this + 3) ) { do operator delete(*(void **)(v2[4] + 4 * v3++)); while ( v3 < v2[3] ); } operator delete((void *)v2[4]); v2[4] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A27024: using guessed type void *NiStringsExtraData::`vftable'; //----- (00884BB0) -------------------------------------------------------- _DWORD *__thiscall sub_884BB0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiStringsExtraData::`vftable'; v4[4] = 0; v4[3] = 0; sub_884A40(v2, (int)v4, a2); result = v4; } else { sub_884A40(v2, 0, a2); result = 0; } return result; } // A27024: using guessed type void *NiStringsExtraData::`vftable'; //----- (00884C10) -------------------------------------------------------- int __thiscall sub_884C10(const char **this, _DWORD *a2) { const char **v2; // edi int (__cdecl *v3)(int, const char **, signed int, int *, signed int); // edx int v4; // ST00_4 int result; // eax unsigned int v6; // esi int v7; // [esp+Ch] [ebp-4h] v2 = this; sub_868DB0(this, a2); v3 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(a2[89] + 8); v4 = a2[89]; v7 = 4; result = v3(v4, v2 + 3, 4, &v7, 1); v6 = 0; if ( v2[3] ) { do result = sub_876A50(a2, *(const char **)&v2[4][4 * v6++]); while ( v6 < (unsigned int)v2[3] ); } return result; } //----- (00884C70) -------------------------------------------------------- void *__thiscall sub_884C70(int *this, size_t a2) { int *v2; // esi int (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx unsigned int *v4; // ebx int v5; // ST00_4 void *result; // eax unsigned int v7; // edi int v8; // [esp+Ch] [ebp-4h] v2 = this; sub_868F80(this, a2); v3 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v4 = (unsigned int *)(v2 + 3); v5 = *(_DWORD *)(a2 + 352); v8 = 4; result = (void *)v3(v5, v2 + 3, 4, &v8, 1); if ( v2[3] ) { result = operator new(4 * v2[3]); v7 = 0; v2[4] = (int)result; if ( *v4 ) { do { *(_DWORD *)(4 * v7 + v2[4]) = 0; result = (void *)sub_8769C0((_DWORD *)a2, (_DWORD *)(4 * v7++ + v2[4])); } while ( v7 < *v4 ); } } else { v2[4] = 0; } return result; } //----- (00884D10) -------------------------------------------------------- unsigned int __thiscall sub_884D10(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi unsigned int result; // eax bool v9; // zf char *v10; // eax unsigned int v11; // edi char *v12; // ebx _DWORD *v13; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v13 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B24); v5 = v2[3]; a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiSize", v3[3]); v7 = v2[3]; a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); result = sub_823870(v2, v7, &a2); v9 = v3[3] == 0; a2 = 0; if ( !v9 ) { while ( 1 ) { v10 = sub_878740((int)"m_ppcValue[i]", *(_DWORD *)(v3[4] + 4 * (_DWORD)a2)); v11 = v2[3]; v12 = v10; if ( v11 < v2[2] || (sub_8237A0(v2, v11 + v2[5]), v11 < v2[2]) ) { if ( v11 < v2[3] ) { if ( v12 ) { if ( !*(_DWORD *)(v2[1] + 4 * v11) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v11) ) { --v2[4]; } } else { v2[3] = v11 + 1; if ( v12 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v11) = v12; } result = (unsigned int)(a2 + 1); a2 = (char *)result; if ( result >= v13[3] ) break; v3 = v13; } } return result; } //----- (00884E30) -------------------------------------------------------- _DWORD *__thiscall sub_884E30(_DWORD *this, _DWORD *a2) { return sub_860F50(this, a2); } //----- (00884E40) -------------------------------------------------------- char __thiscall sub_884E40(_DWORD *this, int a2) { return sub_860F60(this, a2); } //----- (00884E50) -------------------------------------------------------- bool __thiscall sub_884E50(float *this, float *a2) { float *v2; // esi v2 = this; return sub_887990(this, a2) && a2[73] == v2[73] && a2[74] == v2[74]; } //----- (00884EA0) -------------------------------------------------------- char *sub_884EA0() { return dword_BA4B54; } //----- (00884EB0) -------------------------------------------------------- signed int sub_884EB0() { return 2; } //----- (00884EC0) -------------------------------------------------------- float *__thiscall sub_884EC0(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_87AD20(this); v1[67] = 0.0; *(_DWORD *)v1 = &NiSpotLight::`vftable'; v1[68] = 1.0; v1[69] = 0.0; v1[70] = 1.0; v1[74] = 1.0; v1[71] = 0.0; v1[72] = 0.0; result = v1; v1[73] = 0.0; return result; } // A270EC: using guessed type void *NiSpotLight::`vftable'; //----- (00884F30) -------------------------------------------------------- char *sub_884F30() { return dword_BA4B2C; } //----- (00884F40) -------------------------------------------------------- float *__thiscall sub_884F40(float *this) { float *v1; // esi float *result; // eax v1 = this; result = sub_887A00(this); v1[70] = v1[26]; v1[71] = v1[29]; v1[72] = v1[32]; ++*((_DWORD *)v1 + 47); return result; } //----- (00884F70) -------------------------------------------------------- float *__thiscall sub_884F70(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x12Cu); if ( v3 ) v4 = sub_884EC0(v3); else v4 = 0; sub_887950(v2, v4, a2); v4[70] = v2[70]; v4[71] = v2[71]; v4[72] = v2[72]; v4[73] = v2[73]; result = v4; v4[74] = v2[74]; return result; } //----- (00884FF0) -------------------------------------------------------- float *sub_884FF0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x12Cu); if ( v0 ) result = sub_884EC0(v0); else result = 0; return result; } //----- (00885010) -------------------------------------------------------- int __thiscall sub_885010(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_887AD0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 73, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; return v8(v7, v3 + 74, 4, &a2, 1); } //----- (00885070) -------------------------------------------------------- int __thiscall sub_885070(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_887B50(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 73, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; return v8(v7, v3 + 74, 4, &a2, 1); } //----- (008850D0) -------------------------------------------------------- unsigned int __thiscall sub_8850D0(int *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = a2; v3 = (float *)this; sub_887BD0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B2C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_85F140(v3 + 70, (int)"m_kWorldDir"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"m_fSpotAngle", v3[73]); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"m_fSpotExponent", v3[74]); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v11, &a2); } //----- (008851D0) -------------------------------------------------------- bool __thiscall sub_8851D0(_DWORD *this, int a2) { return sub_865CE0(this, a2) != 0; } //----- (008851F0) -------------------------------------------------------- int __thiscall sub_8851F0(const char **this, _DWORD *a2) { return sub_8665E0(this, a2); } //----- (00885200) -------------------------------------------------------- bool __thiscall sub_885200(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; return sub_865D20(this, a2) && v2[7] == *(_DWORD *)(a2 + 28) && v2[9] == *(_DWORD *)(a2 + 36) && v2[8] == *(_DWORD *)(a2 + 32) && *((_BYTE *)v2 + 64) == *(_BYTE *)(a2 + 64); } //----- (00885250) -------------------------------------------------------- void __thiscall sub_885250(_DWORD *this) { _DWORD *v1; // edi int v2; // eax int v3; // eax int v4; // esi int v5; // ebx v1 = this; if ( !this[15] ) { if ( this[14] ) { v2 = sub_8667C0(); v3 = (*(int (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v2 + 8))(v2, v1[14], 0); v4 = v1[15]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[15] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } } } } //----- (008852C0) -------------------------------------------------------- char __thiscall sub_8852C0(void *this) { char result; // al if ( !dword_BA46D0 || (result = (*(int (__thiscall **)(int, void *))(*(_DWORD *)dword_BA46D0 + 228))(dword_BA46D0, this)) != 0 ) { result = 1; } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (008852E0) -------------------------------------------------------- LONG __thiscall sub_8852E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi void (__stdcall *v11)(volatile LONG *); // edi LONG result; // eax unsigned int v13; // ebx _DWORD *v14; // edi unsigned int v15; // esi _DWORD *v16; // eax int *v17; // edi signed int v18; // ebx int v19; // esi _DWORD *v20; // [esp+Ch] [ebp-24h] unsigned int v21; // [esp+10h] [ebp-20h] int v22; // [esp+14h] [ebp-1Ch] int v23; // [esp+18h] [ebp-18h] int v24; // [esp+1Ch] [ebp-14h] int v25; // [esp+20h] [ebp-10h] int v26; // [esp+24h] [ebp-Ch] int v27; // [esp+28h] [ebp-8h] int v28; // [esp+2Ch] [ebp-4h] v7 = this; v20 = this; v8 = operator new(0x70u); if ( v8 ) v9 = sub_8698C0(v8, **(_DWORD **)(a2 + 84), **(_DWORD **)(a2 + 88), (_DWORD *)(a2 + 8), *(_DWORD *)(a2 + 96), 6); else v9 = 0; v10 = v7[15]; if ( (_DWORD *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v20[15] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; if ( a2 ) { v11 = (void (__stdcall *)(volatile LONG *))InterlockedIncrement; v22 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } else { v11 = (void (__stdcall *)(volatile LONG *))InterlockedIncrement; } if ( 0 != a3 ) { v23 = a3; if ( a3 ) v11((volatile LONG *)(a3 + 4)); } if ( v24 != a4 ) { if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) (**(void (__stdcall ***)(signed int))v24)(1); v24 = a4; if ( a4 ) v11((volatile LONG *)(a4 + 4)); } if ( v25 != a5 ) { if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) (**(void (__stdcall ***)(signed int))v25)(1); v25 = a5; if ( a5 ) v11((volatile LONG *)(a5 + 4)); } if ( v26 != a6 ) { if ( v26 && !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) (**(void (__stdcall ***)(signed int))v26)(1); v26 = a6; if ( a6 ) v11((volatile LONG *)(a6 + 4)); } result = v27; if ( v27 != a7 ) { if ( v27 ) { result = InterlockedDecrement((volatile LONG *)(v27 + 4)); if ( !result ) result = (**(int (__stdcall ***)(signed int))v27)(1); } v27 = a7; if ( a7 ) result = ((LONG (__stdcall *)(volatile LONG *))v11)((volatile LONG *)(a7 + 4)); } v13 = 0; v21 = 0; do { v14 = (_DWORD *)*(&v22 + v13); v15 = 0; if ( v14[24] ) { do { v16 = (_DWORD *)v20[15]; v13 = v21; result = memcpy_s( (void *)(v16[20] + *(_DWORD *)(v16[23] + 4 * v15) + v21 * *(_DWORD *)(v16[23] + 4 * v16[24])), *(_DWORD *)(v16[23] + 4 * v15 + 4) - *(_DWORD *)(v16[23] + 4 * v15), (const void *)(v14[20] + *(_DWORD *)(v14[23] + 4 * v15)), *(_DWORD *)(v14[23] + 4 * v15 + 4) - *(_DWORD *)(v14[23] + 4 * v15)); ++v15; } while ( v15 < v14[24] ); } v21 = ++v13; } while ( v13 < 6 ); v17 = &v28; v18 = 5; do { v19 = *(v17 - 1); --v17; if ( v19 ) { result = InterlockedDecrement((volatile LONG *)(v19 + 4)); if ( !result ) { if ( v19 ) result = (**(int (__thiscall ***)(int, signed int))v19)(v19, 1); } } --v18; } while ( v18 >= 0 ); return result; } //----- (00885560) -------------------------------------------------------- unsigned int __thiscall sub_885560(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int result; // eax int v4; // edi int v5; // esi int *v6; // edi signed int v7; // ebx int v8; // esi _DWORD *v9; // [esp+8h] [ebp-24h] unsigned int v10; // [esp+Ch] [ebp-20h] int v11; // [esp+10h] [ebp-1Ch] int v12; // [esp+14h] [ebp-18h] int v13; // [esp+18h] [ebp-14h] int v14; // [esp+1Ch] [ebp-10h] int v15; // [esp+20h] [ebp-Ch] int v16; // [esp+24h] [ebp-8h] int v17; // [esp+28h] [ebp-4h] v2 = this; v9 = this; if ( a2[7] >= 0xA030006u ) return sub_865C10(this, a2); sub_872D20(this, a2); v11 = 0; v12 = 0; v13 = 0; v14 = 0; v15 = 0; v16 = 0; result = sub_875B00(a2); if ( result == 6 ) { v10 = 0; do { v4 = sub_875AD0(a2); v5 = *(&v11 + v10); if ( v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(&v11 + v10) = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } result = v10 + 1; v10 = result; } while ( result < 6 ); v2 = v9; } if ( !v2[15] ) result = sub_8852E0(v2, v11, v12, v13, v14, v15, v16); v6 = &v17; v7 = 5; do { v8 = *(v6 - 1); --v6; if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } } --v7; } while ( v7 >= 0 ); return result; } //----- (00885690) -------------------------------------------------------- char *sub_885690() { return dword_BA4B34; } //----- (008856A0) -------------------------------------------------------- LONG __thiscall sub_8856A0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, int a7, char *a8) { unsigned int v8; // kr00_4 char *v9; // ebx void *v10; // ecx int v11; // eax int v12; // edi LONG result; // eax char *v14; // edi signed int v15; // ebx int v16; // esi char *Src; // [esp+Ch] [ebp-14Ch] int v18; // [esp+10h] [ebp-148h] int v19; // [esp+14h] [ebp-144h] int v20; // [esp+18h] [ebp-140h] int v21; // [esp+1Ch] [ebp-13Ch] int v22; // [esp+20h] [ebp-138h] int v23; // [esp+24h] [ebp-134h] _DWORD *v24; // [esp+28h] [ebp-130h] void *v25; // [esp+2Ch] [ebp-12Ch] int v26; // [esp+30h] [ebp-128h] unsigned int v27; // [esp+34h] [ebp-124h] int v28; // [esp+38h] [ebp-120h] int v29; // [esp+3Ch] [ebp-11Ch] int v30; // [esp+40h] [ebp-118h] int v31; // [esp+44h] [ebp-114h] int v32; // [esp+48h] [ebp-110h] int v33; // [esp+4Ch] [ebp-10Ch] char Filename; // [esp+50h] [ebp-108h] v26 = a6; v24 = this; Src = a2; v18 = a3; v28 = 0; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v19 = a4; v20 = a5; v21 = a6; v22 = a7; v23 = sub_8667C0(); v27 = 0; do { v8 = strlen((&Src)[v27 / 4]); v9 = (char *)operator new(v8 + 1); strcpy_s(v9, v8 + 1, (&Src)[v27 / 4]); nullsub_6(v10); v25 = sub_866A20(v9); sub_8AA600(a8, (char *)v25); (*(void (__thiscall **)(char *))(*(_DWORD *)a8 + 4))(a8); if ( (*(unsigned __int8 (__thiscall **)(char *, char *, signed int))(*(_DWORD *)a8 + 8))(a8, &Filename, 260) ) { while ( !(unsigned __int8)sub_8AA2B0() ) { if ( !(*(unsigned __int8 (__thiscall **)(char *, char *, signed int))(*(_DWORD *)a8 + 8))(a8, &Filename, 260) ) goto LABEL_14; } v11 = (*(int (__stdcall **)(char *, _DWORD))(*(_DWORD *)v23 + 8))(&Filename, 0); v12 = *(int *)((char *)&v28 + v27); v26 = v11; if ( v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v11 = v26; } *(int *)((char *)&v28 + v27) = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); } operator delete(v25); operator delete(v9); } LABEL_14: v27 += 4; } while ( v27 < 0x18 ); result = sub_8852E0(v24, v28, v29, v30, v31, v32, v33); v14 = &Filename; v15 = 5; do { v16 = *((_DWORD *)v14 - 1); v14 -= 4; if ( v16 ) { result = InterlockedDecrement((volatile LONG *)(v16 + 4)); if ( !result ) { if ( v16 ) result = (**(int (__thiscall ***)(int, signed int))v16)(v16, 1); } } --v15; } while ( v15 >= 0 ); return result; } //----- (00885920) -------------------------------------------------------- _DWORD *sub_885920() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_85B2B0(v0); *v1 = &NiTexture::`vftable'; v1[7] = 6; v1[8] = 3; v1[9] = 2; v1[10] = 0; sub_865A50(v1); v1[13] = 0; v1[14] = 0; v1[15] = 0; v1[17] = 0; *((_WORD *)v1 + 32) = 1; *v1 = &NiSourceCubeMap::`vftable'; return v1; } // A24C6C: using guessed type void *NiTexture::`vftable'; // A2718C: using guessed type void *NiSourceCubeMap::`vftable'; //----- (00885990) -------------------------------------------------------- _DWORD *__thiscall sub_885990(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &NiSourceCubeMap::`vftable'; v3 = *((_DWORD *)this + 15); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[15] = 0; } sub_865E10(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2718C: using guessed type void *NiSourceCubeMap::`vftable'; //----- (008859F0) -------------------------------------------------------- int __thiscall sub_8859F0(int *this, int a2) { int v2; // esi int *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax void **v7; // ebx signed int v8; // ebx unsigned int v9; // ebx int v10; // eax int v11; // ST3C_4 void (__cdecl *v12)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v13)(int, int *, signed int, int *, signed int); // edx int v14; // ST28_4 int v15; // eax int v16; // ST14_4 void (__cdecl *v17)(int, int *, signed int, int *, signed int); // eax char v18; // dl int v19; // esi void (__cdecl *v20)(int, char *, signed int, int *, signed int); // edx int result; // eax void *v22; // [esp+8h] [ebp-24h] int v23; // [esp+Ch] [ebp-20h] int v24; // [esp+10h] [ebp-1Ch] int v25; // [esp+14h] [ebp-18h] int v26; // [esp+18h] [ebp-14h] int v27; // [esp+1Ch] [ebp-10h] int v28; // [esp+20h] [ebp-Ch] int v29; // [esp+24h] [ebp-8h] char v30; // [esp+2Bh] [ebp-1h] v2 = a2; v3 = this; if ( *(_DWORD *)(a2 + 28) >= 0xA030006u ) return sub_8661D0(this, a2); sub_872D10(this, (void **)a2); InterlockedIncrement(v3 + 1); v4 = *(_DWORD *)(v2 + 352); HIBYTE(a2) = 0; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v29 = 1; v6(v5, (char *)&a2 + 3, 1, &v29, 1); v22 = 0; v23 = 0; v24 = 0; v25 = 0; v26 = 0; v27 = 0; v7 = &v22; v29 = 6; do { sub_8769C0((_DWORD *)v2, v7); ++v7; --v29; } while ( v29 ); sub_8764B0((_DWORD *)v2, 6); v8 = 6; do { sub_876290((void **)v2); --v8; } while ( v8 ); if ( HIBYTE(a2) ) sub_8856A0(v3, (char *)v22, v23, v24, v25, v26, v27, *(char **)(v2 + 300)); v9 = 0; do operator delete(*(&v22 + v9++)); while ( v9 < 6 ); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v10 + 4); v29 = 4; v12(v11, &v28, 4, &v29, 1); v3[7] = v28; v13 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v14 = *(_DWORD *)(v2 + 352); v28 = 4; v13(v14, &v29, 4, &v28, 1); v3[9] = v29; v15 = *(_DWORD *)(v2 + 352); v16 = v15; v17 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v15 + 4); v28 = 4; v17(v16, &v29, 4, &v28, 1); v18 = *((_BYTE *)v3 + 64); v3[8] = v29; v19 = *(_DWORD *)(v2 + 352); v30 = v18; v20 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v19 + 4); v28 = 1; v20(v19, &v30, 1, &v28, 1); *((_BYTE *)v3 + 64) = v30 != 0; result = InterlockedDecrement(v3 + 1); if ( !result ) result = (*(int (__thiscall **)(int *, signed int))*v3)(v3, 1); return result; } //----- (00885BA0) -------------------------------------------------------- unsigned int __thiscall sub_885BA0(int *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8666E0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4B34); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00885BF0) -------------------------------------------------------- unsigned int __thiscall sub_885BF0(int this, int a2) { return sub_85BCB0(this, a2); } //----- (00885C00) -------------------------------------------------------- char __thiscall sub_885C00(_DWORD **this, int a2) { _DWORD **v2; // esi char result; // al v2 = this; result = sub_85BA30(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*v2[5] + 20))(a2); result = 1; } return result; } //----- (00885C30) -------------------------------------------------------- void __thiscall sub_885C30(void **this, void *a2) { void *v2; // esi void **v3; // ebx char *v4; // eax int v5; // edx int v6; // ecx unsigned int v7; // edx int v8; // eax char *v9; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( a2 != this[1] ) { if ( a2 ) { v4 = (char *)operator new(28 * (_DWORD)a2); if ( v4 ) { v5 = (int)a2 - 1; if ( (_DWORD)((_DWORD)a2 - 1) >= 0 ) { v6 = (int)(v4 + 20); do { *(float *)(v6 - 8) = 0.0; v6 += 28; --v5; *(float *)(v6 - 32) = 0.0; *(float *)(v6 - 28) = 0.0; *(float *)(v6 - 24) = 0.0; } while ( v5 >= 0 ); } v9 = v4; } else { v9 = 0; } v7 = 0; if ( (unsigned int)v3[2] > 0 ) { v8 = 0; do { ++v7; qmemcpy(&v9[v8], (char *)*v3 + v8, 0x1Cu); v8 += 28; } while ( v7 < (unsigned int)v3[2] ); v2 = a2; } } else { v9 = 0; } operator delete(*v3); *v3 = v9; v3[1] = v2; } } //----- (00885CE0) -------------------------------------------------------- void *sub_885CE0() { return &unk_BA4B3C; } //----- (00885CF0) -------------------------------------------------------- int __thiscall sub_885CF0(void *this, int a2) { int result; // eax result = a2; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, void *))(*(_DWORD *)a2 + 328))(a2, this); return result; } //----- (00885D60) -------------------------------------------------------- int __thiscall sub_885D60(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; nullsub_32(a2); result = sub_875AD0(a2); v4 = v2[5]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[5] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00885DC0) -------------------------------------------------------- bool __thiscall sub_885DC0(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi unsigned int v5; // ecx unsigned int v6; // ebx int v7; // eax int v8; // esi int v9; // edi int v10; // eax _DWORD *v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] unsigned int v13; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v11 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[4]; v13 = v5; if ( v5 != *(_DWORD *)(a2 + 16) ) return 0; v6 = 0; if ( !v5 ) return (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v3[5] + 28))(*(_DWORD *)(v2 + 20)) != 0; v7 = v3[2]; v8 = *(_DWORD *)(a2 + 8); v9 = v7 + 4; v10 = v7 - v8; v12 = v10; while ( 1 ) { if ( *(_WORD *)(v10 + v8) == *(_WORD *)v8 || *(_WORD *)(v9 - 2) == *(_WORD *)(v8 + 2) || *(_WORD *)v9 == *(_WORD *)(v8 + 4) || *(_WORD *)(v9 + 2) == *(_WORD *)(v8 + 6) || *(_WORD *)(v9 + 4) == *(_WORD *)(v8 + 8) || *(_WORD *)(v9 + 6) == *(_WORD *)(v8 + 10) ) { goto LABEL_14; } if ( (unsigned __int8)sub_883690((float *)(v9 + 8), (float *)(v8 + 12)) ) return 0; v5 = v13; v10 = v12; LABEL_14: ++v6; v9 += 28; v8 += 28; if ( v6 >= v5 ) { v3 = v11; v2 = a2; return (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v3[5] + 28))(*(_DWORD *)(v2 + 20)) != 0; } } } //----- (00885E90) -------------------------------------------------------- _DWORD *__thiscall sub_885E90(void *this, char a2) { _DWORD *v2; // esi int v3; // edi v2 = this; *(_DWORD *)this = &NiScreenTexture::`vftable'; sub_85F310((int)this); v3 = v2[5]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); operator delete((void *)v2[2]); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A271E4: using guessed type void *NiScreenTexture::`vftable'; //----- (00885F00) -------------------------------------------------------- __int16 __thiscall sub_885F00(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi unsigned int v4; // eax int v5; // eax __int16 v6; // dx __int16 v7; // cx __int16 v8; // dx __int16 v9; // cx __int16 v10; // dx int v11; // ecx int v12; // edx int v13; // ecx int v14; // edx int v15; // eax void *v16; // eax int v17; // eax int v18; // ecx int v19; // edi __int16 v21; // [esp+Ch] [ebp-24h] __int16 v22; // [esp+Eh] [ebp-22h] __int16 v23; // [esp+10h] [ebp-20h] __int16 v24; // [esp+12h] [ebp-1Eh] __int16 v25; // [esp+14h] [ebp-1Ch] __int16 v26; // [esp+16h] [ebp-1Ah] int v27; // [esp+18h] [ebp-18h] int v28; // [esp+1Ch] [ebp-14h] int v29; // [esp+20h] [ebp-10h] int v30; // [esp+24h] [ebp-Ch] int v31; // [esp+28h] [ebp-8h] int v32; // [esp+2Ch] [ebp-4h] int v33; // [esp+3Ch] [ebp+Ch] v3 = this; v32 = (int)this; sub_85BB00(this, a2, a3); LOWORD(v4) = 0; v31 = 0; if ( v3[4] ) { v33 = 0; do { v5 = v33 + v3[2]; v6 = *(_WORD *)(v5 + 2); v21 = *(_WORD *)v5; v7 = *(_WORD *)(v5 + 4); v22 = v6; v8 = *(_WORD *)(v5 + 6); v23 = v7; v9 = *(_WORD *)(v5 + 8); v24 = v8; v10 = *(_WORD *)(v5 + 10); v25 = v9; v11 = *(_DWORD *)(v5 + 12); v26 = v10; v12 = *(_DWORD *)(v5 + 16); v27 = v11; v13 = *(_DWORD *)(v5 + 20); v28 = v12; v14 = *(_DWORD *)(v5 + 24); v15 = *(_DWORD *)(a2 + 12); v29 = v13; v30 = v14; if ( *(_DWORD *)(a2 + 16) == v15 ) { if ( v15 ) v16 = (void *)(2 * v15); else v16 = (void *)1; sub_885C30((void **)(a2 + 8), v16); } v33 += 28; v17 = v31; qmemcpy((void *)(*(_DWORD *)(a2 + 8) + 28 * *(_DWORD *)(a2 + 16)), &v21, 0x1Cu); v18 = v32; ++*(_DWORD *)(a2 + 16); v4 = v17 + 1; v31 = v4; v3 = (_DWORD *)v18; } while ( v4 < *(_DWORD *)(v18 + 16) ); } v19 = *(_DWORD *)(a2 + 20); if ( v19 == v3[5] ) { *(_WORD *)(a2 + 24) = *((_WORD *)v3 + 12); } else { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v4 = v3[5]; *(_DWORD *)(a2 + 20) = v4; if ( v4 ) { InterlockedIncrement((volatile LONG *)(v4 + 4)); LOWORD(v4) = *((_WORD *)v3 + 12); *(_WORD *)(a2 + 24) = v4; } else { *(_WORD *)(a2 + 24) = *((_WORD *)v3 + 12); } } return v4; } //----- (00886050) -------------------------------------------------------- int __thiscall sub_886050(int *this, signed int i) { signed int v2; // ebx int *v3; // esi int v4; // eax int v5; // ST40_4 void (__cdecl *v6)(int, unsigned int *, signed int, signed int *, signed int); // eax int v7; // edi int v8; // eax int v9; // ST3C_4 void (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax int v11; // eax int v12; // ST28_4 void (__cdecl *v13)(int, char *, signed int, int *, signed int); // eax int v14; // eax int v15; // ST14_4 void (__cdecl *v16)(int, char *, signed int, int *, signed int); // eax int v17; // eax int v18; // ST00_4 void (__cdecl *v19)(int, char *, signed int, int *, signed int); // eax int v20; // eax int v21; // ST3C_4 void (__cdecl *v22)(int, char *, signed int, int *, signed int); // eax int v23; // eax int v24; // ST28_4 void (__cdecl *v25)(int, char *, signed int, int *, signed int); // eax int v26; // eax void *v27; // eax signed int v28; // eax char v30; // [esp+8h] [ebp-28h] char v31; // [esp+Ah] [ebp-26h] char v32; // [esp+Ch] [ebp-24h] char v33; // [esp+Eh] [ebp-22h] char v34; // [esp+10h] [ebp-20h] char v35; // [esp+12h] [ebp-1Eh] float v36; // [esp+14h] [ebp-1Ch] float v37; // [esp+18h] [ebp-18h] float v38; // [esp+1Ch] [ebp-14h] float v39; // [esp+20h] [ebp-10h] int v40; // [esp+24h] [ebp-Ch] unsigned int v41; // [esp+28h] [ebp-8h] int v42; // [esp+2Ch] [ebp-4h] v2 = i; v3 = this; sub_85BC50(this, i); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, signed int *, signed int))(v4 + 4); i = 4; v6(v5, &v41, 4, &i, 1); v42 = 0; if ( v41 ) { v7 = (int)(v3 + 2); for ( i = (signed int)(v3 + 2); ; v7 = i ) { v8 = *(_DWORD *)(v2 + 352); v36 = 0.0; v37 = 0.0; v38 = 0.0; v39 = 0.0; v9 = v8; v10 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v8 + 4); v40 = 2; v10(v9, &v30, 2, &v40, 1); v11 = *(_DWORD *)(v2 + 352); v12 = v11; v13 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v11 + 4); v40 = 2; v13(v12, &v31, 2, &v40, 1); v14 = *(_DWORD *)(v2 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v14 + 4); v40 = 2; v16(v15, &v32, 2, &v40, 1); v17 = *(_DWORD *)(v2 + 352); v18 = v17; v19 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v17 + 4); v40 = 2; v19(v18, &v33, 2, &v40, 1); v20 = *(_DWORD *)(v2 + 352); v21 = v20; v22 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v20 + 4); v40 = 2; v22(v21, &v34, 2, &v40, 1); v23 = *(_DWORD *)(v2 + 352); v24 = v23; v25 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v23 + 4); v40 = 2; v25(v24, &v35, 2, &v40, 1); sub_8752B0((char *)&v36, v2); v26 = *(_DWORD *)(v7 + 4); if ( *(_DWORD *)(v7 + 8) == v26 ) { if ( v26 ) v27 = (void *)(2 * v26); else v27 = (void *)1; sub_885C30((void **)v7, v27); } v28 = i; qmemcpy((void *)(*(_DWORD *)v7 + 28 * *(_DWORD *)(v7 + 8)), &v30, 0x1Cu); ++*(_DWORD *)(v28 + 8); if ( ++v42 >= v41 ) break; } } return sub_876290((void **)v2); } //----- (008861C0) -------------------------------------------------------- int __thiscall sub_8861C0(_DWORD *this, signed int a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ST40_4 void (__cdecl *v6)(int, unsigned int *, signed int, signed int *, signed int); // eax char *v7; // esi void (__cdecl *v8)(int, char *, signed int, int *, signed int); // edx int v9; // ST3C_4 int v10; // eax int v11; // ST28_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int v13; // eax int v14; // ST14_4 void (__cdecl *v15)(int, _DWORD *, signed int, int *, signed int); // eax int v16; // eax int v17; // ST00_4 void (__cdecl *v18)(int, char *, signed int, int *, signed int); // eax int v19; // eax int v20; // ST3C_4 void (__cdecl *v21)(int, _DWORD *, signed int, int *, signed int); // eax int v22; // eax int v23; // ST28_4 void (__cdecl *v24)(int, char *, signed int, int *, signed int); // eax int v26; // [esp+8h] [ebp-20h] int v27; // [esp+Ch] [ebp-1Ch] int v28; // [esp+10h] [ebp-18h] int v29; // [esp+14h] [ebp-14h] int v30; // [esp+18h] [ebp-10h] _DWORD *v31; // [esp+1Ch] [ebp-Ch] unsigned int v32; // [esp+20h] [ebp-8h] unsigned int v33; // [esp+24h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v31 = this; nullsub_32(a2); v33 = v3[4]; v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, &v33, 4, &a2, 1); v32 = 0; if ( v33 ) { a2 = 0; do { v7 = (char *)(a2 + v3[2]); v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2[89] + 8); v9 = v2[89]; v30 = 2; v8(v9, v7, 2, &v30, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); v30 = 2; v12(v11, v7 + 2, 2, &v30, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v13 + 8); v30 = 2; v15(v14, (_DWORD *)v7 + 1, 2, &v30, 1); v16 = v2[89]; v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 8); v30 = 2; v18(v17, v7 + 6, 2, &v30, 1); v19 = v2[89]; v20 = v19; v21 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v19 + 8); v30 = 2; v21(v20, (_DWORD *)v7 + 2, 2, &v30, 1); v22 = v2[89]; v23 = v22; v24 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v22 + 8); v30 = 2; v24(v23, v7 + 10, 2, &v30, 1); v26 = *((_DWORD *)v7 + 3); v27 = *((_DWORD *)v7 + 4); v28 = *((_DWORD *)v7 + 5); v29 = *((_DWORD *)v7 + 6); sub_8609B0((char *)&v26, (signed int)v2); a2 += 28; v3 = v31; ++v32; } while ( v32 < v33 ); } return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v3[5]); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00886320) -------------------------------------------------------- int __thiscall sub_886320(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_85BA50(v3); *(_DWORD *)v4 = &NiScreenTexture::`vftable'; *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; *(_WORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = 0; } else { v4 = 0; } sub_885F00(v2, v4, a2); return v4; } // A271E4: using guessed type void *NiScreenTexture::`vftable'; //----- (00886380) -------------------------------------------------------- int __thiscall sub_886380(_DWORD *this, int a2) { int result; // eax if ( a2 < 0 ) return 0; result = this[10]; if ( a2 < result ) result = a2; return result; } //----- (008863A0) -------------------------------------------------------- double __cdecl sub_8863A0(float a1, float a2) { if ( a2 >= (double)a1 ) a1 = a2; return a1; } //----- (008863D0) -------------------------------------------------------- char *sub_8863D0() { return dword_BA4B44; } //----- (008863E0) -------------------------------------------------------- float *__thiscall sub_8863E0(float *this) { float *v1; // esi int v2; // edx int v3; // edx v1 = this; sub_87FD50(this); *(_DWORD *)v1 = &NiScreenLODData::`vftable'; *((_DWORD *)v1 + 2) = dword_BA45C0; *((_DWORD *)v1 + 3) = dword_BA45C4; v2 = dword_BA45C8; v1[5] = 0.0; *((_DWORD *)v1 + 4) = v2; *((_DWORD *)v1 + 6) = dword_BA45C0; *((_DWORD *)v1 + 7) = dword_BA45C4; v3 = dword_BA45C8; v1[9] = 0.0; *((_DWORD *)v1 + 8) = v3; v1[10] = 0.0; v1[11] = 0.0; return v1; } // A27224: using guessed type void *NiScreenLODData::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00886440) -------------------------------------------------------- _DWORD *__thiscall sub_886440(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 11); *(_DWORD *)this = &NiScreenLODData::`vftable'; operator delete(v3); sub_87FD70(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A27224: using guessed type void *NiScreenLODData::`vftable'; //----- (00886480) -------------------------------------------------------- void __thiscall sub_886480(int this, int a2) { int v2; // esi void *v3; // ebx const void *v4; // eax int v5; // ecx v2 = this; if ( a2 != *(_DWORD *)(this + 40) ) { if ( a2 ) { v3 = operator new(4 * a2); v4 = *(const void **)(v2 + 44); if ( v4 ) { v5 = *(_DWORD *)(v2 + 40); if ( v5 >= a2 ) v5 = a2; memcpy_s(v3, 4 * a2, v4, 4 * v5); } operator delete(*(void **)(v2 + 44)); *(_DWORD *)(v2 + 44) = v3; *(_DWORD *)(v2 + 40) = a2; } else { operator delete(*(void **)(this + 44)); *(_DWORD *)(v2 + 40) = 0; *(_DWORD *)(v2 + 44) = 0; } } } //----- (00886510) -------------------------------------------------------- unsigned int __thiscall sub_886510(int this, float *a2, int a3) { int v3; // esi float *v4; // edi float v5; // ST08_4 float v6; // ST0C_4 float v7; // ST10_4 double v8; // st7 double v9; // st7 double v10; // st7 unsigned int v11; // edx unsigned int v12; // ecx float *v13; // esi float v15; // [esp+14h] [ebp-8h] float v16; // [esp+18h] [ebp-4h] float v17; // [esp+24h] [ebp+8h] float v18; // [esp+24h] [ebp+8h] float v19; // [esp+24h] [ebp+8h] float v20; // [esp+24h] [ebp+8h] float v21; // [esp+24h] [ebp+8h] v3 = this; v4 = a2; v5 = *(float *)(this + 24) - a2[35]; v6 = *(float *)(this + 28) - a2[36]; v7 = *(float *)(this + 32) - a2[37]; v17 = v6 * v6 + v5 * v5 + v7 * v7; v18 = sqrt(v17); v8 = v18; if ( *(float *)(this + 36) > (double)v18 || v8 <= 0.000001 ) return 0; if ( *((_BYTE *)v4 + 264) ) v9 = *(float *)(this + 36); else v9 = *(float *)(this + 36) / v8; v16 = v9; v19 = 2.0 / (v4[61] - v4[60]); v15 = 2.0 / (v4[62] - v4[63]); v10 = v19; if ( v15 >= (double)v19 ) v10 = v15; v11 = *(_DWORD *)(this + 40); v20 = v10; v12 = 0; v21 = v20 * v16 * v4[73]; if ( v11 ) { v13 = *(float **)(v3 + 44); do { if ( *v13 <= (double)v21 ) break; ++v12; ++v13; } while ( v12 < v11 ); } return v12; } //----- (00886640) -------------------------------------------------------- float *sub_886640() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x30u); if ( v0 ) result = sub_8863E0(v0); else result = 0; return result; } //----- (00886660) -------------------------------------------------------- char __thiscall sub_886660(float *this, int a2) { float *v2; // edi unsigned int v4; // esi unsigned int v5; // edx float *v6; // ecx int v7; // ebx v2 = this; if ( !(unsigned __int8)sub_86B670(this + 2, (float *)(a2 + 8)) || !(unsigned __int8)sub_86B670(v2 + 6, (float *)(a2 + 24)) ) { return 0; } v4 = *((_DWORD *)v2 + 10); if ( v4 == *(_DWORD *)(a2 + 40) ) { v5 = 0; if ( !v4 ) return 1; v6 = (float *)*((_DWORD *)v2 + 11); v7 = *(_DWORD *)(a2 + 44) - (_DWORD)v6; while ( *v6 == *(float *)((char *)v6 + v7) ) { ++v5; ++v6; if ( v5 >= v4 ) return 1; } } return 0; } //----- (008866E0) -------------------------------------------------------- float *__thiscall sub_8866E0(void *this) { void *v1; // edi float *v2; // eax float *v3; // esi v1 = this; v2 = (float *)operator new(0x30u); if ( v2 ) v3 = sub_8863E0(v2); else v3 = 0; v3[2] = *((float *)v1 + 2); v3[3] = *((float *)v1 + 3); v3[4] = *((float *)v1 + 4); v3[5] = *((float *)v1 + 5); sub_886480((int)v3, *((_DWORD *)v1 + 10)); memcpy_s(*((void **)v3 + 11), 4 * *((_DWORD *)v1 + 10), *((const void **)v1 + 11), 4 * *((_DWORD *)v1 + 10)); return v3; } //----- (00886740) -------------------------------------------------------- float __userpurge sub_886740@(float *this@, int a2) { float *v2; // ebx int v3; // edx int v4; // esi int v5; // eax bool v6; // cf bool v7; // zf int v8; // eax unsigned int v9; // eax char v11; // [esp+Ch] [ebp-38h] v2 = this; sub_86D5C0((float *)a2); v2[9] = 0.0; v4 = 0; v5 = *(_DWORD *)(a2 + 188); if ( v5 > 0 ) { v6 = 0; v7 = v5 == 0; do { if ( !v6 && !v7 ) { v8 = *(_DWORD *)(*(_DWORD *)(a2 + 180) + 4 * v4); if ( v8 ) sub_86BC10(v2 + 6, (float *)(v8 + 36)); } v9 = *(_DWORD *)(a2 + 188); v6 = v9 < ++v4; v7 = v9 == v4; } while ( (signed int)v9 > v4 ); } sub_87C3F0((float *)(a2 + 104), v3, (float *)&v11); return sub_86BD60(v2 + 2, v2 + 6, (float *)&v11); } //----- (008867D0) -------------------------------------------------------- float *__thiscall sub_8867D0(void *this, int a2) { void *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x30u); if ( v3 ) v4 = sub_8863E0(v3); else v4 = 0; v4[2] = *((float *)v2 + 2); v4[3] = *((float *)v2 + 3); v4[4] = *((float *)v2 + 4); v4[5] = *((float *)v2 + 5); sub_886480((int)v4, *((_DWORD *)v2 + 10)); memcpy_s(*((void **)v4 + 11), 4 * *((_DWORD *)v2 + 10), *((const void **)v2 + 11), 4 * *((_DWORD *)v2 + 10)); return v4; } //----- (00886840) -------------------------------------------------------- int __thiscall sub_886840(char *this, int a2) { signed int v2; // ebx char *v3; // esi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int result; // eax unsigned int v8; // edi int (__cdecl *v9)(int, int, signed int, int *, signed int); // edx int v10; // ST04_4 int v11; // ST00_4 v2 = a2; v3 = this; sub_81C180(a2); sub_8737A0(v3 + 8, v2); sub_8737A0(v3 + 24, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); a2 = 4; result = v6(v5, v3 + 40, 4, &a2, 1); v8 = 0; if ( *((_DWORD *)v3 + 10) ) { do { v9 = *(int (__cdecl **)(int, int, signed int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v10 = *((_DWORD *)v3 + 11) + 4 * v8; v11 = *(_DWORD *)(v2 + 356); a2 = 4; result = v9(v11, v10, 4, &a2, 1); ++v8; } while ( v8 < *((_DWORD *)v3 + 10) ); } return result; } //----- (008868D0) -------------------------------------------------------- float __userpurge sub_8868D0@(float *this@, int a2) { float result; // eax if ( 0.0 == this[5] ) result = sub_886740(this, a2); else result = sub_86BD60(this + 6, this + 2, (float *)(a2 + 104)); return result; } //----- (00886900) -------------------------------------------------------- void __thiscall sub_886900(int *this, unsigned int a2) { signed int v2; // ebx int v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int v7; // edi int v8; // eax int v9; // ST04_4 int v10; // ST00_4 void (__cdecl *v11)(int, int, signed int, int *, signed int); // eax int v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = (int)this; sub_87FD80(this, a2); sub_87D5D0((char *)(v3 + 8), v2); sub_87D5D0((char *)(v3 + 24), v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 4); v12 = 4; v6(v5, &a2, 4, &v12, 1); sub_886480(v3, a2); v7 = 0; if ( a2 ) { do { v8 = *(_DWORD *)(v2 + 352); v9 = *(_DWORD *)(v3 + 44) + 4 * v7; v10 = v8; v11 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v8 + 4); v12 = 4; v11(v10, v9, 4, &v12, 1); ++v7; } while ( v7 < a2 ); } } //----- (008869A0) -------------------------------------------------------- unsigned int __thiscall sub_8869A0(float *this, _DWORD *a2) { float *v2; // ebx char *v3; // eax _DWORD *v4; // esi unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi unsigned int result; // eax _DWORD *v11; // edi char *v12; // ebx unsigned int v13; // edi char *v14; // [esp+14h] [ebp-8h] float *v15; // [esp+18h] [ebp-4h] v2 = this; v15 = this; v3 = sub_8784D0(*(int *)dword_BA4B44); v4 = a2; v5 = a2[3]; v14 = v3; if ( v5 >= a2[2] ) sub_8237A0(a2, v5 + a2[5]); sub_823870(v4, v5, &v14); v6 = sub_87D570(v2 + 2, (int)"Bound"); v7 = v4[3]; a2 = v6; if ( v7 >= v4[2] ) sub_8237A0(v4, v7 + v4[5]); sub_823870(v4, v7, &a2); v8 = sub_87D570(v2 + 6, (int)"World Bound"); v9 = v4[3]; a2 = v8; if ( v9 >= v4[2] ) sub_8237A0(v4, v9 + v4[5]); result = sub_823870(v4, v9, &a2); v11 = 0; a2 = 0; if ( *((_DWORD *)v2 + 10) ) { while ( 1 ) { v12 = (char *)operator new(0x80u); sub_7FF6E0(v12, 0x80u, "Proportion[%d] = %g", v11, *(float *)(*((_DWORD *)v15 + 11) + 4 * (_DWORD)v11)); v13 = v4[3]; if ( v13 < v4[2] || (sub_8237A0(v4, v13 + v4[5]), v13 < v4[2]) ) { if ( v13 < v4[3] ) { if ( v12 ) { if ( !*(_DWORD *)(v4[1] + 4 * v13) ) ++v4[4]; } else if ( *(_DWORD *)(v4[1] + 4 * v13) ) { --v4[4]; } } else { v4[3] = v13 + 1; if ( v12 ) ++v4[4]; } *(_DWORD *)(v4[1] + 4 * v13) = v12; } result = (unsigned int)a2 + 1; a2 = (_DWORD *)result; if ( result >= *((_DWORD *)v15 + 10) ) break; v11 = a2; } } return result; } //----- (00886B00) -------------------------------------------------------- LONG __thiscall sub_886B00(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST10_4 v1 = this; v2 = (void *)this[17]; *this = &NiParticlesData::`vftable'; operator delete(v2); operator delete((void *)v1[19]); operator delete((void *)v1[20]); operator delete((void *)v1[21]); operator delete((void *)v1[22]); return sub_879E60(v1); } // A2729C: using guessed type void *NiParticlesData::`vftable'; //----- (00886B50) -------------------------------------------------------- void __thiscall sub_886B50(void **this, void *a2) { void **v2; // esi v2 = this; operator delete(this[17]); v2[17] = a2; } //----- (00886B70) -------------------------------------------------------- void __thiscall sub_886B70(void **this, void *a2) { void **v2; // esi v2 = this; operator delete(this[19]); v2[19] = a2; } //----- (00886B90) -------------------------------------------------------- void __thiscall sub_886B90(void **this, void *a2) { void **v2; // esi v2 = this; operator delete(this[20]); v2[20] = a2; } //----- (00886BB0) -------------------------------------------------------- void __thiscall sub_886BB0(void **this, void *a2) { void **v2; // esi v2 = this; operator delete(this[21]); v2[21] = a2; } //----- (00886BD0) -------------------------------------------------------- void __thiscall sub_886BD0(void **this, void *a2) { void **v2; // esi v2 = this; operator delete(this[22]); v2[22] = a2; } //----- (00886BF0) -------------------------------------------------------- signed int __thiscall sub_886BF0(int this, unsigned __int16 a2) { signed int result; // eax int v3; // ebx int v4; // esi int v5; // edi int v6; // eax int v7; // edx _DWORD *v8; // eax _DWORD *v9; // edx int v10; // ebx _DWORD *v11; // eax _DWORD *v12; // edx int v13; // edx int v14; // ebx int v15; // eax _DWORD *v16; // edx int v17; // eax int v18; // eax int v19; // ebx _DWORD *v20; // eax _DWORD *v21; // edx int v22; // eax int v23; // edx int v24; // esi int v25; // eax _DWORD *v26; // edx int v27; // [esp+0h] [ebp-4h] int v28; // [esp+Ch] [ebp+8h] result = (unsigned __int16)(*(_WORD *)(this + 72) - 1); if ( a2 == (_WORD)result ) { --*(_WORD *)(this + 72); } else { v3 = *(_DWORD *)(this + 32); v4 = (unsigned __int16)(*(_WORD *)(this + 72) - 1); v5 = a2; v6 = 12 * result; v7 = 12 * a2; v28 = v6; v8 = (_DWORD *)(v3 + v6); v27 = v7; v9 = (_DWORD *)(v3 + v7); *v9 = *v8; v9[1] = v8[1]; v9[2] = v8[2]; v10 = *(_DWORD *)(this + 40); if ( v10 ) { v11 = (_DWORD *)(v10 + 16 * v4); v12 = (_DWORD *)(v10 + 16 * v5); *v12 = *v11; v12[1] = v11[1]; v12[2] = v11[2]; v12[3] = v11[3]; } v13 = *(_DWORD *)(this + 36); if ( v13 ) { v14 = *(_DWORD *)(v28 + v13); v15 = v13 + v28; v16 = (_DWORD *)(v27 + v13); *v16 = v14; v16[1] = *(_DWORD *)(v15 + 4); v16[2] = *(_DWORD *)(v15 + 8); } v17 = *(_DWORD *)(this + 68); if ( v17 ) *(float *)(v17 + 4 * v5) = *(float *)(v17 + 4 * v4); v18 = *(_DWORD *)(this + 76); if ( v18 ) *(float *)(v18 + 4 * v5) = *(float *)(v18 + 4 * v4); v19 = *(_DWORD *)(this + 80); if ( v19 ) { v20 = (_DWORD *)(v19 + 16 * v4); v21 = (_DWORD *)(v19 + 16 * v5); *v21 = *v20; v21[1] = v20[1]; v21[2] = v20[2]; v21[3] = v20[3]; } v22 = *(_DWORD *)(this + 84); if ( v22 ) *(float *)(v22 + 4 * v5) = *(float *)(v22 + 4 * v4); v23 = *(_DWORD *)(this + 88); if ( v23 ) { v24 = *(_DWORD *)(v28 + v23); v25 = v23 + v28; v26 = (_DWORD *)(v27 + v23); *v26 = v24; v26[1] = *(_DWORD *)(v25 + 4); result = *(_DWORD *)(v25 + 8); v26[2] = result; } else { result = 0xFFFF; } --*(_WORD *)(this + 72); } return result; } //----- (00886D30) -------------------------------------------------------- char *sub_886D30() { return dword_BA4B4C; } //----- (00886D40) -------------------------------------------------------- int __thiscall sub_886D40(unsigned __int16 *this, unsigned __int16 a2) { int result; // eax result = this[6]; if ( a2 > (unsigned __int16)result ) this[36] = result; else this[36] = a2; return result; } //----- (00886D60) -------------------------------------------------------- __int16 __thiscall sub_886D60(_WORD *this) { return this[36]; } //----- (00886D70) -------------------------------------------------------- void **__thiscall sub_886D70(void *this, char a2) { void **v2; // esi void *v3; // ST10_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 17); *(_DWORD *)this = &NiParticlesData::`vftable'; operator delete(v3); operator delete(v2[19]); operator delete(v2[20]); operator delete(v2[21]); operator delete(v2[22]); sub_879E60(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2729C: using guessed type void *NiParticlesData::`vftable'; //----- (00886DD0) -------------------------------------------------------- _DWORD *__thiscall sub_886DD0(_DWORD *this) { _DWORD *v1; // esi __int16 v2; // dx v1 = this; sub_879900(this); v2 = *((_WORD *)v1 + 25); v1[17] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; *((_BYTE *)v1 + 64) = 0; *((_WORD *)v1 + 36) = 0; *v1 = &NiParticlesData::`vftable'; *((_WORD *)v1 + 25) = v2 & 0xFFF | 0x8000; return v1; } // A2729C: using guessed type void *NiParticlesData::`vftable'; //----- (00886E20) -------------------------------------------------------- _DWORD *sub_886E20() { _DWORD *v0; // eax _DWORD *v1; // esi __int16 v2; // cx v0 = operator new(0x5Cu); v1 = v0; if ( !v0 ) return 0; sub_879900(v0); v2 = *((_WORD *)v1 + 25); *((_WORD *)v1 + 36) = 0; v1[17] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; *((_BYTE *)v1 + 64) = 0; *v1 = &NiParticlesData::`vftable'; *((_WORD *)v1 + 25) = v2 & 0xFFF | 0x8000; return v1; } // A2729C: using guessed type void *NiParticlesData::`vftable'; //----- (00886E80) -------------------------------------------------------- _DWORD *sub_886E80() { _DWORD *v0; // eax _DWORD *v1; // esi __int16 v2; // cx _DWORD *result; // eax v0 = operator new(0x5Cu); v1 = v0; if ( v0 ) { sub_879900(v0); v2 = *((_WORD *)v1 + 25); *((_WORD *)v1 + 36) = 0; v1[17] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; *v1 = &NiParticlesData::`vftable'; *((_WORD *)v1 + 25) = v2 & 0xFFF | 0x8000; *((_BYTE *)v1 + 64) = 1; result = v1; } else { result = 0; MEMORY[0x40] = 1; } return result; } // A2729C: using guessed type void *NiParticlesData::`vftable'; //----- (00886EE0) -------------------------------------------------------- char __thiscall sub_886EE0(float **this, _DWORD *a2) { _DWORD *v2; // edi float **v3; // ebx float *v5; // edx unsigned __int16 v6; // si unsigned __int16 v7; // cx float *v8; // edx unsigned __int16 v9; // si unsigned __int16 v10; // cx int v11; // edi float *v12; // ecx unsigned int v13; // edi unsigned int v14; // esi int v15; // eax float *v16; // edx int v17; // ebx float *v18; // eax unsigned int v19; // edx float *v20; // ecx int v21; // edi float *v22; // ecx unsigned int v23; // edi unsigned int v24; // esi int v25; // eax float *v26; // edx int v27; // ebx float **v28; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; v28 = this; if ( !sub_879C00(this, (int)a2) ) return 0; v5 = v3[17]; if ( !v5 ) goto LABEL_53; if ( !a2[17] ) return 0; if ( !v5 ) { LABEL_53: if ( !a2[17] ) goto LABEL_7; return 0; } LABEL_7: if ( v5 ) { v6 = *((_WORD *)v3 + 6); v7 = 0; if ( v6 > 0u ) { while ( *(float *)(a2[17] + 4 * v7) == v5[v7] ) { if ( ++v7 >= v6 ) { v2 = a2; goto LABEL_12; } } return 0; } } LABEL_12: if ( *((_WORD *)v3 + 36) == *((_WORD *)v2 + 36) ) { v8 = v3[19]; if ( v8 ) { if ( !v2[19] ) return 0; if ( v8 ) goto LABEL_54; } if ( v2[19] ) return 0; if ( v8 ) { LABEL_54: v9 = *((_WORD *)v3 + 6); v10 = 0; if ( v9 > 0u ) { v11 = v2[19]; while ( *(float *)(v11 + 4 * v10) == v8[v10] ) { if ( ++v10 >= v9 ) { v2 = a2; goto LABEL_23; } } return 0; } } LABEL_23: v12 = v3[20]; if ( v12 ) { if ( !v2[20] ) return 0; if ( v12 ) goto LABEL_55; } if ( v2[20] ) return 0; if ( v12 ) { LABEL_55: v13 = *((unsigned __int16 *)v3 + 6); v14 = 0; if ( *((_WORD *)v3 + 6) ) { v15 = a2[20]; v16 = (float *)(v15 + 8); v17 = v15 - (_DWORD)v12; while ( *(float *)((char *)v12 + v17) == *v12 && *(v16 - 1) == v12[1] && *v16 == v12[2] && v16[1] == v12[3] ) { ++v14; v16 += 4; v12 += 4; if ( v14 >= v13 ) { v3 = v28; goto LABEL_36; } } return 0; } LABEL_36: v2 = a2; } v18 = v3[21]; if ( v18 && (v19 = 0, *((_WORD *)v3 + 6)) ) { v20 = (float *)v2[21]; v21 = (char *)v18 - (char *)v20; while ( *v20 == *(float *)((char *)v20 + v21) ) { ++v19; ++v20; if ( v19 >= *((unsigned __int16 *)v3 + 6) ) goto LABEL_42; } } else { LABEL_42: v22 = v3[22]; if ( !v22 ) return 1; v23 = *((unsigned __int16 *)v3 + 6); v24 = 0; if ( !*((_WORD *)v3 + 6) ) return 1; v25 = a2[22]; v26 = (float *)(v25 + 8); v27 = v25 - (_DWORD)v22; while ( *(float *)((char *)v22 + v27) == *v22 && *(v26 - 1) == v22[1] && *v26 == v22[2] ) { ++v24; v26 += 3; v22 += 3; if ( v24 >= v23 ) return 1; } } } return 0; } //----- (008870F0) -------------------------------------------------------- void __thiscall sub_8870F0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, float *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, float *, signed int, int *, signed int); // eax int v10; // eax int v11; // edx void (__cdecl *v12)(int, bool *, signed int, int *, signed int); // edx int v13; // ST08_4 void (__cdecl *v14)(int, int, int, int *, signed int); // edx int v15; // ST04_4 int v16; // ST00_4 int v17; // eax int v18; // edx void (__cdecl *v19)(int, int *, signed int, int *, signed int); // edx int v20; // ST00_4 int v21; // eax void (__cdecl *v22)(int, int *, signed int, int *, signed int); // edx int v23; // ST00_4 void (__cdecl *v24)(int, char *, signed int, int *, signed int); // eax void *v25; // eax bool v26; // zf int v27; // ST08_4 void *v28; // ST04_4 void (__cdecl *v29)(int, void *, int, int *, signed int); // eax int v30; // ST00_4 int v31; // eax int v32; // edx int v33; // eax void (__cdecl *v34)(int, bool *, signed int, int *, signed int); // edx void *v35; // eax unsigned int v36; // ebx unsigned int v37; // ecx int v38; // edx unsigned int v39; // ecx _DWORD *v40; // eax int v41; // eax int v42; // ST00_4 void (__cdecl *v43)(int, bool *, signed int, int *, signed int); // eax int v44; // ebx int v45; // eax void (__cdecl *v46)(int, bool *, signed int, int *, signed int); // edx int v47; // ST00_4 int v48; // ebx int v49; // eax int v50; // ST04_4 int v51; // ST00_4 void (__cdecl *v52)(int, int, signed int, int *, signed int); // eax int v53; // eax int v54; // ST00_4 void (__cdecl *v55)(int, char *, signed int, int *, signed int); // eax unsigned __int16 i; // bx int v57; // [esp+Ch] [ebp-Ch] float v58; // [esp+10h] [ebp-8h] bool v59; // [esp+17h] [ebp-1h] v2 = a2; v3 = this; sub_87A050(this, a2); if ( *(_DWORD *)(v2 + 28) < 0x4010007u ) { v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, float *, signed int, int *, signed int))(v4 + 4); v57 = 2; v6(v5, &v58, 2, &v57, 1); } v3[17] = (int)operator new(4 * *((unsigned __int16 *)v3 + 6)); v7 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) >= 0xA00010Du ) { v12 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v7 + 4); v57 = 1; v12(v7, &v59, 1, &v57, 1); if ( v59 ) { v13 = 4 * *((unsigned __int16 *)v3 + 6); v14 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v15 = v3[17]; v16 = *(_DWORD *)(v2 + 352); v57 = 4; v14(v16, v15, v13, &v57, 1); } else { v17 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v18 = (unsigned __int16)v17++; *(float *)(v3[17] + 4 * v18) = 1.0; } while ( (unsigned __int16)v17 < *((_WORD *)v3 + 6) ); } } } else { v8 = *(_DWORD *)(v2 + 352); v9 = *(void (__cdecl **)(int, float *, signed int, int *, signed int))(v7 + 4); v57 = 4; v9(v8, &v58, 4, &v57, 1); v10 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v11 = (unsigned __int16)v10++; *(float *)(v3[17] + 4 * v11) = v58; } while ( (unsigned __int16)v10 < *((_WORD *)v3 + 6) ); } } v19 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v20 = *(_DWORD *)(v2 + 352); v57 = 2; v19(v20, v3 + 18, 2, &v57, 1); v21 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) >= 0x4010007u ) { v23 = *(_DWORD *)(v2 + 352); v24 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v21 + 4); v57 = 1; v24(v23, (char *)&a2 + 3, 1, &v57, 1); } else { v22 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v21 + 4); v57 = 4; v22(v21, v3 + 19, 4, &v57, 1); HIBYTE(a2) = v3[19] != 0; } v25 = operator new(4 * *((unsigned __int16 *)v3 + 6)); v26 = HIBYTE(a2) == 0; v3[19] = (int)v25; if ( v26 ) { v31 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v32 = (unsigned __int16)v31++; *(float *)(v3[19] + 4 * v32) = 1.0; } while ( (unsigned __int16)v31 < *((_WORD *)v3 + 6) ); } } else { v27 = 4 * *((unsigned __int16 *)v3 + 6); v28 = v25; v29 = *(void (__cdecl **)(int, void *, int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v30 = *(_DWORD *)(v2 + 352); v57 = 4; v29(v30, v28, v27, &v57, 1); } if ( *((_BYTE *)v3 + 64) ) { v33 = *(_DWORD *)(v2 + 352); if ( *(_DWORD *)(v2 + 28) >= 0x4010000u ) { v34 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v33 + 4); v57 = 1; v34(v33, &v59, 1, &v57, 1); } else { v57 = 4; (*(void (__cdecl **)(int, int *, signed int, int *, signed int))(v33 + 4))(v33, v3 + 20, 4, &v57, 1); v59 = v3[20] != 0; } v35 = operator new(16 * *((unsigned __int16 *)v3 + 6)); v26 = v59 == 0; v3[20] = (int)v35; if ( v26 ) { v38 = 0; v39 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v40 = (_DWORD *)(v38 + v3[20]); *v40 = dword_ABEC34; v40[1] = dword_ABEC38; v40[2] = dword_ABEC3C; v40[3] = dword_ABEC40; ++v39; v38 += 16; } while ( v39 < *((unsigned __int16 *)v3 + 6) ); } } else { v36 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { v58 = 0.0; do { sub_8752B0((char *)(LODWORD(v58) + v3[20]), v2); v37 = *((unsigned __int16 *)v3 + 6); LODWORD(v58) += 16; ++v36; } while ( v36 < v37 ); } } } else if ( *(_DWORD *)(v2 + 28) >= 0x5000008u ) { v41 = *(_DWORD *)(v2 + 352); v42 = v41; v43 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v41 + 4); v57 = 1; v43(v42, &v59, 1, &v57, 1); if ( v59 ) { v3[20] = (int)operator new(16 * *((unsigned __int16 *)v3 + 6)); v44 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do sub_8752B0((char *)(v3[20] + 16 * (unsigned __int16)v44++), v2); while ( (unsigned __int16)v44 < *((_WORD *)v3 + 6) ); } if ( *(_DWORD *)(v2 + 28) <= 0xA000100u ) { v45 = (*(int (__thiscall **)(int *))(*v3 + 4))(v3); if ( v45 ) { while ( (char *)v45 != dword_BA4B5C ) { v45 = *(_DWORD *)(v45 + 4); if ( !v45 ) goto LABEL_38; } } else { LABEL_38: operator delete((void *)v3[20]); v3[20] = 0; } } } } if ( *(_DWORD *)(v2 + 28) < 0xA000110u ) *((_WORD *)v3 + 25) = *((_WORD *)v3 + 25) & 0xFFF | 0x8000; if ( *(_DWORD *)(v2 + 28) >= 0xA030005u ) { v46 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v47 = *(_DWORD *)(v2 + 352); v57 = 1; v46(v47, &v59, 1, &v57, 1); if ( v59 ) { v3[21] = (int)operator new(4 * *((unsigned __int16 *)v3 + 6)); v48 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v49 = *(_DWORD *)(v2 + 352); v50 = v3[21] + 4 * (unsigned __int16)v48; v51 = v49; v52 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v49 + 4); v57 = 4; v52(v51, v50, 4, &v57, 1); ++v48; } while ( (unsigned __int16)v48 < *((_WORD *)v3 + 6) ); } } v53 = *(_DWORD *)(v2 + 352); v54 = v53; v55 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v53 + 4); v57 = 1; v55(v54, (char *)&v58 + 3, 1, &v57, 1); if ( HIBYTE(v58) ) { v3[22] = (int)operator new(12 * *((unsigned __int16 *)v3 + 6)); for ( i = 0; i < *((_WORD *)v3 + 6); ++i ) sub_8608D0((char *)(v3[22] + 12 * i), v2); } } } // ABEC34: using guessed type int dword_ABEC34; // ABEC38: using guessed type int dword_ABEC38; // ABEC3C: using guessed type int dword_ABEC3C; // ABEC40: using guessed type int dword_ABEC40; //----- (008875B0) -------------------------------------------------------- int __thiscall sub_8875B0(char *this, _DWORD *a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // ST1C_4 void (__cdecl *v8)(int, int, int, int *, signed int); // edx int v9; // ST18_4 int v10; // ST14_4 int v11; // eax int v12; // ST14_4 void (__cdecl *v13)(int, char *, signed int, int *, signed int); // eax int v14; // eax void (__cdecl *v15)(int, bool *, signed int, int *, signed int); // edx int v16; // ST1C_4 void (__cdecl *v17)(int, int, int, int *, signed int); // edx int v18; // ST18_4 int v19; // ST14_4 int v20; // eax int v21; // ST14_4 void (__cdecl *v22)(int, bool *, signed int, int *, signed int); // eax unsigned int v23; // ebx unsigned int v24; // edx int v25; // eax int v26; // ST14_4 void (__cdecl *v27)(int, bool *, signed int, int *, signed int); // eax unsigned int v28; // ebx int v29; // eax int v30; // ST18_4 int v31; // ST14_4 void (__cdecl *v32)(int, int, signed int, int *, signed int); // eax int v33; // eax int v34; // ST14_4 int (__cdecl *v35)(int, bool *, signed int, int *, signed int); // eax int result; // eax unsigned int v37; // ebx unsigned int v38; // edx int v39; // [esp+Ch] [ebp-8h] bool v40; // [esp+10h] [ebp-4h] bool v41; // [esp+11h] [ebp-3h] bool v42; // [esp+12h] [ebp-2h] bool v43; // [esp+13h] [ebp-1h] v2 = (signed int)a2; v3 = this; sub_87A530(this, a2); HIBYTE(a2) = *((_DWORD *)v3 + 17) != 0; v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v39 = 1; v6(v5, (char *)&a2 + 3, 1, &v39, 1); if ( HIBYTE(a2) ) { v7 = 4 * *((unsigned __int16 *)v3 + 6); v8 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v9 = *((_DWORD *)v3 + 17); v10 = *(_DWORD *)(v2 + 356); v39 = 4; v8(v10, v9, v7, &v39, 1); } v11 = *(_DWORD *)(v2 + 356); v12 = v11; v13 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v11 + 8); v39 = 2; v13(v12, v3 + 72, 2, &v39, 1); v14 = *(_DWORD *)(v2 + 356); v43 = *((_DWORD *)v3 + 19) != 0; v15 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v14 + 8); v39 = 1; v15(v14, &v43, 1, &v39, 1); if ( v43 ) { v16 = 4 * *((unsigned __int16 *)v3 + 6); v17 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v18 = *((_DWORD *)v3 + 19); v19 = *(_DWORD *)(v2 + 356); v39 = 4; v17(v19, v18, v16, &v39, 1); } v42 = *((_DWORD *)v3 + 20) != 0; v20 = *(_DWORD *)(v2 + 356); v21 = v20; v22 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v20 + 8); v39 = 1; v22(v21, &v42, 1, &v39, 1); if ( v42 ) { v23 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { v39 = 0; do { sub_875330((float *)(v39 + *((_DWORD *)v3 + 20)), v2); v24 = *((unsigned __int16 *)v3 + 6); v39 += 16; ++v23; } while ( v23 < v24 ); } } v41 = *((_DWORD *)v3 + 21) != 0; v25 = *(_DWORD *)(v2 + 356); v26 = v25; v27 = *(void (__cdecl **)(int, bool *, signed int, int *, signed int))(v25 + 8); v39 = 1; v27(v26, &v41, 1, &v39, 1); if ( v41 ) { v28 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do { v29 = *(_DWORD *)(v2 + 356); v30 = *((_DWORD *)v3 + 21) + 4 * v28; v31 = v29; v32 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v29 + 8); v39 = 4; v32(v31, v30, 4, &v39, 1); ++v28; } while ( v28 < *((unsigned __int16 *)v3 + 6) ); } } v33 = *(_DWORD *)(v2 + 356); v40 = *((_DWORD *)v3 + 22) != 0; v34 = v33; v35 = *(int (__cdecl **)(int, bool *, signed int, int *, signed int))(v33 + 8); v39 = 1; result = v35(v34, &v40, 1, &v39, 1); if ( v40 ) { v37 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { v39 = 0; do { result = sub_860940((char *)(v39 + *((_DWORD *)v3 + 22)), v2); v38 = *((unsigned __int16 *)v3 + 6); v39 += 12; ++v37; } while ( v37 < v38 ); } } return result; } //----- (008877C0) -------------------------------------------------------- unsigned int __thiscall sub_8877C0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = this; sub_87A7B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B4C); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878700((int)"m_pfRadii", *((_DWORD *)v3 + 17)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8785F0((int)"m_usActive", *((_WORD *)v3 + 36)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878700((int)"m_pfSizes", *((_DWORD *)v3 + 19)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_878700((int)"m_pkRotations", *((_DWORD *)v3 + 20)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_878700((int)"m_pfRotationAngles", *((_DWORD *)v3 + 21)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878700((int)"m_pkRotationAxes", *((_DWORD *)v3 + 22)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (00887950) -------------------------------------------------------- int __thiscall sub_887950(float *this, float *a2, _DWORD **a3) { float *v3; // esi int result; // eax v3 = this; result = sub_87AC50(this, (int)a2, a3); a2[67] = v3[67]; a2[68] = v3[68]; a2[69] = v3[69]; return result; } //----- (00887990) -------------------------------------------------------- bool __thiscall sub_887990(float *this, float *a2) { float *v2; // esi v2 = this; return sub_87AEC0(this, (int)a2) && a2[67] == v2[67] && a2[68] == v2[68] && a2[69] == v2[69]; } //----- (00887A00) -------------------------------------------------------- float *__thiscall sub_887A00(_DWORD *this) { _DWORD *v1; // esi float *result; // eax v1 = this; result = sub_85BE80((int)this); ++v1[47]; return result; } //----- (00887A10) -------------------------------------------------------- int __thiscall sub_887A10(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x118u); v4 = (int)v3; if ( v3 ) { sub_87AD20(v3); *(float *)(v4 + 268) = 0.0; *(_DWORD *)v4 = &NiPointLight::`vftable'; *(float *)(v4 + 272) = 1.0; *(float *)(v4 + 276) = 0.0; } else { v4 = 0; } sub_87AC50(v2, v4, a2); *(float *)(v4 + 268) = v2[67]; result = v4; *(float *)(v4 + 272) = v2[68]; *(float *)(v4 + 276) = v2[69]; return result; } // A2706C: using guessed type void *NiPointLight::`vftable'; //----- (00887A90) -------------------------------------------------------- float *sub_887A90() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x118u); v1 = v0; if ( !v0 ) return 0; sub_87AD20(v0); v1[67] = 0.0; *(_DWORD *)v1 = &NiPointLight::`vftable'; result = v1; v1[68] = 1.0; v1[69] = 0.0; return result; } // A2706C: using guessed type void *NiPointLight::`vftable'; //----- (00887AD0) -------------------------------------------------------- int __thiscall sub_887AD0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_87AE00(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 67, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 68, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; return v11(v10, v3 + 69, 4, &a2, 1); } //----- (00887B50) -------------------------------------------------------- int __thiscall sub_887B50(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_87AE60(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 67, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 68, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; return v11(v10, v3 + 69, 4, &a2, 1); } //----- (00887BD0) -------------------------------------------------------- unsigned int __thiscall sub_887BD0(int *this, char *a2) { char *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = a2; v3 = (float *)this; sub_87AF40(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B54); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fAtten0", v3[67]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"m_fAtten1", v3[68]); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"m_fAtten2", v3[69]); v11 = *((_DWORD *)v2 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v11 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v11, &a2); } //----- (00887CD0) -------------------------------------------------------- int __thiscall sub_887CD0(int *this, void **a2) { sub_8870F0(this, (signed int)a2); return sub_876290(a2); } //----- (00887CF0) -------------------------------------------------------- int __thiscall sub_887CF0(unsigned __int16 *this, unsigned __int16 a2) { unsigned __int16 *v2; // esi unsigned __int16 v3; // cx unsigned __int16 v4; // bx void (__thiscall ***v5)(_DWORD, signed int); // edi int result; // eax int v7; // [esp+8h] [ebp-4h] v2 = this; v3 = a2; v4 = a2; if ( a2 < v2[36] ) { do { (*(void (__stdcall **)(int *, _DWORD))(**((_DWORD **)v2 + 23) + 124))(&v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } ++v4; } while ( v4 < v2[36] ); v3 = a2; } result = v2[6]; if ( v3 > (unsigned __int16)result ) v2[36] = result; else v2[36] = v3; return result; } //----- (00887D70) -------------------------------------------------------- bool __thiscall sub_887D70(_DWORD *this, int a2) { _DWORD *v2; // esi bool result; // al v2 = this; result = sub_881290(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2[23] + 20))(a2); result = 1; } return result; } //----- (00887DA0) -------------------------------------------------------- int __thiscall sub_887DA0(char *this, _DWORD *a2) { char *v2; // esi v2 = this; sub_8875B0(this, a2); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*a2 + 44))(a2, *((_DWORD *)v2 + 23)); } //----- (00887DD0) -------------------------------------------------------- char __thiscall sub_887DD0(float **this, _DWORD *a2) { float **v2; // esi char result; // al v2 = this; result = sub_886EE0(this, a2); if ( result ) result = (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v2[23] + 28))(a2[23]) != 0; return result; } //----- (00887E10) -------------------------------------------------------- char *sub_887E10() { return dword_BA4B5C; } //----- (00887E20) -------------------------------------------------------- _DWORD *__thiscall sub_887E20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi _DWORD *v3; // eax int v4; // ebx v1 = this; sub_886DD0(this); *v1 = &NiParticleMeshesData::`vftable'; v2 = 0; v1[23] = 0; v3 = operator new(0xE8u); if ( v3 ) v2 = sub_85A1C0(v3, 0); v4 = v1[23]; if ( (_DWORD *)v4 != v2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[23] = v2; if ( v2 ) InterlockedIncrement(v2 + 1); } *((_BYTE *)v1 + 96) = 0; return v1; } // A2736C: using guessed type void *NiParticleMeshesData::`vftable'; //----- (00887EA0) -------------------------------------------------------- LONG __thiscall sub_887EA0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; *this = &NiParticleMeshesData::`vftable'; v2 = this[23]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[23] = 0; } v3 = v1[23]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_886B00(v1); } // A2736C: using guessed type void *NiParticleMeshesData::`vftable'; //----- (00887F00) -------------------------------------------------------- signed int __thiscall sub_887F00(int this, unsigned __int16 a2) { int v2; // esi void (__stdcall *v3)(int *, int); // edx void (__thiscall ***v4)(_DWORD, signed int); // edi void (__thiscall ***v6)(_DWORD, signed int); // ebx void (__thiscall ***v7)(_DWORD, signed int); // edi void (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // [esp-4h] [ebp-14h] int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v2 = this; v3 = *(void (__stdcall **)(int *, int))(**(_DWORD **)(this + 92) + 124); v9 = (unsigned __int16)(*(_WORD *)(this + 72) - 1); if ( a2 == (_WORD)v9 ) { v3(&v11, v9); if ( v11 ) { v4 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v4 ) { (**v4)(v4, 1); return sub_886BF0(v2, a2); } } } } else { v3(&v11, v9); (*(void (__stdcall **)(int *, _DWORD))(**(_DWORD **)(v2 + 92) + 124))(&v10, a2); if ( v10 ) { v6 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v6 ) (**v6)(v6, 1); } } (*(void (__stdcall **)(int *, _DWORD, int))(**(_DWORD **)(v2 + 92) + 128))(&v10, a2, v11); if ( v10 ) { v7 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v7 ) (**v7)(v7, 1); } } v8 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v8 ) (**v8)(v8, 1); } return sub_886BF0(v2, a2); } //----- (00888020) -------------------------------------------------------- int __thiscall sub_888020(_WORD *this) { _WORD *v1; // esi int result; // eax unsigned int v3; // edi int v4; // ebx _DWORD *v5; // eax int v6; // eax float v7; // ST10_4 float v8; // ST10_4 int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] v1 = this; result = 0; v3 = 0; if ( this[36] > 0u ) { v9 = 0; v10 = 0; do { result = *((_DWORD *)v1 + 23); if ( *(_DWORD *)(result + 188) > v3 ) { v4 = *(_DWORD *)(*(_DWORD *)(result + 180) + 4 * v3); if ( v4 ) { v5 = (_DWORD *)(v10 + *((_DWORD *)v1 + 8)); *(_DWORD *)(v4 + 88) = *v5; *(_DWORD *)(v4 + 92) = v5[1]; *(_DWORD *)(v4 + 96) = v5[2]; v6 = *((_DWORD *)v1 + 20); if ( v6 ) sub_694FD0((float *)(v9 + v6), (float *)(v4 + 52)); result = *((_DWORD *)v1 + 19); v7 = *(float *)(result + 4 * v3) * *(float *)(*((_DWORD *)v1 + 17) + 4 * v3); v8 = fabs(v7); *(float *)(v4 + 100) = v8; } } v10 += 12; v9 += 16; ++v3; } while ( v3 < (unsigned __int16)v1[36] ); } return result; } //----- (008880C0) -------------------------------------------------------- _DWORD *sub_8880C0() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x64u); if ( v0 ) { result = sub_887E20(v0); *((_BYTE *)result + 64) = 1; } else { result = 0; MEMORY[0x40] = 1; } return result; } //----- (008880F0) -------------------------------------------------------- int __thiscall sub_8880F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_871240(this, a2); result = sub_875AD0(a2); v4 = v2[23]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[23] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (00888150) -------------------------------------------------------- void *__thiscall sub_888150(void *this, char a2) { void *v2; // esi v2 = this; sub_887EA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00888180) -------------------------------------------------------- unsigned int __thiscall sub_888180(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8877C0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4B5C); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (008881D0) -------------------------------------------------------- int __thiscall sub_8881D0(int this, float a2, char a3) { *(float *)(this + 196) = a2; *(_BYTE *)(this + 200) = a3; return sub_85C3E0((_DWORD *)this, a2, a3); } //----- (00888200) -------------------------------------------------------- _DWORD *__thiscall sub_888200(int this, float a2) { *(float *)(this + 196) = a2; return sub_85C420((_BYTE *)this, a2); } //----- (00888220) -------------------------------------------------------- _DWORD *sub_888220() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xCCu); v1 = v0; if ( !v0 ) return 0; sub_88A680(v0); *v1 = &NiParticleMeshes::`vftable'; *((_BYTE *)v1 + 200) = 1; return v1; } // A273BC: using guessed type void *NiParticleMeshes::`vftable'; //----- (00888250) -------------------------------------------------------- int __thiscall sub_888250(_DWORD *this, _DWORD *a2) { return sub_8887C0(this, a2); } //----- (00888260) -------------------------------------------------------- char __thiscall sub_888260(_DWORD *this, int a2) { return sub_88A6E0(this, a2); } //----- (00888270) -------------------------------------------------------- void *sub_888270() { return &unk_BA4B64; } //----- (00888280) -------------------------------------------------------- int __thiscall sub_888280(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = operator new(0xCCu); v4 = (int)v3; if ( v3 ) { sub_88A680(v3); *(_DWORD *)v4 = &NiParticleMeshes::`vftable'; *(_BYTE *)(v4 + 200) = 1; sub_88A6A0(v2, v4, a2); result = v4; } else { sub_88A6A0(v2, 0, a2); result = 0; } return result; } // A273BC: using guessed type void *NiParticleMeshes::`vftable'; //----- (008882E0) -------------------------------------------------------- LONG __thiscall sub_8882E0(float *this) { float *v1; // ebx int v2; // ecx int v3; // edi float *v4; // ST18_4 float *v5; // ecx int v6; // edx int (__stdcall *v7)(float, _DWORD); // eax float v8; // ST18_4 LONG result; // eax int v10; // [esp+14h] [ebp-8h] v1 = this; sub_85BE80((int)this); v2 = *((_DWORD *)v1 + 46); v3 = *(_DWORD *)(v2 + 92); v10 = *((_DWORD *)v1 + 46); v4 = *(float **)(v2 + 92); sub_888020((_WORD *)v2); qmemcpy((void *)(v3 + 52), v1 + 26, 0x24u); v5 = v4; v4[22] = v1[35]; v4[23] = v1[36]; v6 = *(_DWORD *)v4; v4[24] = v1[37]; v7 = *(int (__stdcall **)(float, _DWORD))(v6 + 80); v8 = fabs(v1[38]); v5[25] = v8; result = ((int (__stdcall *)(_DWORD, _DWORD))v7)(v1[49], 0); if ( *(_BYTE *)(v10 + 96) ) { sub_85C4D0(v1); result = sub_85C6F0(v1); *(_BYTE *)(v10 + 96) = 0; } return result; } //----- (00888380) -------------------------------------------------------- int __thiscall sub_888380(_DWORD *this, _BYTE *a2, int a3, bool *a4) { _DWORD *v4; // esi _WORD *v5; // esi int result; // eax v4 = this; sub_86E390(this, a2, 1, a4); v5 = *(_WORD **)(v4[46] + 92); result = (*(int (__thiscall **)(_WORD *, _BYTE *, signed int, bool *))(*(_DWORD *)v5 + 76))(v5, a2, 1, a4); *a4 = 0; v5[14] &= 0xFFEFu; return result; } //----- (008883C0) -------------------------------------------------------- int __thiscall sub_8883C0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_86E300(this, a2); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2[46] + 92) + 92))(v2[44]); } //----- (008883F0) -------------------------------------------------------- int __thiscall sub_8883F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_8887E0(this, a2); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2[46] + 92) + 96))(v2[45]); } //----- (00888420) -------------------------------------------------------- int __thiscall sub_888420(_DWORD *this) { return (*(int (**)(void))(**(_DWORD **)(this[46] + 92) + 108))(); } //----- (00888440) -------------------------------------------------------- int __thiscall sub_888440(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // esi int v5; // ecx v2 = this; result = sub_86E460(this, a2); v4 = v2[46]; if ( v4 ) { v5 = *(_DWORD *)(v4 + 92); if ( v5 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v5 + 112))(a2); } return result; } //----- (00888470) -------------------------------------------------------- unsigned int __thiscall sub_888470(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_88A7D0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4BA4); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008884C0) -------------------------------------------------------- _DWORD *__thiscall sub_8884C0(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, char a6, __int16 a7, int a8) { _DWORD *v8; // esi _DWORD *result; // eax int v10; // ecx int v11; // eax v8 = this; sub_879810(this, a2, a3, 0, a4, a5, a6, a7); *v8 = &NiLinesData::`vftable'; if ( a8 ) { v8[16] = a8; result = v8; } else { v8[16] = operator new(a2); v10 = 0; v11 = 0; if ( a2 > 0u ) { do *(_BYTE *)(v10++ + v8[16]) = ~(_BYTE)v11++ & 1; while ( (unsigned __int16)v11 < a2 ); } result = v8; } return result; } // A27444: using guessed type void *NiLinesData::`vftable'; //----- (00888570) -------------------------------------------------------- char __thiscall sub_888570(float **this, int a2) { float **v2; // edi char result; // al float *v4; // esi unsigned __int16 v5; // di unsigned __int16 v6; // cx v2 = this; result = sub_879C00(this, a2); if ( result ) { v4 = v2[16]; if ( v4 ) { if ( !*(_DWORD *)(a2 + 64) ) goto LABEL_11; if ( v4 ) { LABEL_7: v5 = *((_WORD *)v2 + 6); v6 = 0; if ( v5 > 0u ) { while ( *((_BYTE *)v4 + v6) == *(_BYTE *)(*(_DWORD *)(a2 + 64) + v6) ) { if ( ++v6 >= v5 ) return 1; } goto LABEL_11; } return 1; } } if ( !*(_DWORD *)(a2 + 64) ) { if ( !v4 ) return 1; goto LABEL_7; } LABEL_11: result = 0; } return result; } //----- (008885E0) -------------------------------------------------------- char *sub_8885E0() { return dword_BA4B6C; } //----- (008885F0) -------------------------------------------------------- _DWORD *__thiscall sub_8885F0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 16); *(_DWORD *)this = &NiLinesData::`vftable'; operator delete(v3); sub_879E60(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A27444: using guessed type void *NiLinesData::`vftable'; //----- (00888630) -------------------------------------------------------- int __thiscall sub_888630(int *this, signed int a2) { signed int v2; // edi int *v3; // esi void *v4; // eax int v5; // ST08_4 void *v6; // ST04_4 int (__cdecl *v7)(int, void *, int, signed int *, signed int); // eax int v8; // ST00_4 v2 = a2; v3 = this; sub_87A050(this, a2); v4 = operator new(*((unsigned __int16 *)v3 + 6)); v5 = *((unsigned __int16 *)v3 + 6); v3[16] = (int)v4; v6 = v4; v7 = *(int (__cdecl **)(int, void *, int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); a2 = 1; return v7(v8, v6, v5, &a2, 1); } //----- (00888680) -------------------------------------------------------- int __thiscall sub_888680(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int v4; // ST08_4 int (__cdecl *v5)(int, int, int, _DWORD **, signed int); // edx int v6; // ST04_4 int v7; // ST00_4 v2 = a2; v3 = this; sub_87A530(this, a2); v4 = *((unsigned __int16 *)v3 + 6); v5 = *(int (__cdecl **)(int, int, int, _DWORD **, signed int))(v2[89] + 8); v6 = *((_DWORD *)v3 + 16); v7 = v2[89]; a2 = (_DWORD *)1; return v5(v7, v6, v4, &a2, 1); } //----- (008886C0) -------------------------------------------------------- unsigned int __thiscall sub_8886C0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_87A7B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B6C); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878700((int)"m_pkFlags", v3[16]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00888740) -------------------------------------------------------- _DWORD *__thiscall sub_888740(_DWORD *this, unsigned __int16 a2, int a3, int a4, int a5, char a6, __int16 a7, int a8) { _DWORD *v8; // esi _DWORD *v9; // eax _DWORD *v10; // eax v8 = this; v9 = operator new(0x44u); if ( v9 ) v10 = sub_8884C0(v9, a2, a3, a4, a5, a6, a7, a8); else v10 = 0; sub_86E0B0(v8, (int)v10); *v8 = &NiLines::`vftable'; return v8; } // A2749C: using guessed type void *NiLines::`vftable'; //----- (00888790) -------------------------------------------------------- _DWORD *sub_888790() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_86E110(v0); *v1 = &NiLines::`vftable'; return v1; } // A2749C: using guessed type void *NiLines::`vftable'; //----- (008887C0) -------------------------------------------------------- int __thiscall sub_8887C0(_DWORD *this, _DWORD *a2) { return sub_86E6F0(this, a2); } //----- (008887D0) -------------------------------------------------------- char *sub_8887D0() { return dword_BA4B74; } //----- (008887E0) -------------------------------------------------------- void __thiscall sub_8887E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // edi _DWORD *v6; // edi _DWORD *v7; // esi _DWORD *v8; // eax int v9; // esi _DWORD *v10; // [esp+Ch] [ebp-4h] v2 = this; v10 = this; if ( a2 ) { if ( a2[4] || a2[5] || a2[6] || a2[7] ) { v3 = operator new(0x20u); v4 = v3; if ( v3 ) { *v3 = &NiRefObject::`vftable'; v3[1] = 0; InterlockedIncrement(&Addend); *v4 = &NiDynamicEffectState::`vftable'; *((_BYTE *)v4 + 8) = 0; v4[3] = 0; v4[4] = 0; v4[5] = 0; v4[6] = 0; v4[7] = 0; } else { v4 = 0; } v5 = v2[45]; if ( (_DWORD *)v5 == v4 ) { v6 = v10; } else { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v10; v10[45] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v7 = (_DWORD *)a2[3]; while ( v7 ) { v8 = (_DWORD *)v7[1]; v7 = (_DWORD *)*v7; sub_87D860((void **)v6[45], v8); } } else { sub_56FF80(this + 45, (int)a2); } } else { v9 = this[45]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v2[45] = 0; } } } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A23C14: using guessed type void *NiDynamicEffectState::`vftable'; //----- (00888910) -------------------------------------------------------- _DWORD *__thiscall sub_888910(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_86E110(v3); *v4 = &NiLines::`vftable'; sub_86DFC0(v2, (int)v4, a2); result = v4; } else { sub_86DFC0(v2, 0, a2); result = 0; } return result; } // A2749C: using guessed type void *NiLines::`vftable'; //----- (00888970) -------------------------------------------------------- int __thiscall sub_888970(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; sub_86E250(this, a2); result = 1; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)a2 + 324))(a2, v2); return result; } //----- (008889B0) -------------------------------------------------------- unsigned int __thiscall sub_8889B0(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86E940(this, a2); v3 = sub_8784D0(*(int *)dword_BA4B74); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00888A00) -------------------------------------------------------- void __thiscall sub_888A00(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi unsigned int v4; // eax v3 = this; sub_868EF0(this, a2, a3); if ( v3[4] && v3[3] ) { *(_DWORD *)(a2 + 12) = v3[3]; *(_DWORD *)(a2 + 16) = operator new(4 * v3[3]); v4 = 0; if ( v3[3] ) { do { *(_DWORD *)(*(_DWORD *)(a2 + 16) + 4 * v4) = *(_DWORD *)(v3[4] + 4 * v4); ++v4; } while ( v4 < v3[3] ); } } else { *(_DWORD *)(a2 + 16) = 0; *(_DWORD *)(a2 + 12) = 0; } } //----- (00888A80) -------------------------------------------------------- void __thiscall sub_888A80(_DWORD *this, _DWORD *a2) { sub_868F60(this, a2); } //----- (00888A90) -------------------------------------------------------- char __thiscall sub_888A90(_DWORD *this, int a2) { unsigned int v3; // edx _DWORD *v4; // eax unsigned int v5; // ecx int v6; // esi if ( !a2 ) return 0; v3 = this[3]; if ( v3 != *(_DWORD *)(a2 + 12) ) return 0; v4 = (_DWORD *)this[4]; if ( !v4 ) goto LABEL_17; if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( !v4 ) { LABEL_17: if ( !*(_DWORD *)(a2 + 16) ) goto LABEL_8; return 0; } LABEL_8: if ( !v4 ) return 1; v5 = 0; if ( !v3 ) return 1; v6 = *(_DWORD *)(a2 + 16) - (_DWORD)v4; while ( *v4 == *(_DWORD *)((char *)v4 + v6) ) { ++v5; ++v4; if ( v5 >= v3 ) return 1; } return 0; } //----- (00888AF0) -------------------------------------------------------- char *sub_888AF0() { return dword_BA4B7C; } //----- (00888B00) -------------------------------------------------------- _DWORD *__thiscall sub_888B00(_DWORD *this, _DWORD **a2) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x14u); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NiIntegersExtraData::`vftable'; v4[4] = 0; v4[3] = 0; sub_888A00(v2, (int)v4, a2); result = v4; } else { sub_888A00(v2, 0, a2); result = 0; } return result; } // A27524: using guessed type void *NiIntegersExtraData::`vftable'; //----- (00888BA0) -------------------------------------------------------- _DWORD *__thiscall sub_888BA0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 4); *(_DWORD *)this = &NiIntegersExtraData::`vftable'; operator delete(v3); v2[4] = 0; sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A27524: using guessed type void *NiIntegersExtraData::`vftable'; //----- (00888BE0) -------------------------------------------------------- int __thiscall sub_888BE0(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi void (__cdecl *v4)(int, const char **, signed int, _DWORD **, signed int); // edx int v5; // ST14_4 int v6; // edi int (__cdecl *v7)(int, const char *, int, _DWORD **, signed int); // eax int v8; // ST08_4 const char *v9; // ST04_4 v2 = a2; v3 = this; sub_868DB0(this, a2); v4 = *(void (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)4; v4(v5, v3 + 3, 4, &a2, 1); v6 = v2[89]; v7 = *(int (__cdecl **)(int, const char *, int, _DWORD **, signed int))(v6 + 8); v8 = 4 * (_DWORD)v3[3]; v9 = v3[4]; a2 = (_DWORD *)4; return v7(v6, v9, v8, &a2, 1); } //----- (00888C40) -------------------------------------------------------- unsigned int __thiscall sub_888C40(_DWORD *this, char *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi unsigned int result; // eax bool v9; // zf char *v10; // eax unsigned int v11; // edi char *v12; // ebx _DWORD *v13; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v13 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B7C); v5 = v2[3]; a2 = v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"m_uiSize", v3[3]); v7 = v2[3]; a2 = v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); result = sub_823870(v2, v7, &a2); v9 = v3[3] == 0; a2 = 0; if ( !v9 ) { while ( 1 ) { v10 = sub_878630((int)"m_piValue[i]", *(_DWORD *)(v3[4] + 4 * (_DWORD)a2)); v11 = v2[3]; v12 = v10; if ( v11 < v2[2] || (sub_8237A0(v2, v11 + v2[5]), v11 < v2[2]) ) { if ( v11 < v2[3] ) { if ( v12 ) { if ( !*(_DWORD *)(v2[1] + 4 * v11) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v11) ) { --v2[4]; } } else { v2[3] = v11 + 1; if ( v12 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v11) = v12; } result = (unsigned int)(a2 + 1); a2 = (char *)result; if ( result >= v13[3] ) break; v3 = v13; } } return result; } //----- (00888D60) -------------------------------------------------------- bool __thiscall sub_888D60(void *this, int a2) { return sub_868D90(this, a2); } //----- (00888D70) -------------------------------------------------------- bool __thiscall sub_888D70(float *this, int a2) { return a2 && *(float *)(a2 + 12) == this[3]; } //----- (00888DA0) -------------------------------------------------------- char *sub_888DA0() { return dword_BA4B84; } //----- (00888DB0) -------------------------------------------------------- int __thiscall sub_888DB0(float *this, _DWORD **a2) { float *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x10u); v4 = (int)v3; if ( v3 ) { sub_868D00(v3); *(float *)(v4 + 12) = 0.0; *(_DWORD *)v4 = &NiFloatExtraData::`vftable'; } else { v4 = 0; } sub_868EF0(v2, v4, a2); *(float *)(v4 + 12) = v2[3]; return v4; } // A2757C: using guessed type void *NiFloatExtraData::`vftable'; //----- (00888E00) -------------------------------------------------------- float *sub_888E00() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x10u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); v1[3] = 0.0; *(_DWORD *)v1 = &NiFloatExtraData::`vftable'; return v1; } // A2757C: using guessed type void *NiFloatExtraData::`vftable'; //----- (00888E30) -------------------------------------------------------- void *__thiscall sub_888E30(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiFloatExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2757C: using guessed type void *NiFloatExtraData::`vftable'; //----- (00888E60) -------------------------------------------------------- int __thiscall sub_888E60(int *this, size_t a2) { size_t v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, size_t *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_868F80(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, size_t *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 3, 4, &a2, 1); } //----- (00888EA0) -------------------------------------------------------- int __thiscall sub_888EA0(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, _DWORD **, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_868DB0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, _DWORD **, signed int))(v2[89] + 8); v5 = v2[89]; a2 = (_DWORD *)4; return v4(v5, v3 + 3, 4, &a2, 1); } //----- (00888EE0) -------------------------------------------------------- unsigned int __thiscall sub_888EE0(float *this, char *a2) { char *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B84); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"m_fValue", v3[3]); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (00888F70) -------------------------------------------------------- int __thiscall sub_888F70(int *this, void **a2) { int *v2; // esi v2 = this; sub_858D60(this, a2); return sub_87D5D0((char *)v2 + 232, (signed int)a2); } //----- (00888FA0) -------------------------------------------------------- int __thiscall sub_888FA0(const char **this, unsigned int a2) { const char **v2; // esi v2 = this; sub_859EE0(this, a2); return sub_8737A0((char *)v2 + 232, a2); } //----- (00888FD0) -------------------------------------------------------- float __userpurge sub_888FD0@(float *this@) { float *v1; // esi float result; // eax float v3; // ecx double v4; // st7 double v5; // st6 double v6; // st6 float v7; // [esp+4h] [ebp-10h] float v8; // [esp+8h] [ebp-Ch] float v9; // [esp+Ch] [ebp-8h] float v10; // [esp+10h] [ebp-4h] v1 = this; sub_85DA90(this + 26, &v7, this + 58); result = v8; v3 = v9; v4 = v1[36] * v8 + v1[35] * v7; v5 = v1[37]; v1[62] = v7; v6 = v5 * v9; v1[63] = result; v1[64] = v3; v10 = v4 + v6; v10 = v10 + v1[61] * v1[38]; v1[65] = v10; return result; } //----- (00889050) -------------------------------------------------------- float __userpurge sub_889050@(float *this@) { float *v1; // esi v1 = this; sub_85BE80((int)this); return sub_888FD0(v1); } //----- (00889060) -------------------------------------------------------- float *__thiscall sub_889060(float *this, float *a2, float *a3, char a4) { float *v4; // esi float *v5; // eax float *v6; // eax float *v7; // eax double v8; // st7 float *result; // eax unsigned int v10; // edi float v11; // ecx float *v12; // eax unsigned int v13; // ebx int v14; // ecx char v15; // [esp+Ch] [ebp-B4h] char v16; // [esp+18h] [ebp-A8h] float v17; // [esp+24h] [ebp-9Ch] float v18; // [esp+28h] [ebp-98h] float v19; // [esp+2Ch] [ebp-94h] float v20; // [esp+30h] [ebp-90h] float v21; // [esp+34h] [ebp-8Ch] float v22; // [esp+38h] [ebp-88h] float v23; // [esp+3Ch] [ebp-84h] float v24; // [esp+40h] [ebp-80h] float v25; // [esp+44h] [ebp-7Ch] float v26; // [esp+48h] [ebp-78h] float v27; // [esp+4Ch] [ebp-74h] char v28; // [esp+50h] [ebp-70h] float v29[9]; // [esp+74h] [ebp-4Ch] char v30; // [esp+98h] [ebp-28h] v4 = this; v27 = *(float *)&a2; if ( a4 ) { v5 = sub_85D940(a2, (float *)&v28, this + 13); sub_85E050(v4 + 13, v29, v5); v6 = sub_85DA90((float *)LODWORD(v27), (float *)&v15, v4 + 22); v20 = *v6 + *a3; v21 = a3[1] + v6[1]; v22 = a3[2] + v6[2]; v17 = v20 - v4[22]; v18 = v21 - v4[23]; v19 = v22 - v4[24]; v27 = v4[25]; v7 = sub_85DAF0((float *)&v16, &v17, v4 + 13); v27 = 1.0 / v27; v8 = v27; v27 = v7[1] * v27; v26 = v7[2] * v8; v23 = v8 * *v7; v24 = v27; v25 = v26; sub_85DB50(v29, (float *)&v30); result = sub_85DAF0((float *)&v16, v4 + 58, (float *)&v30); v4[58] = *result; v4[59] = result[1]; v4[60] = result[2]; v10 = 0; v26 = v4[59] * v24 + v4[58] * v23 + v4[60] * v25; v4[61] = v26 + v4[61]; if ( *((_DWORD *)v4 + 47) ) { do { result = (float *)*((_DWORD *)v4 + 45); v11 = result[v10]; if ( v11 != 0.0 ) result = (float *)(*(int (__stdcall **)(float *, float *, signed int))(*(_DWORD *)LODWORD(v11) + 68))( v29, &v23, 1); ++v10; } while ( v10 < *((_DWORD *)v4 + 47) ); } } else { sub_85DB50(a2, (float *)&v30); v12 = sub_85DAF0((float *)&v16, v4 + 58, (float *)&v30); v4[58] = *v12; v4[59] = v12[1]; result = (float *)*((_DWORD *)v12 + 2); *((_DWORD *)v4 + 60) = result; v13 = 0; v26 = v4[59] * a3[1] + v4[58] * *a3 + v4[60] * a3[2]; v4[61] = v26 + v4[61]; if ( *((_DWORD *)v4 + 47) ) { do { v14 = *(_DWORD *)(*((_DWORD *)v4 + 45) + 4 * v13); if ( v14 ) result = (float *)(*(int (__stdcall **)(float, float *, signed int))(*(_DWORD *)v14 + 68))( COERCE_FLOAT(LODWORD(v27)), a3, 1); ++v13; } while ( v13 < *((_DWORD *)v4 + 47) ); } } return result; } //----- (008892B0) -------------------------------------------------------- signed int __thiscall sub_8892B0(int this, int a2) { int v2; // ebx float *v3; // edx signed int result; // eax int v5; // ecx _BYTE *v6; // esi _BYTE *v7; // edi float v8; // [esp+20h] [ebp+8h] float v9; // [esp+20h] [ebp+8h] v2 = a2; v3 = *(float **)(a2 + 12); v8 = v3[36] * *(float *)(this + 252) + v3[35] * *(float *)(this + 248) + v3[37] * *(float *)(this + 256) - *(float *)(this + 260); if ( v8 >= 0.0 ) { if ( v8 <= 0.0 ) { v9 = *(float *)(this + 252) * v3[29] + v3[26] * *(float *)(this + 248) + *(float *)(this + 256) * v3[32] - *(float *)(this + 260); if ( v9 >= 0.0 ) result = v9 > 0.0; else result = 2; } else { result = 1; } } else { result = 2; } v5 = *(_DWORD *)(this + 180); v6 = *(_BYTE **)v5; v7 = *(_BYTE **)(v5 + 4); if ( result == 2 ) { if ( v7 ) result = sub_85C0A0(v7, v2); if ( v6 ) result = sub_85C0A0(v6, v2); } else { if ( v6 ) result = sub_85C0A0(v6, v2); if ( v7 ) result = sub_85C0A0(v7, v2); } return result; } //----- (008893E0) -------------------------------------------------------- char __thiscall sub_8893E0(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_859FB0(this, a2); if ( result ) result = (unsigned __int8)sub_883690(v2 + 58, (float *)(a2 + 232)) == 0; return result; } //----- (00889420) -------------------------------------------------------- unsigned int __thiscall sub_889420(int *this, char *a2) { char *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = a2; v3 = this; sub_85A6D0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B8C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_873740((float *)v3 + 58, "m_kModelPlane"); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_873740((float *)v3 + 62, "m_kWorldPlane"); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v9, &a2); } //----- (008894E0) -------------------------------------------------------- char *sub_8894E0() { return dword_BA4B8C; } //----- (008894F0) -------------------------------------------------------- int __thiscall sub_8894F0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x108u); v4 = (int)v3; if ( v3 ) { sub_85A1C0(v3, 0); *(_DWORD *)v4 = &NiBSPNode::`vftable'; sub_8736A0((float *)(v4 + 232)); sub_8736A0((float *)(v4 + 248)); sub_81A750((_DWORD *)(v4 + 176), 2u); *(_DWORD *)(v4 + 196) = 0; } else { v4 = 0; } sub_859240(v2, v4, a2); *(_DWORD *)(v4 + 232) = v2[58]; *(_DWORD *)(v4 + 236) = v2[59]; *(_DWORD *)(v4 + 240) = v2[60]; *(_DWORD *)(v4 + 244) = v2[61]; return v4; } // A275E4: using guessed type void *NiBSPNode::`vftable'; //----- (008895F0) -------------------------------------------------------- bool __thiscall sub_8895F0(_BYTE *this, int a2) { bool result; // al if ( a2 ) result = this[12] == *(_BYTE *)(a2 + 12); else result = 0; return result; } //----- (00889610) -------------------------------------------------------- char *sub_889610() { return dword_BA4B94; } //----- (00889620) -------------------------------------------------------- int __thiscall sub_889620(_BYTE *this, _DWORD **a2) { _BYTE *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x10u); v4 = (int)v3; if ( v3 ) { sub_868D00(v3); *(_DWORD *)v4 = &NiBooleanExtraData::`vftable'; *(_BYTE *)(v4 + 12) = 0; } else { v4 = 0; } sub_868EF0(v2, v4, a2); *(_BYTE *)(v4 + 12) = v2[12]; return v4; } // A27674: using guessed type void *NiBooleanExtraData::`vftable'; //----- (00889670) -------------------------------------------------------- _DWORD *sub_889670() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x10u); v1 = v0; if ( !v0 ) return 0; sub_868D00(v0); *v1 = &NiBooleanExtraData::`vftable'; *((_BYTE *)v1 + 12) = 0; return v1; } // A27674: using guessed type void *NiBooleanExtraData::`vftable'; //----- (008896A0) -------------------------------------------------------- void *__thiscall sub_8896A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiBooleanExtraData::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A27674: using guessed type void *NiBooleanExtraData::`vftable'; //----- (008896D0) -------------------------------------------------------- int __thiscall sub_8896D0(int *this, size_t a2) { size_t v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int result; // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_868F80(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v8 = 1; result = v6(v5, (char *)&a2 + 3, 1, &v8, 1); *((_BYTE *)v3 + 12) = HIBYTE(a2) != 0; return result; } //----- (00889720) -------------------------------------------------------- int __thiscall sub_889720(const char **this, _DWORD *a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_868DB0(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 12); v4 = v2[89]; v5 = v4; v6 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v8 = 1; return v6(v5, (char *)&a2 + 3, 1, &v8, 1); } //----- (00889770) -------------------------------------------------------- unsigned int __thiscall sub_889770(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B94); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"m_bValue", *((_BYTE *)v3 + 12)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (008897F0) -------------------------------------------------------- int __thiscall sub_8897F0(int this, float a2, int a3) { int v3; // esi v3 = this; *(float *)(this + 236) = a2; *(_BYTE *)(this + 240) = a3; sub_859510((float *)this, a2, a3); return (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 104))(v3); } //----- (00889820) -------------------------------------------------------- int __thiscall sub_889820(float *this, float a2) { float *v2; // esi v2 = this; this[59] = a2; sub_8595C0((int)this, a2); return (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 104))(v2); } //----- (00889850) -------------------------------------------------------- int __thiscall sub_889850(float *this, float a2) { float *v2; // esi v2 = this; this[59] = a2; sub_8596B0((int)this, a2); return (*(int (__thiscall **)(float *))(*(_DWORD *)v2 + 104))(v2); } //----- (00889880) -------------------------------------------------------- char __stdcall sub_889880(float *a1, float *a2, float *a3, float *a4, float a5) { float v6; // ST20_4 float v7; // ST24_4 float v8; // eax double v9; // st7 float v10; // ecx float v11; // eax int v12; // esi float v13; // ecx long double v14; // st7 double v15; // st7 float v16; // ecx float v17; // edx float *v18; // eax float *v19; // eax float v20; // [esp+28h] [ebp-48h] float v21; // [esp+2Ch] [ebp-44h] float v22; // [esp+30h] [ebp-40h] float v23; // [esp+34h] [ebp-3Ch] float v24; // [esp+38h] [ebp-38h] float v25; // [esp+3Ch] [ebp-34h] float v26; // [esp+40h] [ebp-30h] float v27; // [esp+44h] [ebp-2Ch] char v28; // [esp+48h] [ebp-28h] v20 = a1[35] - *a2; v24 = a5; v21 = a1[36] - a2[1]; v22 = a1[37] - a2[2]; v23 = v21 * v21 + v20 * v20 + v22 * v22; if ( v23 < 0.001 ) return 0; sub_4430B0(&v20); v6 = a1[29]; v7 = a1[32]; v25 = -a1[26]; *a3 = v25; v26 = -v6; a3[1] = v26; v27 = -v7; a3[2] = v27; v25 = a1[27]; v26 = a1[30]; v8 = v26; v9 = a1[33]; *a4 = v25; v27 = v9; v10 = v27; a4[1] = v8; a4[2] = v10; v25 = a1[28]; v26 = a1[31]; v11 = v26; v12 = LODWORD(v24); v27 = a1[34]; v13 = v27; *(float *)LODWORD(v24) = v25; *(float *)(v12 + 4) = v11; *(float *)(v12 + 8) = v13; v24 = a3[1] * v21 + *a3 * v20 + a3[2] * v22; v14 = v24; if ( v24 < 0.9999989867210388 ) { if ( v14 <= -1.0 ) { v15 = flt_BA45B4; } else if ( v14 >= 1.0 ) { v15 = 0.0; } else { v24 = acos(v14); v15 = v24; } v23 = v15; sub_443140(&v20, &v25, a3); sub_85D860((float *)&v28, v23, v25, v26, v27); v16 = v21; v17 = v22; *a3 = v20; a3[1] = v16; a3[2] = v17; v18 = sub_85DA90((float *)&v28, &v25, a4); *a4 = *v18; a4[1] = v18[1]; a4[2] = v18[2]; v19 = sub_85DA90((float *)&v28, &v25, (float *)v12); *(float *)v12 = *v19; *(float *)(v12 + 4) = v19[1]; *(float *)(v12 + 8) = v19[2]; } return 1; } // BA45B4: using guessed type float flt_BA45B4; //----- (00889AA0) -------------------------------------------------------- char __thiscall sub_889AA0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; result = sub_859FB0(this, a2); if ( result ) result = ((*((_BYTE *)v2 + 232) ^ *(_BYTE *)(a2 + 232)) & 7) == 0; return result; } //----- (00889AE0) -------------------------------------------------------- char *__cdecl sub_889AE0(int ArgList, int a2) { size_t v2; // esi char *v3; // edi char *result; // eax v2 = strlen((const char *)ArgList) + 22; v3 = (char *)operator new(v2); switch ( a2 ) { case 0: sub_7FF6E0(v3, v2, "%s = ALWAYS_FACE_CAMERA", ArgList); result = v3; break; case 1: sub_7FF6E0(v3, v2, "%s = ROTATE_ABOUT_UP", ArgList); result = v3; break; case 2: sub_7FF6E0(v3, v2, "%s = RIGID_FACE_CAMERA", ArgList); result = v3; break; case 3: sub_7FF6E0(v3, v2, "%s = ALWAYS_FACE_CENTER", ArgList); result = v3; break; case 4: sub_7FF6E0(v3, v2, "%s = RIGID_FACE_CENTER", ArgList); goto LABEL_7; default: LABEL_7: result = v3; break; } return result; } //----- (00889BA0) -------------------------------------------------------- char *sub_889BA0() { return dword_BA4B9C; } //----- (00889BB0) -------------------------------------------------------- float *__thiscall sub_889BB0(float *this, float *a2) { float *v2; // ebx int v3; // eax float *v4; // esi __int16 v5; // ax int v6; // eax double v7; // st7 double v8; // st7 double v9; // st7 double v10; // st7 float *v11; // eax float *v12; // eax float *v13; // eax double v14; // st7 float *v15; // eax double v16; // st7 double v17; // st7 double v18; // st7 double v19; // st7 float *v20; // eax float *v21; // eax float *v22; // eax float v23; // edx float *result; // eax unsigned int v25; // esi int v26; // ecx char v27; // [esp+14h] [ebp-11Ch] char v28; // [esp+20h] [ebp-110h] char v29; // [esp+2Ch] [ebp-104h] char v30; // [esp+38h] [ebp-F8h] char v31; // [esp+44h] [ebp-ECh] char v32; // [esp+50h] [ebp-E0h] char v33; // [esp+5Ch] [ebp-D4h] float v34; // [esp+68h] [ebp-C8h] float v35; // [esp+6Ch] [ebp-C4h] float v36; // [esp+70h] [ebp-C0h] float v37; // [esp+74h] [ebp-BCh] float v38; // [esp+78h] [ebp-B8h] float v39; // [esp+7Ch] [ebp-B4h] float v40; // [esp+80h] [ebp-B0h] float v41; // [esp+84h] [ebp-ACh] float v42; // [esp+88h] [ebp-A8h] float v43; // [esp+8Ch] [ebp-A4h] float v44; // [esp+90h] [ebp-A0h] float v45; // [esp+94h] [ebp-9Ch] float v46; // [esp+98h] [ebp-98h] float *v47; // [esp+9Ch] [ebp-94h] char v48; // [esp+A0h] [ebp-90h] char v49; // [esp+B0h] [ebp-80h] char v50; // [esp+D4h] [ebp-5Ch] float v51; // [esp+108h] [ebp-28h] float v52; // [esp+10Ch] [ebp-24h] float v53; // [esp+110h] [ebp-20h] float v54; // [esp+114h] [ebp-1Ch] float v55; // [esp+118h] [ebp-18h] float v56; // [esp+11Ch] [ebp-14h] float v57; // [esp+120h] [ebp-10h] float v58; // [esp+124h] [ebp-Ch] float v59; // [esp+128h] [ebp-8h] v2 = this; v47 = a2; v3 = *((_DWORD *)this + 8); if ( v3 ) qmemcpy(&v50, (const void *)(v3 + 104), 0x34u); else sub_87C3C0((float *)&v50); v4 = sub_85BDC0((float *)&v50, (float *)&v48, v2 + 13); v5 = *((_WORD *)v2 + 116); qmemcpy(v2 + 26, v4, 0x34u); v6 = v5 & 7; qmemcpy(&v51, &unk_ABD440, 0x24u); switch ( v6 ) { case 0: case 3: if ( v6 == 3 ) { if ( !sub_889880(v47, v2 + 35, &v44, &v35, COERCE_FLOAT(&v38)) ) break; } else { v44 = v47[26]; v45 = v47[29]; v46 = v47[32]; v35 = -v44; v44 = v35; v36 = -v45; v45 = v36; v37 = -v46; v7 = v47[27]; v46 = v37; v38 = v7; v8 = v47[30]; v35 = v38; v39 = v8; v9 = v47[33]; v36 = v39; v40 = v9; v10 = v47[28]; v37 = v40; v41 = v10; v42 = v47[31]; v43 = v47[34]; v38 = v41; v39 = v42; v40 = v43; } v11 = sub_85DAF0((float *)&v31, &v44, v2 + 26); v44 = *v11; v45 = v11[1]; v46 = v11[2]; v12 = sub_85DAF0((float *)&v33, &v35, v2 + 26); v35 = *v12; v36 = v12[1]; v37 = v12[2]; v13 = sub_85DAF0((float *)&v29, &v38, v2 + 26); v38 = *v13; v39 = v13[1]; v40 = v13[2]; *(float *)&v47 = v36 * v36 + v39 * v39; *(float *)&v47 = sqrt(*(float *)&v47); if ( *(float *)&v47 <= 0.000001 ) { v41 = -v38; v42 = -v39; v43 = -v40; v51 = v41; v54 = v42; v57 = v43; v41 = -v35; v42 = -v36; v43 = -v37; v52 = v41; v55 = v42; v14 = v43; } else { *(float *)&v47 = 1.0 / *(float *)&v47; v34 = *(float *)&v47 * v36; *(float *)&v47 = *(float *)&v47 * -v39; v51 = v38 * v34 + v35 * *(float *)&v47; v54 = *(float *)&v47 * v36 + v34 * v39; v57 = v37 * *(float *)&v47 + v40 * v34; v52 = v35 * v34 - v38 * *(float *)&v47; v55 = v36 * v34 - v39 * *(float *)&v47; v14 = v34 * v37 - *(float *)&v47 * v40; } v58 = v14; v53 = v44; v56 = v45; v59 = v46; break; case 1: v41 = v47[35] - v2[35]; v42 = v47[36] - v2[36]; v43 = v47[37] - v2[37]; v34 = v2[38]; v15 = sub_85DAF0((float *)&v27, &v41, v2 + 26); v34 = 1.0 / v34; v44 = *v15 * v34; v46 = v34 * v15[2]; v34 = v46 * v46 + v44 * v44; v34 = sqrt(v34); *(float *)&v47 = v34; if ( v34 >= 1.0e-12 ) { *(float *)&v47 = 1.0 / v34; v44 = v44 * *(float *)&v47; v46 = *(float *)&v47 * v46; v51 = v46; v54 = 0.0; v57 = -v44; v52 = 0.0; v55 = 1.0; v58 = 0.0; v56 = 0.0; v53 = v44; v59 = v46; } break; case 2: case 4: if ( v6 == 4 ) { if ( !sub_889880(v47, v2 + 35, &v38, &v35, COERCE_FLOAT(&v44)) ) break; } else { v41 = v47[26]; v42 = v47[29]; v43 = v47[32]; v44 = -v41; v38 = v44; v45 = -v42; v39 = v45; v46 = -v43; v16 = v47[27]; v40 = v46; v41 = v16; v17 = v47[30]; v35 = v41; v42 = v17; v18 = v47[33]; v36 = v42; v43 = v18; v19 = v47[28]; v37 = v43; v41 = v19; v42 = v47[31]; v43 = v47[34]; v44 = v41; v45 = v42; v46 = v43; } v20 = sub_85DAF0((float *)&v28, &v38, v2 + 26); v38 = *v20; v39 = v20[1]; v40 = v20[2]; v21 = sub_85DAF0((float *)&v30, &v35, v2 + 26); v35 = *v21; v36 = v21[1]; v37 = v21[2]; v22 = sub_85DAF0((float *)&v32, &v44, v2 + 26); v44 = *v22; v45 = v22[1]; v23 = v22[2]; v51 = v44; v46 = v23; v54 = v45; v57 = v23; v52 = v35; v55 = v36; v58 = v37; v53 = v38; v56 = v39; v59 = v40; break; default: break; } result = sub_85D940(v2 + 26, (float *)&v49, &v51); qmemcpy(v2 + 26, result, 0x24u); v25 = 0; if ( *((_DWORD *)v2 + 47) ) { do { v26 = *(_DWORD *)(*((_DWORD *)v2 + 45) + 4 * v25); if ( v26 ) result = (float *)(*(int (__stdcall **)(float, _DWORD))(*(_DWORD *)v26 + 80))( v2[59], *((unsigned __int8 *)v2 + 240)); ++v25; } while ( v25 < *((_DWORD *)v2 + 47) ); } return result; } //----- (0088A3A0) -------------------------------------------------------- void __thiscall sub_88A3A0(float *this, int a2) { int v2; // esi v2 = (int)this; sub_889BB0(this, *(float **)(a2 + 12)); sub_859110(v2, a2); } //----- (0088A3D0) -------------------------------------------------------- int __thiscall sub_88A3D0(int this) { float v1; // ST04_4 float v2; // ST08_4 float v3; // ST0C_4 float v4; // ST10_4 float v5; // ST10_4 int result; // eax double v7; // st7 float v8; // ST10_4 if ( *(_DWORD *)(this + 192) ) { v1 = *(float *)(this + 36) - *(float *)(this + 140); v2 = *(float *)(this + 40) - *(float *)(this + 144); v3 = *(float *)(this + 44) - *(float *)(this + 148); v4 = v2 * v2 + v1 * v1 + v3 * v3; v5 = sqrt(v4); result = *(_DWORD *)(this + 140); v7 = v5 + *(float *)(this + 48); *(_DWORD *)(this + 36) = result; *(_DWORD *)(this + 40) = *(_DWORD *)(this + 144); v8 = v7; *(_DWORD *)(this + 44) = *(_DWORD *)(this + 148); *(float *)(this + 48) = v8; } return result; } //----- (0088A460) -------------------------------------------------------- int __thiscall sub_88A460(_WORD *this, _DWORD **a2) { _WORD *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0xF4u); v4 = (int)v3; if ( v3 ) { sub_85A1C0(v3, 0); *(float *)(v4 + 236) = 0.0; *(_DWORD *)v4 = &NiBillboardNode::`vftable'; *(_WORD *)(v4 + 232) = 1; *(_BYTE *)(v4 + 240) = 1; } else { v4 = 0; } sub_859240(v2, v4, a2); *(_WORD *)(v4 + 232) = v2[116]; return v4; } // A2774C: using guessed type void *NiBillboardNode::`vftable'; //----- (0088A4D0) -------------------------------------------------------- float *sub_88A4D0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0xF4u); v1 = v0; if ( !v0 ) return 0; sub_85A1C0(v0, 0); v1[59] = 0.0; *((_WORD *)v1 + 116) = 1; *((_BYTE *)v1 + 240) = 1; *(_DWORD *)v1 = &NiBillboardNode::`vftable'; return v1; } // A2774C: using guessed type void *NiBillboardNode::`vftable'; //----- (0088A520) -------------------------------------------------------- __int16 __thiscall sub_88A520(int *this, void **a2) { void **v2; // edi int *v3; // esi __int16 v4; // ax __int16 result; // ax _DWORD *v6; // edi int (__cdecl *v7)(_DWORD *, int *, signed int, void ***, signed int); // eax v2 = a2; v3 = this; sub_858D60(this, a2); if ( (unsigned int)v2[7] >= 0xA000102 ) { v6 = v2[88]; v7 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v6[1]; a2 = (void **)2; result = v7(v6, v3 + 58, 2, &a2, 1); } else { v4 = *((_WORD *)v2 + 206); *((_WORD *)v3 + 116) = v4; if ( (unsigned int)v2[7] < 0x4020003 ) *((_WORD *)v3 + 116) = v4 & 0x1FFF | 2 * (v4 & 0xE000); result = *((unsigned __int8 *)v3 + 233); *((_WORD *)v3 + 116) = result; } return result; } //----- (0088A5B0) -------------------------------------------------------- int __thiscall sub_88A5B0(const char **this, unsigned int a2) { unsigned int v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, unsigned int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_859EE0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, unsigned int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 2; return v4(v5, v3 + 58, 2, &a2, 1); } //----- (0088A5F0) -------------------------------------------------------- unsigned int __thiscall sub_88A5F0(int *this, char *a2) { char *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_85A6D0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4B9C); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_889AE0((int)"m_eMode", v3[58] & 7); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (0088A680) -------------------------------------------------------- _DWORD *__thiscall sub_88A680(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_86E110(this); *v1 = &NiParticles::`vftable'; return v1; } // A277E4: using guessed type void *NiParticles::`vftable'; //----- (0088A6A0) -------------------------------------------------------- void __thiscall sub_88A6A0(_DWORD *this, int a2, _DWORD **a3) { sub_86DFC0(this, a2, a3); } //----- (0088A6B0) -------------------------------------------------------- _DWORD *sub_88A6B0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0xC4u); v1 = v0; if ( !v0 ) return 0; sub_86E110(v0); *v1 = &NiParticles::`vftable'; return v1; } // A277E4: using guessed type void *NiParticles::`vftable'; //----- (0088A6E0) -------------------------------------------------------- char __thiscall sub_88A6E0(_DWORD *this, int a2) { return sub_86DFF0(this, a2); } //----- (0088A6F0) -------------------------------------------------------- char *sub_88A6F0() { return dword_BA4BA4; } //----- (0088A700) -------------------------------------------------------- int __thiscall sub_88A700(_DWORD *this, int a2) { int result; // eax result = this[46]; *(_WORD *)(result + 50) = *(_WORD *)(result + 50) & 0xFFF | 0x8000; return result; } //----- (0088A730) -------------------------------------------------------- _DWORD *__thiscall sub_88A730(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xC4u); v4 = v3; if ( v3 ) { sub_86E110(v3); *v4 = &NiParticles::`vftable'; sub_86DFC0(v2, (int)v4, a2); result = v4; } else { sub_86DFC0(v2, 0, a2); result = 0; } return result; } // A277E4: using guessed type void *NiParticles::`vftable'; //----- (0088A790) -------------------------------------------------------- int __thiscall sub_88A790(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; sub_86E250(this, a2); result = 1; if ( (*(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1) && *(_BYTE *)(a2 + 128) == 1 ) result = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)a2 + 320))(a2, v2); return result; } //----- (0088A7D0) -------------------------------------------------------- unsigned int __thiscall sub_88A7D0(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86E940(this, a2); v3 = sub_8784D0(*(int *)dword_BA4BA4); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0088A820) -------------------------------------------------------- _DWORD *__thiscall sub_88A820(_DWORD *this, int a2, _DWORD *a3, int a4) { int v4; // eax _DWORD *result; // eax v4 = this[1]; result = a3; switch ( (unsigned int)a3 ) { case 0u: case 4u: case 8u: goto LABEL_5; case 1u: case 5u: case 9u: goto LABEL_4; case 2u: case 6u: case 0xAu: goto LABEL_3; case 3u: case 7u: case 0xBu: *(_DWORD *)(a2 + 4 * (*a3)++) = 4; LABEL_3: *(_DWORD *)(a2 + 4 * (*a3)++) = 4; LABEL_4: *(_DWORD *)(a2 + 4 * (*a3)++) = 4; LABEL_5: *(_DWORD *)(a2 + 4 * (*a3)++) = 4; return result; case 0xCu: case 0x10u: goto LABEL_9; case 0xDu: case 0x11u: goto LABEL_8; case 0xEu: case 0x12u: goto LABEL_7; case 0xFu: case 0x13u: *(_DWORD *)(a2 + 4 * (*a3)++) = 2; LABEL_7: *(_DWORD *)(a2 + 4 * (*a3)++) = 2; LABEL_8: *(_DWORD *)(a2 + 4 * (*a3)++) = 2; LABEL_9: *(_DWORD *)(a2 + 4 * (*a3)++) = 2; return result; case 0x14u: case 0x18u: case 0x1Cu: goto LABEL_13; case 0x15u: case 0x19u: case 0x1Du: goto LABEL_12; case 0x16u: case 0x1Au: case 0x1Eu: goto LABEL_11; case 0x17u: case 0x1Bu: case 0x1Fu: *(_DWORD *)(a2 + 4 * (*a3)++) = 1; LABEL_11: *(_DWORD *)(a2 + 4 * (*a3)++) = 1; LABEL_12: *(_DWORD *)(a2 + 4 * (*a3)++) = 1; LABEL_13: *(_DWORD *)(a2 + 4 * (*a3)++) = 1; break; default: return result; } return result; } //----- (0088A930) -------------------------------------------------------- char __thiscall sub_88A930(unsigned int *this, _DWORD *a2) { unsigned int v2; // edx unsigned __int8 *v4; // ecx unsigned __int8 *v5; // esi int v6; // eax v2 = *this; if ( *this != *a2 ) return 0; v4 = (unsigned __int8 *)this[1]; v5 = (unsigned __int8 *)a2[1]; if ( v2 < 4 ) { LABEL_6: if ( !v2 ) return 1; } else { while ( *(_DWORD *)v4 == *(_DWORD *)v5 ) { v2 -= 4; v5 += 4; v4 += 4; if ( v2 < 4 ) goto LABEL_6; } } v6 = *v4 - *v5; if ( *v4 == *v5 ) { if ( v2 <= 1 ) return 1; v6 = v4[1] - v5[1]; if ( v4[1] == v5[1] ) { if ( v2 <= 2 ) return 1; v6 = v4[2] - v5[2]; if ( v4[2] == v5[2] ) { if ( v2 <= 3 ) return 1; v6 = v4[3] - v5[3]; } } } if ( (v6 >> 31) | 1 ) return 0; return 1; } //----- (0088A9C0) -------------------------------------------------------- void *__thiscall sub_88A9C0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A2786C: using guessed type void *NiTArray::`vftable'; //----- (0088A9F0) -------------------------------------------------------- char __thiscall sub_88A9F0(int this, unsigned int a2, _DWORD *a3, _DWORD *a4, _WORD *a5, _DWORD *a6, _DWORD *a7, _DWORD *a8) { int v9; // eax int v10; // edx _DWORD *v11; // eax unsigned int v12; // edx unsigned int *v13; // ecx unsigned int v14; // eax if ( a2 >= *(_DWORD *)(this + 16) ) return 0; v9 = *(_DWORD *)(this + 20); if ( !v9 ) return 0; v10 = *(_DWORD *)(v9 + 28 * a2 + 4); v11 = (_DWORD *)(v9 + 28 * a2); *a4 = v10; if ( !v10 ) return 0; *a5 = *(_WORD *)(this + 12); *a6 = v11[3]; *a7 = v11[2]; *a8 = v11[4]; v12 = v11[5]; if ( v12 > *(_DWORD *)(this + 36) ) return 0; v13 = *(unsigned int **)(*(_DWORD *)(this + 28) + 4 * v12); if ( !v13 ) return 0; v14 = v11[6]; if ( *v13 < v14 ) return 0; *a3 = v14 + v13[1]; return 1; } //----- (0088AA80) -------------------------------------------------------- bool __thiscall sub_88AA80(_WORD *this, int a2) { _WORD *v2; // ebx bool result; // al unsigned int v4; // edi unsigned int v5; // esi int v6; // edx int v7; // eax _DWORD *v8; // ecx int v9; // edx unsigned int v10; // edx unsigned int v11; // edi _DWORD **v12; // esi int v13; // ebx unsigned int *v14; // ecx _WORD *v15; // [esp+8h] [ebp-4h] unsigned int v16; // [esp+8h] [ebp-4h] v2 = this; v15 = this; result = sub_85BB20(this, a2); if ( result ) { if ( v2[6] != *(_WORD *)(a2 + 12) ) return 0; v4 = *((_DWORD *)v2 + 4); if ( v4 != *(_DWORD *)(a2 + 16) ) return 0; v5 = 0; if ( v4 ) { v6 = *(_DWORD *)(a2 + 20); v7 = *((_DWORD *)v2 + 5); v8 = (_DWORD *)(v6 + 8); v9 = v6 - v7; while ( *(_DWORD *)(v7 + 4) == *(v8 - 1) && *(_DWORD *)(v7 + 8) == *v8 && *(_DWORD *)(v7 + 12) == v8[1] && *(_DWORD *)(v7 + 16) == v8[2] && *(_DWORD *)(v7 + 20) == v8[3] && *(_DWORD *)(v7 + 24) == v8[4] && *(_BYTE *)v7 == *(_BYTE *)(v9 + v7) ) { ++v5; v8 += 7; v7 += 28; if ( v5 >= v4 ) { v2 = v15; goto LABEL_15; } } return 0; } LABEL_15: v10 = *((_DWORD *)v2 + 9); v11 = 0; v16 = v10; if ( v10 ) { v12 = *(_DWORD ***)(a2 + 28); v13 = *((_DWORD *)v2 + 7) - (_DWORD)v12; do { v14 = *(_DWORD **)((char *)v12 + v13); if ( *v12 ) { if ( !v14 || !sub_88A930(v14, *v12) ) return 0; v10 = v16; } else if ( v14 ) { return 0; } ++v11; ++v12; } while ( v11 < v10 ); } result = 1; } return result; } //----- (0088ABD0) -------------------------------------------------------- char *sub_88ABD0() { return dword_BA4BAC; } //----- (0088ABE0) -------------------------------------------------------- unsigned int __thiscall sub_88ABE0(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int16 a6) { int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, _DWORD *, signed int, int *, signed int); // eax int v9; // ecx unsigned int v10; // edi int v11; // eax unsigned int v12; // esi int v13; // eax unsigned int v14; // ecx int v15; // edx int v16; // edx signed int v17; // eax unsigned int v18; // ecx int v19; // esi unsigned int v20; // edi int v21; // esi int v22; // eax int v23; // ST14_4 void (__cdecl *v24)(int, unsigned int *, signed int, int *, signed int); // eax int v25; // eax int v26; // ST00_4 void (__cdecl *v27)(int, int *, unsigned int, int *, signed int); // eax unsigned int result; // eax unsigned int v29; // ebx unsigned int v30; // edi unsigned int i; // esi void (__cdecl *v32)(int, int *, signed int, int *, signed int); // edx int v33; // ST14_4 int v34; // esi int v35; // edi int v36; // eax int v37; // ST00_4 void (__cdecl *v38)(int, int *, int, int *, signed int); // eax int v39; // ecx int v40; // edx unsigned int v41; // ebx unsigned int v42; // eax int v43; // eax int v44[25]; // [esp+Ch] [ebp-1ACh] _DWORD *v45; // [esp+70h] [ebp-148h] int v46; // [esp+74h] [ebp-144h] int v47; // [esp+78h] [ebp-140h] unsigned int v48; // [esp+7Ch] [ebp-13Ch] unsigned int v49; // [esp+80h] [ebp-138h] int v50; // [esp+84h] [ebp-134h] int v51[25]; // [esp+88h] [ebp-130h] int v52; // [esp+ECh] [ebp-CCh] int v53[24]; // [esp+F0h] [ebp-C8h] int v54; // [esp+150h] [ebp-68h] int v55[24]; // [esp+154h] [ebp-64h] v47 = a2; v6 = *(_DWORD *)(a2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v6 + 8); v45 = this; v50 = 4; v8(v7, this, 4, &v50, 1); v9 = a5; v10 = 0; v49 = 0; if ( a5 ) { v11 = a4; do { if ( *(_DWORD *)(v11 + 20) == a3 ) v44[v10++] = v11; v11 += 28; --v9; } while ( v9 ); v49 = v10; } v12 = 0; if ( v10 ) { do { v13 = v44[v12]; v14 = 0; if ( v12 ) { do { v15 = v44[v14]; if ( *(_DWORD *)(v15 + 24) > *(_DWORD *)(v13 + 24) ) { v44[v14] = v13; v13 = v15; } ++v14; } while ( v14 < v12 ); } v44[v12++] = v13; } while ( v12 < v10 ); } v16 = v44[0]; v17 = 1; v52 = 0; v51[0] = 0; v48 = 1; v18 = 1; if ( v10 > 1 ) { do { v19 = v44[v18]; v20 = *(_DWORD *)(v19 + 24); if ( v20 > *(_DWORD *)(v16 + 12) + *(_DWORD *)(v16 + 24) ) { *(&v52 + v17) = v18; v51[v17++] = v20; v48 = v17; v16 = v19; } v10 = v49; ++v18; } while ( v18 < v49 ); } v21 = v47; *(&v52 + v17) = v10; v22 = *(_DWORD *)(v21 + 356); v23 = v22; v24 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v22 + 8); v50 = 4; v24(v23, &v48, 4, &v50, 1); v25 = *(_DWORD *)(v21 + 356); v26 = v25; v27 = *(void (__cdecl **)(int, int *, unsigned int, int *, signed int))(v25 + 8); v50 = 4; v27(v26, v51, 4 * v48, &v50, 1); result = 0; v49 = 0; if ( v48 ) { while ( 1 ) { v29 = *(&v52 + result); v30 = v53[result]; v50 = 0; for ( i = v29; i < v30; ++i ) sub_88A820((_DWORD *)v44[i], (int)&v54, &v50, 25); v46 = v50; v32 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(v47 + 356) + 8); v33 = *(_DWORD *)(v47 + 356); v34 = 0; v35 = 0; v50 = 4; v32(v33, &v46, 4, &v50, 1); v36 = *(_DWORD *)(v47 + 356); v37 = v36; v38 = *(void (__cdecl **)(int, int *, int, int *, signed int))(v36 + 8); v50 = 4; v38(v37, &v54, 4 * v46, &v50, 1); v39 = v45[1] + *(_DWORD *)(v44[v29] + 24); v40 = *(_DWORD *)(v47 + 356); v41 = v46; v42 = 0; v50 = 0; if ( v46 >= 2 ) { do { v34 += *(&v54 + v42); v35 += v55[v42]; v42 += 2; } while ( v42 < v46 - 1 ); v41 = v46; } v43 = v42 >= v41 ? v50 : *(&v54 + v42); (*(void (__cdecl **)(int, int, int, int *, unsigned int))(v40 + 8))(v40, v39, a6 * (v43 + v35 + v34), &v54, v41); result = v49 + 1; v49 = result; if ( result >= v48 ) break; result = v49; } } return result; } // 88ABE0: using guessed type int var_1AC[25]; // 88ABE0: using guessed type int var_130[25]; // 88ABE0: using guessed type int var_C8[24]; // 88ABE0: using guessed type int var_64[24]; //----- (0088AEE0) -------------------------------------------------------- LONG __thiscall sub_88AEE0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi void **v3; // ebx unsigned int v4; // edx int v5; // ecx int v6; // eax void *v7; // ST08_4 v1 = this; v2 = 0; for ( *this = &NiAdditionalGeometryData::`vftable'; v2 < v1[9]; ++v2 ) { v3 = *(void ***)(v1[7] + 4 * v2); if ( v3 ) { operator delete(v3[1]); operator delete(v3); if ( v2 < v1[8] ) { if ( v2 < v1[9] ) { if ( *(_DWORD *)(v1[7] + 4 * v2) ) --v1[10]; } else { v1[9] = v2 + 1; } *(_DWORD *)(v1[7] + 4 * v2) = 0; } v4 = 0; if ( v1[4] ) { v5 = 0; do { v6 = v1[5]; if ( v2 == *(_DWORD *)(v5 + v6 + 20) && v4 < v1[4] && v6 ) { *(_DWORD *)(v5 + v6 + 4) = 0; *(_DWORD *)(v5 + v6 + 12) = 0; *(_DWORD *)(v5 + v6 + 8) = 0; *(_DWORD *)(v5 + v6 + 16) = 0; *(_DWORD *)(v5 + v6 + 20) = 0; *(_DWORD *)(v5 + v6 + 24) = 0; } ++v4; v5 += 28; } while ( v4 < v1[4] ); } } } if ( v1[5] ) operator delete((void *)v1[5]); v7 = (void *)v1[7]; v1[6] = &NiTArray::`vftable'; operator delete(v7); return sub_85BA80(v1); } // A2786C: using guessed type void *NiTArray::`vftable'; // A27874: using guessed type void *NiAdditionalGeometryData::`vftable'; //----- (0088AFD0) -------------------------------------------------------- void *__thiscall sub_88AFD0(void *this, char a2) { void *v2; // esi v2 = this; sub_88AEE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0088B000) -------------------------------------------------------- int __thiscall sub_88B000(char *this, signed int a2) { signed int v2; // edi int v3; // eax char *v4; // esi int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, char *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, char *, signed int, signed int *, signed int); // eax int v22; // edi v2 = a2; v3 = *(_DWORD *)(a2 + 352); v4 = this; v5 = v3; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v3 + 4); a2 = 4; v6(v5, this + 4, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v4 + 8, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v4 + 12, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 4); a2 = 4; v15(v14, v4 + 16, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 4); a2 = 4; v18(v17, v4 + 20, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v19 + 4); a2 = 4; v21(v20, v4 + 24, 4, &a2, 1); v22 = *(_DWORD *)(v2 + 352); a2 = 1; return (*(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v22 + 4))(v22, v4, 1, &a2, 1); } //----- (0088B0E0) -------------------------------------------------------- int __thiscall sub_88B0E0(char *this, signed int a2) { signed int v2; // edi int v3; // eax char *v4; // esi int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, char *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, char *, signed int, signed int *, signed int); // eax int v22; // edi v2 = a2; v3 = *(_DWORD *)(a2 + 356); v4 = this; v5 = v3; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v3 + 8); a2 = 4; v6(v5, this + 4, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v4 + 8, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v4 + 12, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v4 + 16, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 8); a2 = 4; v18(v17, v4 + 20, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 356); v20 = v19; v21 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v19 + 8); a2 = 4; v21(v20, v4 + 24, 4, &a2, 1); v22 = *(_DWORD *)(v2 + 356); a2 = 1; return (*(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v22 + 8))(v22, v4, 1, &a2, 1); } //----- (0088B1C0) -------------------------------------------------------- unsigned int __thiscall sub_88B1C0(_DWORD *this, char a2) { _DWORD *v2; // ebx char *v3; // eax _DWORD *v4; // esi char *v5; // eax char *v6; // eax char *v7; // eax char *v8; // eax char *v9; // eax char *v10; // eax char *v11; // eax char *v12; // eax char *v13; // eax char *v14; // eax char *v15; // eax char *v16; // eax char *v17; // eax char *v18; // eax char *v19; // eax char *v20; // eax char *v21; // eax char *v22; // eax char *v23; // eax char *v24; // eax char *v25; // eax char *v26; // eax char *v27; // eax char *v28; // eax char *v29; // eax char *v30; // eax char *v31; // eax char *v32; // eax char *v33; // eax char *v34; // eax char *v35; // eax char *v36; // eax char *v37; // eax char *v38; // eax unsigned int v39; // edi char *v40; // eax unsigned int v41; // edi char *v42; // eax unsigned int v43; // edi char *v44; // eax unsigned int v45; // edi char *v46; // eax unsigned int v47; // edi char *v48; // eax unsigned int v49; // edi char *v50; // eax unsigned int v51; // edi char *v52; // eax unsigned int v53; // edi unsigned int result; // eax char *v55; // eax unsigned int v56; // edi char *v57; // eax unsigned int v58; // edi char *v59; // [esp+Ch] [ebp-4h] v2 = this; switch ( this[1] ) { case 0: v3 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_INVALID"); v4 = (_DWORD *)a2; v59 = v3; sub_918B30((_DWORD *)a2, &v59); break; case 1: v5 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_FLOAT1"); v4 = (_DWORD *)a2; v59 = v5; sub_918B30((_DWORD *)a2, &v59); break; case 2: v6 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_FLOAT2"); v4 = (_DWORD *)a2; v59 = v6; sub_918B30((_DWORD *)a2, &v59); break; case 3: v7 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_FLOAT3"); v4 = (_DWORD *)a2; v59 = v7; sub_918B30((_DWORD *)a2, &v59); break; case 4: v8 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_FLOAT4"); v4 = (_DWORD *)a2; v59 = v8; sub_918B30((_DWORD *)a2, &v59); break; case 5: v9 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_LONG1"); v4 = (_DWORD *)a2; v59 = v9; sub_918B30((_DWORD *)a2, &v59); break; case 6: v10 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_LONG2"); v4 = (_DWORD *)a2; v59 = v10; sub_918B30((_DWORD *)a2, &v59); break; case 7: v11 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_LONG3"); v4 = (_DWORD *)a2; v59 = v11; sub_918B30((_DWORD *)a2, &v59); break; case 8: v12 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_LONG4"); v4 = (_DWORD *)a2; v59 = v12; sub_918B30((_DWORD *)a2, &v59); break; case 9: v13 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_ULONG1"); v4 = (_DWORD *)a2; v59 = v13; sub_918B30((_DWORD *)a2, &v59); break; case 0xA: v14 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_ULONG2"); v4 = (_DWORD *)a2; v59 = v14; sub_918B30((_DWORD *)a2, &v59); break; case 0xB: v15 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_ULONG3"); v4 = (_DWORD *)a2; v59 = v15; sub_918B30((_DWORD *)a2, &v59); break; case 0xC: v16 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_ULONG4"); v4 = (_DWORD *)a2; v59 = v16; sub_918B30((_DWORD *)a2, &v59); break; case 0xD: v17 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_SHORT1"); v4 = (_DWORD *)a2; v59 = v17; sub_918B30((_DWORD *)a2, &v59); break; case 0xE: v18 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_SHORT2"); v4 = (_DWORD *)a2; v59 = v18; sub_918B30((_DWORD *)a2, &v59); break; case 0xF: v19 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_SHORT3"); v4 = (_DWORD *)a2; v59 = v19; sub_918B30((_DWORD *)a2, &v59); break; case 0x10: v20 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_SHORT4"); v4 = (_DWORD *)a2; v59 = v20; sub_918B30((_DWORD *)a2, &v59); break; case 0x11: v21 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_USHORT1"); v4 = (_DWORD *)a2; v59 = v21; sub_918B30((_DWORD *)a2, &v59); break; case 0x12: v22 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_USHORT2"); v4 = (_DWORD *)a2; v59 = v22; sub_918B30((_DWORD *)a2, &v59); break; case 0x13: v23 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_USHORT3"); v4 = (_DWORD *)a2; v59 = v23; sub_918B30((_DWORD *)a2, &v59); break; case 0x14: v24 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_USHORT4"); v4 = (_DWORD *)a2; v59 = v24; sub_918B30((_DWORD *)a2, &v59); break; case 0x15: v25 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BYTE1"); v4 = (_DWORD *)a2; v59 = v25; sub_918B30((_DWORD *)a2, &v59); break; case 0x16: v26 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BYTE2"); v4 = (_DWORD *)a2; v59 = v26; sub_918B30((_DWORD *)a2, &v59); break; case 0x17: v27 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BYTE3"); v4 = (_DWORD *)a2; v59 = v27; sub_918B30((_DWORD *)a2, &v59); break; case 0x18: v28 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BYTE4"); v4 = (_DWORD *)a2; v59 = v28; sub_918B30((_DWORD *)a2, &v59); break; case 0x19: v29 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_UBYTE1"); v4 = (_DWORD *)a2; v59 = v29; sub_918B30((_DWORD *)a2, &v59); break; case 0x1A: v30 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_UBYTE2"); v4 = (_DWORD *)a2; v59 = v30; sub_918B30((_DWORD *)a2, &v59); break; case 0x1B: v31 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_UBYTE3"); v4 = (_DWORD *)a2; v59 = v31; sub_918B30((_DWORD *)a2, &v59); break; case 0x1C: v32 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_UBYTE4"); v4 = (_DWORD *)a2; v59 = v32; sub_918B30((_DWORD *)a2, &v59); break; case 0x1D: v33 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BLEND1"); v4 = (_DWORD *)a2; v59 = v33; sub_918B30((_DWORD *)a2, &v59); break; case 0x1E: v34 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BLEND2"); v4 = (_DWORD *)a2; v59 = v34; sub_918B30((_DWORD *)a2, &v59); break; case 0x1F: v35 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BLEND3"); v4 = (_DWORD *)a2; v59 = v35; sub_918B30((_DWORD *)a2, &v59); break; case 0x20: v36 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_BLEND4"); v4 = (_DWORD *)a2; v59 = v36; sub_918B30((_DWORD *)a2, &v59); break; case 0x21: v37 = sub_878740((int)" m_uiType", (int)"AGD_NITYPE_COUNT"); v4 = (_DWORD *)a2; v59 = v37; sub_918B30((_DWORD *)a2, &v59); break; default: v38 = sub_878740((int)" m_uiType", (int)"UNKNOWN!!!"); v4 = (_DWORD *)a2; v39 = *(_DWORD *)(a2 + 12); v59 = v38; if ( v39 >= *(_DWORD *)(a2 + 8) ) sub_8237A0((_DWORD *)a2, v39 + *(_DWORD *)(a2 + 20)); sub_823870(v4, v39, &v59); break; } v40 = sub_878670((int)" m_uiUnitSize", v2[2]); v41 = v4[3]; *(_DWORD *)&a2 = v40; if ( v41 >= v4[2] ) sub_8237A0(v4, v41 + v4[5]); sub_823870(v4, v41, &a2); v42 = sub_878670((int)" m_uiTotalSize", v2[3]); v43 = v4[3]; *(_DWORD *)&a2 = v42; if ( v43 >= v4[2] ) sub_8237A0(v4, v43 + v4[5]); sub_823870(v4, v43, &a2); v44 = sub_878670((int)" m_uiStride", v2[4]); v45 = v4[3]; *(_DWORD *)&a2 = v44; if ( v45 >= v4[2] ) sub_8237A0(v4, v45 + v4[5]); sub_823870(v4, v45, &a2); v46 = sub_878670((int)" m_uiBlockIndex", v2[5]); v47 = v4[3]; *(_DWORD *)&a2 = v46; if ( v47 >= v4[2] ) sub_8237A0(v4, v47 + v4[5]); sub_823870(v4, v47, &a2); v48 = sub_878670((int)" m_uiBlockOffset", v2[6]); v49 = v4[3]; *(_DWORD *)&a2 = v48; if ( v49 >= v4[2] ) sub_8237A0(v4, v49 + v4[5]); sub_823870(v4, v49, &a2); a2 = *(_BYTE *)v2 & 1; v50 = sub_878510((int)" Keep", a2); v51 = v4[3]; *(_DWORD *)&a2 = v50; if ( v51 >= v4[2] ) sub_8237A0(v4, v51 + v4[5]); sub_823870(v4, v51, &a2); if ( (*(_BYTE *)v2 & 6) == 2 ) { v57 = sub_878740((int)" Consistency", (int)"MUTABLE"); v58 = v4[3]; *(_DWORD *)&a2 = v57; if ( v58 >= v4[2] ) sub_8237A0(v4, v58 + v4[5]); result = sub_823870(v4, v58, &a2); } else if ( (*(_BYTE *)v2 & 6) == 3 || (*(_BYTE *)v2 & 6) != 4 ) { v55 = sub_878740((int)" Consistency", (int)"STATIC"); v56 = v4[3]; *(_DWORD *)&a2 = v55; if ( v56 >= v4[2] ) sub_8237A0(v4, v56 + v4[5]); result = sub_823870(v4, v56, &a2); } else { v52 = sub_878740((int)" Consistency", (int)"VOLATILE"); v53 = v4[3]; *(_DWORD *)&a2 = v52; if ( v53 >= v4[2] ) sub_8237A0(v4, v53 + v4[5]); result = sub_823870(v4, v53, &a2); } return result; } //----- (0088BA00) -------------------------------------------------------- unsigned int __thiscall sub_88BA00(size_t *this, int a2, int a3, int a4, int a5, unsigned __int16 a6) { void (__cdecl *v6)(int, size_t *, signed int, unsigned int *, signed int); // edx size_t *v7; // edi int v8; // ST2C_4 int v9; // eax int v10; // ST14_4 void (__cdecl *v11)(int, unsigned int *, signed int, unsigned int *, signed int); // eax int v12; // eax int v13; // ST00_4 int (__cdecl *v14)(int, int *, unsigned int, unsigned int *, signed int); // eax unsigned int result; // eax int v16; // eax int v17; // ST2C_4 void (__cdecl *v18)(int, int *, signed int, int *, signed int); // eax int v19; // edi int v20; // ebx int v21; // eax int v22; // ST18_4 void (__cdecl *v23)(int, int *, int, int *, signed int); // eax int v24; // ecx unsigned int v25; // edx unsigned int v26; // eax int v27; // eax size_t *v28; // [esp+Ch] [ebp-E0h] int v29; // [esp+10h] [ebp-DCh] unsigned int v30; // [esp+14h] [ebp-D8h] int v31; // [esp+18h] [ebp-D4h] unsigned int v32; // [esp+1Ch] [ebp-D0h] int v33[25]; // [esp+20h] [ebp-CCh] int v34; // [esp+84h] [ebp-68h] int v35[24]; // [esp+88h] [ebp-64h] v6 = *(void (__cdecl **)(int, size_t *, signed int, unsigned int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v7 = this; v8 = *(_DWORD *)(a2 + 352); v28 = this; v32 = 4; v6(v8, this, 4, &v32, 1); v7[1] = (size_t)operator new(*v7); v9 = *(_DWORD *)(a2 + 352); v10 = v9; v11 = *(void (__cdecl **)(int, unsigned int *, signed int, unsigned int *, signed int))(v9 + 4); v32 = 4; v11(v10, &v30, 4, &v32, 1); v12 = *(_DWORD *)(a2 + 352); v13 = v12; v14 = *(int (__cdecl **)(int, int *, unsigned int, unsigned int *, signed int))(v12 + 4); v32 = 4; result = v14(v13, v33, 4 * v30, &v32, 1); v32 = 0; if ( v30 ) { do { v16 = *(_DWORD *)(a2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v16 + 4); v19 = 0; v20 = 0; v31 = 4; v18(v17, &v29, 4, &v31, 1); v21 = *(_DWORD *)(a2 + 352); v22 = v21; v23 = *(void (__cdecl **)(int, int *, int, int *, signed int))(v21 + 4); v31 = 4; v23(v22, &v34, 4 * v29, &v31, 1); v24 = v28[1] + v33[v32]; v25 = v29; v26 = 0; v31 = 0; if ( v29 >= 2 ) { do { v19 += *(&v34 + v26); v20 += v35[v26]; v26 += 2; } while ( v26 < v29 - 1 ); v25 = v29; } if ( v26 >= v25 ) v27 = v31; else v27 = *(&v34 + v26); (*(void (__cdecl **)(_DWORD, int, int, int *, unsigned int))(*(_DWORD *)(a2 + 352) + 4))( *(_DWORD *)(a2 + 352), v24, a6 * (v27 + v19 + v20), &v34, v25); result = v32 + 1; v32 = result; } while ( result < v30 ); } return result; } // 88BA00: using guessed type int var_CC[25]; // 88BA00: using guessed type int var_64[24]; //----- (0088BBD0) -------------------------------------------------------- void __thiscall sub_88BBD0(int *this, signed int a2) { signed int v2; // edi int *v3; // ebx int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, int *, signed int); // edx int v8; // ST00_4 int v9; // esi char *v10; // eax int v11; // esi _DWORD *v12; // ecx unsigned int v13; // esi int v14; // edi int v15; // edi void (__cdecl *v16)(int, unsigned int *, signed int, int *, signed int); // eax _DWORD *v17; // esi unsigned int v18; // edi int v19; // eax int v20; // ST14_4 void (__cdecl *v21)(int, char *, signed int, int *, signed int); // eax size_t *v22; // eax size_t *v23; // ebx int v24; // eax int v25; // ecx int v26; // [esp+Ch] [ebp-10h] int *v27; // [esp+10h] [ebp-Ch] unsigned int v28; // [esp+14h] [ebp-8h] char v29; // [esp+1Bh] [ebp-1h] v2 = a2; v3 = this; v27 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(a2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v26 = 2; v6(v5, v3 + 3, 2, &v26, 1); v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v8 = *(_DWORD *)(a2 + 352); v26 = 4; v7(v8, v3 + 4, 4, &v26, 1); v9 = v3[4]; if ( v9 ) { v10 = (char *)operator new(28 * v9); if ( v10 ) { v11 = v9 - 1; if ( v11 >= 0 ) { v12 = v10 + 8; do { *(v12 - 1) = 0; *v12 = 0; v12[1] = 0; v12[2] = 0; v12[3] = 0; v12[4] = 0; *((_BYTE *)v12 - 8) = 2; v12 += 7; --v11; } while ( v11 >= 0 ); } } else { v10 = 0; } v13 = 0; v3[5] = (int)v10; if ( (unsigned int)v3[4] > 0 ) { v14 = 0; do { sub_88B000((char *)(v14 + v3[5]), a2); ++v13; v14 += 28; } while ( v13 < v3[4] ); v2 = a2; } } v15 = *(_DWORD *)(v2 + 352); v28 = 0; v16 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v15 + 4); v26 = 4; v16(v15, &v28, 4, &v26, 1); v17 = v3 + 6; sub_8237A0(v3 + 6, v28); v18 = 0; if ( v28 ) { do { v19 = *(_DWORD *)(a2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v19 + 4); v26 = 1; v21(v20, &v29, 1, &v26, 1); if ( !v29 ) { if ( v18 < v17[2] ) { if ( v18 < v17[3] ) { if ( *(_DWORD *)(v17[1] + 4 * v18) ) --v17[4]; } else { v17[3] = v18 + 1; } *(_DWORD *)(v17[1] + 4 * v18) = 0; } goto LABEL_32; } v22 = (size_t *)operator new(8u); v23 = 0; if ( v22 ) { *v22 = 0; v22[1] = 0; v23 = v22; } sub_88BA00(v23, a2, v18, v27[5], v27[4], *((_WORD *)v27 + 6)); if ( v18 < v17[2] ) { if ( v18 < v17[3] ) { if ( !v23 ) { if ( *(_DWORD *)(v17[1] + 4 * v18) ) --v17[4]; LABEL_25: *(_DWORD *)(v17[1] + 4 * v18) = v23; goto LABEL_32; } v25 = v17[1]; if ( *(_DWORD *)(v25 + 4 * v18) ) goto LABEL_25; ++v17[4]; *(_DWORD *)(v25 + 4 * v18) = v23; } else { v17[3] = v18 + 1; if ( !v23 ) goto LABEL_25; v24 = v17[1]; ++v17[4]; *(_DWORD *)(v24 + 4 * v18) = v23; } } LABEL_32: ++v18; } while ( v18 < v28 ); } } //----- (0088BDD0) -------------------------------------------------------- unsigned int __thiscall sub_88BDD0(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax void (__cdecl *v7)(int, char *, signed int, signed int *, signed int); // edx int v8; // ST00_4 int v9; // eax int v10; // ST14_4 int (__cdecl *v11)(int, unsigned int *, signed int, signed int *, signed int); // eax unsigned int result; // eax unsigned int v13; // ebx _DWORD *v14; // eax int v15; // eax int v16; // ST14_4 int (__cdecl *v17)(int, char *, signed int, unsigned int *, signed int); // eax _DWORD *v18; // [esp+Ch] [ebp-8h] unsigned int v19; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 12, 2, &a2, 1); v7 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v8 = *(_DWORD *)(v2 + 356); a2 = 4; v7(v8, v3 + 16, 4, &a2, 1); v19 = 0; if ( *((_DWORD *)v3 + 4) ) { a2 = 0; do { sub_88B0E0((char *)(a2 + *((_DWORD *)v3 + 5)), v2); a2 += 28; ++v19; } while ( v19 < *((_DWORD *)v3 + 4) ); } v19 = *((_DWORD *)v3 + 9); v9 = *(_DWORD *)(v2 + 356); v10 = v9; v11 = *(int (__cdecl **)(int, unsigned int *, signed int, signed int *, signed int))(v9 + 8); a2 = 4; result = v11(v10, &v19, 4, &a2, 1); v13 = 0; if ( *((_DWORD *)v3 + 9) ) { do { v14 = *(_DWORD **)(*((_DWORD *)v3 + 7) + 4 * v13); HIBYTE(a2) = v14 != 0; v18 = v14; v15 = *(_DWORD *)(v2 + 356); v16 = v15; v17 = *(int (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v15 + 8); v19 = 1; result = v17(v16, (char *)&a2 + 3, 1, &v19, 1); if ( HIBYTE(a2) ) result = sub_88ABE0(v18, v2, v13, *((_DWORD *)v3 + 5), *((_DWORD *)v3 + 4), *((_WORD *)v3 + 6)); ++v13; } while ( v13 < *((_DWORD *)v3 + 9) ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0088BEE0) -------------------------------------------------------- void __thiscall sub_88BEE0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi unsigned int v10; // ebx char *v11; // eax unsigned int v12; // edi unsigned int v13; // eax char *v14; // eax unsigned int v15; // edi char *v16; // ebx bool v17; // zf char *v18; // eax unsigned int v19; // edi char *v20; // ebx int *v21; // eax char *v22; // eax unsigned int v23; // edi char *v24; // ebx char *v25; // eax unsigned int v26; // edi char *v27; // ebx int v28; // eax int v29; // ecx char *v30; // eax unsigned int v31; // edi char *v32; // ebx char *v33; // eax unsigned int v34; // edi char *v35; // ebx int v36; // [esp+Ch] [ebp-8h] int *v37; // [esp+Ch] [ebp-8h] _DWORD *v38; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v38 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4BAC); v5 = v2[3]; a2 = (unsigned int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"m_usVertexCount", *((_WORD *)v3 + 6)); v7 = v2[3]; a2 = (unsigned int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"m_uiDataStreamCount", v3[4]); v9 = v2[3]; a2 = (unsigned int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = 0; if ( v38[4] ) { v36 = 0; do { v11 = sub_878670((int)" DataStream Index", v10); v12 = v2[3]; a2 = (unsigned int)v11; if ( v12 < v2[2] || (sub_8237A0(v2, v12 + v2[5]), v12 < v2[2]) ) { v13 = a2; if ( v12 < v2[3] ) { if ( a2 ) { if ( !*(_DWORD *)(v2[1] + 4 * v12) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v12) ) { --v2[4]; } } else { v2[3] = v12 + 1; if ( v13 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v12) = v13; } sub_88B1C0((_DWORD *)(v36 + v38[5]), (char)v2); ++v10; v36 += 28; } while ( v10 < v38[4] ); } v14 = sub_878670((int)"m_aDataBlocks.GetSize()", v38[9]); v15 = v2[3]; v16 = v14; if ( v15 < v2[2] || (sub_8237A0(v2, v15 + v2[5]), v15 < v2[2]) ) { if ( v15 < v2[3] ) { if ( v16 ) { if ( !*(_DWORD *)(v2[1] + 4 * v15) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v15) ) { --v2[4]; } } else { v2[3] = v15 + 1; if ( v16 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v15) = v16; } v17 = v38[9] == 0; a2 = 0; if ( !v17 ) { do { v18 = sub_878670((int)" DataBlock Index", a2); v19 = v2[3]; v20 = v18; if ( v19 < v2[2] || (sub_8237A0(v2, v19 + v2[5]), v19 < v2[2]) ) { if ( v19 < v2[3] ) { if ( v20 ) { if ( !*(_DWORD *)(v2[1] + 4 * v19) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v19) ) { --v2[4]; } } else { v2[3] = v19 + 1; if ( v20 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v19) = v20; } v21 = *(int **)(v38[7] + 4 * a2); v37 = v21; if ( !v21 ) { v30 = sub_878630((int)" m_uiDataBlockSize", 0); v31 = v2[3]; v32 = v30; if ( v31 < v2[2] || (sub_8237A0(v2, v31 + v2[5]), v31 < v2[2]) ) { if ( v31 < v2[3] ) { if ( v32 ) { if ( !*(_DWORD *)(v2[1] + 4 * v31) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v31) ) { --v2[4]; } } else { v2[3] = v31 + 1; if ( v32 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v31) = v32; } v33 = sub_878740((int)" m_pucDataBlock", (int)"NULL"); v34 = v2[3]; v35 = v33; if ( v34 < v2[2] || (sub_8237A0(v2, v34 + v2[5]), v34 < v2[2]) ) { if ( v34 < v2[3] ) { if ( v35 ) { if ( !*(_DWORD *)(v2[1] + 4 * v34) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v34) ) { --v2[4]; } } else { v2[3] = v34 + 1; if ( v35 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v34) = v35; } goto LABEL_89; } v22 = sub_878670((int)" m_uiDataBlockSize", *v21); v23 = v2[3]; v24 = v22; if ( v23 < v2[2] || (sub_8237A0(v2, v23 + v2[5]), v23 < v2[2]) ) { if ( v23 < v2[3] ) { if ( v24 ) { if ( !*(_DWORD *)(v2[1] + 4 * v23) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v23) ) { --v2[4]; } } else { v2[3] = v23 + 1; if ( v24 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v23) = v24; } v25 = sub_878700((int)" m_pucDataBlock", v37[1]); v26 = v2[3]; v27 = v25; if ( v26 < v2[2] || (sub_8237A0(v2, v26 + v2[5]), v26 < v2[2]) ) { if ( v26 < v2[3] ) { if ( !v27 ) { if ( *(_DWORD *)(v2[1] + 4 * v26) ) --v2[4]; LABEL_66: *(_DWORD *)(v2[1] + 4 * v26) = v27; goto LABEL_89; } v29 = v2[1]; if ( *(_DWORD *)(v29 + 4 * v26) ) goto LABEL_66; ++v2[4]; *(_DWORD *)(v29 + 4 * v26) = v27; } else { v2[3] = v26 + 1; if ( !v27 ) goto LABEL_66; v28 = v2[1]; ++v2[4]; *(_DWORD *)(v28 + 4 * v26) = v27; } } LABEL_89: ++a2; } while ( a2 < v38[9] ); } } //----- (0088C300) -------------------------------------------------------- float *__thiscall sub_88C300(unsigned __int16 *this) { unsigned __int16 *v1; // esi int v2; // edi int v3; // ecx int v4; // edx int v5; // eax unsigned __int16 v6; // cx unsigned __int16 v7; // dx unsigned __int16 v8; // bx int v9; // eax int v10; // esi int v11; // edi float *v12; // ecx float v13; // ST14_4 int v14; // ebx float v15; // ST18_4 float v16; // ST1C_4 float v17; // ST20_4 float v18; // ST24_4 float v19; // ST28_4 int v20; // ecx int v21; // eax double v22; // st7 float *v23; // eax double v24; // st6 double v25; // st7 double v26; // st6 double v27; // st5 int v28; // eax double v29; // st4 float *v30; // eax int v31; // eax double v32; // st4 float *v33; // eax int v34; // ecx float *result; // eax float v36; // [esp+20h] [ebp-20h] float v37; // [esp+24h] [ebp-1Ch] float v38; // [esp+28h] [ebp-18h] int v39; // [esp+2Ch] [ebp-14h] int v40; // [esp+30h] [ebp-10h] unsigned __int16 *v41; // [esp+34h] [ebp-Ch] int v42; // [esp+38h] [ebp-8h] int v43; // [esp+3Ch] [ebp-4h] v1 = this; v41 = this; sub_879530((int)this, 1); v2 = *((_DWORD *)v1 + 19); v3 = 0; v42 = *((_DWORD *)v1 + 19); v39 = 0; if ( v1[34] > 0u ) { while ( 1 ) { v4 = *((_DWORD *)v1 + 18); v5 = 2 * (unsigned __int16)v3; v43 = 2; v40 = v5; if ( *(_WORD *)(v5 + v4) > 2u ) { do { v6 = *(_WORD *)(v2 + 2 * (unsigned __int16)v43 - 4); if ( (unsigned __int16)v43 % 2 ) { v7 = *(_WORD *)(v2 + 2 * (unsigned __int16)v43); v8 = *(_WORD *)(v2 + 2 * (unsigned __int16)v43 - 2); } else { v7 = *(_WORD *)(v2 + 2 * (unsigned __int16)v43 - 2); v8 = *(_WORD *)(v2 + 2 * (unsigned __int16)v43); } if ( v6 != v7 && v7 != v8 && v8 != v6 ) { v9 = *((_DWORD *)v1 + 8); v10 = 12 * v7; v11 = 12 * v6; v12 = (float *)(v10 + v9 + 8); v13 = *(float *)(v10 + v9) - *(float *)(v9 + v11); v14 = 12 * v8; v15 = *(float *)(v10 + v9 + 4) - *(float *)(v9 + v11 + 4); v16 = *v12 - *(float *)(v9 + v11 + 8); v17 = *(float *)(v14 + v9) - *(float *)(v10 + v9); v18 = *(float *)(v14 + v9 + 4) - *(float *)(v10 + v9 + 4); v19 = *(float *)(v14 + v9 + 8) - *v12; v36 = v19 * v15 - v18 * v16; v37 = v16 * v17 - v19 * v13; v38 = v13 * v18 - v17 * v15; sub_87FDD0(&v36); v20 = (int)v41; v21 = *((_DWORD *)v41 + 9); v22 = *(float *)(v21 + v11); v23 = (float *)(v11 + v21); v24 = v22 + v36; v25 = v36; *v23 = v24; v26 = v37; v23[1] = v23[1] + v37; v2 = v42; v27 = v38; v23[2] = v23[2] + v38; v28 = *(_DWORD *)(v20 + 36); v29 = *(float *)(v28 + v10); v30 = (float *)(v10 + v28); v1 = (unsigned __int16 *)v20; *v30 = v29 + v25; v30[1] = v30[1] + v26; v30[2] = v30[2] + v27; v31 = *(_DWORD *)(v20 + 36); v32 = *(float *)(v31 + v14); v33 = (float *)(v14 + v31); *v33 = v25 + v32; v33[1] = v26 + v33[1]; v33[2] = v27 + v33[2]; } v34 = *((_DWORD *)v1 + 18); ++v43; } while ( (unsigned __int16)v43 < *(_WORD *)(v40 + v34) ); v3 = v39; v5 = v40; } ++v3; v42 = v2 + 2 * *(unsigned __int16 *)(v5 + *((_DWORD *)v1 + 18)); v39 = v3; if ( (unsigned __int16)v3 >= v1[34] ) break; v2 = v42; } } result = sub_87B0A0(*((float **)v1 + 9), v1[6], 12); v1[25] |= 2u; return result; } //----- (0088C510) -------------------------------------------------------- void *__thiscall sub_88C510(void *this) { int v1; // eax void *v3; // [esp+0h] [ebp-4h] v3 = this; v1 = dword_BA4BB8++; if ( !v1 ) sub_8AA170((int)sub_88C550, (int)sub_88C610); return v3; } // BA4BB8: using guessed type int dword_BA4BB8; //----- (0088C550) -------------------------------------------------------- float *sub_88C550() { float *result; // eax int v1; // [esp+0h] [ebp-8h] result = (float *)(unsigned __int8)byte_BA4BB4; if ( !byte_BA4BB4 ) { byte_BA4BB4 = 1; sub_875C70((int)"NiAudioListener", (int)Concurrency::details::SchedulerBase::CurrentScheduler); sub_875C70((int)"NiAudioSource", (int)sub_891800); sub_875C70((int)"NiAudioSystem", (int)sub_88CD10); sub_875C70((int)"NiMilesListener", (int)Concurrency::details::SchedulerBase::CurrentScheduler); sub_875C70((int)"NiMilesSource", (int)sub_88FF00); sub_875C70((int)"NiMilesAudioSystem", (int)sub_88DB20); result = (float *)operator new(0x2Cu); if ( result ) { result = sub_88CFD0(result); v1 = (int)result; } else { v1 = 0; } dword_BA4BBC = v1; } return result; } // BA4BB4: using guessed type char byte_BA4BB4; // BA4BBC: using guessed type int dword_BA4BBC; //----- (0088C610) -------------------------------------------------------- char sub_88C610() { char result; // al result = byte_BA4BB4; if ( byte_BA4BB4 ) { byte_BA4BB4 = 0; sub_875C90((int)"NiAudioListener"); sub_875C90((int)"NiAudioSource"); sub_875C90((int)"NiAudioSystem"); sub_875C90((int)"NiMilesListener"); sub_875C90((int)"NiMilesSource"); result = sub_875C90((int)"NiMilesAudioSystem"); if ( dword_BA4BBC ) result = (**(int (__thiscall ***)(int, signed int))dword_BA4BBC)(dword_BA4BBC, 1); dword_BA4BBC = 0; } return result; } // BA4BB4: using guessed type char byte_BA4BB4; // BA4BBC: using guessed type int dword_BA4BBC; //----- (0088C6C0) -------------------------------------------------------- float *__thiscall sub_88C6C0(float *this) { _DWORD *v2; // [esp+0h] [ebp-14h] float *v3; // [esp+4h] [ebp-10h] _DWORD *v4; // [esp+10h] [ebp-4h] v3 = this; sub_85BA50(this); *(_DWORD *)v3 = &NiAudioSystem::`vftable'; v3[4] = 0.0; if ( *((_DWORD *)v3 + 4) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v3 + 4) + 4)); v4 = operator new(0x10u); if ( v4 ) { *v4 = &NiTListBase,NiAudioSource *>::`vftable'; v4[3] = 0; v4[1] = 0; v4[2] = 0; *v4 = &NiTPointerListBase,NiAudioSource *>::`vftable'; *v4 = &NiTPointerList::`vftable'; v2 = v4; } else { v2 = 0; } *((_DWORD *)v3 + 5) = v2; v3[3] = 1.0; *((_BYTE *)v3 + 8) = 0; return v3; } // A27D30: using guessed type void *NiTPointerList::`vftable'; // A27D40: using guessed type void *NiTPointerListBase,NiAudioSource *>::`vftable'; // A27D50: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; // A27D64: using guessed type void *NiAudioSystem::`vftable'; //----- (0088C790) -------------------------------------------------------- LONG __thiscall sub_88C790(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-28h] volatile LONG **v3; // [esp+14h] [ebp-18h] v2 = this; *this = &NiAudioSystem::`vftable'; sub_88C870(this); v3 = (volatile LONG **)(v2 + 4); if ( v2[4] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; if ( *v3 ) InterlockedIncrement(*v3 + 1); } if ( v2[5] ) (**(void (__thiscall ***)(_DWORD, signed int))v2[5])(v2[5], 1); if ( v2[4] ) sub_402270((volatile LONG *)v2[4]); return sub_85BA80(v2); } // A27D64: using guessed type void *NiAudioSystem::`vftable'; //----- (0088C850) -------------------------------------------------------- int __thiscall sub_88C850(_DWORD *this) { return this[4]; } //----- (0088C870) -------------------------------------------------------- int __thiscall sub_88C870(_DWORD *this) { int v1; // ST18_4 _DWORD *v2; // ST1C_4 int result; // eax _DWORD *v4; // [esp+4h] [ebp-28h] _DWORD *v5; // [esp+28h] [ebp-4h] v4 = this; if ( this[5] ) { v5 = *(_DWORD **)(this[5] + 4); while ( v5 ) { v1 = v4[5]; v2 = v5 + 2; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD))(*(_DWORD *)*v2 + 152))(*v2); } sub_88DCC0((_DWORD *)v4[5]); } result = v4[4]; if ( v4[4] ) result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v4[4] + 152))(v4[4], v4[4]); return result; } //----- (0088C910) -------------------------------------------------------- _DWORD *__thiscall sub_88C910(_DWORD *this, int a2) { _DWORD *v2; // ST08_4 _DWORD *v3; // eax v2 = (_DWORD *)this[5]; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 4))(v2, this); v3[2] = a2; return sub_88DD80(v2, v3); } //----- (0088C950) -------------------------------------------------------- int __thiscall sub_88C950(_DWORD **this, int a2) { int result; // eax result = a2; if ( !*(_DWORD *)(a2 + 4) ) result = sub_905630(this[5], &a2); return result; } //----- (0088C980) -------------------------------------------------------- _DWORD **__thiscall sub_88C980(_DWORD **this, float a2, char a3) { _DWORD **result; // eax _DWORD **v4; // [esp+8h] [ebp-Ch] v4 = this; result = this; if ( this[4] ) { if ( a3 ) { (*(void (__thiscall **)(_DWORD *, _DWORD *))(*this[4] + 136))(this[4], this[4]); result = (_DWORD **)((int (__thiscall *)(_DWORD **, _DWORD))(*v4)[25])(v4, LODWORD(a2)); } } return result; } //----- (0088C9E0) -------------------------------------------------------- int __thiscall sub_88C9E0(_DWORD *this) { int v1; // ecx int result; // eax int v3; // ST04_4 _DWORD *v4; // ST08_4 _DWORD *v5; // [esp+0h] [ebp-18h] _DWORD *v6; // [esp+14h] [ebp-4h] v5 = this; v1 = this[5]; result = *(_DWORD *)(v1 + 4); v6 = *(_DWORD **)(v1 + 4); while ( v6 ) { v3 = v5[5]; v4 = v6 + 2; v6 = (_DWORD *)*v6; result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)*v4 + 216))(*v4); } return result; } //----- (0088CA40) -------------------------------------------------------- int __thiscall sub_88CA40(_DWORD *this) { int v1; // ecx int result; // eax int v3; // ST04_4 _DWORD *v4; // ST08_4 _DWORD *v5; // [esp+0h] [ebp-18h] _DWORD *v6; // [esp+14h] [ebp-4h] v5 = this; v1 = this[5]; result = *(_DWORD *)(v1 + 4); v6 = *(_DWORD **)(v1 + 4); while ( v6 ) { v3 = v5[5]; v4 = v6 + 2; v6 = (_DWORD *)*v6; result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)*v4 + 220))(*v4); } return result; } //----- (0088CAA0) -------------------------------------------------------- int __thiscall sub_88CAA0(_DWORD *this, float a2) { int v2; // ecx int result; // eax int v4; // ST08_4 _DWORD *v5; // ST0C_4 _DWORD *v6; // [esp+4h] [ebp-18h] _DWORD *v7; // [esp+18h] [ebp-4h] v6 = this; v2 = this[5]; result = *(_DWORD *)(v2 + 4); v7 = *(_DWORD **)(v2 + 4); while ( v7 ) { v4 = v6[5]; v5 = v7 + 2; v7 = (_DWORD *)*v7; result = (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)*v5 + 252))(*v5, LODWORD(a2)); } return result; } //----- (0088CB10) -------------------------------------------------------- int __thiscall sub_88CB10(_DWORD *this, _DWORD **a2) { int v2; // ST08_4 int v3; // ST0C_4 if ( !this[5] ) return 0; *a2 = *(_DWORD **)(this[5] + 4); if ( !*a2 ) return 0; v2 = this[5]; v3 = (int)(*a2 + 2); *a2 = (_DWORD *)**a2; return *(_DWORD *)v3; } //----- (0088CB80) -------------------------------------------------------- int __thiscall sub_88CB80(_DWORD *this, _DWORD **a2) { int v2; // ST08_4 int v3; // ST0C_4 if ( !this[5] ) return 0; if ( !*a2 ) return 0; v2 = this[5]; v3 = (int)(*a2 + 2); *a2 = (_DWORD *)**a2; return *(_DWORD *)v3; } //----- (0088CCE0) -------------------------------------------------------- char __thiscall sub_88CCE0(float *this, float a2) { if ( a2 <= 0.0 ) return 0; this[3] = a2; return 1; } //----- (0088CD10) -------------------------------------------------------- int sub_88CD10() { return sub_88CE60(); } //----- (0088CD20) -------------------------------------------------------- int __thiscall sub_88CD20(int *this, signed int a2) { int *v2; // ST08_4 float v4; // [esp+8h] [ebp-4h] v2 = this; sub_85BC50(this, a2); sub_810B10(a2, (int)&v4); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 104))(v2, LODWORD(v4)); return sub_8065C0(a2, (int)(v2 + 2)); } //----- (0088CD80) -------------------------------------------------------- int __stdcall sub_88CD80(int a1) { return nullsub_32(a1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0088CDA0) -------------------------------------------------------- bool __thiscall sub_88CDA0(void *this, int a2) { return (unsigned __int8)sub_85BA30(this, a2) != 0; } //----- (0088CDD0) -------------------------------------------------------- int __thiscall sub_88CDD0(void *this, signed int a2) { int v2; // ST08_4 v2 = (int)this; nullsub_32(a2); sub_817490(a2, v2 + 12); return sub_8344E0(a2, v2 + 8); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0088CE10) -------------------------------------------------------- bool __userpurge sub_88CE10@(float *a1@, double a2@, int a3) { float *v4; // [esp+0h] [ebp-8h] v4 = a1; if ( !sub_85BB20(a1, a3) ) return 0; (*(void (__thiscall **)(int))(*(_DWORD *)a3 + 108))(a3); return v4[3] == a2; } //----- (0088CE60) -------------------------------------------------------- int sub_88CE60() { return dword_BA4BBC; } // BA4BBC: using guessed type int dword_BA4BBC; //----- (0088CE70) -------------------------------------------------------- double __thiscall sub_88CE70(float *this) { return this[3]; } //----- (0088CE90) -------------------------------------------------------- void *__thiscall sub_88CE90(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_88C790(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0088CEC0) -------------------------------------------------------- _DWORD *__thiscall sub_88CEC0(_DWORD *this, char a2) { _DWORD *v3; // [esp+0h] [ebp-Ch] v3 = this; *this = &NiTPointerListBase,NiAudioSource *>::`vftable'; sub_88DCC0(this); *v3 = &NiTListBase,NiAudioSource *>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A27D40: using guessed type void *NiTPointerListBase,NiAudioSource *>::`vftable'; // A27D50: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; //----- (0088CF00) -------------------------------------------------------- void *__thiscall sub_88CF00(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &NiTListBase,NiAudioSource *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A27D50: using guessed type void *NiTListBase,NiAudioSource *>::`vftable'; //----- (0088CF30) -------------------------------------------------------- int __thiscall sub_88CF30(_DWORD *this) { int v1; // ST0C_4 _DWORD *v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] v3 = this; v4 = this[2]; this[2] = *(_DWORD *)(this[2] + 4); if ( this[2] ) *(_DWORD *)this[2] = 0; else this[1] = 0; v1 = *(_DWORD *)(v4 + 8); (*(void (__thiscall **)(_DWORD *, int))(*this + 8))(this, v4); --v3[3]; return v1; } //----- (0088CFB0) -------------------------------------------------------- void *sub_88CFB0() { return &unk_BA4BC0; } //----- (0088CFC0) -------------------------------------------------------- int sub_88CFC0() { return dword_BA4BBC; } // BA4BBC: using guessed type int dword_BA4BBC; //----- (0088CFD0) -------------------------------------------------------- float *__thiscall sub_88CFD0(float *this) { _DWORD *v2; // [esp+0h] [ebp-24h] float *v3; // [esp+4h] [ebp-20h] float *v4; // [esp+8h] [ebp-1Ch] volatile LONG **v5; // [esp+Ch] [ebp-18h] _DWORD *v6; // [esp+1Ch] [ebp-8h] float *v7; // [esp+20h] [ebp-4h] v3 = this; sub_88C6C0(this); *(_DWORD *)v3 = &NiMilesAudioSystem::`vftable'; v3[7] = 0.0; v7 = (float *)operator new(0xD8u); if ( v7 ) v4 = sub_8901B0(v7); else v4 = 0; v5 = (volatile LONG **)(v3 + 4); if ( *((float **)v3 + 4) != v4 ) { if ( *v5 ) sub_402270(*v5); *v5 = (volatile LONG *)v4; if ( *v5 ) InterlockedIncrement(*v5 + 1); } v6 = operator new(0x10u); if ( v6 ) { *v6 = &NiTListBase,NiProviderInfo *>::`vftable'; v6[3] = 0; v6[1] = 0; v6[2] = 0; *v6 = &NiTPointerListBase,NiProviderInfo *>::`vftable'; *v6 = &NiTPointerList::`vftable'; v2 = v6; } else { v2 = 0; } *((_DWORD *)v3 + 9) = v2; v3[3] = 1.0; *((_BYTE *)v3 + 24) = 0; v3[8] = 0.0; return v3; } // A27DEC: using guessed type void *NiTPointerList::`vftable'; // A27DFC: using guessed type void *NiTPointerListBase,NiProviderInfo *>::`vftable'; // A27E0C: using guessed type void *NiTListBase,NiProviderInfo *>::`vftable'; // A27E1C: using guessed type void *NiMilesAudioSystem::`vftable'; //----- (0088D0F0) -------------------------------------------------------- LONG __thiscall sub_88D0F0(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-Ch] v2 = this; *this = &NiMilesAudioSystem::`vftable'; sub_88D280(this); if ( v2[9] ) (**(void (__thiscall ***)(_DWORD, signed int))v2[9])(v2[9], 1); return sub_88C790(v2); } // A27E1C: using guessed type void *NiMilesAudioSystem::`vftable'; //----- (0088D190) -------------------------------------------------------- char __thiscall sub_88D190(_DWORD *this, int a2) { _DWORD *v3; // ST1C_4 _DWORD *v4; // ST20_4 _DWORD *v5; // [esp+0h] [ebp-24h] _DWORD *v6; // [esp+4h] [ebp-20h] _DWORD *v7; // [esp+10h] [ebp-14h] char *Src; // [esp+18h] [ebp-Ch] int v9; // [esp+1Ch] [ebp-8h] int v10; // [esp+20h] [ebp-4h] v6 = this; AIL_set_redist_directory(a2); sub_95C0D0(); AIL_startup(); if ( !AIL_quick_startup(1, 0, 0, 0, 0) ) return 0; AIL_quick_handles(v6 + 8, 0, 0); v9 = 0; while ( AIL_enumerate_3D_providers(&v9, &v10, &Src) ) { v7 = operator new(0xCu); if ( v7 ) v5 = sub_892EC0(v7, Src, v10); else v5 = 0; v3 = (_DWORD *)v6[9]; v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD))(*v3 + 4))(v6[9]); v4[2] = v5; sub_88DD80(v3, v4); AIL_close_3D_provider(v10); } return 1; } // 9A55C4: using guessed type int __stdcall AIL_close_3D_provider(_DWORD); // 9A55C8: using guessed type int __stdcall AIL_enumerate_3D_providers(_DWORD, _DWORD, _DWORD); // 9A55CC: using guessed type int __stdcall AIL_quick_handles(_DWORD, _DWORD, _DWORD); // 9A55D0: using guessed type int __stdcall AIL_quick_startup(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 9A55D4: using guessed type _DWORD __stdcall AIL_startup(); // 9A55D8: using guessed type int __stdcall AIL_set_redist_directory(_DWORD); //----- (0088D280) -------------------------------------------------------- int __thiscall sub_88D280(_DWORD *this) { int v1; // ST34_4 _DWORD *v2; // ST38_4 int v3; // ST18_4 void **v4; // ST1C_4 _DWORD *v6; // [esp+8h] [ebp-4Ch] void *v7; // [esp+40h] [ebp-14h] _DWORD *v8; // [esp+48h] [ebp-Ch] _DWORD *v9; // [esp+50h] [ebp-4h] v6 = this; if ( this[5] ) { v9 = *(_DWORD **)(this[5] + 4); while ( v9 ) { v1 = v6[5]; v2 = v9 + 2; v9 = (_DWORD *)*v9; (*(void (__thiscall **)(_DWORD))(*(_DWORD *)*v2 + 152))(*v2); } sub_88DCC0((_DWORD *)v6[5]); } if ( v6[4] ) (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v6[4] + 152))(v6[4]); if ( v6[9] ) { v8 = *(_DWORD **)(v6[9] + 4); while ( v8 ) { v3 = v6[9]; v4 = (void **)(v8 + 2); v8 = (_DWORD *)*v8; v7 = *v4; if ( *v4 ) { sub_892F50((int)v7); operator delete(v7); } } sub_88DCC0((_DWORD *)v6[9]); } AIL_waveOutClose(v6[8]); AIL_quick_shutdown(); return AIL_shutdown(); } // 9A55DC: using guessed type _DWORD __stdcall AIL_shutdown(); // 9A55E0: using guessed type _DWORD __stdcall AIL_quick_shutdown(); // 9A55E4: using guessed type int __stdcall AIL_waveOutClose(_DWORD); //----- (0088D3D0) -------------------------------------------------------- int __thiscall sub_88D3D0(_DWORD *this) { return sub_88C850(this); } //----- (0088D3F0) -------------------------------------------------------- _DWORD *__stdcall sub_88D3F0(int a1) { _DWORD *v2; // [esp+0h] [ebp-Ch] _DWORD *v3; // [esp+8h] [ebp-4h] v3 = operator new(0x138u); if ( v3 ) v2 = sub_88DDF0(v3, a1); else v2 = 0; return v2; } //----- (0088D430) -------------------------------------------------------- int __thiscall sub_88D430(int *this) { return sub_88D450(this[10]); } //----- (0088D450) -------------------------------------------------------- int __stdcall sub_88D450(int a1) { return AIL_3D_speaker_type(*(_DWORD *)(a1 + 4)); } // 9A55E8: using guessed type int __stdcall AIL_3D_speaker_type(_DWORD); //----- (0088D480) -------------------------------------------------------- bool __thiscall sub_88D480(int *this, int a2) { return sub_88D4A0(this[10], a2); } //----- (0088D4A0) -------------------------------------------------------- bool __stdcall sub_88D4A0(int a1, int a2) { if ( !a1 || !*(_BYTE *)(a1 + 8) ) return 0; AIL_set_3D_speaker_type(*(_DWORD *)(a1 + 4), a2); AIL_3D_speaker_type(*(_DWORD *)(a1 + 4)); return AIL_3D_speaker_type(*(_DWORD *)(a1 + 4)) == a2; } // 9A55E8: using guessed type int __stdcall AIL_3D_speaker_type(_DWORD); // 9A55EC: using guessed type int __stdcall AIL_set_3D_speaker_type(_DWORD, _DWORD); //----- (0088D520) -------------------------------------------------------- char __thiscall sub_88D520(int *this) { return sub_88D540(this[10]); } //----- (0088D540) -------------------------------------------------------- char __stdcall sub_88D540(int a1) { int i; // [esp+4h] [ebp-4h] for ( i = 5; i >= 0; --i ) { if ( sub_88D4A0(a1, i) ) return 1; } return 0; } //----- (0088D590) -------------------------------------------------------- int sub_88D590() { return AIL_last_error(); } // 9A55F0: using guessed type _DWORD __stdcall AIL_last_error(); //----- (0088D5B0) -------------------------------------------------------- int __thiscall sub_88D5B0(_DWORD *this, _DWORD **a2) { return sub_88CB10(this, a2); } //----- (0088D5D0) -------------------------------------------------------- int __thiscall sub_88D5D0(_DWORD *this, _DWORD **a2) { return sub_88CB80(this, a2); } //----- (0088D5F0) -------------------------------------------------------- _DWORD *__thiscall sub_88D5F0(_DWORD *this, _DWORD *a2) { int v2; // esi const char *v3; // ST18_4 _DWORD *v5; // [esp+18h] [ebp-Ch] _DWORD *i; // [esp+1Ch] [ebp-8h] char v7; // [esp+20h] [ebp-4h] v5 = this; for ( i = (_DWORD *)sub_88D5B0(this, (_DWORD **)&v7); i; i = (_DWORD *)sub_88D5D0(v5, (_DWORD **)&v7) ) { if ( a2 != i ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*i + 124))(i) ) { if ( sub_88E6A0(i) ) { v2 = (*(int (__thiscall **)(_DWORD *))(*i + 116))(i); if ( v2 == (*(int (__thiscall **)(_DWORD *))(*a2 + 116))(a2) ) { if ( (*(int (__thiscall **)(_DWORD *))(*i + 144))(i) ) { v3 = (const char *)(*(int (__thiscall **)(_DWORD *))(*i + 144))(i); if ( !strcmp((const char *)(*(int (__thiscall **)(_DWORD *))(*a2 + 144))(a2), v3) ) return i; } } } } } } return 0; } //----- (0088D720) -------------------------------------------------------- char __thiscall sub_88D720(_DWORD *this, _DWORD *a2) { int v2; // esi _DWORD *v4; // [esp+4h] [ebp-Ch] _DWORD *i; // [esp+8h] [ebp-8h] char v6; // [esp+Ch] [ebp-4h] v4 = this; for ( i = (_DWORD *)sub_88D5B0(this, (_DWORD **)&v6); i; i = (_DWORD *)sub_88D5D0(v4, (_DWORD **)&v6) ) { if ( a2 != i ) { v2 = sub_88E6A0(a2); if ( v2 == sub_88E6A0(i) ) return 0; } } return 1; } //----- (0088D780) -------------------------------------------------------- char __thiscall sub_88D780(float *this, float a2) { float v3; // ST0C_4 _DWORD *v4; // [esp+4h] [ebp-18h] float *v5; // [esp+Ch] [ebp-10h] _DWORD *i; // [esp+18h] [ebp-4h] v5 = this; if ( !sub_88CCE0(this, a2) ) return 0; for ( i = *(_DWORD **)(*((_DWORD *)v5 + 9) + 4); i; i = v4 ) { if ( *(_BYTE *)(i[2] + 8) ) { v3 = 1.0 / a2; AIL_set_3D_distance_factor(*(_DWORD *)(i[2] + 4), LODWORD(v3)); } if ( i ) v4 = (_DWORD *)*i; else v4 = 0; } return 1; } // 9A55F4: using guessed type int __stdcall AIL_set_3D_distance_factor(_DWORD, _DWORD); //----- (0088D820) -------------------------------------------------------- int __thiscall sub_88D820(_DWORD *this, _DWORD **a2) { int v2; // ST08_4 int v3; // ST0C_4 if ( !this[9] ) return 0; *a2 = *(_DWORD **)(this[9] + 4); if ( !*a2 ) return 0; v2 = this[9]; v3 = (int)(*a2 + 2); *a2 = (_DWORD *)**a2; return *(_DWORD *)v3; } //----- (0088D890) -------------------------------------------------------- int __thiscall sub_88D890(_DWORD *this, _DWORD **a2) { int v2; // ST08_4 int v3; // ST0C_4 if ( !this[9] ) return 0; if ( !*a2 ) return 0; v2 = this[9]; v3 = (int)(*a2 + 2); *a2 = (_DWORD *)**a2; return *(_DWORD *)v3; } //----- (0088D910) -------------------------------------------------------- _DWORD *__thiscall sub_88D910(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[10] = a2; return result; } //----- (0088D9C0) -------------------------------------------------------- bool __stdcall sub_88D9C0(int a1) { bool v2; // ST13_1 if ( !a1 ) return 0; if ( !*(_BYTE *)(a1 + 8) ) return AIL_3D_room_type(*(_DWORD *)(a1 + 4)) != -1; sub_892FA0((_DWORD *)a1); v2 = AIL_3D_room_type(*(_DWORD *)(a1 + 4)) != -1; sub_892FF0(a1); return v2; } // 9A5600: using guessed type int __stdcall AIL_3D_room_type(_DWORD); //----- (0088DA40) -------------------------------------------------------- bool __thiscall sub_88DA40(int *this, int a2) { return sub_88DA60(this[10], a2); } //----- (0088DA60) -------------------------------------------------------- bool __stdcall sub_88DA60(int a1, int a2) { if ( !a1 ) return 0; AIL_set_3D_room_type(*(_DWORD *)(a1 + 4), a2); return AIL_3D_room_type(*(_DWORD *)(a1 + 4)) != -1; } // 9A5600: using guessed type int __stdcall AIL_3D_room_type(_DWORD); // 9A5604: using guessed type int __stdcall AIL_set_3D_room_type(_DWORD, _DWORD); //----- (0088DAB0) -------------------------------------------------------- int __thiscall sub_88DAB0(int *this) { return sub_88DAD0(this[10]); } //----- (0088DAD0) -------------------------------------------------------- int __stdcall sub_88DAD0(int a1) { int result; // eax if ( a1 ) result = AIL_3D_room_type(*(_DWORD *)(a1 + 4)); else result = 0; return result; } // 9A5600: using guessed type int __stdcall AIL_3D_room_type(_DWORD); //----- (0088DB20) -------------------------------------------------------- int sub_88DB20() { return sub_88CFC0(); } //----- (0088DB30) -------------------------------------------------------- int __thiscall sub_88DB30(int *this, signed int a2) { int *v2; // ST08_4 float v4; // [esp+8h] [ebp-4h] v2 = this; sub_85BC50(this, a2); sub_810B10(a2, (int)&v4); (*(void (__thiscall **)(int *, _DWORD))(*v2 + 104))(v2, LODWORD(v4)); return sub_8065C0(a2, (int)(v2 + 6)); } //----- (0088DB90) -------------------------------------------------------- int __stdcall sub_88DB90(int a1) { return nullsub_32(a1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0088DBB0) -------------------------------------------------------- bool __thiscall sub_88DBB0(void *this, int a2) { return (unsigned __int8)sub_85BA30(this, a2) != 0; } //----- (0088DBE0) -------------------------------------------------------- int __thiscall sub_88DBE0(void *this, signed int a2) { int v2; // ST08_4 v2 = (int)this; nullsub_32(a2); sub_817490(a2, v2 + 12); return sub_8344E0(a2, v2 + 24); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0088DC20) -------------------------------------------------------- bool __userpurge sub_88DC20@(float *a1@, double a2@, int a3) { return sub_88CE10(a1, a2, a3) != 0; } //----- (0088DC50) -------------------------------------------------------- void *__thiscall sub_88DC50(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_88D0F0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0088DC80) -------------------------------------------------------- _DWORD *__thiscall sub_88DC80(_DWORD *this, char a2) { _DWORD *v3; // [esp+0h] [ebp-Ch] v3 = this; *this = &NiTPointerListBase,NiProviderInfo *>::`vftable'; sub_88DCC0(this); *v3 = &NiTListBase,NiProviderInfo *>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A27DFC: using guessed type void *NiTPointerListBase,NiProviderInfo *>::`vftable'; // A27E0C: using guessed type void *NiTListBase,NiProviderInfo *>::`vftable'; //----- (0088DCC0) -------------------------------------------------------- _DWORD *__thiscall sub_88DCC0(_DWORD *this) { _DWORD *v1; // ST08_4 _DWORD *result; // eax _DWORD *v3; // [esp+0h] [ebp-Ch] _DWORD *v4; // [esp+8h] [ebp-4h] v3 = this; v4 = (_DWORD *)this[1]; while ( v4 ) { v1 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v1); } v3[3] = 0; v3[1] = 0; result = v3; v3[2] = 0; return result; } //----- (0088DD20) -------------------------------------------------------- void __stdcall sub_88DD20(_DWORD *a1) { a1[2] = 0; sub_40DB70(a1); } //----- (0088DD50) -------------------------------------------------------- void *__thiscall sub_88DD50(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &NiTListBase,NiProviderInfo *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A27E0C: using guessed type void *NiTListBase,NiProviderInfo *>::`vftable'; //----- (0088DD80) -------------------------------------------------------- _DWORD *__thiscall sub_88DD80(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax *a2 = 0; a2[1] = this[2]; if ( this[2] ) *(_DWORD *)this[2] = a2; else this[1] = a2; this[2] = a2; result = this; ++this[3]; return result; } //----- (0088DDE0) -------------------------------------------------------- void *sub_88DDE0() { return &unk_BA4BC8; } //----- (0088DDF0) -------------------------------------------------------- _DWORD *__thiscall sub_88DDF0(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; sub_890960(this, a2); *v2 = &NiMilesSource::`vftable'; v2[74] = 0; v2[75] = 0; v2[76] = 0; v2[77] = 6; sub_88DF30(v2, 1u); return v2; } // A27EB4: using guessed type void *NiMilesSource::`vftable'; //----- (0088DE60) -------------------------------------------------------- LONG __thiscall sub_88DE60(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; *this = &NiMilesSource::`vftable'; sub_88E610(this); v1[74] = 0; return sub_8909C0(v1); } // A27EB4: using guessed type void *NiMilesSource::`vftable'; //----- (0088DEA0) -------------------------------------------------------- int __thiscall sub_88DEA0(_DWORD *this) { int result; // eax _DWORD *v2; // [esp+0h] [ebp-4h] v2 = this; result = (int)this; if ( this[75] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 132))(this) ) { AIL_pause_stream(v2[75], 1); result = AIL_close_stream(v2[75]); } else if ( v2[47] == 1 ) { result = AIL_release_sample_handle(v2[75]); } else { result = AIL_release_3D_sample_handle(v2[75]); } v2[75] = 0; } return result; } // 9A5608: using guessed type int __stdcall AIL_release_3D_sample_handle(_DWORD); // 9A560C: using guessed type int __stdcall AIL_release_sample_handle(_DWORD); // 9A5610: using guessed type int __stdcall AIL_close_stream(_DWORD); // 9A5614: using guessed type int __stdcall AIL_pause_stream(_DWORD, _DWORD); //----- (0088DF30) -------------------------------------------------------- int __thiscall sub_88DF30(void *this, unsigned __int8 a2) { int v2; // edx int result; // eax int v4; // [esp+0h] [ebp-4h] v4 = (int)this; if ( (*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 132))(this) ) result = sub_892860(v4, v2, 0); else result = sub_892860(v4, a2, a2); return result; } //----- (0088DF70) -------------------------------------------------------- int __thiscall sub_88DF70(void *this, char a2) { int v2; // edx int result; // eax int v4; // [esp+0h] [ebp-4h] v4 = (int)this; if ( (*(int (__thiscall **)(void *))(*(_DWORD *)this + 116))(this) != 1 ) return sub_8927D0(v4, v2, 0); result = sub_8927D0(v4, v2, a2); if ( a2 ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 120))(v4, 0); return result; } //----- (0088DFC0) -------------------------------------------------------- const char **__thiscall sub_88DFC0(const char **this, char *Src) { const char **v2; // ST08_4 int v3; // eax int v4; // eax v2 = this; v3 = sub_88CFC0(); v4 = unknown_libname_27(v3); return sub_88DFF0(v2, Src, v4); } // 88D8F0: using guessed type int __thiscall unknown_libname_27(_DWORD); //----- (0088DFF0) -------------------------------------------------------- const char **__thiscall sub_88DFF0(const char **this, char *Src, int a3) { const char **result; // eax int v4; // [esp+34h] [ebp-53Ch] char v5[264]; // [esp+58h] [ebp-518h] char v6[264]; // [esp+59h] [ebp-517h] char Dir; // [esp+160h] [ebp-410h] char v8; // [esp+260h] [ebp-310h] char v9; // [esp+463h] [ebp-10Dh] rsize_t SizeInBytes; // [esp+56Ch] [ebp-4h] v4 = (int)this; if ( this[45] ) { if ( !strcmp(this[45], Src) ) { result = this; if ( this[75] ) return result; } else { (*((void (__thiscall **)(const char **))*this + 38))(this); } } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 296))(v4, 0); operator delete(*(void **)(v4 + 180)); operator delete(*(void **)(v4 + 184)); *(_DWORD *)(v4 + 180) = 0; *(_DWORD *)(v4 + 184) = 0; SizeInBytes = strlen(Src) + 1; *(_DWORD *)(v4 + 180) = operator new(SizeInBytes); strcpy_s(*(char **)(v4 + 180), SizeInBytes, Src); sub_8A9F60(&Dir, *(char **)(v4 + 180)); strcpy_s(&Dir, 0x100u, &byte_9A8050); strcpy_s(&v8, 3u, &byte_9A8050); strcpy_s(&v9, 0x100u, &byte_9A8050); sub_8AA0C0(&Dir, v5, 260); SizeInBytes = &v5[strlen(v5) + 1] - v6 + 1; *(_DWORD *)(v4 + 184) = operator new(SizeInBytes); strcpy_s(*(char **)(v4 + 184), SizeInBytes, v5); result = (const char **)v4; *(_DWORD *)(v4 + 296) = a3; *(_DWORD *)(v4 + 308) = 6; return result; } // 88DFF0: using guessed type char var_518[264]; //----- (0088E370) -------------------------------------------------------- char __thiscall sub_88E370(_DWORD *this) { char result; // al int v2; // [esp+0h] [ebp-48h] int v3; // [esp+4h] [ebp-44h] _DWORD *v4; // [esp+8h] [ebp-40h] char v5; // [esp+10h] [ebp-38h] int v6; // [esp+34h] [ebp-14h] int v7; // [esp+38h] [ebp-10h] int v8; // [esp+3Ch] [ebp-Ch] _DWORD *v9; // [esp+40h] [ebp-8h] _DWORD *v10; // [esp+44h] [ebp-4h] v4 = this; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) ) return 0; if ( !v4[45] ) return 0; v4[77] = 6; v9 = (_DWORD *)sub_88CFC0(); v10 = 0; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 124))(v4) || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) || (v10 = sub_88D5F0(v9, v4)) == 0 || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v10 + 132))(v10) ) { v3 = v4[47]; if ( v3 ) { if ( v3 == 1 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) ) v4[76] = AIL_file_read(v4[45], 0); (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 296))(v4, 1); result = 1; } else { result = 1; } } else { v7 = AIL_file_size(v4[45]); v8 = AIL_file_read(v4[45], 0); if ( v8 ) { v2 = AIL_file_type(v8, v7); switch ( v2 ) { case 1: v4[76] = v8; (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 296))(v4, 1); result = 1; break; case 2: AIL_WAV_info(v8, &v5); AIL_decompress_ADPCM(&v5, &v6, 0); AIL_mem_free_lock(v8); v4[76] = v6; (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 296))(v4, 1); result = 1; break; case 13: AIL_decompress_ASI(v8, v7, v4[45], &v6, 0, 0); AIL_mem_free_lock(v8); v4[76] = v6; (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 296))(v4, 1); result = 1; break; default: AIL_mem_free_lock(v8); v4[76] = 0; result = 0; break; } } else { result = 0; } } } else { v4[76] = sub_88E6A0(v10); (*(void (__thiscall **)(_DWORD *, signed int))(*v4 + 296))(v4, 1); result = 1; } return result; } // 9A5618: using guessed type int __stdcall AIL_decompress_ASI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 9A561C: using guessed type int __stdcall AIL_mem_free_lock(_DWORD); // 9A5620: using guessed type int __stdcall AIL_decompress_ADPCM(_DWORD, _DWORD, _DWORD); // 9A5624: using guessed type int __stdcall AIL_WAV_info(_DWORD, _DWORD); // 9A5628: using guessed type int __stdcall AIL_file_type(_DWORD, _DWORD); // 9A562C: using guessed type int __stdcall AIL_file_read(_DWORD, _DWORD); // 9A5630: using guessed type int __stdcall AIL_file_size(_DWORD); //----- (0088E610) -------------------------------------------------------- char __thiscall sub_88E610(_DWORD *this) { _DWORD *v2; // eax _DWORD *v3; // [esp+0h] [ebp-4h] v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) ) return 0; (*(void (__thiscall **)(_DWORD *))(*v3 + 304))(v3); if ( v3[76] ) { v2 = (_DWORD *)sub_88CFC0(); if ( sub_88D720(v2, v3) ) AIL_mem_free_lock(v3[76]); } v3[76] = 0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 296))(v3, 0); return 1; } // 9A561C: using guessed type int __stdcall AIL_mem_free_lock(_DWORD); //----- (0088E6A0) -------------------------------------------------------- int __thiscall sub_88E6A0(_DWORD *this) { return this[76]; } //----- (0088E6C0) -------------------------------------------------------- int __thiscall sub_88E6C0(_DWORD *this, int a2) { int result; // eax int v3; // [esp+0h] [ebp-8h] _DWORD *v4; // [esp+4h] [ebp-4h] v4 = this; sub_892670(this, a2); result = (*(int (__thiscall **)(_DWORD *))(*v4 + 228))(v4); if ( result == 1 ) { v3 = v4[47]; if ( v3 ) { if ( v3 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) ) result = AIL_set_stream_loop_count(v4[75], v4[48]); else result = AIL_set_sample_loop_count(v4[75], v4[48]); } } else { result = AIL_set_3D_sample_loop_count(v4[75], v4[48]); } } return result; } // 9A5634: using guessed type int __stdcall AIL_set_sample_loop_count(_DWORD, _DWORD); // 9A5638: using guessed type int __stdcall AIL_set_stream_loop_count(_DWORD, _DWORD); // 9A563C: using guessed type int __stdcall AIL_set_3D_sample_loop_count(_DWORD, _DWORD); //----- (0088E780) -------------------------------------------------------- char __thiscall sub_88E780(float *this, float a2, float a3, float a4) { float *v5; // [esp+Ch] [ebp-4h] v5 = this; sub_891260(this, a2, a3, a4); if ( !*((_DWORD *)v5 + 75) || *((_DWORD *)v5 + 47) ) return 0; AIL_set_3D_sample_cone(*((_DWORD *)v5 + 75), LODWORD(a2), LODWORD(a3), LODWORD(a4)); return 1; } // 9A5640: using guessed type int __stdcall AIL_set_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0088E7F0) -------------------------------------------------------- float *__thiscall sub_88E7F0(int this, float *a2, float *a3, float *a4) { float *result; // eax if ( *(_DWORD *)(this + 300) && !*(_DWORD *)(this + 188) ) result = (float *)AIL_3D_sample_cone(*(_DWORD *)(this + 300), a2, a3, a4); else result = sub_8912B0((float *)this, a2, a3, a4); return result; } // 9A5644: using guessed type int __stdcall AIL_3D_sample_cone(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0088E850) -------------------------------------------------------- char __thiscall sub_88E850(float *this, float a2, float a3) { float *v4; // [esp+8h] [ebp-4h] v4 = this; sub_8912F0(this, a2, a3); if ( !*((_DWORD *)v4 + 75) || *((_DWORD *)v4 + 47) ) return 0; AIL_set_3D_sample_distances(*((_DWORD *)v4 + 75), LODWORD(a3), LODWORD(a2)); return 1; } // 9A5648: using guessed type int __stdcall AIL_set_3D_sample_distances(_DWORD, _DWORD, _DWORD); //----- (0088E8B0) -------------------------------------------------------- float *__thiscall sub_88E8B0(int this, float *a2, float *a3) { float *result; // eax if ( *(_DWORD *)(this + 300) && !*(_DWORD *)(this + 188) ) result = (float *)AIL_3D_sample_distances(*(_DWORD *)(this + 300), a3, a2); else result = sub_891320((float *)this, a2, a3); return result; } // 9A564C: using guessed type int __stdcall AIL_3D_sample_distances(_DWORD, _DWORD, _DWORD); //----- (0088E900) -------------------------------------------------------- char __thiscall sub_88E900(float *this, float a2) { int v3; // [esp+8h] [ebp-8h] float *v4; // [esp+Ch] [ebp-4h] v4 = this; sub_891350(this, a2); if ( !*((_DWORD *)v4 + 75) ) return 0; if ( a2 >= 0.0 ) { if ( a2 > 1.0 ) a2 = 1.0; } else { a2 = 0.0; } v3 = *((_DWORD *)v4 + 47); if ( v3 ) { if ( v3 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v4 + 132))(v4) ) AIL_set_stream_volume_levels(*((_DWORD *)v4 + 75), LODWORD(a2), LODWORD(a2)); else AIL_set_sample_volume_levels(*((_DWORD *)v4 + 75), LODWORD(a2), LODWORD(a2)); } } else { AIL_set_3D_sample_volume(*((_DWORD *)v4 + 75), LODWORD(a2)); } return 1; } // 9A5650: using guessed type int __stdcall AIL_set_sample_volume_levels(_DWORD, _DWORD, _DWORD); // 9A5654: using guessed type int __stdcall AIL_set_stream_volume_levels(_DWORD, _DWORD, _DWORD); // 9A5658: using guessed type int __stdcall AIL_set_3D_sample_volume(_DWORD, _DWORD); //----- (0088E9F0) -------------------------------------------------------- double __thiscall sub_88E9F0(int this) { int v2; // [esp+0h] [ebp-10h] int v3; // [esp+4h] [ebp-Ch] float v4; // [esp+8h] [ebp-8h] char v5; // [esp+Ch] [ebp-4h] v3 = this; if ( !*(_DWORD *)(this + 300) ) return sub_891370((float *)this); v2 = *(_DWORD *)(this + 188); if ( !v2 ) return AIL_3D_sample_volume(*(_DWORD *)(this + 300)); if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)this + 132))(this) ) AIL_stream_volume_levels(*(_DWORD *)(v3 + 300), &v4, &v5); else AIL_sample_volume_levels(*(_DWORD *)(v3 + 300), &v4, &v5); } return v4; } // 9A565C: using guessed type int __stdcall AIL_sample_volume_levels(_DWORD, _DWORD, _DWORD); // 9A5660: using guessed type int __stdcall AIL_stream_volume_levels(_DWORD, _DWORD, _DWORD); // 9A5664: using guessed type double __stdcall AIL_3D_sample_volume(_DWORD); //----- (0088EA90) -------------------------------------------------------- char __thiscall sub_88EA90(_DWORD *this, int a2) { int v3; // [esp+0h] [ebp-8h] _DWORD *v4; // [esp+4h] [ebp-4h] v4 = this; sub_891390(this, a2); if ( !v4[75] ) return 0; v3 = v4[47]; if ( v3 ) { if ( v3 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) ) AIL_set_stream_playback_rate(v4[75], a2); else AIL_set_sample_playback_rate(v4[75], a2); } } else { AIL_set_3D_sample_playback_rate(v4[75], a2); } return 1; } // 9A5668: using guessed type int __stdcall AIL_set_sample_playback_rate(_DWORD, _DWORD); // 9A566C: using guessed type int __stdcall AIL_set_stream_playback_rate(_DWORD, _DWORD); // 9A5670: using guessed type int __stdcall AIL_set_3D_sample_playback_rate(_DWORD, _DWORD); //----- (0088EB30) -------------------------------------------------------- int __thiscall sub_88EB30(_DWORD *this) { int v2; // [esp+0h] [ebp-Ch] _DWORD *v3; // [esp+4h] [ebp-8h] int v4; // [esp+8h] [ebp-4h] v3 = this; if ( !this[75] ) return sub_8913B0(this); v2 = this[47]; if ( !v2 ) return AIL_3D_sample_playback_rate(this[75]); if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 132))(this) ) v4 = AIL_stream_playback_rate(v3[75]); else v4 = AIL_sample_playback_rate(v3[75]); } return v4; } // 9A5674: using guessed type int __stdcall AIL_sample_playback_rate(_DWORD); // 9A5678: using guessed type int __stdcall AIL_stream_playback_rate(_DWORD); // 9A567C: using guessed type int __stdcall AIL_3D_sample_playback_rate(_DWORD); //----- (0088EBD0) -------------------------------------------------------- int __thiscall sub_88EBD0(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // [esp+0h] [ebp-4h] v4 = this; result = (*(int (__thiscall **)(_DWORD *))(*this + 300))(this); if ( (_BYTE)result ) { if ( v4[75] ) result = AIL_set_3D_sample_preference(v4[75], a2, a3); } return result; } // 9A5680: using guessed type int __stdcall AIL_set_3D_sample_preference(_DWORD, _DWORD, _DWORD); //----- (0088EC20) -------------------------------------------------------- int __thiscall sub_88EC20(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // [esp+0h] [ebp-4h] v4 = this; result = (*(int (__thiscall **)(_DWORD *))(*this + 300))(this); if ( (_BYTE)result ) { if ( v4[75] ) result = AIL_3D_sample_attribute(v4[75], a2, a3); } return result; } // 9A5684: using guessed type int __stdcall AIL_3D_sample_attribute(_DWORD, _DWORD, _DWORD); //----- (0088EC70) -------------------------------------------------------- char __thiscall sub_88EC70(float *this) { int v2; // [esp+30h] [ebp-8h] float *v3; // [esp+34h] [ebp-4h] v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)this + 300))(this) ) return 0; sub_88FCC0(v3); if ( !*((_DWORD *)v3 + 75) ) return 0; if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v3 + 312))(v3) ) (*(void (__thiscall **)(float *, float, float, float))(*(_DWORD *)v3 + 156))(v3, v3[49], v3[50], v3[51]); if ( v3[58] > 0.00009999999747378752 ) (*(void (__thiscall **)(float *, float, float))(*(_DWORD *)v3 + 180))(v3, v3[58], v3[59]); (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 188))(v3, v3[60]); if ( *((_DWORD *)v3 + 61) > 0 ) (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v3 + 200))(v3, *((_DWORD *)v3 + 61)); if ( v3[62] > 0.00009999999747378752 ) (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 232))(v3, v3[62]); if ( *((_DWORD *)v3 + 63) ) (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)v3 + 244))(v3, *((_DWORD *)v3 + 63)); if ( v3[64] > 0.00009999999747378752 ) (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 256))(v3, v3[64]); if ( v3[65] > 0.00009999999747378752 ) (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 264))(v3, v3[65]); if ( v3[66] > 0.00009999999747378752 ) (*(void (__thiscall **)(float *, float))(*(_DWORD *)v3 + 272))(v3, v3[66]); v2 = *((_DWORD *)v3 + 47); if ( v2 ) { if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v3 + 132))(v3) ) { AIL_set_stream_loop_count(*((_DWORD *)v3 + 75), *((_DWORD *)v3 + 48)); AIL_start_stream(*((_DWORD *)v3 + 75)); } else { AIL_set_sample_loop_count(*((_DWORD *)v3 + 75), *((_DWORD *)v3 + 48)); AIL_start_sample(*((_DWORD *)v3 + 75)); } } } else { AIL_set_3D_sample_loop_count(*((_DWORD *)v3 + 75), *((_DWORD *)v3 + 48)); AIL_start_3D_sample(*((_DWORD *)v3 + 75)); } return 1; } // 9A5634: using guessed type int __stdcall AIL_set_sample_loop_count(_DWORD, _DWORD); // 9A5638: using guessed type int __stdcall AIL_set_stream_loop_count(_DWORD, _DWORD); // 9A563C: using guessed type int __stdcall AIL_set_3D_sample_loop_count(_DWORD, _DWORD); // 9A5688: using guessed type int __stdcall AIL_start_sample(_DWORD); // 9A568C: using guessed type int __stdcall AIL_start_stream(_DWORD); // 9A5690: using guessed type int __stdcall AIL_start_3D_sample(_DWORD); //----- (0088EF40) -------------------------------------------------------- char __thiscall sub_88EF40(_DWORD *this) { int v2; // [esp+0h] [ebp-8h] _DWORD *v3; // [esp+4h] [ebp-4h] v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) || !v3[75] ) return 0; v2 = v3[47]; if ( v2 ) { if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 132))(v3) ) AIL_pause_stream(v3[75], 1); else AIL_stop_sample(v3[75]); } } else { AIL_stop_3D_sample(v3[75]); } (*(void (__thiscall **)(_DWORD *))(*v3 + 304))(v3); return 1; } // 9A5614: using guessed type int __stdcall AIL_pause_stream(_DWORD, _DWORD); // 9A5694: using guessed type int __stdcall AIL_stop_sample(_DWORD); // 9A5698: using guessed type int __stdcall AIL_stop_3D_sample(_DWORD); //----- (0088EFF0) -------------------------------------------------------- int __thiscall sub_88EFF0(_DWORD *this) { int result; // eax int v2; // [esp+0h] [ebp-8h] _DWORD *v3; // [esp+4h] [ebp-4h] v3 = this; result = (*(int (__thiscall **)(_DWORD *))(*this + 300))(this); if ( (_BYTE)result && v3[75] ) { result = (int)v3; v2 = v3[47]; if ( v2 ) { if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 132))(v3) ) result = AIL_set_stream_ms_position(v3[75], 0); else result = AIL_set_sample_ms_position(v3[75], 0); } } else { result = AIL_set_3D_sample_offset(v3[75], 0); } } return result; } // 9A569C: using guessed type int __stdcall AIL_set_sample_ms_position(_DWORD, _DWORD); // 9A56A0: using guessed type int __stdcall AIL_set_stream_ms_position(_DWORD, _DWORD); // 9A56A4: using guessed type int __stdcall AIL_set_3D_sample_offset(_DWORD, _DWORD); //----- (0088F090) -------------------------------------------------------- signed int __thiscall sub_88F090(_DWORD *this) { signed int result; // eax int v2; // [esp+4h] [ebp-Ch] _DWORD *v3; // [esp+8h] [ebp-8h] int v4; // [esp+Ch] [ebp-4h] v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) ) return 6; if ( !v3[75] && !v3[77] ) return 0; v2 = v3[47]; if ( v2 ) { if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 132))(v3) ) v4 = AIL_stream_status(v3[75]); else v4 = AIL_sample_status(v3[75]); } } else { v4 = AIL_3D_sample_status(v3[75]); } switch ( v4 ) { case 1: result = 3; break; case 2: result = 0; break; case 4: result = 1; break; case 8: result = 2; break; case 16: result = 4; break; default: result = 6; break; } return result; } // 9A56A8: using guessed type int __stdcall AIL_sample_status(_DWORD); // 9A56AC: using guessed type int __stdcall AIL_stream_status(_DWORD); // 9A56B0: using guessed type int __stdcall AIL_3D_sample_status(_DWORD); //----- (0088F1C0) -------------------------------------------------------- char __thiscall sub_88F1C0(float *this, float a2) { double v3; // ST1C_8 int v4; // [esp+20h] [ebp-30h] float *v5; // [esp+24h] [ebp-2Ch] char v6; // [esp+28h] [ebp-28h] int v7; // [esp+38h] [ebp-18h] int v8; // [esp+4Ch] [ebp-4h] v5 = this; sub_8913D0(this, a2); if ( !(*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v5 + 300))(v5) || !*((_DWORD *)v5 + 75) ) return 0; v4 = *((_DWORD *)v5 + 47); if ( v4 ) { if ( v4 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v5 + 132))(v5) ) AIL_set_stream_ms_position(*((_DWORD *)v5 + 75), (signed int)(a2 * 1000.0)); else AIL_set_sample_ms_position(*((_DWORD *)v5 + 75), (signed int)(a2 * 1000.0)); } } else { AIL_WAV_info(*((_DWORD *)v5 + 76), &v6); v3 = a2 * ((double)v7 / 8.0); v8 = (signed __int64)((double)AIL_3D_sample_playback_rate(*((_DWORD *)v5 + 75)) * v3); AIL_set_3D_sample_offset(*((_DWORD *)v5 + 75), v8); } return 1; } // 9A5624: using guessed type int __stdcall AIL_WAV_info(_DWORD, _DWORD); // 9A567C: using guessed type int __stdcall AIL_3D_sample_playback_rate(_DWORD); // 9A569C: using guessed type int __stdcall AIL_set_sample_ms_position(_DWORD, _DWORD); // 9A56A0: using guessed type int __stdcall AIL_set_stream_ms_position(_DWORD, _DWORD); // 9A56A4: using guessed type int __stdcall AIL_set_3D_sample_offset(_DWORD, _DWORD); //----- (0088F2F0) -------------------------------------------------------- double __thiscall sub_88F2F0(float *this) { double result; // st7 double v2; // ST24_8 double v3; // ST1C_8 float v4; // ST14_4 float v5; // ST10_4 float v6; // ST0C_4 int v7; // [esp+28h] [ebp-38h] float *v8; // [esp+2Ch] [ebp-34h] int v9; // [esp+30h] [ebp-30h] int v10; // [esp+34h] [ebp-2Ch] char v11; // [esp+38h] [ebp-28h] int v12; // [esp+48h] [ebp-18h] unsigned int v13; // [esp+5Ch] [ebp-4h] v8 = this; if ( !(*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)this + 300))(this) || !*((_DWORD *)v8 + 75) ) return sub_8913F0(v8); v7 = *((_DWORD *)v8 + 47); if ( v7 ) { if ( v7 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v8 + 132))(v8) ) { AIL_stream_ms_position(*((_DWORD *)v8 + 75), 0, &v10); v5 = (double)v10 / 1000.0; result = v5; } else { AIL_sample_ms_position(*((_DWORD *)v8 + 75), 0, &v9); v6 = (double)v9 / 1000.0; result = v6; } } else { result = 0.0; } } else { AIL_WAV_info(*((_DWORD *)v8 + 76), &v11); v13 = AIL_3D_sample_offset(*((_DWORD *)v8 + 75)); v2 = (double)v13; v3 = (double)v12 / 8.0; v4 = v2 / ((double)AIL_3D_sample_playback_rate(*((_DWORD *)v8 + 75)) * v3); result = v4; } return result; } // 9A5624: using guessed type int __stdcall AIL_WAV_info(_DWORD, _DWORD); // 9A567C: using guessed type int __stdcall AIL_3D_sample_playback_rate(_DWORD); // 9A56B4: using guessed type int __stdcall AIL_sample_ms_position(_DWORD, _DWORD, _DWORD); // 9A56B8: using guessed type int __stdcall AIL_stream_ms_position(_DWORD, _DWORD, _DWORD); // 9A56BC: using guessed type int __stdcall AIL_3D_sample_offset(_DWORD); //----- (0088F430) -------------------------------------------------------- char __thiscall sub_88F430(_DWORD *this, float *a2) { int v3; // [esp+20h] [ebp-54h] _DWORD *v4; // [esp+24h] [ebp-50h] char v5; // [esp+28h] [ebp-4Ch] unsigned int v6; // [esp+34h] [ebp-40h] unsigned int v7; // [esp+40h] [ebp-34h] int v8; // [esp+4Ch] [ebp-28h] char v9; // [esp+50h] [ebp-24h] unsigned int v10; // [esp+5Ch] [ebp-18h] unsigned int v11; // [esp+68h] [ebp-Ch] v4 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) ) return 0; v3 = v4[47]; if ( v3 ) { if ( v3 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) ) { if ( !v4[75] ) return 0; v8 = 0; AIL_stream_ms_position(v4[75], &v8, 0); *a2 = (double)v8 / 1000.0; } else { AIL_WAV_info(v4[76], &v5); *a2 = (double)v7 / (double)v6; } } } else { AIL_WAV_info(v4[76], &v9); *a2 = (double)v11 / (double)v10; } return 1; } // 9A5624: using guessed type int __stdcall AIL_WAV_info(_DWORD, _DWORD); // 9A56B8: using guessed type int __stdcall AIL_stream_ms_position(_DWORD, _DWORD, _DWORD); //----- (0088F550) -------------------------------------------------------- char __thiscall sub_88F550(_DWORD *this, int a2) { int v3; // [esp+0h] [ebp-8h] _DWORD *v4; // [esp+4h] [ebp-4h] v4 = this; sub_891410(this, a2); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 300))(v4) || !v4[75] ) return 0; v3 = v4[47]; if ( v3 ) { if ( v3 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v4 + 132))(v4) ) AIL_set_stream_position(v4[75], a2); else AIL_set_sample_position(v4[75], a2); } } else { AIL_set_3D_sample_offset(v4[75], a2); } return 1; } // 9A56A4: using guessed type int __stdcall AIL_set_3D_sample_offset(_DWORD, _DWORD); // 9A56C0: using guessed type int __stdcall AIL_set_sample_position(_DWORD, _DWORD); // 9A56C4: using guessed type int __stdcall AIL_set_stream_position(_DWORD, _DWORD); //----- (0088F610) -------------------------------------------------------- int __thiscall sub_88F610(_DWORD *this) { int v2; // [esp+0h] [ebp-10h] _DWORD *v3; // [esp+4h] [ebp-Ch] int v4; // [esp+8h] [ebp-8h] int v5; // [esp+Ch] [ebp-4h] v3 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) || !v3[75] ) return sub_891430(v3); v2 = v3[47]; if ( !v2 ) return AIL_3D_sample_offset(v3[75]); if ( v2 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 132))(v3) ) { v5 = AIL_stream_position(v3[75]); } else { AIL_sample_ms_position(v3[75], 0, &v4); v5 = v4; } } return v5; } // 9A56B4: using guessed type int __stdcall AIL_sample_ms_position(_DWORD, _DWORD, _DWORD); // 9A56BC: using guessed type int __stdcall AIL_3D_sample_offset(_DWORD); // 9A56C8: using guessed type int __stdcall AIL_stream_position(_DWORD); //----- (0088F6D0) -------------------------------------------------------- int __thiscall sub_88F6D0(float *this, float a2) { int result; // eax int v3; // eax float *v4; // [esp+20h] [ebp-3Ch] float v5; // [esp+24h] [ebp-38h] float v6; // [esp+28h] [ebp-34h] float v7; // [esp+2Ch] [ebp-30h] float v8; // [esp+30h] [ebp-2Ch] float v9; // [esp+34h] [ebp-28h] float v10; // [esp+38h] [ebp-24h] float v11; // [esp+3Ch] [ebp-20h] int v12; // [esp+40h] [ebp-1Ch] int v13; // [esp+44h] [ebp-18h] float v14; // [esp+48h] [ebp-14h] float v15; // [esp+4Ch] [ebp-10h] float v16; // [esp+50h] [ebp-Ch] float v17; // [esp+54h] [ebp-8h] float v18; // [esp+58h] [ebp-4h] v4 = this; sub_891170(this, a2); if ( !(*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 228))(v4) || (*(int (__thiscall **)(float *))(*(_DWORD *)v4 + 228))(v4) == 3 ) { v4[77] = 0.0; (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 304))(v4); } result = (int)v4; if ( *((_DWORD *)v4 + 75) && !*((_DWORD *)v4 + 47) ) { v12 = *((_DWORD *)v4 + 35); v13 = *((_DWORD *)v4 + 36); v14 = v4[37]; (*(void (__thiscall **)(float *, float *))(*(_DWORD *)v4 + 324))(v4, &v15); v3 = sub_88CE60(); (*(void (__thiscall **)(int, int))(*(_DWORD *)v3 + 108))(v3, v3); v11 = a2; v18 = a2 * 1000.0; v15 = v15 / v18; v16 = v16 / v18; v17 = -v17 / v18; v14 = v14 * -1.0; AIL_set_3D_position(*((_DWORD *)v4 + 75), v12, v13, LODWORD(v14)); AIL_set_3D_velocity_vector(*((_DWORD *)v4 + 75), LODWORD(v15), LODWORD(v16), LODWORD(v17)); result = (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v4 + 312))(v4); if ( (_BYTE)result ) { sub_85DA90(v4 + 26, &v5, v4 + 52); sub_85DA90(v4 + 26, &v8, v4 + 55); v7 = v7 * -1.0; v10 = v10 * -1.0; result = AIL_set_3D_orientation( *((_DWORD *)v4 + 75), LODWORD(v5), LODWORD(v6), LODWORD(v7), LODWORD(v8), LODWORD(v9), LODWORD(v10)); } } return result; } // 9A56CC: using guessed type int __stdcall AIL_set_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 9A56D0: using guessed type int __stdcall AIL_set_3D_velocity_vector(_DWORD, _DWORD, _DWORD, _DWORD); // 9A56D4: using guessed type int __stdcall AIL_set_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); //----- (0088F8C0) -------------------------------------------------------- char __thiscall sub_88F8C0(float *this, float a2) { float *v3; // [esp+4h] [ebp-4h] v3 = this; sub_891450(this, a2); if ( !*((_DWORD *)v3 + 75) || *((_DWORD *)v3 + 47) ) return 0; AIL_set_3D_sample_effects_level(*((_DWORD *)v3 + 75), LODWORD(a2)); return 1; } // 9A56D8: using guessed type int __stdcall AIL_set_3D_sample_effects_level(_DWORD, _DWORD); //----- (0088F920) -------------------------------------------------------- double __thiscall sub_88F920(int this) { if ( !*(_DWORD *)(this + 300) || *(_DWORD *)(this + 188) ) return sub_891470((float *)this); return (float)AIL_3D_sample_effects_level(*(_DWORD *)(this + 300)); } // 9A56DC: using guessed type double __stdcall AIL_3D_sample_effects_level(_DWORD); //----- (0088F970) -------------------------------------------------------- char __thiscall sub_88F970(float *this, float a2) { float *v3; // [esp+4h] [ebp-4h] v3 = this; sub_891490(this, a2); if ( !*((_DWORD *)v3 + 75) || *((_DWORD *)v3 + 47) ) return 0; AIL_set_3D_sample_occlusion(*((_DWORD *)v3 + 75), LODWORD(a2)); return 1; } // 9A56E0: using guessed type int __stdcall AIL_set_3D_sample_occlusion(_DWORD, _DWORD); //----- (0088F9D0) -------------------------------------------------------- double __thiscall sub_88F9D0(int this) { if ( !*(_DWORD *)(this + 300) || *(_DWORD *)(this + 188) ) return sub_8914B0((float *)this); return (float)AIL_3D_sample_occlusion(*(_DWORD *)(this + 300)); } // 9A56E4: using guessed type double __stdcall AIL_3D_sample_occlusion(_DWORD); //----- (0088FA20) -------------------------------------------------------- char __thiscall sub_88FA20(float *this, float a2) { float *v3; // [esp+4h] [ebp-4h] v3 = this; sub_8914D0(this, a2); if ( !*((_DWORD *)v3 + 75) || *((_DWORD *)v3 + 47) ) return 0; AIL_set_3D_sample_obstruction(*((_DWORD *)v3 + 75), LODWORD(a2)); return 1; } // 9A56E8: using guessed type int __stdcall AIL_set_3D_sample_obstruction(_DWORD, _DWORD); //----- (0088FA80) -------------------------------------------------------- double __thiscall sub_88FA80(int this) { if ( !*(_DWORD *)(this + 300) || *(_DWORD *)(this + 188) ) return sub_8914F0((float *)this); return (float)AIL_3D_sample_obstruction(*(_DWORD *)(this + 300)); } // 9A56EC: using guessed type double __stdcall AIL_3D_sample_obstruction(_DWORD); //----- (0088FAD0) -------------------------------------------------------- int __thiscall sub_88FAD0(_DWORD *this, int a2) { int result; // eax int v3; // [esp+4h] [ebp-Ch] int v4; // [esp+8h] [ebp-8h] float v5; // [esp+Ch] [ebp-4h] if ( this[75] && !this[47] ) { AIL_3D_position(this[75], &v3, &v4, &v5); v5 = v5 * -1.0; *(_DWORD *)a2 = v3; *(_DWORD *)(a2 + 4) = v4; *(float *)(a2 + 8) = v5; result = a2; } else { *(_DWORD *)a2 = dword_BA45C0; *(_DWORD *)(a2 + 4) = dword_BA45C4; *(_DWORD *)(a2 + 8) = dword_BA45C8; result = a2; } return result; } // 9A56F0: using guessed type int __stdcall AIL_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0088FB60) -------------------------------------------------------- _DWORD *__thiscall sub_88FB60(_DWORD *this, int a2, int a3) { _DWORD *result; // eax result = this; if ( this[75] ) { if ( !this[47] ) { AIL_3D_orientation(this[75], a2, a2 + 4, a2 + 8, a3, a3 + 4, a3 + 8); *(float *)(a2 + 8) = *(float *)(a2 + 8) * -1.0; result = (_DWORD *)a3; *(float *)(a3 + 8) = *(float *)(a3 + 8) * -1.0; } } return result; } // 9A56F4: using guessed type int __stdcall AIL_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (0088FBE0) -------------------------------------------------------- float *__userpurge sub_88FBE0@(int a1@, double a2@, float *a3) { float *result; // eax int v4; // eax float v5; // [esp+8h] [ebp-14h] float v6; // [esp+Ch] [ebp-10h] float v7; // [esp+10h] [ebp-Ch] float v8; // [esp+14h] [ebp-8h] float v9; // [esp+18h] [ebp-4h] if ( *(_DWORD *)(a1 + 300) && !*(_DWORD *)(a1 + 188) ) { AIL_3D_velocity(*(_DWORD *)(a1 + 300), &v5, &v6, &v7); v4 = sub_88CE60(); (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 108))(v4, v4); v8 = a2; v9 = v8 * 1000.0; v5 = v5 * v9; v6 = v6 * v9; v7 = -v9 * v7; *a3 = v5; a3[1] = v6; a3[2] = v7; result = a3; } else { *(_DWORD *)a3 = dword_BA45C0; *((_DWORD *)a3 + 1) = dword_BA45C4; *((_DWORD *)a3 + 2) = dword_BA45C8; result = a3; } return result; } // 9A56F8: using guessed type int __stdcall AIL_3D_velocity(_DWORD, _DWORD, _DWORD, _DWORD); // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0088FCC0) -------------------------------------------------------- char __thiscall sub_88FCC0(_DWORD *this) { int v1; // eax int v2; // eax int v3; // eax int v4; // ST04_4 int v5; // ST08_4 int v6; // ST04_4 int v7; // eax int v8; // eax int v9; // ST04_4 int v10; // ST08_4 _DWORD *v12; // [esp+4h] [ebp-10h] v12 = this; LOBYTE(v1) = (_BYTE)this; if ( !this[75] ) { LOBYTE(v1) = (*(int (__thiscall **)(_DWORD *))(*this + 300))(this); if ( (_BYTE)v1 ) { v1 = (*(int (__thiscall **)(_DWORD *))(*v12 + 116))(v12); if ( v1 ) { if ( v1 == 1 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v12 + 132))(v12) ) { v2 = sub_88CFC0(); v3 = unknown_libname_29(v2, v12[45], 0); v1 = AIL_open_stream(v3, v4, v5); } else { v6 = v12[76]; v7 = sub_88CFC0(); v8 = unknown_libname_29(v7, v6, 0); v1 = AIL_allocate_file_sample(v8, v9, v10); } v12[75] = v1; } } else { LOBYTE(v1) = (*(int (__thiscall **)(_DWORD *))(*v12 + 132))(v12); if ( !(_BYTE)v1 ) { if ( *(_BYTE *)(v12[74] + 8) || (LOBYTE(v1) = sub_892FA0((_DWORD *)v12[74]), (_BYTE)v1) ) { v1 = AIL_allocate_3D_sample_handle(*(_DWORD *)(v12[74] + 4)); v12[75] = v1; if ( v12[75] ) { v1 = AIL_set_3D_sample_file(v12[75], v12[76]); if ( !v1 ) { AIL_release_3D_sample_handle(v12[75]); LOBYTE(v1) = (_BYTE)v12; v12[75] = 0; } } } } } } } return v1; } // 88DB00: using guessed type int __thiscall unknown_libname_29(_DWORD, _DWORD, _DWORD); // 9A55C0: using guessed type int __stdcall AIL_allocate_3D_sample_handle(_DWORD); // 9A5608: using guessed type int __stdcall AIL_release_3D_sample_handle(_DWORD); // 9A56FC: using guessed type int __stdcall AIL_allocate_file_sample(_DWORD, _DWORD, _DWORD); // 9A5700: using guessed type int __stdcall AIL_open_stream(_DWORD, _DWORD, _DWORD); // 9A5704: using guessed type int __stdcall AIL_set_3D_sample_file(_DWORD, _DWORD); //----- (0088FE50) -------------------------------------------------------- float *__thiscall sub_88FE50(float *this, _DWORD **a2) { float *v3; // [esp+0h] [ebp-10h] float *v4; // [esp+4h] [ebp-Ch] _DWORD *v5; // [esp+8h] [ebp-8h] v4 = this; v5 = operator new(0x138u); if ( v5 ) v3 = (float *)sub_88DDF0(v5, 0); else v3 = 0; sub_88FEB0(v4, v3, a2); return v3; } //----- (0088FEB0) -------------------------------------------------------- float *__thiscall sub_88FEB0(float *this, float *a2, _DWORD **a3) { float *v3; // ST08_4 float *result; // eax v3 = this; sub_891570(this, a2, a3); a2[74] = v3[74]; result = v3; a2[76] = v3[76]; return result; } //----- (0088FF00) -------------------------------------------------------- _DWORD *sub_88FF00() { _DWORD *v1; // [esp+0h] [ebp-8h] _DWORD *v2; // [esp+4h] [ebp-4h] v2 = operator new(0x138u); if ( v2 ) v1 = sub_88DDF0(v2, 0); else v1 = 0; return v1; } //----- (0088FF40) -------------------------------------------------------- void __thiscall sub_88FF40(int *this, _DWORD *a2) { int *v2; // [esp+0h] [ebp-130h] char Dst; // [esp+10h] [ebp-120h] _DWORD *v4; // [esp+120h] [ebp-10h] int i; // [esp+124h] [ebp-Ch] char v6; // [esp+128h] [ebp-8h] char *v7; // [esp+12Ch] [ebp-4h] v2 = this; sub_891810(this, (signed int)a2); if ( !v2[47] ) { v4 = (_DWORD *)sub_88CE60(); v7 = 0; sub_8769C0(a2, &v7); for ( i = sub_88D820(v4, (_DWORD **)&v6); i; i = sub_88D890(v4, (_DWORD **)&v6) ) { if ( strstr(*(const char **)i, v7) ) { strcpy_s(&Dst, 0x104u, (const char *)v2[45]); sub_88DFF0((const char **)v2, &Dst, i); break; } } operator delete(v7); } } //----- (00890050) -------------------------------------------------------- _DWORD *__thiscall sub_890050(_DWORD *this, _DWORD *a2) { return sub_891B50(this, a2); } //----- (00890070) -------------------------------------------------------- char __thiscall sub_890070(_DWORD *this, int a2) { return sub_891B70(this, a2); } //----- (00890090) -------------------------------------------------------- int __userpurge sub_890090@(const char **a1@, double a2@, _DWORD *a3) { int result; // eax const char **v4; // [esp+0h] [ebp-Ch] v4 = a1; result = sub_891B90(a1, a2, a3); if ( !v4[47] ) result = sub_876A50(a3, *(const char **)v4[74]); return result; } //----- (008900E0) -------------------------------------------------------- bool __thiscall sub_8900E0(float *this, int a2) { float *v3; // [esp+0h] [ebp-8h] v3 = this; if ( !sub_891E00(this, a2) ) return 0; if ( *((_DWORD *)v3 + 74) == *(_DWORD *)(a2 + 296) ) return *((_DWORD *)v3 + 76) == *(_DWORD *)(a2 + 304); return 0; } //----- (00890140) -------------------------------------------------------- void *__thiscall sub_890140(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_88DE60(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00890170) -------------------------------------------------------- void *sub_890170() { return &unk_BA4BD0; } //----- (00890180) -------------------------------------------------------- _DWORD *__thiscall sub_890180(_DWORD *this, _DWORD *a2) { *a2 = this[71]; a2[1] = this[72]; a2[2] = this[73]; return a2; } //----- (008901B0) -------------------------------------------------------- float *__thiscall sub_8901B0(float *this) { float *v1; // ST14_4 float *v2; // ecx float *v3; // eax float *v4; // edx float *v5; // ecx char v7; // [esp+48h] [ebp-28h] v1 = this; sub_892B60(this); *(_DWORD *)v1 = &NiMilesListener::`vftable'; v2 = v1 + 44; *v2 = 1.0; v2[1] = 0.0; v2[2] = 0.0; v3 = v1 + 47; *v3 = 0.0; v3[1] = 1.0; v3[2] = 0.0; v4 = v1 + 22; *v4 = 0.0; v4[1] = 0.0; v4[2] = 0.0; sub_85D530((float *)&v7, 1.0, 1.0, 1.0); qmemcpy(v1 + 13, &v7, 0x24u); v5 = v1 + 51; *v5 = 0.0; v5[1] = 0.0; v5[2] = 0.0; v1[50] = 0.0; return v1; } // A28004: using guessed type void *NiMilesListener::`vftable'; //----- (008902C0) -------------------------------------------------------- LONG __thiscall sub_8902C0(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; *this = &NiMilesListener::`vftable'; sub_8902F0(this); return sub_892C70(v1); } // A28004: using guessed type void *NiMilesListener::`vftable'; //----- (008902F0) -------------------------------------------------------- _DWORD *__thiscall sub_8902F0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // [esp+0h] [ebp-4h] v2 = this; result = this; if ( this[50] ) { AIL_close_3D_listener(this[50]); result = v2; v2[50] = 0; } return result; } // 9A55BC: using guessed type int __stdcall AIL_close_3D_listener(_DWORD); //----- (00890340) -------------------------------------------------------- int __thiscall sub_890340(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // [esp+0h] [ebp-Ch] v3 = this; if ( *(_BYTE *)(a2 + 8) || (result = (unsigned __int8)sub_892FA0((_DWORD *)a2), (_BYTE)result) ) { result = AIL_open_3D_listener(*(_DWORD *)(a2 + 4)); v3[50] = result; } else { v3[50] = 0; } return result; } // 9A55B8: using guessed type int __stdcall AIL_open_3D_listener(_DWORD); //----- (008903A0) -------------------------------------------------------- int __usercall sub_8903A0@(int a1@, double a2@) { int result; // eax int v3; // eax int v4; // [esp+20h] [ebp-3Ch] float v5; // [esp+24h] [ebp-38h] float v6; // [esp+28h] [ebp-34h] float v7; // [esp+2Ch] [ebp-30h] float v8; // [esp+30h] [ebp-2Ch] int v9; // [esp+34h] [ebp-28h] int v10; // [esp+38h] [ebp-24h] float v11; // [esp+3Ch] [ebp-20h] float v12; // [esp+40h] [ebp-1Ch] float v13; // [esp+44h] [ebp-18h] float v14; // [esp+48h] [ebp-14h] float v15; // [esp+4Ch] [ebp-10h] float v16; // [esp+50h] [ebp-Ch] float v17; // [esp+54h] [ebp-8h] float v18; // [esp+58h] [ebp-4h] v4 = a1; result = a1; if ( *(_DWORD *)(a1 + 200) ) { v9 = *(_DWORD *)(a1 + 140); v10 = *(_DWORD *)(a1 + 144); v11 = *(float *)(a1 + 148); sub_85DA90((float *)(a1 + 104), &v5, (float *)(a1 + 176)); sub_85DA90((float *)(v4 + 104), &v12, (float *)(v4 + 188)); (*(void (__thiscall **)(int, float *))(*(_DWORD *)v4 + 160))(v4, &v15); v3 = sub_88CE60(); (*(void (__thiscall **)(int, int))(*(_DWORD *)v3 + 108))(v3, v3); v8 = a2; v18 = v8 * 1000.0; v15 = v15 / v18; v16 = v16 / v18; v17 = -v17 / v18; v7 = v7 * -1.0; v14 = v14 * -1.0; v11 = v11 * -1.0; AIL_set_3D_position(*(_DWORD *)(v4 + 200), v9, v10, LODWORD(v11)); AIL_set_3D_orientation( *(_DWORD *)(v4 + 200), LODWORD(v5), LODWORD(v6), LODWORD(v7), LODWORD(v12), LODWORD(v13), LODWORD(v14)); result = AIL_set_3D_velocity_vector(*(_DWORD *)(v4 + 200), LODWORD(v15), LODWORD(v16), LODWORD(v17)); } return result; } // 9A56CC: using guessed type int __stdcall AIL_set_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // 9A56D0: using guessed type int __stdcall AIL_set_3D_velocity_vector(_DWORD, _DWORD, _DWORD, _DWORD); // 9A56D4: using guessed type int __stdcall AIL_set_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); //----- (00890510) -------------------------------------------------------- int __thiscall sub_890510(_DWORD *this, int a2) { int v3; // [esp+4h] [ebp-Ch] int v4; // [esp+8h] [ebp-8h] float v5; // [esp+Ch] [ebp-4h] if ( this[50] ) { AIL_3D_position(this[50], &v3, &v4, &v5); v5 = v5 * -1.0; *(_DWORD *)a2 = v3; *(_DWORD *)(a2 + 4) = v4; *(float *)(a2 + 8) = v5; } else { *(_DWORD *)a2 = dword_BA45C0; *(_DWORD *)(a2 + 4) = dword_BA45C4; *(_DWORD *)(a2 + 8) = dword_BA45C8; } return a2; } // 9A56F0: using guessed type int __stdcall AIL_3D_position(_DWORD, _DWORD, _DWORD, _DWORD); // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00890590) -------------------------------------------------------- float *__userpurge sub_890590@(int a1@, double a2@, float *a3) { int v4; // eax float v5; // [esp+8h] [ebp-14h] float v6; // [esp+Ch] [ebp-10h] float v7; // [esp+10h] [ebp-Ch] float v8; // [esp+14h] [ebp-8h] float v9; // [esp+18h] [ebp-4h] if ( *(_DWORD *)(a1 + 200) ) { AIL_3D_velocity(*(_DWORD *)(a1 + 200), &v5, &v6, &v7); v4 = sub_88CE60(); (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 108))(v4, v4); v8 = a2; v9 = v8 * 1000.0; v5 = v5 * v9; v6 = v6 * v9; v7 = -v9 * v7; *a3 = v5; a3[1] = v6; a3[2] = v7; } else { *(_DWORD *)a3 = dword_BA45C0; *((_DWORD *)a3 + 1) = dword_BA45C4; *((_DWORD *)a3 + 2) = dword_BA45C8; } return a3; } // 9A56F8: using guessed type int __stdcall AIL_3D_velocity(_DWORD, _DWORD, _DWORD, _DWORD); // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00890640) -------------------------------------------------------- _DWORD *__thiscall sub_890640(_DWORD *this, int a2, int a3) { _DWORD *result; // eax result = this; if ( this[50] ) { AIL_3D_orientation(this[50], a2, a2 + 4, a2 + 8, a3, a3 + 4, a3 + 8); *(float *)(a2 + 8) = *(float *)(a2 + 8) * -1.0; result = (_DWORD *)a3; *(float *)(a3 + 8) = *(float *)(a3 + 8) * -1.0; } return result; } // 9A56F4: using guessed type int __stdcall AIL_3D_orientation(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (008906E0) -------------------------------------------------------- int __thiscall sub_8906E0(int *this, signed int a2) { int *v2; // ST04_4 v2 = this; sub_85CDA0(this, a2); sub_8608D0((char *)v2 + 176, a2); return sub_8608D0((char *)v2 + 188, a2); } //----- (00890720) -------------------------------------------------------- _DWORD *__thiscall sub_890720(_DWORD *this, _DWORD *a2) { return sub_85C770(this, a2); } //----- (00890740) -------------------------------------------------------- bool __thiscall sub_890740(_DWORD *this, int a2) { int v3; // ST04_4 if ( !sub_85C230(this, a2) ) return 0; v3 = sub_88CE60(); return (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v3 + 20))(v3, a2) != 0; } //----- (00890790) -------------------------------------------------------- int __thiscall sub_890790(const char **this, signed int a2) { const char **v2; // ST04_4 v2 = this; sub_85D030(this, a2); sub_860940((char *)v2 + 176, a2); return sub_860940((char *)v2 + 188, a2); } //----- (008907D0) -------------------------------------------------------- bool __thiscall sub_8907D0(float *this, int a2) { float *v3; // [esp+0h] [ebp-8h] v3 = this; if ( !sub_85C8D0(this, a2) ) return 0; if ( (unsigned __int8)sub_85ECE0(v3 + 44, (float *)(a2 + 176)) ) return 0; return (unsigned __int8)sub_85ECE0(v3 + 47, (float *)(a2 + 188)) == 0; } //----- (00890850) -------------------------------------------------------- int __thiscall sub_890850(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int result; // eax v2 = this + 44; *v2 = *a2; v2[1] = a2[1]; result = a2[2]; v2[2] = result; return result; } //----- (00890880) -------------------------------------------------------- int __thiscall sub_890880(char *this) { return (int)(this + 176); } //----- (008908A0) -------------------------------------------------------- int __thiscall sub_8908A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int result; // eax v2 = this + 47; *v2 = *a2; v2[1] = a2[1]; result = a2[2]; v2[2] = result; return result; } //----- (008908D0) -------------------------------------------------------- int __thiscall sub_8908D0(char *this) { return (int)(this + 188); } //----- (008908F0) -------------------------------------------------------- void *__thiscall sub_8908F0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8902C0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00890920) -------------------------------------------------------- void *sub_890920() { return &unk_BA4BD8; } //----- (00890930) -------------------------------------------------------- _DWORD *__thiscall sub_890930(_DWORD *this, _DWORD *a2) { *a2 = this[51]; a2[1] = this[52]; a2[2] = this[53]; return a2; } //----- (00890960) -------------------------------------------------------- _DWORD *__thiscall sub_890960(_DWORD *this, int a2) { _DWORD *v2; // ST08_4 int v3; // ST04_4 v2 = this; sub_85C9A0(this); *v2 = &NiAudioSource::`vftable'; *((_WORD *)v2 + 88) = 0; sub_890A40(v2); v2[47] = a2; v3 = sub_88CE60(); (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v3 + 124))(v3, v2); return v2; } // A280AC: using guessed type void *NiAudioSource::`vftable'; //----- (008909C0) -------------------------------------------------------- LONG __thiscall sub_8909C0(_DWORD *this) { _DWORD *v1; // ST08_4 int v2; // eax v1 = this; *this = &NiAudioSource::`vftable'; unknown_libname_31(this); operator delete((void *)v1[45]); operator delete((void *)v1[46]); v2 = sub_88CE60(); (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v2 + 128))(v2, v1); return sub_85C320(v1); } // 891110: using guessed type int __thiscall unknown_libname_31(_DWORD); // A280AC: using guessed type void *NiAudioSource::`vftable'; //----- (00890A40) -------------------------------------------------------- _DWORD *__thiscall sub_890A40(_DWORD *this) { _DWORD *v1; // ST04_4 float v2; // ST08_4 float v3; // ST0C_4 float v4; // ST10_4 float *v5; // ecx _DWORD *v6; // eax _DWORD *v7; // edx _DWORD *result; // eax v1 = this; this[47] = 0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*this + 128))(this, 0); v1[45] = 0; v1[46] = 0; v1[48] = 1; *((float *)v1 + 49) = 0.0; *((float *)v1 + 50) = 0.0; *((float *)v1 + 51) = 0.0; v2 = -*(float *)&dword_ABD48C; v3 = -*(float *)&dword_ABD490; v4 = -*(float *)&dword_ABD494; v5 = (float *)(v1 + 52); *v5 = v2; v5[1] = v3; v5[2] = v4; v6 = v1 + 55; *v6 = dword_ABD498; v6[1] = dword_ABD49C; v6[2] = dword_ABD4A0; v7 = v1 + 71; *v7 = dword_BA45C0; v7[1] = dword_BA45C4; v7[2] = dword_BA45C8; *((float *)v1 + 58) = 0.0; *((float *)v1 + 59) = 0.0; *((float *)v1 + 60) = 0.0; v1[61] = 0; *((float *)v1 + 62) = 0.0; v1[63] = 0; *((float *)v1 + 64) = 0.0; *((float *)v1 + 65) = 0.0; *((float *)v1 + 66) = 0.0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 120))(v1, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 296))(v1, 0); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v1 + 308))(v1, 0); *((float *)v1 + 67) = 0.0; *((float *)v1 + 68) = 0.0; result = v1; *((float *)v1 + 69) = -1.0; *((float *)v1 + 70) = 0.0; return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00890C10) -------------------------------------------------------- errno_t __thiscall sub_890C10(void **this, char *Src) { errno_t result; // eax bool v3; // cf int v4; // [esp+24h] [ebp-54Ch] unsigned __int8 v5; // [esp+2Ah] [ebp-546h] _BYTE *v6; // [esp+2Ch] [ebp-544h] char *v7; // [esp+30h] [ebp-540h] void **v8; // [esp+34h] [ebp-53Ch] char v9[264]; // [esp+58h] [ebp-518h] char v10[264]; // [esp+59h] [ebp-517h] char Dir; // [esp+160h] [ebp-410h] char v12; // [esp+260h] [ebp-310h] char v13; // [esp+463h] [ebp-10Dh] rsize_t SizeInBytes; // [esp+56Ch] [ebp-4h] v8 = this; if ( !this[45] ) goto LABEL_11; v7 = Src; v6 = this[45]; while ( 1 ) { result = (errno_t)v7; v3 = *v6 < (unsigned __int8)*v7; if ( *v6 != *v7 ) break; if ( !*v6 ) goto LABEL_7; v5 = v6[1]; result = (errno_t)v7; v3 = v5 < (unsigned __int8)v7[1]; if ( v5 != v7[1] ) break; v6 += 2; v7 += 2; if ( !v5 ) { LABEL_7: v4 = 0; goto LABEL_9; } } v4 = -v3 - (v3 - 1); LABEL_9: if ( v4 ) { (*((void (__thiscall **)(void **))*this + 38))(this); LABEL_11: (*((void (__thiscall **)(void **, _DWORD))*v8 + 74))(v8, 0); operator delete(v8[45]); operator delete(v8[46]); v8[45] = 0; v8[46] = 0; SizeInBytes = strlen(Src) + 1; v8[45] = operator new(SizeInBytes); strcpy_s((char *)v8[45], SizeInBytes, Src); sub_8A9F60(&Dir, (char *)v8[45]); strcpy_s(&Dir, 0x100u, &byte_9A8050); strcpy_s(&v12, 3u, &byte_9A8050); strcpy_s(&v13, 0x100u, &byte_9A8050); sub_8AA0C0(&Dir, v9, 260); SizeInBytes = &v9[strlen(v9) + 1] - v10 + 1; v8[46] = operator new(SizeInBytes); result = strcpy_s((char *)v8[46], SizeInBytes, v9); } return result; } // 890C10: using guessed type char var_518[264]; //----- (00890F60) -------------------------------------------------------- char __thiscall sub_890F60(_DWORD *this) { int v2; // [esp+0h] [ebp-28h] _DWORD *v3; // [esp+14h] [ebp-14h] int i; // [esp+18h] [ebp-10h] char v5; // [esp+1Ch] [ebp-Ch] _DWORD *v6; // [esp+20h] [ebp-8h] int v7; // [esp+24h] [ebp-4h] v3 = this; if ( !this[45] || (*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 300))(this) ) return 0; if ( !v3[45] && !v3[47] ) return 0; v6 = (_DWORD *)sub_88CE60(); v7 = 0; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 124))(v3) && !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 132))(v3) ) { for ( i = sub_88CB10(v6, (_DWORD **)&v5); i; i = sub_88CB80(v6, (_DWORD **)&v5) ) { if ( v3 != (_DWORD *)i ) { if ( *(_DWORD *)(i + 184) ) { v2 = strcmp((const char *)v3[46], *(const char **)(i + 184)); if ( !v2 ) { v7 = i; break; } } } } if ( v7 ) { if ( (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v7 + 132))(v7, v2) ) v7 = 0; } } return 1; } //----- (008910D0) -------------------------------------------------------- char __thiscall sub_8910D0(void *this) { void *v2; // [esp+0h] [ebp-4h] v2 = this; if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 300))(this) ) return 0; (*(void (__thiscall **)(void *))(*(_DWORD *)v2 + 304))(v2); return 1; } //----- (00891120) -------------------------------------------------------- char __userpurge sub_891120@(float *a1@, double a2@, float a3, float a4, float a5) { float *v5; // ST00_4 v5 = a1; (*(void (__thiscall **)(float *))(*(_DWORD *)a1 + 192))(a1); v5[67] = a2; v5[68] = a3; v5[69] = a4; v5[70] = a5; return 1; } //----- (00891170) -------------------------------------------------------- void __thiscall sub_891170(float *this, float a2) { float v2; // ST0C_4 float v3; // ST04_4 float *v4; // [esp+8h] [ebp-8h] v4 = this; if ( -1.0 != this[69] && this[69] <= (double)a2 ) { if ( a2 > this[69] + this[70] ) { (*(void (__thiscall **)(float *, float))(*(_DWORD *)this + 188))(this, this[68]); v4[69] = -1.0; v4[70] = 0.0; } else { v2 = (a2 - this[69]) / this[70]; v3 = (this[68] - this[67]) * v2 + this[67]; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)this + 188))(this, LODWORD(v3)); } } } //----- (00891260) -------------------------------------------------------- char __thiscall sub_891260(float *this, float a2, float a3, float a4) { this[49] = a2; this[50] = a3; this[51] = a4; (*(void (__thiscall **)(float *, signed int))(*(_DWORD *)this + 308))(this, 1); return 1; } //----- (008912B0) -------------------------------------------------------- float *__thiscall sub_8912B0(float *this, float *a2, float *a3, float *a4) { float *result; // eax *a2 = this[49]; result = this; *a3 = this[49]; *a4 = this[51]; return result; } //----- (008912F0) -------------------------------------------------------- char __thiscall sub_8912F0(float *this, float a2, float a3) { this[58] = a2; this[59] = a3; return 1; } //----- (00891320) -------------------------------------------------------- float *__thiscall sub_891320(float *this, float *a2, float *a3) { float *result; // eax *a2 = this[58]; result = this; *a3 = this[59]; return result; } //----- (00891350) -------------------------------------------------------- char __thiscall sub_891350(float *this, float a2) { this[60] = a2; return 1; } //----- (00891370) -------------------------------------------------------- double __thiscall sub_891370(float *this) { return this[60]; } //----- (00891390) -------------------------------------------------------- char __thiscall sub_891390(_DWORD *this, int a2) { this[61] = a2; return 1; } //----- (008913B0) -------------------------------------------------------- int __thiscall sub_8913B0(_DWORD *this) { return this[61]; } //----- (008913D0) -------------------------------------------------------- char __thiscall sub_8913D0(float *this, float a2) { this[62] = a2; return 1; } //----- (008913F0) -------------------------------------------------------- double __thiscall sub_8913F0(float *this) { return this[62]; } //----- (00891410) -------------------------------------------------------- char __thiscall sub_891410(_DWORD *this, int a2) { this[63] = a2; return 1; } //----- (00891430) -------------------------------------------------------- int __thiscall sub_891430(_DWORD *this) { return this[63]; } //----- (00891450) -------------------------------------------------------- char __thiscall sub_891450(float *this, float a2) { this[64] = a2; return 1; } //----- (00891470) -------------------------------------------------------- double __thiscall sub_891470(float *this) { return this[64]; } //----- (00891490) -------------------------------------------------------- char __thiscall sub_891490(float *this, float a2) { this[65] = a2; return 1; } //----- (008914B0) -------------------------------------------------------- double __thiscall sub_8914B0(float *this) { return this[65]; } //----- (008914D0) -------------------------------------------------------- char __thiscall sub_8914D0(float *this, float a2) { this[66] = a2; return 1; } //----- (008914F0) -------------------------------------------------------- double __thiscall sub_8914F0(float *this) { return this[66]; } //----- (00891510) -------------------------------------------------------- int __thiscall sub_891510(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int result; // eax v2 = this + 71; *v2 = *a2; v2[1] = a2[1]; result = a2[2]; v2[2] = result; return result; } //----- (00891540) -------------------------------------------------------- _DWORD *__thiscall sub_891540(_DWORD *this, _DWORD *a2) { *a2 = this[71]; a2[1] = this[72]; a2[2] = this[73]; return a2; } //----- (00891570) -------------------------------------------------------- int __thiscall sub_891570(float *this, float *a2, _DWORD **a3) { unsigned __int8 v3; // al unsigned __int8 v4; // al unsigned __int8 v5; // al _DWORD *v6; // ecx _DWORD *v7; // edx double v8; // st7 float v9; // ST38_4 float *v11; // [esp+3Ch] [ebp-10h] float v12; // [esp+40h] [ebp-Ch] float v13; // [esp+44h] [ebp-8h] float v14; // [esp+48h] [ebp-4h] v11 = this; sub_85CD30(this, (int)a2, a3); a2[47] = v11[47]; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)a2 + 136))(a2, *((_DWORD *)v11 + 45)); v3 = (*(int (__thiscall **)(float *))(*(_DWORD *)v11 + 132))(v11); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)a2 + 128))(a2, v3); v4 = (*(int (__thiscall **)(float *))(*(_DWORD *)v11 + 124))(v11); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)a2 + 120))(a2, v4); v5 = (*(int (__thiscall **)(float *))(*(_DWORD *)v11 + 300))(v11); (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)a2 + 296))(a2, v5); v6 = a2 + 52; *v6 = *((_DWORD *)v11 + 52); v6[1] = *((_DWORD *)v11 + 53); v6[2] = *((_DWORD *)v11 + 54); v7 = a2 + 55; *v7 = *((_DWORD *)v11 + 55); v7[1] = *((_DWORD *)v11 + 56); v7[2] = *((_DWORD *)v11 + 57); if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v11 + 312))(v11) ) { (*(void (__thiscall **)(float *, float *, float *, float *))(*(_DWORD *)v11 + 160))(v11, &v12, &v14, &v13); (*(void (__thiscall **)(float *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)a2 + 156))( a2, LODWORD(v12), LODWORD(v14), LODWORD(v13)); } (*(void (__thiscall **)(float *, float *, float *))(*(_DWORD *)v11 + 184))(v11, &v12, &v14); v8 = v12; (*(void (__thiscall **)(float *, _DWORD, _DWORD))(*(_DWORD *)a2 + 180))(a2, LODWORD(v12), LODWORD(v14)); (*(void (__thiscall **)(float *))(*(_DWORD *)v11 + 192))(v11); v9 = v8; (*(void (__thiscall **)(float *, _DWORD))(*(_DWORD *)a2 + 188))(a2, LODWORD(v9)); a2[48] = v11[48]; a2[61] = v11[61]; a2[62] = v11[62]; a2[63] = v11[63]; a2[64] = v11[64]; a2[65] = v11[65]; a2[66] = v11[66]; a2[67] = v11[67]; a2[68] = v11[68]; a2[69] = v11[69]; a2[70] = v11[70]; return (*(int (__thiscall **)(float *, _DWORD *))(*(_DWORD *)a2 + 288))(a2, (_DWORD *)v11 + 71); } //----- (00891800) -------------------------------------------------------- int sub_891800() { return 0; } //----- (00891810) -------------------------------------------------------- int __thiscall sub_891810(int *this, signed int a2) { char *v3; // [esp+24h] [ebp-24h] float v4; // [esp+34h] [ebp-14h] unsigned __int8 v5; // [esp+3Bh] [ebp-Dh] float v6; // [esp+3Ch] [ebp-Ch] void *v7; // [esp+40h] [ebp-8h] float v8; // [esp+44h] [ebp-4h] v3 = (char *)this; sub_85CDA0(this, a2); if ( *(_DWORD *)(a2 + 28) >= 0xA000102u ) { sub_80C710(a2, (int)(v3 + 176)); } else { *((_WORD *)v3 + 88) = *(_WORD *)(a2 + 412); *((_WORD *)v3 + 88) >>= 6; *((_WORD *)v3 + 88) &= 0x3FFu; } sub_810B10(a2, (int)(v3 + 188)); v7 = 0; sub_8769C0((_DWORD *)a2, &v7); (*(void (__thiscall **)(char *, void *))(*(_DWORD *)v3 + 136))(v3, v7); operator delete(v7); sub_8065C0(a2, (int)&v5); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 128))(v3, v5); sub_8065C0(a2, (int)&v5); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 120))(v3, v5); sub_8608D0(v3 + 208, a2); sub_8608D0(v3 + 220, a2); sub_810B10(a2, (int)&v4); sub_810B10(a2, (int)&v8); sub_810B10(a2, (int)&v6); if ( (*(unsigned __int8 (__thiscall **)(char *))(*(_DWORD *)v3 + 312))(v3) ) (*(void (__thiscall **)(char *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v3 + 156))( v3, LODWORD(v4), LODWORD(v8), LODWORD(v6)); sub_810B10(a2, (int)&v4); sub_810B10(a2, (int)&v8); (*(void (__thiscall **)(char *, _DWORD, _DWORD))(*(_DWORD *)v3 + 180))(v3, LODWORD(v4), LODWORD(v8)); sub_810B10(a2, (int)&v4); (*(void (__thiscall **)(char *, _DWORD))(*(_DWORD *)v3 + 188))(v3, LODWORD(v4)); sub_810B10(a2, (int)(v3 + 192)); sub_892990(a2, (int)(v3 + 244)); sub_810B10(a2, (int)(v3 + 248)); sub_810B10(a2, (int)(v3 + 252)); sub_810B10(a2, (int)(v3 + 256)); sub_810B10(a2, (int)(v3 + 260)); sub_810B10(a2, (int)(v3 + 264)); sub_810B10(a2, (int)(v3 + 268)); sub_810B10(a2, (int)(v3 + 272)); sub_810B10(a2, (int)(v3 + 276)); sub_810B10(a2, (int)(v3 + 280)); return sub_8929C0(a2, (int)(v3 + 284)); } //----- (00891B50) -------------------------------------------------------- _DWORD *__thiscall sub_891B50(_DWORD *this, _DWORD *a2) { return sub_85C770(this, a2); } //----- (00891B70) -------------------------------------------------------- char __thiscall sub_891B70(_DWORD *this, int a2) { return sub_85C230(this, a2); } //----- (00891B90) -------------------------------------------------------- int __userpurge sub_891B90@(const char **a1@, double a2@, _DWORD *a3) { char *v3; // ST0C_4 float v5; // [esp+4h] [ebp-14h] char v6; // [esp+Ah] [ebp-Eh] char v7; // [esp+Bh] [ebp-Dh] char v8; // [esp+Ch] [ebp-Ch] char v9; // [esp+10h] [ebp-8h] char v10; // [esp+14h] [ebp-4h] v3 = (char *)a1; sub_85D030(a1, (signed int)a3); sub_815880((signed int)a3, (int)(v3 + 176)); sub_817490((signed int)a3, (int)(v3 + 188)); sub_876A50(a3, *((const char **)v3 + 45)); v7 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 132))(v3); sub_8344E0((signed int)a3, (int)&v7); v6 = (*(int (__thiscall **)(char *))(*(_DWORD *)v3 + 124))(v3); sub_8344E0((signed int)a3, (int)&v6); sub_860940(v3 + 208, (signed int)a3); sub_860940(v3 + 220, (signed int)a3); (*(void (__thiscall **)(char *, char *, char *, char *))(*(_DWORD *)v3 + 160))(v3, &v8, &v10, &v9); sub_817490((signed int)a3, (int)&v8); sub_817490((signed int)a3, (int)&v10); sub_817490((signed int)a3, (int)&v9); (*(void (__thiscall **)(char *, char *, char *))(*(_DWORD *)v3 + 184))(v3, &v8, &v10); sub_817490((signed int)a3, (int)&v8); sub_817490((signed int)a3, (int)&v10); (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 192))(v3); v5 = a2; sub_817490((signed int)a3, (int)&v5); sub_817490((signed int)a3, (int)(v3 + 192)); sub_8929F0((int)a3, (int)(v3 + 244)); sub_817490((signed int)a3, (int)(v3 + 248)); sub_817490((signed int)a3, (int)(v3 + 252)); sub_817490((signed int)a3, (int)(v3 + 256)); sub_817490((signed int)a3, (int)(v3 + 260)); sub_817490((signed int)a3, (int)(v3 + 264)); sub_817490((signed int)a3, (int)(v3 + 268)); sub_817490((signed int)a3, (int)(v3 + 272)); sub_817490((signed int)a3, (int)(v3 + 276)); sub_817490((signed int)a3, (int)(v3 + 280)); return sub_892A20((int)a3, (int)(v3 + 284)); } //----- (00891E00) -------------------------------------------------------- bool __thiscall sub_891E00(float *this, int a2) { int v3; // esi int v4; // esi int v5; // esi int v6; // esi int v7; // esi float v8; // ST6C_4 float v9; // ST68_4 float v10; // ST64_4 float v11; // ST60_4 float v12; // ST5C_4 double v13; // st7 float v14; // ST58_4 float v15; // ST54_4 float v16; // ST50_4 float v17; // ST4C_4 float v18; // ST48_4 float v19; // ST44_4 float v20; // ST40_4 float v21; // ST3C_4 float v22; // ST38_4 float v23; // ST34_4 float *v24; // eax float v25; // ST30_4 int v26; // eax float v27; // ST2C_4 int v28; // eax float *v29; // [esp+84h] [ebp-44h] char v30; // [esp+88h] [ebp-40h] char v31; // [esp+94h] [ebp-34h] char v32; // [esp+A0h] [ebp-28h] float v33; // [esp+ACh] [ebp-1Ch] float v34; // [esp+B0h] [ebp-18h] const char **v35; // [esp+B4h] [ebp-14h] float v36; // [esp+B8h] [ebp-10h] float v37; // [esp+BCh] [ebp-Ch] float v38; // [esp+C0h] [ebp-8h] float v39; // [esp+C4h] [ebp-4h] v29 = this; if ( !sub_85C8D0(this, a2) ) return 0; v35 = (const char **)a2; if ( *((_DWORD *)v29 + 47) != *(_DWORD *)(a2 + 188) ) return 0; if ( strcmp(*((const char **)v29 + 45), v35[45]) ) return 0; v3 = (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v29 + 132))(v29); if ( v3 != (*((unsigned __int8 (__thiscall **)(const char **))*v35 + 33))(v35) ) return 0; v4 = (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v29 + 124))(v29); if ( v4 != (*((unsigned __int8 (__thiscall **)(const char **))*v35 + 31))(v35) ) return 0; v5 = (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v29 + 300))(v29); if ( v5 != (*((unsigned __int8 (__thiscall **)(const char **))*v35 + 75))(v35) ) return 0; if ( (unsigned __int8)sub_85ECE0(v29 + 52, (float *)v35 + 52) ) return 0; if ( (unsigned __int8)sub_85ECE0(v29 + 55, (float *)v35 + 55) ) return 0; v6 = (*(int (__thiscall **)(float *))(*(_DWORD *)v29 + 212))(v29); if ( v6 != (*((int (__thiscall **)(const char **))*v35 + 53))(v35) ) return 0; v7 = (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v29 + 312))(v29); if ( v7 != (*((unsigned __int8 (__thiscall **)(const char **))*v35 + 78))(v35) ) return 0; if ( (*(unsigned __int8 (__thiscall **)(float *))(*(_DWORD *)v29 + 312))(v29) ) { (*(void (__thiscall **)(float *, float *, float *, float *))(*(_DWORD *)v29 + 160))(v29, &v33, &v39, &v36); (*((void (__thiscall **)(const char **, float *, float *, float *))*v35 + 40))(v35, &v37, &v34, &v38); v8 = v33 * 0.001000000047497451; if ( !sub_892910(v33, v37, v8) ) return 0; v9 = v39 * 0.001000000047497451; if ( !sub_892910(v39, v34, v9) ) return 0; v10 = v36 * 0.001000000047497451; if ( !sub_892910(v36, v38, v10) ) return 0; } (*(void (__thiscall **)(float *, float *, float *))(*(_DWORD *)v29 + 184))(v29, &v33, &v39); (*((void (__thiscall **)(const char **, float *, float *))*v35 + 46))(v35, &v37, &v34); v11 = v33 * 0.001000000047497451; if ( !sub_892910(v33, v37, v11) ) return 0; v12 = v39 * 0.001000000047497451; v13 = v39; if ( !sub_892910(v39, v34, v12) ) return 0; (*(void (__thiscall **)(float *))(*(_DWORD *)v29 + 192))(v29); v14 = v13 * 0.001000000047497451; (*((void (__thiscall **)(const char **))*v35 + 48))(v35); (*(void (__thiscall **)(float *))(*(_DWORD *)v29 + 192))(v29); if ( !sub_892910(v14, v14, v14) ) return 0; if ( *((const char **)v29 + 48) != v35[48] ) return 0; if ( *((const char **)v29 + 61) != v35[61] ) return 0; v15 = v29[62] * 0.001000000047497451; if ( !sub_892910(v29[62], *((float *)v35 + 62), v15) ) return 0; if ( *((const char **)v29 + 63) != v35[63] ) return 0; v16 = v29[64] * 0.001000000047497451; if ( !sub_892910(v29[64], *((float *)v35 + 64), v16) ) return 0; v17 = v29[65] * 0.001000000047497451; if ( !sub_892910(v29[65], *((float *)v35 + 65), v17) ) return 0; v18 = v29[66] * 0.001000000047497451; if ( !sub_892910(v29[66], *((float *)v35 + 66), v18) ) return 0; v19 = v29[67] * 0.001000000047497451; if ( !sub_892910(v29[67], *((float *)v35 + 67), v19) ) return 0; v20 = v29[68] * 0.001000000047497451; if ( !sub_892910(v29[68], *((float *)v35 + 68), v20) ) return 0; v21 = v29[69] * 0.001000000047497451; if ( !sub_892910(v29[69], *((float *)v35 + 69), v21) ) return 0; v22 = v29[70] * 0.001000000047497451; if ( !sub_892910(v29[70], *((float *)v35 + 70), v22) ) return 0; v23 = v29[71] * 0.001000000047497451; v24 = (float *)(*((int (__thiscall **)(const char **, char *))*v35 + 73))(v35, &v32); if ( !sub_892910(v29[71], *v24, v23) ) return 0; v25 = v29[72] * 0.001000000047497451; v26 = (*((int (__thiscall **)(const char **, char *))*v35 + 73))(v35, &v31); if ( !sub_892910(v29[72], *(float *)(v26 + 4), v25) ) return 0; v27 = v29[73] * 0.001000000047497451; v28 = (*((int (__thiscall **)(const char **, char *))*v35 + 73))(v35, &v30); return sub_892910(v29[73], *(float *)(v28 + 8), v27) != 0; } //----- (008925D0) -------------------------------------------------------- int __thiscall sub_8925D0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int result; // eax v2 = this + 52; *v2 = *a2; v2[1] = a2[1]; result = a2[2]; v2[2] = result; return result; } //----- (00892600) -------------------------------------------------------- int __thiscall sub_892600(char *this) { return (int)(this + 208); } //----- (00892620) -------------------------------------------------------- int __thiscall sub_892620(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ecx int result; // eax v2 = this + 55; *v2 = *a2; v2[1] = a2[1]; result = a2[2]; v2[2] = result; return result; } //----- (00892650) -------------------------------------------------------- int __thiscall sub_892650(char *this) { return (int)(this + 220); } //----- (00892670) -------------------------------------------------------- _DWORD *__thiscall sub_892670(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[48] = a2; return result; } //----- (00892690) -------------------------------------------------------- int __thiscall sub_892690(_DWORD *this) { return this[48]; } //----- (008926B0) -------------------------------------------------------- int __fastcall sub_8926B0(int a1, int a2, char a3) { int result; // eax if ( a3 ) { result = a1; *(_WORD *)(a1 + 176) |= 2u; } else { result = *(_WORD *)(a1 + 176) & 0xFFFD; *(_WORD *)(a1 + 176) = result; } return result; } //----- (00892710) -------------------------------------------------------- BOOL __thiscall sub_892710(_WORD *this) { return (this[88] & 2) != 0; } //----- (00892740) -------------------------------------------------------- int __fastcall sub_892740(int a1, int a2, char a3) { int result; // eax if ( a3 ) { result = a1; *(_WORD *)(a1 + 176) |= 1u; } else { result = *(_WORD *)(a1 + 176) & 0xFFFE; *(_WORD *)(a1 + 176) = result; } return result; } //----- (008927A0) -------------------------------------------------------- BOOL __thiscall sub_8927A0(_WORD *this) { return (this[88] & 1) != 0; } //----- (008927D0) -------------------------------------------------------- int __fastcall sub_8927D0(int a1, int a2, char a3) { int result; // eax if ( a3 ) { result = a1; *(_WORD *)(a1 + 176) |= 4u; } else { result = *(_WORD *)(a1 + 176) & 0xFFFB; *(_WORD *)(a1 + 176) = result; } return result; } //----- (00892830) -------------------------------------------------------- BOOL __thiscall sub_892830(_WORD *this) { return (this[88] & 4) != 0; } //----- (00892860) -------------------------------------------------------- int __fastcall sub_892860(int a1, int a2, char a3) { int result; // eax if ( a3 ) { result = a1; *(_WORD *)(a1 + 176) |= 8u; } else { result = *(_WORD *)(a1 + 176) & 0xFFF7; *(_WORD *)(a1 + 176) = result; } return result; } //----- (008928C0) -------------------------------------------------------- BOOL __thiscall sub_8928C0(_WORD *this) { return (this[88] & 8) != 0; } //----- (008928F0) -------------------------------------------------------- int __thiscall sub_8928F0(_DWORD *this) { return this[47]; } //----- (00892910) -------------------------------------------------------- bool __stdcall sub_892910(float a1, float a2, float a3) { float v3; // ST0C_4 float v4; // ST08_4 float v5; // ST04_4 v3 = a1 - a2; v4 = fabs(v3); v5 = fabs(a3); return v5 >= (double)v4; } //----- (00892960) -------------------------------------------------------- void *__thiscall sub_892960(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8909C0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00892990) -------------------------------------------------------- int __cdecl sub_892990(int a1, int a2) { return sub_892A50(*(_DWORD *)(a1 + 352), a2, 1); } //----- (008929C0) -------------------------------------------------------- int __cdecl sub_8929C0(int a1, int a2) { return sub_892A90(*(_DWORD *)(a1 + 352), a2, 1); } //----- (008929F0) -------------------------------------------------------- int __cdecl sub_8929F0(int a1, int a2) { return sub_892AD0(*(_DWORD *)(a1 + 356), a2, 1); } //----- (00892A20) -------------------------------------------------------- int __cdecl sub_892A20(int a1, int a2) { return sub_892B10(*(_DWORD *)(a1 + 356), a2, 1); } //----- (00892A50) -------------------------------------------------------- int __cdecl sub_892A50(int a1, int a2, int a3) { int v4; // [esp+4h] [ebp-4h] v4 = 4; return (*(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 4))(a1, a2, 4 * a3, &v4, 1); } //----- (00892A90) -------------------------------------------------------- int __cdecl sub_892A90(int a1, int a2, int a3) { int v4; // [esp+4h] [ebp-4h] v4 = 12; return (*(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 4))(a1, a2, 12 * a3, &v4, 1); } //----- (00892AD0) -------------------------------------------------------- int __cdecl sub_892AD0(int a1, int a2, int a3) { int v4; // [esp+4h] [ebp-4h] v4 = 4; return (*(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 8))(a1, a2, 4 * a3, &v4, 1); } //----- (00892B10) -------------------------------------------------------- int __cdecl sub_892B10(int a1, int a2, int a3) { int v4; // [esp+4h] [ebp-4h] v4 = 12; return (*(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 8))(a1, a2, 12 * a3, &v4, 1); } //----- (00892B50) -------------------------------------------------------- void *sub_892B50() { return &unk_BA4BE0; } //----- (00892B60) -------------------------------------------------------- float *__thiscall sub_892B60(float *this) { float *v1; // ST14_4 float *v2; // ecx float *v3; // eax float *v4; // edx float *v5; // ecx char v7; // [esp+48h] [ebp-28h] v1 = this; sub_85C9A0(this); *(_DWORD *)v1 = &NiAudioListener::`vftable'; v2 = v1 + 44; *v2 = 1.0; v2[1] = 0.0; v2[2] = 0.0; v3 = v1 + 47; *v3 = 0.0; v3[1] = 1.0; v3[2] = 0.0; v4 = v1 + 22; *v4 = 0.0; v4[1] = 0.0; v4[2] = 0.0; sub_85D530((float *)&v7, 1.0, 1.0, 1.0); qmemcpy(v1 + 13, &v7, 0x24u); v5 = v1 + 51; *v5 = 0.0; v5[1] = 0.0; v5[2] = 0.0; v1[50] = 0.0; return v1; } // A281EC: using guessed type void *NiAudioListener::`vftable'; //----- (00892C70) -------------------------------------------------------- LONG __thiscall sub_892C70(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; *this = &NiAudioListener::`vftable'; unknown_libname_32(this); return sub_85C320(v1); } // 892CA0: using guessed type int __thiscall unknown_libname_32(_DWORD); // A281EC: using guessed type void *NiAudioListener::`vftable'; //----- (00892CD0) -------------------------------------------------------- int __thiscall sub_892CD0(int *this, signed int a2) { int *v2; // ST04_4 v2 = this; sub_85CDA0(this, a2); sub_8608D0((char *)v2 + 176, a2); return sub_8608D0((char *)v2 + 188, a2); } //----- (00892D10) -------------------------------------------------------- _DWORD *__thiscall sub_892D10(_DWORD *this, _DWORD *a2) { return sub_85C770(this, a2); } //----- (00892D30) -------------------------------------------------------- bool __thiscall sub_892D30(_DWORD *this, int a2) { int v3; // ST04_4 if ( !sub_85C230(this, a2) ) return 0; v3 = sub_88CE60(); return (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v3 + 20))(v3, a2) != 0; } //----- (00892D80) -------------------------------------------------------- int __thiscall sub_892D80(const char **this, signed int a2) { const char **v2; // ST04_4 v2 = this; sub_85D030(this, a2); sub_860940((char *)v2 + 176, a2); return sub_860940((char *)v2 + 188, a2); } //----- (00892DC0) -------------------------------------------------------- bool __thiscall sub_892DC0(float *this, int a2) { float *v3; // [esp+0h] [ebp-8h] v3 = this; if ( !sub_85C8D0(this, a2) ) return 0; if ( (unsigned __int8)sub_85ECE0(v3 + 44, (float *)(a2 + 176)) ) return 0; return (unsigned __int8)sub_85ECE0(v3 + 47, (float *)(a2 + 188)) == 0; } //----- (00892E40) -------------------------------------------------------- int __thiscall sub_892E40(char *this) { return (int)(this + 176); } //----- (00892E60) -------------------------------------------------------- int __thiscall sub_892E60(char *this) { return (int)(this + 188); } //----- (00892E80) -------------------------------------------------------- void *__thiscall sub_892E80(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_892C70(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00892EB0) -------------------------------------------------------- void *sub_892EB0() { return &unk_BA4BE8; } //----- (00892EC0) -------------------------------------------------------- _DWORD *__thiscall sub_892EC0(_DWORD *this, char *Src, int a3) { _DWORD *v3; // ST1C_4 unsigned int v4; // ST0C_4 v3 = this; v4 = strlen(Src); *this = operator new(v4 + 1); strcpy_s((char *)*v3, v4 + 1, Src); v3[1] = a3; *((_BYTE *)v3 + 8) = 0; return v3; } //----- (00892F50) -------------------------------------------------------- void __thiscall sub_892F50(int this) { int v1; // [esp+0h] [ebp-8h] v1 = this; if ( *(_BYTE *)(this + 8) ) { AIL_close_3D_provider(*(_DWORD *)(this + 4)); *(_DWORD *)(v1 + 4) = 0; } operator delete(*(void **)v1); } // 9A55C4: using guessed type int __stdcall AIL_close_3D_provider(_DWORD); //----- (00892FA0) -------------------------------------------------------- char __thiscall sub_892FA0(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-8h] v2 = this; if ( AIL_open_3D_provider(this[1]) ) return 0; AIL_set_3D_speaker_type(v2[1], 0); *((_BYTE *)v2 + 8) = 1; return 1; } // 9A55B4: using guessed type int __stdcall AIL_open_3D_provider(_DWORD); // 9A55EC: using guessed type int __stdcall AIL_set_3D_speaker_type(_DWORD, _DWORD); //----- (00892FF0) -------------------------------------------------------- char __thiscall sub_892FF0(int this) { int v2; // [esp+0h] [ebp-4h] v2 = this; if ( !*(_BYTE *)(this + 8) ) return 0; AIL_close_3D_provider(*(_DWORD *)(this + 4)); *(_DWORD *)(v2 + 4) = 0; return 1; } // 9A55C4: using guessed type int __stdcall AIL_close_3D_provider(_DWORD); //----- (00893060) -------------------------------------------------------- int sub_893060() { int result; // eax if ( !byte_BA4BF0 ) { byte_BA4BF0 = 1; sub_875C70((int)"NiMeshParticleSystem", (int)sub_8A78C0); sub_875C70((int)"NiMeshPSysData", (int)sub_8A6DF0); sub_875C70((int)"NiParticleSystem", (int)sub_8A69D0); sub_875C70((int)"NiPSysAirFieldAirFrictionCtlr", (int)sub_8A5A90); sub_875C70((int)"NiPSysAirFieldInheritVelocityCtlr", (int)sub_8A5940); sub_875C70((int)"NiPSysAirFieldModifier", (int)sub_8A47A0); sub_875C70((int)"NiPSysAirFieldSpreadCtlr", (int)sub_8A44F0); sub_875C70((int)"NiPSysAgeDeathModifier", (int)sub_8A40C0); sub_875C70((int)"NiPSysBombModifier", (int)sub_8A3600); sub_875C70((int)"NiPSysBoundUpdateModifier", (int)sub_8A2CC0); sub_875C70((int)"NiPSysBoxEmitter", (int)sub_8A2A80); sub_875C70((int)"NiPSysColliderManager", (int)sub_8A2800); sub_875C70((int)"NiPSysColorModifier", (int)sub_8A23F0); sub_875C70((int)"NiPSysCylinderEmitter", (int)sub_8A2030); sub_875C70((int)"NiPSysData", (int)sub_8A1540); sub_875C70((int)"NiPSysDragFieldModifier", (int)sub_8A0BA0); sub_875C70((int)"NiPSysDragModifier", (int)sub_8A0450); sub_875C70((int)"NiPSysEmitterCtlr", (int)sub_8939A0); sub_875C70((int)"NiPSysEmitterCtlrData", (int)sub_89FE90); sub_875C70((int)"NiPSysEmitterDeclinationCtlr", (int)sub_89FD80); sub_875C70((int)"NiPSysEmitterDeclinationVarCtlr", (int)sub_89FC90); sub_875C70((int)"NiPSysEmitterInitialRadiusCtlr", (int)sub_89FB80); sub_875C70((int)"NiPSysEmitterLifeSpanCtlr", (int)sub_89FA60); sub_875C70((int)"NiPSysEmitterPlanarAngleCtlr", (int)sub_89F8E0); sub_875C70((int)"NiPSysEmitterPlanarAngleVarCtlr", (int)sub_89F800); sub_875C70((int)"NiPSysEmitterSpeedCtlr", (int)sub_89F710); sub_875C70((int)"NiPSysFieldAttenuationCtlr", (int)sub_89F610); sub_875C70((int)"NiPSysFieldMagnitudeCtlr", (int)sub_89F4B0); sub_875C70((int)"NiPSysFieldMaxDistanceCtlr", (int)sub_89F3A0); sub_875C70((int)"NiPSysGravityModifier", (int)sub_89E100); sub_875C70((int)"NiPSysGravityFieldModifier", (int)sub_89DAA0); sub_875C70((int)"NiPSysGravityStrengthCtlr", (int)sub_89D860); sub_875C70((int)"NiPSysGrowFadeModifier", (int)sub_89D3D0); sub_875C70((int)"NiPSysInitialRotAngleCtlr", (int)sub_89D280); sub_875C70((int)"NiPSysInitialRotAngleVarCtlr", (int)sub_89D170); sub_875C70((int)"NiPSysInitialRotSpeedCtlr", (int)sub_89D070); sub_875C70((int)"NiPSysInitialRotSpeedVarCtlr", (int)sub_89CF80); sub_875C70((int)"NiPSysMeshEmitter", (int)sub_89C140); sub_875C70((int)"NiPSysMeshUpdateModifier", (int)sub_89A0E0); sub_875C70((int)"NiPSysModifierActiveCtlr", (int)sub_899B80); sub_875C70((int)"NiPSysPlanarCollider", (int)sub_8999A0); sub_875C70((int)"NiPSysPositionModifier", (int)sub_898BE0); sub_875C70((int)"NiPSysRadialFieldModifier", (int)sub_898510); sub_875C70((int)"NiPSysResetOnLoopCtlr", (int)sub_898330); sub_875C70((int)"NiPSysRotationModifier", (int)sub_897B10); sub_875C70((int)"NiPSysSpawnModifier", (int)sub_896AA0); sub_875C70((int)"NiPSysSphereEmitter", (int)sub_896960); sub_875C70((int)"NiPSysSphericalCollider", (int)sub_8965F0); sub_875C70((int)"NiPSysTurbulenceFieldModifier", (int)sub_8955D0); sub_875C70((int)"NiPSysUpdateCtlr", (int)sub_8953D0); result = sub_875C70((int)"NiPSysVortexFieldModifier", (int)sub_894930); } return result; } // 893060: using guessed type int sub_893060(); // 8999A0: using guessed type int sub_8999A0(); // 899B80: using guessed type int sub_899B80(); // 89F3A0: using guessed type int sub_89F3A0(); // 8A0450: using guessed type int sub_8A0450(); // 8A2030: using guessed type int sub_8A2030(); // 8A2800: using guessed type int sub_8A2800(); // 8A3600: using guessed type int sub_8A3600(); // BA4BF0: using guessed type char byte_BA4BF0; //----- (00893390) -------------------------------------------------------- char sub_893390() { char result; // al if ( byte_BA4BF0 ) { byte_BA4BF0 = 0; sub_875C90((int)"NiMeshParticleSystem"); sub_875C90((int)"NiMeshPSysData"); sub_875C90((int)"NiParticleSystem"); sub_875C90((int)"NiPSysAirFieldAirFrictionCtlr"); sub_875C90((int)"NiPSysAirFieldInheritVelocityCtlr"); sub_875C90((int)"NiPSysAirFieldModifier"); sub_875C90((int)"NiPSysAirFieldSpreadCtlr"); sub_875C90((int)"NiPSysAgeDeathModifier"); sub_875C90((int)"NiPSysBombModifier"); sub_875C90((int)"NiPSysBoundUpdateModifier"); sub_875C90((int)"NiPSysBoxEmitter"); sub_875C90((int)"NiPSysColliderManager"); sub_875C90((int)"NiPSysColorModifier"); sub_875C90((int)"NiPSysCylinderEmitter"); sub_875C90((int)"NiPSysData"); sub_875C90((int)"NiPSysDragFieldModifier"); sub_875C90((int)"NiPSysDragModifier"); sub_875C90((int)"NiPSysEmitterCtlr"); sub_875C90((int)"NiPSysEmitterCtlrData"); sub_875C90((int)"NiPSysEmitterDeclinationCtlr"); sub_875C90((int)"NiPSysEmitterDeclinationVarCtlr"); sub_875C90((int)"NiPSysEmitterInitialRadiusCtlr"); sub_875C90((int)"NiPSysEmitterLifeSpanCtlr"); sub_875C90((int)"NiPSysEmitterPlanarAngleCtlr"); sub_875C90((int)"NiPSysEmitterPlanarAngleVarCtlr"); sub_875C90((int)"NiPSysEmitterSpeedCtlr"); sub_875C90((int)"NiPSysFieldAttenuationCtlr"); sub_875C90((int)"NiPSysFieldMagnitudeCtlr"); sub_875C90((int)"NiPSysFieldMaxDistanceCtlr"); sub_875C90((int)"NiPSysGravityModifier"); sub_875C90((int)"NiPSysGravityFieldModifier"); sub_875C90((int)"NiPSysGravityStrengthCtlr"); sub_875C90((int)"NiPSysGrowFadeModifier"); sub_875C90((int)"NiPSysInitialRotAngleCtlr"); sub_875C90((int)"NiPSysInitialRotAngleVarCtlr"); sub_875C90((int)"NiPSysInitialRotSpeedCtlr"); sub_875C90((int)"NiPSysInitialRotSpeedVarCtlr"); sub_875C90((int)"NiPSysMeshEmitter"); sub_875C90((int)"NiPSysMeshUpdateModifier"); sub_875C90((int)"NiPSysModifierActiveCtlr"); sub_875C90((int)"NiPSysPlanarCollider"); sub_875C90((int)"NiPSysPositionModifier"); sub_875C90((int)"NiPSysRadialFieldModifier"); sub_875C90((int)"NiPSysResetOnLoopCtlr"); sub_875C90((int)"NiPSysRotationModifier"); sub_875C90((int)"NiPSysSpawnModifier"); sub_875C90((int)"NiPSysSphereEmitter"); sub_875C90((int)"NiPSysSphericalCollider"); sub_875C90((int)"NiPSysTurbulenceFieldModifier"); sub_875C90((int)"NiPSysUpdateCtlr"); result = sub_875C90((int)"NiPSysVortexFieldModifier"); } return result; } // BA4BF0: using guessed type char byte_BA4BF0; //----- (008935E0) -------------------------------------------------------- __int16 __thiscall sub_8935E0(int this) { *(float *)(this + 80) = -3.4028235e38; return sub_86BEB0(this); } //----- (008935F0) -------------------------------------------------------- char *__stdcall sub_8935F0(__int16 a1) { char *result; // eax if ( a1 ) result = (char *)(a1 != 1 ? 0 : (_DWORD)off_ABF8DC[0]); else result = off_ABF8D8[0]; return result; } // ABF8D8: using guessed type char *off_ABF8D8[3]; // ABF8DC: using guessed type char *off_ABF8DC[2]; //----- (00893620) -------------------------------------------------------- __int16 __stdcall sub_893620(const char *a1) { int v1; // eax v1 = sub_96C4B0(a1, off_ABF8D8[0]); if ( v1 ) { if ( sub_96C4B0(a1, off_ABF8DC[0]) ) LOWORD(v1) = -1; else LOWORD(v1) = 1; } return v1; } // ABF8D8: using guessed type char *off_ABF8D8[3]; // ABF8DC: using guessed type char *off_ABF8DC[2]; //----- (00893670) -------------------------------------------------------- float *__stdcall sub_893670(__int16 a1) { float *v1; // eax float *v3; // eax if ( a1 ) { if ( a1 == 1 ) { v3 = (float *)operator new(0x18u); if ( v3 ) return sub_82BAC0(v3, 0); } } else { v1 = (float *)operator new(0x18u); if ( v1 ) return sub_826240(v1, 0.0); } return 0; } //----- (008936E0) -------------------------------------------------------- float *__stdcall sub_8936E0(__int16 a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *v7; // eax if ( a1 ) { if ( a1 == 1 ) { v7 = (float *)operator new(0x34u); if ( v7 ) return sub_82DF70(v7, a2, a4, a5); } } else { v5 = (float *)operator new(0x34u); if ( v5 ) return sub_82D580(v5, a2, a4, a5); } return 0; } //----- (00893750) -------------------------------------------------------- void __thiscall sub_893750(float **this, float *a2) { float **v2; // esi float *v3; // edi unsigned int v4; // eax double v5; // st7 v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = (float *)operator new(4 * (_DWORD)a2); v4 = 0; if ( v2[2] ) { do { v5 = (*v2)[v4++]; v3[v4 - 1] = v5; } while ( v4 < (unsigned int)v2[2] ); } } else { v3 = 0; } operator delete(*v2); *v2 = v3; v2[1] = a2; } } //----- (008937C0) -------------------------------------------------------- double __thiscall sub_8937C0(int this, unsigned __int8 a2) { double result; // st7 if ( *(_BYTE *)(this + 14) != 1 || a2 != *(_BYTE *)(this + 15) ) result = *(float *)(*(_DWORD *)(this + 20) + 24 * a2 + 20); else result = *(float *)(this + 32); return result; } //----- (008937F0) -------------------------------------------------------- char *sub_8937F0() { return dword_BA4BF8; } //----- (00893800) -------------------------------------------------------- int __thiscall sub_893800(_DWORD *this, float a2, float a3) { _DWORD *v3; // esi int result; // eax int v5; // ecx v3 = this; result = sub_831150(this, a2, a3); v5 = v3[18]; if ( v5 ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v5 + 116))(LODWORD(a2), LODWORD(a3)); return result; } //----- (00893840) -------------------------------------------------------- void __thiscall sub_893840(int this) { int v1; // esi float *v2; // ebx float v3; // [esp+4h] [ebp-8h] float v4; // [esp+8h] [ebp-4h] v1 = this; if ( !((*(_BYTE *)(this + 8) >> 5) & 1) ) { v2 = (float *)(this + 24); (*(void (__stdcall **)(int, int))(**(_DWORD **)(this + 60) + 112))(this + 20, this + 24); (*(void (__stdcall **)(float *, float *))(**(_DWORD **)(v1 + 72) + 112))(&v4, &v3); if ( *(float *)(v1 + 20) > (double)v4 ) *(float *)(v1 + 20) = v4; if ( *v2 < (double)v3 ) *v2 = v3; } } //----- (008938B0) -------------------------------------------------------- int __thiscall sub_8938B0(_DWORD *this, __int16 a2) { if ( !a2 ) return this[15]; if ( a2 == 1 ) return this[18]; return 0; } //----- (008938E0) -------------------------------------------------------- __int16 __thiscall sub_8938E0(_DWORD *this, int a2, __int16 a3) { LONG v3; // eax _DWORD *v4; // edi int v5; // esi int v6; // ebx int v7; // esi LOWORD(v3) = a3; v4 = this; if ( a3 ) { if ( a3 != 1 ) return v3; v7 = this[18]; v6 = a2; if ( v7 == a2 ) return v3; if ( v7 ) { v3 = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !v3 ) { if ( v7 ) LOWORD(v3) = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } } v4[18] = a2; } else { v5 = this[15]; v6 = a2; if ( v5 == a2 ) return v3; if ( v5 ) { v3 = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !v3 ) { if ( v5 ) LOWORD(v3) = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } v4[15] = a2; } if ( v6 ) LOWORD(v3) = InterlockedIncrement((volatile LONG *)(v6 + 4)); return v3; } //----- (00893970) -------------------------------------------------------- int __thiscall sub_893970(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_8A7AF0(this, a2); v4 = v2[18]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (008939A0) -------------------------------------------------------- float *sub_8939A0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x64u); v1 = v0; if ( !v0 ) return 0; sub_8A7A70(v0); *(_DWORD *)v1 = &NiPSysEmitterCtlr::`vftable'; v1[18] = 0.0; *((_BYTE *)v1 + 84) = 0; v1[20] = -3.4028235e38; v1[22] = 0.0; v1[23] = 0.0; v1[24] = 0.0; return v1; } // A287C4: using guessed type void *NiPSysEmitterCtlr::`vftable'; //----- (008939F0) -------------------------------------------------------- int __thiscall sub_8939F0(int *this, void **a2) { sub_8A7990(this, a2); return sub_876290(a2); } //----- (00893A10) -------------------------------------------------------- char __thiscall sub_893A10(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_831DF0(this, a2); if ( result ) { v4 = v2[18]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (00893A50) -------------------------------------------------------- int __thiscall sub_893A50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_832620(this, a2); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*a2 + 44))(a2, v2[18]); } //----- (00893A80) -------------------------------------------------------- char __thiscall sub_893A80(float *this, int a2) { float *v2; // esi char result; // al v2 = this; result = sub_8A79C0(this, a2); if ( result ) result = (*(unsigned __int8 (__stdcall **)(_DWORD))(**(_DWORD **)(a2 + 72) + 28))(*((_DWORD *)v2 + 18)) != 0; return result; } //----- (00893AC0) -------------------------------------------------------- void __thiscall sub_893AC0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // ebx _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi _DWORD *v8; // ebx v4 = this; if ( a4 ) { if ( !this[4] ) { v5 = operator new(0x18u); v6 = v5; if ( v5 ) { sub_85BA50(v5); *v6 = &NiBoolData::`vftable'; v6[2] = 0; v6[3] = 0; v6[4] = 0; *((_BYTE *)v6 + 20) = 0; } else { v6 = 0; } v7 = v4[4]; if ( (_DWORD *)v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[4] = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } } sub_82C040((_DWORD *)v4[4], a2, a4, a3); v4[5] = 0; } else { v8 = (_DWORD *)this[4]; if ( v8 ) sub_82C040(v8, 0, 0, 0); } } // A22B64: using guessed type void *NiBoolData::`vftable'; //----- (00893B80) -------------------------------------------------------- int __thiscall sub_893B80(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // eax char v4; // al int result; // eax int v6; // eax int v7; // esi unsigned __int8 v8; // al v1 = this; v2 = this[15]; if ( !v2 ) goto LABEL_17; v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[15]); if ( v3 ) { while ( (char *)v3 != dword_BA43B0 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v4 = 1; } else { LABEL_5: v4 = 0; } result = v4 != 0 ? v2 : 0; if ( !result ) { LABEL_17: v6 = sub_402BA0((int)dword_BA4468, v1[15]); v7 = v6; if ( v6 && (v8 = sub_82F7C0(v6), v8 != -1) ) { if ( *(_BYTE *)(v7 + 14) != 1 || v8 != *(_BYTE *)(v7 + 15) ) result = *(_DWORD *)(*(_DWORD *)(v7 + 20) + 24 * v8); else result = *(_DWORD *)(v7 + 24); } else { result = 0; } } return result; } //----- (00893C10) -------------------------------------------------------- int __thiscall sub_893C10(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // eax char v4; // al int result; // eax int v6; // eax int v7; // esi unsigned __int8 v8; // al v1 = this; v2 = this[18]; if ( !v2 ) goto LABEL_17; v3 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v2 + 4))(this[18]); if ( v3 ) { while ( (char *)v3 != dword_BA4440 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v4 = 1; } else { LABEL_5: v4 = 0; } result = v4 != 0 ? v2 : 0; if ( !result ) { LABEL_17: v6 = sub_402BA0((int)dword_BA4478, v1[18]); v7 = v6; if ( v6 && (v8 = sub_82F7C0(v6), v8 != -1) ) { if ( *(_BYTE *)(v7 + 14) != 1 || v8 != *(_BYTE *)(v7 + 15) ) result = *(_DWORD *)(*(_DWORD *)(v7 + 20) + 24 * v8); else result = *(_DWORD *)(v7 + 24); } else { result = 0; } } return result; } //----- (00893CA0) -------------------------------------------------------- _DWORD *__thiscall sub_893CA0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; operator delete(*((void **)this + 22)); v3 = v2[18]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8A7AA0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00893D00) -------------------------------------------------------- void __userpurge sub_893D00(int a1@, int a2@, float a3, float a4, float a5, float a6, float a7, float a8) { int v8; // edx double v9; // st6 double v10; // st5 double v11; // st4 double v12; // st3 double v13; // st7 unsigned __int16 v14; // di unsigned __int16 v15; // cx int v16; // ebx int v17; // esi int v18; // eax float *v19; // eax int v20; // [esp+Ch] [ebp-Ch] int v21; // [esp+14h] [ebp-4h] float v22; // [esp+24h] [ebp+Ch] float v23; // [esp+2Ch] [ebp+14h] float v24; // [esp+30h] [ebp+18h] float v25; // [esp+34h] [ebp+1Ch] int v26; // [esp+34h] [ebp+1Ch] v8 = a1; v9 = a8; v21 = a1; if ( a8 > 0.0 ) { v10 = a6; v11 = a7; if ( a7 > (double)a6 && a4 > v10 && a5 < v11 ) { v12 = a5; if ( a4 <= v11 ) v11 = a4; v23 = v11 - v10; v25 = 0.0; if ( v10 > v12 ) { v13 = v9; } else { v13 = v9; v25 = v12 - v10; } v20 = a2; *(_DWORD *)(a1 + 96) = 0; v14 = (signed int)(v25 * v13); v15 = (signed int)(v23 * v13) - v14; v16 = v15; if ( v15 > 0u ) { v17 = v8 + 88; v26 = v15; do { ++v14; v18 = *(_DWORD *)(v17 + 4); if ( *(_DWORD *)(v17 + 8) == v18 ) { if ( v18 ) v19 = (float *)(2 * v18); else v19 = (float *)1; sub_893750((float **)v17, v19); v8 = v21; } v24 = 1.0 / v13; v22 = v23 - v24 * (double)v14; *(float *)(*(_DWORD *)v17 + 4 * (*(_DWORD *)(v17 + 8))++) = v22; --v26; } while ( v26 ); } (*(void (__stdcall **)(_DWORD, int, _DWORD, int))(**(_DWORD **)(v8 + 68) + 76))( LODWORD(a3), v16, *(_DWORD *)(v8 + 88), v20); } } } // 893D00: could not find valid save-restore pair for ebx // 893D00: could not find valid save-restore pair for edi //----- (00893E90) -------------------------------------------------------- char __thiscall sub_893E90(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v4; // [esp+4h] [ebp-4h] v1 = this; if ( !(unsigned __int8)sub_8310B0(this) ) return 0; if ( !sub_8C4C90((_DWORD *)(v1[12] + 216), v1[16], &v4) ) return 0; if ( !v4 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)v4 + 4))(); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA4DA8 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00893EF0) -------------------------------------------------------- char __stdcall sub_893EF0(int a1, __int16 a2) { int v2; // eax int v3; // eax int v5; // eax int v6; // eax if ( a2 ) { if ( a2 == 1 && a1 ) { v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v5 ) { while ( (char *)v5 != dword_BA4440 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_16; } return 1; } LABEL_16: v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v6 ) { while ( (char *)v6 != dword_BA4478 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } return 1; } } } else if ( a1 ) { v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v2 ) { while ( (char *)v2 != dword_BA43B0 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) goto LABEL_6; } return 1; } LABEL_6: v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA4468 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return 1; } } return 0; } //----- (00893FA0) -------------------------------------------------------- int __thiscall sub_893FA0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax int v4; // esi int v5; // ecx int v6; // eax int v7; // edi int v8; // ebx v2 = this; v3 = (float *)operator new(0x64u); v4 = (int)v3; if ( v3 ) { sub_8A7A70(v3); *(_DWORD *)v4 = &NiPSysEmitterCtlr::`vftable'; *(_DWORD *)(v4 + 72) = 0; *(_BYTE *)(v4 + 84) = 0; *(float *)(v4 + 80) = -3.4028235e38; *(_DWORD *)(v4 + 88) = 0; *(_DWORD *)(v4 + 92) = 0; *(_DWORD *)(v4 + 96) = 0; } else { v4 = 0; } sub_832650(v2, v4, a2); v5 = v2[18]; if ( v5 ) { v6 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 8))(a2); v7 = *(_DWORD *)(v4 + 72); v8 = v6; if ( v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v4 + 72) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } } return v4; } // A287C4: using guessed type void *NiPSysEmitterCtlr::`vftable'; //----- (00894050) -------------------------------------------------------- int __thiscall sub_894050(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi float *v5; // eax float *v6; // eax int v7; // esi float *v8; // [esp+14h] [ebp+8h] float *v9; // [esp+14h] [ebp+8h] int v10; // [esp+14h] [ebp+8h] v2 = this; sub_831E50(this, a2); if ( a2[7] >= 0xA010068u ) { result = sub_875AD0(a2); v7 = v2[18]; v10 = result; if ( v7 != result ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v10; } v2[18] = result; if ( result ) result = InterlockedIncrement((volatile LONG *)(result + 4)); } } else { result = sub_875AD0(a2); v4 = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); v5 = (float *)operator new(0x18u); if ( v5 ) v8 = sub_8261F0(v5, 0); else v8 = 0; sub_820F90(v8, *(_DWORD *)(v4 + 12), *(_DWORD *)(v4 + 8), *(_DWORD *)(v4 + 16)); *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 16) = 0; *(_BYTE *)(v4 + 20) = 0; (*(void (__thiscall **)(_DWORD *, float *, _DWORD))(*v2 + 116))(v2, v8, 0); v6 = (float *)operator new(0x18u); if ( v6 ) v9 = sub_82BA70(v6, 0); else v9 = 0; sub_893AC0(v9, *(_DWORD *)(v4 + 28), *(_DWORD *)(v4 + 32), *(_DWORD *)(v4 + 24)); *(_DWORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = 0; *(_BYTE *)(v4 + 36) = 0; (*(void (__thiscall **)(_DWORD *, float *, signed int))(*v2 + 116))(v2, v9, 1); result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } return result; } //----- (00894190) -------------------------------------------------------- void __userpurge sub_894190(int a1@, int a2@, int a3@, int a4) { int v4; // esi double v5; // st7 bool v6; // c0 double v7; // st7 float v8; // ST4C_4 int v9; // eax int v10; // edi _DWORD *v11; // ebx double v12; // st7 int v13; // eax int v14; // edi _DWORD *v15; // edi int v16; // ecx double v17; // st7 float v18; // ST3C_4 int v19; // eax unsigned int v20; // ebx int v21; // ecx int v22; // ST48_4 float *v23; // ebx double v24; // st7 int v25; // ecx void (__thiscall *v26)(_DWORD *, int, int, int *); // edx int v27; // edx void (__thiscall *v28)(_DWORD *, int); // eax char v29; // dl char v30; // cl double v31; // st7 double v32; // st6 double v33; // st5 char v34; // dl unsigned int v35; // ecx int v36; // edx int v37; // esi int v38; // edx unsigned int v39; // eax _BYTE *v40; // edx int v41; // esi double v42; // st4 float *v43; // esi float *v44; // edx int v45; // edi double v46; // rt2 int v47; // eax double v48; // st6 int v49; // edx void (__stdcall *v50)(_DWORD, int, char *); // edx double v51; // rt0 double v52; // st6 double v53; // st7 double v54; // rt2 int v55; // eax double v56; // st6 int v57; // edx void (__stdcall *v58)(_DWORD, int, char *); // edx float v59; // ST3C_4 int v60; // [esp+48h] [ebp-50h] int v61; // [esp+4Ch] [ebp-4Ch] int v62; // [esp+54h] [ebp-44h] int v63; // [esp+58h] [ebp-40h] double v64; // [esp+5Ch] [ebp-3Ch] float v65; // [esp+64h] [ebp-34h] float v66; // [esp+68h] [ebp-30h] double v67; // [esp+6Ch] [ebp-2Ch] _DWORD *v68; // [esp+74h] [ebp-24h] float v69; // [esp+78h] [ebp-20h] int v70; // [esp+7Ch] [ebp-1Ch] char v71[4]; // [esp+80h] [ebp-18h] float v72; // [esp+84h] [ebp-14h] int v73; // [esp+88h] [ebp-10h] float v74; // [esp+8Ch] [ebp-Ch] float v75; // [esp+90h] [ebp-8h] unsigned __int8 v76; // [esp+97h] [ebp-1h] v4 = a1; v5 = *(float *)(a1 + 32); v73 = a1; v6 = *(float *)&a4 < v5; v7 = *(float *)&a4; if ( v6 ) *(float *)(a1 + 80) = -3.4028235e38; if ( *(_DWORD *)(a1 + 48) && *(_DWORD *)(a1 + 68) ) { if ( (*(_BYTE *)(a1 + 8) >> 5) & 1 ) *(float *)(a1 + 40) = -3.4028235e38; v8 = v7; if ( !sub_80FFE0((float *)a1, v8) ) { v9 = *(_DWORD *)(v4 + 72); if ( v9 ) { if ( *(_DWORD *)(v4 + 60) ) { v61 = a3; *(float *)&a4 = -3.4028235e38; if ( sub_402B70((int)dword_BA4478, v9) ) { v10 = *(_DWORD *)(v4 + 72); sub_830040(*(_DWORD *)(v4 + 72)); LOBYTE(v62) = sub_82F7C0(v10); if ( (_BYTE)v62 != -1 ) *(float *)&a4 = sub_8937C0(v10, v62); } v60 = a2; v11 = (_DWORD *)sub_893C10((_DWORD *)v4); *(float *)&v62 = -3.4028235e38; v66 = *(float *)&v11; v12 = *(float *)&a4; HIBYTE(a4) = 1; if ( *(float *)&v62 == v12 ) HIBYTE(a4) = 0; v13 = *(_DWORD *)(v4 + 60); *((float *)&v64 + 1) = *(float *)&v62; if ( sub_402B70((int)dword_BA4468, v13) ) { v14 = *(_DWORD *)(v4 + 60); sub_830040(*(_DWORD *)(v4 + 60)); LOBYTE(v62) = sub_82F7C0(v14); if ( (_BYTE)v62 != -1 ) *((float *)&v64 + 1) = sub_8937C0(v14, v62); } v15 = (_DWORD *)sub_893B80((_DWORD *)v4); v68 = v15; if ( v11 ) { if ( v15 ) { v75 = *(float *)(v4 + 40); if ( HIBYTE(a4) || -3.4028235e38 != *((float *)&v64 + 1) ) v75 = *((float *)&v64 + 1); if ( (*(_BYTE *)(v4 + 8) >> 5) & 1 && *(_DWORD **)(v4 + 76) != v15 ) { v16 = *(_DWORD *)(v4 + 48); v17 = v75; *(float *)(v4 + 80) = v75; v18 = v17; (*(void (__thiscall **)(_DWORD *, _DWORD, int, int))(*v11 + 80))(v11, LODWORD(v18), v16, v4 + 84); *(_DWORD *)(v4 + 76) = v15; return; } *(_DWORD *)(v4 + 76) = v15; v19 = sub_8264F0(v11, &a4, &v62, v71); v20 = a4; v70 = v19; if ( *(float *)&a4 != 0.0 || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)LODWORD(v66) + 160))(a4) ) { if ( (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)LODWORD(v66) + 160))(0) ) { (*(void (__stdcall **)(_DWORD, _DWORD, char *))(*(_DWORD *)LODWORD(v66) + 80))( 0.0, *(_DWORD *)(v4 + 48), (char *)&a4 + 3); if ( HIBYTE(a4) ) { v21 = *(_DWORD *)(v4 + 48); v74 = *(float *)(v4 + 80); v66 = *(float *)(v21 + 236); *(float *)(v4 + 80) = v75; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD, int, int))(*v15 + 160))(v15, 0, v60, v61) ) { *((float *)&v64 + 1) = v75 - v74; if ( v74 > (double)v75 ) { v74 = 0.0; *((float *)&v64 + 1) = v75; } v22 = *(_DWORD *)(v4 + 48); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD))(*v15 + 76))(v15, 0.0) ) { *(float *)&v62 = *((float *)&v64 + 1) + v66; sub_893D00(v4, (int)v15, *(float *)&v62, v75, v74, 0.0, v75, *(float *)&v70); } } else { v23 = (float *)sub_8264F0(v15, &v62, (_DWORD *)&v64 + 1, &v76); v65 = *v23; *((float *)&v64 + 1) = *(float *)((char *)v23 + v76 * (v62 - 1)); *((float *)&v67 + 1) = 0.0; v24 = v74; if ( v75 < (double)v74 ) { v25 = *(_DWORD *)(v4 + 48); v26 = *(void (__thiscall **)(_DWORD *, int, int, int *))(*v15 + 76); v67 = *((float *)&v64 + 1) - v24; *(float *)&v62 = v24 + v67 * 0.5; v26(v15, v62, v25, &v70); *((float *)&v67 + 1) = v67; *(float *)&v62 = *((float *)&v67 + 1) + v66; sub_893D00( v4, (int)v15, *(float *)&v62, *((float *)&v64 + 1), v74, v65, *((float *)&v64 + 1), *(float *)&v70); v74 = *v23; v24 = v74; } v27 = *(_DWORD *)(v4 + 48); v28 = *(void (__thiscall **)(_DWORD *, int))(*v15 + 76); v64 = v75 - v24; *(float *)&v62 = v24 + v64 * 0.5; v28(v15, v62); *(float *)&v62 = v66 + v64 + *((float *)&v67 + 1); sub_893D00(v4, (int)v15, *(float *)&v62, v75, v74, v65, v75, *(float *)&v70); } } return; } v63 = 0; v29 = sub_8062D0(v75, v70, v62, v20, (int)&v63, v71[0]); if ( -3.4028235e38 == *(float *)(v4 + 80) ) { *(float *)(v4 + 80) = v75; *(_BYTE *)(v4 + 84) = v29; return; } v30 = *(_BYTE *)(v4 + 84); *((float *)&v64 + 1) = *(float *)(v4 + 80); *(_BYTE *)(v4 + 84) = v29; v31 = v75; *(float *)(v4 + 80) = v75; v32 = 0.5; while ( 1 ) { v33 = *((float *)&v64 + 1); v34 = 0; HIBYTE(a4) = 0; if ( *((float *)&v64 + 1) > v31 ) { HIBYTE(a4) = 1; v34 = 1; } if ( v30 ) { v35 = v20; if ( v20 ) { v36 = v70 + (unsigned __int8)v71[0] * (v20 - 1); do { if ( *(float *)v36 <= v33 && !*(_BYTE *)(v36 + 4) ) break; v36 -= (unsigned __int8)v71[0]; --v35; } while ( v35 ); } } else { v35 = 0; if ( v20 ) { v37 = v70; do { if ( *(float *)v37 > v33 && (v34 || *(float *)v37 <= v31) && *(_BYTE *)(v37 + 4) ) break; ++v35; v37 += (unsigned __int8)v71[0]; } while ( v35 < v20 ); } if ( v35 == v20 ) { if ( !v34 ) return; v35 = 0; if ( v20 ) { v38 = v70; do { if ( *(float *)v38 < v31 && *(_BYTE *)(v38 + 4) ) break; ++v35; v38 += (unsigned __int8)v71[0]; } while ( v35 < v20 ); } if ( v35 == v20 ) return; } } v39 = v35; if ( v35 < v20 ) { v40 = (_BYTE *)(v35 * (unsigned __int8)v71[0] + v70 + 4); do { if ( !*v40 ) break; ++v39; v40 += (unsigned __int8)v71[0]; } while ( v39 < v20 ); } if ( v39 == v20 ) --v39; v41 = v39 * (unsigned __int8)v71[0]; v42 = *(float *)(v41 + v70); v43 = (float *)(v70 + v41); v44 = (float *)(v70 + v35 * (unsigned __int8)v71[0]); if ( HIBYTE(a4) ) break; if ( v42 >= v31 ) { v69 = v31; v66 = *((float *)&v64 + 1); v72 = *v44; v74 = *v43; LABEL_80: v59 = v31; (*(void (__stdcall **)(_DWORD, _DWORD, char *))(*v68 + 76))( LODWORD(v59), *(_DWORD *)(v73 + 48), (char *)&v67 + 4); goto LABEL_81; } v69 = *v43; v54 = v32; v66 = *((float *)&v64 + 1); v55 = *(_DWORD *)(v73 + 48); v56 = *v44; v57 = *v68; v72 = v56; v58 = *(void (__stdcall **)(_DWORD, int, char *))(v57 + 76); v74 = *v43; v65 = v54 * (v74 - v72) + v72; v58(LODWORD(v65), v55, (char *)&v67 + 4); LABEL_81: v45 = v73; LABEL_82: v65 = *(float *)(*(_DWORD *)(v45 + 48) + 236); if ( HIBYTE(a4) ) v65 = *(float *)(v45 + 24) - *(float *)(v45 + 20) + v65; *(float *)&a4 = v65 + v75 - *((float *)&v64 + 1); sub_893D00(v45, v45, *(float *)&a4, v69, v66, v72, v74, *((float *)&v67 + 1)); if ( v75 <= (double)*v43 ) return; *((float *)&v64 + 1) = v69; v30 = sub_8062D0(v69, v70, v62, v20, (int)&v63, v71[0]); v32 = 0.5; v31 = v75; } if ( v42 > v33 ) { v45 = v73; v69 = *(float *)((unsigned __int8)v71[0] * (v20 - 1) + v70); v46 = v32; v66 = *((float *)&v64 + 1); v47 = *(_DWORD *)(v73 + 48); v48 = *v44; v49 = *v68; v72 = v48; v50 = *(void (__stdcall **)(_DWORD, int, char *))(v49 + 76); v74 = *v43; v65 = v46 * (v74 - v72) + v72; v50(LODWORD(v65), v47, (char *)&v67 + 4); goto LABEL_82; } v51 = v32; v52 = v31; v53 = v51; v69 = v52; v66 = *(float *)v70; v72 = *v44; if ( *v43 < v52 ) v52 = *v43; v74 = v52; v65 = v53 * (v74 - v72) + v72; v31 = v65; goto LABEL_80; } } } } } } } } // 894190: could not find valid save-restore pair for ebx // 894190: could not find valid save-restore pair for edi //----- (008948D0) -------------------------------------------------------- unsigned int __thiscall sub_8948D0(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi unsigned int result; // eax int v7; // ecx v2 = a2; v3 = this; sub_8A7CA0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4BF8); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); result = sub_823870(v2, v5, &a2); v7 = *((_DWORD *)v3 + 18); if ( v7 ) result = (*(int (__stdcall **)(char *))(*(_DWORD *)v7 + 32))(v2); return result; } //----- (00894930) -------------------------------------------------------- float *sub_894930() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_8A8AA0(v0); *(_DWORD *)v1 = &NiPSysVortexFieldModifier::`vftable'; *((_DWORD *)v1 + 12) = dword_BA45C0; *((_DWORD *)v1 + 13) = dword_BA45C4; *((_DWORD *)v1 + 14) = dword_BA45C8; return v1; } // A2886C: using guessed type void *NiPSysVortexFieldModifier::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00894970) -------------------------------------------------------- int __thiscall sub_894970(int *this, signed int a2) { int *v2; // esi v2 = this; sub_8A8BB0(this, a2); return sub_8608D0((char *)v2 + 48, a2); } //----- (00894990) -------------------------------------------------------- char __thiscall sub_894990(_BYTE *this, char a2) { char result; // al result = a2; this[20] = a2; return result; } //----- (008949A0) -------------------------------------------------------- char *sub_8949A0() { return dword_BA4C00; } //----- (008949B0) -------------------------------------------------------- float *__stdcall sub_8949B0(float *a1, float *a2, float *a3, float *a4) { float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float *result; // eax float v8; // edx float v9; // ecx float v10; // [esp+Ch] [ebp-Ch] float v11; // [esp+10h] [ebp-8h] float v12; // [esp+14h] [ebp-4h] float v13; // [esp+2Ch] [ebp+14h] v10 = *a4 - *a2; v11 = a4[1] - a2[1]; v12 = a4[2] - a2[2]; v13 = *a3 * v10 + v11 * a3[1] + v12 * a3[2]; v4 = *a3 * v13; v5 = v13 * a3[1]; v6 = v13 * a3[2]; v10 = v10 - v4; v11 = v11 - v5; v12 = v12 - v6; if ( *(float *)&dword_BA45C0 != v10 || *(float *)&dword_BA45C4 != v11 || *(float *)&dword_BA45C8 != v12 ) { sub_443140(a3, a1, &v10); result = a1; } else { result = a1; v8 = v11; *a1 = v10; v9 = v12; a1[1] = v8; a1[2] = v9; } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00894AA0) -------------------------------------------------------- float *__thiscall sub_894AA0(float *this, char *Src) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x3Cu); v4 = v3; if ( v3 ) { sub_8A8AA0(v3); *(_DWORD *)v4 = &NiPSysVortexFieldModifier::`vftable'; *((_DWORD *)v4 + 12) = dword_BA45C0; *((_DWORD *)v4 + 13) = dword_BA45C4; *((_DWORD *)v4 + 14) = dword_BA45C8; } else { v4 = 0; } sub_8A8AD0(v2, (int)v4, Src); v4[12] = v2[12]; v4[13] = v2[13]; v4[14] = v2[14]; return v4; } // A2886C: using guessed type void *NiPSysVortexFieldModifier::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00894B10) -------------------------------------------------------- void __fastcall sub_894B10(int a1, int a2, float a3, int a4) { int v4; // esi int v5; // esi unsigned __int16 v6; // di float *v7; // esi int v8; // eax float v9; // edx int v10; // eax float v11; // ecx double v12; // st7 float v13; // edx char v14; // [esp+Ch] [ebp-120h] float v15; // [esp+18h] [ebp-114h] float v16; // [esp+1Ch] [ebp-110h] float v17; // [esp+20h] [ebp-10Ch] float i; // [esp+24h] [ebp-108h] float v19; // [esp+28h] [ebp-104h] float v20; // [esp+2Ch] [ebp-100h] float v21; // [esp+30h] [ebp-FCh] float v22; // [esp+34h] [ebp-F8h] float v23; // [esp+38h] [ebp-F4h] float v24; // [esp+3Ch] [ebp-F0h] float v25; // [esp+40h] [ebp-ECh] float v26; // [esp+44h] [ebp-E8h] float v27; // [esp+48h] [ebp-E4h] float v28; // [esp+4Ch] [ebp-E0h] int v29; // [esp+50h] [ebp-DCh] float v30; // [esp+54h] [ebp-D8h] char v31; // [esp+58h] [ebp-D4h] char v32; // [esp+8Ch] [ebp-A0h] char v33; // [esp+C0h] [ebp-6Ch] char v34; // [esp+F4h] [ebp-38h] float v35; // [esp+118h] [ebp-14h] float v36; // [esp+11Ch] [ebp-10h] float v37; // [esp+120h] [ebp-Ch] qmemcpy(&v32, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); v4 = *(_DWORD *)(a1 + 16); v29 = a1; qmemcpy(&v31, (const void *)(v4 + 104), 0x34u); sub_87C3F0((float *)&v31, a2, (float *)&v33); sub_85BDC0((float *)&v33, (float *)&v34, (float *)&v32); v5 = v29; v22 = v35; v23 = v36; v24 = v37; sub_85DA90((float *)&v34, (float *)&v14, (float *)(v29 + 48)); sub_4430B0((float *)&v14); v6 = 0; for ( i = *(float *)(v5 + 40) * *(float *)(v5 + 40); v6 < *(_WORD *)(a4 + 72); ++v6 ) { v7 = (float *)(*(_DWORD *)(a4 + 92) + 28 * v6); v25 = a3 - v7[5]; if ( 0.0 != v25 ) { v8 = *(_DWORD *)(a4 + 32); v9 = *(float *)(v8 + 12 * v6); v10 = v8 + 12 * v6; v11 = *(float *)(v10 + 4); v19 = v9; v12 = v9 - v22; v13 = *(float *)(v10 + 8); v20 = v11; v21 = v13; v15 = v12; v16 = v11 - v23; v17 = v13 - v24; v30 = v16 * v16 + v15 * v15 + v17 * v17; v30 = sqrt(v30); if ( 0.0 != v30 && i >= (double)v30 ) { sub_8949B0(&v26, &v22, (float *)&v14, &v19); v30 = *(float *)(v29 + 28) * v25; v26 = v26 * v30; v27 = v27 * v30; v28 = v30 * v28; *v7 = *v7 + v26; v7[1] = v7[1] + v27; v7[2] = v7[2] + v28; } } } } //----- (00894D90) -------------------------------------------------------- int __fastcall sub_894D90(int a1, int a2, float a3, int a4) { int v4; // ebx int v5; // edi int v6; // edx int result; // eax float *v8; // esi __int16 v9; // fps bool v10; // c0 char v11; // c2 bool v12; // c3 int v13; // eax int v14; // ecx int v15; // edx int v16; // eax int v17; // ecx int v18; // edx char v19; // [esp+Ch] [ebp-10Ch] int v20; // [esp+18h] [ebp-100h] int v21; // [esp+1Ch] [ebp-FCh] int v22; // [esp+20h] [ebp-F8h] int v23; // [esp+24h] [ebp-F4h] int v24; // [esp+28h] [ebp-F0h] int v25; // [esp+2Ch] [ebp-ECh] int v26; // [esp+30h] [ebp-E8h] float v27; // [esp+34h] [ebp-E4h] float v28; // [esp+38h] [ebp-E0h] float v29; // [esp+3Ch] [ebp-DCh] int v30; // [esp+40h] [ebp-D8h] char v31; // [esp+44h] [ebp-D4h] char v32; // [esp+78h] [ebp-A0h] char v33; // [esp+ACh] [ebp-6Ch] char v34; // [esp+E0h] [ebp-38h] int v35; // [esp+104h] [ebp-14h] int v36; // [esp+108h] [ebp-10h] int v37; // [esp+10Ch] [ebp-Ch] v4 = a1; qmemcpy(&v32, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); qmemcpy(&v31, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); v30 = a4; sub_87C3F0((float *)&v31, a2, (float *)&v33); sub_85BDC0((float *)&v33, (float *)&v34, (float *)&v32); v23 = v35; v24 = v36; v25 = v37; sub_85DA90((float *)&v34, (float *)&v19, (float *)(v4 + 48)); sub_4430B0((float *)&v19); v5 = v30; v6 = 0; result = 0; v26 = 0; if ( *(_WORD *)(v30 + 72) > 0u ) { do { result = 7 * (unsigned __int16)v6; v8 = (float *)(*(_DWORD *)(v5 + 92) + 28 * (unsigned __int16)v6); *(float *)&v30 = a3 - v8[5]; v10 = 0.0 < *(float *)&v30; v11 = 0; v12 = 0.0 == *(float *)&v30; LOWORD(result) = v9; if ( 0.0 != *(float *)&v30 ) { v13 = *(_DWORD *)(v5 + 32); v14 = 3 * (unsigned __int16)v6; v15 = *(_DWORD *)(v13 + 12 * (unsigned __int16)v6); v16 = v13 + 4 * v14; v17 = *(_DWORD *)(v16 + 4); v20 = v15; v18 = *(_DWORD *)(v16 + 8); v21 = v17; v22 = v18; result = (int)sub_8949B0(&v27, (float *)&v23, (float *)&v19, (float *)&v20); v6 = v26; *(float *)&v30 = *(float *)(v4 + 28) * *(float *)&v30; v27 = v27 * *(float *)&v30; v28 = v28 * *(float *)&v30; v29 = *(float *)&v30 * v29; *v8 = *v8 + v27; v8[1] = v8[1] + v28; v8[2] = v29 + v8[2]; } v26 = ++v6; } while ( (unsigned __int16)v6 < *(_WORD *)(v5 + 72) ); } return result; } //----- (00894F60) -------------------------------------------------------- bool __thiscall sub_894F60(float *this, float *a2) { float *v2; // esi v2 = this; return sub_8A8B10(this, (int)a2) && v2[12] == a2[12] && v2[13] == a2[13] && v2[14] == a2[14]; } //----- (00894FC0) -------------------------------------------------------- void __thiscall sub_894FC0(int this, float a2, int a3) { int v3; // ebx double v4; // st7 int v5; // ecx int v6; // esi int v7; // eax int v8; // ecx float *v9; // edi int v10; // eax int v11; // ecx float v12; // edx int v13; // eax float v14; // ecx double v15; // st7 float v16; // edx double v17; // st7 double v18; // st6 double v19; // st7 char v20; // [esp+Ch] [ebp-120h] float v21; // [esp+18h] [ebp-114h] float v22; // [esp+1Ch] [ebp-110h] float v23; // [esp+20h] [ebp-10Ch] float v24; // [esp+24h] [ebp-108h] float v25; // [esp+28h] [ebp-104h] float v26; // [esp+2Ch] [ebp-100h] float v27; // [esp+30h] [ebp-FCh] float v28; // [esp+34h] [ebp-F8h] float v29; // [esp+38h] [ebp-F4h] int v30; // [esp+3Ch] [ebp-F0h] double v31; // [esp+40h] [ebp-ECh] float v32; // [esp+48h] [ebp-E4h] float v33; // [esp+4Ch] [ebp-E0h] float v34; // [esp+50h] [ebp-DCh] int v35; // [esp+54h] [ebp-D8h] char v36; // [esp+58h] [ebp-D4h] char v37; // [esp+8Ch] [ebp-A0h] char v38; // [esp+C0h] [ebp-6Ch] char v39; // [esp+F4h] [ebp-38h] float v40; // [esp+118h] [ebp-14h] float v41; // [esp+11Ch] [ebp-10h] float v42; // [esp+120h] [ebp-Ch] v3 = this; v4 = *(float *)(this + 28); v35 = a3; if ( 0.0 != v4 && *(_WORD *)(a3 + 72) && (*(float *)&dword_BA45C0 != *(float *)(this + 48) || *(float *)&dword_BA45C4 != *(float *)(this + 52) || *(float *)&dword_BA45C8 != *(float *)(this + 56)) ) { v5 = *(_DWORD *)(this + 24); if ( v5 ) { if ( *(float *)(v3 + 32) == 0.0 ) { if ( *(_BYTE *)(v3 + 36) ) sub_894B10(v3, a3, a2, a3); else sub_894D90(v3, a3, a2, a3); } else { qmemcpy(&v36, (const void *)(v5 + 104), 0x34u); qmemcpy(&v37, (const void *)(*(_DWORD *)(v3 + 16) + 104), 0x34u); sub_87C3F0((float *)&v37, a3, (float *)&v38); sub_85BDC0((float *)&v38, (float *)&v39, (float *)&v36); v27 = v40; v28 = v41; v29 = v42; sub_85DA90((float *)&v39, (float *)&v20, (float *)(v3 + 48)); sub_4430B0((float *)&v20); v6 = v35; LOWORD(v7) = 0; v30 = 0; if ( *(_WORD *)(v35 + 72) > 0u ) { do { v8 = (unsigned __int16)v7; v9 = (float *)(*(_DWORD *)(v6 + 92) + 28 * (unsigned __int16)v7); *((float *)&v31 + 1) = a2 - v9[5]; if ( 0.0 != *((float *)&v31 + 1) ) { v10 = *(_DWORD *)(v6 + 32); v11 = 3 * v8; v12 = *(float *)(v10 + 4 * v11); v13 = v10 + 4 * v11; v14 = *(float *)(v13 + 4); v24 = v12; v15 = v12 - v27; v16 = *(float *)(v13 + 8); v25 = v14; v26 = v16; v21 = v15; v22 = v14 - v28; v23 = v16 - v29; *(float *)&v35 = v22 * v22 + v21 * v21 + v23 * v23; *(float *)&v35 = sqrt(*(float *)&v35); if ( 0.0 != *(float *)&v35 && (!*(_BYTE *)(v3 + 36) || *(float *)(v3 + 40) >= (double)*(float *)&v35) ) { sub_8949B0(&v32, &v27, (float *)&v20, &v24); v17 = *((float *)&v31 + 1) * *(float *)(v3 + 28); if ( 0.0 == *(float *)(v3 + 32) ) { *(float *)&v35 = v17; v18 = v32 * *(float *)&v35; v19 = *(float *)&v35; } else { v31 = v17; *(float *)&v35 = pow(*(float *)&v35, *(float *)(v3 + 32)); *(float *)&v35 = v17 / *(float *)&v35; v19 = *(float *)&v35; v18 = *(float *)&v35 * v32; } v32 = v18; v33 = v33 * v19; v34 = v19 * v34; *v9 = *v9 + v32; v9[1] = v9[1] + v33; v9[2] = v34 + v9[2]; } } v7 = v30 + 1; v30 = v7; } while ( (unsigned __int16)v7 < *(_WORD *)(v6 + 72) ); } } } } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00895350) -------------------------------------------------------- unsigned int __thiscall sub_895350(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C00); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_85F140(v3 + 12, (int)"Direction"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (008953D0) -------------------------------------------------------- float *sub_8953D0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_86C310(v0); v1[6] = 0.0; *(_DWORD *)v1 = &NiPSysUpdateCtlr::`vftable'; v1[5] = 0.0; return v1; } // A288CC: using guessed type void *NiPSysUpdateCtlr::`vftable'; //----- (00895400) -------------------------------------------------------- char *sub_895400() { return dword_BA4C08; } //----- (00895410) -------------------------------------------------------- int __thiscall sub_895410(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x3Cu); v4 = (int)v3; if ( v3 ) { sub_86C310(v3); *(float *)(v4 + 24) = 0.0; *(float *)(v4 + 20) = 0.0; *(_DWORD *)v4 = &NiPSysUpdateCtlr::`vftable'; sub_86C130(v2, v4, a2); result = v4; } else { sub_86C130(v2, 0, a2); result = 0; } return result; } // A288CC: using guessed type void *NiPSysUpdateCtlr::`vftable'; //----- (00895470) -------------------------------------------------------- char __thiscall sub_895470(int this, float a2) { int v2; // esi __int16 v3; // ax char result; // al int v5; // ecx v2 = this; v3 = *(_WORD *)(this + 8); *(float *)(this + 20) = -3.4028235e38; *(float *)(this + 24) = 3.4028235e38; *(_WORD *)(this + 8) = v3 & 0xFFFD | 4; result = sub_80FFE0((float *)this, a2); v5 = *(_DWORD *)(v2 + 48); *(float *)(v2 + 24) = 0.0; *(float *)(v2 + 20) = 0.0; if ( v5 ) { if ( !result ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 132))(*(float *)(v2 + 40)); } return result; } //----- (008954E0) -------------------------------------------------------- void __thiscall sub_8954E0(void *this, _DWORD *a2) { int v2; // esi int v3; // eax _DWORD *v4; // ecx _DWORD *i; // eax int v6; // edi v2 = (int)this; sub_86C4F0((int)this, a2); v3 = *(_DWORD *)(v2 + 48); if ( v3 ) { v4 = *(_DWORD **)(v3 + 12); for ( i = (_DWORD *)v4[13]; i; i = (_DWORD *)i[13] ) v4 = i; if ( v4 != (_DWORD *)v2 ) { sub_80C740(v4, v2); sub_599BC0(*(_DWORD **)(v2 + 48), *(_DWORD *)(v2 + 52)); v6 = *(_DWORD *)(v2 + 52); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } *(_DWORD *)(v2 + 52) = 0; } } } } //----- (00895550) -------------------------------------------------------- char __thiscall sub_895550(_DWORD *this) { int v1; // ecx int v2; // eax v1 = this[12]; if ( !v1 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)v1 + 4))(); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA4D88 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00895580) -------------------------------------------------------- unsigned int __thiscall sub_895580(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4C08); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008955D0) -------------------------------------------------------- float *sub_8955D0() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_8A8AA0(v0); v1[12] = 0.0; *(_DWORD *)v1 = &NiPSysTurbulenceFieldModifier::`vftable'; result = v1; v1[14] = -3.4028235e38; v1[13] = 10000.0; return result; } // A28934: using guessed type void *NiPSysTurbulenceFieldModifier::`vftable'; //----- (00895610) -------------------------------------------------------- bool __thiscall sub_895610(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A8B10(this, a2) && v2[12] == *(float *)(a2 + 48); } //----- (00895650) -------------------------------------------------------- char *sub_895650() { return dword_BA4C10; } //----- (00895660) -------------------------------------------------------- float *__thiscall sub_895660(float *this, int a2, int a3) { int v3; // ebx float *result; // eax unsigned __int16 v5; // di float *v6; // esi int v7; // eax float v8; // ST18_4 int v9; // eax float v10; // ST1C_4 double v11; // st7 float v12; // ST20_4 float v13; // ST0C_4 float v14; // ST10_4 float v15; // ST14_4 float *i; // [esp+20h] [ebp-4h] float v17; // [esp+30h] [ebp+Ch] v3 = a3; result = 0; v5 = 0; for ( i = this; v5 < *(_WORD *)(v3 + 72); v6[2] = v6[2] + v15 ) { v6 = (float *)(*(_DWORD *)(v3 + 92) + 28 * v5); v7 = rand(); v8 = ((double)v7 + (double)v7) / 32767.0 - 1.0; v9 = rand(); v10 = ((double)v9 + (double)v9) / 32767.0 - 1.0; v11 = (double)rand(); result = i; ++v5; v12 = (v11 + v11) / 32767.0 - 1.0; v17 = i[7]; v13 = v17 * v8; v14 = v17 * v10; v15 = v17 * v12; *v6 = *v6 + v13; v6[1] = v6[1] + v14; } return result; } //----- (00895740) -------------------------------------------------------- void __fastcall sub_895740(int a1, int a2, int a3, int a4) { int v4; // esi unsigned __int16 i; // di float *v6; // esi int v7; // ecx float v8; // edx float *v9; // eax float v10; // ecx float v11; // eax char v12; // [esp+Ch] [ebp-10Ch] float v13; // [esp+30h] [ebp-E8h] float v14; // [esp+34h] [ebp-E4h] float v15; // [esp+38h] [ebp-E0h] float v16; // [esp+40h] [ebp-D8h] float v17; // [esp+44h] [ebp-D4h] float v18; // [esp+48h] [ebp-D0h] float v19; // [esp+4Ch] [ebp-CCh] float v20; // [esp+50h] [ebp-C8h] float v21; // [esp+54h] [ebp-C4h] float v22; // [esp+58h] [ebp-C0h] float v23; // [esp+5Ch] [ebp-BCh] float v24; // [esp+60h] [ebp-B8h] float v25; // [esp+64h] [ebp-B4h] float v26; // [esp+68h] [ebp-B0h] float v27; // [esp+6Ch] [ebp-ACh] int v28; // [esp+70h] [ebp-A8h] signed int v29; // [esp+74h] [ebp-A4h] char v30; // [esp+78h] [ebp-A0h] char v31; // [esp+ACh] [ebp-6Ch] char v32; // [esp+E0h] [ebp-38h] qmemcpy(&v32, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); v4 = *(_DWORD *)(a1 + 16); v28 = a1; qmemcpy(&v31, (const void *)(v4 + 104), 0x34u); sub_87C3F0((float *)&v31, a2, (float *)&v30); sub_85BDC0((float *)&v30, (float *)&v12, (float *)&v32); for ( i = 0; i < *(_WORD *)(a4 + 72); ++i ) { v6 = (float *)(*(_DWORD *)(a4 + 92) + 28 * i); v7 = *(_DWORD *)(a4 + 32); v8 = *(float *)(v7 + 12 * i + 4); v9 = (float *)(v7 + 12 * i); v10 = *v9; v11 = v9[2]; v19 = v10; v20 = v8; v21 = v11; v22 = v10 - v13; v23 = v8 - v14; v24 = v11 - v15; *(float *)&v29 = v23 * v23 + v22 * v22 + v24 * v24; if ( *(float *)(v28 + 44) >= (double)*(float *)&v29 ) { *(float *)&v29 = COERCE_FLOAT(rand()); v25 = ((double)v29 + (double)v29) / 32767.0 - 1.0; *(float *)&v29 = COERCE_FLOAT(rand()); v26 = ((double)v29 + (double)v29) / 32767.0 - 1.0; *(float *)&v29 = COERCE_FLOAT(rand()); v27 = ((double)v29 + (double)v29) / 32767.0 - 1.0; v29 = *(signed int *)(v28 + 28); v16 = *(float *)&v29 * v25; v17 = *(float *)&v29 * v26; v18 = *(float *)&v29 * v27; *v6 = *v6 + v16; v6[1] = v6[1] + v17; v6[2] = v6[2] + v18; } } } //----- (00895960) -------------------------------------------------------- int __thiscall sub_895960(float *this, char *Src) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax float Srca; // [esp+10h] [ebp+8h] v2 = this; v3 = (float *)operator new(0x3Cu); v4 = (int)v3; if ( v3 ) { sub_8A8AA0(v3); *(float *)(v4 + 48) = 0.0; *(_DWORD *)v4 = &NiPSysTurbulenceFieldModifier::`vftable'; *(float *)(v4 + 56) = -3.4028235e38; *(float *)(v4 + 52) = 10000.0; } else { v4 = 0; } sub_8A8AD0(v2, v4, Src); Srca = v2[12]; *(float *)(v4 + 48) = Srca; result = v4; if ( Srca >= 0.00009999999747378752 ) *(float *)(v4 + 52) = 1.0 / Srca; else *(float *)(v4 + 52) = 10000.0; return result; } // A28934: using guessed type void *NiPSysTurbulenceFieldModifier::`vftable'; //----- (008959F0) -------------------------------------------------------- void __thiscall sub_8959F0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax void (__cdecl *v5)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A8BB0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v5(v4, v3 + 12, 4, &a2, 1); if ( *((float *)v3 + 12) >= 0.00009999999747378752 ) *((float *)v3 + 13) = 1.0 / *((float *)v3 + 12); else *((float *)v3 + 13) = 10000.0; } //----- (00895A50) -------------------------------------------------------- int __thiscall sub_895A50(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8A8C60(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 12, 4, &a2, 1); } //----- (00895A90) -------------------------------------------------------- void __thiscall sub_895A90(int this, float a2, int a3) { int v3; // ebx double v4; // st6 int v5; // ecx int v6; // edi float *v7; // esi int v8; // ecx float v9; // edx float *v10; // eax float v11; // ecx float v12; // eax char v13; // [esp+Ch] [ebp-104h] float v14; // [esp+30h] [ebp-E0h] float v15; // [esp+34h] [ebp-DCh] float v16; // [esp+38h] [ebp-D8h] float v17; // [esp+40h] [ebp-D0h] float v18; // [esp+44h] [ebp-CCh] float v19; // [esp+48h] [ebp-C8h] float v20; // [esp+4Ch] [ebp-C4h] float v21; // [esp+50h] [ebp-C0h] float v22; // [esp+54h] [ebp-BCh] int v23; // [esp+58h] [ebp-B8h] float v24; // [esp+5Ch] [ebp-B4h] float v25; // [esp+60h] [ebp-B0h] float v26; // [esp+64h] [ebp-ACh] float v27; // [esp+68h] [ebp-A8h] int v28; // [esp+6Ch] [ebp-A4h] char v29; // [esp+70h] [ebp-A0h] char v30; // [esp+A4h] [ebp-6Ch] char v31; // [esp+D8h] [ebp-38h] v3 = this; v4 = *(float *)(this + 56); v28 = a3; if ( v4 > a2 || *(float *)(this + 52) + *(float *)(this + 56) <= a2 ) { *(float *)(this + 56) = a2; if ( 0.0 != *(float *)(this + 28) ) { if ( *(_WORD *)(a3 + 72) ) { v5 = *(_DWORD *)(this + 24); if ( v5 ) { if ( *(float *)(v3 + 32) == 0.0 ) { if ( *(_BYTE *)(v3 + 36) ) sub_895740(v3, a3, SLODWORD(a2), a3); else sub_895660((float *)v3, SLODWORD(a2), a3); } else { qmemcpy(&v29, (const void *)(v5 + 104), 0x34u); qmemcpy(&v31, (const void *)(*(_DWORD *)(v3 + 16) + 104), 0x34u); sub_87C3F0((float *)&v31, a3, (float *)&v30); sub_85BDC0((float *)&v30, (float *)&v13, (float *)&v29); v6 = v28; v23 = 0; if ( *(_WORD *)(v28 + 72) > 0u ) { do { v7 = (float *)(*(_DWORD *)(v6 + 92) + 28 * (unsigned __int16)v23); v8 = *(_DWORD *)(v6 + 32); v9 = *(float *)(v8 + 12 * (unsigned __int16)v23 + 4); v10 = (float *)(v8 + 12 * (unsigned __int16)v23); v11 = *v10; v12 = v10[2]; v20 = v11; v21 = v9; v22 = v12; v17 = v11 - v14; v18 = v9 - v15; v19 = v12 - v16; *(float *)&v28 = v18 * v18 + v17 * v17 + v19 * v19; *(float *)&v28 = sqrt(*(float *)&v28); if ( !*(_BYTE *)(v3 + 36) || *(float *)(v3 + 40) >= (double)*(float *)&v28 ) { v27 = COERCE_FLOAT(rand()); v24 = ((double)SLODWORD(v27) + (double)SLODWORD(v27)) / 32767.0 - 1.0; v27 = COERCE_FLOAT(rand()); v25 = ((double)SLODWORD(v27) + (double)SLODWORD(v27)) / 32767.0 - 1.0; v27 = COERCE_FLOAT(rand()); v26 = ((double)SLODWORD(v27) + (double)SLODWORD(v27)) / 32767.0 - 1.0; v27 = *(float *)(v3 + 28) / (*(float *)(v3 + 32) * *(float *)&v28 + 1.0); v24 = v27 * v24; v25 = v27 * v25; v26 = v27 * v26; *v7 = *v7 + v24; v7[1] = v7[1] + v25; v7[2] = v26 + v7[2]; } ++v23; } while ( (unsigned __int16)v23 < *(_WORD *)(v6 + 72) ); } } } } } } } //----- (00895DA0) -------------------------------------------------------- unsigned int __thiscall sub_895DA0(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C10); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Frequency", v3[12]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00895E30) -------------------------------------------------------- int __thiscall sub_895E30(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8A9020(this, a2); result = sub_875AD0(a2); v2[11] = result; return result; } //----- (00895E50) -------------------------------------------------------- char __thiscall sub_895E50(_DWORD *this, int a2) { return sub_8A9090(this, a2); } //----- (00895E60) -------------------------------------------------------- char __thiscall sub_895E60(float *this, int a2) { float *v2; // esi int v4; // eax v2 = this; if ( !sub_8A90D0(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 11); if ( !v4 ) goto LABEL_14; if ( !*(_DWORD *)(a2 + 44) ) return 0; if ( !v4 ) { LABEL_14: if ( !*(_DWORD *)(a2 + 44) ) { if ( !v4 ) goto LABEL_10; goto LABEL_8; } return 0; } LABEL_8: if ( *(_DWORD *)(a2 + 44) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 11) + 28))(*(_DWORD *)(a2 + 44)) ) { return 0; } LABEL_10: if ( *(float *)(a2 + 48) != v2[12] ) return 0; return 1; } //----- (00895ED0) -------------------------------------------------------- int __fastcall sub_895ED0(float *a1, int a2, float a3, int a4, int a5, int a6) { float *v6; // esi float *v7; // edi float *v8; // ebx float v9; // ST34_4 double v10; // st4 char v11; // cl double v12; // st7 float v13; // ST34_4 float v14; // ST40_4 double v15; // st6 float v16; // ST34_4 double v17; // st5 double v18; // st6 float v19; // ST28_4 float v20; // ST2C_4 float v21; // ST30_4 float v22; // ST1C_4 float v23; // ST20_4 float v24; // ST24_4 float v25; // ST28_4 float v26; // ST2C_4 float v27; // ST30_4 float v28; // ST34_4 float v29; // ST34_4 double v30; // st7 float v31; // ST34_4 float v32; // ST34_4 int v33; // ecx float v34; // ST40_4 double v35; // st7 double v36; // st6 float v37; // ST1C_4 float v38; // ST20_4 double v39; // rtt double v40; // st6 float v41; // ST24_4 float v42; // ST28_4 float v43; // ST2C_4 double v44; // st6 float v45; // ST30_4 float v46; // ST00_4 int result; // eax float v48; // [esp+34h] [ebp-14h] float v49; // [esp+34h] [ebp-14h] float v50; // [esp+34h] [ebp-14h] float v51; // [esp+38h] [ebp-10h] float v52; // [esp+3Ch] [ebp-Ch] float v53; // [esp+40h] [ebp-8h] float v54; // [esp+40h] [ebp-8h] char v55; // [esp+47h] [ebp-1h] float v56; // [esp+50h] [ebp+8h] v6 = a1; v7 = (float *)(*(_DWORD *)(a5 + 32) + 12 * (unsigned __int16)a6); v8 = (float *)(*(_DWORD *)(a5 + 92) + 28 * (unsigned __int16)a6); v55 = 0; v51 = *v7 - a1[15]; v52 = v7[1] - a1[16]; v53 = v7[2] - a1[17]; v9 = v53 * v53 + v51 * v51 + v52 * v52; v48 = v9 - a1[14]; if ( -v48 <= 0.001 ) { v10 = a3; v11 = 0; if ( v48 <= 0.001 ) { v12 = a3; LABEL_16: v33 = a4; goto LABEL_17; } } else { v10 = a3; v11 = 1; } v12 = v10; v13 = v53 * v8[2] + v51 * *v8 + v52 * v8[1]; v14 = -v13; v15 = v14; if ( !v11 && v15 <= 0.0 ) goto LABEL_16; v16 = v8[2] * v8[2] + *v8 * *v8 + v8[1] * v8[1]; v17 = v15 / v16; v18 = v16; v54 = v17; v19 = v54 * *v8; v20 = v8[1] * v54; v21 = v8[2] * v54; v22 = *v7 + v19; v23 = v20 + v7[1]; v24 = v7[2] + v21; v25 = v22 - v6[15]; v26 = v23 - v6[16]; v27 = v24 - v6[17]; v49 = v26 * v26 + v25 * v25 + v27 * v27; if ( !v11 && v6[14] <= (double)v49 ) goto LABEL_16; v50 = v6[14] - v49; if ( v11 ) { v28 = v50 / v18; v29 = sqrt(v28); v30 = v29 + v54; } else { v31 = v50 / v18; v32 = sqrt(v31); v30 = v54 - v32; } v33 = a4; v34 = v30; v35 = v34; v36 = a3; if ( *(float *)a4 - a3 <= v34 ) { v12 = a3; } else { v55 = 1; v56 = v35 + v36; *(float *)a4 = v56; v6[8] = v56; v37 = v35 * *v8; v38 = v8[1] * v35; v39 = v36; v40 = v35 * v8[2]; v12 = v39; v41 = v40; v42 = *v7 + v37; v43 = v38 + v7[1]; v44 = v7[2]; v6[5] = v42; v6[6] = v43; v45 = v44 + v41; v6[7] = v45; } LABEL_17: v46 = v12; result = sub_8A8E80(v6, v46, v33, a5, a6); if ( !result ) result = v55 != 0 ? (unsigned int)v6 : 0; return result; } //----- (00896160) -------------------------------------------------------- _DWORD *__thiscall sub_896160(float *this, float a2, int a3, int a4) { int v4; // edx float v5; // ST20_4 float *v6; // eax float v7; // ST24_4 float v8; // ST28_4 float v9; // ST14_4 float v10; // ST18_4 float v11; // ST1C_4 float v12; // ST14_4 float v13; // ST18_4 float v14; // ST1C_4 float v15; // ST20_4 float v16; // ST24_4 float v17; // ST28_4 double v18; // st7 double v19; // st6 double v20; // st5 float v22; // [esp+3Ch] [ebp+10h] float v23; // [esp+3Ch] [ebp+10h] float v24; // [esp+3Ch] [ebp+10h] float v25; // [esp+3Ch] [ebp+10h] float v26; // [esp+3Ch] [ebp+10h] float v27; // [esp+3Ch] [ebp+10h] v4 = a4; v5 = this[5] - this[15]; v6 = (float *)(*(_DWORD *)(a3 + 92) + 28 * (unsigned __int16)a4); v7 = this[6] - this[16]; v8 = this[7] - this[17]; v22 = 1.0 / this[13]; v9 = v22 * v5; v10 = v7 * v22; v11 = v22 * v8; v23 = v6[2] * v11 + v6[1] * v10 + *v6 * v9; v12 = v9 * v23; v13 = v10 * v23; v14 = v11 * v23; v15 = v12 + v12; v16 = v13 + v13; v17 = v14 + v14; v24 = *v6 - v15; v18 = v24; *v6 = v24; v25 = v6[1] - v16; v19 = v25; v6[1] = v25; v26 = v6[2] - v17; v20 = v26; v6[2] = v26; v27 = this[2]; *v6 = v18 * v27; v6[1] = v19 * v27; v6[2] = v27 * v20; return sub_8A8EB0((int)this, a2, a3, v4); } //----- (00896280) -------------------------------------------------------- char __thiscall sub_896280(_DWORD *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // eax int v5; // ebx v2 = (_DWORD **)a2; v3 = (int)this; sub_8A8FA0(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = *(_DWORD *)(v3 + 44); v5 = a2; if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &a2); if ( (_BYTE)v4 ) { *(_DWORD *)(v5 + 44) = a2; } else { v4 = *(_DWORD *)(v3 + 44); *(_DWORD *)(v5 + 44) = v4; } } return v4; } //----- (008962E0) -------------------------------------------------------- int __thiscall sub_8962E0(int this) { int v1; // ebx int result; // eax int v3; // eax double v4; // st7 int v5; // ecx double v6; // st7 int v7; // ecx char v8; // [esp+4h] [ebp-D8h] int v9; // [esp+28h] [ebp-B4h] int v10; // [esp+2Ch] [ebp-B0h] int v11; // [esp+30h] [ebp-ACh] float v12; // [esp+34h] [ebp-A8h] float v13; // [esp+38h] [ebp-A4h] char v14; // [esp+3Ch] [ebp-A0h] char v15; // [esp+70h] [ebp-6Ch] char v16; // [esp+A4h] [ebp-38h] v1 = this; if ( (unsigned __int8)sub_87C4A0((float *)(this + 72), (float *)(*(_DWORD *)(this + 44) + 104)) || (result = sub_87C4A0((float *)(v1 + 124), (float *)(*(_DWORD *)(*(_DWORD *)(v1 + 36) + 16) + 104)), (_BYTE)result) ) { v3 = *(_DWORD *)(v1 + 44); if ( v3 ) qmemcpy(&v16, (const void *)(v3 + 104), 0x34u); else sub_87C3C0((float *)&v16); qmemcpy(&v15, (const void *)(*(_DWORD *)(*(_DWORD *)(v1 + 36) + 16) + 104), 0x34u); sub_87C3F0((float *)&v15, (int)&v14, (float *)&v14); sub_85BDC0((float *)&v14, (float *)&v8, (float *)&v16); v4 = *(float *)(v1 + 48) * v12; result = v10; v5 = v11; *(_DWORD *)(v1 + 60) = v9; v13 = v4; *(_DWORD *)(v1 + 64) = result; v6 = v13; *(_DWORD *)(v1 + 68) = v5; *(float *)(v1 + 52) = v6; qmemcpy((void *)(v1 + 124), &v15, 0x34u); *(float *)(v1 + 56) = v6 * v6; qmemcpy((void *)(v1 + 72), &v16, 0x34u); } v7 = *(_DWORD *)(v1 + 40); if ( v7 ) result = (*(int (**)(void))(*(_DWORD *)v7 + 68))(); return result; } //----- (008963F0) -------------------------------------------------------- int __thiscall sub_8963F0(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int result; // eax int (__cdecl *v5)(int, int *, signed int, signed int *, signed int); // edx int v6; // ST00_4 v2 = a2; v3 = this; sub_8A9260(this, a2); result = sub_876290((void **)v2); if ( *(_DWORD *)(v2 + 28) >= 0xA000113u ) { v5 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v6 = *(_DWORD *)(v2 + 352); a2 = 4; result = v5(v6, v3 + 12, 4, &a2, 1); } return result; } //----- (00896440) -------------------------------------------------------- int __thiscall sub_896440(_BYTE *this, signed int a2) { _DWORD *v2; // edi _BYTE *v3; // esi int v4; // edi int (__cdecl *v5)(int, _BYTE *, signed int, signed int *, signed int); // ecx v2 = (_DWORD *)a2; v3 = this; sub_8A9310(this, a2); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 11)); v4 = v2[89]; v5 = *(int (__cdecl **)(int, _BYTE *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; return v5(v4, v3 + 48, 4, &a2, 1); } //----- (00896490) -------------------------------------------------------- float *__thiscall sub_896490(float *this, float a2, char a3, char a4, int a5, int a6, float a7) { float *v7; // ebx float v9; // [esp+3Ch] [ebp+14h] float v10; // [esp+3Ch] [ebp+14h] v7 = this; sub_8A91A0(this, a2, a3, a4, a5); v7[12] = 1.0; v7[14] = 1.0; *((_DWORD *)v7 + 11) = a6; *(_DWORD *)v7 = &NiPSysSphericalCollider::`vftable'; *((_DWORD *)v7 + 15) = dword_BA45C0; *((_DWORD *)v7 + 16) = dword_BA45C4; *((_DWORD *)v7 + 17) = dword_BA45C8; if ( a7 >= 0.0 ) v7[12] = a7; v9 = -3.4028235e38; v7[40] = v9; v7[41] = v9; v7[27] = v9; v7[28] = v9; v7[42] = v9; v7[29] = v9; qmemcpy(v7 + 31, &unk_BA4584, 0x24u); qmemcpy(v7 + 18, v7 + 31, 0x24u); v10 = -3.4028235e38; v7[43] = v10; v7[30] = v10; return v7; } // A28994: using guessed type void *NiPSysSphericalCollider::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00896580) -------------------------------------------------------- char *sub_896580() { return dword_BA4C18; } //----- (00896590) -------------------------------------------------------- float *__thiscall sub_896590(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0xB0u); if ( v3 ) v4 = sub_896490(v3, 1.0, 0, 0, 0, 0, 1.0); else v4 = 0; sub_8A8F20(v2, (int)v4, a2); v4[12] = v2[12]; return v4; } //----- (008965F0) -------------------------------------------------------- float *sub_8965F0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0xB0u); if ( v0 ) result = sub_896490(v0, 1.0, 0, 0, 0, 0, 1.0); else result = 0; return result; } //----- (00896620) -------------------------------------------------------- unsigned int __thiscall sub_896620(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // edi char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A93C0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C18); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 11); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Collider Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Radius", *((float *)v3 + 12)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (008966F0) -------------------------------------------------------- char __thiscall sub_8966F0(void *this, int a2) { return sub_8A9630(this, a2); } //----- (00896700) -------------------------------------------------------- int __thiscall sub_896700(_DWORD *this, _DWORD *a2) { return sub_8A9590(this, a2); } //----- (00896710) -------------------------------------------------------- bool __thiscall sub_896710(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A95E0(this, a2) && *(float *)(a2 + 84) == v2[21]; } //----- (00896750) -------------------------------------------------------- double sub_896750() { return (float)((double)rand() / 32767.0); } //----- (00896770) -------------------------------------------------------- float *__thiscall sub_896770(float *this, float *a2, float *a3) { float *v3; // esi float *v4; // eax double v5; // st7 float *result; // eax char v7; // [esp+4h] [ebp-1Ch] float v8; // [esp+10h] [ebp-10h] float v9; // [esp+14h] [ebp-Ch] float v10; // [esp+18h] [ebp-8h] float v11; // [esp+1Ch] [ebp-4h] v3 = this; v11 = this[12]; v4 = sub_85DA90(this, (float *)&v7, a3); v8 = *v4 * v11; v9 = v4[1] * v11; v5 = v11 * v4[2]; result = a2; v10 = v5; *a2 = v3[9] + v8; a2[1] = v3[10] + v9; a2[2] = v3[11] + v10; return result; } //----- (008967D0) -------------------------------------------------------- char *sub_8967D0() { return dword_BA4C20; } //----- (008967E0) -------------------------------------------------------- float *__thiscall sub_8967E0(float *this, float *a2, float *a3, float *a4) { float *v4; // esi double v5; // st6 float *v6; // esi double v7; // st7 float *v8; // ST04_4 float *v9; // eax float v10; // edx double v11; // st7 double v12; // st7 float *result; // eax float v14; // [esp+8h] [ebp-30h] float v15; // [esp+Ch] [ebp-2Ch] float v16; // [esp+10h] [ebp-28h] float v17; // [esp+14h] [ebp-24h] float v18; // [esp+18h] [ebp-20h] float v19; // [esp+1Ch] [ebp-1Ch] float v20; // [esp+20h] [ebp-18h] float v21; // [esp+24h] [ebp-14h] float v22; // [esp+28h] [ebp-10h] float v23; // [esp+2Ch] [ebp-Ch] float v24; // [esp+30h] [ebp-8h] float v25; // [esp+34h] [ebp-4h] float v26; // [esp+44h] [ebp+Ch] v4 = this; v22 = (double)rand() / 32767.0; v20 = v4[21] * v22; v22 = (double)rand() / 32767.0; v25 = flt_BA45BC * v22; v22 = (double)rand() / 32767.0; v21 = flt_BA45BC * v22; v24 = cos(v25); v23 = sin(v25); v22 = cos(v21); v25 = sin(v21); v5 = v20; v6 = a3; v7 = v25 * v20; v8 = a3; *a3 = v24 * v7; a3[1] = v7 * v23; a3[2] = v5 * v22; v26 = a2[12]; v9 = sub_85DA90(a2, &v14, v8); v17 = *v9 * v26; v18 = v9[1] * v26; v19 = v26 * v9[2]; v14 = a2[9] + v17; v15 = a2[10] + v18; v10 = v15; v11 = a2[11]; *v6 = v14; v12 = v11 + v19; v6[1] = v10; v16 = v12; v6[2] = v16; result = sub_85DA90(a2, &v14, a4); *a4 = *result; a4[1] = result[1]; a4[2] = result[2]; return result; } // BA45BC: using guessed type float flt_BA45BC; //----- (00896910) -------------------------------------------------------- int __thiscall sub_896910(float *this, char *a2) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x58u); v4 = (int)v3; if ( v3 ) { sub_8A9540(v3); *(float *)(v4 + 84) = 0.0; *(_DWORD *)v4 = &NiPSysSphereEmitter::`vftable'; } else { v4 = 0; } sub_8A9560(v2, v4, a2); *(float *)(v4 + 84) = v2[21]; return v4; } // A289FC: using guessed type void *NiPSysSphereEmitter::`vftable'; //----- (00896960) -------------------------------------------------------- float *sub_896960() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x58u); v1 = v0; if ( !v0 ) return 0; sub_8A9540(v0); v1[21] = 0.0; *(_DWORD *)v1 = &NiPSysSphereEmitter::`vftable'; return v1; } // A289FC: using guessed type void *NiPSysSphereEmitter::`vftable'; //----- (00896990) -------------------------------------------------------- int __thiscall sub_896990(int *this, void **a2) { void **v2; // edi int *v3; // esi int (__cdecl *v4)(void *, int *, signed int, void ***, signed int); // edx void *v5; // ST00_4 v2 = a2; v3 = this; sub_8A9570(this, a2); v4 = (int (__cdecl *)(void *, int *, signed int, void ***, signed int))*((_DWORD *)v2[88] + 1); v5 = v2[88]; a2 = (void **)4; return v4(v5, v3 + 21, 4, &a2, 1); } //----- (008969D0) -------------------------------------------------------- int __thiscall sub_8969D0(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8A95B0(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; return v4(v5, v3 + 21, 4, &a2, 1); } //----- (00896A10) -------------------------------------------------------- unsigned int __thiscall sub_896A10(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A9740(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C20); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Radius", v3[21]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00896AA0) -------------------------------------------------------- float *sub_896AA0() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); v1[7] = 1.0; *((_WORD *)v1 + 12) = 1; v1[9] = 0.0; *(_DWORD *)v1 = &NiPSysSpawnModifier::`vftable'; v1[10] = 0.0; *((_DWORD *)v1 + 8) = 65537; v1[11] = 0.0; result = v1; v1[12] = 0.0; return result; } // A28A5C: using guessed type void *NiPSysSpawnModifier::`vftable'; //----- (00896AF0) -------------------------------------------------------- bool __thiscall sub_896AF0(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A8740(this, a2) && *(_WORD *)(a2 + 24) == *((_WORD *)v2 + 12) && v2[7] == *(float *)(a2 + 28) && *(_WORD *)(a2 + 32) == *((_WORD *)v2 + 16) && *(_WORD *)(a2 + 34) == *((_WORD *)v2 + 17) && v2[9] == *(float *)(a2 + 36) && v2[10] == *(float *)(a2 + 40) && v2[11] == *(float *)(a2 + 44) && v2[12] == *(float *)(a2 + 48); } //----- (00896B80) -------------------------------------------------------- char *sub_896B80() { return dword_BA4C28; } //----- (00896B90) -------------------------------------------------------- int __thiscall sub_896B90(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(float *)(v4 + 28) = 1.0; *(_DWORD *)v4 = &NiPSysSpawnModifier::`vftable'; *(float *)(v4 + 36) = 0.0; *(_WORD *)(v4 + 24) = 1; *(float *)(v4 + 40) = 0.0; *(_DWORD *)(v4 + 32) = 65537; *(float *)(v4 + 44) = 0.0; *(float *)(v4 + 48) = 0.0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(_WORD *)(v4 + 24) = *((_WORD *)v2 + 12); *(float *)(v4 + 28) = *((float *)v2 + 7); *(_WORD *)(v4 + 32) = *((_WORD *)v2 + 16); *(_WORD *)(v4 + 34) = *((_WORD *)v2 + 17); *(float *)(v4 + 36) = *((float *)v2 + 9); result = v4; *(float *)(v4 + 40) = *((float *)v2 + 10); *(float *)(v4 + 44) = *((float *)v2 + 11); *(float *)(v4 + 48) = *((float *)v2 + 12); return result; } // A28A5C: using guessed type void *NiPSysSpawnModifier::`vftable'; //----- (00896C30) -------------------------------------------------------- void __thiscall sub_896C30(float *this, float a2, float a3, int a4, int a5) { float *v5; // esi float v6; // ST20_4 int v7; // eax int v8; // edi float v9; // ST1C_4 float v10; // ST1C_4 __int16 v11; // bx float v12; // ST1C_4 unsigned __int16 v13; // ax int v14; // edi v5 = this; if ( *(_WORD *)(*(_DWORD *)(*(_DWORD *)(a5 + 184) + 92) + 28 * (unsigned __int16)a4 + 24) < *((_WORD *)this + 12) ) { v6 = (double)rand() / 32767.0; if ( v5[7] >= (double)v6 ) { v7 = rand(); v8 = *((unsigned __int16 *)v5 + 16); v9 = (double)v7 / 32767.0; v10 = (double)(*((unsigned __int16 *)v5 + 17) - v8) * v9; v11 = (signed int)v10; v12 = fmod(v10, 1.0); if ( v12 > 0.5 ) ++v11; v13 = v11 + v8; if ( !(v11 + (_WORD)v8) ) v13 = 1; if ( v13 > 0u ) { v14 = v13; do { (*(void (__thiscall **)(float *, _DWORD, _DWORD, int, int))(*(_DWORD *)v5 + 80))( v5, LODWORD(a2), LODWORD(a3), a4, a5); --v14; } while ( v14 ); } } } } //----- (00896D40) -------------------------------------------------------- int __thiscall sub_896D40(float *this, float a2, float a3, __int16 a4, int a5) { _DWORD *v5; // eax int v6; // ebx int v7; // edi int v8; // ecx int v9; // ebx int v10; // eax int v11; // ebx float *v12; // eax int *v13; // eax int v14; // esi float *v15; // eax int *v16; // eax int result; // eax int v18; // ecx int v19; // edx int v20; // edx int v21; // ebx int v22; // eax int v23; // esi double v24; // st7 double v25; // st6 float v26; // ST0C_4 float *v27; // eax float *v28; // eax float *v29; // eax float *v30; // eax float v31; // ST0C_4 float *v32; // eax float *v33; // eax float *v34; // eax float *v35; // eax float *v36; // eax double v37; // st7 int v38; // eax int v39; // edx _DWORD *v40; // eax _DWORD *v41; // ecx int v42; // eax _DWORD *v43; // edx int v44; // edx int v45; // ST0C_4 int v46; // [esp+18h] [ebp-204h] int v47; // [esp+1Ch] [ebp-200h] int v48; // [esp+20h] [ebp-1FCh] float v49; // [esp+24h] [ebp-1F8h] int v50; // [esp+28h] [ebp-1F4h] int v51; // [esp+2Ch] [ebp-1F0h] int v52; // [esp+30h] [ebp-1ECh] int v53; // [esp+34h] [ebp-1E8h] int v54; // [esp+38h] [ebp-1E4h] int v55; // [esp+3Ch] [ebp-1E0h] int v56; // [esp+40h] [ebp-1DCh] int v57; // [esp+48h] [ebp-1D4h] int v58; // [esp+4Ch] [ebp-1D0h] int v59; // [esp+50h] [ebp-1CCh] int v60; // [esp+54h] [ebp-1C8h] int v61; // [esp+58h] [ebp-1C4h] float v62; // [esp+5Ch] [ebp-1C0h] float v63; // [esp+60h] [ebp-1BCh] float v64; // [esp+64h] [ebp-1B8h] int v65; // [esp+68h] [ebp-1B4h] float v66; // [esp+6Ch] [ebp-1B0h] int v67; // [esp+70h] [ebp-1ACh] float v68; // [esp+74h] [ebp-1A8h] float v69; // [esp+78h] [ebp-1A4h] float v70; // [esp+7Ch] [ebp-1A0h] float v71; // [esp+80h] [ebp-19Ch] float v72; // [esp+84h] [ebp-198h] float v73; // [esp+88h] [ebp-194h] float *v74; // [esp+8Ch] [ebp-190h] float v75; // [esp+90h] [ebp-18Ch] float v76; // [esp+94h] [ebp-188h] float v77; // [esp+98h] [ebp-184h] int v78; // [esp+9Ch] [ebp-180h] float v79; // [esp+A0h] [ebp-17Ch] float v80; // [esp+A4h] [ebp-178h] float v81; // [esp+A8h] [ebp-174h] float v82; // [esp+ACh] [ebp-170h] float v83; // [esp+B0h] [ebp-16Ch] float v84; // [esp+B4h] [ebp-168h] float v85; // [esp+B8h] [ebp-164h] float v86; // [esp+BCh] [ebp-160h] float v87; // [esp+C0h] [ebp-15Ch] float v88; // [esp+C4h] [ebp-158h] int v89; // [esp+C8h] [ebp-154h] int v90; // [esp+ECh] [ebp-130h] int v91; // [esp+110h] [ebp-10Ch] char v92; // [esp+134h] [ebp-E8h] char v93; // [esp+144h] [ebp-D8h] char v94; // [esp+168h] [ebp-B4h] char v95; // [esp+18Ch] [ebp-90h] int v96; // [esp+19Ch] [ebp-80h] float v97; // [esp+1B0h] [ebp-6Ch] float v98; // [esp+1B4h] [ebp-68h] float v99; // [esp+1B8h] [ebp-64h] float v100; // [esp+1BCh] [ebp-60h] char v101; // [esp+1C0h] [ebp-5Ch] int v102; // [esp+1D0h] [ebp-4Ch] float v103; // [esp+1E4h] [ebp-38h] float v104; // [esp+1E8h] [ebp-34h] float v105; // [esp+1ECh] [ebp-30h] float v106; // [esp+1F0h] [ebp-2Ch] char v107; // [esp+1F4h] [ebp-28h] v5 = *(_DWORD **)(a5 + 184); v55 = v5[10]; v6 = v5[17]; v74 = this; v60 = v6; v57 = v5[19]; v7 = v5[23] + 28 * (unsigned __int16)a4; v8 = v5[8]; v61 = v5[21]; v9 = v5[22]; v50 = v5[24]; v10 = 12 * (unsigned __int16)a4; v67 = (unsigned __int16)a4; v71 = *(float *)(v10 + v8); v72 = *(float *)(v10 + v8 + 4); v73 = *(float *)(v10 + v8 + 8); v58 = 12 * (unsigned __int16)a4; v76 = *(float *)v7; v46 = v9; v11 = (int)v74; v77 = *(float *)(v7 + 4); v78 = *(int *)(v7 + 8); if ( a5 != *((_DWORD *)v74 + 4) ) { qmemcpy(&v101, (const void *)(a5 + 104), 0x34u); v88 = v106; v12 = sub_85DA90((float *)&v101, &v68, &v71); v79 = v88 * *v12; v80 = v12[1] * v88; v81 = v88 * v12[2]; v83 = v103 + v79; v71 = v83; v84 = v104 + v80; v72 = v84; v85 = v105 + v81; v73 = v85; v13 = (int *)sub_85DA90((float *)&v101, &v68, &v76); v14 = *(_DWORD *)(v11 + 16); v76 = *(float *)v13; v77 = *((float *)v13 + 1); v78 = v13[2]; qmemcpy(&v92, (const void *)(v14 + 104), 0x34u); sub_87C3F0((float *)&v92, v78, (float *)&v95); v88 = v100; v15 = sub_85DA90((float *)&v95, &v68, &v71); v83 = *v15 * v88; v84 = v15[1] * v88; v85 = v88 * v15[2]; v79 = v97 + v83; v80 = v98 + v84; v71 = v79; v72 = v80; v81 = v99 + v85; v73 = v81; v16 = (int *)sub_85DA90((float *)&v95, &v68, &v76); v76 = *(float *)v16; v77 = *((float *)v16 + 1); v78 = v16[2]; } result = *(_DWORD *)(*(_DWORD *)(v11 + 16) + 184); v18 = *(unsigned __int16 *)(result + 100); if ( (_WORD)v18 ) { v19 = *(unsigned __int16 *)(result + 102); if ( v18 + v19 >= *(unsigned __int16 *)(result + 12) ) return result; *(_WORD *)(result + 100) = v18 + 1; v65 = (unsigned __int16)(v18 + v19); LOWORD(v18) = v18 + v19; } else { v18 = *(unsigned __int16 *)(result + 72); *(_WORD *)(result + 102) = v18; if ( (unsigned __int16)v18 >= *(_WORD *)(result + 12) ) return result; v65 = v18; *(_WORD *)(result + 100) = 1; } if ( (_WORD)v18 != -1 ) { v20 = *(_DWORD *)(result + 92); v21 = (unsigned __int16)v18; v75 = a2 - a3; v54 = v20 + 28 * (unsigned __int16)v18; v51 = *(_DWORD *)(result + 32); v47 = *(_DWORD *)(result + 40); v59 = *(_DWORD *)(result + 68); v56 = *(_DWORD *)(result + 76); v52 = *(_DWORD *)(result + 84); v53 = *(_DWORD *)(result + 88); v48 = *(_DWORD *)(result + 96); v88 = v77 * v77 + v76 * v76 + *(float *)&v78 * *(float *)&v78; v88 = sqrt(v88); v66 = v88; v22 = rand(); v23 = (int)v74; v88 = (double)v22 / 32767.0; v88 = v74[9] * v88; v49 = (v88 + 1.0) * v66; v88 = (double)rand() / 32767.0; v88 = *(float *)(v23 + 40) * v88 * flt_BA45B4; v86 = (double)rand() / 32767.0; v82 = v86 * flt_BA45BC; v86 = sin(v88); v87 = cos(v82); v62 = v87 * v86; v87 = sin(v82); v63 = v87 * v86; v87 = cos(v88); v64 = v87; v82 = v76; v87 = v77; v83 = -v76; v84 = -v77; v85 = 0.0; v79 = 0.0; v80 = 0.0; v68 = 0.0; v69 = 0.0; v81 = v77; v70 = v76; sub_85D770((float *)&v94, &v68, &v79, &v83); v88 = -v82; v83 = v63 * *(float *)&v78 - v64 * v77; v84 = v64 * v76 - v62 * *(float *)&v78; v24 = *(float *)&v78; v85 = v77 * v62 - v63 * v76; v25 = v87; v87 = v83 * v87 + v84 * v88 + v85 * 0.0; qmemcpy(&v107, &unk_ABD440, 0x24u); if ( v87 <= 0.000099999997 ) { if ( -v87 <= 0.000099999997 ) { if ( v24 < 0.0 ) { v68 = 0.0; v69 = 0.0; v70 = -1.0; v84 = -1.0; v79 = -1.0; v83 = 0.0; v85 = 0.0; v80 = 0.0; v81 = 0.0; qmemcpy(&v107, sub_85D770((float *)&v102, &v79, &v83, &v68), 0x24u); } } else { v87 = 1.0 / v66; v31 = v87; v87 = (v66 - v24) / (v25 * v25 + v82 * v82); v32 = (float *)sub_85DA30((float *)&v94, (int)&v96, v87); v33 = sub_85D670(&v107, (float *)&v93, v32); v34 = sub_85D940((float *)&v94, (float *)&v91, v33); v35 = (float *)sub_85DA30(v34, (int)&v102, v31); qmemcpy(&v107, sub_85D670(&v107, (float *)&v90, v35), 0x24u); } } else { v87 = 1.0 / v66; v26 = v87; v87 = (v66 - v24) / (v25 * v25 + v82 * v82); v27 = (float *)sub_85DA30((float *)&v94, (int)&v91, v87); v28 = sub_85D600(&v107, (float *)&v93, v27); v29 = sub_85D940((float *)&v94, (float *)&v96, v28); v30 = (float *)sub_85DA30(v29, (int)&v90, v26); qmemcpy(&v107, sub_85D600(&v107, (float *)&v102, v30), 0x24u); } sub_85DA30((float *)&v107, (int)&v89, v49); v36 = sub_85DA90((float *)&v89, &v68, &v62); v37 = v75; *(float *)v54 = *v36; *(float *)(v54 + 4) = v36[1]; v38 = *((_DWORD *)v36 + 2); *(float *)(v54 + 12) = v37; *(_DWORD *)(v54 + 8) = v38; v75 = (double)rand() / 32767.0; *(float *)(v54 + 16) = (v75 - 0.5) * v74[12] + v74[11]; *(_WORD *)(v54 + 24) = *(_WORD *)(v7 + 24) + 1; v39 = 12 * v21; *(float *)(v39 + v51) = v71; *(float *)(v39 + v51 + 4) = v72; *(float *)(v39 + v51 + 8) = v73; if ( v55 && v47 ) { v40 = (_DWORD *)(v55 + 16 * v67); v41 = (_DWORD *)(v47 + 16 * v21); *v41 = *v40; v41[1] = v40[1]; v41[2] = v40[2]; v41[3] = v40[3]; } v42 = v67; if ( v60 && v59 ) *(float *)(v59 + 4 * v21) = *(float *)(v60 + 4 * v67); if ( v57 && v56 ) *(float *)(v56 + 4 * v21) = *(float *)(v57 + 4 * v42); if ( v61 && v52 ) { *(float *)(v52 + 4 * v21) = *(float *)(v61 + 4 * v42); *(float *)(v48 + 4 * v21) = *(float *)(v50 + 4 * v42); } if ( v46 ) { if ( v53 ) { v43 = (_DWORD *)(v53 + v39); *v43 = *(_DWORD *)(v46 + v58); v43[1] = *(_DWORD *)(v46 + v58 + 4); v43[2] = *(_DWORD *)(v46 + v58 + 8); } } v44 = (int)v74; v45 = v65; *(float *)(v54 + 20) = a2 - *(float *)(v54 + 12); result = sub_8A5D10(*(_DWORD **)(v44 + 16), v45); } return result; } // BA45B4: using guessed type float flt_BA45B4; // BA45BC: using guessed type float flt_BA45BC; //----- (008976E0) -------------------------------------------------------- int __thiscall sub_8976E0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, int *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, int *, signed int, signed int *, signed int); // eax int v22; // eax int v23; // edi int (__cdecl *v24)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 2; v6(v5, v3 + 6, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 7, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 2; v12(v11, v3 + 8, 2, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 4); a2 = 2; v15(v14, (char *)v3 + 34, 2, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v16 + 4); a2 = 4; v18(v17, v3 + 9, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v19 + 4); a2 = 4; v21(v20, v3 + 10, 4, &a2, 1); v22 = *(_DWORD *)(v2 + 352); a2 = 4; (*(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v22 + 4))(v22, v3 + 11, 4, &a2, 1); v23 = *(_DWORD *)(v2 + 352); v24 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v23 + 4); a2 = 4; return v24(v23, v3 + 12, 4, &a2, 1); } //----- (008977F0) -------------------------------------------------------- int __thiscall sub_8977F0(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, const char **, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, const char **, signed int, signed int *, signed int); // eax int v22; // eax int v23; // edi int (__cdecl *v24)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A8930(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 6, 2, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 7, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 2; v12(v11, v3 + 8, 2, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 8); a2 = 2; v15(v14, (char *)v3 + 34, 2, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = v16; v18 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v16 + 8); a2 = 4; v18(v17, v3 + 9, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 356); v20 = v19; v21 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v19 + 8); a2 = 4; v21(v20, v3 + 10, 4, &a2, 1); v22 = *(_DWORD *)(v2 + 356); a2 = 4; (*(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v22 + 8))(v22, v3 + 11, 4, &a2, 1); v23 = *(_DWORD *)(v2 + 356); v24 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v23 + 8); a2 = 4; return v24(v23, v3 + 12, 4, &a2, 1); } //----- (00897900) -------------------------------------------------------- unsigned int __thiscall sub_897900(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C28); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785F0((int)"Num Spawn Generations", *((_WORD *)v3 + 12)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Percentage Spawned", *((float *)v3 + 7)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8785F0((int)"Min Num to Spawn", *((_WORD *)v3 + 16)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8785F0((int)"Max Num to Spawn", *((_WORD *)v3 + 17)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"Spawn Speed Chaos", *((float *)v3 + 9)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"Spawn Dir Chaos", *((float *)v3 + 10)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8786B0((int)"Life Span", *((float *)v3 + 11)); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_8786B0((int)"Life Span Variation", *((float *)v3 + 12)); v21 = v2[3]; a2 = (int)v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); return sub_823870(v2, v21, &a2); } //----- (00897B10) -------------------------------------------------------- float *sub_897B10() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x38u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); v1[6] = 0.0; *(_DWORD *)v1 = &NiPSysRotationModifier::`vftable'; v1[7] = 0.0; v1[8] = 0.0; v1[9] = 0.0; *((_DWORD *)v1 + 10) = dword_ABD48C; *((_DWORD *)v1 + 11) = dword_ABD490; *((_DWORD *)v1 + 12) = dword_ABD494; *((_WORD *)v1 + 26) = 1; return v1; } // A28B4C: using guessed type void *NiPSysRotationModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (00897B70) -------------------------------------------------------- char *sub_897B70() { return dword_BA4C38; } //----- (00897B80) -------------------------------------------------------- void __stdcall sub_897B80(float a1, int a2) { int v2; // esi int v3; // edx unsigned __int16 v4; // di int v5; // ecx double v6; // st4 bool v7; // c0 double v8; // st4 int v9; // [esp+4h] [ebp-4h] float v10; // [esp+14h] [ebp+Ch] float v11; // [esp+14h] [ebp+Ch] v2 = a2; v3 = *(_DWORD *)(a2 + 84); if ( v3 ) { v4 = 0; v9 = *(_DWORD *)(a2 + 96); if ( *(_WORD *)(a2 + 72) > 0u ) { do { v5 = 4 * v4; v10 = a1 - *(float *)(*(_DWORD *)(v2 + 92) + 28 * v4 + 20); v11 = v10 * *(float *)(v5 + v9) + *(float *)(v5 + v3); v6 = v11; *(float *)(v5 + v3) = v11; if ( !(dword_BA4C34 & 1) ) { dword_BA4C34 |= 1u; flt_BA4C30 = flt_BA45B4 * 10.0; } if ( flt_BA4C30 >= v6 ) { v7 = flt_BA45BC < v6; v8 = flt_BA45BC; if ( v7 ) { do { *(float *)(v5 + v3) = *(float *)(v5 + v3) - v8; v8 = flt_BA45BC; } while ( flt_BA45BC < (double)*(float *)(v5 + v3) ); } } else { *(float *)(v5 + v3) = 0.0; } ++v4; } while ( v4 < *(_WORD *)(v2 + 72) ); } } } // BA45B4: using guessed type float flt_BA45B4; // BA45BC: using guessed type float flt_BA45BC; // BA4C30: using guessed type float flt_BA4C30; // BA4C34: using guessed type int dword_BA4C34; //----- (00897C70) -------------------------------------------------------- void __thiscall sub_897C70(float *this, int a2, float a3) { int v3; // ebx float *v4; // esi int v5; // ecx float *v6; // edi float v7; // ST10_4 float v8; // ST14_4 float v9; // ST0C_4 int v10; // eax int v11; // edi int v12; // eax float v13; // [esp+20h] [ebp+8h] float v14; // [esp+20h] [ebp+8h] float v15; // [esp+20h] [ebp+8h] float v16; // [esp+20h] [ebp+8h] float v17; // [esp+20h] [ebp+8h] float v18; // [esp+20h] [ebp+8h] float v19; // [esp+20h] [ebp+8h] float v20; // [esp+20h] [ebp+8h] float v21; // [esp+20h] [ebp+8h] float v22; // [esp+20h] [ebp+8h] float v23; // [esp+24h] [ebp+Ch] float v24; // [esp+24h] [ebp+Ch] float v25; // [esp+24h] [ebp+Ch] v3 = a2; v4 = this; v5 = *(_DWORD *)(a2 + 88); if ( v5 ) { v6 = (float *)(v5 + 12 * LOWORD(a3)); if ( *((_BYTE *)v4 + 52) ) { v13 = (double)rand() / 32767.0; v14 = flt_BA45B4 * v13; v15 = cos(v14); v7 = v15; v16 = 1.0 - v15 * v15; v17 = sqrt(v16); v8 = v17; v18 = (double)rand() / 32767.0; v19 = flt_BA45BC * v18; v9 = cos(v19); *v6 = v9 * v8; v20 = sin(v19); v6[1] = v20 * v8; v6[2] = v7; } else { *v6 = v4[10]; v6[1] = v4[11]; v6[2] = v4[12]; } } if ( *(_DWORD *)(v3 + 84) ) { v10 = rand(); v11 = 4 * LOWORD(a3); v21 = ((double)v10 + (double)v10) / 32767.0 - 1.0; v23 = v4[9] * v21 + v4[8]; *(float *)(v11 + *(_DWORD *)(v3 + 84)) = v23; v12 = rand(); v24 = ((double)v12 + (double)v12) / 32767.0 - 1.0; v25 = v4[7] * v24 + v4[6]; if ( *((_BYTE *)v4 + 53) ) { v22 = (double)rand() / 32767.0; if ( v22 <= 0.5 ) v25 = -v25; } *(float *)(v11 + *(_DWORD *)(v3 + 96)) = v25; } } // BA45B4: using guessed type float flt_BA45B4; // BA45BC: using guessed type float flt_BA45BC; //----- (00897E00) -------------------------------------------------------- int __thiscall sub_897E00(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x38u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(float *)(v4 + 24) = 0.0; *(_DWORD *)v4 = &NiPSysRotationModifier::`vftable'; *(float *)(v4 + 28) = 0.0; *(float *)(v4 + 32) = 0.0; *(float *)(v4 + 36) = 0.0; *(_DWORD *)(v4 + 40) = dword_ABD48C; *(_DWORD *)(v4 + 44) = dword_ABD490; *(_DWORD *)(v4 + 48) = dword_ABD494; *(_WORD *)(v4 + 52) = 1; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(float *)(v4 + 24) = *((float *)v2 + 6); *(float *)(v4 + 28) = *((float *)v2 + 7); *(_BYTE *)(v4 + 53) = *((_BYTE *)v2 + 53); *(float *)(v4 + 32) = *((float *)v2 + 8); *(float *)(v4 + 36) = *((float *)v2 + 9); *(_BYTE *)(v4 + 52) = *((_BYTE *)v2 + 52); *(_DWORD *)(v4 + 40) = *((_DWORD *)v2 + 10); *(_DWORD *)(v4 + 44) = *((_DWORD *)v2 + 11); *(_DWORD *)(v4 + 48) = *((_DWORD *)v2 + 12); return v4; } // A28B4C: using guessed type void *NiPSysRotationModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (00897EA0) -------------------------------------------------------- int __thiscall sub_897EA0(float *this, int a2) { float *v2; // esi int result; // eax int v4; // edx int v5; // ecx int v6; // edx v2 = this; result = nullsub_32(a2); if ( *(_DWORD *)(a2 + 28) < 0x14000002u ) { result = *((_DWORD *)v2 + 4); v4 = *(_DWORD *)(result + 184); v5 = *(_DWORD *)(v4 + 96); if ( v5 ) { result = 0; if ( *(_WORD *)(v4 + 72) > 0u ) { do { v6 = (unsigned __int16)result++; *(float *)(v5 + 4 * v6) = v2[6]; } while ( (unsigned __int16)result < *(_WORD *)(*(_DWORD *)(*((_DWORD *)v2 + 4) + 184) + 72) ); } } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00897F00) -------------------------------------------------------- bool __thiscall sub_897F00(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A8740(this, a2) && v2[6] == *(float *)(a2 + 24) && v2[7] == *(float *)(a2 + 28) && *(_BYTE *)(a2 + 53) == *((_BYTE *)v2 + 53) && v2[8] == *(float *)(a2 + 32) && v2[9] == *(float *)(a2 + 36) && *(_BYTE *)(a2 + 52) == *((_BYTE *)v2 + 52) && !(unsigned __int8)sub_85ECE0((float *)(a2 + 40), v2 + 10); } //----- (00897F80) -------------------------------------------------------- int __thiscall sub_897F80(int *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST3C_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST28_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int v13; // eax int v14; // ST14_4 void (__cdecl *v15)(int, char *, signed int, int *, signed int); // eax int v16; // eax int v17; // ST00_4 void (__cdecl *v18)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v19)(int, char *, signed int, signed int *, signed int); // edx int v20; // ST3C_4 int v22; // [esp+Ch] [ebp-8h] char v23; // [esp+13h] [ebp-1h] v2 = a2; v3 = (char *)this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 24, 4, &a2, 1); if ( *(_DWORD *)(v2 + 28) >= 0x14000002u ) { v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v22 = 4; v9(v8, v3 + 28, 4, &v22, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 4); v22 = 4; v12(v11, v3 + 32, 4, &v22, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v13 + 4); v22 = 4; v15(v14, v3 + 36, 4, &v22, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 4); v22 = 1; v18(v17, (char *)&a2 + 3, 1, &v22, 1); v3[53] = HIBYTE(a2) != 0; } v19 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v20 = *(_DWORD *)(v2 + 352); a2 = 1; v19(v20, &v23, 1, &a2, 1); v3[52] = v23 != 0; return sub_8608D0(v3 + 40, v2); } //----- (00898080) -------------------------------------------------------- int __thiscall sub_898080(const char **this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // eax void (__cdecl *v17)(int, char *, signed int, int *, signed int); // edx int v18; // eax int v19; // ST28_4 void (__cdecl *v20)(int, char *, signed int, int *, signed int); // eax int v22; // [esp+Ch] [ebp-4h] v2 = a2; v3 = (char *)this; sub_8A8930(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 24, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 28, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 32, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 36, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = v3[53]; v17 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v16 + 8); v22 = 1; v17(v16, (char *)&a2 + 3, 1, &v22, 1); HIBYTE(a2) = v3[52]; v18 = *(_DWORD *)(v2 + 356); v19 = v18; v20 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v18 + 8); v22 = 1; v20(v19, (char *)&a2 + 3, 1, &v22, 1); return sub_860940(v3 + 40, v2); } //----- (00898160) -------------------------------------------------------- unsigned int __thiscall sub_898160(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C38); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Initial Rotation Speed", *((float *)v3 + 6)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Initial Rotation Speed Variation", *((float *)v3 + 7)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878510((int)"Random Rot Speed Sign", *((_BYTE *)v3 + 53)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Initial Rotation Angle", *((float *)v3 + 8)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"Initial Rotation Angle Variation", *((float *)v3 + 9)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878510((int)"Random Initial Axis", *((_BYTE *)v3 + 52)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_85F140((float *)v3 + 10, (int)"Initial Axis"); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); return sub_823870(v2, v19, &a2); } //----- (00898330) -------------------------------------------------------- float *sub_898330() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x40u); v1 = v0; if ( !v0 ) return 0; sub_86C310(v0); *(_DWORD *)v1 = &NiPSysResetOnLoopCtlr::`vftable'; result = v1; v1[15] = -3.4028235e38; return result; } // A28C54: using guessed type void *NiPSysResetOnLoopCtlr::`vftable'; //----- (00898370) -------------------------------------------------------- unsigned int __thiscall sub_898370(int *this, signed int a2) { return sub_86C630(this, a2); } //----- (00898380) -------------------------------------------------------- int __thiscall sub_898380(_DWORD *this, _DWORD *a2) { return sub_86C590(this, a2); } //----- (00898390) -------------------------------------------------------- int __thiscall sub_898390(_DWORD *this, signed int a2) { return sub_86C780(this, a2); } //----- (008983A0) -------------------------------------------------------- char __thiscall sub_8983A0(float *this, int a2) { return sub_86BDE0(this, a2); } //----- (008983B0) -------------------------------------------------------- char *sub_8983B0() { return dword_BA4C40; } //----- (008983C0) -------------------------------------------------------- void *__thiscall sub_8983C0(void *this, char a2) { void *v2; // esi v2 = this; sub_86C3C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008983F0) -------------------------------------------------------- int __thiscall sub_8983F0(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x40u); v4 = (int)v3; if ( v3 ) { sub_86C310(v3); *(_DWORD *)v4 = &NiPSysResetOnLoopCtlr::`vftable'; *(float *)(v4 + 60) = -3.4028235e38; sub_86C130(v2, v4, a2); result = v4; } else { sub_86C130(v2, 0, a2); result = 0; } return result; } // A28C54: using guessed type void *NiPSysResetOnLoopCtlr::`vftable'; //----- (00898450) -------------------------------------------------------- void __thiscall sub_898450(int this, float a2) { int v2; // esi v2 = this; *(_WORD *)(v2 + 8) &= 0xFFF9u; if ( *(_DWORD *)(this + 48) && !sub_80FFE0((float *)this, a2) ) { if ( -3.4028235e38 == *(float *)(v2 + 60) ) *(float *)(v2 + 60) = *(float *)(v2 + 40); if ( *(float *)(v2 + 40) < (double)*(float *)(v2 + 60) ) *(_BYTE *)(*(_DWORD *)(v2 + 48) + 240) = 1; *(float *)(v2 + 60) = *(float *)(v2 + 40); } } //----- (008984C0) -------------------------------------------------------- unsigned int __thiscall sub_8984C0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA4C40); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00898510) -------------------------------------------------------- float *sub_898510() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x34u); v1 = v0; if ( !v0 ) return 0; sub_8A8AA0(v0); v1[12] = 0.0; *(_DWORD *)v1 = &NiPSysRadialFieldModifier::`vftable'; return v1; } // A28CBC: using guessed type void *NiPSysRadialFieldModifier::`vftable'; //----- (00898540) -------------------------------------------------------- int __thiscall sub_898540(void *this, int a2) { return sub_8A3660(this, a2); } //----- (00898550) -------------------------------------------------------- bool __thiscall sub_898550(float *this, int a2) { return sub_8A8B10(this, a2) != 0; } //----- (00898570) -------------------------------------------------------- char *sub_898570() { return dword_BA4C48; } //----- (00898580) -------------------------------------------------------- int __thiscall sub_898580(float *this, char *Src) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x34u); v4 = (int)v3; if ( v3 ) { sub_8A8AA0(v3); *(float *)(v4 + 48) = 0.0; *(_DWORD *)v4 = &NiPSysRadialFieldModifier::`vftable'; sub_8A8AD0(v2, v4, Src); result = v4; } else { sub_8A8AD0(v2, 0, Src); result = 0; } return result; } // A28CBC: using guessed type void *NiPSysRadialFieldModifier::`vftable'; //----- (008985E0) -------------------------------------------------------- int __fastcall sub_8985E0(int a1, int a2, float a3, int a4) { int v4; // esi float *v5; // esi __int64 v6; // rax double v7; // st6 double v8; // st5 double v9; // st4 double v10; // st3 float *v11; // ecx __int16 v12; // fps bool v13; // c0 char v14; // c2 bool v15; // c3 double v16; // st1 char v18; // [esp+Ch] [ebp-F0h] float v19; // [esp+30h] [ebp-CCh] float v20; // [esp+34h] [ebp-C8h] float v21; // [esp+38h] [ebp-C4h] float v22; // [esp+40h] [ebp-BCh] float v23; // [esp+44h] [ebp-B8h] float v24; // [esp+48h] [ebp-B4h] float v25; // [esp+4Ch] [ebp-B0h] float v26; // [esp+50h] [ebp-ACh] float v27; // [esp+54h] [ebp-A8h] float v28; // [esp+58h] [ebp-A4h] char v29; // [esp+5Ch] [ebp-A0h] char v30; // [esp+90h] [ebp-6Ch] char v31; // [esp+C4h] [ebp-38h] qmemcpy(&v29, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); v4 = *(_DWORD *)(a1 + 16); v28 = *(float *)&a1; qmemcpy(&v30, (const void *)(v4 + 104), 0x34u); sub_87C3F0((float *)&v30, a2, (float *)&v31); sub_85BDC0((float *)&v31, (float *)&v18, (float *)&v29); *(float *)&v6 = v28; v5 = *(float **)(a4 + 32); v28 = *(float *)(LODWORD(v28) + 28); v6 = (unsigned int)v6; if ( *(_WORD *)(a4 + 72) > 0u ) { v7 = v21; v8 = v20; v9 = v19; v10 = v28; do { LODWORD(v6) = *(_DWORD *)(a4 + 92); v11 = (float *)(v6 + 28 * WORD2(v6)); v28 = a3 - v11[5]; v13 = 0.0 < v28; v14 = 0; v15 = 0.0 == v28; LOWORD(v6) = v12; if ( 0.0 != v28 ) { LODWORD(v6) = v5; v16 = *v5; v5 += 3; v22 = v16 - v9; v23 = *(float *)(v6 + 4) - v8; v24 = *(float *)(v6 + 8) - v7; v28 = v28 * v10; v25 = v22 * v28; v26 = v23 * v28; v27 = v28 * v24; *v11 = v25 + *v11; v11[1] = v11[1] + v26; v11[2] = v27 + v11[2]; } ++WORD2(v6); } while ( WORD2(v6) < *(_WORD *)(a4 + 72) ); } return v6; } //----- (00898770) -------------------------------------------------------- int __thiscall sub_898770(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int (__cdecl *v4)(int, int *, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8A8BB0(this, a2); v4 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); a2 = 4; return v4(v5, v3 + 12, 4, &a2, 1); } //----- (008987B0) -------------------------------------------------------- void __thiscall sub_8987B0(int this, float a2, int a3) { int v3; // ebx double v4; // st7 int v5; // ecx int v6; // esi double v7; // st7 int v8; // edx float *v9; // edi double v10; // st7 bool v11; // zf int v12; // eax float v13; // ecx float v14; // eax long double v15; // st3 double v16; // st7 char v17; // [esp+14h] [ebp-124h] float v18; // [esp+38h] [ebp-100h] float v19; // [esp+3Ch] [ebp-FCh] float v20; // [esp+40h] [ebp-F8h] double v21; // [esp+48h] [ebp-F0h] float v22; // [esp+50h] [ebp-E8h] float v23; // [esp+54h] [ebp-E4h] float v24; // [esp+58h] [ebp-E0h] float v25; // [esp+5Ch] [ebp-DCh] float v26; // [esp+60h] [ebp-D8h] float v27; // [esp+64h] [ebp-D4h] float v28; // [esp+68h] [ebp-D0h] float v29; // [esp+6Ch] [ebp-CCh] float v30; // [esp+70h] [ebp-C8h] float v31; // [esp+74h] [ebp-C4h] int v32; // [esp+78h] [ebp-C0h] float v33; // [esp+7Ch] [ebp-BCh] float v34; // [esp+80h] [ebp-B8h] float v35; // [esp+84h] [ebp-B4h] float v36; // [esp+88h] [ebp-B0h] float v37; // [esp+8Ch] [ebp-ACh] float v38; // [esp+90h] [ebp-A8h] int v39; // [esp+94h] [ebp-A4h] char v40; // [esp+98h] [ebp-A0h] char v41; // [esp+CCh] [ebp-6Ch] char v42; // [esp+100h] [ebp-38h] v3 = this; v4 = *(float *)(this + 28); v39 = a3; if ( 0.0 != v4 ) { if ( *(_WORD *)(a3 + 72) ) { v5 = *(_DWORD *)(this + 24); if ( v5 ) { if ( !*(_BYTE *)(v3 + 36) ) { if ( 0.0 == *(float *)(v3 + 32) ) { sub_8985E0(v3, a3, a2, a3); return; } if ( *(float *)(v3 + 48) == 0.0 ) { sub_8985E0(v3, a3, a2, a3); return; } } qmemcpy(&v42, (const void *)(v5 + 104), 0x34u); qmemcpy(&v41, (const void *)(*(_DWORD *)(v3 + 16) + 104), 0x34u); sub_87C3F0((float *)&v41, a3, (float *)&v40); sub_85BDC0((float *)&v40, (float *)&v17, (float *)&v42); v6 = v39; v7 = *(float *)(v3 + 32) * 0.5; v8 = 0; v32 = 0; v22 = v7; if ( *(_WORD *)(v39 + 72) > 0u ) { do { v9 = (float *)(*(_DWORD *)(v6 + 92) + 28 * (unsigned __int16)v8); *(float *)&v39 = a2 - v9[5]; v10 = *(float *)&v39; if ( 0.0 != *(float *)&v39 ) { v11 = *(_BYTE *)(v3 + 36) == 0; v12 = *(_DWORD *)(v6 + 32) + 12 * (unsigned __int16)v8; v29 = *(float *)v12; v13 = *(float *)(v12 + 4); v14 = *(float *)(v12 + 8); v30 = v13; v33 = v29 - v18; v31 = v14; v34 = v13 - v19; v35 = v14 - v20; *(float *)&v39 = v35 * v35 + v34 * v34 + v33 * v33; v15 = *(float *)&v39; if ( v11 || *(float *)(v3 + 44) >= v15 ) { if ( 0.0 == *(float *)(v3 + 32) || v15 == 0.0 ) { *(float *)&v39 = v10 * *(float *)(v3 + 28); v26 = v33 * *(float *)&v39; v36 = v26; v27 = v34 * *(float *)&v39; v37 = v27; v28 = *(float *)&v39 * v35; v38 = v28; } else { v21 = v10 * *(float *)(v3 + 28); *(float *)&v39 = pow(v15, v22); *(float *)&v39 = *(float *)&v39 * *(float *)(v3 + 48); v16 = sub_8863A0(1.0, *(float *)&v39); *(float *)&v39 = v21 / v16; v23 = *(float *)&v39 * v33; v36 = v23; v24 = v34 * *(float *)&v39; v37 = v24; v8 = v32; v25 = *(float *)&v39 * v35; v38 = v25; } *v9 = *v9 + v36; v9[1] = v9[1] + v37; v9[2] = v38 + v9[2]; } } v32 = ++v8; } while ( (unsigned __int16)v8 < *(_WORD *)(v6 + 72) ); } } } } } //----- (00898B50) -------------------------------------------------------- unsigned int __thiscall sub_898B50(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C48); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"RadialType", v3[12]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (00898BE0) -------------------------------------------------------- _DWORD *sub_898BE0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x18u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); *v1 = &NiPSysPositionModifier::`vftable'; return v1; } // A28D1C: using guessed type void *NiPSysPositionModifier::`vftable'; //----- (00898C10) -------------------------------------------------------- int __thiscall sub_898C10(int *this, signed int a2) { return sub_8A88B0(this, a2); } //----- (00898C20) -------------------------------------------------------- int __thiscall sub_898C20(const char **this, signed int a2) { return sub_8A8930(this, a2); } //----- (00898C30) -------------------------------------------------------- bool __thiscall sub_898C30(void *this, int a2) { return sub_8A8740(this, a2); } //----- (00898C40) -------------------------------------------------------- char *sub_898C40() { return dword_BA4C50; } //----- (00898C50) -------------------------------------------------------- int __stdcall sub_898C50(float a1, int a2) { int v2; // esi int v3; // edi __int64 v4; // rax float *v5; // ecx float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v10; // [esp+20h] [ebp+Ch] v2 = a2; (*(void (__thiscall **)(int))(*(_DWORD *)a2 + 76))(a2); v3 = *(_DWORD *)(a2 + 92); v4 = 0i64; if ( *(_WORD *)(a2 + 72) > 0u ) { do { v5 = (float *)(v3 + 28 * WORD2(v4)); LODWORD(v4) = *(_DWORD *)(v2 + 32) + 12 * WORD2(v4); ++HIDWORD(v4); v10 = a1 - v5[5]; v6 = *v5 * v10; v7 = v5[1] * v10; v8 = v10 * v5[2]; *(float *)v4 = *(float *)v4 + v6; *(float *)(v4 + 4) = v7 + *(float *)(v4 + 4); *(float *)(v4 + 8) = *(float *)(v4 + 8) + v8; v5[5] = a1; } while ( WORD2(v4) < *(_WORD *)(v2 + 72) ); } return v4; } //----- (00898CE0) -------------------------------------------------------- _DWORD *__thiscall sub_898CE0(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x18u); v4 = v3; if ( v3 ) { sub_8A86D0(v3); *v4 = &NiPSysPositionModifier::`vftable'; sub_8A8800(v2, (int)v4, Src); result = v4; } else { sub_8A8800(v2, 0, Src); result = 0; } return result; } // A28D1C: using guessed type void *NiPSysPositionModifier::`vftable'; //----- (00898D30) -------------------------------------------------------- unsigned int __thiscall sub_898D30(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8A89B0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C50); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (00898D80) -------------------------------------------------------- int __fastcall sub_898D80(int a1, int a2, float a3, int a4, int a5, int a6) { int v6; // ebx int v7; // esi float *v8; // edi int v9; // edx double v10; // st7 float *v11; // ecx double v12; // st6 int result; // eax double v14; // st5 double v15; // st4 double v16; // st7 long double v17; // st5 long double v18; // st6 double v19; // st3 bool v20; // c0 bool v21; // c3 double v22; // st7 double v23; // st7 float v24; // eax float v25; // ecx float v26; // edx float v27; // [esp+1Ch] [ebp-48h] float v28; // [esp+20h] [ebp-44h] float v29; // [esp+24h] [ebp-40h] float v30; // [esp+28h] [ebp-3Ch] float v31; // [esp+2Ch] [ebp-38h] float v32; // [esp+30h] [ebp-34h] float v33; // [esp+34h] [ebp-30h] float v34; // [esp+38h] [ebp-2Ch] float v35; // [esp+3Ch] [ebp-28h] float v36; // [esp+40h] [ebp-24h] float v37; // [esp+44h] [ebp-20h] float v38; // [esp+48h] [ebp-1Ch] float v39; // [esp+4Ch] [ebp-18h] float v40; // [esp+50h] [ebp-14h] float v41; // [esp+54h] [ebp-10h] float v42; // [esp+58h] [ebp-Ch] float v43; // [esp+5Ch] [ebp-8h] char v44; // [esp+63h] [ebp-1h] float v45; // [esp+74h] [ebp+10h] float v46; // [esp+74h] [ebp+10h] float v47; // [esp+74h] [ebp+10h] float v48; // [esp+74h] [ebp+10h] float v49; // [esp+74h] [ebp+10h] float v50; // [esp+74h] [ebp+10h] float v51; // [esp+74h] [ebp+10h] int v52; // [esp+74h] [ebp+10h] float v53; // [esp+74h] [ebp+10h] float v54; // [esp+74h] [ebp+10h] float v55; // [esp+74h] [ebp+10h] int v56; // [esp+74h] [ebp+10h] int v57; // [esp+74h] [ebp+10h] float v58; // [esp+74h] [ebp+10h] float v59; // [esp+74h] [ebp+10h] float v60; // [esp+74h] [ebp+10h] float v61; // [esp+74h] [ebp+10h] float v62; // [esp+74h] [ebp+10h] float v63; // [esp+74h] [ebp+10h] v6 = a5; v7 = a1; v8 = (float *)(*(_DWORD *)(a5 + 32) + 12 * (unsigned __int16)a6); v9 = *(_DWORD *)(a5 + 92); v10 = *v8 * *(float *)(a1 + 88); v44 = 0; v11 = (float *)(v9 + 28 * (unsigned __int16)a6); v45 = v10 + *(float *)(v7 + 92) * v8[1] + *(float *)(v7 + 96) * v8[2]; v43 = v45 - *(float *)(v7 + 100); v12 = v43; if ( v43 >= 0.001 || -v12 >= 0.001 ) { v50 = *(float *)a4 - a3; v14 = v50; v36 = v50 * *v11; v37 = v50 * v11[1]; v38 = v11[2] * v50; v51 = v37 * *(float *)(v7 + 92) + *(float *)(v7 + 88) * v36 + v38 * *(float *)(v7 + 96); v15 = v51; *(float *)&v52 = v51 + v12; v42 = fabs(*(float *)&v52); if ( v42 < 0.001 ) *(float *)&v52 = 0.0; if ( *(float *)&v52 * v12 < 0.0 ) { v16 = v43; v42 = v14 * -v12 / v15; v36 = v42 * *v11; v37 = v42 * v11[1]; v38 = v42 * v11[2]; v39 = *v8 + v36; v40 = v37 + v8[1]; v41 = v38 + v8[2]; if ( !(dword_BA4C5C & 1) ) { dword_BA4C5C |= 1u; v53 = pow(2.0, -21.0); flt_BA4C58 = v53; v16 = v43; } v17 = v39; v18 = v40; v54 = *(float *)(v7 + 96) * v41 + *(float *)(v7 + 92) * v40 + *(float *)(v7 + 88) * v39; v55 = v54 - *(float *)(v7 + 100); if ( v55 * v16 >= 0.0 ) { v23 = v41; } else { *(float *)&v56 = fabs(v17); v43 = fabs(v18); if ( *(float *)&v56 >= (double)v43 ) v19 = *(float *)&v56; else v19 = v43; *(float *)&v57 = fabs(v41); if ( *(float *)&v57 > v19 ) v19 = *(float *)&v57; v20 = 0.0 < v16; v21 = 0.0 == v16; v22 = v41; v58 = v19 * flt_BA4C58; v36 = *(float *)(v7 + 88) * v58; v37 = v58 * *(float *)(v7 + 92); v38 = v58 * *(float *)(v7 + 96); if ( v20 || v21 ) { v39 = v17 + v36; v40 = v18 + v37; v41 = v22 + v38; } else { v39 = v17 - v36; v40 = v18 - v37; v41 = v22 - v38; } v23 = v41; v18 = v40; v17 = v39; } v36 = v17 - *(float *)(v7 + 104); v37 = v18 - *(float *)(v7 + 108); v38 = v23 - *(float *)(v7 + 112); sub_85DA90((float *)(v7 + 116), &v30, (float *)(v7 + 56)); sub_85DA90((float *)(v7 + 116), &v27, (float *)(v7 + 68)); v59 = v31 * v37 + v36 * v30 + v32 * v38; v33 = v30 * v59; v34 = v31 * v59; v35 = v59 * v32; v60 = v37 * v28 + v36 * v27 + v29 * v38; v36 = v27 * v60; v37 = v28 * v60; v38 = v60 * v29; v61 = v34 * v34 + v33 * v33 + v35 * v35; if ( *(float *)(v7 + 80) > (double)v61 ) { v62 = v37 * v37 + v36 * v36 + v38 * v38; if ( *(float *)(v7 + 84) > (double)v62 ) { v24 = v39; v25 = v40; v44 = 1; v63 = v42 + a3; *(float *)a4 = v63; v26 = v41; *(float *)(v7 + 20) = v24; *(float *)(v7 + 32) = v63; *(float *)(v7 + 24) = v25; *(float *)(v7 + 28) = v26; } } } } else { v39 = *v8 - *(float *)(v7 + 104); v40 = v8[1] - *(float *)(v7 + 108); v41 = v8[2] - *(float *)(v7 + 112); sub_85DA90((float *)(v7 + 116), &v33, (float *)(v7 + 56)); sub_85DA90((float *)(v7 + 116), &v30, (float *)(v7 + 68)); v46 = v39 * v33 + v34 * v40 + v35 * v41; v36 = v33 * v46; v37 = v34 * v46; v38 = v46 * v35; v47 = v39 * v30 + v40 * v31 + v32 * v41; v39 = v30 * v47; v40 = v31 * v47; v41 = v32 * v47; v48 = v36 * v36 + v37 * v37 + v38 * v38; if ( *(float *)(v7 + 80) > (double)v48 ) { v49 = v39 * v39 + v40 * v40 + v41 * v41; if ( *(float *)(v7 + 84) > (double)v49 ) { *(float *)a4 = a3; *(float *)(v7 + 32) = a3; *(float *)(v7 + 20) = *v8; *(float *)(v7 + 24) = v8[1]; *(float *)(v7 + 28) = v8[2]; return v7; } } } result = sub_8A8E80((_DWORD *)v7, a3, a4, v6, a6); if ( !result ) result = v44 != 0 ? v7 : 0; return result; } // BA4C58: using guessed type float flt_BA4C58; // BA4C5C: using guessed type int dword_BA4C5C; //----- (008992B0) -------------------------------------------------------- _DWORD *__thiscall sub_8992B0(float *this, float a2, int a3, int a4) { int v4; // esi float *v5; // edx double v6; // st7 bool v7; // c0 bool v8; // c3 double v9; // st7 double v10; // st6 float v11; // ST14_4 float v12; // ST18_4 float v13; // ST1C_4 double v14; // st6 double v15; // st5 double v16; // st4 float v17; // ST00_4 float v19; // [esp+20h] [ebp-Ch] float v20; // [esp+24h] [ebp-8h] float v21; // [esp+28h] [ebp-4h] float v22; // [esp+3Ch] [ebp+10h] float v23; // [esp+3Ch] [ebp+10h] float v24; // [esp+3Ch] [ebp+10h] float v25; // [esp+3Ch] [ebp+10h] float v26; // [esp+3Ch] [ebp+10h] v4 = a4; v5 = (float *)(*(_DWORD *)(a3 + 92) + 28 * (unsigned __int16)a4); v22 = *v5 * this[22] + v5[1] * this[23] + this[24] * v5[2]; v6 = v22; v19 = this[22] * v22; v20 = this[23] * v22; v21 = this[24] * v22; if ( a2 != this[8] ) { v9 = a2; goto LABEL_5; } v7 = 0.001 < v6; v8 = 0.001 == v6; v9 = a2; if ( v7 || v8 ) { LABEL_5: v11 = v19 + v19; v12 = v20 + v20; v13 = v21 + v21; v23 = *v5 - v11; v14 = v23; *v5 = v23; v24 = v5[1] - v12; v15 = v24; v5[1] = v24; v25 = v5[2] - v13; v16 = v25; v5[2] = v25; v26 = this[2]; *v5 = v14 * v26; v5[1] = v15 * v26; v10 = v26 * v16; goto LABEL_6; } *v5 = *v5 - v19; v5[1] = v5[1] - v20; v10 = v5[2] - v21; LABEL_6: v5[2] = v10; v17 = v9; return sub_8A8EB0((int)this, v17, a3, v4); } //----- (008993C0) -------------------------------------------------------- float *__thiscall sub_8993C0(char *this) { char *v1; // ebx float *v2; // ecx float *result; // eax int v4; // eax int v5; // eax int v6; // ecx float *v7; // eax double v8; // st7 double v9; // st6 int v10; // ebx char v11; // [esp+8h] [ebp-F8h] int v12; // [esp+2Ch] [ebp-D4h] int v13; // [esp+30h] [ebp-D0h] int v14; // [esp+34h] [ebp-CCh] float v15; // [esp+38h] [ebp-C8h] float v16; // [esp+3Ch] [ebp-C4h] char v17; // [esp+40h] [ebp-C0h] float v18; // [esp+4Ch] [ebp-B4h] float v19; // [esp+50h] [ebp-B0h] float v20; // [esp+54h] [ebp-ACh] float v21; // [esp+58h] [ebp-A8h] float v22; // [esp+5Ch] [ebp-A4h] char v23; // [esp+60h] [ebp-A0h] char v24; // [esp+94h] [ebp-6Ch] char v25; // [esp+C8h] [ebp-38h] v1 = this; v2 = sub_8736D0(&v16, (int)&dword_BA45C0, 0.0); if ( *v2 == *((float *)v1 + 22) && v2[1] == *((float *)v1 + 23) && v2[2] == *((float *)v1 + 24) && v2[3] == *((float *)v1 + 25) || (result = (float *)*((_DWORD *)v1 + 11)) != 0 && ((unsigned __int8)sub_87C4A0((float *)v1 + 38, result + 26) || (result = (float *)sub_87C4A0((float *)v1 + 51, (float *)(*(_DWORD *)(*((_DWORD *)v1 + 9) + 16) + 104)), (_BYTE)result)) ) { *((_DWORD *)v1 + 26) = dword_BA45C0; *((_DWORD *)v1 + 27) = dword_BA45C4; *((_DWORD *)v1 + 28) = dword_BA45C8; qmemcpy(v1 + 116, &unk_ABD440, 0x24u); v18 = *((float *)v1 + 19) * *((float *)v1 + 15) - *((float *)v1 + 18) * *((float *)v1 + 16); v19 = *((float *)v1 + 17) * *((float *)v1 + 16) - *((float *)v1 + 19) * *((float *)v1 + 14); v20 = *((float *)v1 + 14) * *((float *)v1 + 18) - *((float *)v1 + 17) * *((float *)v1 + 15); sub_4430B0(&v18); v4 = *((_DWORD *)v1 + 11); v22 = *((float *)v1 + 12); v21 = *((float *)v1 + 13); if ( v4 ) { qmemcpy(&v25, (const void *)(v4 + 104), 0x34u); qmemcpy(&v24, (const void *)(*(_DWORD *)(*((_DWORD *)v1 + 9) + 16) + 104), 0x34u); sub_87C3F0((float *)&v24, (int)&v23, (float *)&v23); sub_85BDC0((float *)&v23, (float *)&v11, (float *)&v25); v5 = v13; v6 = v14; *((_DWORD *)v1 + 26) = v12; *((_DWORD *)v1 + 27) = v5; *((_DWORD *)v1 + 28) = v6; qmemcpy(v1 + 116, &v11, 0x24u); v7 = sub_85DA90((float *)v1 + 29, (float *)&v17, &v18); v18 = *v7; v19 = v7[1]; v20 = v7[2]; sub_4430B0(&v18); v8 = v15; v9 = v15 * v22; qmemcpy(v1 + 152, &v25, 0x34u); v22 = v9; v21 = v8 * v21; qmemcpy(v1 + 204, &v24, 0x34u); } v22 = v22 * 0.5; v21 = 0.5 * v21; *((float *)v1 + 20) = v22 * v22; *((float *)v1 + 21) = v21 * v21; result = (float *)sub_873700(&v16, &v18, (float *)v1 + 26); *((float *)v1 + 22) = *result; *((float *)v1 + 23) = result[1]; *((float *)v1 + 24) = result[2]; *((float *)v1 + 25) = result[3]; } v10 = *((_DWORD *)v1 + 10); if ( v10 ) result = (float *)(*(int (__thiscall **)(int))(*(_DWORD *)v10 + 68))(v10); return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00899670) -------------------------------------------------------- int __thiscall sub_899670(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; sub_8A9260(this, a2); sub_876290((void **)v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 12, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 13, 4, &a2, 1); sub_8608D0((char *)v3 + 56, v2); return sub_8608D0((char *)v3 + 68, v2); } //----- (008996E0) -------------------------------------------------------- int __thiscall sub_8996E0(_BYTE *this, signed int a2) { _DWORD *v2; // edi _BYTE *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, _BYTE *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, _BYTE *, signed int, signed int *, signed int); // eax v2 = (_DWORD *)a2; v3 = this; sub_8A9310(this, a2); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 11)); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _BYTE *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 48, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, _BYTE *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 52, 4, &a2, 1); sub_860940(v3 + 56, (signed int)v2); return sub_860940(v3 + 68, (signed int)v2); } //----- (00899760) -------------------------------------------------------- char __thiscall sub_899760(float *this, int a2) { float *v2; // esi int v3; // eax v2 = this; if ( !sub_8A90D0(this, a2) ) return 0; v3 = *((_DWORD *)v2 + 11); if ( v3 ) { if ( !*(_DWORD *)(a2 + 44) ) return 0; if ( v3 ) goto LABEL_17; } if ( *(_DWORD *)(a2 + 44) ) return 0; if ( v3 ) { LABEL_17: if ( *(_DWORD *)(a2 + 44) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 11) + 28))(*(_DWORD *)(a2 + 44)) ) { return 0; } } if ( *(float *)(a2 + 48) == v2[12] && *(float *)(a2 + 52) == v2[13] && !(unsigned __int8)sub_85ECE0(v2 + 14, (float *)(a2 + 56)) && !(unsigned __int8)sub_85ECE0(v2 + 17, (float *)(a2 + 68)) ) { return 1; } return 0; } //----- (00899800) -------------------------------------------------------- float *__thiscall sub_899800(float *this, float a2, char a3, char a4, int a5, int a6, float a7, float a8, int a9, int a10, int a11, int a12, int a13, int a14) { float *v14; // ebx v14 = this; sub_8A91A0(this, a2, a3, a4, a5); v14[12] = a7; v14[13] = a8; *((_DWORD *)v14 + 14) = a9; v14[20] = 0.5; v14[21] = 0.5; *((_DWORD *)v14 + 11) = a6; *((_DWORD *)v14 + 15) = a10; *((_DWORD *)v14 + 17) = a12; *((_DWORD *)v14 + 16) = a11; *((_DWORD *)v14 + 18) = a13; *(_DWORD *)v14 = &NiPSysPlanarCollider::`vftable'; *((_DWORD *)v14 + 19) = a14; sub_8736D0(v14 + 22, (int)&dword_BA45C0, 0.0); *((_DWORD *)v14 + 26) = dword_BA45C0; *((_DWORD *)v14 + 27) = dword_BA45C4; *((_DWORD *)v14 + 28) = dword_BA45C8; qmemcpy(v14 + 29, &unk_ABD440, 0x24u); sub_87C3C0(v14 + 38); sub_87C3C0(v14 + 51); return v14; } // A28D7C: using guessed type void *NiPSysPlanarCollider::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008998D0) -------------------------------------------------------- char *sub_8998D0() { return dword_BA4C60; } //----- (008998E0) -------------------------------------------------------- float *__thiscall sub_8998E0(float *this, _DWORD **a2) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x100u); if ( v3 ) v4 = sub_899800( v3, 1.0, 0, 0, 0, 0, 1.0, 1.0, dword_ABD48C, dword_ABD490, dword_ABD494, dword_ABD498, dword_ABD49C, dword_ABD4A0); else v4 = 0; sub_8A8F20(v2, (int)v4, a2); v4[12] = v2[12]; v4[13] = v2[13]; v4[14] = v2[14]; v4[15] = v2[15]; v4[16] = v2[16]; v4[17] = v2[17]; v4[18] = v2[18]; v4[19] = v2[19]; return v4; } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; //----- (00899A20) -------------------------------------------------------- unsigned int __thiscall sub_899A20(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A93C0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C60); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 11); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Collider Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Width", *((float *)v3 + 12)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Height", *((float *)v3 + 13)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_85F140((float *)v3 + 14, (int)"X-Axis"); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_85F140((float *)v3 + 17, (int)"Y-Axis"); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (00899BB0) -------------------------------------------------------- float *__thiscall sub_899BB0(_DWORD *this, _DWORD *a2) { return sub_8A98B0(this, a2); } //----- (00899BC0) -------------------------------------------------------- char *sub_899BC0() { return dword_BA4C68; } //----- (00899BD0) -------------------------------------------------------- int __thiscall sub_899BD0(_DWORD *this, _BYTE *a2) { int result; // eax result = this[17]; *a2 = *(_BYTE *)(result + 20); return result; } //----- (00899BF0) -------------------------------------------------------- int __thiscall sub_899BF0(_DWORD *this, int a2) { _BYTE *v2; // edx int result; // eax v2 = (_BYTE *)this[17]; result = a2; if ( v2[20] != (_BYTE)a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 72))(a2); return result; } //----- (00899C10) -------------------------------------------------------- float *__thiscall sub_899C10(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A97D0(v3); *(_DWORD *)v4 = &NiPSysModifierActiveCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A28DDC: using guessed type void *NiPSysModifierActiveCtlr::`vftable'; //----- (00899C60) -------------------------------------------------------- bool __thiscall sub_899C60(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi v2 = a2; v3 = this; return sub_8A7BF0(this, a2) && sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) && a2; } //----- (00899CB0) -------------------------------------------------------- unsigned int __thiscall sub_899CB0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9A10(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C68); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (00899D00) -------------------------------------------------------- unsigned int __thiscall sub_899D00(int *this, void **a2) { int *v2; // esi v2 = this; sub_8A88B0(this, (signed int)a2); v2[3] = 6500; return sub_876350(a2); } //----- (00899D30) -------------------------------------------------------- int __thiscall sub_899D30(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax unsigned int v4; // edi int v5; // ecx v2 = this; result = sub_8A8870(this, a2); v4 = 0; if ( v2[9] ) { do { result = v2[7]; v5 = *(_DWORD *)(result + 4 * v4); if ( v5 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v5 + 40))(a2); ++v4; } while ( v4 < v2[9] ); } return result; } //----- (00899D70) -------------------------------------------------------- char __thiscall sub_899D70(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // esi int v5; // ecx v2 = this; result = sub_81C190(this, a2); if ( result ) { v4 = 0; if ( v2[9] ) { do { v5 = *(_DWORD *)(v2[7] + 4 * v4); if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); ++v4; } while ( v4 < v2[9] ); } result = 1; } return result; } //----- (00899DC0) -------------------------------------------------------- _DWORD *__thiscall sub_899DC0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax _DWORD *result; // eax int v5; // ecx int v6; // eax int v7; // edi int v8; // eax int v9; // ecx int v10; // ebx _DWORD *v11; // [esp+4h] [ebp-4h] v2 = this; v3 = this[3]; if ( v3 ) { v5 = this[1]; v6 = v3 - 1; v2[3] = v6; v7 = *(_DWORD *)(v5 + 4 * v6); if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); v8 = v2[3]; v9 = v2[1]; v10 = *(_DWORD *)(v9 + 4 * v8); v11 = (_DWORD *)(v9 + 4 * v8); if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); *v11 = 0; } if ( v7 ) --v2[4]; *a2 = v7; if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (00899E70) -------------------------------------------------------- char *sub_899E70() { return dword_BA4C70; } //----- (00899E80) -------------------------------------------------------- _DWORD *__thiscall sub_899E80(_DWORD *this, int a2, int a3) { _DWORD *result; // eax int v4; // ecx int v5; // eax int v6; // esi _DWORD *v7; // edi float v8; // ST40_4 float v9; // ST40_4 int v10; // eax int v11; // eax int v12; // esi int v13; // eax int v14; // eax int v15; // ebx double v16; // st7 float *v17; // ebx float v18; // ST28_4 float v19; // edx double v20; // st7 float v21; // ST30_4 int v22; // eax int v23; // [esp+1Ch] [ebp-78h] int v24; // [esp+20h] [ebp-74h] int v25; // [esp+24h] [ebp-70h] _DWORD *v26; // [esp+34h] [ebp-60h] _DWORD *v27; // [esp+3Ch] [ebp-58h] int v28; // [esp+44h] [ebp-50h] char v29; // [esp+48h] [ebp-4Ch] char v30; // [esp+6Ch] [ebp-28h] result = (_DWORD *)a3; v26 = this; v25 = *(_DWORD *)(a3 + 84); v23 = *(_DWORD *)(a3 + 88); v27 = 0; if ( *(_WORD *)(a3 + 72) > 0u ) { while ( 1 ) { v4 = result[26]; v24 = result[23] + 28 * (unsigned __int16)v27; if ( *(_DWORD *)(v4 + 188) > (unsigned int)(unsigned __int16)v27 ) v28 = *(_DWORD *)(*(_DWORD *)(v4 + 180) + 4 * (unsigned __int16)v27); else v28 = 0; v5 = result[8]; *(_DWORD *)(v28 + 88) = *(_DWORD *)(v5 + 12 * (unsigned __int16)v27); *(_DWORD *)(v28 + 92) = *(_DWORD *)(v5 + 12 * (unsigned __int16)v27 + 4); *(_DWORD *)(v28 + 96) = *(_DWORD *)(v5 + 12 * (unsigned __int16)v27 + 8); qmemcpy(&v30, &unk_ABD440, 0x24u); if ( v25 && v23 ) sub_85D860( (float *)&v30, *(float *)(v25 + 4 * (unsigned __int16)v27), *(float *)(12 * (unsigned __int16)v27 + v23), *(float *)(12 * (unsigned __int16)v27 + v23 + 4), *(float *)(12 * (unsigned __int16)v27 + v23 + 8)); v6 = *(_DWORD *)(v26[4] + 32); if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); qmemcpy((void *)(v28 + 52), sub_85D940((float *)(v6 + 104), (float *)&v29, (float *)&v30), 0x24u); if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = (_DWORD *)v28; v8 = *(float *)(*(_DWORD *)(a3 + 68) + 4 * (unsigned __int16)v27) * *(float *)(*(_DWORD *)(a3 + 76) + 4 * (unsigned __int16)v27); v9 = fabs(v8); *(float *)(v28 + 100) = v9; if ( v28 ) { do { v10 = (*(int (__thiscall **)(_DWORD *))(*v7 + 4))(v7); if ( !v10 ) break; while ( (char *)v10 != dword_BA455C ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_23; } if ( !v7[47] ) break; v11 = *(_DWORD *)v7[45]; if ( !v11 ) break; v7 = *(_DWORD **)v7[45]; } while ( v11 ); } LABEL_23: v12 = 0; v13 = sub_85C050(v7, 3); if ( v13 ) { v12 = v13; InterlockedIncrement((volatile LONG *)(v13 + 4)); } v14 = *(_DWORD *)(a3 + 40); if ( v14 && v12 ) { v15 = 16 * (unsigned __int16)v27; v16 = *(float *)(v15 + v14); v17 = (float *)(v14 + v15); v18 = v16; v19 = v17[1]; v20 = v17[2]; ++*(_DWORD *)(v12 + 88); v21 = v20; *(float *)(v12 + 68) = v18; *(float *)(v12 + 72) = v19; *(float *)(v12 + 76) = v21; v22 = *(_DWORD *)(v12 + 88); *(float *)(v12 + 84) = v17[3]; *(_DWORD *)(v12 + 88) = v22 + 1; } (*(void (__stdcall **)(_DWORD, signed int))(*(_DWORD *)v28 + 80))(*(float *)(v24 + 12), 1); if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); } result = (_DWORD *)((char *)v27 + 1); v27 = result; if ( (unsigned __int16)result >= *(_WORD *)(a3 + 72) ) break; result = (_DWORD *)a3; } } return result; } //----- (0089A0E0) -------------------------------------------------------- _DWORD *sub_89A0E0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x30u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); *v1 = &NiPSysMeshUpdateModifier::`vftable'; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[7] = 0; v1[6] = &NiTArray>::`vftable'; v1[11] = 1; return v1; } // A23C3C: using guessed type void *NiTArray>::`vftable'; // A28E84: using guessed type void *NiPSysMeshUpdateModifier::`vftable'; //----- (0089A130) -------------------------------------------------------- void __thiscall sub_89A130(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // ebx unsigned int v4; // edi int v5; // esi _DWORD *v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] v2 = this; sub_8A8720(a2); v3 = sub_875B00(a2); v6 = v2 + 6; sub_81A750(v2 + 6, v3); v4 = 0; if ( v3 ) { do { v5 = sub_875AD0(a2); v7 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); sub_7FFF10(v6, v4, &v7); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } ++v4; } while ( v4 < v3 ); } } //----- (0089A1C0) -------------------------------------------------------- int __thiscall sub_89A1C0(const char **this, unsigned int a2) { _DWORD *v2; // edi const char **v3; // ebx int v4; // eax int v5; // ST00_4 int (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax int result; // eax unsigned int v8; // esi int v9; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); a2 = (unsigned int)v3[9]; v4 = v2[89]; v5 = v4; v6 = *(int (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 8); v9 = 4; result = v6(v5, &a2, 4, &v9, 1); v8 = 0; if ( a2 ) { do result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)&v3[7][4 * v8++]); while ( v8 < a2 ); } return result; } //----- (0089A220) -------------------------------------------------------- char __thiscall sub_89A220(_DWORD *this, int a2) { _DWORD *v2; // edi int v4; // eax unsigned int v5; // esi int v6; // ecx signed int v7; // eax v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v4 = v2[9]; if ( v4 != *(_DWORD *)(a2 + 36) ) return 0; v5 = 0; if ( !v4 ) return 1; while ( 1 ) { v6 = *(_DWORD *)(v2[7] + 4 * v5); v7 = v5 >= *(_DWORD *)(a2 + 36) ? 0 : *(_DWORD *)(*(_DWORD *)(a2 + 28) + 4 * v5); if ( v6 ) break; if ( v7 ) return 0; LABEL_11: if ( ++v5 >= v2[9] ) return 1; } if ( v7 && (*(unsigned __int8 (__stdcall **)(signed int))(*(_DWORD *)v6 + 28))(v7) ) goto LABEL_11; return 0; } //----- (0089A2A0) -------------------------------------------------------- LONG __thiscall sub_89A2A0(_DWORD *this, unsigned int a2, void *a3) { LONG result; // eax _DWORD *v4; // ebx unsigned int v5; // edi int v6; // eax int v7; // esi result = a2; if ( a2 < this[32] ) { result = this[30] + 4 * a2; if ( *(_DWORD *)result ) { v4 = *(_DWORD **)result; v5 = 0; if ( *(_DWORD *)(*(_DWORD *)result + 8) ) { do { v6 = sub_85BD60(a3); v7 = v6; a2 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); result = sub_7FFF10(v4, v5, (LONG *)&a2); if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); } ++v5; } while ( v5 < v4[2] ); } } } return result; } //----- (0089A320) -------------------------------------------------------- _DWORD *__thiscall sub_89A320(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) { _DWORD *v4; // esi int v5; // edi int v6; // esi _DWORD *result; // eax int v8; // edi _DWORD *v9; // [esp+Ch] [ebp-4h] v4 = this; v9 = this; if ( a3 >= this[9] ) { v8 = a4; if ( a4 ) InterlockedIncrement((volatile LONG *)(a4 + 4)); if ( a3 >= v4[8] ) sub_81A750(v4 + 6, a3 + v4[11]); sub_7FFF10(v4 + 6, a3, &a4); if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); result = a2; *a2 = 0; } else { v5 = *(_DWORD *)(this[7] + 4 * a3); if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = a4; if ( a4 ) InterlockedIncrement((volatile LONG *)(a4 + 4)); sub_7FFF10(v9 + 6, a3, &a4); if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *a2 = v5; if ( v5 ) { InterlockedIncrement((volatile LONG *)(v5 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } result = a2; } return result; } //----- (0089A420) -------------------------------------------------------- _DWORD *__thiscall sub_89A420(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_85A130((_DWORD *)this + 6); sub_8A8700(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089A450) -------------------------------------------------------- LONG __thiscall sub_89A450(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // ebx unsigned int v4; // eax unsigned int v5; // ecx int v6; // edi int v7; // esi int v8; // ecx _DWORD **v9; // eax int v10; // edi void (__thiscall ***v11)(_DWORD, signed int); // edi int v12; // edi int v13; // edi LONG result; // eax _DWORD *v15; // [esp+14h] [ebp-4h] v3 = a2; v4 = *(unsigned __int16 *)(a2[23] + 28 * (unsigned __int16)a3 + 24); v15 = this; v5 = this[9]; if ( v4 >= v5 ) LOWORD(v4) = v5 - 1; v6 = (unsigned __int16)v4; if ( (unsigned int)(unsigned __int16)v4 < a2[32] ) { v8 = a2[30]; v9 = (_DWORD **)(v8 + 4 * (unsigned __int16)v4); if ( *(_DWORD *)(v8 + 4 * v6) ) { sub_899DC0(*v9, &a2); v7 = (int)a2; if ( a2 ) goto LABEL_14; } else { v7 = 0; } } else { v7 = 0; } v10 = sub_85BD60(*(void **)(v15[7] + 4 * v6)); if ( v7 != v10 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v7 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } LABEL_14: *(_WORD *)(v7 + 28) |= 1u; sub_86C420(v7, 0.0); (*(void (__stdcall **)(int *, _DWORD, int))(*(_DWORD *)v3[26] + 128))(&a3, (unsigned __int16)a3, v7); if ( a3 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))a3; if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( v11 ) (**v11)(v11, 1); } } v12 = *(_DWORD *)(v15[4] + 176); if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 92))(v7, v12); if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v13 = *(_DWORD *)(v15[4] + 180); if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 96))(v7, v13); if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); return result; } //----- (0089A5E0) -------------------------------------------------------- _DWORD *__thiscall sub_89A5E0(_DWORD *this, int a2, char *Src) { _DWORD *v3; // ebx _DWORD *result; // eax unsigned int v5; // esi int v6; // ecx int v7; // eax int (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // [esp+8h] [ebp-4h] v3 = this; result = (_DWORD *)sub_8A8800(this, a2, Src); v5 = 0; if ( v3[9] ) { do { v6 = *(_DWORD *)(v3[7] + 4 * v5); if ( v6 ) { v7 = (*(int (__stdcall **)(char *))(*(_DWORD *)v6 + 8))(Src); result = sub_89A320((_DWORD *)a2, &v9, v5, v7); v8 = (int (__thiscall ***)(_DWORD, signed int))v9; if ( v9 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v9 + 4)); if ( !result ) result = (_DWORD *)(**v8)(v8, 1); } } ++v5; } while ( v5 < v3[9] ); } return result; } //----- (0089A660) -------------------------------------------------------- void __thiscall sub_89A660(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // edi unsigned int v4; // esi v2 = this; nullsub_32(a2); if ( *(_DWORD *)(a2 + 28) > 0xA010000u ) { v3 = *(_DWORD *)(v2[4] + 184); if ( *(_BYTE *)(v3 + 108) ) { v4 = 0; if ( *(_DWORD *)(v3 + 128) ) { do { if ( v4 < v2[8] ) { if ( *(_DWORD *)(v2[7] + 4 * v4) ) sub_89A2A0((_DWORD *)v3, v4, *(void **)(v2[7] + 4 * v4)); } ++v4; } while ( v4 < *(_DWORD *)(v3 + 128) ); } } } else { sub_8A6C40(*(unsigned int **)(v2[4] + 184), v2[9]); } } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (0089A6E0) -------------------------------------------------------- unsigned int __thiscall sub_89A6E0(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8A89B0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C70); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (0089A730) -------------------------------------------------------- _DWORD *__thiscall sub_89A730(_DWORD *this, char *Src) { _DWORD *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x30u); v4 = v3; if ( v3 ) { sub_8A86D0(v3); *v4 = &NiPSysMeshUpdateModifier::`vftable'; v4[6] = &NiTArray>::`vftable'; v4[8] = 0; v4[11] = 1; v4[9] = 0; v4[10] = 0; v4[7] = 0; } else { v4 = 0; } sub_89A5E0(v2, (int)v4, Src); return v4; } // A23C3C: using guessed type void *NiTArray>::`vftable'; // A28E84: using guessed type void *NiPSysMeshUpdateModifier::`vftable'; //----- (0089A790) -------------------------------------------------------- _DWORD *__thiscall sub_89A790(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiPSysMeshEmitter::NiSkinnedEmitterData::`vftable'; v1[2] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A28ED4: using guessed type void *NiPSysMeshEmitter::NiSkinnedEmitterData::`vftable'; //----- (0089A7C0) -------------------------------------------------------- void __thiscall sub_89A7C0(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A28EDC: using guessed type void *NiTArray>::`vftable'; //----- (0089A820) -------------------------------------------------------- void __thiscall sub_89A820(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A28EE4: using guessed type void *NiTArray>::`vftable'; //----- (0089A880) -------------------------------------------------------- void *__thiscall sub_89A880(void *this, char a2) { void *v2; // esi v2 = this; sub_89A7C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089A8B0) -------------------------------------------------------- void *__thiscall sub_89A8B0(void *this, char a2) { void *v2; // esi v2 = this; sub_89A820(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089A8E0) -------------------------------------------------------- int __fastcall sub_89A8E0(int a1, int a2, int a3, float *a4, float *a5) { int result; // eax float v6; // ST14_4 float *v7; // eax double v8; // st7 double v9; // st7 int v10; // esi int v11; // eax int v12; // eax double v13; // st7 double v14; // st6 int v15; // eax int v16; // eax int v17; // eax double v18; // st7 float *v19; // eax float v20; // [esp+Ch] [ebp-F0h] float v21; // [esp+10h] [ebp-ECh] float v22; // [esp+14h] [ebp-E8h] float v23; // [esp+18h] [ebp-E4h] float v24; // [esp+1Ch] [ebp-E0h] float v25; // [esp+20h] [ebp-DCh] float v26; // [esp+24h] [ebp-D8h] char v27; // [esp+28h] [ebp-D4h] char v28; // [esp+5Ch] [ebp-A0h] char v29; // [esp+90h] [ebp-6Ch] char v30; // [esp+C4h] [ebp-38h] float v31; // [esp+E8h] [ebp-14h] float v32; // [esp+ECh] [ebp-10h] float v33; // [esp+F0h] [ebp-Ch] float v34; // [esp+F4h] [ebp-8h] result = a3; v26 = *(float *)&a1; if ( a3 ) { qmemcpy(&v27, (const void *)(a3 + 104), 0x34u); qmemcpy(&v28, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v28, (int)&v29, (float *)&v29); sub_85BDC0((float *)&v29, (float *)&v30, (float *)&v27); v6 = v34; v7 = sub_85DA90((float *)&v30, &v23, a4); v20 = *v7 * v6; v21 = v7[1] * v6; v22 = v6 * v7[2]; v23 = v31 + v20; v8 = v32; *a4 = v23; v24 = v8 + v21; v9 = v33; a4[1] = v24; v25 = v9 + v22; a4[2] = v25; v10 = LODWORD(v26); v11 = *(_DWORD *)(LODWORD(v26) + 128); if ( v11 ) { v12 = v11 - 1; if ( v12 ) { result = v12 - 1; if ( !result ) { sub_85DA90((float *)&v30, &v20, (float *)(LODWORD(v26) + 136)); v26 = (double)rand() / 32767.0; v26 = (v26 - 0.5) * *(float *)(v10 + 28) + *(float *)(v10 + 24); sub_4430B0(&v20); v13 = v26; v23 = v20 * v26; v14 = v21; *a5 = v23; v24 = v14 * v13; result = LODWORD(v24); a5[1] = v24; v25 = v13 * v22; a5[2] = v25; } } else { v15 = rand(); v26 = *(float *)&v15; *a5 = ((double)v15 + (double)v15) / 32767.0 - 1.0; v16 = rand(); v26 = *(float *)&v16; a5[1] = ((double)v16 + (double)v16) / 32767.0 - 1.0; v17 = rand(); v26 = *(float *)&v17; a5[2] = ((double)v17 + (double)v17) / 32767.0 - 1.0; sub_4430B0(a5); result = rand(); v26 = (double)result / 32767.0; v26 = (v26 - 0.5) * *(float *)(v10 + 28) + *(float *)(v10 + 24); v18 = v26; *a5 = *a5 * v26; a5[1] = a5[1] * v18; a5[2] = v18 * a5[2]; } } else { v19 = sub_85DA90((float *)&v30, &v23, a5); *a5 = *v19; a5[1] = v19[1]; result = *((_DWORD *)v19 + 2); *((_DWORD *)a5 + 2) = result; } } return result; } //----- (0089ABD0) -------------------------------------------------------- char __thiscall sub_89ABD0(_DWORD *this, int a2) { int v2; // eax int v4; // edi _DWORD *v5; // esi int v6; // eax unsigned int v7; // ebx _DWORD *v8; // eax _DWORD *v9; // [esp+4h] [ebp-4h] v9 = this; if ( !a2 ) return 0; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA4858 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } v4 = *(_DWORD *)(a2 + 188); if ( !v4 ) return 0; v5 = *(_DWORD **)(v4 + 12); if ( !v5 ) { v6 = *(_DWORD *)(v4 + 8); if ( !v6 ) return 0; v7 = *(_DWORD *)(v6 + 64); if ( v7 < 4 ) LOBYTE(v7) = 4; v8 = operator new(0x10u); v5 = v8 ? sub_86EA70(v8) : 0; if ( !sub_870FE0(v5, *(unsigned __int16 **)(a2 + 184), *(_DWORD *)(v4 + 8), v7, 4, 0) ) return 0; } sub_56FF80(v9 + 2, (int)v5); return 1; } //----- (0089AC90) -------------------------------------------------------- float *__stdcall sub_89AC90(float *a1, float *a2, int a3, int a4, int a5, int a6) { int v6; // esi int v7; // ecx float *v8; // eax int v9; // edx int v10; // esi int v11; // eax int v12; // ecx int v13; // edx int v14; // eax float v15; // edi float v16; // ecx float v17; // ecx float v18; // edx unsigned int v19; // eax unsigned int v20; // edx int v21; // ecx unsigned __int16 v22; // ax float *v23; // ST0C_4 float *v24; // eax int v25; // eax double v26; // st6 float *v27; // eax float v28; // ecx float v29; // edx float v30; // ecx float *result; // eax float v32; // edx float v33; // ecx char v34; // [esp+10h] [ebp-1A8h] int v35; // [esp+44h] [ebp-174h] float v36; // [esp+48h] [ebp-170h] float v37; // [esp+4Ch] [ebp-16Ch] float v38; // [esp+50h] [ebp-168h] float v39; // [esp+54h] [ebp-164h] float v40; // [esp+58h] [ebp-160h] float v41; // [esp+5Ch] [ebp-15Ch] float v42; // [esp+60h] [ebp-158h] float v43; // [esp+64h] [ebp-154h] float v44; // [esp+68h] [ebp-150h] int v45; // [esp+6Ch] [ebp-14Ch] float *v46; // [esp+70h] [ebp-148h] float *v47; // [esp+74h] [ebp-144h] float v48; // [esp+78h] [ebp-140h] float v49; // [esp+7Ch] [ebp-13Ch] float v50; // [esp+80h] [ebp-138h] int v51; // [esp+84h] [ebp-134h] float v52; // [esp+88h] [ebp-130h] float v53; // [esp+8Ch] [ebp-12Ch] float v54; // [esp+90h] [ebp-128h] float v55; // [esp+94h] [ebp-124h] float v56; // [esp+98h] [ebp-120h] float v57; // [esp+9Ch] [ebp-11Ch] float v58; // [esp+A0h] [ebp-118h] float v59; // [esp+A4h] [ebp-114h] float v60; // [esp+A8h] [ebp-110h] float v61; // [esp+ACh] [ebp-10Ch] float v62; // [esp+B0h] [ebp-108h] float v63; // [esp+B4h] [ebp-104h] unsigned int v64; // [esp+B8h] [ebp-100h] int v65; // [esp+BCh] [ebp-FCh] char v66; // [esp+C0h] [ebp-F8h] char v67; // [esp+F4h] [ebp-C4h] char v68; // [esp+128h] [ebp-90h] int v69; // [esp+15Ch] [ebp-5Ch] float v70; // [esp+160h] [ebp-58h] float v71; // [esp+164h] [ebp-54h] float v72; // [esp+168h] [ebp-50h] float v73; // [esp+16Ch] [ebp-4Ch] float v74; // [esp+170h] [ebp-48h] float v75; // [esp+174h] [ebp-44h] float v76; // [esp+178h] [ebp-40h] float v77; // [esp+17Ch] [ebp-3Ch] float v78; // [esp+180h] [ebp-38h] float v79; // [esp+184h] [ebp-34h] float v80; // [esp+188h] [ebp-30h] float v81; // [esp+18Ch] [ebp-2Ch] float v82; // [esp+190h] [ebp-28h] float v83; // [esp+194h] [ebp-24h] float v84; // [esp+198h] [ebp-20h] float v85; // [esp+19Ch] [ebp-1Ch] float v86; // [esp+1A0h] [ebp-18h] float v87; // [esp+1A4h] [ebp-14h] float v88; // [esp+1A8h] [ebp-10h] float v89; // [esp+1ACh] [ebp-Ch] float v90; // [esp+1B0h] [ebp-8h] v46 = a2; v47 = a1; v6 = *(int *)(a4 + 8); v51 = a6; v7 = *(_DWORD *)(a4 + 16); v64 = a3; v45 = a4; v65 = v6; sub_87C3F0((float *)(v7 + 104), (int)&v67, (float *)&v67); v8 = sub_85BDC0((float *)(v6 + 12), &v78, (float *)&v67); v9 = v6; qmemcpy(&v68, v8, 0x34u); v10 = a6; v35 = *(_DWORD *)(v9 + 68); v55 = *(float *)&dword_BA45C0; v61 = *(float *)&dword_BA45C0; v56 = *(float *)&dword_BA45C4; v62 = *(float *)&dword_BA45C4; v11 = *(_DWORD *)(a3 + 184); v12 = *(_DWORD *)(v11 + 32); v57 = *(float *)&dword_BA45C8; v63 = *(float *)&dword_BA45C8; v13 = *(_DWORD *)(v11 + 36); v14 = 12 * *(unsigned __int16 *)(*(_DWORD *)(a5 + 12) + 2 * a6); v42 = *(float *)(v14 + v12); v15 = *(float *)(v14 + v12 + 4); v16 = *(float *)(v14 + v12 + 8); v43 = v15; v44 = v16; if ( v13 ) { v52 = *(float *)(v14 + v13); v17 = *(float *)(v14 + v13 + 4); v18 = *(float *)(v14 + v13 + 8); } else { v58 = 1.0; v59 = 0.0; v52 = 1.0; v60 = 0.0; v17 = 0.0; v18 = 0.0; } v19 = *(unsigned __int16 *)(a5 + 36); v54 = v18; v20 = 0; v53 = v17; v64 = 0; if ( v19 ) { v65 = 16 * v51; while ( 1 ) { v21 = *(_DWORD *)(a5 + 16); v22 = v21 ? *(_WORD *)(*(_DWORD *)(a5 + 4) + 2 * *(unsigned __int8 *)(v21 + v10 * v19 + v20)) : *(_WORD *)(*(_DWORD *)(a5 + 4) + 2 * v20); v23 = (float *)(v35 + 76 * v22); v24 = sub_85BDC0((float *)&v68, (float *)&v66, (float *)(*(_DWORD *)(*(_DWORD *)(v45 + 20) + 4 * v22) + 104)); qmemcpy(&v78, sub_85BDC0(v24, (float *)&v34, v23), 0x34u); sub_85DA30(&v78, (int)&v69, v90); v25 = v65; v65 = *(int *)(v65 + *(_DWORD *)(a5 + 8)); v58 = v71 * v44 + *(float *)&v69 * v42 + v70 * v43 + v87; v59 = v73 * v43 + v72 * v42 + v74 * v44 + v88; v60 = v42 * v75 + v43 * v76 + v44 * v77 + v89; ++v64; v39 = v80 * v54 + v78 * v52 + v79 * v53; v40 = v82 * v53 + v81 * v52 + v83 * v54; v41 = v52 * v84 + v53 * v85 + v54 * v86; v26 = *(float *)&v65; v65 = v25 + 4; v19 = *(unsigned __int16 *)(a5 + 36); v36 = v58 * v26; v37 = v59 * v26; v38 = v60 * v26; v55 = v36 + v55; v56 = v56 + v37; v57 = v57 + v38; v48 = v39 * v26; v49 = v40 * v26; v50 = v26 * v41; v61 = v48 + v61; v62 = v62 + v49; v63 = v63 + v50; if ( v64 >= v19 ) break; v20 = v64; v10 = v51; } } sub_4430B0(&v61); v27 = v47; v28 = v56; *v47 = v55; v29 = v57; v27[1] = v28; v30 = v61; v27[2] = v29; result = v46; v32 = v62; *v46 = v30; v33 = v63; result[1] = v32; result[2] = v33; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0089B0D0) -------------------------------------------------------- _DWORD *__thiscall sub_89B0D0(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 2); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; //----- (0089B130) -------------------------------------------------------- int __thiscall sub_89B130(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v7)(int, int *, signed int, signed int *, signed int); // edx int v8; // ST00_4 int v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_8A80B0(this, a2); sub_876350((void **)v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, &v10, 4, &a2, 1); v3[32] = v10; v7 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v8 = *(_DWORD *)(v2 + 352); a2 = 4; v7(v8, &v10, 4, &a2, 1); v3[33] = v10; return sub_8608D0((char *)v3 + 136, v2); } //----- (0089B1B0) -------------------------------------------------------- int __thiscall sub_89B1B0(const char **this, unsigned int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // eax unsigned int v7; // ebx int v8; // eax int v9; // ST14_4 void (__cdecl *v10)(int, const char **, signed int, int *, signed int); // eax int v11; // eax int v12; // ST00_4 void (__cdecl *v13)(int, const char **, signed int, int *, signed int); // eax int v15; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_8A8200(this, a2); a2 = (unsigned int)v3[23]; v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 8); v15 = 4; v6(v5, &a2, 4, &v15, 1); v7 = 0; if ( a2 ) { do (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *(_DWORD *)&v3[21][4 * v7++]); while ( v7 < a2 ); } v8 = v2[89]; v9 = v8; v10 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v8 + 8); v15 = 4; v10(v9, v3 + 32, 4, &v15, 1); v11 = v2[89]; v12 = v11; v13 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v11 + 8); v15 = 4; v13(v12, v3 + 33, 4, &v15, 1); return sub_860940((char *)v3 + 136, (signed int)v2); } //----- (0089B260) -------------------------------------------------------- bool __thiscall sub_89B260(float *this, float *a2) { float *v2; // ebx float *v3; // edi bool result; // al unsigned int v5; // edx unsigned int v6; // esi int v7; // ecx int v8; // eax unsigned int v9; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_8A8340(this, a2) ) return 0; v5 = *((_DWORD *)v3 + 23); v9 = v5; if ( v5 != *((_DWORD *)v2 + 23) ) return 0; v6 = 0; if ( v5 ) { do { v7 = *(_DWORD *)(*((_DWORD *)v3 + 21) + 4 * v6); v8 = *(_DWORD *)(*((_DWORD *)v2 + 21) + 4 * v6); if ( v7 ) { if ( !v8 || !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 28))(*(_DWORD *)(*((_DWORD *)v2 + 21) + 4 * v6)) ) { goto LABEL_12; } v5 = v9; } else if ( v8 ) { goto LABEL_12; } ++v6; } while ( v6 < v5 ); } if ( *((_DWORD *)v3 + 32) == *((_DWORD *)v2 + 32) && *((_DWORD *)v3 + 33) == *((_DWORD *)v2 + 33) ) result = (unsigned __int8)sub_85ECE0(v3 + 34, v2 + 34) == 0; else LABEL_12: result = 0; return result; } //----- (0089B310) -------------------------------------------------------- float *__thiscall sub_89B310(float *this) { float *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; sub_8A7D20(this); *(_DWORD *)v1 = &NiPSysMeshEmitter::`vftable'; *((_DWORD *)v1 + 20) = &NiTArray>::`vftable'; *((_DWORD *)v1 + 22) = 1; *((_DWORD *)v1 + 25) = 2; v1[23] = 0.0; v1[24] = 0.0; v2 = operator new(8u); if ( v2 ) { *v2 = 1; v3 = v2 + 1; *v3 = 0; } else { v3 = 0; } *((_DWORD *)v1 + 21) = v3; v1[28] = 0.0; v1[29] = 0.0; v1[30] = 0.0; v1[27] = 0.0; *((_DWORD *)v1 + 26) = &NiTArray>::`vftable'; *((_DWORD *)v1 + 31) = 1; v1[32] = 0.0; v1[33] = 0.0; *((_DWORD *)v1 + 34) = dword_ABD48C; *((_DWORD *)v1 + 35) = dword_ABD490; *((_DWORD *)v1 + 36) = dword_ABD494; return v1; } // A28EDC: using guessed type void *NiTArray>::`vftable'; // A28EE4: using guessed type void *NiTArray>::`vftable'; // A28EEC: using guessed type void *NiPSysMeshEmitter::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (0089B3D0) -------------------------------------------------------- char *sub_89B3D0() { return dword_BA4C78; } //----- (0089B3E0) -------------------------------------------------------- _DWORD *__thiscall sub_89B3E0(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_89A820((_DWORD *)this + 26); sub_89A7C0(v2 + 20); sub_8A8700(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089B420) -------------------------------------------------------- char __thiscall sub_89B420(void *this, int a2, float *a3, float *a4) { int v4; // edi int v5; // eax int v6; // edx int v7; // ecx int v8; // edx float v9; // ST2C_4 int v11; // eax float *v12; // esi float v13; // ST18_4 float v14; // ST1C_4 float v15; // ST20_4 float v16; // [esp+14h] [ebp-Ch] float v17; // [esp+18h] [ebp-8h] int v18; // [esp+1Ch] [ebp-4h] float v19; // [esp+2Ch] [ebp+Ch] float v20; // [esp+2Ch] [ebp+Ch] v4 = (int)this; v5 = rand(); v6 = *(_DWORD *)(a2 + 184); v18 = *(unsigned __int16 *)(v6 + 12) - 1; v7 = *(_DWORD *)(v6 + 32); v8 = *(_DWORD *)(v6 + 36); if ( !v7 ) return 0; v9 = (double)v5 / 32767.0; v11 = 12 * (unsigned __int64)(signed __int64)((double)v18 * v9); v12 = a3; *a3 = *(float *)(v11 + v7); a3[1] = *(float *)(v11 + v7 + 4); a3[2] = *(float *)(v11 + v7 + 8); v16 = *(float *)(v11 + v8 + 4); v17 = *(float *)(v11 + v8 + 8); if ( !*(_DWORD *)(v4 + 128) ) { if ( *(_DWORD *)(*(_DWORD *)(a2 + 184) + 36) ) { v19 = a4[1] * a4[1] + *a4 * *a4 + a4[2] * a4[2]; v20 = sqrt(v19); v13 = *(float *)(v11 + v8) * v20; *a4 = v13; v14 = v16 * v20; a4[1] = v14; v15 = v20 * v17; a4[2] = v15; } } sub_89A8E0(v4, a2, a2, v12, a4); return 1; } //----- (0089B550) -------------------------------------------------------- char __thiscall sub_89B550(_DWORD *this, _DWORD **a2, float *a3, float *a4) { int v4; // eax int v5; // eax unsigned int v7; // edi int v8; // esi int v9; // eax int v10; // edx int v11; // eax _DWORD *v12; // eax int v13; // edx int v14; // ebx int v15; // eax int v16; // ecx unsigned int v17; // esi float v18; // edx float *v19; // esi float v20; // ST28_4 double v21; // st6 float v22; // ST2C_4 double v23; // st6 float v24; // ST30_4 int v25; // edx float v26; // ST28_4 float v27; // edx float v28; // eax float v29; // ST1C_4 float v30; // ST20_4 float v31; // ST24_4 float v32; // ST1C_4 double v33; // st6 float v34; // ST20_4 int v35; // ST24_4 int v36; // ebx float v37; // ST1C_4 double v38; // st6 float v39; // ST20_4 float v40; // ST24_4 float v41; // ST28_4 float v42; // ST2C_4 float v43; // ST30_4 double v44; // st7 float v45; // ST1C_4 float v46; // ST20_4 int v47; // ST24_4 float v48; // [esp+24h] [ebp-38h] float v49; // [esp+28h] [ebp-34h] float v50; // [esp+2Ch] [ebp-30h] float v51; // [esp+30h] [ebp-2Ch] float v52; // [esp+34h] [ebp-28h] float v53; // [esp+38h] [ebp-24h] float v54; // [esp+3Ch] [ebp-20h] __int64 v55; // [esp+40h] [ebp-1Ch] _DWORD *v56; // [esp+48h] [ebp-14h] int v57; // [esp+4Ch] [ebp-10h] int v58; // [esp+50h] [ebp-Ch] float v59; // [esp+54h] [ebp-8h] unsigned __int16 v60; // [esp+58h] [ebp-4h] float v61; // [esp+68h] [ebp+Ch] float v62; // [esp+68h] [ebp+Ch] float v63; // [esp+68h] [ebp+Ch] v56 = this; if ( !a2 ) return 0; v4 = ((int (__thiscall *)(_DWORD **))(*a2)[1])(a2); if ( v4 ) { while ( (char *)v4 != dword_BA4858 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_5; } v7 = (*(unsigned __int16 (**)(void))(*a2[46] + 76))(); v59 = (double)rand() / 32767.0; v55 = (signed __int64)(v59 * (double)v7); v8 = v55; if ( (_DWORD)v55 == v7 ) v8 = v7 - 1; v59 = 0.0; do { (*(void (__stdcall **)(int, int *, int *, unsigned __int16 *))(*a2[46] + 80))(v8, &v57, &v58, &v60); if ( (_WORD)v57 != (_WORD)v58 && (_WORD)v57 != v60 && (_WORD)v58 != v60 ) break; if ( ++v8 >= v7 ) v8 = 0; ++LODWORD(v59); } while ( SLODWORD(v59) < 6 ); v9 = rand(); if ( v9 % 3 == 1 ) { v57 = (unsigned __int16)v58; v58 = v60; goto LABEL_24; } if ( v9 % 3 != 2 ) goto LABEL_24; v10 = v60; } else { LABEL_5: v5 = ((int (__thiscall *)(_DWORD **))(*a2)[1])(a2); if ( !v5 ) return 0; while ( (char *)v5 != dword_BA4B74 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) return 0; } v11 = rand(); HIDWORD(v55) = v11; HIDWORD(v55) = *((unsigned __int16 *)a2[46] + 6) - 1; v59 = (double)v11 / 32767.0; v55 = (signed __int64)((double)SHIDWORD(v55) * v59); v57 = (unsigned __int16)v55; v10 = (unsigned __int16)(v55 + 1); } v58 = v10; LABEL_24: v12 = a2[46]; v13 = v12[8]; v14 = v12[9]; if ( !v13 ) return 0; v15 = 12 * (unsigned __int16)v57; v51 = *(float *)(v15 + v13); v52 = *(float *)(v15 + v13 + 4); v53 = *(float *)(v15 + v13 + 8); v16 = 12 * (unsigned __int16)v58; v54 = *(float *)(v16 + v13); v17 = *(_DWORD *)(v16 + v13 + 4); v18 = *(float *)(v16 + v13 + 8); v55 = __PAIR__(LODWORD(v18), v17); v19 = a3; v48 = v54 + v51; v49 = v52 + *(float *)&v55; v50 = v53 + v18; v20 = v48 * 0.5; v21 = v49; *a3 = v20; v22 = v21 * 0.5; v23 = v50; a3[1] = v22; v24 = v23 * 0.5; a3[2] = v24; v25 = (int)v56; if ( !v56[32] && v14 ) { v26 = *(float *)(v15 + v14); v27 = *(float *)(v15 + v14 + 4); v28 = *(float *)(v15 + v14 + 8); v48 = *(float *)(v16 + v14); v29 = v48 + v26; v30 = v27 + *(float *)(v16 + v14 + 4); v31 = v28 + *(float *)(v16 + v14 + 8); v48 = v29 * 0.5; v49 = v30 * 0.5; v50 = 0.5 * v31; sub_87FDD0(&v48); v61 = a4[1] * a4[1] + *a4 * *a4 + a4[2] * a4[2]; v62 = sqrt(v61); v32 = v48 * v62; v33 = v49; *a4 = v32; v34 = v33 * v62; a4[1] = v34; *(float *)&v35 = v62 * v50; v25 = v35; a4[2] = *(float *)&v35; } v36 = (int)v56; if ( v56[33] == 4 ) { v63 = (double)rand() / 32767.0; v37 = v54 - v51; v38 = v52; v39 = *(float *)&v55 - v52; v40 = *((float *)&v55 + 1) - v53; v41 = v37 * v63; v42 = v39 * v63; v43 = v63 * v40; v44 = v53; v45 = v51 + v41; *v19 = v45; v46 = v38 + v42; v19[1] = v46; *(float *)&v47 = v44 + v43; v25 = v47; v19[2] = *(float *)&v47; } sub_89A8E0(v36, v25, (int)a2, v19, a4); return 1; } //----- (0089B900) -------------------------------------------------------- char __thiscall sub_89B900(void *this, int a2, int a3, int a4, int a5) { int v5; // edi int v6; // ebx int v7; // eax int v9; // eax int v10; // esi int v11; // eax int v12; // esi int v13; // ecx int v14; // edx __int64 v15; // kr00_8 float *v16; // eax double v17; // st6 float v18; // [esp+8h] [ebp-18h] float v19; // [esp+Ch] [ebp-14h] float v20; // [esp+10h] [ebp-10h] float v21; // [esp+14h] [ebp-Ch] __int64 v22; // [esp+18h] [ebp-8h] int v23; // [esp+28h] [ebp+8h] float v24; // [esp+28h] [ebp+8h] float v25; // [esp+2Ch] [ebp+Ch] float v26; // [esp+2Ch] [ebp+Ch] v5 = a3; v6 = (int)this; if ( !a3 ) return 0; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 4))(a3); if ( !v7 ) return 0; while ( (char *)v7 != dword_BA4858 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) return 0; } v9 = *(_DWORD *)(a2 + 8); if ( !v9 ) return 0; v10 = *(unsigned __int16 *)(v9 + 8); HIDWORD(v22) = *(unsigned __int16 *)(v9 + 8); v25 = (double)rand() / 32767.0; v22 = (signed __int64)(v25 * (double)SHIDWORD(v22)); v11 = v22; if ( (signed int)v22 >= v10 - 1 ) v11 = v10 - 1; v12 = *(_DWORD *)(*(_DWORD *)(a2 + 8) + 12) + 44 * v11; v23 = rand(); v13 = *(_DWORD *)(v5 + 188); if ( !v13 ) return 0; v26 = (double)v23 / 32767.0; v22 = (signed __int64)((double)(*(unsigned __int16 *)(v12 + 28) - 1) * v26); sub_89AC90(&v21, &v18, v5, v13, v12, v22); v14 = LODWORD(v21); v15 = v22; *(float *)a4 = v21; *(_QWORD *)(a4 + 4) = v15; if ( *(_DWORD *)(v6 + 128) || (v14 = *(_DWORD *)(v5 + 184), !*(_DWORD *)(v14 + 36)) ) { v16 = (float *)a5; } else { v24 = sub_443070((float *)a5); v16 = (float *)a5; v21 = v18 * v24; v17 = v19; *(float *)a5 = v21; *(float *)&v22 = v17 * v24; v14 = v22; *(_DWORD *)(a5 + 4) = v22; *((float *)&v22 + 1) = v24 * v20; *(_DWORD *)(a5 + 8) = HIDWORD(v22); } sub_89A8E0(v6, v14, v5, (float *)a4, v16); return 1; } //----- (0089BA80) -------------------------------------------------------- char __thiscall sub_89BA80(void *this, int a2, int a3, float *a4, int a5) { int v5; // ebx int v6; // eax int v8; // eax int v9; // edi int v10; // esi int v11; // esi int v12; // eax signed int v13; // ecx int v14; // ecx int v15; // eax int v16; // edi int v17; // ecx int v18; // edx int v19; // eax int v20; // ecx unsigned __int16 *v21; // eax int v22; // ST0C_4 int v23; // edi double v24; // st7 double v25; // st6 double v26; // st5 double v27; // st3 double v28; // st3 float v29; // edx float *v30; // eax double v31; // st6 double v32; // st7 double v33; // st7 float v34; // [esp+4h] [ebp-64h] float v35; // [esp+8h] [ebp-60h] float v36; // [esp+Ch] [ebp-5Ch] float v37; // [esp+10h] [ebp-58h] float v38; // [esp+14h] [ebp-54h] float v39; // [esp+18h] [ebp-50h] float v40; // [esp+1Ch] [ebp-4Ch] float v41; // [esp+20h] [ebp-48h] float v42; // [esp+24h] [ebp-44h] float v43; // [esp+28h] [ebp-40h] float v44; // [esp+2Ch] [ebp-3Ch] float v45; // [esp+30h] [ebp-38h] float v46; // [esp+34h] [ebp-34h] float v47; // [esp+38h] [ebp-30h] float v48; // [esp+3Ch] [ebp-2Ch] float v49; // [esp+40h] [ebp-28h] float v50; // [esp+44h] [ebp-24h] float v51; // [esp+48h] [ebp-20h] float v52; // [esp+4Ch] [ebp-1Ch] float v53; // [esp+50h] [ebp-18h] float v54; // [esp+54h] [ebp-14h] float v55; // [esp+58h] [ebp-10h] __int64 v56; // [esp+5Ch] [ebp-Ch] void *v57; // [esp+64h] [ebp-4h] signed int v58; // [esp+70h] [ebp+8h] int v59; // [esp+70h] [ebp+8h] float v60; // [esp+70h] [ebp+8h] float v61; // [esp+70h] [ebp+8h] float v62; // [esp+70h] [ebp+8h] float v63; // [esp+74h] [ebp+Ch] float v64; // [esp+74h] [ebp+Ch] int v65; // [esp+74h] [ebp+Ch] v5 = a3; v57 = this; if ( !a3 ) return 0; v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 4))(a3); if ( !v6 ) return 0; while ( (char *)v6 != dword_BA4858 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } v8 = *(_DWORD *)(a2 + 8); if ( !v8 ) return 0; v9 = *(unsigned __int16 *)(v8 + 8); HIDWORD(v56) = *(unsigned __int16 *)(v8 + 8); v63 = (double)rand() / 32767.0; v56 = (signed __int64)(v63 * (double)SHIDWORD(v56)); v10 = v56; if ( (signed int)v56 >= v9 - 1 ) v10 = v9 - 1; v11 = *(_DWORD *)(*(_DWORD *)(a2 + 8) + 12) + 44 * v10; if ( !*(_WORD *)(v11 + 30) ) return sub_89B900(v57, a2, v5, (int)a4, a5); v12 = rand(); v13 = *(unsigned __int16 *)(v11 + 30); v58 = v13; v14 = v13 - 1; v64 = (double)v12 / 32767.0; v56 = (signed __int64)((double)v58 * v64); v15 = v56; if ( v15 >= v14 ) v15 = v14; v16 = *(_DWORD *)(v5 + 188); if ( !v16 ) return 0; if ( *(_WORD *)(v11 + 34) ) { v17 = *(_DWORD *)(v11 + 20); HIDWORD(v56) = *(unsigned __int16 *)(v17 + 2 * v15); v18 = *(unsigned __int16 *)(v17 + 2 * v15 + 2); v19 = *(unsigned __int16 *)(v17 + 2 * v15 + 4); v20 = HIDWORD(v56); } else { v21 = (unsigned __int16 *)(*(_DWORD *)(v11 + 20) + 6 * v15); v20 = *v21; v18 = v21[1]; v19 = v21[2]; } v59 = v18; v65 = v19; sub_89AC90(&v49, &v40, v5, v16, v11, v20); sub_89AC90(&v46, &v37, v5, v16, v11, v59); v22 = v16; v23 = (int)v57; sub_89AC90(&v43, &v34, v5, v22, v11, v65); v24 = v49; v52 = v46 + v49; v25 = v50; v53 = v47 + v50; v26 = v51; v54 = v51 + v48; v55 = v52 + v43; *(float *)&v56 = v44 + v53; *((float *)&v56 + 1) = v45 + v54; v52 = v55 * 0.3333333432674408; v27 = *(float *)&v56; *a4 = v52; v53 = v27 * 0.3333333432674408; v28 = *((float *)&v56 + 1); a4[1] = v53; v54 = v28 * 0.3333333432674408; v29 = v54; a4[2] = v54; if ( *(_DWORD *)(v23 + 128) ) { v30 = (float *)a5; } else { v52 = v37 + v40; v53 = v41 + v38; v54 = v42 + v39; v55 = v52 + v34; *(float *)&v56 = v35 + v53; *((float *)&v56 + 1) = v36 + v54; v52 = v55 * 0.3333333432674408; v53 = *(float *)&v56 * 0.3333333432674408; v54 = 0.3333333432674408 * *((float *)&v56 + 1); sub_87FDD0(&v52); v60 = sub_443070((float *)a5); v30 = (float *)a5; v55 = v52 * v60; v31 = v53; *(float *)a5 = v55; *(float *)&v56 = v31 * v60; v29 = *(float *)&v56; *(_DWORD *)(a5 + 4) = v56; *((float *)&v56 + 1) = v60 * v54; v24 = v49; *(_DWORD *)(a5 + 8) = HIDWORD(v56); v25 = v50; v26 = v51; } if ( *(_DWORD *)(v23 + 132) == 3 ) { v55 = v46 - v24; *(float *)&v56 = v47 - v25; *((float *)&v56 + 1) = v48 - v26; v52 = v43 - v24; v53 = v44 - v25; v54 = v45 - v26; v61 = sub_896750(); v55 = v55 * v61; *(float *)&v56 = *(float *)&v56 * v61; *((float *)&v56 + 1) = v61 * *((float *)&v56 + 1); v62 = sub_896750() * (1.0 - v61); v52 = v52 * v62; v53 = v53 * v62; v54 = v62 * v54; v43 = v55 + v49; v44 = *(float *)&v56 + v50; v45 = *((float *)&v56 + 1) + v51; v46 = v43 + v52; v29 = v46; v32 = v44; *a4 = v46; v47 = v32 + v53; v33 = v45; a4[1] = v47; v30 = (float *)a5; v48 = v33 + v54; a4[2] = v48; } sub_89A8E0(v23, SLODWORD(v29), v5, a4, v30); return 1; } //----- (0089BE30) -------------------------------------------------------- char __thiscall sub_89BE30(void *this, int a2, _DWORD *a3, float *a4, float *a5) { int v5; // eax int v7; // ebx int v8; // eax int v9; // edi int v10; // esi int v11; // esi int v12; // eax signed int v13; // ecx int v14; // ecx int v15; // eax int v16; // ecx int v17; // ebx int v18; // edi int v19; // eax int v20; // ST14_4 int v21; // ebx int v22; // ST14_4 int v23; // edi double v24; // st6 double v25; // st6 float v26; // edx float *v27; // eax double v28; // st6 double v29; // st7 double v30; // st7 float v31; // [esp+0h] [ebp-4Ch] float v32; // [esp+4h] [ebp-48h] float v33; // [esp+8h] [ebp-44h] float v34; // [esp+Ch] [ebp-40h] float v35; // [esp+10h] [ebp-3Ch] float v36; // [esp+14h] [ebp-38h] float v37; // [esp+18h] [ebp-34h] float v38; // [esp+1Ch] [ebp-30h] float v39; // [esp+20h] [ebp-2Ch] float v40; // [esp+24h] [ebp-28h] float v41; // [esp+28h] [ebp-24h] float v42; // [esp+2Ch] [ebp-20h] float v43; // [esp+30h] [ebp-1Ch] float v44; // [esp+34h] [ebp-18h] float v45; // [esp+38h] [ebp-14h] float v46; // [esp+3Ch] [ebp-10h] __int64 v47; // [esp+40h] [ebp-Ch] void *v48; // [esp+48h] [ebp-4h] float v49; // [esp+54h] [ebp+8h] signed int v50; // [esp+54h] [ebp+8h] int v51; // [esp+54h] [ebp+8h] float v52; // [esp+58h] [ebp+Ch] float v53; // [esp+58h] [ebp+Ch] v48 = this; if ( !a3 ) return 0; v5 = (*(int (**)(void))(*a3 + 4))(); if ( !v5 ) return 0; while ( (char *)v5 != dword_BA4858 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) return 0; } v7 = a2; v8 = *(_DWORD *)(a2 + 8); if ( !v8 ) return 0; v9 = *(unsigned __int16 *)(v8 + 8); HIDWORD(v47) = *(unsigned __int16 *)(v8 + 8); v49 = (double)rand() / 32767.0; v47 = (signed __int64)(v49 * (double)SHIDWORD(v47)); v10 = v47; if ( (signed int)v47 >= v9 - 1 ) v10 = v9 - 1; v11 = *(_DWORD *)(*(_DWORD *)(v7 + 8) + 12) + 44 * v10; if ( !*(_WORD *)(v11 + 30) ) return sub_89B900(v48, v7, (int)a3, (int)a4, (int)a5); v12 = rand(); v13 = *(unsigned __int16 *)(v11 + 30); v50 = v13; v14 = v13 - 1; *((float *)&v47 + 1) = (double)v12 / 32767.0; v47 = (signed __int64)((double)v50 * *((float *)&v47 + 1)); v15 = v47; if ( (signed int)v47 >= v14 ) v15 = v14; HIDWORD(v47) = a3[47]; if ( !HIDWORD(v47) ) return 0; v16 = *(_DWORD *)(v11 + 20); if ( !*(_WORD *)(v11 + 34) ) v15 *= 3; v17 = *(unsigned __int16 *)(v16 + 2 * v15); v18 = *(unsigned __int16 *)(v16 + 2 * v15 + 2); v51 = *(unsigned __int16 *)(v16 + 2 * v15 + 4); v19 = rand(); if ( v19 % 3 == 1 ) { v17 = v18; LABEL_22: v18 = v51; goto LABEL_23; } if ( v19 % 3 == 2 ) goto LABEL_22; LABEL_23: v20 = v17; v21 = (int)v48; sub_89AC90(&v43, &v34, (int)a3, SHIDWORD(v47), v11, v20); v22 = v18; v23 = (int)a3; sub_89AC90(&v40, &v31, (int)a3, SHIDWORD(v47), v11, v22); v46 = v40 + v43; *(float *)&v47 = v44 + v41; *((float *)&v47 + 1) = v45 + v42; v37 = v46 * 0.5; v24 = *(float *)&v47; *a4 = v37; v38 = v24 * 0.5; v25 = *((float *)&v47 + 1); a4[1] = v38; v39 = v25 * 0.5; v26 = v39; a4[2] = v39; if ( *(_DWORD *)(v21 + 128) ) { v27 = a5; } else { v37 = v31 + v34; v38 = v35 + v32; v39 = v36 + v33; v46 = v37 * 0.5; *(float *)&v47 = v38 * 0.5; *((float *)&v47 + 1) = 0.5 * v39; sub_87FDD0(&v46); v52 = sub_443070(a5); v27 = a5; v37 = v46 * v52; v28 = *(float *)&v47; *a5 = v37; v38 = v28 * v52; v26 = v38; a5[1] = v38; v39 = v52 * *((float *)&v47 + 1); a5[2] = v39; } if ( *(_DWORD *)(v21 + 132) == 4 ) { v37 = v40 - v43; v38 = v41 - v44; v39 = v42 - v45; v53 = sub_896750(); v40 = v37 * v53; v41 = v38 * v53; v42 = v53 * v39; v37 = v40 + v43; v26 = v37; v29 = v41; *a4 = v37; v38 = v29 + v44; v30 = v42; a4[1] = v38; v27 = a5; v39 = v30 + v45; a4[2] = v39; } sub_89A8E0(v21, SLODWORD(v26), v23, a4, v27); return 1; } //----- (0089C140) -------------------------------------------------------- float *sub_89C140() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x94u); if ( v0 ) result = sub_89B310(v0); else result = 0; return result; } //----- (0089C160) -------------------------------------------------------- void __thiscall sub_89C160(float *this, unsigned int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi unsigned int v6; // eax int v7; // eax char *v8; // eax unsigned int v9; // edi char *v10; // ebx char *v11; // eax unsigned int v12; // edi char *v13; // eax unsigned int v14; // edi char *v15; // eax unsigned int v16; // edi char *v17; // eax unsigned int v18; // edi char *v19; // eax unsigned int v20; // edi char *v21; // eax unsigned int v22; // edi char *v23; // ebx int v24; // eax int v25; // eax char *v26; // eax char *v27; // eax unsigned int v28; // edi char *v29; // ebx int v30; // edx int v31; // eax char *v32; // eax unsigned int v33; // edi char *v34; // ebx int v35; // ecx int v36; // edx unsigned int v37; // edi char *v38; // ebx char *v39; // eax unsigned int v40; // edi char *v41; // ebx char *v42; // eax unsigned int v43; // edi char *v44; // ebx char *v45; // eax unsigned int v46; // edi char *v47; // ebx int v48; // eax int v49; // ecx float *v50; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; v50 = this; sub_8A8420(this, a2); v4 = sub_8784D0(*(int *)dword_BA4C78); v5 = v2[3]; a2 = (unsigned int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 24); a2 = 0; if ( v6 ) { do { if ( a2 < v6 ) { v7 = *(_DWORD *)(*((_DWORD *)v50 + 21) + 4 * a2); if ( v7 ) { v8 = sub_878740((int)"Emitter Object", *(_DWORD *)(v7 + 8)); v9 = v2[3]; v10 = v8; if ( v9 < v2[2] || (sub_8237A0(v2, v9 + v2[5]), v9 < v2[2]) ) { if ( v9 < v2[3] ) { if ( v10 ) { if ( !*(_DWORD *)(v2[1] + 4 * v9) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v9) ) { --v2[4]; } } else { v2[3] = v9 + 1; if ( v10 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v9) = v10; } } } v6 = *((_DWORD *)v50 + 24); ++a2; } while ( a2 < v6 ); } switch ( *((_DWORD *)v50 + 33) ) { case 0: v11 = sub_878740((int)"m_eEmissionType", (int)"NI_EMIT_FROM_VERTICES"); v12 = v2[3]; a2 = (unsigned int)v11; if ( v12 >= v2[2] ) sub_8237A0(v2, v12 + v2[5]); sub_823870(v2, v12, &a2); break; case 1: v13 = sub_878740((int)"m_eEmissionType", (int)"NI_EMIT_FROM_FACE_CENTER"); v14 = v2[3]; a2 = (unsigned int)v13; if ( v14 >= v2[2] ) sub_8237A0(v2, v14 + v2[5]); sub_823870(v2, v14, &a2); break; case 2: v15 = sub_878740((int)"m_eEmissionType", (int)"NI_EMIT_FROM_EDGE_CENTER"); v16 = v2[3]; a2 = (unsigned int)v15; if ( v16 >= v2[2] ) sub_8237A0(v2, v16 + v2[5]); sub_823870(v2, v16, &a2); break; case 3: v17 = sub_878740((int)"m_eEmissionType", (int)"NI_EMIT_FROM_FACE_SURFACE"); v18 = v2[3]; a2 = (unsigned int)v17; if ( v18 >= v2[2] ) sub_8237A0(v2, v18 + v2[5]); sub_823870(v2, v18, &a2); break; case 4: v19 = sub_878740((int)"m_eEmissionType", (int)"NI_EMIT_FROM_EDGE_SURFACE"); v20 = v2[3]; a2 = (unsigned int)v19; if ( v20 >= v2[2] ) sub_8237A0(v2, v20 + v2[5]); sub_823870(v2, v20, &a2); break; default: v21 = sub_878740((int)"m_eEmissionType", (int)"UNKNOWN!!!"); v22 = v2[3]; v23 = v21; if ( v22 < v2[2] || (sub_8237A0(v2, v22 + v2[5]), v22 < v2[2]) ) { if ( v22 < v2[3] ) { if ( v23 ) { if ( !*(_DWORD *)(v2[1] + 4 * v22) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v22) ) { --v2[4]; } } else { v2[3] = v22 + 1; if ( v23 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v22) = v23; } break; } v24 = *((_DWORD *)v50 + 32); if ( !v24 ) { v26 = sub_878740((int)"m_eInitVelocityType", (int)"NI_VELOCITY_USE_NORMALS"); goto LABEL_72; } v25 = v24 - 1; if ( v25 ) { if ( v25 != 1 ) { v26 = sub_878740((int)"m_eInitVelocityType", (int)"UNKNOWN!!!"); LABEL_72: v37 = v2[3]; v38 = v26; if ( v37 < v2[2] || (sub_8237A0(v2, v37 + v2[5]), v37 < v2[2]) ) { if ( v37 < v2[3] ) { if ( v38 ) { if ( !*(_DWORD *)(v2[1] + 4 * v37) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v37) ) { --v2[4]; } } else { v2[3] = v37 + 1; if ( v38 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v37) = v38; } goto LABEL_83; } v27 = sub_878740((int)"m_eInitVelocityType", (int)"NI_VELOCITY_USE_DIRECTION"); v28 = v2[3]; v29 = v27; if ( v28 < v2[2] || (sub_8237A0(v2, v28 + v2[5]), v28 < v2[2]) ) { if ( v28 < v2[3] ) { if ( v29 ) { v31 = v2[1]; if ( !*(_DWORD *)(v31 + 4 * v28) ) { ++v2[4]; *(_DWORD *)(v31 + 4 * v28) = v29; goto LABEL_83; } } else if ( *(_DWORD *)(v2[1] + 4 * v28) ) { --v2[4]; } } else { v2[3] = v28 + 1; if ( v29 ) { v30 = v2[1]; ++v2[4]; *(_DWORD *)(v30 + 4 * v28) = v29; goto LABEL_83; } } *(_DWORD *)(v2[1] + 4 * v28) = v29; goto LABEL_83; } } else { v32 = sub_878740((int)"m_eInitVelocityType", (int)"NI_VELOCITY_USE_RANDOM"); v33 = v2[3]; v34 = v32; if ( v33 < v2[2] || (sub_8237A0(v2, v33 + v2[5]), v33 < v2[2]) ) { if ( v33 < v2[3] ) { if ( v34 ) { v36 = v2[1]; if ( !*(_DWORD *)(v36 + 4 * v33) ) { ++v2[4]; *(_DWORD *)(v36 + 4 * v33) = v34; goto LABEL_83; } } else if ( *(_DWORD *)(v2[1] + 4 * v33) ) { --v2[4]; } } else { v2[3] = v33 + 1; if ( v34 ) { v35 = v2[1]; ++v2[4]; *(_DWORD *)(v35 + 4 * v33) = v34; goto LABEL_83; } } *(_DWORD *)(v2[1] + 4 * v33) = v34; goto LABEL_83; } } LABEL_83: v39 = sub_8786B0((int)"m_kEmissionAxis.x", v50[34]); v40 = v2[3]; v41 = v39; if ( v40 < v2[2] || (sub_8237A0(v2, v40 + v2[5]), v40 < v2[2]) ) { if ( v40 < v2[3] ) { if ( v41 ) { if ( !*(_DWORD *)(v2[1] + 4 * v40) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v40) ) { --v2[4]; } } else { v2[3] = v40 + 1; if ( v41 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v40) = v41; } v42 = sub_8786B0((int)"m_kEmissionAxis.y", v50[35]); v43 = v2[3]; v44 = v42; if ( v43 < v2[2] || (sub_8237A0(v2, v43 + v2[5]), v43 < v2[2]) ) { if ( v43 < v2[3] ) { if ( v44 ) { if ( !*(_DWORD *)(v2[1] + 4 * v43) ) ++v2[4]; } else if ( *(_DWORD *)(v2[1] + 4 * v43) ) { --v2[4]; } } else { v2[3] = v43 + 1; if ( v44 ) ++v2[4]; } *(_DWORD *)(v2[1] + 4 * v43) = v44; } v45 = sub_8786B0((int)"m_kEmissionAxis.z", v50[36]); v46 = v2[3]; v47 = v45; if ( v46 < v2[2] || (sub_8237A0(v2, v46 + v2[5]), v46 < v2[2]) ) { if ( v46 < v2[3] ) { if ( v47 ) { v49 = v2[1]; if ( !*(_DWORD *)(v49 + 4 * v46) ) { ++v2[4]; *(_DWORD *)(v49 + 4 * v46) = v47; return; } } else if ( *(_DWORD *)(v2[1] + 4 * v46) ) { --v2[4]; } } else { v2[3] = v46 + 1; if ( v47 ) { v48 = v2[1]; ++v2[4]; *(_DWORD *)(v48 + 4 * v46) = v47; return; } } *(_DWORD *)(v2[1] + 4 * v46) = v47; } } //----- (0089C700) -------------------------------------------------------- char __thiscall sub_89C700(_DWORD *this, _DWORD **a2, int a3, float *a4) { _DWORD *v4; // esi int v5; // eax int v6; // eax unsigned __int16 v8; // ax unsigned int v9; // edi int v10; // esi _DWORD *v11; // ebx int v12; // eax int v13; // ebx int v14; // ecx int v15; // edx int v16; // esi float v17; // edi float v18; // eax float *v19; // edi float v20; // ST34_4 float v21; // ST38_4 float v22; // ST3C_4 float v23; // ST34_4 float v24; // eax float v25; // ecx float v26; // ST38_4 float v27; // eax float v28; // ST3C_4 float v29; // ecx float v30; // edx float v31; // ST1C_4 float v32; // ST20_4 float v33; // ST24_4 float v34; // ST34_4 float v35; // ST38_4 float v36; // ST3C_4 float *v37; // esi float v38; // ST1C_4 float v39; // ST20_4 float v40; // ST24_4 double v41; // st7 double v42; // st6 double v43; // st5 float v44; // ST4C_4 float v45; // ST50_4 float v46; // ST54_4 float v47; // ST4C_4 float v48; // ST50_4 float v49; // ST54_4 float v50; // ST1C_4 float v51; // ST20_4 float v52; // ST24_4 float v53; // ST28_4 float v54; // ST2C_4 float v55; // ST30_4 float v56; // [esp+2Ch] [ebp-48h] float v57; // [esp+30h] [ebp-44h] float v58; // [esp+34h] [ebp-40h] float v59; // [esp+38h] [ebp-3Ch] float v60; // [esp+3Ch] [ebp-38h] float v61; // [esp+40h] [ebp-34h] float v62; // [esp+44h] [ebp-30h] float v63; // [esp+48h] [ebp-2Ch] float v64; // [esp+4Ch] [ebp-28h] unsigned int v65; // [esp+50h] [ebp-24h] float v66; // [esp+54h] [ebp-20h] __int64 v67; // [esp+58h] [ebp-1Ch] _DWORD *v68; // [esp+60h] [ebp-14h] unsigned __int16 v69; // [esp+64h] [ebp-10h] unsigned __int16 v70; // [esp+68h] [ebp-Ch] unsigned __int16 v71; // [esp+6Ch] [ebp-8h] float v72; // [esp+70h] [ebp-4h] float v73; // [esp+80h] [ebp+Ch] float v74; // [esp+84h] [ebp+10h] float v75; // [esp+84h] [ebp+10h] float v76; // [esp+84h] [ebp+10h] float v77; // [esp+84h] [ebp+10h] v4 = this; v68 = this; if ( !a2 ) return 0; v5 = ((int (__thiscall *)(_DWORD **))(*a2)[1])(a2); if ( !v5 ) { LABEL_5: v6 = ((int (__thiscall *)(_DWORD **))(*a2)[1])(a2); if ( v6 ) { while ( (char *)v6 != dword_BA4B74 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } return sub_89B550(v4, a2, (float *)a3, a4); } return 0; } while ( (char *)v5 != dword_BA4858 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_5; } v8 = (*(int (**)(void))(*a2[46] + 76))(); v9 = v8; v65 = v8; v72 = (double)rand() / 32767.0; v67 = (signed __int64)(v72 * (double)v9); v10 = v67; if ( (_DWORD)v67 == v9 ) v10 = v9 - 1; v72 = 0.0; do { (*(void (__stdcall **)(int, unsigned __int16 *, unsigned __int16 *, unsigned __int16 *))(*a2[46] + 80))( v10, &v71, &v70, &v69); if ( v71 != v70 && v71 != v69 && v70 != v69 ) break; if ( ++v10 >= v65 ) v10 = 0; ++LODWORD(v72); } while ( SLODWORD(v72) < 6 ); v11 = a2[46]; v12 = v11[8]; v13 = v11[9]; if ( !v12 ) return 0; v14 = 12 * v71; v62 = *(float *)(v14 + v12); v63 = *(float *)(v14 + v12 + 4); v64 = *(float *)(v14 + v12 + 8); v15 = 12 * v70; v59 = *(float *)(v15 + v12); v60 = *(float *)(v15 + v12 + 4); v61 = *(float *)(v15 + v12 + 8); v66 = v59 + v62; v16 = 12 * v69; v56 = *(float *)(v16 + v12); v17 = *(float *)(v16 + v12 + 4); v18 = *(float *)(v16 + v12 + 8); *(float *)&v67 = v60 + v63; v57 = v17; v19 = (float *)a3; v58 = v18; *((float *)&v67 + 1) = v64 + v61; v20 = v66 + v56; v21 = v57 + *(float *)&v67; v22 = v18 + *((float *)&v67 + 1); v66 = v20 * 0.3333333432674408; *(float *)a3 = v66; *(float *)&v67 = v21 * 0.3333333432674408; *(_DWORD *)(a3 + 4) = v67; *((float *)&v67 + 1) = v22 * 0.3333333432674408; *(_DWORD *)(a3 + 8) = HIDWORD(v67); if ( v68[32] || !v13 ) { v37 = a4; v41 = v64; v43 = v63; v42 = v62; } else { v23 = *(float *)(v14 + v13); v24 = *(float *)(v14 + v13 + 4); v25 = *(float *)(v14 + v13 + 8); v26 = v24; v66 = *(float *)(v15 + v13); v27 = *(float *)(v16 + v13); v28 = v25; v29 = *(float *)(v15 + v13 + 4); v30 = *(float *)(v15 + v13 + 8); v31 = v66 + v23; v67 = __PAIR__(LODWORD(v30), LODWORD(v29)); v32 = v26 + v29; v33 = v28 + v30; v34 = v31 + v27; v35 = *(float *)(v16 + v13 + 4) + v32; v36 = *(float *)(v16 + v13 + 8) + v33; v66 = v34 * 0.3333333432674408; *(float *)&v67 = v35 * 0.3333333432674408; *((float *)&v67 + 1) = 0.3333333432674408 * v36; sub_87FDD0(&v66); v37 = a4; v74 = a4[1] * a4[1] + *a4 * *a4 + a4[2] * a4[2]; v75 = sqrt(v74); v38 = v66 * v75; v39 = *(float *)&v67 * v75; v40 = v75 * *((float *)&v67 + 1); v41 = v64; v42 = v62; v43 = v63; *v37 = v38; v37[1] = v39; v37[2] = v40; } if ( v68[33] == 3 ) { v66 = v59 - v42; *(float *)&v67 = v60 - v43; *((float *)&v67 + 1) = v61 - v41; v44 = v56 - v42; v45 = v57 - v43; v46 = v58 - v41; v76 = (double)rand() / 32767.0; v66 = v66 * v76; *(float *)&v67 = *(float *)&v67 * v76; *((float *)&v67 + 1) = v76 * *((float *)&v67 + 1); v73 = (double)rand() / 32767.0; v77 = v73 * (1.0 - v76); v47 = v44 * v77; v48 = v45 * v77; v49 = v77 * v46; v50 = v66 + v62; v51 = *(float *)&v67 + v63; v52 = *((float *)&v67 + 1) + v64; v53 = v50 + v47; *v19 = v53; v54 = v51 + v48; v19[1] = v54; v55 = v52 + v49; v19[2] = v55; } sub_89A8E0((int)v68, (int)a2, (int)a2, v19, v37); return 1; } //----- (0089CB50) -------------------------------------------------------- void __thiscall sub_89CB50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ebx int v4; // eax int v5; // ebx _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *v8; // eax int v9; // eax _DWORD *v10; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; v10 = this; if ( !a2 ) return; InterlockedIncrement(a2 + 1); sub_9334C0(v3 + 20, (LONG *)&a2); if ( !InterlockedDecrement(v2 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); v4 = v2[47]; if ( !v4 ) { v8 = operator new(0xCu); v7 = v8; if ( v8 ) { *v8 = &NiRefObject::`vftable'; v8[1] = 0; InterlockedIncrement(&Addend); *v7 = &NiPSysMeshEmitter::NiSkinnedEmitterData::`vftable'; v7[2] = 0; goto LABEL_14; } LABEL_13: v7 = 0; goto LABEL_14; } v5 = *(_DWORD *)(v4 + 12); v6 = operator new(0xCu); if ( v5 ) { if ( v6 ) { v7 = sub_89A790(v6); sub_56FF80(v7 + 2, v5); } else { v7 = 0; sub_56FF80((_DWORD *)8, v5); } goto LABEL_14; } if ( !v6 ) goto LABEL_13; v7 = sub_89A790(v6); LABEL_14: a2 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); sub_9334C0(v10 + 26, (LONG *)&a2); if ( v7 && !InterlockedDecrement(v7 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); v9 = v2[46]; if ( v9 ) *(_BYTE *)(v9 + 52) |= 0x33u; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A28ED4: using guessed type void *NiPSysMeshEmitter::NiSkinnedEmitterData::`vftable'; //----- (0089CC70) -------------------------------------------------------- float *__thiscall sub_89CC70(void *this, char *Src) { void *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x94u); if ( v3 ) v4 = sub_89B310(v3); else v4 = 0; sub_8A7D80((float *)v2, (int)v4, Src); sub_81A750((_DWORD *)v4 + 20, *((_DWORD *)v2 + 23)); v4[32] = *((float *)v2 + 32); v4[33] = *((float *)v2 + 33); v4[34] = *((float *)v2 + 34); v4[35] = *((float *)v2 + 35); v4[36] = *((float *)v2 + 36); return v4; } //----- (0089CD00) -------------------------------------------------------- unsigned int __thiscall sub_89CD00(void *this, _DWORD **a2) { _DWORD *v2; // edi int v3; // esi unsigned int result; // eax unsigned int v5; // ecx _DWORD *v6; // ebx _DWORD *v7; // esi int **v8; // edi int v9; // [esp+8h] [ebp-Ch] _DWORD *v10; // [esp+Ch] [ebp-8h] unsigned int v11; // [esp+10h] [ebp-4h] v2 = a2; v3 = (int)this; v9 = (int)this; sub_8A8870(this, (int)a2); sub_8C4C90(*a2, v3, &v10); result = *(_DWORD *)(v3 + 96); v5 = 0; v11 = 0; if ( result ) { while ( 1 ) { if ( v5 < result ) { v6 = *(_DWORD **)(*(_DWORD *)(v3 + 84) + 4 * v5); if ( v6 ) { v7 = (_DWORD *)*v2; v8 = *(int ***)(v7[2] + 4 * (*(int (__thiscall **)(_DWORD, _DWORD *))(*(_DWORD *)*v2 + 4))(*v2, v6)); if ( v8 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, int *))(*v7 + 8))(v7, v6, v8[1]) ) { v8 = (int **)*v8; if ( !v8 ) goto LABEL_9; } sub_89CB50(v10, v8[2]); } else { LABEL_9: sub_89CB50(v10, v6); } v5 = v11; v3 = v9; } } result = *(_DWORD *)(v3 + 96); v11 = ++v5; if ( v5 >= result ) break; v2 = a2; } } return result; } //----- (0089CDB0) -------------------------------------------------------- void __thiscall sub_89CDB0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // edi _DWORD *v5; // eax v2 = this; sub_8A7DF0(a2); v3 = sub_875B00(a2); v4 = v3; if ( v3 ) { sub_81A750(v2 + 20, v3); for ( ; v4; --v4 ) { v5 = (_DWORD *)sub_875AD0(a2); sub_89CB50(v2, v5); } } } //----- (0089CE00) -------------------------------------------------------- void __thiscall sub_89CE00(_DWORD *this, float *a2, float *a3) { _DWORD *v3; // esi unsigned int v4; // edi float v5; // ST24_4 unsigned int v6; // eax int v7; // edi int v8; // ecx _DWORD *v9; // ebx int v10; // [esp+Ch] [ebp-8h] v3 = this; v4 = this[24]; if ( v4 ) { v5 = (double)rand() / 32767.0; v6 = (signed __int64)(v5 * (double)v4); if ( v6 == v4 ) v6 = v4 - 1; if ( v6 < v3[24] ) { v7 = *(_DWORD *)(v3[21] + 4 * v6); if ( v7 ) { v8 = *(_DWORD *)(v7 + 188); v10 = *(_DWORD *)(v7 + 188); if ( v6 >= v3[30] ) v9 = 0; else v9 = *(_DWORD **)(v3[27] + 4 * v6); if ( v8 && v9 && !v9[2] ) { sub_89ABD0(v9, v7); v8 = v10; } switch ( v3[33] ) { case 1: case 3: if ( v8 ) sub_89BA80(v3, (int)v9, v7, a2, (int)a3); else sub_89C700(v3, (_DWORD **)v7, (int)a2, a3); break; case 2: case 4: if ( v8 ) sub_89BE30(v3, (int)v9, (_DWORD *)v7, a2, a3); else sub_89B550(v3, (_DWORD **)v7, a2, a3); break; default: if ( v8 ) sub_89B900(v3, (int)v9, v7, (int)a2, (int)a3); else sub_89B420(v3, v7, a2, a3); break; } } } } } //----- (0089CF80) -------------------------------------------------------- float *sub_89CF80() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysInitialRotSpeedVarCtlr::`vftable'; return v1; } // A2908C: using guessed type void *NiPSysInitialRotSpeedVarCtlr::`vftable'; //----- (0089CFB0) -------------------------------------------------------- char *sub_89CFB0() { return dword_BA4C80; } //----- (0089CFC0) -------------------------------------------------------- int __thiscall sub_89CFC0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 28) = a2; return result; } //----- (0089CFD0) -------------------------------------------------------- float *__thiscall sub_89CFD0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysInitialRotSpeedVarCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2908C: using guessed type void *NiPSysInitialRotSpeedVarCtlr::`vftable'; //----- (0089D020) -------------------------------------------------------- unsigned int __thiscall sub_89D020(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C80); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089D070) -------------------------------------------------------- float *sub_89D070() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysInitialRotSpeedCtlr::`vftable'; return v1; } // A29134: using guessed type void *NiPSysInitialRotSpeedCtlr::`vftable'; //----- (0089D0A0) -------------------------------------------------------- char *sub_89D0A0() { return dword_BA4C88; } //----- (0089D0B0) -------------------------------------------------------- int __thiscall sub_89D0B0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 24); return result; } //----- (0089D0D0) -------------------------------------------------------- float *__thiscall sub_89D0D0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysInitialRotSpeedCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29134: using guessed type void *NiPSysInitialRotSpeedCtlr::`vftable'; //----- (0089D120) -------------------------------------------------------- unsigned int __thiscall sub_89D120(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C88); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089D170) -------------------------------------------------------- float *sub_89D170() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysInitialRotAngleVarCtlr::`vftable'; return v1; } // A291DC: using guessed type void *NiPSysInitialRotAngleVarCtlr::`vftable'; //----- (0089D1A0) -------------------------------------------------------- char *sub_89D1A0() { return dword_BA4C90; } //----- (0089D1B0) -------------------------------------------------------- int __thiscall sub_89D1B0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 36); return result; } //----- (0089D1D0) -------------------------------------------------------- int __thiscall sub_89D1D0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 36) = a2; return result; } //----- (0089D1E0) -------------------------------------------------------- float *__thiscall sub_89D1E0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysInitialRotAngleVarCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A291DC: using guessed type void *NiPSysInitialRotAngleVarCtlr::`vftable'; //----- (0089D230) -------------------------------------------------------- unsigned int __thiscall sub_89D230(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C90); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089D280) -------------------------------------------------------- float *sub_89D280() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysInitialRotAngleCtlr::`vftable'; return v1; } // A29284: using guessed type void *NiPSysInitialRotAngleCtlr::`vftable'; //----- (0089D2B0) -------------------------------------------------------- char *sub_89D2B0() { return dword_BA4C98; } //----- (0089D2C0) -------------------------------------------------------- int __thiscall sub_89D2C0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 32) = a2; return result; } //----- (0089D2D0) -------------------------------------------------------- float *__thiscall sub_89D2D0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysInitialRotAngleCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29284: using guessed type void *NiPSysInitialRotAngleCtlr::`vftable'; //----- (0089D320) -------------------------------------------------------- char __thiscall sub_89D320(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax v2 = a2; v3 = this; if ( !sub_8A7BF0(this, a2) ) return 0; if ( !sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) ) return 0; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4C38 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } return 1; } //----- (0089D380) -------------------------------------------------------- unsigned int __thiscall sub_89D380(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4C98); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089D3D0) -------------------------------------------------------- float *sub_89D3D0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x28u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); v1[6] = 0.0; *((_WORD *)v1 + 14) = 0; v1[8] = 0.0; *(_DWORD *)v1 = &NiPSysGrowFadeModifier::`vftable'; *((_WORD *)v1 + 18) = 0; return v1; } // A2932C: using guessed type void *NiPSysGrowFadeModifier::`vftable'; //----- (0089D410) -------------------------------------------------------- bool __thiscall sub_89D410(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A8740(this, a2) && *(float *)(a2 + 24) == v2[6] && *((_WORD *)v2 + 14) == *(_WORD *)(a2 + 28) && *(float *)(a2 + 32) == v2[8] && *((_WORD *)v2 + 18) == *(_WORD *)(a2 + 36); } //----- (0089D470) -------------------------------------------------------- char *sub_89D470() { return dword_BA4CA0; } //----- (0089D480) -------------------------------------------------------- int __thiscall sub_89D480(int this, int a2, int a3) { int result; // eax unsigned __int16 v4; // bx double v5; // st7 double v6; // st6 double v7; // rt0 double v8; // rt1 double v9; // st6 double v10; // st7 int v11; // edx int v12; // esi __int16 v13; // di int v14; // edx double v15; // st5 float v16; // [esp+4h] [ebp-Ch] float v17; // [esp+8h] [ebp-8h] float v18; // [esp+Ch] [ebp-4h] float v19; // [esp+Ch] [ebp-4h] result = 0; v4 = 0; if ( *(_WORD *)(a3 + 72) > 0u ) { v5 = 1.0; v6 = 0.0; while ( 1 ) { v8 = v6; v9 = v5; v10 = v8; v11 = *(_DWORD *)(a3 + 92); v17 = v9; v12 = v4; v13 = *(_WORD *)(v11 + 28 * v4 + 24); v14 = v11 + 28 * v4; if ( v13 == *(_WORD *)(this + 28) && *(float *)(this + 24) > (double)*(float *)(v14 + 12) && v10 != *(float *)(this + 24) ) { v17 = *(float *)(v14 + 12) / *(float *)(this + 24); } v18 = v9; v16 = *(float *)(v14 + 16) - *(float *)(v14 + 12); if ( v13 == *(_WORD *)(this + 36) && *(float *)(this + 32) > (double)v16 && v10 != *(float *)(this + 32) ) v18 = v16 / *(float *)(this + 32); v15 = v18; if ( v17 < (double)v18 ) v15 = v17; v19 = v15; if ( v19 < 0.000099999997 ) v19 = 0.000099999997; result = a3; ++v4; *(float *)(*(_DWORD *)(a3 + 76) + 4 * v12) = v19; if ( v4 >= *(_WORD *)(a3 + 72) ) break; v7 = v9; v6 = v10; v5 = v7; } } return result; } //----- (0089D580) -------------------------------------------------------- int __thiscall sub_89D580(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x28u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(float *)(v4 + 24) = 0.0; *(float *)(v4 + 32) = 0.0; *(_DWORD *)v4 = &NiPSysGrowFadeModifier::`vftable'; *(_WORD *)(v4 + 28) = 0; *(_WORD *)(v4 + 36) = 0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(float *)(v4 + 24) = *((float *)v2 + 6); *(_WORD *)(v4 + 28) = *((_WORD *)v2 + 14); *(float *)(v4 + 32) = *((float *)v2 + 8); *(_WORD *)(v4 + 36) = *((_WORD *)v2 + 18); return v4; } // A2932C: using guessed type void *NiPSysGrowFadeModifier::`vftable'; //----- (0089D5F0) -------------------------------------------------------- int __thiscall sub_89D5F0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // edi int (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 6, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 2; v9(v8, v3 + 7, 2, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v3 + 8, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v13 + 4); a2 = 2; return v14(v13, v3 + 9, 2, &a2, 1); } //----- (0089D690) -------------------------------------------------------- int __thiscall sub_89D690(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, signed int *, signed int); // eax int v13; // edi int (__cdecl *v14)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A8930(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 6, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 2; v9(v8, v3 + 7, 2, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 8, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v13 + 8); a2 = 2; return v14(v13, v3 + 9, 2, &a2, 1); } //----- (0089D730) -------------------------------------------------------- unsigned int __thiscall sub_89D730(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4CA0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Grow Time", *((float *)v3 + 6)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8785F0((int)"Grow Generation", *((_WORD *)v3 + 14)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Fade Time", *((float *)v3 + 8)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8785F0((int)"Fade Generation", *((_WORD *)v3 + 18)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); return sub_823870(v2, v13, &a2); } //----- (0089D860) -------------------------------------------------------- float *sub_89D860() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysGravityStrengthCtlr::`vftable'; return v1; } // A293B4: using guessed type void *NiPSysGravityStrengthCtlr::`vftable'; //----- (0089D890) -------------------------------------------------------- char *sub_89D890() { return dword_BA4CA8; } //----- (0089D8A0) -------------------------------------------------------- int __thiscall sub_89D8A0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 44); return result; } //----- (0089D8C0) -------------------------------------------------------- int __thiscall sub_89D8C0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 44) = a2; return result; } //----- (0089D8D0) -------------------------------------------------------- float *__thiscall sub_89D8D0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysGravityStrengthCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A293B4: using guessed type void *NiPSysGravityStrengthCtlr::`vftable'; //----- (0089D920) -------------------------------------------------------- char __thiscall sub_89D920(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax v2 = a2; v3 = this; if ( !sub_8A7BF0(this, a2) ) return 0; if ( !sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) ) return 0; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4CB8 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } return 1; } //----- (0089D980) -------------------------------------------------------- unsigned int __thiscall sub_89D980(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CA8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089D9D0) -------------------------------------------------------- int __thiscall sub_89D9D0(const char **this, signed int a2) { const char **v2; // esi v2 = this; sub_8A8C60(this, a2); return sub_860940((char *)v2 + 48, a2); } //----- (0089D9F0) -------------------------------------------------------- char *sub_89D9F0() { return dword_BA4CB0; } //----- (0089DA00) -------------------------------------------------------- void *__thiscall sub_89DA00(void *this, char a2) { void *v2; // esi v2 = this; sub_8A8700(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089DA30) -------------------------------------------------------- float *__thiscall sub_89DA30(float *this) { float *v1; // esi float *v2; // ecx float v3; // ST08_4 float v4; // ST0C_4 double v5; // st7 float v6; // ST10_4 v1 = this; sub_8A8AA0(this); *(_DWORD *)v1 = &NiPSysGravityFieldModifier::`vftable'; v2 = v1 + 15; v3 = -*(float *)&dword_ABD498; v4 = -*(float *)&dword_ABD49C; v5 = *(float *)&dword_ABD4A0; v1[12] = v3; *v2 = v3; v6 = -v5; v1[13] = v4; v2[1] = v4; v1[14] = v6; v2[2] = v6; sub_4430B0(v1 + 15); return v1; } // A2945C: using guessed type void *NiPSysGravityFieldModifier::`vftable'; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; //----- (0089DAA0) -------------------------------------------------------- float *sub_89DAA0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x48u); if ( v0 ) result = sub_89DA30(v0); else result = 0; return result; } //----- (0089DAC0) -------------------------------------------------------- void __thiscall sub_89DAC0(int *this, signed int a2) { int *v2; // edi _DWORD *v3; // ecx v2 = this; sub_8A8BB0(this, a2); sub_8608D0((char *)v2 + 48, a2); v2[12] = v2[12]; v2[13] = v2[13]; v2[14] = v2[14]; v3 = v2 + 15; *v3 = v2[12]; v3[1] = v2[13]; v3[2] = v2[14]; sub_4430B0((float *)v2 + 15); } //----- (0089DB10) -------------------------------------------------------- int __fastcall sub_89DB10(int a1, int a2, float a3, int a4) { int v4; // ebx int v5; // esi __int64 v6; // rax double v7; // st5 float *v8; // ecx double v9; // st5 __int16 v10; // fps bool v11; // c0 char v12; // c2 bool v13; // c3 float v14; // ST18_4 float v15; // ST1C_4 float v16; // ST20_4 float v18; // [esp+1Ch] [ebp-E4h] float v19; // [esp+20h] [ebp-E0h] float v20; // [esp+24h] [ebp-DCh] int v21; // [esp+28h] [ebp-D8h] char v22; // [esp+2Ch] [ebp-D4h] char v23; // [esp+60h] [ebp-A0h] char v24; // [esp+94h] [ebp-6Ch] char v25; // [esp+C8h] [ebp-38h] v4 = a1; qmemcpy(&v22, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); qmemcpy(&v23, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); v21 = a4; sub_87C3F0((float *)&v23, a2, (float *)&v24); sub_85BDC0((float *)&v24, (float *)&v25, (float *)&v22); sub_85DA90((float *)&v25, &v18, (float *)(v4 + 48)); sub_4430B0(&v18); v5 = v21; v6 = 0i64; v7 = *(float *)(v4 + 28); v18 = v18 * v7; v19 = v19 * v7; v20 = v7 * v20; if ( *(_WORD *)(v21 + 72) > 0u ) { do { LODWORD(v6) = *(_DWORD *)(v5 + 92); v8 = (float *)(v6 + 28 * WORD2(v6)); *(float *)&v21 = a3 - v8[5]; v9 = *(float *)&v21; v11 = 0.0 < *(float *)&v21; v12 = 0; v13 = 0.0 == *(float *)&v21; LOWORD(v6) = v10; if ( 0.0 != *(float *)&v21 ) { v14 = v18 * v9; v15 = v19 * v9; v16 = v9 * v20; *v8 = *v8 + v14; v8[1] = v15 + v8[1]; v8[2] = v8[2] + v16; } ++WORD2(v6); } while ( WORD2(v6) < *(_WORD *)(v5 + 72) ); } return v6; } //----- (0089DC90) -------------------------------------------------------- float *__thiscall sub_89DC90(float *this, char *Src) { float *v2; // edi float *v3; // eax float *v4; // esi _DWORD *v5; // ecx v2 = this; v3 = (float *)operator new(0x48u); if ( v3 ) v4 = sub_89DA30(v3); else v4 = 0; sub_8A8AD0(v2, (int)v4, Src); v4[12] = v2[12]; v4[13] = v2[13]; v4[14] = v2[14]; v5 = v4 + 15; *v5 = *((_DWORD *)v2 + 12); v5[1] = *((_DWORD *)v2 + 13); v5[2] = *((_DWORD *)v2 + 14); sub_4430B0(v4 + 15); return v4; } //----- (0089DD00) -------------------------------------------------------- void __thiscall sub_89DD00(int this, float a2, int a3) { int v3; // ebx double v4; // st7 int v5; // ecx int v6; // esi int v7; // edx double v8; // st7 float *v9; // edi double v10; // st6 bool v11; // zf float *v12; // eax float v13; // ST38_4 float v14; // ST3C_4 float v15; // ST40_4 long double v16; // st5 double v17; // ST14_8 float v18; // ST44_4 float v19; // ST48_4 float v20; // ST4C_4 float v21; // ST20_4 float v22; // ST24_4 float v23; // ST28_4 float v24; // [esp+1Ch] [ebp-134h] float v25; // [esp+50h] [ebp-100h] float v26; // [esp+54h] [ebp-FCh] float v27; // [esp+58h] [ebp-F8h] float v28; // [esp+5Ch] [ebp-F4h] float v29; // [esp+60h] [ebp-F0h] float v30; // [esp+64h] [ebp-ECh] float v31; // [esp+68h] [ebp-E8h] float v32; // [esp+6Ch] [ebp-E4h] float v33; // [esp+70h] [ebp-E0h] int v34; // [esp+74h] [ebp-DCh] int v35; // [esp+78h] [ebp-D8h] char v36; // [esp+7Ch] [ebp-D4h] char v37; // [esp+B0h] [ebp-A0h] char v38; // [esp+E4h] [ebp-6Ch] char v39; // [esp+118h] [ebp-38h] float v40; // [esp+13Ch] [ebp-14h] float v41; // [esp+140h] [ebp-10h] float v42; // [esp+144h] [ebp-Ch] v3 = this; v4 = *(float *)(this + 28); v35 = a3; if ( 0.0 != v4 ) { if ( *(_WORD *)(a3 + 72) ) { v5 = *(_DWORD *)(this + 24); if ( v5 ) { if ( *(_BYTE *)(v3 + 36) || *(float *)(v3 + 32) != 0.0 ) { qmemcpy(&v37, (const void *)(v5 + 104), 0x34u); qmemcpy(&v36, (const void *)(*(_DWORD *)(v3 + 16) + 104), 0x34u); sub_87C3F0((float *)&v36, a3, (float *)&v38); sub_85BDC0((float *)&v38, (float *)&v39, (float *)&v37); v25 = v40; v26 = v41; v24 = *(float *)(v3 + 32) * 0.5; v27 = v42; sub_85DA90((float *)&v39, &v28, (float *)(v3 + 60)); v6 = v35; v7 = 0; v34 = 0; if ( *(_WORD *)(v35 + 72) > 0u ) { v8 = 0.0; do { v9 = (float *)(*(_DWORD *)(v6 + 92) + 28 * (unsigned __int16)v7); *(float *)&v35 = a2 - v9[5]; v10 = *(float *)&v35; if ( v8 != *(float *)&v35 ) { v11 = *(_BYTE *)(v3 + 36) == 0; v12 = (float *)(*(_DWORD *)(v6 + 32) + 12 * (unsigned __int16)v7); v13 = *v12 - v25; v14 = v12[1] - v26; v15 = v12[2] - v27; *(float *)&v35 = v14 * v14 + v13 * v13 + v15 * v15; v16 = *(float *)&v35; if ( v11 || *(float *)(v3 + 44) >= v16 ) { if ( v8 == *(float *)(v3 + 32) || v8 == v16 ) { *(float *)&v35 = v10 * *(float *)(v3 + 28); v21 = v28 * *(float *)&v35; v31 = v21; v22 = v29 * *(float *)&v35; v32 = v22; v23 = *(float *)&v35 * v30; v33 = v23; } else { v17 = v10 * *(float *)(v3 + 28); *(float *)&v35 = pow(v16, v24); *(float *)&v35 = v17 / sub_8863A0(1.0, *(float *)&v35); v18 = *(float *)&v35 * v28; v31 = v18; v19 = v29 * *(float *)&v35; v32 = v19; v7 = v34; v20 = *(float *)&v35 * v30; v8 = 0.0; v33 = v20; } *v9 = *v9 + v31; v9[1] = v9[1] + v32; v9[2] = v33 + v9[2]; } } v34 = ++v7; } while ( (unsigned __int16)v7 < *(_WORD *)(v6 + 72) ); } } else { sub_89DB10(v3, a3, a2, a3); } } } } } //----- (0089E080) -------------------------------------------------------- unsigned int __thiscall sub_89E080(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4CB0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_85F140(v3 + 12, (int)"Direction"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (0089E100) -------------------------------------------------------- float *sub_89E100() { float *v0; // eax float *v1; // esi int v2; // edx float *result; // eax v0 = (float *)operator new(0x3Cu); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); *(_DWORD *)v1 = &NiPSysGravityModifier::`vftable'; v1[6] = 0.0; *((_DWORD *)v1 + 7) = dword_ABD48C; *((_DWORD *)v1 + 8) = dword_ABD490; v2 = dword_ABD494; v1[10] = 0.0; *((_DWORD *)v1 + 9) = v2; v1[11] = 1.0; v1[12] = 0.0; result = v1; v1[13] = 0.0; v1[14] = 1.0; return result; } // A294AC: using guessed type void *NiPSysGravityModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (0089E160) -------------------------------------------------------- int __thiscall sub_89E160(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8A8720(a2); result = sub_875AD0(a2); v2[6] = result; return result; } //----- (0089E180) -------------------------------------------------------- char *sub_89E180() { return dword_BA4CB8; } //----- (0089E190) -------------------------------------------------------- int __thiscall sub_89E190(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax int v4; // esi int v5; // edx int result; // eax v2 = this; v3 = operator new(0x3Cu); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(_DWORD *)v4 = &NiPSysGravityModifier::`vftable'; *(_DWORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = dword_ABD48C; *(_DWORD *)(v4 + 32) = dword_ABD490; v5 = dword_ABD494; *(float *)(v4 + 40) = 0.0; *(_DWORD *)(v4 + 36) = v5; *(float *)(v4 + 44) = 1.0; *(_DWORD *)(v4 + 48) = 0; *(float *)(v4 + 52) = 0.0; *(float *)(v4 + 56) = 1.0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(_DWORD *)(v4 + 28) = *((_DWORD *)v2 + 7); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); *(_DWORD *)(v4 + 36) = *((_DWORD *)v2 + 9); *(float *)(v4 + 40) = *((float *)v2 + 10); result = v4; *(float *)(v4 + 44) = *((float *)v2 + 11); *(_DWORD *)(v4 + 48) = *((_DWORD *)v2 + 12); *(float *)(v4 + 52) = *((float *)v2 + 13); *(float *)(v4 + 56) = *((float *)v2 + 14); return result; } // A294AC: using guessed type void *NiPSysGravityModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (0089E240) -------------------------------------------------------- void __fastcall sub_89E240(int a1, int a2, float a3, int a4) { bool v4; // zf int v5; // ebx int v6; // eax int *v7; // eax float v8; // ecx float v9; // edx int v10; // eax float v11; // edx int v12; // esi float *v13; // edi float v14; // ebx int v15; // esi float *v16; // edi float v17; // ebx int v18; // esi float *v19; // edi int v20; // esi float *v21; // edi double v22; // st6 double v23; // st7 int v24; // eax double v25; // st7 float v26; // ecx double v27; // st6 double v28; // st5 double v29; // st4 double v30; // st3 int v31; // esi float v32; // edi int v33; // esi float *v34; // edi double v35; // st6 double v36; // st5 double v37; // st4 double v38; // st4 double v39; // rtt bool v40; // c0 double v41; // st7 double v42; // st6 double v43; // st7 int v44; // esi float *v45; // edi double v46; // st6 double v47; // st7 float v48; // [esp+0h] [ebp-144h] float v49; // [esp+4h] [ebp-140h] float v50; // [esp+8h] [ebp-13Ch] float v51; // [esp+Ch] [ebp-138h] float v52; // [esp+10h] [ebp-134h] float v53; // [esp+14h] [ebp-130h] float v54; // [esp+18h] [ebp-12Ch] float v55; // [esp+1Ch] [ebp-128h] float v56; // [esp+20h] [ebp-124h] float v57; // [esp+24h] [ebp-120h] float v58; // [esp+28h] [ebp-11Ch] float v59; // [esp+2Ch] [ebp-118h] float v60; // [esp+30h] [ebp-114h] float v61; // [esp+34h] [ebp-110h] float v62; // [esp+38h] [ebp-10Ch] float v63; // [esp+3Ch] [ebp-108h] float v64; // [esp+40h] [ebp-104h] float v65; // [esp+44h] [ebp-100h] float v66; // [esp+48h] [ebp-FCh] float v67; // [esp+4Ch] [ebp-F8h] float v68; // [esp+50h] [ebp-F4h] float v69; // [esp+54h] [ebp-F0h] float v70; // [esp+58h] [ebp-ECh] float v71; // [esp+5Ch] [ebp-E8h] float v72; // [esp+60h] [ebp-E4h] float v73; // [esp+64h] [ebp-E0h] float v74; // [esp+68h] [ebp-DCh] float v75; // [esp+6Ch] [ebp-D8h] char v76; // [esp+70h] [ebp-D4h] char v77; // [esp+A4h] [ebp-A0h] char v78; // [esp+D8h] [ebp-6Ch] char v79; // [esp+10Ch] [ebp-38h] float v80; // [esp+130h] [ebp-14h] float v81; // [esp+134h] [ebp-10h] float v82; // [esp+138h] [ebp-Ch] v4 = *(_WORD *)(a4 + 72) == 0; v63 = a3; v5 = a1; v75 = *(float *)&a4; if ( !v4 ) { v6 = *(_DWORD *)(a1 + 24); if ( v6 ) { qmemcpy(&v78, (const void *)(v6 + 104), 0x34u); qmemcpy(&v76, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v76, a2, (float *)&v77); sub_85BDC0((float *)&v77, (float *)&v79, (float *)&v78); v51 = v80; v52 = v81; v53 = v82; v7 = (int *)sub_85DA90((float *)&v79, &v48, (float *)(v5 + 28)); v8 = *((float *)v7 + 1); v67 = *(float *)v7; v9 = *((float *)v7 + 2); v68 = v8; v69 = v9; sub_4430B0(&v67); v10 = *(_DWORD *)(v5 + 48); LODWORD(v11) = *(unsigned __int16 *)(LODWORD(v75) + 72); v73 = *(float *)(v5 + 44) * 1.600000023841858; if ( v10 ) { if ( v10 == 1 ) { if ( 0.0 != *(float *)(v5 + 40) || 0.0 != *(float *)(v5 + 52) ) { if ( 0.0 != *(float *)(v5 + 40) || 0.0 == *(float *)(v5 + 52) ) { if ( 0.0 == *(float *)(v5 + 40) || 0.0 != *(float *)(v5 + 52) ) { if ( 0.0 != *(float *)(v5 + 40) && *(float *)(v5 + 52) != 0.0 ) { v20 = *(_DWORD *)(LODWORD(v75) + 92); v21 = *(float **)(LODWORD(v75) + 32); v74 = *(float *)(v5 + 56) * *(float *)(v5 + 52) * 500.0; if ( LOWORD(v11) > 0u ) { v22 = v73; v73 = v11; v70 = v67 * v22; v71 = v68 * v22; v72 = v22 * v69; do { v54 = sub_61E8B0() * v74; v55 = sub_61E8B0() * v74; v56 = sub_61E8B0() * v74; v48 = v51 - *v21; v49 = v52 - v21[1]; v50 = v53 - v21[2]; v75 = sub_4430B0(&v48) * -*(float *)(v5 + 40); v75 = exp(v75); v20 += 28; v21 += 3; v4 = LODWORD(v73)-- == 1; v64 = v70 * v75; v65 = v71 * v75; v66 = v75 * v72; v60 = v64 + v54; v61 = v65 + v55; v62 = v66 + v56; v75 = v63 - *(float *)(v20 - 8); v57 = v60 * v75; v58 = v61 * v75; v59 = v75 * v62; *(float *)(v20 - 28) = v57 + *(float *)(v20 - 28); *(float *)(v20 - 24) = *(float *)(v20 - 24) + v58; *(float *)(v20 - 20) = v59 + *(float *)(v20 - 20); } while ( !v4 ); } } } else { v18 = *(_DWORD *)(LODWORD(v75) + 92); v19 = *(float **)(LODWORD(v75) + 32); if ( LOWORD(v11) > 0u ) { v74 = v11; do { v67 = v51 - *v19; v68 = v52 - v19[1]; v69 = v53 - v19[2]; v75 = sub_4430B0(&v67) * -*(float *)(v5 + 40); v75 = exp(v75); v18 += 28; v19 += 3; v4 = LODWORD(v74)-- == 1; v75 = v75 * v73 * (v63 - *(float *)(v18 - 8)); v70 = v67 * v75; v71 = v68 * v75; v72 = v75 * v69; *(float *)(v18 - 28) = *(float *)(v18 - 28) + v70; *(float *)(v18 - 24) = v71 + *(float *)(v18 - 24); *(float *)(v18 - 20) = *(float *)(v18 - 20) + v72; } while ( !v4 ); } } } else { v15 = *(_DWORD *)(LODWORD(v75) + 92); v16 = *(float **)(LODWORD(v75) + 32); v74 = *(float *)(v5 + 56) * *(float *)(v5 + 52) * 500.0; if ( LOWORD(v11) > 0u ) { v17 = v11; do { v57 = v51 - *v16; v58 = v52 - v16[1]; v59 = v53 - v16[2]; sub_4430B0(&v67); v54 = sub_61E8B0() * v74; v55 = sub_61E8B0() * v74; v15 += 28; v16 += 3; --LODWORD(v17); v56 = sub_61E8B0() * v74; v60 = v57 * v73; v61 = v58 * v73; v62 = v73 * v59; v64 = v60 + v54; v65 = v61 + v55; v66 = v62 + v56; v75 = v63 - *(float *)(v15 - 8); v70 = v64 * v75; v71 = v65 * v75; v72 = v75 * v66; *(float *)(v15 - 28) = v70 + *(float *)(v15 - 28); *(float *)(v15 - 24) = v71 + *(float *)(v15 - 24); *(float *)(v15 - 20) = v72 + *(float *)(v15 - 20); } while ( v17 != 0.0 ); } } } else { v12 = *(_DWORD *)(LODWORD(v75) + 92); v13 = *(float **)(LODWORD(v75) + 32); if ( LOWORD(v11) > 0u ) { v14 = v11; do { v67 = v51 - *v13; v68 = v52 - v13[1]; v69 = v53 - v13[2]; sub_4430B0(&v67); v12 += 28; v13 += 3; --LODWORD(v14); v75 = (v63 - *(float *)(v12 - 8)) * v73; v57 = v67 * v75; v58 = v68 * v75; v59 = v75 * v69; *(float *)(v12 - 28) = *(float *)(v12 - 28) + v57; *(float *)(v12 - 24) = v58 + *(float *)(v12 - 24); *(float *)(v12 - 20) = *(float *)(v12 - 20) + v59; } while ( v14 != 0.0 ); } } } } else { v23 = 0.0; if ( 0.0 != *(float *)(v5 + 40) || 0.0 != *(float *)(v5 + 52) ) { if ( 0.0 != *(float *)(v5 + 40) || 0.0 == *(float *)(v5 + 52) ) { if ( 0.0 == *(float *)(v5 + 40) || 0.0 != *(float *)(v5 + 52) ) { if ( 0.0 != *(float *)(v5 + 40) && *(float *)(v5 + 52) != 0.0 ) { v44 = *(_DWORD *)(LODWORD(v75) + 92); v45 = *(float **)(LODWORD(v75) + 32); v74 = *(float *)(v5 + 56) * *(float *)(v5 + 52) * 500.0; if ( LOWORD(v11) > 0u ) { v46 = v73; v73 = v11; v64 = v67 * v46; v65 = v68 * v46; v66 = v46 * v69; do { v60 = sub_61E8B0() * v74; v61 = sub_61E8B0() * v74; v62 = sub_61E8B0() * v74; v70 = v51 - *v45; v71 = v52 - v45[1]; v72 = v53 - v45[2]; v75 = v70 * v67 + v71 * v68 + v72 * v69; v47 = v75; if ( v75 >= 0.0 ) v75 = v47 * -*(float *)(v5 + 40); else v75 = v47 * *(float *)(v5 + 40); v75 = exp(v75); v44 += 28; v45 += 3; v4 = LODWORD(v73)-- == 1; v54 = v64 * v75; v55 = v65 * v75; v56 = v75 * v66; v57 = v54 + v60; v58 = v55 + v61; v59 = v56 + v62; v75 = v63 - *(float *)(v44 - 8); v48 = v57 * v75; v49 = v58 * v75; v50 = v75 * v59; *(float *)(v44 - 28) = *(float *)(v44 - 28) + v48; *(float *)(v44 - 24) = v49 + *(float *)(v44 - 24); *(float *)(v44 - 20) = *(float *)(v44 - 20) + v50; } while ( !v4 ); } } } else { v33 = *(_DWORD *)(LODWORD(v75) + 92); v34 = *(float **)(LODWORD(v75) + 32); if ( LOWORD(v11) > 0u ) { v35 = v69; v75 = v11; v36 = v68; v37 = v67; while ( 1 ) { v70 = v51 - *v34; v71 = v52 - v34[1]; v72 = v53 - v34[2]; v74 = v35 * v72 + v36 * v71 + v37 * v70; v40 = v74 < v23; v41 = v74; v74 = v40 ? (float)(v41 * *(float *)(v5 + 40)) : (float)(v41 * -*(float *)(v5 + 40)); v74 = exp(v74); v33 += 28; v34 += 3; v4 = LODWORD(v75)-- == 1; v74 = (v63 - *(float *)(v33 - 8)) * (v74 * v73); v42 = v67; v64 = v74 * v67; v36 = v68; v65 = v68 * v74; v43 = v69; v66 = v74 * v69; *(float *)(v33 - 28) = *(float *)(v33 - 28) + v64; *(float *)(v33 - 24) = v65 + *(float *)(v33 - 24); *(float *)(v33 - 20) = v66 + *(float *)(v33 - 20); if ( v4 ) break; v38 = v43; v23 = 0.0; v39 = v38; v37 = v42; v35 = v39; } } } } else { v31 = *(_DWORD *)(LODWORD(v75) + 92); v74 = *(float *)(v5 + 56) * *(float *)(v5 + 52) * 500.0; if ( LOWORD(v11) > 0u ) { v32 = v11; v70 = v67 * v73; v71 = v68 * v73; v72 = v73 * v69; do { v64 = sub_61E8B0() * v74; v65 = sub_61E8B0() * v74; v31 += 28; --LODWORD(v32); v66 = sub_61E8B0() * v74; v54 = v70 + v64; v55 = v71 + v65; v56 = v72 + v66; v75 = v63 - *(float *)(v31 - 8); v60 = v54 * v75; v61 = v55 * v75; v62 = v75 * v56; *(float *)(v31 - 28) = *(float *)(v31 - 28) + v60; *(float *)(v31 - 24) = v61 + *(float *)(v31 - 24); *(float *)(v31 - 20) = v62 + *(float *)(v31 - 20); } while ( v32 != 0.0 ); } } } else { v24 = *(_DWORD *)(LODWORD(v75) + 92); if ( LOWORD(v11) > 0u ) { v25 = v69; v26 = v11; v27 = v68; v28 = v67; v29 = v73; v30 = v63; do { v24 += 28; --LODWORD(v26); v75 = (v30 - *(float *)(v24 - 8)) * v29; v70 = v28 * v75; v71 = v27 * v75; v72 = v75 * v25; *(float *)(v24 - 28) = v70 + *(float *)(v24 - 28); *(float *)(v24 - 24) = v71 + *(float *)(v24 - 24); *(float *)(v24 - 20) = v72 + *(float *)(v24 - 20); } while ( v26 != 0.0 ); } } } } } } //----- (0089EF60) -------------------------------------------------------- char __thiscall sub_89EF60(void *this, int a2) { void *v2; // esi int v3; // eax v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v3 = *((_DWORD *)v2 + 6); if ( v3 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) goto LABEL_19; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) { LABEL_19: if ( *(_DWORD *)(a2 + 24) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 28))(*(_DWORD *)(a2 + 24)) ) { return 0; } } if ( !(unsigned __int8)sub_85ECE0((float *)(a2 + 28), (float *)v2 + 7) && *((float *)v2 + 10) == *(float *)(a2 + 40) && *((float *)v2 + 11) == *(float *)(a2 + 44) && *(_DWORD *)(a2 + 48) == *((_DWORD *)v2 + 12) && *((float *)v2 + 13) == *(float *)(a2 + 52) && *((float *)v2 + 14) == *(float *)(a2 + 56) ) { return 1; } return 0; } //----- (0089F020) -------------------------------------------------------- int __thiscall sub_89F020(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST00_4 int (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int result; // eax void (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // edx int v15; // ST28_4 int v16; // esi int (__cdecl *v17)(int, int *, signed int, signed int *, signed int); // ecx int v18; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_8A88B0(this, a2); sub_876290((void **)v2); sub_8608D0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; result = v12(v11, &v18, 4, &a2, 1); v3[12] = v18; if ( *(_DWORD *)(v2 + 28) >= 0xA00010Eu ) { v14 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v15 = *(_DWORD *)(v2 + 352); a2 = 4; v14(v15, v3 + 13, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v16 + 4); a2 = 4; result = v17(v16, v3 + 14, 4, &a2, 1); } return result; } //----- (0089F0F0) -------------------------------------------------------- int __thiscall sub_89F0F0(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, const char **, signed int, signed int *, signed int); // eax int v16; // edi int (__cdecl *v17)(int, const char **, signed int, signed int *, signed int); // edx v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[6]); sub_860940((char *)v3 + 28, (signed int)v2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 12, 4, &a2, 1); v13 = v2[89]; v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 13, 4, &a2, 1); v16 = v2[89]; v17 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v16 + 8); a2 = 4; return v17(v16, v3 + 14, 4, &a2, 1); } //----- (0089F1B0) -------------------------------------------------------- unsigned int __thiscall sub_89F1B0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx int v20; // edi const char *v21; // eax char *v22; // eax unsigned int v23; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4CB8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 6); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Gravity Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_85F140((float *)v3 + 7, (int)"Gravity Axis"); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Decay", *((float *)v3 + 10)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"Strength", *((float *)v3 + 11)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"Turbulence", *((float *)v3 + 13)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_8786B0((int)"TurbulenceScale", *((float *)v3 + 14)); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = *((_DWORD *)v3 + 12); if ( v20 ) { v21 = "FORCE_SPHERICAL"; if ( v20 != 1 ) v21 = "Unknown"; } else { v21 = "FORCE_PLANAR"; } v22 = sub_878740((int)"Force Type", (int)v21); v23 = v2[3]; a2 = (int)v22; if ( v23 >= v2[2] ) sub_8237A0(v2, v23 + v2[5]); return sub_823870(v2, v23, &a2); } //----- (0089F3D0) -------------------------------------------------------- float *__thiscall sub_89F3D0(_DWORD *this, _DWORD *a2) { return sub_8A9AE0(this, a2); } //----- (0089F3E0) -------------------------------------------------------- char *sub_89F3E0() { return dword_BA4CC0; } //----- (0089F3F0) -------------------------------------------------------- int __thiscall sub_89F3F0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 40) = a2; *(float *)(result + 44) = a2 * a2; return result; } //----- (0089F410) -------------------------------------------------------- float *__thiscall sub_89F410(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysFieldMaxDistanceCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29584: using guessed type void *NiPSysFieldMaxDistanceCtlr::`vftable'; //----- (0089F460) -------------------------------------------------------- unsigned int __thiscall sub_89F460(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CC0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089F4B0) -------------------------------------------------------- float *sub_89F4B0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysFieldMagnitudeCtlr::`vftable'; return v1; } // A2962C: using guessed type void *NiPSysFieldMagnitudeCtlr::`vftable'; //----- (0089F4E0) -------------------------------------------------------- char *sub_89F4E0() { return dword_BA4CC8; } //----- (0089F4F0) -------------------------------------------------------- int __thiscall sub_89F4F0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 28); return result; } //----- (0089F510) -------------------------------------------------------- float *__thiscall sub_89F510(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysFieldMagnitudeCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2962C: using guessed type void *NiPSysFieldMagnitudeCtlr::`vftable'; //----- (0089F560) -------------------------------------------------------- char __thiscall sub_89F560(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax v2 = a2; v3 = this; if ( !sub_8A7BF0(this, a2) ) return 0; if ( !sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) ) return 0; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4DB8 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } return 1; } //----- (0089F5C0) -------------------------------------------------------- unsigned int __thiscall sub_89F5C0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CC8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089F610) -------------------------------------------------------- float *sub_89F610() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysFieldAttenuationCtlr::`vftable'; return v1; } // A296D4: using guessed type void *NiPSysFieldAttenuationCtlr::`vftable'; //----- (0089F640) -------------------------------------------------------- char *sub_89F640() { return dword_BA4CD0; } //----- (0089F650) -------------------------------------------------------- int __thiscall sub_89F650(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 32); return result; } //----- (0089F670) -------------------------------------------------------- float *__thiscall sub_89F670(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysFieldAttenuationCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A296D4: using guessed type void *NiPSysFieldAttenuationCtlr::`vftable'; //----- (0089F6C0) -------------------------------------------------------- unsigned int __thiscall sub_89F6C0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CD0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089F710) -------------------------------------------------------- float *sub_89F710() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterSpeedCtlr::`vftable'; return v1; } // A2977C: using guessed type void *NiPSysEmitterSpeedCtlr::`vftable'; //----- (0089F740) -------------------------------------------------------- char *sub_89F740() { return dword_BA4CD8; } //----- (0089F750) -------------------------------------------------------- int __thiscall sub_89F750(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 24) = a2; return result; } //----- (0089F760) -------------------------------------------------------- float *__thiscall sub_89F760(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterSpeedCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2977C: using guessed type void *NiPSysEmitterSpeedCtlr::`vftable'; //----- (0089F7B0) -------------------------------------------------------- unsigned int __thiscall sub_89F7B0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CD8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089F800) -------------------------------------------------------- float *sub_89F800() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterPlanarAngleVarCtlr::`vftable'; return v1; } // A29824: using guessed type void *NiPSysEmitterPlanarAngleVarCtlr::`vftable'; //----- (0089F830) -------------------------------------------------------- char *sub_89F830() { return dword_BA4CE0; } //----- (0089F840) -------------------------------------------------------- float *__thiscall sub_89F840(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterPlanarAngleVarCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29824: using guessed type void *NiPSysEmitterPlanarAngleVarCtlr::`vftable'; //----- (0089F890) -------------------------------------------------------- unsigned int __thiscall sub_89F890(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CE0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089F8E0) -------------------------------------------------------- float *sub_89F8E0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterPlanarAngleCtlr::`vftable'; return v1; } // A298CC: using guessed type void *NiPSysEmitterPlanarAngleCtlr::`vftable'; //----- (0089F910) -------------------------------------------------------- char __thiscall sub_89F910(_DWORD *this, int a2) { return sub_8D7CD0(this, a2); } //----- (0089F920) -------------------------------------------------------- char *sub_89F920() { return dword_BA4CE8; } //----- (0089F930) -------------------------------------------------------- int __thiscall sub_89F930(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 40); return result; } //----- (0089F950) -------------------------------------------------------- int __thiscall sub_89F950(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 40) = a2; return result; } //----- (0089F960) -------------------------------------------------------- float *__thiscall sub_89F960(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterPlanarAngleCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A298CC: using guessed type void *NiPSysEmitterPlanarAngleCtlr::`vftable'; //----- (0089F9B0) -------------------------------------------------------- char __thiscall sub_89F9B0(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax v2 = a2; v3 = this; if ( !sub_8A7BF0(this, a2) ) return 0; if ( !sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) ) return 0; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4DA8 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } return 1; } //----- (0089FA10) -------------------------------------------------------- unsigned int __thiscall sub_89FA10(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CE8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089FA60) -------------------------------------------------------- float *sub_89FA60() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterLifeSpanCtlr::`vftable'; return v1; } // A29974: using guessed type void *NiPSysEmitterLifeSpanCtlr::`vftable'; //----- (0089FA90) -------------------------------------------------------- int __thiscall sub_89FA90(_DWORD *this, _DWORD *a2) { return sub_827FE0(this, a2); } //----- (0089FAA0) -------------------------------------------------------- char *sub_89FAA0() { return dword_BA4CF0; } //----- (0089FAB0) -------------------------------------------------------- int __thiscall sub_89FAB0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 72); return result; } //----- (0089FAD0) -------------------------------------------------------- int __thiscall sub_89FAD0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 72) = a2; return result; } //----- (0089FAE0) -------------------------------------------------------- float *__thiscall sub_89FAE0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterLifeSpanCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29974: using guessed type void *NiPSysEmitterLifeSpanCtlr::`vftable'; //----- (0089FB30) -------------------------------------------------------- unsigned int __thiscall sub_89FB30(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CF0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089FB80) -------------------------------------------------------- float *sub_89FB80() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterInitialRadiusCtlr::`vftable'; return v1; } // A29A1C: using guessed type void *NiPSysEmitterInitialRadiusCtlr::`vftable'; //----- (0089FBB0) -------------------------------------------------------- char *sub_89FBB0() { return dword_BA4CF8; } //----- (0089FBC0) -------------------------------------------------------- int __thiscall sub_89FBC0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 64); return result; } //----- (0089FBE0) -------------------------------------------------------- int __thiscall sub_89FBE0(_DWORD *this, float a2) { int result; // eax result = this[17]; *(float *)(result + 64) = a2; return result; } //----- (0089FBF0) -------------------------------------------------------- float *__thiscall sub_89FBF0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterInitialRadiusCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29A1C: using guessed type void *NiPSysEmitterInitialRadiusCtlr::`vftable'; //----- (0089FC40) -------------------------------------------------------- unsigned int __thiscall sub_89FC40(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4CF8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089FC90) -------------------------------------------------------- float *sub_89FC90() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterDeclinationVarCtlr::`vftable'; return v1; } // A29AC4: using guessed type void *NiPSysEmitterDeclinationVarCtlr::`vftable'; //----- (0089FCC0) -------------------------------------------------------- int __thiscall sub_89FCC0(int *this, void **a2) { return sub_8280A0(this, a2); } //----- (0089FCD0) -------------------------------------------------------- char *sub_89FCD0() { return dword_BA4D00; } //----- (0089FCE0) -------------------------------------------------------- float *__thiscall sub_89FCE0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterDeclinationVarCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29AC4: using guessed type void *NiPSysEmitterDeclinationVarCtlr::`vftable'; //----- (0089FD30) -------------------------------------------------------- unsigned int __thiscall sub_89FD30(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D00); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089FD80) -------------------------------------------------------- float *sub_89FD80() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysEmitterDeclinationCtlr::`vftable'; return v1; } // A29B6C: using guessed type void *NiPSysEmitterDeclinationCtlr::`vftable'; //----- (0089FDB0) -------------------------------------------------------- char *sub_89FDB0() { return dword_BA4D08; } //----- (0089FDC0) -------------------------------------------------------- void *__thiscall sub_89FDC0(void *this, char a2) { void *v2; // esi v2 = this; sub_8A7AA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0089FDF0) -------------------------------------------------------- float *__thiscall sub_89FDF0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysEmitterDeclinationCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A29B6C: using guessed type void *NiPSysEmitterDeclinationCtlr::`vftable'; //----- (0089FE40) -------------------------------------------------------- unsigned int __thiscall sub_89FE40(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D08); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (0089FE90) -------------------------------------------------------- _DWORD *sub_89FE90() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x28u); v1 = v0; if ( !v0 ) return 0; sub_85BA50(v0); v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; *v1 = &NiPSysEmitterCtlrData::`vftable'; return v1; } // A29C14: using guessed type void *NiPSysEmitterCtlrData::`vftable'; //----- (0089FED0) -------------------------------------------------------- char *sub_89FED0() { return dword_BA4D10; } //----- (0089FEE0) -------------------------------------------------------- char __thiscall sub_89FEE0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v5; // ecx int v6; // eax int v7; // edi int v8; // edi unsigned __int8 (__cdecl *v9)(int, int); // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !sub_85BB20(this, a2) ) return 0; v5 = v3[2]; if ( *(_DWORD *)(a2 + 8) != v5 ) return 0; v6 = v3[4]; if ( *(_DWORD *)(a2 + 16) != v6 || *(_DWORD *)(a2 + 24) != v3[6] || *(_BYTE *)(a2 + 20) != *((_BYTE *)v3 + 20) ) return 0; v7 = 0; v9 = (unsigned __int8 (__cdecl *)(int, int))dword_BA3F70[v6]; if ( v5 ) { while ( v9(v7 * *((unsigned __int8 *)v3 + 20) + *(_DWORD *)(v2 + 12), v7 * *((unsigned __int8 *)v3 + 20) + v3[3]) ) { if ( (unsigned int)++v7 >= v3[2] ) goto LABEL_10; } } else { LABEL_10: v8 = 0; if ( !v3[6] ) return 1; while ( v9(v8 * *((unsigned __int8 *)v3 + 36) + *(_DWORD *)(v2 + 28), v8 * *((unsigned __int8 *)v3 + 36) + v3[7]) ) { if ( (unsigned int)++v8 >= v3[6] ) return 1; } } return 0; } // BA3F70: using guessed type int dword_BA3F70[]; //----- (0089FFA0) -------------------------------------------------------- int __thiscall sub_89FFA0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[3]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D30[this[4]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3BE8[a4]; v4[3] = a2; *((_BYTE *)v4 + 20) = v6; v4[2] = a3; v4[4] = a4; } else { v4[2] = 0; v4[3] = 0; v4[4] = 0; *((_BYTE *)v4 + 20) = 0; } return result; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (008A0000) -------------------------------------------------------- int __thiscall sub_8A0000(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int result; // eax char v6; // dl v4 = this; result = this[7]; if ( result ) result = ((int (__cdecl *)(int))dword_BA3D30[this[8]])(result); if ( a2 && a3 ) { result = a4; v6 = byte_BA3C06[a4]; v4[7] = a2; *((_BYTE *)v4 + 36) = v6; v4[6] = a3; v4[8] = a4; } else { v4[6] = 0; v4[7] = 0; *((_BYTE *)v4 + 36) = 0; } return result; } // BA3D30: using guessed type int dword_BA3D30[]; //----- (008A0060) -------------------------------------------------------- _DWORD *__thiscall sub_8A0060(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 3); *(_DWORD *)this = &NiPSysEmitterCtlrData::`vftable'; if ( v3 ) ((void (__cdecl *)(int))dword_BA3D30[*((_DWORD *)this + 4)])(v3); if ( v2[7] ) ((void (__cdecl *)(_DWORD))dword_BA3DA8[v2[8]])(v2[7]); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A29C14: using guessed type void *NiPSysEmitterCtlrData::`vftable'; // BA3D30: using guessed type int dword_BA3D30[]; //----- (008A00C0) -------------------------------------------------------- int __thiscall sub_8A00C0(int *this, signed int a2) { signed int v2; // esi int v3; // eax int v4; // ST14_4 void (__cdecl *v5)(int, signed int *, signed int, int *, signed int); // eax int v6; // eax int v7; // ST14_4 void (__cdecl *v8)(int, int *, signed int, int *, signed int); // eax int v9; // edi int (__cdecl *v10)(signed int, signed int); // eax int v11; // ebx int v12; // eax int v13; // ST14_4 int (__cdecl *v14)(int, int *, signed int, int *, signed int); // eax int result; // eax int v16; // edi int v17; // eax int v18; // ST14_4 void (__cdecl *v19)(int, int *, signed int, int *, signed int); // eax int (__cdecl *v20)(signed int, int); // eax int v21; // esi int v22; // [esp+Ch] [ebp-10h] int v23; // [esp+10h] [ebp-Ch] int *v24; // [esp+14h] [ebp-8h] int v25; // [esp+18h] [ebp-4h] v2 = a2; v24 = this; sub_85BC50(this, a2); v3 = *(_DWORD *)(v2 + 352); v4 = v3; v5 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v3 + 4); v23 = 4; v5(v4, &a2, 4, &v23, 1); if ( a2 ) { v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v6 + 4); v23 = 4; v8(v7, &v22, 4, &v23, 1); v9 = v22; v10 = (int (__cdecl *)(signed int, signed int))dword_BA4240[v22]; LOBYTE(v22) = byte_BA3BE8[v22]; v11 = v10(v2, a2); ((void (__cdecl *)(int, signed int, int))dword_BA3C10[v9])(v11, a2, v22); sub_89FFA0(v24, v11, a2, v9); } v12 = *(_DWORD *)(v2 + 352); v13 = v12; v14 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v12 + 4); v22 = 4; result = v14(v13, &v25, 4, &v22, 1); if ( v25 ) { v16 = 5; if ( *(_DWORD *)(v2 + 28) >= 0xA010068u ) { v17 = *(_DWORD *)(v2 + 352); v18 = v17; v19 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v17 + 4); v22 = 4; v19(v18, &v23, 4, &v22, 1); v16 = v23; } v20 = (int (__cdecl *)(signed int, int))dword_BA42B8[v16]; LOBYTE(v22) = byte_BA3C06[v16]; v21 = v20(v2, v25); ((void (__cdecl *)(int, int, int))dword_BA3C88[v16])(v21, v25, v22); result = sub_8A0000(v24, v21, v25, v16); } return result; } // BA3C10: using guessed type int dword_BA3C10[]; // BA4240: using guessed type int dword_BA4240[]; //----- (008A0200) -------------------------------------------------------- unsigned int __thiscall sub_8A0200(_DWORD *this, unsigned int a2) { unsigned int v2; // edi _DWORD *v3; // esi void (__cdecl *v4)(int, _DWORD *, signed int, unsigned int *, signed int); // edx int v5; // ST0C_4 int v6; // eax int v7; // ST0C_4 void (__cdecl *v8)(int, _DWORD *, signed int, unsigned int *, signed int); // eax int v9; // eax unsigned int *v10; // ebx int v11; // ST0C_4 void (__cdecl *v12)(int, _DWORD *, signed int, unsigned int *, signed int); // eax unsigned int result; // eax int v14; // eax int v15; // ST0C_4 void (__cdecl *v16)(int, _DWORD *, signed int, int *, signed int); // eax int v17; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; nullsub_32(a2); v4 = *(void (__cdecl **)(int, _DWORD *, signed int, unsigned int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 4; v4(v5, v3 + 2, 4, &a2, 1); if ( v3[2] ) { v6 = *(_DWORD *)(v2 + 356); v7 = v6; v8 = *(void (__cdecl **)(int, _DWORD *, signed int, unsigned int *, signed int))(v6 + 8); a2 = 4; v8(v7, v3 + 4, 4, &a2, 1); ((void (__cdecl *)(unsigned int, _DWORD, _DWORD))dword_BA3EE0[v3[4]])(v2, v3[3], v3[2]); } v9 = *(_DWORD *)(v2 + 356); v10 = v3 + 6; v11 = v9; v12 = *(void (__cdecl **)(int, _DWORD *, signed int, unsigned int *, signed int))(v9 + 8); a2 = 4; v12(v11, v3 + 6, 4, &a2, 1); result = v3[6]; a2 = 0; if ( result ) { do { if ( result ) { v14 = *(_DWORD *)(v2 + 356); v15 = v14; v16 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v14 + 8); v17 = 4; v16(v15, v3 + 8, 4, &v17, 1); ((void (__cdecl *)(unsigned int, _DWORD, unsigned int))dword_BA3F58[v3[8]])(v2, v3[7], *v10); } result = *v10; ++a2; } while ( a2 < result ); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); // BA3EE0: using guessed type int dword_BA3EE0[]; //----- (008A02F0) -------------------------------------------------------- unsigned int __thiscall sub_8A02F0(int *this, int a2) { _DWORD *v2; // esi int *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi const char *v8; // eax char *v9; // eax unsigned int v10; // edi char *v11; // eax unsigned int v12; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4D10); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878670((int)"Num Birth Rate Keys", v3[2]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); switch ( v3[4] ) { case 1: v8 = "LINKEY"; break; case 2: v8 = "BEZKEY"; break; case 3: v8 = "TCBKEY"; break; default: v8 = "Unknown"; break; } v9 = sub_878740((int)"Birth Rate Key Type", (int)v8); v10 = v2[3]; a2 = (int)v9; if ( v10 >= v2[2] ) sub_8237A0(v2, v10 + v2[5]); sub_823870(v2, v10, &a2); v11 = sub_878670((int)"Num Emitter Active Keys", v3[6]); v12 = v2[3]; a2 = (int)v11; if ( v12 >= v2[2] ) sub_8237A0(v2, v12 + v2[5]); return sub_823870(v2, v12, &a2); } //----- (008A0400) -------------------------------------------------------- float *__thiscall sub_8A0400(float *this) { float *v1; // esi int v2; // edx float *result; // eax v1 = this; sub_8A86D0(this); *(_DWORD *)v1 = &NiPSysDragModifier::`vftable'; v1[6] = 0.0; *((_DWORD *)v1 + 7) = dword_ABD48C; *((_DWORD *)v1 + 8) = dword_ABD490; v2 = dword_ABD494; v1[10] = 0.050000001; *((_DWORD *)v1 + 9) = v2; v1[11] = 3.4028235e38; result = v1; v1[12] = 3.4028235e38; return result; } // A29CAC: using guessed type void *NiPSysDragModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (008A0470) -------------------------------------------------------- char *sub_8A0470() { return dword_BA4D18; } //----- (008A0480) -------------------------------------------------------- float *__thiscall sub_8A0480(float *this, char *Src) { float *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x34u); if ( v3 ) v4 = sub_8A0400(v3); else v4 = 0; sub_8A8800(v2, (int)v4, Src); v4[7] = v2[7]; v4[8] = v2[8]; v4[9] = v2[9]; v4[10] = v2[10]; result = v4; v4[11] = v2[11]; v4[12] = v2[12]; return result; } //----- (008A04E0) -------------------------------------------------------- void __fastcall sub_8A04E0(int a1, int a2, float a3, int a4) { float *v4; // ebx bool v5; // c0 int v6; // eax int *v7; // eax float v8; // ecx float v9; // edx int v10; // edi float *v11; // ecx float v12; // ST30_4 float *v13; // esi float v14; // ST34_4 float v15; // ST38_4 double v16; // st7 double v17; // st6 double v18; // st7 double v19; // st5 float v20; // ST24_4 float v21; // ST28_4 float v22; // ST2C_4 double v23; // st7 float v24; // [esp+4h] [ebp-134h] float v25; // [esp+8h] [ebp-130h] float v26; // [esp+Ch] [ebp-12Ch] float v27; // [esp+10h] [ebp-128h] float v28; // [esp+38h] [ebp-100h] float v29; // [esp+3Ch] [ebp-FCh] float v30; // [esp+40h] [ebp-F8h] float v31; // [esp+44h] [ebp-F4h] float v32; // [esp+48h] [ebp-F0h] float v33; // [esp+4Ch] [ebp-ECh] float v34; // [esp+50h] [ebp-E8h] float v35; // [esp+54h] [ebp-E4h] int v36; // [esp+58h] [ebp-E0h] float v37; // [esp+5Ch] [ebp-DCh] int v38; // [esp+60h] [ebp-D8h] char v39; // [esp+64h] [ebp-D4h] char v40; // [esp+98h] [ebp-A0h] char v41; // [esp+CCh] [ebp-6Ch] char v42; // [esp+100h] [ebp-38h] float v43; // [esp+124h] [ebp-14h] float v44; // [esp+128h] [ebp-10h] float v45; // [esp+12Ch] [ebp-Ch] v4 = (float *)a1; v5 = 0.0 < *(float *)(a1 + 40); v38 = a4; if ( v5 ) { if ( *(_WORD *)(a4 + 72) ) { v6 = *(_DWORD *)(a1 + 24); if ( v6 ) { qmemcpy(&v41, (const void *)(v6 + 104), 0x34u); qmemcpy(&v39, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v39, a2, (float *)&v40); sub_85BDC0((float *)&v40, (float *)&v42, (float *)&v41); v25 = v43; v26 = v44; v27 = v45; v7 = (int *)sub_85DA90((float *)&v42, &v28, v4 + 7); v8 = *((float *)v7 + 1); v32 = *(float *)v7; v9 = *((float *)v7 + 2); v33 = v8; v34 = v9; sub_4430B0(&v32); v10 = v38; v36 = 0; v31 = v33 * v33 + v32 * v32 + v34 * v34; v24 = v4[12] - v4[11]; if ( *(_WORD *)(v38 + 72) > 0u ) { while ( 1 ) { v11 = (float *)(*(_DWORD *)(v10 + 32) + 12 * (unsigned __int16)v36); v12 = *v11 - v25; v13 = (float *)(*(_DWORD *)(v10 + 92) + 28 * (unsigned __int16)v36); v14 = v11[1] - v26; v15 = v11[2] - v27; *(float *)&v38 = v14 * v14 + v12 * v12 + v15 * v15; *(float *)&v38 = sqrt(*(float *)&v38); v35 = v4[10]; v37 = (a3 - v13[5]) / 0.03333330154418945; v16 = *(float *)&v38; if ( v4[11] >= (double)*(float *)&v38 ) goto LABEL_8; if ( v4[12] > v16 ) break; LABEL_12: if ( (unsigned __int16)++v36 >= *(_WORD *)(v10 + 72) ) return; } *(float *)&v38 = v16 - v4[11]; v35 = (1.0 - *(float *)&v38 / v24) * v35; LABEL_8: v17 = v32; v18 = v33; v19 = v34; *(float *)&v38 = v13[2] * v34 + v13[1] * v33 + *v13 * v32; if ( v37 * v35 <= 1.0 ) { v37 = v37 * -v35 * (*(float *)&v38 / v31); v28 = v17 * v37; v29 = v18 * v37; v30 = v19 * v37; *v13 = *v13 + v28; v13[1] = v13[1] + v29; v23 = v13[2] + v30; } else { v37 = -*(float *)&v38 / v31; v20 = v17 * v37; v21 = v18 * v37; v22 = v19 * v37; *v13 = *v13 + v20; v13[1] = v13[1] + v21; v23 = v13[2] + v22; } v13[2] = v23; goto LABEL_12; } } } } } //----- (008A0870) -------------------------------------------------------- int __thiscall sub_8A0870(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A88B0(this, a2); sub_876290((void **)v2); sub_8608D0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; return v11(v10, v3 + 12, 4, &a2, 1); } //----- (008A0900) -------------------------------------------------------- int __thiscall sub_8A0900(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, const char **, signed int, signed int *, signed int); // edx v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[6]); sub_860940((char *)v3 + 28, (signed int)v2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = v2[89]; v11 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; return v11(v10, v3 + 12, 4, &a2, 1); } //----- (008A0990) -------------------------------------------------------- char __thiscall sub_8A0990(void *this, int a2) { void *v2; // esi int v3; // eax v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v3 = *((_DWORD *)v2 + 6); if ( v3 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) goto LABEL_17; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) { LABEL_17: if ( *(_DWORD *)(a2 + 24) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 28))(*(_DWORD *)(a2 + 24)) ) { return 0; } } if ( !(unsigned __int8)sub_85ECE0((float *)(a2 + 28), (float *)v2 + 7) && *((float *)v2 + 10) == *(float *)(a2 + 40) && *((float *)v2 + 11) == *(float *)(a2 + 44) && *((float *)v2 + 12) == *(float *)(a2 + 48) ) { return 1; } return 0; } //----- (008A0A30) -------------------------------------------------------- unsigned int __thiscall sub_8A0A30(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D18); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 6); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Drag Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_85F140((float *)v3 + 7, (int)"Drag Axis"); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Percentage", *((float *)v3 + 10)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"Range", *((float *)v3 + 11)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"RangeFalloff", *((float *)v3 + 12)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (008A0BA0) -------------------------------------------------------- float *sub_8A0BA0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x40u); v1 = v0; if ( !v0 ) return 0; sub_8A8AA0(v0); *(_DWORD *)v1 = &NiPSysDragFieldModifier::`vftable'; *((_BYTE *)v1 + 48) = 0; *((_DWORD *)v1 + 13) = dword_BA45C0; *((_DWORD *)v1 + 14) = dword_BA45C4; *((_DWORD *)v1 + 15) = dword_BA45C8; return v1; } // A29D44: using guessed type void *NiPSysDragFieldModifier::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A0BF0) -------------------------------------------------------- int __thiscall sub_8A0BF0(_DWORD *this, _DWORD *a2) { return sub_89E160(this, a2); } //----- (008A0C00) -------------------------------------------------------- char *sub_8A0C00() { return dword_BA4D20; } //----- (008A0C10) -------------------------------------------------------- void __thiscall sub_8A0C10(float *this, float a2, int a3) { int v3; // edi unsigned __int16 i; // si int v5; // edx int v6; // [esp+14h] [ebp+Ch] float v7; // [esp+14h] [ebp+Ch] v3 = a3; for ( i = 0; i < *(_WORD *)(v3 + 72); ++i ) { v5 = *(_DWORD *)(v3 + 92) + 28 * i; *(float *)&v6 = (a2 - *(float *)(v5 + 20)) * this[7]; if ( *(float *)&v6 >= 1.0 ) { *(_DWORD *)v5 = dword_BA45C0; *(_DWORD *)(v5 + 4) = dword_BA45C4; *(_DWORD *)(v5 + 8) = dword_BA45C8; } else { v7 = 1.0 - *(float *)&v6; *(float *)v5 = *(float *)v5 * v7; *(float *)(v5 + 4) = *(float *)(v5 + 4) * v7; *(float *)(v5 + 8) = v7 * *(float *)(v5 + 8); } } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A0CA0) -------------------------------------------------------- int __thiscall sub_8A0CA0(float *this, char *Src) { float *v2; // edi float *v3; // eax int v4; // esi v2 = this; v3 = (float *)operator new(0x40u); v4 = (int)v3; if ( v3 ) { sub_8A8AA0(v3); *(_DWORD *)v4 = &NiPSysDragFieldModifier::`vftable'; *(_BYTE *)(v4 + 48) = 0; *(_DWORD *)(v4 + 52) = dword_BA45C0; *(_DWORD *)(v4 + 56) = dword_BA45C4; *(_DWORD *)(v4 + 60) = dword_BA45C8; } else { v4 = 0; } sub_8A8AD0(v2, v4, Src); *(_BYTE *)(v4 + 48) = *((_BYTE *)v2 + 48); *(float *)(v4 + 52) = v2[13]; *(float *)(v4 + 56) = v2[14]; *(float *)(v4 + 60) = v2[15]; return v4; } // A29D44: using guessed type void *NiPSysDragFieldModifier::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A0D20) -------------------------------------------------------- void __fastcall sub_8A0D20(int a1, int a2, float a3, int a4) { int v4; // esi unsigned __int16 v5; // si double v6; // st7 double v7; // st6 double v8; // st5 int v9; // edx double v10; // st4 int v11; // eax float v12; // ecx float v13; // eax double v14; // st4 char v15; // [esp+Ch] [ebp-F4h] float v16; // [esp+30h] [ebp-D0h] float v17; // [esp+34h] [ebp-CCh] float v18; // [esp+38h] [ebp-C8h] float v19; // [esp+40h] [ebp-C0h] float v20; // [esp+44h] [ebp-BCh] float v21; // [esp+48h] [ebp-B8h] int v22; // [esp+4Ch] [ebp-B4h] float v23; // [esp+50h] [ebp-B0h] float v24; // [esp+54h] [ebp-ACh] float v25; // [esp+58h] [ebp-A8h] float v26; // [esp+5Ch] [ebp-A4h] char v27; // [esp+60h] [ebp-A0h] char v28; // [esp+94h] [ebp-6Ch] char v29; // [esp+C8h] [ebp-38h] qmemcpy(&v28, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); v4 = *(_DWORD *)(a1 + 16); v22 = a1; qmemcpy(&v27, (const void *)(v4 + 104), 0x34u); sub_87C3F0((float *)&v27, a2, (float *)&v29); sub_85BDC0((float *)&v29, (float *)&v15, (float *)&v28); v5 = 0; if ( *(_WORD *)(a4 + 72) > 0u ) { v6 = v18; v7 = v17; v8 = v16; do { v9 = *(_DWORD *)(a4 + 92) + 28 * v5; v26 = (a3 - *(float *)(v9 + 20)) * *(float *)(v22 + 28); v10 = v26; if ( 0.0 != v26 ) { v11 = *(_DWORD *)(a4 + 32) + 12 * v5; v19 = *(float *)v11; v12 = *(float *)(v11 + 4); v13 = *(float *)(v11 + 8); v20 = v12; v23 = v19 - v8; v21 = v13; v24 = v12 - v7; v25 = v13 - v6; v26 = v24 * v24 + v23 * v23 + v25 * v25; if ( *(float *)(v22 + 44) >= (double)v26 ) { if ( v10 >= 1.0 ) { *(_DWORD *)v9 = dword_BA45C0; *(_DWORD *)(v9 + 4) = dword_BA45C4; *(_DWORD *)(v9 + 8) = dword_BA45C8; } else { v26 = 1.0 - v10; v14 = v26; *(float *)v9 = *(float *)v9 * v26; *(float *)(v9 + 4) = *(float *)(v9 + 4) * v14; *(float *)(v9 + 8) = v14 * *(float *)(v9 + 8); } } } ++v5; } while ( v5 < *(_WORD *)(a4 + 72) ); } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A0EE0) -------------------------------------------------------- bool __thiscall sub_8A0EE0(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A8B10(this, a2) && *(_BYTE *)(a2 + 48) == *((_BYTE *)v2 + 48) && !(unsigned __int8)sub_85ECE0((float *)(a2 + 52), v2 + 13); } //----- (008A0F20) -------------------------------------------------------- void __thiscall sub_8A0F20(int this, float a2, int a3) { int v3; // ebx double v4; // st7 int v5; // ecx float *v6; // eax float v7; // ecx float v8; // edx float v9; // eax int v10; // edi int v11; // eax int v12; // ecx int v13; // esi int v14; // eax int v15; // ecx float v16; // edx int v17; // eax float v18; // ST20_4 float v19; // ST24_4 float v20; // ST28_4 bool v21; // zf float v22; // eax float v23; // edx double v24; // st7 float v25; // [esp+Ch] [ebp-12Ch] float v26; // [esp+10h] [ebp-128h] float v27; // [esp+14h] [ebp-124h] float v28; // [esp+30h] [ebp-108h] float v29; // [esp+34h] [ebp-104h] float v30; // [esp+38h] [ebp-100h] float v31; // [esp+3Ch] [ebp-FCh] float v32; // [esp+40h] [ebp-F8h] float v33; // [esp+44h] [ebp-F4h] float v34; // [esp+48h] [ebp-F0h] float v35; // [esp+4Ch] [ebp-ECh] float v36; // [esp+50h] [ebp-E8h] float v37; // [esp+54h] [ebp-E4h] float v38; // [esp+58h] [ebp-E0h] int v39; // [esp+5Ch] [ebp-DCh] int v40; // [esp+60h] [ebp-D8h] char v41; // [esp+64h] [ebp-D4h] char v42; // [esp+98h] [ebp-A0h] char v43; // [esp+CCh] [ebp-6Ch] char v44; // [esp+100h] [ebp-38h] float v45; // [esp+124h] [ebp-14h] float v46; // [esp+128h] [ebp-10h] float v47; // [esp+12Ch] [ebp-Ch] v3 = this; v4 = *(float *)(this + 28); v40 = a3; if ( 0.0 != v4 ) { if ( *(_WORD *)(a3 + 72) ) { v5 = *(_DWORD *)(this + 24); if ( v5 ) { if ( *(_BYTE *)(v3 + 48) || *(float *)(v3 + 32) != 0.0 ) { qmemcpy(&v43, (const void *)(v5 + 104), 0x34u); qmemcpy(&v41, (const void *)(*(_DWORD *)(v3 + 16) + 104), 0x34u); sub_87C3F0((float *)&v41, a3, (float *)&v42); sub_85BDC0((float *)&v42, (float *)&v44, (float *)&v43); v25 = v45; v26 = v46; v27 = v47; if ( *(_BYTE *)(v3 + 48) && (unsigned __int8)sub_85ECE0((float *)(v3 + 52), (float *)&dword_BA45C0) ) { v6 = sub_85DA90((float *)&v44, &v31, (float *)(v3 + 52)); v7 = *v6; v8 = v6[1]; v9 = v6[2]; v34 = v7; v35 = v8; v36 = v9; sub_4430B0(&v34); } v10 = v40; LOWORD(v11) = 0; v39 = 0; if ( *(_WORD *)(v40 + 72) > 0u ) { do { v12 = (unsigned __int16)v11; v13 = *(_DWORD *)(v10 + 92) + 28 * (unsigned __int16)v11; v37 = a2 - *(float *)(v13 + 20); if ( 0.0 != v37 ) { v14 = *(_DWORD *)(v10 + 32); v15 = 3 * v12; v16 = *(float *)(v14 + 4 * v15); v17 = v14 + 4 * v15; v18 = v16 - v25; v19 = *(float *)(v17 + 4) - v26; v20 = *(float *)(v17 + 8) - v27; *(float *)&v40 = v19 * v19 + v18 * v18 + v20 * v20; *(float *)&v40 = sqrt(*(float *)&v40); if ( !*(_BYTE *)(v3 + 36) || *(float *)(v3 + 40) >= (double)*(float *)&v40 ) { v21 = *(_BYTE *)(v3 + 48) == 0; v38 = 1.0; if ( !v21 ) { v22 = *(float *)v13; v23 = *(float *)(v13 + 8); v29 = *(float *)(v13 + 4); v28 = v22; v30 = v23; sub_4430B0(&v28); v38 = v29 * v35 + v34 * v28 + v30 * v36; } *(float *)&v40 = v37 * *(float *)(v3 + 28) * v38 / (*(float *)(v3 + 32) * *(float *)&v40 + 1.0); v24 = *(float *)&v40; if ( *(float *)&v40 >= 1.0 ) { *(_DWORD *)v13 = dword_BA45C0; *(_DWORD *)(v13 + 4) = dword_BA45C4; *(_DWORD *)(v13 + 8) = dword_BA45C8; } else { v31 = *(float *)v13 * v24; v32 = *(float *)(v13 + 4) * v24; v33 = v24 * *(float *)(v13 + 8); *(float *)v13 = *(float *)v13 - v31; *(float *)(v13 + 4) = *(float *)(v13 + 4) - v32; *(float *)(v13 + 8) = *(float *)(v13 + 8) - v33; } } } v11 = v39 + 1; v39 = v11; } while ( (unsigned __int16)v11 < *(_WORD *)(v10 + 72) ); } } else if ( *(_BYTE *)(v3 + 36) ) { sub_8A0D20(v3, a3, a2, a3); } else { sub_8A0C10((float *)v3, a2, a3); } } } } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A12B0) -------------------------------------------------------- int __thiscall sub_8A12B0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_8A8BB0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v8 = 1; v6(v5, (char *)&a2 + 3, 1, &v8, 1); *((_BYTE *)v3 + 48) = HIBYTE(a2) != 0; return sub_8608D0((char *)v3 + 52, v2); } //----- (008A1300) -------------------------------------------------------- int __thiscall sub_8A1300(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_8A8C60(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 48); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v8 = 1; v6(v5, (char *)&a2 + 3, 1, &v8, 1); return sub_860940((char *)v3 + 52, v2); } //----- (008A1350) -------------------------------------------------------- unsigned int __thiscall sub_8A1350(void *this, int a2) { _DWORD *v2; // esi void *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D20); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"Use Direction", *((_BYTE *)v3 + 48)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_85F140((float *)v3 + 13, (int)"Direction"); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (008A1410) -------------------------------------------------------- _DWORD *__thiscall sub_8A1410(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_886DD0(this); v1[23] = 0; v1[24] = 0; v1[25] = 0; *v1 = &NiPSysData::`vftable'; return v1; } // A29DAC: using guessed type void *NiPSysData::`vftable'; //----- (008A1460) -------------------------------------------------------- signed int __thiscall sub_8A1460(_WORD *this, unsigned __int16 a2) { _WORD *v2; // ebx signed int v3; // esi signed int result; // eax v2 = this; v3 = (unsigned __int16)(this[36] - 1); result = sub_886BF0((int)this, a2); if ( a2 != (_WORD)v3 ) { result = v3; qmemcpy((void *)(*((_DWORD *)v2 + 23) + 28 * a2), (const void *)(*((_DWORD *)v2 + 23) + 28 * v3), 0x1Cu); if ( *((_DWORD *)v2 + 24) ) *(float *)(*((_DWORD *)v2 + 24) + 4 * a2) = *(float *)(*((_DWORD *)v2 + 24) + 4 * v3); } return result; } //----- (008A14C0) -------------------------------------------------------- unsigned __int16 __thiscall sub_8A14C0(unsigned __int16 *this) { unsigned __int16 *v1; // esi int v2; // ecx unsigned __int16 result; // ax int v4; // edi unsigned __int16 v5; // dx v1 = this; v2 = this[36]; result = v1[51]; if ( (unsigned __int16)v2 >= result ) { result = v2 + v1[50]; v1[36] = result; } else { v4 = v2; v1[36] = result + v1[50]; if ( (unsigned __int16)v2 < result ) { do { if ( v1[36] <= v1[51] ) break; result = (*(int (__thiscall **)(unsigned __int16 *, int))(*(_DWORD *)v1 + 72))(v1, v4++); } while ( (unsigned __int16)v4 < v1[51] ); } if ( (unsigned __int16)v4 < v1[51] ) { v1[36] = v4; v1[50] = 0; v1[51] = v4; return result; } } v5 = v1[36]; v1[50] = 0; v1[51] = v5; return result; } //----- (008A1540) -------------------------------------------------------- _DWORD *sub_8A1540() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x68u); v1 = v0; if ( !v0 ) return 0; sub_886DD0(v0); v1[25] = 0; *v1 = &NiPSysData::`vftable'; v1[23] = 0; v1[24] = 0; return v1; } // A29DAC: using guessed type void *NiPSysData::`vftable'; //----- (008A1580) -------------------------------------------------------- bool __thiscall sub_8A1580(_DWORD *this, int a2) { return sub_881290(this, a2); } //----- (008A1590) -------------------------------------------------------- char __thiscall sub_8A1590(float **this, _DWORD *a2) { _DWORD *v2; // esi float **v3; // edi float *v5; // eax unsigned __int16 v6; // bx float *v7; // eax v2 = a2; v3 = this; if ( !sub_886EE0(this, a2) ) return 0; v5 = v3[24]; if ( v5 ) { if ( !a2[24] ) return 0; if ( v5 ) goto LABEL_7; } if ( a2[24] ) return 0; LABEL_7: v6 = 0; if ( *((_WORD *)v3 + 36) <= 0u ) { LABEL_13: if ( *((_WORD *)v3 + 50) == *((_WORD *)v2 + 50) && *((_WORD *)v3 + 51) == *((_WORD *)v2 + 51) ) return 1; } else { while ( sub_8A9CD0(&v3[23][7 * v6], 28 * v6 + a2[23]) ) { v7 = v3[24]; if ( v7 ) { if ( *(float *)(a2[24] + 4 * v6) != v7[v6] ) break; } if ( ++v6 >= *((_WORD *)v3 + 36) ) { v2 = a2; goto LABEL_13; } } } return 0; } //----- (008A1650) -------------------------------------------------------- char *sub_8A1650() { return dword_BA4D28; } //----- (008A1660) -------------------------------------------------------- void **__thiscall sub_8A1660(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 23); *(_DWORD *)this = &NiPSysData::`vftable'; operator delete(v3); operator delete(v2[24]); sub_886B00(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A29DAC: using guessed type void *NiPSysData::`vftable'; //----- (008A16A0) -------------------------------------------------------- const void *__thiscall sub_8A16A0(const void **this, int a2, _DWORD **a3) { int v3; // ebx const void **v4; // esi void *v5; // eax rsize_t v6; // edi void *v7; // edi int v8; // edi char *v9; // eax int v10; // edx int v11; // ecx void *v12; // edi void *v13; // eax rsize_t v14; // edi void *v15; // edi float *v16; // edi void *v17; // edi const void *result; // eax int v19; // [esp+14h] [ebp+8h] float *v20; // [esp+14h] [ebp+8h] void *v21; // [esp+18h] [ebp+Ch] void *v22; // [esp+18h] [ebp+Ch] void *v23; // [esp+18h] [ebp+Ch] void *v24; // [esp+18h] [ebp+Ch] int v25; // [esp+18h] [ebp+Ch] int v26; // [esp+18h] [ebp+Ch] v3 = a2; v4 = this; sub_85BB00(this, a2, a3); v5 = operator new(12 * *((unsigned __int16 *)v4 + 6)); v6 = 12 * *((unsigned __int16 *)v4 + 6); v19 = (int)v5; memcpy_s(v5, 12 * *((unsigned __int16 *)v4 + 6), v4[8], v6); v21 = 0; if ( v4[9] ) { v21 = operator new(12 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v21, v6, v4[9], v6); } v7 = 0; if ( v4[10] ) { v8 = *((unsigned __int16 *)v4 + 6); v9 = (char *)operator new(16 * v8); if ( v9 ) { v10 = v8 - 1; if ( v8 - 1 >= 0 ) { v11 = (int)(v9 + 8); do { *(float *)(v11 - 8) = 0.0; v11 += 16; --v10; *(float *)(v11 - 20) = 0.0; *(float *)(v11 - 16) = 0.0; *(float *)(v11 - 12) = 0.0; } while ( v10 >= 0 ); } v7 = v9; } else { v7 = 0; } memcpy_s(v7, 16 * *((unsigned __int16 *)v4 + 6), v4[10], 16 * *((unsigned __int16 *)v4 + 6)); } sub_879990((int *)v3, *((_WORD *)v4 + 6), v19, (int)v21, (int)v7, 0, 0, 0); v12 = 0; if ( v4[20] ) { v12 = operator new(16 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v12, 16 * *((unsigned __int16 *)v4 + 6), v4[20], 16 * *((unsigned __int16 *)v4 + 6)); } sub_886B90((void **)v3, v12); v13 = operator new(4 * *((unsigned __int16 *)v4 + 6)); v14 = 4 * *((unsigned __int16 *)v4 + 6); v22 = v13; memcpy_s(v13, 4 * *((unsigned __int16 *)v4 + 6), v4[19], v14); sub_886B70((void **)v3, v22); v23 = operator new(4 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v23, v14, v4[17], v14); sub_886B50((void **)v3, v23); *(_WORD *)(v3 + 72) = *((_WORD *)v4 + 36); if ( v4[21] ) { v24 = operator new(4 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v24, v14, v4[21], v14); sub_886BB0((void **)v3, v24); } if ( v4[22] ) { v15 = operator new(12 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v15, 12 * *((unsigned __int16 *)v4 + 6), v4[22], 12 * *((unsigned __int16 *)v4 + 6)); sub_886BD0((void **)v3, v15); } v16 = 0; if ( v4[23] ) { v25 = *((unsigned __int16 *)v4 + 6); v16 = (float *)operator new(28 * v25); v20 = v16; if ( v16 ) { v26 = v25 - 1; if ( v26 >= 0 ) { do { sub_8A9CA0(v16); v16 += 7; --v26; } while ( v26 >= 0 ); v16 = v20; } } else { v16 = 0; } memcpy_s(v16, 28 * *((unsigned __int16 *)v4 + 6), v4[23], 28 * *((unsigned __int16 *)v4 + 6)); } operator delete(*(void **)(v3 + 92)); *(_DWORD *)(v3 + 92) = v16; v17 = 0; if ( v4[24] ) { v17 = operator new(4 * *((unsigned __int16 *)v4 + 6)); memcpy_s(v17, 4 * *((unsigned __int16 *)v4 + 6), v4[24], 4 * *((unsigned __int16 *)v4 + 6)); } operator delete(*(void **)(v3 + 96)); *(_DWORD *)(v3 + 96) = v17; *(_WORD *)(v3 + 100) = *((_WORD *)v4 + 50); *(_WORD *)(v3 + 102) = *((_WORD *)v4 + 51); *(_DWORD *)(v3 + 16) = v4[4]; *(_DWORD *)(v3 + 20) = v4[5]; *(_DWORD *)(v3 + 24) = v4[6]; result = v4[7]; *(_DWORD *)(v3 + 28) = result; return result; } //----- (008A19E0) -------------------------------------------------------- _DWORD *__thiscall sub_8A19E0(const void **this, _DWORD **a2) { const void **v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0x68u); v4 = v3; if ( v3 ) { sub_886DD0(v3); *v4 = &NiPSysData::`vftable'; v4[23] = 0; v4[24] = 0; v4[25] = 0; sub_8A16A0(v2, (int)v4, a2); result = v4; } else { sub_8A16A0(v2, 0, a2); result = 0; } return result; } // A29DAC: using guessed type void *NiPSysData::`vftable'; //----- (008A1A50) -------------------------------------------------------- int __thiscall sub_8A1A50(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi unsigned __int16 i; // di int v5; // eax int v6; // ecx float *v7; // eax int v8; // ebx float *v9; // edi int v10; // edi int v11; // eax int v12; // ST14_4 void (__cdecl *v13)(int, char *, signed int, float **, signed int); // eax void *v14; // eax int v15; // ST18_4 void *v16; // ST14_4 void (__cdecl *v17)(int, void *, int, float **, signed int); // eax int v18; // ST10_4 void *v19; // eax size_t v20; // ST20_4 void (__cdecl *v21)(int, int *, signed int, signed int *, signed int); // edx int v22; // ST14_4 int (__cdecl *v23)(int, char *, signed int, signed int *, signed int); // edx int v24; // ST00_4 float *v26; // [esp+Ch] [ebp-8h] int v27; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_8870F0(this, a2); if ( *(_DWORD *)(v2 + 28) < 0xA030005u && v3[20] ) { v3[21] = (int)operator new(4 * *((unsigned __int16 *)v3 + 6)); v3[22] = (int)operator new(12 * *((unsigned __int16 *)v3 + 6)); for ( i = 0; i < *((_WORD *)v3 + 6); ++i ) sub_874E70((float *)(v3[20] + 16 * i), (float *)(v3[21] + 4 * i), (float *)(v3[22] + 12 * i)); sub_886B90((void **)v3, 0); } v5 = 28 * *((unsigned __int16 *)v3 + 6); v6 = 28 * (unsigned __int64)*((unsigned __int16 *)v3 + 6) >> 32 != 0; v27 = *((unsigned __int16 *)v3 + 6); v7 = (float *)operator new(v5 | -v6); v26 = v7; if ( v7 ) { v8 = v27 - 1; v9 = v7; if ( v27 - 1 >= 0 ) { do { sub_8A9CA0(v9); v9 += 7; --v8; } while ( v8 >= 0 ); v7 = v26; } v2 = a2; } else { v7 = 0; } v3[23] = (int)v7; v10 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do sub_8A9D50((char *)(v3[23] + 28 * (unsigned __int16)v10++), v2); while ( (unsigned __int16)v10 < *((_WORD *)v3 + 6) ); } if ( *(_DWORD *)(v2 + 28) < 0x14000002u ) { if ( v3[21] ) { v19 = operator new(4 * *((unsigned __int16 *)v3 + 6)); v20 = 4 * *((unsigned __int16 *)v3 + 6); v3[24] = (int)v19; memset(v19, 0, v20); } } else { v11 = *(_DWORD *)(v2 + 352); v12 = v11; v13 = *(void (__cdecl **)(int, char *, signed int, float **, signed int))(v11 + 4); v26 = (float *)1; v13(v12, (char *)&a2 + 3, 1, &v26, 1); if ( HIBYTE(a2) ) { v14 = operator new(4 * *((unsigned __int16 *)v3 + 6)); v15 = 4 * *((unsigned __int16 *)v3 + 6); v3[24] = (int)v14; v16 = v14; v17 = *(void (__cdecl **)(int, void *, int, float **, signed int))(*(_DWORD *)(v2 + 352) + 4); v18 = *(_DWORD *)(v2 + 352); v26 = (float *)4; v17(v18, v16, v15, &v26, 1); } } v21 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v22 = *(_DWORD *)(v2 + 352); a2 = 2; v21(v22, v3 + 25, 2, &a2, 1); v23 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v24 = *(_DWORD *)(v2 + 352); a2 = 2; return v23(v24, (char *)v3 + 102, 2, &a2, 1); } //----- (008A1C70) -------------------------------------------------------- int __thiscall sub_8A1C70(char *this, _DWORD *a2) { signed int v2; // edi char *v3; // esi int v4; // ebx int v5; // eax int v6; // ST14_4 void (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax int v8; // ST1C_4 void (__cdecl *v9)(int, int, int, int *, signed int); // edx int v10; // ST18_4 int v11; // ST14_4 int v12; // eax int v13; // ST14_4 void (__cdecl *v14)(int, char *, signed int, int *, signed int); // eax int v15; // edi int (__cdecl *v16)(int, char *, signed int, int *, signed int); // edx int v18; // [esp+Ch] [ebp-4h] v2 = (signed int)a2; v3 = this; sub_8875B0(this, a2); v4 = 0; if ( *((_WORD *)v3 + 6) > 0u ) { do sub_8A9E20((char *)(*((_DWORD *)v3 + 23) + 28 * (unsigned __int16)v4++), v2); while ( (unsigned __int16)v4 < *((_WORD *)v3 + 6) ); } HIBYTE(a2) = *((_DWORD *)v3 + 24) != 0; v5 = *(_DWORD *)(v2 + 356); v6 = v5; v7 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v5 + 8); v18 = 1; v7(v6, (char *)&a2 + 3, 1, &v18, 1); if ( HIBYTE(a2) ) { v8 = 4 * *((unsigned __int16 *)v3 + 6); v9 = *(void (__cdecl **)(int, int, int, int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v10 = *((_DWORD *)v3 + 24); v11 = *(_DWORD *)(v2 + 356); v18 = 4; v9(v11, v10, v8, &v18, 1); } v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v12 + 8); v18 = 2; v14(v13, v3 + 100, 2, &v18, 1); v15 = *(_DWORD *)(v2 + 356); v16 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v15 + 8); v18 = 2; return v16(v15, v3 + 102, 2, &v18, 1); } //----- (008A1D50) -------------------------------------------------------- unsigned int __thiscall sub_8A1D50(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // edi v2 = (_DWORD *)a2; v3 = this; sub_8877C0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D28); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878700((int)"m_pkParticleInfo", *((_DWORD *)v3 + 23)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878700((int)"m_pfRotationSpeeds", *((_DWORD *)v3 + 24)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8785F0((int)"NumAddedParticles", *((_WORD *)v3 + 50)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8785F0((int)"AddedParticlesBase", *((_WORD *)v3 + 51)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); return sub_823870(v2, v13, &a2); } //----- (008A1E70) -------------------------------------------------------- bool __thiscall sub_8A1E70(float *this, int a2) { float *v2; // esi v2 = this; return sub_8A95E0(this, a2) && *(float *)(a2 + 84) == v2[21] && *(float *)(a2 + 88) == v2[22]; } //----- (008A1EC0) -------------------------------------------------------- char *sub_8A1EC0() { return dword_BA4D30; } //----- (008A1ED0) -------------------------------------------------------- float *__thiscall sub_8A1ED0(float *this, float *a2, float *a3, float *a4) { float *v4; // edi float *v5; // esi double v6; // st7 float *v7; // eax float v8; // edx double v9; // st7 double v10; // st7 float *result; // eax float v12; // [esp+8h] [ebp-28h] float v13; // [esp+Ch] [ebp-24h] float v14; // [esp+10h] [ebp-20h] float v15; // [esp+14h] [ebp-1Ch] float v16; // [esp+18h] [ebp-18h] float v17; // [esp+1Ch] [ebp-14h] float v18; // [esp+20h] [ebp-10h] float v19; // [esp+24h] [ebp-Ch] float v20; // [esp+28h] [ebp-8h] float v21; // [esp+2Ch] [ebp-4h] float v22; // [esp+3Ch] [ebp+Ch] float v23; // [esp+3Ch] [ebp+Ch] v4 = this; v20 = (double)rand() / 32767.0; v18 = v4[21] * v20; v20 = (double)rand() / 32767.0; v19 = flt_BA45BC * v20; v21 = cos(v19); v20 = sin(v19); v5 = a3; v6 = v18; *a3 = v21 * v18; a3[1] = v6 * v20; v22 = (double)rand() / 32767.0; v5[2] = (v22 - 0.5) * v4[22]; v23 = a2[12]; v7 = sub_85DA90(a2, &v12, v5); v15 = *v7 * v23; v16 = v7[1] * v23; v17 = v23 * v7[2]; v12 = v15 + a2[9]; v13 = a2[10] + v16; v8 = v13; v9 = a2[11]; *v5 = v12; v10 = v9 + v17; v5[1] = v8; v14 = v10; v5[2] = v14; result = sub_85DA90(a2, &v12, a4); *a4 = *result; a4[1] = result[1]; a4[2] = result[2]; return result; } // BA45BC: using guessed type float flt_BA45BC; //----- (008A1FE0) -------------------------------------------------------- int __thiscall sub_8A1FE0(float *this, char *a2) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x5Cu); v4 = (int)v3; if ( v3 ) { sub_8A9540(v3); *(float *)(v4 + 84) = 0.0; *(_DWORD *)v4 = &NiPSysCylinderEmitter::`vftable'; *(float *)(v4 + 88) = 0.0; } else { v4 = 0; } sub_8A9560(v2, v4, a2); *(float *)(v4 + 84) = v2[21]; result = v4; *(float *)(v4 + 88) = v2[22]; return result; } // A29E54: using guessed type void *NiPSysCylinderEmitter::`vftable'; //----- (008A2060) -------------------------------------------------------- int __thiscall sub_8A2060(int *this, void **a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST14_4 void (__cdecl *v6)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v7; // edi int (__cdecl *v8)(_DWORD *, int *, signed int, void ***, signed int); // edx v2 = a2; v3 = this; sub_8A9570(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v4[1]; a2 = (void **)4; v6(v5, v3 + 21, 4, &a2, 1); v7 = v2[88]; v8 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v7[1]; a2 = (void **)4; return v8(v7, v3 + 22, 4, &a2, 1); } //----- (008A20C0) -------------------------------------------------------- int __thiscall sub_8A20C0(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A95B0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 21, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; return v8(v7, v3 + 22, 4, &a2, 1); } //----- (008A2120) -------------------------------------------------------- unsigned int __thiscall sub_8A2120(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi char *v8; // eax unsigned int v9; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A9740(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D30); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Radius", v3[21]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Height", v3[22]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); return sub_823870(v2, v9, &a2); } //----- (008A21E0) -------------------------------------------------------- int __thiscall sub_8A21E0(_DWORD *this, int a2, int a3) { int result; // eax int *v4; // esi int v5; // edi int v6; // edx int v7; // eax char v8; // bl float *v9; // edi int v10; // ebx int v11; // edx int v12; // ecx int v13; // [esp+24h] [ebp-28h] int v14; // [esp+28h] [ebp-24h] int v15; // [esp+2Ch] [ebp-20h] int v16; // [esp+30h] [ebp-1Ch] int v17; // [esp+34h] [ebp-18h] int v18; // [esp+38h] [ebp-14h] int v19; // [esp+3Ch] [ebp-10h] char v20[4]; // [esp+40h] [ebp-Ch] _DWORD *v21; // [esp+44h] [ebp-8h] int v22; // [esp+48h] [ebp-4h] int v23; // [esp+58h] [ebp+Ch] result = a3; v4 = *(int **)(a3 + 40); v5 = *(_DWORD *)(a3 + 92); v21 = this; if ( v4 ) { v6 = *(unsigned __int16 *)(a3 + 72); v7 = this[6]; *(float *)&v22 = 0.0; v19 = *(_DWORD *)(v7 + 8); v18 = *(_DWORD *)(v7 + 16); v8 = *(_BYTE *)(v7 + 20); v17 = *(_DWORD *)(v7 + 12); result = 0; v20[0] = v8; if ( (unsigned __int16)v6 > 0u ) { v9 = (float *)(v5 + 16); v10 = v6; while ( 1 ) { *(float *)&v23 = *(v9 - 1) / *v9; v22 = this[7]; if ( *(float *)&v22 >= (double)*(float *)&v23 ) v23 = v22; v22 = this[8]; if ( *(float *)&v22 <= (double)*(float *)&v23 ) v23 = v22; *(float *)&v22 = 0.0; sub_806720((int)&v13, *(float *)&v23, v17, v18, v19, (int)&v22, v20[0]); v11 = v14; result = v15; *v4 = v13; v12 = v16; v4[1] = v11; v4[2] = result; v4[3] = v12; v4 += 4; v9 += 7; if ( !--v10 ) break; this = v21; } } } return result; } //----- (008A22E0) -------------------------------------------------------- char __thiscall sub_8A22E0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_81C190(this, a2); if ( result ) { v4 = v2[6]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (008A2320) -------------------------------------------------------- bool __thiscall sub_8A2320(_DWORD **this, int a2) { _DWORD **v2; // esi bool result; // al v2 = this; result = sub_8A8740(this, a2); if ( result ) result = (*(unsigned __int8 (__stdcall **)(_DWORD))(*v2[6] + 28))(*(_DWORD *)(a2 + 24)) != 0; return result; } //----- (008A2360) -------------------------------------------------------- int __thiscall sub_8A2360(float *this, int a2) { float *v2; // esi int v3; // edi int result; // eax int v5; // ecx unsigned __int8 v6; // dl v2 = this; v3 = *((_DWORD *)this + 6); if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *((_DWORD *)v2 + 6) = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } result = *((_DWORD *)v2 + 6); v2[7] = 0.0; v2[8] = 0.0; if ( result ) { v5 = *(_DWORD *)(result + 8); v6 = *(_BYTE *)(result + 20); result = *(_DWORD *)(result + 12); if ( v5 ) { v2[7] = *(float *)result; v2[8] = *(float *)(v6 * (v5 - 1) + result); } } return result; } //----- (008A23E0) -------------------------------------------------------- char *sub_8A23E0() { return dword_BA4D38; } //----- (008A23F0) -------------------------------------------------------- float *sub_8A23F0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x24u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); *(_DWORD *)v1 = &NiPSysColorModifier::`vftable'; v1[6] = 0.0; v1[7] = 0.0; v1[8] = 0.0; return v1; } // A29EB4: using guessed type void *NiPSysColorModifier::`vftable'; //----- (008A2430) -------------------------------------------------------- int __thiscall sub_8A2430(float *this, _DWORD *a2) { float *v2; // esi int v3; // eax v2 = this; sub_8A8720(a2); v3 = sub_875AD0(a2); return sub_8A2360(v2, v3); } //----- (008A2460) -------------------------------------------------------- _DWORD *__thiscall sub_8A2460(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 6); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8A8700(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A24B0) -------------------------------------------------------- int __thiscall sub_8A24B0(int *this, char *Src) { int *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x24u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(_DWORD *)v4 = &NiPSysColorModifier::`vftable'; *(_DWORD *)(v4 + 24) = 0; *(float *)(v4 + 28) = 0.0; *(float *)(v4 + 32) = 0.0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); sub_8A2360((float *)v4, v2[6]); return v4; } // A29EB4: using guessed type void *NiPSysColorModifier::`vftable'; //----- (008A2510) -------------------------------------------------------- int __thiscall sub_8A2510(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD **v3; // ebx char *v4; // eax unsigned int v5; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D38); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); return (*(int (__stdcall **)(_DWORD *))(*v3[6] + 32))(v2); } //----- (008A2570) -------------------------------------------------------- int __thiscall sub_8A2570(int *this, void **a2) { sub_8A88B0(this, (signed int)a2); return sub_876290(a2); } //----- (008A2590) -------------------------------------------------------- int __thiscall sub_8A2590(_DWORD *this, float a2, int a3) { _DWORD *v3; // ebx int v4; // ecx int v5; // edi int result; // eax int v7; // esi int v8; // ecx int v9; // eax int v10; // ecx int v11; // [esp+28h] [ebp-4h] v3 = this; v4 = this[6]; v5 = a3; if ( v4 && *(_WORD *)(a3 + 72) ) (*(void (**)(void))(*(_DWORD *)v4 + 68))(); result = 0; v7 = 0; if ( *(_WORD *)(v5 + 72) > 0u ) { do { v8 = v3[6]; v11 = *(int *)(v3[4] + 236); *(float *)&a3 = a2; if ( v8 && (v9 = (*(int (__stdcall **)(int, int *, int, int))(*(_DWORD *)v8 + 60))(v11, &a3, v5, v7)) != 0 ) (*(void (__thiscall **)(int, _DWORD, int, int))(*(_DWORD *)v9 + 64))(v9, LODWORD(a2), v5, v7); else a3 = v11; result = (unsigned __int16)v7; v10 = 7 * (unsigned __int16)v7++; *(float *)(*(_DWORD *)(v5 + 92) + 4 * v10 + 20) = *(float *)&a3; } while ( (unsigned __int16)v7 < *(_WORD *)(v5 + 72) ); } return result; } //----- (008A2640) -------------------------------------------------------- int __thiscall sub_8A2640(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx v2 = this; result = sub_8A8870(this, a2); v4 = v2[6]; if ( v4 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v4 + 40))(a2); return result; } //----- (008A2670) -------------------------------------------------------- int __thiscall sub_8A2670(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_8A8720(a2); result = sub_875AD0(a2); v4 = v2[6]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[6] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (008A26D0) -------------------------------------------------------- int __thiscall sub_8A26D0(const char **this, signed int a2) { const char **v2; // esi v2 = this; sub_8A8930(this, a2); return (*(int (__thiscall **)(signed int, const char *))(*(_DWORD *)a2 + 44))(a2, v2[6]); } //----- (008A2700) -------------------------------------------------------- char __thiscall sub_8A2700(_DWORD *this, int a2) { _DWORD *v2; // esi int v4; // ecx v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v4 = v2[6]; if ( v4 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v4 ) goto LABEL_13; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v4 ) { LABEL_13: if ( !*(_DWORD *)(a2 + 24) || (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 28))(*(_DWORD *)(a2 + 24)) ) return 1; return 0; } return 1; } //----- (008A2760) -------------------------------------------------------- char *sub_8A2760() { return dword_BA4D40; } //----- (008A2770) -------------------------------------------------------- _DWORD *__thiscall sub_8A2770(_DWORD *this, char *Src) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi int v5; // ecx int v6; // eax int v7; // edi int v8; // ebx v2 = this; v3 = operator new(0x1Cu); v4 = v3; if ( v3 ) { sub_8A86D0(v3); *v4 = &NiPSysColliderManager::`vftable'; v4[6] = 0; } else { v4 = 0; } sub_8A8800(v2, (int)v4, Src); v5 = v2[6]; if ( v5 ) { v6 = (*(int (__stdcall **)(char *))(*(_DWORD *)v5 + 8))(Src); v7 = v4[6]; v8 = v6; if ( v7 != v6 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v4[6] = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } } return v4; } // A29F04: using guessed type void *NiPSysColliderManager::`vftable'; //----- (008A2830) -------------------------------------------------------- int __thiscall sub_8A2830(_DWORD **this, int a2) { _DWORD *v2; // esi _DWORD **v3; // ebx char *v4; // eax unsigned int v5; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D40); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); return (*(int (__stdcall **)(_DWORD *))(*v3[6] + 32))(v2); } //----- (008A2890) -------------------------------------------------------- int __thiscall sub_8A2890(void *this, int a2) { return sub_898540(this, a2); } //----- (008A28A0) -------------------------------------------------------- bool __thiscall sub_8A28A0(float *this, float *a2) { float *v2; // esi v2 = this; return sub_8A95E0(this, (int)a2) && a2[21] == v2[21] && a2[22] == v2[22] && a2[23] == v2[23]; } //----- (008A2900) -------------------------------------------------------- char *sub_8A2900() { return dword_BA4D48; } //----- (008A2910) -------------------------------------------------------- float *__thiscall sub_8A2910(float *this, float *a2, float *a3, float *a4) { float *v4; // esi float v5; // ecx double v6; // st7 float *v7; // esi float *v8; // ST04_4 float *v9; // eax float v10; // edx double v11; // st7 double v12; // st7 float *result; // eax float v14; // [esp+8h] [ebp-24h] float v15; // [esp+Ch] [ebp-20h] float v16; // [esp+10h] [ebp-1Ch] float v17; // [esp+14h] [ebp-18h] float v18; // [esp+18h] [ebp-14h] float v19; // [esp+1Ch] [ebp-10h] float v20; // [esp+20h] [ebp-Ch] float v21; // [esp+24h] [ebp-8h] float v22; // [esp+28h] [ebp-4h] float v23; // [esp+38h] [ebp+Ch] v4 = this; v20 = (double)rand() / 32767.0; v21 = (double)rand() / 32767.0; v22 = (double)rand() / 32767.0; v17 = (v22 - 0.5) * v4[21]; v18 = (v21 - 0.5) * v4[22]; v5 = v18; v6 = (v20 - 0.5) * v4[23]; v7 = a3; *a3 = v17; a3[1] = v5; v19 = v6; a3[2] = v19; v8 = a3; v23 = a2[12]; v9 = sub_85DA90(a2, &v14, v8); v17 = *v9 * v23; v18 = v9[1] * v23; v19 = v23 * v9[2]; v14 = a2[9] + v17; v15 = a2[10] + v18; v10 = v15; v11 = a2[11]; *v7 = v14; v12 = v11 + v19; v7[1] = v10; v16 = v12; v7[2] = v16; result = sub_85DA90(a2, &v14, a4); *a4 = *result; a4[1] = result[1]; a4[2] = result[2]; return result; } //----- (008A2A20) -------------------------------------------------------- int __thiscall sub_8A2A20(float *this, char *a2) { float *v2; // edi float *v3; // eax int v4; // esi int result; // eax v2 = this; v3 = (float *)operator new(0x60u); v4 = (int)v3; if ( v3 ) { sub_8A9540(v3); *(float *)(v4 + 84) = 0.0; *(_DWORD *)v4 = &NiPSysBoxEmitter::`vftable'; *(float *)(v4 + 88) = 0.0; *(float *)(v4 + 92) = 0.0; } else { v4 = 0; } sub_8A9560(v2, v4, a2); *(float *)(v4 + 84) = v2[21]; result = v4; *(float *)(v4 + 88) = v2[22]; *(float *)(v4 + 92) = v2[23]; return result; } // A29F54: using guessed type void *NiPSysBoxEmitter::`vftable'; //----- (008A2A80) -------------------------------------------------------- float *sub_8A2A80() { float *v0; // eax float *v1; // esi float *result; // eax v0 = (float *)operator new(0x60u); v1 = v0; if ( !v0 ) return 0; sub_8A9540(v0); v1[21] = 0.0; *(_DWORD *)v1 = &NiPSysBoxEmitter::`vftable'; v1[22] = 0.0; result = v1; v1[23] = 0.0; return result; } // A29F54: using guessed type void *NiPSysBoxEmitter::`vftable'; //----- (008A2AC0) -------------------------------------------------------- int __thiscall sub_8A2AC0(int *this, void **a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST28_4 void (__cdecl *v6)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v7; // eax _DWORD *v8; // ST14_4 void (__cdecl *v9)(_DWORD *, int *, signed int, void ***, signed int); // eax _DWORD *v10; // edi int (__cdecl *v11)(_DWORD *, int *, signed int, void ***, signed int); // edx v2 = a2; v3 = this; sub_8A9570(this, a2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v4[1]; a2 = (void **)4; v6(v5, v3 + 21, 4, &a2, 1); v7 = v2[88]; v8 = v7; v9 = (void (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v7[1]; a2 = (void **)4; v9(v8, v3 + 22, 4, &a2, 1); v10 = v2[88]; v11 = (int (__cdecl *)(_DWORD *, int *, signed int, void ***, signed int))v10[1]; a2 = (void **)4; return v11(v10, v3 + 23, 4, &a2, 1); } //----- (008A2B40) -------------------------------------------------------- int __thiscall sub_8A2B40(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // edi int (__cdecl *v11)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A95B0(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 21, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 22, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; return v11(v10, v3 + 23, 4, &a2, 1); } //----- (008A2BC0) -------------------------------------------------------- unsigned int __thiscall sub_8A2BC0(float *this, int a2) { _DWORD *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A9740(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D48); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Width", v3[21]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Height", v3[22]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Depth", v3[23]); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (008A2CC0) -------------------------------------------------------- _DWORD *sub_8A2CC0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); v1[6] = 0; v1[7] = 0; *v1 = &NiPSysBoundUpdateModifier::`vftable'; return v1; } // A29FB4: using guessed type void *NiPSysBoundUpdateModifier::`vftable'; //----- (008A2CF0) -------------------------------------------------------- bool __thiscall sub_8A2CF0(_WORD *this, int a2) { _WORD *v2; // esi bool result; // al v2 = this; result = sub_8A8740(this, a2); if ( result ) result = *(_WORD *)(a2 + 24) == v2[12]; return result; } //----- (008A2D20) -------------------------------------------------------- char *sub_8A2D20() { return dword_BA4D50; } //----- (008A2D30) -------------------------------------------------------- int __thiscall sub_8A2D30(int this, signed __int16 a2) { int v2; // esi void *v3; // ST00_4 signed __int16 v4; // ax signed int v5; // edi int result; // eax int v7; // ecx unsigned int v8; // edi int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // ecx int v15; // edi int v16; // edx signed int v17; // [esp+8h] [ebp-4h] int v18; // [esp+14h] [ebp+8h] v2 = this; v3 = *(void **)(this + 28); *(_WORD *)(this + 24) = a2; operator delete(v3); v4 = a2; if ( a2 <= 1 ) v4 = 1; v5 = v4; v17 = v4; *(_DWORD *)(v2 + 28) = operator new(16 * v4); result = 0; if ( v5 >= 4 ) { v7 = 0; v8 = ((unsigned int)(v5 - 4) >> 2) + 1; v18 = 4 * v8; do { v9 = *(_DWORD *)(v2 + 28); *(_DWORD *)(v9 + v7) = dword_BA45C0; *(_DWORD *)(v9 + v7 + 4) = dword_BA45C4; *(_DWORD *)(v9 + v7 + 8) = dword_BA45C8; *(float *)(v9 + v7 + 12) = 0.0; v10 = *(_DWORD *)(v2 + 28); *(_DWORD *)(v10 + v7 + 16) = dword_BA45C0; *(_DWORD *)(v10 + v7 + 20) = dword_BA45C4; *(_DWORD *)(v10 + v7 + 24) = dword_BA45C8; *(float *)(v10 + v7 + 28) = 0.0; v11 = *(_DWORD *)(v2 + 28); *(_DWORD *)(v11 + v7 + 48 - 16) = dword_BA45C0; v12 = v11 + v7 + 48 - 16; *(_DWORD *)(v12 + 4) = dword_BA45C4; *(_DWORD *)(v12 + 8) = dword_BA45C8; *(float *)(v12 + 12) = 0.0; v13 = v7 + 48 + *(_DWORD *)(v2 + 28); *(_DWORD *)v13 = dword_BA45C0; *(_DWORD *)(v13 + 4) = dword_BA45C4; v7 += 64; --v8; *(_DWORD *)(v13 + 8) = dword_BA45C8; *(float *)(v13 + 12) = 0.0; } while ( v8 ); result = v18; v5 = v17; } if ( result < v5 ) { v14 = 16 * result; v15 = v5 - result; do { result = v14 + *(_DWORD *)(v2 + 28); *(_DWORD *)result = dword_BA45C0; *(_DWORD *)(result + 4) = dword_BA45C4; v16 = dword_BA45C8; *(float *)(result + 12) = 0.0; v14 += 16; --v15; *(_DWORD *)(result + 8) = v16; } while ( v15 ); } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A2E90) -------------------------------------------------------- _DWORD *__thiscall sub_8A2E90(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 7); *(_DWORD *)this = &NiPSysBoundUpdateModifier::`vftable'; operator delete(v3); sub_8A8700(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A29FB4: using guessed type void *NiPSysBoundUpdateModifier::`vftable'; //----- (008A2ED0) -------------------------------------------------------- signed int __thiscall sub_8A2ED0(_WORD *this, int a2, int a3) { int v3; // ebx int v4; // edi _WORD *v5; // esi bool v6; // zf int v7; // eax signed int v8; // ebx float *v9; // eax int v10; // edi int v11; // eax _DWORD *v12; // eax signed int v13; // edx double v14; // st7 int v15; // ecx int v16; // eax signed int v17; // edi int v18; // ecx double v19; // st6 float *v20; // ecx float *v21; // eax signed int result; // eax int v23; // [esp+Ch] [ebp-18h] int v24; // [esp+10h] [ebp-14h] int v25; // [esp+14h] [ebp-10h] float i; // [esp+18h] [ebp-Ch] float *v27; // [esp+1Ch] [ebp-8h] int v28; // [esp+20h] [ebp-4h] v3 = *(unsigned __int16 *)(a3 + 72); v4 = *(_DWORD *)(a3 + 104); v5 = this; v6 = this[12] == -1; v27 = *(float **)(a3 + 104); if ( v6 ) sub_8A2D30((int)this, *(unsigned __int16 *)(a3 + 12) / 20 + 1); v28 = v3; v7 = v3 / 20 + 1; v8 = (signed __int16)v5[12]; if ( v8 >= v7 ) v8 = v7; if ( v8 <= 1 ) v8 = 1; if ( *(_DWORD *)(v4 + 188) ) v9 = **(float ***)(v4 + 180); else v9 = 0; v10 = (unsigned __int16)v5[13]; v23 = *((_DWORD *)v9 + 9); v24 = *((_DWORD *)v9 + 10); v25 = *((_DWORD *)v9 + 11); for ( i = v9[12]; v10 < v28; v10 += v8 ) { if ( *((_DWORD *)v27 + 47) > (unsigned int)v10 ) v11 = *(_DWORD *)(*((_DWORD *)v27 + 45) + 4 * v10); else v11 = 0; sub_86BC10((float *)&v23, (float *)(v11 + 36)); } v12 = (_DWORD *)(*((_DWORD *)v5 + 7) + 16 * (unsigned __int16)v5[13]); *v12 = v23; v12[1] = v24; v12[2] = v25; v13 = v8; *(float *)(*((_DWORD *)v5 + 7) + 16 * (unsigned __int16)v5[13] + 12) = i; v14 = 0.0; if ( v8 < (signed __int16)v5[12] ) { v15 = 16 * v8; do { v16 = *((_DWORD *)v5 + 7); *(_DWORD *)(v16 + v15) = dword_BA45C0; *(_DWORD *)(v16 + v15 + 4) = dword_BA45C4; *(_DWORD *)(v16 + v15 + 8) = dword_BA45C8; *(float *)(*((_DWORD *)v5 + 7) + v15 + 12) = 0.0; ++v13; v15 += 16; } while ( v13 < (signed __int16)v5[12] ); } if ( v8 > 1 ) { v17 = 16; v28 = v8 - 1; do { v18 = *((_DWORD *)v5 + 7); v19 = *(float *)(v18 + v17 + 12); v20 = (float *)(v17 + v18); if ( v14 != v19 ) { sub_86BC10((float *)&v23, v20); v14 = 0.0; } v17 += 16; --v28; } while ( v28 ); } if ( i == v14 ) i = **(float **)(a3 + 76) * **(float **)(a3 + 68); v21 = v27; *((_DWORD *)v27 + 9) = v23; *((_DWORD *)v21 + 10) = v24; *((_DWORD *)v21 + 11) = v25; v21[12] = i; result = (unsigned __int16)++v5[13]; if ( result >= v8 ) v5[13] = 0; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A30A0) -------------------------------------------------------- _DWORD *__thiscall sub_8A30A0(signed __int16 *this, char *Src) { signed __int16 *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x20u); v4 = v3; if ( v3 ) { sub_8A86D0(v3); *v4 = &NiPSysBoundUpdateModifier::`vftable'; v4[6] = 0; v4[7] = 0; } else { v4 = 0; } sub_8A8800(v2, (int)v4, Src); sub_8A2D30((int)v4, v2[12]); return v4; } // A29FB4: using guessed type void *NiPSysBoundUpdateModifier::`vftable'; //----- (008A30F0) -------------------------------------------------------- int __thiscall sub_8A30F0(_WORD *this, float a2, int a3) { int v3; // edi int v4; // esi int v5; // edx int result; // eax int v7; // eax unsigned int v8; // edx int v9; // ecx int v10; // edi float *v11; // eax int v12; // ecx float v13; // edx double v14; // st7 int v15; // ecx double v16; // st6 double v17; // st5 float *v18; // edx int v19; // eax float *v20; // ebx double v21; // st4 double v22; // st4 float *v23; // ecx double v24; // st3 double v25; // st2 double v26; // st0 double v27; // st7 signed int v28; // edx int v29; // ecx int v30; // eax int v31; // eax signed int v32; // ebx int v33; // ecx double v34; // st6 float *v35; // ecx double v36; // st6 int v37; // edx int v38; // eax int v39; // edx int v40; // [esp+14h] [ebp-4Ch] int v41; // [esp+18h] [ebp-48h] int v42; // [esp+1Ch] [ebp-44h] float v43; // [esp+20h] [ebp-40h] float v44; // [esp+24h] [ebp-3Ch] float v45; // [esp+28h] [ebp-38h] float v46; // [esp+2Ch] [ebp-34h] float v47; // [esp+30h] [ebp-30h] float v48; // [esp+34h] [ebp-2Ch] float v49; // [esp+38h] [ebp-28h] int v50; // [esp+3Ch] [ebp-24h] int v51; // [esp+40h] [ebp-20h] int i; // [esp+44h] [ebp-1Ch] int v53; // [esp+48h] [ebp-18h] float v54; // [esp+4Ch] [ebp-14h] float v55; // [esp+50h] [ebp-10h] float v56; // [esp+54h] [ebp-Ch] float v57; // [esp+58h] [ebp-8h] float v58; // [esp+5Ch] [ebp-4h] float v59; // [esp+68h] [ebp+8h] int v60; // [esp+68h] [ebp+8h] float v61; // [esp+68h] [ebp+8h] float v62; // [esp+68h] [ebp+8h] float v63; // [esp+68h] [ebp+8h] float v64; // [esp+68h] [ebp+8h] float v65; // [esp+68h] [ebp+8h] float v66; // [esp+68h] [ebp+8h] float v67; // [esp+68h] [ebp+8h] float v68; // [esp+68h] [ebp+8h] float v69; // [esp+68h] [ebp+8h] float v70; // [esp+68h] [ebp+8h] int v71; // [esp+68h] [ebp+8h] v3 = *(unsigned __int16 *)(a3 + 72); v4 = (int)this; if ( (_WORD)v3 ) { v7 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 4))(a3); if ( v7 ) { while ( (char *)v7 != dword_BA4D90 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_6; } result = sub_8A2ED0((_WORD *)v4, SLODWORD(a2), a3); } else { LABEL_6: if ( *(_WORD *)(v4 + 24) == -1 ) { v8 = (signed int)(1374389535 * (unsigned __int64)*(unsigned __int16 *)(a3 + 12) >> 32) >> 4; sub_8A2D30(v4, v8 + (v8 >> 31) + 1); } v9 = v3; v10 = *(signed __int16 *)(v4 + 24); v53 = v9; if ( v10 >= v9 / 50 + 1 ) v10 = v9 / 50 + 1; if ( v10 <= 1 ) v10 = 1; v11 = *(float **)(a3 + 32); v12 = *(_DWORD *)(a3 + 68); v13 = *(float *)(a3 + 76); v59 = *v11; v58 = v11[1]; v57 = v11[2]; v14 = v59; v60 = v12; v15 = *(unsigned __int16 *)(v4 + 26); v56 = v14; v16 = v58; v50 = v15; v55 = v58; v17 = v57; v57 = v13; v54 = v17; if ( v15 < v53 ) { v51 = 12 * v10; v18 = &v11[3 * v15]; v19 = LODWORD(v57) - v60; v20 = (float *)(v60 + 4 * v15); for ( i = LODWORD(v57) - v60; ; v19 = i ) { v61 = *(float *)((char *)v20 + v19) * *v20; v21 = v61; v62 = *v18 - v61; if ( v62 <= v14 ) v14 = v62; v63 = v21 + *v18; if ( v63 >= (double)v56 ) v56 = v21 + *v18; v64 = v18[1] - v21; if ( v64 <= v16 ) { v58 = v18[1] - v21; v16 = v64; } v65 = v18[1] + v21; if ( v65 >= (double)v55 ) v55 = v18[1] + v21; v66 = v18[2] - v21; if ( v66 <= v17 ) { v57 = v18[2] - v21; v17 = v66; } v67 = v21 + v18[2]; if ( v67 >= (double)v54 ) v54 = v21 + v18[2]; v18 = (float *)((char *)v18 + v51); v15 += v10; v20 += v10; if ( v15 >= v53 ) break; } v15 = v50; } v22 = v56; v23 = (float *)(*(_DWORD *)(v4 + 28) + 16 * v15); v47 = v56 + v14; v24 = v55; v48 = v55 + v16; v25 = v54; v49 = v54 + v17; v44 = v47 * 0.5; v26 = v48; *v23 = v44; v45 = v26 * 0.5; v23[1] = v45; v46 = 0.5 * v49; v23[2] = v46; v44 = v22 - v14; v45 = v24 - v16; v46 = v25 - v17; v68 = v45 * v45 + v44 * v44 + v46 * v46; v69 = sqrt(v68); v70 = v69 * 0.5; *(float *)(*(_DWORD *)(v4 + 28) + 16 * *(unsigned __int16 *)(v4 + 26) + 12) = v70; v27 = 0.0; v28 = v10; if ( v10 < *(signed __int16 *)(v4 + 24) ) { v29 = 16 * v10; do { v30 = *(_DWORD *)(v4 + 28); *(_DWORD *)(v30 + v29) = dword_BA45C0; *(_DWORD *)(v30 + v29 + 4) = dword_BA45C4; *(_DWORD *)(v30 + v29 + 8) = dword_BA45C8; *(float *)(*(_DWORD *)(v4 + 28) + v29 + 12) = 0.0; ++v28; v29 += 16; } while ( v28 < *(signed __int16 *)(v4 + 24) ); } v31 = *(_DWORD *)(v4 + 28) + 16 * *(unsigned __int16 *)(v4 + 26); v40 = *(_DWORD *)v31; v41 = *(_DWORD *)(v31 + 4); v42 = *(_DWORD *)(v31 + 8); v43 = *(float *)(v31 + 12); if ( v10 > 1 ) { v32 = 16; v71 = v10 - 1; do { v33 = *(_DWORD *)(v4 + 28); v34 = *(float *)(v33 + v32 + 12); v35 = (float *)(v32 + v33); if ( v27 != v34 ) { sub_86BC10((float *)&v40, v35); v27 = 0.0; } v32 += 16; --v71; } while ( v71 ); } v36 = v43; v37 = v40; *(float *)(a3 + 28) = v43; v38 = v41; *(_DWORD *)(a3 + 16) = v37; v39 = v42; *(_DWORD *)(a3 + 20) = v38; *(_DWORD *)(a3 + 24) = v39; if ( v36 == v27 ) *(float *)(a3 + 28) = **(float **)(a3 + 68) * **(float **)(a3 + 76); result = (unsigned __int16)++*(_WORD *)(v4 + 26); if ( result >= v10 ) *(_WORD *)(v4 + 26) = 0; } } else { *(_DWORD *)(a3 + 16) = dword_BA45C0; *(_DWORD *)(a3 + 20) = dword_BA45C4; v5 = dword_BA45C8; *(float *)(a3 + 28) = 0.0; *(_DWORD *)(a3 + 24) = v5; result = 0; this[13] = 0; } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A34C0) -------------------------------------------------------- int __thiscall sub_8A34C0(int *this, signed int a2) { signed int v2; // edi int v3; // esi bool v4; // cf bool v5; // zf int result; // eax int v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = (int)this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 28) < 0xA010064u; v5 = *(_DWORD *)(v2 + 28) == 167837796; a2 = 2; if ( v4 || v5 ) { (*(void (__cdecl **)(_DWORD, int *, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4))( *(_DWORD *)(v2 + 352), &v7, 2, &a2, 1); result = sub_8A2D30(v3, v7); } else { (*(void (__cdecl **)(_DWORD, int, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 352) + 4))( *(_DWORD *)(v2 + 352), v3 + 24, 2, &a2, 1); result = sub_8A2D30(v3, *(_WORD *)(v3 + 24)); } return result; } //----- (008A3540) -------------------------------------------------------- int __thiscall sub_8A3540(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int (__cdecl *v4)(int, const char **, signed int, signed int *, signed int); // edx int v5; // ST00_4 v2 = a2; v3 = this; sub_8A8930(this, a2); v4 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(*(_DWORD *)(v2 + 356) + 8); v5 = *(_DWORD *)(v2 + 356); a2 = 2; return v4(v5, v3 + 6, 2, &a2, 1); } //----- (008A3580) -------------------------------------------------------- unsigned int __thiscall sub_8A3580(_WORD *this, int a2) { _DWORD *v2; // esi _WORD *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D50); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8785B0((int)"Update Skip", v3[12]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); return sub_823870(v2, v7, &a2); } //----- (008A3660) -------------------------------------------------------- int __thiscall sub_8A3660(void *this, int a2) { return sub_81C190(this, a2); } //----- (008A3670) -------------------------------------------------------- char *sub_8A3670() { return dword_BA4D58; } //----- (008A3680) -------------------------------------------------------- int __thiscall sub_8A3680(void *this, char *Src) { void *v2; // edi _DWORD *v3; // eax int v4; // esi int v5; // edx int result; // eax v2 = this; v3 = operator new(0x38u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(_DWORD *)v4 = &NiPSysBombModifier::`vftable'; *(_DWORD *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = dword_ABD48C; *(_DWORD *)(v4 + 32) = dword_ABD490; v5 = dword_ABD494; *(float *)(v4 + 40) = 0.0; *(float *)(v4 + 44) = 0.0; *(_DWORD *)(v4 + 36) = v5; *(_DWORD *)(v4 + 48) = 0; *(_DWORD *)(v4 + 52) = 0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(_DWORD *)(v4 + 28) = *((_DWORD *)v2 + 7); *(_DWORD *)(v4 + 32) = *((_DWORD *)v2 + 8); *(_DWORD *)(v4 + 36) = *((_DWORD *)v2 + 9); *(float *)(v4 + 40) = *((float *)v2 + 10); result = v4; *(float *)(v4 + 44) = *((float *)v2 + 11); *(_DWORD *)(v4 + 48) = *((_DWORD *)v2 + 12); *(_DWORD *)(v4 + 52) = *((_DWORD *)v2 + 13); return result; } // A2A014: using guessed type void *NiPSysBombModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; //----- (008A3720) -------------------------------------------------------- char __thiscall sub_8A3720(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // ebx char result; // al v2 = (_DWORD **)a2; v3 = (int)this; sub_8A8870(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = a2; result = sub_8C4C90(*v2, *(_DWORD *)(v3 + 24), &a2); if ( result ) { result = a2; *(_DWORD *)(v4 + 24) = a2; } else { *(_DWORD *)(v4 + 24) = *(_DWORD *)(v3 + 24); } return result; } //----- (008A3770) -------------------------------------------------------- int __thiscall sub_8A3770(float *this, float a2, int a3) { float *v3; // eax float *v4; // ebx float v5; // edx int v6; // esi bool v7; // zf float v8; // ecx int v9; // edx int v10; // ecx float *v11; // eax float v12; // ecx float v13; // edx float v14; // eax int result; // eax float *v16; // eax int v17; // ebx double v18; // st7 int v19; // eax int v20; // eax float v21; // ST14_4 float v22; // eax float v23; // ST18_4 float v24; // ecx float v25; // ST1C_4 float v26; // edx float v27; // ST20_4 float v28; // ST24_4 float v29; // ST28_4 float v30; // ST2C_4 float v31; // ST30_4 float v32; // ST34_4 float *v33; // [esp+30h] [ebp-130h] float *v34; // [esp+34h] [ebp-12Ch] float v35; // [esp+38h] [ebp-128h] float v36; // [esp+3Ch] [ebp-124h] float v37; // [esp+40h] [ebp-120h] int v38; // [esp+44h] [ebp-11Ch] int v39; // [esp+48h] [ebp-118h] int v40; // [esp+4Ch] [ebp-114h] float v41; // [esp+50h] [ebp-110h] float v42; // [esp+54h] [ebp-10Ch] float v43; // [esp+58h] [ebp-108h] float v44; // [esp+5Ch] [ebp-104h] int v45; // [esp+60h] [ebp-100h] float v46; // [esp+64h] [ebp-FCh] float v47; // [esp+68h] [ebp-F8h] float v48; // [esp+6Ch] [ebp-F4h] float v49; // [esp+70h] [ebp-F0h] float v50; // [esp+74h] [ebp-ECh] float v51; // [esp+78h] [ebp-E8h] float v52; // [esp+7Ch] [ebp-E4h] float v53; // [esp+80h] [ebp-E0h] float v54; // [esp+84h] [ebp-DCh] float v55; // [esp+88h] [ebp-D8h] char v56; // [esp+8Ch] [ebp-D4h] char v57; // [esp+C0h] [ebp-A0h] char v58; // [esp+F4h] [ebp-6Ch] char v59; // [esp+128h] [ebp-38h] int v60; // [esp+14Ch] [ebp-14h] int v61; // [esp+150h] [ebp-10h] int v62; // [esp+154h] [ebp-Ch] v3 = this; v4 = this + 7; v38 = dword_BA45C0; v39 = dword_BA45C4; v5 = this[7]; v6 = a3; v7 = *(_WORD *)(a3 + 72) == 0; v40 = dword_BA45C8; v8 = this[8]; v49 = v5; v9 = *((int *)v3 + 9); v34 = v3; v45 = a3; v50 = v8; v51 = *(float *)&v9; if ( !v7 ) { v10 = *((_DWORD *)v3 + 6); if ( v10 ) { qmemcpy(&v56, (const void *)(v10 + 104), 0x34u); qmemcpy(&v57, (const void *)(*((_DWORD *)v3 + 4) + 104), 0x34u); sub_87C3F0((float *)&v57, v9, (float *)&v58); sub_85BDC0((float *)&v58, (float *)&v59, (float *)&v56); v38 = v60; v39 = v61; v40 = v62; v11 = sub_85DA90((float *)&v59, &v35, v4); v12 = *v11; v13 = v11[1]; v14 = v11[2]; v49 = v12; v50 = v13; v51 = v14; sub_4430B0(&v49); v6 = v45; } } result = 0; v45 = 0; if ( *(_WORD *)(v6 + 72) > 0u ) { while ( 1 ) { v33 = (float *)(*(_DWORD *)(v6 + 92) + 28 * (unsigned __int16)result); v55 = v33[5]; if ( v55 < (double)a2 ) { v16 = (float *)(*(_DWORD *)(v6 + 32) + 12 * (unsigned __int16)result); v44 = a2 - v55; v46 = *v16 - *(float *)&v38; v47 = v16[1] - *(float *)&v39; v48 = v16[2] - *(float *)&v40; v55 = v47 * v47 + v46 * v46 + v48 * v48; v55 = sqrt(v55); v17 = *((_DWORD *)v34 + 12); v18 = v55; if ( !v17 || v34[10] >= v18 ) break; } LABEL_23: result = v45 + 1; v45 = result; if ( (unsigned __int16)result >= *(_WORD *)(v6 + 72) ) return result; } v19 = *((_DWORD *)v34 + 13); if ( v19 ) { v20 = v19 - 1; if ( !v20 ) { v55 = v51 * v48 + v50 * v47 + v46 * v49; v27 = v49 * v55; v28 = v50 * v55; v29 = v55 * v51; v41 = v46 - v27; v52 = v41; v42 = v47 - v28; v53 = v42; v43 = v48 - v29; v54 = v43; v55 = v42 * v42 + v41 * v41 + v43 * v43; v55 = sqrt(v55); v18 = v55; if ( 0.0 != v55 ) { v55 = 1.0 / v18; v52 = v55 * v41; v53 = v53 * v55; v54 = v55 * v54; } goto LABEL_18; } if ( v20 != 1 ) { LABEL_18: v55 = 1.0; if ( v17 == 1 ) { v55 = (v34[10] - v18) / v34[10]; } else if ( v17 == 2 ) { v55 = -v18 / v34[10]; v55 = exp(v55); } v44 = v34[11] * v55 * v44; v35 = v44 * v52; v36 = v53 * v44; v37 = v44 * v54; *v33 = *v33 + v35; v33[1] = v33[1] + v36; v33[2] = v33[2] + v37; goto LABEL_23; } v55 = v46 * v49 + v50 * v47 + v51 * v48; if ( v55 >= 0.0 ) { v22 = v49; v24 = v50; v18 = v55; v26 = v51; } else { v55 = -v55; v21 = -v49; v22 = v21; v23 = -v50; v24 = v23; v25 = -v51; v26 = v25; v18 = v55; } } else { v55 = 1.0 / v18; v30 = v55 * v46; v22 = v30; v31 = v47 * v55; v24 = v31; v32 = v55 * v48; v26 = v32; } v52 = v22; v53 = v24; v54 = v26; goto LABEL_18; } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A3CE0) -------------------------------------------------------- char __thiscall sub_8A3CE0(void *this, int a2) { void *v2; // esi int v3; // eax v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v3 = *((_DWORD *)v2 + 6); if ( v3 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) goto LABEL_18; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) { LABEL_18: if ( *(_DWORD *)(a2 + 24) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 28))(*(_DWORD *)(a2 + 24)) ) { return 0; } } if ( !(unsigned __int8)sub_85ECE0((float *)v2 + 7, (float *)(a2 + 28)) && *(float *)(a2 + 40) == *((float *)v2 + 10) && *(float *)(a2 + 44) == *((float *)v2 + 11) && *((_DWORD *)v2 + 12) == *(_DWORD *)(a2 + 48) && *((_DWORD *)v2 + 13) == *(_DWORD *)(a2 + 52) ) { return 1; } return 0; } //----- (008A3D80) -------------------------------------------------------- int __thiscall sub_8A3D80(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // edi int (__cdecl *v14)(int, int *, signed int, signed int *, signed int); // ecx int result; // eax int v16; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_8A88B0(this, a2); sub_876290((void **)v2); sub_8608D0((char *)v3 + 28, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, &v16, 4, &a2, 1); v3[12] = v16; v13 = *(_DWORD *)(v2 + 352); v14 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v13 + 4); a2 = 4; result = v14(v13, &v16, 4, &a2, 1); v3[13] = v16; return result; } //----- (008A3E30) -------------------------------------------------------- int __thiscall sub_8A3E30(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, signed int *, signed int); // eax int v13; // edi int (__cdecl *v14)(int, const char **, signed int, signed int *, signed int); // edx v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[6]); sub_860940((char *)v3 + 28, (signed int)v2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 10, 4, &a2, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 11, 4, &a2, 1); v10 = v2[89]; v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 12, 4, &a2, 1); v13 = v2[89]; v14 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v13 + 8); a2 = 4; return v14(v13, v3 + 13, 4, &a2, 1); } //----- (008A3ED0) -------------------------------------------------------- unsigned int __thiscall sub_8A3ED0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx int v16; // eax int v17; // eax const char *v18; // eax char *v19; // eax unsigned int v20; // ebx int v21; // edi int v22; // edi const char *v23; // eax char *v24; // eax unsigned int v25; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D58); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 6); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Bomb Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_85F140((float *)v3 + 7, (int)"Bomb Axis"); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Decay", *((float *)v3 + 10)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"DeltaV", *((float *)v3 + 11)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = *((_DWORD *)v3 + 12); if ( v16 ) { v17 = v16 - 1; if ( v17 ) { if ( v17 == 1 ) v18 = "EXPONENTIAL"; else v18 = "Unknown"; } else { v18 = "LINEAR"; } } else { v18 = "NONE"; } v19 = sub_878740((int)"Decay Type", (int)v18); v20 = v2[3]; a2 = (int)v19; if ( v20 >= v2[2] ) sub_8237A0(v2, v20 + v2[5]); sub_823870(v2, v20, &a2); v21 = *((_DWORD *)v3 + 13); if ( v21 ) { v22 = v21 - 1; if ( v22 ) { if ( v22 == 1 ) v23 = "PLANAR"; else v23 = "Unknown"; } else { v23 = "CYLINDRICAL"; } } else { v23 = "SPHERICAL"; } v24 = sub_878740((int)"Symmetry Type", (int)v23); v25 = v2[3]; a2 = (int)v24; if ( v25 >= v2[2] ) sub_8237A0(v2, v25 + v2[5]); return sub_823870(v2, v25, &a2); } //----- (008A40C0) -------------------------------------------------------- _DWORD *sub_8A40C0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x20u); v1 = v0; if ( !v0 ) return 0; sub_8A86D0(v0); *v1 = &NiPSysAgeDeathModifier::`vftable'; *((_BYTE *)v1 + 24) = 0; v1[7] = 0; return v1; } // A2A0DC: using guessed type void *NiPSysAgeDeathModifier::`vftable'; //----- (008A4100) -------------------------------------------------------- int __thiscall sub_8A4100(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8A8720(a2); result = sub_875AD0(a2); v2[7] = result; return result; } //----- (008A4120) -------------------------------------------------------- char __thiscall sub_8A4120(_BYTE *this, int a2) { _BYTE *v2; // esi int v4; // eax int v5; // esi v2 = this; if ( !sub_8A8740(this, a2) || *(_BYTE *)(a2 + 24) != v2[24] ) return 0; v4 = *(_DWORD *)(a2 + 28); if ( v4 ) { if ( !*((_DWORD *)v2 + 7) ) return 0; if ( v4 ) goto LABEL_14; } if ( *((_DWORD *)v2 + 7) ) return 0; if ( v4 ) { LABEL_14: v5 = *((_DWORD *)v2 + 7); if ( !v5 || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v4 + 28))(v5) ) return 1; return 0; } return 1; } //----- (008A4180) -------------------------------------------------------- char *sub_8A4180() { return dword_BA4D60; } //----- (008A4190) -------------------------------------------------------- void __thiscall sub_8A4190(int this, float a2, int a3) { int v3; // ebx _DWORD *v4; // edi int v5; // ecx double v6; // st7 int v7; // esi float *v8; // edx float v9; // ST20_4 float v10; // ST00_4 _DWORD *v11; // ebx int v12; // edi int v13; // esi float *v14; // eax int v15; // [esp+1Ch] [ebp-8h] float v16; // [esp+20h] [ebp-4h] int v17; // [esp+30h] [ebp+Ch] float v18; // [esp+30h] [ebp+Ch] v3 = this; v15 = this; if ( *(_BYTE *)(this + 24) && *(_DWORD *)(this + 28) ) { v4 = (_DWORD *)a3; v5 = *(unsigned __int16 *)(a3 + 72); v17 = v5; if ( (_WORD)v5 ) { v6 = a2; v7 = (unsigned __int16)(v5 - 1); do { v8 = (float *)(v4[23] + 28 * (unsigned __int16)v7); v16 = v6 - v8[5] + v8[3]; v8[3] = v16; if ( v8[4] < (double)v16 ) { v9 = v8[4] + v6 - v16; v10 = v6; (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD))(**(_DWORD **)(v3 + 28) + 76))( LODWORD(v10), LODWORD(v9), v7, *(_DWORD *)(v3 + 16)); (*(void (__thiscall **)(_DWORD *, int))(*v4 + 72))(v4, v7); v6 = a2; v5 = v17; v3 = v15; } v5 += 0xFFFF; v7 += 0xFFFF; v17 = v5; } while ( (_WORD)v5 ); } } else { v11 = (_DWORD *)a3; v12 = *(unsigned __int16 *)(a3 + 72); if ( (_WORD)v12 ) { v13 = (unsigned __int16)(v12 - 1); do { v14 = (float *)(v11[23] + 28 * (unsigned __int16)v13); v18 = a2 - v14[5] + v14[3]; v14[3] = v18; if ( v14[4] < (double)v18 ) (*(void (__thiscall **)(_DWORD *, int))(*v11 + 72))(v11, v13); v12 += 0xFFFF; v13 += 0xFFFF; } while ( (_WORD)v12 ); } } } //----- (008A42D0) -------------------------------------------------------- int __thiscall sub_8A42D0(_BYTE *this, char *Src) { _BYTE *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0x20u); v4 = (int)v3; if ( v3 ) { sub_8A86D0(v3); *(_DWORD *)v4 = &NiPSysAgeDeathModifier::`vftable'; *(_BYTE *)(v4 + 24) = 0; *(_DWORD *)(v4 + 28) = 0; } else { v4 = 0; } sub_8A8800(v2, v4, Src); *(_BYTE *)(v4 + 24) = v2[24]; return v4; } // A2A0DC: using guessed type void *NiPSysAgeDeathModifier::`vftable'; //----- (008A4320) -------------------------------------------------------- char __thiscall sub_8A4320(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // eax int v5; // ebx v2 = (_DWORD **)a2; v3 = (int)this; sub_8A8870(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = *(_DWORD *)(v3 + 28); v5 = a2; if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &a2); if ( (_BYTE)v4 ) { *(_DWORD *)(v5 + 28) = a2; } else { v4 = *(_DWORD *)(v3 + 28); *(_DWORD *)(v5 + 28) = v4; } } return v4; } //----- (008A4380) -------------------------------------------------------- int __thiscall sub_8A4380(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v8 = 1; v6(v5, (char *)&a2 + 3, 1, &v8, 1); *((_BYTE *)v3 + 24) = HIBYTE(a2) != 0; return sub_876290((void **)v2); } //----- (008A43D0) -------------------------------------------------------- int __thiscall sub_8A43D0(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 24); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v8 = 1; v6(v5, (char *)&a2 + 3, 1, &v8, 1); return (*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[7]); } //----- (008A4420) -------------------------------------------------------- unsigned int __thiscall sub_8A4420(_BYTE *this, int a2) { _DWORD *v2; // esi _BYTE *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi int v8; // ebx const char *v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D60); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"Spawn on Death", v3[24]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = *((_DWORD *)v3 + 7); if ( v8 ) v9 = *(const char **)(v8 + 8); else v9 = "None"; v10 = sub_878740((int)"Spawn Modifier", (int)v9); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (008A44F0) -------------------------------------------------------- float *sub_8A44F0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysAirFieldSpreadCtlr::`vftable'; return v1; } // A2A14C: using guessed type void *NiPSysAirFieldSpreadCtlr::`vftable'; //----- (008A4520) -------------------------------------------------------- char *sub_8A4520() { return dword_BA4D68; } //----- (008A4530) -------------------------------------------------------- int __thiscall sub_8A4530(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 100); return result; } //----- (008A4550) -------------------------------------------------------- void __thiscall sub_8A4550(_DWORD *this, float a2) { int v2; // ecx double v3; // st7 v2 = this[17]; if ( a2 < 0.0 ) a2 = 0.0; v3 = a2; if ( a2 > 1.0 ) v3 = (float)1.0; *(float *)(v2 + 100) = v3; } //----- (008A4590) -------------------------------------------------------- float *__thiscall sub_8A4590(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysAirFieldSpreadCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2A14C: using guessed type void *NiPSysAirFieldSpreadCtlr::`vftable'; //----- (008A45E0) -------------------------------------------------------- unsigned int __thiscall sub_8A45E0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D68); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A4630) -------------------------------------------------------- void __thiscall sub_8A4630(float *this, float *a2) { float *v2; // esi this[16] = *a2; this[17] = a2[1]; this[18] = a2[2]; v2 = this + 19; *v2 = *a2; v2[1] = a2[1]; v2[2] = a2[2]; sub_4430B0(this + 19); if ( *(float *)&dword_BA45C0 == *v2 && *(float *)&dword_BA45C4 == v2[1] && *(float *)&dword_BA45C8 == v2[2] ) { *(_DWORD *)v2 = dword_ABD48C; *((_DWORD *)v2 + 1) = dword_ABD490; *((_DWORD *)v2 + 2) = dword_ABD494; } } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A46C0) -------------------------------------------------------- char *sub_8A46C0() { return dword_BA4D70; } //----- (008A46D0) -------------------------------------------------------- float *__thiscall sub_8A46D0(float *this) { float *v1; // esi int v2; // eax float v4; // [esp+4h] [ebp-Ch] float v5; // [esp+8h] [ebp-8h] float v6; // [esp+Ch] [ebp-4h] v1 = this; sub_8A8AA0(this); *(_DWORD *)v1 = &NiPSysAirFieldModifier::`vftable'; v4 = -*(float *)&dword_ABD48C; v5 = -*(float *)&dword_ABD490; v6 = -*(float *)&dword_ABD494; sub_8A4630(v1, &v4); *((_DWORD *)v1 + 12) = dword_AC01D0; *((_DWORD *)v1 + 13) = dword_AC01D4; v2 = dword_AC01D8; v1[15] = 3.4028235e38; *((_DWORD *)v1 + 14) = v2; return v1; } // A2A1F4: using guessed type void *NiPSysAirFieldModifier::`vftable'; // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // AC01D0: using guessed type int dword_AC01D0; // AC01D4: using guessed type int dword_AC01D4; // AC01D8: using guessed type int dword_AC01D8; //----- (008A4740) -------------------------------------------------------- char __thiscall sub_8A4740(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // eax int v5; // ebx v2 = (_DWORD **)a2; v3 = (int)this; sub_8A8870(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = *(_DWORD *)(v3 + 24); v5 = a2; if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &a2); if ( (_BYTE)v4 ) { *(_DWORD *)(v5 + 24) = a2; } else { v4 = *(_DWORD *)(v3 + 24); *(_DWORD *)(v5 + 24) = v4; } } return v4; } //----- (008A47A0) -------------------------------------------------------- float *sub_8A47A0() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x68u); if ( v0 ) result = sub_8A46D0(v0); else result = 0; return result; } //----- (008A47C0) -------------------------------------------------------- void __fastcall sub_8A47C0(int a1, int a2, float a3, int a4) { int v4; // ebx double v5; // st7 bool v6; // zf int v7; // eax int v8; // ecx int v9; // edx float *v10; // eax float v11; // ecx float v12; // edx float v13; // eax int v14; // esi float v15; // ST14_4 unsigned __int16 v16; // di double v17; // st7 double v18; // st6 double v19; // st5 float *v20; // edx double v21; // st4 float *v22; // eax float v23; // ecx float v24; // eax float v25; // ST30_4 float v26; // ST34_4 float v27; // ST38_4 float v28; // ST18_4 float v29; // ST1C_4 float v30; // ST20_4 float v31; // [esp+14h] [ebp-114h] float v32; // [esp+18h] [ebp-110h] float v33; // [esp+1Ch] [ebp-10Ch] float v34; // [esp+2Ch] [ebp-FCh] float v35; // [esp+30h] [ebp-F8h] float v36; // [esp+34h] [ebp-F4h] float v37; // [esp+38h] [ebp-F0h] float v38; // [esp+3Ch] [ebp-ECh] float v39; // [esp+40h] [ebp-E8h] float v40; // [esp+44h] [ebp-E4h] float v41; // [esp+48h] [ebp-E0h] float v42; // [esp+4Ch] [ebp-DCh] int v43; // [esp+50h] [ebp-D8h] char v44; // [esp+54h] [ebp-D4h] char v45; // [esp+88h] [ebp-A0h] char v46; // [esp+BCh] [ebp-6Ch] char v47; // [esp+F0h] [ebp-38h] int v48; // [esp+114h] [ebp-14h] int v49; // [esp+118h] [ebp-10h] int v50; // [esp+11Ch] [ebp-Ch] v4 = a1; v5 = *(float *)(a1 + 28); v43 = a4; if ( 0.0 != v5 ) { qmemcpy(&v46, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); qmemcpy(&v44, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v44, a2, (float *)&v45); sub_85BDC0((float *)&v45, (float *)&v47, (float *)&v46); v6 = *(_BYTE *)(v4 + 96) == 0; v7 = v48; *(float *)(v4 + 60) = a3; v8 = v49; v9 = v50; *(_DWORD *)(v4 + 48) = v7; *(_DWORD *)(v4 + 52) = v8; v31 = *(float *)&v7; v32 = *(float *)&v8; v33 = *(float *)&v9; *(_DWORD *)(v4 + 56) = v9; if ( v6 ) { v11 = *(float *)(v4 + 76); v12 = *(float *)(v4 + 80); v13 = *(float *)(v4 + 84); } else { v10 = sub_85DA90((float *)&v47, &v34, (float *)(v4 + 76)); v11 = *v10; v12 = v10[1]; v13 = v10[2]; } v14 = v43; v15 = *(float *)(v4 + 28); v40 = v11; v41 = v12; v42 = v13; v16 = 0; v37 = v11 * v15; v38 = v12 * v15; v39 = v15 * v13; if ( *(_WORD *)(v43 + 72) > 0u ) { v17 = v39; v18 = v38; v19 = v37; do { v20 = (float *)(*(_DWORD *)(v14 + 92) + 28 * v16); *(float *)&v43 = a3 - v20[5]; v21 = *(float *)&v43; if ( 0.0 != *(float *)&v43 ) { v22 = (float *)(*(_DWORD *)(v14 + 32) + 12 * v16); v37 = *v22; v23 = v22[1]; v24 = v22[2]; v38 = v23; v40 = v37 - v31; v39 = v24; v41 = v23 - v32; v42 = v24 - v33; *(float *)&v43 = v41 * v41 + v40 * v40 + v42 * v42; if ( *(float *)(v4 + 44) >= (double)*(float *)&v43 ) { v25 = *v20 - v19; v26 = v20[1] - v18; v27 = v20[2] - v17; *(float *)&v43 = v26 * v18 + v25 * v19 + v27 * v17; if ( *(float *)&v43 < 0.0 ) { v43 = *(int *)(v4 + 88); v28 = *(float *)&v43 * v19; v29 = v18 * *(float *)&v43; v30 = *(float *)&v43 * v17; v34 = v28 * v21; v35 = v29 * v21; v36 = v21 * v30; *v20 = v34 + *v20; v20[1] = v20[1] + v35; v20[2] = v36 + v20[2]; } } } ++v16; } while ( v16 < *(_WORD *)(v14 + 72) ); } } } //----- (008A4AD0) -------------------------------------------------------- void __fastcall sub_8A4AD0(int a1, int a2, float a3, int a4) { int v4; // ebx double v5; // st7 bool v6; // zf int v7; // ecx int v8; // edx int v9; // eax float *v10; // eax float v11; // ecx float v12; // edx float v13; // eax int v14; // esi float v15; // ST14_4 unsigned __int16 v16; // dx double v17; // st7 double v18; // st6 double v19; // st5 float *v20; // ecx double v21; // st3 float v22; // [esp+8h] [ebp-FCh] float v23; // [esp+Ch] [ebp-F8h] float v24; // [esp+10h] [ebp-F4h] float v25; // [esp+14h] [ebp-F0h] float v26; // [esp+18h] [ebp-ECh] float v27; // [esp+1Ch] [ebp-E8h] float v28; // [esp+20h] [ebp-E4h] float v29; // [esp+24h] [ebp-E0h] float v30; // [esp+28h] [ebp-DCh] int v31; // [esp+2Ch] [ebp-D8h] char v32; // [esp+30h] [ebp-D4h] char v33; // [esp+64h] [ebp-A0h] char v34; // [esp+98h] [ebp-6Ch] char v35; // [esp+CCh] [ebp-38h] int v36; // [esp+F0h] [ebp-14h] int v37; // [esp+F4h] [ebp-10h] int v38; // [esp+F8h] [ebp-Ch] v4 = a1; v5 = *(float *)(a1 + 28); v31 = a4; if ( 0.0 != v5 ) { qmemcpy(&v34, (const void *)(*(_DWORD *)(a1 + 24) + 104), 0x34u); qmemcpy(&v32, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v32, a2, (float *)&v33); sub_85BDC0((float *)&v33, (float *)&v35, (float *)&v34); v6 = *(_BYTE *)(v4 + 96) == 0; v7 = v36; *(float *)(v4 + 60) = a3; v8 = v37; v9 = v38; *(_DWORD *)(v4 + 48) = v7; *(_DWORD *)(v4 + 52) = v8; *(_DWORD *)(v4 + 56) = v9; if ( v6 ) { v11 = *(float *)(v4 + 76); v12 = *(float *)(v4 + 80); v13 = *(float *)(v4 + 84); } else { v10 = sub_85DA90((float *)&v35, &v22, (float *)(v4 + 76)); v11 = *v10; v12 = v10[1]; v13 = v10[2]; } v14 = v31; v15 = *(float *)(v4 + 28); v28 = v11; v29 = v12; v30 = v13; v16 = 0; v25 = v11 * v15; v26 = v29 * v15; v27 = v15 * v13; if ( *(_WORD *)(v31 + 72) > 0u ) { v17 = v27; v18 = v26; v19 = v25; do { v20 = (float *)(*(_DWORD *)(v14 + 92) + 28 * v16); *(float *)&v31 = a3 - v20[5]; v21 = *(float *)&v31; if ( 0.0 != *(float *)&v31 ) { v25 = *v20 - v19; v26 = v20[1] - v18; v27 = v20[2] - v17; *(float *)&v31 = v26 * v18 + v25 * v19 + v27 * v17; if ( *(float *)&v31 < 0.0 ) { v31 = *(int *)(v4 + 88); v28 = *(float *)&v31 * v19; v29 = v18 * *(float *)&v31; v30 = *(float *)&v31 * v17; v22 = v28 * v21; v23 = v29 * v21; v24 = v21 * v30; *v20 = v22 + *v20; v20[1] = v23 + v20[1]; v20[2] = v20[2] + v24; } } ++v16; } while ( v16 < *(_WORD *)(v14 + 72) ); } } } //----- (008A4D30) -------------------------------------------------------- float *__thiscall sub_8A4D30(float *this, char *Src) { float *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x68u); if ( v3 ) v4 = sub_8A46D0(v3); else v4 = 0; sub_8A8AD0(v2, (int)v4, Src); sub_8A4630(v4, v2 + 16); return v4; } //----- (008A4D80) -------------------------------------------------------- bool __thiscall sub_8A4D80(float *this, float *a2) { float *v2; // esi v2 = this; return sub_8A8B10(this, (int)a2) && v2[16] == a2[16] && v2[17] == a2[17] && v2[18] == a2[18]; } //----- (008A4DE0) -------------------------------------------------------- void __thiscall sub_8A4DE0(_DWORD *this, float a2, int a3) { bool v3; // zf int v4; // ebx int v5; // ecx float v6; // edi float *v7; // eax float v8; // ecx float v9; // edx float v10; // eax bool v11; // al double v12; // st7 int *v13; // eax float v14; // ecx float v15; // edx float v16; // eax float v17; // ecx double v18; // st7 double v19; // st6 int v20; // edi float v21; // eax int v22; // ecx int v23; // esi int v24; // eax int v25; // ecx float v26; // edx int v27; // eax float v28; // ST18_4 float v29; // ST1C_4 float v30; // ecx float v31; // edx double v32; // st7 float v33; // ST20_4 double v34; // st6 float v35; // ST24_4 double v36; // st5 float v37; // ST28_4 double v38; // st7 double v39; // st7 float v40; // [esp+28h] [ebp-150h] float v41; // [esp+2Ch] [ebp-14Ch] int v42; // [esp+30h] [ebp-148h] float v43; // [esp+34h] [ebp-144h] float v44; // [esp+38h] [ebp-140h] float v45; // [esp+3Ch] [ebp-13Ch] float v46; // [esp+40h] [ebp-138h] float v47; // [esp+44h] [ebp-134h] float v48; // [esp+48h] [ebp-130h] float v49; // [esp+4Ch] [ebp-12Ch] float v50; // [esp+50h] [ebp-128h] float v51; // [esp+54h] [ebp-124h] float v52; // [esp+58h] [ebp-120h] float v53; // [esp+5Ch] [ebp-11Ch] float v54; // [esp+60h] [ebp-118h] float v55; // [esp+64h] [ebp-114h] float v56; // [esp+68h] [ebp-110h] int v57; // [esp+6Ch] [ebp-10Ch] float v58; // [esp+70h] [ebp-108h] float v59; // [esp+74h] [ebp-104h] float v60; // [esp+78h] [ebp-100h] float v61; // [esp+7Ch] [ebp-FCh] float v62; // [esp+80h] [ebp-F8h] float v63; // [esp+84h] [ebp-F4h] float v64; // [esp+88h] [ebp-F0h] float v65; // [esp+8Ch] [ebp-ECh] float v66; // [esp+90h] [ebp-E8h] float v67; // [esp+94h] [ebp-E4h] float v68; // [esp+98h] [ebp-E0h] float v69; // [esp+9Ch] [ebp-DCh] float v70; // [esp+A0h] [ebp-D8h] char v71; // [esp+A4h] [ebp-D4h] char v72; // [esp+D8h] [ebp-A0h] char v73; // [esp+10Ch] [ebp-6Ch] char v74; // [esp+140h] [ebp-38h] float v75; // [esp+164h] [ebp-14h] float v76; // [esp+168h] [ebp-10h] float v77; // [esp+16Ch] [ebp-Ch] v3 = *(_WORD *)(a3 + 72) == 0; v56 = a2; v4 = (int)this; v69 = *(float *)&a3; if ( !v3 ) { v5 = this[6]; if ( v5 ) { if ( 0.0 == *(float *)(v4 + 32) && *(float *)(v4 + 92) == 0.0 && !*(_BYTE *)(v4 + 98) ) { if ( *(_BYTE *)(v4 + 36) ) sub_8A47C0(v4, a3, v56, a3); else sub_8A4AD0(v4, a3, v56, a3); return; } qmemcpy(&v73, (const void *)(v5 + 104), 0x34u); qmemcpy(&v71, (const void *)(*(_DWORD *)(v4 + 16) + 104), 0x34u); sub_87C3F0((float *)&v71, a3, (float *)&v72); sub_85BDC0((float *)&v72, (float *)&v74, (float *)&v73); v3 = *(_BYTE *)(v4 + 96) == 0; v6 = v75; v51 = v75; v52 = v76; v53 = v77; if ( v3 ) { v8 = *(float *)(v4 + 76); v9 = *(float *)(v4 + 80); v10 = *(float *)(v4 + 84); } else { v7 = sub_85DA90((float *)&v74, &v48, (float *)(v4 + 76)); v8 = *v7; v9 = v7[1]; v10 = v7[2]; } v66 = v8; v68 = v10; v67 = v9; v63 = *(float *)&dword_BA45C0; v64 = *(float *)&dword_BA45C4; v65 = *(float *)&dword_BA45C8; v11 = sub_85ECE0((float *)(v4 + 48), (float *)&dword_AC01D0); v12 = v56; if ( v11 && 3.402823466385289e38 != *(float *)(v4 + 60) && v12 != *(float *)(v4 + 60) ) { *(float *)&v57 = v51 - *(float *)(v4 + 48); v58 = v52 - *(float *)(v4 + 52); v59 = v53 - *(float *)(v4 + 56); v70 = *(float *)(v4 + 92); v48 = *(float *)&v57 * v70; v49 = v58 * v70; v50 = v70 * v59; v70 = v12 - *(float *)(v4 + 60); v13 = (int *)sub_443040(&v48, (int)&v42, v70); v12 = v56; v14 = *((float *)v13 + 1); v63 = *(float *)v13; v15 = *((float *)v13 + 2); v64 = v14; v65 = v15; } *(float *)(v4 + 60) = v12; v16 = v52; v17 = v53; v70 = *(float *)(v4 + 28); *(float *)(v4 + 48) = v6; v18 = v66; *(float *)(v4 + 52) = v16; v19 = v70; *(float *)(v4 + 56) = v17; *(float *)&v57 = v18 * v19; v58 = v67 * v19; v59 = v19 * v68; v63 = *(float *)&v57 + v63; v64 = v64 + v58; v65 = v65 + v59; v70 = v65 * v65 + v63 * v63 + v64 * v64; if ( 0.0 != v70 ) { v59 = v65; *(float *)&v57 = v63; v58 = v64; v41 = sub_4430B0((float *)&v57); if ( *(_BYTE *)(v4 + 98) ) { v70 = *(float *)(v4 + 100) * flt_BA45B8; v70 = cos(v70); v40 = v70; } v20 = LODWORD(v69); LOWORD(v21) = 0; v70 = 0.0; if ( *(_WORD *)(LODWORD(v69) + 72) > 0u ) { while ( 1 ) { v22 = LOWORD(v21); v23 = *(_DWORD *)(v20 + 92) + 28 * LOWORD(v21); v54 = v56 - *(float *)(v23 + 20); if ( 0.0 != v54 ) { v3 = *(_BYTE *)(v4 + 36) == 0; v24 = *(_DWORD *)(v20 + 32); v25 = 3 * v22; v26 = *(float *)(v24 + 4 * v25); v27 = v24 + 4 * v25; v28 = *(float *)(v27 + 4); v29 = *(float *)(v27 + 8); v45 = v26 - v51; v46 = v28 - v52; v47 = v29 - v53; v55 = v46 * v46 + v45 * v45 + v47 * v47; if ( v3 || *(float *)(v4 + 44) >= (double)v55 ) { v3 = *(_BYTE *)(v4 + 98) == 0; v60 = v63; v61 = v64; v62 = v65; if ( v3 ) goto LABEL_26; v61 = v46; v60 = v45; v62 = v47; sub_4430B0(&v60); v69 = v59 * v62 + v58 * v61 + v60 * *(float *)&v57; if ( v40 <= (double)v69 ) break; } } LABEL_32: LODWORD(v21) = LODWORD(v70) + 1; v70 = v21; if ( LOWORD(v21) >= *(_WORD *)(v20 + 72) ) return; } v60 = v60 * v41; v61 = v61 * v41; v62 = v62 * v41; LABEL_26: v30 = *(float *)(v23 + 4); v31 = *(float *)(v23 + 8); v66 = *(float *)v23; v67 = v30; v68 = v31; v32 = v60; v33 = v66 - v60; v34 = v61; v35 = v30 - v61; v36 = v62; v37 = v31 - v62; v69 = v35 * v61 + v33 * v60 + v37 * v62; if ( v69 < 0.0 ) { v3 = *(_BYTE *)(v4 + 36) == 0; v69 = v54; if ( !v3 && *(float *)(v4 + 32) != 0.0 ) { v69 = sqrt(v55); v69 = 1.0 - v69 / *(float *)(v4 + 40); v69 = pow(v69, *(float *)(v4 + 32)); v69 = v69 * v54; v32 = v60; v36 = v62; v34 = v61; } v55 = *(float *)(v4 + 88); *(float *)&v42 = v32 * v55; v43 = v34 * v55; v44 = v55 * v36; v48 = *(float *)&v42 * v69; v49 = v43 * v69; v50 = v69 * v44; v66 = v48 + v66; v38 = v49; *(float *)v23 = v66; v67 = v38 + v67; v39 = v50; *(float *)(v23 + 4) = v67; v68 = v39 + v68; *(float *)(v23 + 8) = v68; } goto LABEL_32; } } } } } // AC01D0: using guessed type int dword_AC01D0; // BA45B8: using guessed type float flt_BA45B8; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A5540) -------------------------------------------------------- int __thiscall sub_8A5540(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v13)(int, char *, signed int, int *, signed int); // edx int v14; // ST00_4 int v15; // eax int v16; // ST3C_4 void (__cdecl *v17)(int, char *, signed int, int *, signed int); // eax int v18; // edi int (__cdecl *v19)(int, int *, signed int, int *, signed int); // eax int v21; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_8A8BB0(this, a2); sub_8608D0((char *)v3 + 64, v2); sub_8A4630((float *)v3, (float *)v3 + 16); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v21 = 4; v6(v5, v3 + 22, 4, &v21, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 4); v21 = 4; v9(v8, v3 + 23, 4, &v21, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 4); v21 = 1; v12(v11, (char *)&a2 + 3, 1, &v21, 1); *((_BYTE *)v3 + 96) = HIBYTE(a2) != 0; v13 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v14 = *(_DWORD *)(v2 + 352); v21 = 1; v13(v14, (char *)&a2 + 3, 1, &v21, 1); *((_BYTE *)v3 + 97) = HIBYTE(a2) != 0; v15 = *(_DWORD *)(v2 + 352); v16 = v15; v17 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v15 + 4); v21 = 1; v17(v16, (char *)&a2 + 3, 1, &v21, 1); *((_BYTE *)v3 + 98) = HIBYTE(a2) != 0; v18 = *(_DWORD *)(v2 + 352); v19 = *(int (__cdecl **)(int, int *, signed int, int *, signed int))(v18 + 4); v21 = 4; return v19(v18, v3 + 25, 4, &v21, 1); } //----- (008A5640) -------------------------------------------------------- int __thiscall sub_8A5640(const char **this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, char *, signed int, int *, signed int); // edx int v12; // eax int v13; // ST00_4 void (__cdecl *v14)(int, char *, signed int, int *, signed int); // eax int v15; // eax void (__cdecl *v16)(int, char *, signed int, int *, signed int); // edx int v17; // edi int (__cdecl *v18)(int, char *, signed int, int *, signed int); // ecx int v20; // [esp+8h] [ebp-4h] v2 = a2; v3 = (char *)this; sub_8A8C60(this, a2); sub_860940(v3 + 64, v2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v20 = 4; v6(v5, v3 + 88, 4, &v20, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v20 = 4; v9(v8, v3 + 92, 4, &v20, 1); v10 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = v3[96]; v11 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); v20 = 1; v11(v10, (char *)&a2 + 3, 1, &v20, 1); HIBYTE(a2) = v3[97]; v12 = *(_DWORD *)(v2 + 356); v13 = v12; v14 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v12 + 8); v20 = 1; v14(v13, (char *)&a2 + 3, 1, &v20, 1); v15 = *(_DWORD *)(v2 + 356); HIBYTE(a2) = v3[98]; v16 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v15 + 8); v20 = 1; v16(v15, (char *)&a2 + 3, 1, &v20, 1); v17 = *(_DWORD *)(v2 + 356); v18 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v17 + 8); v20 = 4; return v18(v17, v3 + 100, 4, &v20, 1); } //----- (008A5740) -------------------------------------------------------- unsigned int __thiscall sub_8A5740(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8D10(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D70); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_85F140((float *)v3 + 16, (int)"Direction"); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_85F140((float *)v3 + 19, (int)"Unit Direction"); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"AirFriction", *((float *)v3 + 22)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Inherit Velocity", *((float *)v3 + 23)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_878510((int)"Inherit Rotation", *((_BYTE *)v3 + 96)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878510((int)"Component Only", *((_BYTE *)v3 + 97)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_878510((int)"Enable Spread", *((_BYTE *)v3 + 98)); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_8786B0((int)"Spread", *((float *)v3 + 25)); v21 = v2[3]; a2 = (int)v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); return sub_823870(v2, v21, &a2); } //----- (008A5940) -------------------------------------------------------- float *sub_8A5940() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysAirFieldInheritVelocityCtlr::`vftable'; return v1; } // A2A2B4: using guessed type void *NiPSysAirFieldInheritVelocityCtlr::`vftable'; //----- (008A5970) -------------------------------------------------------- char __thiscall sub_8A5970(float *this, int a2) { return sub_8A9AC0(this, a2); } //----- (008A5980) -------------------------------------------------------- char *sub_8A5980() { return dword_BA4D78; } //----- (008A5990) -------------------------------------------------------- int __thiscall sub_8A5990(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 92); return result; } //----- (008A59B0) -------------------------------------------------------- void __thiscall sub_8A59B0(_DWORD *this, float a2) { int v2; // ecx double v3; // st7 v2 = this[17]; if ( a2 < 0.0 ) a2 = 0.0; v3 = a2; if ( a2 > 1.0 ) v3 = (float)1.0; *(float *)(v2 + 92) = v3; } //----- (008A59F0) -------------------------------------------------------- float *__thiscall sub_8A59F0(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysAirFieldInheritVelocityCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2A2B4: using guessed type void *NiPSysAirFieldInheritVelocityCtlr::`vftable'; //----- (008A5A40) -------------------------------------------------------- unsigned int __thiscall sub_8A5A40(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D78); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A5A90) -------------------------------------------------------- float *sub_8A5A90() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0x48u); v1 = v0; if ( !v0 ) return 0; sub_8A9A60(v0); *(_DWORD *)v1 = &NiPSysAirFieldAirFrictionCtlr::`vftable'; return v1; } // A2A35C: using guessed type void *NiPSysAirFieldAirFrictionCtlr::`vftable'; //----- (008A5AC0) -------------------------------------------------------- char *sub_8A5AC0() { return dword_BA4D80; } //----- (008A5AD0) -------------------------------------------------------- int __thiscall sub_8A5AD0(_DWORD *this, float *a2) { int result; // eax result = this[17]; *a2 = *(float *)(result + 88); return result; } //----- (008A5AF0) -------------------------------------------------------- void __thiscall sub_8A5AF0(_DWORD *this, float a2) { int v2; // ecx double v3; // st7 v2 = this[17]; if ( a2 < 0.0 ) a2 = 0.0; v3 = a2; if ( a2 > 1.0 ) v3 = (float)1.0; *(float *)(v2 + 88) = v3; } //----- (008A5B30) -------------------------------------------------------- float *__thiscall sub_8A5B30(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x48u); v4 = v3; if ( v3 ) { sub_8A9A60(v3); *(_DWORD *)v4 = &NiPSysAirFieldAirFrictionCtlr::`vftable'; sub_8A9890(v2, (int)v4, a2); result = v4; } else { sub_8A9890(v2, 0, a2); result = 0; } return result; } // A2A35C: using guessed type void *NiPSysAirFieldAirFrictionCtlr::`vftable'; //----- (008A5B80) -------------------------------------------------------- char __thiscall sub_8A5B80(_DWORD *this, int a2) { int v2; // edi _DWORD *v3; // esi int v4; // eax v2 = a2; v3 = this; if ( !sub_8A7BF0(this, a2) ) return 0; if ( !sub_8C4C90((_DWORD *)(v2 + 216), v3[16], &a2) ) return 0; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); if ( !v4 ) return 0; while ( (char *)v4 != dword_BA4D70 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return 0; } return 1; } //----- (008A5BE0) -------------------------------------------------------- unsigned int __thiscall sub_8A5BE0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A9C50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D80); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A5C30) -------------------------------------------------------- int __thiscall sub_8A5C30(_DWORD *this, float a2, char a3) { _DWORD *v3; // esi v3 = this; (*(void (**)(void))(*this + 100))(); return sub_85C3E0(v3, a2, a3); } //----- (008A5C60) -------------------------------------------------------- float *__thiscall sub_8A5C60(_DWORD *this) { _DWORD *v1; // esi float *result; // eax v1 = this; result = sub_85BE80((int)this); if ( *((_BYTE *)v1 + 196) ) { result = (float *)dword_BA45C0; v1[35] = dword_BA45C0; v1[36] = dword_BA45C4; v1[37] = dword_BA45C8; qmemcpy(v1 + 26, &unk_ABD440, 0x24u); } return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A5CB0) -------------------------------------------------------- int __thiscall sub_8A5CB0(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // esi _DWORD *v4; // ecx v1 = this[1]; v2 = 0; if ( !v1 ) return 0; v3 = this[2]; v4 = (_DWORD *)this[2]; while ( !*v4 ) { ++v2; ++v4; if ( v2 >= v1 ) return 0; } return *(_DWORD *)(v3 + 4 * v2); } //----- (008A5CE0) -------------------------------------------------------- void *__thiscall sub_8A5CE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2A404: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008A5D10) -------------------------------------------------------- int __thiscall sub_8A5D10(_DWORD *this, int a2) { int **v2; // esi int i; // edi int (__stdcall *v4)(int, int); // edx int result; // eax v2 = (int **)this[51]; for ( i = this[46]; v2; result = v4(i, a2) ) { v4 = *(int (__stdcall **)(int, int))(*v2[2] + 64); v2 = (int **)*v2; } return result; } //----- (008A5D50) -------------------------------------------------------- _DWORD *__thiscall sub_8A5D50(_BYTE *this, float a2) { _BYTE *v2; // esi v2 = this; if ( (this[28] >> 2) & 1 ) (*(void (**)(void))(*(_DWORD *)this + 100))(); return sub_85C420(v2, a2); } //----- (008A5D80) -------------------------------------------------------- float __userpurge sub_8A5D80@(float *this@) { float *v1; // esi float result; // eax float *v3; // eax double v4; // st7 float v5; // ST04_4 float v6; // ST08_4 float v7; // ST0C_4 double v8; // st7 float v9; // ST10_4 v1 = this; result = sub_86DC50(this); if ( *((_BYTE *)v1 + 196) ) { v3 = (float *)*((_DWORD *)v1 + 46); v4 = v1[38]; v1[9] = v3[4]; v1[10] = v3[5]; v1[11] = v3[6]; v1[12] = v3[7]; v5 = v4 * v1[9]; result = v5; v6 = v1[10] * v4; v7 = v4 * v1[11]; v8 = v1[12] * v1[38]; v1[9] = v5; v1[10] = v6; v1[11] = v7; v9 = v8; v1[12] = v9; } return result; } //----- (008A5E00) -------------------------------------------------------- int __thiscall sub_8A5E00(_WORD *this, _BYTE *a2, int a3, _BYTE *a4) { int v4; // eax int result; // eax *a2 = 1; *a4 = 0; if ( *a2 ) this[14] |= 2u; else this[14] &= 0xFFFDu; this[14] |= 0xCu; v4 = (unsigned __int16)this[14]; if ( *a4 ) result = v4 | 0x10; else result = v4 & 0xFFEF; this[14] = result; return result; } //----- (008A5E50) -------------------------------------------------------- int __thiscall sub_8A5E50(_DWORD *this, _DWORD **a2) { int v2; // edi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // eax int v9; // edx int v10; // eax unsigned int v11; // edx unsigned int v12; // eax _DWORD *v13; // ecx _DWORD *v14; // esi _DWORD *v15; // edi int **v16; // esi void (__stdcall *v17)(_DWORD **); // eax _DWORD *v19; // [esp+8h] [ebp-14h] int v20; // [esp+Ch] [ebp-10h] _DWORD *v21; // [esp+10h] [ebp-Ch] int v22; // [esp+14h] [ebp-8h] int v23; // [esp+18h] [ebp-4h] v2 = (int)this; v21 = this; sub_86E4C0(this, a2); sub_8C4C90(*a2, v2, &v23); v3 = *(_DWORD *)(v2 + 220); v4 = 0; if ( v3 ) { v5 = *(_DWORD **)(v2 + 224); while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } v6 = *(_DWORD **)(*(_DWORD *)(v2 + 224) + 4 * v4); } else { LABEL_5: v6 = 0; } v7 = v6; if ( v6 ) { v19 = (_DWORD *)(v23 + 216); do { v8 = v7[1]; v9 = v7[2]; v7 = (_DWORD *)*v7; v20 = v8; v22 = v9; if ( !v7 ) { v10 = (*(int (__thiscall **)(int, int))(*(_DWORD *)(v2 + 216) + 4))(v2 + 216, v8); v11 = *(_DWORD *)(v2 + 220); v12 = v10 + 1; if ( v12 >= v11 ) { LABEL_13: v7 = 0; } else { v13 = (_DWORD *)(*(_DWORD *)(v2 + 224) + 4 * v12); while ( 1 ) { v7 = (_DWORD *)*v13; if ( *v13 ) break; ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_13; } } } v14 = *a2; v15 = *(_DWORD **)(v14[2] + 4 * (*(int (__thiscall **)(_DWORD, int))(**a2 + 4))(*a2, v22)); if ( v15 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v14 + 8))(v14, v22, v15[1]) ) { v15 = (_DWORD *)*v15; if ( !v15 ) goto LABEL_20; } v23 = v15[2]; } LABEL_20: sub_815C70(v19, v20, v23); v2 = (int)v21; } while ( v7 ); } v16 = *(int ***)(v2 + 204); while ( v16 ) { v17 = *(void (__stdcall **)(_DWORD **))(*v16[2] + 40); v16 = (int **)*v16; v17(a2); } return (*(int (__stdcall **)(_DWORD **))(**(_DWORD **)(v2 + 184) + 40))(a2); } //----- (008A5FA0) -------------------------------------------------------- char __thiscall sub_8A5FA0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int **v4; // esi void (__stdcall *v5)(int); // edx v2 = this; result = sub_88A6E0(this, a2); if ( result ) { v4 = (int **)v2[51]; while ( v4 ) { v5 = *(void (__stdcall **)(int))(*v4[2] + 20); v4 = (int **)*v4; v5(a2); } result = 1; } return result; } //----- (008A5FE0) -------------------------------------------------------- int __thiscall sub_8A5FE0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2A404: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2A434: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008A6020) -------------------------------------------------------- void __thiscall sub_8A6020(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiPSysModifier *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPSysModifier *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A2A414: using guessed type void *NiTMapBase,char const *,NiPSysModifier *>::`vftable'; // A2A444: using guessed type void *NiTPointerMap::`vftable'; // A2A464: using guessed type void *NiTStringTemplateMap,NiPSysModifier *>::`vftable'; //----- (008A6090) -------------------------------------------------------- void **__thiscall sub_8A6090(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPSysModifier *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A2A414: using guessed type void *NiTMapBase,char const *,NiPSysModifier *>::`vftable'; //----- (008A60D0) -------------------------------------------------------- void **__thiscall sub_8A60D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPSysModifier *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A2A414: using guessed type void *NiTMapBase,char const *,NiPSysModifier *>::`vftable'; // A2A444: using guessed type void *NiTPointerMap::`vftable'; //----- (008A6110) -------------------------------------------------------- void *__thiscall sub_8A6110(void *this, char a2) { void *v2; // esi v2 = this; sub_8A5FE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A6140) -------------------------------------------------------- char __thiscall sub_8A6140(float *this) { float *v1; // edi _DWORD *v2; // esi char result; // al int **v4; // esi int (*v5)(void); // eax _DWORD *i; // esi int v7; // eax v1 = this; v2 = (_DWORD *)*((_DWORD *)this + 46); (*(void (__thiscall **)(_DWORD, _DWORD))(*v2 + 60))(*((_DWORD *)this + 46), 0); result = 0; v2[25] = 0; v4 = (int **)*((_DWORD *)v1 + 51); for ( v1[59] = -3.4028235e38; v4; result = v5() ) { v5 = *(int (**)(void))(*v4[2] + 68); v4 = (int **)*v4; } for ( i = (_DWORD *)*((_DWORD *)v1 + 3); i; i = (_DWORD *)i[13] ) { v7 = (*(int (__thiscall **)(_DWORD *))(*i + 4))(i); if ( v7 ) { while ( (char *)v7 != dword_BA4DA0 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_7; } result = 1; } else { LABEL_7: result = 0; } if ( result != 0 ? (unsigned int)i : 0 ) result = (*(int (**)(void))(*(_DWORD *)(result != 0 ? (unsigned int)i : 0) + 152))(); } return result; } //----- (008A61E0) -------------------------------------------------------- char __userpurge sub_8A61E0@(_DWORD *a1@, int a2@, int a3) { _DWORD *v3; // esi _DWORD *v5; // ebx int v6; // edx int v7; // eax _DWORD *v8; // esi int v9; // esi _DWORD *v10; // edi _DWORD *v11; // esi int v12; // ecx int v13; // ebx int v14; // eax unsigned int v15; // edx unsigned int v16; // eax _DWORD *v17; // ecx int v18; // [esp-4h] [ebp-18h] _DWORD *v19; // [esp+8h] [ebp-Ch] int v20; // [esp+8h] [ebp-Ch] int v21; // [esp+Ch] [ebp-8h] int v22; // [esp+10h] [ebp-4h] _DWORD *v23; // [esp+1Ch] [ebp+8h] v3 = a1; v19 = a1; if ( !sub_871440(a1, a3) || *((_BYTE *)v3 + 196) != *(_BYTE *)(a3 + 196) ) return 0; v18 = a2; v5 = (_DWORD *)v3[51]; if ( v5 ) { while ( 1 ) { v6 = *(_DWORD *)(a3 + 216); v7 = v5[2]; v5 = (_DWORD *)*v5; v21 = v7; v22 = *(_DWORD *)(v7 + 8); v8 = *(_DWORD **)(*(_DWORD *)(a3 + 224) + 4 * (*(int (__thiscall **)(int, int, int))(v6 + 4))(a3 + 216, v22, v18)); if ( v8 ) { while ( !(*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)(a3 + 216) + 8))(a3 + 216, v22, v8[1]) ) { v8 = (_DWORD *)*v8; if ( !v8 ) goto LABEL_8; } v9 = v8[2]; } else { LABEL_8: v9 = 0; } v18 = v9; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v21 + 28))() ) break; if ( !v5 ) { v3 = v19; goto LABEL_12; } } } else { LABEL_12: v10 = v3 + 54; v11 = (_DWORD *)sub_8A5CB0(v3 + 54); if ( !v11 ) return 1; v23 = (_DWORD *)(a3 + 216); while ( 1 ) { v12 = v11[2]; v13 = v11[1]; v11 = (_DWORD *)*v11; v20 = v12; if ( !v11 ) { v14 = (*(int (__thiscall **)(_DWORD *, int))(*v10 + 4))(v10, v13); v15 = v10[1]; v16 = v14 + 1; if ( v16 >= v15 ) { LABEL_19: v11 = 0; } else { v17 = (_DWORD *)(v10[2] + 4 * v16); while ( 1 ) { v11 = (_DWORD *)*v17; if ( *v17 ) break; ++v16; ++v17; if ( v16 >= v15 ) goto LABEL_19; } } } if ( !sub_8C4C90(v23, v13, &v21) || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v20 + 28))(v21) ) break; if ( !v11 ) return 1; } } return 0; } // 8A61E0: could not find valid save-restore pair for ebx //----- (008A6330) -------------------------------------------------------- int __thiscall sub_8A6330(_DWORD *this, int *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // ebx int v5; // eax int result; // eax v2 = this; v3 = (_DWORD *)(*(int (**)(void))(*this + 4))(); v4 = v3[2]; if ( v4 != *a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *a2; v3[2] = *a2; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v3[1] = 0; *v3 = v2[1]; result = v2[1]; if ( result ) { *(_DWORD *)(result + 4) = v3; ++v2[3]; } else { ++v2[3]; v2[2] = v3; } v2[1] = v3; return result; } //----- (008A63C0) -------------------------------------------------------- void __thiscall sub_8A63C0(float *this, float a2) { float *v2; // edi _WORD *v3; // ebx double v4; // st7 _DWORD *v5; // esi _BYTE *v6; // ecx float v7; // ST00_4 v2 = this; v3 = (_WORD *)*((_DWORD *)this + 46); (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v3 + 76))(*((_DWORD *)this + 46)); v4 = a2; if ( *((_BYTE *)v2 + 240) || v2[59] > v4 ) { sub_8A6140(v2); v4 = a2; *((_BYTE *)v2 + 240) = 0; } if ( -3.4028235e38 == v2[59] ) v2[59] = v4; v5 = (_DWORD *)*((_DWORD *)v2 + 51); while ( v5 ) { v6 = (_BYTE *)v5[2]; v5 = (_DWORD *)*v5; if ( v6[20] ) { v7 = v4; (*(void (__stdcall **)(_DWORD, _WORD *))(*(_DWORD *)v6 + 60))(LODWORD(v7), v3); v4 = a2; } } v3[25] |= 7u; v2[59] = v4; } //----- (008A6460) -------------------------------------------------------- LONG __thiscall sub_8A6460(_DWORD *this, int a2, _DWORD **a3) { _DWORD *v3; // esi int **v4; // eax int v5; // eax int v6; // esi int v7; // eax _DWORD *v8; // edi int v9; // eax _DWORD *v10; // eax LONG result; // eax int v12; // esi LONG v13; // edi _DWORD *v14; // [esp+Ch] [ebp-Ch] void (__stdcall ***v15)(signed int); // [esp+10h] [ebp-8h] int *v16; // [esp+14h] [ebp-4h] v3 = this; v14 = this; sub_88A6A0(this, a2, a3); *(_BYTE *)(a2 + 196) = *((_BYTE *)v3 + 196); v4 = (int **)v3[51]; if ( v4 ) { while ( 1 ) { v16 = *v4; v5 = (*(int (__stdcall **)(_DWORD **))(*v4[2] + 8))(a3); v6 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v7 = (*(int (__thiscall **)(int))(*(_DWORD *)(a2 + 200) + 4))(a2 + 200); v8 = (_DWORD *)v7; v9 = *(_DWORD *)(v7 + 8); v15 = (void (__stdcall ***)(signed int))v9; if ( v9 != v6 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v15 ) (**v15)(1); v8[2] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } *v8 = 0; v8[1] = *(_DWORD *)(a2 + 208); v10 = *(_DWORD **)(a2 + 208); if ( v10 ) *v10 = v8; else *(_DWORD *)(a2 + 204) = v8; ++*(_DWORD *)(a2 + 212); *(_DWORD *)(a2 + 208) = v8; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); if ( !v16 ) break; v4 = (int **)v16; } v3 = v14; } *(float *)(a2 + 236) = *((float *)v3 + 59); result = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v3[46] + 8))(a3); v12 = *(_DWORD *)(a2 + 184); v13 = result; if ( v12 != result ) { if ( v12 ) { result = InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !result ) { if ( v12 ) result = (**(int (__thiscall ***)(int, signed int))v12)(v12, 1); } } *(_DWORD *)(a2 + 184) = v13; if ( v13 ) result = InterlockedIncrement((volatile LONG *)(v13 + 4)); } return result; } //----- (008A65D0) -------------------------------------------------------- unsigned int __thiscall sub_8A65D0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; sub_871420(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 4); v8 = 1; v6(v5, (char *)&a2 + 3, 1, &v8, 1); *((_BYTE *)v3 + 196) = HIBYTE(a2) != 0; return sub_876350((void **)v2); } //----- (008A6620) -------------------------------------------------------- int __thiscall sub_8A6620(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int result; // eax int v5; // eax _DWORD *v6; // edi int v7; // esi unsigned int v8; // eax bool v9; // zf int v10; // [esp+8h] [ebp-Ch] int v11; // [esp+Ch] [ebp-8h] _DWORD *v12; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v12 = this; sub_8887C0(this, a2); result = sub_875B00(a2); if ( result ) { v11 = result; while ( 1 ) { v5 = sub_875AD0(v2); v6 = (_DWORD *)v3[51]; v7 = v5; if ( v6 ) { v8 = *(_DWORD *)(v5 + 12); while ( *(_DWORD *)(v6[2] + 12) <= v8 ) { v6 = (_DWORD *)*v6; if ( !v6 ) { v10 = v7; InterlockedIncrement((volatile LONG *)(v7 + 4)); sub_8B8EC0(v3 + 50, &v10); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); goto LABEL_18; } } v10 = v7; InterlockedIncrement((volatile LONG *)(v7 + 4)); sub_8E48F0(v12 + 50, (int)v6, &v10); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3 = v12; } else { v10 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); sub_8A6330(v3 + 50, &v10); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } } LABEL_18: result = sub_815C70(v3 + 54, *(_DWORD *)(v7 + 8), v7); v9 = v11-- == 1; *(_DWORD *)(v7 + 16) = v3; if ( v9 ) break; v2 = a2; } } return result; } //----- (008A6750) -------------------------------------------------------- int __thiscall sub_8A6750(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST14_4 void (__cdecl *v6)(int, char *, signed int, int *, signed int); // eax int v7; // eax int (__cdecl *v8)(int, const char **, signed int, int *, signed int); // edx int result; // eax const char *i; // esi int v11; // eax const char *v12; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_871430(this, a2); HIBYTE(a2) = *((_BYTE *)v3 + 196); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v4 + 8); v13 = 1; v6(v5, (char *)&a2 + 3, 1, &v13, 1); v7 = v2[89]; v12 = v3[53]; v8 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v13 = 4; result = v8(v7, &v12, 4, &v13, 1); for ( i = v3[51]; i; result = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v11) ) { v11 = *((_DWORD *)i + 2); i = *(const char **)i; } return result; } //----- (008A67E0) -------------------------------------------------------- unsigned int __thiscall sub_8A67E0(int *this, char *a2) { char *v2; // edi int *v3; // ebx char *v4; // eax unsigned int v5; // esi char *v6; // eax unsigned int v7; // esi unsigned int result; // eax int i; // esi int (__stdcall *v10)(char *); // edx v2 = a2; v3 = this; sub_88A7D0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4D88); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"World Space", *((_BYTE *)v3 + 196)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); result = sub_823870(v2, v7, &a2); for ( i = v3[51]; i; result = v10(v2) ) { v10 = *(int (__stdcall **)(char *))(**(_DWORD **)(i + 8) + 32); i = *(_DWORD *)i; } return result; } //----- (008A6890) -------------------------------------------------------- void *__thiscall sub_8A6890(void *this, char a2) { void *v2; // esi v2 = this; sub_8A6020(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A68C0) -------------------------------------------------------- char *sub_8A68C0() { return dword_BA4D88; } //----- (008A68D0) -------------------------------------------------------- _DWORD *__thiscall sub_8A68D0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; sub_88A680(this); *v1 = &NiParticleSystem::`vftable'; *((_BYTE *)v1 + 196) = 1; v1[53] = 0; v1[51] = 0; v1[52] = 0; v1[50] = &NiTPointerList>::`vftable'; v1[55] = 37; v1[54] = &NiTMapBase,char const *,NiPSysModifier *>::`vftable'; v1[57] = 0; v2 = operator new(0x94u); v3 = 4 * v1[55]; v1[56] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 232) = 1; v1[54] = &NiTStringPointerMap::`vftable'; *((_BYTE *)v1 + 240) = 0; *((float *)v1 + 59) = -3.4028235e38; return v1; } // A2A414: using guessed type void *NiTMapBase,char const *,NiPSysModifier *>::`vftable'; // A2A484: using guessed type void *NiTPointerList>::`vftable'; // A2A4A0: using guessed type void *NiTStringPointerMap::`vftable'; // A2A4C4: using guessed type void *NiParticleSystem::`vftable'; //----- (008A6980) -------------------------------------------------------- _DWORD *__thiscall sub_8A6980(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi _DWORD *result; // eax v2 = this; v3 = operator new(0xF4u); if ( v3 ) { v4 = sub_8A68D0(v3); sub_8A6460(v2, (int)v4, a2); result = v4; } else { sub_8A6460(v2, 0, a2); result = 0; } return result; } //----- (008A69D0) -------------------------------------------------------- _DWORD *sub_8A69D0() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0xF4u); if ( v0 ) result = sub_8A68D0(v0); else result = 0; return result; } //----- (008A69F0) -------------------------------------------------------- void *__thiscall sub_8A69F0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray> *>::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A2A550: using guessed type void *NiTArray> *>::`vftable'; //----- (008A6A20) -------------------------------------------------------- int __thiscall sub_8A6A20(unsigned __int16 *this, unsigned __int16 a2) { unsigned __int16 *v2; // esi unsigned __int16 v3; // cx unsigned __int16 v4; // bx void (__thiscall ***v5)(_DWORD, signed int); // edi int result; // eax int v7; // [esp+8h] [ebp-4h] v2 = this; v3 = a2; v4 = a2; if ( a2 < v2[36] ) { do { (*(void (__stdcall **)(int *, _DWORD))(**((_DWORD **)v2 + 26) + 124))(&v7, v4); if ( v7 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } ++v4; } while ( v4 < v2[36] ); v3 = a2; } result = v2[6]; if ( v3 > (unsigned __int16)result ) v2[36] = result; else v2[36] = v3; return result; } //----- (008A6AA0) -------------------------------------------------------- int __thiscall sub_8A6AA0(_DWORD **this, int a2) { _DWORD **v2; // esi v2 = this; sub_85BAE0(this, a2); return (*(int (__stdcall **)(int))(*v2[26] + 40))(a2); } //----- (008A6AD0) -------------------------------------------------------- bool __thiscall sub_8A6AD0(_DWORD *this, int a2) { _DWORD *v2; // esi bool result; // al v2 = this; result = sub_8A1580(this, a2); if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2[26] + 20))(a2); result = 1; } return result; } //----- (008A6B00) -------------------------------------------------------- char __thiscall sub_8A6B00(float **this, _DWORD *a2) { float **v2; // esi char result; // al v2 = this; result = sub_8A1590(this, a2); if ( result ) result = (*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v2[26] + 28))(a2[26]) != 0; return result; } //----- (008A6B40) -------------------------------------------------------- char *sub_8A6B40() { return dword_BA4D90; } //----- (008A6B50) -------------------------------------------------------- LONG __thiscall sub_8A6B50(_DWORD *this) { void *v1; // ST04_4 _DWORD *v3; // esi bool v4; // zf int v5; // eax int v6; // ecx int v7; // eax void (__stdcall ****v8)(signed int); // eax void (__stdcall ***v9)(signed int); // ecx void *v10; // ST00_4 int v11; // edi v3 = this; v4 = this[32] == 0; *this = &NiMeshPSysData::`vftable'; if ( !v4 ) { do { v5 = v3[32]; if ( v5 ) { v6 = v3[30]; v7 = v5 - 1; v3[32] = v7; v8 = (void (__stdcall ****)(signed int))(v6 + 4 * v7); v9 = *v8; *v8 = 0; if ( v9 ) { --v3[33]; if ( v9 ) (**v9)(1); } } } while ( v3[32] ); } v10 = (void *)v3[30]; v3[29] = &NiTArray> *>::`vftable'; operator delete(v10); v11 = v3[26]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1 = (void *)v3[23]; *v3 = &NiPSysData::`vftable'; operator delete(v1); operator delete((void *)v3[24]); return sub_886B00(v3); } // A29DAC: using guessed type void *NiPSysData::`vftable'; // A2A550: using guessed type void *NiTArray> *>::`vftable'; // A2A55C: using guessed type void *NiMeshPSysData::`vftable'; //----- (008A6BF0) -------------------------------------------------------- unsigned __int16 __thiscall sub_8A6BF0(unsigned __int16 *this) { int v1; // eax int v2; // esi int v3; // edx int v4; // eax v1 = this[51]; v2 = this[51]; if ( v1 < v1 + this[50] ) { do { v3 = *((_DWORD *)this + 26); if ( *(_DWORD *)(v3 + 188) > (unsigned int)v1 ) { v4 = *(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v1); if ( v4 ) *(_WORD *)(v4 + 28) &= 0xFFFEu; } v1 = (unsigned __int16)++v2; } while ( (unsigned __int16)v2 < this[50] + this[51] ); } return sub_8A14C0(this); } //----- (008A6C40) -------------------------------------------------------- void __thiscall sub_8A6C40(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi unsigned int v3; // edi unsigned int v4; // eax unsigned int v5; // ecx int v6; // eax void (__stdcall ****v7)(signed int); // eax void (__stdcall ***v8)(signed int); // ecx _DWORD *v9; // eax _DWORD *v10; // ebx v2 = this; v3 = this[32]; if ( a2 >= v3 ) { if ( a2 > v3 ) { sub_8237A0(this + 29, a2); for ( ; v3 < a2; ++v3 ) { v9 = operator new(0x18u); v10 = 0; if ( v9 ) { v9[2] = 0; v9[3] = 0; v9[4] = 0; v9[1] = 0; *v9 = &NiTArray>::`vftable'; v9[5] = 1; v10 = v9; } sub_81A750(v10, v2[28]); if ( v3 < v2[31] ) { if ( v3 < v2[32] ) { if ( v10 ) { if ( !*(_DWORD *)(v2[30] + 4 * v3) ) ++v2[33]; } else if ( *(_DWORD *)(v2[30] + 4 * v3) ) { --v2[33]; } } else { v2[32] = v3 + 1; if ( v10 ) ++v2[33]; } *(_DWORD *)(v2[30] + 4 * v3) = v10; } } } } else if ( v3 > a2 ) { do { v4 = v2[32]; if ( v4 ) { v5 = v2[30]; v6 = v4 - 1; v2[32] = v6; v7 = (void (__stdcall ****)(signed int))(v5 + 4 * v6); v8 = *v7; *v7 = 0; if ( v8 ) { --v2[33]; if ( v8 ) (**v8)(1); } } } while ( v2[32] > a2 ); } } // A23C3C: using guessed type void *NiTArray>::`vftable'; //----- (008A6D60) -------------------------------------------------------- char __thiscall sub_8A6D60(const void **this, int a2, _DWORD **a3) { const void **v3; // esi int v4; // eax int v5; // ebx int v7; // [esp+18h] [ebp+Ch] v3 = this; sub_8A16A0(this, a2, a3); v4 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v3[26] + 8))(a3); v5 = *(_DWORD *)(a2 + 104); v7 = v4; if ( v5 == v4 ) { LOBYTE(v4) = *((_BYTE *)v3 + 108); *(_BYTE *)(a2 + 108) = v4; } else { if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v4 = v7; } *(_DWORD *)(a2 + 104) = v4; if ( v4 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v4 + 4)); *(_BYTE *)(a2 + 108) = *((_BYTE *)v3 + 108); } return v4; } //----- (008A6DF0) -------------------------------------------------------- _DWORD *sub_8A6DF0() { _DWORD *v0; // eax _DWORD *v1; // esi v0 = operator new(0x8Cu); v1 = v0; if ( !v0 ) return 0; sub_8A1410(v0); *v1 = &NiMeshPSysData::`vftable'; v1[26] = 0; v1[31] = 0; v1[32] = 0; v1[33] = 0; v1[30] = 0; v1[29] = &NiTArray> *>::`vftable'; v1[34] = 1; return v1; } // A2A550: using guessed type void *NiTArray> *>::`vftable'; // A2A55C: using guessed type void *NiMeshPSysData::`vftable'; //----- (008A6E50) -------------------------------------------------------- int __thiscall sub_8A6E50(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int result; // eax int v4; // esi int v5; // ebx v2 = this; sub_87ED10(this, a2); result = sub_875AD0(a2); v4 = v2[26]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[26] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } //----- (008A6EB0) -------------------------------------------------------- LONG __thiscall sub_8A6EB0(_DWORD *this, unsigned int a2, int a3) { LONG result; // eax int (__thiscall ***v4)(_DWORD, signed int); // esi _DWORD *v5; // ecx _DWORD *v6; // esi unsigned int v7; // edi int (__thiscall ***v8)(_DWORD, signed int); // esi result = a2; if ( a2 < this[32] ) { result = this[30] + 4 * a2; if ( *(_DWORD *)result ) { v5 = *(_DWORD **)result; if ( *(_DWORD *)(*(_DWORD *)result + 12) < *(_DWORD *)(*(_DWORD *)result + 8) ) { v6 = *(_DWORD **)result; v7 = v5[3]; if ( v7 >= v5[2] ) sub_81A750(v5, v7 + v5[5]); result = sub_7FFF10(v6, v7, &a3); } } v8 = (int (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); if ( !result ) { if ( v8 ) result = (**v8)(v8, 1); } } } else { v4 = (int (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); if ( !result ) { if ( v4 ) result = (**v4)(v4, 1); } } } return result; } //----- (008A6F50) -------------------------------------------------------- void *__thiscall sub_8A6F50(void *this, char a2) { void *v2; // esi v2 = this; sub_8A6B50(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A6F80) -------------------------------------------------------- LONG __thiscall sub_8A6F80(int this, int a2) { int v2; // esi int v3; // ebx int v4; // edi int (__stdcall *v5)(int *, int); // edx int v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // ebx int v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // ebx void (__thiscall ***v10)(_DWORD, signed int); // edi void (__thiscall ***v11)(_DWORD, signed int); // edi LONG result; // eax unsigned __int16 v13; // [esp+Ch] [ebp-10h] int v14; // [esp+10h] [ebp-Ch] int v15; // [esp+14h] [ebp-8h] int v16; // [esp+18h] [ebp-4h] v2 = this; v3 = (unsigned __int16)(*(_WORD *)(this + 72) - 1); v4 = (unsigned __int16)a2; v13 = *(_WORD *)(*(_DWORD *)(this + 92) + 28 * (unsigned __int16)a2 + 24); sub_8A1460((_WORD *)this, a2); v5 = *(int (__stdcall **)(int *, int))(**(_DWORD **)(v2 + 104) + 124); v16 = 0; if ( (_WORD)a2 == (_WORD)v3 ) { v6 = *(_DWORD *)v5(&v15, v3); if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); else v6 = v16; v7 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v7 ) (**v7)(v7, 1); } else { v5(&a2, v3); v8 = *(_DWORD *)(*(int (__stdcall **)(int *, int))(**(_DWORD **)(v2 + 104) + 124))(&v14, v4); if ( v8 ) { v16 = v8; InterlockedIncrement((volatile LONG *)(v8 + 4)); } v9 = (void (__thiscall ***)(_DWORD, signed int))v14; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v9 ) (**v9)(v9, 1); (*(void (__stdcall **)(int *, int, int))(**(_DWORD **)(v2 + 104) + 128))(&v15, v4, a2); if ( v15 ) { v10 = (void (__thiscall ***)(_DWORD, signed int))v15; if ( !InterlockedDecrement((volatile LONG *)(v15 + 4)) ) { if ( v10 ) (**v10)(v10, 1); } } v11 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 ) { if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) && v11 ) (**v11)(v11, 1); a2 = 0; } v6 = v16; } if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); result = sub_8A6EB0((_DWORD *)v2, v13, v6); if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } return result; } //----- (008A7120) -------------------------------------------------------- _DWORD *__thiscall sub_8A7120(const void **this, _DWORD **a2) { const void **v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x8Cu); v4 = v3; if ( v3 ) { sub_8A1410(v3); *v4 = &NiMeshPSysData::`vftable'; v4[26] = 0; v4[29] = &NiTArray> *>::`vftable'; v4[31] = 0; v4[34] = 1; v4[32] = 0; v4[33] = 0; v4[30] = 0; } else { v4 = 0; } sub_8A6D60(v2, (int)v4, a2); return v4; } // A2A550: using guessed type void *NiTArray> *>::`vftable'; // A2A55C: using guessed type void *NiMeshPSysData::`vftable'; //----- (008A7190) -------------------------------------------------------- int __thiscall sub_8A7190(int *this, signed int a2) { signed int v2; // ebx int *v3; // esi int result; // eax int v5; // eax int v6; // ST28_4 void (__cdecl *v7)(int, int *, signed int, int *, signed int); // eax int v8; // eax int v9; // ST14_4 void (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v11)(int, unsigned int *, signed int, int *, signed int); // edx int v12; // ST00_4 unsigned int v13; // edi int v14; // eax int v15; // ST28_4 void (__cdecl *v16)(int, unsigned int *, signed int, int *, signed int); // eax _DWORD *v17; // eax _DWORD *v18; // ebx int v19; // [esp+8h] [ebp-10h] unsigned int v20; // [esp+Ch] [ebp-Ch] unsigned int v21; // [esp+10h] [ebp-8h] char v22; // [esp+17h] [ebp-1h] v2 = a2; v3 = this; sub_8A1A50(this, a2); if ( *(_DWORD *)(a2 + 28) > 0xA010000u ) { v5 = *(_DWORD *)(a2 + 352); v6 = v5; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v5 + 4); v19 = 4; v7(v6, v3 + 28, 4, &v19, 1); v8 = *(_DWORD *)(a2 + 352); v9 = v8; v10 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v8 + 4); v19 = 1; v10(v9, &v22, 1, &v19, 1); *((_BYTE *)v3 + 108) = v22 != 0; v11 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(*(_DWORD *)(a2 + 352) + 4); v12 = *(_DWORD *)(a2 + 352); v19 = 4; v11(v12, &v21, 4, &v19, 1); sub_8237A0(v3 + 29, v21); v13 = 0; if ( v21 ) { do { v14 = *(_DWORD *)(v2 + 352); v15 = v14; v16 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v14 + 4); v19 = 4; v16(v15, &v20, 4, &v19, 1); if ( v20 ) { v17 = operator new(0x18u); v18 = 0; if ( v17 ) { v17[2] = 0; v17[3] = 0; v17[4] = 0; v17[1] = 0; *v17 = &NiTArray>::`vftable'; v17[5] = 1; v18 = v17; } sub_81A750(v18, v20); if ( v13 < v3[31] ) { if ( v13 < v3[32] ) { if ( v18 ) { if ( !*(_DWORD *)(v3[30] + 4 * v13) ) ++v3[33]; } else if ( *(_DWORD *)(v3[30] + 4 * v13) ) { --v3[33]; } } else { v3[32] = v13 + 1; if ( v18 ) ++v3[33]; } *(_DWORD *)(v3[30] + 4 * v13) = v18; } v2 = a2; } ++v13; } while ( v13 < v21 ); } result = sub_876290((void **)v2); } else { v3[28] = *((unsigned __int16 *)v3 + 6); sub_8A6C40((unsigned int *)v3, 1u); result = sub_876290((void **)a2); } return result; } // A23C3C: using guessed type void *NiTArray>::`vftable'; //----- (008A7320) -------------------------------------------------------- int __thiscall sub_8A7320(char *this, _DWORD *a2) { _DWORD *v2; // edi char *v3; // esi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, char *, signed int, _DWORD **, signed int); // eax int v7; // eax void (__cdecl *v8)(int, char *, signed int, int *, signed int); // edx int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, int *, signed int, _DWORD **, signed int); // eax unsigned int v12; // ebx int v13; // ecx bool v14; // zf int *v15; // edx int v17; // [esp+Ch] [ebp-8h] int v18; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_8A1C70(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, _DWORD **, signed int))(v4 + 8); a2 = (_DWORD *)4; v6(v5, v3 + 112, 4, &a2, 1); v7 = v2[89]; HIBYTE(a2) = v3[108]; v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v18 = 1; v8(v7, (char *)&a2 + 3, 1, &v18, 1); v18 = *((_DWORD *)v3 + 32); v9 = v2[89]; v10 = v9; v11 = *(void (__cdecl **)(int, int *, signed int, _DWORD **, signed int))(v9 + 8); a2 = (_DWORD *)4; v11(v10, &v18, 4, &a2, 1); v12 = 0; if ( *((_DWORD *)v3 + 32) ) { do { v13 = *((_DWORD *)v3 + 30); v14 = *(_DWORD *)(v13 + 4 * v12) == 0; a2 = (_DWORD *)4; if ( v14 ) { v17 = 0; v15 = &v17; } else { v18 = *(_DWORD *)(*(_DWORD *)(v13 + 4 * v12) + 8); v15 = &v18; } (*(void (__cdecl **)(_DWORD, int *, signed int, _DWORD **, signed int))(v2[89] + 8))(v2[89], v15, 4, &a2, 1); ++v12; } while ( v12 < *((_DWORD *)v3 + 32) ); } return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 26)); } //----- (008A7420) -------------------------------------------------------- unsigned int __thiscall sub_8A7420(void *this, int a2) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = (_DWORD *)a2; sub_8A1D50(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D90); v4 = v2[3]; a2 = (int)v3; if ( v4 >= v2[2] ) sub_8237A0(v2, v4 + v2[5]); return sub_823870(v2, v4, &a2); } //----- (008A7470) -------------------------------------------------------- void __thiscall sub_8A7470(_DWORD *this, int a2) { sub_871410(this, a2); } //----- (008A7480) -------------------------------------------------------- _DWORD *__thiscall sub_8A7480(float *this, float a2) { float *v2; // esi _DWORD *result; // eax v2 = this; result = sub_8A5D50(this, a2); v2[61] = a2; return result; } //----- (008A74A0) -------------------------------------------------------- unsigned int __thiscall sub_8A74A0(int *this, signed int a2) { return sub_8A65D0(this, a2); } //----- (008A74B0) -------------------------------------------------------- int __thiscall sub_8A74B0(_DWORD *this, _DWORD *a2) { return sub_8A6620(this, a2); } //----- (008A74C0) -------------------------------------------------------- char __thiscall sub_8A74C0(_DWORD *this, int a2) { return sub_8A5FA0(this, a2); } //----- (008A74D0) -------------------------------------------------------- int __thiscall sub_8A74D0(const char **this, signed int a2) { return sub_8A6750(this, a2); } //----- (008A74E0) -------------------------------------------------------- char __userpurge sub_8A74E0@(_DWORD *a1@, int a2@, int a3) { return sub_8A61E0(a1, a2, a3); } //----- (008A74F0) -------------------------------------------------------- char __thiscall sub_8A74F0(float *this, float a2, char a3) { _DWORD *v3; // ebx float *v4; // edi _DWORD *v5; // esi _DWORD *v6; // ecx _DWORD *i; // esi int v8; // eax char result; // al v3 = 0; v4 = this; if ( a3 ) { v5 = (_DWORD *)*((_DWORD *)this + 40); while ( v5 ) { v6 = (_DWORD *)v5[2]; v5 = (_DWORD *)*v5; if ( v6 && v6[3] ) (*(void (__stdcall **)(_DWORD))(*v6 + 64))(LODWORD(a2)); } for ( i = (_DWORD *)*((_DWORD *)v4 + 3); i; i = (_DWORD *)i[13] ) { v8 = (*(int (__thiscall **)(_DWORD *))(*i + 4))(i); if ( v8 ) { while ( (char *)v8 != dword_BA4C08 ) { v8 = *(_DWORD *)(v8 + 4); if ( !v8 ) goto LABEL_11; } v3 = i; } else { LABEL_11: (*(void (__thiscall **)(_DWORD *, _DWORD))(*i + 68))(i, LODWORD(a2)); } } (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 100))(v4); if ( v3 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 68))(v3, LODWORD(a2)); } else { (*(void (**)(void))(*(_DWORD *)this + 100))(); } (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 104))(v4); result = a3; v4[61] = a2; *((_BYTE *)v4 + 248) = a3; return result; } //----- (008A75C0) -------------------------------------------------------- int __thiscall sub_8A75C0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_86E300(this, a2); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2[46] + 104) + 92))(v2[44]); } //----- (008A75F0) -------------------------------------------------------- int __thiscall sub_8A75F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; sub_8887E0(this, a2); return (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2[46] + 104) + 96))(v2[45]); } //----- (008A7620) -------------------------------------------------------- int __thiscall sub_8A7620(_DWORD *this) { return (*(int (**)(void))(**(_DWORD **)(this[46] + 104) + 108))(); } //----- (008A7640) -------------------------------------------------------- signed int __thiscall sub_8A7640(_WORD *this, _BYTE *a2, int a3, _BYTE *a4) { _WORD *v4; // esi int v5; // esi signed int result; // eax v4 = this; sub_8A5E00(this, a2, 1, a4); v5 = *((_DWORD *)v4 + 46); (*(void (__stdcall **)(_BYTE *, signed int, _BYTE *))(**(_DWORD **)(v5 + 104) + 76))(a2, 1, a4); *a4 = 0; result = 65519; *(_WORD *)(*(_DWORD *)(v5 + 104) + 28) &= 0xFFEFu; return result; } //----- (008A7690) -------------------------------------------------------- int __thiscall sub_8A7690(float *this) { float *v1; // ebx int v2; // edx _DWORD *v3; // eax float *v4; // ecx int (*v5)(void); // eax float v6; // ST0C_4 v1 = this; sub_8A5C60(this); v2 = *((_DWORD *)v1 + 46); qmemcpy((void *)(*(_DWORD *)(v2 + 104) + 52), v1 + 26, 0x24u); v3 = *(_DWORD **)(v2 + 104); v3[22] = *((_DWORD *)v1 + 35); v3[23] = *((_DWORD *)v1 + 36); v3[24] = *((_DWORD *)v1 + 37); v4 = *(float **)(v2 + 104); v5 = *(int (**)(void))(*(_DWORD *)v4 + 100); v6 = fabs(v1[38]); v4[25] = v6; return v5(); } //----- (008A7700) -------------------------------------------------------- int __thiscall sub_8A7700(float *this) { float *v1; // esi float *v2; // eax int result; // eax v1 = this; sub_8A5D80(this); v2 = *(float **)(*((_DWORD *)v1 + 46) + 104); v1[9] = v2[9]; v1[10] = v2[10]; v1[11] = v2[11]; result = *((_DWORD *)v2 + 12); *((_DWORD *)v1 + 12) = result; return result; } //----- (008A7730) -------------------------------------------------------- char *sub_8A7730() { return dword_BA4D98; } //----- (008A7740) -------------------------------------------------------- char *__thiscall sub_8A7740(_DWORD *this, int a2) { _DWORD *v2; // esi char *result; // eax _DWORD *v4; // esi _DWORD *v5; // ecx _DWORD *v6; // esi unsigned int v7; // ebx unsigned int v8; // edi int v9; // ecx unsigned int v10; // ebx unsigned int v11; // edi int v12; // ecx _DWORD *v13; // [esp+8h] [ebp-4h] v2 = this; sub_86E460(this, a2); result = (char *)v2[46]; if ( result ) { result = (char *)*((_DWORD *)result + 26); if ( result ) result = (char *)(*(int (__thiscall **)(char *, int))(*(_DWORD *)result + 112))(result, a2); } v4 = (_DWORD *)v2[51]; if ( v4 ) { while ( 1 ) { v5 = (_DWORD *)*v4; v6 = (_DWORD *)v4[2]; v13 = v5; if ( v6 ) { result = (char *)(*(int (__thiscall **)(_DWORD *))(*v6 + 4))(v6); if ( result ) { while ( result != dword_BA4C78 ) { result = (char *)*((_DWORD *)result + 1); if ( !result ) goto LABEL_11; } v7 = v6[24]; v8 = 0; if ( v7 ) { do { if ( v8 < v6[24] ) { v9 = *(_DWORD *)(v6[21] + 4 * v8); if ( v9 ) result = (char *)(*(int (__stdcall **)(int))(*(_DWORD *)v9 + 112))(a2); } ++v8; } while ( v8 < v7 ); } } else { LABEL_11: result = (char *)(*(int (__thiscall **)(_DWORD *))(*v6 + 4))(v6); if ( result ) { while ( result != dword_BA4C70 ) { result = (char *)*((_DWORD *)result + 1); if ( !result ) goto LABEL_26; } v10 = v6[9]; v11 = 0; if ( v10 ) { do { if ( v11 < v6[9] ) { result = (char *)v6[7]; v12 = *(_DWORD *)&result[4 * v11]; if ( v12 ) result = (char *)(*(int (__stdcall **)(int))(*(_DWORD *)v12 + 112))(a2); } ++v11; } while ( v11 < v10 ); } } } } LABEL_26: if ( !v13 ) break; v4 = v13; } } return result; } //----- (008A7850) -------------------------------------------------------- int __thiscall sub_8A7850(float *this, _DWORD **a2) { float *v2; // edi _DWORD *v3; // eax int v4; // esi v2 = this; v3 = operator new(0xFCu); v4 = (int)v3; if ( v3 ) { sub_8A68D0(v3); *(float *)(v4 + 244) = 0.0; *(_DWORD *)v4 = &NiMeshParticleSystem::`vftable'; *(_BYTE *)(v4 + 248) = 1; } else { v4 = 0; } sub_8A6460(v2, v4, a2); *(float *)(v4 + 244) = v2[61]; *(_BYTE *)(v4 + 248) = *((_BYTE *)v2 + 248); return v4; } // A2A5B4: using guessed type void *NiMeshParticleSystem::`vftable'; //----- (008A78C0) -------------------------------------------------------- float *sub_8A78C0() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0xFCu); v1 = v0; if ( !v0 ) return 0; sub_8A68D0(v0); v1[61] = 0.0; *(_DWORD *)v1 = &NiMeshParticleSystem::`vftable'; *((_BYTE *)v1 + 248) = 1; return v1; } // A2A5B4: using guessed type void *NiMeshParticleSystem::`vftable'; //----- (008A7900) -------------------------------------------------------- unsigned int __thiscall sub_8A7900(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A67E0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4D98); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A7950) -------------------------------------------------------- _DWORD *__thiscall sub_8A7950(void *this, char a2) { _DWORD *v2; // esi v2 = this; sub_8A6020((_BYTE *)this + 216); sub_8A5FE0(v2 + 50); sub_86E150(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A7990) -------------------------------------------------------- int __thiscall sub_8A7990(int *this, _DWORD *a2) { int *v2; // esi v2 = this; sub_831250(this, a2); return sub_8769C0(a2, v2 + 16); } //----- (008A79C0) -------------------------------------------------------- char __thiscall sub_8A79C0(float *this, int a2) { float *v2; // esi int v4; // eax const char *v5; // eax const char *v6; // ecx v2 = this; if ( !sub_831330(this, a2) ) return 0; v4 = *((_DWORD *)v2 + 17); if ( v4 ) { if ( !*(_DWORD *)(a2 + 68) ) return 0; if ( v4 ) goto LABEL_20; } if ( *(_DWORD *)(a2 + 68) ) return 0; if ( v4 ) { LABEL_20: if ( *(_DWORD *)(a2 + 68) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 17) + 28))(*(_DWORD *)(a2 + 68)) ) { return 0; } } v5 = (const char *)*((_DWORD *)v2 + 16); if ( v5 ) { if ( !*(_DWORD *)(a2 + 64) ) return 0; if ( v5 ) goto LABEL_21; } if ( *(_DWORD *)(a2 + 64) ) return 0; if ( v5 ) { LABEL_21: v6 = *(const char **)(a2 + 64); if ( !v6 || !strcmp(v5, v6) ) return 1; return 0; } return 1; } //----- (008A7A70) -------------------------------------------------------- float *__thiscall sub_8A7A70(float *this) { float *v1; // esi v1 = this; sub_8310C0(this); v1[16] = 0.0; v1[17] = 0.0; *(_DWORD *)v1 = &NiPSysModifierCtlr::`vftable'; return v1; } // A2A644: using guessed type void *NiPSysModifierCtlr::`vftable'; //----- (008A7A90) -------------------------------------------------------- char *sub_8A7A90() { return dword_BA4DA0; } //----- (008A7AA0) -------------------------------------------------------- LONG __thiscall sub_8A7AA0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 int v3; // edi v1 = this; v2 = (void *)this[16]; *this = &NiPSysModifierCtlr::`vftable'; operator delete(v2); v3 = v1[15]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_86C3C0(v1); } // A2A644: using guessed type void *NiPSysModifierCtlr::`vftable'; //----- (008A7AF0) -------------------------------------------------------- int __thiscall sub_8A7AF0(_DWORD *this, int a2) { _DWORD **v2; // edi int v3; // esi int result; // eax int v5; // ebx v2 = (_DWORD **)a2; v3 = (int)this; sub_831220(this, a2); sub_8C4C90(*v2, v3, &a2); result = a2; v5 = a2; if ( *(_DWORD *)(v3 + 48) ) { if ( *(_DWORD *)(a2 + 48) ) { sub_8C4C90(*v2, *(_DWORD *)(v3 + 68), &a2); result = a2; *(_DWORD *)(v5 + 68) = a2; } } return result; } //----- (008A7B40) -------------------------------------------------------- _DWORD *__thiscall sub_8A7B40(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // edi v2 = this; v3 = (void *)*((_DWORD *)this + 16); *(_DWORD *)this = &NiPSysModifierCtlr::`vftable'; operator delete(v3); v4 = v2[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2A644: using guessed type void *NiPSysModifierCtlr::`vftable'; //----- (008A7BA0) -------------------------------------------------------- unsigned int __thiscall sub_8A7BA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ST04_4 unsigned int result; // eax char v5; // al v2 = this; v3 = a2; this[17] = 0; sub_86C4F0((int)this, v3); result = v2[12]; if ( result ) { v5 = sub_8C4C90((_DWORD *)(result + 216), v2[16], &a2); result = v5 != 0 ? (unsigned int)a2 : 0; v2[17] = result; } return result; } //----- (008A7BF0) -------------------------------------------------------- char __thiscall sub_8A7BF0(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi int v4; // eax char result; // al int v6; // eax v2 = a2; v3 = this; if ( !a2 ) goto LABEL_5; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( !v4 ) goto LABEL_5; while ( (char *)v4 != dword_BA4D88 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_5; } v6 = v3[16]; if ( v6 && v3[12] && sub_8C4C90((_DWORD *)(v2 + 216), v6, &a2) && a2 ) result = 1; else LABEL_5: result = 0; return result; } //----- (008A7C60) -------------------------------------------------------- int __thiscall sub_8A7C60(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax int v4; // ecx char v5; // al v2 = this; result = nullsub_32(a2); v4 = v2[12]; if ( v4 ) { v5 = sub_8C4C90((_DWORD *)(v4 + 216), v2[16], &a2); result = v5 != 0 ? a2 : 0; v2[17] = result; } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008A7CA0) -------------------------------------------------------- unsigned int __thiscall sub_8A7CA0(unsigned __int16 *this, char *a2) { char *v2; // esi unsigned __int16 *v3; // ebx char *v4; // eax unsigned int v5; // edi char *v6; // eax unsigned int v7; // edi v2 = a2; v3 = this; sub_831380(this, a2); v4 = sub_8784D0(*(int *)dword_BA4DA0); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878740((int)"Modifier Name", *((_DWORD *)v3 + 16)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v7, &a2); } //----- (008A7D20) -------------------------------------------------------- float *__thiscall sub_8A7D20(float *this) { float *v1; // esi int v2; // eax float *result; // eax v1 = this; sub_8A86D0(this); v1[6] = 0.0; *(_DWORD *)v1 = &NiPSysEmitter::`vftable'; v1[7] = 0.0; v1[8] = 0.0; v1[9] = 0.0; v1[10] = 0.0; v1[11] = 0.0; *((_DWORD *)v1 + 12) = dword_ABD518; *((_DWORD *)v1 + 13) = dword_ABD51C; *((_DWORD *)v1 + 14) = dword_ABD520; v2 = dword_ABD524; v1[16] = 1.0; *((_DWORD *)v1 + 15) = v2; v1[17] = 0.0; result = v1; v1[18] = 0.0; v1[19] = 0.0; return result; } // A2A70C: using guessed type void *NiPSysEmitter::`vftable'; // ABD518: using guessed type int dword_ABD518; // ABD51C: using guessed type int dword_ABD51C; // ABD520: using guessed type int dword_ABD520; // ABD524: using guessed type int dword_ABD524; //----- (008A7D80) -------------------------------------------------------- int __thiscall sub_8A7D80(float *this, int a2, char *Src) { float *v3; // esi int result; // eax v3 = this; sub_8A8800(this, a2, Src); *(float *)(a2 + 24) = v3[6]; *(float *)(a2 + 28) = v3[7]; *(float *)(a2 + 32) = v3[8]; *(float *)(a2 + 36) = v3[9]; *(float *)(a2 + 40) = v3[10]; *(float *)(a2 + 44) = v3[11]; *(float *)(a2 + 48) = v3[12]; *(float *)(a2 + 52) = v3[13]; result = *((_DWORD *)v3 + 14); *(_DWORD *)(a2 + 56) = result; *(float *)(a2 + 60) = v3[15]; *(float *)(a2 + 64) = v3[16]; *(float *)(a2 + 72) = v3[18]; *(float *)(a2 + 76) = v3[19]; *(float *)(a2 + 68) = v3[17]; return result; } //----- (008A7DF0) -------------------------------------------------------- int __stdcall sub_8A7DF0(_DWORD *a1) { return sub_8A8720(a1); } //----- (008A7E00) -------------------------------------------------------- char *sub_8A7E00() { return dword_BA4DA8; } //----- (008A7E10) -------------------------------------------------------- void __thiscall sub_8A7E10(float *this, float a2, __int16 a3, int a4) { float *v4; // esi int v5; // edi int v6; // ebx float v7; // ST4C_4 int v8; // eax int v9; // ecx int v10; // ebx int v11; // edi float v12; // ST54_4 float v13; // ST3C_4 int v14; // eax float v15; // ST54_4 float v16; // ST54_4 int v17; // eax float v18; // ST58_4 float v19; // ST5C_4 float v20; // ST58_4 float v21; // ST40_4 float v22; // ST20_4 float v23; // ST40_4 float v24; // ST24_4 float v25; // ST40_4 float v26; // ST14_4 float v27; // ST18_4 float v28; // ST1C_4 _DWORD *v29; // eax double v30; // st7 float v31; // ST3C_4 int v32; // [esp+24h] [ebp-38h] int v33; // [esp+28h] [ebp-34h] int v34; // [esp+2Ch] [ebp-30h] int v35; // [esp+30h] [ebp-2Ch] int v36; // [esp+3Ch] [ebp-20h] int v37; // [esp+40h] [ebp-1Ch] float v38; // [esp+44h] [ebp-18h] float v39; // [esp+48h] [ebp-14h] int v40; // [esp+58h] [ebp-4h] v4 = this; v5 = *(_DWORD *)(*((_DWORD *)this + 4) + 184); v34 = *(_DWORD *)(v5 + 40); v35 = *(_DWORD *)(v5 + 32); v6 = 0; v32 = *(_DWORD *)(*((_DWORD *)this + 4) + 184); v37 = *(_DWORD *)(v5 + 68); v33 = *(_DWORD *)(v5 + 76); v36 = 0; if ( (unsigned __int16)a3 > 0u ) { do { v39 = *(float *)(a4 + 4 * (unsigned __int16)v6); v7 = (double)rand() / 32767.0; v38 = (v7 - 0.5) * v4[19] + v4[18]; if ( v38 >= (double)v39 ) { v8 = *(unsigned __int16 *)(v5 + 100); if ( (_WORD)v8 ) { v9 = *(unsigned __int16 *)(v5 + 102); if ( v8 + v9 >= *(unsigned __int16 *)(v5 + 12) ) return; *(_WORD *)(v5 + 100) = v8 + 1; v40 = (unsigned __int16)(v8 + v9); LOWORD(v8) = v8 + v9; } else { v8 = *(unsigned __int16 *)(v5 + 72); *(_WORD *)(v5 + 102) = v8; if ( (unsigned __int16)v8 >= *(_WORD *)(v5 + 12) ) return; v40 = v8; *(_WORD *)(v5 + 100) = 1; } if ( (_WORD)v8 == -1 ) return; v10 = (unsigned __int16)v8; v11 = *(_DWORD *)(v5 + 92) + 28 * (unsigned __int16)v8; v12 = (double)rand() / 32767.0; v13 = (v12 - 0.5) * v4[7] + v4[6]; v14 = rand(); v15 = ((double)v14 + (double)v14) / 32767.0 - 1.0; v16 = v4[9] * v15 + v4[8]; v17 = rand(); v18 = ((double)v17 + (double)v17) / 32767.0 - 1.0; v19 = v4[11] * v18 + v4[10]; v20 = sin(v16); v21 = cos(v19); v22 = v21 * v20; v23 = sin(v19); v24 = v23 * v20; v25 = cos(v16); v26 = v22 * v13; *(float *)v11 = v26; v27 = v24 * v13; *(float *)(v11 + 4) = v27; v28 = v13 * v25; *(float *)(v11 + 8) = v28; *(float *)(v11 + 12) = v39; *(float *)(v11 + 16) = v38; *(_WORD *)(v11 + 24) = 0; (*(void (__thiscall **)(float *, int, int))(*(_DWORD *)v4 + 80))(v4, v35 + 12 * v10, v11); if ( v34 ) { v29 = (_DWORD *)(v34 + 16 * v10); *v29 = *((_DWORD *)v4 + 12); v29[1] = *((_DWORD *)v4 + 13); v29[2] = *((_DWORD *)v4 + 14); v29[3] = *((_DWORD *)v4 + 15); } if ( v37 ) { v30 = (double)rand(); v31 = (v30 + v30) / 32767.0 - 1.0; *(float *)(v37 + 4 * v10) = v4[17] * v31 + v4[16]; } if ( v33 ) *(float *)(v33 + 4 * v10) = 1.0; *(float *)(v11 + 20) = a2 - *(float *)(v11 + 12); sub_8A5D10(*((_DWORD **)v4 + 4), v40); v6 = v36; v5 = v32; } v36 = ++v6; } while ( (unsigned __int16)v6 < (unsigned __int16)a3 ); } } //----- (008A80B0) -------------------------------------------------------- int __thiscall sub_8A80B0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, int *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, int *, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, int *, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, int *, signed int, signed int *, signed int); // eax int v22; // eax int v23; // eax int v24; // ST3C_4 void (__cdecl *v25)(int, int *, signed int, signed int *, signed int); // eax int v26; // eax int v27; // ST3C_4 void (__cdecl *v28)(int, int *, signed int, signed int *, signed int); // eax int v29; // edi int (__cdecl *v30)(int, int *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A88B0(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 6, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 7, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v3 + 8, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v13 + 4); a2 = 4; v15(v14, v3 + 9, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = v16; v18 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v16 + 4); a2 = 4; v18(v17, v3 + 10, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 352); v20 = v19; v21 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v19 + 4); a2 = 4; v21(v20, v3 + 11, 4, &a2, 1); sub_8752B0((char *)v3 + 48, v2); v22 = *(_DWORD *)(v2 + 352); a2 = 4; (*(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v22 + 4))(v22, v3 + 16, 4, &a2, 1); if ( *(_DWORD *)(v2 + 28) >= 0xA030002u ) { v23 = *(_DWORD *)(v2 + 352); v24 = v23; v25 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v23 + 4); a2 = 4; v25(v24, v3 + 17, 4, &a2, 1); } v26 = *(_DWORD *)(v2 + 352); v27 = v26; v28 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v26 + 4); a2 = 4; v28(v27, v3 + 18, 4, &a2, 1); v29 = *(_DWORD *)(v2 + 352); v30 = *(int (__cdecl **)(int, int *, signed int, signed int *, signed int))(v29 + 4); a2 = 4; return v30(v29, v3 + 19, 4, &a2, 1); } //----- (008A8200) -------------------------------------------------------- int __thiscall sub_8A8200(const char **this, signed int a2) { signed int v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, const char **, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, const char **, signed int, signed int *, signed int); // eax int v16; // eax int v17; // ST3C_4 void (__cdecl *v18)(int, const char **, signed int, signed int *, signed int); // eax int v19; // eax int v20; // ST28_4 void (__cdecl *v21)(int, const char **, signed int, signed int *, signed int); // eax int v22; // eax int v23; // eax int v24; // ST28_4 void (__cdecl *v25)(int, const char **, signed int, signed int *, signed int); // eax int v26; // eax int v27; // ST14_4 void (__cdecl *v28)(int, const char **, signed int, signed int *, signed int); // eax int v29; // edi int (__cdecl *v30)(int, const char **, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_8A8930(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 6, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 7, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 8, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v13 + 8); a2 = 4; v15(v14, v3 + 9, 4, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = v16; v18 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v16 + 8); a2 = 4; v18(v17, v3 + 10, 4, &a2, 1); v19 = *(_DWORD *)(v2 + 356); v20 = v19; v21 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v19 + 8); a2 = 4; v21(v20, v3 + 11, 4, &a2, 1); sub_8609B0((char *)v3 + 48, v2); v22 = *(_DWORD *)(v2 + 356); a2 = 4; (*(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v22 + 8))(v22, v3 + 16, 4, &a2, 1); v23 = *(_DWORD *)(v2 + 356); v24 = v23; v25 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v23 + 8); a2 = 4; v25(v24, v3 + 17, 4, &a2, 1); v26 = *(_DWORD *)(v2 + 356); v27 = v26; v28 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v26 + 8); a2 = 4; v28(v27, v3 + 18, 4, &a2, 1); v29 = *(_DWORD *)(v2 + 356); v30 = *(int (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v29 + 8); a2 = 4; return v30(v29, v3 + 19, 4, &a2, 1); } //----- (008A8340) -------------------------------------------------------- bool __thiscall sub_8A8340(float *this, float *a2) { float *v2; // esi v2 = this; return sub_8A8740(this, (int)a2) && v2[6] == a2[6] && v2[7] == a2[7] && v2[8] == a2[8] && v2[9] == a2[9] && v2[10] == a2[10] && v2[11] == a2[11] && !(unsigned __int8)sub_883690(a2 + 12, v2 + 12) && v2[16] == a2[16] && v2[17] == a2[17] && v2[18] == a2[18] && v2[19] == a2[19]; } //----- (008A8420) -------------------------------------------------------- unsigned int __thiscall sub_8A8420(float *this, int a2) { _DWORD *v2; // esi float *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx char *v18; // eax unsigned int v19; // ebx char *v20; // eax unsigned int v21; // ebx char *v22; // eax unsigned int v23; // ebx char *v24; // eax unsigned int v25; // ebx char *v26; // eax unsigned int v27; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4DA8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Speed", v3[6]); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_8786B0((int)"Speed Variation", v3[7]); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Declination", v3[8]); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Declination Variation", v3[9]); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_8786B0((int)"Planar Angle", v3[10]); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"Planar Angle Variation", v3[11]); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); sub_823870(v2, v17, &a2); v18 = sub_860870(v3 + 12, (int)"Initial Color"); v19 = v2[3]; a2 = (int)v18; if ( v19 >= v2[2] ) sub_8237A0(v2, v19 + v2[5]); sub_823870(v2, v19, &a2); v20 = sub_8786B0((int)"Initial Radius", v3[16]); v21 = v2[3]; a2 = (int)v20; if ( v21 >= v2[2] ) sub_8237A0(v2, v21 + v2[5]); sub_823870(v2, v21, &a2); v22 = sub_8786B0((int)"Radius Variation", v3[17]); v23 = v2[3]; a2 = (int)v22; if ( v23 >= v2[2] ) sub_8237A0(v2, v23 + v2[5]); sub_823870(v2, v23, &a2); v24 = sub_8786B0((int)"Life Span", v3[18]); v25 = v2[3]; a2 = (int)v24; if ( v25 >= v2[2] ) sub_8237A0(v2, v25 + v2[5]); sub_823870(v2, v25, &a2); v26 = sub_8786B0((int)"Life Span Variation", v3[19]); v27 = v2[3]; a2 = (int)v26; if ( v27 >= v2[2] ) sub_8237A0(v2, v27 + v2[5]); return sub_823870(v2, v27, &a2); } //----- (008A86D0) -------------------------------------------------------- _DWORD *__thiscall sub_8A86D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); v1[2] = 0; v1[3] = 0; v1[4] = 0; *v1 = &NiPSysModifier::`vftable'; *((_BYTE *)v1 + 20) = 1; return v1; } // A2A814: using guessed type void *NiPSysModifier::`vftable'; //----- (008A8700) -------------------------------------------------------- LONG __thiscall sub_8A8700(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 v1 = this; v2 = (void *)this[2]; *this = &NiPSysModifier::`vftable'; operator delete(v2); return sub_85BA80(v1); } // A2A814: using guessed type void *NiPSysModifier::`vftable'; //----- (008A8720) -------------------------------------------------------- int __stdcall sub_8A8720(_DWORD *a1) { nullsub_32(a1); return sub_875AD0(a1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008A8740) -------------------------------------------------------- bool __thiscall sub_8A8740(void *this, int a2) { void *v2; // esi const char *v3; // eax const char *v4; // ecx bool result; // al v2 = this; result = 0; if ( sub_85BB20(this, a2) ) { v3 = (const char *)*((_DWORD *)v2 + 2); if ( v3 ) { v4 = *(const char **)(a2 + 8); if ( v4 ) { if ( !strcmp(v3, v4) && *((_DWORD *)v2 + 3) == *(_DWORD *)(a2 + 12) && *((_BYTE *)v2 + 20) == *(_BYTE *)(a2 + 20) ) { result = 1; } } } } return result; } //----- (008A87B0) -------------------------------------------------------- char *sub_8A87B0() { return dword_BA4DB0; } //----- (008A87C0) -------------------------------------------------------- _DWORD *__thiscall sub_8A87C0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiPSysModifier::`vftable'; operator delete(v3); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2A814: using guessed type void *NiPSysModifier::`vftable'; //----- (008A8800) -------------------------------------------------------- int __thiscall sub_8A8800(void *this, int a2, char *Src) { void *v3; // edi const char *v4; // ebx unsigned int v5; // kr00_4 char *v6; // eax int result; // eax char *Srca; // [esp+18h] [ebp+Ch] v3 = this; sub_85BB00(this, a2, (_DWORD **)Src); v4 = (const char *)*((_DWORD *)v3 + 2); Srca = (char *)*((_DWORD *)v3 + 2); operator delete(*(void **)(a2 + 8)); v5 = strlen(v4); v6 = (char *)operator new(v5 + 1); *(_DWORD *)(a2 + 8) = v6; strcpy_s(v6, v5 + 1, Srca); result = *((_DWORD *)v3 + 3); *(_DWORD *)(a2 + 12) = result; *(_BYTE *)(a2 + 20) = *((_BYTE *)v3 + 20); return result; } //----- (008A8870) -------------------------------------------------------- int __thiscall sub_8A8870(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // ebx int result; // eax v2 = (_DWORD **)a2; v3 = (int)this; sub_85BAE0(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = a2; sub_8C4C90(*v2, *(_DWORD *)(v3 + 16), &a2); result = a2; *(_DWORD *)(v4 + 16) = a2; return result; } //----- (008A88B0) -------------------------------------------------------- int __thiscall sub_8A88B0(int *this, signed int a2) { void **v2; // edi int *v3; // esi _DWORD *v4; // eax _DWORD *v5; // ST00_4 void (__cdecl *v6)(_DWORD *, int *, signed int, int *, signed int); // eax _DWORD *v7; // edi int (__cdecl *v8)(_DWORD *, char *, signed int, int *, signed int); // eax int result; // eax int v10; // [esp+8h] [ebp-4h] v2 = (void **)a2; v3 = this; sub_85BC50(this, a2); sub_8769C0(v2, v3 + 2); v4 = v2[88]; v5 = v4; v6 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v4[1]; v10 = 4; v6(v5, v3 + 3, 4, &v10, 1); sub_876290(v2); v7 = v2[88]; v8 = (int (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v7[1]; v10 = 1; result = v8(v7, (char *)&a2 + 3, 1, &v10, 1); *((_BYTE *)v3 + 20) = HIBYTE(a2) != 0; return result; } //----- (008A8930) -------------------------------------------------------- int __thiscall sub_8A8930(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // edi int (__cdecl *v8)(int, char *, signed int, int *, signed int); // eax int v10; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; nullsub_32(a2); sub_876A50(v2, v3[2]); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 3, 4, &a2, 1); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[4]); v7 = v2[89]; HIBYTE(a2) = *((_BYTE *)v3 + 20); v8 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v10 = 1; return v8(v7, (char *)&a2 + 3, 1, &v10, 1); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008A89B0) -------------------------------------------------------- unsigned int __thiscall sub_8A89B0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // edi v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4DB0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_878740((int)"Name", *((_DWORD *)v3 + 2)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878670((int)"Order", *((_DWORD *)v3 + 3)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878510((int)"Active", *((_BYTE *)v3 + 20)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); return sub_823870(v2, v11, &a2); } //----- (008A8AA0) -------------------------------------------------------- float *__thiscall sub_8A8AA0(float *this) { float *v1; // esi v1 = this; sub_8A86D0(this); v1[7] = 0.0; v1[8] = 0.0; v1[6] = 0.0; v1[10] = 0.0; *((_BYTE *)v1 + 36) = 0; v1[11] = 0.0; *(_DWORD *)v1 = &NiPSysFieldModifier::`vftable'; return v1; } // A2A884: using guessed type void *NiPSysFieldModifier::`vftable'; //----- (008A8AD0) -------------------------------------------------------- int __thiscall sub_8A8AD0(float *this, int a2, char *Src) { float *v3; // esi int result; // eax v3 = this; result = sub_8A8800(this, a2, Src); *(float *)(a2 + 24) = v3[6]; *(float *)(a2 + 28) = v3[7]; *(float *)(a2 + 32) = v3[8]; *(_BYTE *)(a2 + 36) = *((_BYTE *)v3 + 36); *(float *)(a2 + 40) = v3[10]; *(float *)(a2 + 44) = v3[11]; return result; } //----- (008A8B10) -------------------------------------------------------- char __thiscall sub_8A8B10(float *this, int a2) { float *v2; // esi int v3; // eax v2 = this; if ( !sub_8A8740(this, a2) ) return 0; v3 = *((_DWORD *)v2 + 6); if ( v3 ) { if ( !*(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) goto LABEL_17; } if ( *(_DWORD *)(a2 + 24) ) return 0; if ( v3 ) { LABEL_17: if ( *(_DWORD *)(a2 + 24) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 28))(*(_DWORD *)(a2 + 24)) ) { return 0; } } if ( v2[7] == *(float *)(a2 + 28) && v2[8] == *(float *)(a2 + 32) && *(_BYTE *)(a2 + 36) == *((_BYTE *)v2 + 36) && v2[10] == *(float *)(a2 + 40) ) { return 1; } return 0; } //----- (008A8BA0) -------------------------------------------------------- char *sub_8A8BA0() { return dword_BA4DB8; } //----- (008A8BB0) -------------------------------------------------------- int __thiscall sub_8A8BB0(int *this, signed int a2) { signed int v2; // edi int *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, int *, signed int); // eax int result; // eax int v14; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; sub_8A88B0(this, a2); sub_876290((void **)v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v14 = 4; v6(v5, v3 + 7, 4, &v14, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v7 + 4); v14 = 4; v9(v8, v3 + 8, 4, &v14, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 4); v14 = 1; v12(v11, (char *)&a2 + 3, 1, &v14, 1); v14 = 4; *((_BYTE *)v3 + 36) = HIBYTE(a2) != 0; result = (*(int (__cdecl **)(_DWORD, int *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4))( *(_DWORD *)(v2 + 352), v3 + 10, 4, &v14, 1); *((float *)v3 + 11) = *((float *)v3 + 10) * *((float *)v3 + 10); return result; } //----- (008A8C60) -------------------------------------------------------- int __thiscall sub_8A8C60(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, const char **, signed int, int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, const char **, signed int, int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, char *, signed int, int *, signed int); // edx int v12; // edi int (__cdecl *v13)(int, const char **, signed int, int *, signed int); // ecx int v15; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_8A8930(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[6]); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v4 + 8); v15 = 4; v6(v5, v3 + 7, 4, &v15, 1); v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, const char **, signed int, int *, signed int))(v7 + 8); v15 = 4; v9(v8, v3 + 8, 4, &v15, 1); v10 = v2[89]; HIBYTE(a2) = *((_BYTE *)v3 + 36); v11 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v10 + 8); v15 = 1; v11(v10, (char *)&a2 + 3, 1, &v15, 1); v12 = v2[89]; v13 = *(int (__cdecl **)(int, const char **, signed int, int *, signed int))(v12 + 8); v15 = 4; return v13(v12, v3 + 10, 4, &v15, 1); } //----- (008A8D10) -------------------------------------------------------- unsigned int __thiscall sub_8A8D10(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx int v6; // eax const char *v7; // eax char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v12; // eax unsigned int v13; // ebx char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A89B0(this, a2); v4 = sub_8784D0(*(int *)dword_BA4DB8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = *((_DWORD *)v3 + 6); if ( v6 ) v7 = *(const char **)(v6 + 8); else v7 = "None"; v8 = sub_878740((int)"Field Object", (int)v7); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_8786B0((int)"Magnitude", *((float *)v3 + 7)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = sub_8786B0((int)"Attenuation", *((float *)v3 + 8)); v13 = v2[3]; a2 = (int)v12; if ( v13 >= v2[2] ) sub_8237A0(v2, v13 + v2[5]); sub_823870(v2, v13, &a2); v14 = sub_878510((int)"Use Max Distance", *((_BYTE *)v3 + 36)); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_8786B0((int)"Max Distance", *((float *)v3 + 10)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); return sub_823870(v2, v17, &a2); } //----- (008A8E80) -------------------------------------------------------- int __thiscall sub_8A8E80(_DWORD *this, float a2, int a3, int a4, int a5) { int v5; // ecx int result; // eax v5 = this[10]; if ( !v5 || (result = (*(int (__stdcall **)(_DWORD, int, int, int))(*(_DWORD *)v5 + 60))(LODWORD(a2), a3, a4, a5)) == 0 ) { result = 0; } return result; } //----- (008A8EB0) -------------------------------------------------------- _DWORD *__thiscall sub_8A8EB0(int this, float a2, int a3, int a4) { int v4; // esi _DWORD *result; // eax v4 = this; result = (_DWORD *)(*(_DWORD *)(a3 + 32) + 12 * (unsigned __int16)a4); *result = *(_DWORD *)(this + 20); result[1] = *(_DWORD *)(this + 24); result[2] = *(_DWORD *)(this + 28); if ( *(_BYTE *)(this + 12) && *(_DWORD *)(this + 16) ) result = (_DWORD *)(*(int (__stdcall **)(_DWORD, _DWORD, int, _DWORD))(**(_DWORD **)(this + 16) + 76))( LODWORD(a2), *(float *)(this + 32), a4, *(_DWORD *)(*(_DWORD *)(this + 36) + 16)); if ( *(_BYTE *)(v4 + 13) ) result = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a3 + 72))(a3, a4); return result; } //----- (008A8F20) -------------------------------------------------------- char __thiscall sub_8A8F20(float *this, int a2, _DWORD **a3) { float *v3; // esi LONG v4; // eax int v5; // ecx int v6; // esi LONG v7; // ebx v3 = this; sub_85BB00(this, a2, a3); *(float *)(a2 + 8) = v3[2]; LOBYTE(v4) = *((_BYTE *)v3 + 12); *(_BYTE *)(a2 + 12) = v4; *(_BYTE *)(a2 + 13) = *((_BYTE *)v3 + 13); v5 = *((_DWORD *)v3 + 10); if ( v5 ) { v4 = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v5 + 8))(a3); v6 = *(_DWORD *)(a2 + 40); v7 = v4; if ( v6 != v4 ) { if ( v6 ) { v4 = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !v4 ) { if ( v6 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } *(_DWORD *)(a2 + 40) = v7; if ( v7 ) LOBYTE(v4) = InterlockedIncrement((volatile LONG *)(v7 + 4)); } } return v4; } //----- (008A8FA0) -------------------------------------------------------- char __thiscall sub_8A8FA0(_DWORD *this, int a2) { _DWORD **v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ebx int v6; // eax int v7; // ecx v2 = (_DWORD **)a2; v3 = this; sub_85BAE0(this, a2); sub_8C4C90(*v2, (int)v3, &a2); v4 = v3[4]; v5 = a2; if ( v4 ) { if ( sub_8C4C90(*v2, v4, &a2) ) *(_DWORD *)(v5 + 16) = a2; else *(_DWORD *)(v5 + 16) = v3[4]; } v6 = v3[9]; if ( v6 ) { LOBYTE(v6) = sub_8C4C90(*v2, v6, &a2); if ( (_BYTE)v6 ) { *(_DWORD *)(v5 + 36) = a2; } else { v6 = v3[9]; *(_DWORD *)(v5 + 36) = v6; } } v7 = v3[10]; if ( v7 ) LOBYTE(v6) = (*(int (__stdcall **)(_DWORD **))(*(_DWORD *)v7 + 40))(v2); return v6; } //----- (008A9020) -------------------------------------------------------- int __thiscall sub_8A9020(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax int v4; // edi int v5; // ebx v2 = this; nullsub_32(a2); v2[4] = sub_875AD0(a2); v2[9] = sub_875AD0(a2); result = sub_875AD0(a2); v4 = v2[10]; v5 = result; if ( v4 != result ) { if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) { if ( v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } } v2[10] = v5; if ( v5 ) result = InterlockedIncrement((volatile LONG *)(v5 + 4)); } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008A9090) -------------------------------------------------------- char __thiscall sub_8A9090(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx v2 = this; result = sub_85BA30(this, a2); if ( result ) { v4 = v2[10]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); result = 1; } return result; } //----- (008A90D0) -------------------------------------------------------- char __thiscall sub_8A90D0(float *this, int a2) { float *v2; // edi int v3; // eax int v4; // eax int v5; // ecx int v6; // esi v2 = this; if ( !sub_85BB20(this, a2) || *(float *)(a2 + 8) != v2[2] || *((_BYTE *)v2 + 12) != *(_BYTE *)(a2 + 12) || *((_BYTE *)v2 + 13) != *(_BYTE *)(a2 + 13) ) { return 0; } v3 = *((_DWORD *)v2 + 4); if ( v3 ) { if ( !*(_DWORD *)(a2 + 16) ) return 0; if ( v3 ) goto LABEL_27; } if ( *(_DWORD *)(a2 + 16) ) return 0; if ( v3 ) { LABEL_27: if ( *(_DWORD *)(a2 + 16) && !(*(unsigned __int8 (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 4) + 28))(*(_DWORD *)(a2 + 16)) ) { return 0; } } v4 = *((_DWORD *)v2 + 9); if ( !v4 ) goto LABEL_28; if ( !*(_DWORD *)(a2 + 36) ) return 0; if ( !v4 ) { LABEL_28: if ( *(_DWORD *)(a2 + 36) ) return 0; } v5 = *((_DWORD *)v2 + 10); if ( !v5 ) goto LABEL_29; if ( !*(_DWORD *)(a2 + 40) ) return 0; if ( !v5 ) { LABEL_29: if ( *(_DWORD *)(a2 + 40) ) return 0; if ( !v5 ) return 1; } v6 = *(_DWORD *)(a2 + 40); if ( !v6 || (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v5 + 28))(v6) ) return 1; return 0; } //----- (008A91A0) -------------------------------------------------------- float *__thiscall sub_8A91A0(float *this, float a2, char a3, char a4, int a5) { float *v5; // esi int v6; // edx v5 = this; sub_85BA50(this); v5[2] = a2; *((_BYTE *)v5 + 12) = a3; *(_DWORD *)v5 = &NiPSysCollider::`vftable'; *((_BYTE *)v5 + 13) = a4; *((_DWORD *)v5 + 4) = a5; *((_DWORD *)v5 + 5) = dword_BA45C0; *((_DWORD *)v5 + 6) = dword_BA45C4; v6 = dword_BA45C8; v5[8] = 0.0; v5[9] = 0.0; *((_DWORD *)v5 + 7) = v6; v5[10] = 0.0; return v5; } // A2A934: using guessed type void *NiPSysCollider::`vftable'; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A9200) -------------------------------------------------------- char *sub_8A9200() { return dword_BA4DC0; } //----- (008A9210) -------------------------------------------------------- _DWORD *__thiscall sub_8A9210(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 10); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_85BA80(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008A9260) -------------------------------------------------------- int __thiscall sub_8A9260(int *this, signed int a2) { signed int v2; // esi int *v3; // edi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, int *, signed int, int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, char *, signed int, int *, signed int); // eax void (__cdecl *v10)(int, char *, signed int, int *, signed int); // edx int v11; // ST00_4 int v13; // [esp+8h] [ebp-8h] char v14; // [esp+Fh] [ebp-1h] v2 = a2; v3 = this; sub_85BC50(this, a2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v4 + 4); v13 = 4; v6(v5, v3 + 2, 4, &v13, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v13 = 1; v9(v8, (char *)&a2 + 3, 1, &v13, 1); *((_BYTE *)v3 + 12) = HIBYTE(a2) != 0; v10 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v11 = *(_DWORD *)(v2 + 352); v13 = 1; v10(v11, &v14, 1, &v13, 1); *((_BYTE *)v3 + 13) = v14 != 0; sub_876290((void **)v2); sub_876290((void **)v2); return sub_876290((void **)v2); } //----- (008A9310) -------------------------------------------------------- int __thiscall sub_8A9310(_BYTE *this, signed int a2) { _DWORD *v2; // esi _BYTE *v3; // edi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, _BYTE *, signed int, signed int *, signed int); // eax int v7; // eax void (__cdecl *v8)(int, char *, signed int, int *, signed int); // edx int v9; // eax int v10; // ST00_4 void (__cdecl *v11)(int, char *, signed int, int *, signed int); // eax int v13; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; nullsub_32(a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, _BYTE *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 8, 4, &a2, 1); v7 = v2[89]; HIBYTE(a2) = v3[12]; v8 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 8); v13 = 1; v8(v7, (char *)&a2 + 3, 1, &v13, 1); HIBYTE(a2) = v3[13]; v9 = v2[89]; v10 = v9; v11 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(v9 + 8); v13 = 1; v11(v10, (char *)&a2 + 3, 1, &v13, 1); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 9)); return (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, *((_DWORD *)v3 + 10)); } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (008A93C0) -------------------------------------------------------- unsigned int __thiscall sub_8A93C0(void *this, int a2) { _DWORD *v2; // esi void *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx int v12; // eax const char *v13; // eax char *v14; // eax unsigned int v15; // ebx char *v16; // eax unsigned int v17; // ebx unsigned int result; // eax int v19; // ecx v2 = (_DWORD *)a2; v3 = this; sub_85BCB0((int)this, a2); v4 = sub_8784D0(*(int *)dword_BA4DC0); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); v6 = sub_8786B0((int)"Bounce", *((float *)v3 + 2)); v7 = v2[3]; a2 = (int)v6; if ( v7 >= v2[2] ) sub_8237A0(v2, v7 + v2[5]); sub_823870(v2, v7, &a2); v8 = sub_878510((int)"Spawn on Collide", *((_BYTE *)v3 + 12)); v9 = v2[3]; a2 = (int)v8; if ( v9 >= v2[2] ) sub_8237A0(v2, v9 + v2[5]); sub_823870(v2, v9, &a2); v10 = sub_878510((int)"Die on Collide", *((_BYTE *)v3 + 13)); v11 = v2[3]; a2 = (int)v10; if ( v11 >= v2[2] ) sub_8237A0(v2, v11 + v2[5]); sub_823870(v2, v11, &a2); v12 = *((_DWORD *)v3 + 4); if ( v12 ) v13 = *(const char **)(v12 + 8); else v13 = "None"; v14 = sub_878740((int)"Spawn Modifier", (int)v13); v15 = v2[3]; a2 = (int)v14; if ( v15 >= v2[2] ) sub_8237A0(v2, v15 + v2[5]); sub_823870(v2, v15, &a2); v16 = sub_878700((int)"Manager", *((_DWORD *)v3 + 9)); v17 = v2[3]; a2 = (int)v16; if ( v17 >= v2[2] ) sub_8237A0(v2, v17 + v2[5]); result = sub_823870(v2, v17, &a2); v19 = *((_DWORD *)v3 + 10); if ( v19 ) result = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v19 + 32))(v2); return result; } //----- (008A9540) -------------------------------------------------------- float *__thiscall sub_8A9540(float *this) { float *v1; // esi v1 = this; sub_8A7D20(this); *(_DWORD *)v1 = &NiPSysVolumeEmitter::`vftable'; v1[20] = 0.0; return v1; } // A2A9C4: using guessed type void *NiPSysVolumeEmitter::`vftable'; //----- (008A9560) -------------------------------------------------------- int __thiscall sub_8A9560(float *this, int a2, char *Src) { return sub_8A7D80(this, a2, Src); } //----- (008A9570) -------------------------------------------------------- int __thiscall sub_8A9570(int *this, void **a2) { sub_8A80B0(this, (signed int)a2); return sub_876290(a2); } //----- (008A9590) -------------------------------------------------------- int __thiscall sub_8A9590(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_8A7DF0(a2); result = sub_875AD0(a2); v2[20] = result; return result; } //----- (008A95B0) -------------------------------------------------------- int __thiscall sub_8A95B0(const char **this, signed int a2) { const char **v2; // esi v2 = this; sub_8A8200(this, a2); return (*(int (__thiscall **)(signed int, const char *))(*(_DWORD *)a2 + 44))(a2, v2[20]); } //----- (008A95E0) -------------------------------------------------------- char __thiscall sub_8A95E0(float *this, int a2) { float *v2; // esi int v4; // eax v2 = this; if ( !sub_8A8340(this, (float *)a2) ) return 0; v4 = *((_DWORD *)v2 + 20); if ( !v4 ) goto LABEL_10; if ( !*(_DWORD *)(a2 + 80) ) return 0; if ( !v4 ) { LABEL_10: if ( !*(_DWORD *)(a2 + 80) ) return 1; return 0; } return 1; } //----- (008A9620) -------------------------------------------------------- char *sub_8A9620() { return dword_BA4DC8; } //----- (008A9630) -------------------------------------------------------- char __thiscall sub_8A9630(void *this, int a2) { _DWORD **v2; // edi int v3; // esi int v4; // eax int v5; // ebx v2 = (_DWORD **)a2; v3 = (int)this; sub_8A8870(this, a2); sub_8C4C90(*v2, v3, &a2); v4 = *(_DWORD *)(v3 + 80); v5 = a2; if ( v4 ) { LOBYTE(v4) = sub_8C4C90(*v2, v4, &a2); if ( (_BYTE)v4 ) { *(_DWORD *)(v5 + 80) = a2; } else { v4 = *(_DWORD *)(v3 + 80); *(_DWORD *)(v5 + 80) = v4; } } return v4; } //----- (008A9690) -------------------------------------------------------- int __fastcall sub_8A9690(int a1, int a2, int a3, int a4) { int v4; // ebx int v5; // eax char v7; // [esp+14h] [ebp-D4h] char v8; // [esp+48h] [ebp-A0h] char v9; // [esp+7Ch] [ebp-6Ch] float v10[13]; // [esp+B0h] [ebp-38h] v4 = a1; v5 = *(_DWORD *)(a1 + 80); if ( v5 ) { qmemcpy(&v8, (const void *)(v5 + 104), 0x34u); qmemcpy(&v9, (const void *)(*(_DWORD *)(a1 + 16) + 104), 0x34u); sub_87C3F0((float *)&v9, a2, (float *)&v7); sub_85BDC0((float *)&v7, v10, (float *)&v8); } else { sub_87C3C0(v10); } return (*(int (__thiscall **)(int, float *, int, int))(*(_DWORD *)v4 + 84))(v4, v10, a3, a4); } //----- (008A9740) -------------------------------------------------------- unsigned int __thiscall sub_8A9740(float *this, int a2) { _DWORD *v2; // esi float *v3; // ebx char *v4; // eax unsigned int v5; // edi unsigned int result; // eax char *v7; // eax unsigned int v8; // edi v2 = (_DWORD *)a2; v3 = this; sub_8A8420(this, a2); v4 = sub_8784D0(*(int *)dword_BA4DC8); v5 = v2[3]; a2 = (int)v4; if ( v5 >= v2[2] ) sub_8237A0(v2, v5 + v2[5]); sub_823870(v2, v5, &a2); result = *((_DWORD *)v3 + 20); if ( result ) { v7 = sub_878740((int)"Emitter Object", *(_DWORD *)(result + 8)); v8 = v2[3]; a2 = (int)v7; if ( v8 >= v2[2] ) sub_8237A0(v2, v8 + v2[5]); result = sub_823870(v2, v8, &a2); } return result; } //----- (008A97D0) -------------------------------------------------------- float *__thiscall sub_8A97D0(float *this) { float *v1; // esi v1 = this; sub_8A7A70(this); *(_DWORD *)v1 = &NiPSysModifierBoolCtlr::`vftable'; return v1; } // A2AA34: using guessed type void *NiPSysModifierBoolCtlr::`vftable'; //----- (008A97F0) -------------------------------------------------------- float *__thiscall sub_8A97F0(void *this, int a2) { float *v2; // eax float *result; // eax void *v4; // [esp+0h] [ebp-4h] v4 = this; (*(void (__stdcall **)(void **, void *))(*(_DWORD *)this + 156))(&v4, this); v2 = (float *)operator new(0x18u); if ( v2 ) result = sub_82BAC0(v2, (char)v4); else result = 0; return result; } //----- (008A9830) -------------------------------------------------------- float *__stdcall sub_8A9830(int a1, char a2, int a3, float a4, char a5) { float *v5; // eax float *result; // eax v5 = (float *)operator new(0x34u); if ( v5 ) result = sub_82DF70(v5, a2, a4, a5); else result = 0; return result; } //----- (008A9870) -------------------------------------------------------- int __stdcall sub_8A9870(int a1, int a2) { return (*(int (**)(void))(*(_DWORD *)a1 + 84))(); } //----- (008A9890) -------------------------------------------------------- errno_t __thiscall sub_8A9890(_DWORD *this, int a2, _DWORD **a3) { return sub_832650(this, a2, a3); } //----- (008A98A0) -------------------------------------------------------- char *sub_8A98A0() { return dword_BA4DD0; } //----- (008A98B0) -------------------------------------------------------- float *__thiscall sub_8A98B0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx float *result; // eax int v4; // esi float *v5; // edi int v6; // esi v2 = this; result = (float *)sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); result = (float *)operator new(0x20u); if ( result ) { result = sub_82B6C0(result, v4); v5 = result; } else { v5 = 0; } v6 = v2[15]; if ( (float *)v6 != v5 ) { if ( v6 ) { result = (float *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (float *)(**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } v2[15] = v5; if ( v5 ) result = (float *)InterlockedIncrement((volatile LONG *)v5 + 1); } } return result; } //----- (008A9930) -------------------------------------------------------- void __thiscall sub_8A9930(void *this, int a2, int a3) { int v3; // edi void *v4; // ebx int v5; // esi int v6; // eax char v7; // al v3 = a2; v4 = this; if ( a2 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v6 ) { while ( (char *)v6 != dword_BA4440 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = v7 != 0 ? v3 : 0; } else { v5 = 0; } (*(void (__thiscall **)(void *, int *))(*(_DWORD *)v4 + 156))(v4, &a2); sub_82B950(v5, a2); } //----- (008A9990) -------------------------------------------------------- char __thiscall sub_8A9990(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 80))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( result ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 160))(v2, LODWORD(a2)); } return result; } //----- (008A9A10) -------------------------------------------------------- unsigned int __thiscall sub_8A9A10(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A7CA0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4DD0); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A9A60) -------------------------------------------------------- float *__thiscall sub_8A9A60(float *this) { float *v1; // esi v1 = this; sub_8A7A70(this); *(_DWORD *)v1 = &NiPSysModifierFloatCtlr::`vftable'; return v1; } // A2AAF4: using guessed type void *NiPSysModifierFloatCtlr::`vftable'; //----- (008A9A80) -------------------------------------------------------- float *__thiscall sub_8A9A80(void *this, int a2) { float *v2; // eax float *result; // eax float v4; // [esp+8h] [ebp-4h] v4 = *(float *)&this; (*(void (__stdcall **)(float *, void *))(*(_DWORD *)this + 156))(&v4, this); v2 = (float *)operator new(0x18u); if ( v2 ) result = sub_826240(v2, v4); else result = 0; return result; } //----- (008A9AC0) -------------------------------------------------------- char __thiscall sub_8A9AC0(float *this, int a2) { return sub_8A79C0(this, a2); } //----- (008A9AD0) -------------------------------------------------------- char *sub_8A9AD0() { return dword_BA4DD8; } //----- (008A9AE0) -------------------------------------------------------- float *__thiscall sub_8A9AE0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx float *result; // eax int v4; // esi float *v5; // edi int v6; // esi v2 = this; result = (float *)sub_831E50(this, a2); if ( a2[7] < 0xA010068u ) { v4 = sub_875AD0(a2); result = (float *)operator new(0x18u); if ( result ) { result = sub_8261F0(result, v4); v5 = result; } else { v5 = 0; } v6 = v2[15]; if ( (float *)v6 != v5 ) { if ( v6 ) { result = (float *)InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result ) { if ( v6 ) result = (float *)(**(int (__thiscall ***)(int, signed int))v6)(v6, 1); } } v2[15] = v5; if ( v5 ) result = (float *)InterlockedIncrement((volatile LONG *)v5 + 1); } } return result; } //----- (008A9B60) -------------------------------------------------------- void __thiscall sub_8A9B60(void *this, float a2, int a3) { float v3; // edi void *v4; // ebx float *v5; // esi int v6; // eax char v7; // al v3 = a2; v4 = this; if ( a2 == 0.0 ) { v5 = 0; } else { v6 = (*(int (__thiscall **)(float))(*(_DWORD *)LODWORD(a2) + 4))(COERCE_FLOAT(LODWORD(a2))); if ( v6 ) { while ( (char *)v6 != dword_BA43B0 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = (float *)(v7 != 0 ? LODWORD(v3) : 0); } (*(void (__thiscall **)(void *, float *))(*(_DWORD *)v4 + 156))(v4, &a2); sub_8263E0(v5, a2); } //----- (008A9BD0) -------------------------------------------------------- char __thiscall sub_8A9BD0(int this, float a2) { int v2; // esi char result; // al int v4; // ecx int v5; // ecx v2 = this; result = *(_BYTE *)(this + 8) >> 5; if ( result & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { result = sub_80FFE0((float *)this, a2); if ( result ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return result; result = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !result ) return result; } } v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { result = (*(int (__stdcall **)(_DWORD, _DWORD, float *))(*(_DWORD *)v5 + 76))( *(float *)(v2 + 40), *(_DWORD *)(v2 + 48), &a2); if ( result ) result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 160))(v2, LODWORD(a2)); } return result; } //----- (008A9C50) -------------------------------------------------------- unsigned int __thiscall sub_8A9C50(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_8A7CA0(this, a2); v3 = sub_8784D0(*(int *)dword_BA4DD8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008A9CA0) -------------------------------------------------------- float *__thiscall sub_8A9CA0(float *this) { float *result; // eax int v2; // ecx result = this; *(_DWORD *)this = dword_BA45C0; *((_DWORD *)this + 1) = dword_BA45C4; v2 = dword_BA45C8; result[3] = 0.0; result[4] = 0.0; result[5] = 0.0; *((_DWORD *)result + 2) = v2; result[6] = 0.0; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008A9CD0) -------------------------------------------------------- bool __thiscall sub_8A9CD0(float *this, int a2) { return *(float *)a2 == *this && *(float *)(a2 + 4) == this[1] && *(float *)(a2 + 8) == this[2] && *(float *)(a2 + 12) == this[3] && *(float *)(a2 + 16) == this[4] && *(float *)(a2 + 20) == this[5] && *((_WORD *)this + 12) == *(_WORD *)(a2 + 24) && *((_WORD *)this + 13) == *(_WORD *)(a2 + 26); } //----- (008A9D50) -------------------------------------------------------- int __thiscall sub_8A9D50(char *this, signed int a2) { signed int v2; // esi char *v3; // edi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // esi int (__cdecl *v17)(int, char *, signed int, signed int *, signed int); // edx char v19; // [esp+Ch] [ebp-Ch] v2 = a2; v3 = this; sub_8608D0(this, a2); if ( *(_DWORD *)(v2 + 28) < 0xA030005u ) sub_8608D0(&v19, v2); v4 = *(_DWORD *)(v2 + 352); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 4); a2 = 4; v6(v5, v3 + 12, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 352); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 4); a2 = 4; v9(v8, v3 + 16, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 352); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 4); a2 = 4; v12(v11, v3 + 20, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 352); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 4); a2 = 2; v15(v14, v3 + 24, 2, &a2, 1); v16 = *(_DWORD *)(v2 + 352); v17 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 4); a2 = 2; return v17(v16, v3 + 26, 2, &a2, 1); } //----- (008A9E20) -------------------------------------------------------- int __thiscall sub_8A9E20(char *this, signed int a2) { signed int v2; // edi char *v3; // esi int v4; // eax int v5; // ST3C_4 void (__cdecl *v6)(int, char *, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST28_4 void (__cdecl *v9)(int, char *, signed int, signed int *, signed int); // eax int v10; // eax int v11; // ST14_4 void (__cdecl *v12)(int, char *, signed int, signed int *, signed int); // eax int v13; // eax int v14; // ST00_4 void (__cdecl *v15)(int, char *, signed int, signed int *, signed int); // eax int v16; // edi int (__cdecl *v17)(int, char *, signed int, signed int *, signed int); // edx v2 = a2; v3 = this; sub_860940(this, a2); v4 = *(_DWORD *)(v2 + 356); v5 = v4; v6 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v4 + 8); a2 = 4; v6(v5, v3 + 12, 4, &a2, 1); v7 = *(_DWORD *)(v2 + 356); v8 = v7; v9 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v7 + 8); a2 = 4; v9(v8, v3 + 16, 4, &a2, 1); v10 = *(_DWORD *)(v2 + 356); v11 = v10; v12 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 8); a2 = 4; v12(v11, v3 + 20, 4, &a2, 1); v13 = *(_DWORD *)(v2 + 356); v14 = v13; v15 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v13 + 8); a2 = 2; v15(v14, v3 + 24, 2, &a2, 1); v16 = *(_DWORD *)(v2 + 356); v17 = *(int (__cdecl **)(int, char *, signed int, signed int *, signed int))(v16 + 8); a2 = 2; return v17(v16, v3 + 26, 2, &a2, 1); } //----- (008A9ED0) -------------------------------------------------------- int __cdecl sub_8A9ED0(LPCSTR lpText, LPCSTR lpCaption) { MessageBoxA(0, lpText, lpCaption, 0x40000u); return 0; } //----- (008A9EF0) -------------------------------------------------------- double sub_8A9EF0() { LARGE_INTEGER PerformanceCount; // [esp+4h] [ebp-8h] if ( byte_AC05A2 ) { QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&stru_BA4DE0); byte_AC05A2 = 0; } QueryPerformanceCounter(&PerformanceCount); PerformanceCount.QuadPart -= stru_BA4DE0.QuadPart; *(float *)&PerformanceCount.HighPart = (double)PerformanceCount.QuadPart / (double)Frequency.QuadPart; return *(float *)&PerformanceCount.HighPart; } // AC05A2: using guessed type char byte_AC05A2; //----- (008A9F60) -------------------------------------------------------- char *__thiscall sub_8A9F60(char *Dir, char *FullPath) { char *v2; // esi v2 = Dir; Dir[771] = 0; _splitpath_s(FullPath, Dir + 256, 3u, Dir, 0x100u, Dir + 515, 0x100u, Dir + 259, 0x100u); return v2; } //----- (008A9FB0) -------------------------------------------------------- void __thiscall sub_8A9FB0(char *this, char *a2, int a3) { char *v3; // esi bool v4; // zf const char *v5; // edi unsigned int v6; // kr00_4 char v7; // dl char *v8; // [esp+8h] [ebp-108h] char Dst; // [esp+Ch] [ebp-104h] char v10[255]; // [esp+Dh] [ebp-103h] v3 = this; v4 = this[771] == 0; v5 = this + 771; v8 = a2; if ( v4 ) { _makepath(a2, this + 256, this, this + 515, this + 259); } else { Dst = 0; strcat_s(&Dst, 0x100u, this); v6 = strlen(&Dst); if ( v6 ) { v7 = *((_BYTE *)&v8 + v6 + 3); if ( v7 != 92 && v7 != 47 ) { v10[v6] = 0; *(&Dst + v6) = 92; } } strcat_s(&Dst, 0x100u, v5); _makepath(v8, v3 + 256, &Dst, v3 + 515, v3 + 259); } } // 8A9FB0: using guessed type char var_103[255]; //----- (008AA0C0) -------------------------------------------------------- void __thiscall sub_8AA0C0(char *this, char *a2, int a3) { sub_8A9FB0(this, a2, a3); } //----- (008AA0D0) -------------------------------------------------------- int (*sub_8AA0D0())(void) { int (*result)(void); // eax unsigned int v1; // esi sub_8AAA80(); result = dword_BA4E74; if ( dword_BA4E74 ) result = (int (*)(void))dword_BA4E74(); v1 = 0; if ( dword_BA4E70 ) { do result = (int (*)(void))((int (*)(void))dword_BA4E30[v1++])(); while ( v1 < dword_BA4E70 ); } return result; } // BA4E74: invalid function type has been ignored // BA4E70: using guessed type int dword_BA4E70; // BA4E74: using guessed type int (*dword_BA4E74)(void); //----- (008AA110) -------------------------------------------------------- void sub_8AA110() { unsigned int v0; // esi v0 = 0; if ( dword_BA4E70 ) { do ((void (*)(void))dword_BA4DF0[v0++])(); while ( v0 < dword_BA4E70 ); } if ( dword_BA4E78 ) dword_BA4E78(); if ( byte_BA4F8C ) { byte_BA4F8C = 0; sub_8AB150(); operator delete(dword_BA4E7C); } } // 8AB150: using guessed type int sub_8AB150(void); // BA4E70: using guessed type int dword_BA4E70; // BA4E78: using guessed type int (*dword_BA4E78)(void); // BA4F8C: using guessed type char byte_BA4F8C; //----- (008AA150) -------------------------------------------------------- int __cdecl sub_8AA150(int a1, int (*a2)(void)) { int result; // eax result = a1; dword_BA4E74 = (int (*)(void))a1; dword_BA4E78 = a2; return result; } // BA4E74: using guessed type int (*dword_BA4E74)(void); // BA4E78: using guessed type int (*dword_BA4E78)(void); //----- (008AA170) -------------------------------------------------------- int __cdecl sub_8AA170(int a1, int a2) { int v2; // eax int result; // eax v2 = dword_BA4E70; dword_BA4E30[dword_BA4E70] = a1; dword_BA4DF0[v2] = a2; result = v2 + 1; dword_BA4E70 = result; return result; } // BA4E70: using guessed type int dword_BA4E70; //----- (008AA1B0) -------------------------------------------------------- void sub_8AA1B0() { DWORD *v0; // esi struct _SYSTEM_INFO SystemInfo; // [esp+4h] [ebp-24h] v0 = (DWORD *)operator new(4u); if ( v0 ) { GetSystemInfo(&SystemInfo); *v0 = SystemInfo.dwNumberOfProcessors; dword_BA4E7C = v0; } else { dword_BA4E7C = 0; } } //----- (008AA1F0) -------------------------------------------------------- size_t __cdecl sub_8AA1F0(int a1, void *Dst, size_t DstSize) { return sub_8AACE0(a1, Dst, DstSize); } //----- (008AA210) -------------------------------------------------------- rsize_t __cdecl sub_8AA210(int a1, void *Src, rsize_t DstSize) { return sub_8AADB0(a1, Src, DstSize); } //----- (008AA230) -------------------------------------------------------- size_t __cdecl sub_8AA230(int a1, void *Dst, size_t DstSize, int a4, int a5) { size_t v6; // ebx if ( !DstSize ) return 0; v6 = sub_8AACE0(a1, Dst, DstSize); sub_8AA400((char *)Dst, DstSize, a4, a5); return v6; } //----- (008AA270) -------------------------------------------------------- int __cdecl sub_8AA270() { return off_AC05A4(); } // AC05A4: using guessed type int (*off_AC05A4)(void); //----- (008AA2B0) -------------------------------------------------------- int __cdecl sub_8AA2B0() { return off_AC05A8(); } // 8AA2B0: could not find valid save-restore pair for ebx // AC05A8: using guessed type int (*off_AC05A8)(void); //----- (008AA2F0) -------------------------------------------------------- char __thiscall sub_8AA2F0(_BYTE *this) { return this[36]; } //----- (008AA300) -------------------------------------------------------- rsize_t __cdecl sub_8AA300(int a1, void *Src, rsize_t DstSize, int a4, int a5) { void *v6; // edi rsize_t v7; // esi if ( !DstSize ) return 0; v6 = operator new(DstSize); memcpy_s(v6, DstSize, Src, DstSize); sub_8AA400((char *)v6, DstSize, a4, a5); v7 = sub_8AADB0(a1, v6, DstSize); operator delete(v6); return v7; } //----- (008AA360) -------------------------------------------------------- void __thiscall sub_8AA360(_DWORD *this, char a2) { if ( a2 ) { this[1] = sub_8AA230; this[2] = sub_8AA300; } else { this[1] = sub_8AA1F0; this[2] = sub_8AA210; } } //----- (008AA390) -------------------------------------------------------- _DWORD *__thiscall sub_8AA390(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiBinaryStream::`vftable'; this[1] = 0; this[2] = 0; return result; } // A2ABB4: using guessed type void *NiBinaryStream::`vftable'; //----- (008AA3B0) -------------------------------------------------------- void __thiscall sub_8AA3B0(_DWORD *this) { *this = &NiBinaryStream::`vftable'; } // A2ABB4: using guessed type void *NiBinaryStream::`vftable'; //----- (008AA3C0) -------------------------------------------------------- char sub_8AA3C0() { return byte_BA4E80; } // BA4E80: using guessed type char byte_BA4E80; //----- (008AA3D0) -------------------------------------------------------- void *__thiscall sub_8AA3D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiBinaryStream::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2ABB4: using guessed type void *NiBinaryStream::`vftable'; //----- (008AA400) -------------------------------------------------------- char *__cdecl sub_8AA400(char *a1, unsigned int a2, int a3, unsigned int a4) { char *result; // eax unsigned int v5; // esi int v6; // edx char v7; // cl char v8; // cl char v9; // cl char v10; // cl char v11; // cl char v12; // cl char v13; // cl unsigned int v14; // [esp+8h] [ebp+8h] result = a1; v14 = 0; if ( a2 ) { do { v5 = 0; if ( a4 ) { do { v6 = *(_DWORD *)(a3 + 4 * v5); switch ( *(_DWORD *)(a3 + 4 * v5) ) { case 2: v13 = *result; *result = result[1]; result[1] = v13; break; case 4: v11 = *result; *result = result[3]; result[3] = v11; v12 = result[1]; result[1] = result[2]; result[2] = v12; break; case 8: v7 = *result; *result = result[7]; result[7] = v7; v8 = result[1]; result[1] = result[6]; result[6] = v8; v9 = result[2]; result[2] = result[5]; result[5] = v9; v10 = result[3]; result[3] = result[4]; result[4] = v10; break; } v14 += v6; ++v5; result += v6; } while ( v5 < a4 ); } } while ( v14 < a2 ); } return result; } //----- (008AA4B0) -------------------------------------------------------- int __thiscall sub_8AA4B0(_DWORD *this, _BYTE *a2, unsigned int a3) { unsigned int v3; // ebx int v4; // edi int v5; // esi int result; // eax int (__cdecl *v7)(_DWORD *, char *, signed int, int *, signed int); // eax int v8; // eax int v9; // [esp+Ch] [ebp-Ch] _DWORD *v10; // [esp+10h] [ebp-8h] char v11; // [esp+17h] [ebp-1h] v3 = 1; v4 = 0; v5 = 0; v10 = this; if ( a3 > 1 ) { while ( 1 ) { v7 = (int (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))this[1]; v9 = 1; v8 = v7(this, &v11, 1, &v9, 1); v4 += v8; if ( v8 != 1 ) break; if ( v11 == 10 ) { a2[v5] = 0; return v4; } if ( v11 != 13 ) { a2[v3 - 1] = v11; ++v5; ++v3; } if ( v3 >= a3 ) { result = v4; a2[v5] = 0; return result; } this = v10; } result = v4; a2[v5] = 0; } else { result = 0; *a2 = 0; } return result; } //----- (008AA560) -------------------------------------------------------- int __thiscall sub_8AA560(_DWORD *this, signed int a2) { _BYTE *v2; // esi int v3; // edi _DWORD *i; // ebx int (__cdecl *v5)(_DWORD *, _BYTE *, signed int, signed int *, signed int); // ecx int v6; // eax v2 = (_BYTE *)a2; v3 = 0; for ( i = this; *v2; ++v3 ) { v5 = (int (__cdecl *)(_DWORD *, _BYTE *, signed int, signed int *, signed int))i[2]; a2 = 1; v6 = v5(i, v2++, 1, &a2, 1); if ( v6 != 1 ) break; } return v3; } //----- (008AA5A0) -------------------------------------------------------- _DWORD *__thiscall sub_8AA5A0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiSearchPath::`vftable'; this[1] = 0; *((_BYTE *)this + 8) = 0; *((_BYTE *)this + 268) = 0; return result; } // A2ABC4: using guessed type void *NiSearchPath::`vftable'; //----- (008AA5C0) -------------------------------------------------------- void __thiscall sub_8AA5C0(_DWORD *this) { this[1] = 0; } //----- (008AA5D0) -------------------------------------------------------- void *__thiscall sub_8AA5D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiSearchPath::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2ABC4: using guessed type void *NiSearchPath::`vftable'; //----- (008AA600) -------------------------------------------------------- void __thiscall sub_8AA600(char *this, char *Src) { void *v2; // ecx if ( Src && *Src ) { strncpy_s(this + 8, 0x104u, Src, 0x103u); nullsub_6(v2); } else { this[8] = 0; } } //----- (008AA640) -------------------------------------------------------- void __thiscall sub_8AA640(_BYTE *this, char *FullPath) { _BYTE *v2; // esi void *v3; // ecx char Dir; // [esp+4h] [ebp-408h] char v5; // [esp+107h] [ebp-305h] char Dst; // [esp+207h] [ebp-205h] v2 = this; if ( FullPath && *FullPath ) { sub_8A9F60(&Dir, FullPath); strcpy_s(&Dst, 0x100u, &byte_9A8050); strcpy_s(&v5, 0x100u, &byte_9A8050); sub_8AA0C0(&Dir, v2 + 268, 260); nullsub_6(v3); } else { this[268] = 0; } } //----- (008AA6F0) -------------------------------------------------------- char __thiscall sub_8AA6F0(char *this, char *a2, int a3) { char *v3; // esi char *v4; // edi void *v5; // ecx char result; // al char Src; // [esp+Ch] [ebp-80Ch] char Dir; // [esp+410h] [ebp-408h] char Dst; // [esp+510h] [ebp-308h] char v10; // [esp+713h] [ebp-105h] v3 = this; v4 = this + 8; sub_8A9F60(&Dir, this + 8); switch ( *((_DWORD *)v3 + 1) ) { case 0: goto LABEL_7; case 1: strcpy_s(&Dst, 3u, &byte_9A8050); strcpy_s(&Dir, 0x100u, &byte_9A8050); goto LABEL_7; case 2: strcpy_s(&Dst, 3u, &byte_9A8050); strcpy_s(&Dir, 0x100u, v3 + 268); sub_8A9F60(&Src, v4); strcpy_s(&v10, 0x100u, &Src); goto LABEL_7; case 3: strcpy_s(&Dst, 3u, &byte_9A8050); strcpy_s(&Dir, 0x100u, v3 + 268); strcpy_s(&v10, 0x100u, &byte_9A8050); goto LABEL_7; case 4: if ( !byte_BA4E88 ) goto LABEL_8; strcpy_s(&Dst, 3u, &byte_9A8050); strcpy_s(&Dir, 0x100u, &byte_BA4E88); LABEL_7: sub_8AA0C0(&Dir, a2, a3); nullsub_6(v5); result = 1; ++*((_DWORD *)v3 + 1); break; default: LABEL_8: result = 0; break; } return result; } //----- (008AA890) -------------------------------------------------------- _DWORD *__thiscall sub_8AA890(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; sub_8AA390(this); v3[3] = a2; v3[5] = a3; *v3 = &NiMemStream::`vftable'; v3[4] = 0; v3[6] = 0; *((_BYTE *)v3 + 29) = 0; sub_8AAFB0(v3, 0); return v3; } // A2ABD4: using guessed type void *NiMemStream::`vftable'; //----- (008AA8D0) -------------------------------------------------------- _DWORD *__thiscall sub_8AA8D0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8AA390(this); *v1 = &NiMemStream::`vftable'; v1[6] = 1024; v1[3] = operator new(0x400u); v1[5] = 0; v1[4] = 0; *((_BYTE *)v1 + 29) = 0; sub_8AAFB0(v1, 0); return v1; } // A2ABD4: using guessed type void *NiMemStream::`vftable'; //----- (008AA920) -------------------------------------------------------- void __thiscall sub_8AA920(void *this) { _DWORD *v1; // esi bool v2; // zf v1 = this; v2 = *((_DWORD *)this + 6) == 0; *(_DWORD *)this = &NiMemStream::`vftable'; if ( !v2 && !*((_BYTE *)this + 29) ) operator delete(*((void **)this + 3)); sub_8AA3B0(v1); } // A2ABD4: using guessed type void *NiMemStream::`vftable'; //----- (008AA950) -------------------------------------------------------- int __thiscall sub_8AA950(int this) { int result; // eax result = *(_DWORD *)(this + 12); *(_BYTE *)(this + 29) = 1; return result; } //----- (008AA960) -------------------------------------------------------- _DWORD *__thiscall sub_8AA960(void *this, char a2) { _DWORD *v2; // esi bool v3; // zf v2 = this; v3 = *((_DWORD *)this + 6) == 0; *(_DWORD *)this = &NiMemStream::`vftable'; if ( !v3 && !*((_BYTE *)this + 29) ) operator delete(*((void **)this + 3)); sub_8AA3B0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2ABD4: using guessed type void *NiMemStream::`vftable'; //----- (008AA9B0) -------------------------------------------------------- int __thiscall sub_8AA9B0(_DWORD *this, void *Dst, rsize_t DstSize) { _DWORD *v3; // esi int v4; // ecx int v5; // edi v3 = this; v4 = this[4]; v5 = DstSize; if ( DstSize > v3[5] - v4 ) v5 = v3[5] - v4; memcpy_s(Dst, v5, (const void *)(v4 + v3[3]), v5); v3[4] += v5; return v5; } //----- (008AA9F0) -------------------------------------------------------- int __thiscall sub_8AA9F0(_DWORD *this, void *Src, rsize_t DstSize) { _DWORD *v3; // esi int result; // eax rsize_t v5; // ecx int v6; // edi size_t v7; // ebx void *DstSizea; // [esp+10h] [ebp+Ch] v3 = this; result = this[6]; if ( result ) { v5 = result - this[5]; v6 = DstSize; if ( DstSize > v5 ) { if ( DstSize > result + v5 ) v7 = DstSize + result - v5; else v7 = 2 * result; DstSizea = operator new(v7); memcpy_s(DstSizea, v3[5], (const void *)v3[3], v3[5]); operator delete((void *)v3[3]); v3[6] = v7; v3[3] = DstSizea; } memcpy_s((void *)(v3[5] + v3[3]), v6, Src, v6); v3[5] += v6; result = v6; } return result; } //----- (008AAA80) -------------------------------------------------------- void sub_8AAA80() { if ( !byte_BA4F8C ) { byte_BA4F8C = 1; sub_8AB010(); sub_8AA1B0(); } } // BA4F8C: using guessed type char byte_BA4F8C; //----- (008AAAC0) -------------------------------------------------------- int __thiscall sub_8AAAC0(_DWORD *this, char *Filename, int a3, size_t a4) { int v4; // esi const char *v5; // eax bool v6; // al int result; // eax v4 = (int)this; sub_8AA390(this); *(_DWORD *)v4 = &NiFile::`vftable'; sub_8AA360((_DWORD *)v4, 0); *(_DWORD *)(v4 + 32) = a3; if ( a3 ) { v5 = "wb"; if ( a3 != 1 ) v5 = (const char *)&unk_A108CC; } else { v5 = "rb"; } v6 = !fopen_s((FILE **)(v4 + 28), Filename, v5) && *(_DWORD *)(v4 + 28); *(_BYTE *)(v4 + 36) = v6; *(_DWORD *)(v4 + 12) = a4; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; if ( v6 && a4 ) { *(_DWORD *)(v4 + 24) = operator new(a4); result = v4; } else { *(_DWORD *)(v4 + 24) = 0; result = v4; } return result; } // A2ABF0: using guessed type void *NiFile::`vftable'; //----- (008AAB60) -------------------------------------------------------- char __thiscall sub_8AAB60(int this) { int v1; // esi size_t v3; // eax v1 = this; if ( !*(_DWORD *)(this + 32) ) { *(_DWORD *)(this + 16) = 0; LABEL_3: *(_DWORD *)(v1 + 20) = 0; return 1; } v3 = *(_DWORD *)(this + 20); if ( !v3 || fwrite(*(const void **)(this + 24), 1u, v3, *(FILE **)(this + 28)) == *(_DWORD *)(this + 20) ) goto LABEL_3; *(_BYTE *)(v1 + 36) = 0; return 0; } //----- (008AABB0) -------------------------------------------------------- signed int __thiscall sub_8AABB0(FILE **this) { FILE **v1; // esi int v2; // ebx int v4; // edi v1 = this; v2 = ftell(this[7]); if ( v2 < 0 ) return 0; fseek(v1[7], 0, 2); v4 = ftell(v1[7]); fseek(v1[7], v2, 0); return v4 < 0 ? 0 : v4; } //----- (008AAC10) -------------------------------------------------------- void __thiscall sub_8AAC10(_BYTE *this) { _BYTE *v1; // esi bool v2; // zf v1 = this; v2 = this[36] == 0; *(_DWORD *)this = &NiFile::`vftable'; if ( !v2 && *((_DWORD *)this + 7) ) { sub_8AAB60((int)this); fclose(*((FILE **)v1 + 7)); } operator delete(*((void **)v1 + 6)); sub_8AA3B0(v1); } // A2ABF0: using guessed type void *NiFile::`vftable'; //----- (008AAC50) -------------------------------------------------------- void __thiscall sub_8AAC50(int this, int a2, int a3) { int v3; // esi int v4; // edi int v5; // eax int v6; // ecx size_t v7; // eax v3 = this; if ( *(_BYTE *)(this + 36) ) { v4 = a2; if ( a3 == 1 ) { v5 = *(_DWORD *)(this + 20); v6 = v5 + a2; if ( v5 + a2 >= 0 && v6 < *(_DWORD *)(v3 + 16) ) { *(_DWORD *)(v3 + 20) = v6; return; } v4 = v5 - *(_DWORD *)(v3 + 16) + a2; } if ( *(_DWORD *)(v3 + 32) ) { v7 = *(_DWORD *)(v3 + 20); if ( v7 && fwrite(*(const void **)(v3 + 24), 1u, v7, *(FILE **)(v3 + 28)) != *(_DWORD *)(v3 + 20) ) { *(_BYTE *)(v3 + 36) = 0; goto LABEL_10; } } else { *(_DWORD *)(v3 + 16) = 0; } *(_DWORD *)(v3 + 20) = 0; LABEL_10: *(_BYTE *)(v3 + 36) = fseek(*(FILE **)(v3 + 28), v4, a3) == 0; } } //----- (008AACE0) -------------------------------------------------------- size_t __thiscall sub_8AACE0(int this, void *Dst, size_t DstSize) { int v3; // esi int v4; // eax size_t v5; // ebx rsize_t v6; // edi size_t v7; // eax size_t v9; // eax rsize_t v10; // [esp+4h] [ebp-4h] v3 = this; if ( !*(_BYTE *)(this + 36) ) return 0; v4 = *(_DWORD *)(this + 20); v5 = DstSize; v6 = *(_DWORD *)(this + 16) - v4; v10 = 0; if ( DstSize > v6 ) { if ( *(_DWORD *)(this + 16) != v4 ) { memcpy_s(Dst, v6, (const void *)(v4 + *(_DWORD *)(this + 24)), v6); Dst = (char *)Dst + v6; v5 = DstSize - v6; v10 = v6; } sub_8AAB60(v3); v7 = *(_DWORD *)(v3 + 12); if ( v5 > v7 ) return v10 + fread(Dst, 1u, v5, *(FILE **)(v3 + 28)); v9 = fread(*(void **)(v3 + 24), 1u, v7, *(FILE **)(v3 + 28)); *(_DWORD *)(v3 + 16) = v9; if ( v9 < v5 ) v5 = v9; } memcpy_s(Dst, v5, (const void *)(*(_DWORD *)(v3 + 20) + *(_DWORD *)(v3 + 24)), v5); *(_DWORD *)(v3 + 20) += v5; return v5 + v10; } //----- (008AADB0) -------------------------------------------------------- rsize_t __thiscall sub_8AADB0(int this, void *Src, rsize_t DstSize) { int v3; // edi int v4; // eax rsize_t v5; // ebx rsize_t v6; // esi rsize_t v8; // [esp+4h] [ebp-4h] v3 = this; if ( !*(_BYTE *)(this + 36) ) return 0; v4 = *(_DWORD *)(this + 20); v5 = DstSize; v6 = *(_DWORD *)(this + 12) - v4; v8 = 0; if ( DstSize <= v6 ) goto LABEL_13; if ( *(_DWORD *)(this + 12) != v4 ) { memcpy_s((void *)(v4 + *(_DWORD *)(this + 24)), v6, Src, v6); Src = (char *)Src + v6; v5 = DstSize - v6; v8 = v6; *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12); } if ( !sub_8AAB60(v3) ) return 0; if ( v5 >= *(_DWORD *)(v3 + 12) ) return v8 + fwrite(Src, 1u, v5, *(FILE **)(v3 + 28)); LABEL_13: memcpy_s((void *)(*(_DWORD *)(v3 + 20) + *(_DWORD *)(v3 + 24)), v5, Src, v5); *(_DWORD *)(v3 + 20) += v5; return v5 + v8; } //----- (008AAE70) -------------------------------------------------------- _DWORD *__thiscall sub_8AAE70(void *this, char a2) { _DWORD *v2; // esi bool v3; // zf v2 = this; v3 = *((_BYTE *)this + 36) == 0; *(_DWORD *)this = &NiFile::`vftable'; if ( !v3 && *((_DWORD *)this + 7) ) { sub_8AAB60((int)this); fclose((FILE *)v2[7]); } operator delete((void *)v2[6]); sub_8AA3B0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2ABF0: using guessed type void *NiFile::`vftable'; //----- (008AAED0) -------------------------------------------------------- int __cdecl sub_8AAED0(int a1, void *Dst, rsize_t DstSize) { return sub_8AA9B0((_DWORD *)a1, Dst, DstSize); } //----- (008AAEF0) -------------------------------------------------------- int __cdecl sub_8AAEF0(int a1, void *Src, rsize_t DstSize) { return sub_8AA9F0((_DWORD *)a1, Src, DstSize); } //----- (008AAF10) -------------------------------------------------------- int __cdecl sub_8AAF10(int a1, void *Dst, rsize_t DstSize, int a4, int a5) { int v6; // ebx if ( !DstSize ) return 0; v6 = sub_8AA9B0((_DWORD *)a1, Dst, DstSize); sub_8AA400((char *)Dst, DstSize, a4, a5); return v6; } //----- (008AAF50) -------------------------------------------------------- int __cdecl sub_8AAF50(int a1, void *Src, rsize_t DstSize, int a4, int a5) { void *v6; // edi int v7; // esi if ( !DstSize ) return 0; v6 = operator new(DstSize); memcpy_s(v6, DstSize, Src, DstSize); sub_8AA400((char *)v6, DstSize, a4, a5); v7 = sub_8AA9F0((_DWORD *)a1, v6, DstSize); operator delete(v6); return v7; } //----- (008AAFB0) -------------------------------------------------------- void __thiscall sub_8AAFB0(_DWORD *this, char a2) { if ( a2 ) { this[1] = sub_8AAF10; this[2] = sub_8AAF50; } else { this[1] = sub_8AAED0; this[2] = sub_8AAEF0; } } //----- (008AAFE0) -------------------------------------------------------- DWORD __thiscall sub_8AAFE0(HANDLE *this) { HANDLE *v1; // esi DWORD result; // eax v1 = this; if ( !this[8] ) return -1; result = SuspendThread(this[8]); if ( result != -1 ) v1[6] = HANDLE_FLAG_INHERIT; return result; } //----- (008AB010) -------------------------------------------------------- int sub_8AB010() { int (**(*v0)[4])(); // eax dword_BA4F90[0] = 0; dword_BA4F94[0] = 0; dword_BA4F98[0] = 0; dword_BA4F9C[0] = 0; dword_BA4FA0 = 0; dword_BA4FA4 = 0; dword_BA4FA8 = 0; dword_BA4FAC = 0; dword_BA4FB0 = 0; dword_BA4FB4 = 0; dword_BA4FB8 = 0; dword_BA4FBC = 0; dword_BA4FC0 = 0; dword_BA4FC4 = 0; dword_BA4FC8 = 0; dword_BA4FCC = 0; v0 = sub_8AB580(); return ((int (__thiscall *)(int (**(*)[4])()))*(*v0)[0])(v0); } // BA4F90: using guessed type int dword_BA4F90[]; // BA4F94: using guessed type int dword_BA4F94[]; // BA4F98: using guessed type int dword_BA4F98[]; // BA4F9C: using guessed type int dword_BA4F9C[]; // BA4FA0: using guessed type int dword_BA4FA0; // BA4FA4: using guessed type int dword_BA4FA4; // BA4FA8: using guessed type int dword_BA4FA8; // BA4FAC: using guessed type int dword_BA4FAC; // BA4FB0: using guessed type int dword_BA4FB0; // BA4FB4: using guessed type int dword_BA4FB4; // BA4FB8: using guessed type int dword_BA4FB8; // BA4FBC: using guessed type int dword_BA4FBC; // BA4FC0: using guessed type int dword_BA4FC0; // BA4FC4: using guessed type int dword_BA4FC4; // BA4FC8: using guessed type int dword_BA4FC8; // BA4FCC: using guessed type int dword_BA4FCC; //----- (008AB070) -------------------------------------------------------- int __cdecl sub_8AB070(char *Src, int a2, char a3, char a4) { signed int v5; // esi void *v6; // eax int v7; // eax if ( dword_BA51D0 == 16 ) return -1; v5 = 0; while ( dword_BA4F90[v5] ) { if ( !dword_BA4F94[v5] ) { ++v5; break; } if ( !dword_BA4F98[v5] ) { v5 += 2; break; } if ( !dword_BA4F9C[v5] ) { v5 += 3; break; } v5 += 4; if ( v5 >= 16 ) break; } if ( v5 == 16 ) return -1; v6 = operator new(0x108u); v7 = v6 ? sub_8AB530((int)v6, Src, a2, a3, a4) : 0; dword_BA4F90[v5] = v7; if ( !v7 ) return -1; ++dword_BA51D0; return v5; } // BA4F90: using guessed type int dword_BA4F90[]; // BA4F94: using guessed type int dword_BA4F94[]; // BA4F98: using guessed type int dword_BA4F98[]; // BA4F9C: using guessed type int dword_BA4F9C[]; // BA51D0: using guessed type int dword_BA51D0; //----- (008AB110) -------------------------------------------------------- void sub_8AB110() { unsigned int v0; // esi void *v1; // edi v0 = 0; do { v1 = (void *)dword_BA4F90[v0]; if ( v1 ) { sub_8AB570(dword_BA4F90[v0]); operator delete(v1); } dword_BA4F90[v0] = 0; ++v0; } while ( v0 < 16 ); dword_BA51D0 = 0; } // BA4F90: using guessed type int dword_BA4F90[]; // BA51D0: using guessed type int dword_BA51D0; //----- (008AB160) -------------------------------------------------------- void __thiscall sub_8AB160(_DWORD *this, void *a2) { _DWORD *v2; // esi FILE *v3; // edx v2 = this; v3 = (FILE *)this[64]; if ( v3 ) { fwrite(a2, 1u, strlen((const char *)a2), v3); if ( *((_BYTE *)v2 + 260) ) fflush((FILE *)v2[64]); } } //----- (008AB1C0) -------------------------------------------------------- int __fastcall sub_8AB1C0(int ArgList) { int v1; // esi int result; // eax struct _SYSTEMTIME v3; // [esp+4h] [ebp-124h] struct _SYSTEMTIME SystemTime; // [esp+14h] [ebp-114h] char DstBuf; // [esp+24h] [ebp-104h] v1 = ArgList; result = *(_DWORD *)(ArgList + 256); if ( result ) { fwrite("/******************************************************\n", 1u, 0x38u, *(FILE **)(ArgList + 256)); if ( *(_BYTE *)(v1 + 260) ) fflush(*(FILE **)(v1 + 256)); sub_7FF6E0(&DstBuf, 0x100u, "* %s - Log File Closed\n", v1); if ( *(_DWORD *)(v1 + 256) ) { fwrite(&DstBuf, 1u, strlen(&DstBuf), *(FILE **)(v1 + 256)); if ( *(_BYTE *)(v1 + 260) ) fflush(*(FILE **)(v1 + 256)); } GetSystemTime(&SystemTime); GetLocalTime(&v3); sub_7FF6E0( &DstBuf, 0x100u, "* %02d/%02d/%04d - %2d:%02d:%02d UTC (%2d:%02d:%02d local)\n", SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, v3.wHour, v3.wMinute, v3.wSecond); if ( *(_DWORD *)(v1 + 256) ) { fwrite(&DstBuf, 1u, strlen(&DstBuf), *(FILE **)(v1 + 256)); if ( *(_BYTE *)(v1 + 260) ) fflush(*(FILE **)(v1 + 256)); } if ( *(_DWORD *)(v1 + 256) ) { fwrite("******************************************************/\n", 1u, 0x38u, *(FILE **)(v1 + 256)); if ( *(_BYTE *)(v1 + 260) ) fflush(*(FILE **)(v1 + 256)); } result = fclose(*(FILE **)(v1 + 256)); } *(_DWORD *)(v1 + 256) = 0; return result; } //----- (008AB3A0) -------------------------------------------------------- char __thiscall sub_8AB3A0(int ArgList, int a2, char a3) { int v3; // esi struct _SYSTEMTIME v5; // [esp+4h] [ebp-12Ch] struct _SYSTEMTIME SystemTime; // [esp+14h] [ebp-11Ch] char DstBuf; // [esp+24h] [ebp-10Ch] char Mode; // [esp+124h] [ebp-Ch] v3 = ArgList; if ( a2 ) { if ( a2 != 1 ) { *(_DWORD *)(ArgList + 256) = 0; return 0; } strcpy_s(&Mode, 5u, "wt"); } else { strcpy_s(&Mode, 5u, "a+t"); } if ( a3 ) strcat_s(&Mode, 5u, "c"); if ( fopen_s((FILE **)(v3 + 256), (const char *)v3, &Mode) || !*(_DWORD *)(v3 + 256) ) return 0; sub_8AB160((_DWORD *)v3, "/******************************************************\n"); sub_7FF6E0(&DstBuf, 0x100u, "* %s - Log File Opened\n", v3); sub_8AB160((_DWORD *)v3, &DstBuf); GetSystemTime(&SystemTime); GetLocalTime(&v5); sub_7FF6E0( &DstBuf, 0x100u, "* %02d/%02d/%04d - %2d:%02d:%02d UTC (%2d:%02d:%02d local)\n", SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, v5.wHour, v5.wMinute, v5.wSecond); sub_8AB160((_DWORD *)v3, &DstBuf); sub_8AB160((_DWORD *)v3, "******************************************************/\n"); return 1; } //----- (008AB530) -------------------------------------------------------- int __thiscall sub_8AB530(int ArgList, char *Src, int a3, char a4, char a5) { int v5; // esi v5 = ArgList; strcpy_s((char *)ArgList, 0x100u, Src); *(_BYTE *)(v5 + 260) = a4; sub_8AB3A0(v5, a3, a5); return v5; } //----- (008AB580) -------------------------------------------------------- int (**(*sub_8AB580())[4])() { return off_AC061C; } // AC061C: using guessed type int (**(*off_AC061C)[4])(); //----- (008AB590) -------------------------------------------------------- int sub_8AB590() { int result; // eax result = sub_8AB070("NiMemory.log", 1, 1, 0); if ( result >= 0 ) { dword_BA5224 = result; dword_BA5230 = result; dword_BA523C = result; dword_BA5248 = result; byte_BA524C = 1; } return result; } // BA5224: using guessed type int dword_BA5224; // BA5230: using guessed type int dword_BA5230; // BA523C: using guessed type int dword_BA523C; // BA5248: using guessed type int dword_BA5248; // BA524C: using guessed type char byte_BA524C; //----- (008AB5D0) -------------------------------------------------------- int sub_8AB5D0() { int result; // eax result = sub_8AB070("NiProfile.log", 1, 1, 0); if ( result >= 0 ) { dword_BA5200 = result; dword_BA520C = result; dword_BA5218 = result; } return result; } // BA5200: using guessed type int dword_BA5200; // BA520C: using guessed type int dword_BA520C; // BA5218: using guessed type int dword_BA5218; //----- (008AB600) -------------------------------------------------------- int sub_8AB600() { int result; // eax if ( !byte_BA5370 ) { byte_BA5370 = 1; sub_875C70((int)"NiPortal", (int)sub_8AE440); sub_875C70((int)"NiRoom", (int)sub_8ACA90); sub_875C70((int)"NiRoomGroup", (int)sub_8AD5E0); result = sub_875C70((int)"NiWall", (int)sub_8AB700); } return result; } // 8AB600: using guessed type int sub_8AB600(); // 8ACA90: using guessed type int sub_8ACA90(); // 8AD5E0: using guessed type int sub_8AD5E0(); // 8AE440: using guessed type int sub_8AE440(); // BA5370: using guessed type char byte_BA5370; //----- (008AB650) -------------------------------------------------------- char sub_8AB650() { char result; // al if ( byte_BA5370 ) { byte_BA5370 = 0; sub_875C90((int)"NiPortal"); sub_875C90((int)"NiRoom"); sub_875C90((int)"NiRoomGroup"); result = sub_875C90((int)"NiWall"); } return result; } // BA5370: using guessed type char byte_BA5370; //----- (008AB6C0) -------------------------------------------------------- void *sub_8AB6C0() { return &unk_BA5384; } //----- (008AB6D0) -------------------------------------------------------- void *__thiscall sub_8AB6D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiOldWall::`vftable'; sub_85A210(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2AD5C: using guessed type void *NiOldWall::`vftable'; //----- (008AB700) -------------------------------------------------------- float *sub_8AB700() { float *v0; // eax float *v1; // esi v0 = (float *)operator new(0xF8u); v1 = v0; if ( !v0 ) return 0; sub_85A1C0(v0, 0); *(_DWORD *)v1 = &NiOldWall::`vftable'; sub_8736A0(v1 + 58); return v1; } // A2AD5C: using guessed type void *NiOldWall::`vftable'; //----- (008AB740) -------------------------------------------------------- void *__thiscall sub_8AB740(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2ADE8: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008AB770) -------------------------------------------------------- void *__thiscall sub_8AB770(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A2ADF8: using guessed type void *NiTArray::`vftable'; //----- (008AB7A0) -------------------------------------------------------- void *__thiscall sub_8AB7A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2AE00: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008AB7D0) -------------------------------------------------------- void *__thiscall sub_8AB7D0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A2AE10: using guessed type void *NiTArray::`vftable'; //----- (008AB800) -------------------------------------------------------- void __thiscall sub_8AB800(_DWORD *this, size_t a2) { _DWORD *v2; // esi size_t v3; // ecx int v4; // eax void *v5; // edi unsigned int v6; // eax unsigned int v7; // eax v2 = this; if ( a2 == this[2] ) return; if ( a2 < this[3] ) { v3 = a2; do { v4 = v2[1]; if ( *(_BYTE *)(v4 + v3) ) { *(_BYTE *)(v4 + v3) = 0; --v2[4]; } ++v3; } while ( v3 < v2[3] ); v2[3] = a2; } v5 = (void *)v2[1]; v2[2] = a2; if ( !a2 ) { v2[1] = 0; LABEL_15: operator delete(v5); return; } v2[1] = operator new(a2); v6 = 0; if ( v2[3] ) { do { *(_BYTE *)(v6 + v2[1]) = *((_BYTE *)v5 + v6); ++v6; } while ( v6 < v2[3] ); } v7 = v2[3]; if ( v7 >= v2[2] ) goto LABEL_15; do *(_BYTE *)(v7++ + v2[1]) = 0; while ( v7 < v2[2] ); operator delete(v5); } //----- (008AB8B0) -------------------------------------------------------- unsigned int __thiscall sub_8AB8B0(void *this) { void *v1; // edi unsigned int result; // eax unsigned int v3; // ebx int v4; // ecx float *v5; // esi float *v6; // eax char v7; // [esp+8h] [ebp-14h] unsigned int v8; // [esp+14h] [ebp-8h] float v9; // [esp+18h] [ebp-4h] v1 = this; sub_85BE80((int)this); result = *((_DWORD *)v1 + 65); v3 = 0; v8 = result; if ( result ) { do { v4 = *((_DWORD *)v1 + 63); v5 = *(float **)(v4 + 4 * v3); if ( v5 ) { v6 = sub_85DA90((float *)v1 + 26, (float *)&v7, *(float **)(v4 + 4 * v3)); v5[4] = *v6; v5[5] = v6[1]; v5[6] = v6[2]; result = v8; v9 = *((float *)v1 + 36) * v5[5] + v5[4] * *((float *)v1 + 35) + *((float *)v1 + 37) * v5[6]; v5[7] = v9 + *((float *)v1 + 38) * v5[3]; } ++v3; } while ( v3 < result ); } return result; } //----- (008AB940) -------------------------------------------------------- char __thiscall sub_8AB940(int this, float *a2, float *a3, char a4) { int v4; // edi unsigned int v5; // esi unsigned int v6; // eax float *v7; // eax float *v8; // eax float *v9; // eax double v10; // st7 float v11; // eax unsigned int v12; // ebx int v13; // esi unsigned int v14; // ebx unsigned int v15; // esi int v16; // ecx float *v17; // esi float *v18; // eax unsigned int v19; // esi int v20; // ecx char v22; // [esp+Ch] [ebp-C0h] char v23; // [esp+18h] [ebp-B4h] float v24; // [esp+24h] [ebp-A8h] float v25; // [esp+28h] [ebp-A4h] float v26; // [esp+2Ch] [ebp-A0h] float v27; // [esp+30h] [ebp-9Ch] float v28; // [esp+34h] [ebp-98h] float v29; // [esp+38h] [ebp-94h] float v30; // [esp+3Ch] [ebp-90h] float v31; // [esp+40h] [ebp-8Ch] float v32; // [esp+44h] [ebp-88h] float v33; // [esp+48h] [ebp-84h] unsigned int v34; // [esp+4Ch] [ebp-80h] unsigned int v35; // [esp+50h] [ebp-7Ch] float v36; // [esp+54h] [ebp-78h] float v37; // [esp+58h] [ebp-74h] char v38; // [esp+5Ch] [ebp-70h] float v39[9]; // [esp+80h] [ebp-4Ch] char v40; // [esp+A4h] [ebp-28h] v4 = this; v5 = *(_DWORD *)(this + 260); v6 = *(_DWORD *)(this + 188); v37 = *(float *)&a2; v35 = v5; v34 = v6; if ( a4 ) { v7 = sub_85D940(a2, (float *)&v38, (float *)(this + 52)); sub_85E050((float *)(v4 + 52), v39, v7); v8 = sub_85DA90((float *)LODWORD(v37), (float *)&v22, (float *)(v4 + 88)); v28 = *a3 + *v8; v29 = a3[1] + v8[1]; v30 = a3[2] + v8[2]; v24 = v28 - *(float *)(v4 + 88); v25 = v29 - *(float *)(v4 + 92); v26 = v30 - *(float *)(v4 + 96); v37 = *(float *)(v4 + 100); v9 = sub_85DAF0((float *)&v23, &v24, (float *)(v4 + 52)); v37 = 1.0 / v37; v10 = v37; v37 = v9[1] * v37; v36 = v9[2] * v10; v31 = v10 * *v9; v32 = v37; v33 = v36; LOBYTE(v11) = sub_85DB50(v39, (float *)&v40); v12 = 0; if ( v35 ) { do { v13 = *(_DWORD *)(*(_DWORD *)(v4 + 252) + 4 * v12); if ( v13 ) { v11 = COERCE_FLOAT(sub_85DAF0((float *)&v23, (float *)v13, (float *)&v40)); *(_DWORD *)v13 = *(_DWORD *)LODWORD(v11); *(_DWORD *)(v13 + 4) = *(_DWORD *)(LODWORD(v11) + 4); *(_DWORD *)(v13 + 8) = *(_DWORD *)(LODWORD(v11) + 8); v37 = *(float *)(v13 + 4) * v32 + v31 * *(float *)v13 + *(float *)(v13 + 8) * v33; *(float *)(v13 + 12) = v37 + *(float *)(v13 + 12); } ++v12; } while ( v12 < v35 ); } v14 = v34; v15 = 0; if ( v34 ) { do { v11 = *(float *)(v4 + 180); v16 = *(_DWORD *)(LODWORD(v11) + 4 * v15); if ( v16 ) LOBYTE(v11) = (*(int (__stdcall **)(float *, float *, signed int))(*(_DWORD *)v16 + 68))(v39, &v31, 1); ++v15; } while ( v15 < v14 ); } } else { sub_85DB50(a2, (float *)&v40); v11 = 0.0; v36 = 0.0; if ( v5 ) { do { v17 = *(float **)(*(_DWORD *)(v4 + 252) + 4 * LODWORD(v11)); if ( v17 ) { v18 = sub_85DAF0((float *)&v23, v17, (float *)&v40); *v17 = *v18; v17[1] = v18[1]; v17[2] = v18[2]; v11 = v36; v27 = a3[1] * v17[1] + *v17 * *a3 + a3[2] * v17[2]; v17[3] = v27 + v17[3]; } ++LODWORD(v11); v36 = v11; } while ( LODWORD(v11) < v35 ); } v19 = 0; if ( v34 ) { do { v20 = *(_DWORD *)(*(_DWORD *)(v4 + 180) + 4 * v19); if ( v20 ) LOBYTE(v11) = (*(int (__stdcall **)(float, float *, signed int))(*(_DWORD *)v20 + 68))( COERCE_FLOAT(LODWORD(v37)), a3, 1); ++v19; } while ( v19 < v34 ); } } return LOBYTE(v11); } //----- (008ABBD0) -------------------------------------------------------- char __thiscall sub_8ABBD0(_DWORD *this, float *a2) { unsigned int v2; // esi unsigned int v3; // edx int v4; // ecx float *v5; // edi float v7; // [esp+10h] [ebp+8h] v2 = this[65]; v3 = 0; if ( !v2 ) return 1; v4 = this[63]; v5 = a2; while ( 1 ) { if ( *(_DWORD *)v4 ) { v7 = *(float *)(*(_DWORD *)v4 + 20) * v5[1] + *v5 * *(float *)(*(_DWORD *)v4 + 16) + *(float *)(*(_DWORD *)v4 + 24) * v5[2] - *(float *)(*(_DWORD *)v4 + 28); if ( v7 < 0.0 ) break; } ++v3; v4 += 4; if ( v3 >= v2 ) return 1; } return 0; } //----- (008ABC40) -------------------------------------------------------- char __thiscall sub_8ABC40(_DWORD *this, int a2) { _DWORD *v2; // edi char result; // al _DWORD *v4; // esi int v5; // ecx _DWORD *v6; // esi int v7; // ecx _DWORD *v8; // esi int v9; // ecx v2 = this; result = sub_859E60(this, a2); if ( result ) { v4 = (_DWORD *)v2[69]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 20))(a2); } v6 = (_DWORD *)v2[79]; while ( v6 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) (*(void (__stdcall **)(int))(*(_DWORD *)v7 + 20))(a2); } v8 = (_DWORD *)v2[83]; while ( v8 ) { v9 = v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 20))(a2); } result = 1; } return result; } //----- (008ABCE0) -------------------------------------------------------- char __thiscall sub_8ABCE0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi char result; // al unsigned int v4; // ebx unsigned int v5; // esi float **v6; // edi int v7; // eax _DWORD *v8; // esi _DWORD *v9; // edi int v10; // ecx int *v11; // eax int v12; // eax int v13; // eax _DWORD *v14; // esi _DWORD *v15; // edi int v16; // ecx int *v17; // eax int v18; // eax int v19; // eax _DWORD *v20; // esi _DWORD *v21; // edi int v22; // ecx int *v23; // eax int v24; // eax _DWORD *v25; // [esp+8h] [ebp-4h] v2 = this; v25 = this; result = sub_859FB0(this, (int)a2); if ( result ) { v4 = v2[65]; if ( v4 != a2[65] ) return 0; if ( v4 ) { v5 = 0; if ( v4 ) { v6 = (float **)v2[63]; while ( !*v6 || (unsigned __int8)sub_883690(*v6, *v6) ) { ++v5; ++v6; if ( v5 >= v4 ) { v2 = v25; goto LABEL_10; } } return 0; } } LABEL_10: v7 = v2[71]; if ( v7 != a2[71] ) return 0; if ( v7 ) { v8 = (_DWORD *)v2[69]; v9 = (_DWORD *)a2[69]; while ( v8 ) { v10 = v8[2]; v8 = (_DWORD *)*v8; v11 = v9 + 2; v9 = (_DWORD *)*v9; v12 = *v11; if ( v10 ) { if ( !v12 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v10 + 28))(v12) ) return 0; } else if ( v12 ) { return 0; } } v2 = v25; } v13 = v2[81]; if ( v13 != a2[81] ) return 0; if ( v13 ) { v14 = (_DWORD *)v2[79]; v15 = (_DWORD *)a2[79]; while ( v14 ) { v16 = v14[2]; v14 = (_DWORD *)*v14; v17 = v15 + 2; v15 = (_DWORD *)*v15; v18 = *v17; if ( v16 ) { if ( !v18 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v16 + 28))(v18) ) return 0; } else if ( v18 ) { return 0; } } v2 = v25; } v19 = v2[85]; if ( v19 != a2[85] ) return 0; if ( v19 ) { v20 = (_DWORD *)v2[83]; v21 = (_DWORD *)a2[83]; while ( v20 ) { v22 = v20[2]; v20 = (_DWORD *)*v20; v23 = v21 + 2; v21 = (_DWORD *)*v21; v24 = *v23; if ( v22 ) { if ( !v24 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v22 + 28))(v24) ) return 0; } else if ( v24 ) { return 0; } } } result = 1; } return result; } //----- (008ABE80) -------------------------------------------------------- int __thiscall sub_8ABE80(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2ADE8: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2AE18: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008ABEC0) -------------------------------------------------------- int __thiscall sub_8ABEC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2AE00: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2AE28: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008ABF00) -------------------------------------------------------- void *__thiscall sub_8ABF00(void *this, char a2) { void *v2; // esi v2 = this; sub_8ABE80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008ABF30) -------------------------------------------------------- void *__thiscall sub_8ABF30(void *this, char a2) { void *v2; // esi v2 = this; sub_8ABEC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008ABF60) -------------------------------------------------------- LONG __thiscall sub_8ABF60(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ebx unsigned int v3; // esi _DWORD *v4; // ebx _DWORD *v5; // ST00_4 _DWORD *v6; // ebx _DWORD *v7; // ST00_4 void *v8; // ST00_4 _DWORD *v9; // ebx _DWORD *v10; // ST00_4 void *v11; // ST00_4 _DWORD *v12; // ebx _DWORD *v13; // ST00_4 v1 = this; v2 = this[65]; v3 = 0; *this = &NiRoom::`vftable'; if ( v2 ) { do { if ( *(_DWORD *)(v1[63] + 4 * v3) ) operator delete(*(void **)(v1[63] + 4 * v3)); ++v3; } while ( v3 < v2 ); } v4 = (_DWORD *)v1[83]; v1[82] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v4 ) { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[82] + 8))(v1 + 82, v5); } v1[85] = 0; v1[83] = 0; v1[84] = 0; v1[82] = &NiTListBase,NiPointer>::`vftable'; v6 = (_DWORD *)v1[79]; v1[78] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[78] + 8))(v1 + 78, v7); } v1[81] = 0; v1[79] = 0; v1[80] = 0; v1[78] = &NiTListBase,NiPointer>::`vftable'; v8 = (void *)v1[73]; v1[72] = &NiTArray::`vftable'; operator delete(v8); v9 = (_DWORD *)v1[69]; v1[68] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v9 ) { v10 = v9; v9 = (_DWORD *)*v9; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[68] + 8))(v1 + 68, v10); } v1[71] = 0; v1[69] = 0; v1[70] = 0; v1[68] = &NiTListBase,NiPointer>::`vftable'; v11 = (void *)v1[63]; v1[62] = &NiTArray::`vftable'; operator delete(v11); v12 = (_DWORD *)v1[59]; v1[58] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v12 ) { v13 = v12; v12 = (_DWORD *)*v12; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[58] + 8))(v1 + 58, v13); } v1[61] = 0; v1[59] = 0; v1[60] = 0; v1[58] = &NiTListBase,NiPointer>::`vftable'; return sub_85A210(v1); } // A2ADE8: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2ADF8: using guessed type void *NiTArray::`vftable'; // A2AE00: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2AE10: using guessed type void *NiTArray::`vftable'; // A2AE18: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A2AE28: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A2AE5C: using guessed type void *NiRoom::`vftable'; //----- (008AC110) -------------------------------------------------------- void *sub_8AC110() { return &unk_BA537C; } //----- (008AC120) -------------------------------------------------------- void __thiscall sub_8AC120(int this, int a2) { _DWORD *v2; // eax unsigned int v3; // edi int v4; // eax _DWORD *v5; // esi char v6; // bl int v7; // edx _DWORD *v8; // esi _BYTE *v9; // eax _DWORD *v10; // esi _BYTE *v11; // eax _DWORD *v12; // edx int v13; // esi int v14; // eax int v15; // [esp+0h] [ebp-Ch] _DWORD *v16; // [esp+4h] [ebp-8h] int v17; // [esp+8h] [ebp-4h] v17 = this; if ( !*(_BYTE *)(this + 348) ) { v2 = *(_DWORD **)(this + 276); v3 = 0; *(_BYTE *)(this + 348) = 1; if ( v2 ) { while ( 1 ) { v16 = (_DWORD *)*v2; v4 = v2[2]; v15 = v4; if ( v4 ) { v5 = (_DWORD *)(this + 288); v6 = *(_BYTE *)(v4 + 176) & 1; if ( v3 < *(_DWORD *)(this + 296) || (sub_8AB800(v5, v3 + *(_DWORD *)(this + 308)), v4 = v15, this = v17, v3 < v5[2]) ) { if ( v3 < v5[3] ) { v7 = v5[1]; if ( v6 ) { if ( !*(_BYTE *)(v3 + v7) ) ++v5[4]; } else if ( *(_BYTE *)(v3 + v7) ) { --v5[4]; } } else { v5[3] = v3 + 1; if ( v6 ) ++v5[4]; } *(_BYTE *)(v3 + v5[1]) = v6; } *(_WORD *)(v4 + 176) &= 0xFFFEu; ++v3; } if ( !v16 ) break; v2 = v16; } } v8 = *(_DWORD **)(this + 316); while ( v8 ) { v9 = (_BYTE *)v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) { sub_85C0A0(v9, a2); this = v17; } } v10 = *(_DWORD **)(this + 332); while ( v10 ) { v11 = (_BYTE *)v10[2]; v10 = (_DWORD *)*v10; if ( v11 ) { sub_85C0A0(v11, a2); this = v17; } } v12 = *(_DWORD **)(this + 276); v13 = 0; while ( v12 ) { v14 = v12[2]; v12 = (_DWORD *)*v12; if ( v14 ) { if ( *(_BYTE *)(v13 + *(_DWORD *)(this + 292)) ) *(_WORD *)(v14 + 176) |= 1u; else *(_WORD *)(v14 + 176) &= 0xFFFEu; ++v13; } } *(_BYTE *)(this + 348) = 0; } } //----- (008AC290) -------------------------------------------------------- void __thiscall sub_8AC290(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi _DWORD *v4; // edi int v5; // eax _DWORD *v6; // edi int v7; // eax unsigned int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v1 = this; v2 = 0; v8 = this[47]; if ( v8 ) { do { (*(void (__thiscall **)(_DWORD *, int *, unsigned int))(*v1 + 124))(v1, &v9, v2); if ( v9 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } ++v2; } while ( v2 < v8 ); } sub_8D8240(v1 + 44); v4 = (_DWORD *)v1[79]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v1 + 116))(v1, v5, 0); } v6 = (_DWORD *)v1[83]; while ( v6 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v1 + 116))(v1, v7, 0); } } //----- (008AC350) -------------------------------------------------------- void __thiscall sub_8AC350(_DWORD *this, int a2) { int *v2; // edi int v3; // eax _DWORD *v4; // esi volatile LONG *v5; // ebx int v6; // eax char v7; // al unsigned int v8; // edi int v9; // ebx float *v10; // eax float *v11; // esi void (__thiscall **v12)(volatile LONG *, signed int); // edx volatile LONG *v13; // ecx float *v14; // eax double v15; // st6 _DWORD *v16; // edi unsigned int v17; // ebx volatile LONG *v18; // esi char v19; // [esp+0h] [ebp-1Ch] volatile LONG *v20; // [esp+Ch] [ebp-10h] float v21; // [esp+10h] [ebp-Ch] unsigned int v22; // [esp+14h] [ebp-8h] _DWORD *v23; // [esp+18h] [ebp-4h] v23 = this; if ( this[61] ) { while ( 1 ) { v2 = (int *)this[59]; v3 = *v2; v4 = this + 58; this[59] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else this[60] = 0; v5 = (volatile LONG *)v2[2]; v20 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); (*(void (__thiscall **)(_DWORD *, int *))(*v4 + 8))(v4, v2); --v4[3]; if ( !v5 ) goto LABEL_31; v6 = (*(int (__thiscall **)(volatile LONG *))(*v5 + 4))(v5); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA5384 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_11; } v7 = 1; } else { LABEL_11: v7 = 0; } v8 = v7 != 0 ? (unsigned int)v5 : 0; v22 = v7 != 0 ? (unsigned int)v5 : 0; if ( v7 != 0 ? (unsigned int)v5 : 0 ) break; if ( !InterlockedDecrement(v5 + 1) ) { v12 = (void (__thiscall **)(volatile LONG *, signed int))*v5; v13 = v5; LABEL_30: (*v12)(v13, 1); } LABEL_31: this = v23; if ( !v23[61] ) return; } InterlockedIncrement((volatile LONG *)(v8 + 4)); v9 = v8 + 232; v10 = (float *)operator new(0x20u); v11 = v10; if ( v10 ) { sub_8736A0(v10); sub_8736A0(v11 + 4); } else { v11 = 0; } v14 = sub_85DA90((float *)(v8 + 52), (float *)&v19, (float *)(v8 + 232)); *v11 = *v14; v11[1] = v14[1]; v11[2] = v14[2]; v21 = *(float *)(v8 + 92) * v11[1] + *v11 * *(float *)(v8 + 88) + *(float *)(v8 + 96) * v11[2]; v15 = *(float *)(v8 + 100); v16 = v23; v11[3] = v21 + v15 * *(float *)(v9 + 12); v17 = v16[65]; if ( v17 >= v16[64] ) { sub_8237A0(v16 + 62, v17 + v16[67]); if ( v17 >= v16[64] ) { LABEL_26: if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) (**(void (__stdcall ***)(signed int))v22)(1); v18 = v20; if ( InterlockedDecrement(v20 + 1) ) goto LABEL_31; v12 = (void (__thiscall **)(volatile LONG *, signed int))*v18; v13 = v18; goto LABEL_30; } } if ( v17 < v16[65] ) { if ( *(_DWORD *)(v16[63] + 4 * v17) ) { LABEL_25: *(_DWORD *)(v16[63] + 4 * v17) = v11; goto LABEL_26; } } else { v16[65] = v17 + 1; } ++v16[66]; goto LABEL_25; } } //----- (008AC530) -------------------------------------------------------- unsigned int __thiscall sub_8AC530(int *this, signed int a2) { void **v2; // ebx int *v3; // esi int v4; // eax unsigned int v5; // edi int v6; // ST00_4 void (__cdecl *v7)(int, unsigned int *, signed int, int *, signed int); // eax float *v8; // eax float *v9; // ebx int v11; // [esp+8h] [ebp-8h] unsigned int v12; // [esp+Ch] [ebp-4h] v2 = (void **)a2; v3 = this; sub_858D60(this, (void **)a2); if ( *(_DWORD *)(a2 + 28) >= 0x5000007u ) { v4 = *(_DWORD *)(a2 + 352); v5 = 0; v12 = 0; v6 = v4; v7 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v4 + 4); v11 = 4; v7(v6, &v12, 4, &v11, 1); if ( v12 > 0 ) { sub_8237A0(v3 + 62, v12); if ( v12 > 0 ) { do { v8 = (float *)operator new(0x20u); v9 = v8; if ( v8 ) { sub_8736A0(v8); sub_8736A0(v9 + 4); } else { v9 = 0; } sub_87D5D0((char *)v9, a2); if ( v5 < v3[64] ) { if ( v5 < v3[65] ) { if ( v9 ) { if ( !*(_DWORD *)(v3[63] + 4 * v5) ) ++v3[66]; } else if ( *(_DWORD *)(v3[63] + 4 * v5) ) { --v3[66]; } } else { v3[65] = v5 + 1; if ( v9 ) ++v3[66]; } *(_DWORD *)(v3[63] + 4 * v5) = v9; } ++v5; } while ( v5 < v12 ); v2 = (void **)a2; } } } else { sub_876350((void **)a2); } sub_876350(v2); sub_876350(v2); return sub_876350(v2); } //----- (008AC660) -------------------------------------------------------- int __thiscall sub_8AC660(const char **this, unsigned int a2) { _DWORD *v2; // ebx const char **v3; // edi unsigned int v4; // ecx unsigned int v5; // esi const char *v6; // eax int v7; // eax int v8; // ST00_4 void (__cdecl *v9)(int, unsigned int *, signed int, int *, signed int); // eax char *v10; // ecx int v11; // eax int v12; // ST00_4 void (__cdecl *v13)(int, unsigned int *, signed int, int *, signed int); // eax const char *v14; // esi int v15; // eax int v16; // eax void (__cdecl *v17)(int, unsigned int *, signed int, int *, signed int); // edx const char *v18; // esi int v19; // eax int v20; // eax int (__cdecl *v21)(int, unsigned int *, signed int, int *, signed int); // edx int result; // eax const char *v23; // esi int v24; // [esp+Ch] [ebp-Ch] unsigned int v25; // [esp+10h] [ebp-8h] unsigned int v26; // [esp+14h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_859EE0(this, a2); v4 = (unsigned int)v3[65]; v5 = 0; v25 = v4; v26 = 0; if ( v4 ) { v6 = v3[63]; do { if ( *(_DWORD *)v6 ) ++v26; v6 += 4; --v4; } while ( v4 ); } v7 = v2[89]; v8 = v7; v9 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v7 + 8); v24 = 4; v9(v8, &v26, 4, &v24, 1); if ( v26 > 0 && v25 > 0 ) { do { v10 = *(char **)&v3[63][4 * v5]; if ( v10 ) sub_8737A0(v10, (signed int)v2); ++v5; } while ( v5 < v25 ); } v11 = v2[89]; a2 = (unsigned int)v3[71]; v12 = v11; v13 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v11 + 8); v24 = 4; v13(v12, &a2, 4, &v24, 1); if ( a2 ) { v14 = v3[69]; while ( v14 ) { v15 = *((_DWORD *)v14 + 2); v14 = *(const char **)v14; if ( v15 ) (*(void (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v15); } } v16 = v2[89]; a2 = (unsigned int)v3[81]; v17 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v16 + 8); v24 = 4; v17(v16, &a2, 4, &v24, 1); if ( a2 ) { v18 = v3[79]; while ( v18 ) { v19 = *((_DWORD *)v18 + 2); v18 = *(const char **)v18; if ( v19 ) (*(void (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, v19); } } v20 = v2[89]; a2 = (unsigned int)v3[85]; v21 = *(int (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(v20 + 8); v24 = 4; result = v21(v20, &a2, 4, &v24, 1); if ( a2 ) { v23 = v3[83]; while ( v23 ) { result = *((_DWORD *)v23 + 2); v23 = *(const char **)v23; if ( result ) result = (*(int (__thiscall **)(_DWORD *, int))(*v2 + 44))(v2, result); } } return result; } //----- (008AC900) -------------------------------------------------------- void *__thiscall sub_8AC900(void *this, char a2) { void *v2; // esi v2 = this; sub_8ABF60(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008AC930) -------------------------------------------------------- void __thiscall sub_8AC930(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // eax bool v8; // bl _DWORD *v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = (_DWORD *)v3[79]; if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = v4; v4 = (_DWORD *)*v4; if ( v2 == *v5 ) break; if ( !v4 ) goto LABEL_6; } v7 = v6; } else { LABEL_6: v7 = 0; } v8 = v7 == 0; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); if ( v8 ) { a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_8B8EC0(v9 + 78, &a2); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } sub_8AC290(v9); } } //----- (008AC9E0) -------------------------------------------------------- void __thiscall sub_8AC9E0(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // eax bool v8; // bl _DWORD *v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = (_DWORD *)v3[69]; if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = v4; v4 = (_DWORD *)*v4; if ( v2 == *v5 ) break; if ( !v4 ) goto LABEL_6; } v7 = v6; } else { LABEL_6: v7 = 0; } v8 = v7 == 0; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); if ( v8 ) { a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_8B8EC0(v9 + 68, &a2); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } sub_8AC290(v9); } } //----- (008ACAB0) -------------------------------------------------------- _DWORD *__thiscall sub_8ACAB0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx _DWORD *result; // eax int v5; // esi int v6; // eax _DWORD *v7; // edi int v8; // eax int v9; // eax int v10; // esi int v11; // eax _DWORD *v12; // edi int v13; // eax int v14; // eax int v15; // esi int v16; // eax _DWORD *v17; // edi int v18; // eax int v19; // eax int v20; // esi int v21; // eax _DWORD *v22; // edi int v23; // eax void (__stdcall ***v24)(signed int); // [esp+Ch] [ebp-18h] void (__stdcall ***v25)(signed int); // [esp+Ch] [ebp-18h] void (__stdcall ***v26)(signed int); // [esp+Ch] [ebp-18h] void (__stdcall ***v27)(signed int); // [esp+Ch] [ebp-18h] _DWORD *v28; // [esp+10h] [ebp-14h] _DWORD *i; // [esp+14h] [ebp-10h] int v30; // [esp+18h] [ebp-Ch] int v31; // [esp+1Ch] [ebp-8h] int v32; // [esp+20h] [ebp-4h] v2 = a2; v3 = this; v28 = this; sub_85A550(this, a2); v32 = 0; if ( a2[7] < 0x5000007u ) v32 = sub_875B00(a2); v31 = sub_875B00(a2); v30 = sub_875B00(a2); result = (_DWORD *)sub_875B00(a2); for ( i = result; v32; v2 = a2 ) { --v32; v5 = sub_875AD0(v2); if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); v6 = (*(int (__thiscall **)(_DWORD *))(v3[58] + 4))(v3 + 58); v7 = (_DWORD *)v6; v8 = *(_DWORD *)(v6 + 8); v24 = (void (__stdcall ***)(signed int))v8; if ( v8 != v5 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v24 ) (**v24)(1); v7[2] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } *v7 = 0; v7[1] = v3[60]; result = (_DWORD *)v3[60]; if ( result ) *result = v7; else v3[59] = v7; ++v3[61]; v3[60] = v7; if ( v5 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } } if ( v31 ) { do { --v31; v9 = sub_875AD0(v2); v10 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); v11 = (*(int (__thiscall **)(_DWORD *))(v3[68] + 4))(v3 + 68); v12 = (_DWORD *)v11; v13 = *(_DWORD *)(v11 + 8); v25 = (void (__stdcall ***)(signed int))v13; if ( v13 != v10 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v25 ) (**v25)(1); v12[2] = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } *v12 = 0; v12[1] = v3[70]; result = (_DWORD *)v3[70]; if ( result ) *result = v12; else v3[69] = v12; ++v3[71]; v3[70] = v12; if ( v10 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v10)(v10, 1); } v2 = a2; } while ( v31 ); v3 = v28; } if ( v30 ) { do { --v30; v14 = sub_875AD0(v2); v15 = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); v16 = (*(int (__thiscall **)(_DWORD *))(v3[78] + 4))(v3 + 78); v17 = (_DWORD *)v16; v18 = *(_DWORD *)(v16 + 8); v26 = (void (__stdcall ***)(signed int))v18; if ( v18 != v15 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v26 ) (**v26)(1); v17[2] = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } *v17 = 0; v17[1] = v3[80]; result = (_DWORD *)v3[80]; if ( result ) *result = v17; else v3[79] = v17; ++v3[81]; v3[80] = v17; if ( v15 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v15 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v15)(v15, 1); } v2 = a2; } while ( v30 ); v3 = v28; } if ( i ) { while ( 1 ) { i = (_DWORD *)((char *)i - 1); v19 = sub_875AD0(v2); v20 = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); v21 = (*(int (__thiscall **)(_DWORD *))(v3[82] + 4))(v3 + 82); v22 = (_DWORD *)v21; v23 = *(_DWORD *)(v21 + 8); v27 = (void (__stdcall ***)(signed int))v23; if ( v23 != v20 ) { if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v27 ) (**v27)(1); v22[2] = v20; if ( v20 ) InterlockedIncrement((volatile LONG *)(v20 + 4)); } *v22 = 0; v22[1] = v3[84]; result = (_DWORD *)v3[84]; if ( result ) *result = v22; else v3[83] = v22; ++v3[85]; v3[84] = v22; if ( v20 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v20 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v20)(v20, 1); } if ( !i ) break; v2 = a2; } } return result; } //----- (008ACE50) -------------------------------------------------------- _DWORD *__thiscall sub_8ACE50(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi _DWORD *v4; // edi _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi _DWORD *result; // eax int v11; // [esp+Ch] [ebp-8h] _DWORD *v12; // [esp+10h] [ebp-4h] v3 = a3; v4 = this; v12 = this; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); v5 = (_DWORD *)v4[83]; if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = v5; v5 = (_DWORD *)*v5; if ( v3 == *v6 ) break; if ( !v5 ) goto LABEL_6; } v8 = v7; } else { LABEL_6: v8 = 0; } if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( v8 ) { a3 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); sub_8B37A0(v12 + 82, &v11, &a3); v9 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**v9)(v9, 1); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8AC290(v12); *a2 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (008ACF60) -------------------------------------------------------- unsigned int __thiscall sub_8ACF60(int *this, void **a2) { sub_858D60(this, a2); sub_876290(a2); return sub_876350(a2); } //----- (008ACF80) -------------------------------------------------------- int __thiscall sub_8ACF80(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2AEF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2AF04: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008ACFC0) -------------------------------------------------------- void *__thiscall sub_8ACFC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2AEF4: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008ACFF0) -------------------------------------------------------- char __thiscall sub_8ACFF0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al int v4; // ecx _DWORD *v5; // esi int v6; // ecx v2 = this; result = sub_859E60(this, a2); if ( result ) { v4 = v2[58]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 20))(a2); v5 = (_DWORD *)v2[60]; while ( v5 ) { v6 = v5[2]; v5 = (_DWORD *)*v5; if ( v6 ) (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 20))(a2); } result = 1; } return result; } //----- (008AD050) -------------------------------------------------------- char __thiscall sub_8AD050(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // eax _DWORD *v6; // esi _DWORD *v7; // edi int v8; // ecx int *v9; // eax int v10; // eax v2 = this; if ( !sub_859FB0(this, (int)a2) ) return 0; v3 = v2[58]; v4 = a2[58]; if ( v3 ) { if ( !v4 || !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 28))(a2[58]) ) return 0; } else if ( v4 ) { return 0; } v5 = v2[62]; if ( v5 != a2[62] ) return 0; if ( v5 ) { v6 = (_DWORD *)v2[60]; v7 = (_DWORD *)a2[60]; while ( v6 ) { v8 = v6[2]; v6 = (_DWORD *)*v6; v9 = v7 + 2; v7 = (_DWORD *)*v7; v10 = *v9; if ( v8 ) { if ( !v10 || !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)v8 + 28))(v10) ) return 0; } else if ( v10 ) { return 0; } } } return 1; } //----- (008AD0F0) -------------------------------------------------------- _DWORD *__thiscall sub_8AD0F0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // eax v2 = this; v3 = this[2]; v4 = *(_DWORD **)(v3 + 4); this[2] = v4; if ( v4 ) *v4 = 0; else this[1] = 0; v5 = *(_DWORD *)(v3 + 8); *a2 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); (*(void (__thiscall **)(_DWORD *, int))(*v2 + 8))(v2, v3); --v2[3]; return a2; } //----- (008AD140) -------------------------------------------------------- void *__thiscall sub_8AD140(void *this, char a2) { void *v2; // esi v2 = this; sub_8ACF80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008AD170) -------------------------------------------------------- LONG __thiscall sub_8AD170(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // ST00_4 int v4; // edi int v5; // esi v1 = this; *this = &NiRoomGroup::`vftable'; v2 = (_DWORD *)this[60]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[59] + 8))(v1 + 59, v3); } v1[62] = 0; v1[60] = 0; v1[61] = 0; sub_8AE820(v1 + 64); v4 = v1[63]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); sub_8ACF80(v1 + 59); v5 = v1[58]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_85A210(v1); } // A2AF24: using guessed type void *NiRoomGroup::`vftable'; //----- (008AD230) -------------------------------------------------------- void *sub_8AD230() { return &unk_BA5390; } //----- (008AD240) -------------------------------------------------------- int __thiscall sub_8AD240(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx void (__thiscall ***v3)(_DWORD, signed int); // edi int result; // eax _DWORD *i; // edi int v6; // eax int v7; // [esp+Ch] [ebp-4h] v1 = this; v2 = 0; if ( this[47] ) { do { (*(void (__thiscall **)(_DWORD *, int *, unsigned int))(*v1 + 124))(v1, &v7, v2); if ( v7 ) { v3 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) { if ( v3 ) (**v3)(v3, 1); } } ++v2; } while ( v2 < v1[47] ); } sub_8D8240(v1 + 44); result = v1[58]; if ( result ) result = (*(int (__thiscall **)(_DWORD *, int, _DWORD))(*v1 + 116))(v1, result, 0); for ( i = (_DWORD *)v1[60]; i; result = (*(int (__thiscall **)(_DWORD *, int, _DWORD))(*v1 + 116))(v1, v6, 0) ) { v6 = i[2]; i = (_DWORD *)*i; } return result; } //----- (008AD2E0) -------------------------------------------------------- _DWORD *__thiscall sub_8AD2E0(_DWORD *this, _DWORD *a2, float *a3) { _DWORD *v3; // esi int v4; // edi _DWORD *result; // eax v3 = (_DWORD *)this[60]; if ( v3 ) { while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { if ( sub_8ABBD0((_DWORD *)v4, a3) ) break; } if ( !v3 ) goto LABEL_5; } *a2 = v4; InterlockedIncrement((volatile LONG *)(v4 + 4)); result = a2; } else { LABEL_5: result = a2; *a2 = 0; } return result; } //----- (008AD340) -------------------------------------------------------- _DWORD *__thiscall sub_8AD340(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85A1C0(this, 0); *v1 = &NiRoomGroup::`vftable'; v1[58] = 0; v1[62] = 0; v1[60] = 0; v1[61] = 0; v1[59] = &NiTPointerList>::`vftable'; v1[63] = 0; sub_8AE8B0(v1 + 64); return v1; } // A2AF14: using guessed type void *NiTPointerList>::`vftable'; // A2AF24: using guessed type void *NiRoomGroup::`vftable'; //----- (008AD390) -------------------------------------------------------- void *__thiscall sub_8AD390(void *this, char a2) { void *v2; // esi v2 = this; sub_8AD170(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008AD3C0) -------------------------------------------------------- _DWORD *__thiscall sub_8AD3C0(_DWORD *this, int a2) { _DWORD *result; // eax _DWORD *v3; // edi _DWORD *v4; // esi int v5; // esi float *v6; // eax int v7; // ebx _BYTE *v8; // ebx float *v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] result = *(_DWORD **)(a2 + 12); v3 = this; v10 = *(_DWORD *)(a2 + 12); if ( byte_BA538C ) { v4 = (_DWORD *)this[60]; while ( v4 ) { result = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( result ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, int, _DWORD *, _DWORD))(v3[64] + 8))( v3 + 64, v10, result, *(_DWORD *)(a2 + 8)); } return result; } v5 = this[63]; v6 = (float *)(result + 35); v9 = v6; if ( v5 ) { if ( sub_8ABBD0((_DWORD *)v5, v6) ) { result = (_DWORD *)InterlockedIncrement((volatile LONG *)(v5 + 4)); goto LABEL_12; } v6 = v9; } result = sub_8AD2E0(v3, &v9, v6); v5 = (int)v9; LABEL_12: if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v7 = v3[63]; if ( v7 != v5 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v3[63] = v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); } result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, int, int, _DWORD))(v3[64] + 8))( v3 + 64, v10, v5, *(_DWORD *)(a2 + 8)); } else if ( v3[58] ) { sub_56FF80(v3 + 63, 0); result = (_DWORD *)sub_85C0A0((_BYTE *)v3[58], a2); } else { v8 = (_BYTE *)v3[63]; if ( v8 ) result = (_DWORD *)sub_85C0A0(v8, a2); } return result; } // BA538C: using guessed type char byte_BA538C; //----- (008AD530) -------------------------------------------------------- LONG __thiscall sub_8AD530(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edx LONG result; // eax bool v8; // bl _DWORD *v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = (_DWORD *)v3[60]; if ( v4 ) { while ( 1 ) { v5 = v4 + 2; v6 = v4; v4 = (_DWORD *)*v4; if ( v2 == *v5 ) break; if ( !v4 ) goto LABEL_6; } result = (LONG)v6; } else { LABEL_6: result = 0; } v8 = result == 0; if ( v2 ) { result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); } if ( v8 ) { a2 = v2; if ( v2 ) InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_8A6330(v9 + 59, &a2); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } result = sub_8AD240(v9); } return result; } //----- (008AD650) -------------------------------------------------------- _DWORD *__thiscall sub_8AD650(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // eax int v4; // esi int v5; // ebx _DWORD *v6; // esi _DWORD *result; // eax _DWORD *v8; // ebx int v9; // eax int v10; // esi int v11; // eax int v12; // esi int v13; // [esp+Ch] [ebp-4h] v2 = this; sub_85A550(this, a2); v3 = sub_875AD0(a2); v4 = v2[58]; v5 = v3; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[58] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = a2; result = (_DWORD *)sub_875B00(a2); v8 = result; if ( a2[7] >= 0x4010008u ) { if ( result ) { while ( 1 ) { v8 = (_DWORD *)((char *)v8 - 1); v11 = sub_875AD0(v6); v12 = v11; v13 = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); result = (_DWORD *)sub_8A6330(v2 + 59, &v13); if ( v12 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v12 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v12)(v12, 1); } if ( !v8 ) break; v6 = a2; } } } else if ( result ) { while ( 1 ) { v8 = (_DWORD *)((char *)v8 - 1); v9 = sub_875AD0(v6); v10 = v9; v13 = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); result = sub_8B8EC0(v2 + 59, &v13); if ( v10 ) { result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v10 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v10)(v10, 1); } if ( !v8 ) break; v6 = a2; } } return result; } //----- (008AD780) -------------------------------------------------------- void __thiscall sub_8AD780(const char **this, signed int a2) { _DWORD *v2; // edi const char **v3; // esi int v4; // eax int v5; // ST00_4 void (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // eax _DWORD *v7; // ebx const char *v8; // eax _DWORD *v9; // ecx _DWORD *v10; // edx int i; // esi int v12; // [esp+8h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_859EE0(this, a2); (*(void (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[58]); a2 = (signed int)v3[62]; v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v4 + 8); v12 = 4; v6(v5, &a2, 4, &v12, 1); if ( a2 > 0 ) { v7 = operator new(4 * a2); v8 = v3[60]; if ( v8 ) { v9 = v7; do { v10 = v8 + 8; v8 = *(const char **)v8; *v9 = *v10; ++v9; } while ( v8 ); } for ( i = a2 - 1; i >= 0; --i ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 44))(v2, v7[i]); operator delete(v7); } } //----- (008AD840) -------------------------------------------------------- _DWORD *__thiscall sub_8AD840(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi _DWORD *v4; // edi _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v7; // edx _DWORD *v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi _DWORD *result; // eax int v11; // [esp+Ch] [ebp-8h] _DWORD *v12; // [esp+10h] [ebp-4h] v3 = a3; v4 = this; v12 = this; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); v5 = (_DWORD *)v4[60]; if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = v5; v5 = (_DWORD *)*v5; if ( v3 == *v6 ) break; if ( !v5 ) goto LABEL_6; } v8 = v7; } else { LABEL_6: v8 = 0; } if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( v8 ) { a3 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); sub_8B37A0(v12 + 59, &v11, &a3); v9 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**v9)(v9, 1); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8AD240(v12); *a2 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); result = a2; } else { result = a2; *a2 = 0; } return result; } //----- (008AD950) -------------------------------------------------------- float __userpurge sub_8AD950@(float *this@) { return sub_86BD60(this + 9, this + 47, this + 26); } //----- (008AD970) -------------------------------------------------------- int __thiscall sub_8AD970(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_85C770(this, a2); result = sub_875AD0(a2); v2[46] = result; return result; } //----- (008AD9A0) -------------------------------------------------------- char __thiscall sub_8AD9A0(_DWORD *this, int a2) { return sub_85C230(this, a2); } //----- (008AD9B0) -------------------------------------------------------- void *sub_8AD9B0() { return &unk_BA5398; } //----- (008AD9C0) -------------------------------------------------------- void **__thiscall sub_8AD9C0(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 45); *(_DWORD *)this = &NiPortal::`vftable'; operator delete(v3); operator delete(v2[51]); sub_85C320(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2AFB4: using guessed type void *NiPortal::`vftable'; //----- (008ADA10) -------------------------------------------------------- char __thiscall sub_8ADA10(int this, _DWORD *a2) { signed int v2; // ebx float *v4; // eax float *v5; // esi float *v6; // eax float v7; // ST08_4 float *v8; // eax float v9; // ecx float v10; // edx float v11; // eax double v12; // st7 signed int v13; // esi double v14; // st6 signed int v15; // edi float *v16; // eax float *v17; // ecx float v18; // eax double v19; // st7 float v20; // edx double v21; // st5 double v22; // st4 float v23; // edx float v24; // eax float v25; // eax float v26; // edx double v27; // st7 float v28; // eax float v29; // edx float v30; // eax int v31; // esi int v32; // eax float *v33; // eax int v34; // ecx float v35; // edx double v36; // st5 double v37; // st6 double v38; // rt0 double v39; // st5 double v40; // st6 double v41; // st7 char v42; // [esp+10h] [ebp-E4h] float v43; // [esp+1Ch] [ebp-D8h] float v44; // [esp+20h] [ebp-D4h] float v45; // [esp+24h] [ebp-D0h] float v46; // [esp+28h] [ebp-CCh] char v47; // [esp+34h] [ebp-C0h] _DWORD *v48; // [esp+38h] [ebp-BCh] int v49; // [esp+3Ch] [ebp-B8h] float v50; // [esp+40h] [ebp-B4h] float v51; // [esp+44h] [ebp-B0h] float v52; // [esp+48h] [ebp-ACh] int v53; // [esp+4Ch] [ebp-A8h] float v54; // [esp+50h] [ebp-A4h] float v55; // [esp+54h] [ebp-A0h] int v56; // [esp+58h] [ebp-9Ch] float v57; // [esp+5Ch] [ebp-98h] float v58; // [esp+60h] [ebp-94h] float v59; // [esp+64h] [ebp-90h] float v60; // [esp+68h] [ebp-8Ch] float v61; // [esp+6Ch] [ebp-88h] float v62; // [esp+70h] [ebp-84h] float v63; // [esp+74h] [ebp-80h] float v64; // [esp+78h] [ebp-7Ch] float v65; // [esp+7Ch] [ebp-78h] float v66; // [esp+80h] [ebp-74h] float v67; // [esp+84h] [ebp-70h] float v68; // [esp+88h] [ebp-6Ch] float v69; // [esp+8Ch] [ebp-68h] float v70; // [esp+90h] [ebp-64h] float v71; // [esp+94h] [ebp-60h] float v72; // [esp+98h] [ebp-5Ch] float v73; // [esp+9Ch] [ebp-58h] float v74; // [esp+A0h] [ebp-54h] char v75; // [esp+A7h] [ebp-4Dh] char v76; // [esp+A8h] [ebp-4Ch] int v77; // [esp+CCh] [ebp-28h] v2 = *(unsigned __int16 *)(this + 178); v49 = this; v48 = a2; if ( v2 < 3 ) return 0; v4 = *(float **)(this + 204); v5 = (float *)a2[3]; v62 = v5[35] - *v4; v63 = v5[36] - v4[1]; v64 = v5[37] - v4[2]; v59 = v4[3] - *v4; v60 = v4[4] - v4[1]; v61 = v4[5] - v4[2]; v65 = v4[6] - *v4; v66 = v4[7] - v4[1]; v67 = v4[8] - v4[2]; v6 = sub_443140(&v59, &v50, &v65); v73 = v6[1] * v63 + *v6 * v62 + v6[2] * v64; if ( v73 < 0.0 ) return 0; v73 = v5[38]; v73 = 1.0 / v73; v7 = v73; v8 = sub_85DCC0(v5 + 26, (float *)&v76); sub_85DA30(v8, (int)&v77, v7); v9 = v5[35]; v69 = 3.4028235e38; v10 = v5[36]; v11 = v5[37]; v73 = -3.4028235e38; v62 = v9; v70 = v73; v71 = v73; qmemcpy(&v43, a2 + 4, 0x1Cu); v72 = 3.4028235e38; v63 = v10; v64 = v11; if ( v47 ) { if ( v2 > 0 ) { v31 = 0; do { v32 = *(_DWORD *)(v49 + 204); v73 = *(float *)(v32 + v31 + 4) - v63; v74 = *(float *)(v32 + v31 + 8) - v64; v50 = *(float *)(v32 + v31) - v62; v51 = v73; v52 = v74; v33 = sub_85DA90((float *)&v77, (float *)&v42, &v50); v34 = *(int *)v33; v35 = v33[1]; v58 = v33[2]; v56 = v34; v57 = v35; if ( v69 > (double)v58 ) v69 = v58; if ( v70 < (double)v58 ) v70 = v58; if ( v72 > (double)v57 ) v72 = v57; if ( v71 < (double)v57 ) v71 = v57; v31 += 12; --v2; } while ( v2 ); } } else { v12 = 0.0000001000000011686097; v13 = 0; v14 = 10000000.0; v15 = 0; v75 = 0; if ( v2 > 0 ) { v73 = 0.0; do { v16 = (float *)(LODWORD(v73) + *(_DWORD *)(v49 + 204)); v74 = v16[1] - v63; v68 = v16[2] - v64; v50 = *v16 - v62; v51 = v74; v52 = v68; v17 = sub_85DA90((float *)&v77, (float *)&v42, &v50); v18 = v17[1]; v56 = *(int *)v17; v19 = *(float *)&v56; v20 = v17[2]; v57 = v18; v58 = v20; v21 = v20; v22 = v18; if ( *(float *)&v56 <= 0.0000001000000011686097 ) { if ( !v15 ) { v25 = v17[1]; v53 = *(int *)v17; v26 = v17[2]; v15 = -1; v54 = v25; v55 = v26; } if ( v13 > 0 ) v75 = 1; v13 = -1; } else { if ( !v15 ) { v23 = v17[1]; v53 = *(int *)v17; v24 = v17[2]; v15 = 1; v54 = v23; v55 = v24; } v74 = 1.0 / v19; v68 = v21 * v74; v74 = v74 * v22; if ( v69 > (double)v68 ) v69 = v68; if ( v70 < (double)v68 ) v70 = v68; if ( v72 > (double)v74 ) v72 = v74; if ( v71 < (double)v74 ) v71 = v74; if ( v13 < 0 ) v75 = 1; v13 = 1; } if ( v75 ) { v65 = v19 - v59; v66 = v22 - v60; v67 = v21 - v61; v74 = (0.0000001000000011686097 - v59) / v65; v68 = (v61 + v67 * v74) * 10000000.0; v27 = 10000000.0; v74 = (v60 + v74 * v66) * 10000000.0; if ( v69 > (double)v68 ) v69 = v68; if ( v70 < (double)v68 ) v70 = v68; if ( v72 > (double)v74 ) v72 = v74; if ( v71 < (double)v74 ) v71 = v74; v75 = 0; } else { v27 = 10000000.0; } v28 = *v17; v29 = v17[1]; LODWORD(v73) += 12; --v2; v59 = v28; v30 = v17[2]; v60 = v29; v61 = v30; } while ( v2 ); v14 = v27; v12 = 0.0000001000000011686097; } if ( v15 * v13 < 0 ) { v65 = *(float *)&v53 - v59; v66 = v54 - v60; v67 = v55 - v61; v74 = (v12 - v59) / v65; v68 = (v61 + v67 * v74) * v14; v74 = (v74 * v66 + v60) * v14; if ( v69 > (double)v68 ) v69 = v68; if ( v70 < (double)v68 ) v70 = v68; if ( v72 > (double)v74 ) v72 = v74; if ( v71 < (double)v74 ) v71 = v74; } } if ( v70 <= (double)v43 || v69 >= (double)v44 || v71 <= (double)v46 || v72 >= (double)v45 ) return 0; if ( v43 >= (double)v69 ) { v36 = v45; } else { v36 = v45; v43 = v69; } if ( v70 >= (double)v44 ) { v37 = v46; } else { v37 = v46; v44 = v70; } v38 = v36; v39 = v37; v40 = v38; if ( v39 >= v72 ) { v41 = v40; } else { v41 = v40; v46 = v72; } if ( v71 < v41 ) v45 = v71; sub_85F8D0(v48, &v43); return 1; } //----- (008AE0F0) -------------------------------------------------------- void __thiscall sub_8AE0F0(int this, _DWORD *a2) { int v2; // ebx bool v3; // zf char v4; // [esp+4h] [ebp-1Ch] v2 = this; if ( byte_AC0A02 && !(((unsigned __int8)*(_WORD *)(this + 176) >> 1) & 1) && *(_BYTE *)(this + 176) & 1 ) { v3 = *(_DWORD *)(this + 184) == 0; *(_WORD *)(this + 176) |= 2u; qmemcpy(&v4, a2 + 4, 0x1Cu); if ( !v3 ) { if ( sub_8ADA10(this, a2) ) { sub_85C0A0(*(_BYTE **)(v2 + 184), (int)a2); sub_85F8D0(a2, &v4); } } *(_WORD *)(v2 + 176) &= 0xFFFDu; } } // AC0A02: using guessed type char byte_AC0A02; //----- (008AE180) -------------------------------------------------------- int __thiscall sub_8AE180(void *this) { void *v1; // esi int result; // eax unsigned __int16 i; // bx int v4; // edi float *v5; // ST0C_4 float *v6; // eax float *v7; // eax float v8; // edx double v9; // st7 double v10; // st7 char v11; // [esp+18h] [ebp-40h] float v12; // [esp+24h] [ebp-34h] float v13; // [esp+28h] [ebp-30h] float v14; // [esp+2Ch] [ebp-2Ch] int v15; // [esp+30h] [ebp-28h] v1 = this; sub_85BE80((int)this); result = 0; for ( i = 0; i < *((_WORD *)v1 + 89); *(float *)(result + v4 + 8) = v14 ) { v4 = 12 * i; v5 = (float *)(v4 + *((_DWORD *)v1 + 45)); v6 = (float *)sub_85DA30((float *)v1 + 26, (int)&v15, *((float *)v1 + 38)); v7 = sub_85DA90(v6, (float *)&v11, v5); ++i; v12 = *((float *)v1 + 35) + *v7; v13 = v7[1] + *((float *)v1 + 36); v8 = v13; v9 = v7[2]; result = *((_DWORD *)v1 + 51); v10 = v9 + *((float *)v1 + 37); *(float *)(result + v4) = v12; *(float *)(result + v4 + 4) = v8; v14 = v10; } return result; } //----- (008AE240) -------------------------------------------------------- int __thiscall sub_8AE240(int this, float *a2, float *a3, char a4) { int v4; // esi float *v5; // eax float *v6; // eax float *v7; // eax bool v8; // zf unsigned __int16 i; // bx int v10; // edi float *v11; // eax float v12; // ecx double v13; // st7 int v14; // eax double v15; // st7 int v16; // edi float *v17; // eax float v18; // edx double v19; // st7 int v20; // eax double v21; // st7 char v23; // [esp+Ch] [ebp-84h] char v24; // [esp+18h] [ebp-78h] float v25; // [esp+24h] [ebp-6Ch] float v26; // [esp+28h] [ebp-68h] float v27; // [esp+2Ch] [ebp-64h] int v28; // [esp+30h] [ebp-60h] float v29; // [esp+34h] [ebp-5Ch] float v30; // [esp+38h] [ebp-58h] float v31; // [esp+3Ch] [ebp-54h] float v32; // [esp+40h] [ebp-50h] char v33; // [esp+44h] [ebp-4Ch] char v34; // [esp+68h] [ebp-28h] v4 = this; v32 = *(float *)&a2; if ( a4 ) { v5 = sub_85D940(a2, (float *)&v33, (float *)(this + 52)); sub_85E050((float *)(v4 + 52), (float *)&v34, v5); v6 = sub_85DA90((float *)LODWORD(v32), (float *)&v23, (float *)(v4 + 88)); v25 = *a3 + *v6; v26 = a3[1] + v6[1]; v27 = a3[2] + v6[2]; v29 = v25 - *(float *)(v4 + 88); v30 = v26 - *(float *)(v4 + 92); v31 = v27 - *(float *)(v4 + 96); v32 = *(float *)(v4 + 100); v7 = sub_85DAF0((float *)&v24, &v29, (float *)(v4 + 52)); v8 = *(_DWORD *)(v4 + 180) == 0; v32 = 1.0 / v32; v25 = *v7 * v32; v26 = v7[1] * v32; v27 = v32 * v7[2]; if ( !v8 ) { for ( i = 0; i < *(_WORD *)(v4 + 178); *(float *)(v14 + v10 + 8) = v31 ) { v10 = 12 * i; v11 = sub_85DA90((float *)&v34, (float *)&v24, (float *)(v10 + *(_DWORD *)(v4 + 180))); ++i; v29 = v25 + *v11; v30 = v11[1] + v26; v12 = v30; v13 = v11[2]; v14 = *(_DWORD *)(v4 + 180); v15 = v13 + v27; *(float *)(v14 + v10) = v29; *(float *)(v14 + v10 + 4) = v12; v31 = v15; } } } else if ( *(_DWORD *)(this + 180) ) { v28 = 0; if ( *(_WORD *)(this + 178) > 0u ) { do { v16 = 12 * (unsigned __int16)v28; v17 = sub_85DA90((float *)LODWORD(v32), (float *)&v24, (float *)(v16 + *(_DWORD *)(v4 + 180))); v29 = *a3 + *v17; v30 = v17[1] + a3[1]; v18 = v30; v19 = v17[2]; v20 = *(_DWORD *)(v4 + 180); v21 = v19 + a3[2]; *(float *)(v20 + v16) = v29; *(float *)(v20 + v16 + 4) = v18; v31 = v21; *(float *)(v20 + v16 + 8) = v31; ++v28; } while ( (unsigned __int16)v28 < *(_WORD *)(v4 + 178) ); } } return sub_86B6C0((float *)(v4 + 188), *(unsigned __int16 *)(v4 + 178), *(float **)(v4 + 180)); } //----- (008AE490) -------------------------------------------------------- char __thiscall sub_8AE490(_DWORD *this, int a2) { _DWORD *v2; // ebx unsigned int v4; // edi unsigned int v5; // esi int v6; // eax float *v7; // ecx float *v8; // edx int v9; // ebx _DWORD *v10; // [esp+8h] [ebp-4h] v2 = this; v10 = this; if ( !sub_85C8D0(this, a2) || *((_WORD *)v2 + 89) != *(_WORD *)(a2 + 178) ) return 0; v4 = *((unsigned __int16 *)v2 + 89); v5 = 0; if ( !*((_WORD *)v2 + 89) ) return (*((_BYTE *)v2 + 176) ^ ~*(_BYTE *)(a2 + 176)) & 1; v6 = *(_DWORD *)(a2 + 180); v7 = (float *)v2[45]; v8 = (float *)(v6 + 8); v9 = v6 - (_DWORD)v7; while ( *(float *)((char *)v7 + v9) == *v7 && *(v8 - 1) == v7[1] && *v8 == v7[2] ) { ++v5; v8 += 3; v7 += 3; if ( v5 >= v4 ) { v2 = v10; return (*((_BYTE *)v2 + 176) ^ ~*(_BYTE *)(a2 + 176)) & 1; } } return 0; } //----- (008AE550) -------------------------------------------------------- int __thiscall sub_8AE550(int *this, signed int a2) { signed int v2; // ebx int *v3; // edi void (__cdecl *v4)(int, int *, signed int, unsigned int *, signed int); // edx int v5; // ST1C_4 int v6; // eax int v7; // ST1C_4 void (__cdecl *v8)(int, signed int *, signed int, unsigned int *, signed int); // eax int v9; // eax void (__cdecl *v10)(int, char *, signed int, unsigned int *, signed int); // edx unsigned __int16 *v11; // esi unsigned int v12; // edx unsigned int v14; // [esp+Ch] [ebp-8h] int v15; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; sub_85CDA0(this, a2); if ( *(_DWORD *)(v2 + 28) >= 0xA000102u ) { v4 = *(void (__cdecl **)(int, int *, signed int, unsigned int *, signed int))(*(_DWORD *)(v2 + 352) + 4); v5 = *(_DWORD *)(v2 + 352); v14 = 2; v4(v5, v3 + 44, 2, &v14, 1); } else { *((_WORD *)v3 + 88) = (*(_WORD *)(v2 + 412) >> 6) & 0xFF; } v6 = *(_DWORD *)(v2 + 352); v7 = v6; v8 = *(void (__cdecl **)(int, signed int *, signed int, unsigned int *, signed int))(v6 + 4); v14 = 2; v8(v7, &a2, 2, &v14, 1); v9 = *(_DWORD *)(v2 + 352); v10 = *(void (__cdecl **)(int, char *, signed int, unsigned int *, signed int))(v9 + 4); v14 = 2; v11 = (unsigned __int16 *)((char *)v3 + 178); v10(v9, (char *)v3 + 178, 2, &v14, 1); v3[45] = (int)operator new(12 * *((unsigned __int16 *)v3 + 89)); v3[51] = (int)operator new(12 * *((unsigned __int16 *)v3 + 89)); v14 = 0; if ( *((_WORD *)v3 + 89) > 0u ) { v15 = 0; do { sub_8608D0((char *)(v15 + v3[45]), v2); v12 = *v11; v15 += 12; ++v14; } while ( v14 < v12 ); } sub_86B6C0((float *)v3 + 47, *v11, (float *)v3[45]); return sub_876290((void **)v2); } //----- (008AE680) -------------------------------------------------------- int __thiscall sub_8AE680(const char **this, signed int a2) { _DWORD *v2; // esi const char **v3; // edi int v4; // eax int v5; // ST28_4 void (__cdecl *v6)(int, const char **, signed int, signed int *, signed int); // eax int v7; // eax int v8; // ST14_4 void (__cdecl *v9)(int, int *, signed int, signed int *, signed int); // eax int v10; // eax void (__cdecl *v11)(int, char *, signed int, signed int *, signed int); // edx unsigned int v12; // edx int v14; // [esp+Ch] [ebp-8h] unsigned int v15; // [esp+10h] [ebp-4h] v2 = (_DWORD *)a2; v3 = this; sub_85D030(this, a2); v4 = v2[89]; v5 = v4; v6 = *(void (__cdecl **)(int, const char **, signed int, signed int *, signed int))(v4 + 8); a2 = 2; v6(v5, v3 + 44, 2, &a2, 1); v7 = v2[89]; v14 = 0; v8 = v7; v9 = *(void (__cdecl **)(int, int *, signed int, signed int *, signed int))(v7 + 8); a2 = 2; v9(v8, &v14, 2, &a2, 1); v10 = v2[89]; v11 = *(void (__cdecl **)(int, char *, signed int, signed int *, signed int))(v10 + 8); a2 = 2; v11(v10, (char *)v3 + 178, 2, &a2, 1); v15 = 0; if ( *((_WORD *)v3 + 89) > 0u ) { a2 = 0; do { sub_860940((char *)&v3[45][a2], (signed int)v2); v12 = *((unsigned __int16 *)v3 + 89); a2 += 12; ++v15; } while ( v15 < v12 ); } return (*(int (__thiscall **)(_DWORD *, const char *))(*v2 + 44))(v2, v3[46]); } //----- (008AE750) -------------------------------------------------------- int __thiscall sub_8AE750(_DWORD *this, int a2, _BYTE *a3, int a4) { _DWORD *v4; // esi v4 = this; sub_940360(this + 36); return sub_85F9F0(v4, a2, a3, a4); } //----- (008AE780) -------------------------------------------------------- char __thiscall sub_8AE780(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v4; // eax int *v5; // esi int v6; // eax v2 = a2; v3 = this; LOBYTE(v4) = sub_8C4C90(this + 36, a2, &a2); if ( !(_BYTE)v4 ) { sub_815C70(v3 + 36, v2, 0); v5 = (int *)v3[2]; v6 = v5[2]; if ( v5[1] == v6 ) sub_85F230(v5, v6 + v5[3]); v4 = *v5; *(_DWORD *)(*v5 + 4 * v5[1]++) = v2; } return v4; } //----- (008AE7E0) -------------------------------------------------------- void **__thiscall sub_8AE7E0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiGeometry *,int>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B034: using guessed type void *NiTMapBase,NiGeometry *,int>::`vftable'; //----- (008AE820) -------------------------------------------------------- void __thiscall sub_8AE820(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // ecx v1 = this; *this = &NiFixtureCuller::`vftable'; v2 = this + 36; *v2 = &NiTMap::`vftable'; sub_940360(v2); v1[36] = &NiTMapBase,NiGeometry *,int>::`vftable'; sub_940360(v1 + 36); operator delete((void *)v1[38]); sub_85F7E0(v1); } // A2B034: using guessed type void *NiTMapBase,NiGeometry *,int>::`vftable'; // A2B054: using guessed type void *NiTMap::`vftable'; // A2B074: using guessed type void *NiFixtureCuller::`vftable'; //----- (008AE870) -------------------------------------------------------- void **__thiscall sub_8AE870(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiGeometry *,int>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B034: using guessed type void *NiTMapBase,NiGeometry *,int>::`vftable'; // A2B054: using guessed type void *NiTMap::`vftable'; //----- (008AE8B0) -------------------------------------------------------- _DWORD *__thiscall sub_8AE8B0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; sub_85F980(this, 0, 1); *v1 = &NiFixtureCuller::`vftable'; v1[37] = 37; v1[36] = &NiTMapBase,NiGeometry *,int>::`vftable'; v1[39] = 0; v2 = operator new(0x94u); v3 = 4 * v1[37]; v1[38] = v2; memset(v2, 0, v3); v1[36] = &NiTMap::`vftable'; return v1; } // A2B034: using guessed type void *NiTMapBase,NiGeometry *,int>::`vftable'; // A2B054: using guessed type void *NiTMap::`vftable'; // A2B074: using guessed type void *NiFixtureCuller::`vftable'; //----- (008AE930) -------------------------------------------------------- _DWORD *__thiscall sub_8AE930(void *this, char a2) { _DWORD *v2; // edi _DWORD *v3; // ecx v2 = this; *(_DWORD *)this = &NiFixtureCuller::`vftable'; v3 = (char *)this + 144; *v3 = &NiTMap::`vftable'; sub_940360(v3); v2[36] = &NiTMapBase,NiGeometry *,int>::`vftable'; sub_940360(v2 + 36); operator delete((void *)v2[38]); sub_85F7E0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B034: using guessed type void *NiTMapBase,NiGeometry *,int>::`vftable'; // A2B054: using guessed type void *NiTMap::`vftable'; // A2B074: using guessed type void *NiFixtureCuller::`vftable'; //----- (008AE9A0) -------------------------------------------------------- void __cdecl sub_8AE9A0(char *Src) { size_t *v1; // eax if ( Src && strlen(Src) ) { v1 = (size_t *)operator new(0x20u); if ( v1 ) dword_BA54AC = sub_8B1D80(v1, Src); else dword_BA54AC = 0; } } //----- (008AE9F0) -------------------------------------------------------- void sub_8AE9F0() { if ( dword_BA54AC ) { if ( sub_8B1F30((signed int *)dword_BA54AC, "full") ) { *(_BYTE *)(dword_BA54A0 + 76) = 1; *(_BYTE *)(dword_BA54A0 + 78) = 0; } if ( sub_8B1F30((signed int *)dword_BA54AC, "refrast") ) { *(_BYTE *)(dword_BA54A0 + 140) = 1; } else if ( sub_8B1F30((signed int *)dword_BA54AC, "swvertex") ) { *(_BYTE *)(dword_BA54A0 + 141) = 1; } if ( sub_8B1F30((signed int *)dword_BA54AC, "nvperf") ) *(_BYTE *)(dword_BA54A0 + 142) = 1; } } // BA54A0: using guessed type int dword_BA54A0; //----- (008AEA90) -------------------------------------------------------- char __thiscall sub_8AEA90(float *this) { float *v1; // esi float v2; // ST04_4 bool v3; // zf double v4; // st7 float v5; // ST04_4 double v6; // st6 double v7; // st5 char result; // al float v9; // ST04_4 float v10; // [esp+4h] [ebp-4h] v1 = this; if ( -1.0 == this[26] ) { this[26] = sub_8A9EF0(); v1[29] = 0.0; v1[27] = 0.0; } v2 = sub_8A9EF0(); v3 = *((_BYTE *)v1 + 142) == 0; v4 = v2; v1[25] = v2; v5 = v2 - v1[26]; v6 = v5; if ( v3 ) { v7 = 0.0; } else { v7 = 0.0; if ( 0.0 == v6 ) return 1; } if ( v7 > v6 ) { v9 = v7; v6 = v9; } v1[26] = v4; v10 = v6 + v1[27]; v1[27] = v10; if ( v1[33] + v1[34] > v10 ) return 0; result = 1; v1[28] = v10 - v1[34]; v1[34] = v1[27]; return result; } //----- (008AEB60) -------------------------------------------------------- int __thiscall sub_8AEB60(void *this) { void *v1; // esi int result; // eax v1 = this; do result = (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 100))(v1); while ( (_BYTE)result ); return result; } //----- (008AEB80) -------------------------------------------------------- int __userpurge sub_8AEB80@(int a1@, int a2@, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { int result; // eax int (__stdcall *v7)(HWND *, int, int, int); // eax char v8; // al int v9; // [esp-4h] [ebp-14h] HWND v10; // [esp+0h] [ebp-10h] UINT v11; // [esp+4h] [ebp-Ch] WPARAM v12; // [esp+8h] [ebp-8h] LPARAM v13; // [esp+Ch] [ebp-4h] if ( !dword_BA54A0 ) return DefWindowProcA(hWnd, Msg, wParam, lParam); if ( Msg == 2 ) { (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_BA54A0 + 60))(0, 0); PostQuitMessage(0); result = 0; } else { if ( Msg == 5 ) { v8 = (*(int (__stdcall **)(_DWORD, unsigned int, WPARAM, _DWORD, int, int, int))(*(_DWORD *)dword_BA54A0 + 56))( (unsigned __int16)lParam, (unsigned int)lParam >> 16, wParam, 0, a1, a2, v9); } else { v7 = *(int (__stdcall **)(HWND *, int, int, int))(*(_DWORD *)dword_BA54A0 + 64); v10 = hWnd; v11 = Msg; v12 = wParam; v13 = lParam; v8 = v7(&v10, a1, a2, v9); } if ( v8 ) result = 0; else result = DefWindowProcA(hWnd, Msg, wParam, lParam); } return result; } // 8AEB80: could not find valid save-restore pair for edi // 8AEB80: could not find valid save-restore pair for esi // BA54A0: using guessed type int dword_BA54A0; //----- (008AEC40) -------------------------------------------------------- int __thiscall sub_8AEC40(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = (*(int (**)(void))(*this + 92))(); if ( (_BYTE)result ) { (*(void (__thiscall **)(_DWORD *))(*v1 + 32))(v1); (*(void (__thiscall **)(_DWORD *))(*v1 + 36))(v1); (*(void (__thiscall **)(_DWORD *))(*v1 + 40))(v1); (*(void (__thiscall **)(_DWORD *))(*v1 + 48))(v1); result = (*(int (__thiscall **)(_DWORD *))(*v1 + 52))(v1); ++v1[29]; } return result; } //----- (008AEC80) -------------------------------------------------------- void __usercall sub_8AEC80(int a1@, int a2@) { int v2; // esi void *v3; // ecx v2 = a1; (*(void (**)(void))(*(_DWORD *)a1 + 20))(); (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 24))(v2); if ( *(_BYTE *)(v2 + 88) ) { v3 = *(void **)(v2 + 84); if ( v3 ) { sub_8AFFF0(v3); sub_8B0110(*(_DWORD *)(v2 + 84), a2); } } } //----- (008AECB0) -------------------------------------------------------- int __thiscall sub_8AECB0(_DWORD **this) { return (*(int (**)(void))(*this[4] + 84))(); } //----- (008AECC0) -------------------------------------------------------- int __thiscall sub_8AECC0(int this) { int v1; // esi bool v2; // zf double v3; // st7 int result; // eax int v5; // ecx char DstBuf; // [esp+10h] [ebp-24h] v1 = this; v2 = *(_DWORD *)(this + 96) == 1; --*(_DWORD *)(v1 + 96); if ( v2 ) { v3 = 0.0; if ( *(float *)(this + 108) > 0.0 ) { if ( *(float *)(this + 124) >= (double)*(float *)(this + 108) ) { LABEL_6: sub_7FF6E0(&DstBuf, 0x20u, "fps: %.1f", *(float *)(this + 120)); sub_8B2110(*(_DWORD *)(v1 + 68), 0, (LPARAM)&DstBuf); result = *(_DWORD *)(v1 + 92); *(float *)(v1 + 124) = *(float *)(v1 + 108); v5 = *(_DWORD *)(v1 + 116); *(_DWORD *)(v1 + 96) = result; *(_DWORD *)(v1 + 128) = v5; return result; } v3 = (double)(*(_DWORD *)(this + 116) - *(_DWORD *)(this + 128)) / (*(float *)(this + 108) - *(float *)(this + 124)); } *(float *)(this + 120) = v3; goto LABEL_6; } return result; } //----- (008AED60) -------------------------------------------------------- char __thiscall sub_8AED60(_DWORD ***this) { _DWORD ***v1; // esi v1 = this; if ( !((unsigned __int8 (*)(void))(*this)[18])() || !((unsigned __int8 (__thiscall *)(_DWORD ***))(*v1)[19])(v1) || !((unsigned __int8 (__thiscall *)(_DWORD ***))(*v1)[20])(v1) || !((unsigned __int8 (__thiscall *)(_DWORD ***))(*v1)[17])(v1) ) { return 0; } sub_85BED0(v1[1], 0.0, 1); sub_85C4D0(v1[1]); sub_85C6F0(v1[1]); sub_85BED0(v1[2], 0.0, 1); return 1; } //----- (008AEDD0) -------------------------------------------------------- void __thiscall sub_8AEDD0(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax v1 = this; v2 = (int *)this[4]; if ( v2 ) { v3 = *v2; if ( v2[4] == 1 ) { if ( (*(int (**)(void))(v3 + 36))() == -2147483642 ) (*(void (**)(void))(*(_DWORD *)v1[4] + 68))(); } else if ( (*(int (**)(void))(v3 + 32))() == -2147483642 ) { (*(void (**)(void))(*(_DWORD *)v1[4] + 68))(); } } } //----- (008AEE20) -------------------------------------------------------- BOOL __thiscall sub_8AEE20(_DWORD *this) { return PostMessageA(*(HWND *)(this[17] + 4), 2u, 0, 0); } //----- (008AEE40) -------------------------------------------------------- char sub_8AEE40() { struct tagMSG Msg; // [esp+0h] [ebp-1Ch] if ( PeekMessageA(&Msg, 0, 0, 0, 1u) ) { if ( Msg.message == 18 ) return 0; if ( !TranslateAcceleratorA(*(HWND *)(*(_DWORD *)(dword_BA54A0 + 68) + 4), hAccTable, &Msg) ) { TranslateMessage(&Msg); DispatchMessageA(&Msg); return 1; } } else { (*(void (**)(void))(*(_DWORD *)dword_BA54A0 + 28))(); } return 1; } // BA54A0: using guessed type int dword_BA54A0; //----- (008AEEC0) -------------------------------------------------------- void *sub_8AEEC0() { return &unk_BA54D4; } //----- (008AEED0) -------------------------------------------------------- _DWORD *__thiscall sub_8AEED0(_DWORD *this) { _DWORD *result; // eax result = this; this[1] = 0; this[2] = 0; this[5] = -100; this[6] = 100; this[3] = 8; this[4] = 8; this[7] = 0; *this = &NiDI8InputSystem::DI8CreateParams::`vftable'; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; this[15] = 0; this[16] = 0; this[17] = 0; this[18] = 0; this[19] = 0; this[20] = 0; this[21] = 0; this[22] = 0; this[23] = 0; this[24] = 0; this[25] = 0; this[26] = 0; this[27] = 0; this[28] = 0; this[29] = 0; this[30] = 0; return result; } // A2B0BC: using guessed type void *NiDI8InputSystem::DI8CreateParams::`vftable'; //----- (008AEF50) -------------------------------------------------------- void *sub_8AEF50() { return &unk_BA54F4; } //----- (008AEF60) -------------------------------------------------------- char *__thiscall sub_8AEF60(void *this, char a2) { char *v2; // edi char *v3; // eax int v4; // ebx char *v5; // edi int v6; // ebx int v7; // esi char *result; // eax int v9; // esi char *v10; // [esp+8h] [ebp-4h] v2 = (char *)this; if ( a2 & 2 ) { v3 = (char *)this - 4; v4 = *((_DWORD *)this - 1); v5 = (char *)this + 4 * v4; v6 = v4 - 1; v10 = (char *)this - 4; if ( v6 >= 0 ) { do { v7 = *((_DWORD *)v5 - 1); v5 -= 4; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); --v6; } while ( v6 >= 0 ); v3 = v10; } if ( a2 & 1 ) operator delete(v3); result = v10; } else { v9 = *(_DWORD *)this; if ( *(_DWORD *)this && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (008AF010) -------------------------------------------------------- char __thiscall sub_8AF010(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax _DWORD *v3; // edi int v4; // esi v1 = this; v2 = operator new(0xE8u); if ( v2 ) v3 = sub_85A1C0(v2, 0); else v3 = 0; v4 = v1[1]; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[1] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } return 1; } //----- (008AF080) -------------------------------------------------------- char __thiscall sub_8AF080(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax int v3; // ebx int v4; // esi double v5; // st7 float v6; // ST10_4 float v7; // ST0C_4 float v8; // ST04_4 int v9; // ecx float *v10; // eax float v11; // ecx float v12; // edx float v13; // ecx char v15; // [esp+2Ch] [ebp-30h] float v16; // [esp+48h] [ebp-14h] float v17; // [esp+4Ch] [ebp-10h] float v18; // [esp+50h] [ebp-Ch] float v19; // [esp+54h] [ebp-8h] float v20; // [esp+58h] [ebp-4h] v1 = this; v2 = operator new(0x128u); if ( v2 ) v3 = sub_862BA0(v2); else v3 = 0; v4 = v1[2]; if ( v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[2] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } v20 = flt_BA45B4 / 180.0 * 20.0; v20 = v20 * 0.5; v20 = tan(v20); v5 = v20; v20 = 1.333333373069763 * v20; v6 = -v5; v7 = v5; v8 = -v20; sub_86B1E0(&v15, v8, v20, v7, v6, 1.0, 1000.0, 0); v16 = 0.0; v9 = v1[2]; v17 = 1.0; v18 = 1.0; v19 = 0.0; sub_861DD0(v9, (int)&v15); v10 = (float *)v1[2]; v11 = v17; v10[69] = v16; v12 = v18; v10[70] = v11; v13 = v19; v10[71] = v12; v10[72] = v13; return 1; } // BA45B4: using guessed type float flt_BA45B4; //----- (008AF1B0) -------------------------------------------------------- char __thiscall sub_8AF1B0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // edi int *v4; // ebx int v5; // ebx void (__thiscall ***v6)(_DWORD, signed int); // edi int v7; // esi char result; // al float v9; // [esp+Ch] [ebp-214h] float v10; // [esp+10h] [ebp-210h] float v11; // [esp+14h] [ebp-20Ch] int v12; // [esp+18h] [ebp-208h] char Dst; // [esp+1Ch] [ebp-204h] v1 = this; v2 = (int *)sub_8B17F0( (int)&v12, *(HWND *)(this[17] + 4), *(_DWORD *)(this[17] + 8), *((_BYTE *)v1 + 78), v1[20], *(_DWORD *)(this[17] + 20), *(_DWORD *)(this[17] + 28), *((_BYTE *)v1 + 77), *((_BYTE *)v1 + 79), *((_BYTE *)v1 + 140), *((_BYTE *)v1 + 141), (int)v1 + 142, (int)(v1 + 19)); v3 = v1[3]; v4 = v2; if ( v3 != *v2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v5 = *v4; v1[3] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = (void (__thiscall ***)(_DWORD, signed int))v12; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v6 ) (**v6)(v6, 1); v7 = v1[3]; if ( v7 ) { v9 = 0.5; v10 = 0.5; v11 = 0.5; (*(void (__thiscall **)(int, float *))(*(_DWORD *)v7 + 80))(v7, &v9); result = 1; } else { strcpy_s(&Dst, 0x200u, "DX9 Renderer Creation Failed"); result = 0; } return result; } //----- (008AF2F0) -------------------------------------------------------- char __thiscall sub_8AF2F0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax void **v3; // eax int v4; // edi void **v5; // ebx int v6; // ecx int v8; // eax int v9; // [esp+Ch] [ebp-4h] v1 = this; v2 = (*(int (**)(void))(*this + 84))(); v9 = v2; v3 = sub_8B57B0(v2); v4 = v1[4]; v5 = v3; if ( (void **)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[4] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)v5 + 1); } if ( v9 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v9 + 4))(1); v6 = v1[4]; if ( v6 ) { v8 = (*(int (**)(void))(*(_DWORD *)v6 + 80))(); if ( v8 != -2147483600 && v8 != -2147483598 ) { if ( (*(int (**)(void))(*(_DWORD *)v1[4] + 24))() && (*(int (**)(void))(*(_DWORD *)v1[4] + 28))() ) { (*(void (__thiscall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v1[4] + 20))(v1[4], 0, 0); return 1; } if ( off_AC0554 ) off_AC0554("CreateInputSystem: Mouse or keyboard failed to open.", "NiApplication Error", 0); } } else if ( off_AC0554 ) { off_AC0554("CreateInputSystem: Creation failed.", "NiApplication Error", v1[4]); return 0; } return 0; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (008AF3F0) -------------------------------------------------------- _DWORD *__thiscall sub_8AF3F0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi int v4; // ebx int v5; // edi _BYTE *v7; // [esp+Ch] [ebp-4h] v1 = this; v7 = this; v2 = operator new(0x7Cu); if ( v2 ) v3 = sub_8AEED0(v2); else v3 = 0; v4 = v1[3]; v5 = v3[7]; if ( v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v3[7] = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); } v3[2] = -1879048192; v3[3] = v7[143] != 0 ? 1342177280 : -1879048192; v3[4] = 2; v3[5] = -100; v3[6] = 100; v3[8] = hInstance; v3[9] = *(_DWORD *)(*((_DWORD *)v7 + 17) + 4); return v3; } //----- (008AF4B0) -------------------------------------------------------- char __thiscall sub_8AF4B0(_DWORD *this) { _DWORD *v1; // ebx _BYTE *v2; // eax unsigned int v3; // edi _DWORD *v4; // esi unsigned int v6; // [esp+Ch] [ebp-4h] v1 = this; v2 = *(_BYTE **)(this[4] + 64); if ( v2 ) { if ( v2[35] & 1 && !(v2[67] & 1) || v2[33] & 2 && !(v2[65] & 2) ) { LOBYTE(v2) = PostMessageA(*(HWND *)(this[17] + 4), 2u, 0, 0); } else if ( v2[34] < 0 && !(v2[66] & 0x80) ) { LOBYTE(v2) = (*(int (__thiscall **)(_DWORD *))(*this + 88))(this); } } v6 = 0; v3 = 72; do { if ( v6 < 8 ) { v2 = (_BYTE *)v1[4]; v4 = *(_DWORD **)&v2[v3]; if ( v4 ) { LOBYTE(v2) = sub_8B5A80(v4, 0xEu); if ( (_BYTE)v2 ) { LOBYTE(v2) = sub_8B5A80(v4, 0xFu); if ( (_BYTE)v2 ) LOBYTE(v2) = PostMessageA(*(HWND *)(v1[17] + 4), 2u, 0, 0); } } } ++v6; v3 += 4; } while ( v3 < 0x68 ); return (char)v2; } //----- (008AF560) -------------------------------------------------------- char __thiscall sub_8AF560(_DWORD *this, int a2, int a3, WPARAM wParam, int a5) { _DWORD *v5; // edi int v6; // edx WPARAM v7; // esi HWND *v8; // edx _DWORD *v9; // ebx unsigned int v10; // ecx int v11; // eax int v12; // eax int v13; // esi int v14; // ebx HWND *v15; // eax HWND v16; // eax int v17; // eax HWND *v18; // eax HWND v19; // eax HWND v21; // [esp+Ch] [ebp-3Ch] HWND hWnd; // [esp+10h] [ebp-38h] struct tagRECT v23; // [esp+14h] [ebp-34h] struct tagRECT v24; // [esp+24h] [ebp-24h] struct tagRECT Rect; // [esp+34h] [ebp-14h] v5 = this; *(_DWORD *)(this[17] + 24) = a2; *(_DWORD *)(this[17] + 32) = a3; v6 = this[17]; v7 = *(_DWORD *)(v6 + 36); if ( v7 && *(_BYTE *)(v6 + 40) ) { if ( *(_DWORD *)(v6 + 36) && (v8 = *(HWND **)(v6 + 12)) != 0 ) { hWnd = *v8; SendMessageA(*v8, 5u, wParam, (unsigned __int16)a2 | ((unsigned __int16)a3 << 16)); } else { hWnd = 0; SendMessageA(0, 5u, wParam, (unsigned __int16)a2 | ((unsigned __int16)a3 << 16)); } GetClientRect(*(HWND *)(v5[17] + 4), &Rect); v9 = operator new(4 * v7); v10 = 0; if ( v7 != 1 ) { do { v9[v10] = Rect.right * (v10 + 1) / v7; ++v10; } while ( v10 < v7 - 1 ); } v9[v7 - 1] = Rect.right; SendMessageA(hWnd, 0x404u, v7, (LPARAM)v9); SendMessageA(hWnd, 0xFu, 0, 0); operator delete(v9); } v11 = v5[17]; v21 = *(HWND *)(v11 + 8); if ( v21 ) { GetClientRect(*(HWND *)(v11 + 4), &v24); v12 = v5[17]; v13 = v24.right - v24.left; v14 = v24.bottom - v24.top; if ( *(_BYTE *)(v12 + 40) ) { if ( *(_DWORD *)(v12 + 36) && (v15 = *(HWND **)(v12 + 12)) != 0 ) v16 = *v15; else v16 = 0; GetWindowRect(v16, &v23); v14 += v23.top - v23.bottom; } MoveWindow(v21, 0, 0, v13, v14, 0); v17 = v5[17]; if ( *(_BYTE *)(v17 + 40) ) { if ( *(_DWORD *)(v17 + 36) && (v18 = *(HWND **)(v17 + 12)) != 0 ) v19 = *v18; else v19 = 0; SendMessageA(v19, 0xFu, 0, 0); } GetWindowRect(v21, &Rect); *(_DWORD *)(v5[17] + 20) = Rect.right - Rect.left; *(_DWORD *)(v5[17] + 28) = Rect.bottom - Rect.top; } return 1; } //----- (008AF730) -------------------------------------------------------- void __thiscall sub_8AF730(_DWORD *this) { _DWORD *v1; // esi v1 = (_DWORD *)this[3]; if ( !v1[29] && !v1[30] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v1 + 264))(this[3]) ) v1[29] = 1; } } //----- (008AF760) -------------------------------------------------------- char __thiscall sub_8AF760(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // eax v1 = this; v2 = this[3]; if ( (*(_DWORD *)(v2 + 116) == 1 || *(_DWORD *)(v2 + 120) == 1) && !*(_BYTE *)(v2 + 128) ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 104))(v2); sub_44ED20(v2, v3, 7); } sub_85FB50((float *)v1[2], v1[1], v1 + 40, 0); (*(void (__thiscall **)(_DWORD *))(*v1 + 44))(v1); return sub_44EDF0((_DWORD *)v1[3]); } //----- (008AF7C0) -------------------------------------------------------- int __thiscall sub_8AF7C0(int *this) { int *v1; // esi int v2; // ecx int result; // eax unsigned int v4; // ebx unsigned int v5; // edi void *v6; // ecx int v7; // ST00_4 unsigned int v8; // ebx unsigned int v9; // edi void *v10; // ecx v1 = this; v2 = this[3]; result = 1; if ( (*(_DWORD *)(v2 + 116) == 1 || *(_DWORD *)(v2 + 120) == 1) && *(_BYTE *)(v2 + 128) == 1 ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 284))(0); v4 = v1[8]; v5 = 0; if ( v4 ) { do { result = v1[6]; v6 = *(void **)(result + 4 * v5); if ( v6 ) { v7 = v1[3]; result = sub_868B60(v6); } ++v5; } while ( v5 < v4 ); } v8 = v1[14]; v9 = 0; if ( v8 ) { do { result = v1[12]; v10 = *(void **)(result + 4 * v9); if ( v10 ) result = sub_885CF0(v10, v1[3]); ++v9; } while ( v9 < v8 ); } return result; } //----- (008AF840) -------------------------------------------------------- void __thiscall sub_8AF840(_DWORD *this) { _DWORD *v1; // esi v1 = (_DWORD *)this[3]; if ( v1[29] == 1 && !v1[30] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v1 + 268))(this[3]) ) v1[29] = 2; } } //----- (008AF870) -------------------------------------------------------- void __thiscall sub_8AF870(_DWORD *this) { _DWORD *v1; // esi v1 = (_DWORD *)this[3]; if ( v1[29] == 2 && !v1[30] ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD))(*v1 + 272))(this[3]) ) { ++v1[31]; v1[29] = 0; } } } //----- (008AF8A0) -------------------------------------------------------- signed int __thiscall sub_8AF8A0(_DWORD *this, int *a2) { int v2; // edx _DWORD *v3; // edi unsigned int v4; // esi _DWORD *v5; // ecx _DWORD *v6; // eax int v8; // ebx int v9; // eax int v10; // eax _DWORD *v11; // [esp+10h] [ebp+8h] v2 = *a2; v3 = this; if ( !*a2 ) return -1; v4 = 0; if ( !this[3] ) return -1; v5 = (_DWORD *)this[1]; v11 = v5; v6 = v5; while ( *v6 != v2 ) { ++v4; ++v6; if ( v4 >= v3[3] ) return -1; } v8 = v5[v4]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v11[v4] = 0; } v9 = v3[3]; --v3[4]; v10 = v9 - 1; if ( v4 == v10 ) v3[3] = v10; return v4; } //----- (008AF920) -------------------------------------------------------- void *__thiscall sub_8AF920(void *this, char a2) { void *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &NiInputSystem::CreateParams::`vftable'; v3 = *((_DWORD *)this + 7); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B0B0: using guessed type void *NiInputSystem::CreateParams::`vftable'; //----- (008AF970) -------------------------------------------------------- void __thiscall sub_8AF970(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A2B164: using guessed type void *NiTArray>::`vftable'; //----- (008AF9D0) -------------------------------------------------------- void *__thiscall sub_8AF9D0(void *this, char a2) { void *v2; // esi v2 = this; sub_8AF970(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008AFA00) -------------------------------------------------------- void __thiscall sub_8AFA00(_DWORD *this) { _DWORD *v1; // esi char *v2; // eax char *v3; // eax void *v4; // edi void *v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // esi v1 = this; *this = &NiApplication::`vftable'; v2 = (char *)operator new(0x404u); if ( v2 ) v3 = sub_8667D0(v2); else v3 = 0; sub_866BA0((int)v3); v4 = dword_BA54AC; if ( dword_BA54AC ) { sub_8B1C90((void **)dword_BA54AC); operator delete(v4); } v5 = (void *)v1[17]; if ( v5 ) { sub_8B2380(v1[17]); operator delete(v5); } dword_BA54A0 = 0; dword_BA54AC = 0; sub_85F7E0(v1 + 40); operator delete((void *)v1[36]); sub_8823D0(v1 + 11); sub_8AF970(v1 + 5); v6 = v1[4]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[3]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[2]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[1]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) { if ( v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); } } // A2B16C: using guessed type void *NiApplication::`vftable'; // BA54A0: using guessed type int dword_BA54A0; //----- (008AFB20) -------------------------------------------------------- int __thiscall sub_8AFB20(_DWORD *this) { _DWORD *v1; // esi void **v2; // ecx void *v3; // edi int result; // eax int v5; // edi int v6; // edi int v7; // edi int v8; // edi v1 = this; v2 = (void **)this[21]; if ( v2 ) { sub_8B02F0(v2); v3 = (void *)v1[21]; if ( v3 ) { sub_8B0340((void **)v1[21]); operator delete(v3); } v1[21] = 0; } sub_80C6B0(v1 + 5); result = sub_80C6B0(v1 + 11); v5 = v1[4]; if ( v5 ) { result = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result && v5 ) result = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); v1[4] = 0; } v6 = v1[1]; if ( v6 ) { result = InterlockedDecrement((volatile LONG *)(v6 + 4)); if ( !result && v6 ) result = (**(int (__thiscall ***)(int, signed int))v6)(v6, 1); v1[1] = 0; } v7 = v1[2]; if ( v7 ) { result = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result && v7 ) result = (**(int (__thiscall ***)(int, signed int))v7)(v7, 1); v1[2] = 0; } v8 = v1[3]; if ( v8 ) { result = InterlockedDecrement((volatile LONG *)(v8 + 4)); if ( !result ) { if ( v8 ) result = (**(int (__thiscall ***)(int, signed int))v8)(v8, 1); } v1[3] = 0; } return result; } //----- (008AFC00) -------------------------------------------------------- _DWORD *__thiscall sub_8AFC00(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // ecx unsigned int *v5; // eax void *v6; // edx _DWORD *result; // eax v3 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( a2 ) { v4 = 4 * a2 | -((unsigned __int64)a2 >> 30 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = v5 + 1; if ( (signed int)(a2 - 1) >= 0 ) { memset(v6, 0, 4 * a2); v3[1] = v6; return v3; } } else { v6 = 0; } v3[1] = v6; result = v3; } else { this[1] = 0; result = this; } return result; } // A2B164: using guessed type void *NiTArray>::`vftable'; //----- (008AFC90) -------------------------------------------------------- unsigned int __thiscall sub_8AFC90(_DWORD *this, unsigned int a2, LONG *a3) { _DWORD *v3; // esi v3 = this; if ( a2 >= this[2] ) sub_81A750(this, a2 + this[5]); sub_7FFF10(v3, a2, a3); return a2; } //----- (008AFCC0) -------------------------------------------------------- int __thiscall sub_8AFCC0(_DWORD *this, const char *a2, int a3, int a4, int a5, int a6, int a7) { int v7; // esi _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // ecx _DWORD *v13; // eax _DWORD *v14; // eax char *v15; // eax char *v16; // eax struct _OSVERSIONINFOA VersionInformation; // [esp+1Ch] [ebp-98h] v7 = (int)this; *this = &NiApplication::`vftable'; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = &NiTArray>::`vftable'; this[7] = 4; this[10] = 4; this[8] = 0; this[9] = 0; v8 = operator new(0x14u); if ( v8 ) { *v8 = 4; v9 = v8 + 1; *v9 = 0; v9[1] = 0; v9[2] = 0; v9[3] = 0; } else { v9 = 0; } *(_DWORD *)(v7 + 24) = v9; *(_DWORD *)(v7 + 44) = &NiTArray>::`vftable'; *(_DWORD *)(v7 + 52) = 4; *(_DWORD *)(v7 + 64) = 4; *(_DWORD *)(v7 + 56) = 0; *(_DWORD *)(v7 + 60) = 0; v10 = operator new(0x14u); if ( v10 ) { *v10 = 4; v11 = v10 + 1; *v11 = 0; v11[1] = 0; v11[2] = 0; v11[3] = 0; } else { v11 = 0; } *(_DWORD *)(v7 + 48) = v11; v12 = (_DWORD *)(v7 + 144); *v12 = 0; v12[1] = 0; v12[2] = 0; v12[3] = 1024; sub_85F230((_DWORD *)(v7 + 144), 0x400u); sub_85F910((_DWORD *)(v7 + 160), v7 + 144); v13 = operator new(0x30u); if ( v13 ) v14 = sub_8B1F50(v13, a2, a3, a4, a6, 13238272); else v14 = 0; *(_DWORD *)(v7 + 68) = v14; *(float *)(v7 + 104) = -1.0; *(_DWORD *)(v7 + 72) = a5; *(float *)(v7 + 108) = 0.0; *(float *)(v7 + 100) = 0.0; *(float *)(v7 + 112) = 0.0; *(float *)(v7 + 120) = 0.0; *(float *)(v7 + 124) = 0.0; *(_DWORD *)(v7 + 80) = a7; *(float *)(v7 + 132) = 0.0099999998; *(_DWORD *)(v7 + 116) = 0; *(_DWORD *)(v7 + 96) = 1; *(_DWORD *)(v7 + 92) = 30; *(float *)(v7 + 136) = 0.0; *(_DWORD *)(v7 + 128) = 0; *(_BYTE *)(v7 + 76) = a7 != 0; *(_WORD *)(v7 + 77) = 256; *(_BYTE *)(v7 + 79) = 0; *(_DWORD *)(v7 + 84) = 0; *(_BYTE *)(v7 + 88) = 0; VersionInformation.dwOSVersionInfoSize = 148; GetVersionExA(&VersionInformation); v15 = (char *)operator new(0x624u); if ( v15 ) v16 = sub_956540(v15); else v16 = 0; sub_866BA0((int)v16); dword_BA54A0 = v7; byte_BA4880 = 1; *(_DWORD *)(v7 + 140) = 0; return v7; } // A26CF4: using guessed type void *NiTArray>::`vftable'; // A2B164: using guessed type void *NiTArray>::`vftable'; // A2B16C: using guessed type void *NiApplication::`vftable'; // BA4880: using guessed type char byte_BA4880; // BA54A0: using guessed type int dword_BA54A0; //----- (008AFEF0) -------------------------------------------------------- void *__thiscall sub_8AFEF0(void *this, char a2) { void *v2; // esi v2 = this; sub_8AFA00(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008AFF20) -------------------------------------------------------- int *__thiscall sub_8AFF20(int this, char a2) { int v2; // edi int *result; // eax int v4; // ebx _DWORD *v5; // esi unsigned int v6; // edi int v7; // esi int v8; // [esp+4h] [ebp-8h] int v9; // [esp+8h] [ebp-4h] v2 = this; result = *(int **)(this + 84); v9 = this; if ( result ) { if ( *(_BYTE *)(this + 88) != a2 ) { if ( a2 ) { v4 = *result; v8 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v5 = (_DWORD *)(v2 + 20); v6 = *(_DWORD *)(v2 + 32); if ( v6 >= v5[2] ) sub_81A750(v5, v6 + v5[5]); result = (int *)sub_7FFF10(v5, v6, &v8); if ( v4 ) { result = (int *)InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result ) result = (int *)(**(int (__thiscall ***)(int, signed int))v4)(v4, 1); } v2 = v9; } else { v7 = *result; v8 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); result = (int *)sub_8AF8A0((_DWORD *)(v2 + 20), &v8); if ( v7 ) { result = (int *)InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !result ) { result = (int *)(**(int (__thiscall ***)(int, signed int))v7)(v7, 1); *(_BYTE *)(v2 + 88) = 0; return result; } } } } *(_BYTE *)(v2 + 88) = a2; } return result; } //----- (008AFFF0) -------------------------------------------------------- void __thiscall sub_8AFFF0(void *this) { void *v1; // esi double v2; // st7 int v3; // eax unsigned int v4; // edx double v5; // st7 int v6; // ecx unsigned int v7; // esi unsigned int v8; // eax float v9; // [esp+8h] [ebp-8h] float v10; // [esp+Ch] [ebp-4h] v1 = this; v10 = sub_8A9EF0(); v2 = v10; if ( *((_BYTE *)v1 + 40) ) { *((float *)v1 + 11) = v10; *((_BYTE *)v1 + 40) = 0; *((float *)v1 + 12) = v10; } else { v3 = *((_DWORD *)v1 + 33); ++*((_DWORD *)v1 + 7); *((float *)v1 + v3 + 13) = v10; v4 = (*((_DWORD *)v1 + 33) + 1) % 0x14u; *((_DWORD *)v1 + 33) = v4; if ( *((_DWORD *)v1 + 7) >= 0x14u ) *((_DWORD *)v1 + 5) = (signed __int64)(19.0 / (v2 - *((float *)v1 + v4 + 13)) + 0.5); v9 = v2 - *((float *)v1 + 12); *((float *)v1 + 8) = *((float *)v1 + 8) + v9; *((float *)v1 + 9) = v9 * v9 + *((float *)v1 + 9); v5 = v9; *((float *)v1 + 12) = v10; if ( *((float *)v1 + 34) > (double)v9 ) *((float *)v1 + 34) = v9; if ( *((float *)v1 + 35) < v5 ) *((float *)v1 + 35) = v9; v6 = *((_DWORD *)v1 + 37); if ( v6 ) { v7 = *((_DWORD *)v1 + 36); v8 = (signed __int64)(1.0 / v5); if ( v8 >= v7 ) v8 = v7 - 1; ++*(_DWORD *)(v6 + 4 * v8); } } } //----- (008B0110) -------------------------------------------------------- void __usercall sub_8B0110(int a1@, int a2@) { _DWORD ***v2; // esi unsigned int v3; // edi signed int v4; // ecx unsigned int v5; // ebx signed int *v6; // edi unsigned int v7; // eax double v8; // st7 signed int v9; // edx float *v10; // eax signed int v11; // edx float *v12; // eax signed int v13; // edx float *v14; // eax signed int v15; // edx float *v16; // eax int v17; // edi int (__thiscall *v18)(int, _DWORD); // eax float *v19; // eax double v20; // st7 int v21; // [esp+10h] [ebp-4Ch] float v22; // [esp+1Ch] [ebp-40h] float v23; // [esp+20h] [ebp-3Ch] float v24; // [esp+24h] [ebp-38h] float v25; // [esp+28h] [ebp-34h] float v26; // [esp+2Ch] [ebp-30h] float v27; // [esp+30h] [ebp-2Ch] float v28; // [esp+34h] [ebp-28h] float v29; // [esp+38h] [ebp-24h] float v30; // [esp+3Ch] [ebp-20h] float v31; // [esp+40h] [ebp-1Ch] float v32; // [esp+44h] [ebp-18h] char v33; // [esp+4Bh] [ebp-11h] int v34[3]; // [esp+4Ch] [ebp-10h] v2 = (_DWORD ***)a1; if ( *(_BYTE *)(a1 + 16) ) { v3 = *(_DWORD *)(a1 + 20); if ( *(_DWORD *)(a1 + 24) != v3 ) { *(_DWORD *)(a1 + 24) = v3; v4 = 3; do { v34[--v4] = v3 % 0xA; v3 /= 0xAu; } while ( v4 ); v21 = a2; v33 = 0; v5 = 0; v6 = (signed int *)(v2 + 1); do { v7 = v34[v5]; if ( v7 || v33 ) v33 = 1; else v7 = 10; v32 = *(float *)&v7; v8 = (double)v7; v9 = *v6; v10 = (float *)*v2; v32 = v8 * *((float *)v2 + 40); v31 = *((float *)v2 + 40) + v32; v26 = 0.0; v27 = v32; sub_868090(*((_DWORD *)v10 + 46), v9, 0, 0, &v26); v11 = *v6; v24 = 0.0; v12 = (float *)*v2; v25 = v31; sub_868090(*((_DWORD *)v12 + 46), v11, 1, 0, &v24); v13 = *v6; v22 = 1.0; v14 = (float *)*v2; v23 = v31; sub_868090(*((_DWORD *)v14 + 46), v13, 2, 0, &v22); v15 = *v6; v29 = 1.0; v16 = (float *)*v2; v30 = v32; sub_868090(*((_DWORD *)v16 + 46), v15, 3, 0, &v29); ++v5; ++v6; } while ( v5 < 3 ); v17 = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA46D0 + 108))(v21); v32 = COERCE_FLOAT((*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 60))(v17, 0)); v18 = *(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v17 + 64); v32 = 1.0 / (double)LODWORD(v32); v31 = COERCE_FLOAT(v18(v17, 0)); v19 = (float *)*v2; v31 = 1.0 / (double)LODWORD(v31); v28 = *((float *)v2 + 38) * v32; v20 = *((float *)v2 + 39); v19[22] = v28; v29 = v20 * v31; v19[23] = v29; v30 = 0.0; v19[24] = 0.0; sub_85BED0(*v2, 0.0, 1); } } } // 8B0110: could not find valid save-restore pair for ebx // BA46D0: using guessed type int dword_BA46D0; // 8B0110: using guessed type int var_10[3]; //----- (008B02F0) -------------------------------------------------------- void __thiscall sub_8B02F0(void **this) { void **v1; // edi volatile LONG *v2; // esi v1 = this; if ( *((_BYTE *)this + 16) ) { v2 = (volatile LONG *)*this; if ( *this ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); *v1 = 0; } } operator delete(v1[37]); } //----- (008B0340) -------------------------------------------------------- void __thiscall sub_8B0340(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi volatile LONG *v4; // esi v1 = this; if ( *((_BYTE *)this + 16) ) { v2 = (volatile LONG *)*this; if ( *this ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); *v1 = 0; } } operator delete(v1[37]); v3 = (volatile LONG *)v1[42]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v4 = (volatile LONG *)*v1; if ( v4 && !InterlockedDecrement(v4 + 1) ) { if ( v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); } } //----- (008B03D0) -------------------------------------------------------- bool __cdecl sub_8B03D0(HWND hDlg) { LRESULT v1; // eax LRESULT v2; // eax bool v3; // zf bool result; // al v1 = SendDlgItemMessageA(hDlg, 1000, 0x147u, 0, 0); if ( v1 < 0 ) { result = 1; dword_BA54B0 = 0; } else { v2 = SendDlgItemMessageA(hDlg, 1000, 0x150u, v1, 0); v3 = v2 == dword_BA54B8; dword_BA54B8 = v2; dword_BA54B0 = *(_DWORD *)(*(_DWORD *)(v2 + 1128) + 4) != 0 ? *(_DWORD *)(v2 + 1128) : 0; result = !v3; } return result; } // BA54B0: using guessed type int dword_BA54B0; // BA54B8: using guessed type int dword_BA54B8; //----- (008B0450) -------------------------------------------------------- char __cdecl sub_8B0450(HWND hDlg) { LRESULT v1; // eax LRESULT v2; // eax bool v3; // cl char result; // al v1 = SendDlgItemMessageA(hDlg, 1002, 0x147u, 0, 0); if ( v1 < 0 ) { result = 1; dword_BA54B4 = 0; } else { v2 = SendDlgItemMessageA(hDlg, 1002, 0x150u, v1, 0); v3 = v2 != dword_BA54B4; dword_BA54B4 = v2; result = v3; } return result; } // BA54B4: using guessed type int dword_BA54B4; //----- (008B04B0) -------------------------------------------------------- char __cdecl sub_8B04B0(HWND hDlg) { LRESULT v1; // eax LRESULT v2; // eax bool v3; // cl char result; // al v1 = SendDlgItemMessageA(hDlg, 1004, 0x147u, 0, 0); if ( v1 < 0 ) { result = 1; dword_BA54C4 = 0; } else { v2 = SendDlgItemMessageA(hDlg, 1004, 0x150u, v1, 0); v3 = v2 != dword_BA54C4; dword_BA54C4 = v2; result = v3; } return result; } // BA54C4: using guessed type int dword_BA54C4; //----- (008B0510) -------------------------------------------------------- char *sub_8B0510() { char *v0; // eax char *v1; // ebx WCHAR *v3; // ebx int v4; // eax WCHAR *v5; // ebx WCHAR *v6; // ebx int v7; // eax unsigned int v8; // eax WCHAR *v9; // ebx int v10; // eax WCHAR *v11; // ebx int v12; // eax unsigned int v13; // eax WCHAR *v14; // ebx int v15; // eax WCHAR *v16; // ebx int v17; // eax unsigned int v18; // eax WCHAR *v19; // ebx int v20; // eax WCHAR *v21; // ebx int v22; // eax unsigned int v23; // eax WCHAR *v24; // ebx int v25; // eax WCHAR *v26; // ebx int v27; // eax unsigned int v28; // eax WCHAR *v29; // ebx int v30; // eax WCHAR *v31; // ebx int v32; // eax unsigned int v33; // eax WCHAR *v34; // ebx int v35; // eax WCHAR *v36; // ebx int v37; // eax unsigned int v38; // eax WCHAR *v39; // ebx int v40; // eax WCHAR *v41; // ebx int v42; // eax unsigned int v43; // eax WCHAR *v44; // ebx int v45; // eax WCHAR *v46; // ebx int v47; // eax unsigned int v48; // eax WCHAR *v49; // ebx int v50; // eax WCHAR *v51; // ebx int v52; // eax unsigned int v53; // eax WCHAR *v54; // ebx int v55; // eax WCHAR *v56; // ebx int v57; // eax unsigned int v58; // eax int v59; // ebx int v60; // eax char *v61; // [esp+8h] [ebp-8h] WCHAR *lpWideCharStr; // [esp+Ch] [ebp-4h] v0 = (char *)operator new(0x384u); v1 = v0; v61 = v0; if ( !v0 ) return 0; memset(v0, 0, 0x384u); *(_DWORD *)v1 = -1865937980; *((_DWORD *)v1 + 1) = 0; *((_DWORD *)v1 + 2) = 11; *((_DWORD *)v1 + 3) = 13107200; *((_WORD *)v1 + 8) = 140; *(_DWORD *)(v1 + 18) = 0; v3 = (WCHAR *)(v1 + 22); v4 = lstrlenA("Select Desired DirectX9 Device"); if ( v4 ) v4 = MultiByteToWideChar(0, 0, "Select Desired DirectX9 Device", v4, v3, v4); v3[v4] = 0; v5 = &v3[v4 + 1]; *v5 = 8; v6 = v5 + 1; v7 = lstrlenA("Arial"); if ( v7 ) v7 = MultiByteToWideChar(0, 0, "Arial", v7, v6, v7); v6[v7] = 0; v8 = ((unsigned int)&v6[v7 + 2] + 1) & 0xFFFFFFFC; *(_DWORD *)v8 = 1344339971; *(_DWORD *)(v8 + 4) = 0; *(_DWORD *)(v8 + 8) = 327735; *(_DWORD *)(v8 + 12) = 2949253; *(_WORD *)(v8 + 16) = 1001; v9 = (WCHAR *)(v8 + 18); v10 = lstrlenA("COMBOBOX"); if ( v10 ) v10 = MultiByteToWideChar(0, 0, "COMBOBOX", v10, v9, v10); v9[v10] = 0; v11 = &v9[v10 + 1]; v12 = lstrlenA(&byte_9A8050); if ( v12 ) v12 = MultiByteToWideChar(0, 0, &byte_9A8050, v12, v11, v12); v11[v12] = 0; v13 = ((unsigned int)&v11[v12 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v13 = 1342177280; *(_DWORD *)(v13 + 4) = 0; *(_DWORD *)(v13 + 8) = 327685; *(_DWORD *)(v13 + 12) = 852009; *(_WORD *)(v13 + 16) = -1; v14 = (WCHAR *)(v13 + 18); v15 = lstrlenA("STATIC"); if ( v15 ) v15 = MultiByteToWideChar(0, 0, "STATIC", v15, v14, v15); v14[v15] = 0; v16 = &v14[v15 + 1]; v17 = lstrlenA("Mode:"); if ( v17 ) v17 = MultiByteToWideChar(0, 0, "Mode:", v17, v16, v17); v16[v17] = 0; v18 = ((unsigned int)&v16[v17 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v18 = 1344339971; *(_DWORD *)(v18 + 4) = 0; *(_DWORD *)(v18 + 8) = 1769527; *(_DWORD *)(v18 + 12) = 2949253; *(_WORD *)(v18 + 16) = 1000; v19 = (WCHAR *)(v18 + 18); v20 = lstrlenA("COMBOBOX"); if ( v20 ) v20 = MultiByteToWideChar(0, 0, "COMBOBOX", v20, v19, v20); v19[v20] = 0; v21 = &v19[v20 + 1]; v22 = lstrlenA(&byte_9A8050); if ( v22 ) v22 = MultiByteToWideChar(0, 0, &byte_9A8050, v22, v21, v22); v21[v22] = 0; v23 = ((unsigned int)&v21[v22 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v23 = 1342177280; *(_DWORD *)(v23 + 4) = 0; *(_DWORD *)(v23 + 8) = 1769477; *(_DWORD *)(v23 + 12) = 852009; *(_WORD *)(v23 + 16) = -1; v24 = (WCHAR *)(v23 + 18); v25 = lstrlenA("STATIC"); if ( v25 ) v25 = MultiByteToWideChar(0, 0, "STATIC", v25, v24, v25); v24[v25] = 0; v26 = &v24[v25 + 1]; v27 = lstrlenA("Adapter:"); if ( v27 ) v27 = MultiByteToWideChar(0, 0, "Adapter:", v27, v26, v27); v26[v27] = 0; v28 = ((unsigned int)&v26[v27 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v28 = 1344339971; *(_DWORD *)(v28 + 4) = 0; *(_DWORD *)(v28 + 8) = 3211319; *(_DWORD *)(v28 + 12) = 2949253; *(_WORD *)(v28 + 16) = 1002; v29 = (WCHAR *)(v28 + 18); v30 = lstrlenA("COMBOBOX"); if ( v30 ) v30 = MultiByteToWideChar(0, 0, "COMBOBOX", v30, v29, v30); v29[v30] = 0; v31 = &v29[v30 + 1]; v32 = lstrlenA(&byte_9A8050); if ( v32 ) v32 = MultiByteToWideChar(0, 0, &byte_9A8050, v32, v31, v32); v31[v32] = 0; v33 = ((unsigned int)&v31[v32 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v33 = 1342177280; *(_DWORD *)(v33 + 4) = 0; *(_DWORD *)(v33 + 8) = 3211269; *(_DWORD *)(v33 + 12) = 852009; *(_WORD *)(v33 + 16) = -1; v34 = (WCHAR *)(v33 + 18); v35 = lstrlenA("STATIC"); if ( v35 ) v35 = MultiByteToWideChar(0, 0, "STATIC", v35, v34, v35); v34[v35] = 0; v36 = &v34[v35 + 1]; v37 = lstrlenA("Resolution:"); if ( v37 ) v37 = MultiByteToWideChar(0, 0, "Resolution:", v37, v36, v37); v36[v37] = 0; v38 = ((unsigned int)&v36[v37 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v38 = 1342242819; *(_DWORD *)(v38 + 4) = 0; *(_DWORD *)(v38 + 8) = 4325416; *(_DWORD *)(v38 + 12) = 917624; *(_WORD *)(v38 + 16) = 1003; v39 = (WCHAR *)(v38 + 18); v40 = lstrlenA("BUTTON"); if ( v40 ) v40 = MultiByteToWideChar(0, 0, "BUTTON", v40, v39, v40); v39[v40] = 0; v41 = &v39[v40 + 1]; v42 = lstrlenA("Use 24/32-bit ZBuffer if available"); if ( v42 ) v42 = MultiByteToWideChar(0, 0, "Use 24/32-bit ZBuffer if available", v42, v41, v42); v41[v42] = 0; v43 = ((unsigned int)&v41[v42 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v43 = 1344339971; *(_DWORD *)(v43 + 4) = 0; *(_DWORD *)(v43 + 8) = 5767223; *(_DWORD *)(v43 + 12) = 2949253; *(_WORD *)(v43 + 16) = 1004; v44 = (WCHAR *)(v43 + 18); v45 = lstrlenA("COMBOBOX"); if ( v45 ) v45 = MultiByteToWideChar(0, 0, "COMBOBOX", v45, v44, v45); v44[v45] = 0; v46 = &v44[v45 + 1]; v47 = lstrlenA(&byte_9A8050); if ( v47 ) v47 = MultiByteToWideChar(0, 0, &byte_9A8050, v47, v46, v47); v46[v47] = 0; v48 = ((unsigned int)&v46[v47 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v48 = 1342177280; *(_DWORD *)(v48 + 4) = 0; *(_DWORD *)(v48 + 8) = &loc_580005; *(_DWORD *)(v48 + 12) = 852009; *(_WORD *)(v48 + 16) = -1; v49 = (WCHAR *)(v48 + 18); v50 = lstrlenA("STATIC"); if ( v50 ) v50 = MultiByteToWideChar(0, 0, "STATIC", v50, v49, v50); v49[v50] = 0; v51 = &v49[v50 + 1]; v52 = lstrlenA("MultiSample:"); if ( v52 ) v52 = MultiByteToWideChar(0, 0, "MultiSample:", v52, v51, v52); v51[v52] = 0; v53 = ((unsigned int)&v51[v52 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v53 = 1342242816; *(_DWORD *)(v53 + 4) = 0; *(_DWORD *)(v53 + 8) = 7209083; *(_DWORD *)(v53 + 12) = 917555; *(_WORD *)(v53 + 16) = 2; v54 = (WCHAR *)(v53 + 18); v55 = lstrlenA("BUTTON"); if ( v55 ) v55 = MultiByteToWideChar(0, 0, "BUTTON", v55, v54, v55); v54[v55] = 0; v56 = &v54[v55 + 1]; v57 = lstrlenA("CANCEL"); if ( v57 ) v57 = MultiByteToWideChar(0, 0, "CANCEL", v57, v56, v57); v56[v57] = 0; v58 = ((unsigned int)&v56[v57 + 3] + 1) & 0xFFFFFFFC; *(_DWORD *)v58 = 1342242816; *(_DWORD *)(v58 + 4) = 0; *(_DWORD *)(v58 + 8) = &loc_6E0028; *(_DWORD *)(v58 + 12) = 917555; *(_WORD *)(v58 + 16) = 1; lpWideCharStr = (WCHAR *)(v58 + 18); v59 = lstrlenA("BUTTON"); if ( v59 ) v59 = MultiByteToWideChar(0, 0, "BUTTON", v59, lpWideCharStr, v59); lpWideCharStr[v59] = 0; v60 = lstrlenA("OK"); if ( v60 ) v60 = MultiByteToWideChar(0, 0, "OK", v60, &lpWideCharStr[v59 + 1], v60); lpWideCharStr[v59 + 1 + v60] = 0; return v61; } //----- (008B0AC0) -------------------------------------------------------- signed int __cdecl sub_8B0AC0(int a1) { signed int result; // eax switch ( a1 ) { case 1: result = 20; break; case 2: result = 21; break; case 3: result = 22; break; case 4: result = 23; break; case 5: result = 24; break; case 6: result = 25; break; case 7: result = 26; break; case 8: result = 27; break; case 9: result = 28; break; case 10: result = 29; break; case 11: result = 30; break; case 12: result = 111; break; case 13: result = 112; break; case 14: result = 113; break; case 15: result = 114; break; case 16: result = 115; break; case 17: result = 116; break; default: result = 0; break; } return result; } //----- (008B0BA0) -------------------------------------------------------- signed int __cdecl sub_8B0BA0(int a1) { signed int result; // eax switch ( a1 ) { case 20: result = 1; break; case 21: result = 2; break; case 22: result = 3; break; case 23: result = 4; break; case 24: result = 5; break; case 25: result = 6; break; case 26: result = 7; break; case 27: result = 8; break; case 28: result = 9; break; case 29: result = 10; break; case 30: result = 11; break; case 111: result = 12; break; case 112: result = 13; break; case 113: result = 14; break; case 114: result = 15; break; case 115: result = 16; break; case 116: result = 17; break; default: result = 0; break; } return result; } //----- (008B0D00) -------------------------------------------------------- LRESULT __cdecl sub_8B0D00(HWND hDlg) { int v1; // eax unsigned int v2; // edx unsigned int v3; // ecx LPARAM v4; // esi int v5; // eax LRESULT v6; // eax LRESULT result; // eax LRESULT v8; // eax int v9; // ecx unsigned int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] char v12; // [esp+17h] [ebp-1h] SendDlgItemMessageA(hDlg, 1000, 0x14Bu, 0, 0); v1 = dword_BA54BC; v2 = *(_DWORD *)dword_BA54BC; v3 = 0; v10 = *(_DWORD *)dword_BA54BC; v12 = 0; v11 = 0; if ( *(_DWORD *)dword_BA54BC ) { while ( 1 ) { if ( v3 >= *(_DWORD *)(v1 + 16) ) v4 = 0; else v4 = *(_DWORD *)(*(_DWORD *)(v1 + 8) + 4 * v3); v5 = *(_DWORD *)(v4 + 1128); if ( *(_DWORD *)(v5 + 4) && v5 && (byte_BA54C0 || v5 && *(_BYTE *)(v5 + 324)) ) { v6 = SendDlgItemMessageA(hDlg, 1000, 0x143u, 0, v4 + 516); SendDlgItemMessageA(hDlg, 1000, 0x151u, v6, v4); v2 = v10; v3 = v11; v12 = 1; } v11 = ++v3; if ( v3 >= v2 ) break; v1 = dword_BA54BC; } } result = SendDlgItemMessageA(hDlg, 1000, 0x14Eu, 0, 0); if ( v12 ) { v8 = SendDlgItemMessageA(hDlg, 1000, 0x150u, 0, 0); dword_BA54B8 = v8; v9 = *(_DWORD *)(v8 + 1128); result = *(_DWORD *)(v9 + 4) != 0 ? v9 : 0; dword_BA54B0 = *(_DWORD *)(v9 + 4) != 0 ? v9 : 0; } else { dword_BA54B8 = 0; dword_BA54B0 = 0; } return result; } // BA54B0: using guessed type int dword_BA54B0; // BA54B8: using guessed type int dword_BA54B8; // BA54BC: using guessed type int dword_BA54BC; // BA54C0: using guessed type char byte_BA54C0; //----- (008B0E10) -------------------------------------------------------- LRESULT __cdecl sub_8B0E10(HWND hDlg) { LRESULT result; // eax _DWORD *v2; // esi LRESULT v3; // edi int v4; // esi WPARAM v5; // eax unsigned int v6; // [esp+4h] [ebp-118h] signed int v7; // [esp+8h] [ebp-114h] signed int wParam; // [esp+Ch] [ebp-110h] int v9; // [esp+10h] [ebp-10Ch] char v10; // [esp+17h] [ebp-105h] LPARAM lParam; // [esp+18h] [ebp-104h] result = SendDlgItemMessageA(hDlg, 1002, 0x14Bu, 0, 0); if ( byte_BA54C0 ) { result = dword_BA54B8; if ( dword_BA54B8 ) { v6 = *(_DWORD *)(dword_BA54B8 + 1116); v7 = -1; wParam = -1; v10 = 0; v9 = 0; if ( !v6 ) goto LABEL_20; v10 = 1; while ( 1 ) { v2 = *(_DWORD **)(*(_DWORD *)(result + 1108) + 4 * v9); sub_7FF6E0((char *)&lParam, 0x100u, "%u x %u x %u bpp", *v2, v2[1], v2[2]); v3 = SendDlgItemMessageA(hDlg, 1002, 0x143u, 0, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1002, 0x151u, v3, (LPARAM)v2); if ( *v2 == 640 && v2[1] == 480 ) { v4 = v2[2]; if ( v4 == 32 ) { wParam = v3; } else if ( v4 == 16 ) { v7 = v3; } } if ( ++v9 >= v6 ) break; result = dword_BA54B8; } v5 = wParam; if ( wParam <= 0 ) LABEL_20: v5 = v7; result = SendDlgItemMessageA(hDlg, 1002, 0x14Eu, v5, 0); if ( v10 ) { result = SendDlgItemMessageA(hDlg, 1002, 0x150u, 0, 0); dword_BA54B4 = result; } else { dword_BA54B4 = 0; } } } return result; } // BA54B4: using guessed type int dword_BA54B4; // BA54B8: using guessed type int dword_BA54B8; // BA54C0: using guessed type char byte_BA54C0; //----- (008B0FD0) -------------------------------------------------------- LRESULT __cdecl sub_8B0FD0(HWND hDlg) { LRESULT result; // eax int v2; // ecx signed int v3; // edx int v4; // eax signed int v5; // eax _DWORD *v6; // eax int *v7; // esi int v8; // eax unsigned int v9; // esi LRESULT v10; // eax unsigned int v11; // esi LRESULT v12; // eax unsigned int v13; // [esp+8h] [ebp-118h] LRESULT wParam; // [esp+Ch] [ebp-114h] int v15; // [esp+10h] [ebp-110h] int *v16; // [esp+14h] [ebp-10Ch] int v17; // [esp+18h] [ebp-108h] LPARAM lParam; // [esp+1Ch] [ebp-104h] result = SendDlgItemMessageA(hDlg, 1004, 0x14Bu, 0, 0); v2 = dword_BA54B0; if ( dword_BA54B0 ) { if ( dword_BA54B4 ) { v3 = *(_DWORD *)(dword_BA54B4 + 12); v17 = *(_DWORD *)(dword_BA54B4 + 12); } else { v4 = sub_91FAB0((_DWORD *)dword_BA54B0, byte_BA54C0 == 0, byte_BA54C1 != 0 ? 32 : 16); v5 = sub_8B0AC0(v4); v2 = dword_BA54B0; v17 = v5; v3 = v5; } v6 = *(_DWORD **)(v2 + 312); if ( v6 ) { while ( 1 ) { v7 = (int *)v6[2]; v6 = (_DWORD *)*v6; if ( *v7 == v3 ) break; if ( !v6 ) goto LABEL_8; } v16 = v7; } else { LABEL_8: v16 = 0; v7 = 0; } v15 = sub_91FDE0(v7, byte_BA54C1 != 0 ? 32 : 16, 0); sub_7FF6E0((char *)&lParam, 0x100u, "No Multisampling"); wParam = SendDlgItemMessageA(hDlg, 1004, 0x143u, 0, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1004, 0x151u, wParam, 0); v8 = sub_91F8F0(v7, byte_BA54C0 == 0, v17, v15); v9 = 0; v13 = v8; if ( v8 ) { do { sub_7FF6E0((char *)&lParam, 0x100u, "Nonmaskable Level %d", v9); v10 = SendDlgItemMessageA(hDlg, 1004, 0x143u, 0, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1004, 0x151u, v10, v9++ | 0x80000000); } while ( v9 < v13 ); } v11 = 2; do { if ( sub_91F950(v16, byte_BA54C0 == 0, v11, v17, v15) ) { sub_7FF6E0((char *)&lParam, 0x100u, "%d Multisamples", v11); v12 = SendDlgItemMessageA(hDlg, 1004, 0x143u, 0, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1004, 0x151u, v12, v11); } ++v11; } while ( v11 < 0x11 ); result = SendDlgItemMessageA(hDlg, 1004, 0x14Eu, wParam, 0); dword_BA54C4 = 0; } return result; } // BA54B0: using guessed type int dword_BA54B0; // BA54B4: using guessed type int dword_BA54B4; // BA54C0: using guessed type char byte_BA54C0; // BA54C1: using guessed type char byte_BA54C1; // BA54C4: using guessed type int dword_BA54C4; //----- (008B1230) -------------------------------------------------------- BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) { LRESULT v5; // eax char v6; // bl LRESULT v7; // eax LRESULT v8; // eax if ( a2 == 272 ) { SetWindowTextA(hDlg, "Select DX9 Display Device"); SendDlgItemMessageA(hDlg, 1001, 0x14Bu, 0, 0); v7 = SendDlgItemMessageA(hDlg, 1001, 0x143u, 0, (LPARAM)"Windowed"); SendDlgItemMessageA(hDlg, 1001, 0x151u, v7, 0); SendDlgItemMessageA(hDlg, 1001, 0x14Eu, 0, 0); byte_BA54C0 = 0; v8 = SendDlgItemMessageA(hDlg, 1001, 0x143u, 0, (LPARAM)"Fullscreen"); SendDlgItemMessageA(hDlg, 1001, 0x151u, v8, 1); byte_BA54C2 = 1; sub_8B0D00(hDlg); sub_8B0E10(hDlg); sub_8B0FD0(hDlg); CheckDlgButton(hDlg, 1003, 1u); return 1; } if ( a2 != 273 ) return 0; if ( (signed int)(unsigned __int16)a3 <= 1000 ) { if ( (unsigned __int16)a3 != 1000 ) { if ( (unsigned __int16)a3 == 1 ) { sub_8B03D0(hDlg); sub_8B0450(hDlg); sub_8B04B0(hDlg); byte_BA54C2 = 0; byte_BA54C1 = SendDlgItemMessageA(hDlg, 1003, 0xF2u, 0, 0) & 1; SendDlgItemMessageA(hDlg, 1001, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1000, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1002, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1004, 0x14Bu, 0, 0); EndDialog(hDlg, 1); return 1; } if ( (unsigned __int16)a3 == 2 ) { byte_BA54C2 = 0; SendDlgItemMessageA(hDlg, 1001, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1000, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1002, 0x14Bu, 0, 0); SendDlgItemMessageA(hDlg, 1004, 0x14Bu, 0, 0); EndDialog(hDlg, 0); return 1; } return 0; } if ( byte_BA54C2 && sub_8B03D0(hDlg) ) { sub_8B0E10(hDlg); sub_8B0FD0(hDlg); return 1; } return 1; } if ( (unsigned __int16)a3 != 1001 ) { if ( (unsigned __int16)a3 == 1002 ) { if ( byte_BA54C2 && sub_8B0450(hDlg) ) { sub_8B0FD0(hDlg); return 1; } return 1; } return 0; } if ( !byte_BA54C2 ) return 1; v5 = SendDlgItemMessageA(hDlg, 1001, 0x147u, 0, 0); v6 = byte_BA54C0; if ( v5 >= 0 ) { byte_BA54C0 = SendDlgItemMessageA(hDlg, 1001, 0x150u, v5, 0) != 0; if ( v6 != byte_BA54C0 ) { sub_8B0D00(hDlg); sub_8B0E10(hDlg); sub_8B0FD0(hDlg); } } return 1; } // BA54C0: using guessed type char byte_BA54C0; // BA54C1: using guessed type char byte_BA54C1; // BA54C2: using guessed type char byte_BA54C2; //----- (008B1510) -------------------------------------------------------- int __cdecl sub_8B1510(HWND hWnd, int a2, int a3, int a4, int a5, int a6, int a7) { HINSTANCE v7; // ebx char *v8; // eax char *v9; // esi INT_PTR v10; // edi *(_BYTE *)a2 = 0; v7 = (HINSTANCE)GetWindowLongA(hWnd, -6); v8 = sub_8B0510(); v9 = v8; if ( !v8 ) return 2; v10 = DialogBoxIndirectParamA(v7, (LPCDLGTEMPLATEA)v8, hWnd, DialogFunc, 0); operator delete(v9); if ( !v10 ) return 2; *(_DWORD *)a4 = dword_BA54B8; *(_DWORD *)a5 = dword_BA54B0; *(_BYTE *)a2 = byte_BA54C0; *(_DWORD *)a6 = byte_BA54C0 != 0 ? dword_BA54B4 : 0; *(_BYTE *)a3 = byte_BA54C1; *(_DWORD *)a7 = dword_BA54C4; return 0; } // BA54B0: using guessed type int dword_BA54B0; // BA54B4: using guessed type int dword_BA54B4; // BA54B8: using guessed type int dword_BA54B8; // BA54C0: using guessed type char byte_BA54C0; // BA54C1: using guessed type char byte_BA54C1; // BA54C4: using guessed type int dword_BA54C4; //----- (008B15C0) -------------------------------------------------------- _DWORD *__cdecl sub_8B15C0(HWND hWnd, int a2, char a3, char a4, char a5, char a6, int a7, int a8) { HWND v8; // ebx int v9; // esi int v10; // edi int *v11; // esi int v12; // edi int *v13; // edi int v14; // ebx int v15; // esi int v16; // ST2C_4 int v17; // eax _DWORD *result; // eax int v19; // [esp+18h] [ebp-30h] int v20; // [esp+1Ch] [ebp-2Ch] int v21; // [esp+20h] [ebp-28h] int v22; // [esp+24h] [ebp-24h] int v23; // [esp+28h] [ebp-20h] int v24; // [esp+2Ch] [ebp-1Ch] int v25; // [esp+33h] [ebp-15h] int v26; // [esp+38h] [ebp-10h] int v27; // [esp+3Ch] [ebp-Ch] int v28; // [esp+40h] [ebp-8h] v8 = hWnd; v20 = a8; GetWindowRect(hWnd, (LPRECT)((char *)&v25 + 1)); while ( 1 ) { v9 = 0; v10 = 0; if ( a3 ) { v23 = 8; v10 = 8; } if ( a4 ) v10 |= 0x20u; v19 = 0; v21 = 0; v24 = 0; LOBYTE(v25) = 0; v22 = 0; if ( sub_8B1510(v8, v20, (int)&v25, (int)&v24, (int)&v21, (int)&v19, (int)&v22) == 2 ) return 0; if ( !(_BYTE)v25 ) v10 |= 0x10u; if ( *(_BYTE *)v20 ) { v11 = (int *)v24; v12 = v10 | 4; v23 = v12; if ( !v24 || !v21 ) goto LABEL_24; v13 = (int *)v19; if ( !v19 ) { v12 = v23; LABEL_24: result = sub_92A8B0(640, 480, v12, (int)v8, (int)v8, 0, 0, 0, 0, 1, 0, 0, 1, 0); goto LABEL_35; } v14 = 0; if ( a5 || *(_DWORD *)v21 == 2 ) { v14 = 4; } else if ( a6 ) { v14 = 3; } if ( strstr((const char *)(v24 + 516), "NVPerfHUD") ) { *(_BYTE *)a7 = 1; if ( a5 || (v14 = 5, a6) ) v14 = 4; } v15 = *v11; v16 = v22; v17 = sub_8B0BA0(v13[3]); result = sub_92A8B0(*v13, v13[1], v23, (int)hWnd, (int)hWnd, v15, v14, v17, 0, 0, 0, v16, 1, 0); v8 = hWnd; } else { if ( a5 || *(_DWORD *)v21 == 2 ) { v9 = 4; } else if ( a6 ) { v9 = 3; } if ( strstr((const char *)(v24 + 516), "NVPerfHUD") ) { if ( a5 ) v9 = 4; else v9 = (a6 != 0) + 5; } result = sub_92A8B0(0, 0, v10, a2, (int)v8, *(_DWORD *)v24, v9, 0, 0, 0, 0, v22, 1, 0); } LABEL_35: if ( result ) return result; MoveWindow(v8, *(int *)((char *)&v25 + 1), v26, v27 - *(int *)((char *)&v25 + 1), v28 - v26, 1); } } //----- (008B17F0) -------------------------------------------------------- int __cdecl sub_8B17F0(int a1, HWND hWnd, int a3, char a4, int a5, int a6, int a7, char a8, char a9, char a10, char a11, int a12, int a13) { unsigned int *v13; // eax int result; // eax _DWORD *v15; // eax int v16; // esi int v17; // esi int v18; // ebx unsigned int v19; // edi signed int v20; // eax int v21; // esi _DWORD *v22; // eax unsigned int v23; // [esp+0h] [ebp-10h] int v24; // [esp+4h] [ebp-Ch] int v25; // [esp+8h] [ebp-8h] int v26; // [esp+Ch] [ebp-4h] v24 = dword_BA54C4; v13 = (unsigned int *)sub_921C10(); dword_BA54BC = (int)v13; if ( !v13 ) { result = a1; *(_DWORD *)a1 = 0; return result; } v26 = 0; if ( a4 && !a5 ) { v15 = sub_8B15C0(hWnd, a3, a8, a9, a10, a11, a12, a13); LABEL_6: sub_56FF80(&v26, (int)v15); goto LABEL_7; } v17 = 0; if ( a8 ) v17 = 8; if ( a9 ) v17 |= 0x20u; v18 = 0; v25 = 0; if ( *(_BYTE *)a12 ) { v19 = 0; v23 = *v13; if ( *v13 ) { while ( 1 ) { v20 = v19 >= v13[4] ? 0 : *(_DWORD *)(v13[2] + 4 * v19); if ( strstr((const char *)(v20 + 516), "NVPerfHUD") ) break; if ( ++v19 >= v23 ) goto LABEL_29; v13 = (unsigned int *)dword_BA54BC; } *(_BYTE *)a12 = 1; v25 = v19; if ( a10 ) v18 = 4; else v18 = (a11 != 0) + 5; } } LABEL_29: if ( a5 != 16 && a5 != 32 ) { if ( *(_BYTE *)a13 ) v15 = sub_92A8B0(640, 480, v17 | 4, (int)hWnd, (int)hWnd, v25, v18, 0, 0, 0, 0, v24, 1, 0); else v15 = sub_92A8B0(0, 0, v17, a3, a3, v25, v18, 0, 0, 0, 0, v24, 1, 0); goto LABEL_6; } v21 = v17 | 4; if ( a5 == 16 ) v21 |= 0x10u; v22 = sub_92A8B0(a6, a7, v21, (int)hWnd, (int)hWnd, v25, v18, 0, 0, 0, 0, v24, 1, 0); if ( v22 ) { v16 = (int)v22; InterlockedIncrement(v22 + 1); goto LABEL_8; } LABEL_7: v16 = v26; LABEL_8: *(_DWORD *)a1 = v16; if ( v16 ) { InterlockedIncrement((volatile LONG *)(v16 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); } return a1; } // BA54BC: using guessed type int dword_BA54BC; // BA54C4: using guessed type int dword_BA54C4; //----- (008B19F0) -------------------------------------------------------- int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HINSTANCE v4; // edi _DWORD *v5; // eax int v6; // eax int v7; // ebx char *v8; // edi signed int v9; // esi int (__cdecl *v10)(int, char *, signed int, int *, signed int); // eax bool v11; // zf char v12; // al _DWORD *v13; // esi int v14; // eax volatile unsigned int v15; // esi WNDCLASSA WndClass; // [esp+Ch] [ebp-140h] int v18; // [esp+34h] [ebp-118h] int v19; // [esp+38h] [ebp-114h] HINSTANCE v20; // [esp+3Ch] [ebp-110h] char ArgList[4]; // [esp+40h] [ebp-10Ch] char v22; // [esp+47h] [ebp-105h] CHAR OutputString; // [esp+48h] [ebp-104h] v4 = hInstance; v20 = hInstance; v18 = nShowCmd; *(_DWORD *)ArgList = Addend; sub_8AA0D0(); v5 = operator new(0x28u); if ( !v5 ) { v7 = 0; LABEL_13: sub_8AE9A0(lpCmdLine); goto LABEL_14; } v6 = sub_8AAAC0(v5, "./cmdline.txt", 0, 0x8000u); v7 = v6; if ( !v6 || !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6) ) goto LABEL_13; v8 = (char *)operator new(0x400u); v9 = 0; do { v10 = *(int (__cdecl **)(int, char *, signed int, int *, signed int))(v7 + 4); v19 = 1; v11 = v10(v7, &v22, 1, &v19, 1) == 0; v12 = v22; if ( v11 && v22 ) break; if ( v22 == 10 || v22 == 13 ) { v12 = 32; v22 = 32; } v8[v9++] = v12; } while ( v9 < 1023 ); v8[v9] = 0; sub_8AE9A0(v8); operator delete(v8); v4 = v20; LABEL_14: if ( v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v13 = sub_470DA0(); if ( v13 ) { ::hInstance = v4; sub_8AE9F0(); WndClass.style = 3; WndClass.lpfnWndProc = (WNDPROC)sub_8AEB80; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = v4; WndClass.hIcon = LoadIconA(0, (LPCSTR)0x7F00); WndClass.hCursor = LoadCursorA(0, (LPCSTR)0x7F00); WndClass.hbrBackground = (HBRUSH)GetStockObject(0); WndClass.lpszClassName = aGamebryoApplic; v14 = v13[18]; if ( v14 ) WndClass.lpszMenuName = (LPCSTR)(unsigned __int16)v14; else WndClass.lpszMenuName = 0; RegisterClassA(&WndClass); (**(void (__stdcall ***)(int, _DWORD))v13[17])(v18, 0); if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v13 + 8))(v13) ) sub_8AEB60(v13); (*(void (__thiscall **)(_DWORD *))(*v13 + 12))(v13); (*(void (__thiscall **)(_DWORD *, signed int))*v13)(v13, 1); sub_8AA110(); v15 = Addend; sub_7FF6E0( &OutputString, 0x100u, "\nGamebryo NiRefObject counts: initial = %u, final = %u. ", *(_DWORD *)ArgList, Addend); OutputDebugStringA(&OutputString); if ( v15 <= *(_DWORD *)ArgList ) { OutputDebugStringA("Application has no object leaks.\n\n"); } else { sub_7FF6E0(&OutputString, 0x100u, "Application is leaking %u objects\n\n", v15 - *(_DWORD *)ArgList); OutputDebugStringA(&OutputString); } } else { if ( off_AC0554 ) off_AC0554("Unable to create application", aGamebryoApplic, 0); sub_8AA110(); } return 0; } // AC0554: using guessed type int (__cdecl *off_AC0554)(_DWORD, _DWORD, _DWORD); //----- (008B1C90) -------------------------------------------------------- void __thiscall sub_8B1C90(void **this) { void **v1; // esi v1 = this; operator delete(this[3]); if ( v1[2] ) { operator delete(v1[1]); operator delete(v1[2]); } } //----- (008B1CC0) -------------------------------------------------------- signed int __thiscall sub_8B1CC0(signed int *this, const char *a2, _BYTE *a3) { signed int result; // eax signed int v4; // edi int *v5; // eax int v6; // edx signed int v7; // [esp+0h] [ebp-4h] if ( !this ) return 0; v4 = 1; *a3 = 0; v7 = 0; if ( *this <= 1 ) goto LABEL_15; v5 = (int *)(this[1] + 4); while ( 1 ) { v6 = *v5; if ( !*(_BYTE *)(this[3] + v4) && *(_BYTE *)v6 == 45 && !strcmp(a2, (const char *)(v6 + 1)) ) break; ++v4; ++v5; if ( v4 >= *this ) { result = 0; this[7] = (signed int)aOptionNotFound; return result; } } *(_BYTE *)(this[3] + v4) = 1; v7 = v4; *a3 = 1; if ( !v4 ) LABEL_15: this[7] = (signed int)aOptionNotFound; return v7; } //----- (008B1D80) -------------------------------------------------------- size_t *__thiscall sub_8B1D80(size_t *this, char *Src) { size_t *v2; // edi unsigned int v3; // kr04_4 char *v4; // eax unsigned int v5; // edx size_t v6; // eax _BYTE *v7; // ecx char v8; // al char *v9; // esi char *v10; // eax char i; // al char j; // al char k; // al size_t *v14; // eax size_t v15; // ecx int v16; // ebx char *v17; // esi void *v18; // eax size_t v19; // ST08_4 char *Srca; // [esp+10h] [ebp+8h] v2 = this; *this = 0; this[1] = 0; this[3] = 0; this[2] = 0; if ( Src && strlen(Src) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = (size_t)v4; strcpy_s(v4, v3 + 1, Src); v5 = 0; if ( strlen(Src) != -1 ) { do { v6 = v2[2]; v7 = (_BYTE *)(v6 + v5); v8 = *(_BYTE *)(v6 + v5); if ( v8 == 13 || v8 == 10 ) *v7 = 32; ++v5; } while ( v5 < strlen(Src) + 1 ); } v9 = (char *)v2[2]; Srca = 0; if ( v9 ) { while ( *v9 ) { ++*v2; v10 = (char *)operator new(8u); *((_DWORD *)v10 + 1) = Srca; Srca = v10; if ( *v9 == 34 ) { *(_DWORD *)v10 = ++v9; for ( i = *v9; i; i = (v9++)[1] ) { if ( i == 34 ) break; } } else { *(_DWORD *)v10 = v9; for ( j = *v9; j; j = (v9++)[1] ) { if ( j == 32 ) break; if ( j == 9 ) break; } } if ( *v9 ) *v9++ = 0; for ( k = *v9; k; k = (v9++)[1] ) { if ( k != 32 && k != 9 ) break; } } } v14 = (size_t *)operator new(4 * ++*v2); v15 = v2[2]; v2[1] = (size_t)v14; *v14 = v15; if ( Srca ) { v16 = 4 * *v2 - 4; do { *(_DWORD *)(v16 + v2[1]) = *(_DWORD *)Srca; v17 = (char *)*((_DWORD *)Srca + 1); v16 -= 4; operator delete(Srca); Srca = v17; } while ( v17 ); } v18 = operator new(*v2); v19 = *v2; v2[3] = (size_t)v18; memset(v18, 0, v19); *((float *)v2 + 4) = 0.0; *((float *)v2 + 5) = 0.0; v2[6] = 0; } return v2; } //----- (008B1F30) -------------------------------------------------------- signed int __thiscall sub_8B1F30(signed int *this, const char *a2) { signed int result; // eax if ( this ) result = sub_8B1CC0(this, a2, (_BYTE *)&a2 + 3); else result = 0; return result; } //----- (008B1F50) -------------------------------------------------------- _DWORD *__thiscall sub_8B1F50(_DWORD *this, const char *a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // esi size_t v7; // edi char *v8; // eax const char *v10; // [esp-8h] [ebp-14h] v6 = this; *this = &NiAppWindow::`vftable'; if ( a2 && *a2 ) { v7 = strlen(a2) + 1; v8 = (char *)operator new(v7); v10 = a2; } else { v7 = strlen(aGamebryoApplic) + 1; v8 = (char *)operator new(v7); v10 = aGamebryoApplic; } v6[4] = v8; strcpy_s(v8, v7, v10); v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[6] = a3; v6[5] = a3; v6[8] = a4; v6[7] = a4; v6[11] = a6; v6[9] = a5; *((_BYTE *)v6 + 40) = 0; return v6; } // A2B3C8: using guessed type void *NiAppWindow::`vftable'; //----- (008B1FF0) -------------------------------------------------------- int __thiscall sub_8B1FF0(int this) { int result; // eax int v2; // esi HWND v3; // edi int v4; // eax HWND *v5; // eax HWND v6; // eax int v7; // ST28_4 int v8; // ST24_4 int v9; // ST20_4 int v10; // ST1C_4 HWND v11; // ST18_4 INITCOMMONCONTROLSEX picce; // [esp+4h] [ebp-2Ch] struct tagRECT Rect; // [esp+Ch] [ebp-24h] struct tagRECT v14; // [esp+1Ch] [ebp-14h] result = dword_BA54A0; v2 = this; if ( *(_BYTE *)(dword_BA54A0 + 76) ) *(_DWORD *)(this + 36) = 0; if ( *(_DWORD *)(this + 36) && !*(_BYTE *)(this + 40) ) { picce.dwSize = 8; picce.dwICC = 4; InitCommonControlsEx(&picce); v3 = CreateWindowExA( 0, "msctls_statusbar32", &byte_9A8050, 0x50000000u, 0, 0, 0, 0, *(HWND *)(v2 + 4), 0, hInstance, 0); v4 = *(_DWORD *)(v2 + 36); if ( v4 ) { if ( !*(_DWORD *)(v2 + 12) ) *(_DWORD *)(v2 + 12) = operator new(4 * v4); **(_DWORD **)(v2 + 12) = v3; } if ( *(_DWORD *)(v2 + 36) && (v5 = *(HWND **)(v2 + 12)) != 0 ) v6 = *v5; else v6 = 0; GetWindowRect(v6, &Rect); GetWindowRect(*(HWND *)(v2 + 4), &v14); v7 = v14.bottom + Rect.bottom - Rect.top - v14.top; v8 = v14.right - v14.left; v9 = v14.top; v10 = v14.left; v11 = *(HWND *)(v2 + 4); *(_BYTE *)(v2 + 40) = 1; result = MoveWindow(v11, v10, v9, v8, v7, 1); } return result; } // BA54A0: using guessed type int dword_BA54A0; //----- (008B2110) -------------------------------------------------------- unsigned int __thiscall sub_8B2110(int this, WPARAM wParam, LPARAM lParam) { int v3; // esi unsigned int result; // eax HWND *v5; // eax HWND v6; // eax HWND *v7; // esi v3 = this; result = *(_DWORD *)(this + 36); if ( wParam < result && *(_BYTE *)(this + 40) ) { if ( result && (v5 = *(HWND **)(this + 12)) != 0 ) v6 = *v5; else v6 = 0; SendMessageA(v6, 0x401u, wParam, lParam); if ( *(_DWORD *)(v3 + 36) && (v7 = *(HWND **)(v3 + 12)) != 0 ) result = SendMessageA(*v7, 0xFu, 0, 0); else result = SendMessageA(0, 0xFu, 0, 0); } return result; } //----- (008B2180) -------------------------------------------------------- int __thiscall sub_8B2180(int this) { int v1; // esi int result; // eax HWND *v3; // eax HWND v4; // eax HWND *v5; // eax HWND v6; // eax int v7; // eax int v8; // ST10_4 int v9; // ST0C_4 int v10; // ST08_4 int v11; // ST04_4 HWND v12; // ST00_4 struct tagRECT Rect; // [esp+4h] [ebp-24h] struct tagRECT v14; // [esp+14h] [ebp-14h] v1 = this; result = *(_DWORD *)(this + 36); if ( result && *(_BYTE *)(this + 40) ) { if ( result && (v3 = *(HWND **)(this + 12)) != 0 ) v4 = *v3; else v4 = 0; GetWindowRect(v4, &Rect); GetWindowRect(*(HWND *)(v1 + 4), &v14); if ( *(_DWORD *)(v1 + 36) && (v5 = *(HWND **)(v1 + 12)) != 0 ) v6 = *v5; else v6 = 0; DestroyWindow(v6); v7 = *(_DWORD *)(v1 + 36); if ( v7 ) { if ( !*(_DWORD *)(v1 + 12) ) *(_DWORD *)(v1 + 12) = operator new(4 * v7); **(_DWORD **)(v1 + 12) = 0; } v8 = v14.bottom + Rect.top - Rect.bottom - v14.top; v9 = v14.right - v14.left; v10 = v14.top; v11 = v14.left; v12 = *(HWND *)(v1 + 4); *(_BYTE *)(v1 + 40) = 0; result = MoveWindow(v12, v11, v10, v9, v8, 1); } return result; } //----- (008B2260) -------------------------------------------------------- HWND __thiscall sub_8B2260(_DWORD *this, int nCmdShow, HWND hWndParent) { int v3; // esi LONG v4; // eax DWORD v5; // ecx HWND v6; // eax bool v7; // zf HWND v8; // edi HWND v9; // eax HWND v10; // ST28_4 DWORD dwStyle; // [esp+Ch] [ebp-18h] struct tagRECT Rect; // [esp+10h] [ebp-14h] v3 = (int)this; v4 = this[5]; Rect.bottom = this[7]; v5 = this[11]; Rect.left = 0; Rect.top = 0; Rect.right = v4; AdjustWindowRect(&Rect, v5, *(_DWORD *)(dword_BA54A0 + 72)); dwStyle = 0x40000000; if ( *(_BYTE *)(dword_BA54A0 + 76) ) { v6 = CreateWindowExA( 0, aGamebryoApplic, *(LPCSTR *)(v3 + 16), 0x80000000, 0, 0, Rect.right - Rect.left, Rect.bottom - Rect.top, hWndParent, 0, hInstance, 0); } else { dwStyle = 1342177280; v6 = CreateWindowExA( 0, aGamebryoApplic, *(LPCSTR *)(v3 + 16), *(_DWORD *)(v3 + 44), 0, 0, Rect.right - Rect.left, Rect.bottom - Rect.top, hWndParent, 0, hInstance, 0); } v7 = *(_DWORD *)(v3 + 36) == 0; v8 = v6; *(_DWORD *)(v3 + 4) = v6; if ( !v7 ) sub_8B1FF0(v3); v9 = CreateWindowExA( 0, aGamebryoApplic, 0, dwStyle, 0, 0, *(_DWORD *)(v3 + 20), *(_DWORD *)(v3 + 28), v8, 0, hInstance, 0); v10 = *(HWND *)(v3 + 4); *(_DWORD *)(v3 + 8) = v9; ShowWindow(v10, nCmdShow); UpdateWindow(*(HWND *)(v3 + 4)); return v8; } // BA54A0: using guessed type int dword_BA54A0; //----- (008B2380) -------------------------------------------------------- void __thiscall sub_8B2380(int this) { int v1; // esi bool v2; // zf v1 = this; v2 = *(_BYTE *)(this + 40) == 0; *(_DWORD *)this = &NiAppWindow::`vftable'; if ( !v2 ) { if ( IsWindow(*(HWND *)(this + 4)) ) sub_8B2180(v1); if ( *(_DWORD *)(v1 + 12) ) operator delete(*(void **)(v1 + 12)); } operator delete(*(void **)(v1 + 16)); *(_DWORD *)(v1 + 4) = 0; *(_DWORD *)(v1 + 8) = 0; } // A2B3C8: using guessed type void *NiAppWindow::`vftable'; //----- (008B23D0) -------------------------------------------------------- signed int __cdecl sub_8B23D0(unsigned int a1) { signed int result; // eax if ( a1 > 0x10000100 ) { switch ( a1 ) { case 0x10000101u: result = 1; break; case 0x10000102u: result = 2; break; case 0x10000103u: result = 3; break; case 0x10000104u: result = 4; break; case 0x10000105u: result = 5; break; case 0x10000106u: result = 6; break; case 0x10000107u: result = 7; break; case 0x10000108u: result = 8; break; case 0x10000109u: result = 9; break; case 0x1000010Au: result = 10; break; case 0x1000010Bu: result = 11; break; case 0x1000010Cu: result = 12; break; case 0x1000010Du: result = 13; break; case 0x1000010Eu: result = 14; break; case 0x1000010Fu: result = 15; break; default: LABEL_25: result = -1; break; } } else if ( a1 == 268435712 ) { result = 0; } else { switch ( a1 ) { case 0x10000001u: result = 65537; break; case 0x10000002u: result = 65538; break; case 0x10000003u: result = 131073; break; case 0x10000004u: result = 131074; break; default: goto LABEL_25; } } return result; } //----- (008B24E0) -------------------------------------------------------- signed int __cdecl sub_8B24E0(unsigned int a1) { if ( a1 > 0x40001000 ) { switch ( a1 ) { case 0x40001001u: return 1; case 0x40001002u: return 2; case 0x40001003u: return 3; case 0x40001004u: return 4; case 0x40001005u: return 5; case 0x40001006u: return 6; case 0x40001007u: return 7; default: return -1; } } else { switch ( a1 ) { case 0x40001000u: case 0x40000001u: return 0; case 0x40000002u: return 1; case 0x40000003u: return 2; } } return -1; } //----- (008B2570) -------------------------------------------------------- unsigned int __cdecl sub_8B2570(unsigned int a1) { if ( a1 & 0x10000000 ) return sub_8B23D0(a1); if ( a1 & 0x40000000 ) return sub_8B24E0(a1); if ( a1 & 0x20000000 && (a1 & 0x20010000) != 536936448 ) return a1 & 0xDFFFFFFF; return -1; } //----- (008B25C0) -------------------------------------------------------- int __thiscall sub_8B25C0(_DWORD *this, int a2, int a3, int a4) { int result; // eax result = 0; switch ( a2 ) { case 1: return (*(int (**)(void))(*this + 28))(); case 2: return (*(int (**)(void))(*this + 24))(); case 3: return (*(int (__stdcall **)(int, int))(*this + 20))(a3, a4); } this[2] = -2147483644; return result; } //----- (008B2610) -------------------------------------------------------- int __thiscall sub_8B2610(_DWORD *this, int a2, int a3) { this[2] = -2147483647; return 0; } //----- (008B2620) -------------------------------------------------------- int __thiscall sub_8B2620(_DWORD *this) { this[2] = -2147483647; return 0; } //----- (008B2630) -------------------------------------------------------- int sub_8B2630(char *Format, ...) { char DstBuf; // [esp+0h] [ebp-804h] va_list va; // [esp+810h] [ebp+Ch] va_start(va, Format); return vsprintf_s(&DstBuf, 0x800u, Format, va); } //----- (008B2670) -------------------------------------------------------- void *__thiscall sub_8B2670(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2B3E4: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008B26A0) -------------------------------------------------------- void *__thiscall sub_8B26A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiActionData *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2B3F4: using guessed type void *NiTListBase,NiActionData *>::`vftable'; //----- (008B26D0) -------------------------------------------------------- int *__thiscall sub_8B26D0(int *this, unsigned int a2) { int *v2; // ebx int v3; // esi int v4; // ecx unsigned int *v5; // eax int v6; // ecx int v7; // ebx _DWORD *i; // eax int *v10; // [esp+Ch] [ebp-4h] v2 = this; v3 = 0; v10 = this; this[1] = a2; this[2] = 0; if ( a2 ) { v4 = 28 * a2 | -(28 * (unsigned __int64)a2 >> 32 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { v6 = a2 - 1; v7 = (int)(v5 + 1); *v5 = a2; for ( i = v5 + 1; v6 >= 0; --v6 ) { *i = &NiActionData::`vftable'; i[1] = 0; i[2] = -1; i[3] = 0; i[4] = 0; i[5] = 0; i[6] = 0; i += 7; } v3 = v7; v2 = v10; } } *v2 = v3; return v2; } // 9B8D7C: using guessed type void *NiActionData::`vftable'; //----- (008B2760) -------------------------------------------------------- int __thiscall sub_8B2760(void *this, int a2) { int result; // eax result = a2; if ( a2 ) result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)this + 20))(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16)); return result; } //----- (008B2790) -------------------------------------------------------- int __thiscall sub_8B2790(void *this, int a2, int a3) { void *v3; // esi int result; // eax v3 = this; for ( result = (*(int (**)(void))(*(_DWORD *)this + 108))(); result; result = (*(int (__thiscall **)(void *))(*(_DWORD *)v3 + 112))(v3) ) { if ( *(_DWORD *)(result + 12) == a2 && *(_DWORD *)(result + 16) == a3 ) break; } return result; } //----- (008B27D0) -------------------------------------------------------- int __thiscall sub_8B27D0(_DWORD *this) { int result; // eax int v2; // esi int v3; // ebx int v4; // edx int v5; // edx int v6; // edx int v7; // edx int v8; // edx int v9; // edx int v10; // edx int v11; // ecx result = this[16]; if ( result ) { v2 = this[17]; if ( v2 ) { v3 = *(_DWORD *)(result + 16); result = dword_BA54DC; if ( v3 != dword_BA54DC ) { result = v3 ^ dword_BA54DC; if ( ((unsigned __int8)v3 ^ (unsigned __int8)dword_BA54DC) & 1 ) { if ( v3 & 1 ) *(_DWORD *)(v2 + 16) |= 0x100u; else *(_DWORD *)(v2 + 16) &= 0xFFFFFEFF; } if ( result & 2 ) { v4 = this[17]; if ( v3 & 2 ) *(_DWORD *)(v4 + 16) |= 0x200u; else *(_DWORD *)(v4 + 16) &= 0xFFFFFDFF; } if ( result & 4 ) { v5 = this[17]; if ( v3 & 4 ) *(_DWORD *)(v5 + 16) |= 0x400u; else *(_DWORD *)(v5 + 16) &= 0xFFFFFBFF; } if ( result & 8 ) { v6 = this[17]; if ( v3 & 8 ) *(_DWORD *)(v6 + 16) |= 0x800u; else *(_DWORD *)(v6 + 16) &= 0xFFFFF7FF; } if ( result & 0x10 ) { v7 = this[17]; if ( v3 & 0x10 ) *(_DWORD *)(v7 + 16) |= 0x1000u; else *(_DWORD *)(v7 + 16) &= 0xFFFFEFFF; } if ( result & 0x20 ) { v8 = this[17]; if ( v3 & 0x20 ) *(_DWORD *)(v8 + 16) |= 0x2000u; else *(_DWORD *)(v8 + 16) &= 0xFFFFDFFF; } if ( result & 0x40 ) { v9 = this[17]; if ( v3 & 0x40 ) *(_DWORD *)(v9 + 16) |= 0x4000u; else *(_DWORD *)(v9 + 16) &= 0xFFFFBFFF; } if ( (result & 0x80u) != 0 ) { v10 = this[17]; if ( (v3 & 0x80u) == 0 ) *(_DWORD *)(v10 + 16) &= 0xFFFF7FFF; else *(_DWORD *)(v10 + 16) |= 0x8000u; } if ( result & 0x100 ) { v11 = this[17]; if ( v3 & 0x100 ) { *(_DWORD *)(v11 + 16) |= 0x10000u; dword_BA54DC = v3; return result; } *(_DWORD *)(v11 + 16) &= 0xFFFEFFFF; } dword_BA54DC = v3; } } } return result; } // BA54DC: using guessed type int dword_BA54DC; //----- (008B2910) -------------------------------------------------------- int __thiscall sub_8B2910(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2B3E4: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2B404: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008B2950) -------------------------------------------------------- int __thiscall sub_8B2950(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiActionData *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiActionData *>::`vftable'; return result; } // A2B3F4: using guessed type void *NiTListBase,NiActionData *>::`vftable'; // A2B414: using guessed type void *NiTPointerListBase,NiActionData *>::`vftable'; //----- (008B2990) -------------------------------------------------------- void *__thiscall sub_8B2990(void *this, char a2) { void *v2; // esi v2 = this; sub_8B2910(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B29C0) -------------------------------------------------------- void *__thiscall sub_8B29C0(void *this, char a2) { void *v2; // esi v2 = this; sub_8B2950(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B29F0) -------------------------------------------------------- int __thiscall sub_8B29F0(_DWORD *this, int a2) { int v2; // eax _DWORD *v3; // esi int v4; // edi int v6; // edi int *v7; // edi signed int v8; // ebx int v9; // esi v2 = a2; v3 = this; if ( this[16] == a2 ) { v4 = this[16]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) { if ( v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } v3[16] = 0; return 0; } return 0; } if ( this[17] != a2 ) { v7 = this + 18; v8 = 8; do { if ( *v7 == v2 ) { v9 = *v7; if ( *v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v2 = a2; *v7 = 0; } } ++v7; --v8; } while ( v8 ); return 0; } v6 = this[17]; if ( !v6 ) return 0; if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[17] = 0; return 0; } //----- (008B2AC0) -------------------------------------------------------- int __thiscall sub_8B2AC0(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx unsigned int v3; // esi int v4; // ecx int v5; // ebx char v7; // [esp+Fh] [ebp-25h] v1 = this; v2 = this[16]; v3 = 0; v1[2] = 0; v7 = 0; if ( v2 ) { if ( (*(int (**)(void))(*(_DWORD *)v2 + 8))() == -2147483642 ) v7 = 1; else sub_8B27D0(v1); } v4 = v1[17]; if ( v4 && (*(int (**)(void))(*(_DWORD *)v4 + 8))() == -2147483642 ) v7 = 1; v5 = (int)(v1 + 18); do { if ( *(_DWORD *)v5 && (*(int (**)(void))(**(_DWORD **)v5 + 8))() == -2147483642 ) v7 = 1; ++v3; v5 += 4; } while ( v3 < 8 ); if ( v7 ) v1[2] = -2147483642; return v1[2]; } //----- (008B2B70) -------------------------------------------------------- int __thiscall sub_8B2B70(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx unsigned int v3; // edi int v4; // ecx int v5; // ebx char v7; // [esp+Bh] [ebp-25h] v1 = this; v2 = this[16]; v3 = 0; v1[2] = 0; v7 = 0; if ( v2 ) { if ( (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v2 + 12))(v1) == -2147483642 ) v7 = 1; else sub_8B27D0(v1); } v4 = v1[17]; if ( v4 && (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v4 + 12))(v1) == -2147483642 ) v7 = 1; v5 = (int)(v1 + 18); do { if ( *(_DWORD *)v5 && (*(int (__stdcall **)(_DWORD *))(**(_DWORD **)v5 + 12))(v1) == -2147483642 ) v7 = 1; ++v3; v5 += 4; } while ( v3 < 8 ); if ( v7 ) v1[2] = -2147483642; return v1[2]; } //----- (008B2C20) -------------------------------------------------------- int __thiscall sub_8B2C20(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v5; // eax int v6; // ebx int v7; // edi int v8; // ebx _DWORD *v9; // eax int v10; // [esp+10h] [ebp+8h] v2 = a2; v3 = this; if ( !a2 ) { this[2] = -2147483646; return this[2]; } v5 = a2[7]; v6 = this[3]; v10 = v5; if ( v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5 = v10; } v3[3] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v3[5] = v2[2]; v3[6] = v2[3]; v3[7] = v2[4]; v3[8] = v2[5]; v3[9] = v2[6]; v7 = v2[1]; v8 = v3[26]; if ( v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v3[26] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } if ( v3[26] ) { v3[4] = 1; v9 = operator new(0x18u); if ( v9 ) { *v9 = 0; v9[1] = 0; v9[2] = 0; v9[3] = 8; v9[4] = 8; v9[5] = 0; v3[32] = v9; return v3[2]; } v3[32] = 0; } return v3[2]; } //----- (008B2D30) -------------------------------------------------------- int __thiscall sub_8B2D30(_DWORD *this) { _DWORD *v1; // ebx int v2; // esi int v3; // esi int *v4; // edi int v5; // esi _DWORD *v6; // esi _DWORD *v7; // ST00_4 int result; // eax signed int v9; // [esp+Ch] [ebp-4h] v1 = this; v2 = this[16]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[16] = 0; } v3 = v1[17]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[17] = 0; } v4 = v1 + 18; v9 = 8; do { v5 = *v4; if ( *v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v4 = 0; } ++v4; --v9; } while ( v9 ); v6 = (_DWORD *)v1[12]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[11] + 8))(v1 + 11, v7); } result = 0; v1[14] = 0; v1[12] = 0; v1[13] = 0; return result; } //----- (008B2DF0) -------------------------------------------------------- unsigned int __thiscall sub_8B2DF0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // esi unsigned int v6; // edi int v7; // ST0C_4 int v8; // ST08_4 int *v9; // ST2C_4 int v10; // ebx unsigned int v11; // eax char v12; // al int v13; // eax unsigned int v14; // [esp+4h] [ebp-10h] unsigned int v15; // [esp+Ch] [ebp-8h] _DWORD *v16; // [esp+10h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[16]; v16 = v1; if ( !v2 ) return 0; if ( !v1[26] ) return -2147483633; sub_8B6400(v2); result = 0; v14 = *(_DWORD *)(v1[26] + 36); if ( v14 ) { v15 = 0; do { v4 = (_DWORD *)sub_8B60E0((_DWORD *)v1[26], result); v5 = v4; if ( v4 ) { v6 = v4[4]; if ( v6 & 0x20000000 ) { if ( (v6 & 0x20010000) == 536936448 ) { v4[14] = 6; } else { v7 = v4[10]; v8 = (v4[5] >> 9) & 1; v9 = (int *)v1[16]; v10 = *v9; v11 = sub_8B2570(v6); v12 = (*(int (__thiscall **)(int *, unsigned int, unsigned int, int, int, _DWORD, _DWORD, _DWORD))(v10 + 28))( v9, v11, v6, v8, v7, 0, 0, 0); v1 = v16; if ( v12 ) { v16[2] = -2147483628; } else { v13 = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v16[16] + 32))(v5); if ( v13 ) { v16[2] = v13; v5[14] = 4; } else { v5[14] = 2; v5[13] = sub_8B2570(v6); } } } } } result = v15 + 1; v15 = result; } while ( result < v14 ); result = v1[2]; } return result; } //----- (008B2F00) -------------------------------------------------------- unsigned int __thiscall sub_8B2F00(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // esi unsigned int v6; // edi int v7; // ST0C_4 int v8; // ST08_4 int *v9; // ST2C_4 int v10; // ebx unsigned int v11; // eax char v12; // al int v13; // eax unsigned int v14; // [esp+4h] [ebp-10h] unsigned int v15; // [esp+Ch] [ebp-8h] _DWORD *v16; // [esp+10h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[17]; v16 = v1; if ( !v2 ) return 0; if ( !v1[26] ) return -2147483633; sub_8B6400(v2); result = 0; v14 = *(_DWORD *)(v1[26] + 36); if ( v14 ) { v15 = 0; do { v4 = (_DWORD *)sub_8B60E0((_DWORD *)v1[26], result); v5 = v4; if ( v4 ) { v6 = v4[4]; if ( v6 & 0x40000000 ) { if ( v6 > 0x40001007 || v6 < 0x40001000 && v6 - 1073741825 > 2 ) { if ( (v6 & 0x40010100) == 1073807616 || (v6 & 0x40010001) == 1073807361 || (v6 & 0x40010002) == 1073807362 || (v6 & 0x40010003) == 1073807363 ) { v4[14] = 6; } } else { v7 = v4[11]; v8 = (v4[5] >> 9) & 1; v9 = (int *)v1[17]; v10 = *v9; v11 = sub_8B2570(v6); v12 = (*(int (__thiscall **)(int *, unsigned int, unsigned int, int, int, _DWORD, _DWORD, _DWORD))(v10 + 28))( v9, v11, v6, v8, v7, 0, 0, 0); v1 = v16; if ( v12 ) { v16[2] = -2147483628; } else { v13 = (*(int (__stdcall **)(_DWORD *))(*(_DWORD *)v16[17] + 32))(v5); if ( v13 ) { v16[2] = v13; v5[14] = 4; } else { v5[14] = 2; v5[13] = sub_8B2570(v6); } } } } } result = v15 + 1; v15 = result; } while ( result < v14 ); result = v1[2]; } return result; } //----- (008B3060) -------------------------------------------------------- signed int __thiscall sub_8B3060(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ebx int v5; // eax unsigned int *v6; // esi unsigned int v7; // eax int v8; // eax unsigned int v9; // [esp+8h] [ebp-4h] unsigned int v10; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; if ( !a2 ) return -2147483646; if ( !this[26] ) return -2147483633; sub_8B6400(a2); v9 = *(_DWORD *)(v3[26] + 36); if ( v9 ) { v10 = 0; do { v5 = sub_8B60E0((_DWORD *)v3[26], v10); v6 = (unsigned int *)v5; if ( v5 ) { v7 = *(_DWORD *)(v5 + 16); if ( v7 & 0x10000000 ) { if ( v7 > 0x1000010F || v7 < 0x10000100 && v7 - 268435457 > 7 ) { if ( (v7 & 0x10010100) == 268501248 || (v7 & 0x10010000) == 268500992 || (v7 & 0x10010001) == 268500993 || (v7 & 0x10010002) == 268500994 || (v7 & 0x10010003) == 268500995 || (v7 & 0x10001004) == 268439556 || (v7 & 0x10001005) == 268439557 || (v7 & 0x10001006) == 268439558 || (v7 & 0x10001007) == 268439559 ) { v6[14] = 6; } } else { v6[13] = sub_8B2570(v6[4]); v8 = (*(int (__thiscall **)(_DWORD *, unsigned int *))(*v2 + 32))(v2, v6); if ( v8 ) v3[2] = v8; } } } ++v10; } while ( v10 < v9 ); } return 0; } //----- (008B31D0) -------------------------------------------------------- _DWORD *__thiscall sub_8B31D0(_DWORD *this, _DWORD *a2, _DWORD **a3) { _DWORD *v3; // esi _DWORD *v4; // edi int *v5; // edi int v6; // eax int v7; // eax _DWORD *result; // eax _DWORD *v9; // edx _DWORD *v10; // eax int v11; // ebx v3 = this; v4 = *a3; if ( *a3 == (_DWORD *)this[1] ) { *a3 = (_DWORD *)*v4; v5 = (int *)this[1]; v6 = *v5; this[1] = *v5; if ( v6 ) *(_DWORD *)(v6 + 4) = 0; else this[2] = 0; v7 = v5[2]; *a2 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); (*(void (__thiscall **)(_DWORD *, int *))(*v3 + 8))(v3, v5); --v3[3]; result = a2; } else if ( v4 == (_DWORD *)this[2] ) { *a3 = 0; sub_8AD0F0(this, a2); result = a2; } else { v9 = (_DWORD *)v4[1]; v10 = (_DWORD *)*v4; *a3 = (_DWORD *)*v4; if ( v9 ) *v9 = v10; if ( v10 ) v10[1] = v9; v11 = v4[2]; if ( v11 ) InterlockedIncrement((volatile LONG *)(v11 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 8))(v3, v4); --v3[3]; *a2 = v11; if ( v11 ) { InterlockedIncrement((volatile LONG *)(v11 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); } result = a2; } return result; } //----- (008B32B0) -------------------------------------------------------- int *__thiscall sub_8B32B0(void **this, unsigned int a2) { void **v2; // esi int *v3; // eax _DWORD *v4; // edi int *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = (int *)operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_8B26D0(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 28; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = (int)v2[5]; v2[5] = result; return result; } //----- (008B33A0) -------------------------------------------------------- _DWORD *__thiscall sub_8B33A0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // eax bool v4; // zf _DWORD *v5; // eax _DWORD *v6; // edi _DWORD *v7; // ST00_4 void (__stdcall ***v9)(signed int); // [esp+Ch] [ebp-Ch] signed int v10; // [esp+10h] [ebp-8h] _DWORD *v11; // [esp+10h] [ebp-8h] _DWORD *v12; // [esp+14h] [ebp-4h] v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiInputSystem::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = -100; v1[9] = 100; *((_BYTE *)v1 + 40) = 0; v1[14] = 0; v1[12] = 0; v1[13] = 0; v1[11] = &NiTPointerList>::`vftable'; v1[16] = 0; v1[17] = 0; v2 = v1 + 18; *v2 = 0; v2[1] = 0; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v1[26] = 0; v1[31] = 0; v1[29] = 0; v1[30] = 0; v1[28] = &NiTPointerList::`vftable'; v1[32] = 0; v12 = v1 + 18; v10 = 8; do { v3 = *v2; v9 = (void (__stdcall ***)(signed int))v3; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v9 ) (**v9)(1); *v12 = 0; } v2 = v12 + 1; v4 = v10-- == 1; ++v12; } while ( !v4 ); v5 = (_DWORD *)v1[29]; if ( v5 ) { while ( 1 ) { v11 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[28] + 8))(v1 + 28, v5); if ( !v11 ) break; v5 = v11; } } v1[31] = 0; v1[29] = 0; v1[30] = 0; v6 = (_DWORD *)v1[12]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[11] + 8))(v1 + 11, v7); } v1[14] = 0; v1[12] = 0; v1[13] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B424: using guessed type void *NiTPointerList>::`vftable'; // A2B434: using guessed type void *NiTPointerList::`vftable'; // A2B444: using guessed type void *NiInputSystem::`vftable'; //----- (008B34E0) -------------------------------------------------------- void *sub_8B34E0() { return &unk_BA54CC; } //----- (008B34F0) -------------------------------------------------------- int __thiscall sub_8B34F0(_DWORD *this) { _DWORD *v1; // eax v1 = (_DWORD *)this[12]; this[15] = v1; if ( !v1 ) return 0; this[15] = *v1; return v1[2]; } //----- (008B3510) -------------------------------------------------------- int __thiscall sub_8B3510(_DWORD *this) { _DWORD *v1; // eax if ( !this[15] ) return 0; v1 = (_DWORD *)this[15]; this[15] = *v1; return v1[2]; } //----- (008B3530) -------------------------------------------------------- int __thiscall sub_8B3530(_DWORD *this) { return this[31]; } //----- (008B3540) -------------------------------------------------------- int __thiscall sub_8B3540(_DWORD *this) { _DWORD *v1; // esi int *v2; // ecx int v3; // eax int v4; // edi if ( !this[31] ) return 0; v1 = this + 28; v2 = (int *)this[29]; v3 = *v2; v1[1] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[2] = 0; v4 = v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v1 + 8))(v1, v2); --v1[3]; return v4; } //----- (008B3580) -------------------------------------------------------- int __thiscall sub_8B3580(_DWORD *this) { _DWORD *v1; // eax v1 = (_DWORD *)this[29]; this[27] = v1; if ( !v1 ) return 0; this[27] = *v1; return v1[2]; } //----- (008B35A0) -------------------------------------------------------- int __thiscall sub_8B35A0(_DWORD *this) { _DWORD *v1; // eax if ( !this[27] ) return 0; v1 = (_DWORD *)this[27]; this[27] = *v1; return v1[2]; } //----- (008B35C0) -------------------------------------------------------- int __thiscall sub_8B35C0(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi v2 = a2; v3 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_8B8EC0(v3 + 11, &a2); if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return v3[14]; } //----- (008B3610) -------------------------------------------------------- _DWORD *__thiscall sub_8B3610(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // edi unsigned int v3; // eax unsigned int v4; // ebx int v5; // eax unsigned int *v6; // esi unsigned int v7; // eax int v8; // eax unsigned int v10; // [esp+Ch] [ebp-10h] signed int v11; // [esp+10h] [ebp-Ch] _DWORD **v12; // [esp+14h] [ebp-8h] _DWORD **v13; // [esp+18h] [ebp-4h] v1 = this; v13 = this; v12 = this + 18; v11 = 8; do { v2 = *v12; if ( *v12 ) { if ( v1[26] ) { sub_8B6400(*v12); v3 = v1[26][9]; v10 = v3; if ( v3 ) { v4 = 0; if ( v3 ) { do { v5 = sub_8B60E0(v1[26], v4); v6 = (unsigned int *)v5; if ( v5 ) { v7 = *(_DWORD *)(v5 + 16); if ( v7 & 0x10000000 ) { if ( v7 > 0x1000010F || v7 < 0x10000100 && v7 - 268435457 > 7 ) { if ( (v7 & 0x10010100) == 268501248 || (v7 & 0x10010000) == 268500992 || (v7 & 0x10010001) == 268500993 || (v7 & 0x10010002) == 268500994 || (v7 & 0x10010003) == 268500995 || (v7 & 0x10001004) == 268439556 || (v7 & 0x10001005) == 268439557 || (v7 & 0x10001006) == 268439558 || (v7 & 0x10001007) == 268439559 ) { v6[14] = 6; } } else { v6[13] = sub_8B2570(v6[4]); v8 = (*(int (__thiscall **)(_DWORD *, unsigned int *))(*v2 + 32))(v2, v6); if ( v8 ) v13[2] = (_DWORD *)v8; } } } v1 = v13; ++v4; } while ( v4 < v10 ); } } } else { v1[2] = (_DWORD *)-2147483633; } } ++v12; --v11; } while ( v11 ); return v1[2]; } //----- (008B37A0) -------------------------------------------------------- _DWORD *__thiscall sub_8B37A0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // eax _DWORD *v4; // edx _DWORD *v5; // esi int v6; // eax char v7; // bl int *v8; // eax _DWORD *v9; // esi int v10; // eax void (__thiscall ***v11)(_DWORD, signed int); // esi int v13; // [esp+8h] [ebp-8h] int v14; // [esp+Ch] [ebp-4h] v13 = 0; v3 = (_DWORD *)this[1]; if ( v3 ) { while ( 1 ) { v4 = v3 + 2; v5 = v3; v3 = (_DWORD *)*v3; if ( *a3 == *v4 ) break; if ( !v3 ) goto LABEL_4; } v6 = (int)v5; } else { LABEL_4: v6 = 0; } v14 = v6; if ( v6 ) { v7 = 1; v8 = sub_8B31D0(this, &v13, (_DWORD **)&v14); v9 = a3; } else { v9 = (_DWORD *)*a3; v7 = 2; a3 = v9; if ( v9 ) InterlockedIncrement(v9 + 1); v8 = (int *)&a3; } v10 = *v8; *a2 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); if ( v7 & 2 ) { v7 &= 0xFDu; if ( v9 ) { if ( !InterlockedDecrement(v9 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); } } if ( v7 & 1 ) { v11 = (void (__thiscall ***)(_DWORD, signed int))v13; if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v11 ) (**v11)(v11, 1); } } return a2; } //----- (008B3880) -------------------------------------------------------- signed int __thiscall sub_8B3880(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi unsigned int v3; // ebx _DWORD *v4; // eax signed int result; // eax v1 = this; v2 = sub_8B2DF0(this); v3 = sub_8B2F00(v1); v4 = sub_8B3610((_DWORD **)v1); if ( v2 ) { v1[2] = -2147483630; result = -2147483632; } else if ( v3 ) { v1[2] = -2147483629; result = -2147483632; } else { if ( v4 ) v1[2] = -2147483631; result = -2147483632; } return result; } //----- (008B38E0) -------------------------------------------------------- _DWORD *__thiscall sub_8B38E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *result; // eax int v5; // esi void (__thiscall ***v6)(_DWORD, signed int); // ebx v3 = this; result = (_DWORD *)this[12]; if ( result ) { while ( 1 ) { v5 = result[2]; result = (_DWORD *)*result; if ( v5 ) { if ( *(_DWORD *)(v5 + 12) == a2 && *(_DWORD *)(v5 + 16) == a3 ) break; } if ( !result ) return result; } a3 = v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); sub_8B37A0(v3 + 11, &a2, &a3); v6 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v6)(v6, 1); result = (_DWORD *)InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !result ) result = (_DWORD *)(**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } return result; } //----- (008B3970) -------------------------------------------------------- LONG __thiscall sub_8B3970(_DWORD *this) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // ebx int v4; // edi int v5; // esi unsigned int v6; // edx unsigned int v7; // eax _DWORD *v8; // ecx int v9; // eax void *v10; // eax void *v11; // esi int v12; // esi int v13; // esi int v14; // edi signed int v15; // ebx int v16; // esi int v17; // esi int v18; // esi int v19; // esi _DWORD *v21; // [esp+Ch] [ebp-4h] v1 = this; *this = &NiInputSystem::`vftable'; v2 = this[26]; v21 = this; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[26] = 0; } v3 = (_DWORD *)v1[29]; if ( v3 ) { do { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { v5 = v21[32]; v6 = *(_DWORD *)(v5 + 8); v7 = 0; if ( !v6 ) goto LABEL_14; v8 = *(_DWORD **)v5; while ( *v8 != v4 ) { ++v7; ++v8; if ( v7 >= v6 ) goto LABEL_14; } if ( v7 == -1 ) { LABEL_14: v9 = *(_DWORD *)(v5 + 4); if ( v6 == v9 ) { if ( v9 ) v10 = (void *)(2 * v9); else v10 = (void *)1; sub_811D30((void **)v5, v10); } *(_DWORD *)(*(_DWORD *)v5 + 4 * (*(_DWORD *)(v5 + 8))++) = v4; } } } while ( v3 ); v1 = v21; } v11 = (void *)v1[32]; if ( v11 ) { sub_8B6100((void **)v1[32]); operator delete(v11); } sub_8B6160(); v12 = v1[3]; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v1[3] = 0; } sub_8B2950(v1 + 28); v13 = v1[26]; v14 = (int)(v1 + 26); if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v15 = 7; do { v16 = *(_DWORD *)(v14 - 4); v14 -= 4; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); --v15; } while ( v15 >= 0 ); v17 = v21[17]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v21[16]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); sub_8B2910(v21 + 11); v19 = v21[3]; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *v21 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B444: using guessed type void *NiInputSystem::`vftable'; //----- (008B3B40) -------------------------------------------------------- signed int __thiscall sub_8B3B40(_DWORD *this, int a2) { _DWORD *v2; // esi signed int result; // eax int v4; // edi bool v5; // zf _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *v8; // ecx _DWORD **v9; // edi signed int v10; // ebx void *v11; // edi v2 = this; if ( a2 == this[26] ) return 0; v4 = this[26]; if ( v4 != a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[26] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } if ( v2[26] ) { v5 = v2[32] == 0; v2[4] = 1; if ( v5 ) { v6 = operator new(0x18u); if ( v6 ) { *v6 = 0; v6[1] = 0; v6[2] = 0; v6[3] = 8; v6[4] = 8; v6[5] = 0; } else { v6 = 0; } v2[32] = v6; } result = sub_8B3880(v2); v2[2] = result; } else { if ( v2[4] == 1 ) { (*(void (__thiscall **)(_DWORD *))(*v2 + 64))(v2); v7 = (_DWORD *)v2[16]; if ( v7 ) sub_8B6400(v7); v8 = (_DWORD *)v2[17]; if ( v8 ) sub_8B6400(v8); v9 = (_DWORD **)(v2 + 18); v10 = 8; do { if ( *v9 ) sub_8B6400(*v9); ++v9; --v10; } while ( v10 ); v11 = (void *)v2[32]; if ( v11 ) { sub_8B6100((void **)v2[32]); operator delete(v11); } v2[32] = 0; v2[4] = 0; } result = v2[2]; } return result; } //----- (008B3C60) -------------------------------------------------------- int __thiscall sub_8B3C60(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // eax int v4; // ebx int v5; // esi unsigned int v6; // edx unsigned int v7; // eax _DWORD *v8; // ecx int v9; // eax void *v10; // eax _DWORD *v11; // esi _DWORD *v12; // ST04_4 int result; // eax v1 = this; v2 = this[29]; this[27] = v2; if ( v2 ) { do { v3 = (_DWORD *)v1[27]; v1[27] = *v3; v4 = v3[2]; if ( v4 ) { v5 = v1[32]; v6 = *(_DWORD *)(v5 + 8); v7 = 0; if ( !v6 ) goto LABEL_9; v8 = *(_DWORD **)v5; while ( *v8 != v4 ) { ++v7; ++v8; if ( v7 >= v6 ) goto LABEL_9; } if ( v7 == -1 ) { LABEL_9: v9 = *(_DWORD *)(v5 + 4); if ( v6 == v9 ) { if ( v9 ) v10 = (void *)(2 * v9); else v10 = (void *)1; sub_811D30((void **)v5, v10); } *(_DWORD *)(*(_DWORD *)v5 + 4 * (*(_DWORD *)(v5 + 8))++) = v4; } } } while ( v1[27] ); } v11 = (_DWORD *)v1[29]; while ( v11 ) { v12 = v11; v11 = (_DWORD *)*v11; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[28] + 8))(v1 + 28, v12); } result = 0; v1[31] = 0; v1[29] = 0; v1[30] = 0; return result; } //----- (008B3D00) -------------------------------------------------------- int __thiscall sub_8B3D00(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // ebx void **v7; // esi _DWORD *v8; // eax _DWORD *v9; // edi int v10; // ecx int v11; // ecx _DWORD *v12; // eax _DWORD *v13; // ecx v6 = this; v7 = (void **)this[32]; if ( v7 ) { if ( !v7[2] ) { sub_8B32B0(v7, (unsigned int)v7[3]); v7[3] = (void *)(2 * (_DWORD)v7[3]); } v8 = *v7; v9 = *(_DWORD **)*v7; v7[2] = (char *)v7[2] - 1; *v8 = v8[(_DWORD)v7[2]]; } else { v9 = 0; } v9[1] = a3; v9[3] = a5; if ( a4 ) { v9[6] = a4; } else { v10 = dword_BA54C8++; v9[6] = v10; } v11 = *(_DWORD *)(*(_DWORD *)(a2 + 8) + 12) | (*(_DWORD *)(*(_DWORD *)(a2 + 8) + 16) << 16); v9[4] = a6; v9[2] = v11; v12 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v6[28] + 4))(v6 + 28); v12[2] = v9; *v12 = 0; v12[1] = v6[30]; v13 = (_DWORD *)v6[30]; if ( v13 ) { *v13 = v12; ++v6[31]; } else { ++v6[31]; v6[29] = v12; } v6[30] = v12; return 0; } // BA54C8: using guessed type int dword_BA54C8; //----- (008B3DD0) -------------------------------------------------------- void *__thiscall sub_8B3DD0(void *this, char a2) { void *v2; // esi v2 = this; sub_8B3970(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B3E00) -------------------------------------------------------- _DWORD *__thiscall sub_8B3E00(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8B33A0(this); v1[34] = 0; v1[36] = 0; v1[119] = 0; *v1 = &NiDI8InputSystem::`vftable'; v1[35] = 21; v1[120] = 0; v1[121] = 0; v1[122] = 0; v1[123] = 0; v1[124] = 0; v1[125] = 0; v1[126] = 0; v1[127] = 0; v1[128] = 0; v1[129] = 0; v1[130] = 0; v1[131] = 0; v1[132] = 0; v1[133] = 0; v1[134] = 0; v1[135] = 0; v1[136] = 0; v1[137] = 0; v1[138] = 0; v1[139] = 0; v1[140] = 0; return v1; } // A2B4FC: using guessed type void *NiDI8InputSystem::`vftable'; //----- (008B3ED0) -------------------------------------------------------- int __thiscall sub_8B3ED0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi v2 = this; if ( !sub_8B2C20(this, a2) ) { if ( dword_BA54E0 && dword_BA54E4 ) { if ( DirectInput8Create(dword_BA54E0, 2048, &unk_A48274, v2 + 34, 0) < 0 ) { v2[2] = -2147483645; return v2[2]; } } else { v2[2] = -2147483646; } } return v2[2]; } // 9447F6: using guessed type int __stdcall DirectInput8Create(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA54E0: using guessed type int dword_BA54E0; // BA54E4: using guessed type int dword_BA54E4; //----- (008B3F30) -------------------------------------------------------- int __thiscall sub_8B3F30(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; sub_8B2D30(this); v2 = v1[34]; if ( v2 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 8))(v1[34]); v1[34] = 0; v1[33] = 0; if ( hLibModule ) { FreeLibrary(hLibModule); hLibModule = 0; } return 0; } //----- (008B3F80) -------------------------------------------------------- int __thiscall sub_8B3F80(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // eax int v4; // eax int result; // eax v2 = this; if ( a2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 32))(a2); v3 = (*(int (__stdcall **)(int, _DWORD *, _DWORD, _DWORD))(*(_DWORD *)a2 + 116))(a2, v2 + 37, 0, 0); if ( v3 < 0 ) { sub_8B2630("BuildActionMap> Failed - 0x%08x!\n", v3); LABEL_6: v2[2] = -2147483636; return v2[2]; } v4 = (*(int (__stdcall **)(int, _DWORD *, _DWORD, _DWORD))(*(_DWORD *)a2 + 120))(a2, v2 + 37, 0, 0); if ( v4 < 0 ) { sub_8B2630("SetActionMap> Failed - 0x%08x!\n", v4); goto LABEL_6; } (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 28))(a2); result = v2[2]; } else { this[2] = -2147483646; result = this[2]; } return result; } //----- (008B4010) -------------------------------------------------------- signed int __thiscall sub_8B4010(_BYTE *this) { if ( !this[40] ) return -2147483600; this[40] = 0; return 0; } //----- (008B4030) -------------------------------------------------------- void __thiscall sub_8B4030(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[1]); v2[1] = 0; if ( Src && *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[1] = v4; strcpy_s(v4, v3 + 1, Src); } else { v2[1] = 0; } } //----- (008B4090) -------------------------------------------------------- void __thiscall sub_8B4090(void **this, char *Src) { void **v2; // edi unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[5]); v2[5] = 0; if ( Src && *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[5] = v4; strcpy_s(v4, v3 + 1, Src); } else { v2[5] = 0; } } //----- (008B40F0) -------------------------------------------------------- void __thiscall sub_8B40F0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[6]); v2[6] = 0; if ( !Src || !strcmp(Src, &byte_9A8050) ) { v2[6] = 0; } else { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[6] = v4; strcpy_s(v4, v3 + 1, Src); } } //----- (008B4180) -------------------------------------------------------- void *sub_8B4180() { return &unk_BA54EC; } //----- (008B4190) -------------------------------------------------------- int __thiscall sub_8B4190(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiInputDevice::ControlDesc *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiInputDevice::ControlDesc *>::`vftable'; return result; } // A2B5C0: using guessed type void *NiTListBase,NiInputDevice::ControlDesc *>::`vftable'; // A2B5D0: using guessed type void *NiTPointerListBase,NiInputDevice::ControlDesc *>::`vftable'; //----- (008B41D0) -------------------------------------------------------- void *__thiscall sub_8B41D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiInputDevice::ControlDesc *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2B5C0: using guessed type void *NiTListBase,NiInputDevice::ControlDesc *>::`vftable'; //----- (008B4200) -------------------------------------------------------- LONG __thiscall sub_8B4200(void **this) { void **v1; // edi void **v2; // esi signed int v3; // ebx void *v4; // eax v1 = this; *this = &NiDI8InputSystem::`vftable'; v2 = this + 120; v3 = 21; do { if ( *v2 ) operator delete(*v2); ++v2; --v3; } while ( v3 ); operator delete(v1[36]); sub_8B2D30(v1); v4 = v1[34]; if ( v4 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v4 + 8))(v1[34]); v1[34] = 0; v1[33] = 0; if ( hLibModule ) { FreeLibrary(hLibModule); hLibModule = 0; } return sub_8B3970(v1); } // A2B4FC: using guessed type void *NiDI8InputSystem::`vftable'; //----- (008B4290) -------------------------------------------------------- int __thiscall sub_8B4290(_DWORD *this) { _DWORD *v1; // ebx int v2; // ecx unsigned int v3; // esi int v4; // eax int v5; // ecx int v6; // eax int v7; // edi int v8; // eax char v10; // [esp+Bh] [ebp-25h] v1 = this; v2 = this[16]; v3 = 0; v1[2] = 0; v10 = 0; if ( v2 ) { v4 = (*(int (**)(void))(*(_DWORD *)v2 + 20))(); if ( v4 == -2147483642 ) v10 = 1; *(_DWORD *)(v1[16] + 28) = v4; } v5 = v1[17]; if ( v5 ) { v6 = (*(int (**)(void))(*(_DWORD *)v5 + 20))(); if ( v6 == -2147483642 ) v10 = 1; *(_DWORD *)(v1[17] + 28) = v6; } v7 = (int)(v1 + 18); do { if ( *(_DWORD *)v7 ) { v8 = (*(int (**)(void))(**(_DWORD **)v7 + 20))(); if ( v8 == -2147483642 ) v10 = 1; *(_DWORD *)(*(_DWORD *)v7 + 28) = v8; } ++v3; v7 += 4; } while ( v3 < 8 ); if ( v10 ) v1[2] = -2147483642; return v1[2]; } //----- (008B4340) -------------------------------------------------------- char __thiscall sub_8B4340(void **this, int a2, char *Src) { void **v3; // edi char *v5; // eax rsize_t v6; // esi char *v7; // eax v3 = this; if ( a2 >= 21 ) return 0; if ( this[a2 + 120] ) { operator delete(this[a2 + 120]); v3[a2 + 120] = 0; } if ( Src ) { v5 = &Src[strlen(Src) + 1]; v6 = v5 - Src; v7 = (char *)operator new(v5 - Src); v3[a2 + 120] = v7; strcpy_s(v7, v6, Src); } return 1; } //----- (008B43C0) -------------------------------------------------------- char __thiscall sub_8B43C0(void *this, int a2, int a3) { char result; // al if ( !a2 || !a3 ) return 0; *(_DWORD *)(a3 + 12) = (*(int (**)(void))(*(_DWORD *)this + 104))(); if ( a2 == -4 ) { *(_DWORD *)(a3 + 64) = 0; *(_DWORD *)(a3 + 68) = 0; *(_DWORD *)(a3 + 72) = 0; *(_DWORD *)(a3 + 76) = 0; } else { memcpy_s((void *)(a3 + 64), 0x10u, (const void *)(a2 + 4), 0x10u); } sub_8B4090((void **)a3, (char *)(a2 + 300)); sub_8B40F0((void **)a3, (char *)(a2 + 40)); switch ( *(unsigned __int8 *)(a2 + 36) ) { case 0x12u: case 0x1Au: *(_DWORD *)(a3 + 8) = 2; result = 1; break; case 0x13u: *(_DWORD *)(a3 + 8) = 1; result = 1; break; case 0x14u: case 0x15u: case 0x16u: case 0x17u: case 0x18u: case 0x1Cu: *(_DWORD *)(a3 + 8) = 3; goto LABEL_10; default: LABEL_10: result = 1; break; } return result; } //----- (008B44A0) -------------------------------------------------------- char __thiscall sub_8B44A0(void **this) { void **v1; // esi void *v2; // eax void *v4; // eax void *v5; // eax void *v6; // eax void *v7; // eax void *v8; // eax void *v9; // eax void *v10; // eax void *v11; // eax void *v12; // eax void *v13; // eax void *v14; // eax void *v15; // eax void *v16; // eax void *v17; // eax void *v18; // eax void *v19; // eax void *v20; // eax void *v21; // eax void *v22; // eax void *v23; // eax void *v24; // eax void *v25; // eax void *v26; // edx void *v27; // ecx void *v28; // eax v1 = this; operator delete(this[36]); v2 = operator new(40 * (_DWORD)v1[35]); v1[36] = v2; if ( !v2 ) return 0; memset(v2, 0, 40 * (_DWORD)v1[35]); *(_DWORD *)v1[36] = 0; *((_DWORD *)v1[36] + 1) = 151142916; v4 = v1[120]; if ( v4 ) *((_DWORD *)v1[36] + 3) = v4; else *((_DWORD *)v1[36] + 3) = "Stick 1 Horz"; *((_DWORD *)v1[36] + 10) = 1; *((_DWORD *)v1[36] + 11) = 151060994; v5 = v1[121]; if ( v5 ) *((_DWORD *)v1[36] + 13) = v5; else *((_DWORD *)v1[36] + 13) = "Stick 1 Vert"; *((_DWORD *)v1[36] + 20) = 2; *((_DWORD *)v1[36] + 21) = 151028225; v6 = v1[122]; if ( v6 ) *((_DWORD *)v1[36] + 23) = v6; else *((_DWORD *)v1[36] + 23) = "Stick 2 Horz"; *((_DWORD *)v1[36] + 30) = 3; *((_DWORD *)v1[36] + 31) = 151093763; v7 = v1[123]; if ( v7 ) *((_DWORD *)v1[36] + 33) = v7; else *((_DWORD *)v1[36] + 33) = "Stick 2 Vert"; *((_DWORD *)v1[36] + 40) = 4; *((_DWORD *)v1[36] + 41) = -16760319; v8 = v1[124]; if ( v8 ) *((_DWORD *)v1[36] + 43) = v8; else *((_DWORD *)v1[36] + 43) = "Stick 3 Horz"; *((_DWORD *)v1[36] + 50) = 5; *((_DWORD *)v1[36] + 51) = -16760318; v9 = v1[125]; if ( v9 ) *((_DWORD *)v1[36] + 53) = v9; else *((_DWORD *)v1[36] + 53) = "Stick 3 Vert"; *((_DWORD *)v1[36] + 60) = 6; *((_DWORD *)v1[36] + 61) = -16760317; v10 = v1[126]; if ( v10 ) *((_DWORD *)v1[36] + 63) = v10; else *((_DWORD *)v1[36] + 63) = "Stick 4 Horz"; *((_DWORD *)v1[36] + 70) = 7; *((_DWORD *)v1[36] + 71) = -16760316; v11 = v1[127]; if ( v11 ) *((_DWORD *)v1[36] + 73) = v11; else *((_DWORD *)v1[36] + 73) = "Stick 4 Vert"; *((_DWORD *)v1[36] + 80) = 8; *((_DWORD *)v1[36] + 81) = 151012865; v12 = v1[128]; if ( v12 ) *((_DWORD *)v1[36] + 83) = v12; else *((_DWORD *)v1[36] + 83) = "D-Pad (LUP/DOWN/LEFT/RIGHT)"; *((_DWORD *)v1[36] + 90) = 9; *((_DWORD *)v1[36] + 91) = -16759808; v13 = v1[129]; if ( v13 ) *((_DWORD *)v1[36] + 93) = v13; else *((_DWORD *)v1[36] + 93) = "R UP"; *((_DWORD *)v1[36] + 100) = 10; *((_DWORD *)v1[36] + 101) = -16759807; v14 = v1[130]; if ( v14 ) *((_DWORD *)v1[36] + 103) = v14; else *((_DWORD *)v1[36] + 103) = "R DOWN"; *((_DWORD *)v1[36] + 110) = 11; *((_DWORD *)v1[36] + 111) = -16759806; v15 = v1[131]; if ( v15 ) *((_DWORD *)v1[36] + 113) = v15; else *((_DWORD *)v1[36] + 113) = "R LEFT"; *((_DWORD *)v1[36] + 120) = 12; *((_DWORD *)v1[36] + 121) = -16759805; v16 = v1[132]; if ( v16 ) *((_DWORD *)v1[36] + 123) = v16; else *((_DWORD *)v1[36] + 123) = "R RIGHT"; *((_DWORD *)v1[36] + 130) = 13; *((_DWORD *)v1[36] + 131) = -16759804; v17 = v1[133]; if ( v17 ) *((_DWORD *)v1[36] + 133) = v17; else *((_DWORD *)v1[36] + 133) = "L1"; *((_DWORD *)v1[36] + 140) = 14; *((_DWORD *)v1[36] + 141) = -16759803; v18 = v1[134]; if ( v18 ) *((_DWORD *)v1[36] + 143) = v18; else *((_DWORD *)v1[36] + 143) = "R1"; *((_DWORD *)v1[36] + 150) = 15; *((_DWORD *)v1[36] + 151) = -16759802; v19 = v1[135]; if ( v19 ) *((_DWORD *)v1[36] + 153) = v19; else *((_DWORD *)v1[36] + 153) = "START"; *((_DWORD *)v1[36] + 160) = 16; *((_DWORD *)v1[36] + 161) = -16759801; v20 = v1[136]; if ( v20 ) *((_DWORD *)v1[36] + 163) = v20; else *((_DWORD *)v1[36] + 163) = "SELECT"; *((_DWORD *)v1[36] + 170) = 17; *((_DWORD *)v1[36] + 171) = -16759800; v21 = v1[137]; if ( v21 ) *((_DWORD *)v1[36] + 173) = v21; else *((_DWORD *)v1[36] + 173) = "L2"; *((_DWORD *)v1[36] + 180) = 18; *((_DWORD *)v1[36] + 181) = -16759799; v22 = v1[138]; if ( v22 ) *((_DWORD *)v1[36] + 183) = v22; else *((_DWORD *)v1[36] + 183) = "R2"; *((_DWORD *)v1[36] + 190) = 19; *((_DWORD *)v1[36] + 191) = -16759798; v23 = v1[139]; if ( v23 ) *((_DWORD *)v1[36] + 193) = v23; else *((_DWORD *)v1[36] + 193) = "A"; *((_DWORD *)v1[36] + 200) = 20; *((_DWORD *)v1[36] + 201) = -16759797; v24 = v1[140]; if ( v24 ) *((_DWORD *)v1[36] + 203) = v24; else *((_DWORD *)v1[36] + 203) = "B"; memset(v1 + 37, 0, 0x148u); v25 = v1[35]; v1[40] = v25; v1[38] = (void *)40; v1[39] = (void *)(4 * (_DWORD)v25); v1[37] = (void *)328; v1[42] = (void *)-1067344412; v1[43] = (void *)1108444289; v1[44] = (void *)-172480120; v26 = v1[36]; v1[45] = (void *)-1813000734; v27 = v1[9]; v1[47] = v25; v28 = v1[8]; v1[46] = (void *)150994944; v1[41] = v26; v1[48] = v28; v1[49] = v27; strcpy_s((char *)v1 + 216, 0x104u, "NiInput Default"); return 1; } //----- (008B4B70) -------------------------------------------------------- int __cdecl sub_8B4B70(int a1, int a2) { int v3; // eax if ( !a2 ) return 0; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 16))(a2); if ( !v3 ) return 0; while ( v3 != a1 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 0; } return a2; } //----- (008B4BC0) -------------------------------------------------------- int __thiscall sub_8B4BC0(_DWORD **this) { int v1; // esi int v3; // eax v1 = *(_DWORD *)((*(int (__stdcall **)(_DWORD))(*this[418] + 96))(0) + 16); if ( !v1 ) return 20; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 16))(v1); if ( !v3 ) return 20; while ( (_UNKNOWN *)v3 != &unk_BA6EC8 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 20; } return v1 + 20; } //----- (008B4C20) -------------------------------------------------------- int __thiscall sub_8B4C20(int this, int a2, char *Src, int a4, int a5) { int v5; // esi v5 = this; *(_DWORD *)this = a2; *(_DWORD *)(this + 8) = a4; *(_DWORD *)(this + 4) = 0; *(_DWORD *)(this + 12) = a5; sub_8B4030((void **)this, Src); return v5; } //----- (008B4C50) -------------------------------------------------------- void *__thiscall sub_8B4C50(void *this, char a2) { void *v2; // esi v2 = this; sub_8B4190(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B4C80) -------------------------------------------------------- void *__thiscall sub_8B4C80(void *this, char a2) { void *v2; // esi v2 = this; sub_8B4200((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B4CB0) -------------------------------------------------------- unsigned int __thiscall sub_8B4CB0(_DWORD *this, unsigned int a2, int a3) { unsigned int result; // eax int v4; // edx result = 0; if ( this[34] ) { v4 = (int)(this + 18); if ( a2 >= 8 ) { while ( !*(_DWORD *)v4 ) { ++result; v4 += 4; if ( result >= 8 ) return 0; } result = this[result + 18]; } else { while ( !*(_DWORD *)v4 || *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v4 + 8) + 12) != a2 ) { ++result; v4 += 4; if ( result >= 8 ) return 0; } result = this[a2 + 18]; } } else { this[2] = -2147483646; } return result; } //----- (008B4D20) -------------------------------------------------------- int __thiscall sub_8B4D20(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax int v7; // [esp+4h] [ebp-4h] v1 = this; if ( !this[34] ) { this[2] = -2147483646; return 0; } result = this[17]; if ( !result ) { v3 = (*(int (**)(void))(*this + 108))(); if ( !v3 ) { LABEL_7: v1[2] = -2147483643; return 0; } while ( *(_DWORD *)(v3 + 8) != 2 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v1 + 112))(v1); if ( !v3 ) goto LABEL_7; } v4 = v1[34]; v7 = 0; if ( (*(int (__stdcall **)(int, int, int *, _DWORD))(*(_DWORD *)v4 + 12))(v4, v3 + 64, &v7, 0) < 0 ) { v1[2] = -2147483641; return 0; } v5 = operator new(0x10Cu); if ( v5 ) { v6 = sub_8B66D0(v5, v3, v7, v1[6]); if ( v6 && !v1[2] ) { v6[3] = 0; sub_56FF80(v1 + 17, (int)v6); sub_8B2F00(v1); return v1[17]; } } else { v6 = 0; } v1[2] = -2147483641; if ( v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); result = 0; } return result; } //----- (008B4E20) -------------------------------------------------------- int __thiscall sub_8B4E20(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // edi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // eax int v7; // [esp+4h] [ebp-4h] v1 = this; if ( !this[34] ) { this[2] = -2147483646; return 0; } result = this[16]; if ( !result ) { v3 = (*(int (**)(void))(*this + 108))(); if ( !v3 ) { LABEL_7: v1[2] = -2147483643; return 0; } while ( *(_DWORD *)(v3 + 8) != 1 ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v1 + 112))(v1); if ( !v3 ) goto LABEL_7; } v4 = v1[34]; v7 = 0; if ( (*(int (__stdcall **)(int, int, int *, _DWORD))(*(_DWORD *)v4 + 12))(v4, v3 + 64, &v7, 0) < 0 ) { v1[2] = -2147483641; return 0; } v5 = operator new(0x56Cu); if ( v5 ) { v6 = sub_8B7630(v5, v3, v7, v1[5]); if ( v6 && !v1[2] ) { v6[3] = 0; sub_56FF80(v1 + 16, (int)v6); sub_8B2DF0(v1); return v1[16]; } } else { v6 = 0; } v1[2] = -2147483641; if ( v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); result = 0; } return result; } //----- (008B4F20) -------------------------------------------------------- signed int __stdcall sub_8B4F20(int a1, _DWORD *a2) { unsigned __int8 *v3; // esi void *v4; // eax void *v5; // esi void *v6; // eax if ( !a2 ) return 0; v3 = (unsigned __int8 *)(a1 + 4); if ( sub_46CE20((unsigned __int8 *)(a1 + 4), (unsigned __int8 *)&unk_A48284) || sub_46CE20(v3, (unsigned __int8 *)&unk_A48294) || sub_46CE20(v3, (unsigned __int8 *)&unk_A482A4) || sub_46CE20(v3, (unsigned __int8 *)&unk_A482B4) || sub_46CE20(v3, (unsigned __int8 *)&unk_A482C4) || sub_46CE20(v3, (unsigned __int8 *)&unk_A482D4) || sub_46CE20(v3, (unsigned __int8 *)&unk_A482E4) ) { v5 = operator new(0x14u); if ( v5 ) { *(_DWORD *)v5 = a2[11]; *((_DWORD *)v5 + 1) = 0; *((_DWORD *)v5 + 2) = 1; *((_DWORD *)v5 + 3) = 0; sub_8B4030((void **)v5, (char *)(a1 + 32)); } else { v5 = 0; } *((_DWORD *)v5 + 3) |= 0x12u; goto LABEL_23; } if ( sub_46CE20(v3, (unsigned __int8 *)&unk_A482F4) ) { v4 = operator new(0x14u); if ( v4 ) { v5 = (void *)sub_8B4C20((int)v4, a2[11], (char *)(a1 + 32), 0, 0); *((_DWORD *)v5 + 3) = *((_DWORD *)v5 + 3) & 0xFFFFFFFD | 0x11; goto LABEL_23; } goto LABEL_18; } if ( sub_46CE20(v3, (unsigned __int8 *)&unk_A48304) ) { ++a2[13]; return 1; } if ( sub_46CE20(v3, (unsigned __int8 *)&unk_A48314) ) { v6 = operator new(0x14u); if ( v6 ) { v5 = (void *)sub_8B4C20((int)v6, a2[11], (char *)(a1 + 32), 2, 0); *((_DWORD *)v5 + 3) = *((_DWORD *)v5 + 3) & 0xFFFFFFFD | 0x11; goto LABEL_23; } LABEL_18: v5 = 0; MEMORY[0xC] = MEMORY[0xC] & 0xFFFFFFFD | 0x11; LABEL_23: *((_DWORD *)v5 + 4) = *(_DWORD *)(a1 + 24); if ( sub_8B6420(a2, (int)v5) == -1 ) { operator delete(*((void **)v5 + 1)); operator delete(v5); } } return 1; } //----- (008B5100) -------------------------------------------------------- int __thiscall sub_8B5100(_DWORD *this) { _DWORD *v1; // ebx _DWORD **v2; // esi int v3; // edi int v4; // edi int v5; // eax int v6; // edi signed int v7; // esi int v8; // esi signed int v9; // edi int v10; // ecx int v11; // ecx int v13; // [esp+Ch] [ebp-50h] int v14; // [esp+10h] [ebp-4Ch] int v15; // [esp+10h] [ebp-4Ch] char v16; // [esp+17h] [ebp-45h] int v17; // [esp+18h] [ebp-44h] int v18; // [esp+1Ch] [ebp-40h] int v19; // [esp+20h] [ebp-3Ch] int v20; // [esp+24h] [ebp-38h] _DWORD *v21; // [esp+28h] [ebp-34h] int v22; // [esp+2Ch] [ebp-30h] int v23; // [esp+54h] [ebp-8h] v1 = this; memset(&v17, 0, 0x40u); v2 = (_DWORD **)v1[3]; v21 = v1 + 37; v17 = 64; v18 = 1; v19 = 0; v20 = 1; v22 = dword_BA54E4; v16 = 0; if ( *(_DWORD *)(sub_8B4BC0(v2) + 32) ) { v4 = v14; } else { v16 = 1; v3 = ((int (__thiscall *)(_DWORD **))(*v2)[26])(v2); v13 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 60))(v3, 0); v4 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 64))(v3, 0); sub_929A60(v2, 640, 480, 0, dword_BA54E4, 0, 0, 1, 0, 0, 1, 0); } v5 = v1[34]; v23 = 0; v15 = (*(int (__stdcall **)(int, _DWORD, int *, signed int, _DWORD *))(*(_DWORD *)v5 + 40))(v5, 0, &v17, 1, v1); if ( v16 ) sub_929A60(v2, v13, v4, 4, dword_BA54E4, 0, 0, 1, 0, 0, 1, 0); if ( v15 >= 0 ) { v6 = (int)(v1 + 18); v7 = 8; do { if ( *(_DWORD *)v6 ) sub_8B3F80(v1, *(_DWORD *)(*(_DWORD *)v6 + 68)); v6 += 4; --v7; } while ( v7 ); v8 = (int)(v1 + 18); v9 = 8; do { if ( *(_DWORD *)v8 ) (*(void (**)(void))(**(_DWORD **)v8 + 20))(); v8 += 4; --v9; } while ( v9 ); v10 = v1[16]; if ( v10 ) (*(void (**)(void))(*(_DWORD *)v10 + 20))(); v11 = v1[17]; if ( v11 ) (*(void (**)(void))(*(_DWORD *)v11 + 20))(); (*(void (__thiscall **)(_DWORD *))(*v1 + 32))(v1); } return 0; } // BA54E4: using guessed type int dword_BA54E4; //----- (008B5280) -------------------------------------------------------- LONG __thiscall sub_8B5280(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 _DWORD *v3; // eax void **i; // edi _DWORD *v5; // eax _DWORD *v6; // edi _DWORD *v7; // ST04_4 v1 = this; v2 = (void *)this[6]; *this = &NiInputDevice::Description::`vftable'; operator delete(v2); operator delete((void *)v1[5]); v3 = (_DWORD *)v1[9]; v1[12] = v3; if ( v3 ) { v1[12] = *v3; for ( i = (void **)v3[2]; i; i = (void **)v5[2] ) { operator delete(i[1]); operator delete(i); if ( !v1[12] ) break; v5 = (_DWORD *)v1[12]; v1[12] = *v5; } } v6 = (_DWORD *)v1[9]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[8] + 8))(v1 + 8, v7); } v1[11] = 0; v1[9] = 0; v1[10] = 0; sub_8B4190(v1 + 8); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B6E4: using guessed type void *NiInputDevice::Description::`vftable'; //----- (008B5320) -------------------------------------------------------- signed int __thiscall sub_8B5320(_DWORD *this, int a2, int a3) { if ( !this[34] || !a3 ) return -2147483646; (*(void (__stdcall **)(int, signed int (__stdcall *)(int, _DWORD *), int, _DWORD))(*(_DWORD *)a3 + 16))( a3, sub_8B4F20, a2, 0); return 0; } //----- (008B5360) -------------------------------------------------------- _DWORD *__thiscall sub_8B5360(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx _DWORD *v3; // ST00_4 v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiInputDevice::Description::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; *((_BYTE *)v1 + 28) = 0; v1[11] = 0; v1[9] = 0; v1[10] = 0; v1[8] = &NiTPointerList::`vftable'; v1[13] = 0; v1[14] = 0; v1[15] = 0; v2 = (_DWORD *)v1[9]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[8] + 8))(v1 + 8, v3); } v1[11] = 0; v1[9] = 0; v1[10] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B6D4: using guessed type void *NiTPointerList::`vftable'; // A2B6E4: using guessed type void *NiInputDevice::Description::`vftable'; //----- (008B53E0) -------------------------------------------------------- void *__thiscall sub_8B53E0(void *this, char a2) { void *v2; // esi v2 = this; sub_8B5280(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B5410) -------------------------------------------------------- void *__thiscall sub_8B5410(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiDI8InputSystem::DI8Description::`vftable'; sub_8B5280(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B6EC: using guessed type void *NiDI8InputSystem::DI8Description::`vftable'; //----- (008B5440) -------------------------------------------------------- signed int __userpurge sub_8B5440@(int a1@, int a2@, int a3, _DWORD *a4) { int v5; // eax int v6; // ST10_4 int v7; // edi _DWORD *v8; // eax _DWORD *v9; // esi unsigned int v10; // ecx _DWORD *v11; // eax unsigned int v12; // ecx _DWORD *v13; // eax int v14; // [esp+0h] [ebp-4h] v14 = a1; if ( !a4 ) return 0; v5 = a4[34]; if ( !v5 ) return 0; v6 = a2; v7 = a3 + 4; v14 = 0; if ( (*(int (__stdcall **)(int, int, int *, _DWORD, int))(*(_DWORD *)v5 + 12))(v5, a3 + 4, &v14, 0, v6) >= 0 ) { v8 = operator new(0x50u); v9 = v8; if ( v8 ) { sub_8B5360(v8); *v9 = &NiDI8InputSystem::DI8Description::`vftable'; v9[16] = 0; v9[17] = 0; v9[18] = 0; v9[19] = 0; } else { v9 = 0; } v10 = 16; v11 = (_DWORD *)(a3 + 4); while ( *(_DWORD *)((char *)v11 + (_DWORD)&unk_A48334 - v7) == *v11 ) { v10 -= 4; ++v11; if ( v10 < 4 ) { sub_8B2630("SYSTEM KEYBOARD FOUND.\n"); break; } } v12 = 16; v13 = (_DWORD *)(a3 + 4); while ( *(_DWORD *)((char *)v13 + (_DWORD)&unk_A48324 - v7) == *v13 ) { v12 -= 4; ++v13; if ( v12 < 4 ) { sub_8B2630("SYSTEM MOUSE FOUND.\n"); break; } } if ( *(_BYTE *)(a3 + 36) != 18 && *(_BYTE *)(a3 + 36) != 19 && *(_BYTE *)(a3 + 36) != 26 ) { if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); } else { sub_8B43C0(a4, a3, (int)v9); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*a4 + 120))(a4, v9, v14); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*a4 + 96))(a4, v9); } (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 8))(v14); } return 1; } // 8B5440: could not find valid save-restore pair for edi // A2B6EC: using guessed type void *NiDI8InputSystem::DI8Description::`vftable'; //----- (008B5570) -------------------------------------------------------- char __thiscall sub_8B5570(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax char result; // al unsigned int v6; // ecx _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // edi _DWORD *v10; // eax _DWORD *v11; // edi unsigned int v12; // [esp+8h] [ebp-4h] v3 = this; sub_8B2630("AddDefaultActionMappedDevice> %s\n", a2 + 40); v4 = *(unsigned __int8 *)(a2 + 36); if ( v4 == 19 || v4 == 18 || v4 == 26 ) { sub_8B2630("AddDefaultActionMappedDevice> Does not use Keyboard or Mouse - REJECTING DEVICE!\n"); result = 1; } else if ( v4 == 24 || v4 == 22 || v4 == 23 || v4 == 21 || v4 == 20 || v4 == 28 ) { v6 = 0; v7 = v3 + 18; while ( *v7 ) { ++v6; ++v7; if ( v6 >= 8 ) { v3[2] = -2147483637; return 1; } } v12 = v6; if ( v6 == -1 ) { v3[2] = -2147483637; result = 1; } else { sub_8B3F80(v3, a3); if ( !v3[2] ) { v8 = operator new(0x50u); v9 = v8; if ( v8 ) { sub_8B5360(v8); *v9 = &NiDI8InputSystem::DI8Description::`vftable'; v9[16] = 0; v9[17] = 0; v9[18] = 0; v9[19] = 0; } else { v9 = 0; } sub_8B43C0(v3, a2, (int)v9); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 120))(v3, v9, a3); if ( (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 96))(v3, v9) == v9[3] + 1 ) { v10 = operator new(0x160u); if ( v10 ) { v11 = sub_8B7E90(v10, (int)v9, a3, v3[8], v3[9]); if ( v11 ) { (*(void (__stdcall **)(int))(*(_DWORD *)a3 + 4))(a3); v11[8] = v12; *((_BYTE *)v11 + 20) = 1; v11[3] = 0; sub_56FF80(&v3[v12 + 18], (int)v11); sub_8B3060(v3, v11); } } } } result = 1; } } else { sub_8B2630("AddDefaultActionMappedDevice> Not a gampad - REJECTING DEVICE!\n"); result = 1; } return result; } // A2B6EC: using guessed type void *NiDI8InputSystem::DI8Description::`vftable'; //----- (008B5700) -------------------------------------------------------- int __stdcall sub_8B5700(int a1, int a2, int a3, int ArgList, int a5) { sub_8B2630("EDBSCB> Devices Remaining: %2d\n", ArgList); return (unsigned __int8)sub_8B5570((_DWORD *)a5, a1, a2); } //----- (008B5730) -------------------------------------------------------- signed int __thiscall sub_8B5730(int this) { int v1; // esi signed int result; // eax v1 = this; if ( *(_DWORD *)(this + 136) ) { if ( *(_BYTE *)(this + 40) ) { result = -2147483599; } else if ( sub_8B44A0((void **)this) && (*(int (__stdcall **)(_DWORD, _DWORD, int, int (__stdcall *)(int, int, int, int, int), int, _DWORD))(**(_DWORD **)(v1 + 136) + 36))( *(_DWORD *)(v1 + 136), 0, v1 + 148, sub_8B5700, v1, 0) >= 0 && (*(int (__stdcall **)(_DWORD, _DWORD, signed int (__userpurge *)@(int@, int@, int, _DWORD *), int, signed int))(**(_DWORD **)(v1 + 136) + 16))( *(_DWORD *)(v1 + 136), 0, sub_8B5440, v1, 1) >= 0 ) { *(_BYTE *)(v1 + 40) = 1; result = 0; } else { result = -2147483645; *(_DWORD *)(v1 + 8) = -2147483645; } } else { result = -2147483646; *(_DWORD *)(this + 8) = -2147483646; } return result; } //----- (008B57B0) -------------------------------------------------------- void **__cdecl sub_8B57B0(int a1) { int v1; // eax _DWORD *v3; // eax void **v4; // edi unsigned int v5; // esi char **v6; // ebx bool v7; // sf unsigned __int8 v8; // of char *v9; // eax if ( !a1 ) return 0; v1 = (**(int (__thiscall ***)(int))a1)(a1); if ( !v1 ) return 0; while ( (_UNKNOWN *)v1 != &unk_BA54F4 ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } v3 = operator new(0x234u); if ( !v3 ) return 0; v4 = (void **)sub_8B3E00(v3); if ( !v4 ) return 0; v5 = 0; v6 = (char **)(a1 + 40); v8 = 0; v7 = 1; do { if ( v7 ^ v8 ) v9 = *v6; else v9 = 0; sub_8B4340(v4, v5++, v9); ++v6; v8 = __OFSUB__(v5, 21); v7 = (signed int)(v5 - 21) < 0; } while ( v5 < 0x15 ); dword_BA54E0 = *(_DWORD *)(a1 + 32); dword_BA54E4 = *(_DWORD *)(a1 + 36); if ( (*((int (__thiscall **)(void **, int))*v4 + 22))(v4, a1) ) { (*(void (__thiscall **)(void **, signed int))*v4)(v4, 1); return 0; } sub_8B5730((int)v4); return v4; } // BA54E0: using guessed type int dword_BA54E0; // BA54E4: using guessed type int dword_BA54E4; //----- (008B5870) -------------------------------------------------------- int __thiscall sub_8B5870(_DWORD *this) { this[10] = 0; return 0; } //----- (008B5880) -------------------------------------------------------- int __thiscall sub_8B5880(_DWORD *this, int a2, int a3) { return sub_8B61B0((int *)(this[14] + 32 * a2), a3, ((1 << a2) & this[16]) != 0, flt_AC11D0); } // AC11D0: using guessed type float flt_AC11D0; //----- (008B58C0) -------------------------------------------------------- _DWORD *__thiscall sub_8B58C0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // ebx char *v6; // eax signed int v7; // edx int v8; // ecx int v9; // eax int v10; // edi int v11; // ecx int *v12; // eax _DWORD *v13; // eax int v14; // ecx unsigned int v15; // ecx int v16; // eax _DWORD *v18; // [esp+14h] [ebp+8h] v4 = this; sub_8B62E0(this, a2); v5 = 0; *v4 = &NiInputGamePad::`vftable'; v4[9] = 0; v4[10] = 0; v4[12] = 0; v4[14] = 0; v4[15] = 0; v4[16] = 0; v4[11] = 16; v6 = (char *)operator new(0x100u); if ( v6 ) { v7 = 15; v8 = (int)(v6 + 2); do { *(_DWORD *)(v8 - 2) = 0; *(_BYTE *)(v8 + 2) = 0; *(_DWORD *)(v8 + 6) = 0; *(_DWORD *)(v8 + 10) = 0; v8 += 16; --v7; } while ( v7 >= 0 ); } else { v6 = 0; } v4[12] = v6; v9 = dword_AC11C8; v4[13] = dword_AC11C8; v10 = v9; v11 = 32 * v9 | -((unsigned __int64)(unsigned int)v9 >> 27 != 0); v12 = (int *)operator new((v11 + 4) | -__CFADD__(v11, 4)); if ( v12 ) { *v12 = v10; v13 = v12 + 1; v14 = v10 - 1; v18 = v13; if ( v10 - 1 >= 0 ) { do { *v13 = 0; v13[1] = 0; v13[4] = 0; v13[5] = 255; v13[6] = -1; v13[7] = 1; v13 += 8; --v14; } while ( v14 >= 0 ); v13 = v18; } } else { v13 = 0; } v15 = 0; for ( v4[14] = v13; v15 < v4[13]; v5 += 32 ) { v16 = v4[14]; *(_DWORD *)(v16 + v5 + 24) = a3; *(_DWORD *)(v16 + v5 + 28) = a4; ++v15; } return v4; } // A2B83C: using guessed type void *NiInputGamePad::`vftable'; // AC11C8: using guessed type int dword_AC11C8; //----- (008B59D0) -------------------------------------------------------- void *sub_8B59D0() { return &unk_BA54FC; } //----- (008B59E0) -------------------------------------------------------- LONG __thiscall sub_8B59E0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST00_4 int v3; // eax v1 = this; v2 = (void *)this[15]; *this = &NiInputGamePad::`vftable'; operator delete(v2); v3 = v1[14]; if ( v3 ) operator delete((void *)(v3 - 4)); operator delete((void *)v1[12]); return sub_8B6370(v1); } // A2B83C: using guessed type void *NiInputGamePad::`vftable'; //----- (008B5A20) -------------------------------------------------------- int __userpurge sub_8B5A20@(_DWORD *a1@, int a2@, int a3) { _DWORD *v3; // esi int v4; // edi int v5; // eax v3 = a1; v4 = (*(int (**)(void))(*a1 + 8))(); v5 = v3[6]; if ( v5 && *(_DWORD *)(v5 + 12) && !v4 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, int))(*v3 + 60))(v3, a3, a2) ) v4 = 2147483648; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 64))(v3) ) v4 = 2147483648; } return v4; } // 8B5A20: could not find valid save-restore pair for ebx //----- (008B5A80) -------------------------------------------------------- char __thiscall sub_8B5A80(_DWORD *this, unsigned int a2) { int v2; // edx char result; // al v2 = this[12]; if ( v2 && a2 < this[11] ) result = *(_BYTE *)(v2 + 16 * a2 + 1); else result = 0; return result; } //----- (008B5AB0) -------------------------------------------------------- int __thiscall sub_8B5AB0(_DWORD *this) { unsigned int v1; // esi int v2; // edi int v3; // eax char v4; // dl int result; // eax unsigned int v6; // edx int v7; // esi int v8; // eax int v9; // edi v1 = 0; if ( this[11] ) { v2 = 0; do { v3 = this[12]; v4 = *(_BYTE *)(v3 + v2); result = v2 + v3; *(_BYTE *)(result + 2) = v4; *(_BYTE *)(result + 3) = *(_BYTE *)(result + 1); ++v1; *(_DWORD *)(result + 12) = *(_DWORD *)(result + 8); v2 += 16; } while ( v1 < this[11] ); } v6 = 0; if ( this[13] ) { v7 = 0; do { v8 = this[14]; v9 = *(_DWORD *)(v8 + v7); result = v7 + v8; *(_DWORD *)(result + 8) = v9; ++v6; *(_DWORD *)(result + 12) = *(_DWORD *)(result + 4); v7 += 32; } while ( v6 < this[13] ); } return result; } //----- (008B5B10) -------------------------------------------------------- char __thiscall sub_8B5B10(_DWORD *this, int a2, int a3, char a4, int a5, char a6, int a7, int a8) { int v8; // eax _DWORD *v9; // ecx _DWORD *v10; // eax char result; // al int v12; // ecx int v13; // eax v8 = this[6]; if ( !v8 ) goto LABEL_7; v9 = *(_DWORD **)(v8 + 4); if ( !v9 ) goto LABEL_7; while ( 1 ) { v10 = (_DWORD *)v9[2]; v9 = (_DWORD *)*v9; if ( v10 ) { if ( !((a3 ^ v10[4]) & 0xFFFFF000) && v10[13] == a2 ) break; } if ( !v9 ) goto LABEL_7; } if ( a4 && v10[12] != a5 || a6 && ((v12 = v10[7], v13 = v10[8], v12 >= a7) && v13 <= a7 || v12 >= a8 && v13 <= a8) ) LABEL_7: result = 0; else result = 1; return result; } //----- (008B5BA0) -------------------------------------------------------- char __thiscall sub_8B5BA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edx int *v3; // eax _DWORD *v4; // esi int v5; // eax int v6; // edi bool v7; // al int v8; // ecx bool v9; // bl int v10; // edi int v11; // eax int v12; // edx int v13; // ecx bool v14; // al int v15; // ecx bool v16; // al __int16 v17; // cx bool v18; // zf int v19; // eax int v20; // ecx char v21; // bl char v22; // dl char v24; // [esp+0h] [ebp-1Ch] int *v25; // [esp+4h] [ebp-18h] int v26; // [esp+8h] [ebp-14h] int v27; // [esp+Ch] [ebp-10h] _DWORD *v28; // [esp+10h] [ebp-Ch] int v29; // [esp+14h] [ebp-8h] bool v30; // [esp+1Ah] [ebp-2h] char v31; // [esp+1Bh] [ebp-1h] v2 = this; v3 = *(int **)(this[6] + 4); v28 = this; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v25 = (int *)*v3; if ( !v4 ) goto LABEL_36; v5 = v4[4]; v6 = v4[13]; v26 = v4[5]; switch ( v5 ) { case 268435457: goto LABEL_36; case 268435458: goto LABEL_36; case 268435459: goto LABEL_36; case 268435460: goto LABEL_36; case 268435461: goto LABEL_36; case 268435462: goto LABEL_36; case 268435463: goto LABEL_36; case 268435464: goto LABEL_36; } v7 = sub_8B6550(v2, v4, v4[12]); v8 = v28[12]; v9 = v7 == 0; v10 = 16 * v6; v11 = *(unsigned __int8 *)(v8 + v10 + 2); v12 = *(unsigned __int8 *)(v8 + v10); v13 = v10 + v8; v27 = v11; v29 = v12; v31 = *(_BYTE *)(v13 + 1); v14 = sub_4357D0(v13, &v24); v15 = v10 + v28[12]; v30 = v14; v16 = sub_435800(v15, &v24); if ( v9 ) goto LABEL_36; v17 = v26; if ( !(v26 & 0x1000) ) { if ( (v26 & 0x80u) == 0 ) { if ( v31 ) v18 = v30 == 0; else v18 = v16 == 0; if ( v18 ) goto LABEL_36; } else if ( v29 == v27 ) { goto LABEL_36; } } if ( !(v26 & 0x40) ) goto LABEL_33; v19 = v4[7]; v20 = v4[8]; v21 = 0; v22 = 0; if ( v29 < v19 || v29 > v20 ) v29 = 0; else v21 = 1; if ( v27 >= v19 && v27 <= v20 ) v22 = 1; if ( v26 & 0x1000 || v21 != v22 ) break; LABEL_36: if ( !v25 ) return 1; v3 = v25; v2 = v28; } v17 = v26; LABEL_33: if ( v17 & 0x100 ) v29 = v31 != 0; sub_8B3D00(a2, (int)v28, v4[3], 0, v29, v4[9]); goto LABEL_36; } return 1; } //----- (008B5D40) -------------------------------------------------------- char __thiscall sub_8B5D40(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edx _DWORD *v3; // eax _DWORD *v4; // edi unsigned int v5; // ebx int v6; // eax int v7; // esi bool v8; // cl bool v9; // al int v10; // ebx int v11; // eax int v12; // eax int v13; // eax int v14; // eax int v15; // eax int v16; // eax int v17; // ebx int v18; // ebx int v19; // eax int v20; // eax int v21; // eax int v22; // eax int v23; // eax int v24; // ecx char v25; // dl char v26; // bl _DWORD *v28; // [esp+4h] [ebp-10h] int v29; // [esp+8h] [ebp-Ch] int v30; // [esp+Ch] [ebp-8h] int v31; // [esp+10h] [ebp-4h] v2 = this; v3 = *(_DWORD **)(this[6] + 4); v30 = (int)this; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v28 = (_DWORD *)*v3; if ( !v4 ) goto LABEL_52; v5 = v4[13]; v29 = v4[5]; v6 = v4[4]; v7 = 0; v8 = 1; v31 = 0; if ( v6 == 268435457 || v6 == 268435458 || v6 == 268435459 || v6 == 268435460 || v6 == 268435461 || v6 == 268435462 || v6 == 268435463 || v6 == 268435464 ) { v9 = sub_8B6550(v2, v4, v4[12]); v8 = v9 == 0; if ( v9 ) { if ( v5 > 0x40001 ) { v17 = v5 - 262146; if ( v17 ) { v18 = v17 - 0x3FFFF; if ( v18 ) { if ( v18 != 1 ) goto LABEL_34; v19 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v19 + 228); v12 = *(_DWORD *)(v19 + 236); } else { v20 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v20 + 196); v12 = *(_DWORD *)(v20 + 204); } } else { v21 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v21 + 164); v12 = *(_DWORD *)(v21 + 172); } } else if ( v5 == 262145 ) { v16 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v16 + 132); v12 = *(_DWORD *)(v16 + 140); } else if ( v5 > 0x20001 ) { if ( v5 != 131074 ) goto LABEL_34; v15 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v15 + 100); v12 = *(_DWORD *)(v15 + 108); } else if ( v5 == 131073 ) { v14 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v14 + 68); v12 = *(_DWORD *)(v14 + 76); } else { v10 = v5 - 65537; if ( v10 ) { if ( v10 != 1 ) goto LABEL_34; v11 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v11 + 36); v12 = *(_DWORD *)(v11 + 44); } else { v13 = *(_DWORD *)(v30 + 56); v7 = *(_DWORD *)(v13 + 4); v12 = *(_DWORD *)(v13 + 12); } } v31 = v12; if ( !(v29 & 0x1000) && v7 == v12 ) { LABEL_34: v8 = 1; goto LABEL_35; } } } LABEL_35: v22 = v7; if ( v8 ) goto LABEL_52; if ( !(v29 & 0x40) ) { if ( v29 & 0x100 && v7 ) v22 = 1; goto LABEL_51; } v23 = v4[7]; v24 = v4[8]; v25 = 0; v26 = 0; if ( v7 >= v23 && v7 <= v24 ) v25 = 1; if ( v31 >= v23 && v31 <= v24 ) v26 = 1; if ( v29 & 0x1000 || v25 != v26 ) { if ( v29 & 0x100 ) v22 = v25 != 0; else v22 = v7; LABEL_51: sub_8B3D00(a2, v30, v4[3], 0, v22, v4[9]); } LABEL_52: if ( !v28 ) return 1; v3 = v28; v2 = (_DWORD *)v30; } } return 1; } //----- (008B5F60) -------------------------------------------------------- _DWORD *__thiscall sub_8B5F60(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 15); *(_DWORD *)this = &NiInputGamePad::`vftable'; operator delete(v3); v4 = v2[14]; if ( v4 ) operator delete((void *)(v4 - 4)); operator delete((void *)v2[12]); sub_8B6370(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B83C: using guessed type void *NiInputGamePad::`vftable'; //----- (008B5FC0) -------------------------------------------------------- _DWORD *__thiscall sub_8B5FC0(_DWORD *this, unsigned int a2, unsigned __int8 a3) { _DWORD *result; // eax signed int v4; // esi int v5; // ecx bool v6; // sf unsigned __int8 v7; // of int v8; // edi int v9; // ebx int v10; // ecx int v11; // edx result = this; if ( a2 < this[11] ) { v4 = 1 << a2; v5 = this[12] + 16 * a2; v7 = __OFSUB__(a3, dword_AC11CC); v6 = a3 - dword_AC11CC < 0; v8 = result[4]; *(_BYTE *)(v5 + 2) = *(_BYTE *)v5; *(_BYTE *)(v5 + 3) = *(_BYTE *)(v5 + 1); v9 = *(_DWORD *)(v5 + 8); *(_BYTE *)v5 = a3; *(_DWORD *)(v5 + 12) = v9; *(_DWORD *)(v5 + 8) = v8; if ( v6 ^ v7 ) { *(_BYTE *)(v5 + 1) = 0; v11 = result[9]; result[4] &= ~v4; if ( v11 & v4 ) result[9] = v11 & ~v4; } else { *(_BYTE *)(v5 + 1) = 1; v10 = result[9]; result[4] |= v4; if ( !(v10 & v4) ) result[10] |= v4; result[9] = v4 | v10; } } return result; } // AC11CC: using guessed type int dword_AC11CC; //----- (008B6050) -------------------------------------------------------- void __thiscall sub_8B6050(_DWORD *this, unsigned int a2) { unsigned int v2; // esi _DWORD *v3; // edx int v4; // eax int v5; // ecx int v6; // eax int v7; // ebx int v8; // eax int v9; // esi int v10; // [esp+4h] [ebp-4h] v2 = a2; v3 = this; if ( a2 < this[11] ) { v4 = this[12] + 16 * a2; *(_BYTE *)(v4 + 2) = *(_BYTE *)v4; *(_BYTE *)(v4 + 3) = *(_BYTE *)(v4 + 1); *(_DWORD *)(v4 + 12) = *(_DWORD *)(v4 + 8); v5 = 0; *(_WORD *)v4 = 0; *(_DWORD *)(v4 + 8) = 0; v6 = v3[9]; v7 = ~(1 << a2); v3[4] &= v7; if ( v6 & (1 << a2) ) v3[9] = v7 & v6; if ( v3[11] > 0u ) { v10 = 0; while ( 1 ) { if ( v5 != v2 ) { v8 = v10 + v3[12]; v9 = *(_DWORD *)(v8 + 8); if ( v9 & (1 << a2) ) *(_DWORD *)(v8 + 8) = v7 & v9; } v10 += 16; if ( (unsigned int)++v5 >= v3[11] ) break; v2 = a2; } } } } //----- (008B60E0) -------------------------------------------------------- int __thiscall sub_8B60E0(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 <= this[8] ) result = *(_DWORD *)(this[6] + 4 * a2); else result = 0; return result; } //----- (008B6100) -------------------------------------------------------- void __thiscall sub_8B6100(void **this) { void **v1; // edi void (__stdcall ****v2)(signed int); // esi void (__stdcall ***v3)(signed int); // ecx void (__stdcall ***v4)(signed int); // ecx v1 = this; v2 = (void (__stdcall ****)(signed int))this[5]; this[2] = 0; if ( v2 ) { v3 = *v2; if ( *v2 ) { if ( *(v3 - 1) ) (**v3)(3); else operator delete(v3 - 1); } v4 = v2[2]; if ( v4 ) sub_881340(v4, 1); operator delete(v2); } operator delete(*v1); } //----- (008B6160) -------------------------------------------------------- void sub_8B6160() { void *v0; // esi v0 = dword_BA5508; if ( dword_BA5508 ) { sub_8B6100((void **)dword_BA5508); operator delete(v0); } dword_BA5508 = 0; } //----- (008B6190) -------------------------------------------------------- int sub_8B6190() { return 0; } //----- (008B61A0) -------------------------------------------------------- char __stdcall sub_8B61A0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { return 0; } //----- (008B61B0) -------------------------------------------------------- int __thiscall sub_8B61B0(int *this, int a2, int a3, float a4) { int *v4; // esi int v5; // eax int v6; // ecx int v7; // eax double v8; // st7 double v9; // st7 double v10; // st5 double v11; // st7 int result; // eax int v13; // [esp+10h] [ebp+8h] int v14; // [esp+14h] [ebp+Ch] int v15; // [esp+14h] [ebp+Ch] float v16; // [esp+14h] [ebp+Ch] v4 = this; v5 = *this; v6 = this[1]; v4[2] = v5; v7 = a2; v4[3] = v6; *v4 = a2; if ( (_BYTE)a3 ) v7 = v4[4] + v4[5] - a2; *(float *)&v14 = (double)(v7 - v4[4]) / (double)(v4[5] - v4[4]); v8 = a4 * 0.5; *(float *)&v13 = v8 + 0.5; if ( *(float *)&v13 >= (double)*(float *)&v14 ) { v10 = 0.5 - v8; v11 = *(float *)&v14; *(float *)&v15 = v10; if ( *(float *)&v15 <= v11 ) v9 = 0.5; else v9 = v11 / *(float *)&v15 * 0.5; } else { v9 = (*(float *)&v14 - *(float *)&v13) * 0.5 / (1.0 - *(float *)&v13) + 0.5; } v16 = v9; result = v4[6] + (signed int)((double)(v4[7] - v4[6]) * v16); v4[1] = result; return result; } //----- (008B6270) -------------------------------------------------------- int __thiscall sub_8B6270(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiAction *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiAction *>::`vftable'; return result; } // A2B894: using guessed type void *NiTListBase,NiAction *>::`vftable'; // A2B8A4: using guessed type void *NiTPointerListBase,NiAction *>::`vftable'; //----- (008B62B0) -------------------------------------------------------- void *__thiscall sub_8B62B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiAction *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2B894: using guessed type void *NiTListBase,NiAction *>::`vftable'; //----- (008B62E0) -------------------------------------------------------- _DWORD *__thiscall sub_8B62E0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *result; // eax v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiInputDevice::`vftable'; v2[2] = 0; v2[3] = -1; v2[4] = 0; *((_BYTE *)v2 + 20) = 0; v2[6] = 0; v3 = v2[2]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } result = v2; *(_BYTE *)(a2 + 28) = 1; return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B8B4: using guessed type void *NiInputDevice::`vftable'; //----- (008B6360) -------------------------------------------------------- void *sub_8B6360() { return &unk_BA550C; } //----- (008B6370) -------------------------------------------------------- LONG __thiscall sub_8B6370(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx void (__stdcall ***v3)(signed int); // ecx int v4; // edi int v5; // edi v1 = this; v2 = (_DWORD *)this[6]; *v1 = &NiInputDevice::`vftable'; if ( v2 ) sub_521E30(v2); v3 = (void (__stdcall ***)(signed int))v1[6]; if ( v3 ) (**v3)(1); *(_BYTE *)(v1[2] + 28) = 0; v4 = v1[2]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[2] = 0; } v5 = v1[2]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B8B4: using guessed type void *NiInputDevice::`vftable'; //----- (008B6400) -------------------------------------------------------- signed int __thiscall sub_8B6400(_DWORD *this) { _DWORD *v1; // eax _DWORD *v2; // ecx signed int result; // eax v1 = this; v2 = (_DWORD *)this[6]; if ( v2 ) { sub_521E30(v2); result = 0; } else { v1[7] = -2147483646; result = -2147483646; } return result; } //----- (008B6420) -------------------------------------------------------- signed int __thiscall sub_8B6420(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // esi _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // ecx _DWORD *v8; // [esp+Ch] [ebp-4h] v2 = (_DWORD *)this[9]; v8 = this; while ( v2 ) { v3 = v2[2]; v2 = (_DWORD *)*v2; if ( v3 ) { if ( !strcmp(*(const char **)(a2 + 4), *(const char **)(v3 + 4)) && *(_DWORD *)(a2 + 8) == *(_DWORD *)(v3 + 8) && *(_DWORD *)(a2 + 12) == *(_DWORD *)(v3 + 12) ) { return -1; } this = v8; } } if ( !*(_DWORD *)(a2 + 8) ) ++this[13]; if ( *(_DWORD *)(a2 + 8) == 1 ) ++this[14]; if ( *(_DWORD *)(a2 + 8) == 2 ) ++this[15]; v4 = this + 8; v5 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[8] + 4))(this + 8); v5[2] = a2; *v5 = 0; v5[1] = v4[2]; v6 = (_DWORD *)v4[2]; if ( v6 ) *v6 = v5; else v4[1] = v5; ++v4[3]; v4[2] = v5; return v8[11]; } //----- (008B64F0) -------------------------------------------------------- void *__thiscall sub_8B64F0(void *this, char a2) { void *v2; // esi v2 = this; sub_8B6370(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B6520) -------------------------------------------------------- void *__thiscall sub_8B6520(void *this, char a2) { void *v2; // esi v2 = this; sub_8B6270(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B6550) -------------------------------------------------------- bool __thiscall sub_8B6550(_DWORD *this, _DWORD *a2, int a3) { int v3; // esi bool result; // al int v5; // eax v3 = a2[5]; result = 0; if ( !(v3 & 0x400) || a2[6] == (*(_DWORD *)(this[2] + 12) | (*(_DWORD *)(this[2] + 16) << 16)) ) { if ( !(v3 & 0x200) || (v5 = this[4], (a3 | (1 << a2[13])) == v5) || a3 == v5 ) result = 1; } return result; } //----- (008B65B0) -------------------------------------------------------- signed int __thiscall sub_8B65B0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax signed int result; // eax _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // ecx v2 = this; if ( this[6] || ((v3 = operator new(0x10u)) == 0 ? (v3 = 0) : (v3[3] = 0, v3[1] = 0, v3[2] = 0, *v3 = &NiTPointerList::`vftable'), (v2[6] = v3) != 0) ) { v5 = (_DWORD *)v2[6]; v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v5 + 4))(v5); v6[2] = a2; *v6 = 0; v6[1] = v5[2]; v7 = (_DWORD *)v5[2]; if ( v7 ) { *v7 = v6; ++v5[3]; } else { ++v5[3]; v5[1] = v6; } v5[2] = v6; result = 0; } else { result = -2147483635; v2[7] = -2147483635; } return result; } // A2B8DC: using guessed type void *NiTPointerList::`vftable'; //----- (008B6650) -------------------------------------------------------- int __thiscall sub_8B6650(_DWORD **this) { (*(void (__stdcall **)(_DWORD *))(*this[64] + 32))(this[64]); return 0; } //----- (008B6670) -------------------------------------------------------- _DWORD *__thiscall sub_8B6670(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *result; // eax v1 = this; v2 = (*(int (__stdcall **)(_DWORD *))(*this[64] + 28))(this[64]); if ( v2 ) { if ( v2 == -2147024866 || v2 == -2147024884 || v2 == -2147024891 ) { v1[7] = (_DWORD *)-2147483642; result = v1[7]; } else { v1[7] = (_DWORD *)-2147483639; result = v1[7]; } } else { v1[7] = 0; result = v1[7]; } return result; } //----- (008B66C0) -------------------------------------------------------- void *sub_8B66C0() { return &unk_BA5514; } //----- (008B66D0) -------------------------------------------------------- _DWORD *__thiscall sub_8B66D0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *result; // eax signed int v6; // ecx int v7; // eax bool v8; // zf int v9; // [esp+4h] [ebp-18h] int v10; // [esp+8h] [ebp-14h] int v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] v4 = this; sub_8B8260(this, a2); *v4 = &NiInputDI8Mouse::`vftable'; v4[64] = a3; v4[65] = 64; if ( !a3 ) return v4; if ( (*(int (__stdcall **)(int, void *))(*(_DWORD *)a3 + 44))(a3, &unk_A48564) ) goto LABEL_20; v6 = 0; if ( a4 & 0x10000000 ) v6 = 4; if ( a4 & 0x20000000 ) v6 |= 8u; if ( a4 & 0x40000000 ) v6 |= 1u; if ( a4 < 0 ) v6 |= 2u; if ( (*(int (__stdcall **)(_DWORD, int, signed int))(*(_DWORD *)v4[64] + 52))(v4[64], dword_BA54E4, v6) || (v11 = 0, v12 = 0, v13 = v4[65], v7 = v4[64], v9 = 20, v10 = 16, (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)v7 + 24))(v7, 1, &v9)) ) { LABEL_20: v4[7] = -2147483640; return v4; } v8 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4[64] + 28))(v4[64]) == 0; result = v4; if ( !v8 ) v4[7] = -2147483642; return result; } // A2B8FC: using guessed type void *NiInputDI8Mouse::`vftable'; // BA54E4: using guessed type int dword_BA54E4; //----- (008B67F0) -------------------------------------------------------- _DWORD **__thiscall sub_8B67F0(void *this, char a2) { _DWORD **v2; // esi int v3; // eax v2 = (_DWORD **)this; v3 = *((_DWORD *)this + 64); *(_DWORD *)this = &NiInputDI8Mouse::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); (*(void (__stdcall **)(_DWORD *))(*v2[64] + 8))(v2[64]); } v2[64] = 0; sub_8B83C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B8FC: using guessed type void *NiInputDI8Mouse::`vftable'; //----- (008B6850) -------------------------------------------------------- int __thiscall sub_8B6850(_BYTE *this, char a2, signed int a3) { _BYTE *v3; // edx signed int v4; // esi int v5; // eax char v6; // cl int result; // eax int v8; // edi int v9; // ecx int v10; // eax char v11; // cl v3 = this; v4 = 1 << a3; *((_DWORD *)v3 + 66) |= 1 << a3; if ( a2 >= 0 ) { if ( a3 < 8 ) { v10 = 16 * (a3 + 8); v11 = this[v10]; result = (int)&v3[v10]; *(_BYTE *)(result + 2) = v11; *(_BYTE *)(result + 3) = *(_BYTE *)(result + 1); *(_DWORD *)(result + 12) = *(_DWORD *)(result + 8); *(_WORD *)result = 0; *(_DWORD *)(result + 8) = 0; *((_DWORD *)v3 + 4) &= ~v4; } } else if ( a3 < 8 ) { v5 = 16 * (a3 + 8); v6 = this[v5]; result = (int)&v3[v5]; v8 = *((_DWORD *)v3 + 4); *(_BYTE *)(result + 2) = v6; *(_BYTE *)(result + 3) = *(_BYTE *)(result + 1); v9 = *(_DWORD *)(result + 8); *(_DWORD *)(result + 8) = v8; *(_DWORD *)(result + 12) = v9; *(_WORD *)result = 511; *((_DWORD *)v3 + 4) |= v4; } return result; } //----- (008B68E0) -------------------------------------------------------- signed int __thiscall sub_8B68E0(_DWORD *this) { _DWORD *v1; // esi signed int result; // eax void (__thiscall *v3)(_DWORD *); // edx int v4; // eax int v5; // edi int v6; // eax char v7; // cl char v8; // dl int v9; // eax char v10; // cl int v11; // eax char v12; // dl int v13; // eax char v14; // dl char v15; // dl int v16; // eax char v17; // cl int v18; // eax int v19; // [esp+8h] [ebp-28h] int v20; // [esp+Ch] [ebp-24h] int v21; // [esp+10h] [ebp-20h] int v22; // [esp+14h] [ebp-1Ch] int v23; // [esp+18h] [ebp-18h] int v24; // [esp+1Ch] [ebp-14h] v1 = this; sub_8B6190(); if ( !v1[64] ) { result = -2147483644; v1[7] = -2147483644; return result; } v3 = *(void (__thiscall **)(_DWORD *))(*v1 + 20); v19 = 0; v20 = 0; v22 = 0; v1[66] = 0; v3(v1); v4 = v1[64]; v21 = 1; v5 = (*(int (__stdcall **)(int, signed int, int *, int *, _DWORD))(*(_DWORD *)v4 + 40))(v4, 20, &v23, &v21, 0); if ( v5 ) { LABEL_11: v7 = *((_BYTE *)v1 + 128); v8 = *((_BYTE *)v1 + 129); v9 = v1[34]; *((_WORD *)v1 + 64) = 0; *((_BYTE *)v1 + 130) = v7; v10 = *((_BYTE *)v1 + 144); v1[35] = v9; *((_BYTE *)v1 + 131) = v8; v1[34] = 0; *((_BYTE *)v1 + 146) = v10; *((_BYTE *)v1 + 147) = *((_BYTE *)v1 + 145); v1[39] = v1[38]; *((_WORD *)v1 + 72) = 0; v1[38] = 0; *((_BYTE *)v1 + 162) = *((_BYTE *)v1 + 160); *((_BYTE *)v1 + 163) = *((_BYTE *)v1 + 161); v1[43] = v1[42]; *((_WORD *)v1 + 80) = 0; v1[42] = 0; *((_BYTE *)v1 + 178) = *((_BYTE *)v1 + 176); *((_BYTE *)v1 + 179) = *((_BYTE *)v1 + 177); v1[47] = v1[46]; *((_WORD *)v1 + 88) = 0; v1[46] = 0; *((_BYTE *)v1 + 194) = *((_BYTE *)v1 + 192); *((_BYTE *)v1 + 195) = *((_BYTE *)v1 + 193); v1[51] = v1[50]; *((_WORD *)v1 + 96) = 0; v1[50] = 0; *((_BYTE *)v1 + 210) = *((_BYTE *)v1 + 208); *((_BYTE *)v1 + 211) = *((_BYTE *)v1 + 209); v1[55] = v1[54]; *((_WORD *)v1 + 104) = 0; v1[54] = 0; *((_BYTE *)v1 + 226) = *((_BYTE *)v1 + 224); *((_BYTE *)v1 + 227) = *((_BYTE *)v1 + 225); v1[59] = v1[58]; *((_WORD *)v1 + 112) = 0; v1[58] = 0; *((_BYTE *)v1 + 242) = *((_BYTE *)v1 + 240); *((_BYTE *)v1 + 243) = *((_BYTE *)v1 + 241); v1[63] = v1[62]; *((_WORD *)v1 + 120) = 0; v1[62] = 0; (*(void (__thiscall **)(_DWORD *))(*v1 + 16))(v1); if ( v5 == 1 ) { sub_8B2630("Mouse> BUFFER OVERFLOW!\n"); v1[7] = -2147483639; } else if ( v5 == -2147024866 || v5 == -2147024884 || v5 == -2147024891 ) { v1[7] = -2147483642; } else { v1[7] = -2147483639; } } else { while ( v21 ) { switch ( v23 ) { case 0: v19 += v24; break; case 4: v20 += v24; break; case 8: v22 += v24; break; case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: sub_8B6850(v1, v24, v23 - 12); break; default: break; } (*(void (__thiscall **)(_DWORD *))(*v1 + 20))(v1); v6 = v1[64]; v21 = 1; v5 = (*(int (__stdcall **)(int, signed int, int *, int *, _DWORD))(*(_DWORD *)v6 + 40))(v6, 20, &v23, &v21, 0); if ( v5 ) goto LABEL_11; } v1[7] = 0; } v1[11] = v1[9]; v1[9] = v19; v1[19] = v1[17]; v11 = v22; v1[17] = v20; v1[27] = v1[25]; v1[25] = v11; if ( v1[66] ) { if ( !(v1[66] & 1) ) { v12 = *((_BYTE *)v1 + 129); v13 = v1[34]; *((_BYTE *)v1 + 130) = *((_BYTE *)v1 + 128); *((_BYTE *)v1 + 131) = v12; v1[35] = v13; } if ( !(v1[66] & 2) ) { *((_BYTE *)v1 + 146) = *((_BYTE *)v1 + 144); *((_BYTE *)v1 + 147) = *((_BYTE *)v1 + 145); v1[39] = v1[38]; } if ( !(v1[66] & 4) ) { *((_BYTE *)v1 + 162) = *((_BYTE *)v1 + 160); *((_BYTE *)v1 + 163) = *((_BYTE *)v1 + 161); v1[43] = v1[42]; } if ( !(v1[66] & 8) ) { *((_BYTE *)v1 + 178) = *((_BYTE *)v1 + 176); *((_BYTE *)v1 + 179) = *((_BYTE *)v1 + 177); v1[47] = v1[46]; } if ( !(v1[66] & 0x10) ) { *((_BYTE *)v1 + 194) = *((_BYTE *)v1 + 192); *((_BYTE *)v1 + 195) = *((_BYTE *)v1 + 193); v1[51] = v1[50]; } if ( !(v1[66] & 0x20) ) { *((_BYTE *)v1 + 210) = *((_BYTE *)v1 + 208); *((_BYTE *)v1 + 211) = *((_BYTE *)v1 + 209); v1[55] = v1[54]; } if ( !(v1[66] & 0x40) ) { *((_BYTE *)v1 + 226) = *((_BYTE *)v1 + 224); *((_BYTE *)v1 + 227) = *((_BYTE *)v1 + 225); v1[59] = v1[58]; } if ( *((_BYTE *)v1 + 264) < 0 ) goto LABEL_38; *((_BYTE *)v1 + 242) = *((_BYTE *)v1 + 240); v14 = *((_BYTE *)v1 + 241); } else { v15 = *((_BYTE *)v1 + 129); v16 = v1[34]; *((_BYTE *)v1 + 130) = *((_BYTE *)v1 + 128); v17 = *((_BYTE *)v1 + 144); *((_BYTE *)v1 + 131) = v15; v1[35] = v16; *((_BYTE *)v1 + 146) = v17; *((_BYTE *)v1 + 147) = *((_BYTE *)v1 + 145); v1[39] = v1[38]; *((_BYTE *)v1 + 162) = *((_BYTE *)v1 + 160); *((_BYTE *)v1 + 163) = *((_BYTE *)v1 + 161); v1[43] = v1[42]; *((_BYTE *)v1 + 178) = *((_BYTE *)v1 + 176); *((_BYTE *)v1 + 179) = *((_BYTE *)v1 + 177); v1[47] = v1[46]; *((_BYTE *)v1 + 194) = *((_BYTE *)v1 + 192); *((_BYTE *)v1 + 195) = *((_BYTE *)v1 + 193); v1[51] = v1[50]; *((_BYTE *)v1 + 210) = *((_BYTE *)v1 + 208); *((_BYTE *)v1 + 211) = *((_BYTE *)v1 + 209); v1[55] = v1[54]; *((_BYTE *)v1 + 226) = *((_BYTE *)v1 + 224); *((_BYTE *)v1 + 227) = *((_BYTE *)v1 + 225); v1[59] = v1[58]; *((_BYTE *)v1 + 242) = *((_BYTE *)v1 + 240); v14 = *((_BYTE *)v1 + 241); } *((_BYTE *)v1 + 243) = v14; v1[63] = v1[62]; LABEL_38: v18 = v1[64]; v22 = -1; (*(void (__stdcall **)(int, signed int, _DWORD, int *, _DWORD))(*(_DWORD *)v18 + 40))(v18, 20, 0, &v22, 0); return v1[7]; } //----- (008B6EE0) -------------------------------------------------------- int __thiscall sub_8B6EE0(_DWORD **this) { (*(void (__stdcall **)(_DWORD *))(*this[26] + 32))(this[26]); return 0; } //----- (008B6EF0) -------------------------------------------------------- _DWORD *__thiscall sub_8B6EF0(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *result; // eax v1 = this; v2 = (*(int (__stdcall **)(_DWORD *))(*this[26] + 28))(this[26]); if ( v2 ) { if ( v2 == -2147024866 || v2 == -2147024884 || v2 == -2147024891 ) { v1[7] = (_DWORD *)-2147483642; result = v1[7]; } else { v1[7] = (_DWORD *)-2147483639; result = v1[7]; } } else { v1[7] = 0; result = v1[7]; } return result; } //----- (008B6F40) -------------------------------------------------------- void *__thiscall sub_8B6F40(_DWORD *this) { _DWORD *v1; // esi void *result; // eax v1 = this; memset(this + 27, 0, 0x100u); result = memset(v1 + 91, 0, 0x400u); v1[92] = 1; v1[93] = 2; v1[94] = 3; v1[95] = 4; v1[96] = 5; v1[97] = 6; v1[98] = 7; v1[99] = 8; v1[100] = 9; v1[101] = 10; v1[102] = 11; v1[103] = 12; v1[104] = 13; v1[105] = 14; v1[106] = 15; v1[107] = 16; v1[108] = 17; v1[109] = 18; v1[110] = 19; v1[111] = 20; v1[112] = 21; v1[113] = 22; v1[114] = 23; v1[115] = 24; v1[116] = 25; v1[117] = 26; v1[118] = 27; v1[119] = 28; v1[120] = 29; v1[121] = 30; v1[122] = 31; v1[123] = 32; v1[124] = 33; v1[125] = 34; v1[126] = 35; v1[127] = 36; v1[128] = 37; v1[129] = 38; v1[130] = 39; v1[131] = 40; v1[132] = 41; v1[133] = 42; v1[134] = 43; v1[135] = 44; v1[136] = 45; v1[137] = 46; v1[138] = 47; v1[139] = 48; v1[140] = 49; v1[141] = 50; v1[142] = 51; v1[143] = 52; v1[144] = 53; v1[145] = 54; v1[146] = 55; v1[147] = 56; v1[148] = 57; v1[149] = 58; v1[150] = 59; v1[151] = 60; v1[152] = 61; v1[153] = 62; v1[154] = 63; v1[155] = 64; v1[156] = 65; v1[157] = 66; v1[158] = 67; v1[159] = 68; v1[160] = 69; v1[161] = 70; v1[162] = 71; v1[163] = 72; v1[164] = 73; v1[165] = 74; v1[166] = 75; v1[167] = 76; v1[168] = 77; v1[169] = 78; v1[170] = 79; v1[171] = 80; v1[172] = 81; v1[173] = 82; v1[174] = 83; v1[177] = 84; v1[178] = 85; v1[179] = 86; v1[191] = 87; v1[192] = 88; v1[193] = 89; v1[203] = 90; v1[206] = 91; v1[212] = 92; v1[214] = 93; v1[216] = 94; v1[217] = 95; v1[232] = 96; v1[235] = 97; v1[236] = 98; v1[237] = 99; v1[238] = 100; v1[239] = 101; v1[240] = 102; v1[241] = 103; v1[242] = 104; v1[244] = 105; v1[247] = 106; v1[248] = 107; v1[251] = 108; v1[252] = 109; v1[253] = 110; v1[255] = 111; v1[265] = 112; v1[267] = 113; v1[269] = 114; v1[270] = 115; v1[272] = 116; v1[274] = 117; v1[275] = 118; v1[288] = 119; v1[290] = 120; v1[291] = 121; v1[292] = 122; v1[294] = 123; v1[296] = 124; v1[298] = 125; v1[299] = 126; v1[300] = 127; v1[301] = 128; v1[302] = 129; v1[310] = 130; v1[311] = 131; v1[312] = 132; v1[313] = 133; v1[314] = 134; v1[318] = 135; v1[320] = 136; v1[321] = 137; v1[322] = 138; v1[323] = 139; v1[324] = 140; v1[325] = 141; v1[326] = 142; v1[327] = 143; v1[328] = 144; return result; } //----- (008B7510) -------------------------------------------------------- signed int __stdcall sub_8B7510(int a1) { signed int result; // eax switch ( a1 ) { case 29: result = 1; break; case 42: result = 64; break; case 54: result = 128; break; case 56: result = 4; break; case 58: result = 256; break; case 107: result = 2; break; case 118: result = 8; break; case 130: result = 16; break; case 131: result = 32; break; default: result = 0; break; } return result; } //----- (008B7620) -------------------------------------------------------- void *sub_8B7620() { return &unk_BA551C; } //----- (008B7630) -------------------------------------------------------- _DWORD *__thiscall sub_8B7630(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi _DWORD *result; // eax signed int v6; // ecx bool v7; // zf v4 = this; sub_8B88E0(this, a2); *v4 = &NiInputDI8Keyboard::`vftable'; v4[26] = a3; if ( !a3 ) return v4; sub_8B6F40(v4); if ( (*(int (__stdcall **)(_DWORD, void *))(*(_DWORD *)v4[26] + 44))(v4[26], &unk_A4876C) ) goto LABEL_19; v6 = 0; if ( a4 & 0x10000000 ) v6 = 4; if ( a4 & 0x20000000 ) v6 |= 8u; if ( a4 & 0x40000000 ) v6 |= 1u; if ( a4 < 0 ) v6 |= 2u; if ( (*(int (__stdcall **)(_DWORD, int, signed int))(*(_DWORD *)v4[26] + 52))(v4[26], dword_BA54E4, v6) ) { LABEL_19: v4[7] = -2147483640; return v4; } v7 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v4[26] + 28))(v4[26]) == 0; result = v4; if ( !v7 ) v4[7] = -2147483642; return result; } // A2B958: using guessed type void *NiInputDI8Keyboard::`vftable'; // BA54E4: using guessed type int dword_BA54E4; //----- (008B76E0) -------------------------------------------------------- _DWORD **__thiscall sub_8B76E0(void *this, char a2) { _DWORD **v2; // esi int v3; // eax v2 = (_DWORD **)this; v3 = *((_DWORD *)this + 26); *(_DWORD *)this = &NiInputDI8Keyboard::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); (*(void (__stdcall **)(_DWORD *))(*v2[26] + 8))(v2[26]); } v2[26] = 0; sub_8B8940(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B958: using guessed type void *NiInputDI8Keyboard::`vftable'; //----- (008B7730) -------------------------------------------------------- int __thiscall sub_8B7730(int *this) { int *v1; // esi int v2; // eax int v4; // eax unsigned int v5; // eax int *v6; // ecx int v7; // ebx int v8; // edi int v9; // [esp+4h] [ebp-8h] unsigned int v10; // [esp+8h] [ebp-4h] v1 = this; this[7] = 0; sub_8B8950(this); v2 = v1[26]; if ( !v2 ) { v1[7] = -2147483644; return v1[7]; } v4 = (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)v2 + 36))(v2, 256, v1 + 27); if ( v4 ) { if ( v4 == -2147024866 || v4 == -2147024884 || v4 == -2147024891 ) { (*(void (__thiscall **)(int *))(*v1 + 20))(v1); v1[7] = -2147483642; return v1[7]; } } else { v5 = 0; v6 = v1 + 91; v10 = 0; v9 = (int)(v1 + 91); do { if ( *((_BYTE *)v1 + v5 + 108) ) { v7 = *v6; if ( !*v6 || !((*((_BYTE *)v1 + (v7 >> 3) + 33) >> (v7 & 7)) & 1) ) { *((_BYTE *)v1 + (v7 >> 3) + 33) |= 1 << (v7 & 7); v1[4] |= sub_8B7510(v7); if ( v7 == 58 ) *((_BYTE *)v1 + 32) = *((_BYTE *)v1 + 32) == 0; } } else { v8 = *v6; if ( *v6 && (*((_BYTE *)v1 + (v8 >> 3) + 33) >> (v8 & 7)) & 1 ) { *((_BYTE *)v1 + (v8 >> 3) + 33) &= ~(1 << (v8 & 7)); v1[4] &= ~sub_8B7510(v8); } } v5 = v10 + 1; v6 = (int *)(v9 + 4); v10 = v5; v9 += 4; } while ( v5 < 0x100 ); } return v1[7]; } //----- (008B7860) -------------------------------------------------------- int __thiscall sub_8B7860(_DWORD **this) { (*(void (__stdcall **)(_DWORD *))(*this[17] + 32))(this[17]); return 0; } //----- (008B7870) -------------------------------------------------------- _DWORD *__thiscall sub_8B7870(_DWORD **this) { _DWORD **v1; // esi int v2; // eax _DWORD *result; // eax v1 = this; v2 = (*(int (__stdcall **)(_DWORD *))(*this[17] + 28))(this[17]); if ( v2 ) { if ( v2 == -2147024866 || v2 == -2147024884 || v2 == -2147024891 ) { v1[7] = (_DWORD *)-2147483642; result = v1[7]; } else { v1[7] = (_DWORD *)-2147483639; result = v1[7]; } } else { v1[7] = 0; result = v1[7]; } return result; } //----- (008B78C0) -------------------------------------------------------- void __thiscall sub_8B78C0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; switch ( a2 ) { case 0: sub_8B5880(this, 0, a3); v3[87] |= 1u; return; case 1: sub_8B5880(this, 1, a3); v3[87] |= 2u; return; case 2: sub_8B5880(this, 2, a3); v3[87] |= 4u; return; case 3: sub_8B5880(this, 3, a3); v3[87] |= 8u; return; case 4: sub_8B5880(this, 4, a3); v3[87] |= 0x10u; return; case 5: sub_8B5880(this, 5, a3); v3[87] |= 0x20u; return; case 6: sub_8B5880(this, 6, a3); v3[87] |= 0x40u; return; case 7: sub_8B5880(this, 7, a3); v3[87] |= 0x80u; return; case 8: if ( a3 <= 13500 ) { if ( a3 == 13500 ) { sub_8B6050(this, 0); sub_8B6050(v3, 2u); sub_8B5FC0(v3, 1u, 0xFFu); sub_8B5FC0(v3, 3u, 0xFFu); v3[86] |= 0xFu; return; } if ( a3 > 4500 ) { if ( a3 == 9000 ) { sub_8B6050(this, 0); sub_8B6050(v3, 1u); sub_8B6050(v3, 2u); sub_8B5FC0(v3, 3u, 0xFFu); v3[86] |= 0xFu; return; } } else { switch ( a3 ) { case 4500: sub_8B6050(this, 1u); sub_8B6050(v3, 2u); sub_8B5FC0(v3, 0, 0xFFu); sub_8B5FC0(v3, 3u, 0xFFu); v3[86] |= 0xFu; return; case -1: sub_8B6050(this, 1u); sub_8B6050(v3, 2u); sub_8B6050(v3, 3u); sub_8B6050(v3, 0); v3[86] |= 0xFu; return; case 0: sub_8B6050(this, 1u); sub_8B6050(v3, 2u); sub_8B6050(v3, 3u); sub_8B5FC0(v3, 0, 0xFFu); v3[86] |= 0xFu; return; } } goto LABEL_32; } if ( a3 > 27000 ) { if ( a3 != 31500 ) goto LABEL_32; sub_8B6050(this, 1u); sub_8B6050(v3, 3u); sub_8B5FC0(v3, 0, 0xFFu); goto LABEL_31; } switch ( a3 ) { case 27000: sub_8B6050(this, 0); sub_8B6050(v3, 1u); sub_8B6050(v3, 3u); goto LABEL_31; case 18000: sub_8B6050(this, 0); sub_8B6050(v3, 2u); sub_8B6050(v3, 3u); sub_8B5FC0(v3, 1u, 0xFFu); v3[86] |= 0xFu; return; case 22500: sub_8B6050(this, 0); sub_8B6050(v3, 3u); sub_8B5FC0(v3, 1u, 0xFFu); LABEL_31: sub_8B5FC0(v3, 2u, 0xFFu); break; } LABEL_32: v3[86] |= 0xFu; return; case 9: if ( a3 ) sub_8B5FC0(this, 8u, 0xFFu); else sub_8B6050(this, 8u); v3[86] |= 0x100u; return; case 10: if ( a3 ) sub_8B5FC0(this, 9u, 0xFFu); else sub_8B6050(this, 9u); v3[86] |= 0x200u; return; case 11: if ( a3 ) sub_8B5FC0(this, 0xAu, 0xFFu); else sub_8B6050(this, 0xAu); v3[86] |= 0x400u; return; case 12: if ( a3 ) sub_8B5FC0(this, 0xBu, 0xFFu); else sub_8B6050(this, 0xBu); v3[86] |= 0x800u; return; case 13: if ( a3 ) sub_8B5FC0(this, 4u, 0xFFu); else sub_8B6050(this, 4u); v3[86] |= 0x10u; return; case 14: if ( a3 ) sub_8B5FC0(this, 6u, 0xFFu); else sub_8B6050(this, 6u); v3[86] |= 0x40u; return; case 15: if ( a3 ) sub_8B5FC0(this, 0xEu, 0xFFu); else sub_8B6050(this, 0xEu); v3[86] |= 0x4000u; return; case 16: if ( a3 ) sub_8B5FC0(this, 0xFu, 0xFFu); else sub_8B6050(this, 0xFu); v3[86] |= 0x8000u; return; case 17: if ( a3 ) sub_8B5FC0(this, 5u, 0xFFu); else sub_8B6050(this, 5u); v3[86] |= 0x20u; return; case 18: if ( a3 ) sub_8B5FC0(this, 7u, 0xFFu); else sub_8B6050(this, 7u); v3[86] |= 0x80u; return; case 19: if ( a3 ) sub_8B5FC0(this, 0xCu, 0xFFu); else sub_8B6050(this, 0xCu); v3[86] |= 0x1000u; return; case 20: if ( a3 ) sub_8B5FC0(this, 0xDu, 0xFFu); else sub_8B6050(this, 0xDu); v3[86] |= 0x2000u; return; default: return; } } //----- (008B7E70) -------------------------------------------------------- void *sub_8B7E70() { return &unk_BA5524; } //----- (008B7E80) -------------------------------------------------------- _DWORD *__stdcall sub_8B7E80(int a1, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = 0; return result; } //----- (008B7E90) -------------------------------------------------------- _DWORD *__thiscall sub_8B7E90(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v15; // [esp+Ch] [ebp-18h] int v16; // [esp+10h] [ebp-14h] int v17; // [esp+14h] [ebp-10h] int v18; // [esp+18h] [ebp-Ch] int v19; // [esp+1Ch] [ebp-8h] v5 = this; sub_8B58C0(this, a2, a4, a5); *v5 = &NiInputDI8GamePad::`vftable'; v5[17] = a3; if ( a3 ) { v15 = 20; v16 = 16; v17 = 0; v18 = 0; v19 = 2500; if ( (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)a3 + 24))(a3, 5, &v15) ) { sub_8B2630("DI8GamePad> Warning - Set DeadZone failed!\n"); } else if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v5[17] + 28))(v5[17]) ) { v5[7] = -2147483642; } v6 = v5[14]; *(_DWORD *)(v6 + 16) = a4; *(_DWORD *)(v6 + 20) = a5; v7 = v5[14]; *(_DWORD *)(v7 + 48) = a4; *(_DWORD *)(v7 + 52) = a5; v8 = v5[14]; *(_DWORD *)(v8 + 80) = a4; *(_DWORD *)(v8 + 84) = a5; v9 = v5[14]; *(_DWORD *)(v9 + 112) = a4; *(_DWORD *)(v9 + 116) = a5; v10 = v5[14]; *(_DWORD *)(v10 + 144) = a4; *(_DWORD *)(v10 + 148) = a5; v11 = v5[14]; *(_DWORD *)(v11 + 176) = a4; *(_DWORD *)(v11 + 180) = a5; v12 = v5[14]; *(_DWORD *)(v12 + 208) = a4; *(_DWORD *)(v12 + 212) = a5; v13 = v5[14]; *(_DWORD *)(v13 + 240) = a4; *(_DWORD *)(v13 + 244) = a5; } return v5; } // A2B994: using guessed type void *NiInputDI8GamePad::`vftable'; //----- (008B7FA0) -------------------------------------------------------- _DWORD **__thiscall sub_8B7FA0(void *this, char a2) { _DWORD **v2; // esi int v3; // eax v2 = (_DWORD **)this; v3 = *((_DWORD *)this + 17); *(_DWORD *)this = &NiInputDI8GamePad::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); (*(void (__stdcall **)(_DWORD *))(*v2[17] + 8))(v2[17]); } v2[17] = 0; sub_8B59E0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A2B994: using guessed type void *NiInputDI8GamePad::`vftable'; //----- (008B7FF0) -------------------------------------------------------- signed int __thiscall sub_8B7FF0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v3; // eax signed int result; // eax int v5; // eax int v6; // eax int v7; // eax bool v8; // zf int *v9; // ebx signed int v10; // ecx int v11; // eax char v12; // dl int v13; // eax int v14; // ecx int v15; // eax char v16; // dl int v17; // eax int v18; // ecx int v19; // eax char v20; // dl int v21; // eax int v22; // ecx int v23; // eax char v24; // dl int v25; // eax _DWORD *v26; // eax int v27; // edx _DWORD *v28; // eax _DWORD *v29; // eax _DWORD *v30; // eax unsigned int v31; // [esp+8h] [ebp-15Ch] char v32; // [esp+Ch] [ebp-158h] char v33; // [esp+1Ch] [ebp-148h] v1 = this; v2 = 0; this[7] = 0; sub_8B5870(this); v3 = v1[17]; if ( !v3 ) goto LABEL_2; v31 = 17; v5 = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 28))(v3); if ( v5 && v5 != 1 ) { if ( v5 == -2147024866 || v5 == -2147024884 || v5 == -2147220983 ) { v1[7] = -2147483638; result = v1[7]; v1[3] = 2; } else { v1[7] = -2147483644; result = v1[7]; } } else { v6 = v1[17]; v1[3] = 0; v7 = (*(int (__stdcall **)(int))(*(_DWORD *)v6 + 100))(v6); if ( v7 && v7 != 1 ) { LABEL_2: result = -2147483644; v1[7] = -2147483644; return result; } if ( !(*(int (__stdcall **)(_DWORD, signed int, char *, unsigned int *, _DWORD))(*(_DWORD *)v1[17] + 40))( v1[17], 20, &v32, &v31, 0) ) { v8 = v31 == 0; if ( v31 ) { v1[86] = 0; v1[87] = 0; if ( !v8 ) { v9 = (int *)&v33; do { sub_8B78C0(v1, *v9, *(v9 - 3)); ++v2; v9 += 5; } while ( v2 < v31 ); v2 = 0; } v10 = 1; do { if ( !(v10 & v1[86]) ) { v11 = v1[12]; v12 = *(_BYTE *)(v11 + v2); v13 = v2 + v11; *(_BYTE *)(v13 + 2) = v12; *(_BYTE *)(v13 + 3) = *(_BYTE *)(v13 + 1); *(_DWORD *)(v13 + 12) = *(_DWORD *)(v13 + 8); } v14 = __ROL4__(v10, 1); if ( !(v14 & v1[86]) ) { v15 = v1[12]; v16 = *(_BYTE *)(v15 + v2 + 16); v17 = v15 + v2 + 16; *(_BYTE *)(v17 + 2) = v16; *(_BYTE *)(v17 + 3) = *(_BYTE *)(v17 + 1); *(_DWORD *)(v17 + 12) = *(_DWORD *)(v17 + 8); } v18 = __ROL4__(v14, 1); if ( !(v18 & v1[86]) ) { v19 = v1[12]; v20 = *(_BYTE *)(v19 + v2 + 32); v21 = v19 + v2 + 32; *(_BYTE *)(v21 + 2) = v20; *(_BYTE *)(v21 + 3) = *(_BYTE *)(v21 + 1); *(_DWORD *)(v21 + 12) = *(_DWORD *)(v21 + 8); } v22 = __ROL4__(v18, 1); if ( !(v22 & v1[86]) ) { v23 = v1[12]; v24 = *(_BYTE *)(v23 + v2 + 48); v25 = v23 + v2 + 48; *(_BYTE *)(v25 + 2) = v24; *(_BYTE *)(v25 + 3) = *(_BYTE *)(v25 + 1); *(_DWORD *)(v25 + 12) = *(_DWORD *)(v25 + 8); } v2 += 64; v10 = __ROL4__(v22, 1); } while ( v2 < 0x100 ); if ( !(v1[87] & 1) ) { v26 = (_DWORD *)v1[14]; v27 = v26[1]; v26[2] = *v26; v26[3] = v27; } if ( !(v1[87] & 2) ) { v28 = (_DWORD *)v1[14]; v28[10] = v28[8]; v28[11] = v28[9]; } if ( !(v1[87] & 4) ) { v29 = (_DWORD *)v1[14]; v29[18] = v29[16]; v29[19] = v29[17]; } if ( !(v1[87] & 8) ) { v30 = (_DWORD *)v1[14]; v30[26] = v30[24]; v30[27] = v30[25]; return v1[7]; } } else { (*(void (__thiscall **)(_DWORD *))(*v1 + 24))(v1); } } result = v1[7]; } return result; } //----- (008B8260) -------------------------------------------------------- _DWORD *__thiscall sub_8B8260(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ecx v2 = this; sub_8B62E0(this, a2); *v2 = &NiInputMouse::`vftable'; v2[8] = 0; v2[9] = 0; v2[12] = 0; v2[16] = 0; v2[17] = 0; v2[20] = 0; v2[24] = 0; v2[25] = 0; v2[28] = 0; v2[13] = 255; v2[21] = 255; v2[29] = 255; v2[14] = -1; v2[22] = -1; v2[30] = -1; v2[15] = 1; v2[23] = 1; v2[31] = 1; v2[32] = 0; *((_BYTE *)v2 + 132) = 0; v2[34] = 0; v2[35] = 0; v2[36] = 0; *((_BYTE *)v2 + 148) = 0; v2[38] = 0; v2[39] = 0; v2[40] = 0; *((_BYTE *)v2 + 164) = 0; v2[42] = 0; v2[43] = 0; v2[44] = 0; *((_BYTE *)v2 + 180) = 0; v2[46] = 0; v2[47] = 0; v2[48] = 0; *((_BYTE *)v2 + 196) = 0; v2[50] = 0; v2[51] = 0; v2[52] = 0; *((_BYTE *)v2 + 212) = 0; v2[54] = 0; v2[55] = 0; v2[56] = 0; *((_BYTE *)v2 + 228) = 0; v2[58] = 0; v2[59] = 0; v2[60] = 0; *((_BYTE *)v2 + 244) = 0; v2[62] = 0; v2[63] = 0; v3 = v2[9]; v2[9] = 0; v2[11] = v3; v2[19] = v2[17]; v2[17] = 0; v2[27] = v2[25]; v2[25] = 0; return v2; } // A2BA1C: using guessed type void *NiInputMouse::`vftable'; //----- (008B83B0) -------------------------------------------------------- void *sub_8B83B0() { return &unk_BA552C; } //----- (008B83C0) -------------------------------------------------------- LONG __thiscall sub_8B83C0(_DWORD *this) { *this = &NiInputMouse::`vftable'; return sub_8B6370(this); } // A2BA1C: using guessed type void *NiInputMouse::`vftable'; //----- (008B83D0) -------------------------------------------------------- int __userpurge sub_8B83D0@(_DWORD *a1@, int a2@, int a3) { _DWORD *v3; // esi int v4; // edi int v5; // eax v3 = a1; v4 = (*(int (**)(void))(*a1 + 8))(); v5 = v3[6]; if ( v5 && *(_DWORD *)(v5 + 12) && !v4 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, int))(*v3 + 36))(v3, a3, a2) ) v4 = 2147483648; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v3 + 40))(v3) ) v4 = 2147483648; } return v4; } // 8B83D0: could not find valid save-restore pair for ebx //----- (008B8430) -------------------------------------------------------- int __thiscall sub_8B8430(int this) { int v1; // edx int v2; // eax int result; // eax v1 = *(_DWORD *)(this + 36); *(_DWORD *)(this + 40) = *(_DWORD *)(this + 32); v2 = *(_DWORD *)(this + 64); *(_DWORD *)(this + 44) = v1; *(_DWORD *)(this + 72) = v2; *(_DWORD *)(this + 76) = *(_DWORD *)(this + 68); *(_DWORD *)(this + 104) = *(_DWORD *)(this + 96); *(_DWORD *)(this + 108) = *(_DWORD *)(this + 100); LOBYTE(v2) = *(_BYTE *)(this + 128); *(_BYTE *)(this + 131) = *(_BYTE *)(this + 129); LOBYTE(v1) = *(_BYTE *)(this + 144); *(_BYTE *)(this + 130) = v2; *(_DWORD *)(this + 140) = *(_DWORD *)(this + 136); *(_BYTE *)(this + 146) = v1; *(_BYTE *)(this + 147) = *(_BYTE *)(this + 145); *(_DWORD *)(this + 156) = *(_DWORD *)(this + 152); *(_BYTE *)(this + 162) = *(_BYTE *)(this + 160); *(_BYTE *)(this + 163) = *(_BYTE *)(this + 161); *(_DWORD *)(this + 172) = *(_DWORD *)(this + 168); *(_BYTE *)(this + 178) = *(_BYTE *)(this + 176); *(_BYTE *)(this + 179) = *(_BYTE *)(this + 177); *(_DWORD *)(this + 188) = *(_DWORD *)(this + 184); *(_BYTE *)(this + 194) = *(_BYTE *)(this + 192); *(_BYTE *)(this + 195) = *(_BYTE *)(this + 193); *(_DWORD *)(this + 204) = *(_DWORD *)(this + 200); *(_BYTE *)(this + 210) = *(_BYTE *)(this + 208); *(_BYTE *)(this + 211) = *(_BYTE *)(this + 209); *(_DWORD *)(this + 220) = *(_DWORD *)(this + 216); *(_BYTE *)(this + 226) = *(_BYTE *)(this + 224); *(_BYTE *)(this + 227) = *(_BYTE *)(this + 225); *(_DWORD *)(this + 236) = *(_DWORD *)(this + 232); *(_BYTE *)(this + 242) = *(_BYTE *)(this + 240); result = *(unsigned __int8 *)(this + 241); *(_BYTE *)(this + 243) = result; *(_DWORD *)(this + 252) = *(_DWORD *)(this + 248); return result; } //----- (008B8590) -------------------------------------------------------- char __thiscall sub_8B8590(_DWORD *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { int v8; // eax _DWORD *v9; // esi _DWORD *v10; // eax char v11; // cl bool v12; // zf v8 = this[6]; if ( !v8 ) return 0; v9 = *(_DWORD **)(v8 + 4); if ( !v9 ) return 0; while ( 1 ) { v10 = (_DWORD *)v9[2]; v9 = (_DWORD *)*v9; if ( !v10 || (a3 ^ v10[4]) & 0xFFFFF000 || v10[13] != a2 ) goto LABEL_11; v11 = (v10[5] >> 9) & 1; if ( !a4 ) break; if ( v11 ) { v12 = v10[11] == a5; goto LABEL_10; } LABEL_11: if ( !v9 ) return 0; } v12 = v11 == 0; LABEL_10: if ( !v12 ) goto LABEL_11; return 1; } //----- (008B8600) -------------------------------------------------------- char __thiscall sub_8B8600(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int *v3; // eax _DWORD *v4; // ebx int v5; // edi int v6; // eax int v7; // ecx int v8; // edx int v9; // esi bool v10; // al bool v11; // zf int v12; // eax int v14; // [esp+4h] [ebp-18h] int v15; // [esp+8h] [ebp-14h] char v16; // [esp+Ch] [ebp-10h] int *v17; // [esp+10h] [ebp-Ch] _DWORD *v18; // [esp+14h] [ebp-8h] bool v19; // [esp+1Ah] [ebp-2h] char v20; // [esp+1Bh] [ebp-1h] v2 = this; v3 = *(int **)(this[6] + 4); v18 = this; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v17 = (int *)*v3; if ( v4 ) { v5 = v4[13]; v15 = v4[5]; v6 = v4[4]; if ( v6 != 1073741825 && v6 != 1073741826 && v6 != 1073741827 && v6 != 1073807361 && v6 != 1073807362 && v6 != 1073807363 && sub_8B6550(v2, v4, v4[11]) ) { v7 = 4 * (v5 + 8); v8 = LOBYTE(v2[v7]); v9 = (int)&v2[v7]; v14 = v8; v20 = BYTE1(v18[4 * v5 + 32]); v19 = sub_4357D0(v9, &v16); v10 = sub_435800(v9, &v16); if ( v15 & 0x1000 || (!v20 ? (v11 = v10 == 0) : (v11 = v19 == 0), !v11) ) { if ( v15 & 0x100 ) v12 = v20 != 0; else v12 = v14; sub_8B3D00(a2, (int)v18, v4[3], 0, v12, v4[9]); } v2 = v18; } } if ( !v17 ) break; v3 = v17; } } return 1; } //----- (008B8730) -------------------------------------------------------- char __thiscall sub_8B8730(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD *v4; // esi int v5; // eax int v6; // ebx int v7; // eax int v8; // edi int v9; // ecx int v10; // ecx int v11; // edx char v12; // bl char v13; // al int v15; // [esp+4h] [ebp-18h] _DWORD *v16; // [esp+Ch] [ebp-10h] int v17; // [esp+10h] [ebp-Ch] int v18; // [esp+14h] [ebp-8h] v2 = this; v3 = *(_DWORD **)(this[6] + 4); v18 = (int)v2; if ( v3 ) { while ( 1 ) { v4 = (_DWORD *)v3[2]; v16 = (_DWORD *)*v3; if ( v4 ) { v5 = v4[4]; if ( v5 != 1073745920 && v5 != 1073745921 && v5 != 1073745922 && v5 != 1073745923 && v5 != 1073745924 && v5 != 1073745925 && v5 != 1073745926 && v5 != 1073745927 ) { v6 = v4[13]; v17 = v4[5]; if ( sub_8B6550(v2, v4, v4[12]) ) break; } } LABEL_39: if ( !v16 ) return 1; v3 = v16; } if ( v6 ) { if ( v6 == 1 ) { v7 = v2[17]; v8 = v2[19]; } else { if ( v6 != 2 ) goto LABEL_39; v7 = v2[25]; v8 = v2[27]; } } else { v7 = v2[9]; v8 = v2[11]; } if ( v17 & 0x1000 || v7 != v8 ) { v9 = v7; v15 = v7; if ( v17 & 0x40 ) { v10 = v4[7]; v11 = v4[8]; v12 = 0; if ( v7 >= v10 && v7 <= v11 ) v12 = 1; if ( v8 < v10 || (v13 = 1, v8 > v11) ) v13 = 0; if ( !(v17 & 0x1000) && v12 == v13 ) goto LABEL_38; if ( v17 & 0x100 ) v9 = v12 != 0; else v9 = v15; } else if ( v17 & 0x100 && v7 ) { v9 = 1; } sub_8B3D00(a2, v18, v4[3], 0, v9, v4[9]); } LABEL_38: v2 = (_DWORD *)v18; goto LABEL_39; } return 1; } //----- (008B88B0) -------------------------------------------------------- void *__thiscall sub_8B88B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiInputMouse::`vftable'; sub_8B6370(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2BA1C: using guessed type void *NiInputMouse::`vftable'; //----- (008B88E0) -------------------------------------------------------- _DWORD *__thiscall sub_8B88E0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_8B62E0(this, a2); *((_BYTE *)v2 + 32) = 0; *v2 = &NiInputKeyboard::`vftable'; *(_DWORD *)((char *)v2 + 33) = 0; *(_DWORD *)((char *)v2 + 37) = 0; *(_DWORD *)((char *)v2 + 41) = 0; *(_DWORD *)((char *)v2 + 45) = 0; *(_DWORD *)((char *)v2 + 49) = 0; *(_DWORD *)((char *)v2 + 53) = 0; *(_DWORD *)((char *)v2 + 57) = 0; *(_DWORD *)((char *)v2 + 61) = 0; *(_DWORD *)((char *)v2 + 65) = 0; *(_DWORD *)((char *)v2 + 69) = 0; *(_DWORD *)((char *)v2 + 73) = 0; *(_DWORD *)((char *)v2 + 77) = 0; *(_DWORD *)((char *)v2 + 81) = 0; *(_DWORD *)((char *)v2 + 85) = 0; *(_DWORD *)((char *)v2 + 89) = 0; *(_DWORD *)((char *)v2 + 93) = 0; v2[25] = 0; return v2; } // A2BA5C: using guessed type void *NiInputKeyboard::`vftable'; //----- (008B8940) -------------------------------------------------------- LONG __thiscall sub_8B8940(_DWORD *this) { *this = &NiInputKeyboard::`vftable'; return sub_8B6370(this); } // A2BA5C: using guessed type void *NiInputKeyboard::`vftable'; //----- (008B8950) -------------------------------------------------------- int __thiscall sub_8B8950(void *this) { (*(void (**)(void))(*(_DWORD *)this + 24))(); return 0; } //----- (008B8960) -------------------------------------------------------- void *sub_8B8960() { return &unk_BA5534; } //----- (008B8970) -------------------------------------------------------- void *__thiscall sub_8B8970(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiInputKeyboard::`vftable'; sub_8B6370(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A2BA5C: using guessed type void *NiInputKeyboard::`vftable'; //----- (008B89A0) -------------------------------------------------------- int __thiscall sub_8B89A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int result; // eax int v4; // eax _DWORD *v5; // ecx _DWORD *v6; // edi char v7; // al int v8; // ebx char v9; // al int v10; // [esp+4h] [ebp-10h] _DWORD *v11; // [esp+8h] [ebp-Ch] int v12; // [esp+Ch] [ebp-8h] char v13; // [esp+12h] [ebp-2h] char v14; // [esp+13h] [ebp-1h] v2 = this; result = (*(int (**)(void))(*this + 8))(); if ( !result ) { v4 = v2[6]; if ( v4 ) { if ( *(_DWORD *)(v4 + 12) ) { v5 = *(_DWORD **)(v4 + 4); if ( v5 ) { while ( 1 ) { v6 = (_DWORD *)v5[2]; v11 = (_DWORD *)*v5; if ( v6 ) { v14 = 0; v10 = v6[5]; if ( sub_8B6550(v2, v6, v6[10]) ) break; } LABEL_29: if ( !v11 ) goto LABEL_30; v5 = v11; } v7 = 0; v8 = 0; while ( 1 ) { if ( v7 ) goto LABEL_29; if ( v6[13] == v8 ) break; LABEL_28: if ( (unsigned int)++v8 >= 0x91 ) goto LABEL_29; } v12 = 0; if ( v8 && (*((_BYTE *)v2 + (v8 >> 3) + 33) >> (v8 & 7)) & 1 ) v12 = 255; if ( v10 & 0x100 ) v12 = v12 != 0; if ( !(v10 & 0x1000) ) { if ( !v8 ) goto LABEL_33; v9 = (*((_BYTE *)v2 + (v8 >> 3) + 33) >> (v8 & 7)) & 1; v13 = (*((_BYTE *)v2 + (v8 >> 3) + 33) >> (v8 & 7)) & 1; if ( v13 ) { if ( !sub_491940(v2, v8) ) { LABEL_24: v14 = 1; LABEL_27: v7 = 1; goto LABEL_28; } v9 = v13; } if ( !v9 ) { LABEL_33: if ( !sub_48E0A0(v2, v8) ) goto LABEL_24; } } if ( !v14 ) sub_8B3D00(a2, (int)v2, v6[3], 0, v12, v6[9]); goto LABEL_27; } } } LABEL_30: result = 0; } return result; } //----- (008B8AF0) -------------------------------------------------------- errno_t __thiscall sub_8B8AF0(int this) { return memcpy_s((void *)(this + 65), 0x20u, (const void *)(this + 33), 0x20u); } //----- (008B8B10) -------------------------------------------------------- char __thiscall sub_8B8B10(_DWORD *this, int a2, int a3, char a4, int a5, int a6, int a7, int a8) { int v8; // eax _DWORD *v9; // ecx _DWORD *v10; // eax char v12; // cl int v13; // eax v8 = this[6]; if ( !v8 ) return 0; v9 = *(_DWORD **)(v8 + 4); if ( !v9 ) return 0; while ( 1 ) { v10 = (_DWORD *)v9[2]; v9 = (_DWORD *)*v9; if ( v10 ) { if ( !((a3 ^ v10[4]) & 0xFFFFF000) && v10[13] == a2 ) break; } if ( !v9 ) return 0; } v12 = (v10[5] >> 9) & 1; if ( a4 ) { if ( v12 ) v13 = v10[10]; return 1; } if ( v12 ) return 1; return 1; } //----- (008B8B90) -------------------------------------------------------- void __cdecl sub_8B8B90(int a1, int a2, float a3, char *Src, int a5) { int v5; // ebx int v6; // edi int v7; // esi int v8; // edi void **v9; // eax void **v10; // esi int v11; // eax int v12; // edi unsigned int v13; // ebx unsigned int v14; // esi int v15; // eax int v16; // eax int v17; // esi int v18; // edi int v19; // eax int v20; // ST10_4 int v21; // ST0C_4 int v22; // eax int v23; // edi void **v24; // eax void **v25; // ebx int v26; // [esp+20h] [ebp-4h] int v27; // [esp+2Ch] [ebp+8h] float v28; // [esp+2Ch] [ebp+8h] v5 = a1; if ( !a1 ) return; v6 = *(_DWORD *)(a1 + 172); if ( v6 ) { v7 = *(_DWORD *)(v6 + 44); if ( v7 ) { v8 = sub_402BA0((int)dword_BA455C, a1); if ( v8 ) { v9 = (void **)sub_952220(v7, a2, a3, a1); v10 = v9; if ( v9 ) { sub_85AB50(v9, Src); (*(void (__thiscall **)(int, void **, _DWORD))(*(_DWORD *)v8 + 116))(v8, v10, 0); } } goto LABEL_7; } } if ( !(_BYTE)a5 ) goto LABEL_7; v16 = sub_402BA0((int)dword_BA478C, a1); v17 = v16; v27 = v16; if ( !v16 ) goto LABEL_7; if ( !v6 ) goto LABEL_7; v18 = *(_DWORD *)(v6 + 40); if ( v18 ) { if ( v18 != 1 ) goto LABEL_7; } v19 = *(_DWORD *)(v16 + 184); v20 = *(_DWORD *)(v19 + 32); v21 = *(unsigned __int16 *)(v19 + 12); v22 = sub_836FB0(); v23 = v22; v26 = v22; if ( !v22 ) { LABEL_7: v11 = sub_402BA0((int)dword_BA455C, v5); v12 = v11; if ( v11 ) { v13 = *(_DWORD *)(v11 + 188); v14 = 0; if ( v13 ) { do { if ( *(_DWORD *)(v12 + 188) > v14 ) { v15 = *(_DWORD *)(*(_DWORD *)(v12 + 180) + 4 * v14); if ( v15 ) sub_8B8B90(v15, a2, a3, Src, a5); } ++v14; } while ( v14 < v13 ); } } return; } v24 = (void **)sub_952220(v22, a2, a3, v5); v25 = v24; if ( v24 ) { sub_85AB50(v24, Src); (*(void (__stdcall **)(void **, _DWORD))(**(_DWORD **)(v17 + 32) + 116))(v25, 0); v25[22] = *(void **)(v17 + 88); v25[23] = *(void **)(v17 + 92); v25[24] = *(void **)(v17 + 96); qmemcpy(v25 + 13, (const void *)(v17 + 52), 0x24u); v28 = fabs(*(float *)(v27 + 100)); *((float *)v25 + 25) = v28; v23 = v26; } (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v23 + 8))(v23, 1); } //----- (008B8D30) -------------------------------------------------------- BOOL __cdecl sub_8B8D30(int a1, int a2, int a3, int a4, void ***a5) { void **v5; // esi sub_95C8F0(a1); v5 = sub_8B9140(a2, a3, a4); if ( v5 ) (*((void (__thiscall **)(void **, int))*v5 + 4))(v5, a1); *a5 = v5; return v5 != 0; } //----- (008B8D90) -------------------------------------------------------- void __thiscall sub_8B8D90(_DWORD *this, int a2) { sub_92BDF0(this, a2); } //----- (008B8DA0) -------------------------------------------------------- int __thiscall sub_8B8DA0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A2BA94: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A2BAA4: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008B8DE0) -------------------------------------------------------- void *__thiscall sub_8B8DE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2BA94: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008B8E10) -------------------------------------------------------- LONG __thiscall sub_8B8E10(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // esi _DWORD *v3; // ST00_4 v1 = this; *this = &NSBShaderLibrary::`vftable'; OutputDebugStringA("Releasing Binary Shaders!\n"); v2 = (_DWORD *)v1[7]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[6] + 8))(v1 + 6, v3); } v1[9] = 0; v1[7] = 0; v1[8] = 0; sub_8B8DA0(v1 + 6); return sub_92BD80(v1); } // A2BAB4: using guessed type void *NSBShaderLibrary::`vftable'; //----- (008B8E60) -------------------------------------------------------- int __thiscall sub_8B8E60(_DWORD *this, const char *a2) { _DWORD *v2; // esi int result; // eax v2 = (_DWORD *)this[7]; if ( !v2 ) return 0; while ( 1 ) { result = v2[2]; v2 = (_DWORD *)*v2; if ( result ) { if ( !strcmp(*(const char **)(result + 8), a2) ) break; } if ( !v2 ) return 0; } return result; } //----- (008B8EC0) -------------------------------------------------------- _DWORD *__thiscall sub_8B8EC0(_DWORD *this, int *a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // ebx int v5; // eax _DWORD *result; // eax v2 = this; v3 = (_DWORD *)(*(int (**)(void))(*this + 4))(); v4 = v3[2]; if ( v4 != *a2 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = *a2; v3[2] = *a2; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } *v3 = 0; v3[1] = v2[2]; result = (_DWORD *)v2[2]; if ( result ) { *result = v3; ++v2[3]; } else { ++v2[3]; v2[1] = v3; } v2[2] = v3; return result; } //----- (008B8F50) -------------------------------------------------------- void *__thiscall sub_8B8F50(void *this, char a2) { void *v2; // esi v2 = this; sub_8B8E10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B8F80) -------------------------------------------------------- void *__thiscall sub_8B8F80(void *this, char a2) { void *v2; // esi v2 = this; sub_8B8DA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B8FB0) -------------------------------------------------------- void **__thiscall sub_8B8FB0(_DWORD *this, int a2, const char *a3, void *a4) { _DWORD *v4; // eax void **result; // eax v4 = (_DWORD *)sub_8B8E60(this, a3); if ( v4 ) result = sub_95E070(v4, a2, a4); else result = 0; return result; } //----- (008B8FE0) -------------------------------------------------------- char __thiscall sub_8B8FE0(_DWORD *this, int *a2) { int v2; // esi _DWORD *v3; // ebx int **v5; // edi _DWORD *v6; // eax _DWORD *v7; // eax int v8; // esi int v9; // edx int v10; // ebx int v11; // eax int v12; // ebx int v13; // eax int v14; // edx int v15; // ebx int v16; // eax int v17; // ebx int v18; // eax int v19; // edx int v20; // ebx int v21; // eax int v22; // ebx int v23; // eax int *v24; // edi int v25; // ebx int v26; // eax v2 = (int)a2; v3 = this; if ( !a2 ) return 0; if ( sub_8B8E60(this, (const char *)a2[2]) ) { sub_92BE70("Shader %s already in list??\n"); return 0; } a2 = (int *)v2; InterlockedIncrement((volatile LONG *)(v2 + 4)); sub_8B8EC0(v3 + 6, (int *)&a2); if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v5 = (int **)(v3 + 5); if ( v3[5] || ((v6 = operator new(0x50u)) == 0 ? (v7 = 0) : (v7 = sub_9567B0(v6)), sub_56FF80(v3 + 5, (int)v7), *v5) ) { v8 = sub_95D4D0((_DWORD *)v2); sub_956880(*v5, v8); v9 = *(_DWORD *)v8; v10 = **v5; a2 = *v5; v11 = (*(int (__thiscall **)(int))(v9 + 20))(v8); (*(void (__thiscall **)(int *, int))(v10 + 56))(a2, v11); v12 = **v5; a2 = *v5; v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 24))(v8); (*(void (__thiscall **)(int *, int))(v12 + 56))(a2, v13); v14 = *(_DWORD *)v8; v15 = **v5; a2 = *v5; v16 = (*(int (__thiscall **)(int))(v14 + 28))(v8); (*(void (__thiscall **)(int *, int))(v15 + 60))(a2, v16); v17 = **v5; a2 = *v5; v18 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 32))(v8); (*(void (__thiscall **)(int *, int))(v17 + 60))(a2, v18); v19 = *(_DWORD *)v8; v20 = **v5; a2 = *v5; v21 = (*(int (__thiscall **)(int))(v19 + 36))(v8); (*(void (__thiscall **)(int *, int))(v20 + 64))(a2, v21); v22 = **v5; a2 = *v5; v23 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 40))(v8); (*(void (__thiscall **)(int *, int))(v22 + 64))(a2, v23); v24 = *v5; v25 = *v24; v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 44))(v8); (*(void (__thiscall **)(int *, int))(v25 + 68))(v24, v26); } return 1; } //----- (008B9140) -------------------------------------------------------- void **__cdecl sub_8B9140(int a1, int a2, int a3) { void **v3; // edi int v4; // esi void **result; // eax char *v6; // ebx _DWORD *v7; // eax v3 = (void **)operator new(0x28u); v4 = 0; if ( v3 ) { sub_92BD50(v3, "NSBShaderLib"); *v3 = &NSBShaderLibrary::`vftable'; v3[9] = 0; v3[7] = 0; v3[8] = 0; v3[6] = &NiTPointerList>::`vftable'; result = v3; if ( a1 > 0 ) { do { v6 = *(char **)(a2 + 4 * v4); v7 = sub_8B94C0(); LOBYTE(v6) = sub_8B9870(v7, (int)v3, v6, a3); sub_8B9440(); if ( !(_BYTE)v6 ) sub_92BE70("LoadNSBShaders failed on %s\n", *(_DWORD *)(a2 + 4 * v4)); ++v4; } while ( v4 < a1 ); result = v3; } } else { result = 0; } if ( !result[9] ) { (*(void (__thiscall **)(void **, signed int))*result)(result, 1); result = 0; } return result; } // A2BAB4: using guessed type void *NSBShaderLibrary::`vftable'; // A2BAEC: using guessed type void *NiTPointerList>::`vftable'; //----- (008B91F0) -------------------------------------------------------- void sub_8B91F0() { if ( !byte_BA553E ) byte_BA553E = 1; } // BA553E: using guessed type char byte_BA553E; //----- (008B9210) -------------------------------------------------------- void sub_8B9210() { if ( byte_BA553E ) { byte_BA553E = 0; sub_92BD00(0); } } // BA553E: using guessed type char byte_BA553E; //----- (008B9260) -------------------------------------------------------- int __thiscall sub_8B9260(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,char *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,char *>::`vftable'; return result; } // A2BB4C: using guessed type void *NiTListBase,char *>::`vftable'; // A2BB5C: using guessed type void *NiTPointerListBase,char *>::`vftable'; //----- (008B92A0) -------------------------------------------------------- void *__thiscall sub_8B92A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,char *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A2BB4C: using guessed type void *NiTListBase,char *>::`vftable'; //----- (008B92D0) -------------------------------------------------------- void *__thiscall sub_8B92D0(void *this, char a2) { void *v2; // esi v2 = this; sub_8B9260(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008B9300) -------------------------------------------------------- char __thiscall sub_8B9300(_DWORD *this, _DWORD *a2) { _DWORD **v2; // ebx _DWORD *v3; // eax char *v4; // esi _DWORD *v5; // eax void **v6; // eax int *v7; // edi _DWORD *v8; // eax char result; // al int v10; // [esp+Ch] [ebp-110h] char v11; // [esp+13h] [ebp-109h] char ArgList; // [esp+14h] [ebp-108h] v2 = (_DWORD **)this; v3 = (_DWORD *)this[2]; v10 = 0; v11 = 1; *this = v3; if ( !v3 ) return v11; *this = *v3; v4 = (char *)v3[2]; if ( !v4 ) return v11; do { sub_92BFD0(v4, &ArgList, 0x104u); if ( sub_8B8E60(a2, &ArgList) ) { sub_92BE70("%s (%s) already loaded?\n", &ArgList, v4); } else { sub_92BE70("Attempting to load %s\n", v4); v5 = operator new(0xB8u); if ( !v5 ) goto LABEL_10; v6 = (void **)sub_95E450(v5); v7 = (int *)v6; if ( !v6 ) goto LABEL_10; if ( !sub_95E3D0(v6, v4) ) { sub_92BE70("Failed to load %s\n", v4); (*(void (__thiscall **)(int *, signed int))*v7)(v7, 1); LABEL_10: v11 = 0; goto LABEL_11; } sub_92BE70("Loaded %s\n", v4); sub_8B8FE0(a2, v7); ++v10; } LABEL_11: v8 = *v2; if ( !*v2 ) break; *v2 = (_DWORD *)*v8; v4 = (char *)v8[2]; } while ( v4 ); result = 1; if ( !v10 ) return v11; return result; } //----- (008B9440) -------------------------------------------------------- void sub_8B9440() { void *v0; // esi if ( dword_BA5544 ) { v0 = dword_BA5544; sub_8C63E0(dword_BA5544); operator delete(v0); } dword_BA5544 = 0; } //----- (008B9470) -------------------------------------------------------- _DWORD *__thiscall sub_8B9470(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // esi result = this; v2 = this + 1; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerList::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; return result; } // A2BBC0: using guessed type void *NiTPointerList::`vftable'; //----- (008B94C0) -------------------------------------------------------- _DWORD *sub_8B94C0() { _DWORD *result; // eax _DWORD *v1; // eax result = dword_BA5544; if ( !dword_BA5544 ) { v1 = operator new(0x14u); if ( v1 ) { result = sub_8B9470(v1); dword_BA5544 = result; } else { result = 0; dword_BA5544 = 0; } } return result; } //----- (008B94F0) -------------------------------------------------------- int __stdcall sub_8B94F0(char *Src, int a2, int a3, int a4) { int v4; // edi unsigned int v5; // kr00_4 void *v6; // ecx unsigned int v7; // kr04_4 char v8; // cl void *v9; // ecx HANDLE hFindFile; // [esp+14h] [ebp-454h] struct _WIN32_FIND_DATAA FindFileData; // [esp+18h] [ebp-450h] char v13; // [esp+158h] [ebp-310h] char v14[258]; // [esp+159h] [ebp-30Fh] char v15; // [esp+25Bh] [ebp-20Dh] CHAR FileName; // [esp+25Ch] [ebp-20Ch] char v17[259]; // [esp+25Dh] [ebp-20Bh] CHAR Dst; // [esp+360h] [ebp-108h] if ( !Src || !strcmp(Src, &byte_9A8050) || !a2 || !strcmp((const char *)a2, &byte_9A8050) ) return 0; v4 = 0; strncpy_s(&v13, 0x104u, Src, 0x104u); v5 = strlen(&v13); LOBYTE(v6) = FindFileData.cAlternateFileName[v5 + 15]; if ( (_BYTE)v6 != 92 && (_BYTE)v6 != 47 ) { *(&v13 + v5) = 92; v14[v5] = 0; } nullsub_6(v6); memset(&FindFileData, 0, 0x140u); strcpy_s(&FileName, 0x104u, Src); v7 = strlen(&FileName); v8 = *(&v15 + v7); if ( v8 != 92 && v8 != 47 ) { *(&FileName + v7) = 92; v17[v7] = 0; } strcat_s(&FileName, 0x104u, "*"); nullsub_6(v9); hFindFile = FindFirstFileA(&FileName, &FindFileData); if ( hFindFile != (HANDLE)-1 ) { strcpy_s(&Dst, 0x104u, &v13); strcat_s(&Dst, 0x104u, FindFileData.cFileName); nullsub_6(&Dst); do { strcpy_s(&Dst, 0x104u, &v13); strcat_s(&Dst, 0x104u, FindFileData.cFileName); if ( GetFileAttributesA(&Dst) & 0x10 ) { if ( strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..") ) { if ( (_BYTE)a3 ) { strcat_s(&Dst, 0x104u, "\\"); sub_92BE70(" Recurse directory %s\n", &Dst); v4 += sub_8B94F0(&Dst, a2, a3, a4); } } } else if ( sub_8B98E0(&Dst, (char *)a2, a4) ) { ++v4; } } while ( FindNextFileA(hFindFile, &FindFileData) ); FindClose(hFindFile); } return v4; } // 8B94F0: using guessed type char var_30F[258]; // 8B94F0: using guessed type char var_20B[259]; //----- (008B9870) -------------------------------------------------------- bool __thiscall sub_8B9870(_DWORD *this, int a2, char *Src, int a4) { _DWORD *v4; // esi v4 = this; sub_8B94F0(Src, (int)".NSB", a4, (int)(this + 1)); return sub_8B9300(v4, (_DWORD *)a2) != 0; } //----- (008B98B0) -------------------------------------------------------- _DWORD *__cdecl sub_8B98B0(char *Src, int a2) { _DWORD *result; // eax _DWORD *v3; // esi result = sub_8B9C00(); if ( result ) { v3 = (_DWORD *)sub_8B9C60(result, Src, a2); sub_8B9C30(); result = v3; } return result; } //----- (008B98E0) -------------------------------------------------------- char __stdcall sub_8B98E0(char *Src, char *a2, int a3) { unsigned int v3; // kr00_4 char *v5; // [esp+Ch] [ebp-108h] char Dst; // [esp+10h] [ebp-104h] if ( !Src ) return 0; if ( !strcmp(Src, &byte_9A8050) ) return 0; sub_92C080(Src, &Dst, 0x100u); if ( _stricmp(&Dst, a2) ) return 0; sub_92BE70(" Found %s File %s\n", a2, Src); v3 = strlen(Src); v5 = (char *)operator new(v3 + 1); strcpy_s(v5, v3 + 1, Src); sub_6B9900((_DWORD *)a3, &v5); return 1; } //----- (008B99E0) -------------------------------------------------------- int __thiscall sub_8B99E0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax char *v3; // esi _DWORD *v4; // ebx _DWORD *v5; // esi int *v6; // ecx _DWORD *v7; // edi _DWORD *v8; // edi _DWORD *v9; // ebx _DWORD *v10; // edi _DWORD *v11; // ST20_4 _DWORD *v12; // eax _DWORD *v14; // [esp+4h] [ebp-214h] int v15; // [esp+8h] [ebp-210h] char DstBuf; // [esp+Ch] [ebp-20Ch] char ArgList; // [esp+110h] [ebp-108h] v1 = this; v14 = this; sub_8B9E80(); v2 = (_DWORD *)v1[2]; v15 = 0; *v1 = v2; if ( v2 ) { *v1 = *v2; v3 = (char *)v2[2]; if ( v3 ) { while ( 1 ) { sub_92BE70("Attempting to parse %s\n", v3); if ( !sub_8C1AC0(v3) ) break; sub_92BE70("Failed to parse %s\n", v3); LABEL_30: v12 = (_DWORD *)*v1; if ( *v1 ) { *v1 = *v12; v3 = (char *)v12[2]; if ( v3 ) continue; } goto LABEL_32; } sub_92BF00(v3, &ArgList, 0x104u); v4 = (_DWORD *)dword_AC1558; v5 = 0; if ( !dword_AC1558 ) { LABEL_20: v8 = (_DWORD *)dword_AC1558; if ( dword_AC1558 ) { do { v9 = (_DWORD *)v8[2]; v8 = (_DWORD *)*v8; if ( v9 ) { sub_8B9CA0(v9); operator delete(v9); } } while ( v8 ); } v10 = (_DWORD *)dword_AC1558; if ( dword_AC1558 ) { do { v11 = v10; v10 = (_DWORD *)*v10; off_AC1554[2](&off_AC1554, (char)v11); } while ( v10 ); } dword_AC1560 = 0; dword_AC1558 = 0; dword_AC155C = 0; if ( v5 && !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); v1 = v14; goto LABEL_30; } while ( 1 ) { v6 = (int *)v4[2]; v4 = (_DWORD *)*v4; if ( v6 ) { v7 = sub_8B9CD0(v6); if ( v5 != v7 ) { if ( v5 && !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); v5 = v7; if ( !v7 ) goto LABEL_19; InterlockedIncrement(v7 + 1); } if ( v5 ) { sub_92BE70("Parsed Shader %s\n", v5[2]); sub_92BE70("Storing binary version of shader %s\n", v5[2]); sub_7FF6E0(&DstBuf, 0x104u, "%s%s.NSB", &ArgList, v5[2]); if ( sub_95E380((const char **)v5, &DstBuf, 0) ) ++v15; if ( !InterlockedDecrement(v5 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); v5 = 0; } } LABEL_19: if ( !v4 ) goto LABEL_20; } } } LABEL_32: sub_8B9E90(); return v15; } // 8B9E80: using guessed type int sub_8B9E80(void); // 8B9E90: using guessed type int sub_8B9E90(void); // AC1554: using guessed type int (__thiscall **off_AC1554)(void *, char); // AC1558: using guessed type int dword_AC1558; // AC155C: using guessed type int dword_AC155C; // AC1560: using guessed type int dword_AC1560; //----- (008B9C00) -------------------------------------------------------- _DWORD *sub_8B9C00() { _DWORD *result; // eax _DWORD *v1; // eax result = dword_BA554C; if ( !dword_BA554C ) { v1 = operator new(0x14u); if ( v1 ) { result = sub_8B9470(v1); dword_BA554C = result; } else { result = 0; dword_BA554C = 0; } } return result; } //----- (008B9C30) -------------------------------------------------------- void sub_8B9C30() { void *v0; // esi if ( dword_BA554C ) { v0 = dword_BA554C; sub_8C63E0(dword_BA554C); operator delete(v0); } dword_BA554C = 0; } //----- (008B9C60) -------------------------------------------------------- int __thiscall sub_8B9C60(_DWORD *this, char *Src, int a3) { _DWORD *v3; // esi v3 = this; sub_8B94F0(Src, (int)".NSF", a3, (int)(this + 1)); return sub_8B99E0(v3); } //----- (008B9CA0) -------------------------------------------------------- void __thiscall sub_8B9CA0(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = *this; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } *v1 = 0; } } //----- (008B9CD0) -------------------------------------------------------- _DWORD *__thiscall sub_8B9CD0(int *this) { int *v1; // ebx _DWORD *v2; // eax _DWORD *v3; // edi int v4; // esi v1 = this; if ( *this ) return (_DWORD *)*this; v2 = operator new(0xB8u); if ( v2 ) v3 = sub_95E450(v2); else v3 = 0; v4 = *v1; if ( (_DWORD *)*v1 == v3 ) return (_DWORD *)*v1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v1 = (int)v3; if ( !v3 ) return 0; InterlockedIncrement(v3 + 1); return (_DWORD *)*v1; } //----- (008B9D50) -------------------------------------------------------- int __cdecl sub_8B9D50(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1); } // BA6F80: using guessed type char byte_BA6F80; //----- (008B9D80) -------------------------------------------------------- int __usercall sub_8B9D80@(signed __int16 *a1@, unsigned int a2@) { signed __int16 *v2; // esi FILE *v3; // eax int v4; // ST08_4 FILE *v5; // eax FILE *v6; // eax v2 = a1; v3 = (FILE *)sub_7D6CEE(); fprintf(v3 + 2, "Stack now"); for ( ; (unsigned int)v2 <= a2; ++v2 ) { v4 = *v2; v5 = (FILE *)sub_7D6CEE(); fprintf(v5 + 2, " %d", v4); } v6 = (FILE *)sub_7D6CEE(); return fprintf(v6 + 2, "\n"); } //----- (008B9DE0) -------------------------------------------------------- int __usercall sub_8B9DE0@(int a1@) { int v1; // ST0C_4 FILE *v2; // eax int v3; // esi __int16 i; // ax char *v5; // ST0C_4 FILE *v6; // eax char *v7; // ST0C_4 FILE *v8; // eax v1 = (unsigned __int16)word_A2F730[a1]; v2 = (FILE *)sub_7D6CEE(); fprintf(v2 + 2, "Reducing stack by rule %d (line %u), ", a1 - 1, v1); v3 = (unsigned __int16)word_A2E4A0[a1]; for ( i = word_A2E930[v3]; i >= 0; ++v3 ) { v5 = off_A2FBC0[i]; v6 = (FILE *)sub_7D6CEE(); fprintf(v6 + 2, "%s ", v5); i = word_A2E932[v3]; } v7 = off_A2FBC0[(unsigned __int16)word_A303C0[a1]]; v8 = (FILE *)sub_7D6CEE(); return fprintf(v8 + 2, "-> %s\n", v7); } // A2E4A0: using guessed type __int16 word_A2E4A0[]; // A2E930: using guessed type __int16 word_A2E930[]; // A2FBC0: using guessed type char *off_A2FBC0[511]; //----- (008B9EA0) -------------------------------------------------------- int __cdecl sub_8B9EA0(char *a1) { _DWORD *v1; // eax if ( !a1 ) return 0; if ( !strcmp(a1, &byte_9A8050) ) return 0; if ( !dword_BA5C94 ) return 0; dword_BA5C98 = dword_BA5C94 + 96; if ( dword_BA5C94 == -96 ) return 0; v1 = sub_9603D0((_DWORD *)(dword_BA5C94 + 96), a1); if ( !v1 ) { dword_BA5C98 = dword_BA5C94 + 76; if ( dword_BA5C94 == -76 ) return 0; v1 = sub_9603D0((_DWORD *)(dword_BA5C94 + 76), a1); if ( !v1 ) return 0; } dword_BA5C98 = 0; return sub_965070(v1); } // BA5C94: using guessed type int dword_BA5C94; // BA5C98: using guessed type int dword_BA5C98; //----- (008B9F30) -------------------------------------------------------- signed int __cdecl sub_8B9F30(const char *a1) { unsigned int v1; // esi signed int result; // eax char v3[64]; // [esp+8h] [ebp-44h] if ( !a1 || !strcmp(a1, &byte_9A8050) ) return 0; v1 = 0; if ( strlen(a1) ) { do { v3[v1] = toupper(v3[a1 - v3 + v1]); ++v1; } while ( v1 < strlen(a1) ); } v3[v1] = 0; if ( !_stricmp(v3, "DX9") ) result = 2; else result = _stricmp(v3, "XENON") != 0 ? 0 : 8; return result; } // 8B9F30: using guessed type char var_44[64]; //----- (008BA040) -------------------------------------------------------- signed int __cdecl sub_8BA040(int a1, int a2) { signed int result; // eax switch ( a1 ) { case 3: switch ( a2 ) { case 3: return 3; case 4: return 4; case 5: goto LABEL_9; case 6: goto LABEL_11; case 7: return 7; case 8: goto LABEL_4; case 9: return 9; case 10: goto LABEL_17; default: goto LABEL_18; } goto LABEL_18; case 4: switch ( a2 ) { case 3: case 4: return 4; case 5: goto LABEL_9; case 6: goto LABEL_11; case 7: return 7; case 8: goto LABEL_4; case 9: return 9; case 10: goto LABEL_17; default: goto LABEL_18; } goto LABEL_18; case 5: switch ( a2 ) { case 3: case 4: case 5: LABEL_9: result = 5; break; default: goto LABEL_18; } return result; case 6: switch ( a2 ) { case 3: case 4: case 6: case 8: goto LABEL_11; default: goto LABEL_18; } goto LABEL_18; case 7: switch ( a2 ) { case 3: case 4: case 7: case 9: return 7; default: goto LABEL_18; } goto LABEL_18; case 8: switch ( a2 ) { case 3: case 6: LABEL_11: result = 6; break; case 4: case 8: LABEL_4: result = 8; break; default: goto LABEL_18; } return result; case 9: switch ( a2 ) { case 3: case 4: case 9: return 9; case 7: return 7; case 10: goto LABEL_17; default: goto LABEL_18; } goto LABEL_18; case 10: switch ( a2 ) { case 3: case 4: case 7: case 9: case 10: LABEL_17: result = 10; break; default: goto LABEL_18; } break; default: LABEL_18: result = 0; break; } return result; } //----- (008BA260) -------------------------------------------------------- signed int __cdecl sub_8BA260(int a1, int a2) { signed int result; // eax switch ( a1 ) { case 3: switch ( a2 ) { case 3: case 4: goto LABEL_3; default: goto LABEL_13; } goto LABEL_13; case 4: switch ( a2 ) { case 3: case 4: LABEL_3: result = 4; break; default: goto LABEL_13; } break; case 5: switch ( a2 ) { case 3: case 4: case 5: result = 5; break; default: goto LABEL_13; } break; case 6: switch ( a2 ) { case 3: case 4: case 6: result = 6; break; default: goto LABEL_13; } break; case 7: switch ( a2 ) { case 3: case 4: case 7: result = 7; break; default: goto LABEL_13; } break; case 10: switch ( a2 ) { case 3: case 4: case 10: result = 10; break; default: goto LABEL_13; } break; default: LABEL_13: result = 0; break; } return result; } //----- (008BA3E0) -------------------------------------------------------- signed int __cdecl sub_8BA3E0(int a1, int a2) { signed int result; // eax switch ( a1 ) { case 3: switch ( a2 ) { case 3: return 3; case 4: goto LABEL_5; default: goto LABEL_18; } goto LABEL_18; case 4: switch ( a2 ) { case 3: case 4: LABEL_5: result = 4; break; default: goto LABEL_18; } return result; case 5: if ( a2 != 5 ) goto LABEL_18; return 5; case 6: if ( a2 != 6 ) goto LABEL_18; return 6; case 7: if ( a2 != 7 ) goto LABEL_18; return 7; case 8: if ( a2 != 8 ) goto LABEL_18; return 8; case 9: if ( a2 != 9 ) goto LABEL_18; return 9; case 10: if ( a2 != 10 ) goto LABEL_18; result = 10; break; default: LABEL_18: result = 0; break; } return result; } //----- (008BA5D0) -------------------------------------------------------- int __thiscall sub_8BA5D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSFParsedShader *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSFParsedShader *>::`vftable'; return result; } // A33874: using guessed type void *NiTListBase,NSFParsedShader *>::`vftable'; // A33884: using guessed type void *NiTPointerListBase,NSFParsedShader *>::`vftable'; //----- (008BA610) -------------------------------------------------------- void *__thiscall sub_8BA610(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSFParsedShader *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A33874: using guessed type void *NiTListBase,NSFParsedShader *>::`vftable'; //----- (008BA640) -------------------------------------------------------- int __thiscall sub_8BA640(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1); } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA670) -------------------------------------------------------- bool __cdecl sub_8BA670(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA6A0) -------------------------------------------------------- bool __cdecl sub_8BA6A0(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 2; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA6D0) -------------------------------------------------------- bool __cdecl sub_8BA6D0(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 3; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA700) -------------------------------------------------------- bool __cdecl sub_8BA700(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 4; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA730) -------------------------------------------------------- bool __cdecl sub_8BA730(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 5; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA760) -------------------------------------------------------- bool __cdecl sub_8BA760(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 6; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA790) -------------------------------------------------------- bool __cdecl sub_8BA790(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 7; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA7C0) -------------------------------------------------------- bool __cdecl sub_8BA7C0(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 8; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA7F0) -------------------------------------------------------- bool __cdecl sub_8BA7F0(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 9; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA820) -------------------------------------------------------- bool __cdecl sub_8BA820(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 10; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA850) -------------------------------------------------------- bool __cdecl sub_8BA850(unsigned __int8 a1) { if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + a1) == 11; } // BA6F80: using guessed type char byte_BA6F80; //----- (008BA880) -------------------------------------------------------- void *__thiscall sub_8BA880(void *this, char a2) { void *v2; // esi v2 = this; sub_8BA5D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008BA8B0) -------------------------------------------------------- char __cdecl sub_8BA8B0(char *a1, int a2, int a3) { _DWORD *v4; // eax _DWORD *v5; // edi unsigned __int8 v6; // bl char v7; // al unsigned __int8 v8; // al unsigned __int8 v9; // al unsigned __int8 v10; // al unsigned __int8 v11; // al unsigned __int8 v12; // al unsigned __int8 v13; // al unsigned __int8 v14; // al unsigned __int8 v15; // al float v16; // [esp+4h] [ebp-68h] float v17; // [esp+8h] [ebp-64h] float v18; // [esp+Ch] [ebp-60h] int v19; // [esp+10h] [ebp-5Ch] char v20; // [esp+17h] [ebp-55h] char v21; // [esp+18h] [ebp-54h] float v22[9]; // [esp+34h] [ebp-38h] char v23; // [esp+58h] [ebp-14h] if ( !dword_BA5CB8 || !dword_BA5C94 ) return 0; dword_BA5C98 = dword_BA5C94 + 76; v4 = sub_9603D0((_DWORD *)(dword_BA5C94 + 76), a1); v5 = v4; if ( v4 ) { v6 = sub_965070(v4); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + v6) == 1 ) { sub_95E820((int)v5, &v20); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741825, 0, a2, a3, 0, 1, 1, &v20, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741825, 0, a2, a3, 0, 1, 1, &v20, 1); } else { v8 = sub_965070(v5); if ( sub_8BA6D0(v8) ) { sub_95E870(v5, &v19); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, int *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741827, 0, a2, a3, 0, 4, 4, &v19, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, int *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741827, 0, a2, a3, 0, 4, 4, &v19, 1); } else { v9 = sub_965070(v5); if ( sub_8BA700(v9) ) { sub_95E890((int)v5, (float *)&v19); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, int *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741828, 0, a2, a3, 0, 4, 4, &v19, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, int *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741828, 0, a2, a3, 0, 4, 4, &v19, 1); } else { v10 = sub_965070(v5); if ( sub_8BA730(v10) ) { sub_95E8B0((int)v5, &v18); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741829, 0, a2, a3, 0, 8, 8, &v18, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741829, 0, a2, a3, 0, 8, 8, &v18, 1); } else { v11 = sub_965070(v5); if ( sub_8BA760(v11) ) { sub_95E8E0((int)v5, &v17); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741830, 0, a2, a3, 0, 12, 12, &v17, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741830, 0, a2, a3, 0, 12, 12, &v17, 1); } else { v12 = sub_965070(v5); if ( sub_8BA790(v12) ) { *(float *)&v19 = COERCE_FLOAT(&v23); sub_95E910((int)v5, (float **)&v19); if ( byte_BA5C8C ) v7 = (*(int (__stdcall **)(int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5864, a1, 1073741831, 0, a2, a3, 0, 16, 16, &v23, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741831, 0, a2, a3, 0, 16, 16, &v23, 1); } else { v13 = sub_965070(v5); if ( sub_8BA7C0(v13) ) { sub_95F410((int)v5, v22); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741832, 0, a2, a3, 0, 36, 36, v22, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741832, 0, a2, a3, 0, 36, 36, v22, 1); } else { v14 = sub_965070(v5); if ( sub_8BA7F0(v14) ) { *(float *)&v19 = COERCE_FLOAT(&v21); sub_95F460(v5, (int)&v19, 0x40u); if ( byte_BA5C8C ) v7 = (*(int (__stdcall **)(int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5864, a1, 1073741833, 0, a2, a3, 0, 64, 64, &v21, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, char *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741833, 0, a2, a3, 0, 64, 64, &v21, 1); } else { v15 = sub_965070(v5); if ( !sub_8BA820(v15) ) return 0; v16 = 0.0; v17 = 0.0; v18 = 0.0; *(float *)&v19 = 0.0; sub_95E950((int)v5, &v16); if ( byte_BA5C8C ) v7 = (*(int (__thiscall **)(int, int, char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5CB8, dword_BA5864, a1, 1073741834, 0, a2, a3, 0, 16, 16, &v16, 1); else v7 = (*(int (__stdcall **)(char *, signed int, _DWORD, int, int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)dword_BA5CB8 + 4))( a1, 1073741834, 0, a2, a3, 0, 16, 16, &v16, 1); } } } } } } } } if ( !v7 ) return 0; } return 1; } // BA5864: using guessed type int dword_BA5864; // BA5C8C: using guessed type char byte_BA5C8C; // BA5C94: using guessed type int dword_BA5C94; // BA5C98: using guessed type int dword_BA5C98; // BA5CB8: using guessed type int dword_BA5CB8; // BA6F80: using guessed type char byte_BA6F80; //----- (008BADB0) -------------------------------------------------------- signed int __cdecl sub_8BADB0(signed int a1, int a2, int a3) { if ( a1 <= 805306368 ) { switch ( a1 ) { case 805306368: return sub_8BA3E0(a2, a3); case 268435456: return sub_8BA040(a2, a3); case 536870912: return sub_8BA260(a2, a3); } return 0; } if ( a1 != 0x40000000 ) return 0; return sub_8BA3E0(a2, a3); } //----- (008BAE20) -------------------------------------------------------- char __cdecl sub_8BAE20(int a1, int a2, int a3, const char *a4, signed int a5, const char *a6, char a7, char a8) { char result; // al int v9; // esi int v10; // eax _DWORD *v11; // ebx unsigned int v12; // eax unsigned int v13; // eax signed int v14; // eax signed int v15; // edi signed int v16; // eax signed int v17; // edi int v18; // eax int v19; // ecx int v20; // ebx int v21; // eax signed int v22; // eax int v23; // edx int v24; // esi int v25; // [esp-30h] [ebp-3Ch] signed int v26; // [esp+0h] [ebp-Ch] signed int v27; // [esp+4h] [ebp-8h] int v28; // [esp+8h] [ebp-4h] if ( !dword_BA5CB8 ) return 0; v9 = sub_9610E0((_DWORD *)dword_BA5CB8, a4); v10 = sub_9610E0((_DWORD *)dword_BA5CB8, a6); v11 = (_DWORD *)v10; v28 = v10; if ( !v9 || !v10 ) { sub_8C1D80((int)"CM_Operator operand not found\n"); return 0; } v12 = *(_DWORD *)(v9 + 16) & 0xF0000000; if ( v12 != 0x20000000 && v12 != 0x40000000 && v12 != 805306368 && v12 != 0x10000000 || (v13 = v11[4] & 0xF0000000, v13 != 0x20000000) && v13 != 0x40000000 && v13 != 805306368 && v13 != 0x10000000 ) { sub_8C1D80((int)"CM_Operator operand INVALID TYPE\n"); return 0; } v14 = sub_9611D0((_DWORD *)dword_BA5CB8, a4); v15 = v14; v26 = v14; v16 = sub_9611D0((_DWORD *)dword_BA5CB8, a6); v27 = v16; if ( v15 == -1 || v16 == -1 ) { sub_8C1D80((int)"CM_Operator operand INVALID INDEX\n"); return 0; } v17 = sub_8BA640((_DWORD *)v9); v18 = sub_8BA640(v11); v19 = dword_BA5868; v20 = v18; if ( (*(_DWORD *)(v9 + 16) & 0xF0000000) == 0x20000000 ) { if ( dword_BA5868 ) { if ( dword_BA5868 != 1 ) return 0; v17 = 7; } else { v21 = sub_92C8B0(*(char **)(v9 + 8)); v19 = dword_BA5868; v17 = v21; } } if ( (*(_DWORD *)(v28 + 16) & 0xF0000000) == 0x20000000 ) { if ( v19 ) { if ( v19 != 1 ) return 0; v20 = 7; } else { v20 = sub_92C8B0(*(char **)(v28 + 8)); } } if ( !v17 || sub_8BA670(v17) || sub_8BA6A0(v17) || sub_8BA850(v17) || !v20 || sub_8BA670(v20) || sub_8BA6A0(v20) || sub_8BA850(v20) ) { sub_8C1D80((int)"Invalid Operator Type"); return 0; } v22 = sub_8BADB0(a5, v17, v20); if ( !v22 ) { sub_8C1D80((int)"Invalid Operator - Result was invalid"); return 0; } v23 = a5 | v26 | (v27 << 12); if ( a8 ) v23 |= 0x2000000u; if ( a7 ) v23 |= 0x1000000u; v24 = *(_DWORD *)dword_BA5CB8; v25 = *((unsigned __int8 *)&dword_BA6F34 + v22) | 0x50000000; if ( !byte_BA5C8C ) { if ( (*(unsigned __int8 (__stdcall **)(int, int, int, int, int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(v24 + 4))( a1, v25, v23, a2, a3, 0, 0, 0, 0, 0) ) { return 1; } return 0; } result = (*(int (__stdcall **)(int, int, int, int, int, int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(v24 + 8))( dword_BA5864, a1, v25, v23, a2, a3, 0, 0, 0, 0, 0); if ( result ) return 1; return result; } // BA5864: using guessed type int dword_BA5864; // BA5868: using guessed type int dword_BA5868; // BA5C8C: using guessed type char byte_BA5C8C; // BA5CB8: using guessed type int dword_BA5CB8; // BA6F34: using guessed type int dword_BA6F34; //----- (008BB120) -------------------------------------------------------- signed int sub_8BB120() { unsigned int v0; // ebx FILE *v1; // eax char *v2; // edi char *i; // esi signed __int16 *v4; // eax unsigned int v5; // ecx int v6; // edi int v7; // eax void *v8; // esp int *v9; // eax int v10; // ecx int v11; // edx char *v12; // esi int *v13; // eax int v14; // ecx int v15; // edx unsigned int v16; // ebx FILE *v17; // eax FILE *v18; // eax int v19; // eax bool v20; // zf unsigned int v21; // eax FILE *v22; // eax signed int v23; // ebx FILE *v24; // eax FILE *v25; // edi FILE *v26; // eax unsigned int v27; // ecx int v28; // edi const CHAR *v29; // ebx FILE *v30; // eax int v31; // edx int v32; // ebx int v33; // ecx char *v34; // edi char *v35; // eax void *v36; // esp int *v37; // eax char v38; // cl char *v39; // edx _BYTE *v40; // eax char v41; // cl int v42; // ecx int v43; // edi __int16 *v44; // ebx const char *v45; // edx _BYTE *v46; // eax int v47; // edx char v48; // cl char *v49; // edx _BYTE *v50; // ecx char v51; // al FILE *v52; // eax FILE *v53; // edi FILE *v54; // eax int v55; // eax unsigned int v56; // eax int v57; // edi FILE *v58; // eax signed int v59; // ebx FILE *v60; // edi FILE *v61; // eax int v62; // ecx unsigned int v63; // eax FILE *v64; // eax void *v65; // eax _DWORD *v66; // eax char *v67; // esi const CHAR *v68; // ecx char *v69; // eax bool v70; // cf unsigned __int8 v71; // dl int v72; // eax char *v73; // edi rsize_t v74; // eax int v75; // eax int v76; // ecx int v77; // ecx int v78; // ecx double v79; // st7 int v80; // eax int v81; // ecx int v82; // ecx int v83; // ecx double v84; // st7 int v85; // eax int v86; // ecx int v87; // ecx double v88; // st7 int v89; // eax int v90; // ecx int v91; // ecx double v92; // st7 int v93; // eax int v94; // ecx int v95; // ecx int v96; // ecx double v97; // st7 int v98; // eax int v99; // ecx int v100; // ecx int v101; // ecx double v102; // st7 int v103; // eax int v104; // ecx int v105; // ecx double v106; // st7 int v107; // eax int v108; // ecx int v109; // ecx double v110; // st7 int v111; // eax int v112; // ecx double v113; // st7 int v114; // eax int v115; // ecx double v116; // st7 int v117; // ecx double v118; // st7 int v119; // ecx double v120; // st7 int v121; // ecx double v122; // st7 int v123; // ecx double v124; // st7 int v125; // eax int v126; // ecx int v127; // ecx int v128; // ecx int v129; // ecx int v130; // ecx int v131; // ecx int v132; // ecx int v133; // ecx int v134; // ecx int v135; // ecx int v136; // ecx int v137; // ecx int v138; // ecx int v139; // ecx int v140; // ecx double v141; // st7 int v142; // eax int v143; // ecx int v144; // ecx int v145; // ecx int v146; // ecx int v147; // ecx int v148; // ecx int v149; // ecx int v150; // ecx int v151; // ecx int v152; // ecx int v153; // ecx double v154; // st7 int v155; // eax int v156; // ecx int v157; // ecx int v158; // ecx int v159; // ecx int v160; // ecx int v161; // ecx int v162; // ecx int v163; // ecx double v164; // st7 int v165; // eax int v166; // ecx int v167; // ecx int v168; // ecx int v169; // ecx int v170; // ecx int v171; // ecx int v172; // ecx double v173; // st7 int v174; // eax int v175; // ecx int v176; // ecx int v177; // ecx double v178; // st7 int v179; // eax int v180; // ecx int v181; // ecx double v182; // st7 int v183; // eax int v184; // ecx int v185; // ecx int v186; // ecx double v187; // st7 int v188; // eax int v189; // ecx int v190; // ecx double v191; // st7 int v192; // eax int v193; // ecx double v194; // st7 int v195; // ecx double v196; // st7 float v197; // edi const char *v198; // ecx const char *v199; // eax float v200; // edx float v201; // edi float v202; // eax const char *v203; // eax double v204; // st7 float v205; // edi const char *v206; // eax char *v207; // edx float v208; // edi const char *v209; // eax unsigned int v210; // edx float v211; // edi const char *v212; // eax int v213; // edx float v214; // edi const char *v215; // eax unsigned int v216; // edx float v217; // edi const char *v218; // eax unsigned int v219; // edx float v220; // edi const char *v221; // eax int v222; // edx float v223; // edi const char *v224; // eax int v225; // edx float v226; // edi const char *v227; // eax int v228; // eax float v229; // edi const char *v230; // eax const CHAR *v231; // ecx char *v232; // eax unsigned __int8 v233; // dl char *v234; // edi const char *v235; // ebx int v236; // eax int v237; // esi unsigned int v238; // eax int v239; // ecx char *v240; // eax int v241; // edx __int16 v242; // cx unsigned int v243; // eax int v244; // ecx char *v245; // edi int v246; // ebx int v247; // ecx char *v248; // edi int v249; // ebx int v250; // edx char *v251; // edi const char *v252; // ebx int v253; // eax char *v254; // edi int v255; // ebx int v256; // ecx char *v257; // edi int v258; // ebx int v259; // edx char *v260; // edi const char *v261; // ebx int v262; // eax char *v263; // edi int v264; // ebx int v265; // ecx int v266; // edi int v267; // eax char *v268; // edx int v269; // edi int v270; // edx int v271; // eax int v272; // ebx int v273; // edi const char *v274; // edi const char *v275; // eax int v276; // edx int v277; // ecx char *v278; // edx int v279; // ebx int v280; // edi const char *v281; // edi const char *v282; // eax unsigned int v283; // ecx int v284; // ecx int v285; // edx int v286; // eax int v287; // edi int v288; // ebx char *v289; // esi const char *v290; // edi const char *v291; // eax int v292; // edi int v293; // ebx char *v294; // esi const char *v295; // edi int v296; // eax float v297; // edi float v298; // edi int v299; // eax const char *v300; // edx int v301; // ecx int v302; // eax int v303; // edi float v304; // edi float v305; // edi int v306; // eax const char *v307; // edx float v308; // edi int v309; // eax int v310; // eax float v311; // edi int v312; // eax const char *v313; // edx float v314; // edi int v315; // eax const char *v316; // ecx const char *v317; // eax const char *v318; // edx int v319; // eax float v320; // edi float v321; // edi int v322; // eax const char *v323; // edx double v324; // st7 float v325; // ecx int v326; // eax float v327; // edi int v328; // eax const char *v329; // edx float v330; // edi int v331; // eax const char *v332; // ecx char *v333; // ecx int v334; // eax int v335; // eax float v336; // edi int v337; // eax const char *v338; // ecx float v339; // edi const char *v340; // edx char *v341; // ecx const char *v342; // edx char *v343; // ecx int v344; // edi int v345; // eax Concurrency::details::_UnrealizedChore *v346; // eax int v347; // ecx float v348; // edx char *v349; // ecx int v350; // ebx int v351; // edi int v352; // eax Concurrency::details::_UnrealizedChore *v353; // eax const char *v354; // edx float v355; // eax char *v356; // ecx int v357; // edi int v358; // eax Concurrency::details::_UnrealizedChore *v359; // eax int v360; // edx float v361; // eax char *v362; // ecx int v363; // ebx int v364; // edi int v365; // eax Concurrency::details::_UnrealizedChore *v366; // eax const char *v367; // ecx float v368; // edx char *v369; // ecx int v370; // edi int v371; // eax Concurrency::details::_UnrealizedChore *v372; // eax int v373; // ecx float v374; // edx char *v375; // ecx int v376; // ebx int v377; // edi int v378; // eax Concurrency::details::_UnrealizedChore *v379; // eax const char *v380; // edx float v381; // eax char *v382; // ecx int v383; // edi int v384; // eax Concurrency::details::_UnrealizedChore *v385; // eax int v386; // edx float v387; // eax char *v388; // ecx int v389; // ebx int v390; // edi int v391; // eax Concurrency::details::_UnrealizedChore *v392; // eax const char *v393; // ecx float v394; // edx const char *v395; // edx float v396; // eax void (__stdcall *v397)(int, _DWORD, signed int, char *, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *); // edx char *v398; // eax void (__stdcall *v399)(_DWORD, signed int, char *, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *); // eax char *v400; // edx int v401; // edx char *v402; // eax const char **v403; // edi float v404; // edi const char *v405; // edx char *v406; // edi unsigned int v407; // edx unsigned int v408; // eax size_t v409; // ebx char *v410; // eax float v411; // edx char *v412; // edi int v413; // ecx float v414; // edx const char **v415; // edi const char *v416; // ecx char *v417; // edi unsigned int v418; // edx unsigned int v419; // eax size_t v420; // ebx char *v421; // eax float v422; // ecx char *v423; // edi int v424; // edx float v425; // eax int v426; // eax unsigned int v427; // edi int v428; // edx int v429; // ecx float v430; // edx char *v431; // eax void (__stdcall *v432)(int, _DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, int, _DWORD, const char *, const char *); // edx void (__stdcall *v433)(_DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, int, _DWORD, const char *, const char *); // eax int v434; // edx float v435; // eax char *v436; // ecx unsigned int v437; // edi int v438; // eax char *v439; // ecx int v440; // eax float v441; // ecx const char *v442; // ecx float v443; // edx char *v444; // eax const char *v445; // ecx int v446; // edx int v447; // eax char v448; // al int v449; // eax int v450; // ecx unsigned int v451; // eax int v452; // ecx unsigned int v453; // eax int v454; // ecx unsigned int v455; // eax int v456; // ecx int v457; // ecx unsigned int v458; // edi signed int v459; // edi signed int v460; // eax signed int v461; // eax signed int v462; // eax signed int v463; // eax char *v464; // esi signed int v465; // eax signed int v466; // eax signed int v467; // eax char *v468; // esi signed int v469; // eax signed int v470; // eax char *v471; // esi signed int v472; // eax const char *v473; // eax int v474; // edx int v475; // esi int v476; // edx float *v477; // eax int v478; // edx _BYTE *v479; // esi const CHAR *v480; // ecx _BYTE *v481; // eax bool v482; // cf unsigned __int8 v483; // dl int v484; // eax _DWORD *v485; // eax int v486; // eax char *v487; // esi int v488; // eax char *v489; // esi _DWORD *v490; // ebx _DWORD *v491; // ecx _DWORD *v492; // eax int v493; // eax int v494; // ecx float v495; // edi const char **v496; // eax const char *v497; // ecx float v498; // edi float v499; // edi const char *v500; // esi int v501; // edi int v502; // esi int v503; // edx int v504; // ecx double v505; // st7 int v506; // ecx int v507; // ecx const CHAR *v508; // ecx _BYTE *v509; // eax unsigned __int8 v510; // dl _DWORD *v511; // eax _DWORD *v512; // eax char *v513; // eax const char *v514; // esi char *v515; // eax const char *v516; // esi char *v517; // eax const char *v518; // esi const char *v519; // esi char *v520; // eax const char *v521; // esi char *v522; // eax const char *v523; // esi char *v524; // eax const char *v525; // esi const char *v526; // esi const char *v527; // edi const char *v528; // esi const char *v529; // edi const char *v530; // esi const char *v531; // esi int v532; // edi const CHAR *v533; // ecx _BYTE *v534; // eax unsigned __int8 v535; // dl const CHAR *v536; // ecx char *v537; // eax unsigned __int8 v538; // dl int v539; // ecx char *v540; // edx unsigned __int8 (__stdcall *v541)(_DWORD, _DWORD, char *, _DWORD, const char *, const char *); // eax float v542; // edi const char *v543; // eax unsigned int v544; // edx signed int v545; // ebx float *v546; // edi signed int v547; // eax int v548; // eax float v549; // ebx int v550; // ebx unsigned __int8 (__stdcall *v551)(_DWORD, int, char *, signed int, float *, signed int); // edx float v552; // ebx char *v553; // edx float v554; // ebx const char *v555; // eax int v556; // edx float v557; // edi int v558; // ecx int v559; // edi int v560; // edx _DWORD *v561; // eax _DWORD *v562; // eax int v563; // edi int *v564; // ecx int v565; // edi _DWORD *v566; // ebx int v567; // edi float v568; // edi int v569; // edx FILE *v571; // eax signed int v572; // edi FILE *v573; // esi FILE *v574; // eax double v575; // [esp+18h] [ebp-5D8h] CHAR *v576; // [esp+20h] [ebp-5D0h] CHAR *v577; // [esp+24h] [ebp-5CCh] double v578; // [esp+28h] [ebp-5C8h] double v579; // [esp+30h] [ebp-5C0h] double v580; // [esp+38h] [ebp-5B8h] double v581; // [esp+40h] [ebp-5B0h] double v582; // [esp+48h] [ebp-5A8h] double v583; // [esp+50h] [ebp-5A0h] char v584[8]; // [esp+58h] [ebp-598h] double v585; // [esp+60h] [ebp-590h] char v586[8]; // [esp+68h] [ebp-588h] double v587; // [esp+70h] [ebp-580h] char v588[8]; // [esp+78h] [ebp-578h] double v589; // [esp+80h] [ebp-570h] char *v590; // [esp+88h] [ebp-568h] float v591; // [esp+8Ch] [ebp-564h] const char *v592[5]; // [esp+90h] [ebp-560h] const char *v593[5]; // [esp+98h] [ebp-558h] char v594; // [esp+A4h] [ebp-54Ch] float v595; // [esp+A8h] [ebp-548h] float v596; // [esp+ACh] [ebp-544h] float v597; // [esp+B0h] [ebp-540h] float v598; // [esp+B4h] [ebp-53Ch] float v599; // [esp+B8h] [ebp-538h] float v600; // [esp+BCh] [ebp-534h] float v601; // [esp+C0h] [ebp-530h] float v602; // [esp+C4h] [ebp-52Ch] float v603; // [esp+C8h] [ebp-528h] float v604; // [esp+CCh] [ebp-524h] float v605; // [esp+D0h] [ebp-520h] float v606; // [esp+D4h] [ebp-51Ch] float v607; // [esp+D8h] [ebp-518h] float v608; // [esp+DCh] [ebp-514h] float v609; // [esp+E0h] [ebp-510h] float v610; // [esp+E4h] [ebp-50Ch] int v611; // [esp+E8h] [ebp-508h] int v612; // [esp+ECh] [ebp-504h] char *v613; // [esp+F0h] [ebp-500h] int v614; // [esp+F4h] [ebp-4FCh] int v615; // [esp+F8h] [ebp-4F8h] int v616; // [esp+FCh] [ebp-4F4h] char *v617; // [esp+100h] [ebp-4F0h] int v618; // [esp+104h] [ebp-4ECh] int v619; // [esp+108h] [ebp-4E8h] unsigned int v620; // [esp+10Ch] [ebp-4E4h] int v621; // [esp+110h] [ebp-4E0h] signed __int16 *v622; // [esp+114h] [ebp-4DCh] char *v623; // [esp+118h] [ebp-4D8h] int v624; // [esp+11Ch] [ebp-4D4h] __int16 *v625; // [esp+120h] [ebp-4D0h] char ArgList[8]; // [esp+124h] [ebp-4CCh] char *v627; // [esp+12Ch] [ebp-4C4h] char *v628; // [esp+130h] [ebp-4C0h] char v629[4]; // [esp+134h] [ebp-4BCh] const CHAR *v630; // [esp+138h] [ebp-4B8h] char v631; // [esp+13Ch] [ebp-4B4h] char v632; // [esp+45Ch] [ebp-194h] v0 = 200; v619 = 0; v622 = (signed __int16 *)&v632; v617 = &v631; v620 = 200; if ( dword_BA585C ) { v1 = (FILE *)sub_7D6CEE(); fprintf(v1 + 2, "Starting parse\n"); } v2 = &v632; v630 = 0; v625 = 0; dword_BA586C = 0; dword_BA5878 = -2; v627 = &v632; for ( i = &v631; ; *(_DWORD *)i = dword_BA587C ) { while ( 1 ) { while ( 1 ) { v4 = v622; v5 = (unsigned int)&v622[v0 - 1]; *(_WORD *)v2 = (_WORD)v630; if ( v5 <= (unsigned int)v2 ) { v6 = ((v2 - (char *)v4) >> 1) + 1; if ( v0 >= 0x2710 ) goto LABEL_1179; v7 = 2 * v0; v620 = 2 * v0; if ( 2 * v0 > 0x2710 ) { v7 = 10000; v620 = 10000; } v8 = alloca(6 * v7 + 3); if ( !v593 ) { LABEL_1179: sub_8C1D80((int)"parser stack overflow"); return 2; } if ( v6 ) { v9 = (int *)v593; v10 = (char *)v622 - (char *)v593; v11 = v6; do { *(_WORD *)v9 = *(_WORD *)((char *)v9 + v10); v9 = (int *)((char *)v9 + 2); --v11; } while ( v11 ); } v622 = (signed __int16 *)v593; v12 = (char *)&v593[(2 * v620 + 3) >> 2]; if ( v6 ) { v13 = (int *)&v593[(2 * v620 + 3) >> 2]; v14 = v617 - v12; v15 = v6; do { *v13 = *(int *)((char *)v13 + v14); ++v13; --v15; } while ( v15 ); } v16 = (unsigned int)&v622[v6 - 1]; v617 = v12; v627 = (char *)&v622[v6 - 1]; i = &v12[4 * v6 - 4]; if ( dword_BA585C ) { v592[1] = (const char *)v620; v592[0] = "Stack size increased to %lu\n"; v17 = (FILE *)sub_7D6CEE(); fprintf(v17 + 2, v592[0]); } if ( (unsigned int)&v622[v620 - 1] <= v16 ) return 1; } if ( dword_BA585C ) { v592[1] = v630; v592[0] = "Entering state %d\n"; v18 = (FILE *)sub_7D6CEE(); fprintf(v18 + 2, v592[0]); } v19 = word_A31490[(_DWORD)v630]; v624 = v19; v20 = v19 == -573; v21 = dword_BA5878; if ( v20 ) { v23 = v619; goto LABEL_55; } if ( dword_BA5878 == -2 ) { if ( dword_BA585C ) { v592[1] = "Reading a token: "; v22 = (FILE *)sub_7D6CEE(); fprintf(v22 + 2, v592[1]); } v21 = sub_8C2470(); dword_BA5878 = v21; } if ( (signed int)v21 > 0 ) { if ( v21 > 0x21D ) v23 = 2; else v23 = (unsigned __int16)word_A2E060[v21]; v619 = v23; if ( dword_BA585C ) { v592[1] = "Next token is"; v592[0] = "%s "; v24 = (FILE *)sub_7D6CEE(); fprintf(v24 + 2, v592[0]); v25 = (FILE *)(sub_7D6CEE() + 16); if ( v23 >= 289 ) { v592[1] = off_A2FBC0[v23]; v592[0] = "nterm %s ("; } else { v592[1] = off_A2FBC0[v23]; v592[0] = "token %s ("; } fprintf(v25, v592[0], v592[1]); fprintf(v25, ")"); v592[1] = "\n"; goto LABEL_36; } } else { v21 = 0; v23 = 0; v619 = 0; dword_BA5878 = 0; if ( dword_BA585C ) { v592[1] = "Now at end of input.\n"; LABEL_36: v26 = (FILE *)sub_7D6CEE(); fprintf(v26 + 2, v592[1]); v21 = dword_BA5878; goto LABEL_37; } } LABEL_37: v27 = v23 + v624; v624 = v27; if ( v27 <= 0x438 && word_A32700[v27] == v23 ) break; LABEL_55: v624 = (unsigned __int16)word_A30A98[(_DWORD)v630]; if ( !v624 ) goto LABEL_56; LABEL_43: v615 = (unsigned __int8)byte_A30850[v624]; v29 = *(const CHAR **)&i[-4 * v615 + 4]; v613 = &i[-4 * v615]; v630 = v29; if ( dword_BA585C ) sub_8B9DE0(v624); switch ( v624 ) { case 4: byte_BA5C8D = 0; dword_BA5C98 = 0; dword_BA5C9C = 0; dword_BA5CA0 = 0; byte_BA5C8E = 0; dword_BA5CA4 = 0; dword_BA5CA8 = 0; dword_BA5CAC = 0; dword_BA5CB0 = 0; dword_BA5CB4 = 0; dword_BA5CB8 = 0; dword_BA5CBC = 0; dword_BA5CC0 = 0; dword_BA5CC4 = 0; v65 = operator new(4u); if ( v65 ) { dword_BA5C90 = unknown_libname_33(v65); if ( dword_BA5C90 ) { v66 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AC1554[1])(&off_AC1554); v66[2] = dword_BA5C90; *v66 = 0; v66[1] = dword_AC155C; if ( dword_AC155C ) *(_DWORD *)dword_AC155C = v66; else dword_AC1558 = (int)v66; ++dword_AC1560; dword_AC155C = (int)v66; dword_BA5C94 = (int)sub_8B9CD0((int *)dword_BA5C90); sub_95CB50((void *)dword_BA5C94, *((char **)i - 1)); dword_BA5CAC = 0; } } else { dword_BA5C90 = 0; } dword_BA5C84 = 0; v592[1] = *((const char **)i - 1); v592[0] = "\nNSF Shader - %s\n"; goto LABEL_124; case 5: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Description: %s\n", v592[1]); if ( dword_BA5C94 ) sub_95CB70((void *)dword_BA5C94, *(char **)i); v67 = *(char **)i; if ( !v67 ) goto LABEL_468; v68 = &byte_9A8050; v69 = v67; while ( 1 ) { v70 = (unsigned __int8)*v69 < *v68; if ( *v69 != *v68 ) goto LABEL_134; if ( *v69 ) { v71 = v69[1]; v70 = v71 < v68[1]; if ( v71 != v68[1] ) goto LABEL_134; v69 += 2; v68 += 2; if ( v71 ) continue; } v72 = 0; goto LABEL_135; } case 6: dword_BA5C84 -= 4; v592[1] = *((const char **)i - 6); sub_7FF6E0(DstBuf, 0x400u, "Completed NSF Shader - %s\n", v592[1]); dword_BA5C90 = 0; dword_BA5C94 = 0; operator delete(*((void **)i - 6)); goto LABEL_469; case 7: v592[1] = "Syntax Error: shader"; goto LABEL_139; case 18: case 22: case 24: v29 = &byte_9A8050; goto LABEL_469; case 19: case 20: case 23: case 25: case 26: case 27: case 28: case 268: case 269: case 270: case 288: case 289: case 290: case 432: case 440: v29 = *(const CHAR **)i; goto LABEL_469; case 21: v73 = (char *)*((_DWORD *)i - 1); v74 = strlen(*((const char **)i - 1)) + 1; if ( v74 < 0x1800 ) v74 = 6144; strcat_s(v73, v74, *(const char **)i); v29 = v73; operator delete(*(void **)i); goto LABEL_469; case 29: v29 = (const CHAR *)*((_DWORD *)i - 1); goto LABEL_469; case 30: case 33: case 35: case 37: case 39: case 41: byte_BA5858 = 0; goto LABEL_469; case 31: v75 = dword_BA5860; v76 = dword_BA5860 + 1; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { flt_BA5758[dword_BA5860] = *((float *)i - 17); v75 = v76; dword_BA5860 = v76; } v77 = v75 + 1; if ( v75 != 63 ) { flt_BA5758[v75++] = *((float *)i - 15); dword_BA5860 = v77; } v78 = v75 + 1; if ( v75 != 63 ) { flt_BA5758[v75++] = *((float *)i - 13); dword_BA5860 = v78; } if ( v75 != 63 ) { v79 = *((float *)i - 11); dword_BA5860 = v75 + 1; flt_BA5758[v75] = v79; } v80 = dword_BA5554; v81 = dword_BA5554 + 1; if ( dword_BA5554 != 63 ) { flt_BA5558[dword_BA5554] = *((float *)i - 8); v80 = v81; dword_BA5554 = v81; } v82 = v80 + 1; if ( v80 != 63 ) { flt_BA5558[v80++] = *((float *)i - 6); dword_BA5554 = v82; } v83 = v80 + 1; if ( v80 != 63 ) { flt_BA5558[v80++] = *((float *)i - 4); dword_BA5554 = v83; } if ( v80 != 63 ) { v84 = *((float *)i - 2); dword_BA5554 = v80 + 1; flt_BA5558[v80] = v84; } goto LABEL_469; case 32: v85 = dword_BA5860; v86 = dword_BA5860 + 1; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { flt_BA5758[dword_BA5860] = *((float *)i - 13); v85 = v86; dword_BA5860 = v86; } v87 = v85 + 1; if ( v85 != 63 ) { flt_BA5758[v85++] = *((float *)i - 11); dword_BA5860 = v87; } if ( v85 != 63 ) { v88 = *((float *)i - 9); dword_BA5860 = v85 + 1; flt_BA5758[v85] = v88; } v89 = dword_BA5554; v90 = dword_BA5554 + 1; if ( dword_BA5554 != 63 ) { flt_BA5558[dword_BA5554] = *((float *)i - 6); v89 = v90; dword_BA5554 = v90; } v91 = v89 + 1; if ( v89 != 63 ) { flt_BA5558[v89++] = *((float *)i - 4); dword_BA5554 = v91; } if ( v89 != 63 ) { v92 = *((float *)i - 2); dword_BA5554 = v89 + 1; flt_BA5558[v89] = v92; } goto LABEL_469; case 34: v93 = dword_BA5860; v94 = dword_BA5860 + 1; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { flt_BA5758[dword_BA5860] = *((float *)i - 17); v93 = v94; dword_BA5860 = v94; } v95 = v93 + 1; if ( v93 != 63 ) { flt_BA5758[v93++] = *((float *)i - 15); dword_BA5860 = v95; } v96 = v93 + 1; if ( v93 != 63 ) { flt_BA5758[v93++] = *((float *)i - 13); dword_BA5860 = v96; } if ( v93 != 63 ) { v97 = *((float *)i - 11); dword_BA5860 = v93 + 1; flt_BA5758[v93] = v97; } v98 = dword_BA5554; v99 = dword_BA5554 + 1; if ( dword_BA5554 != 63 ) { flt_BA5558[dword_BA5554] = *((float *)i - 8); v98 = v99; dword_BA5554 = v99; } v100 = v98 + 1; if ( v98 != 63 ) { flt_BA5558[v98++] = *((float *)i - 6); dword_BA5554 = v100; } v101 = v98 + 1; if ( v98 != 63 ) { flt_BA5558[v98++] = *((float *)i - 4); dword_BA5554 = v101; } if ( v98 != 63 ) { v102 = *((float *)i - 2); dword_BA5554 = v98 + 1; flt_BA5558[v98] = v102; } goto LABEL_469; case 36: v103 = dword_BA5860; v104 = dword_BA5860 + 1; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { flt_BA5758[dword_BA5860] = *((float *)i - 13); v103 = v104; dword_BA5860 = v104; } v105 = v103 + 1; if ( v103 != 63 ) { flt_BA5758[v103++] = *((float *)i - 11); dword_BA5860 = v105; } if ( v103 != 63 ) { v106 = *((float *)i - 9); dword_BA5860 = v103 + 1; flt_BA5758[v103] = v106; } v107 = dword_BA5554; v108 = dword_BA5554 + 1; if ( dword_BA5554 != 63 ) { flt_BA5558[dword_BA5554] = *((float *)i - 6); v107 = v108; dword_BA5554 = v108; } v109 = v107 + 1; if ( v107 != 63 ) { flt_BA5558[v107++] = *((float *)i - 4); dword_BA5554 = v109; } if ( v107 != 63 ) { v110 = *((float *)i - 2); dword_BA5554 = v107 + 1; flt_BA5558[v107] = v110; } goto LABEL_469; case 38: v111 = dword_BA5860; v112 = dword_BA5860 + 1; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { flt_BA5758[dword_BA5860] = *((float *)i - 9); v111 = v112; dword_BA5860 = v112; } if ( v111 != 63 ) { v113 = *((float *)i - 7); dword_BA5860 = v111 + 1; flt_BA5758[v111] = v113; } v114 = dword_BA5554; v115 = dword_BA5554 + 1; if ( dword_BA5554 != 63 ) { flt_BA5558[dword_BA5554] = *((float *)i - 4); v114 = v115; dword_BA5554 = v115; } if ( v114 != 63 ) { v116 = *((float *)i - 2); dword_BA5554 = v114 + 1; flt_BA5558[v114] = v116; } goto LABEL_469; case 40: case 43: v117 = dword_BA5860; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { v118 = *((float *)i - 2); ++dword_BA5860; flt_BA5758[v117] = v118; } v119 = dword_BA5554; if ( dword_BA5554 != 63 ) { v120 = *((float *)i - 1); ++dword_BA5554; flt_BA5558[v119] = v120; } goto LABEL_469; case 42: v121 = dword_BA5860; byte_BA5858 = 1; if ( dword_BA5860 != 63 ) { v122 = (double)*((signed int *)i - 2); ++dword_BA5860; flt_BA5758[v121] = v122; } v123 = dword_BA5554; if ( dword_BA5554 != 63 ) { v124 = (double)*((signed int *)i - 1); ++dword_BA5554; flt_BA5558[v123] = v124; } goto LABEL_469; case 52: v125 = *(_DWORD *)::ArgList; v126 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 30); v125 = v126; *(_DWORD *)::ArgList = v126; } v127 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 28); *(_DWORD *)::ArgList = v127; } v128 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 26); *(_DWORD *)::ArgList = v128; } v129 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 24); *(_DWORD *)::ArgList = v129; } v130 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 22); *(_DWORD *)::ArgList = v130; } v131 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 20); *(_DWORD *)::ArgList = v131; } v132 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 18); *(_DWORD *)::ArgList = v132; } v133 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 16); *(_DWORD *)::ArgList = v133; } v134 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 14); *(_DWORD *)::ArgList = v134; } v135 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 12); *(_DWORD *)::ArgList = v135; } v136 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 10); *(_DWORD *)::ArgList = v136; } v137 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 8); *(_DWORD *)::ArgList = v137; } v138 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 6); *(_DWORD *)::ArgList = v138; } v139 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 4); *(_DWORD *)::ArgList = v139; } v140 = v125 + 1; if ( v125 != 63 ) { flt_BA5658[v125++] = *((float *)i - 2); *(_DWORD *)::ArgList = v140; } if ( v125 != 63 ) { v141 = *(float *)i; *(_DWORD *)::ArgList = v125 + 1; flt_BA5658[v125] = v141; } goto LABEL_469; case 53: v142 = *(_DWORD *)::ArgList; v143 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 22); v142 = v143; *(_DWORD *)::ArgList = v143; } v144 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 20); *(_DWORD *)::ArgList = v144; } v145 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 18); *(_DWORD *)::ArgList = v145; } v146 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 16); *(_DWORD *)::ArgList = v146; } v147 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 14); *(_DWORD *)::ArgList = v147; } v148 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 12); *(_DWORD *)::ArgList = v148; } v149 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 10); *(_DWORD *)::ArgList = v149; } v150 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 8); *(_DWORD *)::ArgList = v150; } v151 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 6); *(_DWORD *)::ArgList = v151; } v152 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 4); *(_DWORD *)::ArgList = v152; } v153 = v142 + 1; if ( v142 != 63 ) { flt_BA5658[v142++] = *((float *)i - 2); *(_DWORD *)::ArgList = v153; } if ( v142 != 63 ) { v154 = *(float *)i; *(_DWORD *)::ArgList = v142 + 1; flt_BA5658[v142] = v154; } goto LABEL_469; case 54: v155 = *(_DWORD *)::ArgList; v156 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 16); v155 = v156; *(_DWORD *)::ArgList = v156; } v157 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 14); *(_DWORD *)::ArgList = v157; } v158 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 12); *(_DWORD *)::ArgList = v158; } v159 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 10); *(_DWORD *)::ArgList = v159; } v160 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 8); *(_DWORD *)::ArgList = v160; } v161 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 6); *(_DWORD *)::ArgList = v161; } v162 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 4); *(_DWORD *)::ArgList = v162; } v163 = v155 + 1; if ( v155 != 63 ) { flt_BA5658[v155++] = *((float *)i - 2); *(_DWORD *)::ArgList = v163; } if ( v155 != 63 ) { v164 = *(float *)i; *(_DWORD *)::ArgList = v155 + 1; flt_BA5658[v155] = v164; } goto LABEL_469; case 55: v165 = *(_DWORD *)::ArgList; v166 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 14); v165 = v166; *(_DWORD *)::ArgList = v166; } v167 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 12); *(_DWORD *)::ArgList = v167; } v168 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 10); *(_DWORD *)::ArgList = v168; } v169 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 8); *(_DWORD *)::ArgList = v169; } v170 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 6); *(_DWORD *)::ArgList = v170; } v171 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 4); *(_DWORD *)::ArgList = v171; } v172 = v165 + 1; if ( v165 != 63 ) { flt_BA5658[v165++] = *((float *)i - 2); *(_DWORD *)::ArgList = v172; } if ( v165 != 63 ) { v173 = *(float *)i; *(_DWORD *)::ArgList = v165 + 1; flt_BA5658[v165] = v173; } goto LABEL_469; case 56: v174 = *(_DWORD *)::ArgList; v175 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 6); v174 = v175; *(_DWORD *)::ArgList = v175; } v176 = v174 + 1; if ( v174 != 63 ) { flt_BA5658[v174++] = *((float *)i - 4); *(_DWORD *)::ArgList = v176; } v177 = v174 + 1; if ( v174 != 63 ) { flt_BA5658[v174++] = *((float *)i - 2); *(_DWORD *)::ArgList = v177; } if ( v174 != 63 ) { v178 = *(float *)i; *(_DWORD *)::ArgList = v174 + 1; flt_BA5658[v174] = v178; } goto LABEL_469; case 57: v179 = *(_DWORD *)::ArgList; v180 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 4); v179 = v180; *(_DWORD *)::ArgList = v180; } v181 = v179 + 1; if ( v179 != 63 ) { flt_BA5658[v179++] = *((float *)i - 2); *(_DWORD *)::ArgList = v181; } if ( v179 != 63 ) { v182 = *(float *)i; *(_DWORD *)::ArgList = v179 + 1; flt_BA5658[v179] = v182; } goto LABEL_469; case 58: v183 = *(_DWORD *)::ArgList; v184 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 6); v183 = v184; *(_DWORD *)::ArgList = v184; } v185 = v183 + 1; if ( v183 != 63 ) { flt_BA5658[v183++] = *((float *)i - 4); *(_DWORD *)::ArgList = v185; } v186 = v183 + 1; if ( v183 != 63 ) { flt_BA5658[v183++] = *((float *)i - 2); *(_DWORD *)::ArgList = v186; } if ( v183 != 63 ) { v187 = *(float *)i; *(_DWORD *)::ArgList = v183 + 1; flt_BA5658[v183] = v187; } goto LABEL_469; case 59: v188 = *(_DWORD *)::ArgList; v189 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 4); v188 = v189; *(_DWORD *)::ArgList = v189; } v190 = v188 + 1; if ( v188 != 63 ) { flt_BA5658[v188++] = *((float *)i - 2); *(_DWORD *)::ArgList = v190; } if ( v188 != 63 ) { v191 = *(float *)i; *(_DWORD *)::ArgList = v188 + 1; flt_BA5658[v188] = v191; } goto LABEL_469; case 60: v192 = *(_DWORD *)::ArgList; v193 = *(_DWORD *)::ArgList + 1; if ( *(_DWORD *)::ArgList != 63 ) { flt_BA5658[*(_DWORD *)::ArgList] = *((float *)i - 2); v192 = v193; *(_DWORD *)::ArgList = v193; } if ( v192 != 63 ) { v194 = *(float *)i; *(_DWORD *)::ArgList = v192 + 1; flt_BA5658[v192] = v194; } goto LABEL_469; case 61: v195 = *(_DWORD *)::ArgList; if ( *(_DWORD *)::ArgList != 63 ) { v196 = *(float *)i; ++*(_DWORD *)::ArgList; flt_BA5658[v195] = v196; } goto LABEL_469; case 62: sub_7FF6E0(DstBuf, 0x400u, "Attribute Table Start\n"); dword_BA5C84 += 4; if ( !dword_BA5C94 ) goto LABEL_347; byte_BA5C8D = 0; dword_BA5C98 = dword_BA5C94 + 96; goto LABEL_469; case 63: v592[1] = "Attribute Table End\n"; goto LABEL_346; case 64: sub_7FF6E0(DstBuf, 0x400u, "Global Attribute Table Start\n"); dword_BA5C84 += 4; if ( !dword_BA5C94 ) goto LABEL_347; byte_BA5C8D = 1; dword_BA5C98 = dword_BA5C94 + 76; goto LABEL_469; case 65: v592[1] = "Global Attribute Table End\n"; LABEL_346: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, (char *)v592[1]); LABEL_347: dword_BA5C98 = 0; goto LABEL_469; case 78: case 254: case 256: LOBYTE(v630) = 1; goto LABEL_468; case 79: case 253: case 255: LOBYTE(v630) = 0; goto LABEL_468; case 80: if ( dword_BA5C98 ) { v20 = *(i - 4) == 0; v592[1] = (const char *)(unsigned __int8)*i; if ( !sub_960570((_DWORD *)dword_BA5C98, *((char **)i - 2), 0, v20, (int)v592[1]) ) { v197 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v197; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Bool at line %d\n Desc name = %s\n", v197, v592[0]); } } v198 = "TRUE"; if ( !*i ) v198 = "FALSE"; v199 = "ARTIST"; if ( !*(i - 4) ) v199 = "HIDDEN"; v592[1] = v198; v592[0] = v199; v591 = *((float *)i - 2); v590 = " Boolean: %16s - %6s - %s\n"; goto LABEL_361; case 81: case 83: case 85: case 87: case 89: case 91: case 93: case 95: case 243: case 245: case 454: *(_DWORD *)::ArgList = 0; dword_BA5860 = 0; dword_BA5554 = 0; goto LABEL_469; case 82: if ( !dword_BA5C98 ) goto LABEL_371; if ( !byte_BA5858 || byte_BA5C8D ) { v20 = *(i - 8) == 0; v202 = *((float *)i - 1); v592[1] = 0; v592[0] = 0; v591 = v202; if ( sub_960610((_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, SLODWORD(v202), 0, 0) ) goto LABEL_371; v201 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); } else { *(_DWORD *)v629 = HIWORD(v628) | 0xC00; *(_QWORD *)ArgList = (signed __int64)flt_BA5558[0]; v592[1] = *(const char **)ArgList; v200 = *((float *)i - 1); v20 = *(i - 8) == 0; *(_DWORD *)v629 = HIWORD(v628) | 0xC00; *(_QWORD *)ArgList = (signed __int64)flt_BA5758[0]; v592[0] = *(const char **)ArgList; v591 = v200; if ( sub_960610( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, SLODWORD(v200), *(int *)ArgList, (int)v592[1]) ) { goto LABEL_371; } v201 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); } v592[0] = (const char *)sub_8C1D70(); v591 = v201; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_UnsignedInt at line %d\n Desc name = %s\n", v201, v592[0], v592[1]); LABEL_371: v203 = "ARTIST"; if ( !*(i - 8) ) v203 = "HIDDEN"; v592[1] = *((const char **)i - 1); v592[0] = v203; v591 = *((float *)i - 3); sub_7FF6E0(DstBuf, 0x400u, " uint: %16s - %6s - %d\n", v591, v203, v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { v592[1] = (const char *)(signed __int64)flt_BA5558[0]; *(_DWORD *)v629 = HIWORD(v628) | 0xC00; *(_QWORD *)ArgList = (signed __int64)flt_BA5758[0]; v592[0] = *(const char **)ArgList; sub_7FF6E0(DstBuf, 0x400u, " Range: [%4d..%4d]\n", *(_DWORD *)ArgList, v592[1]); } operator delete(*((void **)i - 3)); goto LABEL_469; case 84: if ( dword_BA5C98 ) { if ( !byte_BA5858 || byte_BA5C8D ) { v204 = 0.0; *(float *)&v592[1] = 0.0; } else { v592[1] = (const char *)LODWORD(flt_BA5558[0]); v204 = flt_BA5758[0]; } v20 = *(i - 8) == 0; *(float *)v592 = v204; v591 = *((float *)i - 1); if ( !sub_9606D0( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, v591, *(float *)v592, *(float *)&v592[1]) ) { v205 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v205; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Float at line %d\n Desc name = %s\n", v205, v592[0]); } } *(float *)&v206 = COERCE_FLOAT("ARTIST"); if ( !*(i - 8) ) *(float *)&v206 = COERCE_FLOAT("HIDDEN"); v207 = (char *)*((_DWORD *)i - 3); *(double *)v592 = *((float *)i - 1); v591 = *(float *)&v206; v590 = v207; sub_7FF6E0(DstBuf, 0x400u, " Float: %16s - %6s - %8.5f\n", v207, v206, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA5558[0]; *(double *)&v590 = flt_BA5758[0]; sub_7FF6E0(DstBuf, 0x400u, " Range: [%8.5f..%8.5f]\n", v590, v591, v592[0], v592[1]); } operator delete(*((void **)i - 3)); goto LABEL_469; case 86: if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v592[1] = (const char *)flt_BA5558; v592[0] = (const char *)flt_BA5758; if ( !sub_9607A0( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, (int)flt_BA5658, (int)flt_BA5758, (int)flt_BA5558) ) { v208 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v208; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Point2 at line %d\n Desc name = %s\n", v208, v592[0]); } } v209 = "ARTIST"; if ( !*(i - 8) ) v209 = "HIDDEN"; v210 = *((_DWORD *)i - 3); *(double *)v592 = flt_BA565C; *(double *)&v590 = flt_BA5658[0]; v589 = COERCE_DOUBLE(__PAIR__((unsigned int)v209, v210)); sub_7FF6E0( DstBuf, 0x400u, " Point2: %16s - %6s - %8.5f,%8.5f\n", v210, v209, v590, v591, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA555C; *(double *)&v590 = flt_BA5558[0]; v589 = flt_BA575C; *(double *)v588 = flt_BA5758[0]; sub_7FF6E0( DstBuf, 0x400u, " Range: [(%8.5f,%8.5f)..(%8.5f,%8.5f)]\n", *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA575C, v590, v591, v592[0], v592[1]); } operator delete(*((void **)i - 3)); goto LABEL_469; case 88: if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v592[1] = (const char *)flt_BA5558; v592[0] = (const char *)flt_BA5758; if ( !sub_9608B0( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, (int)flt_BA5658, (int)flt_BA5758, (int)flt_BA5558) ) { v211 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v211; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Point3 at line %d\n Desc name = %s\n", v211, v592[0]); } } v212 = "ARTIST"; if ( !*(i - 8) ) v212 = "HIDDEN"; v213 = *((_DWORD *)i - 3); *(double *)v592 = flt_BA5660; *(double *)&v590 = flt_BA565C; v589 = flt_BA5658[0]; *(_DWORD *)&v588[4] = v212; *(_DWORD *)v588 = v213; sub_7FF6E0( DstBuf, 0x400u, " Point3: %16s - %6s - %8.5f,%8.5f,%8.5f\n", v213, v212, flt_BA5658[0], v590, v591, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA5560; *(double *)&v590 = flt_BA555C; v589 = flt_BA5558[0]; *(double *)v588 = flt_BA5760; v587 = flt_BA575C; *(double *)v586 = flt_BA5758[0]; sub_7FF6E0( DstBuf, 0x400u, " Range: [(%8.5f,%8.5f,%8.5f)..(%8.5f,%8.5f,%8.5f)]\n", *(_DWORD *)v586, *(_DWORD *)&v586[4], flt_BA575C, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA5558[0], v590, v591, v592[0], v592[1]); } operator delete(*((void **)i - 3)); goto LABEL_469; case 90: if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v592[1] = (const char *)flt_BA5558; v592[0] = (const char *)flt_BA5758; if ( !sub_9609E0( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, flt_BA5658, (int)flt_BA5758, (int)flt_BA5558) ) { v214 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v214; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Point4 at line %d\n Desc name = %s\n", v214, v592[0]); } } v215 = "ARTIST"; if ( !*(i - 8) ) v215 = "HIDDEN"; v216 = *((_DWORD *)i - 3); *(double *)v592 = flt_BA5664; *(double *)&v590 = flt_BA5660; v589 = flt_BA565C; *(double *)v588 = flt_BA5658[0]; v587 = COERCE_DOUBLE(__PAIR__((unsigned int)v215, v216)); sub_7FF6E0( DstBuf, 0x400u, " Point4: %16s - %6s - %8.5f,%8.5f,%8.5f,%8.5f\n", v216, v215, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA565C, v590, v591, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA5564; *(double *)&v590 = flt_BA5560; v589 = flt_BA555C; *(double *)v588 = flt_BA5558[0]; v587 = flt_BA5764; *(double *)v586 = flt_BA5760; v585 = flt_BA575C; *(double *)v584 = flt_BA5758[0]; sub_7FF6E0( DstBuf, 0x400u, " Range: [(%8.5f,%8.5f,%8.5f,%8.5f)..(%8.5f,%8.5f,%8.5f,%8.5f)]\n", *(_DWORD *)v584, *(_DWORD *)&v584[4], flt_BA575C, *(_DWORD *)v586, *(_DWORD *)&v586[4], flt_BA5764, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA555C, v590, v591, v592[0], v592[1]); } operator delete(*((void **)i - 3)); goto LABEL_469; case 92: if ( dword_BA5C98 ) { v20 = *(i - 4) == 0; v592[1] = (const char *)flt_BA5658; if ( !sub_960AD0((_DWORD *)dword_BA5C98, *((char **)i - 2), 0, v20, (int)flt_BA5658) ) { v217 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v217; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Matrix3 at line %d\n Desc name = %s\n", v217, v592[0]); } } v218 = "ARTIST"; if ( !*(i - 4) ) v218 = "HIDDEN"; *(double *)v592 = flt_BA5678; v219 = *((_DWORD *)i - 2); *(double *)&v590 = flt_BA5674; v589 = flt_BA5670; *(_DWORD *)&v588[4] = word_9AC794; *(_DWORD *)v588 = word_9AC794; v587 = flt_BA566C; *(double *)v586 = flt_BA5668; v585 = flt_BA5664; *(_DWORD *)&v584[4] = word_9AC794; *(_DWORD *)v584 = word_9AC794; v583 = flt_BA5660; v582 = flt_BA565C; v581 = flt_BA5658[0]; v580 = COERCE_DOUBLE(__PAIR__((unsigned int)v218, v219)); sub_7FF6E0( DstBuf, 0x400u, " Matrix3: %16s - %6s - %8.5f,%8.5f,%8.5f\n" " %16s %6s %8.5f,%8.5f,%8.5f\n" " %16s %6s %8.5f,%8.5f,%8.5f\n", v219, v218, flt_BA5658[0], flt_BA565C, flt_BA5660, word_9AC794, word_9AC794, flt_BA5664, *(_DWORD *)v586, *(_DWORD *)&v586[4], flt_BA566C, word_9AC794, word_9AC794, flt_BA5670, v590, v591, v592[0], v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 94: if ( dword_BA5C98 ) { v20 = *(i - 4) == 0; v592[1] = (const char *)flt_BA5658; if ( !sub_960BE0((_DWORD *)dword_BA5C98, *((char **)i - 2), 0, v20, flt_BA5658) ) { v220 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v220; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Matrix4 at line %d\n Desc name = %s\n", v220, v592[0]); } } v221 = "ARTIST"; if ( !*(i - 4) ) v221 = "HIDDEN"; *(double *)v592 = flt_BA5694; v222 = *((_DWORD *)i - 2); *(double *)&v590 = flt_BA5690; v589 = flt_BA568C; *(double *)v588 = flt_BA5688; HIDWORD(v587) = word_9AC794; LODWORD(v587) = word_9AC794; *(double *)v586 = flt_BA5684; v585 = flt_BA5680; *(double *)v584 = flt_BA567C; v583 = flt_BA5678; HIDWORD(v582) = word_9AC794; LODWORD(v582) = word_9AC794; v581 = flt_BA5674; v580 = flt_BA5670; v579 = flt_BA566C; v578 = flt_BA5668; v577 = word_9AC794; v576 = word_9AC794; v575 = flt_BA5664; sub_7FF6E0( DstBuf, 0x400u, " Transform: %16s - %6s - %8.5f,%8.5f,%8.5f,%8.5f\n" " %16s %6s %8.5f,%8.5f,%8.5f,%8.5f\n" " %16s %6s %8.5f,%8.5f,%8.5f,%8.5f\n" " %16s %6s %8.5f,%8.5f,%8.5f,%8.5f\n", v222, v221, flt_BA5658[0], flt_BA565C, flt_BA5660, flt_BA5664, word_9AC794, word_9AC794, flt_BA5668, flt_BA566C, flt_BA5670, flt_BA5674, word_9AC794, word_9AC794, flt_BA5678, *(_DWORD *)v584, *(_DWORD *)&v584[4], flt_BA5680, *(_DWORD *)v586, *(_DWORD *)&v586[4], word_9AC794, word_9AC794, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA568C, v590, v591, v592[0], v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 96: if ( *(_DWORD *)::ArgList == 3 ) { if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v592[1] = (const char *)flt_BA5558; v592[0] = (const char *)flt_BA5758; if ( !sub_960C90( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, (int)flt_BA5658, (int)flt_BA5758, (int)flt_BA5558) ) { v223 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v223; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Color at line %d\n Desc name = %s\n", v223, v592[0]); } } v224 = "ARTIST"; if ( !*(i - 8) ) v224 = "HIDDEN"; v225 = *((_DWORD *)i - 3); *(double *)v592 = flt_BA5660; *(double *)&v590 = flt_BA565C; v589 = flt_BA5658[0]; *(_DWORD *)&v588[4] = v224; *(_DWORD *)v588 = v225; sub_7FF6E0( DstBuf, 0x400u, " Color: %16s - %6s - %8.5f,%8.5f,%8.5f\n", v225, v224, flt_BA5658[0], v590, v591, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA5560; *(double *)&v590 = flt_BA555C; v589 = flt_BA5558[0]; *(double *)v588 = flt_BA5760; v587 = flt_BA575C; *(double *)v586 = flt_BA5758[0]; sub_7FF6E0( DstBuf, 0x400u, " Range: [(%8.5f,%8.5f,%8.5f)..(%8.5f,%8.5f,%8.5f)]\n", *(_DWORD *)v586, *(_DWORD *)&v586[4], flt_BA575C, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA5558[0], v590, v591, v592[0], v592[1]); operator delete(*((void **)i - 3)); goto LABEL_469; } } else { if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v592[1] = (const char *)flt_BA5558; v592[0] = (const char *)flt_BA5758; if ( !sub_960D90( (_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, (int)flt_BA5658, (int)flt_BA5758, (int)flt_BA5558) ) { v226 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 3); v592[0] = (const char *)sub_8C1D70(); v591 = v226; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_ColorA at line %d\n Desc name = %s\n", v226, v592[0]); } } v227 = "ARTIST"; if ( !*(i - 8) ) v227 = "HIDDEN"; *(double *)v592 = flt_BA5664; *(double *)&v590 = flt_BA5660; v589 = flt_BA565C; *(double *)v588 = flt_BA5658[0]; HIDWORD(v587) = v227; LODWORD(v587) = *((_DWORD *)i - 3); sub_7FF6E0( DstBuf, 0x400u, " ColorA: %16s - %6s - %8.5f,%8.5f,%8.5f,%8.5f\n", LODWORD(v587), v227, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA565C, v590, v591, v592[0], v592[1]); if ( byte_BA5858 && !byte_BA5C8D ) { *(double *)v592 = flt_BA5564; *(double *)&v590 = flt_BA5560; v589 = flt_BA555C; *(double *)v588 = flt_BA5558[0]; v587 = flt_BA5764; *(double *)v586 = flt_BA5760; v585 = flt_BA575C; *(double *)v584 = flt_BA5758[0]; sub_7FF6E0( DstBuf, 0x400u, " Range: [(%8.5f,%8.5f,%8.5f,%8.5f)..(%8.5f,%8.5f,%8.5f,%8.5f)]\n", *(_DWORD *)v584, *(_DWORD *)&v584[4], flt_BA575C, *(_DWORD *)v586, *(_DWORD *)&v586[4], flt_BA5764, *(_DWORD *)v588, *(_DWORD *)&v588[4], flt_BA555C, v590, v591, v592[0], v592[1]); } } operator delete(*((void **)i - 3)); goto LABEL_469; case 97: if ( dword_BA5C98 ) { v20 = *(i - 8) == 0; v228 = *((_DWORD *)i - 1); v592[1] = *(const char **)i; v592[0] = (const char *)v228; if ( !sub_960EA0((_DWORD *)dword_BA5C98, *((char **)i - 3), 0, v20, v228, (char *)v592[1]) ) { v229 = *(float *)dword_BA5C80; v592[1] = (const char *)(unsigned __int8)*(i - 8); v592[0] = (const char *)sub_8C1D70(); v591 = v229; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddAttribDesc_Texture at line %d\n Desc name = %s\n", v229, v592[0]); } } v230 = "ARTIST"; if ( !*(i - 8) ) v230 = "HIDDEN"; v592[1] = *((const char **)i - 1); v592[0] = v230; v591 = *((float *)i - 3); sub_7FF6E0(DstBuf, 0x400u, " Texture: %16s - %6s - Slot %d\n", v591, v230, v592[1]); operator delete(*((void **)i - 3)); v67 = *(char **)i; v231 = &byte_9A8050; v232 = v67; while ( 1 ) { v70 = (unsigned __int8)*v232 < *v231; if ( *v232 != *v231 ) goto LABEL_134; if ( *v232 ) { v233 = v232[1]; v70 = v233 < v231[1]; if ( v233 != v231[1] ) goto LABEL_134; v232 += 2; v231 += 2; if ( v233 ) continue; } v72 = 0; goto LABEL_135; } case 98: sub_7FF6E0(DstBuf, 0x400u, "Object Table Start\n"); dword_BA5C84 += 4; if ( !dword_BA5C94 ) goto LABEL_461; dword_BA5C9C = dword_BA5C94 + 116; goto LABEL_469; case 99: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, "Object Table End\n"); LABEL_461: dword_BA5C9C = 0; goto LABEL_469; case 110: v234 = *(char **)i; v235 = (const char *)*((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v234, 1, (int)v592[1]) ) { v236 = *(_DWORD *)dword_BA5C80; v592[1] = v234; *(_DWORD *)v629 = v236; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v234; v592[0] = v235; v591 = COERCE_FLOAT("Effect_GeneralLight"); goto LABEL_466; case 111: v245 = *(char **)i; v246 = *((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v245, 2, (int)v592[1]) ) { v247 = *(_DWORD *)dword_BA5C80; v592[1] = v245; *(_DWORD *)v629 = v247; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v245; v592[0] = (const char *)v246; v591 = COERCE_FLOAT("Effect_PointLight"); sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", "Effect_PointLight", v246, v245); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 112: v248 = *(char **)i; v249 = *((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v248, 3, (int)v592[1]) ) { v250 = *(_DWORD *)dword_BA5C80; v592[1] = v248; *(_DWORD *)v629 = v250; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v248; v592[0] = (const char *)v249; v591 = COERCE_FLOAT("Effect_DirectionalLight"); sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", "Effect_DirectionalLight", v249, v248); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 113: v251 = *(char **)i; v252 = (const char *)*((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v251, 4, (int)v592[1]) ) { v253 = *(_DWORD *)dword_BA5C80; v592[1] = v251; *(_DWORD *)v629 = v253; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v251; v592[0] = v252; v591 = COERCE_FLOAT("Effect_SpotLight"); goto LABEL_466; case 114: v254 = *(char **)i; v255 = *((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v254, 5, (int)v592[1]) ) { v256 = *(_DWORD *)dword_BA5C80; v592[1] = v254; *(_DWORD *)v629 = v256; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v254; v592[0] = (const char *)v255; v591 = COERCE_FLOAT("Effect_EnvironmentMap"); sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", "Effect_EnvironmentMap", v255, v254); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 115: v257 = *(char **)i; v258 = *((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v257, 6, (int)v592[1]) ) { v259 = *(_DWORD *)dword_BA5C80; v592[1] = v257; *(_DWORD *)v629 = v259; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v257; v592[0] = (const char *)v258; v591 = COERCE_FLOAT("Effect_ProjectedShadowMap"); sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", "Effect_ProjectedShadowMap", v258, v257); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 116: v260 = *(char **)i; v261 = (const char *)*((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v260, 7, (int)v592[1]) ) { v262 = *(_DWORD *)dword_BA5C80; v592[1] = v260; *(_DWORD *)v629 = v262; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v260; v592[0] = v261; v591 = COERCE_FLOAT("Effect_ProjectedLightMap"); LABEL_466: sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", v591, v592[0], v592[1]); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 117: v263 = *(char **)i; v264 = *((_DWORD *)i - 1); if ( dword_BA5C9C ) { v592[1] = *((const char **)i - 1); if ( !sub_95E6D0((_DWORD *)dword_BA5C9C, v263, 8, (int)v592[1]) ) { v265 = *(_DWORD *)dword_BA5C80; v592[1] = v263; *(_DWORD *)v629 = v265; v592[0] = (const char *)sub_8C1D70(); v591 = *(float *)v629; sub_863460( 1, 1, "* PARSE ERROR: %s\n AddObject at line %d\n Object name = %s\n", *(_DWORD *)v629, v592[0]); } } v592[1] = v263; v592[0] = (const char *)v264; v591 = COERCE_FLOAT("Effect_FogMap"); sub_7FF6E0(DstBuf, 0x400u, " %24s: %d - %16s\n", "Effect_FogMap", v264, v263); *(_DWORD *)&v588[4] = *(_DWORD *)i; goto LABEL_467; case 118: if ( dword_BA5C94 ) dword_BA5CA4 = (int)sub_95CC60((_DWORD *)dword_BA5C94, *((char **)i - 1), 1); else dword_BA5CA4 = 0; byte_BA5C8E = 0; v592[1] = *((const char **)i - 1); v592[0] = "PackingDefinition Start %s\n"; LABEL_124: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[0], v592[1]); dword_BA5C84 += 4; goto LABEL_469; case 119: dword_BA5C84 -= 4; v592[1] = *((const char **)i - 4); sub_7FF6E0(DstBuf, 0x400u, "PackingDefinition End %s\n", v592[1]); dword_BA5CA4 = 0; operator delete(*((void **)i - 4)); goto LABEL_469; case 120: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Using PackingDefinition %s\n", v592[1]); if ( !dword_BA5C94 ) goto LABEL_512; if ( sub_95CC60((_DWORD *)dword_BA5C94, *(char **)i, 0) ) { if ( dword_BA5CB0 ) sub_9642B0((void *)dword_BA5CB0, *(char **)i); LABEL_512: operator delete(*(void **)i); } else { v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, " WARNING: PackingDefinition %s NOT FOUND\n", v592[1]); v266 = *(_DWORD *)dword_BA5C80; v267 = sub_8C1D70(); v268 = *(char **)i; v589 = COERCE_DOUBLE(__PAIR__(v267, *(_DWORD *)i)); *(_DWORD *)&v588[4] = v266; sub_863460( 1, 1, "* PARSE ERROR: %s\n PackingDefinition %s\n at line %d\n NOT FOUND!\n", v266, v268, v267); operator delete(*(void **)i); } goto LABEL_469; case 121: case 524: case 533: case 534: case 535: case 536: case 539: case 540: case 542: case 543: case 544: case 545: goto LABEL_1065; case 122: case 150: case 154: case 156: case 165: case 166: case 169: case 176: case 324: case 403: case 405: case 439: case 445: case 446: case 456: case 519: case 527: v29 = 0; goto LABEL_469; case 123: case 151: case 170: case 177: case 399: case 406: case 457: case 520: case 528: v29 = (const CHAR *)1; goto LABEL_469; case 124: case 152: case 171: case 178: case 400: case 407: case 458: case 521: case 529: v29 = (const CHAR *)2; goto LABEL_469; case 125: case 153: case 172: case 179: case 401: case 408: case 459: case 522: case 530: v29 = (const CHAR *)3; goto LABEL_469; case 126: case 155: case 173: case 180: case 402: case 409: case 460: case 523: case 531: v29 = (const CHAR *)4; goto LABEL_469; case 127: case 158: case 175: case 182: case 411: case 462: v29 = (const CHAR *)6; goto LABEL_469; case 128: case 159: case 183: case 412: v29 = (const CHAR *)7; goto LABEL_469; case 129: case 160: case 184: case 413: v29 = (const CHAR *)8; goto LABEL_469; case 130: case 161: case 185: case 414: v29 = (const CHAR *)9; goto LABEL_469; case 131: case 157: case 174: case 181: case 410: case 461: case 532: v29 = (const CHAR *)5; goto LABEL_469; case 132: case 162: case 186: case 415: v29 = (const CHAR *)10; goto LABEL_469; case 133: case 163: case 187: case 416: v29 = (const CHAR *)11; goto LABEL_469; case 134: case 164: case 188: case 417: v29 = (const CHAR *)12; goto LABEL_469; case 135: case 167: case 189: case 418: v29 = (const CHAR *)13; goto LABEL_469; case 136: case 168: case 419: v29 = (const CHAR *)14; goto LABEL_469; case 137: case 420: v29 = (const CHAR *)15; goto LABEL_469; case 138: case 421: v29 = (const CHAR *)16; goto LABEL_469; case 139: case 422: v29 = (const CHAR *)17; goto LABEL_469; case 140: case 423: v29 = (const CHAR *)18; goto LABEL_469; case 141: case 424: v29 = (const CHAR *)19; goto LABEL_469; case 142: case 425: v29 = (const CHAR *)20; goto LABEL_469; case 143: case 426: v29 = (const CHAR *)21; goto LABEL_469; case 144: case 427: v29 = (const CHAR *)22; goto LABEL_469; case 145: case 428: v29 = (const CHAR *)23; goto LABEL_469; case 146: case 429: v29 = (const CHAR *)24; goto LABEL_469; case 147: case 430: v29 = (const CHAR *)25; goto LABEL_469; case 148: v29 = (const CHAR *)26; goto LABEL_469; case 149: v592[1] = "Syntax Error: packing_definition_type"; goto LABEL_139; case 192: v592[1] = "Syntax Error: packing_definition_entries"; goto LABEL_139; case 193: v592[1] = *(const char **)i; dword_BA5CA0 = (int)v592[1]; v592[0] = "Stream %d\n"; goto LABEL_543; case 194: byte_BA5C8E = *i; if ( dword_BA5CA4 ) sub_968270((_BYTE *)dword_BA5CA4, *i); goto LABEL_469; case 195: v269 = *((_DWORD *)i - 5); v270 = *((_DWORD *)i - 2); v271 = *((_DWORD *)i - 1); v272 = *((_DWORD *)i - 4); v621 = *((_DWORD *)i - 3); v628 = *(char **)i; v273 = v269 | 0x80000000; *(_DWORD *)v629 = v270; v623 = (char *)v271; if ( dword_BA5CA4 && !sub_968770((_DWORD *)dword_BA5CA4, dword_BA5CA0, v272, v273, v621, *(int *)v629, v271, (int)v628) ) { *(_DWORD *)&ArgList[4] = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *(const char **)&ArgList[4]; sub_863460( 1, 1, "* PARSE ERROR: %s\n PackingDefinition failed AddPackingEntry\n at line %d\n", *(_DWORD *)&ArgList[4], v592[1]); } v274 = sub_968380(v273); v275 = sub_968280(v621); v591 = *(float *)&v628; v590 = v623; v276 = *((_DWORD *)i - 5); v589 = COERCE_DOUBLE(__PAIR__(*(unsigned int *)v629, (unsigned int)v275)); *(_DWORD *)&v588[4] = v272; *(_DWORD *)v588 = v276; HIDWORD(v587) = v274; *(_DWORD *)&ArgList[4] = v275; sub_7FF6E0( DstBuf, 0x400u, " %16s %2d - Reg %3d - %16s - 0x%08x, 0x%08x, 0x%08x\n", v274, v276, v272, v275, *(_DWORD *)v629, v623, v628); v277 = *((_DWORD *)i - 5); v585 = COERCE_DOUBLE(__PAIR__(*(unsigned int *)&ArgList[4], v272)); *(_DWORD *)&v584[4] = v277; *(_DWORD *)v584 = v274; sub_7FF6E0(DstBuf, 0x400u, " %16s %2d - Reg %3d - %16s\n", v274, v277, v272, *(_DWORD *)&ArgList[4]); goto LABEL_468; case 196: v278 = *(char **)i; v279 = *((_DWORD *)i - 1); v280 = *((_DWORD *)i - 2) | 0x80000000; *(_DWORD *)v629 = *(_DWORD *)i; if ( dword_BA5CA4 && !sub_968770((_DWORD *)dword_BA5CA4, dword_BA5CA0, v279, v280, (int)v278, 0, 14, 0) ) { *(_DWORD *)&ArgList[4] = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *(const char **)&ArgList[4]; sub_863460( 1, 1, "* PARSE ERROR: %s\n PackingDefinition failed AddPackingEntry\n at line %d\n", *(_DWORD *)&ArgList[4], v592[1]); } v281 = sub_968380(v280); *(float *)&v282 = COERCE_FLOAT(sub_968280(*(int *)v629)); v283 = *((_DWORD *)i - 2); v591 = *(float *)&v282; v590 = (char *)v279; v589 = COERCE_DOUBLE(__PAIR__(v283, (unsigned int)v281)); sub_7FF6E0(DstBuf, 0x400u, " %16s %2d - Reg %3d - %16s\n", v281, v283, v279, v282); goto LABEL_468; case 197: v284 = *((_DWORD *)i - 1); v285 = *((_DWORD *)i - 3); v286 = *((_DWORD *)i - 2); v287 = *((_DWORD *)i - 5); v288 = *((_DWORD *)i - 4); v289 = *(char **)i; v623 = (char *)v284; *(_DWORD *)v629 = v285; v621 = v286; if ( dword_BA5CA4 && !sub_968770((_DWORD *)dword_BA5CA4, dword_BA5CA0, v288, v287, *(int *)v629, v286, (int)v623, (int)v289) ) { *(_DWORD *)&ArgList[4] = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *(const char **)&ArgList[4]; sub_863460( 1, 1, "* PARSE ERROR: %s\n PackingDefinition failed AddPackingEntry\n at line %d\n", *(_DWORD *)&ArgList[4], v592[1]); } v290 = sub_968380(v287); v291 = sub_968280(*(int *)v629); v591 = *(float *)&v289; v590 = v623; v589 = COERCE_DOUBLE(__PAIR__(v621, (unsigned int)v291)); *(_DWORD *)&v588[4] = v288; *(_DWORD *)v588 = v290; sub_7FF6E0( DstBuf, 0x400u, " %16s - Reg %3d - %16s - 0x%08x, 0x%08x, 0x%08x\n", v290, v288, v291, v621, v623, v289); goto LABEL_468; case 198: v292 = *((_DWORD *)i - 2); v293 = *((_DWORD *)i - 1); v294 = *(char **)i; if ( dword_BA5CA4 && !sub_968770((_DWORD *)dword_BA5CA4, dword_BA5CA0, v293, v292, (int)v294, 0, 14, 0) ) { *(_DWORD *)&ArgList[4] = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *(const char **)&ArgList[4]; sub_863460( 1, 1, "* PARSE ERROR: %s\n PackingDefinition failed AddPackingEntry\n at line %d\n", *(_DWORD *)&ArgList[4], v592[1]); } v295 = sub_968380(v292); v591 = COERCE_FLOAT(sub_968280((int)v294)); v590 = (char *)v293; HIDWORD(v589) = v295; sub_7FF6E0(DstBuf, 0x400u, " %16s - Reg %3d - %16s\n", v295, v293, v591); goto LABEL_468; case 199: sub_7FF6E0(DstBuf, 0x400u, "RenderState List Start\n"); dword_BA5C84 += 4; if ( dword_BA5CC0 ) { dword_BA5CB4 = (int)sub_964260((_DWORD *)dword_BA5CC0); } else if ( dword_BA5CB0 ) { dword_BA5CB4 = (int)sub_963090((_DWORD *)dword_BA5CB0); } else { LABEL_567: dword_BA5CB4 = 0; } goto LABEL_469; case 200: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, "RenderState List End\n"); goto LABEL_567; case 203: if ( byte_BA5C8F ) sub_967ED0((_DWORD *)dword_BA5CB4, *(int *)dword_BA5CC8, dword_BA5CCC, 1, 0); goto LABEL_469; case 204: if ( byte_BA5C8F ) sub_967ED0((_DWORD *)dword_BA5CB4, *(int *)dword_BA5CC8, dword_BA5CCC, 0, 0); goto LABEL_469; case 211: v592[1] = "Syntax Error: renderstate_entry"; goto LABEL_139; case 212: v592[1] = *((const char **)i - 2); v296 = sub_9653D0((char *)v592[1]); if ( v296 == 0x7FFFFFFF ) { v297 = *(float *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *((const char **)i - 2); v591 = v297; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; } else { if ( v296 != 2147483646 ) goto LABEL_578; v298 = *(float *)dword_BA5C80; v299 = sub_8C1D70(); v300 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v299; v592[0] = v300; v591 = v298; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; } sub_863460(1, 1, v590, v591, v592[0], v592[1]); LABEL_578: v301 = *((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v301; sub_7FF6E0(DstBuf, 0x400u, " %32s = ATTRIBUTE - %s", v301, v592[1]); operator delete(*((void **)i - 2)); operator delete(*(void **)i); goto LABEL_469; case 213: v592[1] = *((const char **)i - 2); v302 = sub_9653D0((char *)v592[1]); v303 = v302; if ( v302 == 0x7FFFFFFF ) { v304 = *(float *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *((const char **)i - 2); v591 = v304; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; LABEL_585: sub_863460(1, 1, v590, v591, v592[0], v592[1]); byte_BA5C8F = 0; goto LABEL_587; } if ( v302 == 2147483646 ) { v305 = *(float *)dword_BA5C80; v306 = sub_8C1D70(); v307 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v306; v592[0] = v307; v591 = v305; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; goto LABEL_585; } if ( !sub_966740(v302, *(char **)i, (int)&v611) ) { v308 = *(float *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *(const char **)i; v591 = v308; v590 = "* PARSE ERROR: %s\n Invalid RenderStateValue (%s)\n at line %d\n"; goto LABEL_585; } *(_DWORD *)dword_BA5CC8 = v303; dword_BA5CCC = v611; byte_BA5C8F = 1; LABEL_587: v309 = *((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v309; sub_7FF6E0(DstBuf, 0x400u, " %32s = %s", v309, v592[1]); operator delete(*((void **)i - 2)); operator delete(*(void **)i); LABEL_469: v237 = (int)v613; v238 = (unsigned int)&v627[-2 * v615]; v627 -= 2 * v615; if ( dword_BA585C ) sub_8B9D80(v622, v238); v239 = v624; v240 = v627; i = (char *)(v237 + 4); *(_DWORD *)i = v29; v241 = (unsigned __int16)word_A303C0[v239]; v242 = *(_WORD *)v240; v243 = *(signed __int16 *)v240 + word_A31A86[v241]; if ( v243 > 0x438 || word_A32700[v243] != v242 ) { v569 = word_A3108E[v241]; v627 += 2; v0 = v620; v2 = v627; v630 = (const CHAR *)v569; } else { v244 = word_A31E88[v243]; v627 += 2; v0 = v620; v2 = v627; v630 = (const CHAR *)v244; } break; case 214: v592[1] = *((const char **)i - 2); v310 = sub_9653D0((char *)v592[1]); if ( v310 == 0x7FFFFFFF ) { v311 = *(float *)dword_BA5C80; v312 = sub_8C1D70(); v313 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v312; v592[0] = v313; v591 = v311; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; LABEL_592: sub_863460(1, 1, v590, v591, v592[0], v592[1]); byte_BA5C8F = 0; goto LABEL_594; } if ( v310 == 2147483646 ) { v314 = *(float *)dword_BA5C80; v315 = sub_8C1D70(); v316 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v315; v592[0] = v316; v591 = v314; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; goto LABEL_592; } v20 = *i == 0; *(_DWORD *)dword_BA5CC8 = v310; byte_BA5C8F = 1; dword_BA5CCC = !v20; LABEL_594: v317 = "TRUE"; if ( !*i ) v317 = "FALSE"; v318 = (const char *)*((_DWORD *)i - 2); v592[1] = v317; v592[0] = v318; v591 = COERCE_FLOAT(" %32s = %s"); LABEL_597: sub_7FF6E0(DstBuf, 0x400u, (char *)LODWORD(v591), v592[0], v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 215: v592[1] = *((const char **)i - 2); v319 = sub_9653D0((char *)v592[1]); if ( v319 == 0x7FFFFFFF ) { v320 = *(float *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *((const char **)i - 2); v591 = v320; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; LABEL_602: sub_863460(1, 1, v590, v591, v592[0], v592[1]); byte_BA5C8F = 0; goto LABEL_604; } if ( v319 == 2147483646 ) { v321 = *(float *)dword_BA5C80; v322 = sub_8C1D70(); v323 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v322; v592[0] = v323; v591 = v321; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; goto LABEL_602; } v324 = *(float *)i; *(_DWORD *)dword_BA5CC8 = v319; *(float *)&v612 = v324; byte_BA5C8F = 1; dword_BA5CCC = v612; LABEL_604: v325 = *((float *)i - 2); *(double *)v592 = *(float *)i; v591 = v325; sub_7FF6E0(DstBuf, 0x400u, " %32s = %8.5f", v325, v592[0], v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 216: v592[1] = *((const char **)i - 2); v326 = sub_9653D0((char *)v592[1]); if ( v326 == 0x7FFFFFFF ) { v327 = *(float *)dword_BA5C80; v328 = sub_8C1D70(); v329 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v328; v592[0] = v329; v591 = v327; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; LABEL_609: sub_863460(1, 1, v590, v591, v592[0], v592[1]); byte_BA5C8F = 0; goto LABEL_611; } if ( v326 == 2147483646 ) { v330 = *(float *)dword_BA5C80; v331 = sub_8C1D70(); v332 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v331; v592[0] = v332; v591 = v330; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; goto LABEL_609; } v333 = *(char **)i; *(_DWORD *)dword_BA5CC8 = v326; dword_BA5CCC = (int)v333; byte_BA5C8F = 1; LABEL_611: v334 = *((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v334; sub_7FF6E0(DstBuf, 0x400u, " %32s = 0x%08x", v334, v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 217: v592[1] = *((const char **)i - 2); v335 = sub_9653D0((char *)v592[1]); if ( v335 == 0x7FFFFFFF ) { v336 = *(float *)dword_BA5C80; v337 = sub_8C1D70(); v338 = (const char *)*((_DWORD *)i - 2); v592[1] = (const char *)v337; v592[0] = v338; v591 = v336; v590 = "* PARSE ERROR: %s\n InvalidRenderState (%s)\n at line %d\n"; LABEL_616: sub_863460(1, 1, v590, v591, v592[0], v592[1]); byte_BA5C8F = 0; v340 = (const char *)*((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = v340; v591 = COERCE_FLOAT(" %32s = 0x%08x"); goto LABEL_597; } if ( v335 == 2147483646 ) { v339 = *(float *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = *((const char **)i - 2); v591 = v339; v590 = "* PARSE WARNING: %s\n DeprecatedRenderState (%s)\n at line %d\n"; goto LABEL_616; } v341 = *(char **)i; *(_DWORD *)dword_BA5CC8 = v335; dword_BA5CCC = (int)v341; byte_BA5C8F = 1; v342 = (const char *)*((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = v342; v591 = COERCE_FLOAT(" %32s = 0x%08x"); goto LABEL_597; case 227: if ( byte_BA5C8C ) sub_8C1D80((int)"Syntax Error: Embedded ConstantMap Platform-block"); sub_7FF6E0(DstBuf, 0x400u, "ConstantMap Platform-block Start\n"); dword_BA5C84 += 4; byte_BA5C8C = 1; goto LABEL_469; case 228: case 297: dword_BA5864 = *(_DWORD *)i; goto LABEL_469; case 229: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, "ConstantMap Platform-block End\n"); byte_BA5C8C = 0; goto LABEL_469; case 230: v343 = *(char **)i; v344 = *(_DWORD *)dword_BA5CB8; v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; *(_QWORD *)&v589 = (unsigned int)(3 * (_DWORD)v343); v345 = *((_DWORD *)i - 1) | ((_DWORD)v343 << 16); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); *(_DWORD *)v588 = v345; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "BoneMatrix3"; if ( byte_BA5C8C ) (*(void (__thiscall **)(int, int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v344 + 8))( dword_BA5CB8, dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v344 + 4))( dword_BA5CB8, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v346 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v346; if ( v346 ) { sub_6A2630(v346, 3); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot( dword_BA5CA8, (struct Concurrency::details::VirtualProcessorRoot *)1); } } v347 = *((_DWORD *)i - 1); v348 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v347; v591 = v348; sub_7FF6E0(DstBuf, 0x400u, " Defined: BoneMatrix3 %3d %3d %3d\n", v348, v347, v592[1]); goto LABEL_469; case 231: v349 = *(char **)i; v350 = *((_DWORD *)i - 2); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; HIDWORD(v589) = v350; v351 = *(_DWORD *)dword_BA5CB8; LODWORD(v589) = 3 * (_DWORD)v349; v352 = *((_DWORD *)i - 1) | ((_DWORD)v349 << 16); *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v352; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "BoneMatrix3"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v351 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v351 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v353 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v353; if ( v353 ) { sub_6A2630(v353, 3); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot( dword_BA5CA8, (struct Concurrency::details::VirtualProcessorRoot *)1); } } v354 = (const char *)*((_DWORD *)i - 1); v355 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = v354; v591 = v355; v590 = " Defined: BoneMatrix3 %24s %3d %3d\n"; goto LABEL_637; case 232: v356 = *(char **)i; v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; *(_QWORD *)&v589 = (unsigned int)(4 * (_DWORD)v356); v357 = *(_DWORD *)dword_BA5CB8; v358 = *((_DWORD *)i - 1) | ((_DWORD)v356 << 16); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); *(_DWORD *)v588 = v358; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "BoneMatrix4"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v357 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v357 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v359 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v359; if ( v359 ) { sub_6A2630(v359, 4); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot( dword_BA5CA8, (struct Concurrency::details::VirtualProcessorRoot *)1); } } v360 = *((_DWORD *)i - 1); v361 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v360; v591 = v361; sub_7FF6E0(DstBuf, 0x400u, " Defined: BoneMatrix4 %3d %3d %3d\n", v361, v360, v592[1]); goto LABEL_469; case 233: v362 = *(char **)i; v363 = *((_DWORD *)i - 2); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; HIDWORD(v589) = v363; v364 = *(_DWORD *)dword_BA5CB8; LODWORD(v589) = 4 * (_DWORD)v362; v365 = *((_DWORD *)i - 1) | ((_DWORD)v362 << 16); *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v365; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "BoneMatrix4"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v364 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v364 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v366 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v366; if ( v366 ) { sub_6A2630(v366, 4); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot( dword_BA5CA8, (struct Concurrency::details::VirtualProcessorRoot *)1); } } v367 = (const char *)*((_DWORD *)i - 1); v368 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = v367; v591 = v368; v590 = " Defined: BoneMatrix4 %24s %3d %3d\n"; goto LABEL_680; case 234: v369 = *(char **)i; v370 = *(_DWORD *)dword_BA5CB8; v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; *(_QWORD *)&v589 = (unsigned int)(3 * (_DWORD)v369); v371 = *((_DWORD *)i - 1) | ((_DWORD)v369 << 16); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); *(_DWORD *)v588 = v371; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "SkinBoneMatrix3"; if ( byte_BA5C8C ) (*(void (__thiscall **)(int, int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v370 + 8))( dword_BA5CB8, dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__thiscall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v370 + 4))( dword_BA5CB8, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v372 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v372; if ( v372 ) { sub_6A2630(v372, 3); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot(dword_BA5CA8, 0); } } v373 = *((_DWORD *)i - 1); v374 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v373; v591 = v374; sub_7FF6E0(DstBuf, 0x400u, " Defined: SkinBoneMatrix4 %3d %3d %3d\n", v374, v373, v592[1]); goto LABEL_469; case 235: v375 = *(char **)i; v376 = *((_DWORD *)i - 2); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; HIDWORD(v589) = v376; v377 = *(_DWORD *)dword_BA5CB8; LODWORD(v589) = 3 * (_DWORD)v375; v378 = *((_DWORD *)i - 1) | ((_DWORD)v375 << 16); *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v378; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "SkinBoneMatrix3"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v377 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v377 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v379 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v379; if ( v379 ) { sub_6A2630(v379, 3); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot(dword_BA5CA8, 0); } } v380 = (const char *)*((_DWORD *)i - 1); v381 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = v380; v591 = v381; v590 = " Defined: SkinBoneMatrix4 %24s %3d %3d\n"; LABEL_637: sub_7FF6E0(DstBuf, 0x400u, v590, v591, v592[0], v592[1]); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); goto LABEL_467; case 236: v382 = *(char **)i; v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; *(_QWORD *)&v589 = (unsigned int)(4 * (_DWORD)v382); v383 = *(_DWORD *)dword_BA5CB8; v384 = *((_DWORD *)i - 1) | ((_DWORD)v382 << 16); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); *(_DWORD *)v588 = v384; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "SkinBoneMatrix4"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v383 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v383 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v385 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v385; if ( v385 ) { sub_6A2630(v385, 4); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot(dword_BA5CA8, 0); } } v386 = *((_DWORD *)i - 1); v387 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v386; v591 = v387; sub_7FF6E0(DstBuf, 0x400u, " Defined: SkinBoneMatrix4 %3d %3d %3d\n", v387, v386, v592[1]); goto LABEL_469; case 237: v388 = *(char **)i; v389 = *((_DWORD *)i - 2); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; HIDWORD(v589) = v389; v390 = *(_DWORD *)dword_BA5CB8; LODWORD(v589) = 4 * (_DWORD)v388; v391 = *((_DWORD *)i - 1) | ((_DWORD)v388 << 16); *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v391; HIDWORD(v587) = 0x20000000; LODWORD(v587) = "SkinBoneMatrix4"; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v390 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v390 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); if ( dword_BA5CB0 ) { v392 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); dword_BA5CA8 = v392; if ( v392 ) { sub_6A2630(v392, 4); Concurrency::details::ExecutionResource::MarkAsVirtualProcessorRoot(dword_BA5CA8, 0); } } v393 = (const char *)*((_DWORD *)i - 1); v394 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = v393; v591 = v394; v590 = " Defined: SkinBoneMatrix4 %24s %3d %3d\n"; LABEL_680: sub_7FF6E0(DstBuf, 0x400u, v590, v591, v592[0], v592[1]); *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); LABEL_467: operator delete(*(void **)&v588[4]); goto LABEL_468; case 238: v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; v589 = 0.0; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5864, *((_DWORD *)i - 2), 0x20000000, *(_DWORD *)i, *((_DWORD *)i - 1), LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 4))( *((_DWORD *)i - 2), 0x20000000, *(_DWORD *)i, *((_DWORD *)i - 1), LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); v395 = (const char *)*((_DWORD *)i - 1); v396 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = v395; v591 = v396; v590 = " Defined: %24s %3d %3d\n"; LABEL_361: sub_7FF6E0(DstBuf, 0x400u, v590, v591, v592[0], v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 239: v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; if ( byte_BA5C8C ) { v397 = *(void (__stdcall **)(int, _DWORD, signed int, char *, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 8); HIDWORD(v589) = *((_DWORD *)i - 1); v398 = *(char **)i; LODWORD(v589) = 0; *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v398; v397( dword_BA5864, *((_DWORD *)i - 2), 0x20000000, v398, -1, 0, HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); } else { v399 = *(void (__stdcall **)(_DWORD, signed int, char *, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 4); HIDWORD(v589) = *((_DWORD *)i - 1); v400 = *(char **)i; LODWORD(v589) = 0; *(_DWORD *)&v588[4] = -1; *(_DWORD *)v588 = v400; v399(*((_DWORD *)i - 2), 0x20000000, v400, -1, 0, HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); } v401 = *((_DWORD *)i - 1); v402 = (char *)*((_DWORD *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v401; v591 = -6.8056469e38/*NaN*/; v590 = v402; sub_7FF6E0(DstBuf, 0x400u, " Defined: %24s %3d %24s %3d\n", v402, -1, v401, v592[1]); operator delete(*((void **)i - 2)); operator delete(*((void **)i - 1)); goto LABEL_469; case 240: if ( dword_BA5C94 == -116 || (v592[1] = *((const char **)i - 2), v403 = sub_95E670((_DWORD *)(dword_BA5C94 + 116), (char *)v592[1]), (*(_DWORD *)v629 = v403) == 0) ) { v404 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); goto LABEL_692; } if ( !sub_92C550(*((char **)i - 1), (int)&v616) || (v592[1] = v403[1], !sub_92C640(v616, (signed int)v592[1])) ) { v405 = (const char *)*((_DWORD *)i - 2); v406 = *(char **)dword_BA5C80; v592[1] = *((const char **)i - 1); v592[0] = v405; v591 = COERCE_FLOAT(sub_8C1D70()); v590 = v406; sub_863460( 1, 0, "* PARSE ERROR: %s\n" " IsObjectMappingValidForType at line %d\n" " Object name = %s\n" " Object mapping = %s\n", v406, v591); goto LABEL_469; } v623 = (char *)(*((unsigned __int16 *)&dword_BA6EFC + (_DWORD)v403[1]) | 0x60000000); v407 = strlen(*((const char **)i - 1)); v408 = strlen(*((const char **)i - 2)); v409 = v408 + v407 + 3; v592[1] = (const char *)(v408 + v407 + 3); v410 = (char *)operator new((size_t)v592[1]); v411 = *((float *)i - 1); v592[0] = *((const char **)i - 2); v591 = v411; v412 = v410; sub_7FF6E0(v410, v409, "%s@@%s", v411, v592[0]); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; v589 = 0.0; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, char *, char *, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5864, v412, v623, *(_DWORD *)(*(_DWORD *)v629 + 8), *(_DWORD *)i, LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(char *, char *, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 4))( v412, v623, *(_DWORD *)(*(_DWORD *)v629 + 8), *(_DWORD *)i, LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); v413 = *((_DWORD *)i - 1); v414 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v413; v591 = v414; sub_7FF6E0(DstBuf, 0x400u, " Object: %24s %16s %3d\n", v414, v413, v592[1]); operator delete(v412); operator delete(*((void **)i - 2)); operator delete(*((void **)i - 1)); goto LABEL_468; case 241: if ( dword_BA5C94 == -116 || (v592[1] = *((const char **)i - 2), v415 = sub_95E670((_DWORD *)(dword_BA5C94 + 116), (char *)v592[1]), (*(_DWORD *)v629 = v415) == 0) ) { v404 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); LABEL_692: v592[0] = (const char *)sub_8C1D70(); v591 = v404; sub_863460( 1, 0, "* PARSE ERROR: %s\n GetObjectByName at line %d\n Local name = %s\n", v404, v592[0], v592[1]); goto LABEL_469; } if ( !sub_92C550(*((char **)i - 1), (int)&v614) || (v592[1] = v415[1], !sub_92C640(v614, (signed int)v592[1])) ) { v416 = (const char *)*((_DWORD *)i - 2); v417 = *(char **)dword_BA5C80; v592[1] = *((const char **)i - 1); v592[0] = v416; v591 = COERCE_FLOAT(sub_8C1D70()); v590 = v417; sub_863460( 1, 0, "* PARSE ERROR: %s\n" " IsObjectMappingValidForType at line %d\n" " Local name = %s\n" " Object mapping = %s\n", v417, v591); goto LABEL_469; } v623 = (char *)(*((unsigned __int16 *)&dword_BA6EFC + (_DWORD)v415[1]) | 0x60000000); v418 = strlen(*((const char **)i - 1)); v419 = strlen(*((const char **)i - 2)); v420 = v419 + v418 + 3; v592[1] = (const char *)(v419 + v418 + 3); v421 = (char *)operator new((size_t)v592[1]); v422 = *((float *)i - 1); v423 = v421; v592[0] = *((const char **)i - 2); v591 = v422; sub_7FF6E0(v421, v420, "%s@@%s", v422, v592[0]); v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; if ( byte_BA5C8C ) (*(void (__stdcall **)(int, char *, char *, _DWORD, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 8))( dword_BA5864, v423, v623, *(_DWORD *)(*(_DWORD *)v629 + 8), -1, 0, *(_DWORD *)i, v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(char *, char *, _DWORD, signed int, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 4))( v423, v623, *(_DWORD *)(*(_DWORD *)v629 + 8), -1, 0, *(_DWORD *)i, v590, LODWORD(v591), v592[0], v592[1]); v424 = *((_DWORD *)i - 1); v425 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v424; v591 = v425; sub_7FF6E0(DstBuf, 0x400u, " Object: %24s %16s %16s\n", v425, v424, v592[1]); operator delete(v423); operator delete(*((void **)i - 2)); operator delete(*((void **)i - 1)); operator delete(*(void **)i); goto LABEL_468; case 242: v592[1] = *((const char **)i - 3); v426 = sub_8B9EA0((char *)v592[1]); v427 = *((_DWORD *)i - 1); v428 = *(_DWORD *)dword_BA5CB8; v592[1] = 0; v592[0] = 0; v591 = 0.0; v590 = 0; *(_QWORD *)&v589 = v427; *(_DWORD *)&v588[4] = *((_DWORD *)i - 2); *(_DWORD *)v588 = *(_DWORD *)i; HIDWORD(v587) = v426 | 0x30000000; LODWORD(v587) = *((_DWORD *)i - 3); if ( byte_BA5C8C ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v428 + 8))( dword_BA5864, LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); else (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char *, _DWORD, const char *, const char *))(v428 + 4))( LODWORD(v587), HIDWORD(v587), *(_DWORD *)v588, *(_DWORD *)&v588[4], LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]); v429 = *((_DWORD *)i - 1); v430 = *((float *)i - 2); v592[1] = *(const char **)i; v431 = (char *)*((_DWORD *)i - 3); v592[0] = (const char *)v429; v591 = v430; v590 = v431; sub_7FF6E0(DstBuf, 0x400u, " Attrib: %24s %3d %3d %3d\n", v431, v430, v429, v592[1]); operator delete(*((void **)i - 3)); goto LABEL_469; case 244: v592[1] = (const char *)1; v592[0] = (const char *)flt_BA5658; LODWORD(v591) = 4; if ( byte_BA5C8C ) { v432 = *(void (__stdcall **)(int, _DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, int, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 8); v590 = (char *)(4 * *(_DWORD *)::ArgList); v432( dword_BA5864, *((_DWORD *)i - 3), 0x10000000, 0, *((_DWORD *)i - 2), *((_DWORD *)i - 1), 0, 4 * *(_DWORD *)::ArgList, LODWORD(v591), v592[0], v592[1]); } else { v433 = *(void (__stdcall **)(_DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, int, _DWORD, const char *, const char *))(*(_DWORD *)dword_BA5CB8 + 4); v590 = (char *)(4 * *(_DWORD *)::ArgList); v433( *((_DWORD *)i - 3), 0x10000000, 0, *((_DWORD *)i - 2), *((_DWORD *)i - 1), 0, 4 * *(_DWORD *)::ArgList, LODWORD(v591), v592[0], v592[1]); } v434 = *((_DWORD *)i - 1); v435 = *((float *)i - 2); v592[1] = *(const char **)::ArgList; v436 = (char *)*((_DWORD *)i - 3); v592[0] = (const char *)v434; v591 = v435; v590 = v436; sub_7FF6E0( DstBuf, 0x400u, " Const: %24s %3d %3d - %3d values\n", v436, v435, v434, *(_DWORD *)::ArgList); *(_DWORD *)v588 = word_9AC794; sub_7FF6E0(DstBuf, 0x400u, " %24s - ", word_9AC794); v437 = 0; if ( *(_DWORD *)::ArgList ) { do { *(double *)v592 = flt_BA5658[v437]; sub_7FF6E0(DstBuf, 0x400u, "%8.5f,", v592[0], v592[1]); *(_DWORD *)&ArgList[4] = v437 + 1; if ( !((v437 + 1) & 3) || v437 == *(_DWORD *)::ArgList - 1 ) strcat_s(DstBuf, 0x400u, "\n"); if ( !((v437 + 1) & 3) && v437 < *(_DWORD *)::ArgList - 1 ) { v592[1] = word_9AC794; sub_7FF6E0(DstBuf, 0x400u, " %24s - ", word_9AC794); } v437 = *(_DWORD *)&ArgList[4]; } while ( *(_DWORD *)&ArgList[4] < *(_DWORD *)::ArgList ); } operator delete(*((void **)i - 3)); goto LABEL_468; case 246: v438 = *((_DWORD *)i - 1); v439 = (char *)*((_DWORD *)i - 2); v592[1] = *(const char **)i; if ( !sub_8BA8B0(v439, v438, (int)v592[1]) ) { sub_8C1D80((int)"Syntax Error: AddGlobalAttributeToConstantMap!"); dword_BA5878 = -2; } v440 = *((_DWORD *)i - 1); v441 = *((float *)i - 2); v592[1] = *(const char **)i; v592[0] = (const char *)v440; v591 = v441; sub_7FF6E0(DstBuf, 0x400u, " Global: %24s %3d %3d\n", v441, v440, v592[1]); operator delete(*((void **)i - 2)); goto LABEL_469; case 247: v442 = (const char *)(unsigned __int8)*(i - 4); v443 = *((float *)i - 2); v592[1] = (const char *)(unsigned __int8)*i; v444 = (char *)*((_DWORD *)i - 3); v592[0] = v442; v445 = (const char *)*((_DWORD *)i - 4); v591 = v443; v446 = *((_DWORD *)i - 5); v590 = v444; v447 = *((_DWORD *)i - 6); HIDWORD(v589) = v445; v448 = sub_8BAE20( *((_DWORD *)i - 7), v447, v446, v445, (signed int)v590, (const char *)LODWORD(v591), (char)v592[0], (char)v592[1]); v592[1] = *((const char **)i - 7); if ( v448 ) { operator delete((void *)v592[1]); operator delete(*((void **)i - 4)); operator delete(*((void **)i - 2)); } else { operator delete((void *)v592[1]); operator delete(*((void **)i - 4)); operator delete(*((void **)i - 2)); sub_8C1D80((int)"Syntax Error: SetupOperatorEntry!"); dword_BA5878 = -2; } goto LABEL_469; case 248: case 447: v29 = (const CHAR *)0x10000000; goto LABEL_469; case 249: case 448: v29 = (const CHAR *)0x20000000; goto LABEL_469; case 250: case 449: v29 = (const CHAR *)805306368; goto LABEL_469; case 251: case 443: case 450: v29 = (const CHAR *)0x40000000; goto LABEL_469; case 252: v592[1] = "Syntax Error: operator_type"; goto LABEL_139; case 257: dword_BA5868 = 0; sub_7FF6E0(DstBuf, 0x400u, "VertexShader ConstantMap Start\n"); dword_BA5C84 += 4; if ( dword_BA5CC0 ) { dword_BA5CB8 = sub_964670((_DWORD *)dword_BA5CC0); goto LABEL_469; } if ( !dword_BA5CB0 ) goto LABEL_743; dword_BA5CB8 = sub_9632D0((_DWORD *)dword_BA5CB0); goto LABEL_469; case 258: v592[1] = "VertexShader ConstantMap End\n"; goto LABEL_742; case 259: dword_BA5868 = 1; sub_7FF6E0(DstBuf, 0x400u, "PixelShader ConstantMap Start\n"); dword_BA5C84 += 4; if ( dword_BA5CC0 ) { dword_BA5CB8 = sub_964630((_DWORD *)dword_BA5CC0); } else if ( dword_BA5CB0 ) { dword_BA5CB8 = sub_963290((_DWORD *)dword_BA5CB0); } else { LABEL_743: dword_BA5CB8 = 0; } goto LABEL_469; case 260: v592[1] = "PixelShader ConstantMap End\n"; LABEL_742: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, (char *)v592[1]); goto LABEL_743; case 261: if ( dword_BA5CB0 ) sub_95CB50((void *)dword_BA5CB0, *(char **)i); v592[1] = *(const char **)i; v592[0] = "ClassName = %s\n"; goto LABEL_752; case 262: case 263: case 264: if ( dword_BA5CC0 ) { sub_964310((void *)dword_BA5CC0, *(char **)i); sub_964330((void *)dword_BA5CC0, *(char **)i); } operator delete(*(void **)i); goto LABEL_469; case 265: v449 = *((_DWORD *)i - 1); v592[1] = *(const char **)i; v592[0] = (const char *)v449; sub_7FF6E0(DstBuf, 0x400u, "VertexShader File EP %s, ST %s\n", v449, v592[1]); if ( dword_BA5CC0 ) { sub_964350((void *)dword_BA5CC0, *((char **)i - 1)); sub_964370((void *)dword_BA5CC0, *(char **)i); } operator delete(*((void **)i - 1)); operator delete(*(void **)i); goto LABEL_469; case 266: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "VertexShader File EP %s\n", v592[1]); if ( dword_BA5CC0 ) sub_964350((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); goto LABEL_469; case 267: v592[1] = "VertexShader File\n"; goto LABEL_763; case 273: if ( dword_BA5864 & 2 ) sub_964330((void *)dword_BA5CC0, *(char **)i); if ( dword_BA5864 & 8 ) sub_964310((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); goto LABEL_469; case 274: if ( dword_BA5CC0 ) { sub_964350((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); } goto LABEL_469; case 275: if ( dword_BA5CC0 ) { sub_964370((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); } goto LABEL_469; case 276: if ( dword_BA5CC0 ) *(_BYTE *)(dword_BA5CC0 + 52) = *i; goto LABEL_469; case 277: v592[1] = "VertexShader Start\n"; goto LABEL_776; case 278: dword_BA5864 = *(_DWORD *)i; goto LABEL_469; case 279: dword_BA5C84 -= 4; v592[1] = "VertexShader End\n"; goto LABEL_763; case 282: case 283: case 284: if ( dword_BA5CC0 ) { sub_964290((void *)dword_BA5CC0, *(char **)i); sub_9642B0((void *)dword_BA5CC0, *(char **)i); } operator delete(*(void **)i); goto LABEL_469; case 285: v450 = *((_DWORD *)i - 1); v592[1] = *(const char **)i; v592[0] = (const char *)v450; sub_7FF6E0(DstBuf, 0x400u, "PixelShader File EP %s, ST %s\n", v450, v592[1]); if ( dword_BA5CC0 ) { sub_9642D0((void *)dword_BA5CC0, *((char **)i - 1)); sub_9642F0((void *)dword_BA5CC0, *(char **)i); } operator delete(*((void **)i - 1)); operator delete(*(void **)i); goto LABEL_469; case 286: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "PixelShader File EP %s\n", v592[1]); if ( dword_BA5CC0 ) sub_9642D0((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); goto LABEL_469; case 287: v592[1] = "PixelShader File\n"; goto LABEL_763; case 293: if ( dword_BA5864 & 2 ) sub_9642B0((void *)dword_BA5CC0, *(char **)i); if ( dword_BA5864 & 8 ) sub_964290((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); goto LABEL_469; case 294: if ( dword_BA5CC0 ) { sub_9642D0((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); } goto LABEL_469; case 295: if ( dword_BA5CC0 ) { sub_9642F0((void *)dword_BA5CC0, *(char **)i); operator delete(*(void **)i); } goto LABEL_469; case 296: v592[1] = "PixelShader Start\n"; LABEL_776: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[1]); dword_BA5C84 += 4; goto LABEL_469; case 298: dword_BA5C84 -= 4; v592[1] = "PixelShader End\n"; LABEL_763: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[1]); goto LABEL_469; case 301: sub_7FF6E0(DstBuf, 0x400u, "Requirement List Start\n"); dword_BA5C84 += 4; if ( dword_BA5CB0 ) dword_BA5CA8 = (Concurrency::details::_UnrealizedChore *)sub_963060((_DWORD *)dword_BA5CB0); goto LABEL_468; case 302: dword_BA5C84 -= 4; sub_7FF6E0(DstBuf, 0x400u, "Requirement List End\n"); if ( dword_BA5C94 && dword_BA5CA8 ) { v451 = sub_968240((void *)dword_BA5CA8); v452 = dword_BA5C94; if ( *(_DWORD *)(dword_BA5C94 + 44) > v451 ) *(_DWORD *)(dword_BA5C94 + 44) = v451; if ( *(_DWORD *)(v452 + 48) < v451 ) *(_DWORD *)(v452 + 48) = v451; v453 = sub_965050(dword_BA5CA8); v454 = dword_BA5C94; if ( *(_DWORD *)(dword_BA5C94 + 52) > v453 ) *(_DWORD *)(dword_BA5C94 + 52) = v453; if ( *(_DWORD *)(v454 + 56) < v453 ) *(_DWORD *)(v454 + 56) = v453; v455 = sub_879520(dword_BA5CA8); v456 = dword_BA5C94; if ( *(_DWORD *)(dword_BA5C94 + 60) > v455 ) *(_DWORD *)(dword_BA5C94 + 60) = v455; if ( *(_DWORD *)(v456 + 64) < v455 ) *(_DWORD *)(v456 + 64) = v455; *(_DWORD *)(dword_BA5C94 + 68) |= sub_965070(dword_BA5CA8); } dword_BA5CA8 = 0; goto LABEL_469; case 312: v592[1] = "Syntax Error: requirement_entry"; goto LABEL_139; case 313: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, " VSVersion 0x%08x\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; unknown_libname_1(*(_DWORD *)i); goto LABEL_469; case 314: v457 = (unsigned __int8)*i; v458 = v457 | (((unsigned __int8)i[1] | 0xFFFFFF00) << 8); v592[1] = (const char *)(v457 | (((unsigned __int8)i[1] | 0xFFFFFF00) << 8)); sub_7FF6E0(DstBuf, 0x400u, " PSVersion 0x%08x\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; unknown_libname_39(v458); goto LABEL_469; case 315: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, " UserDefined 0x%08x\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; sub_965060(dword_BA5CA8, *(_DWORD *)i); goto LABEL_469; case 316: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, " Platform 0x%08x\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; sub_92BCF0(dword_BA5CA8, *(_DWORD *)i); goto LABEL_469; case 317: v592[1] = *((const char **)i - 6); v459 = 0; v460 = sub_8B9F30(v592[1]); if ( v460 ) { v459 = v460; } else { v592[1] = *((const char **)i - 6); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *((const char **)i - 4); v461 = sub_8B9F30(v592[1]); if ( v461 ) { v459 |= v461; } else { v592[1] = *((const char **)i - 4); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *((const char **)i - 2); v462 = sub_8B9F30(v592[1]); if ( v462 ) { v459 |= v462; } else { v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *(const char **)i; v463 = sub_8B9F30(v592[1]); if ( v463 ) { v459 |= v463; } else { v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } if ( *((_DWORD *)i - 6) ) operator delete(*((void **)i - 6)); if ( *((_DWORD *)i - 4) ) operator delete(*((void **)i - 4)); if ( *((_DWORD *)i - 2) ) operator delete(*((void **)i - 2)); goto LABEL_845; case 318: v592[1] = *((const char **)i - 4); v459 = 0; v465 = sub_8B9F30(v592[1]); if ( v465 ) { v459 = v465; } else { v592[1] = *((const char **)i - 4); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *((const char **)i - 2); v466 = sub_8B9F30(v592[1]); if ( v466 ) { v459 |= v466; } else { v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *(const char **)i; v467 = sub_8B9F30(v592[1]); if ( v467 ) { v459 |= v467; } else { v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } if ( *((_DWORD *)i - 4) ) operator delete(*((void **)i - 4)); if ( *((_DWORD *)i - 2) ) operator delete(*((void **)i - 2)); v468 = *(char **)i; if ( !v468 ) goto LABEL_847; operator delete(v468); v29 = (const CHAR *)v459; goto LABEL_469; case 319: v592[1] = *((const char **)i - 2); v459 = 0; v469 = sub_8B9F30(v592[1]); if ( v469 ) { v459 = v469; } else { v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } v592[1] = *(const char **)i; v470 = sub_8B9F30(v592[1]); if ( v470 ) { v459 |= v470; } else { v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } if ( *((_DWORD *)i - 2) ) operator delete(*((void **)i - 2)); v471 = *(char **)i; if ( !v471 ) goto LABEL_847; operator delete(v471); v29 = (const CHAR *)v459; goto LABEL_469; case 320: v592[1] = *(const char **)i; v459 = 0; v472 = sub_8B9F30(v592[1]); if ( v472 ) { v459 = v472; } else { v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Invalid Platform %s\n", v592[1]); } LABEL_845: v464 = *(char **)i; if ( v464 ) operator delete(v464); LABEL_847: v29 = (const CHAR *)v459; goto LABEL_469; case 321: v473 = "true"; if ( !*i ) v473 = "false"; v474 = *((_DWORD *)i - 2); v592[1] = v473; v592[0] = (const char *)v474; sub_7FF6E0(DstBuf, 0x400u, "%15s %s\n", v474, v473); if ( !dword_BA5CA8 ) goto LABEL_887; if ( !_stricmp(*((const char **)i - 2), "USESNIRENDERSTATE") ) { Concurrency::details::_UnrealizedChore::_SetRuntimeOwnsLifetime(dword_BA5CA8, *i); operator delete(*((void **)i - 2)); } else if ( !_stricmp(*((const char **)i - 2), "USESNILIGHTSTATE") ) { Concurrency::details::_UnrealizedChore::_SetDetached(dword_BA5CA8, *i); operator delete(*((void **)i - 2)); } else if ( !_stricmp(*((const char **)i - 2), "SOFTWAREVPREQUIRED") ) { sub_965110(dword_BA5CA8, *i); operator delete(*((void **)i - 2)); } else { if ( !_stricmp(*((const char **)i - 2), "SOFTWAREVPFALLBACK") ) sub_9650F0(dword_BA5CA8, *i); LABEL_887: operator delete(*((void **)i - 2)); } goto LABEL_469; case 322: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Bones/Partition %d\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; sub_6A25D0(dword_BA5CA8, *(_DWORD *)i); goto LABEL_469; case 323: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "BinormalTangent %d\n", v592[1]); if ( !dword_BA5CA8 ) goto LABEL_468; sub_9650E0(dword_BA5CA8, *(_DWORD *)i); goto LABEL_469; case 325: goto LABEL_894; case 326: v29 = (const CHAR *)12288; goto LABEL_469; case 327: v475 = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = (const char *)v475; sub_863460( 1, 1, "* PARSE WARNING: %s\n Deprecated value for BinormalTangentMethod Requirement\n at line %d\n", v475, v592[1]); LABEL_894: v29 = (const CHAR *)4096; goto LABEL_469; case 328: v592[1] = "Syntax Error: binormaltanget_method"; goto LABEL_139; case 331: v476 = *((_DWORD *)i - 2); v592[1] = *((const char **)i - 1); v592[0] = (const char *)v476; sub_7FF6E0(DstBuf, 0x400u, "Stage Start %3d - %s\n", v476, v592[1]); dword_BA5C84 += 4; if ( dword_BA5CC0 ) { v477 = sub_9646C0((_DWORD *)dword_BA5CC0, *((_DWORD *)i - 2), 1); dword_BA5CC4 = (int)v477; if ( v477 ) *((_BYTE *)v477 + 22) = 0; } goto LABEL_468; case 332: dword_BA5C84 -= 4; v478 = *((_DWORD *)i - 5); v592[1] = *((const char **)i - 4); v592[0] = (const char *)v478; sub_7FF6E0(DstBuf, 0x400u, "Stage End %3d - %s\n", v478, v592[1]); dword_BA5CC4 = 0; v479 = (_BYTE *)*((_DWORD *)i - 4); v480 = &byte_9A8050; v481 = v479; while ( 1 ) { v482 = *v481 < (const unsigned __int8)*v480; if ( *v481 != *v480 ) goto LABEL_905; if ( *v481 ) { v483 = v481[1]; v482 = v483 < v480[1]; if ( v483 != v480[1] ) goto LABEL_905; v481 += 2; v480 += 2; if ( v483 ) continue; } v484 = 0; goto LABEL_906; } case 340: if ( !byte_BA5C8F || !dword_BA5CC4 ) goto LABEL_469; v485 = sub_963CB0((_DWORD *)dword_BA5CC4); if ( !v485 ) goto LABEL_468; v592[1] = 0; v592[0] = (const char *)1; goto LABEL_912; case 341: if ( !byte_BA5C8F || !dword_BA5CC4 ) goto LABEL_469; v485 = sub_963CB0((_DWORD *)dword_BA5CC4); if ( !v485 ) goto LABEL_468; v592[1] = 0; v592[0] = 0; LABEL_912: sub_967ED0(v485, *(int *)dword_BA5CC8, dword_BA5CCC, (char)v592[0], (char)v592[1]); goto LABEL_469; case 361: v592[1] = "Syntax Error: stage_entry"; goto LABEL_139; case 362: v486 = dword_BA5CC4; if ( dword_BA5CC4 ) { v487 = *(char **)i; *(_DWORD *)(dword_BA5CC4 + 8) &= 0xF0FFFFFF; *(_DWORD *)(v486 + 8) |= (unsigned int)v487; } goto LABEL_469; case 363: v488 = dword_BA5CC4; if ( dword_BA5CC4 ) { v489 = *(char **)i; *(_DWORD *)(dword_BA5CC4 + 8) &= 0xF00FFFFF; *(_DWORD *)(v488 + 8) |= (unsigned int)v489 | 0x1000000; } goto LABEL_469; case 364: v490 = 0; HIBYTE(v628) = 0; if ( dword_BA5C94 ) { v491 = (_DWORD *)(dword_BA5C94 + 96); byte_BA5C8D = 0; dword_BA5C98 = dword_BA5C94 + 96; v490 = (_DWORD *)(dword_BA5C94 + 116); } else { v491 = (_DWORD *)dword_BA5C98; } if ( v491 ) { v592[1] = *(const char **)i; v492 = sub_9603D0(v491, (char *)v592[1]); if ( v492 ) { HIBYTE(v628) = 1; if ( sub_95E840(v492, &v618, &v594) ) { v493 = dword_BA5CC4; v618 |= 0x2000000u; if ( dword_BA5CC4 ) { v494 = v618; *(_DWORD *)(dword_BA5CC4 + 8) &= 0xF00FFFFF; *(_DWORD *)(v493 + 8) |= v494 | 0x2000000; } } else { v495 = *(float *)dword_BA5C80; v592[1] = *(const char **)i; v592[0] = (const char *)sub_8C1D70(); v591 = v495; sub_863460( 1, 1, "* PARSE ERROR: %s\n GetValue_Texture at line %d\n Attribute name = %s\n", v495, v592[0]); } } dword_BA5C98 = 0; if ( HIBYTE(v628) ) goto LABEL_940; } if ( !v490 ) goto LABEL_940; v592[1] = *(const char **)i; v496 = sub_95E670(v490, (char *)v592[1]); if ( !v496 ) { v499 = *(float *)dword_BA5C80; v592[1] = *(const char **)i; v592[0] = (const char *)sub_8C1D70(); v591 = v499; v590 = "* PARSE ERROR: %s\n TextureNotFound at line %d\n Attribute/Object name = %s\n"; goto LABEL_939; } v497 = v496[1]; if ( (unsigned int)(v497 - 5) > 3 ) { v498 = *(float *)dword_BA5C80; v592[1] = *(const char **)i; v592[0] = (const char *)sub_8C1D70(); v591 = v498; v590 = "* PARSE ERROR: %s\n InvalidObjectType at line %d\n Object name = %s\n"; LABEL_939: sub_863460(1, 1, v590, v591, v592[0]); goto LABEL_940; } if ( dword_BA5CC4 ) { *(_WORD *)(dword_BA5CC4 + 20) = *((_WORD *)v496 + 4) | ((_WORD)v497 << 8); operator delete(*(void **)i); goto LABEL_468; } LABEL_940: operator delete(*(void **)i); LABEL_468: v29 = v630; goto LABEL_469; case 365: v29 = (const CHAR *)0x200000; goto LABEL_469; case 366: v29 = (const CHAR *)3145728; goto LABEL_469; case 367: v29 = (const CHAR *)0x400000; goto LABEL_469; case 368: v29 = (const CHAR *)&loc_500000; goto LABEL_469; case 369: v29 = (const CHAR *)&loc_600000; goto LABEL_469; case 370: v29 = (_BYTE *)(&loc_6FFFFF + 1); goto LABEL_469; case 371: v29 = (const CHAR *)(*(_DWORD *)i | 0x1000000); goto LABEL_469; case 372: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "ColorOp = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 0; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 373: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "ColorArg0 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 1; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 374: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "ColorArg1 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 2; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 375: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "ColorArg2 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 3; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 376: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "AlphaOp = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 4; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 377: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "AlphaArg0 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 5; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 378: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "AlphaArg1 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 6; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 379: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "AlphaArg2 = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 7; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 380: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "ResultArg = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 8; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; goto LABEL_469; case 381: *(_DWORD *)dword_BA5CC8 = 0x7FFFFFFF; dword_BA5CCC = *(_DWORD *)i; v500 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v500; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedTextureStageState (TSS_CONSTANT)\n at line %d\n"); goto LABEL_958; case 382: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvMat00 = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 9; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 383: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvMat00 = %s", v592[1]); operator delete(*(void **)i); goto LABEL_469; case 384: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvMat01 = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 10; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 385: v592[1] = *(const char **)i; v592[0] = "BumpEnvMat01 = %s"; goto LABEL_752; case 386: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvMat10 = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 11; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 387: v592[1] = *(const char **)i; v592[0] = "BumpEnvMat10 = %s"; goto LABEL_966; case 388: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvMat11 = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 12; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 389: v592[1] = *(const char **)i; v592[0] = "BumpEnvMat11 = %s"; goto LABEL_969; case 390: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvLScale = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 13; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 391: v592[1] = *(const char **)i; v592[0] = "BumpEnvLScale = %s"; goto LABEL_752; case 392: *(double *)v592 = *(float *)i; sub_7FF6E0(DstBuf, 0x400u, "BumpEnvLOffset = %8.5f", v592[0], v592[1]); *(_DWORD *)dword_BA5CC8 = 14; dword_BA5CCC = *(int *)i; byte_BA5C8F = 1; goto LABEL_469; case 393: v592[1] = *(const char **)i; v592[0] = "BumpEnvLOffset = %s"; goto LABEL_966; case 394: v592[1] = (const char *)(*(_DWORD *)i | *((_DWORD *)i - 1)); v501 = (int)v592[1]; sub_7FF6E0(DstBuf, 0x400u, "TexCoordIndex = 0x%08x", v592[1]); *(_DWORD *)dword_BA5CC8 = 15; dword_BA5CCC = v501; byte_BA5C8F = 1; goto LABEL_469; case 395: v502 = *((_DWORD *)i - 1); v592[1] = (const char *)v502; sub_7FF6E0(DstBuf, 0x400u, "TexCoordIndex = 0x%08x", v502); *(_DWORD *)dword_BA5CC8 = 15; dword_BA5CCC = v502; byte_BA5C8F = 1; if ( !dword_BA5CC4 ) goto LABEL_468; *(_DWORD *)(dword_BA5CC4 + 8) |= 0x10000000u; goto LABEL_469; case 396: v592[1] = *((const char **)i - 1); sub_7FF6E0(DstBuf, 0x400u, "TextureTransformFlags= COUNT%d", v592[1]); *(_DWORD *)dword_BA5CC8 = 16; dword_BA5CCC = *((_DWORD *)i - 1) | *(_DWORD *)i; byte_BA5C8F = 1; if ( !dword_BA5CC4 ) goto LABEL_468; *(_BYTE *)(dword_BA5CC4 + 22) = 1; goto LABEL_469; case 397: sub_7FF6E0(DstBuf, 0x400u, "TextureTransformFlags= NID3DTTFF_PROJECTED"); *(_DWORD *)dword_BA5CC8 = 16; dword_BA5CCC = 256; byte_BA5C8F = 1; if ( !dword_BA5CC4 ) goto LABEL_468; *(_BYTE *)(dword_BA5CC4 + 22) = 1; goto LABEL_469; case 398: sub_7FF6E0(DstBuf, 0x400u, "TextureTransformFlags= DISABLE"); *(_DWORD *)dword_BA5CC8 = 16; dword_BA5CCC = 0; byte_BA5C8F = 1; if ( !dword_BA5CC4 ) goto LABEL_468; *(_BYTE *)(dword_BA5CC4 + 22) = 1; goto LABEL_469; case 404: v29 = (const CHAR *)256; goto LABEL_469; case 431: v592[1] = "Syntax Error: stage_texture_operation"; goto LABEL_139; case 433: v29 = (const CHAR *)(*(_DWORD *)i | 1); goto LABEL_469; case 434: v29 = (const CHAR *)(*(_DWORD *)i | 2); goto LABEL_469; case 435: v29 = (const CHAR *)(*(_DWORD *)i | 3); goto LABEL_469; case 436: v29 = (const CHAR *)(*(_DWORD *)i | 4); goto LABEL_469; case 437: v29 = (const CHAR *)(*(_DWORD *)i | 5); goto LABEL_469; case 438: v29 = (const CHAR *)(*(_DWORD *)i | 6); goto LABEL_469; case 441: case 442: v29 = (const CHAR *)-1073741824; goto LABEL_469; case 444: v29 = (const CHAR *)-2147483648; goto LABEL_469; case 451: v592[1] = "Syntax Error: stage_texcoordindex_flags"; goto LABEL_139; case 453: if ( dword_BA5CC4 ) { v503 = *((_DWORD *)i - 1); v592[1] = *(const char **)i; *(_DWORD *)(dword_BA5CC4 + 88) = v503 | 0x10000000; sub_92C100(dword_BA5CC4 + 92, 0, (char *)v592[1]); *(_BYTE *)(dword_BA5CC4 + 22) = 1; } operator delete(*(void **)i); goto LABEL_469; case 455: if ( dword_BA5CC4 ) { v504 = *((_DWORD *)i - 1); v595 = flt_BA5658[0]; v596 = flt_BA565C; v597 = flt_BA5660; v598 = flt_BA5664; v599 = flt_BA5668; v600 = flt_BA566C; v601 = flt_BA5670; v602 = flt_BA5674; v603 = flt_BA5678; v604 = flt_BA567C; v605 = flt_BA5680; v606 = flt_BA5684; v607 = flt_BA5688; v608 = flt_BA568C; v609 = flt_BA5690; v505 = flt_BA5694; *(_DWORD *)(dword_BA5CC4 + 88) = v504 | 0x20000000; v610 = v505; qmemcpy((void *)(dword_BA5CC4 + 24), &v595, 0x40u); *(_BYTE *)(dword_BA5CC4 + 22) = 1; } goto LABEL_469; case 463: v592[1] = "Syntax Error: stage_textransmatrix_option"; goto LABEL_139; case 464: v506 = *((_DWORD *)i - 2); v592[1] = *((const char **)i - 1); v592[0] = (const char *)v506; sub_7FF6E0(DstBuf, 0x400u, "Sampler Start %3d - %s\n", v506, v592[1]); dword_BA5C84 += 4; if ( dword_BA5CC0 ) dword_BA5CC4 = (int)sub_9646C0((_DWORD *)dword_BA5CC0, *((_DWORD *)i - 2), 1); goto LABEL_468; case 465: dword_BA5C84 -= 4; v507 = *((_DWORD *)i - 5); v592[1] = *((const char **)i - 4); v592[0] = (const char *)v507; sub_7FF6E0(DstBuf, 0x400u, "Sampler End %3d - %s\n", v507, v592[1]); dword_BA5CC4 = 0; v479 = (_BYTE *)*((_DWORD *)i - 4); v508 = &byte_9A8050; v509 = v479; while ( 1 ) { v482 = *v509 < (const unsigned __int8)*v508; if ( *v509 != *v508 ) goto LABEL_905; if ( *v509 ) { v510 = v509[1]; v482 = v510 < v508[1]; if ( v510 != v508[1] ) goto LABEL_905; v509 += 2; v508 += 2; if ( v510 ) continue; } v484 = 0; goto LABEL_906; } case 470: if ( !byte_BA5C8F || !dword_BA5CC4 ) goto LABEL_469; v511 = sub_963CE0((_DWORD *)dword_BA5CC4); if ( !v511 ) goto LABEL_468; sub_967ED0(v511, *(int *)dword_BA5CC8, dword_BA5CCC, 1, byte_BA5CD0); byte_BA5CD0 = 0; goto LABEL_469; case 471: if ( !byte_BA5C8F || !dword_BA5CC4 ) goto LABEL_469; v512 = sub_963CE0((_DWORD *)dword_BA5CC4); if ( !v512 ) goto LABEL_468; sub_967ED0(v512, *(int *)dword_BA5CC8, dword_BA5CCC, 0, byte_BA5CD0); byte_BA5CD0 = 0; goto LABEL_469; case 491: v592[1] = "Syntax Error: sampler_entry"; goto LABEL_139; case 492: *(_DWORD *)dword_BA5CC8 = 0; v513 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( !byte_BA5CD0 && v513 == (char *)0x7FFFFFFF ) { v514 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v514; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_ADDRESSU SamplerState\n at line %d\n"); goto LABEL_958; } byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "AddressU = 0x%08x"; goto LABEL_543; case 493: *(_DWORD *)dword_BA5CC8 = 1; v515 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( !byte_BA5CD0 && v515 == (char *)0x7FFFFFFF ) { v516 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v516; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_ADDRESSV SamplerState\n at line %d\n"); goto LABEL_958; } byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "AddressV = 0x%08x"; goto LABEL_543; case 494: *(_DWORD *)dword_BA5CC8 = 2; v517 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( byte_BA5CD0 ) { v518 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v518; v591 = COERCE_FLOAT( "* PARSE ERROR: %s\n" " UseMapValue not allowed for TSAMP_ADDRESSW SamplerState\n" " at line %d\n"); v590 = 0; goto LABEL_959; } if ( v517 == (char *)0x7FFFFFFF ) { v519 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v519; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_ADDRESSW SamplerState\n at line %d\n"); goto LABEL_958; } byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "AddressW = 0x%08x"; goto LABEL_543; case 495: *(_DWORD *)dword_BA5CC8 = 3; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "BorderColor = 0x%08x"; goto LABEL_543; case 496: v592[1] = *(const char **)i; v592[0] = "BorderColor = %s"; goto LABEL_966; case 497: *(_DWORD *)dword_BA5CC8 = 4; v520 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( !byte_BA5CD0 && v520 == (char *)0x7FFFFFFF ) { v521 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v521; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_MAGFILTER SamplerState\n at line %d\n"); goto LABEL_958; } byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MagFilter = 0x%08x"; goto LABEL_543; case 498: *(_DWORD *)dword_BA5CC8 = 5; v522 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( !byte_BA5CD0 && v522 == (char *)0x7FFFFFFF ) { v523 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v523; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_MINFILTER SamplerState\n at line %d\n"); goto LABEL_958; } byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MinFilter = 0x%08x"; goto LABEL_543; case 499: *(_DWORD *)dword_BA5CC8 = 6; v524 = *(char **)i; dword_BA5CCC = *(_DWORD *)i; if ( byte_BA5CD0 || v524 != (char *)0x7FFFFFFF ) { byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MipFilter = 0x%08x"; LABEL_543: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[0], v592[1]); } else { v525 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v525; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n Deprecated value for TSAMP_MIPFILTER SamplerState\n at line %d\n"); LABEL_958: v590 = (char *)1; LABEL_959: sub_863460(1, (int)v590, (char *)LODWORD(v591), v592[0], v592[1]); byte_BA5C8F = 0; } goto LABEL_469; case 500: *(_DWORD *)dword_BA5CC8 = 7; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MipMapLODBias = %d"; goto LABEL_543; case 501: v592[1] = *(const char **)i; v592[0] = "MipMapLODBias = %s"; goto LABEL_752; case 502: *(_DWORD *)dword_BA5CC8 = 8; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MaxMipLevel = %d"; goto LABEL_543; case 503: v592[1] = *(const char **)i; v592[0] = "MaxMipLevel = %s"; goto LABEL_969; case 504: *(_DWORD *)dword_BA5CC8 = 9; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "MaxAnisotropy = %d"; goto LABEL_543; case 505: v592[1] = *(const char **)i; v592[0] = "MaxAnisotropy = %s"; goto LABEL_966; case 506: *(_DWORD *)dword_BA5CC8 = 10; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "SRGBTexture = %d"; goto LABEL_543; case 507: v592[1] = *(const char **)i; v592[0] = "SRGBTexture = %s"; LABEL_752: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[0], v592[1]); operator delete(*(void **)i); goto LABEL_469; case 508: *(_DWORD *)dword_BA5CC8 = 11; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "ElementIndex = %d"; goto LABEL_543; case 509: v592[1] = *(const char **)i; v592[0] = "ElementIndex = %s"; LABEL_969: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[0], v592[1]); operator delete(*(void **)i); goto LABEL_469; case 510: *(_DWORD *)dword_BA5CC8 = 12; dword_BA5CCC = *(_DWORD *)i; byte_BA5C8F = 1; v592[1] = *(const char **)i; v592[0] = "DMapOffset = %d"; goto LABEL_543; case 511: v592[1] = *(const char **)i; v592[0] = "DMapOffset = %s"; LABEL_966: sub_7FF6E0(DstBuf, 0x400u, (char *)v592[0], v592[1]); operator delete(*(void **)i); goto LABEL_469; case 512: v526 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v526; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_ALPHAKILL)\n at line %d\n"); goto LABEL_958; case 513: v527 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v527; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_ALPHAKILL)\n at line %d\n"); goto LABEL_1058; case 514: v528 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v528; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_COLORKEYOP)\n at line %d\n"); goto LABEL_958; case 515: v529 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v529; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_COLORSIGN)\n at line %d\n"); LABEL_1058: sub_863460(1, 1, (char *)LODWORD(v591), v592[0], v592[1]); byte_BA5C8F = 0; operator delete(*(void **)i); goto LABEL_469; case 516: v530 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v530; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_COLORSIGN)\n at line %d\n"); goto LABEL_958; case 517: v531 = *(const char **)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = v531; v591 = COERCE_FLOAT("* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_COLORKEYCOLOR)\n at line %d\n"); goto LABEL_958; case 518: v532 = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = (const char *)v532; sub_863460( 1, 1, "* PARSE WARNING: %s\n DeprecatedSamplerState (TSAMP_COLORKEYCOLOR)\n at line %d\n", v532, v592[1]); byte_BA5C8F = 0; operator delete(*(void **)i); goto LABEL_469; case 525: case 537: byte_BA5CD0 = 1; LABEL_1065: v29 = (const CHAR *)0x7FFFFFFF; goto LABEL_469; case 526: v592[1] = "Syntax Error: sampler_texture_address"; goto LABEL_139; case 538: v592[1] = "Syntax Error: sampler_texture_filter"; goto LABEL_139; case 541: v592[1] = "Syntax Error: sampler_texture_alphakill"; goto LABEL_139; case 546: v592[1] = "Syntax Error: sampler_texture_colorkeyop"; LABEL_139: sub_8C1D80((int)v592[1]); dword_BA5878 = -2; goto LABEL_469; case 556: v592[1] = *((const char **)i - 1); sub_7FF6E0(DstBuf, 0x400u, "Pass Start %s\n", v592[1]); dword_BA5C84 += 4; if ( dword_BA5CB0 ) dword_BA5CC0 = (int)sub_963310((_DWORD *)dword_BA5CB0, dword_BA5CBC, (_DWORD *)1); goto LABEL_468; case 557: dword_BA5C84 -= 4; v592[1] = *((const char **)i - 4); sub_7FF6E0(DstBuf, 0x400u, "Pass End %s\n", v592[1]); ++dword_BA5CBC; dword_BA5CC0 = 0; v479 = (_BYTE *)*((_DWORD *)i - 4); v533 = &byte_9A8050; v534 = v479; do { v482 = *v534 < (const unsigned __int8)*v533; if ( *v534 != *v533 ) goto LABEL_905; if ( !*v534 ) break; v535 = v534[1]; v482 = v535 < v533[1]; if ( v535 != v533[1] ) { LABEL_905: v484 = -v482 - (v482 - 1); goto LABEL_906; } v534 += 2; v533 += 2; } while ( v535 ); v484 = 0; LABEL_906: if ( v484 ) operator delete(v479); goto LABEL_468; case 570: v592[1] = *((const char **)i - 1); sub_7FF6E0(DstBuf, 0x400u, "Implementation Start %s\n", v592[1]); dword_BA5C84 += 4; if ( dword_BA5C94 ) { dword_BA5CB0 = (int)sub_95D450((_DWORD *)dword_BA5C94, *((char **)i - 1), 1, dword_BA5CAC); if ( *(_DWORD *)(dword_BA5CB0 + 12) == dword_BA5CAC ) ++dword_BA5CAC; dword_BA5CBC = 0; } goto LABEL_468; case 571: v592[1] = *(const char **)i; sub_7FF6E0(DstBuf, 0x400u, "Description: %s\n", v592[1]); if ( dword_BA5CB0 ) sub_963040((void *)dword_BA5CB0, *(char **)i); v67 = *(char **)i; if ( !v67 ) goto LABEL_468; v536 = &byte_9A8050; v537 = v67; do { v70 = (unsigned __int8)*v537 < *v536; if ( *v537 != *v536 ) goto LABEL_134; if ( !*v537 ) break; v538 = v537[1]; v70 = v538 < v536[1]; if ( v538 != v536[1] ) { LABEL_134: v72 = -v70 - (v70 - 1); goto LABEL_135; } v537 += 2; v536 += 2; } while ( v538 ); v72 = 0; LABEL_135: if ( !v72 ) goto LABEL_468; operator delete(v67); goto LABEL_469; case 572: dword_BA5C84 -= 4; v592[1] = *((const char **)i - 6); sub_7FF6E0(DstBuf, 0x400u, "Implementation End %s\n", v592[1]); dword_BA5CB0 = 0; operator delete(*((void **)i - 6)); goto LABEL_469; case 573: v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "Integer............%s\n", v592[1]); dword_BA5C84 += 4; HIDWORD(v589) = *(_DWORD *)i; sub_7FF6E0(DstBuf, 0x400u, "%d\n", HIDWORD(v589)); v539 = dword_BA5CD8; dword_BA5C84 -= 4; if ( !dword_BA5CD8 ) goto LABEL_1096; v540 = *(char **)i; v592[1] = (const char *)1; *(_DWORD *)&ArgList[4] = v540; v592[0] = &ArgList[4]; LODWORD(v591) = 4; v590 = (char *)4; HIDWORD(v589) = 805306371; goto LABEL_1094; case 574: v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "Boolean............%s\n", v592[1]); dword_BA5C84 += 4; v543 = "TRUE"; if ( !*i ) v543 = "FALSE"; v592[1] = v543; sub_7FF6E0(DstBuf, 0x400u, "%s\n", v543); v539 = dword_BA5CD8; dword_BA5C84 -= 4; if ( dword_BA5CD8 ) { v20 = *i == 0; v592[1] = (const char *)1; HIBYTE(v628) = !v20; v592[0] = (char *)&v628 + 3; LODWORD(v591) = 1; v590 = (char *)1; HIDWORD(v589) = 805306369; LABEL_1094: v541 = *(unsigned __int8 (__stdcall **)(_DWORD, _DWORD, char *, _DWORD, const char *, const char *))(*(_DWORD *)v539 + 36); LODWORD(v589) = *((_DWORD *)i - 2); if ( !v541(LODWORD(v589), HIDWORD(v589), v590, LODWORD(v591), v592[0], v592[1]) ) { v542 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v542; sub_863460( 1, 1, "* PARSE ERROR: %s\n UserDefinedData at line %d\n Name = %s\n\t Failed to add!\n", v542, v592[0]); } } LABEL_1096: operator delete(*((void **)i - 2)); goto LABEL_469; case 575: v592[1] = *((const char **)i - 2); v592[0] = *(const char **)::ArgList; sub_7FF6E0(DstBuf, 0x400u, "Floats (%2d)........%s\n", *(_DWORD *)::ArgList, v592[1]); v544 = *(_DWORD *)::ArgList; dword_BA5C84 += 4; if ( *(_DWORD *)::ArgList ) { v545 = 1; v546 = flt_BA5658; do { *(double *)v592 = *v546; sub_7FF6E0(DstBuf, 0x400u, "%-8.5f", v592[0], v592[1]); if ( !(v545 & 3) || (v544 = *(_DWORD *)::ArgList, v545 == *(_DWORD *)::ArgList) ) { strcat_s(DstBuf, 0x400u, "\n"); v544 = *(_DWORD *)::ArgList; } ++v545; ++v546; } while ( v545 - 1 < v544 ); } dword_BA5C84 -= 4; if ( !dword_BA5CD8 ) goto LABEL_1122; v547 = 0; switch ( v544 ) { case 1u: v547 = 4; break; case 2u: v547 = 5; break; case 3u: v547 = 6; break; case 4u: v547 = 7; break; case 8u: v547 = 12; break; case 9u: v547 = 8; break; case 0xCu: v547 = 13; break; case 0x10u: v547 = 9; break; default: break; } v548 = v547 | 0x30000000; if ( v548 ) { v550 = *(_DWORD *)dword_BA5CD8; v592[1] = (const char *)1; v592[0] = (const char *)flt_BA5658; LODWORD(v591) = 4; v590 = (char *)(4 * v544); v551 = *(unsigned __int8 (__stdcall **)(_DWORD, int, char *, signed int, float *, signed int))(v550 + 36); HIDWORD(v589) = v548; LODWORD(v589) = *((_DWORD *)i - 2); if ( v551(LODWORD(v589), v548, v590, 4, flt_BA5658, 1) ) goto LABEL_1122; v552 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v552; v590 = "* PARSE ERROR: %s\n UserDefinedData at line %d\n Name = %s\n\t Failed to add!\n"; } else { v549 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v549; v590 = "* PARSE ERROR: %s\n UserDefinedData at line %d\n Name = %s\n\t Invalid number of floats!\n"; } sub_863460(1, 1, v590, v591, v592[0]); LABEL_1122: *(_DWORD *)::ArgList = 0; dword_BA5860 = 0; dword_BA5554 = 0; operator delete(*((void **)i - 2)); goto LABEL_468; case 576: v592[1] = *((const char **)i - 2); sub_7FF6E0(DstBuf, 0x400u, "String.............%s\n", v592[1]); dword_BA5C84 += 4; HIDWORD(v589) = *(_DWORD *)i; sub_7FF6E0(DstBuf, 0x400u, "%s\n", HIDWORD(v589)); dword_BA5C84 -= 4; if ( dword_BA5CD8 ) { v553 = *(char **)i; *(_DWORD *)i; v554 = COERCE_FLOAT(strlen(*(const char **)i)); v555 = *(const char **)i; *(_DWORD *)&ArgList[4] = *(_DWORD *)i + 1; v592[1] = (const char *)1; v592[0] = v553; v556 = *((_DWORD *)i - 2); v591 = v554; v590 = (char *)&v555[strlen(v555) + 1 - *(_DWORD *)&ArgList[4]]; if ( !(*(unsigned __int8 (__thiscall **)(int, int, signed int, char *, float, const char *, signed int))(*(_DWORD *)dword_BA5CD8 + 36))( dword_BA5CD8, v556, 805306370, v590, COERCE_FLOAT(LODWORD(v554)), v592[0], 1) ) { v557 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 2); v592[0] = (const char *)sub_8C1D70(); v591 = v557; sub_863460( 1, 1, "* PARSE ERROR: %s\n UserDefinedData at line %d\n Name = %s\n\t Failed to add!\n", v557, v592[0]); } } operator delete(*((void **)i - 2)); operator delete(*(void **)i); goto LABEL_468; case 579: v592[1] = *((const char **)i - 1); sub_7FF6E0(DstBuf, 0x400u, "UserDefinedDataBlock Start %s\n", v592[1]); v558 = dword_BA5CC0; dword_BA5C84 += 4; v559 = dword_BA5C94; v560 = dword_BA5CB0; *(_DWORD *)::ArgList = 0; dword_BA5860 = 0; dword_BA5554 = 0; if ( dword_BA5CC0 ) { v561 = *(_DWORD **)(dword_BA5CC0 + 4); dword_BA5CD4 = *(_DWORD *)(dword_BA5CC0 + 4); } else if ( dword_BA5CB0 ) { v561 = *(_DWORD **)(dword_BA5CB0 + 20); dword_BA5CD4 = *(_DWORD *)(dword_BA5CB0 + 20); } else if ( dword_BA5C94 ) { v561 = *(_DWORD **)(dword_BA5C94 + 72); dword_BA5CD4 = *(_DWORD *)(dword_BA5C94 + 72); } else { v561 = (_DWORD *)dword_BA5CD4; } if ( v561 ) goto LABEL_1140; v562 = operator new(0x1Cu); if ( !v562 ) { dword_BA5CD4 = 0; LABEL_1137: v563 = *(_DWORD *)dword_BA5C80; v592[1] = (const char *)sub_8C1D70(); v592[0] = (const char *)v563; sub_863460(1, 1, "* ALLOCATION ERROR: %s\n UserDefinedDataSet creation at line %d\n", v563, v592[1]); goto LABEL_1159; } v561 = sub_962EB0(v562); dword_BA5CD4 = (int)v561; if ( !v561 ) goto LABEL_1137; v560 = dword_BA5CB0; v558 = dword_BA5CC0; v559 = dword_BA5C94; LABEL_1140: if ( v558 ) { v564 = (int *)(v558 + 4); } else { if ( v560 ) { v565 = *(_DWORD *)(v560 + 20); v566 = v561; *(_DWORD *)&ArgList[4] = v560 + 20; if ( (_DWORD *)v565 == v561 ) goto LABEL_1160; if ( v565 && !InterlockedDecrement((volatile LONG *)(v565 + 4)) && v565 ) (**(void (__thiscall ***)(int, signed int))v565)(v565, 1); **(_DWORD **)&ArgList[4] = v566; goto LABEL_1157; } if ( !v559 ) goto LABEL_1160; v564 = (int *)(v559 + 72); } v567 = *v564; *(_DWORD *)&ArgList[4] = v564; v566 = v561; if ( (_DWORD *)v567 == v561 ) goto LABEL_1160; if ( v567 && !InterlockedDecrement((volatile LONG *)(v567 + 4)) && v567 ) (**(void (__thiscall ***)(int, signed int))v567)(v567, 1); **(_DWORD **)&ArgList[4] = v566; LABEL_1157: if ( v566 ) InterlockedIncrement(v566 + 1); LABEL_1159: v561 = (_DWORD *)dword_BA5CD4; LABEL_1160: if ( v561 ) { dword_BA5CD8 = sub_962D20(v561, *((char **)i - 1), 0); if ( dword_BA5CD8 ) { v568 = *(float *)dword_BA5C80; v592[1] = *((const char **)i - 1); v592[0] = (const char *)sub_8C1D70(); v591 = v568; sub_863460( 1, 1, "* PARSE ERROR: %s\n UserDefinedDataBlock at line %d\n Name = %s\n\t ALREADY EXISTS!\n", v568, v592[0]); } else { dword_BA5CD8 = sub_962D20((_DWORD *)dword_BA5CD4, *((char **)i - 1), 1); } } goto LABEL_468; case 580: dword_BA5C84 -= 4; v592[1] = *((const char **)i - 4); sub_7FF6E0(DstBuf, 0x400u, "UserDefinedDataBlock End %s\n", v592[1]); dword_BA5CD4 = 0; dword_BA5CD8 = 0; operator delete(*((void **)i - 4)); goto LABEL_469; default: goto LABEL_469; } } v28 = word_A31E88[v27]; if ( v28 <= 0 ) break; if ( v28 == 7 ) return 0; if ( dword_BA585C ) { v592[1] = off_A2FBC0[v23]; v592[0] = "Shifting token %s, "; v30 = (FILE *)sub_7D6CEE(); fprintf(v30 + 2, v592[0]); v21 = dword_BA5878; } if ( v21 ) dword_BA5878 = -2; i += 4; v20 = v625 == 0; *(_DWORD *)i = dword_BA587C; if ( !v20 ) v625 = (__int16 *)((char *)v625 - 1); v627 += 2; v0 = v620; v630 = (const CHAR *)v28; v2 = v627; } if ( word_A31E88[v27] && v28 != -468 ) { v624 = -v28; goto LABEL_43; } LABEL_56: v31 = 0; if ( v625 ) break; v32 = word_A31490[(_DWORD)v630]; ++dword_BA586C; v624 = v32; if ( (unsigned int)(v32 + 572) > 0x673 ) { sub_8C1D80((int)"syntax error"); goto LABEL_99; } if ( v21 > 0x21D ) v621 = 2; else v621 = (unsigned __int16)word_A2E060[v21]; *(float *)&v628 = 0.0; if ( v32 >= 0 ) { v33 = 0; } else { v33 = -v32; if ( -v32 >= 512 ) goto LABEL_68; } v625 = &word_A32700[v33 + v32]; do { if ( *v625 == v33 && v33 != 1 ) { v34 = off_A2FBC0[v33]; v35 = &off_A2FBC0[v33][strlen(off_A2FBC0[v33]) + 1]; v32 = v624; ++v628; v31 += v35 - v34 + 14; } ++v625; ++v33; } while ( v33 < 512 ); LABEL_68: v36 = alloca((int)&off_A2FBC0[v621][strlen(off_A2FBC0[v621]) + strlen("syntax error, unexpected ") + 1 + v31 - (_DWORD)off_A2FBC0[v621]]); v37 = (int *)v593; v625 = (__int16 *)v593; if ( !v593 ) { sub_8C1D80((int)"syntax error; also virtual memory exhausted"); goto LABEL_99; } do { v38 = *((_BYTE *)v37 + "syntax error, unexpected " - (char *)v593); *(_BYTE *)v37 = v38; v37 = (int *)((char *)v37 + 1); } while ( v38 ); v39 = off_A2FBC0[v621]; v40 = (char *)v37 - 1; do { v41 = *v39; *v40++ = *v39++; } while ( v41 ); v42 = (int)(v40 - 1); if ( (signed int)v628 < 5 ) { *(float *)&v628 = 0.0; if ( v32 >= 0 ) { v43 = 0; LABEL_75: v44 = &word_A32700[v43 + v32]; do { if ( *v44 == v43 && v43 != 1 ) { v45 = ", expecting "; if ( *(float *)&v628 != 0.0 ) v45 = " or "; v46 = (_BYTE *)v42; v47 = (int)&v45[-v42]; do { v48 = v46[v47]; *v46++ = v48; } while ( v48 ); v49 = off_A2FBC0[v43]; v50 = v46 - 1; do { v51 = *v49; *v50++ = *v49++; } while ( v51 ); v42 = (int)(v50 - 1); ++v628; } ++v43; ++v44; } while ( v43 < 512 ); goto LABEL_86; } v43 = -v32; if ( -v32 < 512 ) goto LABEL_75; } LABEL_86: sub_8C1D80((int)v625); LABEL_99: v625 = (__int16 *)3; while ( 1 ) { v55 = word_A31490[(_DWORD)v630]; if ( v55 != -573 ) { v56 = v55 + 1; if ( v56 <= 0x438 && word_A32700[v56] == 1 ) { v57 = word_A31E88[v56]; if ( v57 > 0 ) break; } } if ( v627 == (char *)v622 ) return 1; if ( dword_BA585C ) { v592[1] = "Error: popping"; v592[0] = "%s "; v58 = (FILE *)sub_7D6CEE(); fprintf(v58 + 2, v592[0]); v59 = (unsigned __int16)word_A32F78[*(signed __int16 *)v627]; v60 = (FILE *)(sub_7D6CEE() + 16); if ( v59 >= 289 ) { v592[1] = off_A2FBC0[v59]; v592[0] = "nterm %s ("; } else { v592[1] = off_A2FBC0[v59]; v592[0] = "token %s ("; } fprintf(v60, v592[0], v592[1]); fprintf(v60, ")"); v592[1] = "\n"; v61 = (FILE *)sub_7D6CEE(); fprintf(v61 + 2, v592[1]); } v62 = *((signed __int16 *)v627 - 1); v63 = (unsigned int)(v627 - 2); i -= 4; v627 -= 2; v630 = (const CHAR *)v62; if ( dword_BA585C ) sub_8B9D80(v622, v63); } if ( v57 == 7 ) return 0; if ( dword_BA585C ) { v592[1] = "Shifting error token, "; v64 = (FILE *)sub_7D6CEE(); fprintf(v64 + 2, v592[1]); } v0 = v620; i += 4; v627 += 2; v630 = (const CHAR *)v57; v2 = v627; } if ( v625 != (__int16 *)3 ) goto LABEL_99; if ( v21 ) { if ( dword_BA585C ) { v592[1] = "Error: discarding"; v592[0] = "%s "; v52 = (FILE *)sub_7D6CEE(); fprintf(v52 + 2, v592[0]); v53 = (FILE *)(sub_7D6CEE() + 16); if ( v23 >= 289 ) { v592[1] = off_A2FBC0[v23]; v592[0] = "nterm %s ("; } else { v592[1] = off_A2FBC0[v23]; v592[0] = "token %s ("; } fprintf(v53, v592[0], v592[1]); fprintf(v53, ")"); v592[1] = "\n"; v54 = (FILE *)sub_7D6CEE(); fprintf(v54 + 2, v592[1]); } dword_BA5878 = -2; goto LABEL_99; } for ( v627 -= 2; v627 > (char *)v622; v627 -= 2 ) { if ( dword_BA585C ) { v592[1] = "Error: popping"; v592[0] = "%s "; v571 = (FILE *)sub_7D6CEE(); fprintf(v571 + 2, v592[0]); v572 = (unsigned __int16)word_A32F78[*(signed __int16 *)v627]; v573 = (FILE *)(sub_7D6CEE() + 16); if ( v572 >= 289 ) { v592[1] = off_A2FBC0[v572]; v592[0] = "nterm %s ("; } else { v592[1] = off_A2FBC0[v572]; v592[0] = "token %s ("; } fprintf(v573, v592[0], v592[1]); fprintf(v573, ")"); v592[1] = "\n"; v574 = (FILE *)sub_7D6CEE(); fprintf(v574 + 2, v592[1]); } } return 1; } // 402390: using guessed type _DWORD __stdcall unknown_libname_1(_DWORD); // 8B9C90: using guessed type int __thiscall unknown_libname_33(_DWORD); // 965040: using guessed type _DWORD __stdcall unknown_libname_39(_DWORD); // A2FBC0: using guessed type char *off_A2FBC0[511]; // A30A98: using guessed type __int16 word_A30A98[]; // A32700: using guessed type __int16 word_A32700[]; // AC1554: using guessed type int (__thiscall **off_AC1554)(void *, char); // AC1558: using guessed type int dword_AC1558; // AC155C: using guessed type int dword_AC155C; // AC1560: using guessed type int dword_AC1560; // BA5554: using guessed type int dword_BA5554; // BA5558: using guessed type float flt_BA5558[]; // BA555C: using guessed type float flt_BA555C; // BA5560: using guessed type float flt_BA5560; // BA5564: using guessed type float flt_BA5564; // BA5658: using guessed type float flt_BA5658[]; // BA565C: using guessed type float flt_BA565C; // BA5660: using guessed type float flt_BA5660; // BA5664: using guessed type float flt_BA5664; // BA5668: using guessed type float flt_BA5668; // BA566C: using guessed type float flt_BA566C; // BA5670: using guessed type float flt_BA5670; // BA5674: using guessed type float flt_BA5674; // BA5678: using guessed type float flt_BA5678; // BA567C: using guessed type float flt_BA567C; // BA5680: using guessed type float flt_BA5680; // BA5684: using guessed type float flt_BA5684; // BA5688: using guessed type float flt_BA5688; // BA568C: using guessed type float flt_BA568C; // BA5690: using guessed type float flt_BA5690; // BA5694: using guessed type float flt_BA5694; // BA5758: using guessed type float flt_BA5758[]; // BA575C: using guessed type float flt_BA575C; // BA5760: using guessed type float flt_BA5760; // BA5764: using guessed type float flt_BA5764; // BA5858: using guessed type char byte_BA5858; // BA585C: using guessed type int dword_BA585C; // BA5860: using guessed type int dword_BA5860; // BA5864: using guessed type int dword_BA5864; // BA5868: using guessed type int dword_BA5868; // BA586C: using guessed type int dword_BA586C; // BA5878: using guessed type int dword_BA5878; // BA587C: using guessed type int dword_BA587C; // BA5C84: using guessed type int dword_BA5C84; // BA5C8C: using guessed type char byte_BA5C8C; // BA5C8D: using guessed type char byte_BA5C8D; // BA5C8E: using guessed type char byte_BA5C8E; // BA5C8F: using guessed type char byte_BA5C8F; // BA5C90: using guessed type int dword_BA5C90; // BA5C94: using guessed type int dword_BA5C94; // BA5C98: using guessed type int dword_BA5C98; // BA5C9C: using guessed type int dword_BA5C9C; // BA5CA0: using guessed type int dword_BA5CA0; // BA5CA4: using guessed type int dword_BA5CA4; // BA5CB0: using guessed type int dword_BA5CB0; // BA5CB4: using guessed type int dword_BA5CB4; // BA5CB8: using guessed type int dword_BA5CB8; // BA5CBC: using guessed type int dword_BA5CBC; // BA5CC0: using guessed type int dword_BA5CC0; // BA5CC4: using guessed type int dword_BA5CC4; // BA5CD0: using guessed type char byte_BA5CD0; // BA5CD4: using guessed type int dword_BA5CD4; // BA5CD8: using guessed type int dword_BA5CD8; // BA6EFC: using guessed type int dword_BA6EFC; //----- (008C1AC0) -------------------------------------------------------- signed int __cdecl sub_8C1AC0(char *Filename) { _DWORD *v1; // eax _DWORD *v2; // eax void *v3; // esi _DWORD *v5; // esi _DWORD *v6; // edi void *v7; // esi int v8; // edx void *v9; // esi sub_8C1D60(); v1 = operator new(0x10u); if ( v1 ) v2 = sub_8C1C50(v1); else v2 = 0; dword_BA587C = 0; LOWORD(dword_BA587C) = 0; dword_BA5C80 = v2; LOBYTE(dword_BA587C) = 0; if ( !Filename ) { v3 = v2; if ( v2 ) { sub_8C1C60((void **)v2); operator delete(v3); } sub_7FF6E0(DstBuf, 0x400u, "err: need input file\n"); return -1; } v5 = (_DWORD *)dword_AC1558; if ( dword_AC1558 ) { do { v6 = (_DWORD *)v5[2]; v5 = (_DWORD *)*v5; if ( v6 ) { sub_8B9CA0(v6); operator delete(v6); } } while ( v5 ); } sub_521E30(&off_AC1554); dword_BA5C90 = 0; if ( sub_8C1C80((char **)dword_BA5C80, Filename) ) { v7 = dword_BA5C80; if ( dword_BA5C80 ) { sub_8C1C60((void **)dword_BA5C80); operator delete(v7); } sub_7FF6E0(DstBuf, 0x400u, "err: file not found!\n"); return -1; } *(_DWORD *)dword_BA5CDC = -1; sub_8BB120(); v8 = *(_DWORD *)dword_BA5CDC; if ( *(_DWORD *)dword_BA5CDC != -1 ) { printf("*FAILURE! %d errors found.\n", ++*(_DWORD *)dword_BA5CDC); sub_7FF6E0(DstBuf, 0x400u, "*FAILURE! %d errors found.\n", *(_DWORD *)dword_BA5CDC); sub_863460( 1, 0, "* PARSE ERROR: %s\n FAILED - %d errors found\n", *(_DWORD *)dword_BA5C80, *(_DWORD *)dword_BA5CDC); v8 = *(_DWORD *)dword_BA5CDC; } v9 = dword_BA5C80; if ( dword_BA5C80 ) { sub_8C1C60((void **)dword_BA5C80); operator delete(v9); v8 = *(_DWORD *)dword_BA5CDC; } dword_BA5C80 = 0; return v8 != -1 ? v8 : 0; } // AC1554: using guessed type int (__thiscall **off_AC1554)(void *, char); // AC1558: using guessed type int dword_AC1558; // BA587C: using guessed type int dword_BA587C; // BA5C90: using guessed type int dword_BA5C90; //----- (008C1C50) -------------------------------------------------------- _DWORD *__thiscall sub_8C1C50(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = 0; this[3] = 0; return result; } //----- (008C1C60) -------------------------------------------------------- void __thiscall sub_8C1C60(void **this) { void **v1; // esi v1 = this; operator delete(this[1]); operator delete(*v1); } //----- (008C1C80) -------------------------------------------------------- int __thiscall sub_8C1C80(char **this, char *Filename) { char **v2; // esi unsigned int v3; // kr00_4 char *v4; // eax FILE *v5; // ST14_4 char *v6; // eax FILE *v7; // ST0C_4 size_t v8; // ST08_4 FILE *File; // [esp+8h] [ebp-4h] v2 = this; File = 0; if ( fopen_s(&File, Filename, "rb") || !File ) return 1; v3 = strlen(Filename); v4 = (char *)operator new(v3 + 1); *v2 = v4; strcpy_s(v4, v3 + 1, Filename); fseek(File, 0, 2); v2[2] = (char *)ftell(File); v5 = File; v2[3] = 0; fseek(v5, 0, 0); v6 = (char *)operator new((size_t)(v2[2] + 1)); v7 = File; v8 = (size_t)v2[2]; v2[1] = v6; fread(v6, 1u, v8, v7); v2[2][(_DWORD)v2[1]] = 0; fclose(File); return 0; } //----- (008C1D60) -------------------------------------------------------- void sub_8C1D60() { dword_AC1644 = 1; } // AC1644: using guessed type int dword_AC1644; //----- (008C1D70) -------------------------------------------------------- int sub_8C1D70() { return dword_AC1644; } // AC1644: using guessed type int dword_AC1644; //----- (008C1D80) -------------------------------------------------------- int __cdecl sub_8C1D80(int a1) { int result; // eax CHAR OutputString; // [esp+4h] [ebp-404h] ++*(_DWORD *)dword_BA5CDC; sub_7FF6E0( &OutputString, 0x400u, "* ERROR: Invalid identifier '%s' at line %d (%s)\n", dword_BA5CF0, dword_AC1644, a1); printf(&OutputString); OutputDebugStringA(&OutputString); if ( dword_BA5C80 ) result = sub_863460( 1, 0, "* ERROR: %s\nInvalid identifier '%s' at line %d (%s)\n", *(_DWORD *)dword_BA5C80, dword_BA5CF0, dword_AC1644, a1); else result = sub_863460( 1, 0, "* ERROR: %s\nInvalid identifier '%s' at line %d (%s)\n", "*** Unknown File ***", dword_BA5CF0, dword_AC1644, a1); return result; } // AC1644: using guessed type int dword_AC1644; //----- (008C1E30) -------------------------------------------------------- signed int sub_8C1E30() { signed int result; // eax char *i; // esi unsigned __int8 v2; // bl signed int v3; // ecx int v4; // edx result = dword_BA5D04; for ( i = dword_BA5CF0; (unsigned int)i < dword_BA5D00; ++i ) { if ( *i ) v2 = byte_A36C90[4 * (unsigned __int8)*i]; else v2 = 1; v3 = result; if ( word_A35D78[result] ) { dword_BA5CF8 = result; dword_BA5CE8 = (int)i; } v4 = v2; if ( word_A3C420[v2 + word_A37178[v3]] != result ) { do { result = word_A380A0[v3]; if ( result >= 1932 ) v2 = byte_A37090[4 * v4]; v3 = result; v4 = v2; } while ( word_A3C420[v2 + word_A37178[result]] != result ); } result = word_A38FC8[v2 + word_A37178[result]]; } return result; } // A380A0: using guessed type __int16 word_A380A0[]; // A3C420: using guessed type __int16 word_A3C420[]; // BA5CE8: using guessed type int dword_BA5CE8; // BA5CF8: using guessed type int dword_BA5CF8; // BA5D00: using guessed type int dword_BA5D00; // BA5D04: using guessed type int dword_BA5D04; //----- (008C1F00) -------------------------------------------------------- int __usercall sub_8C1F00@(signed int a1@) { signed int v1; // ecx unsigned __int8 v2; // dl int v3; // ecx v1 = a1; v2 = 1; if ( word_A35D78[a1] ) { dword_BA5CF8 = a1; dword_BA5CE8 = dword_BA5D00; } if ( word_A3C422[word_A37178[v1]] != a1 ) { do { a1 = word_A380A0[v1]; if ( a1 >= 1932 ) v2 = byte_A37090[4 * v2]; v1 = a1; } while ( word_A3C420[v2 + word_A37178[a1]] != a1 ); } v3 = word_A38FC8[v2 + word_A37178[a1]]; return v3 != 1931 ? v3 : 0; } // A380A0: using guessed type __int16 word_A380A0[]; // A3C420: using guessed type __int16 word_A3C420[]; // BA5CE8: using guessed type int dword_BA5CE8; // BA5CF8: using guessed type int dword_BA5CF8; // BA5D00: using guessed type int dword_BA5D00; //----- (008C1FA0) -------------------------------------------------------- char *__cdecl sub_8C1FA0(int *a1) { char *result; // eax _BYTE *v2; // edx int v3; // edx int *v4; // ecx char v5; // dl result = (char *)a1; if ( a1 ) { v2 = (_BYTE *)a1[1]; a1[4] = 0; *v2 = 0; *(_BYTE *)(a1[1] + 1) = 0; v3 = a1[1]; a1[9] = 0; v4 = (int *)dword_BA5CFC; a1[2] = v3; a1[7] = 1; if ( a1 == v4 ) { dword_BA5CEC = v4[4]; result = (char *)v4[2]; dword_BA5CF0 = result; dword_BA5D08 = *v4; v5 = *result; dword_BA5D00 = (int)result; byte_BA5CE0 = v5; } } return result; } // BA5CE0: using guessed type char byte_BA5CE0; // BA5CEC: using guessed type int dword_BA5CEC; // BA5D00: using guessed type int dword_BA5D00; // BA5D08: using guessed type int dword_BA5D08; //----- (008C2000) -------------------------------------------------------- void __usercall __noreturn sub_8C2000(int a1@) { int v1; // ST08_4 FILE *v2; // eax v1 = a1; v2 = (FILE *)sub_7D6CEE(); fprintf(v2 + 2, "%s\n", v1); exit(2); } //----- (008C2020) -------------------------------------------------------- void *sub_8C2020() { int v0; // ecx char v1; // dl int v2; // edi void *result; // eax int v4; // esi char v5; // cl int v6; // ecx v0 = *((_DWORD *)dword_BA5C80 + 3); v1 = *(_BYTE *)(v0 + *((_DWORD *)dword_BA5C80 + 1)); *((_DWORD *)dword_BA5C80 + 3) = v0 + 1; if ( v1 == -1 ) { LABEL_10: printf("err: EOF in comment!\n"); exit(-1); } v2 = dword_AC1644; while ( 1 ) { if ( v1 == 10 ) ++v2; result = dword_BA5C80; v4 = *((_DWORD *)dword_BA5C80 + 3); v5 = *(_BYTE *)(v4 + *((_DWORD *)dword_BA5C80 + 1)); *((_DWORD *)dword_BA5C80 + 3) = v4 + 1; if ( v5 == -1 ) { LABEL_9: dword_AC1644 = v2; goto LABEL_10; } if ( v1 == 42 && v5 == 47 ) break; v6 = --*((_DWORD *)dword_BA5C80 + 3); v1 = *(_BYTE *)(v6 + *((_DWORD *)dword_BA5C80 + 1)); *((_DWORD *)dword_BA5C80 + 3) = v6 + 1; if ( v1 == -1 ) goto LABEL_9; } dword_AC1644 = v2; return result; } // AC1644: using guessed type int dword_AC1644; //----- (008C20B0) -------------------------------------------------------- int __cdecl sub_8C20B0(const char *a1) { unsigned int v1; // eax char v2; // cl int v3; // eax int v4; // esi signed int v5; // edx int v6; // ecx if ( !a1 || !strcmp(a1, &byte_9A8050) ) return 0; v1 = strlen(a1) - 1; v2 = a1[v1]; v3 = (int)&a1[v1]; v4 = 0; v5 = 1; if ( v2 != 120 ) { while ( 1 ) { if ( v2 == 88 ) return v4; if ( v2 == 97 || v2 == 65 ) break; if ( v2 == 98 || v2 == 66 ) { v4 += 11 * v5; } else if ( v2 == 99 || v2 == 67 ) { v4 += 12 * v5; } else { if ( v2 != 100 && v2 != 68 ) { if ( v2 != 101 && v2 != 69 ) { if ( v2 == 102 || v2 == 70 ) v4 += 15 * v5; else v4 += v5 * (v2 - 48); goto LABEL_25; } v6 = 7 * v5; goto LABEL_24; } v4 += 13 * v5; } LABEL_25: v2 = *(_BYTE *)(v3-- - 1); v5 *= 16; if ( v2 == 120 ) return v4; } v6 = 5 * v5; LABEL_24: v4 += 2 * v6; goto LABEL_25; } return v4; } //----- (008C21D0) -------------------------------------------------------- void sub_8C21D0() { void **v0; // esi bool v1; // zf v0 = (void **)dword_BA5CFC; if ( dword_BA5CFC ) { v1 = *((_DWORD *)dword_BA5CFC + 5) == 0; dword_BA5CFC = 0; if ( !v1 ) free(v0[1]); free(v0); } } //----- (008C2210) -------------------------------------------------------- int *__cdecl sub_8C2210(int a1, int a2) { int *v2; // esi void *v3; // eax v2 = (int *)malloc(0x28u); if ( !v2 ) sub_8C2000((int)"out of dynamic memory in yy_create_buffer()"); v2[3] = a2; v3 = malloc(a2 + 2); v2[1] = (int)v3; if ( !v3 ) sub_8C2000((int)"out of dynamic memory in yy_create_buffer()"); v2[5] = 1; sub_8C1FA0(v2); *v2 = a1; v2[8] = 1; v2[6] = 1; return v2; } //----- (008C2280) -------------------------------------------------------- char *__cdecl sub_8C2280(int a1) { int *v1; // esi char *result; // eax int v3; // edx int v4; // ecx v1 = (int *)dword_BA5CFC; if ( !dword_BA5CFC ) { v1 = sub_8C2210(dword_BA5D08, 0x4000); dword_BA5CFC = v1; } sub_8C1FA0(v1); *v1 = a1; v1[8] = 1; v1[6] = 1; result = (char *)v1[2]; v3 = v1[4]; dword_BA5CF0 = result; v4 = *v1; dword_BA5CEC = v3; dword_BA5D08 = v4; LOBYTE(v3) = *result; dword_BA5D00 = (int)result; byte_BA5CE0 = v3; return result; } // BA5CE0: using guessed type char byte_BA5CE0; // BA5CEC: using guessed type int dword_BA5CEC; // BA5D00: using guessed type int dword_BA5D00; // BA5D08: using guessed type int dword_BA5D08; //----- (008C22F0) -------------------------------------------------------- char *sub_8C22F0() { return sub_8C2280(dword_BA5D08); } // BA5D08: using guessed type int dword_BA5D08; //----- (008C2300) -------------------------------------------------------- int sub_8C2300() { char *v0; // edx _DWORD *v1; // esi _BYTE *v2; // ecx int v3; // eax int v5; // edi signed int v6; // eax unsigned int v7; // ecx void *v8; // edx int v9; // ebx int v10; // eax char *v11; // eax int v12; // edx int v13; // eax int v14; // ebx char v15; // dl signed int v16; // ebx int v17; // eax int v18; // [esp+Ch] [ebp-4h] v0 = dword_BA5CF0; v1 = dword_BA5CFC; v2 = (_BYTE *)*((_DWORD *)dword_BA5CFC + 1); v3 = dword_BA5D00; if ( dword_BA5D00 > (unsigned int)&v2[dword_BA5CEC + 1] ) sub_8C2000((int)"fatal flex scanner internal error--end of buffer missed"); if ( !*((_DWORD *)dword_BA5CFC + 8) ) return (dword_BA5D00 - (_DWORD)dword_BA5CF0 != 1) + 1; v5 = dword_BA5D00 - (_DWORD)dword_BA5CF0 - 1; if ( v5 > 0 ) { v18 = dword_BA5D00 - (_DWORD)dword_BA5CF0 - 1; do { *v2++ = *v0++; --v18; } while ( v18 ); } if ( v1[9] == 2 ) { v6 = 0; dword_BA5CEC = 0; v1[4] = 0; LABEL_24: if ( v5 ) { v16 = 2; v1[9] = 2; } else { v16 = 1; sub_8C2280(dword_BA5D08); v1 = dword_BA5CFC; v6 = dword_BA5CEC; } goto LABEL_28; } v7 = v1[3]; if ( v1[3] - v5 - 1 <= 0 ) { while ( 1 ) { v8 = (void *)v1[1]; v9 = v3 - (_DWORD)v8; if ( !v1[5] ) break; v10 = 2 * v7; if ( (signed int)(2 * v7) <= 0 ) v10 = v7 + (v7 >> 3); v1[3] = v10; v11 = (char *)realloc(v8, v10 + 2); v1[1] = v11; if ( !v11 ) goto LABEL_19; v7 = v1[3]; v3 = (int)&v11[v9]; v12 = v1[3] - v5 - 1; dword_BA5D00 = v3; if ( v12 > 0 ) goto LABEL_16; } v1[1] = 0; LABEL_19: sub_8C2000((int)"fatal error - scanner input buffer overflow"); } LABEL_16: v13 = v1[1]; if ( *((_DWORD *)dword_BA5C80 + 2) > *((_DWORD *)dword_BA5C80 + 3) ) { v14 = *((_DWORD *)dword_BA5C80 + 3); v15 = *(_BYTE *)(v14 + *((_DWORD *)dword_BA5C80 + 1)); *((_DWORD *)dword_BA5C80 + 3) = v14 + 1; if ( v15 == -1 ) { v6 = 0; } else { *(_BYTE *)(v13 + v5) = v15; *(_BYTE *)(v13 + v5 + 1) = 0; v6 = 1; } } else { v6 = 0; } dword_BA5CEC = v6; v1[4] = v6; if ( !v6 ) goto LABEL_24; v16 = 0; LABEL_28: v17 = v5 + v6; *(_BYTE *)(v17 + v1[1]) = 0; *(_BYTE *)(v17 + v1[1] + 1) = 0; dword_BA5CEC = v17; dword_BA5CF0 = (char *)v1[1]; return v16; } // BA5CEC: using guessed type int dword_BA5CEC; // BA5D00: using guessed type int dword_BA5D00; // BA5D08: using guessed type int dword_BA5D08; //----- (008C2470) -------------------------------------------------------- signed int sub_8C2470() { int *v0; // ebx int v1; // ecx char v2; // dl char *v3; // edi signed int v4; // esi int v5; // ecx signed int v6; // eax int v7; // ecx int v8; // edx int v9; // eax const char *v10; // ecx int v11; // esi int v12; // eax int v13; // eax char *v14; // edi signed int v15; // eax int v16; // eax char *v17; // ebx signed int v18; // eax int v19; // edi char v20; // al signed int result; // eax int v22; // edx __int16 v23; // di signed int v24; // esi char v25; // al char v26; // bl int v27; // eax rsize_t v28; // esi rsize_t v29; // esi unsigned int v30; // ecx rsize_t v31; // esi int v32; // eax char *v33; // [esp+Ch] [ebp-2Ch] int i; // [esp+Ch] [ebp-2Ch] unsigned __int8 v35; // [esp+13h] [ebp-25h] char v36; // [esp+13h] [ebp-25h] char v37[32]; // [esp+14h] [ebp-24h] if ( !dword_AC1640 ) goto LABEL_11; dword_AC1640 = 0; if ( !dword_BA5D04 ) dword_BA5D04 = 1; if ( !dword_BA5D08 ) dword_BA5D08 = (int)sub_7D6CEE(); if ( !dword_BA5D0C ) dword_BA5D0C = (FILE *)(sub_7D6CEE() + 8); v0 = (int *)dword_BA5CFC; if ( !dword_BA5CFC ) { v0 = sub_8C2210(dword_BA5D08, 0x4000); dword_BA5CFC = v0; } v1 = v0[4]; dword_BA5CF0 = (char *)v0[2]; dword_BA5D08 = *v0; v2 = *dword_BA5CF0; dword_BA5CEC = v1; dword_BA5D00 = (int)dword_BA5CF0; while ( 1 ) { LABEL_12: v3 = (char *)dword_BA5D00; v4 = dword_BA5D04; *(_BYTE *)dword_BA5D00 = v2; v33 = v3; do { LABEL_13: LOBYTE(v5) = byte_A36C90[4 * (unsigned __int8)*v3]; v6 = v4; v35 = byte_A36C90[4 * (unsigned __int8)*v3]; if ( word_A35D78[v4] ) { dword_BA5CF8 = v4; dword_BA5CE8 = (int)v3; } v5 = (unsigned __int8)v5; if ( word_A3C420[(unsigned __int8)v5 + word_A37178[v6]] != v4 ) { do { v4 = word_A380A0[v6]; if ( v4 >= 1932 ) v35 = byte_A37090[4 * v5]; v5 = v35; v6 = v4; } while ( word_A3C420[v35 + word_A37178[v4]] != v4 ); } v4 = word_A38FC8[v35 + word_A37178[v4]]; ++v3; } while ( word_A37178[v4] != 6641 ); LABEL_20: v7 = dword_BA5CF8; v8 = dword_BA5CE8; while ( 2 ) { v9 = word_A35D78[v4]; if ( !word_A35D78[v4] ) { v9 = word_A35D78[v7]; v3 = (char *)v8; } dword_BA5CF0 = v33; dword_BA5CE4 = v3 - v33; v2 = *v3; *v3 = 0; v10 = dword_BA5CF0; byte_BA5CE0 = v2; dword_BA5D00 = (int)v3; LABEL_24: switch ( v9 ) { case 0: v7 = dword_BA5CF8; *v3 = v2; v8 = dword_BA5CE8; v3 = (char *)dword_BA5CE8; v4 = v7; continue; case 1: case 304: goto LABEL_12; case 2: dword_BA587C = atoi(v10); return 278; case 3: *(float *)&dword_BA587C = atof(v10); return 277; case 4: dword_BA587C = sub_8C20B0(v10); return 276; case 5: v22 = 0; v23 = 0; v24 = 1; v36 = 0; for ( i = 0; v10[v24]; ++v24 ) { v25 = v10[v24]; v26 = 0; if ( v25 == 46 ) v26 = 1; else v37[v22++] = v25; if ( !v10[v24 + 1] || v26 ) { v37[v22] = 0; v27 = atoi(v37); if ( v36 ) i = v27; else v23 = v27; v10 = dword_BA5CF0; v36 = 1; v22 = 0; } } result = 282; dword_BA587C = i | ((*(_DWORD *)&v23 | 0xFFFFFE00) << 8); return result; case 6: do { v19 = *((_DWORD *)dword_BA5C80 + 3); v20 = *(_BYTE *)(v19 + *((_DWORD *)dword_BA5C80 + 1)); *((_DWORD *)dword_BA5C80 + 3) = v19 + 1; } while ( v20 != 10 && v20 != -1 ); goto LABEL_39; case 7: sub_8C2020(); goto LABEL_11; case 8: return 260; case 9: return 261; case 10: return 262; case 11: return 263; case 12: return 264; case 13: return 265; case 14: return 266; case 15: return 267; case 16: return 268; case 17: return 269; case 18: return 270; case 19: return 271; case 20: return 272; case 21: return 273; case 22: return 274; case 23: return 275; case 24: return 283; case 25: return 301; case 26: return 302; case 27: return 303; case 28: return 304; case 29: case 30: return 305; case 31: return 306; case 32: return 307; case 33: case 34: return 308; case 35: case 36: return 309; case 37: case 38: return 310; case 39: return 311; case 40: return 312; case 41: return 313; case 42: return 314; case 43: return 315; case 44: return 316; case 45: return 317; case 46: return 318; case 47: return 319; case 48: return 320; case 49: return 321; case 50: return 322; case 51: return 323; case 52: return 324; case 53: return 325; case 54: return 326; case 55: return 327; case 56: case 57: return 328; case 58: return 329; case 59: return 330; case 60: return 331; case 61: return 332; case 62: return 333; case 63: case 64: return 334; case 65: case 66: return 335; case 67: case 68: return 336; case 69: case 70: return 337; case 71: case 72: return 338; case 73: return 339; case 74: return 340; case 75: return 341; case 76: return 342; case 77: return 343; case 78: case 79: return 344; case 80: case 81: return 345; case 82: case 83: return 346; case 84: return 347; case 85: case 86: return 348; case 87: return 349; case 88: return 350; case 89: return 351; case 90: return 352; case 91: return 353; case 92: return 354; case 93: return 355; case 94: return 356; case 95: return 357; case 96: return 358; case 97: return 359; case 98: return 360; case 99: return 361; case 100: return 362; case 101: return 363; case 102: return 364; case 103: return 365; case 104: return 366; case 105: return 367; case 106: return 368; case 107: return 369; case 108: return 370; case 109: return 371; case 110: return 284; case 111: return 285; case 112: return 286; case 113: return 287; case 114: return 288; case 115: return 289; case 116: return 290; case 117: return 291; case 118: return 292; case 119: return 293; case 120: return 294; case 121: return 295; case 122: return 296; case 123: return 297; case 124: return 298; case 125: return 299; case 126: return 300; case 127: return 531; case 128: return 532; case 129: return 533; case 130: return 534; case 131: return 535; case 132: return 536; case 133: return 537; case 134: return 538; case 135: return 539; case 136: return 401; case 137: return 402; case 138: return 403; case 139: return 404; case 140: return 405; case 141: return 406; case 142: return 407; case 143: return 408; case 144: return 409; case 145: return 410; case 146: return 411; case 147: return 412; case 148: return 413; case 149: return 414; case 150: return 415; case 151: return 416; case 152: return 417; case 153: return 418; case 154: return 419; case 155: return 420; case 156: return 421; case 157: return 422; case 158: return 423; case 159: case 160: return 424; case 161: case 162: return 425; case 163: return 426; case 164: return 427; case 165: return 428; case 166: return 429; case 167: return 430; case 168: return 431; case 169: return 432; case 170: return 433; case 171: return 540; case 172: return 434; case 173: return 435; case 174: return 436; case 175: return 437; case 176: return 438; case 177: return 439; case 178: return 440; case 179: return 441; case 180: return 442; case 181: return 443; case 182: return 444; case 183: return 445; case 184: return 446; case 185: case 186: return 447; case 187: return 448; case 188: return 449; case 189: return 450; case 190: return 451; case 191: return 452; case 192: return 453; case 193: return 454; case 194: return 455; case 195: return 456; case 196: return 457; case 197: return 458; case 198: return 459; case 199: return 460; case 200: return 461; case 201: case 202: return 462; case 203: return 463; case 204: return 464; case 205: return 465; case 206: return 466; case 207: return 467; case 208: return 468; case 209: return 469; case 210: return 470; case 211: return 471; case 212: return 472; case 213: return 473; case 214: return 474; case 215: return 475; case 216: return 476; case 217: return 477; case 218: return 478; case 219: return 479; case 220: return 480; case 221: return 481; case 222: return 482; case 223: return 483; case 224: return 484; case 225: return 485; case 226: return 486; case 227: return 487; case 228: return 488; case 229: return 489; case 230: return 490; case 231: return 491; case 232: return 492; case 233: return 493; case 234: return 494; case 235: return 495; case 236: return 496; case 237: return 497; case 238: return 498; case 239: return 499; case 240: return 500; case 241: return 501; case 242: return 502; case 243: return 503; case 244: return 504; case 245: return 505; case 246: return 506; case 247: return 507; case 248: return 508; case 249: return 509; case 250: return 510; case 251: return 511; case 252: return 512; case 253: return 513; case 254: return 514; case 255: return 515; case 256: return 516; case 257: return 517; case 258: return 518; case 259: return 519; case 260: return 520; case 261: return 523; case 262: return 521; case 263: return 522; case 264: return 524; case 265: return 525; case 266: return 526; case 267: return 527; case 268: return 528; case 269: return 529; case 270: return 530; case 271: return 372; case 272: return 373; case 273: return 374; case 274: return 375; case 275: return 376; case 276: return 377; case 277: return 541; case 278: return 378; case 279: return 380; case 280: return 386; case 281: return 387; case 282: return 388; case 283: return 389; case 284: return 379; case 285: return 381; case 286: return 382; case 287: return 383; case 288: return 384; case 289: return 385; case 290: return 390; case 291: return 391; case 292: return 392; case 293: return 393; case 294: return 394; case 295: return 395; case 296: return 396; case 297: return 397; case 298: return 398; case 299: return 399; case 300: return 400; case 301: LOBYTE(dword_BA587C) = 1; return 281; case 302: LOBYTE(dword_BA587C) = 0; return 281; case 303: LABEL_39: ++dword_AC1644; goto LABEL_12; case 305: v28 = strlen(v10); dword_BA587C = (int)operator new(v28 + 1); strncpy_s((char *)dword_BA587C, v28 + 1, dword_BA5CF0, v28); *(_BYTE *)(dword_BA587C + v28) = 0; return 279; case 306: v29 = strlen(v10); dword_BA587C = (int)operator new(v29 + 1); strncpy_s((char *)dword_BA587C, v29 + 1, dword_BA5CF0, v29); *(_BYTE *)(dword_BA587C + v29) = 0; return 259; case 307: v30 = strlen(v10); v31 = v30 - 2; v32 = v30 - 2; if ( (signed int)(v30 - 2) <= 6144 ) v32 = 6144; dword_BA587C = (int)operator new(v32 + 1); strncpy_s((char *)dword_BA587C, v31 + 1, dword_BA5CF0 + 1, v31); *(_BYTE *)(dword_BA587C + v31) = 0; return 280; case 308: fwrite(v10, dword_BA5CE4, 1u, dword_BA5D0C); goto LABEL_11; case 309: v11 = v3 - v10; *v3 = v2; if ( !v0[9] ) { dword_BA5CEC = v0[4]; *v0 = dword_BA5D08; v0[9] = 1; } if ( dword_BA5D00 <= (unsigned int)(dword_BA5CEC + v0[1]) ) { v14 = dword_BA5CF0; dword_BA5D00 = (int)&dword_BA5CF0[v11 - 1]; v15 = sub_8C1E30(); v4 = v15; v16 = sub_8C1F00(v15); v33 = v14; v3 = (char *)dword_BA5D00; if ( !v16 ) goto LABEL_20; v3 = (char *)(dword_BA5D00 + 1); v4 = v16; goto LABEL_13; } v12 = sub_8C2300(); if ( !v12 ) { v17 = dword_BA5CF0; v3 = &dword_BA5CF0[v11 - 1]; dword_BA5D00 = (int)&dword_BA5CF0[v11 - 1]; v18 = sub_8C1E30(); v33 = v17; v0 = (int *)dword_BA5CFC; v4 = v18; goto LABEL_13; } v13 = v12 - 1; if ( !v13 ) { v10 = dword_BA5CF0; v0 = (int *)dword_BA5CFC; dword_BA5CF4 = 0; v2 = byte_BA5CE0; dword_BA5D00 = (int)dword_BA5CF0; v9 = (dword_BA5D04 - 1) / 2 + 310; goto LABEL_24; } if ( v13 == 1 ) { v0 = (int *)dword_BA5CFC; v3 = (char *)(dword_BA5CEC + *((_DWORD *)dword_BA5CFC + 1)); dword_BA5D00 = dword_BA5CEC + *((_DWORD *)dword_BA5CFC + 1); v4 = sub_8C1E30(); v33 = dword_BA5CF0; goto LABEL_20; } break; case 310: return 0; default: sub_8C2000((int)"fatal flex scanner internal error--no action found"); return result; } break; } LABEL_11: v0 = (int *)dword_BA5CFC; v2 = byte_BA5CE0; } } // A380A0: using guessed type __int16 word_A380A0[]; // A3C420: using guessed type __int16 word_A3C420[]; // AC1640: using guessed type int dword_AC1640; // AC1644: using guessed type int dword_AC1644; // BA587C: using guessed type int dword_BA587C; // BA5CE0: using guessed type char byte_BA5CE0; // BA5CE8: using guessed type int dword_BA5CE8; // BA5CEC: using guessed type int dword_BA5CEC; // BA5CF4: using guessed type int dword_BA5CF4; // BA5CF8: using guessed type int dword_BA5CF8; // BA5D00: using guessed type int dword_BA5D00; // BA5D04: using guessed type int dword_BA5D04; // BA5D08: using guessed type int dword_BA5D08; // 8C2470: using guessed type char var_24[32]; //----- (008C4670) -------------------------------------------------------- bool __cdecl sub_8C4670(int a1, int a2, int a3, int a4, int *a5) { int v5; // eax v5 = sub_8C4BE0(a1, a2, a3, a4); *a5 = v5; return v5 != 0; } //----- (008C46A0) -------------------------------------------------------- int __thiscall sub_8C46A0(_DWORD *this, int a2) { int result; // eax if ( this[3] != a2 ) { sub_92BCF0(this, a2); result = sub_8C5420(a2); } return result; } //----- (008C46C0) -------------------------------------------------------- void *__thiscall sub_8C46C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiD3DXEffectFile *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A3F9DC: using guessed type void *NiTListBase,NiD3DXEffectFile *>::`vftable'; //----- (008C46F0) -------------------------------------------------------- void **__thiscall sub_8C46F0(_DWORD *this, int *a2, int a3, unsigned int a4) { int *v4; // edi _DWORD *v5; // esi int v6; // ebx void **result; // eax v4 = a2; v5 = this; (*(void (__stdcall **)(int *))(*this + 16))(a2); v6 = a3; a2 = 0; if ( sub_8C4C90(v5 + 10, a3, &a2) && a2 ) result = sub_8C5E80(a2, v4, v6, a4); else result = 0; return result; } //----- (008C4740) -------------------------------------------------------- _DWORD *__thiscall sub_8C4740(_DWORD *this, int a2) { _DWORD *v2; // ecx _DWORD *result; // eax v2 = (_DWORD *)this[7]; if ( !v2 ) return 0; while ( 1 ) { result = (_DWORD *)v2[2]; v2 = (_DWORD *)*v2; if ( *result == a2 ) break; if ( !v2 ) return 0; } return result; } //----- (008C4770) -------------------------------------------------------- int __thiscall sub_8C4770(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiD3DXEffectFile *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiD3DXEffectFile *>::`vftable'; return result; } // A3F9DC: using guessed type void *NiTListBase,NiD3DXEffectFile *>::`vftable'; // A3FA0C: using guessed type void *NiTPointerListBase,NiD3DXEffectFile *>::`vftable'; //----- (008C47B0) -------------------------------------------------------- void __thiscall sub_8C47B0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A3F9EC: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FA1C: using guessed type void *NiTMap::`vftable'; // A3FA3C: using guessed type void *NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable'; //----- (008C4820) -------------------------------------------------------- void *__thiscall sub_8C4820(void *this, char a2) { void *v2; // esi v2 = this; sub_8C4770(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C4850) -------------------------------------------------------- void **__thiscall sub_8C4850(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3F9EC: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; //----- (008C4890) -------------------------------------------------------- void **__thiscall sub_8C4890(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3F9EC: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FA1C: using guessed type void *NiTMap::`vftable'; //----- (008C48D0) -------------------------------------------------------- void *__thiscall sub_8C48D0(void *this, char a2) { void *v2; // esi v2 = this; sub_8C47B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C4900) -------------------------------------------------------- LONG __thiscall sub_8C4900(_DWORD *this) { _DWORD *v1; // edi int v2; // eax _DWORD *v3; // eax void *v4; // esi int v6; // [esp+4h] [ebp-4h] v1 = this; v2 = this[7]; *this = &NiD3DXEffectShaderLibrary::`vftable'; v6 = v2; while ( v6 ) { v3 = (_DWORD *)sub_403620(v1 + 6, (_DWORD **)&v6); v4 = v3; if ( v3 ) { sub_8C6150(v3); operator delete(v4); } } sub_8C47B0((_BYTE *)v1 + 40); sub_8C4770(v1 + 6); return sub_92BD80(v1); } // A3FA6C: using guessed type void *NiD3DXEffectShaderLibrary::`vftable'; //----- (008C4970) -------------------------------------------------------- char __thiscall sub_8C4970(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // ecx _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *v9; // eax _DWORD *v10; // eax int v11; // esi int v12; // ebx int v13; // ST18_4 int v14; // eax int v15; // ebx int v16; // ST18_4 int v17; // eax int v18; // ebx int v19; // ST18_4 int v20; // eax int v21; // ebx int v22; // ST18_4 int v23; // eax int v24; // ebx int v25; // ST18_4 int v26; // eax int v27; // ebx int v28; // ST18_4 int v29; // eax int v30; // ebx int v31; // ST18_4 int v32; // eax int i; // eax int v34; // eax v2 = a2; v3 = this; if ( !a2 ) return 0; v4 = (_DWORD *)this[7]; if ( v4 ) { while ( 1 ) { v5 = (_DWORD *)v4[2]; v4 = (_DWORD *)*v4; if ( *v5 == *a2 ) break; if ( !v4 ) goto LABEL_5; } sub_92BE70("File %s already in list??\n", *a2); return 0; } LABEL_5: v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[6] + 4))(v3 + 6); v6[2] = a2; *v6 = 0; v6[1] = v3[8]; v7 = (_DWORD *)v3[8]; if ( v7 ) *v7 = v6; else v3[7] = v6; ++v3[9]; v3[8] = v6; if ( !v3[5] ) { v9 = operator new(0x50u); if ( v9 ) v10 = sub_9567B0(v9); else v10 = 0; sub_56FF80(v3 + 5, (int)v10); } v11 = sub_8C5CD0(a2); if ( v11 ) { do { sub_956880((_DWORD *)v3[5], v11); v12 = *(_DWORD *)v3[5]; v13 = v3[5]; v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 20))(v11); (*(void (__thiscall **)(int, int))(v12 + 56))(v13, v14); v15 = *(_DWORD *)v3[5]; v16 = v3[5]; v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 24))(v11); (*(void (__thiscall **)(int, int))(v15 + 56))(v16, v17); v18 = *(_DWORD *)v3[5]; v19 = v3[5]; v20 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 28))(v11); (*(void (__thiscall **)(int, int))(v18 + 60))(v19, v20); v21 = *(_DWORD *)v3[5]; v22 = v3[5]; v23 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 32))(v11); (*(void (__thiscall **)(int, int))(v21 + 60))(v22, v23); v24 = *(_DWORD *)v3[5]; v25 = v3[5]; v26 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 36))(v11); (*(void (__thiscall **)(int, int))(v24 + 64))(v25, v26); v27 = *(_DWORD *)v3[5]; v28 = v3[5]; v29 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 40))(v11); (*(void (__thiscall **)(int, int))(v27 + 64))(v28, v29); v30 = *(_DWORD *)v3[5]; v31 = v3[5]; v32 = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 44))(v11); (*(void (__thiscall **)(int, int))(v30 + 68))(v31, v32); v11 = sub_8C5A10(a2); } while ( v11 ); v2 = a2; } for ( i = sub_8C5C80(v2); i; i = sub_8C5910(v2) ) { v34 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(i + 68) + 4))(*(_DWORD *)(i + 68)); sub_815C70(v3 + 10, v34, (int)v2); } return 1; } //----- (008C4B30) -------------------------------------------------------- void *__thiscall sub_8C4B30(void *this, char a2) { void *v2; // esi v2 = this; sub_8C4900(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C4B60) -------------------------------------------------------- void **__thiscall sub_8C4B60(void **this) { void **v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; sub_92BD50(this, "NiD3DXEffectShaderLib"); *v1 = &NiD3DXEffectShaderLibrary::`vftable'; v1[9] = 0; v1[7] = 0; v1[8] = 0; v1[6] = &NiTPointerList::`vftable'; v1[11] = (void *)37; v1[10] = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; v1[13] = 0; v2 = operator new(0x94u); v3 = 4 * (_DWORD)v1[11]; v1[12] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 56) = 1; v1[10] = &NiTStringMap::`vftable'; return v1; } // A3F9EC: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FA5C: using guessed type void *NiTPointerList::`vftable'; // A3FA6C: using guessed type void *NiD3DXEffectShaderLibrary::`vftable'; // A3FAA4: using guessed type void *NiTStringMap::`vftable'; //----- (008C4BE0) -------------------------------------------------------- int __cdecl sub_8C4BE0(int a1, int a2, int a3, int a4) { int result; // eax void **v5; // eax void **v6; // esi int i; // edi char *v8; // ebx _DWORD *v9; // eax if ( a1 || (result = sub_8C4C80()) != 0 ) { v5 = (void **)operator new(0x3Cu); if ( v5 ) { v6 = sub_8C4B60(v5); if ( !v6 ) goto LABEL_12; (*((void (__thiscall **)(void **, int))*v6 + 4))(v6, a1); for ( i = 0; i < a2; ++i ) { v8 = *(char **)(a3 + 4 * i); v9 = sub_8C6660(); if ( !sub_8C6A70(v9, (int)v6, v8, a4) ) sub_92BE70("LoadD3DXEffectFiles failed on %s\n", *(_DWORD *)(a3 + 4 * i)); } if ( v6[9] ) goto LABEL_12; (*(void (__thiscall **)(void **, signed int))*v6)(v6, 1); } v6 = 0; LABEL_12: result = (int)v6; } return result; } //----- (008C4C80) -------------------------------------------------------- int sub_8C4C80() { return dword_BA5D28; } // BA5D28: using guessed type int dword_BA5D28; //----- (008C4C90) -------------------------------------------------------- char __thiscall sub_8C4C90(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v4; // edi v3 = this; v4 = *(_DWORD **)(this[2] + 4 * (*(int (__stdcall **)(int))(*this + 4))(a2)); if ( !v4 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, v4[1]) ) { v4 = (_DWORD *)*v4; if ( !v4 ) return 0; } *a3 = v4[2]; return 1; } //----- (008C4CF0) -------------------------------------------------------- int __fastcall sub_8C4CF0(int a1, int a2, int a3) { _DWORD *v3; // ecx char v4; // al int v6; // [esp+0h] [ebp-4h] v6 = a1; v3 = *(_DWORD **)(a1 + 4); v6 = 0; v4 = sub_8C4C90(v3, a3, &v6); return v4 != 0 ? v6 : 0; } //----- (008C4D20) -------------------------------------------------------- void __thiscall sub_8C4D20(_DWORD *this, int *a2) { _DWORD *v2; // ecx if ( a2 && *a2 && strcmp((const char *)*a2, &byte_9A8050) ) { v2 = (_DWORD *)this[1]; if ( v2 ) sub_815C70(v2, *a2, (int)a2); } } //----- (008C4D80) -------------------------------------------------------- char __thiscall sub_8C4D80(_DWORD *this, int a2) { char result; // al _DWORD *v3; // ecx result = a2; if ( a2 ) { v3 = (_DWORD *)this[1]; if ( v3 ) result = sub_916F40(v3, a2); } return result; } //----- (008C4DA0) -------------------------------------------------------- char __cdecl sub_8C4DA0(char *Src, char *Dst, rsize_t SizeInBytes) { char Drive; // [esp+Ch] [ebp-310h] char Dir; // [esp+10h] [ebp-30Ch] char Filename; // [esp+114h] [ebp-208h] char Ext; // [esp+218h] [ebp-104h] if ( (unsigned __int8)sub_8AA2B0() ) { strcpy_s(Dst, SizeInBytes, Src); return 1; } if ( !dword_BA5D14 ) { sub_863460(1, 0, "No valid D3D Effect factory\n"); return 0; } sub_92BEC0(Src, &Drive, &Dir, &Filename, &Ext); if ( !dword_BA5D18 || !strcmp((const char *)dword_BA5D18, &byte_9A8050) ) { sub_863460(1, 0, "Invalid or no D3D Effect directory\n"); return 0; } if ( *((char *)dword_BA5D18 + strlen((const char *)dword_BA5D18) - 1) == 47 || *((char *)dword_BA5D18 + strlen((const char *)dword_BA5D18) - 1) == 92 ) { sub_7FF6E0(Dst, SizeInBytes, "%s%s%s", dword_BA5D18, &Filename, &Ext); } else { sub_7FF6E0(Dst, SizeInBytes, "%s\\%s%s", dword_BA5D18, &Filename, &Ext); } if ( (unsigned __int8)sub_8AA2B0() ) return 1; sub_863460(1, 0, "D3D Effect file not found %s\n", Src); return 0; } // BA5D14: using guessed type int dword_BA5D14; //----- (008C4F30) -------------------------------------------------------- int __thiscall sub_8C4F30(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax int v4; // edx unsigned int v5; // ecx unsigned int v6; // eax int v7; // esi _DWORD *v8; // edx _DWORD *v9; // esi _DWORD *v10; // edi int v11; // ebx int v12; // eax unsigned int v13; // edx unsigned int v14; // eax _DWORD *v15; // ecx _DWORD *v16; // [esp+4h] [ebp-4h] v2 = this; result = this[2]; v16 = this; if ( result != a2 ) { v4 = this[1]; v5 = *(_DWORD *)(v4 + 4); v6 = 0; if ( v5 ) { v7 = *(_DWORD *)(v4 + 8); v8 = *(_DWORD **)(v4 + 8); while ( !*v8 ) { ++v6; ++v8; if ( v6 >= v5 ) goto LABEL_6; } result = *(_DWORD *)(v7 + 4 * v6); } else { LABEL_6: result = 0; } v9 = (_DWORD *)result; if ( result ) { do { v10 = (_DWORD *)v2[1]; v11 = v9[2]; if ( *v9 ) { v9 = (_DWORD *)*v9; } else { v12 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v10 + 4))(v10, v9[1]); v13 = v10[1]; v14 = v12 + 1; if ( v14 >= v13 ) { LABEL_15: v9 = 0; } else { v15 = (_DWORD *)(v10[2] + 4 * v14); while ( 1 ) { v9 = (_DWORD *)*v15; if ( *v15 ) break; ++v14; ++v15; if ( v14 >= v13 ) goto LABEL_15; } } } result = sub_8C5720(v11); v2 = v16; } while ( v9 ); } v2[2] = a2; } return result; } //----- (008C4FD0) -------------------------------------------------------- int __thiscall sub_8C4FD0(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax int v4; // edx unsigned int v5; // ecx unsigned int v6; // eax int v7; // esi _DWORD *v8; // edx _DWORD *v9; // esi _DWORD *v10; // edi int v11; // ebx int v12; // eax unsigned int v13; // edx unsigned int v14; // eax _DWORD *v15; // ecx _DWORD *v16; // [esp+4h] [ebp-4h] v2 = this; result = this[3]; v16 = this; if ( result != a2 ) { v4 = this[1]; v5 = *(_DWORD *)(v4 + 4); v6 = 0; if ( v5 ) { v7 = *(_DWORD *)(v4 + 8); v8 = *(_DWORD **)(v4 + 8); while ( !*v8 ) { ++v6; ++v8; if ( v6 >= v5 ) goto LABEL_6; } result = *(_DWORD *)(v7 + 4 * v6); } else { LABEL_6: result = 0; } v9 = (_DWORD *)result; if ( result ) { do { v10 = (_DWORD *)v2[1]; v11 = v9[2]; if ( *v9 ) { v9 = (_DWORD *)*v9; } else { v12 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v10 + 4))(v10, v9[1]); v13 = v10[1]; v14 = v12 + 1; if ( v14 >= v13 ) { LABEL_15: v9 = 0; } else { v15 = (_DWORD *)(v10[2] + 4 * v14); while ( 1 ) { v9 = (_DWORD *)*v15; if ( *v15 ) break; ++v14; ++v15; if ( v14 >= v13 ) goto LABEL_15; } } } result = sub_8C5740(v11); v2 = v16; } while ( v9 ); } v2[3] = a2; } return result; } //----- (008C5070) -------------------------------------------------------- int __thiscall sub_8C5070(_DWORD *this) { _DWORD *v1; // edi int v2; // edx unsigned int v3; // ecx unsigned int v4; // eax int v5; // esi _DWORD *v6; // edx int result; // eax _DWORD *v8; // esi _DWORD *v9; // edi int v10; // ebx int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // [esp+8h] [ebp-4h] v1 = this; v2 = this[1]; v3 = *(_DWORD *)(v2 + 4); v4 = 0; v15 = v1; if ( v3 ) { v5 = *(_DWORD *)(v2 + 8); v6 = *(_DWORD **)(v2 + 8); while ( !*v6 ) { ++v4; ++v6; if ( v4 >= v3 ) goto LABEL_5; } result = *(_DWORD *)(v5 + 4 * v4); } else { LABEL_5: result = 0; } v8 = (_DWORD *)result; if ( result ) { while ( 1 ) { v9 = (_DWORD *)v1[1]; v10 = v8[2]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v11 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v9 + 4))(v9, v8[1]); v12 = v9[1]; v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_16: v8 = 0; } else { v14 = (_DWORD *)(v9[2] + 4 * v13); while ( 1 ) { v8 = (_DWORD *)*v14; if ( *v14 ) break; ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_16; } } } result = sub_8C5A80(v10); if ( !v8 ) break; v1 = v15; } } return result; } //----- (008C5110) -------------------------------------------------------- void __thiscall sub_8C5110(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A3FB38: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FBCC: using guessed type void *NiTPointerMap::`vftable'; // A3FBEC: using guessed type void *NiTStringTemplateMap,NiD3DXEffectFile *>::`vftable'; //----- (008C5180) -------------------------------------------------------- void **__thiscall sub_8C5180(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3FB38: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; //----- (008C51C0) -------------------------------------------------------- void **__thiscall sub_8C51C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3FB38: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FBCC: using guessed type void *NiTPointerMap::`vftable'; //----- (008C5200) -------------------------------------------------------- void *__thiscall sub_8C5200(void *this, char a2) { void *v2; // esi v2 = this; sub_8C5110(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C5230) -------------------------------------------------------- char __stdcall sub_8C5230(char *Src, _DWORD **a2) { char result; // al int v3; // esi _DWORD *v4; // eax _DWORD *v5; // eax void *v6; // [esp+8h] [ebp-20Ch] char v7; // [esp+Ch] [ebp-208h] char Dst; // [esp+110h] [ebp-104h] if ( !Src || !strcmp(Src, &byte_9A8050) ) { sub_863460(1, 0, "Missing D3D Effect file name\n"); result = 0; } else { sub_92C080(Src, &Dst, 0x100u); if ( !_stricmp(&Dst, ".fx") ) { if ( sub_8C4DA0(Src, &v7, 0x104u) ) { v6 = 0; v3 = sub_8C65B0( dword_BA5D24 | dword_BA6FC8, (int)Src, dword_BA5D20, (int)&v7, dword_BA5D24 | dword_BA6FC8, (char **)&v6); if ( v3 ) { operator delete(v6); if ( !*a2 ) { v4 = operator new(0x54u); if ( v4 ) v5 = sub_8C60D0(v4); else v5 = 0; *a2 = v5; sub_968250((int)v5, Src); } sub_8C62F0(*a2, v3, dword_BA5D20); result = 1; } else { sub_863460(1, 0, "Failed to compile D3D Effect using Temp Device:\n %s\n", v6); operator delete(v6); *a2 = 0; result = 0; } } else { sub_863460(1, 0, "Failed to find D3D Effect file %s\n", Src); result = 0; } } else { *a2 = 0; sub_863460(1, 0, "Invalid D3D Effect file %s\n", Src); result = 0; } } return result; } // BA5D20: using guessed type int dword_BA5D20; // BA5D24: using guessed type int dword_BA5D24; // BA6FC8: using guessed type int dword_BA6FC8; //----- (008C5420) -------------------------------------------------------- int __cdecl sub_8C5420(int a1) { int result; // eax int v2; // esi if ( dword_BA5D1C != a1 ) { result = dword_BA5D20; if ( a1 ) { v2 = *(_DWORD *)(a1 + 132); if ( v2 != dword_BA5D20 ) { if ( dword_BA5D20 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA5D20 + 8))(dword_BA5D20); dword_BA5D20 = v2; if ( v2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 4))(v2); goto LABEL_10; } } else if ( dword_BA5D20 ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA5D20 + 8))(dword_BA5D20); dword_BA5D20 = 0; LABEL_10: if ( dword_BA5D14 ) result = sub_8C5070((_DWORD *)dword_BA5D14); goto LABEL_12; } LABEL_12: dword_BA5D1C = a1; } return result; } // BA5D14: using guessed type int dword_BA5D14; // BA5D1C: using guessed type int dword_BA5D1C; // BA5D20: using guessed type int dword_BA5D20; //----- (008C54A0) -------------------------------------------------------- _DWORD *__thiscall sub_8C54A0(void *this, char a2) { _DWORD *v2; // esi _DWORD *v3; // ecx void (__stdcall ***v4)(signed int); // ecx v2 = this; *(_DWORD *)this = &NiD3DXEffectFactory::`vftable'; sub_8C5070(this); v3 = (_DWORD *)v2[1]; if ( v3 ) sub_940360(v3); v4 = (void (__stdcall ***)(signed int))v2[1]; if ( v4 ) (**v4)(1); if ( a2 & 1 ) operator delete(v2); return v2; } // A3FC0C: using guessed type void *NiD3DXEffectFactory::`vftable'; //----- (008C5560) -------------------------------------------------------- _DWORD *__thiscall sub_8C5560(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi void *v4; // eax size_t v5; // ST08_4 v1 = this; *this = &NiD3DXEffectFactory::`vftable'; this[2] = -1; this[3] = -1; v2 = operator new(0x14u); v3 = v2; if ( v2 ) { v2[1] = 59; *v2 = &NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; v2[3] = 0; v4 = operator new(0xECu); v5 = 4 * v3[1]; v3[2] = v4; memset(v4, 0, v5); *((_BYTE *)v3 + 16) = 0; *v3 = &NiTStringPointerMap::`vftable'; v1[1] = v3; } else { v1[1] = 0; } return v1; } // A3FB38: using guessed type void *NiTMapBase,char const *,NiD3DXEffectFile *>::`vftable'; // A3FC0C: using guessed type void *NiD3DXEffectFactory::`vftable'; // A3FC84: using guessed type void *NiTStringPointerMap::`vftable'; //----- (008C55E0) -------------------------------------------------------- _DWORD *__cdecl sub_8C55E0(char a1) { _DWORD *result; // eax _DWORD *v2; // eax result = (_DWORD *)dword_BA5D14; if ( a1 && !dword_BA5D14 ) { v2 = operator new(0x10u); if ( v2 ) { result = sub_8C5560(v2); dword_BA5D14 = (int)result; } else { result = 0; dword_BA5D14 = 0; } } return result; } // BA5D14: using guessed type int dword_BA5D14; //----- (008C5620) -------------------------------------------------------- int __cdecl sub_8C5620(int a1) { _DWORD *v1; // eax _DWORD *v2; // eax char *v3; // edi int result; // eax int v5; // esi v1 = (_DWORD *)dword_BA5D14; if ( !dword_BA5D14 ) { v2 = operator new(0x10u); if ( v2 ) v1 = sub_8C5560(v2); else v1 = 0; dword_BA5D14 = (int)v1; } v3 = (char *)a1; if ( !a1 || !strcmp((const char *)a1, &byte_9A8050) ) return 0; result = (*(int (__thiscall **)(_DWORD *, int))*v1)(v1, a1); a1 = result; if ( result ) { if ( !*(_BYTE *)(result + 80) || !*(_DWORD *)(result + 76) ) { if ( dword_BA5D1C ) { sub_8C5230(v3, (_DWORD **)&a1); result = a1; } } return result; } if ( !sub_8C5230(v3, (_DWORD **)&a1) ) return 0; v5 = a1; *(_DWORD *)(a1 + 4) = 2; if ( !*(_BYTE *)(v5 + 80) || !*(_DWORD *)(v5 + 76) ) sub_8C5A80(v5); (*(void (__stdcall **)(int))(*(_DWORD *)dword_BA5D14 + 4))(v5); return v5; } // BA5D14: using guessed type int dword_BA5D14; // BA5D1C: using guessed type int dword_BA5D1C; //----- (008C5720) -------------------------------------------------------- int __thiscall sub_8C5720(int this) { int result; // eax if ( *(_DWORD *)(this + 76) ) { if ( *(_BYTE *)(this + 80) ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 76) + 276))(*(_DWORD *)(this + 76)); } return result; } //----- (008C5740) -------------------------------------------------------- int __thiscall sub_8C5740(int this) { int result; // eax if ( *(_DWORD *)(this + 76) ) { if ( *(_BYTE *)(this + 80) ) result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 76) + 280))(*(_DWORD *)(this + 76)); } return result; } //----- (008C5760) -------------------------------------------------------- int __thiscall sub_8C5760(int this) { int result; // eax result = *(_DWORD *)(this + 8); if ( !result ) result = (*(int (**)(void))(**(_DWORD **)(this + 68) + 4))(); return result; } //----- (008C5780) -------------------------------------------------------- void *__thiscall sub_8C5780(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiD3DXEffectParameter *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A3FCA4: using guessed type void *NiTListBase,NiD3DXEffectParameter *>::`vftable'; //----- (008C57B0) -------------------------------------------------------- int __thiscall sub_8C57B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiD3DXEffectParameter *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiD3DXEffectParameter *>::`vftable'; return result; } // A3FCA4: using guessed type void *NiTListBase,NiD3DXEffectParameter *>::`vftable'; // A3FCD4: using guessed type void *NiTPointerListBase,NiD3DXEffectParameter *>::`vftable'; //----- (008C57F0) -------------------------------------------------------- void __thiscall sub_8C57F0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A3FCB4: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // A3FCE4: using guessed type void *NiTMap>::`vftable'; // A3FD04: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (008C5860) -------------------------------------------------------- void **__thiscall sub_8C5860(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3FCB4: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; //----- (008C58A0) -------------------------------------------------------- void **__thiscall sub_8C58A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase>,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A3FCB4: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // A3FCE4: using guessed type void *NiTMap>::`vftable'; //----- (008C58E0) -------------------------------------------------------- void *__thiscall sub_8C58E0(void *this, char a2) { void *v2; // esi v2 = this; sub_8C57B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C5910) -------------------------------------------------------- int __thiscall sub_8C5910(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ebx int v3; // edi int v4; // ecx unsigned int v5; // eax int result; // eax char v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v1 = this; v2 = this + 11; if ( !this[11] ) return 0; while ( 1 ) { if ( !v1[13] ) { v8 = 0; sub_931910(v1 + 2, (unsigned int)v2, &v7, (unsigned int *)&v8); v3 = v8; v1[13] = v8; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } v4 = v1[13]; if ( v1[12] < *(_DWORD *)(v4 + 48) ) break; LABEL_10: v1[13] = 0; v1[12] = 0; if ( !*v2 ) return 0; } while ( 1 ) { v5 = v1[12]; v1[12] = v5 + 1; if ( v5 < *(_DWORD *)(v4 + 48) ) { result = *(_DWORD *)(*(_DWORD *)(v4 + 40) + 4 * v5); if ( result ) return result; } if ( v1[12] >= *(_DWORD *)(v4 + 48) ) goto LABEL_10; } } //----- (008C59B0) -------------------------------------------------------- int __thiscall sub_8C59B0(_DWORD *this, int a2, unsigned int a3) { int v3; // edi void (__thiscall ***v4)(_DWORD, signed int); // esi int v6; // [esp+8h] [ebp-4h] v3 = 0; v6 = 0; sub_455570(this + 2, a2, &v6); v4 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( !v6 ) return 0; if ( a3 < *(_DWORD *)(v6 + 48) ) v3 = *(_DWORD *)(*(_DWORD *)(v6 + 40) + 4 * a3); if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**v4)(v4, 1); return v3; } //----- (008C5A10) -------------------------------------------------------- int __thiscall sub_8C5A10(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // edi int v3; // esi char v5; // [esp+8h] [ebp-8h] _DWORD *v6; // [esp+Ch] [ebp-4h] v1 = this; if ( !this[11] ) return 0; v6 = 0; sub_931910(this + 2, (unsigned int)(this + 11), &v5, (unsigned int *)&v6); v2 = v6; if ( !v6 ) return 0; v3 = sub_8C9320(v6, v1 + 14); if ( !InterlockedDecrement(v2 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); return v3; } //----- (008C5A80) -------------------------------------------------------- int __thiscall sub_8C5A80(int this) { int v1; // edi int result; // eax unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // esi _DWORD *i; // esi _DWORD *v8; // ecx char v9; // [esp+4h] [ebp-Ch] int v10; // [esp+8h] [ebp-8h] _DWORD *v11; // [esp+Ch] [ebp-4h] v1 = this; result = *(_DWORD *)(this + 76); if ( result ) { if ( *(_BYTE *)(this + 80) ) (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)result + 284))(result, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 76) + 8))(*(_DWORD *)(v1 + 76)); *(_DWORD *)(v1 + 76) = 0; *(_BYTE *)(v1 + 80) = 0; v3 = *(_DWORD *)(v1 + 12); v4 = 0; if ( v3 ) { v5 = *(_DWORD **)(v1 + 16); while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_8; } result = *(_DWORD *)(*(_DWORD *)(v1 + 16) + 4 * v4); } else { LABEL_8: result = 0; } v10 = result; while ( v10 ) { v11 = 0; sub_931910((_DWORD *)(v1 + 8), (unsigned int)&v10, &v9, (unsigned int *)&v11); v6 = v11; result = sub_8C92F0(v11); if ( v6 ) { result = InterlockedDecrement(v6 + 1); if ( !result ) result = (*(int (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); } } for ( i = *(_DWORD **)(v1 + 32); i; result = sub_8C74B0(v8) ) { v8 = (_DWORD *)i[2]; i = (_DWORD *)*i; } } return result; } //----- (008C5B60) -------------------------------------------------------- char __usercall sub_8C5B60@(int a1@, int a2@) { _DWORD *v2; // ebx _DWORD *v3; // esi int **v4; // eax unsigned int v5; // ecx _DWORD *v6; // ebx int v7; // edi unsigned int v8; // eax _DWORD *v9; // edx int v10; // eax unsigned int v11; // ebx unsigned int v12; // esi _DWORD **v13; // ecx char v15; // [esp+4h] [ebp-14h] _DWORD *v16; // [esp+8h] [ebp-10h] int v17; // [esp+Ch] [ebp-Ch] int v18; // [esp+10h] [ebp-8h] int *v19; // [esp+14h] [ebp-4h] v2 = (_DWORD *)a1; if ( !*(_DWORD *)(a1 + 76) || !*(_BYTE *)(a1 + 80) ) return 0; (***(void (__stdcall ****)(_DWORD, void *, int **, int))(a1 + 76))(*(_DWORD *)(a1 + 76), &unk_A48364, &v19, a2); v3 = (_DWORD *)v2[8]; while ( v3 ) { v4 = (int **)(v3 + 2); v3 = (_DWORD *)*v3; sub_8C7490(*v4, (int)v19); } v5 = v2[3]; v6 = v2 + 2; v7 = 0; v8 = 0; v18 = 0; v16 = v6; if ( v5 ) { v9 = (_DWORD *)v6[2]; while ( !*v9 ) { ++v8; ++v9; if ( v8 >= v5 ) goto LABEL_9; } v10 = *(_DWORD *)(v6[2] + 4 * v8); } else { LABEL_9: v10 = 0; } v17 = v10; if ( v10 ) { while ( 1 ) { sub_931910(v6, (unsigned int)&v17, &v15, (unsigned int *)&v18); v7 = v18; if ( v18 ) { v11 = *(_DWORD *)(v18 + 48); v12 = 0; if ( v11 ) { do { sub_8CBDC0((int)v19, v12); if ( v12 < *(_DWORD *)(v7 + 48) ) { v13 = *(_DWORD ***)(*(_DWORD *)(v7 + 40) + 4 * v12); if ( v13 ) sub_8C9970(v13, v19); } ++v12; } while ( v12 < v11 ); } } if ( !v17 ) break; v6 = v16; } } (*(void (__cdecl **)(int *))(*v19 + 8))(v19); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } return 1; } //----- (008C5C80) -------------------------------------------------------- int __thiscall sub_8C5C80(_DWORD *this) { unsigned int v1; // esi unsigned int v2; // eax _DWORD *v3; // edx int result; // eax v1 = this[3]; v2 = 0; if ( v1 ) { v3 = (_DWORD *)this[4]; while ( !*v3 ) { ++v2; ++v3; if ( v2 >= v1 ) goto LABEL_5; } result = *(_DWORD *)(this[4] + 4 * v2); } else { LABEL_5: result = 0; } this[11] = result; if ( result ) { this[13] = 0; this[12] = 0; result = sub_8C5910(this); } return result; } //----- (008C5CD0) -------------------------------------------------------- int __thiscall sub_8C5CD0(_DWORD *this) { unsigned int v1; // esi unsigned int v2; // eax _DWORD *v3; // edx int result; // eax v1 = this[3]; v2 = 0; if ( v1 ) { v3 = (_DWORD *)this[4]; while ( !*v3 ) { ++v2; ++v3; if ( v2 >= v1 ) goto LABEL_5; } this[11] = *(_DWORD *)(this[4] + 4 * v2); result = sub_8C5A10(this); } else { LABEL_5: this[11] = 0; result = sub_8C5A10(this); } return result; } //----- (008C5D10) -------------------------------------------------------- char __userpurge sub_8C5D10@(int *a1@, int a2@, int a3) { int *v3; // esi v3 = a1; sub_8C55E0(1); sub_8C5420(a3); sub_8C55E0(1); sub_8C5620(*v3); return sub_8C5B60((int)v3, a2); } //----- (008C5D50) -------------------------------------------------------- LONG __thiscall sub_8C5D50(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // esi int v5; // edi int v6; // eax int v7; // eax char *v8; // edi char v9; // al volatile LONG *v10; // esi _DWORD *v11; // eax volatile LONG *v12; // ebx LONG result; // eax _DWORD *v14; // [esp+Ch] [ebp-8h] volatile LONG *v15; // [esp+10h] [ebp-4h] v3 = this; v4 = (_DWORD *)this[8]; while ( v4 ) { v5 = v4[2]; v4 = (_DWORD *)*v4; v6 = (*(int (**)(void))(**(_DWORD **)(a2 + 68) + 4))(); if ( sub_8C9F80(v3[19], *(_DWORD *)(v5 + 4), v6) ) { *(_BYTE *)(v5 + 72) = 1; sub_8C9E20((_DWORD *)a2, v5); } } v7 = *(_DWORD *)(a2 + 8); if ( !v7 ) v7 = (*(int (**)(void))(**(_DWORD **)(a2 + 68) + 4))(); v8 = (char *)v7; v15 = 0; v14 = v3 + 2; v9 = sub_455570(v3 + 2, v7, (int *)&v15); v10 = v15; if ( !v9 || !v15 ) { v11 = operator new(0x44u); if ( v11 ) v12 = sub_8C9660(v11); else v12 = 0; if ( v10 != v12 ) { if ( v10 && !InterlockedDecrement(v10 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); v10 = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } sub_95CB50((void *)v10, v8); if ( v10 ) InterlockedIncrement(v10 + 1); sub_923970(v14, (int)v8, (LONG)v10); } result = sub_8C9750(v10, a2); if ( v10 ) { result = InterlockedDecrement(v10 + 1); if ( !result ) result = (**(int (__thiscall ***)(volatile LONG *, signed int))v10)(v10, 1); } return result; } //----- (008C5E80) -------------------------------------------------------- void **__thiscall sub_8C5E80(int *this, _DWORD *a2, int a3, unsigned int a4) { int *v4; // esi int v5; // edi _DWORD *v6; // esi void **v7; // edi v4 = this; sub_8C55E0(1); v5 = (int)a2; sub_8C5420((int)a2); sub_8C55E0(1); sub_8C5620(*v4); sub_8C5B60((int)v4, v5); a2 = 0; sub_455570(v4 + 2, a3, (int *)&a2); v6 = a2; if ( !a2 ) return 0; v7 = sub_8C9590(a2, v5, a4); if ( !InterlockedDecrement(v6 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return v7; } //----- (008C5F10) -------------------------------------------------------- char __thiscall sub_8C5F10(int this, int a2) { int v2; // ebx int v3; // eax unsigned int v4; // edi char result; // al int *v6; // esi _DWORD *v7; // eax _DWORD *v8; // eax unsigned int v9; // esi int v10; // edi _DWORD *v11; // eax _DWORD *v12; // esi int v13; // ST04_4 _DWORD *v14; // edi int v15; // esi int v16; // ecx _DWORD *v17; // eax _DWORD *v18; // [esp+8h] [ebp-Ch] unsigned int v19; // [esp+Ch] [ebp-8h] unsigned int v20; // [esp+10h] [ebp-4h] v2 = this; v3 = *(_DWORD *)(this + 76); v4 = 0; if ( v3 && !*(_BYTE *)(this + 81) ) { v20 = 0; v19 = 0; result = sub_8C9F40(v3, &v20, &v19); if ( !result ) return result; sub_8CA000(); if ( v20 > 0 ) { do { v6 = sub_8CC2D0(*(char **)(v2 + 76), v4); if ( v6 ) { v7 = operator new(0x4Cu); v8 = v7 ? sub_8C6AB0(v7) : 0; v18 = v8; if ( sub_8C6AF0((int)v8, (char *)v6, v2 + 56) ) sub_6B9900((_DWORD *)(v2 + 28), &v18); } ++v4; } while ( v4 < v20 ); } v9 = 0; v18 = 0; if ( v19 ) { do { v10 = sub_8CBDC0(*(_DWORD *)(v2 + 76), v9); if ( v10 ) { v11 = operator new(0x48u); if ( v11 ) v12 = sub_8C9EB0(v11); else v12 = 0; sub_8C97B0(v12, v10); v13 = a2; v12[5] = v2; sub_8C5D50((_DWORD *)v2, (int)v12, v13); v9 = (unsigned int)v18; } v18 = (_DWORD *)++v9; } while ( v9 < v19 ); } v14 = *(_DWORD **)(v2 + 32); while ( v14 ) { v15 = v14[2]; v14 = (_DWORD *)*v14; if ( !*(_BYTE *)(v15 + 72) ) { sub_8C7530((_DWORD *)v15); operator delete((void *)v15); if ( v14 && (a2 = v14[1]) != 0 ) { sub_403620((_DWORD *)(v2 + 28), (_DWORD **)&a2); } else { v16 = *(_DWORD *)(v2 + 36); v17 = *(_DWORD **)(v16 + 4); *(_DWORD *)(v2 + 36) = v17; if ( v17 ) *v17 = 0; else *(_DWORD *)(v2 + 32) = 0; (*(void (__thiscall **)(int, int))(*(_DWORD *)(v2 + 28) + 8))(v2 + 28, v16); --*(_DWORD *)(v2 + 40); } } } *(_BYTE *)(v2 + 81) = 1; } return 1; } //----- (008C60A0) -------------------------------------------------------- void *__thiscall sub_8C60A0(void *this, char a2) { void *v2; // esi v2 = this; sub_8C57F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C60D0) -------------------------------------------------------- _DWORD *__thiscall sub_8C60D0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 v1 = this; *this = 0; this[1] = 0; this[3] = 37; this[2] = &NiTMapBase>,char const *,NiPointer>::`vftable'; this[5] = 0; v2 = operator new(0x94u); v3 = 4 * v1[3]; v1[4] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 24) = 1; v1[2] = &NiTStringMap>::`vftable'; v1[10] = 0; v1[8] = 0; v1[9] = 0; v1[7] = &NiTPointerList::`vftable'; v1[11] = 0; v1[12] = 0; v1[13] = 0; sub_8CCEA0(v1 + 14); v1[19] = 0; *((_WORD *)v1 + 40) = 0; return v1; } // A3FCB4: using guessed type void *NiTMapBase>,char const *,NiPointer>::`vftable'; // A3FD24: using guessed type void *NiTPointerList::`vftable'; // A3FD34: using guessed type void *NiTStringMap>::`vftable'; //----- (008C6150) -------------------------------------------------------- void __thiscall sub_8C6150(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax int v3; // eax int v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi _DWORD *v6; // esi _DWORD *v7; // edi _DWORD *v8; // esi _DWORD *v9; // ST10_4 void **v10; // [esp+Ch] [ebp-1Ch] unsigned int v11; // [esp+10h] [ebp-18h] void *v12; // [esp+14h] [ebp-14h] int v13; // [esp+18h] [ebp-10h] char v14; // [esp+1Ch] [ebp-Ch] int v15; // [esp+20h] [ebp-8h] int v16; // [esp+24h] [ebp-4h] v1 = this; sub_92BE70("Killing NiD3DXEffectFile %s\n", *this); v2 = sub_8C55E0(0); if ( v2 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v2 + 8))(v2, *v1); sub_8C5A80((int)v1); operator delete((void *)*v1); v11 = 37; v13 = 0; v12 = operator new(0x94u); memset(v12, 0, 0x94u); v3 = 0; v14 = 1; v10 = &NiTStringMap>::`vftable'; while ( !*((_DWORD *)v12 + v3) ) { if ( ++v3 >= v11 ) { v4 = 0; goto LABEL_7; } } v4 = *((_DWORD *)v12 + v3); LABEL_7: v1[11] = v4; while ( v1[11] ) { v16 = 0; sub_931910(&v10, (unsigned int)(v1 + 11), &v15, (unsigned int *)&v16); sub_923970(&v10, v15, 0); v5 = (void (__thiscall ***)(_DWORD, signed int))v16; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) (**v5)(v5, 1); } sub_940360(&v10); v6 = (_DWORD *)v1[8]; while ( v6 ) { v7 = (_DWORD *)v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { sub_8C7530(v7); operator delete(v7); } } v8 = (_DWORD *)v1[8]; while ( v8 ) { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[7] + 8))(v1 + 7, v9); } v1[10] = 0; v1[8] = 0; v1[9] = 0; sub_8C57F0(&v10); sub_8CC440(v1 + 14); sub_8C57B0(v1 + 7); sub_8C57F0((_BYTE *)v1 + 8); } // A3FD34: using guessed type void *NiTStringMap>::`vftable'; //----- (008C62F0) -------------------------------------------------------- char __thiscall sub_8C62F0(_DWORD *this, int a2, int a3) { int v3; // esi int v4; // eax v3 = (int)this; v4 = this[19]; if ( v4 == a2 ) return 0; if ( v4 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4); *(_DWORD *)(v3 + 76) = 0; *(_BYTE *)(v3 + 80) = 0; } *(_DWORD *)(v3 + 76) = a2; if ( !sub_8C5F10(v3, a3) ) return 0; if ( !a3 ) return 1; *(_BYTE *)(v3 + 80) = 1; return sub_8C5B60(v3, a3); } //----- (008C6350) -------------------------------------------------------- int __usercall sub_8C6350@(int a1@, int a2, int a3, char **a4) { const char *v4; // edi size_t v5; // eax rsize_t v6; // esi char *v7; // eax int result; // eax int v9; // [esp+0h] [ebp-8h] int v10; // [esp+4h] [ebp-4h] if ( D3DXCreateEffectCompilerFromFileA(a2, 0, 0, a3, &v9, &v10) >= 0 ) { if ( v10 ) (*(void (__stdcall **)(int))(*(_DWORD *)v10 + 8))(v10); result = v9; } else { if ( v10 ) { v4 = (const char *)(*(int (__stdcall **)(int, int))(*(_DWORD *)v10 + 12))(v10, a1); if ( v4 ) { v5 = (*(int (__stdcall **)(int))(*(_DWORD *)v10 + 16))(v10); v6 = v5; v7 = (char *)operator new(v5); *a4 = v7; strcpy_s(v7, v6, v4); } (*(void (__cdecl **)(int))(*(_DWORD *)v10 + 8))(v10); } result = 0; } return result; } // 944802: using guessed type int __stdcall D3DXCreateEffectCompilerFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (008C63E0) -------------------------------------------------------- int __thiscall sub_8C63E0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void *v4; // eax _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST00_4 v1 = this; v2 = this[2]; *this = v2; if ( v2 ) { do { v3 = (_DWORD *)*v1; *v1 = *(_DWORD *)*v1; v4 = (void *)v3[2]; if ( v4 ) operator delete(v4); } while ( *v1 ); } v5 = v1 + 1; v6 = (_DWORD *)v1[2]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; return sub_8B9260(v5); } //----- (008C6450) -------------------------------------------------------- char __thiscall sub_8C6450(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // ebx _DWORD *v4; // eax char *i; // esi _DWORD *v6; // edi _DWORD *v7; // eax struct _RTL_CRITICAL_SECTION *v8; // edi bool v9; // zf int v11; // [esp+10h] [ebp-10Ch] char ArgList; // [esp+14h] [ebp-108h] v2 = (_DWORD *)dword_BA46D0; v3 = this; v11 = dword_BA46D0; if ( dword_BA46D0 ) { EnterCriticalSection((LPCRITICAL_SECTION)(dword_BA46D0 + 20)); v2[11] = GetCurrentThreadId(); if ( ++v2[12] == 1 ) (*(void (__thiscall **)(_DWORD *))(*v2 + 256))(v2); } v4 = (_DWORD *)v3[2]; *v3 = v4; if ( v4 ) { *v3 = *v4; for ( i = (char *)v4[2]; i; i = (char *)v7[2] ) { sub_92BFD0(i, &ArgList, 0x104u); if ( sub_8C4740(a2, (int)&ArgList) ) { sub_92BE70("%s (%s) already loaded?\n", &ArgList, i); } else { sub_92BE70("Attempting to load %s\n", i); v6 = (_DWORD *)sub_8C5620((int)i); if ( v6 ) { sub_92BE70("Loaded %s\n", i); sub_8C4970(a2, v6); } else { sub_92BE70("Failed to load %s\n", i); } v2 = (_DWORD *)v11; } v7 = (_DWORD *)*v3; if ( !*v3 ) break; *v3 = *v7; } } if ( v2 ) { if ( v2[12] == 1 ) (*(void (__thiscall **)(_DWORD *))(*v2 + 260))(v2); v8 = (struct _RTL_CRITICAL_SECTION *)(v2 + 5); v9 = v8[1].LockCount-- == 1; if ( v9 ) v8[1].DebugInfo = 0; LeaveCriticalSection(v8); } return 1; } // BA46D0: using guessed type int dword_BA46D0; //----- (008C65B0) -------------------------------------------------------- int __usercall sub_8C65B0@(int a1@, int a2@, int a3, int a4, int a5, char **a6) { int result; // eax const char *v7; // edi size_t v8; // eax rsize_t v9; // esi char *v10; // eax int v11; // edx int v12; // [esp+0h] [ebp-4h] v12 = a1; if ( !a3 ) return sub_8C6350(a2, a4, a5, a6); if ( D3DXCreateEffectFromFileA(a3, a4, 0, 0, a5, 0, &v12, &a3, v12) >= 0 ) { if ( a3 ) (*(void (__stdcall **)(int))(*(_DWORD *)a3 + 8))(a3); result = v12; } else { if ( a3 ) { v7 = (const char *)(*(int (__stdcall **)(int, int))(*(_DWORD *)a3 + 12))(a3, a2); if ( v7 ) { v8 = (*(int (__stdcall **)(int))(*(_DWORD *)a3 + 16))(a3); v9 = v8; v10 = (char *)operator new(v8); *a6 = v10; strcpy_s(v10, v9, v7); } v11 = *(_DWORD *)a3; v12 = a3; (*(void (__cdecl **)(int))(v11 + 8))(a3); } result = 0; } return result; } // 944808: using guessed type int __stdcall D3DXCreateEffectFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); //----- (008C6660) -------------------------------------------------------- _DWORD *sub_8C6660() { _DWORD *v0; // eax _DWORD *v1; // esi void *v2; // eax _DWORD *result; // eax _DWORD *v4; // eax v0 = dword_BA5D2C; if ( dword_BA5D2C ) { v1 = (_DWORD *)*((_DWORD *)dword_BA5D2C + 2); if ( v1 ) { do { v2 = (void *)v1[2]; v1 = (_DWORD *)*v1; if ( v2 ) operator delete(v2); } while ( v1 ); v0 = dword_BA5D2C; } sub_521E30(v0 + 1); result = dword_BA5D2C; } else { v4 = operator new(0x14u); if ( v4 ) { result = sub_8B9470(v4); dword_BA5D2C = result; } else { result = 0; dword_BA5D2C = 0; } } return result; } //----- (008C66C0) -------------------------------------------------------- void sub_8C66C0() { void *v0; // esi if ( dword_BA5D2C ) { v0 = dword_BA5D2C; sub_8C63E0(dword_BA5D2C); operator delete(v0); } dword_BA5D2C = 0; } //----- (008C66F0) -------------------------------------------------------- int __stdcall sub_8C66F0(char *Src, int a2, int a3, int a4) { signed int v4; // kr00_4 char v5; // cl signed int i; // ecx signed int v7; // kr04_4 char v8; // cl signed int j; // ecx int v10; // esi HANDLE v11; // edi struct _WIN32_FIND_DATAA FindFileData; // [esp+14h] [ebp-450h] CHAR Dst; // [esp+154h] [ebp-310h] char v15; // [esp+257h] [ebp-20Dh] char v16; // [esp+258h] [ebp-20Ch] char v17[258]; // [esp+259h] [ebp-20Bh] char v18; // [esp+35Bh] [ebp-109h] CHAR FileName; // [esp+35Ch] [ebp-108h] char v20[259]; // [esp+35Dh] [ebp-107h] if ( !Src || !strcmp(Src, &byte_9A8050) || !a2 || !strcmp((const char *)a2, &byte_9A8050) ) return 0; strncpy_s(&v16, 0x104u, Src, 0x104u); v4 = strlen(&v16); v5 = *(&v15 + v4); if ( v5 != 92 && v5 != 47 ) { *(&v16 + v4) = 92; v17[v4] = 0; } for ( i = 0; i < v4; ++i ) { if ( *(&v16 + i) == 47 ) *(&v16 + i) = 92; } strcpy_s(&FileName, 0x104u, Src); v7 = strlen(&FileName); v8 = *(&v18 + v7); if ( v8 != 92 && v8 != 47 ) { *(&FileName + v7) = 92; v20[v7] = 0; } for ( j = 0; j < v7; ++j ) { if ( *(&FileName + j) == 47 ) *(&FileName + j) = 92; } strcat_s(&FileName, 0x104u, "*"); v10 = 0; memset(&FindFileData, 0, 0x140u); v11 = FindFirstFileA(&FileName, &FindFileData); if ( v11 != (HANDLE)-1 ) { strcpy_s(&Dst, 0x104u, &v16); strcat_s(&Dst, 0x104u, FindFileData.cFileName); do { strcpy_s(&Dst, 0x104u, &v16); strcat_s(&Dst, 0x104u, FindFileData.cFileName); if ( GetFileAttributesA(&Dst) & 0x10 ) { if ( strcmp(FindFileData.cFileName, ".") && strcmp(FindFileData.cFileName, "..") ) { if ( (_BYTE)a3 ) { strcat_s(&Dst, 0x104u, "\\"); sub_92BE70(" Recurse directory %s\n", &Dst); v10 += sub_8C66F0(&Dst, a2, a3, a4); } } } else if ( sub_8B98E0(&Dst, (char *)a2, a4) ) { ++v10; } } while ( FindNextFileA(v11, &FindFileData) ); FindClose(v11); } return v10; } // 8C66F0: using guessed type char var_20B[258]; // 8C66F0: using guessed type char var_107[259]; //----- (008C6A70) -------------------------------------------------------- bool __thiscall sub_8C6A70(_DWORD *this, int a2, char *Src, int a4) { _DWORD *v4; // esi v4 = this; sub_8C66F0(Src, (int)".FX", a4, (int)(this + 1)); return sub_8C6450(v4, (_DWORD *)a2) != 0; } //----- (008C6AB0) -------------------------------------------------------- _DWORD *__thiscall sub_8C6AB0(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; *((_BYTE *)this + 8) = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; this[15] = 0; this[16] = 0; this[17] = 0; return result; } //----- (008C6AF0) -------------------------------------------------------- char __thiscall sub_8C6AF0(int this, char *Src, int a3) { char *v3; // esi int v4; // edi int v5; // eax char *v6; // ST1C_4 char *v7; // ecx int v8; // edx int v9; // eax char result; // al char *v11; // ST1C_4 void *v12; // eax float *v13; // ecx unsigned int v14; // edx int v15; // ebx int v16; // eax char *v17; // ST1C_4 char *v18; // ecx char *v19; // ST1C_4 char *v20; // eax char *v21; // ST1C_4 char *v22; // eax int v23; // ecx char *v24; // ST1C_4 char *v25; // eax int v26; // eax const char *v27; // eax char *v28; // ST1C_4 char *v29; // ST1C_4 char *v30; // eax char *v31; // ST1C_4 char *v32; // ST1C_4 char *v33; // ST1C_4 unsigned int v34; // ebx unsigned int v35; // edx float *v36; // ecx int v37; // eax float *v38; // ecx signed int v39; // eax int v40; // ebx void *v41; // ST1C_4 void *v42; // ST18_4 int v43; // eax int v44; // [esp+1Ch] [ebp-14h] void *v45; // [esp+20h] [ebp-10h] void *v46; // [esp+24h] [ebp-Ch] char *i; // [esp+28h] [ebp-8h] int v48; // [esp+2Ch] [ebp-4h] v3 = Src; v4 = this; if ( !Src ) return 0; v5 = *(_DWORD *)Src; *(_DWORD *)(this + 20) = *(_DWORD *)Src; *(_BYTE *)(this + 8) = v3[4]; switch ( v5 ) { case 1: v6 = (char *)*((_DWORD *)v3 + 2); Src = 0; sub_92C100((int)&Src, 0, v6); v7 = Src; *(_DWORD *)(v4 + 4) = Src; v8 = *((_DWORD *)v3 + 21); *(_DWORD *)(v4 + 56) = v8; v9 = *((_DWORD *)v3 + 20); *(_DWORD *)(v4 + 60) = v9; *(_DWORD *)(v4 + 28) = v9 * v8; if ( *((_DWORD *)v3 + 20) != 3 || *((_DWORD *)v3 + 21) != 3 ) { if ( *(_BYTE *)(v4 + 8) ) { sub_931760(v7, 9, 0x40u, v3 + 16); result = 1; } else { sub_8CCA80((_DWORD *)a3, v7, (unsigned __int8)v3[88], v3 + 16); LABEL_12: result = 1; } } else { if ( *(_BYTE *)(v4 + 8) ) sub_931760(v7, 8, 0x30u, v3 + 16); else sub_8CC970((_DWORD *)a3, v7, v3[88], (int)(v3 + 16)); result = 1; } return result; case 2: v11 = (char *)*((_DWORD *)v3 + 2); v46 = 0; sub_92C100((int)&v46, 0, v11); *(_DWORD *)(v4 + 4) = v46; v44 = sub_8CD0D0(v3); *(_DWORD *)(v4 + 28) = *((_DWORD *)v3 + 18); v12 = (void *)*((_DWORD *)v3 + 18); v48 = (int)(v3 + 48); v13 = (float *)(v3 + 32); v14 = 0; i = v3 + 32; HIBYTE(Src) = 1; v45 = v12; if ( (unsigned int)v12 <= 0 ) goto LABEL_131; v15 = v48 - (_DWORD)v13; do { if ( *v13 < (double)*(float *)((char *)v13 + v15) ) break; if ( *v13 > (double)*(float *)((char *)v13 + v15) ) HIBYTE(Src) = 0; ++v14; ++v13; } while ( v14 < *((_DWORD *)v3 + 18) ); if ( HIBYTE(Src) || v14 < (unsigned int)v45 ) { LABEL_131: v48 = 0; v16 = 0; } else { v16 = (int)i; } if ( v3[77] ) { if ( *(_BYTE *)(v4 + 8) ) { sub_931760(*(char **)(v4 + 4), 10, 4 * (_DWORD)v45, v3 + 16); return 1; } if ( v45 == (void *)3 ) { sub_8CCB20((_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[76], (int)(v3 + 16), v48, v16); return 1; } if ( v45 == (void *)4 ) { sub_8CCC20((_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[76], (int)(v3 + 16), v48, v16); return 1; } return 1; } if ( v44 ) { if ( v44 != 1 ) { if ( v44 == 2 ) { if ( *(_BYTE *)(v4 + 8) ) { sub_931760(*(char **)(v4 + 4), 7, 0x10u, v3 + 16); return 1; } sub_8CC8C0((_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[76], v3 + 16, v48, v16); } return 1; } if ( *(_BYTE *)(v4 + 8) ) sub_931760(*(char **)(v4 + 4), 6, 0xCu, v3 + 16); else sub_8CC7C0((_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[76], (int)(v3 + 16), v48, v16); result = 1; } else { if ( *(_BYTE *)(v4 + 8) ) sub_931760(*(char **)(v4 + 4), 5, 8u, v3 + 16); else sub_8CC6D0((_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[76], (int)(v3 + 16), v48, v16); result = 1; } break; case 3: v17 = (char *)*((_DWORD *)v3 + 2); Src = 0; sub_92C100((int)&Src, 0, v17); v18 = Src; *(_DWORD *)(v4 + 4) = Src; *(_DWORD *)(v4 + 28) = 1; if ( *(_BYTE *)(v4 + 8) ) { sub_931760(v18, 4, 4u, v3 + 16); result = 1; } else { if ( *((float *)v3 + 5) == *((float *)v3 + 6) ) sub_8CC600((_DWORD *)a3, v18, (unsigned __int8)v3[28], *((float *)v3 + 4), 0.0, 0.0); else sub_8CC600( (_DWORD *)a3, v18, (unsigned __int8)v3[28], *((float *)v3 + 4), *((float *)v3 + 6), *((float *)v3 + 5)); result = 1; } return result; case 4: v19 = (char *)*((_DWORD *)v3 + 2); Src = 0; sub_92C100((int)&Src, 0, v19); v20 = Src; *(_DWORD *)(v4 + 4) = Src; *(_DWORD *)(v4 + 28) = 1; if ( *(_BYTE *)(v4 + 8) ) sub_931760(v20, 1, 1u, v3 + 16); else sub_8CC4B0((_DWORD *)a3, v20, (unsigned __int8)v3[17], (unsigned __int8)v3[16]); return 1; case 5: v21 = (char *)*((_DWORD *)v3 + 2); Src = 0; sub_92C100((int)&Src, 0, v21); v22 = Src; *(_DWORD *)(v4 + 4) = Src; *(_DWORD *)(v4 + 28) = 1; if ( *(_BYTE *)(v4 + 8) ) { sub_931760(v22, 3, 4u, v3 + 16); result = 1; } else { v23 = *((_DWORD *)v3 + 6); if ( v23 == *((_DWORD *)v3 + 5) ) sub_8CC550((_DWORD *)a3, v22, (unsigned __int8)v3[28], *((_DWORD *)v3 + 4), 0, 0); else sub_8CC550((_DWORD *)a3, v22, (unsigned __int8)v3[28], *((_DWORD *)v3 + 4), v23, *((_DWORD *)v3 + 5)); result = 1; } return result; case 6: v24 = (char *)*((_DWORD *)v3 + 2); Src = 0; sub_92C100((int)&Src, 0, v24); v25 = Src; *(_DWORD *)(v4 + 4) = Src; *(_DWORD *)(v4 + 28) = 1; if ( *(_BYTE *)(v4 + 8) ) sub_931760(v25, 11, 4u, *((void **)v3 + 4)); v26 = *((_DWORD *)v3 + 16); *(_DWORD *)(v4 + 68) = v26; *(_DWORD *)(v4 + 36) = *((_DWORD *)v3 + 17); if ( v26 ) goto LABEL_12; v27 = (const char *)*((_DWORD *)v3 + 14); if ( v27 ) { if ( !_stricmp(v27, "base") ) { *(_DWORD *)(v4 + 48) = 0x200000; result = 1; } else if ( !_stricmp(*((const char **)v3 + 14), "dark") ) { *(_DWORD *)(v4 + 48) = 3145728; result = 1; } else if ( !_stricmp(*((const char **)v3 + 14), "detail") ) { *(_DWORD *)(v4 + 48) = 0x400000; result = 1; } else if ( !_stricmp(*((const char **)v3 + 14), "gloss") ) { *(_DWORD *)(v4 + 48) = &loc_500000; result = 1; } else if ( !_stricmp(*((const char **)v3 + 14), "glow") ) { *(_DWORD *)(v4 + 48) = &loc_600000; result = 1; } else if ( !_stricmp(*((const char **)v3 + 14), "bump") ) { *(_DWORD *)(v4 + 48) = 7340032; result = 1; } else { if ( !_stricmp(*((const char **)v3 + 14), "decal") ) { *(_DWORD *)(v4 + 48) = *((_DWORD *)v3 + 15) | 0x1000000; } else { *(_DWORD *)(v4 + 48) = *((_DWORD *)v3 + 15) | 0x2000000; sub_8CCD30( (_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[20], *((_DWORD *)v3 + 15), *((char **)v3 + 7)); } result = 1; } return result; } if ( *((_DWORD *)v3 + 7) ) { v28 = (char *)*((_DWORD *)v3 + 7); a3 = 0; sub_92C100((int)&a3, 0, v28); *(_DWORD *)(v4 + 40) = a3; *(_DWORD *)(v4 + 24) = *((_DWORD *)v3 + 6); return 1; } if ( !*((_DWORD *)v3 + 8) ) return 0; v29 = (char *)*((_DWORD *)v3 + 8); v45 = 0; sub_92C100((int)&v45, 0, v29); *(_DWORD *)(v4 + 40) = v45; v30 = (char *)*((_DWORD *)v3 + 9); a3 = 0; if ( v30 ) sub_92C100((int)&a3, 0, v30); else sub_92C100((int)&a3, 0, "tx_1_0"); *(_DWORD *)(v4 + 44) = a3; *(_DWORD *)(v4 + 24) = *((_DWORD *)v3 + 6); return 1; case 7: v31 = (char *)*((_DWORD *)v3 + 2); a3 = 0; sub_92C100((int)&a3, 0, v31); *(_DWORD *)(v4 + 4) = a3; result = 1; *(_DWORD *)(v4 + 28) = 1; *(_DWORD *)(v4 + 32) = *((_DWORD *)v3 + 5); *(_DWORD *)(v4 + 12) = *((_DWORD *)v3 + 4); *(_DWORD *)(v4 + 36) = *((_DWORD *)v3 + 6); return result; case 8: v32 = (char *)*((_DWORD *)v3 + 2); a3 = 0; sub_92C100((int)&a3, 0, v32); *(_DWORD *)(v4 + 4) = a3; result = 1; *(_DWORD *)(v4 + 28) = 1; *(_DWORD *)(v4 + 16) = *((_DWORD *)v3 + 3); *(_DWORD *)(v4 + 68) = *((_DWORD *)v3 + 4); *(_DWORD *)(v4 + 36) = *((_DWORD *)v3 + 5); return result; case 9: v33 = (char *)*((_DWORD *)v3 + 2); v34 = 0; v44 = 0; sub_92C100((int)&v44, 0, v33); *(_DWORD *)(v4 + 4) = v44; *(_DWORD *)(v4 + 28) = *((_DWORD *)v3 + 326); v35 = *((_DWORD *)v3 + 326) * *((_DWORD *)v3 + 324) * *((_DWORD *)v3 + 325); v45 = v3 + 656; v46 = v3 + 336; HIBYTE(Src) = 1; if ( (signed int)v35 < 4 ) goto LABEL_105; v48 = (int)(v3 + 668); v36 = (float *)((char *)v46 + 4); v34 = 0; i = (char *)(v3 + 656 - (_BYTE *)v46); while ( *(v36 - 1) >= (double)*(float *)(v48 - 12) ) { if ( *(v36 - 1) > (double)*(float *)(v48 - 12) ) HIBYTE(Src) = 0; if ( *v36 < (double)*(float *)((char *)v36 + (_DWORD)i) ) { ++v34; break; } if ( *v36 > (double)*(float *)((char *)v36 + (_DWORD)i) ) HIBYTE(Src) = 0; if ( v36[1] < (double)*(float *)(v48 - 4) ) { v34 += 2; break; } if ( v36[1] > (double)*(float *)(v48 - 4) ) HIBYTE(Src) = 0; if ( v36[2] < (double)*(float *)v48 ) { v34 += 3; break; } if ( v36[2] > (double)*(float *)v48 ) HIBYTE(Src) = 0; v48 += 16; v34 += 4; v36 += 4; if ( v34 >= v35 - 3 ) { LABEL_105: if ( v34 < v35 ) { v37 = (_BYTE *)v45 - (_BYTE *)v46; v38 = (float *)((char *)v46 + 4 * v34); for ( i = (char *)((_BYTE *)v45 - (_BYTE *)v46); *v38 >= (double)*(float *)((char *)v38 + v37); v37 = (int)i ) { if ( *v38 > (double)*(float *)&i[(_DWORD)v38] ) HIBYTE(Src) = 0; ++v34; ++v38; if ( v34 >= v35 ) break; } } break; } } if ( HIBYTE(Src) || v34 < v35 ) { v45 = 0; v46 = 0; } if ( *(_BYTE *)(v4 + 8) ) { v39 = sub_8CD170(v3); sub_931760(*(char **)(v4 + 4), 14, *((_DWORD *)v3 + 326) * v39, v3 + 16); result = 1; } else { v40 = 0; switch ( sub_8CD110((int)v3) ) { case 0: v40 = 4; break; case 1: v40 = 5; break; case 2: v40 = 6; break; case 3: v40 = 7; break; case 4: v40 = 10; break; default: break; } v41 = v46; v42 = v45; v43 = sub_8CD170(v3); sub_8CCDD0( (_DWORD *)a3, *(char **)(v4 + 4), (unsigned __int8)v3[1308], v3 + 16, *((_DWORD *)v3 + 326), v43, v40, v42, v41); result = 1; } return result; default: return 0; } return result; } //----- (008C7490) -------------------------------------------------------- int __thiscall sub_8C7490(int *this, int a2) { int *v2; // esi int result; // eax v2 = this; result = (*(int (__stdcall **)(int, _DWORD, int))(*(_DWORD *)a2 + 36))(a2, 0, this[1]); *v2 = result; return result; } //----- (008C74B0) -------------------------------------------------------- int __thiscall sub_8C74B0(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = this[13]; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v1[13] = 0; } return result; } //----- (008C74D0) -------------------------------------------------------- void sub_8C74D0() { operator delete(dword_BA5D70); dword_BA5D70 = 0; } //----- (008C74F0) -------------------------------------------------------- float *__thiscall sub_8C74F0(_DWORD *this, int a2, float a3) { float *result; // eax int v4; // edx int v5; // ecx result = (float *)a2; *(_DWORD *)a2 = *this; v4 = this[1]; v5 = this[2]; *(_DWORD *)(a2 + 4) = v4; *(_DWORD *)(a2 + 8) = v5; *result = *result * a3; result[1] = a3 * result[1]; *(float *)(a2 + 8) = a3 * *(float *)(a2 + 8); return result; } //----- (008C7530) -------------------------------------------------------- void __thiscall sub_8C7530(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[13]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[13] = 0; } if ( *((_BYTE *)v1 + 8) ) sub_931800(v1[1]); operator delete((void *)v1[1]); operator delete((void *)v1[10]); operator delete((void *)v1[11]); } //----- (008C7580) -------------------------------------------------------- void __userpurge sub_8C7580(_DWORD *a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, _DWORD *a9, int a10, int a11, int a12) { _DWORD *v12; // esi int v13; // edx int v14; // eax int v15; // ecx int v16; // edx void (__stdcall *v17)(int, int, float *); // eax int v18; // ecx int v19; // edx void (__stdcall *v20)(int, int, float *); // eax char v21; // [esp+Ch] [ebp-A4h] float v22; // [esp+14h] [ebp-9Ch] float v23; // [esp+18h] [ebp-98h] float v24; // [esp+1Ch] [ebp-94h] float v25; // [esp+20h] [ebp-90h] int v26; // [esp+24h] [ebp-8Ch] int v27; // [esp+28h] [ebp-88h] int v28; // [esp+2Ch] [ebp-84h] int v29; // [esp+30h] [ebp-80h] int v30; // [esp+34h] [ebp-7Ch] _BYTE *v31; // [esp+38h] [ebp-78h] int v32; // [esp+3Ch] [ebp-74h] int v33; // [esp+40h] [ebp-70h] int v34; // [esp+44h] [ebp-6Ch] int v35; // [esp+48h] [ebp-68h] int *v36; // [esp+4Ch] [ebp-64h] int v37; // [esp+50h] [ebp-60h] float v38; // [esp+54h] [ebp-5Ch] float v39; // [esp+58h] [ebp-58h] float v40; // [esp+5Ch] [ebp-54h] float v41; // [esp+60h] [ebp-50h] float v42; // [esp+64h] [ebp-4Ch] float v43; // [esp+68h] [ebp-48h] float v44; // [esp+6Ch] [ebp-44h] float v45; // [esp+70h] [ebp-40h] float v46; // [esp+74h] [ebp-3Ch] float v47; // [esp+78h] [ebp-38h] float v48; // [esp+7Ch] [ebp-34h] float v49; // [esp+80h] [ebp-30h] float v50; // [esp+84h] [ebp-2Ch] float v51; // [esp+88h] [ebp-28h] float v52; // [esp+8Ch] [ebp-24h] float v53; // [esp+90h] [ebp-20h] unsigned int v54; // [esp+A0h] [ebp-10h] int v55; // [esp+A4h] [ebp-Ch] int v56; // [esp+A8h] [ebp-8h] int retaddr; // [esp+B0h] [ebp+0h] v55 = a2; v56 = retaddr; v54 = (unsigned int)&v55 ^ dword_ABA360; v36 = (int *)a3; v12 = a1; v34 = a5; v30 = a6; v32 = a8; v13 = a1[9]; v33 = a4; v26 = a10; v14 = a1[17]; v35 = a7; v27 = a11; v37 = 0; v31 = sub_930960(a9, v14, v13); if ( sub_92C5A0(v12[4], &v28, &v29) ) { if ( !sub_92E8B0(&flt_BA5D30, 16 * v28, v12[4], (int)v31, v33, v34, v30, v35, v32, (int)a9, v26, v27) ) v37 = -2147483552; switch ( v29 ) { case 1: (*(void (__stdcall **)(int *, _DWORD, _DWORD))(*v36 + 120))(v36, *v12, LODWORD(flt_BA5D30)); break; case 4: v15 = *v36; v22 = flt_BA5D30; v23 = flt_BA5D34; v16 = *v12; v24 = flt_BA5D38; v17 = *(void (__stdcall **)(int, int, float *))(v15 + 136); v25 = flt_BA5D3C; v17((int)v36, v16, &v22); break; case 12: case 16: v38 = flt_BA5D30; v18 = *v36; v39 = flt_BA5D34; v19 = *v12; v40 = flt_BA5D38; v41 = flt_BA5D3C; v20 = *(void (__stdcall **)(int, int, float *))(v18 + 152); v42 = flt_BA5D40; v43 = flt_BA5D44; v44 = flt_BA5D48; v45 = flt_BA5D4C; v46 = flt_BA5D50; v47 = flt_BA5D54; v48 = flt_BA5D58; v49 = flt_BA5D5C; v50 = flt_BA5D60; v51 = flt_BA5D64; v52 = flt_BA5D68; v53 = flt_BA5D6C; v20((int)v36, v19, &v38); break; default: v37 = -2147483568; break; } } sub_7D50D1(v21); } // 8C7580: could not find valid save-restore pair for ebp // ABA360: using guessed type int dword_ABA360; // BA5D30: using guessed type float flt_BA5D30; // BA5D34: using guessed type float flt_BA5D34; // BA5D38: using guessed type float flt_BA5D38; // BA5D3C: using guessed type float flt_BA5D3C; // BA5D40: using guessed type float flt_BA5D40; // BA5D44: using guessed type float flt_BA5D44; // BA5D48: using guessed type float flt_BA5D48; // BA5D4C: using guessed type float flt_BA5D4C; // BA5D50: using guessed type float flt_BA5D50; // BA5D54: using guessed type float flt_BA5D54; // BA5D58: using guessed type float flt_BA5D58; // BA5D5C: using guessed type float flt_BA5D5C; // BA5D60: using guessed type float flt_BA5D60; // BA5D64: using guessed type float flt_BA5D64; // BA5D68: using guessed type float flt_BA5D68; // BA5D6C: using guessed type float flt_BA5D6C; //----- (008C77D0) -------------------------------------------------------- int __thiscall sub_8C77D0(_DWORD *this) { int result; // eax _DWORD *v2; // esi bool v3; // zf int v4; // ecx int v5; // eax int v6; // [esp+4h] [ebp-4h] result = dword_BA46D0; v2 = this; v3 = this[11] == 0; v4 = *(_DWORD *)(dword_BA46D0 + 132); v6 = 0; if ( v3 ) { v5 = v2[10]; if ( v5 ) result = D3DXCreateTextureFromFileExA(v4, v5, v2[14], v2[15], -1, 0, 0, 1, -1, -1, 0, 0, 0, &v6); else result = v6; if ( result >= 0 ) { result = v6; v2[13] = v6; } } return result; } // 944814: using guessed type int __stdcall D3DXCreateTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA46D0: using guessed type int dword_BA46D0; //----- (008C7830) -------------------------------------------------------- int __thiscall sub_8C7830(_DWORD *this) { int result; // eax _DWORD *v2; // esi bool v3; // zf int v4; // ecx int v5; // eax int v6; // [esp+4h] [ebp-4h] result = dword_BA46D0; v2 = this; v3 = this[11] == 0; v4 = *(_DWORD *)(dword_BA46D0 + 132); v6 = 0; if ( v3 ) { v5 = v2[10]; if ( v5 ) result = D3DXCreateVolumeTextureFromFileExA(v4, v5, v2[14], v2[15], v2[16], 1, 0, 0, 1, -1, -1, 0, 0, 0, &v6); else result = v6; if ( result >= 0 ) { result = v6; v2[13] = v6; } } return result; } // 94481A: using guessed type int __stdcall D3DXCreateVolumeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA46D0: using guessed type int dword_BA46D0; //----- (008C78A0) -------------------------------------------------------- int __thiscall sub_8C78A0(_DWORD *this) { int result; // eax _DWORD *v2; // esi bool v3; // zf int v4; // ecx int v5; // eax int v6; // [esp+4h] [ebp-4h] result = dword_BA46D0; v2 = this; v3 = this[11] == 0; v4 = *(_DWORD *)(dword_BA46D0 + 132); v6 = 0; if ( v3 ) { v5 = v2[10]; if ( v5 ) result = D3DXCreateCubeTextureFromFileExA(v4, v5, v2[14], -1, 0, 0, 1, -1, -1, 0, 0, 0, &v6); else result = v6; if ( result >= 0 ) { result = v6; v2[13] = v6; } } return result; } // 944820: using guessed type int __stdcall D3DXCreateCubeTextureFromFileExA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA46D0: using guessed type int dword_BA46D0; //----- (008C7900) -------------------------------------------------------- void __userpurge sub_8C7900(int *a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { int *v12; // edi int v13; // eax char v14; // dl int v15; // eax void (__stdcall *v16)(int, int, float *); // edx float v17; // ecx int v18; // ecx char v19; // dl const void *v20; // esi bool v21; // zf bool v22; // zf int v23; // edx int *v24; // ecx int v25; // eax unsigned __int16 v26; // dx double v27; // st6 char *v28; // esi int v29; // ecx float *v30; // eax int v31; // eax unsigned __int16 v32; // ax const void *v33; // esi char *v34; // edi int v35; // esi float *v36; // ecx int v37; // eax int v38; // esi int v39; // eax bool v40; // zf int v41; // ecx int v42; // esi int v43; // eax int v44; // esi int v45; // eax int v46; // esi int v47; // eax int v48; // esi int v49; // eax int v50; // esi int v51; // eax int v52; // esi int v53; // eax int v54; // esi int v55; // eax int v56; // esi int v57; // eax int v58; // esi int v59; // eax int v60; // esi int v61; // eax int v62; // esi float *v63; // ecx int v64; // eax int v65; // esi int v66; // eax _DWORD *v67; // esi int v68; // eax int v69; // esi int v70; // eax float *v71; // esi double v72; // st7 int *v73; // esi int v74; // ecx int v75; // edx void (__stdcall *v76)(int *, int, float *); // eax int *v77; // esi int v78; // ecx int v79; // edx void (__stdcall *v80)(int *, int, float *); // eax int *v81; // esi int v82; // ecx int v83; // edx void (__stdcall *v84)(int *, int, float *); // eax int v85; // esi int *v86; // esi int v87; // eax void (__stdcall *v88)(int *, int, float *); // ecx int v89; // ecx int v90; // edx void (__stdcall *v91)(int *, int, float *); // edx int v92; // eax double v93; // st7 int v94; // eax int v95; // esi int v96; // esi int v97; // esi _DWORD *v98; // esi int v99; // eax int v100; // eax int v101; // [esp-8h] [ebp-1A8h] int v102; // [esp-4h] [ebp-1A4h] float *v103; // [esp+0h] [ebp-1A0h] char v104; // [esp+Ch] [ebp-194h] float v105; // [esp+14h] [ebp-18Ch] float v106; // [esp+18h] [ebp-188h] float v107; // [esp+1Ch] [ebp-184h] int v108; // [esp+20h] [ebp-180h] float v109; // [esp+24h] [ebp-17Ch] float v110; // [esp+28h] [ebp-178h] float v111; // [esp+2Ch] [ebp-174h] float v112; // [esp+30h] [ebp-170h] int v113; // [esp+34h] [ebp-16Ch] int *v114; // [esp+38h] [ebp-168h] float v115; // [esp+3Ch] [ebp-164h] char v116; // [esp+42h] [ebp-15Eh] char v117; // [esp+43h] [ebp-15Dh] int v118; // [esp+44h] [ebp-15Ch] int v119; // [esp+84h] [ebp-11Ch] int v120; // [esp+C4h] [ebp-DCh] int v121; // [esp+104h] [ebp-9Ch] int v122; // [esp+144h] [ebp-5Ch] unsigned int v123; // [esp+190h] [ebp-10h] int v124; // [esp+194h] [ebp-Ch] int v125; // [esp+198h] [ebp-8h] int retaddr; // [esp+1A0h] [ebp+0h] v124 = a2; v125 = retaddr; v123 = (unsigned int)&v124 ^ dword_ABA360; v12 = a1; v114 = (int *)a3; v13 = a1[3]; v108 = a9; v113 = a4; v115 = *(float *)&a1; switch ( v13 ) { case 1: case 2: case 13: case 14: v14 = 0; v116 = 0; if ( v13 == 2 || v13 == 14 ) v14 = 1; if ( v13 == 13 || v13 == 14 ) v116 = 1; qmemcpy(&v122, (const void *)(dword_BA46D0 + 2000), 0x40u); if ( v14 ) D3DXMatrixInverse(&v122, 0, &v122); v15 = (int)v114; if ( v116 ) { v16 = *(void (__stdcall **)(int, int, float *))(*v114 + 176); v103 = (float *)&v122; v17 = v115; goto LABEL_205; } v18 = *v114; v102 = *(_DWORD *)LODWORD(v115); v101 = (int)v114; goto LABEL_13; case 3: case 4: case 15: case 16: v19 = 0; v116 = 0; if ( v13 == 4 || v13 == 16 ) v19 = 1; if ( v13 == 15 || v13 == 16 ) v116 = 1; v20 = (const void *)(dword_BA46D0 + 1936); goto LABEL_21; case 5: case 6: case 17: case 18: v19 = 0; v116 = 0; if ( v13 == 6 || v13 == 18 ) v19 = 1; if ( v13 == 17 || v13 == 18 ) v116 = 1; v20 = (const void *)(dword_BA46D0 + 1872); LABEL_21: v21 = v19 == 0; qmemcpy(&v122, v20, 0x40u); goto LABEL_22; case 7: case 8: case 19: case 20: v116 = 0; v117 = 0; if ( v13 == 8 || v13 == 20 ) v116 = 1; if ( v13 == 19 || v13 == 20 ) v117 = 1; qmemcpy(&v119, (const void *)(dword_BA46D0 + 1872), 0x40u); qmemcpy(&v120, (const void *)(dword_BA46D0 + 1936), 0x40u); D3DXMatrixMultiply(&v122, &v119, &v120); if ( v116 ) D3DXMatrixInverse(&v122, 0, &v122); v22 = v117 == 0; goto LABEL_25; case 9: case 10: case 21: case 22: v117 = 0; v116 = 0; if ( v13 == 10 || v13 == 22 ) v117 = 1; if ( v13 == 21 || v13 == 22 ) v116 = 1; qmemcpy(&v120, (const void *)(dword_BA46D0 + 1936), 0x40u); qmemcpy(&v119, (const void *)(dword_BA46D0 + 2000), 0x40u); D3DXMatrixMultiply(&v122, &v120, &v119); v21 = v117 == 0; goto LABEL_22; case 11: case 12: case 23: case 24: v117 = 0; v116 = 0; if ( v13 == 12 || v13 == 24 ) v117 = 1; if ( v13 == 23 || v13 == 24 ) v116 = 1; qmemcpy(&v120, (const void *)(dword_BA46D0 + 1872), 0x40u); qmemcpy(&v119, (const void *)(dword_BA46D0 + 1936), 0x40u); qmemcpy(&v118, (const void *)(dword_BA46D0 + 2000), 0x40u); D3DXMatrixMultiply(&v121, &v120, &v119); D3DXMatrixMultiply(&v122, &v121, &v118); v21 = v117 == 0; goto LABEL_22; case 25: case 26: case 27: case 28: if ( !a5 ) break; qmemcpy(&v122, *(const void **)(a5 + 40), 0x40u); v117 = 0; v116 = 0; if ( v13 == 26 || v13 == 28 ) v117 = 1; if ( v13 == 27 || v13 == 28 ) v116 = 1; qmemcpy(&v121, (const void *)(dword_BA46D0 + 1936), 0x40u); v24 = &v121; goto LABEL_66; case 29: case 30: case 31: case 32: if ( !a5 ) break; qmemcpy(&v122, *(const void **)(a5 + 40), 0x40u); v117 = 0; v116 = 0; if ( v13 == 30 || v13 == 32 ) v117 = 1; if ( v13 == 31 || v13 == 32 ) v116 = 1; qmemcpy(&v121, (const void *)(dword_BA46D0 + 1936), 0x40u); qmemcpy(&v118, (const void *)(dword_BA46D0 + 2000), 0x40u); D3DXMatrixMultiply(&v122, &v122, &v121); v24 = &v118; LABEL_66: D3DXMatrixMultiply(&v122, &v122, v24); v21 = v117 == 0; LABEL_22: if ( !v21 ) D3DXMatrixInverse(&v122, 0, &v122); v22 = v116 == 0; LABEL_25: v23 = *(_DWORD *)LODWORD(v115); goto LABEL_26; case 33: case 35: if ( a5 ) { v25 = *(_DWORD *)(a5 + 36); v113 = *(int *)(a5 + 32); v108 = v25; if ( dword_BA5D74 < (unsigned int)a1[8] ) { operator delete(dword_BA5D70); dword_BA5D70 = operator new(v12[8] << 6); dword_BA5D74 = v12[8]; } v26 = 0; if ( *(_WORD *)(a6 + 32) > 0u ) { v27 = 1.0; do { v28 = (char *)dword_BA5D70; v29 = v26 << 6; v30 = (float *)(v113 + 16 * v108 * *(unsigned __int16 *)(*(_DWORD *)(a6 + 4) + 2 * v26++)); *(float *)((char *)dword_BA5D70 + v29) = *v30; *(float *)&v28[v29 + 4] = v30[1]; *(float *)((char *)dword_BA5D70 + v29 + 8) = v30[2]; *(float *)((char *)dword_BA5D70 + v29 + 12) = v30[3]; *(float *)((char *)dword_BA5D70 + v29 + 16) = v30[4]; *(float *)((char *)dword_BA5D70 + v29 + 20) = v30[5]; *(float *)((char *)dword_BA5D70 + v29 + 24) = v30[6]; *(float *)((char *)dword_BA5D70 + v29 + 28) = v30[7]; *(float *)((char *)dword_BA5D70 + v29 + 32) = v30[8]; *(float *)((char *)dword_BA5D70 + v29 + 36) = v30[9]; *(float *)((char *)dword_BA5D70 + v29 + 40) = v30[10]; *(float *)((char *)dword_BA5D70 + v29 + 44) = v30[11]; *(float *)((char *)dword_BA5D70 + v29 + 48) = 0.0; *(float *)((char *)dword_BA5D70 + v29 + 52) = 0.0; *(float *)((char *)dword_BA5D70 + v29 + 56) = 0.0; *(float *)((char *)dword_BA5D70 + v29 + 60) = *(float *)&v27; } while ( v26 < *(_WORD *)(a6 + 32) ); } (*(void (__stdcall **)(int *, _DWORD, void *, _DWORD))(*v114 + 184))( v114, *(_DWORD *)LODWORD(v115), dword_BA5D70, v26); } break; case 34: case 36: if ( a5 ) { v31 = *(int *)(a5 + 36); v108 = *(_DWORD *)(a5 + 32); v113 = v31; if ( dword_BA5D74 < (unsigned int)a1[8] ) { operator delete(dword_BA5D70); dword_BA5D70 = operator new(v12[8] << 6); dword_BA5D74 = v12[8]; } v32 = 0; while ( v32 < *(_WORD *)(a6 + 32) ) { v33 = (const void *)(v108 + 16 * v113 * *(unsigned __int16 *)(*(_DWORD *)(a6 + 4) + 2 * v32)); v34 = (char *)dword_BA5D70 + 64 * v32++; qmemcpy(v34, v33, 0x40u); } (*(void (__stdcall **)(int *, _DWORD, void *, _DWORD))(*v114 + 184))( v114, *(_DWORD *)LODWORD(v115), dword_BA5D70, v32); } break; case 37: case 38: case 39: case 40: v35 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( !v35 ) goto LABEL_100; v37 = **(_DWORD **)(v35 + 40); if ( !v37 ) goto LABEL_100; v38 = *(_DWORD *)(v37 + 20); if ( !v38 ) goto LABEL_100; if ( *(_BYTE *)(v38 + 28) ) sub_878E10(*(float **)(v37 + 20)); v39 = v12[3]; v36 = (float *)(v38 + 32); if ( v39 == 38 || v39 == 40 ) LOBYTE(v115) = 1; if ( v39 == 39 ) goto LABEL_99; v40 = v39 == 40; goto LABEL_98; case 41: case 42: case 43: case 44: v42 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( !v42 ) goto LABEL_100; v43 = *(_DWORD *)(*(_DWORD *)(v42 + 40) + 20); if ( !v43 ) goto LABEL_100; v44 = *(_DWORD *)(v43 + 20); if ( !v44 ) goto LABEL_100; if ( *(_BYTE *)(v44 + 28) ) sub_878E10(*(float **)(v43 + 20)); v45 = v12[3]; v36 = (float *)(v44 + 32); if ( v45 == 42 || v45 == 44 ) LOBYTE(v115) = 1; if ( v45 == 43 ) goto LABEL_99; v40 = v45 == 44; goto LABEL_98; case 45: case 46: case 47: case 48: v46 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( !v46 ) goto LABEL_100; v47 = *(_DWORD *)(*(_DWORD *)(v46 + 40) + 8); if ( !v47 ) goto LABEL_100; v48 = *(_DWORD *)(v47 + 20); if ( !v48 ) goto LABEL_100; if ( *(_BYTE *)(v48 + 28) ) sub_878E10(*(float **)(v47 + 20)); v49 = v12[3]; v36 = (float *)(v48 + 32); if ( v49 == 46 || v49 == 48 ) LOBYTE(v115) = 1; if ( v49 == 47 ) goto LABEL_99; v40 = v49 == 48; goto LABEL_98; case 49: case 50: case 51: case 52: v50 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( !v50 ) goto LABEL_100; v51 = *(_DWORD *)(*(_DWORD *)(v50 + 40) + 12); if ( !v51 ) goto LABEL_100; v52 = *(_DWORD *)(v51 + 20); if ( !v52 ) goto LABEL_100; if ( *(_BYTE *)(v52 + 28) ) sub_878E10(*(float **)(v51 + 20)); v53 = v12[3]; v36 = (float *)(v52 + 32); if ( v53 == 50 || v53 == 52 ) LOBYTE(v115) = 1; if ( v53 == 51 ) goto LABEL_99; v40 = v53 == 52; goto LABEL_98; case 53: case 54: case 55: case 56: v54 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( !v54 ) goto LABEL_100; v55 = *(_DWORD *)(*(_DWORD *)(v54 + 40) + 16); if ( !v55 ) goto LABEL_100; v56 = *(_DWORD *)(v55 + 20); if ( !v56 ) goto LABEL_100; if ( *(_BYTE *)(v56 + 28) ) sub_878E10(*(float **)(v55 + 20)); v57 = v12[3]; v36 = (float *)(v56 + 32); if ( v57 == 54 || v57 == 56 ) LOBYTE(v115) = 1; if ( v57 == 55 ) goto LABEL_99; v40 = v57 == 56; goto LABEL_98; case 57: case 58: case 59: case 60: v58 = *(_DWORD *)(a8 + 40); v36 = 0; LOBYTE(v115) = 0; v117 = 0; if ( v58 ) { v59 = *(_DWORD *)(*(_DWORD *)(v58 + 40) + 20); if ( v59 ) { v60 = *(_DWORD *)(v59 + 20); if ( v60 ) { if ( *(_BYTE *)(v60 + 28) ) sub_878E10(*(float **)(v59 + 20)); v61 = v12[3]; v36 = (float *)(v60 + 32); if ( v61 == 58 || v61 == 60 ) LOBYTE(v115) = 1; if ( v61 == 59 ) goto LABEL_99; v40 = v61 == 60; LABEL_98: if ( v40 ) LABEL_99: v117 = 1; } } } LABEL_100: sub_92D550((float *)&v122, v36, SLOBYTE(v115), 0); goto LABEL_101; case 61: case 62: case 63: case 64: v62 = *(_DWORD *)(a8 + 40); v63 = 0; LOBYTE(v115) = 0; v117 = 0; if ( v62 ) { v64 = *(_DWORD *)(*(_DWORD *)(v62 + 40) + 4 * v12[9] + 24); if ( v64 ) { v65 = *(_DWORD *)(v64 + 20); if ( v65 ) { if ( *(_BYTE *)(v65 + 28) ) sub_878E10(*(float **)(v64 + 20)); v66 = v12[3]; v63 = (float *)(v65 + 32); if ( v66 == 62 || v66 == 64 ) LOBYTE(v115) = 1; if ( v66 == 63 || v66 == 64 ) v117 = 1; } } } sub_92D550((float *)&v122, v63, SLOBYTE(v115), 0); v22 = v117 == 0; v23 = *v12; LABEL_26: v18 = *v114; v102 = v23; v101 = (int)v114; if ( v22 ) LABEL_13: (*(void (__stdcall **)(int, int, int *))(v18 + 152))(v101, v102, &v122); else (*(void (__stdcall **)(int *, int, int *))(v18 + 176))(v114, v23, &v122); break; case 65: case 66: case 67: case 68: v67 = *(_DWORD **)(a8 + 40); v108 = 0; LOBYTE(v115) = 0; v117 = 0; if ( v67 ) { v68 = sub_814DE0(v67, a1[9]); if ( v68 ) { v69 = *(_DWORD *)(v68 + 20); if ( v69 ) { if ( *(_BYTE *)(v69 + 28) ) sub_878E10(*(float **)(v68 + 20)); v70 = v12[3]; v108 = v69 + 32; if ( v70 == 66 || v70 == 68 ) LOBYTE(v115) = 1; if ( v70 == 67 || v70 == 68 ) v117 = 1; } } } sub_92D550((float *)&v122, (float *)v108, SLOBYTE(v115), 0); LABEL_101: v15 = (int)v114; if ( v117 ) { v16 = *(void (__stdcall **)(int, int, float *))(*v114 + 176); v103 = (float *)&v122; v41 = *v12; LABEL_206: v16(v15, v41, v103); } else { (*(void (__stdcall **)(int *, int, int *))(*v114 + 152))(v114, *v12, &v122); } break; case 73: v71 = *(float **)(a8 + 20); if ( v71 ) { v109 = v71[11]; v110 = v71[12]; v111 = v71[13]; v72 = v71[21]; LABEL_180: v112 = v72; (*(void (__stdcall **)(int *, int, float *))(*v114 + 136))(v114, *v12, &v109); } break; case 74: v73 = *(int **)(a8 + 20); if ( v73 ) { v74 = *v114; v109 = *((float *)v73 + 8); v110 = *((float *)v73 + 9); v75 = *v12; v111 = *((float *)v73 + 10); v76 = *(void (__stdcall **)(int *, int, float *))(v74 + 136); v112 = *((float *)v73 + 21); v76(v114, v75, &v109); } break; case 75: v77 = *(int **)(a8 + 20); if ( v77 ) { v78 = *v114; v109 = *((float *)v77 + 14); v110 = *((float *)v77 + 15); v79 = *v12; v111 = *((float *)v77 + 16); v80 = *(void (__stdcall **)(int *, int, float *))(v78 + 136); v112 = *((float *)v77 + 21); v80(v114, v79, &v109); } break; case 76: v81 = *(int **)(a8 + 20); if ( v81 ) { v82 = *v114; v109 = *((float *)v81 + 17); v110 = *((float *)v81 + 18); v83 = *v12; v111 = *((float *)v81 + 19); v84 = *(void (__stdcall **)(int *, int, float *))(v82 + 136); v112 = *((float *)v81 + 21); v84(v114, v83, &v109); } break; case 77: v85 = *(_DWORD *)(a8 + 20); if ( v85 ) (*(void (__stdcall **)(int *, int, _DWORD))(*v114 + 120))(v114, *a1, *(float *)(v85 + 80)); break; case 80: v86 = v114; v87 = *a1; v109 = 1.0; v88 = *(void (__stdcall **)(int *, int, float *))(*v114 + 136); v110 = -0.16161616; v111 = 0.0083333002; v112 = -0.00019840999; v88(v114, v87, &v109); goto LABEL_191; case 81: v86 = v114; LABEL_191: v89 = *v12; v90 = *v86; v109 = -0.5; v91 = *(void (__stdcall **)(int *, int, float *))(v90 + 136); v110 = -0.041666664; v111 = -0.0013888889; v112 = 0.000024801588; v91(v86, v89, &v109); break; case 82: case 83: case 84: case 85: case 86: v92 = sub_85AA60((_DWORD *)v113, off_AC6210); if ( v92 ) { v93 = *(float *)(v92 + 12); v94 = v12[3] - 82; v115 = v93; switch ( v94 ) { case 0: (*(void (__stdcall **)(int *, int, float))(*v114 + 120))(v114, *v12, COERCE_FLOAT(LODWORD(v115))); break; case 1: v95 = *v114; *(float *)&v113 = sin(v115); (*(void (__stdcall **)(int *, int, int))(v95 + 120))(v114, *v12, v113); break; case 2: v96 = *v114; *(float *)&v113 = cos(v115); (*(void (__stdcall **)(int *, int, int))(v96 + 120))(v114, *v12, v113); break; case 3: v97 = *v114; *(float *)&v113 = tan(v115); (*(void (__stdcall **)(int *, int, int))(v97 + 120))(v114, *v12, v113); break; case 4: v109 = v115; *(float *)&v113 = sin(v115); v110 = *(float *)&v113; *(float *)&v113 = cos(v115); v111 = *(float *)&v113; *(float *)&v113 = tan(v115); v72 = *(float *)&v113; goto LABEL_180; default: goto LABEL_207; } } break; case 87: v109 = 0.0; v110 = 0.0; v111 = 0.0; v112 = 1.0; if ( v108 ) { v98 = *(_DWORD **)(v108 + 12); while ( v98 ) { v99 = v98[1]; v98 = (_DWORD *)*v98; v100 = sub_402BA0((int)dword_BA474C, v99); if ( v100 ) { sub_8C74F0((_DWORD *)(v100 + 228), (int)&v105, *(float *)(v100 + 224)); v109 = v109 + v105; v110 = v110 + v106; v111 = v111 + v107; } } } v15 = (int)v114; v16 = *(void (__stdcall **)(int, int, float *))(*v114 + 136); v103 = &v109; v17 = *(float *)&v12; LABEL_205: v41 = *(_DWORD *)LODWORD(v17); goto LABEL_206; default: break; } LABEL_207: sub_7D50D1(v104); } // 8C7900: could not find valid save-restore pair for ebp // 94480E: using guessed type int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA46D0: using guessed type int dword_BA46D0; // BA5D74: using guessed type int dword_BA5D74; //----- (008C8850) -------------------------------------------------------- int __userpurge sub_8C8850@(int a1@, int a2@, _DWORD *a3, int a4) { int v4; // ecx char *v5; // eax int v6; // eax int v7; // eax int v9; // eax int v10; // [esp-2h] [ebp-4h] v10 = a1; v4 = a4 & 0xF000000; if ( !(a4 & 0xF000000) ) { v5 = (char *)(a4 & 0xF00000); if ( (a4 & 0xF00000u) > (unsigned int)&loc_500000 ) { if ( v5 == (char *)&loc_600000 ) { v6 = *(_DWORD *)(a3[10] + 16); goto LABEL_22; } if ( v5 == (_BYTE *)&loc_6FFFFF + 1 ) { v6 = *(_DWORD *)(a3[10] + 20); goto LABEL_22; } } else { if ( v5 == (char *)&loc_500000 ) { v6 = *(_DWORD *)(a3[10] + 12); goto LABEL_22; } if ( v5 == (char *)0x200000 ) { v6 = *(_DWORD *)a3[10]; goto LABEL_22; } if ( v5 == (char *)3145728 ) { v6 = *(_DWORD *)(a3[10] + 4); goto LABEL_22; } if ( v5 == (char *)0x400000 ) { v6 = *(_DWORD *)(a3[10] + 8); goto LABEL_22; } } return 0; } if ( v4 == 0x1000000 ) { if ( (unsigned __int16)a4 < (unsigned int)(a3[12] - 6) ) { v6 = *(_DWORD *)(a3[10] + 4 * (unsigned __int16)a4 + 24); goto LABEL_22; } return 0; } if ( v4 != 0x2000000 ) return 0; v7 = a3[16]; if ( !v7 || (unsigned int)(unsigned __int16)a4 >= *(_DWORD *)(v7 + 12) ) return 0; v6 = *(_DWORD *)(*(_DWORD *)(v7 + 4) + 4 * (unsigned __int16)a4); LABEL_22: if ( !v6 ) return 0; v9 = *(_DWORD *)(v6 + 4); if ( !v9 ) return 0; return (*(int (__stdcall **)(int, char *, char *, char *, int))(**(_DWORD **)(dword_BA46D0 + 1728) + 8))( v9, (char *)&v10 + 3, (char *)&a4 + 3, (char *)&a3 + 3, a2); } // 8C8850: could not find valid save-restore pair for esi // BA46D0: using guessed type int dword_BA46D0; //----- (008C8960) -------------------------------------------------------- void __thiscall sub_8C8960(int this, int a2, _DWORD *a3, int a4, int a5, int a6, unsigned int a7, _DWORD *a8, int a9, float *a10, int a11) { _DWORD *v11; // ebx int v12; // edi char *v13; // esi int v14; // edx int v15; // eax int v16; // eax int v17; // eax bool v18; // zf int v19; // ST1C_4 int v20; // eax float v21; // ST44_4 float v22; // ST48_4 float v23; // ST4C_4 double v24; // st7 int v25; // esi int v26; // eax int v27; // eax float *v28; // esi double v29; // st7 float v30; // ST44_4 float v31; // ST48_4 double v32; // st7 float v33; // ST4C_4 float *v34; // eax double v35; // st7 unsigned int v36; // edx void (__stdcall *v37)(int, _DWORD, float *); // eax int v38; // esi int v39; // eax _DWORD *v40; // eax unsigned int v41; // edx int v42; // ecx _DWORD *v43; // eax unsigned int v44; // edx int v45; // eax char v46; // [esp+2Dh] [ebp-63h] char v47; // [esp+2Eh] [ebp-62h] char v48; // [esp+2Fh] [ebp-61h] float v49; // [esp+30h] [ebp-60h] float v50; // [esp+34h] [ebp-5Ch] float v51; // [esp+38h] [ebp-58h] float v52; // [esp+3Ch] [ebp-54h] unsigned int v53; // [esp+40h] [ebp-50h] unsigned int v54; // [esp+44h] [ebp-4Ch] float *v55; // [esp+48h] [ebp-48h] float v56; // [esp+4Ch] [ebp-44h] float v57; // [esp+50h] [ebp-40h] float v58; // [esp+54h] [ebp-3Ch] float v59; // [esp+58h] [ebp-38h] float v60; // [esp+5Ch] [ebp-34h] float v61; // [esp+60h] [ebp-30h] float v62; // [esp+64h] [ebp-2Ch] float v63; // [esp+68h] [ebp-28h] float v64; // [esp+6Ch] [ebp-24h] int v65; // [esp+70h] [ebp-20h] int v66; // [esp+74h] [ebp-1Ch] signed int v67; // [esp+78h] [ebp-18h] float v68; // [esp+7Ch] [ebp-14h] float v69; // [esp+80h] [ebp-10h] float v70; // [esp+84h] [ebp-Ch] float v71; // [esp+88h] [ebp-8h] int savedregs; // [esp+90h] [ebp+0h] v11 = (_DWORD *)this; v55 = a10; v12 = a2; v13 = 0; v54 = a7; v53 = a2; if ( *(_DWORD *)(this + 12) ) { sub_8C7900((int *)this, (int)&savedregs, a2, (int)a3, a4, a5, a6, v54, (int)a8, a9, (int)v55, a11); return; } if ( *(_DWORD *)(this + 16) ) { sub_8C7580((_DWORD *)this, (int)&savedregs, a2, (int)a3, a4, a5, a6, v54, a8, a9, (int)v55, a11); return; } v14 = *(_DWORD *)(this + 68); if ( v14 || *(_DWORD *)(this + 48) ) { switch ( v14 ) { case 5: v39 = a8[6]; goto LABEL_119; case 6: v40 = (_DWORD *)a8[5]; v41 = 0; if ( !v40 ) goto LABEL_122; while ( 2 ) { if ( v40 ) { v42 = v40[1]; v40 = (_DWORD *)*v40; } else { v42 = 0; } v13 = (char *)v41; v53 = v41 + 1; if ( v41 == v11[9] ) goto LABEL_108; if ( v40 ) { v41 = v53; continue; } goto LABEL_122; } case 7: v43 = (_DWORD *)a8[4]; v44 = 0; if ( !v43 ) goto LABEL_122; break; case 8: v39 = a8[7]; goto LABEL_119; default: goto LABEL_122; } while ( 1 ) { if ( v43 ) { v42 = v43[1]; v43 = (_DWORD *)*v43; } else { v42 = 0; } v13 = (char *)v44; v53 = v44 + 1; if ( v44 == v11[9] ) break; if ( !v43 ) goto LABEL_122; v44 = v53; } LABEL_108: v39 = v42; LABEL_119: if ( v39 ) { v45 = *(_DWORD *)(v39 + 320); if ( v45 ) { v13 = &v46; v17 = (*(int (__stdcall **)(int, char *, char *, char *))(**(_DWORD **)(dword_BA46D0 + 1728) + 8))( v45, &v46, &v47, &v48); if ( v17 ) goto LABEL_125; } } LABEL_122: if ( !v11[12] ) return; v17 = sub_8C8850((int)v11, (int)v13, *(_DWORD **)(v54 + 40), v11[12]); v18 = v17 == 0; goto LABEL_124; } v15 = *(_DWORD *)(this + 20); if ( !v15 ) return; if ( v15 != 6 ) { if ( !a3 ) return; if ( *(_BYTE *)(this + 8) ) { v19 = *(_DWORD *)(this + 4); v54 = 0; v55 = 0; if ( !sub_931870(v19, &v54, &v55) ) return; v20 = v11[5]; if ( v20 == 3 ) { if ( v54 == 4 ) (*(void (__stdcall **)(int, _DWORD, float))(*(_DWORD *)a2 + 120))(a2, *v11, *v55); return; } if ( v20 == 2 ) { if ( v54 == 8 ) { v49 = *v55; v50 = v55[1]; v51 = 0.0; v52 = 1.0; } else if ( v54 == 12 ) { v49 = *v55; v50 = v55[1]; v51 = v55[2]; v52 = 1.0; } else { v21 = v55[1]; v22 = v55[2]; v23 = v55[3]; v49 = *v55; v50 = v21; v51 = v22; v52 = v23; } (*(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)a2 + 136))(a2, *v11, &v49); return; } if ( v20 != 1 ) { switch ( v20 ) { case 5: if ( v54 == 4 ) (*(void (__stdcall **)(int, _DWORD, float))(*(_DWORD *)a2 + 104))(a2, *v11, COERCE_FLOAT(*(_DWORD *)v55)); break; case 4: if ( v54 == 1 ) (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a2 + 88))(a2, *v11, *(unsigned __int8 *)v55); break; case 9: (*(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)a2 + 16))(a2, *v11, &v61); if ( LODWORD(v64) == 3 ) { if ( v63 == 0.0 ) { (*(void (__stdcall **)(int, _DWORD, float *, unsigned int))(*(_DWORD *)a2 + 128))( a2, *v11, v55, v54 >> 2); } else if ( LODWORD(v63) == 1 ) { if ( v66 != 4 || v65 != 1 ) { sub_8CD420((int)v55, (int)&unk_BA5D78, v65, v66, v67); (*(void (__stdcall **)(int, _DWORD, void *, int))(*(_DWORD *)a2 + 144))( a2, *v11, &unk_BA5D78, v65 * v67); } else { (*(void (__stdcall **)(int, _DWORD, float *, unsigned int))(*(_DWORD *)a2 + 144))( a2, *v11, v55, v54 >> 4); } } } break; } return; } if ( v54 == 64 ) { qmemcpy(&v56, v55, 0x40u); v12 = v53; LABEL_41: (*(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)v12 + 152))(v12, *v11, &v56); return; } v56 = *v55; v57 = v55[1]; v58 = v55[2]; if ( v11[14] == 3 ) { v24 = 0.0; v59 = 0.0; v60 = v55[3]; v61 = v55[4]; v62 = v55[5]; v63 = 0.0; v64 = v55[6]; v65 = *((int *)v55 + 7); v66 = *((int *)v55 + 8); *(float *)&v67 = 0.0; if ( v11[15] != 3 ) { v68 = v55[9]; v69 = v55[10]; v24 = v55[11]; LABEL_40: v70 = v24; v71 = 1.0; goto LABEL_41; } } else { v59 = v55[3]; v60 = v55[4]; v61 = v55[5]; v62 = v55[6]; v63 = v55[7]; v64 = v55[8]; v65 = *((int *)v55 + 9); v66 = *((int *)v55 + 10); v67 = *((signed int *)v55 + 11); v24 = 0.0; } v68 = v24; v69 = v24; goto LABEL_40; } v25 = sub_85AA60(a3, *(const char **)(this + 4)); if ( !v25 ) return; v26 = v11[5]; if ( v26 == 3 ) { (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a2 + 120))(a2, *v11, *(float *)(v25 + 12)); return; } if ( v26 == 2 ) { if ( sub_402B70((int)dword_BA4A34, v25) ) { v27 = *(_DWORD *)(v25 + 12); v28 = *(float **)(v25 + 16); if ( v27 == 2 ) { v49 = *v28; v50 = v28[1]; v51 = 0.0; LABEL_64: v29 = 1.0; LABEL_71: v52 = v29; goto LABEL_72; } if ( v27 == 3 ) { v49 = *v28; v50 = v28[1]; v51 = v28[2]; v29 = 1.0; goto LABEL_71; } v30 = v28[1]; v31 = v28[2]; v32 = v28[3]; v49 = *v28; v33 = v32; v50 = v30; v51 = v31; v52 = v33; } else if ( sub_402B70((int)dword_BA4A3C, v25) ) { v18 = v11[7] == 3; v49 = *(float *)(v25 + 12); v50 = *(float *)(v25 + 16); v51 = *(float *)(v25 + 20); if ( !v18 ) { v29 = *(float *)(v25 + 24); goto LABEL_71; } goto LABEL_64; } LABEL_72: (*(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)a2 + 136))(a2, *v11, &v49); return; } if ( v26 != 1 ) { switch ( v26 ) { case 5: (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a2 + 104))(a2, *v11, *(_DWORD *)(v25 + 12)); break; case 4: (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a2 + 88))(a2, *v11, *(unsigned __int8 *)(v25 + 12)); break; case 9: if ( sub_402B70((int)dword_BA4A34, v25) ) { v36 = *(_DWORD *)(v25 + 12); v37 = *(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)a2 + 16); v38 = *(_DWORD *)(v25 + 16); v53 = v36; v37(a2, *v11, &v61); if ( LODWORD(v64) == 3 ) { if ( v63 == 0.0 ) { (*(void (__stdcall **)(int, _DWORD, int, unsigned int))(*(_DWORD *)a2 + 128))(a2, *v11, v38, v53); } else if ( LODWORD(v63) == 1 ) { if ( v66 != 4 || v65 != 1 ) { sub_8CD420(v38, (int)&unk_BA5D78, v65, v66, v67); (*(void (__stdcall **)(int, _DWORD, void *, int))(*(_DWORD *)a2 + 144))( a2, *v11, &unk_BA5D78, v65 * v67); } else { (*(void (__stdcall **)(int, _DWORD, int, unsigned int))(*(_DWORD *)a2 + 144))(a2, *v11, v38, v53 >> 2); } } } } break; } return; } v34 = *(float **)(v25 + 16); if ( *(_DWORD *)(v25 + 12) == 16 ) { qmemcpy(&v56, v34, 0x40u); v12 = v53; LABEL_82: (*(void (__stdcall **)(int, _DWORD, float *))(*(_DWORD *)v12 + 152))(v12, *v11, &v56); return; } v56 = *v34; v57 = v34[1]; v58 = v34[2]; if ( v11[14] == 3 ) { v35 = 0.0; v59 = 0.0; v60 = v34[3]; v61 = v34[4]; v62 = v34[5]; v63 = 0.0; v64 = v34[6]; v65 = *((int *)v34 + 7); v66 = *((int *)v34 + 8); *(float *)&v67 = 0.0; if ( v11[15] != 3 ) { v68 = v34[9]; v69 = v34[10]; v35 = v34[11]; LABEL_81: v70 = v35; v71 = 1.0; goto LABEL_82; } } else { v59 = v34[3]; v60 = v34[4]; v61 = v34[5]; v62 = v34[6]; v63 = v34[7]; v64 = v34[8]; v65 = *((int *)v34 + 9); v66 = *((int *)v34 + 10); v67 = *((signed int *)v34 + 11); v35 = 0.0; } v68 = v35; v69 = v35; goto LABEL_81; } v16 = *(_DWORD *)(this + 24); if ( v16 == 2 ) { if ( !*(_DWORD *)(this + 52) ) { sub_8C7830((_DWORD *)this); v17 = v11[13]; v18 = v17 == 0; goto LABEL_124; } } else if ( v16 == 3 ) { if ( !*(_DWORD *)(this + 52) ) { sub_8C78A0((_DWORD *)this); v17 = v11[13]; v18 = v17 == 0; goto LABEL_124; } } else if ( v16 == 1 && !*(_DWORD *)(this + 52) ) { sub_8C77D0((_DWORD *)this); } v17 = v11[13]; v18 = v17 == 0; LABEL_124: if ( !v18 ) LABEL_125: (*(void (__stdcall **)(int, _DWORD, int))(*(_DWORD *)a2 + 208))(a2, *v11, v17); } // BA46D0: using guessed type int dword_BA46D0; //----- (008C9270) -------------------------------------------------------- void **__thiscall sub_8C9270(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // ecx unsigned int v5; // eax int v6; // esi void **v7; // eax void **v8; // edi int v9; // [esp+4h] [ebp-4h] v2 = this; v3 = this[15]; if ( v3 ) return sub_8C9B30(v3, a2); v5 = 0; v9 = 0; if ( !v2[12] ) return 0; while ( 1 ) { v6 = *(_DWORD *)(v2[10] + 4 * v5); if ( v6 ) break; LABEL_7: v9 = ++v5; if ( v5 >= v2[12] ) return 0; } v7 = sub_8C9B30(v6, a2); v8 = v7; if ( !v7 ) { v5 = v9; goto LABEL_7; } v2[15] = v6; sub_92BCF0(v7, -1); return v8; } //----- (008C92F0) -------------------------------------------------------- int __thiscall sub_8C92F0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int result; // eax _DWORD *v4; // ecx v1 = this; v2 = 0; if ( this[12] ) { do { result = v1[10]; v4 = *(_DWORD **)(result + 4 * v2); if ( v4 ) result = sub_8C9A50(v4); ++v2; } while ( v2 < v1[12] ); } return result; } //----- (008C9320) -------------------------------------------------------- int __thiscall sub_8C9320(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // ebx int v5; // esi int v6; // eax int v7; // esi int v8; // eax int i; // ebx _DWORD *v10; // eax _DWORD *v11; // esi unsigned int v12; // eax _DWORD *v13; // ecx int v14; // eax _DWORD *v15; // esi int v16; // ebx int v17; // eax int v18; // ebx int v19; // eax int v20; // ebx int v21; // eax int v22; // ebx int v23; // eax int v24; // ebx int v25; // eax int v26; // ebx int v27; // eax int v28; // ebx int v29; // eax _DWORD *v30; // eax int v31; // ebx int v32; // eax int v33; // ebx int v34; // eax int v35; // ebx unsigned __int8 v36; // al int v37; // ebx unsigned __int8 v38; // al unsigned int v40; // [esp+4h] [ebp-4h] int v41; // [esp+10h] [ebp+8h] int v42; // [esp+10h] [ebp+8h] int v43; // [esp+10h] [ebp+8h] int v44; // [esp+10h] [ebp+8h] int v45; // [esp+10h] [ebp+8h] int v46; // [esp+10h] [ebp+8h] int v47; // [esp+10h] [ebp+8h] _DWORD *v48; // [esp+10h] [ebp+8h] int v49; // [esp+10h] [ebp+8h] int v50; // [esp+10h] [ebp+8h] int v51; // [esp+10h] [ebp+8h] v2 = this; if ( this[16] ) return this[16]; v3 = operator new(0x68u); if ( v3 ) v4 = sub_956B60(v3); else v4 = 0; v5 = v2[16]; if ( (_DWORD *)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v2[16] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[16] + 12))(v2[2]); v6 = *(_DWORD *)v2[10]; if ( v6 ) { v7 = v2[16]; v8 = (*(int (**)(void))(**(_DWORD **)(v6 + 68) + 8))(); (*(void (__thiscall **)(int, int))(*(_DWORD *)v7 + 16))(v7, v8); } sub_9568D0((_DWORD *)v2[16], v2[13]); for ( i = sub_8CC330(a2); i; i = sub_8CC350(a2) ) { v10 = operator new(0xE4u); if ( v10 ) v11 = sub_956E30(v10); else v11 = 0; (*(void (__thiscall **)(_DWORD *, int))(*v11 + 20))(v11, i); sub_956C20((_DWORD *)v2[16], (int)v11); } v12 = 0; v40 = 0; if ( v2[12] ) { do { v13 = *(_DWORD **)(v2[10] + 4 * v12); if ( v13 ) { v14 = sub_9646B0(v13); v15 = (_DWORD *)v14; v16 = *(_DWORD *)v2[16]; v41 = v2[16]; v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 20))(v14); (*(void (__thiscall **)(int, int))(v16 + 56))(v41, v17); v18 = *(_DWORD *)v2[16]; v42 = v2[16]; v19 = (*(int (__thiscall **)(_DWORD *))(*v15 + 24))(v15); (*(void (__thiscall **)(int, int))(v18 + 56))(v42, v19); v20 = *(_DWORD *)v2[16]; v43 = v2[16]; v21 = (*(int (__thiscall **)(_DWORD *))(*v15 + 28))(v15); (*(void (__thiscall **)(int, int))(v20 + 60))(v43, v21); v22 = *(_DWORD *)v2[16]; v44 = v2[16]; v23 = (*(int (__thiscall **)(_DWORD *))(*v15 + 32))(v15); (*(void (__thiscall **)(int, int))(v22 + 60))(v44, v23); v24 = *(_DWORD *)v2[16]; v45 = v2[16]; v25 = (*(int (__thiscall **)(_DWORD *))(*v15 + 36))(v15); (*(void (__thiscall **)(int, int))(v24 + 64))(v45, v25); v26 = *(_DWORD *)v2[16]; v46 = v2[16]; v27 = (*(int (__thiscall **)(_DWORD *))(*v15 + 40))(v15); (*(void (__thiscall **)(int, int))(v26 + 64))(v46, v27); v28 = *(_DWORD *)v2[16]; v47 = v2[16]; v29 = (*(int (__thiscall **)(_DWORD *))(*v15 + 44))(v15); (*(void (__thiscall **)(int, int))(v28 + 68))(v47, v29); v30 = (_DWORD *)v2[16]; v48 = v30; v31 = *v30; v32 = sub_941BF0(v15); (*(void (__thiscall **)(_DWORD *, int))(v31 + 84))(v48, v32); v33 = *(_DWORD *)v2[16]; v49 = v2[16]; v34 = sub_956D00(v15); (*(void (__thiscall **)(int, int))(v33 + 88))(v49, v34); v35 = *(_DWORD *)v2[16]; v50 = v2[16]; v36 = sub_9338D0(v15); (*(void (__thiscall **)(int, _DWORD))(v35 + 92))(v50, v36); v37 = *(_DWORD *)v2[16]; v51 = v2[16]; v38 = sub_956D10(v15); (*(void (__thiscall **)(int, _DWORD))(v37 + 96))(v51, v38); sub_956B30((_DWORD *)v2[16], v40, (char)v15); v12 = v40; } v40 = ++v12; } while ( v12 < v2[12] ); } return v2[16]; } //----- (008C9590) -------------------------------------------------------- void **__thiscall sub_8C9590(_DWORD *this, int a2, unsigned int a3) { int v3; // eax void **result; // eax if ( a3 < this[12] && (v3 = *(_DWORD *)(this[10] + 4 * a3)) != 0 ) result = sub_8C9B30(v3, a2); else result = sub_8C9270(this, a2); return result; } //----- (008C95D0) -------------------------------------------------------- void __thiscall sub_8C95D0(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A3FDD0: using guessed type void *NiTArray>::`vftable'; //----- (008C9630) -------------------------------------------------------- void *__thiscall sub_8C9630(void *this, char a2) { void *v2; // esi v2 = this; sub_8C95D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C9660) -------------------------------------------------------- _DWORD *__thiscall sub_8C9660(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v1[2] = 0; *v1 = &NiD3DXEffectTechniqueSet::`vftable'; v1[11] = 0; v1[12] = 0; v1[13] = 0; v1[10] = 0; v1[9] = &NiTArray>::`vftable'; v1[14] = 1; v1[15] = 0; v1[16] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A3FDD0: using guessed type void *NiTArray>::`vftable'; // A3FDD8: using guessed type void *NiD3DXEffectTechniqueSet::`vftable'; //----- (008C96B0) -------------------------------------------------------- LONG __thiscall sub_8C96B0(_DWORD *this) { _DWORD *v1; // esi int v2; // ST04_4 int v3; // edi v1 = this; v2 = this[2]; *this = &NiD3DXEffectTechniqueSet::`vftable'; sub_92BE70("Killing NiD3DXEffectTechniqueSet %s\n", v2); sub_80C6B0(v1 + 9); operator delete((void *)v1[2]); v3 = v1[16]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8C95D0(v1 + 9); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A3FDD8: using guessed type void *NiD3DXEffectTechniqueSet::`vftable'; //----- (008C9720) -------------------------------------------------------- void *__thiscall sub_8C9720(void *this, char a2) { void *v2; // esi v2 = this; sub_8C96B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C9750) -------------------------------------------------------- LONG __thiscall sub_8C9750(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi unsigned int v4; // edi LONG result; // eax v2 = a2; v3 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = *(_DWORD *)(v2 + 12); if ( v4 >= v3[11] ) sub_81A750(v3 + 9, v4 + v3[14]); sub_7FFF10(v3 + 9, v4, &a2); result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); return result; } //----- (008C97B0) -------------------------------------------------------- char __thiscall sub_8C97B0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // eax char result; // al v2 = this; sub_92C100((int)(this + 2), 0, *(char **)(a2 + 4)); v3 = operator new(0x38u); if ( v3 ) v4 = sub_956C70(v3); else v4 = 0; v2[17] = v4; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v4 + 12))(v4, *(_DWORD *)a2); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 16))(*(_DWORD *)(a2 + 8)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 56))(*(_DWORD *)(a2 + 16)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 60))(*(_DWORD *)(a2 + 20)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 64))(*(_DWORD *)(a2 + 24)); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[17] + 76))(1); (*(void (__stdcall **)(signed int))(*(_DWORD *)v2[17] + 80))(1); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 84))(*(_DWORD *)(a2 + 28)); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2[17] + 88))(*(_DWORD *)(a2 + 32)); v2[3] = *(_DWORD *)(a2 + 12); *((_BYTE *)v2 + 61) = *(_BYTE *)(a2 + 36); *((_BYTE *)v2 + 62) = *(_BYTE *)(a2 + 37); result = *(_BYTE *)(a2 + 38); *((_BYTE *)v2 + 63) = result; *((_BYTE *)v2 + 64) = *(_BYTE *)(a2 + 39); return result; } //----- (008C9950) -------------------------------------------------------- char __thiscall sub_8C9950(_DWORD *this, unsigned int a2) { int v2; // eax char result; // al v2 = this[13]; if ( v2 && a2 < this[12] ) result = *(_BYTE *)(v2 + a2); else result = 0; return result; } //----- (008C9970) -------------------------------------------------------- int __thiscall sub_8C9970(_DWORD **this, int *a2) { _DWORD **v2; // esi int v3; // ebx int v4; // eax int result; // eax _DWORD *v6; // eax _DWORD *v7; // ST04_4 unsigned int v8; // ebx int v9; // eax int v10; // eax bool v11; // cl char v12; // [esp+Ch] [ebp-1Ch] int v13; // [esp+14h] [ebp-14h] int v14; // [esp+18h] [ebp-10h] char v15; // [esp+1Ch] [ebp-Ch] size_t v16; // [esp+20h] [ebp-8h] v2 = this; v3 = *a2; v4 = (*(int (**)(void))(*this[17] + 4))(); result = (*(int (__stdcall **)(int *, int))(v3 + 52))(a2, v4); if ( (_DWORD *)result != v2[4] ) { v2[4] = (_DWORD *)result; result = (*(int (__stdcall **)(int *, int, char *))(*a2 + 20))(a2, result, &v15); if ( (unsigned int)v2[12] < v16 ) { operator delete(v2[13]); v6 = operator new(v16); v7 = v2[14]; v2[13] = v6; operator delete(v7); v2[14] = operator new(v16); result = v16; v2[12] = (_DWORD *)v16; } v8 = 0; if ( v2[12] ) { do { v9 = (*(int (__stdcall **)(int *, _DWORD *, unsigned int))(*a2 + 56))(a2, v2[4], v8); v10 = (*(int (__stdcall **)(int *, int, char *))(*a2 + 24))(a2, v9, &v12); v11 = v10 >= 0 && v13; *((_BYTE *)v2[13] + v8) = v11; result = v10 >= 0 && v14; *((_BYTE *)v2[14] + v8++) = result; } while ( v8 < (unsigned int)v2[12] ); } } return result; } //----- (008C9A50) -------------------------------------------------------- int __thiscall sub_8C9A50(_DWORD *this) { int v1; // ecx int result; // eax this[4] = 0; v1 = this[6]; if ( v1 ) result = (*(int (**)(void))(*(_DWORD *)v1 + 76))(); return result; } //----- (008C9A70) -------------------------------------------------------- int __thiscall sub_8C9A70(_DWORD *this) { _DWORD *v2; // eax if ( !this[11] ) return 0; v2 = (_DWORD *)this[11]; this[11] = *v2; return v2[2]; } //----- (008C9A90) -------------------------------------------------------- LONG __thiscall sub_8C9A90(_DWORD *this) { _DWORD *v1; // ebx int v2; // ST10_4 _DWORD *v3; // edi _DWORD *v4; // ST10_4 int v5; // esi v1 = this; v2 = this[3]; *this = &NiD3DXEffectTechnique::`vftable'; sub_92BE70("Killing NiD3DXEffectTechnique %d\n", v2); operator delete((void *)v1[2]); operator delete((void *)v1[13]); operator delete((void *)v1[14]); v3 = (_DWORD *)v1[8]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[7] + 8))(v1 + 7, v4); } v1[10] = 0; v1[8] = 0; v1[9] = 0; sub_8C57B0(v1 + 7); v5 = v1[6]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A3FE08: using guessed type void *NiD3DXEffectTechnique::`vftable'; //----- (008C9B30) -------------------------------------------------------- void **__thiscall sub_8C9B30(int this, int a2) { int v2; // ebx int v3; // eax unsigned int v5; // eax _DWORD *v6; // edi _DWORD *v7; // esi int v8; // esi char v9; // al unsigned int v10; // edi int *v11; // edi int v12; // esi _DWORD *v13; // eax _DWORD *v14; // eax _DWORD *v15; // eax void **v16; // edi char *v17; // eax unsigned int v18; // [esp+Ch] [ebp-1Ch] int v19; // [esp+10h] [ebp-18h] void ***v20; // [esp+14h] [ebp-14h] int *v21; // [esp+18h] [ebp-10h] int v22; // [esp+18h] [ebp-10h] signed int v23; // [esp+1Ch] [ebp-Ch] signed int v24; // [esp+20h] [ebp-8h] char v25; // [esp+24h] [ebp-4h] char v26; // [esp+25h] [ebp-3h] char v27; // [esp+26h] [ebp-2h] bool v28; // [esp+27h] [ebp-1h] v2 = this; v3 = *(_DWORD *)(this + 20); if ( *(_BYTE *)(v3 + 80) ) v21 = *(int **)(v3 + 76); else v21 = 0; v20 = (void ***)(this + 24); if ( !*(_DWORD *)(this + 24) ) { if ( !*(_DWORD *)(this + 16) ) return 0; v5 = sub_941BF0(*(_DWORD **)(this + 68)); v18 = v5; v23 = 0; v24 = 4; if ( v5 ) { v6 = *(_DWORD **)(v2 + 32); if ( v6 ) { do { v7 = (_DWORD *)v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { v19 = v7[3]; if ( (unsigned int)(v19 - 33) <= 3 && v5 <= v7[8] ) { if ( (*(int (__stdcall **)(int *, _DWORD, _DWORD))(*v21 + 248))(v21, *v7, *(_DWORD *)(v2 + 16)) ) break; v5 = v18; } } } while ( v6 ); if ( v7 ) { switch ( v19 ) { case 33: v23 = 1; v24 = 3; break; case 34: v23 = 1; LABEL_24: v24 = 4; break; case 35: v23 = 0; v24 = 3; break; case 36: v23 = 0; goto LABEL_24; } } } } v8 = *(_DWORD *)(a2 + 1716); v26 = *(_BYTE *)(a2 + 977); v25 = *(_BYTE *)(a2 + 976); v9 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v8 + 240))(*(_DWORD *)(a2 + 1716)); LOBYTE(v19) = v9; v28 = 0; v27 = v9; if ( *(_BYTE *)(v2 + 63) ) { if ( !v25 ) return 0; if ( v9 ) goto LABEL_35; if ( !v26 ) return 0; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 236))(v8, 1); v27 = 1; } else { if ( !*(_BYTE *)(v2 + 64) || !v9 ) goto LABEL_35; if ( !v26 ) return 0; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v8 + 236))(v8, 0); v27 = 0; } v28 = 1; LABEL_35: v10 = 0; if ( dword_AC4D34 ) { do { (*(void (__thiscall **)(int, unsigned int, signed int, unsigned int, _DWORD))(*(_DWORD *)v8 + 200))( v8, v10, 11, v10, 0); (*(void (__thiscall **)(int, unsigned int, signed int, _DWORD, _DWORD))(*(_DWORD *)v8 + 200))( v8, v10++, 24, 0, 0); } while ( v10 < dword_AC4D34 ); } v11 = v21; v22 = (*(int (__stdcall **)(int *, _DWORD))(*v21 + 240))(v21, *(_DWORD *)(v2 + 16)); if ( v22 < 0 && *(_BYTE *)(v2 + 64) && v26 ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v8 + 236))(v8, 1); v27 = 1; v28 = (_BYTE)v19 == 0; v22 = (*(int (__stdcall **)(int *, _DWORD))(*v11 + 240))(v11, *(_DWORD *)(v2 + 16)); } if ( v28 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v8 + 236))(v8, v19); if ( v22 >= 0 ) { v12 = *v11; v13 = sub_8CE4C0(a2); (*(void (__stdcall **)(int *, _DWORD *))(v12 + 284))(v11, v13); v14 = operator new(0x78u); if ( v14 ) v15 = sub_8CE0F0(v14); else v15 = 0; sub_56FF80(v20, (int)v15); (*v20)[22] = (void *)v2; v16 = *v20; v17 = (char *)sub_8C5760(v2); sub_8693E0(v16, v17); sub_92BCF0(*v20, *(_DWORD *)(v2 + 12)); (*v20)[26] = *(void **)(v2 + 12); *((_BYTE *)*v20 + 32) = *(_BYTE *)(v2 + 61); *((_BYTE *)*v20 + 33) = *(_BYTE *)(v2 + 62); *((_BYTE *)*v20 + 116) = v27; if ( v18 ) { (*v20)[27] = (void *)v24; (*v20)[28] = (void *)v23; } } } return *v20; } // AC4D34: using guessed type int dword_AC4D34; //----- (008C9E20) -------------------------------------------------------- int __thiscall sub_8C9E20(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // ecx int result; // eax v2 = this; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[7] + 4))(this + 7); v3[2] = a2; *v3 = 0; v3[1] = v2[9]; v4 = (_DWORD *)v2[9]; if ( v4 ) *v4 = v3; else v2[8] = v3; ++v2[10]; v2[9] = v3; result = *(_DWORD *)(a2 + 12); if ( result == 82 || result == 83 || result == 84 || result == 85 || result == 86 ) *((_BYTE *)v2 + 60) = 1; return result; } //----- (008C9E90) -------------------------------------------------------- _DWORD *__thiscall sub_8C9E90(_DWORD *this) { _DWORD *result; // eax result = (_DWORD *)this[8]; this[11] = result; if ( result ) { this[11] = *result; result = (_DWORD *)result[2]; } return result; } //----- (008C9EB0) -------------------------------------------------------- _DWORD *__thiscall sub_8C9EB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; *v1 = &NiD3DXEffectTechnique::`vftable'; v1[6] = 0; v1[10] = 0; v1[8] = 0; v1[9] = 0; v1[7] = &NiTPointerList::`vftable'; v1[11] = 0; v1[12] = 0; v1[13] = 0; v1[14] = 0; v1[15] = 0; *((_BYTE *)v1 + 64) = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A3FD24: using guessed type void *NiTPointerList::`vftable'; // A3FE08: using guessed type void *NiD3DXEffectTechnique::`vftable'; //----- (008C9F10) -------------------------------------------------------- void *__thiscall sub_8C9F10(void *this, char a2) { void *v2; // esi v2 = this; sub_8C9A90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008C9F40) -------------------------------------------------------- char __cdecl sub_8C9F40(int a1, _DWORD *a2, _DWORD *a3) { char v4; // [esp+0h] [ebp-10h] int v5; // [esp+4h] [ebp-Ch] int v6; // [esp+8h] [ebp-8h] if ( (*(int (__stdcall **)(int, char *))(*(_DWORD *)a1 + 12))(a1, &v4) < 0 ) return 0; *a2 = v5; *a3 = v6; return 1; } //----- (008C9F80) -------------------------------------------------------- char __cdecl sub_8C9F80(int a1, int a2, int a3) { int v3; // esi int v4; // eax bool v5; // bl if ( (**(int (__stdcall ***)(int, void *, int *))a1)(a1, &unk_A48364, &a1) < 0 ) return 1; v3 = (*(int (__stdcall **)(int, _DWORD, int))(*(_DWORD *)a1 + 36))(a1, 0, a2); v4 = (*(int (__stdcall **)(int, int))(*(_DWORD *)a1 + 52))(a1, a3); v5 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)a1 + 248))(a1, v3, v4) != 0; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 8))(a1); return v5; } //----- (008CA000) -------------------------------------------------------- int sub_8CA000() { int result; // eax result = 0; dword_BA5EB8 = 0; dword_BA5EBC = 0; dword_BA5EC0 = 0; dword_BA5EC4 = 0; dword_BA5EC8 = 0; dword_BA5ECC = 0; dword_BA5ED0 = 0; return result; } // BA5EB8: using guessed type int dword_BA5EB8; // BA5EBC: using guessed type int dword_BA5EBC; // BA5EC0: using guessed type int dword_BA5EC0; // BA5EC4: using guessed type int dword_BA5EC4; // BA5EC8: using guessed type int dword_BA5EC8; // BA5ECC: using guessed type int dword_BA5ECC; // BA5ED0: using guessed type int dword_BA5ED0; //----- (008CA030) -------------------------------------------------------- int __cdecl sub_8CA030(char *a1, int a2, int a3, int a4) { int result; // eax unsigned int v5; // ebx char *v6; // esi int v7; // edi void (__stdcall *v8)(char *, int, char **); // ecx char *v9; // [esp+4h] [ebp-30h] int v10; // [esp+30h] [ebp-4h] result = a2; v5 = 0; if ( *(_DWORD *)(a2 + 28) ) { v6 = a1; do { v7 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v6 + 72))(v6, a3, v5); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 16))(v6, v7, &v9); if ( !_stricmp(v9, "desc") || !_stricmp(v9, "description") || !_stricmp(v9, "uihelp") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, a4 + 12); } else if ( !_stricmp(v9, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 92))(v6, v7, &v10); *(_BYTE *)(a4 + 88) = v10 != 0; } else if ( _stricmp(v9, "uiwidget") ) { v8 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204); a1 = 0; v8(v6, v7, &a1); if ( a1 ) { if ( !_stricmp(a1, "none") ) *(_BYTE *)(a4 + 88) = 1; } } result = a2; ++v5; } while ( v5 < *(_DWORD *)(a2 + 28) ); } return result; } //----- (008CA160) -------------------------------------------------------- unsigned int __cdecl sub_8CA160(char *a1, int a2, int a3, int a4) { unsigned int result; // eax bool v5; // zf int v6; // ebx char *v7; // esi int v8; // edi void (__stdcall *v9)(char *, int, char **); // ecx int v10; // eax int v11; // eax int v12; // eax int v13; // eax char *v14; // [esp+0h] [ebp-3Ch] int v15; // [esp+8h] [ebp-34h] int v16; // [esp+10h] [ebp-2Ch] int v17; // [esp+14h] [ebp-28h] int v18; // [esp+18h] [ebp-24h] unsigned int v19; // [esp+2Ch] [ebp-10h] int v20; // [esp+30h] [ebp-Ch] int v21; // [esp+34h] [ebp-8h] int v22; // [esp+38h] [ebp-4h] result = a2; v5 = *(_DWORD *)(a2 + 28) == 0; v19 = 0; if ( !v5 ) { v6 = a4; v7 = a1; do { v8 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v7 + 72))(v7, a3, v19); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 16))(v7, v8, &v14); if ( !_stricmp(v14, "desc") || !_stricmp(v14, "description") || !_stricmp(v14, "uihelp") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v7 + 204))(v7, v8, v6 + 12); goto LABEL_65; } if ( !_stricmp(v14, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v7 + 92))(v7, v8, &v22); *(_BYTE *)(v6 + 1308) = v22 != 0; } else if ( !_stricmp(v14, "uiwidget") ) { v9 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 204); a1 = 0; v9(v7, v8, &a1); if ( a1 ) { if ( _stricmp(a1, "color") && _stricmp(a1, "colorswatch") ) { if ( a1 && !_stricmp(a1, "none") ) *(_BYTE *)(v6 + 1308) = 1; goto LABEL_65; } if ( *(_DWORD *)(v6 + 1300) != 4 ) { if ( *(_DWORD *)(v6 + 1296) == 1 ) *(_BYTE *)(v6 + 1309) = 1; goto LABEL_65; } goto LABEL_28; } } else { if ( !_stricmp(v14, "color") ) { if ( *(_DWORD *)(v6 + 1300) == 4 || *(_DWORD *)(v6 + 1296) == 1 ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v7 + 92))(v7, v8, &v22); *(_BYTE *)(v6 + 1309) = v22 != 0; } goto LABEL_65; } if ( !_stricmp(v14, "uitype") ) { a1 = 0; (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 204))(v7, v8, &a1); if ( !a1 || _stricmp(a1, "color") && _stricmp(a1, "colorswatch") || *(_DWORD *)(v6 + 1300) != 4 && *(_DWORD *)(v6 + 1296) != 1 ) { goto LABEL_65; } LABEL_28: *(_BYTE *)(v6 + 1309) = 1; goto LABEL_65; } if ( !_stricmp(v14, "min") || !_stricmp(v14, "uimin") ) { if ( v17 == *(_DWORD *)(v6 + 1300) && v16 == *(_DWORD *)(v6 + 1296) ) { v12 = *(_DWORD *)(v6 + 1304); if ( v18 == v12 ) { HIBYTE(a1) = 0; if ( !v15 ) { v13 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 132))(v7, v8, v6 + 656, v12); goto LABEL_59; } if ( v15 == 1 ) { if ( v16 != 1 || v17 != 4 ) { v13 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 148))(v7, v8, v6 + 976, v12); HIBYTE(a1) = 1; } else { v13 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 148))(v7, v8, v6 + 656, v12); } LABEL_59: v20 = v13; } if ( v20 >= 0 ) { if ( HIBYTE(a1) ) sub_8CD1C0(v6 + 976, v6 + 656, *(_DWORD *)(v6 + 1296), *(_DWORD *)(v6 + 1300), *(_DWORD *)(v6 + 1304)); } else { memset((void *)(v6 + 656), 0, 0x140u); } goto LABEL_65; } } } else if ( (!_stricmp(v14, "max") || !_stricmp(v14, "uimax")) && v17 == *(_DWORD *)(v6 + 1300) && v16 == *(_DWORD *)(v6 + 1296) ) { v10 = *(_DWORD *)(v6 + 1304); if ( v18 == v10 ) { HIBYTE(a1) = 0; if ( !v15 ) { v11 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 132))(v7, v8, v6 + 336, v10); goto LABEL_43; } if ( v15 == 1 ) { if ( v16 != 1 || v17 != 4 ) { v11 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 148))(v7, v8, v6 + 976, v10); HIBYTE(a1) = 1; } else { v11 = (*(int (__stdcall **)(char *, int, int, int))(*(_DWORD *)v7 + 148))(v7, v8, v6 + 336, v10); } LABEL_43: v21 = v11; } if ( v21 >= 0 ) { if ( HIBYTE(a1) ) sub_8CD1C0(v6 + 976, v6 + 336, *(_DWORD *)(v6 + 1296), *(_DWORD *)(v6 + 1300), *(_DWORD *)(v6 + 1304)); } else { memset((void *)(v6 + 336), 0, 0x140u); } goto LABEL_65; } } } LABEL_65: result = v19 + 1; v19 = result; } while ( result < *(_DWORD *)(a2 + 28) ); } return result; } //----- (008CA5D0) -------------------------------------------------------- unsigned int __cdecl sub_8CA5D0(char *a1, int a2, int a3, int a4) { unsigned int result; // eax bool v5; // zf int v6; // ebx char *v7; // esi int v8; // edi void (__stdcall *v9)(char *, int, char **); // ecx void (__stdcall *v10)(char *, int, int); // edx int v11; // ecx char *v12; // [esp+0h] [ebp-34h] int v13; // [esp+2Ch] [ebp-8h] unsigned int v14; // [esp+30h] [ebp-4h] result = a2; v5 = *(_DWORD *)(a2 + 28) == 0; v14 = 0; if ( !v5 ) { v6 = a4; v7 = a1; while ( 1 ) { v8 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v7 + 72))(v7, a3, v14); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 16))(v7, v8, &v12); if ( !_stricmp(v12, "desc") || !_stricmp(v12, "description") || !_stricmp(v12, "uihelp") ) break; if ( _stricmp(v12, "hidden") ) { if ( !_stricmp(v12, "uiwidget") ) { v9 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 204); a1 = 0; v9(v7, v8, &a1); if ( a1 ) { if ( !_stricmp(a1, "none") ) *(_BYTE *)(v6 + 28) = 1; } goto LABEL_20; } if ( !_stricmp(v12, "min") || !_stricmp(v12, "uimin") ) { v10 = *(void (__stdcall **)(char *, int, int))(*(_DWORD *)v7 + 124); v11 = v6 + 24; } else { if ( _stricmp(v12, "max") && _stricmp(v12, "uimax") ) goto LABEL_20; v10 = *(void (__stdcall **)(char *, int, int))(*(_DWORD *)v7 + 124); v11 = v6 + 20; } goto LABEL_19; } (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v7 + 92))(v7, v8, &v13); *(_BYTE *)(v6 + 28) = v13 != 0; LABEL_20: result = v14 + 1; v14 = result; if ( result >= *(_DWORD *)(a2 + 28) ) return result; } v10 = *(void (__stdcall **)(char *, int, int))(*(_DWORD *)v7 + 204); v11 = v6 + 12; LABEL_19: v10(v7, v8, v11); goto LABEL_20; } return result; } //----- (008CA770) -------------------------------------------------------- int __cdecl sub_8CA770(char *a1, int a2, int a3, int a4) { int result; // eax unsigned int v5; // ebx char *v6; // esi int v7; // edi void (__stdcall *v8)(char *, int, char **); // ecx char *v9; // [esp+4h] [ebp-30h] int v10; // [esp+30h] [ebp-4h] result = a2; v5 = 0; v10 = 0; if ( *(_DWORD *)(a2 + 28) ) { v6 = a1; do { v7 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v6 + 72))(v6, a3, v5); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 16))(v6, v7, &v9); if ( !_stricmp(v9, "desc") || !_stricmp(v9, "description") || !_stricmp(v9, "uihelp") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, a4 + 12); } else if ( !_stricmp(v9, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 92))(v6, v7, &v10); *(_BYTE *)(a4 + 17) = v10 != 0; } else if ( !_stricmp(v9, "uiwidget") ) { v8 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204); a1 = 0; v8(v6, v7, &a1); if ( a1 ) { if ( !_stricmp(a1, "none") ) *(_BYTE *)(a4 + 17) = 1; } } result = a2; ++v5; } while ( v5 < *(_DWORD *)(a2 + 28) ); } return result; } //----- (008CA8A0) -------------------------------------------------------- unsigned int __cdecl sub_8CA8A0(char *a1, int a2, int a3, int a4) { unsigned int result; // eax int v5; // ebx char *v6; // esi int v7; // edi char *v8; // [esp+0h] [ebp-38h] int v9; // [esp+2Ch] [ebp-Ch] unsigned int v10; // [esp+30h] [ebp-8h] int v11; // [esp+34h] [ebp-4h] result = 0; v11 = 0; v10 = 0; if ( *(_DWORD *)(a2 + 28) ) { v5 = a4; v6 = a1; do { v7 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v6 + 72))(v6, a3, v10); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 16))(v6, v7, &v8); if ( !_stricmp(v8, "desc") || !_stricmp(v8, "description") || !_stricmp(v8, "uihelp") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, v5 + 12); } else if ( !_stricmp(v8, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 92))(v6, v7, &v9); *(_BYTE *)(v5 + 28) = v9 != 0; } else if ( !_stricmp(v8, "uiwidget") ) { a1 = 0; (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204))(v6, v7, &a1); if ( a1 ) { if ( !_stricmp(a1, "none") ) *(_BYTE *)(v5 + 28) = 1; } } else if ( !_stricmp(v8, "min") || !_stricmp(v8, "uimin") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v11); *(_DWORD *)(v5 + 24) = v11; } else if ( !_stricmp(v8, "max") || !_stricmp(v8, "uimax") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v11); *(_DWORD *)(v5 + 20) = v11; } result = v10 + 1; v10 = result; } while ( result < *(_DWORD *)(a2 + 28) ); } return result; } //----- (008CAA60) -------------------------------------------------------- int __cdecl sub_8CAA60(int a1, int a2, int a3, int a4) { int result; // eax unsigned int v5; // ebx int v6; // edi char *v7; // [esp+4h] [ebp-30h] int v8; // [esp+30h] [ebp-4h] result = a2; v5 = 0; v8 = 0; if ( *(_DWORD *)(a2 + 28) ) { do { v6 = (*(int (__stdcall **)(int, int, unsigned int))(*(_DWORD *)a1 + 72))(a1, a3, v5); (*(void (__stdcall **)(int, int, char **))(*(_DWORD *)a1 + 16))(a1, v6, &v7); result = _stricmp(v7, "NTMIndex"); if ( !result ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 108))(a1, v6, &v8); result = a4; *(_DWORD *)(a4 + 24) = v8; } ++v5; } while ( v5 < *(_DWORD *)(a2 + 28) ); } return result; } //----- (008CAAE0) -------------------------------------------------------- const char *__cdecl sub_8CAAE0(int a1, _DWORD *a2, int a3, int a4) { const char *result; // eax int v5; // ebx int v6; // edi int v7; // eax char *v8; // [esp+4h] [ebp-38h] int v9; // [esp+30h] [ebp-Ch] char *v10; // [esp+34h] [ebp-8h] int v11; // [esp+38h] [ebp-4h] result = 0; v5 = a4; v11 = 0; v10 = 0; v9 = 0; if ( a2[2] ) { while ( 1 ) { v6 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)a1 + 72))(a1, a3, v9); (*(void (__stdcall **)(int, int, char **))(*(_DWORD *)a1 + 16))(a1, v6, &v8); if ( !_stricmp(v8, "desc") || !_stricmp(v8, "description") || !_stricmp(v8, "uihelp") ) { v7 = v5 + 8; } else { if ( _stricmp(v8, "shadername") ) { if ( !_stricmp(v8, "implementation") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 108))(a1, v6, &a4); *(_DWORD *)(v5 + 12) = a4; } else if ( !_stricmp(v8, "userversion") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 108))(a1, v6, &a4); *(_DWORD *)(v5 + 24) = a4; } else if ( !_stricmp(v8, "bonesperpartition") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 108))(a1, v6, &a4); *(_DWORD *)(v5 + 28) = a4; } else if ( !_stricmp(v8, "nbtmethod") ) { (*(void (__stdcall **)(int, int, char **))(*(_DWORD *)a1 + 204))(a1, v6, &v10); } else if ( !_stricmp(v8, "usesnirenderstate") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 92))(a1, v6, &v11); *(_BYTE *)(v5 + 36) = v11 != 0; } else if ( !_stricmp(v8, "usesnilightstate") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 92))(a1, v6, &v11); *(_BYTE *)(v5 + 37) = v11 != 0; } else if ( !_stricmp(v8, "softwarevprequired") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 92))(a1, v6, &v11); *(_BYTE *)(v5 + 38) = v11 != 0; } else if ( !_stricmp(v8, "softwarevpfallback") ) { (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 92))(a1, v6, &v11); *(_BYTE *)(v5 + 39) = v11 != 0; } goto LABEL_25; } v7 = v5 + 4; } (*(void (__stdcall **)(int, int, int))(*(_DWORD *)a1 + 204))(a1, v6, v7); LABEL_25: if ( (unsigned int)++v9 >= a2[2] ) { result = v10; break; } } } *(_DWORD *)(v5 + 32) = 0; if ( result ) { result = (const char *)_stricmp(result, "NDL"); if ( !result ) { LABEL_31: *(_DWORD *)(v5 + 32) = 4096; return result; } if ( !_stricmp(v10, "MAX") ) { result = (const char *)sub_863460( 1, 1, "NiD3DXEffectParser Warning: deprecated \"MAX\" value assigned to the \"NBTMethod\" annota" "tion specified on \"%s\" technique", *a2); goto LABEL_31; } result = (const char *)_stricmp(v10, "ATI"); if ( !result ) *(_DWORD *)(v5 + 32) = 12288; } return result; } //----- (008CADA0) -------------------------------------------------------- int __cdecl sub_8CADA0(int a1, int a2, int a3, char *a4) { int result; // eax int v5; // edi int v6; // ebx char *v7; // [esp+4h] [ebp-30h] int v8; // [esp+30h] [ebp-4h] result = 0; v5 = 0; v8 = 0; if ( *(_DWORD *)(a3 + 28) ) { while ( 1 ) { v6 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)a1 + 72))(a1, a2, v5); (*(void (__stdcall **)(int, int, char **))(*(_DWORD *)a1 + 16))(a1, v6, &v7); if ( !_stricmp(v7, a4) ) break; if ( (unsigned int)++v5 >= *(_DWORD *)(a3 + 28) ) return v8; } (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 204))(a1, v6, &v8); result = v8; } return result; } //----- (008CAE20) -------------------------------------------------------- int __cdecl sub_8CAE20(char *a1, int a2, char a3) { signed int v3; // esi v3 = 0; if ( !_stricmp(a1, "GeneralLight") ) { v3 = 1; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5EBC++; return 1; } } else if ( !_stricmp(a1, "PointLight") ) { v3 = 2; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5EC0++; return 2; } } else if ( !_stricmp(a1, "DirectionalLight") ) { v3 = 3; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5EC4++; return 3; } } else if ( !_stricmp(a1, "SpotLight") ) { v3 = 4; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5EC8++; return 4; } } else { if ( !_stricmp(a1, "EnvironmentMap") ) return 5; if ( !_stricmp(a1, "ProjectedShadowMap") ) { v3 = 6; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5ECC++; return 6; } } else if ( !_stricmp(a1, "ProjectedLightMap") ) { v3 = 7; if ( !a3 ) { *(_DWORD *)a2 = dword_BA5ED0++; return 7; } } else if ( !_stricmp(a1, "FogMap") ) { v3 = 8; } } return v3; } // BA5EBC: using guessed type int dword_BA5EBC; // BA5EC0: using guessed type int dword_BA5EC0; // BA5EC4: using guessed type int dword_BA5EC4; // BA5EC8: using guessed type int dword_BA5EC8; // BA5ECC: using guessed type int dword_BA5ECC; // BA5ED0: using guessed type int dword_BA5ED0; //----- (008CAFA0) -------------------------------------------------------- char __cdecl sub_8CAFA0(int a1, int a2, _DWORD *a3, signed int a4, int *a5) { char result; // al const char *v6; // eax const char *v7; // eax const char *v8; // eax const char *v9; // eax const char *v10; // eax const char *v11; // eax const char *v12; // eax const char *v13; // eax const char *v14; // eax const char *v15; // eax if ( sub_92C640(*a5, a4) ) { switch ( *a5 ) { case 5: v6 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Usage"); if ( !v6 || _stricmp(v6, "Undimmed") ) goto LABEL_34; *a5 = 2; result = 1; break; case 6: v7 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Usage"); if ( !v7 || _stricmp(v7, "Undimmed") ) goto LABEL_34; *a5 = 3; result = 1; break; case 7: v8 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Usage"); if ( !v8 || _stricmp(v8, "Undimmed") ) goto LABEL_34; *a5 = 4; result = 1; break; case 8: v9 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( !v9 || _stricmp(v9, "Model") ) goto LABEL_34; *a5 = 9; result = 1; break; case 10: v10 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( !v10 || _stricmp(v10, "Model") ) goto LABEL_34; *a5 = 11; result = 1; break; case 12: v11 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( !v11 || _stricmp(v11, "Model") ) goto LABEL_34; *a5 = 13; result = 1; break; case 15: v12 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Attenuation"); if ( !v12 || _stricmp(v12, "Spot") ) goto LABEL_34; *a5 = 14; result = 1; break; case 16: v13 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( !v13 || _stricmp(v13, "Model") ) goto LABEL_34; *a5 = 17; result = 1; break; case 18: v14 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( !v14 || _stricmp(v14, "Model") ) goto LABEL_34; *a5 = 19; result = 1; break; case 20: v15 = (const char *)sub_8CADA0(a1, a2, (int)a3, "Space"); if ( v15 && !_stricmp(v15, "Model") ) *a5 = 21; goto LABEL_34; default: LABEL_34: result = 1; break; } } else { sub_863460( 1, 0, "NiD3DXEffectParser Error: Semantic specified for incompatible object type on \"%s\" parameter\n", *a3); result = 0; } return result; } //----- (008CB2B0) -------------------------------------------------------- int __cdecl sub_8CB2B0(int a1, int a2) { int v2; // esi int v3; // edi int *v4; // ebx int v6; // eax unsigned int v7; // edi unsigned int v8; // ebx int v9; // eax char v10; // [esp+Ch] [ebp-20h] int v11; // [esp+14h] [ebp-18h] int v12; // [esp+18h] [ebp-14h] int v13; // [esp+1Ch] [ebp-10h] unsigned int v14; // [esp+20h] [ebp-Ch] int v15; // [esp+24h] [ebp-8h] int *v16; // [esp+28h] [ebp-4h] int v17; // [esp+34h] [ebp+8h] v2 = a1; v3 = a2; (*(void (__stdcall **)(int, int, int *))(*(_DWORD *)a1 + 20))(a1, a2, &v13); v4 = sub_8CE6A0(); *v4 = v13; v16 = v4; if ( v15 ) sub_8CAAE0(a1, &v13, a2, (int)v4); v17 = 0; if ( !v14 ) return (int)v4; while ( 1 ) { v6 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)v2 + 56))(v2, v3, v17); (*(void (__stdcall **)(int, int, char *))(*(_DWORD *)v2 + 24))(v2, v6, &v10); v7 = 0; v8 = 0; if ( v11 ) v7 = D3DXGetShaderVersion(v11); if ( v12 ) v8 = D3DXGetShaderVersion(v12); v9 = (int)v16; if ( v16[5] < v7 ) v16[5] = v7; if ( *(_DWORD *)(v9 + 16) < v8 ) *(_DWORD *)(v9 + 16) = v8; if ( ++v17 >= v14 ) break; v3 = a2; } return (int)v16; } // 94482C: using guessed type int __stdcall D3DXGetShaderVersion(_DWORD); //----- (008CB370) -------------------------------------------------------- unsigned int __cdecl sub_8CB370(char *a1, int a2, int a3, int a4) { unsigned int result; // eax bool v5; // zf int v6; // ebx char *v7; // esi int v8; // edi void (__stdcall *v9)(char *, int, char **); // ecx void (__stdcall *v10)(char *, int, float *); // ecx float *v11; // eax char *v12; // [esp+0h] [ebp-54h] float v13; // [esp+2Ch] [ebp-28h] float v14; // [esp+30h] [ebp-24h] float v15; // [esp+34h] [ebp-20h] float v16; // [esp+38h] [ebp-1Ch] float v17; // [esp+3Ch] [ebp-18h] float v18; // [esp+40h] [ebp-14h] float v19; // [esp+44h] [ebp-10h] float v20; // [esp+48h] [ebp-Ch] unsigned int v21; // [esp+4Ch] [ebp-8h] int v22; // [esp+50h] [ebp-4h] result = a2; v5 = *(_DWORD *)(a2 + 28) == 0; v21 = 0; if ( !v5 ) { v6 = a4; v7 = a1; while ( 1 ) { v8 = (*(int (__stdcall **)(char *, int, unsigned int))(*(_DWORD *)v7 + 72))(v7, a3, v21); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 16))(v7, v8, &v12); if ( !_stricmp(v12, "desc") || !_stricmp(v12, "description") || !_stricmp(v12, "uihelp") ) break; if ( !_stricmp(v12, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v7 + 92))(v7, v8, &v22); *(_BYTE *)(v6 + 76) = v22 != 0; } else { if ( !_stricmp(v12, "uiwidget") ) { v9 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 204); a1 = 0; v9(v7, v8, &a1); if ( a1 ) { if ( !_stricmp(a1, "color") || !_stricmp(a1, "colorswatch") ) { *(_BYTE *)(v6 + 77) = 1; } else if ( a1 ) { if ( !_stricmp(a1, "none") ) *(_BYTE *)(v6 + 76) = 1; } } goto LABEL_31; } if ( _stricmp(v12, "color") ) { if ( !_stricmp(v12, "uitype") ) { a1 = 0; (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v7 + 204))(v7, v8, &a1); if ( a1 && (!_stricmp(a1, "color") || !_stricmp(a1, "colorswatch")) ) *(_BYTE *)(v6 + 77) = 1; goto LABEL_31; } if ( !_stricmp(v12, "min") || !_stricmp(v12, "uimin") ) { v10 = *(void (__stdcall **)(char *, int, float *))(*(_DWORD *)v7 + 140); v13 = *(float *)(v6 + 48); v11 = &v13; v14 = *(float *)(v6 + 52); v15 = *(float *)(v6 + 56); v16 = *(float *)(v6 + 60); } else { if ( _stricmp(v12, "max") && _stricmp(v12, "uimax") ) goto LABEL_31; v10 = *(void (__stdcall **)(char *, int, float *))(*(_DWORD *)v7 + 140); v17 = *(float *)(v6 + 32); v11 = &v17; v18 = *(float *)(v6 + 36); v19 = *(float *)(v6 + 40); v20 = *(float *)(v6 + 44); } goto LABEL_30; } (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v7 + 92))(v7, v8, &v22); *(_BYTE *)(v6 + 77) = v22 != 0; } LABEL_31: result = v21 + 1; v21 = result; if ( result >= *(_DWORD *)(a2 + 28) ) return result; } v10 = *(void (__stdcall **)(char *, int, float *))(*(_DWORD *)v7 + 204); v11 = (float *)(v6 + 12); LABEL_30: v10(v7, v8, v11); goto LABEL_31; } return result; } //----- (008CB620) -------------------------------------------------------- CHAR *__cdecl sub_8CB620(char *a1, int a2, int a3, int a4) { int v4; // ebx int v5; // eax char *v6; // esi int v7; // edi void (__stdcall *v8)(char *, int, char **); // ecx char **v9; // ecx int v10; // eax int v11; // edx CHAR *result; // eax char *v13; // [esp+Ch] [ebp-44h] char v14[4]; // [esp+38h] [ebp-18h] int v15; // [esp+3Ch] [ebp-14h] char *v16; // [esp+40h] [ebp-10h] char *v17; // [esp+44h] [ebp-Ch] int v18; // [esp+48h] [ebp-8h] int v19; // [esp+4Ch] [ebp-4h] v4 = a4; *(_DWORD *)(a4 + 44) = -1; *(_DWORD *)(v4 + 48) = -1; *(_DWORD *)(v4 + 52) = -1; *(_DWORD *)(v4 + 60) = -1; v5 = a2; *(_DWORD *)(v4 + 64) = 0; v19 = 0; v15 = 0; v17 = 0; v16 = 0; v18 = 0; v14[0] = 0; a4 = 0; if ( !*(_DWORD *)(v5 + 28) ) { LABEL_47: *(_DWORD *)(v4 + 24) = 1; goto LABEL_42; } v6 = a1; do { v7 = (*(int (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 72))(v6, a3, a4); (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 16))(v6, v7, &v13); if ( !_stricmp(v13, "desc") || !_stricmp(v13, "description") || !_stricmp(v13, "uihelp") ) { v9 = (char **)(v4 + 12); goto LABEL_35; } if ( !_stricmp(v13, "hidden") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 92))(v6, v7, &v15); *(_BYTE *)(v4 + 20) = v15 != 0; goto LABEL_36; } if ( !_stricmp(v13, "uiwidget") ) { v8 = *(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204); a1 = 0; v8(v6, v7, &a1); if ( a1 && !_stricmp(a1, "none") ) *(_BYTE *)(v4 + 20) = 1; } else { if ( !_stricmp(v13, "name") ) { v9 = (char **)(v4 + 28); LABEL_35: (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204))(v6, v7, v9); goto LABEL_36; } if ( !_stricmp(v13, "function") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, v4 + 32); goto LABEL_36; } if ( !_stricmp(v13, "target") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, v4 + 36); goto LABEL_36; } if ( !_stricmp(v13, "width") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v19); *(_DWORD *)(v4 + 44) = v19; goto LABEL_36; } if ( !_stricmp(v13, "height") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v19); *(_DWORD *)(v4 + 48) = v19; goto LABEL_36; } if ( !_stricmp(v13, "depth") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v19); *(_DWORD *)(v4 + 52) = v19; goto LABEL_36; } if ( !_stricmp(v13, "type") ) { v9 = &v17; goto LABEL_35; } if ( !_stricmp(v13, "NTM") ) { (*(void (__stdcall **)(char *, int, int))(*(_DWORD *)v6 + 204))(v6, v7, v4 + 56); } else if ( !_stricmp(v13, "NTMIndex") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v19); *(_DWORD *)(v4 + 60) = v19; } else if ( !_stricmp(v13, "Object") ) { (*(void (__stdcall **)(char *, int, char **))(*(_DWORD *)v6 + 204))(v6, v7, &v16); } else if ( !_stricmp(v13, "ObjectIndex") ) { (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)v6 + 108))(v6, v7, &v19); v18 = v19; v14[0] = 1; } } LABEL_36: ++a4; } while ( (unsigned int)a4 < *(_DWORD *)(a2 + 28) ); if ( v16 ) { v10 = sub_8CAE20(v16, (int)&v18, v14[0]); v11 = v18; *(_DWORD *)(v4 + 64) = v10; *(_DWORD *)(v4 + 68) = v11; *(_DWORD *)(v4 + 56) = 0; } if ( !v17 ) goto LABEL_47; if ( !_stricmp(v17, "volume") ) { *(_DWORD *)(v4 + 24) = 2; } else if ( !_stricmp(v17, "cube") ) { *(_DWORD *)(v4 + 24) = 3; } LABEL_42: result = *(CHAR **)(v4 + 28); if ( result ) { result = (CHAR *)CreateFileA(result, 0x80000000, 1u, 0, 3u, 0, 0); if ( result == (CHAR *)-1 ) *(_DWORD *)(v4 + 28) = 0; else result = (CHAR *)CloseHandle(result); } if ( !*(_DWORD *)(v4 + 28) && !*(_DWORD *)(v4 + 32) && !v16 ) { if ( !*(_DWORD *)(v4 + 56) ) *(_DWORD *)(v4 + 56) = "shader"; result = (CHAR *)strcmp(*(const char **)(v4 + 56), "shader"); if ( !result && *(_DWORD *)(v4 + 60) == -1 ) *(_DWORD *)(v4 + 60) = dword_BA5EB8++; } return result; } // BA5EB8: using guessed type int dword_BA5EB8; //----- (008CBA40) -------------------------------------------------------- int *__cdecl sub_8CBA40(char *Src, char a2, int a3) { char *v3; // edi unsigned int v4; // ebx unsigned int v5; // esi char *v6; // eax _BYTE *v7; // ebx char *v8; // edi char *v9; // ebx char *v10; // edi char *v11; // ebx size_t v12; // ebx char *v13; // esi const char *v14; // ecx const char *v15; // eax char *v16; // edi char v17; // bl int *result; // eax int v19; // [esp+Ch] [ebp-14h] unsigned int v20; // [esp+10h] [ebp-10h] int v21; // [esp+14h] [ebp-Ch] char *v22; // [esp+18h] [ebp-8h] char v23; // [esp+1Eh] [ebp-2h] bool v24; // [esp+1Fh] [ebp-1h] v3 = Src; v4 = 0; v21 = 0; v19 = 0; if ( sub_92C800(Src, (int)&v21, (int)&v19) ) goto LABEL_36; v5 = strlen(Src); v6 = (char *)operator new(v5 + 1); v22 = v6; if ( v5 ) { v7 = v6; v8 = (char *)(Src - v6); v20 = v5; do { *v7 = tolower((char)v7[(_DWORD)v8]); ++v7; --v20; } while ( v20 ); v4 = v5; } v9 = &v22[v4]; v23 = 0; *v9 = 0; v24 = 0; if ( v5 > 2 ) { v10 = v9 - 2; if ( !strncmp(v9 - 2, "it", 2u) ) { v23 = 1; v5 -= 2; LABEL_15: v9 = v10; v24 = 1; *v10 = 0; goto LABEL_16; } } if ( v5 > 5 ) { v10 = v9 - 5; if ( !strncmp(v9 - 5, "trans", 5u) ) { v5 -= 5; goto LABEL_15; } } if ( v5 > 9 ) { v10 = v9 - 9; if ( !strncmp(v9 - 9, "transpose", 9u) ) { v5 -= 9; goto LABEL_15; } } LABEL_16: if ( v5 > 3 && !strncmp(v22, "inv", 3u) ) { v23 = 1; if ( v5 != 3 ) qmemcpy(v22, v22 + 3, v5 - 3); v5 -= 3; *(v9 - 3) = 0; goto LABEL_28; } if ( v5 > 1 && !strncmp(v9 - 1, "i", 1u) ) { --v5; *(v9 - 1) = 0; } else { if ( v5 <= 7 ) goto LABEL_28; v11 = v9 - 7; if ( strncmp(v11, "inverse", 7u) ) goto LABEL_28; v5 -= 7; *v11 = 0; } v23 = 1; LABEL_28: if ( a2 ) v24 = v24 == 0; v12 = (v23 != 0 ? 3 : 0) + v5 + (v24 != 0 ? 9 : 0) + 1; v13 = (char *)operator new(v12); v14 = "Transpose"; if ( !v24 ) v14 = &byte_9A8050; v15 = "Inv"; if ( !v23 ) v15 = &byte_9A8050; v16 = v22; sub_7FF6E0(v13, v12, "%s%s%s", v15, v22, v14); operator delete(v16); v17 = sub_92C800(v13, (int)&v21, (int)&v19); operator delete(v13); if ( !v17 ) return 0; v3 = Src; LABEL_36: result = sub_8CD030(); result[3] = (int)v3; result[4] = v21; if ( (unsigned int)(v21 - 33) > 3 ) result[5] = 1; else result[5] = a3; return result; } //----- (008CBC80) -------------------------------------------------------- int *__cdecl sub_8CBC80(int a1, int a2, int a3, char *a4) { int v4; // ebx int v5; // esi int v6; // edi int *result; // eax int v8; // ebx void (__stdcall *v9)(int, int, int *); // edx unsigned int v10; // edi const char **v11; // ebx char *v12; // edi int v13; // ecx int v14; // edx char *v15; // [esp+Ch] [ebp-34h] char *v16; // [esp+38h] [ebp-8h] char v17[4]; // [esp+3Ch] [ebp-4h] v4 = a3; v5 = a1; v6 = 0; v16 = (char *)sub_8CADA0(a1, a2, a3, "Object"); if ( !v16 ) return 0; a1 = 0; v17[0] = 0; if ( *(_DWORD *)(v4 + 28) > 0u ) { while ( 1 ) { v8 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)v5 + 72))(v5, a2, v6); (*(void (__stdcall **)(int, int, char **))(*(_DWORD *)v5 + 16))(v5, v8, &v15); if ( !_stricmp(v15, "ObjectIndex") ) break; if ( (unsigned int)++v6 >= *(_DWORD *)(a3 + 28) ) goto LABEL_8; } v9 = *(void (__stdcall **)(int, int, int *))(*(_DWORD *)v5 + 108); a1 = 0; v9(v5, v8, &a1); v17[0] = 1; } LABEL_8: v16 = (char *)sub_8CAE20(v16, (int)&a1, v17[0]); if ( !v16 ) return 0; v10 = 0; if ( !dword_AC1CD8 ) return 0; v11 = (const char **)&unk_AC1CE0; while ( _stricmp(a4, v11[1]) ) { ++v10; v11 += 2; if ( v10 >= dword_AC1CD8 ) return 0; } v12 = v16; *(_DWORD *)v17 = *v11; if ( !sub_8CAFA0(v5, a2, (_DWORD *)a3, (signed int)v16, (int *)v17) ) return 0; result = sub_8CD070(); v13 = *(_DWORD *)v17; v14 = a1; result[4] = (int)v12; result[3] = v13; result[5] = v14; return result; } // AC1CD8: using guessed type int dword_AC1CD8; //----- (008CBDC0) -------------------------------------------------------- int __cdecl sub_8CBDC0(int a1, int a2) { int v2; // eax v2 = (*(int (__stdcall **)(int, int))(*(_DWORD *)a1 + 48))(a1, a2); return sub_8CB2B0(a1, v2); } //----- (008CBDE0) -------------------------------------------------------- int *__cdecl sub_8CBDE0(char *a1, int a2) { char *v2; // esi int v3; // edi char *v4; // ebx int *v5; // ebx int *v7; // eax int *v8; // ebx int v9; // ecx int *v10; // eax int *v11; // ebx int v12; // eax int *v13; // eax float *v14; // ebx int *v15; // ebx int *v16; // ebx int *v17; // ebx int v18; // eax int *v19; // eax int v20; // ecx float *v21; // edi int v22; // eax int (__stdcall *v23)(char *, int, float *); // edx _BYTE *v24; // eax int v25; // [esp+Ch] [ebp-3Ch] char *Src; // [esp+10h] [ebp-38h] int v27; // [esp+14h] [ebp-34h] int v28; // [esp+18h] [ebp-30h] int v29; // [esp+1Ch] [ebp-2Ch] unsigned int v30; // [esp+20h] [ebp-28h] int v31; // [esp+24h] [ebp-24h] int v32; // [esp+38h] [ebp-10h] int v33; // [esp+3Ch] [ebp-Ch] int *v34; // [esp+40h] [ebp-8h] bool v35; // [esp+47h] [ebp-1h] bool v36; // [esp+53h] [ebp+Bh] v2 = a1; v3 = a2; (*(void (__stdcall **)(char *, int, int *))(*(_DWORD *)a1 + 16))(a1, a2, &v25); v33 = v27; v4 = Src; v32 = v28; if ( v28 != 1 && v28 != 2 && v28 != 3 ) { if ( v28 == 5 || v28 == 7 || v28 == 8 || v28 == 9 ) { v5 = sub_8CD000(); v5[2] = v25; sub_8CB620(a1, (int)&v25, v3, (int)v5); if ( (*(int (__stdcall **)(char *, int, int *))(*(_DWORD *)a1 + 212))(a1, v3, &a2) >= 0 ) v5[4] = a2; else v5[4] = 0; return v5; } return 0; } if ( Src && !_stricmp(Src, "StandardsGlobal") ) return 0; v34 = 0; v36 = 0; if ( !v4 ) goto LABEL_20; v35 = strcmp(v4, "ATTRIBUTE") == 0; v36 = strcmp(v4, "GLOBAL") == 0; if ( v35 || v36 ) goto LABEL_20; v34 = sub_8CBC80((int)v2, v3, (int)&v25, v4); if ( !v34 ) { v7 = sub_8CBA40(v4, v33 == 3, v31); v34 = v7; if ( v7 ) { v8 = v7; sub_8CAA60((int)v2, (int)&v25, v3, (int)v7); goto LABEL_74; } LABEL_20: v9 = v33; if ( v33 == 1 ) { if ( v30 != 1 ) { LABEL_27: if ( v32 != 3 || (unsigned int)v31 <= 1 || v9 != 1 && v9 ) { switch ( v9 ) { case 2: case 3: if ( v32 != 3 ) return 0; v19 = sub_8CCEF0(); v20 = a2; v21 = (float *)v19; v19[20] = v29; v19[21] = v30; sub_8CA030(v2, (int)&v25, v20, (int)v19); v22 = *(_DWORD *)v2; if ( v33 == 3 ) v23 = *(int (__stdcall **)(char *, int, float *))(v22 + 156); else v23 = *(int (__stdcall **)(char *, int, float *))(v22 + 180); if ( v23(v2, a2, v21 + 4) < 0 ) { v21[18] = 0.0; v21[17] = 0.0; v21[16] = 0.0; v21[15] = 0.0; v21[13] = 0.0; v21[12] = 0.0; v21[11] = 0.0; v21[10] = 0.0; v21[8] = 0.0; v21[7] = 0.0; v21[6] = 0.0; v21[5] = 0.0; v21[19] = 1.0; v21[14] = 1.0; v21[9] = 1.0; v21[4] = 1.0; } v34 = (int *)v21; break; case 1: if ( v32 != 3 ) return 0; v13 = sub_8CCF20(); v14 = (float *)v13; v13[16] = v29; v13[17] = v30; v13[18] = v30; if ( v30 > 4 ) return 0; sub_8CB370(v2, (int)&v25, v3, (int)v13); if ( (*(int (__stdcall **)(char *, int, float *))(*(_DWORD *)v2 + 140))(v2, a2, v14 + 4) < 0 ) { v14[4] = 0.0; v14[5] = 0.0; v14[6] = 0.0; v14[7] = 0.0; } v34 = (int *)v14; break; case 0: switch ( v32 ) { case 3: v15 = sub_8CCF50(); sub_8CA5D0(v2, (int)&v25, v3, (int)v15); if ( (*(int (__stdcall **)(char *, int, int *))(*(_DWORD *)v2 + 124))(v2, v3, &a2) < 0 ) { v34 = v15; *((float *)v15 + 4) = 0.0; } else { v34 = v15; v15[4] = a2; } break; case 1: v16 = sub_8CCF90(); sub_8CA770(v2, (int)&v25, v3, (int)v16); if ( (*(int (__stdcall **)(char *, int, int *))(*(_DWORD *)v2 + 92))(v2, v3, &v32) < 0 ) { *((_BYTE *)v16 + 16) = 0; v34 = v16; } else { v34 = v16; *((_BYTE *)v16 + 16) = v32 != 0; } break; case 2: v17 = sub_8CCFC0(); sub_8CA8A0(v2, (int)&v25, v3, (int)v17); v18 = (*(int (__stdcall **)(char *, int, int *))(*(_DWORD *)v2 + 108))(v2, v3, &v33); v34 = v17; v17[4] = v18 < 0 ? 0 : v33; break; } break; } } else { v10 = sub_8CD0A0(); v11 = v10; v10[324] = v29; v10[325] = v30; v10[326] = v31; if ( (unsigned int)v31 > 0x14 ) return 0; sub_8CD110((int)v10); sub_8CA160(v2, (int)&v25, v3, (int)v11); HIBYTE(a2) = 0; if ( v27 ) { if ( v27 == 1 ) { if ( v29 != 1 || v30 != 4 ) { v12 = (*(int (__stdcall **)(char *, int, int *, int))(*(_DWORD *)v2 + 148))(v2, v3, v11 + 244, v11[326]); HIBYTE(a2) = 1; } else { v12 = (*(int (__stdcall **)(char *, int, int *, int))(*(_DWORD *)v2 + 148))(v2, v3, v11 + 4, v11[326]); } } else { v12 = a2; } } else { v12 = (*(int (__stdcall **)(char *, int, int *, int))(*(_DWORD *)v2 + 132))(v2, v3, v11 + 4, v11[326]); } if ( v12 >= 0 ) { if ( HIBYTE(a2) ) sub_8CD1C0((int)(v11 + 244), (int)(v11 + 4), v11[324], v11[325], v11[326]); v34 = v11; } else { memset(v11 + 4, 0, 0x140u); v34 = v11; } } if ( !v34 ) return 0; *((_BYTE *)v34 + 4) = v36; goto LABEL_73; } } else if ( v33 != 2 && v33 != 3 || v31 != 1 ) { goto LABEL_27; } v9 = 0; v33 = 0; goto LABEL_27; } LABEL_73: v8 = v34; LABEL_74: v24 = (_BYTE *)v8[2]; if ( !v24 || !*v24 ) v8[2] = v25; return v8; } //----- (008CC2D0) -------------------------------------------------------- int *__cdecl sub_8CC2D0(char *a1, int a2) { int v2; // eax v2 = (*(int (__stdcall **)(char *, _DWORD, int))(*(_DWORD *)a1 + 32))(a1, 0, a2); return sub_8CBDE0(a1, v2); } //----- (008CC300) -------------------------------------------------------- void *__thiscall sub_8CC300(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiShaderAttributeDesc *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A401C8: using guessed type void *NiTListBase,NiShaderAttributeDesc *>::`vftable'; //----- (008CC330) -------------------------------------------------------- int __thiscall sub_8CC330(_DWORD *this) { _DWORD *v1; // eax v1 = (_DWORD *)this[2]; *this = v1; if ( !v1 ) return 0; *this = *v1; return v1[2]; } //----- (008CC350) -------------------------------------------------------- int __thiscall sub_8CC350(_DWORD *this) { _DWORD *v1; // eax v1 = (_DWORD *)*this; if ( !*this ) return 0; *this = *v1; return v1[2]; } //----- (008CC370) -------------------------------------------------------- int __thiscall sub_8CC370(_DWORD *this, char *a2) { _DWORD **v2; // edi _DWORD *v3; // eax int v4; // esi const char *v5; // eax _DWORD *v6; // eax v2 = (_DWORD **)this; v3 = (_DWORD *)this[2]; *this = v3; if ( !v3 ) return 0; *this = *v3; v4 = v3[2]; if ( !v4 ) return 0; while ( 1 ) { v5 = (const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4); if ( !_stricmp(v5, a2) ) break; v6 = *v2; if ( *v2 ) { *v2 = (_DWORD *)*v6; v4 = v6[2]; if ( v4 ) continue; } return 0; } return v4; } //----- (008CC3D0) -------------------------------------------------------- int __thiscall sub_8CC3D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiShaderAttributeDesc *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiShaderAttributeDesc *>::`vftable'; return result; } // A401C8: using guessed type void *NiTListBase,NiShaderAttributeDesc *>::`vftable'; // A401D8: using guessed type void *NiTPointerListBase,NiShaderAttributeDesc *>::`vftable'; //----- (008CC410) -------------------------------------------------------- void *__thiscall sub_8CC410(void *this, char a2) { void *v2; // esi v2 = this; sub_8CC3D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CC440) -------------------------------------------------------- int __thiscall sub_8CC440(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // eax _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST00_4 v1 = this; v2 = this[2]; *this = v2; if ( v2 ) { do { v3 = (_DWORD *)*v1; *v1 = *(_DWORD *)*v1; v4 = (void (__thiscall ***)(_DWORD, signed int))v3[2]; if ( v4 ) (**v4)(v4, 1); } while ( *v1 ); } v5 = v1 + 1; v6 = (_DWORD *)v1[2]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; return sub_8CC3D0(v5); } //----- (008CC4B0) -------------------------------------------------------- char __thiscall sub_8CC4B0(_DWORD *this, char *a2, int a3, int a4) { int v4; // ebx _DWORD *v6; // eax _DWORD *v7; // esi v4 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v6 = operator new(0xE4u); if ( v6 && (v7 = sub_956E30(v6)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v7 + 12))(v7, a2); sub_957020((int)v7, 1); sub_9573C0(v7, a3); } else { v7 = 0; } sub_9570A0((int)v7, a4); if ( sub_960510(v4, (int)v7, (int)v7) ) return 1; if ( v7 ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); return 0; } //----- (008CC550) -------------------------------------------------------- char __thiscall sub_8CC550(_DWORD *this, char *a2, int a3, int a4, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 3); sub_9573C0(v9, a3); } else { v9 = 0; } sub_957110((int)v9, a4); if ( a6 ) { sub_957400(v9, a5, a6); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CC600) -------------------------------------------------------- char __thiscall sub_8CC600(_DWORD *this, char *a2, int a3, float a4, float a5, float a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 4); sub_9573C0(v9, a3); } else { v9 = 0; } sub_957180((int)v9, a4); if ( 0.0 != a6 ) { sub_957430((int)v9, a5, a6); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CC6D0) -------------------------------------------------------- char __thiscall sub_8CC6D0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi float v10; // [esp+8h] [ebp-18h] float v11; // [esp+Ch] [ebp-14h] float v12; // [esp+10h] [ebp-10h] float v13; // [esp+14h] [ebp-Ch] float v14; // [esp+18h] [ebp-8h] float v15; // [esp+1Ch] [ebp-4h] v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 5); sub_9573C0(v9, a3); } else { v9 = 0; } v14 = *(float *)a4; v15 = *(float *)(a4 + 4); sub_9571E0((int)v9, &v14); if ( a6 ) { v10 = *(float *)a5; v11 = *(float *)(a5 + 4); v12 = *(float *)a6; v13 = *(float *)(a6 + 4); sub_957460((int)v9, &v10, &v12); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CC7C0) -------------------------------------------------------- char __thiscall sub_8CC7C0(_DWORD *this, char *a2, int a3, int a4, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi float v10; // [esp+8h] [ebp-24h] float v11; // [esp+Ch] [ebp-20h] float v12; // [esp+10h] [ebp-1Ch] float v13; // [esp+14h] [ebp-18h] float v14; // [esp+18h] [ebp-14h] float v15; // [esp+1Ch] [ebp-10h] float v16; // [esp+20h] [ebp-Ch] float v17; // [esp+24h] [ebp-8h] float v18; // [esp+28h] [ebp-4h] v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 6); sub_9573C0(v9, a3); } else { v9 = 0; } v16 = *(float *)a4; v17 = *(float *)(a4 + 4); v18 = *(float *)(a4 + 8); sub_957250((int)v9, &v16); if ( a6 ) { v10 = *(float *)a5; v11 = *(float *)(a5 + 4); v12 = *(float *)(a5 + 8); v13 = *(float *)a6; v14 = *(float *)(a6 + 4); v15 = *(float *)(a6 + 8); sub_9574A0((int)v9, &v10, &v13); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CC8C0) -------------------------------------------------------- char __thiscall sub_8CC8C0(_DWORD *this, char *a2, int a3, void *Src, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 7); sub_9573C0(v9, a3); } else { v9 = 0; } sub_9577A0((int)v9, Src); if ( a6 ) { sub_9574F0((int)v9, (float *)a5, (float *)a6); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CC970) -------------------------------------------------------- char __thiscall sub_8CC970(_DWORD *this, char *a2, char a3, int a4) { int v4; // ebx _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // esi float v9; // [esp+Ch] [ebp-28h] float v10; // [esp+10h] [ebp-24h] float v11; // [esp+14h] [ebp-20h] float v12; // [esp+18h] [ebp-1Ch] float v13; // [esp+1Ch] [ebp-18h] float v14; // [esp+20h] [ebp-14h] float v15; // [esp+24h] [ebp-10h] float v16; // [esp+28h] [ebp-Ch] float v17; // [esp+2Ch] [ebp-8h] v4 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v6 = operator new(0xE4u); if ( v6 && (v7 = sub_956E30(v6), (v8 = v7) != 0) ) { (*(void (__thiscall **)(_DWORD *, char *))(*v7 + 12))(v7, a2); sub_957020((int)v8, 8); sub_9573C0(v8, a3); } else { v8 = 0; } v9 = *(float *)a4; v10 = *(float *)(a4 + 4); v11 = *(float *)(a4 + 8); v12 = *(float *)(a4 + 16); v13 = *(float *)(a4 + 20); v14 = *(float *)(a4 + 24); v15 = *(float *)(a4 + 32); v16 = *(float *)(a4 + 36); v17 = *(float *)(a4 + 40); sub_957810((int)v8, &v9); sub_9573E0(v8, 0); if ( sub_960510(v4, (int)v8, (int)v8) ) return 1; if ( v8 ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); return 0; } //----- (008CCA80) -------------------------------------------------------- char __thiscall sub_8CCA80(_DWORD *this, char *a2, int a3, void *Src) { int v4; // ebx _DWORD *v6; // eax _DWORD *v7; // esi v4 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v6 = operator new(0xE4u); if ( v6 && (v7 = sub_956E30(v6)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v7 + 12))(v7, a2); sub_957020((int)v7, 9); sub_9573C0(v7, a3); } else { v7 = 0; } sub_9578B0((int)v7, Src); sub_9573E0(v7, 0); if ( sub_960510(v4, (int)v7, (int)v7) ) return 1; if ( v7 ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); return 0; } //----- (008CCB20) -------------------------------------------------------- char __thiscall sub_8CCB20(_DWORD *this, char *a2, int a3, int a4, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi float v10; // [esp+8h] [ebp-24h] float v11; // [esp+Ch] [ebp-20h] float v12; // [esp+10h] [ebp-1Ch] float v13; // [esp+14h] [ebp-18h] float v14; // [esp+18h] [ebp-14h] float v15; // [esp+1Ch] [ebp-10h] float v16; // [esp+20h] [ebp-Ch] float v17; // [esp+24h] [ebp-8h] float v18; // [esp+28h] [ebp-4h] v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 10); sub_9573C0(v9, a3); } else { v9 = 0; } v16 = *(float *)a4; v17 = *(float *)(a4 + 4); v18 = *(float *)(a4 + 8); sub_9572C0((int)v9, &v16); if ( a6 ) { v10 = *(float *)a5; v11 = *(float *)(a5 + 4); v12 = *(float *)(a5 + 8); v13 = *(float *)a6; v14 = *(float *)(a6 + 4); v15 = *(float *)(a6 + 8); sub_957550((int)v9, &v10, &v13); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CCC20) -------------------------------------------------------- char __thiscall sub_8CCC20(_DWORD *this, char *a2, int a3, int a4, int a5, int a6) { int v6; // ebx _DWORD *v8; // eax _DWORD *v9; // esi float v10; // [esp+8h] [ebp-30h] float v11; // [esp+Ch] [ebp-2Ch] float v12; // [esp+10h] [ebp-28h] float v13; // [esp+14h] [ebp-24h] float v14; // [esp+18h] [ebp-20h] float v15; // [esp+1Ch] [ebp-1Ch] float v16; // [esp+20h] [ebp-18h] float v17; // [esp+24h] [ebp-14h] float v18; // [esp+28h] [ebp-10h] float v19; // [esp+2Ch] [ebp-Ch] float v20; // [esp+30h] [ebp-8h] float v21; // [esp+34h] [ebp-4h] v6 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v8 = operator new(0xE4u); if ( v8 && (v9 = sub_956E30(v8)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v9 + 12))(v9, a2); sub_957020((int)v9, 10); sub_9573C0(v9, a3); } else { v9 = 0; } v18 = *(float *)a4; v19 = *(float *)(a4 + 4); v20 = *(float *)(a4 + 8); v21 = *(float *)(a4 + 12); sub_957340((int)v9, &v18); if ( a6 ) { v10 = *(float *)a5; v11 = *(float *)(a5 + 4); v12 = *(float *)(a5 + 8); v13 = *(float *)(a5 + 12); v14 = *(float *)a6; v15 = *(float *)(a6 + 4); v16 = *(float *)(a6 + 8); v17 = *(float *)(a6 + 12); sub_9575B0((int)v9, &v10, &v14); sub_9573E0(v9, 1); } if ( sub_960510(v6, (int)v9, (int)v9) ) return 1; if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); return 0; } //----- (008CCD30) -------------------------------------------------------- char __thiscall sub_8CCD30(_DWORD *this, char *a2, int a3, int a4, char *Src) { int v5; // ebx _DWORD *v7; // eax _DWORD *v8; // esi v5 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v7 = operator new(0xE4u); if ( v7 && (v8 = sub_956E30(v7)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v8 + 12))(v8, a2); sub_957020((int)v8, 11); sub_9573C0(v8, a3); } else { v8 = 0; } sub_957920((int)v8, a4, Src); if ( sub_960510(v5, (int)v8, (int)v8) ) return 1; if ( v8 ) (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); return 0; } //----- (008CCDD0) -------------------------------------------------------- char __thiscall sub_8CCDD0(_DWORD *this, char *a2, int a3, void *Src, int a5, int a6, int a7, void *a8, void *a9) { _DWORD *v10; // eax _DWORD *v11; // esi int v12; // [esp+4h] [ebp-4h] v12 = (int)this; if ( sub_8CC370(this, a2) ) return 0; v10 = operator new(0xE4u); if ( v10 && (v11 = sub_956E30(v10)) != 0 ) { (*(void (__thiscall **)(_DWORD *, char *))(*v11 + 12))(v11, a2); sub_957020((int)v11, 14); sub_9573C0(v11, a3); } else { v11 = 0; } sub_957A40((int)v11, Src, a7, a6, a5); if ( a8 && a9 ) { sub_957AE0(v11, a6, a5, a8, a9); sub_9573E0(v11, 1); } else { sub_9573E0(v11, 0); } if ( sub_960510(v12, (int)v11, (int)v11) ) return 1; if ( v11 ) (*(void (__thiscall **)(_DWORD *, signed int))*v11)(v11, 1); return 0; } //----- (008CCEA0) -------------------------------------------------------- _DWORD *__thiscall sub_8CCEA0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // esi result = this; v2 = this + 1; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerList::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; return result; } // A401E8: using guessed type void *NiTPointerList::`vftable'; //----- (008CCEF0) -------------------------------------------------------- int *sub_8CCEF0() { memset(&dword_BA6518, 0, 0x5Cu); dword_BA6518 = 1; return &dword_BA6518; } // BA6518: using guessed type int dword_BA6518; //----- (008CCF20) -------------------------------------------------------- int *sub_8CCF20() { memset(&dword_BA64C8, 0, 0x50u); dword_BA64C8 = 2; return &dword_BA64C8; } // BA64C8: using guessed type int dword_BA64C8; //----- (008CCF50) -------------------------------------------------------- int *sub_8CCF50() { dword_BA64AC = 0; dword_BA64B0 = 0; dword_BA64B4 = 0; dword_BA64B8 = 0; dword_BA64BC = 0; dword_BA64C0 = 0; dword_BA64C4 = 0; dword_BA64A8 = 3; return &dword_BA64A8; } // BA64A8: using guessed type int dword_BA64A8; // BA64AC: using guessed type int dword_BA64AC; // BA64B0: using guessed type int dword_BA64B0; // BA64B4: using guessed type int dword_BA64B4; // BA64B8: using guessed type int dword_BA64B8; // BA64BC: using guessed type int dword_BA64BC; // BA64C0: using guessed type int dword_BA64C0; // BA64C4: using guessed type int dword_BA64C4; //----- (008CCF90) -------------------------------------------------------- int *sub_8CCF90() { dword_BA6430 = 0; dword_BA6434 = 0; dword_BA6438 = 0; dword_BA643C = 0; dword_BA642C = 4; return &dword_BA642C; } // BA642C: using guessed type int dword_BA642C; // BA6430: using guessed type int dword_BA6430; // BA6434: using guessed type int dword_BA6434; // BA6438: using guessed type int dword_BA6438; // BA643C: using guessed type int dword_BA643C; //----- (008CCFC0) -------------------------------------------------------- int *sub_8CCFC0() { dword_BA648C = 0; dword_BA6490 = 0; dword_BA6494 = 0; dword_BA6498 = 0; dword_BA649C = 0; dword_BA64A0 = 0; dword_BA64A4 = 0; dword_BA6488 = 5; return &dword_BA6488; } // BA6488: using guessed type int dword_BA6488; // BA648C: using guessed type int dword_BA648C; // BA6490: using guessed type int dword_BA6490; // BA6494: using guessed type int dword_BA6494; // BA6498: using guessed type int dword_BA6498; // BA649C: using guessed type int dword_BA649C; // BA64A0: using guessed type int dword_BA64A0; // BA64A4: using guessed type int dword_BA64A4; //----- (008CD000) -------------------------------------------------------- int *sub_8CD000() { memset(&dword_BA6440, 0, 0x48u); dword_BA6440 = 6; return &dword_BA6440; } // BA6440: using guessed type int dword_BA6440; //----- (008CD030) -------------------------------------------------------- int *sub_8CD030() { dword_BA6414 = 0; dword_BA6418 = 0; dword_BA641C = 0; dword_BA6420 = 0; dword_BA6424 = 0; dword_BA6428 = 0; dword_BA6410 = 7; return &dword_BA6410; } // BA6410: using guessed type int dword_BA6410; // BA6414: using guessed type int dword_BA6414; // BA6418: using guessed type int dword_BA6418; // BA641C: using guessed type int dword_BA641C; // BA6420: using guessed type int dword_BA6420; // BA6424: using guessed type int dword_BA6424; // BA6428: using guessed type int dword_BA6428; //----- (008CD070) -------------------------------------------------------- int *sub_8CD070() { dword_BA63FC = 0; dword_BA6400 = 0; dword_BA6404 = 0; dword_BA6408 = 0; dword_BA640C = 0; dword_BA63F8 = 8; return &dword_BA63F8; } // BA63F8: using guessed type int dword_BA63F8; // BA63FC: using guessed type int dword_BA63FC; // BA6400: using guessed type int dword_BA6400; // BA6404: using guessed type int dword_BA6404; // BA6408: using guessed type int dword_BA6408; // BA640C: using guessed type int dword_BA640C; //----- (008CD0A0) -------------------------------------------------------- int *sub_8CD0A0() { memset(&dword_BA5ED8, 0, 0x520u); dword_BA5ED8 = 9; return &dword_BA5ED8; } // BA5ED8: using guessed type int dword_BA5ED8; //----- (008CD0D0) -------------------------------------------------------- signed int __thiscall sub_8CD0D0(_DWORD *this) { signed int result; // eax result = 2; if ( this[16] == 1 ) { if ( this[17] != 2 || this[18] != 2 ) { if ( this[17] == 3 && this[18] == 3 ) result = 1; } else { result = 0; } } return result; } //----- (008CD110) -------------------------------------------------------- signed int __thiscall sub_8CD110(int this) { signed int result; // eax result = *(_DWORD *)(this + 1296); if ( result != 1 ) goto LABEL_12; if ( *(_DWORD *)(this + 1300) == 1 ) return 0; if ( *(_DWORD *)(this + 1300) != 2 ) { if ( *(_DWORD *)(this + 1300) == 3 ) return 2; result = 4; if ( *(_DWORD *)(this + 1300) != 4 || !*(_BYTE *)(this + 1309) ) LABEL_12: result = 3; } return result; } //----- (008CD170) -------------------------------------------------------- signed int __thiscall sub_8CD170(_DWORD *this) { signed int result; // eax if ( this[324] != 1 ) return 16; if ( this[325] == 1 ) return 4; if ( this[325] == 2 ) return 8; result = 12; if ( this[325] != 3 ) return 16; return result; } //----- (008CD1C0) -------------------------------------------------------- char __cdecl sub_8CD1C0(int a1, int a2, int a3, int a4, signed int a5) { int v5; // eax unsigned int v6; // ebx int v7; // ecx unsigned int v8; // esi int v9; // ecx float *v10; // eax int v11; // edi int v13; // eax unsigned int v14; // ebx int v15; // ecx unsigned int v16; // esi int v17; // eax int v18; // ecx int v19; // edi int v20; // eax unsigned int v21; // ebx int v22; // ecx unsigned int v23; // esi int v24; // eax int v25; // ecx int v26; // edi if ( a3 != 1 ) return 0; if ( a4 == 2 ) { v5 = 0; v6 = 0; if ( a5 >= 4 ) { v7 = a1 + 16; v8 = ((unsigned int)(a5 - 4) >> 2) + 1; v6 = 4 * v8; do { v5 += 8; *(float *)(a2 + 4 * v5 - 32) = *(float *)(v7 - 16); v7 += 64; --v8; *(float *)(a2 + 4 * v5 - 28) = *(float *)(v7 - 76); *(float *)(a2 + 4 * v5 - 24) = *(float *)(v7 - 64); *(float *)(a2 + 4 * v5 - 20) = *(float *)(v7 - 60); *(float *)(a2 + 4 * v5 - 16) = *(float *)(v7 - 48); *(float *)(a2 + 4 * v5 - 12) = *(float *)(v7 - 44); *(float *)(a2 + 4 * v5 - 8) = *(float *)(v7 - 32); *(float *)(a2 + 4 * v5 - 4) = *(float *)(v7 - 28); } while ( v8 ); } if ( v6 < a5 ) { v9 = a2 + 4 * v5; v10 = (float *)(a1 + 16 * v6); v11 = a5 - v6; do { v9 += 8; *(float *)(v9 - 8) = *v10; v10 += 4; --v11; *(float *)(v9 - 4) = *(v10 - 3); } while ( v11 ); } return 1; } if ( a4 == 3 ) { v13 = 0; v14 = 0; if ( a5 >= 4 ) { v15 = a1 + 8; v16 = ((unsigned int)(a5 - 4) >> 2) + 1; v14 = 4 * v16; do { v13 += 12; *(float *)(a2 + 4 * v13 - 48) = *(float *)(v15 - 8); v15 += 64; --v16; *(float *)(a2 + 4 * v13 - 44) = *(float *)(v15 - 68); *(float *)(a2 + 4 * v13 - 40) = *(float *)(v15 - 64); *(float *)(a2 + 4 * v13 - 36) = *(float *)(v15 - 56); *(float *)(a2 + 4 * v13 - 32) = *(float *)(v15 - 52); *(float *)(a2 + 4 * v13 - 28) = *(float *)(v15 - 48); *(float *)(a2 + 4 * v13 - 24) = *(float *)(v15 - 40); *(float *)(a2 + 4 * v13 - 20) = *(float *)(v15 - 36); *(float *)(a2 + 4 * v13 - 16) = *(float *)(v15 - 32); *(float *)(a2 + 4 * v13 - 12) = *(float *)(v15 - 24); *(float *)(a2 + 4 * v13 - 8) = *(float *)(v15 - 20); *(float *)(a2 + 4 * v13 - 4) = *(float *)(v15 - 16); } while ( v16 ); } if ( v14 < a5 ) { v17 = a2 + 4 * v13; v18 = a1 + 16 * v14 + 8; v19 = a5 - v14; do { v17 += 12; *(float *)(v17 - 12) = *(float *)(v18 - 8); v18 += 16; --v19; *(float *)(v17 - 8) = *(float *)(v18 - 20); *(float *)(v17 - 4) = *(float *)(v18 - 16); } while ( v19 ); } return 1; } if ( a4 != 4 ) return 0; v20 = 0; v21 = 0; if ( a5 >= 4 ) { v22 = a1 + 8; v23 = ((unsigned int)(a5 - 4) >> 2) + 1; v21 = 4 * v23; do { v20 += 16; *(float *)(a2 + 4 * v20 - 64) = *(float *)(v22 - 8); v22 += 64; --v23; *(float *)(a2 + 4 * v20 - 60) = *(float *)(v22 - 68); *(float *)(a2 + 4 * v20 - 56) = *(float *)(v22 - 64); *(float *)(a2 + 4 * v20 - 52) = *(float *)(v22 - 60); *(float *)(a2 + 4 * v20 - 48) = *(float *)(v22 - 56); *(float *)(a2 + 4 * v20 - 44) = *(float *)(v22 - 52); *(float *)(a2 + 4 * v20 - 40) = *(float *)(v22 - 48); *(float *)(a2 + 4 * v20 - 36) = *(float *)(v22 - 44); *(float *)(a2 + 4 * v20 - 32) = *(float *)(v22 - 40); *(float *)(a2 + 4 * v20 - 28) = *(float *)(v22 - 36); *(float *)(a2 + 4 * v20 - 24) = *(float *)(v22 - 32); *(float *)(a2 + 4 * v20 - 20) = *(float *)(v22 - 28); *(float *)(a2 + 4 * v20 - 16) = *(float *)(v22 - 24); *(float *)(a2 + 4 * v20 - 12) = *(float *)(v22 - 20); *(float *)(a2 + 4 * v20 - 8) = *(float *)(v22 - 16); *(float *)(a2 + 4 * v20 - 4) = *(float *)(v22 - 12); } while ( v23 ); } if ( v21 < a5 ) { v24 = a2 + 4 * v20; v25 = a1 + 16 * v21 + 8; v26 = a5 - v21; do { v24 += 16; *(float *)(v24 - 16) = *(float *)(v25 - 8); v25 += 16; --v26; *(float *)(v24 - 12) = *(float *)(v25 - 20); *(float *)(v24 - 8) = *(float *)(v25 - 16); *(float *)(v24 - 4) = *(float *)(v25 - 12); } while ( v26 ); } return 1; } //----- (008CD420) -------------------------------------------------------- char __cdecl sub_8CD420(int a1, int a2, int a3, int a4, signed int a5) { int v5; // ecx unsigned int v6; // ebx int v7; // eax unsigned int v8; // esi double v9; // st6 float *v10; // ecx int v11; // eax int v12; // edi double v13; // st6 int v15; // eax unsigned int v16; // ebx int v17; // ecx unsigned int v18; // esi double v19; // st6 float *v20; // eax int v21; // ecx int v22; // edi double v23; // st6 if ( a3 != 1 ) return 0; if ( a4 == 2 ) { v5 = 0; v6 = 0; if ( a5 >= 4 ) { v7 = a2 + 24; v8 = ((unsigned int)(a5 - 4) >> 2) + 1; v6 = 4 * v8; do { v9 = *(float *)(a1 + 4 * v5); v5 += 8; *(float *)(v7 - 24) = v9; v7 += 64; --v8; *(float *)(v7 - 84) = *(float *)(a1 + 4 * v5 - 28); *(float *)(v7 - 80) = 0.0; *(float *)(v7 - 76) = 0.0; *(float *)(v7 - 72) = *(float *)(a1 + 4 * v5 - 24); *(float *)(v7 - 68) = *(float *)(a1 + 4 * v5 - 20); *(float *)(v7 - 64) = 0.0; *(float *)(v7 - 60) = 0.0; *(float *)(v7 - 56) = *(float *)(a1 + 4 * v5 - 16); *(float *)(v7 - 52) = *(float *)(a1 + 4 * v5 - 12); *(float *)(v7 - 48) = 0.0; *(float *)(v7 - 44) = 0.0; *(float *)(v7 - 40) = *(float *)(a1 + 4 * v5 - 8); *(float *)(v7 - 36) = *(float *)(a1 + 4 * v5 - 4); *(float *)(v7 - 32) = 0.0; *(float *)(v7 - 28) = 0.0; } while ( v8 ); } if ( v6 < a5 ) { v10 = (float *)(a1 + 4 * v5); v11 = a2 + 16 * v6 + 8; v12 = a5 - v6; do { v13 = *v10; v10 += 2; *(float *)(v11 - 8) = v13; v11 += 16; --v12; *(float *)(v11 - 20) = *(v10 - 1); *(float *)(v11 - 16) = 0.0; *(float *)(v11 - 12) = 0.0; } while ( v12 ); } return 1; } if ( a4 != 3 ) return 0; v15 = 0; v16 = 0; if ( a5 >= 4 ) { v17 = a2 + 24; v18 = ((unsigned int)(a5 - 4) >> 2) + 1; v16 = 4 * v18; do { v19 = *(float *)(a1 + 4 * v15); v15 += 12; *(float *)(v17 - 24) = v19; v17 += 64; --v18; *(float *)(v17 - 84) = *(float *)(a1 + 4 * v15 - 44); *(float *)(v17 - 80) = *(float *)(a1 + 4 * v15 - 40); *(float *)(v17 - 76) = 0.0; *(float *)(v17 - 72) = *(float *)(a1 + 4 * v15 - 36); *(float *)(v17 - 68) = *(float *)(a1 + 4 * v15 - 32); *(float *)(v17 - 64) = *(float *)(a1 + 4 * v15 - 28); *(float *)(v17 - 60) = 0.0; *(float *)(v17 - 56) = *(float *)(a1 + 4 * v15 - 24); *(float *)(v17 - 52) = *(float *)(a1 + 4 * v15 - 20); *(float *)(v17 - 48) = *(float *)(a1 + 4 * v15 - 16); *(float *)(v17 - 44) = 0.0; *(float *)(v17 - 40) = *(float *)(a1 + 4 * v15 - 12); *(float *)(v17 - 36) = *(float *)(a1 + 4 * v15 - 8); *(float *)(v17 - 32) = *(float *)(a1 + 4 * v15 - 4); *(float *)(v17 - 28) = 0.0; } while ( v18 ); } if ( v16 < a5 ) { v20 = (float *)(a1 + 4 * v15); v21 = a2 + 16 * v16 + 8; v22 = a5 - v16; do { v23 = *v20; v20 += 3; *(float *)(v21 - 8) = v23; v21 += 16; --v22; *(float *)(v21 - 20) = *(v20 - 2); *(float *)(v21 - 16) = *(v20 - 1); *(float *)(v21 - 12) = 0.0; } while ( v22 ); } return 1; } //----- (008CD5D0) -------------------------------------------------------- char __thiscall sub_8CD5D0(int this, int a2) { int v2; // esi char result; // al const char *v4; // eax v2 = this; if ( *(_BYTE *)(this + 28) || sub_91DAF0((_DWORD *)this, a2) && (v4 = *(const char **)(v2 + 8)) != 0 && strcmp(v4, &byte_9A8050) && ((*(void (__thiscall **)(int))(*(_DWORD *)v2 + 80))(v2), *(_DWORD *)(v2 + 100)) && *(_DWORD *)(v2 + 92) ) { result = *(_BYTE *)(v2 + 28); } else { result = 0; } return result; } //----- (008CD650) -------------------------------------------------------- signed int __thiscall sub_8CD650(void **this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8) { void **v8; // esi signed int v9; // edi v8 = this; v9 = sub_91E5C0((int)this, a2, a3, a4, a5, a6, a7, a8); if ( !v8[25] || !v8[23] ) { (*((void (__thiscall **)(void **))*v8 + 20))(v8); if ( !v8[24] ) nullsub_6(v8[2]); } (*(void (__stdcall **)(void *, void *))(*(_DWORD *)v8[25] + 232))(v8[25], v8[23]); return v9; } //----- (008CD6D0) -------------------------------------------------------- int __thiscall sub_8CD6D0(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD **v9; // esi void *v10; // ecx _DWORD *v11; // ST04_4 v9 = this; if ( (*(int (__stdcall **)(_DWORD *))(*this[25] + 264))(this[25]) < 0 ) { v11 = v9[2]; nullsub_6(v10); } return 0; } //----- (008CD700) -------------------------------------------------------- int __thiscall sub_8CD700(_DWORD **this) { _DWORD **v1; // esi int v2; // edi void *v3; // ecx _DWORD *v4; // ST08_4 bool v5; // zf v1 = this; v2 = (int)(this + 14); if ( (*(int (__stdcall **)(_DWORD *, _DWORD **, signed int))(*this[25] + 252))(this[25], this + 14, 7) < 0 ) { v4 = v1[2]; nullsub_6(v3); } v5 = *(_DWORD *)v2 == 0; v1[13] = 0; if ( v5 ) (*(void (__stdcall **)(_DWORD *))(*v1[25] + 268))(v1[25]); return *(_DWORD *)v2; } //----- (008CD750) -------------------------------------------------------- int __thiscall sub_8CD750(int this) { int v1; // esi v1 = *(_DWORD *)(this + 56) - ++*(_DWORD *)(this + 52); if ( *(_DWORD *)(this + 56) == *(_DWORD *)(this + 52) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 100) + 268))(*(_DWORD *)(this + 100)); return v1; } //----- (008CD770) -------------------------------------------------------- char __thiscall sub_8CD770(_DWORD *this) { unsigned int v1; // edx int v2; // eax int v3; // ecx int v4; // ecx v4 = this[22]; if ( !v4 ) return 0; v1 = *(_DWORD *)(v4 + 48); v2 = 0; if ( !v1 ) return 1; v3 = *(_DWORD *)(v4 + 52); while ( *(_BYTE *)(v3 + v2) ) { if ( ++v2 >= v1 ) return 1; } return 0; } //----- (008CD780) -------------------------------------------------------- char __thiscall sub_8CD780(_DWORD *this) { unsigned int v1; // edx int v2; // eax int v3; // ecx int v4; // ecx v4 = this[22]; if ( !v4 ) return 0; v1 = *(_DWORD *)(v4 + 48); v2 = 0; if ( !v1 ) return 0; v3 = *(_DWORD *)(v4 + 52); while ( *(_BYTE *)(v3 + v2) != 1 ) { if ( ++v2 >= v1 ) return 0; } return 1; } //----- (008CD790) -------------------------------------------------------- char __thiscall sub_8CD790(_DWORD *this) { unsigned int v1; // edx int v2; // eax int v3; // ecx int v4; // ecx v4 = this[22]; if ( !v4 ) return 0; v1 = *(_DWORD *)(v4 + 48); v2 = 0; if ( !v1 ) return 1; v3 = *(_DWORD *)(v4 + 56); while ( *(_BYTE *)(v3 + v2) ) { if ( ++v2 >= v1 ) return 1; } return 0; } //----- (008CD7A0) -------------------------------------------------------- char __thiscall sub_8CD7A0(_DWORD *this) { unsigned int v1; // edx int v2; // eax int v3; // ecx int v4; // ecx v4 = this[22]; if ( !v4 ) return 0; v1 = *(_DWORD *)(v4 + 48); v2 = 0; if ( !v1 ) return 0; v3 = *(_DWORD *)(v4 + 56); while ( *(_BYTE *)(v3 + v2) != 1 ) { if ( ++v2 >= v1 ) return 0; } return 1; } //----- (008CD7B0) -------------------------------------------------------- void *sub_8CD7B0() { return &unk_BA6578; } //----- (008CD7C0) -------------------------------------------------------- void *__thiscall sub_8CD7C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiD3DXEffectShader::`vftable'; sub_91EDA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A401FC: using guessed type void *NiD3DXEffectShader::`vftable'; //----- (008CD7F0) -------------------------------------------------------- int __thiscall sub_8CD7F0(int this, _DWORD *a2, _DWORD *a3, int a4, int a5, unsigned int a6, _DWORD *a7, float *a8, float *a9) { int v9; // esi _DWORD *i; // edi int v11; // eax int v12; // ST24_4 int v13; // ST20_4 int v14; // ST24_4 int v15; // ST20_4 int v17; // [esp+Ch] [ebp-4h] v9 = this; v17 = 0; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 24) + 236))(*(unsigned __int8 *)(this + 116)); if ( sub_8C9950(*(_DWORD **)(v9 + 88), *(_DWORD *)(v9 + 52)) ) { if ( a4 ) { if ( !*(_DWORD *)(v9 + 52) ) sub_925370(*(_DWORD **)(v9 + 20), a3, *(float *)&a8, 1, *(_DWORD *)(v9 + 108), *(_DWORD *)(v9 + 112) == 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(*(unsigned __int16 *)(a4 + 36)); } else { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(0); } sub_9251F0(*(char **)(v9 + 20), a8, 0); } else { v17 = sub_91DC50(v9, (int)a2, a3, a4, a5, a6, (int)a7, a8, (int)a9); } for ( i = sub_8C9E90(*(_DWORD **)(v9 + 88)); i; i = (_DWORD *)sub_8C9A70(*(_DWORD **)(v9 + 88)) ) { sub_8C8960((int)i, *(_DWORD *)(v9 + 100), a2, (int)a3, a4, a5, a6, a7, (int)a8, a9, *(_DWORD *)(v9 + 52)); if ( v11 ) { if ( v11 == -2147483552 ) { if ( byte_BA7140 ) { v14 = a2[2]; v15 = i[1]; nullsub_6(*(void **)(v9 + 8)); } } else { v12 = a2[2]; v13 = i[1]; nullsub_6(*(void **)(v9 + 8)); } } } return v17; } // BA7140: using guessed type char byte_BA7140; //----- (008CD940) -------------------------------------------------------- int __thiscall sub_8CD940(_DWORD *this) { int v1; // ST04_4 _DWORD *v2; // eax v1 = *(_DWORD *)(this[5] + 1268); v2 = sub_8C55E0(1); return sub_8C4F30(v2, v1); } //----- (008CD960) -------------------------------------------------------- int __thiscall sub_8CD960(_DWORD *this) { int v1; // ST04_4 _DWORD *v2; // eax v1 = *(_DWORD *)(this[5] + 1268); v2 = sub_8C55E0(1); return sub_8C4FD0(v2, v1); } //----- (008CD980) -------------------------------------------------------- LONG __thiscall sub_8CD980(_DWORD *this) { _DWORD *v1; // esi LONG result; // eax int v3; // edi v1 = this; sub_8C5A80(*(_DWORD *)(this[22] + 20)); result = v1[24]; if ( result ) { result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(v1[24]); v1[24] = 0; if ( v1[25] ) v1[25] = 0; } v1[23] = 0; v3 = v1[9]; if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result && v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); v1[9] = 0; } *((_BYTE *)v1 + 28) = 0; return result; } //----- (008CD9E0) -------------------------------------------------------- void __thiscall sub_8CD9E0(int this) { int v1; // ebx unsigned int v2; // edi int *v3; // eax int *v4; // esi int v5; // eax int v6; // eax unsigned int v7; // ebx int v8; // edi char *v9; // esi int *v10; // eax int v11; // eax char *v12; // esi unsigned int v13; // edi _DWORD *v14; // ecx char *v15; // eax _DWORD *v16; // eax int v17; // edi _DWORD *v18; // ebx unsigned int *v19; // esi int v20; // ecx int v21; // esi char v22; // [esp+8h] [ebp-2Ch] unsigned int v23; // [esp+Ch] [ebp-28h] char *v24; // [esp+14h] [ebp-20h] int v25; // [esp+18h] [ebp-1Ch] int v26; // [esp+1Ch] [ebp-18h] void *v27; // [esp+20h] [ebp-14h] void *v28; // [esp+24h] [ebp-10h] char *v29; // [esp+28h] [ebp-Ch] unsigned int v30; // [esp+2Ch] [ebp-8h] int v31; // [esp+30h] [ebp-4h] v1 = this; v2 = 0; v26 = this; if ( !*(_DWORD *)(this + 36) ) { (*(void (__stdcall **)(_DWORD, _DWORD, char *))(**(_DWORD **)(this + 96) + 20))( *(_DWORD *)(this + 96), *(_DWORD *)(this + 92), &v22); v3 = (int *)operator new(16 * v23); v27 = v3; v31 = 0; if ( v23 <= 0 ) { LABEL_10: operator delete(v3); return; } v4 = v3 + 2; while ( 1 ) { v5 = (*(int (__stdcall **)(_DWORD, _DWORD, unsigned int))(**(_DWORD **)(v1 + 96) + 56))( *(_DWORD *)(v1 + 96), *(_DWORD *)(v1 + 92), v2); (*(void (__stdcall **)(_DWORD, int, int *))(**(_DWORD **)(v1 + 96) + 24))(*(_DWORD *)(v1 + 96), v5, v4 - 2); v6 = *v4; v7 = 0; if ( *v4 ) { v28 = 0; D3DXGetShaderInputSemantics(v6, 0, &v28); v31 += (int)v28; } ++v2; v4 += 4; if ( v2 >= v23 ) break; v1 = v26; } v8 = v31; if ( !v31 ) { v3 = (int *)v27; goto LABEL_10; } v9 = 0; v29 = 0; v28 = operator new(8 * v31); v25 = 0; if ( v23 > 0 ) { v10 = (int *)((char *)v27 + 8); v24 = (char *)v27 + 8; do { v11 = *v10; if ( v11 ) { v12 = (char *)v28 + 8 * (_DWORD)v9; v30 = 0; D3DXGetShaderInputSemantics(v11, v12, &v30); if ( v7 ) { v13 = 0; v14 = v12; if ( v30 ) { do { v15 = (char *)v28; if ( v28 < v12 ) { while ( *(_DWORD *)v15 != *v14 || *((_DWORD *)v15 + 1) != v14[1] ) { v15 += 8; if ( v15 >= v12 ) goto LABEL_22; } --v31; *v14 = -1; v14[1] = -1; } LABEL_22: ++v13; v14 += 2; } while ( v13 < v30 ); v7 = v25; } } v29 += v30; v9 = v29; } ++v7; v10 = (int *)(v24 + 16); v25 = v7; v24 += 16; } while ( v7 < v23 ); v8 = v31; } operator delete(v27); if ( v9 ) { v16 = sub_934760(*(_DWORD *)(v26 + 20), v8, 1u); v17 = 0; v18 = v16; if ( v9 ) { v19 = (unsigned int *)((char *)v28 + 4); v24 = v29; do { v20 = *(v19 - 1); if ( v20 != -1 && *v19 != -1 ) { if ( sub_933910(v20, *v19, &v30, &v29, &v27, &v25) ) { (*(void (__thiscall **)(_DWORD *, _DWORD, int, int, unsigned int, char *, void *, unsigned int, int))(*v18 + 60))( v18, 0, v17, v17, v30, v29, v27, *v19, v25); ++v17; } } v19 += 2; --v24; } while ( v24 ); } operator delete(v28); v21 = v26; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v18 + 84))(v18, *(unsigned __int8 *)(v26 + 116)); (*(void (__thiscall **)(int, _DWORD *))(*(_DWORD *)v21 + 64))(v21, v18); } } } // 944832: using guessed type int __stdcall D3DXGetShaderInputSemantics(_DWORD, _DWORD, _DWORD); //----- (008CDC40) -------------------------------------------------------- float *__thiscall sub_8CDC40(float *this) { float *v1; // esi int v2; // edi v1 = this; sub_935260(this); *(_DWORD *)v1 = &NiD3DTimeSyncController::`vftable'; v1[15] = 0.0; v2 = *((_DWORD *)v1 + 15); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[15] = 0.0; } v1[5] = 0.0; *((_BYTE *)v1 + 44) = 0; v1[6] = 0.0; return v1; } // A40454: using guessed type void *NiD3DTimeSyncController::`vftable'; //----- (008CDCA0) -------------------------------------------------------- char *sub_8CDCA0() { return dword_BA7154; } //----- (008CDCB0) -------------------------------------------------------- void *__thiscall sub_8CDCB0(void *this, char a2) { void *v2; // esi v2 = this; sub_935300(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CDCE0) -------------------------------------------------------- int __thiscall sub_8CDCE0(_DWORD *this) { return this[9]; } //----- (008CDCF0) -------------------------------------------------------- void __thiscall sub_8CDCF0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[9]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[9] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (008CDD40) -------------------------------------------------------- int __thiscall sub_8CDD40(_DWORD *this) { _DWORD *v1; // esi int result; // eax unsigned int v3; // ebx int *v4; // edi int v5; // ecx bool v6; // zf v1 = this; result = 0; v3 = 0; if ( this[3] ) { do { v4 = (int *)(v1[1] + 4 * v3); v5 = *v4; if ( *v4 ) { v6 = (*(_DWORD *)(v5 + 104))-- == 1; if ( v6 ) { sub_91D6F0((_BYTE *)v5); result = 0; } *v4 = 0; } ++v3; } while ( v3 < v1[3] ); } v1[4] = 0; v1[3] = 0; return result; } //----- (008CDD80) -------------------------------------------------------- int __thiscall sub_8CDD80(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD *v9; // edi unsigned int v10; // esi _DWORD *v11; // esi int i; // esi int v13; // eax int v14; // edx int v15; // ecx v9 = this; if ( !this[13] ) { v10 = 0; if ( dword_AC4D34 ) { do { (*(void (__stdcall **)(unsigned int, signed int, unsigned int, _DWORD))(*(_DWORD *)v9[6] + 200))( v10, 11, v10, 0); (*(void (__stdcall **)(unsigned int, signed int, _DWORD, _DWORD))(*(_DWORD *)v9[6] + 200))(v10++, 24, 0, 0); } while ( v10 < dword_AC4D34 ); } } v11 = sub_8CE4C0(v9[5]); sub_8CE380(v11); if ( (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v9[25] + 256))(v9[25], v9[13]) < 0 ) nullsub_6((void *)v9[2]); if ( (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v9[25] + 260))(v9[25]) < 0 ) nullsub_6((void *)v9[2]); for ( i = sub_965050(v11) + 1; i < dword_AC4D3C; ++i ) (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v9[6] + 224))(i, 0); if ( !v9[13] ) { v13 = a5; if ( !a5 ) { if ( a4 ) v13 = *(_DWORD *)(a4 + 40); else v13 = *(_DWORD *)(*(_DWORD *)(a2 + 184) + 60); } v14 = *(_DWORD *)(v13 + 8); v15 = v9[6]; if ( v14 ) { (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v15 + 152))(v14, 0); return 0; } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v15 + 168))(*(_DWORD *)(v13 + 12), 0); } return 0; } // AC4D34: using guessed type int dword_AC4D34; // AC4D3C: using guessed type int dword_AC4D3C; //----- (008CDEC0) -------------------------------------------------------- char __thiscall sub_8CDEC0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi float *v4; // eax float *v5; // eax _DWORD *v6; // eax v2 = this; if ( !a2 ) return 0; if ( *(_BYTE *)(this[22] + 60) ) { v4 = (float *)operator new(0x40u); if ( v4 ) v5 = sub_8CDC40(v4); else v5 = 0; (*(void (__thiscall **)(float *, _DWORD *))(*(_DWORD *)v5 + 72))(v5, a2); v6 = a2; do { *((_WORD *)v6 + 14) |= 2u; v6 = (_DWORD *)v6[8]; } while ( v6 ); } sub_8CD9E0((int)v2); return sub_91EF90(v2, a2); } //----- (008CDF30) -------------------------------------------------------- void __thiscall sub_8CDF30(int *this) { int *v1; // esi int *v2; // edi void (__stdcall ***v3)(_DWORD, void *, int); // eax v1 = this; v2 = *(int **)(this[22] + 20); v3 = (void (__stdcall ***)(_DWORD, void *, int))v2[19]; if ( v3 || (sub_8C5D10(v2, (int)v2, this[5]), (v3 = (void (__stdcall ***)(_DWORD, void *, int))v2[19]) != 0) ) { v1[24] = (int)v3; (**v3)(v3, &unk_A48364, (int)(v1 + 25)); v1[23] = *(_DWORD *)(sub_8C59B0(v2, v1[2], v1[26]) + 16); sub_8CD9E0((int)v1); } } //----- (008CDF90) -------------------------------------------------------- void __thiscall sub_8CDF90(_DWORD *this) { int v1; // eax int v2; // edi void *v3; // ebx int v4; // esi int i; // edi int v6; // ecx bool v7; // zf v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; for ( i = v2 - 1; i >= 0; --i ) { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 ) { v7 = (*(_DWORD *)(v6 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v6); } } operator delete(v3); } } // A404C4: using guessed type void *NiTArray>::`vftable'; //----- (008CDFE0) -------------------------------------------------------- void *__thiscall sub_8CDFE0(void *this, char a2) { void *v2; // esi v2 = this; sub_8CDF90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CE010) -------------------------------------------------------- _DWORD *__thiscall sub_8CE010(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; sub_91EFB0(this); *v1 = &NiD3DShader::`vftable'; *((_WORD *)v1 + 16) = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; v1[13] = 0; v1[14] = 0; v1[15] = 0; v1[18] = 2; v1[21] = 2; v1[16] = &NiTArray>::`vftable'; v1[19] = 0; v1[20] = 0; v2 = operator new(0xCu); if ( v2 ) { *v2 = 2; v3 = v2 + 1; *v3 = 0; v3[1] = 0; v1[17] = v3; } else { v1[17] = 0; } sub_8CDD40(v1 + 16); return v1; } // A404C4: using guessed type void *NiTArray>::`vftable'; // A40574: using guessed type void *NiD3DShader::`vftable'; //----- (008CE0B0) -------------------------------------------------------- void *sub_8CE0B0() { return &unk_BA6D4C; } //----- (008CE0C0) -------------------------------------------------------- void *__thiscall sub_8CE0C0(void *this, char a2) { void *v2; // esi v2 = this; sub_91EDA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CE0F0) -------------------------------------------------------- _DWORD *__thiscall sub_8CE0F0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v4; // [esp+8h] [ebp-4h] v1 = this; sub_8CE010(this); v2 = 0; *v1 = &NiD3DXEffectShader::`vftable'; v1[22] = 0; v1[23] = 0; v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[27] = 0; v1[28] = 0; *((_BYTE *)v1 + 116) = 0; if ( v1[18] ) { v4 = 0; do sub_461550(v1 + 16, v2++, &v4); while ( v2 < v1[18] ); } return v1; } // A401FC: using guessed type void *NiD3DXEffectShader::`vftable'; //----- (008CE150) -------------------------------------------------------- LONG __stdcall sub_8CE150(int a1) { return InterlockedIncrement((volatile LONG *)(a1 + 8)); } //----- (008CE170) -------------------------------------------------------- int __stdcall sub_8CE170(volatile LONG *a1) { if ( InterlockedDecrement(a1 + 2) ) return *((_DWORD *)a1 + 2); if ( a1 ) (*(void (__thiscall **)(volatile LONG *, signed int))(*a1 + 84))(a1, 1); return 0; } //----- (008CE1B0) -------------------------------------------------------- int __stdcall sub_8CE1B0(int a1, int a2, int a3) { return (*(int (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(a1 + 16) + 176))(*(_DWORD *)(a1 + 16), a2, a3); } //----- (008CE1D0) -------------------------------------------------------- int __stdcall sub_8CE1D0(int a1, int a2) { return (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(a1 + 16) + 196))(*(_DWORD *)(a1 + 16), a2); } //----- (008CE1F0) -------------------------------------------------------- int __stdcall sub_8CE1F0(int a1, int a2, int a3) { return (*(int (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(a1 + 16) + 204))(*(_DWORD *)(a1 + 16), a2, a3); } //----- (008CE210) -------------------------------------------------------- int __stdcall sub_8CE210(int a1, int a2, int a3) { return (*(int (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(a1 + 16) + 212))(*(_DWORD *)(a1 + 16), a2, a3); } //----- (008CE230) -------------------------------------------------------- int __stdcall sub_8CE230(int a1, int a2, int a3) { (*(void (__stdcall **)(int, int, _DWORD))(**(_DWORD **)(a1 + 12) + 100))(a2, a3, 0); return 0; } //----- (008CE250) -------------------------------------------------------- int __stdcall sub_8CE250(int a1, int a2, int a3) { int result; // eax (*(void (__stdcall **)(int, int))(**(_DWORD **)(a1 + 12) + 224))(a2, a3); result = 0; if ( a2 > *(_DWORD *)(a1 + 4) ) *(_DWORD *)(a1 + 4) = a2; return result; } //----- (008CE280) -------------------------------------------------------- int __stdcall sub_8CE280(int a1, int a2, int a3, int a4) { (*(void (__stdcall **)(int, int, int, _DWORD))(**(_DWORD **)(a1 + 12) + 200))(a2, a3, a4, 0); return 0; } //----- (008CE2B0) -------------------------------------------------------- int __stdcall sub_8CE2B0(int a1, float a2) { return (*(int (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(a1 + 16) + 316))(*(_DWORD *)(a1 + 16), LODWORD(a2)); } //----- (008CE2D0) -------------------------------------------------------- int __stdcall sub_8CE2D0(int a1, int a2) { (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(a1 + 12) + 152))(a2, 0); return 0; } //----- (008CE2F0) -------------------------------------------------------- int __stdcall sub_8CE2F0(int a1, int a2) { unsigned int v2; // esi (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(a1 + 12) + 136))(a2, 0); if ( a2 ) { v2 = 0; if ( dword_AC4D34 ) { do { (*(void (__stdcall **)(unsigned int, signed int, unsigned int, _DWORD))(**(_DWORD **)(a1 + 12) + 200))( v2, 11, v2, 0); (*(void (__stdcall **)(unsigned int, signed int, _DWORD, _DWORD))(**(_DWORD **)(a1 + 12) + 200))(v2++, 24, 0, 0); } while ( v2 < dword_AC4D34 ); } } return 0; } // AC4D34: using guessed type int dword_AC4D34; //----- (008CE360) -------------------------------------------------------- int __stdcall sub_8CE360(int a1, int a2) { (*(void (__stdcall **)(int, _DWORD))(**(_DWORD **)(a1 + 12) + 120))(a2, 0); return 0; } //----- (008CE380) -------------------------------------------------------- void __thiscall sub_8CE380(_DWORD *this) { this[1] = -1; } //----- (008CE390) -------------------------------------------------------- void *__thiscall sub_8CE390(void *this, char a2) { void *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 4); *(_DWORD *)this = &NiD3DXEffectStateManager::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); dword_BA6580 = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A4060C: using guessed type void *NiD3DXEffectStateManager::`vftable'; // BA6580: using guessed type int dword_BA6580; //----- (008CE3D0) -------------------------------------------------------- signed int __stdcall sub_8CE3D0(int a1, unsigned __int8 *a2, _DWORD *a3) { signed int result; // eax if ( sub_46CE20(a2, (unsigned __int8 *)&riid) || sub_46CE20(a2, (unsigned __int8 *)&unk_A48354) ) { *a3 = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); result = 0; } else { *a3 = 0; result = -2147467262; } return result; } //----- (008CE430) -------------------------------------------------------- int __stdcall sub_8CE430(int a1, int a2, int a3, int a4) { int v4; // eax _DWORD *v5; // ecx v4 = *(_DWORD *)(a1 + 12); v5 = (_DWORD *)(v4 + 8 * (dword_AC6C7C[a3] + 13 * a2) + 6560); if ( *v5 != a4 ) { *v5 = a4; (*(void (__stdcall **)(_DWORD, int, int, int))(**(_DWORD **)(v4 + 8312) + 276))(*(_DWORD *)(v4 + 8312), a2, a3, a4); } return 0; } //----- (008CE480) -------------------------------------------------------- _DWORD *__thiscall sub_8CE480(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; this[3] = a2; *this = &NiD3DXEffectStateManager::`vftable'; this[1] = -1; this[2] = 0; this[4] = a3; (*(void (__stdcall **)(int))(*(_DWORD *)a3 + 4))(a3); return v3; } // A4060C: using guessed type void *NiD3DXEffectStateManager::`vftable'; //----- (008CE4C0) -------------------------------------------------------- _DWORD *__cdecl sub_8CE4C0(int a1) { _DWORD *result; // eax int v2; // edi int v3; // esi _DWORD *v4; // eax result = (_DWORD *)dword_BA6580; if ( !dword_BA6580 ) { if ( a1 && (v2 = *(_DWORD *)(a1 + 1716)) != 0 && (v3 = *(_DWORD *)(a1 + 132)) != 0 ) { v4 = operator new(0x14u); if ( v4 ) { result = sub_8CE480(v4, v2, v3); dword_BA6580 = (int)result; } else { result = 0; dword_BA6580 = 0; } } else { result = 0; } } return result; } // BA6580: using guessed type int dword_BA6580; //----- (008CE520) -------------------------------------------------------- int __stdcall sub_8CE520(int a1, int a2, void *Src, int a4) { return sub_936400(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE560) -------------------------------------------------------- int __stdcall sub_8CE560(int a1, int a2, void *Src, int a4) { return sub_936490(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE5A0) -------------------------------------------------------- int __stdcall sub_8CE5A0(int a1, int a2, void *Src, int a4) { return sub_936380(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE5E0) -------------------------------------------------------- int __stdcall sub_8CE5E0(int a1, int a2, void *Src, int a4) { return sub_9365A0(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE620) -------------------------------------------------------- int __stdcall sub_8CE620(int a1, int a2, void *Src, int a4) { return sub_936630(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE660) -------------------------------------------------------- int __stdcall sub_8CE660(int a1, int a2, void *Src, int a4) { return sub_936520(*(_DWORD **)(*(_DWORD *)(a1 + 12) + 8304), a2, Src, a4, 0) != 0 ? 0 : -2005530516; } //----- (008CE6A0) -------------------------------------------------------- int *sub_8CE6A0() { dword_BA6584 = 0; dword_BA6588 = 0; dword_BA658C = 0; dword_BA6590 = 0; dword_BA6594 = 0; dword_BA6598 = 0; dword_BA659C = 0; dword_BA65A0 = 0; dword_BA65A4 = 0; dword_BA65A8 = 0; return &dword_BA6584; } // BA6584: using guessed type int dword_BA6584; // BA6588: using guessed type int dword_BA6588; // BA658C: using guessed type int dword_BA658C; // BA6590: using guessed type int dword_BA6590; // BA6594: using guessed type int dword_BA6594; // BA6598: using guessed type int dword_BA6598; // BA659C: using guessed type int dword_BA659C; // BA65A0: using guessed type int dword_BA65A0; // BA65A4: using guessed type int dword_BA65A4; // BA65A8: using guessed type int dword_BA65A8; //----- (008CE6E0) -------------------------------------------------------- void sub_8CE6E0() { if ( !byte_BA65AC ) byte_BA65AC = 1; } // BA65AC: using guessed type char byte_BA65AC; //----- (008CE700) -------------------------------------------------------- void sub_8CE700() { if ( byte_BA65AC ) { byte_BA65AC = 0; sub_8C74D0(); sub_92BD00(0); sub_8C66C0(); if ( dword_BA5D14 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_BA5D14 + 12))(1); dword_BA5D14 = 0; if ( dword_BA5D1C ) { if ( dword_BA5D20 ) { (*(void (__stdcall **)(int))(*(_DWORD *)dword_BA5D20 + 8))(dword_BA5D20); dword_BA5D20 = 0; if ( dword_BA5D14 ) sub_8C5070((_DWORD *)dword_BA5D14); } dword_BA5D1C = 0; } operator delete(dword_BA5D18); dword_BA5D18 = 0; } } // BA5D14: using guessed type int dword_BA5D14; // BA5D1C: using guessed type int dword_BA5D1C; // BA5D20: using guessed type int dword_BA5D20; // BA65AC: using guessed type char byte_BA65AC; //----- (008CE760) -------------------------------------------------------- int __thiscall sub_8CE760(_DWORD *this) { int result; // eax result = 0; this[1] = 0; this[2] = 0; this[67] = 0; return result; } //----- (008CE770) -------------------------------------------------------- char __thiscall sub_8CE770(void **this, LPCSTR lpText) { void **v2; // esi FILE *v3; // edi char result; // al int v5; // ebx char i; // al v2 = this; v3 = fopen(lpText, "r"); if ( v3 ) { if ( v2[67] ) operator delete[](v2[67]); sub_8CE760(v2); for ( ; fgetc(v3) != -1; v2[1] = (char *)v2[1] + 1 ) ; v5 = 0; v2[67] = operator new[]((unsigned int)v2[1] + 1); fseek(v3, 0, 0); for ( i = fgetc(v3); i != -1; i = fgetc(v3) ) *((_BYTE *)v2[67] + v5++) = i; *((_BYTE *)v2[67] + v5) = 0; fclose(v3); result = 1; } else { MessageBoxA(0, lpText, "FileOpenError", 0); result = 0; } return result; } //----- (008CE850) -------------------------------------------------------- _DWORD *__cdecl sub_8CE850(_DWORD *a1) { _DWORD *result; // eax int *v2; // ecx result = a1; v2 = (int *)*a1; if ( !*(_BYTE *)(*a1 + 14) ) { do { result = v2; v2 = (int *)*v2; } while ( !*((_BYTE *)v2 + 14) ); } return result; } //----- (008CE870) -------------------------------------------------------- _DWORD *__thiscall sub_8CE870(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 14) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 14) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 14); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 14); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (008CE8C0) -------------------------------------------------------- char __thiscall sub_8CE8C0(void **this, LPCSTR lpText) { return sub_8CE770(this, lpText); } //----- (008CE8D0) -------------------------------------------------------- int *__thiscall sub_8CE8D0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 14) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_8CE870(&a3); if ( *(_BYTE *)(*v3 + 14) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 14) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 14) ) { v9 = (_DWORD *)v6; } else { v9 = sub_8CE850((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 14) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_695210(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 14) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 14) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 13); *(_BYTE *)(v5 + 13) = *((_BYTE *)v3 + 13); *((_BYTE *)v3 + 13) = v13; LABEL_35: if ( v18[13] == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 13) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[13] ) { v15[13] = 1; *(_BYTE *)(v6 + 13) = 0; sub_6972D0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[14] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 13) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 13) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 13) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 13) = 1; v15[13] = 0; sub_697330(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[13] = *(_BYTE *)(v6 + 13); *(_BYTE *)(v6 + 13) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 13) = 1; sub_6972D0(i, v6); break; } } else { if ( !v15[13] ) { v15[13] = 1; *(_BYTE *)(v6 + 13) = 0; sub_697330(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[14] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 13) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 13) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 13) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 13) = 1; v15[13] = 0; sub_6972D0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[13] = *(_BYTE *)(v6 + 13); *(_BYTE *)(v6 + 13) = 1; *(_BYTE *)(*(_DWORD *)v15 + 13) = 1; sub_697330(i, (_DWORD *)v6); break; } } v15[13] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 13) = 1; } operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (008CEB20) -------------------------------------------------------- int **__thiscall sub_8CEB20(_DWORD *this, int **a2, _BYTE *a3) { int *v3; // edx int *v4; // eax int **result; // eax v3 = (int *)this[1]; v4 = (int *)v3[1]; while ( !*((_BYTE *)v4 + 14) ) { if ( *((_BYTE *)v4 + 12) >= *a3 ) { v3 = v4; v4 = (int *)*v4; } else { v4 = (int *)v4[2]; } } if ( v3 == (int *)this[1] || *a3 < *((_BYTE *)v3 + 12) ) { result = a2; *a2 = (int *)this[1]; } else { result = a2; *a2 = v3; } return result; } //----- (008CEB90) -------------------------------------------------------- int *__thiscall sub_8CEB90(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *result; // eax int v8; // edx int **v9; // eax _DWORD *v10; // ecx int *j; // eax int i; // eax char v13; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v8 = v6; if ( !*(_BYTE *)(v6 + 14) ) { v9 = *(int ***)(v6 + 8); if ( *((_BYTE *)v9 + 14) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 14); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v10 = *(_DWORD **)(v6 + 8); for ( j = *v9; !*((_BYTE *)j + 14); j = (int *)*j ) v10 = j; a3 = v10; } } sub_8CE8D0(v4, (int *)&v13, v8); } result = a2; *a2 = v6; } else { sub_697870(v4); result = a2; *a2 = *(_DWORD *)v4[1]; } return result; } //----- (008CEC30) -------------------------------------------------------- signed int __thiscall sub_8CEC30(_DWORD *this, int a2, int *a3, int a4, _BYTE *a5) { int v5; // esi _DWORD *v6; // edi signed int result; // eax _BYTE *v8; // ebx char v9; // al int v10; // esi char v11; // dl char v12; // al char v13; // al v5 = a2; v6 = this; if ( !this[70] ) { *a3 = a2; return 1; } v8 = a5; sub_8CEB20(this + 68, (int **)&a2, a5); if ( v6[69] != a2 ) { *a3 = v5; return 1; } if ( *v8 != 47 ) goto LABEL_17; v9 = *(_BYTE *)(v5 + a4); v10 = v5 + 1; if ( v9 == 47 ) { do v11 = *(_BYTE *)(v10++ + a4); while ( v11 != 10 ); *a3 = v10; return 0; } if ( v9 != 42 ) { v5 = v10 - 1; LABEL_17: *a3 = v5; return 0; } v12 = *(_BYTE *)(v10 + a4); if ( v12 ) { while ( 1 ) { ++v10; if ( v12 == 42 ) { v13 = *(_BYTE *)(v10++ + a4); if ( v13 == 47 ) break; } v12 = *(_BYTE *)(v10 + a4); if ( !v12 ) goto LABEL_14; } *a3 = v10; result = 0; } else { LABEL_14: *a3 = v10 + 1; result = 0; } return result; } //----- (008CED00) -------------------------------------------------------- BOOL __thiscall sub_8CED00(int this, _BYTE *a2) { int v2; // esi BOOL result; // eax _BYTE *v4; // edi v2 = this; if ( !*(_DWORD *)(this + 280) ) return 1; v4 = a2; if ( *(int **)(this + 276) == *sub_8CEB20((_DWORD *)(this + 272), (int **)&a2, a2) ) result = *(_DWORD *)(v2 + 292) == (_DWORD)*sub_8CEB20((_DWORD *)(v2 + 288), (int **)&a2, v4); else result = 0; return result; } //----- (008CED70) -------------------------------------------------------- signed int __thiscall sub_8CED70(_DWORD *this, int a2, _DWORD *a3, int a4, _BYTE *a5) { char v5; // bl int v6; // esi int v7; // edi _DWORD *v8; // edx _DWORD *v10; // ecx _BYTE *v11; // eax _DWORD *v12; // edx _DWORD *v13; // [esp+Ch] [ebp-Ch] int v14; // [esp+10h] [ebp-8h] char v15; // [esp+17h] [ebp-1h] v5 = *(_BYTE *)(a2 + a4); v6 = a2 + 1; v7 = 0; v13 = this; v15 = 0; HIBYTE(a2) = v5; v14 = v6; if ( !v5 ) { LABEL_8: v8 = a3; a5[v7] = 0; *v8 = v6 - 1; return 0; } while ( sub_8CED00((int)v13, (_BYTE *)&a2 + 3) ) { a5[v7] = v5; v15 = 1; ++v7; LABEL_7: v5 = *(_BYTE *)(v6++ + a4); HIBYTE(a2) = v5; v14 = v6; if ( !v5 ) goto LABEL_8; } if ( v15 == 1 ) { v10 = a3; a5[v7] = 0; *v10 = v6 - 1; return 1; } if ( !sub_8CEC30(v13, v6, &v14, a4, (_BYTE *)&a2 + 3) ) { v6 = v14; goto LABEL_7; } v11 = a5; v12 = a3; *a5 = v5; v11[1] = 0; *v12 = v14; return 1; } //----- (008CEE40) -------------------------------------------------------- bool __thiscall sub_8CEE40(_DWORD *this, _BYTE *a2) { return sub_8CED70(this, this[2], this + 2, this[67], a2) != 0; } //----- (008CEE70) -------------------------------------------------------- void __thiscall sub_8CEE70(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (_DWORD *)this[1]; v3 = (_DWORD *)*v2; v6 = 0; sub_8CEB90(this, (int *)&v4, v3, v2); operator delete((void *)v1[1]); } //----- (008CEED0) -------------------------------------------------------- void __thiscall sub_8CEED0(_DWORD *this) { _DWORD *v1; // edi void *v2; // eax _DWORD *v3; // ST08_4 _DWORD *v4; // ST04_4 _DWORD *v5; // ST08_4 _DWORD *v6; // ST04_4 _DWORD *v7; // [esp+Ch] [ebp-18h] _DWORD *v8; // [esp+10h] [ebp-14h] _DWORD *v9; // [esp+14h] [ebp-10h] int v10; // [esp+20h] [ebp-4h] v1 = this; v9 = this; *this = &NsTextCodeV0_3::`vftable'; v2 = (void *)this[67]; v10 = 0; if ( v2 ) operator delete[](v2); v8 = v1 + 72; v3 = (_DWORD *)v1[73]; v4 = *(_DWORD **)v1[73]; LOBYTE(v10) = 1; sub_8CEB90(v1 + 72, (int *)&v7, v4, v3); operator delete((void *)v1[73]); v7 = v1 + 68; v5 = (_DWORD *)v1[69]; v6 = *(_DWORD **)v1[69]; v10 = 2; sub_8CEB90(v1 + 68, (int *)&v8, v6, v5); operator delete((void *)v1[69]); } // A40678: using guessed type void *NsTextCodeV0_3::`vftable'; //----- (008CEF90) -------------------------------------------------------- _DWORD *__thiscall sub_8CEF90(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax void **v5; // [esp+10h] [ebp-30h] void **v6; // [esp+1Ch] [ebp-24h] _DWORD *v7; // [esp+28h] [ebp-18h] char *v8; // [esp+2Ch] [ebp-14h] char *v9; // [esp+30h] [ebp-10h] int v10; // [esp+3Ch] [ebp-4h] v1 = this; v7 = this; *this = &NsTextCodeV0_3::`vftable'; this[70] = 0; v2 = operator new(0x10u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v5, (const char *const *)&v8); v5 = &std::bad_alloc::`vftable'; _CxxThrowException(&v5, &_TI2_AVbad_alloc_std__); } v1[69] = v2; *v2 = v2; *(_DWORD *)(v1[69] + 4) = v1[69]; *(_DWORD *)(v1[69] + 8) = v1[69]; *(_BYTE *)(v1[69] + 13) = 1; *(_BYTE *)(v1[69] + 14) = 1; v10 = 0; v1[74] = 0; v3 = operator new(0x10u); if ( !v3 ) { v9 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v9); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[73] = v3; *v3 = v3; *(_DWORD *)(v1[73] + 4) = v1[73]; *(_DWORD *)(v1[73] + 8) = v1[73]; *(_BYTE *)(v1[73] + 13) = 1; *(_BYTE *)(v1[73] + 14) = 1; v1[67] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A40678: using guessed type void *NsTextCodeV0_3::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008CF0C0) -------------------------------------------------------- void *__thiscall sub_8CF0C0(void *this, char a2) { void *v2; // esi v2 = this; sub_8CEED0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CF0F0) -------------------------------------------------------- char *__cdecl sub_8CF0F0(char *a1, char *a2) { size_t v2; // edi char *v3; // esi v2 = strlen(a2); v3 = a1; if ( a1 ) { while ( *v3 ) { if ( !strncmp(v3, a2, v2) ) return v3; if ( !++v3 ) return 0; } } return 0; } //----- (008CF140) -------------------------------------------------------- unsigned int __cdecl sub_8CF140(int a1, char *a2) { char *v2; // eax unsigned int result; // eax v2 = sub_8CF0F0(*(char **)(a1 + 8), a2); if ( v2 ) result = (unsigned int)&v2[strlen(a2)]; else result = 0; return result; } //----- (008CF180) -------------------------------------------------------- int __cdecl sub_8CF180(int a1, const char *a2, const char *a3) { int result; // eax const char *v4; // ecx result = a1; if ( !a1 ) return 0; while ( a2 ) { v4 = *(const char **)(result + 8); if ( v4 ) { if ( a3 && !strcmp(*(const char **)(result + 8), a3) ) return 0; if ( !strcmp(v4, a2) ) return result; } result = *(_DWORD *)(result + 32); if ( !result ) return 0; } return 0; } //----- (008CF210) -------------------------------------------------------- double __cdecl sub_8CF210(float a1, float a2, float a3, float a4, float a5, float a6, char a7, int a8, int a9, int a10) { int *v10; // eax float v11; // ecx float v12; // edx float *v13; // eax float *v14; // eax float *v15; // eax char v17; // [esp+0h] [ebp-18h] float v18; // [esp+Ch] [ebp-Ch] float v19; // [esp+10h] [ebp-8h] float v20; // [esp+14h] [ebp-4h] sub_4430B0(&a1); sub_4430B0(&a4); sub_4430B0((float *)&a7); v10 = (int *)sub_443140((float *)&a7, (float *)&v17, &a1); v11 = *((float *)v10 + 1); v18 = *(float *)v10; v12 = *((float *)v10 + 2); v19 = v11; v20 = v12; v13 = sub_443140(&v18, (float *)&v17, (float *)&a7); a1 = *v13; a2 = v13[1]; a3 = v13[2]; v14 = sub_443140((float *)&a7, (float *)&v17, &a4); a4 = *v14; a5 = v14[1]; a6 = v14[2]; v15 = sub_443140(&a4, (float *)&v17, (float *)&a7); a4 = *v15; a5 = v15[1]; a6 = v15[2]; sub_4430B0(&v18); sub_4430B0(&a4); sub_4430B0(&a1); a3 = a2 * a5 + a4 * a1 + a3 * a6; if ( a3 <= 1.0 ) { if ( a3 < -1.0 ) a3 = -1.0; } else { a3 = 1.0; } a3 = acos(a3); a6 = v19 * a5 + v18 * a4 + v20 * a6; if ( a6 < 0.0 ) { if ( !a10 ) return (float)-a3; a3 = flt_BA45B4 + flt_BA45B4 - a3; } return a3; } // BA45B4: using guessed type float flt_BA45B4; //----- (008CF390) -------------------------------------------------------- float *__cdecl sub_8CF390(float *a1, float *a2) { int *v2; // eax float v3; // ecx float v4; // edx float *v5; // eax float v6; // ecx float v7; // edx float *result; // eax char v9; // [esp+0h] [ebp-30h] float v10; // [esp+Ch] [ebp-24h] float v11; // [esp+10h] [ebp-20h] float v12; // [esp+14h] [ebp-1Ch] float v13; // [esp+18h] [ebp-18h] float v14; // [esp+1Ch] [ebp-14h] float v15; // [esp+20h] [ebp-10h] float v16; // [esp+24h] [ebp-Ch] float v17; // [esp+28h] [ebp-8h] float v18; // [esp+2Ch] [ebp-4h] v16 = -*a1; v17 = -a1[1]; v18 = -a1[2]; v10 = 0.0; v11 = 0.0; v12 = 1.0; sub_4430B0(&v16); v2 = (int *)sub_443140(&v16, (float *)&v9, &v10); v3 = *((float *)v2 + 1); v13 = *(float *)v2; v4 = *((float *)v2 + 2); v14 = v3; v15 = v4; v5 = sub_443140(&v10, (float *)&v9, &v13); v6 = v5[1]; v16 = *v5; v7 = v5[2]; result = a2; *a2 = v13; v17 = v6; v18 = v7; a2[3] = v14; a2[6] = v15; a2[1] = v16; a2[4] = v17; a2[7] = v18; a2[2] = 0.0; a2[5] = 0.0; a2[8] = 1.0; return result; } //----- (008CF440) -------------------------------------------------------- float *__cdecl sub_8CF440(int *a1, float *a2) { float v2; // edx float v3; // eax float *result; // eax float v5; // [esp+0h] [ebp-24h] float v6; // [esp+4h] [ebp-20h] float v7; // [esp+8h] [ebp-1Ch] float v8; // [esp+Ch] [ebp-18h] float v9; // [esp+10h] [ebp-14h] float v10; // [esp+14h] [ebp-10h] float v11; // [esp+18h] [ebp-Ch] float v12; // [esp+1Ch] [ebp-8h] float v13; // [esp+20h] [ebp-4h] v2 = *((float *)a1 + 1); v3 = *((float *)a1 + 2); v11 = *(float *)a1; v12 = v2; v13 = v3; sub_4430B0(&v11); sub_694F40(&v11, &v8); sub_443140(&v8, &v5, &v11); result = a2; *a2 = v8; a2[3] = v9; a2[6] = v10; a2[1] = v11; a2[4] = v12; a2[7] = v13; a2[2] = v5; a2[5] = v6; a2[8] = v7; return result; } //----- (008CF4C0) -------------------------------------------------------- float *__thiscall sub_8CF4C0(float *this) { float *result; // eax float v2; // edx result = this; *this = flt_ABD4B0; this[1] = flt_ABD4B4; this[2] = flt_ABD4B8; this[3] = flt_ABD4B0; this[4] = flt_ABD4B4; this[5] = flt_ABD4B8; this[6] = flt_ABD4B0; this[7] = flt_ABD4B4; this[8] = flt_ABD4B8; this[9] = flt_ABD4B0; this[10] = flt_ABD4B4; v2 = flt_ABD4B8; this[12] = 0.0; this[13] = 0.0; this[11] = v2; this[14] = 0.0; *((_BYTE *)this + 68) = 0; this[15] = 0.0; return result; } // ABD4B0: using guessed type float flt_ABD4B0; // ABD4B4: using guessed type float flt_ABD4B4; // ABD4B8: using guessed type float flt_ABD4B8; //----- (008CF540) -------------------------------------------------------- int __thiscall sub_8CF540(int this, _DWORD *a2, _DWORD *a3) { int result; // eax *(_BYTE *)(this + 68) = 0; *(_DWORD *)(this + 24) = *a2; *(_DWORD *)(this + 28) = a2[1]; *(_DWORD *)(this + 32) = a2[2]; *(_DWORD *)(this + 36) = *a3; *(_DWORD *)(this + 40) = a3[1]; result = a3[2]; *(_DWORD *)(this + 44) = result; return result; } //----- (008CF580) -------------------------------------------------------- void __thiscall sub_8CF580(int this, float *a2, float *a3) { float *v3; // edi float v4; // [esp+10h] [ebp+8h] float v5; // [esp+10h] [ebp+8h] float v6; // [esp+10h] [ebp+8h] float v7; // [esp+10h] [ebp+8h] v3 = a2; v4 = a2[1] * a2[1] + *a2 * *a2 + a2[2] * a2[2]; v5 = sqrt(v4); if ( v5 >= 0.0099999998 ) { v6 = a3[1] * a3[1] + *a3 * *a3 + a3[2] * a3[2]; v7 = sqrt(v6); if ( v7 >= 0.0099999998 ) { *(float *)(this + 24) = *v3; *(float *)(this + 28) = v3[1]; *(float *)(this + 32) = v3[2]; *(float *)(this + 36) = *a3; *(float *)(this + 40) = a3[1]; *(float *)(this + 44) = a3[2]; *(_BYTE *)(this + 68) = 0; } else { OutputDebugStringA("RotateControler - INPUT ZERO VECTOR"); } } else { OutputDebugStringA("RotateControler - INPUT ZERO VECTOR"); } } //----- (008CF650) -------------------------------------------------------- void __thiscall sub_8CF650(int this, float a2, int a3, int a4, int a5) { float *v5; // ebx int v6; // esi double v7; // [esp+Ch] [ebp-8h] float v8; // [esp+24h] [ebp+10h] float v9; // [esp+24h] [ebp+10h] float v10; // [esp+24h] [ebp+10h] float v11; // [esp+24h] [ebp+10h] float v12; // [esp+24h] [ebp+10h] float v13; // [esp+24h] [ebp+10h] float v14; // [esp+24h] [ebp+10h] v5 = (float *)a4; v6 = this; v7 = *(float *)a4 * *(float *)a4; v8 = *(float *)(a4 + 8) * *(float *)(a4 + 8) + v7 + *(float *)(a4 + 4) * *(float *)(a4 + 4); v9 = sqrt(v8); if ( v9 < 0.0099999998 || (v10 = v5[2] * v5[2] + v5[1] * v5[1] + v7, v11 = sqrt(v10), v11 < 0.0099999998) || (v12 = *(float *)(a5 + 4) * *(float *)(a5 + 4) + *(float *)a5 * *(float *)a5 + *(float *)(a5 + 8) * *(float *)(a5 + 8), v13 = sqrt(v12), v13 < 0.0099999998) ) { OutputDebugStringA("RotateControler - INPUT ZERO VECTOR"); } else { *(float *)(this + 56) = a2; *(_BYTE *)(this + 68) = 1; *(_DWORD *)this = *(_DWORD *)a3; *(_DWORD *)(this + 4) = *(_DWORD *)(a3 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a3 + 8); *(_DWORD *)(this + 24) = *(_DWORD *)a3; *(_DWORD *)(this + 28) = *(_DWORD *)(a3 + 4); *(_DWORD *)(this + 32) = *(_DWORD *)(a3 + 8); *(float *)(this + 12) = *v5; *(float *)(this + 16) = v5[1]; *(float *)(this + 20) = v5[2]; *(_DWORD *)(this + 36) = *(_DWORD *)a5; *(_DWORD *)(this + 40) = *(_DWORD *)(a5 + 4); *(_DWORD *)(this + 44) = *(_DWORD *)(a5 + 8); v14 = sub_8CF210( *(float *)this, *(float *)(this + 4), *(float *)(this + 8), *(float *)(this + 12), *(float *)(this + 16), *(float *)(this + 20), *(_DWORD *)a5, *(_DWORD *)(a5 + 4), *(_DWORD *)(a5 + 8), 0); *(float *)(v6 + 52) = v14; *(float *)(v6 + 48) = v14; } } //----- (008CF7D0) -------------------------------------------------------- _DWORD *__thiscall sub_8CF7D0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = a2; *a2 = this[6]; a2[1] = this[7]; a2[2] = this[8]; return result; } //----- (008CF7F0) -------------------------------------------------------- int __thiscall sub_8CF7F0(_DWORD *this, _DWORD *a2) { int result; // eax this[3] = *a2; this[4] = a2[1]; result = a2[2]; this[5] = result; return result; } //----- (008CF810) -------------------------------------------------------- char __thiscall sub_8CF810(int this, float a2) { int v2; // esi double v4; // st6 int v5; // eax int v6; // edx int v7; // eax float v8; // ST00_4 float *v9; // eax double v10; // st6 int v11; // edx int v12; // eax int v13; // edx float v14; // ST00_4 char v15; // [esp+Ch] [ebp-38h] float v16; // [esp+18h] [ebp-2Ch] char v17; // [esp+1Ch] [ebp-28h] v2 = this; *(float *)(this + 60) = a2; if ( !*(_BYTE *)(this + 68) ) return 0; v16 = a2 - *(float *)(this + 56); if ( *(float *)(this + 48) > 0.0 ) { if ( *(float *)(this + 52) > 0.0 ) { v16 = *(float *)(this + 48) - *(float *)(this + 64) * v16; v4 = v16; *(float *)(this + 52) = v16; if ( v4 < 0.0 ) { v5 = *(_DWORD *)(this + 12); v6 = *(_DWORD *)(this + 16); *(float *)(this + 52) = 0.0; *(_DWORD *)(this + 24) = v5; v7 = *(_DWORD *)(this + 20); *(_DWORD *)(this + 28) = v6; *(_DWORD *)(this + 32) = v7; *(_BYTE *)(this + 68) = 0; return 0; } v8 = v4; sub_404490((float *)&v17, v8, this + 36); v9 = sub_85DA90((float *)&v17, (float *)&v15, (float *)(v2 + 12)); goto LABEL_8; } return *(_BYTE *)(this + 68); } if ( *(float *)(this + 52) >= 0.0 ) return *(_BYTE *)(this + 68); v16 = *(float *)(this + 64) * v16 + *(float *)(this + 48); v10 = v16; *(float *)(this + 52) = v16; if ( v10 <= 0.0 ) { v14 = v10; sub_404490((float *)&v17, v14, this + 36); v9 = sub_85DA90((float *)&v17, (float *)&v15, (float *)(v2 + 12)); LABEL_8: *(float *)(v2 + 24) = *v9; *(float *)(v2 + 28) = v9[1]; *(float *)(v2 + 32) = v9[2]; return *(_BYTE *)(v2 + 68); } v11 = *(_DWORD *)(this + 12); v12 = *(_DWORD *)(this + 16); *(float *)(this + 52) = 0.0; *(_DWORD *)(this + 24) = v11; v13 = *(_DWORD *)(this + 20); *(_DWORD *)(this + 28) = v12; *(_DWORD *)(this + 32) = v13; *(_BYTE *)(this + 68) = 0; return 0; } //----- (008CF980) -------------------------------------------------------- float *__thiscall sub_8CF980(float *this) { float *result; // eax float v2; // edx result = this; *(_DWORD *)this = &NpNs_MoveToTarget::`vftable'; this[3] = flt_ABD4B0; this[4] = flt_ABD4B4; this[5] = flt_ABD4B8; this[6] = flt_ABD4B0; this[7] = flt_ABD4B4; this[8] = flt_ABD4B8; this[9] = flt_ABD4B0; this[10] = flt_ABD4B4; this[11] = flt_ABD4B8; this[18] = flt_ABD4B0; this[19] = flt_ABD4B4; this[20] = flt_ABD4B8; this[15] = flt_ABD4B0; this[16] = flt_ABD4B4; this[17] = flt_ABD4B8; this[12] = flt_ABD4B0; this[13] = flt_ABD4B4; v2 = flt_ABD4B8; this[21] = 0.0; this[1] = 0.0; this[14] = v2; *((_BYTE *)this + 92) = 0; this[22] = 10.0; this[2] = 0.0; return result; } // A406A4: using guessed type void *NpNs_MoveToTarget::`vftable'; // ABD4B0: using guessed type float flt_ABD4B0; // ABD4B4: using guessed type float flt_ABD4B4; // ABD4B8: using guessed type float flt_ABD4B8; //----- (008CFA50) -------------------------------------------------------- int __thiscall sub_8CFA50(_DWORD *this, _DWORD *a2) { int result; // eax this[12] = *a2; this[13] = a2[1]; result = a2[2]; this[14] = result; return result; } //----- (008CFA70) -------------------------------------------------------- void __thiscall sub_8CFA70(_DWORD *this) { *this = &NpNs_MoveToTarget::`vftable'; } // A406A4: using guessed type void *NpNs_MoveToTarget::`vftable'; //----- (008CFA80) -------------------------------------------------------- int __thiscall sub_8CFA80(void *this, float a2, int a3) { return (*(int (__stdcall **)(_DWORD, int, int))(*(_DWORD *)this + 28))(LODWORD(a2), (int)this + 36, a3); } //----- (008CFAA0) -------------------------------------------------------- int __thiscall sub_8CFAA0(float *this, int a2) { return (*(int (__stdcall **)(float, float *, int))(*(_DWORD *)this + 28))(this[2], this + 9, a2); } //----- (008CFAC0) -------------------------------------------------------- void __thiscall sub_8CFAC0(int this, float a2, int a3, int a4) { int v4; // esi float v5; // ST08_4 float v6; // ST0C_4 double v7; // st7 float v8; // ST10_4 float v9; // [esp+14h] [ebp+8h] float v10; // [esp+14h] [ebp+8h] float v11; // [esp+14h] [ebp+8h] v4 = this; *(float *)(this + 4) = a2; *(_DWORD *)(this + 12) = *(_DWORD *)a3; *(_DWORD *)(this + 16) = *(_DWORD *)(a3 + 4); *(_DWORD *)(this + 20) = *(_DWORD *)(a3 + 8); *(_DWORD *)(this + 36) = *(_DWORD *)a3; *(_DWORD *)(this + 40) = *(_DWORD *)(a3 + 4); *(_DWORD *)(this + 44) = *(_DWORD *)(a3 + 8); *(_DWORD *)(this + 24) = *(_DWORD *)a4; *(_DWORD *)(this + 28) = *(_DWORD *)(a4 + 4); *(_DWORD *)(this + 32) = *(_DWORD *)(a4 + 8); v5 = *(float *)(this + 24) - *(float *)(this + 12); v6 = *(float *)(v4 + 28) - *(float *)(v4 + 16); v7 = *(float *)(v4 + 32) - *(float *)(v4 + 20); *(float *)(this + 72) = v5; *(float *)(this + 76) = v6; v8 = v7; *(float *)(this + 80) = v8; v9 = *(float *)(v4 + 76) * *(float *)(v4 + 76) + *(float *)(v4 + 72) * *(float *)(v4 + 72) + *(float *)(v4 + 80) * *(float *)(v4 + 80); v10 = sqrt(v9); *(float *)(this + 84) = v10; v11 = fabs(v10); if ( v11 <= 0.0099999998 ) { *(_DWORD *)(this + 72) = dword_BA45C0; *(_DWORD *)(this + 76) = dword_BA45C4; *(_DWORD *)(this + 80) = dword_BA45C8; } else { sub_4430B0((float *)(this + 72)); *(_BYTE *)(v4 + 92) = 1; } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008CFBB0) -------------------------------------------------------- int __thiscall sub_8CFBB0(float *this, int a2, int a3) { return (*(int (__stdcall **)(float, int, int))(*(_DWORD *)this + 28))(this[2], a2, a3); } //----- (008CFBD0) -------------------------------------------------------- void __thiscall sub_8CFBD0(_BYTE *this) { this[92] = 0; } //----- (008CFBE0) -------------------------------------------------------- char __thiscall sub_8CFBE0(int *this, float a2) { int *v2; // esi bool v3; // zf int v4; // eax int v5; // ecx int v6; // edx float *v7; // edi float v8; // ST24_4 float v9; // ST18_4 float v10; // ST1C_4 float v11; // ST20_4 float v12; // ST0C_4 float v13; // ST10_4 float v14; // ST14_4 float v15; // ST18_4 float v16; // ST1C_4 double v17; // st7 int v18; // eax float v19; // ST20_4 float v20; // ST0C_4 float v21; // ST10_4 float v22; // ST14_4 int v23; // ecx int v24; // edx float v26; // [esp+24h] [ebp+8h] float v27; // [esp+24h] [ebp+8h] float v28; // [esp+24h] [ebp+8h] v2 = this; v3 = *((_BYTE *)this + 92) == 0; *((float *)this + 2) = a2; v4 = this[9]; v5 = this[10]; v6 = v2[11]; v7 = (float *)(v2 + 9); v2[15] = v4; v2[16] = v5; v2[17] = v6; if ( v3 ) return *((_BYTE *)v2 + 92); v8 = a2 - *((float *)v2 + 1); v26 = *((float *)v2 + 22); v9 = *((float *)v2 + 18) * v26; v10 = *((float *)v2 + 19) * v26; v11 = v26 * *((float *)v2 + 20); v12 = v9 * v8; v13 = v10 * v8; v14 = v8 * v11; v15 = *((float *)v2 + 3) + v12; v16 = *((float *)v2 + 4) + v13; v17 = *((float *)v2 + 5); *v7 = v15; v18 = *v2; *((float *)v2 + 10) = v16; v19 = v17 + v14; *((float *)v2 + 11) = v19; v20 = *v7 - *((float *)v2 + 3); v21 = *((float *)v2 + 10) - *((float *)v2 + 4); v22 = *((float *)v2 + 11) - *((float *)v2 + 5); (*(void (__thiscall **)(int *, int *))(v18 + 44))(v2, v2 + 9); v27 = v21 * v21 + v20 * v20 + v22 * v22; v28 = sqrt(v27); if ( *((float *)v2 + 21) > (double)v28 ) return *((_BYTE *)v2 + 92); v23 = v2[7]; v24 = v2[8]; *(_DWORD *)v7 = v2[6]; v2[10] = v23; v2[11] = v24; *((_BYTE *)v2 + 92) = 0; return *((_BYTE *)v2 + 92); } //----- (008CFD10) -------------------------------------------------------- int __cdecl sub_8CFD10(_DWORD *a1, const char *a2, const char *a3) { int result; // eax const char *v4; // eax int v5; // eax if ( !a1 ) return 0; if ( !a3 || (v4 = (const char *)a1[2]) == 0 || (result = strcmp(v4, a3)) != 0 ) { result = (*(int (__thiscall **)(_DWORD *, const char *))(*a1 + 72))(a1, a2); if ( !result ) { v5 = a1[8]; if ( v5 ) result = sub_8CF180(v5, a2, a3); else result = 0; } } return result; } //----- (008CFD90) -------------------------------------------------------- void __thiscall sub_8CFD90(float *this, int a2) { sub_8CF650((int)this, this[15], (int)(this + 6), a2, (int)(this + 9)); } //----- (008CFDB0) -------------------------------------------------------- void __thiscall sub_8CFDB0(void *this, float a2, int a3) { sub_8CF650((int)this, a2, (int)this + 24, a3, (int)this + 36); } //----- (008CFDD0) -------------------------------------------------------- void *__thiscall sub_8CFDD0(void *this, char a2) { void *v2; // esi v2 = this; sub_8CFA70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008CFE00) -------------------------------------------------------- char __thiscall sub_8CFE00(_DWORD *this, int a2, int a3, int a4) { int v4; // eax _DWORD *v5; // edi int v7; // ecx unsigned int v8; // ebx int v9; // ecx int v10; // esi int v11; // eax int v12; // eax int v13; // eax int v14; // [esp+4h] [ebp-4h] v4 = a2; v5 = this; if ( !a2 ) return 0; v7 = *(_DWORD *)(a2 + 188); ++v5[2]; v8 = 0; v14 = v7; if ( v7 <= 0 ) { LABEL_19: --v5[2]; return 1; } while ( 1 ) { if ( *(_DWORD *)(v4 + 188) <= v8 ) goto LABEL_18; v9 = *(_DWORD *)(v4 + 180); v10 = *(_DWORD *)(v9 + 4 * v8); if ( !v10 ) goto LABEL_18; v11 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v10 + 4))(*(_DWORD *)(v9 + 4 * v8)); if ( v11 ) { while ( v11 != a3 ) { v11 = *(_DWORD *)(v11 + 4); if ( !v11 ) goto LABEL_12; } v12 = (*(int (__thiscall **)(_DWORD *, int, int))*v5)(v5, v10, a4); if ( v12 == -1 ) goto LABEL_17; if ( !v12 ) return 0; } LABEL_12: v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v10); if ( v13 ) { while ( (char *)v13 != dword_BA455C ) { v13 = *(_DWORD *)(v13 + 4); if ( !v13 ) goto LABEL_17; } if ( !(unsigned __int8)sub_8CFE00(v10, a3, a4) ) return 0; } LABEL_17: v4 = a2; LABEL_18: if ( (signed int)++v8 >= v14 ) goto LABEL_19; } } //----- (008CFEE0) -------------------------------------------------------- void __thiscall sub_8CFEE0(int this, void *a2) { _DWORD *v2; // esi int v3; // edi unsigned int v4; // ecx int *v5; // ebx int v6; // edi char *v7; // eax int v8; // ecx int *v9; // eax int v10; // ebx unsigned int v11; // eax int v12; // edi int v13; // eax int v14; // ebx _DWORD *v15; // edi int v16; // eax unsigned int i; // ebx int v18; // edx int v19; // edi char *v20; // esi void *v21; // [esp+14h] [ebp-10h] unsigned int v22; // [esp+14h] [ebp-10h] _DWORD *v23; // [esp+14h] [ebp-10h] char *v24; // [esp+2Ch] [ebp+8h] v2 = (_DWORD *)this; v3 = (int)a2; if ( a2 != *(void **)(this + 8) ) { if ( (unsigned int)a2 < *(_DWORD *)(this + 12) ) { v4 = (unsigned int)a2; v21 = a2; do { v5 = (int *)(v2[1] + 4 * v4); if ( *v5 ) { v6 = *v5; if ( *v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4 = (unsigned int)v21; *v5 = 0; } v3 = (int)a2; --v2[4]; } v21 = (void *)++v4; } while ( v4 < v2[3] ); v2[3] = v3; } v7 = (char *)v2[1]; v24 = (char *)v2[1]; v2[2] = v3; if ( v3 ) { v8 = 4 * v3 | -((unsigned __int64)(unsigned int)v3 >> 30 != 0); v9 = (int *)operator new[]((v8 + 4) | -__CFADD__(v8, 4)); if ( v9 ) { v10 = (int)(v9 + 1); *v9 = v3; `eh vector constructor iterator'( v9 + 1, 4u, v3, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); } else { v10 = 0; } v11 = 0; v2[1] = v10; v22 = 0; if ( v2[3] ) { do { v12 = v2[1]; v13 = 4 * v11; v14 = *(_DWORD *)(v12 + v13); v15 = (_DWORD *)(v13 + v12); if ( v14 != *(_DWORD *)&v24[v13] ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v16 = *(_DWORD *)&v24[4 * v22]; *v15 = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); } v11 = v22 + 1; v22 = v11; } while ( v11 < v2[3] ); } for ( i = v2[3]; i < v2[2]; ++i ) { v18 = v2[1]; v19 = *(_DWORD *)(v18 + 4 * i); v23 = (_DWORD *)(v18 + 4 * i); if ( v19 ) { if ( !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *v23 = 0; } } v7 = v24; } else { v2[1] = 0; } if ( v7 ) { v20 = v7 - 4; `eh vector destructor iterator'(v7, 4u, *((_DWORD *)v7 - 1), sub_410C00); operator delete[](v20); } } } //----- (008D00F0) -------------------------------------------------------- LONG __thiscall sub_8D00F0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx unsigned int v4; // edi LONG result; // eax v2 = this; v3 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = v2[3]; if ( v4 >= v2[2] ) sub_8CFEE0((int)v2, (void *)(v4 + v2[5])); result = sub_7FFF10(v2, v4, &a2); if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } return result; } //----- (008D0190) -------------------------------------------------------- signed int __stdcall sub_8D0190(int a1, int a2) { int v2; // esi int v4; // eax const char *v5; // ecx double v6; // st6 double v7; // st7 bool v8; // c0 bool v9; // c3 double v10; // st7 float v11; // [esp+Ch] [ebp+8h] float v12; // [esp+Ch] [ebp+8h] float v13; // [esp+Ch] [ebp+8h] float v14; // [esp+Ch] [ebp+8h] v2 = a1; if ( !a1 ) return 0; if ( !a2 ) return 0; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( !v4 ) return -1; while ( (char *)v4 != dword_BA455C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return -1; } v5 = *(const char **)(a1 + 8); if ( !v5 ) return 1; if ( strcmp(">", v5) ) return 1; v6 = *(float *)(a1 + 48); v7 = *(float *)(a1 + 36) + v6; v11 = *(float *)(a2 + 24) - *(float *)(a2 + 36); v8 = v11 < v7; v9 = v11 == v7; v10 = *(float *)(v2 + 48); if ( v8 || v9 ) { v12 = *(float *)(a2 + 36) + *(float *)(a2 + 24); if ( v12 >= *(float *)(v2 + 36) - v6 ) { v13 = *(float *)(a2 + 28) - *(float *)(a2 + 36); if ( v13 <= *(float *)(v2 + 40) + v10 ) { v14 = *(float *)(a2 + 36) + *(float *)(a2 + 28); if ( v14 >= *(float *)(v2 + 40) - v10 ) return 1; } } } if ( ((unsigned __int8)*(_WORD *)(v2 + 28) >> 1) & 1 ) { *(_WORD *)(v2 + 28) &= 0xFFFDu; sub_8D00F0((_DWORD *)a2, v2); } return -1; } //----- (008D02C0) -------------------------------------------------------- const void *__thiscall sub_8D02C0(const void **this, int a2) { const void **v2; // ebx const void **v3; // edx unsigned int v4; // eax unsigned int v5; // edi const void *result; // eax unsigned int v7; // esi char v8; // al void *v9; // [esp+14h] [ebp-2Ch] int v10; // [esp+24h] [ebp-1Ch] unsigned int v11; // [esp+28h] [ebp-18h] int v12; // [esp+3Ch] [ebp-4h] v2 = (const void **)a2; v3 = this; v4 = strlen((const char *)a2); v5 = v4; if ( v4 ) { if ( *(_BYTE *)(a2 + 1) == 58 ) goto LABEL_17; v7 = 0; if ( v4 ) { do { v8 = *(_BYTE *)(a2 + v7); if ( v8 != 46 && v8 != 92 ) break; ++v7; } while ( v7 < v5 ); } v2 = v3 + 7; sub_4017F0(v3 + 7, v3, 0, (void *)0xFFFFFFFF); v11 = 15; v10 = 0; LOBYTE(v9) = 0; sub_4018E0(&v9, (void *)a2, strlen((const char *)a2)); v12 = 0; sub_401C20(v2, (int)&v9, v7, v5 - v7); if ( v11 >= 0x10 ) operator delete(v9); if ( (unsigned int)v2[5] < 0x10 ) LABEL_17: result = v2; else result = *v2; } else if ( (unsigned int)v3[5] < 0x10 ) { result = v3; } else { result = *v3; } return result; } //----- (008D03E0) -------------------------------------------------------- void **__cdecl sub_8D03E0(char *a1, int a2) { char v2; // bl char v3; // al _DWORD *v4; // eax void **v5; // esi char *v7; // eax int v8; // edi int v9; // eax char v10; // [esp+14h] [ebp-604h] int *v11; // [esp+160h] [ebp-4B8h] char *Src; // [esp+3ECh] [ebp-22Ch] int v13; // [esp+3FCh] [ebp-21Ch] unsigned int v14; // [esp+400h] [ebp-218h] char v15; // [esp+408h] [ebp-210h] char v16; // [esp+508h] [ebp-110h] int v17; // [esp+614h] [ebp-4h] sub_877EC0(&v10); v2 = byte_BA4774; v17 = 0; byte_BA4774 = 1; if ( a2 ) sub_876AD0(&v10, a2); v3 = sub_875BC0(&v10, a1); byte_BA4774 = v2; if ( !v3 ) goto LABEL_11; _splitpath(a1, 0, 0, &v16, &v15); v14 = 15; v13 = 0; LOBYTE(Src) = 0; LOBYTE(v17) = 1; sub_4018E0(&Src, &v16, strlen(&v16)); sub_401D10((int)&Src, &v15, strlen(&v15)); v4 = operator new(0xE8u); LOBYTE(v17) = 2; if ( v4 ) v5 = (void **)sub_85A1C0(v4, 0); else v5 = 0; LOBYTE(v17) = 1; if ( !v5 ) { if ( v14 >= 0x10 ) operator delete(Src); v14 = 15; v13 = 0; LOBYTE(Src) = 0; LABEL_11: v17 = -1; sub_877120(&v10); return 0; } v7 = Src; if ( v14 < 0x10 ) v7 = (char *)&Src; sub_85AB50(v5, v7); v8 = *v11; if ( *v11 ) { v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 4))(*v11); if ( v9 ) { while ( (char *)v9 != dword_BA457C ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_20; } (*((void (__thiscall **)(void **, int, _DWORD))*v5 + 29))(v5, v8, 0); } } LABEL_20: if ( v14 >= 0x10 ) operator delete(Src); v14 = 15; v13 = 0; LOBYTE(Src) = 0; v17 = -1; sub_877120(&v10); return v5; } // BA4774: using guessed type char byte_BA4774; //----- (008D0610) -------------------------------------------------------- _BYTE *__thiscall sub_8D0610(_BYTE *this) { _BYTE *result; // eax result = this; *(float *)this = 0.0; this[24] = 0; *((float *)this + 1) = 0.0; *((float *)this + 2) = 0.0; *((float *)this + 5) = 0.0; *((float *)this + 4) = 0.0; *((float *)this + 3) = 0.0; return result; } //----- (008D0630) -------------------------------------------------------- int __thiscall sub_8D0630(float *this, float a2) { float *v2; // esi char v3; // bl float v4; // ST08_4 signed int v5; // ecx double v6; // st7 bool v7; // zf int result; // eax float v9; // [esp+14h] [ebp+8h] float v10; // [esp+14h] [ebp+8h] float v11; // [esp+14h] [ebp+8h] v2 = this; v3 = 0; v4 = this[1]; v5 = 0; v9 = a2 - *v2; v2[1] = v9; v10 = v9 - v4; v2[2] = v10; v11 = v10 + v2[4]; v6 = v11; if ( v2[5] <= (double)v11 ) { v3 = 1; v5 = (signed int)(v6 / v2[5]); v6 = v6 - (double)v5 * v2[5]; } v7 = *((_BYTE *)v2 + 24) == 0; v2[4] = v6; result = v5; if ( v7 ) *((_BYTE *)v2 + 24) = v3; return result; } //----- (008D06A0) -------------------------------------------------------- char __thiscall sub_8D06A0(float *this, float a2) { char result; // al result = *((_BYTE *)this + 24); *this = a2; *((_BYTE *)this + 24) = 0; this[1] = 0.0; this[2] = 0.0; this[4] = 0.0; return result; } //----- (008D06C0) -------------------------------------------------------- float *__thiscall sub_8D06C0(float *this) { float *result; // eax result = this; *this = 0.0; this[1] = 0.0; this[4] = 0.0; this[2] = 0.0; this[5] = 0.0; this[3] = 0.0; return result; } //----- (008D06E0) -------------------------------------------------------- int __thiscall sub_8D06E0(float *this, float a2, int a3) { int result; // eax result = *((_DWORD *)this + 4); *this = a2; this[4] = -6.8056469e38/*NaN*/; this[1] = 0.0; *((_DWORD *)this + 5) = a3; this[2] = 0.0; return result; } //----- (008D0710) -------------------------------------------------------- void __thiscall sub_8D0710(float *this) { this[4] = 0.0; *this = 0.0; this[1] = 0.0; this[2] = 0.0; } //----- (008D0730) -------------------------------------------------------- void __thiscall sub_8D0730(int this, float a2) { float v2; // ST00_4 float v3; // [esp+Ch] [ebp+8h] if ( *(_DWORD *)(this + 16) ) { v2 = *(float *)(this + 4); v3 = a2 - *(float *)this; *(float *)(this + 4) = v3; *(float *)(this + 8) = v3 - v2; if ( *(float *)(this + 12) < (double)v3 ) *(_DWORD *)(this + 16) = 1; if ( *(_DWORD *)(this + 20) == *(_DWORD *)(this + 16) ) sub_8D0710((float *)this); } } //----- (008D0790) -------------------------------------------------------- int __thiscall sub_8D0790(float *this, int a2, int a3, float a4, int a5) { int result; // eax int v6; // edx this[4] = a4; *((_DWORD *)this + 6) = a5; this[5] = a4; result = a3; *(_DWORD *)this = a2; *((_DWORD *)this + 2) = a3; *((_DWORD *)this + 3) = a3; this[1] = 0.0; if ( a3 ) { v6 = 0; do { ++v6; result >>= 1; } while ( result ); *((_DWORD *)this + 1) = v6; } return result; } //----- (008D07D0) -------------------------------------------------------- signed int __thiscall sub_8D07D0(signed int *this, signed int a2, signed int a3, signed int a4, signed int a5, char a6) { signed int v6; // edx char v7; // al signed int v8; // ebx signed int v9; // esi signed int v10; // edi signed int result; // eax int v12; // esi int v13; // edx signed int v14; // ecx v6 = a2; v7 = 0; if ( a2 < 0 ) { v6 = 0; v7 = 1; } v8 = a3; if ( a3 < 0 ) { v8 = 0; v7 = 1; } v9 = a4; if ( a4 < 0 ) { v9 = 0; v7 = 1; } v10 = a5; if ( a5 < 0 ) { v10 = 0; v7 = 1; } if ( v6 > 512 ) { v6 = 512; v7 = 1; } if ( v8 > 512 ) { v8 = 512; v7 = 1; } if ( v9 > 512 ) { v9 = 512; v7 = 1; } if ( v10 <= 512 ) { if ( !v7 ) goto LABEL_20; } else { v10 = 512; } if ( a6 ) return -1; LABEL_20: v12 = v10 ^ v9; v13 = v8 ^ v6; if ( v13 < 0 || v12 < 0 ) { v12 = 0; v13 = 0; } for ( result = this[1]; v12 + v13; --result ) { v13 >>= 1; v12 >>= 1; } v14 = *this; if ( result > v14 ) result = v14; return result; } //----- (008D0890) -------------------------------------------------------- signed int __stdcall sub_8D0890(_DWORD *a1, int a2) { const char *v2; // eax int v3; // ecx v2 = (const char *)a1[2]; if ( !v2 ) return 1; if ( strcmp(v2, ">") ) return 1; if ( a1[48] ) return 1; v3 = a1[8]; if ( !v3 ) return 1; (*(void (__stdcall **)(_DWORD **, _DWORD *))(*(_DWORD *)v3 + 120))(&a1, a1); sub_410C00(&a1); return -1; } //----- (008D0910) -------------------------------------------------------- _DWORD *__thiscall sub_8D0910(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // eax _DWORD *v6; // ebx int v7; // ecx int v8; // esi int v9; // edi int v10; // ecx int v11; // esi int v12; // edi int v13; // eax signed int v14; // edi unsigned int v15; // eax _DWORD *v16; // eax _DWORD *v17; // esi _DWORD *v18; // esi int v19; // eax _DWORD *v20; // eax _BYTE *v21; // esi _DWORD *v22; // [esp+14h] [ebp-18h] int v23; // [esp+18h] [ebp-14h] unsigned int v24; // [esp+1Ch] [ebp-10h] v4 = this; v22 = this; if ( a2 < 0 ) return 0; v6 = (_DWORD *)this[6]; if ( !v6 ) return 0; v7 = 0; if ( a2 > 0 ) { while ( 1 ) { v8 = v4[2]; v9 = v8 >> v7; v10 = v7 + 1; v11 = v8 >> v10; v23 = v10; a3 %= v9; v12 = a4 % v9; a4 = v12; v13 = v12 / v11; v14 = 4; v15 = a3 / v11 + 2 * v13; v24 = v15; if ( v6[48] < 4u ) { do { v16 = operator new(0xE8u); v17 = 0; if ( v16 ) v17 = sub_85A1C0(v16, 0); if ( v17 ) InterlockedIncrement(v17 + 1); *((_WORD *)v17 + 14) |= 2u; *((_WORD *)v17 + 14) &= 0xFFF7u; *((_WORD *)v17 + 14) &= 0xFFFBu; *((_WORD *)v17 + 14) |= 0x10u; sub_85AB50((void **)v17, ">"); (*(void (__thiscall **)(_DWORD *, _DWORD *, signed int))(*v6 + 116))(v6, v17, 1); if ( !InterlockedDecrement(v17 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); --v14; } while ( v14 ); v15 = v24; } if ( a2 == v23 ) break; if ( v6[47] <= v15 ) break; v18 = *(_DWORD **)(v6[45] + 4 * v15); if ( !v18 ) break; v19 = (*(int (__thiscall **)(_DWORD *))(*v18 + 4))(v18); if ( !v19 ) break; while ( (char *)v19 != dword_BA455C ) { v19 = *(_DWORD *)(v19 + 4); if ( !v19 ) return v6; } v20 = v6; v6 = v18; v21 = (_BYTE *)v18[2]; if ( !v21 || *v21 != 62 ) return v20; v7 = v23; if ( v23 >= a2 ) return v6; v4 = v22; } } return v6; } //----- (008D0AC0) -------------------------------------------------------- volatile LONG *__thiscall sub_8D0AC0(int this, float *a2) { int v2; // esi double v3; // st7 int v4; // ebx volatile LONG *v5; // eax volatile LONG *v6; // esi v2 = this; v3 = a2[12]; v4 = sub_8D07D0( (signed int *)this, (signed int)((a2[9] - v3) / *(float *)(this + 16)), (signed int)((a2[9] + v3) / *(float *)(this + 16)), (signed int)((a2[10] - v3) / *(float *)(this + 16)), (signed int)((v3 + a2[10]) / *(float *)(this + 16)), 0); v5 = sub_8D0910( (_DWORD *)v2, v4, (signed int)(a2[9] / *(float *)(v2 + 16)), (signed int)(a2[10] / *(float *)(v2 + 16))); v6 = v5; if ( v5 ) InterlockedIncrement(v5 + 1); if ( v6 ) (*(void (__thiscall **)(volatile LONG *, float *, signed int))(*v6 + 116))(v6, a2, 1); if ( v6 && !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); return v6; } //----- (008D0BD0) -------------------------------------------------------- char __thiscall sub_8D0BD0(int *this) { void **v2; // [esp+4h] [ebp-18h] int v3; // [esp+8h] [ebp-14h] int v4; // [esp+Ch] [ebp-10h] int v5; // [esp+18h] [ebp-4h] v3 = 0; v4 = -1; v2 = &NsMakeQuadScene::Optimizer::`vftable'; v5 = 0; return sub_8CFE00(&v2, this[6], (int)dword_BA455C, 0); } // A406F4: using guessed type void *NsMakeQuadScene::Optimizer::`vftable'; //----- (008D0C60) -------------------------------------------------------- void __thiscall sub_8D0C60(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTPointerMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete((void *)v1[2]); } // A406FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4071C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D0CD0) -------------------------------------------------------- void __thiscall sub_8D0CD0(_BYTE *this) { _BYTE *v1; // edi unsigned int v2; // ebx _DWORD *v3; // esi void *v4; // eax v1 = this; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; v2 = 0; if ( this[16] && *((_DWORD *)this + 1) > 0u ) { do { v3 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v2); while ( v3 ) { v4 = (void *)v3[1]; v3 = (_DWORD *)*v3; operator delete(v4); } ++v2; } while ( v2 < *((_DWORD *)v1 + 1) ); } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A406FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4071C: using guessed type void *NiTPointerMap>::`vftable'; // A4073C: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (008D0D80) -------------------------------------------------------- void **__thiscall sub_8D0D80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A406FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (008D0DC0) -------------------------------------------------------- void **__thiscall sub_8D0DC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A406FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4071C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D0E40) -------------------------------------------------------- int *sub_8D0E40() { return sub_40DF10(); } //----- (008D0E50) -------------------------------------------------------- void *__thiscall sub_8D0E50(void *this, char a2) { void *v2; // esi v2 = this; sub_8D0CD0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D0E80) -------------------------------------------------------- char sub_8D0E80() { sub_940360(&off_AC224C); return 1; } // AC224C: using guessed type void **off_AC224C; //----- (008D0EB0) -------------------------------------------------------- void __thiscall sub_8D0EB0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // A4077C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4079C: using guessed type void *NiTPointerMap>::`vftable'; // A407BC: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (008D0F60) -------------------------------------------------------- void **__thiscall sub_8D0F60(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4077C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (008D0FA0) -------------------------------------------------------- void **__thiscall sub_8D0FA0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4077C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4079C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D1020) -------------------------------------------------------- void *__thiscall sub_8D1020(void *this, char a2) { void *v2; // esi v2 = this; sub_8D0EB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D1050) -------------------------------------------------------- char sub_8D1050() { sub_940360(&off_AC23B0); return 1; } // AC23B0: using guessed type void **off_AC23B0; //----- (008D1080) -------------------------------------------------------- void __thiscall sub_8D1080(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiTPointerMap>::`vftable'; sub_940360(this); *v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete((void *)v1[2]); } // A407FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4081C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D10F0) -------------------------------------------------------- void __thiscall sub_8D10F0(_BYTE *this) { _BYTE *v1; // edi unsigned int v2; // ebx _DWORD *v3; // esi void *v4; // eax v1 = this; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; v2 = 0; if ( this[16] && *((_DWORD *)this + 1) > 0u ) { do { v3 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v2); while ( v3 ) { v4 = (void *)v3[1]; v3 = (_DWORD *)*v3; operator delete(v4); } ++v2; } while ( v2 < *((_DWORD *)v1 + 1) ); } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A407FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4081C: using guessed type void *NiTPointerMap>::`vftable'; // A4083C: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (008D11A0) -------------------------------------------------------- LONG __thiscall sub_8D11A0(_BYTE *this, int a2, const char *a3, LONG a4) { unsigned int v4; // kr00_4 char *v5; // eax int v6; // edi int v7; // esi LONG result; // eax int (__thiscall ***v9)(_DWORD, signed int); // esi if ( this[16] ) { v4 = strlen(a3); v5 = (char *)operator new(v4 + 1); v6 = a2; *(_DWORD *)(a2 + 4) = v5; strcpy_s(v5, v4 + 1, a3); } else { v6 = a2; *(_DWORD *)(a2 + 4) = a3; } v7 = *(_DWORD *)(v6 + 8); result = a4; if ( v7 != a4 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = a4; } *(_DWORD *)(v6 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a4; } } if ( result ) { v9 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v9 ) result = (**v9)(v9, 1); } } return result; } //----- (008D1290) -------------------------------------------------------- void **__thiscall sub_8D1290(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A407FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (008D12D0) -------------------------------------------------------- void **__thiscall sub_8D12D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A407FC: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4081C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D1350) -------------------------------------------------------- void *__thiscall sub_8D1350(void *this, char a2) { void *v2; // esi v2 = this; sub_8D10F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D1380) -------------------------------------------------------- char sub_8D1380() { sub_940360(&off_AC2538); return 1; } // AC2538: using guessed type void **off_AC2538; //----- (008D13B0) -------------------------------------------------------- void __thiscall sub_8D13B0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // eax v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete[](v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete[](*((void **)v1 + 2)); } // A4087C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4089C: using guessed type void *NiTPointerMap>::`vftable'; // A408BC: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (008D1460) -------------------------------------------------------- void **__thiscall sub_8D1460(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4087C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (008D14A0) -------------------------------------------------------- void **__thiscall sub_8D14A0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete[](v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4087C: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A4089C: using guessed type void *NiTPointerMap>::`vftable'; //----- (008D1520) -------------------------------------------------------- void *__thiscall sub_8D1520(void *this, char a2) { void *v2; // esi v2 = this; sub_8D13B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D1550) -------------------------------------------------------- char __cdecl sub_8D1550(int a1, int (__cdecl *a2)(int, int, int), int a3) { char result; // al _DWORD *v4; // edi _DWORD *i; // esi ++dword_AC254C; if ( a1 ) { result = a2(a1, a3, dword_AC254C); if ( !result ) return result; v4 = *(_DWORD **)(a1 + 68); for ( i = (_DWORD *)*v4; i != v4; --dword_AC254C ) { sub_8D1550(i[2], a2, a3); i = (_DWORD *)*i; } } return 1; } // AC254C: using guessed type int dword_AC254C; //----- (008D15B0) -------------------------------------------------------- char *sub_8D15B0() { return dword_BA65C8; } //----- (008D15C0) -------------------------------------------------------- void *__thiscall sub_8D15C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NPTR_ISShader_v2::`vftable'; sub_868D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A408FC: using guessed type void *NPTR_ISShader_v2::`vftable'; //----- (008D15F0) -------------------------------------------------------- void __thiscall sub_8D15F0(void *this, int a2, _DWORD **a3) { sub_868EF0(this, a2, a3); } //----- (008D1600) -------------------------------------------------------- _DWORD *sub_8D1600() { _DWORD *v0; // eax _DWORD *v1; // esi _DWORD *v2; // ST0C_4 _DWORD *result; // eax v0 = operator new(0xCu); v1 = v0; v2 = v0; result = 0; if ( v2 ) { sub_868D00(v1); *v1 = &NPTR_ISShader_v2::`vftable'; result = v1; } return result; } // A408FC: using guessed type void *NPTR_ISShader_v2::`vftable'; //----- (008D1660) -------------------------------------------------------- char __thiscall sub_8D1660(int *this, size_t a2) { return sub_868F80(this, a2); } //----- (008D1670) -------------------------------------------------------- int __thiscall sub_8D1670(const char **this, _DWORD *a2) { return sub_868DB0(this, a2); } //----- (008D1680) -------------------------------------------------------- char __thiscall sub_8D1680(void *this, _DWORD *a2) { char result; // al void *v3; // edi int v4; // eax const char *v5; // eax _DWORD *v6; // ecx const char *v7; // eax int v8; // ST04_4 char *v9; // eax result = 0; v3 = this; if ( !a2 ) return result; if ( !a2[8] ) goto LABEL_8; v4 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( !v4 ) { LABEL_6: v5 = (const char *)sub_879520(*((_DWORD **)v3 + 9)); if ( !sub_85AA60(a2, v5) ) sub_85AEA0(a2, *((void ***)v3 + 9)); LABEL_8: v6 = (_DWORD *)*((_DWORD *)v3 + 8); if ( v6 ) { v7 = (const char *)sub_879520(v6); if ( !sub_85AA60(a2, v7) ) { v8 = *((_DWORD *)v3 + 8); v9 = (char *)sub_879520(*((_DWORD **)v3 + 8)); sub_85AE20(a2, v9, v8); } } return 1; } while ( (char *)v4 != dword_BA4BA4 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_6; } return 0; } //----- (008D1710) -------------------------------------------------------- void __thiscall sub_8D1710(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[8]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[8] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } sub_868E90((void **)v2[8], "PTSEV2"); } //----- (008D1770) -------------------------------------------------------- _DWORD *__thiscall sub_8D1770(void *this, _DWORD **a2) { void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0xCu); v4 = v3; if ( v3 ) { sub_868D00(v3); *v4 = &NPTR_ISShader_v2::`vftable'; } else { v4 = 0; } sub_8D15F0(v2, (int)v4, a2); return v4; } // A408FC: using guessed type void *NPTR_ISShader_v2::`vftable'; //----- (008D17F0) -------------------------------------------------------- void __thiscall sub_8D17F0(char *this, void *a2) { char *v2; // esi _DWORD *v3; // eax int v4; // edi _DWORD *v5; // ebx _DWORD *v6; // ebx _DWORD *v7; // eax _DWORD *v8; // ecx int v9; // edi _DWORD *v10; // eax int v11; // edi _DWORD *v12; // ebx _DWORD *v13; // eax _DWORD *v14; // ecx _DWORD *v15; // ebx int v16; // edi v2 = this; v3 = sub_934760((int)a2, 3, 1u); v4 = *((_DWORD *)v2 + 5); v5 = v3; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v2 + 5) = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int, _DWORD))(**((_DWORD **)v2 + 5) + 64))(0, 0, 0, 2, 0); v6 = 0; (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 5) + 64))( 1, 3, 3, 2, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 5) + 64))( 2, 5, 5, 1, 0); v7 = operator new(0x1B8u); if ( v7 ) { v8 = v2 + 40; if ( *((_DWORD *)v2 + 15) >= 0x10u ) v8 = (_DWORD *)*v8; v6 = sub_8D3890(v7, v8); } v9 = *((_DWORD *)v2 + 7); if ( (_DWORD *)v9 != v6 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v2 + 7) = v6; if ( v6 ) InterlockedIncrement(v6 + 1); } (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 7) + 64))(*((_DWORD *)v2 + 5)); sub_8693E0(*((void ***)v2 + 7), "NsPgToonNoAni"); v10 = sub_934760((int)a2, 6, 1u); v11 = *((_DWORD *)v2 + 4); v12 = v10; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); *((_DWORD *)v2 + 4) = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))(0, 0, 0, 2, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))( 1, 1, 1, 2, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))( 2, 2, 2, 4, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))( 3, 3, 3, 2, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))( 4, 5, 5, 1, 0); (*(void (__stdcall **)(signed int, signed int, signed int, signed int, _DWORD))(**((_DWORD **)v2 + 4) + 64))( 5, 6, 6, 1, 0); v13 = operator new(0x1B8u); if ( v13 ) { v14 = v2 + 40; if ( *((_DWORD *)v2 + 15) >= 0x10u ) v14 = (_DWORD *)*v14; v15 = sub_8D3890(v13, v14); } else { v15 = 0; } v16 = *((_DWORD *)v2 + 6); if ( (_DWORD *)v16 != v15 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); *((_DWORD *)v2 + 6) = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } (*(void (__stdcall **)(_DWORD))(**((_DWORD **)v2 + 6) + 64))(*((_DWORD *)v2 + 4)); sub_8693E0(*((void ***)v2 + 6), "NsPgToonAni"); } //----- (008D1A90) -------------------------------------------------------- unsigned int __thiscall sub_8D1A90(_DWORD *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_869050(this, a2); v3 = sub_8784D0(*(int *)dword_BA65C8); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008D1AE0) -------------------------------------------------------- _DWORD *__thiscall sub_8D1AE0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *v5; // eax int v6; // edi _DWORD *v8; // [esp+14h] [ebp-10h] v1 = this; sub_8D1D80(this); *v1 = &NsPgToonRegister_v2::`vftable'; v1[8] = 0; v1[9] = 0; v1[15] = 15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; sub_875C90((int)"NsPgToonExtraData"); sub_875C90((int)"NPTR_ISShader_v2"); sub_875C70((int)"NsPgToonExtraData", (int)sub_8D2660); sub_875C70((int)"NPTR_ISShader_v2", (int)sub_8D1600); v2 = v1[8]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[8] = 0; } v3 = operator new(0xCu); v4 = v3; if ( v3 ) { sub_868D00(v3); v5 = v4; *v4 = &NPTR_ISShader_v2::`vftable'; v8 = v4; } else { v8 = 0; v5 = 0; } v6 = v1[9]; if ( (_DWORD *)v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5 = v8; } v1[9] = v5; if ( v5 ) InterlockedIncrement(v5 + 1); } sub_868E90((void **)v1[9], "NPTR_IS"); return v1; } // A408FC: using guessed type void *NPTR_ISShader_v2::`vftable'; // A40998: using guessed type void *NsPgToonRegister_v2::`vftable'; //----- (008D1C20) -------------------------------------------------------- void *sub_8D1C20() { return &unk_BA65C0; } //----- (008D1C30) -------------------------------------------------------- LONG __thiscall sub_8D1C30(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &NsPgToonRegister_v2::`vftable'; v2 = this[8]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[8] = 0; } v3 = v1[9]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[9] = 0; } if ( v1[15] >= 0x10u ) operator delete((void *)v1[10]); v1[15] = 15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; v4 = v1[9]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[8]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return sub_8D1ED0(v1); } // A40998: using guessed type void *NsPgToonRegister_v2::`vftable'; //----- (008D1D50) -------------------------------------------------------- void *__thiscall sub_8D1D50(void *this, char a2) { void *v2; // esi v2 = this; sub_8D1C30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D1D80) -------------------------------------------------------- _DWORD *__thiscall sub_8D1D80(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &INpShader::`vftable'; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v2 = v1[3]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[3] = 0; } v3 = v1[6]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[6] = 0; } v4 = v1[7]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[7] = 0; } v5 = v1[4]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[4] = 0; } v6 = v1[5]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[5] = 0; } *((_WORD *)v1 + 4) = 256; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A409C4: using guessed type void *INpShader::`vftable'; //----- (008D1EC0) -------------------------------------------------------- void *sub_8D1EC0() { return &unk_BA65D4; } //----- (008D1ED0) -------------------------------------------------------- LONG __thiscall sub_8D1ED0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi v1 = this; *this = &INpShader::`vftable'; v2 = this[3]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[3] = 0; } v3 = v1[6]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[6] = 0; } v4 = v1[7]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[7] = 0; } v5 = v1[4]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[4] = 0; } v6 = v1[5]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[5] = 0; } v7 = v1[7]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[6]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[5]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[4]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[3]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A409C4: using guessed type void *INpShader::`vftable'; //----- (008D20B0) -------------------------------------------------------- char __thiscall sub_8D20B0(_BYTE *this, int a2, int a3) { _BYTE *v3; // ebx _DWORD *v4; // edi _DWORD *v5; // ecx int v6; // eax char v7; // al _DWORD *v8; // eax int v9; // esi char result; // al v3 = this; v4 = 0; if ( a2 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E58 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = (_DWORD *)(v7 != 0 ? a2 : 0); } else { v5 = 0; } if ( v5[315] >= 0xFFFE0101 && (*(int (**)(void))(*v5 + 64))() & 2 ) { v3[8] = 1; v8 = operator new(0x1Cu); if ( v8 ) v4 = sub_880A60(v8); v9 = *((_DWORD *)v3 + 3); if ( (_DWORD *)v9 != v4 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v3 + 3) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v3 + 8))(v3, a2); result = 1; } else { v3[8] = 0; result = 0; } return result; } //----- (008D21E0) -------------------------------------------------------- char __thiscall sub_8D21E0(_BYTE *this, void *a2, int a3, int a4, int a5, int a6) { _BYTE *v6; // ebx _DWORD *v8; // edi _DWORD *v9; // eax _DWORD *v10; // ebx int v11; // ebx v6 = this; if ( !this[8] || !a2 || !(*(unsigned __int8 (__stdcall **)(void *))(*(_DWORD *)this + 12))(a2) ) return 0; v8 = (_DWORD *)*((_DWORD *)a2 + 47); if ( v8 ) { if ( *((_DWORD *)v6 + 6) ) { if ( v6[9] ) sub_8633A0((int)a2, *((_DWORD *)v6 + 6)); if ( !v8[3] ) { v9 = operator new(0x10u); v10 = 0; if ( v9 ) v10 = sub_86EA70(v9); if ( sub_870FE0(v10, *((unsigned __int16 **)a2 + 46), v8[2], a5, a6, 1) ) sub_599BC0(v8, (int)v10); *(_WORD *)(*((_DWORD *)a2 + 46) + 50) = *(_WORD *)(*((_DWORD *)a2 + 46) + 50) & 0xFFF | 0x4000; (*(void (__stdcall **)(void *, int, int))(*(_DWORD *)a3 + 152))(a2, a5, a6); } return 1; } return 0; } v11 = *((_DWORD *)v6 + 7); if ( !v11 ) return 0; sub_8633A0((int)a2, v11); return 1; } //----- (008D2320) -------------------------------------------------------- void __thiscall sub_8D2320(_BYTE *this, int a2, int a3, int a4, int a5, int a6) { _BYTE *v6; // edi int v7; // ecx int v8; // eax int v9; // esi int v10; // eax int v11; // eax int v12; // [esp+4h] [ebp-8h] int v13; // [esp+8h] [ebp-4h] v6 = this; if ( this[8] ) { v7 = a2; v8 = 0; v12 = *(_DWORD *)(a2 + 188); v13 = 0; if ( v12 > 0 ) { while ( 1 ) { if ( *(_DWORD *)(v7 + 188) > (unsigned int)v8 ) { v9 = *(_DWORD *)(*(_DWORD *)(v7 + 180) + 4 * v8); if ( v9 ) { v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9); if ( v10 ) { while ( (char *)v10 != dword_BA4840 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_10; } (*(void (__thiscall **)(_BYTE *, int, int, _DWORD, int, int))(*(_DWORD *)v6 + 16))(v6, v9, a3, 0, a5, a6); } else { LABEL_10: v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9); if ( v11 ) { while ( (char *)v11 != dword_BA455C ) { v11 = *(_DWORD *)(v11 + 4); if ( !v11 ) goto LABEL_16; } sub_8D2320(v9, a3, 0, a5, a6); } } } } LABEL_16: v8 = v13 + 1; v13 = v8; if ( v8 >= v12 ) break; v7 = a2; } } } } //----- (008D23F0) -------------------------------------------------------- void *__thiscall sub_8D23F0(void *this, char a2) { void *v2; // esi v2 = this; sub_8D1ED0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D2420) -------------------------------------------------------- char __thiscall sub_8D2420(_BYTE *this, _DWORD *a2, int a3, int a4, int a5) { _BYTE *v5; // edi int v7; // esi _DWORD *v8; // eax unsigned int v9; // ebx int v10; // esi int v11; // eax int v12; // eax int v13; // ecx int v14; // eax char v15; // al unsigned int v16; // [esp+4h] [ebp-8h] int v17; // [esp+8h] [ebp-4h] v5 = this; if ( !this[8] ) return 0; v7 = a3; v17 = sub_402BA0((int)&unk_BA6E58, a3); v8 = a2; v9 = 0; v16 = a2[47]; if ( v16 ) { while ( 1 ) { if ( v8[47] > v9 ) { v10 = *(_DWORD *)(v8[45] + 4 * v9); if ( v10 ) { v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v10); if ( v11 ) { while ( (char *)v11 != dword_BA4840 ) { v11 = *(_DWORD *)(v11 + 4); if ( !v11 ) goto LABEL_11; } (*(void (__thiscall **)(_BYTE *, int, int, _DWORD, int, int))(*(_DWORD *)v5 + 16))(v5, v10, a3, 0, a4, a5); } else { LABEL_11: v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v10); if ( v12 ) { while ( (char *)v12 != dword_BA455C ) { v12 = *(_DWORD *)(v12 + 4); if ( !v12 ) goto LABEL_17; } sub_8D2320(v5, v10, v17, 0, a4, a5); } } } } LABEL_17: if ( ++v9 >= v16 ) break; v8 = a2; } v7 = a3; } if ( v7 ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7); if ( v14 ) { while ( (_UNKNOWN *)v14 != &unk_BA6E58 ) { v14 = *(_DWORD *)(v14 + 4); if ( !v14 ) goto LABEL_24; } v15 = 1; } else { LABEL_24: v15 = 0; } v13 = v15 != 0 ? v7 : 0; } else { v13 = 0; } sub_924DA0(v13); sub_85C4D0(a2); return 1; } //----- (008D2550) -------------------------------------------------------- float *__thiscall sub_8D2550(float *this) { float *v1; // esi v1 = this; sub_868D00(this); v1[7] = 0.0; v1[8] = 0.0; v1[11] = 0.11; *((_BYTE *)v1 + 26) = 0; v1[12] = 10000.0; v1[9] = 0.0; v1[13] = 0.0; v1[4] = 1.0; *((_WORD *)v1 + 12) = 0; *(_DWORD *)v1 = &NsPgToonExtraData::`vftable'; v1[10] = 1.0; *((_BYTE *)v1 + 12) = 1; v1[5] = 10000.0; return v1; } // A409EC: using guessed type void *NsPgToonExtraData::`vftable'; //----- (008D25C0) -------------------------------------------------------- char *sub_8D25C0() { return dword_BA65DC; } //----- (008D25D0) -------------------------------------------------------- LONG __thiscall sub_8D25D0(_DWORD *this) { *this = &NsPgToonExtraData::`vftable'; this[13] = 0; return sub_868D20(this); } // A409EC: using guessed type void *NsPgToonExtraData::`vftable'; //----- (008D25F0) -------------------------------------------------------- char __thiscall sub_8D25F0(_BYTE *this, int a2, _DWORD **a3) { _BYTE *v3; // esi char result; // al v3 = this; sub_868EF0(this, a2, a3); *(_BYTE *)(a2 + 12) = v3[12]; *(_BYTE *)(a2 + 26) = v3[26]; *(_DWORD *)(a2 + 28) = *((_DWORD *)v3 + 7); *(_DWORD *)(a2 + 32) = *((_DWORD *)v3 + 8); *(_DWORD *)(a2 + 36) = *((_DWORD *)v3 + 9); *(_DWORD *)(a2 + 40) = *((_DWORD *)v3 + 10); *(float *)(a2 + 44) = *((float *)v3 + 11); *(_DWORD *)(a2 + 52) = *((_DWORD *)v3 + 13); *(float *)(a2 + 48) = *((float *)v3 + 12); *(_BYTE *)(a2 + 24) = v3[24]; result = v3[25]; *(_BYTE *)(a2 + 25) = result; *(float *)(a2 + 16) = *((float *)v3 + 4); *(float *)(a2 + 20) = *((float *)v3 + 5); return result; } //----- (008D2660) -------------------------------------------------------- float *sub_8D2660() { float *v0; // eax float *result; // eax v0 = (float *)operator new(0x38u); if ( v0 ) result = sub_8D2550(v0); else result = 0; return result; } //----- (008D26D0) -------------------------------------------------------- bool __stdcall sub_8D26D0(int a1) { return a1 != 0; } //----- (008D26E0) -------------------------------------------------------- int __cdecl sub_8D26E0(int a1, int a2, int a3) { int v3; // ecx int (__cdecl *v4)(int, int, int, int *, signed int); // ecx int v6; // [esp+0h] [ebp-4h] v6 = v3; v4 = *(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 4); v6 = 4; return v4(a1, a2, 4 * a3, &v6, 1); } //----- (008D2710) -------------------------------------------------------- int __cdecl sub_8D2710(int a1, int a2, int a3) { int v3; // ecx int (__cdecl *v4)(int, int, int, int *, signed int); // ecx int v6; // [esp+0h] [ebp-4h] v6 = v3; v4 = *(int (__cdecl **)(int, int, int, int *, signed int))(a1 + 8); v6 = 4; return v4(a1, a2, 4 * a3, &v6, 1); } //----- (008D2740) -------------------------------------------------------- void *__thiscall sub_8D2740(void *this, char a2) { void *v2; // esi v2 = this; sub_8D25D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D2770) -------------------------------------------------------- float *__thiscall sub_8D2770(_BYTE *this, _DWORD **a2) { _BYTE *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x38u); v4 = 0; if ( v3 ) v4 = sub_8D2550(v3); sub_8D25F0(v2, (int)v4, a2); return v4; } //----- (008D27E0) -------------------------------------------------------- int __cdecl sub_8D27E0(int a1, int a2) { return sub_8D26E0(*(_DWORD *)(a1 + 352), a2, 1); } //----- (008D2800) -------------------------------------------------------- int __cdecl sub_8D2800(int a1, int a2) { return sub_8D2710(*(_DWORD *)(a1 + 356), a2, 1); } //----- (008D2820) -------------------------------------------------------- int __thiscall sub_8D2820(int *this, size_t a2) { int *v2; // esi v2 = this; sub_868F80(this, a2); sub_8065C0(a2, (int)(v2 + 3)); sub_8065C0(a2, (int)v2 + 26); sub_810B10(a2, (int)(v2 + 7)); sub_810B10(a2, (int)(v2 + 8)); sub_810B10(a2, (int)(v2 + 9)); sub_810B10(a2, (int)(v2 + 10)); sub_810B10(a2, (int)(v2 + 11)); sub_8D27E0(a2, (int)(v2 + 13)); sub_810B10(a2, (int)(v2 + 12)); sub_8065C0(a2, (int)(v2 + 6)); sub_8065C0(a2, (int)v2 + 25); sub_810B10(a2, (int)(v2 + 4)); return sub_810B10(a2, (int)(v2 + 5)); } //----- (008D28C0) -------------------------------------------------------- int __thiscall sub_8D28C0(const char **this, _DWORD *a2) { const char **v2; // esi v2 = this; sub_868DB0(this, a2); sub_8344E0((signed int)a2, (int)(v2 + 3)); sub_8344E0((signed int)a2, (int)v2 + 26); sub_817490((signed int)a2, (int)(v2 + 7)); sub_817490((signed int)a2, (int)(v2 + 8)); sub_817490((signed int)a2, (int)(v2 + 9)); sub_817490((signed int)a2, (int)(v2 + 10)); sub_817490((signed int)a2, (int)(v2 + 11)); sub_8D2800((int)a2, (int)(v2 + 13)); sub_817490((signed int)a2, (int)(v2 + 12)); sub_8344E0((signed int)a2, (int)(v2 + 6)); sub_8344E0((signed int)a2, (int)v2 + 25); sub_817490((signed int)a2, (int)(v2 + 4)); return sub_817490((signed int)a2, (int)(v2 + 5)); } //----- (008D2960) -------------------------------------------------------- unsigned int __thiscall sub_8D2960(_DWORD *this, char *a2) { char *v2; // esi _DWORD *v3; // edi char *v4; // eax unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax double v11; // ST20_8 unsigned int v12; // ebx char *v13; // eax unsigned int v14; // ebx char *v15; // eax unsigned int v16; // ebx char *v17; // eax unsigned int v18; // ebx char *v19; // eax unsigned int v20; // ebx char *v21; // eax unsigned int v22; // ebx char *v23; // eax unsigned int v24; // ebx char *v25; // eax unsigned int v26; // edi v2 = a2; v3 = this; sub_869050(this, a2); v4 = sub_8784D0(*(int *)dword_BA65DC); v5 = *((_DWORD *)v2 + 3); a2 = v4; if ( v5 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v5 + *((_DWORD *)v2 + 5)); sub_823870(v2, v5, &a2); v6 = sub_878510((int)"m_bOn", *((_BYTE *)v3 + 12)); v7 = *((_DWORD *)v2 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v7 + *((_DWORD *)v2 + 5)); sub_823870(v2, v7, &a2); v8 = sub_878510((int)"m_bSelfTexture", *((_BYTE *)v3 + 26)); v9 = *((_DWORD *)v2 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v9 + *((_DWORD *)v2 + 5)); sub_823870(v2, v9, &a2); v10 = (char *)operator new(0x2Au); v11 = *((float *)v3 + 10); a2 = v10; sprintf( v10, "D3DXVECTOR4 = (%5.3f,%5.3f,%5.3f,%5.3f)", *((float *)v3 + 7), *((float *)v3 + 8), *((float *)v3 + 9), v11); v12 = *((_DWORD *)v2 + 3); if ( v12 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v12 + *((_DWORD *)v2 + 5)); sub_823870(v2, v12, &a2); v13 = sub_8786B0((int)"m_fLineSize", *((float *)v3 + 11)); v14 = *((_DWORD *)v2 + 3); a2 = v13; if ( v14 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v14 + *((_DWORD *)v2 + 5)); sub_823870(v2, v14, &a2); v15 = sub_878700((int)"m_pCamera", v3[13]); v16 = *((_DWORD *)v2 + 3); a2 = v15; if ( v16 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v16 + *((_DWORD *)v2 + 5)); sub_823870(v2, v16, &a2); v17 = sub_8786B0((int)"m_fLineEnableLength", *((float *)v3 + 12)); v18 = *((_DWORD *)v2 + 3); a2 = v17; if ( v18 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v18 + *((_DWORD *)v2 + 5)); sub_823870(v2, v18, &a2); v19 = sub_878510((int)"m_bLineColorRevision", *((_BYTE *)v3 + 24)); v20 = *((_DWORD *)v2 + 3); a2 = v19; if ( v20 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v20 + *((_DWORD *)v2 + 5)); sub_823870(v2, v20, &a2); v21 = sub_878510((int)"m_bLineSizeRevision", *((_BYTE *)v3 + 25)); v22 = *((_DWORD *)v2 + 3); a2 = v21; if ( v22 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v22 + *((_DWORD *)v2 + 5)); sub_823870(v2, v22, &a2); v23 = sub_8786B0((int)"m_fRevisionNear", *((float *)v3 + 4)); v24 = *((_DWORD *)v2 + 3); a2 = v23; if ( v24 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v24 + *((_DWORD *)v2 + 5)); sub_823870(v2, v24, &a2); v25 = sub_8786B0((int)"m_fRevisionFar", *((float *)v3 + 5)); v26 = *((_DWORD *)v2 + 3); a2 = v25; if ( v26 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v26 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v26, &a2); } //----- (008D2BF0) -------------------------------------------------------- int __thiscall sub_8D2BF0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9) { int result; // eax result = 0; if ( this[104] != this[13] ) return sub_91DC50((int)this, a2, a3, a4, a5, a6, a7, a8, a9); if ( !a3 ) result = sub_91DC50((int)this, a2, 0, a4, a5, a6, a7, a8, a9); return result; } //----- (008D2C40) -------------------------------------------------------- void __thiscall sub_8D2C40(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[24]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[24] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (008D2C90) -------------------------------------------------------- char __stdcall sub_8D2C90(_DWORD *a1) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // ecx int v4; // edi _DWORD *v5; // eax void *v7; // [esp+Ch] [ebp-10h] int v8; // [esp+18h] [ebp-4h] sub_91BE40(&v7); *(_DWORD *)v7 = 0; v1 = v7; v2 = *((_DWORD *)v7 + 1); v8 = 0; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[1] = 0; } sub_91A460(*((_DWORD **)v7 + 3), 1u, 4, 0); sub_91A460(*((_DWORD **)v7 + 3), 2u, 2, 0); sub_91A460(*((_DWORD **)v7 + 3), 3u, 0, 0); sub_91A460(*((_DWORD **)v7 + 3), 4u, 4, 0); sub_91A460(*((_DWORD **)v7 + 3), 5u, 2, 0); sub_91A460(*((_DWORD **)v7 + 3), 6u, 0, 0); sub_91A460(*((_DWORD **)v7 + 3), 0xBu, 0, 0); v3 = (_DWORD *)*((_DWORD *)v7 + 3); *((_BYTE *)v7 + 90) = 0; sub_91A460(v3, 0x18u, 0, 0); sub_91D830(a1, a1[5], v7); v4 = a1[24]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); a1[24] = 0; } if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 22, 3, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 7, 1, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 14, 1, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 27, 0, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 28, 0, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 137, 1, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 15, 1, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 25, 7, 0); if ( !a1[14] ) a1[14] = sub_91C760(); sub_91C5E0((_DWORD *)a1[14], 24, 16, 0); v5 = v7; v8 = -1; if ( v7 ) { --*((_DWORD *)v7 + 23); if ( !v5[23] ) sub_91BD60(v5); } return 1; } //----- (008D2F00) -------------------------------------------------------- char __thiscall sub_8D2F00(const void **this) { const void **v1; // esi int v2; // ST10_4 char *v3; // eax int v4; // edx int v5; // eax _DWORD *v6; // edi int v7; // ebx int v8; // ST10_4 char *v9; // eax int v10; // edx int v11; // eax _DWORD *v12; // edi int v13; // ebx v1 = this; v2 = (*(int (**)(void))(*(_DWORD *)this[9] + 100))(); v3 = (char *)sub_8D02C0(v1 + 69, (int)"PgAniLine.vsh"); v5 = sub_917800(v4, v3, (int)"PgAniLine", 0, 0, v2, 0, 0); v6 = v1[100]; v7 = v5; if ( v6 != (_DWORD *)v5 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); v1[100] = (const void *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v8 = (*(int (**)(void))(*(_DWORD *)v1[9] + 100))(); v9 = (char *)sub_8D02C0(v1 + 69, (int)"PgLine.vsh"); v11 = sub_917800(v10, v9, (int)"PgLine", 0, 0, v8, 0, 0); v12 = v1[101]; v13 = v11; if ( v12 != (_DWORD *)v11 ) { if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (*(void (__thiscall **)(_DWORD *, signed int))*v12)(v12, 1); v1[101] = (const void *)v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } return 1; } //----- (008D2FF0) -------------------------------------------------------- int __thiscall sub_8D2FF0(int this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { int v9; // eax const void *v10; // esi void *v11; // edi if ( *(_DWORD *)(this + 416) != *(_DWORD *)(this + 52) ) return sub_91E630((_DWORD **)this, a2, a3, a4, a5, a6, a7, a8, a9); if ( a3 ) { v9 = 0; if ( *(_WORD *)(a4 + 32) > 0u ) { do { v10 = (const void *)(*(_DWORD *)(this + 424) + (*(unsigned __int16 *)(*(_DWORD *)(a4 + 4) + 2 * (unsigned __int16)v9) << 6)); v11 = (void *)(*(_DWORD *)(this + 420) + ((unsigned __int16)v9++ << 6)); qmemcpy(v11, v10, 0x40u); } while ( (unsigned __int16)v9 < *(_WORD *)(a4 + 32) ); } } return sub_91E630((_DWORD **)this, a2, a3, a4, a5, a6, a7, a8, a9); } //----- (008D30A0) -------------------------------------------------------- int __thiscall sub_8D30A0(_DWORD *this) { int v1; // esi int v2; // ecx int v3; // ecx v1 = (int)this; v2 = this[100]; if ( v2 ) (*(void (**)(void))(*(_DWORD *)v2 + 88))(); v3 = *(_DWORD *)(v1 + 404); if ( v3 ) (*(void (**)(void))(*(_DWORD *)v3 + 88))(); return sub_91E880(v1); } //----- (008D30D0) -------------------------------------------------------- int __thiscall sub_8D30D0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ecx v1 = this; v2 = this[100]; if ( v2 ) (*(void (**)(void))(*(_DWORD *)v2 + 92))(); v3 = v1[101]; if ( v3 ) (*(void (**)(void))(*(_DWORD *)v3 + 92))(); return sub_91E8D0(v1); } //----- (008D3100) -------------------------------------------------------- void *__stdcall sub_8D3100(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x3FFFFFF || (result = operator new((_DWORD)a1 << 6)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008D3160) -------------------------------------------------------- char __thiscall sub_8D3160(_DWORD *this) { _DWORD *v1; // edi int *v2; // esi int v3; // ecx bool v4; // zf int v5; // eax int v6; // eax int v8; // [esp+Ch] [ebp-10h] int v9; // [esp+18h] [ebp-4h] v1 = this; v2 = sub_91DA90(&v8); v3 = v1[99]; v9 = 0; if ( v3 != *v2 ) { if ( v3 ) { v4 = (*(_DWORD *)(v3 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v3); } v5 = *v2; v1[99] = *v2; if ( v5 ) ++*(_DWORD *)(v5 + 104); } v6 = v8; v9 = -1; if ( v8 ) { --*(_DWORD *)(v8 + 104); if ( !*(_DWORD *)(v6 + 104) ) sub_91D6F0((_BYTE *)v6); } sub_8D2C90((_DWORD *)v1[99]); return 1; } //----- (008D3210) -------------------------------------------------------- void __cdecl sub_8D3210(int a1, void *a2, const void *a3) { if ( a2 ) qmemcpy(a2, a3, 0x40u); } //----- (008D3230) -------------------------------------------------------- char *__cdecl sub_8D3230(char *a1, char *a2, char *a3, int a4) { char *v4; // esi char *v5; // edi v4 = a1; if ( a1 == a2 ) return a3; v5 = a3; do { sub_8D3210(a4, v5, v4); v4 += 64; v5 += 64; } while ( v4 != a2 ); return v5; } //----- (008D3270) -------------------------------------------------------- char __thiscall sub_8D3270(const void **this, int a2) { const void **v2; // esi v2 = this; if ( !sub_917FB0((int)this, a2) || !sub_8D2F00(v2) ) return 0; sub_8D3160(v2); return 1; } //----- (008D32B0) -------------------------------------------------------- signed int __thiscall sub_8D32B0(_DWORD *this, _DWORD *a2, int a3, int a4, float a5, float a6, float *a7, int *a8) { _DWORD *v8; // esi signed int v9; // eax unsigned int v10; // ebx int *v11; // edx bool v12; // zf int v13; // edi int v14; // ebx _DWORD *v15; // ebx float *v16; // edi int v17; // eax int v18; // edi float *v19; // eax double v20; // st7 double v22; // st6 double v23; // st4 double v24; // st4 double v25; // st4 _DWORD *v26; // ecx _DWORD *v27; // eax _DWORD *v28; // esi int v29; // eax _DWORD *v30; // eax int v31; // ebx signed int v32; // [esp+10h] [ebp-10h] v8 = this; v9 = sub_91A2E0(this, (int)a2, a3, (_DWORD *)a4, (_DWORD *)LODWORD(a5), (_DWORD *)LODWORD(a6), (int)a7, (int)a8); v10 = v8[14]; v32 = v9; if ( v10 >= v8[18] ) sub_461380((int)(v8 + 16), (void *)(v10 + v8[21])); a8 = v8 + 99; sub_461550(v8 + 16, v10, v8 + 99); ++v8[14]; v11 = a8; v12 = a3 == 0; v8[104] = v8[14] - 1; v13 = *(_DWORD *)(*v11 + 80); a3 = *v11; if ( v12 ) v14 = v8[103]; else v14 = v8[102]; if ( v13 != v14 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(a3 + 80) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } a4 = *(_DWORD *)(LODWORD(a5) + 40); if ( a6 != 0.0 ) { v15 = *(_DWORD **)(LODWORD(a6) + 12); while ( v15 ) { v16 = (float *)v15[1]; v15 = (_DWORD *)*v15; if ( (*(int (__thiscall **)(float *))(*(_DWORD *)v16 + 116))(v16) == 1 ) { *((float *)v8 + 91) = v16[57]; *((float *)v8 + 92) = v16[58]; *((float *)v8 + 93) = v16[59]; *((float *)v8 + 94) = 1.0; } else if ( !(*(int (__thiscall **)(float *))(*(_DWORD *)v16 + 116))(v16) ) { *((float *)v8 + 95) = v16[57]; *((float *)v8 + 96) = v16[58]; *((float *)v8 + 97) = v16[59]; *((float *)v8 + 98) = 1.0; } } } v17 = sub_85AA60(a2, "PTSEV2"); v18 = v17; a2 = (_DWORD *)v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); if ( v18 && *(_BYTE *)(v18 + 12) ) { v8[83] = *(_DWORD *)(v18 + 28); v8[84] = *(_DWORD *)(v18 + 32); v8[85] = *(_DWORD *)(v18 + 36); v8[86] = *(_DWORD *)(v18 + 40); v19 = *(float **)(v18 + 52); if ( v19 ) { *(float *)&a3 = v19[35] - a7[9]; a5 = v19[36] - a7[10]; a6 = v19[37] - a7[11]; *(float *)&a3 = *(float *)&a3 * *(float *)&a3 + a5 * a5 + a6 * a6; *(float *)&a3 = sqrt(*(float *)&a3); v20 = *(float *)&a3; *((float *)v8 + 87) = *(float *)(v18 + 44) * *(float *)&a3; if ( *(float *)(v18 + 48) < v20 ) { v8[14] = v8[104]; sub_410C00(&a2); return 0; } v12 = *(_BYTE *)(v18 + 24) == 0; a3 = *(int *)(v18 + 16); a5 = *(float *)(v18 + 20); *(float *)&a3 = (v20 - *(float *)&a3) / (a5 - *(float *)&a3); v22 = *(float *)&a3; if ( !v12 && v22 >= 0.0 ) { v23 = *((float *)v8 + 95) + *((float *)v8 + 91); *(float *)&a3 = (1.0 - *((float *)v8 + 83)) * v22 + *((float *)v8 + 83); *((float *)v8 + 83) = v23 * *(float *)&a3; v24 = *((float *)v8 + 96) + *((float *)v8 + 92); *(float *)&a3 = (1.0 - *((float *)v8 + 84)) * v22 + *((float *)v8 + 84); *((float *)v8 + 84) = v24 * *(float *)&a3; v25 = *((float *)v8 + 97) + *((float *)v8 + 93); *(float *)&a3 = (1.0 - *((float *)v8 + 85)) * v22 + *((float *)v8 + 85); *((float *)v8 + 85) = v25 * *(float *)&a3; *((float *)v8 + 86) = (*((float *)v8 + 98) + *((float *)v8 + 94)) * *((float *)v8 + 86); } if ( *(_BYTE *)(v18 + 25) && v22 >= 0.0 ) *((float *)v8 + 87) = (1.0 - v22) * *((float *)v8 + 87); } else { *((float *)v8 + 87) = *(float *)(v18 + 44); } v26 = (_DWORD *)*a8; if ( *(_BYTE *)(v18 + 26) ) { v27 = sub_4615D0(v26, 0); v28 = v27; a3 = (int)v27; if ( v27 ) ++v27[23]; v29 = **(_DWORD **)(a4 + 40); if ( v29 ) sub_42AAF0(v28, *(_DWORD *)(v29 + 4)); else sub_42AAF0(v28, 0); } else { v30 = sub_4615D0(v26, 0); v28 = v30; a3 = (int)v30; if ( v30 ) ++v30[23]; v31 = v30[1]; if ( v31 ) { if ( !InterlockedDecrement((volatile LONG *)(v31 + 4)) && v31 ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); v28[1] = 0; } } if ( v28 ) { v12 = v28[23]-- == 1; if ( v12 ) sub_91BD60(v28); } } else { v8[14] = v8[104]; } if ( v18 ) { if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); } return v32; } //----- (008D3710) -------------------------------------------------------- void __cdecl sub_8D3710(char *a1, int a2, int a3, int a4) { int v4; // esi char *v5; // edi char v6; // [esp+4h] [ebp-40h] v4 = a2; if ( a2 ) { v5 = a1; do { sub_8D3210(a4, v5, &v6); v5 += 64; --v4; } while ( v4 ); } } //----- (008D3750) -------------------------------------------------------- char *__thiscall sub_8D3750(char **this, char *a2) { char **v2; // esi char *result; // eax char *v4; // ebx char *v5; // ST04_4 char *v6; // ST00_4 int v7; // edi int v8; // [esp+0h] [ebp-24h] void *v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v2 = this; result = a2; if ( (unsigned int)a2 > 0x3FFFFFF ) std::_Xlength_error("vector too long"); if ( (this[2] - *this) >> 6 < (unsigned int)a2 ) { v4 = (char *)sub_8D3100(a2); v5 = v2[1]; v6 = *v2; v9 = v4; v11 = 0; sub_8D3230(v6, v5, v4, (int)(v2 + 3)); v7 = v2[1] - *v2; if ( *v2 ) operator delete(*v2); result = &v4[64 * (_DWORD)a2]; v2[2] = result; v2[1] = &v4[v7 & 0xFFFFFFC0]; *v2 = v4; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008D3820) -------------------------------------------------------- char *__thiscall sub_8D3820(int this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) >> 6; if ( 0x3FFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (*(_DWORD *)(this + 8) - *(_DWORD *)this) >> 6; if ( (unsigned int)result > v4 ) { if ( 0x3FFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_8D3750((char **)this, v5); } return result; } //----- (008D3880) -------------------------------------------------------- void *sub_8D3880() { return &unk_BA65E8; } //----- (008D3890) -------------------------------------------------------- _DWORD *__thiscall sub_8D3890(_DWORD *this, void *a2) { _DWORD *v2; // esi int v3; // ecx bool v4; // zf int v5; // eax int v6; // eax int v7; // eax int v8; // eax void (__stdcall ***v10)(signed int); // [esp+24h] [ebp-10h] void (__stdcall ***v11)(signed int); // [esp+24h] [ebp-10h] void (__stdcall ***v12)(signed int); // [esp+24h] [ebp-10h] void (__stdcall ***v13)(signed int); // [esp+24h] [ebp-10h] v2 = this; sub_918D50(this); *v2 = &NsPgCatoonShader::`vftable'; v2[74] = 15; v2[73] = 0; *((_BYTE *)v2 + 276) = 0; v2[81] = 15; v2[80] = 0; *((_BYTE *)v2 + 304) = 0; v2[99] = 0; v2[100] = 0; v2[101] = 0; v2[102] = 0; v2[103] = 0; v2[106] = 0; v2[107] = 0; v2[108] = 0; v3 = v2[99]; if ( v3 ) { v4 = (*(_DWORD *)(v3 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v3); v2[99] = 0; } v5 = v2[100]; v10 = (void (__stdcall ***)(signed int))v5; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v10 ) (**v10)(1); v2[100] = 0; } v6 = v2[101]; v11 = (void (__stdcall ***)(signed int))v6; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v11 ) (**v11)(1); v2[101] = 0; } v7 = v2[102]; v12 = (void (__stdcall ***)(signed int))v7; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v12 ) (**v12)(1); v2[102] = 0; } v8 = v2[103]; v13 = (void (__stdcall ***)(signed int))v8; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v13 ) (**v13)(1); v2[103] = 0; } v2[104] = 0; *((float *)v2 + 83) = 0.0; *((float *)v2 + 84) = 0.0; *((float *)v2 + 85) = 0.0; *((float *)v2 + 87) = 0.0020000001; *((float *)v2 + 86) = 1.0; *((float *)v2 + 88) = 0.5; *((float *)v2 + 89) = 0.2; *((float *)v2 + 91) = 0.0; *((float *)v2 + 90) = 1.0; *((float *)v2 + 92) = 0.0; *((float *)v2 + 93) = 0.0; *((float *)v2 + 95) = 0.0; *((float *)v2 + 94) = 0.0; *((float *)v2 + 96) = 0.0; *((float *)v2 + 97) = 0.0; *((float *)v2 + 98) = 0.0; if ( !v2[10] ) v2[10] = sub_91C760(); v2[105] = operator new[](0x500u); sub_4018E0(v2 + 69, a2, strlen((const char *)a2)); if ( sub_6971E0((char *)v2 + 276, "\\", 0xFFFFFFFF, 1u) < v2[73] - 1 ) sub_40AB50(v2 + 69, 1u, 92); return v2; } // A40B24: using guessed type void *NsPgCatoonShader::`vftable'; //----- (008D3B70) -------------------------------------------------------- LONG __thiscall sub_8D3B70(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx bool v3; // zf int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // ecx v1 = this; *this = &NsPgCatoonShader::`vftable'; v2 = this[99]; if ( v2 ) { v3 = (*(_DWORD *)(v2 + 104))-- == 1; if ( v3 ) sub_91D6F0((_BYTE *)v2); v1[99] = 0; } v4 = v1[100]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[100] = 0; } v5 = v1[101]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[101] = 0; } v6 = v1[102]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[102] = 0; } v7 = v1[103]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[103] = 0; } if ( v1[105] ) operator delete[]((void *)v1[105]); if ( v1[106] ) operator delete((void *)v1[106]); v1[106] = 0; v1[107] = 0; v1[108] = 0; v8 = v1[103]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[102]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[101]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v11 = v1[100]; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v12 = v1[99]; if ( v12 ) { v3 = (*(_DWORD *)(v12 + 104))-- == 1; if ( v3 ) sub_91D6F0((_BYTE *)v12); } if ( v1[81] >= 0x10u ) operator delete((void *)v1[76]); v1[81] = 15; v1[80] = 0; *((_BYTE *)v1 + 304) = 0; if ( v1[74] >= 0x10u ) operator delete((void *)v1[69]); v1[74] = 15; v1[73] = 0; *((_BYTE *)v1 + 276) = 0; return sub_918270(v1); } // A40B24: using guessed type void *NsPgCatoonShader::`vftable'; //----- (008D3E00) -------------------------------------------------------- char __thiscall sub_8D3E00(int this, _DWORD *a2) { int v2; // eax _DWORD *v3; // esi int v4; // edi int v5; // ebx _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // edi int v9; // ecx int v10; // edi int v11; // ecx int v12; // ebx int v13; // edi int v14; // ebx _DWORD *v15; // eax _DWORD *v16; // ebx int v17; // edi int v18; // ecx int v19; // edi int v20; // ecx float v22; // [esp+10h] [ebp-188h] float v23; // [esp+14h] [ebp-184h] float v24; // [esp+18h] [ebp-180h] float v25; // [esp+1Ch] [ebp-17Ch] float v26; // [esp+20h] [ebp-178h] float v27; // [esp+24h] [ebp-174h] float v28; // [esp+28h] [ebp-170h] float v29; // [esp+2Ch] [ebp-16Ch] float v30; // [esp+30h] [ebp-168h] float v31; // [esp+34h] [ebp-164h] float v32; // [esp+38h] [ebp-160h] float v33; // [esp+3Ch] [ebp-15Ch] _DWORD *v34; // [esp+40h] [ebp-158h] int v35; // [esp+44h] [ebp-154h] int v36; // [esp+48h] [ebp-150h] void *v37; // [esp+4Ch] [ebp-14Ch] void *v38; // [esp+50h] [ebp-148h] int v39; // [esp+60h] [ebp-138h] unsigned int v40; // [esp+64h] [ebp-134h] void *v41; // [esp+6Ch] [ebp-12Ch] float v42; // [esp+78h] [ebp-120h] float v43; // [esp+7Ch] [ebp-11Ch] float v44; // [esp+80h] [ebp-118h] float v45; // [esp+84h] [ebp-114h] char v46; // [esp+88h] [ebp-110h] int v47; // [esp+194h] [ebp-4h] v34 = a2; v2 = a2[47]; v3 = (_DWORD *)this; v4 = *(_DWORD *)(*(_DWORD *)(this + 396) + 96); v37 = *(void **)(this + 396); if ( v2 ) { v5 = *(_DWORD *)(this + 400); if ( v4 != v5 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v37 + 24) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = operator new(0x3Cu); v37 = v6; v7 = 0; v47 = 0; if ( v6 ) v7 = sub_930C00(v6, v3[5]); v8 = v3[102]; v47 = -1; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v3[102] = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } v9 = v3[102]; if ( v9 ) { v10 = (unsigned __int8)byte_BA6F3B | 0x10000000; (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 4))( "ViewProjTranspose", (unsigned __int8)byte_BA6F3D | 0x20000000, 0, 10, 4, 0, 0, 0, 0, 0); v11 = v3[102]; v30 = 1.0; v31 = -1.0; v32 = 0.0; v12 = 0; v33 = 1020.01; v22 = 0.00390625; v23 = 256.0; v24 = 4.0; v25 = 1020.01; (*(void (__stdcall **)(const char *, int, _DWORD, _DWORD, signed int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)v11 + 4))( "Pg_Ani_Constants0", v10, 0, 0, 1, 0, 16, 4, &v30, 1); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)v3[102] + 4))( "Pg_Ani_Constants1", v10, 0, 1, 1, 0, 16, 4, &v22, 1); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[102] + 4))( "Pg_Ani_Constants3", v10, 0, 3, 1, 0, 16, 4, v3 + 83, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[102] + 4))( "Pg_Ani_Constants4", v10, 0, 4, 1, 0, 16, 4, v3 + 87, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[102] + 4))( "Pg_Ani_Constants5", v10, 0, 5, 1, 0, 16, 4, v3 + 91, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[102] + 4))( "Pg_Ani_Constants6", v10, 0, 6, 1, 0, 16, 4, v3 + 95, 0); v13 = (unsigned __int8)byte_BA6F3D | 0x10000000; v40 = 15; v39 = 0; LOBYTE(v38) = 0; sub_4018E0(&v38, "Pg_Ani_BoneMatrix", 0x11u); v47 = 1; v36 = 0; v35 = 14; do { _itoa(v36, &v46, 10); sub_427A80(&v41, (int)&v38, &v46); LOBYTE(v47) = 2; if ( LODWORD(v44) < 0x10 ) v37 = &v41; else v37 = v41; (*(void (__stdcall **)(void *, int, _DWORD, int, signed int, _DWORD, signed int, signed int, int, _DWORD))(*(_DWORD *)v3[102] + 4))( v37, v13, 0, v35, 4, 0, 64, 4, v12 + v3[105], 0); LOBYTE(v47) = 1; if ( LODWORD(v44) >= 0x10 ) operator delete(v41); ++v36; v12 += 64; v35 += 4; } while ( v35 < 94 ); v47 = -1; if ( v40 >= 0x10 ) operator delete(v38); } } else { v14 = *(_DWORD *)(this + 404); if ( v4 != v14 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v37 + 24) = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v15 = operator new(0x3Cu); v37 = v15; v47 = 3; if ( v15 ) v16 = sub_930C00(v15, v3[5]); else v16 = 0; v17 = v3[103]; v47 = -1; if ( (_DWORD *)v17 != v16 ) { if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v3[103] = v16; if ( v16 ) InterlockedIncrement(v16 + 1); } v18 = v3[103]; if ( v18 ) { v19 = (unsigned __int8)byte_BA6F3B | 0x10000000; (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v18 + 4))( "WorldViewProjTranspose", (unsigned __int8)byte_BA6F3D | 0x20000000, 0, 10, 4, 0, 0, 0, 0, 0); v20 = v3[103]; v26 = 1.0; v27 = -1.0; v28 = 0.0; v29 = 1020.01; v42 = 0.00390625; v43 = 256.0; v44 = 4.0; v45 = 1020.01; (*(void (__stdcall **)(const char *, int, _DWORD, _DWORD, signed int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)v20 + 4))( "Pg_Constants0", v19, 0, 0, 1, 0, 16, 4, &v26, 1); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, float *, signed int))(*(_DWORD *)v3[103] + 4))( "Pg_Constants1", v19, 0, 1, 1, 0, 16, 4, &v42, 1); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[103] + 4))( "Pg_Constants3", v19, 0, 3, 1, 0, 16, 4, v3 + 83, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[103] + 4))( "Pg_Constants4", v19, 0, 4, 1, 0, 16, 4, v3 + 87, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[103] + 4))( "Pg_Ani_Constants5", v19, 0, 5, 1, 0, 16, 4, v3 + 91, 0); (*(void (__stdcall **)(const char *, int, _DWORD, signed int, signed int, _DWORD, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)v3[103] + 4))( "Pg_Ani_Constants6", v19, 0, 6, 1, 0, 16, 4, v3 + 95, 0); } } return sub_91EF90(v3, v34); } // BA6F3B: using guessed type char byte_BA6F3B; // BA6F3D: using guessed type char byte_BA6F3D; //----- (008D4420) -------------------------------------------------------- int __thiscall sub_8D4420(int *this, unsigned int a2) { int v2; // ebx int result; // eax int v4; // edx unsigned int v5; // ecx int v10; // [esp+10h] [ebp+8h] v2 = (int)this; result = this[1]; v4 = *this; v5 = (this[1] - *this) >> 6; if ( v5 <= a2 ) { if ( v5 < a2 ) { sub_8D3820(v2, a2 - v5); sub_8D3710(*(char **)(v2 + 4), a2 - ((*(_DWORD *)(v2 + 4) - *(_DWORD *)v2) >> 6), 0, v2 + 12); result = *(_DWORD *)(v2 + 4); *(_DWORD *)(v2 + 4) = result + ((a2 - ((*(_DWORD *)(v2 + 4) - *(_DWORD *)v2) >> 6)) << 6); } } else if ( v4 + (a2 << 6) != result ) { v10 = v4 + (a2 << 6); result = v10; *(_DWORD *)(v2 + 4) = v10; } return result; } // 8D4420: could not find valid save-restore pair for edi //----- (008D44C0) -------------------------------------------------------- void *__thiscall sub_8D44C0(void *this, char a2) { void *v2; // esi v2 = this; sub_8D3B70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D44F0) -------------------------------------------------------- signed int __thiscall sub_8D44F0(_DWORD *this, int a2, int a3, int a4, int a5, unsigned int a6, float *a7, int a8) { int v8; // ebx float *v9; // ecx float *v10; // eax unsigned int v11; // esi unsigned int v12; // edx int v13; // ebx int v14; // ebx char v16; // [esp+8h] [ebp-170h] unsigned int v17; // [esp+3Ch] [ebp-13Ch] int v18; // [esp+40h] [ebp-138h] float *v19; // [esp+44h] [ebp-134h] int v20; // [esp+48h] [ebp-130h] int v21; // [esp+4Ch] [ebp-12Ch] unsigned int v22; // [esp+50h] [ebp-128h] int v23; // [esp+54h] [ebp-124h] _DWORD *v24; // [esp+58h] [ebp-120h] int v25; // [esp+5Ch] [ebp-11Ch] int v26; // [esp+60h] [ebp-118h] char v27; // [esp+64h] [ebp-114h] char v28; // [esp+98h] [ebp-E0h] char v29; // [esp+CCh] [ebp-ACh] float v30; // [esp+100h] [ebp-78h] float v31; // [esp+104h] [ebp-74h] float v32; // [esp+108h] [ebp-70h] float v33; // [esp+10Ch] [ebp-6Ch] float v34; // [esp+110h] [ebp-68h] float v35; // [esp+114h] [ebp-64h] float v36; // [esp+118h] [ebp-60h] float v37; // [esp+11Ch] [ebp-5Ch] float v38; // [esp+120h] [ebp-58h] float v39; // [esp+124h] [ebp-54h] float v40; // [esp+128h] [ebp-50h] float v41; // [esp+12Ch] [ebp-4Ch] float v42; // [esp+130h] [ebp-48h] float v43; // [esp+134h] [ebp-44h] float v44; // [esp+138h] [ebp-40h] float v45; // [esp+13Ch] [ebp-3Ch] float v46; // [esp+140h] [ebp-38h] float v47; // [esp+144h] [ebp-34h] float v48; // [esp+148h] [ebp-30h] float v49; // [esp+14Ch] [ebp-2Ch] float v50; // [esp+150h] [ebp-28h] float v51; // [esp+154h] [ebp-24h] float v52; // [esp+158h] [ebp-20h] float v53; // [esp+15Ch] [ebp-1Ch] float v54; // [esp+160h] [ebp-18h] float v55; // [esp+164h] [ebp-14h] float v56; // [esp+168h] [ebp-10h] float v57; // [esp+16Ch] [ebp-Ch] float v58; // [esp+170h] [ebp-8h] v24 = this; v8 = a3; v21 = a2; v18 = a4; v25 = a3; v23 = a5; v22 = a6; v19 = a7; v20 = a8; if ( a3 ) { v9 = (float *)(*(_DWORD *)(a3 + 16) + 104); v26 = *(_DWORD *)(a3 + 8); sub_87C3F0(v9, v26, &v46); v10 = sub_85BDC0(a7, (float *)&v29, (float *)(*(_DWORD *)(a3 + 8) + 12)); qmemcpy(&v27, sub_85BDC0(v10, (float *)&v16, &v46), 0x34u); v11 = *(_DWORD *)(v26 + 64); v12 = (v24[107] - v24[106]) >> 6; v17 = v11; if ( v11 > v12 ) sub_8D4420(v24 + 106, v11); v26 = 0; if ( v11 ) { v13 = 0; do { qmemcpy( &v28, sub_85BDC0((float *)&v27, (float *)&v29, (float *)(*(_DWORD *)(*(_DWORD *)(v25 + 20) + 4 * v13) + 104)), 0x34u); qmemcpy( &v46, sub_85BDC0((float *)&v28, (float *)&v29, (float *)(*(_DWORD *)(*(_DWORD *)(v25 + 8) + 68) + 76 * v13)), 0x34u); v30 = v46 * v58; v31 = v49 * v58; v14 = v24[106] + (v13 << 6); v32 = v52 * v58; v34 = v47 * v58; v35 = v50 * v58; v36 = v53 * v58; v38 = v48 * v58; v39 = v51 * v58; v40 = v58 * v54; v42 = v55; v43 = v56; v44 = v57; v33 = 0.0; v37 = 0.0; v41 = 0.0; v45 = 1.0; D3DXMatrixTranspose(v14, &v30); v13 = (unsigned __int16)++v26; } while ( (unsigned __int16)v26 < v17 ); v8 = v25; } } return sub_918310((_DWORD **)v24, v21, v8, v18, v23, v22, (int)v19, v20); } // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); //----- (008D4750) -------------------------------------------------------- int __thiscall sub_8D4750(_DWORD *this, float a2) { _DWORD *v2; // esi int result; // eax unsigned int v4; // edi v2 = this; result = (this[6] - this[5]) >> 2; v4 = 0; if ( result ) { do result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2[5] + 4 * v4++) + 60))(LODWORD(a2)); while ( v4 < (v2[6] - v2[5]) >> 2 ); } return result; } //----- (008D4790) -------------------------------------------------------- _DWORD *__thiscall sub_8D4790(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NsEffect::`vftable'; this[5] = 0; this[6] = 0; this[7] = 0; *((float *)this + 2) = 0.0; *((float *)this + 3) = 0.0; this[1] = 0; *((float *)this + 4) = 0.0; return result; } // A40CB0: using guessed type void *NsEffect::`vftable'; //----- (008D47C0) -------------------------------------------------------- void __thiscall sub_8D47C0(void *this) { _DWORD *v1; // esi v1 = this; *(_DWORD *)this = &NsEffect::`vftable'; *((_DWORD *)this + 1) = 0; if ( *((_DWORD *)this + 5) ) operator delete(*((void **)this + 5)); v1[5] = 0; v1[6] = 0; v1[7] = 0; } // A40CB0: using guessed type void *NsEffect::`vftable'; //----- (008D47F0) -------------------------------------------------------- _DWORD *__thiscall sub_8D47F0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NsEffect::`vftable'; *((_DWORD *)this + 1) = 0; if ( *((_DWORD *)this + 5) ) operator delete(*((void **)this + 5)); v2[5] = 0; v2[6] = 0; v2[7] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A40CB0: using guessed type void *NsEffect::`vftable'; //----- (008D4840) -------------------------------------------------------- void __thiscall sub_8D4840(int this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ebx unsigned int v4; // eax int v5; // esi _BYTE *v6; // edx int v7; // ecx int v8; // edi unsigned int v9; // eax unsigned int v10; // eax unsigned int v11; // ecx char *v12; // ecx _DWORD *v13; // eax int v14; // ecx unsigned int v15; // eax unsigned int v16; // eax unsigned int v17; // ecx char *v18; // ecx int *v19; // eax int v20; // eax int v21; // eax _DWORD *v22; // esi int v23; // eax unsigned int v24; // eax int v25; // esi int j; // eax _DWORD *v27; // esi int v28; // eax int i; // [esp+4h] [ebp-Ch] int v30; // [esp+8h] [ebp-8h] int v31; // [esp+Ch] [ebp-4h] v2 = a2; v31 = this; if ( a2 ) { v3 = a2[3]; for ( i = v3; v3; i = v3 ) { v30 = v3; if ( v3 ) { if ( *(float *)(this + 8) > (double)*(float *)(v3 + 20) ) *(float *)(this + 8) = *(float *)(v3 + 20); if ( *(float *)(this + 12) < (double)*(float *)(v3 + 24) ) *(float *)(this + 12) = *(float *)(v3 + 24); v4 = *(_DWORD *)(this + 24); v5 = this + 20; if ( (unsigned int)&v30 >= v4 || (v6 = *(_BYTE **)v5, *(_DWORD *)v5 > (unsigned int)&v30) ) { v14 = *(_DWORD *)(this + 28); if ( v4 == v14 ) { v15 = (signed int)(v4 - *(_DWORD *)v5) >> 2; if ( v15 > 0x3FFFFFFE ) LABEL_42: std::_Xlength_error("vector too long"); v16 = v15 + 1; v17 = (v14 - *(_DWORD *)v5) >> 2; if ( v16 > v17 ) { if ( 0x3FFFFFFF - (v17 >> 1) >= v17 ) v18 = (char *)((v17 >> 1) + v17); else v18 = 0; if ( (unsigned int)v18 < v16 ) v18 = (char *)v16; sub_74E360((const void **)v5, v18); v2 = a2; } } v19 = *(int **)(v5 + 4); if ( v19 ) *v19 = v3; } else { v7 = *(_DWORD *)(this + 28); v8 = ((char *)&v30 - v6) >> 2; if ( v4 == v7 ) { v9 = (signed int)(v4 - (_DWORD)v6) >> 2; if ( v9 > 0x3FFFFFFE ) goto LABEL_42; v10 = v9 + 1; v11 = (v7 - (signed int)v6) >> 2; if ( v10 > v11 ) { if ( 0x3FFFFFFF - (v11 >> 1) >= v11 ) v12 = (char *)((v11 >> 1) + v11); else v12 = 0; if ( (unsigned int)v12 < v10 ) v12 = (char *)v10; sub_74E360((const void **)v5, v12); v3 = i; } } v13 = *(_DWORD **)(v5 + 4); if ( v13 ) *v13 = *(_DWORD *)(*(_DWORD *)v5 + 4 * v8); v2 = a2; } *(_DWORD *)(v5 + 4) += 4; this = v31; *(_WORD *)(v3 + 8) = *(_WORD *)(v3 + 8) & 0xFFF7 | 1; } v3 = *(_DWORD *)(v3 + 52); } v20 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v20 ) { while ( (char *)v20 != dword_BA457C ) { v20 = *(_DWORD *)(v20 + 4); if ( !v20 ) goto LABEL_38; } v22 = (_DWORD *)v2[40]; while ( v2[42] && v22 ) { v23 = v22[2]; v22 = (_DWORD *)*v22; if ( v23 ) sub_8D4840(v23); } } LABEL_38: v21 = (*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); if ( v21 ) { while ( (char *)v21 != dword_BA455C ) { v21 = *(_DWORD *)(v21 + 4); if ( !v21 ) return; } v24 = v2[47]; v25 = 0; if ( v24 ) { if ( v24 > 0 ) goto LABEL_51; for ( j = 0; ; j = *(_DWORD *)(v2[45] + 4 * v25) ) { sub_8D4840(j); if ( v2[47] <= (unsigned int)++v25 ) break; LABEL_51: ; } } v27 = (_DWORD *)v2[51]; while ( v2[53] && v27 ) { v28 = v27[2]; v27 = (_DWORD *)*v27; if ( v28 ) sub_8D4840(v28); } } } } //----- (008D4A70) -------------------------------------------------------- void __thiscall sub_8D4A70(_DWORD *this, _DWORD *a2) { int v2; // esi v2 = (int)this; sub_4E6D30(this + 5, 0); *(float *)(v2 + 8) = 3.4028235e38; *(float *)(v2 + 12) = 0.0; *(float *)(v2 + 16) = 0.0; *(_DWORD *)(v2 + 4) = a2; sub_8D4840(v2, a2); } //----- (008D4AB0) -------------------------------------------------------- signed int __stdcall sub_8D4AB0(int a1, float *a2, float *a3, float *a4, float *a5, float *a6) { signed int v6; // ebx float v7; // ST28_4 signed int v8; // edx float v9; // ST28_4 float *v10; // esi float v11; // ST28_4 float v12; // ST0C_4 float v13; // ST10_4 float v14; // ST14_4 double v15; // st5 double v16; // st4 double v17; // st3 double v18; // rt0 float v19; // ST28_4 double v20; // st2 float v21; // ST28_4 double v22; // st5 float v23; // ST28_4 double v24; // st3 double v25; // st2 double v26; // rt0 double v27; // st2 double v28; // st3 float v29; // ST24_4 float v30; // ST20_4 double v31; // st3 float v33; // ST28_4 double v34; // rt1 double v35; // st7 float *v36; // eax float v37; // ST28_4 float v38; // edx double v39; // st7 signed int v40; // [esp+Ch] [ebp-24h] float v41; // [esp+14h] [ebp-1Ch] float v42; // [esp+18h] [ebp-18h] float v43; // [esp+18h] [ebp-18h] float v44; // [esp+20h] [ebp-10h] float v45; // [esp+24h] [ebp-Ch] float v46; // [esp+28h] [ebp-8h] v6 = -1; v7 = fabs(a2[13]); v44 = v7; v40 = -1; v8 = 0; v9 = fabs(a2[14]); v10 = a2 + 6; v45 = v9; v11 = fabs(a2[15]); v46 = v11; v15 = 0.0; v16 = (float)-3.4028235e38; v17 = (float)3.4028235e38; while ( 1 ) { v12 = a2[1] - *a3; v13 = a2[2] - a3[1]; v14 = a2[3] - a3[2]; v42 = v13 * *(v10 - 1) + v12 * *(v10 - 2) + v14 * *v10; v19 = *a4 * *(v10 - 2) + *(v10 - 1) * a4[1] + a4[2] * *v10; v20 = v19; v21 = fabs(v19); if ( v21 <= 0.0000001000000011686097 ) { v33 = fabs(v42); if ( *(&v44 + v8) < (double)v33 ) return 0; v34 = v17; v31 = v15; v22 = v34; } else { v22 = v17; v23 = 1.0 / v20; v41 = (*(&v44 + v8) + v42) * v23; v43 = v23 * (v42 - *(&v44 + v8)); v24 = v41; v25 = v43; if ( v43 < (double)v41 ) { v24 = v43; v25 = v41; } v26 = v25; v27 = v24; v28 = v26; if ( v27 > v16 ) { v40 = v8; v29 = v27; v16 = v29; } if ( v28 < v22 ) { v6 = v8; v30 = v28; v22 = v30; } if ( v16 > v22 ) return 0; v31 = 0.0; if ( v22 < 0.0 ) return 0; } ++v8; v10 += 3; if ( v8 >= 3 ) break; v18 = v31; v17 = v22; v15 = v18; } if ( v16 <= v31 ) { v35 = v31; *a5 = v22; if ( v6 == -1 ) return 0; v36 = &a2[3 * v6 + 4]; } else { v35 = v31; *a5 = v16; v36 = &a2[3 * v40 + 4]; } *a6 = *v36; a6[1] = v36[1]; a6[2] = v36[2]; v37 = *a6 * *a4 + a6[1] * a4[1] + a6[2] * a4[2]; if ( v35 < v37 ) { v44 = -*a6; v45 = -a6[1]; v38 = v45; v39 = a6[2]; *a6 = v44; a6[1] = v38; v46 = -v39; a6[2] = v46; } return 1; } //----- (008D4D50) -------------------------------------------------------- char __stdcall sub_8D4D50(int a1, float *a2, float *a3, float *a4, float *a5) { long double v5; // st4 char result; // al double v7; // st7 double v8; // st5 float v9; // [esp+0h] [ebp-Ch] float v10; // [esp+4h] [ebp-8h] float v11; // [esp+8h] [ebp-4h] float v12; // [esp+18h] [ebp+Ch] float v13; // [esp+1Ch] [ebp+10h] float v14; // [esp+1Ch] [ebp+10h] float v15; // [esp+1Ch] [ebp+10h] float v16; // [esp+1Ch] [ebp+10h] float v17; // [esp+1Ch] [ebp+10h] v9 = *a3 - a2[1]; v10 = a3[1] - a2[2]; v11 = a3[2] - a2[3]; v12 = a2[4]; v13 = v11 * v11 + v9 * v9 + v10 * v10; v5 = v13; v14 = v13 - v12 * v12; if ( v14 > 0.0 ) { v7 = v14; v15 = v11 * a4[2] + v10 * a4[1] + v9 * *a4; if ( v15 >= 0.0 || (v8 = v15 * v15, v16 = a4[2] * a4[2] + *a4 * *a4 + a4[1] * a4[1], v8 < v7 * v16) ) { result = 0; } else { v17 = sqrt(v5); result = 1; *a5 = v17 - v12; } } else { *a5 = 0.0; result = 1; } return result; } //----- (008D4E80) -------------------------------------------------------- void *__thiscall sub_8D4E80(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A40CBC: using guessed type void *NiTArray::`vftable'; //----- (008D4EB0) -------------------------------------------------------- float *__thiscall sub_8D4EB0(float *this, int a2) { float *v2; // esi int v3; // edi int v4; // edi int v5; // eax v2 = this; *this = 0.0; this[1] = 0.0; this[13] = 0.0; this[14] = 0.0; this[15] = 0.0; this[16] = 0.0; v3 = *(_DWORD *)this; if ( *(_DWORD *)this != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)v2 = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v4 = *((_DWORD *)v2 + 1); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v2[1] = 0.0; } v2[17] = -6.8056469e38/*NaN*/; *((_DWORD *)v2 + 2) = dword_BA45C0; *((_DWORD *)v2 + 3) = dword_BA45C4; v5 = dword_BA45C8; v2[5] = 0.0; *((_DWORD *)v2 + 4) = v5; v2[6] = 0.0; v2[7] = 0.0; *((_DWORD *)v2 + 8) = dword_BA4828; *((_DWORD *)v2 + 9) = dword_BA482C; *((_DWORD *)v2 + 10) = dword_BA45C0; *((_DWORD *)v2 + 11) = dword_BA45C4; *((_DWORD *)v2 + 12) = dword_BA45C8; *((_DWORD *)v2 + 13) = dword_ABD508; *((_DWORD *)v2 + 14) = dword_ABD50C; *((_DWORD *)v2 + 15) = dword_ABD510; *((_DWORD *)v2 + 16) = dword_ABD514; return v2; } // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (008D4FF0) -------------------------------------------------------- int __thiscall sub_8D4FF0(int this) { int v1; // esi int v2; // edi v1 = this; *(_DWORD *)(this + 24) = 0; *(_DWORD *)(this + 28) = &NiTArray::`vftable'; *(_DWORD *)(this + 36) = 0; *(_DWORD *)(this + 48) = 1; *(_DWORD *)(this + 40) = 0; *(_DWORD *)(this + 44) = 0; *(_DWORD *)(this + 32) = 0; *(_DWORD *)(this + 4) = 0; *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 1; *(_DWORD *)(this + 16) = 1; *(_WORD *)(this + 20) = 1; v2 = *(_DWORD *)(this + 24); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(v1 + 24) = 0; } *(_DWORD *)(v1 + 56) = 0; *(float *)v1 = 0.0; *(_DWORD *)(v1 + 52) = 0; return v1; } // A40CBC: using guessed type void *NiTArray::`vftable'; //----- (008D50A0) -------------------------------------------------------- char __thiscall sub_8D50A0(_DWORD *this, int a2, int a3, _DWORD *a4) { int v4; // eax char v5; // bl int v7; // eax v4 = a4[59]; v5 = 0; if ( v4 >= 0 ) { if ( this[1] == 1 && this[2] == 1 && this[11] && this[3] != 2 ) return 1; if ( v4 >= 0 && v4 < a4[47] ) { v7 = *(_DWORD *)(a4[45] + 4 * v4); if ( v7 ) { if ( sub_8D62B0((int)this, (float *)a2, (float *)a3, v7) ) v5 = 1; } } } return v5; } //----- (008D5110) -------------------------------------------------------- int *__thiscall sub_8D5110(void *this, char a2) { int *v2; // edi int v3; // esi int v4; // esi v2 = (int *)this; v3 = *((_DWORD *)this + 1); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = *v2; if ( *v2 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D51C0) -------------------------------------------------------- unsigned int __thiscall sub_8D51C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ecx unsigned int result; // eax unsigned int v5; // edi _DWORD *v6; // ecx int v7; // eax v2 = this; v3 = a2; if ( !*a2 ) return -1; v5 = v2[3]; result = 0; if ( v5 ) { v6 = (_DWORD *)v2[1]; while ( *v6 ) { ++result; ++v6; if ( result >= v5 ) { v3 = a2; goto LABEL_8; } } *(_DWORD *)(v2[1] + 4 * result) = *a2; ++v2[4]; } else { LABEL_8: if ( v5 < v2[2] || (sub_8237A0(v2, v5 + v2[5]), v3 = a2, v5 < v2[2]) ) { if ( v5 < v2[3] ) { if ( *v3 ) { v7 = v2[1]; if ( !*(_DWORD *)(v7 + 4 * v5) ) { ++v2[4]; *(_DWORD *)(v7 + 4 * v5) = *v3; return v5; } } else if ( *(_DWORD *)(v2[1] + 4 * v5) ) { --v2[4]; } } else { v2[3] = v5 + 1; if ( *v3 ) { ++v2[4]; *(_DWORD *)(v2[1] + 4 * v5) = *v3; return v5; } } *(_DWORD *)(v2[1] + 4 * v5) = *v3; } result = v5; } return result; } //----- (008D5280) -------------------------------------------------------- void __thiscall sub_8D5280(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // eax unsigned int v3; // ecx int *v4; // edi int v5; // eax int v6; // eax int v7; // esi int v8; // esi int v9; // [esp+14h] [ebp-10h] v1 = this; v2 = this[10]; if ( v2 ) { v3 = 0; v9 = 0; if ( v2 ) { if ( v2 > 0 ) goto LABEL_5; v4 = 0; while ( 1 ) { if ( v4 ) { v7 = v4[1]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = *v4; if ( *v4 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); operator delete(v4); v3 = v9; } v9 = ++v3; if ( v3 >= v1[10] ) break; LABEL_5: v5 = v1[8]; v4 = *(int **)(v5 + 4 * v3); *(_DWORD *)(v5 + 4 * v3) = 0; if ( v4 ) --v1[11]; v6 = v1[10] - 1; if ( v3 == v6 ) v1[10] = v6; } } } } //----- (008D5370) -------------------------------------------------------- char __thiscall sub_8D5370(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // ebx int v5; // eax float *v6; // eax float *v7; // eax char result; // al _DWORD *v9; // edi int v10; // eax unsigned int v11; // eax unsigned int v12; // esi int v13; // edx v4 = this; if ( this[1] != 1 || (v5 = this[3], v5 == 2) || v5 ) { v9 = (_DWORD *)a4; if ( a4 && (v10 = (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 4))(a4)) != 0 ) { while ( (char *)v10 != dword_BA4A58 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_12; } result = sub_8D50A0(v4, a2, (int)a3, v9); } else { LABEL_12: v11 = v9[47]; v12 = 0; HIBYTE(a4) = 0; if ( v11 ) { while ( v4[1] != 1 || v4[2] != 1 || !v4[11] ) { if ( v11 > v12 ) { v13 = v9[45]; if ( *(_DWORD *)(v13 + 4 * v12) ) { if ( sub_8D62B0((int)v4, (float *)a2, (float *)a3, *(_DWORD *)(v13 + 4 * v12)) ) HIBYTE(a4) = 1; } } v11 = v9[47]; if ( ++v12 >= v11 ) goto LABEL_21; } result = 1; } else { LABEL_21: result = HIBYTE(a4); } } } else { v6 = (float *)operator new(0x48u); if ( v6 ) v7 = sub_8D4EB0(v6, a4); else v7 = 0; a4 = (int)v7; v4[13] = v7; sub_8D51C0(v4 + 7, &a4); result = 1; } return result; } //----- (008D54D0) -------------------------------------------------------- signed int __thiscall sub_8D54D0(float *this, float *a2, float *a3, _DWORD *a4, int a5) { double *v5; // ST14_4 _DWORD *v6; // eax double *v7; // ST14_4 _DWORD *v8; // eax int v9; // esi float v10; // ecx bool v11; // zf float *v12; // esi double v13; // st7 float v14; // eax float *v15; // eax double v16; // st7 double v17; // st6 double v18; // st7 double v19; // st6 double v20; // st6 double v21; // st6 int v22; // ecx float v23; // edx float v24; // eax float *v25; // eax double v26; // st7 double v27; // st6 double v28; // st7 float v29; // edx double v30; // st6 double v31; // st6 double *v32; // ST14_4 _DWORD *v33; // eax double *v34; // ST14_4 _DWORD *v35; // eax char *v36; // esi signed int v37; // edi float v38; // eax float *v39; // esi signed int v40; // ebx double *v41; // eax float v42; // eax float v43; // ecx signed int v44; // esi int v46; // eax double v47; // [esp+2Ch] [ebp-F0h] double v48; // [esp+34h] [ebp-E8h] float *v49; // [esp+3Ch] [ebp-E0h] int v50; // [esp+40h] [ebp-DCh] void *v51; // [esp+44h] [ebp-D8h] void *v52; // [esp+48h] [ebp-D4h] void *v53; // [esp+4Ch] [ebp-D0h] char v54; // [esp+53h] [ebp-C9h] char v55; // [esp+54h] [ebp-C8h] void **v56; // [esp+84h] [ebp-98h] char v57; // [esp+88h] [ebp-94h] double v58[5]; // [esp+8Ch] [ebp-90h] float v59; // [esp+B8h] [ebp-64h] float v60; // [esp+BCh] [ebp-60h] float v61; // [esp+C0h] [ebp-5Ch] char v62; // [esp+C4h] [ebp-58h] float v63; // [esp+D0h] [ebp-4Ch] float v64; // [esp+D4h] [ebp-48h] float v65; // [esp+D8h] [ebp-44h] char v66[48]; // [esp+DCh] [ebp-40h] int v67; // [esp+118h] [ebp-4h] v49 = this; v52 = a3; v50 = a5; sub_8E48C0(&v55); v5 = sub_8E3E00((double *)&v62, *a3, a3[1], a3[2]); v6 = (_DWORD *)sub_8E48E0(&v55); sub_8E3DD0(v6, v5); v7 = sub_8E3E00((double *)&v62, *a2, a2[1], a2[2]); sub_8E5020(); sub_8E3DD0(v8, v7); v9 = a4[12]; v10 = 0.0; v11 = a4[10] == 2; v54 = 0; v51 = 0; if ( v11 && v9 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9) == 1 ) { v56 = &NiBoxBV::`vftable'; qmemcpy(&v57, (const void *)(v9 + 4), 0x3Cu); v12 = (float *)v52; v59 = *v49 + v59; v60 = *v49 + v60; v13 = *v49; v67 = 0; v61 = v13 + v61; if ( sub_8D4AB0(v50, (float *)&v56, a2, (float *)v52, (float *)&v52, &v63) ) { v14 = COERCE_FLOAT(operator new(0x48u)); *(float *)&v53 = v14; LOBYTE(v67) = 1; if ( v14 == 0.0 ) v15 = 0; else v15 = sub_8D4EB0((float *)LODWORD(v14), v50); v16 = *v12; v51 = v15; v54 = 1; v17 = v16 * *(float *)&v52; v18 = *(float *)&v52; *(float *)&v52 = v17; *(float *)&v50 = v18 * v12[1]; *(float *)&v53 = v18 * v12[2]; *(float *)&v52 = *(float *)&v52 + *a2; *(float *)&v50 = a2[1] + *(float *)&v50; v19 = a2[2]; *((_DWORD *)v15 + 17) = 1; *(float *)&v53 = v19 + *(float *)&v53; *((float *)&v47 + 1) = *(float *)&v52; v20 = *(float *)&v50; v15[2] = *(float *)&v52; *(float *)&v48 = v20; v21 = *(float *)&v53; v15[3] = *(float *)&v48; *((float *)&v48 + 1) = v21; v22 = HIDWORD(v48); v15[10] = v63; v15[5] = v18; v23 = v65; *((_DWORD *)v15 + 4) = v22; v15[11] = v64; v15[12] = v23; } v67 = -1; goto LABEL_31; } if ( !(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9) ) { if ( !sub_8D4D50(v50, (float *)v9, a2, a3, (float *)&v53) ) { LABEL_31: v10 = *(float *)&v51; goto LABEL_32; } v24 = COERCE_FLOAT(operator new(0x48u)); *(float *)&v52 = v24; v67 = 2; if ( v24 == 0.0 ) v25 = 0; else v25 = sub_8D4EB0((float *)LODWORD(v24), v50); v26 = *a3; v67 = -1; v51 = v25; v27 = v26 * *(float *)&v53; v28 = *(float *)&v53; *((float *)&v47 + 1) = v27; *(float *)&v48 = *(float *)&v53 * a3[1]; *((float *)&v48 + 1) = *(float *)&v53 * a3[2]; v63 = *((float *)&v47 + 1) + *a2; v64 = a2[1] + *(float *)&v48; v29 = v64; v30 = a2[2]; v25[2] = v63; v31 = v30 + *((float *)&v48 + 1); v25[3] = v29; v25[17] = 0.0; v65 = v31; v25[4] = v65; v25[5] = v28; LABEL_30: v54 = 1; goto LABEL_31; } if ( (*(int (__thiscall **)(int))(*(_DWORD *)v9 + 12))(v9) != 2 ) goto LABEL_31; sub_8E4880(v58); v32 = sub_8E3E00((double *)&v62, *(float *)(v9 + 32), *(float *)(v9 + 36), *(float *)(v9 + 40)); sub_8E48A0(v58); sub_8E3DD0(v33, v32); v34 = sub_8E3E00((double *)&v62, *(float *)(v9 + 44), *(float *)(v9 + 48), *(float *)(v9 + 52)); v35 = (_DWORD *)sub_8E48B0(v58); sub_8E3DD0(v35, v34); v53 = *(void **)(v9 + 56); *(double *)sub_67E330((char *)v58) = *(float *)&v53; v36 = v66; v37 = 1; do { sub_8E5020(); v36 += 24; --v37; } while ( v37 >= 0 ); if ( !sub_8E47A0(&v55, v58, (signed int *)&v52, v66, &v47) ) goto LABEL_31; v38 = COERCE_FLOAT(operator new(0x48u)); *(float *)&v53 = v38; v67 = 3; if ( v38 == 0.0 ) v39 = 0; else v39 = sub_8D4EB0((float *)LODWORD(v38), v50); v67 = -1; v51 = v39; if ( v52 == (void *)1 ) goto LABEL_42; if ( v52 != (void *)2 ) { v40 = (signed int)v53; goto LABEL_29; } if ( v48 >= v47 ) LABEL_42: v40 = 0; else v40 = 1; LABEL_29: sub_8E5020(); v63 = *v41; v64 = *(double *)sub_6FE7C0(&v66[24 * v40]); v65 = *(double *)sub_8E3E20(&v66[24 * v40]); v42 = v64; v43 = v65; v39[2] = v63; v39[3] = v42; v39[4] = v43; v39[5] = *(&v47 + v40); *((_DWORD *)v39 + 17) = 2; goto LABEL_30; } LABEL_32: v44 = 2; switch ( a4[9] ) { case 0: if ( !v54 ) goto LABEL_35; goto LABEL_34; case 1: case 2: LABEL_34: v44 = 0; goto LABEL_35; case 3: if ( !v54 ) goto LABEL_35; v46 = (int)v49; *(float *)&v53 = v10; v49[13] = v10; sub_8D51C0((_DWORD *)(v46 + 28), &v53); v44 = 1; break; default: LABEL_35: if ( v10 != 0.0 ) sub_8D5110((void *)LODWORD(v10), 1); break; } return v44; } // 8E48B0: using guessed type int __thiscall sub_8E48B0(_DWORD); // A23AE8: using guessed type void *NiBoxBV::`vftable'; // 8D54D0: using guessed type char var_40[48]; //----- (008D5A40) -------------------------------------------------------- char __thiscall sub_8D5A40(_DWORD *this, float *a2, float *a3, int a4) { _DWORD *v4; // esi int v5; // eax char result; // al float *v7; // eax float *v8; // eax float *v9; // eax int v10; // esi int v11; // ebx float *v12; // eax float *v13; // eax int v14; // ecx double v15; // st7 double v16; // st7 unsigned __int16 v17; // ax int v18; // edi float v19; // eax float *v20; // esi bool v21; // zf float *v22; // eax __int16 v23; // ax __int16 v24; // ax unsigned __int16 v25; // cx int v26; // edx double v27; // st7 double v28; // st6 int v29; // eax float *v30; // ecx float v31; // edx float v32; // ecx float *v33; // ecx float v34; // edx float v35; // ecx float v36; // ecx float v37; // edx double v38; // st6 double v39; // st7 double v40; // st6 int v41; // ecx float *v42; // eax double v43; // st6 float *v44; // eax double v45; // st6 float *v46; // eax float v47; // eax float v48; // ecx float v49; // edx float *v50; // ecx float *v51; // eax double v52; // st7 float *v53; // ecx int *v54; // eax int v55; // edx int v56; // eax int v57; // edi float *v58; // ST24_4 float *v59; // ST1C_4 float *v60; // eax float *v61; // eax int v62; // edx int v63; // eax int v64; // ecx int v65; // [esp+38h] [ebp-178h] int v66; // [esp+48h] [ebp-168h] char v67; // [esp+58h] [ebp-158h] int v68; // [esp+68h] [ebp-148h] char v69; // [esp+78h] [ebp-138h] char v70; // [esp+84h] [ebp-12Ch] int v71; // [esp+90h] [ebp-120h] int v72; // [esp+94h] [ebp-11Ch] int v73; // [esp+98h] [ebp-118h] int v74; // [esp+9Ch] [ebp-114h] void *v75; // [esp+A0h] [ebp-110h] float v76; // [esp+A4h] [ebp-10Ch] float v77; // [esp+A8h] [ebp-108h] float v78; // [esp+ACh] [ebp-104h] float v79; // [esp+B0h] [ebp-100h] void *v80; // [esp+B4h] [ebp-FCh] float v81; // [esp+B8h] [ebp-F8h] void *v82; // [esp+BCh] [ebp-F4h] float v83; // [esp+C0h] [ebp-F0h] float v84; // [esp+C4h] [ebp-ECh] float v85; // [esp+C8h] [ebp-E8h] float v86; // [esp+CCh] [ebp-E4h] float v87; // [esp+D0h] [ebp-E0h] float v88; // [esp+D4h] [ebp-DCh] float v89; // [esp+D8h] [ebp-D8h] float v90; // [esp+DCh] [ebp-D4h] float v91; // [esp+E0h] [ebp-D0h] float v92; // [esp+E4h] [ebp-CCh] float v93; // [esp+E8h] [ebp-C8h] float v94; // [esp+ECh] [ebp-C4h] float v95; // [esp+F0h] [ebp-C0h] float v96; // [esp+F4h] [ebp-BCh] float v97; // [esp+F8h] [ebp-B8h] float v98; // [esp+FCh] [ebp-B4h] float v99; // [esp+100h] [ebp-B0h] float v100; // [esp+104h] [ebp-ACh] float v101; // [esp+108h] [ebp-A8h] float v102; // [esp+10Ch] [ebp-A4h] float v103; // [esp+110h] [ebp-A0h] float v104; // [esp+114h] [ebp-9Ch] int v105; // [esp+118h] [ebp-98h] float v106; // [esp+11Ch] [ebp-94h] float v107; // [esp+120h] [ebp-90h] float v108; // [esp+124h] [ebp-8Ch] float v109; // [esp+128h] [ebp-88h] float v110; // [esp+12Ch] [ebp-84h] float v111; // [esp+130h] [ebp-80h] float v112; // [esp+134h] [ebp-7Ch] float v113; // [esp+138h] [ebp-78h] float v114; // [esp+13Ch] [ebp-74h] float v115; // [esp+140h] [ebp-70h] float v116; // [esp+144h] [ebp-6Ch] float v117; // [esp+148h] [ebp-68h] float v118; // [esp+14Ch] [ebp-64h] float v119; // [esp+150h] [ebp-60h] float v120; // [esp+154h] [ebp-5Ch] float v121; // [esp+158h] [ebp-58h] float v122; // [esp+15Ch] [ebp-54h] float v123; // [esp+160h] [ebp-50h] float v124; // [esp+164h] [ebp-4Ch] float v125; // [esp+168h] [ebp-48h] float v126; // [esp+16Ch] [ebp-44h] float v127; // [esp+170h] [ebp-40h] float v128; // [esp+174h] [ebp-3Ch] float v129; // [esp+178h] [ebp-38h] float v130; // [esp+17Ch] [ebp-34h] float v131; // [esp+180h] [ebp-30h] int v132; // [esp+184h] [ebp-2Ch] int v133; // [esp+188h] [ebp-28h] float v134; // [esp+18Ch] [ebp-24h] float v135; // [esp+190h] [ebp-20h] _DWORD *v136; // [esp+194h] [ebp-1Ch] unsigned __int16 v137; // [esp+198h] [ebp-18h] void *v138; // [esp+19Ch] [ebp-14h] unsigned __int16 v139; // [esp+1A0h] [ebp-10h] int v140; // [esp+1ACh] [ebp-4h] float v141; // [esp+1B8h] [ebp+8h] float v142; // [esp+1B8h] [ebp+8h] float v143; // [esp+1B8h] [ebp+8h] char v144; // [esp+1BBh] [ebp+Bh] v4 = this; v136 = this; v5 = this[3]; if ( v5 == 2 ) return 0; if ( v5 ) { v9 = a2; v10 = a4; v11 = a4 + 104; v141 = *a2 - *(float *)(a4 + 140); *(float *)&v138 = v9[1] - *(float *)(a4 + 144); v135 = v9[2] - *(float *)(a4 + 148); v81 = v141; v82 = v138; v83 = v135; v142 = 1.0 / *(float *)(a4 + 152); v12 = sub_85DAF0(&v113, &v81, (float *)(a4 + 104)); *(float *)&v138 = v142 * *v12; v135 = v12[1] * v142; v134 = v142 * v12[2]; v75 = v138; v76 = v135; v77 = v134; v13 = sub_85DAF0(&v113, a3, (float *)v11); v14 = *(_DWORD *)(v10 + 184); v15 = v142; v143 = *v13 * v142; v134 = v13[1] * v15; *(float *)&v138 = v15 * v13[2]; v16 = v143; v144 = 0; v78 = v16; v79 = v134; v80 = v138; v17 = (*(int (**)(void))(*(_DWORD *)v14 + 76))(); v105 = v17; v135 = 0.0; if ( v17 > 0u ) { while ( 1 ) { (*(void (__stdcall **)(_DWORD, unsigned __int16 *, unsigned __int16 *, float **))(**(_DWORD **)(v10 + 184) + 80))( LODWORD(v135), &v139, &v137, &a3); v18 = *(_DWORD *)(*(_DWORD *)(v10 + 184) + 32); if ( !v18 ) break; LOBYTE(v134) = *((_BYTE *)v136 + 20); if ( sub_846F10( (float *)&v75, &v78, (float *)(v18 + 12 * v139), (float *)(v18 + 12 * v137), (float *)(v18 + 12 * (unsigned __int16)a3), SLOBYTE(v134), &v116, &v109, &v123, &v126) ) { v144 = 1; v19 = COERCE_FLOAT(operator new(0x48u)); *(float *)&v138 = v19; v140 = 1; if ( v19 == 0.0 ) *(float *)&v20 = 0.0; else *(float *)&v20 = COERCE_FLOAT(sub_8D4EB0((float *)LODWORD(v19), v10)); v21 = v136[4] == 1; v140 = -1; if ( v21 ) { v22 = sub_85DA90((float *)v11, (float *)&v69, &v116); v138 = *(void **)(v11 + 48); v84 = *(float *)&v138 * *v22; v85 = v22[1] * *(float *)&v138; v86 = *(float *)&v138 * v22[2]; v110 = *(float *)(v11 + 36) + v84; v116 = v110; v111 = v85 + *(float *)(v11 + 40); v117 = v111; v112 = v86 + *(float *)(v11 + 44); v118 = v112; } v20[2] = v116; v23 = LOWORD(v135); v20[3] = v117; v20[4] = v118; v20[5] = v109; *((_WORD *)v20 + 12) = v23; v24 = (signed __int16)a3; v25 = v137; *((_WORD *)v20 + 13) = v139; v26 = (int)v136; *((_WORD *)v20 + 14) = v25; *((_WORD *)v20 + 15) = v24; v21 = *(_BYTE *)(v26 + 56) == 0; v27 = v123; v28 = v126; *(float *)&v138 = 1.0 - (v123 + v126); if ( v21 || (v29 = *(_DWORD *)(*(_DWORD *)(a4 + 184) + 44)) == 0 ) { v39 = *(float *)&v138; *((_DWORD *)v20 + 8) = dword_BA4828; *((_DWORD *)v20 + 9) = dword_BA482C; } else { v30 = (float *)(v29 + 8 * (unsigned __int16)a3); v31 = *v30; v32 = v30[1]; v124 = v31; v125 = v32; v33 = (float *)(v29 + 8 * v137); v34 = *v33; v124 = v124 * v28; v35 = v33[1]; v121 = v34; v125 = v28 * v125; v122 = v35; v36 = *(float *)(v29 + 8 * v139); v37 = *(float *)(v29 + 8 * v139 + 4); v121 = v121 * v27; v38 = v27 * v122; v39 = *(float *)&v138; v122 = v38; v129 = v36 * *(float *)&v138; v130 = v37 * *(float *)&v138; v127 = v129 + v121; v128 = v130 + v122; v119 = v127 + v124; v40 = v128; v20[8] = v119; v120 = v40 + v125; v20[9] = v120; v26 = (int)v136; } if ( *(_BYTE *)(v26 + 57) ) { v41 = *(_DWORD *)(*(_DWORD *)(a4 + 184) + 36); if ( *(_BYTE *)(v26 + 58) && v41 ) { v42 = (float *)(v41 + 12 * (unsigned __int16)a3); v106 = *v42 * v126; v107 = v42[1] * v126; v43 = v126 * v42[2]; v44 = (float *)(v41 + 12 * v137); v108 = v43; v99 = *v44 * v123; v100 = v44[1] * v123; v45 = v123 * v44[2]; v46 = (float *)(v41 + 12 * v139); v101 = v45; v93 = *v46 * v39; v94 = v46[1] * v39; v95 = v39 * v46[2]; v87 = v93 + v99; v88 = v94 + v100; v89 = v95 + v101; v102 = v87 + v106; v47 = v102; v103 = v88 + v107; v48 = v103; v104 = v89 + v108; v49 = v104; } else { v50 = (float *)(v18 + 12 * v137); v51 = (float *)(v18 + 12 * v139); v90 = *v50 - *v51; v91 = v50[1] - v51[1]; v52 = v50[2]; v53 = (float *)(v18 + 12 * (unsigned __int16)a3); v92 = v52 - v51[2]; v96 = *v53 - *v51; v97 = v53[1] - v51[1]; v98 = v53[2] - v51[2]; v113 = v98 * v91 - v97 * v92; v47 = v113; v114 = v92 * v96 - v98 * v90; v48 = v114; v115 = v90 * v97 - v96 * v91; v49 = v115; } v132 = LODWORD(v48); v133 = LODWORD(v49); v131 = v47; sub_4430B0(&v131); if ( v136[4] == 1 ) { v54 = (int *)sub_85DA90((float *)v11, (float *)&v70, &v131); v131 = *(float *)v54; v132 = v54[1]; v133 = v54[2]; } v55 = v132; v56 = v133; v20[10] = v131; *((_DWORD *)v20 + 11) = v55; v26 = (int)v136; *((_DWORD *)v20 + 12) = v56; } else { *((_DWORD *)v20 + 10) = dword_BA45C0; *((_DWORD *)v20 + 11) = dword_BA45C4; *((_DWORD *)v20 + 12) = dword_BA45C8; } if ( *(_BYTE *)(v26 + 59) && (v57 = *(_DWORD *)(*(_DWORD *)(a4 + 184) + 40)) != 0 ) { v58 = sub_8072A0((int)&v68, v126, v57 + 16 * (unsigned __int16)a3); v59 = sub_8072A0((int)&v66, v123, v57 + 16 * v137); v60 = sub_8072A0((int)&v65, *(float *)&v138, v57 + 16 * v139); v61 = sub_6A5E40(v60, (float *)&v67, v59); sub_6A5E40(v61, (float *)&v71, v58); v62 = v72; v63 = v73; *((_DWORD *)v20 + 13) = v71; v64 = v74; *((_DWORD *)v20 + 14) = v62; v26 = (int)v136; *((_DWORD *)v20 + 15) = v63; } else { *((_DWORD *)v20 + 13) = dword_ABD518; *((_DWORD *)v20 + 14) = dword_ABD51C; *((_DWORD *)v20 + 15) = dword_ABD520; v64 = dword_ABD524; } *((_DWORD *)v20 + 16) = v64; v138 = v20; *(float *)(v26 + 52) = *(float *)&v20; sub_8D51C0((_DWORD *)(v26 + 28), &v138); result = 1; if ( v136[1] == 1 && v136[2] == 1 ) return result; v10 = a4; } ++LODWORD(v135); if ( LOWORD(v135) >= (unsigned __int16)v105 ) goto LABEL_39; } MessageBoxA(0, "111", "aaa", 0); } LABEL_39: result = v144; } else { v7 = (float *)operator new(0x48u); v140 = 0; if ( v7 ) v8 = sub_8D4EB0(v7, a4); else v8 = 0; v140 = -1; a4 = (int)v8; v4[13] = v8; sub_8D51C0(v4 + 7, &a4); result = 1; } return result; } // ABD518: using guessed type int dword_ABD518; // ABD51C: using guessed type int dword_ABD51C; // ABD520: using guessed type int dword_ABD520; // ABD524: using guessed type int dword_ABD524; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (008D6220) -------------------------------------------------------- void __thiscall sub_8D6220(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST08_4 int v3; // esi v1 = this; sub_8D5280(this); v2 = (void *)v1[8]; v1[7] = &NiTArray::`vftable'; operator delete(v2); v3 = v1[6]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } // A40CBC: using guessed type void *NiTArray::`vftable'; //----- (008D62B0) -------------------------------------------------------- char __thiscall sub_8D62B0(int this, float *a2, float *a3, int a4) { char result; // al _DWORD *v5; // eax float *v6; // edi float *v7; // ebx int v8; // eax int v9; // eax _DWORD *v10; // [esp+4h] [ebp-4h] v10 = (_DWORD *)this; if ( !a4 || *(_BYTE *)(this + 21) && *(_BYTE *)(a4 + 28) & 1 ) return 0; v5 = *(_DWORD **)(a4 + 172); if ( v5 && *(_DWORD *)(this + 12) == 2 ) { v6 = a3; v7 = a2; v8 = sub_8D54D0((float *)this, a2, a3, v5, a4) - 1; if ( !v8 ) return 1; if ( v8 == 1 ) return 0; } else { v6 = a3; v7 = a2; if ( !sub_846E10((float *)a4, a2, a3) ) return 0; } v9 = (*(int (__thiscall **)(int))(*(_DWORD *)a4 + 4))(a4); if ( v9 ) { while ( (char *)v9 != dword_BA455C ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_15; } result = sub_8D5370(v10, (int)v7, v6, a4); } else { LABEL_15: if ( !sub_402B70((int)dword_BA4858, a4) ) return 0; result = sub_8D5A40(v10, v7, v6, a4); } return result; } //----- (008D6380) -------------------------------------------------------- char __thiscall sub_8D6380(_DWORD *this, float *a2, float *a3, unsigned int a4) { _DWORD *v4; // esi unsigned int v6; // eax unsigned int v7; // ebx bool v8; // zf unsigned int v9; // eax unsigned int v10; // edx int v11; // ebx unsigned int i; // edi float *v13; // ecx float **v14; // edx float *v15; // edi int v16; // eax float *v17; // ecx float *v18; // eax _DWORD *v19; // [esp+4h] [ebp-8h] int v20; // [esp+8h] [ebp-4h] unsigned int v21; // [esp+14h] [ebp+8h] v4 = this; v19 = this; if ( !(_BYTE)a4 ) sub_8D5280(this); if ( !sub_8D62B0((int)v4, a2, a3, v4[6]) ) return 0; v6 = v4[11]; if ( !v6 ) return 0; v7 = 1; if ( v4[2] == 1 || !v4[3] ) return 1; if ( v6 <= 1 ) return 1; v8 = v4[1] == 0; v9 = v4[10]; a4 = v4[10]; if ( v8 ) { v10 = 0; v21 = 0; if ( !v9 ) return 1; do { v11 = *(_DWORD *)(v4[8] + 4 * v10); if ( v11 ) { for ( i = v10 + 1; i < a4; ++i ) { v13 = *(float **)(v4[8] + 4 * i); if ( v13 ) { if ( *(float *)(v11 + 20) > (double)v13[5] ) { v20 = v11; v11 = (int)v13; a3 = v13; sub_823870(v4 + 7, v10, &a3); sub_823870(v4 + 7, i, &v20); v4 = v19; v10 = v21; } } } } v21 = ++v10; } while ( v10 < a4 ); return 1; } v14 = (float **)v4[8]; v15 = *v14; a3 = *v14; if ( v9 <= 1 ) goto LABEL_27; do { v16 = sub_93FD70(v4 + 7, v7); v17 = (float *)v16; if ( !v16 ) goto LABEL_25; if ( v15[5] > (double)*(float *)(v16 + 20) ) { v18 = v15; v15 = v17; if ( !v18 ) goto LABEL_25; v17 = v18; } sub_8D5110(v17, 1); LABEL_25: ++v7; } while ( v7 < a4 ); a3 = v15; LABEL_27: sub_823870(v4 + 7, 0, &a3); return 1; } //----- (008D64E0) -------------------------------------------------------- LONG __thiscall sub_8D64E0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi LONG result; // eax int v4; // edi _DWORD *v5; // edi v1 = this; *this = 0; v2 = this[1]; if ( v2 ) { result = InterlockedDecrement((volatile LONG *)(v2 + 4)); if ( !result && v2 ) result = (**(int (__thiscall ***)(int, signed int))v2)(v2, 1); v1[1] = 0; } v4 = v1[2]; if ( v4 ) { result = InterlockedDecrement((volatile LONG *)(v4 + 4)); if ( !result && v4 ) result = (**(int (__thiscall ***)(int, signed int))v4)(v4, 1); v1[2] = 0; } v5 = (_DWORD *)v1[7]; v1[3] = 0; v1[4] = 0; if ( v5 ) { sub_833170(v5); operator delete(v5); } v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = dword_BA4828; v1[13] = dword_BA482C; return result; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (008D6580) -------------------------------------------------------- _DWORD *__thiscall sub_8D6580(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi _DWORD *result; // eax unsigned int v4; // esi int v5; // eax _DWORD *v6; // ebx int v7; // eax int v8; // esi char *v9; // eax int v10; // edx int v11; // ecx _DWORD *v12; // esi void *v13; // ebx _DWORD *v14; // ecx _DWORD *v15; // ebx _DWORD *v16; // eax _DWORD *v17; // eax float *v18; // eax int v19; // eax int v20; // edi char *v21; // eax int v22; // edx int v23; // ecx void *v24; // ebx _DWORD *v25; // ecx _DWORD *v26; // ebx int v27; // edi float *v28; // eax int v29; // ebx void *v30; // [esp+4Ch] [ebp-18h] void *v31; // [esp+4Ch] [ebp-18h] void *v32; // [esp+50h] [ebp-14h] void *v33; // [esp+50h] [ebp-14h] unsigned int v34; // [esp+54h] [ebp-10h] int v35; // [esp+54h] [ebp-10h] int v36; // [esp+6Ch] [ebp+8h] v2 = this; result = (_DWORD *)this[8]; if ( result ) { if ( !a2 ) a2 = 24; v4 = this[9]; v34 = result[47]; if ( v4 >= v34 ) { LABEL_11: v8 = 2 * a2; v30 = operator new[](24 * a2); v32 = operator new[](16 * a2); v9 = (char *)operator new[](32 * a2); if ( v9 ) { v10 = v8 - 1; if ( v8 - 1 >= 0 ) { v11 = (int)(v9 + 8); do { *(float *)(v11 - 8) = 0.0; v11 += 16; --v10; *(float *)(v11 - 20) = 0.0; *(float *)(v11 - 16) = 0.0; *(float *)(v11 - 12) = 0.0; } while ( v10 >= 0 ); } v35 = (int)v9; } else { v35 = 0; } v13 = operator new[](4 * a2); v14 = operator new(0x5Cu); if ( v14 ) v15 = sub_8747E0(v14, v8, (int)v30, 0, v35, (int)v32, 1, 0, v8 / 3, (int)v13, 0, 0); else v15 = 0; v12 = 0; v16 = operator new(0xC4u); if ( v16 ) v17 = sub_866DF0(v16, (int)v15); else v17 = 0; if ( v17 ) { v12 = v17; InterlockedIncrement(v17 + 1); } (*(void (__stdcall **)(_DWORD *, _DWORD))(*(_DWORD *)v2[8] + 116))(v12, 0); v18 = (float *)v12[46]; v18[4] = 0.0; v18[5] = 0.0; v18[6] = 0.0; v18[7] = 10.0; sub_85BED0((_DWORD **)v12, 0.0, 1); v19 = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_BA4928 + 4))(2); (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA4928 + 20))(v19, v12[46], 0); sub_85C4D0((_DWORD *)v2[8]); sub_85C6F0((_DWORD *)v2[8]); v2[9] = 1; if ( !InterlockedDecrement(v12 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v12)(v12, 1); } else { while ( 1 ) { v5 = v2[8]; if ( *(_DWORD *)(v5 + 188) > v4 ) { v6 = *(_DWORD **)(*(_DWORD *)(v5 + 180) + 4 * v4); if ( v6 ) { v7 = (*(int (__thiscall **)(_DWORD *))(*v6 + 4))(v6); if ( v7 ) break; } } LABEL_10: if ( ++v4 >= v34 ) goto LABEL_11; } while ( (char *)v7 != dword_BA478C ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_10; } v2[9] = v4 + 1; v12 = v6; } if ( a2 > *(unsigned __int16 *)(v12[46] + 12) ) { v20 = 2 * a2; v33 = operator new[](24 * a2); v31 = operator new[](16 * a2); v21 = (char *)operator new[](32 * a2); if ( v21 ) { v22 = v20 - 1; if ( v20 - 1 >= 0 ) { v23 = (int)(v21 + 8); do { *(float *)(v23 - 8) = 0.0; v23 += 16; --v22; *(float *)(v23 - 20) = 0.0; *(float *)(v23 - 16) = 0.0; *(float *)(v23 - 12) = 0.0; } while ( v22 >= 0 ); } v36 = (int)v21; } else { v36 = 0; } v24 = operator new[](2 * v20); v25 = operator new(0x5Cu); if ( v25 ) v26 = sub_8747E0(v25, v20, (int)v33, 0, v36, (int)v31, 1, 0, v20 / 3, (int)v24, 0, 0); else v26 = 0; v27 = v12[46]; if ( v27 ) InterlockedIncrement((volatile LONG *)(v27 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v12 + 120))(v12, v26); v28 = (float *)v12[46]; v28[4] = 0.0; v28[5] = 0.0; v28[6] = 0.0; v28[7] = 10.0; sub_85BED0((_DWORD **)v12, 0.0, 1); v29 = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_BA4928 + 4))(2); (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)dword_BA4928 + 28))(v27, 0); (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA4928 + 20))(v29, v12[46], 0); if ( v27 ) { if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); } } *((_WORD *)v12 + 14) &= 0xFFFEu; result = v12; } return result; } // BA4928: using guessed type int dword_BA4928; //----- (008D69F0) -------------------------------------------------------- _DWORD *__cdecl sub_8D69F0(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // ecx _DWORD *result; // eax v3 = a1; for ( result = a3; v3 != a2; result += 3 ) { if ( result ) { *result = *v3; result[1] = v3[1]; result[2] = v3[2]; } v3 += 3; } return result; } //----- (008D6A30) -------------------------------------------------------- void __cdecl sub_8D6A30(_DWORD *a1, int a2) { int v2; // ecx _DWORD *v3; // eax int v4; // [esp+0h] [ebp-Ch] int v5; // [esp+4h] [ebp-8h] int v6; // [esp+8h] [ebp-4h] v2 = a2; if ( a2 ) { v3 = a1; do { if ( v3 ) { *v3 = v4; v3[1] = v5; v3[2] = v6; } v3 += 3; --v2; } while ( v2 ); } } //----- (008D6A70) -------------------------------------------------------- void __cdecl sub_8D6A70(_DWORD *a1, int a2) { int v2; // ecx _DWORD *v3; // eax int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] v2 = a2; if ( a2 ) { v3 = a1; do { if ( v3 ) { *v3 = v4; v3[1] = v5; } v3 += 2; --v2; } while ( v2 ); } } //----- (008D6AA0) -------------------------------------------------------- void __cdecl sub_8D6AA0(float *a1, int a2) { int v2; // ecx float *v3; // eax v2 = a2; if ( a2 ) { v3 = a1; do { if ( v3 ) { *v3 = 0.0; v3[1] = 0.0; v3[2] = 0.0; v3[3] = 0.0; } v3 += 4; --v2; } while ( v2 ); } } //----- (008D6AF0) -------------------------------------------------------- unsigned int __thiscall sub_8D6AF0(unsigned int *this, char *a2) { unsigned int *v2; // esi unsigned int result; // eax _DWORD *v4; // eax _DWORD *v5; // ST04_4 _DWORD *v6; // ST00_4 unsigned int v7; // edx int v8; // edi int v9; // [esp+0h] [ebp-24h] void *v10; // [esp+10h] [ebp-14h] int *v11; // [esp+14h] [ebp-10h] int v12; // [esp+20h] [ebp-4h] v11 = &v9; v2 = this; if ( (unsigned int)a2 > 0x15555555 ) std::_Xlength_error("vector too long"); result = (signed int)(this[2] - *this) / 12; if ( result < (unsigned int)a2 ) { v4 = sub_423320(a2); v5 = (_DWORD *)v2[1]; v6 = (_DWORD *)*v2; v10 = v4; v12 = 0; sub_8D69F0(v6, v5, v4); v7 = (signed int)((unsigned __int64)(715827883i64 * (signed int)(v2[1] - *v2)) >> 32) >> 1; v8 = v7 + (v7 >> 31); if ( *v2 ) operator delete((void *)*v2); result = (unsigned int)v10; v2[2] = (unsigned int)v10 + 12 * (_DWORD)a2; v2[1] = result + 12 * v8; *v2 = result; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008D6BE0) -------------------------------------------------------- unsigned int __thiscall sub_8D6BE0(unsigned int *this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (signed int)(this[1] - *this) / 12; if ( 357913941 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (signed int)(this[2] - *this) / 12; if ( v3 > result ) { if ( 357913941 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_8D6AF0(this, v5); } return result; } //----- (008D6C60) -------------------------------------------------------- char *__thiscall sub_8D6C60(_DWORD *this, int a2) { unsigned int v2; // eax char *result; // eax unsigned int v4; // edx char *v5; // edx v2 = (this[1] - *this) >> 3; if ( 0x1FFFFFFF - a2 < v2 ) std::_Xlength_error("vector too long"); result = (char *)(a2 + v2); v4 = (this[2] - *this) >> 3; if ( (unsigned int)result > v4 ) { if ( 0x1FFFFFFF - (v4 >> 1) >= v4 ) v5 = (char *)((v4 >> 1) + v4); else v5 = 0; if ( v5 < result ) v5 = result; result = sub_4E6ED0(this, v5); } return result; } //----- (008D6CC0) -------------------------------------------------------- struct _RTL_CRITICAL_SECTION *sub_8D6CC0() { if ( !(dword_BA6630 & 1) ) { dword_BA6630 |= 1u; InitializeCriticalSection(&stru_BA6604); dword_BA661C = 0; dword_BA6620 = 0; dword_BA6624 = 0; dword_BA6628 = 28; dword_BA662C = 32; atexit(sub_9A4A90); } return &stru_BA6604; } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; // BA6628: using guessed type int dword_BA6628; // BA662C: using guessed type int dword_BA662C; // BA6630: using guessed type int dword_BA6630; //----- (008D6D20) -------------------------------------------------------- float *__thiscall sub_8D6D20(float *this) { float *v1; // esi int v2; // ebx int v3; // ebx v1 = this; this[1] = 0.0; this[2] = 0.0; this[14] = 0.0; this[15] = 0.0; this[16] = 0.0; this[18] = 0.0; this[19] = 0.0; this[20] = 0.0; this[22] = 0.0; this[23] = 0.0; this[24] = 0.0; *this = 0.0; v2 = *((_DWORD *)this + 1); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[1] = 0.0; } v3 = *((_DWORD *)v1 + 2); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[2] = 0.0; } v1[3] = 0.0; v1[5] = 20.0; v1[4] = 0.0; v1[6] = 20.0; v1[7] = 0.0; v1[8] = 0.0; v1[9] = 0.0; v1[10] = 0.0; v1[11] = 0.0; *((_DWORD *)v1 + 12) = dword_BA4828; *((_DWORD *)v1 + 13) = dword_BA482C; return v1; } // BA4828: using guessed type int dword_BA4828; // BA482C: using guessed type int dword_BA482C; //----- (008D6E10) -------------------------------------------------------- void __thiscall sub_8D6E10(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // esi v1 = this; sub_8D64E0(this); if ( v1[22] ) operator delete((void *)v1[22]); v1[22] = 0; v1[23] = 0; v1[24] = 0; if ( v1[18] ) operator delete((void *)v1[18]); v1[18] = 0; v1[19] = 0; v1[20] = 0; if ( v1[14] ) operator delete((void *)v1[14]); v1[14] = 0; v1[15] = 0; v1[16] = 0; v2 = v1[2]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[1]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (008D6F00) -------------------------------------------------------- unsigned int __thiscall sub_8D6F00(unsigned int *this, unsigned int a2) { unsigned int *v2; // esi unsigned int v3; // ecx unsigned int result; // eax int v5; // edx v2 = this; v3 = this[1]; result = (signed int)(v3 - *v2) / 12; if ( result <= a2 ) { if ( result >= a2 ) return result; sub_8D6BE0(v2, a2 - result); sub_8D6A30((_DWORD *)v2[1], a2 - (signed int)(v2[1] - *v2) / 12); result = (signed int)(v2[1] - *v2) / 12; v5 = v2[1] + 12 * (a2 - result); } else { result = 3 * a2; v5 = *v2 + 12 * a2; if ( v5 == v3 ) return result; result = v3; } v2[1] = v5; return result; } //----- (008D6FD0) -------------------------------------------------------- _DWORD *__thiscall sub_8D6FD0(unsigned int *this, _DWORD *a2) { unsigned int *v2; // edi unsigned int v3; // ecx unsigned int v4; // edx int v5; // esi _DWORD *v6; // ecx _DWORD *result; // eax v2 = this; v3 = this[1]; if ( (unsigned int)a2 >= v3 || *v2 > (unsigned int)a2 ) { if ( v3 == v2[2] ) sub_8D6BE0(v2, 1); result = (_DWORD *)v2[1]; if ( result ) { *result = *a2; result[1] = a2[1]; result[2] = a2[2]; } } else { v4 = (signed int)((unsigned __int64)(715827883i64 * (signed int)((signed int)a2 - *v2)) >> 32) >> 1; v5 = v4 + (v4 >> 31); if ( v3 == v2[2] ) sub_8D6BE0(v2, 1); v6 = (_DWORD *)(*v2 + 12 * v5); result = (_DWORD *)v2[1]; if ( result ) { *result = *v6; result[1] = v6[1]; result[2] = v6[2]; v2[1] += 12; return result; } } v2[1] += 12; return result; } //----- (008D7060) -------------------------------------------------------- unsigned int __thiscall sub_8D7060(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi unsigned int v3; // ecx unsigned int result; // eax int v5; // edx v2 = this; v3 = this[1]; result = (signed int)(v3 - *v2) >> 3; if ( result <= a2 ) { if ( result < a2 ) { sub_8D6C60(v2, a2 - result); sub_8D6A70((_DWORD *)v2[1], a2 - ((v2[1] - *v2) >> 3)); result = v2[1] + 8 * (a2 - ((v2[1] - *v2) >> 3)); v2[1] = result; } } else { v5 = *v2 + 8 * a2; if ( v5 != v3 ) { result = v3; v2[1] = v5; } } return result; } //----- (008D70F0) -------------------------------------------------------- char *__thiscall sub_8D70F0(int *this, char *a2) { int *v2; // esi char *result; // eax int v4; // edi _DWORD *v5; // ecx int v6; // eax v2 = this; result = (char *)this[1]; if ( a2 >= result || *this > (unsigned int)a2 ) { if ( result == (char *)this[2] ) sub_8D6C60(this, 1); result = (char *)v2[1]; if ( result ) { *(_DWORD *)result = *(_DWORD *)a2; *((_DWORD *)result + 1) = *((_DWORD *)a2 + 1); } } else { v4 = (signed int)&a2[-*this] >> 3; if ( result == (char *)this[2] ) result = sub_8D6C60(this, 1); v5 = (_DWORD *)v2[1]; if ( v5 ) { v6 = *v2; *v5 = *(_DWORD *)(*v2 + 8 * v4); result = *(char **)(v6 + 8 * v4 + 4); v5[1] = result; v2[1] += 8; return result; } } v2[1] += 8; return result; } //----- (008D7170) -------------------------------------------------------- unsigned int __thiscall sub_8D7170(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi unsigned int v3; // edx int v4; // ecx unsigned int result; // eax int v6; // ecx v2 = this; v3 = this[1]; v4 = *this; result = (signed int)(v3 - v4) >> 4; if ( result <= a2 ) { if ( result < a2 ) { sub_5096A0(v2, a2 - result); sub_8D6AA0((float *)v2[1], a2 - ((v2[1] - *v2) >> 4)); result = v2[1]; v2[1] = result + 16 * (a2 - ((v2[1] - *v2) >> 4)); } } else { v6 = 16 * a2 + v4; if ( v6 != v3 ) { result = v3; v2[1] = v6; } } return result; } //----- (008D7220) -------------------------------------------------------- signed int __cdecl sub_8D7220(_DWORD *a1) { _DWORD *v1; // esi int v2; // ecx int v4; // ebx int v5; // eax unsigned int v6; // edx int v7; // esi float v8; // eax int v9; // edx int *v10; // eax float v11; // ecx int v12; // eax int v13; // esi int v14; // ecx float v15; // edx int v16; // ecx float v17; // edx int v18; // ecx int v19; // edx int v20; // edi _DWORD *v21; // ecx _DWORD *v22; // edx _DWORD *v23; // eax _WORD *v24; // esi signed int v25; // edi int v26; // esi _DWORD *v27; // eax int v28; // eax signed int v29; // esi float *v30; // eax unsigned int v31; // eax unsigned int v32; // edx int v33; // ecx unsigned int v34; // esi unsigned int v35; // eax unsigned int v36; // ecx char *v37; // ecx _DWORD *v38; // eax _DWORD *v39; // esi int v40; // ecx int v41; // edx unsigned int v42; // eax unsigned int v43; // eax unsigned int v44; // ecx char *v45; // ecx float *v46; // eax int v47; // [esp+1Ch] [ebp-3Ch] int v48; // [esp+20h] [ebp-38h] int v49; // [esp+24h] [ebp-34h] int v50; // [esp+28h] [ebp-30h] float v51; // [esp+2Ch] [ebp-2Ch] float v52; // [esp+30h] [ebp-28h] float v53; // [esp+34h] [ebp-24h] float v54; // [esp+38h] [ebp-20h] float v55; // [esp+3Ch] [ebp-1Ch] float v56; // [esp+40h] [ebp-18h] float v57; // [esp+44h] [ebp-14h] float v58; // [esp+48h] [ebp-10h] float v59; // [esp+4Ch] [ebp-Ch] int v60; // [esp+50h] [ebp-8h] int v61; // [esp+54h] [ebp-4h] v1 = a1; v2 = a1[3]; if ( *(_DWORD *)(*(_DWORD *)(v2 + 172) + 40) ) return 0; v4 = *(_DWORD *)(*(_DWORD *)(a1[2] + 172) + 60); v5 = *(_DWORD *)(v4 + 44); if ( v5 != v2 ) { if ( v5 ) { v6 = (signed int)((unsigned __int64)(715827883i64 * (*(_DWORD *)(v4 + 60) - *(_DWORD *)(v4 + 56))) >> 32) >> 1; v7 = v6 + (v6 >> 31); v60 = v6 + (v6 >> 31); v8 = COERCE_FLOAT(sub_8D6580((_DWORD *)v4, v6 + (v6 >> 31))); v9 = LODWORD(v8); v59 = v8; *(float *)(v4 + 40) = v8; if ( v8 == 0.0 ) return 1; v10 = *(int **)(LODWORD(v8) + 184); v57 = *((float *)v10 + 8); v55 = *((float *)v10 + 11); v11 = *((float *)v10 + 10); v51 = *((float *)v10 + 18); v12 = 0; v53 = v11; if ( v7 > 0 ) { v61 = 0; v13 = 0; do { v14 = *(_DWORD *)(v4 + 56); v15 = v57; *(_DWORD *)(LODWORD(v57) + v13) = *(_DWORD *)(v14 + v13); *(_DWORD *)(LODWORD(v15) + v13 + 4) = *(_DWORD *)(v14 + v13 + 4); *(_DWORD *)(LODWORD(v15) + v13 + 8) = *(_DWORD *)(v14 + v13 + 8); v16 = *(_DWORD *)(v4 + 72); v17 = v55; *(_DWORD *)(LODWORD(v55) + 8 * v12) = *(_DWORD *)(v16 + 8 * v12); *(_DWORD *)(LODWORD(v17) + 8 * v12 + 4) = *(_DWORD *)(v16 + 8 * v12 + 4); v18 = *(_DWORD *)(v4 + 88); v19 = v61; v20 = *(_DWORD *)(v18 + v61); v61 += 16; v21 = (_DWORD *)(v19 + v18); v22 = (_DWORD *)(LODWORD(v53) + v19); v13 += 12; *v22 = v20; v22[1] = v21[1]; v22[2] = v21[2]; v22[3] = v21[3]; *(_WORD *)(LODWORD(v51) + 2 * v12) = v12; ++v12; } while ( v12 < v60 ); v9 = LODWORD(v59); } v23 = *(_DWORD **)(v4 + 44); *(_DWORD *)(v9 + 88) = v23[35]; *(_DWORD *)(v9 + 92) = v23[36]; *(_DWORD *)(v9 + 96) = v23[37]; qmemcpy((void *)(v9 + 52), (const void *)(*(_DWORD *)(v4 + 44) + 104), 0x24u); v24 = *(_WORD **)(v9 + 184); v25 = v60; v51 = fabs(*(float *)(*(_DWORD *)(v4 + 44) + 152)); *(float *)(v9 + 100) = v51; (*(void (__thiscall **)(_WORD *, int))(*(_DWORD *)v24 + 72))(v24, v25 / 3); (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v24 + 60))(v24, v25); v24[25] |= 0xFFFu; v26 = LODWORD(v59); sub_86B6C0((float *)&v47, v25, *(float **)(*(_DWORD *)(LODWORD(v59) + 184) + 32)); v27 = *(_DWORD **)(v26 + 184); v27[4] = v47; v27[5] = v48; v27[6] = v49; v27[7] = v50; sub_85BED0((_DWORD **)v26, 0.0, 1); v1 = a1; } sub_8D6F00((unsigned int *)(v4 + 56), 0); sub_8D7060((_DWORD *)(v4 + 72), 0); sub_8D7170((_DWORD *)(v4 + 88), 0); ++*(_DWORD *)(v4 + 16); *(_DWORD *)(v4 + 44) = v1[3]; } if ( v1[15] ) { v28 = dword_BA6650; if ( !(dword_BA6650 & 1) ) { v28 = dword_BA6650 | 1; flt_BA6640 = 1.0; dword_BA6650 |= 1u; flt_BA6644 = 1.0; flt_BA6648 = 1.0; flt_BA664C = 1.0; } if ( !(v28 & 2) ) { flt_BA6634 = 0.0; dword_BA6650 = v28 | 2; flt_BA6638 = 0.0; flt_BA663C = 0.1; } v29 = 0; v58 = *(float *)(v4 + 48); v61 = 0; v59 = *(float *)(v4 + 52); do { sub_8D6FD0((unsigned int *)(v4 + 56), *(_DWORD **)(v29 + a1[15] + 12)); v30 = *(float **)(v29 + a1[15]); v56 = *v30; v57 = v30[1]; v52 = v56 - v58; v54 = v52; v53 = v57 - v59; v55 = v53; v31 = *(_DWORD *)(v4 + 92); v54 = v52 / *(float *)(v4 + 24) + 0.5; v55 = v53 / *(float *)(v4 + 20) + 0.5; if ( v31 <= (unsigned int)&flt_BA6640 || (v32 = *(_DWORD *)(v4 + 88), v32 > (unsigned int)&flt_BA6640) ) { v40 = *(_DWORD *)(v4 + 96); if ( v31 == v40 ) { v41 = *(_DWORD *)(v4 + 88); v42 = (signed int)(v31 - v41) >> 4; if ( v42 > 0xFFFFFFE ) LABEL_46: std::_Xlength_error("vector too long"); v43 = v42 + 1; v44 = (v40 - v41) >> 4; if ( v43 > v44 ) { if ( 0xFFFFFFF - (v44 >> 1) >= v44 ) v45 = (char *)((v44 >> 1) + v44); else v45 = 0; if ( (unsigned int)v45 < v43 ) v45 = (char *)v43; sub_5093E0((_DWORD *)(v4 + 88), v45); v29 = v61; } } v46 = *(float **)(v4 + 92); if ( v46 ) { *v46 = flt_BA6640; v46[1] = flt_BA6644; v46[2] = flt_BA6648; v46[3] = flt_BA664C; } } else { v33 = *(_DWORD *)(v4 + 96); v34 = (unsigned int)&flt_BA6640 - v32; if ( v31 == v33 ) { v35 = (signed int)(v31 - v32) >> 4; if ( v35 > 0xFFFFFFE ) goto LABEL_46; v36 = (signed int)(v33 - v32) >> 4; LODWORD(v51) = v35 + 1; if ( v35 + 1 > v36 ) { if ( 0xFFFFFFF - (v36 >> 1) >= v36 ) v37 = (char *)((v36 >> 1) + v36); else v37 = 0; if ( (unsigned int)v37 < LODWORD(v51) ) v37 = (char *)LODWORD(v51); sub_5093E0((_DWORD *)(v4 + 88), v37); } } v38 = *(_DWORD **)(v4 + 92); v39 = (_DWORD *)(*(_DWORD *)(v4 + 88) + (v34 & 0xFFFFFFF0)); if ( v38 ) { *v38 = *v39; v38[1] = v39[1]; v38[2] = v39[2]; v38[3] = v39[3]; } v29 = v61; } *(_DWORD *)(v4 + 92) += 16; sub_8D70F0((int *)(v4 + 72), (char *)&v54); v29 += 4; v61 = v29; } while ( v29 < 12 ); } return 0; } // BA6634: using guessed type float flt_BA6634; // BA6638: using guessed type float flt_BA6638; // BA663C: using guessed type float flt_BA663C; // BA6640: using guessed type float flt_BA6640; // BA6644: using guessed type float flt_BA6644; // BA6648: using guessed type float flt_BA6648; // BA664C: using guessed type float flt_BA664C; // BA6650: using guessed type int dword_BA6650; //----- (008D7630) -------------------------------------------------------- int __thiscall sub_8D7630(void *this) { void *v1; // esi float v2; // eax _DWORD *v3; // ebx int v4; // edi float v5; // eax _DWORD *v6; // edi _DWORD *v7; // ST0C_4 float v8; // eax float *v9; // eax int v10; // edx float v11; // ecx double v12; // st7 int v13; // eax void *v14; // ebx float v15; // eax _DWORD *v16; // eax _DWORD *v17; // ecx _DWORD *v18; // eax int v20; // [esp+20h] [ebp-28h] float v21; // [esp+24h] [ebp-24h] float v22; // [esp+28h] [ebp-20h] float v23; // [esp+2Ch] [ebp-1Ch] float v24; // [esp+30h] [ebp-18h] float v25; // [esp+34h] [ebp-14h] void *v26; // [esp+38h] [ebp-10h] int v27; // [esp+44h] [ebp-4h] v1 = this; v2 = COERCE_FLOAT(operator new(0xE8u)); *(float *)&v26 = v2; v3 = 0; v27 = 0; if ( v2 != 0.0 ) v3 = sub_85A1C0((_DWORD *)LODWORD(v2), 0); v4 = *((_DWORD *)v1 + 2); v27 = -1; if ( (_DWORD *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *((_DWORD *)v1 + 2) = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } v5 = COERCE_FLOAT(operator new(0x50u)); *(float *)&v26 = v5; v27 = 1; if ( v5 == 0.0 ) v6 = 0; else v6 = sub_8339F0((_DWORD *)LODWORD(v5), *((_DWORD **)v1 + 2)); v7 = (_DWORD *)v6[2]; v6[10] = 2; sub_834490(v7, 2); v6[9] = 3; v8 = COERCE_FLOAT(operator new(0x40u)); *(float *)&v26 = v8; v27 = 2; if ( v8 == 0.0 ) v9 = 0; else v9 = (float *)sub_83AC70( (_DWORD *)LODWORD(v8), &flt_ABD4B0, &dword_BA45C0, &dword_ABD48C, &dword_ABD498, &dword_ABD4A4); *((_DWORD *)v9 + 4) = dword_ABD48C; v23 = 0.0; v24 = 0.0; *((_DWORD *)v9 + 5) = dword_ABD490; v25 = 0.0; *((_DWORD *)v9 + 6) = dword_ABD494; *((_DWORD *)v9 + 7) = dword_ABD498; *((_DWORD *)v9 + 8) = dword_ABD49C; *((_DWORD *)v9 + 9) = dword_ABD4A0; *((_DWORD *)v9 + 10) = dword_ABD4A4; *((_DWORD *)v9 + 11) = dword_ABD4A8; v10 = dword_ABD4AC; v9[1] = v23; v11 = v25; *((_DWORD *)v9 + 12) = v10; v9[2] = v24; v9[3] = v11; v12 = *((float *)v1 + 6); v27 = -1; *(float *)&v26 = v12 * 0.5; v9[13] = *(float *)&v26; *(float *)&v26 = 0.5 * *((float *)v1 + 5); v9[14] = *(float *)&v26; v26 = *((void **)v1 + 5); v9[15] = *(float *)&v26; sub_833C10(v6, (int)v9); v13 = *((_DWORD *)v1 + 2); *(float *)&v20 = 0.0; v21 = 0.0; v22 = 1.0; sub_8B8B90(v13, (int)&v20, 1.0, "WireABVTemp", 0); *(_WORD *)(*((_DWORD *)v1 + 2) + 28) &= 0xFFFEu; v14 = (void *)*((_DWORD *)v1 + 7); if ( v14 ) { sub_833170(*((_DWORD **)v1 + 7)); operator delete(v14); } *((_DWORD *)v1 + 7) = 0; v15 = COERCE_FLOAT(operator new(0x30u)); *(float *)&v26 = v15; v27 = 3; if ( v15 == 0.0 ) v16 = 0; else v16 = sub_833100((_DWORD *)LODWORD(v15)); *((_DWORD *)v1 + 7) = v16; v6[14] = sub_8D7220; v6[15] = v1; v17 = (_DWORD *)*((_DWORD *)v1 + 7); v27 = -1; sub_8333D0(v17); sub_833600(*((_DWORD **)v1 + 7), *((_DWORD **)v1 + 2), 0, -1, 1); v18 = (_DWORD *)*((_DWORD *)v1 + 1); if ( v18 ) sub_833620(*((_DWORD **)v1 + 7), v18, 0, -1, 1); return sub_85BED0(*((_DWORD ***)v1 + 2), 0.0, 1); } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // ABD4A4: using guessed type int dword_ABD4A4; // ABD4A8: using guessed type int dword_ABD4A8; // ABD4AC: using guessed type int dword_ABD4AC; // ABD4B0: using guessed type float flt_ABD4B0; // BA45C0: using guessed type int dword_BA45C0; //----- (008D78D0) -------------------------------------------------------- char __thiscall sub_8D78D0(int this, float a2, int a3, float a4, float a5) { int v5; // esi int v6; // ebx _DWORD *v8; // ecx unsigned int v9; // edx int v10; // edi _DWORD *v11; // eax int v12; // edx _DWORD *v13; // eax int v14; // ecx signed int v15; // eax int v16; // ecx int v17; // edx int v18; // ecx int v19; // edx int v20; // ecx int v21; // edx int v22; // edi _DWORD *v23; // ecx _DWORD *v24; // edx _DWORD *v25; // eax _WORD *v26; // esi int v27; // esi _DWORD *v28; // eax _DWORD *v29; // eax int v30; // ecx unsigned int v31; // eax unsigned int i; // edx int v33; // ecx int v34; // ecx int v35; // [esp+24h] [ebp-24h] int v36; // [esp+28h] [ebp-20h] int v37; // [esp+2Ch] [ebp-1Ch] int v38; // [esp+30h] [ebp-18h] int v39; // [esp+34h] [ebp-14h] int v40; // [esp+38h] [ebp-10h] int v41; // [esp+3Ch] [ebp-Ch] int v42; // [esp+40h] [ebp-8h] int v43; // [esp+44h] [ebp-4h] signed int v44; // [esp+50h] [ebp+8h] int v45; // [esp+54h] [ebp+Ch] float v46; // [esp+54h] [ebp+Ch] float v47; // [esp+54h] [ebp+Ch] v5 = 0; v6 = this; *(_DWORD *)(this + 36) = 0; if ( !a3 ) return 0; *(float *)(this + 48) = a4; v8 = *(_DWORD **)(this + 28); *(float *)(v6 + 52) = a5; *(_DWORD *)(v6 + 44) = 0; *(_DWORD *)(v6 + 40) = 0; *(_DWORD *)(v6 + 32) = a3; *(_DWORD *)(v6 + 12) = 0; *(_DWORD *)(v6 + 16) = 0; sub_833490(v8, a2); if ( *(_DWORD *)(v6 + 16) && *(_DWORD *)(v6 + 44) ) { v9 = (signed int)((unsigned __int64)(715827883i64 * (*(_DWORD *)(v6 + 60) - *(_DWORD *)(v6 + 56))) >> 32) >> 1; v10 = v9 + (v9 >> 31); v44 = v9 + (v9 >> 31); v11 = sub_8D6580((_DWORD *)v6, v9 + (v9 >> 31)); v12 = (int)v11; *(_DWORD *)(v6 + 40) = v11; v13 = (_DWORD *)v11[46]; v42 = v13[8]; v41 = v13[11]; v14 = v13[10]; v39 = v13[18]; v15 = 0; v43 = v12; v40 = v14; if ( v10 > 0 ) { v45 = 0; do { v16 = *(_DWORD *)(v6 + 56); v17 = v42; *(_DWORD *)(v42 + v5) = *(_DWORD *)(v16 + v5); *(_DWORD *)(v17 + v5 + 4) = *(_DWORD *)(v16 + v5 + 4); *(_DWORD *)(v17 + v5 + 8) = *(_DWORD *)(v16 + v5 + 8); v18 = *(_DWORD *)(v6 + 72); v19 = v41; *(_DWORD *)(v41 + 8 * v15) = *(_DWORD *)(v18 + 8 * v15); *(_DWORD *)(v19 + 8 * v15 + 4) = *(_DWORD *)(v18 + 8 * v15 + 4); v20 = *(_DWORD *)(v6 + 88); v21 = v45; v22 = *(_DWORD *)(v20 + v45); v45 += 16; v23 = (_DWORD *)(v21 + v20); v24 = (_DWORD *)(v40 + v21); v5 += 12; *v24 = v22; v24[1] = v23[1]; v24[2] = v23[2]; v24[3] = v23[3]; *(_WORD *)(v39 + 2 * v15) = v15; ++v15; } while ( v15 < v44 ); v12 = v43; } v25 = *(_DWORD **)(v6 + 44); *(_DWORD *)(v12 + 88) = v25[35]; *(_DWORD *)(v12 + 92) = v25[36]; *(_DWORD *)(v12 + 96) = v25[37]; qmemcpy((void *)(v12 + 52), (const void *)(*(_DWORD *)(v6 + 44) + 104), 0x24u); v26 = *(_WORD **)(v12 + 184); v46 = fabs(*(float *)(*(_DWORD *)(v6 + 44) + 152)); *(float *)(v12 + 100) = v46; (*(void (__thiscall **)(_WORD *, int))(*(_DWORD *)v26 + 72))(v26, v44 / 3); (*(void (__thiscall **)(_WORD *, signed int))(*(_DWORD *)v26 + 60))(v26, v44); v26[25] |= 0xFFFu; v27 = v43; sub_86B6C0((float *)&v35, v44, *(float **)(*(_DWORD *)(v43 + 184) + 32)); v28 = *(_DWORD **)(v27 + 184); v28[4] = v35; v28[5] = v36; v28[6] = v37; v28[7] = v38; sub_85BED0((_DWORD **)v27, 0.0, 1); sub_8D6F00((unsigned int *)(v6 + 56), 0); sub_8D7060((_DWORD *)(v6 + 72), 0); sub_8D7170((_DWORD *)(v6 + 88), 0); } v29 = sub_8D6580((_DWORD *)v6, 0); *(_DWORD *)(v6 + 40) = v29; v47 = fabs(1.0); v29[22] = dword_BA45C0; v29[23] = dword_BA45C4; v29[24] = dword_BA45C8; qmemcpy((void *)(*(_DWORD *)(v6 + 40) + 52), &unk_ABD440, 0x24u); *(float *)(*(_DWORD *)(v6 + 40) + 100) = v47; if ( *(_DWORD *)v6 ) sub_8DD530(*(float **)v6, a4, a5, *(float *)(v6 + 24), *(float *)(v6 + 20), *(_DWORD *)(v6 + 40)); v30 = *(_DWORD *)(v6 + 32); v31 = *(_DWORD *)(v6 + 36); *(_DWORD *)(v6 + 16) = 0; *(_DWORD *)(v6 + 12) = 0; for ( i = *(_DWORD *)(v30 + 188); v31 < i; ++v31 ) { v33 = *(_DWORD *)(v6 + 32); if ( *(_DWORD *)(v33 + 188) > v31 ) v34 = *(_DWORD *)(*(_DWORD *)(v33 + 180) + 4 * v31); else v34 = 0; *(_WORD *)(v34 + 28) |= 1u; } return 1; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008D7B80) -------------------------------------------------------- char __thiscall sub_8D7B80(_DWORD *this, float a2, int a3, int a4) { int v4; // edi _DWORD *v5; // eax v4 = (int)this; v5 = (_DWORD *)this[2]; v5[22] = *(_DWORD *)a4; v5[23] = *(_DWORD *)(a4 + 4); v5[24] = *(_DWORD *)(a4 + 8); sub_85BED0((_DWORD **)this[2], a2, 1); return sub_8D78D0(v4, a2, a3, *(float *)a4, *(float *)(a4 + 4)); } //----- (008D7BE0) -------------------------------------------------------- void __thiscall sub_8D7BE0(int this) { int v1; // edx float v2; // ST00_4 float v3; // ST00_4 v1 = *(_DWORD *)(this + 340); if ( v1 ) { v2 = 2.0 * *(float *)(v1 + 244) * (flt_AC263C / 100.0); v3 = *(float *)(this + 48) * 2.0 / v2; *(float *)(this + 236) = v3; if ( v3 < 2000.0 ) *(float *)(this + 236) = 2000.0; if ( *(float *)(v1 + 260) < (double)*(float *)(this + 236) ) *(float *)(this + 236) = *(float *)(v1 + 260); } } // AC263C: using guessed type float flt_AC263C; //----- (008D7C60) -------------------------------------------------------- int __thiscall sub_8D7C60(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; sub_859110((int)this, a2); result = *(_DWORD *)(a2 + 12); v2[85] = result; return result; } //----- (008D7C90) -------------------------------------------------------- unsigned int __thiscall sub_8D7C90(int *this, void **a2) { return sub_858D60(this, a2); } //----- (008D7CA0) -------------------------------------------------------- int __thiscall sub_8D7CA0(const char **this, unsigned int a2) { return sub_859EE0(this, a2); } //----- (008D7CB0) -------------------------------------------------------- char __thiscall sub_8D7CB0(_DWORD *this, int a2) { return sub_859FB0(this, a2); } //----- (008D7CC0) -------------------------------------------------------- int __thiscall sub_8D7CC0(int *this, _DWORD *a2) { return sub_831FA0(this, a2); } //----- (008D7CD0) -------------------------------------------------------- char __thiscall sub_8D7CD0(_DWORD *this, int a2) { return sub_831DF0(this, a2); } //----- (008D7D00) -------------------------------------------------------- void *__thiscall sub_8D7D00(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray> *>::`vftable'; operator delete[](v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A40CDC: using guessed type void *NiTArray> *>::`vftable'; //----- (008D7D30) -------------------------------------------------------- int __thiscall sub_8D7D30(int this) { int v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int result; // eax v1 = this; *(float *)(this + 320) = 0.0; *(float *)(this + 236) = 3200.0; *(_DWORD *)(this + 340) = 0; *(_BYTE *)(this + 344) = 0; v2 = *(_DWORD *)(this + 292); if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *(_DWORD *)(v1 + 292) = 0; } v3 = *(_DWORD *)(v1 + 296); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v1 + 296) = 0; } v4 = *(_DWORD *)(v1 + 300); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 300) = 0; } v5 = *(_DWORD *)(v1 + 304); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v1 + 304) = 0; } v6 = *(_DWORD *)(v1 + 312); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v1 + 312) = 0; } v7 = *(_DWORD *)(v1 + 308); if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *(_DWORD *)(v1 + 308) = 0; } *(float *)(v1 + 316) = 10.0; *(_DWORD *)(v1 + 324) = dword_BA45C0; *(_DWORD *)(v1 + 328) = dword_BA45C4; result = dword_BA45C8; *(float *)(v1 + 348) = 0.0; *(_DWORD *)(v1 + 356) = 0; *(_BYTE *)(v1 + 288) = 0; *(_BYTE *)(v1 + 232) = 0; *(_DWORD *)(v1 + 332) = result; *(_DWORD *)(v1 + 336) = -1; *(_BYTE *)(v1 + 345) = 1; *(_BYTE *)(v1 + 352) = 1; return result; } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008D7ED0) -------------------------------------------------------- double __thiscall sub_8D7ED0(_DWORD *this) { return *(float *)(this[73] + 84); } //----- (008D7EE0) -------------------------------------------------------- void __thiscall sub_8D7EE0(_DWORD *this, float a2) { int v2; // ecx int v3; // eax int v4; // eax int v5; // ecx v2 = this[76]; if ( v2 ) { v3 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 112))(0); if ( v3 ) { v4 = *(_DWORD *)(v3 + 16); v5 = *(_DWORD *)(v4 + 12); if ( v5 ) { if ( *(_DWORD *)(v4 + 8) == 2 ) *(float *)(v5 + 4) = a2; } } } } //----- (008D7F20) -------------------------------------------------------- LONG __thiscall sub_8D7F20(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // eax int v3; // esi int v4; // ecx int v5; // eax _DWORD *v6; // eax int v7; // edi float *v8; // eax float *v9; // esi float *v10; // eax float *v11; // eax int v12; // edi LONG result; // eax int v14; // ebx int v15; // [esp+14h] [ebp-18h] volatile LONG *v16; // [esp+18h] [ebp-14h] float *v17; // [esp+1Ch] [ebp-10h] v1 = this; v2 = operator new[](0x1Cu); if ( v2 ) { v3 = (int)(v2 + 1); *v2 = 3; `eh vector constructor iterator'(v2 + 1, 8u, 3, (void (__thiscall *)(void *))sub_8E5020, nullsub_6); } else { v3 = 0; } LOBYTE(v15) = 0; v4 = v15; LOBYTE(v15) = 1; *(float *)v3 = 0.0; v5 = v15; *(_DWORD *)(v3 + 4) = v4; *(float *)(v3 + 8) = 0.0099999998; LOBYTE(v15) = 1; *(_DWORD *)(v3 + 12) = v5; *(float *)(v3 + 16) = 2.0; *(_DWORD *)(v3 + 20) = v15; v16 = 0; v6 = operator new(0x18u); v7 = (int)v6; if ( v6 ) { sub_85BA50(v6); *(_DWORD *)v7 = &NiBoolData::`vftable'; *(_DWORD *)(v7 + 8) = 0; *(_DWORD *)(v7 + 12) = 0; *(_DWORD *)(v7 + 16) = 0; *(_BYTE *)(v7 + 20) = 0; } else { v7 = 0; } if ( v7 ) { v16 = (volatile LONG *)v7; InterlockedIncrement((volatile LONG *)(v7 + 4)); } else { v7 = 0; } sub_82C040((_DWORD *)v7, v3, 3, 5); v8 = (float *)operator new(0x18u); if ( v8 ) v9 = sub_82BA70(v8, v7); else v9 = 0; if ( v9 ) InterlockedIncrement((volatile LONG *)v9 + 1); v10 = (float *)operator new(0x40u); if ( v10 ) { v11 = sub_818390(v10); v17 = v11; } else { v17 = 0; v11 = 0; } v12 = v1[77]; if ( (float *)v12 != v11 ) { if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v11 = v17; } v1[77] = v11; if ( v11 ) InterlockedIncrement((volatile LONG *)v11 + 1); } (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v1[77] + 116))(v9, 0); (*(void (**)(void))(*(_DWORD *)v1[77] + 120))(); *(_WORD *)(v1[77] + 8) = *(_WORD *)(v1[77] + 8) & 0xFFF7 | 1; result = v1[77]; *(_WORD *)(result + 8) = *(_WORD *)(result + 8) & 0xFFFD | 4; v14 = v1[77]; *(float *)(v14 + 20) = 0.0; *(float *)(v14 + 24) = 2.0; if ( v9 ) { result = InterlockedDecrement((volatile LONG *)v9 + 1); if ( !result ) result = (**(int (__thiscall ***)(float *, signed int))v9)(v9, 1); } if ( v16 ) { result = InterlockedDecrement(v16 + 1); if ( !result ) result = (**(int (__thiscall ***)(void *, signed int))v16)((void *)v16, 1); } return result; } // A22B64: using guessed type void *NiBoolData::`vftable'; //----- (008D81A0) -------------------------------------------------------- char __thiscall sub_8D81A0(int this, float a2) { int v2; // esi int v3; // eax int v4; // ecx int v5; // ecx float v7; // [esp+18h] [ebp-4h] v2 = this; if ( (*(_BYTE *)(this + 8) >> 5) & 1 ) { *(float *)(this + 40) = -3.4028235e38; } else { LOBYTE(v3) = sub_80FFE0((float *)this, a2); if ( (_BYTE)v3 ) { v4 = *(_DWORD *)(v2 + 60); if ( !v4 ) return v3; LOBYTE(v3) = (*(int (**)(void))(*(_DWORD *)v4 + 132))(); if ( !(_BYTE)v3 ) return v3; } } v3 = *(_DWORD *)(v2 + 48); if ( v3 ) { v5 = *(_DWORD *)(v2 + 60); if ( v5 ) { LOBYTE(v3) = (*(int (__stdcall **)(_DWORD, int, float *))(*(_DWORD *)v5 + 76))(*(float *)(v2 + 40), v3, &v7); if ( (_BYTE)v3 ) { LOBYTE(v3) = BYTE2(a2); *(_BYTE *)(*(_DWORD *)(v2 + 48) + 30) = (signed int)v7; } } } return v3; } //----- (008D8240) -------------------------------------------------------- void __thiscall sub_8D8240(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ebx int v3; // eax int v4; // esi _DWORD *v5; // [esp+14h] [ebp-10h] v1 = this; v2 = 0; if ( this[3] ) { do { v3 = v1[1]; v4 = *(_DWORD *)(v3 + 4 * v2); v5 = (_DWORD *)(v3 + 4 * v2); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v5 = 0; } ++v2; } while ( v2 < v1[3] ); } v1[4] = 0; v1[3] = 0; } //----- (008D82E0) -------------------------------------------------------- _DWORD *__thiscall sub_8D82E0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85A1C0(this, 0); *v1 = &NsFadeNode::`vftable'; v1[60] = &NiTArray>::`vftable'; v1[62] = 0; v1[65] = 1; v1[63] = 0; v1[64] = 0; v1[61] = 0; v1[66] = &NiTArray> *>::`vftable'; v1[68] = 0; v1[71] = 1; v1[69] = 0; v1[70] = 0; v1[67] = 0; v1[73] = 0; v1[74] = 0; v1[75] = 0; v1[76] = 0; v1[77] = 0; v1[78] = 0; sub_8D7D30((int)v1); return v1; } // A28EDC: using guessed type void *NiTArray>::`vftable'; // A40CDC: using guessed type void *NiTArray> *>::`vftable'; // A40CEC: using guessed type void *NsFadeNode::`vftable'; //----- (008D83C0) -------------------------------------------------------- char *sub_8D83C0() { return dword_BA6660; } //----- (008D83D0) -------------------------------------------------------- int __thiscall sub_8D83D0(_DWORD *this, char a2) { int v2; // esi v2 = (int)this; sub_85A1C0(this, 0); *(_DWORD *)v2 = &NsFadeNode::`vftable'; *(_DWORD *)(v2 + 240) = &NiTArray>::`vftable'; *(_DWORD *)(v2 + 248) = 0; *(_DWORD *)(v2 + 260) = 1; *(_DWORD *)(v2 + 252) = 0; *(_DWORD *)(v2 + 256) = 0; *(_DWORD *)(v2 + 244) = 0; *(_DWORD *)(v2 + 264) = &NiTArray> *>::`vftable'; *(_DWORD *)(v2 + 272) = 0; *(_DWORD *)(v2 + 284) = 1; *(_DWORD *)(v2 + 276) = 0; *(_DWORD *)(v2 + 280) = 0; *(_DWORD *)(v2 + 268) = 0; *(_DWORD *)(v2 + 292) = 0; *(_DWORD *)(v2 + 296) = 0; *(_DWORD *)(v2 + 300) = 0; *(_DWORD *)(v2 + 304) = 0; *(_DWORD *)(v2 + 308) = 0; *(_DWORD *)(v2 + 312) = 0; sub_8D7D30(v2); *(_BYTE *)(v2 + 345) = a2; return v2; } // A28EDC: using guessed type void *NiTArray>::`vftable'; // A40CDC: using guessed type void *NiTArray> *>::`vftable'; // A40CEC: using guessed type void *NsFadeNode::`vftable'; //----- (008D84B0) -------------------------------------------------------- int __thiscall sub_8D84B0(_DWORD *this, int a2, float a3) { int v3; // ebx unsigned int v4; // eax unsigned int v5; // esi unsigned int v6; // eax float v8; // [esp+2Ch] [ebp+Ch] v3 = (int)this; sub_85A1C0(this, 0); *(_DWORD *)v3 = &NsFadeNode::`vftable'; *(_DWORD *)(v3 + 240) = &NiTArray>::`vftable'; *(_DWORD *)(v3 + 248) = 0; *(_DWORD *)(v3 + 260) = 1; *(_DWORD *)(v3 + 252) = 0; *(_DWORD *)(v3 + 256) = 0; *(_DWORD *)(v3 + 244) = 0; *(_DWORD *)(v3 + 264) = &NiTArray> *>::`vftable'; *(_DWORD *)(v3 + 272) = 0; *(_DWORD *)(v3 + 284) = 1; *(_DWORD *)(v3 + 276) = 0; *(_DWORD *)(v3 + 280) = 0; *(_DWORD *)(v3 + 268) = 0; *(_DWORD *)(v3 + 292) = 0; *(_DWORD *)(v3 + 296) = 0; *(_DWORD *)(v3 + 300) = 0; *(_DWORD *)(v3 + 304) = 0; *(_DWORD *)(v3 + 308) = 0; *(_DWORD *)(v3 + 312) = 0; sub_8D7D30(v3); *(_BYTE *)(v3 + 345) = LOBYTE(a3); *(_DWORD *)(v3 + 88) = *(_DWORD *)(a2 + 88); *(_DWORD *)(v3 + 92) = *(_DWORD *)(a2 + 92); *(_DWORD *)(v3 + 96) = *(_DWORD *)(a2 + 96); qmemcpy((void *)(v3 + 52), (const void *)(a2 + 52), 0x24u); v8 = fabs(*(float *)(a2 + 100)); *(float *)(v3 + 100) = v8; sub_85AB50((void **)v3, *(char **)(a2 + 8)); if ( (*(_BYTE *)(a2 + 28) >> 1) & 1 ) *(_WORD *)(v3 + 28) |= 2u; else *(_WORD *)(v3 + 28) &= 0xFFFDu; if ( (*(_BYTE *)(a2 + 28) >> 3) & 1 ) *(_WORD *)(v3 + 28) |= 8u; else *(_WORD *)(v3 + 28) &= 0xFFF7u; if ( (*(_BYTE *)(a2 + 28) >> 4) & 1 ) *(_WORD *)(v3 + 28) |= 0x10u; else *(_WORD *)(v3 + 28) &= 0xFFEFu; if ( (*(_BYTE *)(a2 + 28) >> 2) & 1 ) *(_WORD *)(v3 + 28) |= 4u; else *(_WORD *)(v3 + 28) &= 0xFFFBu; v4 = *(_DWORD *)(a2 + 188); v5 = 0; if ( v4 ) { if ( v4 <= 0 ) goto LABEL_17; do { v6 = *(_DWORD *)(*(_DWORD *)(a2 + 180) + 4 * v5); if ( v6 ) sub_85A860((_DWORD *)v3, v6, 0); LABEL_17: ++v5; } while ( *(_DWORD *)(a2 + 188) > v5 ); } return v3; } // A28EDC: using guessed type void *NiTArray>::`vftable'; // A40CDC: using guessed type void *NiTArray> *>::`vftable'; // A40CEC: using guessed type void *NsFadeNode::`vftable'; //----- (008D8670) -------------------------------------------------------- unsigned int __thiscall sub_8D8670(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi void (__stdcall ***v3)(signed int); // ecx unsigned int result; // eax v1 = this; sub_8D8240(this + 60); v2 = 0; if ( v1[69] ) { do { v3 = *(void (__stdcall ****)(signed int))(v1[67] + 4 * v2); if ( v3 ) (**v3)(1); ++v2; } while ( v2 < v1[69] ); } for ( result = 0; result < v1[69]; ++result ) *(_DWORD *)(v1[67] + 4 * result) = 0; v1[70] = 0; v1[69] = 0; return result; } //----- (008D86F0) -------------------------------------------------------- void __thiscall sub_8D86F0(_DWORD *this) { _DWORD *v1; // ebx bool v2; // zf _DWORD *v3; // esi int v4; // edi void (__thiscall ***v5)(_DWORD, signed int); // edi int v6; // edi void (__thiscall ***v7)(_DWORD, signed int); // edi int v8; // edi void (__thiscall ***v9)(_DWORD, signed int); // edi int v10; // ecx _DWORD *v11; // edi int *v12; // eax volatile LONG *v13; // ebx int v14; // eax void (__thiscall ***v15)(_DWORD, signed int); // edi int (__thiscall *v16)(_DWORD *); // eax int v17; // eax _DWORD *v18; // edi int v19; // eax int v20; // eax _DWORD *v21; // esi _DWORD *v22; // ST04_4 _DWORD *v23; // [esp+14h] [ebp-34h] void (__stdcall ***v24)(signed int); // [esp+18h] [ebp-30h] int v25; // [esp+1Ch] [ebp-2Ch] int v26; // [esp+20h] [ebp-28h] int v27; // [esp+24h] [ebp-24h] int v28; // [esp+28h] [ebp-20h] int *v29; // [esp+2Ch] [ebp-1Ch] _DWORD *v30; // [esp+30h] [ebp-18h] _DWORD *v31; // [esp+34h] [ebp-14h] unsigned int v32; // [esp+38h] [ebp-10h] int v33; // [esp+44h] [ebp-4h] v1 = this; v23 = this; v2 = this[63] == 0; v32 = 0; if ( !v2 ) { do { v4 = v1[73]; v30 = *(_DWORD **)(v1[61] + 4 * v32); v3 = v30; if ( v4 == sub_85C050(v30, 3) ) { sub_85CA90(v3, (volatile LONG **)&v28, 3); if ( v28 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } } v6 = v1[74]; if ( v6 == sub_85C050(v3, 0) ) { sub_85CA90(v3, (volatile LONG **)&v27, 0); v7 = (void (__thiscall ***)(_DWORD, signed int))v27; if ( v27 ) { if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v7 ) (**v7)(v7, 1); } } v8 = v1[75]; if ( v8 == sub_85C050(v3, 9) ) { sub_85CA90(v3, (volatile LONG **)&v26, 9); if ( v26 ) { v9 = (void (__thiscall ***)(_DWORD, signed int))v26; if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) ) { if ( v9 ) (**v9)(v9, 1); } } } v10 = v1[67]; v11 = *(_DWORD **)(v10 + 4 * v32); v12 = (int *)v11[1]; v31 = *(_DWORD **)(v10 + 4 * v32); if ( v12 ) { while ( 1 ) { v13 = (volatile LONG *)v12[2]; v29 = (int *)*v12; if ( v13 ) { v14 = (*(int (__thiscall **)(volatile LONG *))(*v13 + 60))(v13); sub_85CA90(v3, (volatile LONG **)&v25, v14); if ( v25 ) { v15 = (void (__thiscall ***)(_DWORD, signed int))v25; if ( !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v15 ) (**v15)(v15, 1); } } InterlockedIncrement(v13 + 1); v16 = *(int (__thiscall **)(_DWORD *))(v3[39] + 4); v33 = 0; v17 = v16(v3 + 39); v18 = (_DWORD *)v17; v19 = *(_DWORD *)(v17 + 8); v24 = (void (__stdcall ***)(signed int))v19; if ( (volatile LONG *)v19 != v13 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v24 ) (**v24)(1); v18[2] = v13; InterlockedIncrement(v13 + 1); } v18[1] = 0; *v18 = v3[40]; v20 = v3[40]; if ( v20 ) *(_DWORD *)(v20 + 4) = v18; else v3[41] = v18; ++v3[42]; v3[40] = v18; v33 = -1; if ( !InterlockedDecrement(v13 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v13)(v13, 1); v3 = v30; v11 = v31; } if ( !v29 ) break; v12 = v29; } v1 = v23; } v21 = (_DWORD *)v11[1]; while ( v21 ) { v22 = v21; v21 = (_DWORD *)*v21; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v11 + 8))(v11, v22); } v11[3] = 0; v11[1] = 0; v11[2] = 0; ++v32; } while ( v32 < v1[63] ); } } //----- (008D8990) -------------------------------------------------------- unsigned int __thiscall sub_8D8990(int this) { int v1; // esi unsigned int result; // eax _DWORD *v3; // edx _DWORD *v4; // edi _DWORD *v5; // esi _DWORD *v6; // ST04_4 int v7; // esi volatile LONG *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // ebx volatile LONG **v10; // ebx void (__thiscall ***v11)(_DWORD, signed int); // ebx unsigned __int8 v12; // cl double v13; // st7 volatile LONG **v14; // ebx void (__thiscall ***v15)(_DWORD, signed int); // ebx int v16; // edi _DWORD *v17; // ebx int v18; // edi int v19; // edi int v20; // ecx int v21; // ecx int v22; // [esp+10h] [ebp-2Ch] int v23; // [esp+14h] [ebp-28h] int v24; // [esp+18h] [ebp-24h] int v25; // [esp+1Ch] [ebp-20h] unsigned int v26; // [esp+20h] [ebp-1Ch] _DWORD *v27; // [esp+24h] [ebp-18h] volatile LONG *v28; // [esp+28h] [ebp-14h] int v29; // [esp+2Ch] [ebp-10h] int v30; // [esp+38h] [ebp-4h] v1 = this; v29 = this; result = 0; *(float *)(this + 316) = 0.0; v26 = 0; if ( *(_DWORD *)(this + 252) ) { while ( 1 ) { v3 = *(_DWORD **)(*(_DWORD *)(v1 + 244) + 4 * result); v4 = *(_DWORD **)(*(_DWORD *)(v1 + 268) + 4 * result); v5 = (_DWORD *)v4[1]; v27 = v3; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v6); } v7 = 0; v4[3] = 0; v4[1] = 0; v4[2] = 0; v28 = 0; v30 = 0; v8 = *sub_85CA90(v27, (volatile LONG **)&v25, 3); if ( v8 ) { v7 = (int)v8; v28 = v8; InterlockedIncrement(v8 + 1); } v9 = (void (__thiscall ***)(_DWORD, signed int))v25; LOBYTE(v30) = 0; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v9 ) (**v9)(v9, 1); if ( v7 ) sub_8A6330(v4, (int *)&v28); v10 = sub_85CA90(v27, (volatile LONG **)&v24, 0); LOBYTE(v30) = 2; if ( (volatile LONG *)v7 != *v10 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v7 = (int)*v10; v28 = (volatile LONG *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v11 = (void (__thiscall ***)(_DWORD, signed int))v24; LOBYTE(v30) = 0; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v11 ) (**v11)(v11, 1); if ( v7 ) { sub_8A6330(v4, (int *)&v28); if ( (*(_WORD *)(v7 + 28) >> 9) & 1 ) { v12 = *(_BYTE *)(v7 + 30); v13 = *(float *)(v29 + 316); v23 = v12; if ( (double)v12 > v13 ) { v23 = v12; *(float *)(v29 + 316) = (double)v12; } } } v14 = sub_85CA90(v27, (volatile LONG **)&v22, 9); LOBYTE(v30) = 3; if ( (volatile LONG *)v7 != *v14 ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v7 = (int)*v14; v28 = (volatile LONG *)v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } v15 = (void (__thiscall ***)(_DWORD, signed int))v22; LOBYTE(v30) = 0; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v15 ) (**v15)(v15, 1); if ( v7 ) sub_8A6330(v4, (int *)&v28); v16 = *(_DWORD *)(v29 + 292); v23 = v16; if ( v16 ) InterlockedIncrement((volatile LONG *)(v16 + 4)); v17 = v27 + 39; LOBYTE(v30) = 4; sub_8A6330(v27 + 39, &v23); LOBYTE(v30) = 0; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v18 = *(_DWORD *)(v29 + 296); v23 = v18; if ( v18 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); LOBYTE(v30) = 5; sub_8A6330(v17, &v23); LOBYTE(v30) = 0; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = *(_DWORD *)(v29 + 300); v23 = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); LOBYTE(v30) = 6; sub_8A6330(v17, &v23); LOBYTE(v30) = 0; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v30 = -1; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = v26 + 1; v26 = result; v1 = v29; if ( result >= *(_DWORD *)(v29 + 252) ) break; result = v26; } } v20 = *(_DWORD *)(v1 + 312); if ( v20 ) { result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v20 + 112))(0); if ( result ) { result = *(_DWORD *)(result + 16); v21 = *(_DWORD *)(result + 12); if ( v21 ) { if ( *(_DWORD *)(result + 8) >= 2u ) *(float *)(v21 + 12) = *(float *)(v1 + 316); } } } return result; } //----- (008D8D10) -------------------------------------------------------- _DWORD *__thiscall sub_8D8D10(_WORD *this, _DWORD **a2) { _WORD *v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x168u); v4 = 0; if ( v3 ) v4 = sub_8D82E0(v3); sub_859240(v2, (int)v4, a2); return v4; } //----- (008D8D90) -------------------------------------------------------- LONG __thiscall sub_8D8D90(int this) { int v1; // esi LONG result; // eax int v3; // ecx int v4; // ecx int v5; // ecx v1 = this; if ( *(_BYTE *)(this + 288) ) { sub_8D86F0((_DWORD *)this); sub_85C6F0((_DWORD *)v1); result = sub_85C4D0((_DWORD *)v1); } v3 = *(_DWORD *)(v1 + 312); *(_BYTE *)(v1 + 288) = 0; *(_DWORD *)(v1 + 356) = 0; if ( v3 ) result = (*(int (**)(void))(*(_DWORD *)v3 + 64))(); v4 = *(_DWORD *)(v1 + 304); if ( v4 ) result = (*(int (**)(void))(*(_DWORD *)v4 + 64))(); v5 = *(_DWORD *)(v1 + 308); if ( v5 ) result = (*(int (**)(void))(*(_DWORD *)v5 + 64))(); return result; } //----- (008D8E00) -------------------------------------------------------- char *sub_8D8E00() { return dword_BA6658; } //----- (008D8E10) -------------------------------------------------------- int __thiscall sub_8D8E10(_DWORD *this, float *a2) { int result; // eax result = this[12]; *a2 = (double)*(unsigned __int8 *)(result + 30); return result; } //----- (008D8E30) -------------------------------------------------------- char __stdcall sub_8D8E30(int a1) { int v1; // eax if ( !a1 ) return 0; v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( !v1 ) return 0; while ( (char *)v1 != dword_BA4718 ) { v1 = *(_DWORD *)(v1 + 4); if ( !v1 ) return 0; } return 1; } //----- (008D8E60) -------------------------------------------------------- _DWORD *__thiscall sub_8D8E60(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; v3 = *((_DWORD *)this + 15); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_86C3C0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D8EF0) -------------------------------------------------------- unsigned int __thiscall sub_8D8EF0(int *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_85A6D0(this, a2); v3 = sub_8784D0(*(int *)dword_BA6660); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008D8F40) -------------------------------------------------------- float *__thiscall sub_8D8F40(_DWORD *this, _DWORD **a2) { _DWORD *v2; // edi float *v3; // eax float *v4; // esi v2 = this; v3 = (float *)operator new(0x40u); v4 = v3; if ( v3 ) { sub_831D00(v3); *(_DWORD *)v4 = &NiAlphaRefController::`vftable'; } else { v4 = 0; } sub_831CE0(v2, (int)v4, a2); return v4; } // A40D7C: using guessed type void *NiAlphaRefController::`vftable'; //----- (008D8FC0) -------------------------------------------------------- unsigned int __thiscall sub_8D8FC0(unsigned __int16 *this, char *a2) { char *v2; // esi char *v3; // eax unsigned int v4; // edi v2 = a2; sub_86C860(this, (char)a2); v3 = sub_8784D0(*(int *)dword_BA6658); v4 = *((_DWORD *)v2 + 3); a2 = v3; if ( v4 >= *((_DWORD *)v2 + 2) ) sub_8237A0(v2, v4 + *((_DWORD *)v2 + 5)); return sub_823870(v2, v4, &a2); } //----- (008D9010) -------------------------------------------------------- signed int __stdcall sub_8D9010(int a1, _DWORD *a2) { int v2; // ebx int v3; // eax _DWORD *v4; // esi unsigned int v5; // edi v2 = a1; if ( a1 ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( v3 ) { while ( (char *)v3 != dword_BA4840 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) return 1; } a1 = v2; InterlockedIncrement((volatile LONG *)(v2 + 4)); v4 = a2; v5 = a2[63]; if ( v5 >= a2[62] ) sub_81A750(a2 + 60, v5 + a2[65]); sub_7FFF10(v4 + 60, v5, &a1); if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } } return 1; } //----- (008D90F0) -------------------------------------------------------- LONG __thiscall sub_8D90F0(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi void *v8; // ST0C_4 char *v9; // eax char *v10; // edi v1 = this; *this = &NsFadeNode::`vftable'; sub_8D8670(this); sub_8D7D30((int)v1); v2 = v1[78]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[77]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[76]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[75]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[74]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[73]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = (void *)v1[67]; v1[66] = &NiTArray> *>::`vftable'; operator delete[](v8); v9 = (char *)v1[61]; v1[60] = &NiTArray>::`vftable'; if ( v9 ) { v10 = v9 - 4; `eh vector destructor iterator'(v9, 4u, *((_DWORD *)v9 - 1), sub_410C00); operator delete[](v10); } return sub_85A210(v1); } // A28EDC: using guessed type void *NiTArray>::`vftable'; // A40CDC: using guessed type void *NiTArray> *>::`vftable'; // A40CEC: using guessed type void *NsFadeNode::`vftable'; //----- (008D9290) -------------------------------------------------------- void __thiscall sub_8D9290(_DWORD *this) { int v1; // esi int v2; // ecx float *v3; // eax v1 = (int)this; v2 = this[89]; if ( v2 ) { v3 = *(float **)(v1 + 308); if ( v3 ) { if ( v3[8] > v3[7] + v3[6] ) { if ( v2 == 1 ) { if ( *(_BYTE *)(v1 + 352) ) *(_WORD *)(v1 + 28) &= 0xFFFEu; sub_8D8D90(v1); } if ( *(_DWORD *)(v1 + 356) == 2 ) { if ( *(_BYTE *)(v1 + 352) ) *(_WORD *)(v1 + 28) |= 1u; sub_8D8D90(v1); } } } } } //----- (008D9300) -------------------------------------------------------- LONG __thiscall sub_8D9300(_DWORD *this, float a2, char a3) { int v3; // esi int v4; // eax int v5; // eax LONG result; // eax bool v7; // zf v3 = (int)this; v4 = this[78]; if ( v4 ) { if ( a3 ) *(_WORD *)(v4 + 8) |= 0x10u; else *(_WORD *)(v4 + 8) &= 0xFFEFu; (*(void (__stdcall **)(_DWORD))(*(_DWORD *)this[78] + 60))(LODWORD(a2)); } v5 = *(_DWORD *)(v3 + 304); if ( v5 ) { if ( a3 ) *(_WORD *)(v5 + 8) |= 0x10u; else *(_WORD *)(v5 + 8) &= 0xFFEFu; (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 304) + 60))(LODWORD(a2)); } result = *(_DWORD *)(v3 + 308); if ( result && *(_BYTE *)(v3 + 352) ) { if ( a3 ) *(_WORD *)(result + 8) |= 0x10u; else *(_WORD *)(result + 8) &= 0xFFEFu; result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v3 + 308) + 60))(LODWORD(a2)); } if ( a3 ) { v7 = *(_BYTE *)(v3 + 288) == 0; *(_DWORD *)(v3 + 356) = 2; if ( v7 ) { sub_8D8990(v3); sub_85C6F0((_DWORD *)v3); result = sub_85C4D0((_DWORD *)v3); } *(_BYTE *)(v3 + 288) = 1; } else { v7 = *(_BYTE *)(v3 + 288) == 0; *(_DWORD *)(v3 + 356) = 1; if ( v7 ) { sub_8D8990(v3); sub_85C6F0((_DWORD *)v3); result = sub_85C4D0((_DWORD *)v3); } *(_BYTE *)(v3 + 288) = 1; } return result; } //----- (008D9420) -------------------------------------------------------- LONG __thiscall sub_8D9420(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax float *v3; // ebx _DWORD *v4; // eax int v5; // edi float *v6; // eax float *v7; // eax float *v8; // eax float *v9; // edi int v10; // ebx int v11; // eax _DWORD *v12; // eax float *v13; // ebx _DWORD *v14; // eax int v15; // edi float *v16; // eax float *v17; // ebx float *v18; // eax float *v19; // edi float *v20; // eax int v21; // edi LONG result; // eax int v23; // esi volatile LONG *v24; // [esp+1Ch] [ebp-1Ch] volatile LONG *v25; // [esp+20h] [ebp-18h] float *v26; // [esp+24h] [ebp-14h] float *v27; // [esp+28h] [ebp-10h] v1 = this; v2 = operator new[](0x14u); if ( v2 ) { v3 = (float *)(v2 + 1); *v2 = 2; `eh vector constructor iterator'(v2 + 1, 8u, 2, (void (__thiscall *)(void *))sub_8E5020, nullsub_6); } else { v3 = 0; } v24 = 0; *v3 = 0.0; v3[1] = 0.0; v3[2] = 2.0; v3[3] = 1.0; v4 = operator new(0x18u); v5 = (int)v4; if ( v4 ) { sub_85BA50(v4); *(_DWORD *)v5 = &NiFloatData::`vftable'; *(_DWORD *)(v5 + 8) = 0; *(_DWORD *)(v5 + 12) = 0; *(_DWORD *)(v5 + 16) = 0; *(_BYTE *)(v5 + 20) = 0; } else { v5 = 0; } if ( v5 ) { v24 = (volatile LONG *)v5; InterlockedIncrement((volatile LONG *)(v5 + 4)); } else { v5 = 0; } sub_826D00((_DWORD *)v5, (int)v3, 2, 1); v6 = (float *)operator new(0x18u); if ( v6 ) { v7 = sub_8261F0(v6, v5); v26 = v7; } else { v26 = 0; v7 = 0; } if ( v7 ) InterlockedIncrement((volatile LONG *)v7 + 1); v8 = (float *)operator new(0x40u); if ( v8 ) v9 = sub_815B40(v8); else v9 = 0; v10 = v1[76]; if ( (float *)v10 != v9 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[76] = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)v9 + 1); } (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v1[76] + 116))(v26, 0); (*(void (**)(void))(*(_DWORD *)v1[76] + 120))(); *(_WORD *)(v1[76] + 8) = *(_WORD *)(v1[76] + 8) & 0xFFF7 | 1; *(_WORD *)(v1[76] + 8) = *(_WORD *)(v1[76] + 8) & 0xFFFD | 4; v11 = v1[76]; *(float *)(v11 + 20) = 0.0; *(float *)(v11 + 24) = 2.0; v12 = operator new[](0x14u); if ( v12 ) { v13 = (float *)(v12 + 1); *v12 = 2; `eh vector constructor iterator'(v12 + 1, 8u, 2, (void (__thiscall *)(void *))sub_8E5020, nullsub_6); } else { v13 = 0; } v25 = 0; *v13 = 0.0; v13[1] = 0.0; v13[2] = 2.0; v13[3] = 200.0; v14 = operator new(0x18u); v15 = (int)v14; if ( v14 ) { sub_85BA50(v14); *(_DWORD *)v15 = &NiFloatData::`vftable'; *(_DWORD *)(v15 + 8) = 0; *(_DWORD *)(v15 + 12) = 0; *(_DWORD *)(v15 + 16) = 0; *(_BYTE *)(v15 + 20) = 0; } else { v15 = 0; } if ( v15 ) { v25 = (volatile LONG *)v15; InterlockedIncrement((volatile LONG *)(v15 + 4)); } else { v15 = 0; } sub_826D00((_DWORD *)v15, (int)v13, 2, 1); v16 = (float *)operator new(0x18u); if ( v16 ) v17 = sub_8261F0(v16, v15); else v17 = 0; if ( v17 ) InterlockedIncrement((volatile LONG *)v17 + 1); v18 = (float *)operator new(0x40u); v19 = v18; if ( v18 ) { sub_831D00(v18); v20 = v19; *(_DWORD *)v19 = &NiAlphaRefController::`vftable'; v27 = v19; } else { v27 = 0; v20 = 0; } v21 = v1[78]; if ( (float *)v21 != v20 ) { if ( v21 ) { if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v20 = v27; } v1[78] = v20; if ( v20 ) InterlockedIncrement((volatile LONG *)v20 + 1); } (*(void (__stdcall **)(float *, _DWORD))(*(_DWORD *)v1[78] + 116))(v17, 0); (*(void (**)(void))(*(_DWORD *)v1[78] + 120))(); *(_WORD *)(v1[78] + 8) = *(_WORD *)(v1[78] + 8) & 0xFFF7 | 1; result = v1[78]; *(_WORD *)(result + 8) = *(_WORD *)(result + 8) & 0xFFFD | 4; v23 = v1[78]; *(float *)(v23 + 20) = 0.0; *(float *)(v23 + 24) = 2.0; if ( v17 ) { result = InterlockedDecrement((volatile LONG *)v17 + 1); if ( !result ) result = (**(int (__thiscall ***)(float *, signed int))v17)(v17, 1); } if ( v25 ) { result = InterlockedDecrement(v25 + 1); if ( !result ) result = (**(int (__thiscall ***)(void *, signed int))v25)((void *)v25, 1); } if ( v26 ) { result = InterlockedDecrement((volatile LONG *)v26 + 1); if ( !result ) result = (**(int (__thiscall ***)(float *, signed int))v26)(v26, 1); } if ( v24 ) { result = InterlockedDecrement(v24 + 1); if ( !result ) result = (**(int (__thiscall ***)(void *, signed int))v24)((void *)v24, 1); } return result; } // A211DC: using guessed type void *NiFloatData::`vftable'; // A40D7C: using guessed type void *NiAlphaRefController::`vftable'; //----- (008D98A0) -------------------------------------------------------- void *__thiscall sub_8D98A0(void *this, char a2) { void *v2; // esi v2 = this; sub_8D90F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008D98D0) -------------------------------------------------------- char __thiscall sub_8D98D0(int this) { _DWORD *v1; // esi void *v2; // eax float *v3; // ebx int v4; // edi _DWORD *v5; // eax _DWORD *v6; // eax int v7; // edx _DWORD *v8; // eax int v9; // ecx int v10; // eax _DWORD *v11; // eax int v12; // edi int v13; // eax int v14; // edi _DWORD *v15; // eax _DWORD *v16; // edi _DWORD *v17; // ebx int v18; // edi int v19; // ecx int v20; // ecx int v21; // ecx char *v22; // eax _DWORD *v23; // eax unsigned int v24; // ebx void **v26; // [esp+10h] [ebp-20h] int v27; // [esp+14h] [ebp-1Ch] int v28; // [esp+18h] [ebp-18h] void *v29; // [esp+1Ch] [ebp-14h] _DWORD *v30; // [esp+20h] [ebp-10h] int v31; // [esp+2Ch] [ebp-4h] v1 = (_DWORD *)this; if ( *(_BYTE *)(this + 288) ) { sub_8D86F0((_DWORD *)this); sub_85C6F0(v1); sub_85C4D0(v1); } sub_8D8670(v1); sub_8D7D30((int)v1); sub_8D7F20(v1); sub_8D9420(v1); v2 = operator new(0x60u); v29 = v2; v3 = 0; v31 = 0; if ( v2 ) v3 = sub_85EBC0((float *)v2); v4 = v1[73]; v31 = -1; if ( (float *)v4 != v3 ) { if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[73] = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)v3 + 1); } v5 = (_DWORD *)v1[73]; v5[8] = dword_ABD4FC; v5[9] = dword_ABD500; v5[10] = dword_ABD504; ++v5[22]; v6 = (_DWORD *)v1[73]; v6[11] = dword_ABD4FC; v6[12] = dword_ABD500; v7 = dword_ABD504; ++v6[22]; v6[13] = v7; v8 = (_DWORD *)v1[73]; v8[17] = dword_BA4724; v8[18] = dword_BA4728; v9 = dword_BA472C; ++v8[22]; v8[19] = v9; v10 = v1[73]; ++*(_DWORD *)(v10 + 88); *(float *)(v10 + 84) = 1.0; v11 = operator new(0x20u); v12 = (int)v11; v29 = v11; v31 = 1; if ( v11 ) { sub_85B2B0(v11); v13 = v12; *(_DWORD *)v12 = &NiAlphaProperty::`vftable'; *(_WORD *)(v12 + 28) = 236; *(_BYTE *)(v12 + 30) = 0; v30 = (_DWORD *)v12; } else { v30 = 0; v13 = 0; } v14 = v1[74]; v31 = -1; if ( v14 != v13 ) { if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v13 = (int)v30; } v1[74] = v13; if ( v13 ) InterlockedIncrement((volatile LONG *)(v13 + 4)); } *(_WORD *)(v1[74] + 28) |= 1u; *(_WORD *)(v1[74] + 28) |= 0x200u; *(_WORD *)(v1[74] + 28) = *(_WORD *)(v1[74] + 28) & 0xFBFF | 0x1800; *(_BYTE *)(v1[74] + 30) = 10; *(_WORD *)(v1[74] + 28) = *(_WORD *)(v1[74] + 28) & 0xFEFF | 0xE0; *(_WORD *)(v1[74] + 28) = *(_WORD *)(v1[74] + 28) & 0xFFED | 0xC; v15 = operator new(0x28u); v16 = v15; v29 = v15; v31 = 2; if ( v15 ) { sub_85B2B0(v15); v16[9] = 1; *v16 = &NiVertexColorProperty::`vftable'; *((_WORD *)v16 + 14) = 0; v16[8] = 0; v17 = v16; } else { v17 = 0; } v18 = v1[75]; v31 = -1; if ( (_DWORD *)v18 != v17 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v1[75] = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } *(_DWORD *)(v1[75] + 32) = 0; *(_DWORD *)(v1[75] + 36) = 1; sub_85B110(v1); v19 = v1[78]; if ( v19 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v19 + 72))(v1[74]); v20 = v1[76]; if ( v20 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v20 + 72))(v1[73]); v21 = v1[77]; if ( v21 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v21 + 72))(v1); sub_8D8670(v1); v27 = 0; v28 = -1; v26 = &NsFadeNode::FindChildGeometry::`vftable'; v31 = 3; LOBYTE(v22) = sub_8CFE00(&v26, (int)v1, (int)dword_BA4840, (int)v1); v29 = 0; if ( v1[63] > 0u ) { do { v23 = operator new(0x10u); if ( v23 ) { v23[3] = 0; v23[1] = 0; v23[2] = 0; *v23 = &NiTPointerList>::`vftable'; v30 = v23; } else { v30 = 0; v23 = 0; } v24 = v1[69]; if ( v24 < v1[68] || (sub_6AA490(v1 + 66, v24 + v1[71]), v23 = v30, v24 < v1[68]) ) { if ( v24 < v1[69] ) { if ( v23 ) { if ( !*(_DWORD *)(v1[67] + 4 * v24) ) ++v1[70]; } else if ( *(_DWORD *)(v1[67] + 4 * v24) ) { --v1[70]; } } else { v1[69] = v24 + 1; if ( v23 ) ++v1[70]; } *(_DWORD *)(v1[67] + 4 * v24) = v23; } v22 = (char *)v29 + 1; v29 = v22; } while ( (unsigned int)v22 < v1[63] ); } return (char)v22; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // A23DD8: using guessed type void *NiTPointerList>::`vftable'; // A40CCC: using guessed type void *NsFadeNode::FindChildGeometry::`vftable'; // ABD4FC: using guessed type int dword_ABD4FC; // ABD500: using guessed type int dword_ABD500; // ABD504: using guessed type int dword_ABD504; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (008D9D10) -------------------------------------------------------- void __thiscall sub_8D9D10(float *this) { float *v1; // esi _DWORD *v2; // ecx float *v3; // eax float v4; // ST0C_4 float v5; // ST10_4 float v6; // ST14_4 float v7; // ST18_4 double v8; // st7 double v9; // st6 float v10; // [esp+1Ch] [ebp-4h] v1 = this; if ( *((_DWORD *)this + 85) ) { sub_8D7BE0((int)this); v3 = (float *)*((_DWORD *)v1 + 85); v4 = v3[35] - v1[35]; v5 = v3[36] - v1[36]; v6 = v3[37] - v1[37]; v10 = v4 * v4 + v5 * v5 + v6 * v6; v7 = v1[59] * v1[59]; v8 = v10; v9 = v7; if ( v7 <= (double)v10 || v1[80] <= v9 ) { if ( 0.0 != v8 && v1[80] < v9 && v9 < v8 && *((_DWORD *)v1 + 89) != 2 ) { sub_8D9300(v2, v1[87], 1); goto LABEL_6; } } else if ( *((_DWORD *)v1 + 89) != 1 ) { sub_8D9300(v2, v1[87], 0); LABEL_6: v1[80] = v10; return; } v1[80] = v10; } } //----- (008D9E10) -------------------------------------------------------- void __thiscall sub_8D9E10(float *this, char a2) { float *v2; // esi char v3; // bl unsigned int v4; // edi int v5; // ecx __int16 v6; // ax int v7; // eax v2 = this; if ( byte_AC2638 ) { if ( !*((_BYTE *)this + 232) ) { v3 = *((_BYTE *)this + 345); sub_8D98D0((int)this); *((_BYTE *)v2 + 345) = v3; *((_BYTE *)v2 + 232) = 1; } if ( *((_BYTE *)v2 + 345) ) sub_8D9D10(v2); if ( a2 ) { if ( *((_DWORD *)v2 + 89) ) { v4 = 0; if ( *((_DWORD *)v2 + 63) ) { do { v5 = *(_DWORD *)(*((_DWORD *)v2 + 61) + 4 * v4); v6 = *(_WORD *)(v5 + 28); if ( !(((unsigned __int8)*(_WORD *)(v5 + 28) >> 1) & 1) || !(((unsigned __int8)v6 >> 3) & 1) || ((unsigned __int8)v6 >> 4) & 1 ) { sub_8592D0((_DWORD *)v5, v2[87], 1); } ++v4; } while ( v4 < *((_DWORD *)v2 + 63) ); } } } sub_8D9290(v2); v7 = *((_DWORD *)v2 + 37); v2[81] = v2[35]; v2[82] = v2[36]; *((_DWORD *)v2 + 83) = v7; } } // AC2638: using guessed type char byte_AC2638; //----- (008D9EF0) -------------------------------------------------------- void __thiscall sub_8D9EF0(float *this, float a2, int a3) { float *v3; // esi v3 = this; this[87] = a2; sub_8D9E10(this, 0); sub_859510(v3, a2, a3); } //----- (008D9F20) -------------------------------------------------------- void __thiscall sub_8D9F20(float *this, float a2) { int v2; // esi char v3; // bl v2 = (int)this; this[87] = a2; sub_8D9E10(this, 1); v3 = ((unsigned __int8)*(_WORD *)(v2 + 28) >> 3) & 1; *(_WORD *)(v2 + 28) |= 8u; sub_8595C0(v2, a2); if ( v3 ) *(_WORD *)(v2 + 28) |= 8u; else *(_WORD *)(v2 + 28) &= 0xFFF7u; } //----- (008D9F80) -------------------------------------------------------- char __thiscall sub_8D9F80(float *this, float a2) { int v2; // esi char v3; // bl char result; // al v2 = (int)this; this[87] = a2; sub_8D9E10(this, 1); v3 = ((unsigned __int8)*(_WORD *)(v2 + 28) >> 3) & 1; *(_WORD *)(v2 + 28) |= 8u; result = sub_8596B0(v2, a2); if ( v3 ) *(_WORD *)(v2 + 28) |= 8u; else *(_WORD *)(v2 + 28) &= 0xFFF7u; return result; } //----- (008D9FF0) -------------------------------------------------------- void __thiscall sub_8D9FF0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[80]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[80] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (008DA040) -------------------------------------------------------- void __thiscall sub_8DA040(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // edi int v11; // edi int v12; // edi int v13; // edi int v14; // edi int v15; // edi int v16; // edi int v17; // edi int v18; // edi int v19; // edi int v20; // edi int v21; // edi int v22; // edi int v23; // edi int v24; // edi int v25; // esi v1 = this; v2 = this[23]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[23] = 0; } v3 = v1[18]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[18] = 0; } v4 = v1[7]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[7] = 0; } v5 = v1[8]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[8] = 0; } v6 = v1[9]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[9] = 0; } v7 = v1[10]; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v1[10] = 0; } v8 = v1[1]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v1[1] = 0; } v9 = v1[2]; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v1[2] = 0; } v10 = v1[6]; if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v1[6] = 0; } v11 = v1[3]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v1[3] = 0; } v12 = v1[17]; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v1[17] = 0; } sub_85F7E0(v1 + 28); operator delete((void *)v1[24]); v13 = v1[23]; if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v14 = v1[18]; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); v15 = v1[17]; if ( v15 && !InterlockedDecrement((volatile LONG *)(v15 + 4)) && v15 ) (**(void (__thiscall ***)(int, signed int))v15)(v15, 1); v16 = v1[10]; if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v17 = v1[9]; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v18 = v1[8]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = v1[7]; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v20 = v1[6]; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); v21 = v1[5]; if ( v21 && !InterlockedDecrement((volatile LONG *)(v21 + 4)) && v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v22 = v1[4]; if ( v22 && !InterlockedDecrement((volatile LONG *)(v22 + 4)) && v22 ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v23 = v1[3]; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v24 = v1[2]; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = v1[1]; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) ) { if ( v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); } } //----- (008DA450) -------------------------------------------------------- void __thiscall sub_8DA450(int this) { int v1; // ebx unsigned int v2; // eax int *v3; // ecx double v4; // st7 int v5; // eax int v6; // eax float v7; // [esp+14h] [ebp-24h] float v8; // [esp+18h] [ebp-20h] float v9; // [esp+1Ch] [ebp-1Ch] float v10; // [esp+20h] [ebp-18h] float v11; // [esp+24h] [ebp-14h] float v12; // [esp+28h] [ebp-10h] char v13; // [esp+2Ch] [ebp-Ch] float v14; // [esp+30h] [ebp-8h] float v15; // [esp+34h] [ebp-4h] v1 = this; if ( *(_DWORD *)(this + 8) ) { v2 = (*(int (**)(void))(**(_DWORD **)(this + 16) + 64))(); v3 = *(int **)(v1 + 16); LODWORD(v14) = v2 >> 1; v4 = (double)(v2 >> 1); v5 = *v3; v14 = v4; LODWORD(v15) = (unsigned int)(*(int (**)(void))(v5 + 60))() >> 1; v6 = *(_DWORD *)(v1 + 8); v15 = (double)LODWORD(v15); qmemcpy(&v7, (const void *)(v6 + 240), 0x1Cu); v7 = -v15; v8 = v15; v9 = v14; v10 = -v14; v11 = 1.0; v12 = 100000.0; v13 = 1; sub_861DD0(v6, (int)&v7); sub_85BED0(*(_DWORD ***)(v1 + 8), 0.0, 1); } } //----- (008DA500) -------------------------------------------------------- int __thiscall sub_8DA500(_DWORD **this, unsigned int a2) { _DWORD **v2; // ebx float *v3; // esi _BYTE *v4; // edi double v5; // st7 double v6; // st6 _DWORD *v7; // eax _DWORD *v8; // esi int result; // eax float v10; // [esp+34h] [ebp+8h] float v11; // [esp+34h] [ebp+8h] v2 = this; v3 = (float *)operator new(0x30u); v4 = operator new(4u); v10 = (double)(a2 >> 1); v5 = v10; *v3 = v10; v3[1] = v10; v3[2] = -1000.0; *v4 = 1; v11 = 1.0 - v10; v3[3] = v11; v3[4] = v5; v3[5] = -1000.0; v4[1] = 1; v3[6] = v11; v3[7] = v11; v3[8] = -1000.0; v4[2] = 1; v3[9] = v5; v6 = v11; v3[10] = *(float *)&v6; v3[11] = -1000.0; v4[3] = 1; v7 = operator new(0xC4u); if ( v7 ) v8 = sub_888740(v7, 4u, (int)v3, 0, 0, 0, 0, (int)v4); else v8 = 0; if ( v8 ) InterlockedIncrement(v8 + 1); (*(void (__stdcall **)(_DWORD *, _DWORD))(*v2[17] + 116))(v8, 0); sub_85C4D0(v2[17]); sub_85C6F0(v2[17]); result = sub_85BED0((_DWORD **)v2[17], 0.0, 1); if ( v8 ) { result = InterlockedDecrement(v8 + 1); if ( !result ) result = (*(int (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); } return result; } //----- (008DA660) -------------------------------------------------------- char __thiscall sub_8DA660(float *this, float a2, float a3) { float *v3; // esi float *v4; // eax int *v5; // ecx double v6; // st7 double v7; // st6 float v8; // ecx double v9; // st7 double v10; // st7 float *v11; // ebx double v12; // st7 int *v14; // [esp+Ch] [ebp-54h] float v15; // [esp+14h] [ebp-4Ch] float v16; // [esp+18h] [ebp-48h] float v17; // [esp+1Ch] [ebp-44h] float v18; // [esp+20h] [ebp-40h] char v19; // [esp+2Ch] [ebp-34h] float v20; // [esp+30h] [ebp-30h] float v21; // [esp+34h] [ebp-2Ch] float v22; // [esp+38h] [ebp-28h] float v23; // [esp+3Ch] [ebp-24h] float v24; // [esp+40h] [ebp-20h] float v25; // [esp+44h] [ebp-1Ch] float v26; // [esp+48h] [ebp-18h] float v27; // [esp+4Ch] [ebp-14h] float v28; // [esp+50h] [ebp-10h] float v29; // [esp+54h] [ebp-Ch] float v30; // [esp+58h] [ebp-8h] float v31; // [esp+5Ch] [ebp-4h] float v32; // [esp+68h] [ebp+8h] float v33; // [esp+68h] [ebp+8h] float v34; // [esp+68h] [ebp+8h] float v35; // [esp+68h] [ebp+8h] float v36; // [esp+68h] [ebp+8h] float v37; // [esp+68h] [ebp+8h] float v38; // [esp+6Ch] [ebp+Ch] v3 = this; v4 = (float *)*((_DWORD *)this + 1); if ( v4 ) { v5 = (int *)*((_DWORD *)this + 18); v6 = v3[19] * 5000.0; v26 = *((float *)v5 + 9); v27 = *((float *)v5 + 10); v23 = v6; v7 = v3[20]; v28 = *((float *)v5 + 11); v24 = v7 * 5000.0; v25 = 5000.0 * v3[21]; v20 = v26 - v23; v21 = v27 - v24; v8 = v21; v9 = v28; v4[22] = v20; v10 = v9 - v25; v4[23] = v8; v22 = v10; v4[24] = v22; sub_85BED0(*((_DWORD ***)v3 + 1), a2, 1); v30 = v3[19] * v3[19]; v29 = v3[20] * v3[20]; v31 = v3[21] * v3[21]; if ( v29 <= (double)v30 ) { if ( v31 >= (double)v29 ) { v14 = &dword_ABD498; goto LABEL_9; } sub_862170(*((float **)v3 + 1), &v26, (float *)&dword_ABD4A4); } else { if ( v31 < (double)v30 ) { v14 = &dword_ABD4A4; LABEL_9: sub_862170(*((float **)v3 + 1), &v26, (float *)v14); goto LABEL_10; } sub_862170(*((float **)v3 + 1), &v26, (float *)&dword_ABD48C); } LABEL_10: sub_85BED0(*((_DWORD ***)v3 + 1), a2, 1); v11 = (float *)*((_DWORD *)v3 + 1); v32 = *(float *)(*((_DWORD *)v3 + 18) + 48); v20 = v26 - v11[35]; v21 = v27 - v11[36]; v22 = v28 - v11[37]; v33 = v32 + v32 * a3; v38 = v33; v34 = v21 * v21 + v20 * v20 + v22 * v22; v35 = sqrt(v34); qmemcpy(&v15, v11 + 60, 0x1Cu); v19 = 0; v36 = v38 / v35 * 1.049999952316284; v12 = v36; v37 = -v36; v15 = v37; v18 = v37; v16 = v12; v17 = v12; LOBYTE(v4) = sub_861DD0((int)v11, (int)&v15); } return (char)v4; } // ABD48C: using guessed type int dword_ABD48C; // ABD498: using guessed type int dword_ABD498; // ABD4A4: using guessed type int dword_ABD4A4; //----- (008DA830) -------------------------------------------------------- void __thiscall sub_8DA830(_DWORD *this) { _DWORD *v1; // ebx int v2; // eax double v3; // st7 float *v4; // eax double v5; // st7 float *v6; // edi double v7; // st6 double v8; // st4 float *v9; // eax double v10; // st7 double v11; // st6 float v12; // edx float *v13; // edi double v14; // st6 float *v15; // eax float v16; // ecx float v17; // esi float v18; // edx double v19; // st7 float *v20; // eax float v21; // edx float *v22; // eax float v23; // [esp+14h] [ebp-4Ch] float v24; // [esp+18h] [ebp-48h] float v25; // [esp+1Ch] [ebp-44h] float v26; // [esp+20h] [ebp-40h] float v27; // [esp+24h] [ebp-3Ch] float v28; // [esp+28h] [ebp-38h] int v29; // [esp+2Ch] [ebp-34h] int v30; // [esp+30h] [ebp-30h] int v31; // [esp+34h] [ebp-2Ch] float v32; // [esp+38h] [ebp-28h] float v33; // [esp+3Ch] [ebp-24h] float v34; // [esp+40h] [ebp-20h] float v35; // [esp+44h] [ebp-1Ch] float v36; // [esp+48h] [ebp-18h] float v37; // [esp+4Ch] [ebp-14h] float v38; // [esp+50h] [ebp-10h] float v39; // [esp+54h] [ebp-Ch] float v40; // [esp+58h] [ebp-8h] float v41; // [esp+5Ch] [ebp-4h] v1 = this; if ( this[1] ) { v2 = this[18]; if ( v2 ) { v3 = *(float *)(v2 + 48); v4 = (float *)this[1]; v41 = v3 * 2.099999904632568; v38 = v4[27]; v39 = v4[30]; v40 = v4[33]; v35 = -v38; v36 = -v39; v37 = -v40; v41 = 1.0 / v41; v32 = v41 * v35; v33 = v36 * v41; v34 = v41 * v37; v35 = v4[28]; v36 = v4[31]; v37 = v4[34]; v38 = v35 * v41; v39 = v36 * v41; v40 = v41 * v37; v23 = v38; v24 = v39; v25 = v40; v26 = v32; v27 = v33; v28 = v34; v29 = dword_BA45C0; v30 = dword_BA45C4; v31 = dword_BA45C8; v5 = v34; v6 = (float *)(this[7] + 224); v41 = v40 * v4[37] + v39 * v4[36] + v38 * v4[35]; v41 = v41 - 0.5; v38 = -v41; v7 = v33 * v4[36] + v32 * v4[35]; v8 = v4[37]; qmemcpy(v6, &v23, 0x24u); v41 = v5 * v8 + v7; v9 = (float *)this[7]; v41 = v41 - 0.5; v10 = -v41; v9[65] = v38; v39 = v10; v40 = 0.0; v39 = v39 - 0.009999999776482582; v9[66] = v39; v9[67] = 0.0; sub_85BED0((_DWORD **)this[7], 0.0, 1); if ( *(_BYTE *)v1 ) { v11 = v38 + 0.006000000052154064; qmemcpy((void *)(v1[8] + 224), &v23, 0x24u); v38 = v11; v39 = v39 + 0.006000000052154064; v12 = v38; v13 = (float *)(v1[9] + 224); v38 = v38 - 0.01200000010430813; v14 = v38; qmemcpy(v13, &v23, 0x24u); qmemcpy((void *)(v1[10] + 224), &v23, 0x24u); v15 = (float *)v1[8]; v16 = v40; v17 = v38; v15[65] = v12; v18 = v39; v38 = v14 + 0.006000000052154064; v15[66] = v39; v19 = v39 + 0.006000000052154064; v15[67] = v16; v20 = (float *)v1[9]; v20[65] = v17; v20[66] = v18; v39 = v19; v21 = v38; v20[67] = v16; v22 = (float *)v1[10]; v22[65] = v21; v22[66] = v39; v22[67] = v16; sub_85BED0((_DWORD **)v1[8], 0.0, 1); sub_85BED0((_DWORD **)v1[9], 0.0, 1); sub_85BED0((_DWORD **)v1[10], 0.0, 1); } } } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (008DAAF0) -------------------------------------------------------- int __thiscall sub_8DAAF0(_DWORD *this, void *a2) { _DWORD *v2; // esi int v3; // eax float *v4; // eax float *v5; // eax float *v6; // eax float *v7; // eax float *v8; // eax float *v9; // eax int v10; // ecx int v11; // ecx int v12; // ecx int result; // eax v2 = this; *(_BYTE *)this = (_BYTE)a2; v3 = this[6]; if ( (_BYTE)a2 ) { *((float *)this + 11) = 0.89999998; *((float *)this + 12) = 0.89999998; *((float *)this + 13) = 0.89999998; ++*(_DWORD *)(v3 + 88); *(float *)(v3 + 68) = 0.89999998; *(float *)(v3 + 72) = 0.89999998; *(float *)(v3 + 76) = 0.89999998; if ( !this[8] && !this[9] && !this[10] ) { v4 = (float *)operator new(0x178u); if ( v4 ) v5 = sub_8836F0(v4); else v5 = 0; sub_56FF80(v2 + 8, (int)v5); v6 = (float *)operator new(0x178u); if ( v6 ) v7 = sub_8836F0(v6); else v7 = 0; sub_56FF80(v2 + 9, (int)v7); v8 = (float *)operator new(0x178u); if ( v8 ) v9 = sub_8836F0(v8); else v9 = 0; sub_56FF80(v2 + 10, (int)v9); sub_8D9FF0((_DWORD *)v2[8], v2[4]); sub_8D9FF0((_DWORD *)v2[9], v2[4]); sub_8D9FF0((_DWORD *)v2[10], v2[4]); *(_DWORD *)(v2[8] + 324) = 2; *(_DWORD *)(v2[9] + 324) = 2; *(_DWORD *)(v2[10] + 324) = 2; *(_DWORD *)(v2[8] + 328) = 0; *(_DWORD *)(v2[9] + 328) = 0; *(_DWORD *)(v2[10] + 328) = 0; *(_DWORD *)(v2[8] + 332) = 1; *(_DWORD *)(v2[9] + 332) = 1; *(_DWORD *)(v2[10] + 332) = 1; v10 = v2[8]; *(_DWORD *)(v10 + 336) = 0; sub_8837D0(v10); v11 = v2[9]; *(_DWORD *)(v11 + 336) = 0; sub_8837D0(v11); v12 = v2[10]; *(_DWORD *)(v12 + 336) = 0; sub_8837D0(v12); } result = v2[7]; *(_BYTE *)(result + 176) = 1; if ( *(_BYTE *)v2 ) { *(_BYTE *)(v2[8] + 176) = 1; *(_BYTE *)(v2[9] + 176) = 1; result = v2[10]; *(_BYTE *)(result + 176) = 1; } } else { *((float *)this + 11) = 0.65600002; *((float *)this + 12) = 0.65600002; *((float *)this + 13) = 0.65600002; ++*(_DWORD *)(v3 + 88); *(float *)(v3 + 68) = 0.65600002; *(float *)(v3 + 72) = 0.65600002; *(float *)(v3 + 76) = 0.65600002; result = this[8]; if ( result && this[9] && this[10] ) { *(_BYTE *)(result + 176) = 0; *(_BYTE *)(this[9] + 176) = 0; *(_BYTE *)(this[10] + 176) = 0; } } return result; } //----- (008DAD80) -------------------------------------------------------- void __thiscall sub_8DAD80(int this, float a2, float a3) { int v3; // esi int v4; // ebx int v5; // edi int v6; // [esp+30h] [ebp+Ch] v3 = this; if ( *(_DWORD *)(this + 12) && *(_DWORD *)(this + 72) && *(_DWORD *)(this + 16) ) { sub_8DA660((float *)this, a2, a3); sub_8DA450(v3); (*(void (__stdcall **)(int))(**(_DWORD **)(v3 + 12) + 80))(v3 + 56); sub_44ED20(*(_DWORD *)(v3 + 12), *(_DWORD *)(v3 + 20), 7); v4 = *(_DWORD *)(*(_DWORD *)(v3 + 12) + 8); if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); sub_44EE50(*(_DWORD **)(v3 + 12), *(_DWORD *)(v3 + 92)); sub_85FB50(*(float **)(v3 + 4), *(_DWORD *)(v3 + 72), (_DWORD *)(v3 + 112), 0); v5 = *(_DWORD *)(*(_DWORD *)(v3 + 12) + 8); v6 = *(_DWORD *)(v3 + 12); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v6 + 8) = 0; } sub_85FB50(*(float **)(v3 + 8), *(_DWORD *)(v3 + 68), (_DWORD *)(v3 + 112), 0); sub_44EDF0(*(_DWORD **)(v3 + 12)); sub_44EE50(*(_DWORD **)(v3 + 12), v4); sub_8DA830((_DWORD *)v3); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); } } } //----- (008DAEE0) -------------------------------------------------------- void *sub_8DAEE0() { return &unk_BA68FC; } //----- (008DAEF0) -------------------------------------------------------- void *__thiscall sub_8DAEF0(void *this, char a2) { void *v2; // esi v2 = this; sub_8E4AB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008DAF20) -------------------------------------------------------- int __thiscall sub_8DAF20(int this) { int v1; // ebx _DWORD *v2; // esi int v3; // esi _DWORD *v4; // eax int v5; // eax int v6; // esi float *v7; // eax int v8; // eax _DWORD *v9; // eax int v10; // edi int v11; // esi float *v12; // eax float *v13; // ecx float v14; // ecx float v15; // eax _DWORD *v16; // eax _DWORD *v17; // esi _DWORD *v18; // edi int v19; // esi _DWORD *v20; // eax int v21; // esi _DWORD *v22; // ecx _DWORD *v23; // eax int v24; // esi _DWORD *v25; // ecx void *v26; // eax float *v27; // edi int v28; // esi _DWORD *v29; // eax int v30; // eax int v31; // esi _DWORD *v32; // ecx _DWORD *v33; // eax _DWORD *v34; // esi _DWORD *v35; // ecx _DWORD *v36; // eax int v37; // esi _DWORD *v38; // ecx _DWORD *v39; // eax _DWORD *v40; // edi int v41; // esi _DWORD *v42; // eax int v43; // esi void *v44; // eax float *v45; // esi int v46; // ecx volatile LONG *v47; // eax volatile LONG *v48; // edi int v49; // eax int v50; // eax int v51; // eax int v52; // eax void (__thiscall ***v53)(_DWORD, signed int); // esi void (__thiscall ***v54)(_DWORD, signed int); // esi void (__thiscall ***v55)(_DWORD, signed int); // esi char v57; // [esp+24h] [ebp-78h] float v58; // [esp+34h] [ebp-68h] float v59; // [esp+38h] [ebp-64h] float v60; // [esp+40h] [ebp-5Ch] float v61; // [esp+44h] [ebp-58h] float v62; // [esp+48h] [ebp-54h] float v63; // [esp+4Ch] [ebp-50h] float v64; // [esp+50h] [ebp-4Ch] float v65; // [esp+54h] [ebp-48h] float v66; // [esp+58h] [ebp-44h] float v67; // [esp+5Ch] [ebp-40h] float v68; // [esp+60h] [ebp-3Ch] volatile LONG *v69; // [esp+64h] [ebp-38h] float *v70; // [esp+68h] [ebp-34h] int v71; // [esp+6Ch] [ebp-30h] int v72; // [esp+70h] [ebp-2Ch] int v73; // [esp+74h] [ebp-28h] int v74; // [esp+78h] [ebp-24h] void *v75; // [esp+7Ch] [ebp-20h] int v76; // [esp+80h] [ebp-1Ch] int v77; // [esp+84h] [ebp-18h] _DWORD *v78; // [esp+88h] [ebp-14h] int v79; // [esp+8Ch] [ebp-10h] int v80; // [esp+98h] [ebp-4h] v1 = this; v74 = this; *(_DWORD *)(this + 4) = 0; v80 = 0; *(_DWORD *)(this + 8) = 0; *(_DWORD *)(this + 12) = 0; *(_DWORD *)(this + 16) = 0; *(_DWORD *)(this + 20) = 0; *(_DWORD *)(this + 24) = 0; *(_DWORD *)(this + 28) = 0; *(_DWORD *)(this + 32) = 0; *(_DWORD *)(this + 36) = 0; *(_DWORD *)(this + 40) = 0; *(float *)(this + 44) = 0.0; *(float *)(this + 48) = 0.0; *(float *)(this + 52) = 0.0; *(float *)(this + 56) = 0.0; *(float *)(this + 60) = 0.0; *(float *)(this + 64) = 0.0; *(_DWORD *)(this + 68) = 0; *(_DWORD *)(this + 72) = 0; *(_DWORD *)(this + 92) = 0; v2 = (_DWORD *)(this + 96); *v2 = 0; v2[1] = 0; v2[2] = 0; v2[3] = 128; sub_85F230((_DWORD *)(this + 96), 0x80u); LOBYTE(v80) = 13; sub_85F910((_DWORD *)(v1 + 112), (int)v2); v3 = *(_DWORD *)(v1 + 72); LOBYTE(v80) = 14; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v1 + 72) = 0; } v66 = 0.0; v67 = -1.0; *(float *)(v1 + 76) = 0.0; *(float *)(v1 + 80) = v67; v68 = 0.0; *(float *)(v1 + 84) = 0.0; v4 = operator new(0x128u); v75 = v4; LOBYTE(v80) = 15; if ( v4 ) { v5 = sub_862BA0(v4); v79 = v5; } else { v79 = 0; v5 = 0; } v6 = *(_DWORD *)(v1 + 4); LOBYTE(v80) = 14; if ( v6 != v5 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v5 = v79; } *(_DWORD *)(v1 + 4) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v7 = *(float **)(v1 + 4); v66 = 0.0; v67 = 5000.0; v7[22] = 0.0; v7[23] = v67; v68 = 0.0; v7[24] = 0.0; sub_85BED0(*(_DWORD ***)(v1 + 4), 0.0, 1); v8 = *(_DWORD *)(v1 + 4); qmemcpy(&v57, (const void *)(v8 + 240), 0x1Cu); v59 = 10000.0; v58 = 100.0; sub_861DD0(v8, (int)&v57); v9 = operator new(0x128u); v75 = v9; LOBYTE(v80) = 16; if ( v9 ) v10 = sub_862BA0(v9); else v10 = 0; v11 = *(_DWORD *)(v1 + 8); LOBYTE(v80) = 14; if ( v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); *(_DWORD *)(v1 + 8) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } v12 = *(float **)(v1 + 8); v66 = 0.5; v67 = 0.5; v12[22] = 0.5; v68 = 0.0; v12[23] = 0.5; v12[24] = v68; sub_85BED0(*(_DWORD ***)(v1 + 8), 0.0, 1); v13 = *(float **)(v1 + 8); v60 = 0.5; v61 = 0.5; v62 = -1000.0; v63 = 0.0; v64 = 1.0; v65 = 0.0; sub_862170(v13, &v60, &v63); sub_85BED0(*(_DWORD ***)(v1 + 8), 0.0, 1); *(float *)(v1 + 44) = 0.89999998; v66 = 1.0; *(float *)(v1 + 48) = 0.89999998; v14 = v66; v67 = 1.0; v68 = 1.0; *(float *)(v1 + 52) = 0.89999998; v15 = v68; *(float *)(v1 + 56) = v14; *(float *)(v1 + 60) = 1.0; *(_BYTE *)v1 = 1; *(float *)(v1 + 64) = v15; v16 = operator new(0x2Cu); v17 = v16; v75 = v16; LOBYTE(v80) = 17; if ( v16 ) { sub_872A60(v16); *v17 = &MasterPropertyAccumulator::`vftable'; v17[6] = 0; v17[4] = 0; v17[5] = 0; v17[3] = &NiTPointerList>::`vftable'; v17[10] = 0; v17[8] = 0; v17[9] = 0; v17[7] = &NiTPointerList::`vftable'; v18 = v17; } else { v18 = 0; } v19 = *(_DWORD *)(v1 + 92); LOBYTE(v80) = 14; if ( (_DWORD *)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); *(_DWORD *)(v1 + 92) = v18; if ( v18 ) InterlockedIncrement(v18 + 1); } v20 = operator new(0x30u); v21 = (int)v20; v75 = v20; LOBYTE(v80) = 18; if ( v20 ) { sub_85B2B0(v20); *(_DWORD *)v21 = &NiFogProperty::`vftable'; *(float *)(v21 + 36) = 0.0; *(float *)(v21 + 40) = 0.0; *(float *)(v21 + 44) = 0.0; *(_WORD *)(v21 + 28) = 0; *(float *)(v21 + 32) = 1.0; *(_DWORD *)(v21 + 36) = dword_BA4724; *(_DWORD *)(v21 + 40) = dword_BA4728; *(_DWORD *)(v21 + 44) = dword_BA472C; } else { v21 = 0; } v76 = v21; v73 = v21; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); *(_WORD *)(v21 + 28) &= 0xFFFEu; v77 = v21; InterlockedIncrement((volatile LONG *)(v21 + 4)); v22 = (_DWORD *)(*(_DWORD *)(v1 + 92) + 12); LOBYTE(v80) = 20; sub_8A6330(v22, &v77); LOBYTE(v80) = 19; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); v23 = operator new(0x28u); v24 = (int)v23; v75 = v23; LOBYTE(v80) = 21; if ( v23 ) { sub_85B2B0(v23); *(_DWORD *)v24 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v24 + 28) = 0; *(_DWORD *)(v24 + 32) = 0; *(_DWORD *)(v24 + 36) = 1; } else { v24 = 0; } v77 = v24; v72 = v24; if ( v24 ) InterlockedIncrement((volatile LONG *)(v24 + 4)); *(_DWORD *)(v24 + 32) = 0; *(_DWORD *)(v24 + 36) = 0; v78 = (_DWORD *)v24; InterlockedIncrement((volatile LONG *)(v24 + 4)); v25 = (_DWORD *)(*(_DWORD *)(v1 + 92) + 12); LOBYTE(v80) = 23; sub_8A6330(v25, (int *)&v78); LOBYTE(v80) = 22; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v26 = operator new(0x60u); v75 = v26; LOBYTE(v80) = 24; if ( v26 ) v27 = sub_85EBC0((float *)v26); else v27 = 0; v28 = *(_DWORD *)(v1 + 24); LOBYTE(v80) = 22; if ( (float *)v28 != v27 ) { if ( v28 && !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); *(_DWORD *)(v1 + 24) = v27; if ( v27 ) InterlockedIncrement((volatile LONG *)v27 + 1); } v29 = *(_DWORD **)(v1 + 24); v29[17] = *(_DWORD *)(v1 + 44); v29[18] = *(_DWORD *)(v1 + 48); v29[19] = *(_DWORD *)(v1 + 52); ++v29[22]; v30 = *(_DWORD *)(v1 + 24); ++*(_DWORD *)(v30 + 88); *(float *)(v30 + 84) = 1.0; v31 = *(_DWORD *)(v1 + 24); v78 = (_DWORD *)v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); v32 = (_DWORD *)(*(_DWORD *)(v1 + 92) + 12); LOBYTE(v80) = 25; sub_8A6330(v32, (int *)&v78); LOBYTE(v80) = 22; if ( v31 && !InterlockedDecrement((volatile LONG *)(v31 + 4)) ) (**(void (__thiscall ***)(int, signed int))v31)(v31, 1); v33 = operator new(0x44u); v75 = v33; LOBYTE(v80) = 26; if ( v33 ) v34 = sub_863BB0(v33); else v34 = 0; v78 = v34; if ( v34 ) InterlockedIncrement(v34 + 1); v35 = (_DWORD *)(*(_DWORD *)(v1 + 92) + 12); LOBYTE(v80) = 27; sub_8A6330(v35, (int *)&v78); LOBYTE(v80) = 22; if ( v34 && !InterlockedDecrement(v34 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v34)(v34, 1); v36 = operator new(0x20u); v37 = (int)v36; v75 = v36; LOBYTE(v80) = 28; if ( v36 ) { sub_85B2B0(v36); *(_DWORD *)v37 = &NiShadeProperty::`vftable'; *(_WORD *)(v37 + 28) = 1; } else { v37 = 0; } *(_WORD *)(v37 + 28) &= 0xFFFEu; v78 = (_DWORD *)v37; InterlockedIncrement((volatile LONG *)(v37 + 4)); v38 = (_DWORD *)(*(_DWORD *)(v1 + 92) + 12); LOBYTE(v80) = 29; sub_8A6330(v38, (int *)&v78); LOBYTE(v80) = 22; if ( !InterlockedDecrement((volatile LONG *)(v37 + 4)) ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); v39 = operator new(0xE8u); v75 = v39; LOBYTE(v80) = 30; if ( v39 ) v40 = sub_85A1C0(v39, 0); else v40 = 0; v41 = *(_DWORD *)(v1 + 68); LOBYTE(v80) = 22; if ( (_DWORD *)v41 != v40 ) { if ( v41 && !InterlockedDecrement((volatile LONG *)(v41 + 4)) && v41 ) (**(void (__thiscall ***)(int, signed int))v41)(v41, 1); *(_DWORD *)(v1 + 68) = v40; if ( v40 ) InterlockedIncrement(v40 + 1); } v42 = operator new(0x28u); v43 = (int)v42; v75 = v42; LOBYTE(v80) = 31; if ( v42 ) { sub_85B2B0(v42); *(_DWORD *)v43 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v43 + 28) = 0; *(_DWORD *)(v43 + 32) = 0; *(_DWORD *)(v43 + 36) = 1; } else { v43 = 0; } v78 = (_DWORD *)v43; v71 = v43; if ( v43 ) InterlockedIncrement((volatile LONG *)(v43 + 4)); *(_DWORD *)(v43 + 32) = 0; *(_DWORD *)(v43 + 36) = 0; v75 = *(void **)(v1 + 68); v79 = v43; InterlockedIncrement((volatile LONG *)(v43 + 4)); LOBYTE(v80) = 33; sub_8A6330((_DWORD *)v75 + 39, &v79); LOBYTE(v80) = 32; if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); v44 = operator new(0x60u); v75 = v44; LOBYTE(v80) = 34; if ( v44 ) v45 = sub_85EBC0((float *)v44); else v45 = 0; v70 = v45; if ( v45 ) InterlockedIncrement((volatile LONG *)v45 + 1); v45[17] = *(float *)(v1 + 56); v45[18] = *(float *)(v1 + 60); v46 = *(_DWORD *)(v1 + 64); ++*((_DWORD *)v45 + 22); *((_DWORD *)v45 + 19) = v46; v79 = *(_DWORD *)(v1 + 68); v75 = v45; InterlockedIncrement((volatile LONG *)v45 + 1); LOBYTE(v80) = 36; sub_8A6330((_DWORD *)(v79 + 156), (int *)&v75); LOBYTE(v80) = 35; if ( !InterlockedDecrement((volatile LONG *)v45 + 1) ) (**(void (__thiscall ***)(float *, signed int))v45)(v45, 1); v47 = (volatile LONG *)operator new(0x20u); v48 = v47; v75 = (void *)v47; LOBYTE(v80) = 37; if ( v47 ) { sub_85B2B0(v47); *v48 = (volatile LONG)&NiShadeProperty::`vftable'; *((_WORD *)v48 + 14) = 1; } else { v48 = 0; } v69 = v48; if ( v48 ) InterlockedIncrement(v48 + 1); *((_WORD *)v48 + 14) &= 0xFFFEu; v79 = *(_DWORD *)(v1 + 68); v75 = (void *)v48; InterlockedIncrement(v48 + 1); LOBYTE(v80) = 39; sub_8A6330((_DWORD *)(v79 + 156), (int *)&v75); LOBYTE(v80) = 38; if ( !InterlockedDecrement(v48 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v48)(v48, 1); v49 = *(_DWORD *)(v1 + 28); v79 = v49; if ( v49 ) { if ( !InterlockedDecrement((volatile LONG *)(v49 + 4)) && v79 ) (**(void (__stdcall ***)(signed int))v79)(1); *(_DWORD *)(v1 + 28) = 0; } v50 = *(_DWORD *)(v1 + 32); v79 = v50; if ( v50 ) { if ( !InterlockedDecrement((volatile LONG *)(v50 + 4)) && v79 ) (**(void (__stdcall ***)(signed int))v79)(1); *(_DWORD *)(v1 + 32) = 0; } v51 = *(_DWORD *)(v1 + 36); v79 = v51; if ( v51 ) { if ( !InterlockedDecrement((volatile LONG *)(v51 + 4)) && v79 ) (**(void (__stdcall ***)(signed int))v79)(1); *(_DWORD *)(v1 + 36) = 0; } v52 = *(_DWORD *)(v1 + 40); v79 = v52; if ( v52 ) { if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) && v79 ) (**(void (__stdcall ***)(signed int))v79)(1); *(_DWORD *)(v1 + 40) = 0; } LOBYTE(v80) = 35; if ( !InterlockedDecrement(v48 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v48)(v48, 1); LOBYTE(v80) = 32; if ( !InterlockedDecrement((volatile LONG *)v45 + 1) ) (**(void (__thiscall ***)(float *, signed int))v45)(v45, 1); v53 = (void (__thiscall ***)(_DWORD, signed int))v78; LOBYTE(v80) = 22; if ( !InterlockedDecrement(v78 + 1) ) (**v53)(v53, 1); v54 = (void (__thiscall ***)(_DWORD, signed int))v77; LOBYTE(v80) = 19; if ( !InterlockedDecrement((volatile LONG *)(v77 + 4)) ) (**v54)(v54, 1); v55 = (void (__thiscall ***)(_DWORD, signed int))v76; LOBYTE(v80) = 14; if ( !InterlockedDecrement((volatile LONG *)(v76 + 4)) ) (**v55)(v55, 1); return v1; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9A8C7C: using guessed type void *NiFogProperty::`vftable'; // 9F42A4: using guessed type void *NiTPointerList::`vftable'; // A23DD8: using guessed type void *NiTPointerList>::`vftable'; // A26AAC: using guessed type void *NiShadeProperty::`vftable'; // A40E64: using guessed type void *MasterPropertyAccumulator::`vftable'; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (008DB8D0) -------------------------------------------------------- unsigned __int8 *__cdecl sub_8DB8D0(volatile LONG *a1, char a2) { void *v2; // eax unsigned __int8 *v3; // esi volatile LONG *v4; // ebx unsigned __int8 *result; // eax int (__thiscall *v6)(volatile LONG *); // eax int v7; // eax volatile LONG *v8; // eax volatile LONG *v9; // ebx int v10; // ecx int v11; // ST04_4 int *v12; // eax _DWORD *v13; // eax int v14; // edi _DWORD *v15; // ebx float *v16; // eax float *v17; // ebx int v18; // edi int v19; // ecx int v20; // [esp+10h] [ebp-1Ch] int v21; // [esp+14h] [ebp-18h] int v22; // [esp+18h] [ebp-14h] void *v23; // [esp+1Ch] [ebp-10h] int v24; // [esp+28h] [ebp-4h] volatile LONG *v25; // [esp+34h] [ebp+8h] v2 = operator new(0x100u); v23 = v2; v3 = 0; v24 = 0; if ( v2 ) v3 = (unsigned __int8 *)sub_8DAF20((int)v2); v4 = (volatile LONG *)*((_DWORD *)v3 + 3); v24 = -1; if ( v4 != a1 ) { if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); *((_DWORD *)v3 + 3) = a1; if ( a1 ) InterlockedIncrement(a1 + 1); } if ( !*((_DWORD *)v3 + 3) ) goto LABEL_41; v6 = *(int (__thiscall **)(volatile LONG *))(*a1 + 104); v20 = 6; v21 = 3; v22 = 2; v7 = v6(a1); v20 = (*(_BYTE *)((*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v7 + 76))(v7, 0) + 1) != 16) + 1; v8 = sub_867510(1 << a2, 1 << a2, *((_DWORD *)v3 + 3), &v20); v9 = (volatile LONG *)*((_DWORD *)v3 + 4); v25 = v8; if ( v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement(v9 + 1) && v9 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v9)(v9, 1); v8 = v25; } *((_DWORD *)v3 + 4) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } sub_8DA500((_DWORD **)v3, 1 << a2); v10 = *((_DWORD *)v3 + 4); if ( v10 ) { v11 = *((_DWORD *)v3 + 3); v12 = (int *)(*(int (**)(void))(*(_DWORD *)v10 + 68))(); v13 = sub_867400(v12, v11, 1, 1); v14 = *((_DWORD *)v3 + 5); v15 = v13; if ( (_DWORD *)v14 != v13 ) { if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); *((_DWORD *)v3 + 5) = v15; if ( v15 ) InterlockedIncrement(v15 + 1); } v16 = (float *)operator new(0x178u); v24 = 1; if ( v16 ) v17 = sub_8836F0(v16); else v17 = 0; v18 = *((_DWORD *)v3 + 7); v24 = -1; if ( (float *)v18 != v17 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); *((_DWORD *)v3 + 7) = v17; if ( v17 ) InterlockedIncrement((volatile LONG *)v17 + 1); } sub_8D9FF0(*((_DWORD **)v3 + 7), *((_DWORD *)v3 + 4)); *(_DWORD *)(*((_DWORD *)v3 + 7) + 324) = 2; *(_DWORD *)(*((_DWORD *)v3 + 7) + 328) = 0; *(_DWORD *)(*((_DWORD *)v3 + 7) + 332) = 1; v19 = *((_DWORD *)v3 + 7); *(_DWORD *)(v19 + 336) = 0; sub_8837D0(v19); sub_8DAAF0(v3, (void *)*v3); result = v3; } else { LABEL_41: sub_8DA040(v3); operator delete(v3); result = 0; } return result; } //----- (008DBB60) -------------------------------------------------------- char **__stdcall sub_8DBB60(char *a1, int a2, int a3) { char **v3; // esi char *v4; // eax char *v5; // eax void **v7; // [esp+4h] [ebp-Ch] v3 = (char **)operator new(0xCu); if ( !v3 ) { a1 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a1); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v4 = a1; v3[1] = (char *)a2; *v3 = v4; if ( v3 != (char **)-8 ) { v5 = *(char **)a3; v3[2] = *(char **)a3; if ( v5 ) InterlockedIncrement((volatile LONG *)v5 + 1); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DBBD0) -------------------------------------------------------- void __thiscall sub_8DBBD0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi int v3; // esi _DWORD *v4; // [esp+8h] [ebp-4h] v1 = this; v2 = *(_DWORD **)*this; *(_DWORD *)*this = *this; *(_DWORD *)(*this + 4) = *this; this[1] = 0; if ( v2 != (_DWORD *)*this ) { do { v3 = v2[2]; v4 = (_DWORD *)*v2; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v2); v2 = v4; } while ( v4 != (_DWORD *)*v1 ); } } //----- (008DBC30) -------------------------------------------------------- signed int __stdcall sub_8DBC30(int a1, char **a2) { int v2; // esi volatile LONG *v3; // ebx int v4; // eax char **v6; // esi char *v7; // edi char **v8; // eax char *v9; // ecx v2 = a1; if ( !sub_8CF140(a1, "#LINK") ) return 1; v3 = *(volatile LONG **)(v2 + 32); if ( v3 ) { v4 = (*(int (__thiscall **)(_DWORD))(*v3 + 4))(*(_DWORD *)(v2 + 32)); if ( v4 ) { while ( (_UNKNOWN *)v4 != &unk_BA537C ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) return -1; } a1 = (int)v3; InterlockedIncrement(v3 + 1); v6 = a2; v7 = *a2; v8 = sub_8DBB60(*a2, *((_DWORD *)*a2 + 1), (int)&a1); v9 = v6[1]; if ( (unsigned int)(1073741822 - (_DWORD)v9) < 1 ) std::_Xlength_error("list too long"); v6[1] = v9 + 1; *((_DWORD *)v7 + 1) = v8; *(_DWORD *)v8[1] = v8; if ( !InterlockedDecrement(v3 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v3)(v3, 1); } } return -1; } //----- (008DBD60) -------------------------------------------------------- signed int __stdcall sub_8DBD60(volatile LONG *a1, char **a2) { int v2; // eax char *v4; // edi int v5; // ST04_4 char *v6; // ST00_4 char **v7; // eax char *v8; // ecx int v9; // [esp+10h] [ebp-10h] int v10; // [esp+1Ch] [ebp-4h] if ( !a1 ) return 1; v2 = (*(int (__thiscall **)(volatile LONG *))(*a1 + 4))(a1); if ( !v2 ) return 1; while ( (_UNKNOWN *)v2 != &unk_BA537C ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 1; } v9 = (int)a1; InterlockedIncrement(a1 + 1); v4 = *a2; v5 = *((_DWORD *)*a2 + 1); v6 = *a2; v10 = 0; v7 = sub_8DBB60(v6, v5, (int)&v9); v8 = a2[1]; if ( (unsigned int)(1073741822 - (_DWORD)v8) < 1 ) std::_Xlength_error("list too long"); a2[1] = v8 + 1; *((_DWORD *)v4 + 1) = v7; *(_DWORD *)v7[1] = v7; v10 = -1; if ( !InterlockedDecrement(a1 + 1) ) (**(void (__stdcall ***)(signed int))a1)(1); return -1; } //----- (008DBE50) -------------------------------------------------------- void __thiscall sub_8DBE50(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; v2 = *this; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *v1 = 0; } sub_8DBBD0(v1 + 1); sub_8DBBD0(v1 + 4); } //----- (008DBE90) -------------------------------------------------------- char __thiscall sub_8DBE90(_DWORD *this) { _DWORD *v1; // edi int v2; // esi _DWORD *v3; // ebx _DWORD *v4; // eax _DWORD *v5; // esi v1 = this; v2 = *this; v3 = 0; if ( *this ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); *v1 = 0; } sub_8DBBD0(v1 + 1); sub_8DBBD0(v1 + 4); v4 = operator new(0x1A0u); if ( v4 ) v3 = sub_8AD340(v4); v5 = (_DWORD *)*v1; if ( (_DWORD *)*v1 != v3 ) { if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); *v1 = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } return 1; } //----- (008DBF60) -------------------------------------------------------- void __thiscall sub_8DBF60(void **this) { void **v1; // esi v1 = this; sub_8DBBD0(this); operator delete(*v1); } //----- (008DBFB0) -------------------------------------------------------- int *__thiscall sub_8DBFB0(int *this) { int *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax int v4; // edi void **v6; // [esp+10h] [ebp-30h] void **v7; // [esp+1Ch] [ebp-24h] int *v8; // [esp+28h] [ebp-18h] char *v9; // [esp+2Ch] [ebp-14h] char *v10; // [esp+30h] [ebp-10h] int v11; // [esp+3Ch] [ebp-4h] v1 = this; v8 = this; *this = 0; v11 = 0; this[2] = 0; v2 = operator new(0xCu); if ( !v2 ) { v9 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v9); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[1] = (int)v2; *v2 = v2; *(_DWORD *)(v1[1] + 4) = v1[1]; LOBYTE(v11) = 1; v1[5] = 0; v3 = operator new(0xCu); if ( !v3 ) { v10 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&v10); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } v1[4] = (int)v3; *v3 = v3; *(_DWORD *)(v1[4] + 4) = v1[4]; v4 = *v1; LOBYTE(v11) = 2; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v1 = 0; } return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DC0B0) -------------------------------------------------------- void __thiscall sub_8DC0B0(_DWORD *this) { int *v1; // esi void **v2; // edi int v3; // esi v1 = this; v2 = (void **)(this + 4); sub_8DBBD0(this + 4); operator delete(*v2); sub_8DBBD0(v1 + 1); operator delete((void *)v1[1]); v3 = *v1; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (008DC160) -------------------------------------------------------- void __thiscall sub_8DC160(_DWORD **this, int a2) { int v2; // edi void ***v3; // ebx void **v4; // eax int v5; // eax int v6; // ecx int v7; // edx int v8; // ecx long double v9; // st7 int v10; // edx double v11; // st7 _DWORD **v12; // ecx void **v13; // esi volatile LONG *v14; // edi float v15; // esi int *v16; // eax int v17; // ecx int v18; // esi bool v19; // zf void (__thiscall ***v20)(_DWORD, signed int); // edi void (__thiscall ***v21)(_DWORD, signed int); // edi int v22; // ebx int v23; // ecx _DWORD **v24; // edx _DWORD *v25; // ebx _DWORD *v26; // edi int v27; // eax float v28; // eax int v29; // ebx float *v30; // eax float *v31; // eax double v32; // st7 _DWORD *v33; // ecx float v34; // eax int v35; // ebx void *v36; // esi int v37; // edi void **v38; // [esp+14h] [ebp-150h] int v39; // [esp+18h] [ebp-14Ch] int v40; // [esp+1Ch] [ebp-148h] void **v41; // [esp+20h] [ebp-144h] int v42; // [esp+24h] [ebp-140h] int v43; // [esp+28h] [ebp-13Ch] float v44; // [esp+2Ch] [ebp-138h] int v45; // [esp+30h] [ebp-134h] float v46; // [esp+34h] [ebp-130h] float v47; // [esp+38h] [ebp-12Ch] float v48; // [esp+3Ch] [ebp-128h] float v49; // [esp+40h] [ebp-124h] void *v50; // [esp+44h] [ebp-120h] void **v51; // [esp+48h] [ebp-11Ch] int v52; // [esp+4Ch] [ebp-118h] int v53; // [esp+50h] [ebp-114h] _DWORD *v54; // [esp+54h] [ebp-110h] float v55; // [esp+58h] [ebp-10Ch] _DWORD **v56; // [esp+5Ch] [ebp-108h] float v57; // [esp+60h] [ebp-104h] int v58; // [esp+64h] [ebp-100h] char v59; // [esp+68h] [ebp-FCh] char v60; // [esp+8Ch] [ebp-D8h] char v61; // [esp+B0h] [ebp-B4h] float v62; // [esp+D4h] [ebp-90h] float v63; // [esp+D8h] [ebp-8Ch] float v64; // [esp+DCh] [ebp-88h] float v65; // [esp+E0h] [ebp-84h] char v66; // [esp+E4h] [ebp-80h] float v67; // [esp+108h] [ebp-5Ch] float v68; // [esp+10Ch] [ebp-58h] float v69; // [esp+110h] [ebp-54h] float v70; // [esp+114h] [ebp-50h] void **v71; // [esp+118h] [ebp-4Ch] int v72; // [esp+11Ch] [ebp-48h] int v73; // [esp+120h] [ebp-44h] void *v74; // [esp+124h] [ebp-40h] int v75; // [esp+134h] [ebp-30h] unsigned int v76; // [esp+138h] [ebp-2Ch] void *v77; // [esp+140h] [ebp-24h] int v78; // [esp+144h] [ebp-20h] int v79; // [esp+148h] [ebp-1Ch] int v80; // [esp+150h] [ebp-14h] int v81; // [esp+160h] [ebp-4h] v2 = (int)this; v56 = this; v54 = (_DWORD *)a2; v42 = 0; v43 = -1; v41 = &FindMultiLinkNode::`vftable'; v81 = 0; v39 = 0; v40 = -1; v38 = &FindRoomNode::`vftable'; LOBYTE(v81) = 1; sub_8CFE00(&v41, a2, (int)dword_BA457C, (int)(this + 4)); v3 = (void ***)(v2 + 4); sub_8CFE00(&v38, (int)v54, (int)dword_BA457C, v2 + 4); if ( *(_DWORD *)(v2 + 8) ) { v4 = *v3; v58 = 0; if ( *v4 != v4 ) { do { v5 = *((_DWORD *)**v3 + 2); if ( v5 ) { v6 = *(_DWORD *)(v5 + 32); v7 = *(_DWORD *)(v5 + 140); v57 = *(float *)(v5 + 152); v58 = v6; v8 = *(_DWORD *)(v5 + 144); v9 = fabs(v57); *(_DWORD *)(v5 + 88) = v7; v57 = v9; v10 = *(_DWORD *)(v5 + 148); v11 = v57; *(_DWORD *)(v5 + 92) = v8; *(float *)(v5 + 100) = v11; qmemcpy((void *)(v5 + 52), (const void *)(v5 + 104), 0x24u); v12 = v56; *(_DWORD *)(v5 + 96) = v10; sub_8AD530(*v12, v5); } v13 = (void **)**v3; if ( v13 != *v3 ) { *(_DWORD *)v13[1] = *v13; *((_DWORD *)*v13 + 1) = v13[1]; v14 = (volatile LONG *)v13[2]; if ( v14 && !InterlockedDecrement(v14 + 1) && v14 ) (**(void (__thiscall ***)(void *, signed int))v14)((void *)v14, 1); operator delete(v13); v3[1] = (void **)((char *)v3[1] - 1); } } while ( **v3 != *v3 ); v2 = (int)v56; } (*(void (__stdcall **)(float *, _DWORD *))(**(_DWORD **)(v58 + 32) + 120))(&v57, v54); if ( v57 != 0.0 ) { v15 = v57; if ( !InterlockedDecrement((volatile LONG *)(LODWORD(v57) + 4)) && v15 != 0.0 ) (**(void (__thiscall ***)(float, signed int))LODWORD(v15))(COERCE_FLOAT(LODWORD(v15)), 1); } v72 = 0; v73 = -1; v71 = &NsFindObjectByName::`vftable'; v76 = 15; v75 = 0; LOBYTE(v74) = 0; v77 = 0; v78 = 0; v79 = 0; v16 = *(int **)(v2 + 16); v17 = *v16; LOBYTE(v81) = 2; v58 = v17; if ( (int *)v17 != v16 ) { while ( 1 ) { v18 = *(_DWORD *)(v17 + 8); v53 = v18; if ( v18 ) { InterlockedIncrement((volatile LONG *)(v18 + 4)); v19 = *(_DWORD *)(v18 + 32) == 0; LOBYTE(v81) = 3; if ( !v19 ) { (*(void (__stdcall **)(int *, int))(**(_DWORD **)(v18 + 32) + 120))(&v52, v18); if ( v52 ) { v20 = (void (__thiscall ***)(_DWORD, signed int))v52; if ( !InterlockedDecrement((volatile LONG *)(v52 + 4)) ) { if ( v20 ) (**v20)(v20, 1); } } sub_8AD840(*v56, &v45, v18); if ( v45 ) { v21 = (void (__thiscall ***)(_DWORD, signed int))v45; if ( !InterlockedDecrement((volatile LONG *)(v45 + 4)) ) { if ( v21 ) (**v21)(v21, 1); } } } sub_4E6D30(&v77, 0); v22 = (int)*v56; sub_4018E0(&v74, *(void **)(v18 + 8), strlen(*(const char **)(v18 + 8))); sub_4E6D30(&v77, 0); if ( v76 < 0x10 ) v50 = &v74; else v50 = v74; v51 = &v77; sub_8CFE00(&v71, v22, (int)dword_BA457C, (int)&v50); v23 = v78; v24 = (_DWORD **)v77; v80 = (v78 - (signed int)v77) >> 2; if ( v80 > 1 ) { MessageBoxA(0, "Same Name Room is ", "portal", 0); v23 = v78; v24 = (_DWORD **)v77; } if ( !((v23 - (signed int)v24) >> 2) ) { v58 = *(_DWORD *)v58; LOBYTE(v81) = 2; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); goto LABEL_60; } v25 = *v24; v54 = v25; if ( !v25 ) { v58 = *(_DWORD *)v58; LOBYTE(v81) = 2; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); goto LABEL_60; } v26 = *(_DWORD **)(v18 + 276); while ( v26 ) { v27 = v26[2]; v26 = (_DWORD *)*v26; if ( v27 ) { *(_DWORD *)(v27 + 184) = v25; sub_8AC9E0(v25, v27); } } v28 = *(float *)(v18 + 316); if ( v28 != 0.0 ) { while ( 1 ) { v29 = *(_DWORD *)(LODWORD(v28) + 8); v57 = *(float *)LODWORD(v28); if ( v29 ) { qmemcpy(&v61, (const void *)(v29 + 104), 0x34u); qmemcpy(&v66, v54 + 26, 0x34u); v55 = v65 / v70; v55 = fabs(v55); *(float *)(v29 + 100) = v55; v30 = sub_85DC80((float *)&v66, (float *)&v59); v31 = sub_85D940(v30, (float *)&v60, (float *)&v61); v55 = v62 - v67; qmemcpy((void *)(v29 + 52), v31, 0x24u); v49 = v63 - v68; v44 = v64 - v69; v46 = v55; v32 = v49; *(float *)(v29 + 88) = v55; v33 = v54; v47 = v32; v48 = v44; v34 = v44; *(float *)(v29 + 92) = v47; *(float *)(v29 + 96) = v34; sub_8AC930(v33, v29); v18 = v53; } if ( v57 == 0.0 ) break; v28 = v57; } } LOBYTE(v81) = 2; if ( !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v17 = v58; } v35 = (int)v56; v36 = (void *)v17; v58 = *(_DWORD *)v17; if ( (_DWORD *)v17 != v56[4] ) { **(_DWORD **)(v17 + 4) = *(_DWORD *)v17; *(_DWORD *)(*(_DWORD *)v17 + 4) = *(_DWORD *)(v17 + 4); v37 = *(_DWORD *)(v17 + 8); if ( v37 && !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); operator delete(v36); --*(_DWORD *)(v35 + 20); } LABEL_60: if ( (_DWORD *)v58 == v56[4] ) { if ( v77 ) operator delete(v77); break; } v17 = v58; } } v77 = 0; v78 = 0; v79 = 0; if ( v76 >= 0x10 ) operator delete(v74); } } // 9F3174: using guessed type void *NsFindObjectByName::`vftable'; // A40EB0: using guessed type void *FindMultiLinkNode::`vftable'; // A40EB8: using guessed type void *FindRoomNode::`vftable'; //----- (008DC770) -------------------------------------------------------- int __thiscall sub_8DC770(int (__stdcall ***this)(signed int)) { int result; // eax if ( this ) result = (**this)(1); return result; } //----- (008DC780) -------------------------------------------------------- LONG __thiscall sub_8DC780(char *this) { _DWORD *v1; // ebx volatile LONG *v2; // edi int v3; // esi LONG result; // eax v1 = this; v2 = (volatile LONG *)(this + 12); while ( InterlockedExchange(v2, 1) ) Sleep(1u); v3 = v1[2] - 1; v1[2] = v3; result = InterlockedExchange(v2, 0); if ( !v3 ) result = (*(int (__thiscall **)(_DWORD *))(*v1 + 8))(v1); return result; } //----- (008DC7D0) -------------------------------------------------------- void *__thiscall sub_8DC7D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &boost::detail::sp_counted_base::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A40EE4: using guessed type void *boost::detail::sp_counted_base::`vftable'; //----- (008DC800) -------------------------------------------------------- char __thiscall sub_8DC800(int this, char *a2) { int v2; // esi int v3; // edi void *v4; // eax FILE *v5; // eax FILE *v6; // edi char *v7; // ebx v2 = this; v3 = *(_DWORD *)(this + 208) * *(_DWORD *)(this + 204); if ( *(_DWORD *)(this + 188) ) operator delete[](*(void **)(this + 188)); *(_DWORD *)(v2 + 188) = 0; v4 = operator new[](4 * v3); *(_DWORD *)(v2 + 188) = v4; memset(v4, 0, 4 * v3); v5 = fopen(a2, "rb"); v6 = v5; if ( !v5 ) return 0; v7 = (char *)(*(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)); fread(&a2, 4u, 1u, v5); if ( a2 != v7 ) return 0; fread(*(void **)(v2 + 188), 4 * (_DWORD)a2, 1u, v6); fclose(v6); return 1; } //----- (008DC8D0) -------------------------------------------------------- int __thiscall sub_8DC8D0(unsigned int *this, float *a2, float *a3, float *a4, float *a5, float *a6) { unsigned int *v6; // ebx float v7; // ST24_4 double v8; // st7 unsigned int v9; // esi unsigned int v10; // edi int v11; // ecx unsigned int v12; // edi unsigned int v13; // ebx int v15; // [esp+18h] [ebp-14h] unsigned int *v16; // [esp+1Ch] [ebp-10h] unsigned int v17; // [esp+24h] [ebp-8h] int v18; // [esp+28h] [ebp-4h] int v19; // [esp+38h] [ebp+Ch] float v20; // [esp+3Ch] [ebp+10h] int v21; // [esp+3Ch] [ebp+10h] unsigned int v22; // [esp+40h] [ebp+14h] v6 = this; v16 = this; v18 = 0; v7 = (double)this[25]; v8 = v7; v15 = (signed __int64)(*a4 * v7); v20 = (double)this[26]; v9 = (signed __int64)(*a3 * v20); v17 = (signed __int64)(*a3 * v20); v19 = (signed __int64)(v20 * *a5); v10 = (signed __int64)(v8 * *a2); v21 = v10; if ( v10 == v15 ) return 0; v22 = this[25]; do { v11 = v10 % v22; if ( v9 != v19 ) { v12 = v6[25]; v13 = v6[23]; do { if ( *(float *)(v13 + 4 * (v11 + v12 * (v9 % v12))) > (double)*a6 ) ++v18; ++v9; } while ( v9 != v19 ); v6 = v16; v9 = v17; v10 = v21; } v21 = ++v10; } while ( v10 != v15 ); return v18; } //----- (008DCA20) -------------------------------------------------------- int __thiscall sub_8DCA20(_DWORD *this, _DWORD *a2) { int result; // eax int v3; // esi int v4; // ecx _DWORD *v5; // ecx result = *a2; *a2 = *(_DWORD *)(*a2 + 8); v3 = *(_DWORD *)(result + 8); if ( !*(_BYTE *)(v3 + 25) ) *(_DWORD *)(v3 + 4) = a2; *(_DWORD *)(result + 4) = a2[1]; v4 = this[1]; if ( a2 == *(_DWORD **)(v4 + 4) ) { *(_DWORD *)(v4 + 4) = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } else { v5 = (_DWORD *)a2[1]; if ( a2 == (_DWORD *)v5[2] ) v5[2] = result; else *v5 = result; *(_DWORD *)(result + 8) = a2; a2[1] = result; } return result; } //----- (008DCA80) -------------------------------------------------------- _DWORD *__thiscall sub_8DCA80(_DWORD *this) { _DWORD *result; // eax int *v2; // ecx int i; // edx int v4; // ecx int v5; // edx result = this; v2 = (int *)*this; if ( *((_BYTE *)v2 + 25) ) { *result = v2[2]; return result; } i = *v2; if ( !*(_BYTE *)(*v2 + 25) ) { v4 = *(_DWORD *)(i + 8); if ( !*(_BYTE *)(v4 + 25) ) { do { v5 = v4; v4 = *(_DWORD *)(v4 + 8); } while ( !*(_BYTE *)(v4 + 25) ); *result = v5; return result; } LABEL_11: *result = i; return result; } for ( i = v2[1]; !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)i ) break; *result = i; } if ( !*(_BYTE *)(*result + 25) ) goto LABEL_11; return result; } //----- (008DCAE0) -------------------------------------------------------- int __thiscall sub_8DCAE0(char *this, int a2) { char *v2; // esi int result; // eax v2 = this; if ( (unsigned __int8)type_info::operator==(&boost::checked_deleter `RTTI Type Descriptor') ) result = (int)(v2 + 20); else result = 0; return result; } // 7D451A: using guessed type _DWORD __stdcall type_info::operator==(_DWORD); // AC2850: using guessed type void **boost::checked_deleter `RTTI Type Descriptor'; //----- (008DCB10) -------------------------------------------------------- LONG __thiscall sub_8DCB10(char *this) { char *v1; // edi volatile LONG *v2; // esi int v3; // eax v1 = this; v2 = (volatile LONG *)(this + 12); while ( InterlockedExchange(v2, 1) ) Sleep(1u); v3 = *((_DWORD *)v1 + 1) - 1; *((_DWORD *)v1 + 1) = v3; if ( v3 ) return InterlockedExchange(v2, 0); InterlockedExchange(v2, 0); (*(void (__thiscall **)(char *))(*(_DWORD *)v1 + 4))(v1); return sub_8DC780(v1); } //----- (008DCB60) -------------------------------------------------------- _DWORD *__cdecl sub_8DCB60(LPCSTR lpText, int a2, float a3) { int v3; // eax int v4; // eax int v5; // esi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // edi void *v9; // eax int v10; // edx _BYTE *v11; // eax char v12; // cl _DWORD *v13; // edi int v15; // [esp+10h] [ebp-28h] int v16; // [esp+14h] [ebp-24h] int v17; // [esp+18h] [ebp-20h] _DWORD *v18; // [esp+1Ch] [ebp-1Ch] int v19; // [esp+20h] [ebp-18h] void *v20; // [esp+24h] [ebp-14h] int v21; // [esp+28h] [ebp-10h] int v22; // [esp+34h] [ebp-4h] v3 = sub_8667C0(); v4 = (*(int (__thiscall **)(int, LPCSTR, _DWORD))(*(_DWORD *)v3 + 8))(v3, lpText, 0); v5 = v4; v19 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); v22 = 0; if ( !v5 ) MessageBoxA(0, lpText, "LayerImageNotFound", 0); v6 = operator new(0x70u); v20 = v6; LOBYTE(v22) = 1; if ( v6 ) v7 = sub_8698C0(v6, **(_DWORD **)(v5 + 84), **(_DWORD **)(v5 + 88), &unk_ABDAD0, 1u, 1); else v7 = 0; v18 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); v8 = v7[20] + *(_DWORD *)v7[23]; v21 = **(_DWORD **)(v5 + 88) * **(_DWORD **)(v5 + 84); LOBYTE(v22) = 2; v9 = operator new[](4 * v21); v10 = v21; *(_DWORD *)a2 = v9; if ( v10 ) { v11 = (_BYTE *)(v8 + 2); v20 = (void *)(signed int)a3; v12 = (char)v20; v21 = v10; do { *(float *)&v11[-2 - v8 + *(_DWORD *)a2] = a3; *(v11 - 2) = v12; *(v11 - 1) = v12; *v11 = v12; v11[1] = v12; v11 += 4; --v21; } while ( v21 ); v5 = v19; } v16 = 3; v15 = 2; v17 = 1; v13 = sub_865FA0((int)v7, &v15); LOBYTE(v22) = 0; if ( !InterlockedDecrement(v7 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); v22 = -1; if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return v13; } //----- (008DCD10) -------------------------------------------------------- _DWORD *__cdecl sub_8DCD10(int a1, _DWORD *a2) { int v2; // eax int v3; // ebx int v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi int v8; // eax int v9; // ecx bool v10; // zf unsigned int *v11; // eax unsigned int v12; // esi int v13; // ecx int v14; // eax _BYTE *v15; // ecx unsigned int *v16; // edx int v17; // esi _DWORD *v18; // edi int v20; // [esp+10h] [ebp-30h] int v21; // [esp+14h] [ebp-2Ch] int v22; // [esp+18h] [ebp-28h] _DWORD *v23; // [esp+1Ch] [ebp-24h] int v24; // [esp+20h] [ebp-20h] void *v25; // [esp+24h] [ebp-1Ch] int v26; // [esp+28h] [ebp-18h] _DWORD *v27; // [esp+2Ch] [ebp-14h] unsigned int v28; // [esp+30h] [ebp-10h] int v29; // [esp+3Ch] [ebp-4h] v2 = sub_8667C0(); v3 = (*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v2 + 8))(v2, a1, 0); v24 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v4 = *(_DWORD *)(v3 + 80) + **(_DWORD **)(v3 + 92); v29 = 0; v26 = v4; v5 = operator new(0x70u); v25 = v5; LOBYTE(v29) = 1; if ( v5 ) { v6 = sub_8698C0(v5, **(_DWORD **)(v3 + 84), **(_DWORD **)(v3 + 88), &unk_ABDAD0, 1u, 1); v27 = v6; } else { v27 = 0; v6 = 0; } v23 = v6; if ( v6 ) InterlockedIncrement(v6 + 1); v7 = v6[20] + *(_DWORD *)v6[23]; v8 = 4 * **(_DWORD **)(v3 + 88) * **(_DWORD **)(v3 + 84); v9 = (unsigned __int64)(unsigned int)(**(_DWORD **)(v3 + 88) * **(_DWORD **)(v3 + 84)) >> 30 != 0; LOBYTE(v29) = 2; *a2 = operator new[](v8 | -v9); v10 = **(_DWORD **)(v3 + 88) == 0; v28 = 0; if ( !v10 ) { v11 = *(unsigned int **)(v3 + 84); do { v12 = 0; if ( *v11 ) { do { v13 = v12 + v28 * **(_DWORD **)(v3 + 84); v14 = v12 + **(_DWORD **)(v3 + 84) * (**(_DWORD **)(v3 + 84) - v28 - 1); if ( *a2 ) { v25 = (void *)*(unsigned __int8 *)(v13 + v26 + 2 * v13); *(float *)(*a2 + 4 * v14) = (double)(signed int)v25; } v15 = (_BYTE *)(v13 + v26 + 2 * v13 + 1); *(_BYTE *)(v7 + 4 * v14) = *v15; *(_BYTE *)(v7 + 4 * v14 + 1) = *v15; *(_BYTE *)(v7 + 4 * v14 + 2) = *v15; *(_BYTE *)(v7 + 4 * v14 + 3) = *v15; v11 = *(unsigned int **)(v3 + 84); ++v12; } while ( v12 < *v11 ); } v16 = *(unsigned int **)(v3 + 88); ++v28; } while ( v28 < *v16 ); } v17 = (int)v27; v21 = 3; v20 = 2; v22 = 1; v18 = sub_865FA0((int)v27, &v20); LOBYTE(v29) = 0; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); v29 = -1; if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return v18; } //----- (008DCF00) -------------------------------------------------------- char __thiscall sub_8DCF00(_DWORD *this, int a2, float a3, float a4, float a5, float a6, float a7) { int v7; // esi double v8; // st7 double v10; // st4 double v11; // st5 double v12; // st6 signed int v13; // edi signed int v14; // ecx int v15; // ecx int v16; // ebx int v17; // edi int v18; // eax int v19; // ebx int v20; // edx float *v21; // ecx float v22; // [esp+4h] [ebp-4h] int v23; // [esp+10h] [ebp+8h] int v24; // [esp+14h] [ebp+Ch] int v25; // [esp+18h] [ebp+10h] float v26; // [esp+1Ch] [ebp+14h] float v27; // [esp+1Ch] [ebp+14h] int v28; // [esp+1Ch] [ebp+14h] v7 = this[67] + 108 * a2; *(float *)&v23 = *(float *)(v7 + 72) + *(float *)(v7 + 64) - 1.0; v22 = *(float *)(v7 + 76) + *(float *)(v7 + 68) - 1.0; v8 = a3; if ( *(float *)&v23 < (double)a3 ) return 0; if ( *(float *)(v7 + 64) > (double)a5 ) return 0; v10 = a4; if ( v22 < (double)a4 ) return 0; if ( *(float *)(v7 + 68) > (double)a6 ) return 0; if ( *(float *)(v7 + 64) > v8 ) v8 = *(float *)(v7 + 64); v11 = a6; if ( a5 <= (double)*(float *)&v23 ) v12 = a5; else v12 = *(float *)&v23; if ( *(float *)(v7 + 68) > v10 ) v10 = *(float *)(v7 + 68); if ( v22 < v11 ) v11 = v22; v26 = (v12 - *(float *)(v7 + 64)) / *(float *)(v7 + 56); v13 = (signed int)v26; if ( v26 - (double)v13 > 0.009999999776482582 ) ++v13; v27 = (v11 - *(float *)(v7 + 68)) / *(float *)(v7 + 60); v14 = (signed int)v27; if ( v27 - (double)v14 > 0.009999999776482582 ) ++v14; v15 = v14 + 1; v16 = (signed int)((v10 - *(float *)(v7 + 68)) / *(float *)(v7 + 60)) - 1; v17 = v13 + 1; v24 = (signed int)((v8 - *(float *)(v7 + 64)) / *(float *)(v7 + 56)) - 1; v28 = v15; if ( v24 < 0 ) v24 = 0; if ( v16 < 0 ) v16 = 0; v18 = *(_DWORD *)(v7 + 100); if ( v17 > v18 - 1 ) v17 = v18 - 1; if ( v15 > *(_DWORD *)(v7 + 104) - 1 ) { v28 = *(_DWORD *)(v7 + 104) - 1; v15 = *(_DWORD *)(v7 + 104) - 1; } v25 = v16; if ( v16 >= v15 ) return 1; v19 = 4 * (v24 + v16 * v18); while ( 1 ) { v20 = v24; if ( v24 < v17 ) break; LABEL_36: v19 += 4 * v18; if ( ++v25 >= v15 ) return 1; } v21 = (float *)(v19 + *(_DWORD *)(v7 + 92)); while ( *v21 >= (double)a7 ) { ++v20; ++v21; if ( v20 >= v17 ) { v15 = v28; goto LABEL_36; } } return 0; } //----- (008DD160) -------------------------------------------------------- char __thiscall sub_8DD160(int this, float a2, float a3, int a4, int a5) { int v5; // esi bool v6; // zf int v8; // edi double v9; // st5 signed int v10; // eax int v11; // ecx BOOL v12; // edx signed int v13; // ebx int v14; // ecx int *v15; // eax int v16; // ebx unsigned int v17; // edi unsigned int v18; // edx int v19; // ecx int v20; // eax double v21; // st7 double v22; // st7 int v23; // edx unsigned int v24; // edi unsigned int v25; // ebx int v26; // eax double v27; // st7 double v28; // st7 float v29; // eax float v30; // edi int v31; // ecx double v32; // st7 double v33; // st7 int v34; // eax float v35; // ecx float v36; // edx float v37; // [esp+4h] [ebp-A4h] float v38; // [esp+8h] [ebp-A0h] float v39; // [esp+Ch] [ebp-9Ch] float v40; // [esp+10h] [ebp-98h] float v41; // [esp+14h] [ebp-94h] float v42; // [esp+18h] [ebp-90h] int v43; // [esp+1Ch] [ebp-8Ch] float *v44; // [esp+20h] [ebp-88h] float v45; // [esp+24h] [ebp-84h] float v46; // [esp+28h] [ebp-80h] float v47; // [esp+2Ch] [ebp-7Ch] float v48; // [esp+30h] [ebp-78h] float v49; // [esp+34h] [ebp-74h] float v50; // [esp+38h] [ebp-70h] float v51; // [esp+3Ch] [ebp-6Ch] float v52; // [esp+40h] [ebp-68h] float v53; // [esp+44h] [ebp-64h] float v54; // [esp+48h] [ebp-60h] signed int v55; // [esp+4Ch] [ebp-5Ch] float v56; // [esp+50h] [ebp-58h] int v57; // [esp+54h] [ebp-54h] int v58; // [esp+58h] [ebp-50h] int v59; // [esp+5Ch] [ebp-4Ch] int v60; // [esp+60h] [ebp-48h] int v61; // [esp+64h] [ebp-44h] int v62; // [esp+68h] [ebp-40h] int v63; // [esp+6Ch] [ebp-3Ch] int v64; // [esp+70h] [ebp-38h] int v65; // [esp+74h] [ebp-34h] int v66; // [esp+78h] [ebp-30h] int v67; // [esp+7Ch] [ebp-2Ch] int v68; // [esp+80h] [ebp-28h] int v69; // [esp+84h] [ebp-24h] int v70; // [esp+88h] [ebp-20h] int v71; // [esp+8Ch] [ebp-1Ch] int v72; // [esp+90h] [ebp-18h] int v73; // [esp+94h] [ebp-14h] int v74; // [esp+98h] [ebp-10h] int v75; // [esp+9Ch] [ebp-Ch] int v76; // [esp+A0h] [ebp-8h] v5 = this; v6 = *(_DWORD *)(this + 56) == 0; v44 = (float *)a4; v43 = a5; if ( v6 ) return 0; *(float *)&v55 = a2 / *(float *)(this + 92); v8 = (signed int)*(float *)&v55; v9 = a3 / *(float *)(this + 96); LODWORD(v54) = (signed int)*(float *)&v55; *(float *)&v55 = v9; v10 = (signed int)*(float *)&v55; v11 = (signed int)*(float *)&v55; v55 = (signed int)*(float *)&v55; if ( v8 < 0 || v8 > *(_DWORD *)(v5 + 212) - 1 || v10 < 0 || v11 > *(_DWORD *)(v5 + 216) - 1 ) return 0; v12 = (v11 + v8) % 2 == 0; v56 = a2 - (double)SLODWORD(v54) * *(float *)(v5 + 92); *(float *)&v55 = a3 - (double)v55 * *(float *)(v5 + 96); if ( (v11 + v8) % 2 != 0 ) *(float *)&v55 = *(float *)(v5 + 96) - *(float *)&v55; v13 = 0; v54 = *(float *)&v55 / *(float *)(v5 + 96); v56 = v56 / *(float *)(v5 + 92); if ( v54 + v56 > 1.0 ) v13 = 1; v71 = v8 + 1; v75 = v8 + 1; v70 = v11; v72 = v11; v59 = 3; v61 = 3; v66 = 3; v14 = v11 + 1; v69 = v8; v73 = v8; v74 = v14; v76 = v14; v58 = 0; v62 = 0; v63 = 0; v15 = &v57 + 3 * (v13 + 2 * v12); v57 = 2; v64 = 1; v65 = 2; v67 = 2; v68 = 1; v60 = 1; v16 = v15[1]; v17 = *((unsigned int *)&v70 + 2 * *v15); v18 = *((unsigned int *)&v69 + 2 * *v15); v56 = *((float *)v15 + 2); v19 = *(_DWORD *)(v5 + 308); v20 = v18 + v17 * *(_DWORD *)(v5 + 308); if ( v20 < 0 || v20 > *(_DWORD *)(v5 + 316) ) v20 = -1; v54 = *(float *)&v18; v21 = (double)v18 * *(float *)(v5 + 92); v54 = *(float *)&v17; v48 = v21; v22 = (double)v17; v23 = *(_DWORD *)(v5 + 196); v24 = *((unsigned int *)&v70 + 2 * v16); v25 = *((unsigned int *)&v69 + 2 * v16); v49 = v22 * *(float *)(v5 + 96); v50 = *(float *)(v23 + 4 * v20); v26 = v25 + v24 * v19; if ( v26 < 0 || v26 > *(_DWORD *)(v5 + 316) ) v26 = -1; v54 = *(float *)&v25; v27 = (double)v25 * *(float *)(v5 + 92); v54 = *(float *)&v24; v51 = v27; v52 = (double)v24 * *(float *)(v5 + 96); v28 = *(float *)(v23 + 4 * v26); v29 = *((float *)&v70 + 2 * LODWORD(v56)); v30 = *((float *)&v69 + 2 * LODWORD(v56)); v53 = v28; v31 = LODWORD(v30) + LODWORD(v29) * v19; if ( v31 < 0 || v31 > *(_DWORD *)(v5 + 316) ) v31 = -1; v56 = v30; v32 = (double)LODWORD(v30) * *(float *)(v5 + 92); v56 = v29; v45 = v32; v46 = (double)LODWORD(v29) * *(float *)(v5 + 96); v47 = *(float *)(v23 + 4 * v31); v37 = v51 - v48; v38 = v52 - v49; v39 = v53 - v50; v40 = v45 - v48; v41 = v46 - v49; v42 = v47 - v50; sub_443140(&v37, &v51, &v40); v33 = v53; if ( v53 < 0.0 ) { v51 = v51 * -1.0; v52 = v52 * -1.0; v53 = v33 * -1.0; v33 = v53; } v34 = v43; v56 = v48 * v51 + v49 * v52 + v50 * v33; *v44 = (v56 - v51 * a2 - v52 * a3) / v33; if ( v34 ) { v35 = v52; *(float *)v34 = v51; v36 = v53; *(float *)(v34 + 4) = v35; *(float *)(v34 + 8) = v36; } return 1; } //----- (008DD4F0) -------------------------------------------------------- char __thiscall sub_8DD4F0(void *this, float a2, float a3, int a4, int a5) { char result; // al result = sub_8DD160((int)this, a2, a3, (int)&a5, a5); if ( result ) { *(float *)a4 = a2; *(float *)(a4 + 4) = a3; *(float *)(a4 + 8) = *(float *)&a5; } return result; } //----- (008DD530) -------------------------------------------------------- char __thiscall sub_8DD530(float *this, float a2, float a3, float a4, float a5, int a6) { _DWORD *v6; // edi int v7; // esi int v8; // eax double v9; // st7 double v10; // st6 unsigned __int16 *v11; // ebx int v12; // ecx double v13; // st6 double v14; // st3 double v15; // st2 double v16; // st7 double v17; // st4 double v18; // rt0 double v19; // st4 double v20; // st5 double v21; // st6 double v22; // st7 int v23; // edx int v24; // ecx int v25; // ebx char *v26; // eax int v27; // edx int v28; // ecx _DWORD *v29; // eax unsigned __int16 *v30; // ebx int v31; // eax void (__thiscall *v32)(int, unsigned __int16 *); // eax int v33; // ebx int *v34; // eax int v35; // edx int v36; // ebx int v37; // ecx void *v38; // edx double v39; // st7 signed int v40; // ecx int v41; // edx double v42; // st7 double v43; // st6 double v44; // st3 double v45; // rt1 double v46; // st3 double v47; // rt2 double v48; // st2 double v49; // rtt double v50; // st3 double v51; // st6 double v52; // st3 double v53; // st7 int v54; // eax float *v55; // edi _WORD *v56; // esi float *v57; // ecx double v58; // st2 int v59; // edx int v60; // edx double v61; // st1 int *v62; // edx int v63; // eax __int16 v64; // bx int v65; // eax unsigned __int16 *v66; // esi signed int v67; // ebx float *v68; // ST28_4 float v70[4]; // [esp+3Ch] [ebp-9Ch] _DWORD *v71; // [esp+4Ch] [ebp-8Ch] int v72; // [esp+50h] [ebp-88h] int v73; // [esp+54h] [ebp-84h] float v74; // [esp+58h] [ebp-80h] float v75; // [esp+5Ch] [ebp-7Ch] float v76; // [esp+60h] [ebp-78h] int v77; // [esp+64h] [ebp-74h] void *v78; // [esp+68h] [ebp-70h] float v79; // [esp+6Ch] [ebp-6Ch] float v80; // [esp+70h] [ebp-68h] float v81; // [esp+74h] [ebp-64h] float v82; // [esp+78h] [ebp-60h] int v83; // [esp+7Ch] [ebp-5Ch] int v84; // [esp+80h] [ebp-58h] int v85; // [esp+84h] [ebp-54h] int v86; // [esp+88h] [ebp-50h] int v87; // [esp+8Ch] [ebp-4Ch] float *v88; // [esp+90h] [ebp-48h] unsigned __int16 *v89; // [esp+94h] [ebp-44h] float v90; // [esp+98h] [ebp-40h] float v91; // [esp+9Ch] [ebp-3Ch] float v92; // [esp+A0h] [ebp-38h] int v93; // [esp+A4h] [ebp-34h] float v94; // [esp+A8h] [ebp-30h] int v95; // [esp+ACh] [ebp-2Ch] int v96; // [esp+B0h] [ebp-28h] unsigned __int16 *v97; // [esp+B4h] [ebp-24h] int v98; // [esp+B8h] [ebp-20h] signed int v99; // [esp+BCh] [ebp-1Ch] __int16 v100; // [esp+C0h] [ebp-18h] __int16 v101; // [esp+C2h] [ebp-16h] __int16 v102; // [esp+C4h] [ebp-14h] __int16 v103; // [esp+C6h] [ebp-12h] int v104; // [esp+D4h] [ebp-4h] v6 = (_DWORD *)a6; v7 = (int)this; v8 = *((_DWORD *)this + 14); v88 = this; v71 = (_DWORD *)a6; if ( !v8 ) return 0; v9 = a4 * 0.5; *(float *)&v98 = a2 - v9; v10 = 0.5 * a5; *(float *)&v95 = a3 - v10; *(float *)&v99 = v9 + a2; v94 = a3 + v10; if ( !a6 ) return 0; v11 = *(unsigned __int16 **)(a6 + 184); v97 = v11; if ( !v11 ) return 0; if ( !sub_402B70((int)dword_BA492C, (int)v11) ) return 0; v12 = *(_DWORD *)(v7 + 212); v87 = *(_DWORD *)(v7 + 212); v89 = v11; *(float *)&v93 = (double)(unsigned int)v87 * *(float *)(v7 + 92); v13 = *(float *)&v93; if ( *(float *)&v93 <= (double)*(float *)&v98 ) return 0; if ( *(float *)&v95 >= v13 ) return 0; v14 = *(float *)&v99; if ( *(float *)&v99 <= 0.0 || v94 <= 0.0 ) return 0; v15 = *(float *)&v98; v16 = v94; if ( *(float *)&v98 < 0.0 ) { *(float *)&v98 = 0.0; v15 = (float)0.0; } if ( *(float *)&v95 >= 0.0 ) { v17 = *(float *)&v95; } else { *(float *)&v95 = 0.0; v17 = (float)0.0; } if ( v14 > v13 ) { v87 = v12 - 1; *(float *)&v99 = (double)(unsigned int)(v12 - 1) * *(float *)(v7 + 92); v14 = *(float *)&v99; } if ( *(float *)&v93 < v16 ) { v87 = *(_DWORD *)(v7 + 216) - 1; v94 = (double)(unsigned int)v87 * *(float *)(v7 + 96); v16 = v94; } v18 = v17; v19 = v15 / *(float *)(v7 + 92); v20 = v18 / *(float *)(v7 + 96); v86 = (signed int)v19; v21 = v14 / *(float *)(v7 + 92); v98 = (signed int)v20; v22 = v16 / *(float *)(v7 + 96); v99 = (signed int)v21; v85 = (signed int)v22; v23 = ((signed int)v21 - (signed int)v19 + 2) * ((signed int)v22 - (signed int)v20 + 2); v77 = (signed int)v21 - (signed int)v19 + 2; v24 = v97[6]; v87 = v23; v84 = 2 * ((signed int)v22 - (signed int)v20 + 1) * ((signed int)v21 - (signed int)v19 + 1); if ( v24 < v23 || v97[32] < 2 * ((signed int)v22 - (signed int)v20 + 1) * ((signed int)v21 - (signed int)v19 + 1) ) { v25 = 2 * v23; v97 = (unsigned __int16 *)operator new[](24 * v23); v89 = (unsigned __int16 *)operator new[](8 * v25); v26 = (char *)operator new[](16 * v25); if ( v26 ) { v27 = v25 - 1; if ( v25 - 1 >= 0 ) { v28 = (int)(v26 + 8); do { *(float *)(v28 - 8) = 0.0; v28 += 16; --v27; *(float *)(v28 - 20) = 0.0; *(float *)(v28 - 16) = 0.0; *(float *)(v28 - 12) = 0.0; } while ( v27 >= 0 ); } v96 = (int)v26; } else { v96 = 0; } *(float *)&v93 = COERCE_FLOAT(operator new[](6 * v84)); v29 = operator new(0x5Cu); v78 = v29; v104 = 0; if ( v29 ) v30 = (unsigned __int16 *)sub_8747E0(v29, v25, (int)v97, 0, v96, (int)v89, 1, 0, v84, v93, 0, 0); else v30 = 0; v31 = *(_DWORD *)(a6 + 184); v96 = v31; if ( v31 ) InterlockedIncrement((volatile LONG *)(v31 + 4)); v32 = *(void (__thiscall **)(int, unsigned __int16 *))(*(_DWORD *)a6 + 120); v104 = 1; v32(a6, v30); v90 = 0.0; v89 = v30; v91 = 0.0; v92 = 0.0; v79 = 0.0; v82 = 10.0; v80 = 0.0; v81 = 0.0; sub_4FD730((_DWORD *)a6, &v79); sub_85BED0((_DWORD **)a6, 0.0, 1); v33 = (*(int (__stdcall **)(signed int))(*(_DWORD *)dword_BA4928 + 4))(2); (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)dword_BA4928 + 28))(v96, 0); (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA4928 + 20))(v33, *(_DWORD *)(a6 + 184), 0); v104 = -1; sub_410C00(&v96); } v34 = *(int **)(a6 + 184); v35 = v34[11]; v36 = v86; v93 = v34[8]; v37 = v34[10]; v73 = v35; v38 = (void *)v34[18]; v72 = v37; v97 = (unsigned __int16 *)(v86 - 1); v39 = (double)(v98 - 1) * *(float *)(v7 + 96); v40 = v85 + 1; v78 = v38; v41 = 0; v91 = v39; v83 = 0; v94 = 0.0; v95 = v98; v97 = (unsigned __int16 *)(v85 + 1); v76 = (double)(v86 - 1); v90 = v76 * *(float *)(v7 + 92); if ( v98 <= v85 + 1 ) { v42 = 1.0; v43 = v91; v98 = v99 + 1; v96 = 0; v44 = a4; while ( 1 ) { v48 = *(float *)(v7 + 92); v99 = v36; v49 = v44; v50 = v43 + v48; v51 = v49; v91 = v50; v90 = v76 * *(float *)(v7 + 92); v52 = v42; v53 = v91; if ( v36 <= v98 ) { v79 = v52; v80 = v52; v81 = v52; v54 = v73 + 8 * v41; v82 = v52; v55 = (float *)(v93 + 12 * v41); v56 = (char *)v78 + 2 * LODWORD(v94) + 4; v57 = (float *)(v72 + 16 * v41); v83 += v98 - v36 + 1; v75 = (a3 - v53) / a5 + 0.5; v58 = v90; do { v59 = v95 * *((_DWORD *)v88 + 77); v90 = v58 + v88[24]; v60 = v99 + v59; if ( v60 < 0 || v60 > *((_DWORD *)v88 + 79) ) v60 = -1; v92 = *(float *)(*((_DWORD *)v88 + 49) + 4 * v60); *v55 = v90; v61 = v90; v55[1] = v91; v55[2] = v92; *v57 = v79; v57[1] = v80; v57[2] = v81; v57[3] = v82; v54 += 8; v55 += 3; v57 += 4; v85 = v54; v58 = v61; v74 = (a2 - v61) / v51 + 0.5; *(float *)(v54 - 8) = v74; *(float *)(v54 - 4) = v75; if ( v99 != v98 && (unsigned __int16 *)v95 != v97 ) { v62 = (int *)&unk_AC2760; if ( (v95 + v99) % 2 ) v62 = (int *)&unk_AC2778; v63 = v99 + v96 * v77 - v86; LODWORD(v94) += 6; v64 = v63 + v77; v100 = v99 + v96 * v77 - v86; v101 = v63 + 1; v65 = *v62; v102 = v64; v103 = v64 + 1; *(v56 - 2) = *(&v100 + v65); *(v56 - 1) = *(&v100 + v62[1]); *v56 = *(&v100 + v62[2]); v56[1] = *(&v100 + v62[3]); v56[2] = *(&v100 + v62[4]); v56[3] = *(&v100 + v62[5]); v54 = v85; v56 += 6; } ++v99; } while ( v99 <= v98 ); v40 = (signed int)v97; v6 = v71; v7 = (int)v88; v36 = v86; v41 = v83; } ++v95; ++v96; if ( v95 > v40 ) break; v45 = v52; v46 = v53; v42 = v45; v47 = v46; v44 = v51; v43 = v47; } } v66 = v89; (*(void (__thiscall **)(unsigned __int16 *, int))(*(_DWORD *)v89 + 72))(v89, v84); v67 = v87; (*(void (__thiscall **)(unsigned __int16 *, int))(*(_DWORD *)v66 + 60))(v66, v87); v68 = (float *)v93; v66[25] |= 0xFFFu; sub_86B6C0(v70, v67, v68); sub_4FD730(v6, v70); sub_85BED0((_DWORD **)v6, 0.0, 1); return 1; } // BA4928: using guessed type int dword_BA4928; //----- (008DDBD0) -------------------------------------------------------- _DWORD *__thiscall sub_8DDBD0(_DWORD *this) { _DWORD *result; // eax int v2; // edx int **v3; // ecx int *j; // edx int i; // edx result = this; v2 = *this; if ( !*(_BYTE *)(*this + 17) ) { v3 = *(int ***)(v2 + 8); if ( *((_BYTE *)v3 + 17) ) { for ( i = *(_DWORD *)(v2 + 4); !*(_BYTE *)(i + 17); i = *(_DWORD *)(i + 4) ) { if ( *result != *(_DWORD *)(i + 8) ) break; *result = i; } *result = i; } else { for ( j = *v3; !*((_BYTE *)j + 17); j = (int *)*j ) v3 = (int **)j; *result = v3; } } return result; } //----- (008DDC20) -------------------------------------------------------- void *__stdcall sub_8DDC20(char *a1) { void *result; // eax void **v2; // [esp+0h] [ebp-Ch] result = 0; if ( a1 ) { if ( (unsigned int)a1 > 0x25ED097 || (result = operator new(108 * (_DWORD)a1)) == 0 ) { a1 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&a1); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DDC80) -------------------------------------------------------- _DWORD *__thiscall sub_8DDC80(_DWORD *this, int a2) { _DWORD *result; // eax int v3; // ecx _DWORD *v4; // ecx result = *(_DWORD **)(a2 + 8); *(_DWORD *)(a2 + 8) = *result; if ( !*(_BYTE *)(*result + 17) ) *(_DWORD *)(*result + 4) = a2; result[1] = *(_DWORD *)(a2 + 4); v3 = this[1]; if ( a2 == *(_DWORD *)(v3 + 4) ) { *(_DWORD *)(v3 + 4) = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } else { v4 = *(_DWORD **)(a2 + 4); if ( a2 == *v4 ) *v4 = result; else v4[2] = result; *result = a2; *(_DWORD *)(a2 + 4) = result; } return result; } //----- (008DDCE0) -------------------------------------------------------- void __thiscall sub_8DDCE0(void **this) { operator delete(this[4]); } //----- (008DDD00) -------------------------------------------------------- int __thiscall sub_8DDD00(_DWORD *this, int a2, char a3, int a4, void *a5) { unsigned int v5; // eax void *v6; // edi int v7; // edx void **v8; // edx int v9; // edx _DWORD *v10; // eax int v11; // edx int *v12; // esi int v13; // esi _DWORD *v14; // edx int v15; // esi _DWORD *v16; // esi _DWORD *v17; // edx _DWORD *v18; // esi int v19; // edi int v20; // edi _DWORD *v21; // edi int v22; // esi _DWORD *v23; // edx int v24; // esi int v25; // esi _DWORD *v26; // esi int v27; // edi _DWORD *v28; // edi int v29; // ecx int result; // eax v5 = this[2]; if ( v5 >= 0x3FFFFFFE ) { operator delete(a5); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; v6 = a5; *((_DWORD *)a5 + 1) = a4; v7 = this[1]; if ( a4 == v7 ) { *(_DWORD *)(v7 + 4) = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *(_DWORD *)a4 = a5; v8 = (void **)this[1]; if ( (void *)a4 == *v8 ) *v8 = a5; } else { *(_DWORD *)(a4 + 8) = a5; v9 = this[1]; if ( a4 == *(_DWORD *)(v9 + 8) ) *(_DWORD *)(v9 + 8) = a5; } v10 = a5; if ( !*(_BYTE *)(*((_DWORD *)a5 + 1) + 16) ) { do { v11 = v10[1]; v12 = *(int **)(v11 + 4); if ( v11 == *v12 ) { v13 = v12[2]; if ( *(_BYTE *)(v13 + 16) ) { if ( v10 == *(_DWORD **)(v11 + 8) ) { v10 = (_DWORD *)v10[1]; v14 = *(_DWORD **)(v11 + 8); v10[2] = *v14; if ( !*(_BYTE *)(*v14 + 17) ) *(_DWORD *)(*v14 + 4) = v10; v14[1] = v10[1]; v15 = this[1]; if ( v10 == *(_DWORD **)(v15 + 4) ) { *(_DWORD *)(v15 + 4) = v14; } else { v16 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)*v16 ) *v16 = v14; else v16[2] = v14; } *v14 = v10; v10[1] = v14; } *(_BYTE *)(v10[1] + 16) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 16) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)*v17; *v17 = *(_DWORD *)(*v17 + 8); v19 = v18[2]; if ( !*(_BYTE *)(v19 + 17) ) *(_DWORD *)(v19 + 4) = v17; v18[1] = v17[1]; v20 = this[1]; if ( v17 == *(_DWORD **)(v20 + 4) ) { *(_DWORD *)(v20 + 4) = v18; v18[2] = v17; } else { v21 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)v21[2] ) v21[2] = v18; else *v21 = v18; v18[2] = v17; } LABEL_51: v6 = a5; v17[1] = v18; continue; } *(_BYTE *)(v11 + 16) = 1; *(_BYTE *)(v13 + 16) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 16) = 0; v10 = *(_DWORD **)(v10[1] + 4); } else { v22 = *v12; if ( *(_BYTE *)(v22 + 16) ) { if ( v10 == *(_DWORD **)v11 ) { v10 = (_DWORD *)v10[1]; v23 = *(_DWORD **)v11; *v10 = v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 17) ) *(_DWORD *)(v24 + 4) = v10; v23[1] = v10[1]; v25 = this[1]; if ( v10 == *(_DWORD **)(v25 + 4) ) { *(_DWORD *)(v25 + 4) = v23; } else { v26 = (_DWORD *)v10[1]; if ( v10 == (_DWORD *)v26[2] ) v26[2] = v23; else *v26 = v23; } v23[2] = v10; v10[1] = v23; } *(_BYTE *)(v10[1] + 16) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 16) = 0; v17 = *(_DWORD **)(v10[1] + 4); v18 = (_DWORD *)v17[2]; v17[2] = *v18; if ( !*(_BYTE *)(*v18 + 17) ) *(_DWORD *)(*v18 + 4) = v17; v18[1] = v17[1]; v27 = this[1]; if ( v17 == *(_DWORD **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v18; } else { v28 = (_DWORD *)v17[1]; if ( v17 == (_DWORD *)*v28 ) *v28 = v18; else v28[2] = v18; } *v18 = v17; goto LABEL_51; } *(_BYTE *)(v11 + 16) = 1; *(_BYTE *)(v22 + 16) = 1; *(_BYTE *)(*(_DWORD *)(v10[1] + 4) + 16) = 0; v10 = *(_DWORD **)(v10[1] + 4); } } while ( !*(_BYTE *)(v10[1] + 16) ); } v29 = *(_DWORD *)(this[1] + 4); result = a2; *(_DWORD *)a2 = v6; *(_BYTE *)(v29 + 16) = 1; return result; } //----- (008DDF30) -------------------------------------------------------- _DWORD *__thiscall sub_8DDF30(_DWORD *this, void *a2, int a3) { _DWORD *v3; // esi _DWORD *v4; // eax int v6; // [esp+0h] [ebp-20h] int *v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v7 = &v6; v3 = this; *this = 0; v8 = 0; v4 = operator new(0x18u); if ( v4 ) { v4[1] = 1; v4[2] = 1; v4[3] = 0; *v4 = &boost::detail::sp_counted_base_impl>::`vftable'; v4[4] = a2; } else { v4 = 0; } *v3 = v4; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // A40EF8: using guessed type void *boost::detail::sp_counted_base_impl>::`vftable'; //----- (008DDFD0) -------------------------------------------------------- unsigned int __thiscall sub_8DDFD0(_DWORD *this) { _DWORD *v1; // edi unsigned int result; // eax unsigned int v3; // ecx int v4; // esi unsigned int v5; // edx unsigned int v6; // ebx unsigned int v7; // edi float v8; // [esp+20h] [ebp-20h] float v9; // [esp+24h] [ebp-1Ch] float v10; // [esp+28h] [ebp-18h] unsigned int v11; // [esp+2Ch] [ebp-14h] float v12; // [esp+30h] [ebp-10h] float v13; // [esp+34h] [ebp-Ch] unsigned int v14; // [esp+38h] [ebp-8h] _DWORD *v15; // [esp+3Ch] [ebp-4h] v1 = this; result = this[71]; v3 = 0; v15 = v1; v11 = 0; if ( result != 1 ) { do { if ( v3 < result ) { v4 = v1[67] + 108 * v3; v5 = 0; v14 = 0; if ( *(_DWORD *)(v4 + 104) ) { do { v6 = 0; if ( *(_DWORD *)(v4 + 100) ) { v10 = (double)v5; do { v7 = v3 + 1; v12 = (double)v6 * *(float *)(v4 + 56) + *(float *)(v4 + 64); v13 = v10 * *(float *)(v4 + 60) + *(float *)(v4 + 68); v8 = *(float *)(v4 + 56) + v12; v9 = v13 + *(float *)(v4 + 60); if ( v3 + 1 < result ) { do { if ( sub_8DCF00(v15, v7, v12, v13, v8, v9, 255.0) ) *(float *)(*(_DWORD *)(v4 + 92) + 4 * (v6 + v14 * *(_DWORD *)(v4 + 100))) = 0.0; result = v15[71]; ++v7; } while ( v7 < result ); v3 = v11; } ++v6; } while ( v6 < *(_DWORD *)(v4 + 100) ); v5 = v14; v1 = v15; } v14 = ++v5; } while ( v5 < *(_DWORD *)(v4 + 104) ); } } result = v1[71]; v11 = ++v3; } while ( v3 < result - 1 ); } return result; } //----- (008DE110) -------------------------------------------------------- _DWORD *__thiscall sub_8DE110(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi unsigned int v3; // ecx unsigned int v4; // eax int v5; // edx unsigned int v6; // esi int v7; // eax unsigned int v8; // esi size_t v9; // edi _DWORD *result; // eax _DWORD *v11; // ecx _DWORD *v12; // eax _DWORD *i; // edx v1 = this; v2 = this[3]; v3 = 4; v4 = v2; do { v5 = v4 % v3; v6 = v3; v4 = v3; v3 = v5; } while ( v5 ); v7 = v2 / v6; v8 = 4 * v7; v9 = 4 * v7 * v1[4] + 8; result = operator new[](v9, (const struct std::nothrow_t *)&unk_BA71E0); v11 = result; if ( result ) { v1[4] *= 2; v12 = (_DWORD *)((char *)result + v8 * ((v9 - v8 - 8) / v8)); *v12 = *v1; if ( v12 != v11 ) { for ( i = &v12[v8 / 0xFFFFFFFC]; i != v11; i = (_DWORD *)((char *)i - v8) ) { *i = v12; v12 = i; } *v11 = v12; } *v1 = v11; *(_DWORD *)((char *)v11 + v9 - 8) = v1[1]; *(_DWORD *)((char *)v11 + v9 - 4) = v1[2]; result = (_DWORD *)*v1; v1[2] = v9; v1[1] = v11; *v1 = *result; } return result; } //----- (008DE1B0) -------------------------------------------------------- int __thiscall sub_8DE1B0(_DWORD *this, int a2, void *a3, int a4) { _DWORD *v4; // edx _DWORD *v5; // ebx int v6; // ecx int v7; // eax int v8; // esi bool v9; // cl unsigned int v10; // edi int v11; // edi int v12; // edx int result; // eax int v14; // ecx char v15; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = this[1]; v7 = *(_DWORD *)(v6 + 4); v8 = v6; v9 = 1; v15 = 1; if ( !*(_BYTE *)(v7 + 17) ) { v10 = *((_DWORD *)a3 + 3); do { v8 = v7; if ( (_BYTE)a4 ) v9 = *(_DWORD *)(v7 + 12) >= v10; else v9 = v10 < *(_DWORD *)(v7 + 12); v15 = v9; if ( v9 ) v7 = *(_DWORD *)v7; else v7 = *(_DWORD *)(v7 + 8); } while ( !*(_BYTE *)(v7 + 17) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(_DWORD *)v5[1] ) { v12 = *(_DWORD *)sub_8DDD00(v5, (int)&a4, 1, v8, a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_67A6C0(&a4); v11 = a4; v4 = a3; } if ( *(_DWORD *)(v11 + 12) >= v4[3] ) { operator delete(v4); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *(_DWORD *)sub_8DDD00(v5, (int)&a4, v15, v8, v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (008DE290) -------------------------------------------------------- LONG __stdcall sub_8DE290(_DWORD *a1, _DWORD *a2) { LONG result; // eax int v3; // esi result = (LONG)a1; if ( a1 ) { *a1 = *a2; a1[1] = a2[1]; v3 = a2[2]; a1[2] = v3; if ( v3 ) { while ( InterlockedExchange((volatile LONG *)(v3 + 12), 1) ) Sleep(1u); ++*(_DWORD *)(v3 + 4); result = InterlockedExchange((volatile LONG *)(v3 + 12), 0); } } return result; } //----- (008DE2F0) -------------------------------------------------------- _DWORD *__thiscall sub_8DE2F0(_DWORD *this) { _DWORD *result; // eax result = this; this[4] = 0; this[5] = 15; *(_BYTE *)this = 0; this[12] = 15; this[11] = 0; *((_BYTE *)this + 28) = 0; this[20] = 0; this[24] = 0; this[23] = 0; return result; } //----- (008DE320) -------------------------------------------------------- void __thiscall sub_8DE320(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax int v3; // edi int v4; // edi v1 = this; v2 = (void *)this[23]; if ( v2 ) operator delete[](v2); v1[23] = 0; v3 = v1[24]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v4 = v1[20]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); if ( v1[12] >= 0x10u ) operator delete((void *)v1[7]); v1[12] = 15; v1[11] = 0; *((_BYTE *)v1 + 28) = 0; if ( v1[5] >= 0x10u ) operator delete((void *)*v1); v1[5] = 15; v1[4] = 0; *(_BYTE *)v1 = 0; } //----- (008DE410) -------------------------------------------------------- int __thiscall sub_8DE410(int this, int a2) { int v2; // esi int v3; // ecx int v4; // eax int v5; // eax v2 = this; *(_DWORD *)(this + 20) = 15; *(_DWORD *)(this + 16) = 0; *(_BYTE *)this = 0; sub_4017F0((const void **)this, (const void **)a2, 0, (void *)0xFFFFFFFF); v3 = v2 + 28; *(_DWORD *)(v3 + 20) = 15; *(_DWORD *)(v3 + 16) = 0; *(_BYTE *)v3 = 0; sub_4017F0((const void **)(v2 + 28), (const void **)(a2 + 28), 0, (void *)0xFFFFFFFF); *(float *)(v2 + 56) = *(float *)(a2 + 56); *(float *)(v2 + 60) = *(float *)(a2 + 60); *(float *)(v2 + 64) = *(float *)(a2 + 64); *(float *)(v2 + 68) = *(float *)(a2 + 68); *(float *)(v2 + 72) = *(float *)(a2 + 72); *(float *)(v2 + 76) = *(float *)(a2 + 76); v4 = *(_DWORD *)(a2 + 80); *(_DWORD *)(v2 + 80) = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); *(float *)(v2 + 84) = *(float *)(a2 + 84); *(float *)(v2 + 88) = *(float *)(a2 + 88); *(_DWORD *)(v2 + 92) = *(_DWORD *)(a2 + 92); v5 = *(_DWORD *)(a2 + 96); *(_DWORD *)(v2 + 96) = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); *(_DWORD *)(v2 + 100) = *(_DWORD *)(a2 + 100); *(_DWORD *)(v2 + 104) = *(_DWORD *)(a2 + 104); return v2; } //----- (008DE500) -------------------------------------------------------- int __cdecl sub_8DE500(int a1, int a2, int a3) { int v3; // edi int v4; // esi int v5; // ebx int v6; // eax int v7; // ebx int v8; // eax int v9; // edx if ( a1 == a2 ) return a3; v3 = a3; v4 = a1 + 56; do { sub_4017F0((const void **)v3, (const void **)(v4 - 56), 0, (void *)0xFFFFFFFF); sub_4017F0((const void **)(v3 + 28), (const void **)(v4 - 28), 0, (void *)0xFFFFFFFF); *(float *)(v3 + 56) = *(float *)v4; *(float *)(v3 + 60) = *(float *)(v4 + 4); *(float *)(v3 + 64) = *(float *)(v4 + 8); *(float *)(v3 + 68) = *(float *)(v4 + 12); *(float *)(v3 + 72) = *(float *)(v4 + 16); *(float *)(v3 + 76) = *(float *)(v4 + 20); v5 = *(_DWORD *)(v3 + 80); if ( v5 != *(_DWORD *)(v4 + 24) ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = *(_DWORD *)(v4 + 24); *(_DWORD *)(v3 + 80) = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } *(float *)(v3 + 84) = *(float *)(v4 + 28); *(float *)(v3 + 88) = *(float *)(v4 + 32); *(_DWORD *)(v3 + 92) = *(_DWORD *)(v4 + 36); v7 = *(_DWORD *)(v3 + 96); if ( v7 != *(_DWORD *)(v4 + 40) ) { if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = *(_DWORD *)(v4 + 40); *(_DWORD *)(v3 + 96) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } *(_DWORD *)(v3 + 100) = *(_DWORD *)(v4 + 44); v9 = *(_DWORD *)(v4 + 48); v4 += 108; *(_DWORD *)(v3 + 104) = v9; v3 += 108; } while ( v4 - 56 != a2 ); return v3; } //----- (008DE610) -------------------------------------------------------- struct _RTL_CRITICAL_SECTION *sub_8DE610() { if ( !(dword_BA66F0 & 1) ) { dword_BA66F0 |= 1u; InitializeCriticalSection(&stru_BA66C4); dword_BA66DC = 0; dword_BA66E0 = 0; dword_BA66E4 = 0; dword_BA66E8 = 24; dword_BA66EC = 32; atexit(sub_9A4AE0); } return &stru_BA66C4; } // BA66DC: using guessed type int dword_BA66DC; // BA66E4: using guessed type int dword_BA66E4; // BA66E8: using guessed type int dword_BA66E8; // BA66EC: using guessed type int dword_BA66EC; // BA66F0: using guessed type int dword_BA66F0; //----- (008DE670) -------------------------------------------------------- int __cdecl sub_8DE670(char *a1, char *a2, int a3) { int v3; // esi char *v4; // edi int v8; // [esp+0h] [ebp-24h] int v9; // [esp+10h] [ebp-14h] int *v10; // [esp+14h] [ebp-10h] int v11; // [esp+20h] [ebp-4h] v10 = &v8; v3 = a3; v4 = a1; v9 = a3; v11 = 0; while ( v4 != a2 ) { LOBYTE(v11) = 1; if ( v3 ) sub_8DE410(v3, (int)v4); v3 += 108; LOBYTE(v11) = 0; v4 += 108; } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008DE710) -------------------------------------------------------- void __cdecl sub_8DE710(int a1, unsigned int a2) { char *v2; // esi unsigned int v3; // edi int v6; // [esp+0h] [ebp-9Ch] void *v7; // [esp+10h] [ebp-8Ch] int v8; // [esp+14h] [ebp-88h] char *v9; // [esp+18h] [ebp-84h] char v10; // [esp+1Ch] [ebp-80h] int v11; // [esp+2Ch] [ebp-70h] int v12; // [esp+30h] [ebp-6Ch] char v13; // [esp+38h] [ebp-64h] int v14; // [esp+48h] [ebp-54h] int v15; // [esp+4Ch] [ebp-50h] int v16; // [esp+6Ch] [ebp-30h] int v17; // [esp+78h] [ebp-24h] int v18; // [esp+7Ch] [ebp-20h] int *v19; // [esp+8Ch] [ebp-10h] int v20; // [esp+98h] [ebp-4h] v19 = &v6; v2 = (char *)a1; v3 = a2; v8 = a1; v20 = 0; while ( 1 ) { v9 = v2; if ( v3 <= 0 ) break; v12 = 15; v11 = 0; v10 = 0; v15 = 15; v14 = 0; v13 = 0; v16 = 0; v18 = 0; v17 = 0; v7 = v2; LOBYTE(v20) = 2; if ( v2 ) sub_8DE410((int)v2, (int)&v10); LOBYTE(v20) = 0; sub_8DE320(&v10); --v3; v2 += 108; } } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008DE7F0) -------------------------------------------------------- int *__thiscall sub_8DE7F0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // eax int v11; // ecx int *v12; // ecx char v13; // cl _BYTE *v14; // eax char *v15; // esi int v16; // eax unsigned int v17; // eax int *result; // eax volatile LONG *v19; // [esp-Ch] [ebp-1Ch] int *v20; // [esp+8h] [ebp-8h] _DWORD *v21; // [esp+Ch] [ebp-4h] v3 = (int *)a3; v21 = this; if ( *(_BYTE *)(a3 + 25) ) std::_Xout_of_range("invalid map/set iterator"); v20 = (int *)a3; sub_691190(&a3); if ( *(_BYTE *)(*v3 + 25) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; v7 = v21; v8 = v21[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v21[1] == v3 ) { if ( *(_BYTE *)(v4 + 25) ) { v9 = (_DWORD *)v6; } else { v9 = sub_691120((_DWORD *)v4); v7 = v21; } *(_DWORD *)v7[1] = v9; } if ( *(int **)(v7[1] + 8) == v3 ) { if ( *(_BYTE *)(v4 + 25) ) { *(_DWORD *)(v7[1] + 8) = v6; } else { v10 = sub_691100(v4); v7 = v21; *(_DWORD *)(v21[1] + 8) = v10; } } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 25) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v21[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 24); *(_BYTE *)(v5 + 24) = *((_BYTE *)v3 + 24); *((_BYTE *)v3 + 24) = v13; v7 = v21; LABEL_35: if ( *((_BYTE *)v3 + 24) == 1 ) { for ( ; v4 != *(_DWORD *)(v7[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 24) != 1 ) break; v14 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v14 = *(_BYTE **)(v6 + 8); if ( !v14[24] ) { v14[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_691540(v7, v6); v14 = *(_BYTE **)(v6 + 8); v7 = v21; } if ( v14[25] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v14 + 24) != 1 || *(_BYTE *)(*((_DWORD *)v14 + 2) + 24) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 24) == 1 ) { *(_BYTE *)(*(_DWORD *)v14 + 24) = 1; v14[24] = 0; sub_8DCA20(v7, v14); v14 = *(_BYTE **)(v6 + 8); v7 = v21; } v14[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*((_DWORD *)v14 + 2) + 24) = 1; sub_691540(v7, v6); break; } } else { if ( !v14[24] ) { v14[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_8DCA20(v7, (_DWORD *)v6); v14 = *(_BYTE **)v6; v7 = v21; } if ( v14[25] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v14 + 2) + 24) != 1 || *(_BYTE *)(*(_DWORD *)v14 + 24) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v14 + 24) == 1 ) { *(_BYTE *)(*((_DWORD *)v14 + 2) + 24) = 1; v14[24] = 0; sub_691540(v7, (int)v14); v14 = *(_BYTE **)v6; v7 = v21; } v14[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*(_DWORD *)v14 + 24) = 1; sub_8DCA20(v7, (_DWORD *)v6); break; } } v14[24] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 24) = 1; } v15 = (char *)v3[5]; if ( v15 ) { while ( InterlockedExchange((volatile LONG *)v15 + 3, 1) ) Sleep(1u); v16 = *((_DWORD *)v15 + 1) - 1; *((_DWORD *)v15 + 1) = v16; v19 = (volatile LONG *)(v15 + 12); if ( v16 ) { InterlockedExchange(v19, 0); } else { InterlockedExchange(v19, 0); (*(void (__thiscall **)(char *))(*(_DWORD *)v15 + 4))(v15); sub_8DC780(v15); } v3 = v20; } if ( !(dword_BA6630 & 1) ) { dword_BA6630 |= 1u; InitializeCriticalSection(&stru_BA6604); dword_BA661C = 0; dword_BA6620 = 0; dword_BA6624 = 0; dword_BA6628 = 28; dword_BA662C = 32; atexit(sub_9A4A90); } EnterCriticalSection(&stru_BA6604); *v3 = dword_BA661C; dword_BA661C = (int)v3; LeaveCriticalSection(&stru_BA6604); v17 = v21[2]; if ( v17 > 0 ) v21[2] = v17 - 1; result = a2; *a2 = a3; return result; } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; // BA6628: using guessed type int dword_BA6628; // BA662C: using guessed type int dword_BA662C; // BA6630: using guessed type int dword_BA6630; //----- (008DEB20) -------------------------------------------------------- int *__thiscall sub_8DEB20(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax unsigned int v16; // eax int *result; // eax int v18; // [esp+Ch] [ebp-8h] _DWORD *v19; // [esp+10h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 25) ) std::_Xout_of_range("invalid map/set iterator"); v18 = a3; sub_691190(&a3); if ( *(_BYTE *)(*v3 + 25) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 25) ) { v9 = (_DWORD *)v6; } else { v9 = sub_691120((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 25) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_691100(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 25) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 25) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 24); *(_BYTE *)(v5 + 24) = *((_BYTE *)v3 + 24); *((_BYTE *)v3 + 24) = v13; LABEL_35: if ( *(_BYTE *)(v18 + 24) == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 24) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[24] ) { v15[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_691540(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[25] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 24) = 1; v15[24] = 0; sub_8DCA20(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) = 1; sub_691540(i, v6); break; } } else { if ( !v15[24] ) { v15[24] = 1; *(_BYTE *)(v6 + 24) = 0; sub_8DCA20(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[25] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 24) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 24) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 24) = 1; v15[24] = 0; sub_691540(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[24] = *(_BYTE *)(v6 + 24); *(_BYTE *)(v6 + 24) = 1; *(_BYTE *)(*(_DWORD *)v15 + 24) = 1; sub_8DCA20(i, (_DWORD *)v6); break; } } v15[24] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 24) = 1; } if ( !(dword_BA6630 & 1) ) { dword_BA6630 |= 1u; InitializeCriticalSection(&stru_BA6604); dword_BA661C = 0; dword_BA6620 = 0; dword_BA6624 = 0; dword_BA6628 = 28; dword_BA662C = 32; atexit(sub_9A4A90); } EnterCriticalSection(&stru_BA6604); *(_DWORD *)v18 = dword_BA661C; dword_BA661C = v18; LeaveCriticalSection(&stru_BA6604); v16 = v19[2]; if ( v16 > 0 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; // BA6628: using guessed type int dword_BA6628; // BA662C: using guessed type int dword_BA662C; // BA6630: using guessed type int dword_BA6630; //----- (008DEDF0) -------------------------------------------------------- int *__thiscall sub_8DEDF0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *i; // ecx _BYTE *v15; // eax unsigned int v16; // eax int *result; // eax int v18; // [esp+Ch] [ebp-8h] _DWORD *v19; // [esp+10h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 21) ) std::_Xout_of_range("invalid map/set iterator"); v18 = a3; sub_717D90(&a3); if ( *(_BYTE *)(*v3 + 21) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 21) ) { v9 = (_DWORD *)v6; } else { v9 = sub_6A0F50((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 21) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_667AC0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 21) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 21) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 20); *(_BYTE *)(v5 + 20) = *((_BYTE *)v3 + 20); *((_BYTE *)v3 + 20) = v13; LABEL_35: if ( *(_BYTE *)(v18 + 20) == 1 ) { for ( i = v19; v4 != *(_DWORD *)(i[1] + 4); v6 = *(_DWORD *)(v6 + 4) ) { if ( *(_BYTE *)(v4 + 20) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_6915A0(i, v6); v15 = *(_BYTE **)(v6 + 8); i = v19; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; v15[20] = 0; sub_664400(i, v15); v15 = *(_BYTE **)(v6 + 8); i = v19; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; sub_6915A0(i, v6); break; } } else { if ( !v15[20] ) { v15[20] = 1; *(_BYTE *)(v6 + 20) = 0; sub_664400(i, (_DWORD *)v6); v15 = *(_BYTE **)v6; i = v19; } if ( v15[21] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 20) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 20) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 20) = 1; v15[20] = 0; sub_6915A0(i, (int)v15); v15 = *(_BYTE **)v6; i = v19; } v15[20] = *(_BYTE *)(v6 + 20); *(_BYTE *)(v6 + 20) = 1; *(_BYTE *)(*(_DWORD *)v15 + 20) = 1; sub_664400(i, (_DWORD *)v6); break; } } v15[20] = 0; LABEL_53: v4 = v6; } *(_BYTE *)(v4 + 20) = 1; } if ( !(dword_BA66F0 & 1) ) { dword_BA66F0 |= 1u; InitializeCriticalSection(&stru_BA66C4); dword_BA66DC = 0; dword_BA66E0 = 0; dword_BA66E4 = 0; dword_BA66E8 = 24; dword_BA66EC = 32; atexit(sub_9A4AE0); } EnterCriticalSection(&stru_BA66C4); *(_DWORD *)v18 = dword_BA66DC; dword_BA66DC = v18; LeaveCriticalSection(&stru_BA66C4); v16 = v19[2]; if ( v16 > 0 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } // BA66DC: using guessed type int dword_BA66DC; // BA66E4: using guessed type int dword_BA66E4; // BA66E8: using guessed type int dword_BA66E8; // BA66EC: using guessed type int dword_BA66EC; // BA66F0: using guessed type int dword_BA66F0; //----- (008DF0C0) -------------------------------------------------------- void __stdcall sub_8DF0C0(int a1) { int *v1; // esi int v2; // edi int v3; // eax int v4; // ebx volatile LONG *v5; // [esp-10h] [ebp-1Ch] int v6; // [esp+8h] [ebp-4h] v1 = (int *)a1; if ( !*(_BYTE *)(a1 + 25) ) { while ( 1 ) { sub_8DF0C0(v1[2]); v2 = *(_DWORD *)(a1 + 20); v6 = *v1; if ( v2 ) { while ( InterlockedExchange((volatile LONG *)(v2 + 12), 1) ) Sleep(1u); v3 = *(_DWORD *)(v2 + 4) - 1; *(_DWORD *)(v2 + 4) = v3; v5 = (volatile LONG *)(v2 + 12); if ( v3 ) { InterlockedExchange(v5, 0); } else { InterlockedExchange(v5, 0); (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 4))(v2); while ( InterlockedExchange((volatile LONG *)(v2 + 12), 1) ) Sleep(1u); v4 = *(_DWORD *)(v2 + 8) - 1; *(_DWORD *)(v2 + 8) = v4; InterlockedExchange((volatile LONG *)(v2 + 12), 0); if ( !v4 ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 8))(v2); } } if ( !(dword_BA6630 & 1) ) { dword_BA6630 |= 1u; InitializeCriticalSection(&stru_BA6604); dword_BA661C = 0; dword_BA6620 = 0; dword_BA6624 = 0; dword_BA6628 = 28; dword_BA662C = 32; atexit(sub_9A4A90); } EnterCriticalSection(&stru_BA6604); *(_DWORD *)a1 = dword_BA661C; dword_BA661C = a1; LeaveCriticalSection(&stru_BA6604); a1 = v6; if ( *(_BYTE *)(v6 + 25) ) break; v1 = (int *)v6; } } } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; // BA6628: using guessed type int dword_BA6628; // BA662C: using guessed type int dword_BA662C; // BA6630: using guessed type int dword_BA6630; //----- (008DF200) -------------------------------------------------------- void __stdcall sub_8DF200(_DWORD *a1) { _DWORD *v1; // edi _DWORD *i; // esi v1 = a1; for ( i = a1; !*((_BYTE *)i + 25); v1 = i ) { sub_8DF200(i[2]); i = (_DWORD *)*i; if ( !(dword_BA6630 & 1) ) { dword_BA6630 |= 1u; InitializeCriticalSection(&stru_BA6604); dword_BA661C = 0; dword_BA6620 = 0; dword_BA6624 = 0; dword_BA6628 = 28; dword_BA662C = 32; atexit(sub_9A4A90); } EnterCriticalSection(&stru_BA6604); *v1 = dword_BA661C; dword_BA661C = (int)v1; LeaveCriticalSection(&stru_BA6604); } } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; // BA6628: using guessed type int dword_BA6628; // BA662C: using guessed type int dword_BA662C; // BA6630: using guessed type int dword_BA6630; //----- (008DF2C0) -------------------------------------------------------- void __stdcall sub_8DF2C0(_DWORD *a1) { _DWORD *v1; // edi _DWORD *i; // esi v1 = a1; for ( i = a1; !*((_BYTE *)i + 21); v1 = i ) { sub_8DF2C0(i[2]); i = (_DWORD *)*i; if ( !(dword_BA66F0 & 1) ) { dword_BA66F0 |= 1u; InitializeCriticalSection(&stru_BA66C4); dword_BA66DC = 0; dword_BA66E0 = 0; dword_BA66E4 = 0; dword_BA66E8 = 24; dword_BA66EC = 32; atexit(sub_9A4AE0); } EnterCriticalSection(&stru_BA66C4); *v1 = dword_BA66DC; dword_BA66DC = (int)v1; LeaveCriticalSection(&stru_BA66C4); } } // BA66DC: using guessed type int dword_BA66DC; // BA66E4: using guessed type int dword_BA66E4; // BA66E8: using guessed type int dword_BA66E8; // BA66EC: using guessed type int dword_BA66EC; // BA66F0: using guessed type int dword_BA66F0; //----- (008DF380) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG **__thiscall sub_8DF380(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG **a2, char a3, PRTL_CRITICAL_SECTION_DEBUG **a4, PRTL_CRITICAL_SECTION_DEBUG *a5) { unsigned int v5; // eax PRTL_CRITICAL_SECTION_DEBUG *v6; // edi char *v7; // ecx struct _RTL_CRITICAL_SECTION *v8; // esi PRTL_CRITICAL_SECTION_DEBUG **v9; // edx PRTL_CRITICAL_SECTION_DEBUG **v10; // edx int v11; // edx PRTL_CRITICAL_SECTION_DEBUG *v12; // eax PRTL_CRITICAL_SECTION_DEBUG v13; // edx _RTL_CRITICAL_SECTION *v14; // esi LONG v15; // esi PRTL_CRITICAL_SECTION_DEBUG **v16; // edx int v17; // esi PRTL_CRITICAL_SECTION_DEBUG **v18; // esi _RTL_CRITICAL_SECTION *v19; // edx LONG *v20; // esi LONG v21; // edi int v22; // edi LONG **v23; // edi PRTL_CRITICAL_SECTION_DEBUG v24; // esi _RTL_CRITICAL_SECTION_DEBUG *v25; // edx _LIST_ENTRY *v26; // esi int v27; // esi _RTL_CRITICAL_SECTION_DEBUG **v28; // esi int v29; // edi _RTL_CRITICAL_SECTION **v30; // edi int v31; // ecx PRTL_CRITICAL_SECTION_DEBUG **result; // eax v5 = this[2]; v6 = a5; if ( v5 >= 0xFFFFFFFE ) { v7 = (char *)a5[5]; if ( v7 ) sub_8DCB10(v7); v8 = sub_8D6CC0(); EnterCriticalSection(v8); *a5 = v8[1].DebugInfo; v8[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)a5; LeaveCriticalSection(v8); std::_Xlength_error("map/set too long"); } this[2] = v5 + 1; a5[1] = (PRTL_CRITICAL_SECTION_DEBUG)a4; v9 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; if ( a4 == v9 ) { v9[1] = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *a4 = a5; v10 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; if ( a4 == (PRTL_CRITICAL_SECTION_DEBUG **)*v10 ) *v10 = a5; } else { a4[2] = a5; v11 = this[1]; if ( a4 == *(PRTL_CRITICAL_SECTION_DEBUG ***)(v11 + 8) ) *(_DWORD *)(v11 + 8) = a5; } v12 = a5; while ( !LOBYTE(v12[1]->Spare[0]) ) { v13 = v12[1]; v14 = v13->CriticalSection; if ( v13 == v14->DebugInfo ) { v15 = v14->RecursionCount; if ( *(_BYTE *)(v15 + 24) ) { if ( v12 == (PRTL_CRITICAL_SECTION_DEBUG *)v13->ProcessLocksList.Flink ) { v12 = (PRTL_CRITICAL_SECTION_DEBUG *)v12[1]; v16 = (PRTL_CRITICAL_SECTION_DEBUG **)v13->ProcessLocksList.Flink; v12[2] = (PRTL_CRITICAL_SECTION_DEBUG)*v16; if ( !*((_BYTE *)*v16 + 25) ) (*v16)[1] = (PRTL_CRITICAL_SECTION_DEBUG)v12; v16[1] = (PRTL_CRITICAL_SECTION_DEBUG *)v12[1]; v17 = this[1]; if ( v12 == *(PRTL_CRITICAL_SECTION_DEBUG **)(v17 + 4) ) { *(_DWORD *)(v17 + 4) = v16; } else { v18 = (PRTL_CRITICAL_SECTION_DEBUG **)v12[1]; if ( v12 == *v18 ) *v18 = (PRTL_CRITICAL_SECTION_DEBUG *)v16; else v18[2] = (PRTL_CRITICAL_SECTION_DEBUG *)v16; } *v16 = v12; v12[1] = (PRTL_CRITICAL_SECTION_DEBUG)v16; } LOBYTE(v12[1]->Spare[0]) = 1; LOBYTE(v12[1]->CriticalSection[1].DebugInfo) = 0; v19 = v12[1]->CriticalSection; v20 = (LONG *)v19->DebugInfo; v19->DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v19->DebugInfo->ProcessLocksList.Flink; v21 = v20[2]; if ( !*(_BYTE *)(v21 + 25) ) *(_DWORD *)(v21 + 4) = v19; v20[1] = v19->LockCount; v22 = this[1]; if ( v19 == *(_RTL_CRITICAL_SECTION **)(v22 + 4) ) { *(_DWORD *)(v22 + 4) = v20; v20[2] = (LONG)v19; } else { v23 = (LONG **)v19->LockCount; if ( v19 == (_RTL_CRITICAL_SECTION *)v23[2] ) v23[2] = v20; else *v23 = v20; v20[2] = (LONG)v19; } LABEL_53: v6 = a5; v19->LockCount = (LONG)v20; continue; } LOBYTE(v13->Spare[0]) = 1; *(_BYTE *)(v15 + 24) = 1; LOBYTE(v12[1]->CriticalSection[1].DebugInfo) = 0; v12 = &v12[1]->CriticalSection->DebugInfo; } else { v24 = v14->DebugInfo; if ( LOBYTE(v24->Spare[0]) ) { if ( v12 == *(PRTL_CRITICAL_SECTION_DEBUG **)&v13->Type ) { v12 = (PRTL_CRITICAL_SECTION_DEBUG *)v12[1]; v25 = *(_RTL_CRITICAL_SECTION_DEBUG **)&v13->Type; *v12 = (PRTL_CRITICAL_SECTION_DEBUG)v25->ProcessLocksList.Flink; v26 = v25->ProcessLocksList.Flink; if ( !BYTE1(v26[3].Flink) ) v26->Blink = (_LIST_ENTRY *)v12; v25->CriticalSection = (_RTL_CRITICAL_SECTION *)v12[1]; v27 = this[1]; if ( v12 == *(PRTL_CRITICAL_SECTION_DEBUG **)(v27 + 4) ) { *(_DWORD *)(v27 + 4) = v25; } else { v28 = (_RTL_CRITICAL_SECTION_DEBUG **)v12[1]; if ( v12 == (PRTL_CRITICAL_SECTION_DEBUG *)v28[2] ) v28[2] = v25; else *v28 = v25; } v25->ProcessLocksList.Flink = (_LIST_ENTRY *)v12; v12[1] = v25; } LOBYTE(v12[1]->Spare[0]) = 1; LOBYTE(v12[1]->CriticalSection[1].DebugInfo) = 0; v19 = v12[1]->CriticalSection; v20 = (LONG *)v19->RecursionCount; v19->RecursionCount = *v20; if ( !*(_BYTE *)(*v20 + 25) ) *(_DWORD *)(*v20 + 4) = v19; v20[1] = v19->LockCount; v29 = this[1]; if ( v19 == *(_RTL_CRITICAL_SECTION **)(v29 + 4) ) { *(_DWORD *)(v29 + 4) = v20; } else { v30 = (_RTL_CRITICAL_SECTION **)v19->LockCount; if ( v19 == *v30 ) *v30 = (_RTL_CRITICAL_SECTION *)v20; else v30[2] = (_RTL_CRITICAL_SECTION *)v20; } *v20 = (LONG)v19; goto LABEL_53; } LOBYTE(v13->Spare[0]) = 1; LOBYTE(v24->Spare[0]) = 1; LOBYTE(v12[1]->CriticalSection[1].DebugInfo) = 0; v12 = &v12[1]->CriticalSection->DebugInfo; } } v31 = *(_DWORD *)(this[1] + 4); result = a2; *a2 = v6; *(_BYTE *)(v31 + 24) = 1; return result; } //----- (008DF5C0) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG **__thiscall sub_8DF5C0(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG **a2, char a3, PRTL_CRITICAL_SECTION_DEBUG **a4, PRTL_CRITICAL_SECTION_DEBUG *a5) { unsigned int v5; // eax struct _RTL_CRITICAL_SECTION *v6; // esi PRTL_CRITICAL_SECTION_DEBUG *v7; // edi PRTL_CRITICAL_SECTION_DEBUG **v8; // edx PRTL_CRITICAL_SECTION_DEBUG **v9; // edx int v10; // edx PRTL_CRITICAL_SECTION_DEBUG *v11; // eax PRTL_CRITICAL_SECTION_DEBUG v12; // edx _RTL_CRITICAL_SECTION *v13; // esi LONG v14; // esi PRTL_CRITICAL_SECTION_DEBUG **v15; // edx int v16; // esi PRTL_CRITICAL_SECTION_DEBUG **v17; // esi _RTL_CRITICAL_SECTION *v18; // edx LONG *v19; // esi LONG v20; // edi int v21; // edi LONG **v22; // edi PRTL_CRITICAL_SECTION_DEBUG v23; // esi _RTL_CRITICAL_SECTION_DEBUG *v24; // edx _LIST_ENTRY *v25; // esi int v26; // esi _RTL_CRITICAL_SECTION_DEBUG **v27; // esi int v28; // edi _RTL_CRITICAL_SECTION **v29; // edi int v30; // ecx PRTL_CRITICAL_SECTION_DEBUG **result; // eax v5 = this[2]; if ( v5 >= 0xFFFFFFFE ) { v6 = sub_8DE610(); EnterCriticalSection(v6); *a5 = v6[1].DebugInfo; v6[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)a5; LeaveCriticalSection(v6); std::_Xlength_error("map/set too long"); } v7 = a5; this[2] = v5 + 1; a5[1] = (PRTL_CRITICAL_SECTION_DEBUG)a4; v8 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; if ( a4 == v8 ) { v8[1] = a5; *(_DWORD *)this[1] = a5; *(_DWORD *)(this[1] + 8) = a5; } else if ( a3 ) { *a4 = a5; v9 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; if ( a4 == (PRTL_CRITICAL_SECTION_DEBUG **)*v9 ) *v9 = a5; } else { a4[2] = a5; v10 = this[1]; if ( a4 == *(PRTL_CRITICAL_SECTION_DEBUG ***)(v10 + 8) ) *(_DWORD *)(v10 + 8) = a5; } v11 = a5; while ( !LOBYTE(v11[1]->ContentionCount) ) { v12 = v11[1]; v13 = v12->CriticalSection; if ( v12 == v13->DebugInfo ) { v14 = v13->RecursionCount; if ( *(_BYTE *)(v14 + 20) ) { if ( v11 == (PRTL_CRITICAL_SECTION_DEBUG *)v12->ProcessLocksList.Flink ) { v11 = (PRTL_CRITICAL_SECTION_DEBUG *)v11[1]; v15 = (PRTL_CRITICAL_SECTION_DEBUG **)v12->ProcessLocksList.Flink; v11[2] = (PRTL_CRITICAL_SECTION_DEBUG)*v15; if ( !*((_BYTE *)*v15 + 21) ) (*v15)[1] = (PRTL_CRITICAL_SECTION_DEBUG)v11; v15[1] = (PRTL_CRITICAL_SECTION_DEBUG *)v11[1]; v16 = this[1]; if ( v11 == *(PRTL_CRITICAL_SECTION_DEBUG **)(v16 + 4) ) { *(_DWORD *)(v16 + 4) = v15; } else { v17 = (PRTL_CRITICAL_SECTION_DEBUG **)v11[1]; if ( v11 == *v17 ) *v17 = (PRTL_CRITICAL_SECTION_DEBUG *)v15; else v17[2] = (PRTL_CRITICAL_SECTION_DEBUG *)v15; } *v15 = v11; v11[1] = (PRTL_CRITICAL_SECTION_DEBUG)v15; } LOBYTE(v11[1]->ContentionCount) = 1; LOBYTE(v11[1]->CriticalSection->SpinCount) = 0; v18 = v11[1]->CriticalSection; v19 = (LONG *)v18->DebugInfo; v18->DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v18->DebugInfo->ProcessLocksList.Flink; v20 = v19[2]; if ( !*(_BYTE *)(v20 + 21) ) *(_DWORD *)(v20 + 4) = v18; v19[1] = v18->LockCount; v21 = this[1]; if ( v18 == *(_RTL_CRITICAL_SECTION **)(v21 + 4) ) { *(_DWORD *)(v21 + 4) = v19; v19[2] = (LONG)v18; } else { v22 = (LONG **)v18->LockCount; if ( v18 == (_RTL_CRITICAL_SECTION *)v22[2] ) v22[2] = v19; else *v22 = v19; v19[2] = (LONG)v18; } LABEL_51: v7 = a5; v18->LockCount = (LONG)v19; continue; } LOBYTE(v12->ContentionCount) = 1; *(_BYTE *)(v14 + 20) = 1; LOBYTE(v11[1]->CriticalSection->SpinCount) = 0; v11 = &v11[1]->CriticalSection->DebugInfo; } else { v23 = v13->DebugInfo; if ( LOBYTE(v23->ContentionCount) ) { if ( v11 == *(PRTL_CRITICAL_SECTION_DEBUG **)&v12->Type ) { v11 = (PRTL_CRITICAL_SECTION_DEBUG *)v11[1]; v24 = *(_RTL_CRITICAL_SECTION_DEBUG **)&v12->Type; *v11 = (PRTL_CRITICAL_SECTION_DEBUG)v24->ProcessLocksList.Flink; v25 = v24->ProcessLocksList.Flink; if ( !BYTE1(v25[2].Blink) ) v25->Blink = (_LIST_ENTRY *)v11; v24->CriticalSection = (_RTL_CRITICAL_SECTION *)v11[1]; v26 = this[1]; if ( v11 == *(PRTL_CRITICAL_SECTION_DEBUG **)(v26 + 4) ) { *(_DWORD *)(v26 + 4) = v24; } else { v27 = (_RTL_CRITICAL_SECTION_DEBUG **)v11[1]; if ( v11 == (PRTL_CRITICAL_SECTION_DEBUG *)v27[2] ) v27[2] = v24; else *v27 = v24; } v24->ProcessLocksList.Flink = (_LIST_ENTRY *)v11; v11[1] = v24; } LOBYTE(v11[1]->ContentionCount) = 1; LOBYTE(v11[1]->CriticalSection->SpinCount) = 0; v18 = v11[1]->CriticalSection; v19 = (LONG *)v18->RecursionCount; v18->RecursionCount = *v19; if ( !*(_BYTE *)(*v19 + 21) ) *(_DWORD *)(*v19 + 4) = v18; v19[1] = v18->LockCount; v28 = this[1]; if ( v18 == *(_RTL_CRITICAL_SECTION **)(v28 + 4) ) { *(_DWORD *)(v28 + 4) = v19; } else { v29 = (_RTL_CRITICAL_SECTION **)v18->LockCount; if ( v18 == *v29 ) *v29 = (_RTL_CRITICAL_SECTION *)v19; else v29[2] = (_RTL_CRITICAL_SECTION *)v19; } *v19 = (LONG)v18; goto LABEL_51; } LOBYTE(v12->ContentionCount) = 1; LOBYTE(v23->ContentionCount) = 1; LOBYTE(v11[1]->CriticalSection->SpinCount) = 0; v11 = &v11[1]->CriticalSection->DebugInfo; } } v30 = *(_DWORD *)(this[1] + 4); result = a2; *a2 = v7; *(_BYTE *)(v30 + 20) = 1; return result; } //----- (008DF800) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DF800(_DWORD *this) { _DWORD *v1; // ebx struct _RTL_CRITICAL_SECTION *v2; // edi PRTL_CRITICAL_SECTION_DEBUG *v3; // esi struct _RTL_CRITICAL_SECTION *v4; // ecx void **v6; // [esp+Ch] [ebp-10h] char *v7; // [esp+18h] [ebp-4h] v1 = this; v2 = sub_8D6CC0(); EnterCriticalSection(v2); v3 = (PRTL_CRITICAL_SECTION_DEBUG *)v2[1].DebugInfo; v4 = v2 + 1; if ( v3 ) v4->DebugInfo = *v3; else v3 = (PRTL_CRITICAL_SECTION_DEBUG *)sub_8DE110(v4); LeaveCriticalSection(v2); if ( !v3 ) { v7 = "bad allocation"; std::exception::exception((std::exception *)&v6, (const char *const *)&v7, 1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *v3 = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; v3[1] = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; v3[2] = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; *((_WORD *)v3 + 12) = 0; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DF890) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DF890(_DWORD *this) { _DWORD *v1; // ebx struct _RTL_CRITICAL_SECTION *v2; // edi PRTL_CRITICAL_SECTION_DEBUG *v3; // esi struct _RTL_CRITICAL_SECTION *v4; // ecx void **v6; // [esp+Ch] [ebp-10h] char *v7; // [esp+18h] [ebp-4h] v1 = this; v2 = sub_8DE610(); EnterCriticalSection(v2); v3 = (PRTL_CRITICAL_SECTION_DEBUG *)v2[1].DebugInfo; v4 = v2 + 1; if ( v3 ) v4->DebugInfo = *v3; else v3 = (PRTL_CRITICAL_SECTION_DEBUG *)sub_8DE110(v4); LeaveCriticalSection(v2); if ( !v3 ) { v7 = "bad allocation"; std::exception::exception((std::exception *)&v6, (const char *const *)&v7, 1); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } *v3 = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; v3[1] = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; v3[2] = (PRTL_CRITICAL_SECTION_DEBUG)v1[1]; *((_WORD *)v3 + 10) = 0; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DF980) -------------------------------------------------------- _DWORD *__thiscall sub_8DF980(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi struct _RTL_CRITICAL_SECTION *v4; // ebx PRTL_CRITICAL_SECTION_DEBUG *v5; // edi struct _RTL_CRITICAL_SECTION *v6; // ecx void **v8; // [esp+Ch] [ebp-10h] char *v9; // [esp+18h] [ebp-4h] v3 = this; this[2] = 0; v4 = sub_8D6CC0(); EnterCriticalSection(v4); v5 = (PRTL_CRITICAL_SECTION_DEBUG *)v4[1].DebugInfo; v6 = v4 + 1; if ( v5 ) v6->DebugInfo = *v5; else v5 = (PRTL_CRITICAL_SECTION_DEBUG *)sub_8DE110(v6); LeaveCriticalSection(v4); if ( !v5 ) { v9 = "bad allocation"; std::exception::exception((std::exception *)&v8, (const char *const *)&v9, 1); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v3[1] = v5; *v5 = (PRTL_CRITICAL_SECTION_DEBUG)v5; *(_DWORD *)(v3[1] + 4) = v3[1]; *(_DWORD *)(v3[1] + 8) = v3[1]; *(_BYTE *)(v3[1] + 24) = 1; *(_BYTE *)(v3[1] + 25) = 1; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DFA20) -------------------------------------------------------- _DWORD *__thiscall sub_8DFA20(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi struct _RTL_CRITICAL_SECTION *v4; // ebx PRTL_CRITICAL_SECTION_DEBUG *v5; // edi struct _RTL_CRITICAL_SECTION *v6; // ecx void **v8; // [esp+Ch] [ebp-10h] char *v9; // [esp+18h] [ebp-4h] v3 = this; this[2] = 0; v4 = sub_8DE610(); EnterCriticalSection(v4); v5 = (PRTL_CRITICAL_SECTION_DEBUG *)v4[1].DebugInfo; v6 = v4 + 1; if ( v5 ) v6->DebugInfo = *v5; else v5 = (PRTL_CRITICAL_SECTION_DEBUG *)sub_8DE110(v6); LeaveCriticalSection(v4); if ( !v5 ) { v9 = "bad allocation"; std::exception::exception((std::exception *)&v8, (const char *const *)&v9, 1); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } v3[1] = v5; *v5 = (PRTL_CRITICAL_SECTION_DEBUG)v5; *(_DWORD *)(v3[1] + 4) = v3[1]; *(_DWORD *)(v3[1] + 8) = v3[1]; *(_BYTE *)(v3[1] + 20) = 1; *(_BYTE *)(v3[1] + 21) = 1; return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008DFAC0) -------------------------------------------------------- int __thiscall sub_8DFAC0(_DWORD *this, int a2, int a3, PRTL_CRITICAL_SECTION_DEBUG **a4) { int v4; // edx _DWORD *v5; // ebx PRTL_CRITICAL_SECTION_DEBUG **v6; // ecx PRTL_CRITICAL_SECTION_DEBUG *v7; // eax PRTL_CRITICAL_SECTION_DEBUG **v8; // esi bool v9; // cl unsigned int v10; // edi PRTL_CRITICAL_SECTION_DEBUG **v11; // edi PRTL_CRITICAL_SECTION_DEBUG *v12; // edx int result; // eax PRTL_CRITICAL_SECTION_DEBUG *v14; // ecx char *v15; // ecx struct _RTL_CRITICAL_SECTION *v16; // esi char v17; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; v7 = v6[1]; v8 = v6; v9 = 1; v17 = 1; if ( !*((_BYTE *)v7 + 25) ) { v10 = *(_DWORD *)(a3 + 12); do { v8 = (PRTL_CRITICAL_SECTION_DEBUG **)v7; if ( (_BYTE)a4 ) v9 = (unsigned int)v7[3] >= v10; else v9 = v10 < (unsigned int)v7[3]; v17 = v9; if ( v9 ) v7 = (PRTL_CRITICAL_SECTION_DEBUG *)*v7; else v7 = (PRTL_CRITICAL_SECTION_DEBUG *)v7[2]; } while ( !*((_BYTE *)v7 + 25) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(PRTL_CRITICAL_SECTION_DEBUG ***)v5[1] ) { v12 = *sub_8DF380(v5, (PRTL_CRITICAL_SECTION_DEBUG **)&a4, 1, v8, (PRTL_CRITICAL_SECTION_DEBUG *)a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_8DCA80(&a4); v11 = a4; v4 = a3; } if ( (unsigned int)v11[3] >= *(_DWORD *)(v4 + 12) ) { v15 = *(char **)(v4 + 20); if ( v15 ) sub_8DCB10(v15); v16 = sub_8D6CC0(); EnterCriticalSection(v16); *(_DWORD *)a3 = v16[1].DebugInfo; v16[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)a3; LeaveCriticalSection(v16); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *sub_8DF380(v5, (PRTL_CRITICAL_SECTION_DEBUG **)&a4, v17, v8, (PRTL_CRITICAL_SECTION_DEBUG *)v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (008DFBC0) -------------------------------------------------------- int __thiscall sub_8DFBC0(_DWORD *this, int a2, int a3, PRTL_CRITICAL_SECTION_DEBUG **a4) { int v4; // edx _DWORD *v5; // ebx PRTL_CRITICAL_SECTION_DEBUG **v6; // ecx PRTL_CRITICAL_SECTION_DEBUG *v7; // eax PRTL_CRITICAL_SECTION_DEBUG **v8; // esi bool v9; // cl unsigned int v10; // edi PRTL_CRITICAL_SECTION_DEBUG **v11; // edi PRTL_CRITICAL_SECTION_DEBUG *v12; // edx int result; // eax PRTL_CRITICAL_SECTION_DEBUG *v14; // ecx struct _RTL_CRITICAL_SECTION *v15; // esi char v16; // [esp+Ch] [ebp-4h] v4 = a3; v5 = this; v6 = (PRTL_CRITICAL_SECTION_DEBUG **)this[1]; v7 = v6[1]; v8 = v6; v9 = 1; v16 = 1; if ( !*((_BYTE *)v7 + 21) ) { v10 = *(_DWORD *)(a3 + 12); do { v8 = (PRTL_CRITICAL_SECTION_DEBUG **)v7; if ( (_BYTE)a4 ) v9 = (unsigned int)v7[3] >= v10; else v9 = v10 < (unsigned int)v7[3]; v16 = v9; if ( v9 ) v7 = (PRTL_CRITICAL_SECTION_DEBUG *)*v7; else v7 = (PRTL_CRITICAL_SECTION_DEBUG *)v7[2]; } while ( !*((_BYTE *)v7 + 21) ); } v11 = v8; a4 = v8; if ( v9 ) { if ( v8 == *(PRTL_CRITICAL_SECTION_DEBUG ***)v5[1] ) { v12 = *sub_8DF5C0(v5, (PRTL_CRITICAL_SECTION_DEBUG **)&a4, 1, v8, (PRTL_CRITICAL_SECTION_DEBUG *)a3); result = a2; *(_DWORD *)a2 = v12; *(_BYTE *)(a2 + 4) = 1; return result; } sub_4DC030(&a4); v11 = a4; v4 = a3; } if ( (unsigned int)v11[3] >= *(_DWORD *)(v4 + 12) ) { v15 = sub_8DE610(); EnterCriticalSection(v15); *(_DWORD *)a3 = v15[1].DebugInfo; v15[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)a3; LeaveCriticalSection(v15); result = a2; *(_DWORD *)a2 = v11; *(_BYTE *)(a2 + 4) = 0; } else { v14 = *sub_8DF5C0(v5, (PRTL_CRITICAL_SECTION_DEBUG **)&a4, v16, v8, (PRTL_CRITICAL_SECTION_DEBUG *)v4); result = a2; *(_DWORD *)a2 = v14; *(_BYTE *)(a2 + 4) = 1; } return result; } //----- (008DFCB0) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DFCB0(_DWORD *this, _DWORD *a2) { PRTL_CRITICAL_SECTION_DEBUG *v2; // edi v2 = sub_8DF800(this); sub_8DE290(v2 + 3, a2); return v2; } //----- (008DFCE0) -------------------------------------------------------- PRTL_CRITICAL_SECTION_DEBUG *__thiscall sub_8DFCE0(_DWORD *this, PRTL_CRITICAL_SECTION_DEBUG *a2) { PRTL_CRITICAL_SECTION_DEBUG *result; // eax result = sub_8DF890(this); if ( result != (PRTL_CRITICAL_SECTION_DEBUG *)-12 ) { result[3] = *a2; result[4] = a2[1]; } return result; } //----- (008DFD10) -------------------------------------------------------- int *__thiscall sub_8DFD10(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax _DWORD *v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = (_DWORD *)this[1]; v6 = (int)a3; if ( a3 != (_DWORD *)*v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = (int)a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 25) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 25) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = (_DWORD *)i; } else { v11 = *(_DWORD **)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 25); j = (int *)*j ) v11 = j; a3 = v11; } } sub_8DE7F0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_8DF0C0(v5[1]); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (008DFDD0) -------------------------------------------------------- unsigned int __thiscall sub_8DFDD0(char **this, char *a2) { char **v2; // esi unsigned int result; // eax void *v4; // eax char *v5; // ST04_4 char *v6; // ST00_4 char *v7; // ebx unsigned int v8; // edx int v9; // edi char *v10; // ecx char *v11; // edi int v12; // [esp+0h] [ebp-28h] void *v13; // [esp+10h] [ebp-18h] char *v14; // [esp+14h] [ebp-14h] int *v15; // [esp+18h] [ebp-10h] int v16; // [esp+24h] [ebp-4h] v15 = &v12; v2 = this; if ( (unsigned int)a2 > 0x25ED097 ) std::_Xlength_error("vector too long"); result = (this[2] - *this) / 108; if ( result < (unsigned int)a2 ) { v4 = sub_8DDC20(a2); v5 = v2[1]; v6 = *v2; v13 = v4; v16 = 0; sub_8DE670(v6, v5, (int)v4); v7 = *v2; v14 = v2[1]; v8 = (signed int)((unsigned __int64)(1272582903i64 * (v14 - v7)) >> 32) >> 5; v9 = v8 + (v8 >> 31); v16 = -1; if ( v7 ) { for ( ; v7 != v14; v7 += 108 ) sub_8DE320(v7); operator delete(*v2); } v10 = (char *)v13; result = (unsigned int)v13 + 108 * (_DWORD)a2; v11 = (char *)v13 + 108 * v9; v2[2] = (char *)result; v2[1] = v11; *v2 = v10; } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008DFEF0) -------------------------------------------------------- int *__thiscall sub_8DFEF0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 25) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 25) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 25); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 25); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_8DEB20(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_8DF200(*(_DWORD **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (008DFFB0) -------------------------------------------------------- int *__thiscall sub_8DFFB0(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 21) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 21) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 21); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_8DEDF0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_8DF2C0(*(_DWORD **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (008E00B0) -------------------------------------------------------- unsigned int __thiscall sub_8E00B0(int this, int a2) { unsigned int v2; // esi unsigned int v3; // esi unsigned int result; // eax char *v5; // eax v2 = (*(_DWORD *)(this + 4) - *(_DWORD *)this) / 108; if ( 39768215 - a2 < v2 ) std::_Xlength_error("vector too long"); v3 = a2 + v2; result = (*(_DWORD *)(this + 8) - *(_DWORD *)this) / 108; if ( v3 > result ) { if ( 39768215 - (result >> 1) >= result ) v5 = (char *)((result >> 1) + result); else v5 = 0; if ( (unsigned int)v5 < v3 ) v5 = (char *)v3; result = sub_8DFDD0((char **)this, v5); } return result; } //----- (008E0130) -------------------------------------------------------- void __thiscall sub_8E0130(unsigned int *this, unsigned int a2) { unsigned int *v2; // edi unsigned int v3; // ecx int v4; // esi unsigned int v5; // edx int v6; // esi int v7; // ecx v2 = this; v3 = this[1]; v4 = a2; if ( a2 >= v3 || *v2 > a2 ) { if ( v3 == v2[2] ) sub_8E00B0((int)v2, 1); v7 = v2[1]; } else { v5 = (signed int)((unsigned __int64)(1272582903i64 * (signed int)(a2 - *v2)) >> 32) >> 5; v6 = v5 + (v5 >> 31); if ( v3 == v2[2] ) sub_8E00B0((int)v2, 1); v7 = v2[1]; v4 = *v2 + 108 * v6; } if ( v7 ) sub_8DE410(v7, v4); v2[1] += 108; } //----- (008E01E0) -------------------------------------------------------- unsigned int __thiscall sub_8E01E0(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi int v3; // ecx unsigned int result; // eax int v5; // esi _DWORD *v6; // ebx _DWORD *v7; // esi unsigned int v8; // [esp+14h] [ebp+8h] v2 = this; v3 = this[1]; result = (v3 - *v2) / 108; if ( result <= a2 ) { if ( result < a2 ) { sub_8E00B0((int)v2, a2 - result); sub_8DE710(v2[1], a2 - (v2[1] - *v2) / 108); result = (v2[1] - *v2) / 108; v2[1] += 108 * (a2 - result); } } else { v5 = *v2 + 108 * a2; if ( v5 != v3 ) { result = sub_8DE500(v3, v3, v5); v6 = (_DWORD *)v2[1]; v8 = result; v7 = (_DWORD *)result; if ( (_DWORD *)result != v6 ) { do { sub_8DE320(v7); v7 += 27; } while ( v7 != v6 ); result = v8; } v2[1] = result; } } return result; } //----- (008E02C0) -------------------------------------------------------- void __thiscall sub_8E02C0(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 PRTL_CRITICAL_SECTION_DEBUG *v4; // edi struct _RTL_CRITICAL_SECTION *v5; // esi char v6; // [esp+Ch] [ebp-14h] _DWORD *v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v1 = this; v7 = this; v2 = (int *)this[1]; v3 = *v2; v8 = 0; sub_8DFEF0(this, (int *)&v6, v3, (int)v2); v4 = (PRTL_CRITICAL_SECTION_DEBUG *)v1[1]; v5 = sub_8D6CC0(); EnterCriticalSection(v5); *v4 = v5[1].DebugInfo; v5[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v4; LeaveCriticalSection(v5); } //----- (008E0340) -------------------------------------------------------- char __thiscall sub_8E0340(_DWORD *this, int a2) { const char *v2; // edi int v3; // esi _DWORD *v4; // esi _DWORD *v5; // esi _DWORD *v6; // esi _DWORD *v7; // esi int v8; // esi int v9; // eax int v10; // esi int v11; // eax int v12; // esi int v13; // esi int v14; // esi int v15; // eax int v16; // esi int v17; // eax _DWORD *v18; // eax _DWORD *v19; // esi _DWORD *v20; // esi int v21; // esi int v22; // edi int v23; // esi int v24; // edi int v25; // esi int v26; // edi int v27; // esi int v28; // edi int v29; // esi int v30; // edi int v31; // esi int v32; // edi _DWORD *v34; // [esp+10h] [ebp-80h] char v35; // [esp+14h] [ebp-7Ch] int v36; // [esp+8Ch] [ebp-4h] v2 = (const char *)(a2 + 40); v34 = this; if ( *(_DWORD *)(a2 + 60) >= 0x10u ) v2 = *(const char **)v2; v3 = **(_DWORD **)(a2 + 68); if ( sub_96C4B0(v2, "PGFILE") ) { if ( sub_96C4B0(v2, "FILE_VER") ) { if ( sub_96C4B0(v2, "VerTexColorTexture") ) { if ( sub_96C4B0(v2, "HeightFileName") ) { if ( sub_96C4B0(v2, "HEIGHTMAP_WIDTH") ) { if ( sub_96C4B0(v2, "HEIGHTMAP_HEIGHT") ) { if ( sub_96C4B0(v2, "OneBlockWidth") ) { if ( sub_96C4B0(v2, "OneBlockHeight") ) { if ( sub_96C4B0(v2, "QuadsWide") ) { if ( sub_96C4B0(v2, "QuadsHigh") ) { if ( sub_96C4B0(v2, "Layer") ) { if ( sub_96C4B0(v2, "DiffuseFileName") ) { if ( sub_96C4B0(v2, "BlendFileName") ) { if ( sub_96C4B0(v2, "StartPos_X") ) { if ( sub_96C4B0(v2, "StartPos_Y") ) { if ( sub_96C4B0(v2, "Width") ) { if ( sub_96C4B0(v2, "Height") ) { if ( sub_96C4B0(v2, "UVScaleDiffuse") ) { if ( !sub_96C4B0(v2, "UVScaleBlend") ) { v31 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v31 + 20) >= 0x10u ) v31 = *(_DWORD *)v31; v32 = 108 * v34[71] + v34[67] - 108; *(float *)(v32 + 88) = atof((const char *)v31); } } else { v29 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v29 + 20) >= 0x10u ) v29 = *(_DWORD *)v29; v30 = 108 * v34[71] + v34[67] - 108; *(float *)(v30 + 84) = atof((const char *)v29); } } else { v27 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v27 + 20) >= 0x10u ) v27 = *(_DWORD *)v27; v28 = 108 * v34[71] + v34[67] - 108; *(float *)(v28 + 76) = atof((const char *)v27); } } else { v25 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v25 + 20) >= 0x10u ) v25 = *(_DWORD *)v25; v26 = 108 * v34[71] + v34[67] - 108; *(float *)(v26 + 72) = atof((const char *)v25); } } else { v23 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v23 + 20) >= 0x10u ) v23 = *(_DWORD *)v23; v24 = 108 * v34[71] + v34[67] - 108; *(float *)(v24 + 68) = atof((const char *)v23); } } else { v21 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v21 + 20) >= 0x10u ) v21 = *(_DWORD *)v21; v22 = 108 * v34[71] + v34[67] - 108; *(float *)(v22 + 64) = atof((const char *)v21); } } else { v20 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v20[5] >= 0x10u ) v20 = (_DWORD *)*v20; sub_40AC00((_DWORD *)(108 * v34[71] + v34[67] - 80), v20); } } else { v19 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v19[5] >= 0x10u ) v19 = (_DWORD *)*v19; sub_40AC00((_DWORD *)(108 * v34[71] + v34[67] - 108), v19); } } else { ++v34[71]; v18 = sub_8DE2F0(&v35); v36 = 0; sub_8E0130(v34 + 67, (unsigned int)v18); v36 = -1; sub_8DE320(&v35); } } else { v16 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v16 + 20) >= 0x10u ) v16 = *(_DWORD *)v16; v17 = atoi((const char *)v16); v34[61] = v17; v34[59] = v17 + 1; } } else { v14 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v14 + 20) >= 0x10u ) v14 = *(_DWORD *)v14; v15 = atoi((const char *)v14); v34[60] = v15; v34[58] = v15 + 1; } } else { v13 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v13 + 20) >= 0x10u ) v13 = *(_DWORD *)v13; *((float *)v34 + 24) = atof((const char *)v13); } } else { v12 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v12 + 20) >= 0x10u ) v12 = *(_DWORD *)v12; *((float *)v34 + 23) = atof((const char *)v12); } } else { v10 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v10 + 20) >= 0x10u ) v10 = *(_DWORD *)v10; v11 = atoi((const char *)v10); v34[52] = v11; v34[54] = v11 - 1; } } else { v8 = *(_DWORD *)(v3 + 8) + 40; if ( *(_DWORD *)(v8 + 20) >= 0x10u ) v8 = *(_DWORD *)v8; v9 = atoi((const char *)v8); v34[51] = v9; v34[53] = v9 - 1; } } else { v7 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v7[5] >= 0x10u ) v7 = (_DWORD *)*v7; sub_4018E0(v34 + 16, v7, strlen((const char *)v7)); } } else { v6 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v6[5] >= 0x10u ) v6 = (_DWORD *)*v6; sub_4018E0(v34 + 39, v6, strlen((const char *)v6)); } } else { v5 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v5[5] >= 0x10u ) v5 = (_DWORD *)*v5; sub_4018E0(v34 + 32, v5, strlen((const char *)v5)); } } else { v4 = (_DWORD *)(*(_DWORD *)(v3 + 8) + 40); if ( v4[5] >= 0x10u ) v4 = (_DWORD *)*v4; sub_4018E0(v34 + 25, v4, strlen((const char *)v4)); } return 1; } //----- (008E0860) -------------------------------------------------------- void __thiscall sub_8E0860(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 PRTL_CRITICAL_SECTION_DEBUG *v4; // edi struct _RTL_CRITICAL_SECTION *v5; // esi char v6; // [esp+Ch] [ebp-14h] _DWORD *v7; // [esp+10h] [ebp-10h] int v8; // [esp+1Ch] [ebp-4h] v1 = this; v7 = this; v2 = (int *)this[1]; v3 = *v2; v8 = 0; sub_8DFFB0(this, (int *)&v6, v3, (int)v2); v4 = (PRTL_CRITICAL_SECTION_DEBUG *)v1[1]; v5 = sub_8DE610(); EnterCriticalSection(v5); *v4 = v5[1].DebugInfo; v5[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v4; LeaveCriticalSection(v5); } //----- (008E08E0) -------------------------------------------------------- void __thiscall sub_8E08E0(void *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v3; // [esp+8h] [ebp-24h] void *v4; // [esp+14h] [ebp-18h] char *v5; // [esp+18h] [ebp-14h] char v6; // [esp+1Fh] [ebp-Dh] int v7; // [esp+28h] [ebp-4h] v1 = this; v4 = this; *((_DWORD *)this + 8) = 0; v2 = operator new(0x14u); if ( !v2 ) { v5 = 0; std::exception::exception((std::exception *)&v3, (const char *const *)&v5); v3 = &std::bad_alloc::`vftable'; _CxxThrowException(&v3, &_TI2_AVbad_alloc_std__); } v1[7] = v2; *v2 = v2; *(_DWORD *)(v1[7] + 4) = v1[7]; *(_DWORD *)(v1[7] + 8) = v1[7]; *(_BYTE *)(v1[7] + 16) = 1; *(_BYTE *)(v1[7] + 17) = 1; v7 = 0; sub_8DF980(v1 + 10, (int)&v6, (int)v4); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008E09A0) -------------------------------------------------------- void __thiscall sub_8E09A0(void *this) { char *v1; // edi char *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ST04_4 PRTL_CRITICAL_SECTION_DEBUG *v5; // ebx struct _RTL_CRITICAL_SECTION *v6; // esi _DWORD *v7; // ST08_4 _DWORD *v8; // ST04_4 char *v9; // [esp+10h] [ebp-18h] char *v10; // [esp+14h] [ebp-14h] void *v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v1 = (char *)this; v11 = this; v2 = (char *)this + 40; v12 = 0; v10 = (char *)this + 40; v3 = (_DWORD *)*((_DWORD *)this + 11); v4 = (_DWORD *)*v3; LOBYTE(v12) = 1; sub_8DFD10((_DWORD *)this + 10, (int *)&v9, v4, v3); v5 = (PRTL_CRITICAL_SECTION_DEBUG *)*((_DWORD *)v2 + 1); v6 = sub_8D6CC0(); EnterCriticalSection(v6); *v5 = v6[1].DebugInfo; v6[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v5; LeaveCriticalSection(v6); v9 = v1 + 24; v7 = (_DWORD *)*((_DWORD *)v1 + 7); v8 = (_DWORD *)**((_DWORD **)v1 + 7); v12 = 2; sub_4E6DC0((_DWORD *)v1 + 6, (int *)&v10, v8, v7); operator delete(*((void **)v1 + 7)); } //----- (008E0A50) -------------------------------------------------------- _DWORD *__thiscall sub_8E0A50(_DWORD *this) { _DWORD *v1; // esi int v2; // ST5C_4 int v3; // edi int v4; // edi int v5; // edi _DWORD *result; // eax char v7; // [esp+17h] [ebp-Dh] int v8; // [esp+20h] [ebp-4h] v1 = this; v2 = (int)this; this[5] = 15; this[4] = 0; *(_BYTE *)this = 0; this[12] = 15; this[11] = 0; *((_BYTE *)this + 28) = 0; v8 = 0; this[14] = 0; this[15] = 0; this[21] = 15; this[20] = 0; *((_BYTE *)this + 64) = 0; this[30] = 15; this[29] = 0; *((_BYTE *)this + 100) = 0; this[37] = 15; this[36] = 0; *((_BYTE *)this + 128) = 0; this[44] = 15; this[43] = 0; *((_BYTE *)this + 156) = 0; this[46] = 0; this[67] = 0; this[68] = 0; this[69] = 0; this[74] = 0; this[75] = 0; this[76] = 0; this[77] = 0; this[78] = 0; this[79] = 0; sub_8E4EF0(this + 80); v1[100] = 0; LOBYTE(v8) = 10; sub_8DF980(v1 + 102, (int)&v7, v2); v1[81] = 1; v1[82] = 0; v1[83] = 1; *((_BYTE *)v1 + 340) = 1; *((_WORD *)v1 + 188) = 0; *((_BYTE *)v1 + 379) = 0; v3 = v1[14]; LOBYTE(v8) = 11; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[14] = 0; } v4 = v1[15]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[15] = 0; } v1[48] = 0; *((float *)v1 + 72) = 1.0; v1[47] = 0; v1[49] = 0; v1[50] = 0; v1[73] = 0; v1[51] = 0; v1[52] = 0; v1[58] = 0; v1[59] = 0; v1[60] = 0; v1[61] = 0; v1[62] = 0; v1[63] = 0; v1[66] = 0; v5 = v1[46]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[46] = 0; } result = v1; *((_BYTE *)v1 + 404) = 0; return result; } //----- (008E0C60) -------------------------------------------------------- char __cdecl sub_8E0C60(int a1, _DWORD *a2) { return sub_8E0340(a2, a1); } //----- (008E0C80) -------------------------------------------------------- char __thiscall sub_8E0C80(void *this, char *a2) { int v2; // esi FILE *v3; // eax int v4; // ebx const char *v5; // eax const char *v6; // eax const char *v7; // ebx const char *v8; // eax void *v9; // eax void *v10; // eax int v11; // eax int v12; // ecx void *v13; // eax size_t v14; // ST1C_4 bool v15; // cf const void *v16; // eax int v17; // eax const char *v18; // eax FILE *v19; // eax FILE *v20; // edi const CHAR *v21; // eax int v23; // ebx int *v24; // eax char *v25; // eax _DWORD *v26; // edi int v27; // ebx const void *v28; // eax int v29; // eax int v30; // ecx int v31; // eax int v32; // ecx int v33; // eax unsigned int v34; // edx int v35; // eax int v36; // edi bool v37; // zf _DWORD *v38; // eax const void *v39; // eax volatile LONG *v40; // eax const CHAR *v41; // eax volatile LONG *v42; // ebx int v43; // eax char *v44; // eax _DWORD *v45; // eax void (__stdcall ***v46)(_DWORD); // ecx volatile LONG *v47; // eax void (__stdcall ***v48)(signed int); // eax double v49; // st7 double v50; // st5 double v51; // st7 double v52; // st6 unsigned int v53; // eax int v54; // ecx int v55; // eax void (__thiscall ***v56)(_DWORD, signed int); // esi char v57; // [esp+1Ch] [ebp-16Ch] char v58; // [esp+3Ch] [ebp-14Ch] void *v59; // [esp+44h] [ebp-144h] int v60; // [esp+48h] [ebp-140h] _DWORD *v61; // [esp+4Ch] [ebp-13Ch] int v62; // [esp+50h] [ebp-138h] int v63; // [esp+54h] [ebp-134h] void (__stdcall ***v64)(signed int); // [esp+58h] [ebp-130h] int *v65; // [esp+5Ch] [ebp-12Ch] unsigned int v66; // [esp+70h] [ebp-118h] char v67; // [esp+78h] [ebp-110h] int v68; // [esp+184h] [ebp-4h] v2 = (int)this; v3 = fopen(a2, "r"); if ( !v3 ) return 0; fclose(v3); *(_DWORD *)(v2 + 284) = 0; sub_8E01E0((_DWORD *)(v2 + 268), 0); sub_96C380(&v57); v68 = 0; v4 = sub_96BD20(&v57, a2); v63 = v4; if ( v4 ) InterlockedIncrement((volatile LONG *)(v4 + 4)); LOBYTE(v68) = 1; if ( !v4 ) { LABEL_35: v68 = -1; sub_96C260(&v57); return 0; } sub_8D1550(v4, (int (__cdecl *)(int, int, int))sub_8E0C60, v2); v5 = (const char *)(v2 + 100); if ( *(_DWORD *)(v2 + 120) >= 0x10u ) v5 = *(const char **)v5; if ( sub_96C4B0(v5, "HeightMap") ) { LOBYTE(v68) = 0; if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); goto LABEL_35; } v6 = (const char *)(v2 + 128); if ( *(_DWORD *)(v2 + 148) >= 0x10u ) v6 = *(const char **)v6; if ( sub_96C4B0(v6, "0.01") ) { LABEL_34: LOBYTE(v68) = 0; sub_410C00(&v63); goto LABEL_35; } v7 = (const char *)(v2 + 64); if ( *(_DWORD *)(v2 + 84) < 0x10u ) v8 = (const char *)(v2 + 64); else v8 = *(const char **)v7; _splitpath(v8, 0, 0, 0, &v67); if ( *(_DWORD *)(v2 + 196) ) operator delete[](*(void **)(v2 + 196)); v9 = *(void **)(v2 + 192); *(_DWORD *)(v2 + 196) = 0; if ( v9 ) operator delete[](v9); v10 = *(void **)(v2 + 188); *(_DWORD *)(v2 + 192) = 0; if ( v10 ) operator delete[](v10); v11 = 4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204); v12 = (unsigned __int64)(unsigned int)(*(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)) >> 30 != 0; *(_DWORD *)(v2 + 188) = 0; *(_DWORD *)(v2 + 196) = operator new[](v11 | -v12); *(_DWORD *)(v2 + 192) = operator new[](4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)); v13 = operator new[](4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)); v14 = 4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204); *(_DWORD *)(v2 + 188) = v13; memset(v13, 0, v14); if ( sub_96C4B0(&v67, ".ASE") ) { if ( !sub_96C4B0(&v67, ".HTD") ) { if ( *(_DWORD *)(v2 + 84) < 0x10u ) v17 = v2 + 64; else v17 = *(_DWORD *)v7; v18 = (const char *)sub_8D02C0((const void **)v2, v17); v19 = fopen(v18, "rb"); v20 = v19; if ( v19 ) { v23 = *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204); fread(&v60, 4u, 1u, v19); if ( v60 == v23 ) { fread(*(void **)(v2 + 196), 4 * v60, 1u, v20); fclose(v20); memcpy(*(void **)(v2 + 192), *(const void **)(v2 + 196), 4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)); *(float *)(v2 + 256) = 1.0; *(float *)(v2 + 260) = 0.0; sub_427A80(&v65, v2 + 64, "G"); v24 = v65; LOBYTE(v68) = 3; if ( v66 < 0x10 ) v24 = (int *)&v65; v25 = (char *)sub_8D02C0((const void **)v2, (int)v24); sub_8DC800(v2, v25); LOBYTE(v68) = 1; sub_636A10(&v65); goto LABEL_42; } } else { if ( *(_DWORD *)(v2 + 84) >= 0x10u ) v7 = *(const char **)v7; v21 = (const CHAR *)sub_8D02C0((const void **)v2, (int)v7); MessageBoxA(0, v21, "FileOpenError", 0); } } goto LABEL_34; } sub_96CBE0((int)&v58); v15 = *(_DWORD *)(v2 + 84) < 0x10u; LOBYTE(v68) = 2; if ( !v15 ) v7 = *(const char **)v7; v16 = sub_8D02C0((const void **)v2, (int)v7); sub_96CC10(&v58, *(float *)&v16); memcpy(*(void **)(v2 + 196), v59, 4 * *(_DWORD *)(v2 + 208) * *(_DWORD *)(v2 + 204)); *(float *)(v2 + 256) = 1.0; LOBYTE(v68) = 1; *(float *)(v2 + 260) = 0.0; sub_96CC00(&v58); LABEL_42: v26 = (_DWORD *)(v2 + 156); if ( sub_438C50(v2 + 156, (unsigned __int8 *)&byte_9A8050) ) { v27 = sub_8667C0(); if ( *(_DWORD *)(v2 + 176) >= 0x10u ) v26 = (_DWORD *)*v26; v28 = sub_8D02C0((const void **)v2, (int)v26); v29 = (*(int (__thiscall **)(int, const void *, _DWORD))(*(_DWORD *)v27 + 8))(v27, v28, 0); sub_56FF80((_DWORD *)(v2 + 184), v29); } v30 = *(_DWORD *)(v2 + 216); v31 = *(_DWORD *)(v2 + 212); *(_DWORD *)(v2 + 296) = v31; *(_DWORD *)(v2 + 300) = v30; *(_DWORD *)(v2 + 304) = v30 * v31; v32 = *(_DWORD *)(v2 + 208); v33 = *(_DWORD *)(v2 + 204); *(_DWORD *)(v2 + 308) = v33; *(_DWORD *)(v2 + 312) = v32; *(_DWORD *)(v2 + 316) = v32 * v33; v34 = (signed int)((unsigned __int64)(1272582903i64 * (*(_DWORD *)(v2 + 272) - *(_DWORD *)(v2 + 268))) >> 32) >> 5; if ( *(_DWORD *)(v2 + 284) != v34 + (v34 >> 31) ) MessageBoxA(0, "LayerCount Error", "TerrainLoding Error", 0); v35 = 0; v62 = 0; if ( *(_DWORD *)(v2 + 284) ) { while ( 1 ) { v36 = *(_DWORD *)(v2 + 268) + 108 * v35; v37 = v35 == 0; v38 = (_DWORD *)(v36 + 28); if ( v37 ) { if ( *(_DWORD *)(v36 + 48) >= 0x10u ) v38 = (_DWORD *)*v38; v41 = (const CHAR *)sub_8D02C0((const void **)v2, (int)v38); v40 = sub_8DCB60(v41, v36 + 92, 255.0); } else { if ( *(_DWORD *)(v36 + 48) >= 0x10u ) v38 = (_DWORD *)*v38; v39 = sub_8D02C0((const void **)v2, (int)v38); v40 = sub_8DCD10((int)v39, (_DWORD *)(v36 + 92)); } v42 = v40; if ( *(_DWORD *)(v36 + 20) < 0x10u ) v43 = v36; else v43 = *(_DWORD *)v36; v44 = (char *)sub_8D02C0((const void **)v2, v43); v45 = sub_865EB0(v44, (int)&unk_ABD7DC, 0); v46 = *(void (__stdcall ****)(_DWORD))(v36 + 80); v61 = v45; v64 = v46; if ( v46 != v45 ) { if ( v46 ) { if ( !InterlockedDecrement((volatile LONG *)v46 + 1) && v64 ) (**v64)(1); v45 = v61; } *(_DWORD *)(v36 + 80) = v45; if ( v45 ) InterlockedIncrement(v45 + 1); } v47 = *(volatile LONG **)(v36 + 96); v64 = (void (__stdcall ***)(signed int))v47; if ( v47 != v42 ) { if ( v47 && !InterlockedDecrement(v47 + 1) && v64 ) (**v64)(1); *(_DWORD *)(v36 + 96) = v42; if ( v42 ) InterlockedIncrement(v42 + 1); } *(_DWORD *)(v36 + 100) = (*(int (__thiscall **)(volatile LONG *))(*v42 + 60))(v42); v48 = (void (__stdcall ***)(signed int))(*(int (__thiscall **)(volatile LONG *))(*v42 + 64))(v42); v49 = *(float *)(v36 + 72) - 1.0; *(_DWORD *)(v36 + 104) = v48; v50 = (double)*(unsigned int *)(v36 + 100); v64 = v48; *(float *)(v36 + 56) = v49 / v50; v51 = *(float *)(v36 + 76) - 1.0; v52 = (double)(signed int)v64; if ( (signed int)v48 < 0 ) v52 = v52 + 4294967300.0; v53 = ++v62; *(float *)(v36 + 60) = v51 / v52; if ( v53 >= *(_DWORD *)(v2 + 284) ) break; v35 = v62; } } v54 = *(_DWORD *)(v2 + 212) / *(_DWORD *)(v2 + 240); v55 = *(_DWORD *)(v2 + 216) / *(_DWORD *)(v2 + 244); *(_DWORD *)(v2 + 220) = v54; *(_DWORD *)(v2 + 224) = v55; *(_DWORD *)(v2 + 228) = v54 * v55; sub_8DDFD0((_DWORD *)v2); v56 = (void (__thiscall ***)(_DWORD, signed int))v63; LOBYTE(v68) = 0; if ( !InterlockedDecrement((volatile LONG *)(v63 + 4)) ) (**v56)(v56, 1); v68 = -1; sub_96C260(&v57); return 1; } // 96CC00: using guessed type int __thiscall sub_96CC00(_DWORD); //----- (008E1370) -------------------------------------------------------- char __thiscall sub_8E1370(void *this, unsigned int *a2) { unsigned int *v2; // esi float *v3; // eax double v4; // st7 double v5; // st6 double v6; // st6 char *v7; // ebx unsigned int v8; // ecx int *v9; // edi double v10; // st7 double v11; // st6 unsigned int v12; // eax int v13; // ecx unsigned int v14; // edx int v15; // ecx unsigned int v16; // eax int v17; // eax int v18; // ecx signed int v19; // esi int v20; // eax unsigned int v21; // edx int v22; // ecx void **v23; // eax char *v24; // edi PRTL_CRITICAL_SECTION_DEBUG *v25; // eax unsigned int v26; // ecx int v27; // eax int v28; // edx float *v29; // eax int v30; // esi _DWORD *v31; // edx int v32; // esi unsigned int v33; // eax unsigned int v34; // eax unsigned int v35; // ecx char *v36; // ecx unsigned int v37; // eax unsigned int v38; // eax unsigned int v39; // ecx char *v40; // ecx void *v41; // esi int v42; // ST1C_4 int *v43; // esi char result; // al char *v45; // eax int v46; // edx int v47; // ecx int v48; // edi double v49; // st6 double v50; // st5 int v51; // ecx unsigned int v52; // esi int v53; // eax int v54; // edx int v55; // eax float *v56; // esi int v57; // ebx double v58; // st4 double v59; // st3 double v60; // st2 int v61; // ebx double v62; // st2 int v63; // ecx int v64; // ebx int v65; // ecx unsigned __int8 *v66; // ecx float *v67; // eax double v68; // rtt double v69; // st3 double v70; // st6 double v71; // rt0 float *v72; // eax float *v73; // ecx int v74; // eax char *v75; // esi float *v76; // eax double v77; // st4 int v78; // eax int j; // eax int i; // eax _WORD *v81; // ebx unsigned int v82; // esi _WORD *v83; // edi unsigned int v84; // eax _DWORD *v85; // eax float v86; // esi _DWORD *v87; // esi int v88; // ebx _DWORD *v89; // esi int v90; // edi _DWORD *v91; // eax volatile LONG *v92; // esi _DWORD *v93; // eax _DWORD *v94; // eax float v95; // edi int (__thiscall *v96)(int); // eax int v97; // eax _DWORD *v98; // ebx int v99; // eax int v100; // eax volatile LONG *v101; // esi int v102; // ST1C_4 int *v103; // esi unsigned int v104; // [esp+10h] [ebp-B0h] char *v105; // [esp+14h] [ebp-ACh] float v106; // [esp+18h] [ebp-A8h] float v107; // [esp+1Ch] [ebp-A4h] float v108; // [esp+20h] [ebp-A0h] float v109; // [esp+24h] [ebp-9Ch] unsigned int v110; // [esp+28h] [ebp-98h] char v111; // [esp+2Fh] [ebp-91h] char v112; // [esp+30h] [ebp-90h] int *v113; // [esp+34h] [ebp-8Ch] void *v114; // [esp+38h] [ebp-88h] unsigned int v115; // [esp+40h] [ebp-80h] char *v116; // [esp+44h] [ebp-7Ch] void *v117; // [esp+48h] [ebp-78h] char *v118; // [esp+4Ch] [ebp-74h] char *v119; // [esp+50h] [ebp-70h] unsigned int v120; // [esp+58h] [ebp-68h] float v121; // [esp+5Ch] [ebp-64h] int v122; // [esp+60h] [ebp-60h] float v123; // [esp+64h] [ebp-5Ch] unsigned int *v124; // [esp+68h] [ebp-58h] float v125; // [esp+6Ch] [ebp-54h] int v126; // [esp+70h] [ebp-50h] void *v127; // [esp+74h] [ebp-4Ch] char *v128; // [esp+78h] [ebp-48h] signed int v129; // [esp+7Ch] [ebp-44h] float *v130; // [esp+80h] [ebp-40h] float v131; // [esp+84h] [ebp-3Ch] int v132; // [esp+88h] [ebp-38h] float v133; // [esp+8Ch] [ebp-34h] unsigned int v134; // [esp+90h] [ebp-30h] unsigned int v135; // [esp+94h] [ebp-2Ch] int v136; // [esp+98h] [ebp-28h] unsigned int v137; // [esp+9Ch] [ebp-24h] unsigned int v138; // [esp+A0h] [ebp-20h] unsigned int v139; // [esp+A4h] [ebp-1Ch] int v140; // [esp+A8h] [ebp-18h] unsigned int v141; // [esp+ACh] [ebp-14h] int v142; // [esp+BCh] [ebp-4h] v2 = a2; v3 = (float *)*a2; v4 = *(float *)(*a2 + 88); v132 = (int)this; v5 = v3[18] - 1.0; v124 = a2; v130 = v3; *(float *)&v126 = v4 / v5; *(float *)&v129 = (double)a2[2] - v3[16]; *(float *)&v122 = *(float *)&v129 * *(float *)&v126; v6 = (double)a2[3] - v3[17]; v7 = 0; v117 = 0; v118 = 0; *(float *)&v129 = v6; v119 = 0; *(float *)&v129 = *(float *)&v126 * *(float *)&v129; v142 = 0; sub_8DFA20(&v112, (int)&v111, SLODWORD(v133)); v8 = a2[3]; v9 = v113; LOBYTE(v142) = 1; v116 = 0; v110 = v8; if ( v8 <= a2[5] ) { v10 = *(float *)&v122; v11 = *(float *)&v129; v120 = v8 + 1; do { v12 = v2[2]; v115 = v12; if ( v12 <= v2[4] ) { v135 = v8; v137 = v8; v141 = v120; v13 = v12 + 1; v128 = (char *)(v12 + 1); while ( 2 ) { v136 = v13; v140 = v13; v139 = v120; v14 = v2[4]; v15 = 0; v134 = v12; v138 = v12; v16 = 1; while ( *(&v134 + 2 * v16) <= v14 ) { if ( *(&v135 + 2 * v16) > v124[5] || (++v16, ++v15, v16 >= 4) ) { v7 = v118; break; } v7 = v118; } if ( v15 == 3 ) { v17 = v110 - v124[3]; LODWORD(v131) = v17 + 1; v18 = v115 - v124[2]; v125 = (double)(unsigned int)(v17 + 1) * *(float *)&v126 + v11; v123 = (double)(unsigned int)(v18 + 1) * *(float *)&v126 + v10; v121 = v11 + (double)(unsigned int)v17 * *(float *)&v126; v131 = v10 + *(float *)&v126 * (double)(unsigned int)v18; if ( sub_8DC8D0((unsigned int *)v130, &v131, &v121, &v123, &v125, (float *)(v132 + 288)) ) { v19 = 0; do { v20 = v9[1]; v21 = *(&v134 + 2 * v19) + *(_DWORD *)(v132 + 204) * *(&v135 + 2 * v19); v22 = (int)v9; while ( !*(_BYTE *)(v20 + 21) ) { if ( *(_DWORD *)(v20 + 12) >= v21 ) { v22 = v20; v20 = *(_DWORD *)v20; } else { v20 = *(_DWORD *)(v20 + 8); } } v131 = *(float *)&v22; if ( (int *)v22 == v9 || v21 < *(_DWORD *)(v22 + 12) ) { v127 = v9; v23 = &v127; } else { v23 = (void **)&v131; } if ( v9 == *v23 ) { v24 = v116; v104 = v21; v105 = v116; v25 = sub_8DFCE0(&v112, (PRTL_CRITICAL_SECTION_DEBUG *)&v104); sub_8DFBC0(&v112, (int)&v108, (int)v25, 0); v116 = v24 + 1; v9 = v113; } ++v19; } while ( v19 < 4 ); v125 = COERCE_FLOAT(&unk_AC2760); if ( ((_BYTE)v120 + (_BYTE)v128 - 2) & 1 ) v125 = COERCE_FLOAT(&unk_AC2778); v123 = 0.0; do { v26 = *(&v134 + 2 * *(_DWORD *)(LODWORD(v125) + 4 * LODWORD(v123))) + *(_DWORD *)(v132 + 204) * *(&v135 + 2 * *(_DWORD *)(LODWORD(v125) + 4 * LODWORD(v123))); v27 = v9[1]; v28 = (int)v9; while ( !*(_BYTE *)(v27 + 21) ) { if ( *(_DWORD *)(v27 + 12) >= v26 ) { v28 = v27; v27 = *(_DWORD *)v27; } else { v27 = *(_DWORD *)(v27 + 8); } } v131 = *(float *)&v28; if ( (int *)v28 == v9 || v26 < *(_DWORD *)(v28 + 12) ) { v133 = *(float *)&v9; v29 = &v133; } else { v29 = &v131; } v30 = *(_DWORD *)(*(_DWORD *)v29 + 16); v31 = v117; v121 = *(float *)(*(_DWORD *)v29 + 16); if ( &v121 >= (float *)v7 || v117 > &v121 ) { if ( v7 == v119 ) { v37 = (v7 - (_BYTE *)v117) >> 2; if ( v37 > 0x3FFFFFFE ) LABEL_75: std::_Xlength_error("vector too long"); v38 = v37 + 1; v39 = (v119 - (_BYTE *)v117) >> 2; if ( v38 > v39 ) { if ( 0x3FFFFFFF - (v39 >> 1) >= v39 ) v40 = (char *)((v39 >> 1) + v39); else v40 = 0; if ( (unsigned int)v40 < v38 ) v40 = (char *)v38; sub_74E360((const void **)&v117, v40); v7 = v118; v9 = v113; } } if ( !v7 ) goto LABEL_64; *(_DWORD *)v7 = v30; } else { v32 = ((char *)&v121 - (_BYTE *)v117) >> 2; if ( v7 == v119 ) { v33 = (v7 - (_BYTE *)v117) >> 2; if ( v33 > 0x3FFFFFFE ) goto LABEL_75; v34 = v33 + 1; v35 = (v119 - (_BYTE *)v117) >> 2; if ( v34 > v35 ) { if ( 0x3FFFFFFF - (v35 >> 1) >= v35 ) v36 = (char *)((v35 >> 1) + v35); else v36 = 0; if ( (unsigned int)v36 < v34 ) v36 = (char *)v34; sub_74E360((const void **)&v117, v36); v7 = v118; v9 = v113; v31 = v117; } } if ( !v7 ) goto LABEL_64; *(_DWORD *)v7 = v31[v32]; } v9 = v113; LABEL_64: v7 += 4; v118 = v7; ++LODWORD(v123); } while ( SLODWORD(v123) < 6 ); } v10 = *(float *)&v122; v11 = *(float *)&v129; } ++v128; if ( ++v115 <= v124[4] ) { v12 = v115; v2 = v124; v13 = (int)v128; continue; } break; } v8 = v110; v2 = v124; } ++v120; v110 = ++v8; } while ( v8 <= v2[5] ); } v41 = v114; v127 = v114; if ( v114 ) { v125 = COERCE_FLOAT(operator new[](12 * (_DWORD)v114)); v116 = (char *)operator new[](12 * (_DWORD)v41); v45 = (char *)operator new[](16 * (_DWORD)v41); if ( v45 ) { v46 = (int)v41 - 1; if ( (_DWORD)((_DWORD)v41 - 1) >= 0 ) { v47 = (int)(v45 + 8); do { *(float *)(v47 - 8) = 0.0; v47 += 16; --v46; *(float *)(v47 - 20) = 0.0; *(float *)(v47 - 16) = 0.0; *(float *)(v47 - 12) = 0.0; } while ( v46 >= 0 ); } v128 = v45; } else { v128 = 0; } *(float *)&v122 = COERCE_FLOAT(operator new[](16 * (_DWORD)v41)); v48 = *v113; v131 = *(float *)&v113; if ( (int *)v48 != v113 ) { v49 = 1.0; v50 = *(float *)&v126; do { v51 = *(_DWORD *)(v48 + 12); v52 = *(_DWORD *)(v132 + 204); v53 = *(_DWORD *)(v48 + 12) / v52; v54 = *(_DWORD *)(v48 + 16); v129 = v53; v55 = v51 - v53 * v52; v56 = (float *)(LODWORD(v125) + 12 * v54); v57 = v132; v133 = (double)v55; v58 = v133; *v56 = v133 * *(float *)(v132 + 92); v133 = (double)v129; v59 = v133; v56[1] = v133 * *(float *)(v57 + 96); v60 = *(float *)(*(_DWORD *)(v57 + 192) + 4 * v51) + *(float *)(*(_DWORD *)(v132 + 188) + 4 * v51); v61 = *(_DWORD *)(v132 + 196); v133 = v60; *(float *)(v61 + 4 * v51) = v133; v62 = *(float *)(*(_DWORD *)(v132 + 196) + 4 * v51); v63 = v132; v56[2] = v62 * *(float *)(v132 + 256) - *(float *)(v132 + 260); if ( *(_DWORD *)(v63 + 184) ) { v64 = v63; v65 = *(_DWORD *)(v63 + 184); v133 = *(float *)(v65 + 100); v66 = (unsigned __int8 *)(*(_DWORD *)(v65 + 80) + **(_DWORD **)(v65 + 92) + LODWORD(v133) * (v55 + *(_DWORD *)(v64 + 204) * (*(_DWORD *)(v64 + 208) - v129 - 1))); LODWORD(v133) = *v66; v67 = (float *)&v128[16 * v54]; *v67 = (double)SLODWORD(v133) / 255.0; LODWORD(v133) = v66[1]; v67[1] = (double)SLODWORD(v133) / 255.0; LODWORD(v133) = v66[2]; v67[2] = (double)SLODWORD(v133) / 255.0; v68 = v59; v69 = v49; v70 = v68; v67[3] = v69; } else { v71 = v59; v69 = v49; v70 = v71; v106 = v69; v72 = (float *)&v128[16 * v54]; v107 = v69; v108 = v69; *v72 = v106; v109 = v69; v72[1] = v107; v72[2] = v108; v72[3] = v109; } v73 = v130; v74 = v122; v75 = (char *)v127 + v54; *(float *)(v122 + 8 * v54) = v58 / v130[21]; *(float *)(v74 + 8 * v54 + 4) = v70 / v73[21]; v76 = (float *)(v74 + 8 * (_DWORD)v75); *v76 = (v58 - v73[16]) * v50; v77 = (v70 - v73[17]) * v50; v49 = v69; v76[1] = v77; if ( !*(_BYTE *)(v48 + 21) ) { v78 = *(_DWORD *)(v48 + 8); if ( *(_BYTE *)(v78 + 21) ) { for ( i = *(_DWORD *)(v48 + 4); !*(_BYTE *)(i + 21); i = *(_DWORD *)(i + 4) ) { if ( v48 != *(_DWORD *)(i + 8) ) break; v48 = i; } v48 = i; } else { v48 = *(_DWORD *)(v48 + 8); for ( j = *(_DWORD *)v78; !*(_BYTE *)(j + 21); j = *(_DWORD *)j ) v48 = j; } } } while ( v48 != LODWORD(v131) ); } v81 = v117; v82 = (v118 - (_BYTE *)v117) >> 2; LODWORD(v133) = (unsigned __int16)(v82 / 3); v83 = operator new[](2 * v82); v84 = 0; if ( v82 ) { do { v83[v84] = v81[2 * v84]; ++v84; } while ( v84 < v82 ); } if ( v114 ) { v85 = operator new(0xC4u); v127 = v85; LOBYTE(v142) = 3; if ( v85 ) { v86 = COERCE_FLOAT( sub_866D90( v85, (__int16)v114, SLODWORD(v125), (int)v116, (int)v128, v122, 2, 0, SLOWORD(v133), (int)v83)); *(float *)&v126 = v86; } else { v86 = 0.0; *(float *)&v126 = 0.0; } v133 = v86; if ( v86 != 0.0 ) InterlockedIncrement((volatile LONG *)(LODWORD(v86) + 4)); LOBYTE(v142) = 4; *((float *)v124 + 1) = v86; v87 = operator new(0x1Cu); v127 = v87; LOBYTE(v142) = 5; if ( v87 ) { sub_863970(v87, *((_DWORD *)v130 + 20), 1, 3, 1, 0); *v87 = &NiTexturingProperty::ShaderMap::`vftable'; v87[6] = 0; v88 = (int)v87; } else { v88 = 0; } LOBYTE(v142) = 4; *(_DWORD *)(v88 + 24) = 0; v89 = operator new(0x1Cu); v127 = v89; LOBYTE(v142) = 6; if ( v89 ) { sub_863970(v89, *((_DWORD *)v130 + 24), 1, 3, 1, 0); *v89 = &NiTexturingProperty::ShaderMap::`vftable'; v89[6] = 0; v90 = (int)v89; } else { v90 = 0; } LOBYTE(v142) = 4; *(_DWORD *)(v90 + 24) = 1; v91 = operator new(0x44u); v127 = v91; LOBYTE(v142) = 7; if ( v91 ) v92 = sub_863BB0(v91); else v92 = 0; LOBYTE(v142) = 4; sub_863FF0(v92, 0, v88); sub_863FF0(v92, 1u, v90); v93 = (_DWORD *)**((_DWORD **)v92 + 10); if ( !v93 ) { v94 = operator new(0x18u); v127 = v94; LOBYTE(v142) = 8; v93 = v94 ? sub_863940(v94) : 0; if ( *((_DWORD *)v92 + 11) ) { if ( *((_DWORD *)v92 + 12) ) { if ( v93 ) { if ( !**((_DWORD **)v92 + 10) ) ++*((_DWORD *)v92 + 13); } else if ( **((_DWORD **)v92 + 10) ) { --*((_DWORD *)v92 + 13); } } else { *((_DWORD *)v92 + 12) = 1; if ( v93 ) ++*((_DWORD *)v92 + 13); } **((_DWORD **)v92 + 10) = v93; } } v93[3] = 5; v127 = (void *)v92; InterlockedIncrement(v92 + 1); v95 = *(float *)&v126; v96 = *(int (__thiscall **)(int))(*(_DWORD *)(v126 + 156) + 4); LOBYTE(v142) = 9; v97 = v96(v126 + 156); v98 = (_DWORD *)v97; v99 = *(_DWORD *)(v97 + 8); v130 = (float *)v99; if ( (volatile LONG *)v99 != v92 ) { if ( v99 && !InterlockedDecrement((volatile LONG *)(v99 + 4)) && v130 ) (**(void (__stdcall ***)(signed int))v130)(1); v98[2] = v92; InterlockedIncrement(v92 + 1); } v98[1] = 0; *v98 = *(_DWORD *)(LODWORD(v95) + 160); v100 = *(_DWORD *)(LODWORD(v95) + 160); if ( v100 ) *(_DWORD *)(v100 + 4) = v98; else *(_DWORD *)(LODWORD(v95) + 164) = v98; ++*(_DWORD *)(LODWORD(v95) + 168); *(_DWORD *)(LODWORD(v95) + 160) = v98; LOBYTE(v142) = 4; if ( !InterlockedDecrement(v92 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v92)(v92, 1); v101 = (volatile LONG *)v126; sub_863370(v126, (int)"PgTerrain", 0); (*(void (__thiscall **)(volatile LONG *))(*v101 + 124))(v101); (*(void (__stdcall **)(volatile LONG *, _DWORD))(**(_DWORD **)(v132 + 56) + 116))(v101, 0); LOBYTE(v142) = 1; if ( !InterlockedDecrement(v101 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v101)(v101, 1); } v102 = *v113; LOBYTE(v142) = 10; sub_8DFFB0(&v112, (int *)&v133, v102, (int)v113); v103 = v113; if ( !(dword_BA66F0 & 1) ) { dword_BA66F0 |= 1u; InitializeCriticalSection(&stru_BA66C4); dword_BA66DC = 0; dword_BA66E0 = 0; dword_BA66E4 = 0; dword_BA66E8 = 24; dword_BA66EC = 32; atexit(sub_9A4AE0); } EnterCriticalSection(&stru_BA66C4); *v103 = dword_BA66DC; dword_BA66DC = (int)v103; LeaveCriticalSection(&stru_BA66C4); if ( v117 ) operator delete(v117); result = 1; } else { v42 = *v9; LOBYTE(v142) = 2; sub_8DFFB0(&v112, (int *)&v133, v42, (int)v9); v43 = v113; if ( !(dword_BA66F0 & 1) ) { dword_BA66F0 |= 1u; InitializeCriticalSection(&stru_BA66C4); dword_BA66DC = 0; dword_BA66E0 = 0; dword_BA66E4 = 0; dword_BA66E8 = 24; dword_BA66EC = 32; atexit(sub_9A4AE0); } EnterCriticalSection(&stru_BA66C4); *v43 = dword_BA66DC; dword_BA66DC = (int)v43; LeaveCriticalSection(&stru_BA66C4); if ( v117 ) operator delete(v117); result = 0; } return result; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA66DC: using guessed type int dword_BA66DC; // BA66E4: using guessed type int dword_BA66E4; // BA66E8: using guessed type int dword_BA66E8; // BA66EC: using guessed type int dword_BA66EC; // BA66F0: using guessed type int dword_BA66F0; //----- (008E1ED0) -------------------------------------------------------- unsigned int __thiscall sub_8E1ED0(unsigned int *this) { unsigned int *v1; // esi char *v2; // eax int v3; // ebx char *v4; // edi int v5; // edi int v6; // eax int v7; // ecx int *v8; // eax unsigned int v9; // edx unsigned int v10; // ecx _DWORD *v11; // eax unsigned int result; // eax double v13; // st7 double v14; // st6 float *v15; // eax double v16; // st5 double v17; // st4 double v18; // st2 double v19; // st5 signed int v20; // ebx int v21; // edi int v22; // eax int v23; // eax int v24; // ecx float v25; // ecx void *v26; // edx int v27; // eax signed int v28; // edi _DWORD *v29; // ebx _DWORD *v30; // eax int v31; // [esp+10h] [ebp-2Ch] void *v32; // [esp+18h] [ebp-24h] int v33; // [esp+1Ch] [ebp-20h] float v34; // [esp+20h] [ebp-1Ch] signed int v35; // [esp+24h] [ebp-18h] char v36[4]; // [esp+28h] [ebp-14h] int v37; // [esp+2Ch] [ebp-10h] int v38; // [esp+38h] [ebp-4h] v1 = this; v2 = (char *)this[66]; v3 = 0; if ( v2 ) { v4 = v2 - 4; `eh vector destructor iterator'(v2, 0x38u, *((_DWORD *)v2 - 1), sub_8E09A0); operator delete[](v4); } v5 = v1[57]; v6 = 56 * v1[57]; v7 = 56 * (unsigned __int64)v1[57] >> 32 != 0; v1[66] = 0; v8 = (int *)operator new[](((v6 | -v7) + 4) | -__CFADD__(v6 | -v7, 4)); v32 = v8; v38 = 0; if ( v8 ) { v3 = (int)(v8 + 1); *v8 = v5; `eh vector constructor iterator'(v8 + 1, 0x38u, v5, sub_8E08E0, sub_8E09A0); } v9 = 0; v38 = -1; v1[66] = v3; if ( v1[55] ) { do { v10 = 0; if ( v1[56] ) { do { v11 = (_DWORD *)(v1[66] + 56 * (v9 + v10 * v1[55])); *v11 = v9 * v1[61]; v11[1] = v10 * v1[60]; v11[2] = v1[58]; v11[3] = v1[59]; v11[4] = v1[60]; ++v10; v11[5] = v1[61]; } while ( v10 < v1[56] ); } ++v9; } while ( v9 < v1[55] ); } result = 0; *(_DWORD *)v36 = 0; if ( v1[71] ) { v13 = 1.0; v14 = 0.0; do { v15 = (float *)(v1[67] + 108 * result); v34 = v15[16]; v16 = v34; *(float *)&v35 = v15[18] - v13 + v34; v34 = v15[17]; v17 = v34; *(float *)&v33 = v15[19] - v13 + v34; if ( (double)v1[51] >= v16 && *(float *)&v35 >= v14 ) { v34 = (double)v1[60]; v18 = v16 / v34; v19 = v34; v20 = (signed int)v18; v37 = (signed int)v18; if ( (signed int)v18 < 0 ) { v37 = 0; v20 = 0; } v21 = (signed int)(*(float *)&v35 / v19); v22 = v1[55]; if ( v21 >= v22 ) v21 = v22 - 1; if ( (double)v1[52] >= v17 && *(float *)&v33 >= v14 ) { v35 = (signed int)(v17 / (double)v1[61]); if ( v35 < 0 ) *(float *)&v35 = 0.0; v23 = (signed int)(*(float *)&v33 / v19); v24 = v1[56]; if ( v23 >= v24 ) v23 = v24 - 1; v25 = 0.0; v26 = (void *)(v21 - v20); v34 = 0.0; v32 = (void *)(v21 - v20); if ( v21 - v20 >= 0 ) { v27 = v23 - v35; v35 = v27; do { v33 = LODWORD(v25) + v20; v28 = 0; if ( v27 >= 0 ) { do { v29 = (_DWORD *)(v1[66] + 56 * (v33 + v28 * v1[55]) + 24); v30 = sub_49FAD0(v29, v36); sub_8DE1B0(v29, (int)&v31, v30, 0); ++v28; } while ( v28 <= v35 ); v27 = v35; v26 = v32; v25 = v34; v20 = v37; } ++LODWORD(v25); v34 = v25; } while ( SLODWORD(v25) <= (signed int)v26 ); v13 = 1.0; v14 = 0.0; } } } result = *(_DWORD *)v36 + 1; *(_DWORD *)v36 = result; } while ( result < v1[71] ); } return result; } //----- (008E2200) -------------------------------------------------------- void __thiscall sub_8E2200(_DWORD *this) { _DWORD *v1; // esi int v2; // edi void *v3; // eax void *v4; // eax void *v5; // eax char *v6; // eax char *v7; // edi char *v8; // eax char *v9; // edi int v10; // ST44_4 int v11; // ST40_4 PRTL_CRITICAL_SECTION_DEBUG *v12; // ebx struct _RTL_CRITICAL_SECTION *v13; // edi int v14; // edi _DWORD *v15; // edi _DWORD *i; // ebx int v17; // edi int v18; // edi int v19; // edi char v20; // [esp+10h] [ebp-18h] _DWORD *v21; // [esp+14h] [ebp-14h] _DWORD *v22; // [esp+18h] [ebp-10h] int v23; // [esp+24h] [ebp-4h] v1 = this; v22 = this; v2 = this[46]; v23 = 11; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[46] = 0; } if ( v1[50] ) operator delete[]((void *)v1[50]); v3 = (void *)v1[49]; v1[50] = 0; if ( v3 ) operator delete[](v3); v4 = (void *)v1[48]; v1[49] = 0; if ( v4 ) operator delete[](v4); v5 = (void *)v1[47]; v1[48] = 0; if ( v5 ) operator delete[](v5); v6 = (char *)v1[66]; v1[47] = 0; if ( v6 ) { v7 = v6 - 4; `eh vector destructor iterator'(v6, 0x38u, *((_DWORD *)v6 - 1), sub_8E09A0); operator delete[](v7); } v8 = (char *)v1[73]; v1[66] = 0; if ( v8 ) { v9 = v8 - 4; `eh vector destructor iterator'(v8, 4u, *((_DWORD *)v8 - 1), sub_410C00); operator delete[](v9); } v1[73] = 0; v21 = v1 + 102; v10 = v1[103]; v11 = *(_DWORD *)v1[103]; LOBYTE(v23) = 12; sub_8DFEF0(v1 + 102, (int *)&v20, v11, v10); v12 = (PRTL_CRITICAL_SECTION_DEBUG *)v1[103]; v13 = sub_8D6CC0(); EnterCriticalSection(v13); *v12 = v13[1].DebugInfo; v13[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v12; LeaveCriticalSection(v13); v14 = v1[100]; LOBYTE(v23) = 9; if ( v14 && !InterlockedDecrement((volatile LONG *)(v14 + 4)) && v14 ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); LOBYTE(v23) = 8; sub_8E4F70(v1 + 80); v15 = (_DWORD *)v1[67]; LOBYTE(v23) = 7; if ( v15 ) { for ( i = (_DWORD *)v1[68]; v15 != i; v15 += 27 ) sub_8DE320(v15); operator delete((void *)v1[67]); } v1[67] = 0; v1[68] = 0; v1[69] = 0; v17 = v1[46]; LOBYTE(v23) = 6; if ( v17 && !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); if ( v1[44] >= 0x10u ) operator delete((void *)v1[39]); v1[44] = 15; v1[43] = 0; *((_BYTE *)v1 + 156) = 0; if ( v1[37] >= 0x10u ) operator delete((void *)v1[32]); v1[37] = 15; v1[36] = 0; *((_BYTE *)v1 + 128) = 0; if ( v1[30] >= 0x10u ) operator delete((void *)v1[25]); v1[30] = 15; v1[29] = 0; *((_BYTE *)v1 + 100) = 0; if ( v1[21] >= 0x10u ) operator delete((void *)v1[16]); v1[21] = 15; v1[20] = 0; *((_BYTE *)v1 + 64) = 0; v18 = v1[15]; LOBYTE(v23) = 1; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = v1[14]; LOBYTE(v23) = 0; if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); if ( v1[12] >= 0x10u ) operator delete((void *)v1[7]); v1[12] = 15; v1[11] = 0; *((_BYTE *)v1 + 28) = 0; if ( v1[5] >= 0x10u ) operator delete((void *)*v1); v1[5] = 15; v1[4] = 0; *(_BYTE *)v1 = 0; } //----- (008E2540) -------------------------------------------------------- int __fastcall sub_8E2540(_DWORD *a1) { int result; // eax double v2; // st7 int v3; // eax int v4; // edi int v5; // esi int v6; // edx int v7; // esi int v8; // edx float *v9; // esi signed int v10; // eax double v11; // st6 int v12; // ebx signed int v13; // eax double v14; // st6 double v15; // st7 double v16; // st7 signed int v17; // eax int *v18; // ecx int *v19; // ecx int *v20; // ecx bool v21; // sf unsigned __int8 v22; // of int *v23; // eax float **v24; // eax float **v25; // edi int v26; // ebx PRTL_CRITICAL_SECTION_DEBUG *v27; // eax volatile LONG *v28; // ebx int v29; // eax int v30; // edx int v31; // eax void *v32; // ecx int v33; // eax int v34; // edx int v35; // ecx int i; // eax int v37; // eax volatile LONG *v38; // [esp-8h] [ebp-80h] int v39; // [esp+10h] [ebp-68h] float **v40; // [esp+14h] [ebp-64h] volatile LONG *v41; // [esp+18h] [ebp-60h] char v42; // [esp+1Ch] [ebp-5Ch] float **v43; // [esp+24h] [ebp-54h] volatile LONG *v44; // [esp+28h] [ebp-50h] int v45; // [esp+2Ch] [ebp-4Ch] int v46; // [esp+30h] [ebp-48h] int v47; // [esp+34h] [ebp-44h] float *v48; // [esp+38h] [ebp-40h] int v49; // [esp+3Ch] [ebp-3Ch] unsigned int v50; // [esp+40h] [ebp-38h] _DWORD *v51; // [esp+44h] [ebp-34h] int v52; // [esp+48h] [ebp-30h] int v53; // [esp+4Ch] [ebp-2Ch] int v54; // [esp+50h] [ebp-28h] int v55; // [esp+54h] [ebp-24h] float *v56; // [esp+58h] [ebp-20h] int v57; // [esp+5Ch] [ebp-1Ch] _DWORD *v58; // [esp+60h] [ebp-18h] int v59; // [esp+64h] [ebp-14h] int v60; // [esp+68h] [ebp-10h] int v61; // [esp+74h] [ebp-4h] v58 = a1; result = 0; v50 = 0; if ( a1[57] ) { v2 = 1.0; v49 = 0; do { v3 = a1[66] + result; v4 = *(_DWORD *)v3; v5 = *(_DWORD *)(v3 + 4); v54 = *(_DWORD *)v3 + *(_DWORD *)(v3 + 16); v52 = v5 + *(_DWORD *)(v3 + 20); v6 = **(_DWORD **)(v3 + 28); v55 = v5; v7 = *(_DWORD *)(v3 + 28); v57 = v4; v60 = v6; v45 = v7; if ( v6 != v7 ) { v51 = (_DWORD *)(v3 + 40); while ( 1 ) { v8 = *(_DWORD *)(v6 + 12); v9 = (float *)(a1[67] + 108 * v8); v46 = v8; v10 = (signed int)v9[16]; v11 = v9[18] - v2; v12 = v10; v56 = (float *)(signed int)v9[16]; v13 = (signed int)(v11 + (double)v10); v14 = v9[17]; v53 = v13; v15 = v9[19] - v2; v59 = (signed int)v14; v16 = v15 + (double)(signed int)v14; v17 = (signed int)v16; v48 = (float *)(signed int)v16; v18 = &v57; if ( v4 <= v12 ) v18 = (int *)&v56; v56 = (float *)*v18; v19 = &v55; if ( v55 <= v59 ) v19 = &v59; v59 = *v19; v20 = &v54; if ( v54 >= v53 ) v20 = &v53; v22 = __OFSUB__(v52, v17); v21 = v52 - v17 < 0; v53 = *v20; v23 = &v52; if ( !(v21 ^ v22) ) v23 = (int *)&v48; v48 = (float *)*v23; v24 = (float **)operator new(0x20u); if ( v24 ) { *v24 = 0; v24[1] = 0; v25 = v24; } else { v25 = 0; } LOBYTE(v47) = 0; v43 = v25; sub_8DDF30(&v44, v25, v47); v61 = 0; v26 = (int)v44; v39 = v46; v40 = v43; v41 = v44; if ( v44 ) { if ( InterlockedExchange(v44 + 3, 1) ) { do Sleep(1u); while ( InterlockedExchange((volatile LONG *)(v26 + 12), 1) ); } ++*(_DWORD *)(v26 + 4); InterlockedExchange((volatile LONG *)(v26 + 12), 0); } LOBYTE(v61) = 1; v27 = sub_8DFCB0(v51, &v39); sub_8DFAC0(v51, (int)&v42, (int)v27, 0); LOBYTE(v61) = 0; if ( v41 ) { v28 = v41 + 3; while ( InterlockedExchange(v28, 1) ) Sleep(1u); v29 = *((_DWORD *)v41 + 1) - 1; *((_DWORD *)v41 + 1) = v29; if ( v29 ) { InterlockedExchange(v28, 0); } else { InterlockedExchange(v28, 0); (*(void (**)(void))(*v41 + 4))(); while ( InterlockedExchange(v28, 1) ) Sleep(1u); v46 = *((_DWORD *)v41 + 2) - 1; *((_DWORD *)v41 + 2) = v46; InterlockedExchange(v28, 0); if ( !v46 ) (*(void (**)(void))(*v41 + 8))(); } v26 = (int)v44; } v30 = v59; v31 = v53; v25[2] = v56; v25[5] = v48; v32 = v58; *v25 = v9; v25[3] = (float *)v30; v25[4] = (float *)v31; sub_8E1370(v32, (unsigned int *)v25); v61 = -1; if ( v26 ) { while ( InterlockedExchange((volatile LONG *)(v26 + 12), 1) ) Sleep(1u); v33 = *(_DWORD *)(v26 + 4) - 1; *(_DWORD *)(v26 + 4) = v33; v38 = (volatile LONG *)(v26 + 12); if ( v33 ) { InterlockedExchange(v38, 0); } else { InterlockedExchange(v38, 0); (*(void (__thiscall **)(int))(*(_DWORD *)v26 + 4))(v26); while ( InterlockedExchange((volatile LONG *)(v26 + 12), 1) ) Sleep(1u); v46 = *(_DWORD *)(v26 + 8) - 1; *(_DWORD *)(v26 + 8) = v46; InterlockedExchange((volatile LONG *)(v26 + 12), 0); if ( !v46 ) (*(void (__thiscall **)(int))(*(_DWORD *)v26 + 8))(v26); } } v34 = v60; if ( !*(_BYTE *)(v60 + 17) ) { v35 = *(_DWORD *)(v60 + 8); if ( *(_BYTE *)(v35 + 17) ) { v37 = *(_DWORD *)(v60 + 4); if ( !*(_BYTE *)(v37 + 17) ) { while ( v34 == *(_DWORD *)(v37 + 8) ) { v60 = v37; v37 = *(_DWORD *)(v37 + 4); if ( *(_BYTE *)(v37 + 17) ) break; v34 = v60; } } v60 = v37; } else { for ( i = *(_DWORD *)v35; !*(_BYTE *)(i + 17); i = *(_DWORD *)i ) v35 = i; v60 = v35; } v34 = v60; } v2 = 1.0; a1 = v58; if ( v34 == v45 ) break; v4 = v57; v6 = v60; } } result = v49 + 56; ++v50; v49 += 56; } while ( v50 < a1[57] ); } return result; } //----- (008E28E0) -------------------------------------------------------- char __thiscall sub_8E28E0(unsigned int *this, char *a2) { unsigned int *v2; // ebx char result; // al _DWORD *v4; // eax int v5; // esi _DWORD *v6; // eax _DWORD *v7; // eax unsigned int v8; // edi char *v9; // [esp+28h] [ebp+8h] v2 = this; result = sub_8E0C80(this, a2); if ( result ) { v4 = operator new(0x20u); v5 = (int)v4; if ( v4 ) { sub_85B2B0(v4); *(_DWORD *)v5 = &NiAlphaProperty::`vftable'; *(_WORD *)(v5 + 28) = 236; *(_BYTE *)(v5 + 30) = 0; } else { v5 = 0; } if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); *(_WORD *)(v5 + 28) &= 0xFDFFu; *(_WORD *)(v5 + 28) |= 1u; *(_WORD *)(v5 + 28) |= 0x2000u; v6 = operator new(0xE8u); if ( v6 ) { v7 = sub_85A1C0(v6, 0); v9 = (char *)v7; } else { v9 = 0; v7 = 0; } v8 = v2[14]; if ( (_DWORD *)v8 != v7 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(unsigned int, signed int))v8)(v8, 1); v7 = v9; } v2[14] = (unsigned int)v7; if ( v7 ) InterlockedIncrement(v7 + 1); } sub_403700((_DWORD *)v2[14], v5); sub_8E1ED0(v2); sub_8E2540(v2); sub_85C4D0((_DWORD *)v2[14]); if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); result = 1; } return result; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; //----- (008E2A50) -------------------------------------------------------- void __thiscall sub_8E2A50(_DWORD *this, unsigned int a2, unsigned int a3) { if ( a2 <= 0x200 && a3 <= 0x200 ) { this[3] = a2; this[4] = a3; this[135721] = 1000; } } //----- (008E2A80) -------------------------------------------------------- signed int __thiscall sub_8E2A80(int this, int *a2) { int v2; // esi int v3; // ecx int v4; // eax int v5; // edi int v6; // ebx char v7; // al int v8; // ecx int v9; // edx int v11; // [esp+Ch] [ebp-24h] int v12; // [esp+10h] [ebp-20h] int v13; // [esp+14h] [ebp-1Ch] int v14; // [esp+18h] [ebp-18h] int v15; // [esp+1Ch] [ebp-14h] int v16; // [esp+20h] [ebp-10h] int v17; // [esp+24h] [ebp-Ch] int v18; // [esp+28h] [ebp-8h] v2 = this; *(_WORD *)(this + 10388) = 0; *(_DWORD *)(this + 88) = *a2; v3 = *(_DWORD *)(this + 10380); v4 = v3 - *(_DWORD *)(v2 + 88); *(_DWORD *)(v2 + 92) = a2[1]; v5 = abs(v4); v16 = *(_DWORD *)(v2 + 10384); v11 = *(_DWORD *)(v2 + 10384); v6 = abs(*(_DWORD *)(v2 + 10384) - *(_DWORD *)(v2 + 92)); v15 = v3; v12 = v3; v13 = 2 * (v3 <= *(_DWORD *)(v2 + 88)) - 1; v14 = 2 * (*(_DWORD *)(v2 + 10384) <= *(_DWORD *)(v2 + 92)) - 1; if ( !v5 ) v13 = 0; if ( !v6 ) v14 = 0; v7 = (v5 <= v6) + 1; v17 = v5; v18 = v6; while ( 1 ) { v8 = v15; v9 = v16; if ( v15 == *(_DWORD *)(v2 + 88) && v16 == *(_DWORD *)(v2 + 92) ) { *a2 = v15; a2[1] = v16; return 0; } if ( v7 == 1 ) { v8 = v13 + v15; v18 += v6; v15 += v13; if ( v18 > v5 ) { v9 = v14 + v16; v18 -= v5; v16 += v14; } } else { v9 = v14 + v16; v17 += v5; v16 += v14; if ( v17 > v6 ) { v8 = v13 + v15; v17 -= v6; v15 += v13; } } if ( *(_DWORD *)(v2 + 542888) ) break; LABEL_16: ++*(_WORD *)(v2 + 10388); v7 = (v5 <= v6) + 1; v12 = v8; v11 = v9; } if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, int, int))(**(_DWORD **)(v2 + 542888) + 20))( *(_DWORD *)(v2 + 542888), v8 + *(_DWORD *)(v2 + 4), v9 + *(_DWORD *)(v2 + 8)) ) { v9 = v16; v8 = v15; goto LABEL_16; } *a2 = v12; a2[1] = v11; return 1; } //----- (008E2BE0) -------------------------------------------------------- signed int __thiscall sub_8E2BE0(_DWORD *this) { int v1; // ebx _DWORD *v2; // esi int v3; // ecx int v4; // eax int v5; // edx int v6; // edi int v7; // ecx __int16 v8; // bx __int16 v9; // ax int v10; // ecx __int16 v11; // bx __int16 v12; // ax int v13; // edi int v14; // ecx int v15; // ecx __int16 v16; // bx __int16 v17; // ax int v18; // ecx int v19; // eax int v20; // eax int v21; // eax int v22; // ecx int v23; // eax int v25; // [esp+Ch] [ebp-24h] int v26; // [esp+10h] [ebp-20h] int v27; // [esp+14h] [ebp-1Ch] int v28; // [esp+18h] [ebp-18h] int v29; // [esp+20h] [ebp-10h] int v30; // [esp+24h] [ebp-Ch] int v31; // [esp+28h] [ebp-8h] signed int v32; // [esp+2Ch] [ebp-4h] v1 = v31; v2 = this; v3 = this[10]; v4 = v2[9]; v5 = v4 - 1; v28 = v3 + 1; v26 = v3 - 1; v32 = 0; v25 = v4 - 1; v27 = v4 + 1; v30 = v3; v29 = v3; while ( 2 ) { v6 = v5; if ( v5 >= v27 ) goto LABEL_27; do { if ( !v2[135722] ) goto LABEL_25; if ( v6 >= 0 && v26 >= 0 && v6 < v2[3] && v26 < v2[4] && !(*(unsigned __int8 (__thiscall **)(_DWORD, int, int))(*(_DWORD *)v2[135722] + 20))( v2[135722], v6 + v2[1], v26 + v2[2]) ) { if ( !v32 ) { v8 = abs(v6 - v2[7]); v9 = abs(v26 - v2[8]); v2[25] = v26; v1 = (unsigned __int16)(v9 + v8); v32 = 1; goto LABEL_13; } v7 = abs(v26 - v2[8]) + abs(v6 - v2[7]); if ( (unsigned __int16)v1 > (unsigned __int16)v7 ) { v2[25] = v26; v1 = (unsigned __int16)v7; LABEL_13: v2[24] = v6; goto LABEL_14; } } LABEL_14: if ( v2[135722] && v6 >= 0 && v28 >= 0 && v6 < v2[3] && v28 < v2[4] && !(*(unsigned __int8 (__thiscall **)(_DWORD, int, int))(*(_DWORD *)v2[135722] + 20))( v2[135722], v6 + v2[1], v28 + v2[2]) ) { if ( v32 ) { v10 = abs(v28 - v2[8]) + abs(v6 - v2[7]); if ( (unsigned __int16)v1 <= (unsigned __int16)v10 ) goto LABEL_25; v2[25] = v28; v1 = (unsigned __int16)v10; } else { v11 = abs(v6 - v2[7]); v12 = abs(v28 - v2[8]); v2[25] = v28; v1 = (unsigned __int16)(v12 + v11); v32 = 1; } v2[24] = v6; } LABEL_25: ++v6; } while ( v6 < v27 ); v5 = v25; v31 = v1; LABEL_27: v13 = v29; if ( v29 < v30 ) { while ( 2 ) { v14 = v2[135722]; if ( v14 ) { if ( v5 >= 0 && v13 >= 0 && v5 < v2[3] && v13 < v2[4] && !(*(unsigned __int8 (__thiscall **)(_DWORD, int, int))(*(_DWORD *)v14 + 20))( v2[135722], v5 + v2[1], v13 + v2[2]) ) { if ( v32 ) { v15 = abs(v25 - v2[7]) + abs(v13 - v2[8]); if ( (unsigned __int16)v1 > (unsigned __int16)v15 ) { v2[24] = v25; v1 = (unsigned __int16)v15; goto LABEL_38; } } else { v16 = abs(v13 - v2[8]); v17 = abs(v25 - v2[7]); v2[24] = v25; v1 = (unsigned __int16)(v17 + v16); v32 = 1; LABEL_38: v31 = v1; v2[25] = v13; } } v18 = v2[135722]; if ( v18 && v27 >= 0 && v13 >= 0 && v27 < v2[3] && v13 < v2[4] ) { if ( (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)v18 + 20))(v27 + v2[1], v13 + v2[2]) ) { v1 = v31; } else { v1 = abs(v27 - v2[7]) + abs(v13 - v2[8]); if ( v32 ) { v19 = (unsigned __int16)v1; v1 = v31; if ( (unsigned __int16)v31 > (unsigned __int16)v19 ) { v1 = v19; v2[24] = v27; v2[25] = v13; v31 = v19; } } else { v1 = (unsigned __int16)v1; v2[24] = v27; v2[25] = v13; v31 = (unsigned __int16)v1; v32 = 1; } } } } v5 = v25; if ( ++v13 >= v30 ) break; continue; } } if ( !v32 ) { v20 = v2[7]; if ( v20 >= v5 && v20 <= v27 ) { v21 = v2[8]; if ( v21 >= v26 && v21 <= v28 ) return 0; } if ( v5 > 0 ) v25 = --v5; if ( v26 > 0 ) { --v26; --v29; } v22 = v2[3]; if ( v27 < v22 ) ++v27; v23 = v2[4]; if ( v28 < v23 ) { ++v28; ++v30; } if ( !(v5 + v26) && v27 + v28 == v23 + v22 - 2 ) return 0; continue; } return 1; } } //----- (008E2FA0) -------------------------------------------------------- signed int __thiscall sub_8E2FA0(_DWORD *this) { int v1; // esi int v2; // ecx int v3; // eax int v4; // edx unsigned int v5; // edi int v6; // ecx int v7; // edx int v8; // eax int v9; // ecx int v10; // eax int v11; // edx int v12; // ecx signed int v13; // edx int v14; // eax signed int v15; // ecx int v16; // edx signed int result; // eax int v18; // edx int v19; // eax int v20; // edx int v21; // eax int v22; // ecx int v23; // eax int v24; // edx int v25; // ecx int v26; // eax int v27; // edx int v28; // ecx char *v29; // ebx int v30; // eax int v31; // ecx int v32; // ebx int v33; // ecx int v34; // eax int v35; // edi int v36; // ecx int v37; // edx int v38; // edi int v39; // edx unsigned int v40; // eax int v41; // eax int v42; // edx int v43; // ecx unsigned int v44; // edi int v45; // eax int v46; // edx int v47; // ecx int v48; // eax __int16 v49; // cx int v50; // eax int v51; // eax int v52; // ecx int v53; // ecx int v54; // eax bool v55; // zf int v56; // eax int v57; // ecx int v58; // edx int v59; // eax int v60; // eax int v61; // eax int v62; // ecx unsigned __int8 v63; // dl unsigned __int16 v64; // bx int v65; // edi int v66; // edi int v67; // eax int v68; // ecx unsigned __int8 v69; // dl unsigned __int16 v70; // bx int v71; // edi int v72; // eax int v73; // ecx unsigned __int8 v74; // dl unsigned __int16 v75; // bx int v76; // edi int v77; // eax int v78; // ecx unsigned __int8 v79; // dl unsigned __int16 v80; // bx int v81; // edi int v82; // eax signed int v83; // eax int v84; // ecx int v85; // edx int v86; // ecx int v87; // eax int v88; // ecx int v89; // edx int v90; // eax int v91; // eax int v92; // eax int v93; // edx int v94; // [esp+Ch] [ebp-Ch] int v95; // [esp+10h] [ebp-8h] int v96; // [esp+14h] [ebp-4h] v1 = (int)this; v2 = this[135722]; v3 = *(_DWORD *)(v1 + 32); v4 = *(_DWORD *)(v1 + 28); v5 = 0; *(_DWORD *)(v1 + 60) = 0; *(_DWORD *)(v1 + 72) = 0; if ( v2 && v4 >= 0 && v3 >= 0 && v4 < *(_DWORD *)(v1 + 12) && v3 < *(_DWORD *)(v1 + 16) ) { (*(void (__stdcall **)(int, int))(*(_DWORD *)v2 + 20))(v4 + *(_DWORD *)(v1 + 4), v3 + *(_DWORD *)(v1 + 8)); v5 = 0; } v6 = *(_DWORD *)(v1 + 542888); v7 = *(_DWORD *)(v1 + 40); v8 = *(_DWORD *)(v1 + 36); if ( !v6 || v8 < 0 || v7 < 0 || v8 >= *(_DWORD *)(v1 + 12) || v7 >= *(_DWORD *)(v1 + 16) || (*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)v6 + 20))( *(_DWORD *)(v1 + 4) + v8, *(_DWORD *)(v1 + 8) + v7) ) { v9 = *(_DWORD *)(v1 + 28); v10 = *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 10380) = *(_DWORD *)(v1 + 36); v11 = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 88) = v9; *(_DWORD *)(v1 + 10384) = v10; *(_DWORD *)(v1 + 92) = v11; if ( !sub_8E2BE0((_DWORD *)v1) ) { v18 = *(_DWORD *)(v1 + 28); result = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 64) = v18; *(_DWORD *)(v1 + 52) = 0; *(_DWORD *)(v1 + 56) = 0; *(_DWORD *)(v1 + 60) = 1; *(_DWORD *)(v1 + 68) = result; *(_DWORD *)(v1 + 36) = v18; *(_DWORD *)(v1 + 40) = result; return result; } v12 = *(_DWORD *)(v1 + 100); v13 = *(_DWORD *)(v1 + 96); *(_DWORD *)(v1 + 36) = v13; *(_DWORD *)(v1 + 40) = v12; *(_DWORD *)(v1 + 60) = 1; if ( v13 == *(_DWORD *)(v1 + 28) ) { v14 = v12; if ( v12 == *(_DWORD *)(v1 + 32) ) { v15 = v13; v16 = v14; *(_DWORD *)(v1 + 64) = v15; result = v15; *(_DWORD *)(v1 + 52) = 0; *(_DWORD *)(v1 + 56) = 0; *(_DWORD *)(v1 + 68) = v16; *(_DWORD *)(v1 + 36) = v15; *(_DWORD *)(v1 + 40) = v16; return result; } } } v19 = *(_DWORD *)(v1 + 28); v20 = *(_DWORD *)(v1 + 36); *(_DWORD *)(v1 + 10384) = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 10380) = v19; v21 = *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 88) = v20; *(_DWORD *)(v1 + 92) = v21; if ( sub_8E2A80(v1, &v94) ) { *(_DWORD *)(v1 + 56) = 0; if ( *(_DWORD *)(v1 + 12) > 0u ) { v29 = (char *)(v1 + 18592); do { memset(v29, -1, 2 * *(_DWORD *)(v1 + 16)); ++v5; v29 += 1024; } while ( v5 < *(_DWORD *)(v1 + 12) ); } v30 = *(_DWORD *)(v1 + 28); v31 = *(_DWORD *)(v1 + 32); v32 = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 116) = v30; *(_DWORD *)(v1 + 120) = v31; v33 = v30; v34 = v32 - *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 10368) = v34; *(_WORD *)(v1 + 10356) = 1; v35 = v33 - *(_DWORD *)(v1 + 36); v96 = abs(v34); *(_WORD *)(v1 + 8308) = abs((_WORD)v35) + v96; *(_DWORD *)(v1 + 10364) = v35; *(_WORD *)(v1 + 2 * (v32 + (v33 << 9)) + 18592) = 1; v36 = *(_DWORD *)(v1 + 32); v37 = *(_DWORD *)(v1 + 28); *(_DWORD *)(v1 + 88) = v37; *(_DWORD *)(v1 + 92) = v36; *(_DWORD *)(v1 + 100) = v36; *(_DWORD *)(v1 + 96) = v37; *(_WORD *)(v1 + 106) = 1; *(_DWORD *)(v1 + 52) = 0; *(_DWORD *)(v1 + 542880) = 0; *(_DWORD *)(v1 + 84) = -1; v96 = 0; do { v38 = *(unsigned __int16 *)(v1 + 10356); v39 = 0; v40 = 0; *(_DWORD *)(v1 + 10360) = 0; if ( v38 ) { do { if ( *(_WORD *)(v1 + 2 * v40 + 8308) < *(_WORD *)(v39 + v1 + 8308) ) { v39 = 2 * v40; *(_DWORD *)(v1 + 10360) = v40; } ++v40; } while ( v40 < *(unsigned __int16 *)(v1 + 10356) ); } v41 = *(_DWORD *)(v1 + 10360); *(_DWORD *)(v1 + 88) = *(_DWORD *)(v1 + 8 * v41 + 116); *(_DWORD *)(v1 + 92) = *(_DWORD *)(v1 + 8 * v41 + 120); if ( (unsigned int)*(unsigned __int16 *)(v1 + 2 * v41 + 8308) < *(_DWORD *)(v1 + 84) ) { v42 = *(_DWORD *)(v1 + 92); *(_DWORD *)(v1 + 76) = *(_DWORD *)(v1 + 88); *(_DWORD *)(v1 + 80) = v42; *(_DWORD *)(v1 + 84) = *(unsigned __int16 *)(v1 + 2 * v41 + 8308); } *(_DWORD *)(v1 + 8 * v41 + 116) = *(_DWORD *)(v1 + 8 * v38 + 108); *(_DWORD *)(v1 + 8 * v41 + 120) = *(_DWORD *)(v1 + 8 * v38 + 112); *(_WORD *)(v1 + 2 * *(_DWORD *)(v1 + 10360) + 8308) = *(_WORD *)(v1 + 2 * *(unsigned __int16 *)(v1 + 10356) + 8306); v43 = *(_DWORD *)(v1 + 92); *(_DWORD *)(v1 + 96) = *(_DWORD *)(v1 + 88); --*(_WORD *)(v1 + 10356); *(_DWORD *)(v1 + 100) = v43; *(_BYTE *)(v1 + 104) = 2; *(_DWORD *)(v1 + 100) = v43 - 1; v44 = 0; do { v45 = *(_DWORD *)(v1 + 96); if ( v45 < 0 ) break; v46 = *(_DWORD *)(v1 + 100); if ( v46 < 0 ) break; if ( v45 >= *(_DWORD *)(v1 + 12) ) break; if ( v46 >= *(_DWORD *)(v1 + 16) ) break; if ( *(_WORD *)(v1 + 2 * (v46 + (v45 << 9)) + 18592) == -1 ) { v47 = *(_DWORD *)(v1 + 542888); if ( v47 ) { if ( v45 >= 0 && v46 >= 0 && !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)v47 + 20))( *(_DWORD *)(v1 + 4) + v45, *(_DWORD *)(v1 + 8) + v46) ) { v48 = *(_DWORD *)(v1 + 100) + (*(_DWORD *)(v1 + 96) << 9); v49 = *(_WORD *)(v1 + 2 * (*(_DWORD *)(v1 + 92) + (*(_DWORD *)(v1 + 88) << 9)) + 18592) + 1; *(_WORD *)(v1 + 10376) = v49; *(_WORD *)(v1 + 2 * v48 + 18592) = v49; v50 = *(unsigned __int16 *)(v1 + 10356); *(_DWORD *)(v1 + 8 * v50 + 116) = *(_DWORD *)(v1 + 96); *(_DWORD *)(v1 + 8 * v50 + 120) = *(_DWORD *)(v1 + 100); v51 = *(_DWORD *)(v1 + 100) - *(_DWORD *)(v1 + 40); v52 = *(_DWORD *)(v1 + 96) - *(_DWORD *)(v1 + 36); *(_DWORD *)(v1 + 10368) = v51; ++v96; v95 = abs(v51); *(_DWORD *)(v1 + 10364) = v52; *(_WORD *)(v1 + 2 * (unsigned __int16)(*(_WORD *)(v1 + 10356))++ + 8308) = abs((_WORD)v52) + v95; if ( *(_WORD *)(v1 + 10356) >= 0x400u ) break; } } } v53 = *(_DWORD *)(v1 + 96); if ( v53 == *(_DWORD *)(v1 + 36) && *(_DWORD *)(v1 + 100) == *(_DWORD *)(v1 + 40) ) { *(_DWORD *)(v1 + 52) = 1; v44 = 7; } v54 = *(unsigned __int8 *)(v1 + 104); *(_DWORD *)(v1 + 96) = v53 + dword_AC28A4[v54]; ++v44; *(_DWORD *)(v1 + 100) += dword_AC28D8[v54]; *(_BYTE *)(v1 + 104) = byte_AC2894[v54]; } while ( v44 < 8 ); if ( *(_DWORD *)(v1 + 542880) > *(_DWORD *)(v1 + 542884) ) break; v55 = *(_DWORD *)(v1 + 52) == 0; *(_DWORD *)(v1 + 542880) = v96; if ( !v55 ) goto LABEL_50; } while ( *(_WORD *)(v1 + 10356) ); if ( !*(_DWORD *)(v1 + 52) ) { v56 = *(_DWORD *)(v1 + 76); v57 = *(_DWORD *)(v1 + 80); *(_DWORD *)(v1 + 60) = 1; *(_DWORD *)(v1 + 36) = v56; *(_DWORD *)(v1 + 40) = v57; } LABEL_50: v58 = *(_DWORD *)(v1 + 36); v59 = *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 10392) = 0; *(_DWORD *)(v1 + 96) = v58; *(_DWORD *)(v1 + 100) = v59; *(_WORD *)(v1 + 10374) = -1; while ( *(_DWORD *)(v1 + 96) != *(_DWORD *)(v1 + 28) || *(_DWORD *)(v1 + 100) != *(_DWORD *)(v1 + 32) ) { v60 = *(_DWORD *)(v1 + 100) - 1; *(_BYTE *)(v1 + 104) = 2; *(_DWORD *)(v1 + 100) = v60; v61 = *(_DWORD *)(v1 + 96); v62 = *(_DWORD *)(v1 + 100); v63 = *(_BYTE *)(v1 + 104); v96 = 2; do { if ( v61 >= 0 && v62 >= 0 ) { v64 = *(_WORD *)(v1 + 2 * (v62 + (v61 << 9)) + 18592); if ( v64 < *(_WORD *)(v1 + 10374) ) { v65 = *(_DWORD *)(v1 + 12); if ( v61 < v65 && v62 < v65 ) { *(_DWORD *)(v1 + 108) = *(_DWORD *)(v1 + 96); v66 = *(_DWORD *)(v1 + 100); *(_WORD *)(v1 + 10374) = v64; *(_DWORD *)(v1 + 112) = v66; } } } v67 = dword_AC28A4[v63] + v61; *(_DWORD *)(v1 + 96) = v67; v68 = dword_AC28D8[v63] + v62; *(_DWORD *)(v1 + 100) = v68; v69 = byte_AC2894[v63]; *(_BYTE *)(v1 + 104) = v69; if ( v67 >= 0 && v68 >= 0 ) { v70 = *(_WORD *)(v1 + 2 * (v68 + (v67 << 9)) + 18592); if ( v70 < *(_WORD *)(v1 + 10374) ) { v71 = *(_DWORD *)(v1 + 12); if ( v67 < v71 && v68 < v71 ) { *(_DWORD *)(v1 + 108) = v67; *(_WORD *)(v1 + 10374) = v70; *(_DWORD *)(v1 + 112) = v68; } } } v72 = dword_AC28A4[v69] + v67; *(_DWORD *)(v1 + 96) = v72; v73 = dword_AC28D8[v69] + v68; *(_DWORD *)(v1 + 100) = v73; v74 = byte_AC2894[v69]; *(_BYTE *)(v1 + 104) = v74; if ( v72 >= 0 && v73 >= 0 ) { v75 = *(_WORD *)(v1 + 2 * (v73 + (v72 << 9)) + 18592); if ( v75 < *(_WORD *)(v1 + 10374) ) { v76 = *(_DWORD *)(v1 + 12); if ( v72 < v76 && v73 < v76 ) { *(_DWORD *)(v1 + 108) = v72; *(_WORD *)(v1 + 10374) = v75; *(_DWORD *)(v1 + 112) = v73; } } } v77 = dword_AC28A4[v74] + v72; *(_DWORD *)(v1 + 96) = v77; v78 = dword_AC28D8[v74] + v73; *(_DWORD *)(v1 + 100) = v78; v79 = byte_AC2894[v74]; *(_BYTE *)(v1 + 104) = v79; if ( v77 >= 0 && v78 >= 0 ) { v80 = *(_WORD *)(v1 + 2 * (v78 + (v77 << 9)) + 18592); if ( v80 < *(_WORD *)(v1 + 10374) ) { v81 = *(_DWORD *)(v1 + 12); if ( v77 < v81 && v78 < v81 ) { *(_DWORD *)(v1 + 108) = v77; *(_WORD *)(v1 + 10374) = v80; *(_DWORD *)(v1 + 112) = v78; } } } v61 = dword_AC28A4[v79] + v77; *(_DWORD *)(v1 + 96) = v61; v62 = dword_AC28D8[v79] + v78; v55 = v96-- == 1; *(_DWORD *)(v1 + 100) = v62; v63 = byte_AC2894[v79]; *(_BYTE *)(v1 + 104) = v63; } while ( !v55 ); v82 = *(_DWORD *)(v1 + 10392); *(_DWORD *)(v1 + 8 * v82 + 10396) = *(_DWORD *)(v1 + 108); *(_DWORD *)(v1 + 8 * v82 + 10400) = *(_DWORD *)(v1 + 112); v83 = *(_DWORD *)(v1 + 10392); *(_DWORD *)(v1 + 96) = *(_DWORD *)(v1 + 8 * v83 + 10396); v84 = *(_DWORD *)(v1 + 8 * v83++ + 10400); *(_DWORD *)(v1 + 100) = v84; *(_DWORD *)(v1 + 10392) = v83; if ( v83 >= 512 ) { v85 = *(_DWORD *)(v1 + 28); v86 = *(_DWORD *)(v1 + 32); result = 1; *(_DWORD *)(v1 + 60) = 1; *(_DWORD *)(v1 + 36) = v85; *(_DWORD *)(v1 + 40) = v86; *(_DWORD *)(v1 + 64) = v85; *(_DWORD *)(v1 + 68) = v86; *(_DWORD *)(v1 + 10392) = 0; *(_DWORD *)(v1 + 56) = 1; return result; } } v87 = *(_DWORD *)(v1 + 28); v88 = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 72) = *(_DWORD *)(v1 + 10392); v89 = *(_DWORD *)(v1 + 4) + v87; *(_DWORD *)(v1 + 10380) = v87; *(_DWORD *)(v1 + 10384) = v88; *(_DWORD *)(v1 + 18588) = 1; *(_DWORD *)(v1 + 14492) = v89; *(_DWORD *)(v1 + 14496) = *(_DWORD *)(v1 + 8) + *(_DWORD *)(v1 + 32); while ( *(_DWORD *)(v1 + 10392) > 0 ) { v90 = --*(_DWORD *)(v1 + 10392); *(_DWORD *)(v1 + 88) = *(_DWORD *)(v1 + 8 * v90 + 10396); *(_DWORD *)(v1 + 92) = *(_DWORD *)(v1 + 8 * v90 + 10400); if ( sub_8E2A80(v1, 0) ) { v91 = *(_DWORD *)(v1 + 18588); ++*(_DWORD *)(v1 + 10392); *(_DWORD *)(v1 + 18588) = v91 + 1; *(_DWORD *)(v1 + 8 * v91 + 14492) = *(_DWORD *)(v1 + 4) + *(_DWORD *)(v1 + 64); *(_DWORD *)(v1 + 8 * v91 + 14496) = *(_DWORD *)(v1 + 8) + *(_DWORD *)(v1 + 68); v92 = *(_DWORD *)(v1 + 68); *(_DWORD *)(v1 + 10380) = *(_DWORD *)(v1 + 64); *(_DWORD *)(v1 + 10384) = v92; } else { v93 = *(_DWORD *)(v1 + 92); *(_DWORD *)(v1 + 64) = *(_DWORD *)(v1 + 88); *(_DWORD *)(v1 + 68) = v93; } } result = *(_DWORD *)(v1 + 18588); *(_DWORD *)(v1 + 18588) = result + 1; *(_DWORD *)(v1 + 8 * result + 14492) = *(_DWORD *)(v1 + 4) + *(_DWORD *)(v1 + 64); *(_DWORD *)(v1 + 8 * result + 14496) = *(_DWORD *)(v1 + 8) + *(_DWORD *)(v1 + 68); } else { v22 = *(_DWORD *)(v1 + 28); v23 = *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 64) = *(_DWORD *)(v1 + 36); v24 = *(_DWORD *)(v1 + 32); *(_DWORD *)(v1 + 10380) = v22; v25 = *(_DWORD *)(v1 + 48); *(_DWORD *)(v1 + 10384) = v24; *(_DWORD *)(v1 + 68) = v23; v26 = *(_DWORD *)(v1 + 44); *(_DWORD *)(v1 + 92) = v25; *(_DWORD *)(v1 + 52) = 1; *(_DWORD *)(v1 + 56) = 1; *(_DWORD *)(v1 + 88) = v26; sub_8E2A80(v1, &v94); v27 = *(_DWORD *)(v1 + 4); v28 = v95; *(_DWORD *)(v1 + 64) = v94; *(_DWORD *)(v1 + 68) = v28; *(_DWORD *)(v1 + 64) += v27; result = *(_DWORD *)(v1 + 8); *(_DWORD *)(v1 + 68) += result; } return result; } //----- (008E37E0) -------------------------------------------------------- int __thiscall sub_8E37E0(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7, _DWORD *a8, _DWORD *a9, _DWORD *a10) { _DWORD *v10; // esi unsigned int v11; // eax unsigned int v12; // ecx signed int v13; // eax signed int v14; // ecx int v15; // eax v10 = this; v11 = this[3]; v12 = this[4]; v13 = v11 >> 1; v10[9] = a4; v14 = v12 >> 1; v10[7] = a2; v10[8] = a3; v10[10] = a5; v10[1] = 0; v10[2] = 0; if ( a2 >= v13 ) { v10[1] = a2 - v13; v10[7] = v13; } if ( a3 >= v14 ) { v10[2] = a3 - v14; v10[8] = v14; } if ( a4 >= v13 ) v10[9] = a4 - v10[1]; if ( a5 >= v14 ) v10[10] = a5 - v10[2]; v15 = v10[9]; v10[12] = v10[10]; v10[11] = v15; sub_8E2FA0(v10); *a6 = v10[13]; *a7 = v10[14]; *a8 = v10[15]; *a9 = v10[16]; a9[1] = v10[17]; *a10 = v10[4647]; return (int)(v10 + 3623); } //----- (008E38A0) -------------------------------------------------------- char __thiscall sub_8E38A0(_DWORD *this, float a2, float a3, float a4, float a5, int a6, int a7, int a8) { _DWORD *v8; // esi int v9; // edi int v10; // ebx int v11; // ST28_4 double v12; // st7 int v13; // eax int v14; // esi char result; // al unsigned int v16; // edi unsigned int v17; // edx int v18; // ecx double v19; // st7 bool v20; // zf int v21; // [esp+8h] [ebp-18h] int v22; // [esp+Ch] [ebp-14h] unsigned int v23; // [esp+10h] [ebp-10h] unsigned int v24; // [esp+14h] [ebp-Ch] int v25; // [esp+18h] [ebp-8h] int v26; // [esp+1Ch] [ebp-4h] v8 = this; v9 = this[135722]; v23 = (signed int)a2; v10 = (signed int)((double)(signed int)v23 / *(float *)(v9 + 24)); v23 = (signed int)a3; v11 = (signed int)((double)(signed int)v23 / *(float *)(v9 + 24)); v23 = (signed int)a4; v21 = (signed int)((double)(signed int)v23 / *(float *)(v9 + 24)); v23 = (signed int)a5; v12 = (double)(signed int)v23 / *(float *)(v9 + 24); v24 = 0; v23 = 0; v25 = 0; v26 = 0; v13 = sub_8E37E0(this, v10, v11, v21, (signed int)v12, &v24, &v25, &v26, &v21, &v23); if ( v25 ) { v14 = v8[135722]; *(float *)a7 = (double)v21 * *(float *)(v14 + 24); *(float *)(a7 + 4) = (double)v22 * *(float *)(v14 + 24); *(_DWORD *)a8 = 1; return 1; } if ( v26 || v24 > 0 ) { v16 = v23; v17 = 1; if ( v23 > 1 ) { v18 = a7 + 4; do { v19 = (double)*(signed int *)(v13 + 8 * v17++); v18 += 8; *(float *)(v18 - 12) = v19; *(float *)(v18 - 8) = (double)*(signed int *)(v13 + 8 * v17 - 4); *(float *)(v18 - 12) = *(float *)(v8[135722] + 24) * *(float *)(v18 - 12); *(float *)(v18 - 8) = *(float *)(v8[135722] + 24) * *(float *)(v18 - 8); } while ( v17 < v16 ); } v20 = v26 == 0; *(_DWORD *)a8 = v16 - 1; if ( v20 ) return 1; result = 0; } else { *(_DWORD *)a8 = 0; result = 1; } return result; } // 8E38A0: could not find valid save-restore pair for ebx // 8E38A0: could not find valid save-restore pair for edi // 8E38A0: could not find valid save-restore pair for esi //----- (008E39F0) -------------------------------------------------------- int __thiscall sub_8E39F0(_DWORD *this, float a2, float a3, int a4, int a5) { int v5; // edx int v6; // ebx int result; // eax __int64 v8; // [esp+8h] [ebp-8h] v8 = (signed __int64)(*(float *)a4 / 6.25); v5 = v8; v8 = (signed __int64)(*(float *)a5 / 6.25); v6 = v8; this[2595] = (signed __int64)(a2 / 6.25); LODWORD(v8) = v5; this[2596] = (signed __int64)(a3 / 6.25); HIDWORD(v8) = v6; result = sub_8E2A80((int)this, (int *)&v8); *(float *)a4 = (double)(signed int)v8; *(float *)a5 = (double)SHIDWORD(v8); *(float *)a4 = *(float *)a4 * 6.25; *(float *)a5 = 6.25 * *(float *)a5; return result; } //----- (008E3AD0) -------------------------------------------------------- float *__thiscall sub_8E3AD0(float *this) { float *result; // eax result = this; this[1] = 0.0; this[6] = 0.0; *(_DWORD *)this = &IMakeBlockInfo::`vftable'; this[2] = 0.0; this[3] = 0.0; this[4] = 0.0; this[5] = 0.0; *((_BYTE *)this + 32) = 0; this[7] = 0.0; return result; } // A41070: using guessed type void *IMakeBlockInfo::`vftable'; //----- (008E3B00) -------------------------------------------------------- void __thiscall sub_8E3B00(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax v1 = this; v2 = (void *)this[7]; *this = &IMakeBlockInfo::`vftable'; if ( v2 ) operator delete[](v2); v1[7] = 0; } // A41070: using guessed type void *IMakeBlockInfo::`vftable'; //----- (008E3B30) -------------------------------------------------------- char __thiscall sub_8E3B30(_DWORD *this, char *a2) { _DWORD *v2; // esi FILE *v4; // eax FILE *v5; // edi v2 = this; if ( !this[9] ) return 0; v4 = fopen(a2, "wb"); v5 = v4; if ( !v4 || fwrite(v2 + 11, 4u, 1u, v4) != 1 || fwrite(v2 + 5, 4u, 1u, v5) != 1 || fwrite((const void *)v2[9], v2[10], 1u, v5) != 1 ) { return 0; } fclose(v5); return 1; } //----- (008E3BC0) -------------------------------------------------------- char __thiscall sub_8E3BC0(char *this, char *a2) { char *v2; // esi FILE *v3; // eax FILE *v4; // edi v2 = this; v3 = fopen(a2, "rb"); v4 = v3; if ( !v3 ) return 0; if ( fread(v2 + 44, 4u, 1u, v3) != 1 ) return 0; if ( fread(v2 + 20, 4u, 1u, v4) != 1 ) return 0; (**(void (__thiscall ***)(void *, _DWORD, signed int, _DWORD))v2)(v2, *((_DWORD *)v2 + 11), 8, 50.0); if ( fread(*((void **)v2 + 9), *((_DWORD *)v2 + 10), 1u, v4) != 1 ) return 0; fclose(v4); return 1; } //----- (008E3C60) -------------------------------------------------------- _DWORD *__thiscall sub_8E3C60(void *this, char a2) { _DWORD *v2; // esi void *v3; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 7); *(_DWORD *)this = &IMakeBlockInfo::`vftable'; if ( v3 ) operator delete[](v3); v2[7] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A41070: using guessed type void *IMakeBlockInfo::`vftable'; //----- (008E3CA0) -------------------------------------------------------- double *__thiscall sub_8E3CA0(double *this, double *a2, double *a3) { double *result; // eax result = a2; *a2 = *a3 + *this; a2[1] = a3[1] + this[1]; a2[2] = a3[2] + this[2]; return result; } //----- (008E3CD0) -------------------------------------------------------- double *__thiscall sub_8E3CD0(double *this, double *a2, double *a3) { double *result; // eax result = a2; *a2 = *this - *a3; a2[1] = this[1] - a3[1]; a2[2] = this[2] - a3[2]; return result; } //----- (008E3D00) -------------------------------------------------------- double __thiscall sub_8E3D00(double *this, double *a2) { return a2[1] * this[1] + *a2 * *this + 0.0 + a2[2] * this[2]; } //----- (008E3D30) -------------------------------------------------------- double __thiscall sub_8E3D30(double *this) { double result; // st7 result = sqrt(this[2] * this[2] + this[1] * this[1] + *this * *this + 0.0); if ( result <= 0.0000001192092895507812 ) { result = 0.0; *this = 0.0; this[1] = 0.0; this[2] = 0.0; } else { *this = *this * (1.0 / result); this[1] = this[1] * (1.0 / result); this[2] = 1.0 / result * this[2]; } return result; } //----- (008E3DA0) -------------------------------------------------------- int __cdecl sub_8E3DA0(int a1, double a2, int a3) { int result; // eax result = a1; *(double *)a1 = *(double *)a3 * a2; *(double *)(a1 + 8) = *(double *)(a3 + 8) * a2; *(double *)(a1 + 16) = a2 * *(double *)(a3 + 16); return result; } //----- (008E3DD0) -------------------------------------------------------- _DWORD *__thiscall sub_8E3DD0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax result = this; *this = *a2; this[1] = a2[1]; this[2] = a2[2]; this[3] = a2[3]; this[4] = a2[4]; this[5] = a2[5]; return result; } //----- (008E3E00) -------------------------------------------------------- double *__thiscall sub_8E3E00(double *this, double a2, double a3, double a4) { double *result; // eax result = this; *this = a2; this[1] = a3; this[2] = a4; return result; } //----- (008E3E20) -------------------------------------------------------- int __thiscall sub_8E3E20(char *this) { return (int)(this + 16); } //----- (008E3E30) -------------------------------------------------------- double *__cdecl sub_8E3E30(double *a1, double *a2, int a3, char a4) { long double v4; // st7 long double v5; // st6 bool v6; // c0 bool v7; // c3 double v8; // st7 long double v9; // st7 double *v10; // eax long double v11; // st7 long double v12; // st7 double v13; // st7 double v14; // st6 double v15; // st5 double v16; // st4 double *result; // eax double v18; // rt0 if ( !a4 ) sub_8E3D30((double *)a3); v4 = fabs(*(double *)a3); v5 = fabs(*(double *)(a3 + 8)); v6 = v5 < v4; v7 = v5 == v4; v8 = *(double *)(a3 + 16); if ( v6 || v7 ) { v9 = 1.0 / sqrt(v8 * v8 + *(double *)a3 * *(double *)a3); v10 = a1; *a1 = -(*(double *)(a3 + 16) * v9); a1[1] = 0.0; v11 = v9 * *(double *)a3; } else { v12 = 1.0 / sqrt(v8 * v8 + *(double *)(a3 + 8) * *(double *)(a3 + 8)); v10 = a1; *a1 = 0.0; a1[1] = *(double *)(a3 + 16) * v12; v11 = -(v12 * *(double *)(a3 + 8)); } v10[2] = v11; v13 = v10[2] * *(double *)(a3 + 8) - v10[1] * *(double *)(a3 + 16); v14 = *v10 * *(double *)(a3 + 16) - v10[2] * *(double *)a3; v15 = v10[1] * *(double *)a3; v16 = *v10; result = a2; v18 = v15 - v16 * *(double *)(a3 + 8); *a2 = v13; a2[1] = v14; a2[2] = v18; return result; } //----- (008E3EF0) -------------------------------------------------------- signed int __usercall sub_8E3EF0@(void *a1@, double *a2@, double *a3@, double *a4) { double *v4; // edi void *v5; // esi _DWORD *v6; // eax double v7; // ST10_8 double v8; // ST08_8 double v9; // st7 double *v10; // eax double *v11; // eax double v12; // ST10_8 double v13; // ST08_8 double v14; // st7 double *v15; // ST5C_4 double *v16; // eax double *v17; // esi double *v18; // eax double v19; // ST48_8 double *v20; // esi double *v21; // eax double *v22; // esi double *v23; // eax double v24; // ST48_8 double *v25; // esi double *v26; // eax double *v27; // esi double *v28; // eax double v29; // ST48_8 double *v30; // esi double v31; // st7 long double v32; // st7 signed int result; // eax signed int v34; // esi long double v35; // st7 double v36; // ST20_8 double v37; // st7 double v38; // ST50_8 double v39; // st7 double v40; // ST50_8 double v41; // st7 double *v42; // edi double *v43; // edi double v44; // st7 long double v45; // st7 double v46; // ST50_8 double v47; // ST50_8 double v48; // ST50_8 double *v49; // eax long double v50; // st6 double v51; // ST50_8 double v52; // ST50_8 double v53; // ST50_8 double *v54; // eax double *v55; // eax double *v56; // esi double *v57; // eax double v58; // ST50_8 double *v59; // esi long double v60; // st7 double v61; // st5 long double v62; // ST48_8 long double v63; // ST48_8 double v64; // st7 double v65; // [esp+20h] [ebp-ECh] double v66; // [esp+28h] [ebp-E4h] double v67; // [esp+28h] [ebp-E4h] double v68; // [esp+28h] [ebp-E4h] double v69; // [esp+30h] [ebp-DCh] double v70; // [esp+38h] [ebp-D4h] double v71; // [esp+38h] [ebp-D4h] double v72; // [esp+38h] [ebp-D4h] double v73; // [esp+40h] [ebp-CCh] double v74; // [esp+48h] [ebp-C4h] double v75; // [esp+48h] [ebp-C4h] double v76; // [esp+48h] [ebp-C4h] double v77; // [esp+48h] [ebp-C4h] double v78; // [esp+50h] [ebp-BCh] double v79; // [esp+58h] [ebp-B4h] double v80; // [esp+58h] [ebp-B4h] double v81; // [esp+58h] [ebp-B4h] double v82; // [esp+58h] [ebp-B4h] double v83; // [esp+58h] [ebp-B4h] double v84; // [esp+58h] [ebp-B4h] double v85; // [esp+58h] [ebp-B4h] double v86; // [esp+58h] [ebp-B4h] double v87; // [esp+58h] [ebp-B4h] double v88; // [esp+58h] [ebp-B4h] char v89; // [esp+60h] [ebp-ACh] double v90[3]; // [esp+78h] [ebp-94h] char v91; // [esp+90h] [ebp-7Ch] char v92; // [esp+A8h] [ebp-64h] double v93[3]; // [esp+C0h] [ebp-4Ch] double v94[3]; // [esp+D8h] [ebp-34h] double v95[3]; // [esp+F0h] [ebp-1Ch] v4 = a2; v5 = a1; sub_8E5020(); sub_8E5020(); v6 = (_DWORD *)sub_8E48B0(v5); sub_8E3DD0(v93, v6); v69 = sub_8E3D30(v93); sub_8E3E30((double *)&v91, (double *)&v92, (int)v93, 1); v7 = sub_8E3D00(v93, v4); v8 = sub_8E3D00((double *)&v92, v4); v9 = sub_8E3D00((double *)&v91, v4); sub_8E3E00(v94, v9, v8, v7); v74 = sub_8E3D30(v94); v73 = 1.0 / v74; sub_8E48A0(v5); v11 = sub_8E3CD0(a4, (double *)&v89, v10); sub_8E3DD0(v90, v11); v12 = sub_8E3D00(v93, v90); v13 = sub_8E3D00((double *)&v92, v90); v14 = sub_8E3D00((double *)&v91, v90); sub_8E3E00(v95, v14, v13, v12); v15 = (double *)sub_67E330((char *)v5); v66 = *v15 * *(double *)sub_67E330((char *)v5); if ( fabs(*(double *)sub_8E3E20((char *)v94)) < 0.9999998807907104 && v74 >= 0.0000001192092895507812 ) { sub_8E5020(); v17 = v16; sub_8E5020(); v19 = *v18 * *v17; v20 = (double *)sub_6FE7C0((char *)v94); v79 = *(double *)sub_6FE7C0((char *)v94) * *v20 + v19; sub_8E5020(); v22 = v21; sub_8E5020(); v24 = *v22 * *v23; v25 = (double *)sub_6FE7C0((char *)v95); v70 = *(double *)sub_6FE7C0((char *)v94) * *v25 + v24; sub_8E5020(); v27 = v26; sub_8E5020(); v29 = *v27 * *v28; v30 = (double *)sub_6FE7C0((char *)v95); v31 = *v30 * *(double *)sub_6FE7C0((char *)v95) + v29 - v66; v67 = v31; v32 = v70 * v70 - v31 * v79; if ( v32 < 0.0 ) return 0; v34 = 0; if ( v32 <= 0.0 ) { v82 = -(v70 / v79); v40 = *(double *)sub_8E3E20((char *)v94) * v82; v41 = v40 + *(double *)sub_8E3E20((char *)v95); if ( v41 >= 0.0 && v41 <= v69 ) { result = 1; *a3 = v82 * v73; return result; } } else { v35 = sqrt(v32); v75 = v35; v78 = 1.0 / v79; v80 = (-v70 - v35) * v78; v36 = v80 * *(double *)sub_8E3E20((char *)v94); v37 = *(double *)sub_8E3E20((char *)v95) + v36; if ( v37 >= 0.0 && v37 <= v69 ) { v34 = 1; *a3 = v80 * v73; } v81 = (v75 - v70) * v78; v38 = v81 * *(double *)sub_8E3E20((char *)v94); v39 = *(double *)sub_8E3E20((char *)v95) + v38; if ( v39 >= 0.0 && v39 <= v69 ) a3[++v34 - 1] = v81 * v73; if ( v34 == 2 ) return 2; } v42 = (double *)sub_8E3E20((char *)v95); v71 = *v42 * *(double *)sub_8E3E20((char *)v94) + v70; v43 = (double *)sub_8E3E20((char *)v95); v44 = *(double *)sub_8E3E20((char *)v95) * *v43 + v67; v68 = v44; v45 = v71 * v71 - v44; if ( v45 <= 0.0 ) { if ( 0.0 == v45 ) { v85 = -v71; v48 = *(double *)sub_8E3E20((char *)v94) * v85; if ( v48 + *(double *)sub_8E3E20((char *)v95) <= 0.0 ) { a3[++v34 - 1] = v85 * v73; if ( v34 == 2 ) return 2; } } goto LABEL_27; } v76 = sqrt(v45); v83 = -v71 - v76; v46 = *(double *)sub_8E3E20((char *)v94) * v83; if ( v46 + *(double *)sub_8E3E20((char *)v95) > 0.0 || (++v34, a3[v34 - 1] = v83 * v73, v34 != 2) ) { v84 = v76 - v71; v47 = *(double *)sub_8E3E20((char *)v94) * v84; if ( *(double *)sub_8E3E20((char *)v95) + v47 <= 0.0 ) { a3[++v34 - 1] = v84 * v73; if ( v34 == 2 ) return 2; } LABEL_27: v72 = v71 - *(double *)sub_8E3E20((char *)v94) * v69; v49 = (double *)sub_8E3E20((char *)v95); v50 = v72 * v72 - ((v69 - (*v49 + *v49)) * v69 + v68); if ( v50 <= 0.0 ) { if ( 0.0 == v50 ) { v88 = -v72; v53 = *(double *)sub_8E3E20((char *)v94) * v88; if ( *(double *)sub_8E3E20((char *)v95) + v53 >= v69 ) { a3[++v34 - 1] = v88 * v73; if ( v34 == 2 ) return 2; } } return v34; } v77 = sqrt(v50); v86 = -v72 - v77; v51 = *(double *)sub_8E3E20((char *)v94) * v86; if ( *(double *)sub_8E3E20((char *)v95) + v51 < v69 || (++v34, a3[v34 - 1] = v86 * v73, v34 != 2) ) { v87 = v77 - v72; v52 = *(double *)sub_8E3E20((char *)v94) * v87; if ( *(double *)sub_8E3E20((char *)v95) + v52 >= v69 ) { a3[++v34 - 1] = v87 * v73; if ( v34 == 2 ) return 2; } return v34; } } return 2; } v54 = (double *)sub_8E48B0(v5); v65 = sub_8E3D00(v4, v54); sub_8E5020(); v56 = v55; sub_8E5020(); v58 = v66 - *v56 * *v57; v59 = (double *)sub_6FE7C0((char *)v95); v60 = v58 - *(double *)sub_6FE7C0((char *)v95) * *v59; v61 = v65; if ( v65 < 0.0 ) { if ( v60 >= 0.0 ) { v62 = sqrt(v60); *a3 = (*(double *)sub_8E3E20((char *)v95) + v62) * v73; a3[1] = -((v69 - *(double *)sub_8E3E20((char *)v95) + v62) * v73); return 2; } v61 = v65; } if ( v61 <= 0.0 || v60 < 0.0 ) return 0; v63 = sqrt(v60); *a3 = -((*(double *)sub_8E3E20((char *)v95) + v63) * v73); v64 = v69 - *(double *)sub_8E3E20((char *)v95); result = 2; a3[1] = (v64 + v63) * v73; return result; } // 8E48B0: using guessed type int __thiscall sub_8E48B0(_DWORD); //----- (008E47A0) -------------------------------------------------------- bool __cdecl sub_8E47A0(char *a1, void *a2, signed int *a3, _DWORD *a4, double *a5) { double *v5; // ST28_4 double *v6; // eax signed int v7; // eax int v8; // edx signed int v9; // ebx _DWORD *v10; // ecx _DWORD *v11; // ST20_4 int v12; // ST24_4 int v13; // ST28_4 int v14; // eax double *v15; // ST0C_4 double *v16; // eax double *v17; // eax int v19; // [esp+28h] [ebp-34h] char v20; // [esp+40h] [ebp-1Ch] v5 = (double *)sub_8E48E0(a1); sub_8E5020(); v7 = sub_8E3EF0(a2, v5, a5, v6); v8 = 0; v9 = 0; *a3 = v7; if ( v7 > 0 ) { v10 = a4; do { if ( a5[v9] >= 0.0 ) { v11 = v10; v12 = (int)(v10 + 6); v13 = v8 + 1; v14 = sub_8E48E0(a1); v15 = (double *)sub_8E3DA0((int)&v19, a5[v9], v14); sub_8E5020(); v17 = sub_8E3CA0(v16, (double *)&v20, v15); sub_8E3DD0(v11, v17); v8 = v13; v10 = (_DWORD *)v12; } ++v9; } while ( v9 < *a3 ); } *a3 = v8; return v8 > 0; } //----- (008E4880) -------------------------------------------------------- double *__thiscall sub_8E4880(double *this) { double *v1; // esi v1 = this; sub_8E48C0(this); v1[6] = 0.0; return v1; } //----- (008E48C0) -------------------------------------------------------- _DWORD *__thiscall sub_8E48C0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8E3DD0(this, &unk_AC2940); sub_8E3DD0(v1 + 6, &unk_AC2940); return v1; } //----- (008E48E0) -------------------------------------------------------- int __thiscall sub_8E48E0(char *this) { return (int)(this + 24); } //----- (008E48F0) -------------------------------------------------------- _DWORD *__thiscall sub_8E48F0(_DWORD *this, int a2, int *a3) { _DWORD *v3; // ebx _DWORD *v4; // esi int v5; // edi int v6; // eax _DWORD *v7; // ecx v3 = this; v4 = (_DWORD *)(*(int (**)(void))(*this + 4))(); v5 = v4[2]; if ( v5 != *a3 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = *a3; v4[2] = *a3; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } *v4 = a2; v4[1] = *(_DWORD *)(a2 + 4); v7 = *(_DWORD **)(a2 + 4); if ( v7 ) *v7 = v4; else v3[1] = v4; *(_DWORD *)(a2 + 4) = v4; ++v3[3]; return v4; } //----- (008E4980) -------------------------------------------------------- void __thiscall sub_8E4980(char *this, int a2) { _DWORD *v2; // edi int *v3; // eax volatile LONG *v4; // esi int (__thiscall *v5)(volatile LONG *); // eax int v6; // eax int *v7; // ebx void (__thiscall ***v8)(_DWORD, signed int); // edi int v9; // edi int v10; // [esp+14h] [ebp-1Ch] char *v11; // [esp+18h] [ebp-18h] int *v12; // [esp+1Ch] [ebp-14h] int *v13; // [esp+20h] [ebp-10h] int v14; // [esp+2Ch] [ebp-4h] v11 = this; v2 = (_DWORD *)a2; if ( *(_DWORD *)(a2 + 12) ) { v3 = *(int **)(a2 + 4); if ( v3 ) { while ( 1 ) { v4 = (volatile LONG *)v3[2]; v13 = v3; v12 = (int *)*v3; if ( v4 ) InterlockedIncrement(v4 + 1); v5 = *(int (__thiscall **)(volatile LONG *))(*v4 + 60); v14 = 0; v6 = v5(v4); v7 = (int *)&v11[4 * v6 + 8]; sub_8E48F0(v2, (int)v13, v7); sub_6BB7C0(v2, &v10, &v13); if ( v10 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } v9 = *v7; if ( (volatile LONG *)*v7 != v4 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *v7 = (int)v4; InterlockedIncrement(v4 + 1); } v14 = -1; if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); if ( !v12 ) break; v2 = (_DWORD *)a2; v3 = v12; } } } } //----- (008E4AB0) -------------------------------------------------------- LONG __thiscall sub_8E4AB0(_DWORD *this) { _DWORD *v1; // ebx void (__thiscall ***v2)(_DWORD, signed int); // esi int v3; // esi _DWORD *v4; // edi _DWORD *v5; // ST24_4 int v6; // esi _DWORD *v7; // edi _DWORD *v8; // ST24_4 int v10; // [esp+18h] [ebp-10h] int v11; // [esp+24h] [ebp-4h] v1 = this; *this = &MasterPropertyAccumulator::`vftable'; v11 = 2; while ( v1[6] ) { sub_6B7B30(v1 + 3, &v10); v2 = (void (__thiscall ***)(_DWORD, signed int))v10; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v2 ) (**v2)(v2, 1); } v3 = (int)(v1 + 7); v1[7] = &NiTPointerListBase,NiGeometry *>::`vftable'; v4 = (_DWORD *)v1[8]; LOBYTE(v11) = 3; while ( v4 ) { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v3 + 8))(v1 + 7, v5); } v1[10] = 0; v1[8] = 0; v1[9] = 0; *(_DWORD *)v3 = &NiTListBase,NiGeometry *>::`vftable'; v6 = (int)(v1 + 3); v1[3] = &NiTPointerListBase,NiPointer>::`vftable'; v7 = (_DWORD *)v1[4]; LOBYTE(v11) = 4; while ( v7 ) { v8 = v7; v7 = (_DWORD *)*v7; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v6 + 8))(v1 + 3, v8); } v1[6] = 0; v1[4] = 0; v1[5] = 0; *(_DWORD *)v6 = &NiTListBase,NiPointer>::`vftable'; v11 = -1; *v1 = &NiAccumulator::`vftable'; return sub_85BA80(v1); } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F4250: using guessed type void *NiTPointerListBase,NiGeometry *>::`vftable'; // 9F62D4: using guessed type void *NiAccumulator::`vftable'; // A23DB8: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A23DC8: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A40E64: using guessed type void *MasterPropertyAccumulator::`vftable'; //----- (008E4BC0) -------------------------------------------------------- void __thiscall sub_8E4BC0(_DWORD *this) { _DWORD *v1; // edi int *v2; // eax int v3; // ecx _DWORD *v4; // esi int v5; // ecx _DWORD *v6; // ecx char *v7; // ecx void (__thiscall ***v8)(_DWORD, signed int); // ebx int v9; // ebx int v10; // eax int v11; // eax int v12; // edi int v13; // edi int v14; // ebx char *v15; // ecx void (__thiscall ***v16)(_DWORD, signed int); // esi int v17; // [esp+10h] [ebp-24h] int v18; // [esp+14h] [ebp-20h] int v19; // [esp+18h] [ebp-1Ch] int v20; // [esp+1Ch] [ebp-18h] int v21; // [esp+20h] [ebp-14h] _DWORD *v22; // [esp+24h] [ebp-10h] int v23; // [esp+30h] [ebp-4h] v1 = this; v22 = this; v20 = dword_BA46D0; if ( dword_BA46D0 ) { if ( this[10] ) { do { v2 = (int *)v1[8]; v3 = *v2; v1[8] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[9] = 0; v4 = (_DWORD *)v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[7] + 8))(v1 + 7, v2); --v1[10]; v5 = v4[47]; if ( (*(_WORD *)(v4[46] + 50) & 0xF000) == 0x4000 ) { if ( v5 ) { v6 = *(_DWORD **)(*(_DWORD *)(*(_DWORD *)(v5 + 12) + 12) + 40); if ( !v6 || !sub_9366F0(v6) ) continue; } } v7 = (char *)*sub_85F450(v4, &v21); v23 = 0; sub_8E4980(v7, (int)(v1 + 3)); v23 = -1; if ( v21 ) { v8 = (void (__thiscall ***)(_DWORD, signed int))v21; if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v8 ) (**v8)(v8, 1); } } v9 = 0; v19 = v4[48]; if ( v19 ) { v10 = v4[47]; if ( v10 ) { if ( *(_DWORD *)(v10 + 12) ) { v11 = sub_863360(); v9 = (*(int (__thiscall **)(int, const char *, signed int, _DWORD))(*(_DWORD *)v11 + 4))( v11, "FxSkinningShadow", -1, 0); if ( v9 ) { sub_8633D0((int)v4); sub_8633A0((int)v4, v9); } } } } sub_85F480(v4, &v18); v12 = v4[45]; v23 = 1; if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); v4[45] = 0; } (*(void (__thiscall **)(_DWORD *, int))(*v4 + 116))(v4, v20); if ( v9 ) { sub_8633D0((int)v4); sub_8633A0((int)v4, v19); } v13 = v4[45]; v14 = v18; if ( v13 != v18 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v4[45] = v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v15 = (char *)*sub_85F450(v4, &v17); LOBYTE(v23) = 2; sub_8E4980(v15, (int)(v22 + 3)); LOBYTE(v23) = 1; if ( v17 ) { v16 = (void (__thiscall ***)(_DWORD, signed int))v17; if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) { if ( v16 ) (**v16)(v16, 1); } } v23 = -1; if ( v14 ) { if ( !InterlockedDecrement((volatile LONG *)(v14 + 4)) ) (**(void (__thiscall ***)(int, signed int))v14)(v14, 1); } v1 = v22; } while ( v1[10] ); } sub_868D50(v1); } } // BA46D0: using guessed type int dword_BA46D0; //----- (008E4E50) -------------------------------------------------------- _DWORD *__thiscall sub_8E4E50(void *this, _DWORD **a2) { void *v2; // ebx _DWORD *v3; // eax _DWORD *v4; // esi v2 = this; v3 = operator new(0x2Cu); v4 = v3; if ( v3 ) { sub_872A60(v3); *v4 = &MasterPropertyAccumulator::`vftable'; v4[6] = 0; v4[4] = 0; v4[5] = 0; v4[3] = &NiTPointerList>::`vftable'; v4[10] = 0; v4[8] = 0; v4[9] = 0; v4[7] = &NiTPointerList::`vftable'; } else { v4 = 0; } sub_872AA0(v2, (int)v4, a2); return v4; } // 9F42A4: using guessed type void *NiTPointerList::`vftable'; // A23DD8: using guessed type void *NiTPointerList>::`vftable'; // A40E64: using guessed type void *MasterPropertyAccumulator::`vftable'; //----- (008E4EF0) -------------------------------------------------------- _DWORD *__thiscall sub_8E4EF0(_DWORD *this) { _DWORD *v1; // esi _DWORD *result; // eax v1 = this; sub_8D4FF0((int)this); v1[15] = 0; result = v1; v1[19] = 0; return result; } //----- (008E4F70) -------------------------------------------------------- void __thiscall sub_8E4F70(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // esi v1 = this; v2 = this[15]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[15] = 0; } v3 = v1[15]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_8D6220(v1); } //----- (008E5020) -------------------------------------------------------- void sub_8E5020() { ; } //----- (008E5030) -------------------------------------------------------- int __thiscall sub_8E5030(int *this, char *a2) { int v2; // ebx unsigned __int8 *v3; // ecx unsigned int v4; // edi unsigned int v5; // esi unsigned int v6; // eax int v7; // eax int v9; // [esp+Ch] [ebp-4h] v2 = *this; v9 = this[1]; if ( *this == v9 ) return 0; while ( 1 ) { v3 = (unsigned __int8 *)(*(_DWORD *)v2 + 4); v4 = strlen(a2); v5 = *(_DWORD *)(*(_DWORD *)v2 + 20); v6 = *(_DWORD *)(*(_DWORD *)v2 + 20); if ( v5 >= v4 ) v6 = v4; if ( *(_DWORD *)(*(_DWORD *)v2 + 24) >= 0x10u ) v3 = *(unsigned __int8 **)v3; v7 = sub_40C0B0(v3, (unsigned __int8 *)a2, v6); if ( !v7 && v5 >= v4 ) { LOBYTE(v7) = v5 != v4; if ( !v7 ) break; } v2 += 4; if ( v2 == v9 ) return 0; } return *(_DWORD *)v2; } //----- (008E50C0) -------------------------------------------------------- void **sub_8E50C0() { if ( !(dword_BA6918 & 1) ) { dword_BA6918 |= 1u; dword_BA6908 = 0; dword_BA690C = 0; dword_BA6910 = 0; atexit(sub_9A4B30); } return &dword_BA6908; } // BA690C: using guessed type int dword_BA690C; // BA6910: using guessed type int dword_BA6910; // BA6918: using guessed type int dword_BA6918; //----- (008E5100) -------------------------------------------------------- char __thiscall sub_8E5100(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx _DWORD *v4; // eax v2 = this; v3 = (_DWORD *)this[1]; v4 = (_DWORD *)*v2; if ( v3 == (_DWORD *)*v2 ) return 0; do { if ( *v4 == a2 ) break; ++v4; } while ( v4 != v3 ); if ( v3 == v4 ) return 0; memcpy_0(v4, v4 + 1, 4 * (v3 - (v4 + 1))); v2[1] -= 4; return 1; } //----- (008E5150) -------------------------------------------------------- char __thiscall sub_8E5150(const void **this, _DWORD *a2) { const void **v2; // edx char *v3; // eax char *v4; // edi _DWORD *v5; // esi char result; // al char *v7; // ebx unsigned __int8 *v8; // eax unsigned __int8 *v9; // edx unsigned int v10; // esi unsigned int v11; // ecx _BYTE *v12; // ebx char *v13; // eax unsigned int v14; // edi unsigned int v15; // eax char *v16; // eax _DWORD *v17; // eax char *v18; // eax unsigned int v19; // edi unsigned int v20; // eax char *v21; // eax _DWORD *v22; // eax unsigned int v23; // [esp+8h] [ebp-Ch] unsigned int v24; // [esp+Ch] [ebp-8h] const void **v25; // [esp+10h] [ebp-4h] v2 = this; v3 = (char *)*this; v4 = (char *)this[1]; v25 = this; if ( *this == v4 ) { v5 = a2; } else { do { v5 = a2; if ( *(_DWORD **)v3 == a2 ) break; v3 += 4; } while ( v3 != v4 ); } if ( v4 != v3 ) return 0; v7 = (char *)*this; if ( *this == v4 ) { LABEL_22: if ( &a2 >= (_DWORD **)v4 || (v12 = *v2, *v2 > &a2) ) { v18 = (char *)v2[2]; if ( v4 == v18 ) { v19 = (v4 - (_BYTE *)*v2) >> 2; if ( v19 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v20 = (v18 - (_BYTE *)*v2) >> 2; if ( v19 + 1 > v20 ) { if ( 0x3FFFFFFF - (v20 >> 1) >= v20 ) v21 = (char *)((v20 >> 1) + v20); else v21 = 0; if ( (unsigned int)v21 < v19 + 1 ) v21 = (char *)(v19 + 1); sub_74E360(v25, v21); v2 = v25; } } v22 = v2[1]; if ( v22 ) *v22 = v5; } else { v13 = (char *)v2[2]; if ( v4 == v13 ) { v14 = (v4 - v12) >> 2; if ( v14 > 0x3FFFFFFE ) std::_Xlength_error("vector too long"); v15 = (v13 - v12) >> 2; if ( v14 + 1 > v15 ) { if ( 0x3FFFFFFF - (v15 >> 1) >= v15 ) v16 = (char *)((v15 >> 1) + v15); else v16 = 0; if ( (unsigned int)v16 < v14 + 1 ) v16 = (char *)(v14 + 1); sub_74E360(v25, v16); v2 = v25; } } v17 = v2[1]; if ( v17 ) { *v17 = *((_DWORD *)*v2 + (((char *)&a2 - v12) >> 2)); v2[1] = (char *)v2[1] + 4; return 1; } } v2[1] = (char *)v2[1] + 4; result = 1; } else { v24 = v5[5]; v23 = v5[6]; while ( 1 ) { v8 = (unsigned __int8 *)(*(_DWORD *)v7 + 4); if ( v23 < 0x10 ) v9 = (unsigned __int8 *)(v5 + 1); else v9 = (unsigned __int8 *)v5[1]; v10 = *(_DWORD *)(*(_DWORD *)v7 + 20); v11 = v24; if ( v10 < v24 ) v11 = *(_DWORD *)(*(_DWORD *)v7 + 20); if ( *(_DWORD *)(*(_DWORD *)v7 + 24) >= 0x10u ) v8 = *(unsigned __int8 **)v8; if ( !sub_40C0B0(v8, v9, v11) && v10 >= v24 && v10 == v24 ) break; v5 = a2; v7 += 4; if ( v7 == v25[1] ) { v2 = v25; goto LABEL_22; } } result = 0; } return result; } //----- (008E5310) -------------------------------------------------------- char __thiscall sub_8E5310(CHAR ***this, char *a2) { CHAR ***v2; // esi CHAR **v4; // edi CHAR *v5; // ebx int v6; // eax int **v7; // esi LPCSTR *v8; // esi bool *v9; // ST14_4 const CHAR *v10; // eax unsigned int v11; // edi unsigned int v12; // eax unsigned __int8 *v13; // ecx int v14; // eax bool v15; // zf signed int v16; // eax void (__thiscall *v17)(LPCSTR *, CHAR *, signed int); // eax int *v18; // ST14_4 const CHAR *v19; // eax unsigned int *v20; // ST14_4 const CHAR *v21; // eax const char *v22; // eax LPCSTR v23; // edi int v24; // eax float *v25; // ST14_4 const CHAR *v26; // eax const char *v27; // eax LPCSTR v28; // edi float v29; // ST2C_4 int *v30; // ecx int *v31; // eax int *i; // eax CHAR ***v33; // [esp+14h] [ebp-260h] int **v34; // [esp+1Ch] [ebp-258h] CHAR **v35; // [esp+20h] [ebp-254h] int **v36; // [esp+28h] [ebp-24Ch] char *v37; // [esp+2Ch] [ebp-248h] int v38; // [esp+3Ch] [ebp-238h] unsigned int v39; // [esp+40h] [ebp-234h] char *v40; // [esp+48h] [ebp-22Ch] unsigned int v41; // [esp+58h] [ebp-21Ch] unsigned int v42; // [esp+5Ch] [ebp-218h] CHAR v43; // [esp+64h] [ebp-210h] char v44; // [esp+65h] [ebp-20Fh] CHAR ReturnedString; // [esp+164h] [ebp-110h] char v46; // [esp+165h] [ebp-10Fh] int v47; // [esp+270h] [ebp-4h] v2 = this; v33 = this; if ( !sub_8EB9D0(a2) ) return 0; v4 = *v2; v35 = *v2; if ( *v2 == v2[1] ) return 1; do { v5 = *v4; if ( !*v4 ) return 0; v6 = (*(int (__thiscall **)(CHAR *))(*(_DWORD *)v5 + 4))(*v4); v7 = **(int ****)(v6 + 36); v36 = **(int ****)(v6 + 36); v34 = *(int ***)((*(int (__thiscall **)(CHAR *))(*(_DWORD *)v5 + 4))(v5) + 36); if ( v7 == v34 ) goto LABEL_58; do { v8 = (LPCSTR *)v7[10]; v9 = off_AB65D0; (*((void (__thiscall **)(LPCSTR *))*v8 + 1))(v8); if ( (unsigned __int8)type_info::operator==(v9) ) { ReturnedString = 0; memset(&v46, 0, 0xFEu); v10 = v5 + 4; if ( *((_DWORD *)v5 + 6) >= 0x10u ) v10 = *(const CHAR **)v10; if ( sub_8EB960(a2, v10, v8[1], &ReturnedString, 0xFFu, "STRING_DEFAULT") == 1 ) { v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, &ReturnedString, strlen(&ReturnedString)); v47 = 0; v11 = v41; v12 = v41; if ( v41 >= 4 ) v12 = 4; v13 = (unsigned __int8 *)v40; if ( v42 < 0x10 ) v13 = (unsigned __int8 *)&v40; v14 = sub_40C0B0(v13, "TRUE", v12); v15 = v14 == 0; if ( !v14 ) { if ( v11 >= 4 ) v16 = v11 != 4; else v16 = -1; v15 = v16 == 0; } v17 = (void (__thiscall *)(LPCSTR *, CHAR *, signed int))*((_DWORD *)*v8 + 3); if ( v15 ) v17(v8, v5, 1); else v17(v8, v5, 0); v47 = -1; if ( v42 >= 0x10 ) operator delete(v40); } goto LABEL_47; } v18 = off_AC29E8; (*((void (__thiscall **)(LPCSTR *))*v8 + 1))(v8); if ( (unsigned __int8)type_info::operator==(v18) ) { ReturnedString = 0; memset(&v46, 0, 0xFEu); v19 = v5 + 4; if ( *((_DWORD *)v5 + 6) >= 0x10u ) v19 = *(const CHAR **)v19; if ( sub_8EB960(a2, v19, v8[1], &ReturnedString, 0xFFu, "STRING_DEFAULT") == 1 ) { v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, &ReturnedString, strlen(&ReturnedString)); v47 = 1; LABEL_34: v22 = v40; if ( v42 < 0x10 ) v22 = (const char *)&v40; v23 = *v8; v24 = atoi(v22); (*((void (__thiscall **)(LPCSTR *, CHAR *, int))v23 + 3))(v8, v5, v24); v47 = -1; if ( v42 >= 0x10 ) operator delete(v40); goto LABEL_47; } } else { v20 = off_AC2A08; (*((void (__thiscall **)(LPCSTR *))*v8 + 1))(v8); if ( (unsigned __int8)type_info::operator==(v20) ) { ReturnedString = 0; memset(&v46, 0, 0xFEu); v21 = v5 + 4; if ( *((_DWORD *)v5 + 6) >= 0x10u ) v21 = *(const CHAR **)v21; if ( sub_8EB960(a2, v21, v8[1], &ReturnedString, 0xFFu, "STRING_DEFAULT") == 1 ) { v42 = 15; v41 = 0; LOBYTE(v40) = 0; sub_4018E0(&v40, &ReturnedString, strlen(&ReturnedString)); v47 = 2; goto LABEL_34; } } else { v25 = off_AC29F8; (*((void (__thiscall **)(LPCSTR *))*v8 + 1))(v8); if ( !(unsigned __int8)type_info::operator==(v25) ) return 0; v43 = 0; memset(&v44, 0, 0xFEu); v26 = v5 + 4; if ( *((_DWORD *)v5 + 6) >= 0x10u ) v26 = *(const CHAR **)v26; if ( sub_8EB960(a2, v26, v8[1], &v43, 0xFFu, "STRING_DEFAULT") == 1 ) { v39 = 15; v38 = 0; LOBYTE(v37) = 0; sub_4018E0(&v37, &v43, strlen(&v43)); v27 = v37; v47 = 3; if ( v39 < 0x10 ) v27 = (const char *)&v37; v28 = *v8; v29 = atof(v27); (*((void (__thiscall **)(LPCSTR *, CHAR *, _DWORD))v28 + 3))(v8, v5, LODWORD(v29)); v47 = -1; if ( v39 >= 0x10 ) operator delete(v37); v39 = 15; v38 = 0; LOBYTE(v37) = 0; } } } LABEL_47: if ( !*((_BYTE *)v36 + 45) ) { v30 = v36[2]; if ( *((_BYTE *)v30 + 45) ) { for ( i = v36[1]; !*((_BYTE *)i + 45); i = (int *)i[1] ) { if ( v36 != (int **)i[2] ) break; v36 = (int **)i; } v36 = (int **)i; } else { v31 = (int *)*v30; if ( !*(_BYTE *)(*v30 + 45) ) { do { v30 = v31; v31 = (int *)*v31; } while ( !*((_BYTE *)v31 + 45) ); } v36 = (int **)v30; } } v7 = v36; } while ( v36 != v34 ); v4 = v35; LABEL_58: ++v4; v35 = v4; } while ( v4 != v33[1] ); return 1; } // 7D451A: using guessed type _DWORD __stdcall type_info::operator==(_DWORD); // AB65D0: using guessed type bool *off_AB65D0; // AC29E8: using guessed type int *off_AC29E8; // AC29F8: using guessed type float *off_AC29F8; // AC2A08: using guessed type unsigned int *off_AC2A08; //----- (008E5890) -------------------------------------------------------- void __thiscall sub_8E5890(void **this, void *a2) { void **v2; // esi _DWORD *v3; // edi unsigned int v4; // eax v2 = this; if ( a2 != this[1] ) { if ( a2 ) { v3 = operator new[](4 * (_DWORD)a2); v4 = 0; if ( v2[2] ) { do { v3[v4] = *((_DWORD *)*v2 + v4); ++v4; } while ( v4 < (unsigned int)v2[2] ); } } else { v3 = 0; } operator delete[](*v2); *v2 = v3; v2[1] = a2; } } //----- (008E5900) -------------------------------------------------------- int __thiscall sub_8E5900(int **this, int a2) { unsigned int v2; // esi unsigned int v3; // edx int *v4; // ecx int result; // eax v2 = (unsigned int)this[2]; v3 = 0; if ( !v2 ) return 0; v4 = *this; while ( 1 ) { result = *v4; if ( *(_DWORD *)(*v4 + 12) == a2 ) break; ++v3; ++v4; if ( v3 >= v2 ) return 0; } return result; } //----- (008E5930) -------------------------------------------------------- int __thiscall sub_8E5930(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi int v3; // esi int result; // eax v1 = this; v2 = 0; if ( this[2] ) { do { v3 = *(_DWORD *)(*v1 + 4 * v2); (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v3 + 16))(*(_DWORD *)(*v1 + 4 * v2)); result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); ++v2; } while ( v2 < v1[2] ); v1[2] = 0; } else { this[2] = 0; } return result; } //----- (008E5970) -------------------------------------------------------- void __thiscall sub_8E5970(_DWORD *this) { _DWORD *v1; // edi int v2; // esi int v3; // eax v1 = this; if ( !(dword_BA6924 & 1) ) { dword_BA6924 |= 1u; dword_BA6920 = dword_BA46D0; } v2 = 0; if ( this[2] ) { while ( !(*(unsigned __int8 (**)(void))(**(_DWORD **)(*v1 + 4 * v2) + 36))() ) { if ( (unsigned int)++v2 >= v1[2] ) return; } if ( *(_BYTE *)(dword_BA6920 + 128) ) sub_44EDF0((_DWORD *)dword_BA6920); v3 = (*(int (**)(void))(**(_DWORD **)(*v1 + 4 * v2) + 20))(); sub_44ED20(dword_BA6920, v3, 7); } } // BA46D0: using guessed type int dword_BA46D0; // BA6920: using guessed type int dword_BA6920; // BA6924: using guessed type int dword_BA6924; //----- (008E59E0) -------------------------------------------------------- int __thiscall sub_8E59E0(_DWORD *this) { _DWORD *v1; // esi int result; // eax int v3; // ecx signed int v4; // ebx unsigned int i; // edi int v6; // [esp+10h] [ebp-14h] int v7; // [esp+14h] [ebp-10h] v1 = this; result = dword_BA6930; if ( dword_BA6930 & 1 ) { v3 = dword_BA692C; } else { v3 = dword_BA46D0; result = dword_BA6930 | 1; dword_BA6930 |= 1u; dword_BA692C = dword_BA46D0; } if ( !(result & 2) ) { dword_BA6930 = result | 2; result = (*(int (**)(void))(*(_DWORD *)v3 + 104))(); dword_BA6928 = result; } if ( v1[2] ) { v7 = 0; v4 = 1; do { result = (*(int (**)(void))(**(_DWORD **)(v7 + *v1) + 36))(); if ( (_BYTE)result ) { if ( *(_BYTE *)(dword_BA692C + 128) ) sub_44EDF0((_DWORD *)dword_BA692C); v6 = dword_BA6928; for ( i = v4; i < v1[2]; ++i ) { if ( (*(unsigned __int8 (**)(void))(**(_DWORD **)(*v1 + 4 * i) + 36))() ) break; } if ( i < v1[2] ) v6 = (*(int (**)(void))(**(_DWORD **)(*v1 + 4 * i) + 20))(); result = (*(int (__stdcall **)(int))(**(_DWORD **)(v7 + *v1) + 28))(v6); } v7 += 4; ++v4; } while ( (unsigned int)(v4 - 1) < v1[2] ); } return result; } // BA46D0: using guessed type int dword_BA46D0; // BA6928: using guessed type int dword_BA6928; // BA692C: using guessed type int dword_BA692C; // BA6930: using guessed type int dword_BA6930; //----- (008E5B10) -------------------------------------------------------- void sub_8E5B10() { void **v0; // edi volatile LONG *v1; // esi if ( dword_BA691C ) { v0 = (void **)dword_BA691C; sub_8E5930(dword_BA691C); v1 = (volatile LONG *)v0[3]; if ( v1 && !InterlockedDecrement(v1 + 1) ) { if ( v1 ) (**(void (__thiscall ***)(void *, signed int))v1)((void *)v1, 1); } operator delete[](*v0); operator delete(v0); dword_BA691C = 0; } } //----- (008E5BB0) -------------------------------------------------------- char __thiscall sub_8E5BB0(void **this) { void **v1; // esi _DWORD *v2; // eax _DWORD *v3; // ebx int v4; // edi unsigned int v5; // eax void *v6; // eax int v7; // eax _DWORD *v8; // ST08_4 void **v9; // eax _DWORD *v10; // eax int v11; // edi unsigned int v12; // eax void *v13; // eax int v14; // eax _DWORD *v15; // ST08_4 void **v16; // eax _DWORD *v17; // eax int v18; // edi unsigned int v19; // eax void *v20; // eax int v21; // eax _DWORD *v22; // ST08_4 void **v23; // eax _DWORD *v24; // eax int v25; // edi unsigned int v26; // eax void *v27; // eax void **v28; // eax void *v30; // [esp+14h] [ebp-48h] int v31; // [esp+24h] [ebp-38h] unsigned int v32; // [esp+28h] [ebp-34h] void *v33; // [esp+30h] [ebp-2Ch] int v34; // [esp+40h] [ebp-1Ch] unsigned int v35; // [esp+44h] [ebp-18h] int v36; // [esp+58h] [ebp-4h] v1 = this; v2 = operator new(0x7Cu); v3 = 0; v36 = 0; if ( v2 ) v4 = sub_8EDB10(v2, "FxDOFEffect", 1); else v4 = 0; v36 = -1; v35 = 15; v34 = 0; LOBYTE(v33) = 0; sub_4018E0(&v33, "DOFEffect", 9u); v36 = 1; sub_4017F0((const void **)(v4 + 68), (const void **)&v33, 0, (void *)0xFFFFFFFF); v36 = -1; if ( v35 >= 0x10 ) operator delete(v33); v5 = (unsigned int)v1[1]; if ( v1[2] == (void *)v5 ) { if ( v5 <= 0 ) v6 = (void *)1; else v6 = (void *)(2 * v5); sub_8E5890(v1, v6); } *((_DWORD *)*v1 + (_DWORD)v1[2]) = v4; v1[2] = (char *)v1[2] + 1; sub_8EAC30((_BYTE *)v4, 0); if ( v4 ) v7 = v4 + 64; else v7 = 0; v8 = (_DWORD *)v7; v9 = sub_8E50C0(); sub_8E5150((const void **)v9, v8); v10 = operator new(0x78u); v36 = 2; if ( v10 ) v11 = sub_8ED610(v10, "FxAfterImageEffect", 1); else v11 = 0; v36 = -1; v35 = 15; v34 = 0; LOBYTE(v33) = 0; sub_4018E0(&v33, "AfterImageEffect", 0x10u); v36 = 3; sub_4017F0((const void **)(v11 + 68), (const void **)&v33, 0, (void *)0xFFFFFFFF); v36 = -1; if ( v35 >= 0x10 ) operator delete(v33); v12 = (unsigned int)v1[1]; if ( v1[2] == (void *)v12 ) { if ( v12 <= 0 ) v13 = (void *)1; else v13 = (void *)(2 * v12); sub_8E5890(v1, v13); } *((_DWORD *)*v1 + (_DWORD)v1[2]) = v11; v1[2] = (char *)v1[2] + 1; sub_8EAC30((_BYTE *)v11, 0); if ( v11 ) v14 = v11 + 64; else v14 = 0; v15 = (_DWORD *)v14; v16 = sub_8E50C0(); sub_8E5150((const void **)v16, v15); v17 = operator new(0x80u); v36 = 4; if ( v17 ) v18 = sub_8ECE10(v17, "FxGlowScreenEffect", 0); else v18 = 0; v36 = -1; v35 = 15; v34 = 0; LOBYTE(v33) = 0; sub_4018E0(&v33, "GlowScreenEffect", 0x10u); v36 = 5; sub_4017F0((const void **)(v18 + 68), (const void **)&v33, 0, (void *)0xFFFFFFFF); v36 = -1; if ( v35 >= 0x10 ) operator delete(v33); v19 = (unsigned int)v1[1]; if ( v1[2] == (void *)v19 ) { if ( v19 <= 0 ) v20 = (void *)1; else v20 = (void *)(2 * v19); sub_8E5890(v1, v20); } *((_DWORD *)*v1 + (_DWORD)v1[2]) = v18; v1[2] = (char *)v1[2] + 1; if ( v18 ) v21 = v18 + 64; else v21 = 0; v22 = (_DWORD *)v21; v23 = sub_8E50C0(); sub_8E5150((const void **)v23, v22); v24 = operator new(0x74u); v36 = 6; if ( v24 ) v25 = sub_8EB7D0(v24, "FxHazeScreenEffect", 0); else v25 = 0; v36 = -1; v32 = 15; v31 = 0; LOBYTE(v30) = 0; sub_4018E0(&v30, "HazeScreenEffect", 0x10u); v36 = 7; sub_4017F0((const void **)(v25 + 68), (const void **)&v30, 0, (void *)0xFFFFFFFF); v36 = -1; if ( v32 >= 0x10 ) operator delete(v30); v26 = (unsigned int)v1[1]; v32 = 15; v31 = 0; LOBYTE(v30) = 0; if ( v1[2] == (void *)v26 ) { if ( v26 <= 0 ) v27 = (void *)1; else v27 = (void *)(2 * v26); sub_8E5890(v1, v27); } *((_DWORD *)*v1 + (_DWORD)v1[2]) = v25; v1[2] = (char *)v1[2] + 1; sub_8EAC30((_BYTE *)v25, 0); if ( v25 ) v3 = (_DWORD *)(v25 + 64); v28 = sub_8E50C0(); return sub_8E5150((const void **)v28, v3); } //----- (008E5F20) -------------------------------------------------------- char __thiscall sub_8E5F20(void **this) { void **v1; // esi int *v2; // eax int v3; // eax int v4; // ST00_4 void **v5; // eax int *v6; // eax int v7; // eax int v8; // ST00_4 void **v9; // eax int *v10; // eax int v11; // eax int v12; // ST00_4 void **v13; // eax int *v14; // eax int v15; // eax int v16; // ST00_4 void **v17; // eax v1 = this; v2 = (int *)sub_8E50C0(); v3 = sub_8E5030(v2, "GlowScreenEffect"); if ( v3 ) { v4 = v3; v5 = sub_8E50C0(); sub_8E5100(v5, v4); } v6 = (int *)sub_8E50C0(); v7 = sub_8E5030(v6, "DOFEffect"); if ( v7 ) { v8 = v7; v9 = sub_8E50C0(); sub_8E5100(v9, v8); } v10 = (int *)sub_8E50C0(); v11 = sub_8E5030(v10, "AfterImageEffect"); if ( v11 ) { v12 = v11; v13 = sub_8E50C0(); sub_8E5100(v13, v12); } v14 = (int *)sub_8E50C0(); v15 = sub_8E5030(v14, "HazeScreenEffect"); if ( v15 ) { v16 = v15; v17 = sub_8E50C0(); sub_8E5100(v17, v16); } sub_8E5930(v1); return sub_8E5BB0(v1); } //----- (008E5FC0) -------------------------------------------------------- void *sub_8E5FC0() { void *result; // eax _DWORD *v1; // eax void *v2; // esi result = dword_BA691C; if ( !dword_BA691C ) { v1 = operator new(0x10u); v2 = v1; if ( v1 ) { *v1 = 0; v1[1] = 0; v1[2] = 0; v1[3] = 0; sub_8E5BB0((void **)v1); } else { v2 = 0; } result = v2; dword_BA691C = v2; } return result; } //----- (008E6040) -------------------------------------------------------- char *__thiscall sub_8E6040(size_t *this, char *a2, char *a3, int a4) { size_t *v4; // esi unsigned int v5; // edi bool v6; // cf size_t *v7; // eax char *result; // eax char v9; // bl size_t v10; // eax unsigned int v11; // edi unsigned int v12; // ecx size_t *v13; // eax int v14; // [esp+0h] [ebp-24h] size_t *v15; // [esp+10h] [ebp-14h] int *v16; // [esp+14h] [ebp-10h] int v17; // [esp+20h] [ebp-4h] v16 = &v14; v4 = this; v15 = this; v5 = this[4]; if ( v5 <= a3 - a2 && this[5] != a3 - a2 && (unsigned __int8)sub_401740(this, (void *)(a3 - a2), 1) ) { v6 = v4[5] < 0x10; v4[4] = v5; if ( v6 ) v7 = v4; else v7 = (size_t *)*v4; *((_BYTE *)v7 + v5) = 0; } result = a2; v17 = 0; while ( result != a3 ) { v9 = *result; v10 = v4[4]; if ( -1 - v10 <= 1 ) std::_Xlength_error("string too long"); v11 = v10 + 1; if ( v10 + 1 > 0xFFFFFFFE ) std::_Xlength_error("string too long"); v12 = v4[5]; if ( v12 < v11 ) { sub_4015D0((const void **)v4, (void *)(v10 + 1), v4[4]); if ( !v11 ) goto LABEL_27; goto LABEL_16; } if ( v10 == -1 ) { v4[4] = 0; if ( v12 < 0x10 ) *(_BYTE *)v4 = 0; else *(_BYTE *)*v4 = 0; result = a2++ + 1; } else { LABEL_16: if ( v4[5] < 0x10 ) v13 = v4; else v13 = (size_t *)*v4; *((_BYTE *)v13 + v4[4]) = v9; v4[4] = v11; if ( v4[5] < 0x10 ) { *((_BYTE *)v4 + v11) = 0; LABEL_27: result = a2++ + 1; } else { *(_BYTE *)(*v4 + v11) = 0; result = a2++ + 1; } } } return result; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008E61B0) -------------------------------------------------------- int __thiscall sub_8E61B0(_DWORD *this, void *a2) { _DWORD *v2; // edi int *v3; // eax int v4; // esi unsigned int v5; // edi int v6; // eax unsigned int v7; // ebx unsigned int v8; // edx unsigned __int8 *v9; // ecx int v10; // eax bool v11; // sf int *v12; // eax int v13; // esi int result; // eax int *v15; // [esp+10h] [ebp-38h] _DWORD *v16; // [esp+14h] [ebp-34h] int v17; // [esp+18h] [ebp-30h] void *v18; // [esp+1Ch] [ebp-2Ch] unsigned int v19; // [esp+2Ch] [ebp-1Ch] unsigned int v20; // [esp+30h] [ebp-18h] int v21; // [esp+44h] [ebp-4h] v2 = this; v16 = this; v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, a2, strlen((const char *)a2)); v21 = 0; v3 = sub_4F1D20(v2 + 8, (int)&v18); v4 = v2[9]; v15 = v3; if ( v3 == (int *)v4 ) goto LABEL_13; v5 = v3[7]; v6 = (int)(v3 + 3); if ( *(_DWORD *)(v6 + 20) >= 0x10u ) v6 = *(_DWORD *)v6; v7 = v19; v8 = v19; if ( v19 >= v5 ) v8 = v5; v9 = (unsigned __int8 *)v18; if ( v20 < 0x10 ) v9 = (unsigned __int8 *)&v18; v10 = sub_40C0B0(v9, (unsigned __int8 *)v6, v8); v11 = v10 < 0; if ( !v10 ) { if ( v7 < v5 ) goto LABEL_13; LOBYTE(v10) = v7 != v5; v11 = v10 < 0; } if ( !v11 ) { v12 = (int *)&v15; goto LABEL_14; } LABEL_13: v17 = v4; v12 = &v17; LABEL_14: v13 = *v12; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v16[9] == v13 ) result = 0; else result = *(_DWORD *)(v13 + 40); return result; } //----- (008E62D0) -------------------------------------------------------- void *__cdecl sub_8E62D0(void *a1, void *a2, int a3) { *((_DWORD *)a1 + 4) = 0; *((_DWORD *)a1 + 5) = 15; *(_BYTE *)a1 = 0; sub_406450(a1, a2); *((_DWORD *)a1 + 7) = *(_DWORD *)a3; return a1; } //----- (008E6310) -------------------------------------------------------- char *__thiscall sub_8E6310(_DWORD *this, char *a2) { _DWORD *v2; // esi char *v3; // edi char *v4; // ebx int v6; // [esp+0h] [ebp-38h] void **v7; // [esp+10h] [ebp-28h] void *v8; // [esp+1Ch] [ebp-1Ch] char *v9; // [esp+20h] [ebp-18h] void *v10; // [esp+24h] [ebp-14h] int *v11; // [esp+28h] [ebp-10h] int v12; // [esp+34h] [ebp-4h] v11 = &v6; v2 = this; v3 = (char *)operator new(0x30u); v10 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v7, (const char *const *)&a2); v7 = &std::bad_alloc::`vftable'; _CxxThrowException(&v7, &_TI2_AVbad_alloc_std__); } *(_DWORD *)v3 = v2[1]; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[1]; *((_WORD *)v3 + 22) = 0; v12 = 0; v9 = v3 + 12; v8 = v3 + 12; LOBYTE(v12) = 1; if ( v3 != (char *)-12 ) { v4 = a2; *((_DWORD *)v3 + 8) = 15; *((_DWORD *)v3 + 7) = 0; v3[12] = 0; sub_406450(v3 + 12, v4); *((_DWORD *)v3 + 10) = *((_DWORD *)v4 + 7); } return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008E63F0) -------------------------------------------------------- void __thiscall sub_8E63F0(_DWORD *this, int a2) { void *v2; // ST08_4 _DWORD *v3; // edi void *v4; // ecx const char *v5; // eax char *v6; // eax char *v7; // eax char v8; // [esp+10h] [ebp-60h] int v9; // [esp+1Ch] [ebp-54h] char *v10; // [esp+20h] [ebp-50h] void *v11; // [esp+24h] [ebp-4Ch] int v12; // [esp+34h] [ebp-3Ch] unsigned int v13; // [esp+38h] [ebp-38h] void *v14; // [esp+44h] [ebp-2Ch] int v15; // [esp+54h] [ebp-1Ch] unsigned int v16; // [esp+58h] [ebp-18h] int v17; // [esp+6Ch] [ebp-4h] v2 = *(void **)(a2 + 4); v3 = this; v10 = (char *)a2; if ( sub_8E61B0(this, v2) ) { v10 = "Property overlap Data"; std::exception::exception((std::exception *)&v8, (const char *const *)&v10); _CxxThrowException(&v8, &_TI1_AVexception_std__); } v4 = *(void **)(a2 + 4); v5 = *(const char **)(a2 + 4); v16 = 15; v15 = 0; LOBYTE(v14) = 0; sub_4018E0(&v14, v4, strlen(v5)); v17 = 0; v6 = (char *)sub_8E62D0(&v11, &v14, (int)&v10); LOBYTE(v17) = 1; v7 = sub_8E6310(v3 + 8, v6); sub_7478C0(v3 + 8, (int)&v9, v7, 0); if ( v13 >= 0x10 ) operator delete(v11); v13 = 15; v12 = 0; LOBYTE(v11) = 0; if ( v16 >= 0x10 ) operator delete(v14); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // AA1ED8: using guessed type int _TI1_AVexception_std__; //----- (008E6500) -------------------------------------------------------- _DWORD *__thiscall sub_8E6500(void *this, int a2, void *a3, int a4, int a5) { _DWORD *v5; // edi _DWORD *v6; // eax int v7; // eax char *v8; // ecx char *v9; // ecx char *v10; // edx int v11; // eax char *v12; // esi int *v13; // edi void *v14; // ST08_4 void *v15; // ecx const char *v16; // eax char *v17; // eax _DWORD *v18; // edi char *v19; // eax int **v20; // ecx int *j; // eax int *i; // eax void **v24; // [esp+10h] [ebp-80h] int v25; // [esp+14h] [ebp-7Ch] _DWORD *v26; // [esp+1Ch] [ebp-74h] int v27; // [esp+20h] [ebp-70h] char *v28; // [esp+24h] [ebp-6Ch] void *v29; // [esp+28h] [ebp-68h] int v30; // [esp+38h] [ebp-58h] unsigned int v31; // [esp+3Ch] [ebp-54h] void *v32; // [esp+48h] [ebp-48h] int v33; // [esp+58h] [ebp-38h] unsigned int v34; // [esp+5Ch] [ebp-34h] void *v35; // [esp+64h] [ebp-2Ch] int v36; // [esp+74h] [ebp-1Ch] unsigned int v37; // [esp+78h] [ebp-18h] int v38; // [esp+8Ch] [ebp-4h] v5 = this; *((_DWORD *)this + 5) = 15; *((_DWORD *)this + 4) = 0; v26 = this; v27 = a5; *(_BYTE *)this = 0; *((_DWORD *)this + 7) = a4; v38 = 0; *((_DWORD *)this + 10) = 0; v6 = operator new(0x30u); if ( !v6 ) { v28 = 0; std::exception::exception((std::exception *)&v24, (const char *const *)&v28); v24 = &std::bad_alloc::`vftable'; _CxxThrowException(&v24, &_TI2_AVbad_alloc_std__); } v5[9] = v6; *v6 = v6; *(_DWORD *)(v5[9] + 4) = v5[9]; *(_DWORD *)(v5[9] + 8) = v5[9]; *(_BYTE *)(v5[9] + 44) = 1; *(_BYTE *)(v5[9] + 45) = 1; LOBYTE(v38) = 1; v34 = 15; v33 = 0; LOBYTE(v32) = 0; sub_4018E0(&v32, a3, strlen((const char *)a3)); LOBYTE(v38) = 2; v7 = sub_417B90((unsigned __int8 *)&v32, (unsigned __int8 *)word_9AC794, 0x100000000ui64); if ( v7 == -1 ) { sub_4018E0(v5, a3, strlen((const char *)a3)); } else { v8 = (char *)v32; if ( v34 < 0x10 ) v8 = (char *)&v32; v9 = &v8[v33]; v10 = (char *)v32; if ( v34 < 0x10 ) v10 = (char *)&v32; v37 = 15; v36 = 0; LOBYTE(v35) = 0; sub_8E6040((size_t *)&v35, &v10[v7 + 1], v9, (int)v28); LOBYTE(v38) = 3; sub_406450(v5, &v35); LOBYTE(v38) = 2; if ( v37 >= 0x10 ) operator delete(v35); } if ( v27 ) ((void (*)(void))v27)(); v11 = v5[7]; if ( v11 ) { v12 = **(char ***)(v11 + 36); v28 = *(char **)(v11 + 36); if ( v12 != v28 ) { do { v13 = (int *)*((_DWORD *)v12 + 10); v14 = (void *)v13[1]; v27 = *((_DWORD *)v12 + 10); if ( !sub_8E61B0(v26, v14) ) { v15 = (void *)v13[1]; v16 = (const char *)v13[1]; v37 = 15; v36 = 0; LOBYTE(v35) = 0; sub_4018E0(&v35, v15, strlen(v16)); LOBYTE(v38) = 4; v17 = (char *)sub_8E62D0(&v29, &v35, (int)&v27); v18 = v26; LOBYTE(v38) = 5; v19 = sub_8E6310(v26 + 8, v17); sub_7478C0(v18 + 8, (int)&v25, v19, 0); if ( v31 >= 0x10 ) operator delete(v29); v31 = 15; v30 = 0; LOBYTE(v29) = 0; LOBYTE(v38) = 2; if ( v37 >= 0x10 ) operator delete(v35); } if ( !v12[45] ) { v20 = (int **)*((_DWORD *)v12 + 2); if ( *((_BYTE *)v20 + 45) ) { for ( i = (int *)*((_DWORD *)v12 + 1); !*((_BYTE *)i + 45); i = (int *)i[1] ) { if ( v12 != (char *)i[2] ) break; v12 = (char *)i; } v12 = (char *)i; } else { for ( j = *v20; !*((_BYTE *)j + 45); j = (int *)*j ) v20 = (int **)j; v12 = (char *)v20; } } } while ( v12 != v28 ); v5 = v26; } } if ( v34 >= 0x10 ) operator delete(v32); return v5; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (008E67D0) -------------------------------------------------------- void *__thiscall sub_8E67D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CNullClass::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A41194: using guessed type void *CNullClass::`vftable'; //----- (008E6800) -------------------------------------------------------- char __thiscall sub_8E6800(_BYTE *this) { return this[40]; } //----- (008E6810) -------------------------------------------------------- LONG __thiscall sub_8E6810(int this, char a2) { LONG result; // eax _DWORD *v3; // ecx result = *(_DWORD *)(this + 36); if ( result ) { *(_BYTE *)(this + 40) = a2; *(_BYTE *)(result + 176) = a2; v3 = *(_DWORD **)(this + 32); if ( v3 ) result = sub_85C6F0(v3); } return result; } //----- (008E6840) -------------------------------------------------------- int sub_8E6840() { return dword_AAE17C; } // AAE17C: using guessed type int dword_AAE17C; //----- (008E6850) -------------------------------------------------------- bool *sub_8E6850() { return off_AB65D0; } // AB65D0: using guessed type bool *off_AB65D0; //----- (008E6860) -------------------------------------------------------- void **sub_8E6860() { return &dword_ACDE00; } //----- (008E6870) -------------------------------------------------------- void *__thiscall sub_8E6870(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4119C: using guessed type void *CProperty::`vftable'; //----- (008E68A0) -------------------------------------------------------- int __thiscall sub_8E68A0(int (__thiscall **this)(_DWORD), int a2) { return this[3](a2); } //----- (008E68B0) -------------------------------------------------------- int (__thiscall *__thiscall sub_8E68B0(_DWORD *this, int a2, int a3))(int, int) { int (__thiscall *result)(int, int); // eax result = (int (__thiscall *)(int, int))this[4]; if ( result ) result = (int (__thiscall *)(int, int))result(a2, a3); return result; } //----- (008E68D0) -------------------------------------------------------- LONG __thiscall sub_8E68D0(_DWORD *this, LONG a2, int a3) { _DWORD *v3; // esi int v4; // edi LONG v5; // eax int v6; // edi int v7; // eax int v8; // edx _DWORD *v9; // eax LONG result; // eax int (__thiscall ***v11)(_DWORD, signed int); // esi v3 = this; v4 = this[8]; v5 = a2; if ( v4 != a2 ) { if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = a2; } v3[8] = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); } v6 = v3[9]; v7 = a3; if ( v6 != a3 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = a3; } v3[9] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } *(_BYTE *)(v3[9] + 176) = 0; v8 = v3[9]; *((_BYTE *)v3 + 40) = 0; v9 = *(_DWORD **)(v8 + 196); if ( v9 ) { if ( v9[2] == a2 ) { *((_BYTE *)v3 + 40) = 1; *(_BYTE *)(v8 + 176) = 1; result = a2; if ( a2 ) { result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( a2 ) result = (**(int (__thiscall ***)(LONG, signed int))a2)(a2, 1); } } v11 = (int (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); goto LABEL_39; } return result; } while ( 1 ) { v9 = (_DWORD *)*v9; if ( !v9 ) break; if ( v9[2] == a2 ) { *((_BYTE *)v3 + 40) = 1; *(_BYTE *)(v8 + 176) = 1; result = a2; if ( a2 ) { result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( a2 ) result = (**(int (__thiscall ***)(LONG, signed int))a2)(a2, 1); } } v11 = (int (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); goto LABEL_39; } return result; } } } (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v3[8] + 116))(v8, 0); sub_861480((_DWORD *)v3[9], v3[8]); sub_85C6F0((_DWORD *)v3[8]); *((_BYTE *)v3 + 40) = 0; *(_BYTE *)(v3[9] + 176) = 0; result = a2; if ( a2 ) { result = InterlockedDecrement((volatile LONG *)(a2 + 4)); if ( !result ) { if ( a2 ) result = (**(int (__thiscall ***)(LONG, signed int))a2)(a2, 1); } } v11 = (int (__thiscall ***)(_DWORD, signed int))a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); LABEL_39: if ( !result ) { if ( v11 ) result = (**v11)(v11, 1); } } return result; } //----- (008E6AE0) -------------------------------------------------------- void sub_8E6AE0() { _DWORD *v0; // eax v0 = operator new(0x14u); if ( v0 ) { v0[1] = "Ground_DL_Enable"; v0[2] = &dword_ACDDD0; *v0 = &CProperty::`vftable'; v0[3] = sub_8E6800; v0[4] = sub_8E6810; sub_8E63F0(&dword_ACDDD0, (int)v0); } else { sub_8E63F0(&dword_ACDDD0, 0); } } // A4119C: using guessed type void *CProperty::`vftable'; //----- (008E6B70) -------------------------------------------------------- void __thiscall sub_8E6B70(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi v1 = this; *this = &CWorldConfig::`vftable'; v2 = this[8]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[8] = 0; } v3 = v1[9]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[9] = 0; } v4 = v1[9]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[8]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *v1 = &CBaseObject::`vftable'; if ( v1[6] >= 0x10u ) operator delete((void *)v1[1]); v1[6] = 15; v1[5] = 0; *((_BYTE *)v1 + 4) = 0; *v1 = &CNullClass::`vftable'; } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; // A411D8: using guessed type void *CWorldConfig::`vftable'; //----- (008E6C80) -------------------------------------------------------- void **sub_8E6C80() { return &dword_ACDDD0; } //----- (008E6C90) -------------------------------------------------------- _DWORD *__thiscall sub_8E6C90(_DWORD *this) { _DWORD *result; // eax result = this; this[6] = 15; this[5] = 0; *((_BYTE *)this + 4) = 0; *this = &CWorldConfig::`vftable'; this[8] = 0; this[9] = 0; *((_BYTE *)this + 40) = 0; return result; } // A411D8: using guessed type void *CWorldConfig::`vftable'; //----- (008E6CC0) -------------------------------------------------------- void *__thiscall sub_8E6CC0(void *this, char a2) { void *v2; // esi v2 = this; sub_8E6B70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008E6CF0) -------------------------------------------------------- BOOL __cdecl sub_8E6CF0(int a1, int a2) { return *(_DWORD *)(*(_DWORD *)a1 + 68) < *(_DWORD *)(*(_DWORD *)a2 + 68); } //----- (008E6D10) -------------------------------------------------------- char __stdcall sub_8E6D10(float *a1, float *a2, float *a3) { float *v3; // edi char result; // al float v5; // ST20_4 float v6; // ST24_4 float v7; // ST28_4 float v8; // [esp+4h] [ebp-24h] float v9; // [esp+8h] [ebp-20h] float v10; // [esp+Ch] [ebp-1Ch] float v11; // [esp+10h] [ebp-18h] double v12; // [esp+14h] [ebp-14h] float v13; // [esp+14h] [ebp-14h] float v14; // [esp+18h] [ebp-10h] double v15; // [esp+20h] [ebp-8h] float v16; // [esp+34h] [ebp+Ch] float v17; // [esp+34h] [ebp+Ch] float v18; // [esp+34h] [ebp+Ch] float v19; // [esp+34h] [ebp+Ch] float v20; // [esp+34h] [ebp+Ch] float v21; // [esp+34h] [ebp+Ch] float v22; // [esp+34h] [ebp+Ch] float v23; // [esp+34h] [ebp+Ch] float v24; // [esp+34h] [ebp+Ch] float v25; // [esp+34h] [ebp+Ch] float v26; // [esp+34h] [ebp+Ch] float v27; // [esp+34h] [ebp+Ch] float v28; // [esp+34h] [ebp+Ch] float v29; // [esp+34h] [ebp+Ch] float v30; // [esp+34h] [ebp+Ch] float v31; // [esp+38h] [ebp+10h] v3 = a2; v15 = *a2 * *a2; v16 = a2[2] * a2[2] + v15 + a2[1] * a2[1]; v17 = sqrt(v16); if ( v17 < 0.003 ) return 0; v12 = *a3 * *a3; v18 = a3[2] * a3[2] + v12 + a3[1] * a3[1]; v19 = sqrt(v18); if ( v19 < 0.003 ) goto LABEL_10; v20 = v3[2] * v3[2] + v3[1] * v3[1] + v15; v21 = sqrt(v20); v22 = 1.0 / v21; v5 = *v3 * v22; v6 = v22 * v3[1]; v7 = v22 * v3[2]; v23 = a3[2] * a3[2] + a3[1] * a3[1] + v12; v24 = sqrt(v23); v25 = 1.0 / v24; v11 = *a3 * v25; v13 = v25 * a3[1]; v14 = v25 * a3[2]; v31 = v13 * v6 + v11 * v5 + v14 * v7; v26 = a1[1] * a1[1] + *a1 * *a1 + a1[2] * a1[2]; v27 = sqrt(v26); v28 = 1.0 / v27; v8 = *a1 * v28; v9 = v28 * a1[1]; v10 = v28 * a1[2]; v29 = v9 * v6 + v8 * v5 + v10 * v7; if ( v31 > (double)v29 || (v30 = v10 * v14 + v8 * v11 + v9 * v13, v30 < (double)v31) ) LABEL_10: result = 0; else result = 1; return result; } //----- (008E6F10) -------------------------------------------------------- bool __thiscall sub_8E6F10(int this, float *a2) { float *v2; // edi int *v3; // esi float v4; // ecx int v5; // edx float v6; // eax float v7; // ecx int v8; // edx float v9; // eax float v10; // ecx int v11; // edx float v13; // [esp+8h] [ebp-4Ch] float v14; // [esp+Ch] [ebp-48h] float v15; // [esp+10h] [ebp-44h] float v16; // [esp+14h] [ebp-40h] float v17; // [esp+18h] [ebp-3Ch] float v18; // [esp+1Ch] [ebp-38h] float v19; // [esp+20h] [ebp-34h] float v20; // [esp+24h] [ebp-30h] float v21; // [esp+28h] [ebp-2Ch] float v22; // [esp+2Ch] [ebp-28h] float v23; // [esp+30h] [ebp-24h] float v24; // [esp+34h] [ebp-20h] float v25; // [esp+38h] [ebp-1Ch] float v26; // [esp+3Ch] [ebp-18h] float v27; // [esp+40h] [ebp-14h] float v28; // [esp+44h] [ebp-10h] float v29; // [esp+48h] [ebp-Ch] float v30; // [esp+4Ch] [ebp-8h] float v31; // [esp+50h] [ebp-4h] float v32; // [esp+5Ch] [ebp+8h] v2 = a2; v3 = (int *)this; if ( *a2 < (double)*(float *)(this + 36) ) return 0; if ( a2[1] < (double)*(float *)(this + 40) ) return 0; if ( *(float *)(this + 44) < (double)*a2 ) return 0; if ( *(float *)(this + 48) < (double)a2[1] ) return 0; v4 = *(float *)(this + 4); v5 = v3[2]; v22 = *(float *)v3; v6 = *((float *)v3 + 3); v23 = v4; v7 = *((float *)v3 + 4); v24 = 0.0; v8 = v3[5]; v28 = v6; v9 = *((float *)v3 + 6); v29 = v7; v10 = *((float *)v3 + 7); v30 = 0.0; v11 = v3[8]; v25 = v9; v26 = v10; v27 = 0.0; if ( (unsigned __int8)sub_4A37E0(a2, &v22) ) return 0; if ( (unsigned __int8)sub_4A37E0(a2, &v28) ) return 0; if ( (unsigned __int8)sub_4A37E0(a2, &v25) ) return 0; v19 = v25 - v22; v20 = v26 - v23; v32 = 0.0 - 0.0; v21 = v32; v16 = v28 - v22; v17 = v29 - v23; v18 = v32; v13 = *v2 - v22; v14 = v2[1] - v23; v31 = v2[2] - 0.0; v15 = v31; if ( !sub_8E6D10(&v13, &v16, &v19) ) return 0; v13 = v25 - v28; v14 = v26 - v29; v15 = 0.0 - 0.0; v16 = v22 - v28; v17 = v23 - v29; v18 = 0.0 - 0.0; v19 = *v2 - v28; v20 = v2[1] - v29; v21 = v31; if ( !sub_8E6D10(&v19, &v16, &v13) ) return 0; v13 = v28 - v25; v14 = v29 - v26; v15 = 0.0 - 0.0; v16 = v22 - v25; v17 = v23 - v26; v18 = 0.0 - 0.0; v19 = *v2 - v25; v20 = v2[1] - v26; v21 = v31; return sub_8E6D10(&v19, &v16, &v13) != 0; } //----- (008E7130) -------------------------------------------------------- void __thiscall sub_8E7130(double *this) { this[9] = (*((float *)this + 5) - *((float *)this + 8)) * *((float *)this + 1) + (*((float *)this + 8) - *((float *)this + 2)) * *((float *)this + 4) + (*((float *)this + 2) - *((float *)this + 5)) * *((float *)this + 7); this[10] = (*((float *)this + 6) - *(float *)this) * *((float *)this + 5) + (*((float *)this + 3) - *((float *)this + 6)) * *((float *)this + 2) + (*(float *)this - *((float *)this + 3)) * *((float *)this + 8); this[11] = (*((float *)this + 7) - *((float *)this + 1)) * *((float *)this + 3) + (*((float *)this + 4) - *((float *)this + 7)) * *(float *)this + (*((float *)this + 1) - *((float *)this + 4)) * *((float *)this + 6); this[12] = -((*((float *)this + 2) * *((float *)this + 7) - *((float *)this + 1) * *((float *)this + 8)) * *((float *)this + 3) + (*((float *)this + 4) * *((float *)this + 8) - *((float *)this + 7) * *((float *)this + 5)) * *(float *)this + (*((float *)this + 1) * *((float *)this + 5) - *((float *)this + 2) * *((float *)this + 4)) * *((float *)this + 6)); } //----- (008E71D0) -------------------------------------------------------- int __cdecl sub_8E71D0(int a1, int a2, int a3, _DWORD *a4, unsigned __int8 (__cdecl *a5)(int, _DWORD *)) { int v5; // edi int v6; // esi bool v7; // zf int result; // eax v5 = a2; v6 = (a2 - 1) / 2; if ( a3 >= a2 ) { result = a1; *(_DWORD *)(a1 + 4 * a2) = *a4; } else { while ( 1 ) { v7 = a5(a1 + 4 * v6, a4) == 0; result = a1; if ( v7 ) break; *(_DWORD *)(a1 + 4 * v5) = *(_DWORD *)(a1 + 4 * v6); v5 = v6; v6 = (v6 - 1) / 2; if ( a3 >= v5 ) { result = a1; break; } } *(_DWORD *)(result + 4 * v5) = *a4; } return result; } //----- (008E7240) -------------------------------------------------------- char __thiscall sub_8E7240(float *this, float *a2, float *a3) { float *v3; // edx float v4; // ST2C_4 float v5; // ST28_4 float v6; // ST2C_4 double v7; // st6 float v8; // ST28_4 double v9; // st6 float v10; // ST2C_4 double v11; // st6 float v12; // ST28_4 double v13; // st6 float v14; // ST2C_4 double v15; // st6 float v16; // ST28_4 float v17; // ST2C_4 double v18; // st6 float v19; // ST28_4 double v20; // st6 int v21; // ST2C_4 int v22; // eax double v23; // st6 int v24; // ST28_4 int v25; // ST2C_4 int v26; // eax double v27; // st6 int v28; // ecx int v29; // ST28_4 double v30; // st6 int v31; // ST2C_4 int v32; // ecx double v33; // st6 int v34; // eax int v35; // ST28_4 double v36; // st6 int v37; // ST2C_4 int v38; // eax double v39; // st6 int v40; // ecx float v41; // ST28_4 double v42; // st6 float v43; // ST2C_4 unsigned int v44; // esi float *v45; // edi float *v46; // ecx double v47; // st7 float *v48; // edx double v49; // st6 float *v50; // esi float *v51; // eax float *v52; // eax float *v53; // eax float *v54; // ecx unsigned int v56; // [esp+14h] [ebp-9Ch] float *v57; // [esp+18h] [ebp-98h] unsigned int v58; // [esp+1Ch] [ebp-94h] float v59; // [esp+20h] [ebp-90h] float v60; // [esp+20h] [ebp-90h] float v61; // [esp+24h] [ebp-8Ch] float v62; // [esp+24h] [ebp-8Ch] float v63; // [esp+34h] [ebp-7Ch] int v64; // [esp+38h] [ebp-78h] float v65; // [esp+3Ch] [ebp-74h] int v66; // [esp+40h] [ebp-70h] int v67; // [esp+44h] [ebp-6Ch] float v68; // [esp+48h] [ebp-68h] int v69; // [esp+4Ch] [ebp-64h] int v70; // [esp+50h] [ebp-60h] float v71; // [esp+54h] [ebp-5Ch] int v72; // [esp+58h] [ebp-58h] int v73; // [esp+5Ch] [ebp-54h] float v74; // [esp+60h] [ebp-50h] float v75; // [esp+64h] [ebp-4Ch] float v76; // [esp+68h] [ebp-48h] float v77; // [esp+6Ch] [ebp-44h] float v78; // [esp+70h] [ebp-40h] float v79; // [esp+74h] [ebp-3Ch] float v80; // [esp+78h] [ebp-38h] float v81; // [esp+7Ch] [ebp-34h] float v82; // [esp+80h] [ebp-30h] float v83; // [esp+84h] [ebp-2Ch] float v84; // [esp+88h] [ebp-28h] float v85; // [esp+8Ch] [ebp-24h] float v86; // [esp+90h] [ebp-20h] float v87; // [esp+94h] [ebp-1Ch] float v88; // [esp+98h] [ebp-18h] float v89; // [esp+9Ch] [ebp-14h] float v90; // [esp+A0h] [ebp-10h] float v91; // [esp+A4h] [ebp-Ch] float v92; // [esp+A8h] [ebp-8h] v3 = this; v4 = a3[1]; v78 = *a2; v5 = *a2; v79 = v4; v6 = a2[1]; v80 = 0.0; v81 = v5; v7 = *a3; v82 = v6; v8 = v7; v9 = a2[1]; v83 = 0.0; v10 = v9; v84 = v8; v11 = *a3; v85 = v10; v12 = v11; v13 = a3[1]; v86 = 0.0; v14 = v13; v87 = v12; v15 = *a2; v88 = v14; v16 = v15; v17 = a3[1]; v18 = this[9]; v90 = v16; v19 = v18; v20 = this[12]; v91 = v17; *(float *)&v21 = v20; v92 = 0.0; v22 = v21; v23 = this[9]; v63 = v19; *(float *)&v24 = v23; v25 = *((int *)this + 10); v57 = this; v89 = 0.0; v64 = v22; v65 = 0.0; v26 = v24; v27 = this[11]; v28 = v25; *(float *)&v29 = v27; v30 = v57[10]; v66 = v26; *(float *)&v31 = v30; v67 = v28; v32 = v29; v33 = v57[11]; v68 = 0.0; v34 = v31; *(float *)&v35 = v33; v36 = v57[12]; v69 = v32; *(float *)&v37 = v36; v70 = v34; v38 = v35; v39 = v57[9]; v71 = 0.0; v40 = v37; v41 = v39; v42 = v57[12]; v72 = v38; v43 = v42; v73 = v40; v74 = 0.0; v75 = v41; v44 = 0; v76 = v43; v77 = 0.0; v58 = 0; while ( 2 ) { v56 = 0; v45 = (float *)((char *)&v78 + v44); v46 = &v63; do { if ( v45[3] == *v45 ) { v47 = *(float *)((char *)&v82 + v44); v48 = (float *)((char *)&v82 + v44); v49 = *(float *)((char *)&v79 + v44); v50 = (float *)((char *)&v79 + v44); v51 = v48; if ( v49 <= v47 ) v51 = v50; v59 = *v51; if ( *v48 <= (double)*v50 ) v48 = v50; v61 = *v48; if ( v46[3] == *v46 ) { if ( v46[1] >= (double)v59 && v46[1] <= (double)v61 ) return 1; if ( v46[4] < (double)v59 ) { LABEL_34: v44 = v58; v3 = v57; goto LABEL_35; } if ( v46[4] <= (double)v61 ) return 1; v44 = v58; v3 = v57; } else { if ( v46[1] < (double)v59 || v61 < (double)v46[1] || *v45 < (double)*v46 ) goto LABEL_34; if ( v46[3] >= (double)*v45 ) return 1; v44 = v58; v3 = v57; } } else { v52 = v45 + 3; if ( *v45 <= (double)v45[3] ) v52 = v45; v62 = *v52; v53 = v45 + 3; if ( v45[3] <= (double)*v45 ) v53 = v45; v60 = *v53; if ( v46[4] == v46[1] ) { if ( *v46 >= (double)v62 && *v46 <= (double)v60 || v46[3] >= (double)v62 && v46[3] <= (double)v60 ) return 1; } else if ( *v46 > (double)v62 && v60 > (double)*v46 && *(float *)((char *)&v79 + v44) >= (double)v46[1] && v46[4] >= (double)*(float *)((char *)&v79 + v44) ) { return 1; } } LABEL_35: v46 += 3; ++v56; } while ( v56 < 4 ); v44 += 12; v58 = v44; if ( v44 < 0x30 ) continue; break; } if ( *a2 < (double)v3[9] || a2[1] < (double)v3[10] ) { v54 = a3; } else { v54 = a3; if ( v3[11] >= (double)*a3 && v3[12] >= (double)a3[1] ) return 1; } if ( v3[9] >= (double)*a2 && v3[10] >= (double)a2[1] && *v54 >= (double)v3[11] && v54[1] >= (double)v3[12] ) return 1; return 0; } //----- (008E7750) -------------------------------------------------------- char __thiscall sub_8E7750(int *this, float *a2, float *a3) { int v3; // edx int v4; // eax int v5; // eax int v6; // edx int v7; // eax int v8; // edx int v9; // eax int v10; // edx float *v11; // ebx int v12; // eax float *v13; // edi float *v14; // esi signed int v15; // eax int v16; // eax signed int v17; // eax int v18; // esi int v19; // eax int *v21; // [esp+Ch] [ebp-38h] int *v22; // [esp+10h] [ebp-34h] int *v23; // [esp+14h] [ebp-30h] int *v24; // [esp+18h] [ebp-2Ch] int v25; // [esp+1Ch] [ebp-28h] int v26; // [esp+20h] [ebp-24h] float v27; // [esp+24h] [ebp-20h] int v28; // [esp+28h] [ebp-1Ch] int v29; // [esp+2Ch] [ebp-18h] float v30; // [esp+30h] [ebp-14h] int v31; // [esp+34h] [ebp-10h] int v32; // [esp+38h] [ebp-Ch] float v33; // [esp+3Ch] [ebp-8h] int i; // [esp+40h] [ebp-4h] int v35; // [esp+4Ch] [ebp+8h] v3 = this[1]; v31 = *this; v4 = this[2]; v33 = 0.0; v5 = this[4]; v32 = v3; v6 = this[3]; v29 = v5; v7 = this[6]; v28 = v6; v8 = this[5]; v25 = v7; v9 = this[8]; v30 = 0.0; v10 = this[7]; v27 = 0.0; v11 = a2; v26 = v10; v23 = &v25; v12 = 0; v21 = &v31; v22 = &v28; v24 = &v31; for ( i = 0; ; v12 = i ) { v13 = (float *)(&v22)[v12]; v14 = (float *)(&v21)[v12]; v15 = (signed int)(v11[1] * *v13 - *v11 * v13[1] + v13[1] * *v14 - v14[1] * *v13 + v14[1] * *v11 - v11[1] * *v14); if ( v15 ) v35 = 2 * (v15 < 0) - 1; else v35 = 0; v16 = (signed int)(v13[1] * *v14 - v14[1] * *v13 + *v13 * a3[1] - v13[1] * *a3 + v14[1] * *a3 - *v14 * a3[1]); if ( v16 ) v16 = 2 * (v16 < 0) - 1; if ( v35 * v16 < 0 ) { v17 = (signed int)(v14[1] * *a3 - *v14 * a3[1] + *v11 * a3[1] - v11[1] * *a3 + *v14 * v11[1] - *v11 * v14[1]); v18 = v17 ? 2 * (v17 < 0) - 1 : 0; v19 = (signed int)(v13[1] * *a3 - *v13 * a3[1] + *v11 * a3[1] - v11[1] * *a3 + *v13 * v11[1] - v13[1] * *v11); if ( v19 ) v19 = 2 * (v19 < 0) - 1; if ( v18 * v19 < 0 ) break; } if ( (unsigned int)++i >= 3 ) return 0; } return 1; } //----- (008E7910) -------------------------------------------------------- int __cdecl sub_8E7910(int a1, int a2, int a3, int *a4, unsigned __int8 (__cdecl *a5)(int, int)) { int v5; // eax int v6; // ebx int v7; // esi bool v8; // zf int v9; // esi int result; // eax v5 = a3; v6 = a2; v7 = 2 * a2 + 2; v8 = v7 == a3; if ( v7 < a3 ) { do { if ( a5(a1 + 4 * v7, a1 + 4 * v7 - 4) ) --v7; *(_DWORD *)(a1 + 4 * v6) = *(_DWORD *)(a1 + 4 * v7); v6 = v7; v7 = 2 * v7 + 2; } while ( v7 < a3 ); v5 = a3; v8 = v7 == a3; } if ( v8 ) { *(_DWORD *)(a1 + 4 * v6) = *(_DWORD *)(a1 + 4 * v5 - 4); v6 = v5 - 1; } v9 = (v6 - 1) / 2; if ( a2 >= v6 ) { result = (int)a4; *(_DWORD *)(a1 + 4 * v6) = *a4; } else { while ( a5(a1 + 4 * v9, (int)a4) ) { *(_DWORD *)(a1 + 4 * v6) = *(_DWORD *)(a1 + 4 * v9); v6 = v9; result = (v9 - 1) / 2; v9 = (v9 - 1) / 2; if ( a2 >= v6 ) { *(_DWORD *)(a1 + 4 * v6) = *a4; return result; } } result = *a4; *(_DWORD *)(a1 + 4 * v6) = *a4; } return result; } //----- (008E79D0) -------------------------------------------------------- char __thiscall sub_8E79D0(float *this, float *a2, float *a3) { float v3; // ST18_4 int *v4; // ebx float v5; // ST14_4 float v6; // ST18_4 double v7; // st6 float v8; // ST14_4 double v9; // st6 float v10; // ST18_4 double v11; // st6 float v12; // ST14_4 double v13; // st6 float v14; // ST18_4 double v15; // st6 float v16; // ST14_4 double v17; // st6 float v18; // ST18_4 unsigned int v19; // edx float *v20; // ecx signed int v21; // edi float *v22; // esi float v24; // [esp+18h] [ebp-40h] float v25; // [esp+1Ch] [ebp-3Ch] float v26; // [esp+20h] [ebp-38h] float v27; // [esp+24h] [ebp-34h] float v28; // [esp+28h] [ebp-30h] float v29; // [esp+2Ch] [ebp-2Ch] float v30; // [esp+30h] [ebp-28h] float v31; // [esp+34h] [ebp-24h] float v32; // [esp+38h] [ebp-20h] float v33; // [esp+3Ch] [ebp-1Ch] float v34; // [esp+40h] [ebp-18h] float v35; // [esp+44h] [ebp-14h] float v36; // [esp+48h] [ebp-10h] float v37; // [esp+4Ch] [ebp-Ch] float v38; // [esp+50h] [ebp-8h] v3 = a3[1]; v4 = (int *)this; v24 = *a2; v5 = *a2; v25 = v3; v6 = a2[1]; v26 = 0.0; v27 = v5; v7 = *a3; v28 = v6; v8 = v7; v9 = a2[1]; v29 = 0.0; v10 = v9; v30 = v8; v11 = *a3; v31 = v10; v12 = v11; v13 = a3[1]; v32 = 0.0; v14 = v13; v34 = v14; v15 = *a2; v33 = v12; v16 = v15; v17 = a3[1]; v35 = 0.0; v18 = v17; v37 = v18; v36 = v16; v38 = 0.0; if ( !sub_8E7240(this, a2, a3) ) return 0; v19 = 0; v20 = (float *)v4; while ( *v20 < (double)*a2 || v20[1] < (double)a2[1] || *a3 < (double)*v20 || a3[1] < (double)v20[1] ) { ++v19; v20 += 3; if ( v19 >= 3 ) { v21 = 0; v22 = &v24; while ( !sub_8E6F10((int)v4, v22) && !sub_8E7750(v4, v22, v22 + 3) ) { ++v21; v22 += 3; if ( v21 >= 4 ) return 0; } return 1; } } return 1; } //----- (008E7B40) -------------------------------------------------------- char __thiscall sub_8E7B40(float *this, int a2) { int v2; // esi float *v3; // ebx int v4; // edx int v5; // ecx float v6; // eax int v7; // ecx float v8; // edx int v9; // ecx float v10; // edx signed int v11; // edi int v12; // eax int *v14; // [esp+Ch] [ebp-38h] float *v15; // [esp+10h] [ebp-34h] float *v16; // [esp+14h] [ebp-30h] int *v17; // [esp+18h] [ebp-2Ch] float v18; // [esp+1Ch] [ebp-28h] float v19; // [esp+20h] [ebp-24h] float v20; // [esp+24h] [ebp-20h] float v21; // [esp+28h] [ebp-1Ch] float v22; // [esp+2Ch] [ebp-18h] float v23; // [esp+30h] [ebp-14h] int v24; // [esp+34h] [ebp-10h] int v25; // [esp+38h] [ebp-Ch] float v26; // [esp+3Ch] [ebp-8h] int *v27; // [esp+40h] [ebp-4h] int v28; // [esp+4Ch] [ebp+8h] v2 = a2; v21 = *(float *)(a2 + 36); v3 = this; v22 = *(float *)(a2 + 40); v23 = 0.0; v18 = *(float *)(a2 + 44); v27 = (int *)this; v19 = *(float *)(a2 + 48); v20 = 0.0; if ( !sub_8E7240(this, &v21, &v18) ) return 0; v4 = *(_DWORD *)a2; v5 = *(_DWORD *)(a2 + 8); v25 = *(_DWORD *)(a2 + 4); v22 = *(float *)(a2 + 16); v6 = *(float *)(a2 + 28); v26 = 0.0; v7 = *(_DWORD *)(a2 + 20); v24 = v4; v8 = *(float *)(a2 + 12); v19 = v6; v23 = 0.0; v9 = *(_DWORD *)(a2 + 32); v21 = v8; v10 = *(float *)(a2 + 24); v15 = &v21; v20 = 0.0; v18 = v10; v11 = 0; v12 = a2 - (_DWORD)v3; v14 = &v24; v16 = &v18; v17 = &v24; v28 = a2 - (_DWORD)v3; while ( !sub_8E6F10((int)v27, (float *)((char *)v3 + v12)) && !sub_8E6F10(v2, v3) && !sub_8E7750(v27, (float *)(&v14)[v11], (&v15)[v11]) ) { ++v11; v3 += 3; if ( v11 >= 3 ) return 0; v12 = v28; } return 1; } //----- (008E7C40) -------------------------------------------------------- int __cdecl sub_8E7C40(int a1, int a2, unsigned __int8 (__cdecl *a3)(int, _DWORD *)) { int v3; // edi int v4; // ecx int result; // eax int v6; // ebx int i; // esi int v8; // eax int v9; // esi bool v10; // zf int v11; // eax int v12; // edx int v13; // [esp+8h] [ebp-8h] int v14; // [esp+Ch] [ebp-4h] int v15; // [esp+18h] [ebp+8h] int v16; // [esp+1Ch] [ebp+Ch] v3 = a1; v4 = (a2 - a1) >> 2; result = v4 - (v4 >> 31); v6 = v4 / 2; v15 = (a2 - a1) >> 2; if ( v6 > 0 ) { for ( i = 2 * v6 + 2; ; i = v14 ) { v8 = *(_DWORD *)(v3 + 4 * v6-- - 4); v9 = i - 2; v14 = v9; v13 = v8; v16 = v6; v10 = v9 == v4; if ( v9 < v4 ) { do { if ( a3(v3 + 4 * v9, (_DWORD *)(v3 + 4 * v9 - 4)) ) --v9; v11 = v16; v12 = *(_DWORD *)(v3 + 4 * v9); v16 = v9; v9 = 2 * v9 + 2; *(_DWORD *)(v3 + 4 * v11) = v12; } while ( v9 < v15 ); v4 = v15; v10 = v9 == v15; } if ( v10 ) { *(_DWORD *)(v3 + 4 * v16) = *(_DWORD *)(v3 + 4 * v4 - 4); v16 = v4 - 1; } result = sub_8E71D0(v3, v16, v6, &v13, a3); if ( v6 <= 0 ) break; v4 = v15; } } return result; } //----- (008E7CF0) -------------------------------------------------------- void *__cdecl sub_8E7CF0(void *a1, int a2, int a3) { void *result; // eax _DWORD *v4; // esi int *v5; // edi int *v6; // ebx int *v7; // esi int *v8; // [esp+4h] [ebp-8h] int v9; // [esp+8h] [ebp-4h] result = (void *)a2; v4 = a1; if ( a1 != (void *)a2 ) { v5 = (int *)((char *)a1 + 4); if ( (char *)a1 + 4 != (void *)a2 ) { v8 = (int *)a1; do { v6 = v5; v9 = *v5; if ( ((unsigned __int8 (__cdecl *)(int *, _DWORD *))a3)(&v9, v4) ) { result = memcpy_0(&v5[-(v5 - v4) + 1], v4, 4 * (v5 - v4)); *v4 = v9; } else { v7 = v8; for ( result = (void *)((int (__cdecl *)(int *, int *))a3)(&v9, v8); (_BYTE)result; result = (void *)((int (__cdecl *)(int *, int *))a3)(&v9, v7) ) { *v6 = *v7; v6 = v7; --v7; } v4 = a1; *v6 = v9; } ++v8; ++v5; } while ( v5 != (int *)a2 ); } } return result; } //----- (008E7DA0) -------------------------------------------------------- int __cdecl sub_8E7DA0(int *a1, int *a2, int *a3, unsigned __int8 (__cdecl *a4)(int *, int *)) { int *v4; // esi int v5; // eax int v6; // eax int v7; // ecx int *v8; // edi int v9; // ST00_4 int v10; // eax int v11; // eax int v12; // eax int *v13; // edi int v14; // eax int v15; // ecx int v16; // eax int *v17; // ebx int *v18; // edi int v19; // eax int v20; // eax int v21; // eax int v22; // eax int v23; // eax int result; // eax int v25; // eax int v26; // eax int *v27; // [esp-4h] [ebp-1Ch] int *v28; // [esp+Ch] [ebp-Ch] int v29; // [esp+10h] [ebp-8h] int *v30; // [esp+14h] [ebp-4h] int v31; // [esp+20h] [ebp+8h] v4 = a1; v5 = a3 - a1; v27 = a1; if ( v5 <= 40 ) { if ( a4(a2, a1) ) { v25 = *a2; *a2 = *a1; *a1 = v25; } if ( a4(a3, a2) ) { v26 = *a3; *a3 = *a2; *a2 = v26; } result = a4(a2, a1); if ( (_BYTE)result ) { result = *a2; *a2 = *a1; *a1 = result; } } else { v6 = (v5 + 1) / 8; v7 = 2 * v6; v6 *= 4; v8 = (int *)((char *)a1 + v6); v29 = v7 * 4; v9 = (int)a1 + v6; v30 = &a1[v7]; v31 = v6; v28 = (int *)((char *)v4 + v6); if ( a4((int *)v9, v27) ) { v10 = *v8; *v8 = *v4; *v4 = v10; } if ( a4(v30, v8) ) { v11 = *v30; *v30 = *v8; *v8 = v11; } if ( a4(v8, v4) ) { v12 = *v8; *v8 = *v4; *v4 = v12; } v13 = (int *)((char *)a2 - v31); if ( a4(a2, (int *)((char *)a2 - v31)) ) { v14 = *a2; *a2 = *v13; *v13 = v14; } if ( a4((int *)((char *)a2 + v31), a2) ) { v15 = *(int *)((char *)a2 + v31); *(int *)((char *)a2 + v31) = *a2; *a2 = v15; } if ( a4(a2, v13) ) { v16 = *a2; *a2 = *v13; *v13 = v16; } v17 = (int *)((char *)a3 - v29); v18 = (int *)((char *)a3 - v31); if ( a4((int *)((char *)a3 - v31), (int *)((char *)a3 - v29)) ) { v19 = *v18; *v18 = *v17; *v17 = v19; } if ( a4(a3, v18) ) { v20 = *a3; *a3 = *v18; *v18 = v20; } if ( a4(v18, v17) ) { v21 = *v18; *v18 = *v17; *v17 = v21; } if ( a4(a2, v28) ) { v22 = *a2; *a2 = *v28; *v28 = v22; } if ( a4(v18, a2) ) { v23 = *v18; *v18 = *a2; *a2 = v23; } result = a4(a2, v28); if ( (_BYTE)result ) { result = *a2; *a2 = *v28; *v28 = result; } } return result; } //----- (008E7F50) -------------------------------------------------------- void __thiscall sub_8E7F50(void *this) { *((_DWORD *)this + 6) = 0; *((_DWORD *)this + 7) = 0; *((_DWORD *)this + 8) = 0; } //----- (008E7F60) -------------------------------------------------------- void __thiscall sub_8E7F60(void *this) { _DWORD *v1; // esi v1 = this; if ( *((_DWORD *)this + 6) ) operator delete(*((void **)this + 6)); v1[6] = 0; v1[7] = 0; v1[8] = 0; } //----- (008E7F90) -------------------------------------------------------- int **__cdecl sub_8E7F90(int **a1, int *a2, int *a3, unsigned __int8 (__cdecl *a4)(int *, int *)) { int v4; // kr00_4 int *v5; // esi int *v6; // ebx unsigned int v7; // edi int *v8; // eax int *v9; // edi int v10; // ecx bool v11; // zf int *v12; // ebx int v13; // eax int v14; // ecx int v15; // ST1C_4 int *v16; // edx int v17; // ecx int v18; // edx int v19; // ecx int v20; // ecx int **result; // eax int *v22; // [esp+14h] [ebp-8h] int v23; // [esp+18h] [ebp-4h] v4 = a3 - a2; v5 = &a2[v4 / 2]; sub_8E7DA0(a2, &a2[v4 / 2], a3 - 1, a4); v6 = v5 + 1; v23 = (int)(v5 + 1); if ( a2 < v5 ) { do { v7 = (unsigned int)(v5 - 1); if ( a4(v5 - 1, v5) ) break; if ( a4(v5, v5 - 1) ) break; --v5; } while ( (unsigned int)a2 < v7 ); } if ( v6 < a3 ) { do { if ( a4(v6, v5) ) break; if ( a4(v5, v6) ) break; ++v6; } while ( v6 < a3 ); v23 = (int)v6; } v8 = v5; v9 = v6; v22 = v5; while ( 1 ) { while ( 1 ) { if ( v9 < a3 ) { do { if ( !a4(v5, v9) ) { if ( a4(v9, v5) ) break; v10 = *v6; *v6 = *v9; ++v6; *v9 = v10; } ++v9; } while ( v9 < a3 ); v8 = v22; v23 = (int)v6; } v11 = v8 == a2; if ( v8 > a2 ) { v12 = v8 - 1; do { if ( !a4(v12, v5) ) { if ( a4(v5, v12) ) break; v13 = *(v5 - 1); --v5; *v5 = *v12; *v12 = v13; } --v12; --v22; } while ( a2 < v22 ); v8 = v22; v6 = (int *)v23; v11 = v22 == a2; } if ( v11 ) break; --v8; v22 = v8; if ( v9 == a3 ) { --v5; if ( v8 != v5 ) { v17 = *v8; *v8 = *v5; *v5 = v17; } v18 = *(v6 - 1); v19 = *v5; --v6; *v5 = v18; v23 = (int)v6; *v6 = v19; } else { v20 = *v9; *v9 = *v8; *v8 = v20; ++v9; } } if ( v9 == a3 ) break; if ( v6 != v9 ) { v14 = *v5; *v5 = *v6; *v6 = v14; } v15 = *v5; *v5 = *v9; v16 = v9; ++v6; ++v5; v23 = (int)v6; ++v9; *v16 = v15; } result = a1; *a1 = v5; a1[1] = v6; return result; } //----- (008E8130) -------------------------------------------------------- int __cdecl sub_8E8130(_DWORD *a1, int a2, unsigned __int8 (__cdecl *a3)(int, int)) { int result; // eax unsigned __int8 (__cdecl *v4)(int, int); // ebx int v5; // edx int v6; // edi result = a2 - (_DWORD)a1; if ( (signed int)((a2 - (_DWORD)a1) & 0xFFFFFFFC) > 4 ) { v4 = a3; do { v5 = *(_DWORD *)((char *)a1 + result - 4); v6 = result - 4; *(_DWORD *)((char *)a1 + result - 4) = *a1; a2 = v5; sub_8E7910((int)a1, 0, (result - 4) >> 2, &a2, v4); result = v6; } while ( (signed int)(v6 & 0xFFFFFFFC) > 4 ); } return result; } //----- (008E8190) -------------------------------------------------------- _DWORD *__thiscall sub_8E8190(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &HeightMapMaker::`vftable'; this[1] = 0; this[2] = 0; this[3] = 0; `eh vector constructor iterator'(this + 14, 0x28u, 100, sub_8E7F50, sub_8E7F60); return v1; } // A411F8: using guessed type void *HeightMapMaker::`vftable'; //----- (008E8200) -------------------------------------------------------- unsigned int __thiscall sub_8E8200(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx unsigned int result; // eax unsigned int v4; // ebx int v5; // edi const void *v6; // ecx void *v7; // edi const void **v8; // esi void *v9; // edi bool v10; // zf signed int v11; // [esp+Ch] [ebp-Ch] const void **v12; // [esp+10h] [ebp-8h] signed int v13; // [esp+14h] [ebp-4h] v1 = this; v2 = this[1]; result = (v1[2] - v2) >> 2; v4 = 0; if ( result ) { if ( result <= 0 ) std::_Xout_of_range("invalid vector subscript"); do { v5 = *(_DWORD *)(v2 + 4 * v4); if ( v5 ) { if ( *(_DWORD *)(v5 + 52) ) operator delete(*(void **)(v5 + 52)); *(_DWORD *)(v5 + 52) = 0; *(_DWORD *)(v5 + 56) = 0; *(_DWORD *)(v5 + 60) = 0; operator delete((void *)v5); } v2 = v1[1]; ++v4; result = (v1[2] - v2) >> 2; } while ( result > v4 ); } v6 = (const void *)v1[2]; v7 = (void *)v1[1]; if ( v7 != v6 ) { result = (unsigned int)memcpy_0(v7, v6, 0); v1[2] = v7; } v8 = (const void **)(v1 + 21); v12 = v8; v11 = 10; do { v13 = 10; do { v9 = (void *)*(v8 - 1); if ( v9 != *v8 ) { result = (unsigned int)memcpy_0(v9, *v8, 0); *v8 = v9; } v8 += 100; --v13; } while ( v13 ); v8 = v12 + 10; v10 = v11-- == 1; v12 += 10; } while ( !v10 ); return result; } //----- (008E8300) -------------------------------------------------------- int __thiscall sub_8E8300(_DWORD *this, _BYTE *a2, unsigned int a3, int a4, unsigned __int8 a5) { int v5; // esi int v6; // ebx int v7; // ecx signed int v8; // edi unsigned int v9; // ebx int v10; // ecx _DWORD *v11; // eax bool v12; // zf int v13; // eax unsigned __int8 v14; // cf int v15; // eax int v16; // ecx _DWORD *v17; // eax int v18; // kr00_4 _DWORD *v19; // ecx int v20; // eax int v21; // ecx int v23; // [esp+0h] [ebp-30h] int v24; // [esp+10h] [ebp-20h] char v25; // [esp+14h] [ebp-1Ch] _DWORD *v26; // [esp+18h] [ebp-18h] int v27; // [esp+1Ch] [ebp-14h] int *v28; // [esp+20h] [ebp-10h] int v29; // [esp+2Ch] [ebp-4h] v28 = &v23; v5 = (int)this; v26 = this; v6 = 0; this[2] = 0; this[3] = 0; v7 = *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4) + 56); v27 = 0; v24 = v5; if ( v7 ) (*(void (**)(void))(*(_DWORD *)v7 + 4))(); v29 = 0; v25 = sub_425280((char *)v5, 1); v29 = 1; if ( v25 ) { v8 = a4; if ( a4 >= 0 ) { v9 = a3; if ( a4 > 0 || a3 ) { v10 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v5 + 4) + v5 + 56); v11 = *(_DWORD **)(v10 + 32); v12 = *v11 == 0; LOBYTE(v29) = 2; if ( v12 || **(_DWORD **)(v10 + 48) <= 0 ) v13 = (*(int (**)(void))(*(_DWORD *)v10 + 24))(); else v13 = *(unsigned __int8 *)*v11; while ( 1 ) { if ( v13 == -1 ) { v27 |= 1u; goto LABEL_22; } if ( v13 == a5 ) break; v18 = v9 - 1; v8 = (__PAIR__((unsigned int)v8, v9--) - 1) >> 32; if ( v8 <= 0 && (v8 < 0 || !v18) ) { v27 |= 2u; goto LABEL_22; } v14 = __CFADD__((*(_DWORD *)(v5 + 8))++, 1); *(_DWORD *)(v5 + 12) += v14; *a2++ = v13; v13 = sub_424810(*(_DWORD ***)(*(_DWORD *)(*(_DWORD *)v5 + 4) + v5 + 56)); } v14 = __CFADD__((*(_DWORD *)(v5 + 8))++, 1); v15 = *(_DWORD *)v5; *(_DWORD *)(v5 + 12) += v14; v16 = *(_DWORD *)(*(_DWORD *)(v15 + 4) + v5 + 56); if ( **(_DWORD **)(v16 + 32) && (v17 = *(_DWORD **)(v16 + 48), *v17 > 0) ) { --*v17; ++**(_DWORD **)(v16 + 32); } else { (*(void (**)(void))(*(_DWORD *)v16 + 28))(); } LABEL_22: v29 = 1; } v6 = v27; } } *a2 = 0; if ( !*(_QWORD *)(v5 + 8) ) v6 |= 2u; v19 = (_DWORD *)(v5 + *(_DWORD *)(*(_DWORD *)v5 + 4)); if ( v6 ) { v20 = v19[3] | v6; if ( !v19[14] ) v20 |= 4u; sub_405C10(v19, v20, 0); } v21 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v24 + 4) + v24 + 56); v29 = -1; if ( v21 ) (*(void (**)(void))(*(_DWORD *)v21 + 8))(); return v5; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008E84F0) -------------------------------------------------------- _BYTE *__thiscall sub_8E84F0(_BYTE *this, int a2, int a3, int a4) { _BYTE *v4; // esi int v5; // ecx int v6; // eax _BYTE *v7; // eax int v8; // eax signed int v9; // edx int (__stdcall *v10)(int, int, int); // edx int v11; // edx _DWORD *v12; // ecx int v13; // eax int v14; // ecx int v16; // [esp+0h] [ebp-30h] _BYTE *v17; // [esp+10h] [ebp-20h] bool v18; // [esp+14h] [ebp-1Ch] _BYTE *v19; // [esp+18h] [ebp-18h] int v20; // [esp+1Ch] [ebp-14h] int *v21; // [esp+20h] [ebp-10h] int v22; // [esp+2Ch] [ebp-4h] v21 = &v16; v4 = this; v19 = this; v5 = *(_DWORD *)&this[*(_DWORD *)(*(_DWORD *)this + 4) + 56]; v20 = 0; v17 = v19; if ( v5 ) (*(void (**)(void))(*(_DWORD *)v5 + 4))(); v6 = *(_DWORD *)(*(_DWORD *)v4 + 4); v22 = 0; if ( !*(_DWORD *)&v4[v6 + 12] ) { v7 = *(_BYTE **)&v4[v6 + 60]; if ( v7 ) sub_406070(v7); } v8 = *(_DWORD *)(*(_DWORD *)v4 + 4); v18 = *(_DWORD *)&v4[v8 + 12] == 0; v22 = 1; if ( v18 ) { v10 = *(int (__stdcall **)(int, int, int))(**(_DWORD **)&v4[v8 + 56] + 36); LOBYTE(v22) = 2; if ( v10(a2, a3, a4) != a3 || v11 != a4 ) v20 = 4; v22 = 1; v9 = v20; } else { v9 = 4; } v12 = &v4[*(_DWORD *)(*(_DWORD *)v4 + 4)]; if ( v9 ) { v13 = v9 | v12[3]; if ( !v12[14] ) v13 |= 4u; sub_405C10(v12, v13, 0); } v22 = 4; if ( !__uncaught_exception() ) sub_4060C0(v4); v14 = *(_DWORD *)&v4[*(_DWORD *)(*(_DWORD *)v4 + 4) + 56]; v22 = -1; if ( v14 ) (*(void (**)(void))(*(_DWORD *)v14 + 8))(); return v4; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); //----- (008E8660) -------------------------------------------------------- void __thiscall sub_8E8660(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &HeightMapMaker::`vftable'; sub_8E8200(this); `eh vector destructor iterator'(v1 + 14, 0x28u, 100, sub_8E7F60); if ( v1[1] ) operator delete((void *)v1[1]); v1[1] = 0; v1[2] = 0; v1[3] = 0; } // A411F8: using guessed type void *HeightMapMaker::`vftable'; //----- (008E86E0) -------------------------------------------------------- signed int __thiscall sub_8E86E0(void *this, int a2, _DWORD *a3) { int v3; // edi void *v4; // esi int v5; // eax v3 = a2; v4 = this; if ( !sub_8CF140(a2, "#CD") ) return 1; v5 = sub_402BA0((int)dword_BA455C, v3); if ( v5 ) (*(void (__thiscall **)(void *, int, _DWORD *))(*(_DWORD *)v4 + 4))(v4, v5, a3); else sub_5B3CF0(a3, &a2); return -1; } //----- (008E8750) -------------------------------------------------------- unsigned int __thiscall sub_8E8750(void *this, int a2, int a3) { int v3; // ecx unsigned int result; // eax unsigned int v5; // ebx int v6; // edi int i; // esi int v8; // eax char v9; // al int v10; // eax unsigned int v11; // eax _BYTE *v12; // edx int v13; // ecx int v14; // esi int v15; // eax unsigned int v16; // eax unsigned int v17; // ecx char *v18; // ecx _DWORD *v19; // eax int v20; // ecx int v21; // eax unsigned int v22; // eax unsigned int v23; // ecx char *v24; // ecx _DWORD *v25; // eax void *v26; // [esp+4h] [ebp-8h] int v27; // [esp+8h] [ebp-4h] v26 = this; v3 = a2; result = *(_DWORD *)(a2 + 188); v5 = 0; v27 = 0; if ( result ) { v6 = a3; if ( result > 0 ) goto LABEL_4; for ( i = 0; ; i = *(_DWORD *)(*(_DWORD *)(v3 + 180) + 4 * v5) ) { a3 = i; if ( !i ) goto LABEL_39; v8 = (*(int (__thiscall **)(int))(*(_DWORD *)i + 4))(i); if ( v8 ) { while ( (char *)v8 != dword_BA455C ) { v8 = *(_DWORD *)(v8 + 4); if ( !v8 ) goto LABEL_9; } v9 = 1; } else { LABEL_9: v9 = 0; } v10 = v9 != 0 ? i : 0; if ( v10 ) { (*(void (__stdcall **)(int, int))(*(_DWORD *)v26 + 4))(v10, v6); } else { LABEL_39: v11 = *(_DWORD *)(v6 + 4); if ( (unsigned int)&a3 >= v11 || (v12 = *(_BYTE **)v6, *(_DWORD *)v6 > (unsigned int)&a3) ) { v20 = *(_DWORD *)(v6 + 8); if ( v11 == v20 ) { v21 = (signed int)(v11 - *(_DWORD *)v6) >> 2; JUMPOUT(v21, 1073741822, std::vector>::_Xlen); v22 = v21 + 1; v23 = (v20 - *(_DWORD *)v6) >> 2; if ( v22 > v23 ) { if ( 0x3FFFFFFF - (v23 >> 1) >= v23 ) v24 = (char *)((v23 >> 1) + v23); else v24 = 0; if ( (unsigned int)v24 < v22 ) v24 = (char *)v22; sub_74E360((const void **)v6, v24); v5 = v27; } } v25 = *(_DWORD **)(v6 + 4); if ( v25 ) *v25 = i; } else { v13 = *(_DWORD *)(v6 + 8); v14 = ((char *)&a3 - v12) >> 2; if ( v11 == v13 ) { v15 = (signed int)(v11 - (_DWORD)v12) >> 2; JUMPOUT(v15, 1073741822, std::vector>::_Xlen); v16 = v15 + 1; v17 = (v13 - (signed int)v12) >> 2; if ( v16 > v17 ) { if ( 0x3FFFFFFF - (v17 >> 1) >= v17 ) v18 = (char *)((v17 >> 1) + v17); else v18 = 0; if ( (unsigned int)v18 < v16 ) v18 = (char *)v16; sub_74E360((const void **)v6, v18); v5 = v27; } } v19 = *(_DWORD **)(v6 + 4); if ( v19 ) *v19 = *(_DWORD *)(*(_DWORD *)v6 + 4 * v14); } *(_DWORD *)(v6 + 4) += 4; } v3 = a2; result = *(_DWORD *)(a2 + 188); v27 = ++v5; if ( result <= v5 ) break; LABEL_4: ; } } return result; } // 8E88AE: using guessed type void __noreturn std::vector>::_Xlen(); //----- (008E88C0) -------------------------------------------------------- int __cdecl sub_8E88C0(void *a1, int a2, int a3, int a4) { int *v4; // ebx int *v5; // edi int result; // eax int v7; // esi int v8; // [esp+Ch] [ebp-8h] void *v9; // [esp+10h] [ebp-4h] v4 = (int *)a1; v5 = (int *)a2; result = (a2 - (signed int)a1) >> 2; if ( result <= 32 ) goto LABEL_8; v7 = a3; while ( v7 > 0 ) { sub_8E7F90((int **)&v8, v4, v5, (unsigned __int8 (__cdecl *)(int *, int *))a4); v7 = v7 / 2 / 2 + v7 / 2; if ( (signed int)((v8 - (_DWORD)v4) & 0xFFFFFFFC) >= (signed int)(((char *)v5 - (_BYTE *)v9) & 0xFFFFFFFC) ) { sub_8E88C0(v9, (int)v5, v7, a4); v5 = (int *)v8; } else { sub_8E88C0(v4, v8, v7, a4); v4 = (int *)v9; } result = v5 - v4; if ( result <= 32 ) goto LABEL_8; } if ( result <= 32 ) { LABEL_8: if ( result > 1 ) result = (int)sub_8E7CF0(v4, (int)v5, a4); } else { if ( (signed int)(((char *)v5 - (char *)v4) & 0xFFFFFFFC) > 4 ) sub_8E7C40((int)v4, (int)v5, (unsigned __int8 (__cdecl *)(int, _DWORD *))a4); result = sub_8E8130(v4, (int)v5, (unsigned __int8 (__cdecl *)(int, int))a4); } return result; } //----- (008E89B0) -------------------------------------------------------- void **__thiscall sub_8E89B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &HeightMapMaker::`vftable'; sub_8E8200(this); `eh vector destructor iterator'(v2 + 14, 0x28u, 100, sub_8E7F60); if ( v2[1] ) operator delete(v2[1]); v2[1] = 0; v2[2] = 0; v2[3] = 0; if ( a2 & 1 ) operator delete(v2); return v2; } // A411F8: using guessed type void *HeightMapMaker::`vftable'; //----- (008E8A40) -------------------------------------------------------- _DWORD *__thiscall sub_8E8A40(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ebx char v4; // al bool v5; // zf v2 = this; if ( a2 ) { *this = &unk_A4120C; this[4] = &unk_A41204; this[28] = &std::basic_ios>::`vftable'; } *(_DWORD *)((char *)this + *(_DWORD *)(*this + 4)) = &std::basic_istream>::`vftable'; this[2] = 0; this[3] = 0; v3 = (int)this + *(_DWORD *)(*this + 4); sub_423A10((_DWORD *)((char *)this + *(_DWORD *)(*this + 4))); *(_DWORD *)(v3 + 56) = v2 + 6; *(_DWORD *)(v3 + 60) = 0; v4 = sub_424CA0((_DWORD **)v3, 32); v5 = *(_DWORD *)(v3 + 56) == 0; *(_BYTE *)(v3 + 64) = v4; if ( v5 ) sub_405C10((_DWORD *)v3, *(_DWORD *)(v3 + 12) | 4, 0); *(_DWORD *)((char *)v2 + *(_DWORD *)(v2[4] + 4) + 16) = &std::basic_ostream>::`vftable'; *(_DWORD *)((char *)v2 + *(_DWORD *)(*v2 + 4)) = &std::basic_iostream>::`vftable'; *(_DWORD *)((char *)v2 + *(_DWORD *)(*v2 + 4)) = &std::basic_fstream>::`vftable'; sub_423F50(v2 + 6); v2[10] = v2 + 8; v2[15] = v2 + 13; v2[6] = &std::basic_filebuf>::`vftable'; *((_BYTE *)v2 + 104) = 0; *((_BYTE *)v2 + 97) = 0; v2[14] = v2 + 12; v2[19] = v2 + 17; v2[11] = v2 + 9; v2[18] = v2 + 16; v2[9] = 0; *(_DWORD *)v2[15] = 0; *(_DWORD *)v2[19] = 0; *(_DWORD *)v2[10] = 0; *(_DWORD *)v2[14] = 0; *(_DWORD *)v2[18] = 0; v2[27] = 0; v2[25] = dword_ACB210; v2[23] = 0; return v2; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB478: using guessed type void *std::basic_ios>::`vftable'; // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; // A41200: using guessed type void *std::basic_fstream>::`vftable'; // ACB210: using guessed type int dword_ACB210; //----- (008E8B90) -------------------------------------------------------- int __thiscall sub_8E8B90(_DWORD *this) { int v1; // esi _DWORD *v2; // ecx int v3; // eax int result; // eax *(_DWORD *)((char *)this + *(_DWORD *)(*(this - 28) + 4) - 112) = &std::basic_fstream>::`vftable'; v1 = (int)(this - 22); *(this - 22) = &std::basic_filebuf>::`vftable'; if ( *(this - 1) ) { v2 = *(_DWORD **)(v1 + 16); if ( *v2 == v1 + 72 ) { v3 = *(_DWORD *)(v1 + 64); *v2 = *(_DWORD *)(v1 + 60); **(_DWORD **)(v1 + 32) = v3; **(_DWORD **)(v1 + 48) = 0; } } if ( *(_BYTE *)(v1 + 80) ) sub_426DB0((_DWORD *)v1); sub_423AE0((_DWORD *)v1); *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 - 24) + 4) + v1 - 24) = &std::basic_iostream>::`vftable'; result = *(_DWORD *)(*(_DWORD *)(v1 - 8) + 4); *(_DWORD *)(result + v1 - 8) = &std::basic_ostream>::`vftable'; *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v1 - 24) + 4) + v1 - 24) = &std::basic_istream>::`vftable'; return result; } // 9AB470: using guessed type void *std::basic_istream>::`vftable'; // 9AB7CC: using guessed type void *std::basic_filebuf>::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; // 9F0924: using guessed type void *std::basic_iostream>::`vftable'; // A41200: using guessed type void *std::basic_fstream>::`vftable'; //----- (008E8C60) -------------------------------------------------------- _DWORD *__thiscall sub_8E8C60(struct std::ios_base *this, char a2) { _DWORD *v2; // edi struct std::ios_base *v3; // esi v2 = (_DWORD *)((char *)this - 112); v3 = this; sub_8E8B90(this); *(_DWORD *)v3 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (008E8CC0) -------------------------------------------------------- char __thiscall sub_8E8CC0(_DWORD *this, char *a2, int a3, int a4) { int v4; // ebx int v5; // ecx int v6; // eax char *v7; // ecx signed int v8; // eax int v9; // ecx int v10; // eax _DWORD **v11; // ecx unsigned __int8 v12; // al unsigned __int8 *v13; // eax int v15; // edi int v16; // ecx unsigned int v17; // eax int v18; // esi int v19; // esi int v20; // eax char *v21; // edi unsigned int v22; // eax int v23; // edi _DWORD *v24; // eax char **v25; // eax int v26; // esi int v27; // eax char *v28; // ebx unsigned int v29; // eax _BYTE *v30; // edx int v31; // ecx int v32; // edi unsigned int v33; // eax unsigned int v34; // eax unsigned int v35; // ecx char *v36; // ecx _DWORD *v37; // eax _DWORD *v38; // edi int v39; // ecx unsigned int v40; // eax unsigned int v41; // eax unsigned int v42; // ecx char *v43; // ecx char **v44; // eax int v45; // ecx int v46; // eax _DWORD *v47; // ecx int v48; // eax int v49; // [esp+10h] [ebp-508h] int v50; // [esp+1Ch] [ebp-4FCh] char v51; // [esp+28h] [ebp-4F0h] int v52; // [esp+48h] [ebp-4D0h] int v53; // [esp+7Ch] [ebp-49Ch] void **v54; // [esp+80h] [ebp-498h] unsigned int v55; // [esp+C8h] [ebp-450h] int v56; // [esp+CCh] [ebp-44Ch] unsigned int v57; // [esp+D0h] [ebp-448h] unsigned int v58; // [esp+D4h] [ebp-444h] _DWORD *v59; // [esp+D8h] [ebp-440h] unsigned int v60; // [esp+DCh] [ebp-43Ch] int v61; // [esp+E0h] [ebp-438h] char *v62; // [esp+E4h] [ebp-434h] char *v63; // [esp+E8h] [ebp-430h] void *v64; // [esp+ECh] [ebp-42Ch] unsigned int v65; // [esp+FCh] [ebp-41Ch] unsigned int v66; // [esp+100h] [ebp-418h] char v67; // [esp+108h] [ebp-410h] int v68; // [esp+514h] [ebp-4h] v59 = this; sub_8E8A40(&v49, 1); v4 = 0; v68 = 0; if ( sub_425C90(&v51, a2, 33, 64) ) { v9 = *(_DWORD *)(v49 + 4); v10 = *(int *)((char *)&v52 + v9); v7 = (char *)&v49 + v9; v8 = v10 != 0 ? 0 : 4; } else { v5 = *(_DWORD *)(v49 + 4); v6 = *(int *)((char *)&v50 + v5); v7 = (char *)&v49 + v5; v8 = v6 | 2; if ( !*((_DWORD *)v7 + 14) ) v8 |= 4u; } sub_405C10(v7, v8, 0); if ( !v53 ) goto LABEL_16; v66 = 15; v65 = 0; LOBYTE(v64) = 0; v11 = (_DWORD **)((char *)&v49 + *(_DWORD *)(v49 + 4)); LOBYTE(v68) = 1; v12 = sub_424CA0(v11, 10); sub_8E8300(&v49, &v67, 0x400u, 0, v12); sub_4018E0(&v64, &v67, strlen(&v67)); v13 = (unsigned __int8 *)v64; if ( v66 < 0x10 ) v13 = (unsigned __int8 *)&v64; if ( sub_40C2F0((unsigned __int8 *)a4, 0, *(_DWORD *)(a4 + 16), v13, v65) ) { if ( v66 >= 0x10 ) operator delete(v64); v66 = 15; v65 = 0; LOBYTE(v64) = 0; v68 = -1; sub_8E8B90(&v54); v54 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v54); return 0; } sub_486EB0(&v49, (int)&v56, 4, 0); if ( a3 != v56 ) { if ( v66 >= 0x10 ) operator delete(v64); v66 = 15; v65 = 0; LOBYTE(v64) = 0; LABEL_16: v68 = -1; sub_8E8B90(&v54); v54 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v54); return 0; } v15 = (int)v59; v16 = v59[1]; v17 = (v59[2] - v16) >> 2; if ( v17 ) { if ( v17 > 0 ) { while ( 1 ) { v18 = *(_DWORD *)(v16 + 4 * v4); v63 = 0; sub_486EB0(&v49, (int)&v63, 4, 0); v19 = v18 + 52; sub_74E360((const void **)v19, v63); v61 = 0; if ( v63 ) break; LABEL_34: v16 = *(_DWORD *)(v15 + 4); if ( (*(_DWORD *)(v15 + 8) - v16) >> 2 <= (unsigned int)++v4 ) goto LABEL_35; } while ( 1 ) { sub_486EB0(&v49, (int)&v60, 4, 0); v20 = *(_DWORD *)(v15 + 4); if ( (*(_DWORD *)(v15 + 8) - v20) >> 2 <= v60 ) break; v21 = *(char **)(v20 + 4 * v60); v62 = v21; if ( v21 ) { v22 = *(_DWORD *)(v19 + 4); if ( (unsigned int)&v62 >= v22 || *(_DWORD *)v19 > (unsigned int)&v62 ) { if ( v22 == *(_DWORD *)(v19 + 8) ) sub_5E2180(v19, 1); v25 = *(char ***)(v19 + 4); if ( v25 ) *v25 = v21; } else { v23 = ((signed int)&v62 - *(_DWORD *)v19) >> 2; if ( v22 == *(_DWORD *)(v19 + 8) ) sub_5E2180(v19, 1); v24 = *(_DWORD **)(v19 + 4); if ( v24 ) *v24 = *(_DWORD *)(*(_DWORD *)v19 + 4 * v23); } *(_DWORD *)(v19 + 4) += 4; } v15 = (int)v59; if ( ++v61 >= (unsigned int)v63 ) goto LABEL_34; } } LABEL_47: std::_Xout_of_range("invalid vector subscript"); } LABEL_35: v26 = v15 + 80; v58 = 0; v60 = v15 + 80; do { v57 = 0; do { v62 = 0; sub_486EB0(&v49, (int)&v62, 4, 0); sub_74E360((const void **)v26, v62); v61 = 0; if ( v62 ) { do { sub_486EB0(&v49, (int)&v55, 4, 0); v27 = *(_DWORD *)(v15 + 4); if ( (*(_DWORD *)(v15 + 8) - v27) >> 2 <= v55 ) goto LABEL_47; v28 = *(char **)(v27 + 4 * v55); v63 = v28; if ( v28 ) { v29 = *(_DWORD *)(v26 + 4); if ( (unsigned int)&v63 >= v29 || (v30 = *(_BYTE **)v26, *(_DWORD *)v26 > (unsigned int)&v63) ) { v39 = *(_DWORD *)(v26 + 8); if ( v29 == v39 ) { v40 = (signed int)(v29 - *(_DWORD *)v26) >> 2; if ( v40 > 0x3FFFFFFE ) LABEL_78: std::_Xlength_error("vector too long"); v41 = v40 + 1; v42 = (v39 - *(_DWORD *)v26) >> 2; if ( v41 > v42 ) { if ( 0x3FFFFFFF - (v42 >> 1) >= v42 ) v43 = (char *)((v42 >> 1) + v42); else v43 = 0; if ( (unsigned int)v43 < v41 ) v43 = (char *)v41; sub_74E360((const void **)v26, v43); v28 = v63; } } v44 = *(char ***)(v26 + 4); if ( v44 ) *v44 = v28; } else { v31 = *(_DWORD *)(v26 + 8); v32 = ((char *)&v63 - v30) >> 2; if ( v29 == v31 ) { v33 = (signed int)(v29 - (_DWORD)v30) >> 2; if ( v33 > 0x3FFFFFFE ) goto LABEL_78; v34 = v33 + 1; v35 = (v31 - (signed int)v30) >> 2; if ( v34 > v35 ) { if ( 0x3FFFFFFF - (v35 >> 1) >= v35 ) v36 = (char *)((v35 >> 1) + v35); else v36 = 0; if ( (unsigned int)v36 < v34 ) v36 = (char *)v34; sub_74E360((const void **)v26, v36); } } v37 = *(_DWORD **)(v26 + 4); v38 = (_DWORD *)(*(_DWORD *)v26 + 4 * v32); if ( v37 ) *v37 = *v38; v15 = (int)v59; } *(_DWORD *)(v26 + 4) += 4; } } while ( ++v61 < (unsigned int)v62 ); } v26 += 400; ++v57; } while ( v57 < 0xA ); v26 = v60 + 40; ++v58; v60 += 40; } while ( v58 < 0xA ); if ( !sub_426DB0(&v51) ) { v45 = *(_DWORD *)(v49 + 4); v46 = *(int *)((char *)&v50 + v45); v47 = (int *)((char *)&v49 + v45); v48 = v46 | 2; if ( !v47[14] ) v48 |= 4u; sub_405C10(v47, v48, 0); } if ( v66 >= 0x10 ) operator delete(v64); v66 = 15; v65 = 0; LOBYTE(v64) = 0; v68 = -1; sub_8E8B90(&v54); v54 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v54); return 1; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (008E92D0) -------------------------------------------------------- char __thiscall sub_8E92D0(char *this, unsigned int a2, _DWORD *a3) { int v3; // esi int v4; // ebx int v5; // ecx int v6; // eax char *v7; // ecx signed int v8; // eax int v9; // ecx int v10; // eax _BYTE *v12; // eax int v13; // ecx unsigned int v14; // eax int v15; // edi int v16; // eax unsigned int v17; // esi int v18; // eax _DWORD *v19; // edi unsigned int v20; // ebx unsigned int v21; // esi int v22; // ecx int v23; // eax _DWORD *v24; // ecx int v25; // eax int v26; // [esp+10h] [ebp-CCh] int v27; // [esp+1Ch] [ebp-C0h] char v28; // [esp+20h] [ebp-BCh] char v29; // [esp+28h] [ebp-B4h] int v30; // [esp+48h] [ebp-94h] int v31; // [esp+7Ch] [ebp-60h] void **v32; // [esp+80h] [ebp-5Ch] unsigned int v33; // [esp+C8h] [ebp-14h] char *v34; // [esp+CCh] [ebp-10h] int v35; // [esp+D8h] [ebp-4h] v3 = (int)this; v34 = this; sub_8E8A40(&v26, 1); v4 = 0; v35 = 0; if ( sub_425C90(&v29, (char *)a2, 34, 64) ) { v9 = *(_DWORD *)(v26 + 4); v10 = *(int *)((char *)&v30 + v9); v7 = (char *)&v26 + v9; v8 = v10 != 0 ? 0 : 4; } else { v5 = *(_DWORD *)(v26 + 4); v6 = *(int *)((char *)&v27 + v5); v7 = (char *)&v26 + v5; v8 = v6 | 2; if ( !*((_DWORD *)v7 + 14) ) v8 |= 4u; } sub_405C10(v7, v8, 0); if ( !v31 ) { v35 = -1; sub_8E8B90(&v32); v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); return 0; } v12 = sub_529AA0(&v28, a3); sub_471970(v12); a2 = (*(_DWORD *)(v3 + 8) - *(_DWORD *)(v3 + 4)) >> 2; sub_8E84F0(&v28, (int)&a2, 4, 0); v13 = *(_DWORD *)(v3 + 4); v14 = (*(_DWORD *)(v3 + 8) - v13) >> 2; a3 = 0; if ( v14 > 0 ) { while ( 1 ) { v15 = *(_DWORD *)(v13 + 4 * v4); v16 = (*(_DWORD *)(v15 + 56) - *(_DWORD *)(v15 + 52)) >> 2; a3 = (_DWORD *)((char *)a3 + v16); a2 = v16; sub_8E84F0(&v28, (int)&a2, 4, 0); v17 = 0; if ( a2 ) break; LABEL_11: v13 = *((_DWORD *)v34 + 1); if ( (*((_DWORD *)v34 + 2) - v13) >> 2 <= (unsigned int)++v4 ) { v3 = (int)v34; goto LABEL_13; } } while ( 1 ) { v18 = *(_DWORD *)(v15 + 52); if ( (*(_DWORD *)(v15 + 56) - v18) >> 2 <= v17 ) break; sub_8E84F0(&v28, *(_DWORD *)(v18 + 4 * v17++) + 68, 4, 0); if ( v17 >= a2 ) goto LABEL_11; } LABEL_25: std::_Xout_of_range("invalid vector subscript"); } LABEL_13: v34 = 0; v33 = 0; a3 = (_DWORD *)(v3 + 80); do { v19 = a3; v20 = 0; do { a2 = (v19[1] - *v19) >> 2; sub_8E84F0(&v28, (int)&a2, 4, 0); v34 += a2; v21 = 0; if ( a2 ) { while ( (v19[1] - *v19) >> 2 > v21 ) { sub_8E84F0(&v28, *(_DWORD *)(*v19 + 4 * v21++) + 68, 4, 0); if ( v21 >= a2 ) goto LABEL_18; } goto LABEL_25; } LABEL_18: ++v20; v19 += 100; } while ( v20 < 0xA ); a3 += 10; ++v33; } while ( v33 < 0xA ); if ( !sub_426DB0(&v29) ) { v22 = *(_DWORD *)(v26 + 4); v23 = *(int *)((char *)&v27 + v22); v24 = (int *)((char *)&v26 + v22); v25 = v23 | 2; if ( !v24[14] ) v25 |= 4u; sub_405C10(v24, v25, 0); } v35 = -1; sub_8E8B90(&v32); v32 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&v32); return 1; } // 9AB468: using guessed type void *std::ios_base::`vftable'; //----- (008E9570) -------------------------------------------------------- char __fastcall sub_8E9570(int a1, int a2, int a3, char *a4) { int v4; // esi float *v5; // ebx int v6; // eax _DWORD *v7; // ecx int v8; // eax unsigned int v9; // eax int v10; // esi int v11; // eax char v12; // al void **v13; // eax void **v14; // esi unsigned __int16 v15; // ax void **v16; // esi float *v17; // eax float *v18; // esi float *v19; // eax double v20; // st7 double v21; // st7 double v22; // st7 float *v23; // eax double v24; // st7 double v25; // st7 double v26; // st7 float *v27; // eax double v28; // st7 signed int v29; // edi double v30; // st6 double v31; // st7 double v32; // st7 int v33; // eax double v34; // st7 float v35; // edx int v36; // eax int v37; // ecx int v38; // edx int v39; // eax int v40; // ecx int v41; // edx int v42; // eax int v43; // ecx float v44; // edx int v45; // eax char *v46; // ecx float *v47; // esi _DWORD *v48; // eax void *v49; // ST0C_4 float *v50; // edi float *v51; // eax float *v52; // esi float *v53; // eax int v54; // edx float *v55; // eax float *v56; // eax float *v57; // eax float *v58; // eax float *v59; // eax double v60; // st7 bool v61; // zf float *v62; // ecx float v63; // eax float v64; // edx float v65; // eax int v66; // esi unsigned int v67; // eax unsigned int v68; // edi int v69; // ecx int v70; // edx unsigned int v71; // eax unsigned int v72; // eax unsigned int v73; // ecx char *v74; // ecx _DWORD *v75; // edx _DWORD *v76; // eax int v77; // ecx int v78; // edx unsigned int v79; // eax unsigned int v80; // eax unsigned int v81; // ecx char *v82; // ecx void **v83; // eax unsigned __int16 v84; // ax double v85; // st7 double v86; // st7 int v87; // eax int v88; // esi unsigned int v89; // ecx double v90; // st3 int v91; // edx double v92; // st3 double v93; // st2 double v94; // st1 double v95; // rt2 double v96; // st2 double v97; // st3 double v98; // st2 int v99; // edx double v100; // st2 double v101; // st2 double v102; // st1 double v103; // st2 double v104; // st1 int v105; // edx double v106; // st1 double v107; // st1 int v108; // edx double v109; // st1 double v110; // st1 int v111; // edx double v112; // st1 double v113; // st1 int v114; // edx double v115; // st1 int v116; // edx double v117; // st1 double v118; // st1 int v119; // edx double v120; // st1 double v121; // st1 int v122; // edx double v123; // st1 double v124; // st1 int v125; // edx double v126; // st1 int v127; // edx double v128; // st1 double v129; // st1 int v130; // edx double v131; // st1 double v132; // st1 int v133; // edx double v134; // st1 double v135; // st1 int v136; // edx double v137; // st1 double v138; // st1 int v139; // edx double v140; // st1 int v141; // edx double v142; // st1 double v143; // st1 int v144; // edx double v145; // st1 double v146; // st1 int v147; // edx double v148; // st1 double v149; // st1 int v150; // edx double v151; // st1 double v152; // rt0 double v153; // st2 int v154; // edx double v155; // st3 unsigned int v156; // edi float *v157; // eax float *v158; // ebx unsigned int v159; // edx int v160; // ecx float *v161; // ecx char result; // al float *v163; // ebx int v164; // ecx float v165; // edi float v166; // edx float v167; // eax float v168; // edx int *v169; // eax int *v170; // edi unsigned int v171; // eax int v172; // ebx int v173; // ecx int v174; // edx unsigned int v175; // eax unsigned int v176; // eax unsigned int v177; // ecx char *v178; // ecx _DWORD *v179; // edx _DWORD *v180; // eax int v181; // ecx unsigned int v182; // eax unsigned int v183; // eax unsigned int v184; // ecx char *v185; // ecx _DWORD *v186; // eax float v187; // edx void **v188; // eax int *v189; // ecx int v190; // ebx _DWORD *v191; // edi unsigned int v192; // eax unsigned int v193; // edx int v194; // ecx int v195; // ebx unsigned int v196; // eax unsigned int v197; // eax unsigned int v198; // ecx char *v199; // ecx _DWORD *v200; // eax _DWORD *v201; // ebx int v202; // ecx int v203; // edx unsigned int v204; // eax unsigned int v205; // eax unsigned int v206; // ecx char *v207; // ecx int *v208; // eax int v209; // edi unsigned int v210; // eax unsigned int v211; // ebx int v212; // ecx int v213; // edx unsigned int v214; // eax unsigned int v215; // eax unsigned int v216; // ecx char *v217; // ecx _DWORD *v218; // edx _DWORD *v219; // eax int v220; // ecx int v221; // edx unsigned int v222; // eax unsigned int v223; // eax unsigned int v224; // ecx char *v225; // ecx void **v226; // eax int v227; // ecx float v228; // edx unsigned int v229; // eax int v230; // edi int v231; // ecx int v232; // edx int v233; // eax char *v234; // ebx unsigned int v235; // eax char v236; // bl char v237; // [esp+18h] [ebp-140h] char v238; // [esp+24h] [ebp-134h] char v239; // [esp+30h] [ebp-128h] void **v240; // [esp+3Ch] [ebp-11Ch] int v241; // [esp+40h] [ebp-118h] int v242; // [esp+44h] [ebp-114h] float v243; // [esp+48h] [ebp-110h] float v244; // [esp+4Ch] [ebp-10Ch] float v245; // [esp+50h] [ebp-108h] char *v246; // [esp+54h] [ebp-104h] float v247; // [esp+58h] [ebp-100h] float v248; // [esp+5Ch] [ebp-FCh] float v249; // [esp+60h] [ebp-F8h] void *v250; // [esp+64h] [ebp-F4h] int v251; // [esp+68h] [ebp-F0h] int v252; // [esp+6Ch] [ebp-ECh] int v253; // [esp+74h] [ebp-E4h] float v254; // [esp+78h] [ebp-E0h] float v255; // [esp+7Ch] [ebp-DCh] float *v256; // [esp+80h] [ebp-D8h] void **v257; // [esp+84h] [ebp-D4h] float v258; // [esp+88h] [ebp-D0h] unsigned int v259; // [esp+8Ch] [ebp-CCh] char v260; // [esp+93h] [ebp-C5h] float v261; // [esp+94h] [ebp-C4h] void *v262; // [esp+98h] [ebp-C0h] float v263; // [esp+9Ch] [ebp-BCh] int v264; // [esp+A0h] [ebp-B8h] int v265; // [esp+A4h] [ebp-B4h] float v266; // [esp+A8h] [ebp-B0h] float v267; // [esp+ACh] [ebp-ACh] float v268; // [esp+B0h] [ebp-A8h] float v269; // [esp+B4h] [ebp-A4h] float v270; // [esp+B8h] [ebp-A0h] float v271; // [esp+BCh] [ebp-9Ch] float v272; // [esp+C0h] [ebp-98h] float v273; // [esp+C4h] [ebp-94h] char v274; // [esp+C8h] [ebp-90h] float v275; // [esp+ECh] [ebp-6Ch] float v276; // [esp+F0h] [ebp-68h] float v277; // [esp+F4h] [ebp-64h] float v278; // [esp+F8h] [ebp-60h] void *v279; // [esp+FCh] [ebp-5Ch] int v280; // [esp+10Ch] [ebp-4Ch] unsigned int v281; // [esp+110h] [ebp-48h] float v282; // [esp+118h] [ebp-40h] int v283; // [esp+11Ch] [ebp-3Ch] int v284; // [esp+120h] [ebp-38h] int v285; // [esp+124h] [ebp-34h] int v286; // [esp+128h] [ebp-30h] int v287; // [esp+12Ch] [ebp-2Ch] int v288; // [esp+130h] [ebp-28h] int v289; // [esp+134h] [ebp-24h] int v290; // [esp+138h] [ebp-20h] float v291; // [esp+13Ch] [ebp-1Ch] int v292; // [esp+140h] [ebp-18h] int v293; // [esp+144h] [ebp-14h] int v294; // [esp+154h] [ebp-4h] v4 = a1; v264 = a1; v246 = a4; v294 = 0; sub_85BED0((_DWORD **)a3, 0.0, 1); v250 = 0; v251 = 0; v252 = 0; v241 = 0; v242 = -1; v240 = &FindCDNode2::`vftable'; LOBYTE(v294) = 2; sub_8CFE00(&v240, a3, (int)dword_BA457C, (int)&v250); sub_8E8200((_DWORD *)v4); *(float *)(v4 + 20) = 10000.0; v5 = (float *)(v4 + 20); v271 = -10000.0; v5[1] = 10000.0; v272 = -10000.0; *(float *)(v4 + 32) = v271; v6 = v251; v273 = 0.0; *(float *)(v4 + 36) = -10000.0; v7 = v250; v8 = v6 - (_DWORD)v250; v5[2] = 0.0; v9 = v8 >> 2; *(float *)(v4 + 40) = v273; v259 = 0; if ( v9 > 0 ) { do { if ( v9 <= v259 ) goto LABEL_90; v10 = v7[v259]; if ( v10 ) { v11 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 4))(v10); if ( v11 ) { while ( (char *)v11 != dword_BA4A50 ) { v11 = *(_DWORD *)(v11 + 4); if ( !v11 ) goto LABEL_7; } v12 = 1; } else { LABEL_7: v12 = 0; } v13 = (void **)(v12 != 0 ? v10 : 0); v257 = v13; if ( v13 ) { v14 = v13; sub_74E360((const void **)(v264 + 4), (char *)*((unsigned __int16 *)v13[46] + 32)); v15 = *((_WORD *)v14[46] + 32); v258 = 0.0; if ( v15 > 0u ) { do { v16 = v257; (*((void (__thiscall **)(void **, float, float **, float *, int *))*v257 + 33))( v257, COERCE_FLOAT(LODWORD(v258)), &v256, &v261, &v265); qmemcpy(&v274, v16 + 26, 0x34u); v17 = (float *)operator new(0x68u); if ( v17 ) { v17[13] = 0.0; v17[14] = 0.0; v17[15] = 0.0; v18 = v17; } else { v18 = 0; } v267 = v278; v262 = v18; v19 = sub_85DA90((float *)&v274, (float *)&v237, v256); v20 = v267; v267 = v267 * *v19; v263 = v19[1] * v20; v266 = v20 * v19[2]; v267 = v275 + v267; v263 = v276 + v263; v266 = v277 + v266; v243 = v267; v21 = v263; *v18 = v267; v244 = v21; v22 = v266; v18[1] = v244; v245 = v22; v18[2] = v245; v266 = v278; v23 = sub_85DA90((float *)&v274, (float *)&v238, (float *)LODWORD(v261)); v24 = v266; v266 = v266 * *v23; v267 = v23[1] * v24; v263 = v24 * v23[2]; v266 = v275 + v266; v267 = v276 + v267; v263 = v277 + v263; v247 = v266; v25 = v267; v18[3] = v266; v248 = v25; v26 = v263; v18[4] = v248; v249 = v26; v18[5] = v249; v266 = v278; v27 = sub_85DA90((float *)&v274, (float *)&v239, (float *)v265); v28 = *v27; v260 = 0; v29 = 3; v30 = v28 * v266; v31 = v266; v266 = v30; v267 = v27[1] * v31; v263 = v31 * v27[2]; v266 = v275 + v266; v267 = v276 + v267; v263 = v277 + v263; *(float *)&v253 = v266; v32 = v267; v18[6] = v266; v33 = v264; v254 = v32; v34 = v263; v18[7] = v254; v255 = v34; v18[8] = v255; *((_DWORD *)v18 + 17) = (*(_DWORD *)(v33 + 8) - *(_DWORD *)(v33 + 4)) >> 2; v35 = *v18; v36 = *((_DWORD *)v18 + 1); v284 = *((_DWORD *)v18 + 2); v37 = *((_DWORD *)v18 + 5); v282 = v35; v38 = *((_DWORD *)v18 + 3); v283 = v36; v39 = *((_DWORD *)v18 + 4); v287 = v37; v40 = *((_DWORD *)v18 + 8); v285 = v38; v41 = *((_DWORD *)v18 + 6); v286 = v39; v42 = *((_DWORD *)v18 + 7); v290 = v40; v43 = *((_DWORD *)v18 + 2); v288 = v41; v44 = *v18; v289 = v42; v45 = *((_DWORD *)v18 + 1); v293 = v43; v46 = (char *)v262; v291 = v44; v292 = v45; v47 = (float *)&v286; do { if ( *(v47 - 1) == *(v47 - 4) && *v47 == *(v47 - 3) && v47[1] == *(v47 - 2) ) { v260 = 1; if ( v46 ) { if ( *((_DWORD *)v46 + 13) ) operator delete(*((void **)v46 + 13)); v48 = v262; v49 = v262; *((_DWORD *)v262 + 13) = 0; v48[14] = 0; v48[15] = 0; operator delete(v49); } v46 = 0; v262 = 0; } v47 += 3; --v29; } while ( v29 ); if ( !v260 ) { v269 = 10000.0; v50 = (float *)(v264 + 24); v270 = 10000.0; LODWORD(v266) = v264 + 36; v272 = -10000.0; LODWORD(v267) = 3; v273 = -10000.0; do { v51 = (float *)v46; if ( *v5 <= (double)*(float *)v46 ) v51 = v5; v52 = (float *)(v46 + 4); *v5 = *v51; v53 = (float *)(v46 + 4); if ( *v50 <= (double)*((float *)v46 + 1) ) v53 = v50; v54 = v264; *v50 = *v53; v55 = (float *)v46; if ( *(float *)v46 <= (double)*(float *)(v54 + 32) ) v55 = (float *)(v54 + 32); *(float *)(v54 + 32) = *v55; v56 = (float *)(v46 + 4); if ( *v52 <= (double)*(float *)LODWORD(v266) ) v56 = (float *)LODWORD(v266); *(float *)LODWORD(v266) = *v56; v57 = (float *)v46; if ( v269 <= (double)*(float *)v46 ) v57 = &v269; v269 = *v57; v58 = (float *)(v46 + 4); if ( v270 <= (double)*v52 ) v58 = &v270; v270 = *v58; v59 = (float *)v46; if ( *(float *)v46 <= (double)v272 ) v59 = &v272; v272 = *v59; if ( *v52 <= (double)v273 ) v52 = &v273; v60 = *v52; v46 += 12; v61 = LODWORD(v267)-- == 1; v273 = v60; } while ( !v61 ); v62 = (float *)v262; v63 = v270; *((float *)v262 + 9) = v269; v64 = v272; v62[10] = v63; v65 = v273; v62[11] = v64; v62[12] = v65; sub_8E7130((double *)v62); v66 = v264; v67 = *(_DWORD *)(v264 + 8); if ( (unsigned int)&v262 >= v67 || (v68 = *(_DWORD *)(v264 + 4), v68 > (unsigned int)&v262) ) { v77 = *(_DWORD *)(v264 + 12); if ( v67 == v77 ) { v78 = *(_DWORD *)(v264 + 4); v79 = (signed int)(v67 - v78) >> 2; if ( v79 > 0x3FFFFFFE ) LABEL_91: std::_Xlength_error("vector too long"); v80 = v79 + 1; v81 = (v77 - v78) >> 2; if ( v80 > v81 ) { if ( 0x3FFFFFFF - (v81 >> 1) >= v81 ) v82 = (char *)((v81 >> 1) + v81); else v82 = 0; if ( (unsigned int)v82 < v80 ) v82 = (char *)v80; sub_74E360((const void **)(v264 + 4), v82); } } v83 = *(void ***)(v66 + 8); if ( v83 ) *v83 = v262; } else { v69 = *(_DWORD *)(v264 + 12); v70 = (signed int)((signed int)&v262 - v68) >> 2; LODWORD(v266) = (signed int)((signed int)&v262 - v68) >> 2; if ( v67 == v69 ) { v71 = (signed int)(v67 - v68) >> 2; if ( v71 > 0x3FFFFFFE ) goto LABEL_91; v72 = v71 + 1; v73 = (signed int)(v69 - v68) >> 2; if ( v72 > v73 ) { if ( 0x3FFFFFFF - (v73 >> 1) >= v73 ) v74 = (char *)((v73 >> 1) + v73); else v74 = 0; if ( (unsigned int)v74 < v72 ) v74 = (char *)v72; sub_74E360((const void **)(v264 + 4), v74); v70 = LODWORD(v266); } } v75 = (_DWORD *)(*(_DWORD *)(v66 + 4) + 4 * v70); v76 = *(_DWORD **)(v66 + 8); if ( v76 ) *v76 = *v75; } *(_DWORD *)(v66 + 8) += 4; } v84 = *((_WORD *)v257[46] + 32); ++LODWORD(v258); } while ( LOWORD(v258) < v84 ); } } v7 = v250; } v9 = (v251 - (signed int)v7) >> 2; ++v259; } while ( v259 < v9 ); v4 = v264; } *(float *)&v265 = *(float *)(v4 + 32) - *v5; v261 = *(float *)(v4 + 36) - v5[1]; v266 = *(float *)(v4 + 40) - v5[2]; *(float *)&v265 = *(float *)&v265 * 0.1000000014901161; v261 = v261 * 0.1000000014901161; v266 = 0.1000000014901161 * v266; v253 = v265; v85 = v261; *(float *)(v4 + 44) = *(float *)&v265; v254 = v85; v86 = v266; *(float *)(v4 + 48) = v254; v255 = v86; *(float *)(v4 + 52) = v255; v87 = v4 + 68; v88 = v264; *(float *)&v89 = 0.0; v261 = *(float *)&v87; do { v90 = *(float *)(v88 + 44) * 0.0; v271 = *v5; v272 = v5[1]; v91 = *((_DWORD *)v5 + 2); v271 = v90 + v271; *(float *)&v265 = (double)v89; v92 = *(float *)(v88 + 48); *(float *)(v87 - 12) = v271; v93 = *(float *)&v265; ++v89; v94 = *(float *)&v265; v265 = v89; v95 = v93; v96 = v92 * v94 + v272; v97 = v95; v272 = v96; *(float *)(v87 - 8) = v272; *(_DWORD *)(v87 - 4) = v91; v268 = *v5; v98 = v268 + *(float *)(v88 + 44); v269 = v5[1]; v99 = *((_DWORD *)v5 + 2); v268 = v98; v100 = (double)v265; if ( (v89 & 0x80000000) != 0 ) v100 = v100 + 4294967300.0; *(float *)&v265 = v100; v101 = *(float *)(v88 + 48); *(float *)v87 = v268; v102 = v101 * *(float *)&v265 + v269; v103 = *(float *)&v265; v269 = v102; *(float *)(v87 + 4) = v269; *(_DWORD *)(v87 + 8) = v99; v271 = *v5; v104 = v271 + *(float *)(v88 + 44); v272 = v5[1]; v105 = *((_DWORD *)v5 + 2); v271 = v104; v106 = *(float *)(v88 + 48); *(float *)(v87 + 28) = v271; v272 = v106 * v97 + v272; *(float *)(v87 + 32) = v272; *(_DWORD *)(v87 + 36) = v105; v107 = *(float *)(v88 + 44) * 2.0; v268 = *v5; v269 = v5[1]; v108 = *((_DWORD *)v5 + 2); v268 = v107 + v268; v109 = *(float *)(v88 + 48); *(float *)(v87 + 40) = v268; v269 = v109 * v103 + v269; *(float *)(v87 + 44) = v269; *(_DWORD *)(v87 + 48) = v108; v110 = *(float *)(v88 + 44) * 2.0; v271 = *v5; v272 = v5[1]; v111 = *((_DWORD *)v5 + 2); v271 = v110 + v271; v112 = *(float *)(v88 + 48); *(float *)(v87 + 68) = v271; v272 = v112 * v97 + v272; *(float *)(v87 + 72) = v272; *(_DWORD *)(v87 + 76) = v111; v113 = *(float *)(v88 + 44) * 3.0; v268 = *v5; v269 = v5[1]; v114 = *((_DWORD *)v5 + 2); v268 = v113 + v268; v269 = *(float *)(v88 + 48) * v103 + v269; *(float *)(v87 + 80) = v268; *(float *)(v87 + 84) = v269; *(_DWORD *)(v87 + 88) = v114; v115 = *(float *)(v88 + 44) * 3.0; v271 = *v5; v272 = v5[1]; v116 = *((_DWORD *)v5 + 2); v271 = v115 + v271; v117 = *(float *)(v88 + 48); *(float *)(v87 + 108) = v271; v272 = v117 * v97 + v272; *(float *)(v87 + 112) = v272; *(_DWORD *)(v87 + 116) = v116; v118 = *(float *)(v88 + 44) * 4.0; v268 = *v5; v269 = v5[1]; v119 = *((_DWORD *)v5 + 2); v268 = v118 + v268; v120 = *(float *)(v88 + 48); *(float *)(v87 + 120) = v268; v269 = v120 * v103 + v269; *(float *)(v87 + 124) = v269; *(_DWORD *)(v87 + 128) = v119; v121 = *(float *)(v88 + 44) * 4.0; v271 = *v5; v272 = v5[1]; v122 = *((_DWORD *)v5 + 2); v271 = v121 + v271; v123 = *(float *)(v88 + 48); *(float *)(v87 + 148) = v271; v272 = v123 * v97 + v272; *(float *)(v87 + 152) = v272; *(_DWORD *)(v87 + 156) = v122; v124 = *(float *)(v88 + 44) * 5.0; v268 = *v5; v269 = v5[1]; v125 = *((_DWORD *)v5 + 2); v268 = v124 + v268; v126 = *(float *)(v88 + 48); *(float *)(v87 + 160) = v268; v269 = v126 * v103 + v269; *(float *)(v87 + 164) = v269; *(_DWORD *)(v87 + 168) = v125; v271 = *v5; v272 = v5[1]; v127 = *((_DWORD *)v5 + 2); v271 = *(float *)(v88 + 44) * 5.0 + v271; v128 = *(float *)(v88 + 48); *(float *)(v87 + 188) = v271; v272 = v128 * v97 + v272; *(float *)(v87 + 192) = v272; *(_DWORD *)(v87 + 196) = v127; v129 = *(float *)(v88 + 44) * 6.0; v268 = *v5; v269 = v5[1]; v130 = *((_DWORD *)v5 + 2); v268 = v129 + v268; v131 = *(float *)(v88 + 48); *(float *)(v87 + 200) = v268; v269 = v131 * v103 + v269; *(float *)(v87 + 204) = v269; *(_DWORD *)(v87 + 208) = v130; v132 = *(float *)(v88 + 44) * 6.0; v271 = *v5; v272 = v5[1]; v133 = *((_DWORD *)v5 + 2); v271 = v132 + v271; v134 = *(float *)(v88 + 48); *(float *)(v87 + 228) = v271; v272 = v134 * v97 + v272; *(float *)(v87 + 232) = v272; *(_DWORD *)(v87 + 236) = v133; v135 = *(float *)(v88 + 44) * 7.0; v268 = *v5; v269 = v5[1]; v136 = *((_DWORD *)v5 + 2); v268 = v135 + v268; v137 = *(float *)(v88 + 48); *(float *)(v87 + 240) = v268; v269 = v137 * v103 + v269; *(float *)(v87 + 244) = v269; *(_DWORD *)(v87 + 248) = v136; v138 = *(float *)(v88 + 44) * 7.0; v271 = *v5; v272 = v5[1]; v139 = *((_DWORD *)v5 + 2); v271 = v138 + v271; v272 = *(float *)(v88 + 48) * v97 + v272; *(float *)(v87 + 268) = v271; *(float *)(v87 + 272) = v272; *(_DWORD *)(v87 + 276) = v139; v140 = *(float *)(v88 + 44) * 8.0; v268 = *v5; v269 = v5[1]; v141 = *((_DWORD *)v5 + 2); v268 = v140 + v268; v142 = *(float *)(v88 + 48); *(float *)(v87 + 280) = v268; v269 = v142 * v103 + v269; *(float *)(v87 + 284) = v269; *(_DWORD *)(v87 + 288) = v141; v143 = *(float *)(v88 + 44) * 8.0; v271 = *v5; v272 = v5[1]; v144 = *((_DWORD *)v5 + 2); v271 = v143 + v271; v145 = *(float *)(v88 + 48); *(float *)(v87 + 308) = v271; v272 = v145 * v97 + v272; *(float *)(v87 + 312) = v272; *(_DWORD *)(v87 + 316) = v144; v146 = *(float *)(v88 + 44) * 9.0; v268 = *v5; v269 = v5[1]; v147 = *((_DWORD *)v5 + 2); v268 = v146 + v268; v148 = *(float *)(v88 + 48); *(float *)(v87 + 320) = v268; v269 = v148 * v103 + v269; *(float *)(v87 + 324) = v269; *(_DWORD *)(v87 + 328) = v147; v149 = *(float *)(v88 + 44) * 9.0; v271 = *v5; v272 = v5[1]; v150 = *((_DWORD *)v5 + 2); v271 = v149 + v271; v151 = *(float *)(v88 + 48); *(float *)(v87 + 348) = v271; v152 = v103; v272 = v97 * v151 + v272; *(float *)(v87 + 352) = v272; *(_DWORD *)(v87 + 356) = v150; v268 = *v5; v153 = *(float *)(v88 + 44); v269 = v5[1]; v154 = *((_DWORD *)v5 + 2); v87 += 400; v268 = v153 * 10.0 + v268; v155 = v152 * *(float *)(v88 + 48); *(float *)(v87 - 40) = v268; v269 = v155 + v269; *(float *)(v87 - 36) = v269; *(_DWORD *)(v87 - 32) = v154; } while ( v89 < 0xA ); v156 = (*(_DWORD *)(v88 + 8) - *(_DWORD *)(v88 + 4)) >> 2; *(float *)&v157 = COERCE_FLOAT(operator new[](36 * v156)); v158 = v157; v159 = 0; v265 = (int)v157; if ( v156 ) { do { v160 = *(_DWORD *)(v88 + 4); if ( (*(_DWORD *)(v88 + 8) - v160) >> 2 <= v159 ) goto LABEL_90; v161 = *(float **)(v160 + 4 * v159++); *v157 = *v161; v157 += 9; *(v157 - 8) = v161[1]; *(v157 - 7) = v161[2]; *(v157 - 6) = v161[3]; *(v157 - 5) = v161[4]; *(v157 - 4) = v161[5]; *(v157 - 3) = v161[6]; *(v157 - 2) = v161[7]; *(v157 - 1) = v161[8]; } while ( v159 < v156 ); v158 = (float *)v265; } sub_747370((int)&v279, v158, 36 * v156); LOBYTE(v294) = 3; operator delete(v158); if ( sub_8E8CC0((_DWORD *)v88, v246, v156, (int)&v279) ) { if ( v281 >= 0x10 ) operator delete(v279); v281 = 15; v280 = 0; LOBYTE(v279) = 0; v240 = &Ns_TourScene::`vftable'; if ( v250 ) operator delete(v250); v250 = 0; v251 = 0; v252 = 0; v294 = -1; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) { if ( a3 ) (**(void (__thiscall ***)(int, signed int))a3)(a3, 1); } result = 1; } else { v163 = 0; v256 = 0; v267 = v261; do { *(float *)&v164 = v267; v165 = 0.0; v263 = 0.0; v258 = v267; do { v166 = *(float *)(v164 - 12); v248 = *(float *)(v164 - 8); v253 = *(int *)v164; v167 = *(float *)(v164 + 8); v247 = v166; v168 = *(float *)(v164 - 4); v255 = v167; v169 = *(int **)(v88 + 4); v249 = v168; v254 = *(float *)(v164 + 4); v259 = (unsigned int)v169; if ( v169 != *(int **)(v88 + 8) ) { v265 = (int)v163 + LODWORD(v165); while ( 1 ) { v264 = *v169; if ( sub_8E79D0((float *)v264, &v247, (float *)&v253) ) { v170 = (int *)(v88 + 8 * (5 * v265 + 10)); v171 = v170[1]; if ( (unsigned int)&v264 >= v171 || (v172 = *v170, *v170 > (unsigned int)&v264) ) { v181 = v170[2]; if ( v171 == v181 ) { v182 = (signed int)(v171 - *v170) >> 2; if ( v182 > 0x3FFFFFFE ) goto LABEL_91; v183 = v182 + 1; v184 = (v181 - *v170) >> 2; if ( v183 > v184 ) { if ( 0x3FFFFFFF - (v184 >> 1) >= v184 ) v185 = (char *)((v184 >> 1) + v184); else v185 = 0; if ( (unsigned int)v185 < v183 ) v185 = (char *)v183; sub_74E360((const void **)(v88 + 8 * (5 * v265 + 10)), v185); } } v186 = (_DWORD *)v170[1]; if ( v186 ) *v186 = v264; } else { v173 = v170[2]; v174 = ((signed int)&v264 - v172) >> 2; LODWORD(v261) = ((signed int)&v264 - v172) >> 2; if ( v171 == v173 ) { v175 = (signed int)(v171 - v172) >> 2; if ( v175 > 0x3FFFFFFE ) goto LABEL_91; v176 = v175 + 1; v177 = (v173 - v172) >> 2; if ( v176 > v177 ) { if ( 0x3FFFFFFF - (v177 >> 1) >= v177 ) v178 = (char *)((v177 >> 1) + v177); else v178 = 0; if ( (unsigned int)v178 < v176 ) v178 = (char *)v176; sub_74E360((const void **)(v88 + 8 * (5 * v265 + 10)), v178); v174 = LODWORD(v261); } } v179 = (_DWORD *)(*v170 + 4 * v174); v180 = (_DWORD *)v170[1]; if ( v180 ) *v180 = *v179; } v170[1] += 4; } v259 += 4; if ( v259 == *(_DWORD *)(v88 + 8) ) break; v169 = (int *)v259; } v163 = v256; *(float *)&v164 = v258; v165 = v263; } v187 = *(float *)(v164 + 16); v188 = *(void ***)(v88 + 40 * ((_DWORD)v163 + LODWORD(v165) + 2)); v257 = v188; v261 = v187; if ( v188 != (void **)LODWORD(v187) ) { do { v189 = *(int **)(v164 + 12); v259 = (unsigned int)v189; if ( v189 != (int *)v188 ) { while ( 1 ) { v190 = *v189; v262 = *v188; v264 = v190; if ( sub_8E7B40((float *)v262, v190) ) { v191 = v262; v192 = *((_DWORD *)v262 + 14); if ( (unsigned int)&v264 >= v192 || (v193 = *((_DWORD *)v262 + 13), v193 > (unsigned int)&v264) ) { v202 = *((_DWORD *)v262 + 15); if ( v192 == v202 ) { v203 = *((_DWORD *)v262 + 13); v204 = (signed int)(v192 - v203) >> 2; if ( v204 > 0x3FFFFFFE ) goto LABEL_91; v205 = v204 + 1; v206 = (v202 - v203) >> 2; if ( v205 > v206 ) { if ( 0x3FFFFFFF - (v206 >> 1) >= v206 ) v207 = (char *)((v206 >> 1) + v206); else v207 = 0; if ( (unsigned int)v207 < v205 ) v207 = (char *)v205; sub_74E360((const void **)v262 + 13, v207); v190 = v264; } } v208 = (int *)v191[14]; if ( v208 ) *v208 = v190; } else { v194 = *((_DWORD *)v262 + 15); v195 = (signed int)((signed int)&v264 - v193) >> 2; v265 = (signed int)((signed int)&v264 - v193) >> 2; if ( v192 == v194 ) { v196 = (signed int)(v192 - v193) >> 2; if ( v196 > 0x3FFFFFFE ) goto LABEL_91; v197 = v196 + 1; v198 = (signed int)(v194 - v193) >> 2; if ( v197 > v198 ) { if ( 0x3FFFFFFF - (v198 >> 1) >= v198 ) v199 = (char *)((v198 >> 1) + v198); else v199 = 0; if ( (unsigned int)v199 < v197 ) v199 = (char *)v197; sub_74E360((const void **)v262 + 13, v199); v195 = v265; } } v200 = (_DWORD *)v191[14]; v201 = (_DWORD *)(v191[13] + 4 * v195); if ( v200 ) *v200 = *v201; } v191[14] += 4; v209 = v264; v210 = *(_DWORD *)(v264 + 56); if ( (unsigned int)&v262 >= v210 || (v211 = *(_DWORD *)(v264 + 52), v211 > (unsigned int)&v262) ) { v220 = *(_DWORD *)(v264 + 60); if ( v210 == v220 ) { v221 = *(_DWORD *)(v264 + 52); v222 = (signed int)(v210 - v221) >> 2; if ( v222 > 0x3FFFFFFE ) goto LABEL_91; v223 = v222 + 1; v224 = (v220 - v221) >> 2; if ( v223 > v224 ) { if ( 0x3FFFFFFF - (v224 >> 1) >= v224 ) v225 = (char *)((v224 >> 1) + v224); else v225 = 0; if ( (unsigned int)v225 < v223 ) v225 = (char *)v223; sub_74E360((const void **)(v264 + 52), v225); } } v226 = *(void ***)(v209 + 56); if ( v226 ) *v226 = v262; } else { v212 = *(_DWORD *)(v264 + 60); v213 = (signed int)((signed int)&v262 - v211) >> 2; v265 = (signed int)((signed int)&v262 - v211) >> 2; if ( v210 == v212 ) { v214 = (signed int)(v210 - v211) >> 2; if ( v214 > 0x3FFFFFFE ) goto LABEL_91; v215 = v214 + 1; v216 = (signed int)(v212 - v211) >> 2; if ( v215 > v216 ) { if ( 0x3FFFFFFF - (v216 >> 1) >= v216 ) v217 = (char *)((v216 >> 1) + v216); else v217 = 0; if ( (unsigned int)v217 < v215 ) v217 = (char *)v215; sub_74E360((const void **)(v264 + 52), v217); v213 = v265; } } v218 = (_DWORD *)(*(_DWORD *)(v209 + 52) + 4 * v213); v219 = *(_DWORD **)(v209 + 56); if ( v219 ) *v219 = *v218; } *(_DWORD *)(v209 + 56) += 4; } v61 = v259 + 4 == (_DWORD)v257; v259 += 4; v188 = v257; if ( v61 ) break; v189 = (int *)v259; } v187 = v261; } *(float *)&v164 = v258; ++v188; v257 = v188; } while ( v188 != (void **)LODWORD(v187) ); v163 = v256; v165 = v263; } ++LODWORD(v165); v164 += 40; v263 = v165; v258 = *(float *)&v164; } while ( LODWORD(v165) < 0xA ); LODWORD(v267) += 400; v163 = (float *)((char *)v163 + 10); v256 = v163; } while ( (unsigned int)v163 < 0x64 ); v227 = *(_DWORD *)(v88 + 4); v228 = 0.0; v229 = (*(_DWORD *)(v88 + 8) - v227) >> 2; v267 = 0.0; if ( v229 ) { if ( v229 <= 0 ) LABEL_90: std::_Xout_of_range("invalid vector subscript"); do { v230 = *(_DWORD *)(v227 + 4 * LODWORD(v228)); sub_8E88C0( *(void **)(v230 + 52), *(_DWORD *)(v230 + 56), (*(_DWORD *)(v230 + 56) - *(_DWORD *)(v230 + 52)) >> 2, (int)sub_8E6CF0); v231 = *(_DWORD *)(v230 + 52); v232 = *(_DWORD *)(v230 + 56); v233 = v231 + 4; if ( v231 != v232 ) { while ( v232 != v233 ) { if ( *(_DWORD *)(*(_DWORD *)v231 + 68) == *(_DWORD *)(*(_DWORD *)v233 + 68) ) { if ( *(_DWORD *)(v230 + 56) == v233 + 4 ) { memcpy_0((void *)v233, (const void *)(v233 + 4), 4 * ((*(_DWORD *)(v230 + 56) - (v233 + 4)) >> 2)); *(_DWORD *)(v230 + 56) -= 4; break; } v233 += 4; } else { v234 = (char *)(v231 + 4); if ( v231 + 4 != v233 ) { v265 = 4 * ((*(_DWORD *)(v230 + 56) - v233) >> 2); memcpy_0(v234, (const void *)v233, v265); *(_DWORD *)(v230 + 56) = &v234[v265]; v233 = (int)v234; } v231 = v233; v233 += 4; } v232 = *(_DWORD *)(v230 + 56); if ( v231 == v232 ) break; } } v227 = *(_DWORD *)(v88 + 4); LODWORD(v228) = LODWORD(v267) + 1; v235 = (*(_DWORD *)(v88 + 8) - v227) >> 2; v267 = v228; } while ( v235 > LODWORD(v228) ); } v236 = sub_8E92D0((char *)v88, (unsigned int)v246, &v279); if ( v281 >= 0x10 ) operator delete(v279); v281 = 15; v280 = 0; LOBYTE(v279) = 0; v240 = &Ns_TourScene::`vftable'; if ( v250 ) operator delete(v250); v250 = 0; v251 = 0; v252 = 0; v294 = -1; if ( a3 && !InterlockedDecrement((volatile LONG *)(a3 + 4)) && a3 ) (**(void (__thiscall ***)(int, signed int))a3)(a3, 1); result = v236; } return result; } // 9F2DAC: using guessed type void *Ns_TourScene::`vftable'; // A411E4: using guessed type void *FindCDNode2::`vftable'; //----- (008EAC20) -------------------------------------------------------- char __thiscall sub_8EAC20(_BYTE *this) { return this[10]; } //----- (008EAC30) -------------------------------------------------------- char __thiscall sub_8EAC30(_BYTE *this, char a2) { char result; // al _BYTE *v3; // esi result = a2; v3 = this; if ( a2 && !this[8] ) result = (*(int (**)(void))(*(_DWORD *)this + 8))(); v3[10] = result; return result; } //----- (008EAC60) -------------------------------------------------------- _DWORD *__thiscall sub_8EAC60(_DWORD *this, char a2, int a3) { _DWORD *v3; // esi v3 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *((_BYTE *)v3 + 10) = a2; *v3 = &CPostProcessEffect::`vftable'; *((_WORD *)v3 + 4) = 0; v3[3] = a3; return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A41218: using guessed type void *CPostProcessEffect::`vftable'; //----- (008EACA0) -------------------------------------------------------- void *sub_8EACA0() { return &unk_BA69C8; } //----- (008EACB0) -------------------------------------------------------- char __thiscall sub_8EACB0(_DWORD *this, rsize_t a2, int a3) { _DWORD *v3; // esi char result; // al v3 = this; result = sub_8EE9D0(this, a2, a3); if ( result ) result = (*(unsigned __int8 (__stdcall **)(rsize_t, int))(*(_DWORD *)v3[25] + 48))(a2, a3) != 0; return result; } //----- (008EACF0) -------------------------------------------------------- void __usercall sub_8EACF0(_DWORD *a1@, int a2@) { _DWORD *v2; // edi _DWORD *v3; // ebx int *v4; // eax int v5; // ecx _DWORD *v6; // esi _DWORD *v7; // ecx int v8; // eax int v9; // edi int v10; // [esp-8h] [ebp-18h] int v11; // [esp+4h] [ebp-Ch] int v12; // [esp+8h] [ebp-8h] _DWORD *v13; // [esp+Ch] [ebp-4h] v2 = a1; v13 = a1; v12 = dword_BA46D0; if ( dword_BA46D0 ) { if ( a1[10] ) { v10 = a2; v3 = a1 + 7; do { v4 = (int *)v3[1]; v5 = *v4; v3[1] = *v4; if ( v5 ) *(_DWORD *)(v5 + 4) = 0; else v3[2] = 0; v6 = (_DWORD *)v4[2]; (*(void (__thiscall **)(_DWORD *, int *))(*v3 + 8))(v3, v4); --v3[3]; if ( !v6[47] ) { v7 = *(_DWORD **)(v6[46] + 60); if ( v7 ) { if ( sub_9366F0(v7) && sub_85C050(v6, 8) ) { v11 = v6[48]; v8 = sub_863360(); v9 = (*(int (__thiscall **)(int, const char *, signed int, _DWORD, int))(*(_DWORD *)v8 + 4))( v8, "FxHazeRender", -1, 0, v10); if ( v9 ) { sub_8633D0((int)v6); sub_8633A0((int)v6, v9); } v10 = v12; (*(void (__thiscall **)(_DWORD *))(*v6 + 116))(v6); if ( v9 ) { sub_8633D0((int)v6); sub_8633A0((int)v6, v11); } v2 = v13; } } } } while ( v2[10] ); } sub_868D50(v2); } } // 8EACF0: could not find valid save-restore pair for esi // BA46D0: using guessed type int dword_BA46D0; //----- (008EADF0) -------------------------------------------------------- char __thiscall sub_8EADF0(_BYTE *this, void *a2, volatile LONG *a3) { _BYTE *v3; // edi _DWORD *v5; // eax int v6; // eax _DWORD *v7; // eax int v8; // eax int v9; // eax _DWORD *v10; // ebx _DWORD *v11; // esi int v12; // eax _DWORD *v13; // esi int v14; // eax v3 = this; if ( !this[9] ) return 0; v5 = operator new(0x40u); v6 = v5 ? sub_8EED60(v5, "FxHazeRender", 1, 0) : 0; *((_DWORD *)v3 + 25) = v6; v7 = operator new(0x40u); v8 = v7 ? sub_8EED60(v7, "FxHazeRender", 1, 0) : 0; *((_DWORD *)v3 + 24) = v8; if ( !sub_8EE120(v3, a2, a3) ) return 0; v9 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 104))(v9); if ( !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(**((_DWORD **)v3 + 25) + 12))(a2, a3) || !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(**((_DWORD **)v3 + 24) + 12))(a2, a3) ) { return 0; } v10 = (_DWORD *)sub_85C050(*((_DWORD **)v3 + 6), 8); v11 = operator new(0x1Cu); if ( v11 ) { v12 = (*(int (**)(void))(**((_DWORD **)v3 + 25) + 24))(); sub_863970(v11, v12, 0, 0, 1, 0); *v11 = &NiTexturingProperty::ShaderMap::`vftable'; v11[6] = 0; } else { v11 = 0; } sub_863FF0(v10, 1u, (int)v11); v13 = operator new(0x1Cu); if ( v13 ) { v14 = (*(int (**)(void))(**((_DWORD **)v3 + 24) + 24))(); sub_863970(v13, v14, 0, 0, 1, 0); *v13 = &NiTexturingProperty::ShaderMap::`vftable'; v13[6] = 0; } else { v13 = 0; } sub_863FF0(v10, 0, (int)v13); return 1; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EAFD0) -------------------------------------------------------- void __thiscall sub_8EAFD0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // edi _DWORD *v3; // edi v1 = this; if ( this[24] ) (*(void (**)(void))(*this[24] + 16))(); if ( v1[25] ) (*(void (**)(void))(*v1[25] + 16))(); if ( v1[26] ) { v2 = v1[26]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); v1[26] = 0; } } if ( v1[27] ) { v3 = v1[27]; if ( v3 ) { if ( !InterlockedDecrement(v3 + 1) && v3 ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); v1[27] = 0; } } sub_8EE000(v1); } //----- (008EB060) -------------------------------------------------------- char __thiscall sub_8EB060(int this, int a2) { char result; // al void **v3; // edi bool v4; // zf int *v5; // ebx int v6; // eax _DWORD *v7; // eax int v8; // edx int v9; // esi int v10; // eax int v11; // eax _DWORD *v12; // esi void (__thiscall *v13)(int); // edx int v14; // eax void (__thiscall *v15)(_DWORD *, float *); // edx int v16; // eax int v17; // ebx int v18; // ST0C_4 int v19; // ST04_4 float *v20; // ST00_4 float v21; // [esp+10h] [ebp-D8h] float v22; // [esp+14h] [ebp-D4h] float v23; // [esp+18h] [ebp-D0h] float v24; // [esp+1Ch] [ebp-CCh] float v25; // [esp+20h] [ebp-C8h] float v26; // [esp+24h] [ebp-C4h] float v27; // [esp+28h] [ebp-C0h] float v28; // [esp+2Ch] [ebp-BCh] void *v29; // [esp+30h] [ebp-B8h] int v30; // [esp+34h] [ebp-B4h] int v31; // [esp+38h] [ebp-B0h] int v32; // [esp+3Ch] [ebp-ACh] int v33; // [esp+40h] [ebp-A8h] _DWORD *v34; // [esp+44h] [ebp-A4h] char v35; // [esp+48h] [ebp-A0h] int v36; // [esp+E4h] [ebp-4h] result = a2; v3 = (void **)this; v4 = *(_BYTE *)(this + 8) == 0; v33 = a2; if ( !v4 ) { v5 = (int *)(*(int (**)(void))(**(_DWORD **)(this + 96) + 24))(); v6 = (*((int (__thiscall **)(void **))*v3 + 6))(v3); v7 = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v6 + 68))(v6); v8 = *v5; v9 = *v7; v34 = v7; v10 = (*(int (__thiscall **)(int *, _DWORD, _DWORD, _DWORD))(v8 + 68))(v5, 0, 0, 0); (*(void (__thiscall **)(_DWORD *, int))(v9 + 60))(v34, v10); v11 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); v12 = (_DWORD *)v11; if ( v3[26] ) { v13 = *(void (__thiscall **)(int))(*(_DWORD *)v11 + 84); v25 = 0.0; v26 = 0.0; v27 = 0.0; v28 = 0.0; v13(v11); v14 = *v12; v21 = 0.5; v15 = *(void (__thiscall **)(_DWORD *, float *))(v14 + 76); v22 = 0.5; v23 = 0.0; v24 = 0.0; v15(v12, &v21); v16 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v3[25] + 20))(7); sub_44ED20((int)v12, v16, (int)&v25); v17 = v12[2]; v34 = (_DWORD *)v17; if ( v17 ) InterlockedIncrement((volatile LONG *)(v17 + 4)); v18 = (int)v3[28]; v36 = 0; sub_44EE50(v12, v18); v29 = 0; v30 = 0; v31 = 0; v32 = 1024; sub_85F230(&v29, 0x400u); LOBYTE(v36) = 1; sub_85F910(&v35, (int)&v29); v19 = (int)v3[26]; v20 = (float *)v3[27]; LOBYTE(v36) = 2; sub_85FB50(v20, v19, &v35, 0); sub_44EE50(v12, v17); sub_44EDF0(v12); (*(void (__thiscall **)(_DWORD *, float *))(*v12 + 76))(v12, &v25); LOBYTE(v36) = 1; sub_85F7E0(&v35); operator delete(v29); v36 = -1; if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } } result = sub_8EE030(v3, v33); } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (008EB290) -------------------------------------------------------- LONG __thiscall sub_8EB290(_DWORD *this, int a2, LONG a3) { _DWORD *v3; // edi int v4; // esi int v5; // esi int v6; // esi LONG result; // eax int (__thiscall ***v8)(_DWORD, signed int); // esi v3 = this; if ( this[26] ) { v4 = this[26]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[26] = 0; } } v5 = v3[26]; if ( v5 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v3[26] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } v6 = v3[27]; result = a3; if ( v6 != a3 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); result = a3; } v3[27] = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a3; } } if ( a2 ) { if ( !InterlockedDecrement((volatile LONG *)(a2 + 4)) && a2 ) (**(void (__thiscall ***)(int, signed int))a2)(a2, 1); result = a3; } if ( result ) { v8 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v8 ) result = (**v8)(v8, 1); } } return result; } //----- (008EB3D0) -------------------------------------------------------- _DWORD *__thiscall sub_8EB3D0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax unsigned int v3; // edi _DWORD *v4; // esi int v5; // ebx _DWORD *v6; // ecx _DWORD *v7; // [esp+4h] [ebp-4h] result = (_DWORD *)a2[1]; v3 = 0; v7 = result; if ( result ) { v4 = this + 7; do { v5 = *(_DWORD *)(*a2 + 4 * v3); result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v4 + 4))(v4); result[2] = v5; *result = 0; result[1] = v4[2]; v6 = (_DWORD *)v4[2]; if ( v6 ) *v6 = result; else v4[1] = result; ++v4[3]; ++v3; v4[2] = result; } while ( v3 < (unsigned int)v7 ); } return result; } //----- (008EB440) -------------------------------------------------------- _DWORD *__thiscall sub_8EB440(_DWORD *this) { _DWORD *v1; // esi float Src; // [esp+Ch] [ebp-10h] int v4; // [esp+18h] [ebp-4h] v1 = this; sub_872A60(this); *v1 = &HazeAccumulator::`vftable'; v4 = 0; v1[6] = 0; v1[4] = 0; v1[5] = 0; v1[3] = &NiTPointerList>::`vftable'; v1[10] = 0; v1[8] = 0; v1[9] = 0; v1[7] = &NiTPointerList::`vftable'; v1[16] = 15; v1[15] = 0; *((_BYTE *)v1 + 44) = 0; Src = 100.0; LOBYTE(v4) = 3; sub_9318C0((int)"g_Haze_X_Scale", 4u, &Src); sub_9318C0((int)"g_Haze_Y_Scale", 4u, &Src); return v1; } // 9F42A4: using guessed type void *NiTPointerList::`vftable'; // A23DD8: using guessed type void *NiTPointerList>::`vftable'; // A4128C: using guessed type void *HazeAccumulator::`vftable'; //----- (008EB4F0) -------------------------------------------------------- void *sub_8EB4F0() { return &unk_BA69D0; } //----- (008EB500) -------------------------------------------------------- LONG __thiscall sub_8EB500(_DWORD *this) { _DWORD *v1; // ebx bool v2; // zf void (__thiscall ***v3)(_DWORD, signed int); // esi int v4; // esi _DWORD *v5; // edi _DWORD *v6; // ST24_4 int v7; // esi _DWORD *v8; // edi _DWORD *v9; // ST24_4 int v11; // [esp+18h] [ebp-10h] int v12; // [esp+24h] [ebp-4h] v1 = this; *this = &HazeAccumulator::`vftable'; v2 = this[6] == 0; v12 = 3; if ( !v2 ) { do { sub_6B7B30(v1 + 3, &v11); v3 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v3 ) (**v3)(v3, 1); } while ( v1[6] ); } if ( v1[16] >= 0x10u ) operator delete((void *)v1[11]); v1[16] = 15; v1[15] = 0; v4 = (int)(v1 + 7); *((_BYTE *)v1 + 44) = 0; v1[7] = &NiTPointerListBase,NiGeometry *>::`vftable'; v5 = (_DWORD *)v1[8]; LOBYTE(v12) = 4; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v4 + 8))(v1 + 7, v6); } v1[10] = 0; v1[8] = 0; v1[9] = 0; *(_DWORD *)v4 = &NiTListBase,NiGeometry *>::`vftable'; v7 = (int)(v1 + 3); v1[3] = &NiTPointerListBase,NiPointer>::`vftable'; v8 = (_DWORD *)v1[4]; LOBYTE(v12) = 5; while ( v8 ) { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*(_DWORD *)v7 + 8))(v1 + 3, v9); } v1[6] = 0; v1[4] = 0; v1[5] = 0; *(_DWORD *)v7 = &NiTListBase,NiPointer>::`vftable'; v12 = -1; *v1 = &NiAccumulator::`vftable'; return sub_85BA80(v1); } // 9F4224: using guessed type void *NiTListBase,NiGeometry *>::`vftable'; // 9F4250: using guessed type void *NiTPointerListBase,NiGeometry *>::`vftable'; // 9F62D4: using guessed type void *NiAccumulator::`vftable'; // A23DB8: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A23DC8: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A4128C: using guessed type void *HazeAccumulator::`vftable'; //----- (008EB640) -------------------------------------------------------- void *__thiscall sub_8EB640(void *this, char a2) { void *v2; // esi v2 = this; sub_8EB500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008EB670) -------------------------------------------------------- LONG __thiscall sub_8EB670(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx int v4; // edi int v5; // edi int v6; // edi v1 = this; *this = &CHazeScreenEffect::`vftable'; this[16] = &CHazeScreenEffect::`vftable'; v2 = (void (__stdcall ***)(signed int))this[24]; if ( v2 ) { (**v2)(1); v1[24] = 0; } v3 = (void (__stdcall ***)(signed int))v1[25]; if ( v3 ) { (**v3)(1); v1[25] = 0; } v4 = v1[28]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[27]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[26]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[16] = &CBaseObject::`vftable'; if ( v1[22] >= 0x10u ) operator delete((void *)v1[17]); v1[22] = 15; v1[21] = 0; *((_BYTE *)v1 + 68) = 0; v1[16] = &CNullClass::`vftable'; return sub_8EEC30((void **)v1); } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; // A412D8: using guessed type void *CHazeScreenEffect::`vftable'; // A412E4: using guessed type void *CHazeScreenEffect::`vftable'; //----- (008EB7A0) -------------------------------------------------------- void *sub_8EB7A0() { return &unk_BA69D8; } //----- (008EB7B0) -------------------------------------------------------- void **sub_8EB7B0() { return &dword_B91208; } //----- (008EB7C0) -------------------------------------------------------- void *__thiscall sub_8EB7C0(char *this, char a2) { return sub_8EB930(this - 64, a2); } //----- (008EB7D0) -------------------------------------------------------- int __thiscall sub_8EB7D0(_DWORD *this, void *a2, int a3) { int v3; // esi _DWORD *v4; // ebx _DWORD *v5; // eax int v6; // edi int v7; // edi int v8; // eax int v9; // eax char v10; // al int v11; // eax bool v12; // cf int result; // eax v3 = (int)this; sub_8EED60(this, a2, a3, 1); v4 = 0; *(_DWORD *)(v3 + 88) = 15; *(_DWORD *)(v3 + 84) = 0; *(_BYTE *)(v3 + 68) = 0; *(_DWORD *)(v3 + 64) = &CRTTIClass::`vftable'; *(_DWORD *)v3 = &CHazeScreenEffect::`vftable'; *(_DWORD *)(v3 + 64) = &CHazeScreenEffect::`vftable'; *(_DWORD *)(v3 + 104) = 0; *(_DWORD *)(v3 + 108) = 0; *(_DWORD *)(v3 + 112) = 0; *(_DWORD *)(v3 + 100) = 0; *(_DWORD *)(v3 + 96) = 0; v5 = operator new(0x48u); if ( v5 ) v4 = sub_8EB440(v5); v6 = *(_DWORD *)(v3 + 112); if ( (_DWORD *)v6 != v4 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); *(_DWORD *)(v3 + 112) = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } v7 = dword_BA46D0; if ( dword_BA46D0 ) { v9 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v9 ) { while ( (_UNKNOWN *)v9 != &unk_BA6E58 ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_15; } v10 = 1; } else { LABEL_15: v10 = 0; } v8 = v10 != 0 ? v7 : 0; } else { v8 = 0; } v11 = v8 + 136; if ( !v11 || *(_DWORD *)(v11 + 204) < 0xFFFF0200 ) return v3; v12 = *(_DWORD *)(v11 + 196) < 0xFFFE0101; result = v3; if ( !v12 ) *(_BYTE *)(v3 + 9) = 1; return result; } // A412D8: using guessed type void *CHazeScreenEffect::`vftable'; // A412E4: using guessed type void *CHazeScreenEffect::`vftable'; // A41320: using guessed type void *CRTTIClass::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EB930) -------------------------------------------------------- void *__thiscall sub_8EB930(void *this, char a2) { void *v2; // esi v2 = this; sub_8EB670(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008EB960) -------------------------------------------------------- bool __cdecl sub_8EB960(LPCSTR lpFileName, LPCSTR lpAppName, LPCSTR lpKeyName, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpDefault) { if ( !lpDefault ) return 0; GetPrivateProfileStringA(lpAppName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName); return strcmp(lpReturnedString, "STRING_DEFAULT") != 0; } //----- (008EB9D0) -------------------------------------------------------- bool __cdecl sub_8EB9D0(char *a1) { return _access(a1, 0) == 0; } //----- (008EB9F0) -------------------------------------------------------- char __thiscall sub_8EB9F0(_DWORD *this, int a2) { if ( this[28] != a2 ) this[28] = a2; return 1; } //----- (008EBA20) -------------------------------------------------------- void __userpurge sub_8EBA20(int a1@, int a2@, int a3) { int v3; // esi signed int v4; // eax int v5; // edi int v6; // eax int v7; // edi int v8; // eax float *v9; // eax int v10; // edi int v11; // eax int v12; // edi int v13; // eax int v14; // edi int v15; // eax int v16; // edi int v17; // eax int v18; // edi int v19; // eax int v20; // edi int v21; // eax int v22; // [esp-4h] [ebp-30h] float v23; // [esp+4h] [ebp-28h] float v24; // [esp+8h] [ebp-24h] float Src; // [esp+Ch] [ebp-20h] float v26; // [esp+10h] [ebp-1Ch] float v27; // [esp+14h] [ebp-18h] float v28; // [esp+18h] [ebp-14h] float v29; // [esp+1Ch] [ebp-10h] float v30; // [esp+20h] [ebp-Ch] float v31; // [esp+24h] [ebp-8h] float v32; // [esp+28h] [ebp-4h] v3 = a1; if ( *(_BYTE *)(a1 + 8) ) { v22 = a2; Src = 0.0; v26 = 0.0; v27 = 0.001; v28 = 0.0; v29 = -0.001; v30 = 0.0; v31 = 0.0; v32 = 0.0020000001; v23 = 0.0; v24 = -0.0020000001; sub_9318C0((int)"g_ScreenSift", 8u, &Src); v4 = *(_DWORD *)(v3 + 112); if ( v4 >= 0 ) { if ( v4 <= 2 ) { v10 = **(_DWORD **)(v3 + 96); v11 = (*(int (__stdcall **)(int))(**(_DWORD **)(v3 + 100) + 20))(v22); (*(void (__thiscall **)(_DWORD, int))(v10 + 28))(*(_DWORD *)(v3 + 96), v11); v9 = &v31; goto LABEL_8; } if ( v4 == 3 ) { v5 = **(_DWORD **)(v3 + 96); v6 = (*(int (__stdcall **)(int))(**(_DWORD **)(v3 + 104) + 20))(v22); (*(void (__thiscall **)(_DWORD, int))(v5 + 28))(*(_DWORD *)(v3 + 96), v6); sub_9318C0((int)"g_ScreenSift", 8u, &v29); v7 = **(_DWORD **)(v3 + 104); v8 = (*(int (**)(void))(**(_DWORD **)(v3 + 100) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v7 + 28))(*(_DWORD *)(v3 + 104), v8); v9 = &v27; LABEL_8: sub_9318C0((int)"g_ScreenSift", 8u, v9); v20 = **(_DWORD **)(v3 + 100); v21 = (*(int (**)(void))(**(_DWORD **)(v3 + 96) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v20 + 28))(*(_DWORD *)(v3 + 100), v21); sub_8EE030((void **)v3, a3); return; } } v12 = **(_DWORD **)(v3 + 96); v13 = (*(int (__stdcall **)(int))(**(_DWORD **)(v3 + 104) + 20))(v22); (*(void (__thiscall **)(_DWORD, int))(v12 + 28))(*(_DWORD *)(v3 + 96), v13); sub_9318C0((int)"g_ScreenSift", 8u, &v31); v14 = **(_DWORD **)(v3 + 104); v15 = (*(int (**)(void))(**(_DWORD **)(v3 + 108) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v14 + 28))(*(_DWORD *)(v3 + 104), v15); sub_9318C0((int)"g_ScreenSift", 8u, &v29); v16 = **(_DWORD **)(v3 + 108); v17 = (*(int (**)(void))(**(_DWORD **)(v3 + 104) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v16 + 28))(*(_DWORD *)(v3 + 108), v17); sub_9318C0((int)"g_ScreenSift", 8u, &v27); v18 = **(_DWORD **)(v3 + 104); v19 = (*(int (**)(void))(**(_DWORD **)(v3 + 100) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v18 + 28))(*(_DWORD *)(v3 + 104), v19); v9 = &v23; goto LABEL_8; } } // 8EBA20: could not find valid save-restore pair for edi //----- (008EBBE0) -------------------------------------------------------- int __cdecl sub_8EBBE0(const void *a1, const void *a2) { int result; // eax if ( *(float *)a2 - *(float *)a1 <= 0.0 ) result = -1; else result = 1; return result; } //----- (008EBC10) -------------------------------------------------------- char __thiscall sub_8EBC10(signed int *this) { char *v1; // eax float v2; // ST20_4 double v3; // st7 signed int v4; // ecx double v5; // st7 float v6; // ST20_4 float v7; // ST14_4 float v8; // ST0C_4 float v9; // ST1C_4 double v10; // st5 double v11; // st4 double v12; // st3 double v13; // st2 double v14; // rtt double v15; // st2 double v16; // rt1 double v17; // st2 double v18; // rt2 double v19; // rtt double v20; // st1 float v21; // ST1C_4 double v22; // st2 double v23; // st4 double v24; // rt1 double v25; // st2 double v26; // st3 double v27; // rt2 double v28; // st2 double v29; // st5 float v31; // [esp+4h] [ebp-98h] signed int v32; // [esp+Ch] [ebp-90h] char Src; // [esp+18h] [ebp-84h] char v34; // [esp+1Ch] [ebp-80h] v1 = &v34; v2 = 1.0 / (double)this[31]; v3 = 1.0 / (double)this[30]; v4 = 0; v32 = 0; v31 = v3; v5 = v2; v6 = (0.0 - 1.5) * v2; v7 = v5 * -0.5; v8 = v5 * 0.5; v9 = v5 * 1.5; v10 = v6; v11 = v7; v12 = v8; v13 = v9; while ( 1 ) { v19 = v13; ++v4; *((float *)v1 - 1) = v10; v1 += 32; v20 = (double)v32; v32 = v4; v21 = (v20 - 1.5) * v31; *((float *)v1 - 8) = v21; *((float *)v1 - 6) = v21; *((float *)v1 - 4) = v21; *((float *)v1 - 2) = v21; v22 = v11; v23 = v10; *((float *)v1 - 7) = v22; v24 = v22; v25 = v12; v26 = v24; *((float *)v1 - 5) = v25; v27 = v25; v28 = v19; v29 = v27; *((float *)v1 - 3) = v19; if ( v4 >= 4 ) break; v14 = v28; v15 = v29; v10 = v23; v16 = v15; v17 = v26; v12 = v16; v18 = v17; v13 = v14; v11 = v18; } return sub_9318C0((int)"g_fDownScaleOffsets", 0x80u, &Src); } //----- (008EBD30) -------------------------------------------------------- char __thiscall sub_8EBD30(signed int *this) { char *v1; // eax float v2; // ST18_4 double v3; // st7 signed int v4; // ecx double v5; // st7 float v6; // ST14_4 double v7; // st4 double v8; // st3 float v9; // ST14_4 float v11; // [esp+0h] [ebp-94h] signed int v12; // [esp+4h] [ebp-90h] float v13; // [esp+Ch] [ebp-88h] char Src; // [esp+10h] [ebp-84h] char v15; // [esp+14h] [ebp-80h] v1 = &v15; v2 = 1.0 / (double)this[31]; v3 = 1.0 / (double)this[30]; v4 = 0; v12 = 0; v11 = v3; v5 = v2; v13 = (0.0 - 0.5) * v2; v6 = v5 * 0.5; v7 = v6; do { ++v4; *((float *)v1 - 1) = v13; v1 += 16; v8 = (double)v12; v12 = v4; v9 = (v8 - 0.5) * v11; *((float *)v1 - 4) = v9; *((float *)v1 - 2) = v9; *((float *)v1 - 3) = *(float *)&v7; } while ( v4 < 2 ); return sub_9318C0((int)"g_fDownScaleOffsets", 0x80u, &Src); } //----- (008EBE10) -------------------------------------------------------- char __stdcall sub_8EBE10(float a1) { flt_AC2C94 = a1; return sub_9318C0((int)"g_fGlowness", 4u, &flt_AC2C94); } // AC2C94: using guessed type float flt_AC2C94; //----- (008EBE40) -------------------------------------------------------- char __stdcall sub_8EBE40(float a1) { flt_AC2C98 = a1; return sub_9318C0((int)"g_fBlendFactor", 4u, &flt_AC2C98); } // AC2C98: using guessed type float flt_AC2C98; //----- (008EBE70) -------------------------------------------------------- int __thiscall sub_8EBE70(void *this, int a2) { dword_AC2CA4 = a2; return (*(int (__stdcall **)(int))(*(_DWORD *)this + 56))(a2); } // AC2CA4: using guessed type int dword_AC2CA4; //----- (008EBE90) -------------------------------------------------------- double sub_8EBE90() { return flt_AC2C94; } // AC2C94: using guessed type float flt_AC2C94; //----- (008EBEA0) -------------------------------------------------------- double sub_8EBEA0() { return flt_AC2C98; } // AC2C98: using guessed type float flt_AC2C98; //----- (008EBEB0) -------------------------------------------------------- double sub_8EBEB0() { return flt_AC2CA0; } // AC2CA0: using guessed type float flt_AC2CA0; //----- (008EBEC0) -------------------------------------------------------- int sub_8EBEC0() { return dword_AC2CA4; } // AC2CA4: using guessed type int dword_AC2CA4; //----- (008EBED0) -------------------------------------------------------- double sub_8EBED0() { return flt_AC2C9C; } // AC2C9C: using guessed type float flt_AC2C9C; //----- (008EBEE0) -------------------------------------------------------- int __thiscall sub_8EBEE0(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 36))(); } //----- (008EBEF0) -------------------------------------------------------- char __thiscall sub_8EBEF0(signed int *this, float a2) { signed int *v2; // esi signed int v3; // ecx char *v4; // eax signed int v5; // ecx char *v6; // eax signed int v7; // edi double v8; // st7 double v9; // st6 signed int v10; // ecx int v11; // ebx char *v12; // esi float v13; // ST58_4 double v14; // st5 float v15; // ST64_4 float v16; // ST58_4 float v17; // ST68_4 float v18; // ST58_4 float v19; // ST58_4 float v20; // ST54_4 float v21; // ST58_4 float v22; // ST58_4 float v23; // ST58_4 float v24; // ST54_4 double v25; // st7 int v26; // esi unsigned int v27; // esi char *v28; // edx float *v29; // ecx char *v30; // eax float v31; // ST64_4 float v32; // ST68_4 float v33; // ST5C_4 double v34; // st6 float v35; // ST60_4 float v36; // ST64_4 float v37; // ST68_4 float v38; // ST64_4 float v39; // ST68_4 float v40; // ST5C_4 double v41; // st6 float v42; // ST60_4 float v43; // ST64_4 float v44; // ST68_4 float v45; // ST5C_4 float v46; // ST60_4 float v47; // ST64_4 double v48; // st6 float v49; // ST68_4 float v50; // ST64_4 float v51; // ST68_4 float v52; // ST5C_4 double v53; // st6 float v54; // ST60_4 float v55; // ST64_4 float v56; // ST68_4 char *v57; // edx char *v58; // eax char *v59; // ecx int v60; // edi float v61; // ST5C_4 float v62; // ST60_4 float v63; // ST64_4 float v64; // ST68_4 float v65; // ST5C_4 float v66; // ST60_4 float v67; // ST64_4 float v68; // ST68_4 float v70; // [esp+0h] [ebp-344h] float v71; // [esp+14h] [ebp-330h] float v72; // [esp+1Ch] [ebp-328h] signed int v73; // [esp+20h] [ebp-324h] signed int v74; // [esp+24h] [ebp-320h] int v75; // [esp+28h] [ebp-31Ch] char v76[8]; // [esp+40h] [ebp-304h] char v77; // [esp+48h] [ebp-2FCh] char v78[368]; // [esp+50h] [ebp-2F4h] char Src[8]; // [esp+1C0h] [ebp-184h] char v80; // [esp+1C8h] [ebp-17Ch] char v81; // [esp+1D0h] [ebp-174h] char v82[8]; // [esp+2C0h] [ebp-84h] char v83; // [esp+2C8h] [ebp-7Ch] v2 = this; v3 = 15; v4 = &v77; do { *((float *)v4 - 2) = 0.0; v4 += 24; --v3; *((float *)v4 - 7) = 0.0; *((float *)v4 - 6) = 0.0; *((float *)v4 - 5) = 0.0; } while ( v3 >= 0 ); v5 = 15; v6 = &v80; do { *((float *)v6 - 2) = 0.0; v6 += 16; --v5; *((float *)v6 - 5) = 0.0; *((float *)v6 - 4) = 0.0; *((float *)v6 - 3) = 0.0; } while ( v5 >= 0 ); memset(v76, 0, 0x180u); memset(Src, 0, 0x100u); memset(v82, 0, 0x80u); v7 = 0; v74 = -2; v70 = 1.0 / (double)v2[31]; v71 = 1.0 / (double)v2[30]; v72 = 0.0; v8 = a2; v9 = 2.0; do { v10 = -2; v73 = -2; v11 = abs(v74); v12 = &v76[24 * v7]; do { if ( (double)(v11 + abs(v10)) <= v9 ) { v13 = (double)v74; v14 = v13; v15 = v13 * v70; *((float *)v12 + 4) = v15; v16 = (double)v73; v17 = v16 * v71; *((float *)v12 + 5) = v17; v18 = -((v14 * v14 + v16 * v16) / (v8 * (v9 * v8))); v19 = exp(v18); v20 = v19; v21 = (flt_BA45B4 + flt_BA45B4) * a2 * a2; v22 = sqrt(v21); ++v7; v12 += 24; v23 = 1.0 / v22; v24 = v23 * v20; *((float *)v12 - 6) = v24; *((float *)v12 - 5) = v24; *((float *)v12 - 4) = v24; v10 = v73; *((float *)v12 - 3) = v24; v72 = *((float *)v12 - 3) + v72; v9 = 2.0; v8 = a2; } v73 = ++v10; } while ( v10 <= 2 ); ++v74; } while ( v74 <= 2 ); qsort(v76, v7, 0x18u, sub_8EBBE0); v25 = v72; v26 = 0; if ( v7 >= 4 ) { v27 = ((unsigned int)(v7 - 4) >> 2) + 1; v28 = &v83; v29 = (float *)&v81; v30 = v78; v75 = 4 * v27; do { v31 = *((float *)v30 - 2); v32 = *((float *)v30 - 1); v33 = *((float *)v30 - 4) / v25; v34 = *((float *)v30 - 3) / v25; *(v29 - 4) = v33; v35 = v34; *(v29 - 3) = v35; v36 = v31 / v25; *(v29 - 2) = v36; v37 = v32 / v25; *(v29 - 1) = v37; *((_DWORD *)v28 - 2) = *(_DWORD *)v30; *((_DWORD *)v28 - 1) = *((_DWORD *)v30 + 1); v38 = *((float *)v30 + 4); v39 = *((float *)v30 + 5); v40 = *((float *)v30 + 2) / v25; v41 = *((float *)v30 + 3) / v25; *v29 = v40; v42 = v41; v29[1] = v42; v43 = v38 / v25; v29[2] = v43; v44 = v39 / v25; v29[3] = v44; *(_DWORD *)v28 = *((_DWORD *)v30 + 6); *((_DWORD *)v28 + 1) = *((_DWORD *)v30 + 7); v45 = *((float *)v30 + 8) / v25; v46 = *((float *)v30 + 9) / v25; v47 = *((float *)v30 + 10) / v25; v48 = *((float *)v30 + 11) / v25; v29[4] = v45; v29[5] = v46; v29[6] = v47; v29 += 16; v30 += 96; v28 += 32; --v27; v49 = v48; *(v29 - 9) = v49; *((_DWORD *)v28 - 6) = *((_DWORD *)v30 - 12); *((_DWORD *)v28 - 5) = *((_DWORD *)v30 - 11); v50 = *((float *)v30 - 8); v51 = *((float *)v30 - 7); v52 = *((float *)v30 - 10) / v25; v53 = *((float *)v30 - 9) / v25; *(v29 - 8) = v52; v54 = v53; *(v29 - 7) = v54; v55 = v50 / v25; *(v29 - 6) = v55; v56 = v51 / v25; *(v29 - 5) = v56; *((_DWORD *)v28 - 4) = *((_DWORD *)v30 - 6); *((_DWORD *)v28 - 3) = *((_DWORD *)v30 - 5); } while ( v27 ); v26 = v75; } if ( v26 < v7 ) { v57 = &v82[8 * v26]; v58 = &v78[24 * v26]; v59 = &Src[16 * v26]; v60 = v7 - v26; do { v61 = *((float *)v58 - 4); v62 = *((float *)v58 - 3); v63 = *((float *)v58 - 2); v64 = *((float *)v58 - 1); v59 += 16; v58 += 24; v57 += 8; --v60; v65 = v61 / v25; *((float *)v59 - 4) = v65; v66 = v62 / v25; *((float *)v59 - 3) = v66; v67 = v63 / v25; *((float *)v59 - 2) = v67; v68 = v64 / v25; *((float *)v59 - 1) = v68; *((_DWORD *)v57 - 2) = *((_DWORD *)v58 - 6); *((_DWORD *)v57 - 1) = *((_DWORD *)v58 - 5); } while ( v60 ); } sub_9318C0((int)"g_fSampleWeights", 0x100u, Src); return sub_9318C0((int)"g_fSampleOffsets", 0x80u, v82); } // BA45B4: using guessed type float flt_BA45B4; // 8EBEF0: using guessed type char var_304[8]; // 8EBEF0: using guessed type char Src[8]; // 8EBEF0: using guessed type char var_84[8]; // 8EBEF0: using guessed type char var_2F4[368]; //----- (008EC510) -------------------------------------------------------- char __thiscall sub_8EC510(signed int *this, float a2) { flt_AC2C9C = a2; return sub_8EBEF0(this, a2); } // AC2C9C: using guessed type float flt_AC2C9C; //----- (008EC530) -------------------------------------------------------- int sub_8EC530() { return dword_AAE180; } // AAE180: using guessed type int dword_AAE180; //----- (008EC540) -------------------------------------------------------- float *sub_8EC540() { return off_AC29F8; } // AC29F8: using guessed type float *off_AC29F8; //----- (008EC550) -------------------------------------------------------- int sub_8EC550() { return dword_BA69E0; } // BA69E0: using guessed type int dword_BA69E0; //----- (008EC560) -------------------------------------------------------- unsigned int *sub_8EC560() { return off_AC2A08; } // AC2A08: using guessed type unsigned int *off_AC2A08; //----- (008EC570) -------------------------------------------------------- void *__thiscall sub_8EC570(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A413BC: using guessed type void *CProperty::`vftable'; //----- (008EC5A0) -------------------------------------------------------- void *__thiscall sub_8EC5A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A413D8: using guessed type void *CProperty::`vftable'; //----- (008EC5D0) -------------------------------------------------------- int __thiscall sub_8EC5D0(int this, int a2) { int result; // eax if ( a2 ) result = (*(int (__thiscall **)(int))(this + 16))(a2 - 64 + *(_DWORD *)(this + 20)); else result = (*(int (__thiscall **)(_DWORD))(this + 16))(*(_DWORD *)(this + 20)); return result; } //----- (008EC600) -------------------------------------------------------- int __thiscall sub_8EC600(_DWORD *this, int a2, float a3) { int (__thiscall *v3)(int, _DWORD); // edx int result; // eax v3 = (int (__thiscall *)(int, _DWORD))this[6]; if ( v3 ) { if ( a2 ) result = v3(a2 - 64 + this[7], LODWORD(a3)); else result = v3(this[7], LODWORD(a3)); } return result; } //----- (008EC640) -------------------------------------------------------- void *__thiscall sub_8EC640(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A413F4: using guessed type void *CProperty::`vftable'; //----- (008EC670) -------------------------------------------------------- int __thiscall sub_8EC670(_DWORD *this, int a2, int a3) { int (__thiscall *v3)(int, int); // edx int result; // eax v3 = (int (__thiscall *)(int, int))this[6]; if ( v3 ) { if ( a2 ) result = v3(a2 - 64 + this[7], a3); else result = v3(this[7], a3); } return result; } //----- (008EC6B0) -------------------------------------------------------- char __thiscall sub_8EC6B0(_BYTE *this, void *a2, volatile LONG *a3) { _BYTE *v3; // esi _DWORD *v5; // eax int v6; // eax _DWORD *v7; // eax int v8; // eax _DWORD *v9; // eax int v10; // eax _DWORD *v11; // eax int v12; // eax int v13; // eax int v14; // edi int v15; // eax int v16; // edi int v17; // eax _DWORD *v18; // ebx _DWORD *v19; // edi int v20; // eax _DWORD *v21; // eax _DWORD *v22; // ebx _DWORD *v23; // edi v3 = this; if ( !this[9] ) return 0; v5 = operator new(0x40u); v6 = v5 ? sub_8EED60(v5, "FxDownScale4x4Filter", 1, 0) : 0; *((_DWORD *)v3 + 24) = v6; v7 = operator new(0x40u); v8 = v7 ? sub_8EED60(v7, "FxGlownessBlurringFilter", 1, 0) : 0; *((_DWORD *)v3 + 25) = v8; v9 = operator new(0x40u); v10 = v9 ? sub_8EED60(v9, "FxBlurringFilter", 1, 0) : 0; *((_DWORD *)v3 + 26) = v10; v11 = operator new(0x40u); v12 = v11 ? sub_8EED60(v11, "FxBlurringFilter", 1, 0) : 0; *((_DWORD *)v3 + 27) = v12; v13 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); (*(void (__thiscall **)(int))(*(_DWORD *)v13 + 104))(v13); if ( !sub_8EE120(v3, a2, a3) ) return 0; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v3 + 24) + 12))( *((_DWORD *)v3 + 30), *((_DWORD *)v3 + 31)) ) return 0; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD, _DWORD))(**((_DWORD **)v3 + 25) + 12))( *((_DWORD *)v3 + 30), *((_DWORD *)v3 + 31)) ) return 0; v14 = **((_DWORD **)v3 + 26); v15 = (*(int (**)(void))(**((_DWORD **)v3 + 24) + 24))(); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, int))(v14 + 40))(*((_DWORD *)v3 + 26), v15) ) return 0; v16 = **((_DWORD **)v3 + 27); v17 = (*(int (**)(void))(**((_DWORD **)v3 + 25) + 24))(); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, int))(v16 + 40))(*((_DWORD *)v3 + 27), v17) ) return 0; v18 = (_DWORD *)sub_85C050(*((_DWORD **)v3 + 6), 8); v19 = operator new(0x1Cu); if ( v19 ) { v20 = (*(int (**)(void))(**((_DWORD **)v3 + 24) + 24))(); sub_863970(v19, v20, 0, 0, 1, 0); *v19 = &NiTexturingProperty::ShaderMap::`vftable'; v19[6] = 0; } else { v19 = 0; } sub_863FF0(v18, 1u, (int)v19); v21 = (_DWORD *)(*(int (**)(void))(**((_DWORD **)v3 + 24) + 32))(); v22 = (_DWORD *)sub_85C050(v21, 8); v23 = operator new(0x1Cu); if ( v23 ) { sub_863970(v23, *((_DWORD *)v3 + 5), 0, 0, 1, 0); *v23 = &NiTexturingProperty::ShaderMap::`vftable'; v23[6] = 0; } else { v23 = 0; } sub_863FF0(v22, 0, (int)v23); if ( *((_DWORD *)v3 + 29) == 1 ) sub_8EBC10((signed int *)v3); else sub_8EBD30((signed int *)v3); sub_8EBEF0((signed int *)v3, 1.0); return 1; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EC970) -------------------------------------------------------- char __thiscall sub_8EC970(_DWORD *this, rsize_t a2, int a3) { _DWORD *v3; // esi char result; // al _DWORD *v5; // eax int v6; // eax int v7; // ebx int v8; // edi int v9; // esi v3 = this; result = sub_8EE9D0(this, a2, a3); if ( result ) { v5 = (_DWORD *)(*(int (**)(void))(*(_DWORD *)v3[24] + 32))(); v6 = *(_DWORD *)(sub_85C050(v5, 8) + 64); if ( v6 && *(_DWORD *)(v6 + 12) ) v7 = **(_DWORD **)(v6 + 4); else v7 = 0; v8 = v3[5]; v9 = *(_DWORD *)(v7 + 4); if ( v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *(_DWORD *)(v7 + 4) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } result = 1; } return result; } //----- (008ECA00) -------------------------------------------------------- char __thiscall sub_8ECA00(int this, int a2, int a3) { int v3; // esi int v5; // ecx int v6; // edi int v7; // eax int v8; // edi int v9; // eax _DWORD *v10; // eax _DWORD *v11; // edi int v12; // eax _DWORD *v13; // eax _DWORD *v14; // eax int v15; // ST04_4 _DWORD *v16; // eax v3 = this; if ( !*(_BYTE *)(this + 8) ) return 0; if ( *(_DWORD *)(this + 120) != a2 || *(_DWORD *)(this + 124) != a3 ) { v5 = *(_DWORD *)(this + 96); *(_DWORD *)(v3 + 120) = a2; *(_DWORD *)(v3 + 124) = a3; if ( !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)v5 + 48))(a2, a3) ) return 0; if ( !(*(unsigned __int8 (__stdcall **)(int, int))(**(_DWORD **)(v3 + 100) + 48))(a2, a3) ) return 0; v6 = **(_DWORD **)(v3 + 104); v7 = (*(int (**)(void))(**(_DWORD **)(v3 + 96) + 24))(); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, int))(v6 + 44))(*(_DWORD *)(v3 + 104), v7) ) return 0; v8 = **(_DWORD **)(v3 + 108); v9 = (*(int (**)(void))(**(_DWORD **)(v3 + 100) + 24))(); if ( !(*(unsigned __int8 (__thiscall **)(_DWORD, int))(v8 + 44))(*(_DWORD *)(v3 + 108), v9) ) return 0; v10 = (_DWORD *)sub_85C050(*(_DWORD **)(v3 + 24), 8); v11 = (_DWORD *)sub_814DE0(v10, 1u); v12 = (*(int (**)(void))(**(_DWORD **)(v3 + 96) + 24))(); sub_42AAF0(v11, v12); v13 = (_DWORD *)(*(int (**)(void))(**(_DWORD **)(v3 + 96) + 32))(); v14 = (_DWORD *)sub_85C050(v13, 8); v15 = *(_DWORD *)(v3 + 20); v16 = (_DWORD *)sub_814DE0(v14, 0); sub_42AAF0(v16, v15); } return 1; } //----- (008ECAF0) -------------------------------------------------------- char __thiscall sub_8ECAF0(void *this, float a2) { float v3; // [esp+8h] [ebp+8h] flt_AC2CA0 = a2; v3 = pow(2.0, a2); return sub_8ECA00((int)this, (signed int)v3, (signed int)v3); } // AC2CA0: using guessed type float flt_AC2CA0; //----- (008ECB30) -------------------------------------------------------- void sub_8ECB30() { _DWORD *v0; // eax _DWORD *v1; // eax _DWORD *v2; // eax _DWORD *v3; // eax _DWORD *v4; // eax _DWORD *v5; // eax v0 = operator new(0x20u); if ( v0 ) { v0[1] = "Enable"; v0[2] = &dword_BA6934; *v0 = &CProperty::`vftable'; v0[4] = sub_8EBEE0; v0[5] = 0; v0[6] = sub_8EAC30; v0[7] = 0; } else { v0 = 0; } sub_8E63F0(&dword_BA6934, (int)v0); v1 = operator new(0x20u); if ( v1 ) { v1[1] = "Glowness"; v1[2] = &dword_BA6934; *v1 = &CProperty::`vftable'; v1[4] = sub_8EBE90; v1[5] = 0; v1[6] = sub_8EBE10; v1[7] = 0; } else { v1 = 0; } sub_8E63F0(&dword_BA6934, (int)v1); v2 = operator new(0x20u); if ( v2 ) { v2[1] = "BlendFactor"; v2[2] = &dword_BA6934; *v2 = &CProperty::`vftable'; v2[4] = sub_8EBEA0; v2[5] = 0; v2[6] = sub_8EBE40; v2[7] = 0; } else { v2 = 0; } sub_8E63F0(&dword_BA6934, (int)v2); v3 = operator new(0x20u); if ( v3 ) { v3[1] = "GaussFactor"; v3[2] = &dword_BA6934; *v3 = &CProperty::`vftable'; v3[4] = sub_8EBED0; v3[5] = 0; v3[6] = sub_8EC510; v3[7] = 0; } else { v3 = 0; } sub_8E63F0(&dword_BA6934, (int)v3); v4 = operator new(0x20u); if ( v4 ) { v4[1] = "DownScaling"; v4[2] = &dword_BA6934; *v4 = &CProperty::`vftable'; v4[4] = sub_8EBEB0; v4[5] = 0; v4[6] = sub_8ECAF0; v4[7] = 0; } else { v4 = 0; } sub_8E63F0(&dword_BA6934, (int)v4); v5 = operator new(0x20u); if ( v5 ) { v5[5] = 0; v5[1] = "NumBlurring"; v5[2] = &dword_BA6934; *v5 = &CProperty::`vftable'; v5[4] = sub_8EBEC0; v5[6] = sub_8EBE70; v5[7] = 0; sub_8E63F0(&dword_BA6934, (int)v5); } else { sub_8E63F0(&dword_BA6934, 0); } } // A413BC: using guessed type void *CProperty::`vftable'; // A413D8: using guessed type void *CProperty::`vftable'; // A413F4: using guessed type void *CProperty::`vftable'; //----- (008ECD10) -------------------------------------------------------- LONG __thiscall sub_8ECD10(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx void (__stdcall ***v4)(signed int); // ecx void (__stdcall ***v5)(signed int); // ecx v1 = this; *this = &CGlowScreenEffect::`vftable'; this[16] = &CGlowScreenEffect::`vftable'; v2 = (void (__stdcall ***)(signed int))this[27]; if ( v2 ) (**v2)(1); v3 = (void (__stdcall ***)(signed int))v1[26]; if ( v3 ) (**v3)(1); v4 = (void (__stdcall ***)(signed int))v1[24]; if ( v4 ) (**v4)(1); v5 = (void (__stdcall ***)(signed int))v1[25]; if ( v5 ) (**v5)(1); v1[16] = &CBaseObject::`vftable'; if ( v1[22] >= 0x10u ) operator delete((void *)v1[17]); v1[22] = 15; v1[21] = 0; *((_BYTE *)v1 + 68) = 0; v1[16] = &CNullClass::`vftable'; return sub_8EEC30((void **)v1); } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; // A41494: using guessed type void *CGlowScreenEffect::`vftable'; // A414A4: using guessed type void *CGlowScreenEffect::`vftable'; //----- (008ECDE0) -------------------------------------------------------- void *sub_8ECDE0() { return &unk_BA69E4; } //----- (008ECDF0) -------------------------------------------------------- void **sub_8ECDF0() { return &dword_BA6934; } //----- (008ECE00) -------------------------------------------------------- void *__thiscall sub_8ECE00(char *this, char a2) { return sub_8ECF30(this - 64, a2); } //----- (008ECE10) -------------------------------------------------------- int __thiscall sub_8ECE10(_DWORD *this, void *a2, int a3) { int v3; // esi int v4; // edi int v5; // eax int v6; // eax char v7; // al int v8; // eax bool v9; // cf int result; // eax v3 = (int)this; sub_8EED60(this, a2, a3, 2); *(_DWORD *)(v3 + 88) = 15; *(_DWORD *)(v3 + 84) = 0; *(_BYTE *)(v3 + 68) = 0; *(_DWORD *)(v3 + 64) = &CRTTIClass::`vftable'; *(_DWORD *)v3 = &CGlowScreenEffect::`vftable'; *(_DWORD *)(v3 + 64) = &CGlowScreenEffect::`vftable'; *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)(v3 + 100) = 0; *(_DWORD *)(v3 + 104) = 0; *(_DWORD *)(v3 + 108) = 0; *(_DWORD *)(v3 + 112) = 3; *(_DWORD *)(v3 + 116) = 1; *(_DWORD *)(v3 + 120) = 256; *(_DWORD *)(v3 + 124) = 256; v4 = dword_BA46D0; if ( dword_BA46D0 ) { v6 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E58 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = v7 != 0 ? v4 : 0; } else { v5 = 0; } v8 = v5 + 136; if ( !v8 || *(_DWORD *)(v8 + 204) < 0xFFFF0200 ) return v3; v9 = *(_DWORD *)(v8 + 196) < 0xFFFE0101; result = v3; if ( !v9 ) *(_BYTE *)(v3 + 9) = 1; return result; } // A41494: using guessed type void *CGlowScreenEffect::`vftable'; // A414A4: using guessed type void *CGlowScreenEffect::`vftable'; // A414E4: using guessed type void *CRTTIClass::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008ECF30) -------------------------------------------------------- void *__thiscall sub_8ECF30(void *this, char a2) { void *v2; // esi v2 = this; sub_8ECD10(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008ECF60) -------------------------------------------------------- char __thiscall sub_8ECF60(_BYTE *this, char a2) { char result; // al result = a2; this[116] = a2; return result; } //----- (008ECF70) -------------------------------------------------------- char __thiscall sub_8ECF70(_DWORD *this, rsize_t a2, int a3) { _DWORD *v3; // esi char result; // al int v5; // edi int v6; // eax int *v7; // ecx int v8; // edi int v9; // eax v3 = this; result = sub_8EE9D0(this, a2, a3); if ( result ) { v5 = *(_DWORD *)v3[24]; v6 = (*(int (**)(void))(*(_DWORD *)v3[25] + 24))(); result = (*(int (__thiscall **)(_DWORD, int))(v5 + 44))(v3[24], v6); if ( result ) { v7 = (int *)v3[25]; v8 = *v7; v9 = (*(int (**)(void))(*v7 + 24))(); result = (*(unsigned __int8 (__thiscall **)(_DWORD, int))(v8 + 44))(v3[25], v9) != 0; } } return result; } //----- (008ECFE0) -------------------------------------------------------- void __thiscall sub_8ECFE0(_DWORD **this) { _DWORD **v1; // esi v1 = this; if ( this[24] ) (*(void (**)(void))(*this[24] + 16))(); if ( v1[25] ) (*(void (**)(void))(*v1[25] + 16))(); sub_8EE000(v1); } //----- (008ED010) -------------------------------------------------------- int __thiscall sub_8ED010(void *this) { return (*(int (**)(void))(*(_DWORD *)this + 56))(); } //----- (008ED020) -------------------------------------------------------- char __thiscall sub_8ED020(_BYTE *this, void *a2, volatile LONG *a3) { _BYTE *v3; // esi int v5; // eax _DWORD *v6; // eax int v7; // eax _DWORD *v8; // eax int v9; // eax _DWORD *v10; // eax _DWORD *v11; // ebx _DWORD *v12; // edi int v13; // eax _DWORD *v14; // eax _DWORD *v15; // ebx _DWORD *v16; // edi int v17; // eax char v18; // [esp+10h] [ebp-18h] char v19; // [esp+14h] [ebp-14h] void *v20; // [esp+18h] [ebp-10h] int v21; // [esp+24h] [ebp-4h] v3 = this; if ( !this[9] ) return 0; v5 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 104))(v5); v6 = operator new(0x40u); v20 = v6; v21 = 0; v7 = v6 ? sub_8EED60(v6, "FxAfterImage", 1, 0) : 0; *((_DWORD *)v3 + 24) = v7; v8 = operator new(0x40u); v20 = v8; v21 = 1; v9 = v8 ? sub_8EED60(v8, "FxAfterImage", 1, 0) : 0; *((_DWORD *)v3 + 26) = 0; v21 = -1; *((_DWORD *)v3 + 25) = v9; if ( !sub_8EE120(v3, a2, a3) || !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(**((_DWORD **)v3 + 24) + 12))(a2, a3) || !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(**((_DWORD **)v3 + 25) + 12))(a2, a3) ) { return 0; } v10 = (_DWORD *)(*(int (**)(void))(**((_DWORD **)v3 + 24) + 32))(); v11 = (_DWORD *)sub_85C050(v10, 8); v12 = operator new(0x1Cu); v21 = 2; if ( v12 ) { v13 = (*(int (**)(void))(**((_DWORD **)v3 + 25) + 24))(); sub_863970(v12, v13, 0, 0, 1, 0); *v12 = &NiTexturingProperty::ShaderMap::`vftable'; v12[6] = 0; } else { v12 = 0; } v21 = -1; sub_863FF0(v11, 1u, (int)v12); v14 = (_DWORD *)(*(int (**)(void))(**((_DWORD **)v3 + 25) + 32))(); v15 = (_DWORD *)sub_85C050(v14, 8); v16 = operator new(0x1Cu); v21 = 3; if ( v16 ) { v17 = (*(int (**)(void))(**((_DWORD **)v3 + 24) + 24))(); sub_863970(v16, v17, 0, 0, 1, 0); *v16 = &NiTexturingProperty::ShaderMap::`vftable'; v16[6] = 0; } else { v16 = 0; } v21 = -1; sub_863FF0(v15, 1u, (int)v16); *((_DWORD *)v3 + 28) = 0; sub_931870((int)"g_fRate", &v18, &v19); return 1; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008ED230) -------------------------------------------------------- void __thiscall sub_8ED230(void **this, int a2) { void **v2; // esi int v3; // edx int v4; // ecx int v5; // ecx int *v6; // ebx int v7; // eax int *v8; // eax int v9; // edx int v10; // edi int v11; // eax int *v12; // ecx int v13; // edi int v14; // eax _DWORD *v15; // ecx _DWORD *v16; // ebx _DWORD *v17; // edi int v18; // eax signed int v19; // ebx int v20; // eax int *v21; // eax int v22; // edx int v23; // edi int v24; // eax void *v25; // [esp+10h] [ebp-18h] int v26; // [esp+14h] [ebp-14h] void *v27; // [esp+18h] [ebp-10h] int v28; // [esp+24h] [ebp-4h] int *v29; // [esp+30h] [ebp+8h] v2 = this; if ( *((_BYTE *)this + 8) ) { sub_402BA0((int)&unk_BA6E58, dword_BA46D0); v3 = (int)v2[25]; v25 = v2[24]; v4 = (int)v2[28] + 2; v26 = v3; if ( dword_BA69EC > v4 ) { v5 = (int)*(&v25 + (_DWORD)v2[26]); v2[28] = (void *)dword_BA69EC; v6 = (int *)(*(int (**)(void))(*(_DWORD *)v5 + 24))(); v7 = (*((int (__thiscall **)(void **))*v2 + 6))(v2); v8 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 68))(v7); v9 = *v6; v10 = *v8; v27 = v8; v11 = (*(int (__thiscall **)(int *, _DWORD, _DWORD, _DWORD))(v9 + 68))(v6, 0, 0, 0); (*(void (__thiscall **)(void *, int))(v10 + 60))(v27, v11); v12 = (int *)*(&v25 + (_DWORD)v2[26]); v13 = *v12; v14 = (*(int (**)(void))(*v12 + 20))(); (*(void (__thiscall **)(_DWORD, int))(v13 + 28))(*(&v25 + (_DWORD)v2[26]), v14); v15 = v2[6]; v2[26] = (void *)(1 - (_DWORD)v2[26]); v16 = (_DWORD *)sub_85C050(v15, 8); v17 = operator new(0x1Cu); v27 = v17; v28 = 0; if ( v17 ) { v18 = (*(int (**)(void))(*(_DWORD *)*(&v26 - (_DWORD)v2[26]) + 24))(); sub_863970(v17, v18, 0, 0, 1, 0); *v17 = &NiTexturingProperty::ShaderMap::`vftable'; v17[6] = 0; } else { v17 = 0; } v28 = -1; sub_863FF0(v16, 0, (int)v17); } sub_8EE030(v2, a2); if ( !*((_BYTE *)v2 + 116) ) { v19 = 0; do { v29 = (int *)(*(int (**)(void))(*(_DWORD *)*(&v25 + v19) + 24))(); v20 = (*((int (__thiscall **)(void **))*v2 + 6))(v2); v21 = (int *)(*(int (__thiscall **)(int))(*(_DWORD *)v20 + 68))(v20); v22 = *v29; v23 = *v21; v27 = v21; v24 = (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD))(v22 + 68))(0, 0, 0); (*(void (__thiscall **)(void *, int))(v23 + 60))(v27, v24); ++v19; } while ( v19 < 2 ); *((_BYTE *)v2 + 116) = 1; dword_BA69EC = 0; v2[28] = 0; } ++dword_BA69EC; } } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; // BA69EC: using guessed type int dword_BA69EC; //----- (008ED3F0) -------------------------------------------------------- void *__thiscall sub_8ED3F0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4151C: using guessed type void *CProperty::`vftable'; //----- (008ED420) -------------------------------------------------------- void sub_8ED420() { _DWORD *v0; // eax _DWORD *v1; // eax v0 = operator new(0x20u); if ( v0 ) { v0[1] = "Enable"; v0[2] = &dword_BA6994; *v0 = &CProperty::`vftable'; v0[4] = sub_8EBEE0; v0[5] = 0; v0[6] = sub_8EAC30; v0[7] = 0; } else { v0 = 0; } sub_8E63F0(&dword_BA6994, (int)v0); v1 = operator new(0x20u); if ( v1 ) { v1[5] = 0; v1[1] = "Reset"; v1[2] = &dword_BA6994; *v1 = &CProperty::`vftable'; v1[4] = sub_8ED010; v1[6] = sub_8ECF60; v1[7] = 0; sub_8E63F0(&dword_BA6994, (int)v1); } else { sub_8E63F0(&dword_BA6994, 0); } } // A4151C: using guessed type void *CProperty::`vftable'; //----- (008ED4D0) -------------------------------------------------------- LONG __thiscall sub_8ED4D0(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx v1 = this; *this = &CAfterImageEffect::`vftable'; this[16] = &CAfterImageEffect::`vftable'; v2 = (void (__stdcall ***)(signed int))this[24]; if ( v2 ) { (**v2)(1); v1[24] = 0; } v3 = (void (__stdcall ***)(signed int))v1[25]; if ( v3 ) { (**v3)(1); v1[25] = 0; } v1[16] = &CBaseObject::`vftable'; if ( v1[22] >= 0x10u ) operator delete((void *)v1[17]); v1[22] = 15; v1[21] = 0; *((_BYTE *)v1 + 68) = 0; v1[16] = &CNullClass::`vftable'; return sub_8EEC30((void **)v1); } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; // A41540: using guessed type void *CAfterImageEffect::`vftable'; // A4154C: using guessed type void *CAfterImageEffect::`vftable'; //----- (008ED580) -------------------------------------------------------- void *sub_8ED580() { return &unk_BA69F0; } //----- (008ED590) -------------------------------------------------------- char __thiscall sub_8ED590(_BYTE *this) { return this[116]; } //----- (008ED5A0) -------------------------------------------------------- void **sub_8ED5A0() { return &dword_BA6994; } //----- (008ED5B0) -------------------------------------------------------- void *__thiscall sub_8ED5B0(char *this, char a2) { return sub_8ED710(this - 64, a2); } //----- (008ED5C0) -------------------------------------------------------- _DWORD *__thiscall sub_8ED5C0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &CBaseObject::`vftable'; if ( *((_DWORD *)this + 6) >= 0x10u ) operator delete(*((void **)this + 1)); v2[6] = 15; v2[5] = 0; *((_BYTE *)v2 + 4) = 0; *v2 = &CNullClass::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; //----- (008ED610) -------------------------------------------------------- int __thiscall sub_8ED610(_DWORD *this, void *a2, int a3) { int v3; // esi int v4; // edi int v5; // eax int v6; // eax char v7; // al int v8; // eax bool v9; // cf int result; // eax v3 = (int)this; sub_8EED60(this, a2, a3, 7); *(_DWORD *)(v3 + 88) = 15; *(_DWORD *)(v3 + 84) = 0; *(_BYTE *)(v3 + 68) = 0; *(_DWORD *)(v3 + 64) = &CRTTIClass::`vftable'; *(_DWORD *)v3 = &CAfterImageEffect::`vftable'; *(_DWORD *)(v3 + 64) = &CAfterImageEffect::`vftable'; *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)(v3 + 100) = 0; v4 = dword_BA46D0; if ( dword_BA46D0 ) { v6 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E58 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = v7 != 0 ? v4 : 0; } else { v5 = 0; } v8 = v5 + 136; if ( v8 && *(_DWORD *)(v8 + 204) >= 0xFFFF0200 ) { v9 = *(_DWORD *)(v8 + 196) < 0xFFFE0101; *(_BYTE *)(v3 + 116) = 0; result = v3; if ( !v9 ) *(_BYTE *)(v3 + 9) = 1; } else { result = v3; *(_BYTE *)(v3 + 116) = 0; } return result; } // A41540: using guessed type void *CAfterImageEffect::`vftable'; // A4154C: using guessed type void *CAfterImageEffect::`vftable'; // A4158C: using guessed type void *CRTTIClass::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008ED710) -------------------------------------------------------- void *__thiscall sub_8ED710(void *this, char a2) { void *v2; // esi v2 = this; sub_8ED4D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008ED740) -------------------------------------------------------- void __thiscall sub_8ED740(_BYTE *this, int a2) { _BYTE *v2; // esi int *v3; // ecx int v4; // edi int v5; // eax int v6; // edi int v7; // eax v2 = this; if ( this[8] ) { sub_402BA0((int)&unk_BA6E58, dword_BA46D0); v3 = (int *)*((_DWORD *)v2 + 26); v4 = *v3; v5 = (*(int (**)(void))(*v3 + 20))(); (*(void (__thiscall **)(_DWORD, int))(v4 + 28))(*((_DWORD *)v2 + 26), v5); v6 = **((_DWORD **)v2 + 27); v7 = (*(int (**)(void))(**((_DWORD **)v2 + 27) + 20))(); (*(void (__thiscall **)(_DWORD, int))(v6 + 28))(*((_DWORD *)v2 + 27), v7); sub_8EE030((void **)v2, a2); } } // BA46D0: using guessed type int dword_BA46D0; //----- (008ED7A0) -------------------------------------------------------- bool __thiscall sub_8ED7A0(_DWORD *this, rsize_t a2, int a3) { _DWORD *v3; // esi int v5; // edi int v6; // eax v3 = this; if ( !sub_8EE9D0(this, a2, a3) || !(*(unsigned __int8 (__stdcall **)(_DWORD))(*(_DWORD *)v3[26] + 44))(v3[5]) ) return 0; v5 = *(_DWORD *)v3[27]; v6 = (*(int (**)(void))(*(_DWORD *)v3[26] + 24))(); return (*(unsigned __int8 (__thiscall **)(_DWORD, int))(v5 + 44))(v3[27], v6) != 0; } //----- (008ED800) -------------------------------------------------------- void __thiscall sub_8ED800(_DWORD *this) { _DWORD *v1; // edi int v2; // ecx int v3; // esi int v4; // eax char v5; // al int v6; // esi v1 = this; v2 = dword_BA46D0; v3 = dword_BA46D0; if ( dword_BA46D0 ) { v4 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v4 ) { while ( (_UNKNOWN *)v4 != &unk_BA6E58 ) { v4 = *(_DWORD *)(v4 + 4); if ( !v4 ) goto LABEL_5; } v5 = 1; } else { LABEL_5: v5 = 0; } v2 = v5 != 0 ? v3 : 0; } if ( v1[30] ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 180))(v1[30]); v6 = v1[30]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[30] = 0; } } if ( v1[26] ) (*(void (**)(void))(*(_DWORD *)v1[26] + 16))(); if ( v1[27] ) (*(void (**)(void))(*(_DWORD *)v1[27] + 16))(); sub_8EE000(v1); } // BA46D0: using guessed type int dword_BA46D0; //----- (008ED8B0) -------------------------------------------------------- void *__thiscall sub_8ED8B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &CProperty::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A415AC: using guessed type void *CProperty::`vftable'; //----- (008ED8E0) -------------------------------------------------------- void sub_8ED8E0() { _DWORD *v0; // eax v0 = operator new(0x20u); if ( v0 ) { v0[5] = 0; v0[1] = "Enable"; v0[2] = &dword_BA6964; *v0 = &CProperty::`vftable'; v0[4] = sub_8EBEE0; v0[6] = sub_8EAC30; v0[7] = 0; sub_8E63F0(&dword_BA6964, (int)v0); } else { sub_8E63F0(&dword_BA6964, 0); } } // A415AC: using guessed type void *CProperty::`vftable'; //----- (008ED940) -------------------------------------------------------- LONG __thiscall sub_8ED940(_DWORD *this) { _DWORD *v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi v1 = this; *this = &CDepthOfFieldEffect::`vftable'; this[16] = &CDepthOfFieldEffect::`vftable'; v2 = (void (__stdcall ***)(signed int))this[26]; if ( v2 ) { (**v2)(1); v1[26] = 0; } v3 = (void (__stdcall ***)(signed int))v1[27]; if ( v3 ) { (**v3)(1); v1[27] = 0; } v4 = v1[30]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[30] = 0; } v5 = v1[28]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[28] = 0; } v6 = v1[30]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[28]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[25]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[24]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v1[16] = &CBaseObject::`vftable'; if ( v1[22] >= 0x10u ) operator delete((void *)v1[17]); v1[22] = 15; v1[21] = 0; *((_BYTE *)v1 + 68) = 0; v1[16] = &CNullClass::`vftable'; return sub_8EEC30((void **)v1); } // A41194: using guessed type void *CNullClass::`vftable'; // A411CC: using guessed type void *CBaseObject::`vftable'; // A415C8: using guessed type void *CDepthOfFieldEffect::`vftable'; // A415D4: using guessed type void *CDepthOfFieldEffect::`vftable'; //----- (008EDAE0) -------------------------------------------------------- void *sub_8EDAE0() { return &unk_BA69F8; } //----- (008EDAF0) -------------------------------------------------------- void **sub_8EDAF0() { return &dword_BA6964; } //----- (008EDB00) -------------------------------------------------------- void *__thiscall sub_8EDB00(char *this, char a2) { return sub_8EDC20(this - 64, a2); } //----- (008EDB10) -------------------------------------------------------- int __thiscall sub_8EDB10(_DWORD *this, void *a2, int a3) { int v3; // esi int v4; // edi int v5; // eax int v6; // eax char v7; // al int v8; // eax bool v9; // cf int result; // eax v3 = (int)this; sub_8EED60(this, a2, a3, 6); *(_DWORD *)(v3 + 88) = 15; *(_DWORD *)(v3 + 84) = 0; *(_BYTE *)(v3 + 68) = 0; *(_DWORD *)(v3 + 64) = &CRTTIClass::`vftable'; *(_DWORD *)v3 = &CDepthOfFieldEffect::`vftable'; *(_DWORD *)(v3 + 64) = &CDepthOfFieldEffect::`vftable'; *(_DWORD *)(v3 + 96) = 0; *(_DWORD *)(v3 + 100) = 0; *(_DWORD *)(v3 + 104) = 0; *(_DWORD *)(v3 + 108) = 0; *(_DWORD *)(v3 + 112) = 0; *(_DWORD *)(v3 + 120) = 0; v4 = dword_BA46D0; if ( dword_BA46D0 ) { v6 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E58 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_6; } v7 = 1; } else { LABEL_6: v7 = 0; } v5 = v7 != 0 ? v4 : 0; } else { v5 = 0; } v8 = v5 + 136; if ( !v8 || *(_DWORD *)(v8 + 204) < 0xFFFF0200 ) return v3; v9 = *(_DWORD *)(v8 + 196) < 0xFFFE0101; result = v3; if ( !v9 ) *(_BYTE *)(v3 + 9) = 1; return result; } // A415C8: using guessed type void *CDepthOfFieldEffect::`vftable'; // A415D4: using guessed type void *CDepthOfFieldEffect::`vftable'; // A41610: using guessed type void *CRTTIClass::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EDC20) -------------------------------------------------------- void *__thiscall sub_8EDC20(void *this, char a2) { void *v2; // esi v2 = this; sub_8ED940(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008EDC50) -------------------------------------------------------- char __thiscall sub_8EDC50(_BYTE *this, void *a2, volatile LONG *a3) { _BYTE *v3; // esi _DWORD *v5; // eax int v6; // eax _DWORD *v7; // eax int v8; // eax _DWORD **v9; // edi int v10; // ebx void *v11; // edi _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // edi int v15; // ST14_4 void *v16; // edi int v17; // ecx _DWORD *v18; // eax _DWORD *v19; // ebx _DWORD *v20; // edi _DWORD *v21; // eax _DWORD *v22; // ebx _DWORD *v23; // edi int v24; // eax _DWORD *v25; // ebx _DWORD *v26; // edi int v27; // eax int v28; // [esp+10h] [ebp-28h] int v29; // [esp+14h] [ebp-24h] int v30; // [esp+18h] [ebp-20h] void *v31; // [esp+1Ch] [ebp-1Ch] char v32; // [esp+20h] [ebp-18h] char v33; // [esp+24h] [ebp-14h] void *v34; // [esp+28h] [ebp-10h] int v35; // [esp+34h] [ebp-4h] v3 = this; if ( !this[9] ) return 0; v5 = operator new(0x40u); v34 = v5; v35 = 0; if ( v5 ) v6 = sub_8EED60(v5, "FxBlur", 1, 0); else v6 = 0; *((_DWORD *)v3 + 26) = v6; v7 = operator new(0x40u); v34 = v7; v35 = 1; if ( v7 ) v8 = sub_8EED60(v7, "FxBlur", 1, 0); else v8 = 0; *((_DWORD *)v3 + 27) = v8; v35 = -1; v9 = (_DWORD **)sub_402BA0((int)&unk_BA6E58, dword_BA46D0); v10 = ((int (__thiscall *)(_DWORD **))(*v9)[26])(v9); (*(void (__stdcall **)(_DWORD *, _DWORD))(*v9[33] + 28))(v9[33], 0); sub_4018E0((_DWORD *)v3 + 7, "FxDOFEffectWithNoMRT", 0x14u); v11 = a2; if ( !a2 ) { a2 = (void *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v10 + 60))(v10, 0); v11 = a2; } if ( !a3 ) a3 = (volatile LONG *)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v10 + 64))(v10, 0); if ( !sub_8EE120(v3, v11, a3) ) return 0; v29 = 3; v30 = 2; v28 = 2; v12 = sub_865EB0("reseffect\\MaskMap01.dds", (int)&v28, 0); sub_56FF80((_DWORD *)v3 + 28, (int)v12); if ( *((_DWORD *)v3 + 28) ) { v34 = (void *)sub_85C050(*((_DWORD **)v3 + 6), 8); v13 = operator new(0x1Cu); v14 = v13; v31 = v13; v35 = 8; if ( v13 ) { sub_863970(v13, *((_DWORD *)v3 + 28), 0, 0, 1, 0); *v14 = &NiTexturingProperty::ShaderMap::`vftable'; v14[6] = 0; } else { v14 = 0; } v15 = (int)v14; v16 = v34; v35 = -1; sub_863FF0(v34, 1u, v15); sub_403700(*((_DWORD **)v3 + 6), (int)v16); sub_867680(*(_DWORD *)(*((_DWORD *)v3 + 6) + 184)); sub_85C6F0(*((_DWORD **)v3 + 6)); sub_85C4D0(*((_DWORD **)v3 + 6)); v11 = a2; } v17 = *((_DWORD *)v3 + 26); v3[116] = 0; if ( !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(*(_DWORD *)v17 + 12))(v11, a3) || !(*(unsigned __int8 (__stdcall **)(void *, volatile LONG *))(**((_DWORD **)v3 + 27) + 12))(v11, a3) ) { return 0; } v18 = (_DWORD *)(*(int (**)(void))(**((_DWORD **)v3 + 26) + 32))(); v19 = (_DWORD *)sub_85C050(v18, 8); v20 = operator new(0x1Cu); v35 = 9; if ( v20 ) { sub_863970(v20, *((_DWORD *)v3 + 5), 0, 0, 1, 0); *v20 = &NiTexturingProperty::ShaderMap::`vftable'; v20[6] = 0; } else { v20 = 0; } v35 = -1; sub_863FF0(v19, 0, (int)v20); v21 = (_DWORD *)(*(int (**)(void))(**((_DWORD **)v3 + 27) + 32))(); v22 = (_DWORD *)sub_85C050(v21, 8); v23 = operator new(0x1Cu); v35 = 10; if ( v23 ) { v24 = (*(int (**)(void))(**((_DWORD **)v3 + 26) + 24))(); sub_863970(v23, v24, 0, 0, 1, 0); *v23 = &NiTexturingProperty::ShaderMap::`vftable'; v23[6] = 0; } else { v23 = 0; } v35 = -1; sub_863FF0(v22, 0, (int)v23); v25 = (_DWORD *)sub_85C050(*((_DWORD **)v3 + 6), 8); v26 = operator new(0x1Cu); v35 = 11; if ( v26 ) { v27 = (*(int (__thiscall **)(_DWORD))(**((_DWORD **)v3 + 27) + 24))(*((_DWORD *)v3 + 27)); sub_863970(v26, v27, 0, 0, 1, 0); *v26 = &NiTexturingProperty::ShaderMap::`vftable'; v26[6] = 0; } else { v26 = 0; } v35 = -1; sub_863FF0(v25, 2u, (int)v26); sub_931870((int)"g_fDOFDistance", &v32, &v33); sub_931870((int)"g_fDOFFalloff", &v32, &v33); return 1; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EDFE0) -------------------------------------------------------- int __thiscall sub_8EDFE0(_BYTE *this) { _BYTE *v1; // esi int result; // eax v1 = this; result = (*(int (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)this + 12))(0, 0); v1[8] = result; return result; } //----- (008EE000) -------------------------------------------------------- void __thiscall sub_8EE000(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; if ( this[5] ) { v2 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 180))(v2, v1[5]); } } // BA46D0: using guessed type int dword_BA46D0; //----- (008EE030) -------------------------------------------------------- char __thiscall sub_8EE030(void **this, int a2) { void **v2; // ebx int v3; // edi _DWORD *v4; // esi int v5; // eax char v6; // al int v7; // eax v2 = this; v3 = dword_BA46D0; if ( dword_BA46D0 ) { v5 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v5 ) { while ( (_UNKNOWN *)v5 != &unk_BA6E58 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = (_DWORD *)(v6 != 0 ? v3 : 0); } else { v4 = 0; } sub_44ED20((int)v4, a2, 0); if ( (v4[29] == 1 || v4[30] == 1) && *((_BYTE *)v4 + 128) == 1 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*v4 + 284))(v4, 0); LOBYTE(v7) = sub_868B60(v2[6]); if ( !(dword_BA6A04 & 1) ) { dword_BA6A04 |= 1u; v7 = (*(int (__thiscall **)(_DWORD *))(*v4 + 104))(v4); dword_BA6A00 = v7; } if ( dword_BA6A00 != a2 ) LOBYTE(v7) = sub_44EDF0(v4); return v7; } // BA46D0: using guessed type int dword_BA46D0; // BA6A00: using guessed type int dword_BA6A00; // BA6A04: using guessed type int dword_BA6A04; //----- (008EE120) -------------------------------------------------------- char __thiscall sub_8EE120(_BYTE *this, void *a2, volatile LONG *a3) { _DWORD *v3; // edi int v4; // eax void *v5; // ebx int (__thiscall *v6)(void *); // eax int v7; // eax int v8; // esi int v9; // ecx int v10; // eax int v11; // eax _DWORD *v12; // eax int v13; // esi _DWORD *v14; // ebx int v15; // esi void *v16; // ST1C_4 int *v17; // eax _DWORD *v18; // eax int v19; // esi _DWORD *v20; // ebx int v21; // esi _DWORD *v22; // esi volatile LONG *v23; // eax _DWORD *v24; // eax _DWORD *v25; // eax int v26; // eax _DWORD *v27; // edx int v28; // eax _DWORD *v29; // eax volatile LONG *v30; // eax _DWORD *v31; // ebx int v32; // eax int v34; // ebx int v35; // esi int v36; // esi int v37; // [esp+38h] [ebp-20h] int v38; // [esp+3Ch] [ebp-1Ch] int v39; // [esp+40h] [ebp-18h] void *v40; // [esp+44h] [ebp-14h] int v41; // [esp+48h] [ebp-10h] int v42; // [esp+54h] [ebp-4h] char v43; // [esp+60h] [ebp+8h] volatile LONG *v44; // [esp+60h] [ebp+8h] v3 = this; if ( this[9] ) { v4 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); v5 = (void *)v4; v6 = *(int (__thiscall **)(void *))(*(_DWORD *)v4 + 104); v40 = v5; v7 = v6(v5); v8 = (int)a2; v9 = v7; v41 = v7; if ( !a2 ) { v10 = (*(int (__stdcall **)(void *))(*(_DWORD *)v7 + 60))(a2); v9 = v41; v8 = v10; } v11 = (int)a3; if ( !a3 ) v11 = (*(int (__stdcall **)(volatile LONG *))(*(_DWORD *)v9 + 64))(a3); v39 = 2; v37 = 2; v3[14] = v8; v3[15] = v11; v38 = 3; v12 = sub_867510(v8, v11, (int)v5, &v37); v13 = v3[5]; v14 = v12; if ( (_DWORD *)v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); v3[5] = v14; if ( v14 ) InterlockedIncrement(v14 + 1); } if ( v3[5] ) { v15 = v41; v43 = 0; if ( v3[14] == (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v41 + 60))(v41, 0) && v3[15] == (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v15 + 64))(v15, 0) ) { v43 = 1; } v16 = v40; v17 = (int *)(*(int (**)(void))(*(_DWORD *)v3[5] + 68))(); v18 = sub_867400(v17, (int)v16, v43, 1); v19 = v3[4]; v20 = v18; if ( (_DWORD *)v19 != v18 ) { if ( v19 && !InterlockedDecrement((volatile LONG *)(v19 + 4)) && v19 ) (**(void (__thiscall ***)(int, signed int))v19)(v19, 1); v3[4] = v20; if ( v20 ) InterlockedIncrement(v20 + 1); } if ( v3[4] ) { v22 = operator new(0xC4u); v42 = 0; if ( v22 ) { v23 = (volatile LONG *)operator new(0x70u); a3 = v23; LOBYTE(v42) = 1; if ( v23 ) { v24 = sub_868440(v23, 0, 0, 1u, 1, 1, 4, 1, 2, 1); LOBYTE(v42) = 0; v25 = sub_868C00(v22, (int)v24); } else { LOBYTE(v42) = 0; v25 = sub_868C00(v22, 0); } } else { v25 = 0; } v42 = -1; sub_56FF80(v3 + 6, (int)v25); sub_867880(*(_WORD **)(v3[6] + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v3[6] + 184), 0, 0.0, 0.0, 1.0, 1.0); sub_8681A0(*(_DWORD *)(v3[6] + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); v26 = sub_863360(); v27 = v3 + 7; if ( v3[12] >= 0x10u ) v27 = (_DWORD *)*v27; v28 = (*(int (__thiscall **)(int, _DWORD *, signed int, _DWORD))(*(_DWORD *)v26 + 4))(v26, v27, -1, 0); sub_8633A0(v3[6], v28); v29 = operator new(0x44u); v42 = 2; if ( v29 ) { v30 = sub_863BB0(v29); v44 = v30; } else { v44 = 0; v30 = 0; } a3 = v30; if ( v30 ) InterlockedIncrement(v30 + 1); v42 = 3; v31 = operator new(0x1Cu); v40 = v31; LOBYTE(v42) = 4; if ( v31 ) { sub_863970(v31, v3[5], 0, 0, 1, 0); *v31 = &NiTexturingProperty::ShaderMap::`vftable'; v31[6] = 0; v32 = (int)v31; } else { v32 = 0; } LOBYTE(v42) = 3; if ( v44 && v32 ) { sub_863FF0(v44, 0, v32); sub_403700((_DWORD *)v3[6], (int)v44); sub_867680(*(_DWORD *)(v3[6] + 184)); sub_85C6F0((_DWORD *)v3[6]); sub_85C4D0((_DWORD *)v3[6]); v42 = -1; sub_410C00(&a3); return 1; } v34 = v3[6]; if ( v34 ) { if ( !InterlockedDecrement((volatile LONG *)(v34 + 4)) && v34 ) (**(void (__thiscall ***)(int, signed int))v34)(v34, 1); v3[6] = 0; } v35 = v3[5]; if ( v35 ) { if ( !InterlockedDecrement((volatile LONG *)(v35 + 4)) && v35 ) (**(void (__thiscall ***)(int, signed int))v35)(v35, 1); v3[5] = 0; } v36 = v3[4]; if ( v36 ) { if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) && v36 ) (**(void (__thiscall ***)(int, signed int))v36)(v36, 1); v3[4] = 0; } v42 = -1; if ( v44 && !InterlockedDecrement(v44 + 1) ) (**(void (__stdcall ***)(signed int))v44)(1); } else { v21 = v3[5]; if ( v21 ) { if ( !InterlockedDecrement((volatile LONG *)(v21 + 4)) ) { if ( v21 ) (**(void (__thiscall ***)(int, signed int))v21)(v21, 1); } v3[5] = 0; } } } } return 0; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EE560) -------------------------------------------------------- char __thiscall sub_8EE560(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // esi int v3; // edi int v4; // ebx int v5; // eax char v6; // al volatile LONG *v7; // edi int v8; // eax int *v9; // eax _DWORD *v10; // eax int v11; // ebx _DWORD *v12; // edi int v13; // edi _DWORD *v14; // edi _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // edi int v18; // ebx _DWORD *v19; // eax _DWORD *v20; // ebx _DWORD *v21; // edi int v22; // eax _DWORD *v23; // ecx int v24; // eax int v26; // edi int v27; // edi int v28; // edi void *v29; // [esp+34h] [ebp-10h] void (__stdcall ***v30)(signed int); // [esp+4Ch] [ebp+8h] char v31; // [esp+4Ch] [ebp+8h] v2 = this; v3 = dword_BA46D0; if ( dword_BA46D0 ) { v5 = (*(int (**)(void))(*(_DWORD *)dword_BA46D0 + 4))(); if ( v5 ) { while ( (_UNKNOWN *)v5 != &unk_BA6E58 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } v6 = 1; } else { LABEL_6: v6 = 0; } v4 = v6 != 0 ? v3 : 0; } else { v4 = 0; } sub_863360(); v7 = a2; v29 = (void *)(*(int (__thiscall **)(int))(*(_DWORD *)v4 + 104))(v4); v2[14] = (*(int (__thiscall **)(volatile LONG *))(*a2 + 60))(a2); v2[15] = (*(int (__thiscall **)(volatile LONG *))(*v7 + 64))(v7); v8 = v2[5]; v30 = (void (__stdcall ***)(signed int))v8; if ( (volatile LONG *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v30 ) (**v30)(1); v2[5] = v7; InterlockedIncrement(v7 + 1); } v31 = 0; if ( v2[14] == (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v29 + 60))(v29, 0) && v2[15] == (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v29 + 64))(v29, 0) ) { v31 = 1; } v9 = (int *)(*(int (**)(void))(*(_DWORD *)v2[5] + 68))(); v10 = sub_867400(v9, v4, v31, 0); v11 = v2[4]; v12 = v10; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v2[4] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } if ( !v2[4] ) { v13 = v2[5]; if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) ) { if ( v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); } v2[5] = 0; } return 0; } v14 = operator new(0xC4u); if ( v14 ) { v15 = operator new(0x70u); if ( v15 ) { v16 = sub_868440(v15, 0, 0, 1u, 1, 1, 4, 1, 2, 1); v17 = sub_868C00(v14, (int)v16); } else { v17 = sub_868C00(v14, 0); } } else { v17 = 0; } v18 = v2[6]; if ( (_DWORD *)v18 != v17 ) { if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v2[6] = v17; if ( v17 ) InterlockedIncrement(v17 + 1); } sub_867880(*(_WORD **)(v2[6] + 184), 4, 0, 0); sub_867E60(*(_DWORD *)(v2[6] + 184), 0, 0.0, 0.0, 1.0, 1.0); sub_8681A0(*(_DWORD *)(v2[6] + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); v19 = operator new(0x44u); if ( v19 ) v20 = sub_863BB0(v19); else v20 = 0; if ( v20 ) InterlockedIncrement(v20 + 1); v21 = operator new(0x1Cu); if ( v21 ) { sub_863970(v21, v2[5], 0, 0, 1, 0); *v21 = &NiTexturingProperty::ShaderMap::`vftable'; v21[6] = 0; } else { v21 = 0; } if ( !v20 || !v21 ) { v26 = v2[6]; if ( v26 ) { if ( !InterlockedDecrement((volatile LONG *)(v26 + 4)) && v26 ) (**(void (__thiscall ***)(int, signed int))v26)(v26, 1); v2[6] = 0; } v27 = v2[5]; if ( v27 ) { if ( !InterlockedDecrement((volatile LONG *)(v27 + 4)) && v27 ) (**(void (__thiscall ***)(int, signed int))v27)(v27, 1); v2[5] = 0; } v28 = v2[4]; if ( v28 ) { if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) && v28 ) (**(void (__thiscall ***)(int, signed int))v28)(v28, 1); v2[4] = 0; } if ( v20 && !InterlockedDecrement(v20 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v20)(v20, 1); return 0; } sub_863FF0(v20, 0, (int)v21); sub_403700((_DWORD *)v2[6], (int)v20); sub_867680(*(_DWORD *)(v2[6] + 184)); sub_85C6F0((_DWORD *)v2[6]); sub_85C4D0((_DWORD *)v2[6]); v22 = sub_863360(); v23 = v2 + 7; if ( v2[12] >= 0x10u ) v23 = (_DWORD *)*v23; v24 = (*(int (__thiscall **)(int, _DWORD *, signed int, _DWORD))(*(_DWORD *)v22 + 4))(v22, v23, -1, 0); sub_8633A0(v2[6], v24); if ( !InterlockedDecrement(v20 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v20)(v20, 1); return 1; } // A24B08: using guessed type void *NiTexturingProperty::ShaderMap::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (008EE9D0) -------------------------------------------------------- char __thiscall sub_8EE9D0(_DWORD *this, rsize_t a2, int a3) { _DWORD *v3; // esi char result; // al rsize_t v5; // ebx int v6; // edi _DWORD *v7; // eax int v8; // edi _DWORD *v9; // ebx int v10; // ecx int *v11; // ebx int v12; // edi int v13; // eax int v14; // eax int v15; // [esp+4h] [ebp-Ch] int v16; // [esp+8h] [ebp-8h] int v17; // [esp+Ch] [ebp-4h] int v18; // [esp+18h] [ebp+8h] v3 = this; if ( !this[4] ) return (*(int (__stdcall **)(rsize_t, int))(*this + 12))(a2, a3); v5 = a2; if ( this[14] == a2 && this[15] == a3 ) return 1; this[14] = a2; this[15] = a3; v18 = sub_402BA0((int)&unk_BA6E58, dword_BA46D0); sub_863360(); if ( v3[5] ) { v6 = v3[5]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v3[5] = 0; } } v17 = 2; v15 = 2; v16 = 3; v7 = sub_867510(v5, a3, v18, &v15); v8 = v3[5]; v9 = v7; if ( (_DWORD *)v8 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v3[5] = v9; if ( v9 ) InterlockedIncrement(v9 + 1); } v10 = v3[5]; if ( !v10 ) return 0; v11 = (int *)v3[4]; v12 = *v11; v13 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v10 + 68))(0); (*(void (__thiscall **)(int *, int))(v12 + 88))(v11, v13); v14 = *(_DWORD *)(sub_85C050((_DWORD *)v3[6], 8) + 64); if ( v14 && *(_DWORD *)(v14 + 12) ) { sub_42AAF0(**(_DWORD ***)(v14 + 4), v3[5]); result = 1; } else { sub_42AAF0(0, v3[5]); result = 1; } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (008EEB40) -------------------------------------------------------- char __userpurge sub_8EEB40@(_DWORD *a1@, int a2@, int a3@, volatile LONG *a4) { _DWORD *v4; // esi volatile LONG *v6; // ebx int *v7; // ebx int v8; // edi int v9; // eax int v10; // eax int v11; // ebx int v12; // esi int v13; // edi v4 = a1; if ( !a1[4] ) return (*(int (__stdcall **)(volatile LONG *))(*a1 + 40))(a4); a1[14] = (*(int (__thiscall **)(volatile LONG *, int, int))(*a4 + 60))(a4, a3, a2); v4[15] = (*(int (__thiscall **)(volatile LONG *))(*a4 + 64))(a4); v6 = (volatile LONG *)v4[5]; if ( v6 != a4 ) { if ( v6 && !InterlockedDecrement(v6 + 1) && v6 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); v4[5] = a4; InterlockedIncrement(a4 + 1); } v7 = (int *)v4[4]; v8 = *v7; v9 = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v4[5] + 68))(0); (*(void (__thiscall **)(int *, int))(v8 + 88))(v7, v9); v10 = *(_DWORD *)(sub_85C050((_DWORD *)v4[6], 8) + 64); if ( v10 && *(_DWORD *)(v10 + 12) ) v11 = **(_DWORD **)(v10 + 4); else v11 = 0; v12 = v4[5]; v13 = *(_DWORD *)(v11 + 4); if ( v13 != v12 ) { if ( v13 && !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(v11 + 4) = v12; if ( v12 ) InterlockedIncrement((volatile LONG *)(v12 + 4)); } return 1; } // 8EEB40: could not find valid save-restore pair for edi //----- (008EEC30) -------------------------------------------------------- LONG __thiscall sub_8EEC30(void **this) { void **v1; // esi volatile LONG *v2; // edi volatile LONG *v3; // edi volatile LONG *v4; // edi v1 = this; *this = &CScreenEffect::`vftable'; if ( (unsigned int)this[12] >= 0x10 ) operator delete(this[7]); v1[12] = (void *)15; v1[11] = 0; *((_BYTE *)v1 + 28) = 0; v2 = (volatile LONG *)v1[6]; if ( v2 && !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(void *, signed int))v2)((void *)v2, 1); v3 = (volatile LONG *)v1[5]; if ( v3 && !InterlockedDecrement(v3 + 1) && v3 ) (**(void (__thiscall ***)(void *, signed int))v3)((void *)v3, 1); v4 = (volatile LONG *)v1[4]; if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); return sub_85BA80(v1); } // A41688: using guessed type void *CScreenEffect::`vftable'; //----- (008EED20) -------------------------------------------------------- void *sub_8EED20() { return &unk_BA6A08; } //----- (008EED30) -------------------------------------------------------- void *__thiscall sub_8EED30(void *this, char a2) { void *v2; // esi v2 = this; sub_8EEC30((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (008EED60) -------------------------------------------------------- int __thiscall sub_8EED60(_DWORD *this, void *a2, int a3, int a4) { int v4; // esi int v5; // edi int v6; // eax bool v7; // zf int result; // eax v4 = (int)this; sub_8EAC60(this, a3, a4); *(_DWORD *)v4 = &CScreenEffect::`vftable'; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)(v4 + 20) = 0; *(_DWORD *)(v4 + 24) = 0; v5 = v4 + 28; *(_DWORD *)(v5 + 20) = 15; *(_DWORD *)(v5 + 16) = 0; *(_BYTE *)v5 = 0; sub_4018E0((_DWORD *)(v4 + 28), a2, strlen((const char *)a2)); *(_DWORD *)(v4 + 56) = 0; *(_DWORD *)(v4 + 60) = 0; v6 = sub_863360(); if ( *(_DWORD *)(v4 + 48) >= 0x10u ) v5 = *(_DWORD *)v5; v7 = (*(int (__thiscall **)(int, int, signed int, _DWORD))(*(_DWORD *)v6 + 4))(v6, v5, -1, 0) == 0; result = v4; if ( !v7 ) *(_BYTE *)(v4 + 9) = 1; return result; } // A41688: using guessed type void *CScreenEffect::`vftable'; //----- (008EEE30) -------------------------------------------------------- void __thiscall sub_8EEE30(int this, void *a2) { if ( *(_BYTE *)(this + 8) ) sub_4018E0((_DWORD *)(this + 28), a2, strlen((const char *)a2)); } //----- (008EEE60) -------------------------------------------------------- int __stdcall sub_8EEE60(int a1, int a2, int a3, int a4) { return 0; } //----- (008EEE70) -------------------------------------------------------- _DWORD *__thiscall sub_8EEE70(_DWORD *this, int a2, int a3, int a4) { int v5; // [esp+1Ch] [ebp-18h] int v6; // [esp+20h] [ebp-14h] return sub_8F0330(this + 3, v5, v6, a2, a3, a4); } //----- (008EEEE0) -------------------------------------------------------- int __thiscall sub_8EEEE0(_DWORD *this) { int result; // eax _DWORD *v2; // [esp+0h] [ebp-3Ch] char v3; // [esp+1Ch] [ebp-20h] int v4; // [esp+24h] [ebp-18h] int v5; // [esp+28h] [ebp-14h] int v6; // [esp+2Ch] [ebp-10h] unsigned int i; // [esp+34h] [ebp-8h] unsigned int v8; // [esp+38h] [ebp-4h] v2 = this; result = sub_8F0670(this + 3); v8 = result; for ( i = 0; i < v8; ++i ) { sub_8F0420(v2 + 3, &v3); (*(void (__thiscall **)(_DWORD *, int, int, int))(*v2 + 56))(v2, v4, v5, v6); result = i + 1; } return result; } //----- (008EEF60) -------------------------------------------------------- _DWORD *__thiscall sub_8EEF60(void *this) { int v2; // [esp+4h] [ebp-18h] int v3; // [esp+8h] [ebp-14h] v3 = (*(int (__thiscall **)(void *, void *, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)this + 44))( this, this, 1, 0, 0, 0, 0, 0); return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v2); } //----- (008EEFC0) -------------------------------------------------------- _DWORD *__stdcall sub_8EEFC0(int a1, _DWORD *a2) { int v3; // [esp+4h] [ebp-18h] int v4; // [esp+8h] [ebp-14h] int v5; // [esp+Ch] [ebp-10h] int v6; // [esp+10h] [ebp-Ch] int v7; // [esp+14h] [ebp-8h] int v8; // [esp+18h] [ebp-4h] v8 = 0; v7 = 0; v6 = 0; v5 = 0; v3 = 3; v4 = a1; if ( a2 ) { v6 = a2[2]; v7 = a2[3]; v8 = a2[4]; } return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v3); } //----- (008EF040) -------------------------------------------------------- _DWORD *__thiscall sub_8EF040(void *this, int a2, _DWORD *a3) { int v4; // [esp+4h] [ebp-18h] int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+10h] [ebp-Ch] int v8; // [esp+14h] [ebp-8h] int v9; // [esp+18h] [ebp-4h] v5 = (*(int (__thiscall **)(void *, void *, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)this + 44))( this, this, 4, 0, 0, 0, 0, 0); v6 = a2; if ( a3 ) { v7 = a3[2]; v8 = a3[3]; v9 = a3[4]; } return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v4); } //----- (008EF0D0) -------------------------------------------------------- _DWORD *__thiscall sub_8EF0D0(void *this, int a2, _DWORD *a3) { int v4; // [esp+4h] [ebp-18h] int v5; // [esp+8h] [ebp-14h] int v6; // [esp+Ch] [ebp-10h] int v7; // [esp+10h] [ebp-Ch] int v8; // [esp+14h] [ebp-8h] int v9; // [esp+18h] [ebp-4h] v5 = (*(int (__thiscall **)(void *, void *, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)this + 44))( this, this, 5, 0, 0, 0, 0, 0); v6 = a2; if ( a3 ) { v7 = a3[2]; v8 = a3[3]; v9 = a3[4]; } return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v4); } //----- (008EF160) -------------------------------------------------------- _DWORD *__thiscall sub_8EF160(void *this) { int v2; // [esp+4h] [ebp-18h] int v3; // [esp+8h] [ebp-14h] v3 = (*(int (__thiscall **)(void *, void *, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)this + 44))( this, this, 6, 0, 0, 0, 0, 0); return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v2); } //----- (008EF1C0) -------------------------------------------------------- _DWORD *__stdcall sub_8EF1C0(int a1, _DWORD *a2) { int v3; // [esp+4h] [ebp-18h] int v4; // [esp+8h] [ebp-14h] int v5; // [esp+Ch] [ebp-10h] int v6; // [esp+10h] [ebp-Ch] int v7; // [esp+14h] [ebp-8h] int v8; // [esp+18h] [ebp-4h] v8 = 0; v7 = 0; v6 = 0; v5 = 0; v3 = 7; v4 = a1; if ( a2 ) { v6 = a2[2]; v7 = a2[3]; v8 = a2[4]; } return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v3); } //----- (008EF240) -------------------------------------------------------- _DWORD *__thiscall sub_8EF240(void *this, _DWORD *a2) { int v3; // [esp+4h] [ebp-18h] int v4; // [esp+8h] [ebp-14h] int v5; // [esp+10h] [ebp-Ch] int v6; // [esp+14h] [ebp-8h] int v7; // [esp+18h] [ebp-4h] v4 = (*(int (__thiscall **)(void *, void *, signed int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)this + 44))( this, this, 7, 0, 0, 0, 0, 0); if ( a2 ) { v5 = a2[2]; v6 = a2[3]; v7 = a2[4]; } return sub_8EFFA0((_DWORD **)&unk_BA6A18, &v3); } //----- (008EF2C0) -------------------------------------------------------- _DWORD *__thiscall sub_8EF2C0(_DWORD *this) { _DWORD *v1; // ST08_4 _DWORD *v2; // ST2C_4 _DWORD *v3; // ST28_4 _DWORD *v4; // ST24_4 v1 = this; *this = &PgFrameMgr::`vftable'; v2 = this + 3; sub_8F00C0(this + 3, 37); *v2 = &NiTPointerMap::`vftable'; v3 = v1 + 7; v1[7] = &NiTListBase,void *>::`vftable'; v3[3] = 0; v3[1] = 0; v3[2] = 0; *v3 = &NiTPointerListBase,void *>::`vftable'; *v3 = &NiTPointerList::`vftable'; *v3 = &PgTList::`vftable'; v4 = v1 + 11; v1[11] = &NiTListBase,void *>::`vftable'; v4[3] = 0; v4[1] = 0; v4[2] = 0; *v4 = &NiTPointerListBase,void *>::`vftable'; *v4 = &NiTPointerList::`vftable'; *v4 = &PgTList::`vftable'; sub_8F0C00(v1 + 15, 8); *((_BYTE *)v1 + 4) = 1; v1[2] = 0; return v1; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; // 9F8344: using guessed type void *NiTPointerList::`vftable'; // A416D4: using guessed type void *PgTList::`vftable'; // A416E4: using guessed type void *NiTPointerMap::`vftable'; // A41704: using guessed type void *PgFrameMgr::`vftable'; //----- (008EF3F0) -------------------------------------------------------- void *__thiscall sub_8EF3F0(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8EF420(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008EF420) -------------------------------------------------------- void __thiscall sub_8EF420(void *this) { _DWORD *v1; // ST08_4 _DWORD *v2; // ST34_4 _DWORD *v3; // ST20_4 v1 = this; *(_DWORD *)this = &PgFrameMgr::`vftable'; operator delete[](*((void **)this + 15)); v2 = v1 + 11; v1[11] = &PgTList::`vftable'; sub_521E30(v1 + 11); *v2 = &NiTPointerListBase,void *>::`vftable'; sub_521E30(v1 + 11); *v2 = &NiTListBase,void *>::`vftable'; v3 = v1 + 7; v1[7] = &PgTList::`vftable'; sub_521E30(v1 + 7); *v3 = &NiTPointerListBase,void *>::`vftable'; sub_521E30(v1 + 7); *v3 = &NiTListBase,void *>::`vftable'; sub_8F0D20(v1 + 3); } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; // A416D4: using guessed type void *PgTList::`vftable'; // A41704: using guessed type void *PgFrameMgr::`vftable'; //----- (008EF530) -------------------------------------------------------- char __thiscall sub_8EF530(_BYTE *this) { this[4] = 0; return 1; } //----- (008EF550) -------------------------------------------------------- _DWORD *__thiscall sub_8EF550(_DWORD *this) { int *v1; // ST58_4 int *v2; // ST40_4 _DWORD *v4; // [esp+4h] [ebp-68h] int v5; // [esp+18h] [ebp-54h] unsigned int i; // [esp+20h] [ebp-4Ch] _DWORD *v7; // [esp+5Ch] [ebp-10h] _DWORD *v8; // [esp+5Ch] [ebp-10h] int v9; // [esp+60h] [ebp-Ch] int v10; // [esp+64h] [ebp-8h] int v11; // [esp+68h] [ebp-4h] v4 = this; v7 = (_DWORD *)this[8]; while ( v7 ) { v1 = v7 + 2; v7 = (_DWORD *)*v7; v11 = *v1; sub_8F0140(v4 + 3, v11, &v9); (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 40))(v9); } sub_521E30(v4 + 7); v8 = (_DWORD *)v4[12]; while ( v8 ) { v2 = v8 + 2; v8 = (_DWORD *)*v8; v11 = *v2; sub_8F0140(v4 + 3, v11, &v9); (*(void (__thiscall **)(int))(*(_DWORD *)v9 + 40))(v9); } sub_521E30(v4 + 11); for ( i = 0; i < v4[4]; ++i ) { if ( *(_DWORD *)(v4[5] + 4 * i) ) { v5 = *(_DWORD *)(v4[5] + 4 * i); goto LABEL_13; } } v5 = 0; LABEL_13: v10 = v5; while ( v10 ) { sub_8F01C0(v4 + 3, (unsigned int)&v10, &v11, &v9); if ( v9 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 60))(v9, 1); } return sub_905AF0(v4 + 3); } //----- (008EF6C0) -------------------------------------------------------- int __thiscall sub_8EF6C0(_DWORD *this, int a2) { int result; // eax int v3; // [esp+Ch] [ebp-4h] v3 = 0; if ( sub_8F0140(this + 3, a2, &v3) ) result = v3; else result = 0; return result; } //----- (008EF700) -------------------------------------------------------- bool __thiscall sub_8EF700(_DWORD *this, int a2) { _DWORD *v2; // ST0C_4 _DWORD *v4; // [esp+4h] [ebp-14h] _DWORD *v5; // [esp+8h] [ebp-10h] _DWORD *v6; // [esp+14h] [ebp-4h] v5 = (_DWORD *)this[8]; while ( v5 ) { v6 = v5; v2 = v5 + 2; v5 = (_DWORD *)*v5; if ( a2 == *v2 ) { v4 = v6; return v4 != 0; } } v4 = 0; return v4 != 0; } //----- (008EF770) -------------------------------------------------------- _DWORD *__thiscall sub_8EF770(_DWORD *this, int a2) { _DWORD *result; // eax _DWORD *v3; // ST18_4 _DWORD *v4; // eax _DWORD *v5; // [esp+0h] [ebp-20h] _DWORD *v6; // [esp+Ch] [ebp-14h] _DWORD *v7; // [esp+10h] [ebp-10h] _DWORD *v8; // [esp+1Ch] [ebp-4h] v5 = this; result = this; v7 = (_DWORD *)this[8]; while ( v7 ) { v8 = v7; v3 = v7 + 2; result = (_DWORD *)*v7; v7 = (_DWORD *)*v7; if ( a2 == *v3 ) { result = v8; v6 = v8; goto LABEL_7; } } v6 = 0; LABEL_7: if ( !v6 ) { v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[7] + 4))(this + 7); v4[2] = a2; result = sub_88DD80(v5 + 7, v4); } return result; } //----- (008EF810) -------------------------------------------------------- int __thiscall sub_8EF810(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // ST30_4 int v4; // [esp+24h] [ebp-18h] int *v5; // [esp+28h] [ebp-14h] int *v6; // [esp+34h] [ebp-8h] int v7; // [esp+38h] [ebp-4h] result = (int)this; v5 = (int *)this[8]; while ( v5 ) { v6 = v5; v3 = v5 + 2; result = *v5; v5 = (int *)*v5; if ( a2 == *v3 ) { result = (int)v6; v4 = (int)v6; goto LABEL_7; } } v4 = 0; LABEL_7: v7 = v4; if ( v4 ) result = sub_8F0270(this + 7, (_DWORD **)&v7); return result; } //----- (008EF890) -------------------------------------------------------- _DWORD *__thiscall sub_8EF890(_DWORD *this, int a2) { _DWORD *result; // eax _DWORD *v3; // ST18_4 _DWORD *v4; // eax _DWORD *v5; // [esp+0h] [ebp-20h] _DWORD *v6; // [esp+Ch] [ebp-14h] _DWORD *v7; // [esp+10h] [ebp-10h] _DWORD *v8; // [esp+1Ch] [ebp-4h] v5 = this; result = this; v7 = (_DWORD *)this[12]; while ( v7 ) { v8 = v7; v3 = v7 + 2; result = (_DWORD *)*v7; v7 = (_DWORD *)*v7; if ( a2 == *v3 ) { result = v8; v6 = v8; goto LABEL_7; } } v6 = 0; LABEL_7: if ( !v6 ) { v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[11] + 4))(this + 11); v4[2] = a2; result = sub_88DD80(v5 + 11, v4); } return result; } //----- (008EF930) -------------------------------------------------------- int __thiscall sub_8EF930(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // ST30_4 int v4; // [esp+24h] [ebp-18h] int *v5; // [esp+28h] [ebp-14h] int *v6; // [esp+34h] [ebp-8h] int v7; // [esp+38h] [ebp-4h] result = (int)this; v5 = (int *)this[12]; while ( v5 ) { v6 = v5; v3 = v5 + 2; result = *v5; v5 = (int *)*v5; if ( a2 == *v3 ) { result = (int)v6; v4 = (int)v6; goto LABEL_7; } } v4 = 0; LABEL_7: v7 = v4; if ( v4 ) result = sub_8F0270(this + 11, (_DWORD **)&v7); return result; } //----- (008EF9B0) -------------------------------------------------------- int __thiscall sub_8EF9B0(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; sub_8EF810(this, a2); return sub_8EF930(v2, a2); } //----- (008EF9E0) -------------------------------------------------------- int __thiscall sub_8EF9E0(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; sub_8EF770(this, a2); return sub_8EF930(v2, a2); } //----- (008EFA10) -------------------------------------------------------- int __thiscall sub_8EFA10(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; sub_8EF890(this, a2); return sub_8EF810(v2, a2); } //----- (008EFA40) -------------------------------------------------------- bool __thiscall sub_8EFA40(_DWORD *this, int a2, int a3) { bool result; // al int v4; // [esp+4h] [ebp-4h] v4 = sub_8EF6C0(this, a2); if ( v4 ) result = (*(unsigned __int8 (__thiscall **)(int, int))(*(_DWORD *)v4 + 28))(v4, a3) != 0; else result = 0; return result; } //----- (008EFA90) -------------------------------------------------------- char __thiscall sub_8EFA90(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 int v4; // [esp+4h] [ebp-4h] v2 = this; sub_8EF9B0(this, a2); v4 = sub_8EF6C0(v2, a2); if ( !v4 ) return 0; (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 40))(v4); return 1; } //----- (008EFAE0) -------------------------------------------------------- char __thiscall sub_8EFAE0(_DWORD *this, int a2) { int v3; // ST08_4 _DWORD *v4; // [esp+0h] [ebp-Ch] int v5; // [esp+8h] [ebp-4h] v4 = this; if ( !a2 ) return 0; while ( a2 ) { v5 = sub_8EF6C0(v4, a2); if ( !v5 ) return 0; v3 = *(_DWORD *)(v5 + 28); sub_8EFA90(v4, a2); a2 = v3; } return 1; } //----- (008EFB40) -------------------------------------------------------- char __thiscall sub_8EFB40(_DWORD *this, int a2, int a3) { _DWORD *v4; // [esp+0h] [ebp-4h] v4 = this; if ( !sub_8EFA40(this, a2, a3) ) return 0; sub_8EF9E0(v4, a2); return 1; } //----- (008EFB80) -------------------------------------------------------- char __thiscall sub_8EFB80(_DWORD *this, int a2, int a3, int a4) { _DWORD *v5; // [esp+0h] [ebp-4h] v5 = this; sub_8EFAE0(this, a2); if ( !sub_8EFA40(v5, a3, a4) ) return 0; sub_8EF9E0(v5, a3); return 1; } //----- (008EFBD0) -------------------------------------------------------- char __thiscall sub_8EFBD0(_DWORD *this, int a2, int a3, int a4) { _DWORD *v5; // [esp+0h] [ebp-8h] int v6; // [esp+4h] [ebp-4h] v5 = this; sub_8EFA10(this, a2); if ( !sub_8EFA40(v5, a3, a4) ) return 0; v6 = sub_8EF6C0(v5, a3); if ( !v6 ) return 0; *(_DWORD *)(v6 + 28) = a2; sub_8EF9E0(v5, a3); return 1; } //----- (008EFC40) -------------------------------------------------------- char __thiscall sub_8EFC40(_DWORD *this, int a2) { _DWORD *v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] v3 = this; v5 = sub_8EF6C0(this, a2); if ( !v5 ) return 0; v4 = *(_DWORD *)(v5 + 28); sub_8EFA90(v3, a2); if ( v4 ) sub_8EF9E0(v3, v4); return 1; } //----- (008EFCA0) -------------------------------------------------------- char __thiscall sub_8EFCA0(_DWORD *this, int a2, int *a3) { int v4; // [esp+1Ch] [ebp-1Ch] v4 = sub_8EF6C0(this, a2); if ( !v4 ) return 0; sub_8F0330((_DWORD *)(v4 + 12), *a3, a3[1], a3[2], a3[3], a3[4]); return 1; } //----- (008EFD30) -------------------------------------------------------- int __thiscall sub_8EFD30(_DWORD *this) { int result; // eax _DWORD *v2; // [esp+4h] [ebp-3Ch] int v3; // [esp+20h] [ebp-20h] int v4; // [esp+24h] [ebp-1Ch] int v5; // [esp+28h] [ebp-18h] unsigned int i; // [esp+38h] [ebp-8h] unsigned int v7; // [esp+3Ch] [ebp-4h] v2 = this; result = sub_8F0670(this + 15); v7 = result; for ( i = 0; i < v7; ++i ) { sub_8F05A0(v2 + 15, &v3); switch ( v3 ) { case 0: sub_8EFA40(v2, v4, (int)&v4); break; case 1: sub_8EFA90(v2, v4); break; case 2: sub_8EFAE0(v2, v4); break; case 3: sub_8EFB40(v2, v4, (int)&v4); break; case 4: sub_8EFB80(v2, v4, v5, (int)&v4); break; case 5: sub_8EFBD0(v2, v4, v5, (int)&v4); break; case 6: sub_8EFC40(v2, v4); break; case 7: sub_8EFCA0(v2, v4, &v4); break; default: break; } result = i + 1; } return result; } //----- (008EFE50) -------------------------------------------------------- void __stdcall sub_8EFE50(int a1, int a2, int a3) { ; } //----- (008EFE60) -------------------------------------------------------- _DWORD *__thiscall sub_8EFE60(_DWORD *this, float a2) { _DWORD *result; // eax int *v3; // ST08_4 _DWORD *v4; // [esp+4h] [ebp-18h] _DWORD *v5; // [esp+18h] [ebp-4h] v4 = this; sub_8EFD30(this); result = v4; v5 = (_DWORD *)v4[8]; while ( v5 ) { v3 = v5 + 2; v5 = (_DWORD *)*v5; result = (_DWORD *)sub_8EF6C0(v4, *v3); if ( result ) result = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD))(*result + 32))(result, LODWORD(a2)); } return result; } //----- (008EFED0) -------------------------------------------------------- int __thiscall sub_8EFED0(_DWORD *this) { int result; // eax int *v2; // ST10_4 int v3; // eax int v4; // eax _DWORD *v5; // [esp+0h] [ebp-11Ch] int v6; // [esp+Ch] [ebp-110h] char v7; // [esp+14h] [ebp-108h] int *v8; // [esp+118h] [ebp-4h] v5 = this; result = (int)this; v8 = (int *)this[8]; while ( v8 ) { v2 = v8 + 2; v8 = (int *)*v8; v3 = sub_8EF6C0(v5, *v2); v6 = v3; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 48))(v3); result = sprintf(&v7, aCa, v4); if ( v6 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 36))(v6); } return result; } //----- (008EFFA0) -------------------------------------------------------- _DWORD *__thiscall sub_8EFFA0(_DWORD **this, _DWORD *a2) { return sub_8EFFC0(this, a2); } //----- (008EFFC0) -------------------------------------------------------- _DWORD *__thiscall sub_8EFFC0(_DWORD **this, _DWORD *a2) { return sub_8F04E0(this + 15, *a2, a2[1], a2[2], a2[3], a2[4], a2[5]); } //----- (008F0010) -------------------------------------------------------- int __thiscall sub_8F0010(_DWORD *this, int a2) { int v3; // eax int v4; // eax _DWORD *v5; // [esp+0h] [ebp-10h] v5 = this; if ( !a2 ) return 0; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 44))(a2); if ( !sub_8EF6C0(v5, v3) ) { v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 44))(a2); sub_90E440(v5 + 3, v4, a2); } return (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 44))(a2); } //----- (008F0080) -------------------------------------------------------- char __thiscall sub_8F0080(_DWORD *this, int a2, int a3) { return sub_8EFB40(this, a2, a3); } //----- (008F00A0) -------------------------------------------------------- int __thiscall sub_8F00A0(int this, int a2) { int result; // eax result = this; *(_BYTE *)(this + 4) = 1; *(_DWORD *)(this + 8) = a2; return result; } //----- (008F00C0) -------------------------------------------------------- _DWORD *__thiscall sub_8F00C0(_DWORD *this, int a2) { _DWORD *v2; // ST0C_4 v2 = this; *this = &NiTMapBase,void *,PgFrameWork *>::`vftable'; this[1] = a2; this[3] = 0; this[2] = operator new[](4 * this[1]); memset((void *)v2[2], 0, 4 * v2[1]); return v2; } // A41720: using guessed type void *NiTMapBase,void *,PgFrameWork *>::`vftable'; //----- (008F0140) -------------------------------------------------------- char __thiscall sub_8F0140(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v4; // [esp+0h] [ebp-Ch] _DWORD *i; // [esp+4h] [ebp-8h] v4 = this; for ( i = *(_DWORD **)(this[2] + 4 * (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2)); i; i = (_DWORD *)*i ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v4 + 8))(v4, a2, i[1]) ) { *a3 = i[2]; return 1; } } return 0; } //----- (008F01C0) -------------------------------------------------------- unsigned int __thiscall sub_8F01C0(_DWORD *this, unsigned int a2, _DWORD *a3, _DWORD *a4) { unsigned int result; // eax _DWORD *v5; // [esp+0h] [ebp-Ch] _DWORD *v6; // [esp+4h] [ebp-8h] int v7; // [esp+4h] [ebp-8h] unsigned int i; // [esp+8h] [ebp-4h] v5 = this; v6 = *(_DWORD **)a2; *a3 = *(_DWORD *)(*(_DWORD *)a2 + 4); *a4 = v6[2]; if ( *v6 ) { result = a2; *(_DWORD *)a2 = *v6; } else { for ( i = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 4))(this, v6[1]) + 1; ; ++i ) { result = i; if ( i >= v5[1] ) break; v7 = *(_DWORD *)(v5[2] + 4 * i); if ( v7 ) { result = *(_DWORD *)(v5[2] + 4 * i); *(_DWORD *)a2 = v7; return result; } } *(_DWORD *)a2 = 0; } return result; } //----- (008F0270) -------------------------------------------------------- int __thiscall sub_8F0270(_DWORD *this, _DWORD **a2) { int result; // eax int v3; // ST20_4 _DWORD *v4; // [esp+0h] [ebp-24h] _DWORD *v5; // [esp+14h] [ebp-10h] _DWORD *v6; // [esp+18h] [ebp-Ch] _DWORD *v7; // [esp+20h] [ebp-4h] v4 = this; v5 = *a2; if ( *a2 == (_DWORD *)this[1] ) { *a2 = (_DWORD *)*v5; result = sub_8F06D0(this); } else if ( v5 == (_DWORD *)this[2] ) { *a2 = 0; result = sub_6B7860(this); } else { v6 = (_DWORD *)v5[1]; v7 = (_DWORD *)*v5; *a2 = (_DWORD *)*v5; if ( v6 ) *v6 = v7; if ( v7 ) v7[1] = v6; v3 = v5[2]; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*this + 8))(this, v5); --v4[3]; result = v3; } return result; } //----- (008F0330) -------------------------------------------------------- _DWORD *__thiscall sub_8F0330(_DWORD *this, int a2, int a3, int a4, int a5, int a6) { _DWORD *v6; // eax _DWORD *v7; // ecx _DWORD *result; // eax _DWORD *v9; // [esp+0h] [ebp-1Ch] v9 = this; if ( this[2] == -1 ) { this[2] = 0; v6 = (_DWORD *)*this; *v6 = a2; v6[1] = a3; v6[2] = a4; v6[3] = a5; v6[4] = a6; this[3] = 1; } else { if ( this[2] == this[3] ) sub_8F0750((void **)this, (void *)(2 * this[1])); v7 = (_DWORD *)(20 * v9[3] + *v9); *v7 = a2; v7[1] = a3; v7[2] = a4; v7[3] = a5; v7[4] = a6; ++v9[3]; } result = v9; if ( v9[3] == v9[1] ) { result = v9; v9[3] = 0; } return result; } //----- (008F0420) -------------------------------------------------------- _DWORD *__thiscall sub_8F0420(_DWORD *this, _DWORD *a2) { int *v2; // eax _DWORD *v3; // eax int v4; // ecx _DWORD *v6; // [esp+4h] [ebp-1Ch] int v7; // [esp+8h] [ebp-18h] int v8; // [esp+Ch] [ebp-14h] int v9; // [esp+10h] [ebp-10h] int v10; // [esp+14h] [ebp-Ch] int v11; // [esp+18h] [ebp-8h] v6 = this; v2 = (int *)(20 * this[2] + *this); v7 = *v2; v8 = v2[1]; v9 = v2[2]; v10 = v2[3]; v11 = v2[4]; v3 = this; v4 = this[2] + 1; v3[2] = v4; if ( v4 == v6[1] ) v6[2] = 0; if ( v6[2] == v6[3] ) { v6[2] = -1; v6[3] = 0; } *a2 = v7; a2[1] = v8; a2[2] = v9; a2[3] = v10; a2[4] = v11; return a2; } //----- (008F04E0) -------------------------------------------------------- _DWORD *__thiscall sub_8F04E0(_DWORD **this, char a2, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // ST04_4 _DWORD *result; // eax _DWORD *v9; // [esp+4h] [ebp-28h] v9 = this; if ( (_DWORD *)((char *)this[2] + 1) == 0 ) { this[2] = 0; sub_8F0BA0(*this, &a2); v9[3] = 1; } else { if ( this[2] == this[3] ) sub_8F08F0((void **)this, 2 * (_DWORD)this[1]); v7 = (_DWORD *)(*v9 + 24 * v9[3]++); sub_8F0BA0(v7, &a2); } result = v9; if ( v9[3] == v9[1] ) { result = v9; v9[3] = 0; } return result; } //----- (008F05A0) -------------------------------------------------------- _DWORD *__thiscall sub_8F05A0(_DWORD *this, _DWORD *a2) { int v2; // eax _DWORD *v4; // [esp+4h] [ebp-1Ch] int v5; // [esp+8h] [ebp-18h] int v6; // [esp+Ch] [ebp-14h] int v7; // [esp+10h] [ebp-10h] int v8; // [esp+14h] [ebp-Ch] int v9; // [esp+18h] [ebp-8h] int v10; // [esp+1Ch] [ebp-4h] v4 = this; v10 = 0; v9 = 0; v8 = 0; v7 = 0; v6 = 0; v5 = 0; sub_8F0BA0(&v5, (_DWORD *)(*this + 24 * this[2])); v2 = v4[2] + 1; v4[2] = v2; if ( v2 == v4[1] ) v4[2] = 0; if ( v4[2] == v4[3] ) { v4[2] = -1; v4[3] = 0; } *a2 = v5; a2[1] = v6; a2[2] = v7; a2[3] = v8; a2[4] = v9; a2[5] = v10; return a2; } //----- (008F0670) -------------------------------------------------------- int __thiscall sub_8F0670(_DWORD *this) { if ( this[2] == -1 ) return 0; if ( this[2] < this[3] ) return this[3] - this[2]; return this[3] + this[1] - this[2]; } //----- (008F06D0) -------------------------------------------------------- int __thiscall sub_8F06D0(_DWORD *this) { int v1; // ST0C_4 _DWORD *v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] v3 = this; v4 = this[1]; this[1] = *(_DWORD *)this[1]; if ( this[1] ) *(_DWORD *)(this[1] + 4) = 0; else this[2] = 0; v1 = *(_DWORD *)(v4 + 8); (*(void (__thiscall **)(_DWORD *, int))(*this + 8))(this, v4); --v3[3]; return v1; } //----- (008F0750) -------------------------------------------------------- int __thiscall sub_8F0750(void **this, void *a2) { _DWORD *v2; // edx char *v3; // eax _DWORD *v4; // eax char *v5; // ecx _DWORD *v6; // eax char *v7; // ecx int result; // eax void **v9; // [esp+0h] [ebp-18h] void *v10; // [esp+Ch] [ebp-Ch] char *v11; // [esp+10h] [ebp-8h] unsigned int j; // [esp+14h] [ebp-4h] unsigned int k; // [esp+14h] [ebp-4h] unsigned int i; // [esp+14h] [ebp-4h] v9 = this; v11 = (char *)operator new[](20 * (_DWORD)a2); v10 = 0; if ( v9[2] < v9[3] ) { for ( i = (unsigned int)v9[2]; i < (unsigned int)v9[3]; ++i ) { v6 = (char *)*v9 + 20 * i; v7 = &v11[20 * (_DWORD)v10]; *(_DWORD *)v7 = *v6; *((_DWORD *)v7 + 1) = v6[1]; *((_DWORD *)v7 + 2) = v6[2]; *((_DWORD *)v7 + 3) = v6[3]; *((_DWORD *)v7 + 4) = v6[4]; v10 = (char *)v10 + 1; } } else { for ( j = (unsigned int)v9[2]; j < (unsigned int)v9[1]; ++j ) { v2 = (char *)*v9 + 20 * j; v3 = &v11[20 * (_DWORD)v10]; *(_DWORD *)v3 = *v2; *((_DWORD *)v3 + 1) = v2[1]; *((_DWORD *)v3 + 2) = v2[2]; *((_DWORD *)v3 + 3) = v2[3]; *((_DWORD *)v3 + 4) = v2[4]; v10 = (char *)v10 + 1; } for ( k = 0; k < (unsigned int)v9[3]; ++k ) { v4 = (char *)*v9 + 20 * k; v5 = &v11[20 * (_DWORD)v10]; *(_DWORD *)v5 = *v4; *((_DWORD *)v5 + 1) = v4[1]; *((_DWORD *)v5 + 2) = v4[2]; *((_DWORD *)v5 + 3) = v4[3]; *((_DWORD *)v5 + 4) = v4[4]; v10 = (char *)v10 + 1; } } v9[2] = 0; v9[3] = v10; v9[1] = a2; operator delete[](*v9); *v9 = v11; return result; } //----- (008F08F0) -------------------------------------------------------- int __thiscall sub_8F08F0(void **this, int a2) { _DWORD *v2; // ST20_4 _DWORD *v3; // ST1C_4 _DWORD *v4; // ST18_4 _DWORD *v5; // ST14_4 _DWORD *v6; // ST10_4 _DWORD *v7; // ST0C_4 int result; // eax _DWORD *v9; // [esp+0h] [ebp-44h] void **v10; // [esp+4h] [ebp-40h] int v11; // [esp+20h] [ebp-24h] _DWORD *i; // [esp+24h] [ebp-20h] _DWORD *v13; // [esp+2Ch] [ebp-18h] void *v14; // [esp+38h] [ebp-Ch] unsigned int k; // [esp+40h] [ebp-4h] unsigned int l; // [esp+40h] [ebp-4h] unsigned int j; // [esp+40h] [ebp-4h] v10 = this; v13 = operator new[](24 * a2); if ( v13 ) { v11 = a2; for ( i = v13; --v11 >= 0; i += 6 ) { i[5] = 0; i[4] = 0; i[3] = 0; i[2] = 0; i[1] = 0; *i = 0; } v9 = v13; } else { v9 = 0; } v14 = 0; if ( v10[2] < v10[3] ) { for ( j = (unsigned int)v10[2]; j < (unsigned int)v10[3]; ++j ) { v6 = &v9[6 * (_DWORD)v14]; v14 = (char *)v14 + 1; v7 = (char *)*v10 + 24 * j; *v6 = *v7; v6[1] = v7[1]; v6[2] = v7[2]; v6[3] = v7[3]; v6[4] = v7[4]; v6[5] = v7[5]; } } else { for ( k = (unsigned int)v10[2]; k < (unsigned int)v10[1]; ++k ) { v2 = &v9[6 * (_DWORD)v14]; v14 = (char *)v14 + 1; v3 = (char *)*v10 + 24 * k; *v2 = *v3; v2[1] = v3[1]; v2[2] = v3[2]; v2[3] = v3[3]; v2[4] = v3[4]; v2[5] = v3[5]; } for ( l = 0; l < (unsigned int)v10[3]; ++l ) { v4 = &v9[6 * (_DWORD)v14]; v14 = (char *)v14 + 1; v5 = (char *)*v10 + 24 * l; *v4 = *v5; v4[1] = v5[1]; v4[2] = v5[2]; v4[3] = v5[3]; v4[4] = v5[4]; v4[5] = v5[5]; } } v10[2] = 0; v10[3] = v14; v10[1] = (void *)a2; operator delete[](*v10); *v10 = v9; return result; } //----- (008F0BA0) -------------------------------------------------------- _DWORD *__thiscall sub_8F0BA0(_DWORD *this, _DWORD *a2) { *this = *a2; this[1] = a2[1]; this[2] = a2[2]; this[3] = a2[3]; this[4] = a2[4]; this[5] = a2[5]; return this; } //----- (008F0C00) -------------------------------------------------------- _DWORD *__thiscall sub_8F0C00(_DWORD *this, int a2) { _DWORD *v3; // [esp+0h] [ebp-1Ch] _DWORD *v4; // [esp+4h] [ebp-18h] int v5; // [esp+8h] [ebp-14h] _DWORD *i; // [esp+Ch] [ebp-10h] _DWORD *v7; // [esp+10h] [ebp-Ch] v4 = this; v7 = operator new[](24 * a2); if ( v7 ) { v5 = a2; for ( i = v7; --v5 >= 0; i += 6 ) { i[5] = 0; i[4] = 0; i[3] = 0; i[2] = 0; i[1] = 0; *i = 0; } v3 = v7; } else { v3 = 0; } *v4 = v3; v4[1] = a2; v4[2] = -1; v4[3] = 0; return v4; } //----- (008F0CE0) -------------------------------------------------------- int __thiscall sub_8F0CE0(_DWORD *this, unsigned int a2) { return a2 % this[1]; } //----- (008F0D00) -------------------------------------------------------- bool __stdcall sub_8F0D00(int a1, int a2) { return a1 == a2; } //----- (008F0D20) -------------------------------------------------------- void __thiscall sub_8F0D20(_DWORD *this) { _DWORD *v1; // ST08_4 v1 = this; *this = &NiTPointerMap::`vftable'; sub_905AF0(this); *v1 = &NiTMapBase,void *,PgFrameWork *>::`vftable'; sub_905AF0(v1); operator delete[]((void *)v1[2]); } // A416E4: using guessed type void *NiTPointerMap::`vftable'; // A41720: using guessed type void *NiTMapBase,void *,PgFrameWork *>::`vftable'; //----- (008F0DA0) -------------------------------------------------------- void __thiscall sub_8F0DA0(_DWORD *this) { _DWORD *v1; // ST04_4 v1 = this; *this = &NiTMapBase,void *,PgFrameWork *>::`vftable'; sub_905AF0(this); operator delete[]((void *)v1[2]); } // A41720: using guessed type void *NiTMapBase,void *,PgFrameWork *>::`vftable'; //----- (008F0DE0) -------------------------------------------------------- int *sub_8F0DE0() { return sub_40DF10(); } //----- (008F0E00) -------------------------------------------------------- int __thiscall sub_8F0E00(_DWORD *this) { _DWORD *v1; // ST04_4 int result; // eax v1 = this; *this = &PgTList::`vftable'; sub_521E30(this); *v1 = &NiTPointerListBase,void *>::`vftable'; result = sub_521E30(v1); *v1 = &NiTListBase,void *>::`vftable'; return result; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; // A416D4: using guessed type void *PgTList::`vftable'; //----- (008F0E80) -------------------------------------------------------- void **__thiscall sub_8F0E80(void **this, char a2) { void **v3; // [esp+0h] [ebp-10h] v3 = this; *this = &NiTMapBase,void *,PgFrameWork *>::`vftable'; sub_905AF0(this); operator delete[](v3[2]); if ( a2 & 1 ) operator delete(v3); return v3; } // A41720: using guessed type void *NiTMapBase,void *,PgFrameWork *>::`vftable'; //----- (008F0ED0) -------------------------------------------------------- void *__thiscall sub_8F0ED0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-18h] v3 = this; sub_8F0D20(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F0F00) -------------------------------------------------------- _DWORD *__thiscall sub_8F0F00(_DWORD *this, char a2) { _DWORD *v3; // [esp+4h] [ebp-20h] v3 = this; *this = &PgTList::`vftable'; sub_521E30(this); *v3 = &NiTPointerListBase,void *>::`vftable'; sub_521E30(v3); *v3 = &NiTListBase,void *>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // 9F806C: using guessed type void *NiTListBase,void *>::`vftable'; // 9F80AC: using guessed type void *NiTPointerListBase,void *>::`vftable'; // A416D4: using guessed type void *PgTList::`vftable'; //----- (008F10C0) -------------------------------------------------------- void *__thiscall sub_8F10C0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F10F0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F10F0) -------------------------------------------------------- LONG __thiscall sub_8F10F0(_DWORD *this) { *this = &PgWinFrame::`vftable'; this[58] = &PgWinFrame::`vftable'; return sub_8F3CC0(this); } // A4174C: using guessed type void *PgWinFrame::`vftable'; // A4176C: using guessed type void *PgWinFrame::`vftable'; //----- (008F1120) -------------------------------------------------------- _DWORD *__thiscall sub_8F1120(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[74] = a2; return result; } //----- (008F1140) -------------------------------------------------------- int __thiscall sub_8F1140(void *this, _BYTE *a2) { int result; // eax int v3; // ST0C_4 int v4; // [esp+0h] [ebp-10h] int v5; // [esp+8h] [ebp-8h] v5 = (int)this; result = (*(int (__thiscall **)(void *))(*(_DWORD *)this + 312))(this); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; sub_8F1EF0((_DWORD *)v5, a2); byte_BA6AA4 = 0; byte_BA6AB0 = 0; if ( dword_BA6AA8 >= 1 ) { if ( *a2 ) byte_BA6AA4 = 1; if ( *a2 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 524))(v5) && !dword_BA6A7C ) { dword_BA6A7C = v5; if ( !*(_BYTE *)(v5 + 309) ) { *(_BYTE *)(v5 + 309) = 1; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 164))(v5) - pt.x; *(_DWORD *)(v5 + 300) = v3; *(_DWORD *)(v5 + 312) = v3; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 168))(v5) - pt.y; *(_DWORD *)(v5 + 304) = v4; *(_DWORD *)(v5 + 316) = v4; } } else { *(_BYTE *)(v5 + 309) = 0; } } else if ( dword_BA6AB4 >= 1 ) { if ( dword_BA6A7C == v5 ) { dword_BA6A7C = 0; byte_BA6AB0 = 1; sub_8F1710((_DWORD *)v5); } *(_BYTE *)(v5 + 309) = 0; } else if ( *a2 && (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 524))(v5) && !*(_BYTE *)(v5 + 309) ) { nullsub_2(); } if ( pt.y < dword_BA6A84 || pt.x < dword_BA6A80 || pt.x > dword_AC2F6C || pt.y > dword_AC2F70 ) { *(_BYTE *)(v5 + 309) = 0; dword_BA6A7C = 0; } if ( *(_BYTE *)(v5 + 309) && dword_BA6A7C == v5 ) { sub_8F1750((_BYTE *)v5, *(_DWORD *)(v5 + 300) + pt.x, *(_DWORD *)(v5 + 304) + pt.y); nullsub_3(v4); } if ( byte_BA6AA4 && dword_BA6AA8 ) --dword_BA6AA8; byte_BA6AA4 = 0; result = (unsigned __int8)byte_BA6AB0; if ( byte_BA6AB0 && dword_BA6AB4 ) --dword_BA6AB4; byte_BA6AB0 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; if ( dword_BA6AB4 ) result = dword_BA6AB4-- - 1; } return result; } // 444490: using guessed type int nullsub_2(void); // 4444A0: using guessed type int __cdecl nullsub_3(_DWORD); // AC2F6C: using guessed type int dword_AC2F6C; // AC2F70: using guessed type int dword_AC2F70; // BA6A7C: using guessed type int dword_BA6A7C; // BA6A80: using guessed type int dword_BA6A80; // BA6A84: using guessed type int dword_BA6A84; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; //----- (008F1440) -------------------------------------------------------- char __thiscall sub_8F1440(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8) { volatile LONG **v9; // [esp+0h] [ebp-4h] v9 = this; if ( !sub_8F43D0(this, a2, a3, a4, a5, a7, a8) ) return 0; (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 64))(v9, 0); sub_8F1710(v9); (*((void (__thiscall **)(volatile LONG **, int))*v9 + 129))(v9, a6); return 1; } //----- (008F14B0) -------------------------------------------------------- char __thiscall sub_8F14B0(void *this, int a2, int a3, int *a4, char a5, unsigned int a6, unsigned int a7, unsigned int a8, unsigned int a9, int a10, int a11, int a12, int a13) { char result; // al void *v14; // [esp+4h] [ebp-3Ch] volatile LONG *v15; // [esp+30h] [ebp-10h] v14 = this; v15 = sub_8FAC60(a4, a5, a6, a7, a8, a9); if ( v15 ) InterlockedIncrement(v15 + 1); if ( !v15 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, volatile LONG *, int, int, int, int))(*(_DWORD *)v14 + 536))( v14, a2, a3, v15, a10, a11, a12, a13) ) { if ( v15 ) sub_402270(v15); result = 1; } else { if ( v15 ) sub_402270(v15); result = 0; } return result; } //----- (008F15E0) -------------------------------------------------------- char __thiscall sub_8F15E0(volatile LONG **this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7) { volatile LONG **v8; // [esp+0h] [ebp-14h] volatile LONG **v9; // [esp+4h] [ebp-10h] v8 = this; if ( !sub_8F2900(this, a2, a3, 1, 1, a4, a6, a7) ) return 0; v9 = v8 + 72; if ( v8[72] ) { if ( *v9 ) sub_402270(*v9); *v9 = 0; if ( *v9 ) InterlockedIncrement(*v9 + 1); } (*((void (__thiscall **)(volatile LONG **, _DWORD))*v8 + 64))(v8, 0); (*((void (__thiscall **)(volatile LONG **, int))*v8 + 129))(v8, a5); return 1; } //----- (008F1690) -------------------------------------------------------- char __thiscall sub_8F1690(_BYTE *this) { return this[328]; } //----- (008F16B0) -------------------------------------------------------- char __thiscall sub_8F16B0(_BYTE *this) { return this[329]; } //----- (008F16D0) -------------------------------------------------------- char __thiscall sub_8F16D0(_BYTE *this) { return this[330]; } //----- (008F16F0) -------------------------------------------------------- char __thiscall sub_8F16F0(_BYTE *this) { return this[331]; } //----- (008F1710) -------------------------------------------------------- int __thiscall sub_8F1710(_DWORD *this) { _DWORD *v1; // ST00_4 int result; // eax v1 = this; this[80] = (*(int (__thiscall **)(_DWORD *))(*this + 164))(this); result = (*(int (__thiscall **)(_DWORD *))(*v1 + 168))(v1); v1[81] = result; return result; } //----- (008F1750) -------------------------------------------------------- int __thiscall sub_8F1750(_BYTE *this, int a2, int a3) { _BYTE *v4; // [esp+0h] [ebp-28h] v4 = this; if ( sub_8F1690(this) ) { if ( v4[332] ) { *((_DWORD *)v4 + 80) += a2 - dword_BA6A80; if ( abs(*((_DWORD *)v4 + 80) - dword_BA6A80) <= 15 ) { *((_DWORD *)v4 + 75) = dword_BA6A80 - pt.x; a2 = dword_BA6A80; } else { v4[332] = 0; *((_DWORD *)v4 + 80) = a2; a2 = *((_DWORD *)v4 + 80); *((_DWORD *)v4 + 75) = *((_DWORD *)v4 + 78); } } else if ( abs(a2 - dword_BA6A80) <= 15 ) { v4[332] = 1; *((_DWORD *)v4 + 80) = a2; *((_DWORD *)v4 + 75) = dword_BA6A80 - pt.x; a2 = dword_BA6A80; } } if ( sub_8F16B0(v4) ) { if ( v4[333] ) { *((_DWORD *)v4 + 81) += a3 - dword_BA6A84; if ( abs(*((_DWORD *)v4 + 81) - dword_BA6A84) <= 15 ) { *((_DWORD *)v4 + 76) = dword_BA6A84 - pt.y; a3 = dword_BA6A84; } else { v4[333] = 0; *((_DWORD *)v4 + 81) = a3; a3 = *((_DWORD *)v4 + 81); *((_DWORD *)v4 + 76) = *((_DWORD *)v4 + 79); } } else if ( abs(a3 - dword_BA6A84) <= 15 ) { v4[333] = 1; *((_DWORD *)v4 + 81) = a3; *((_DWORD *)v4 + 76) = dword_BA6A84 - pt.y; a3 = dword_BA6A84; } } if ( sub_8F16D0(v4) ) { if ( v4[334] ) { *((_DWORD *)v4 + 80) += a2 + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1 - dword_AC2F6C; if ( abs(*((_DWORD *)v4 + 80) + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1 - dword_AC2F6C) <= 15 ) { a2 = dword_AC2F6C - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1); *((_DWORD *)v4 + 75) = dword_AC2F6C - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1) - pt.x; } else { v4[334] = 0; *((_DWORD *)v4 + 80) = a2; a2 = *((_DWORD *)v4 + 80); *((_DWORD *)v4 + 75) = *((_DWORD *)v4 + 78); } } else if ( abs(a2 + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1 - dword_AC2F6C) <= 15 ) { v4[334] = 1; *((_DWORD *)v4 + 80) = a2; a2 = dword_AC2F6C - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1); *((_DWORD *)v4 + 75) = dword_AC2F6C - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 144))(v4) - 1) - pt.x; } } if ( sub_8F16F0(v4) ) { if ( v4[335] ) { *((_DWORD *)v4 + 81) += a3 + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1 - dword_AC2F70; if ( abs(*((_DWORD *)v4 + 81) + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1 - dword_AC2F70) <= 15 ) { a3 = dword_AC2F70 - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1); *((_DWORD *)v4 + 76) = dword_AC2F70 - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1) - pt.y; } else { v4[335] = 0; *((_DWORD *)v4 + 81) = a3; a3 = *((_DWORD *)v4 + 81); *((_DWORD *)v4 + 76) = *((_DWORD *)v4 + 79); } } else if ( abs(a3 + (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1 - dword_AC2F70) <= 15 ) { v4[335] = 1; *((_DWORD *)v4 + 81) = a3; a3 = dword_AC2F70 - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1); *((_DWORD *)v4 + 76) = dword_AC2F70 - ((*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 148))(v4) - 1) - pt.y; } } return (*(int (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v4 + 308))(v4, a2, a3); } // AC2F6C: using guessed type int dword_AC2F6C; // AC2F70: using guessed type int dword_AC2F70; // BA6A80: using guessed type int dword_BA6A80; // BA6A84: using guessed type int dword_BA6A84; //----- (008F1CC0) -------------------------------------------------------- int __thiscall sub_8F1CC0(_DWORD **this, int a2, int a3, int a4) { _DWORD **v5; // [esp+0h] [ebp-8h] v5 = this; if ( this[16] ) (*(void (__thiscall **)(_DWORD *, int, int, int))(*this[16] + 4))(this[16], a2, a3, a4); if ( v5[1] ) (*(void (__thiscall **)(_DWORD *, int, int, int))(*v5[1] + 12))(v5[1], a2, a3, a4); return ((int (__thiscall *)(_DWORD **, int, int, int))(*v5)[3])(v5, a2, a3, a4); } //----- (008F1D40) -------------------------------------------------------- int __thiscall sub_8F1D40(_DWORD **this, int a2, int a3, int a4) { _DWORD *v5; // [esp+0h] [ebp-4h] v5 = this; if ( this[16] ) (*(void (__thiscall **)(_DWORD *, int, int, int))(*this[16] + 4))(this[16], a2, a3, a4); return sub_8F32D0(v5, a2, a3, a4); } //----- (008F1D90) -------------------------------------------------------- volatile LONG *__cdecl sub_8F1D90(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { volatile LONG *result; // eax volatile LONG *v8; // [esp+Ch] [ebp-54h] volatile LONG *v9; // [esp+44h] [ebp-1Ch] void *v10; // [esp+48h] [ebp-18h] volatile LONG *v11; // [esp+4Ch] [ebp-14h] volatile LONG *v12; // [esp+50h] [ebp-10h] int v13; // [esp+5Ch] [ebp-4h] v10 = operator new(0x120u); v13 = 0; if ( v10 ) v8 = sub_8F2740(v10); else v8 = 0; v11 = v8; v13 = -1; v12 = v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v12 + 336))( v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (008F1EF0) -------------------------------------------------------- int __thiscall sub_8F1EF0(_DWORD *this, _BYTE *a2) { int result; // eax int v3; // [esp+0h] [ebp-9Ch] int v4; // [esp+4h] [ebp-98h] int v5; // [esp+8h] [ebp-94h] int v6; // [esp+Ch] [ebp-90h] int v7; // [esp+10h] [ebp-8Ch] int v8; // [esp+14h] [ebp-88h] _DWORD *v9; // [esp+18h] [ebp-84h] volatile LONG *v10; // [esp+6Ch] [ebp-30h] void *v11; // [esp+70h] [ebp-2Ch] volatile LONG *v12; // [esp+7Ch] [ebp-20h] volatile LONG *v13; // [esp+80h] [ebp-1Ch] volatile LONG *v14; // [esp+84h] [ebp-18h] volatile LONG *v15; // [esp+88h] [ebp-14h] char v16; // [esp+93h] [ebp-9h] POINT v17; // [esp+94h] [ebp-8h] v9 = this; v16 = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*this + 348))(this, pt.x, pt.y); v17 = pt; if ( dword_BA6A9C >= 1 && v16 ) { if ( v9 ) v8 = (int)(v9 + 58); else v8 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 4, &v17, v8); sub_431140((_DWORD **)v9 + 58, 4, (int)&v17, 1); } if ( dword_BA6AA8 >= 1 && v16 ) { if ( v9 ) v7 = (int)(v9 + 58); else v7 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 2, &v17, v7); sub_431140((_DWORD **)v9 + 58, 2, (int)&v17, 1); } if ( dword_BA6ACC >= 1 && v16 ) { if ( v9 ) v6 = (int)(v9 + 58); else v6 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 5, &v17, v6); sub_431140((_DWORD **)v9 + 58, 5, (int)&v17, 1); } if ( dword_BA6AB4 >= 1 && v16 ) { if ( v9 ) v5 = (int)(v9 + 58); else v5 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 3, &v17, v5); sub_431140((_DWORD **)v9 + 58, 3, (int)&v17, 1); } if ( dword_BA6AD8 >= 1 && v16 ) { if ( v9 ) v4 = (int)(v9 + 58); else v4 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 6, &v17, v4); sub_431140((_DWORD **)v9 + 58, 6, (int)&v17, 1); } if ( dword_BA6AC0 >= 1 && v16 ) { if ( v9 ) v3 = (int)(v9 + 58); else v3 = 0; (*(void (__thiscall **)(_DWORD *, signed int, POINT *, int))(v9[58] + 12))(v9 + 58, 7, &v17, v3); sub_431140((_DWORD **)v9 + 58, 7, (int)&v17, 1); } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 260))(v9) ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 244))(v9) ) { if ( !byte_BA6A88 ) { *a2 = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*v9 + 348))(v9, pt.x, pt.y); if ( *a2 ) (*(void (__thiscall **)(_DWORD *))(*v9 + 424))(v9); } } } result = (*(int (__thiscall **)(_DWORD *))(*v9 + 312))(v9); if ( (_BYTE)result ) { *a2 = (*(int (__thiscall **)(_DWORD *, LONG, LONG))(*v9 + 348))(v9, pt.x, pt.y); if ( dword_BA6A9C >= 1 && *a2 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 244))(v9) ) (*(void (__thiscall **)(_DWORD *))(*v9 + 268))(v9); if ( dword_BA6A9C ) --dword_BA6A9C; v11 = (void *)v9[8]; if ( v11 ) v10 = (volatile LONG *)(sub_4022A0(v11, (int)&unk_BA6A8C) != 0 ? (unsigned int)v11 : 0); else v10 = 0; if ( v10 ) sub_8F2BC0(v10, 7, 0, (int)v9); } if ( dword_BA6AA8 >= 1 && *a2 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 244))(v9) ) (*(void (__thiscall **)(_DWORD *))(*v9 + 268))(v9); if ( dword_BA6AA8 ) --dword_BA6AA8; v15 = (volatile LONG *)sub_402BF0(v9); if ( v15 ) sub_8F2BC0(v15, 7, 1, (int)v9); } if ( dword_BA6ACC >= 1 && *a2 ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *))(*v9 + 244))(v9) ) (*(void (__thiscall **)(_DWORD *))(*v9 + 268))(v9); if ( dword_BA6ACC ) --dword_BA6ACC; v14 = (volatile LONG *)sub_402BF0(v9); if ( v14 ) sub_8F2BC0(v14, 7, 3, (int)v9); } if ( dword_BA6AB4 >= 1 && *a2 ) { if ( dword_BA6AB4 ) --dword_BA6AB4; v13 = (volatile LONG *)sub_402BF0(v9); if ( v13 ) sub_8F2BC0(v13, 7, 2, (int)v9); } if ( dword_BA6AD8 >= 1 && *a2 ) { if ( dword_BA6AD8 ) --dword_BA6AD8; v12 = (volatile LONG *)sub_402BF0(v9); if ( v12 ) sub_8F2BC0(v12, 7, 4, (int)v9); } result = (int)a2; if ( *a2 ) { result = *((unsigned __int8 *)v9 + 268); if ( *((_BYTE *)v9 + 268) ) { if ( !dword_BA6B9C ) dword_BA6B9C = (int)v9; } } } return result; } // BA6A88: using guessed type char byte_BA6A88; // BA6A9C: using guessed type int dword_BA6A9C; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; // BA6AC0: using guessed type int dword_BA6AC0; // BA6ACC: using guessed type int dword_BA6ACC; // BA6AD8: using guessed type int dword_BA6AD8; // BA6B9C: using guessed type int dword_BA6B9C; //----- (008F2680) -------------------------------------------------------- int __thiscall sub_8F2680(_DWORD *this, unsigned __int8 a2) { int result; // eax _DWORD *v3; // [esp+0h] [ebp-3Ch] char v4; // [esp+1Ah] [ebp-22h] char v5; // [esp+1Bh] [ebp-21h] int j; // [esp+1Ch] [ebp-20h] int i; // [esp+34h] [ebp-8h] int v8; // [esp+38h] [ebp-4h] v3 = this; v8 = 0; result = sub_402C40(this, &v8); for ( i = result; i; i = result ) { if ( i ) { for ( j = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)i + 4))(i, v3); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6BA8 ) { v5 = 1; goto LABEL_11; } } v5 = 0; LABEL_11: v4 = v5; } else { v4 = 0; } if ( v4 ) (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)i + 240))(i, a2); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)i + 252))(i, a2); result = sub_402C40(v3, &v8); } return result; } //----- (008F2740) -------------------------------------------------------- _DWORD *__thiscall sub_8F2740(_DWORD *this) { int v1; // ST10_4 _DWORD *v3; // [esp+0h] [ebp-10h] v3 = this; sub_85A1C0(this, 0); v1 = (int)(v3 + 58); v3[58] = &IDirectMessenger::`vftable'; *(_DWORD *)(v1 + 4) = 0; *(_DWORD *)(v1 + 8) = 0; *v3 = &PgWin::`vftable'; v3[58] = &PgWin::`vftable'; v3[66] = 0; if ( v3[66] ) InterlockedIncrement((volatile LONG *)(v3[66] + 4)); *((_BYTE *)v3 + 268) = 1; v3[68] = 0; v3[69] = 0; v3[70] = 0; v3[61] = 0; v3[62] = 0; *((_BYTE *)v3 + 252) = 1; v3[65] = 0; *((_BYTE *)v3 + 254) = 0; *((_BYTE *)v3 + 253) = 1; *((_BYTE *)v3 + 284) = 1; return v3; } // 9A8C04: using guessed type void *IDirectMessenger::`vftable'; // A41994: using guessed type void *PgWin::`vftable'; // A419B4: using guessed type void *PgWin::`vftable'; //----- (008F2850) -------------------------------------------------------- void **__thiscall sub_8F2850(void **this, char a2) { void **v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F29C0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F2880) -------------------------------------------------------- _BYTE *__thiscall sub_8F2880(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[253] = a2; return result; } //----- (008F28A0) -------------------------------------------------------- char __thiscall sub_8F28A0(_DWORD *this) { return sub_8F81A0(&unk_BA6B10, this); } //----- (008F28C0) -------------------------------------------------------- int __thiscall sub_8F28C0(_BYTE *this) { int result; // eax result = (int)this; if ( this[253] ) result = sub_4444E0(); return result; } //----- (008F28E0) -------------------------------------------------------- int __thiscall sub_8F28E0(_BYTE *this) { int result; // eax result = (int)this; if ( this[253] ) result = sub_444520(); return result; } //----- (008F2900) -------------------------------------------------------- char __thiscall sub_8F2900(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8) { int v9; // [esp+0h] [ebp-Ch] v9 = (int)this; (*(void (__thiscall **)(void *, int))(*(_DWORD *)this + 172))(this, a2); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 176))(v9, a3); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 152))(v9, a4); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 156))(v9, a5); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 140))(v9, a7); (*(void (__thiscall **)(int, int))(*(_DWORD *)v9 + 300))(v9, a8); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 240))(v9, 1); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v9 + 256))(v9, 1); if ( a6 ) sub_442AC0(a6, v9); return 1; } //----- (008F29C0) -------------------------------------------------------- LONG __thiscall sub_8F29C0(void **this) { volatile LONG **v2; // [esp+4h] [ebp-20h] v2 = (volatile LONG **)this; *this = &PgWin::`vftable'; this[58] = &PgWin::`vftable'; if ( (void **)dword_BA6A7C == this ) dword_BA6A7C = 0; if ( this[70] ) operator delete[](this[70]); if ( v2[66] ) sub_402270(v2[66]); return sub_85A210(v2); } // A41994: using guessed type void *PgWin::`vftable'; // A419B4: using guessed type void *PgWin::`vftable'; // BA6A7C: using guessed type int dword_BA6A7C; //----- (008F2A80) -------------------------------------------------------- int __thiscall sub_8F2A80(void *this, int a2, int a3, int a4) { void *v5; // [esp+4h] [ebp-4h] v5 = this; switch ( a2 ) { case 1: case 2: return (*(int (__thiscall **)(void *, int, int, int))(*(_DWORD *)v5 + 352))(v5, a2, a3, a4); case 3: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 368))(this, a3, a4); break; case 4: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 372))(this, a3, a4); break; case 5: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 380))(this, a3, a4); break; case 6: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 384))(this, a3, a4); break; case 7: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 392))(this, a3, a4); break; case 8: (*(void (__thiscall **)(void *, int, int))(*(_DWORD *)this + 376))(this, a3, a4); break; default: (*(void (__thiscall **)(void *, int, int, int))(*(_DWORD *)this + 388))(this, a2, a3, a4); break; } return (*(int (__thiscall **)(void *, int, int, int))(*(_DWORD *)v5 + 352))(v5, a2, a3, a4); } //----- (008F2BC0) -------------------------------------------------------- char __stdcall sub_8F2BC0(volatile LONG *a1, int a2, int a3, int a4) { if ( !sub_8FA3D0(&unk_BA6B10, a1) ) return 0; sub_517DE0(&unk_BA6B54, (int)a1, a2, a3, a4); return 1; } //----- (008F2C30) -------------------------------------------------------- char __stdcall sub_8F2C30(volatile LONG *a1, int a2, int a3, int a4) { if ( !sub_8FA3D0(&unk_BA6B10, a1) ) return 0; sub_8F2A80((void *)a1, a2, a3, a4); return 1; } //----- (008F2C80) -------------------------------------------------------- char __stdcall sub_8F2C80(volatile LONG *a1, int a2, int a3) { if ( !sub_8FA3D0(&unk_BA6B10, a1) ) return 0; sub_517DE0(&unk_BA6B54, (int)a1, 5, a2, a3); return 1; } //----- (008F2CF0) -------------------------------------------------------- unsigned int __thiscall sub_8F2CF0(_DWORD *this, int a2) { unsigned int result; // eax _DWORD *v3; // [esp+0h] [ebp-34h] char v4; // [esp+6h] [ebp-2Eh] char v5; // [esp+7h] [ebp-2Dh] int l; // [esp+8h] [ebp-2Ch] char v7; // [esp+16h] [ebp-1Eh] char v8; // [esp+17h] [ebp-1Dh] int j; // [esp+18h] [ebp-1Ch] _BYTE *v10; // [esp+24h] [ebp-10h] unsigned int k; // [esp+28h] [ebp-Ch] _BYTE *v12; // [esp+2Ch] [ebp-8h] unsigned int i; // [esp+30h] [ebp-4h] v3 = this; for ( i = 0; i < v3[47]; ++i ) { v12 = *(_BYTE **)(v3[45] + 4 * i); if ( v12 ) { if ( v12 ) { for ( j = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v12 + 4))(v12); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6A8C ) { v8 = 1; goto LABEL_12; } } v8 = 0; LABEL_12: v7 = v8; } else { v7 = 0; } if ( !v7 ) sub_85C0A0(v12, a2); } } for ( k = 0; ; ++k ) { result = k; if ( k >= v3[47] ) break; v10 = *(_BYTE **)(v3[45] + 4 * k); if ( v10 ) { if ( v10 ) { for ( l = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v10 + 4))(v10); l; l = *(_DWORD *)(l + 4) ) { if ( (_UNKNOWN *)l == &unk_BA6A8C ) { v5 = 1; goto LABEL_27; } } v5 = 0; LABEL_27: v4 = v5; } else { v4 = 0; } if ( v4 ) sub_85C0A0(v10, a2); } } return result; } //----- (008F2E50) -------------------------------------------------------- int __thiscall sub_8F2E50(_DWORD *this, unsigned int a2) { int result; // eax _DWORD *v3; // [esp+0h] [ebp-70h] v3 = this; result = this[48]; if ( a2 < this[47] - this[48] ) { sub_8F3870(this + 44); result = sub_8F3B60(v3 + 44); } return result; } //----- (008F2EA0) -------------------------------------------------------- void __thiscall sub_8F2EA0(void **this, const char *a2) { char v2; // al _BYTE *v3; // [esp+8h] [ebp-28h] const char *v4; // [esp+Ch] [ebp-24h] void **v5; // [esp+20h] [ebp-10h] unsigned int v6; // [esp+2Ch] [ebp-4h] v5 = this; if ( a2 ) { if ( this[70] ) { operator delete[](this[70]); v5[70] = 0; } v6 = strlen(a2); if ( v6 ) { v5[70] = operator new[](v6 + 1); v4 = a2; v3 = v5[70]; do { v2 = *v4; *v3++ = *v4++; } while ( v2 ); } } } //----- (008F2F90) -------------------------------------------------------- int __thiscall sub_8F2F90(int this) { int result; // eax int v2; // [esp+0h] [ebp-Ch] v2 = this; result = this; if ( *(_DWORD *)(this + 272) ) { if ( *(_DWORD *)(this + 280) ) (*(void (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(this + 272) + 428))( *(_DWORD *)(this + 272), *(_DWORD *)(this + 280)); (*(void (__thiscall **)(_DWORD, signed int))(**(_DWORD **)(v2 + 272) + 256))(*(_DWORD *)(v2 + 272), 1); *(_DWORD *)(*(_DWORD *)(v2 + 272) + 276) = v2; (*(void (__thiscall **)(_DWORD))(**(_DWORD **)(v2 + 272) + 436))(*(_DWORD *)(v2 + 272)); (*(void (__thiscall **)(_DWORD))(**(_DWORD **)(v2 + 272) + 432))(*(_DWORD *)(v2 + 272)); sub_8F81A0(&unk_BA6B10, *(_DWORD **)(v2 + 272)); result = v2; dword_BA6B98 = *(_DWORD *)(v2 + 272); } return result; } // BA6B98: using guessed type int dword_BA6B98; //----- (008F3080) -------------------------------------------------------- int __thiscall sub_8F3080(_DWORD **this) { int result; // eax int v2; // eax int v3; // eax _DWORD *v4; // [esp+0h] [ebp-38h] int v5; // [esp+14h] [ebp-24h] int v6; // [esp+18h] [ebp-20h] int v7; // [esp+1Ch] [ebp-1Ch] int v8; // [esp+20h] [ebp-18h] int v9; // [esp+24h] [ebp-14h] int v10; // [esp+28h] [ebp-10h] int v11; // [esp+34h] [ebp-4h] v4 = this; result = (int)this; if ( this[69] ) { (*(void (__thiscall **)(_DWORD *, int *))(*this[69] + 216))(this[69], &v8); v6 = v8 + (v10 - v8) / 2; v2 = (*(int (__thiscall **)(_DWORD *))(*v4 + 148))(v4); v7 = v9 - v2; if ( v9 - v2 < 0 ) v7 = 0; if ( v6 >= (signed int)((unsigned int)qword_AC2F74 >> 1) ) { v3 = (*(int (__thiscall **)(_DWORD *))(*v4 + 144))(v4); v5 = v8 - v3; } else { v5 = v10; } v11 = sub_402BF0(v4); if ( v11 ) (*(void (__thiscall **)(int, int *, int *))(*(_DWORD *)v11 + 224))(v11, &v5, &v7); result = (*(int (__thiscall **)(_DWORD *, int, int))(*v4 + 308))(v4, v5, v7); v4[69] = 0; } return result; } //----- (008F3180) -------------------------------------------------------- unsigned int __thiscall sub_8F3180(_DWORD *this, int a2, int a3, int a4) { unsigned int result; // eax _DWORD *v5; // [esp+0h] [ebp-28h] char v6; // [esp+7h] [ebp-21h] int k; // [esp+8h] [ebp-20h] char v8; // [esp+Eh] [ebp-1Ah] char v9; // [esp+Fh] [ebp-19h] int j; // [esp+10h] [ebp-18h] int v11; // [esp+1Ch] [ebp-Ch] int v12; // [esp+20h] [ebp-8h] unsigned int i; // [esp+24h] [ebp-4h] v5 = this; for ( i = 0; ; ++i ) { result = i; if ( i >= *(v5 - 11) ) break; v12 = *(_DWORD *)(*(v5 - 13) + 4 * i); if ( v12 ) { if ( v12 ) { for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 4))(v12); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6A8C ) { v9 = 1; goto LABEL_12; } } v9 = 0; LABEL_12: v8 = v9; } else { v8 = 0; } if ( v8 ) { if ( v12 ) { for ( k = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 4))(v12); k; k = *(_DWORD *)(k + 4) ) { if ( (_UNKNOWN *)k == &unk_BA6A8C ) { v6 = 1; goto LABEL_22; } } v6 = 0; LABEL_22: v11 = v6 != 0 ? v12 : 0; } else { v11 = 0; } if ( v11 ) { (*(void (__thiscall **)(int, int, int, int))(*(_DWORD *)(v11 + 232) + 4))(v11 + 232, a2, a3, a4); (*(void (__thiscall **)(int, int, int, int))(*(_DWORD *)(v11 + 232) + 16))(v11 + 232, a2, a3, a4); } } } } return result; } //----- (008F32D0) -------------------------------------------------------- int __thiscall sub_8F32D0(_DWORD *this, int a2, int a3, int a4) { int result; // eax _DWORD *i; // [esp+24h] [ebp-4h] result = sub_402BF0(this - 58); for ( i = (_DWORD *)result; i; i = (_DWORD *)result ) { (*(void (__thiscall **)(_DWORD *, int, int, int))(i[58] + 4))(i + 58, a2, a3, a4); result = sub_402BF0(i); } return result; } //----- (008F3330) -------------------------------------------------------- unsigned int __thiscall sub_8F3330(_DWORD *this) { unsigned int result; // eax _DWORD *v2; // [esp+0h] [ebp-28h] char v3; // [esp+Eh] [ebp-1Ah] char v4; // [esp+Fh] [ebp-19h] int j; // [esp+10h] [ebp-18h] volatile LONG *v6; // [esp+1Ch] [ebp-Ch] _DWORD *v7; // [esp+20h] [ebp-8h] unsigned int i; // [esp+24h] [ebp-4h] v2 = this; for ( i = 0; ; ++i ) { result = i; if ( i >= v2[47] ) break; v7 = *(_DWORD **)(v2[45] + 4 * i); if ( v7 ) { if ( v7 ) { for ( j = (*(int (__thiscall **)(_DWORD *))(*v7 + 4))(v7); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6A8C ) { v4 = 1; goto LABEL_12; } } v4 = 0; LABEL_12: v3 = v4; } else { v3 = 0; } if ( v3 ) { sub_8F9E00(&unk_BA6B10, v7); sub_816340(v2 + 44, &v6, i); if ( v6 ) sub_402270(v6); } } } return result; } //----- (008F3410) -------------------------------------------------------- int __thiscall sub_8F3410(void *this) { return nullsub_1(this); } // 444480: using guessed type int __cdecl nullsub_1(_DWORD); //----- (008F3420) -------------------------------------------------------- char __thiscall sub_8F3420(_DWORD *this, int a2, int a3, int a4) { _DWORD *v5; // [esp+0h] [ebp-38h] int i; // [esp+30h] [ebp-8h] int v7; // [esp+34h] [ebp-4h] v5 = this; for ( i = sub_8F36E0(this, &v7); i; i = sub_8F37B0(v5, &v7) ) { if ( (*(unsigned __int8 (__thiscall **)(int, int, int, int))(*(_DWORD *)i + 404))(i, a2, a3, a4) ) return 1; } return 0; } //----- (008F3480) -------------------------------------------------------- char __thiscall sub_8F3480(_BYTE *this, int a2, int a3, int a4) { char result; // al _BYTE *v5; // [esp+0h] [ebp-8h] v5 = this; if ( (*(unsigned __int8 (__thiscall **)(_BYTE *, int, int, int))(*(_DWORD *)this + 400))(this, a2, a3, a4) ) return 1; if ( !(*(unsigned __int8 (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v5 + 348))(v5, a3, a4) ) goto LABEL_12; if ( v5[254] ) { (*(void (__thiscall **)(_BYTE *, int, int, int))(*(_DWORD *)v5 + 396))(v5, a2, a3, a4); return 1; } if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v5 + 260))(v5) && (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)v5 + 244))(v5) ) { result = 1; } else { LABEL_12: result = 0; } return result; } //----- (008F3540) -------------------------------------------------------- char __thiscall sub_8F3540(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-18h] _DWORD *i; // [esp+14h] [ebp-4h] v2 = this; for ( i = this; i; i = (_DWORD *)sub_402BF0(i) ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *))(*i + 260))(i, v2) ) return 0; } return 1; } //----- (008F3590) -------------------------------------------------------- bool __thiscall sub_8F3590(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-4Ch] _DWORD *i; // [esp+40h] [ebp-Ch] int v4; // [esp+44h] [ebp-8h] bool v5; // [esp+4Bh] [ebp-1h] v2 = this; if ( !sub_8F36E0(this, &v4) ) return 0; v5 = 0; for ( i = (_DWORD *)sub_8F37B0(v2, &v4); i; i = (_DWORD *)sub_8F37B0(v2, &v4) ) { if ( v5 ) sub_8F3600(i); else v5 = sub_8F3600(i); } return v5; } //----- (008F3600) -------------------------------------------------------- bool __thiscall sub_8F3600(_DWORD *this) { _DWORD *v1; // ST08_4 bool v4; // [esp+Ah] [ebp-2h] char v5; // [esp+Bh] [ebp-1h] v1 = this; v4 = sub_8F3590(this); v5 = 0; (*(void (__thiscall **)(_DWORD *, char *))(*v1 + 316))(v1, &v5); return v5 || v4; } //----- (008F3660) -------------------------------------------------------- _DWORD *__thiscall sub_8F3660(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // [esp+0h] [ebp-48h] _DWORD *i; // [esp+40h] [ebp-8h] int v4; // [esp+44h] [ebp-4h] v2 = this; result = (_DWORD *)sub_8F36E0(this, &v4); if ( result ) { result = (_DWORD *)sub_8F37B0(v2, &v4); for ( i = result; i; i = result ) { sub_8F36B0(i); result = (_DWORD *)sub_8F37B0(v2, &v4); } } return result; } //----- (008F36B0) -------------------------------------------------------- int __thiscall sub_8F36B0(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8F3660(this); return (*(int (__thiscall **)(_DWORD *))(*v1 + 320))(v1); } //----- (008F36E0) -------------------------------------------------------- int __thiscall sub_8F36E0(_DWORD *this, int *a2) { _DWORD *v3; // [esp+0h] [ebp-20h] char v4; // [esp+6h] [ebp-1Ah] char v5; // [esp+7h] [ebp-19h] int j; // [esp+8h] [ebp-18h] int v7; // [esp+14h] [ebp-Ch] int i; // [esp+18h] [ebp-8h] int v9; // [esp+1Ch] [ebp-4h] v3 = this; v9 = 0; for ( i = this[47] - 1; i >= 0; --i ) { v7 = *(_DWORD *)(v3[45] + 4 * i); if ( v7 ) { if ( v7 ) { for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6A8C ) { v5 = 1; goto LABEL_12; } } v5 = 0; LABEL_12: v4 = v5; } else { v4 = 0; } if ( v4 ) { v9 = v7; *a2 = i; return v9; } } } return v9; } //----- (008F37B0) -------------------------------------------------------- int __thiscall sub_8F37B0(_DWORD *this, _DWORD *a2) { _DWORD *v3; // [esp+0h] [ebp-14h] char v4; // [esp+6h] [ebp-Eh] char v5; // [esp+7h] [ebp-Dh] int i; // [esp+8h] [ebp-Ch] int v7; // [esp+10h] [ebp-4h] v3 = this; while ( *a2 >= 0 ) { v7 = *(_DWORD *)(v3[45] + 4 * *a2); if ( v7 ) { if ( v7 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7); i; i = *(_DWORD *)(i + 4) ) { if ( (_UNKNOWN *)i == &unk_BA6A8C ) { v5 = 1; goto LABEL_12; } } v5 = 0; LABEL_12: v4 = v5; } else { v4 = 0; } if ( v4 ) { --*a2; return v7; } } --*a2; } return 0; } //----- (008F3870) -------------------------------------------------------- char *__thiscall sub_8F3870(_DWORD *this) { char *result; // eax int v2; // ecx int v3; // [esp+Ch] [ebp-80h] _DWORD *v4; // [esp+10h] [ebp-7Ch] volatile LONG **v5; // [esp+1Ch] [ebp-70h] volatile LONG **v6; // [esp+20h] [ebp-6Ch] volatile LONG **v7; // [esp+30h] [ebp-5Ch] volatile LONG **v8; // [esp+34h] [ebp-58h] int *v9; // [esp+5Ch] [ebp-30h] int v10; // [esp+64h] [ebp-28h] int v11; // [esp+68h] [ebp-24h] bool v12; // [esp+6Fh] [ebp-1Dh] unsigned int i; // [esp+70h] [ebp-1Ch] int v14; // [esp+74h] [ebp-18h] unsigned int v15; // [esp+78h] [ebp-14h] volatile LONG **v16; // [esp+7Ch] [ebp-10h] int v17; // [esp+88h] [ebp-4h] v4 = this; result = (char *)this; if ( this[4] != this[3] ) { if ( this[4] ) { v15 = 0; v14 = 0; while ( v15 < v4[3] ) { v11 = 0; v12 = *(_DWORD *)(v4[1] + 4 * v15) != 0; if ( v12 ) { if ( *(_DWORD *)(v4[1] + 4 * v14) != *(_DWORD *)(v4[1] + 4 * v15) ) { v7 = (volatile LONG **)(v4[1] + 4 * v15); v8 = (volatile LONG **)(v4[1] + 4 * v14); if ( *v8 != *v7 ) { if ( *v8 ) sub_402270(*v8); *v8 = *v7; if ( *v8 ) InterlockedIncrement(*v8 + 1); } } ++v14; } ++v15; } } v16 = (volatile LONG **)v4[1]; v4[3] = v4[4]; v4[2] = v4[3]; if ( v4[2] ) { v10 = v4[2]; v2 = 4 * v10 | -((unsigned __int64)(unsigned int)v10 >> 30 != 0); v9 = (int *)operator new[]((v2 + 4) | -__CFADD__(v2, 4)); v17 = 0; if ( v9 ) { *v9 = v10; `eh vector constructor iterator'( v9 + 1, 4u, v10, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); v3 = (int)(v9 + 1); } else { v3 = 0; } v17 = -1; v4[1] = v3; for ( i = 0; i < v4[3]; ++i ) { v5 = &v16[i]; v6 = (volatile LONG **)(v4[1] + 4 * i); if ( *v6 != v16[i] ) { if ( *v6 ) sub_402270(*v6); *v6 = *v5; if ( *v6 ) InterlockedIncrement(*v6 + 1); } } } else { v4[1] = 0; } result = (char *)v16; if ( v16 ) result = sub_484420(v16, 3); } return result; } //----- (008F3B60) -------------------------------------------------------- BOOL __thiscall sub_8F3B60(_DWORD *this) { BOOL result; // eax _DWORD *i; // [esp+0h] [ebp-1Ch] int v3; // [esp+14h] [ebp-8h] bool v4; // [esp+1Bh] [ebp-1h] for ( i = this; ; --i[3] ) { result = (BOOL)i; if ( !i[3] ) break; v3 = 0; v4 = *(_DWORD *)(i[1] + 4 * i[3] - 4) != 0; result = v4; if ( v4 ) break; } return result; } //----- (008F3BF0) -------------------------------------------------------- void *__thiscall sub_8F3BF0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &PgWin::Bool::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; //----- (008F3C20) -------------------------------------------------------- _DWORD *__thiscall sub_8F3C20(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-Ch] v2 = this; sub_8F2740(this); *v2 = &PgWinSpr::`vftable'; v2[58] = &PgWinSpr::`vftable'; v2[72] = 0; if ( v2[72] ) InterlockedIncrement((volatile LONG *)(v2[72] + 4)); v2[73] = -1; return v2; } // A41B8C: using guessed type void *PgWinSpr::`vftable'; // A41BAC: using guessed type void *PgWinSpr::`vftable'; //----- (008F3C90) -------------------------------------------------------- void *__thiscall sub_8F3C90(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F3CC0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F3CC0) -------------------------------------------------------- LONG __thiscall sub_8F3CC0(void *this) { void **v2; // [esp+4h] [ebp-20h] v2 = (void **)this; *(_DWORD *)this = &PgWinSpr::`vftable'; *((_DWORD *)this + 58) = &PgWinSpr::`vftable'; if ( *((_DWORD *)this + 72) ) sub_402270(*((volatile LONG **)this + 72)); return sub_8F29C0(v2); } // A41B8C: using guessed type void *PgWinSpr::`vftable'; // A41BAC: using guessed type void *PgWinSpr::`vftable'; //----- (008F3D50) -------------------------------------------------------- volatile LONG *__cdecl sub_8F3D50(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x128u); v14 = 0; if ( v11 ) v9 = sub_8F3C20(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 512))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (008F3EB0) -------------------------------------------------------- volatile LONG *__cdecl sub_8F3EB0(int a1, int a2, int a3, int a4, int a5, int a6) { volatile LONG *result; // eax volatile LONG *v7; // [esp+Ch] [ebp-54h] volatile LONG *v8; // [esp+44h] [ebp-1Ch] _DWORD *v9; // [esp+48h] [ebp-18h] volatile LONG *v10; // [esp+4Ch] [ebp-14h] volatile LONG *v11; // [esp+50h] [ebp-10h] int v12; // [esp+5Ch] [ebp-4h] v9 = operator new(0x128u); v12 = 0; if ( v9 ) v7 = sub_8F3C20(v9); else v7 = 0; v10 = v7; v12 = -1; v11 = v7; if ( v7 ) InterlockedIncrement(v11 + 1); v12 = 1; sub_403790(&unk_BA6B10, (int)v11); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int))(*v11 + 508))( v11, a1, a2, a3, a4, a5, a6) ) { (*(void (__thiscall **)(volatile LONG *))(*v11 + 356))(v11); v12 = -1; if ( v11 ) sub_402270(v11); result = v11; } else { sub_403A70(&unk_BA6B10, &v8, v11); if ( v8 ) sub_402270(v8); v12 = -1; if ( v11 ) sub_402270(v11); result = 0; } return result; } //----- (008F4010) -------------------------------------------------------- volatile LONG *__cdecl sub_8F4010(int a1, int a2, int a3, unsigned __int8 a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { volatile LONG *result; // eax volatile LONG *v12; // [esp+Ch] [ebp-54h] volatile LONG *v13; // [esp+44h] [ebp-1Ch] _DWORD *v14; // [esp+48h] [ebp-18h] volatile LONG *v15; // [esp+4Ch] [ebp-14h] volatile LONG *v16; // [esp+50h] [ebp-10h] int v17; // [esp+5Ch] [ebp-4h] v14 = operator new(0x128u); v17 = 0; if ( v14 ) v12 = sub_8F3C20(v14); else v12 = 0; v15 = v12; v17 = -1; v16 = v12; if ( v12 ) InterlockedIncrement(v16 + 1); v17 = 1; sub_403790(&unk_BA6B10, (int)v16); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, _DWORD, int, int, int, int, int, int, int))(*v16 + 504))( v16, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) ) { (*(void (__thiscall **)(volatile LONG *))(*v16 + 356))(v16); v17 = -1; if ( v16 ) sub_402270(v16); result = v16; } else { sub_403A70(&unk_BA6B10, &v13, v16); if ( v13 ) sub_402270(v13); v17 = -1; if ( v16 ) sub_402270(v16); result = 0; } return result; } //----- (008F4180) -------------------------------------------------------- volatile LONG *__cdecl sub_8F4180(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { volatile LONG *result; // eax volatile LONG *v8; // [esp+Ch] [ebp-54h] volatile LONG *v9; // [esp+44h] [ebp-1Ch] _DWORD *v10; // [esp+48h] [ebp-18h] volatile LONG *v11; // [esp+4Ch] [ebp-14h] volatile LONG *v12; // [esp+50h] [ebp-10h] int v13; // [esp+5Ch] [ebp-4h] v10 = operator new(0x128u); v13 = 0; if ( v10 ) v8 = sub_8F3C20(v10); else v8 = 0; v11 = v8; v13 = -1; v12 = v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v12 + 336))( v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (008F42E0) -------------------------------------------------------- char __thiscall sub_8F42E0(void *this, int *a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6, int a7, int a8, int a9) { char result; // al void *v10; // [esp+4h] [ebp-34h] volatile LONG *v11; // [esp+28h] [ebp-10h] v10 = this; v11 = sub_8FAC60(a2, 0, a3, a4, a5, a6); if ( v11 ) InterlockedIncrement(v11 + 1); if ( (*(unsigned __int8 (__thiscall **)(void *, unsigned int, unsigned int, volatile LONG *, int, int, int))(*(_DWORD *)v10 + 508))( v10, a3, a4, v11, a7, a8, a9) ) { if ( v11 ) sub_402270(v11); result = 1; } else { if ( v11 ) sub_402270(v11); result = 0; } return result; } //----- (008F43D0) -------------------------------------------------------- char __thiscall sub_8F43D0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7) { volatile LONG *v8; // [esp+4h] [ebp-44h] volatile LONG **v9; // [esp+8h] [ebp-40h] volatile LONG **v10; // [esp+Ch] [ebp-3Ch] _DWORD *v11; // [esp+34h] [ebp-14h] v9 = this; if ( !a4 ) return 0; if ( !sub_8F2900( this, a2, a3, *(_DWORD *)(**(_DWORD **)(a4 + 36) + 20), *(_DWORD *)(**(_DWORD **)(a4 + 36) + 24), a5, a6, a7) ) return 0; v11 = operator new(0x24u); if ( v11 ) v8 = sub_8FC6F0(v11, (_DWORD *)a4); else v8 = 0; v10 = v9 + 72; if ( v9[72] != v8 ) { if ( *v10 ) sub_402270(*v10); *v10 = v8; if ( *v10 ) InterlockedIncrement(*v10 + 1); } (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 123))(v9, 0); return 1; } //----- (008F4530) -------------------------------------------------------- char __thiscall sub_8F4530(void *this, int a2, int a3, int *a4, char a5, unsigned int a6, unsigned int a7, unsigned int a8, unsigned int a9, int a10, int a11, int a12) { char result; // al void *v13; // [esp+4h] [ebp-34h] volatile LONG *v14; // [esp+28h] [ebp-10h] v13 = this; v14 = sub_8FAC60(a4, a5, a6, a7, a8, a9); if ( v14 ) InterlockedIncrement(v14 + 1); if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, volatile LONG *, int, int, int))(*(_DWORD *)v13 + 508))( v13, a2, a3, v14, a10, a11, a12) ) { if ( v14 ) sub_402270(v14); result = 1; } else { if ( v14 ) sub_402270(v14); result = 0; } return result; } //----- (008F4630) -------------------------------------------------------- bool __thiscall sub_8F4630(void *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8) { return sub_8F2900(this, a2, a3, a4, a5, a6, a7, a8) != 0; } //----- (008F4670) -------------------------------------------------------- char __thiscall sub_8F4670(_DWORD *this, unsigned int a2) { _DWORD *v3; // [esp+18h] [ebp-38h] int v4; // [esp+28h] [ebp-28h] unsigned int v5; // [esp+34h] [ebp-1Ch] int v6; // [esp+44h] [ebp-Ch] volatile LONG *v7; // [esp+48h] [ebp-8h] int v8; // [esp+4Ch] [ebp-4h] v3 = this; if ( a2 == this[73] || !this[72] ) return 1; v6 = this[72]; v5 = this[73]; if ( v5 < *(_DWORD *)(v6 + 24) ) v8 = *(_DWORD *)(*(_DWORD *)(v6 + 16) + 4 * v5); else v8 = 0; if ( v8 ) { (*(void (__thiscall **)(_DWORD *, volatile LONG **, int))(*this + 120))(this, &v7, v8); if ( v7 ) sub_402270(v7); } v4 = v3[72]; if ( a2 < *(_DWORD *)(v4 + 24) ) v8 = *(_DWORD *)(*(_DWORD *)(v4 + 16) + 4 * a2); else v8 = 0; if ( !v8 ) return 0; (*(void (__thiscall **)(_DWORD *, int, signed int))(*v3 + 116))(v3, v8, 1); sub_85BED0((_DWORD **)v3, 0.0, 0); sub_85C4D0(v3); v3[73] = a2; return 1; } //----- (008F47B0) -------------------------------------------------------- int __thiscall sub_8F47B0(_DWORD *this) { int result; // eax int *v2; // edx _DWORD *v3; // [esp+10h] [ebp-28h] unsigned int v4; // [esp+1Ch] [ebp-1Ch] int v5; // [esp+2Ch] [ebp-Ch] volatile LONG *v6; // [esp+30h] [ebp-8h] int v7; // [esp+34h] [ebp-4h] v3 = this; result = (int)this; if ( this[72] != 0 ) { v5 = this[72]; v4 = this[73]; result = v4; if ( v4 < *(_DWORD *)(v5 + 24) ) { v2 = (int *)(*(_DWORD *)(v5 + 16) + 4 * v4); result = *v2; v7 = *v2; } else { v7 = 0; } if ( v7 ) { (*(void (__thiscall **)(_DWORD *, volatile LONG **, int))(*this + 120))(this, &v6, v7); if ( v6 ) sub_402270(v6); result = sub_85BED0((_DWORD **)v3, 0.0, 0); v3[73] = -1; } } return result; } //----- (008F4870) -------------------------------------------------------- _DWORD *__thiscall sub_8F4870(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-28h] volatile LONG **v3; // [esp+8h] [ebp-24h] v2 = this; sub_8F2740(this); *v2 = &PgWinText::`vftable'; v2[58] = &PgWinText::`vftable'; v2[72] = 0; if ( v2[72] ) InterlockedIncrement((volatile LONG *)(v2[72] + 4)); v3 = (volatile LONG **)(v2 + 72); if ( v2[72] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; if ( *v3 ) InterlockedIncrement(*v3 + 1); } return v2; } // A41DB4: using guessed type void *PgWinText::`vftable'; // A41DD4: using guessed type void *PgWinText::`vftable'; //----- (008F4960) -------------------------------------------------------- void *__thiscall sub_8F4960(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F4990(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F4990) -------------------------------------------------------- LONG __thiscall sub_8F4990(void *this) { void **v2; // [esp+4h] [ebp-1Ch] v2 = (void **)this; *(_DWORD *)this = &PgWinText::`vftable'; *((_DWORD *)this + 58) = &PgWinText::`vftable'; if ( *((_DWORD *)this + 72) ) sub_402270(*((volatile LONG **)this + 72)); return sub_8F29C0(v2); } // A41DB4: using guessed type void *PgWinText::`vftable'; // A41DD4: using guessed type void *PgWinText::`vftable'; //----- (008F4A20) -------------------------------------------------------- volatile LONG *__cdecl sub_8F4A20(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x124u); v14 = 0; if ( v11 ) v9 = sub_8F4870(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 496))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (008F4B80) -------------------------------------------------------- char __thiscall sub_8F4B80(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9) { int v10; // [esp+4h] [ebp-44h] volatile LONG **v11; // [esp+8h] [ebp-40h] volatile LONG **v12; // [esp+10h] [ebp-38h] _DWORD *v13; // [esp+20h] [ebp-28h] char v14; // [esp+28h] [ebp-20h] int v15; // [esp+44h] [ebp-4h] v11 = this; if ( !sub_8F2900(this, a2, a3, a4, a5, a7, a8, a9) ) return 0; if ( a6 ) { v13 = operator new(0x14Cu); v15 = 0; if ( v13 ) v10 = sub_90EEA0(v13, a6); else v10 = 0; v15 = -1; v12 = v11 + 72; if ( v11[72] != (volatile LONG *)v10 ) { if ( *v12 ) sub_402270(*v12); *v12 = (volatile LONG *)v10; if ( *v12 ) InterlockedIncrement(*v12 + 1); } (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 47))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 115))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, volatile LONG *, _DWORD))*v11 + 29))(v11, v11[72], 0); sub_85C4D0(v11); } return 1; } //----- (008F4CF0) -------------------------------------------------------- int __cdecl sub_8F4CF0(int a1, int a2, LPCSTR lpString) { char v4; // [esp+13h] [ebp-12Dh] int v5; // [esp+14h] [ebp-12Ch] char v6; // [esp+1Bh] [ebp-125h] int j; // [esp+1Ch] [ebp-124h] signed int v8; // [esp+20h] [ebp-120h] unsigned int i; // [esp+24h] [ebp-11Ch] int v10; // [esp+28h] [ebp-118h] HDC hdc; // [esp+2Ch] [ebp-114h] int v12; // [esp+30h] [ebp-110h] int v13; // [esp+34h] [ebp-10Ch] int v14; // [esp+38h] [ebp-108h] if ( !lpString || !a1 || !a2 ) return 0; LOBYTE(v14) = 0; memset((char *)&v14 + 1, 0, 0xFFu); v13 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)a1 + 144))(*(_DWORD *)a1); v12 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)a1 + 456))(*(_DWORD *)a1); if ( !v12 ) return 0; hdc = *(HDC *)(v12 + 192); v10 = 0; for ( i = 0; i < a2; ++i ) { v8 = sub_8F5700((int)&v14, lpString, hdc, v13); if ( !v8 ) break; v5 = *(_DWORD *)(a1 + 4 * i); if ( v5 ) { for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6B00 ) { v6 = 1; goto LABEL_17; } } v6 = 0; LABEL_17: v4 = v6; } else { v4 = 0; } if ( v4 && i == a2 - 1 && v8 < (signed int)strlen(lpString) ) { (*(void (__thiscall **)(_DWORD, LPCSTR))(**(_DWORD **)(a1 + 4 * i) + 472))(*(_DWORD *)(a1 + 4 * i), lpString); return v10 + 1; } *((_BYTE *)&v14 + v8) = 0; lpString += v8; (*(void (__thiscall **)(_DWORD, int *))(**(_DWORD **)(a1 + 4 * i) + 472))(*(_DWORD *)(a1 + 4 * i), &v14); ++v10; } return v10; } //----- (008F4FA0) -------------------------------------------------------- void __thiscall sub_8F4FA0(int *this, float a2) { sub_907230(this[72], a2); } //----- (008F4FD0) -------------------------------------------------------- void __thiscall sub_8F4FD0(float **this) { sub_907270(this[72]); } //----- (008F5000) -------------------------------------------------------- char __thiscall sub_8F5000(_DWORD *this, LPSIZE psizl) { const CHAR *lpString; // [esp+18h] [ebp-20h] _DWORD *v4; // [esp+34h] [ebp-4h] psizl->cx = 0; psizl->cy = 0; if ( !this[72] ) return 0; v4 = *(_DWORD **)(this[72] + 312); if ( !v4 ) return 0; lpString = (const CHAR *)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)this[72] + 152))(this[72]); if ( lpString && *lpString ) { sub_4593C0(v4, lpString, strlen(lpString), psizl); } else { psizl->cy = 0; psizl->cx = 0; } return 1; } //----- (008F5100) -------------------------------------------------------- int __thiscall sub_8F5100(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // [esp+0h] [ebp-1Ch] char v4; // [esp+8h] [ebp-14h] v3 = this; this[61] = a2; result = this[72]; if ( result ) { (*(void (__thiscall **)(_DWORD *, char *))(*this + 188))(this, &v4); result = (*(int (__thiscall **)(_DWORD *, char *))(*v3 + 460))(v3, &v4); } return result; } //----- (008F5170) -------------------------------------------------------- int __thiscall sub_8F5170(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // [esp+0h] [ebp-1Ch] char v4; // [esp+8h] [ebp-14h] v3 = this; this[62] = a2; result = this[72]; if ( result ) { (*(void (__thiscall **)(_DWORD *, char *))(*this + 188))(this, &v4); result = (*(int (__thiscall **)(_DWORD *, char *))(*v3 + 460))(v3, &v4); } return result; } //----- (008F51E0) -------------------------------------------------------- void __thiscall sub_8F51E0(_DWORD **this, void *a2, int a3) { char *v3; // ST98_4 int v4; // ST04_4 _DWORD *v5; // eax unsigned __int64 v6; // ST04_8 int v7; // ST90_4 void *v8; // ST8C_4 _DWORD **v9; // [esp+5Ch] [ebp-128h] char *v10; // [esp+78h] [ebp-10Ch] char v11; // [esp+97h] [ebp-EDh] char *v12; // [esp+98h] [ebp-ECh] char v13; // [esp+A3h] [ebp-E1h] char *v14; // [esp+A4h] [ebp-E0h] char v15; // [esp+AFh] [ebp-D5h] char *v16; // [esp+B0h] [ebp-D4h] unsigned int v17; // [esp+B8h] [ebp-CCh] int v18; // [esp+BCh] [ebp-C8h] unsigned int v19; // [esp+D8h] [ebp-ACh] int v20; // [esp+DCh] [ebp-A8h] unsigned int v21; // [esp+F0h] [ebp-94h] const void *v22[4]; // [esp+F8h] [ebp-8Ch] int v23; // [esp+108h] [ebp-7Ch] char v24; // [esp+114h] [ebp-70h] int v25; // [esp+124h] [ebp-60h] unsigned int v26; // [esp+130h] [ebp-54h] int v27; // [esp+134h] [ebp-50h] char *v28; // [esp+138h] [ebp-4Ch] char v29; // [esp+13Ch] [ebp-48h] char v30; // [esp+158h] [ebp-2Ch] int v31; // [esp+180h] [ebp-4h] v9 = this; v16 = &v15; v31 = 0; sub_4014A0(v22, 0, 0); v31 = 1; v14 = &v13; LOBYTE(v31) = 2; sub_4014A0(&v24, 0, 0); v12 = &v11; LOBYTE(v31) = 4; sub_4014A0(&v20, 0, 0); LOBYTE(v31) = 5; sub_4018E0(v22, a2, strlen((const char *)a2)); v27 = ((int (__thiscall *)(_DWORD **))(*v9)[36])(v9); while ( v23 ) { v3 = (char *)sub_401490(v22); v4 = v27; v5 = (_DWORD *)((int (__thiscall *)(_DWORD **))(*v9)[114])(v9); v17 = strlen(sub_900720(v5, v3, v4, 0)); v19 = v23 - v17; sub_426900(v22, (int)&v18, 0, (void *)(v23 - v17)); LOBYTE(v31) = 6; HIDWORD(v6) = strlen("\n"); LODWORD(v6) = 0; v28 = (char *)sub_417B90((unsigned __int8 *)&v18, "\n", v6); if ( v28 == (char *)-1 ) { sub_401C20(&v20, (int)&v18, 0, 0xFFFFFFFF); v26 = v19; } else { v7 = sub_426900((const void **)&v18, (int)&v30, 0, v28); LOBYTE(v31) = 7; sub_401C20(&v20, v7, 0, 0xFFFFFFFF); LOBYTE(v31) = 8; sub_4014A0(&v30, 1, 0); LOBYTE(v31) = 6; v26 = (unsigned int)(v28 + 1); } v8 = (void *)sub_426900(v22, (int)&v29, v26, (void *)0xFFFFFFFF); LOBYTE(v31) = 9; sub_406450(&v24, v8); LOBYTE(v31) = 10; sub_4014A0(&v29, 1, 0); LOBYTE(v31) = 6; if ( v25 ) v10 = "\n"; else v10 = (char *)&byte_9A8050; sub_401D10((int)&v20, v10, strlen(v10)); sub_4017F0(v22, (const void **)&v24, 0, (void *)0xFFFFFFFF); LOBYTE(v31) = 11; sub_4014A0(&v18, 1, 0); LOBYTE(v31) = 5; } if ( v9[72] ) sub_9076A0(v9[72], a3); if ( v21 < 0x10 ) ((void (__thiscall *)(_DWORD **, int *))(*v9)[118])(v9, &v20); else ((void (__thiscall *)(_DWORD **, int))(*v9)[118])(v9, v20); LOBYTE(v31) = 12; sub_4014A0(&v20, 1, 0); LOBYTE(v31) = 13; sub_4014A0(&v24, 1, 0); v31 = 14; sub_4014A0(v22, 1, 0); } //----- (008F56D0) -------------------------------------------------------- _BYTE **__cdecl sub_8F56D0(_BYTE **a1) { _BYTE **result; // eax while ( 1 ) { if ( **a1 != 32 ) { result = a1; if ( **a1 != 9 ) break; } ++*a1; } return result; } //----- (008F5700) -------------------------------------------------------- int __cdecl sub_8F5700(int a1, LPCSTR lpString, HDC hdc, int a4) { int v4; // kr00_4 CHAR v5; // al int result; // eax _BYTE *v7; // [esp+8h] [ebp-38h] LPCSTR v8; // [esp+Ch] [ebp-34h] struct tagSIZE psizl; // [esp+24h] [ebp-1Ch] int v10; // [esp+2Ch] [ebp-14h] int v11; // [esp+30h] [ebp-10h] int v12; // [esp+34h] [ebp-Ch] int v13; // [esp+38h] [ebp-8h] int v14; // [esp+3Ch] [ebp-4h] v11 = a1; v13 = 0; v4 = strlen(lpString); GetTextExtentPoint32A(hdc, lpString, v4, &psizl); v10 = 0; v14 = 0; if ( psizl.cx > a4 ) { while ( lpString && *lpString ) { if ( IsDBCSLeadByte(*lpString) ) v12 = 2; else v12 = 1; GetTextExtentPoint32A(hdc, lpString, v12, &psizl); if ( psizl.cx + v10 < a4 ) { *(_BYTE *)a1 = *lpString; if ( v12 == 2 ) *(_BYTE *)(a1 + 1) = lpString[1]; v10 += psizl.cx; v14 += v12; lpString += v12; a1 += v12; } else { GetTextExtentPoint32A(hdc, lpString, v12, &psizl); if ( !v13 && *lpString == 32 ) { *(_BYTE *)a1 = 32; return v14; } while ( v11 != a1 ) { if ( v13 >= 20 ) { v13 = 0; return v14; } if ( *(_BYTE *)a1 == 32 ) return v14; --lpString; *(_BYTE *)a1-- = 0; v10 -= psizl.cx; --v14; ++v13; } ++v13; } } result = v14; } else { v8 = lpString; v7 = (_BYTE *)a1; do { v5 = *v8; *v7++ = *v8++; } while ( v5 ); result = v4; } return result; } //----- (008F5910) -------------------------------------------------------- _DWORD *__cdecl sub_8F5910(_DWORD *a1, int a2) { char v3; // [esp+12h] [ebp-16h] char v4; // [esp+13h] [ebp-15h] int i; // [esp+14h] [ebp-14h] int v6; // [esp+18h] [ebp-10h] unsigned int j; // [esp+1Ch] [ebp-Ch] _DWORD *v8; // [esp+24h] [ebp-4h] if ( !a1 ) return 0; v8 = sub_85B610(a1, a2); if ( v8 ) return v8; if ( a1 ) { for ( i = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v4 = 1; goto LABEL_13; } } v4 = 0; LABEL_13: v3 = v4; } else { v3 = 0; } if ( v3 ) { for ( j = 0; j < a1[48]; ++j ) { if ( a1[47] > j ) v6 = *(_DWORD *)(a1[45] + 4 * j); else v6 = 0; if ( v6 ) return (_DWORD *)sub_8F5910(v6, a2); } } return 0; } //----- (008F5A30) -------------------------------------------------------- int __cdecl sub_8F5A30(_DWORD *a1, int a2) { int result; // eax char v3; // [esp+16h] [ebp-12h] char v4; // [esp+17h] [ebp-11h] int i; // [esp+18h] [ebp-10h] unsigned int j; // [esp+1Ch] [ebp-Ch] int v7; // [esp+24h] [ebp-4h] if ( !a1 ) return 0; v7 = sub_85C050(a1, a2); if ( v7 ) return v7; if ( a1 ) { for ( i = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v4 = 1; goto LABEL_13; } } v4 = 0; LABEL_13: v3 = v4; } else { v3 = 0; } if ( v3 ) { for ( j = 0; j < a1[48]; ++j ) { if ( a1[47] > j ) result = sub_8F5A30(*(_DWORD *)(a1[45] + 4 * j), a2); else result = sub_8F5A30(0, a2); if ( result ) return result; } } return 0; } //----- (008F5B50) -------------------------------------------------------- void __cdecl sub_8F5B50(_DWORD *a1, int a2) { char v2; // [esp+22h] [ebp-2Ah] char v3; // [esp+23h] [ebp-29h] int i; // [esp+24h] [ebp-28h] unsigned int j; // [esp+34h] [ebp-18h] volatile LONG *v6; // [esp+3Ch] [ebp-10h] int v7; // [esp+48h] [ebp-4h] if ( a1 ) { sub_85CA90(a1, &v6, a2); v7 = 0; if ( v6 ) { if ( v6 ) sub_402270(v6); v6 = 0; } if ( a1 ) { for ( i = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v3 = 1; goto LABEL_14; } } v3 = 0; LABEL_14: v2 = v3; } else { v2 = 0; } if ( v2 ) { for ( j = 0; j < a1[48]; ++j ) { if ( a1[47] > j ) sub_8F5B50(*(_DWORD *)(a1[45] + 4 * j), a2); else sub_8F5B50(0, a2); } } v7 = -1; if ( v6 ) sub_402270(v6); } } //----- (008F5CC0) -------------------------------------------------------- char __cdecl sub_8F5CC0(_DWORD *a1, _DWORD *a2) { char v3; // al char v4; // [esp+2h] [ebp-2Ah] char v5; // [esp+3h] [ebp-29h] int k; // [esp+4h] [ebp-28h] char v7; // [esp+1Ah] [ebp-12h] char v8; // [esp+1Bh] [ebp-11h] int i; // [esp+1Ch] [ebp-10h] unsigned int j; // [esp+24h] [ebp-8h] if ( !a1 ) return 0; if ( a1 ) { for ( i = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v8 = 1; goto LABEL_11; } } v8 = 0; LABEL_11: v7 = v8; } else { v7 = 0; } if ( v7 ) { for ( j = 0; j < a1[48]; ++j ) { if ( a1[47] > j ) v3 = sub_8F5CC0(*(_DWORD *)(a1[45] + 4 * j), a2); else v3 = sub_8F5CC0(0, a2); if ( v3 == 1 ) return 1; } } else { if ( a1 ) { for ( k = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); k; k = *(_DWORD *)(k + 4) ) { if ( (char *)k == dword_BA4840 ) { v5 = 1; goto LABEL_30; } } v5 = 0; LABEL_30: v4 = v5; } else { v4 = 0; } if ( v4 ) { *a2 = a1; return 1; } } return 0; } //----- (008F5E10) -------------------------------------------------------- _WORD *__cdecl sub_8F5E10(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6) { float v6; // STE4_4 float v7; // STD8_4 float v8; // STE0_4 float v9; // STE4_4 _WORD *v11; // [esp+4h] [ebp-114h] signed int v12; // [esp+58h] [ebp-C0h] float *j; // [esp+5Ch] [ebp-BCh] signed int v14; // [esp+60h] [ebp-B8h] float *i; // [esp+64h] [ebp-B4h] _DWORD *v16; // [esp+68h] [ebp-B0h] signed int k; // [esp+B0h] [ebp-68h] float v18; // [esp+C4h] [ebp-54h] float v19; // [esp+C8h] [ebp-50h] float v20; // [esp+CCh] [ebp-4Ch] float v21; // [esp+D0h] [ebp-48h] int v22; // [esp+D4h] [ebp-44h] float v23; // [esp+D8h] [ebp-40h] int v24; // [esp+DCh] [ebp-3Ch] float v25; // [esp+E0h] [ebp-38h] float v26; // [esp+E4h] [ebp-34h] float v27; // [esp+E8h] [ebp-30h] float v28; // [esp+ECh] [ebp-2Ch] float v29; // [esp+F0h] [ebp-28h] int v30; // [esp+F4h] [ebp-24h] float v31; // [esp+F8h] [ebp-20h] float v32; // [esp+FCh] [ebp-1Ch] float v33; // [esp+100h] [ebp-18h] int v34; // [esp+108h] [ebp-10h] int v35; // [esp+114h] [ebp-4h] *(float *)&v34 = (double)a5; v14 = 4; for ( i = &v26; --v14 >= 0; i += 2 ) ; v26 = 0.0; v27 = 0.0; v28 = 0.0; v29 = (double)a6; v30 = v34; v6 = (double)a6; v31 = v6; v32 = *(float *)&v34; v33 = 0.0; *(float *)&v34 = (double)(a5 + a3) / (double)a1; v12 = 4; for ( j = &v18; --v12 >= 0; j += 2 ) ; v18 = (double)a3 / (double)a1; v19 = (double)a4 / (double)a2; v7 = (double)a3 / (double)a1; v20 = v7; v21 = (double)(a6 + a4) / (double)a2; v22 = v34; v9 = (double)(a6 + a4) / (double)a2; v23 = v9; v24 = v34; v8 = (double)a4 / (double)a2; v25 = v8; v16 = operator new(0x70u); v35 = 0; if ( v16 ) v11 = sub_868440(v16, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v11 = 0; v35 = -1; sub_867880(v11, 4, 0, 0); for ( k = 0; k < 4; ++k ) sub_867DE0((int)v11, 0, k, &v26 + 2 * k); sub_867680((int)v11); sub_868230((int)v11, 0, 0, &v18, &v20, &v22, &v24); return v11; } //----- (008F61B0) -------------------------------------------------------- _WORD *__cdecl sub_8F61B0(unsigned int a1, unsigned int a2) { float v2; // ST54_4 float v3; // ST50_4 _WORD *v5; // [esp+14h] [ebp-3Ch] _DWORD *v6; // [esp+28h] [ebp-28h] v6 = operator new(0x70u); if ( v6 ) v5 = sub_868440(v6, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v5 = 0; sub_867880(v5, 4, 0, 0); v3 = (double)a2; v2 = (double)a1; sub_867E60((int)v5, 0, 0.0, 0.0, v2, v3); sub_867680((int)v5); return v5; } //----- (008F62B0) -------------------------------------------------------- _DWORD *__cdecl sub_8F62B0(char a1, char a2, char a3, char a4) { _DWORD *v5; // [esp+Ch] [ebp-30h] _DWORD *v6; // [esp+10h] [ebp-2Ch] int v7; // [esp+20h] [ebp-1Ch] int v8; // [esp+24h] [ebp-18h] int v9; // [esp+28h] [ebp-14h] _BYTE *v10; // [esp+2Ch] [ebp-10h] int v11; // [esp+38h] [ebp-4h] v6 = operator new(0x70u); v11 = 0; if ( v6 ) v5 = sub_8698C0(v6, 1u, 1u, &unk_ABDAD0, 1u, 1); else v5 = 0; v11 = -1; *(_DWORD *)(v5[23] + 4 * v5[24]); v10 = (_BYTE *)(*(_DWORD *)v5[23] + v5[20]); *v10 = a1; v10[1] = a2; v10[2] = a3; v10[3] = a4; v7 = 6; v8 = 3; v9 = 0; return sub_865FA0((int)v5, &v7); } //----- (008F63D0) -------------------------------------------------------- _DWORD *__cdecl sub_8F63D0(char *Src, int a2) { _DWORD *result; // eax _DWORD *v3; // [esp+Ch] [ebp-42Ch] char v4; // [esp+12h] [ebp-426h] char v5; // [esp+13h] [ebp-425h] int k; // [esp+14h] [ebp-424h] char v7; // [esp+1Ah] [ebp-41Eh] char v8; // [esp+1Bh] [ebp-41Dh] int j; // [esp+1Ch] [ebp-41Ch] _DWORD *v10; // [esp+30h] [ebp-408h] int v11; // [esp+40h] [ebp-3F8h] unsigned int i; // [esp+44h] [ebp-3F4h] char v13; // [esp+4Ch] [ebp-3ECh] int v14; // [esp+198h] [ebp-2A0h] unsigned int v15; // [esp+1A0h] [ebp-298h] char v16; // [esp+42Ah] [ebp-Eh] char v17; // [esp+42Bh] [ebp-Dh] int v18; // [esp+434h] [ebp-4h] sub_877EC0(&v13); v18 = 0; v16 = byte_BA4774; byte_BA4774 = 1; if ( a2 ) sub_876AD0(&v13, a2); v17 = sub_875BC0(&v13, Src); byte_BA4774 = v16; if ( v17 ) { v10 = operator new(0xE8u); LOBYTE(v18) = 1; if ( v10 ) v3 = sub_85A1C0(v10, 0); else v3 = 0; LOBYTE(v18) = 0; for ( i = 0; i < v15; ++i ) { v11 = *(_DWORD *)(v14 + 4 * i); if ( v11 ) { for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11); j; j = *(_DWORD *)(j + 4) ) { if ( (char *)j == dword_BA455C ) { v8 = 1; goto LABEL_18; } } v8 = 0; LABEL_18: v7 = v8; } else { v7 = 0; } if ( v7 ) goto LABEL_35; if ( v11 ) { for ( k = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11); k; k = *(_DWORD *)(k + 4) ) { if ( (char *)k == dword_BA4840 ) { v5 = 1; goto LABEL_28; } } v5 = 0; LABEL_28: v4 = v5; } else { v4 = 0; } if ( v4 ) LABEL_35: (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 116))(v3, v11, 0); } sub_85BED0((_DWORD **)v3, 0.0, 1); v18 = -1; sub_877120(&v13); result = v3; } else { v18 = -1; sub_877120(&v13); result = 0; } return result; } // BA4774: using guessed type char byte_BA4774; //----- (008F66B0) -------------------------------------------------------- char __cdecl sub_8F66B0(char *Src, int a2, int a3) { char result; // al char v4; // [esp+12h] [ebp-416h] char v5; // [esp+13h] [ebp-415h] int i; // [esp+14h] [ebp-414h] char v7; // [esp+34h] [ebp-3F4h] int *v8; // [esp+180h] [ebp-2A8h] int v9; // [esp+188h] [ebp-2A0h] char v10; // [esp+413h] [ebp-15h] int v11; // [esp+414h] [ebp-14h] char v12; // [esp+41Bh] [ebp-Dh] int v13; // [esp+424h] [ebp-4h] if ( *(_DWORD *)a2 ) { if ( *(_DWORD *)a2 ) sub_402270(*(volatile LONG **)a2); *(_DWORD *)a2 = 0; if ( *(_DWORD *)a2 ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)a2 + 4)); } sub_877EC0(&v7); v13 = 0; if ( a3 ) sub_876AD0(&v7, a3); v10 = byte_BA4774; byte_BA4774 = 1; v12 = sub_875BC0(&v7, Src); byte_BA4774 = v10; if ( v12 ) { byte_BA4774 = v10; if ( v9 == 1 ) { v11 = *v8; if ( v11 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v5 = 1; goto LABEL_20; } } v5 = 0; LABEL_20: v4 = v5; } else { v4 = 0; } if ( v4 ) { if ( *(_DWORD *)a2 != v11 ) { if ( *(_DWORD *)a2 ) sub_402270(*(volatile LONG **)a2); *(_DWORD *)a2 = v11; if ( *(_DWORD *)a2 ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)a2 + 4)); } v13 = -1; sub_877120(&v7); result = 1; } else { v13 = -1; sub_877120(&v7); result = 0; } } else { v13 = -1; sub_877120(&v7); result = 0; } } else { v13 = -1; sub_877120(&v7); result = 0; } return result; } // BA4774: using guessed type char byte_BA4774; //----- (008F6920) -------------------------------------------------------- void __cdecl sub_8F6920(int a1, char a2) { char v2; // [esp+2h] [ebp-2Eh] char v3; // [esp+3h] [ebp-2Dh] int k; // [esp+4h] [ebp-2Ch] char v5; // [esp+1Ah] [ebp-16h] char v6; // [esp+1Bh] [ebp-15h] int i; // [esp+1Ch] [ebp-14h] unsigned int j; // [esp+28h] [ebp-8h] if ( a1 ) { if ( a1 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v6 = 1; goto LABEL_10; } } v6 = 0; LABEL_10: v5 = v6; } else { v5 = 0; } if ( v5 ) { for ( j = 0; j < *(_DWORD *)(a1 + 192); ++j ) { if ( *(_DWORD *)(a1 + 188) > j ) sub_8F6920(*(_DWORD *)(*(_DWORD *)(a1 + 180) + 4 * j), a2); else sub_8F6920(0, a2); } } else { if ( a1 ) { for ( k = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1); k; k = *(_DWORD *)(k + 4) ) { if ( (char *)k == dword_BA4A28 ) { v3 = 1; goto LABEL_27; } } v3 = 0; LABEL_27: v2 = v3; } else { v2 = 0; } if ( v2 ) *(_BYTE *)(a1 + 176) = a2; } } } //----- (008F6A70) -------------------------------------------------------- _WORD *__cdecl sub_8F6A70(int a1, int a2, int a3, int a4, int a5, float a6, float a7) { float v8; // ST80_4 float v9; // ST78_4 float v10; // ST70_4 float v11; // ST3C_4 int v12; // ecx int v13; // edx int v14; // eax int v15; // ecx _DWORD *v16; // [esp+8h] [ebp-108h] signed int v17; // [esp+Ch] [ebp-104h] int *l; // [esp+10h] [ebp-100h] signed int v19; // [esp+34h] [ebp-DCh] int *k; // [esp+38h] [ebp-D8h] _DWORD *v21; // [esp+60h] [ebp-B0h] signed int m; // [esp+68h] [ebp-A8h] unsigned __int16 v23; // [esp+6Ch] [ebp-A4h] signed int v24; // [esp+70h] [ebp-A0h] signed int v25; // [esp+74h] [ebp-9Ch] signed int v26; // [esp+78h] [ebp-98h] signed int v27; // [esp+7Ch] [ebp-94h] int v28; // [esp+80h] [ebp-90h] int v29; // [esp+84h] [ebp-8Ch] int v30; // [esp+88h] [ebp-88h] int v31; // [esp+8Ch] [ebp-84h] int v32; // [esp+90h] [ebp-80h] int v33; // [esp+94h] [ebp-7Ch] int v34; // [esp+98h] [ebp-78h] int v35; // [esp+9Ch] [ebp-74h] int v36; // [esp+A0h] [ebp-70h] float v37; // [esp+A4h] [ebp-6Ch] float v38; // [esp+A8h] [ebp-68h] float v39; // [esp+ACh] [ebp-64h] float v40; // [esp+B0h] [ebp-60h] float v41; // [esp+B4h] [ebp-5Ch] float v42; // [esp+B8h] [ebp-58h] float v43; // [esp+BCh] [ebp-54h] float v44; // [esp+C0h] [ebp-50h] float v45; // [esp+C8h] [ebp-48h] float v46; // [esp+CCh] [ebp-44h] unsigned int j; // [esp+D0h] [ebp-40h] _WORD *v48; // [esp+D4h] [ebp-3Ch] float v49; // [esp+D8h] [ebp-38h] float v50; // [esp+DCh] [ebp-34h] float v51; // [esp+E0h] [ebp-30h] int v52; // [esp+E4h] [ebp-2Ch] unsigned int v53; // [esp+E8h] [ebp-28h] float v54; // [esp+ECh] [ebp-24h] unsigned int v55; // [esp+F0h] [ebp-20h] unsigned int v56; // [esp+F4h] [ebp-1Ch] unsigned int i; // [esp+F8h] [ebp-18h] float *v58; // [esp+FCh] [ebp-14h] int v59; // [esp+100h] [ebp-10h] int v60; // [esp+10Ch] [ebp-4h] if ( !a1 ) return 0; v55 = *(unsigned __int16 *)(a1 + 12); v58 = *(float **)(a1 + 32); v59 = *(_DWORD *)(a1 + 44); v56 = *(_DWORD *)(a1 + 68); v52 = *(_DWORD *)(a1 + 72); v53 = v56 / 6; v21 = operator new(0x70u); v60 = 0; if ( v21 ) v16 = sub_868440(v21, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v16 = 0; v60 = -1; v48 = v16; for ( i = 0; i < v55; ++i ) { v58[3 * i] = v58[3 * i] + a6; v58[3 * i + 1] = v58[3 * i + 1] + a7; } v54 = *v58; v49 = v54; v51 = v58[1]; v50 = v51; for ( i = 1; i < v55; ++i ) { if ( v49 <= (double)v58[3 * i] ) { if ( v54 < (double)v58[3 * i] ) v54 = v58[3 * i]; } else { v49 = v58[3 * i]; } if ( v50 <= (double)v58[3 * i + 1] ) { if ( v51 < (double)v58[3 * i + 1] ) v51 = v58[3 * i + 1]; } else { v50 = v58[3 * i + 1]; } } for ( i = 0; i < v55; ++i ) { v58[3 * i] = v58[3 * i] - v49; v58[3 * i + 1] = v58[3 * i + 1] - v50; } *(_DWORD *)a4 = (signed int)(v54 + 0.5) - (signed int)(v49 + 0.5); *(_DWORD *)a5 = (signed int)(v51 + 0.5) - (signed int)(v50 + 0.5); *(_DWORD *)a2 = (signed int)(v49 + 0.5); *(_DWORD *)a3 = (signed int)(v50 + 0.5); for ( i = 0; i < v53; ++i ) { v26 = -1; v25 = -1; v24 = -1; v27 = -1; v46 = 0.0; v45 = 0.0; for ( j = 0; j < 6; ++j ) { v46 = v46 + v58[3 * *(unsigned __int16 *)(v52 + 2 * (j + 6 * i))]; v45 = v45 + v58[3 * *(unsigned __int16 *)(v52 + 2 * (j + 6 * i)) + 1]; } v46 = v46 / 6.0; v45 = v45 / 6.0; for ( j = 0; j < 6; ++j ) { v23 = *(_WORD *)(v52 + 2 * (j + 6 * i)); if ( v46 < (double)v58[3 * v23] ) { if ( v45 < (double)v58[3 * v23 + 1] ) v25 = v23; else v26 = v23; } else if ( v45 < (double)v58[3 * v23 + 1] ) { v24 = v23; } else { v27 = v23; } } if ( v27 < 0 || v24 < 0 || v25 < 0 || v26 < 0 ) return 0; v19 = 4; for ( k = (int *)&v37; --v19 >= 0; k += 2 ) ; v8 = v58[3 * v27 + 1]; v37 = v58[3 * v27]; v38 = v8; v9 = v58[3 * v24 + 1]; v39 = v58[3 * v24]; v40 = v9; v10 = v58[3 * v25 + 1]; v41 = v58[3 * v25]; v42 = v10; v11 = v58[3 * v26 + 1]; v43 = v58[3 * v26]; v44 = v11; v17 = 4; for ( l = &v28; --v17 >= 0; l += 2 ) ; v12 = *(_DWORD *)(v59 + 8 * v27 + 4); v28 = *(_DWORD *)(v59 + 8 * v27); v29 = v12; v13 = *(_DWORD *)(v59 + 8 * v24 + 4); v30 = *(_DWORD *)(v59 + 8 * v24); v31 = v13; v14 = *(_DWORD *)(v59 + 8 * v25 + 4); v32 = *(_DWORD *)(v59 + 8 * v25); v33 = v14; v15 = *(_DWORD *)(v59 + 8 * v26 + 4); v34 = *(_DWORD *)(v59 + 8 * v26); v35 = v15; v36 = sub_867880(v48, 4, 0, 0); for ( m = 0; m < 4; ++m ) sub_867DE0((int)v48, v36, m, &v37 + 2 * m); sub_867680((int)v48); sub_868230((int)v48, v36, 0, &v28, &v30, &v32, &v34); } return v48; } //----- (008F71E0) -------------------------------------------------------- char __cdecl sub_8F71E0(int a1, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6) { float v7; // [esp+10h] [ebp-20h] int v8; // [esp+14h] [ebp-1Ch] float v9; // [esp+18h] [ebp-18h] float v10; // [esp+1Ch] [ebp-14h] float v11; // [esp+20h] [ebp-10h] unsigned int i; // [esp+28h] [ebp-8h] float *v13; // [esp+2Ch] [ebp-4h] v8 = (*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 72))(a1, a2); if ( !v8 ) return 0; v13 = *(float **)(*(_DWORD *)(v8 + 184) + 32); v11 = *v13; v7 = v11; v10 = v13[1]; v9 = v10; for ( i = 1; i < *(unsigned __int16 *)(*(_DWORD *)(v8 + 184) + 12); ++i ) { if ( v7 <= (double)v13[3 * i] ) { if ( v11 < (double)v13[3 * i] ) v11 = v13[3 * i]; } else { v7 = v13[3 * i]; } if ( v9 <= (double)v13[3 * i + 1] ) { if ( v10 < (double)v13[3 * i + 1] ) v10 = v13[3 * i + 1]; } else { v9 = v13[3 * i + 1]; } } *a5 = (signed int)(v11 + 0.5) - (signed int)(v7 + 0.5); *a6 = (signed int)(v10 + 0.5) - (signed int)(v9 + 0.5); *a3 = (signed int)(v7 + 0.5); *a4 = (signed int)(v9 + 0.5); return 1; } //----- (008F73A0) -------------------------------------------------------- char __cdecl sub_8F73A0(_DWORD *a1, _DWORD *a2) { char v3; // al char v4; // [esp+2h] [ebp-2Ah] char v5; // [esp+3h] [ebp-29h] int k; // [esp+4h] [ebp-28h] char v7; // [esp+1Ah] [ebp-12h] char v8; // [esp+1Bh] [ebp-11h] int i; // [esp+1Ch] [ebp-10h] unsigned int j; // [esp+24h] [ebp-8h] if ( !a1 ) return 0; if ( a1 ) { for ( i = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v8 = 1; goto LABEL_11; } } v8 = 0; LABEL_11: v7 = v8; } else { v7 = 0; } if ( v7 ) { for ( j = 0; j < a1[48]; ++j ) { if ( a1[47] > j ) v3 = sub_8F73A0(*(_DWORD *)(a1[45] + 4 * j), a2); else v3 = sub_8F73A0(0, a2); if ( v3 == 1 ) return 1; } } else { if ( a1 ) { for ( k = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); k; k = *(_DWORD *)(k + 4) ) { if ( (char *)k == dword_BA475C ) { v5 = 1; goto LABEL_30; } } v5 = 0; LABEL_30: v4 = v5; } else { v4 = 0; } if ( v4 ) { *a2 = a1; return 1; } } return 0; } //----- (008F74F0) -------------------------------------------------------- char __cdecl sub_8F74F0(int a1, float a2, float a3, int a4, int a5, int a6, int a7) { float *v8; // eax char v9; // [esp+14h] [ebp-50h] float v10; // [esp+20h] [ebp-44h] float v11; // [esp+24h] [ebp-40h] float v12; // [esp+28h] [ebp-3Ch] float v13; // [esp+2Ch] [ebp-38h] float v14; // [esp+30h] [ebp-34h] int v15; // [esp+34h] [ebp-30h] char v16; // [esp+38h] [ebp-2Ch] int v17; // [esp+54h] [ebp-10h] float v18; // [esp+58h] [ebp-Ch] int v19; // [esp+5Ch] [ebp-8h] float v20; // [esp+60h] [ebp-4h] if ( !a1 ) return 0; if ( !sub_861E70((float *)a1, (int)&a4, (int)&v15, (int)&v19, 0.0000099999997) ) return 0; *(float *)&v19 = 1.0 - *(float *)&v19; *(float *)&v19 = *(float *)&v19 * a3; *(float *)&v15 = *(float *)&v15 * a2; v17 = a1 + 240; v13 = *(float *)(a1 + 260) - *(float *)(a1 + 256); v8 = sub_438930((float *)(a1 + 88), (float *)&v9, (float *)&a4); v11 = sub_443070(v8); v10 = 1.0 / v13; v14 = *(float *)(v17 + 20) * v10; v12 = -(*(float *)(v17 + 16) * *(float *)(v17 + 20) * v10); sub_86B1D0(&v16, 0); v20 = (v14 * v11 + v12) / v11; v18 = ((float)10000.0 - (float)1.0) * v20 + (float)1.0; *(float *)a7 = *(float *)&v15; *(float *)(a7 + 4) = *(float *)&v19; *(float *)(a7 + 8) = v18; return 1; } //----- (008F7610) -------------------------------------------------------- int __cdecl sub_8F7610(int a1) { int result; // eax int v2; // [esp+0h] [ebp-8h] v2 = *(_DWORD *)(a1 + 40); if ( v2 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 20))(v2); else result = 0; return result; } //----- (008F7640) -------------------------------------------------------- _DWORD *__thiscall sub_8F7640(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; sub_85F910(this, a2); *v2 = &PgWinCullingProcess::`vftable'; return v2; } // A41FDC: using guessed type void *PgWinCullingProcess::`vftable'; //----- (008F7670) -------------------------------------------------------- void *__thiscall sub_8F7670(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F76A0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F76A0) -------------------------------------------------------- void __thiscall sub_8F76A0(_DWORD *this) { *this = &PgWinCullingProcess::`vftable'; sub_85F7E0(this); } // A41FDC: using guessed type void *PgWinCullingProcess::`vftable'; //----- (008F76C0) -------------------------------------------------------- int __thiscall sub_8F76C0(_DWORD *this, int a2, _BYTE *a3, int a4) { int result; // eax _DWORD *v5; // [esp+0h] [ebp-8h] int v6; // [esp+4h] [ebp-4h] v5 = this; if ( a2 && a3 ) { this[3] = a2; if ( a4 ) { v6 = this[2]; this[2] = a4; } result = (int)this; if ( this[2] && a3 ) result = sub_85C0A0(a3, (int)this); if ( a4 ) { result = v6; v5[2] = v6; } v5[3] = 0; } return result; } //----- (008F7740) -------------------------------------------------------- int __thiscall sub_8F7740(void *this, int a2) { return (*(int (__thiscall **)(int, void *))(*(_DWORD *)a2 + 108))(a2, this); } //----- (008F7760) -------------------------------------------------------- float *__thiscall sub_8F7760(float *this) { _DWORD *v1; // ST54_4 _DWORD *v2; // ST50_4 float *v4; // [esp+4h] [ebp-6Ch] volatile LONG **v5; // [esp+8h] [ebp-68h] volatile LONG **v6; // [esp+10h] [ebp-60h] v4 = this; *(_DWORD *)this = &PgWinMgr::`vftable'; sub_8D06C0(this + 1); v4[7] = 0.0; if ( *((_DWORD *)v4 + 7) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 7) + 4)); v4[8] = 0.0; if ( *((_DWORD *)v4 + 8) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 8) + 4)); v1 = v4 + 9; sub_8F7B10((_DWORD *)v4 + 9); *v1 = &NiTPointerList>::`vftable'; *v1 = &PgTList>::`vftable'; v2 = v4 + 13; sub_4891D0((_DWORD *)v4 + 13); *v2 = &NiTPointerList::`vftable'; *v2 = &PgTList::`vftable'; sub_8FA6F0((_DWORD *)v4 + 17, 1); v4[21] = 0.0; if ( *((_DWORD *)v4 + 21) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 21) + 4)); sub_489300((_DWORD *)v4 + 22); *((_DWORD *)v4 + 22) = &PgTList::`vftable'; v4[27] = 0.0; if ( *((_DWORD *)v4 + 27) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 27) + 4)); v4[28] = 0.0; if ( *((_DWORD *)v4 + 28) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 28) + 4)); sub_4B1230((_DWORD *)v4 + 30); *((_DWORD *)v4 + 30) = &NiTList::`vftable'; v4[36] = 0.0; if ( *((_DWORD *)v4 + 36) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v4 + 36) + 4)); v6 = (volatile LONG **)(v4 + 21); if ( *((_DWORD *)v4 + 21) ) { if ( *v6 ) sub_402270(*v6); *v6 = 0; if ( *v6 ) InterlockedIncrement(*v6 + 1); } v4[26] = 0.0; *((_BYTE *)v4 + 116) = 1; v4[34] = 0.0; v4[35] = 0.0; v5 = (volatile LONG **)(v4 + 7); if ( *((_DWORD *)v4 + 7) ) { if ( *v5 ) sub_402270(*v5); *v5 = 0; if ( *v5 ) InterlockedIncrement(*v5 + 1); } *((_BYTE *)v4 + 148) = 0; *((_BYTE *)v4 + 149) = 0; return v4; } // 9B90C8: using guessed type void *NiTPointerList::`vftable'; // 9B90D8: using guessed type void *PgTList::`vftable'; // 9BBBEC: using guessed type void *NiTList::`vftable'; // A41FF0: using guessed type void *PgTList>::`vftable'; // A42000: using guessed type void *NiTPointerList>::`vftable'; // A42010: using guessed type void *PgWinMgr::`vftable'; //----- (008F7A60) -------------------------------------------------------- void *__thiscall sub_8F7A60(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8F7B50(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008F7A90) -------------------------------------------------------- _DWORD *__thiscall sub_8F7A90(_DWORD *this, char a2) { _DWORD *v3; // [esp+4h] [ebp-18h] v3 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; sub_88DCC0(this); *v3 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A42028: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008F7B10) -------------------------------------------------------- _DWORD *__thiscall sub_8F7B10(_DWORD *this) { *this = &NiTListBase,NiPointer>::`vftable'; this[3] = 0; this[1] = 0; this[2] = 0; *this = &NiTPointerListBase,NiPointer>::`vftable'; return this; } // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A42028: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008F7B50) -------------------------------------------------------- void __thiscall sub_8F7B50(_DWORD *this) { _DWORD *v1; // [esp+4h] [ebp-7Ch] volatile LONG **v2; // [esp+5Ch] [ebp-24h] v1 = this; *this = &PgWinMgr::`vftable'; sub_521E30(this + 22); --dword_AC2F98; v2 = (volatile LONG **)(v1 + 7); if ( v1[7] ) { if ( *v2 ) sub_402270(*v2); *v2 = 0; if ( *v2 ) InterlockedIncrement(*v2 + 1); } if ( v1[36] ) sub_402270((volatile LONG *)v1[36]); v1[30] = &NiTPointerListBase,PgWin *>::`vftable'; sub_521E30(v1 + 30); v1[30] = &NiTListBase,PgWin *>::`vftable'; if ( v1[28] ) sub_402270((volatile LONG *)v1[28]); if ( v1[27] ) sub_402270((volatile LONG *)v1[27]); v1[22] = &PgTList::`vftable'; sub_521E30(v1 + 22); sub_4891F0(v1 + 22); if ( v1[21] ) sub_402270((volatile LONG *)v1[21]); operator delete[]((void *)v1[17]); v1[13] = &PgTList::`vftable'; sub_521E30(v1 + 13); sub_4891F0(v1 + 13); v1[9] = &PgTList>::`vftable'; sub_88DCC0(v1 + 9); sub_8FA9C0(v1 + 9); if ( v1[8] ) sub_402270((volatile LONG *)v1[8]); if ( v1[7] ) sub_402270((volatile LONG *)v1[7]); nullsub_6(v1 + 1); } // 9B90D8: using guessed type void *PgTList::`vftable'; // 9BBB7C: using guessed type void *NiTListBase,PgWin *>::`vftable'; // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; // A41FF0: using guessed type void *PgTList>::`vftable'; // A42010: using guessed type void *PgWinMgr::`vftable'; // AC2F98: using guessed type int dword_AC2F98; //----- (008F7DA0) -------------------------------------------------------- char __thiscall sub_8F7DA0(volatile LONG **this) { int v1; // ST68_4 int v2; // ST70_4 float v3; // ST74_4 int v4; // eax volatile LONG *v6; // [esp+4h] [ebp-7Ch] volatile LONG *v7; // [esp+8h] [ebp-78h] volatile LONG *v8; // [esp+Ch] [ebp-74h] volatile LONG **v9; // [esp+10h] [ebp-70h] volatile LONG **v10; // [esp+1Ch] [ebp-64h] volatile LONG **v11; // [esp+2Ch] [ebp-54h] volatile LONG **v12; // [esp+3Ch] [ebp-44h] _DWORD *v13; // [esp+4Ch] [ebp-34h] _DWORD *v14; // [esp+54h] [ebp-2Ch] _DWORD *v15; // [esp+5Ch] [ebp-24h] v9 = this; v15 = operator new(0x130u); if ( v15 ) v8 = sub_911260(v15); else v8 = 0; v12 = v9 + 8; if ( v9[8] != v8 ) { if ( *v12 ) sub_402270(*v12); *v12 = v8; if ( *v12 ) InterlockedIncrement(*v12 + 1); } v14 = operator new(0xE8u); if ( v14 ) v7 = sub_85A1C0(v14, 0); else v7 = 0; v11 = v9 + 7; if ( v9[7] != v7 ) { if ( *v11 ) sub_402270(*v11); *v11 = v7; if ( *v11 ) InterlockedIncrement(*v11 + 1); } v13 = operator new(0x20u); if ( v13 ) v6 = sub_698F20(v13, 0); else v6 = 0; v10 = v9 + 36; if ( v9[36] != v6 ) { if ( *v10 ) sub_402270(*v10); *v10 = v6; if ( *v10 ) InterlockedIncrement(*v10 + 1); } v1 = *((_DWORD *)v9[8] + 74); v2 = *(_DWORD *)(v1 + 92); v3 = *(float *)(v1 + 96) + 10.0; v4 = v1 + 88; *(_DWORD *)v4 = *(_DWORD *)(v1 + 88); *(_DWORD *)(v4 + 4) = v2; *(float *)(v4 + 8) = v3; sub_8F8920(v9, dword_BA46D0); return 1; } // BA46D0: using guessed type int dword_BA46D0; //----- (008F7FE0) -------------------------------------------------------- LONG __thiscall sub_8F7FE0(volatile LONG **this) { LONG result; // eax volatile LONG **v2; // [esp+0h] [ebp-54h] volatile LONG **v3; // [esp+4h] [ebp-50h] volatile LONG **v4; // [esp+14h] [ebp-40h] volatile LONG **v5; // [esp+24h] [ebp-30h] volatile LONG **v6; // [esp+34h] [ebp-20h] volatile LONG **v7; // [esp+44h] [ebp-10h] v2 = this; sub_8FA190(this, 0); sub_8F88C0(v2); sub_8F9F80(v2); v7 = v2 + 8; if ( v2[8] ) { if ( *v7 ) sub_402270(*v7); *v7 = 0; if ( *v7 ) InterlockedIncrement(*v7 + 1); } v6 = v2 + 27; if ( v2[27] ) { if ( *v6 ) sub_402270(*v6); *v6 = 0; if ( *v6 ) InterlockedIncrement(*v6 + 1); } v5 = v2 + 36; if ( v2[36] ) { if ( *v5 ) sub_402270(*v5); *v5 = 0; if ( *v5 ) InterlockedIncrement(*v5 + 1); } v4 = v2 + 28; if ( v2[28] ) { if ( *v4 ) sub_402270(*v4); *v4 = 0; if ( *v4 ) InterlockedIncrement(*v4 + 1); } result = (LONG)v2; v2[26] = 0; v3 = v2 + 7; if ( v2[7] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; result = (LONG)(v2 + 7); if ( *v3 ) result = InterlockedIncrement(*v3 + 1); } v2[34] = 0; v2[35] = 0; return result; } //----- (008F81A0) -------------------------------------------------------- char __thiscall sub_8F81A0(_DWORD *this, _DWORD *a2) { int v3; // eax _DWORD *v4; // [esp+0h] [ebp-5Ch] volatile LONG *v5; // [esp+54h] [ebp-8h] int v6; // [esp+58h] [ebp-4h] v4 = this; if ( !a2 ) return 0; if ( a2[65] == -1 ) return 1; v3 = sub_8F8280(this); if ( (_DWORD *)v3 == a2 ) return 0; v6 = *(_DWORD *)(v4[8] + 296); if ( !v6 ) return 0; while ( sub_402BF0(a2) ) a2 = (_DWORD *)sub_402BF0(a2); (*(void (__thiscall **)(int, volatile LONG **, _DWORD *))(*(_DWORD *)v6 + 120))(v6, &v5, a2); if ( v5 ) sub_402270(v5); (*(void (__thiscall **)(int, _DWORD *, _DWORD))(*(_DWORD *)v6 + 116))(v6, a2, 0); sub_8FA600(v4 + 13, &a2); (*(void (__thiscall **)(_DWORD *))(*a2 + 272))(a2); return 1; } //----- (008F8280) -------------------------------------------------------- int __thiscall sub_8F8280(_DWORD *this) { return *(_DWORD *)(this[15] + 8); } //----- (008F82A0) -------------------------------------------------------- char __thiscall sub_8F82A0(_DWORD *this, _DWORD *a2) { volatile LONG *v3; // [esp+1Ch] [ebp-ACh] _DWORD *v4; // [esp+20h] [ebp-A8h] _DWORD *v5; // [esp+88h] [ebp-40h] _DWORD **v6; // [esp+8Ch] [ebp-3Ch] int v7; // [esp+90h] [ebp-38h] void *v8; // [esp+94h] [ebp-34h] volatile LONG *v9; // [esp+98h] [ebp-30h] int v10; // [esp+9Ch] [ebp-2Ch] unsigned int j; // [esp+A0h] [ebp-28h] int v12; // [esp+A4h] [ebp-24h] unsigned int i; // [esp+A8h] [ebp-20h] volatile LONG *v14; // [esp+ACh] [ebp-1Ch] unsigned int v15; // [esp+B0h] [ebp-18h] unsigned int v16; // [esp+B4h] [ebp-14h] _DWORD **v17; // [esp+B8h] [ebp-10h] int v18; // [esp+C4h] [ebp-4h] v4 = this; v7 = this[8]; v6 = *(_DWORD ***)(v7 + 296); v17 = v6; if ( !v6 ) return 0; if ( !a2 ) return 0; v5 = a2; if ( (sub_4035F0(this + 13, &v5, 0) != 0) == 1 ) return 1; (*(void (__thiscall **)(_DWORD *, signed int))(*a2 + 256))(a2, 1); (*(void (__thiscall **)(_DWORD *))(*a2 + 264))(a2); sub_8FA8D0(v4, (int)a2); if ( a2[65] == -1 ) { v16 = (unsigned int)v17[48]; v8 = operator new(0xE8u); v18 = 0; if ( v8 ) v3 = sub_85A1C0(v8, 0); else v3 = 0; v9 = v3; v18 = -1; v14 = v3; if ( v3 ) InterlockedIncrement(v14 + 1); v18 = 1; for ( i = 0; i < v16; ++i ) { if ( (unsigned int)v17[47] > i ) v12 = v17[45][i]; else v12 = 0; if ( v12 ) (*(void (__thiscall **)(volatile LONG *, int, _DWORD))(*v14 + 116))(v14, v12, 0); } sub_8F3870(v17 + 44); sub_8F3B60(v17 + 44); ((void (__thiscall *)(_DWORD **, _DWORD *, _DWORD))(*v17)[29])(v17, a2, 0); v15 = *((_DWORD *)v14 + 48); for ( j = 0; j < v15; ++j ) { if ( *((_DWORD *)v14 + 47) > j ) v10 = *(_DWORD *)(*((_DWORD *)v14 + 45) + 4 * j); else v10 = 0; if ( v10 ) ((void (__thiscall *)(_DWORD **, int, _DWORD))(*v17)[29])(v17, v10, 0); } v18 = -1; if ( v14 ) sub_402270(v14); } else { ((void (__thiscall *)(_DWORD **, _DWORD *, _DWORD))(*v17)[29])(v17, a2, 0); } sub_85C4D0(a2); sub_85C6F0(a2); sub_85BED0(v17, 0.0, 0); return 1; } //----- (008F85E0) -------------------------------------------------------- char __thiscall sub_8F85E0(_DWORD *this, _DWORD *a2) { a2[65] = 0; sub_8F82A0(this, a2); return 1; } //----- (008F8610) -------------------------------------------------------- char __thiscall sub_8F8610(_DWORD *this, _DWORD *a2) { a2[65] = -1; sub_8F82A0(this, a2); return 1; } //----- (008F8640) -------------------------------------------------------- void __stdcall sub_8F8640(_DWORD *a1) { int i; // [esp+2Ch] [ebp-8h] int v2; // [esp+30h] [ebp-4h] if ( a1 ) { (*(void (__thiscall **)(_DWORD *))(*a1 + 360))(a1); v2 = 0; for ( i = sub_402C40(a1, &v2); i; i = sub_402C40(a1, &v2) ) sub_8F8640(i); } } //----- (008F86A0) -------------------------------------------------------- char __thiscall sub_8F86A0(_DWORD *this, _DWORD *a2) { _DWORD *v3; // [esp+14h] [ebp-90h] _DWORD *v4; // [esp+20h] [ebp-84h] volatile LONG **v5; // [esp+3Ch] [ebp-68h] volatile LONG *v6; // [esp+40h] [ebp-64h] volatile LONG *v7; // [esp+4Ch] [ebp-58h] volatile LONG **v8; // [esp+50h] [ebp-54h] volatile LONG *v9; // [esp+54h] [ebp-50h] bool v10; // [esp+7Bh] [ebp-29h] _DWORD *v11; // [esp+7Ch] [ebp-28h] int *v12; // [esp+80h] [ebp-24h] int *v13; // [esp+84h] [ebp-20h] _DWORD *v14; // [esp+88h] [ebp-1Ch] int *v15; // [esp+8Ch] [ebp-18h] int *v16; // [esp+90h] [ebp-14h] _DWORD **v17; // [esp+94h] [ebp-10h] int v18; // [esp+98h] [ebp-Ch] volatile LONG *v19; // [esp+9Ch] [ebp-8h] _DWORD **v20; // [esp+A0h] [ebp-4h] v3 = this; v18 = this[8]; v17 = *(_DWORD ***)(v18 + 296); v20 = v17; if ( !v17 ) return 0; if ( !a2 ) return 0; v11 = a2; v13 = 0; v15 = (int *)this[14]; v13 = v15; while ( v13 ) { v16 = v13; v14 = v13 + 2; v13 = (int *)*v13; if ( v11 == (_DWORD *)*v14 ) { v12 = v16; goto LABEL_11; } } v12 = 0; LABEL_11: v10 = v12 != 0; if ( v12 == 0 ) return 0; sub_8F8640(a2); sub_937220(v3 + 22, (int *)&a2); if ( v3[25] ) { v7 = *(volatile LONG **)(v3[23] + 8); v8 = (volatile LONG **)(v3 + 21); if ( (volatile LONG *)v3[21] != v7 ) { if ( *v8 ) sub_402270(*v8); *v8 = v7; if ( *v8 ) { v9 = *v8; InterlockedIncrement(v9 + 1); } } } else { v5 = (volatile LONG **)(v3 + 21); if ( v3[21] ) { if ( *v5 ) sub_402270(*v5); *v5 = 0; if ( *v5 ) { v6 = *v5; InterlockedIncrement(v6 + 1); } } } (*(void (__thiscall **)(_DWORD *, _DWORD))(*a2 + 256))(a2, 0); v4 = a2; sub_937220(v3 + 13, (int *)&v4); *((_BYTE *)v3 + 149) = 0; ((void (__thiscall *)(_DWORD **, volatile LONG **, _DWORD *))(*v20)[30])(v20, &v19, a2); if ( v19 ) sub_402270(v19); sub_85BED0(v20, 0.0, 0); return 1; } //----- (008F88C0) -------------------------------------------------------- char __thiscall sub_8F88C0(_DWORD *this) { char result; // al _DWORD **v2; // ST08_4 _DWORD *v3; // [esp+0h] [ebp-14h] _DWORD *v4; // [esp+10h] [ebp-4h] v3 = this; result = (char)this; v4 = (_DWORD *)this[14]; while ( v4 ) { v2 = (_DWORD **)(v4 + 2); v4 = (_DWORD *)*v4; result = sub_8F86A0(v3, *v2); } dword_AC2F9C = -2; return result; } // AC2F9C: using guessed type int dword_AC2F9C; //----- (008F8920) -------------------------------------------------------- void __thiscall sub_8F8920(void *this, int a2) { int v2; // ST08_4 if ( a2 ) { v2 = (*(int (__thiscall **)(int, void *))(*(_DWORD *)a2 + 104))(a2, this); dword_BA6A80 = 0; dword_BA6A84 = 0; dword_AC2F6C = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 60))(v2, 0) - 1; dword_AC2F70 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 64))(v2, 0) - 1; xRight = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 60))(v2, 0); dword_AC2F78 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 64))(v2, 0); } } // AC2F6C: using guessed type int dword_AC2F6C; // AC2F70: using guessed type int dword_AC2F70; // BA6A80: using guessed type int dword_BA6A80; // BA6A84: using guessed type int dword_BA6A84; //----- (008F89B0) -------------------------------------------------------- volatile LONG **__thiscall sub_8F89B0(_DWORD *this) { volatile LONG **result; // eax _DWORD *v2; // [esp+4h] [ebp-3Ch] char v3; // [esp+18h] [ebp-28h] volatile LONG *v4; // [esp+28h] [ebp-18h] volatile LONG *v5; // [esp+2Ch] [ebp-14h] volatile LONG *v6; // [esp+30h] [ebp-10h] volatile LONG *v7; // [esp+34h] [ebp-Ch] unsigned int i; // [esp+38h] [ebp-8h] unsigned int v9; // [esp+3Ch] [ebp-4h] v2 = this; sub_8F8920(this, dword_BA46D0); result = (volatile LONG **)sub_8F0670(v2 + 17); v9 = (unsigned int)result; for ( i = 0; i < v9; ++i ) { result = (volatile LONG **)sub_40DA70(v2 + 17, &v3); v4 = *result; v5 = result[1]; v6 = result[2]; v7 = result[3]; if ( v4 ) { LOBYTE(result) = sub_8FA3D0(v2, v4); if ( (_BYTE)result ) { if ( v5 == (volatile LONG *)1 ) { LOBYTE(result) = sub_8F86A0(v2, v4); } else if ( v5 == (volatile LONG *)2 ) { result = (volatile LONG **)sub_8F9E00(v2, v4); } else { result = (volatile LONG **)sub_8F2A80((void *)v4, (int)v5, (int)v6, (int)v7); } } } } return result; } // BA46D0: using guessed type int dword_BA46D0; //----- (008F8A80) -------------------------------------------------------- int __thiscall sub_8F8A80(_DWORD *this, int a2, int a3) { int result; // eax int v4; // ST10_4 _DWORD *v5; // [esp+10h] [ebp-4h] result = (int)this; v5 = (_DWORD *)this[14]; while ( v5 ) { v4 = (int)(v5 + 2); v5 = (_DWORD *)*v5; result = (*(int (__thiscall **)(int, int, int, _DWORD))(*(_DWORD *)(*(_DWORD *)v4 + 232) + 12))( *(_DWORD *)v4 + 232, a2, a3, 0); } return result; } //----- (008F8AE0) -------------------------------------------------------- char __thiscall sub_8F8AE0(_DWORD *this, char a2) { bool v2; // STD3_1 _DWORD *v3; // STCC_4 int v4; // eax int *v5; // ST80_4 _DWORD **v6; // ST70_4 int *v7; // ST5C_4 _DWORD **v8; // ST3C_4 _DWORD *v9; // ST30_4 bool v11; // [esp+4h] [ebp-18Ch] bool v12; // [esp+8h] [ebp-188h] bool v13; // [esp+Ch] [ebp-184h] bool v14; // [esp+10h] [ebp-180h] _DWORD *v15; // [esp+14h] [ebp-17Ch] _DWORD *v16; // [esp+20h] [ebp-170h] int v17; // [esp+2Ch] [ebp-164h] char v18; // [esp+3Fh] [ebp-151h] char v19; // [esp+47h] [ebp-149h] int j; // [esp+48h] [ebp-148h] char v21; // [esp+7Fh] [ebp-111h] int v22; // [esp+80h] [ebp-110h] bool v23; // [esp+87h] [ebp-109h] int v24; // [esp+88h] [ebp-108h] char v25; // [esp+9Fh] [ebp-F1h] int v26; // [esp+A0h] [ebp-F0h] bool v27; // [esp+A7h] [ebp-E9h] int v28; // [esp+A8h] [ebp-E8h] char v29; // [esp+C8h] [ebp-C8h] char *v30; // [esp+CCh] [ebp-C4h] bool v31; // [esp+D3h] [ebp-BDh] char v32; // [esp+D4h] [ebp-BCh] char *v33; // [esp+D8h] [ebp-B8h] char v34; // [esp+DFh] [ebp-B1h] char v35; // [esp+E0h] [ebp-B0h] char *v36; // [esp+E4h] [ebp-ACh] bool v37; // [esp+EBh] [ebp-A5h] char v38; // [esp+ECh] [ebp-A4h] char *v39; // [esp+F0h] [ebp-A0h] bool v40; // [esp+F7h] [ebp-99h] char v41; // [esp+F8h] [ebp-98h] char *v42; // [esp+FCh] [ebp-94h] char v43; // [esp+103h] [ebp-8Dh] char v44; // [esp+104h] [ebp-8Ch] char *v45; // [esp+108h] [ebp-88h] bool v46; // [esp+10Fh] [ebp-81h] char v47; // [esp+110h] [ebp-80h] char *v48; // [esp+114h] [ebp-7Ch] bool v49; // [esp+11Bh] [ebp-75h] char v50; // [esp+11Ch] [ebp-74h] char *v51; // [esp+120h] [ebp-70h] char v52; // [esp+127h] [ebp-69h] char v53; // [esp+128h] [ebp-68h] char *v54; // [esp+12Ch] [ebp-64h] int v55; // [esp+130h] [ebp-60h] int v56; // [esp+134h] [ebp-5Ch] int v57; // [esp+138h] [ebp-58h] unsigned int k; // [esp+13Ch] [ebp-54h] int *v59; // [esp+140h] [ebp-50h] int v60; // [esp+144h] [ebp-4Ch] unsigned int i; // [esp+148h] [ebp-48h] int v62; // [esp+14Ch] [ebp-44h] int v63; // [esp+150h] [ebp-40h] char v64; // [esp+157h] [ebp-39h] int *v65; // [esp+158h] [ebp-38h] POINT v66; // [esp+15Ch] [ebp-34h] _DWORD *v67; // [esp+164h] [ebp-2Ch] bool v68; // [esp+16Bh] [ebp-25h] int v69; // [esp+16Ch] [ebp-24h] void **v70; // [esp+170h] [ebp-20h] int v71; // [esp+174h] [ebp-1Ch] int v72; // [esp+178h] [ebp-18h] unsigned int v73; // [esp+17Ch] [ebp-14h] bool v74; // [esp+183h] [ebp-Dh] int v75; // [esp+18Ch] [ebp-4h] v15 = this; if ( this[26] ) { v56 = this[26]; pt.x = *(_DWORD *)(v56 + 52); pt.y = *(_DWORD *)(v56 + 56); } v14 = pt.x < 0 || pt.y < 0 || pt.x >= xRight || pt.y >= dword_AC2F78; v68 = v14; if ( v14 ) a2 = 0; v55 = this[27]; if ( v55 && a2 ) { v54 = (char *)this[27]; v52 = sub_435830(v54, 0, &v53); byte_BA6A98 = 0; dword_BA6A9C = v52 != 0; v51 = (char *)v15[27]; v49 = sub_435860(v51, 0, &v50); byte_BA6AA4 = 0; dword_BA6AA8 = v49 != 0; v48 = (char *)v15[27]; v46 = sub_4358A0(v48, 0, &v47); byte_BA6AB0 = 0; dword_BA6AB4 = v46 != 0; v45 = (char *)v15[27]; v43 = sub_435830(v45, 1, &v44); byte_BA6ABC = 0; dword_BA6AC0 = v43 != 0; v42 = (char *)v15[27]; v40 = sub_435860(v42, 1, &v41); byte_BA6AC8 = 0; dword_BA6ACC = v40 != 0; v39 = (char *)v15[27]; v37 = sub_4358A0(v39, 1, &v38); byte_BA6AD4 = 0; dword_BA6AD8 = v37 != 0; v36 = (char *)v15[27]; v34 = sub_435830(v36, 2, &v35); byte_BA6AE0 = 0; dword_BA6AE4 = v34 != 0; v33 = (char *)v15[27]; v31 = sub_435860(v33, 2, &v32); byte_BA6AEC = 0; dword_BA6AF0 = v31 != 0; v30 = (char *)v15[27]; v2 = sub_4358A0(v30, 2, &v29); byte_BA6AF8 = 0; dword_BA6AFC = v2 != 0; v3 = (_DWORD *)v15[27]; dword_BA6A70 = v3[9]; dword_BA6A6C = v3[17]; dword_BA6A68 = v3[25]; } v66 = pt; if ( dword_BA6AA8 >= 1 ) sub_8F8A80(v15, 9, (int)&v66); if ( dword_BA6ACC >= 1 ) sub_8F8A80(v15, 12, (int)&v66); byte_BA6A88 = 0; if ( v15[28] ) { v28 = v15[28]; v27 = *(_BYTE *)(v28 + 40) & 1 && !(*(_BYTE *)(v28 + 72) & 1); v13 = v27 || ((v26 = v15[28], !(((signed int)*(unsigned __int8 *)(v26 + 47) >> 6) & 1)) || ((signed int)*(unsigned __int8 *)(v26 + 79) >> 6) & 1 ? (v25 = 0) : (v25 = 1), v25); byte_BA6A66 = v13; v12 = (((signed int)*(unsigned __int8 *)(v15[28] + 36) >> 5) & 1) != 0 || (((signed int)*(unsigned __int8 *)(v15[28] + 46) >> 3) & 1) != 0; byte_BA6A65 = v12; v24 = v15[28]; v23 = ((signed int)*(unsigned __int8 *)(v24 + 38) >> 2) & 1 && !(((signed int)*(unsigned __int8 *)(v24 + 70) >> 2) & 1); v11 = v23 || ((v22 = v15[28], !(((signed int)*(unsigned __int8 *)(v22 + 39) >> 6) & 1)) || ((signed int)*(unsigned __int8 *)(v22 + 71) >> 6) & 1 ? (v21 = 0) : (v21 = 1), v21); byte_BA6A64 = v11; } LOBYTE(v4) = dword_BA6AB4 >= 1; if ( dword_BA6AB4 >= 1 ) { v64 = 0; v4 = v15[31]; v65 = (int *)v15[31]; while ( v65 ) { v5 = v65 + 2; v65 = (int *)*v65; v63 = *v5; v4 = (*(unsigned __int8 (__thiscall **)(int, LONG, LONG))(*(_DWORD *)v63 + 348))(v63, pt.x, pt.y); if ( (_BYTE)v4 ) v64 = 1; } if ( !v64 ) LOBYTE(v4) = sub_8FA190(v15, 0); } if ( v15[26] ) { LOBYTE(v4) = dword_BA6BCC != 0; if ( dword_BA6BCC != 0 ) { if ( dword_BA6AA8 >= 1 && dword_BA6AA8 ) --dword_BA6AA8; LOBYTE(v4) = dword_BA6AB4 >= 1; if ( dword_BA6AB4 >= 1 ) { v62 = dword_BA6BCC; v69 = v15[15]; for ( i = 0; i < v15[16]; ++i ) { v6 = (_DWORD **)(v69 + 8); v69 = *(_DWORD *)(v69 + 4); v67 = *v6; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int *, LONG, LONG))(*v67 + 404))(v67, &v62, pt.x, pt.y) ) { if ( dword_BA6AB4 ) --dword_BA6AB4; break; } } if ( dword_BA6AB4 ) --dword_BA6AB4; LOBYTE(v4) = byte_BA6BD0; if ( !byte_BA6BD0 ) dword_BA6BCC = 0; byte_BA6BD0 = 0; } } } if ( *((_BYTE *)v15 + 116) ) { v15[34] = 0; v15[35] = 0; if ( v15[21] ) { LOBYTE(v4) = sub_8F3600((_DWORD *)v15[21]); if ( (_BYTE)v4 && v15[35] ) LOBYTE(v4) = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v15[35] + 448))(v15[35]); } else { v67 = (_DWORD *)dword_BA6A7C; if ( dword_BA6A7C && dword_BA6AC0 < 1 && dword_BA6A9C < 1 ) dword_BA6A7C = 0; v73 = 0; v71 = 0; v72 = 0; v70 = &NiTList::`vftable'; v75 = 0; v59 = (int *)v15[14]; while ( v59 ) { v7 = v59 + 2; v59 = (int *)*v59; v60 = *v7; sub_6B9900(&v70, &v60); } v74 = 0; if ( dword_BA6A7C ) { if ( dword_BA6A7C ) { for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)dword_BA6A7C + 4))(dword_BA6A7C); j; j = *(_DWORD *)(j + 4) ) { if ( (_UNKNOWN *)j == &unk_BA6A8C ) { v19 = 1; goto LABEL_96; } } v19 = 0; LABEL_96: v18 = v19; } else { v18 = 0; } if ( v18 ) v74 = sub_8F3600((_DWORD *)dword_BA6A7C); } if ( !v74 ) { v69 = v72; for ( k = 0; k < v73; ++k ) { v8 = (_DWORD **)(v69 + 8); v69 = *(_DWORD *)(v69 + 4); v67 = *v8; if ( sub_8F3600(v67) ) { if ( v67 != (_DWORD *)dword_BA6B08 ) { v16 = (_DWORD *)v15[14]; while ( v16 ) { v17 = (int)v16; v9 = v16 + 2; v16 = (_DWORD *)*v16; if ( dword_BA6B08 == *v9 ) { v57 = v17; goto LABEL_110; } } v57 = 0; LABEL_110: if ( v57 ) sub_8F36B0((_DWORD *)dword_BA6B08); } dword_BA6B08 = (int)v67; break; } } } *((_BYTE *)v15 + 148) = v15[35] != 0; if ( v15[35] ) (*(void (__thiscall **)(_DWORD))(*(_DWORD *)v15[35] + 448))(v15[35]); v70 = &NiTPointerListBase,PgWin *>::`vftable'; v75 = 1; LOBYTE(v4) = sub_521E30(&v70); } } return v4; } // 9BBBB4: using guessed type void *NiTPointerListBase,PgWin *>::`vftable'; // 9BBBEC: using guessed type void *NiTList::`vftable'; // BA6A64: using guessed type char byte_BA6A64; // BA6A65: using guessed type char byte_BA6A65; // BA6A66: using guessed type char byte_BA6A66; // BA6A68: using guessed type int dword_BA6A68; // BA6A6C: using guessed type int dword_BA6A6C; // BA6A70: using guessed type int dword_BA6A70; // BA6A7C: using guessed type int dword_BA6A7C; // BA6A88: using guessed type char byte_BA6A88; // BA6A98: using guessed type char byte_BA6A98; // BA6A9C: using guessed type int dword_BA6A9C; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; // BA6ABC: using guessed type char byte_BA6ABC; // BA6AC0: using guessed type int dword_BA6AC0; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; // BA6AD4: using guessed type char byte_BA6AD4; // BA6AD8: using guessed type int dword_BA6AD8; // BA6AE0: using guessed type char byte_BA6AE0; // BA6AE4: using guessed type int dword_BA6AE4; // BA6AEC: using guessed type char byte_BA6AEC; // BA6AF0: using guessed type int dword_BA6AF0; // BA6AF8: using guessed type char byte_BA6AF8; // BA6AFC: using guessed type int dword_BA6AFC; // BA6B08: using guessed type int dword_BA6B08; // BA6BCC: using guessed type int dword_BA6BCC; // BA6BD0: using guessed type char byte_BA6BD0; //----- (008F98A0) -------------------------------------------------------- int __thiscall sub_8F98A0(_DWORD *this, float a2) { int *v2; // ST40_4 _DWORD *v4; // [esp+Ch] [ebp-44h] int v5; // [esp+48h] [ebp-8h] _DWORD *v6; // [esp+4Ch] [ebp-4h] v4 = this; v6 = (_DWORD *)this[14]; while ( v6 ) { v2 = v6 + 2; v6 = (_DWORD *)*v6; v5 = *v2; if ( !*v2 ) break; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v5 + 324))(v5, LODWORD(a2)); sub_5A5EF0((_DWORD *)v5, a2); if ( *(_BYTE *)(v5 + 284) ) sub_85BED0((_DWORD **)v5, a2, 1); } return sub_8FA210(v4, a2); } //----- (008F9950) -------------------------------------------------------- void __thiscall sub_8F9950(_DWORD **this, int a2) { _DWORD **v2; // [esp+4h] [ebp-1B8h] volatile LONG *v3; // [esp+1Ch] [ebp-1A0h] volatile LONG **v4; // [esp+20h] [ebp-19Ch] volatile LONG *v5; // [esp+40h] [ebp-17Ch] char v6; // [esp+60h] [ebp-15Ch] int v7; // [esp+F0h] [ebp-CCh] volatile LONG *v8; // [esp+F4h] [ebp-C8h] char v9; // [esp+F8h] [ebp-C4h] void *v10; // [esp+190h] [ebp-2Ch] int v11; // [esp+194h] [ebp-28h] int v12; // [esp+198h] [ebp-24h] int v13; // [esp+19Ch] [ebp-20h] void *v14; // [esp+1A0h] [ebp-1Ch] int v15; // [esp+1A4h] [ebp-18h] int v16; // [esp+1A8h] [ebp-14h] int v17; // [esp+1ACh] [ebp-10h] int v18; // [esp+1B8h] [ebp-4h] v2 = this; if ( this[8] != 0 ) { sub_8FA850(this[8], 0xAu); if ( sub_44E530(a2, (int)"ClearBuffer", 1) ) (*(void (__thiscall **)(int, _DWORD, signed int))(*(_DWORD *)a2 + 276))(a2, 0, 4); v7 = dword_BA46D0; v8 = 0; v18 = 0; if ( dword_BA46D0 ) { v5 = *(volatile LONG **)(v7 + 8); if ( v8 != v5 ) { if ( v8 ) sub_402270(v8); v8 = v5; if ( v5 ) InterlockedIncrement(v8 + 1); } sub_56FF80((_DWORD *)(v7 + 8), 0); } v10 = 0; v11 = 0; v12 = 0; v13 = 1024; sub_85F230(&v10, 0x400u); LOBYTE(v18) = 1; sub_8F7640(&v6, (int)&v10); LOBYTE(v18) = 2; sub_85FB50((float *)v2[8], v2[8][74], &v6, 0); v14 = 0; v15 = 0; v16 = 0; v17 = 1024; sub_85F230(&v14, 0x400u); LOBYTE(v18) = 3; sub_85F910(&v9, (int)&v14); LOBYTE(v18) = 4; sub_85FB50((float *)v2[8], (int)v2[7], &v9, 0); if ( v7 ) { v3 = v8; v4 = (volatile LONG **)(v7 + 8); if ( *(volatile LONG **)(v7 + 8) != v8 ) { if ( *v4 ) sub_402270(*v4); *v4 = v3; if ( *v4 ) InterlockedIncrement(*v4 + 1); } } if ( v2[34] ) *((_WORD *)v2[34] + 14) |= 1u; v2[34] = 0; v2[35] = 0; LOBYTE(v18) = 3; sub_85F7E0(&v9); LOBYTE(v18) = 2; operator delete(v14); LOBYTE(v18) = 1; sub_8F76A0(&v6); LOBYTE(v18) = 0; operator delete(v10); v18 = -1; if ( v8 ) sub_402270(v8); } } // BA46D0: using guessed type int dword_BA46D0; //----- (008F9D50) -------------------------------------------------------- char __thiscall sub_8F9D50(_DWORD *this, volatile LONG *a2, int a3, int a4, int a5) { _DWORD *v6; // eax _DWORD *v7; // [esp+0h] [ebp-20h] volatile LONG **v8; // [esp+8h] [ebp-18h] v7 = this; if ( !a2 ) return 0; sub_8F82A0(this, a2); v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v7[22] + 4))(v7 + 22); v6[2] = a2; sub_8FA7F0(v7 + 22, v6); v8 = (volatile LONG **)(v7 + 21); if ( (volatile LONG *)v7[21] != a2 ) { if ( *v8 ) sub_402270(*v8); *v8 = a2; if ( *v8 ) InterlockedIncrement(*v8 + 1); } return 1; } //----- (008F9E00) -------------------------------------------------------- _DWORD *__thiscall sub_8F9E00(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // [esp+8h] [ebp-3Ch] volatile LONG **v4; // [esp+28h] [ebp-1Ch] unsigned int i; // [esp+2Ch] [ebp-18h] unsigned int v6; // [esp+30h] [ebp-14h] volatile LONG *v7; // [esp+34h] [ebp-10h] int v8; // [esp+40h] [ebp-4h] v3 = this; sub_8F86A0(this, a2); result = sub_403A70(v3, &v7, a2); v8 = 0; if ( v7 ) { sub_8F3330(v7); if ( v3[19] == -1 ) v6 = 0; else v6 = v3[19] < v3[20] ? v3[20] - v3[19] : v3[20] + v3[18] - v3[19]; for ( i = 0; i < v6; ++i ) { v4 = (volatile LONG **)sub_8FA780(v3 + 17, i); if ( v4 ) { if ( *v4 == v7 ) *v4 = 0; } } result = (_DWORD *)(*(int (__thiscall **)(volatile LONG *))(*v7 + 364))(v7); if ( v7 ) { if ( v7 ) result = (_DWORD *)sub_402270(v7); v7 = 0; } } v8 = -1; if ( v7 ) result = (_DWORD *)sub_402270(v7); return result; } //----- (008F9F80) -------------------------------------------------------- _DWORD *__thiscall sub_8F9F80(_DWORD *this) { volatile LONG **v1; // ST24_4 _DWORD *v3; // [esp+8h] [ebp-34h] volatile LONG *v4; // [esp+28h] [ebp-14h] _DWORD *v5; // [esp+2Ch] [ebp-10h] v3 = this; sub_8F88C0(this); v5 = (_DWORD *)v3[10]; while ( v5 ) { v1 = (volatile LONG **)(v5 + 2); v5 = (_DWORD *)*v5; v4 = *v1; if ( *v1 ) InterlockedIncrement(v4 + 1); (*(void (__thiscall **)(volatile LONG *))(*v4 + 364))(v4); if ( v4 ) sub_402270(v4); } return sub_88DCC0(v3 + 9); } //----- (008FA050) -------------------------------------------------------- void __thiscall sub_8FA050(_DWORD *this, int a2, _DWORD *a3) { int v3; // eax int v4; // eax _DWORD *v5; // ST0C_4 _DWORD *v6; // [esp+0h] [ebp-Ch] v6 = this; if ( a3 ) { if ( (*(int (__thiscall **)(_DWORD *))(*a3 + 192))(a3) < 0 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*a3 + 172))(a3, 0); if ( (*(int (__thiscall **)(_DWORD *))(*a3 + 200))(a3) < 0 ) (*(void (__thiscall **)(_DWORD *, _DWORD))(*a3 + 176))(a3, 0); if ( (*(int (__thiscall **)(_DWORD *))(*a3 + 196))(a3) >= (unsigned int)xRight ) { v3 = (*(int (__thiscall **)(_DWORD *))(*a3 + 144))(a3); (*(void (__thiscall **)(_DWORD *, int))(*a3 + 172))(a3, xRight - v3); } if ( (*(int (__thiscall **)(_DWORD *))(*a3 + 204))(a3) >= (unsigned int)dword_AC2F78 ) { v4 = (*(int (__thiscall **)(_DWORD *))(*a3 + 148))(a3); (*(void (__thiscall **)(_DWORD *, int))(*a3 + 176))(a3, dword_AC2F78 - v4); } sub_8FA190(v6, a2); sub_8F82A0(v6, a3); sub_8F81A0(v6, a3); v5 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v6[30] + 4))(v6 + 30); v5[2] = a3; sub_486240(v6 + 30, v5); } } //----- (008FA190) -------------------------------------------------------- char __thiscall sub_8FA190(_DWORD *this, int a2) { char result; // al _DWORD *v3; // ST30_4 _DWORD *v4; // [esp+0h] [ebp-34h] int *v5; // [esp+30h] [ebp-4h] v4 = this; result = (char)this; v5 = (int *)this[31]; if ( a2 ) { while ( v5 ) { result = (char)v5; if ( v5[2] == a2 ) break; result = (_BYTE)v5 + 8; v5 = (int *)*v5; } } while ( v5 ) { v3 = (_DWORD *)sub_403620(v4 + 30, &v5); result = sub_8F86A0(v4, v3); } return result; } //----- (008FA210) -------------------------------------------------------- int __thiscall sub_8FA210(_DWORD *this, float a2) { int v2; // eax _DWORD *v4; // [esp+8h] [ebp-34h] v4 = this; sub_8D0730((int)(this + 1), a2); if ( v2 == 1 ) sub_8D8240((_DWORD *)(v4[7] + 176)); return sub_85BED0((_DWORD **)v4[7], a2, 1); } //----- (008FA270) -------------------------------------------------------- void __thiscall sub_8FA270(void *this, float a2, int a3) { void *v3; // ST18_4 float *v4; // ecx char v5; // [esp+40h] [ebp-30h] float v6; // [esp+4Ch] [ebp-24h] int v7; // [esp+6Ch] [ebp-4h] v3 = this; sub_8D4790(&v5); v7 = 0; (*(void (__thiscall **)(_DWORD, int))(**((_DWORD **)v3 + 7) + 116))(*((_DWORD *)v3 + 7), a3); sub_85C4D0(*((_DWORD **)v3 + 7)); sub_85C6F0(*((_DWORD **)v3 + 7)); v4 = (float *)(*((_DWORD *)v3 + 7) + 88); *v4 = 0.0; v4[1] = 0.0; v4[2] = 100.0; sub_8D4A70(&v5, *((_DWORD **)v3 + 7)); sub_8D4750(&v5, a2); *((float *)v3 + 4) = v6; sub_8D06E0((float *)v3 + 1, a2, 1); v7 = -1; sub_8D47C0(&v5); } //----- (008FA390) -------------------------------------------------------- int __thiscall sub_8FA390(_DWORD *this, float a2) { _DWORD *v2; // ST08_4 v2 = this; sub_8D8240((_DWORD *)(this[7] + 176)); return sub_85BED0((_DWORD **)v2[7], a2, 1); } //----- (008FA3D0) -------------------------------------------------------- bool __thiscall sub_8FA3D0(_DWORD *this, volatile LONG *a2) { volatile LONG **v3; // ST14_4 _DWORD *v4; // [esp+0h] [ebp-28h] _DWORD *v5; // [esp+Ch] [ebp-1Ch] _DWORD *v6; // [esp+18h] [ebp-10h] _DWORD *v7; // [esp+24h] [ebp-4h] v4 = this; if ( this[12] == 0 || !a2 ) return 0; if ( a2 ) InterlockedIncrement(a2 + 1); v5 = (_DWORD *)v4[10]; while ( v5 ) { v6 = v5; v3 = (volatile LONG **)(v5 + 2); v5 = (_DWORD *)*v5; if ( a2 == *v3 ) { v7 = v6; goto LABEL_12; } } v7 = 0; LABEL_12: if ( a2 ) sub_402270(a2); return v7 != 0; } //----- (008FA4A0) -------------------------------------------------------- int __thiscall sub_8FA4A0(_DWORD *this, char a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8) { int result; // eax int *v9; // ST54_4 int v10; // [esp+5Ch] [ebp-18h] _DWORD *v11; // [esp+60h] [ebp-14h] if ( a6 ) { v11 = (_DWORD *)this[10]; while ( v11 ) { v9 = v11 + 2; v11 = (_DWORD *)*v11; v10 = *v9; if ( *v9 ) { if ( *(_DWORD *)(v10 + 8) ) { *(_DWORD *)(v10 + 8); if ( !sub_40C2F0( (unsigned __int8 *)&a2, 0, a6, *(unsigned __int8 **)(v10 + 8), strlen(*(const char **)(v10 + 8))) ) { sub_4014A0(&a2, 1, 0); return v10; } } } } sub_4014A0(&a2, 1, 0); result = 0; } else { sub_4014A0(&a2, 1, 0); result = 0; } return result; } //----- (008FA600) -------------------------------------------------------- _DWORD *__thiscall sub_8FA600(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // ST08_4 _DWORD *v4; // [esp+4h] [ebp-1Ch] _DWORD *v5; // [esp+10h] [ebp-10h] _DWORD *v6; // [esp+14h] [ebp-Ch] _DWORD *v7; // [esp+18h] [ebp-8h] result = this; v4 = (_DWORD *)this[1]; while ( v4 ) { v5 = v4; v3 = v4 + 2; v4 = (_DWORD *)*v4; result = (_DWORD *)*a2; if ( *a2 == *v3 ) { v6 = v5; goto LABEL_7; } } v6 = 0; LABEL_7: if ( v6 ) { result = v6; if ( v6 != (_DWORD *)this[2] ) { if ( v6 == (_DWORD *)this[1] ) this[1] = *v6; *(_DWORD *)(*v6 + 4) = v6[1]; v7 = (_DWORD *)v6[1]; if ( v7 ) *v7 = *v6; v6[1] = this[2]; *v6 = 0; *(_DWORD *)this[2] = v6; result = v6; this[2] = v6; } } return result; } //----- (008FA6F0) -------------------------------------------------------- _DWORD *__thiscall sub_8FA6F0(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; *this = operator new[](16 * a2); v2[1] = a2; v2[2] = -1; v2[3] = 0; return v2; } //----- (008FA750) -------------------------------------------------------- void __thiscall sub_8FA750(void **this) { operator delete[](*this); } //----- (008FA780) -------------------------------------------------------- int __thiscall sub_8FA780(_DWORD *this, unsigned int a2) { int v3; // eax _DWORD *v4; // [esp+0h] [ebp-4h] v4 = this; if ( !*this ) return 0; if ( sub_8F0670(this) <= a2 ) return 0; if ( a2 + v4[2] < v4[1] ) v3 = 16 * (a2 + v4[2]); else v3 = 16 * (a2 + v4[2] - v4[1]); return *v4 + v3; } //----- (008FA7F0) -------------------------------------------------------- _DWORD *__thiscall sub_8FA7F0(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax a2[1] = 0; *a2 = this[1]; if ( this[1] ) *(_DWORD *)(this[1] + 4) = a2; else this[2] = a2; this[1] = a2; result = this; ++this[3]; return result; } //----- (008FA850) -------------------------------------------------------- int __thiscall sub_8FA850(_DWORD *this, unsigned int a2) { int result; // eax int v3; // ST68_4 result = this[74]; if ( a2 <= *(_DWORD *)(this[74] + 188) - *(_DWORD *)(result + 192) ) { v3 = this[74]; sub_8F3870((_DWORD *)(v3 + 176)); result = sub_8F3B60((_DWORD *)(v3 + 176)); } return result; } //----- (008FA8D0) -------------------------------------------------------- char __thiscall sub_8FA8D0(_DWORD *this, int a2) { _DWORD *v3; // eax _DWORD *v4; // [esp+0h] [ebp-2Ch] _DWORD *v5; // [esp+4h] [ebp-28h] _DWORD *i; // [esp+28h] [ebp-4h] v5 = this; if ( !a2 ) return 0; for ( i = (_DWORD *)this[14]; i; i = v4 ) { if ( *(_DWORD *)(i[2] + 260) < *(_DWORD *)(a2 + 260) ) { sub_8FAB10(this + 13, (int)i, &a2); return 1; } if ( i ) v4 = (_DWORD *)*i; else v4 = 0; } v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[13] + 4))(this + 13); v3[2] = a2; sub_486240(v5 + 13, v3); return 1; } //----- (008FA9A0) -------------------------------------------------------- _DWORD *__thiscall sub_8FA9A0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiTListBase,NiPointer>::`vftable'; return result; } // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008FA9C0) -------------------------------------------------------- _DWORD *__thiscall sub_8FA9C0(_DWORD *this) { _DWORD *v1; // ST04_4 _DWORD *result; // eax v1 = this; *this = &NiTPointerListBase,NiPointer>::`vftable'; result = sub_88DCC0(this); *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A42028: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008FAA20) -------------------------------------------------------- void __stdcall sub_8FAA20(_DWORD *a1) { volatile LONG **v1; // [esp+8h] [ebp-10h] v1 = (volatile LONG **)(a1 + 2); if ( a1[2] ) { if ( *v1 ) sub_402270(*v1); *v1 = 0; if ( *v1 ) InterlockedIncrement(*v1 + 1); } sub_40DB70(a1); } //----- (008FAA90) -------------------------------------------------------- _DWORD *__thiscall sub_8FAA90(_DWORD *this) { _DWORD *v1; // ST04_4 _DWORD *result; // eax v1 = this; *this = &PgTList>::`vftable'; sub_88DCC0(this); *v1 = &NiTPointerListBase,NiPointer>::`vftable'; result = sub_88DCC0(v1); *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A41FF0: using guessed type void *PgTList>::`vftable'; // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A42028: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008FAB10) -------------------------------------------------------- _DWORD *__thiscall sub_8FAB10(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v4; // [esp+0h] [ebp-Ch] _DWORD *v5; // [esp+8h] [ebp-4h] v4 = this; v5 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*this + 4))(this); v5[2] = *a3; *v5 = a2; v5[1] = *(_DWORD *)(a2 + 4); if ( *(_DWORD *)(a2 + 4) ) **(_DWORD **)(a2 + 4) = v5; else v4[1] = v5; *(_DWORD *)(a2 + 4) = v5; ++v4[3]; return v5; } //----- (008FAB90) -------------------------------------------------------- void *__thiscall sub_8FAB90(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (008FABC0) -------------------------------------------------------- _DWORD *__thiscall sub_8FABC0(_DWORD *this, char a2) { _DWORD *v3; // [esp+4h] [ebp-20h] v3 = this; *this = &PgTList>::`vftable'; sub_88DCC0(this); *v3 = &NiTPointerListBase,NiPointer>::`vftable'; sub_88DCC0(v3); *v3 = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A41FF0: using guessed type void *PgTList>::`vftable'; // A42018: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A42028: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (008FAC60) -------------------------------------------------------- _DWORD *__cdecl sub_8FAC60(int *a1, char a2, unsigned int a3, unsigned int a4, unsigned int a5, unsigned int a6) { unsigned int v6; // ST04_4 unsigned int v7; // eax _DWORD *v9; // [esp+4h] [ebp-68h] volatile LONG **v10; // [esp+8h] [ebp-64h] volatile LONG *v11; // [esp+20h] [ebp-4Ch] unsigned int v12; // [esp+24h] [ebp-48h] unsigned int v13; // [esp+38h] [ebp-34h] volatile LONG *v14; // [esp+44h] [ebp-28h] volatile LONG *v15; // [esp+48h] [ebp-24h] void *v16; // [esp+4Ch] [ebp-20h] _DWORD *v17; // [esp+50h] [ebp-1Ch] _DWORD *v18; // [esp+54h] [ebp-18h] float *v19; // [esp+58h] [ebp-14h] volatile LONG *v20; // [esp+5Ch] [ebp-10h] int v21; // [esp+68h] [ebp-4h] v16 = operator new(0x54u); v21 = 0; if ( v16 ) v9 = sub_8FB880(v16); else v9 = 0; v17 = v9; v21 = -1; v18 = v9; v19 = 0; v20 = 0; if ( a1 ) { v19 = sub_8FC470(a1[15], a2, a3, a4, a5, a6); v6 = (*(int (__thiscall **)(int *))(*a1 + 64))(a1); v7 = (*(int (__thiscall **)(int *))(*a1 + 60))(a1); v20 = (volatile LONG *)sub_8F5E10(v7, v6, a3, a4, a5, a6); } else { v19 = sub_8FC470(0, a2, a3, a4, a5, a6); v20 = (volatile LONG *)sub_8F5E10(a5, a6, a3, a4, a5, a6); } v15 = v20; if ( v20 ) InterlockedIncrement(v15 + 1); v21 = 1; v13 = v18[5]; if ( v13 >= v18[4] ) sub_8FD2D0(v18 + 2, v18[7] + v13); sub_8FD0C0(v18 + 2, v13, &v15); v21 = -1; if ( v15 ) sub_402270(v15); v14 = (volatile LONG *)v19; if ( v19 ) InterlockedIncrement(v14 + 1); v21 = 2; v11 = v18 + 8; v12 = v18[11]; if ( v12 >= v18[10] ) sub_8FD2D0(v18 + 8, v18[13] + v12); sub_8FD0C0(v11, v12, &v14); v21 = -1; if ( v14 ) sub_402270(v14); v10 = (volatile LONG **)(v18 + 14); if ( (int *)v18[14] != a1 ) { if ( *v10 ) sub_402270(*v10); *v10 = a1; if ( *v10 ) InterlockedIncrement(*v10 + 1); } return v18; } //----- (008FAEE0) -------------------------------------------------------- _DWORD *__cdecl sub_8FAEE0(int *a1, char a2, unsigned int *a3, unsigned int a4) { unsigned int v4; // ST14_4 unsigned int v5; // ST10_4 unsigned int v6; // ST0C_4 unsigned int v7; // ST08_4 unsigned int v8; // ST04_4 unsigned int v9; // eax _DWORD *v11; // [esp+4h] [ebp-6Ch] volatile LONG **v12; // [esp+8h] [ebp-68h] volatile LONG *v13; // [esp+20h] [ebp-50h] unsigned int v14; // [esp+24h] [ebp-4Ch] volatile LONG *v15; // [esp+34h] [ebp-3Ch] unsigned int v16; // [esp+38h] [ebp-38h] volatile LONG *v17; // [esp+44h] [ebp-2Ch] volatile LONG *v18; // [esp+48h] [ebp-28h] void *v19; // [esp+4Ch] [ebp-24h] _DWORD *v20; // [esp+50h] [ebp-20h] volatile LONG *v21; // [esp+54h] [ebp-1Ch] unsigned int i; // [esp+58h] [ebp-18h] _DWORD *v23; // [esp+5Ch] [ebp-14h] float *v24; // [esp+60h] [ebp-10h] int v25; // [esp+6Ch] [ebp-4h] v19 = operator new(0x54u); v25 = 0; if ( v19 ) v11 = sub_8FB880(v19); else v11 = 0; v20 = v11; v25 = -1; v23 = v11; v24 = sub_8FC650(a1[15], a2, (int)a3, a4); for ( i = 0; i < a4; ++i ) { v4 = a3[3]; v5 = a3[1]; v6 = a3[2]; v7 = *a3; v8 = (*(int (__thiscall **)(int *))(*a1 + 64))(a1); v9 = (*(int (__thiscall **)(int *))(*a1 + 60))(a1); v21 = (volatile LONG *)sub_8F5E10(v9, v8, v7, v6, v5, v4); v18 = v21; if ( v21 ) InterlockedIncrement(v18 + 1); v25 = 1; v15 = v23 + 2; v16 = v23[5]; if ( v16 >= v23[4] ) sub_8FD2D0(v23 + 2, v23[7] + v16); sub_8FD0C0(v15, v16, &v18); v25 = -1; if ( v18 ) sub_402270(v18); v17 = (volatile LONG *)v24; if ( v24 ) InterlockedIncrement(v17 + 1); v25 = 2; v13 = v23 + 8; v14 = v23[11]; if ( v14 >= v23[10] ) sub_8FD2D0(v23 + 8, v23[13] + v14); sub_8FD0C0(v13, v14, &v17); v25 = -1; if ( v17 ) sub_402270(v17); v24 = (float *)*((_DWORD *)v24 + 17); a3 += 4; } v12 = (volatile LONG **)(v23 + 14); if ( (int *)v23[14] != a1 ) { if ( *v12 ) sub_402270(*v12); *v12 = a1; if ( *v12 ) InterlockedIncrement(*v12 + 1); } return v23; } //----- (008FB140) -------------------------------------------------------- volatile LONG **__cdecl sub_8FB140(int a1, int a2, int a3, int a4, volatile LONG *a5) { _DWORD *v5; // eax _DWORD *v7; // [esp+10h] [ebp-94h] volatile LONG **v8; // [esp+14h] [ebp-90h] char v9; // [esp+4Fh] [ebp-55h] int i; // [esp+50h] [ebp-54h] int v11; // [esp+54h] [ebp-50h] _DWORD *v12; // [esp+60h] [ebp-44h] _DWORD *v13; // [esp+68h] [ebp-3Ch] volatile LONG *v14; // [esp+74h] [ebp-30h] int v15; // [esp+78h] [ebp-2Ch] int v16; // [esp+7Ch] [ebp-28h] volatile LONG **v17; // [esp+80h] [ebp-24h] _DWORD *v18; // [esp+84h] [ebp-20h] int v19; // [esp+88h] [ebp-1Ch] _DWORD *v20; // [esp+8Ch] [ebp-18h] volatile LONG *v21; // [esp+90h] [ebp-14h] _WORD *v22; // [esp+94h] [ebp-10h] int v23; // [esp+A0h] [ebp-4h] v20 = 0; v5 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 72))(a1, a2); sub_8F5CC0(v5, &v20); v18 = v20; if ( !v20 ) return 0; v22 = sub_8F6A70(v18[46], a3, a4, (int)&v19, (int)&v16, 0.0, 0.0); if ( !v22 ) return 0; v13 = operator new(0x54u); v23 = 0; if ( v13 ) v8 = (volatile LONG **)sub_8FB880(v13); else v8 = 0; v23 = -1; v17 = v8; if ( a5 ) { sub_8FB400(v17, a5); } else { v15 = sub_85C050(v18, 8); if ( v15 ) { v11 = *(_DWORD *)(**(_DWORD **)(v15 + 40) + 4); if ( v11 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 4))(v11); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA4778 ) { v9 = 1; goto LABEL_19; } } v9 = 0; LABEL_19: v14 = (volatile LONG *)(v9 != 0 ? v11 : 0); } else { v14 = 0; } if ( v14 ) sub_8FB400(v17, v14); } } v21 = (volatile LONG *)sub_85C050(v18, 0); if ( v21 ) { sub_8FD6E0(v17, v21); } else { v12 = operator new(0x20u); v23 = 1; if ( v12 ) v7 = sub_40DC70(v12); else v7 = 0; v23 = -1; if ( v7 ) InterlockedIncrement(v7 + 1); v23 = 2; *((_WORD *)v7 + 14) |= 1u; sub_8FD6E0(v17, v7); v23 = -1; if ( v7 ) sub_402270(v7); } sub_8FB460(v17, (int)v22, v19, v16, 0, 0, 0); return v17; } //----- (008FB400) -------------------------------------------------------- LONG __thiscall sub_8FB400(volatile LONG **this, volatile LONG *a2) { LONG result; // eax volatile LONG **v3; // [esp+4h] [ebp-10h] result = (LONG)(this + 14); v3 = this + 14; if ( this[14] != a2 ) { if ( *v3 ) sub_402270(*v3); result = (LONG)a2; *v3 = a2; if ( *v3 ) result = InterlockedIncrement(*v3 + 1); } return result; } //----- (008FB460) -------------------------------------------------------- volatile LONG *__thiscall sub_8FB460(_DWORD *this, int a2, unsigned int a3, unsigned int a4, int a5, int a6, char a7) { volatile LONG *result; // eax float *v8; // [esp+4h] [ebp-68h] _DWORD *v9; // [esp+8h] [ebp-64h] unsigned int v10; // [esp+18h] [ebp-54h] unsigned int v11; // [esp+2Ch] [ebp-40h] volatile LONG *v12; // [esp+48h] [ebp-24h] volatile LONG *v13; // [esp+4Ch] [ebp-20h] void *v14; // [esp+50h] [ebp-1Ch] float *v15; // [esp+54h] [ebp-18h] _DWORD *v16; // [esp+58h] [ebp-14h] float *v17; // [esp+5Ch] [ebp-10h] int v18; // [esp+68h] [ebp-4h] v9 = this; if ( a7 && this[14] ) { v17 = sub_8FC470(*(_DWORD *)(this[14] + 60), a7, a5, a6, a3, a4); } else { v16 = 0; if ( (signed int)*(unsigned __int16 *)(a2 + 100) > 0 ) v16 = (_DWORD *)sub_8683E0(a2, 0, 0); v14 = operator new(0x48u); v18 = 0; if ( v14 ) v8 = (float *)sub_8FD7A0(v14, 0, 0, a3, a4, 0, v16); else v8 = 0; v15 = v8; v18 = -1; v17 = v8; } v13 = (volatile LONG *)a2; if ( a2 ) InterlockedIncrement(v13 + 1); v18 = 1; v11 = v9[5]; if ( v11 >= v9[4] ) sub_8FD2D0(v9 + 2, v9[7] + v11); sub_8FD0C0(v9 + 2, v11, &v13); v18 = -1; if ( v13 ) sub_402270(v13); v12 = (volatile LONG *)v17; if ( v17 ) InterlockedIncrement(v12 + 1); v18 = 2; v10 = v9[11]; if ( v10 >= v9[10] ) sub_8FD2D0(v9 + 8, v9[13] + v10); result = sub_8FD0C0(v9 + 8, v10, &v12); v18 = -1; if ( v12 ) result = (volatile LONG *)sub_402270(v12); return result; } //----- (008FB650) -------------------------------------------------------- char __thiscall sub_8FB650(_DWORD *this, int a2, int a3) { _DWORD *v4; // [esp+10h] [ebp-6Ch] _DWORD *v5; // [esp+14h] [ebp-68h] unsigned int v6; // [esp+38h] [ebp-44h] _DWORD *v7; // [esp+44h] [ebp-38h] volatile LONG *v8; // [esp+4Ch] [ebp-30h] _DWORD *v9; // [esp+50h] [ebp-2Ch] int v10; // [esp+54h] [ebp-28h] int v11; // [esp+58h] [ebp-24h] _DWORD *v12; // [esp+5Ch] [ebp-20h] int v13; // [esp+60h] [ebp-1Ch] volatile LONG *v14; // [esp+64h] [ebp-18h] _WORD *v15; // [esp+68h] [ebp-14h] int v16; // [esp+6Ch] [ebp-10h] int v17; // [esp+78h] [ebp-4h] v5 = this; if ( !a2 ) return 0; v12 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 72))(a2, a3); if ( !v12 ) return 0; v15 = sub_8F6A70(v12[46], (int)&v11, (int)&v16, (int)&v13, (int)&v10, 0.0, 0.0); if ( !v15 ) return 0; sub_8FB460(v5, (int)v15, v13, v10, 0, 0, 0); v14 = (volatile LONG *)sub_85C050(v12, 0); if ( v14 ) { v8 = v14; if ( v14 ) InterlockedIncrement(v8 + 1); v17 = 0; v6 = v5[18]; if ( v6 >= v5[17] ) sub_8FDBB0(v5 + 15, v5[20] + v6); sub_8FD0C0(v5 + 15, v6, &v8); v17 = -1; if ( v8 ) sub_402270(v8); } else { v7 = operator new(0x20u); v17 = 1; if ( v7 ) v4 = sub_40DC70(v7); else v4 = 0; v17 = -1; v9 = v4; if ( v4 ) InterlockedIncrement(v9 + 1); v17 = 2; *((_WORD *)v9 + 14) |= 1u; sub_8FD9A0(v5 + 15, (volatile LONG **)&v9); v17 = -1; if ( v9 ) sub_402270(v9); } return 1; } //----- (008FB880) -------------------------------------------------------- _DWORD *__thiscall sub_8FB880(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-3Ch] v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &PgSprData::`vftable'; sub_8FCD60(v2 + 2, 0, 1); sub_8FCE80(v2 + 8, 0, 1); v2[14] = 0; if ( v2[14] ) InterlockedIncrement((volatile LONG *)(v2[14] + 4)); sub_8FCFA0(v2 + 15, 0, 1); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A42044: using guessed type void *PgSprData::`vftable'; //----- (008FB960) -------------------------------------------------------- void *__thiscall sub_8FB960(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8FB990(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008FB990) -------------------------------------------------------- LONG __thiscall sub_8FB990(_DWORD *this) { _DWORD *v2; // [esp+10h] [ebp-58h] volatile LONG **v3; // [esp+24h] [ebp-44h] volatile LONG **v4; // [esp+38h] [ebp-30h] void *v5; // [esp+58h] [ebp-10h] v2 = this; *this = &PgSprData::`vftable'; this[15] = &NiTArray>::`vftable'; v5 = (void *)this[16]; if ( v5 ) sub_484420(v5, 3); if ( v2[14] ) sub_402270((volatile LONG *)v2[14]); v2[8] = &NiTArray>::`vftable'; v4 = (volatile LONG **)v2[9]; if ( v4 ) sub_8FDAD0(v4, 3); v2[2] = &NiTArray>::`vftable'; v3 = (volatile LONG **)v2[3]; if ( v3 ) sub_8FDAD0(v3, 3); *v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A42044: using guessed type void *PgSprData::`vftable'; // A4204C: using guessed type void *NiTArray>::`vftable'; // A42054: using guessed type void *NiTArray>::`vftable'; // A4205C: using guessed type void *NiTArray>::`vftable'; //----- (008FBAD0) -------------------------------------------------------- int __thiscall sub_8FBAD0(_DWORD *this, int a2) { int result; // eax int v3; // [esp+14h] [ebp-4h] v3 = *(_DWORD *)(this[9] + 4 * a2); if ( v3 ) result = *(_DWORD *)(v3 + 28); else result = *(_DWORD *)(*(_DWORD *)(this[9] + 4 * a2) + 24); return result; } //----- (008FBB30) -------------------------------------------------------- int __thiscall sub_8FBB30(_DWORD *this, int a2) { int result; // eax int v3; // [esp+14h] [ebp-4h] v3 = *(_DWORD *)(this[9] + 4 * a2); if ( v3 ) result = *(_DWORD *)(v3 + 32); else result = *(_DWORD *)(*(_DWORD *)(this[9] + 4 * a2) + 24); return result; } //----- (008FBB90) -------------------------------------------------------- char __thiscall sub_8FBB90(_DWORD *this, int a2, unsigned int a3, char a4) { float v5; // [esp+1Ch] [ebp-3Ch] float v6; // [esp+20h] [ebp-38h] float v7; // [esp+24h] [ebp-34h] float v8; // [esp+28h] [ebp-30h] float v9; // [esp+2Ch] [ebp-2Ch] float v10; // [esp+30h] [ebp-28h] float v11; // [esp+34h] [ebp-24h] float v12; // [esp+38h] [ebp-20h] float v13; // [esp+3Ch] [ebp-1Ch] int v14; // [esp+40h] [ebp-18h] float *v15; // [esp+44h] [ebp-14h] float v16; // [esp+48h] [ebp-10h] float v17; // [esp+4Ch] [ebp-Ch] int v18; // [esp+50h] [ebp-8h] float v19; // [esp+54h] [ebp-4h] v14 = *(_DWORD *)(this[9] + 4 * a2); v18 = *(_DWORD *)(this[3] + 4 * a2); if ( !v14 || !v18 ) return 0; if ( (signed int)*(unsigned __int16 *)(v18 + 100) <= 0 ) return 0; v15 = (float *)sub_868390(v18, 0); if ( !v15 ) return 0; if ( a4 ) { v13 = v15[6] - (double)a3; if ( v13 == *v15 ) return 1; *(_DWORD *)(v14 + 28) = a3; v19 = v15[6]; v16 = 0.0; v17 = v15[4]; } else { v19 = (double)a3; if ( v19 == v15[6] ) return 1; *(_DWORD *)(v14 + 28) = a3; v13 = 0.0; v16 = 0.0; v17 = v15[4]; } v11 = v13; v12 = v16; sub_867DE0(v18, 0, 0, &v11); v9 = v13; v10 = v17; sub_867DE0(v18, 0, 1, &v9); v7 = v19; v8 = v17; sub_867DE0(v18, 0, 2, &v7); v5 = v19; v6 = v16; sub_867DE0(v18, 0, 3, &v5); return 1; } //----- (008FBD30) -------------------------------------------------------- char __thiscall sub_8FBD30(_DWORD *this, int a2, unsigned int a3) { return sub_8FBB90(this, a2, a3, 0); } //----- (008FBD50) -------------------------------------------------------- char __thiscall sub_8FBD50(_DWORD *this, int a2, unsigned int a3, char a4) { float v5; // [esp+1Ch] [ebp-3Ch] float v6; // [esp+20h] [ebp-38h] float v7; // [esp+24h] [ebp-34h] float v8; // [esp+28h] [ebp-30h] float v9; // [esp+2Ch] [ebp-2Ch] float v10; // [esp+30h] [ebp-28h] float v11; // [esp+34h] [ebp-24h] float v12; // [esp+38h] [ebp-20h] float v13; // [esp+3Ch] [ebp-1Ch] int v14; // [esp+40h] [ebp-18h] float *v15; // [esp+44h] [ebp-14h] float v16; // [esp+48h] [ebp-10h] float v17; // [esp+4Ch] [ebp-Ch] int v18; // [esp+50h] [ebp-8h] float v19; // [esp+54h] [ebp-4h] v14 = *(_DWORD *)(this[9] + 4 * a2); v18 = *(_DWORD *)(this[3] + 4 * a2); if ( !v14 || !v18 ) return 0; if ( (signed int)*(unsigned __int16 *)(v18 + 100) <= 0 ) return 0; v15 = (float *)sub_868390(v18, 0); if ( !v15 ) return 0; if ( a4 ) { v16 = v15[4] - (double)a3; if ( v16 == v15[1] ) return 1; *(_DWORD *)(v14 + 32) = a3; v13 = 0.0; v19 = v15[6]; v17 = v15[4]; } else { v17 = (double)a3; if ( v17 == v15[7] ) return 1; *(_DWORD *)(v14 + 32) = a3; v13 = 0.0; v16 = 0.0; v19 = v15[6]; } v11 = v13; v12 = v16; sub_867DE0(v18, 0, 0, &v11); v9 = v13; v10 = v17; sub_867DE0(v18, 0, 1, &v9); v7 = v19; v8 = v17; sub_867DE0(v18, 0, 2, &v7); v5 = v19; v6 = v16; sub_867DE0(v18, 0, 3, &v5); return 1; } //----- (008FBEF0) -------------------------------------------------------- char __thiscall sub_8FBEF0(_DWORD *this, int a2, unsigned int a3) { return sub_8FBD50(this, a2, a3, 0); } //----- (008FBF10) -------------------------------------------------------- char __thiscall sub_8FBF10(_DWORD *this, int a2) { return sub_8FBD30(this, a2, *(_DWORD *)(*(_DWORD *)(this[9] + 4 * a2) + 20)); } //----- (008FBF50) -------------------------------------------------------- char __thiscall sub_8FBF50(_DWORD *this, int a2) { return sub_8FBEF0(this, a2, *(_DWORD *)(*(_DWORD *)(this[9] + 4 * a2) + 24)); } //----- (008FBF90) -------------------------------------------------------- char __thiscall sub_8FBF90(_DWORD *this, int a2, unsigned int a3, char a4) { _DWORD *v5; // [esp+20h] [ebp-48h] float v6; // [esp+2Ch] [ebp-3Ch] float v7; // [esp+30h] [ebp-38h] float v8; // [esp+34h] [ebp-34h] float v9; // [esp+38h] [ebp-30h] float v10; // [esp+3Ch] [ebp-2Ch] float v11; // [esp+40h] [ebp-28h] float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] int v15; // [esp+50h] [ebp-18h] float v16; // [esp+54h] [ebp-14h] float v17; // [esp+58h] [ebp-10h] float v18; // [esp+5Ch] [ebp-Ch] int v19; // [esp+60h] [ebp-8h] float v20; // [esp+64h] [ebp-4h] v5 = this; if ( !sub_8FBB90(this, a2, a3, a4) ) return 0; if ( !a3 ) a3 = 1; v19 = *(_DWORD *)(v5[3] + 4 * a2); if ( (signed int)*(unsigned __int16 *)(v19 + 100) <= 0 ) return 0; v15 = *(_DWORD *)(v5[9] + 4 * a2); v18 = 0.0; if ( a4 ) { v20 = *(float *)(v15 + 52); v16 = *(float *)(v15 + 40); v17 = *(float *)(v15 + 48); if ( *(_DWORD *)(v15 + 20) ) { v18 = *(float *)(v15 + 52) - *(float *)(v15 + 36); v18 = (double)a3 * v18 / (double)*(unsigned int *)(v15 + 20); } v14 = *(float *)(v15 + 52) - v18; } else { v14 = *(float *)(v15 + 36); v16 = *(float *)(v15 + 40); v17 = *(float *)(v15 + 48); if ( *(_DWORD *)(v15 + 20) ) { v18 = *(float *)(v15 + 52) - *(float *)(v15 + 36); v18 = (double)a3 * v18 / (double)*(unsigned int *)(v15 + 20); } v20 = *(float *)(v15 + 36) + v18; } v12 = v14; v13 = v16; sub_868090(v19, 0, 0, 0, &v12); v10 = v14; v11 = v17; sub_868090(v19, 0, 1, 0, &v10); v8 = v20; v9 = v17; sub_868090(v19, 0, 2, 0, &v8); v6 = v20; v7 = v16; sub_868090(v19, 0, 3, 0, &v6); return 1; } //----- (008FC170) -------------------------------------------------------- char __thiscall sub_8FC170(_DWORD *this, int a2, unsigned int a3, char a4) { _DWORD *v5; // [esp+20h] [ebp-48h] float v6; // [esp+2Ch] [ebp-3Ch] float v7; // [esp+30h] [ebp-38h] float v8; // [esp+34h] [ebp-34h] float v9; // [esp+38h] [ebp-30h] float v10; // [esp+3Ch] [ebp-2Ch] float v11; // [esp+40h] [ebp-28h] float v12; // [esp+44h] [ebp-24h] float v13; // [esp+48h] [ebp-20h] float v14; // [esp+4Ch] [ebp-1Ch] float v15; // [esp+50h] [ebp-18h] int v16; // [esp+54h] [ebp-14h] float v17; // [esp+58h] [ebp-10h] float v18; // [esp+5Ch] [ebp-Ch] int v19; // [esp+60h] [ebp-8h] float v20; // [esp+64h] [ebp-4h] v5 = this; if ( !sub_8FBD50(this, a2, a3, a4) ) return 0; if ( !a3 ) a3 = 1; v19 = *(_DWORD *)(v5[3] + 4 * a2); if ( (signed int)*(unsigned __int16 *)(v19 + 100) <= 0 ) return 0; v16 = *(_DWORD *)(v5[9] + 4 * a2); if ( a4 ) { v15 = *(float *)(v16 + 36); v20 = *(float *)(v16 + 52); v18 = *(float *)(v16 + 48); if ( *(_DWORD *)(v16 + 24) ) { v14 = *(float *)(v16 + 56) - *(float *)(v16 + 40); v14 = (double)a3 * v14 / (double)*(unsigned int *)(v16 + 24); } v17 = *(float *)(v16 + 56) - v14; } else { v15 = *(float *)(v16 + 36); v17 = *(float *)(v16 + 40); v20 = *(float *)(v16 + 52); if ( *(_DWORD *)(v16 + 24) ) { v14 = *(float *)(v16 + 56) - *(float *)(v16 + 40); v14 = (double)a3 * v14 / (double)*(unsigned int *)(v16 + 24); } v18 = *(float *)(v16 + 40) + v14; } v12 = v15; v13 = v17; sub_868090(v19, 0, 0, 0, &v12); v10 = v15; v11 = v18; sub_868090(v19, 0, 1, 0, &v10); v8 = v20; v9 = v18; sub_868090(v19, 0, 2, 0, &v8); v6 = v20; v7 = v17; sub_868090(v19, 0, 3, 0, &v6); return 1; } //----- (008FC350) -------------------------------------------------------- _BYTE *__cdecl sub_8FC350(int a1, int a2, int a3, unsigned int a4, unsigned int a5) { unsigned int j; // [esp+18h] [ebp-18h] unsigned int i; // [esp+1Ch] [ebp-14h] int v8; // [esp+20h] [ebp-10h] _BYTE *v9; // [esp+24h] [ebp-Ch] _BYTE *v10; // [esp+28h] [ebp-8h] int v11; // [esp+2Ch] [ebp-4h] v8 = **(_DWORD **)(a1 + 84) - a4; v9 = operator new[](a5 * a4); v10 = v9; *(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * *(_DWORD *)(a1 + 96)); v11 = **(_DWORD **)(a1 + 92) + *(_DWORD *)(a1 + 80) + 4 * (a2 + a3 * **(_DWORD **)(a1 + 84)); for ( i = 0; i < a5; ++i ) { for ( j = 0; j < a4; ++j ) { if ( *(_BYTE *)(v11 + 3) ) *v10 = 1; else *v10 = 0; ++v10; v11 += 4; } v11 += 4 * v8; } return v9; } //----- (008FC470) -------------------------------------------------------- float *__cdecl sub_8FC470(int a1, char a2, int a3, int a4, unsigned int a5, unsigned int a6) { unsigned int v6; // ST7C_4 unsigned int v7; // ST80_4 float v8; // ST74_4 float v9; // ST88_4 float v10; // ST78_4 float v11; // ST84_4 float *v13; // [esp+48h] [ebp-40h] _DWORD *v14; // [esp+54h] [ebp-34h] v14 = operator new(0x48u); if ( v14 ) v13 = (float *)sub_8FD7A0(v14, a3, a4, a5, a6, 0, 0); else v13 = 0; if ( a2 && a1 && *(_DWORD *)(a1 + 12) == 1 ) *((_DWORD *)v13 + 2) = sub_8FC350(a1, a3, a4, a5, a6); v6 = **(_DWORD **)(a1 + 84); v7 = **(_DWORD **)(a1 + 88); v8 = (double)(unsigned int)a3 / (double)v6; v9 = (double)(a5 + a3) / (double)v6; v10 = (double)(unsigned int)a4 / (double)v7; v11 = (double)(a6 + a4) / (double)v7; v13[9] = v8; v13[10] = v10; v13[11] = v8; v13[12] = v11; v13[13] = v9; v13[14] = v11; v13[15] = v9; v13[16] = v10; return v13; } //----- (008FC650) -------------------------------------------------------- float *__cdecl sub_8FC650(int a1, char a2, int a3, unsigned int a4) { float *v5; // [esp+0h] [ebp-10h] unsigned int i; // [esp+4h] [ebp-Ch] float *v7; // [esp+8h] [ebp-8h] float *v8; // [esp+Ch] [ebp-4h] v8 = 0; v7 = 0; for ( i = 0; i < a4; ++i ) { v5 = sub_8FC470(a1, a2, *(_DWORD *)a3, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 4), *(_DWORD *)(a3 + 12)); a3 += 16; if ( v8 ) *((_DWORD *)v7 + 17) = v5; else v8 = v5; v7 = v5; } return v8; } //----- (008FC6F0) -------------------------------------------------------- _DWORD *__thiscall sub_8FC6F0(_DWORD *this, _DWORD *a2) { int v2; // ST20_4 _DWORD *v4; // [esp+Ch] [ebp-ECh] _DWORD *v5; // [esp+10h] [ebp-E8h] _DWORD *v6; // [esp+14h] [ebp-E4h] _DWORD *v7; // [esp+18h] [ebp-E0h] int v8; // [esp+24h] [ebp-D4h] _DWORD *v9; // [esp+28h] [ebp-D0h] _DWORD *v10; // [esp+3Ch] [ebp-BCh] _DWORD *v11; // [esp+60h] [ebp-98h] _DWORD *v12; // [esp+64h] [ebp-94h] int v13; // [esp+68h] [ebp-90h] _DWORD *v14; // [esp+6Ch] [ebp-8Ch] _DWORD *v15; // [esp+70h] [ebp-88h] _DWORD *v16; // [esp+74h] [ebp-84h] _DWORD *v17; // [esp+78h] [ebp-80h] int v18; // [esp+7Ch] [ebp-7Ch] int v19; // [esp+80h] [ebp-78h] int *v20; // [esp+84h] [ebp-74h] unsigned int v21; // [esp+88h] [ebp-70h] int v22; // [esp+8Ch] [ebp-6Ch] _DWORD *v23; // [esp+90h] [ebp-68h] int v24; // [esp+94h] [ebp-64h] int v25; // [esp+98h] [ebp-60h] int *v26; // [esp+9Ch] [ebp-5Ch] unsigned int v27; // [esp+A0h] [ebp-58h] int *v28; // [esp+B0h] [ebp-48h] int v29; // [esp+B4h] [ebp-44h] void *v30; // [esp+B8h] [ebp-40h] _DWORD *v31; // [esp+BCh] [ebp-3Ch] void *v32; // [esp+C0h] [ebp-38h] _DWORD *v33; // [esp+C4h] [ebp-34h] void *v34; // [esp+C8h] [ebp-30h] _DWORD *v35; // [esp+CCh] [ebp-2Ch] _DWORD *v36; // [esp+D0h] [ebp-28h] int v37; // [esp+D4h] [ebp-24h] int v38; // [esp+D8h] [ebp-20h] int v39; // [esp+DCh] [ebp-1Ch] _DWORD *v40; // [esp+E0h] [ebp-18h] _DWORD *v41; // [esp+E4h] [ebp-14h] unsigned int i; // [esp+E8h] [ebp-10h] int v43; // [esp+F4h] [ebp-4h] v7 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v43 = 0; *v7 = &PgSpr::`vftable'; v28 = v7 + 2; v7[2] = 0; if ( *v28 ) { v29 = *v28; InterlockedIncrement((volatile LONG *)(v29 + 4)); } sub_8AFC00(v7 + 3, 0, 1); LOBYTE(v43) = 2; for ( i = 0; ; ++i ) { v27 = a2[5]; if ( i >= v27 ) break; v26 = (int *)(a2[3] + 4 * i); v25 = *v26; v38 = v25; v24 = a2[14]; v37 = v24; v34 = operator new(0xC4u); LOBYTE(v43) = 3; if ( v34 ) v6 = sub_868C00(v34, v38); else v6 = 0; v35 = v6; LOBYTE(v43) = 2; v40 = v6; if ( v6 ) { v23 = v40; InterlockedIncrement(v40 + 1); } LOBYTE(v43) = 4; v22 = a2[18]; if ( v22 && (v21 = a2[18], v21 >= i + 1) ) { v20 = (int *)(a2[16] + 4 * i); v19 = *v20; v39 = v19; } else { v39 = 0; } if ( v39 ) { v17 = v40; sub_44EC60(&v18, v39); LOBYTE(v43) = 5; sub_8A6330(v17 + 39, &v18); LOBYTE(v43) = 4; sub_410C00(&v18); } else { v32 = operator new(0x20u); LOBYTE(v43) = 6; if ( v32 ) v5 = sub_40DC70(v32); else v5 = 0; v33 = v5; LOBYTE(v43) = 4; v36 = v5; if ( v5 ) { v16 = v36; InterlockedIncrement(v36 + 1); } LOBYTE(v43) = 7; v15 = v36; sub_46ED70(v36, 1, 1); v14 = v36; v12 = v40; sub_44EC60(&v13, (int)v36); LOBYTE(v43) = 8; sub_8A6330(v12 + 39, &v13); LOBYTE(v43) = 7; sub_410C00(&v13); LOBYTE(v43) = 4; if ( v36 ) sub_402270(v36); } v30 = operator new(0x44u); LOBYTE(v43) = 9; if ( v30 ) v4 = sub_863BB0(v30); else v4 = 0; v31 = v4; LOBYTE(v43) = 4; v41 = v4; if ( v4 ) { v11 = v41; InterlockedIncrement(v41 + 1); } LOBYTE(v43) = 10; sub_42AB40(v41, v37); sub_45C760((_DWORD **)v41, 0); v10 = v41; v41[7] = 2; sub_470EE0((_DWORD **)v41, 0); v9 = v41; v2 = (int)v40; sub_44EC60(&v8, (int)v41); LOBYTE(v43) = 11; sub_8A6330((_DWORD *)(v2 + 156), &v8); LOBYTE(v43) = 10; sub_410C00(&v8); sub_85C4D0(v40); sub_85BED0((_DWORD **)v40, 0.0, 0); sub_8AFC90(v7 + 3, v7[6], (LONG *)&v40); LOBYTE(v43) = 4; if ( v41 ) sub_402270(v41); LOBYTE(v43) = 2; sub_410C00(&v40); } sub_56FF80(v7 + 2, (int)a2); return v7; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A42064: using guessed type void *PgSpr::`vftable'; //----- (008FCB50) -------------------------------------------------------- void *__thiscall sub_8FCB50(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8FCB80(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008FCB80) -------------------------------------------------------- LONG __thiscall sub_8FCB80(_DWORD *this) { _DWORD *v2; // [esp+8h] [ebp-30h] void *v3; // [esp+28h] [ebp-10h] v2 = this; *this = &PgSpr::`vftable'; this[3] = &NiTArray>::`vftable'; v3 = (void *)this[4]; if ( v3 ) sub_8AEF60(v3, 3); if ( v2[2] ) sub_402270((volatile LONG *)v2[2]); *v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2B164: using guessed type void *NiTArray>::`vftable'; // A42064: using guessed type void *PgSpr::`vftable'; //----- (008FCC40) -------------------------------------------------------- LONG __thiscall sub_8FCC40(void *this, int a2) { void *v3; // [esp+0h] [ebp-44h] char v4; // [esp+Fh] [ebp-35h] int j; // [esp+10h] [ebp-34h] unsigned int i; // [esp+38h] [ebp-Ch] _DWORD *v7; // [esp+3Ch] [ebp-8h] _DWORD *v8; // [esp+40h] [ebp-4h] v3 = this; for ( i = 0; i < *(_DWORD *)(*((_DWORD *)v3 + 2) + 20); ++i ) { v8 = *(_DWORD **)(*((_DWORD *)v3 + 4) + 4 * i); v7 = (_DWORD *)sub_85C050(v8, 8); if ( v7 ) { sub_42AB40(v7, a2); sub_85C4D0(v8); } } if ( !a2 ) return sub_8FB400(*((volatile LONG ***)v3 + 2), 0); for ( j = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); j; j = *(_DWORD *)(j + 4) ) { if ( (char *)j == dword_BA4778 ) { v4 = 1; return sub_8FB400(*((volatile LONG ***)v3 + 2), (volatile LONG *)(v4 != 0 ? a2 : 0)); } } v4 = 0; return sub_8FB400(*((volatile LONG ***)v3 + 2), (volatile LONG *)(v4 != 0 ? a2 : 0)); } //----- (008FCD30) -------------------------------------------------------- int __thiscall sub_8FCD30(_DWORD *this) { return *(_DWORD *)(this[2] + 56); } //----- (008FCD60) -------------------------------------------------------- _DWORD *__thiscall sub_8FCD60(_DWORD *this, int a2, int a3) { int v3; // ecx int v5; // [esp+4h] [ebp-20h] _DWORD *v6; // [esp+8h] [ebp-1Ch] int *v7; // [esp+Ch] [ebp-18h] int v8; // [esp+14h] [ebp-10h] v6 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( this[2] ) { v8 = this[2]; v3 = 4 * v8 | -((unsigned __int64)(unsigned int)v8 >> 30 != 0); v7 = (int *)operator new[]((v3 + 4) | -__CFADD__(v3, 4)); if ( v7 ) { *v7 = v8; `eh vector constructor iterator'(v7 + 1, 4u, v8, sub_8FDFC0, sub_907A70); v5 = (int)(v7 + 1); } else { v5 = 0; } v6[1] = v5; } else { this[1] = 0; } return v6; } // A4204C: using guessed type void *NiTArray>::`vftable'; //----- (008FCE80) -------------------------------------------------------- _DWORD *__thiscall sub_8FCE80(_DWORD *this, int a2, int a3) { int v3; // ecx int v5; // [esp+4h] [ebp-20h] _DWORD *v6; // [esp+8h] [ebp-1Ch] int *v7; // [esp+Ch] [ebp-18h] int v8; // [esp+14h] [ebp-10h] v6 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( this[2] ) { v8 = this[2]; v3 = 4 * v8 | -((unsigned __int64)(unsigned int)v8 >> 30 != 0); v7 = (int *)operator new[]((v3 + 4) | -__CFADD__(v3, 4)); if ( v7 ) { *v7 = v8; `eh vector constructor iterator'(v7 + 1, 4u, v8, sub_8FDFC0, sub_907A70); v5 = (int)(v7 + 1); } else { v5 = 0; } v6[1] = v5; } else { this[1] = 0; } return v6; } // A42054: using guessed type void *NiTArray>::`vftable'; //----- (008FCFA0) -------------------------------------------------------- _DWORD *__thiscall sub_8FCFA0(_DWORD *this, int a2, int a3) { int v3; // ecx int v5; // [esp+4h] [ebp-20h] _DWORD *v6; // [esp+8h] [ebp-1Ch] int *v7; // [esp+Ch] [ebp-18h] int v8; // [esp+14h] [ebp-10h] v6 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( this[2] ) { v8 = this[2]; v3 = 4 * v8 | -((unsigned __int64)(unsigned int)v8 >> 30 != 0); v7 = (int *)operator new[]((v3 + 4) | -__CFADD__(v3, 4)); if ( v7 ) { *v7 = v8; `eh vector constructor iterator'(v7 + 1, 4u, v8, sub_8FDFC0, sub_410C00); v5 = (int)(v7 + 1); } else { v5 = 0; } v6[1] = v5; } else { this[1] = 0; } return v6; } // A4205C: using guessed type void *NiTArray>::`vftable'; //----- (008FD0C0) -------------------------------------------------------- volatile LONG *__thiscall sub_8FD0C0(volatile LONG *this, unsigned int a2, volatile LONG **a3) { volatile LONG *result; // eax volatile LONG *v4; // [esp+0h] [ebp-74h] volatile LONG **v5; // [esp+4h] [ebp-70h] int v6; // [esp+54h] [ebp-20h] bool v7; // [esp+5Bh] [ebp-19h] int v8; // [esp+5Ch] [ebp-18h] bool v9; // [esp+63h] [ebp-11h] int v10; // [esp+64h] [ebp-10h] bool v11; // [esp+6Bh] [ebp-9h] int v12; // [esp+6Ch] [ebp-8h] bool v13; // [esp+73h] [ebp-1h] v4 = this; result = this; if ( a2 < *((_DWORD *)this + 2) ) { if ( a2 < *((_DWORD *)this + 3) ) { v10 = 0; v11 = *a3 != 0; if ( v11 ) { v8 = 0; v9 = *(_DWORD *)(*((_DWORD *)v4 + 1) + 4 * a2) == 0; if ( v9 ) ++*((_DWORD *)v4 + 4); } else { v6 = 0; v7 = *(_DWORD *)(*((_DWORD *)v4 + 1) + 4 * a2) != 0; if ( v7 ) --*((_DWORD *)v4 + 4); } } else { *((_DWORD *)this + 3) = a2 + 1; v12 = 0; v13 = *a3 != 0; if ( v13 ) ++*((_DWORD *)v4 + 4); } v5 = (volatile LONG **)(*((_DWORD *)v4 + 1) + 4 * a2); result = *v5; if ( *v5 != *a3 ) { if ( *v5 ) sub_402270(*v5); *v5 = *a3; result = (volatile LONG *)v5; if ( *v5 ) result = (volatile LONG *)InterlockedIncrement(*v5 + 1); } } return result; } //----- (008FD2D0) -------------------------------------------------------- volatile LONG **__thiscall sub_8FD2D0(_DWORD *this, unsigned int a2) { volatile LONG **result; // eax int v3; // ecx char *v4; // [esp+8h] [ebp-A4h] _DWORD *v5; // [esp+Ch] [ebp-A0h] volatile LONG **v6; // [esp+1Ch] [ebp-90h] volatile LONG **v7; // [esp+30h] [ebp-7Ch] volatile LONG **v8; // [esp+34h] [ebp-78h] volatile LONG **v9; // [esp+50h] [ebp-5Ch] volatile LONG *v10; // [esp+7Ch] [ebp-30h] void *v11; // [esp+80h] [ebp-2Ch] char *v12; // [esp+84h] [ebp-28h] int v13; // [esp+88h] [ebp-24h] volatile LONG *v14; // [esp+8Ch] [ebp-20h] int v15; // [esp+90h] [ebp-1Ch] bool v16; // [esp+97h] [ebp-15h] volatile LONG **v17; // [esp+98h] [ebp-14h] unsigned int i; // [esp+9Ch] [ebp-10h] int v19; // [esp+A8h] [ebp-4h] v5 = this; result = (volatile LONG **)this; if ( a2 != this[2] ) { if ( a2 < this[3] ) { for ( i = a2; i < v5[3]; ++i ) { v15 = 0; v16 = *(_DWORD *)(v5[1] + 4 * i) != 0; if ( v16 ) { v14 = 0; v19 = 0; v9 = (volatile LONG **)(v5[1] + 4 * i); if ( *v9 ) { if ( *v9 ) sub_402270(*v9); *v9 = v14; if ( *v9 ) InterlockedIncrement(*v9 + 1); } v19 = -1; if ( v14 ) sub_402270(v14); --v5[4]; } } v5[3] = a2; } v17 = (volatile LONG **)v5[1]; v5[2] = a2; if ( a2 ) { v13 = v5[2]; v3 = 4 * v13 | -((unsigned __int64)(unsigned int)v13 >> 30 != 0); v11 = operator new[]((v3 + 4) | -__CFADD__(v3, 4)); v19 = 1; if ( v11 ) { *(_DWORD *)v11 = v13; `eh vector constructor iterator'((char *)v11 + 4, 4u, v13, sub_8FDFC0, sub_907A70); v4 = (char *)v11 + 4; } else { v4 = 0; } v12 = v4; v19 = -1; v5[1] = v4; for ( i = 0; i < v5[3]; ++i ) { v7 = &v17[i]; v8 = (volatile LONG **)(v5[1] + 4 * i); if ( *v8 != v17[i] ) { if ( *v8 ) sub_402270(*v8); *v8 = *v7; if ( *v8 ) InterlockedIncrement(*v8 + 1); } } for ( i = v5[3]; i < v5[2]; ++i ) { v10 = 0; v19 = 2; v6 = (volatile LONG **)(v5[1] + 4 * i); if ( *v6 ) { if ( *v6 ) sub_402270(*v6); *v6 = v10; if ( *v6 ) InterlockedIncrement(*v6 + 1); } v19 = -1; if ( v10 ) sub_402270(v10); } } else { v5[1] = 0; } result = v17; if ( v17 ) result = (volatile LONG **)sub_8FDAD0(v17, 3); } return result; } //----- (008FD6E0) -------------------------------------------------------- volatile LONG *__thiscall sub_8FD6E0(_DWORD *this, volatile LONG *a2) { volatile LONG *result; // eax _DWORD *v3; // [esp+4h] [ebp-58h] unsigned int v4; // [esp+14h] [ebp-48h] volatile LONG *v5; // [esp+4Ch] [ebp-10h] int v6; // [esp+58h] [ebp-4h] v3 = this; v5 = a2; if ( a2 ) InterlockedIncrement(v5 + 1); v6 = 0; v4 = v3[18]; if ( v4 >= v3[17] ) sub_8FDBB0(v3 + 15, v3[20] + v4); result = sub_8FD0C0(v3 + 15, v4, &v5); v6 = -1; if ( v5 ) result = (volatile LONG *)sub_402270(v5); return result; } //----- (008FD7A0) -------------------------------------------------------- _DWORD *__thiscall sub_8FD7A0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7) { int v7; // ecx int v8; // edx int v9; // eax int v10; // ecx _DWORD *v12; // [esp+0h] [ebp-Ch] signed int v13; // [esp+4h] [ebp-8h] int i; // [esp+8h] [ebp-4h] v12 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v12 = &PgSprData::PgHitTester::`vftable'; v13 = 4; for ( i = (int)(v12 + 9); --v13 >= 0; i += 8 ) ; v12[3] = a2; v12[4] = a3; v12[5] = a4; v12[7] = a4; v12[6] = a5; v12[8] = a5; v12[2] = a6; if ( a7 ) { v7 = a7[1]; v12[9] = *a7; v12[10] = v7; v8 = a7[3]; v12[11] = a7[2]; v12[12] = v8; v9 = a7[5]; v12[13] = a7[4]; v12[14] = v9; v10 = a7[7]; v12[15] = a7[6]; v12[16] = v10; } v12[17] = 0; return v12; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4206C: using guessed type void *PgSprData::PgHitTester::`vftable'; //----- (008FD8A0) -------------------------------------------------------- _DWORD *__thiscall sub_8FD8A0(void *this, char a2) { _DWORD *v3; // [esp+0h] [ebp-8h] v3 = this; *(_DWORD *)this = &PgSprData::PgHitTester::`vftable'; operator delete[](*((void **)this + 2)); *v3 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v3); return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4206C: using guessed type void *PgSprData::PgHitTester::`vftable'; //----- (008FD900) -------------------------------------------------------- volatile LONG **__thiscall sub_8FD900(_DWORD *this) { volatile LONG **result; // eax *this = &NiTArray>::`vftable'; result = (volatile LONG **)this[1]; if ( result ) result = (volatile LONG **)sub_8FDAD0(result, 3); return result; } // A4204C: using guessed type void *NiTArray>::`vftable'; //----- (008FD950) -------------------------------------------------------- volatile LONG **__thiscall sub_8FD950(_DWORD *this) { volatile LONG **result; // eax *this = &NiTArray>::`vftable'; result = (volatile LONG **)this[1]; if ( result ) result = (volatile LONG **)sub_8FDAD0(result, 3); return result; } // A42054: using guessed type void *NiTArray>::`vftable'; //----- (008FD9A0) -------------------------------------------------------- unsigned int __thiscall sub_8FD9A0(volatile LONG *this, volatile LONG **a2) { volatile LONG *v3; // [esp+0h] [ebp-88h] unsigned int v4; // [esp+4h] [ebp-84h] v3 = this; v4 = *((_DWORD *)this + 3); if ( v4 >= *((_DWORD *)this + 2) ) sub_8FDBB0(this, *((_DWORD *)this + 5) + v4); sub_8FD0C0(v3, v4, a2); return v4; } //----- (008FDA10) -------------------------------------------------------- void *__thiscall sub_8FDA10(_DWORD *this, char a2) { void *v3; // [esp+4h] [ebp-14h] volatile LONG **v4; // [esp+14h] [ebp-4h] v3 = this; *this = &NiTArray>::`vftable'; v4 = (volatile LONG **)this[1]; if ( v4 ) sub_8FDAD0(v4, 3); if ( a2 & 1 ) operator delete(v3); return v3; } // A4204C: using guessed type void *NiTArray>::`vftable'; //----- (008FDA70) -------------------------------------------------------- void *__thiscall sub_8FDA70(_DWORD *this, char a2) { void *v3; // [esp+4h] [ebp-14h] volatile LONG **v4; // [esp+14h] [ebp-4h] v3 = this; *this = &NiTArray>::`vftable'; v4 = (volatile LONG **)this[1]; if ( v4 ) sub_8FDAD0(v4, 3); if ( a2 & 1 ) operator delete(v3); return v3; } // A42054: using guessed type void *NiTArray>::`vftable'; //----- (008FDAD0) -------------------------------------------------------- int __thiscall sub_8FDAD0(volatile LONG **this, char a2) { int result; // eax volatile LONG **v3; // [esp+0h] [ebp-Ch] v3 = this; if ( a2 & 2 ) { `eh vector destructor iterator'(this, 4u, (int)*(this - 1), sub_907A70); if ( a2 & 1 ) operator delete[](v3 - 1); result = (int)(v3 - 1); } else { if ( *this ) sub_402270(*this); if ( a2 & 1 ) operator delete(v3); result = (int)v3; } return result; } //----- (008FDB50) -------------------------------------------------------- void *__thiscall sub_8FDB50(_DWORD *this, char a2) { void *v3; // [esp+4h] [ebp-14h] void *v4; // [esp+14h] [ebp-4h] v3 = this; *this = &NiTArray>::`vftable'; v4 = (void *)this[1]; if ( v4 ) sub_484420(v4, 3); if ( a2 & 1 ) operator delete(v3); return v3; } // A4205C: using guessed type void *NiTArray>::`vftable'; //----- (008FDBB0) -------------------------------------------------------- char *__thiscall sub_8FDBB0(_DWORD *this, unsigned int a2) { char *result; // eax int v3; // ecx char *v4; // [esp+8h] [ebp-A4h] _DWORD *v5; // [esp+Ch] [ebp-A0h] volatile LONG **v6; // [esp+1Ch] [ebp-90h] volatile LONG **v7; // [esp+30h] [ebp-7Ch] volatile LONG **v8; // [esp+34h] [ebp-78h] volatile LONG **v9; // [esp+50h] [ebp-5Ch] volatile LONG *v10; // [esp+7Ch] [ebp-30h] void *v11; // [esp+80h] [ebp-2Ch] char *v12; // [esp+84h] [ebp-28h] int v13; // [esp+88h] [ebp-24h] volatile LONG *v14; // [esp+8Ch] [ebp-20h] int v15; // [esp+90h] [ebp-1Ch] bool v16; // [esp+97h] [ebp-15h] volatile LONG **v17; // [esp+98h] [ebp-14h] unsigned int i; // [esp+9Ch] [ebp-10h] int v19; // [esp+A8h] [ebp-4h] v5 = this; result = (char *)this; if ( a2 != this[2] ) { if ( a2 < this[3] ) { for ( i = a2; i < v5[3]; ++i ) { v15 = 0; v16 = *(_DWORD *)(v5[1] + 4 * i) != 0; if ( v16 ) { v14 = 0; v19 = 0; v9 = (volatile LONG **)(v5[1] + 4 * i); if ( *v9 ) { if ( *v9 ) sub_402270(*v9); *v9 = v14; if ( *v9 ) InterlockedIncrement(*v9 + 1); } v19 = -1; if ( v14 ) sub_402270(v14); --v5[4]; } } v5[3] = a2; } v17 = (volatile LONG **)v5[1]; v5[2] = a2; if ( a2 ) { v13 = v5[2]; v3 = 4 * v13 | -((unsigned __int64)(unsigned int)v13 >> 30 != 0); v11 = operator new[]((v3 + 4) | -__CFADD__(v3, 4)); v19 = 1; if ( v11 ) { *(_DWORD *)v11 = v13; `eh vector constructor iterator'((char *)v11 + 4, 4u, v13, sub_8FDFC0, sub_410C00); v4 = (char *)v11 + 4; } else { v4 = 0; } v12 = v4; v19 = -1; v5[1] = v4; for ( i = 0; i < v5[3]; ++i ) { v7 = &v17[i]; v8 = (volatile LONG **)(v5[1] + 4 * i); if ( *v8 != v17[i] ) { if ( *v8 ) sub_402270(*v8); *v8 = *v7; if ( *v8 ) InterlockedIncrement(*v8 + 1); } } for ( i = v5[3]; i < v5[2]; ++i ) { v10 = 0; v19 = 2; v6 = (volatile LONG **)(v5[1] + 4 * i); if ( *v6 ) { if ( *v6 ) sub_402270(*v6); *v6 = v10; if ( *v6 ) InterlockedIncrement(*v6 + 1); } v19 = -1; if ( v10 ) sub_402270(v10); } } else { v5[1] = 0; } result = (char *)v17; if ( v17 ) result = sub_484420(v17, 3); } return result; } //----- (008FDFC0) -------------------------------------------------------- void __thiscall sub_8FDFC0(void *this) { *(_DWORD *)this = 0; if ( *(_DWORD *)this ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)this + 4)); } //----- (008FE000) -------------------------------------------------------- _DWORD *__thiscall sub_8FE000(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8F3C20(this); *v1 = &PgWinBut::`vftable'; v1[58] = &PgWinBut::`vftable'; v1[76] = 1; v1[77] = 0; v1[79] = 0; v1[74] = 0; v1[75] = 0; *((_BYTE *)v1 + 312) = 0; *((_BYTE *)v1 + 320) = 1; *((_BYTE *)v1 + 321) = 0; return v1; } // A42074: using guessed type void *PgWinBut::`vftable'; // A42094: using guessed type void *PgWinBut::`vftable'; //----- (008FE090) -------------------------------------------------------- void *__thiscall sub_8FE090(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_8FE0C0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (008FE0C0) -------------------------------------------------------- LONG __thiscall sub_8FE0C0(_DWORD *this) { *this = &PgWinBut::`vftable'; this[58] = &PgWinBut::`vftable'; return sub_8F3CC0(this); } // A42074: using guessed type void *PgWinBut::`vftable'; // A42094: using guessed type void *PgWinBut::`vftable'; //----- (008FE0F0) -------------------------------------------------------- volatile LONG *__cdecl sub_8FE0F0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { volatile LONG *result; // eax volatile LONG *v8; // [esp+Ch] [ebp-54h] volatile LONG *v9; // [esp+44h] [ebp-1Ch] _DWORD *v10; // [esp+48h] [ebp-18h] volatile LONG *v11; // [esp+4Ch] [ebp-14h] volatile LONG *v12; // [esp+50h] [ebp-10h] int v13; // [esp+5Ch] [ebp-4h] v10 = operator new(0x144u); v13 = 0; if ( v10 ) v8 = sub_8FE000(v10); else v8 = 0; v11 = v8; v13 = -1; v12 = v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v12 + 548))( v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (008FE250) -------------------------------------------------------- volatile LONG *__cdecl sub_8FE250(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x144u); v14 = 0; if ( v11 ) v9 = sub_8FE000(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 540))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (008FE3B0) -------------------------------------------------------- char __thiscall sub_8FE3B0(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7, int a8) { volatile LONG **v9; // [esp+0h] [ebp-8h] v9 = this; if ( !sub_8F43D0(this, a2, a3, a4, a5, a7, a8) ) return 0; (*((void (__thiscall **)(volatile LONG **, _DWORD))*v9 + 138))(v9, 0); v9[79] = *(volatile LONG **)(a4 + 20); (*((void (__thiscall **)(volatile LONG **, int))*v9 + 129))(v9, a6); return 1; } //----- (008FE430) -------------------------------------------------------- char __thiscall sub_8FE430(void *this, int a2, int a3, int *a4, char a5, unsigned int *a6, unsigned int a7, int a8, int a9) { char result; // al void *v10; // [esp+4h] [ebp-3Ch] volatile LONG *v11; // [esp+30h] [ebp-10h] v10 = this; v11 = sub_8FAEE0(a4, a5, a6, a7); if ( v11 ) InterlockedIncrement(v11 + 1); if ( !v11 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, volatile LONG *, int, int, _DWORD, _DWORD))(*(_DWORD *)v10 + 548))( v10, a2, a3, v11, a8, a9, 0, 0) ) { if ( v11 ) sub_402270(v11); result = 1; } else { if ( v11 ) sub_402270(v11); result = 0; } return result; } //----- (008FE550) -------------------------------------------------------- char __thiscall sub_8FE550(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8, int a9) { _DWORD *v10; // [esp+0h] [ebp-4h] v10 = this; if ( !sub_8F4630(this, a2, a3, a4, a5, a6, a8, a9) ) return 0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v10 + 552))(v10, 0); v10[79] = 0; (*(void (__thiscall **)(_DWORD *, int))(*v10 + 516))(v10, a7); return 1; } //----- (008FE5D0) -------------------------------------------------------- int __thiscall sub_8FE5D0(void *this, _BYTE *a2) { int result; // eax int v3; // [esp+0h] [ebp-8h] v3 = (int)this; result = (*(int (__thiscall **)(void *))(*(_DWORD *)this + 312))(this); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; if ( dword_BA6A9C >= 1 && dword_BA6A9C ) ++dword_BA6A9C; sub_8F1EF0((_DWORD *)v3, a2); if ( !*a2 && dword_BA6A9C ) --dword_BA6A9C; byte_BA6AA4 = 0; byte_BA6AB0 = 0; if ( dword_BA6A9C < 1 ) *(_BYTE *)(v3 + 312) = 0; if ( dword_BA6AA8 >= 1 && *a2 ) { if ( *(_DWORD *)(v3 + 304) ) { dword_BA6A7C = v3; *(_BYTE *)(v3 + 312) = 1; } else { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 528))(v3); if ( *(_BYTE *)(v3 + 320) ) sub_4444B0(); *(_BYTE *)(v3 + 312) = 0; } byte_BA6AA4 = 1; } else if ( dword_BA6AB4 >= 1 ) { *(_BYTE *)(v3 + 312) = 0; if ( dword_BA6A7C == v3 ) { dword_BA6A7C = 0; byte_BA6AB0 = 1; } if ( *a2 ) { if ( *(_DWORD *)(v3 + 304) == 1 ) { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 528))(v3); if ( *(_BYTE *)(v3 + 320) ) sub_4444B0(); } byte_BA6AB0 = 1; } } if ( *(_BYTE *)(v3 + 321) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 1); } else if ( *a2 ) { if ( *(_BYTE *)(v3 + 312) ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 1); else (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 2); } else if ( *(_BYTE *)(v3 + 312) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 2); } else { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 552))(v3, 0); } if ( byte_BA6AA4 && dword_BA6AA8 ) --dword_BA6AA8; byte_BA6AA4 = 0; result = (unsigned __int8)byte_BA6AB0; if ( byte_BA6AB0 && dword_BA6AB4 ) --dword_BA6AB4; byte_BA6AB0 = 0; if ( dword_BA6AA8 ) --dword_BA6AA8; if ( dword_BA6AB4 ) result = dword_BA6AB4-- - 1; } return result; } // BA6A7C: using guessed type int dword_BA6A7C; // BA6A9C: using guessed type int dword_BA6A9C; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; //----- (008FE8E0) -------------------------------------------------------- int __thiscall sub_8FE8E0(void *this) { return (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)this + 552))(this, 0); } //----- (008FE900) -------------------------------------------------------- char __thiscall sub_8FE900(_DWORD *this, int a2) { char result; // al _DWORD *v3; // [esp+0h] [ebp-8h] v3 = this; this[2] = 0; *this = operator new[](24 * a2); if ( *v3 ) { v3[1] = a2; result = 1; } else { v3[1] = 0; result = 0; } return result; } //----- (008FE970) -------------------------------------------------------- int __thiscall sub_8FE970(_DWORD *this) { int v2; // [esp+0h] [ebp-8h] if ( this[1] <= this[2] ) v2 = 0; else v2 = *this + 24 * this[2]++; return v2; } //----- (008FE9F0) -------------------------------------------------------- void __thiscall sub_8FE9F0(void **this) { operator delete(*this); } //----- (008FEA20) -------------------------------------------------------- _DWORD *__thiscall sub_8FEA20(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this + 1; this[1] = &NiTListBase,CBucketBlock *>::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerListBase,CBucketBlock *>::`vftable'; *v2 = &NiTList::`vftable'; *this = a2; this[5] = 0; return this; } // A422D4: using guessed type void *NiTList::`vftable'; // A422E4: using guessed type void *NiTPointerListBase,CBucketBlock *>::`vftable'; // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (008FEA90) -------------------------------------------------------- _DWORD *__thiscall sub_8FEA90(_DWORD *this, char a2) { _DWORD *v3; // [esp+4h] [ebp-18h] v3 = this; *this = &NiTPointerListBase,CBucketBlock *>::`vftable'; sub_88DCC0(this); *v3 = &NiTListBase,CBucketBlock *>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A422E4: using guessed type void *NiTPointerListBase,CBucketBlock *>::`vftable'; // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (008FEB10) -------------------------------------------------------- int __thiscall sub_8FEB10(_DWORD *this) { int result; // eax _DWORD *v2; // [esp+Ch] [ebp-38h] void **v3; // [esp+28h] [ebp-1Ch] void **v4; // [esp+30h] [ebp-14h] v2 = this; if ( this[5] ) { v4 = (void **)this[5]; if ( v4 ) { sub_8FE9F0(v4); operator delete(v4); } v2[5] = 0; } while ( v2[4] ) { v3 = (void **)sub_88CF30(v2 + 1); if ( v3 ) { sub_8FE9F0(v3); operator delete(v3); } } v2[1] = &NiTPointerListBase,CBucketBlock *>::`vftable'; sub_88DCC0(v2 + 1); result = (int)(v2 + 1); v2[1] = &NiTListBase,CBucketBlock *>::`vftable'; return result; } // A422E4: using guessed type void *NiTPointerListBase,CBucketBlock *>::`vftable'; // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (008FEC40) -------------------------------------------------------- _DWORD *__thiscall sub_8FEC40(_DWORD *this) { _DWORD *v1; // ST04_4 _DWORD *result; // eax v1 = this; *this = &NiTPointerListBase,CBucketBlock *>::`vftable'; result = sub_88DCC0(this); *v1 = &NiTListBase,CBucketBlock *>::`vftable'; return result; } // A422E4: using guessed type void *NiTPointerListBase,CBucketBlock *>::`vftable'; // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (008FECA0) -------------------------------------------------------- _DWORD *__thiscall sub_8FECA0(int *this) { _DWORD *v2; // [esp+4h] [ebp-20h] int *v3; // [esp+8h] [ebp-1Ch] void *v4; // [esp+Ch] [ebp-18h] v3 = this; v4 = operator new(0xCu); if ( v4 ) v2 = (_DWORD *)std::_Vector_val>::_Vector_val>(v4); else v2 = 0; if ( !v2 ) return 0; sub_8FE900(v2, *v3); return v2; } // 8FE9C0: using guessed type int __thiscall std::_Vector_val>::_Vector_val>(_DWORD); //----- (008FED40) -------------------------------------------------------- int __thiscall sub_8FED40(int *this) { _DWORD *v2; // ST0C_4 int *v3; // [esp+0h] [ebp-10h] int v4; // [esp+Ch] [ebp-4h] v3 = this; if ( !this[5] ) { this[5] = (int)sub_8FECA0(this); if ( !v3[5] ) return 0; } v4 = sub_8FE970((_DWORD *)v3[5]); if ( !v4 ) { v2 = (_DWORD *)(*(int (__thiscall **)(int *))(v3[1] + 4))(v3 + 1); v2[2] = v3[5]; sub_88DD80(v3 + 1, v2); v3[5] = (int)sub_8FECA0(v3); if ( !v3[5] ) return 0; v4 = sub_8FE970((_DWORD *)v3[5]); } return v4; } //----- (008FEDF0) -------------------------------------------------------- int __thiscall sub_8FEDF0(_DWORD *this, _DWORD *a2) { _DWORD *v3; // [esp+44h] [ebp-3Ch] _DWORD *v4; // [esp+48h] [ebp-38h] volatile LONG *v5; // [esp+4Ch] [ebp-34h] volatile LONG **v6; // [esp+50h] [ebp-30h] _DWORD *v7; // [esp+60h] [ebp-20h] char v8; // [esp+6Bh] [ebp-15h] int v9; // [esp+70h] [ebp-10h] v4 = this; if ( !*this ) *this = a2[1]; if ( *this != a2[1] ) return 0; if ( (unsigned int)(*a2 + this[3]) >= this[2] ) { if ( (unsigned int)(this[4] + 2 * a2[1]) >= this[2] ) { if ( this[1] <= (unsigned int)(this[5] + 1) ) return 0; if ( !this[++this[5] + 7] ) { v8 = byte_BA4774; byte_BA4774 = 1; v7 = operator new(0x70u); if ( v7 ) v3 = sub_8698C0(v7, v4[2], v4[2], &unk_ABE1D8, 1u, 1); else v3 = 0; v5 = sub_865FA0((int)v3, &unk_ABD7DC); v6 = (volatile LONG **)&v4[v4[5] + 7]; if ( *v6 != v5 ) { if ( *v6 ) sub_402270(*v6); *v6 = v5; if ( *v6 ) InterlockedIncrement(*v6 + 1); } byte_BA4774 = v8; } if ( !v4[v4[5] + 7] ) return 0; v4[3] = 0; v4[4] = 0; } else { this[4] += a2[1]; this[3] = 0; } } v9 = sub_8FED40((int *)v4[43]); if ( !v9 ) return 0; *(_BYTE *)(v9 + 6) = *((_BYTE *)v4 + 20); *(float *)(v9 + 8) = (double)(unsigned int)v4[3] / (double)(unsigned int)v4[2]; *(float *)(v9 + 12) = (double)(unsigned int)v4[4] / (double)(unsigned int)v4[2]; *(float *)(v9 + 16) = (double)(unsigned int)(*a2 + v4[3]) / (double)(unsigned int)v4[2]; *(float *)(v9 + 20) = (double)(unsigned int)(a2[1] + v4[4]) / (double)(unsigned int)v4[2]; *(_BYTE *)v9 = *(_BYTE *)a2; *(_BYTE *)(v9 + 1) = *((_BYTE *)a2 + 4); *(_WORD *)(v9 + 2) = *((_WORD *)v4 + 6); *(_WORD *)(v9 + 4) = *((_WORD *)v4 + 8); v4[3] += *a2; ++v4[6]; return v9; } // BA4774: using guessed type char byte_BA4774; //----- (008FF140) -------------------------------------------------------- _DWORD *__thiscall sub_8FF140(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-38h] _DWORD *v3; // [esp+8h] [ebp-34h] volatile LONG **v4; // [esp+Ch] [ebp-30h] _DWORD *v5; // [esp+24h] [ebp-18h] signed int i; // [esp+2Ch] [ebp-10h] v3 = this; `eh vector constructor iterator'( this + 7, 4u, 32, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); sub_905430(v3 + 39, 37); v3[39] = &NiTMap::`vftable'; v3[5] = 0; v3[3] = 0; v3[4] = 0; v3[2] = 0; v3[6] = 0; *v3 = 0; v5 = operator new(0x18u); if ( v5 ) v2 = sub_8FEA20(v5, 64); else v2 = 0; v3[43] = v2; for ( i = 0; i < 32; ++i ) { v4 = (volatile LONG **)&v3[i + 7]; if ( *v4 ) { if ( *v4 ) sub_402270(*v4); *v4 = 0; if ( *v4 ) InterlockedIncrement(*v4 + 1); } } return v3; } // A42304: using guessed type void *NiTMap::`vftable'; //----- (008FF2B0) -------------------------------------------------------- void __thiscall sub_8FF2B0(_DWORD *this) { _DWORD *v1; // [esp+8h] [ebp-2Ch] _DWORD *v2; // [esp+24h] [ebp-10h] v1 = this; sub_8FFDB0(this); v2 = (_DWORD *)v1[43]; if ( v2 ) { sub_8FEB10(v2); operator delete(v2); } sub_905850(v1 + 39); `eh vector destructor iterator'(v1 + 7, 4u, 32, sub_410C00); } //----- (008FF370) -------------------------------------------------------- int __thiscall sub_8FF370(_DWORD *this, int a2, int a3) { *(_DWORD *)a2 = this[a3 + 7]; if ( *(_DWORD *)a2 ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)a2 + 4)); return a2; } //----- (008FF3C0) -------------------------------------------------------- bool __thiscall sub_8FF3C0(_DWORD *this, int a2, int a3) { _DWORD *v4; // [esp+4h] [ebp-38h] _DWORD *v5; // [esp+8h] [ebp-34h] volatile LONG *v6; // [esp+Ch] [ebp-30h] volatile LONG **v7; // [esp+10h] [ebp-2Ch] _DWORD *v8; // [esp+20h] [ebp-1Ch] char v9; // [esp+2Bh] [ebp-11h] v5 = this; this[2] = a3; this[1] = a2; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 0; if ( !this[this[5] + 7] ) { v9 = byte_BA4774; byte_BA4774 = 1; v8 = operator new(0x70u); if ( v8 ) v4 = sub_8698C0(v8, v5[2], v5[2], &unk_ABE1D8, 1u, 1); else v4 = 0; v6 = sub_865FA0((int)v4, &unk_ABD7DC); v7 = (volatile LONG **)&v5[v5[5] + 7]; if ( *v7 != v6 ) { if ( *v7 ) sub_402270(*v7); *v7 = v6; if ( *v7 ) InterlockedIncrement(*v7 + 1); } byte_BA4774 = v9; } return v5[v5[5] + 7] != 0; } // BA4774: using guessed type char byte_BA4774; //----- (008FF550) -------------------------------------------------------- int __thiscall sub_8FF550(_DWORD *this, int a2, LPCSTR lpString, int x) { _DWORD *v5; // [esp+0h] [ebp-14h] int v6; // [esp+4h] [ebp-10h] struct tagSIZE psizl; // [esp+8h] [ebp-Ch] int c; // [esp+10h] [ebp-4h] v5 = this; c = (IsDBCSLeadByte(*lpString) != 0) + 1; GetTextExtentPoint32A(*(HDC *)a2, lpString, c, &psizl); if ( x ) { psizl.cx += 2 * x; psizl.cy += 2 * x; } v6 = sub_8FEDF0(v5, &psizl); if ( !v6 ) return 0; if ( x ) sub_8FF950(v5, a2, lpString, c, v6, x); else sub_8FF610((int)v5, a2, a2, lpString, c, v6); return v6; } //----- (008FF610) -------------------------------------------------------- int __fastcall sub_8FF610(int a1, int a2, int a3, LPCSTR lpString, UINT c, int a6) { int result; // eax _DWORD *v7; // [esp+8h] [ebp-84h] int *v8; // [esp+28h] [ebp-64h] volatile LONG *v9; // [esp+3Ch] [ebp-50h] int v10; // [esp+40h] [ebp-4Ch] _WORD *v11; // [esp+44h] [ebp-48h] int v12; // [esp+48h] [ebp-44h] int v13; // [esp+4Ch] [ebp-40h] _WORD *v14; // [esp+50h] [ebp-3Ch] _WORD *v15; // [esp+54h] [ebp-38h] int v16; // [esp+58h] [ebp-34h] int v17; // [esp+5Ch] [ebp-30h] int v18; // [esp+60h] [ebp-2Ch] int v19; // [esp+64h] [ebp-28h] unsigned __int8 v20; // [esp+6Fh] [ebp-1Dh] int v21; // [esp+70h] [ebp-1Ch] unsigned int j; // [esp+74h] [ebp-18h] unsigned int i; // [esp+78h] [ebp-14h] int v24; // [esp+7Ch] [ebp-10h] int v25; // [esp+88h] [ebp-4h] v7 = (_DWORD *)a1; result = a6; if ( (signed int)*(unsigned __int8 *)a6 >= 1 ) { result = *(unsigned __int8 *)(a6 + 1); if ( result >= 1 ) { result = a3; if ( (unsigned int)*(unsigned __int8 *)a6 <= *(_DWORD *)(a3 + 16) ) { result = a3; if ( (unsigned int)*(unsigned __int8 *)(a6 + 1) <= *(_DWORD *)(a3 + 16) ) { result = a1; if ( *(unsigned __int8 *)a6 + (unsigned int)*(unsigned __int16 *)(a6 + 2) < *(_DWORD *)(a1 + 8) ) { result = a1; if ( *(unsigned __int8 *)(a6 + 1) + (unsigned int)*(unsigned __int16 *)(a6 + 4) < *(_DWORD *)(a1 + 8) ) { SetBkMode(*(HDC *)a3, 2); SetTextColor(*(HDC *)a3, 0xFFFFFFu); ExtTextOutA(*(HDC *)a3, 0, 0, 2u, 0, lpString, c, 0); v21 = 0; v25 = 0; v8 = (int *)sub_8FF370(v7, (int)&v9, *(unsigned __int8 *)(a6 + 6)); LOBYTE(v25) = 1; if ( v21 != *v8 ) { if ( v21 ) sub_402270((volatile LONG *)v21); v21 = *v8; if ( v21 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); } LOBYTE(v25) = 0; if ( v9 ) sub_402270(v9); result = v21 == 0; if ( v21 ) { v10 = *(_DWORD *)(v21 + 40); v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 20))(v10); v16 = *(unsigned __int16 *)(a6 + 2); v17 = *(unsigned __int16 *)(a6 + 4); v18 = *(unsigned __int8 *)a6 + *(unsigned __int16 *)(a6 + 2); v19 = *(unsigned __int8 *)(a6 + 1) + *(unsigned __int16 *)(a6 + 4); (*(void (__stdcall **)(int, _DWORD, int *, int *, _DWORD))(*(_DWORD *)v12 + 76))(v12, 0, &v13, &v16, 0); v11 = v14; v24 = *(_DWORD *)(a3 + 12); j = 0; for ( i = 0; i < *(unsigned __int8 *)(a6 + 1); ++i ) { v15 = v11; for ( j = 0; j < *(unsigned __int8 *)a6; ++j ) { v20 = (*(_DWORD *)(v24 + 4 * j) & 0xFFu) >> 4; if ( (signed int)v20 <= 0 ) *v15 = 0; else *v15 = (v20 << 12) | 0xFFF; ++v15; } v24 += 4 * *(_DWORD *)(a3 + 16); v11 = (_WORD *)((char *)v11 + v13); } result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v12 + 80))(v12, 0); v25 = -1; if ( v21 ) result = sub_402270((volatile LONG *)v21); } else { v25 = -1; } } } } } } } return result; } //----- (008FF950) -------------------------------------------------------- void __thiscall sub_8FF950(_DWORD *this, int a2, LPCSTR lpString, UINT c, int a5, int x) { _DWORD *v6; // [esp+8h] [ebp-8Ch] int *v7; // [esp+28h] [ebp-6Ch] volatile LONG *v8; // [esp+3Ch] [ebp-58h] unsigned int i; // [esp+40h] [ebp-54h] int v10; // [esp+44h] [ebp-50h] _WORD *v11; // [esp+48h] [ebp-4Ch] unsigned __int8 v12; // [esp+4Fh] [ebp-45h] int v13; // [esp+50h] [ebp-44h] int v14; // [esp+54h] [ebp-40h] _WORD *v15; // [esp+58h] [ebp-3Ch] _WORD *v16; // [esp+5Ch] [ebp-38h] int v17; // [esp+60h] [ebp-34h] int v18; // [esp+64h] [ebp-30h] int v19; // [esp+68h] [ebp-2Ch] int v20; // [esp+6Ch] [ebp-28h] unsigned __int8 v21; // [esp+77h] [ebp-1Dh] int v22; // [esp+78h] [ebp-1Ch] unsigned int k; // [esp+7Ch] [ebp-18h] unsigned int j; // [esp+80h] [ebp-14h] int v25; // [esp+84h] [ebp-10h] int v26; // [esp+90h] [ebp-4h] v6 = this; if ( x ) { for ( i = 0; i < *(_DWORD *)(a2 + 16) * *(_DWORD *)(a2 + 16); ++i ) *(_DWORD *)(*(_DWORD *)(a2 + 12) + 4 * i) = 255; SetBkMode(*(HDC *)a2, 1); SetTextColor(*(HDC *)a2, 0); ExtTextOutA(*(HDC *)a2, x, 0, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, x, 2 * x, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 0, x, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 2 * x, x, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 0, 0, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 0, 2 * x, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 0, 2 * x, 2u, 0, lpString, c, 0); ExtTextOutA(*(HDC *)a2, 2 * x, 2 * x, 2u, 0, lpString, c, 0); SetTextColor(*(HDC *)a2, 0xFFu); ExtTextOutA(*(HDC *)a2, x, x, 2u, 0, lpString, c, 0); v22 = 0; v26 = 0; v7 = (int *)sub_8FF370(v6, (int)&v8, *(unsigned __int8 *)(a5 + 6)); LOBYTE(v26) = 1; if ( v22 != *v7 ) { if ( v22 ) sub_402270((volatile LONG *)v22); v22 = *v7; if ( v22 ) InterlockedIncrement((volatile LONG *)(v22 + 4)); } LOBYTE(v26) = 0; if ( v8 ) sub_402270(v8); if ( v22 ) { v10 = *(_DWORD *)(v22 + 40); v13 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 20))(v10); v17 = *(unsigned __int16 *)(a5 + 2); v18 = *(unsigned __int16 *)(a5 + 4); v19 = *(unsigned __int8 *)a5 + *(unsigned __int16 *)(a5 + 2); v20 = *(unsigned __int8 *)(a5 + 1) + *(unsigned __int16 *)(a5 + 4); (*(void (__stdcall **)(int, _DWORD, int *, int *, _DWORD))(*(_DWORD *)v13 + 76))(v13, 0, &v14, &v17, 0); v11 = v15; v25 = *(_DWORD *)(a2 + 12); k = 0; for ( j = 0; j < *(unsigned __int8 *)(a5 + 1); ++j ) { v16 = v11; for ( k = 0; k < *(unsigned __int8 *)a5; ++k ) { v21 = (~(*(_DWORD *)(v25 + 4 * k) & 0xFFu) >> 4) & 0xF; if ( (signed int)v21 <= 0 ) { *v16 = 0; } else { v12 = (*(_DWORD *)(v25 + 4 * k) & 0xFF0000u) >> 20; *v16 = (v12 << 8) | 16 * v12 | v12 | (unsigned __int16)(v21 << 12); } ++v16; } v25 += 4 * *(_DWORD *)(a2 + 16); v11 = (_WORD *)((char *)v11 + v14); } (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v13 + 80))(v13, 0); v26 = -1; if ( v22 ) sub_402270((volatile LONG *)v22); } else { v26 = -1; } } } //----- (008FFDB0) -------------------------------------------------------- _DWORD *__thiscall sub_8FFDB0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // [esp+4h] [ebp-44h] _DWORD *v3; // [esp+Ch] [ebp-3Ch] volatile LONG **v4; // [esp+18h] [ebp-30h] _DWORD *v5; // [esp+28h] [ebp-20h] _DWORD *v6; // [esp+34h] [ebp-14h] signed int i; // [esp+38h] [ebp-10h] v3 = this; for ( i = 0; i < 32; ++i ) { v4 = (volatile LONG **)&v3[i + 7]; if ( *v4 ) { if ( *v4 ) sub_402270(*v4); *v4 = 0; if ( *v4 ) InterlockedIncrement(*v4 + 1); } } v6 = (_DWORD *)v3[43]; if ( v6 ) { sub_8FEB10(v6); operator delete(v6); } v5 = operator new(0x18u); if ( v5 ) v2 = sub_8FEA20(v5, 64); else v2 = 0; v3[43] = v2; sub_905AF0(v3 + 39); v3[3] = 0; v3[4] = 0; v3[5] = 0; result = v3; v3[6] = 0; v3[2] = 0; v3[1] = 0; return result; } //----- (008FFF30) -------------------------------------------------------- int __thiscall sub_8FFF30(_DWORD *this, LPCSTR lpString, int a3, int x) { _DWORD *v5; // [esp+0h] [ebp-20h] int v6; // [esp+18h] [ebp-8h] unsigned __int16 v7; // [esp+1Ch] [ebp-4h] v5 = this; if ( IsDBCSLeadByte(*lpString) ) v7 = *(_WORD *)lpString; else v7 = *lpString; if ( !sub_9055B0(v5 + 39, v7, &v6) ) { v6 = sub_8FF550(v5, a3, lpString, x); if ( !v6 ) return 0; sub_9054B0(v5 + 39, v7, v6); } return v6; } //----- (008FFFC0) -------------------------------------------------------- _DWORD *__thiscall sub_8FFFC0(_DWORD *this) { _DWORD *v1; // ST10_4 _DWORD *v2; // ST14_4 v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &CSpFont::`vftable'; sub_8FF140(v1 + 2); v2 = v1 + 59; v1[59] = &NiTListBase,SpScreenText *>::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerListBase,SpScreenText *>::`vftable'; *v2 = &NiTList::`vftable'; v1[46] = 0; v1[53] = 0; *((float *)v1 + 54) = 1.0; v1[55] = 0; v1[56] = 0; v1[58] = 0; v1[57] = 0; v1[48] = 0; v1[49] = 0; v1[52] = 0; v1[51] = 0; memset(v1 + 64, 0, 0x80u); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A42324: using guessed type void *NiTList::`vftable'; // A42334: using guessed type void *NiTPointerListBase,SpScreenText *>::`vftable'; // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; // A42354: using guessed type void *CSpFont::`vftable'; //----- (00900130) -------------------------------------------------------- void *__thiscall sub_900130(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_900160(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00900160) -------------------------------------------------------- LONG __thiscall sub_900160(_DWORD *this) { void *v2; // [esp+4h] [ebp-34h] v2 = this; *this = &CSpFont::`vftable'; if ( this[47] ) SelectObject((HDC)this[48], (HGDIOBJ)this[47]); if ( *((_DWORD *)v2 + 50) ) SelectObject(*((HDC *)v2 + 48), *((HGDIOBJ *)v2 + 50)); if ( *((_DWORD *)v2 + 46) ) DeleteObject(*((HGDIOBJ *)v2 + 46)); if ( *((_DWORD *)v2 + 49) ) DeleteObject(*((HGDIOBJ *)v2 + 49)); if ( *((_DWORD *)v2 + 48) ) DeleteDC(*((HDC *)v2 + 48)); if ( dword_BA6BB8 ) { if ( dword_BA6BB8 ) sub_402270((volatile LONG *)dword_BA6BB8); dword_BA6BB8 = 0; } if ( dword_BA6BBC ) { if ( dword_BA6BBC ) sub_402270((volatile LONG *)dword_BA6BBC); dword_BA6BBC = 0; } *((_DWORD *)v2 + 59) = &NiTPointerListBase,SpScreenText *>::`vftable'; sub_88DCC0((_DWORD *)v2 + 59); *((_DWORD *)v2 + 59) = &NiTListBase,SpScreenText *>::`vftable'; sub_8FF2B0((_DWORD *)v2 + 2); *(_DWORD *)v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A42334: using guessed type void *NiTPointerListBase,SpScreenText *>::`vftable'; // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; // A42354: using guessed type void *CSpFont::`vftable'; // BA6BB8: using guessed type int dword_BA6BB8; // BA6BBC: using guessed type int dword_BA6BBC; //----- (00900330) -------------------------------------------------------- _DWORD *__thiscall sub_900330(_DWORD *this) { _DWORD *v1; // ST04_4 _DWORD *result; // eax v1 = this; *this = &NiTPointerListBase,SpScreenText *>::`vftable'; result = sub_88DCC0(this); *v1 = &NiTListBase,SpScreenText *>::`vftable'; return result; } // A42334: using guessed type void *NiTPointerListBase,SpScreenText *>::`vftable'; // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; //----- (00900390) -------------------------------------------------------- char __thiscall sub_900390(int this, LPCSTR pszFaceName, int a3, int cWidth, int cWeight, DWORD bItalic, DWORD iCharSet, DWORD iOutPrecision, DWORD iQuality, DWORD iPitchAndFamily, int a11, int a12, int a13) { char result; // al int v14; // [esp+0h] [ebp-44h] BITMAPINFO bmi; // [esp+4h] [ebp-40h] DWORD v16; // [esp+34h] [ebp-10h] int cHeight; // [esp+38h] [ebp-Ch] struct tagSIZE sz; // [esp+3Ch] [ebp-8h] v14 = this; *(float *)(this + 216) = 1.0; *(_DWORD *)(this + 228) = a12; *(_DWORD *)(this + 192) = CreateCompatibleDC(0); SetMapMode(*(HDC *)(v14 + 192), 1); if ( !*(_DWORD *)(v14 + 192) ) return 0; cHeight = a3; *(_DWORD *)(v14 + 184) = CreateFontA( a3, cWidth, 0, 0, cWeight, bItalic, 0, 0, iCharSet, iOutPrecision, 0, iQuality, iPitchAndFamily, pszFaceName); if ( !*(_DWORD *)(v14 + 184) ) return 0; *(_DWORD *)(v14 + 188) = SelectObject(*(HDC *)(v14 + 192), *(HGDIOBJ *)(v14 + 184)); if ( GetTextExtentPointA(*(HDC *)(v14 + 192), word_9AC794, 1, &sz) ) { *(_DWORD *)(v14 + 220) = sz.cy; *(_DWORD *)(v14 + 224) = sz.cy + 2 * a11; *(_DWORD *)(v14 + 212) = sz.cx; *(_DWORD *)(v14 + 208) = *(_DWORD *)(v14 + 224) + 16; bmi.bmiHeader.biWidth = 0; bmi.bmiHeader.biHeight = 0; *(_DWORD *)&bmi.bmiHeader.biPlanes = 0; bmi.bmiHeader.biCompression = 0; bmi.bmiHeader.biSizeImage = 0; bmi.bmiHeader.biXPelsPerMeter = 0; bmi.bmiHeader.biYPelsPerMeter = 0; bmi.bmiHeader.biClrUsed = 0; bmi.bmiHeader.biClrImportant = 0; bmi.bmiHeader.biSize = 40; bmi.bmiHeader.biWidth = *(_DWORD *)(v14 + 208); bmi.bmiHeader.biHeight = -*(_DWORD *)(v14 + 208); bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = 0; bmi.bmiHeader.biBitCount = 32; *(_DWORD *)(v14 + 196) = CreateDIBSection(*(HDC *)(v14 + 192), &bmi, 0, (void **)(v14 + 204), 0, 0); if ( *(_DWORD *)(v14 + 196) ) { if ( sub_8FF3C0((_DWORD *)(v14 + 8), a13, a12) ) { *(_DWORD *)(v14 + 200) = SelectObject(*(HDC *)(v14 + 192), *(HGDIOBJ *)(v14 + 196)); SetTextColor(*(HDC *)(v14 + 192), 0xFFFFFFu); SetBkColor(*(HDC *)(v14 + 192), 0); SetTextAlign(*(HDC *)(v14 + 192), 0); *(_DWORD *)(v14 + 232) = a13; *(_DWORD *)(v14 + 228) = a12; *(_DWORD *)(v14 + 252) = a11; result = 1; } else { result = 0; } } else { result = 0; } } else { v16 = GetLastError(); result = 0; } return result; } //----- (00900630) -------------------------------------------------------- int __thiscall sub_900630(_DWORD *this, LPCSTR lpString, int a3) { int result; // eax _DWORD *v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] v4 = this; v5 = sub_8FFF30(this + 2, lpString, (int)(this + 48), this[63]); if ( v5 ) return v5; if ( byte_BA6BB0 ) { if ( v4[58] < 0x20u ) ++v4[58]; result = 0; } else { sub_8FFDB0(v4 + 2); sub_8FF3C0(v4 + 2, v4[58], v4[57]); byte_BA6BB0 = 1; sub_902730(v4); byte_BA6BB0 = 0; result = 0; } return result; } // BA6BB0: using guessed type char byte_BA6BB0; //----- (009006F0) -------------------------------------------------------- int __cdecl sub_9006F0(int a1, int a2, int a3) { if ( a1 == 2 ) return (a2 - a3) / 2; if ( a1 == 3 ) return a2 - a3; return 0; } //----- (00900720) -------------------------------------------------------- char *__thiscall sub_900720(_DWORD *this, char *a2, int a3, char a4) { _DWORD *v5; // [esp+0h] [ebp-28h] unsigned __int8 *v6; // [esp+8h] [ebp-20h] CHAR String; // [esp+Ch] [ebp-1Ch] char v8; // [esp+Dh] [ebp-1Bh] char v9; // [esp+Eh] [ebp-1Ah] int v10; // [esp+10h] [ebp-18h] char *v11; // [esp+14h] [ebp-14h] char *v12; // [esp+18h] [ebp-10h] char *v13; // [esp+1Ch] [ebp-Ch] int v14; // [esp+20h] [ebp-8h] int v15; // [esp+24h] [ebp-4h] v5 = this; if ( !a2 ) return 0; if ( !*a2 ) return 0; v12 = a2; v15 = 0; v14 = 0; v10 = sub_9026A0(this); v11 = a2; while ( *v11 ) { v13 = v11; String = *v11++; if ( String == 123 && a4 ) { while ( String != 44 || ++dword_BA6BB4 != 2 ) { v13 = v11; String = *v11++; } dword_BA6BB4 = 0; v13 = v11; String = *v11++; } if ( String != 32 && String != 9 ) { if ( String != 13 ) { if ( String == 10 ) return v11; if ( IsDBCSLeadByte(String) ) { v8 = *v11++; v9 = 0; } else { v8 = 0; } v6 = (unsigned __int8 *)sub_900630(v5, &String, (int)(v5 + 48)); if ( !v6 ) return 0; if ( v6[6] >= v10 ) return 0; if ( v14 + *v6 > a3 ) { while ( v12 != v11 ) { if ( v15 == 25 ) return v11; String = *v11; if ( String == 32 ) { if ( String == 32 ) return v11; } else { if ( !sub_900630(v5, &String, (int)(v5 + 48)) ) return 0; v14 -= *v6; --v11; ++v15; } } } v14 += *v6; } } else { v14 += v5[53]; if ( v14 > a3 ) return v11; if ( !sub_905290(v5, v11, a3 - v14) ) return v11; } } return v11; } // BA6BB4: using guessed type int dword_BA6BB4; //----- (00900990) -------------------------------------------------------- int __thiscall sub_900990(_DWORD *this, int a2, signed int a3, _DWORD *a4, char *a5, int *a6, char a7, char a8, int a9, int a10, char a11, int a12) { int *v13; // ST1CC_4 int *v14; // ST1C8_4 int *v15; // ST1C4_4 int *v16; // ST148_4 float v17; // ST218_4 float v18; // ST210_4 float v19; // ST208_4 float v20; // STCC_4 int *v21; // STC4_4 float v22; // STB0_4 float v23; // STB4_4 float v24; // ST18_4 float v25; // ST14_4 _DWORD *v26; // [esp+28h] [ebp-4ECh] _DWORD *v27; // [esp+2Ch] [ebp-4E8h] void *v28; // [esp+30h] [ebp-4E4h] void **v29; // [esp+34h] [ebp-4E0h] _DWORD *v30; // [esp+38h] [ebp-4DCh] _DWORD *v31; // [esp+84h] [ebp-490h] signed int v32; // [esp+D4h] [ebp-440h] int *i; // [esp+D8h] [ebp-43Ch] volatile LONG **v34; // [esp+DCh] [ebp-438h] volatile LONG *v35; // [esp+208h] [ebp-30Ch] void *v36; // [esp+20Ch] [ebp-308h] _DWORD *v37; // [esp+210h] [ebp-304h] void *v38; // [esp+214h] [ebp-300h] _DWORD *v39; // [esp+218h] [ebp-2FCh] void *v40; // [esp+21Ch] [ebp-2F8h] int v41; // [esp+220h] [ebp-2F4h] void *v42; // [esp+224h] [ebp-2F0h] _DWORD *v43; // [esp+228h] [ebp-2ECh] void *v44; // [esp+22Ch] [ebp-2E8h] void **v45; // [esp+230h] [ebp-2E4h] int v46; // [esp+234h] [ebp-2E0h] int v47; // [esp+238h] [ebp-2DCh] int v48; // [esp+240h] [ebp-2D4h] int v49; // [esp+244h] [ebp-2D0h] int v50; // [esp+248h] [ebp-2CCh] int v51; // [esp+24Ch] [ebp-2C8h] int v52; // [esp+250h] [ebp-2C4h] int v53; // [esp+254h] [ebp-2C0h] int v54; // [esp+258h] [ebp-2BCh] int v55; // [esp+25Ch] [ebp-2B8h] _DWORD *v56; // [esp+268h] [ebp-2ACh] char v57[2]; // [esp+26Ch] [ebp-2A8h] char v58; // [esp+26Eh] [ebp-2A6h] char v59; // [esp+270h] [ebp-2A4h] char v60; // [esp+271h] [ebp-2A3h] char v61; // [esp+273h] [ebp-2A1h] char v62; // [esp+275h] [ebp-29Fh] char *v63; // [esp+2F4h] [ebp-220h] char *v64; // [esp+2F8h] [ebp-21Ch] volatile LONG *v65; // [esp+2FCh] [ebp-218h] int v66; // [esp+300h] [ebp-214h] float v67; // [esp+304h] [ebp-210h] int v68; // [esp+308h] [ebp-20Ch] float v69; // [esp+30Ch] [ebp-208h] int v70; // [esp+310h] [ebp-204h] float v71; // [esp+314h] [ebp-200h] int v72; // [esp+318h] [ebp-1FCh] float v73; // [esp+31Ch] [ebp-1F8h] int v74; // [esp+320h] [ebp-1F4h] char *v75; // [esp+324h] [ebp-1F0h] char v76; // [esp+328h] [ebp-1ECh] char v77; // [esp+329h] [ebp-1EBh] char v78; // [esp+428h] [ebp-ECh] char v79; // [esp+429h] [ebp-EBh] char *v80; // [esp+4B0h] [ebp-64h] char *v81; // [esp+4B4h] [ebp-60h] CHAR String; // [esp+4B8h] [ebp-5Ch] char v83; // [esp+4B9h] [ebp-5Bh] char v84; // [esp+4BAh] [ebp-5Ah] int v85; // [esp+4BCh] [ebp-58h] char v86; // [esp+4C3h] [ebp-51h] char *v87; // [esp+4C4h] [ebp-50h] float *v88; // [esp+4C8h] [ebp-4Ch] int v89; // [esp+4CCh] [ebp-48h] float v90; // [esp+4D0h] [ebp-44h] float v91; // [esp+4D4h] [ebp-40h] float v92; // [esp+4D8h] [ebp-3Ch] int *v93; // [esp+4DCh] [ebp-38h] int v94; // [esp+4E0h] [ebp-34h] void **v95; // [esp+4E4h] [ebp-30h] int *v96; // [esp+4E8h] [ebp-2Ch] int v97; // [esp+4ECh] [ebp-28h] unsigned int v98; // [esp+4F0h] [ebp-24h] int v99; // [esp+4F4h] [ebp-20h] int v100; // [esp+4F8h] [ebp-1Ch] int v101; // [esp+4FCh] [ebp-18h] int v102; // [esp+500h] [ebp-14h] int v103; // [esp+504h] [ebp-10h] int v104; // [esp+510h] [ebp-4h] v31 = this; v98 = 0; v96 = 0; v97 = 0; v95 = &NiTList::`vftable'; v104 = 0; v99 = a11 & 0xF0; v101 = a11 & 0xF; if ( !(a11 & 0xF0) ) v99 = 32; if ( !v101 ) v101 = 1; if ( !a5 ) { v95 = &NiTPointerListBase,int>::`vftable'; v104 = 1; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return 0; } v102 = 0; v85 = a4[2] - *a4; if ( (unsigned int)v85 < this[53] ) { v95 = &NiTPointerListBase,int>::`vftable'; v104 = 2; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return 1; } v87 = a5; v86 = 0; while ( *v87 ) { if ( v98 > 0x3E8 ) { v55 = 1; v95 = &NiTPointerListBase,int>::`vftable'; v104 = 3; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return v55; } String = *v87++; if ( String != 32 && String != 9 ) { if ( String != 13 ) { switch ( String ) { case 10: v52 = sub_9006F0(v101, v85, v102); sub_9056C0(&v95, &v52); v102 = 0; break; case 123: if ( *v87 == 123 || !a8 ) { v83 = 0; goto LABEL_84; } v80 = v87; v78 = 0; memset(&v79, 0, 0x7Fu); while ( *v87 == 32 ) ++v87; v81 = &v78; while ( *v87 && *v87 != 44 && v81 - &v78 < 64 ) { if ( *v87 != 32 ) *v81++ = *v87; ++v87; } *v81 = 0; if ( *v87 ) ++v87; else v83 = 0; if ( _stricmp(&v78, "color") ) { v87 = v80; goto LABEL_84; } while ( *v87 == 32 ) ++v87; v81 = &v78; while ( *v87 && *v87 != 44 && v81 - &v78 < 64 ) { if ( *v87 != 32 ) *v81++ = *v87; ++v87; } *v81 = 0; if ( *v87 ) ++v87; if ( !_stricmp(&v78, "red") ) { v86 = 1; } else if ( !_stricmp(&v78, "blue") ) { v86 = 1; } else if ( !_stricmp(&v78, "yellow") ) { v86 = 1; } else if ( !_stricmp(&v78, "lightblue") ) { v86 = 1; } else if ( !_stricmp(&v78, "lightgreen") ) { v86 = 1; } else if ( !_stricmp(&v78, "orange") ) { v86 = 1; } else if ( !_stricmp(&v78, "violet") ) { v86 = 1; } else if ( !_stricmp(&v78, "green") ) { v86 = 1; } else if ( !_stricmp(&v78, "pink") ) { v86 = 1; } else { if ( !v86 ) v87 = v80; LABEL_84: v88 = (float *)sub_900630(v31, &String, (int)(v31 + 48)); if ( !v88 ) { v51 = 2; v95 = &NiTPointerListBase,int>::`vftable'; v104 = 4; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return v51; } if ( *((unsigned __int8 *)v88 + 6) >= a3 ) { v50 = 3; v95 = &NiTPointerListBase,int>::`vftable'; v104 = 5; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return v50; } if ( v102 + *(unsigned __int8 *)v88 > v85 && a7 ) { v49 = sub_9006F0(v101, v85, v102); sub_9056C0(&v95, &v49); v102 = 0; } v102 += *(unsigned __int8 *)v88; } break; case 125: if ( !v86 || !a8 ) { v83 = 0; goto LABEL_84; } break; default: if ( IsDBCSLeadByte(String) ) { v83 = *v87++; v84 = 0; } else { v83 = 0; } goto LABEL_84; } } } else { v102 += v31[53]; if ( v102 > v85 && a7 ) { v54 = sub_9006F0(v101, v85, v102); sub_9056C0(&v95, &v54); v102 = 0; } if ( !sub_905290(v31, v87, v85 - v102) ) { if ( a7 ) { v53 = sub_9006F0(v101, v85, v102); sub_9056C0(&v95, &v53); v102 = 0; } } } } v48 = sub_9006F0(v101, v85, v102); sub_9056C0(&v95, &v48); v93 = v96; v93 = (int *)*v96; v94 = v96[2]; v100 = v94 + *a4; switch ( v99 ) { case 16: v103 = a4[1]; break; case 32: v103 = a4[1] + (signed int)(a4[3] - a4[1] - v98 * (a12 + v31[56])) / 2; break; case 48: v103 = a4[3] - v98 * (a12 + v31[56]); break; default: v95 = &NiTPointerListBase,int>::`vftable'; v104 = 6; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return 1; } v89 = *a6; v90 = *((float *)a6 + 1); v91 = *((float *)a6 + 2); v92 = *((float *)a6 + 3); v86 = 0; v87 = a5; if ( !*((_BYTE *)v31 + 256) ) goto LABEL_111; v76 = 0; memset(&v77, 0, 0xFFu); sprintf(&v76, "%s%s", v31 + 64, a5); v75 = v87; while ( *v87 ) { String = *v75++; if ( !strcmp(&String, &byte_9A8050) || String == 123 ) break; if ( String == 125 ) { v87 = &v76; a9 = 0; a10 = 0; break; } if ( IsDBCSLeadByte(String) ) { v83 = *v75++; v84 = 0; } else { v83 = 0; } } memset(v31 + 64, 0, 0x80u); LABEL_111: while ( *v87 ) { String = *v87++; switch ( String ) { case 32: case 9: v100 += v31[53]; if ( v100 > a4[2] && a7 ) { v13 = v93 + 2; v93 = (int *)*v93; v94 = *v13; v100 = v94 + *a4; v103 += a12 + v31[56]; } if ( !sub_905290(v31, v87, a4[2] - v100) && a7 ) { v14 = v93 + 2; v93 = (int *)*v93; v94 = *v14; v100 = v94 + *a4; v103 += a12 + v31[56]; } goto LABEL_111; case 13: goto LABEL_111; case 10: v15 = v93 + 2; v93 = (int *)*v93; v94 = *v15; v100 = v94 + *a4; v103 += a12 + v31[56]; goto LABEL_111; case 123: if ( *v87 != 123 && a8 ) { v63 = v87; v59 = 0; memset(&v60, 0, 0x7Fu); while ( *v87 == 32 ) ++v87; v64 = &v59; while ( *v87 && *v87 != 44 && v64 - &v59 < 64 ) { if ( *v87 != 32 ) *v64++ = *v87; ++v87; } *v64 = 0; if ( *v87 ) ++v87; else v83 = 0; if ( !_stricmp(&v59, "color") ) { while ( *v87 == 32 ) ++v87; v64 = &v59; while ( *v87 && *v87 != 44 && v64 - &v59 < 64 ) { if ( *v87 != 32 ) *v64++ = *v87; ++v87; } *v64 = 0; if ( *v87 ) ++v87; if ( !_stricmp(&v59, "red") || !_stricmp(&v59, "blue") || !_stricmp(&v59, "yellow") || !_stricmp(&v59, "lightblue") || !_stricmp(&v59, "lightgreen") || !_stricmp(&v59, "orange") || !_stricmp(&v59, "violet") || !_stricmp(&v59, "green") || !_stricmp(&v59, "pink") || v59 == 35 ) { memset(v31 + 64, 0, 0x80u); sprintf((char *)v31 + 256, "{color,%s,", &v59); } if ( !_stricmp(&v59, "red") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 1.0; v90 = 0.0; v91 = 0.0; } goto LABEL_111; } if ( !_stricmp(&v59, "blue") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 0.0; v90 = 0.0; v91 = 1.0; } goto LABEL_111; } if ( !_stricmp(&v59, "yellow") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 1.0; v90 = 1.0; v91 = 0.0; } goto LABEL_111; } if ( !_stricmp(&v59, "lightblue") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = (double)13 / 255.0; v90 = (double)194 / 255.0; v91 = (double)254 / 255.0; } goto LABEL_111; } if ( !_stricmp(&v59, "lightgreen") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = (double)64 / 255.0; v90 = (double)251 / 255.0; v91 = (double)107 / 255.0; } goto LABEL_111; } if ( !_stricmp(&v59, "orange") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 1.0; v90 = 0.5; v91 = 0.0; } goto LABEL_111; } if ( !_stricmp(&v59, "violet") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 1.0; v90 = 0.0; v91 = 1.0; } goto LABEL_111; } if ( !_stricmp(&v59, "green") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = 0.0; v90 = 1.0; v91 = 0.0; } goto LABEL_111; } if ( !_stricmp(&v59, "pink") ) { v86 = 1; if ( !a9 && !a10 ) { v92 = 1.0; *(float *)&v89 = (double)253 / 255.0; v90 = (double)32 / 255.0; v91 = (double)239 / 255.0; } goto LABEL_111; } if ( v59 == 35 ) { v86 = 1; if ( !a9 && !a10 ) { *(_WORD *)v57 = 0; v58 = 0; v92 = 1.0; strncpy(v57, &v60, 2u); *(float *)&v89 = (double)(unsigned __int8)strtoul(v57, 0, 16) / 255.0; strncpy(v57, &v61, 2u); v90 = (double)(unsigned __int8)strtoul(v57, 0, 16) / 255.0; strncpy(v57, &v62, 2u); v91 = (double)(unsigned __int8)strtoul(v57, 0, 16) / 255.0; } goto LABEL_111; } if ( !v86 ) v87 = v63; } else { v87 = v63; } } else { v83 = 0; } break; case 125: if ( v86 && a8 ) { v89 = *a6; v90 = *((float *)a6 + 1); v91 = *((float *)a6 + 2); v92 = *((float *)a6 + 3); memset(v31 + 64, 0, 0x80u); goto LABEL_111; } v83 = 0; break; default: if ( IsDBCSLeadByte(String) ) { v83 = *v87++; v84 = 0; } else { v83 = 0; } break; } v88 = (float *)sub_900630(v31, &String, (int)(v31 + 48)); if ( !v88 ) { v47 = 2; v95 = &NiTPointerListBase,int>::`vftable'; v104 = 7; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return v47; } if ( *((unsigned __int8 *)v88 + 6) >= a3 ) { v46 = 3; v95 = &NiTPointerListBase,int>::`vftable'; v104 = 8; sub_521E30(&v95); v104 = -1; v95 = &NiTListBase,int>::`vftable'; return v46; } v65 = *(volatile LONG **)(a2 + 8 * *((unsigned __int8 *)v88 + 6)); if ( !v65 ) { v44 = operator new(0xCCu); LOBYTE(v104) = 9; if ( v44 ) { v42 = operator new(0x70u); LOBYTE(v104) = 10; if ( v42 ) v30 = sub_868440(v42, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v30 = 0; v43 = v30; LOBYTE(v104) = 9; v29 = sub_906890((void **)v44, (int)v30); } else { v29 = 0; } v45 = v29; LOBYTE(v104) = 0; v65 = (volatile LONG *)v29; sub_9069B0(v29, a4); if ( !dword_BA6BBC ) { v40 = operator new(0x28u); LOBYTE(v104) = 11; if ( v40 ) { sub_85B2B0(v40); *(_DWORD *)v40 = &NiProperty::`vftable'; *(_DWORD *)v40 = &NiVertexColorProperty::`vftable'; *((_WORD *)v40 + 14) = 0; *((_DWORD *)v40 + 8) = 0; *((_DWORD *)v40 + 9) = 1; v28 = v40; } else { v28 = 0; } v41 = (int)v28; LOBYTE(v104) = 0; if ( (void *)dword_BA6BBC != v28 ) { if ( dword_BA6BBC ) sub_402270((volatile LONG *)dword_BA6BBC); dword_BA6BBC = v41; if ( v41 ) InterlockedIncrement((volatile LONG *)(dword_BA6BBC + 4)); } *(_DWORD *)(dword_BA6BBC + 32) = 1; *(_DWORD *)(dword_BA6BBC + 36) = 0; } sub_403700(v65, dword_BA6BBC); if ( !dword_BA6BB8 ) { v38 = operator new(0x20u); LOBYTE(v104) = 12; if ( v38 ) v27 = sub_40DC70(v38); else v27 = 0; v39 = v27; LOBYTE(v104) = 0; if ( (_DWORD *)dword_BA6BB8 != v27 ) { if ( dword_BA6BB8 ) sub_402270((volatile LONG *)dword_BA6BB8); dword_BA6BB8 = (int)v39; if ( v39 ) InterlockedIncrement((volatile LONG *)(dword_BA6BB8 + 4)); } *(_WORD *)(dword_BA6BB8 + 28) |= 1u; *(_WORD *)(dword_BA6BB8 + 28) &= 0xFDFFu; *(_WORD *)(dword_BA6BB8 + 28) = *(_WORD *)(dword_BA6BB8 + 28) & 0xFFE1 | 0xC; *(_WORD *)(dword_BA6BB8 + 28) = *(_WORD *)(dword_BA6BB8 + 28) & 0xFE1F | 0xE0; } sub_403700(v65, dword_BA6BB8); v56 = (_DWORD *)sub_85C050(v65, 8); if ( !v56 ) { v36 = operator new(0x44u); LOBYTE(v104) = 13; if ( v36 ) v26 = sub_863BB0(v36); else v26 = 0; v37 = v26; LOBYTE(v104) = 0; v56 = v26; } v16 = (int *)sub_8FF370(v31 + 2, (int)&v35, *((unsigned __int8 *)v88 + 6)); LOBYTE(v104) = 14; sub_42AB40(v56, *v16); LOBYTE(v104) = 0; if ( v35 ) sub_402270(v35); v56[7] = 2; sub_403700(v65, (int)v56); v34 = (volatile LONG **)(a2 + 8 * *((unsigned __int8 *)v88 + 6)); if ( *v34 != v65 ) { if ( *v34 ) sub_402270(*v34); *v34 = v65; if ( *v34 ) InterlockedIncrement(*v34 + 1); } } v32 = 4; for ( i = &v66; --v32 >= 0; i += 2 ) ; v17 = v88[3]; v66 = *((int *)v88 + 2); v67 = v17; v18 = v88[5]; v68 = *((int *)v88 + 2); v69 = v18; v19 = v88[5]; v70 = *((int *)v88 + 4); v71 = v19; v20 = v88[3]; v72 = *((int *)v88 + 4); v73 = v20; if ( v100 + *(unsigned __int8 *)v88 > a4[2] && a7 ) { v21 = v93 + 2; v93 = (int *)*v93; v94 = *v21; v100 = v94 + *a4; v103 += a12 + v31[56]; } v74 = sub_867880(*((_WORD **)v65 + 46), 4, 0, 0); if ( (signed int)*(unsigned __int16 *)(*((_DWORD *)v65 + 46) + 100) > 0 ) { v22 = (double)*(unsigned __int8 *)v88; v23 = (double)*((unsigned __int8 *)v88 + 1); v24 = (double)(a10 + v103); v25 = (double)(a9 + v100); sub_867E60(*((_DWORD *)v65 + 46), v74, v25, v24, v22, v23); sub_867680(*((_DWORD *)v65 + 46)); sub_868230(*((_DWORD *)v65 + 46), v74, 0, &v66, &v68, &v70, &v72); sub_867FF0(*((_DWORD *)v65 + 46), v74, &v89); *(_BYTE *)(a2 + 8 * *((unsigned __int8 *)v88 + 6) + 4) = 1; } v100 += *(unsigned __int8 *)v88; } v95 = &NiTPointerListBase,int>::`vftable'; v104 = 15; sub_521E30(&v95); return 0; } // 9A8B74: using guessed type void *NiProperty::`vftable'; // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; // 9F4D10: using guessed type void *NiTList::`vftable'; // BA6BB8: using guessed type int dword_BA6BB8; // BA6BBC: using guessed type int dword_BA6BBC; //----- (009026A0) -------------------------------------------------------- int __thiscall sub_9026A0(_DWORD *this) { return this[3]; } //----- (009026C0) -------------------------------------------------------- _DWORD *__thiscall sub_9026C0(_DWORD *this, int a2) { _DWORD *v2; // ST08_4 _DWORD *v3; // eax v2 = this + 59; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *, _DWORD *))(this[59] + 4))(this + 59, this); v3[2] = a2; return sub_88DD80(v2, v3); } //----- (00902700) -------------------------------------------------------- int __thiscall sub_902700(_DWORD *this, char a2) { return sub_905630(this + 59, (int *)&a2); } //----- (00902730) -------------------------------------------------------- int __thiscall sub_902730(_DWORD *this) { int result; // eax void **v2; // ST04_4 void *v3; // ST10_4 _DWORD *v4; // [esp+0h] [ebp-14h] int v5; // [esp+8h] [ebp-Ch] _DWORD *v6; // [esp+Ch] [ebp-8h] v4 = this; result = (int)this; v5 = this[60]; v6 = (_DWORD *)this[60]; while ( v6 ) { v2 = (void **)(v6 + 2); v6 = (_DWORD *)*v6; v3 = *v2; sub_907360(*v2); result = (*(int (__thiscall **)(void *, _DWORD *, void **, int))(*(_DWORD *)v3 + 140))(v3, v4, v2, v5); } return result; } //----- (00902790) -------------------------------------------------------- char __thiscall sub_902790(_DWORD *this, char *a2, int a3, _DWORD *a4, int a5, char a6, char a7, _DWORD *a8) { _DWORD *v9; // [esp+0h] [ebp-B4h] char v10; // [esp+4h] [ebp-B0h] char v11; // [esp+5h] [ebp-AFh] char *v12; // [esp+8Ch] [ebp-28h] char *v13; // [esp+90h] [ebp-24h] int v14; // [esp+94h] [ebp-20h] CHAR String; // [esp+98h] [ebp-1Ch] char v16; // [esp+99h] [ebp-1Bh] char v17; // [esp+9Ah] [ebp-1Ah] int v18; // [esp+9Ch] [ebp-18h] char v19; // [esp+A3h] [ebp-11h] char *v20; // [esp+A4h] [ebp-10h] unsigned __int8 *v21; // [esp+A8h] [ebp-Ch] int v22; // [esp+ACh] [ebp-8h] int v23; // [esp+B0h] [ebp-4h] v9 = this; v20 = a2; v22 = 0; *a4 = 0; if ( a6 ) v18 = a8[2] - *a8; else v18 = 0; v19 = 0; v23 = 0; while ( *v20 ) { if ( v22 > *a4 ) *a4 = v22; if ( a3 <= 0 ) break; if ( !v23 ) v23 = 1; String = *v20++; if ( String != 32 && String != 9 ) { switch ( String ) { case 13: --a3; break; case 10: ++v23; v22 = 0; --a3; break; case 123: if ( *v20 != 123 && a7 ) { v12 = v20; v14 = a3; v10 = 0; memset(&v11, 0, 0x7Fu); while ( *v20 == 32 && a3 > 0 ) { ++v20; --a3; } v13 = &v10; while ( *v20 && *v20 != 44 && a3 > 0 && v13 - &v10 < 128 ) { if ( *v20 != 32 ) *v13++ = *v20; ++v20; --a3; } *v13 = 0; if ( *v20 ) ++v20; else v16 = 0; if ( !_stricmp(&v10, "color") ) { while ( *v20 == 32 ) ++v20; v13 = &v10; while ( *v20 && *v20 != 44 && a3 > 0 && v13 - &v10 < 128 ) { if ( *v20 != 32 ) *v13++ = *v20; ++v20; --a3; } *v13 = 0; if ( *v20 ) ++v20; if ( !_stricmp(&v10, "red") ) { v19 = 1; } else if ( !_stricmp(&v10, "blue") ) { v19 = 1; } else if ( !_stricmp(&v10, "yellow") ) { v19 = 1; } else if ( !_stricmp(&v10, "lightblue") ) { v19 = 1; } else if ( !_stricmp(&v10, "lightgreen") ) { v19 = 1; } else if ( !_stricmp(&v10, "orange") ) { v19 = 1; } else if ( !_stricmp(&v10, "violet") ) { v19 = 1; } else if ( !_stricmp(&v10, "green") ) { v19 = 1; } else if ( !_stricmp(&v10, "pink") ) { v19 = 1; } if ( !v19 ) { v20 = v12; a3 = v14; } } else { v20 = v12; a3 = v14; } } else { v16 = 0; --a3; } LABEL_86: v21 = (unsigned __int8 *)sub_900630(v9, &String, (int)(v9 + 48)); if ( !v21 ) { *a4 = 0; a4[1] = 0; return 0; } if ( v22 + *v21 > v18 && a6 ) { ++v23; v22 = *v21; } else { v22 += *v21; } break; case 125: --a3; if ( !v19 || !a7 ) { v16 = 0; goto LABEL_86; } break; default: if ( IsDBCSLeadByte(String) ) { v16 = *v20++; v17 = 0; a3 -= 2; } else { v16 = 0; --a3; } goto LABEL_86; } } else { --a3; v22 += v9[53]; if ( v22 > v18 && a6 ) { ++v23; v22 = 0; } else if ( !sub_905290(v9, v20, v18 - v22) ) { if ( a6 ) { ++v23; v22 = 0; } } } } if ( v22 > *a4 ) *a4 = v22; a4[1] = v23 * (a5 + v9[56]); return 1; } //----- (00902D30) -------------------------------------------------------- char __thiscall sub_902D30(_DWORD *this, const char *a2, int a3, int *a4, int a5, char a6, char a7, _DWORD *a8, char a9) { _DWORD *v10; // [esp+0h] [ebp-6Ch] char v11; // [esp+4h] [ebp-68h] char *v12; // [esp+4Ch] [ebp-20h] CHAR String; // [esp+50h] [ebp-1Ch] char v14; // [esp+51h] [ebp-1Bh] char v15; // [esp+52h] [ebp-1Ah] int v16; // [esp+54h] [ebp-18h] char v17; // [esp+5Bh] [ebp-11h] char *v18; // [esp+5Ch] [ebp-10h] unsigned __int8 *v19; // [esp+60h] [ebp-Ch] int v20; // [esp+64h] [ebp-8h] int v21; // [esp+68h] [ebp-4h] v10 = this; if ( (a9 & 0xF) == 3 ) return sub_903230(this, a2, a3, a4, a5, a8); v18 = (char *)a2; v20 = 0; if ( a6 ) v16 = a8[2] - *a8; else v16 = 0; v17 = 0; v21 = 0; while ( *v18 && a3 > 0 ) { if ( !v21 ) v21 = 1; String = *v18++; if ( String != 32 && String != 9 ) { switch ( String ) { case 13: --a3; break; case 10: ++v21; v20 = 0; --a3; break; case 123: if ( *v18 != 123 && a7 ) { while ( *v18 == 32 && a3 > 0 ) { ++v18; --a3; } v12 = &v11; while ( *v18 && *v18 != 44 && a3 > 0 && v12 - &v11 < 64 ) { if ( *v18 != 32 ) *v12++ = *v18; ++v18; --a3; } *v12 = 0; ++v18; if ( !_stricmp(&v11, "color") ) { while ( *v18 == 32 ) ++v18; v12 = &v11; while ( *v18 != 44 && a3 > 0 && v12 - &v11 < 64 ) { if ( *v18 != 32 ) *v12++ = *v18; ++v18; --a3; } *v12 = 0; ++v18; if ( !_stricmp(&v11, "red") ) { v17 = 1; } else if ( !_stricmp(&v11, "blue") ) { v17 = 1; } else if ( !_stricmp(&v11, "yellow") ) { v17 = 1; } else if ( !_stricmp(&v11, "lightblue") ) { v17 = 1; } else if ( !_stricmp(&v11, "lightgreen") ) { v17 = 1; } else if ( !_stricmp(&v11, "orange") ) { v17 = 1; } else if ( !_stricmp(&v11, "violet") ) { v17 = 1; } else if ( !_stricmp(&v11, "green") ) { v17 = 1; } else if ( !_stricmp(&v11, "pink") ) { v17 = 1; } } } else { v14 = 0; --a3; } LABEL_75: v19 = (unsigned __int8 *)sub_900630(v10, &String, (int)(v10 + 48)); if ( !v19 ) { *a4 = 0; a4[1] = 0; return 0; } if ( v20 + *v19 > v16 && a6 ) { ++v21; v20 = *v19; } else { v20 += *v19; } break; case 125: --a3; if ( !v17 || !a7 ) { v14 = 0; goto LABEL_75; } break; default: if ( IsDBCSLeadByte(String) ) { v14 = *v18++; v15 = 0; a3 -= 2; } else { v14 = 0; --a3; } goto LABEL_75; } } else { --a3; v20 += v10[53]; if ( v20 > v16 && a6 ) { ++v21; v20 = 0; } else if ( !sub_905290(v10, v18, v16 - v20) ) { if ( a6 ) { ++v21; v20 = 0; } } } } if ( v21 > 0 ) --v21; *a4 = v20; a4[1] = v21 * (a5 + v10[56]); return 1; } //----- (00903230) -------------------------------------------------------- char __thiscall sub_903230(_DWORD *this, const char *a2, int a3, int *a4, int a5, _DWORD *a6) { int v7; // [esp+24h] [ebp-14h] int v8; // [esp+2Ch] [ebp-Ch] unsigned int v9; // [esp+34h] [ebp-4h] *a4 = 0; a4[1] = 0; if ( !a2 || !*a2 ) return 1; if ( !a6 ) return 0; v7 = a6[2] - *a6; v9 = strlen(a2); if ( v9 == a3 ) { *a4 = v7; } else { sub_902790(this, (char *)&a2[a3], strlen(&a2[a3]), &v8, a5, 0, 0, 0); *a4 = v7 - v8; } return 1; } //----- (00903330) -------------------------------------------------------- int __thiscall sub_903330(_DWORD *this, int a2, int a3, int a4, char *a5, int a6, int a7, int a8, int a9, size_t a10, int a11, char a12, int a13, int a14, int a15, int a16) { int *v17; // ST19C_4 int *v18; // ST198_4 int *v19; // ST194_4 int *v20; // ST148_4 float v21; // ST1EC_4 float v22; // ST1E4_4 float v23; // ST1DC_4 float v24; // STE8_4 int *v25; // STE0_4 float v26; // STCC_4 float v27; // STD0_4 float v28; // ST18_4 float v29; // ST14_4 _DWORD *v30; // [esp+30h] [ebp-2C4h] _DWORD *v31; // [esp+34h] [ebp-2C0h] void *v32; // [esp+38h] [ebp-2BCh] void **v33; // [esp+3Ch] [ebp-2B8h] _DWORD *v34; // [esp+40h] [ebp-2B4h] _DWORD *v35; // [esp+A0h] [ebp-254h] signed int v36; // [esp+F0h] [ebp-204h] int *i; // [esp+F4h] [ebp-200h] volatile LONG **v38; // [esp+F8h] [ebp-1FCh] volatile LONG *v39; // [esp+1DCh] [ebp-118h] void *v40; // [esp+1E0h] [ebp-114h] _DWORD *v41; // [esp+1E4h] [ebp-110h] void *v42; // [esp+1E8h] [ebp-10Ch] _DWORD *v43; // [esp+1ECh] [ebp-108h] void *v44; // [esp+1F0h] [ebp-104h] int v45; // [esp+1F4h] [ebp-100h] void *v46; // [esp+1F8h] [ebp-FCh] _DWORD *v47; // [esp+1FCh] [ebp-F8h] void *v48; // [esp+200h] [ebp-F4h] void **v49; // [esp+204h] [ebp-F0h] int v50; // [esp+208h] [ebp-ECh] void *v51; // [esp+20Ch] [ebp-E8h] int v52; // [esp+210h] [ebp-E4h] void *v53; // [esp+214h] [ebp-E0h] void *v54; // [esp+21Ch] [ebp-D8h] int v55; // [esp+220h] [ebp-D4h] int v56; // [esp+224h] [ebp-D0h] int v57; // [esp+228h] [ebp-CCh] void *v58; // [esp+22Ch] [ebp-C8h] int v59; // [esp+230h] [ebp-C4h] void *v60; // [esp+234h] [ebp-C0h] int v61; // [esp+238h] [ebp-BCh] int v62; // [esp+23Ch] [ebp-B8h] int v63; // [esp+240h] [ebp-B4h] int v64; // [esp+244h] [ebp-B0h] void *v65; // [esp+248h] [ebp-ACh] char *v66; // [esp+24Ch] [ebp-A8h] size_t v67; // [esp+254h] [ebp-A0h] float v68; // [esp+258h] [ebp-9Ch] float v69; // [esp+25Ch] [ebp-98h] float v70; // [esp+260h] [ebp-94h] float v71; // [esp+264h] [ebp-90h] _DWORD *v72; // [esp+268h] [ebp-8Ch] volatile LONG *v73; // [esp+26Ch] [ebp-88h] int v74; // [esp+270h] [ebp-84h] int v75; // [esp+274h] [ebp-80h] float v76; // [esp+278h] [ebp-7Ch] int v77; // [esp+27Ch] [ebp-78h] float v78; // [esp+280h] [ebp-74h] int v79; // [esp+284h] [ebp-70h] float v80; // [esp+288h] [ebp-6Ch] int v81; // [esp+28Ch] [ebp-68h] float v82; // [esp+290h] [ebp-64h] int v83; // [esp+298h] [ebp-5Ch] CHAR String; // [esp+29Ch] [ebp-58h] char v85; // [esp+29Dh] [ebp-57h] char v86; // [esp+29Eh] [ebp-56h] int v87; // [esp+2A0h] [ebp-54h] char v88; // [esp+2A7h] [ebp-4Dh] char *v89; // [esp+2A8h] [ebp-4Ch] float *v90; // [esp+2ACh] [ebp-48h] int *v91; // [esp+2B0h] [ebp-44h] int v92; // [esp+2B4h] [ebp-40h] int v93; // [esp+2B8h] [ebp-3Ch] void **v94; // [esp+2BCh] [ebp-38h] int *v95; // [esp+2C0h] [ebp-34h] unsigned int v96; // [esp+2C8h] [ebp-2Ch] int v97; // [esp+2CCh] [ebp-28h] unsigned int v98; // [esp+2D0h] [ebp-24h] int v99; // [esp+2D4h] [ebp-20h] int v100; // [esp+2D8h] [ebp-1Ch] int v101; // [esp+2DCh] [ebp-18h] int v102; // [esp+2E0h] [ebp-14h] char *v103; // [esp+2E4h] [ebp-10h] int v104; // [esp+2F0h] [ebp-4h] v35 = this; if ( !a5 || !a7 ) return 0; if ( !*a5 && !*(_BYTE *)a7 ) return 0; sub_6824D0(&v94); v94 = &NiTList::`vftable'; v104 = 0; v97 = a15 & 0xF0; if ( !(a15 & 0xF0) ) v97 = 32; v100 = a15 & 0xF; if ( !(a15 & 0xF) ) v100 = 1; v101 = 0; v87 = *(_DWORD *)(a4 + 8) - *(_DWORD *)a4; if ( (unsigned int)v87 < v35[53] ) { v94 = &NiTPointerListBase,int>::`vftable'; v104 = 1; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return 1; } v93 = strlen(a5); v98 = strlen((const char *)a7); v66 = (char *)operator new[](v93 + v98 + 10); v103 = v66; *v66 = 0; if ( (signed int)a10 > v93 ) a10 = v93; if ( a10 ) { strncpy(v103, a5, a10); v103[a10] = 0; } if ( v98 ) strcat(&v103[a10], (const char *)a7); if ( a10 != v93 ) strcat(&v103[a10 + v98], &a5[a10]); v89 = v103; v88 = 0; while ( *v89 ) { if ( v96 > 0x3E8 ) { v65 = v103; operator delete[](v103); v64 = 1; v94 = &NiTPointerListBase,int>::`vftable'; v104 = 2; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return v64; } String = *v89++; if ( String != 32 && String != 9 ) { if ( String != 13 ) { if ( String == 10 ) { v61 = sub_9006F0(v100, v87, v101); sub_9056C0(&v94, &v61); v101 = 0; } else { if ( IsDBCSLeadByte(String) ) { v85 = *v89++; v86 = 0; } else { v85 = 0; } v90 = (float *)sub_900630(v35, &String, (int)(v35 + 48)); if ( !v90 ) { v60 = v103; operator delete[](v103); v59 = 2; v94 = &NiTPointerListBase,int>::`vftable'; v104 = 3; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return v59; } if ( *((unsigned __int8 *)v90 + 6) >= a3 ) { v58 = v103; operator delete[](v103); v57 = 3; v94 = &NiTPointerListBase,int>::`vftable'; v104 = 4; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return v57; } if ( v101 + *(unsigned __int8 *)v90 > v87 && a12 ) { v56 = sub_9006F0(v100, v87, v101); sub_9056C0(&v94, &v56); v101 = 0; } v101 += *(unsigned __int8 *)v90; } } } else { v101 += v35[53]; if ( v101 > v87 && a12 ) { v63 = sub_9006F0(v100, v87, v101); sub_9056C0(&v94, &v63); v101 = 0; } if ( !sub_905290(v35, v89, v87 - v101) ) { if ( a12 ) { v62 = sub_9006F0(v100, v87, v101); sub_9056C0(&v94, &v62); v101 = 0; } } } } v55 = sub_9006F0(v100, v87, v101); sub_9056C0(&v94, &v55); v91 = v95; v91 = (int *)*v95; v92 = v95[2]; v99 = v92 + *(_DWORD *)a4; switch ( v97 ) { case 16: v102 = *(_DWORD *)(a4 + 4); break; case 32: v102 = *(_DWORD *)(a4 + 4) + (signed int)(*(_DWORD *)(a4 + 12) - *(_DWORD *)(a4 + 4) - v96 * (a16 + v35[56])) / 2; break; case 48: v102 = *(_DWORD *)(a4 + 12) - v96 * (a16 + v35[56]); break; default: v54 = v103; operator delete[](v103); v94 = &NiTPointerListBase,int>::`vftable'; v104 = 5; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return 1; } v88 = 0; v89 = v103; while ( *v89 ) { v74 = v89 - v103; String = *v89++; if ( String == 32 ) { v99 += v35[53]; if ( v99 > *(_DWORD *)(a4 + 8) && a12 ) { v17 = v91 + 2; v91 = (int *)*v91; v92 = *v17; v99 = v92 + *(_DWORD *)a4; v102 += a16 + v35[56]; } if ( !sub_905290(v35, v89, *(_DWORD *)(a4 + 8) - v99) && a12 ) { v18 = v91 + 2; v91 = (int *)*v91; v92 = *v18; v99 = v92 + *(_DWORD *)a4; v102 += a16 + v35[56]; } } else if ( String != 13 ) { if ( String == 10 ) { v19 = v91 + 2; v91 = (int *)*v91; v92 = *v19; v99 = v92 + *(_DWORD *)a4; v102 += a16 + v35[56]; } else { if ( IsDBCSLeadByte(String) ) { v85 = *v89++; v86 = 0; } else { v85 = 0; } v90 = (float *)sub_900630(v35, &String, (int)(v35 + 48)); if ( !v90 ) { v53 = v103; operator delete[](v103); v52 = 2; v94 = &NiTPointerListBase,int>::`vftable'; v104 = 6; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return v52; } if ( *((unsigned __int8 *)v90 + 6) >= a3 ) { v51 = v103; operator delete[](v103); v50 = 3; v94 = &NiTPointerListBase,int>::`vftable'; v104 = 7; sub_521E30(&v94); v104 = -1; v94 = &NiTListBase,int>::`vftable'; return v50; } v73 = *(volatile LONG **)(a2 + 8 * *((unsigned __int8 *)v90 + 6)); if ( !v73 ) { v48 = operator new(0xCCu); LOBYTE(v104) = 8; if ( v48 ) { v46 = operator new(0x70u); LOBYTE(v104) = 9; if ( v46 ) v34 = sub_868440(v46, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v34 = 0; v47 = v34; LOBYTE(v104) = 8; v33 = sub_906890((void **)v48, (int)v34); } else { v33 = 0; } v49 = v33; LOBYTE(v104) = 0; v73 = (volatile LONG *)v33; sub_9069B0(v33, (_DWORD *)a4); if ( !dword_BA6BBC ) { v44 = operator new(0x28u); LOBYTE(v104) = 10; if ( v44 ) { sub_85B2B0(v44); *(_DWORD *)v44 = &NiProperty::`vftable'; *(_DWORD *)v44 = &NiVertexColorProperty::`vftable'; *((_WORD *)v44 + 14) = 0; *((_DWORD *)v44 + 8) = 0; *((_DWORD *)v44 + 9) = 1; v32 = v44; } else { v32 = 0; } v45 = (int)v32; LOBYTE(v104) = 0; if ( (void *)dword_BA6BBC != v32 ) { if ( dword_BA6BBC ) sub_402270((volatile LONG *)dword_BA6BBC); dword_BA6BBC = v45; if ( v45 ) InterlockedIncrement((volatile LONG *)(dword_BA6BBC + 4)); } *(_DWORD *)(dword_BA6BBC + 32) = 1; *(_DWORD *)(dword_BA6BBC + 36) = 0; } sub_403700(v73, dword_BA6BBC); if ( !dword_BA6BB8 ) { v42 = operator new(0x20u); LOBYTE(v104) = 11; if ( v42 ) v31 = sub_40DC70(v42); else v31 = 0; v43 = v31; LOBYTE(v104) = 0; if ( (_DWORD *)dword_BA6BB8 != v31 ) { if ( dword_BA6BB8 ) sub_402270((volatile LONG *)dword_BA6BB8); dword_BA6BB8 = (int)v43; if ( v43 ) InterlockedIncrement((volatile LONG *)(dword_BA6BB8 + 4)); } *(_WORD *)(dword_BA6BB8 + 28) |= 1u; *(_WORD *)(dword_BA6BB8 + 28) &= 0xFDFFu; *(_WORD *)(dword_BA6BB8 + 28) = *(_WORD *)(dword_BA6BB8 + 28) & 0xFFE1 | 0xC; *(_WORD *)(dword_BA6BB8 + 28) = *(_WORD *)(dword_BA6BB8 + 28) & 0xFE1F | 0xE0; } sub_403700(v73, dword_BA6BB8); v72 = (_DWORD *)sub_85C050(v73, 8); if ( !v72 ) { v40 = operator new(0x44u); LOBYTE(v104) = 12; if ( v40 ) v30 = sub_863BB0(v40); else v30 = 0; v41 = v30; LOBYTE(v104) = 0; v72 = v30; } v20 = (int *)sub_8FF370(v35 + 2, (int)&v39, *((unsigned __int8 *)v90 + 6)); LOBYTE(v104) = 13; sub_42AB40(v72, *v20); LOBYTE(v104) = 0; if ( v39 ) sub_402270(v39); v72[7] = 2; sub_403700(v73, (int)v72); v38 = (volatile LONG **)(a2 + 8 * *((unsigned __int8 *)v90 + 6)); if ( *v38 != v73 ) { if ( *v38 ) sub_402270(*v38); *v38 = v73; if ( *v38 ) InterlockedIncrement(*v38 + 1); } } v36 = 4; for ( i = &v75; --v36 >= 0; i += 2 ) ; v21 = v90[3]; v75 = *((int *)v90 + 2); v76 = v21; v22 = v90[5]; v77 = *((int *)v90 + 2); v78 = v22; v23 = v90[5]; v79 = *((int *)v90 + 4); v80 = v23; v24 = v90[3]; v81 = *((int *)v90 + 4); v82 = v24; if ( v99 + *(unsigned __int8 *)v90 > *(_DWORD *)(a4 + 8) && a12 ) { v25 = v91 + 2; v91 = (int *)*v91; v92 = *v25; v99 = v92 + *(_DWORD *)a4; v102 += a16 + v35[56]; } v83 = sub_867880(*((_WORD **)v73 + 46), 4, 0, 0); if ( (signed int)*(unsigned __int16 *)(*((_DWORD *)v73 + 46) + 100) > 0 ) { v68 = 0.0; v69 = 0.0; v70 = 0.0; v71 = 0.0; if ( v98 && v74 >= (signed int)a10 && v74 < (signed int)(v98 + a10) ) { v67 = v74 - a10; if ( *(_BYTE *)(v74 - a10 + a11) == 1 ) { v68 = *(float *)a9; v69 = *(float *)(a9 + 4); v70 = *(float *)(a9 + 8); v71 = *(float *)(a9 + 12); } else { v68 = *(float *)a8; v69 = *(float *)(a8 + 4); v70 = *(float *)(a8 + 8); v71 = *(float *)(a8 + 12); } } else { v68 = *(float *)a6; v69 = *(float *)(a6 + 4); v70 = *(float *)(a6 + 8); v71 = *(float *)(a6 + 12); } v26 = (double)*(unsigned __int8 *)v90; v27 = (double)*((unsigned __int8 *)v90 + 1); v28 = (double)(a14 + v102); v29 = (double)(a13 + v99); sub_867E60(*((_DWORD *)v73 + 46), v83, v29, v28, v26, v27); sub_867680(*((_DWORD *)v73 + 46)); sub_868230(*((_DWORD *)v73 + 46), v83, 0, &v75, &v77, &v79, &v81); sub_867FF0(*((_DWORD *)v73 + 46), v83, &v68); *(_BYTE *)(a2 + 8 * *((unsigned __int8 *)v90 + 6) + 4) = 1; } v99 += *(unsigned __int8 *)v90; } } } operator delete[](v103); v94 = &NiTPointerListBase,int>::`vftable'; v104 = 14; sub_521E30(&v94); return 0; } // 9A8B74: using guessed type void *NiProperty::`vftable'; // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; // 9F4D10: using guessed type void *NiTList::`vftable'; // BA6BB8: using guessed type int dword_BA6BB8; // BA6BBC: using guessed type int dword_BA6BBC; //----- (00904750) -------------------------------------------------------- char __thiscall sub_904750(_DWORD *this, int a2, int a3, int a4, int a5, char *a6, int a7, size_t a8, int a9, char a10, int a11, int a12, int a13, int a14) { int *v15; // ST9C_4 int *v16; // ST98_4 int *v17; // ST94_4 int *v18; // ST80_4 _DWORD *v19; // [esp+68h] [ebp-128h] int v20; // [esp+FCh] [ebp-94h] int v21; // [esp+100h] [ebp-90h] char v22; // [esp+107h] [ebp-89h] void *v23; // [esp+108h] [ebp-88h] char v24; // [esp+10Fh] [ebp-81h] void *v25; // [esp+110h] [ebp-80h] int v26; // [esp+114h] [ebp-7Ch] int v27; // [esp+118h] [ebp-78h] int v28; // [esp+11Ch] [ebp-74h] char v29; // [esp+123h] [ebp-6Dh] void *v30; // [esp+124h] [ebp-6Ch] char *v31; // [esp+128h] [ebp-68h] size_t v32; // [esp+130h] [ebp-60h] int v33; // [esp+134h] [ebp-5Ch] CHAR String; // [esp+138h] [ebp-58h] char v35; // [esp+139h] [ebp-57h] char v36; // [esp+13Ah] [ebp-56h] int v37; // [esp+13Ch] [ebp-54h] char v38; // [esp+143h] [ebp-4Dh] char *v39; // [esp+144h] [ebp-4Ch] unsigned __int8 *v40; // [esp+148h] [ebp-48h] int *v41; // [esp+14Ch] [ebp-44h] int v42; // [esp+150h] [ebp-40h] int v43; // [esp+154h] [ebp-3Ch] void **v44; // [esp+158h] [ebp-38h] int *v45; // [esp+15Ch] [ebp-34h] int v46; // [esp+160h] [ebp-30h] unsigned int v47; // [esp+164h] [ebp-2Ch] int v48; // [esp+168h] [ebp-28h] unsigned int v49; // [esp+16Ch] [ebp-24h] int v50; // [esp+170h] [ebp-20h] int v51; // [esp+174h] [ebp-1Ch] int v52; // [esp+178h] [ebp-18h] int v53; // [esp+17Ch] [ebp-14h] char *v54; // [esp+180h] [ebp-10h] int v55; // [esp+18Ch] [ebp-4h] v19 = this; *(_DWORD *)a2 = 0; *(_DWORD *)a3 = 0; if ( !a6 || !a7 ) return 0; if ( !*(_BYTE *)a7 ) return 0; v47 = 0; v45 = 0; v46 = 0; v44 = &NiTList::`vftable'; v55 = 0; v48 = a13 & 0xF0; if ( !(a13 & 0xF0) ) v48 = 32; v51 = a13 & 0xF; if ( !(a13 & 0xF) ) v51 = 1; v52 = 0; v37 = *(_DWORD *)(a5 + 8) - *(_DWORD *)a5; if ( (unsigned int)v37 < this[53] ) { v44 = &NiTPointerListBase,int>::`vftable'; v55 = 1; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return 0; } v43 = strlen(a6); v49 = strlen((const char *)a7); v31 = (char *)operator new[](v43 + v49 + 10); v54 = v31; *v31 = 0; if ( (signed int)a8 > v43 ) a8 = v43; if ( a8 ) { strncpy(v54, a6, a8); v54[a8] = 0; } if ( v49 ) strcat(&v54[a8], (const char *)a7); if ( a8 != v43 ) strcat(&v54[a8 + v49], &a6[a8]); v39 = v54; v38 = 0; while ( *v39 ) { if ( v47 > 0x3E8 ) { v30 = v54; operator delete[](v54); v29 = 0; v44 = &NiTPointerListBase,int>::`vftable'; v55 = 2; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return v29; } String = *v39++; if ( String != 32 && String != 9 ) { if ( String != 13 ) { if ( String == 10 ) { v26 = sub_9006F0(v51, v37, v52); sub_9056C0(&v44, &v26); v52 = 0; } else { if ( IsDBCSLeadByte(String) ) { v35 = *v39++; v36 = 0; } else { v35 = 0; } v40 = (unsigned __int8 *)sub_900630(v19, &String, (int)(v19 + 48)); if ( !v40 ) { v25 = v54; operator delete[](v54); v24 = 0; v44 = &NiTPointerListBase,int>::`vftable'; v55 = 3; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return v24; } if ( v40[6] >= a4 ) { v23 = v54; operator delete[](v54); v22 = 0; v44 = &NiTPointerListBase,int>::`vftable'; v55 = 4; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return v22; } if ( v52 + *v40 > v37 && a10 ) { v21 = sub_9006F0(v51, v37, v52); sub_9056C0(&v44, &v21); v52 = 0; } v52 += *v40; } } } else { v52 += v19[53]; if ( v52 > v37 && a10 ) { v28 = sub_9006F0(v51, v37, v52); sub_9056C0(&v44, &v28); v52 = 0; } if ( !sub_905290(v19, v39, v52 - v37) ) { if ( a10 ) { v27 = sub_9006F0(v51, v37, v52); sub_9056C0(&v44, &v27); v52 = 0; } } } } v20 = sub_9006F0(v51, v37, v52); sub_9056C0(&v44, &v20); v41 = v45; v41 = (int *)*v45; v42 = v45[2]; v50 = v42 + *(_DWORD *)a5; switch ( v48 ) { case 16: v53 = *(_DWORD *)(a5 + 4); break; case 32: v53 = *(_DWORD *)(a5 + 4) + (signed int)(*(_DWORD *)(a5 + 12) - *(_DWORD *)(a5 + 4) - v47 * (a14 + v19[56])) / 2; break; case 48: v53 = *(_DWORD *)(a5 + 12) - v47 * (a14 + v19[56]); break; default: operator delete[](v54); v44 = &NiTPointerListBase,int>::`vftable'; v55 = 5; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return 0; } v38 = 0; v39 = v54; while ( *v39 ) { v33 = v39 - v54; String = *v39++; if ( String == 32 ) { v50 += v19[53]; if ( v50 > *(_DWORD *)(a5 + 8) && a10 ) { v15 = v41 + 2; v41 = (int *)*v41; v42 = *v15; v50 = v42 + *(_DWORD *)a5; v53 += a14 + v19[56]; } if ( !sub_905290(v19, v39, *(_DWORD *)(a5 + 8) - v50) && a10 ) { v16 = v41 + 2; v41 = (int *)*v41; v42 = *v16; v50 = v42 + *(_DWORD *)a5; v53 += a14 + v19[56]; } } else if ( String != 13 ) { if ( String == 10 ) { v17 = v41 + 2; v41 = (int *)*v41; v42 = *v17; v50 = v42 + *(_DWORD *)a5; v53 += a14 + v19[56]; } else { if ( IsDBCSLeadByte(String) ) { v35 = *v39++; v36 = 0; } else { v35 = 0; } v40 = (unsigned __int8 *)sub_900630(v19, &String, (int)(v19 + 48)); if ( !v40 ) { operator delete[](v54); v44 = &NiTPointerListBase,int>::`vftable'; v55 = 6; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return 0; } if ( v40[6] >= a4 ) { operator delete[](v54); v44 = &NiTPointerListBase,int>::`vftable'; v55 = 7; sub_521E30(&v44); v55 = -1; v44 = &NiTListBase,int>::`vftable'; return 0; } if ( v50 + *v40 > *(_DWORD *)(a5 + 8) && a10 ) { v18 = v41 + 2; v41 = (int *)*v41; v42 = *v18; v50 = v42 + *(_DWORD *)a5; v53 += a14 + v19[56]; } if ( v49 ) { if ( v33 >= (signed int)a8 && v33 < (signed int)(v49 + a8) ) { v32 = v33 - a8; if ( *(_BYTE *)(v33 - a8 + a9) == 1 ) { *(_DWORD *)a2 = a11 + v50; *(_DWORD *)a3 = a12 + v53; break; } } } v50 += *v40; } } } operator delete[](v54); v44 = &NiTPointerListBase,int>::`vftable'; v55 = 8; sub_521E30(&v44); return 1; } // 9F4CF0: using guessed type void *NiTListBase,int>::`vftable'; // 9F4D00: using guessed type void *NiTPointerListBase,int>::`vftable'; // 9F4D10: using guessed type void *NiTList::`vftable'; //----- (00905290) -------------------------------------------------------- char __thiscall sub_905290(_DWORD *this, CHAR *a2, int a3) { unsigned __int8 *v4; // edx unsigned __int8 *v5; // edx _DWORD *v6; // [esp+0h] [ebp-1Ch] CHAR String; // [esp+Ch] [ebp-10h] char v8; // [esp+Dh] [ebp-Fh] char v9; // [esp+Eh] [ebp-Eh] char v10; // [esp+13h] [ebp-9h] int v11; // [esp+14h] [ebp-8h] int v12; // [esp+18h] [ebp-4h] v6 = this; if ( a3 < 0 ) return 1; if ( *a2 == 32 ) ++a2; v11 = 0; v10 = 0; v12 = 0; while ( *a2 ) { String = *a2++; if ( String == 32 || String == 9 ) return 1; if ( String != 13 ) { switch ( String ) { case 10: return 1; case 123: v10 = 1; goto LABEL_27; case 125: v10 = 0; v12 = 0; goto LABEL_27; } if ( IsDBCSLeadByte(String) ) { v8 = *a2++; v9 = 0; goto LABEL_27; } if ( v10 ) { if ( String != 44 ) { if ( v12 == 2 ) { v8 = 0; v4 = (unsigned __int8 *)sub_900630(v6, &String, (int)(v6 + 48)); v11 += *v4; if ( v11 > a3 ) return 0; } goto LABEL_27; } ++v12; } else { v8 = 0; LABEL_27: if ( !v10 ) { v5 = (unsigned __int8 *)sub_900630(v6, &String, (int)(v6 + 48)); v11 += *v5; if ( v11 > a3 ) return 0; } } } } return 1; } //----- (00905430) -------------------------------------------------------- _DWORD *__thiscall sub_905430(_DWORD *this, int a2) { _DWORD *v2; // ST0C_4 v2 = this; *this = &NiTMapBase,unsigned short,FontBucket *>::`vftable'; this[1] = a2; this[3] = 0; this[2] = operator new[](4 * this[1]); memset((void *)v2[2], 0, 4 * v2[1]); return v2; } // A423B4: using guessed type void *NiTMapBase,unsigned short,FontBucket *>::`vftable'; //----- (009054B0) -------------------------------------------------------- int __thiscall sub_9054B0(_DWORD *this, unsigned __int16 a2, int a3) { int result; // eax _DWORD *v4; // ST10_4 _DWORD *v5; // [esp+0h] [ebp-10h] int *v6; // [esp+4h] [ebp-Ch] int v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v5 = this; v7 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 4))(this, a2); v6 = *(int **)(v5[2] + 4 * v7); v8 = 0; while ( v6 ) { ++v8; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v5 + 8))(v5, a2, *((unsigned __int16 *)v6 + 2)) ) { (*(void (__thiscall **)(_DWORD *, int *))(*v5 + 16))(v5, v6); return (*(int (__thiscall **)(_DWORD *, int *, _DWORD, int))(*v5 + 12))(v5, v6, a2, a3); } v6 = (int *)*v6; } v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v5 + 20))(v5); (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD, int))(*v5 + 12))(v5, v4, a2, a3); *v4 = *(_DWORD *)(v5[2] + 4 * v7); *(_DWORD *)(v5[2] + 4 * v7) = v4; result = (int)v5; ++v5[3]; return result; } //----- (009055B0) -------------------------------------------------------- char __thiscall sub_9055B0(_DWORD *this, unsigned __int16 a2, _DWORD *a3) { _DWORD *v4; // [esp+0h] [ebp-Ch] int **i; // [esp+4h] [ebp-8h] v4 = this; for ( i = *(int ***)(this[2] + 4 * (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 4))(this, a2)); i; i = (int **)*i ) { if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v4 + 8))(v4, a2, *((unsigned __int16 *)i + 2)) ) { *a3 = i[2]; return 1; } } return 0; } //----- (00905630) -------------------------------------------------------- int __thiscall sub_905630(_DWORD *this, int *a2) { _DWORD *v2; // ST34_4 int v4; // [esp+0h] [ebp-40h] int v5; // [esp+28h] [ebp-18h] _DWORD *v6; // [esp+2Ch] [ebp-14h] _DWORD *v7; // [esp+38h] [ebp-8h] int v8; // [esp+3Ch] [ebp-4h] v6 = (_DWORD *)this[1]; while ( v6 ) { v7 = v6; v2 = v6 + 2; v6 = (_DWORD *)*v6; if ( *a2 == *v2 ) { v5 = (int)v7; goto LABEL_7; } } v5 = 0; LABEL_7: v8 = v5; if ( v5 ) v4 = sub_905700(this, (_DWORD **)&v8); else v4 = *a2; return v4; } //----- (009056C0) -------------------------------------------------------- _DWORD *__thiscall sub_9056C0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // ST04_4 _DWORD *v3; // eax v2 = this; v3 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*this + 4))(this); v3[2] = *a2; return sub_88DD80(v2, v3); } //----- (00905700) -------------------------------------------------------- int __thiscall sub_905700(_DWORD *this, _DWORD **a2) { int result; // eax int v3; // ST20_4 _DWORD *v4; // [esp+0h] [ebp-24h] _DWORD *v5; // [esp+14h] [ebp-10h] _DWORD *v6; // [esp+18h] [ebp-Ch] _DWORD *v7; // [esp+20h] [ebp-4h] v4 = this; v5 = *a2; if ( *a2 == (_DWORD *)this[1] ) { *a2 = (_DWORD *)*v5; result = sub_8F06D0(this); } else if ( v5 == (_DWORD *)this[2] ) { *a2 = 0; result = sub_88CF30(this); } else { v6 = (_DWORD *)v5[1]; v7 = (_DWORD *)*v5; *a2 = (_DWORD *)*v5; if ( v6 ) *v6 = v7; if ( v7 ) v7[1] = v6; v3 = v5[2]; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*this + 8))(this, v5); --v4[3]; result = v3; } return result; } //----- (009057C0) -------------------------------------------------------- _DWORD *__thiscall sub_9057C0(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiTListBase,CBucketBlock *>::`vftable'; return result; } // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (009057E0) -------------------------------------------------------- unsigned int __thiscall sub_9057E0(_DWORD *this, unsigned __int16 a2) { return (unsigned int)a2 % this[1]; } //----- (00905800) -------------------------------------------------------- bool __stdcall sub_905800(__int16 a1, __int16 a2) { return a1 == a2; } //----- (00905820) -------------------------------------------------------- int __stdcall sub_905820(int a1, __int16 a2, int a3) { int result; // eax *(_WORD *)(a1 + 4) = a2; result = a3; *(_DWORD *)(a1 + 8) = a3; return result; } //----- (00905850) -------------------------------------------------------- void __thiscall sub_905850(_DWORD *this) { _DWORD *v1; // ST08_4 v1 = this; *this = &NiTMap::`vftable'; sub_905AF0(this); *v1 = &NiTMapBase,unsigned short,FontBucket *>::`vftable'; sub_905AF0(v1); operator delete[]((void *)v1[2]); } // A42304: using guessed type void *NiTMap::`vftable'; // A423B4: using guessed type void *NiTMapBase,unsigned short,FontBucket *>::`vftable'; //----- (009058D0) -------------------------------------------------------- void __thiscall sub_9058D0(_DWORD *this) { _DWORD *v1; // ST04_4 v1 = this; *this = &NiTMapBase,unsigned short,FontBucket *>::`vftable'; sub_905AF0(this); operator delete[]((void *)v1[2]); } // A423B4: using guessed type void *NiTMapBase,unsigned short,FontBucket *>::`vftable'; //----- (00905910) -------------------------------------------------------- _DWORD *sub_905910() { _DWORD *result; // eax result = operator new(0xCu); result[2] = 0; return result; } //----- (00905940) -------------------------------------------------------- void __stdcall sub_905940(_DWORD *a1) { a1[2] = 0; operator delete(a1); } //----- (00905970) -------------------------------------------------------- _DWORD *__thiscall sub_905970(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NiTListBase,SpScreenText *>::`vftable'; return result; } // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; //----- (00905990) -------------------------------------------------------- void *__thiscall sub_905990(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &NiTListBase,CBucketBlock *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A422F4: using guessed type void *NiTListBase,CBucketBlock *>::`vftable'; //----- (009059C0) -------------------------------------------------------- void **__thiscall sub_9059C0(void **this, char a2) { void **v3; // [esp+0h] [ebp-10h] v3 = this; *this = &NiTMapBase,unsigned short,FontBucket *>::`vftable'; sub_905AF0(this); operator delete[](v3[2]); if ( a2 & 1 ) operator delete(v3); return v3; } // A423B4: using guessed type void *NiTMapBase,unsigned short,FontBucket *>::`vftable'; //----- (00905A10) -------------------------------------------------------- void *__thiscall sub_905A10(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-18h] v3 = this; sub_905850(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00905A40) -------------------------------------------------------- void *__thiscall sub_905A40(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; *this = &NiTListBase,SpScreenText *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v3; } // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; //----- (00905A70) -------------------------------------------------------- _DWORD *__thiscall sub_905A70(_DWORD *this, char a2) { _DWORD *v3; // [esp+4h] [ebp-18h] v3 = this; *this = &NiTPointerListBase,SpScreenText *>::`vftable'; sub_88DCC0(this); *v3 = &NiTListBase,SpScreenText *>::`vftable'; if ( a2 & 1 ) operator delete(v3); return v3; } // A42334: using guessed type void *NiTPointerListBase,SpScreenText *>::`vftable'; // A42344: using guessed type void *NiTListBase,SpScreenText *>::`vftable'; //----- (00905AF0) -------------------------------------------------------- _DWORD *__thiscall sub_905AF0(_DWORD *this) { int v1; // ST08_4 _DWORD *result; // eax _DWORD *v3; // [esp+0h] [ebp-Ch] unsigned int i; // [esp+8h] [ebp-4h] v3 = this; for ( i = 0; i < v3[1]; ++i ) { while ( *(_DWORD *)(v3[2] + 4 * i) ) { v1 = *(_DWORD *)(v3[2] + 4 * i); *(_DWORD *)(v3[2] + 4 * i) = **(_DWORD **)(v3[2] + 4 * i); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 16))(v3, v1); (*(void (__thiscall **)(_DWORD *, int))(*v3 + 24))(v3, v1); } } result = v3; v3[3] = 0; return result; } //----- (00905B90) -------------------------------------------------------- bool sub_905B90() { struct WSAData WSAData; // [esp+0h] [ebp-198h] return WSAStartup(0x101u, &WSAData) == 0; } //----- (00905BD0) -------------------------------------------------------- int sub_905BD0() { return WSACleanup(); } //----- (00905BE0) -------------------------------------------------------- _DWORD *__thiscall sub_905BE0(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-1Ch] _DWORD *v3; // [esp+8h] [ebp-18h] _DWORD *v4; // [esp+Ch] [ebp-14h] v3 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v3 = &PgNet::`vftable'; v3[3] = 0; v3[8196] = 0; *((_BYTE *)v3 + 65556) = 0; v3[16397] = 0; *((_BYTE *)v3 + 8) = 0; *((_BYTE *)v3 + 9) = 0; *((float *)v3 + 16400) = 0.0; *((float *)v3 + 16399) = 0.0; v4 = operator new(0x10018u); if ( v4 ) v2 = sub_911D40(v4); else v2 = 0; v3[16398] = v2; *((_BYTE *)v3 + 10) = 1; sub_9063C0(v3, 1); return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A423D4: using guessed type void *PgNet::`vftable'; //----- (00905D00) -------------------------------------------------------- void *__thiscall sub_905D00(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_905D30(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00905D30) -------------------------------------------------------- LONG __thiscall sub_905D30(_DWORD *this) { _DWORD *v2; // [esp+8h] [ebp-18h] SOCKET *v3; // [esp+10h] [ebp-10h] v2 = this; *this = &PgNet::`vftable'; v3 = (SOCKET *)this[16398]; if ( v3 ) { sub_911D80(v3); operator delete(v3); } sub_905E30(v2); *v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A423D4: using guessed type void *PgNet::`vftable'; //----- (00905DE0) -------------------------------------------------------- char *__thiscall sub_905DE0(char *this, char *a2) { char *v2; // ST0C_4 char *result; // eax v2 = this; result = strncpy(this + 65556, a2, 0x20u); v2[65587] = 0; return result; } //----- (00905E10) -------------------------------------------------------- _DWORD *__thiscall sub_905E10(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[16397] = a2; return result; } //----- (00905E30) -------------------------------------------------------- _DWORD *__thiscall sub_905E30(_DWORD *this) { _DWORD *result; // eax result = this; this[8196] = 0; return result; } //----- (00905E50) -------------------------------------------------------- char __thiscall sub_905E50(int this) { int v2; // [esp+0h] [ebp-8h] v2 = this; if ( *(_BYTE *)(this + 8) ) return 1; if ( !*(_DWORD *)(this + 65592) ) return 0; if ( *(_DWORD *)(*(_DWORD *)(this + 65592) + 4) == -1 ) sub_911F40(*(SOCKET **)(this + 65592)); *(_BYTE *)(v2 + 8) = sub_912020(*(SOCKET **)(v2 + 65592), (char *)(v2 + 65556), *(_DWORD *)(v2 + 65588)); return *(_BYTE *)(v2 + 8); } //----- (00905ED0) -------------------------------------------------------- char __thiscall sub_905ED0(int this, char a2, char a3, char a4, char a5, u_short a6) { int v7; // [esp+0h] [ebp-8h] v7 = this; if ( *(_BYTE *)(this + 8) ) return 1; if ( *(_DWORD *)(*(_DWORD *)(this + 65592) + 4) == -1 ) sub_911F40(*(SOCKET **)(this + 65592)); *(_BYTE *)(v7 + 8) = sub_912070(*(SOCKET **)(v7 + 65592), a2, a3, a4, a5, a6); return *(_BYTE *)(v7 + 8); } //----- (00905F40) -------------------------------------------------------- int __thiscall sub_905F40(int this) { int result; // eax int v2; // [esp+0h] [ebp-4h] v2 = this; result = this; *(_BYTE *)(this + 9) = 0; if ( *(_BYTE *)(this + 8) ) { sub_911DE0(*(SOCKET **)(this + 65592)); result = sub_911F40(*(SOCKET **)(v2 + 65592)); *(_BYTE *)(v2 + 8) = 0; } return result; } //----- (00905F90) -------------------------------------------------------- char __thiscall sub_905F90(int this, void *a2, size_t a3) { size_t v3; // eax int v5; // [esp+0h] [ebp-8h] v5 = this; LOBYTE(v3) = this; if ( *(_BYTE *)(this + 8) ) { LOBYTE(v3) = *(_BYTE *)(this + 11); if ( *(_BYTE *)(this + 11) ) { memcpy((void *)(this + *(_DWORD *)(this + 32784) + 32788), a2, a3); v3 = a3 + *(_DWORD *)(v5 + 32784); *(_DWORD *)(v5 + 32784) = v3; } } return v3; } //----- (00906000) -------------------------------------------------------- char __thiscall sub_906000(int this, void *a2, size_t a3) { char result; // al int v4; // [esp+0h] [ebp-8h] v4 = this; result = this; if ( *(_BYTE *)(this + 8) ) { result = *(_BYTE *)(this + 11); if ( *(_BYTE *)(this + 11) ) { if ( a3 ) { memcpy((void *)(this + *(_DWORD *)(this + 32784) + 32788), a2, a3); *(_DWORD *)(v4 + 32784) += a3; } sub_9123E0(*(_DWORD **)(v4 + 65592), (void *)(v4 + 32788), *(_DWORD *)(v4 + 32784)); result = v4; *(_DWORD *)(v4 + 32784) = 0; } } return result; } //----- (009060A0) -------------------------------------------------------- char __thiscall sub_9060A0(int this) { int v2; // [esp+0h] [ebp-8h] v2 = this; *(_DWORD *)(this + 32784) = 0; if ( !*(_BYTE *)(this + 8) ) return 1; if ( !*(_BYTE *)(this + 11) ) return 1; if ( !sub_912370(*(_DWORD *)(this + 65592)) ) return 1; sub_911DE0(*(SOCKET **)(v2 + 65592)); *(_BYTE *)(v2 + 9) = 1; *(_BYTE *)(v2 + 8) = 0; return 0; } //----- (00906120) -------------------------------------------------------- _BYTE *__thiscall sub_906120(_BYTE *this, int a2, unsigned int a3) { _BYTE *result; // eax int v4; // [esp+0h] [ebp-20h] unsigned __int16 v5; // [esp+4h] [ebp-1Ch] _BYTE *i; // [esp+1Ch] [ebp-4h] v4 = (int)this; result = this; if ( this[8] ) { for ( i = 0; ; ++i ) { result = i; if ( (unsigned int)i >= a3 || !*(_BYTE *)(v4 + 10) ) break; sub_9062B0(v4); if ( *(_DWORD *)(v4 + 12) > 0 ) { v5 = *(_WORD *)(v4 + 16); *(_DWORD *)(v4 + 12) -= 2; if ( !(*(unsigned __int8 (__thiscall **)(int, int, int, _DWORD, int))(*(_DWORD *)v4 + 24))( v4, v5 >> 10, v5 & 0x3FF, *(_DWORD *)(v4 + 12), v4 + 18) ) { if ( a2 ) (*(void (__thiscall **)(int, int, int, _DWORD, int))(*(_DWORD *)a2 + 52))( a2, v5 >> 10, v5 & 0x3FF, *(_DWORD *)(v4 + 12), v4 + 18); } *(_DWORD *)(v4 + 12) = 0; } } } return result; } //----- (00906240) -------------------------------------------------------- _BYTE *__thiscall sub_906240(_BYTE *this) { _BYTE *result; // eax result = this; this[10] = 0; return result; } //----- (00906260) -------------------------------------------------------- _BYTE *__thiscall sub_906260(_BYTE *this) { _BYTE *result; // eax result = this; this[10] = 1; return result; } //----- (00906280) -------------------------------------------------------- float *__thiscall sub_906280(float *this, float a2) { float *result; // eax result = this; this[16399] = a2 - this[16400]; this[16400] = a2; return result; } //----- (009062B0) -------------------------------------------------------- int __thiscall sub_9062B0(int this) { int result; // eax int v2; // [esp+0h] [ebp-4h] v2 = this; if ( *(_BYTE *)(this + 8) ) { *(_DWORD *)(this + 12) = sub_912670(*(SOCKET **)(this + 65592), (void *)(this + 16)); if ( *(_DWORD *)(v2 + 12) == -1 ) { *(_BYTE *)(v2 + 9) = 1; (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 28))(v2); *(_BYTE *)(v2 + 8) = 0; } result = *(_DWORD *)(v2 + 12); } else { *(_DWORD *)(this + 12) = 0; result = 0; } return result; } //----- (00906320) -------------------------------------------------------- char __stdcall sub_906320(int a1, int a2, int a3, int a4) { return 0; } //----- (00906340) -------------------------------------------------------- int __thiscall sub_906340(_DWORD *this) { int result; // eax if ( this[16398] ) result = *(_DWORD *)(this[16398] + 65552); else result = 0; return result; } //----- (00906380) -------------------------------------------------------- int __thiscall sub_906380(_DWORD *this) { int result; // eax if ( this[16398] ) result = *(_DWORD *)(this[16398] + 65556); else result = 0; return result; } //----- (009063C0) -------------------------------------------------------- _BYTE *__thiscall sub_9063C0(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[11] = a2; return result; } //----- (009063E0) -------------------------------------------------------- _DWORD *__thiscall sub_9063E0(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8FFFC0(this); *v1 = &PgFont::`vftable'; return v1; } // A423F8: using guessed type void *PgFont::`vftable'; //----- (00906400) -------------------------------------------------------- void *__thiscall sub_906400(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_906430(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00906430) -------------------------------------------------------- LONG __thiscall sub_906430(_DWORD *this) { *this = &PgFont::`vftable'; return sub_900160(this); } // A423F8: using guessed type void *PgFont::`vftable'; //----- (00906450) -------------------------------------------------------- char __thiscall sub_906450(_DWORD *this, const char *a2, int a3, int *a4, int a5, char a6, char a7, _DWORD *a8, char a9) { return sub_902D30(this, a2, a3, a4, a5, a6, a7, a8, a9); } //----- (00906490) -------------------------------------------------------- _BYTE *__thiscall sub_906490(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[200] = a2; return result; } //----- (009064B0) -------------------------------------------------------- int __thiscall sub_9064B0(int this, int a2) { int result; // eax int *v3; // eax int *v4; // eax int *v5; // eax int *v6; // eax float *v7; // [esp+18h] [ebp-114h] bool v8; // [esp+1Eh] [ebp-10Eh] bool v9; // [esp+1Fh] [ebp-10Dh] char v10; // [esp+50h] [ebp-DCh] char v11; // [esp+5Ch] [ebp-D0h] char v12; // [esp+68h] [ebp-C4h] int v13; // [esp+74h] [ebp-B8h] int v14; // [esp+78h] [ebp-B4h] int v15; // [esp+7Ch] [ebp-B0h] char v16; // [esp+80h] [ebp-ACh] float v17; // [esp+88h] [ebp-A4h] float v18; // [esp+8Ch] [ebp-A0h] int v19; // [esp+9Ch] [ebp-90h] int v20; // [esp+A0h] [ebp-8Ch] int v21; // [esp+A4h] [ebp-88h] int v22; // [esp+A8h] [ebp-84h] int v23; // [esp+ACh] [ebp-80h] float v24; // [esp+B0h] [ebp-7Ch] float v25; // [esp+B4h] [ebp-78h] float v26; // [esp+B8h] [ebp-74h] float v27; // [esp+BCh] [ebp-70h] float v28; // [esp+C0h] [ebp-6Ch] float v29; // [esp+C4h] [ebp-68h] float v30; // [esp+C8h] [ebp-64h] float v31; // [esp+CCh] [ebp-60h] float v32; // [esp+D0h] [ebp-5Ch] float v33; // [esp+D4h] [ebp-58h] int v34; // [esp+D8h] [ebp-54h] float v35; // [esp+DCh] [ebp-50h] float v36; // [esp+E0h] [ebp-4Ch] float v37; // [esp+E4h] [ebp-48h] float v38; // [esp+E8h] [ebp-44h] float v39; // [esp+ECh] [ebp-40h] float v40; // [esp+F0h] [ebp-3Ch] float v41; // [esp+F4h] [ebp-38h] float v42; // [esp+F8h] [ebp-34h] char v43; // [esp+FCh] [ebp-30h] int v44; // [esp+100h] [ebp-2Ch] int v45; // [esp+104h] [ebp-28h] int v46; // [esp+108h] [ebp-24h] int v47; // [esp+10Ch] [ebp-20h] int v48; // [esp+114h] [ebp-18h] int v49; // [esp+118h] [ebp-14h] int v50; // [esp+11Ch] [ebp-10h] int v51; // [esp+120h] [ebp-Ch] int v52; // [esp+124h] [ebp-8h] int v53; // [esp+128h] [ebp-4h] v7 = (float *)this; if ( !*(_BYTE *)(this + 200) || !*(_DWORD *)(this + 196) ) return sub_866F40((_DWORD *)this, a2); sub_86B1D0(&v16, 0); v28 = 0.0; v29 = 0.0; v30 = 0.0; v31 = 0.0; result = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 108))(a2); v22 = result; if ( result ) { v35 = (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v22 + 60))(v22, 0); v36 = (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v22 + 64))(v22, 0); v36 = v36 + 2.0; result = sub_907690(); v23 = result; if ( result ) { v19 = *(_DWORD *)(v23 + 140); v20 = *(_DWORD *)(v23 + 144); v21 = *(_DWORD *)(v23 + 148); v3 = (int *)sub_4A38F0((float *)v23, (float *)&v12); v13 = *v3; v14 = v3[1]; v15 = v3[2]; v4 = (int *)sub_694490((float *)v23, (float *)&v11); v51 = *v4; v52 = v4[1]; v53 = v4[2]; v5 = (int *)sub_6944B0((float *)v23, (float *)&v10); v48 = *v5; v49 = v5[1]; v50 = v5[2]; qmemcpy(&v16, (const void *)(v23 + 240), 0x1Cu); v28 = *(float *)(v23 + 276); v29 = *(float *)(v23 + 280); v30 = *(float *)(v23 + 284); v31 = *(float *)(v23 + 288); v32 = v7[35]; v33 = v7[36]; v34 = *((_DWORD *)v7 + 37); v6 = (int *)*((_DWORD *)v7 + 49); v44 = *v6; v45 = v6[1]; v46 = v6[2]; v47 = v6[3]; v44 += (signed int)v32; v46 += (signed int)v32; v45 += (signed int)(v33 + v36); v47 += (signed int)(v33 + v36); sub_86B1D0(&v37, 0); v43 = 1; v42 = 1000.0; v41 = 1.0; v37 = (double)v44 + 0.5; v38 = (double)v46 + 0.5; v39 = v17; v40 = v18; v24 = (double)v44 / v35; v25 = (double)v46 / v35; v26 = v30; v27 = v31; if ( *(_DWORD *)(a2 + 116) == 1 || *(_DWORD *)(a2 + 120) == 1 ) v9 = *(_BYTE *)(a2 + 128) == 1; else v9 = 0; if ( v9 ) (*(void (__thiscall **)(int, int *, int *, int *, int *, float *, float *))(*(_DWORD *)a2 + 280))( a2, &v19, &v13, &v51, &v48, &v37, &v24); sub_866F40(v7, a2); if ( *(_DWORD *)(a2 + 116) == 1 || (result = a2, *(_DWORD *)(a2 + 120) == 1) ) { result = *(unsigned __int8 *)(a2 + 128); v8 = result == 1; } else { v8 = 0; } if ( v8 ) result = (*(int (__thiscall **)(int, int *, int *, int *, int *, char *, float *))(*(_DWORD *)a2 + 280))( a2, &v19, &v13, &v51, &v48, &v16, &v28); } } return result; } //----- (00906890) -------------------------------------------------------- void **__thiscall sub_906890(void **this, int a2) { void **v2; // ST08_4 int v4; // [esp+8h] [ebp-20h] int v5; // [esp+Ch] [ebp-1Ch] int v6; // [esp+10h] [ebp-18h] int v7; // [esp+14h] [ebp-14h] int v8; // [esp+24h] [ebp-4h] v2 = this; sub_868C00(this, a2); v8 = 0; *v2 = &SpScreenGeometryClip::`vftable'; v2[49] = 0; v4 = 0; v5 = 0; v6 = 1024; v7 = 768; sub_9069B0(v2, &v4); *((_BYTE *)v2 + 200) = 0; return v2; } // A42404: using guessed type void *SpScreenGeometryClip::`vftable'; //----- (00906940) -------------------------------------------------------- void *__thiscall sub_906940(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_906970(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00906970) -------------------------------------------------------- LONG __thiscall sub_906970(void *this) { _DWORD *v1; // ST04_4 v1 = this; *(_DWORD *)this = &SpScreenGeometryClip::`vftable'; operator delete(*((void **)this + 49)); return sub_868B50(v1); } // A42404: using guessed type void *SpScreenGeometryClip::`vftable'; //----- (009069B0) -------------------------------------------------------- void __thiscall sub_9069B0(void **this, _DWORD *a2) { _DWORD *v2; // edx void **v3; // [esp+0h] [ebp-Ch] v3 = this; if ( a2 ) { if ( !this[49] ) this[49] = operator new(0x10u); v2 = v3[49]; *v2 = *a2; v2[1] = a2[1]; v2[2] = a2[2]; v2[3] = a2[3]; } else { operator delete(this[49]); } } //----- (00906A30) -------------------------------------------------------- _DWORD *__thiscall sub_906A30(_DWORD *this, const char *a2) { float *v2; // ST34_4 int v3; // edx _DWORD *v5; // [esp+4h] [ebp-44h] volatile LONG **v6; // [esp+8h] [ebp-40h] v5 = this; sub_85A1C0(this, 0); *v5 = &SpScreenText::`vftable'; v5[58] = 0; if ( v5[58] ) InterlockedIncrement((volatile LONG *)(v5[58] + 4)); v2 = (float *)(v5 + 66); *((float *)v5 + 66) = 0.0; v2[1] = 0.0; v2[2] = 0.0; v2[3] = 0.0; v5[72] = 0; v3 = (int)(v5 + 72); *(_DWORD *)(v3 + 4) = 0; *(_DWORD *)(v3 + 8) = 0; sub_907890((char **)v5, a2); v6 = (volatile LONG **)(v5 + 58); if ( v5[58] ) { if ( *v6 ) sub_402270(*v6); *v6 = 0; if ( *v6 ) InterlockedIncrement(*v6 + 1); } v5[63] = 0; v5[64] = 0; v5[59] = 0; v5[60] = 0; v5[62] = 1200; v5[61] = 1600; *((_BYTE *)v5 + 286) = 0; *((_BYTE *)v5 + 300) = 0; *((_BYTE *)v5 + 284) = 0; *((_BYTE *)v5 + 285) = 0; v5[76] = 0; if ( v5[70] != 17 ) { v5[70] = 17; *((_BYTE *)v5 + 300) = 1; } return v5; } // A42494: using guessed type void *SpScreenText::`vftable'; //----- (00906C20) -------------------------------------------------------- void *__thiscall sub_906C20(_DWORD **this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_906C50(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00906C50) -------------------------------------------------------- LONG __thiscall sub_906C50(_DWORD **this) { _DWORD *v2; // [esp+8h] [ebp-44h] char *v3; // [esp+3Ch] [ebp-10h] v2 = this; *this = &SpScreenText::`vftable'; if ( this[58] ) sub_902700(this[58], (char)this); v3 = (char *)v2[63]; if ( v3 ) sub_906D40(v3, 3); operator delete[]((void *)v2[72]); if ( v2[58] ) sub_402270((volatile LONG *)v2[58]); return sub_85A210(v2); } // A42494: using guessed type void *SpScreenText::`vftable'; //----- (00906D40) -------------------------------------------------------- int __thiscall sub_906D40(char *this, char a2) { int result; // eax char *v3; // [esp+0h] [ebp-18h] v3 = this; if ( a2 & 2 ) { `eh vector destructor iterator'(this, 8u, *((_DWORD *)this - 1), sub_9077F0); if ( a2 & 1 ) operator delete[](v3 - 4); result = (int)(v3 - 4); } else { sub_9077F0(this); if ( a2 & 1 ) operator delete(v3); result = (int)v3; } return result; } //----- (00906DB0) -------------------------------------------------------- void __thiscall sub_906DB0(float *this, float a2, char a3) { float *v3; // [esp+8h] [ebp-4h] v3 = this; if ( *((_BYTE *)this + 300) && !((_WORD)this[7] & 1) ) { (*(void (__thiscall **)(float *))(*(_DWORD *)this + 140))(this); *((_BYTE *)v3 + 300) = 0; } sub_859510(v3, a2, (unsigned __int8)a3); } //----- (00906E20) -------------------------------------------------------- void __thiscall sub_906E20(_DWORD *this) { _DWORD *v1; // [esp+0h] [ebp-60h] volatile LONG *v2; // [esp+40h] [ebp-20h] int v3; // [esp+44h] [ebp-1Ch] float v4; // [esp+48h] [ebp-18h] float v5; // [esp+4Ch] [ebp-14h] float v6; // [esp+50h] [ebp-10h] float v7; // [esp+54h] [ebp-Ch] int i; // [esp+58h] [ebp-8h] int v9; // [esp+5Ch] [ebp-4h] v1 = this; for ( i = 0; i < v1[64]; ++i ) { if ( *(_BYTE *)(v1[63] + 8 * i + 4) ) { sub_867D90(*(_DWORD *)(*(_DWORD *)(v1[63] + 8 * i) + 184)); (*(void (__thiscall **)(_DWORD *, volatile LONG **, _DWORD))(*v1 + 120))(v1, &v2, *(_DWORD *)(v1[63] + 8 * i)); if ( v2 ) sub_402270(v2); *(_BYTE *)(v1[63] + 8 * i + 4) = 0; } } if ( v1[74] > 0 ) { v9 = 0; if ( v1[65] ) { v7 = 0.0; v4 = 0.0; v5 = 0.0; v6 = 0.0; v7 = *((float *)v1 + 69); v9 = sub_900990( (_DWORD *)v1[58], v1[63], v1[64], v1 + 59, (char *)v1[72], (int *)&v4, *((_BYTE *)v1 + 284), *((_BYTE *)v1 + 285), v1[65], v1[65], v1[70], v1[76]); } if ( !v9 ) { v9 = sub_900990( (_DWORD *)v1[58], v1[63], v1[64], v1 + 59, (char *)v1[72], v1 + 66, *((_BYTE *)v1 + 284), *((_BYTE *)v1 + 285), 0, 0, v1[70], v1[76]); if ( !v9 ) { for ( i = 0; i < v1[64]; ++i ) { if ( *(_BYTE *)(v1[63] + 8 * i + 4) && *(_DWORD *)(v1[63] + 8 * i) ) { v3 = *(_DWORD *)(*(_DWORD *)(v1[63] + 8 * i) + 184); *(_WORD *)(v3 + 50) |= 9u; sub_906490(*(_BYTE **)(v1[63] + 8 * i), *((_BYTE *)v1 + 286)); sub_85A860(v1, *(_DWORD *)(v1[63] + 8 * i), 0); sub_85C4D0(v1); } } } } } } //----- (00907140) -------------------------------------------------------- void __thiscall sub_907140(int this, float *a2) { if ( *(float *)(this + 264) != *a2 || *(float *)(this + 268) != a2[1] || *(float *)(this + 272) != a2[2] ) { *(float *)(this + 264) = *a2; *(float *)(this + 268) = a2[1]; *(float *)(this + 272) = a2[2]; *(_BYTE *)(this + 300) = 1; } } //----- (009071D0) -------------------------------------------------------- float *__thiscall sub_9071D0(float *this, float *a2) { float v2; // ST08_4 float v3; // ST0C_4 v2 = this[67]; v3 = this[68]; *a2 = this[66]; a2[1] = v2; a2[2] = v3; return a2; } //----- (00907230) -------------------------------------------------------- void __thiscall sub_907230(int this, float a2) { if ( a2 != *(float *)(this + 276) ) { *(float *)(this + 276) = a2; *(_BYTE *)(this + 300) = 1; } } //----- (00907270) -------------------------------------------------------- double __thiscall sub_907270(float *this) { return this[69]; } //----- (00907290) -------------------------------------------------------- int __thiscall sub_907290(_DWORD **this, volatile LONG *a2) { _DWORD *v2; // edx int result; // eax _DWORD *v4; // [esp+0h] [ebp-1Ch] volatile LONG **v5; // [esp+4h] [ebp-18h] v4 = this; if ( this[58] ) sub_902700(this[58], (char)this); sub_9026C0(a2, (int)v4); v5 = (volatile LONG **)(v4 + 58); if ( (volatile LONG *)v4[58] != a2 ) { if ( *v5 ) sub_402270(*v5); *v5 = a2; if ( *v5 ) InterlockedIncrement(*v5 + 1); } sub_907360(v4); v2 = v4 + 66; *v2 = dword_ABD518; v2[1] = dword_ABD51C; result = dword_ABD520; v2[2] = dword_ABD520; v2[3] = dword_ABD524; v4[65] = 0; return result; } // ABD518: using guessed type int dword_ABD518; // ABD51C: using guessed type int dword_ABD51C; // ABD520: using guessed type int dword_ABD520; // ABD524: using guessed type int dword_ABD524; //----- (00907360) -------------------------------------------------------- int __thiscall sub_907360(void *this) { int v1; // ecx int result; // eax int v3; // [esp+4h] [ebp-58h] void *v4; // [esp+Ch] [ebp-50h] int *v5; // [esp+34h] [ebp-28h] int v6; // [esp+3Ch] [ebp-20h] char *v7; // [esp+44h] [ebp-18h] volatile LONG *v8; // [esp+48h] [ebp-14h] int i; // [esp+4Ch] [ebp-10h] int v10; // [esp+58h] [ebp-4h] v4 = this; for ( i = 0; i < *((_DWORD *)v4 + 64); ++i ) { if ( *(_BYTE *)(*((_DWORD *)v4 + 63) + 8 * i + 4) ) { (*(void (__thiscall **)(void *, volatile LONG **, _DWORD))(*(_DWORD *)v4 + 120))( v4, &v8, *(_DWORD *)(*((_DWORD *)v4 + 63) + 8 * i)); if ( v8 ) sub_402270(v8); } } *((_DWORD *)v4 + 64) = sub_9026A0(*((_DWORD **)v4 + 58)); v7 = (char *)*((_DWORD *)v4 + 63); if ( v7 ) sub_906D40(v7, 3); v6 = *((_DWORD *)v4 + 64); v1 = 8 * v6 | -((unsigned __int64)(unsigned int)v6 >> 29 != 0); v5 = (int *)operator new[]((v1 + 4) | -__CFADD__(v1, 4)); v10 = 0; if ( v5 ) { *v5 = v6; `eh vector constructor iterator'(v5 + 1, 8u, v6, sub_907730, sub_9077F0); v3 = (int)(v5 + 1); } else { v3 = 0; } result = v3; *((_DWORD *)v4 + 63) = v3; return result; } //----- (009074F0) -------------------------------------------------------- int __thiscall sub_9074F0(int this, int a2) { int result; // eax result = this; if ( *(_DWORD *)(this + 260) != a2 ) { result = a2; *(_DWORD *)(this + 260) = a2; *(_BYTE *)(this + 300) = 1; } return result; } //----- (00907530) -------------------------------------------------------- _DWORD *__thiscall sub_907530(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // ecx _DWORD *v4; // [esp+0h] [ebp-4h] v4 = this; if ( this[59] != *a2 || this[60] != a2[1] || this[61] != a2[2] || (result = this, this[62] != a2[3]) ) { v3 = this + 59; *v3 = *a2; v3[1] = a2[1]; v3[2] = a2[2]; result = (_DWORD *)a2[3]; v3[3] = result; *((_BYTE *)v4 + 300) = 1; } return result; } //----- (009075B0) -------------------------------------------------------- _BYTE *__thiscall sub_9075B0(_BYTE *this, char a2) { _BYTE *result; // eax _BYTE *v3; // [esp+0h] [ebp-Ch] int i; // [esp+8h] [ebp-4h] v3 = this; this[286] = a2; for ( i = 0; ; ++i ) { result = v3; if ( i >= *((_DWORD *)v3 + 64) ) break; if ( *(_BYTE *)(*((_DWORD *)v3 + 63) + 8 * i + 4) ) sub_906490(*(_BYTE **)(*((_DWORD *)v3 + 63) + 8 * i), a2); } return result; } //----- (00907630) -------------------------------------------------------- int __thiscall sub_907630(void *this, int a2, int a3, int a4, int a5) { int v6; // [esp+4h] [ebp-14h] int v7; // [esp+8h] [ebp-10h] int v8; // [esp+Ch] [ebp-Ch] int v9; // [esp+10h] [ebp-8h] v6 = a2; v7 = a3; v8 = a4; v9 = a5; return (*(int (__thiscall **)(void *, int *))(*(_DWORD *)this + 136))(this, &v6); } //----- (00907680) -------------------------------------------------------- int __cdecl sub_907680(int a1) { int result; // eax result = a1; dword_BA6BC0 = a1; return result; } // BA6BC0: using guessed type int dword_BA6BC0; //----- (00907690) -------------------------------------------------------- int sub_907690() { return dword_BA6BC0; } // BA6BC0: using guessed type int dword_BA6BC0; //----- (009076A0) -------------------------------------------------------- _DWORD *__thiscall sub_9076A0(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[76] = a2; return result; } //----- (009076C0) -------------------------------------------------------- BOOL __thiscall sub_9076C0(_DWORD **this, int a2, int a3, int a4, char *a5, int a6, int a7, int a8, int a9, size_t a10, int a11, char a12, int a13, int a14, int a15, int a16) { return sub_903330(this[58], a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) == 0; } //----- (00907730) -------------------------------------------------------- void __thiscall sub_907730(void *this) { volatile LONG **v1; // [esp+4h] [ebp-20h] v1 = (volatile LONG **)this; *(_DWORD *)this = 0; if ( *(_DWORD *)this ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)this + 4)); if ( *v1 ) { if ( *v1 ) sub_402270(*v1); *v1 = 0; if ( *v1 ) InterlockedIncrement(*v1 + 1); } *((_BYTE *)v1 + 4) = 0; } //----- (009077F0) -------------------------------------------------------- void __thiscall sub_9077F0(void *this) { volatile LONG **v1; // [esp+4h] [ebp-24h] v1 = (volatile LONG **)this; if ( *(_DWORD *)this ) { if ( *(_DWORD *)this ) sub_402270(*(volatile LONG **)this); *v1 = 0; if ( *v1 ) InterlockedIncrement(*v1 + 1); } if ( *v1 ) sub_402270(*v1); } //----- (00907890) -------------------------------------------------------- char __thiscall sub_907890(char **this, const char *a2) { char **v3; // [esp+14h] [ebp-18h] bool v4; // [esp+27h] [ebp-5h] const char **v5; // [esp+28h] [ebp-4h] v3 = this; v5 = (const char **)(this + 72); if ( this[72] ) { if ( a2 ) v4 = strcmp(*v5, a2) == 0; else v4 = *v5 == 0; } else { v4 = a2 == 0; } if ( v4 ) return 0; sub_907970(this + 72, a2); *((_BYTE *)v3 + 300) = 1; return 1; } //----- (00907970) -------------------------------------------------------- int __thiscall sub_907970(char **this, const char *a2) { int result; // eax char v3; // dl char *v4; // [esp+8h] [ebp-28h] const char *v5; // [esp+Ch] [ebp-24h] char **v6; // [esp+20h] [ebp-10h] int v7; // [esp+2Ch] [ebp-4h] v6 = this; if ( a2 ) { this[2] = (char *)strlen(a2); v7 = (int)(this[2] + 1); if ( !*this || (signed int)this[1] < v7 ) { this[1] = (char *)v7; operator delete[](*this); *v6 = (char *)operator new[]((unsigned int)v6[1]); } v5 = a2; v4 = *v6; do { v3 = *v5; *v4 = *v5; result = (int)(v5++ + 1); ++v4; } while ( v3 ); } else { if ( *this ) **this = 0; result = (int)this; this[2] = 0; } return result; } //----- (00907A70) -------------------------------------------------------- void __thiscall sub_907A70(void *this) { if ( *(_DWORD *)this ) sub_402270(*(volatile LONG **)this); } //----- (00907A90) -------------------------------------------------------- _DWORD *__thiscall sub_907A90(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8FE000(this); *v1 = &PgWinLRBut::`vftable'; v1[58] = &PgWinLRBut::`vftable'; v1[81] = 0; return v1; } // A42528: using guessed type void *PgWinLRBut::`vftable'; // A42544: using guessed type void *PgWinLRBut::`vftable'; //----- (00907AD0) -------------------------------------------------------- void *__thiscall sub_907AD0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_907B00(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00907B00) -------------------------------------------------------- LONG __thiscall sub_907B00(_DWORD *this) { *this = &PgWinLRBut::`vftable'; this[58] = &PgWinLRBut::`vftable'; return sub_8FE0C0(this); } // A42528: using guessed type void *PgWinLRBut::`vftable'; // A42544: using guessed type void *PgWinLRBut::`vftable'; //----- (00907B30) -------------------------------------------------------- volatile LONG *__cdecl sub_907B30(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { volatile LONG *result; // eax volatile LONG *v8; // [esp+Ch] [ebp-54h] volatile LONG *v9; // [esp+44h] [ebp-1Ch] _DWORD *v10; // [esp+48h] [ebp-18h] volatile LONG *v11; // [esp+4Ch] [ebp-14h] volatile LONG *v12; // [esp+50h] [ebp-10h] int v13; // [esp+5Ch] [ebp-4h] v10 = operator new(0x14Cu); v13 = 0; if ( v10 ) v8 = sub_907A90(v10); else v8 = 0; v11 = v8; v13 = -1; v12 = v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v12 + 572))( v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (00907C90) -------------------------------------------------------- char __thiscall sub_907C90(volatile LONG **this, int a2, int a3, int a4, _DWORD *a5, int a6, int a7) { volatile LONG **v8; // [esp+0h] [ebp-4h] v8 = this; if ( !sub_8FE3B0(this, a2, a3, a4, a5, a6, 0, 0) ) return 0; (*((void (__thiscall **)(volatile LONG **, int))*v8 + 140))(v8, a7); return 1; } //----- (00907CE0) -------------------------------------------------------- char __thiscall sub_907CE0(void *this, int a2, int a3, int *a4, char a5, unsigned int *a6, unsigned int a7, int a8, int a9, int a10) { char result; // al void *v11; // [esp+4h] [ebp-3Ch] volatile LONG *v12; // [esp+30h] [ebp-10h] v11 = this; v12 = sub_8FAEE0(a4, a5, a6, a7); if ( v12 ) InterlockedIncrement(v12 + 1); if ( !v12 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(void *, int, int, volatile LONG *, int, int, int))(*(_DWORD *)v11 + 580))( v11, a2, a3, v12, a8, a9, a10) ) { if ( v12 ) sub_402270(v12); result = 1; } else { if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (00907E00) -------------------------------------------------------- char __thiscall sub_907E00(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8) { _DWORD *v9; // [esp+0h] [ebp-4h] v9 = this; if ( !sub_8FE550(this, a2, a3, a4, a5, a6, a7, 0, 0) ) return 0; (*(void (__thiscall **)(_DWORD *, int))(*v9 + 560))(v9, a8); return 1; } //----- (00907E60) -------------------------------------------------------- int __thiscall sub_907E60(void *this, _BYTE *a2) { int result; // eax int v3; // [esp+0h] [ebp-8h] v3 = (int)this; result = (*(int (__thiscall **)(void *))(*(_DWORD *)this + 312))(this); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; if ( dword_BA6ACC ) ++dword_BA6ACC; if ( dword_BA6AD8 ) ++dword_BA6AD8; result = sub_8FE5D0((void *)v3, a2); if ( dword_BA6AA8 < 1 && dword_BA6AB4 < 1 ) { byte_BA6AC8 = 0; byte_BA6AD4 = 0; if ( dword_BA6ACC >= 1 && *a2 ) { if ( *(_DWORD *)(v3 + 304) ) { dword_BA6A7C = v3; *(_BYTE *)(v3 + 312) = 1; } else { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 568))(v3); *(_BYTE *)(v3 + 312) = 0; } byte_BA6AC8 = 1; } else if ( dword_BA6AD8 >= 1 ) { *(_BYTE *)(v3 + 312) = 0; if ( dword_BA6A7C == v3 ) { dword_BA6A7C = 0; byte_BA6AD4 = 1; } if ( *a2 ) { if ( *(_DWORD *)(v3 + 304) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 568))(v3); byte_BA6AD4 = 1; } } if ( *a2 ) { if ( *(_BYTE *)(v3 + 312) ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 1); else (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 2); } else if ( *(_BYTE *)(v3 + 312) ) { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 2); } else { (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 552))(v3, 0); } if ( byte_BA6AC8 && dword_BA6ACC ) --dword_BA6ACC; byte_BA6AC8 = 0; result = (unsigned __int8)byte_BA6AD4; if ( byte_BA6AD4 && dword_BA6AD8 ) --dword_BA6AD8; byte_BA6AD4 = 0; } if ( dword_BA6AA8 ) --dword_BA6AA8; if ( dword_BA6AB4 ) result = dword_BA6AB4-- - 1; if ( dword_BA6ACC ) --dword_BA6ACC; if ( dword_BA6AD8 ) --dword_BA6AD8; } return result; } // BA6A7C: using guessed type int dword_BA6A7C; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; // BA6AD4: using guessed type char byte_BA6AD4; // BA6AD8: using guessed type int dword_BA6AD8; //----- (00908140) -------------------------------------------------------- LONG __thiscall sub_908140(volatile LONG **this) { volatile LONG **v2; // [esp+4h] [ebp-30h] volatile LONG **v3; // [esp+14h] [ebp-20h] v2 = this; *this = (volatile LONG *)&PgCursor::`vftable'; v3 = this + 23; if ( this[23] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; if ( *v3 ) InterlockedIncrement(*v3 + 1); } dword_BA6BCC = 0; operator delete[](dword_BA6BC4); if ( v2[23] ) sub_402270(v2[23]); return sub_95C300(v2); } // A42790: using guessed type void *PgCursor::`vftable'; // BA6BCC: using guessed type int dword_BA6BCC; //----- (00908220) -------------------------------------------------------- LONG sub_908220() { LONG result; // eax if ( dword_BA6BDC ) { if ( dword_BA6BDC ) result = sub_402270((volatile LONG *)dword_BA6BDC); dword_BA6BDC = 0; } if ( dword_BA6BE0 ) { if ( dword_BA6BE0 ) result = sub_402270((volatile LONG *)dword_BA6BE0); dword_BA6BE0 = 0; } return result; } // BA6BDC: using guessed type int dword_BA6BDC; // BA6BE0: using guessed type int dword_BA6BE0; //----- (009082C0) -------------------------------------------------------- char __thiscall sub_9082C0(int this) { int v2; // STD4_4 float v3; // STB8_4 float v4; // STD8_4 float v5; // STB4_4 float v6; // STBC_4 float v7; // STC4_4 float v8; // STCC_4 int v9; // STAC_4 int v10; // STB0_4 float v11; // STB4_4 float v12; // STBC_4 float v13; // STD0_4 float v14; // STC0_4 int v15; // [esp+74h] [ebp-68h] int v16; // [esp+C8h] [ebp-14h] v15 = this; if ( !*(_DWORD *)(this + 44) ) return 0; v2 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 8) + 108))(*(_DWORD *)(this + 8)); v3 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 60))(v2, 0); v4 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 64))(v2, 0); v5 = -v3 * (double)*(unsigned int *)(v15 + 16); v6 = -v4 * (double)*(unsigned int *)(v15 + 20); v7 = v3 * 32.0; v8 = v4 * 32.0; sub_867E60(*(_DWORD *)(*(_DWORD *)(v15 + 44) + 184), 0, v5, v6, v7, v8); sub_867680(*(_DWORD *)(*(_DWORD *)(v15 + 44) + 184)); sub_85BED0(*(_DWORD ***)(v15 + 44), 0.0, 1); v9 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v15 + 36) + 60))(*(_DWORD *)(v15 + 36)); v10 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(v15 + 36) + 64))(*(_DWORD *)(v15 + 36)); v11 = (double)*(unsigned int *)(v15 + 84) / (double)(unsigned int)v9; v12 = (double)*(unsigned int *)(v15 + 88) / (double)(unsigned int)v10; v13 = 32.0 / (double)(unsigned int)v9 + v11; v14 = 32.0 / (double)(unsigned int)v10 + v12; sub_8681A0(*(_DWORD *)(*(_DWORD *)(v15 + 44) + 184), 0, 0, v11, v12, v13, v14); v16 = *(_DWORD *)(*(_DWORD *)(v15 + 44) + 184); if ( v16 ) *(_WORD *)(v16 + 50) |= 8u; return 1; } //----- (009085B0) -------------------------------------------------------- void *__cdecl sub_9085B0(int a1) { dword_BA6BC4 = operator new[](20 * a1); dword_BA6BC8 = a1; return memset(dword_BA6BC4, 0, 20 * a1); } // BA6BC8: using guessed type int dword_BA6BC8; //----- (00908600) -------------------------------------------------------- int __cdecl sub_908600(int a1, int a2, int a3, int a4, int a5) { int result; // eax if ( a1 >= 0 ) { result = a1; if ( a1 < dword_BA6BC8 ) { *((_DWORD *)dword_BA6BC4 + 5 * a1) = a1; *((_DWORD *)dword_BA6BC4 + 5 * a1 + 1) = a2; *((_DWORD *)dword_BA6BC4 + 5 * a1 + 2) = a3; *((_DWORD *)dword_BA6BC4 + 5 * a1 + 3) = a4; result = a5; *((_DWORD *)dword_BA6BC4 + 5 * a1 + 4) = a5; } } return result; } // BA6BC8: using guessed type int dword_BA6BC8; //----- (00908680) -------------------------------------------------------- int __thiscall sub_908680(_DWORD *this, int a2) { int v3; // ST0C_4 int v4; // ST04_4 _DWORD *v5; // [esp+0h] [ebp-10h] v5 = this; if ( this[24] == a2 ) return this[24]; if ( a2 < 0 || a2 >= dword_BA6BC8 ) return this[24]; sub_909350(this); v3 = v5[24]; v5[24] = a2; v5[22] = *((_DWORD *)dword_BA6BC4 + 5 * a2 + 4); v5[21] = *((_DWORD *)dword_BA6BC4 + 5 * a2 + 3); v4 = *((_DWORD *)dword_BA6BC4 + 5 * a2 + 2); v5[4] = *((_DWORD *)dword_BA6BC4 + 5 * a2 + 1); v5[5] = v4; (*(void (__thiscall **)(_DWORD *))(*v5 + 40))(v5); return v3; } // BA6BC8: using guessed type int dword_BA6BC8; //----- (00908750) -------------------------------------------------------- char __thiscall sub_908750(volatile LONG **this, int a2) { int v3; // ST178_4 float v4; // ST168_4 float v5; // ST17C_4 float v6; // ST164_4 float v7; // ST16C_4 float v8; // ST170_4 float v9; // ST174_4 float v10; // ST68_4 float v11; // ST6C_4 float *v12; // ecx volatile LONG *v13; // [esp+40h] [ebp-144h] _DWORD *v14; // [esp+44h] [ebp-140h] volatile LONG *v15; // [esp+48h] [ebp-13Ch] volatile LONG *v16; // [esp+4Ch] [ebp-138h] volatile LONG **v17; // [esp+50h] [ebp-134h] volatile LONG **v18; // [esp+C8h] [ebp-BCh] volatile LONG **v19; // [esp+DCh] [ebp-A8h] volatile LONG **v20; // [esp+124h] [ebp-60h] volatile LONG **v21; // [esp+130h] [ebp-54h] _DWORD *v22; // [esp+138h] [ebp-4Ch] _DWORD *v23; // [esp+140h] [ebp-44h] _DWORD *v24; // [esp+148h] [ebp-3Ch] _DWORD *v25; // [esp+150h] [ebp-34h] v17 = this; if ( !a2 ) return 0; v21 = this + 9; if ( this[9] != (volatile LONG *)a2 ) { if ( *v21 ) sub_402270(*v21); *v21 = (volatile LONG *)a2; if ( *v21 ) InterlockedIncrement(*v21 + 1); } if ( !v17[10] ) { v25 = operator new(0x44u); if ( v25 ) v16 = sub_863BB0(v25); else v16 = 0; v20 = v17 + 10; if ( v17[10] != v16 ) { if ( *v20 ) sub_402270(*v20); *v20 = v16; if ( *v20 ) InterlockedIncrement(*v20 + 1); } if ( !v17[10] ) return 0; } sub_42AB40(v17[10], a2); sub_45C760((_DWORD **)v17[10], 0); *((_DWORD *)v17[10] + 7) = 0; if ( !v17[11] ) { if ( !v17[8] ) { v24 = operator new(0x20u); if ( v24 ) v15 = sub_40DC70(v24); else v15 = 0; v19 = v17 + 8; if ( v17[8] != v15 ) { if ( *v19 ) sub_402270(*v19); *v19 = v15; if ( *v19 ) InterlockedIncrement(*v19 + 1); } *((_WORD *)v17[8] + 14) |= 1u; } v23 = operator new(0xC4u); if ( v23 ) { v22 = operator new(0x70u); if ( v22 ) v14 = sub_868440(v22, 0, 1, 1u, 1, 1, 4, 1, 2, 1); else v14 = 0; v13 = sub_868C00(v23, (int)v14); } else { v13 = 0; } v18 = v17 + 11; if ( v17[11] != v13 ) { if ( *v18 ) sub_402270(*v18); *v18 = v13; if ( *v18 ) InterlockedIncrement(*v18 + 1); } sub_867880(*((_WORD **)v17[11] + 46), 4, 0, 0); v3 = (*(int (__thiscall **)(volatile LONG *))(*v17[2] + 108))(v17[2]); v4 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 60))(v3, 0); v5 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 64))(v3, 0); v6 = -v4 * (double)(unsigned int)v17[4]; v7 = -v5 * (double)(unsigned int)v17[5]; v8 = v4 * 32.0; v9 = v5 * 32.0; sub_867E60(*((_DWORD *)v17[11] + 46), 0, v6, v7, v8, v9); sub_867680(*((_DWORD *)v17[11] + 46)); sub_8681A0(*((_DWORD *)v17[11] + 46), 0, 0, 0.0, 0.0, 1.0, 1.0); sub_403700(v17[11], (int)v17[10]); sub_403700(v17[11], (int)v17[8]); v10 = (double)(signed int)v17[13] * v4; v11 = (double)(signed int)v17[13] * v5; v12 = (float *)(v17[11] + 22); *v12 = v10; v12[1] = v11; v12[2] = 0.5; } v17[6] = (volatile LONG *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 60))(a2); v17[7] = (volatile LONG *)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 64))(a2); sub_85BED0((_DWORD **)v17[11], 0.0, 1); sub_85C4D0(v17[11]); return 1; } //----- (00908E70) -------------------------------------------------------- int __cdecl sub_908E70(int a1, volatile LONG **a2, int a3, int a4, volatile LONG *a5) { volatile LONG **v6; // [esp+8h] [ebp-48h] volatile LONG **v7; // [esp+18h] [ebp-38h] _DWORD *v8; // [esp+38h] [ebp-18h] if ( dword_BA6BDC ) return dword_BA6BDC; v8 = operator new(0x64u); if ( v8 ) v6 = (volatile LONG **)sub_9093B0(v8, a1); else v6 = 0; if ( !v6 ) return (int)v6; (*((void (__thiscall **)(volatile LONG **, int))*v6 + 7))(v6, a3); v6[17] = *a2; v6[19] = a2[2]; v6[18] = a2[1]; v6[20] = a2[3]; if ( (*((unsigned __int8 (__thiscall **)(volatile LONG **, volatile LONG *))*v6 + 11))(v6, a5) ) { v7 = v6 + 23; if ( v6[23] != a5 ) { if ( *v7 ) sub_402270(*v7); *v7 = a5; if ( *v7 ) InterlockedIncrement(*v7 + 1); } v6[6] = (volatile LONG *)32; v6[7] = (volatile LONG *)32; sub_908680(v6, a4); (*((void (__thiscall **)(volatile LONG **))*v6 + 10))(v6); if ( (volatile LONG **)dword_BA6BDC != v6 ) { if ( dword_BA6BDC ) sub_402270((volatile LONG *)dword_BA6BDC); dword_BA6BDC = (int)v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(dword_BA6BDC + 4)); } return (int)v6; } if ( v6 ) (*(void (__thiscall **)(volatile LONG **, signed int))*v6)(v6, 1); return 0; } // BA6BDC: using guessed type int dword_BA6BDC; //----- (00909060) -------------------------------------------------------- int __stdcall sub_909060(int a1) { int result; // eax int v2; // edx _DWORD *v3; // [esp+50h] [ebp-7Ch] _DWORD *v4; // [esp+74h] [ebp-58h] _DWORD *v5; // [esp+84h] [ebp-48h] int v6; // [esp+90h] [ebp-3Ch] int v7; // [esp+94h] [ebp-38h] int v8; // [esp+98h] [ebp-34h] int v9; // [esp+9Ch] [ebp-30h] int j; // [esp+A0h] [ebp-2Ch] int v11; // [esp+A4h] [ebp-28h] int v12; // [esp+A8h] [ebp-24h] int i; // [esp+ACh] [ebp-20h] int v14; // [esp+B0h] [ebp-1Ch] int v15; // [esp+B4h] [ebp-18h] char v16; // [esp+BBh] [ebp-11h] _DWORD *v17; // [esp+BCh] [ebp-10h] int v18; // [esp+C8h] [ebp-4h] result = dword_BA6BE0 == 0; if ( !dword_BA6BE0 ) { v16 = byte_BA4774; byte_BA4774 = 1; v5 = operator new(0x70u); v18 = 0; if ( v5 ) v3 = sub_8698C0(v5, 0x20u, 0x20u, &unk_ABDAD0, 1u, 1); else v3 = 0; v18 = -1; v17 = v3; v4 = sub_865FA0((int)v3, &unk_ABD7DC); result = dword_BA6BE0; if ( (_DWORD *)dword_BA6BE0 != v4 ) { if ( dword_BA6BE0 ) result = sub_402270((volatile LONG *)dword_BA6BE0); dword_BA6BE0 = (int)v4; if ( v4 ) result = InterlockedIncrement((volatile LONG *)(dword_BA6BE0 + 4)); } byte_BA4774 = v16; } if ( dword_BA6BE0 ) { result = dword_BA6BE0; v14 = *(_DWORD *)(dword_BA6BE0 + 40); if ( v14 ) { result = (*(int (__thiscall **)(int))(*(_DWORD *)v14 + 20))(v14); v15 = result; if ( result ) { (*(void (__stdcall **)(int, int *, _DWORD, _DWORD))(*(_DWORD *)a1 + 52))(a1, &v11, 0, 0); v6 = v12; (*(void (__stdcall **)(int, _DWORD, int *, _DWORD, _DWORD))(*(_DWORD *)v15 + 76))(v15, 0, &v7, 0, 0); v9 = v8; for ( i = 0; i < 32; ++i ) { for ( j = 0; j < 32; ++j ) { *(_BYTE *)(v9 + 4 * j) = *(_BYTE *)(v6 + 4 * j); *(_BYTE *)(v9 + 4 * j + 1) = *(_BYTE *)(v6 + 4 * j + 1); *(_BYTE *)(v9 + 4 * j + 2) = *(_BYTE *)(v6 + 4 * j + 2); *(_BYTE *)(v9 + 4 * j + 3) = -1; } v9 += v7; v6 += v11; } (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v15 + 80))(v15, 0); result = (*(int (__stdcall **)(int))(*(_DWORD *)a1 + 56))(a1); if ( dword_BA6BDC ) { (*(void (__thiscall **)(int, int))(*(_DWORD *)dword_BA6BDC + 44))(dword_BA6BDC, dword_BA6BE0); sub_8681A0(*(_DWORD *)(*(_DWORD *)(dword_BA6BDC + 44) + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); v2 = *(_DWORD *)(*(_DWORD *)(dword_BA6BDC + 44) + 184); result = *(unsigned __int16 *)(v2 + 50) | 8; *(_WORD *)(v2 + 50) = result; } } } } return result; } // BA4774: using guessed type char byte_BA4774; // BA6BDC: using guessed type int dword_BA6BDC; // BA6BE0: using guessed type int dword_BA6BE0; //----- (00909350) -------------------------------------------------------- int __thiscall sub_909350(_DWORD *this) { return (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 44))(this, this[23]); } //----- (00909380) -------------------------------------------------------- _DWORD *__thiscall sub_909380(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[3] = a2; return result; } //----- (009093A0) -------------------------------------------------------- void *sub_9093A0() { return &unk_BA6BD4; } //----- (009093B0) -------------------------------------------------------- _DWORD *__thiscall sub_9093B0(_DWORD *this, int a2) { _DWORD *v3; // [esp+0h] [ebp-Ch] v3 = this; sub_95C280(this, a2); *v3 = &PgCursor::`vftable'; v3[21] = 0; v3[22] = 0; v3[23] = 0; if ( v3[23] ) InterlockedIncrement((volatile LONG *)(v3[23] + 4)); v3[24] = -1; return v3; } // A42790: using guessed type void *PgCursor::`vftable'; //----- (00909430) -------------------------------------------------------- volatile LONG **__thiscall sub_909430(volatile LONG **this, char a2) { volatile LONG **v3; // [esp+0h] [ebp-4h] v3 = this; sub_908140(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00909460) -------------------------------------------------------- char __cdecl sub_909460(char a1) { char result; // al result = a1; byte_BA6BE4 = a1; return result; } // BA6BE4: using guessed type char byte_BA6BE4; //----- (00909470) -------------------------------------------------------- char __cdecl sub_909470(char a1) { char result; // al result = a1; byte_BA6BE5 = a1; return result; } // BA6BE5: using guessed type char byte_BA6BE5; //----- (00909480) -------------------------------------------------------- _DWORD *__thiscall sub_909480(_DWORD *this, int a2, int a3) { _DWORD *v3; // ST00_4 v3 = this; *this = a2; this[1] = 0; *((float *)this + 2) = 0.0; this[4] = 0; this[5] = 0; this[6] = 0; this[7] = a3; this[8] = 0; this[9] = 0; sub_909590((int)this); return v3; } //----- (009094F0) -------------------------------------------------------- _DWORD *__thiscall sub_9094F0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // [esp+8h] [ebp-14h] void *v3; // [esp+10h] [ebp-Ch] void *v4; // [esp+18h] [ebp-4h] v2 = this; v4 = (void *)this[8]; if ( v4 ) { sub_9094F0(v4); operator delete(v4); } result = v2; v3 = (void *)v2[9]; if ( v3 ) { sub_9094F0(v3); operator delete(v3); } return result; } //----- (00909590) -------------------------------------------------------- int __thiscall sub_909590(int this) { int result; // eax int v2; // [esp+0h] [ebp-4h] v2 = this; result = this; *(_DWORD *)(this + 4) = 0; *(float *)(this + 8) = 0.0; if ( *(_DWORD *)(this + 32) ) result = sub_909590(*(_DWORD *)(this + 32)); if ( *(_DWORD *)(v2 + 36) ) result = sub_909590(*(_DWORD *)(v2 + 36)); return result; } //----- (00909600) -------------------------------------------------------- int __cdecl sub_909600(int a1) { int v2; // [esp+18h] [ebp-8h] int v3; // [esp+1Ch] [ebp-4h] v3 = *(_DWORD *)(a1 + 36); v2 = *(_DWORD *)(a1 + 32); if ( v2 ) sub_909660(&dword_BA6C20, v2); if ( v3 ) return v3; if ( dword_BA6C28 == -1 ) return 0; return sub_909710(&dword_BA6C20); } // BA6C20: using guessed type int dword_BA6C20; // BA6C28: using guessed type int dword_BA6C28; //----- (00909660) -------------------------------------------------------- _DWORD *__thiscall sub_909660(_DWORD *this, int a2) { _DWORD *result; // eax _DWORD *v3; // [esp+0h] [ebp-18h] v3 = this; if ( this[2] == -1 ) { this[2] = 0; *(_DWORD *)*this = a2; this[3] = 1; } else { if ( this[2] == this[3] ) sub_909780((void **)this, (void *)(2 * this[1])); *(_DWORD *)(*v3 + 4 * v3[3]++) = a2; } result = v3; if ( v3[3] == v3[1] ) v3[3] = 0; return result; } //----- (00909710) -------------------------------------------------------- int __thiscall sub_909710(_DWORD *this) { int v1; // edx int v3; // [esp+8h] [ebp-4h] v3 = *(_DWORD *)(*this + 4 * this[2]); v1 = this[2] + 1; this[2] = v1; if ( v1 == this[1] ) this[2] = 0; if ( this[2] == this[3] ) { this[2] = -1; this[3] = 0; } return v3; } //----- (00909780) -------------------------------------------------------- int __thiscall sub_909780(void **this, void *a2) { int result; // eax void **v3; // [esp+4h] [ebp-18h] void *v4; // [esp+10h] [ebp-Ch] _DWORD *v5; // [esp+14h] [ebp-8h] unsigned int j; // [esp+18h] [ebp-4h] unsigned int k; // [esp+18h] [ebp-4h] unsigned int i; // [esp+18h] [ebp-4h] v3 = this; v5 = operator new[](4 * (_DWORD)a2); v4 = 0; if ( v3[2] < v3[3] ) { for ( i = (unsigned int)v3[2]; i < (unsigned int)v3[3]; ++i ) { v5[(_DWORD)v4] = *((_DWORD *)*v3 + i); v4 = (char *)v4 + 1; } } else { for ( j = (unsigned int)v3[2]; j < (unsigned int)v3[1]; ++j ) { v5[(_DWORD)v4] = *((_DWORD *)*v3 + j); v4 = (char *)v4 + 1; } for ( k = 0; k < (unsigned int)v3[3]; ++k ) { v5[(_DWORD)v4] = *((_DWORD *)*v3 + k); v4 = (char *)v4 + 1; } } v3[2] = 0; v3[3] = v4; v3[1] = a2; operator delete[](*v3); *v3 = v5; return result; } //----- (009098C0) -------------------------------------------------------- _DWORD *__thiscall sub_9098C0(_DWORD *this, int a2) { _DWORD *v2; // ST04_4 v2 = this; *this = operator new[](4 * a2); v2[1] = a2; v2[2] = -1; v2[3] = 0; return v2; } //----- (00909920) -------------------------------------------------------- _DWORD *__cdecl sub_909920(int a1) { int v1; // STC4_4 float *v2; // eax float *v3; // ecx int v4; // ecx unsigned int v5; // edx _DWORD *v6; // edx int *v7; // ST60_4 _DWORD *v9; // [esp+10h] [ebp-E0h] int v10; // [esp+14h] [ebp-DCh] float *v11; // [esp+18h] [ebp-D8h] unsigned int v12; // [esp+68h] [ebp-88h] char *j; // [esp+6Ch] [ebp-84h] unsigned int v14; // [esp+70h] [ebp-80h] float *i; // [esp+74h] [ebp-7Ch] _DWORD *v16; // [esp+80h] [ebp-70h] char *v17; // [esp+8Ch] [ebp-64h] float *v18; // [esp+98h] [ebp-58h] _WORD *v19; // [esp+A4h] [ebp-4Ch] int v20; // [esp+ACh] [ebp-44h] int v21; // [esp+B0h] [ebp-40h] int v22; // [esp+B4h] [ebp-3Ch] int v23; // [esp+C0h] [ebp-30h] int v24; // [esp+C4h] [ebp-2Ch] int v25; // [esp+C8h] [ebp-28h] int v26; // [esp+CCh] [ebp-24h] unsigned int v27; // [esp+D0h] [ebp-20h] unsigned int k; // [esp+D4h] [ebp-1Ch] int *v29; // [esp+D8h] [ebp-18h] float *v30; // [esp+DCh] [ebp-14h] int v31; // [esp+E0h] [ebp-10h] int v32; // [esp+ECh] [ebp-4h] v27 = *(_DWORD *)(*(_DWORD *)(a1 + 184) + 68); v18 = (float *)operator new[](12 * v27); if ( v18 ) { v14 = v27; for ( i = v18; (--v14 & 0x80000000) == 0; i += 3 ) ; v11 = v18; } else { v11 = 0; } v30 = v11; v17 = (char *)operator new[](8 * v27); if ( v17 ) { v12 = v27; for ( j = v17; (--v12 & 0x80000000) == 0; j += 8 ) ; v10 = (int)v17; } else { v10 = 0; } v19 = operator new[](2 * v27); v20 = *(_DWORD *)(*(_DWORD *)(a1 + 184) + 32); v22 = *(_DWORD *)(*(_DWORD *)(a1 + 184) + 72); v21 = *(_DWORD *)(*(_DWORD *)(a1 + 184) + 44); for ( k = 0; k < v27; ++k ) { v1 = *(unsigned __int16 *)(v22 + 2 * k); v19[k] = k; v2 = (float *)(v20 + 12 * v1); v3 = &v30[3 * k]; *v3 = *v2; v3[1] = v2[1]; v3[2] = v2[2]; v4 = *(_DWORD *)(v21 + 8 * v1 + 4); v5 = k; *(_DWORD *)(v10 + 8 * k) = *(_DWORD *)(v21 + 8 * v1); *(_DWORD *)(v10 + 8 * v5 + 4) = v4; } v16 = operator new(0xC4u); v32 = 0; if ( v16 ) v9 = sub_866D90(v16, v27, (int)v30, 0, 0, v10, 1, 0, v27 / 3, (int)v19); else v9 = 0; v32 = -1; sub_86B6C0((float *)&v23, v27, v30); v6 = (_DWORD *)(v9[46] + 16); *v6 = v23; v6[1] = v24; v6[2] = v25; v6[3] = v26; sub_85BED0((_DWORD **)v9, 0.0, 1); v31 = a1 + 156; v29 = *(int **)(a1 + 160); while ( v29 ) { v7 = v29 + 2; v29 = (int *)*v29; sub_403700(v9, *v7); } sub_85C4D0(v9); sub_85C6F0(v9); return v9; } //----- (00909CB0) -------------------------------------------------------- float *__thiscall sub_909CB0(float *this) { float *v2; // [esp+0h] [ebp-14h] v2 = this; sub_8F2740(this); *(_DWORD *)v2 = &PgWinCircleGauge::`vftable'; *((_DWORD *)v2 + 58) = &PgWinCircleGauge::`vftable'; v2[73] = 0.0; if ( *((_DWORD *)v2 + 73) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v2 + 73) + 4)); v2[74] = 0.0; if ( *((_DWORD *)v2 + 74) ) InterlockedIncrement((volatile LONG *)(*((_DWORD *)v2 + 74) + 4)); v2[77] = 100.0; v2[78] = 100.0; return v2; } // A427DC: using guessed type void *PgWinCircleGauge::`vftable'; // A427FC: using guessed type void *PgWinCircleGauge::`vftable'; //----- (00909D60) -------------------------------------------------------- volatile LONG **__thiscall sub_909D60(volatile LONG **this, char a2) { volatile LONG **v3; // [esp+0h] [ebp-4h] v3 = this; sub_909D90(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00909D90) -------------------------------------------------------- LONG __thiscall sub_909D90(volatile LONG **this) { volatile LONG **v2; // [esp+4h] [ebp-48h] volatile LONG **v3; // [esp+20h] [ebp-2Ch] volatile LONG **v4; // [esp+30h] [ebp-1Ch] v2 = this; *this = (volatile LONG *)&PgWinCircleGauge::`vftable'; this[58] = (volatile LONG *)&PgWinCircleGauge::`vftable'; v4 = this + 73; if ( this[73] ) { if ( *v4 ) sub_402270(*v4); *v4 = 0; if ( *v4 ) InterlockedIncrement(*v4 + 1); } v3 = v2 + 74; if ( v2[74] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; if ( *v3 ) InterlockedIncrement(*v3 + 1); } if ( v2[74] ) sub_402270(v2[74]); if ( v2[73] ) sub_402270(v2[73]); return sub_8F29C0((void **)v2); } // A427DC: using guessed type void *PgWinCircleGauge::`vftable'; // A427FC: using guessed type void *PgWinCircleGauge::`vftable'; //----- (00909ED0) -------------------------------------------------------- volatile LONG *__cdecl sub_909ED0(int a1, int a2, int a3, int a4, float a5, float a6, int a7) { volatile LONG *result; // eax float *v8; // [esp+14h] [ebp-58h] volatile LONG *v9; // [esp+50h] [ebp-1Ch] void *v10; // [esp+54h] [ebp-18h] float *v11; // [esp+58h] [ebp-14h] volatile LONG *v12; // [esp+5Ch] [ebp-10h] int v13; // [esp+68h] [ebp-4h] v10 = operator new(0x13Cu); v13 = 0; if ( v10 ) v8 = sub_909CB0((float *)v10); else v8 = 0; v11 = v8; v13 = -1; v12 = (volatile LONG *)v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( sub_90A030((float *)v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (0090A030) -------------------------------------------------------- char __thiscall sub_90A030(float *this, int a2, int a3, int a4, int a5, float a6, float a7, int a8) { volatile LONG **v9; // [esp+40h] [ebp-64h] volatile LONG *v10; // [esp+4Ch] [ebp-58h] volatile LONG **v11; // [esp+50h] [ebp-54h] volatile LONG *v12; // [esp+60h] [ebp-44h] volatile LONG **v13; // [esp+64h] [ebp-40h] float v14; // [esp+80h] [ebp-24h] float v15; // [esp+84h] [ebp-20h] float v16; // [esp+88h] [ebp-1Ch] float v17; // [esp+8Ch] [ebp-18h] unsigned int i; // [esp+94h] [ebp-10h] float *v19; // [esp+98h] [ebp-Ch] v9 = (volatile LONG **)this; if ( a6 >= 45.0 && this[75] <= 315.0 ) return 0; v19 = *(float **)(*(_DWORD *)(a4 + 184) + 32); v17 = *v19; v14 = v17; v16 = v19[1]; v15 = v16; for ( i = 1; i < *(unsigned __int16 *)(*(_DWORD *)(a4 + 184) + 12); ++i ) { if ( v14 <= (double)v19[3 * i] ) { if ( v17 < (double)v19[3 * i] ) v17 = v19[3 * i]; } else { v14 = v19[3 * i]; } if ( v15 <= (double)v19[3 * i + 1] ) { if ( v16 < (double)v19[3 * i + 1] ) v16 = v19[3 * i + 1]; } else { v15 = v19[3 * i + 1]; } } v12 = sub_909920(a4); v13 = v9 + 73; if ( v9[73] != v12 ) { if ( *v13 ) sub_402270(*v13); *v13 = v12; if ( *v13 ) InterlockedIncrement(*v13 + 1); } v10 = sub_909920(a4); v11 = v9 + 74; if ( v9[74] != v10 ) { if ( *v11 ) sub_402270(*v11); *v11 = v10; if ( *v11 ) InterlockedIncrement(*v11 + 1); } (*((void (__thiscall **)(volatile LONG **, volatile LONG *, signed int))*v9 + 29))(v9, v9[73], 1); sub_85C4D0(v9); *((_WORD *)v9[73] + 14) &= 0xFFFEu; *((float *)v9 + 75) = a6; *((float *)v9 + 76) = a7; v9[72] = (volatile LONG *)a5; return sub_8F2900( v9, a2, a3, (signed __int64)(v17 + 0.5) - (signed __int64)(v14 + 0.5), (signed __int64)(v16 + 0.5) - (signed __int64)(v15 + 0.5), (_DWORD *)a8, 0, 0); } //----- (0090A3C0) -------------------------------------------------------- signed int __cdecl sub_90A3C0(int a1, unsigned int a2, char a3, char a4) { int v5; // [esp+4h] [ebp-30h] BOOL v6; // [esp+10h] [ebp-24h] float v7; // [esp+28h] [ebp-Ch] float v8; // [esp+28h] [ebp-Ch] unsigned int i; // [esp+2Ch] [ebp-8h] unsigned int j; // [esp+2Ch] [ebp-8h] float v11; // [esp+30h] [ebp-4h] float v12; // [esp+30h] [ebp-4h] v11 = 0.0; v7 = 0.0; for ( i = 0; i < a2; ++i ) { v11 = v11 + *(float *)(a1 + 12 * i); v7 = v7 + *(float *)(a1 + 12 * i + 4); } v12 = v11 / (double)a2; v8 = v7 / (double)a2; for ( j = 0; j < a2; ++j ) { if ( a3 ) v6 = *(float *)(a1 + 12 * j) < (double)v12; else v6 = *(float *)(a1 + 12 * j) > (double)v12; if ( v6 ) { v5 = a4 ? (unsigned __int8)(*(float *)(a1 + 12 * j + 4) < (double)v8) : (unsigned __int8)(*(float *)(a1 + 12 * j + 4) > (double)v8); if ( v5 ) return j; } } return -1; } //----- (0090A550) -------------------------------------------------------- void __thiscall sub_90A550(int this) { int v1; // ST134_4 unsigned int v2; // STFC_4 float v3; // ST3C_4 float v4; // ST38_4 float v5; // ST34_4 float v6; // ST30_4 float v7; // ST2C_4 float v8; // ST28_4 float v9; // ST24_4 float v10; // ST20_4 float v11; // ST1C_4 float v12; // ST18_4 float v13; // ST14_4 float v14; // ST10_4 _DWORD *v15; // ecx _DWORD *v16; // edx _DWORD *v17; // edx _DWORD *v18; // eax int v19; // [esp+60h] [ebp-ECh] float v20; // [esp+F4h] [ebp-58h] float *v21; // [esp+F8h] [ebp-54h] unsigned int v22; // [esp+FCh] [ebp-50h] float v23; // [esp+100h] [ebp-4Ch] float *v24; // [esp+104h] [ebp-48h] float *v25; // [esp+108h] [ebp-44h] unsigned int v26; // [esp+110h] [ebp-3Ch] unsigned int v27; // [esp+114h] [ebp-38h] float *v28; // [esp+118h] [ebp-34h] float *v29; // [esp+11Ch] [ebp-30h] float *v30; // [esp+12Ch] [ebp-20h] unsigned int i; // [esp+130h] [ebp-1Ch] bool v32; // [esp+137h] [ebp-15h] signed int v33; // [esp+138h] [ebp-14h] int v34; // [esp+140h] [ebp-Ch] char *v35; // [esp+144h] [ebp-8h] char *v36; // [esp+148h] [ebp-4h] v19 = this; v35 = *(char **)(*(_DWORD *)(*(_DWORD *)(this + 296) + 184) + 32); v36 = *(char **)(*(_DWORD *)(*(_DWORD *)(this + 296) + 184) + 44); v1 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(this + 296) + 184) + 68); if ( *(float *)(this + 300) < 45.0 || *(float *)(this + 300) > 315.0 ) { v22 = *(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(this + 296) + 184) + 12) / 3u; if ( 0.0 == *(float *)(this + 312) ) v23 = *(float *)(this + 300); else v23 = (*(float *)(this + 304) - *(float *)(this + 300)) * *(float *)(this + 308) / *(float *)(this + 312) + *(float *)(this + 300); v26 = (signed __int64)(*(float *)(this + 304) / 45.0); v27 = (signed __int64)(v23 / 45.0); if ( v27 >= v22 ) v27 = v22 - 1; if ( v26 >= v22 ) v26 = v22 - 1; if ( !(unsigned int)(signed __int64)(*(float *)(this + 300) / 45.0) ) { memcpy(*(void **)(*(_DWORD *)(*(_DWORD *)(this + 292) + 184) + 32), v35, 36 * (v27 + 1)); memcpy(*(void **)(*(_DWORD *)(*(_DWORD *)(v19 + 292) + 184) + 44), v36, 24 * (v27 + 1)); v32 = (v27 + 1) % 8 <= 3; if ( *(_DWORD *)(v19 + 288) == 1 ) v32 = (v27 + 1) % 8 > 3; v33 = sub_90A3C0((int)&v35[36 * v27], 3u, v32, (v27 + 7) % 8 <= 3); if ( v33 != -1 ) { v2 = (v33 + 2 * (unsigned int)(*(_DWORD *)(v19 + 288) == 0) - 1 + 3) % 3; v29 = (float *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v19 + 292) + 184) + 32) + 12 * (v33 + 3 * v27)); v24 = (float *)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v19 + 292) + 184) + 44) + 8 * (v33 + 3 * v27)); v21 = (float *)&v35[12 * (v2 + 3 * v27)]; v25 = (float *)&v35[12 * (v33 + 3 * v27)]; v28 = (float *)&v36[8 * (v2 + 3 * v27)]; v30 = (float *)&v36[8 * (v33 + 3 * v27)]; v20 = v23 * 3.140000104904175 / 180.0; if ( (v27 + 3) % 4 < 2 ) { if ( v27 % 4 == 1 ) { v7 = 1.570000052452087 - v20; v8 = tan(v7); v29[1] = (v25[1] - v21[1]) * (1.0 - v8) + v21[1]; v9 = 1.570000052452087 - v20; v10 = tan(v9); v24[1] = (v30[1] - v28[1]) * (1.0 - v10) + v28[1]; } else if ( v27 % 4 == 2 ) { v11 = v20 - 1.570000052452087; v12 = tan(v11); v29[1] = (v25[1] - v21[1]) * v12 + v21[1]; v13 = v20 - 1.570000052452087; v14 = tan(v13); v24[1] = (v30[1] - v28[1]) * v14 + v28[1]; } } else if ( v27 % 4 ) { if ( v27 % 4 == 3 ) { v5 = tan(-v20); *v29 = (*v25 - *v21) * (1.0 - v5) + *v21; v6 = tan(-v20); *v24 = (*v30 - *v28) * (1.0 - v6) + *v28; } } else { v3 = tan(v20); *v29 = (*v25 - *v21) * v3 + *v21; v4 = tan(v20); *v24 = (*v30 - *v28) * v4 + *v28; } v34 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v19 + 292) + 184) + 32); for ( i = v27 + 1; i <= v26; ++i ) { v15 = (_DWORD *)(v34 + 36 * i); v16 = (_DWORD *)(v34 + 12 * (3 * i + 1)); *v16 = *v15; v16[1] = v15[1]; v16[2] = v15[2]; v17 = (_DWORD *)(v34 + 36 * i); v18 = (_DWORD *)(v34 + 12 * (3 * i + 2)); *v18 = *v17; v18[1] = v17[1]; v18[2] = v17[2]; } *(_WORD *)(*(_DWORD *)(*(_DWORD *)(v19 + 292) + 184) + 50) |= 9u; } } } } //----- (0090AD70) -------------------------------------------------------- _DWORD *__thiscall sub_90AD70(_DWORD *this) { _DWORD *v1; // ST10_4 char v3; // [esp+1Fh] [ebp-15h] char *v4; // [esp+20h] [ebp-14h] int v5; // [esp+30h] [ebp-4h] v1 = this; sub_8F4870(this); v5 = 0; *v1 = &PgWinAbbreviateText::`vftable'; v1[58] = &PgWinAbbreviateText::`vftable'; v4 = &v3; LOBYTE(v5) = 1; sub_4014A0(v1 + 76, 0, 0); v1[73] = 0; *((_BYTE *)v1 + 296) = 0; *((_BYTE *)v1 + 297) = 0; v1[75] = 0; return v1; } // A429DC: using guessed type void *PgWinAbbreviateText::`vftable'; // A429FC: using guessed type void *PgWinAbbreviateText::`vftable'; //----- (0090AE30) -------------------------------------------------------- void *__thiscall sub_90AE30(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90AE60(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090AE60) -------------------------------------------------------- LONG __thiscall sub_90AE60(_DWORD *this) { void *v1; // ST0C_4 v1 = this; *this = &PgWinAbbreviateText::`vftable'; this[58] = &PgWinAbbreviateText::`vftable'; sub_4014A0(this + 76, 1, 0); return sub_8F4990(v1); } // A429DC: using guessed type void *PgWinAbbreviateText::`vftable'; // A429FC: using guessed type void *PgWinAbbreviateText::`vftable'; //----- (0090AEF0) -------------------------------------------------------- volatile LONG *__cdecl sub_90AEF0(int a1, int a2, int a3, int a4, volatile LONG *a5, _DWORD *a6, int a7, int a8, volatile LONG *a9, char a10, volatile LONG *a11, volatile LONG *a12) { volatile LONG *result; // eax volatile LONG *v13; // [esp+8h] [ebp-58h] volatile LONG *v14; // [esp+44h] [ebp-1Ch] _DWORD *v15; // [esp+48h] [ebp-18h] volatile LONG *v16; // [esp+4Ch] [ebp-14h] volatile LONG *v17; // [esp+50h] [ebp-10h] int v18; // [esp+5Ch] [ebp-4h] v15 = operator new(0x150u); v18 = 0; if ( v15 ) v13 = sub_90AD70(v15); else v13 = 0; v16 = v13; v18 = -1; v17 = v13; if ( v13 ) InterlockedIncrement(v17 + 1); v18 = 1; sub_403790(&unk_BA6B10, (int)v17); if ( sub_90B060((volatile LONG **)v17, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) ) { (*(void (__thiscall **)(volatile LONG *))(*v17 + 356))(v17); v18 = -1; if ( v17 ) sub_402270(v17); result = v17; } else { sub_403A70(&unk_BA6B10, &v14, v17); if ( v14 ) sub_402270(v14); v18 = -1; if ( v17 ) sub_402270(v17); result = 0; } return result; } //----- (0090B060) -------------------------------------------------------- char __thiscall sub_90B060(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9, volatile LONG *a10, char a11, volatile LONG *a12, volatile LONG *a13) { int v14; // [esp+4h] [ebp-44h] volatile LONG **v15; // [esp+8h] [ebp-40h] volatile LONG **v16; // [esp+10h] [ebp-38h] _DWORD *v17; // [esp+20h] [ebp-28h] char v18; // [esp+28h] [ebp-20h] int v19; // [esp+44h] [ebp-4h] v15 = this; if ( !sub_8F2900(this, a2, a3, a4, a5, a7, a8, a9) ) return 0; if ( a6 ) { v17 = operator new(0x14Cu); v19 = 0; if ( v17 ) v14 = sub_90EEA0(v17, a6); else v14 = 0; v19 = -1; v16 = v15 + 72; if ( v15[72] != (volatile LONG *)v14 ) { if ( *v16 ) sub_402270(*v16); *v16 = (volatile LONG *)v14; if ( *v16 ) InterlockedIncrement(*v16 + 1); } (*((void (__thiscall **)(volatile LONG **, char *))*v15 + 47))(v15, &v18); (*((void (__thiscall **)(volatile LONG **, char *))*v15 + 115))(v15, &v18); (*((void (__thiscall **)(volatile LONG **, volatile LONG *, _DWORD))*v15 + 29))(v15, v15[72], 0); sub_85C4D0(v15); v15[73] = a10; *((_BYTE *)v15 + 296) = a11; v15[75] = a12; v15[83] = a13; if ( *((_BYTE *)v15 + 296) ) (*((void (__thiscall **)(volatile LONG **, signed int))*v15 + 60))(v15, 1); } return 1; } //----- (0090B220) -------------------------------------------------------- void __thiscall sub_90B220(void **this, void *a2) { void **v2; // [esp+1Ch] [ebp-A4h] char v3; // [esp+38h] [ebp-88h] char v4; // [esp+39h] [ebp-87h] v2 = this; if ( a2 ) { sub_4018E0(this + 76, a2, strlen((const char *)a2)); if ( v2[72] ) { if ( *((_BYTE *)v2 + 296) || v2[73] ) { v3 = 0; memset(&v4, 0, 0x7Fu); if ( sub_90BC50(v2, (LPCSTR)a2, 0, 0, &v3) ) { (*(void (__thiscall **)(void *, char *))(*(_DWORD *)v2[72] + 148))(v2[72], &v3); return; } (*(void (__thiscall **)(void *, const CHAR *))(*(_DWORD *)v2[72] + 148))(v2[72], &byte_9A8050); } (*(void (__thiscall **)(void *, void *))(*(_DWORD *)v2[72] + 148))(v2[72], a2); } } } //----- (0090B3F0) -------------------------------------------------------- int __stdcall sub_90B3F0(const char *a1) { int v2; // [esp+14h] [ebp-4h] if ( !a1 ) return 0; if ( !strlen(a1) ) return 0; v2 = 0; while ( *a1 ) { if ( IsDBCSLeadByte(*a1) ) { a1 += 2; v2 += 2; } else { ++a1; ++v2; } } return v2; } //----- (0090B490) -------------------------------------------------------- void __stdcall sub_90B490(const char *a1, char *a2, signed int a3) { char v3; // al char *v4; // [esp+18h] [ebp-1B4h] int *v5; // [esp+1Ch] [ebp-1B0h] int *v6; // [esp+20h] [ebp-1ACh] char v7; // [esp+DBh] [ebp-F1h] char *v8; // [esp+DCh] [ebp-F0h] char v9; // [esp+E7h] [ebp-E5h] char *v10; // [esp+E8h] [ebp-E4h] char v11; // [esp+F0h] [ebp-DCh] char *v12; // [esp+170h] [ebp-5Ch] BYTE v13; // [esp+174h] [ebp-58h] char v14; // [esp+175h] [ebp-57h] char v15; // [esp+176h] [ebp-56h] int v16; // [esp+178h] [ebp-54h] unsigned int v17; // [esp+188h] [ebp-44h] int v18; // [esp+194h] [ebp-38h] char *v19; // [esp+198h] [ebp-34h] char v20; // [esp+19Eh] [ebp-2Eh] char v21; // [esp+19Fh] [ebp-2Dh] int v22; // [esp+1A0h] [ebp-2Ch] unsigned int v23; // [esp+1B4h] [ebp-18h] int v24; // [esp+1C8h] [ebp-4h] v18 = 0; v21 = 0; v20 = 1; v19 = 0; v10 = &v9; v24 = 0; sub_4014A0(&v22, 0, 0); v24 = 1; v8 = &v7; LOBYTE(v24) = 2; sub_4014A0(&v16, 0, 0); LOBYTE(v24) = 3; v19 = a2; if ( !a2 ) { LOBYTE(v24) = 4; sub_4014A0(&v16, 1, 0); v24 = 5; sub_4014A0(&v22, 1, 0); v24 = -1; return; } while ( *v19 ) { v13 = *v19++; if ( v13 != 13 && v13 != 10 ) { if ( v13 == 123 ) { if ( v20 ) sub_40AB50(&v22, 1u, 123); if ( *v19 == 123 ) { v14 = 0; goto LABEL_63; } while ( *v19 == 32 ) ++v19; v12 = &v11; while ( *v19 && *v19 != 44 && v12 - &v11 < 64 ) { if ( *v19 != 32 ) *v12++ = *v19; ++v19; } *v12 = 0; ++v19; if ( !_stricmp(&v11, "color") ) { if ( v20 ) { sub_401D10((int)&v22, &v11, strlen(&v11)); sub_40AB50(&v22, 1u, 44); } while ( *v19 == 32 ) ++v19; v12 = &v11; while ( *v19 != 44 && v12 - &v11 < 64 ) { if ( *v19 != 32 ) *v12++ = *v19; ++v19; } *v12 = 0; ++v19; if ( !_stricmp(&v11, "red") || !_stricmp(&v11, "blue") || !_stricmp(&v11, "yellow") || !_stricmp(&v11, "lightblue") || !_stricmp(&v11, "lightgreen") ) { if ( v20 ) { sub_401D10((int)&v22, &v11, strlen(&v11)); sub_40AB50(&v22, 1u, 44); } while ( *v19 == 32 ) ++v19; v12 = &v11; while ( *v19 != 125 && v12 - &v11 < 64 ) { if ( *v19 != 32 ) *v12++ = *v19; ++v19; } *v12 = 0; v12 = &v11; while ( *v12 ) { v13 = *v12++; if ( IsDBCSLeadByte(v13) ) { v14 = *v12++; v15 = 0; v18 += 2; } else { v14 = 0; ++v18; } if ( v20 ) { sub_401D10((int)&v22, &v13, strlen((const char *)&v13)); if ( v18 > a3 ) { sub_40AB50(&v22, 1u, 125); v20 = 0; } } sub_401D10((int)&v16, &v13, strlen((const char *)&v13)); } } } } else if ( v13 == 125 ) { if ( v20 ) sub_40AB50(&v22, 1u, 125); } else { if ( IsDBCSLeadByte(v13) ) { v14 = *v19++; v15 = 0; v18 += 2; } else { v14 = 0; ++v18; } LABEL_63: if ( v20 ) { sub_401D10((int)&v22, &v13, strlen((const char *)&v13)); if ( v18 > a3 ) v20 = 0; } sub_401D10((int)&v16, &v13, strlen((const char *)&v13)); } } } if ( v23 < 0x10 ) v6 = &v22; else v6 = (int *)v22; v5 = v6; v4 = (char *)a1; do { v3 = *(_BYTE *)v5; *v4 = *(_BYTE *)v5; v5 = (int *)((char *)v5 + 1); ++v4; } while ( v3 ); if ( v17 > a3 ) *(_DWORD *)&a1[strlen(a1)] = 3026478; LOBYTE(v24) = 6; sub_4014A0(&v16, 1, 0); v24 = 7; sub_4014A0(&v22, 1, 0); } // 9EBBB0: using guessed type int dword_9EBBB0; //----- (0090BC50) -------------------------------------------------------- char __thiscall sub_90BC50(void **this, LPCSTR a2, int a3, int a4, char *a5) { int v5; // eax int v6; // ST08_4 HDC *v7; // eax int v8; // ST08_4 HDC *v9; // eax char v10; // ST47_1 char v11; // ST2B_1 int v12; // ST08_4 HDC *v13; // eax char result; // al char *v15; // [esp+20h] [ebp-350h] unsigned int v16; // [esp+34h] [ebp-33Ch] char *v17; // [esp+3Ch] [ebp-334h] const CHAR *v18; // [esp+50h] [ebp-320h] int *lpString; // [esp+54h] [ebp-31Ch] void **v20; // [esp+80h] [ebp-2F0h] char v21; // [esp+123h] [ebp-24Dh] char *v22; // [esp+124h] [ebp-24Ch] char v23; // [esp+12Ch] [ebp-244h] char v24; // [esp+12Dh] [ebp-243h] char v25; // [esp+1ACh] [ebp-1C4h] char v26; // [esp+1ADh] [ebp-1C3h] char v27; // [esp+22Bh] [ebp-145h] CHAR String; // [esp+22Ch] [ebp-144h] char v29; // [esp+22Dh] [ebp-143h] char v30[128]; // [esp+2ACh] [ebp-C4h] char v31[128]; // [esp+2ADh] [ebp-C3h] char *v32; // [esp+32Ch] [ebp-44h] BYTE v33; // [esp+330h] [ebp-40h] __int16 v34; // [esp+331h] [ebp-3Fh] BYTE *v35; // [esp+334h] [ebp-3Ch] int v36; // [esp+338h] [ebp-38h] unsigned int v37; // [esp+34Ch] [ebp-24h] unsigned int v38; // [esp+358h] [ebp-18h] char v39; // [esp+35Fh] [ebp-11h] char *v40; // [esp+360h] [ebp-10h] int v41; // [esp+36Ch] [ebp-4h] v20 = this; v38 = sub_90B3F0(a2); v40 = 0; v39 = 0; if ( v20[73] ) { v40 = (char *)v20[73]; goto LABEL_67; } v33 = 0; v34 = 0; v35 = (BYTE *)a2; v22 = &v21; v41 = 0; sub_4014A0(&v36, 0, 0); v41 = 1; while ( *v35 ) { v33 = *v35++; if ( v33 != 13 && v33 != 10 ) { if ( v33 == 123 ) { if ( *v35 == 123 ) { LOBYTE(v34) = 0; goto LABEL_48; } if ( !v39 ) v39 = 1; while ( *v35 == 32 ) ++v35; v32 = v30; while ( *v35 && *v35 != 44 && v32 - v30 < 64 ) { if ( *v35 != 32 ) *v32++ = *v35; ++v35; } *v32 = 0; ++v35; if ( _stricmp(v30, "color") ) goto LABEL_48; while ( *v35 == 32 ) ++v35; v32 = v30; while ( *v35 != 44 && v32 - v30 < 64 ) { if ( *v35 != 32 ) *v32++ = *v35; ++v35; } *v32 = 0; ++v35; if ( !_stricmp(v30, "red") || !_stricmp(v30, "blue") || !_stricmp(v30, "yellow") || !_stricmp(v30, "lightblue") || !_stricmp(v30, "lightgreen") ) { while ( *v35 == 32 ) ++v35; v32 = v30; while ( *v35 != 125 && v32 - v30 < 64 ) { if ( *v35 != 32 ) *v32++ = *v35; ++v35; } *v32 = 0; sub_401D10((int)&v36, v30, &v30[strlen(v30) + 1] - v31); ++v35; } else { LABEL_48: sub_401D10((int)&v36, &v33, &v33 + strlen((const char *)&v33) + 1 - (BYTE *)&v34); } } else if ( v33 != 125 ) { if ( IsDBCSLeadByte(v33) ) v34 = *v35++; else LOBYTE(v34) = 0; goto LABEL_48; } } } if ( v39 ) { if ( v37 < 0x10 ) v5 = sub_90B3F0((const char *)&v36); else v5 = sub_90B3F0((const char *)v36); v38 = v5; } if ( v37 < 0x10 ) lpString = &v36; else lpString = (int *)v36; v6 = (*((int (__thiscall **)(void **))*v20 + 36))(v20) - (_DWORD)v20[83]; v7 = (HDC *)(*((int (__thiscall **)(void **))*v20 + 114))(v20); v40 = (char *)sub_5FBAD0(v7, (LPCSTR)lpString, v6); v41 = 2; sub_4014A0(&v36, 1, 0); v41 = -1; if ( !v39 ) { if ( a3 ) { String = 0; memset(&v29, 0, 0x7Fu); v18 = &a2[strlen(a2) + 1]; v17 = &v27; do v10 = (v17++)[1]; while ( v10 ); qmemcpy(v17, a2, v18 - a2); v16 = a3 + strlen((const char *)a3) + 1; v15 = &v27; do v11 = (v15++)[1]; while ( v11 ); qmemcpy(v15, (const void *)a3, v16 - a3); v12 = (*((int (__thiscall **)(void **))*v20 + 36))(v20) - (_DWORD)v20[83]; v13 = (HDC *)(*((int (__thiscall **)(void **))*v20 + 114))(v20); v40 = (char *)sub_5FBAD0(v13, &String, v12); } else { v8 = (*((int (__thiscall **)(void **))*v20 + 36))(v20) - (_DWORD)v20[83]; v9 = (HDC *)(*((int (__thiscall **)(void **))*v20 + 114))(v20); v40 = (char *)sub_5FBAD0(v9, a2, v8); } } LABEL_67: v40 += a4; if ( (signed int)v40 > 0 ) { if ( v38 <= (unsigned int)v40 ) { v20[68] = 0; (*((void (__thiscall **)(void **, _DWORD))*v20 + 60))(v20, 0); result = 0; } else { v23 = 0; memset(&v24, 0, 0x7Fu); v25 = 0; memset(&v26, 0, 0x7Fu); strncpy(&v25, a2, 0x80u); v27 = 0; if ( v39 ) sub_90B490(&v23, &v25, (signed int)v40); else sub_90C6C0(&v23, &v25, (int)v40); if ( v20[75] ) { v20[68] = v20[75]; sub_8F2EA0(v20, a2); } (*((void (__thiscall **)(void **, signed int))*v20 + 60))(v20, 1); strncpy(a5, &v23, &v23 + strlen(&v23) + 1 - &v24); result = 1; } } else { v20[68] = 0; (*((void (__thiscall **)(void **, _DWORD))*v20 + 60))(v20, 0); result = 0; } return result; } // 90BC50: using guessed type char var_C4[128]; //----- (0090C520) -------------------------------------------------------- int __thiscall sub_90C520(_BYTE *this, _BYTE *a2) { int result; // eax int v3; // [esp+0h] [ebp-28h] _BYTE *v4; // [esp+4h] [ebp-24h] POINT v5; // [esp+1Ch] [ebp-Ch] int v6; // [esp+24h] [ebp-4h] v4 = this; result = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)this + 312))(this); if ( (_BYTE)result ) { *a2 = (*(int (__thiscall **)(_BYTE *, LONG, LONG))(*(_DWORD *)v4 + 348))(v4, pt.x, pt.y); if ( dword_BA6AA8 >= 1 ) v4[297] = 1; if ( dword_BA6AB4 >= 1 ) { if ( *a2 ) { if ( v4[297] ) { v4[297] = 0; v6 = sub_402BF0(v4); if ( v6 ) { (*(void (__thiscall **)(_BYTE *, LONG, LONG))(*(_DWORD *)v4 + 348))(v4, pt.x, pt.y); v5 = pt; if ( v4 ) v3 = (int)(v4 + 232); else v3 = 0; (*(void (__thiscall **)(_BYTE *, signed int, POINT *, int))(*((_DWORD *)v4 + 58) + 12))( v4 + 232, 3, &v5, v3); sub_431140((_DWORD **)v4 + 58, 3, (int)&v5, 1); } } } } result = (unsigned __int8)*a2; if ( *a2 ) { if ( v4[268] ) { result = (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)v4 + 244))(v4); if ( (_BYTE)result ) { if ( !dword_BA6B9C ) dword_BA6B9C = (int)v4; } } } } return result; } // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB4: using guessed type int dword_BA6AB4; // BA6B9C: using guessed type int dword_BA6B9C; //----- (0090C6C0) -------------------------------------------------------- int __stdcall sub_90C6C0(char *a1, const char *a2, int a3) { char v3; // dl int result; // eax char v5; // ST0B_1 char *v6; // [esp+8h] [ebp-20h] _BYTE *v7; // [esp+14h] [ebp-14h] const char *v8; // [esp+18h] [ebp-10h] int v9; // [esp+20h] [ebp-8h] int v10; // [esp+24h] [ebp-4h] _BYTE *v11; // [esp+30h] [ebp+8h] _BYTE *v12; // [esp+34h] [ebp+Ch] v10 = sub_90B3F0(a2); if ( v10 && v10 >= a3 ) { v9 = 0; while ( v9 < a3 ) { if ( IsDBCSLeadByte(*a2) ) { if ( v9 + 2 > a3 ) break; *a1 = *a2; v12 = a2 + 1; v11 = a1 + 1; *v11 = *v12; a2 = v12 + 1; a1 = v11 + 1; v9 += 2; } else { *a1++ = *a2++; ++v9; } } v6 = a1 - 1; do { result = (int)v6; v5 = (v6++)[1]; } while ( v5 ); *(_DWORD *)v6 = 3026478; } else { v8 = a2; v7 = a1; do { v3 = *v8; *v7 = *v8; result = (int)(v8++ + 1); ++v7; } while ( v3 ); } return result; } // 9EBBB0: using guessed type int dword_9EBBB0; //----- (0090C800) -------------------------------------------------------- int __thiscall sub_90C800(_DWORD *this) { int v2; // [esp+0h] [ebp-Ch] if ( this[81] < 0x10u ) v2 = (int)(this + 76); else v2 = this[76]; return v2; } //----- (0090C840) -------------------------------------------------------- _DWORD *__thiscall sub_90C840(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8FE000(this); *v1 = &PgWinCloseBut::`vftable'; v1[58] = &PgWinCloseBut::`vftable'; return v1; } // A42BF4: using guessed type void *PgWinCloseBut::`vftable'; // A42C14: using guessed type void *PgWinCloseBut::`vftable'; //----- (0090C870) -------------------------------------------------------- void *__thiscall sub_90C870(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90C8A0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090C8A0) -------------------------------------------------------- LONG __thiscall sub_90C8A0(_DWORD *this) { *this = &PgWinCloseBut::`vftable'; this[58] = &PgWinCloseBut::`vftable'; return sub_8FE0C0(this); } // A42BF4: using guessed type void *PgWinCloseBut::`vftable'; // A42C14: using guessed type void *PgWinCloseBut::`vftable'; //----- (0090C8D0) -------------------------------------------------------- volatile LONG *__cdecl sub_90C8D0(int a1, int a2, int a3, int a4) { volatile LONG *result; // eax volatile LONG *v5; // [esp+Ch] [ebp-54h] volatile LONG *v6; // [esp+44h] [ebp-1Ch] _DWORD *v7; // [esp+48h] [ebp-18h] volatile LONG *v8; // [esp+4Ch] [ebp-14h] volatile LONG *v9; // [esp+50h] [ebp-10h] int v10; // [esp+5Ch] [ebp-4h] v7 = operator new(0x144u); v10 = 0; if ( v7 ) v5 = sub_90C840(v7); else v5 = 0; v8 = v5; v10 = -1; v9 = v5; if ( v5 ) InterlockedIncrement(v9 + 1); v10 = 1; sub_403790(&unk_BA6B10, (int)v9); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, _DWORD, _DWORD, _DWORD))(*v9 + 548))( v9, a1, a2, a3, a4, 0, 0, 0) ) { (*(void (__thiscall **)(volatile LONG *))(*v9 + 356))(v9); v10 = -1; if ( v9 ) sub_402270(v9); result = v9; } else { sub_403A70(&unk_BA6B10, &v6, v9); if ( v6 ) sub_402270(v6); v10 = -1; if ( v9 ) sub_402270(v9); result = 0; } return result; } //----- (0090CA30) -------------------------------------------------------- char __thiscall sub_90CA30(_DWORD *this) { volatile LONG *v1; // eax v1 = (volatile LONG *)sub_402BF0(this); if ( v1 ) LOBYTE(v1) = sub_8F2BC0(v1, 1, 0, 0); return (char)v1; } //----- (0090CA60) -------------------------------------------------------- float *__thiscall sub_90CA60(float *this) { float *v1; // ST00_4 v1 = this; sub_8F3C20(this); *(_DWORD *)v1 = &PgWinBar::`vftable'; *((_DWORD *)v1 + 58) = &PgWinBar::`vftable'; v1[75] = 100.0; v1[76] = 100.0; *((_DWORD *)v1 + 74) = 2; return v1; } // A42E48: using guessed type void *PgWinBar::`vftable'; // A42E64: using guessed type void *PgWinBar::`vftable'; //----- (0090CAC0) -------------------------------------------------------- void *__thiscall sub_90CAC0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90CAF0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090CAF0) -------------------------------------------------------- LONG __thiscall sub_90CAF0(_DWORD *this) { *this = &PgWinBar::`vftable'; this[58] = &PgWinBar::`vftable'; return sub_8F3CC0(this); } // A42E48: using guessed type void *PgWinBar::`vftable'; // A42E64: using guessed type void *PgWinBar::`vftable'; //----- (0090CB20) -------------------------------------------------------- volatile LONG *__cdecl sub_90CB20(int a1, int a2, int a3, int a4, int a5) { volatile LONG *result; // eax float *v6; // [esp+Ch] [ebp-54h] volatile LONG *v7; // [esp+44h] [ebp-1Ch] float *v8; // [esp+48h] [ebp-18h] float *v9; // [esp+4Ch] [ebp-14h] volatile LONG *v10; // [esp+50h] [ebp-10h] int v11; // [esp+5Ch] [ebp-4h] v8 = (float *)operator new(0x134u); v11 = 0; if ( v8 ) v6 = sub_90CA60(v8); else v6 = 0; v9 = v6; v11 = -1; v10 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement(v10 + 1); v11 = 1; sub_403790(&unk_BA6B10, (int)v10); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, _DWORD, _DWORD))(*v10 + 508))( v10, a1, a2, a3, a4, 0, 0) ) { *((_DWORD *)v10 + 74) = a5; (*(void (__thiscall **)(volatile LONG *))(*v10 + 356))(v10); v11 = -1; if ( v10 ) sub_402270(v10); result = v10; } else { sub_403A70(&unk_BA6B10, &v7, v10); if ( v7 ) sub_402270(v7); v11 = -1; if ( v10 ) sub_402270(v10); result = 0; } return result; } //----- (0090CC80) -------------------------------------------------------- volatile LONG *__cdecl sub_90CC80(int a1, int a2, int a3, unsigned __int8 a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { volatile LONG *result; // eax float *v13; // [esp+Ch] [ebp-54h] volatile LONG *v14; // [esp+44h] [ebp-1Ch] float *v15; // [esp+48h] [ebp-18h] float *v16; // [esp+4Ch] [ebp-14h] volatile LONG *v17; // [esp+50h] [ebp-10h] int v18; // [esp+5Ch] [ebp-4h] v15 = (float *)operator new(0x134u); v18 = 0; if ( v15 ) v13 = sub_90CA60(v15); else v13 = 0; v16 = v13; v18 = -1; v17 = (volatile LONG *)v13; if ( v13 ) InterlockedIncrement(v17 + 1); v18 = 1; sub_403790(&unk_BA6B10, (int)v17); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, _DWORD, int, int, int, int, int, int, int))(*v17 + 504))( v17, a1, a2, a3, a4, a5, a6, a7, a8, a9, a11, a12) ) { *((_DWORD *)v17 + 74) = a10; (*(void (__thiscall **)(volatile LONG *))(*v17 + 356))(v17); v18 = -1; if ( v17 ) sub_402270(v17); result = v17; } else { sub_403A70(&unk_BA6B10, &v14, v17); if ( v14 ) sub_402270(v14); v18 = -1; if ( v17 ) sub_402270(v17); result = 0; } return result; } //----- (0090CE00) -------------------------------------------------------- _DWORD *__thiscall sub_90CE00(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8F4870(this); *v1 = &PgWinEditText::`vftable'; v1[58] = &PgWinEditText::`vftable'; return v1; } // A4306C: using guessed type void *PgWinEditText::`vftable'; // A4308C: using guessed type void *PgWinEditText::`vftable'; //----- (0090CE30) -------------------------------------------------------- void *__thiscall sub_90CE30(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90CE60(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090CE60) -------------------------------------------------------- LONG __thiscall sub_90CE60(_DWORD *this) { *this = &PgWinEditText::`vftable'; this[58] = &PgWinEditText::`vftable'; return sub_8F4990(this); } // A4306C: using guessed type void *PgWinEditText::`vftable'; // A4308C: using guessed type void *PgWinEditText::`vftable'; //----- (0090CE90) -------------------------------------------------------- volatile LONG *__cdecl sub_90CE90(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x124u); v14 = 0; if ( v11 ) v9 = sub_90CE00(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 496))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (0090CFF0) -------------------------------------------------------- char __thiscall sub_90CFF0(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9) { volatile LONG *v10; // [esp+4h] [ebp-44h] volatile LONG **v11; // [esp+8h] [ebp-40h] volatile LONG **v12; // [esp+10h] [ebp-38h] _DWORD *v13; // [esp+20h] [ebp-28h] char v14; // [esp+28h] [ebp-20h] int v15; // [esp+44h] [ebp-4h] v11 = this; if ( !sub_8F4B80(this, a2, a3, a4, a5, 0, a7, a8, a9) ) return 0; if ( a6 ) { v13 = operator new(0x150u); v15 = 0; if ( v13 ) v10 = sub_912780(v13, a6); else v10 = 0; v15 = -1; v12 = v11 + 72; if ( v11[72] != v10 ) { if ( *v12 ) sub_402270(*v12); *v12 = v10; if ( *v12 ) InterlockedIncrement(*v12 + 1); } (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 47))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 115))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, volatile LONG *, _DWORD))*v11 + 29))(v11, v11[72], 0); sub_85C4D0(v11); } return 1; } //----- (0090D160) -------------------------------------------------------- int __thiscall sub_90D160(void *this, int a2, int a3) { void *v3; // ST04_4 int v4; // eax v3 = this; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 16))(a3); return (*(int (__thiscall **)(void *, int))(*(_DWORD *)v3 + 472))(v3, v4); } //----- (0090D1A0) -------------------------------------------------------- char __thiscall sub_90D1A0(_DWORD *this, int a2, int a3) { volatile LONG *v3; // eax int v5; // [esp+0h] [ebp-1Ch] v5 = (int)this; v3 = (volatile LONG *)sub_402BF0(this); if ( v3 ) LOBYTE(v3) = sub_8F2BC0(v3, 4, a2, v5); return (char)v3; } //----- (0090D1E0) -------------------------------------------------------- int __thiscall sub_90D1E0(void *this, int a2, int a3) { void *v3; // ST08_4 v3 = this; SetWindowTextA(*(HWND *)(a3 + 12), &byte_9A8050); return (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v3 + 368))(v3, a2, a3); } //----- (0090D230) -------------------------------------------------------- _BYTE *__fastcall sub_90D230(int a1, int a2, char a3) { _BYTE *result; // eax char v4; // [esp+7h] [ebp-11h] int i; // [esp+8h] [ebp-10h] int v6; // [esp+Ch] [ebp-Ch] _BYTE *v7; // [esp+14h] [ebp-4h] result = (_BYTE *)a1; if ( *(_DWORD *)(a1 + 288) ) { result = *(_BYTE **)(a1 + 288); v6 = *(_DWORD *)(a1 + 288); if ( v6 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v4 = 1; goto LABEL_10; } } v4 = 0; LABEL_10: result = (_BYTE *)(v4 != 0 ? v6 : 0); v7 = (_BYTE *)(v4 != 0 ? v6 : 0); } else { v7 = 0; } if ( v7 ) result = sub_912800(v7, a3); } return result; } //----- (0090D2D0) -------------------------------------------------------- char __thiscall sub_90D2D0(_DWORD *this) { char result; // al char v2; // [esp+7h] [ebp-11h] int i; // [esp+8h] [ebp-10h] int v4; // [esp+Ch] [ebp-Ch] _BYTE *v5; // [esp+14h] [ebp-4h] if ( !this[72] ) goto LABEL_16; v4 = this[72]; if ( v4 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 4))(v4); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v2 = 1; goto LABEL_10; } } v2 = 0; LABEL_10: v5 = (_BYTE *)(v2 != 0 ? v4 : 0); } else { v5 = 0; } if ( v5 ) result = sub_912820(v5); else LABEL_16: result = 0; return result; } //----- (0090D360) -------------------------------------------------------- _DWORD *__cdecl sub_90D360(int a1, int a2, int a3, int a4, int a5, char a6, int a7, int a8) { _DWORD *result; // eax _DWORD *v9; // [esp+8h] [ebp-24h] _DWORD *v10; // [esp+14h] [ebp-18h] sub_90E140(); v10 = operator new(0x44u); if ( v10 ) v9 = sub_90DE50(v10); else v9 = 0; v9[4] = a2; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, int, int, int))(*v9 + 96))(v9, a1, a3, a7, a8) ) { v9[14] = a4; (*(void (__thiscall **)(_DWORD *, int))(*v9 + 8))(v9, a5); *((_BYTE *)v9 + 60) = a6; *((_BYTE *)v9 + 8) = 0; *((_BYTE *)v9 + 9) = 0; result = v9; } else { if ( v9 ) (*(void (__thiscall **)(_DWORD *, signed int))*v9)(v9, 1); result = 0; } return result; } //----- (0090D470) -------------------------------------------------------- char __thiscall sub_90D470(void *this, unsigned int a2, int a3, int a4) { char v5; // ST17_1 _BYTE *v6; // [esp+Ch] [ebp-B0h] char *v7; // [esp+10h] [ebp-ACh] unsigned int v8; // [esp+14h] [ebp-A8h] int v9; // [esp+30h] [ebp-8Ch] volatile LONG *v10; // [esp+34h] [ebp-88h] volatile LONG *v11; // [esp+5Ch] [ebp-60h] volatile LONG *v12; // [esp+88h] [ebp-34h] unsigned int i; // [esp+A0h] [ebp-1Ch] int v14; // [esp+A4h] [ebp-18h] HDC hdc; // [esp+ACh] [ebp-10h] struct tagSIZE psizl; // [esp+B0h] [ebp-Ch] v9 = (int)this; if ( a2 <= 0x100 ) { if ( a2 == 256 ) { switch ( a3 ) { case 9: case 27: return 0; case 35: case 36: case 37: case 38: case 39: case 40: return (unsigned __int16)(GetAsyncKeyState(16) & 0x8000) != 0; case 127: return 1; default: if ( !*((_DWORD *)this + 16) ) return 0; if ( !*((_BYTE *)this + 36) ) goto LABEL_53; GetWindowTextA(*((HWND *)this + 3), *((LPSTR *)this + 8), *((_DWORD *)this + 5) + 1); hdc = *(HDC *)(*(_DWORD *)(v9 + 40) + 192); if ( !hdc ) goto LABEL_53; if ( !*(_DWORD *)(v9 + 32) ) goto LABEL_53; v8 = strlen(*(const char **)(v9 + 32)); GetTextExtentPoint32A(hdc, *(LPCSTR *)(v9 + 32), v8, &psizl); if ( psizl.cx <= *(_DWORD *)(v9 + 44) ) goto LABEL_53; *(_BYTE *)(v9 + 52) = 1; if ( (unsigned int)(*(_DWORD *)(v9 + 20) - 85) <= *(_DWORD *)(v9 + 48) ) return 0; ++*(_DWORD *)(v9 + 48); v14 = 0; for ( i = 0; i < v8; ++i ) { if ( i > *(_DWORD *)(v9 + 48) ) { v7 = (char *)(i + *(_DWORD *)(v9 + 32)); v6 = (_BYTE *)(v14 + *(_DWORD *)(v9 + 24)); do { v5 = *v7; *v6++ = *v7++; } while ( v5 ); ++v14; } } LABEL_53: v11 = *(volatile LONG **)(v9 + 64); if ( sub_8FA3D0(&unk_BA6B10, v11) ) sub_517DE0(&unk_BA6B54, (int)v11, 3, 0, v9); break; } } else if ( a2 == 32 ) { return 1; } return 0; } if ( a2 > 0x104 ) { if ( a2 == 770 ) return *((_BYTE *)this + 9); return 0; } if ( a2 != 260 ) { if ( a2 == 257 ) { switch ( a3 ) { case 9: if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 84))(this) ) return 0; return 1; case 13: if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 76))(this) ) return 0; return 0; case 18: v12 = (volatile LONG *)*((_DWORD *)this + 16); if ( sub_8FA3D0(&unk_BA6B10, v12) ) sub_517DE0(&unk_BA6B54, (int)v12, 8, 0, v9); return 0; case 27: if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 80))(this) ) return 0; return 1; case 44: SendMessageA(*((HWND *)this + 4), 0x101u, 0x2Cu, 0); return 1; default: return 0; } } else if ( a2 == 258 ) { switch ( a3 ) { case 9: return 1; case 13: return (*(int (__thiscall **)(void *))(*(_DWORD *)this + 64))(this); case 127: return 1; } v10 = (volatile LONG *)*((_DWORD *)this + 16); if ( sub_8FA3D0(&unk_BA6B10, v10) ) sub_517DE0(&unk_BA6B54, (int)v10, 3, 0, v9); } return 0; } if ( a3 != 18 ) { if ( a3 == 121 ) return 1; return 0; } if ( GetFocus() == *((HWND *)this + 3) && *(_BYTE *)(v9 + 8) ) SetFocus(0); return 1; } //----- (0090DB00) -------------------------------------------------------- LRESULT __thiscall sub_90DB00(int this, WPARAM wParam) { LRESULT result; // eax int v3; // [esp+0h] [ebp-1Ch] v3 = this; if ( *(_DWORD *)(this + 20) < (signed int)wParam ) { operator delete[](*(void **)(this + 24)); operator delete[](*(void **)(v3 + 28)); if ( *(_DWORD *)(v3 + 32) ) { operator delete[](*(void **)(v3 + 32)); *(_DWORD *)(v3 + 32) = 0; } *(_DWORD *)(v3 + 32) = operator new[](wParam + 1); memset(*(void **)(v3 + 32), 0, wParam + 1); *(_DWORD *)(v3 + 20) = wParam; *(_DWORD *)(v3 + 24) = operator new[](wParam + 1); *(_DWORD *)(v3 + 28) = operator new[](wParam + 1); } result = v3; if ( *(_DWORD *)(v3 + 12) ) result = SendMessageA(*(HWND *)(v3 + 12), 0xC5u, wParam, 0); return result; } //----- (0090DC10) -------------------------------------------------------- char __thiscall sub_90DC10(void *this) { int v2; // [esp+0h] [ebp-2Ch] volatile LONG *v3; // [esp+4h] [ebp-28h] v2 = (int)this; if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 64))(this) ) return 0; (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 40))(v2); *(_BYTE *)(v2 + 52) = 0; *(_BYTE *)(v2 + 53) = 1; *(_DWORD *)(v2 + 48) = 0; if ( *(_BYTE *)(v2 + 60) ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 24))(v2); if ( *(_DWORD *)(v2 + 64) ) { v3 = *(volatile LONG **)(v2 + 64); if ( sub_8FA3D0(&unk_BA6B10, v3) ) sub_517DE0(&unk_BA6B54, (int)v3, 4, 1, v2); } return 1; } //----- (0090DCF0) -------------------------------------------------------- char __thiscall sub_90DCF0(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-2Ch] volatile LONG *v3; // [esp+4h] [ebp-28h] v2 = this; if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*this + 68))(this) ) return 0; (*(void (__thiscall **)(_DWORD *))(*v2 + 40))(v2); if ( v2[16] ) { v3 = (volatile LONG *)v2[16]; if ( sub_8FA3D0(&unk_BA6B10, v3) ) sub_517DE0(&unk_BA6B54, (int)v3, 4, 4, (int)v2); } return 1; } //----- (0090DD90) -------------------------------------------------------- char __thiscall sub_90DD90(void *this) { int v2; // [esp+0h] [ebp-2Ch] volatile LONG *v3; // [esp+4h] [ebp-28h] v2 = (int)this; if ( !(*(unsigned __int8 (__thiscall **)(void *))(*(_DWORD *)this + 72))(this) ) return 0; (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 40))(v2); if ( *(_BYTE *)(v2 + 60) ) (*(void (__thiscall **)(int))(*(_DWORD *)v2 + 24))(v2); if ( *(_DWORD *)(v2 + 64) ) { v3 = *(volatile LONG **)(v2 + 64); if ( sub_8FA3D0(&unk_BA6B10, v3) ) sub_517DE0(&unk_BA6B54, (int)v3, 4, 2, v2); } return 1; } //----- (0090DE50) -------------------------------------------------------- _DWORD *__thiscall sub_90DE50(_DWORD *this) { _DWORD *v2; // [esp+0h] [ebp-Ch] v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &PgEditWin::`vftable'; v2[10] = 0; if ( v2[10] ) InterlockedIncrement((volatile LONG *)(v2[10] + 4)); v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[14] = 0; v2[16] = 0; v2[8] = 0; *((_BYTE *)v2 + 36) = 0; v2[11] = 0; v2[12] = 0; *((_BYTE *)v2 + 52) = 0; *((_BYTE *)v2 + 53) = 0; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A43294: using guessed type void *PgEditWin::`vftable'; //----- (0090DF30) -------------------------------------------------------- void *__thiscall sub_90DF30(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90DF60(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090DF60) -------------------------------------------------------- LONG __thiscall sub_90DF60(_DWORD *this) { _DWORD *v2; // [esp+4h] [ebp-38h] v2 = this; *this = &PgEditWin::`vftable'; if ( this[3] ) { sub_90E540(&dword_BA6C34, this[3]); DestroyWindow((HWND)v2[3]); } operator delete[]((void *)v2[6]); operator delete[]((void *)v2[7]); operator delete[]((void *)v2[8]); if ( v2[10] ) sub_402270((volatile LONG *)v2[10]); *v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A43294: using guessed type void *PgEditWin::`vftable'; // BA6C34: using guessed type int dword_BA6C34; //----- (0090E050) -------------------------------------------------------- char __thiscall sub_90E050(HWND *this, HINSTANCE hInstance, DWORD dwStyle, int a4, WPARAM wParam) { HWND v5; // eax int v7; // [esp+0h] [ebp-20h] v7 = (int)this; if ( a4 ) v5 = CreateWindowExA( 0x20u, lpClassName, &byte_9A8050, dwStyle, *(_DWORD *)a4, *(_DWORD *)(a4 + 4) - 2780, *(_DWORD *)(a4 + 8) - *(_DWORD *)a4, *(_DWORD *)(a4 + 12) - *(_DWORD *)(a4 + 4), this[4], 0, hInstance, 0); else v5 = CreateWindowExA(0x20u, lpClassName, &byte_9A8050, dwStyle, 0, -2780, 1600, 60, this[4], 0, hInstance, 0); *(_DWORD *)(v7 + 12) = v5; if ( !*(_DWORD *)(v7 + 12) ) return 0; if ( wParam ) SendMessageA(*(HWND *)(v7 + 12), 0x30u, wParam, 1); sub_90E440(&dword_BA6C34, *(_DWORD *)(v7 + 12), v7); return 1; } // BA6C34: using guessed type int dword_BA6C34; //----- (0090E140) -------------------------------------------------------- ATOM sub_90E140() { ATOM result; // ax struct tagWNDCLASSEXA wcx; // [esp+0h] [ebp-30h] if ( !lpPrevWndFunc ) { memset(&wcx, 0, 0x30u); wcx.cbSize = 48; GetClassInfoExA(0, "edit", &wcx); lpPrevWndFunc = wcx.lpfnWndProc; wcx.lpfnWndProc = sub_90E1B0; wcx.lpszClassName = lpClassName; wcx.hCursor = 0; wcx.hbrBackground = 0; result = RegisterClassExA(&wcx); } return result; } //----- (0090E1B0) -------------------------------------------------------- LRESULT __stdcall sub_90E1B0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT result; // eax int v5; // [esp+8h] [ebp-8h] char v6; // [esp+Fh] [ebp-1h] v5 = 0; v6 = sub_8F0140(&dword_BA6C34, (int)hWnd, &v5); if ( v6 && v5 && (*(unsigned __int8 (__thiscall **)(int, UINT, WPARAM, LPARAM))(*(_DWORD *)v5 + 4))(v5, Msg, wParam, lParam) == 1 ) { result = 1; } else { result = CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam); } return result; } // BA6C34: using guessed type int dword_BA6C34; //----- (0090E230) -------------------------------------------------------- int __thiscall sub_90E230(_DWORD *this) { _DWORD *v2; // [esp+10h] [ebp-214h] signed int v3; // [esp+14h] [ebp-210h] BYTE *v4; // [esp+18h] [ebp-20Ch] char v5[512]; // [esp+1Ch] [ebp-208h] char *v6; // [esp+220h] [ebp-4h] v2 = this; v6 = (char *)(*(int (__thiscall **)(_DWORD *))(*this + 16))(this); if ( !v6 || !v2[5] ) return (*(int (__thiscall **)(_DWORD *, const CHAR *))(*v2 + 32))(v2, &byte_9A8050); v3 = strlen(v6); strncpy(v5, v6, v3); v5[v3] = 0; v4 = (BYTE *)v5; while ( v3 > 0 ) { if ( IsDBCSLeadByte(*v4) ) { if ( v3 == 1 ) { *v4 = 0; return (*(int (__thiscall **)(_DWORD *, char *))(*v2 + 32))(v2, v5); } v3 -= 2; v4 += 2; } else { ++v4; --v3; } } return (*(int (__thiscall **)(_DWORD *, char *))(*v2 + 32))(v2, v5); } // 90E230: using guessed type char var_208[512]; //----- (0090E3C0) -------------------------------------------------------- int __thiscall sub_90E3C0(HWND *this) { return (unsigned __int16)SendMessageA(this[3], 0xB0u, 0, 0); } //----- (0090E410) -------------------------------------------------------- LRESULT __thiscall sub_90E410(HWND *this, WPARAM wParam) { return SendMessageA(this[3], 0xB1u, wParam, wParam); } //----- (0090E440) -------------------------------------------------------- int __thiscall sub_90E440(_DWORD *this, int a2, int a3) { int result; // eax _DWORD *v4; // ST10_4 _DWORD *v5; // [esp+0h] [ebp-10h] _DWORD *v6; // [esp+4h] [ebp-Ch] int v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v5 = this; v7 = (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2); v6 = *(_DWORD **)(v5[2] + 4 * v7); v8 = 0; while ( v6 ) { ++v8; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v5 + 8))(v5, a2, v6[1]) ) { (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 16))(v5, v6); return (*(int (__thiscall **)(_DWORD *, _DWORD *, int, int))(*v5 + 12))(v5, v6, a2, a3); } v6 = (_DWORD *)*v6; } v4 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v5 + 20))(v5); (*(void (__thiscall **)(_DWORD *, _DWORD *, int, int))(*v5 + 12))(v5, v4, a2, a3); *v4 = *(_DWORD *)(v5[2] + 4 * v7); *(_DWORD *)(v5[2] + 4 * v7) = v4; result = (int)v5; ++v5[3]; return result; } //----- (0090E540) -------------------------------------------------------- char __thiscall sub_90E540(_DWORD *this, int a2) { _DWORD *v3; // [esp+0h] [ebp-14h] _DWORD *v4; // [esp+4h] [ebp-10h] _DWORD *i; // [esp+8h] [ebp-Ch] _DWORD *v6; // [esp+Ch] [ebp-8h] int v7; // [esp+10h] [ebp-4h] v3 = this; v7 = (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2); v6 = *(_DWORD **)(v3[2] + 4 * v7); if ( !v6 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, v6[1]) ) { *(_DWORD *)(v3[2] + 4 * v7) = *v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 16))(v3, v6); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 24))(v3, v6); --v3[3]; return 1; } v4 = v6; for ( i = (_DWORD *)*v6; i && !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, i[1]); i = (_DWORD *)*i ) { v4 = i; } if ( !i ) return 0; *v4 = *i; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 16))(v3, i); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 24))(v3, i); --v3[3]; return 1; } //----- (0090E680) -------------------------------------------------------- HWND __thiscall sub_90E680(HWND *this) { HWND result; // eax result = (HWND)this; if ( this[3] ) result = SetFocus(this[3]); return result; } //----- (0090E6B0) -------------------------------------------------------- int __thiscall sub_90E6B0(int this) { int v2; // [esp+0h] [ebp-4h] v2 = this; if ( !*(_DWORD *)(this + 12) ) return 0; GetWindowTextA(*(HWND *)(this + 12), *(LPSTR *)(this + 24), *(_DWORD *)(this + 20) + 1); return *(_DWORD *)(v2 + 24); } //----- (0090E6F0) -------------------------------------------------------- HWND *__thiscall sub_90E6F0(HWND *this, LPCSTR lpString) { HWND *result; // eax HWND *v3; // [esp+0h] [ebp-4h] v3 = this; result = this; if ( this[3] ) result = (HWND *)SetWindowTextA(this[3], lpString); if ( v3[16] ) result = (HWND *)(*(int (__thiscall **)(HWND, LPCSTR))(*(_DWORD *)v3[16] + 472))(v3[16], lpString); return result; } //----- (0090E740) -------------------------------------------------------- int __thiscall sub_90E740(void *this) { return (*(int (__thiscall **)(void *, const CHAR *))(*(_DWORD *)this + 20))(this, &byte_9A8050); } //----- (0090E780) -------------------------------------------------------- int __thiscall sub_90E780(_DWORD *this, char *a2) { char v2; // cl int result; // eax _BYTE *v4; // [esp+8h] [ebp-Ch] char *v5; // [esp+Ch] [ebp-8h] if ( a2 ) { v5 = a2; v4 = (_BYTE *)this[7]; do { v2 = *v5; *v4 = *v5++; result = (int)(v4++ + 1); } while ( v2 ); } return result; } //----- (0090E7E0) -------------------------------------------------------- int __thiscall sub_90E7E0(void *this) { return (*(int (__thiscall **)(void *, const CHAR *))(*(_DWORD *)this + 32))(this, &byte_9A8050); } //----- (0090E800) -------------------------------------------------------- int __thiscall sub_90E800(void *this) { void *v1; // ST00_4 v1 = this; (*(void (__thiscall **)(void *))(*(_DWORD *)this + 24))(this); return (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 36))(v1); } //----- (0090E850) -------------------------------------------------------- _DWORD *__thiscall sub_90E850(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[14] = a2; return result; } //----- (0090E870) -------------------------------------------------------- char __thiscall sub_90E870(_BYTE *this) { return this[60]; } //----- (0090E890) -------------------------------------------------------- _BYTE *__thiscall sub_90E890(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[60] = a2; return result; } //----- (0090E8B0) -------------------------------------------------------- bool __thiscall sub_90E8B0(_DWORD *this) { return (this[14] & 1) != 0; } //----- (0090E8D0) -------------------------------------------------------- bool __thiscall sub_90E8D0(_DWORD *this) { return (this[14] & 4) != 0; } //----- (0090E8F0) -------------------------------------------------------- bool __thiscall sub_90E8F0(_DWORD *this) { return (this[14] & 2) != 0; } //----- (0090E910) -------------------------------------------------------- _DWORD *__thiscall sub_90E910(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[16] = a2; return result; } //----- (0090E930) -------------------------------------------------------- _DWORD *__thiscall sub_90E930(_DWORD *this) { _DWORD *result; // eax result = this; this[16] = 0; return result; } //----- (0090E950) -------------------------------------------------------- _DWORD *__thiscall sub_90E950(_DWORD *this, int a2) { _DWORD *v2; // ST0C_4 v2 = this; *this = &NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; this[1] = a2; this[3] = 0; this[2] = operator new[](4 * this[1]); memset((void *)v2[2], 0, 4 * v2[1]); return v2; } // A43324: using guessed type void *NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; //----- (0090E9D0) -------------------------------------------------------- int __stdcall sub_90E9D0(int a1, int a2, int a3) { int result; // eax *(_DWORD *)(a1 + 4) = a2; result = a3; *(_DWORD *)(a1 + 8) = a3; return result; } //----- (0090EA00) -------------------------------------------------------- void **__thiscall sub_90EA00(void **this, char a2) { void **v3; // [esp+0h] [ebp-10h] v3 = this; *this = &NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; sub_905AF0(this); operator delete[](v3[2]); if ( a2 & 1 ) operator delete(v3); return v3; } // A43324: using guessed type void *NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; //----- (0090EA50) -------------------------------------------------------- void *__thiscall sub_90EA50(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-18h] v3 = this; sub_90EA80(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090EA80) -------------------------------------------------------- void __thiscall sub_90EA80(_DWORD *this) { _DWORD *v1; // ST08_4 v1 = this; *this = &NiTMap::`vftable'; sub_905AF0(this); *v1 = &NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; sub_905AF0(v1); operator delete[]((void *)v1[2]); } // A43304: using guessed type void *NiTMap::`vftable'; // A43324: using guessed type void *NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; //----- (0090EB00) -------------------------------------------------------- void __thiscall sub_90EB00(_DWORD *this) { _DWORD *v1; // ST04_4 v1 = this; *this = &NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; sub_905AF0(this); operator delete[]((void *)v1[2]); } // A43324: using guessed type void *NiTMapBase,HWND__ *,PgEditWin *>::`vftable'; //----- (0090EB40) -------------------------------------------------------- _DWORD *__thiscall sub_90EB40(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_90CE00(this); *v1 = &PgWinPasswdText::`vftable'; v1[58] = &PgWinPasswdText::`vftable'; return v1; } // A43344: using guessed type void *PgWinPasswdText::`vftable'; // A43364: using guessed type void *PgWinPasswdText::`vftable'; //----- (0090EB70) -------------------------------------------------------- void *__thiscall sub_90EB70(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90EBA0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090EBA0) -------------------------------------------------------- LONG __thiscall sub_90EBA0(_DWORD *this) { *this = &PgWinPasswdText::`vftable'; this[58] = &PgWinPasswdText::`vftable'; return sub_90CE60(this); } // A43344: using guessed type void *PgWinPasswdText::`vftable'; // A43364: using guessed type void *PgWinPasswdText::`vftable'; //----- (0090EBD0) -------------------------------------------------------- volatile LONG *__cdecl sub_90EBD0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x124u); v14 = 0; if ( v11 ) v9 = sub_90EB40(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 496))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (0090ED30) -------------------------------------------------------- char __thiscall sub_90ED30(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9) { volatile LONG *v10; // [esp+4h] [ebp-44h] volatile LONG **v11; // [esp+8h] [ebp-40h] volatile LONG **v12; // [esp+10h] [ebp-38h] _DWORD *v13; // [esp+20h] [ebp-28h] char v14; // [esp+28h] [ebp-20h] int v15; // [esp+44h] [ebp-4h] v11 = this; if ( !sub_90CFF0(this, a2, a3, a4, a5, 0, a7, a8, a9) ) return 0; if ( a6 ) { v13 = operator new(0x158u); v15 = 0; if ( v13 ) v10 = sub_912AD0(v13, a6); else v10 = 0; v15 = -1; v12 = v11 + 72; if ( v11[72] != v10 ) { if ( *v12 ) sub_402270(*v12); *v12 = v10; if ( *v12 ) InterlockedIncrement(*v12 + 1); } (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 47))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 115))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, volatile LONG *, _DWORD))*v11 + 29))(v11, v11[72], 0); sub_85C4D0(v11); } return 1; } //----- (0090EEA0) -------------------------------------------------------- int __thiscall sub_90EEA0(_DWORD *this, volatile LONG *a2) { int v3; // [esp+4h] [ebp-2Ch] volatile LONG **v4; // [esp+Ch] [ebp-24h] v3 = (int)this; sub_906A30(this, 0); *(_DWORD *)v3 = &PgTextGeometry::`vftable'; *(_DWORD *)(v3 + 312) = 0; if ( *(_DWORD *)(v3 + 312) ) InterlockedIncrement((volatile LONG *)(*(_DWORD *)(v3 + 312) + 4)); sub_907290((_DWORD **)v3, a2); v4 = (volatile LONG **)(v3 + 312); if ( *(volatile LONG **)(v3 + 312) != a2 ) { if ( *v4 ) sub_402270(*v4); *v4 = a2; if ( *v4 ) InterlockedIncrement(*v4 + 1); } sub_459460(v3, 64); *(_DWORD *)(v3 + 316) = 0; *(_DWORD *)(v3 + 320) = 0; *(_BYTE *)(v3 + 324) = 0; *(_DWORD *)(v3 + 328) = 0; return v3; } // A4355C: using guessed type void *PgTextGeometry::`vftable'; //----- (0090EFD0) -------------------------------------------------------- void *__thiscall sub_90EFD0(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90F000(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090F000) -------------------------------------------------------- LONG __thiscall sub_90F000(void *this) { _DWORD **v2; // [esp+4h] [ebp-1Ch] v2 = (_DWORD **)this; *(_DWORD *)this = &PgTextGeometry::`vftable'; if ( *((_DWORD *)this + 78) ) sub_402270(*((volatile LONG **)this + 78)); return sub_906C50(v2); } // A4355C: using guessed type void *PgTextGeometry::`vftable'; //----- (0090F080) -------------------------------------------------------- char __thiscall sub_90F080(char **this, char *a2) { char result; // al char **v3; // [esp+0h] [ebp-28h] char *v4; // [esp+20h] [ebp-8h] char *v5; // [esp+24h] [ebp-4h] v3 = this; result = sub_907890(this, a2); if ( result ) { if ( a2 && (result = *a2) != 0 ) { sub_902790(v3[78], a2, (int)v3[74], &v4, (int)v3[76], *((_BYTE *)v3 + 284), *((_BYTE *)v3 + 285), v3 + 59); v3[79] = v4; result = (char)v5; v3[80] = v5; } else { v3[79] = 0; v3[80] = 0; } } return result; } //----- (0090F140) -------------------------------------------------------- _DWORD *__thiscall sub_90F140(_DWORD *this) { _DWORD *v1; // ST04_4 v1 = this; sub_90DE50(this); *v1 = &PgImeEditWin::`vftable'; sub_90FF70((int)(v1 + 17)); *((_BYTE *)v1 + 2804) = 0; *((_BYTE *)v1 + 2805) = 0; return v1; } // A43614: using guessed type void *PgImeEditWin::`vftable'; //----- (0090F1C0) -------------------------------------------------------- void *__thiscall sub_90F1C0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90F1F0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090F1F0) -------------------------------------------------------- LONG __thiscall sub_90F1F0(_DWORD *this) { _DWORD *v1; // ST04_4 v1 = this; *this = &PgImeEditWin::`vftable'; sub_90FFE0(this + 17); return sub_90DF60(v1); } // A43614: using guessed type void *PgImeEditWin::`vftable'; //----- (0090F250) -------------------------------------------------------- _DWORD *__cdecl sub_90F250(int a1, int a2, int a3, int a4, int a5, char a6, int a7, int a8, unsigned __int8 a9) { _DWORD *result; // eax _DWORD *v10; // [esp+8h] [ebp-24h] _DWORD *v11; // [esp+14h] [ebp-18h] sub_90E140(); v11 = operator new(0xAF8u); if ( v11 ) v10 = sub_90F140(v11); else v10 = 0; v10[4] = a2; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, int, int, int, _DWORD))(*v10 + 100))(v10, a1, a3, a7, a8, a9) ) { v10[14] = a4; (*(void (__thiscall **)(_DWORD *, int))(*v10 + 8))(v10, a5); *((_BYTE *)v10 + 60) = a6; result = v10; } else { if ( v10 ) (*(void (__thiscall **)(_DWORD *, signed int))*v10)(v10, 1); result = 0; } return result; } //----- (0090F360) -------------------------------------------------------- char __thiscall sub_90F360(int this, HINSTANCE hInstance, DWORD dwStyle, int a4, WPARAM wParam, char a6) { int v7; // [esp+0h] [ebp-4h] v7 = this; *(_BYTE *)(this + 2806) = a6; if ( !sub_90E050((HWND *)this, hInstance, dwStyle, a4, wParam) ) return 0; sub_910010(v7 + 68, *(_DWORD *)(v7 + 12)); *(_BYTE *)(v7 + 2800) = dwStyle & 0x20 || dwStyle & 0x2000; return 1; } //----- (0090F3E0) -------------------------------------------------------- char __thiscall sub_90F3E0(unsigned __int8 *this, unsigned int a2, int a3, int a4) { char result; // al int v5; // eax int v6; // [esp+10h] [ebp-44h] volatile LONG *v7; // [esp+18h] [ebp-3Ch] volatile LONG *v8; // [esp+2Ch] [ebp-28h] volatile LONG *v9; // [esp+40h] [ebp-14h] v6 = (int)this; if ( a2 <= 0x100 ) { switch ( a2 ) { case 0x100u: switch ( a3 ) { case 9: case 27: return 0; case 13: this[2804] = 1; return 0; case 127: return 1; default: if ( *((_DWORD *)this + 16) ) { v9 = (volatile LONG *)*((_DWORD *)this + 16); if ( sub_8FA3D0(&unk_BA6B10, v9) ) sub_517DE0(&unk_BA6B54, (int)v9, 3, 0, v6); } break; } break; case 7u: if ( this[2800] ) sub_9102A0((int)(this + 68), 1, 1); else sub_9102A0((int)(this + 68), 0, 0); break; case 8u: sub_910310((char *)this + 68); if ( *(_DWORD *)(v6 + 64) ) { v7 = *(volatile LONG **)(v6 + 64); if ( sub_8FA3D0(&unk_BA6B10, v7) ) sub_517DE0(&unk_BA6B54, (int)v7, 3, 0, v6); } break; case 0x20u: return 1; } return 0; } if ( a2 > 0x10F ) { switch ( a2 ) { case 0x281u: case 0x282u: case 0x283u: case 0x284u: case 0x285u: case 0x286u: case 0x288u: case 0x290u: case 0x291u: goto LABEL_46; case 0x302u: v5 = this[2805]; break; default: return 0; } return 0; } if ( a2 == 271 ) { if ( *((_DWORD *)this + 16) ) { v8 = (volatile LONG *)*((_DWORD *)this + 16); if ( sub_8FA3D0(&unk_BA6B10, v8) ) sub_517DE0(&unk_BA6B54, (int)v8, 3, 0, v6); } LABEL_46: if ( sub_910050((HIMC *)(v6 + 68), a2, a3, a4) == 1 ) return 1; return 0; } switch ( a2 ) { case 0x101u: switch ( a3 ) { case 9: if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int8 *))(*(_DWORD *)this + 84))(this) ) return 0; result = 1; break; case 13: if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int8 *))(*(_DWORD *)this + 76))(this) ) return 0; result = 1; break; case 27: if ( !(*(unsigned __int8 (__thiscall **)(unsigned __int8 *))(*(_DWORD *)this + 80))(this) ) return 0; result = 1; break; case 44: SendMessageA(*((HWND *)this + 4), 0x101u, 0x2Cu, 0); result = 1; break; default: return 0; } return result; case 0x102u: switch ( a3 ) { case 9: result = 1; break; case 13: result = 1; break; case 127: result = 1; break; default: return 0; } break; case 0x104u: if ( this[2806] != 1 ) return 0; if ( GetFocus() == *((HWND *)this + 3) ) SetFocus(0); return 1; case 0x10Du: case 0x10Eu: goto LABEL_46; default: return 0; } return result; } //----- (0090F920) -------------------------------------------------------- char __thiscall sub_90F920(_BYTE *this) { char result; // al void *v2; // [esp+0h] [ebp-4h] v2 = this; if ( !this[2804] ) return 0; this[2804] = 0; if ( (*(unsigned __int8 (__thiscall **)(_BYTE *))(*(_DWORD *)this + 64))(this) ) result = sub_90DC10(v2); else result = 0; return result; } //----- (0090F970) -------------------------------------------------------- LONG __thiscall sub_90F970(HIMC *this) { return sub_910B60(this + 17); } //----- (0090F9B0) -------------------------------------------------------- _DWORD *__thiscall sub_90F9B0(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_90CE00(this); *v1 = &PgWinImeEditText::`vftable'; v1[58] = &PgWinImeEditText::`vftable'; return v1; } // A43680: using guessed type void *PgWinImeEditText::`vftable'; // A4369C: using guessed type void *PgWinImeEditText::`vftable'; //----- (0090F9E0) -------------------------------------------------------- void *__thiscall sub_90F9E0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90FA10(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090FA10) -------------------------------------------------------- LONG __thiscall sub_90FA10(_DWORD *this) { *this = &PgWinImeEditText::`vftable'; this[58] = &PgWinImeEditText::`vftable'; return sub_90CE60(this); } // A43680: using guessed type void *PgWinImeEditText::`vftable'; // A4369C: using guessed type void *PgWinImeEditText::`vftable'; //----- (0090FA40) -------------------------------------------------------- volatile LONG *__cdecl sub_90FA40(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { volatile LONG *result; // eax volatile LONG *v9; // [esp+Ch] [ebp-54h] volatile LONG *v10; // [esp+44h] [ebp-1Ch] _DWORD *v11; // [esp+48h] [ebp-18h] volatile LONG *v12; // [esp+4Ch] [ebp-14h] volatile LONG *v13; // [esp+50h] [ebp-10h] int v14; // [esp+5Ch] [ebp-4h] v11 = operator new(0x124u); v14 = 0; if ( v11 ) v9 = sub_90F9B0(v11); else v9 = 0; v12 = v9; v14 = -1; v13 = v9; if ( v9 ) InterlockedIncrement(v13 + 1); v14 = 1; sub_403790(&unk_BA6B10, (int)v13); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int, int))(*v13 + 496))( v13, a1, a2, a3, a4, a5, a6, a7, a8) ) { (*(void (__thiscall **)(volatile LONG *))(*v13 + 356))(v13); v14 = -1; if ( v13 ) sub_402270(v13); result = v13; } else { sub_403A70(&unk_BA6B10, &v10, v13); if ( v10 ) sub_402270(v10); v14 = -1; if ( v13 ) sub_402270(v13); result = 0; } return result; } //----- (0090FBA0) -------------------------------------------------------- char __thiscall sub_90FBA0(volatile LONG **this, int a2, int a3, int a4, int a5, volatile LONG *a6, _DWORD *a7, int a8, int a9) { float *v10; // [esp+4h] [ebp-44h] volatile LONG **v11; // [esp+8h] [ebp-40h] volatile LONG **v12; // [esp+10h] [ebp-38h] float *v13; // [esp+20h] [ebp-28h] char v14; // [esp+28h] [ebp-20h] int v15; // [esp+44h] [ebp-4h] v11 = this; if ( !sub_90CFF0(this, a2, a3, a4, a5, 0, a7, a8, a9) ) return 0; if ( a6 ) { v13 = (float *)operator new(0x198u); v15 = 0; if ( v13 ) v10 = sub_912D10(v13, a6); else v10 = 0; v15 = -1; v12 = v11 + 72; if ( v11[72] != (volatile LONG *)v10 ) { if ( *v12 ) sub_402270(*v12); *v12 = (volatile LONG *)v10; if ( *v12 ) InterlockedIncrement(*v12 + 1); } (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 47))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, char *))*v11 + 115))(v11, &v14); (*((void (__thiscall **)(volatile LONG **, volatile LONG *, _DWORD))*v11 + 29))(v11, v11[72], 0); sub_85C4D0(v11); } return 1; } //----- (0090FD10) -------------------------------------------------------- int __thiscall sub_90FD10(_DWORD *this, int a2, HWND *a3) { int result; // eax int v4; // eax _DWORD *v5; // [esp+0h] [ebp-20h] char v6; // [esp+7h] [ebp-19h] int i; // [esp+8h] [ebp-18h] int v8; // [esp+Ch] [ebp-14h] int v9; // [esp+10h] [ebp-10h] int v10; // [esp+18h] [ebp-8h] v5 = this; result = (int)a3; if ( a3 ) { v9 = (*((int (__thiscall **)(HWND *))*a3 + 4))(a3); result = v5[72]; v8 = v5[72]; if ( v8 ) { for ( i = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 4))(v8); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v6 = 1; goto LABEL_10; } } v6 = 0; LABEL_10: result = v6 != 0 ? v8 : 0; v10 = v6 != 0 ? v8 : 0; } else { v10 = 0; } if ( v10 ) { v4 = sub_90E3C0(a3); result = (*(int (__thiscall **)(int, int, HWND *, int, HWND *))(*(_DWORD *)v10 + 184))( v10, v9, a3 + 23, v4, a3 + 55); } } return result; } //----- (0090FDE0) -------------------------------------------------------- int __thiscall sub_90FDE0(_DWORD *this) { int result; // eax char v2; // [esp+Bh] [ebp-Dh] int i; // [esp+Ch] [ebp-Ch] int v4; // [esp+10h] [ebp-8h] int v5; // [esp+14h] [ebp-4h] v4 = this[72]; if ( v4 ) { for ( i = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)v4 + 4))(v4, this); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v2 = 1; goto LABEL_9; } } v2 = 0; LABEL_9: v5 = v2 != 0 ? v4 : 0; } else { v5 = 0; } if ( v5 ) result = *(_DWORD *)(v5 + 388); else result = 0; return result; } //----- (0090FE70) -------------------------------------------------------- int __thiscall sub_90FE70(_DWORD *this) { int result; // eax char v2; // [esp+Bh] [ebp-Dh] int i; // [esp+Ch] [ebp-Ch] int v4; // [esp+10h] [ebp-8h] int v5; // [esp+14h] [ebp-4h] v4 = this[72]; if ( v4 ) { for ( i = (*(int (__thiscall **)(int, _DWORD *))(*(_DWORD *)v4 + 4))(v4, this); i; i = *(_DWORD *)(i + 4) ) { if ( (char *)i == dword_BA455C ) { v2 = 1; goto LABEL_9; } } v2 = 0; LABEL_9: v5 = v2 != 0 ? v4 : 0; } else { v5 = 0; } if ( v5 ) result = *(_DWORD *)(v5 + 392); else result = 0; return result; } //----- (0090FF00) -------------------------------------------------------- bool sub_90FF00() { if ( !sub_905B90() ) return 0; if ( sub_8F7DA0((volatile LONG **)&unk_BA6B10) ) return sub_8EF530(&unk_BA6A18) != 0; return 0; } //----- (0090FF50) -------------------------------------------------------- int sub_90FF50() { sub_8EF550(&unk_BA6A18); sub_8F7FE0((volatile LONG **)&unk_BA6B10); return sub_905BD0(); } //----- (0090FF70) -------------------------------------------------------- int __thiscall sub_90FF70(int this) { int v1; // ST00_4 v1 = this; *(_DWORD *)this = &PgImeCtrl::`vftable'; *(_DWORD *)(this + 4) = 0; *(_DWORD *)(this + 8) = 0; *(_BYTE *)(this + 2732) = 0; sub_910350((char *)this); return v1; } // A43894: using guessed type void *PgImeCtrl::`vftable'; //----- (0090FFB0) -------------------------------------------------------- void *__thiscall sub_90FFB0(void *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_90FFE0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (0090FFE0) -------------------------------------------------------- BOOL __thiscall sub_90FFE0(void *this) { *(_DWORD *)this = &PgImeCtrl::`vftable'; return ImmReleaseContext(*((HWND *)this + 1), *((HIMC *)this + 2)); } // A43894: using guessed type void *PgImeCtrl::`vftable'; //----- (00910010) -------------------------------------------------------- BOOL __thiscall sub_910010(int this, int a2) { int v2; // ST08_4 v2 = this; *(_DWORD *)(this + 4) = a2; *(_DWORD *)(this + 8) = ImmGetContext(*(HWND *)(this + 4)); return ImmReleaseContext(*(HWND *)(v2 + 4), *(HIMC *)(v2 + 8)); } //----- (00910050) -------------------------------------------------------- char __thiscall sub_910050(HIMC *this, unsigned int a2, int a3, int a4) { HIMC *v5; // [esp+4h] [ebp-4h] v5 = this; sub_9100F0((int)this, a2); if ( a2 > 0x10F ) { if ( a2 == 642 ) return sub_9106C0(v5, a3, a4); } else { switch ( a2 ) { case 0x10Fu: return sub_9103A0(v5, a3, a4); case 0x10Du: return sub_9106A0((char *)v5, a3, a4); case 0x10Eu: return sub_910880((char *)v5, a3, a4); } } return 0; } //----- (009100F0) -------------------------------------------------------- void __cdecl sub_9100F0(int a1, unsigned int a2) { if ( a2 > 0x281 ) { switch ( a2 ) { case 0x282u: sub_910290(); break; case 0x283u: sub_910290(); break; case 0x284u: sub_910290(); break; case 0x285u: sub_910290(); break; case 0x286u: sub_910290(); break; case 0x288u: sub_910290(); break; case 0x290u: sub_910290(); break; case 0x291u: sub_910290(); break; default: return; } } else { switch ( a2 ) { case 0x281u: sub_910290(); break; case 0x10Du: sub_910290(); break; case 0x10Eu: sub_910290(); break; case 0x10Fu: sub_910290(); break; } } } //----- (00910290) -------------------------------------------------------- void sub_910290() { ; } //----- (009102A0) -------------------------------------------------------- HIMC __thiscall sub_9102A0(int this, char a2, char a3) { HIMC result; // eax unsigned __int8 v4; // [esp+7h] [ebp-1h] v4 = 1; if ( a2 || a3 ) v4 = 0; result = (HIMC)*(unsigned __int8 *)(this + 17); if ( result != (HIMC)v4 ) { *(_BYTE *)(this + 17) = v4; if ( *(_BYTE *)(this + 17) ) result = ImmAssociateContext(*(HWND *)(this + 4), *(HIMC *)(this + 8)); else result = ImmAssociateContext(*(HWND *)(this + 4), 0); } return result; } //----- (00910310) -------------------------------------------------------- BOOL __thiscall sub_910310(char *this) { char *v1; // ST10_4 v1 = this; sub_910350(this); ImmNotifyIME(*((HIMC *)v1 + 2), 0x15u, 4u, 0); return ImmNotifyIME(*((HIMC *)v1 + 2), 0x11u, 0, 0); } //----- (00910350) -------------------------------------------------------- void *__thiscall sub_910350(char *this) { char *v1; // ST0C_4 v1 = this; sub_910AF0((int)this); v1[16] = 0; v1[17] = 0; *((_DWORD *)v1 + 5) = 0; v1[24] = 0; return memset(v1 + 152, 0, 0x100u); } //----- (009103A0) -------------------------------------------------------- char __thiscall sub_9103A0(HIMC *this, int a2, __int16 a3) { char v4; // ST23_1 char v5; // ST1B_1 char *v6; // [esp+Ch] [ebp-34Ch] char *v7; // [esp+14h] [ebp-344h] char *v8; // [esp+28h] [ebp-330h] HIMC *v9; // [esp+2Ch] [ebp-32Ch] signed int i; // [esp+30h] [ebp-328h] char v11[12]; // [esp+34h] [ebp-324h] char v12[12]; // [esp+3Fh] [ebp-319h] CHAR v13; // [esp+40h] [ebp-318h] char Buf[264]; // [esp+140h] [ebp-218h] CHAR OutputString; // [esp+248h] [ebp-110h] DWORD dwBufLen; // [esp+350h] [ebp-8h] __int16 v17; // [esp+354h] [ebp-4h] v9 = this; v17 = GetUserDefaultLangID() & 0x3FF; if ( v17 == 18 ) return 0; dwBufLen = 0; if ( a3 & 8 ) { dwBufLen = ImmGetCompositionStringA(v9[2], 8u, 0, 0); if ( (signed int)dwBufLen >= 256 ) { ImmNotifyIME(v9[2], 0x15u, 1u, 0); return 1; } if ( (signed int)dwBufLen > 0 ) { ImmGetCompositionStringA(v9[2], 8u, v9 + 6, dwBufLen); *((_BYTE *)v9 + dwBufLen + 24) = 0; sprintf(&OutputString, "ComString: %s\n", v9 + 6); OutputDebugStringA(&OutputString); } } if ( a3 & 0x800 ) { dwBufLen = ImmGetCompositionStringA(v9[2], 0x800u, 0, 0); if ( (signed int)dwBufLen > 0 ) { ImmGetCompositionStringA(v9[2], 0x800u, Buf, dwBufLen); Buf[dwBufLen] = 0; } } if ( a3 & 0x10 ) { dwBufLen = ImmGetCompositionStringA(v9[2], 0x10u, v9 + 38, 0x100u); if ( (signed int)dwBufLen > 0 ) { *((_BYTE *)v9 + dwBufLen + 152) = 0; sprintf(&v13, "ComAttr: "); for ( i = 0; i < (signed int)dwBufLen; ++i ) { sprintf(v11, "%u ", *((unsigned __int8 *)v9 + i + 152)); v8 = &v11[strlen(v11) + 1]; v7 = v12; do v4 = (v7++)[1]; while ( v4 ); qmemcpy(v7, v11, v8 - v11); } v6 = v12; do v5 = (v6++)[1]; while ( v5 ); strcpy(v6, "\n"); OutputDebugStringA(&v13); } } return 0; } // 9103A0: using guessed type char Buf[264]; // 9103A0: using guessed type char var_324[12]; //----- (009106A0) -------------------------------------------------------- char __thiscall sub_9106A0(char *this, int a2, int a3) { sub_910350(this); return 1; } //----- (009106C0) -------------------------------------------------------- char __thiscall sub_9106C0(HIMC *this, int a2, int a3) { HIMC *v4; // [esp+4h] [ebp-4h] v4 = this; sub_910710((int)this, a2); switch ( a2 ) { case 3: goto LABEL_9; case 4: sub_910AF0((int)v4); return 1; case 5: LABEL_9: sub_9108A0(v4); break; } return 1; } //----- (00910710) -------------------------------------------------------- void __cdecl sub_910710(int a1, int a2) { switch ( a2 ) { case 1: sub_910290(); break; case 2: sub_910290(); break; case 3: sub_910290(); break; case 4: sub_910290(); break; case 5: sub_910290(); break; case 6: sub_910290(); break; case 7: sub_910290(); break; case 8: sub_910290(); break; case 9: sub_910290(); break; case 10: sub_910290(); break; case 11: sub_910290(); break; case 12: sub_910290(); break; case 13: sub_910290(); break; default: return; } } //----- (00910880) -------------------------------------------------------- char __thiscall sub_910880(char *this, int a2, int a3) { sub_910350(this); return 0; } //----- (009108A0) -------------------------------------------------------- struct tagCANDIDATELIST *__thiscall sub_9108A0(HIMC *this) { struct tagCANDIDATELIST *result; // eax HANDLE v2; // eax HANDLE v3; // eax int v4; // [esp+0h] [ebp-28h] signed int v5; // [esp+4h] [ebp-24h] HIMC *v6; // [esp+8h] [ebp-20h] _BYTE *j; // [esp+Ch] [ebp-1Ch] HIMC *v8; // [esp+10h] [ebp-18h] unsigned int i; // [esp+14h] [ebp-14h] unsigned int v10; // [esp+18h] [ebp-10h] int v11; // [esp+1Ch] [ebp-Ch] LPCANDIDATELIST lpCandList; // [esp+20h] [ebp-8h] SIZE_T dwBytes; // [esp+24h] [ebp-4h] v6 = this; result = (struct tagCANDIDATELIST *)ImmGetCandidateListA(this[2], 0, 0, 0); dwBytes = (SIZE_T)result; if ( (signed int)result > 0 ) { v2 = GetProcessHeap(); result = (struct tagCANDIDATELIST *)HeapAlloc(v2, 0, dwBytes); lpCandList = result; if ( result ) { ImmGetCandidateListA(v6[2], 0, result, dwBytes); v6[679] = (HIMC)lpCandList->dwSelection; v6[678] = (HIMC)lpCandList->dwCount; v6[3] = (HIMC)GetKeyboardLayout(0); if ( lpCandList->dwPageSize >= 9 ) v5 = 9; else v5 = lpCandList->dwPageSize; v6[680] = (HIMC)v5; if ( ((_WORD)v6[3] & 0x3FF) != 17 && ((_WORD)v6[3] & 0x3FF) != 4 ) { v11 = lpCandList->dwPageStart; v6[681] = (HIMC)v11; } else { v11 = (_DWORD)v6[680] * ((unsigned int)v6[679] / (unsigned int)v6[680]); v6[681] = (HIMC)v11; } if ( (unsigned __int16)v6[3] == 2052 ) v4 = -1; else v4 = (int)v6[679] - v11; v6[679] = (HIMC)v4; memset(v6 + 102, 0, 0x900u); v10 = v11; for ( i = 0; v10 < lpCandList->dwCount && i < (unsigned int)v6[680]; ++i ) { v8 = &v6[64 * i + 102]; for ( j = (char *)lpCandList + lpCandList->dwOffset[v10]; *j; ++j ) { *(_BYTE *)v8 = *j; v8 = (HIMC *)((char *)v8 + 1); } *(_BYTE *)v8 = 32; *((_BYTE *)v8 + 1) = 0; ++v10; } *((_BYTE *)v6 + 2729) = 1; v3 = GetProcessHeap(); result = (struct tagCANDIDATELIST *)HeapFree(v3, 0, lpCandList); } } return result; } //----- (00910AF0) -------------------------------------------------------- int __thiscall sub_910AF0(int this) { int v1; // ST0C_4 int result; // eax v1 = this; memset((void *)(this + 408), 0, 0x900u); *(_DWORD *)(v1 + 2712) = 0; *(_BYTE *)(v1 + 2729) = 0; *(_DWORD *)(v1 + 2720) = 0; *(_DWORD *)(v1 + 2724) = 0; *(_DWORD *)(v1 + 2716) = 10; result = v1; *(_BYTE *)(v1 + 2728) = 1; return result; } //----- (00910B60) -------------------------------------------------------- LONG __thiscall sub_910B60(HIMC *this) { return ImmGetCompositionStringA(this[2], 0x80u, 0, 0); } //----- (00910B90) -------------------------------------------------------- _DWORD *__thiscall sub_910B90(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8FE000(this); *v1 = &PgWinButExt::`vftable'; v1[58] = &PgWinButExt::`vftable'; v1[85] = 0; v1[86] = 0; v1[87] = 0; v1[88] = 0; v1[89] = 0; v1[90] = 0; *((_BYTE *)v1 + 364) = 0; *((_BYTE *)v1 + 324) = 0; *((_BYTE *)v1 + 325) = 0; v1[82] = 0; v1[83] = 0; *((_BYTE *)v1 + 336) = 0; return v1; } // A43AB4: using guessed type void *PgWinButExt::`vftable'; // A43AD4: using guessed type void *PgWinButExt::`vftable'; //----- (00910C50) -------------------------------------------------------- void *__thiscall sub_910C50(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_910C80(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00910C80) -------------------------------------------------------- LONG __thiscall sub_910C80(_DWORD *this) { *this = &PgWinButExt::`vftable'; this[58] = &PgWinButExt::`vftable'; return sub_8FE0C0(this); } // A43AB4: using guessed type void *PgWinButExt::`vftable'; // A43AD4: using guessed type void *PgWinButExt::`vftable'; //----- (00910CB0) -------------------------------------------------------- volatile LONG *__cdecl sub_910CB0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { volatile LONG *result; // eax volatile LONG *v8; // [esp+Ch] [ebp-54h] volatile LONG *v9; // [esp+44h] [ebp-1Ch] _DWORD *v10; // [esp+48h] [ebp-18h] volatile LONG *v11; // [esp+4Ch] [ebp-14h] volatile LONG *v12; // [esp+50h] [ebp-10h] int v13; // [esp+5Ch] [ebp-4h] v10 = operator new(0x170u); v13 = 0; if ( v10 ) v8 = sub_910B90(v10); else v8 = 0; v11 = v8; v13 = -1; v12 = v8; if ( v8 ) InterlockedIncrement(v12 + 1); v13 = 1; sub_403790(&unk_BA6B10, (int)v12); if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *, int, int, int, int, int, int, int))(*v12 + 548))( v12, a1, a2, a3, a4, a5, a6, a7) ) { (*(void (__thiscall **)(volatile LONG *))(*v12 + 356))(v12); v13 = -1; if ( v12 ) sub_402270(v12); result = v12; } else { sub_403A70(&unk_BA6B10, &v9, v12); if ( v9 ) sub_402270(v9); v13 = -1; if ( v12 ) sub_402270(v12); result = 0; } return result; } //----- (00910E30) -------------------------------------------------------- int __thiscall sub_910E30(void *this, _BYTE *a2) { int result; // eax int v3; // [esp+0h] [ebp-8h] v3 = (int)this; result = (*(int (__thiscall **)(void *))(*(_DWORD *)this + 312))(this); if ( (_BYTE)result ) { if ( dword_BA6AA8 ) ++dword_BA6AA8; if ( dword_BA6AB4 ) ++dword_BA6AB4; sub_8F1EF0((_DWORD *)v3, a2); byte_BA6AA4 = 0; byte_BA6AB0 = 0; if ( dword_BA6AA8 >= 1 && *a2 ) { if ( *(_DWORD *)(v3 + 304) ) { dword_BA6A7C = v3; *(_BYTE *)(v3 + 312) = 1; } else { (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 528))(v3); *(_BYTE *)(v3 + 312) = 0; } byte_BA6AA4 = 1; } else if ( dword_BA6AB4 >= 1 ) { *(_BYTE *)(v3 + 312) = 0; if ( dword_BA6A7C == v3 ) { dword_BA6A7C = 0; byte_BA6AB0 = 1; } if ( *a2 ) { if ( *(_DWORD *)(v3 + 304) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 528))(v3); byte_BA6AB0 = 1; } } if ( *a2 ) { if ( *(_BYTE *)(v3 + 312) ) { result = (*(int (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 1); } else { (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v3 + 552))(v3, 2); result = v3; *(_BYTE *)(v3 + 336) = 0; } } else if ( *(_BYTE *)(v3 + 312) ) { result = v3; if ( *(_BYTE *)(v3 + 324) ) *(_BYTE *)(v3 + 336) = 1; } else { result = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 552))(v3, 0); *(_BYTE *)(v3 + 336) = 0; } if ( byte_BA6AA4 && dword_BA6AA8 ) result = dword_BA6AA8-- - 1; byte_BA6AA4 = 0; if ( byte_BA6AB0 && dword_BA6AB4 ) --dword_BA6AB4; byte_BA6AB0 = 0; if ( dword_BA6AA8 ) result = dword_BA6AA8-- - 1; if ( dword_BA6AB4 ) --dword_BA6AB4; } return result; } // BA6A7C: using guessed type int dword_BA6A7C; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; //----- (00911090) -------------------------------------------------------- int __thiscall sub_911090(_DWORD *this, int a2) { int result; // eax _DWORD *v3; // [esp+4h] [ebp-8h] v3 = this; result = (int)this; if ( this[77] != a2 ) { this[77] = a2; result = a2; switch ( a2 ) { case 0: result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 492))(this, 0); if ( *((_BYTE *)v3 + 364) ) result = (*(int (__thiscall **)(_DWORD *, _DWORD, _DWORD))(*v3 + 308))(v3, v3[87], v3[88]); break; case 1: if ( this[79] > 1u ) result = (*(int (__thiscall **)(_DWORD *, signed int))(*this + 492))(this, 2); else result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 492))(this, 0); if ( *((_BYTE *)v3 + 364) ) result = (*(int (__thiscall **)(_DWORD *, int, int))(*v3 + 308))(v3, v3[89] + v3[87], v3[90] + v3[88]); break; case 2: if ( this[79] > 2u ) { result = (*(int (__thiscall **)(_DWORD *, signed int))(*this + 492))(this, 2); if ( *((_BYTE *)v3 + 364) ) result = (*(int (__thiscall **)(_DWORD *, int, int))(*v3 + 308))(v3, v3[89] + v3[87], v3[90] + v3[88]); } else { result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 492))(this, 0); } break; case 3: if ( this[79] > 3u ) result = (*(int (__thiscall **)(_DWORD *, signed int))(*this + 492))(this, 3); else result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 492))(this, 0); break; default: return result; } } return result; } //----- (00911260) -------------------------------------------------------- _DWORD *__thiscall sub_911260(_DWORD *this) { float *v1; // eax float *v2; // edx volatile LONG *v3; // ST54_4 float *v4; // eax float *v6; // [esp+Ch] [ebp-ECh] _WORD *v7; // [esp+10h] [ebp-E8h] volatile LONG *v8; // [esp+14h] [ebp-E4h] _DWORD *v9; // [esp+18h] [ebp-E0h] int v10; // [esp+24h] [ebp-D4h] volatile LONG **v11; // [esp+28h] [ebp-D0h] int v12; // [esp+80h] [ebp-78h] int v13; // [esp+84h] [ebp-74h] volatile LONG **v14; // [esp+88h] [ebp-70h] volatile LONG *v15; // [esp+8Ch] [ebp-6Ch] volatile LONG **v16; // [esp+90h] [ebp-68h] volatile LONG *v17; // [esp+94h] [ebp-64h] int *v18; // [esp+98h] [ebp-60h] int v19; // [esp+9Ch] [ebp-5Ch] int *v20; // [esp+A0h] [ebp-58h] int v21; // [esp+A4h] [ebp-54h] float v22; // [esp+A8h] [ebp-50h] float v23; // [esp+ACh] [ebp-4Ch] float v24; // [esp+B0h] [ebp-48h] void *v25; // [esp+B4h] [ebp-44h] float *v26; // [esp+B8h] [ebp-40h] float v27; // [esp+BCh] [ebp-3Ch] float v28; // [esp+C0h] [ebp-38h] float v29; // [esp+C4h] [ebp-34h] float v30; // [esp+C8h] [ebp-30h] float v31; // [esp+CCh] [ebp-2Ch] float v32; // [esp+D0h] [ebp-28h] void *v33; // [esp+D4h] [ebp-24h] _WORD *v34; // [esp+D8h] [ebp-20h] void *v35; // [esp+DCh] [ebp-1Ch] volatile LONG *v36; // [esp+E0h] [ebp-18h] _WORD *v37; // [esp+E4h] [ebp-14h] volatile LONG *v38; // [esp+E8h] [ebp-10h] int v39; // [esp+F4h] [ebp-4h] v9 = this; sub_862BA0(this); v39 = 0; *v9 = &PgWinCamera::`vftable'; v20 = v9 + 74; v9[74] = 0; if ( *v20 ) { v21 = *v20; InterlockedIncrement((volatile LONG *)(v21 + 4)); } LOBYTE(v39) = 1; v18 = v9 + 75; v9[75] = 0; if ( *v18 ) { v19 = *v18; InterlockedIncrement((volatile LONG *)(v19 + 4)); } LOBYTE(v39) = 2; v16 = (volatile LONG **)(v9 + 75); if ( v9[75] ) { if ( *v16 ) sub_402270(*v16); *v16 = 0; if ( *v16 ) { v17 = *v16; InterlockedIncrement(v17 + 1); } } v35 = operator new(0xE8u); LOBYTE(v39) = 3; if ( v35 ) v8 = sub_85A1C0(v35, 0); else v8 = 0; v36 = v8; LOBYTE(v39) = 2; v14 = (volatile LONG **)(v9 + 74); if ( (volatile LONG *)v9[74] != v8 ) { if ( *v14 ) sub_402270(*v14); *v14 = v36; if ( *v14 ) { v15 = *v14; InterlockedIncrement(v15 + 1); } } v33 = operator new(0x24u); LOBYTE(v39) = 4; if ( v33 ) v7 = sub_46EDA0(v33); else v7 = 0; v34 = v7; LOBYTE(v39) = 2; v37 = v7; sub_46ED70(v7, 0, 1); sub_46ED70(v7, 0, 2); v13 = v9[74]; sub_44EC60(&v12, (int)v7); LOBYTE(v39) = 5; sub_8A6330((_DWORD *)(v13 + 156), &v12); LOBYTE(v39) = 2; sub_410C00(&v12); v1 = (float *)(v9[74] + 88); *v1 = 0.0; v1[1] = 0.0; v1[2] = 2.0; v2 = (float *)(v9 + 22); *v2 = 0.0; v2[1] = 0.0; v2[2] = 0.0; sub_85BED0((_DWORD **)v9, 0.0, 1); v30 = 0.0; v31 = -1.0; v32 = 0.0; v27 = 0.0; v28 = 0.0; v29 = 100.0; sub_862170((float *)v9, &v27, &v30); sub_85BED0((_DWORD **)v9, 0.0, 1); sub_85C4D0((_DWORD *)v9[74]); sub_85C6F0((_DWORD *)v9[74]); v25 = operator new(0x60u); LOBYTE(v39) = 6; if ( v25 ) v6 = sub_85EBC0((float *)v25); else v6 = 0; v26 = v6; LOBYTE(v39) = 2; v38 = (volatile LONG *)v6; if ( v6 ) InterlockedIncrement(v38 + 1); LOBYTE(v39) = 7; v22 = 1.0; v23 = 1.0; v24 = 1.0; v3 = v38; v4 = (float *)(v38 + 17); *v4 = 1.0; v4[1] = v23; v4[2] = v24; ++*((_DWORD *)v3 + 22); sub_403700((_DWORD *)v9[74], (int)v38); sub_85C4D0((_DWORD *)v9[74]); *((_BYTE *)v9 + 264) = 1; sub_9117A0(v9); v10 = dword_BA46D0; v11 = (volatile LONG **)(v9 + 75); if ( v9[75] != dword_BA46D0 ) { if ( *v11 ) sub_402270(*v11); *v11 = (volatile LONG *)v10; if ( *v11 ) InterlockedIncrement(*v11 + 1); } sub_9117C0((float *)v9); sub_85BED0((_DWORD **)v9, 0.0, 0); sub_9117A0(v9); LOBYTE(v39) = 2; if ( v38 ) sub_402270(v38); return v9; } // A43D0C: using guessed type void *PgWinCamera::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (009117A0) -------------------------------------------------------- float __userpurge sub_9117A0@(void *this@) { int v1; // ST00_4 v1 = (int)this; sub_85BE80((int)this); return sub_862520(v1); } //----- (009117C0) -------------------------------------------------------- float __userpurge sub_9117C0@(float *this@) { float *v1; // ST18_4 int v2; // ST34_4 float v3; // ST38_4 float v4; // ST3C_4 float v5; // ST1C_4 float v6; // ST24_4 float *v7; // edx float result; // eax v1 = this; v2 = (*(int (__thiscall **)(_DWORD *))(**((_DWORD **)this + 75) + 104))(*((_DWORD **)this + 75)); v3 = (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 60))(v2, 0); v4 = (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 64))(v2, 0); v1[60] = 0.5; v1[61] = v3 + 0.5; v1[62] = v4 - 0.5; v1[63] = -0.5; v1[64] = 1.0; v1[65] = 10000.0; *((_BYTE *)v1 + 264) = 1; v5 = v1[64]; v6 = -v4; v7 = (float *)(*((_DWORD *)v1 + 74) + 88); *v7 = 0.0; v7[1] = v6; result = v5; v7[2] = v5; return result; } //----- (009118E0) -------------------------------------------------------- volatile LONG **__thiscall sub_9118E0(volatile LONG **this, char a2) { volatile LONG **v3; // [esp+0h] [ebp-3Ch] v3 = this; sub_911910(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00911910) -------------------------------------------------------- LONG __thiscall sub_911910(volatile LONG **this) { volatile LONG **v2; // [esp+4h] [ebp-48h] volatile LONG **v3; // [esp+20h] [ebp-2Ch] volatile LONG **v4; // [esp+30h] [ebp-1Ch] v2 = this; *this = (volatile LONG *)&PgWinCamera::`vftable'; v4 = this + 74; if ( this[74] ) { if ( *v4 ) sub_402270(*v4); *v4 = 0; if ( *v4 ) InterlockedIncrement(*v4 + 1); } v3 = v2 + 75; if ( v2[75] ) { if ( *v3 ) sub_402270(*v3); *v3 = 0; if ( *v3 ) InterlockedIncrement(*v3 + 1); } if ( v2[75] ) sub_402270(v2[75]); if ( v2[74] ) sub_402270(v2[74]); return sub_861DC0(v2); } // A43D0C: using guessed type void *PgWinCamera::`vftable'; //----- (00911A50) -------------------------------------------------------- int sub_911A50() { int v0; // edx int v1; // ecx float *v3; // [esp+4h] [ebp-84h] float *v4; // [esp+8h] [ebp-80h] int v5; // [esp+Ch] [ebp-7Ch] float *v6; // [esp+1Ch] [ebp-6Ch] int v7; // [esp+30h] [ebp-58h] float *v8; // [esp+34h] [ebp-54h] float *v9; // [esp+3Ch] [ebp-4Ch] _DWORD *v10; // [esp+44h] [ebp-44h] float v11; // [esp+4Ch] [ebp-3Ch] float v12; // [esp+50h] [ebp-38h] float v13; // [esp+54h] [ebp-34h] float v14; // [esp+58h] [ebp-30h] float v15; // [esp+5Ch] [ebp-2Ch] float v16; // [esp+60h] [ebp-28h] void *v17; // [esp+64h] [ebp-24h] float *v18; // [esp+68h] [ebp-20h] float *v19; // [esp+6Ch] [ebp-1Ch] float *v20; // [esp+70h] [ebp-18h] int v21; // [esp+74h] [ebp-14h] float *v22; // [esp+78h] [ebp-10h] int v23; // [esp+84h] [ebp-4h] v17 = operator new[](0x1Cu); v23 = 0; if ( v17 ) { *(_DWORD *)v17 = 3; `eh vector constructor iterator'((char *)v17 + 4, 8u, 3, (void (__thiscall *)(void *))sub_8E5020, nullsub_6); v6 = (float *)((char *)v17 + 4); } else { v6 = 0; } v18 = v6; v23 = -1; v19 = v6; v15 = 0.0; v16 = 0.2; *v6 = 0.0; v6[1] = 0.2; v13 = 0.69999999; v14 = 1.0; v0 = (int)v19; v19[2] = 0.69999999; *(float *)(v0 + 12) = 1.0; v11 = 1.4; v12 = 0.2; v1 = (int)v19; v19[4] = 1.4; *(float *)(v1 + 20) = 0.2; v10 = operator new(0x18u); v23 = 1; if ( v10 ) { sub_85BA50(v10); *v10 = &NiFloatData::`vftable'; v10[2] = 0; v10[3] = 0; v10[4] = 0; *((_BYTE *)v10 + 20) = 0; v5 = (int)v10; } else { v5 = 0; } v23 = -1; v21 = v5; if ( v5 ) InterlockedIncrement((volatile LONG *)(v21 + 4)); v23 = 2; sub_826D00((_DWORD *)v21, (int)v19, 3, 1); v9 = (float *)operator new(0x18u); LOBYTE(v23) = 3; if ( v9 ) v4 = sub_8261F0(v9, v21); else v4 = 0; LOBYTE(v23) = 2; v20 = v4; (*(void (__thiscall **)(float *))(*(_DWORD *)v4 + 108))(v4); v8 = (float *)operator new(0x40u); LOBYTE(v23) = 4; if ( v8 ) v3 = sub_815B40(v8); else v3 = 0; LOBYTE(v23) = 2; v22 = v3; (*(void (__thiscall **)(float *, float *, _DWORD))(*(_DWORD *)v3 + 116))(v3, v20, 0); sub_55BE00((unsigned __int16 *)v22, 1); *((_WORD *)v22 + 4) &= 0xFFF9u; v22[5] = 0.0; v22[6] = 1.4; v7 = (int)v22; v23 = -1; if ( v21 ) sub_402270((volatile LONG *)v21); return v7; } // A211DC: using guessed type void *NiFloatData::`vftable'; //----- (00911D10) -------------------------------------------------------- BOOL __cdecl sub_911D10(LPSTR pszPath) { ITEMIDLIST *v1; // ecx LPITEMIDLIST ppidl; // [esp+0h] [ebp-4h] ppidl = v1; SHGetSpecialFolderLocation(0, 5, &ppidl); return SHGetPathFromIDListA(ppidl, pszPath); } //----- (00911D40) -------------------------------------------------------- _DWORD *__thiscall sub_911D40(_DWORD *this) { _DWORD *v1; // ST00_4 v1 = this; sub_8E5020(); v1[16387] = 0; v1[8194] = 0; v1[1] = -1; return v1; } //----- (00911D80) -------------------------------------------------------- void __thiscall sub_911D80(SOCKET *this) { SOCKET *v1; // ST04_4 v1 = this; sub_911DE0(this); nullsub_6(v1); } //----- (00911DE0) -------------------------------------------------------- SOCKET *__thiscall sub_911DE0(SOCKET *this) { SOCKET *result; // eax int v2; // eax DWORD v3; // eax int v4; // eax SOCKET *v5; // [esp+0h] [ebp-224h] fd_set readfds; // [esp+4h] [ebp-220h] struct timeval timeout; // [esp+10Ch] [ebp-118h] fd_set exceptfds; // [esp+114h] [ebp-110h] int v9; // [esp+220h] [ebp-4h] v5 = this; result = this; if ( this[1] != -1 ) { v9 = 0; v9 = shutdown(this[1], 1); if ( v9 ) { v2 = WSAGetLastError(); unknown_libname_38(v2); v3 = GetLastError(); unknown_libname_38(v3); } if ( v9 != -1 ) { readfds.fd_count = 0; exceptfds.fd_count = 0; readfds.fd_array[readfds.fd_count++] = v5[1]; if ( exceptfds.fd_count < 0x40 ) exceptfds.fd_array[exceptfds.fd_count++] = v5[1]; timeout.tv_sec = 10; timeout.tv_usec = 0; select(1, &readfds, 0, &exceptfds, &timeout); } if ( closesocket(v5[1]) ) { v4 = WSAGetLastError(); unknown_libname_38(v4); } result = v5; v5[1] = -1; } return result; } // 90E9F0: using guessed type _DWORD __stdcall unknown_libname_38(_DWORD); //----- (00911F40) -------------------------------------------------------- int __thiscall sub_911F40(SOCKET *this) { SOCKET v1; // ST14_4 int result; // eax SOCKET *v3; // [esp+4h] [ebp-18h] char v4[4]; // [esp+8h] [ebp-14h] int v5; // [esp+Ch] [ebp-10h] u_long argp; // [esp+10h] [ebp-Ch] int v7; // [esp+14h] [ebp-8h] char optval[4]; // [esp+18h] [ebp-4h] v3 = this; sub_911DE0(this); v1 = socket(2, 1, 0); result = (int)v3; v3[1] = v1; if ( v1 != -1 ) { argp = 1; v5 = ioctlsocket(v3[1], -2147195266, &argp); *(_DWORD *)optval = 1; v5 = setsockopt(v3[1], 6, 1, optval, 4); v7 = 0; if ( v5 ) v7 = WSAGetLastError(); *(_DWORD *)v4 = 0x2000; v5 = setsockopt(v3[1], 0xFFFF, 4097, v4, 4); *(_DWORD *)v4 = 0x8000; result = setsockopt(v3[1], 0xFFFF, 4098, v4, 4); } return result; } //----- (00912020) -------------------------------------------------------- char __thiscall sub_912020(SOCKET *this, char *a2, int a3) { SOCKET *v3; // ST18_4 int v5; // [esp+4h] [ebp-10h] int v6; // [esp+8h] [ebp-Ch] int v7; // [esp+Ch] [ebp-8h] int v8; // [esp+10h] [ebp-4h] v3 = this; sscanf(a2, "%d.%d.%d.%d", &v8, &v5, &v6, &v7); return sub_912070(v3, v8, v5, v6, v7, a3); } //----- (00912070) -------------------------------------------------------- char __thiscall sub_912070(SOCKET *this, char a2, char a3, char a4, char a5, u_short a6) { int v7; // ST28_4 SOCKET *v8; // [esp+8h] [ebp-358h] int v9; // [esp+Ch] [ebp-354h] int v10; // [esp+10h] [ebp-350h] struct timeval timeout; // [esp+18h] [ebp-348h] int v12; // [esp+20h] [ebp-340h] struct sockaddr name; // [esp+24h] [ebp-33Ch] DWORD v14; // [esp+34h] [ebp-32Ch] fd_set exceptfds; // [esp+38h] [ebp-328h] int v16; // [esp+144h] [ebp-21Ch] fd_set writefds; // [esp+148h] [ebp-218h] fd_set readfds; // [esp+250h] [ebp-110h] v8 = this; if ( this[1] == -1 ) { sub_911F40(this); if ( v8[1] == -1 ) return 0; } LOBYTE(v7) = a2; BYTE1(v7) = a3; BYTE2(v7) = a4; HIBYTE(v7) = a5; name.sa_family = 2; *(_WORD *)name.sa_data = htons(a6); *(_DWORD *)&name.sa_data[2] = v7; v14 = timeGetTime(); v12 = 0; v8[16388] = 0; if ( connect(v8[1], &name, 16) == -1 ) { v10 = WSAGetLastError(); if ( v10 != 10035 ) v8[16388] = v10; } v8[16389] = 0; do { timeout.tv_usec = 0; timeout.tv_sec = 0; readfds.fd_count = 0; writefds.fd_count = 0; exceptfds.fd_count = 0; readfds.fd_array[0] = v8[1]; readfds.fd_count = 1; writefds.fd_array[writefds.fd_count++] = v8[1]; if ( exceptfds.fd_count < 0x40 ) exceptfds.fd_array[exceptfds.fd_count++] = v8[1]; if ( select(0, &readfds, &writefds, &exceptfds, &timeout) == -1 && !v8[16389] ) { v9 = WSAGetLastError(); if ( v9 != 10035 ) v8[16389] = v9; } v16 = _WSAFDIsSet(v8[1], &writefds); ++v12; } while ( !v16 && timeGetTime() - v14 < 0x1388 ); if ( !v16 ) return 0; v8[16387] = 0; v8[8194] = 0; return 1; } //----- (00912350) -------------------------------------------------------- int __thiscall sub_912350(_WORD *this, int a2, int a3) { return sub_9448E0(this, a2, a3); } //----- (00912370) -------------------------------------------------------- signed int __thiscall sub_912370(int this) { signed int result; // eax int v2; // eax int v3; // [esp+0h] [ebp-4h] v3 = this; if ( !*(_DWORD *)(this + 32776) ) return 0; if ( send(*(_DWORD *)(this + 4), (const char *)(this + 8), *(_DWORD *)(this + 32776), 0) == -1 ) { v2 = WSAGetLastError(); unknown_libname_38(v2); result = 1; } else { *(_DWORD *)(v3 + 32776) = 0; result = 0; } return result; } // 90E9F0: using guessed type _DWORD __stdcall unknown_libname_38(_DWORD); //----- (009123E0) -------------------------------------------------------- char __thiscall sub_9123E0(_DWORD *this, void *a2, size_t a3) { int v4; // [esp+0h] [ebp-4h] v4 = (int)this; if ( !a3 ) return 1; if ( (signed int)(this[8194] + a3 + 3) > 0x8000 && sub_912370((int)this) ) return 0; if ( (signed int)a3 >= 256 ) { *(_BYTE *)(v4 + (*(_DWORD *)(v4 + 32776))++ + 8) = 0; *(_WORD *)(v4 + *(_DWORD *)(v4 + 32776) + 8) = a3; *(_DWORD *)(v4 + 32776) += 2; } else { *(_BYTE *)(v4 + (*(_DWORD *)(v4 + 32776))++ + 8) = a3; } memcpy((void *)(v4 + *(_DWORD *)(v4 + 32776) + 8), a2, a3); sub_912350((_WORD *)v4, v4 + *(_DWORD *)(v4 + 32776) + 8, a3); *(_DWORD *)(v4 + 32776) += a3; sub_912370(v4); return 1; } //----- (00912510) -------------------------------------------------------- int __thiscall sub_912510(int this, void *a2) { int v2; // ecx int result; // eax size_t v4; // [esp+0h] [ebp-14h] int v5; // [esp+4h] [ebp-10h] signed int v6; // [esp+8h] [ebp-Ch] v5 = this; if ( *(_DWORD *)(this + 65548) != 3 || *(unsigned __int8 *)(this + 32780) != *(_DWORD *)(this + 65548) - 1 ) { if ( *(_DWORD *)(this + 65548) <= 3 || (!*(_BYTE *)(this + 32780) ? (v4 = *(unsigned __int16 *)(this + 32781)) : (v4 = *(unsigned __int8 *)(this + 32780)), *(_BYTE *)(this + 32780) ? (v6 = 1) : (v6 = 3), *(_DWORD *)(this + 65548) < (signed int)(v6 + v4)) ) { result = 0; } else { memcpy(a2, (const void *)(this + v6 + 32780), v4); memcpy((void *)(v5 + 32780), (const void *)(v6 + v5 + v4 + 32780), *(_DWORD *)(v5 + 65548) - (v6 + v4)); *(_DWORD *)(v5 + 65548) -= v6 + v4; result = v4; } } else { memcpy(a2, (const void *)(this + 32781), *(_DWORD *)(this + 65548) - 1); v2 = *(_DWORD *)(v5 + 65548) - 1; *(_DWORD *)(v5 + 65548) = 0; result = v2; } return result; } //----- (00912670) -------------------------------------------------------- int __thiscall sub_912670(SOCKET *this, void *a2) { int result; // eax SOCKET *v3; // [esp+0h] [ebp-Ch] int v4; // [esp+4h] [ebp-8h] int v5; // [esp+8h] [ebp-4h] int v6; // [esp+8h] [ebp-4h] v3 = this; v5 = sub_912510((int)this, a2); if ( v5 > 0 ) return v5; v6 = recv(v3[1], (char *)v3 + v3[16387] + 32780, 0x8000 - v3[16387], 0); if ( v6 == -1 ) { v4 = WSAGetLastError(); if ( v4 == 10054 ) { sub_911DE0(v3); result = -1; } else if ( v4 == 10035 ) { result = 0; } else { sub_911DE0(v3); result = -1; } } else if ( v6 ) { v3[16387] += v6; result = sub_912510((int)v3, a2); } else { sub_911DE0(v3); result = -1; } return result; } //----- (00912750) -------------------------------------------------------- __int16 __thiscall sub_912750(__int16 *this, unsigned __int16 a2) { __int16 result; // ax *this = a2 % 499; result = *this; this[1] = *this; return result; } //----- (00912780) -------------------------------------------------------- _DWORD *__thiscall sub_912780(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // ST04_4 v2 = this; sub_90EEA0(this, a2); *v2 = &PgEditTextGeometry::`vftable'; *((_BYTE *)v2 + 332) = 1; return v2; } // A43DAC: using guessed type void *PgEditTextGeometry::`vftable'; //----- (009127B0) -------------------------------------------------------- void *__thiscall sub_9127B0(_DWORD *this, char a2) { void *v3; // [esp+0h] [ebp-4h] v3 = this; sub_9127E0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (009127E0) -------------------------------------------------------- LONG __thiscall sub_9127E0(_DWORD *this) { *this = &PgEditTextGeometry::`vftable'; return sub_90F000(this); } // A43DAC: using guessed type void *PgEditTextGeometry::`vftable'; //----- (00912800) -------------------------------------------------------- _BYTE *__thiscall sub_912800(_BYTE *this, char a2) { _BYTE *result; // eax result = this; this[332] = a2; return result; } //----- (00912820) -------------------------------------------------------- char __thiscall sub_912820(_BYTE *this) { return this[332]; } //----- (00912840) -------------------------------------------------------- _BYTE *__thiscall sub_912840(char **this, LPCSTR lpString) { _BYTE *result; // eax int v3; // [esp+0h] [ebp-20h] struct tagSIZE psizl; // [esp+18h] [ebp-8h] v3 = (int)this; LOBYTE(result) = sub_90F080(this, (char *)lpString); if ( *(_BYTE *)(v3 + 332) ) { sub_4593C0(*(_DWORD **)(v3 + 312), lpString, *(_DWORD *)(v3 + 296), &psizl); if ( *(_DWORD *)(v3 + 244) - *(_DWORD *)(v3 + 236) >= psizl.cx ) { result = sub_9075B0((_BYTE *)v3, 0); if ( (*(_DWORD *)(v3 + 280) & 0xF) != 1 ) { *(_DWORD *)(v3 + 280) = *(_DWORD *)(v3 + 280) & 0xF0 | 1; result = (_BYTE *)v3; *(_BYTE *)(v3 + 300) = 1; } } else { result = sub_9075B0((_BYTE *)v3, 1); if ( (*(_DWORD *)(v3 + 280) & 0xF) != 3 ) { *(_DWORD *)(v3 + 280) = *(_DWORD *)(v3 + 280) & 0xF0 | 3; result = (_BYTE *)v3; *(_BYTE *)(v3 + 300) = 1; } } } return result; } //----- (00912940) -------------------------------------------------------- int __thiscall sub_912940(int this, _DWORD *a2) { int result; // eax _DWORD *v3; // ecx int v4; // [esp+0h] [ebp-1Ch] int v5; // [esp+14h] [ebp-8h] v4 = this; if ( *(_DWORD *)(this + 236) != *a2 || *(_DWORD *)(this + 240) != a2[1] || *(_DWORD *)(this + 244) != a2[2] || (result = this, *(_DWORD *)(this + 248) != a2[3]) ) { if ( *(_DWORD *)(this + 288) ) { sub_902790( *(_DWORD **)(this + 232), *(char **)(this + 288), *(_DWORD *)(this + 296), &v5, *(_DWORD *)(this + 304), *(_BYTE *)(this + 284), *(_BYTE *)(this + 285), a2); if ( *(_DWORD *)(v4 + 244) - *(_DWORD *)(v4 + 236) >= v5 ) { sub_9075B0((_BYTE *)v4, 0); if ( (*(_DWORD *)(v4 + 280) & 0xF) != 1 ) { *(_DWORD *)(v4 + 280) = *(_DWORD *)(v4 + 280) & 0xF0 | 1; *(_BYTE *)(v4 + 300) = 1; } } else { sub_9075B0((_BYTE *)v4, 1); if ( (*(_DWORD *)(v4 + 280) & 0xF) != 3 ) { *(_DWORD *)(v4 + 280) = *(_DWORD *)(v4 + 280) & 0xF0 | 3; *(_BYTE *)(v4 + 300) = 1; } } } v3 = (_DWORD *)(v4 + 236); *v3 = *a2; v3[1] = a2[1]; v3[2] = a2[2]; result = a2[3]; v3[3] = result; *(_BYTE *)(v4 + 300) = 1; } return result; } //----- (00912AD0) -------------------------------------------------------- _DWORD *__thiscall sub_912AD0(_DWORD *this, volatile LONG *a2) { _DWORD *v2; // ST04_4 int v3; // ecx v2 = this; sub_90EEA0(this, a2); *v2 = &PgPasswdTextGeometry::`vftable'; v2[83] = 0; v3 = (int)(v2 + 83); *(_DWORD *)(v3 + 4) = 0; *(_DWORD *)(v3 + 8) = 0; return v2; } // A43E64: using guessed type void *PgPasswdTextGeometry::`vftable'; //----- (00912B20) -------------------------------------------------------- void **__thiscall sub_912B20(void **this, char a2) { void **v3; // [esp+0h] [ebp-4h] v3 = this; sub_912B50(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00912B50) -------------------------------------------------------- LONG __thiscall sub_912B50(void **this) { void **v1; // ST04_4 v1 = this; *this = &PgPasswdTextGeometry::`vftable'; operator delete[](this[83]); return sub_90F000(v1); } // A43E64: using guessed type void *PgPasswdTextGeometry::`vftable'; //----- (00912B90) -------------------------------------------------------- char __thiscall sub_912B90(char **this, const char *a2) { char result; // al int v3; // ST08_4 char **v4; // [esp+14h] [ebp-28h] bool v5; // [esp+33h] [ebp-9h] const char **v6; // [esp+34h] [ebp-8h] _BYTE *v7; // [esp+38h] [ebp-4h] v4 = this; result = (_BYTE)this + 76; v6 = (const char **)(this + 83); if ( this[83] ) { if ( a2 ) { v3 = strcmp(*v6, a2); result = v3; v5 = v3 == 0; } else { result = (_BYTE)this + 76; v5 = *v6 == 0; } } else { v5 = a2 == 0; } if ( !v5 ) { sub_907970(this + 83, a2); if ( !(dword_BA6C58 & 1) ) { dword_BA6C58 |= 1u; dword_BA6C4C = 0; dword_BA6C50 = 0; dword_BA6C54 = 0; atexit(sub_9A4ED0); } sub_907970((char **)&dword_BA6C4C, a2); v7 = (_BYTE *)dword_BA6C4C; if ( dword_BA6C4C ) { while ( *v7 ) *v7++ = 42; } result = sub_90F080(v4, (char *)dword_BA6C4C); } return result; } // BA6C4C: using guessed type int dword_BA6C4C; // BA6C50: using guessed type int dword_BA6C50; // BA6C54: using guessed type int dword_BA6C54; // BA6C58: using guessed type int dword_BA6C58; //----- (00912CF0) -------------------------------------------------------- int __thiscall sub_912CF0(_DWORD *this) { return this[83]; } //----- (00912D10) -------------------------------------------------------- float *__thiscall sub_912D10(float *this, volatile LONG *a2) { float *v2; // ST04_4 int v3; // ST14_4 float *v4; // ST10_4 float *v5; // ST0C_4 int v6; // ST08_4 v2 = this; sub_912780(this, a2); *(_DWORD *)v2 = &PgImeEditTextGeometry::`vftable'; v3 = (int)(v2 + 85); v2[85] = 0.0; *(_DWORD *)(v3 + 4) = 0; *(_DWORD *)(v3 + 8) = 0; v4 = v2 + 88; v2[88] = 0.0; v4[1] = 0.0; v4[2] = 0.0; v4[3] = 0.0; v5 = v2 + 92; v2[92] = 0.0; v5[1] = 0.0; v5[2] = 0.0; v5[3] = 0.0; v6 = (int)(v2 + 99); v2[99] = 0.0; *(_DWORD *)(v6 + 4) = 0; *(_DWORD *)(v6 + 8) = 0; v2[84] = -6.8056469e38/*NaN*/; v2[96] = 0.0; v2[97] = 0.0; v2[98] = 0.0; v2[88] = 0.69999999; v2[89] = 1.0; v2[90] = 0.69999999; v2[91] = 1.0; v2[92] = 1.0; v2[93] = 1.0; v2[94] = 0.60000002; v2[95] = 1.0; return v2; } // A43F1C: using guessed type void *PgImeEditTextGeometry::`vftable'; //----- (00912E80) -------------------------------------------------------- void **__thiscall sub_912E80(void **this, char a2) { void **v3; // [esp+0h] [ebp-4h] v3 = this; sub_912EB0(this); if ( a2 & 1 ) operator delete(v3); return v3; } //----- (00912EB0) -------------------------------------------------------- LONG __thiscall sub_912EB0(void **this) { void **v1; // ST04_4 v1 = this; *this = &PgImeEditTextGeometry::`vftable'; operator delete[](this[99]); operator delete[](v1[85]); return sub_9127E0(v1); } // A43F1C: using guessed type void *PgImeEditTextGeometry::`vftable'; //----- (00912F00) -------------------------------------------------------- char __thiscall sub_912F00(int this, const char *a2, const char *a3, int a4, int a5) { _DWORD *v6; // ST78_4 int v7; // ST2C_4 const CHAR *v8; // eax int v9; // [esp+28h] [ebp-58h] bool v10; // [esp+6Bh] [ebp-15h] const char **v11; // [esp+6Ch] [ebp-14h] bool v12; // [esp+73h] [ebp-Dh] const char **v13; // [esp+74h] [ebp-Ch] struct tagSIZE psizl; // [esp+78h] [ebp-8h] v9 = this; v13 = (const char **)(this + 288); if ( *(_DWORD *)(this + 288) ) { if ( a2 ) v12 = strcmp(*v13, a2) == 0; else v12 = *v13 == 0; } else { v12 = a2 == 0; } if ( v12 ) { v11 = (const char **)(this + 340); if ( *(_DWORD *)(this + 340) ) v10 = a3 ? strcmp(*v11, a3) == 0 : *v11 == 0; else v10 = a3 == 0; if ( v10 && *(_DWORD *)(this + 336) == a4 ) return 0; } sub_907970((char **)(this + 288), a2); sub_907970((char **)(v9 + 340), a3); *(_DWORD *)(v9 + 336) = a4; *(_DWORD *)(v9 + 384) = a5; *(_BYTE *)(v9 + 300) = 1; if ( !*(_DWORD *)(v9 + 232) ) return 0; if ( *(_BYTE *)(v9 + 332) ) { v6 = *(_DWORD **)(v9 + 312); v7 = *(_DWORD *)(v9 + 348) + *(_DWORD *)(v9 + 296); v8 = (const CHAR *)(*(int (__thiscall **)(int))(*(_DWORD *)v9 + 152))(v9); sub_4593C0(v6, v8, v7, &psizl); if ( *(_DWORD *)(v9 + 244) - *(_DWORD *)(v9 + 236) >= psizl.cx ) { sub_9075B0((_BYTE *)v9, 0); if ( (*(_DWORD *)(v9 + 280) & 0xF) != 1 ) { *(_DWORD *)(v9 + 280) = *(_DWORD *)(v9 + 280) & 0xF0 | 1; *(_BYTE *)(v9 + 300) = 1; } } else { sub_9075B0((_BYTE *)v9, 1); if ( (*(_DWORD *)(v9 + 280) & 0xF) != 3 ) { *(_DWORD *)(v9 + 280) = *(_DWORD *)(v9 + 280) & 0xF0 | 3; *(_BYTE *)(v9 + 300) = 1; } } } sub_904750( *(_DWORD **)(v9 + 232), v9 + 388, v9 + 392, *(_DWORD *)(v9 + 256), v9 + 236, *(char **)(v9 + 288), *(_DWORD *)(v9 + 340), *(_DWORD *)(v9 + 336), *(_DWORD *)(v9 + 384), *(_BYTE *)(v9 + 284), 0, 0, *(_DWORD *)(v9 + 280), *(_DWORD *)(v9 + 304)); return 1; } //----- (00913270) -------------------------------------------------------- int __thiscall sub_913270(int this) { int v1; // ST04_4 v1 = this; sub_907970((char **)(this + 396), *(const char **)(this + 288)); sub_913640(v1 + 396, *(const char **)(v1 + 340)); return *(_DWORD *)(v1 + 396); } //----- (009132D0) -------------------------------------------------------- BOOL __thiscall sub_9132D0(_DWORD *this) { BOOL result; // eax _DWORD *v2; // [esp+0h] [ebp-60h] volatile LONG *v3; // [esp+44h] [ebp-1Ch] int v4; // [esp+48h] [ebp-18h] int i; // [esp+4Ch] [ebp-14h] int v6; // [esp+50h] [ebp-10h] float v7; // [esp+54h] [ebp-Ch] float v8; // [esp+58h] [ebp-8h] float v9; // [esp+5Ch] [ebp-4h] v2 = this; for ( i = 0; i < v2[64]; ++i ) { if ( *(_BYTE *)(v2[63] + 8 * i + 4) ) { sub_867D90(*(_DWORD *)(*(_DWORD *)(v2[63] + 8 * i) + 184)); (*(void (__thiscall **)(_DWORD *, volatile LONG **, _DWORD))(*v2 + 120))(v2, &v3, *(_DWORD *)(v2[63] + 8 * i)); if ( v3 ) sub_402270(v3); *(_BYTE *)(v2[63] + 8 * i + 4) = 0; } } if ( v2[74] > 0 || (result = (BOOL)v2, v2[87] > 0) ) { v9 = 0.0; *(float *)&v6 = 0.0; v7 = 0.0; v8 = 0.0; v9 = *((float *)v2 + 69); if ( !v2[65] || (result = sub_9076C0( (_DWORD **)v2, v2[63], v2[64], (int)(v2 + 59), (char *)v2[72], (int)&v6, v2[85], (int)&v6, (int)&v6, v2[84], v2[96], *((_BYTE *)v2 + 284), v2[65], v2[65], v2[70], v2[76]), (_BYTE)result) ) { result = sub_9076C0( (_DWORD **)v2, v2[63], v2[64], (int)(v2 + 59), (char *)v2[72], (int)(v2 + 66), v2[85], (int)(v2 + 88), (int)(v2 + 92), v2[84], v2[96], *((_BYTE *)v2 + 284), v2[65], v2[65], v2[70], v2[76]); if ( (_BYTE)result ) { for ( i = 0; ; ++i ) { result = (BOOL)v2; if ( i >= v2[64] ) break; if ( *(_BYTE *)(v2[63] + 8 * i + 4) && *(_DWORD *)(v2[63] + 8 * i) ) { v4 = *(_DWORD *)(*(_DWORD *)(v2[63] + 8 * i) + 184); *(_WORD *)(v4 + 50) |= 9u; sub_906490(*(_BYTE **)(v2[63] + 8 * i), *((_BYTE *)v2 + 286)); sub_85A860(v2, *(_DWORD *)(v2[63] + 8 * i), 0); sub_85C4D0(v2); } } } } } return result; } //----- (00913640) -------------------------------------------------------- void __thiscall sub_913640(int this, const char *a2) { char v2; // ST47_1 char *v3; // [esp+48h] [ebp-2Ch] char *v4; // [esp+4Ch] [ebp-28h] int v5; // [esp+60h] [ebp-14h] char *v6; // [esp+6Ch] [ebp-8h] unsigned int v7; // [esp+70h] [ebp-4h] v5 = this; if ( a2 ) { v7 = strlen(a2); if ( v7 ) { if ( *(_DWORD *)(this + 4) >= (signed int)(v7 + *(_DWORD *)(this + 8) + 1) ) { strcat(*(char **)this, a2); } else { *(_DWORD *)(this + 4) = v7 + *(_DWORD *)(this + 8) + 1; v6 = (char *)operator new[](*(_DWORD *)(this + 4)); *v6 = 0; if ( *(_DWORD *)v5 ) { v4 = *(char **)v5; v3 = v6; do { v2 = *v4; *v3++ = *v4++; } while ( v2 ); } strcat(v6, a2); if ( *(_DWORD *)v5 ) operator delete[](*(void **)v5); *(_DWORD *)v5 = v6; } *(_DWORD *)(v5 + 8) += v7; } } } //----- (00913820) -------------------------------------------------------- int __thiscall sub_913820(_DWORD *this) { int v2; // [esp+0h] [ebp-Ch] _BYTE *v3; // [esp+8h] [ebp-4h] v3 = (_BYTE *)this[85]; if ( v3 && *v3 ) v2 = this[85]; else v2 = 0; return v2; } //----- (00913860) -------------------------------------------------------- signed int __cdecl sub_913860(const char *a1) { signed int result; // eax char *i; // ecx if ( !a1 ) return -1; result = strlen(a1); for ( i = (char *)&a1[result - 1]; result > 0; --result ) { if ( *i != 32 ) break; *i-- = 0; } return result; } //----- (009138A0) -------------------------------------------------------- int __cdecl sub_9138A0(_BYTE *a1) { _BYTE *v1; // edi int result; // eax signed int v3; // ebp int v4; // ecx v1 = a1; result = 0; v3 = 1; LOBYTE(v4) = *a1; if ( *a1 ) { do { if ( !v3 ) break; v4 = (char)v4; switch ( (char)v4 ) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: result = (v4 - 48) | 16 * result; break; case 65: case 66: case 67: case 68: case 69: case 70: result = (v4 - 55) | 16 * result; break; case 97: case 98: case 99: case 100: case 101: case 102: result = (v4 - 87) | 16 * result; break; default: v3 = 0; break; } LOBYTE(v4) = (v1++)[1]; } while ( (_BYTE)v4 ); } return result; } //----- (00913950) -------------------------------------------------------- int __cdecl sub_913950(const char *a1, const char *a2, char *a3) { unsigned int v3; // ecx char v4; // al char *v5; // edi const char *v6; // esi int result; // eax unsigned int v8; // kr04_4 signed int v9; // ebx bool v10; // zf char *v11; // [esp+Ch] [ebp-408Ch] unsigned int v12; // [esp+10h] [ebp-4088h] int v13[33]; // [esp+14h] [ebp-4084h] char v14[4096]; // [esp+98h] [ebp-4000h] unsigned int v15[1024]; // [esp+1098h] [ebp-3000h] char v16[4096]; // [esp+2098h] [ebp-2000h] char v17; // [esp+3098h] [ebp-1000h] memset(v14, 0, sizeof(v14)); memset(v15, 0, sizeof(v15)); memset(v13, 0, sizeof(v13)); *(_DWORD *)a3 = 0; strcpy((char *)v15, a2); sub_915FD0(v13, v15); v3 = strlen(a1) + 1; v4 = v3; v3 >>= 2; qmemcpy(v14, a1, 4 * v3); v6 = &a1[4 * v3]; v5 = &v14[4 * v3]; LOBYTE(v3) = v4; result = 0; qmemcpy(v5, v6, v3 & 3); v8 = strlen(v14) + 1; if ( (signed int)((v8 + 14) >> 4) > 0 ) { v11 = v14; v12 = (v8 + 14) >> 4; do { memset(v16, 0, sizeof(v16)); memset(&v17, 0, 0x1000u); strncpy(v16, v11, 0x10u); sub_913F30((int *)v16, v13); v9 = 0; do { sprintf(&v17, a02x, (unsigned __int8)v16[v9]); strcat(a3, &v17); ++v9; } while ( v9 < 16 ); result = v12 - 1; v10 = v12 == 1; v11 += 16; --v12; } while ( !v10 ); } return result; } // 913950: using guessed type char var_4000[4096]; // 913950: using guessed type char var_2000[4096]; //----- (00913AF0) -------------------------------------------------------- int __cdecl sub_913AF0(char *a1, int a2, int a3) { char *v3; // ebx unsigned int v5; // kr08_4 signed int v6; // esi char *v7; // edi int v8; // ST10_4 int v9; // ST0C_4 char v10[4]; // [esp+Ch] [ebp-308Ch] unsigned int v11; // [esp+10h] [ebp-3088h] int v12[33]; // [esp+14h] [ebp-3084h] int v13[1024]; // [esp+98h] [ebp-3000h] char v14; // [esp+1098h] [ebp-2000h] char v15[4095]; // [esp+1099h] [ebp-1FFFh] unsigned int v16[1024]; // [esp+2098h] [ebp-1000h] memset(v12, 0, sizeof(v12)); v3 = a1; *(_DWORD *)a3 = 0; memset(v16, 0, sizeof(v16)); if ( strlen(a1) & 0x1F ) return -1; strcpy((char *)v16, (const char *)a2); sub_915FD0(v12, v16); v5 = strlen(a1) + 1; if ( (signed int)((v5 - 1) >> 5) > 0 ) { v11 = (v5 - 1) >> 5; do { memset(&v14, 0, 0x1000u); memset(v13, 0, sizeof(v13)); *(_DWORD *)v10 = 0; strncpy(&v14, v3, 0x20u); v6 = 0; v7 = (char *)v13; do { v8 = v15[v6]; v9 = *(&v14 + v6); *(_DWORD *)v10 = 0; sprintf(v10, aCC, v9, v8); *v7 = sub_9138A0(v10); v6 += 2; ++v7; } while ( v6 < 32 ); sub_914F80(v13, v12); v3 += 32; strcat((char *)a3, (const char *)v13); --v11; } while ( v11 ); } return sub_913860((const char *)a3) >= 0 ? 0 : 0xFFFFFFFE; } // 913AF0: using guessed type char var_1FFF[4095]; //----- (00913CA0) -------------------------------------------------------- char __cdecl sub_913CA0(const char *a1, int a2, char *a3) { const char *v3; // edx unsigned int v4; // kr04_4 int v6; // esi char i; // al void *v8; // ebp void *v9; // ebx char *v10; // [esp+10h] [ebp-10h] char *v11; // [esp+14h] [ebp-Ch] int v12; // [esp+2Ch] [ebp+Ch] v3 = a1; v4 = strlen(a1) + 1; if ( (signed int)(v4 - 1) <= 0 ) return 0; v6 = 0; v10 = a3; v12 = 0; if ( (signed int)(v4 - 1) <= 0 ) return 1; while ( 1 ) { v11 = (char *)&v3[v6]; for ( i = v3[v6]; i != 124; i = v3[v6++ + 1] ) { if ( !i ) break; } v8 = operator new(0x1F40u); memset(v8, 0, 0x1F40u); v9 = operator new(0x1F40u); memset(v9, 0, 0x1F40u); strncpy((char *)v8, v11, v6 - v12); if ( sub_913AF0((char *)v8, a2, (int)v9) ) break; strcpy(v10, (const char *)v9); v10 += strlen((const char *)v9); operator delete(v8); operator delete(v9); v12 = v6 + 1; if ( v6 + 1 >= (signed int)(v4 - 1) ) return 1; v3 = a1; ++v6; } operator delete(v8); operator delete(v9); return 0; } //----- (00913DE0) -------------------------------------------------------- char __cdecl sub_913DE0(char *a1, int a2, int a3, char a4) { UINT v4; // ebp HANDLE v5; // eax void *v6; // ebx const char *v7; // edx size_t v8; // esi int v9; // ecx char v11; // [esp+10h] [ebp-1000h] char v12; // [esp+11h] [ebp-FFFh] __int16 v13; // [esp+100Dh] [ebp-3h] char v14; // [esp+100Fh] [ebp-1h] if ( !a1 ) return 0; if ( !a2 ) return 0; v4 = RegisterClipboardFormatA(szFormat); if ( !v4 || !OpenClipboard(0) ) return 0; v5 = GetClipboardData(v4); v6 = v5; if ( !v5 || (v7 = (const char *)GlobalLock(v5)) == 0 ) { LABEL_16: CloseClipboard(); return 0; } v11 = 0; memset(&v12, 0, 0xFFCu); v13 = 0; v14 = 0; if ( !sub_913CA0(v7, a3, &v11) || (v8 = a2 - 1, strlen(&v11) > a2 - 1) ) { GlobalUnlock(v6); goto LABEL_16; } strncpy(a1, &v11, v8); if ( strlen(&v11) >= v8 ) v9 = a2 - 1; else v9 = strlen(&v11); a1[v9] = 0; GlobalUnlock(v6); if ( a4 ) SetClipboardData(v4, 0); CloseClipboard(); return 1; } //----- (00913F30) -------------------------------------------------------- int __cdecl sub_913F30(int *a1, _DWORD *a2) { int v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // edx int v6; // ecx int v7; // ebx int v8; // ebp int v9; // ecx int v10; // edx unsigned int v11; // ebx int v12; // ebx unsigned int v13; // ebp int v14; // ebx int v15; // ST10_4 int v16; // ebx int v17; // edi int v18; // esi unsigned int v19; // ebx int v20; // ebx unsigned int v21; // ebp int v22; // ebx int v23; // ST10_4 int v24; // ebx int v25; // edx int v26; // ecx unsigned int v27; // ebx int v28; // ebx unsigned int v29; // ebp int v30; // ebx int v31; // ST10_4 int v32; // ebx int v33; // edi int v34; // esi unsigned int v35; // ebx int v36; // ebx unsigned int v37; // ebp int v38; // ebx int v39; // ST10_4 int v40; // ebx int v41; // edx int v42; // ecx unsigned int v43; // ebx int v44; // ebx unsigned int v45; // ebp int v46; // ebx int v47; // ST10_4 int v48; // ebx int v49; // edi int v50; // esi unsigned int v51; // ebx int v52; // ebx unsigned int v53; // ebp int v54; // ebx int v55; // ST10_4 int v56; // ebx int v57; // edx int v58; // ecx unsigned int v59; // ebx int v60; // ebx unsigned int v61; // ebp int v62; // ebx int v63; // ST10_4 int v64; // ebx int v65; // edi int v66; // esi unsigned int v67; // ebx int v68; // ebx unsigned int v69; // ebp int v70; // ebx int v71; // ST10_4 int v72; // ebx int v73; // edx int v74; // ecx unsigned int v75; // ebx int v76; // ebx unsigned int v77; // ebp int v78; // ebx int v79; // ST10_4 int v80; // ebx int v81; // edi int v82; // esi unsigned int v83; // ebx int v84; // ebx unsigned int v85; // ebp int v86; // ebx int v87; // ST10_4 int v88; // ebx int v89; // edx int v90; // ecx unsigned int v91; // ebx int v92; // ebx unsigned int v93; // ebp int v94; // ebx int v95; // ST10_4 int v96; // ebx int v97; // edi int v98; // esi unsigned int v99; // ebx int v100; // ebx unsigned int v101; // ebp int v102; // ebx int v103; // ST10_4 int v104; // ebx int v105; // edx int v106; // ecx unsigned int v107; // ebx int v108; // ebx unsigned int v109; // ebp int v110; // ebx int v111; // ST10_4 int v112; // ebx int v113; // edi int v114; // esi unsigned int v115; // ebx int v116; // ebx unsigned int v117; // ebp int v118; // ebx int v119; // ST10_4 int v120; // ebx int v121; // edx int v122; // ecx int v123; // ebp unsigned int v124; // eax int v125; // ebx unsigned int v126; // ebp unsigned int v127; // ebx int v128; // eax int result; // eax int v130; // [esp+20h] [ebp+8h] int v131; // [esp+20h] [ebp+8h] int v132; // [esp+20h] [ebp+8h] int v133; // [esp+20h] [ebp+8h] int v134; // [esp+20h] [ebp+8h] int v135; // [esp+20h] [ebp+8h] int v136; // [esp+20h] [ebp+8h] int v137; // [esp+20h] [ebp+8h] int v138; // [esp+20h] [ebp+8h] int v139; // [esp+20h] [ebp+8h] int v140; // [esp+20h] [ebp+8h] int v141; // [esp+20h] [ebp+8h] int v142; // [esp+20h] [ebp+8h] int v143; // [esp+20h] [ebp+8h] v2 = a1[2]; v3 = a1[3]; v4 = a2; v5 = v2 ^ *a2; v6 = dword_AC3910[(v3 ^ v5 ^ a2[1]) & 0xFF] ^ dword_AC3D10[((v3 ^ (unsigned int)v5 ^ a2[1]) >> 8) & 0xFF] ^ dword_AC4110[((v3 ^ (unsigned int)v5 ^ a2[1]) >> 16) & 0xFF] ^ dword_AC4510[(v3 ^ (unsigned int)v5 ^ a2[1]) >> 24]; v7 = dword_AC3910[(v6 + v5) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v6 + v5) >> 8] ^ dword_AC4110[((unsigned int)(v6 + v5) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v6 + v5) >> 24]; v8 = dword_AC3910[(v7 + v6) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v7 + v6) >> 8] ^ dword_AC4110[((unsigned int)(v7 + v6) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v7 + v6) >> 24]; v9 = *a1 ^ (v7 + v8); v10 = v8 ^ a1[1]; v11 = v10 ^ v9 ^ a2[2] ^ a2[3]; v12 = dword_AC3910[(unsigned __int8)v11] ^ dword_AC3D10[(unsigned __int16)v11 >> 8] ^ dword_AC4110[(v11 >> 16) & 0xFF] ^ dword_AC4510[v11 >> 24]; v13 = v12 + (v9 ^ a2[2]); v130 = v12; v14 = dword_AC3910[(unsigned __int8)v13] ^ dword_AC3D10[(unsigned __int16)v13 >> 8] ^ dword_AC4110[(v13 >> 16) & 0xFF] ^ dword_AC4510[v13 >> 24]; v15 = v14; v16 = dword_AC3910[(v14 + v130) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v14 + v130) >> 8] ^ dword_AC4110[((unsigned int)(v14 + v130) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v14 + v130) >> 24]; v17 = v16 ^ v3; v18 = (v16 + v15) ^ v2; v19 = v17 ^ v18 ^ v4[4] ^ v4[5]; v20 = dword_AC3910[(unsigned __int8)v19] ^ dword_AC3D10[(unsigned __int16)v19 >> 8] ^ dword_AC4110[(v19 >> 16) & 0xFF] ^ dword_AC4510[v19 >> 24]; v21 = v20 + (v18 ^ v4[4]); v131 = v20; v22 = dword_AC3910[(unsigned __int8)v21] ^ dword_AC3D10[(unsigned __int16)v21 >> 8] ^ dword_AC4110[(v21 >> 16) & 0xFF] ^ dword_AC4510[v21 >> 24]; v23 = v22; v24 = dword_AC3910[(v22 + v131) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v22 + v131) >> 8] ^ dword_AC4110[((unsigned int)(v22 + v131) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v22 + v131) >> 24]; v25 = v24 ^ v10; v26 = (v24 + v23) ^ v9; v27 = v25 ^ v26 ^ v4[6] ^ v4[7]; v28 = dword_AC3910[(unsigned __int8)v27] ^ dword_AC3D10[(unsigned __int16)v27 >> 8] ^ dword_AC4110[(v27 >> 16) & 0xFF] ^ dword_AC4510[v27 >> 24]; v29 = v28 + (v26 ^ v4[6]); v132 = v28; v30 = dword_AC3910[(unsigned __int8)v29] ^ dword_AC3D10[(unsigned __int16)v29 >> 8] ^ dword_AC4110[(v29 >> 16) & 0xFF] ^ dword_AC4510[v29 >> 24]; v31 = v30; v32 = dword_AC3910[(v30 + v132) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v30 + v132) >> 8] ^ dword_AC4110[((unsigned int)(v30 + v132) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v30 + v132) >> 24]; v33 = v32 ^ v17; v34 = (v32 + v31) ^ v18; v35 = v33 ^ v34 ^ v4[8] ^ v4[9]; v36 = dword_AC3910[(unsigned __int8)v35] ^ dword_AC3D10[(unsigned __int16)v35 >> 8] ^ dword_AC4110[(v35 >> 16) & 0xFF] ^ dword_AC4510[v35 >> 24]; v37 = v36 + (v34 ^ v4[8]); v133 = v36; v38 = dword_AC3910[(unsigned __int8)v37] ^ dword_AC3D10[(unsigned __int16)v37 >> 8] ^ dword_AC4110[(v37 >> 16) & 0xFF] ^ dword_AC4510[v37 >> 24]; v39 = v38; v40 = dword_AC3910[(v38 + v133) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v38 + v133) >> 8] ^ dword_AC4110[((unsigned int)(v38 + v133) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v38 + v133) >> 24]; v41 = v40 ^ v25; v42 = (v40 + v39) ^ v26; v43 = v41 ^ v42 ^ v4[10] ^ v4[11]; v44 = dword_AC3910[(unsigned __int8)v43] ^ dword_AC3D10[(unsigned __int16)v43 >> 8] ^ dword_AC4110[(v43 >> 16) & 0xFF] ^ dword_AC4510[v43 >> 24]; v45 = v44 + (v42 ^ v4[10]); v134 = v44; v46 = dword_AC3910[(unsigned __int8)v45] ^ dword_AC3D10[(unsigned __int16)v45 >> 8] ^ dword_AC4110[(v45 >> 16) & 0xFF] ^ dword_AC4510[v45 >> 24]; v47 = v46; v48 = dword_AC3910[(v46 + v134) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v46 + v134) >> 8] ^ dword_AC4110[((unsigned int)(v46 + v134) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v46 + v134) >> 24]; v49 = v48 ^ v33; v50 = (v48 + v47) ^ v34; v51 = v49 ^ v50 ^ v4[12] ^ v4[13]; v52 = dword_AC3910[(unsigned __int8)v51] ^ dword_AC3D10[(unsigned __int16)v51 >> 8] ^ dword_AC4110[(v51 >> 16) & 0xFF] ^ dword_AC4510[v51 >> 24]; v53 = v52 + (v50 ^ v4[12]); v135 = v52; v54 = dword_AC3910[(unsigned __int8)v53] ^ dword_AC3D10[(unsigned __int16)v53 >> 8] ^ dword_AC4110[(v53 >> 16) & 0xFF] ^ dword_AC4510[v53 >> 24]; v55 = v54; v56 = dword_AC3910[(v54 + v135) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v54 + v135) >> 8] ^ dword_AC4110[((unsigned int)(v54 + v135) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v54 + v135) >> 24]; v57 = v56 ^ v41; v58 = (v56 + v55) ^ v42; v59 = v57 ^ v58 ^ v4[14] ^ v4[15]; v60 = dword_AC3910[(unsigned __int8)v59] ^ dword_AC3D10[(unsigned __int16)v59 >> 8] ^ dword_AC4110[(v59 >> 16) & 0xFF] ^ dword_AC4510[v59 >> 24]; v61 = v60 + (v58 ^ v4[14]); v136 = v60; v62 = dword_AC3910[(unsigned __int8)v61] ^ dword_AC3D10[(unsigned __int16)v61 >> 8] ^ dword_AC4110[(v61 >> 16) & 0xFF] ^ dword_AC4510[v61 >> 24]; v63 = v62; v64 = dword_AC3910[(v62 + v136) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v62 + v136) >> 8] ^ dword_AC4110[((unsigned int)(v62 + v136) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v62 + v136) >> 24]; v65 = v64 ^ v49; v66 = (v64 + v63) ^ v50; v67 = v65 ^ v66 ^ v4[16] ^ v4[17]; v68 = dword_AC3910[(unsigned __int8)v67] ^ dword_AC3D10[(unsigned __int16)v67 >> 8] ^ dword_AC4110[(v67 >> 16) & 0xFF] ^ dword_AC4510[v67 >> 24]; v69 = v68 + (v66 ^ v4[16]); v137 = v68; v70 = dword_AC3910[(unsigned __int8)v69] ^ dword_AC3D10[(unsigned __int16)v69 >> 8] ^ dword_AC4110[(v69 >> 16) & 0xFF] ^ dword_AC4510[v69 >> 24]; v71 = v70; v72 = dword_AC3910[(v70 + v137) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v70 + v137) >> 8] ^ dword_AC4110[((unsigned int)(v70 + v137) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v70 + v137) >> 24]; v73 = v72 ^ v57; v74 = (v72 + v71) ^ v58; v75 = v73 ^ v74 ^ v4[18] ^ v4[19]; v76 = dword_AC3910[(unsigned __int8)v75] ^ dword_AC3D10[(unsigned __int16)v75 >> 8] ^ dword_AC4110[(v75 >> 16) & 0xFF] ^ dword_AC4510[v75 >> 24]; v77 = v76 + (v74 ^ v4[18]); v138 = v76; v78 = dword_AC3910[(unsigned __int8)v77] ^ dword_AC3D10[(unsigned __int16)v77 >> 8] ^ dword_AC4110[(v77 >> 16) & 0xFF] ^ dword_AC4510[v77 >> 24]; v79 = v78; v80 = dword_AC3910[(v78 + v138) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v78 + v138) >> 8] ^ dword_AC4110[((unsigned int)(v78 + v138) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v78 + v138) >> 24]; v81 = v80 ^ v65; v82 = (v80 + v79) ^ v66; v83 = v81 ^ v82 ^ v4[20] ^ v4[21]; v84 = dword_AC3910[(unsigned __int8)v83] ^ dword_AC3D10[(unsigned __int16)v83 >> 8] ^ dword_AC4110[(v83 >> 16) & 0xFF] ^ dword_AC4510[v83 >> 24]; v85 = v84 + (v82 ^ v4[20]); v139 = v84; v86 = dword_AC3910[(unsigned __int8)v85] ^ dword_AC3D10[(unsigned __int16)v85 >> 8] ^ dword_AC4110[(v85 >> 16) & 0xFF] ^ dword_AC4510[v85 >> 24]; v87 = v86; v88 = dword_AC3910[(v86 + v139) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v86 + v139) >> 8] ^ dword_AC4110[((unsigned int)(v86 + v139) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v86 + v139) >> 24]; v89 = v88 ^ v73; v90 = (v88 + v87) ^ v74; v91 = v89 ^ v90 ^ v4[22] ^ v4[23]; v92 = dword_AC3910[(unsigned __int8)v91] ^ dword_AC3D10[(unsigned __int16)v91 >> 8] ^ dword_AC4110[(v91 >> 16) & 0xFF] ^ dword_AC4510[v91 >> 24]; v93 = v92 + (v90 ^ v4[22]); v140 = v92; v94 = dword_AC3910[(unsigned __int8)v93] ^ dword_AC3D10[(unsigned __int16)v93 >> 8] ^ dword_AC4110[(v93 >> 16) & 0xFF] ^ dword_AC4510[v93 >> 24]; v95 = v94; v96 = dword_AC3910[(v94 + v140) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v94 + v140) >> 8] ^ dword_AC4110[((unsigned int)(v94 + v140) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v94 + v140) >> 24]; v97 = v96 ^ v81; v98 = (v96 + v95) ^ v82; v99 = v97 ^ v98 ^ v4[24] ^ v4[25]; v100 = dword_AC3910[(unsigned __int8)v99] ^ dword_AC3D10[(unsigned __int16)v99 >> 8] ^ dword_AC4110[(v99 >> 16) & 0xFF] ^ dword_AC4510[v99 >> 24]; v101 = v100 + (v98 ^ v4[24]); v141 = v100; v102 = dword_AC3910[(unsigned __int8)v101] ^ dword_AC3D10[(unsigned __int16)v101 >> 8] ^ dword_AC4110[(v101 >> 16) & 0xFF] ^ dword_AC4510[v101 >> 24]; v103 = v102; v104 = dword_AC3910[(v102 + v141) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v102 + v141) >> 8] ^ dword_AC4110[((unsigned int)(v102 + v141) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v102 + v141) >> 24]; v105 = v104 ^ v89; v106 = (v104 + v103) ^ v90; v107 = v105 ^ v106 ^ v4[26] ^ v4[27]; v108 = dword_AC3910[(unsigned __int8)v107] ^ dword_AC3D10[(unsigned __int16)v107 >> 8] ^ dword_AC4110[(v107 >> 16) & 0xFF] ^ dword_AC4510[v107 >> 24]; v109 = v108 + (v106 ^ v4[26]); v142 = v108; v110 = dword_AC3910[(unsigned __int8)v109] ^ dword_AC3D10[(unsigned __int16)v109 >> 8] ^ dword_AC4110[(v109 >> 16) & 0xFF] ^ dword_AC4510[v109 >> 24]; v111 = v110; v112 = dword_AC3910[(v110 + v142) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v110 + v142) >> 8] ^ dword_AC4110[((unsigned int)(v110 + v142) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v110 + v142) >> 24]; v113 = v112 ^ v97; v114 = (v112 + v111) ^ v98; v115 = v113 ^ v114 ^ v4[28] ^ v4[29]; v116 = dword_AC3910[(unsigned __int8)v115] ^ dword_AC3D10[(unsigned __int16)v115 >> 8] ^ dword_AC4110[(v115 >> 16) & 0xFF] ^ dword_AC4510[v115 >> 24]; v117 = v116 + (v114 ^ v4[28]); v143 = v116; v118 = dword_AC3910[(unsigned __int8)v117] ^ dword_AC3D10[(unsigned __int16)v117 >> 8] ^ dword_AC4110[(v117 >> 16) & 0xFF] ^ dword_AC4510[v117 >> 24]; v119 = v118; v120 = dword_AC3910[(v118 + v143) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v118 + v143) >> 8] ^ dword_AC4110[((unsigned int)(v118 + v143) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v118 + v143) >> 24]; v121 = v120 ^ v105; v122 = (v120 + v119) ^ v106; v123 = v122 ^ v4[30]; v124 = v121 ^ v123 ^ v4[31]; v125 = dword_AC3910[(unsigned __int8)v124] ^ dword_AC3D10[(unsigned __int16)v124 >> 8] ^ dword_AC4110[(v124 >> 16) & 0xFF] ^ dword_AC4510[v124 >> 24]; v126 = v125 + v123; v127 = (dword_AC3910[(unsigned __int8)v126] ^ dword_AC3D10[(unsigned __int16)v126 >> 8] ^ dword_AC4110[(v126 >> 16) & 0xFF] ^ dword_AC4510[v126 >> 24]) + v125; v128 = dword_AC3910[(unsigned __int8)v127] ^ dword_AC3D10[(unsigned __int16)v127 >> 8] ^ dword_AC4110[(v127 >> 16) & 0xFF] ^ dword_AC4510[v127 >> 24]; *a1 = v114 ^ (v128 + (dword_AC3910[(unsigned __int8)v126] ^ dword_AC3D10[(unsigned __int16)v126 >> 8] ^ dword_AC4110[(v126 >> 16) & 0xFF] ^ dword_AC4510[v126 >> 24])); result = v113 ^ v128; a1[2] = v122; a1[1] = result; a1[3] = v121; return result; } //----- (00914F80) -------------------------------------------------------- int __cdecl sub_914F80(int *a1, _DWORD *a2) { int v2; // esi int v3; // edi _DWORD *v4; // eax int v5; // edx int v6; // ecx int v7; // ebx int v8; // ebp int v9; // ecx int v10; // edx unsigned int v11; // ebx int v12; // ebx unsigned int v13; // ebp int v14; // ebx int v15; // ST10_4 int v16; // ebx int v17; // edi int v18; // esi unsigned int v19; // ebx int v20; // ebx unsigned int v21; // ebp int v22; // ebx int v23; // ST10_4 int v24; // ebx int v25; // edx int v26; // ecx unsigned int v27; // ebx int v28; // ebx unsigned int v29; // ebp int v30; // ebx int v31; // ST10_4 int v32; // ebx int v33; // edi int v34; // esi unsigned int v35; // ebx int v36; // ebx unsigned int v37; // ebp int v38; // ebx int v39; // ST10_4 int v40; // ebx int v41; // edx int v42; // ecx unsigned int v43; // ebx int v44; // ebx unsigned int v45; // ebp int v46; // ebx int v47; // ST10_4 int v48; // ebx int v49; // edi int v50; // esi unsigned int v51; // ebx int v52; // ebx unsigned int v53; // ebp int v54; // ebx int v55; // ST10_4 int v56; // ebx int v57; // edx int v58; // ecx unsigned int v59; // ebx int v60; // ebx unsigned int v61; // ebp int v62; // ebx int v63; // ST10_4 int v64; // ebx int v65; // edi int v66; // esi unsigned int v67; // ebx int v68; // ebx unsigned int v69; // ebp int v70; // ebx int v71; // ST10_4 int v72; // ebx int v73; // edx int v74; // ecx unsigned int v75; // ebx int v76; // ebx unsigned int v77; // ebp int v78; // ebx int v79; // ST10_4 int v80; // ebx int v81; // edi int v82; // esi unsigned int v83; // ebx int v84; // ebx unsigned int v85; // ebp int v86; // ebx int v87; // ST10_4 int v88; // ebx int v89; // edx int v90; // ecx unsigned int v91; // ebx int v92; // ebx unsigned int v93; // ebp int v94; // ebx int v95; // ST10_4 int v96; // ebx int v97; // edi int v98; // esi unsigned int v99; // ebx int v100; // ebx unsigned int v101; // ebp int v102; // ebx int v103; // ST10_4 int v104; // ebx int v105; // edx int v106; // ecx unsigned int v107; // ebx int v108; // ebx unsigned int v109; // ebp int v110; // ebx int v111; // ST10_4 int v112; // ebx int v113; // edi int v114; // esi unsigned int v115; // ebx int v116; // ebx unsigned int v117; // ebp int v118; // ebx int v119; // ST10_4 int v120; // ebx int v121; // edx int v122; // ecx int v123; // ebp unsigned int v124; // eax int v125; // ebx unsigned int v126; // ebp unsigned int v127; // ebx int v128; // eax int result; // eax int v130; // [esp+20h] [ebp+8h] int v131; // [esp+20h] [ebp+8h] int v132; // [esp+20h] [ebp+8h] int v133; // [esp+20h] [ebp+8h] int v134; // [esp+20h] [ebp+8h] int v135; // [esp+20h] [ebp+8h] int v136; // [esp+20h] [ebp+8h] int v137; // [esp+20h] [ebp+8h] int v138; // [esp+20h] [ebp+8h] int v139; // [esp+20h] [ebp+8h] int v140; // [esp+20h] [ebp+8h] int v141; // [esp+20h] [ebp+8h] int v142; // [esp+20h] [ebp+8h] int v143; // [esp+20h] [ebp+8h] v2 = a1[2]; v3 = a1[3]; v4 = a2; v5 = v2 ^ a2[30]; v6 = dword_AC3910[(v3 ^ v5 ^ a2[31]) & 0xFF] ^ dword_AC3D10[((v3 ^ (unsigned int)v5 ^ a2[31]) >> 8) & 0xFF] ^ dword_AC4110[((v3 ^ (unsigned int)v5 ^ a2[31]) >> 16) & 0xFF] ^ dword_AC4510[(v3 ^ (unsigned int)v5 ^ a2[31]) >> 24]; v7 = dword_AC3910[(v6 + v5) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v6 + v5) >> 8] ^ dword_AC4110[((unsigned int)(v6 + v5) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v6 + v5) >> 24]; v8 = dword_AC3910[(v7 + v6) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v7 + v6) >> 8] ^ dword_AC4110[((unsigned int)(v7 + v6) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v7 + v6) >> 24]; v9 = *a1 ^ (v7 + v8); v10 = v8 ^ a1[1]; v11 = v10 ^ v9 ^ a2[28] ^ a2[29]; v12 = dword_AC3910[(unsigned __int8)v11] ^ dword_AC3D10[(unsigned __int16)v11 >> 8] ^ dword_AC4110[(v11 >> 16) & 0xFF] ^ dword_AC4510[v11 >> 24]; v13 = v12 + (v9 ^ a2[28]); v130 = v12; v14 = dword_AC3910[(unsigned __int8)v13] ^ dword_AC3D10[(unsigned __int16)v13 >> 8] ^ dword_AC4110[(v13 >> 16) & 0xFF] ^ dword_AC4510[v13 >> 24]; v15 = v14; v16 = dword_AC3910[(v14 + v130) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v14 + v130) >> 8] ^ dword_AC4110[((unsigned int)(v14 + v130) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v14 + v130) >> 24]; v17 = v16 ^ v3; v18 = (v16 + v15) ^ v2; v19 = v17 ^ v18 ^ v4[26] ^ v4[27]; v20 = dword_AC3910[(unsigned __int8)v19] ^ dword_AC3D10[(unsigned __int16)v19 >> 8] ^ dword_AC4110[(v19 >> 16) & 0xFF] ^ dword_AC4510[v19 >> 24]; v21 = v20 + (v18 ^ v4[26]); v131 = v20; v22 = dword_AC3910[(unsigned __int8)v21] ^ dword_AC3D10[(unsigned __int16)v21 >> 8] ^ dword_AC4110[(v21 >> 16) & 0xFF] ^ dword_AC4510[v21 >> 24]; v23 = v22; v24 = dword_AC3910[(v22 + v131) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v22 + v131) >> 8] ^ dword_AC4110[((unsigned int)(v22 + v131) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v22 + v131) >> 24]; v25 = v24 ^ v10; v26 = (v24 + v23) ^ v9; v27 = v25 ^ v26 ^ v4[24] ^ v4[25]; v28 = dword_AC3910[(unsigned __int8)v27] ^ dword_AC3D10[(unsigned __int16)v27 >> 8] ^ dword_AC4110[(v27 >> 16) & 0xFF] ^ dword_AC4510[v27 >> 24]; v29 = v28 + (v26 ^ v4[24]); v132 = v28; v30 = dword_AC3910[(unsigned __int8)v29] ^ dword_AC3D10[(unsigned __int16)v29 >> 8] ^ dword_AC4110[(v29 >> 16) & 0xFF] ^ dword_AC4510[v29 >> 24]; v31 = v30; v32 = dword_AC3910[(v30 + v132) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v30 + v132) >> 8] ^ dword_AC4110[((unsigned int)(v30 + v132) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v30 + v132) >> 24]; v33 = v32 ^ v17; v34 = (v32 + v31) ^ v18; v35 = v33 ^ v34 ^ v4[22] ^ v4[23]; v36 = dword_AC3910[(unsigned __int8)v35] ^ dword_AC3D10[(unsigned __int16)v35 >> 8] ^ dword_AC4110[(v35 >> 16) & 0xFF] ^ dword_AC4510[v35 >> 24]; v37 = v36 + (v34 ^ v4[22]); v133 = v36; v38 = dword_AC3910[(unsigned __int8)v37] ^ dword_AC3D10[(unsigned __int16)v37 >> 8] ^ dword_AC4110[(v37 >> 16) & 0xFF] ^ dword_AC4510[v37 >> 24]; v39 = v38; v40 = dword_AC3910[(v38 + v133) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v38 + v133) >> 8] ^ dword_AC4110[((unsigned int)(v38 + v133) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v38 + v133) >> 24]; v41 = v40 ^ v25; v42 = (v40 + v39) ^ v26; v43 = v41 ^ v42 ^ v4[20] ^ v4[21]; v44 = dword_AC3910[(unsigned __int8)v43] ^ dword_AC3D10[(unsigned __int16)v43 >> 8] ^ dword_AC4110[(v43 >> 16) & 0xFF] ^ dword_AC4510[v43 >> 24]; v45 = v44 + (v42 ^ v4[20]); v134 = v44; v46 = dword_AC3910[(unsigned __int8)v45] ^ dword_AC3D10[(unsigned __int16)v45 >> 8] ^ dword_AC4110[(v45 >> 16) & 0xFF] ^ dword_AC4510[v45 >> 24]; v47 = v46; v48 = dword_AC3910[(v46 + v134) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v46 + v134) >> 8] ^ dword_AC4110[((unsigned int)(v46 + v134) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v46 + v134) >> 24]; v49 = v48 ^ v33; v50 = (v48 + v47) ^ v34; v51 = v49 ^ v50 ^ v4[18] ^ v4[19]; v52 = dword_AC3910[(unsigned __int8)v51] ^ dword_AC3D10[(unsigned __int16)v51 >> 8] ^ dword_AC4110[(v51 >> 16) & 0xFF] ^ dword_AC4510[v51 >> 24]; v53 = v52 + (v50 ^ v4[18]); v135 = v52; v54 = dword_AC3910[(unsigned __int8)v53] ^ dword_AC3D10[(unsigned __int16)v53 >> 8] ^ dword_AC4110[(v53 >> 16) & 0xFF] ^ dword_AC4510[v53 >> 24]; v55 = v54; v56 = dword_AC3910[(v54 + v135) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v54 + v135) >> 8] ^ dword_AC4110[((unsigned int)(v54 + v135) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v54 + v135) >> 24]; v57 = v56 ^ v41; v58 = (v56 + v55) ^ v42; v59 = v57 ^ v58 ^ v4[16] ^ v4[17]; v60 = dword_AC3910[(unsigned __int8)v59] ^ dword_AC3D10[(unsigned __int16)v59 >> 8] ^ dword_AC4110[(v59 >> 16) & 0xFF] ^ dword_AC4510[v59 >> 24]; v61 = v60 + (v58 ^ v4[16]); v136 = v60; v62 = dword_AC3910[(unsigned __int8)v61] ^ dword_AC3D10[(unsigned __int16)v61 >> 8] ^ dword_AC4110[(v61 >> 16) & 0xFF] ^ dword_AC4510[v61 >> 24]; v63 = v62; v64 = dword_AC3910[(v62 + v136) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v62 + v136) >> 8] ^ dword_AC4110[((unsigned int)(v62 + v136) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v62 + v136) >> 24]; v65 = v64 ^ v49; v66 = (v64 + v63) ^ v50; v67 = v65 ^ v66 ^ v4[14] ^ v4[15]; v68 = dword_AC3910[(unsigned __int8)v67] ^ dword_AC3D10[(unsigned __int16)v67 >> 8] ^ dword_AC4110[(v67 >> 16) & 0xFF] ^ dword_AC4510[v67 >> 24]; v69 = v68 + (v66 ^ v4[14]); v137 = v68; v70 = dword_AC3910[(unsigned __int8)v69] ^ dword_AC3D10[(unsigned __int16)v69 >> 8] ^ dword_AC4110[(v69 >> 16) & 0xFF] ^ dword_AC4510[v69 >> 24]; v71 = v70; v72 = dword_AC3910[(v70 + v137) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v70 + v137) >> 8] ^ dword_AC4110[((unsigned int)(v70 + v137) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v70 + v137) >> 24]; v73 = v72 ^ v57; v74 = (v72 + v71) ^ v58; v75 = v73 ^ v74 ^ v4[12] ^ v4[13]; v76 = dword_AC3910[(unsigned __int8)v75] ^ dword_AC3D10[(unsigned __int16)v75 >> 8] ^ dword_AC4110[(v75 >> 16) & 0xFF] ^ dword_AC4510[v75 >> 24]; v77 = v76 + (v74 ^ v4[12]); v138 = v76; v78 = dword_AC3910[(unsigned __int8)v77] ^ dword_AC3D10[(unsigned __int16)v77 >> 8] ^ dword_AC4110[(v77 >> 16) & 0xFF] ^ dword_AC4510[v77 >> 24]; v79 = v78; v80 = dword_AC3910[(v78 + v138) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v78 + v138) >> 8] ^ dword_AC4110[((unsigned int)(v78 + v138) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v78 + v138) >> 24]; v81 = v80 ^ v65; v82 = (v80 + v79) ^ v66; v83 = v81 ^ v82 ^ v4[10] ^ v4[11]; v84 = dword_AC3910[(unsigned __int8)v83] ^ dword_AC3D10[(unsigned __int16)v83 >> 8] ^ dword_AC4110[(v83 >> 16) & 0xFF] ^ dword_AC4510[v83 >> 24]; v85 = v84 + (v82 ^ v4[10]); v139 = v84; v86 = dword_AC3910[(unsigned __int8)v85] ^ dword_AC3D10[(unsigned __int16)v85 >> 8] ^ dword_AC4110[(v85 >> 16) & 0xFF] ^ dword_AC4510[v85 >> 24]; v87 = v86; v88 = dword_AC3910[(v86 + v139) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v86 + v139) >> 8] ^ dword_AC4110[((unsigned int)(v86 + v139) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v86 + v139) >> 24]; v89 = v88 ^ v73; v90 = (v88 + v87) ^ v74; v91 = v89 ^ v90 ^ v4[8] ^ v4[9]; v92 = dword_AC3910[(unsigned __int8)v91] ^ dword_AC3D10[(unsigned __int16)v91 >> 8] ^ dword_AC4110[(v91 >> 16) & 0xFF] ^ dword_AC4510[v91 >> 24]; v93 = v92 + (v90 ^ v4[8]); v140 = v92; v94 = dword_AC3910[(unsigned __int8)v93] ^ dword_AC3D10[(unsigned __int16)v93 >> 8] ^ dword_AC4110[(v93 >> 16) & 0xFF] ^ dword_AC4510[v93 >> 24]; v95 = v94; v96 = dword_AC3910[(v94 + v140) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v94 + v140) >> 8] ^ dword_AC4110[((unsigned int)(v94 + v140) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v94 + v140) >> 24]; v97 = v96 ^ v81; v98 = (v96 + v95) ^ v82; v99 = v97 ^ v98 ^ v4[6] ^ v4[7]; v100 = dword_AC3910[(unsigned __int8)v99] ^ dword_AC3D10[(unsigned __int16)v99 >> 8] ^ dword_AC4110[(v99 >> 16) & 0xFF] ^ dword_AC4510[v99 >> 24]; v101 = v100 + (v98 ^ v4[6]); v141 = v100; v102 = dword_AC3910[(unsigned __int8)v101] ^ dword_AC3D10[(unsigned __int16)v101 >> 8] ^ dword_AC4110[(v101 >> 16) & 0xFF] ^ dword_AC4510[v101 >> 24]; v103 = v102; v104 = dword_AC3910[(v102 + v141) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v102 + v141) >> 8] ^ dword_AC4110[((unsigned int)(v102 + v141) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v102 + v141) >> 24]; v105 = v104 ^ v89; v106 = (v104 + v103) ^ v90; v107 = v105 ^ v106 ^ v4[4] ^ v4[5]; v108 = dword_AC3910[(unsigned __int8)v107] ^ dword_AC3D10[(unsigned __int16)v107 >> 8] ^ dword_AC4110[(v107 >> 16) & 0xFF] ^ dword_AC4510[v107 >> 24]; v109 = v108 + (v106 ^ v4[4]); v142 = v108; v110 = dword_AC3910[(unsigned __int8)v109] ^ dword_AC3D10[(unsigned __int16)v109 >> 8] ^ dword_AC4110[(v109 >> 16) & 0xFF] ^ dword_AC4510[v109 >> 24]; v111 = v110; v112 = dword_AC3910[(v110 + v142) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v110 + v142) >> 8] ^ dword_AC4110[((unsigned int)(v110 + v142) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v110 + v142) >> 24]; v113 = v112 ^ v97; v114 = (v112 + v111) ^ v98; v115 = v113 ^ v114 ^ v4[2] ^ v4[3]; v116 = dword_AC3910[(unsigned __int8)v115] ^ dword_AC3D10[(unsigned __int16)v115 >> 8] ^ dword_AC4110[(v115 >> 16) & 0xFF] ^ dword_AC4510[v115 >> 24]; v117 = v116 + (v114 ^ v4[2]); v143 = v116; v118 = dword_AC3910[(unsigned __int8)v117] ^ dword_AC3D10[(unsigned __int16)v117 >> 8] ^ dword_AC4110[(v117 >> 16) & 0xFF] ^ dword_AC4510[v117 >> 24]; v119 = v118; v120 = dword_AC3910[(v118 + v143) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v118 + v143) >> 8] ^ dword_AC4110[((unsigned int)(v118 + v143) >> 16) & 0xFF] ^ dword_AC4510[(unsigned int)(v118 + v143) >> 24]; v121 = v120 ^ v105; v122 = (v120 + v119) ^ v106; v123 = v122 ^ *v4; v124 = v121 ^ v123 ^ v4[1]; v125 = dword_AC3910[(unsigned __int8)v124] ^ dword_AC3D10[(unsigned __int16)v124 >> 8] ^ dword_AC4110[(v124 >> 16) & 0xFF] ^ dword_AC4510[v124 >> 24]; v126 = v125 + v123; v127 = (dword_AC3910[(unsigned __int8)v126] ^ dword_AC3D10[(unsigned __int16)v126 >> 8] ^ dword_AC4110[(v126 >> 16) & 0xFF] ^ dword_AC4510[v126 >> 24]) + v125; v128 = dword_AC3910[(unsigned __int8)v127] ^ dword_AC3D10[(unsigned __int16)v127 >> 8] ^ dword_AC4110[(v127 >> 16) & 0xFF] ^ dword_AC4510[v127 >> 24]; *a1 = v114 ^ (v128 + (dword_AC3910[(unsigned __int8)v126] ^ dword_AC3D10[(unsigned __int16)v126 >> 8] ^ dword_AC4110[(v126 >> 16) & 0xFF] ^ dword_AC4510[v126 >> 24])); result = v113 ^ v128; a1[2] = v122; a1[1] = result; a1[3] = v121; return result; } //----- (00915FD0) -------------------------------------------------------- int *__cdecl sub_915FD0(int *a1, unsigned int *a2) { unsigned int v2; // edx unsigned int v3; // esi unsigned int v4; // edi unsigned int v5; // ST10_4 int *result; // eax unsigned int v7; // ecx unsigned int v8; // ST10_4 unsigned int v9; // edx unsigned int v10; // edi unsigned int v11; // esi unsigned int v12; // ST10_4 unsigned int v13; // ecx unsigned int v14; // edi unsigned int v15; // edx unsigned int v16; // ST10_4 unsigned int v17; // esi unsigned int v18; // edi unsigned int v19; // ecx unsigned int v20; // ST10_4 unsigned int v21; // edx unsigned int v22; // edi unsigned int v23; // esi unsigned int v24; // ST10_4 unsigned int v25; // ecx unsigned int v26; // edi unsigned int v27; // edx unsigned int v28; // ST10_4 unsigned int v29; // esi unsigned int v30; // edi unsigned int v31; // ecx unsigned int v32; // ST10_4 int v33; // ebx unsigned int v34; // edx int v35; // [esp+1Ch] [ebp+8h] v2 = *a2; v3 = a2[2]; v4 = a2[3]; v5 = a2[1]; result = a1; *a1 = dword_AC3910[(v3 + *a2 + 1640531527) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v3 + *(_WORD *)a2 - 31161) >> 8] ^ dword_AC4110[((v3 + *a2 + 1640531527) >> 16) & 0xFF] ^ dword_AC4510[(v3 + *a2 + 1640531527) >> 24]; a1[1] = dword_AC3910[(v5 - v4 - 1640531527) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v5 - v4 + 31161) >> 8] ^ dword_AC4110[((v5 - v4 - 1640531527) >> 16) & 0xFF] ^ dword_AC4510[(v5 - v4 - 1640531527) >> 24]; v7 = (v2 >> 8) ^ (v5 << 24); v8 = (v5 >> 8) ^ (v2 << 24); a1[2] = dword_AC3910[(unsigned __int8)(v3 + v7 - 115)] ^ dword_AC3D10[((v3 + v7 - 1013904243) >> 8) & 0xFF] ^ dword_AC4110[((v3 + v7 - 1013904243) >> 16) & 0xFF] ^ dword_AC4510[(v3 + v7 - 1013904243) >> 24]; a1[3] = dword_AC3910[(v8 - v4 + 1013904243) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v8 - v4 - 3213) >> 8] ^ dword_AC4110[((v8 - v4 + 1013904243) >> 16) & 0xFF] ^ dword_AC4510[(v8 - v4 + 1013904243) >> 24]; v9 = (v3 << 8) ^ (v4 >> 24); v10 = (v4 << 8) ^ (v3 >> 24); a1[4] = dword_AC3910[(unsigned __int8)(v9 + v7 + 26)] ^ dword_AC3D10[((v9 + v7 - 2027808486) >> 8) & 0xFF] ^ dword_AC4110[((v9 + v7 - 2027808486) >> 16) & 0xFF] ^ dword_AC4510[(v9 + v7 - 2027808486) >> 24]; a1[5] = dword_AC3910[(v8 - v10 + 2027808486) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v8 - v10 - 6426) >> 8] ^ dword_AC4110[((v8 - v10 + 2027808486) >> 16) & 0xFF] ^ dword_AC4510[(v8 - v10 + 2027808486) >> 24]; v11 = (v7 >> 8) ^ (v8 << 24); v12 = (v8 >> 8) ^ (v7 << 24); a1[6] = dword_AC3910[(unsigned __int8)(v9 + v11 + 52)] ^ dword_AC3D10[((v9 + v11 + 239350324) >> 8) & 0xFF] ^ dword_AC4110[((v9 + v11 + 239350324) >> 16) & 0xFF] ^ dword_AC4510[(v9 + v11 + 239350324) >> 24]; a1[7] = dword_AC3910[(v12 - v10 - 239350324) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v12 - v10 - 12852) >> 8] ^ dword_AC4110[((v12 - v10 - 239350324) >> 16) & 0xFF] ^ dword_AC4510[(v12 - v10 - 239350324) >> 24]; v13 = (v9 << 8) ^ (v10 >> 24); v14 = (v10 << 8) ^ (v9 >> 24); a1[8] = dword_AC3910[(unsigned __int8)(v13 + v11 + 103)] ^ dword_AC3D10[((v13 + v11 + 478700647) >> 8) & 0xFF] ^ dword_AC4110[((v13 + v11 + 478700647) >> 16) & 0xFF] ^ dword_AC4510[(v13 + v11 + 478700647) >> 24]; a1[9] = dword_AC3910[(v12 - v14 - 478700647) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v12 - v14 - 25703) >> 8] ^ dword_AC4110[((v12 - v14 - 478700647) >> 16) & 0xFF] ^ dword_AC4510[(v12 - v14 - 478700647) >> 24]; v15 = (v11 >> 8) ^ (v12 << 24); v16 = (v12 >> 8) ^ (v11 << 24); a1[10] = dword_AC3910[(unsigned __int8)(v13 + v15 - 51)] ^ dword_AC3D10[((v13 + v15 + 957401293) >> 8) & 0xFF] ^ dword_AC4110[((v13 + v15 + 957401293) >> 16) & 0xFF] ^ dword_AC4510[(v13 + v15 + 957401293) >> 24]; a1[11] = dword_AC3910[(v16 - v14 - 957401293) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v16 - v14 + 14131) >> 8] ^ dword_AC4110[((v16 - v14 - 957401293) >> 16) & 0xFF] ^ dword_AC4510[(v16 - v14 - 957401293) >> 24]; v17 = (v13 << 8) ^ (v14 >> 24); v18 = (v14 << 8) ^ (v13 >> 24); a1[12] = dword_AC3910[(unsigned __int8)(v17 + v15 - 103)] ^ dword_AC3D10[((v17 + v15 + 1914802585) >> 8) & 0xFF] ^ dword_AC4110[((v17 + v15 + 1914802585) >> 16) & 0xFF] ^ dword_AC4510[(v17 + v15 + 1914802585) >> 24]; a1[13] = dword_AC3910[(v16 - v18 - 1914802585) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v16 - v18 + 28263) >> 8] ^ dword_AC4110[((v16 - v18 - 1914802585) >> 16) & 0xFF] ^ dword_AC4510[(v16 - v18 - 1914802585) >> 24]; v19 = (v15 >> 8) ^ (v16 << 24); v20 = (v16 >> 8) ^ (v15 << 24); a1[14] = dword_AC3910[(unsigned __int8)(v17 + v19 + 49)] ^ dword_AC3D10[(unsigned __int16)(v17 + v19 + 9009) >> 8] ^ dword_AC4110[((v17 + v19 - 465362127) >> 16) & 0xFF] ^ dword_AC4510[(v17 + v19 - 465362127) >> 24]; a1[15] = dword_AC3910[(v20 - v18 + 465362127) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v20 - v18 - 9009) >> 8] ^ dword_AC4110[((v20 - v18 + 465362127) >> 16) & 0xFF] ^ dword_AC4510[(v20 - v18 + 465362127) >> 24]; v21 = (v17 << 8) ^ (v18 >> 24); v22 = (v18 << 8) ^ (v17 >> 24); a1[16] = dword_AC3910[(unsigned __int8)(v21 + v19 + 98)] ^ dword_AC3D10[((v21 + v19 - 930724254) >> 8) & 0xFF] ^ dword_AC4110[((v21 + v19 - 930724254) >> 16) & 0xFF] ^ dword_AC4510[(v21 + v19 - 930724254) >> 24]; a1[17] = dword_AC3910[(v20 - v22 + 930724254) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v20 - v22 - 18018) >> 8] ^ dword_AC4110[((v20 - v22 + 930724254) >> 16) & 0xFF] ^ dword_AC4510[(v20 - v22 + 930724254) >> 24]; v23 = (v19 >> 8) ^ (v20 << 24); v24 = (v20 >> 8) ^ (v19 << 24); a1[18] = dword_AC3910[(unsigned __int8)(v21 + v23 - 60)] ^ dword_AC3D10[((v21 + v23 - 1861448508) >> 8) & 0xFF] ^ dword_AC4110[((v21 + v23 - 1861448508) >> 16) & 0xFF] ^ dword_AC4510[(v21 + v23 - 1861448508) >> 24]; a1[19] = dword_AC3910[(v24 - v22 + 1861448508) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v24 - v22 + 29500) >> 8] ^ dword_AC4110[((v24 - v22 + 1861448508) >> 16) & 0xFF] ^ dword_AC4510[(v24 - v22 + 1861448508) >> 24]; v25 = (v21 << 8) ^ (v22 >> 24); v26 = (v22 << 8) ^ (v21 >> 24); a1[20] = dword_AC3910[(unsigned __int8)(v25 + v23 - 120)] ^ dword_AC3D10[((v25 + v23 + 572070280) >> 8) & 0xFF] ^ dword_AC4110[((v25 + v23 + 572070280) >> 16) & 0xFF] ^ dword_AC4510[(v25 + v23 + 572070280) >> 24]; a1[21] = dword_AC3910[(v24 - v26 - 572070280) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v24 - v26 - 6536) >> 8] ^ dword_AC4110[((v24 - v26 - 572070280) >> 16) & 0xFF] ^ dword_AC4510[(v24 - v26 - 572070280) >> 24]; v27 = (v23 >> 8) ^ (v24 << 24); v28 = (v24 >> 8) ^ (v23 << 24); a1[22] = dword_AC3910[(unsigned __int8)(v25 + v27 + 15)] ^ dword_AC3D10[((v25 + v27 + 1144140559) >> 8) & 0xFF] ^ dword_AC4110[((v25 + v27 + 1144140559) >> 16) & 0xFF] ^ dword_AC4510[(v25 + v27 + 1144140559) >> 24]; a1[23] = dword_AC3910[(v28 - v26 - 1144140559) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v28 - v26 - 13071) >> 8] ^ dword_AC4110[((v28 - v26 - 1144140559) >> 16) & 0xFF] ^ dword_AC4510[(v28 - v26 - 1144140559) >> 24]; v29 = (v25 << 8) ^ (v26 >> 24); v30 = (v26 << 8) ^ (v25 >> 24); a1[24] = dword_AC3910[(unsigned __int8)(v29 + v27 + 29)] ^ dword_AC3D10[((v29 + v27 - 2006686179) >> 8) & 0xFF] ^ dword_AC4110[((v29 + v27 - 2006686179) >> 16) & 0xFF] ^ dword_AC4510[(v29 + v27 - 2006686179) >> 24]; a1[25] = dword_AC3910[(v28 - v30 + 2006686179) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v28 - v30 - 26141) >> 8] ^ dword_AC4110[((v28 - v30 + 2006686179) >> 16) & 0xFF] ^ dword_AC4510[(v28 - v30 + 2006686179) >> 24]; v31 = (v27 >> 8) ^ (v28 << 24); v32 = (v28 >> 8) ^ (v27 << 24); a1[26] = dword_AC3910[(unsigned __int8)(v29 + v31 + 58)] ^ dword_AC3D10[((v29 + v31 + 281594938) >> 8) & 0xFF] ^ dword_AC4110[((v29 + v31 + 281594938) >> 16) & 0xFF] ^ dword_AC4510[(v29 + v31 + 281594938) >> 24]; a1[27] = dword_AC3910[(v32 - v30 - 281594938) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v32 - v30 + 13254) >> 8] ^ dword_AC4110[((v32 - v30 - 281594938) >> 16) & 0xFF] ^ dword_AC4510[(v32 - v30 - 281594938) >> 24]; v33 = (v30 << 8) ^ (v29 >> 24); v35 = (v29 << 8) ^ (v30 >> 24); a1[28] = dword_AC3910[(v35 + v31 + 563189875) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v35 + v31 - 26509) >> 8] ^ dword_AC4110[((v35 + v31 + 563189875) >> 16) & 0xFF] ^ dword_AC4510[(v35 + v31 + 563189875) >> 24]; a1[29] = dword_AC3910[(v32 - v33 - 563189875) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v32 - v33 + 26509) >> 8] ^ dword_AC4110[((v32 - v33 - 563189875) >> 16) & 0xFF] ^ dword_AC4510[(v32 - v33 - 563189875) >> 24]; v34 = ((v32 >> 8) ^ (v31 << 24)) - v33 - 1126379749; a1[30] = dword_AC3910[(v35 + ((v31 >> 8) ^ (v32 << 24)) + 1126379749) & 0xFF] ^ dword_AC3D10[(unsigned __int16)(v35 + (v31 >> 8) + 12517) >> 8] ^ dword_AC4110[((v35 + ((v31 >> 8) ^ (v32 << 24)) + 1126379749) >> 16) & 0xFF] ^ dword_AC4510[(v35 + ((v31 >> 8) ^ (v32 << 24)) + 1126379749) >> 24]; a1[31] = dword_AC3910[(unsigned __int8)v34] ^ dword_AC3D10[(unsigned __int16)v34 >> 8] ^ dword_AC4110[(v34 >> 16) & 0xFF] ^ dword_AC4510[v34 >> 24]; return result; } //----- (00916B55) -------------------------------------------------------- int __thiscall sub_916B55(LPCRITICAL_SECTION lpCriticalSection) { signed int v1; // esi signed int v2; // eax v1 = 0; if ( !InitializeCriticalSectionAndSpinCount(lpCriticalSection, 0) ) { v2 = GetLastError(); if ( v2 > 0 ) v2 = (unsigned __int16)v2 | 0x80070000; v1 = v2; } return v1; } //----- (00916B80) -------------------------------------------------------- _DWORD *__thiscall sub_916B80(_DWORD *this) { _DWORD *v1; // esi v1 = this; memset(this + 5, 0, 0x18u); v1[11] = 0; v1[12] = 0; v1[13] = 0; return v1; } //----- (00916BBD) -------------------------------------------------------- int __thiscall sub_916BBD(int this, int a2) { _DWORD *v2; // esi struct _RTL_CRITICAL_SECTION *v3; // edi int v4; // ecx int v5; // esi v2 = (_DWORD *)this; v3 = (struct _RTL_CRITICAL_SECTION *)(this + 20); EnterCriticalSection((LPCRITICAL_SECTION)(this + 20)); v4 = v2[12]; if ( a2 <= v4 && a2 >= 0 ) { if ( a2 == v4 ) { v5 = v2[2]; LABEL_5: LeaveCriticalSection(v3); return v5; } if ( a2 < v4 ) { v5 = *(_DWORD *)(v2[11] + 4 * a2); goto LABEL_5; } RaiseException(0xC000008C, 1u, 0, 0); } LeaveCriticalSection(v3); return 0; } //----- (00916C5A) -------------------------------------------------------- BOOL __thiscall sub_916C5A(_BYTE *this) { bool v1; // zf void *v2; // ecx BOOL result; // eax v1 = this[8] == 0; *(_DWORD *)this = &off_A44008; if ( !v1 ) { v2 = (void *)*((_DWORD *)this + 1); if ( v2 ) result = HeapDestroy(v2); } return result; } // A44008: using guessed type int (__stdcall *off_A44008)(SIZE_T dwBytes); //----- (00916C75) -------------------------------------------------------- LPVOID __thiscall sub_916C75(HANDLE *this, SIZE_T dwBytes) { return HeapAlloc(this[1], 0, dwBytes); } //----- (00916C8C) -------------------------------------------------------- BOOL __thiscall sub_916C8C(HANDLE *this, LPVOID lpMem) { BOOL result; // eax if ( lpMem ) result = HeapFree(this[1], 0, lpMem); return result; } //----- (00916CA9) -------------------------------------------------------- LPVOID __thiscall sub_916CA9(HANDLE *this, LPVOID lpMem, SIZE_T dwBytes) { if ( !lpMem ) return (LPVOID)(*(int (__stdcall **)(SIZE_T))*this)(dwBytes); if ( dwBytes ) return HeapReAlloc(this[1], 0, lpMem, dwBytes); (*((void (__stdcall **)(LPVOID))*this + 1))(lpMem); return 0; } //----- (00916CE3) -------------------------------------------------------- SIZE_T __thiscall sub_916CE3(HANDLE *this, LPCVOID lpMem) { return HeapSize(this[1], 0, lpMem); } //----- (00916CFA) -------------------------------------------------------- void *__thiscall sub_916CFA(void *this, char a2) { void *v2; // esi v2 = this; sub_916C5A(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00916D1B) -------------------------------------------------------- signed int __cdecl sub_916D1B(unsigned int *a1, unsigned int a2, unsigned int a3) { unsigned int v3; // eax v3 = a3 * a2; if ( !is_mul_ok(a3, a2) || v3 > 0xFFFFFFFF ) return -2147024362; *a1 = v3; return 0; } //----- (00916D3F) -------------------------------------------------------- int __thiscall sub_916D3F(_DWORD **this) { return (*(int (**)(void))(*this[1] + 4))(); } //----- (00916D80) -------------------------------------------------------- signed int __cdecl sub_916D80(_DWORD *a1, int a2, unsigned int a3) { if ( -1 - a2 < a3 ) return -2147024362; *a1 = a3 + a2; return 0; } //----- (00916DA6) -------------------------------------------------------- int (__stdcall *****__thiscall sub_916DA6(int (__stdcall ****this)(unsigned int), unsigned int a2, unsigned int a3))(unsigned int) { unsigned int v3; // esi int (__stdcall ****v4)(unsigned int); // edi int (__stdcall *****result)(unsigned int); // eax v3 = (a2 + 8) & 0xFFFFFFF8; v4 = this; if ( sub_916D1B(&a2, v3, a3) < 0 ) return 0; if ( sub_916D80(&a2, 16, a2) < 0 ) return 0; result = (int (__stdcall *****)(unsigned int))(**v4[1])(a2); if ( !result ) return 0; result[1] = 0; *result = v4; result[3] = (int (__stdcall ****)(unsigned int))1; result[2] = (int (__stdcall ****)(unsigned int))(v3 - 1); return result; } //----- (00916E0A) -------------------------------------------------------- int __thiscall sub_916E0A(_DWORD **this, int a2, unsigned int a3, unsigned int a4) { unsigned int v4; // esi _DWORD **v5; // edi int result; // eax v4 = (a3 + 8) & 0xFFFFFFF8; v5 = this; if ( sub_916D1B(&a3, v4, a4) < 0 ) return 0; if ( sub_916D80(&a3, 16, a3) < 0 ) return 0; result = (*(int (__stdcall **)(int, unsigned int))(*v5[1] + 8))(a2, a3); if ( !result ) return 0; *(_DWORD *)(result + 8) = v4 - 1; return result; } //----- (00916E70) -------------------------------------------------------- int sub_916E70() { return dword_BA6CA0; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00916E80) -------------------------------------------------------- int sub_916E80() { int result; // eax if ( dword_BA6CA0 ) result = (**(int (__stdcall ***)(signed int))dword_BA6CA0)(1); dword_BA6CA0 = 0; return result; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00916EA0) -------------------------------------------------------- char __cdecl sub_916EA0(int a1) { char result; // al int v2; // eax if ( !dword_BA6CA0 || !a1 ) goto LABEL_10; if ( (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 64))(a1) ) return 1; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 32))(a1); if ( v2 ) result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 28))(v2, a1); else LABEL_10: result = 0; return result; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00916EF0) -------------------------------------------------------- char __cdecl sub_916EF0(int a1) { char result; // al int v2; // eax if ( !dword_BA6CA0 || !a1 ) goto LABEL_10; if ( (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 56))(a1) ) return 1; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 32))(a1); if ( v2 ) result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v2 + 32))(v2, a1); else LABEL_10: result = 0; return result; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00916F40) -------------------------------------------------------- char __thiscall sub_916F40(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx _DWORD *v4; // edi _DWORD *v6; // ebx _DWORD *v7; // edi v2 = this; v3 = (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2); v4 = *(_DWORD **)(v2[2] + 4 * v3); if ( !v4 ) return 0; if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 8))(v2, a2, v4[1]) ) { *(_DWORD *)(v2[2] + 4 * v3) = *v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 16))(v2, v4); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 24))(v2, v4); --v2[3]; return 1; } v6 = v4; v7 = (_DWORD *)*v4; if ( !v7 ) return 0; while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v2 + 8))(v2, a2, v7[1]) ) { v6 = v7; v7 = (_DWORD *)*v7; if ( !v7 ) return 0; } *v6 = *v7; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 16))(v2, v7); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v2 + 24))(v2, v7); --v2[3]; return 1; } //----- (00916FF0) -------------------------------------------------------- int __cdecl sub_916FF0(int a1) { int v1; // esi int result; // eax dword_BA6CAC = a1; if ( a1 ) { v1 = *(_DWORD *)(a1 + 132); if ( dword_BA6CA8 ) (*(void (__stdcall **)(int))(*(_DWORD *)dword_BA6CA8 + 8))(dword_BA6CA8); dword_BA6CA8 = v1; if ( v1 ) (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 4))(v1); result = *(_DWORD *)(dword_BA6CAC + 1716); dword_BA6CB0 = *(_DWORD *)(dword_BA6CAC + 1716); } else { result = dword_BA6CA8; dword_BA6CB0 = 0; if ( dword_BA6CA8 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA6CA8 + 8))(dword_BA6CA8); dword_BA6CA8 = 0; } return result; } // BA6CA8: using guessed type int dword_BA6CA8; // BA6CAC: using guessed type int dword_BA6CAC; // BA6CB0: using guessed type int dword_BA6CB0; //----- (00917070) -------------------------------------------------------- int __thiscall sub_917070(_DWORD *this, _DWORD *a2) { _DWORD *v2; // eax v2 = (_DWORD *)this[3]; *a2 = v2; if ( !v2 ) return 0; *a2 = *v2; return v2[2]; } //----- (00917090) -------------------------------------------------------- int __stdcall sub_917090(_DWORD **a1) { _DWORD *v1; // eax v1 = *a1; if ( !*a1 ) return 0; *a1 = (_DWORD *)*v1; return v1[2]; } //----- (009170B0) -------------------------------------------------------- int __fastcall sub_9170B0(int a1, int a2, int a3) { _DWORD *v3; // ecx char v5; // al int v6; // [esp+0h] [ebp-4h] v6 = a1; v3 = *(_DWORD **)(a1 + 24); if ( !v3 ) return 0; v6 = 0; v5 = sub_8C4C90(v3, a3, &v6); return v5 != 0 ? v6 : 0; } //----- (009170F0) -------------------------------------------------------- int __fastcall sub_9170F0(int a1, int a2, int a3) { _DWORD *v3; // ecx char v5; // al int v6; // [esp+0h] [ebp-4h] v6 = a1; v3 = *(_DWORD **)(a1 + 28); if ( !v3 ) return 0; v6 = 0; v5 = sub_8C4C90(v3, a3, &v6); return v5 != 0 ? v6 : 0; } //----- (00917130) -------------------------------------------------------- void __thiscall sub_917130(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( a2 ) { if ( this[6] ) { v3 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); sub_815C70((_DWORD *)v2[6], v3, a2); } } } //----- (00917160) -------------------------------------------------------- void __thiscall sub_917160(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; if ( a2 ) { if ( this[7] ) { v3 = (*(int (**)(void))(*(_DWORD *)a2 + 4))(); sub_815C70((_DWORD *)v2[7], v3, a2); } } } //----- (00917190) -------------------------------------------------------- char __cdecl sub_917190(char *Src, char *Dst, rsize_t SizeInBytes) { int v4; // eax const char *v5; // esi _DWORD *v6; // edi char Drive; // [esp+8h] [ebp-314h] char ArgList[4]; // [esp+Ch] [ebp-310h] char Dir; // [esp+10h] [ebp-30Ch] char Filename; // [esp+114h] [ebp-208h] char Ext; // [esp+218h] [ebp-104h] *(_DWORD *)ArgList = Src; if ( (unsigned __int8)sub_8AA2B0() ) { strcpy_s(Dst, SizeInBytes, Src); return 1; } if ( !dword_BA6CA0 ) { sub_863460(1, 0, "No valid shader program factory\n"); return 0; } sub_92BEC0(Src, &Drive, &Dir, &Filename, &Ext); v4 = *(_DWORD *)(dword_BA6CA0 + 12); if ( !v4 ) return 0; v5 = *(const char **)(v4 + 8); v6 = *(_DWORD **)v4; if ( !v5 ) return 0; while ( !*v5 ) { sub_863460(1, 0, "Invalid or no shader program directory\n"); LABEL_13: if ( v6 ) { v5 = (const char *)v6[2]; v6 = (_DWORD *)*v6; if ( v5 ) continue; } return 0; } if ( v5[strlen(v5) - 1] == 47 || v5[strlen(v5) - 1] == 92 ) sub_7FF6E0(Dst, SizeInBytes, "%s%s%s", v5, &Filename, &Ext); else sub_7FF6E0(Dst, SizeInBytes, "%s\\%s%s", v5, &Filename, &Ext); if ( !(unsigned __int8)sub_8AA2B0() ) { sub_863460(1, 1, "Shader program file not found %s in directory %s\n", *(_DWORD *)ArgList, v5); goto LABEL_13; } return 1; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00917340) -------------------------------------------------------- void __cdecl sub_917340(int a1) { _DWORD *v1; // ecx unsigned int v2; // edx unsigned int v3; // eax _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // esi int v7; // eax int v8; // ebx _DWORD *v9; // edi int v10; // eax unsigned int v11; // edx unsigned int v12; // eax _DWORD *v13; // ecx int v14; // [esp+0h] [ebp-4h] v1 = (_DWORD *)dword_BA6CA4; if ( dword_BA6CA4 ) { v2 = *(_DWORD *)(dword_BA6CA4 + 4); v3 = 0; if ( v2 ) { v4 = *(_DWORD **)(dword_BA6CA4 + 8); while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_6; } v5 = *(_DWORD **)(*(_DWORD *)(dword_BA6CA4 + 8) + 4 * v3); } else { LABEL_6: v5 = 0; } v6 = v5; while ( v6 ) { v7 = v6[2]; v8 = v6[1]; v6 = (_DWORD *)*v6; v9 = v1; v14 = v7; if ( !v6 ) { v10 = (*(int (__stdcall **)(int))(*v1 + 4))(v8); v11 = v9[1]; v12 = v10 + 1; if ( v12 >= v11 ) { LABEL_13: v6 = 0; } else { v13 = (_DWORD *)(v9[2] + 4 * v12); while ( 1 ) { v6 = (_DWORD *)*v13; if ( *v13 ) break; ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_13; } } v1 = (_DWORD *)dword_BA6CA4; } if ( a1 == v14 ) { sub_916F40(v1, v8); v1 = (_DWORD *)dword_BA6CA4; } } } } // BA6CA4: using guessed type int dword_BA6CA4; //----- (009173E0) -------------------------------------------------------- int __cdecl sub_9173E0(char *FullPath) { char *v1; // ebx unsigned int v2; // edi int v3; // ebx char v4; // al char v5; // al int v7; // [esp+4h] [ebp-108h] char Dst; // [esp+8h] [ebp-104h] char v9; // [esp+9h] [ebp-103h] if ( !dword_BA6CA4 || !FullPath || !*FullPath ) return 0; sub_92C080(FullPath, &Dst, 0x100u); v1 = &v9; if ( !v9 ) v1 = FullPath; v2 = 0; v3 = v1 - &Dst; do { v4 = tolower(*(&Dst + v2 + v3)); *(&Dst + v2) = v4; if ( !v4 ) break; ++v2; } while ( v2 < 0x100 ); v7 = 0; v5 = sub_8C4C90((_DWORD *)dword_BA6CA4, (int)&Dst, &v7); return v5 != 0 ? v7 : 0; } // BA6CA4: using guessed type int dword_BA6CA4; //----- (009174D0) -------------------------------------------------------- int sub_9174D0() { int result; // eax result = sub_940360((_DWORD *)dword_BA6CA4); if ( dword_BA6CA4 ) result = (**(int (__stdcall ***)(signed int))dword_BA6CA4)(1); dword_BA6CA4 = 0; return result; } // BA6CA4: using guessed type int dword_BA6CA4; //----- (00917500) -------------------------------------------------------- void __thiscall sub_917500(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DVertexShader *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A44038: using guessed type void *NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; // A44118: using guessed type void *NiTPointerMap::`vftable'; // A44138: using guessed type void *NiTStringTemplateMap,NiD3DVertexShader *>::`vftable'; //----- (00917570) -------------------------------------------------------- void __thiscall sub_917570(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DPixelShader *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A44058: using guessed type void *NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; // A44158: using guessed type void *NiTPointerMap::`vftable'; // A44178: using guessed type void *NiTStringTemplateMap,NiD3DPixelShader *>::`vftable'; //----- (009175E0) -------------------------------------------------------- void __thiscall sub_9175E0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DShaderProgramCreator *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A44078: using guessed type void *NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; // A44198: using guessed type void *NiTPointerMap::`vftable'; // A441B8: using guessed type void *NiTStringTemplateMap,NiD3DShaderProgramCreator *>::`vftable'; //----- (00917650) -------------------------------------------------------- void **__thiscall sub_917650(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44038: using guessed type void *NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; //----- (00917690) -------------------------------------------------------- void **__thiscall sub_917690(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44038: using guessed type void *NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; // A44118: using guessed type void *NiTPointerMap::`vftable'; //----- (009176D0) -------------------------------------------------------- void *__thiscall sub_9176D0(void *this, char a2) { void *v2; // esi v2 = this; sub_917500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00917700) -------------------------------------------------------- void **__thiscall sub_917700(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44058: using guessed type void *NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; //----- (00917740) -------------------------------------------------------- void **__thiscall sub_917740(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44058: using guessed type void *NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; // A44158: using guessed type void *NiTPointerMap::`vftable'; //----- (00917780) -------------------------------------------------------- void **__thiscall sub_917780(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44078: using guessed type void *NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; //----- (009177C0) -------------------------------------------------------- void **__thiscall sub_9177C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44078: using guessed type void *NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; // A44198: using guessed type void *NiTPointerMap::`vftable'; //----- (00917800) -------------------------------------------------------- int __usercall sub_917800@(int a1@, char *FullPath, int a3, int a4, int a5, int a6, int a7, int a8) { int result; // eax int v9; // esi if ( !dword_BA6CA0 ) return 0; if ( !FullPath || !*FullPath ) return 0; result = sub_9170B0(dword_BA6CA0, a1, a3); if ( !result ) { result = sub_9173E0(FullPath); if ( result ) { v9 = (*(int (__thiscall **)(int, char *, int, int, int, int, int, int))(*(_DWORD *)result + 12))( result, FullPath, a3, a4, a5, a6, a7, a8); sub_917130((_DWORD *)dword_BA6CA0, v9); result = v9; } } return result; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00917880) -------------------------------------------------------- int __usercall sub_917880@(int a1@, char *FullPath, int a3, int a4, int a5) { int result; // eax int v6; // esi if ( !dword_BA6CA0 ) return 0; if ( !FullPath || !*FullPath ) return 0; result = sub_9170F0(dword_BA6CA0, a1, a3); if ( !result ) { result = sub_9173E0(FullPath); if ( result ) { v6 = (*(int (__thiscall **)(int, char *, int, int, int))(*(_DWORD *)result + 20))(result, FullPath, a3, a4, a5); sub_917160((_DWORD *)dword_BA6CA0, v6); result = v6; } } return result; } // BA6CA0: using guessed type int dword_BA6CA0; //----- (009178F0) -------------------------------------------------------- void __cdecl sub_9178F0(int a1) { int v1; // eax _DWORD *v2; // ecx if ( dword_BA6CA0 ) { if ( a1 ) { v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( v1 ) { v2 = *(_DWORD **)(dword_BA6CA0 + 24); if ( v2 ) sub_916F40(v2, v1); } } } } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00917930) -------------------------------------------------------- void __cdecl sub_917930(int a1) { int v1; // eax _DWORD *v2; // ecx if ( dword_BA6CA0 ) { if ( a1 ) { v1 = (*(int (**)(void))(*(_DWORD *)a1 + 4))(); if ( v1 ) { v2 = *(_DWORD **)(dword_BA6CA0 + 28); if ( v2 ) sub_916F40(v2, v1); } } } } // BA6CA0: using guessed type int dword_BA6CA0; //----- (00917970) -------------------------------------------------------- void __thiscall sub_917970(_DWORD *this, char *Src) { _DWORD *v2; // ebx unsigned int v3; // edx _DWORD *v4; // esi const char *v5; // eax unsigned int v6; // kr04_4 char *v7; // edi _DWORD *v8; // eax int v9; // ecx char Dst[260]; // [esp+Ch] [ebp-108h] char v11[260]; // [esp+Dh] [ebp-107h] v2 = this; if ( Src && strcmp(Src, &byte_9A8050) ) { strcpy_s(Dst, 0x104u, Src); v3 = 0; if ( &Dst[strlen(Dst) + 1] != v11 ) { do { if ( Dst[v3] == 47 ) Dst[v3] = 92; ++v3; } while ( v3 < strlen(Dst) ); } v4 = (_DWORD *)v2[3]; if ( v4 ) { while ( 1 ) { v5 = (const char *)v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) { if ( !_stricmp(v5, Dst) ) break; } if ( !v4 ) goto LABEL_11; } } else { LABEL_11: v6 = strlen(Dst); v7 = (char *)operator new(v6 + 1); strcpy_s(v7, v6 + 1, Dst); v8 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[2] + 4))(v2 + 2); v8[2] = v7; v8[1] = 0; *v8 = v2[3]; v9 = v2[3]; if ( v9 ) *(_DWORD *)(v9 + 4) = v8; else v2[4] = v8; ++v2[5]; v2[3] = v8; } } } // 917970: using guessed type char Dst[260]; //----- (00917AD0) -------------------------------------------------------- void __thiscall sub_917AD0(_DWORD *this, char *Src) { _DWORD *v2; // ebx unsigned int v3; // edx _DWORD *v4; // esi const char *v5; // edi _DWORD *v6; // eax const char **v7; // edx int v8; // esi int v9; // [esp+8h] [ebp-10Ch] char Dst[260]; // [esp+Ch] [ebp-108h] char v11[260]; // [esp+Dh] [ebp-107h] v2 = this; if ( Src && strcmp(Src, &byte_9A8050) ) { strcpy_s(Dst, 0x104u, Src); v3 = 0; if ( &Dst[strlen(Dst) + 1] != v11 ) { do { if ( Dst[v3] == 47 ) Dst[v3] = 92; ++v3; } while ( v3 < strlen(Dst) ); } v4 = (_DWORD *)v2[3]; if ( v4 ) { while ( 1 ) { v5 = (const char *)v4[2]; v4 = (_DWORD *)*v4; if ( v5 ) { if ( !_stricmp(v5, Dst) ) break; } if ( !v4 ) return; } v6 = (_DWORD *)v2[3]; if ( v6 ) { while ( 1 ) { v7 = (const char **)(v6 + 2); v8 = (int)v6; v6 = (_DWORD *)*v6; if ( v5 == *v7 ) break; if ( !v6 ) goto LABEL_15; } } else { LABEL_15: v8 = 0; } v9 = v8; if ( v8 ) sub_403620(v2 + 2, (_DWORD **)&v9); } } } // 917AD0: using guessed type char Dst[260]; //----- (00917C10) -------------------------------------------------------- void __fastcall sub_917C10(int a1) { _DWORD *v1; // ebx void *v2; // edi _DWORD *v3; // eax _DWORD *v4; // ecx void **v5; // edx int v6; // esi int v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] v1 = *(_DWORD **)(a1 + 12); v7 = a1; while ( v1 ) { v2 = (void *)v1[2]; v1 = (_DWORD *)*v1; if ( v2 ) { v3 = *(_DWORD **)(a1 + 12); v4 = (_DWORD *)(a1 + 8); if ( v3 ) { while ( 1 ) { v5 = (void **)(v3 + 2); v6 = (int)v3; v3 = (_DWORD *)*v3; if ( v2 == *v5 ) break; if ( !v3 ) goto LABEL_6; } } else { LABEL_6: v6 = 0; } v8 = v6; if ( v6 ) sub_403620(v4, (_DWORD **)&v8); operator delete(v2); a1 = v7; } } } //----- (00917C80) -------------------------------------------------------- void *__thiscall sub_917C80(void *this, char a2) { void *v2; // esi v2 = this; sub_917570(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00917CB0) -------------------------------------------------------- void *__thiscall sub_917CB0(void *this, char a2) { void *v2; // esi v2 = this; sub_9175E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00917CE0) -------------------------------------------------------- _DWORD *__thiscall sub_917CE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // edi void *v4; // eax size_t v5; // ST08_4 _DWORD *v6; // eax _DWORD *v7; // edi void *v8; // eax size_t v9; // ST08_4 v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiD3DShaderProgramFactory::`vftable'; v1[5] = 0; v1[3] = 0; v1[4] = 0; v1[2] = &NiTPointerList::`vftable'; v2 = operator new(0x14u); v3 = v2; if ( v2 ) { v2[1] = 59; *v2 = &NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; v2[3] = 0; v4 = operator new(0xECu); v5 = 4 * v3[1]; v3[2] = v4; memset(v4, 0, v5); *((_BYTE *)v3 + 16) = 0; *v3 = &NiTStringPointerMap::`vftable'; } else { v3 = 0; } v1[6] = v3; v6 = operator new(0x14u); v7 = v6; if ( v6 ) { v6[1] = 59; *v6 = &NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; v6[3] = 0; v8 = operator new(0xECu); v9 = 4 * v7[1]; v7[2] = v8; memset(v8, 0, v9); *((_BYTE *)v7 + 16) = 0; *v7 = &NiTStringPointerMap::`vftable'; v1[7] = v7; } else { v1[7] = 0; } return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A2BBC0: using guessed type void *NiTPointerList::`vftable'; // A44038: using guessed type void *NiTMapBase,char const *,NiD3DVertexShader *>::`vftable'; // A44058: using guessed type void *NiTMapBase,char const *,NiD3DPixelShader *>::`vftable'; // A441D8: using guessed type void *NiTStringPointerMap::`vftable'; // A441F8: using guessed type void *NiTStringPointerMap::`vftable'; // A44238: using guessed type void *NiD3DShaderProgramFactory::`vftable'; //----- (00917DE0) -------------------------------------------------------- LONG __thiscall sub_917DE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx void (__stdcall ***v3)(signed int); // ecx _DWORD *v4; // ecx void (__stdcall ***v5)(signed int); // ecx v1 = this; v2 = (_DWORD *)this[6]; *v1 = &NiD3DShaderProgramFactory::`vftable'; if ( v2 ) sub_940360(v2); v3 = (void (__stdcall ***)(signed int))v1[6]; if ( v3 ) (**v3)(1); v4 = (_DWORD *)v1[7]; if ( v4 ) sub_940360(v4); v5 = (void (__stdcall ***)(signed int))v1[7]; if ( v5 ) (**v5)(1); sub_917C10((int)v1); sub_8B9260(v1 + 2); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A44238: using guessed type void *NiD3DShaderProgramFactory::`vftable'; //----- (00917E50) -------------------------------------------------------- _DWORD *sub_917E50() { _DWORD *result; // eax int v1; // esi void *v2; // eax size_t v3; // ST08_4 result = operator new(0x14u); v1 = (int)result; if ( result ) { result[1] = 37; *result = &NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; result[3] = 0; v2 = operator new(0x94u); v3 = 4 * *(_DWORD *)(v1 + 4); *(_DWORD *)(v1 + 8) = v2; result = memset(v2, 0, v3); *(_BYTE *)(v1 + 16) = 1; *(_DWORD *)v1 = &NiTStringPointerMap::`vftable'; dword_BA6CA4 = v1; } else { dword_BA6CA4 = 0; } return result; } // A44078: using guessed type void *NiTMapBase,char const *,NiD3DShaderProgramCreator *>::`vftable'; // A44218: using guessed type void *NiTStringPointerMap::`vftable'; // BA6CA4: using guessed type int dword_BA6CA4; //----- (00917EC0) -------------------------------------------------------- _DWORD *sub_917EC0() { _DWORD *result; // eax if ( !dword_BA6CA4 ) result = sub_917E50(); return result; } // BA6CA4: using guessed type int dword_BA6CA4; //----- (00917ED0) -------------------------------------------------------- void *__thiscall sub_917ED0(void *this, char a2) { void *v2; // esi v2 = this; sub_917DE0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00917F00) -------------------------------------------------------- char __cdecl sub_917F00(char *a1, int a2) { char *v2; // esi unsigned int v3; // edi char v4; // al bool v5; // zf char v7; // [esp+8h] [ebp-104h] v2 = a1; if ( !a1 || strchr(a1, 46) ) return 0; v3 = 0; do { v4 = tolower(*v2); v5 = *v2 == 0; v2[&v7 - a1] = v4; if ( v5 ) break; ++v3; ++v2; } while ( v3 < 0x100 ); if ( !dword_BA6CA4 ) sub_917E50(); sub_815C70((_DWORD *)dword_BA6CA4, (int)&v7, a2); return 1; } // BA6CA4: using guessed type int dword_BA6CA4; //----- (00917FB0) -------------------------------------------------------- char __thiscall sub_917FB0(int this, int a2) { int v2; // esi char result; // al v2 = this; if ( *(_BYTE *)(this + 28) != 1 || a2 != *(_DWORD *)(this + 20) ) { result = sub_91DAF0((_DWORD *)this, a2); if ( !result ) return result; sub_936960(v2); } return 1; } //----- (00917FF0) -------------------------------------------------------- int __thiscall sub_917FF0(int this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // esi v8 = (_DWORD *)this; (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(this + 24) + 100))(137, *(_DWORD *)(this + 248), 0); return sub_91DB20(v8, a2, a3, a4, a5, a6, a7, a8); } //----- (00918040) -------------------------------------------------------- void *__thiscall sub_918040(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A44240: using guessed type void *NiTArray::`vftable'; //----- (00918070) -------------------------------------------------------- bool __thiscall sub_918070(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax _DWORD *v5; // eax _DWORD *v7; // ecx int v8; // [esp+4h] [ebp-Ch] int v9; // [esp+8h] [ebp-8h] char v10; // [esp+Fh] [ebp-1h] v3 = this; if ( !this[14] ) return 1; v4 = this[15]; if ( !v4 ) return 1; v5 = *(_DWORD **)(v4 + 56); if ( v5 ) sub_91C120(v5, 19, &v9, &v10); if ( v9 != a2 ) return 0; v7 = *(_DWORD **)(v3[15] + 56); if ( v7 ) sub_91C120(v7, 20, &v8, &v10); return v8 == a3; } //----- (009180F0) -------------------------------------------------------- unsigned int __thiscall sub_9180F0(_DWORD *this) { unsigned int v1; // eax unsigned int i; // eax unsigned int j; // eax unsigned int k; // eax unsigned int l; // eax unsigned int result; // eax v1 = 0; if ( this[25] ) { do *(_DWORD *)(this[23] + 4 * v1++) = 0; while ( v1 < this[25] ); } this[25] = 0; this[26] = 0; for ( i = 0; i < this[31]; ++i ) *(_DWORD *)(this[29] + 4 * i) = 0; this[31] = 0; this[32] = 0; for ( j = 0; j < this[37]; ++j ) *(_DWORD *)(this[35] + 4 * j) = 0; this[37] = 0; this[38] = 0; for ( k = 0; k < this[43]; ++k ) *(_DWORD *)(this[41] + 4 * k) = 0; this[43] = 0; this[44] = 0; for ( l = 0; l < this[49]; ++l ) *(_DWORD *)(this[47] + 4 * l) = 0; this[49] = 0; this[50] = 0; for ( result = 0; result < this[55]; ++result ) *(_DWORD *)(this[53] + 4 * result) = 0; this[55] = 0; this[56] = 0; this[68] = 0; return result; } //----- (00918200) -------------------------------------------------------- float *__stdcall sub_918200(float *a1, int a2) { _DWORD *v2; // ecx float *result; // eax v2 = *(_DWORD **)(a2 + 12); *(_BYTE *)(a2 + 90) = 1; sub_91A460(v2, 0x18u, 2, 0); result = a1; *(float *)(a2 + 24) = *a1; *(float *)(a2 + 40) = a1[1]; *(float *)(a2 + 56) = a1[2]; *(float *)(a2 + 72) = 0.0; *(float *)(a2 + 28) = a1[3]; *(float *)(a2 + 44) = a1[4]; *(float *)(a2 + 60) = a1[5]; *(float *)(a2 + 76) = 0.0; *(float *)(a2 + 80) = 0.0; *(float *)(a2 + 64) = 0.0; *(float *)(a2 + 48) = 0.0; *(float *)(a2 + 32) = 0.0; *(float *)(a2 + 84) = 0.0; *(float *)(a2 + 68) = 0.0; *(float *)(a2 + 52) = 0.0; *(float *)(a2 + 36) = 0.0; return result; } //----- (00918270) -------------------------------------------------------- LONG __thiscall sub_918270(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST14_4 void *v3; // ST10_4 void *v4; // ST0C_4 void *v5; // ST08_4 void *v6; // ST04_4 void *v7; // ST00_4 v1 = this; *this = &NiD3DDefaultShader::`vftable'; sub_9180F0(this); operator delete((void *)v1[63]); v2 = (void *)v1[53]; v1[52] = &NiTArray::`vftable'; operator delete(v2); v3 = (void *)v1[47]; v1[46] = &NiTArray::`vftable'; operator delete(v3); v4 = (void *)v1[41]; v1[40] = &NiTArray::`vftable'; operator delete(v4); v5 = (void *)v1[35]; v1[34] = &NiTArray::`vftable'; operator delete(v5); v6 = (void *)v1[29]; v1[28] = &NiTArray::`vftable'; operator delete(v6); v7 = (void *)v1[23]; v1[22] = &NiTArray::`vftable'; operator delete(v7); return sub_91EDA0(v1); } // A44240: using guessed type void *NiTArray::`vftable'; // A4424C: using guessed type void *NiD3DDefaultShader::`vftable'; //----- (00918300) -------------------------------------------------------- void *sub_918300() { return &unk_BA6CB4; } //----- (00918310) -------------------------------------------------------- signed int __thiscall sub_918310(_DWORD **this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8) { int v8; // esi signed int v9; // edi v8 = (int)this; (*(void (__stdcall **)(int))(*this[6] + 4))(a5); sub_937310(*(_DWORD *)(*(_DWORD *)(v8 + 20) + 1732), a5, a6, *(_DWORD *)(a5 + 40), *(_DWORD *)(a5 + 44)); v9 = sub_91E5C0(v8, a2, a3, a4, a5, a6, a7, a8); *(_DWORD *)(v8 + 248) = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v8 + 24) + 104))(137); return v9; } //----- (00918380) -------------------------------------------------------- _DWORD **__thiscall sub_918380(_DWORD *this, int *a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // ecx _DWORD **v5; // esi _DWORD *v6; // ecx int v7; // ebx _DWORD *v8; // ecx _DWORD *v9; // ecx int v10; // eax _DWORD *v11; // eax void *v13; // [esp+8h] [ebp-4h] v3 = this; v4 = (_DWORD *)this[15]; if ( !v4 || !sub_91C980(v4, 1, a2 != 0) ) return 0; sub_91BE40(&v13); v5 = (_DWORD **)v13; sub_91A460(*((_DWORD **)v13 + 3), 0x1Cu, 1, 0); if ( a2 && a2[1] ) { sub_42AAF0(v5, a2[1]); sub_91A460(v5[3], 0xBu, a3, 0); sub_91A460(v5[3], 1u, 2, 0); sub_91A460(v5[3], 2u, 2, 0); sub_91A460(v5[3], 3u, 1, 0); sub_91A460(v5[3], 4u, 3, 0); sub_91A460(v5[3], 5u, 2, 0); v6 = v5[3]; if ( *((_BYTE *)v3 + 233) ) { sub_91A460(v6, 6u, 0, 0); *((_BYTE *)v3 + 233) = 0; } else { sub_91A460(v6, 6u, 1, 0); } sub_91AF30(v5, a2[3]); sub_91AED0(v5, a2[2]); v7 = a2[5]; if ( v7 ) { if ( *(_BYTE *)(v7 + 28) ) sub_878E10((float *)v7); sub_918200((float *)(v7 + 32), (int)v5); --v3[61]; } else { v8 = v5[3]; *((_BYTE *)v5 + 90) = 0; sub_91A460(v8, 0x18u, 0, 0); --v3[61]; } } else { sub_91A460(v5[3], 1u, 2, 0); sub_91A460(v5[3], 2u, 0, 0); sub_91A460(v5[3], 3u, 1, 0); v9 = v5[3]; if ( *((_BYTE *)v3 + 233) ) { sub_91A460(v9, 4u, 2, 0); *((_BYTE *)v3 + 233) = 0; } else { sub_91A460(v9, 4u, 3, 0); } sub_91A460(v5[3], 5u, 0, 0); sub_91A460(v5[3], 6u, 1, 0); v10 = v3[61]; if ( v10 ) v3[61] = v10 - 1; } --v3[60]; sub_91D830((_DWORD *)v3[15], *(_DWORD *)(v3[15] + 20), v5); v11 = v13; if ( v13 ) { --*((_DWORD *)v13 + 23); if ( !v11[23] ) sub_91BD60(v11); } return v5; } //----- (00918590) -------------------------------------------------------- _DWORD **__thiscall sub_918590(_DWORD *this, int a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // ecx _DWORD **v5; // esi int v6; // ebx _DWORD *v7; // ecx int v8; // ecx _DWORD *v9; // eax void *v11; // [esp+4h] [ebp-4h] int v12; // [esp+10h] [ebp+8h] int v13; // [esp+10h] [ebp+8h] v3 = this; v4 = (_DWORD *)this[15]; if ( !v4 || !sub_91C980(v4, 1, 1) ) return 0; sub_91BE40(&v11); v5 = (_DWORD **)v11; v6 = a2; *(_DWORD *)v11 = *(_DWORD *)(v3[15] + 20); v12 = *(_DWORD *)(a2 + 4); sub_42AAF0(v5, v12); sub_91A460(v5[3], 0xBu, a3, 0); sub_91A460(v5[3], 1u, v3[66], 0); sub_91A460(v5[3], 2u, 2, 0); sub_91A460(v5[3], 3u, 1, 0); sub_91A460(v5[3], 4u, 3, 0); sub_91A460(v5[3], 5u, 2, 0); v7 = v5[3]; if ( *((_BYTE *)v3 + 233) ) { sub_91A460(v7, 6u, 0, 0); *((_BYTE *)v3 + 233) = 0; } else { sub_91A460(v7, 6u, 1, 0); } if ( v12 ) { sub_91AF30(v5, *(_DWORD *)(v6 + 12)); sub_91AED0(v5, *(_DWORD *)(v6 + 8)); v8 = *(_DWORD *)(v6 + 20); v13 = v8; if ( v8 ) { if ( *(_BYTE *)(v8 + 28) ) { sub_878E10((float *)v8); v8 = v13; } sub_918200((float *)(v8 + 32), (int)v5); } else { *((_BYTE *)v5 + 90) = 0; sub_91A460(v5[3], 0x18u, 0, 0); } sub_91A460(v5[3], 7u, COERCE_INT(*(float *)(v6 + 32)), 0); sub_91A460(v5[3], 8u, COERCE_INT(*(float *)(v6 + 36)), 0); sub_91A460(v5[3], 9u, COERCE_INT(*(float *)(v6 + 40)), 0); sub_91A460(v5[3], 0xAu, COERCE_INT(*(float *)(v6 + 44)), 0); sub_91A460(v5[3], 0x16u, COERCE_INT(*(float *)(v6 + 24)), 0); sub_91A460(v5[3], 0x17u, COERCE_INT(*(float *)(v6 + 28)), 0); } --v3[60]; --v3[61]; sub_91D830((_DWORD *)v3[15], *(_DWORD *)(v3[15] + 20), v5); v9 = v11; if ( v11 ) { --*((_DWORD *)v11 + 23); if ( !v9[23] ) sub_91BD60(v9); } return v5; } //----- (00918790) -------------------------------------------------------- _DWORD **__thiscall sub_918790(_DWORD *this, int *a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD **v4; // esi _DWORD *v5; // ecx _DWORD *v6; // eax void *v8; // [esp+4h] [ebp-4h] v2 = this; v3 = (_DWORD *)this[15]; if ( !v3 || !sub_91C980(v3, 1, 1) ) return 0; sub_91BE40(&v8); v4 = (_DWORD **)v8; *(_DWORD *)v8 = *(_DWORD *)(v2[15] + 20); sub_42AAF0(v4, a2[80]); sub_91A460(v4[3], 0xBu, 1, 0); sub_91A460(v4[3], 1u, 2, 0); sub_91A460(v4[3], 2u, 2, 0); sub_91A460(v4[3], 3u, 1, 0); sub_91A460(v4[3], 4u, 3, 0); sub_91A460(v4[3], 5u, 2, 0); v5 = v4[3]; if ( *((_BYTE *)v2 + 233) ) { sub_91A460(v5, 6u, 0, 0); *((_BYTE *)v2 + 233) = 0; } else { sub_91A460(v5, 6u, 1, 0); } ((void (__cdecl *)(int *, int *, _DWORD **, _DWORD, _DWORD))dword_BA6D38[a2[84]])(a2 + 68, a2 + 77, v4, 0, v2[5]); sub_91AF30(v4, a2[81]); sub_91AED0(v4, a2[82]); --v2[60]; --v2[61]; sub_91D830((_DWORD *)v2[15], *(_DWORD *)(v2[15] + 20), v4); v6 = v8; if ( v8 ) { --*((_DWORD *)v8 + 23); if ( !v6[23] ) sub_91BD60(v6); } return v4; } // BA6D38: using guessed type int dword_BA6D38[]; //----- (009188F0) -------------------------------------------------------- _DWORD **__thiscall sub_9188F0(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ecx _DWORD **v4; // esi _DWORD *v5; // ecx _DWORD *v6; // ecx int v7; // eax double v8; // st7 float *v9; // eax double v10; // st7 double v11; // st5 _DWORD *v12; // ecx _DWORD *v13; // eax void *v15; // [esp+4h] [ebp-10h] float v16; // [esp+8h] [ebp-Ch] float v17; // [esp+Ch] [ebp-8h] float v18; // [esp+10h] [ebp-4h] float v19; // [esp+1Ch] [ebp+8h] v2 = this; v3 = (_DWORD *)this[15]; if ( !v3 || !sub_91C980(v3, 1, 1) ) return 0; sub_91BE40(&v15); v4 = (_DWORD **)v15; *(_DWORD *)v15 = *(_DWORD *)(v2[15] + 20); sub_42AAF0(v4, *(_DWORD *)(v2[5] + 1784)); sub_91A460(v4[3], 0xBu, 0x20000, 0); v5 = v4[3]; *((_BYTE *)v4 + 90) = 1; sub_91A460(v5, 0x18u, 2, 0); sub_91A460(v4[3], 1u, 4, 0); sub_91A460(v4[3], 2u, 2, 0); sub_91A460(v4[3], 3u, 1, 0); sub_91A460(v4[3], 4u, 3, 0); sub_91A460(v4[3], 5u, 2, 0); v6 = v4[3]; if ( *((_BYTE *)v2 + 233) ) { sub_91A460(v6, 6u, 0, 0); *((_BYTE *)v2 + 233) = 0; } else { sub_91A460(v6, 6u, 1, 0); } sub_91AF30(v4, 0); sub_91AED0(v4, 0); v7 = a2; if ( *(_DWORD *)(a2 + 332) == 1 ) { v18 = -*(float *)(a2 + 360); v19 = -*(float *)(a2 + 364); v17 = -*(float *)(v7 + 368); v8 = -*(float *)(v7 + 372); } else { v18 = *(float *)(a2 + 360); v19 = *(float *)(a2 + 364); v17 = *(float *)(v7 + 368); v8 = *(float *)(v7 + 372); } v9 = (float *)v2[5]; v16 = v8; v10 = v18; v11 = v17; *((float *)v4 + 6) = v9[518] * v17 + v9[516] * v18 + v9[517] * v19; *((float *)v4 + 10) = v9[521] * v19 + v9[520] * v10 + v9[522] * v11; *((float *)v4 + 14) = v9[525] * v19 + v9[524] * v10 + v9[526] * v11; *((float *)v4 + 18) = v11 * v9[530] + v19 * v9[529] + v10 * v9[528] + 0.5 - v16; v12 = (_DWORD *)v2[15]; --v2[60]; --v2[61]; sub_91D830(v12, v12[5], v4); v13 = v15; if ( v15 ) { --*((_DWORD *)v15 + 23); if ( !v13[23] ) sub_91BD60(v13); } return v4; } //----- (00918B30) -------------------------------------------------------- unsigned int __thiscall sub_918B30(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi unsigned int v3; // edi v2 = this; v3 = this[3]; if ( v3 >= this[2] ) sub_8237A0(this, v3 + this[5]); sub_823870(v2, v3, a2); return v3; } //----- (00918B60) -------------------------------------------------------- void *__thiscall sub_918B60(void *this, char a2) { void *v2; // esi v2 = this; sub_918270(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00918B90) -------------------------------------------------------- void __thiscall sub_918B90(int this, int a2) { int v2; // esi unsigned int v3; // eax _DWORD **v4; // eax _DWORD **v5; // edi _DWORD *v6; // ecx int v7; // ecx bool v8; // zf v2 = this; if ( *(_DWORD *)(this + 60) ) { if ( *(_BYTE *)(this + 232) && a2 ) { v3 = *(unsigned __int16 *)(a2 + 16); if ( v3 > *(_DWORD *)(this + 236) ) LOWORD(v3) = *(_WORD *)(this + 236); v4 = sub_918380((_DWORD *)this, (int *)a2, (unsigned __int16)v3); v5 = v4; if ( v4 ) { sub_91A460(v4[3], 1u, 3, 0); v6 = v5[3]; if ( *(_BYTE *)(v2 + 232) ) { sub_91A460(v6, 4u, 4, 0); sub_91A460(v5[3], 6u, 0, 0); } else { sub_91A460(v6, 4u, 2, 0); } } } v7 = *(_DWORD *)(v2 + 60); if ( v7 ) { v8 = (*(_DWORD *)(v7 + 104))-- == 1; if ( v8 ) sub_91D6F0((_BYTE *)v7); *(_DWORD *)(v2 + 60) = 0; } ++*(_DWORD *)(v2 + 56); *(_DWORD *)(v2 + 240) = 0; *(_DWORD *)(v2 + 244) = 0; } } //----- (00918C50) -------------------------------------------------------- char __thiscall sub_918C50(_DWORD *this, int a2, char a3) { int v3; // edi _DWORD *v4; // esi char result; // al v3 = a2; v4 = this; if ( !*(_BYTE *)(a2 + 176) || !*(_DWORD *)(a2 + 320) || (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this[5] + 1728) + 16))(*(_DWORD *)(a2 + 320)) == 22 ) { return 0; } switch ( *(_DWORD *)(v3 + 332) ) { case 0: if ( a3 ) sub_918B30(v4 + 22, &a2); else sub_918B30(v4 + 28, &a2); result = 1; break; case 1: if ( a3 ) sub_918B30(v4 + 34, &a2); else sub_918B30(v4 + 40, &a2); result = 1; break; case 2: sub_918B30(v4 + 46, &a2); result = 1; break; case 3: sub_918B30(v4 + 52, &a2); goto LABEL_16; default: LABEL_16: result = 1; break; } return result; } //----- (00918D50) -------------------------------------------------------- _DWORD *__thiscall sub_918D50(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_8CE010(this); *v1 = &NiD3DDefaultShader::`vftable'; v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[23] = 0; v1[27] = 1; v1[22] = &NiTArray::`vftable'; v1[30] = 0; v1[31] = 0; v1[32] = 0; v1[29] = 0; v1[28] = &NiTArray::`vftable'; v1[33] = 1; v1[36] = 0; v1[37] = 0; v1[38] = 0; v1[35] = 0; v1[34] = &NiTArray::`vftable'; v1[39] = 1; v1[42] = 0; v1[43] = 0; v1[44] = 0; v1[41] = 0; v1[40] = &NiTArray::`vftable'; v1[45] = 1; v1[48] = 0; v1[49] = 0; v1[50] = 0; v1[47] = 0; v1[46] = &NiTArray::`vftable'; v1[51] = 1; v1[54] = 0; v1[55] = 0; v1[56] = 0; v1[53] = 0; v1[52] = &NiTArray::`vftable'; v1[57] = 1; v1[63] = 0; v1[64] = 0; *((_BYTE *)v1 + 260) = 0; v1[68] = 0; v1[66] = 1; *((_BYTE *)v1 + 268) = 1; return v1; } // A44240: using guessed type void *NiTArray::`vftable'; // A4424C: using guessed type void *NiD3DDefaultShader::`vftable'; //----- (00918E50) -------------------------------------------------------- void __thiscall sub_918E50(_DWORD *this, int a2, int a3, char a4, char a5) { _DWORD *v5; // edi int *v6; // esi int *v7; // eax int v8; // ecx int *v9; // ebx bool v10; // zf int v11; // eax int v12; // eax unsigned int v13; // ebx _DWORD *v14; // ebx int v15; // esi int v16; // edi int v17; // edi int v18; // esi int v19; // [esp+Ch] [ebp-4h] v5 = this; v6 = this + 15; if ( !this[15] ) { v7 = sub_91DA90(&v19); v8 = *v6; v9 = v7; if ( *v6 != *v7 ) { if ( v8 ) { v10 = (*(_DWORD *)(v8 + 104))-- == 1; if ( v10 ) sub_91D6F0((_BYTE *)v8); } v11 = *v9; *v6 = *v9; if ( v11 ) ++*(_DWORD *)(v11 + 104); } v12 = v19; if ( v19 ) { --*(_DWORD *)(v19 + 104); if ( !*(_DWORD *)(v12 + 104) ) sub_91D6F0((_BYTE *)v12); } v13 = v5[14]; if ( v13 >= v5[18] ) sub_461380((int)(v5 + 16), (void *)(v13 + v5[21])); sub_461550(v5 + 16, v13, v6); v14 = v5; if ( v5[14] ) { if ( a2 != 2 || a3 != 1 ) { v16 = *v6; if ( !*(_DWORD *)(*v6 + 56) ) *(_DWORD *)(v16 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v16 + 56), 19, a2, 0); v17 = *v6; if ( !*(_DWORD *)(*v6 + 56) ) *(_DWORD *)(v17 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v17 + 56), 20, a3, 0); v18 = *v6; if ( !*(_DWORD *)(v18 + 56) ) *(_DWORD *)(v18 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v18 + 56), 27, 1, 1); } else { v15 = *v6; if ( !*(_DWORD *)(v15 + 56) ) *(_DWORD *)(v15 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v15 + 56), 27, 0, 1); } } *((_BYTE *)v14 + 232) = a4; *((_BYTE *)v14 + 233) = a5; v14[60] = dword_AC4D34; v14[61] = dword_AC4D38; if ( a4 ) { --v14[60]; --v14[61]; } } } // AC4D34: using guessed type int dword_AC4D34; // AC4D38: using guessed type int dword_AC4D38; //----- (00918FA0) -------------------------------------------------------- void __thiscall sub_918FA0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax _DWORD *v5; // esi int v6; // eax int v7; // eax int v8; // eax v2 = this; if ( a2 != (_DWORD *)this[68] ) { sub_9180F0(this); v2[68] = a2; if ( a2 ) { v3 = (_DWORD *)a2[4]; while ( v3 ) { v4 = v3[1]; v3 = (_DWORD *)*v3; sub_918C50(v2, v4, *(_BYTE *)(v4 + 340)); } v5 = (_DWORD *)a2[5]; while ( v5 ) { v6 = v5[1]; v5 = (_DWORD *)*v5; sub_918C50(v2, v6, *(_BYTE *)(v6 + 340)); } v7 = a2[6]; if ( v7 ) sub_918C50(v2, v7, 0); v8 = a2[7]; if ( v8 ) sub_918C50(v2, v8, 0); } } } //----- (00919030) -------------------------------------------------------- void __thiscall sub_919030(_DWORD *this, int a2, int a3, int a4, int a5) { _DWORD *v5; // esi unsigned int v6; // ecx bool v7; // zf unsigned int v8; // edi int v9; // ebx _DWORD *v10; // ecx _DWORD *v11; // ebx unsigned int v12; // eax unsigned int v13; // ebx int v14; // edi unsigned int v15; // eax int *v16; // ecx _DWORD **v17; // eax int v18; // ebx _DWORD **v19; // edi _DWORD *v20; // ecx int v21; // edi int v22; // edi int v23; // ecx int v24; // [esp+4h] [ebp-Ch] int v25; // [esp+8h] [ebp-8h] bool v26; // [esp+Fh] [ebp-1h] char v27; // [esp+1Bh] [ebp+Bh] v5 = this; v6 = this[14]; if ( v6 >= 2 && *(_BYTE *)(a2 + 28) & 1 ) { v7 = (*(_BYTE *)(a3 + 28) & 1) == 0; v27 = 0; v26 = 0; if ( !v7 || (*(_WORD *)(a3 + 28) >> 9) & 1 ) { if ( !a4 || (v27 = 1, a5 == 1) ) v27 = 0; v26 = a5 != 0; } if ( v5[64] < v6 ) { operator delete((void *)v5[63]); v5[63] = operator new(4 * v5[14]); v5[64] = v5[14]; } v8 = 1; *(_DWORD *)v5[63] = 1; if ( v5[14] > 1u ) { while ( 1 ) { v9 = *(_DWORD *)(v5[17] + 4 * v8); v10 = *(_DWORD **)(v9 + 56); if ( v10 ) sub_91C120(v10, 19, &v25, (_BYTE *)&a5 + 3); v11 = *(_DWORD **)(v9 + 56); if ( v11 ) sub_91C120(v11, 20, &v24, (_BYTE *)&a5 + 3); if ( v25 == 3 || v25 == 4 || v24 == 4 || v24 == 9 ) goto LABEL_28; if ( v25 != 1 && v25 != 9 ) break; *(_DWORD *)(v5[63] + 4 * v8) = 0; LABEL_29: if ( ++v8 >= v5[14] ) goto LABEL_30; } if ( v24 == 1 || v24 == 3 ) { v12 = 0; if ( v8 ) { do *(_DWORD *)(v5[63] + 4 * v12++) = 0; while ( v12 < v8 ); } *(_DWORD *)(v5[63] + 4 * v8) = 1; goto LABEL_29; } LABEL_28: *(_DWORD *)(v5[63] + 4 * v8) = 1; goto LABEL_29; } LABEL_30: v13 = 0; a5 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v5[6] + 104))(34); if ( v5[14] ) { do { v14 = *(_DWORD *)(v5[17] + 4 * v13); if ( *(_DWORD *)(v5[63] + 4 * v13) ) { if ( !*(_DWORD *)(v14 + 56) ) *(_DWORD *)(v14 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v14 + 56), 28, 1, 0); if ( !*(_DWORD *)(v14 + 56) ) *(_DWORD *)(v14 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v14 + 56), 34, -16777216, 0); } else { if ( !*(_DWORD *)(v14 + 56) ) *(_DWORD *)(v14 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v14 + 56), 28, 0, 0); } ++v13; } while ( v13 < v5[14] ); } sub_918E50(v5, *(_DWORD *)(v5[6] + 4 * (((unsigned int)*(unsigned __int16 *)(a3 + 28) >> 1) & 0xF) + 32), 2, 0, 0); v15 = 0; if ( v27 ) { v16 = (int *)a4; if ( a4 ) { v15 = *(_DWORD *)(a4 + 16); if ( v15 > v5[59] ) v15 = v5[59]; } } else { v16 = 0; } v17 = sub_918380(v5, v16, v15); v18 = v5[15]; v19 = v17; if ( !*(_DWORD *)(v18 + 56) ) *(_DWORD *)(v18 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v18 + 56), 60, -16777216, 0); sub_91A460(v19[3], 1u, 2, 0); sub_91A460(v19[3], 2u, 3, 0); v20 = v19[3]; if ( v26 ) { if ( v27 ) sub_91A460(v20, 4u, 4, 0); else sub_91A460(v20, 4u, 3, 0); sub_91A460(v19[3], 6u, 0, 0); } else { sub_91A460(v20, 4u, 2, 0); } v21 = v5[15]; if ( !*(_DWORD *)(v21 + 56) ) *(_DWORD *)(v21 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v21 + 56), 28, 1, 0); v22 = v5[15]; if ( !*(_DWORD *)(v22 + 56) ) *(_DWORD *)(v22 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v22 + 56), 34, a5, 0); if ( v5[15] ) { v23 = v5[15]; if ( v23 ) { v7 = (*(_DWORD *)(v23 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v23); v5[15] = 0; } ++v5[14]; v5[60] = 0; v5[61] = 0; } } } //----- (00919350) -------------------------------------------------------- signed int __thiscall sub_919350(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, int a7, int a8) { _DWORD *v8; // edi int v9; // esi _DWORD *v11; // ebx int v12; // edx unsigned __int16 v13; // cx int *v14; // eax int v15; // edi int v16; // ebx int v17; // eax int v18; // edi int v19; // ecx int v20; // eax int v21; // edi int v22; // ecx int v23; // edx unsigned int v24; // eax int v25; // ebx char v26; // dl unsigned int v27; // eax unsigned int v28; // ecx char v29; // al unsigned int v30; // eax char v31; // al char v32; // bl int *v33; // edi _DWORD **v34; // edi unsigned int v35; // eax _DWORD **v36; // eax _DWORD **v37; // edi _DWORD **v38; // eax _DWORD **v39; // edi unsigned int v40; // eax _DWORD **v41; // eax _DWORD **v42; // edi unsigned int v43; // eax _DWORD **v44; // eax _DWORD **v45; // edi _DWORD **v46; // eax _DWORD **v47; // edi int v48; // ebx signed int v49; // edi int v50; // eax unsigned int v51; // ecx _DWORD **v52; // eax int v53; // ecx unsigned __int16 v54; // ax int *v55; // eax int v56; // ecx int *v57; // edi bool v58; // zf int v59; // eax int v60; // eax unsigned int v61; // ebx int v62; // edi int v63; // edi int v64; // edi _DWORD **v65; // eax _DWORD **v66; // edi int v67; // ebx int v68; // eax unsigned __int16 v69; // cx _DWORD **v70; // edi int v71; // ecx int v72; // ecx char v73; // bl int *v74; // edi _DWORD **v75; // eax int v76; // edi _DWORD **v77; // eax int v78; // edx unsigned int v79; // edi unsigned int v80; // eax char v81; // bl int v82; // eax unsigned int v83; // eax _DWORD **v84; // eax unsigned int v85; // eax _DWORD **v86; // eax int v87; // edi int v88; // eax unsigned int v89; // eax _DWORD **v90; // eax int v91; // edi int *v92; // ST0C_4 _DWORD **v93; // eax int v94; // ecx int v95; // ecx int *v96; // edi _DWORD **v97; // eax int v98; // ecx int v99; // edi int v100; // [esp+8h] [ebp-84h] unsigned int v101; // [esp+Ch] [ebp-80h] signed int v102; // [esp+10h] [ebp-7Ch] int v103; // [esp+14h] [ebp-78h] int v104; // [esp+18h] [ebp-74h] int v105; // [esp+1Ch] [ebp-70h] int v106; // [esp+20h] [ebp-6Ch] int v107; // [esp+24h] [ebp-68h] int v108; // [esp+28h] [ebp-64h] int v109; // [esp+2Ch] [ebp-60h] int v110; // [esp+30h] [ebp-5Ch] char v111; // [esp+34h] [ebp-58h] int v112; // [esp+38h] [ebp-54h] int v113; // [esp+3Ch] [ebp-50h] char v114; // [esp+40h] [ebp-4Ch] unsigned int v115; // [esp+44h] [ebp-48h] _DWORD *v116; // [esp+48h] [ebp-44h] int v117; // [esp+4Ch] [ebp-40h] int v118; // [esp+4Ch] [ebp-40h] int v119; // [esp+50h] [ebp-3Ch] int v120; // [esp+54h] [ebp-38h] unsigned int v121; // [esp+58h] [ebp-34h] int v122; // [esp+5Ch] [ebp-30h] unsigned int v123; // [esp+60h] [ebp-2Ch] int v124; // [esp+64h] [ebp-28h] char v125; // [esp+6Ah] [ebp-22h] bool v126; // [esp+6Bh] [ebp-21h] int v127; // [esp+6Ch] [ebp-20h] int v128; // [esp+70h] [ebp-1Ch] int v129; // [esp+74h] [ebp-18h] unsigned int v130; // [esp+78h] [ebp-14h] int v131; // [esp+7Ch] [ebp-10h] int v132; // [esp+80h] [ebp-Ch] int v133; // [esp+84h] [ebp-8h] char v134; // [esp+8Bh] [ebp-1h] int v135; // [esp+94h] [ebp+8h] int v136; // [esp+94h] [ebp+8h] int v137; // [esp+94h] [ebp+8h] int v138; // [esp+94h] [ebp+8h] bool v139; // [esp+97h] [ebp+Bh] int v140; // [esp+9Ch] [ebp+10h] int v141; // [esp+9Ch] [ebp+10h] bool v142; // [esp+9Fh] [ebp+13h] char v143; // [esp+A7h] [ebp+1Bh] v8 = a4; v9 = (int)this; if ( a2 ) { if ( !a4 ) return -1; } else if ( !a4 || !sub_9366F0(a4) || !a5 ) { return -1; } sub_918FA0((_DWORD *)v9, a6); v11 = (_DWORD *)a5[10]; v12 = 0; v116 = (_DWORD *)a5[10]; v131 = 0; v133 = 0; v112 = 0; v106 = 0; v107 = 0; v109 = 0; if ( !a4 ) v8 = *(_DWORD **)(*(_DWORD *)(a2 + 184) + 60); if ( a2 && (v135 = *(_DWORD *)(a2 + 184), (*(_WORD *)(v135 + 50) & 0xF000) != 0x4000) ) v13 = *(_WORD *)(v135 + 48) & 0x3F; else v13 = *((unsigned __int8 *)v8 + 3); if ( v13 > 8u ) v13 = 8; *(_DWORD *)(v9 + 236) = 0; if ( v13 ) { v14 = (int *)v11[10]; v15 = *v14; v12 = v14[2]; v112 = v14[1]; v106 = v14[5]; v16 = v14[4]; v17 = v14[3]; *(_DWORD *)(v9 + 236) = v13 - 1; v131 = v15; v133 = v12; v107 = v16; v109 = v17; if ( v15 && *(_DWORD *)(v15 + 4) ) { v11 = v116; v120 = 1; goto LABEL_22; } v11 = v116; } v120 = 0; LABEL_22: if ( !v12 || (v119 = 1, !*(_DWORD *)(v12 + 4)) ) v119 = 0; if ( !v112 || (v124 = 1, !*(_DWORD *)(v112 + 4)) ) v124 = 0; if ( !v106 || (v122 = 1, !*(_DWORD *)(v106 + 4)) ) v122 = 0; v18 = v11[15]; v132 = v11[15]; if ( !v107 || (v102 = 1, !*(_DWORD *)(v107 + 4)) ) v102 = 0; if ( !v109 || (v128 = 1, !*(_DWORD *)(v109 + 4)) ) v128 = 0; v19 = v11[12] - 6; if ( v11[12] != 6 ) { v20 = v11[10] + 24; do { if ( *(_DWORD *)v20 && !*(_DWORD *)(*(_DWORD *)v20 + 4) ) --v18; v20 += 4; --v19; } while ( v19 ); v132 = v18; } v21 = v11[7]; v22 = *(_DWORD *)(v9 + 172); v113 = *(_DWORD *)(v9 + 124); v23 = *(_DWORD *)(v9 + 148); v121 = *(_DWORD *)(v9 + 100); v24 = *(_DWORD *)(v9 + 196); v117 = v23; v25 = a5[2]; LOBYTE(v23) = *(_BYTE *)(v25 + 28); v126 = v24 != 0; v104 = v22; v142 = v21 != 0; v26 = v23 & 1; v101 = v24; v100 = *(_DWORD *)(v9 + 220); v103 = v21; v110 = v25; v143 = v26; if ( v26 ) { v27 = ((unsigned int)*(unsigned __int16 *)(v25 + 28) >> 1) & 0xF; v28 = ((unsigned int)*(unsigned __int16 *)(v25 + 28) >> 5) & 0xF; if ( v27 != 6 && v27 != 7 && v27 != 8 && v27 != 9 && v27 != 10 && v28 != 6 && v28 != 7 && v28 != 8 && v28 != 9 && v28 != 10 ) { v26 = 0; v143 = 0; } } v29 = (*(_WORD *)(v25 + 28) >> 9) & 1; v125 = (*(_WORD *)(v25 + 28) >> 9) & 1; LOBYTE(v129) = 0; LOBYTE(v127) = 0; if ( v26 || v29 ) { if ( !v131 || (LOBYTE(v129) = 1, v21 == 1) ) LOBYTE(v129) = 0; LOBYTE(v127) = v21 != 0; } v115 = v121; v130 = v124 + v113 + 2 * v121; v105 = v113; v123 = v120 + v119; v139 = v21 != 0; while ( 1 ) { v30 = v123; if ( !v139 ) break; if ( v115 || v130 > 1 || !v123 ) v30 = v123 + 1; LABEL_70: if ( *(_DWORD *)(v9 + 56) ) { if ( v130 ) goto LABEL_72; } else { if ( v121 > 1 ) goto LABEL_72; v30 += v130; } if ( v30 <= dword_AC4D38 ) { v31 = 1; v134 = 1; goto LABEL_78; } LABEL_72: v31 = 0; v134 = 0; if ( (_BYTE)v129 ) { v111 = 1; goto LABEL_79; } LABEL_78: v111 = 0; if ( v31 ) goto LABEL_80; LABEL_79: v114 = 1; if ( !(_BYTE)v127 ) LABEL_80: v114 = 0; if ( v130 ) { if ( v143 ) sub_918E50( (_DWORD *)v9, *(_DWORD *)(*(_DWORD *)(v9 + 24) + 4 * (((unsigned int)*(unsigned __int16 *)(v110 + 28) >> 1) & 0xF) + 32), 2, v111, v114); else sub_918E50((_DWORD *)v9, 2, 2, v111, v114); } else { sub_918E50((_DWORD *)v9, 1, 3, v111, v114); } v32 = 0; if ( v115 && *(_DWORD *)(v9 + 240) && *(_DWORD *)(v9 + 244) ) { v33 = *(int **)(*(_DWORD *)(v9 + 92) + 4 * (v121 - v115)); sub_918790((_DWORD *)v9, v33); --v130; --v115; if ( *(_DWORD *)(v9 + 240) && *(_DWORD *)(v9 + 244) ) { v34 = sub_9188F0((_DWORD *)v9, (int)v33); sub_91A460(v34[3], 1u, 4, 0); sub_91A460(v34[3], 4u, 3, 0); } --v130; v32 = 1; } for ( ; v124; --v124 ) { if ( !*(_DWORD *)(v9 + 240) || !*(_DWORD *)(v9 + 244) ) break; v35 = *(unsigned __int16 *)(v112 + 16); if ( v35 > *(_DWORD *)(v9 + 236) ) LOWORD(v35) = *(_WORD *)(v9 + 236); v36 = sub_918380((_DWORD *)v9, (int *)v112, (unsigned __int16)v35); v37 = v36; if ( v32 ) { sub_91A460(v36[3], 1u, 7, 0); } else { if ( v139 && v124 + v113 + v121 < 2 ) { sub_91A460(v36[3], 1u, 4, 0); sub_91A460(v37[3], 3u, 0, 0); sub_91A460(v37[3], 4u, 3, 0); sub_91A460(v37[3], 6u, 0, 0); v139 = 0; } v32 = 1; } --v130; } if ( v105 ) { v108 = 4 * (v113 - v105); do { if ( !*(_DWORD *)(v9 + 240) || !*(_DWORD *)(v9 + 244) ) break; v38 = sub_918790((_DWORD *)v9, *(int **)(v108 + *(_DWORD *)(v9 + 116))); v39 = v38; if ( v32 ) { sub_91A460(v38[3], 1u, 7, 0); } else { if ( v139 && v124 + v113 + v121 < 2 ) { sub_91A460(v38[3], 1u, 4, 0); sub_91A460(v39[3], 3u, 0, 0); sub_91A460(v39[3], 4u, 3, 0); sub_91A460(v39[3], 6u, 0, 0); v139 = 0; } v32 = 1; } v108 += 4; --v130; --v105; } while ( v105 ); } if ( v134 ) { if ( !v120 ) goto LABEL_130; v40 = *(unsigned __int16 *)(v131 + 16); if ( v40 > *(_DWORD *)(v9 + 236) ) LOWORD(v40) = *(_WORD *)(v9 + 236); v41 = sub_918380((_DWORD *)v9, (int *)v131, (unsigned __int16)v40); v42 = v41; if ( v32 ) { if ( !(_BYTE)v127 || v139 ) { sub_91A460(v41[3], 1u, 4, 0); LABEL_128: sub_91A460(v42[3], 4u, 2, 0); goto LABEL_129; } sub_91A460(v41[3], 1u, 4, 0); sub_91A460(v42[3], 4u, 4, 0); } else { if ( !v139 ) { sub_91A460(v41[3], 1u, 2, 0); goto LABEL_128; } sub_91A460(v41[3], 1u, 4, 0); sub_91A460(v42[3], 3u, 0, 0); sub_91A460(v42[3], 4u, 4, 0); sub_91A460(v42[3], 6u, 0, 0); v139 = 0; } LABEL_129: --v123; v32 = 1; LABEL_130: if ( v119 ) { v43 = *(unsigned __int16 *)(v133 + 16); if ( v43 > *(_DWORD *)(v9 + 236) ) LOWORD(v43) = *(_WORD *)(v9 + 236); v44 = sub_918380((_DWORD *)v9, (int *)v133, (unsigned __int16)v43); v45 = v44; if ( !v32 ) { sub_91A460(v44[3], 3u, 0, 0); sub_91A460(v45[3], 6u, 0, 0); sub_91A460(v45[3], 4u, 5, 0); v139 = 0; v32 = 1; } sub_91A460(v45[3], 1u, 5, 0); --v123; } if ( v139 ) { v46 = sub_918380((_DWORD *)v9, 0, 0); v47 = v46; if ( v32 && v103 == 2 ) { sub_91A460(v46[3], 1u, 4, 0); sub_91A460(v47[3], 4u, 4, 0); v139 = 0; } else { sub_91A460(v46[3], 1u, 2, 0); sub_91A460(v47[3], 4u, 2, 0); v139 = 0; } } } else { sub_918B90(v9, v131); } } if ( v123 + v130 ) goto LABEL_70; if ( v132 ) { v136 = 0; if ( !*(_BYTE *)(v9 + 260) || !*(_BYTE *)(v9 + 268) || *(_DWORD *)(v9 + 56) || v143 || v125 || v142 ) { sub_918B90(v9, v131); goto LABEL_162; } v48 = v132; v49 = 24; while ( *(_DWORD *)(v9 + 240) && *(_DWORD *)(v9 + 244) ) { v50 = *(_DWORD *)(v49 + v116[10]); ++v136; v49 += 4; if ( v50 && *(_DWORD *)(v50 + 4) ) { v51 = *(unsigned __int16 *)(v50 + 16); if ( v51 > *(_DWORD *)(v9 + 236) ) LOWORD(v51) = *(_WORD *)(v9 + 236); v52 = sub_918380((_DWORD *)v9, (int *)v50, (unsigned __int16)v51); sub_91A460(v52[3], 1u, 13, 0); --v48; } if ( !v48 ) goto LABEL_218; } v132 = v48; if ( v48 ) { sub_918B90(v9, 0); do { LABEL_162: v53 = *(_DWORD *)(v116[10] + 4 * v136 + 24); v120 = v53; ++v136; if ( v53 && *(_DWORD *)(v53 + 4) ) { v54 = *(_WORD *)(v53 + 16); v133 = *(unsigned __int16 *)(v53 + 16); if ( (unsigned int)v54 > *(_DWORD *)(v9 + 236) ) { v54 = *(_WORD *)(v9 + 236); v133 = *(unsigned __int16 *)(v9 + 236); } if ( !*(_DWORD *)(v9 + 60) ) { v55 = sub_91DA90(&v119); v56 = *(_DWORD *)(v9 + 60); v57 = v55; if ( v56 != *v55 ) { if ( v56 ) { v58 = (*(_DWORD *)(v56 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v56); } v59 = *v57; *(_DWORD *)(v9 + 60) = *v57; if ( v59 ) ++*(_DWORD *)(v59 + 104); } v60 = v119; if ( v119 ) { --*(_DWORD *)(v119 + 104); if ( !*(_DWORD *)(v60 + 104) ) sub_91D6F0((_BYTE *)v60); } v61 = *(_DWORD *)(v9 + 56); if ( v61 >= *(_DWORD *)(v9 + 72) ) sub_461380(v9 + 64, (void *)(v61 + *(_DWORD *)(v9 + 84))); sub_461550((_DWORD *)(v9 + 64), v61, (int *)(v9 + 60)); if ( *(_DWORD *)(v9 + 56) ) { v62 = *(_DWORD *)(v9 + 60); if ( !*(_DWORD *)(v62 + 56) ) *(_DWORD *)(v62 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v62 + 56), 19, 5, 0); v63 = *(_DWORD *)(v9 + 60); if ( !*(_DWORD *)(v63 + 56) ) *(_DWORD *)(v63 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v63 + 56), 20, 6, 0); v64 = *(_DWORD *)(v9 + 60); if ( !*(_DWORD *)(v64 + 56) ) *(_DWORD *)(v64 + 56) = sub_91C760(); sub_91C5E0(*(_DWORD **)(v64 + 56), 27, 1, 1); } v53 = v120; *(_WORD *)(v9 + 232) = 0; *(_DWORD *)(v9 + 240) = dword_AC4D34; *(_DWORD *)(v9 + 244) = dword_AC4D38; v54 = v133; } v65 = sub_918380((_DWORD *)v9, (int *)v53, v54); v66 = v65; if ( !*(_BYTE *)(v9 + 260) || !*(_BYTE *)(v9 + 268) ) { if ( v142 ) { LABEL_209: sub_91A460(v65[3], 1u, 4, 0); sub_91A460(v66[3], 4u, 4, 0); sub_91A460(v66[3], 3u, 0, 0); sub_91A460(v66[3], 6u, 0, 0); } else { sub_91A460(v65[3], 4u, 2, 0); } --v132; if ( *(_DWORD *)(v9 + 60) ) { v72 = *(_DWORD *)(v9 + 60); if ( v72 ) { v58 = (*(_DWORD *)(v72 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v72); *(_DWORD *)(v9 + 60) = 0; } ++*(_DWORD *)(v9 + 56); *(_DWORD *)(v9 + 240) = 0; *(_DWORD *)(v9 + 244) = 0; } continue; } if ( v142 ) goto LABEL_209; sub_91A460(v65[3], 1u, 4, 0); sub_91A460(v66[3], 3u, 34, 0); sub_91A460(v66[3], 4u, 2, 0); v67 = v132-- - 1; if ( !v132 ) break; v133 = 4 * v136 + 24; while ( *(_DWORD *)(v9 + 240) && *(_DWORD *)(v9 + 244) > 0u ) { v68 = *(_DWORD *)(v133 + v116[10]); ++v136; v133 += 4; if ( v68 && *(_DWORD *)(v68 + 4) ) { v69 = *(_WORD *)(v68 + 16); if ( (unsigned int)v69 > *(_DWORD *)(v9 + 236) ) v69 = *(_WORD *)(v9 + 236); v70 = sub_918380((_DWORD *)v9, (int *)v68, v69); sub_91A460(v70[3], 1u, 13, 0); sub_91A460(v70[3], 4u, 7, 0); v132 = --v67; } if ( !v67 ) goto LABEL_218; } if ( !v67 ) break; if ( *(_DWORD *)(v9 + 60) ) { v71 = *(_DWORD *)(v9 + 60); if ( v71 ) { v58 = (*(_DWORD *)(v71 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v71); *(_DWORD *)(v9 + 60) = 0; } ++*(_DWORD *)(v9 + 56); *(_DWORD *)(v9 + 240) = 0; *(_DWORD *)(v9 + 244) = 0; } } } while ( v132 ); } } LABEL_218: if ( v104 || v117 ) { v133 = v117; v140 = v104; if ( v117 || !sub_918070((_DWORD *)v9, 1, 3) ) sub_918B90(v9, v131); v137 = v117 + v104; if ( v117 + v104 ) { v118 = 0; while ( 1 ) { v73 = 1; if ( !*(_DWORD *)(v9 + 60) ) { sub_918E50((_DWORD *)v9, 1, 3, v129, v127); v73 = 0; if ( v133 ) { v74 = *(int **)(v118 + *(_DWORD *)(v9 + 140)); sub_918790((_DWORD *)v9, v74); --v137; --v133; v118 += 4; if ( *(_DWORD *)(v9 + 240) && *(_DWORD *)(v9 + 244) ) { v75 = sub_9188F0((_DWORD *)v9, (int)v74); sub_91A460(v75[3], 1u, 7, 0); } v73 = 1; } } if ( v140 ) { v76 = 4 * (v104 - v140); do { if ( !*(_DWORD *)(v9 + 240) || !*(_DWORD *)(v9 + 244) ) break; v77 = sub_918790((_DWORD *)v9, *(int **)(v76 + *(_DWORD *)(v9 + 164))); if ( v73 ) sub_91A460(v77[3], 1u, 4, 0); else v73 = 1; --v137; v76 += 4; --v140; } while ( v140 ); } if ( !v137 ) break; sub_918B90(v9, v131); } } } if ( v126 ) { if ( *(_DWORD *)(v9 + 264) == 1 ) { v78 = 0; v122 = 0; } else { v78 = v122; } v79 = v78 + v128 + (v101 > 0); v80 = v79 + ((_BYTE)v129 != 0); if ( v80 > dword_AC4D34 ) { do { if ( v80 <= dword_AC4D38 ) break; if ( v128 ) { --v128; } else if ( v78 ) { --v78; } --v80; --v79; } while ( v80 > dword_AC4D34 ); v122 = v78; } if ( v128 || !sub_918070((_DWORD *)v9, 2, 2) || *(_DWORD *)(v9 + 240) < v79 || *(_DWORD *)(v9 + 244) < v79 ) sub_918B90(v9, v131); v81 = 1; if ( !*(_DWORD *)(v9 + 60) ) { v82 = 2; if ( v143 ) v82 = *(_DWORD *)(*(_DWORD *)(v9 + 24) + 4 * (((unsigned int)*(unsigned __int16 *)(v110 + 28) >> 1) & 0xF) + 32); sub_918E50((_DWORD *)v9, v82, 2, v129, v127); v81 = 0; } if ( v122 && *(_DWORD *)(v9 + 240) > 1u && *(_DWORD *)(v9 + 244) > 1u ) { v83 = *(unsigned __int16 *)(v106 + 16); if ( v83 > *(_DWORD *)(v9 + 236) ) LOWORD(v83) = *(_WORD *)(v9 + 236); sub_918590((_DWORD *)v9, v106, (unsigned __int16)v83); } v84 = sub_918790((_DWORD *)v9, **(int ***)(v9 + 188)); if ( v81 ) sub_91A460(v84[3], 1u, 7, 0); if ( v128 ) { v85 = *(unsigned __int16 *)(v109 + 16); if ( v85 > *(_DWORD *)(v9 + 236) ) LOWORD(v85) = *(_WORD *)(v9 + 236); v86 = sub_918380((_DWORD *)v9, (int *)v109, (unsigned __int16)v85); sub_91A460(v86[3], 1u, 4, 0); } } if ( v102 ) { if ( !sub_918070((_DWORD *)v9, 2, 2) || !*(_DWORD *)(v9 + 240) || !*(_DWORD *)(v9 + 244) ) sub_918B90(v9, v131); v87 = 7; if ( !*(_DWORD *)(v9 + 60) ) { v88 = 2; if ( v143 ) v88 = *(_DWORD *)(*(_DWORD *)(v9 + 24) + 4 * (((unsigned int)*(unsigned __int16 *)(v110 + 28) >> 1) & 0xF) + 32); sub_918E50((_DWORD *)v9, v88, 2, v129, v127); v87 = 2; } v89 = *(unsigned __int16 *)(v107 + 16); if ( v89 > *(_DWORD *)(v9 + 236) ) LOWORD(v89) = *(_WORD *)(v9 + 236); v90 = sub_918380((_DWORD *)v9, (int *)v107, (unsigned __int16)v89); sub_91A460(v90[3], 1u, v87, 0); } if ( !v100 ) goto LABEL_321; v91 = 0; v138 = v100; if ( *(_BYTE *)(v9 + 260) && !*(_DWORD *)(v9 + 56) ) { while ( *(_DWORD *)(v9 + 240) > 0u && *(_DWORD *)(v9 + 244) > 0u ) { v92 = *(int **)(*(_DWORD *)(v9 + 212) + 4 * v91++); v93 = sub_918790((_DWORD *)v9, v92); sub_91A460(v93[3], 1u, 13, 0); if ( !--v138 ) goto LABEL_321; } if ( !v138 ) goto LABEL_321; goto LABEL_296; } if ( !sub_918070((_DWORD *)v9, 5, 6) ) { LABEL_296: if ( *(_DWORD *)(v9 + 60) ) { v94 = *(_DWORD *)(v9 + 60); if ( v94 ) { v58 = (*(_DWORD *)(v94 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v94); *(_DWORD *)(v9 + 60) = 0; } ++*(_DWORD *)(v9 + 56); *(_DWORD *)(v9 + 244) = 0; *(_DWORD *)(v9 + 240) = 0; } } if ( v138 ) { v141 = 4 * v91; do { if ( (!*(_DWORD *)(v9 + 240) || !*(_DWORD *)(v9 + 244)) && *(_DWORD *)(v9 + 60) ) { v95 = *(_DWORD *)(v9 + 60); if ( v95 ) { v58 = (*(_DWORD *)(v95 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v95); *(_DWORD *)(v9 + 60) = 0; } ++*(_DWORD *)(v9 + 56); *(_DWORD *)(v9 + 240) = 0; *(_DWORD *)(v9 + 244) = 0; } v96 = *(int **)(v141 + *(_DWORD *)(v9 + 212)); v141 += 4; if ( !*(_DWORD *)(v9 + 60) ) sub_918E50((_DWORD *)v9, 5, 6, v129, v127); v97 = sub_918790((_DWORD *)v9, v96); sub_91A460(v97[3], 4u, 2, 0); --v138; if ( *(_DWORD *)(v9 + 60) ) { v98 = *(_DWORD *)(v9 + 60); if ( v98 ) { v58 = (*(_DWORD *)(v98 + 104))-- == 1; if ( v58 ) sub_91D6F0((_BYTE *)v98); *(_DWORD *)(v9 + 60) = 0; } ++*(_DWORD *)(v9 + 56); *(_DWORD *)(v9 + 240) = 0; *(_DWORD *)(v9 + 244) = 0; } } while ( v138 ); } LABEL_321: v99 = v131; sub_918B90(v9, v131); sub_919030((_DWORD *)v9, a5[4], v110, v99, v103); return 0; } // AC4D34: using guessed type int dword_AC4D34; // AC4D38: using guessed type int dword_AC4D38; //----- (0091A2E0) -------------------------------------------------------- signed int __thiscall sub_91A2E0(void *this, int a2, int a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, int a7, int a8) { void *v8; // esi v8 = this; (*(void (**)(void))(*(_DWORD *)this + 108))(); return sub_919350(v8, a2, a3, a4, a5, a6, a7, a8); } //----- (0091A320) -------------------------------------------------------- _DWORD *__thiscall sub_91A320(_DWORD *this) { _DWORD *v1; // esi v1 = this; *(_BYTE *)this = 0; this[1] = 0; this[2] = 0; this[45] = 0; this[46] = 0; this[89] = 0; this[90] = 0; this[109] = 0; this[110] = 0; this[129] = 0; memset(this + 3, 0, 0x84u); v1[36] = 0; v1[37] = 0; v1[38] = 0; v1[39] = 0; v1[40] = 0; v1[41] = 0; v1[42] = 0; v1[43] = 0; *((_BYTE *)v1 + 176) = 0; memset(v1 + 47, 0, 0x84u); v1[80] = 0; v1[81] = 0; v1[82] = 0; v1[83] = 0; v1[84] = 0; v1[85] = 0; v1[86] = 0; v1[87] = 0; *((_BYTE *)v1 + 352) = 0; memset(v1 + 91, 0, 0x38u); v1[105] = 0; v1[106] = 0; v1[107] = 0; *((_WORD *)v1 + 216) = 0; memset(v1 + 111, 0, 0x38u); v1[125] = 0; v1[126] = 0; v1[127] = 0; *((_WORD *)v1 + 256) = 0; v1[130] = 0; v1[131] = 0; v1[132] = 0; *((_WORD *)v1 + 266) = 0; return v1; } //----- (0091A460) -------------------------------------------------------- unsigned int __thiscall sub_91A460(_DWORD *this, unsigned int a2, int a3, char a4) { unsigned int result; // eax result = a2; if ( a2 < 0x21 ) { if ( a4 ) { if ( *((_BYTE *)this + a2 + 144) ) { this[a2 + 3] = a3; } else { if ( *((_BYTE *)this + a2 + 320) ) { *((_BYTE *)this + a2 + 320) = 0; *((_BYTE *)this + a2 + 144) = 1; this[a2 + 3] = a3; --this[45]; ++this[1]; } *((_BYTE *)this + a2 + 144) = 1; this[a2 + 3] = a3; ++this[1]; } } else if ( *((_BYTE *)this + a2 + 320) ) { this[a2 + 47] = a3; } else { if ( *((_BYTE *)this + a2 + 144) ) { *((_BYTE *)this + a2 + 144) = 0; *((_BYTE *)this + a2 + 320) = 1; this[a2 + 47] = a3; ++this[45]; --this[1]; } *((_BYTE *)this + a2 + 320) = 1; this[a2 + 47] = a3; ++this[45]; } } return result; } //----- (0091A530) -------------------------------------------------------- char __thiscall sub_91A530(_DWORD *this, unsigned int a2, _DWORD *a3, _BYTE *a4) { if ( a2 >= 0x21 ) return 0; if ( *((_BYTE *)this + a2 + 320) ) { *a3 = this[a2 + 47]; *a4 = 0; return 1; } if ( !*((_BYTE *)this + a2 + 144) ) return 0; *a3 = this[a2 + 3]; *a4 = 1; return 1; } //----- (0091A590) -------------------------------------------------------- _BYTE *__thiscall sub_91A590(_DWORD *this, unsigned int a2, int a3, char a4, char a5) { _BYTE *result; // eax result = (_BYTE *)a2; if ( a2 >= 0xE ) return result; if ( !a4 ) { if ( *((_BYTE *)this + a2 + 500) ) { this[a2 + 111] = a3; goto LABEL_12; } if ( *((_BYTE *)this + a2 + 420) ) { *((_BYTE *)this + a2 + 420) = 0; --this[89]; if ( *((_BYTE *)this + a2 + 520) ) --this[129]; *((_BYTE *)this + a2 + 520) = 0; } *((_BYTE *)this + a2 + 500) = 1; this[a2 + 111] = a3; ++this[109]; LABEL_23: if ( a5 ) ++this[129]; *((_BYTE *)this + a2 + 520) = a5; return result; } if ( !*((_BYTE *)this + a2 + 420) ) { if ( *((_BYTE *)this + a2 + 500) ) { *((_BYTE *)this + a2 + 500) = 0; --this[109]; if ( *((_BYTE *)this + a2 + 520) ) --this[129]; *((_BYTE *)this + a2 + 520) = 0; } *((_BYTE *)this + a2 + 420) = 1; this[a2 + 91] = a3; ++this[89]; goto LABEL_23; } this[a2 + 91] = a3; LABEL_12: result = (char *)this + a2 + 520; if ( a5 ) { if ( !*result ) { ++this[129]; *result = a5; return result; } } else if ( *result ) { --this[129]; } *result = a5; return result; } //----- (0091A6C0) -------------------------------------------------------- _BYTE *__thiscall sub_91A6C0(_DWORD *this) { _BYTE *result; // eax signed int v2; // edx result = this + 80; v2 = 33; do { *(result - 176) = 0; *result++ = 0; --v2; } while ( v2 ); this[45] = 0; this[1] = 0; return result; } //----- (0091A6F0) -------------------------------------------------------- _BYTE *__thiscall sub_91A6F0(_DWORD *this) { _BYTE *result; // eax signed int v2; // esi result = this + 125; v2 = 14; do { *(result - 80) = 0; *result = 0; (result++)[20] = 0; --v2; } while ( v2 ); this[109] = 0; this[89] = 0; this[129] = 0; return result; } //----- (0091A720) -------------------------------------------------------- int __thiscall sub_91A720(char *this, int a2) { unsigned int v2; // esi _DWORD *v3; // edi char *v5; // [esp+Ch] [ebp-4h] v5 = this; v2 = 0; v3 = this + 12; do { if ( this[v2 + 320] ) { (*(void (__stdcall **)(int, unsigned int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CBC + 200))(a2, v2, v3[44], 0); } else { if ( !this[v2 + 144] ) goto LABEL_7; (*(void (__stdcall **)(int, unsigned int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CBC + 200))(a2, v2, *v3, 0); } this = v5; LABEL_7: ++v2; ++v3; } while ( v2 < 0x21 ); return 0; } // BA6CBC: using guessed type int dword_BA6CBC; //----- (0091A7A0) -------------------------------------------------------- int __thiscall sub_91A7A0(char *this, int a2) { unsigned int v2; // esi _DWORD *v3; // edi char *v5; // [esp+Ch] [ebp-4h] v5 = this; v2 = 0; v3 = this + 364; do { if ( this[v2 + 500] ) { (*(void (__stdcall **)(int, unsigned int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CBC + 208))(a2, v2, v3[20], 0); } else { if ( !this[v2 + 420] ) goto LABEL_7; (*(void (__stdcall **)(int, unsigned int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CBC + 208))(a2, v2, *v3, 0); } this = v5; LABEL_7: ++v2; ++v3; } while ( v2 < 0xE ); return 0; } // BA6CBC: using guessed type int dword_BA6CBC; //----- (0091A820) -------------------------------------------------------- void *__thiscall sub_91A820(void *this, char a2) { void *v2; // esi v2 = this; sub_91AA90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0091A850) -------------------------------------------------------- int __thiscall sub_91A850(char *this, unsigned int a2) { int v2; // esi char *v3; // edi int result; // eax v2 = 0; v3 = this; if ( a2 < dword_AC4D34 ) v2 = sub_91A720(this, a2); result = sub_91A7A0(v3, a2); if ( v2 ) result = v2; return result; } // AC4D34: using guessed type int dword_AC4D34; //----- (0091A890) -------------------------------------------------------- int *__thiscall sub_91A890(int *this, unsigned int a2) { int v2; // ebx int *v3; // edi int v4; // ecx unsigned int *v5; // eax int v6; // esi _DWORD *i; // edi int *v9; // [esp+Ch] [ebp-4h] v2 = 0; v3 = this; v9 = this; this[1] = a2; this[2] = 0; if ( a2 ) { v4 = 536 * a2 | -(536 * (unsigned __int64)a2 >> 32 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = a2 - 1; v2 = (int)(v5 + 1); for ( i = v5 + 1; v6 >= 0; --v6 ) { sub_91A320(i); i += 134; } v3 = v9; } } *v3 = v2; return v3; } //----- (0091A900) -------------------------------------------------------- _DWORD *sub_91A900() { _DWORD *result; // eax result = operator new(0x18u); if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 8; result[4] = 8; result[5] = 0; dword_BA6CC0 = result; } else { dword_BA6CC0 = 0; } return result; } //----- (0091A940) -------------------------------------------------------- int *__thiscall sub_91A940(void **this, unsigned int a2) { void **v2; // esi int *v3; // eax _DWORD *v4; // edi int *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = (int *)operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_91A890(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 536; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = (int)v2[5]; v2[5] = result; return result; } //----- (0091AA30) -------------------------------------------------------- char *__thiscall sub_91AA30(void **this, _DWORD *a2) { void **v2; // esi unsigned int v3; // edx char *result; // eax _DWORD *v5; // ecx void *v6; // eax void *v7; // eax v2 = this; v3 = (unsigned int)this[2]; result = 0; if ( !v3 ) goto LABEL_7; v5 = *this; while ( *v5 != *a2 ) { ++result; ++v5; if ( (unsigned int)result >= v3 ) goto LABEL_7; } if ( result == (char *)-1 ) { LABEL_7: v6 = v2[1]; if ( (void *)v3 == v6 ) { if ( v6 ) v7 = (void *)(2 * (_DWORD)v6); else v7 = (void *)1; sub_811D30(v2, v7); } result = (char *)v2[2]; *((_DWORD *)*v2 + (_DWORD)result) = *a2; v2[2] = (char *)v2[2] + 1; } return result; } //----- (0091AA90) -------------------------------------------------------- void __thiscall sub_91AA90(_DWORD *this) { _DWORD *v1; // esi void *v2; // esi v1 = this; if ( *this ) operator delete((void *)(*this - 4)); v2 = (void *)v1[2]; if ( v2 ) { sub_91AA90(v2); operator delete(v2); } } //----- (0091AAC0) -------------------------------------------------------- void sub_91AAC0() { void **v0; // edi _DWORD *v1; // esi void *v2; // ecx v0 = (void **)dword_BA6CC0; if ( dword_BA6CC0 ) { v1 = (_DWORD *)*((_DWORD *)dword_BA6CC0 + 5); *((_DWORD *)dword_BA6CC0 + 2) = 0; if ( v1 ) { if ( *v1 ) operator delete((void *)(*v1 - 4)); v2 = (void *)v1[2]; if ( v2 ) sub_91A820(v2, 1); operator delete(v1); } operator delete(*v0); operator delete(v0); } } //----- (0091AB20) -------------------------------------------------------- _BYTE *sub_91AB20() { _DWORD *v0; // esi _DWORD **v1; // edi _DWORD *v2; // ebx _DWORD *v3; // ecx _BYTE *result; // eax v0 = (char *)dword_BA6CC0 + 8; v1 = (_DWORD **)dword_BA6CC0; if ( !*((_DWORD *)dword_BA6CC0 + 2) ) { v2 = (char *)dword_BA6CC0 + 12; sub_91A940((void **)dword_BA6CC0, *((_DWORD *)dword_BA6CC0 + 3)); *v2 *= 2; } v3 = *v1; result = (_BYTE *)**v1; *v3 = v3[--*v0]; if ( !*result ) *result = 1; return result; } //----- (0091AB60) -------------------------------------------------------- char *__cdecl sub_91AB60(_BYTE *a1) { _BYTE *v1; // esi char *result; // eax v1 = a1; if ( *a1 ) { memset(a1 + 12, 0, 0x84u); *((_DWORD *)v1 + 36) = 0; *((_DWORD *)v1 + 37) = 0; *((_DWORD *)v1 + 38) = 0; *((_DWORD *)v1 + 39) = 0; *((_DWORD *)v1 + 40) = 0; *((_DWORD *)v1 + 41) = 0; *((_DWORD *)v1 + 42) = 0; *((_DWORD *)v1 + 43) = 0; v1[176] = 0; memset(v1 + 188, 0, 0x84u); *((_DWORD *)v1 + 80) = 0; *((_DWORD *)v1 + 81) = 0; *((_DWORD *)v1 + 82) = 0; *((_DWORD *)v1 + 83) = 0; *((_DWORD *)v1 + 84) = 0; *((_DWORD *)v1 + 85) = 0; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 87) = 0; v1[352] = 0; memset(v1 + 364, 0, 0x38u); *((_DWORD *)v1 + 105) = 0; *((_DWORD *)v1 + 106) = 0; *((_DWORD *)v1 + 107) = 0; *((_WORD *)v1 + 216) = 0; memset(v1 + 444, 0, 0x38u); *((_DWORD *)v1 + 125) = 0; *((_DWORD *)v1 + 126) = 0; *((_DWORD *)v1 + 127) = 0; *((_WORD *)v1 + 256) = 0; *((_DWORD *)v1 + 130) = 0; *((_DWORD *)v1 + 131) = 0; *((_DWORD *)v1 + 132) = 0; *((_WORD *)v1 + 266) = 0; *((_DWORD *)v1 + 45) = 0; *((_DWORD *)v1 + 1) = 0; *((_DWORD *)v1 + 109) = 0; *((_DWORD *)v1 + 89) = 0; *((_DWORD *)v1 + 129) = 0; a1 = v1; result = sub_91AA30((void **)dword_BA6CC0, &a1); } return result; } //----- (0091ACB0) -------------------------------------------------------- void __thiscall sub_91ACB0(_DWORD *this, char a2) { _DWORD *v2; // esi signed int v3; // esi signed int v4; // edi v2 = this; if ( a2 && !((*(int (**)(void))(*(_DWORD *)dword_BA6CCC + 64))() & 8) && (*(int (**)(void))(*(_DWORD *)dword_BA6CCC + 64))() & 4 ) { (*(void (__stdcall **)(_DWORD, _DWORD, signed int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 208))(*v2, 0, 3, 0); (*(void (__stdcall **)(_DWORD, signed int, signed int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 208))(*v2, 1, 3, 0); v3 = 198; v4 = 8; do { (*(void (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CD0 + 100))(v3 - 70, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CD0 + 100))(v3++, 0, 0); --v4; } while ( v4 ); } } // BA6CCC: using guessed type int dword_BA6CCC; // BA6CD0: using guessed type int dword_BA6CD0; //----- (0091AD60) -------------------------------------------------------- int __cdecl sub_91AD60(unsigned int a1) { unsigned int i; // esi int result; // eax for ( i = a1; i < dword_AC4D34; ++i ) { (*(void (__stdcall **)(unsigned int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 224))(i, 0); (*(void (__stdcall **)(unsigned int, signed int, signed int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 200))(i, 1, 1, 0); (*(void (__stdcall **)(unsigned int, signed int, signed int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 200))(i, 4, 1, 0); result = (*(int (__stdcall **)(unsigned int, signed int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CD0 + 200))( i, 24, 0, 0); } for ( ; i < dword_AC4D3C; ++i ) result = (*(int (__stdcall **)(unsigned int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 224))(i, 0); return result; } // AC4D34: using guessed type int dword_AC4D34; // AC4D3C: using guessed type int dword_AC4D3C; // BA6CD0: using guessed type int dword_BA6CD0; //----- (0091AE00) -------------------------------------------------------- void *__thiscall sub_91AE00(void *this, char a2) { void *v2; // esi v2 = this; sub_91BCA0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0091AE30) -------------------------------------------------------- _DWORD *__thiscall sub_91AE30(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = 0; this[1] = 0; this[2] = 0; this[4] = 0; this[5] = 0; this[22] = 0; this[23] = 0; this[3] = sub_91AB20(); return v1; } //----- (0091AE60) -------------------------------------------------------- char __thiscall sub_91AE60(int this, int a2, int a3) { int v3; // esi int v4; // eax int v5; // eax v3 = this; if ( a2 ) *(_BYTE *)(this + 90) = 1; *(_DWORD *)(this + 16) = a2; if ( a3 && (a2 & 0xF0000000) == 0x10000000 ) { sub_930E20(); v4 = sub_931160(a3); *(_DWORD *)(v3 + 20) = v4; LOBYTE(v5) = InterlockedIncrement((volatile LONG *)(v4 + 4)); } else { v5 = *(_DWORD *)(this + 20); if ( v5 ) { LOBYTE(v5) = sub_931800(*(_DWORD *)(v5 + 8)); *(_DWORD *)(v3 + 20) = 0; } } return v5; } //----- (0091AED0) -------------------------------------------------------- _BYTE *__thiscall sub_91AED0(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // ST1C_4 int v4; // ST18_4 v2 = this; v3 = dword_BA6E24[2 * a2]; sub_91A590(this[3], 0, dword_BA6E20[2 * a2], 0, 0); v4 = dword_BA6E20[2 * a2]; return sub_91A590(v2[3], 1u, dword_BA6E24[2 * a2], 0, 0); } // BA6E20: using guessed type int dword_BA6E20[]; // BA6E24: using guessed type int dword_BA6E24[]; //----- (0091AF30) -------------------------------------------------------- _BYTE *__thiscall sub_91AF30(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // ST18_4 int v4; // ST20_4 int v5; // ST20_4 int v6; // ST1C_4 int v7; // ST18_4 int v8; // ST1C_4 v2 = this; v3 = dword_BA6DD8[3 * a2]; v4 = dword_BA6DE0[3 * a2]; sub_91A590(this[3], 4u, dword_BA6DDC[3 * a2], 0, 0); v5 = dword_BA6DE0[3 * a2]; v6 = dword_BA6DDC[3 * a2]; sub_91A590(v2[3], 5u, dword_BA6DD8[3 * a2], 0, 0); v7 = dword_BA6DD8[3 * a2]; v8 = dword_BA6DDC[3 * a2]; return sub_91A590(v2[3], 6u, dword_BA6DE0[3 * a2], 0, 0); } // BA6DD8: using guessed type int dword_BA6DD8[]; // BA6DDC: using guessed type int dword_BA6DDC[]; // BA6DE0: using guessed type int dword_BA6DE0[]; //----- (0091AFD0) -------------------------------------------------------- char __stdcall sub_91AFD0(int a1, float *a2) { int v2; // ecx float *v3; // eax double v4; // st7 double v5; // st6 double v6; // st7 char result; // al float *v8; // eax int v9; // ecx double v10; // st7 double v11; // st6 switch ( a1 ) { case 1: v2 = dword_BA6CCC; v3 = a2; flt_BA6CD8 = *(float *)(dword_BA6CCC + 2068) * a2[4] + *(float *)(dword_BA6CCC + 2064) * *a2 + *(float *)(dword_BA6CCC + 2072) * a2[8]; flt_BA6CE8 = *(float *)(dword_BA6CCC + 2084) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2088) * a2[8]; flt_BA6CF8 = a2[4] * *(float *)(dword_BA6CCC + 2100) + *(float *)(dword_BA6CCC + 2096) * *a2 + *(float *)(dword_BA6CCC + 2104) * a2[8]; flt_BA6CDC = *(float *)(dword_BA6CCC + 2064) * a2[1] + *(float *)(dword_BA6CCC + 2068) * a2[5] + a2[9] * *(float *)(dword_BA6CCC + 2072); flt_BA6CEC = *(float *)(dword_BA6CCC + 2084) * a2[5] + *(float *)(dword_BA6CCC + 2080) * a2[1] + *(float *)(dword_BA6CCC + 2088) * a2[9]; flt_BA6CFC = *(float *)(dword_BA6CCC + 2096) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2100) + a2[9] * *(float *)(dword_BA6CCC + 2104); flt_BA6CE0 = *(float *)(dword_BA6CCC + 2064) * a2[2] + *(float *)(dword_BA6CCC + 2068) * a2[6] + *(float *)(dword_BA6CCC + 2072) * a2[10]; flt_BA6CF0 = a2[2] * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2084) * a2[6] + *(float *)(dword_BA6CCC + 2088) * a2[10]; flt_BA6D00 = *(float *)(dword_BA6CCC + 2100) * a2[6] + *(float *)(dword_BA6CCC + 2096) * a2[2] + *(float *)(dword_BA6CCC + 2104) * a2[10]; flt_BA6D08 = *(float *)(dword_BA6CCC + 2116) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2112) + *(float *)(dword_BA6CCC + 2120) * a2[8] + a2[12]; flt_BA6D0C = *(float *)(dword_BA6CCC + 2116) * a2[5] + *(float *)(dword_BA6CCC + 2112) * a2[1] + *(float *)(dword_BA6CCC + 2120) * a2[9] + a2[13]; v4 = a2[2] * *(float *)(dword_BA6CCC + 2112); v5 = *(float *)(dword_BA6CCC + 2116) * a2[6]; goto LABEL_3; case 2: v3 = a2; v2 = dword_BA6CCC; flt_BA6CD8 = a2[4] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2064) * *a2 + *(float *)(dword_BA6CCC + 2072) * a2[8]; flt_BA6CE8 = *(float *)(dword_BA6CCC + 2084) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2088) * a2[8]; flt_BA6CF8 = a2[4] * *(float *)(dword_BA6CCC + 2100) + *(float *)(dword_BA6CCC + 2096) * *a2 + *(float *)(dword_BA6CCC + 2104) * a2[8]; flt_BA6CDC = a2[5] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2064) * a2[1] + a2[9] * *(float *)(dword_BA6CCC + 2072); flt_BA6CEC = *(float *)(dword_BA6CCC + 2084) * a2[5] + *(float *)(dword_BA6CCC + 2080) * a2[1] + *(float *)(dword_BA6CCC + 2088) * a2[9]; flt_BA6CFC = *(float *)(dword_BA6CCC + 2096) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2100) + a2[9] * *(float *)(dword_BA6CCC + 2104); flt_BA6CE0 = *(float *)(dword_BA6CCC + 2064) * a2[2] + a2[6] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2072) * a2[10]; flt_BA6CF0 = a2[2] * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2084) * a2[6] + *(float *)(dword_BA6CCC + 2088) * a2[10]; flt_BA6D00 = *(float *)(dword_BA6CCC + 2100) * a2[6] + *(float *)(dword_BA6CCC + 2096) * a2[2] + *(float *)(dword_BA6CCC + 2104) * a2[10]; flt_BA6D08 = a2[4] * *(float *)(dword_BA6CCC + 2116) + *(float *)(dword_BA6CCC + 2112) * *a2 + *(float *)(dword_BA6CCC + 2120) * a2[8] + a2[12]; flt_BA6D0C = *(float *)(dword_BA6CCC + 2112) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2116) + a2[9] * *(float *)(dword_BA6CCC + 2120) + a2[13]; v4 = *(float *)(dword_BA6CCC + 2116) * a2[6]; v5 = *(float *)(dword_BA6CCC + 2112) * a2[2]; LABEL_3: v6 = v4 + v5 + *(float *)(v2 + 2120) * v3[10] + v3[14]; goto LABEL_4; case 3: v8 = a2; v9 = dword_BA6CCC; flt_BA6CD8 = a2[4] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2064) * *a2 + *(float *)(dword_BA6CCC + 2072) * a2[8]; flt_BA6CE8 = a2[4] * *(float *)(dword_BA6CCC + 2084) + *(float *)(dword_BA6CCC + 2080) * *a2 + *(float *)(dword_BA6CCC + 2088) * a2[8]; flt_BA6CF8 = *(float *)(dword_BA6CCC + 2100) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2096) + *(float *)(dword_BA6CCC + 2104) * a2[8]; flt_BA6CDC = *(float *)(dword_BA6CCC + 2064) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2072) * a2[9]; flt_BA6CEC = *(float *)(dword_BA6CCC + 2080) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2084) + a2[9] * *(float *)(dword_BA6CCC + 2088); flt_BA6CFC = *(float *)(dword_BA6CCC + 2100) * a2[5] + *(float *)(dword_BA6CCC + 2096) * a2[1] + *(float *)(dword_BA6CCC + 2104) * a2[9]; flt_BA6CE0 = *(float *)(dword_BA6CCC + 2064) * a2[2] + *(float *)(dword_BA6CCC + 2068) * a2[6] + *(float *)(dword_BA6CCC + 2072) * a2[10]; flt_BA6CF0 = *(float *)(dword_BA6CCC + 2084) * a2[6] + *(float *)(dword_BA6CCC + 2080) * a2[2] + *(float *)(dword_BA6CCC + 2088) * a2[10]; v10 = a2[2] * *(float *)(dword_BA6CCC + 2096); v11 = *(float *)(dword_BA6CCC + 2100) * a2[6]; goto LABEL_7; case 4: memset(&flt_BA6CD8, 0, 0x40u); flt_BA6CEC = 0.5; flt_BA6CF8 = 0.5; result = 1; flt_BA6D08 = 0.5; flt_BA6D0C = 0.5; return result; case 5: v9 = dword_BA6CCC; v8 = a2; flt_BA6CD8 = *(float *)(dword_BA6CCC + 2068) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2064) + *(float *)(dword_BA6CCC + 2072) * a2[8]; flt_BA6CE8 = a2[4] * *(float *)(dword_BA6CCC + 2084) + *(float *)(dword_BA6CCC + 2080) * *a2 + *(float *)(dword_BA6CCC + 2088) * a2[8]; flt_BA6CF8 = a2[4] * *(float *)(dword_BA6CCC + 2100) + *(float *)(dword_BA6CCC + 2096) * *a2 + *(float *)(dword_BA6CCC + 2104) * a2[8]; flt_BA6CDC = *(float *)(dword_BA6CCC + 2068) * a2[5] + a2[1] * *(float *)(dword_BA6CCC + 2064) + a2[9] * *(float *)(dword_BA6CCC + 2072); flt_BA6CEC = a2[5] * *(float *)(dword_BA6CCC + 2084) + *(float *)(dword_BA6CCC + 2080) * a2[1] + a2[9] * *(float *)(dword_BA6CCC + 2088); flt_BA6CFC = a2[5] * *(float *)(dword_BA6CCC + 2100) + *(float *)(dword_BA6CCC + 2096) * a2[1] + *(float *)(dword_BA6CCC + 2104) * a2[9]; flt_BA6CE0 = a2[2] * *(float *)(dword_BA6CCC + 2064) + *(float *)(dword_BA6CCC + 2068) * a2[6] + *(float *)(dword_BA6CCC + 2072) * a2[10]; flt_BA6CF0 = *(float *)(dword_BA6CCC + 2080) * a2[2] + *(float *)(dword_BA6CCC + 2084) * a2[6] + *(float *)(dword_BA6CCC + 2088) * a2[10]; v10 = a2[6] * *(float *)(dword_BA6CCC + 2100); v11 = a2[2] * *(float *)(dword_BA6CCC + 2096); goto LABEL_7; case 6: v8 = a2; v9 = dword_BA6CCC; flt_BA6CD8 = a2[4] * *(float *)(dword_BA6CCC + 2068) + *a2 * *(float *)(dword_BA6CCC + 2064) + *(float *)(dword_BA6CCC + 2072) * a2[8]; flt_BA6CE8 = *(float *)(dword_BA6CCC + 2084) * a2[4] + *a2 * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2088) * a2[8]; flt_BA6CF8 = a2[4] * *(float *)(dword_BA6CCC + 2100) + *(float *)(dword_BA6CCC + 2096) * *a2 + *(float *)(dword_BA6CCC + 2104) * a2[8]; flt_BA6CDC = a2[5] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2064) * a2[1] + a2[9] * *(float *)(dword_BA6CCC + 2072); flt_BA6CEC = *(float *)(dword_BA6CCC + 2084) * a2[5] + *(float *)(dword_BA6CCC + 2080) * a2[1] + *(float *)(dword_BA6CCC + 2088) * a2[9]; flt_BA6CFC = *(float *)(dword_BA6CCC + 2096) * a2[1] + a2[5] * *(float *)(dword_BA6CCC + 2100) + a2[9] * *(float *)(dword_BA6CCC + 2104); flt_BA6CE0 = a2[2] * *(float *)(dword_BA6CCC + 2064) + a2[6] * *(float *)(dword_BA6CCC + 2068) + *(float *)(dword_BA6CCC + 2072) * a2[10]; flt_BA6CF0 = a2[2] * *(float *)(dword_BA6CCC + 2080) + *(float *)(dword_BA6CCC + 2084) * a2[6] + *(float *)(dword_BA6CCC + 2088) * a2[10]; v10 = *(float *)(dword_BA6CCC + 2100) * a2[6]; v11 = *(float *)(dword_BA6CCC + 2096) * a2[2]; LABEL_7: flt_BA6D00 = v10 + v11 + *(float *)(v9 + 2104) * v8[10]; flt_BA6D08 = v8[12]; flt_BA6D0C = v8[13]; v6 = v8[14]; LABEL_4: flt_BA6D10 = v6; result = 1; flt_BA6CE4 = 0.0; flt_BA6CF4 = 0.0; flt_BA6D04 = 0.0; flt_BA6D14 = 0.0; break; default: result = 0; break; } return result; } // BA6CCC: using guessed type int dword_BA6CCC; // BA6CD8: using guessed type float flt_BA6CD8; // BA6CDC: using guessed type float flt_BA6CDC; // BA6CE0: using guessed type float flt_BA6CE0; // BA6CE4: using guessed type float flt_BA6CE4; // BA6CE8: using guessed type float flt_BA6CE8; // BA6CEC: using guessed type float flt_BA6CEC; // BA6CF0: using guessed type float flt_BA6CF0; // BA6CF4: using guessed type float flt_BA6CF4; // BA6CF8: using guessed type float flt_BA6CF8; // BA6CFC: using guessed type float flt_BA6CFC; // BA6D00: using guessed type float flt_BA6D00; // BA6D04: using guessed type float flt_BA6D04; // BA6D08: using guessed type float flt_BA6D08; // BA6D0C: using guessed type float flt_BA6D0C; // BA6D10: using guessed type float flt_BA6D10; // BA6D14: using guessed type float flt_BA6D14; //----- (0091B7E0) -------------------------------------------------------- _DWORD *__thiscall sub_91B7E0(void *this, char a2) { _DWORD *v2; // esi char *v3; // ecx int v4; // ebx int v5; // eax int v6; // ebx int v7; // edi int v8; // eax int v9; // esi _DWORD *result; // eax int v11; // eax int v12; // edi int v13; // [esp+8h] [ebp-4h] v2 = this; if ( a2 & 2 ) { v3 = (char *)this - 4; v4 = *(v2 - 1); v5 = 24 * v4; v6 = v4 - 1; v13 = (int)(v2 - 1); if ( v6 >= 0 ) { v7 = (int)&v2[v5 + 5]; do { v8 = *(_DWORD *)(v7 - 96); v7 -= 96; if ( v8 ) sub_931800(*(_DWORD *)(v8 + 8)); sub_91AB60(*(_BYTE **)(v7 - 8)); v9 = *(_DWORD *)(v7 - 16); if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); --v6; } while ( v6 >= 0 ); v3 = (char *)v13; } if ( a2 & 1 ) { operator delete(v3); v3 = (char *)v13; } result = v3; } else { v11 = *((_DWORD *)this + 5); if ( v11 ) sub_931800(*(_DWORD *)(v11 + 8)); sub_91AB60((_BYTE *)v2[3]); v12 = v2[1]; if ( v12 && !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (0091B8D0) -------------------------------------------------------- _DWORD *__thiscall sub_91B8D0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int v4; // ecx unsigned int *v5; // eax int v6; // edi _DWORD *v7; // esi _DWORD *v9; // [esp+Ch] [ebp-4h] int v10; // [esp+18h] [ebp+8h] v2 = this; v3 = 0; v9 = this; this[1] = a2; this[2] = 0; if ( a2 ) { v4 = 96 * a2 | -(96 * (unsigned __int64)a2 >> 32 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = a2 - 1; v7 = v5 + 1; v10 = (int)(v5 + 1); if ( v6 >= 0 ) { do { *v7 = 0; v7[1] = 0; v7[2] = 0; v7[4] = 0; v7[5] = 0; v7[22] = 0; v7[23] = 0; v7[3] = sub_91AB20(); v7 += 24; --v6; } while ( v6 >= 0 ); v7 = (_DWORD *)v10; } v3 = v7; v2 = v9; } } *v2 = v3; return v2; } //----- (0091B960) -------------------------------------------------------- int __cdecl sub_91B960(int a1) { int v1; // esi int result; // eax dword_BA6CCC = a1; if ( a1 ) { v1 = *(_DWORD *)(a1 + 132); if ( dword_BA6CC8 ) (*(void (__stdcall **)(int))(*(_DWORD *)dword_BA6CC8 + 8))(dword_BA6CC8); dword_BA6CC8 = v1; if ( v1 ) (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 4))(v1); result = *(_DWORD *)(dword_BA6CCC + 1716); dword_BA6CD0 = *(_DWORD *)(dword_BA6CCC + 1716); } else { result = dword_BA6CC8; if ( dword_BA6CC8 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA6CC8 + 8))(dword_BA6CC8); dword_BA6CC8 = 0; dword_BA6CD0 = 0; } return result; } // BA6CC8: using guessed type int dword_BA6CC8; // BA6CCC: using guessed type int dword_BA6CCC; // BA6CD0: using guessed type int dword_BA6CD0; //----- (0091BA20) -------------------------------------------------------- void __thiscall sub_91BA20(_DWORD *this) { _DWORD *v1; // esi int v2; // edx int v3; // ecx unsigned int v4; // eax int v5; // ecx float *v6; // eax int v7; // esi v1 = this; v2 = *this; if ( *this < (unsigned int)dword_AC4D34 ) { if ( !*((_BYTE *)this + 90) ) { (*(void (__stdcall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CD0 + 200))(v2, 24, 0, 0); return; } v3 = this[4]; v4 = v1[4] & 0xF0000000; if ( v4 ) { if ( v4 == 0x10000000 ) { v5 = v3 & 0xFFFFFFF; if ( v5 ) { v6 = *(float **)(v1[5] + 24); LABEL_12: if ( sub_91AFD0(v5, v6) ) (*(void (__stdcall **)(int, int, float *))(*(_DWORD *)dword_BA6CC8 + 176))( dword_BA6CC8, *v1 + 16, &flt_BA6CD8); return; } v7 = *(_DWORD *)(v1[5] + 24); LABEL_15: (*(void (__stdcall **)(int, int, int))(*(_DWORD *)dword_BA6CC8 + 176))(dword_BA6CC8, v2 + 16, v7); return; } if ( v4 != 0x20000000 ) return; v5 = v3 & 0xFFFFFFF; if ( v5 ) { v6 = (float *)(v1 + 6); goto LABEL_12; } } v7 = (int)(v1 + 6); goto LABEL_15; } } // AC4D34: using guessed type int dword_AC4D34; // BA6CC8: using guessed type int dword_BA6CC8; // BA6CD0: using guessed type int dword_BA6CD0; // BA6CD8: using guessed type float flt_BA6CD8; //----- (0091BAE0) -------------------------------------------------------- void __thiscall sub_91BAE0(int *this) { int *v1; // esi _DWORD *v2; // ecx bool v3; // zf int v4; // eax int v5; // eax int v6; // edi int v7; // [esp+4h] [ebp-Ch] int v8; // [esp+8h] [ebp-8h] char v9; // [esp+Eh] [ebp-2h] char v10; // [esp+Fh] [ebp-1h] v1 = this; if ( *this < (unsigned int)dword_AC4D34 ) { v2 = (_DWORD *)this[3]; v8 = 0; v10 = 0; v3 = sub_91A530(v2, 0xBu, &v8, &v10) == 0; v4 = v8; if ( v3 ) v4 = *v1; (*(void (__stdcall **)(int, signed int, int, _DWORD))(*(_DWORD *)dword_BA6CD0 + 200))(*v1, 11, v4, 0); } v5 = v1[1]; v6 = 0; if ( v5 ) v6 = (*(int (__stdcall **)(int, char *, char *, int *))(**(_DWORD **)(dword_BA6CCC + 1728) + 8))(v5, &v10, &v9, &v7); (*(void (__stdcall **)(int, int))(*(_DWORD *)dword_BA6CD0 + 224))(*v1, v6); if ( v6 ) { if ( !v9 ) (*(void (__stdcall **)(int, signed int, _DWORD, _DWORD))(*(_DWORD *)dword_BA6CD0 + 208))(*v1, 6, 0, 0); sub_91ACB0(v1, v7); sub_91BA20(v1); } } // AC4D34: using guessed type int dword_AC4D34; // BA6CCC: using guessed type int dword_BA6CCC; // BA6CD0: using guessed type int dword_BA6CD0; //----- (0091BBB0) -------------------------------------------------------- _DWORD *__thiscall sub_91BBB0(void **this, unsigned int a2) { void **v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] _DWORD *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_91B8D0(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 96; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = v2[5]; v2[5] = result; return result; } //----- (0091BCA0) -------------------------------------------------------- void __thiscall sub_91BCA0(void **this) { void **v1; // esi void *v2; // ecx void *v3; // esi v1 = this; v2 = *this; if ( v2 ) sub_91B7E0(v2, 3); v3 = v1[2]; if ( v3 ) { sub_91BCA0(v3); operator delete(v3); } } //----- (0091BD30) -------------------------------------------------------- char __thiscall sub_91BD30(int this) { int *v1; // esi v1 = (int *)this; if ( sub_91A850(*(char **)(this + 12), *(_DWORD *)this) ) return 0; sub_91BAE0(v1); return 1; } //----- (0091BD60) -------------------------------------------------------- void __thiscall sub_91BD60(void *this) { _DWORD *v1; // esi int v2; // eax int v3; // edi int v4; // edi int v5; // eax _DWORD *v6; // [esp+Ch] [ebp-4h] v1 = this; if ( *((_BYTE *)this + 91) ) { v4 = *((_DWORD *)this + 1); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[1] = 0; } sub_91A6C0((_DWORD *)v1[3]); sub_91A6F0((_DWORD *)v1[3]); v5 = v1[5]; if ( v5 ) sub_931800(*(_DWORD *)(v5 + 8)); v1[5] = 0; *v1 = 0; v1[2] = 0; v1[4] = 0; *((_BYTE *)v1 + 90) = 0; v6 = v1; sub_91AA30((void **)dword_BA6CD4, &v6); } else { v2 = *((_DWORD *)this + 5); if ( v2 ) sub_931800(*(_DWORD *)(v2 + 8)); sub_91AB60((_BYTE *)v1[3]); v3 = v1[1]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } operator delete(v1); } } //----- (0091BE40) -------------------------------------------------------- _DWORD *__cdecl sub_91BE40(_DWORD *a1) { _DWORD *v1; // esi int **v2; // edi _DWORD *v3; // ebx int *v4; // eax int v5; // ecx _DWORD *result; // eax v1 = (char *)dword_BA6CD4 + 8; v2 = (int **)dword_BA6CD4; if ( !*((_DWORD *)dword_BA6CD4 + 2) ) { v3 = (char *)dword_BA6CD4 + 12; sub_91BBB0((void **)dword_BA6CD4, *((_DWORD *)dword_BA6CD4 + 3)); *v3 *= 2; } v4 = *v2; v5 = **v2; *v4 = v4[--*v1]; result = a1; *a1 = v5; if ( v5 ) { ++*(_DWORD *)(v5 + 92); *(_BYTE *)(v5 + 91) = 1; } else { MEMORY[0x5B] = 1; } return result; } //----- (0091BEA0) -------------------------------------------------------- void *__thiscall sub_91BEA0(void *this, char a2) { void *v2; // esi v2 = this; sub_91BED0((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0091BED0) -------------------------------------------------------- void __thiscall sub_91BED0(void **this) { void **v1; // esi void *v2; // esi v1 = this; operator delete(*this); v2 = v1[2]; if ( v2 ) { sub_91BED0(v2); operator delete(v2); } } //----- (0091BF00) -------------------------------------------------------- int __cdecl sub_91BF00(int a1) { int result; // eax result = a1; dword_BA6D18 = a1; if ( a1 ) { result = *(_DWORD *)(a1 + 1716); dword_BA6D1C = *(_DWORD *)(a1 + 1716); } else { dword_BA6D1C = 0; } return result; } // BA6D18: using guessed type int dword_BA6D18; // BA6D1C: using guessed type int dword_BA6D1C; //----- (0091BF30) -------------------------------------------------------- int __thiscall sub_91BF30(_DWORD *this) { _DWORD *v1; // edi _DWORD *i; // esi _DWORD *j; // esi v1 = this; for ( i = (_DWORD *)this[2]; i; i = (_DWORD *)i[2] ) (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_BA6D1C + 100))(*i, i[1], 0); for ( j = (_DWORD *)v1[4]; j; j = (_DWORD *)j[2] ) (*(void (__stdcall **)(_DWORD, _DWORD, signed int))(*(_DWORD *)dword_BA6D1C + 100))(*j, j[1], 1); return 0; } // BA6D1C: using guessed type int dword_BA6D1C; //----- (0091BF90) -------------------------------------------------------- int __thiscall sub_91BF90(_DWORD *this) { _DWORD *i; // esi for ( i = (_DWORD *)this[4]; i; i = (_DWORD *)i[2] ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_BA6D1C + 92))(*i); return 0; } // BA6D1C: using guessed type int dword_BA6D1C; //----- (0091BFC0) -------------------------------------------------------- int *__thiscall sub_91BFC0(int *this, unsigned int a2) { int *v2; // edi int v3; // ecx unsigned int *v4; // eax int v5; // ecx int v6; // edx int v7; // eax v2 = this; this[1] = a2; this[2] = 0; if ( !a2 ) { *this = 0; return this; } v3 = 20 * a2 | -(20 * (unsigned __int64)a2 >> 32 != 0); v4 = (unsigned int *)operator new((v3 + 4) | -__CFADD__(v3, 4)); if ( !v4 ) { v6 = 0; goto LABEL_7; } v5 = a2 - 1; v6 = (int)(v4 + 1); *v4 = a2; v7 = (int)(v4 + 1); if ( (signed int)(a2 - 1) < 0 ) { LABEL_7: *v2 = v6; return v2; } do { *(_BYTE *)v7 = 0; *(_DWORD *)(v7 + 4) = 0; *(_DWORD *)(v7 + 8) = 0; *(_DWORD *)(v7 + 12) = 0; *(_DWORD *)(v7 + 16) = 0; v7 += 20; --v5; } while ( v5 >= 0 ); *v2 = v6; return v2; } //----- (0091C050) -------------------------------------------------------- _DWORD *__thiscall sub_91C050(_DWORD *this, int a2) { char *v2; // esi _DWORD *v3; // ebx char *v4; // eax int v5; // edx _DWORD *v6; // ecx v2 = 0; v3 = this; this[1] = a2; this[2] = 0; if ( a2 ) { v4 = (char *)operator new(16 * a2); if ( v4 ) { v5 = a2 - 1; if ( a2 - 1 >= 0 ) { v6 = v4 + 8; do { *(v6 - 2) = 0; *(v6 - 1) = 0; *v6 = 0; v6[1] = 0; v6 += 4; --v5; } while ( v5 >= 0 ); } v2 = v4; } } *v3 = v2; return v3; } //----- (0091C0B0) -------------------------------------------------------- _DWORD *sub_91C0B0() { _DWORD *v0; // eax _DWORD *result; // eax v0 = operator new(0x18u); if ( v0 ) { *v0 = 0; v0[1] = 0; v0[2] = 0; v0[3] = 8; v0[4] = 8; v0[5] = 0; dword_BA6D20 = v0; } else { dword_BA6D20 = 0; } result = operator new(0x18u); if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[5] = 0; result[3] = 16; result[4] = 16; dword_BA6D24 = result; } else { dword_BA6D24 = 0; } return result; } //----- (0091C120) -------------------------------------------------------- char __thiscall sub_91C120(_DWORD *this, int a2, _DWORD *a3, _BYTE *a4) { _DWORD *v4; // eax _DWORD *v5; // eax char result; // al v4 = (_DWORD *)this[2]; if ( v4 ) { while ( *v4 != a2 ) { v4 = (_DWORD *)v4[2]; if ( !v4 ) goto LABEL_4; } *a4 = 0; *a3 = v4[1]; result = 1; } else { LABEL_4: v5 = (_DWORD *)this[4]; if ( v5 ) { while ( *v5 != a2 ) { v5 = (_DWORD *)v5[2]; if ( !v5 ) goto LABEL_7; } *a4 = 1; *a3 = v5[1]; result = 1; } else { LABEL_7: result = 0; } } return result; } //----- (0091C180) -------------------------------------------------------- int *__thiscall sub_91C180(void **this, unsigned int a2) { void **v2; // esi int *v3; // eax _DWORD *v4; // edi int *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] int *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = (int *)operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_91BFC0(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 20; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = (int)v2[5]; v2[5] = result; return result; } //----- (0091C270) -------------------------------------------------------- _DWORD *__thiscall sub_91C270(void **this, unsigned int a2) { void **v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] _DWORD *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_91C050(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 16; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = v2[5]; v2[5] = result; return result; } //----- (0091C360) -------------------------------------------------------- void sub_91C360() { void **v0; // edi _DWORD *v1; // esi void **v2; // edi int v3; // esi void *v4; // ecx v0 = (void **)dword_BA6D20; if ( dword_BA6D20 ) { v1 = (_DWORD *)*((_DWORD *)dword_BA6D20 + 5); *((_DWORD *)dword_BA6D20 + 2) = 0; if ( v1 ) { sub_91C8F0(v1); operator delete(v1); } operator delete(*v0); operator delete(v0); } v2 = (void **)dword_BA6D24; if ( dword_BA6D24 ) { v3 = *((_DWORD *)dword_BA6D24 + 5); *((_DWORD *)dword_BA6D24 + 2) = 0; if ( v3 ) { operator delete(*(void **)v3); v4 = *(void **)(v3 + 8); if ( v4 ) sub_91BEA0(v4, 1); operator delete((void *)v3); } operator delete(*v2); operator delete(v2); } } //----- (0091C3F0) -------------------------------------------------------- _DWORD *__thiscall sub_91C3F0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // ecx int v3; // edi unsigned int v4; // ebx unsigned int *v5; // esi unsigned int v6; // eax _DWORD *v7; // edx int v8; // eax int v9; // ebx _DWORD *v10; // edi unsigned int v11; // eax int v12; // edi unsigned int v13; // ebx unsigned int *v14; // esi unsigned int v15; // eax _DWORD *v16; // edx int v17; // eax int v18; // ebx _DWORD *v19; // edi unsigned int v20; // eax _DWORD *v21; // [esp+Ch] [ebp-14h] int v22; // [esp+10h] [ebp-10h] int v23; // [esp+10h] [ebp-10h] int *v24; // [esp+14h] [ebp-Ch] int *v25; // [esp+14h] [ebp-Ch] void **v26; // [esp+18h] [ebp-8h] void **v27; // [esp+18h] [ebp-8h] int v28; // [esp+1Ch] [ebp-4h] int v29; // [esp+1Ch] [ebp-4h] result = this; v2 = dword_BA6D24; v3 = result[2]; v21 = result; v28 = v3; if ( v3 ) { while ( 1 ) { v4 = v2[2]; v5 = v2 + 2; v22 = *(_DWORD *)(v3 + 8); v6 = 0; v26 = (void **)v2; if ( !v4 ) goto LABEL_10; v7 = (_DWORD *)*v2; while ( *v7 != v3 ) { ++v6; ++v7; if ( v6 >= v4 ) goto LABEL_10; } if ( v6 == -1 ) { LABEL_10: v8 = v2[1]; v24 = v2 + 1; if ( v4 == v8 ) { v9 = 2 * v8; if ( !v8 ) v9 = 1; if ( v9 != v8 ) { if ( v9 ) { v10 = operator new(4 * v9); v11 = 0; if ( *v5 ) { do { v10[v11] = *((_DWORD *)*v26 + v11); ++v11; } while ( v11 < *v5 ); } } else { v10 = 0; } operator delete(*v26); *v26 = v10; v3 = v28; *v24 = v9; } } *((_DWORD *)*v26 + (*v5)++) = v3; v2 = dword_BA6D24; } v28 = v22; if ( !v22 ) break; v3 = v22; } result = v21; } v12 = result[4]; v29 = v12; if ( v12 ) { while ( 1 ) { v13 = v2[2]; v14 = v2 + 2; v23 = *(_DWORD *)(v12 + 8); v15 = 0; v27 = (void **)v2; if ( !v13 ) goto LABEL_32; v16 = (_DWORD *)*v2; while ( *v16 != v12 ) { ++v15; ++v16; if ( v15 >= v13 ) goto LABEL_32; } if ( v15 == -1 ) { LABEL_32: v17 = v2[1]; v25 = v2 + 1; if ( v13 == v17 ) { v18 = 2 * v17; if ( !v17 ) v18 = 1; if ( v18 != v17 ) { if ( v18 ) { v19 = operator new(4 * v18); v20 = 0; if ( *v14 ) { do { v19[v20] = *((_DWORD *)*v27 + v20); ++v20; } while ( v20 < *v14 ); } } else { v19 = 0; } operator delete(*v27); *v27 = v19; v12 = v29; *v25 = v18; } } *((_DWORD *)*v27 + (*v14)++) = v12; v2 = dword_BA6D24; } v29 = v23; if ( !v23 ) break; v12 = v23; } result = v21; } result[4] = 0; result[2] = 0; return result; } //----- (0091C5E0) -------------------------------------------------------- _DWORD *__thiscall sub_91C5E0(_DWORD *this, int a2, int a3, char a4) { _DWORD *v4; // esi _DWORD *result; // eax int v6; // edx char v7; // cl _DWORD *v8; // edi _DWORD **v9; // ebx _DWORD *v10; // ST10_4 _DWORD *v11; // ecx int v12; // ecx int v13; // edi bool v14; // zf int v15; // ecx int v16; // ecx int v17; // ecx int v18; // ecx v4 = this; result = (_DWORD *)this[2]; if ( result ) { while ( 1 ) { v6 = a2; if ( *result == a2 ) break; result = (_DWORD *)result[2]; if ( !result ) goto LABEL_7; } v7 = 0; } else { v6 = a2; LABEL_7: result = (_DWORD *)this[4]; if ( !result ) { LABEL_10: v8 = (char *)dword_BA6D24 + 8; v9 = (_DWORD **)dword_BA6D24; if ( !*((_DWORD *)dword_BA6D24 + 2) ) { v10 = (char *)dword_BA6D24 + 12; sub_91C270((void **)dword_BA6D24, *((_DWORD *)dword_BA6D24 + 3)); v6 = a2; *v10 *= 2; } v11 = *v9; result = (_DWORD *)**v9; *v11 = v11[--*v8]; *result = v6; result[2] = 0; result[3] = 0; result[1] = a3; if ( a4 ) { v12 = v4[4]; if ( v12 ) { *(_DWORD *)(v12 + 12) = result; result[2] = v4[4]; } result[3] = 0; ++v4[3]; v4[4] = result; } else { v18 = v4[2]; if ( v18 ) { *(_DWORD *)(v18 + 12) = result; result[2] = v4[2]; } result[3] = 0; ++v4[1]; v4[2] = result; } return result; } while ( *result != v6 ) { result = (_DWORD *)result[2]; if ( !result ) goto LABEL_10; } v7 = 1; } result[1] = a3; if ( v7 != a4 ) { v13 = result[3]; v14 = v7 == 0; v15 = result[2]; if ( v14 ) { if ( v15 ) *(_DWORD *)(v15 + 12) = v13; if ( v13 ) *(_DWORD *)(v13 + 8) = v15; if ( result == (_DWORD *)v4[2] ) v4[2] = v15; --v4[1]; result[2] = 0; result[3] = 0; v17 = v4[4]; if ( v17 ) { *(_DWORD *)(v17 + 12) = result; result[2] = v4[4]; } result[3] = 0; ++v4[3]; v4[4] = result; } else { if ( v15 ) *(_DWORD *)(v15 + 12) = v13; if ( v13 ) *(_DWORD *)(v13 + 8) = v15; if ( result == (_DWORD *)v4[4] ) v4[4] = v15; --v4[3]; result[2] = 0; result[3] = 0; v16 = v4[2]; if ( v16 ) { *(_DWORD *)(v16 + 12) = result; result[2] = v4[2]; } result[3] = 0; ++v4[1]; v4[2] = result; } } return result; } //----- (0091C760) -------------------------------------------------------- _BYTE *sub_91C760() { _DWORD *v0; // esi _DWORD **v1; // edi _DWORD *v2; // ebx _DWORD *v3; // ecx _BYTE *result; // eax v0 = (char *)dword_BA6D20 + 8; v1 = (_DWORD **)dword_BA6D20; if ( !*((_DWORD *)dword_BA6D20 + 2) ) { v2 = (char *)dword_BA6D20 + 12; sub_91C180((void **)dword_BA6D20, *((_DWORD *)dword_BA6D20 + 3)); *v2 *= 2; } v3 = *v1; result = (_BYTE *)**v1; *v3 = v3[--*v0]; if ( !*result ) *result = 1; return result; } //----- (0091C7A0) -------------------------------------------------------- void __cdecl sub_91C7A0(void *a1) { _DWORD *v1; // esi int v2; // edi _DWORD *v3; // ecx unsigned int v4; // ebx _DWORD *v5; // esi unsigned int v6; // eax _DWORD *v7; // edx int v8; // eax void *v9; // eax int v10; // edi _DWORD *v11; // ecx unsigned int v12; // ebx _DWORD *v13; // esi unsigned int v14; // eax _DWORD *v15; // edx int v16; // eax void *v17; // eax _DWORD *v18; // [esp+4h] [ebp-8h] _DWORD *v19; // [esp+4h] [ebp-8h] int v20; // [esp+8h] [ebp-4h] int v21; // [esp+8h] [ebp-4h] v1 = a1; if ( a1 ) { if ( *(_BYTE *)a1 ) { v2 = *((_DWORD *)a1 + 2); if ( v2 ) { v3 = dword_BA6D24; do { v4 = v3[2]; v5 = v3 + 2; v20 = *(_DWORD *)(v2 + 8); v6 = 0; v18 = v3; if ( !v4 ) goto LABEL_11; v7 = (_DWORD *)*v3; while ( *v7 != v2 ) { ++v6; ++v7; if ( v6 >= v4 ) goto LABEL_11; } if ( v6 == -1 ) { LABEL_11: v8 = v3[1]; if ( v4 == v8 ) { if ( v8 ) v9 = (void *)(2 * v8); else v9 = (void *)1; sub_811D30((void **)v3, v9); } *(_DWORD *)(*v18 + 4 * (*v5)++) = v2; v3 = dword_BA6D24; } v2 = v20; } while ( v20 ); v1 = a1; } v10 = v1[4]; v1[2] = 0; v1[1] = 0; if ( v10 ) { v11 = dword_BA6D24; do { v12 = v11[2]; v13 = v11 + 2; v14 = 0; v21 = *(_DWORD *)(v10 + 8); v19 = v11; if ( !v12 ) goto LABEL_27; v15 = (_DWORD *)*v11; while ( *v15 != v10 ) { ++v14; ++v15; if ( v14 >= v12 ) goto LABEL_27; } if ( v14 == -1 ) { LABEL_27: v16 = v11[1]; if ( v12 == v16 ) { if ( v16 ) v17 = (void *)(2 * v16); else v17 = (void *)1; sub_811D30((void **)v11, v17); } *(_DWORD *)(*v19 + 4 * (*v13)++) = v10; v11 = dword_BA6D24; } v10 = v21; } while ( v21 ); v1 = a1; } v1[4] = 0; v1[3] = 0; a1 = v1; sub_91AA30((void **)dword_BA6D20, &a1); } else { sub_91C3F0(a1); operator delete(v1); } } } //----- (0091C8F0) -------------------------------------------------------- void __fastcall sub_91C8F0(_DWORD *a1) { int v1; // eax int v2; // esi void *v3; // ebx int v4; // ecx int v5; // esi _DWORD *i; // edi void *v7; // esi _DWORD *v8; // [esp+4h] [ebp-4h] v1 = *a1; v8 = a1; if ( *a1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = 5 * v2; v5 = v2 - 1; for ( i = (_DWORD *)(v1 + 4 * v4); v5 >= 0; --v5 ) { i -= 5; sub_91C3F0(i); } operator delete(v3); a1 = v8; } v7 = (void *)a1[2]; if ( v7 ) { sub_91C8F0(a1[2]); operator delete(v7); } } //----- (0091C950) -------------------------------------------------------- int sub_91C950() { return dword_BA6D2C; } // BA6D2C: using guessed type int dword_BA6D2C; //----- (0091C960) -------------------------------------------------------- int __thiscall sub_91C960(_DWORD *this, int a2) { _DWORD *v2; // ecx v2 = (_DWORD *)this[14]; if ( v2 ) sub_91BF90(v2); return 0; } //----- (0091C980) -------------------------------------------------------- bool __thiscall sub_91C980(_DWORD *this, int a2, int a3) { int v3; // eax bool result; // al v3 = this[5]; if ( dword_AC4D34 < (unsigned int)(v3 + a2) || dword_AC4D38 < (unsigned int)(a3 + this[7]) ) result = 0; else result = dword_AC4D38 >= (unsigned int)(a3 + v3); return result; } // AC4D34: using guessed type int dword_AC4D34; // AC4D38: using guessed type int dword_AC4D38; //----- (0091C9C0) -------------------------------------------------------- int __cdecl sub_91C9C0(int a1) { int result; // eax result = a1; dword_AC4D34 = a1; return result; } // AC4D34: using guessed type int dword_AC4D34; //----- (0091C9D0) -------------------------------------------------------- int __cdecl sub_91C9D0(int a1) { int result; // eax result = a1; dword_AC4D38 = a1; return result; } // AC4D38: using guessed type int dword_AC4D38; //----- (0091C9E0) -------------------------------------------------------- int __cdecl sub_91C9E0(int a1) { int result; // eax result = a1; dword_AC4D3C = a1; return result; } // AC4D3C: using guessed type int dword_AC4D3C; //----- (0091C9F0) -------------------------------------------------------- void __thiscall sub_91C9F0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[16]); v2[16] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[16] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CA70) -------------------------------------------------------- void __thiscall sub_91CA70(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[17]); v2[17] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[17] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CAF0) -------------------------------------------------------- void __thiscall sub_91CAF0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[18]); v2[18] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[18] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CB70) -------------------------------------------------------- void __thiscall sub_91CB70(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[21]); v2[21] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[21] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CBF0) -------------------------------------------------------- void __thiscall sub_91CBF0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[22]); v2[22] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[22] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CC70) -------------------------------------------------------- void __thiscall sub_91CC70(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[23]); v2[23] = 0; if ( Src ) { if ( strcmp(Src, &byte_9A8050) ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[23] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0091CCF0) -------------------------------------------------------- int __thiscall sub_91CCF0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD *v9; // edi int v10; // ecx int v11; // esi unsigned __int8 v12; // al _DWORD *v13; // ecx unsigned int v14; // ebx unsigned int v15; // esi int v16; // ecx int v18; // [esp+8h] [ebp-4h] v9 = this; v10 = this[24]; v18 = 0; if ( v10 ) { v11 = *(_DWORD *)dword_BA6D30; v12 = (*(int (**)(void))(*(_DWORD *)v10 + 80))(); (*(void (__thiscall **)(int, _DWORD))(v11 + 236))(dword_BA6D30, v12); } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_BA6D30 + 236))(*((unsigned __int8 *)v9 + 100)); } v13 = (_DWORD *)v9[14]; if ( v13 ) sub_91BF30(v13); v14 = v9[11]; v15 = 0; if ( v14 ) { do { v16 = *(_DWORD *)(v9[9] + 4 * v15); if ( !v16 ) break; ++v15; v18 = (unsigned __int8)sub_91BD30(v16); } while ( v15 < v14 ); } if ( v15 < dword_AC4D3C ) sub_91AD60(v15); return v18; } // AC4D3C: using guessed type int dword_AC4D3C; // BA6D30: using guessed type int dword_BA6D30; //----- (0091CD90) -------------------------------------------------------- int __cdecl sub_91CD90(int a1) { int v1; // esi int result; // eax dword_BA6D2C = a1; if ( a1 ) { v1 = *(_DWORD *)(a1 + 132); if ( dword_BA6D28 ) (*(void (__stdcall **)(int))(*(_DWORD *)dword_BA6D28 + 8))(dword_BA6D28); dword_BA6D28 = v1; if ( v1 ) (*(void (__stdcall **)(int))(*(_DWORD *)v1 + 4))(v1); result = *(_DWORD *)(dword_BA6D2C + 1716); dword_BA6D30 = *(_DWORD *)(dword_BA6D2C + 1716); } else { result = dword_BA6D28; if ( dword_BA6D28 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA6D28 + 8))(dword_BA6D28); dword_BA6D28 = 0; dword_BA6D30 = 0; } return result; } // BA6D28: using guessed type int dword_BA6D28; // BA6D2C: using guessed type int dword_BA6D2C; // BA6D30: using guessed type int dword_BA6D30; //----- (0091CE10) -------------------------------------------------------- _DWORD *sub_91CE10() { _DWORD *result; // eax result = operator new(0x18u); if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 8; result[4] = 8; result[5] = 0; dword_BA6D34 = result; } else { dword_BA6D34 = 0; } return result; } //----- (0091CE50) -------------------------------------------------------- int __thiscall sub_91CE50(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int v10; // esi _DWORD *v11; // edi int v12; // ecx int v13; // ebx int v14; // eax int v15; // ecx int v16; // ecx int v17; // ebx int v18; // eax int v19; // ecx unsigned int v20; // esi signed int v21; // ebx int v22; // eax _DWORD *v23; // eax int v25; // eax int v26; // edx v10 = a5; v11 = this; v12 = this[19]; if ( v12 ) { v13 = *(_DWORD *)dword_BA6D30; v14 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v12 + 56))(0); (*(void (__thiscall **)(int, int))(v13 + 120))(dword_BA6D30, v14); v15 = v11[15]; if ( v15 ) (*(void (__stdcall **)(_DWORD, int, int, int, int, int, int, int, int, int, _DWORD))(*(_DWORD *)v15 + 44))( v11[19], a2, a3, a4, v10, a6, a7, a8, a9, a10, 0); } else { (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_BA6D30 + 120))(0, 0); } v16 = v11[24]; if ( !v16 ) { (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_BA6D30 + 136))(0, 0); if ( !v10 ) { if ( a4 ) v10 = *(_DWORD *)(a4 + 40); else v10 = *(_DWORD *)(*(_DWORD *)(a2 + 184) + 60); } v25 = *(_DWORD *)(v10 + 8); v26 = *(_DWORD *)dword_BA6D30; if ( v25 ) { (*(void (__stdcall **)(int, _DWORD))(v26 + 152))(v25, 0); return 0; } (*(void (__stdcall **)(_DWORD, _DWORD))(v26 + 168))(*(_DWORD *)(v10 + 12), 0); return 0; } v17 = *(_DWORD *)dword_BA6D30; v18 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v16 + 64))(0); (*(void (__thiscall **)(int, int))(v17 + 136))(dword_BA6D30, v18); v19 = v11[20]; if ( v19 ) (*(void (__stdcall **)(_DWORD, int, int, int, int, int, int, int, int, int, _DWORD))(*(_DWORD *)v19 + 44))( v11[24], a2, a3, a4, v10, a6, a7, a8, a9, a10, 0); v20 = 0; if ( !dword_AC4D34 ) return 0; do { (*(void (__stdcall **)(unsigned int, signed int, unsigned int, _DWORD))(*(_DWORD *)dword_BA6D30 + 200))( v20, 11, v20, 0); v21 = 0; if ( v20 < v11[6] ) { v22 = *(_DWORD *)(v11[9] + 4 * v20); if ( v22 ) { v23 = *(_DWORD **)(v22 + 12); if ( v23 ) { a2 = 0; HIBYTE(a4) = 0; if ( sub_91A530(v23, 0x18u, &a2, (_BYTE *)&a4 + 3) ) { if ( a2 & 0x100 ) v21 = 256; } } } } (*(void (__stdcall **)(unsigned int, signed int, signed int, _DWORD))(*(_DWORD *)dword_BA6D30 + 200))( v20++, 24, v21, 0); } while ( v20 < dword_AC4D34 ); return 0; } // AC4D34: using guessed type int dword_AC4D34; // BA6D30: using guessed type int dword_BA6D30; //----- (0091D020) -------------------------------------------------------- _DWORD *__thiscall sub_91D020(_DWORD *this, unsigned int a2, int a3) { _DWORD *v3; // ebx int v4; // ecx unsigned int *v5; // eax void *v6; // edx _DWORD *result; // eax v3 = this; *this = &NiTArray>::`vftable'; this[2] = a2; this[5] = a3; this[3] = 0; this[4] = 0; if ( a2 ) { v4 = 4 * a2 | -((unsigned __int64)a2 >> 30 != 0); v5 = (unsigned int *)operator new((v4 + 4) | -__CFADD__(v4, 4)); if ( v5 ) { *v5 = a2; v6 = v5 + 1; if ( (signed int)(a2 - 1) >= 0 ) { memset(v6, 0, 4 * a2); v3[1] = v6; return v3; } } else { v6 = 0; } v3[1] = v6; result = v3; } else { this[1] = 0; result = this; } return result; } // A442D4: using guessed type void *NiTArray>::`vftable'; //----- (0091D0B0) -------------------------------------------------------- _DWORD *__thiscall sub_91D0B0(_DWORD *this, unsigned int a2, _DWORD *a3) { _DWORD *result; // eax int v4; // edx _DWORD **v5; // esi _DWORD *v6; // ecx bool v7; // zf result = (_DWORD *)a2; if ( a2 < this[2] ) { if ( a2 < this[3] ) { v4 = this[1]; if ( *a3 ) { if ( *(_DWORD *)(v4 + 4 * a2) == 0 ) ++this[4]; } else if ( *(_DWORD *)(v4 + 4 * a2) != 0 ) { --this[4]; } } else { this[3] = a2 + 1; if ( *a3 ) ++this[4]; } v5 = (_DWORD **)(this[1] + 4 * a2); v6 = *v5; if ( *v5 != (_DWORD *)*a3 ) { if ( v6 ) { v7 = v6[23]-- == 1; if ( v7 ) sub_91BD60(v6); } result = (_DWORD *)*a3; *v5 = (_DWORD *)*a3; if ( result ) ++result[23]; } } return result; } //----- (0091D130) -------------------------------------------------------- int __thiscall sub_91D130(_DWORD *this) { _DWORD *v1; // esi int result; // eax unsigned int v3; // ebx _DWORD **v4; // edi _DWORD *v5; // ecx bool v6; // zf v1 = this; result = 0; v3 = 0; if ( this[3] ) { do { v4 = (_DWORD **)(v1[1] + 4 * v3); v5 = *v4; if ( *v4 ) { v6 = v5[23]-- == 1; if ( v6 ) { sub_91BD60(v5); result = 0; } *v4 = 0; } ++v3; } while ( v3 < v1[3] ); } v1[4] = 0; v1[3] = 0; return result; } //----- (0091D170) -------------------------------------------------------- void __thiscall sub_91D170(_DWORD *this, unsigned int a2) { unsigned int v2; // ebx _DWORD *v3; // esi unsigned int v4; // edx _DWORD **v5; // edi _DWORD *v6; // ecx bool v7; // zf int v8; // eax int v9; // ecx unsigned int *v10; // eax int v11; // ebx void *v12; // edx unsigned int v13; // eax int v14; // edi int v15; // ebx _DWORD *v16; // ecx _DWORD *v17; // edi int v18; // ebx unsigned int i; // edi int v20; // edx _DWORD *v21; // ecx _DWORD *v22; // ebx int v23; // edi void *v24; // ebx int v25; // esi int j; // edi _DWORD *v27; // ecx int v28; // [esp+8h] [ebp-4h] int v29; // [esp+14h] [ebp+8h] v2 = a2; v3 = this; if ( a2 != this[2] ) { if ( a2 < this[3] ) { v4 = a2; do { v5 = (_DWORD **)(v3[1] + 4 * v4); if ( *v5 != 0 ) { v6 = *v5; if ( *v5 ) { v7 = v6[23]-- == 1; if ( v7 ) { sub_91BD60(v6); v4 = a2; } *v5 = 0; } --v3[4]; } a2 = ++v4; } while ( v4 < v3[3] ); v3[3] = v2; } v8 = v3[1]; v28 = v3[1]; v3[2] = v2; if ( v2 ) { v9 = 4 * v2 | -((unsigned __int64)v2 >> 30 != 0); v10 = (unsigned int *)operator new((v9 + 4) | -__CFADD__(v9, 4)); if ( v10 ) { *v10 = v2; v11 = v2 - 1; v12 = v10 + 1; if ( v11 >= 0 ) memset(v12, 0, 4 * (v11 + 1)); } else { v12 = 0; } v13 = 0; v3[1] = v12; v29 = 0; if ( v3[3] ) { do { v14 = v3[1]; v15 = 4 * v13; v16 = *(_DWORD **)(v14 + 4 * v13); v17 = (_DWORD *)(4 * v13 + v14); if ( v16 != *(_DWORD **)(4 * v13 + v28) ) { if ( v16 ) { v7 = v16[23]-- == 1; if ( v7 ) { sub_91BD60(v16); v13 = v29; } } v18 = *(_DWORD *)(v15 + v28); *v17 = v18; if ( v18 ) ++*(_DWORD *)(v18 + 92); } v29 = ++v13; } while ( v13 < v3[3] ); } for ( i = v3[3]; i < v3[2]; ++i ) { v20 = v3[1]; v21 = *(_DWORD **)(v20 + 4 * i); v22 = (_DWORD *)(v20 + 4 * i); if ( v21 ) { v7 = v21[23]-- == 1; if ( v7 ) sub_91BD60(v21); *v22 = 0; } } v8 = v28; } else { v3[1] = 0; } if ( v8 ) { v23 = *(_DWORD *)(v8 - 4); v24 = (void *)(v8 - 4); v25 = v8 + 4 * v23; for ( j = v23 - 1; j >= 0; --j ) { v27 = *(_DWORD **)(v25 - 4); v25 -= 4; if ( v27 ) { v7 = v27[23]-- == 1; if ( v7 ) sub_91BD60(v27); } } operator delete(v24); } } } //----- (0091D2F0) -------------------------------------------------------- void __thiscall sub_91D2F0(_DWORD *this) { int v1; // eax int v2; // edi void *v3; // ebx int v4; // esi int i; // edi _DWORD *v6; // ecx bool v7; // zf v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; for ( i = v2 - 1; i >= 0; --i ) { v6 = *(_DWORD **)(v4 - 4); v4 -= 4; if ( v6 ) { v7 = v6[23]-- == 1; if ( v7 ) sub_91BD60(v6); } } operator delete(v3); } } // A442D4: using guessed type void *NiTArray>::`vftable'; //----- (0091D340) -------------------------------------------------------- void *__thiscall sub_91D340(void *this, char a2) { void *v2; // esi v2 = this; sub_91D2F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0091D370) -------------------------------------------------------- _DWORD *__thiscall sub_91D370(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiD3DPass::`vftable'; this[5] = 0; this[6] = 0; this[7] = 0; sub_91D020(this + 8, dword_AC4D34, 4); v1[14] = 0; v1[15] = 0; v1[16] = 0; v1[17] = 0; v1[18] = 0; v1[19] = 0; v1[20] = 0; v1[21] = 0; v1[22] = 0; v1[23] = 0; v1[24] = 0; *((_WORD *)v1 + 50) = 0; v1[26] = 0; *((_BYTE *)v1 + 4) = 0; return v1; } // A442DC: using guessed type void *NiD3DPass::`vftable'; // AC4D34: using guessed type int dword_AC4D34; //----- (0091D3D0) -------------------------------------------------------- void sub_91D3D0() { void *v0; // esi v0 = dword_BA6D34; if ( dword_BA6D34 ) { sub_8B6100((void **)dword_BA6D34); operator delete(v0); } dword_BA6D34 = 0; } //----- (0091D400) -------------------------------------------------------- _DWORD *__thiscall sub_91D400(_DWORD *this, unsigned int a2) { unsigned int v2; // esi _DWORD *v3; // ebx _DWORD *v4; // edi int v5; // ecx unsigned int *v6; // eax _DWORD *v7; // eax int v8; // esi unsigned int v9; // edi int v10; // ecx unsigned int *v11; // eax int v12; // ST24_4 bool v13; // sf _DWORD *v15; // [esp+Ch] [ebp-10h] _DWORD *v16; // [esp+10h] [ebp-Ch] int v17; // [esp+18h] [ebp-4h] _DWORD *v18; // [esp+24h] [ebp+8h] v2 = a2; v3 = 0; v4 = this; v16 = this; this[1] = a2; this[2] = 0; if ( a2 ) { v5 = 108 * a2 | -(108 * (unsigned __int64)a2 >> 32 != 0); v6 = (unsigned int *)operator new((v5 + 4) | -__CFADD__(v5, 4)); if ( v6 ) { *v6 = a2; v7 = v6 + 1; v15 = v7; v18 = v7; v17 = v2 - 1; if ( (signed int)(v2 - 1) >= 0 ) { v8 = (int)(v7 + 13); do { *v7 = &NiD3DPass::`vftable'; *(_DWORD *)(v8 - 32) = 0; *(_DWORD *)(v8 - 28) = 0; *(_DWORD *)(v8 - 24) = 0; v9 = dword_AC4D34; *(_DWORD *)(v8 - 20) = &NiTArray>::`vftable'; *(_DWORD *)(v8 - 12) = v9; *(_DWORD *)v8 = 4; *(_DWORD *)(v8 - 8) = 0; *(_DWORD *)(v8 - 4) = 0; if ( v9 <= 0 ) { *(_DWORD *)(v8 - 16) = 0; } else { v10 = 4 * v9 | -((unsigned __int64)v9 >> 30 != 0); v11 = (unsigned int *)operator new((v10 + 4) | -__CFADD__(v10, 4)); if ( v11 ) { *v11 = v9; v12 = (int)(v11 + 1); sub_4218D0( (int)(v11 + 1), 4, v9, (int (__thiscall *)(int))Concurrency::details::_NonReentrantLock::_Release); *(_DWORD *)(v8 - 16) = v12; } else { *(_DWORD *)(v8 - 16) = 0; } v7 = v18; } *(_DWORD *)(v8 + 4) = 0; *(_DWORD *)(v8 + 8) = 0; *(_DWORD *)(v8 + 12) = 0; *(_DWORD *)(v8 + 16) = 0; *(_DWORD *)(v8 + 20) = 0; *(_DWORD *)(v8 + 24) = 0; *(_DWORD *)(v8 + 28) = 0; *(_DWORD *)(v8 + 32) = 0; *(_DWORD *)(v8 + 36) = 0; *(_DWORD *)(v8 + 40) = 0; *(_DWORD *)(v8 + 44) = 0; *(_WORD *)(v8 + 48) = 0; *(_DWORD *)(v8 + 52) = 0; *(_BYTE *)(v8 - 48) = 0; v7 += 27; v8 += 108; v13 = v17-- - 1 < 0; v18 = v7; } while ( !v13 ); v4 = v16; v7 = v15; } v3 = v7; } } *v4 = v3; return v4; } // A442D4: using guessed type void *NiTArray>::`vftable'; // A442DC: using guessed type void *NiD3DPass::`vftable'; // AC4D34: using guessed type int dword_AC4D34; //----- (0091D550) -------------------------------------------------------- void __thiscall sub_91D550(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST08_4 int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi int v10; // esi _DWORD *v11; // [esp+Ch] [ebp-4h] v1 = this; v2 = (void *)this[14]; *this = &NiD3DPass::`vftable'; sub_91C7A0(v2); v3 = v1[15]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[15] = 0; } operator delete((void *)v1[16]); operator delete((void *)v1[17]); operator delete((void *)v1[18]); v4 = v1[19]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[19] = 0; } v5 = v1[20]; if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[20] = 0; } operator delete((void *)v1[21]); operator delete((void *)v1[22]); operator delete((void *)v1[23]); v6 = v1[24]; if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v1[24] = 0; } v11 = v1 + 8; sub_91D130(v1 + 8); v1[5] = 0; v1[6] = 0; v1[7] = 0; v7 = v1[24]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[20]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[19]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v10 = v1[15]; if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); sub_91D2F0(v11); } // A442DC: using guessed type void *NiD3DPass::`vftable'; //----- (0091D6F0) -------------------------------------------------------- char *__thiscall sub_91D6F0(_BYTE *this) { int v1; // esi int v3; // edi int v4; // edi int v5; // edi int v6; // edi void *v7; // ST14_4 void *v8; // ST10_4 void *v9; // ST0C_4 void *v10; // ST08_4 void *v11; // ST04_4 void *v12; // ST00_4 int v13; // [esp+8h] [ebp-4h] v1 = (int)this; if ( !this[101] ) return (char *)(**(int (__stdcall ***)(signed int))this)(1); v3 = *((_DWORD *)this + 15); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); *(_DWORD *)(v1 + 60) = 0; } v4 = *(_DWORD *)(v1 + 76); if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *(_DWORD *)(v1 + 76) = 0; } v5 = *(_DWORD *)(v1 + 80); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v1 + 80) = 0; } v6 = *(_DWORD *)(v1 + 96); if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } *(_DWORD *)(v1 + 96) = 0; } sub_91C7A0(*(void **)(v1 + 56)); v7 = *(void **)(v1 + 64); *(_DWORD *)(v1 + 56) = 0; operator delete(v7); v8 = *(void **)(v1 + 68); *(_DWORD *)(v1 + 64) = 0; operator delete(v8); v9 = *(void **)(v1 + 72); *(_DWORD *)(v1 + 68) = 0; operator delete(v9); v10 = *(void **)(v1 + 84); *(_DWORD *)(v1 + 72) = 0; operator delete(v10); v11 = *(void **)(v1 + 88); *(_DWORD *)(v1 + 84) = 0; operator delete(v11); v12 = *(void **)(v1 + 92); *(_DWORD *)(v1 + 88) = 0; operator delete(v12); *(_DWORD *)(v1 + 92) = 0; sub_91D130((_DWORD *)(v1 + 32)); *(_DWORD *)(v1 + 20) = 0; *(_DWORD *)(v1 + 24) = 0; *(_DWORD *)(v1 + 28) = 0; *(_BYTE *)(v1 + 100) = 0; v13 = v1; return sub_91AA30((void **)dword_BA6D34, &v13); } //----- (0091D830) -------------------------------------------------------- int __thiscall sub_91D830(_DWORD *this, int a2, void *a3) { _DWORD *v3; // edi int result; // eax _DWORD *v5; // esi _DWORD *v6; // ecx int v7; // eax int v8; // esi bool v9; // zf bool v10; // bl v3 = this; if ( a2 >= (unsigned int)dword_AC4D3C ) return 1; v5 = a3; if ( a2 < (unsigned int)dword_AC4D34 ) { if ( a3 ) ++*((_DWORD *)a3 + 23); sub_91D0B0(this + 8, a2, &a3); } else { if ( a3 ) ++*((_DWORD *)a3 + 23); v6 = this + 8; if ( (unsigned int)a2 >= v3[10] ) sub_91D170(v6, a2 + v3[13]); sub_91D0B0(v3 + 8, a2, &a3); } if ( v5 ) { v9 = v5[23]-- == 1; if ( v9 ) sub_91BD60(v5); *v5 = a2; v7 = v3[5]; if ( v7 == a2 ) v3[5] = v7 + 1; ++v3[6]; v8 = v5[1]; v9 = v8 == 0; if ( v8 ) { InterlockedIncrement((volatile LONG *)(v8 + 4)); v9 = v8 == 0; } v10 = !v9; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); } if ( v10 ) { ++v3[7]; return 0; } } else { result = v3[5]; if ( result == a2 + 1 && result ) { while ( *(_DWORD *)(v3[9] + 4 * result - 4) ) { if ( !result ) return result; } v3[5] = result - 1; } } return 0; } // AC4D34: using guessed type int dword_AC4D34; // AC4D3C: using guessed type int dword_AC4D3C; //----- (0091D930) -------------------------------------------------------- _DWORD *__thiscall sub_91D930(void **this, unsigned int a2) { void **v2; // esi _DWORD *v3; // eax _DWORD *v4; // edi _DWORD *result; // eax unsigned int v6; // edx unsigned int v7; // ecx unsigned int v8; // ebx unsigned int v9; // eax unsigned int v10; // [esp+8h] [ebp-10h] int v11; // [esp+Ch] [ebp-Ch] int v12; // [esp+10h] [ebp-8h] _DWORD *v13; // [esp+14h] [ebp-4h] v2 = this; v3 = operator new(0xCu); v4 = 0; if ( v3 ) { result = sub_91D400(v3, a2); v13 = result; } else { v13 = 0; result = 0; } v6 = 0; v10 = 0; if ( a2 > 0 ) { v12 = 0; while ( 1 ) { if ( v6 < result[1] ) v11 = v12 + *result; else v11 = 0; v7 = (unsigned int)v2[1]; if ( v2[2] == (void *)v7 ) { v8 = 2 * v7; if ( v7 <= 0 ) v8 = 1; if ( v8 != v7 ) { if ( v8 > 0 ) { v4 = operator new(4 * v8); v9 = 0; if ( v2[2] ) { do { v4[v9] = *((_DWORD *)*v2 + v9); ++v9; } while ( v9 < (unsigned int)v2[2] ); } } operator delete(*v2); v6 = v10; result = v13; *v2 = v4; v2[1] = (void *)v8; } } v12 += 108; ++v6; *((_DWORD *)*v2 + (_DWORD)v2[2]) = v11; v2[2] = (char *)v2[2] + 1; v10 = v6; if ( v6 >= a2 ) break; v4 = 0; } } result[2] = v2[5]; v2[5] = result; return result; } //----- (0091DA20) -------------------------------------------------------- char *__thiscall sub_91DA20(void *this, char a2) { char *v2; // ebx char *result; // eax _DWORD *v4; // esi int v5; // edi char *v6; // [esp+4h] [ebp-4h] v2 = (char *)this; if ( a2 & 2 ) { result = (char *)this - 4; v4 = (char *)this + 108 * *((_DWORD *)this - 1); v5 = *((_DWORD *)this - 1) - 1; v6 = (char *)this - 4; if ( v5 >= 0 ) { do { v4 -= 27; sub_91D550(v4); --v5; } while ( v5 >= 0 ); result = v6; } if ( a2 & 1 ) { operator delete(result); result = v6; } } else { sub_91D550(this); if ( a2 & 1 ) operator delete(v2); result = v2; } return result; } //----- (0091DA90) -------------------------------------------------------- _DWORD *__cdecl sub_91DA90(_DWORD *a1) { _DWORD *v1; // esi int **v2; // edi _DWORD *v3; // ebx int *v4; // eax int v5; // ecx _DWORD *result; // eax v1 = (char *)dword_BA6D34 + 8; v2 = (int **)dword_BA6D34; if ( !*((_DWORD *)dword_BA6D34 + 2) ) { v3 = (char *)dword_BA6D34 + 12; sub_91D930((void **)dword_BA6D34, *((_DWORD *)dword_BA6D34 + 3)); *v3 *= 2; } v4 = *v2; v5 = **v2; *v4 = v4[--*v1]; result = a1; *a1 = v5; if ( v5 ) ++*(_DWORD *)(v5 + 104); if ( !*(_BYTE *)(v5 + 101) ) *(_BYTE *)(v5 + 101) = 1; return result; } //----- (0091DAF0) -------------------------------------------------------- char __thiscall sub_91DAF0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; if ( !a2 ) return 0; sub_91F1E0(this, a2); result = 1; *((_BYTE *)v2 + 28) = 1; return result; } //----- (0091DB20) -------------------------------------------------------- int __thiscall sub_91DB20(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // ecx v8 = (_DWORD *)this[10]; if ( v8 ) sub_91BF90(v8); return 0; } //----- (0091DB40) -------------------------------------------------------- _DWORD *sub_91DB40() { _DWORD *result; // eax sub_91CE10(); result = operator new(0x18u); if ( result ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 8; result[4] = 8; result[5] = 0; dword_BA6CD4 = result; } else { dword_BA6CD4 = 0; } return result; } //----- (0091DB50) -------------------------------------------------------- void sub_91DB50() { void **v0; // edi int v1; // esi void *v2; // ecx sub_91D3D0(); v0 = (void **)dword_BA6CD4; if ( dword_BA6CD4 ) { v1 = *((_DWORD *)dword_BA6CD4 + 5); *((_DWORD *)dword_BA6CD4 + 2) = 0; if ( v1 ) { if ( *(_DWORD *)v1 ) sub_91B7E0(*(void **)v1, 3); v2 = *(void **)(v1 + 8); if ( v2 ) sub_91AE00(v2, 1); operator delete((void *)v1); } operator delete(*v0); operator delete(v0); } dword_BA6CD4 = 0; } //----- (0091DB60) -------------------------------------------------------- int __thiscall sub_91DB60(_DWORD *this, unsigned int a2) { int result; // eax if ( a2 >= this[7] ) result = 0; else result = *(_DWORD *)(this[9] + 4 * a2); return result; } //----- (0091DB80) -------------------------------------------------------- int __thiscall sub_91DB80(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int *v3; // edi bool v4; // zf int v5; // eax v1 = this; this[13] = 0; v2 = this[15]; v3 = (int *)v1[17]; if ( v2 != *v3 ) { if ( v2 ) { v4 = (*(_DWORD *)(v2 + 104))-- == 1; if ( v4 ) sub_91D6F0((_BYTE *)v2); } v5 = *v3; v1[15] = *v3; if ( v5 ) ++*(_DWORD *)(v5 + 104); } return v1[14]; } //----- (0091DBC0) -------------------------------------------------------- int __thiscall sub_91DBC0(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // eax int *v5; // edi int v6; // ecx bool v7; // zf int v8; // eax v1 = this; v2 = this[15]; if ( v2 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 12))(v1[13]); v3 = ++v1[13]; if ( v3 == v1[14] ) return 0; v5 = (int *)(v1[17] + 4 * v3); v6 = v1[15]; if ( v6 != *v5 ) { if ( v6 ) { v7 = (*(_DWORD *)(v6 + 104))-- == 1; if ( v7 ) sub_91D6F0((_BYTE *)v6); } v8 = *v5; v1[15] = *v5; if ( v8 ) ++*(_DWORD *)(v8 + 104); } return v1[14] - v1[13]; } //----- (0091DC20) -------------------------------------------------------- int __thiscall sub_91DC20(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return (*(int (__stdcall **)(int, int, int, int, int, int, int, _DWORD))(*this[15] + 8))( a2, a3, a4, a5, a6, a7, a8, 0); } //----- (0091DC50) -------------------------------------------------------- int __thiscall sub_91DC50(int this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9) { int v9; // esi int result; // eax v9 = this; if ( a4 ) { if ( !*(_DWORD *)(this + 52) ) sub_925370(*(_DWORD **)(this + 20), a3, *(float *)&a8, 0, 4, 0); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(*(unsigned __int16 *)(a4 + 36)); sub_9252E0(*(_DWORD ***)(v9 + 20), (int)a3, a4, (int)a8); result = 0; } else { if ( !*(_DWORD *)(this + 52) || *(_BYTE *)(*(_DWORD *)(this + 20) + 129) ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(this + 24) + 48))(0); sub_9251F0(*(char **)(v9 + 20), a8, 1); } result = 0; } return result; } //----- (0091DCE0) -------------------------------------------------------- float *__cdecl sub_91DCE0(float *a1, float *a2, int a3, char a4, float *a5) { _DWORD *v5; // ecx float *v6; // ecx float *result; // eax sub_91A460(*(_DWORD **)(a3 + 12), 0xBu, 0x20000, a4); v5 = *(_DWORD **)(a3 + 12); *(_BYTE *)(a3 + 90) = 1; sub_91A460(v5, 0x18u, 2, a4); v6 = a1; result = a5; *(float *)(a3 + 24) = a1[1] * a5[517] + a5[516] * *a1 + a5[518] * a1[2]; *(float *)(a3 + 40) = *v6 * result[520] + v6[1] * result[521] + v6[2] * result[522]; *(float *)(a3 + 56) = *v6 * result[524] + v6[1] * result[525] + v6[2] * result[526]; *(float *)(a3 + 28) = v6[4] * result[517] + result[516] * v6[3] + result[518] * v6[5]; *(float *)(a3 + 44) = v6[4] * result[521] + v6[3] * result[520] + result[522] * v6[5]; *(float *)(a3 + 60) = v6[4] * result[525] + v6[3] * result[524] + result[526] * v6[5]; *(float *)(a3 + 32) = result[516] * v6[6] + v6[7] * result[517] + v6[8] * result[518]; *(float *)(a3 + 48) = result[521] * v6[7] + v6[6] * result[520] + v6[8] * result[522]; *(float *)(a3 + 64) = result[525] * v6[7] + v6[6] * result[524] + v6[8] * result[526]; *(float *)(a3 + 72) = *v6 * result[528] + v6[1] * result[529] + v6[2] * result[530] + *a2; *(float *)(a3 + 76) = v6[4] * result[529] + result[528] * v6[3] + v6[5] * result[530] + a2[1]; *(float *)(a3 + 80) = result[528] * v6[6] + v6[7] * result[529] + a1[8] * a5[530] + a2[2]; *(float *)(a3 + 84) = 0.0; *(float *)(a3 + 68) = 0.0; *(float *)(a3 + 52) = 0.0; *(float *)(a3 + 36) = 0.0; return result; } //----- (0091DED0) -------------------------------------------------------- float *__cdecl sub_91DED0(float *a1, float *a2, int a3, char a4, float *a5) { int v5; // eax float *result; // eax float *v7; // ecx sub_91A460(*(_DWORD **)(a3 + 12), 0xBu, 0x20000, a4); v5 = dword_BA6E4C; *(_BYTE *)(a3 + 90) = dword_BA6E4C && dword_BA6E4C != 256; sub_91A460(*(_DWORD **)(a3 + 12), 0x18u, v5, a4); result = a5; v7 = a1; *(float *)(a3 + 24) = a5[516] * *a1 + a5[517] * a1[1] + a5[518] * a1[2]; *(float *)(a3 + 40) = v7[1] * result[521] + *v7 * result[520] + v7[2] * result[522]; *(float *)(a3 + 56) = v7[1] * result[525] + *v7 * result[524] + v7[2] * result[526]; *(float *)(a3 + 28) = result[516] * v7[3] + result[517] * v7[4] + v7[5] * result[518]; *(float *)(a3 + 44) = v7[4] * result[521] + v7[3] * result[520] + v7[5] * result[522]; *(float *)(a3 + 60) = v7[4] * result[525] + v7[3] * result[524] + v7[5] * result[526]; *(float *)(a3 + 32) = result[516] * v7[6] + result[517] * v7[7] + v7[8] * result[518]; *(float *)(a3 + 48) = v7[6] * result[520] + result[521] * v7[7] + v7[8] * result[522]; *(float *)(a3 + 64) = v7[6] * result[524] + result[525] * v7[7] + v7[8] * result[526]; *(float *)(a3 + 72) = *v7 * result[528] + result[529] * v7[1] + result[530] * v7[2] + *a2; *(float *)(a3 + 76) = v7[3] * result[528] + result[529] * v7[4] + v7[5] * result[530] + a2[1]; *(float *)(a3 + 80) = result[529] * v7[7] + v7[6] * result[528] + a5[530] * a1[8] + a2[2]; *(float *)(a3 + 84) = 0.0; *(float *)(a3 + 68) = 0.0; *(float *)(a3 + 52) = 0.0; *(float *)(a3 + 36) = 0.0; return result; } // BA6E4C: using guessed type int dword_BA6E4C; //----- (0091E0D0) -------------------------------------------------------- float *__cdecl sub_91E0D0(float *a1, float *a2, int a3, char a4, float *a5) { _DWORD *v5; // ecx float *v6; // ecx float *v7; // eax double v8; // st7 float *result; // eax sub_91A460(*(_DWORD **)(a3 + 12), 0xBu, 196608, a4); v5 = *(_DWORD **)(a3 + 12); *(_BYTE *)(a3 + 90) = 1; sub_91A460(v5, 0x18u, 2, a4); v6 = a1; v7 = a5; *(float *)(a3 + 24) = a1[1] * a5[517] + a5[516] * *a1 + a5[518] * a1[2]; *(float *)(a3 + 40) = *v6 * v7[520] + v6[1] * v7[521] + v6[2] * v7[522]; *(float *)(a3 + 56) = *v6 * v7[524] + v6[1] * v7[525] + v6[2] * v7[526]; *(float *)(a3 + 28) = v6[4] * v7[517] + v7[516] * v6[3] + v7[518] * v6[5]; *(float *)(a3 + 44) = v6[4] * v7[521] + v6[3] * v7[520] + v7[522] * v6[5]; *(float *)(a3 + 60) = v6[4] * v7[525] + v6[3] * v7[524] + v7[526] * v6[5]; *(float *)(a3 + 32) = v7[516] * v6[6] + v6[7] * v7[517] + v6[8] * v7[518]; *(float *)(a3 + 48) = v7[521] * v6[7] + v6[6] * v7[520] + v6[8] * v7[522]; v8 = v7[525] * v6[7] + v6[6] * v7[524]; result = a2; *(float *)(a3 + 64) = v8 + a1[8] * a5[526]; *(float *)(a3 + 72) = *a2; *(float *)(a3 + 76) = a2[1]; *(float *)(a3 + 80) = a2[2]; *(float *)(a3 + 84) = 0.0; *(float *)(a3 + 68) = 0.0; *(float *)(a3 + 52) = 0.0; *(float *)(a3 + 36) = 0.0; return result; } //----- (0091E260) -------------------------------------------------------- float *__cdecl sub_91E260(float *a1, float *a2, int a3, char a4, float *a5) { _DWORD *v5; // ecx float *v6; // ecx float *v7; // eax double v8; // st7 float *result; // eax sub_91A460(*(_DWORD **)(a3 + 12), 0xBu, 196608, a4); v5 = *(_DWORD **)(a3 + 12); *(_BYTE *)(a3 + 90) = 1; sub_91A460(v5, 0x18u, 3, a4); v6 = a1; v7 = a5; *(float *)(a3 + 24) = a1[1] * a5[517] + a5[516] * *a1 + a5[518] * a1[2]; *(float *)(a3 + 40) = *v6 * v7[520] + v6[1] * v7[521] + v6[2] * v7[522]; *(float *)(a3 + 56) = *v6 * v7[524] + v6[1] * v7[525] + v6[2] * v7[526]; *(float *)(a3 + 28) = v6[4] * v7[517] + v7[516] * v6[3] + v7[518] * v6[5]; *(float *)(a3 + 44) = v6[4] * v7[521] + v6[3] * v7[520] + v7[522] * v6[5]; *(float *)(a3 + 60) = v6[4] * v7[525] + v6[3] * v7[524] + v7[526] * v6[5]; *(float *)(a3 + 32) = v7[516] * v6[6] + v6[7] * v7[517] + v6[8] * v7[518]; *(float *)(a3 + 48) = v7[521] * v6[7] + v6[6] * v7[520] + v6[8] * v7[522]; v8 = v7[525] * v6[7] + v6[6] * v7[524]; result = a2; *(float *)(a3 + 64) = v8 + a1[8] * a5[526]; *(float *)(a3 + 72) = *a2; *(float *)(a3 + 76) = a2[1]; *(float *)(a3 + 80) = a2[2]; *(float *)(a3 + 84) = 0.0; *(float *)(a3 + 68) = 0.0; *(float *)(a3 + 52) = 0.0; *(float *)(a3 + 36) = 0.0; return result; } //----- (0091E3F0) -------------------------------------------------------- float *__cdecl sub_91E3F0(float *a1, float *a2, int a3, char a4, float *a5) { _DWORD *v5; // ecx float *v6; // ecx float *v7; // eax double v8; // st7 float *result; // eax sub_91A460(*(_DWORD **)(a3 + 12), 0xBu, 0x10000, a4); v5 = *(_DWORD **)(a3 + 12); *(_BYTE *)(a3 + 90) = 1; sub_91A460(v5, 0x18u, 3, a4); v6 = a1; v7 = a5; *(float *)(a3 + 24) = a1[1] * a5[517] + a5[516] * *a1 + a5[518] * a1[2]; *(float *)(a3 + 40) = *v6 * v7[520] + v6[1] * v7[521] + v6[2] * v7[522]; *(float *)(a3 + 56) = *v6 * v7[524] + v6[1] * v7[525] + v6[2] * v7[526]; *(float *)(a3 + 28) = v6[4] * v7[517] + v7[516] * v6[3] + v7[518] * v6[5]; *(float *)(a3 + 44) = v6[4] * v7[521] + v6[3] * v7[520] + v7[522] * v6[5]; *(float *)(a3 + 60) = v6[4] * v7[525] + v6[3] * v7[524] + v7[526] * v6[5]; *(float *)(a3 + 32) = v7[516] * v6[6] + v6[7] * v7[517] + v6[8] * v7[518]; *(float *)(a3 + 48) = v7[521] * v6[7] + v6[6] * v7[520] + v6[8] * v7[522]; v8 = v7[525] * v6[7] + v6[6] * v7[524]; result = a2; *(float *)(a3 + 64) = v8 + a1[8] * a5[526]; *(float *)(a3 + 72) = *a2; *(float *)(a3 + 76) = a2[1]; *(float *)(a3 + 80) = a2[2]; *(float *)(a3 + 84) = 0.0; *(float *)(a3 + 68) = 0.0; *(float *)(a3 + 52) = 0.0; *(float *)(a3 + 36) = 0.0; return result; } //----- (0091E5C0) -------------------------------------------------------- signed int __thiscall sub_91E5C0(int this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8) { int v8; // esi int v10; // ecx _DWORD *v11; // ecx v8 = this; if ( !*(_BYTE *)(this + 28) ) return -1; if ( *(_BYTE *)(this + 32) ) (*(void (__stdcall **)(int))(**(_DWORD **)(this + 24) + 4))(a5); if ( *(_BYTE *)(v8 + 33) ) { v10 = *(_DWORD *)(*(_DWORD *)(v8 + 20) + 1732); if ( v10 ) sub_937310(v10, a5, a6, *(_DWORD *)(a5 + 40), *(_DWORD *)(a5 + 44)); } v11 = *(_DWORD **)(v8 + 40); if ( v11 ) sub_91BF30(v11); return 0; } //----- (0091E630) -------------------------------------------------------- int __thiscall sub_91E630(_DWORD **this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { _DWORD *v9; // edi _DWORD **v10; // esi int v11; // eax int v12; // ebx int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // ecx _DWORD *v16; // ecx int v17; // edi int v18; // eax int v20; // [esp+14h] [ebp+8h] int v21; // [esp+30h] [ebp+24h] int v22; // [esp+30h] [ebp+24h] v9 = a2; v10 = this; if ( a2 ) { v11 = sub_85AA60(a2, off_AC4D98); if ( v11 ) { *(_DWORD *)(v11 + 20) = 0; *(_DWORD *)(v11 + 24) = 0; } } v12 = a9; v13 = (*(int (__stdcall **)(_DWORD *, int, int, int, int, int, int, int, _DWORD *))(*v10[15] + 4))( a2, a3, a4, a5, a6, a7, a8, a9, v10[13]); v14 = v10[11]; v20 = v13; if ( v14 ) { v21 = v10[15][19]; if ( v21 ) (*(void (__stdcall **)(int, _DWORD *, int, int, int, int, int, int, int, _DWORD *, signed int))(*v14 + 44))( v21, v9, a3, a4, a5, a6, a7, a8, v12, v10[13], 1); } v15 = v10[12]; if ( v15 ) { v22 = v10[15][24]; if ( v22 ) (*(void (__stdcall **)(int, _DWORD *, int, int, int, int, int, int, int, _DWORD *, signed int))(*v15 + 44))( v22, v9, a3, a4, a5, a6, a7, a8, v12, v10[13], 1); } if ( !v10[13] ) { v16 = v10[9]; if ( v16 ) { v17 = *v10[6]; v18 = (*(int (__stdcall **)(_DWORD))(*v16 + 100))(0); (*(void (__thiscall **)(_DWORD *, int))(v17 + 168))(v10[6], v18); } } return v20; } //----- (0091E740) -------------------------------------------------------- _DWORD *__thiscall sub_91E740(int this, int a2, int a3, _DWORD *a4, int a5) { int v5; // ebx int *v6; // eax int v7; // edx _DWORD *v8; // edi unsigned int v9; // eax unsigned int v10; // esi int v11; // ecx int v13; // [esp+14h] [ebp+8h] v5 = this; if ( a2 && (!*(_DWORD *)(this + 52) || (*(_WORD *)(*(_DWORD *)(a2 + 184) + 50) & 0xF000) == -32768 && a3) ) { v6 = *(int **)(a2 + 184); v7 = *(_DWORD *)(a2 + 188); if ( a3 ) { v8 = *(_DWORD **)(a3 + 40); sub_9230C0(*(void **)(this + 20), *(int **)(a3 + 40), (int)v6, v7, a3, *(_DWORD **)(this + 36), 0); } else { v8 = (_DWORD *)v6[15]; sub_922D70(*(void **)(this + 20), v6[15], v6, v7, *(_DWORD *)(this + 36), 0); } } else { v8 = a4; } if ( v8 ) { v9 = v8[7]; v10 = 0; if ( v9 ) { if ( v9 <= 0 ) { v13 = 0; goto LABEL_14; } do { v13 = *(_DWORD *)(v8[8] + 4 * v10); LABEL_14: if ( v10 >= v9 ) v11 = 0; else v11 = *(_DWORD *)(v8[9] + 4 * v10); (*(void (__stdcall **)(_DWORD, unsigned int, _DWORD, _DWORD, int))(**(_DWORD **)(v5 + 16) + 400))( *(_DWORD *)(v5 + 16), v10, *(_DWORD *)(v11 + 8), 0, v13); v9 = v8[7]; ++v10; } while ( v10 < v9 ); } (*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v5 + 16) + 416))(*(_DWORD *)(v5 + 16), v8[12]); } return v8; } //----- (0091E830) -------------------------------------------------------- unsigned int __thiscall sub_91E830(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi unsigned int result; // eax int v4; // ecx bool v5; // zf int v6; // [esp+8h] [ebp-4h] v1 = this; v2 = 0; if ( this[14] ) { v6 = 0; do result = sub_461550(v1 + 16, v2++, &v6); while ( v2 < v1[14] ); } v4 = v1[15]; if ( v4 ) { v5 = (*(_DWORD *)(v4 + 104))-- == 1; if ( v5 ) result = (unsigned int)sub_91D6F0((_BYTE *)v4); v1[15] = 0; } v1[14] = 0; v1[13] = 0; return result; } //----- (0091E880) -------------------------------------------------------- int __thiscall sub_91E880(int this) { int v1; // edi unsigned int v2; // ebx int result; // eax int v4; // esi int v5; // ecx int v6; // ecx v1 = this; v2 = 0; if ( *(_DWORD *)(this + 56) ) { do { result = *(_DWORD *)(v1 + 68); v4 = *(_DWORD *)(result + 4 * v2); if ( v4 ) { v5 = *(_DWORD *)(v4 + 76); if ( v5 ) result = (*(int (**)(void))(*(_DWORD *)v5 + 64))(); v6 = *(_DWORD *)(v4 + 96); if ( v6 ) result = (*(int (**)(void))(*(_DWORD *)v6 + 88))(); } ++v2; } while ( v2 < *(_DWORD *)(v1 + 56) ); *(_BYTE *)(v1 + 28) = 0; } else { *(_BYTE *)(this + 28) = 0; } return result; } //----- (0091E8D0) -------------------------------------------------------- int __thiscall sub_91E8D0(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // edi int result; // eax int v4; // esi int v5; // ecx int v6; // ecx v1 = this; if ( this[5] ) { v2 = 0; if ( this[14] ) { do { result = v1[17]; v4 = *(_DWORD *)(result + 4 * v2); if ( v4 ) { v5 = *(_DWORD *)(v4 + 76); if ( v5 ) result = (*(int (**)(void))(*(_DWORD *)v5 + 68))(); v6 = *(_DWORD *)(v4 + 96); if ( v6 ) result = (*(int (**)(void))(*(_DWORD *)v6 + 92))(); } ++v2; } while ( v2 < v1[14] ); } *((_BYTE *)v1 + 28) = 1; } return result; } //----- (0091E920) -------------------------------------------------------- char __thiscall sub_91E920(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // ecx v1 = this[19]; v2 = 0; if ( !v1 ) return 1; v3 = this[17]; while ( *(_DWORD *)(*(_DWORD *)v3 + 96) ) { ++v2; v3 += 4; if ( v2 >= v1 ) return 1; } return 0; } //----- (0091E950) -------------------------------------------------------- char __thiscall sub_91E950(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // ecx v1 = this[19]; v2 = 0; if ( !v1 ) return 0; v3 = this[17]; while ( !*(_DWORD *)(*(_DWORD *)v3 + 96) ) { ++v2; v3 += 4; if ( v2 >= v1 ) return 0; } return 1; } //----- (0091E980) -------------------------------------------------------- char __thiscall sub_91E980(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // ecx v1 = this[19]; v2 = 0; if ( !v1 ) return 1; v3 = this[17]; while ( *(_DWORD *)(*(_DWORD *)v3 + 76) ) { ++v2; v3 += 4; if ( v2 >= v1 ) return 1; } return 0; } //----- (0091E9B0) -------------------------------------------------------- char __thiscall sub_91E9B0(_DWORD *this) { unsigned int v1; // edx unsigned int v2; // eax int v3; // ecx v1 = this[19]; v2 = 0; if ( !v1 ) return 0; v3 = this[17]; while ( !*(_DWORD *)(*(_DWORD *)v3 + 76) ) { ++v2; v3 += 4; if ( v2 >= v1 ) return 0; } return 1; } //----- (0091E9E0) -------------------------------------------------------- char __cdecl sub_91E9E0(_DWORD *a1, _DWORD *a2) { _DWORD *v2; // ebx int v3; // eax unsigned int v4; // esi unsigned int v5; // edi int v6; // eax int v7; // eax unsigned int v8; // edi unsigned int v9; // esi int v10; // eax unsigned int v11; // edi unsigned int v12; // eax int v13; // eax _DWORD *v14; // edi unsigned int v15; // ebx unsigned int v16; // esi int v17; // eax _DWORD *v18; // edi unsigned int v19; // ebx unsigned int v20; // esi int v21; // eax void **v22; // eax void **v23; // esi unsigned int v24; // eax int v25; // eax unsigned int v26; // ebx int v27; // eax int v28; // edi int v29; // eax int v30; // eax unsigned int v31; // ebx int v32; // eax int v33; // edi int v34; // eax _DWORD *v35; // ecx int v36; // ebx int v37; // eax int v38; // edi int v39; // eax _DWORD *v40; // ecx int v41; // ebx int v42; // eax int v43; // edi int v44; // eax int v46; // [esp+Ch] [ebp-18h] _DWORD *v47; // [esp+Ch] [ebp-18h] _DWORD *v48; // [esp+Ch] [ebp-18h] unsigned int v49; // [esp+10h] [ebp-14h] unsigned int v50; // [esp+14h] [ebp-10h] unsigned int v51; // [esp+14h] [ebp-10h] int v52; // [esp+18h] [ebp-Ch] int v53; // [esp+18h] [ebp-Ch] unsigned int v54; // [esp+18h] [ebp-Ch] unsigned int v55; // [esp+1Ch] [ebp-8h] unsigned int v56; // [esp+20h] [ebp-4h] sub_85AFB0(a2, off_AC4D98); v2 = a1; v3 = a1[12]; v4 = 0; v52 = 0; v55 = 0; v56 = 0; if ( v3 ) { v5 = *(_DWORD *)(v3 + 28); if ( v5 > 0 ) { do { v6 = (*(int (__stdcall **)(unsigned int))(*(_DWORD *)a1[12] + 40))(v4); if ( v6 && (*(_DWORD *)(v6 + 16) & 0xF0000000) == 805306368 ) ++v52; ++v4; } while ( v4 < v5 ); } v52 *= a1[19]; } v7 = a1[11]; if ( v7 ) { v8 = *(_DWORD *)(v7 + 28); v9 = 0; if ( v8 ) { do { v10 = (*(int (__stdcall **)(unsigned int))(*(_DWORD *)a1[11] + 40))(v9); if ( v10 && (*(_DWORD *)(v10 + 16) & 0xF0000000) == 805306368 ) ++v55; ++v9; } while ( v9 < v8 ); } v55 *= a1[19]; } v11 = a1[19]; v12 = 0; v49 = v11; v50 = 0; if ( v11 ) { do { v13 = *(_DWORD *)(v2[17] + 4 * v12); v46 = v13; if ( v13 ) { v14 = *(_DWORD **)(v13 + 60); if ( v14 ) { v15 = v14[7]; v16 = 0; if ( v15 ) { do { v17 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v14 + 40))(v14, v16); if ( v17 && (*(_DWORD *)(v17 + 16) & 0xF0000000) == 805306368 ) ++v55; ++v16; } while ( v16 < v15 ); v13 = v46; } } v18 = *(_DWORD **)(v13 + 80); if ( v18 ) { v19 = v18[7]; v20 = 0; if ( v19 ) { do { v21 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v18 + 40))(v18, v20); if ( v21 && (*(_DWORD *)(v21 + 16) & 0xF0000000) == 805306368 ) ++v52; ++v20; } while ( v20 < v19 ); } } } v11 = v49; v2 = a1; v12 = v50 + 1; v50 = v12; } while ( v12 < v49 ); } if ( v52 || v55 > 0 ) { v22 = (void **)operator new(0x24u); if ( v22 ) v23 = sub_957EF0(v22, off_AC4D98, v52, v55); else v23 = 0; v24 = 0; v51 = 0; if ( v11 ) { while ( 1 ) { v53 = *(_DWORD *)(v2[17] + 4 * v24); if ( v53 ) { v25 = v2[11]; if ( v25 ) v56 = *(_DWORD *)(v25 + 28); v26 = 0; if ( v56 ) { do { v27 = (*(int (__stdcall **)(unsigned int))(*(_DWORD *)a1[11] + 40))(v26); v28 = v27; if ( v27 ) { if ( (*(_DWORD *)(v27 + 16) & 0xF0000000) == 805306368 ) { v29 = sub_85AA60(a2, *(const char **)(v27 + 8)); if ( v29 ) { *((_DWORD *)v23[8] + 2 * (_DWORD)v23[6]) = *(_DWORD *)(v28 + 24) | 0xFF0000; *((_DWORD *)v23[8] + 2 * (_DWORD)v23[6] + 1) = v29; v23[6] = (char *)v23[6] + 1; } } } ++v26; } while ( v26 < v56 ); } v30 = a1[12]; v31 = 0; v56 = 0; if ( v30 ) v56 = *(_DWORD *)(v30 + 28); if ( v56 > 0 ) { do { v32 = (*(int (__stdcall **)(unsigned int))(*(_DWORD *)a1[12] + 40))(v31); v33 = v32; if ( v32 ) { if ( (*(_DWORD *)(v32 + 16) & 0xF0000000) == 805306368 ) { v34 = sub_85AA60(a2, *(const char **)(v32 + 8)); if ( v34 ) { *((_DWORD *)v23[7] + 2 * (_DWORD)v23[5]) = *(_DWORD *)(v33 + 24) | 0xFF0000; *((_DWORD *)v23[7] + 2 * (_DWORD)v23[5] + 1) = v34; v23[5] = (char *)v23[5] + 1; } } } ++v31; } while ( v31 < v56 ); } v35 = *(_DWORD **)(v53 + 60); v47 = v35; if ( v35 ) { v36 = 0; v56 = v35[7]; if ( v56 ) { while ( 1 ) { v37 = (*(int (__stdcall **)(int))(*v35 + 40))(v36); v38 = v37; if ( v37 ) { if ( (*(_DWORD *)(v37 + 16) & 0xF0000000) == 805306368 ) { v39 = sub_85AA60(a2, *(const char **)(v37 + 8)); if ( v39 ) { *((_DWORD *)v23[8] + 2 * (_DWORD)v23[6]) = *(_DWORD *)(v38 + 24); *((_DWORD *)v23[8] + 2 * (_DWORD)v23[6] + 1) = v39; v23[6] = (char *)v23[6] + 1; } } } if ( ++v36 >= v56 ) break; v35 = v47; } } } v40 = *(_DWORD **)(v53 + 80); v48 = v40; if ( v40 ) { v41 = 0; v54 = v40[7]; if ( v54 ) { while ( 1 ) { v42 = (*(int (__stdcall **)(int))(*v40 + 40))(v41); v43 = v42; if ( v42 ) { if ( (*(_DWORD *)(v42 + 16) & 0xF0000000) == 805306368 ) { v44 = sub_85AA60(a2, *(const char **)(v42 + 8)); if ( v44 ) { *((_DWORD *)v23[7] + 2 * (_DWORD)v23[5]) = *(_DWORD *)(v43 + 24); *((_DWORD *)v23[7] + 2 * (_DWORD)v23[5] + 1) = v44; v23[5] = (char *)v23[5] + 1; } } } if ( ++v41 >= v54 ) break; v40 = v48; } } } } v24 = v51 + 1; v51 = v24; if ( v24 >= v49 ) break; v2 = a1; } } LOBYTE(v12) = sub_85AEA0(a2, v23); } return v12; } //----- (0091EDA0) -------------------------------------------------------- LONG __thiscall sub_91EDA0(_DWORD *this) { _DWORD *v1; // esi const char *v2; // eax int v3; // edi int v4; // ebx int v5; // eax int v6; // ebx int v7; // eax _DWORD *v8; // ecx unsigned int v9; // edi void *v10; // ST04_4 unsigned int v11; // ebx int v12; // edx int v13; // ecx _DWORD *v14; // edi bool v15; // zf int v16; // eax int v17; // ebx void *v18; // ecx int v19; // edi int v20; // ebx int v21; // ecx int v22; // ecx int v23; // edi int v24; // edi int v25; // edi void *v27; // [esp+Ch] [ebp-4h] v1 = this; v2 = (const char *)this[2]; *this = &NiD3DShader::`vftable'; if ( v2 && strcmp(v2, &byte_9A8050) ) { v3 = sub_930E20(); v4 = *(_DWORD *)v3; v5 = sub_965070(v1); if ( v1 == (_DWORD *)(*(int (__thiscall **)(int, _DWORD, int))(v4 + 8))(v3, v1[2], v5) ) { v6 = *(_DWORD *)v3; v7 = sub_965070(v1); (*(void (__thiscall **)(int, _DWORD, int))(v6 + 28))(v3, v1[2], v7); } if ( *((_BYTE *)v1 + 29) && v1 == (_DWORD *)(*(int (__thiscall **)(int, _DWORD, signed int))(*(_DWORD *)v3 + 8))(v3, v1[2], -1) ) { (*(void (__thiscall **)(int, _DWORD, signed int))(*(_DWORD *)v3 + 28))(v3, v1[2], -1); } } v8 = (_DWORD *)v1[5]; v9 = 0; if ( v8 ) sub_929E70(v8, v1); v10 = (void *)v1[10]; *((_BYTE *)v1 + 28) = 0; sub_91C7A0(v10); v1[13] = 0; v1[14] = 0; if ( v1[19] > 0u ) { v27 = 0; do sub_461550(v1 + 16, v9++, (int *)&v27); while ( v9 < v1[19] ); } v11 = 0; if ( v1[19] ) { do { v12 = v1[17]; v13 = *(_DWORD *)(v12 + 4 * v11); v14 = (_DWORD *)(v12 + 4 * v11); if ( v13 ) { v15 = (*(_DWORD *)(v13 + 104))-- == 1; if ( v15 ) sub_91D6F0((_BYTE *)v13); *v14 = 0; } ++v11; } while ( v11 < v1[19] ); } v1[19] = 0; v1[20] = 0; v16 = v1[17]; v1[16] = &NiTArray>::`vftable'; if ( v16 ) { v17 = *(_DWORD *)(v16 - 4); v18 = (void *)(v16 - 4); v19 = v16 + 4 * v17; v20 = v17 - 1; v27 = (void *)(v16 - 4); if ( v20 >= 0 ) { do { v21 = *(_DWORD *)(v19 - 4); v19 -= 4; if ( v21 ) { v15 = (*(_DWORD *)(v21 + 104))-- == 1; if ( v15 ) sub_91D6F0((_BYTE *)v21); } --v20; } while ( v20 >= 0 ); v18 = v27; } operator delete(v18); } v22 = v1[15]; if ( v22 ) { v15 = (*(_DWORD *)(v22 + 104))-- == 1; if ( v15 ) sub_91D6F0((_BYTE *)v22); } v23 = v1[12]; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) && v23 ) (**(void (__thiscall ***)(int, signed int))v23)(v23, 1); v24 = v1[11]; if ( v24 && !InterlockedDecrement((volatile LONG *)(v24 + 4)) && v24 ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); v25 = v1[9]; if ( v25 && !InterlockedDecrement((volatile LONG *)(v25 + 4)) && v25 ) (**(void (__thiscall ***)(int, signed int))v25)(v25, 1); return sub_91F1A0(v1); } // A404C4: using guessed type void *NiTArray>::`vftable'; // A40574: using guessed type void *NiD3DShader::`vftable'; //----- (0091EF90) -------------------------------------------------------- char __thiscall sub_91EF90(_DWORD *this, _DWORD *a2) { sub_91E9E0(this, a2); return 1; } //----- (0091EFB0) -------------------------------------------------------- _DWORD *__thiscall sub_91EFB0(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_869360(this); v1[4] = 0; v1[5] = 0; v1[6] = 0; *((_WORD *)v1 + 14) = 0; *v1 = &NiD3DShaderInterface::`vftable'; return v1; } // A4430C: using guessed type void *NiD3DShaderInterface::`vftable'; //----- (0091EFE0) -------------------------------------------------------- int __stdcall sub_91EFE0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return 0; } //----- (0091EFF0) -------------------------------------------------------- int __stdcall sub_91EFF0(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { return 0; } //----- (0091F000) -------------------------------------------------------- int __stdcall sub_91F000(int a1, int a2, int a3, int a4) { return 0; } //----- (0091F010) -------------------------------------------------------- void *sub_91F010() { return &unk_BA6D54; } //----- (0091F020) -------------------------------------------------------- int __thiscall sub_91F020(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax int result; // eax v2 = this; this[5] = a2; if ( a2 ) { v3 = *(_DWORD *)(a2 + 132); v4 = this[4]; if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(this[4]); v2[4] = v3; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); result = *(_DWORD *)(v2[5] + 1716); v2[6] = result; } else { result = this[4]; this[6] = 0; if ( result ) result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[4] = 0; } return result; } //----- (0091F090) -------------------------------------------------------- int __cdecl sub_91F090(int a1) { int v1; // edi int v2; // eax _DWORD *v3; // eax void *v4; // ecx void *v5; // ecx v1 = *(_DWORD *)(a1 + 1716); sub_91CD90(a1); sub_91B960(a1); dword_BA6CBC = v1; sub_916FF0(a1); sub_930C20(a1); sub_91BF00(a1); (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 260))(v1); v2 = sub_930E20(); if ( v2 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v2 + 108))(v2, a1); if ( dword_BA6CA0 ) return 0; v3 = operator new(0x20u); if ( v3 ) { dword_BA6CA0 = (int)sub_917CE0(v3); if ( !dword_BA6CA0 ) nullsub_6(v5); return 0; } dword_BA6CA0 = 0; nullsub_6(v4); return 0; } // BA6CA0: using guessed type int dword_BA6CA0; // BA6CBC: using guessed type int dword_BA6CBC; //----- (0091F140) -------------------------------------------------------- int sub_91F140() { int v0; // esi v0 = sub_930E20(); if ( v0 ) { sub_863400(); (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v0 + 108))(v0, 0); } sub_91CD90(0); sub_91B960(0); dword_BA6CBC = 0; sub_916E80(); sub_916FF0(0); sub_930C20(0); sub_91BF00(0); return 0; } // BA6CBC: using guessed type int dword_BA6CBC; //----- (0091F1A0) -------------------------------------------------------- LONG __thiscall sub_91F1A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[4]; *this = &NiD3DShaderInterface::`vftable'; this[5] = 0; this[6] = 0; if ( v2 ) (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[4] = 0; return sub_8693B0(v1); } // A4430C: using guessed type void *NiD3DShaderInterface::`vftable'; //----- (0091F1E0) -------------------------------------------------------- char __thiscall sub_91F1E0(_DWORD *this, int a2) { _DWORD *v2; // esi char result; // al v2 = this; sub_91F020(this, a2); result = 1; *((_BYTE *)v2 + 28) = 1; return result; } //----- (0091F200) -------------------------------------------------------- _DWORD *__thiscall sub_91F200(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 4); *(_DWORD *)this = &NiD3DShaderInterface::`vftable'; *((_DWORD *)this + 5) = 0; *((_DWORD *)this + 6) = 0; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v2[4] = 0; sub_8693B0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A4430C: using guessed type void *NiD3DShaderInterface::`vftable'; //----- (0091F250) -------------------------------------------------------- _DWORD *__cdecl sub_91F250(_DWORD *a1, _DWORD *a2, _DWORD *a3) { _DWORD *result; // eax result = a1; switch ( (unsigned int)a1 ) { case 0x46u: result = a2; *a2 = 16; *a3 = 0; break; case 0x47u: *a2 = 32; *a3 = 0; break; case 0x49u: result = a2; *a2 = 15; *a3 = 1; break; case 0x4Bu: result = a3; *a2 = 24; *a3 = 8; break; case 0x4Du: *a2 = 24; *a3 = 0; break; case 0x4Fu: result = a2; *a2 = 24; *a3 = 4; break; case 0x50u: result = a3; *a2 = 16; *a3 = 0; break; default: result = a3; *a2 = 0; *a3 = 0; break; } return result; } //----- (0091F340) -------------------------------------------------------- signed int __cdecl sub_91F340(int a1) { signed int result; // eax switch ( a1 ) { case 70: result = 0; break; case 71: result = 1; break; case 73: result = 2; break; case 75: result = 3; break; case 77: result = 4; break; case 79: result = 5; break; case 80: result = 8; break; case 82: result = 6; break; case 83: result = 7; break; default: result = 9; break; } return result; } //----- (0091F3D0) -------------------------------------------------------- const char *__cdecl sub_91F3D0(signed int a1) { const char *result; // eax if ( a1 > 827606349 ) { if ( a1 > 877942852 ) { if ( a1 > 1195525970 ) { if ( a1 == 1498831189 ) return "D3DFMT_UYVY"; } else { switch ( a1 ) { case 1195525970: return "D3DFMT_R8G8_B8G8"; case 894720068: return "D3DFMT_DXT5"; case 1111970375: return "D3DFMT_G8R8_G8B8"; } } } else { if ( a1 == 877942852 ) return "D3DFMT_DXT4"; if ( a1 > 844715353 ) { if ( a1 == 861165636 ) return "D3DFMT_DXT3"; } else { switch ( a1 ) { case 844715353: return "D3DFMT_YUY2"; case 827611204: return "D3DFMT_DXT1"; case 844388420: return "D3DFMT_DXT2"; } } } return "UNKNOWN"; } if ( a1 == 827606349 ) return "D3DFMT_MULTI2_ARGB8"; switch ( a1 ) { case 20: result = "D3DFMT_R8G8B8"; break; case 21: result = "D3DFMT_A8R8G8B8"; break; case 22: result = "D3DFMT_X8R8G8B8"; break; case 23: result = "D3DFMT_R5G6B5"; break; case 24: result = "D3DFMT_X1R5G5B5"; break; case 25: result = "D3DFMT_A1R5G5B5"; break; case 26: result = "D3DFMT_A4R4G4B4"; break; case 27: result = "D3DFMT_R3G3B2"; break; case 28: result = "D3DFMT_A8"; break; case 29: result = "D3DFMT_A8R3G3B2"; break; case 30: result = "D3DFMT_X4R4G4B4"; break; case 31: result = "D3DFMT_A2B10G10R10"; break; case 32: result = "D3DFMT_A8B8G8R8"; break; case 33: result = "D3DFMT_X8B8G8R8"; break; case 34: result = "D3DFMT_G16R16"; break; case 35: result = "D3DFMT_A2R10G10B10"; break; case 36: result = "D3DFMT_A16B16G16R16"; break; case 40: result = "D3DFMT_A8P8"; break; case 41: result = "D3DFMT_P8"; break; case 50: result = "D3DFMT_L8"; break; case 51: result = "D3DFMT_A8L8"; break; case 52: result = "D3DFMT_A4L4"; break; case 60: result = "D3DFMT_V8U8"; break; case 61: result = "D3DFMT_L6V5U5"; break; case 62: result = "D3DFMT_X8L8V8U8"; break; case 63: result = "D3DFMT_Q8W8V8U8"; break; case 64: result = "D3DFMT_V16U16"; break; case 67: result = "D3DFMT_A2W10V10U10"; break; case 70: result = "D3DFMT_D16_LOCKABLE"; break; case 71: result = "D3DFMT_D32"; break; case 73: result = "D3DFMT_D15S1"; break; case 75: result = "D3DFMT_D24S8"; break; case 77: result = "D3DFMT_D24X8"; break; case 79: result = "D3DFMT_D24X4S4"; break; case 80: result = "D3DFMT_D16"; break; case 81: result = "D3DFMT_L16"; break; case 82: result = "D3DFMT_D32F_LOCKABLE"; break; case 83: result = "D3DFMT_D24FS8"; break; case 100: result = "D3DFMT_VERTEXDATA"; break; case 101: result = "D3DFMT_INDEX16"; break; case 102: result = "D3DFMT_INDEX32"; break; case 110: result = "D3DFMT_Q16W16V16U16"; break; case 111: result = "D3DFMT_R16F"; break; case 112: result = "D3DFMT_G16R16F"; break; case 113: result = "D3DFMT_A16B16G16R16F"; break; case 114: result = "D3DFMT_R32F"; break; case 115: result = "D3DFMT_G32R32F"; break; case 116: result = "D3DFMT_A32B32G32R32F"; break; case 117: result = "D3DFMT_CxV8U8"; break; default: return "UNKNOWN"; } return result; } //----- (0091F720) -------------------------------------------------------- signed int __cdecl sub_91F720(signed int a1) { bool v2; // zf if ( a1 > 827606349 ) { if ( a1 > 877942852 ) { if ( a1 > 1195525970 ) { v2 = a1 == 1498831189; } else { if ( a1 == 1195525970 || a1 == 894720068 ) return 0; v2 = a1 == 1111970375; } } else { if ( a1 == 877942852 ) return 0; if ( a1 > 844715353 ) { v2 = a1 == 861165636; } else { if ( a1 == 844715353 || a1 == 827611204 ) return 0; v2 = a1 == 844388420; } } if ( !v2 ) return -1; } else if ( a1 != 827606349 ) { switch ( a1 ) { case 0: case 100: return 0; case 20: return 24; case 21: case 22: case 31: case 32: case 33: case 35: case 62: case 63: case 64: case 67: case 71: case 75: case 77: case 79: case 82: case 83: case 102: case 112: case 114: return 32; case 23: case 24: case 25: case 26: case 29: case 30: case 34: case 40: case 51: case 60: case 61: case 70: case 73: case 80: case 81: case 101: case 111: case 117: return 16; case 27: case 28: case 41: case 50: case 52: return 8; case 36: case 110: case 113: case 115: return 64; case 116: return 128; default: return -1; } return -1; } return 0; } //----- (0091F860) -------------------------------------------------------- void *__thiscall sub_91F860(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A44784: using guessed type void *NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; //----- (0091F890) -------------------------------------------------------- void *__thiscall sub_91F890(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A44794: using guessed type void *NiTArray::`vftable'; //----- (0091F8C0) -------------------------------------------------------- void *__thiscall sub_91F8C0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4479C: using guessed type void *NiTArray::`vftable'; //----- (0091F8F0) -------------------------------------------------------- int __thiscall sub_91F8F0(_DWORD *this, char a2, int a3, int a4) { int result; // eax signed int v5; // eax int v6; // ecx int v7; // [esp+0h] [ebp-4h] v7 = 0; sub_8C4C90(this + 2, a3, &v7); if ( !v7 ) return 0; v5 = sub_91F340(a4); if ( a2 ) result = *(unsigned __int8 *)(v6 + 4 * v5 + 1); else result = *(unsigned __int8 *)(v6 + 4 * v5 + 37); return result; } //----- (0091F950) -------------------------------------------------------- bool __thiscall sub_91F950(_DWORD *this, char a2, int a3, int a4, int a5) { signed int v6; // eax int v7; // ecx int v8; // edx int v9; // [esp+0h] [ebp-4h] v9 = 0; sub_8C4C90(this + 2, a4, &v9); if ( !v9 ) return 0; if ( !a3 ) return 1; v6 = sub_91F340(a5); v8 = v7 + 4 * v6; if ( !a2 ) v8 = v7 + 4 * v6 + 36; return (*(unsigned __int16 *)(v8 + 2) & (1 << (a3 - 1))) != 0; } //----- (0091F9D0) -------------------------------------------------------- int __thiscall sub_91F9D0(_DWORD *this, int a2, int a3, int a4) { unsigned int v4; // edi int v5; // esi _DWORD *v6; // ST00_4 int v7; // ecx int v9; // [esp+8h] [ebp-14h] int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] _BYTE *v13; // [esp+18h] [ebp-4h] v13 = 0; if ( !sub_8C4C90(this + 2, a2, &v13) ) return 0; v9 = 0; v11 = 0; v10 = 0; v13 += 36; v4 = 0; do { if ( *v13 ) { v5 = dword_AC4D9C[v4]; v6 = (_DWORD *)dword_AC4D9C[v4]; v12 = 0; a2 = 0; sub_91F250(v6, &v12, &a2); v7 = v12; v12 = abs(v12 - a3); if ( abs(v11 - a3) >= v12 ) { v12 = abs(a2 - a4); if ( abs(v10 - a4) >= v12 ) { v11 = v7; v10 = a2; v9 = v5; } } } v13 += 4; ++v4; } while ( v4 < 9 ); return v9; } // AC4D9C: using guessed type int dword_AC4D9C[]; //----- (0091FAB0) -------------------------------------------------------- signed int __thiscall sub_91FAB0(_DWORD *this, char a2, int a3) { _DWORD *v3; // eax int v4; // ecx _DWORD *v6; // ecx int v7; // edx int *v8; // edx if ( a2 ) { v3 = (_DWORD *)this[78]; if ( v3 ) { while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { if ( *(_BYTE *)(v4 + 4) ) break; } if ( !v3 ) return 0; } return sub_8B0BA0(*(_DWORD *)v4); } return 0; } v6 = (_DWORD *)this[78]; if ( !v6 ) return 0; while ( 1 ) { v7 = v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { if ( *(_BYTE *)(v7 + 5) && sub_91F720(*(_DWORD *)v7) == a3 ) break; } if ( !v6 ) return 0; } return sub_8B0BA0(*v8); } //----- (0091FB40) -------------------------------------------------------- int __thiscall sub_91FB40(_DWORD *this, int a2, int a3, unsigned int a4, int a5) { _DWORD *v5; // eax _DWORD *v6; // ecx int result; // eax int v8; // edx v5 = (_DWORD *)this[78]; if ( !v5 ) return 0; while ( 1 ) { v6 = (_DWORD *)v5[2]; v5 = (_DWORD *)*v5; if ( v6 ) { if ( *v6 == a2 ) break; } if ( !v5 ) return 0; } if ( !a5 ) { v8 = a4; return sub_91F9D0(v6, a3, v8, a5); } if ( a4 > 0x10 ) { v8 = 24; if ( a5 != 1 ) return sub_91F9D0(v6, a3, 24, 8); return sub_91F9D0(v6, a3, v8, a5); } if ( a5 == 1 ) result = sub_91F9D0(v6, a3, 15, 1); else result = sub_91F9D0(v6, a3, 24, 8); return result; } //----- (0091FBE0) -------------------------------------------------------- int __thiscall sub_91FBE0(_DWORD *this, int a2) { int v2; // ebx int v4; // eax _DWORD *v5; // ecx unsigned int v6; // esi int v7; // edi unsigned int v8; // eax int v9; // [esp+Ch] [ebp+8h] v2 = a2; if ( !a2 ) return 0; v4 = this[5]; v5 = *(_DWORD **)v4; v6 = abs(*(_DWORD *)(v4 + 8) - a2); v9 = 0; if ( *(_DWORD *)v4 ) { do { v7 = v5[2]; v5 = (_DWORD *)*v5; v8 = abs(v7 - v2); if ( v8 < v6 ) { v6 = v8; v9 = v7; } } while ( v5 ); } return v9; } //----- (0091FC40) -------------------------------------------------------- int __thiscall sub_91FC40(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; return result; } // A44784: using guessed type void *NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; // A447A4: using guessed type void *NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; //----- (0091FC80) -------------------------------------------------------- void **__thiscall sub_91FC80(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44764: using guessed type void *NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; //----- (0091FCC0) -------------------------------------------------------- void **__thiscall sub_91FCC0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A44764: using guessed type void *NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; // A447B4: using guessed type void *NiTPointerMap::`vftable'; //----- (0091FD00) -------------------------------------------------------- void *__thiscall sub_91FD00(void *this, char a2) { void *v2; // esi v2 = this; sub_91FC40(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0091FD30) -------------------------------------------------------- void __thiscall sub_91FD30(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // esi void *v7; // ebx int v8; // eax unsigned int v9; // edx unsigned int v10; // eax _DWORD *v11; // ecx v1 = this + 2; v2 = this[3]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = (void *)v6[2]; if ( *v6 ) { v6 = (_DWORD *)*v6; } else { v8 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 4))(v1, v6[1]); v9 = v1[1]; v10 = v8 + 1; if ( v10 >= v9 ) { LABEL_14: v6 = 0; } else { v11 = (_DWORD *)(v1[2] + 4 * v10); while ( 1 ) { v6 = (_DWORD *)*v11; if ( *v11 ) break; ++v10; ++v11; if ( v10 >= v9 ) goto LABEL_14; } } } operator delete(v7); } *v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *v1 = &NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; sub_940360(v1); operator delete((void *)v1[2]); } // A44764: using guessed type void *NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; // A447B4: using guessed type void *NiTPointerMap::`vftable'; //----- (0091FDE0) -------------------------------------------------------- int __thiscall sub_91FDE0(int *this, int a2, int a3) { return sub_91F9D0(this, *this, a2, a3); } //----- (0091FE00) -------------------------------------------------------- int __thiscall sub_91FE00(_DWORD *this, int a2, int a3, int a4, int *a5) { _DWORD *v5; // edi int result; // eax unsigned int v7; // esi int *v8; // ebx _DWORD *v9; // ecx int v10; // [esp+1Ch] [ebp+14h] v5 = this; result = 0; v7 = 0; if ( this[279] ) { v8 = a5; do { v9 = *(_DWORD **)(v5[277] + 4 * v7); if ( v9 && v9[3] == a2 && *v9 == a3 && v9[1] == a4 ) { v10 = *(_DWORD *)(v5[277] + 4 * v7); *v8 = sub_91FBE0(v9, *v8); result = v10; } ++v7; } while ( v7 < v5[279] ); } return result; } //----- (0091FE70) -------------------------------------------------------- int __thiscall sub_91FE70(_DWORD *this, int a2, int a3, int a4, int a5, char a6, char a7) { _DWORD *v7; // esi unsigned int v8; // ebx void *v9; // eax size_t v10; // ST14_4 int v11; // esi signed int v12; // eax int v13; // edi int (__stdcall *v14)(int, int, int, int, signed int, signed int, signed int); // edx _DWORD *v15; // eax signed int v16; // ebx bool v17; // zf int v18; // ebx char *v19; // eax signed int v20; // edi char *v21; // eax _WORD *v22; // eax char v24; // [esp+Ch] [ebp-34h] char v25; // [esp+10h] [ebp-30h] char v26; // [esp+14h] [ebp-2Ch] _DWORD *v27; // [esp+18h] [ebp-28h] int v28; // [esp+1Ch] [ebp-24h] int v29; // [esp+20h] [ebp-20h] unsigned int v30; // [esp+24h] [ebp-1Ch] unsigned int v31; // [esp+28h] [ebp-18h] int v32; // [esp+2Ch] [ebp-14h] int v33; // [esp+30h] [ebp-10h] void *v34; // [esp+34h] [ebp-Ch] int v35; // [esp+38h] [ebp-8h] char *v36; // [esp+3Ch] [ebp-4h] signed int v37; // [esp+48h] [ebp+8h] char v38; // [esp+4Bh] [ebp+Bh] v7 = this; this[3] = 37; v8 = 0; v27 = this; this[2] = &NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; this[5] = 0; v9 = operator new(0x94u); v10 = 4 * v7[3]; v7[4] = v9; memset(v9, 0, v10); v7[2] = &NiTPointerMap::`vftable'; *v7 = a5; *((_BYTE *)v7 + 5) = a6; *((_BYTE *)v7 + 4) = a7; v11 = a2; v30 = 0; do { if ( v8 ) { v12 = sub_8B0AC0(v8); v13 = a4; v14 = *(int (__stdcall **)(int, int, int, int, signed int, signed int, signed int))(*(_DWORD *)v11 + 40); v28 = v12; if ( v14(v11, a3, a4, a5, 1, 1, v12) >= 0 ) { v15 = operator new(0x48u); if ( v15 ) { *v15 = 0; v15[1] = 0; v15[2] = 0; v15[3] = 0; v15[4] = 0; v15[5] = 0; v15[6] = 0; v15[7] = 0; v15[8] = 0; v15[9] = 0; v15[10] = 0; v15[11] = 0; v15[12] = 0; v15[13] = 0; v15[14] = 0; v15[15] = 0; v15[16] = 0; v15[17] = 0; v34 = v15; } else { v34 = 0; } v16 = 1; v33 = 0; v32 = 0; v37 = 1; v31 = 16; do { if ( a7 && (*(int (__stdcall **)(int, int, int, int, signed int, signed int, char *))(*(_DWORD *)v11 + 44))( v11, a3, a4, a5, 1, v16, &v26) >= 0 ) { v33 |= v37; } if ( a6 && (*(int (__stdcall **)(int, int, int, int, _DWORD, signed int, char *))(*(_DWORD *)v11 + 44))( v11, a3, a4, a5, 0, v16, &v26) >= 0 ) { v32 |= v37; } ++v16; v17 = v31-- == 1; v37 = __ROL4__(v37, 1); } while ( !v17 ); v38 = 0; v36 = (char *)v34 + 38; v31 = 0; do { v18 = *(int *)((char *)dword_AC4D9C + v31); if ( (*(int (__stdcall **)(int, int, int, int, signed int, signed int, _DWORD))(*(_DWORD *)v11 + 40))( v11, a3, v13, a5, 2, 1, *(int *)((char *)dword_AC4D9C + v31)) >= 0 && (*(int (__stdcall **)(int, int, int, int, int, int))(*(_DWORD *)v11 + 48))(v11, a3, v13, a5, v28, v18) >= 0 ) { v19 = v36; v20 = 1; *(v36 - 38) = a7; v38 = 1; *(v19 - 2) = a6; v35 = 1; v29 = 16; do { if ( v33 | v35 && (*(int (__stdcall **)(int, int, int, int, signed int, signed int, char *))(*(_DWORD *)v11 + 44))( v11, a3, a4, v18, 1, v20, &v25) >= 0 ) { v21 = v36; if ( v20 == 1 ) *(v36 - 37) = v25; *((_WORD *)v21 - 18) |= v35; } if ( v32 | v35 && (*(int (__stdcall **)(int, int, int, int, _DWORD, signed int, char *))(*(_DWORD *)v11 + 44))( v11, a3, a4, v18, 0, v20, &v24) >= 0 ) { v22 = v36; if ( v20 == 1 ) *(v36 - 1) = v24; *v22 |= v35; } ++v20; v17 = v29-- == 1; v35 = __ROL4__(v35, 1); } while ( !v17 ); v13 = a4; } v36 += 4; v31 += 4; } while ( v31 < 0x24 ); if ( v38 ) sub_815C70(v27 + 2, v28, (int)v34); else operator delete(v34); v8 = v30; } } v30 = ++v8; } while ( v8 < 0x12 ); return (int)v27; } // A44764: using guessed type void *NiTMapBase,enum _D3DFORMAT,NiDX9DeviceDesc::DisplayFormatInfo::RenderTargetInfo *>::`vftable'; // A447B4: using guessed type void *NiTPointerMap::`vftable'; // AC4D9C: using guessed type int dword_AC4D9C[]; //----- (00920140) -------------------------------------------------------- int *__thiscall sub_920140(int *this, int a2, int a3, int a4, int a5, int a6) { int *v6; // ebx _DWORD *v7; // edi _DWORD *v8; // eax _DWORD *v9; // edx int v10; // eax char v11; // bl _DWORD *v12; // eax _DWORD *v13; // ecx _DWORD *v14; // eax int v15; // ebx _DWORD *v16; // eax _DWORD *v17; // ecx _DWORD *v18; // eax int v19; // ecx unsigned int v21; // [esp+Ch] [ebp-38h] char v22; // [esp+14h] [ebp-30h] int v23; // [esp+18h] [ebp-2Ch] unsigned int v24; // [esp+1Ch] [ebp-28h] char v25; // [esp+20h] [ebp-24h] _DWORD *v26; // [esp+24h] [ebp-20h] int *v27; // [esp+28h] [ebp-1Ch] char v28; // [esp+30h] [ebp-14h] int v29; // [esp+3Ch] [ebp-8h] v6 = this; *this = a4; v7 = this + 77; v7[3] = 0; v7[1] = 0; v7[2] = 0; *v7 = &NiTPointerList::`vftable'; v27 = this; if ( (*(int (__stdcall **)(int, int, int, int *))(*(_DWORD *)a2 + 56))(a2, a3, *this, this + 1) < 0 ) { v6[1] = 0; } else { v8 = *(_DWORD **)(a6 + 4); if ( v8 ) { while ( 1 ) { v9 = (_DWORD *)*v8; v10 = v8[2]; v26 = v9; v23 = v10; if ( v10 ) { v21 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)a2 + 24))(a2, a3, v10); v24 = 0; if ( v21 ) { do { v11 = 0; v25 = 0; v22 = 0; if ( (*(int (__stdcall **)(int, int, int, unsigned int, char *))(*(_DWORD *)a2 + 28))( a2, a3, v23, v24, &v28) >= 0 ) { (*(void (__stdcall **)(int, int, int, int, int, _DWORD))(*(_DWORD *)a2 + 36))(a2, a3, *v27, v23, v29, 0); v11 = 1; v22 = 1; } if ( (*(int (__stdcall **)(int, int, int, int, int, signed int))(*(_DWORD *)a2 + 36))( a2, a3, *v27, a5, v29, 1) >= 0 ) v25 = 1; if ( v11 || v25 ) { v12 = (_DWORD *)v27[78]; if ( v12 ) { while ( 1 ) { v13 = (_DWORD *)v12[2]; v12 = (_DWORD *)*v12; if ( v13 ) { if ( *v13 == v29 ) break; } if ( !v12 ) goto LABEL_17; } } else { LABEL_17: v14 = operator new(0x18u); if ( v14 ) v15 = sub_91FE70(v14, a2, a3, *v27, v29, v22, v25); else v15 = 0; v16 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v7 + 4))(v7); v16[2] = v15; *v16 = 0; v16[1] = v7[2]; v17 = (_DWORD *)v7[2]; if ( v17 ) *v17 = v16; else v7[1] = v16; ++v7[3]; v7[2] = v16; } } ++v24; } while ( v24 < v21 ); v6 = v27; } } if ( !v26 ) break; v8 = v26; } } } v18 = (_DWORD *)v6[78]; if ( !v18 ) goto LABEL_32; while ( 1 ) { v19 = v18[2]; v18 = (_DWORD *)*v18; if ( *(_DWORD *)v19 == a5 ) break; if ( !v18 ) goto LABEL_32; } if ( *(_BYTE *)(v19 + 4) ) *((_BYTE *)v6 + 324) = 1; else LABEL_32: *((_BYTE *)v6 + 324) = 0; return v6; } // A447D4: using guessed type void *NiTPointerList::`vftable'; //----- (00920350) -------------------------------------------------------- int *__thiscall sub_920350(int *this, int a2, int a3, int a4) { _DWORD *v4; // ebx int *v5; // esi int v6; // edi _DWORD *v7; // eax _DWORD *v8; // edx int v9; // eax unsigned int v10; // ecx _DWORD *v11; // eax _DWORD *v12; // esi _DWORD *v13; // eax _DWORD *v14; // ecx _DWORD *v15; // eax _DWORD *v16; // edi _DWORD *v17; // eax int v18; // ecx unsigned int v19; // esi int *v20; // eax int *v21; // eax int *v22; // eax int *v23; // eax unsigned int v25; // [esp+Ch] [ebp-4Ch] int v26; // [esp+10h] [ebp-48h] _DWORD *v27; // [esp+14h] [ebp-44h] _DWORD *v28; // [esp+18h] [ebp-40h] int v29; // [esp+20h] [ebp-38h] unsigned int v30; // [esp+28h] [ebp-30h] int *v31; // [esp+30h] [ebp-28h] char v32; // [esp+34h] [ebp-24h] int v33; // [esp+40h] [ebp-18h] int v34; // [esp+44h] [ebp-14h] int v35; // [esp+48h] [ebp-10h] int v36; // [esp+4Ch] [ebp-Ch] int v37; // [esp+50h] [ebp-8h] *this = a3; v4 = this + 276; v31 = this; v4[3] = 0; v4[4] = 0; *v4 = &NiTArray::`vftable'; v4[2] = 32; v4[5] = 16; v5 = this; v6 = a2; v4[1] = operator new(0x80u); (*(void (__stdcall **)(int, int, _DWORD, int *))(*(_DWORD *)v6 + 20))(v6, *v5, 0, v5 + 1); v7 = *(_DWORD **)(a4 + 4); if ( v7 ) { while ( 1 ) { v8 = (_DWORD *)*v7; v9 = v7[2]; v28 = v8; v26 = v9; if ( v9 ) { v25 = (*(int (__stdcall **)(int, int, int))(*(_DWORD *)v6 + 24))(v6, *v5, v9); v30 = 0; if ( v25 ) { do { if ( (*(int (__stdcall **)(int, int, int, unsigned int, int *))(*(_DWORD *)v6 + 28))( v6, *v5, v26, v30, &v34) >= 0 ) { v10 = 0; v27 = 0; v29 = 0; if ( !v5[279] ) goto LABEL_47; do { v11 = *(_DWORD **)(v5[277] + 4 * v10); if ( v11 && v11[3] == v26 && *v11 == v34 && v11[1] == v35 ) { v12 = v11 + 4; v27 = v11; v13 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v11[4] + 4))(v11 + 4); v13[2] = v36; *v13 = 0; v13[1] = v12[2]; v14 = (_DWORD *)v12[2]; if ( v14 ) *v14 = v13; else v12[1] = v13; ++v12[3]; v6 = a2; v10 = v29; v12[2] = v13; v5 = v31; } v29 = ++v10; } while ( v10 < v5[279] ); if ( !v27 ) { LABEL_47: v15 = operator new(0x20u); v16 = v15; if ( v15 ) { *v15 = v34; v15[1] = v35; v15[3] = v37; v15[7] = 0; v15[5] = 0; v15[6] = 0; v15[4] = &NiTPointerList::`vftable'; v17 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v15[4] + 4))(v15 + 4); v17[2] = v36; v17[1] = 0; *v17 = v16[5]; v18 = v16[5]; if ( v18 ) *(_DWORD *)(v18 + 4) = v17; else v16[6] = v17; ++v16[7]; v16[5] = v17; v16[2] = sub_91F720(v37); } else { v16 = 0; } v19 = v4[3]; if ( v19 < v4[2] || (sub_8237A0(v4, v19 + v4[5]), v19 < v4[2]) ) { if ( v19 < v4[3] ) { if ( v16 ) { if ( !*(_DWORD *)(v4[1] + 4 * v19) ) ++v4[4]; } else if ( *(_DWORD *)(v4[1] + 4 * v19) ) { --v4[4]; } } else { v4[3] = v19 + 1; if ( v16 ) ++v4[4]; } *(_DWORD *)(v4[1] + 4 * v19) = v16; } v5 = v31; v6 = a2; } } ++v30; } while ( v30 < v25 ); } } if ( !v28 ) break; v7 = v28; } } (*(void (__stdcall **)(int, int, char *))(*(_DWORD *)v6 + 32))(v6, *v5, &v32); v20 = (int *)operator new(0x148u); if ( v20 ) v21 = sub_920140(v20, v6, a3, 1, v33, a4); else v21 = 0; v5[282] = (int)v21; v22 = (int *)operator new(0x148u); if ( v22 ) v23 = sub_920140(v22, v6, a3, 2, v33, a4); else v23 = 0; v5[283] = (int)v23; return v5; } // 9BBC0C: using guessed type void *NiTPointerList::`vftable'; // A44794: using guessed type void *NiTArray::`vftable'; //----- (00920640) -------------------------------------------------------- void __thiscall sub_920640(unsigned int *this, int a2, int a3) { unsigned int *v3; // ebx unsigned int v4; // eax unsigned int v5; // edi int *v6; // eax int *v7; // eax v3 = this; v4 = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 16))(a2); *v3 = v4; sub_8237A0(v3 + 1, v4); v5 = 0; if ( *v3 ) { do { v6 = (int *)operator new(0x470u); if ( v6 ) v7 = sub_920350(v6, a2, v5, a3); else v7 = 0; if ( v5 < v3[3] ) { if ( v5 < v3[4] ) { if ( v7 ) { if ( !*(_DWORD *)(v3[2] + 4 * v5) ) ++v3[5]; } else if ( *(_DWORD *)(v3[2] + 4 * v5) ) { --v3[5]; } } else { v3[4] = v5 + 1; if ( v7 ) ++v3[5]; } *(_DWORD *)(v3[2] + 4 * v5) = v7; } ++v5; } while ( v5 < *v3 ); } } //----- (009206E0) -------------------------------------------------------- void __fastcall sub_9206E0(int a1) { unsigned int v1; // eax _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // ST00_4 _DWORD *v5; // ebx _DWORD *v6; // esi _DWORD *v7; // edi _DWORD *v8; // edi _DWORD *v9; // ST00_4 _DWORD *v10; // ebx _DWORD *v11; // esi _DWORD *v12; // edi _DWORD *v13; // edi _DWORD *v14; // ST00_4 int v15; // [esp+Ch] [ebp-8h] int v16; // [esp+10h] [ebp-4h] v1 = 0; v16 = a1; v15 = 0; if ( *(_DWORD *)(a1 + 1116) ) { do { v2 = *(_DWORD **)(*(_DWORD *)(a1 + 1108) + 4 * v1); if ( v2 ) { v3 = (_DWORD *)v2[5]; v2[4] = &NiTPointerListBase,unsigned int>::`vftable'; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v2[4] + 8))(v2 + 4, v4); } v2[7] = 0; v2[5] = 0; v2[6] = 0; v2[4] = &NiTListBase,unsigned int>::`vftable'; operator delete(v2); v1 = v15; a1 = v16; } v15 = ++v1; } while ( v1 < *(_DWORD *)(a1 + 1116) ); } v5 = *(_DWORD **)(a1 + 1128); if ( v5 ) { v6 = (_DWORD *)v5[78]; while ( v6 ) { v7 = (_DWORD *)v6[2]; v6 = (_DWORD *)*v6; if ( v7 ) { sub_91FD30(v7); operator delete(v7); } } v8 = (_DWORD *)v5[78]; v5[77] = &NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; while ( v8 ) { v9 = v8; v8 = (_DWORD *)*v8; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v5[77] + 8))(v5 + 77, v9); } v5[80] = 0; v5[78] = 0; v5[79] = 0; v5[77] = &NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; operator delete(v5); a1 = v16; } v10 = *(_DWORD **)(a1 + 1132); if ( v10 ) { v11 = (_DWORD *)v10[78]; while ( v11 ) { v12 = (_DWORD *)v11[2]; v11 = (_DWORD *)*v11; if ( v12 ) { sub_91FD30(v12); operator delete(v12); } } v13 = (_DWORD *)v10[78]; v10[77] = &NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; while ( v13 ) { v14 = v13; v13 = (_DWORD *)*v13; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v10[77] + 8))(v10 + 77, v14); } v10[80] = 0; v10[78] = 0; v10[79] = 0; v10[77] = &NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; operator delete(v10); a1 = v16; } *(_DWORD *)(a1 + 1104) = &NiTArray::`vftable'; operator delete(*(void **)(a1 + 1108)); } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBB9C: using guessed type void *NiTPointerListBase,unsigned int>::`vftable'; // A44784: using guessed type void *NiTListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; // A44794: using guessed type void *NiTArray::`vftable'; // A447A4: using guessed type void *NiTPointerListBase,NiDX9DeviceDesc::DisplayFormatInfo *>::`vftable'; //----- (009208B0) -------------------------------------------------------- unsigned int *__thiscall sub_9208B0(unsigned int *this, int a2, int a3) { unsigned int *v3; // esi v3 = this; this[3] = 0; this[4] = 0; this[5] = 0; this[2] = 0; this[1] = (unsigned int)&NiTArray::`vftable'; this[6] = 1; *this = 0; sub_920640(this, a2, a3); return v3; } // A4479C: using guessed type void *NiTArray::`vftable'; //----- (009208F0) -------------------------------------------------------- void __thiscall sub_9208F0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int v3; // eax void *v4; // ebx void *v5; // ST04_4 v1 = this; v2 = 0; if ( this[4] ) { do { v3 = v1[2]; v4 = *(void **)(v3 + 4 * v2); if ( v4 ) { sub_9206E0(*(_DWORD *)(v3 + 4 * v2)); operator delete(v4); } ++v2; } while ( v2 < v1[4] ); } v5 = (void *)v1[2]; v1[1] = &NiTArray::`vftable'; operator delete(v5); } // A4479C: using guessed type void *NiTArray::`vftable'; //----- (00920940) -------------------------------------------------------- signed int sub_920940() { FARPROC v0; // eax HMODULE v1; // eax void *v2; // ecx if ( !dword_BA6E44 ) { v0 = (FARPROC)dword_BA6E48; if ( !dword_BA6E48 && ((v1 = LoadLibraryA("D3D9.DLL"), (dword_BA6E40 = v1) == 0) || (v0 = GetProcAddress(v1, "Direct3DCreate9"), (dword_BA6E48 = (int)v0) == 0)) || (dword_BA6E44 = ((int (__stdcall *)(signed int))v0)(32)) == 0 ) { nullsub_6(v2); return -1; } nullsub_6(v2); } return 0; } // BA6E44: using guessed type int dword_BA6E44; // BA6E48: using guessed type int dword_BA6E48; //----- (009209B0) -------------------------------------------------------- char __cdecl sub_9209B0(int a1, _DWORD *a2, _DWORD *a3) { char result; // al *a3 &= 0xFFFFFF0F; switch ( a1 ) { case 0: *a2 = 1; *a3 |= 0x50u; result = 1; break; case 1: *a2 = 1; *a3 |= 0x40u; result = 1; break; case 2: *a2 = 1; *a3 |= 0x80u; result = 1; break; case 3: *a2 = 1; *a3 |= 0x20u; result = 1; break; case 4: *a2 = 2; *a3 |= 0x20u; result = 1; break; case 5: *a2 = 2; *a3 |= 0x40u; result = 1; break; case 6: *a2 = 2; *a3 |= 0x80u; result = 1; break; default: result = 0; break; } return result; } //----- (00920A70) -------------------------------------------------------- int __thiscall sub_920A70(int *this, signed int *a2) { return sub_937690(a2, this + 319); } //----- (00920A90) -------------------------------------------------------- int __thiscall sub_920A90(_DWORD *this) { return this[423]; } //----- (00920AA0) -------------------------------------------------------- char __thiscall sub_920AA0(_BYTE *this) { return this[1696]; } //----- (00920AB0) -------------------------------------------------------- int __thiscall sub_920AB0(_DWORD *this) { return this[416]; } //----- (00920AC0) -------------------------------------------------------- int __thiscall sub_920AC0(_DWORD **this) { return (*(int (**)(void))(*this[418] + 100))(); } //----- (00920AD0) -------------------------------------------------------- int __thiscall sub_920AD0(_DWORD **this) { return (*(int (__stdcall **)(_DWORD))(*this[418] + 96))(0); } //----- (00920AE0) -------------------------------------------------------- int __thiscall sub_920AE0(_DWORD **this) { return (*(int (**)(void))(*this[432] + 12))(); } //----- (00920B00) -------------------------------------------------------- char __stdcall sub_920B00(int a1) { sub_9382B0(); return 1; } //----- (00920B10) -------------------------------------------------------- char __thiscall sub_920B10(int this) { int v1; // esi v1 = this; if ( !*(_BYTE *)(this + 1272) ) { if ( (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 132) + 168))(*(_DWORD *)(this + 132)) < 0 ) return 0; sub_938370(*(_DWORD **)(v1 + 1720)); } return 1; } //----- (00920B50) -------------------------------------------------------- int __thiscall sub_920B50(int this, float *a2, float *a3, float *a4, float *a5, int a6, float *a7) { int result; // eax int v8; // esi float *v9; // eax float v10; // ST4C_4 float v11; // ST4C_4 float v12; // ST4C_4 int v13; // eax int v14; // ecx float v15; // ST4C_4 int (*v16)(void); // edx char v17; // al float *v18; // ecx double v19; // st5 double v20; // st5 double v21; // st4 double v22; // st7 char v23; // al double v24; // st5 double v25; // st5 double v26; // st4 int v27; // eax float v28; // ST4C_4 unsigned int v29; // eax float *v30; // ecx float v31; // ST40_4 int v32; // ST28_4 float v33; // [esp+38h] [ebp-38h] float v34; // [esp+3Ch] [ebp-34h] float v35; // [esp+40h] [ebp-30h] float v36; // [esp+4Ch] [ebp-24h] float v37; // [esp+50h] [ebp-20h] int v38; // [esp+54h] [ebp-1Ch] int v39; // [esp+58h] [ebp-18h] int v40; // [esp+5Ch] [ebp-14h] int v41; // [esp+60h] [ebp-10h] float v42; // [esp+64h] [ebp-Ch] float v43; // [esp+68h] [ebp-8h] result = (int)a7; v8 = this; if ( !*(_BYTE *)(this + 1272) ) { v9 = a2; *(float *)(this + 1936) = *a5; *(float *)(this + 1940) = *a4; *(float *)(this + 1944) = *a3; *(float *)(this + 1948) = 0.0; *(float *)(this + 1952) = a5[1]; *(float *)(this + 1956) = a4[1]; *(float *)(this + 1960) = a3[1]; *(float *)(this + 1964) = 0.0; *(float *)(this + 1968) = a5[2]; *(float *)(this + 1972) = a4[2]; *(float *)(this + 1976) = a3[2]; *(float *)(this + 1980) = 0.0; v10 = *a5 * *v9 + a5[1] * v9[1] + a5[2] * v9[2]; *(float *)(this + 1984) = -v10; v11 = a4[1] * v9[1] + *a4 * *v9 + v9[2] * a4[2]; *(float *)(this + 1988) = -v11; v12 = *a3 * *v9 + v9[1] * a3[1] + a3[2] * v9[2]; *(float *)(this + 1992) = -v12; *(float *)(this + 1996) = 1.0; *(float *)(this + 2064) = *a5; *(float *)(this + 2068) = a5[1]; *(float *)(this + 2072) = a5[2]; *(float *)(this + 2076) = 0.0; *(float *)(this + 2080) = *a4; *(float *)(this + 2084) = a4[1]; *(float *)(this + 2088) = a4[2]; *(float *)(this + 2092) = 0.0; *(float *)(this + 2096) = *a3; *(float *)(this + 2100) = a3[1]; *(float *)(this + 2104) = a3[2]; *(float *)(this + 2108) = 0.0; *(float *)(this + 2112) = *a2; *(float *)(this + 2116) = a2[1]; v13 = *(_DWORD *)(this + 132); *(float *)(this + 2120) = a2[2]; *(float *)(this + 2124) = 1.0; (*(void (__stdcall **)(int, signed int, int))(*(_DWORD *)v13 + 176))(v13, 2, this + 1936); *(float *)(v8 + 1096) = *a5; *(float *)(v8 + 1100) = a5[1]; *(float *)(v8 + 1104) = a5[2]; *(float *)(v8 + 1072) = *a5; *(float *)(v8 + 1076) = a5[1]; *(float *)(v8 + 1080) = a5[2]; *(float *)(v8 + 1108) = *a4; *(float *)(v8 + 1112) = a4[1]; *(float *)(v8 + 1116) = a4[2]; *(float *)(v8 + 1084) = *a4; *(float *)(v8 + 1088) = a4[1]; *(float *)(v8 + 1092) = a4[2]; *(float *)(v8 + 1152) = *(float *)(a6 + 16); v14 = *(_DWORD *)(v8 + 1716); v15 = *(float *)(a6 + 20) - *(float *)(a6 + 16); *(float *)(v8 + 1156) = v15; v16 = *(int (**)(void))(*(_DWORD *)v14 + 72); v37 = *(float *)(a6 + 4) - *(float *)a6; v34 = *(float *)(a6 + 4) + *(float *)a6; v33 = *(float *)(a6 + 8) - *(float *)(a6 + 12); v35 = *(float *)(a6 + 12) + *(float *)(a6 + 8); v36 = 1.0 / v15; if ( *(_BYTE *)(a6 + 24) ) { v17 = v16(); v18 = (float *)(v8 + 2000); v19 = v37; if ( v17 ) { *v18 = -2.0 / v19; v20 = 0.0; *(float *)(v8 + 2016) = 0.0; *(float *)(v8 + 2032) = 0.0; v21 = v34; } else { *v18 = 2.0 / v19; v20 = 0.0; *(float *)(v8 + 2016) = 0.0; *(float *)(v8 + 2032) = 0.0; v21 = -v34; } *(float *)(v8 + 2048) = v21 / v37; *(float *)(v8 + 2004) = v20; *(float *)(v8 + 2020) = 2.0 / v33; *(float *)(v8 + 2036) = v20; *(float *)(v8 + 2052) = -v35 / v33; *(float *)(v8 + 2008) = v20; *(float *)(v8 + 2024) = v20; *(float *)(v8 + 2040) = v36; *(float *)(v8 + 2056) = -(v36 * *(float *)(a6 + 16)); *(float *)(v8 + 2012) = v20; *(float *)(v8 + 2028) = v20; *(float *)(v8 + 2044) = v20; v22 = 1.0; } else { v23 = v16(); v18 = (float *)(v8 + 2000); v24 = v37; if ( v23 ) { *v18 = -2.0 / v24; v25 = 0.0; *(float *)(v8 + 2016) = 0.0; v26 = v34; } else { *v18 = 2.0 / v24; v25 = 0.0; *(float *)(v8 + 2016) = 0.0; v26 = -v34; } *(float *)(v8 + 2032) = v26 / v37; *(float *)(v8 + 2048) = v25; *(float *)(v8 + 2004) = v25; *(float *)(v8 + 2020) = 2.0 / v33; v22 = v25; *(float *)(v8 + 2036) = -v35 / v33; *(float *)(v8 + 2052) = *(float *)&v22; *(float *)(v8 + 2008) = *(float *)&v22; *(float *)(v8 + 2024) = *(float *)&v22; *(float *)(v8 + 2040) = *(float *)(a6 + 20) * v36; *(float *)(v8 + 2056) = -(v36 * (*(float *)(a6 + 20) * *(float *)(a6 + 16))); *(float *)(v8 + 2012) = *(float *)&v22; *(float *)(v8 + 2028) = *(float *)&v22; *(float *)(v8 + 2044) = 1.0; } v27 = *(_DWORD *)(v8 + 132); *(float *)(v8 + 2060) = v22; (*(void (__stdcall **)(int, signed int, float *))(*(_DWORD *)v27 + 176))(v27, 3, v18); v28 = (double)(unsigned int)(*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 1668) + 60))(0); v29 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v8 + 1668) + 64))(0); v30 = a7; v31 = (double)v29; v38 = (signed __int64)(*a7 * v28); v39 = (signed __int64)((1.0 - a7[2]) * v31); v40 = (signed __int64)(v28 * (v30[1] - *v30)); v41 = (signed __int64)(v31 * (v30[2] - v30[3])); v32 = *(_DWORD *)(v8 + 132); v42 = 0.0; v43 = 1.0; (*(void (__stdcall **)(int, int *))(*(_DWORD *)v32 + 188))(v32, &v38); result = (*(int (__thiscall **)(_DWORD, _DWORD, _DWORD))(**(_DWORD **)(v8 + 1716) + 68))( *(_DWORD *)(v8 + 1716), *(float *)(a6 + 16), *(float *)(a6 + 20)); } return result; } //----- (00921080) -------------------------------------------------------- int __userpurge sub_921080@(int a1@, int a2@, int a3@, float *a4) { int result; // eax int v5; // esi unsigned int v6; // edi unsigned int v7; // ebx int v8; // ecx int v9; // ecx int v10; // eax float v11; // [esp+48h] [ebp-2Ch] float v12; // [esp+54h] [ebp-20h] int v13; // [esp+58h] [ebp-1Ch] int v14; // [esp+5Ch] [ebp-18h] unsigned int v15; // [esp+60h] [ebp-14h] unsigned int v16; // [esp+64h] [ebp-10h] float v17; // [esp+68h] [ebp-Ch] float v18; // [esp+6Ch] [ebp-8h] result = (int)a4; v5 = a1; if ( !*(_BYTE *)(a1 + 1272) ) { v6 = (*(int (__stdcall **)(_DWORD, int, int))(**(_DWORD **)(a1 + 1668) + 60))(0, a3, a2); v7 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v5 + 1668) + 64))(0); v12 = (double)v6; v11 = (double)v7; v8 = *(_DWORD *)(v5 + 132); *(float *)(v5 + 1936) = 1.0; *(float *)(v5 + 1940) = 0.0; *(float *)(v5 + 1944) = 0.0; *(float *)(v5 + 1948) = 0.0; *(float *)(v5 + 1952) = 0.0; *(float *)(v5 + 1956) = -1.0; *(float *)(v5 + 1960) = 0.0; *(float *)(v5 + 1964) = 0.0; *(float *)(v5 + 1968) = 0.0; *(float *)(v5 + 1972) = 0.0; *(float *)(v5 + 1980) = 0.0; *(float *)(v5 + 1976) = 1.0; *(float *)(v5 + 1984) = -0.5; *(float *)(v5 + 1988) = 0.5; *(float *)(v5 + 2112) = 0.5; *(float *)(v5 + 2116) = 0.5; *(float *)(v5 + 1992) = 1.0; *(float *)(v5 + 1996) = 1.0; *(float *)(v5 + 2064) = 1.0; *(float *)(v5 + 2104) = 1.0; *(float *)(v5 + 2124) = 1.0; *(float *)(v5 + 2068) = 0.0; *(float *)(v5 + 2072) = 0.0; *(float *)(v5 + 2076) = 0.0; *(float *)(v5 + 2080) = 0.0; *(float *)(v5 + 2088) = 0.0; *(float *)(v5 + 2092) = 0.0; *(float *)(v5 + 2096) = 0.0; *(float *)(v5 + 2100) = 0.0; *(float *)(v5 + 2108) = 0.0; *(float *)(v5 + 2084) = -1.0; *(float *)(v5 + 2120) = -1.0; (*(void (__stdcall **)(int, signed int, int))(*(_DWORD *)v8 + 176))(v8, 2, v5 + 1936); *(float *)(v5 + 1096) = 1.0; *(float *)(v5 + 1072) = 1.0; *(float *)(v5 + 1100) = 0.0; *(float *)(v5 + 1076) = 0.0; *(float *)(v5 + 1108) = 0.0; *(float *)(v5 + 1084) = 0.0; *(float *)(v5 + 1152) = 1.0; *(float *)(v5 + 1104) = 0.0; *(float *)(v5 + 1080) = 0.0; *(float *)(v5 + 1156) = 9999.0; *(float *)(v5 + 1112) = -1.0; *(float *)(v5 + 1088) = -1.0; *(float *)(v5 + 1116) = 0.0; *(float *)(v5 + 1092) = 0.0; v9 = *(_DWORD *)(v5 + 132); *(float *)(v5 + 2000) = 2.0; *(float *)(v5 + 2016) = 0.0; *(float *)(v5 + 2032) = 0.0; *(float *)(v5 + 2048) = -1.0 / v12; *(float *)(v5 + 2004) = 0.0; *(float *)(v5 + 2036) = 0.0; *(float *)(v5 + 2020) = 2.0; *(float *)(v5 + 2052) = 1.0 / v11; *(float *)(v5 + 2008) = 0.0; *(float *)(v5 + 2024) = 0.0; *(float *)(v5 + 2040) = 0.00010001; *(float *)(v5 + 2056) = -0.00010001; *(float *)(v5 + 2012) = 0.0; *(float *)(v5 + 2028) = 0.0; *(float *)(v5 + 2044) = 0.0; *(float *)(v5 + 2060) = 1.0; (*(void (__stdcall **)(int, signed int, int))(*(_DWORD *)v9 + 176))(v9, 3, v5 + 2000); if ( a4 ) { v13 = (signed __int64)(v12 * *a4); v14 = (signed __int64)((1.0 - a4[2]) * v11); v15 = (signed __int64)(v12 * (a4[1] - *a4)); v16 = (signed __int64)(v11 * (a4[2] - a4[3])); } else { v13 = 0; v14 = 0; v15 = v6; v16 = v7; } v10 = *(_DWORD *)(v5 + 132); v17 = 0.0; v18 = 1.0; (*(void (__cdecl **)(int, int *))(*(_DWORD *)v10 + 188))(v10, &v13); result = (*(int (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)(v5 + 1716) + 68))(1.0, 10000.0); } return result; } //----- (00921420) -------------------------------------------------------- int __thiscall sub_921420(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[265] = a2; this[266] = a3; return result; } //----- (00921440) -------------------------------------------------------- _DWORD *__thiscall sub_921440(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // edx void *v3; // esi result = (_DWORD *)this[263]; if ( result ) { do { v2 = (_DWORD *)result[3]; v3 = dword_BA6E54; dword_BA6E54 = result; result[3] = v3; result = v2; } while ( v2 ); } this[264] = 0; this[263] = 0; return result; } //----- (00921480) -------------------------------------------------------- int __thiscall sub_921480(_DWORD **this) { return (*(int (**)(void))(*this[429] + 80))(); } //----- (009214A0) -------------------------------------------------------- int __thiscall sub_9214A0(_DWORD **this, int a2) { int v2; // eax (*(void (__stdcall **)(_DWORD, _DWORD))(*this[429] + 136))(0, 0); v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 64))(a2); if ( v2 ) (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 68))(a2, 0); } //----- (009214E0) -------------------------------------------------------- int __thiscall sub_9214E0(_DWORD **this, int a2) { int v2; // eax (*(void (__stdcall **)(_DWORD, _DWORD))(*this[429] + 120))(0, 0); v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 56))(a2); if ( v2 ) (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 60))(a2, 0); } //----- (00921520) -------------------------------------------------------- char *__cdecl sub_921520(char *Src) { char *result; // eax result = Src; if ( Src ) return (char *)strncpy_s(&byte_BA45D0, 0x100u, Src, 0xFFu); byte_BA45D0 = 0; return result; } //----- (00921550) -------------------------------------------------------- bool __thiscall sub_921550(int this, int a2) { int *v2; // ebx struct _RTL_CRITICAL_SECTION *v3; // esi DWORD v4; // eax _DWORD *v5; // edi bool v6; // zf v2 = (int *)this; v3 = (struct _RTL_CRITICAL_SECTION *)(this + 84); EnterCriticalSection((LPCRITICAL_SECTION)(this + 84)); v4 = GetCurrentThreadId(); ++v3[1].LockCount; v3[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v4; v5 = *(_DWORD **)(a2 + 40); if ( !v5 ) v5 = sub_93A1B0(a2, v2); v6 = v3[1].LockCount-- == 1; if ( v6 ) v3[1].DebugInfo = 0; LeaveCriticalSection(v3); return v5 != 0; } //----- (009215B0) -------------------------------------------------------- bool __thiscall sub_9215B0(int this, int a2) { int v2; // edi struct _RTL_CRITICAL_SECTION *v3; // esi DWORD v4; // eax _DWORD *v6; // eax bool v7; // zf _DWORD *v8; // edi v2 = this; v3 = (struct _RTL_CRITICAL_SECTION *)(this + 84); EnterCriticalSection((LPCRITICAL_SECTION)(this + 84)); v4 = GetCurrentThreadId(); ++v3[1].LockCount; v3[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v4; if ( *(_DWORD *)(a2 + 40) ) return 1; v6 = sub_93A590(a2, v2); v7 = v3[1].LockCount-- == 1; v8 = v6; if ( v7 ) v3[1].DebugInfo = 0; LeaveCriticalSection(v3); return v8 != 0; } //----- (00921610) -------------------------------------------------------- void __thiscall sub_921610(_DWORD *this, void *a2, int a3, int a4) { unsigned int v4; // ebx _DWORD *v5; // esi void *v6; // eax signed int v7; // eax void *v8; // eax void *v9; // eax void *v10; // eax void *v11; // eax void *v12; // eax void *v13; // eax void *v14; // eax void *v15; // eax void *v16; // eax void *v17; // eax void *v18; // eax void *v19; // eax void *v20; // eax void *v21; // eax void *v22; // eax void *v23; // eax void *v24; // eax void *v25; // eax void *v26; // eax _DWORD *v27; // [esp+8h] [ebp-4h] v4 = 0; v5 = a2; v27 = this; do { switch ( v4 ) { case 0u: v6 = operator new(0x44u); if ( v6 ) { v5 = sub_86A140(v6, &unk_ABE070); v7 = sub_93AA30((int)v5); v5[4] = 0; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 0; } goto LABEL_65; case 1u: v8 = operator new(0x44u); if ( v8 ) { v5 = sub_86A140(v8, &unk_ABE0B8); v7 = sub_93AA30((int)v5); v5[4] = 1; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 1; } goto LABEL_65; case 2u: case 0x16u: v18 = operator new(0x44u); if ( v18 ) { v5 = sub_86A140(v18, &unk_ABE2F8); v7 = sub_93AA30((int)v5); v5[4] = v4; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = v4; } goto LABEL_65; case 3u: v9 = operator new(0x44u); if ( v9 ) { v5 = sub_86A140(v9, &unk_ABE148); v7 = sub_93AA30((int)v5); v5[4] = 3; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 3; } goto LABEL_65; case 4u: v10 = operator new(0x44u); if ( v10 ) { v5 = sub_86A140(v10, &unk_ABE1D8); v7 = sub_93AA30((int)v5); v5[4] = 4; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 4; } goto LABEL_65; case 5u: v11 = operator new(0x44u); if ( v11 ) { v5 = sub_86A140(v11, &unk_ABE2B0); v7 = sub_93AA30((int)v5); v5[4] = 5; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 5; } goto LABEL_65; case 6u: case 7u: v5 = 0; goto LABEL_70; case 8u: v12 = operator new(0x44u); if ( v12 ) { v5 = sub_86A140(v12, &unk_ABDC80); v7 = sub_93AA30((int)v5); v5[4] = 8; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 8; } goto LABEL_65; case 9u: v13 = operator new(0x44u); if ( v13 ) { v5 = sub_86A140(v13, &unk_ABDCC8); v7 = sub_93AA30((int)v5); v5[4] = 9; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 9; } goto LABEL_65; case 0xAu: v14 = operator new(0x44u); if ( v14 ) { v5 = sub_86A140(v14, &unk_ABDD10); v7 = sub_93AA30((int)v5); v5[4] = 10; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 10; } goto LABEL_65; case 0xBu: v15 = operator new(0x44u); if ( v15 ) { v5 = sub_86A140(v15, &unk_ABDBF0); v7 = sub_93AA30((int)v5); v5[4] = 11; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 11; } goto LABEL_65; case 0xCu: v16 = operator new(0x44u); if ( v16 ) { v5 = sub_86A140(v16, &unk_ABE460); v7 = sub_93AA30((int)v5); v5[4] = 12; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 12; } goto LABEL_65; case 0xDu: v17 = operator new(0x44u); if ( v17 ) { v5 = sub_86A140(v17, &unk_ABDC38); v7 = sub_93AA30((int)v5); v5[4] = 13; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 13; } goto LABEL_65; case 0xEu: v19 = operator new(0x44u); if ( v19 ) { v5 = sub_86A140(v19, &unk_ABDF08); v7 = sub_93AA30((int)v5); v5[4] = 14; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 14; } goto LABEL_65; case 0xFu: v20 = operator new(0x44u); if ( v20 ) { v5 = sub_86A140(v20, &unk_ABDF50); v7 = sub_93AA30((int)v5); v5[4] = 15; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 15; } goto LABEL_65; case 0x10u: v21 = operator new(0x44u); if ( v21 ) { v5 = sub_86A140(v21, &unk_ABDEC0); v7 = sub_93AA30((int)v5); v5[4] = 16; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 16; } goto LABEL_65; case 0x11u: v22 = operator new(0x44u); if ( v22 ) { v5 = sub_86A140(v22, &unk_ABDE30); v7 = sub_93AA30((int)v5); v5[4] = 17; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 17; } goto LABEL_65; case 0x12u: v23 = operator new(0x44u); if ( v23 ) { v5 = sub_86A140(v23, &unk_ABDDA0); v7 = sub_93AA30((int)v5); v5[4] = 18; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 18; } goto LABEL_65; case 0x13u: v24 = operator new(0x44u); if ( v24 ) { v5 = sub_86A140(v24, &unk_ABDDE8); v7 = sub_93AA30((int)v5); v5[4] = 19; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 19; } goto LABEL_65; case 0x14u: v25 = operator new(0x44u); if ( v25 ) { v5 = sub_86A140(v25, &unk_ABDE78); v7 = sub_93AA30((int)v5); v5[4] = 20; } else { v5 = 0; v7 = sub_93AA30(0); MEMORY[0x10] = 20; } goto LABEL_65; case 0x15u: v26 = operator new(0x44u); if ( v26 ) v5 = sub_86A140(v26, &unk_ABDD58); else v5 = 0; v7 = sub_93AA30((int)v5); v5[4] = 21; LABEL_65: v5[3] = v7; break; default: break; } if ( v5 ) { operator delete(*((void **)a2 + v4)); if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, int, _DWORD))(*(_DWORD *)dword_BA6E44 + 40))( dword_BA6E44, v27[240], v27[241], v27[243], 0, a4, v5[3]) ) { operator delete(v5); v5 = 0; } *((_DWORD *)a2 + v4) = v5; } LABEL_70: ++v4; } while ( v4 < 0x16 ); } // BA6E44: using guessed type int dword_BA6E44; //----- (00921C10) -------------------------------------------------------- void *sub_921C10() { void *result; // eax FARPROC v1; // eax HMODULE v2; // eax int v3; // esi unsigned int *v4; // eax result = dword_BA6E50; if ( !dword_BA6E50 ) { v1 = (FARPROC)dword_BA6E48; if ( dword_BA6E48 || (v2 = LoadLibraryA("D3D9.DLL"), (dword_BA6E40 = v2) != 0) && (v1 = GetProcAddress(v2, "Direct3DCreate9"), (dword_BA6E48 = (int)v1) != 0) ) { v3 = ((int (__stdcall *)(signed int))v1)(32); if ( v3 ) { v4 = (unsigned int *)operator new(0x1Cu); if ( v4 ) { dword_BA6E50 = sub_9208B0(v4, v3, (int)&off_AC5068); (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); return dword_BA6E50; } dword_BA6E50 = 0; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); } } result = dword_BA6E50; } return result; } // AC5068: using guessed type void **off_AC5068; // BA6E48: using guessed type int dword_BA6E48; //----- (00921CB0) -------------------------------------------------------- int __cdecl sub_921CB0(int a1, int a2, int a3, float a4) { int result; // eax result = a1; *(float *)a1 = *(float *)a2 * a4; *(float *)(a1 + 4) = *(float *)(a2 + 12) * a4; *(float *)(a1 + 8) = *(float *)(a2 + 24) * a4; *(float *)(a1 + 16) = *(float *)(a2 + 4) * a4; *(float *)(a1 + 20) = *(float *)(a2 + 16) * a4; *(float *)(a1 + 24) = *(float *)(a2 + 28) * a4; *(float *)(a1 + 32) = *(float *)(a2 + 8) * a4; *(float *)(a1 + 36) = *(float *)(a2 + 20) * a4; *(float *)(a1 + 40) = a4 * *(float *)(a2 + 32); *(float *)(a1 + 48) = *(float *)a3; *(float *)(a1 + 52) = *(float *)(a3 + 4); *(float *)(a1 + 56) = *(float *)(a3 + 8); return result; } //----- (00921D20) -------------------------------------------------------- char *__thiscall sub_921D20(char *this) { char *v1; // edi bool v2; // zf char *v3; // esi v1 = this; v2 = (this[968] & 0x10) == 0; v3 = this + 1004; this[1004] = 0; if ( !v2 ) strcat_s(this + 1004, 0x20u, "PURE"); if ( v1[968] & 4 ) strcat_s(v3, 0x20u, " MT"); if ( v1[968] & 0x40 ) strcat_s(v3, 0x20u, " HWVP"); if ( v1[968] < 0 ) strcat_s(v3, 0x20u, " MIXVP"); if ( v1[968] & 0x20 ) strcat_s(v3, 0x20u, " SWVP"); return v3; } //----- (00921DB0) -------------------------------------------------------- signed int __cdecl sub_921DB0(int a1) { signed int result; // eax switch ( a1 ) { case 1: result = 20; break; case 2: case 3: result = 22; break; case 4: result = 23; break; case 5: case 6: result = 24; break; case 7: case 11: result = 30; break; case 8: result = 27; break; default: result = 0; break; } return result; } //----- (00921E20) -------------------------------------------------------- signed int __cdecl sub_921E20(int a1) { signed int result; // eax if ( a1 < 0 ) return 1; switch ( a1 ) { case 2: result = 2; break; case 3: result = 3; break; case 4: result = 4; break; case 5: result = 5; break; case 6: result = 6; break; case 7: result = 7; break; case 8: result = 8; break; case 9: result = 9; break; case 10: result = 10; break; case 11: result = 11; break; case 12: result = 12; break; case 13: result = 13; break; case 14: result = 14; break; case 15: result = 15; break; case 16: result = 16; break; default: result = 0; break; } return result; } //----- (00921EF0) -------------------------------------------------------- int __stdcall sub_921EF0(int a1, int a2, int a3) { int result; // eax result = a1; *(_DWORD *)(a1 + 4) = a2; *(_DWORD *)(a1 + 8) = a3; return result; } //----- (00921F10) -------------------------------------------------------- void *__thiscall sub_921F10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A448EC: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (00921F40) -------------------------------------------------------- void *__thiscall sub_921F40(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiD3DShaderInterface *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A448FC: using guessed type void *NiTListBase,NiD3DShaderInterface *>::`vftable'; //----- (00921F70) -------------------------------------------------------- void *__thiscall sub_921F70(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4490C: using guessed type void *NiTArray::`vftable'; //----- (00921FA0) -------------------------------------------------------- void *__thiscall sub_921FA0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A44914: using guessed type void *NiTArray::`vftable'; //----- (00921FD0) -------------------------------------------------------- void *__thiscall sub_921FD0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4491C: using guessed type void *NiTArray::`vftable'; //----- (00922000) -------------------------------------------------------- char __thiscall sub_922000(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // ecx double v4; // st6 double v5; // st7 _DWORD *v6; // edi bool v7; // zf char result; // al void (__stdcall ***v9)(signed int); // [esp+Ch] [ebp-Ch] signed int v10; // [esp+10h] [ebp-8h] _DWORD *v11; // [esp+14h] [ebp-4h] v1 = this; this[33] = 0; memset(this + 34, 0, 0x130u); *((float *)v1 + 248) = 1.0; v1[110] = 0; *((_BYTE *)v1 + 448) = 0; v1[240] = 0; v1[241] = 1; v1[111] = 0; v1[242] = 0; v1[243] = 0; *((_WORD *)v1 + 488) = 0; v1[312] = 0; v1[313] = 0; v1[314] = 0; v1[315] = 0; *((_WORD *)v1 + 632) = 0; v1[423] = 0; *((_WORD *)v1 + 848) = 0; v1[317] = 0; *((_BYTE *)v1 + 1272) = 0; v1[247] = -8355712; v1[249] = 0; v1[250] = 0; *((_BYTE *)v1 + 1004) = 0; v1[268] = dword_ABD48C; v1[269] = dword_ABD490; v1[270] = dword_ABD494; v1[271] = dword_ABD498; v1[272] = dword_ABD49C; v1[273] = dword_ABD4A0; v1[274] = dword_ABD48C; v1[275] = dword_ABD490; v1[276] = dword_ABD494; v1[277] = dword_ABD498; v1[278] = dword_ABD49C; v2 = dword_ABD4A0; *((float *)v1 + 288) = 0.1; *((float *)v1 + 289) = 100.0; v1[279] = v2; memset(v1 + 290, 0, 0x40u); *((float *)v1 + 305) = 1.0; *((float *)v1 + 300) = 1.0; *((float *)v1 + 295) = 1.0; v1[263] = 0; *((float *)v1 + 290) = 1.0; v1[264] = 0; v1[306] = 0; v1[307] = 0; v1[308] = 1; v1[309] = 1; *((float *)v1 + 310) = 0.0; v3 = (int)(v1 + 411); v4 = 1.0; v5 = 0.0; v11 = v1 + 411; *((float *)v1 + 311) = 1.0; v6 = v1 + 319; v10 = 4; do { *v6 = 0; v6[1] = 0; v6[2] = 0; v6[3] = 0; v6[4] = 0; v6[5] = 0; v6[6] = 0; v6[7] = 0; v6[8] = 0; v6[9] = 0; v6[10] = 0; v6[11] = 0; v6[12] = 0; v6[13] = 0; v6[14] = 0; v6[15] = 0; v6[16] = 0; v6[17] = 0; v6[18] = 0; v6[19] = 0; v6[20] = 0; v6[21] = 0; *(_DWORD *)(v3 - 16) = 0; v9 = *(void (__stdcall ****)(signed int))v3; if ( *(_DWORD *)v3 ) { if ( !InterlockedDecrement((volatile LONG *)(*(_DWORD *)v3 + 4)) && v9 ) (**v9)(1); v3 = (int)v11; *v11 = 0; v4 = 1.0; v5 = 0.0; } v3 += 4; v6 += 22; v7 = v10-- == 1; v11 = (_DWORD *)v3; } while ( !v7 ); *((float *)v1 + 471) = v5; *((float *)v1 + 475) = v5; *((float *)v1 + 479) = v5; v1[415] = 22; *((float *)v1 + 483) = v4; v1[417] = 0; v1[418] = 0; v1[430] = 0; v1[431] = 0; v1[432] = 0; v1[429] = 0; v1[433] = 0; v1[426] = 0; v1[427] = 0; v1[428] = 0; v1[532] = 0; v1[533] = 0; v1[534] = 0; v1[536] = 0; *((_WORD *)v1 + 1070) = 0; v1[537] = 0; memset(byte_BA6D60, 0, 0x76u); result = 32; dword_BA6D74 = 270540824; dword_BA6D78 = 135270416; dword_BA6D7C = 537923592; dword_BA6D80 = 538976288; byte_BA6D84 = 64; word_BA6D88 = 2064; word_BA6D92 = 4104; byte_BA6D94 = 8; dword_BA6D9C = 538972176; byte_BA6DA0 = 32; byte_BA6DA3 = 32; word_BA6DA6 = 8208; byte_BA6DA9 = 16; byte_BA6DAB = 32; byte_BA6DAD = 32; word_BA6DAF = 4128; word_BA6DB2 = 8224; byte_BA6DB1 = 16; word_BA6DC5 = 8208; dword_BA6DCE = 1075843136; dword_BA6DD2 = 276840480; return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD490: using guessed type int dword_ABD490; // ABD494: using guessed type int dword_ABD494; // ABD498: using guessed type int dword_ABD498; // ABD49C: using guessed type int dword_ABD49C; // ABD4A0: using guessed type int dword_ABD4A0; // BA6D74: using guessed type int dword_BA6D74; // BA6D78: using guessed type int dword_BA6D78; // BA6D7C: using guessed type int dword_BA6D7C; // BA6D80: using guessed type int dword_BA6D80; // BA6D84: using guessed type char byte_BA6D84; // BA6D88: using guessed type __int16 word_BA6D88; // BA6D92: using guessed type __int16 word_BA6D92; // BA6D94: using guessed type char byte_BA6D94; // BA6D9C: using guessed type int dword_BA6D9C; // BA6DA0: using guessed type char byte_BA6DA0; // BA6DA3: using guessed type char byte_BA6DA3; // BA6DA6: using guessed type __int16 word_BA6DA6; // BA6DA9: using guessed type char byte_BA6DA9; // BA6DAB: using guessed type char byte_BA6DAB; // BA6DAD: using guessed type char byte_BA6DAD; // BA6DAF: using guessed type __int16 word_BA6DAF; // BA6DB1: using guessed type char byte_BA6DB1; // BA6DB2: using guessed type __int16 word_BA6DB2; // BA6DC5: using guessed type __int16 word_BA6DC5; // BA6DCE: using guessed type int dword_BA6DCE; // BA6DD2: using guessed type int dword_BA6DD2; //----- (00922440) -------------------------------------------------------- char __thiscall sub_922440(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, void *a13) { _DWORD *v13; // ecx signed int v14; // ebx int v15; // esi void *v16; // ecx char result; // al int v18; // ecx int v19; // eax int v20; // edi void *v21; // ecx int v22; // edx signed int v23; // ecx int *v24; // edi signed int v25; // ecx int v26; // eax void *v27; // ecx unsigned int v28; // eax int v29; // ebx void *v30; // ecx void *v31; // ecx _DWORD *v32; // [esp+8h] [ebp-10h] unsigned int v33; // [esp+Ch] [ebp-Ch] int v34; // [esp+10h] [ebp-8h] _DWORD *v35; // [esp+14h] [ebp-4h] int v36; // [esp+34h] [ebp+1Ch] int v37; // [esp+38h] [ebp+20h] v35 = this; v13 = (_DWORD *)this[246]; LOBYTE(v34) = ~(unsigned __int8)((unsigned int)a5 >> 2) & 1; v32 = v13; v14 = 32; if ( a5 & 0x10 ) v14 = 16; v15 = a7; if ( !a7 ) { v15 = sub_91FAB0(v13, v34, v14); if ( !v15 ) { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Could not find desired framebuffer format", 0xFFu); nullsub_6(v16); return 0; } } v18 = sub_8B0AC0(v15); v36 = v18; switch ( v15 ) { case 1: v19 = 20; break; case 2: case 3: v19 = 22; break; case 4: v19 = 23; break; case 5: case 6: v19 = 24; break; case 7: case 11: v19 = 30; break; case 8: v19 = 27; break; default: v19 = 0; break; } v20 = a8; if ( !a8 ) { v20 = sub_91FB40((_DWORD *)v35[246], v19, v18, v14, a5 & 8); if ( !v20 ) { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Could not find desired depth/stencil format", 0xFFu); nullsub_6(v21); return 0; } } memset(a13, 0, 0x38u); *(_DWORD *)a13 = a3; *((_DWORD *)a13 + 1) = a4; *((_DWORD *)a13 + 2) = v36; v37 = sub_921E20(a6); *((_DWORD *)a13 + 4) = v37; if ( v37 == 1 ) *((_DWORD *)a13 + 5) = a6 & 0x7FFFFFFF; else *((_DWORD *)a13 + 5) = 0; *((_DWORD *)a13 + 10) = v20; *((_DWORD *)a13 + 3) = a9; *((_DWORD *)a13 + 9) = ~(_BYTE)a5 & 1; v22 = (unsigned __int8)v34; *((_DWORD *)a13 + 8) = (unsigned __int8)v34; if ( (!a6 || a6 == 1) && a10 != 1 ) { if ( a10 == 2 ) { v23 = 2; goto LABEL_28; } if ( a10 == 3 ) { v23 = 3; goto LABEL_28; } } v23 = 1; LABEL_28: *((_DWORD *)a13 + 6) = v23; v24 = (int *)((char *)a13 + 48); *((_DWORD *)a13 + 7) = a2; *((_DWORD *)a13 + 11) = a6 == 1; *((_DWORD *)a13 + 12) = a11; switch ( a12 ) { case 0: v25 = 2147483648; break; case 1: v25 = 1; break; case 2: v25 = 2; break; case 3: v25 = 4; break; case 4: v25 = 8; break; default: v25 = 0; break; } v26 = (int)v35; *((_DWORD *)a13 + 13) = v25; if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, int, int, int, unsigned int *))(*(_DWORD *)dword_BA6E44 + 44))( dword_BA6E44, *(_DWORD *)(v26 + 960), *(_DWORD *)(v26 + 964), v36, v22, v37, &v33) >= 0 ) { if ( v33 <= *((_DWORD *)a13 + 5) ) *((_DWORD *)a13 + 5) = v33 - 1; } else { nullsub_6(v27); *((_DWORD *)a13 + 4) = 0; } v28 = *((_DWORD *)a13 + 3); if ( v28 ) { if ( v28 > 3 ) *((_DWORD *)a13 + 3) = 3; } else { *((_DWORD *)a13 + 3) = 1; } v29 = *v24; if ( *((_DWORD *)a13 + 8) ) { *v24 = 0; } else { if ( !sub_91FE00((_DWORD *)v35[245], *((_DWORD *)a13 + 2), *(_DWORD *)a13, *((_DWORD *)a13 + 1), (int *)a13 + 12) ) { sub_921520("Creation failed: Could not match desired fullscreen mode"); nullsub_6(v31); return 0; } if ( v29 != *v24 ) nullsub_6(v30); } if ( *((_DWORD *)a13 + 8) ) { *((_DWORD *)a13 + 13) = 2147483648; result = 1; } else { if ( !(v32[6] & *((_DWORD *)a13 + 13)) ) *((_DWORD *)a13 + 13) = 1; result = 1; } return result; } // BA6E44: using guessed type int dword_BA6E44; //----- (00922780) -------------------------------------------------------- char __thiscall sub_922780(_DWORD **this, int a2) { _DWORD **v2; // esi void *v3; // ecx char result; // al _DWORD *v5; // eax bool v6; // zf _DWORD *v7; // edi unsigned int v8; // edx _DWORD *v9; // ecx signed int v10; // eax unsigned int v11; // eax int v12; // ST08_4 void *v13; // ecx v2 = this; if ( (*(int (__stdcall **)(_DWORD *, _DWORD **))(*this[33] + 28))(this[33], this + 34) >= 0 ) { if ( (unsigned int)v2[71] < 2 || (unsigned int)v2[72] < 2 ) { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Device does not support single-pass multi-texture", 0xFFu); nullsub_6(v13); result = 0; } else { v5 = v2[49]; v2[250] = 0; if ( (unsigned __int8)v5 & 2 ) { if ( (unsigned __int16)v5 & 0x100 ) v2[250] = (_DWORD *)4; } else { v2[250] = (_DWORD *)8; } v6 = *((_BYTE *)v2 + 976) == 0; v2[312] = v2[76]; if ( !v6 && !*((_BYTE *)v2 + 977) ) v2[312] = (_DWORD *)4; if ( (unsigned int)v2[312] >= 4 ) v2[250] = (_DWORD *)((unsigned int)v2[250] | 2); v7 = v2[83]; v8 = (unsigned int)v2[37] >> 29; v2[313] = v2[81]; v9 = v2[85]; *((_BYTE *)v2 + 1264) = BYTE2(v5) & 1; v2[314] = v9; v2[315] = v7; *((_BYTE *)v2 + 1265) = v8 & 1; v10 = 1; if ( !*(_DWORD *)(a2 + 16) ) v10 = (signed int)v2[94]; v2[423] = (_DWORD *)v10; v11 = (unsigned int)v2[42]; *((_BYTE *)v2 + 1697) = (v11 >> 19) & 1; v2[459] = (_DWORD *)-131072; v2[461] = (_DWORD *)-131072; v2[462] = (_DWORD *)-131072; v2[463] = (_DWORD *)-131072; v12 = (int)v2[71]; *((_BYTE *)v2 + 1696) = (v11 >> 18) & 1; v2[455] = v9; v2[456] = (_DWORD *)-65536; v2[457] = v9; v2[458] = v7; v2[460] = v7; v2[464] = (_DWORD *)2; sub_91C9C0(v12); sub_91C9D0((int)v2[72]); if ( (unsigned int)v2[314] < 0xFFFF0200 ) sub_91C9E0((int)v2[71]); else sub_91C9E0(16); dword_BA6E34 = 3; dword_BA6E28 = 3; dword_BA6E20[0] = 3; dword_BA6E24[0] = 3; result = 1; dword_BA6E38 = 1; dword_BA6E3C = 1; dword_BA6E30 = 1; dword_BA6E2C = 1; dword_BA6DDC[0] = 1; dword_BA6DD8[0] = 1; dword_BA6DE8 = 2; dword_BA6DE4 = 2; dword_BA6DF4 = 2; dword_BA6DF0 = 2; dword_BA6DF8 = 2; dword_BA6E00 = 1; dword_BA6DFC = 1; dword_BA6E04 = 1; dword_BA6E0C = 1; dword_BA6E08 = 1; dword_BA6E10 = 2; dword_BA6E18 = 2; dword_BA6E14 = 2; dword_BA6E1C = 1; dword_BA6DE0[0] = 0; dword_BA6DEC = 0; dword_BA6E4C = ((unsigned int)v2[49] & 0x400) != 0 ? 259 : 2; } } else { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Could not query device caps", 0xFFu); nullsub_6(v3); result = 0; } return result; } // BA6DD8: using guessed type int dword_BA6DD8[]; // BA6DDC: using guessed type int dword_BA6DDC[]; // BA6DE0: using guessed type int dword_BA6DE0[]; // BA6DE4: using guessed type int dword_BA6DE4; // BA6DE8: using guessed type int dword_BA6DE8; // BA6DEC: using guessed type int dword_BA6DEC; // BA6DF0: using guessed type int dword_BA6DF0; // BA6DF4: using guessed type int dword_BA6DF4; // BA6DF8: using guessed type int dword_BA6DF8; // BA6DFC: using guessed type int dword_BA6DFC; // BA6E00: using guessed type int dword_BA6E00; // BA6E04: using guessed type int dword_BA6E04; // BA6E08: using guessed type int dword_BA6E08; // BA6E0C: using guessed type int dword_BA6E0C; // BA6E10: using guessed type int dword_BA6E10; // BA6E14: using guessed type int dword_BA6E14; // BA6E18: using guessed type int dword_BA6E18; // BA6E1C: using guessed type int dword_BA6E1C; // BA6E20: using guessed type int dword_BA6E20[]; // BA6E24: using guessed type int dword_BA6E24[]; // BA6E28: using guessed type int dword_BA6E28; // BA6E2C: using guessed type int dword_BA6E2C; // BA6E30: using guessed type int dword_BA6E30; // BA6E34: using guessed type int dword_BA6E34; // BA6E38: using guessed type int dword_BA6E38; // BA6E3C: using guessed type int dword_BA6E3C; // BA6E4C: using guessed type int dword_BA6E4C; //----- (00922A40) -------------------------------------------------------- char __thiscall sub_922A40(char *this) { char *v1; // esi unsigned int v2; // edx int v3; // edi int v4; // eax int v5; // ecx _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // esi char *v10; // [esp+Ch] [ebp-24h] unsigned int v11; // [esp+10h] [ebp-20h] int v12; // [esp+14h] [ebp-1Ch] int v13; // [esp+18h] [ebp-18h] int v14; // [esp+1Ch] [ebp-14h] int v15; // [esp+20h] [ebp-10h] int v16; // [esp+24h] [ebp-Ch] int v17; // [esp+28h] [ebp-8h] v1 = this; v2 = 0; v10 = this; v12 = 1; v13 = 0; v14 = 2; v15 = 4; v16 = 3; v17 = 5; v11 = 0; v3 = (int)(this + 1644); do { v4 = 0; *(_DWORD *)(v3 - 16) = 0; while ( 1 ) { v5 = *(&v12 + v4); if ( *(_DWORD *)&v1[4 * (v2 + v5) + 1276] ) break; if ( (unsigned int)++v4 >= 6 ) goto LABEL_7; } *(_DWORD *)(v3 - 16) = *(_DWORD *)&v1[4 * (v2 + v5) + 1276]; LABEL_7: if ( *(_DWORD *)(v3 - 16) ) { v6 = operator new(0x70u); if ( v6 ) v7 = sub_8698C0(v6, 4u, 4u, *(_DWORD **)(v3 - 16), 1u, 1); else v7 = 0; v8 = *(_DWORD *)v3; if ( *(_DWORD **)v3 != v7 ) { if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); *(_DWORD *)v3 = v7; if ( v7 ) InterlockedIncrement(v7 + 1); } memset( (void *)(*(_DWORD *)(*(_DWORD *)v3 + 80) + **(_DWORD **)(*(_DWORD *)v3 + 92)), 255, 16 * *(_DWORD *)(*(_DWORD *)v3 + 100)); v1 = v10; v2 = v11; } v2 += 22; v3 += 4; v11 = v2; } while ( v2 < 0x58 ); if ( !*((_DWORD *)v1 + 407) ) return 0; sub_872E00(*((const void **)v1 + 407)); *((_DWORD *)v1 + 415) = *(_DWORD *)(*((_DWORD *)v1 + 407) + 16); return 1; } //----- (00922BB0) -------------------------------------------------------- char *__thiscall sub_922BB0(char *this) { char *v1; // esi char *v2; // edi void *v3; // ebx char *v4; // eax char v6; // [esp+8h] [ebp-450h] char ArgList; // [esp+208h] [ebp-250h] v1 = this; v2 = this + 448; this[448] = 0; memset(&v6, 0, 0x44Cu); if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, char *))(*(_DWORD *)dword_BA6E44 + 20))( dword_BA6E44, *((_DWORD *)v1 + 240), 0, &v6) >= 0 ) { switch ( *((_DWORD *)v1 + 241) ) { case 1: v3 = &unk_A44920; break; case 2: v3 = &unk_A44924; break; case 3: v3 = &unk_A44928; break; default: v3 = &unk_A4492C; break; } v4 = sub_921D20(v1); sub_7FF6E0(v2, 0x200u, "%s (%s-%s)", &ArgList, v3, v4); } return v2; } // BA6E44: using guessed type int dword_BA6E44; //----- (00922C70) -------------------------------------------------------- char __stdcall sub_922C70(int a1) { dword_BA7164 = a1; return 1; } // BA7164: using guessed type int dword_BA7164; //----- (00922C90) -------------------------------------------------------- int sub_922C90() { return dword_BA7164; } // BA7164: using guessed type int dword_BA7164; //----- (00922CA0) -------------------------------------------------------- void __thiscall sub_922CA0(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // eax char v4; // al int v5; // eax v2 = this; if ( a2 ) { v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v3 ) { while ( (char *)v3 != dword_BA4A28 ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_5; } v4 = 1; } else { LABEL_5: v4 = 0; } v5 = v4 != 0 ? a2 : 0; if ( v5 ) sub_9374A0(v2[433], v5); } } //----- (00922D00) -------------------------------------------------------- int __thiscall sub_922D00(_DWORD **this, int a2) { int result; // eax result = a2; if ( a2 ) { if ( *(_DWORD *)(a2 + 28) ) result = (*(int (__stdcall **)(int))(*this[426] + 24))(a2); } return result; } //----- (00922D30) -------------------------------------------------------- void __stdcall sub_922D30(int a1) { void *v1; // ST00_4 operator delete(*(void **)(a1 + 32)); v1 = *(void **)(a1 + 40); *(_DWORD *)(a1 + 28) = 0; *(_DWORD *)(a1 + 36) = 4; *(_DWORD *)(a1 + 32) = 0; operator delete(v1); *(_DWORD *)(a1 + 40) = 0; } //----- (00922D70) -------------------------------------------------------- char __thiscall sub_922D70(void *this, int a2, void *Dst, int a4, int a5, int a6) { int v6; // edi _WORD *v7; // esi char v8; // al signed int v9; // ecx int v10; // eax unsigned __int16 v11; // cx unsigned __int16 v12; // ax int v13; // eax int v14; // ecx int v15; // ecx int v16; // ebx int v17; // ST30_4 int v18; // ecx unsigned int v19; // ebx unsigned int v20; // eax int *v21; // eax int v22; // eax int v23; // ebx int v24; // edx unsigned __int16 v26; // [esp+Ch] [ebp-2Ch] unsigned __int16 v27; // [esp+10h] [ebp-28h] int v28; // [esp+18h] [ebp-20h] unsigned __int16 v29; // [esp+1Ch] [ebp-1Ch] unsigned __int16 v30; // [esp+20h] [ebp-18h] int v31; // [esp+24h] [ebp-14h] int v32; // [esp+28h] [ebp-10h] int v33; // [esp+2Ch] [ebp-Ch] void *v34; // [esp+30h] [ebp-8h] void *v35; // [esp+34h] [ebp-4h] int v36; // [esp+40h] [ebp+8h] char v37; // [esp+43h] [ebp+Bh] void *Dsta; // [esp+44h] [ebp+Ch] int v39; // [esp+4Ch] [ebp+14h] v6 = a2; v34 = this; if ( !a2 ) return 0; v7 = Dst; if ( !Dst ) return 0; v8 = sub_9366F0((_DWORD *)a2); v37 = v8; if ( !(_BYTE)a6 && v8 && (*((_WORD *)Dst + 25) & 0xF000) == 0x4000 ) return 1; v9 = 0; if ( *((_DWORD *)Dst + 10) ) v9 = 0x400000; if ( *((_DWORD *)Dst + 9) != 0 ) v9 |= (unsigned int)sub_800000; *(_DWORD *)v6 = v9 | ((*((_WORD *)Dst + 24) & 0x3F) << 24); v27 = (*(int (__thiscall **)(void *))(*(_DWORD *)Dst + 64))(Dst); v26 = *((_WORD *)Dst + 6); v35 = 0; v33 = 0; v10 = (*(int (__thiscall **)(void *))(*(_DWORD *)Dst + 4))(Dst); if ( v10 ) { while ( (char *)v10 != dword_BA4A70 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_13; } v31 = (*(unsigned __int16 (__thiscall **)(void *))(*(_DWORD *)Dst + 76))(Dst); v32 = 3 * v31; v30 = *((_WORD *)Dst + 32); v35 = (void *)*((_DWORD *)Dst + 18); v33 = 0; v29 = 1; v14 = 3 * *((unsigned __int16 *)Dst + 32); } else { LABEL_13: if ( !sub_402B70((int)dword_BA4AA4, (int)Dst) ) goto LABEL_16; v11 = (*(int (__thiscall **)(void *))(*(_DWORD *)Dst + 76))(Dst); v35 = (void *)*((_DWORD *)Dst + 19); v33 = *((_DWORD *)Dst + 18); v12 = *((_WORD *)Dst + 34); LOWORD(v31) = v11; v29 = v12; v13 = 2 * v12; v32 = v13 + v11; v30 = *((_WORD *)Dst + 32); v14 = v13 + v30; } v28 = v14; LABEL_16: v15 = a5; if ( a5 ) Dsta = *(void **)(a5 + 32); else Dsta = (void *)1; v16 = v7[25] & 0xFFF; if ( a4 ) { v17 = *(_DWORD *)(a4 + 24); if ( v17 != sub_938380(*((_DWORD **)v34 + 430)) ) { v16 |= 3u; *(_DWORD *)(a4 + 24) = sub_938380(*((_DWORD **)v34 + 430)); } v15 = a5; } if ( (v7[25] & 0xF000) == -32768 || (_BYTE)a6 ) v16 = 4095; if ( v37 ) { if ( Dsta == *(void **)(v6 + 28) ) goto LABEL_36; sub_936750((void **)v6, Dsta); } else { v18 = *(_DWORD *)(v6 + 4); v19 = 0; a6 = *(_DWORD *)(v6 + 4); if ( Dsta ) { while ( 1 ) { (*(void (__stdcall **)(int, unsigned int))(*(_DWORD *)v18 + 28))(v6, v19++); if ( v19 >= (unsigned int)Dsta ) break; v18 = a6; } } sub_936750((void **)v6, Dsta); *(_DWORD *)(v6 + 52) = 0; } v15 = a5; v16 = 4095; LABEL_36: *(_DWORD *)(v6 + 24) = v26; *(_DWORD *)(v6 + 20) = v27; *(_DWORD *)(v6 + 64) = v30; *(_DWORD *)(v6 + 60) = (unsigned __int16)v31; *(_DWORD *)(v6 + 72) = v33; *(_DWORD *)(v6 + 76) = v35; *(_DWORD *)(v6 + 68) = v29; if ( v16 & 0xFFEF ) { v20 = 0; v36 = 0; if ( Dsta ) { while ( 1 ) { a6 = v20 >= *(_DWORD *)(v6 + 28) ? 0 : *(_DWORD *)(*(_DWORD *)(v6 + 36) + 4 * v20); if ( (!v15 || !(*(int (__stdcall **)(_WORD *, int, _DWORD, int, int, unsigned int, _DWORD))(*(_DWORD *)v15 + 92))( v7, a4, 0, v16, a6, v20, 0)) && (Dsta != (void *)1 || !sub_9385C0(*((void **)v34 + 430), (int)v7, (_DWORD *)a4, v16, a6, 0)) ) { return 0; } if ( ++v36 >= (unsigned int)Dsta ) break; v15 = a5; v20 = v36; } } } if ( !v35 || !(v16 & 0x30) ) goto LABEL_53; v21 = *(int **)(v6 + 48); a6 = *(_DWORD *)(v6 + 44); v39 = (int)v21; v22 = sub_93B2A0( *((_DWORD *)v34 + 431), v16, v35, v32, v28, v21, (unsigned int *)&a6, 1, (void *)(*(_BYTE *)(v6 + 16) != 0 ? 0x10 : 0)); v23 = v22; if ( v22 ) { if ( v39 != v22 ) { sub_936720((_DWORD *)v6); v24 = a6; *(_DWORD *)(v6 + 48) = v23; *(_DWORD *)(v6 + 40) = v32; *(_DWORD *)(v6 + 44) = v24; } LABEL_53: v7[25] &= 0xF000u; return 1; } return 0; } //----- (009230C0) -------------------------------------------------------- char __thiscall sub_9230C0(void *this, int *a2, int a3, int a4, int a5, _DWORD *a6, int a7) { int *v7; // esi char v8; // al signed int v10; // edx int v11; // edi int v12; // ecx unsigned __int16 v13; // ax void *v14; // edx __int16 v15; // bx int v16; // ecx unsigned int v17; // ebx unsigned int v18; // eax int v19; // ebx int *v20; // ebx void *v21; // ST18_4 int v22; // eax int v23; // edi int v24; // ecx int v25; // [esp+8h] [ebp-20h] unsigned __int16 v26; // [esp+Ch] [ebp-1Ch] void *v27; // [esp+10h] [ebp-18h] void *v28; // [esp+14h] [ebp-14h] unsigned __int16 v29; // [esp+18h] [ebp-10h] int v30; // [esp+1Ch] [ebp-Ch] int v31; // [esp+20h] [ebp-8h] int v32; // [esp+24h] [ebp-4h] char v33; // [esp+33h] [ebp+Bh] unsigned int v34; // [esp+3Ch] [ebp+14h] v7 = a2; v27 = this; if ( !a2 || !a3 ) return 0; v8 = sub_9366F0(a2); v33 = v8; if ( !(_BYTE)a7 && v8 && (*(_WORD *)(a3 + 50) & 0xF000) == 0x4000 ) return 1; v10 = 0; if ( *(_DWORD *)(a3 + 40) ) v10 = 0x400000; if ( *(_DWORD *)(a3 + 36) != 0 ) v10 |= (unsigned int)sub_800000; *v7 = v10 | ((*(_WORD *)(a3 + 48) & 0x3F) << 24); v11 = a5; v12 = *(unsigned __int16 *)(a5 + 30); v26 = *(_WORD *)(a5 + 28); v25 = *(_DWORD *)(a5 + 24); v13 = *(_WORD *)(a5 + 34); v28 = *(void **)(a5 + 20); v29 = v13; v31 = *(unsigned __int16 *)(a5 + 30); if ( v13 ) { v30 = v12 + 2 * v13; v12 = *(unsigned __int16 *)(a5 + 30); } else { v30 = 3 * v12; v29 = 1; } if ( a6 ) { v14 = (void *)a6[8]; v34 = a6[8]; } else { v34 = 1; v14 = (void *)1; } v15 = *(_WORD *)(a3 + 50); v32 = v15 & 0xFFF; if ( (v15 & 0xF000) == 0x8000 || (_BYTE)a7 ) v32 = 4095; if ( v33 ) { if ( v14 == (void *)v7[7] ) goto LABEL_30; sub_936750((void **)v7, v14); } else { v16 = v7[1]; v17 = 0; a7 = v7[1]; if ( v14 ) { while ( 1 ) { (*(void (__stdcall **)(int *, unsigned int))(*(_DWORD *)v16 + 28))(v7, v17++); if ( v17 >= v34 ) break; v16 = a7; } v14 = (void *)v34; } sub_936750((void **)v7, v14); v7[13] = 0; } v14 = (void *)v34; v12 = v31; v32 = 4095; LABEL_30: v7[5] = v26; v7[6] = v26; v7[15] = v12; v7[16] = v12; v7[18] = v25; v7[19] = (int)v28; v7[17] = v29; if ( v32 & 0xFFEF ) { v18 = 0; a7 = 0; if ( v14 ) { while ( 1 ) { v19 = v18 >= v7[7] ? 0 : *(_DWORD *)(v7[9] + 4 * v18); if ( (!a6 || !(*(int (__stdcall **)(int, int, int, int, int, unsigned int, _DWORD))(*a6 + 92))( a3, a4, v11, v32, v19, v18, 0)) && (v34 != 1 || !sub_938C50(*((void **)v27 + 430), a3, a4, v11, v32, v19, 0)) ) { return 0; } if ( ++a7 >= v34 ) break; v18 = a7; } } } if ( v32 & 0x30 ) { v20 = (int *)v7[12]; v21 = (void *)(*((_BYTE *)v7 + 16) != 0 ? 0x10 : 0); a7 = v7[11]; v22 = sub_93B2A0(*((_DWORD *)v27 + 431), (int)v20, v28, v30, v30, v20, (unsigned int *)&a7, 1, v21); v23 = v22; if ( !v22 ) return 0; if ( v20 != (int *)v22 ) { sub_936720(v7); v24 = a7; v7[12] = v23; v7[10] = v30; v7[11] = v24; } } return 1; } //----- (00923350) -------------------------------------------------------- DWORD __thiscall sub_923350(int this) { int v1; // edi int v2; // esi DWORD result; // eax v1 = this; v2 = this + 20; EnterCriticalSection((LPCRITICAL_SECTION)(this + 20)); *(_DWORD *)(v2 + 24) = GetCurrentThreadId(); ++*(_DWORD *)(v2 + 28); if ( *(_DWORD *)(v1 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 256))(v1); EnterCriticalSection((LPCRITICAL_SECTION)(v1 + 52)); result = GetCurrentThreadId(); ++*(_DWORD *)(v1 + 80); *(_DWORD *)(v1 + 76) = result; return result; } //----- (009233A0) -------------------------------------------------------- void __thiscall sub_9233A0(int this) { int v1; // esi bool v2; // zf v1 = this; v2 = *(_DWORD *)(this + 80) == 1; --*(_DWORD *)(v1 + 80); if ( v2 ) *(_DWORD *)(this + 76) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(this + 52)); if ( *(_DWORD *)(v1 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v1 + 260))(v1); v2 = (*(_DWORD *)(v1 + 48))-- == 1; if ( v2 ) *(_DWORD *)(v1 + 44) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 20)); } //----- (009233F0) -------------------------------------------------------- char __thiscall sub_9233F0(_DWORD *this, int a2, int a3, int a4, int a5) { int v5; // ebx unsigned int v6; // edi _DWORD *v7; // esi int v8; // ecx int v9; // eax unsigned int v10; // edi int v11; // ecx char v13; // [esp+Ch] [ebp-24h] char v14; // [esp+10h] [ebp-20h] char v15; // [esp+14h] [ebp-1Ch] char v16; // [esp+18h] [ebp-18h] _BYTE *v17; // [esp+1Ch] [ebp-14h] int v18; // [esp+20h] [ebp-10h] int v19; // [esp+24h] [ebp-Ch] int v20; // [esp+28h] [ebp-8h] void *Dst; // [esp+2Ch] [ebp-4h] v5 = a5; v6 = 0; v7 = this; v17 = this; v20 = 0; v18 = 0; Dst = 0; v19 = 0; if ( !a5 || !(*(unsigned __int8 (__thiscall **)(int, int *, void **))(*(_DWORD *)a5 + 96))(a5, &v18, &Dst) ) { if ( a4 && *(_WORD *)(a4 + 32) > 4u ) return 0; v8 = v7[430]; Dst = (void *)1; sub_938510(a3, a4, &v20, &v19, &v13, &v14, &v15, &v16, &a5); } sub_936750((void **)a2, Dst); if ( v20 ) { sub_936880((_DWORD *)a2, v20); if ( *(_DWORD *)(a2 + 28) > 0u ) **(_DWORD **)(a2 + 32) = v19; } else { sub_9368B0((_DWORD *)a2, v18); if ( (unsigned int)Dst > 0 ) { do { v9 = (*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)v5 + 80))(v5, v6); if ( v6 < *(_DWORD *)(a2 + 28) ) *(_DWORD *)(*(_DWORD *)(a2 + 32) + 4 * v6) = v9; ++v6; } while ( v6 < (unsigned int)Dst ); } v6 = 0; } if ( *(_DWORD *)(a3 + 40) ) v6 = 0x400000; if ( *(_DWORD *)(a3 + 36) != 0 ) v6 |= (unsigned int)sub_800000; *(_DWORD *)a2 = v6 | ((*(_WORD *)(a3 + 48) & 0x3F) << 24); if ( v5 && v17[976] ) *(_BYTE *)(a2 + 16) = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 88))(v5); v10 = 0; if ( !Dst ) return 1; while ( 1 ) { v11 = *((_DWORD *)v17 + 430); if ( !sub_938390((_DWORD *)a2, v10) ) break; if ( ++v10 >= (unsigned int)Dst ) return 1; } for ( ; v10; --v10 ) (*(void (__stdcall **)(int, unsigned int))(**(_DWORD **)(a2 + 4) + 28))(a2, v10); return 0; } //----- (00923560) -------------------------------------------------------- char __thiscall sub_923560(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; if ( !a2[10] ) { v3 = sub_93BEA0((int)a2, a2, (int)this); if ( !v3 ) return 0; sub_815C70(v2 + 434, (int)a2, (int)v3); } return 1; } //----- (009235A0) -------------------------------------------------------- char __thiscall sub_9235A0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // eax v2 = this; if ( !a2[10] ) { v3 = sub_93C0B0(a2, (int)this); if ( !v3 ) return 0; sub_815C70(v2 + 438, (int)a2, (int)v3); } return 1; } //----- (009235E0) -------------------------------------------------------- char __thiscall sub_9235E0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi int v3; // ecx _DWORD *v4; // eax v2 = this; v3 = a2[10]; if ( !v3 || !(*(int (**)(void))(*(_DWORD *)v3 + 32))() ) { v4 = sub_93C370(a2); if ( !v4 ) return 0; sub_815C70(v2 + 442, (int)a2, (int)v4); } return 1; } //----- (00923630) -------------------------------------------------------- int __thiscall sub_923630(_BYTE *this, int a2, _DWORD *a3) { _BYTE *v3; // ebx int v5; // eax int v6; // esi int v7; // edx signed int v8; // edi int v9; // eax signed int v10; // eax void *v11; // ecx int v12; // edi int v13; // [esp+4h] [ebp-8h] int v14; // [esp+8h] [ebp-4h] v3 = this; *a3 = 0; if ( !a2 ) return 0; v5 = (*(int (**)(void))(*(_DWORD *)a2 + 32))(); v6 = v5; if ( !v5 || (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 44))(v5) ) return 0; v7 = *(_DWORD *)v6; v8 = 0; if ( v3[1265] ) { v9 = (*(int (__thiscall **)(int))(v7 + 20))(v6); v8 = 0x2000; } else { v9 = (*(int (__thiscall **)(int))(v7 + 40))(v6); } if ( !v9 ) return 0; v10 = (*(int (__stdcall **)(int, _DWORD, int *, _DWORD, signed int))(*(_DWORD *)v9 + 76))(v9, 0, &v13, 0, v8); if ( v10 < 0 ) { sub_93C3F0(v10); nullsub_6(v11); return 0; } v12 = v14; *a3 = v13; (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v6 + 48))(v6, 1); return v12; } //----- (00923700) -------------------------------------------------------- char __thiscall sub_923700(_BYTE *this, int a2) { _BYTE *v2; // ebx int v4; // esi int v5; // eax int (__thiscall *v6)(int); // edx int v7; // edi signed int v8; // eax void *v9; // ecx int v10; // eax signed int v11; // eax void *v12; // ecx v2 = this; if ( !a2 ) return 0; v4 = (*(int (**)(void))(*(_DWORD *)a2 + 32))(); if ( !v4 || !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v4 + 44))(v4) ) return 0; v5 = *(_DWORD *)v4; if ( v2[1265] ) v6 = *(int (__thiscall **)(int))(v5 + 20); else v6 = *(int (__thiscall **)(int))(v5 + 40); v7 = v6(v4); if ( !v7 ) return 0; v8 = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v7 + 80))(v7, 0); if ( v8 < 0 ) { sub_93C3F0(v8); nullsub_6(v9); return 0; } if ( !v2[1265] ) { v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 20))(v4); if ( !v10 ) return 0; v11 = (*(int (__stdcall **)(_DWORD, int, int))(**((_DWORD **)v2 + 33) + 124))(*((_DWORD *)v2 + 33), v7, v10); if ( v11 < 0 ) { sub_93C3F0(v11); nullsub_6(v12); return 0; } } (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 48))(v4, 0); return 1; } //----- (009237E0) -------------------------------------------------------- bool __thiscall sub_9237E0(void *this, int a2, int a3) { int v3; // esi int v4; // ebx int v5; // edi int v6; // eax int v8; // ST00_4 v3 = a2; v4 = (int)this; if ( !a2 ) return 0; v5 = a3; if ( !a3 ) return 0; v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( !v6 ) return 0; while ( (_UNKNOWN *)v6 != &unk_BA4A78 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } v8 = *(_DWORD *)(v4 + 132); a2 = v3; return sub_92B6B0(v4, v3, v8, (_DWORD **)&a2, v5) != 0; } //----- (00923840) -------------------------------------------------------- char __thiscall sub_923840(_DWORD *this, int a2) { *(_DWORD *)(a2 + 40) = 0; return sub_916F40(this + 438, a2); } //----- (00923860) -------------------------------------------------------- char __thiscall sub_923860(_DWORD *this, int a2) { *(_DWORD *)(a2 + 40) = 0; return sub_916F40(this + 434, a2); } //----- (00923880) -------------------------------------------------------- char __thiscall sub_923880(_DWORD *this, int a2) { *(_DWORD *)(a2 + 40) = 0; return sub_916F40(this + 442, a2); } //----- (009238A0) -------------------------------------------------------- bool __thiscall sub_9238A0(_BYTE *this, _DWORD *a2, int a3) { _BYTE *v3; // ebx bool result; // al int v5; // eax int v6; // eax int v7; // esi int v8; // eax v3 = this; if ( *(_DWORD *)(a2[46] + 60) ) return 0; v5 = a2[47]; if ( !v5 ) return 0; v6 = *(_DWORD *)(v5 + 12); if ( !v6 ) return 0; if ( *(_DWORD *)(*(_DWORD *)(v6 + 12) + 40) || (*(int (__thiscall **)(_BYTE *))(*(_DWORD *)this + 64))(this) & 2 ) return 1; v7 = a3; if ( !a3 ) v7 = sub_402BA0((int)&unk_BA6D54, a2[48]); result = 1; if ( *((_DWORD *)v3 + 315) <= 0xFFFE0000 || !v7 || !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v7 + 84))(v7) ) { if ( !v3[977] || !v7 || !(*(int (__thiscall **)(int))(*(_DWORD *)v7 + 60))(v7) || (v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 60))(v7), !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v8 + 88))(v8)) ) { result = 0; } } return result; } //----- (00923970) -------------------------------------------------------- LONG __thiscall sub_923970(_DWORD *this, int a2, LONG a3) { _DWORD *v3; // esi int v4; // ebx _DWORD *v5; // edi _DWORD *v6; // edi LONG result; // eax v3 = this; v4 = (*(int (__thiscall **)(_DWORD *, int))(*this + 4))(this, a2); v5 = *(_DWORD **)(v3[2] + 4 * v4); if ( v5 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v3 + 8))(v3, a2, v5[1]) ) { v5 = (_DWORD *)*v5; if ( !v5 ) goto LABEL_4; } (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v3 + 16))(v3, v5); if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 12))(v3, v5, a2); } else { LABEL_4: v6 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v3 + 20))(v3); if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); (*(void (__thiscall **)(_DWORD *, _DWORD *, int))(*v3 + 12))(v3, v6, a2); *v6 = *(_DWORD *)(v3[2] + 4 * v4); *(_DWORD *)(v3[2] + 4 * v4) = v6; ++v3[3]; } result = a3; if ( a3 ) { result = InterlockedDecrement((volatile LONG *)(a3 + 4)); if ( !result ) { if ( a3 ) result = (**(int (__thiscall ***)(LONG, signed int))a3)(a3, 1); } } return result; } //----- (00923A50) -------------------------------------------------------- int __cdecl sub_923A50(int a1, int a2) { return sub_921CB0(a1, a2, a2 + 36, *(float *)(a2 + 48)); } //----- (00923A70) -------------------------------------------------------- int __thiscall sub_923A70(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A448EC: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A44958: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (00923AB0) -------------------------------------------------------- int __thiscall sub_923AB0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiD3DShaderInterface *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiD3DShaderInterface *>::`vftable'; return result; } // A448FC: using guessed type void *NiTListBase,NiD3DShaderInterface *>::`vftable'; // A44968: using guessed type void *NiTPointerListBase,NiD3DShaderInterface *>::`vftable'; //----- (00923AF0) -------------------------------------------------------- void **__thiscall sub_923AF0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4484C: using guessed type void *NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; //----- (00923B30) -------------------------------------------------------- void **__thiscall sub_923B30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4484C: using guessed type void *NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; // A44DA0: using guessed type void *NiTPointerMap::`vftable'; //----- (00923B70) -------------------------------------------------------- void **__thiscall sub_923B70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,HWND__ *,NiPointer>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4486C: using guessed type void *NiTMapBase,HWND__ *,NiPointer>::`vftable'; //----- (00923BB0) -------------------------------------------------------- void **__thiscall sub_923BB0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,HWND__ *,NiPointer>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4486C: using guessed type void *NiTMapBase,HWND__ *,NiPointer>::`vftable'; // A44DC0: using guessed type void *NiTPointerMap>::`vftable'; //----- (00923BF0) -------------------------------------------------------- void **__thiscall sub_923BF0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4488C: using guessed type void *NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; //----- (00923C30) -------------------------------------------------------- void **__thiscall sub_923C30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4488C: using guessed type void *NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; // A44DE0: using guessed type void *NiTPointerMap::`vftable'; //----- (00923C70) -------------------------------------------------------- void **__thiscall sub_923C70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A448AC: using guessed type void *NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; //----- (00923CB0) -------------------------------------------------------- void **__thiscall sub_923CB0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A448AC: using guessed type void *NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; // A44E00: using guessed type void *NiTPointerMap::`vftable'; //----- (00923CF0) -------------------------------------------------------- void **__thiscall sub_923CF0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A448CC: using guessed type void *NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; //----- (00923D30) -------------------------------------------------------- void **__thiscall sub_923D30(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A448CC: using guessed type void *NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; // A44E20: using guessed type void *NiTPointerMap::`vftable'; //----- (00923D70) -------------------------------------------------------- void *__thiscall sub_923D70(void *this, char a2) { void *v2; // esi v2 = this; sub_923A70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00923DA0) -------------------------------------------------------- void *__thiscall sub_923DA0(void *this, char a2) { void *v2; // esi v2 = this; sub_923AB0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00923DD0) -------------------------------------------------------- char __thiscall sub_923DD0(char *this) { char *v1; // esi int v2; // edi _DWORD *v3; // eax _DWORD *v4; // eax int v5; // ebx char v6; // cl _DWORD *v7; // eax _DWORD *v8; // eax int v9; // edi int v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] _DWORD *v14; // [esp+18h] [ebp-4h] v1 = this; sub_921610(this, this + 1276, 0, 3); sub_921610(v1, v1 + 1364, 1, 3); sub_921610(v1, v1 + 1452, 0, 5); sub_921610(v1, v1 + 1540, 1, 5); sub_922A40(v1); v2 = *((_DWORD *)v1 + 407); v3 = operator new(0x70u); if ( v3 ) { v4 = sub_8698C0(v3, 2u, 1u, (_DWORD *)v2, 1u, 1); v5 = (int)v4; if ( v4 ) InterlockedIncrement(v4 + 1); } else { v5 = 0; } v6 = *(_BYTE *)(v2 + 1); v7 = (_DWORD *)(*(_DWORD *)(v5 + 80) + **(_DWORD **)(v5 + 92)); if ( v6 == 16 ) { *v7 = -65536; } else if ( v6 == 32 ) { *v7 = 0; v7[1] = -1; } v13 = 0; v12 = 0; v11 = 6; v8 = sub_865FA0(v5, &v11); v9 = *((_DWORD *)v1 + 446); v14 = v8; if ( (_DWORD *)v9 != v8 ) { if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v8 = v14; } *((_DWORD *)v1 + 446) = v8; if ( v8 ) InterlockedIncrement(v8 + 1); } if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); return 1; } //----- (00923F10) -------------------------------------------------------- _DWORD *__thiscall sub_923F10(_DWORD **this, int a2, unsigned int a3, int a4) { _DWORD **v4; // esi _DWORD *result; // eax int v6; // eax int v7; // edi int v8; // eax int v9; // eax v4 = this; if ( a2 && (v6 = (*(int (__stdcall **)(_DWORD))(*this[416] + 112))(0), v7 = sub_8B4B70((int)&unk_BA6EC8, v6), v8 = sub_93AA30(a2), (v9 = sub_91FB40(v4[246], *(_DWORD *)(v7 + 28), v8, a3, a4)) != 0) ) { result = sub_93B250(v9); } else { result = 0; } return result; } //----- (00923F80) -------------------------------------------------------- char __thiscall sub_923F80(int this, int a2, int a3) { int *v3; // esi int v4; // ebx int v5; // esi int v6; // eax char v7; // al int v8; // ebx int v9; // eax char v10; // al void *v11; // ecx void *v13; // ecx void *v14; // ecx int v15; // ebx int v16; // eax char v17; // al int *v18; // [esp+Ch] [ebp-4h] v3 = (int *)this; v18 = (int *)this; if ( *(_BYTE *)(this + 1272) ) return 1; sub_92AC40(*(_DWORD *)(this + 132), 1); sub_92AC40(v3[33], 2); sub_92AC40(v3[33], 3); v4 = 0; if ( !(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2) ) { LABEL_12: v8 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 116))(a2); if ( !v8 ) goto LABEL_37; v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 16))(v8); if ( v9 ) { while ( (_UNKNOWN *)v9 != &unk_BA6E90 ) { v9 = *(_DWORD *)(v9 + 4); if ( !v9 ) goto LABEL_16; } v10 = 1; } else { LABEL_16: v10 = 0; } if ( v10 != 0 ? v8 : 0 ) { if ( !(*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)(v10 != 0 ? v8 : 0) + 40))(v3[33]) ) { (*(void (__thiscall **)(int *, int, int))(*v3 + 288))(v3, v3[417], a3); nullsub_6(v11); return 0; } } else { LABEL_37: if ( !sub_92AC90(v3[33]) ) { (*(void (__thiscall **)(int *, int, int))(*v3 + 288))(v3, v3[417], a3); nullsub_6(v14); return 0; } } v3[417] = a2; v15 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 112))(a2, 0); if ( v15 ) { v16 = (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 16))(v15); if ( v16 ) { while ( (_UNKNOWN *)v16 != &unk_BA6EC8 ) { v16 = *(_DWORD *)(v16 + 4); if ( !v16 ) goto LABEL_29; } v17 = 1; } else { LABEL_29: v17 = 0; } if ( v17 != 0 ? v15 : 0 ) v3[418] = a2; } (*(void (__thiscall **)(int *, _DWORD, int))(*v3 + 276))(v3, 0, a3); return 1; } while ( 1 ) { v5 = (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 112))(a2, v4); if ( v5 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 16))(v5); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E80 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_7; } v7 = 1; } else { LABEL_7: v7 = 0; } if ( (v7 != 0 ? v5 : 0) && !(*(unsigned __int8 (__stdcall **)(int, int))(*(_DWORD *)(v7 != 0 ? v5 : 0) + 36))(v18[33], v4) ) { break; } } if ( ++v4 >= (unsigned int)(*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2) ) { v3 = v18; goto LABEL_12; } } (*(void (__thiscall **)(int *, int, int))(*v18 + 288))(v18, v18[417], a3); nullsub_6(v13); return 0; } //----- (009241D0) -------------------------------------------------------- char __thiscall sub_9241D0(_DWORD **this) { int v1; // ebx int (*v2)(void); // edx int v3; // eax int v4; // edi volatile LONG *v5; // esi int v6; // eax char v7; // al _DWORD *v8; // eax volatile LONG **v9; // ecx _DWORD *v10; // edx bool v11; // bl int (*v12)(void); // eax unsigned int v13; // esi volatile LONG *v15; // [esp+4h] [ebp-Ch] int v16; // [esp+8h] [ebp-8h] _DWORD **v17; // [esp+Ch] [ebp-4h] v1 = (int)this; v2 = *(int (**)(void))(*this[417] + 84); v17 = this; v16 = 0; if ( v2() ) { do { v3 = (*(int (__stdcall **)(int))(**(_DWORD **)(v1 + 1668) + 112))(v16); v4 = v3; if ( v3 ) { v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 16))(v3); if ( v6 ) { while ( (_UNKNOWN *)v6 != &unk_BA6E80 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) goto LABEL_7; } v7 = 1; } else { LABEL_7: v7 = 0; } v5 = (volatile LONG *)(v7 != 0 ? v4 : 0); } else { v5 = 0; } if ( (*(unsigned __int8 (__thiscall **)(volatile LONG *))(*v5 + 20))(v5) ) { InterlockedIncrement(v5 + 1); v8 = *(_DWORD **)(v1 + 1792); if ( v8 ) { while ( 1 ) { v9 = (volatile LONG **)(v8 + 2); v10 = v8; v8 = (_DWORD *)*v8; if ( v5 == *v9 ) break; if ( !v8 ) goto LABEL_13; } } else { LABEL_13: v10 = 0; } v11 = v10 == 0; if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); if ( v11 ) { v15 = v5; InterlockedIncrement(v5 + 1); sub_8B8EC0(v17 + 447, (int *)&v15); if ( !InterlockedDecrement(v5 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v5)(v5, 1); } v1 = (int)v17; } v12 = *(int (**)(void))(**(_DWORD **)(v1 + 1668) + 84); v13 = ++v16; } while ( v13 < v12() ); } return 1; } //----- (00924300) -------------------------------------------------------- char __thiscall sub_924300(void *this, int a2) { void *v2; // esi unsigned int v3; // ebx int v5; // eax int v6; // esi unsigned int v7; // ebx int v8; // eax int v9; // eax int v10; // eax char v11; // bl int v12; // eax int v13; // esi int v14; // eax char v15; // al int v16; // eax unsigned int v17; // [esp+Ch] [ebp-34h] void *v18; // [esp+10h] [ebp-30h] int v19; // [esp+14h] [ebp-2Ch] unsigned int v20; // [esp+18h] [ebp-28h] unsigned int v21; // [esp+1Ch] [ebp-24h] int v22; // [esp+2Ch] [ebp-14h] int v23; // [esp+34h] [ebp-Ch] int v24; // [esp+38h] [ebp-8h] v2 = this; v18 = this; v3 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 84))(a2); v17 = v3; if ( v3 > (*(int (__thiscall **)(void *))(*(_DWORD *)v2 + 132))(v2) ) return 0; v20 = 0; if ( v3 ) { do { v5 = (*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)a2 + 112))(a2, v20); v6 = v5; if ( !v5 || !*(_DWORD *)(v5 + 12) ) return 0; v7 = 0; v19 = 0; if ( v20 ) { do { v8 = (*(int (__thiscall **)(int, unsigned int))(*(_DWORD *)a2 + 112))(a2, v7); if ( (*(int (__stdcall **)(_DWORD, unsigned int *))(**(_DWORD **)(v8 + 12) + 48))(*(_DWORD *)(v8 + 12), &v21) < 0 ) return 0; if ( v22 ) return 0; v9 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 4))(v6); if ( v9 != v23 ) return 0; v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 8))(v6); if ( v10 != v24 ) return 0; if ( !(*(unsigned __int8 (**)(void))(*(_DWORD *)v18 + 136))() ) { if ( v21 < 0x76 ) v11 = byte_BA6D60[v21]; else v11 = 0; if ( v11 != *(_BYTE *)((*(int (__thiscall **)(int))(*(_DWORD *)v6 + 12))(v6) + 1) ) return 0; v7 = v19; } v19 = ++v7; } while ( v7 < v20 ); } } while ( ++v20 < v17 ); } v12 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 116))(a2); v13 = v12; if ( v12 ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v12 + 16))(v12); if ( v14 ) { while ( (_UNKNOWN *)v14 != &unk_BA6E90 ) { v14 = *(_DWORD *)(v14 + 4); if ( !v14 ) goto LABEL_23; } v15 = 1; } else { LABEL_23: v15 = 0; } v16 = v15 != 0 ? v13 : 0; if ( v16 ) { if ( !*(_DWORD *)(v16 + 12) ) return 0; } } return 1; } //----- (00924480) -------------------------------------------------------- bool __thiscall sub_924480(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi int v4; // edi bool result; // al int v6; // [esp+4h] [ebp-44h] int v7; // [esp+14h] [ebp-34h] int v8; // [esp+18h] [ebp-30h] int v9; // [esp+24h] [ebp-24h] int v10; // [esp+34h] [ebp-14h] int v11; // [esp+38h] [ebp-10h] v3 = this; if ( a2[2] > a3[2] || a2[3] > a3[3] ) return 0; v4 = a3[4]; (*(void (__stdcall **)(_DWORD, int *))(**(_DWORD **)(a2[4] + 12) + 48))(*(_DWORD *)(a2[4] + 12), &v6); (*(void (__stdcall **)(_DWORD, int *))(**(_DWORD **)(v4 + 12) + 48))(*(_DWORD *)(v4 + 12), &v9); if ( v8 != v11 || v7 != v10 ) result = 0; else result = (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, int, int))(*(_DWORD *)dword_BA6E44 + 48))( dword_BA6E44, v3[240], v3[241], v3[243], v6, v9) >= 0; return result; } // BA6E44: using guessed type int dword_BA6E44; //----- (00924560) -------------------------------------------------------- void __userpurge sub_924560(int a1@, int a2@, float *a3, int a4) { int v4; // esi unsigned int v5; // ebx signed int v6; // eax float v7; // ST30_4 float v8; // ST2C_4 double v9; // st6 double v10; // st4 double v11; // st5 int v12; // ecx int v13; // edi int v14; // eax _DWORD *v15; // ecx char v16; // al signed int v17; // eax int v18; // edi signed int v19; // eax int v20; // eax int v21; // ecx _DWORD *v22; // [esp+30h] [ebp-18h] int v23; // [esp+34h] [ebp-14h] int v24; // [esp+38h] [ebp-10h] unsigned int v25; // [esp+3Ch] [ebp-Ch] int v26; // [esp+40h] [ebp-8h] v4 = a1; if ( a4 && !*(_BYTE *)(a1 + 1272) ) { v5 = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(a1 + 1668) + 60))(0, a2); v6 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v4 + 1668) + 64))(0); if ( a3 ) { v7 = (double)v5; v8 = (double)(unsigned int)v6; v9 = a3[2]; v23 = (signed int)(*a3 * v7); v10 = a3[1]; v24 = (signed int)((1.0 - v9) * v8); v11 = a3[3]; v25 = (signed int)(v7 * v10); v6 = (signed int)((1.0 - v11) * v8); } else { v23 = 0; v24 = 0; v25 = v5; } v12 = *(_DWORD *)(v4 + 1668); v26 = v6; v13 = a4 & 1; v14 = (*(int (**)(void))(*(_DWORD *)v12 + 116))(); v15 = (_DWORD *)sub_8B4B70((int)&unk_BA6E90, v14); v22 = v15; if ( v15 ) { if ( a4 & 4 && (v16 = sub_92AE20(v15), v15 = v22, v16) ) v17 = 2; else v17 = 0; v18 = v17 | v13; if ( a4 & 2 && sub_92AE50(v15) ) v19 = 4; else v19 = 0; v13 = v19 | v18; } v20 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v4 + 1668) + 60))(0); v21 = *(_DWORD *)(v4 + 1668); *(_DWORD *)(v4 + 1232) = v20; *(_DWORD *)(v4 + 1236) = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v21 + 64))(0); (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v4 + 132) + 188))(*(_DWORD *)(v4 + 132), v4 + 1224); (*(void (__stdcall **)(_DWORD, signed int, int *, int, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(v4 + 132) + 172))( *(_DWORD *)(v4 + 132), 1, &v23, v13, *(_DWORD *)(v4 + 988), *(float *)(v4 + 992), *(_DWORD *)(v4 + 996)); } } //----- (00924720) -------------------------------------------------------- _DWORD *__thiscall sub_924720(int this, int a2) { int v2; // edi void **v4; // ebx int v5; // eax int v6; // ecx unsigned int v7; // ecx void *v8; // ebx unsigned int v9; // edx int v10; // ecx int v11; // eax int v12; // eax int v13; // eax int v14; // esi void (__stdcall *v15)(int, char *); // edx _DWORD *v16; // ebx _DWORD *v17; // eax _DWORD *v18; // eax _DWORD *v19; // ebx rsize_t v20; // esi char *v21; // edi int v22; // [esp+8h] [ebp-4Ch] void *v23; // [esp+Ch] [ebp-48h] int v24; // [esp+10h] [ebp-44h] unsigned int v25; // [esp+14h] [ebp-40h] unsigned int v26; // [esp+18h] [ebp-3Ch] void *Src; // [esp+1Ch] [ebp-38h] char v28; // [esp+20h] [ebp-34h] void *v29; // [esp+40h] [ebp-14h] unsigned int v30; // [esp+44h] [ebp-10h] char *v31; // [esp+48h] [ebp-Ch] unsigned int v32; // [esp+4Ch] [ebp-8h] v2 = this; if ( *(_BYTE *)(this + 1272) ) return 0; v4 = 0; v5 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(this + 1672) + 60))(0); v6 = *(_DWORD *)(v2 + 1672); v26 = v5; v7 = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 64))(0); v25 = v7; if ( a2 ) { v8 = *(void **)a2; Src = v8; if ( (unsigned int)v8 >= v26 ) return 0; v9 = *(_DWORD *)(a2 + 8); if ( v9 >= v7 ) return 0; v10 = *(_DWORD *)(a2 + 4) - (_DWORD)v8 + 1; if ( *(_DWORD *)(a2 + 4) + 1 > v26 ) v10 = v26 - (_DWORD)Src; v11 = *(_DWORD *)(a2 + 12) - v9 + 1; if ( *(_DWORD *)(a2 + 12) + 1 > v25 ) v11 = v25 - v9; v29 = Src; v31 = (char *)Src + v10; v30 = v9; v32 = v9 + v11; v4 = &v29; } v12 = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v2 + 1672) + 112))(0); v13 = sub_8B4B70((int)&unk_BA6E80, v12); v14 = *(_DWORD *)(v13 + 12); v15 = *(void (__stdcall **)(int, char *))(*(_DWORD *)v14 + 48); v24 = *(_DWORD *)(v13 + 12); v15(v24, &v28); if ( (*(int (__stdcall **)(int, int *, void **, signed int))(*(_DWORD *)v14 + 52))(v14, &v22, v4, 16) < 0 ) return 0; v16 = operator new(0x70u); if ( !v16 || (v17 = (_DWORD *)(*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v2 + 1672) + 76))( *(_DWORD *)(v2 + 1672), 0), v18 = sub_8698C0(v16, v26, v25, v17, 1u, 1), (v19 = v18) == 0) ) { (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 56))(v14); return 0; } v20 = v18[25] * *(_DWORD *)v18[21]; v21 = (char *)(v18[20] + *(_DWORD *)v18[23]); Src = v23; if ( v25 ) { v26 = v25; do { memcpy_s(v21, v20, Src, v20); Src = (char *)Src + v22; v21 += v20; --v26; } while ( v26 ); } (*(void (__stdcall **)(int))(*(_DWORD *)v24 + 56))(v24); return v19; } //----- (009248D0) -------------------------------------------------------- char __thiscall sub_9248D0(_BYTE *this, int a2, int a3, int *a4, int a5, int a6) { _DWORD *v7; // ebx _DWORD *v8; // esi int v9; // ST14_4 _DWORD *v10; // eax int v11; // esi int v12; // ebx int v13; // ecx int v14; // edx int v15; // eax signed int v16; // eax void *v17; // ecx _BYTE *v18; // [esp+4h] [ebp-28h] int v19; // [esp+8h] [ebp-24h] int v20; // [esp+Ch] [ebp-20h] int v21; // [esp+10h] [ebp-1Ch] int v22; // [esp+14h] [ebp-18h] int v23; // [esp+18h] [ebp-14h] int v24; // [esp+1Ch] [ebp-10h] int v25; // [esp+20h] [ebp-Ch] int v26; // [esp+24h] [ebp-8h] v18 = this; if ( this[1272] ) return 0; v7 = *(_DWORD **)(a3 + 16); v8 = *(_DWORD **)(a2 + 16); if ( v8 && v7 && (v9 = (*(int (__thiscall **)(_DWORD *))(*v7 + 12))(v7), v10 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v8 + 12))(v8), !sub_866730(v10, v9)) && (v11 = v8[3], v12 = v7[3], v11) && v12 ) { if ( a4 ) { v13 = a4[1]; v14 = a4[2]; v23 = *a4; v15 = a4[3]; v25 = v13; v24 = v14; v26 = v15; } v19 = a5; v21 = a5 + v25; v20 = a6; v22 = a6 + v26; if ( a4 ) v16 = (*(int (__stdcall **)(_DWORD, int, int *, int, int *, _DWORD))(**((_DWORD **)v18 + 33) + 136))( *((_DWORD *)v18 + 33), v11, &v23, v12, &v19, 0); else v16 = (*(int (__stdcall **)(_DWORD, int, _DWORD, int, _DWORD, _DWORD))(**((_DWORD **)v18 + 33) + 136))( *((_DWORD *)v18 + 33), v11, 0, v12, 0, 0); if ( v16 >= 0 ) return 1; sub_93C3F0(v16); nullsub_6(v17); } else { nullsub_6(this); } return 0; } //----- (00924A40) -------------------------------------------------------- char __thiscall sub_924A40(_BYTE *this, _DWORD *a2, _DWORD *a3, int *a4, int *a5, int a6) { int v6; // eax int v7; // edx int v8; // eax signed int v9; // edx int v10; // eax int v11; // eax signed int v12; // eax void *v13; // ecx _BYTE *v15; // [esp+10h] [ebp-2Ch] int v16; // [esp+14h] [ebp-28h] int v17; // [esp+18h] [ebp-24h] int v18; // [esp+1Ch] [ebp-20h] int v19; // [esp+20h] [ebp-1Ch] int v20; // [esp+24h] [ebp-18h] int v21; // [esp+28h] [ebp-14h] int v22; // [esp+2Ch] [ebp-10h] int v23; // [esp+30h] [ebp-Ch] int v24; // [esp+34h] [ebp-8h] v15 = this; if ( !this[1272] ) { v6 = a2[4]; v7 = a3[4]; if ( v6 && v7 && (this = *(_BYTE **)(v6 + 12), v8 = *(_DWORD *)(v7 + 12), v9 = 0, v16 = v8, this) && v8 ) { if ( a4 ) { v21 = *a4; v23 = a4[1]; v22 = a4[2]; v10 = a4[3]; } else { v23 = a2[2]; v10 = a2[3]; v21 = 0; v22 = 0; } v24 = v10; if ( a5 ) { v17 = *a5; v19 = a5[1]; v11 = a5[3]; v18 = a5[2]; } else { v19 = a3[2]; v11 = a3[3]; v17 = 0; v18 = 0; } v20 = v11; if ( a6 == 1 ) { v9 = 1; } else if ( a6 == 2 ) { v9 = 2; } v12 = (*(int (__stdcall **)(_DWORD, _BYTE *, int *, int, int *, signed int))(**((_DWORD **)v15 + 33) + 136))( *((_DWORD *)v15 + 33), this, &v21, v16, &v17, v9); if ( v12 >= 0 ) return 1; sub_93C3F0(v12); nullsub_6(v13); } else { nullsub_6(this); } } return 0; } //----- (00924B90) -------------------------------------------------------- char __stdcall sub_924B90(_DWORD *a1) { _DWORD *v1; // ebx int v2; // esi int v3; // eax int v4; // esi int v5; // edi int v7; // ebx int v8; // esi int v9; // edi signed int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v1 = a1; v2 = a1[10]; v11 = v2; if ( v2 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v2 + 24))(v2) ) { v3 = (*(int (__thiscall **)(_DWORD *))(*a1 + 4))(a1); if ( v3 ) { while ( (_UNKNOWN *)v3 != &unk_BA71EC ) { v3 = *(_DWORD *)(v3 + 4); if ( !v3 ) goto LABEL_6; } v7 = (int)(a1 + 15); v10 = 6; do { v8 = *(_DWORD *)v7; v9 = *(_DWORD *)(*(_DWORD *)v7 + 16); if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *(_DWORD *)(v8 + 16) = 0; } v7 += 4; --v10; } while ( v10 ); v1 = a1; } else { LABEL_6: v4 = (*(int (__thiscall **)(_DWORD *))(*a1 + 68))(a1); v5 = *(_DWORD *)(v4 + 16); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); *(_DWORD *)(v4 + 16) = 0; } } v2 = v11; } v1[10] = 0; (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } return 1; } //----- (00924C70) -------------------------------------------------------- void __stdcall sub_924C70(int a1, int a2, int a3) { int v3; // esi int v4; // ecx char v5; // bl int v6; // edx int v7; // edi __int16 v8; // ax char v9; // [esp+4h] [ebp-4h] int v10; // [esp+10h] [ebp+8h] v3 = a1; v4 = 0; if ( a1 && (*(_WORD *)(a1 + 50) & 0xF000) == 0x4000 ) { v5 = *(_BYTE *)(a1 + 52); v9 = *(_BYTE *)(a1 + 52); if ( *(_BYTE *)(a1 + 52) ) { v6 = 0; v7 = 0; LOBYTE(v8) = 0; v10 = 0; if ( v5 & 1 ) { v10 = *(_DWORD *)(v3 + 32); v5 = v9; } if ( v5 & 2 ) v6 = *(_DWORD *)(v3 + 36); if ( v5 & 4 ) v7 = *(_DWORD *)(v3 + 40); if ( v5 & 8 ) { v4 = *(_DWORD *)(v3 + 44); v8 = *(_WORD *)(v3 + 48) & 0x3F; } sub_879990((int *)v3, *(_WORD *)(v3 + 12), v10, v6, v7, v4, v8, *(_WORD *)(v3 + 48) & 0xF000); v5 = v9; } else { sub_879990((int *)a1, *(_WORD *)(a1 + 12), 0, 0, 0, 0, 0, *(_WORD *)(a1 + 48) & 0xF000); } if ( a3 ) { if ( !(v5 & 0x20) ) sub_8787D0(*(_DWORD **)(a2 + 8)); } else if ( !(v5 & 0x10) ) { if ( sub_402B70((int)dword_BA4A70, v3) ) { sub_87EC20((void **)v3, *(_WORD *)(v3 + 64), 0); } else if ( sub_402B70((int)dword_BA4AA4, v3) ) { sub_880430((void *)v3, *(_WORD *)(v3 + 68), *(_DWORD *)(v3 + 72), 0); } } } } //----- (00924DA0) -------------------------------------------------------- void __thiscall sub_924DA0(int this) { _DWORD *v1; // esi struct _RTL_CRITICAL_SECTION *v2; // esi DWORD v3; // eax int v4; // ebx unsigned int v5; // ecx unsigned int v6; // eax _DWORD *v7; // edx int *v8; // eax int v9; // ebx int v10; // edi int v11; // eax int v12; // esi int v13; // eax unsigned int v14; // edx unsigned int v15; // eax int **v16; // ecx unsigned int v17; // esi unsigned int v18; // edx _DWORD *v19; // eax unsigned int v20; // ecx _DWORD *v21; // edi int v22; // eax int *v23; // ecx unsigned int v24; // eax unsigned int v25; // eax int v26; // eax int *v27; // edi int v28; // esi unsigned int v29; // eax int v30; // ecx int v31; // edx int v32; // ecx int v33; // ebx int v34; // eax int v35; // ecx int v36; // ecx int v37; // ebx int v38; // eax int i; // eax int v40; // edx int v41; // ecx int *v42; // edx int v43; // eax int v44; // esi int v45; // edi int v46; // eax void *v47; // esi int *v48; // edi int v49; // eax bool v50; // zf int *v51; // [esp+Ch] [ebp-20h] int v52; // [esp+10h] [ebp-1Ch] LPCRITICAL_SECTION lpCriticalSection; // [esp+14h] [ebp-18h] int v54; // [esp+18h] [ebp-14h] int *v55; // [esp+1Ch] [ebp-10h] int *v56; // [esp+20h] [ebp-Ch] void *v57; // [esp+24h] [ebp-8h] int v58; // [esp+28h] [ebp-4h] v1 = (_DWORD *)this; v58 = this; lpCriticalSection = (LPCRITICAL_SECTION)(this + 20); EnterCriticalSection((LPCRITICAL_SECTION)(this + 20)); lpCriticalSection[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)GetCurrentThreadId(); ++lpCriticalSection[1].LockCount; if ( v1[12] == 1 ) (*(void (__thiscall **)(_DWORD *))(*v1 + 256))(v1); v2 = (struct _RTL_CRITICAL_SECTION *)(v1 + 13); EnterCriticalSection(v2); v3 = GetCurrentThreadId(); ++v2[1].LockCount; v4 = v58; v2[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v3; v5 = *(_DWORD *)(v4 + 1040); v6 = 0; if ( v5 ) { v7 = *(_DWORD **)(v4 + 1044); while ( !*v7 ) { ++v6; ++v7; if ( v6 >= v5 ) goto LABEL_7; } v8 = *(int **)(*(_DWORD *)(v4 + 1044) + 4 * v6); } else { LABEL_7: v8 = 0; } v57 = 0; if ( v8 ) { while ( 1 ) { v9 = v8[2]; v10 = v8[1]; v11 = *v8; v56 = (int *)v9; if ( v11 ) { v55 = (int *)v11; } else { v12 = v58; v13 = (*(int (__thiscall **)(int, int))(*(_DWORD *)(v58 + 1036) + 4))(v58 + 1036, v10); v14 = *(_DWORD *)(v12 + 1040); v15 = v13 + 1; if ( v15 >= v14 ) { LABEL_18: v55 = 0; } else { v16 = (int **)(*(_DWORD *)(v12 + 1044) + 4 * v15); while ( !*v16 ) { ++v15; ++v16; if ( v15 >= v14 ) goto LABEL_18; } v55 = *v16; } } if ( !v9 ) goto LABEL_61; if ( v10 ) { v17 = -1; v18 = 0; v19 = (_DWORD *)v9; do { v20 = v19[7]; v21 = (_DWORD *)v19[8]; v22 = v19[6]; if ( v20 >= *(_DWORD *)(v22 + 28) ) v23 = 0; else v23 = *(int **)(*(_DWORD *)(v22 + 36) + 4 * v20); v24 = v23[3]; if ( v24 < v17 ) v17 = v23[3]; v25 = v23[5] + v24; if ( v25 > v18 ) v18 = v25; v19 = v21; } while ( v21 ); if ( v18 > v17 ) { v26 = sub_9383E0(*(char **)(v58 + 1720), v23[2], v17, v18 - v17, v23[4]); v27 = v56; v52 = v26; while ( 1 ) { v28 = v27[6]; v29 = v27[7]; v51 = (int *)v27[8]; if ( v29 >= *(_DWORD *)(v28 + 28) ) { v56 = 0; v31 = 0; } else { v30 = *(_DWORD *)(v28 + 36); v31 = *(_DWORD *)(v30 + 4 * v29); v56 = *(int **)(v30 + 4 * v29); } v32 = v27[3]; v33 = v52 + *(_DWORD *)(v31 + 12); if ( !v32 ) goto LABEL_39; if ( !(*(int (__stdcall **)(int, int, int, signed int, int *, unsigned int, int))(*(_DWORD *)v32 + 92))( *v27, v27[1], v27[2], 4095, v56, v29, v33) ) break; LABEL_42: if ( !v27[7] && *(_DWORD *)(v28 + 76) ) { v36 = *(_DWORD *)(v28 + 72); v37 = 0; v38 = 0; if ( v36 ) { for ( i = *(_DWORD *)(v28 + 68); i; v37 += v40 ) v40 = *(unsigned __int16 *)(v36 + 2 * i-- - 2); v38 = v37; } else { v41 = *(_DWORD *)(v28 + 56); if ( v41 == 4 ) { v37 = 3 * *(_DWORD *)(v28 + 60); v38 = 3 * *(_DWORD *)(v28 + 64); } else if ( v41 == 5 ) { v37 = *(_DWORD *)(v28 + 60) + 2; v38 = *(_DWORD *)(v28 + 64) + 2; } } v42 = *(int **)(v28 + 48); v54 = *(_DWORD *)(v28 + 44); *(_DWORD *)(v28 + 48) = sub_93B2A0( *(_DWORD *)(v58 + 1724), v37, *(void **)(v28 + 76), v37, v38, v42, (unsigned int *)&v54, 1, (void *)(*(_BYTE *)(v28 + 16) != 0 ? 0x10 : 0)); v43 = v54; *(_DWORD *)(v28 + 40) = v37; *(_DWORD *)(v28 + 44) = v43; } v27[8] = (int)v57; v57 = v27; v27 = v51; if ( !v51 ) { sub_9384C0(*(_DWORD *)(v58 + 1720), v56[2]); goto LABEL_61; } } v31 = (int)v56; LABEL_39: v34 = v27[2]; v35 = *v27; if ( v34 ) sub_938C50(*(void **)(v58 + 1720), v35, v27[1], v34, 4095, v31, v33); else sub_9385C0(*(void **)(v58 + 1720), v35, (_DWORD *)v27[1], 4095, v31, v33); goto LABEL_42; } } else { v44 = v9; do { v45 = *(_DWORD *)(v44 + 32); if ( !*(_DWORD *)(v44 + 28) ) { v46 = *(_DWORD *)(v44 + 8); if ( v46 ) sub_9230C0( (void *)v58, *(int **)(v44 + 24), *(_DWORD *)v44, *(_DWORD *)(v44 + 4), v46, *(_DWORD **)(v44 + 12), 1); else sub_922D70( (void *)v58, *(_DWORD *)(v44 + 24), *(void **)v44, *(_DWORD *)(v44 + 4), *(_DWORD *)(v44 + 12), 1); } *(_DWORD *)(v44 + 32) = v57; v57 = (void *)v44; v44 = v45; } while ( v45 ); } LABEL_61: if ( !v55 ) break; v8 = v55; } v4 = v58; } sub_940360((_DWORD *)(v4 + 1036)); if ( v57 ) { do { v47 = (void *)*((_DWORD *)v57 + 8); v48 = (int *)v57; v49 = *(_DWORD *)v57; if ( (*(_WORD *)(*(_DWORD *)v57 + 50) & 0xF000) == 0x4000 && !*((_DWORD *)v57 + 7) ) { *(_WORD *)(v49 + 50) &= 0xF000u; sub_924C70(v49, v48[1], v48[2]); } operator delete(v48); v57 = v47; } while ( v47 ); } v50 = (*(_DWORD *)(v4 + 80))-- == 1; if ( v50 ) *(_DWORD *)(v4 + 76) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v4 + 52)); if ( *(_DWORD *)(v4 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v4 + 260))(v4); v50 = lpCriticalSection[1].LockCount-- == 1; if ( v50 ) lpCriticalSection[1].DebugInfo = 0; LeaveCriticalSection(lpCriticalSection); } //----- (00925160) -------------------------------------------------------- char __thiscall sub_925160(int this) { _DWORD *v1; // edi int *v2; // ebx int v3; // eax volatile LONG *v4; // esi int v6; // [esp+0h] [ebp-4h] v6 = this; if ( !*(_BYTE *)(this + 1272) && *(_DWORD *)(this + 1800) ) { v1 = (_DWORD *)(this + 1788); do { v2 = (int *)v1[1]; v3 = *v2; v1[1] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[2] = 0; v4 = (volatile LONG *)v2[2]; if ( v4 ) InterlockedIncrement(v4 + 1); (*(void (__thiscall **)(_DWORD *, int *))(*v1 + 8))(v1, v2); --v1[3]; (*(void (__thiscall **)(volatile LONG *))(*v4 + 24))(v4); if ( !InterlockedDecrement(v4 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v4)(v4, 1); } while ( *(_DWORD *)(v6 + 1800) ); } return 1; } //----- (009251F0) -------------------------------------------------------- int __thiscall sub_9251F0(char *this, float *a2, char a3) { char *v3; // esi int v4; // ebx float *v5; // eax float *v6; // eax int result; // eax char v8; // [esp+20h] [ebp-34h] int v9; // [esp+2Ch] [ebp-28h] v3 = this; v4 = (int)(this + 1872); sub_921CB0((int)(this + 1872), (int)a2, (int)(a2 + 9), a2[12]); if ( a3 ) (*(void (__stdcall **)(_DWORD, signed int, int))(**((_DWORD **)v3 + 33) + 176))(*((_DWORD *)v3 + 33), 256, v4); (*(void (__stdcall **)(float *))(**((_DWORD **)v3 + 429) + 52))(a2); sub_85DA30(a2, (int)&v9, a2[12]); v5 = sub_85DAF0((float *)&v8, (float *)v3 + 268, (float *)&v9); *((float *)v3 + 274) = *v5; *((float *)v3 + 275) = v5[1]; *((float *)v3 + 276) = v5[2]; v6 = sub_85DAF0((float *)&v8, (float *)v3 + 271, (float *)&v9); *((float *)v3 + 277) = *v6; *((float *)v3 + 278) = v6[1]; result = *((_DWORD *)v6 + 2); *((_DWORD *)v3 + 279) = result; return result; } //----- (009252E0) -------------------------------------------------------- int __thiscall sub_9252E0(_DWORD **this, int a2, int a3, int a4) { _DWORD **v4; // edi int result; // eax unsigned int v6; // esi int v7; // [esp+24h] [ebp+10h] v4 = this; (*(void (__stdcall **)(int))(*this[429] + 52))(a4); result = sub_921CB0((int)(v4 + 468), a4, a4 + 36, *(float *)(a4 + 48)); if ( *(_WORD *)(a3 + 32) <= 4u ) { v7 = *(_DWORD *)(a2 + 32); v6 = 0; do { result = (*(int (__stdcall **)(_DWORD *, unsigned int, int))(*v4[33] + 176))( v4[33], v6 + 256, v7 + (*(unsigned __int16 *)(*(_DWORD *)(a3 + 4) + 2 * v6) << 6)); ++v6; } while ( v6 < 4 ); } return result; } //----- (00925370) -------------------------------------------------------- int __thiscall sub_925370(_DWORD *this, _DWORD *a2, float a3, char a4, int a5, char a6) { int v6; // esi _DWORD *v7; // ecx int v8; // edi int result; // eax int v10; // eax float *v11; // ecx int v12; // edx unsigned int v13; // esi unsigned int v14; // eax int v15; // ecx float *v16; // eax double v17; // st7 float *v18; // ecx double v19; // st6 unsigned int v20; // edx double v21; // rt0 double v22; // rt1 double v23; // st6 double v24; // st7 float *v25; // eax double v26; // st7 int v27; // eax float v28; // esi float *v29; // ebx float *v30; // edi int v31; // ecx double v32; // st6 double v33; // st7 char v34; // [esp+Ch] [ebp-F0h] int v35; // [esp+40h] [ebp-BCh] int v36; // [esp+44h] [ebp-B8h] int v37; // [esp+48h] [ebp-B4h] unsigned int v38; // [esp+4Ch] [ebp-B0h] int v39; // [esp+50h] [ebp-ACh] float v40; // [esp+54h] [ebp-A8h] float *v41; // [esp+58h] [ebp-A4h] char v42; // [esp+5Ch] [ebp-A0h] float v43; // [esp+8Ch] [ebp-70h] float v44; // [esp+90h] [ebp-6Ch] float v45; // [esp+94h] [ebp-68h] float v46; // [esp+98h] [ebp-64h] float v47; // [esp+9Ch] [ebp-60h] float v48; // [esp+A0h] [ebp-5Ch] float v49; // [esp+A4h] [ebp-58h] float v50; // [esp+A8h] [ebp-54h] float v51; // [esp+ACh] [ebp-50h] float v52; // [esp+B0h] [ebp-4Ch] float v53; // [esp+B4h] [ebp-48h] float v54; // [esp+B8h] [ebp-44h] float v55; // [esp+BCh] [ebp-40h] float v56; // [esp+C0h] [ebp-3Ch] float v57; // [esp+C4h] [ebp-38h] float v58; // [esp+C8h] [ebp-34h] float v59; // [esp+CCh] [ebp-30h] float v60; // [esp+D0h] [ebp-2Ch] float v61; // [esp+D4h] [ebp-28h] float v62; // [esp+D8h] [ebp-24h] float v63; // [esp+DCh] [ebp-20h] float v64; // [esp+E0h] [ebp-1Ch] float v65; // [esp+E4h] [ebp-18h] float v66; // [esp+E8h] [ebp-14h] float v67; // [esp+ECh] [ebp-10h] float v68; // [esp+F0h] [ebp-Ch] float v69; // [esp+F4h] [ebp-8h] v6 = (int)this; v7 = (_DWORD *)this[430]; v8 = a2[6]; v35 = v6; v40 = a3; result = sub_938380(v7); if ( v8 != result ) { v10 = sub_938380(*(_DWORD **)(v6 + 1720)); v11 = (float *)a2[8]; v12 = a2[9]; a2[6] = v10; v13 = *(_DWORD *)(a2[2] + 64); v39 = a2[2]; v14 = a2[7]; v38 = v13; v41 = v11; if ( a5 == 3 ) a4 = 1; if ( v13 > v14 || a5 != v12 ) { operator delete(v11); v15 = 0; if ( a5 == 4 ) { LOBYTE(v15) = (unsigned __int64)v13 >> 26 != 0; v16 = (float *)operator new((v13 << 6) | -v15); v41 = v16; if ( v13 ) { v17 = 1.0; v18 = v16 + 13; v19 = 0.0; v20 = v13; while ( 1 ) { if ( a4 ) { v18[1] = v19; *v18 = v19; *(v18 - 1) = v19; } else { *(v18 - 2) = v19; *(v18 - 6) = v19; *(v18 - 10) = v19; } v22 = v19; v23 = v17; v24 = v22; v18 += 16; --v20; *(v18 - 14) = v23; if ( !v20 ) break; v21 = v23; v19 = v24; v17 = v21; } } } else { LOBYTE(v15) = (unsigned __int64)(12 * v13) >> 30 != 0; v16 = (float *)operator new(48 * v13 | -v15); v41 = v16; } a2[7] = v13; a2[9] = a5; a2[8] = v16; } sub_87C3F0((float *)(a2[4] + 104), (int)&v57, &v57); qmemcpy(&v42, sub_85BDC0((float *)(a2[2] + 12), (float *)&v34, &v57), 0x34u); qmemcpy(&v44, sub_85BDC0((float *)LODWORD(v40), (float *)&v34, (float *)&v42), 0x34u); LOBYTE(v37) = 0; if ( v43 < 0.9900000095367432 && v43 > 1.01 ) LOBYTE(v37) = 1; if ( a6 ) { v25 = (float *)a2[10]; if ( !v25 ) { v25 = (float *)operator new(0x40u); a2[10] = v25; v25[3] = 0.0; v25[7] = 0.0; v25[11] = 0.0; v25[15] = 1.0; } v40 = v56; *v25 = v56 * v44; v26 = v40; v25[1] = v47 * v40; v25[2] = v50 * v26; v25[4] = v45 * v26; v25[5] = v48 * v26; v25[6] = v51 * v26; v25[8] = v46 * v26; v25[9] = v49 * v26; v25[10] = v26 * v52; v25[12] = v53; v25[13] = v54; v25[14] = v55; } v27 = *(_DWORD *)(v39 + 68); v28 = 0.0; v36 = a2[5]; v40 = 0.0; if ( v38 ) { v29 = v41 + 7; v30 = v41 + 8; v39 = v27; v41 += 8; do { sub_85BDC0((float *)(*(_DWORD *)(v36 + 4 * LODWORD(v28)) + 104), &v57, (float *)v39); v31 = *(_DWORD *)(v36 + 4 * LODWORD(v28)); if ( *(float *)(v31 + 152) < 0.9900000095367432 && *(float *)(v31 + 152) > 1.01 ) LOBYTE(v37) = 1; if ( !a6 ) { qmemcpy(&v57, sub_85BDC0(&v44, (float *)&v34, &v57), 0x34u); v30 = v41; v28 = v40; } v32 = v57 * v69; v33 = v69; if ( a5 == 4 ) { *(v29 - 7) = v32; if ( a4 ) { *(v29 - 6) = v58 * v33; *(v29 - 5) = v59 * v33; *(v29 - 3) = v60 * v33; *(v29 - 2) = v61 * v33; *(v29 - 1) = v62 * v33; v29[1] = v63 * v33; v29[2] = v64 * v33; v29[3] = v33 * v65; *(v29 - 4) = v66; *v29 = v67; v29[4] = v68; } else { *(v29 - 6) = v60 * v33; *(v29 - 5) = v63 * v33; *(v29 - 3) = v58 * v33; *(v29 - 2) = v61 * v33; *(v29 - 1) = v64 * v33; v29[1] = v59 * v33; v29[2] = v62 * v33; v29[3] = v33 * v65; v29[5] = v66; v29[6] = v67; v29[7] = v68; } } else { *(v30 - 8) = v32; *(v30 - 4) = v60 * v33; *v30 = v63 * v33; *(v30 - 7) = v58 * v33; *(v30 - 3) = v61 * v33; v30[1] = v64 * v33; *(v30 - 6) = v59 * v33; *(v30 - 2) = v62 * v33; v30[2] = v33 * v65; *(v30 - 5) = v66; *(v30 - 1) = v67; v30[3] = v68; } v39 += 76; ++LODWORD(v28); v30 += 12; v29 += 16; v40 = v28; v41 = v30; } while ( LODWORD(v28) < v38 ); } result = (*(int (__stdcall **)(int))(**(_DWORD **)(v35 + 1716) + 252))(v37); } return result; } //----- (009257E0) -------------------------------------------------------- int __userpurge sub_9257E0@(int a1@, int a2@, int a3@, _DWORD *a4) { int result; // eax int v5; // ebx int v6; // edx int v7; // eax int v8; // esi int v9; // edi int v10; // ecx int v11; // edi int v12; // ecx int v13; // eax int v14; // edx int v15; // eax float *v16; // ecx float *v17; // esi int v18; // edx int v19; // eax int *v20; // ecx int v21; // edx float *v22; // ST18_4 double v23; // st7 float *v24; // eax float *v25; // eax int v26; // ecx int *v27; // edx int v28; // edi float *v29; // ecx float v30; // ST74_4 signed int v31; // edx float v32; // ST74_4 float v33; // ST74_4 float v34; // ST74_4 int v35; // edx int v36; // edx int v37; // edx float v38; // ST50_4 double v39; // st6 float v40; // ST5C_4 float v41; // ST60_4 float v42; // ST64_4 float v43; // ST94_4 float v44; // ST98_4 float v45; // ST9C_4 float v46; // ST2C_4 float v47; // ST30_4 float v48; // ST34_4 float v49; // ST38_4 float v50; // ST3C_4 float v51; // ST40_4 float v52; // ST68_4 float v53; // ST6C_4 double v54; // st6 float v55; // ST70_4 double v56; // st5 float v57; // ST7C_4 float v58; // ST80_4 double v59; // st1 float v60; // ST84_4 double v61; // st1 bool v62; // zf float v63; // ST88_4 float v64; // ST8C_4 double v65; // st2 float v66; // ST90_4 double v67; // st3 double v68; // st4 float *v69; // edx float *v70; // ecx double v71; // st6 float v72; // ST88_4 float v73; // ST8C_4 float v74; // ST90_4 float v75; // ST94_4 float v76; // ST98_4 float v77; // ST9C_4 float v78; // ST68_4 float v79; // ST6C_4 float v80; // ST70_4 float v81; // ST7C_4 float v82; // ST80_4 float v83; // ST84_4 float v84; // ST2C_4 float v85; // ST30_4 double v86; // st6 float v87; // ST34_4 double v88; // st5 float v89; // ST38_4 float v90; // ST3C_4 double v91; // st1 float v92; // ST40_4 double v93; // st2 double v94; // st3 float v95; // ST5C_4 float v96; // ST60_4 double v97; // st3 float v98; // ST64_4 double v99; // st4 int v100; // edi float *v101; // ecx signed int v102; // edx signed int v103; // ST58_4 int v104; // edx double v105; // st7 double v106; // st6 double v107; // st5 double v108; // st1 float v109; // ST88_4 float v110; // ST8C_4 double v111; // st1 float v112; // ST90_4 float v113; // ST7C_4 float v114; // ST80_4 double v115; // st2 float v116; // ST84_4 float v117; // ST68_4 float v118; // ST6C_4 double v119; // st3 float v120; // ST70_4 double v121; // st4 double v122; // st7 double v123; // st6 float *v124; // ecx double v125; // st5 double v126; // st4 double v127; // st3 double v128; // rt0 double v129; // st3 double v130; // rt1 double v131; // st3 double v132; // rt2 double v133; // st3 double v134; // rt0 float *v135; // edx double v136; // st2 double v137; // st1 double v138; // rt0 double v139; // rt1 float v140; // ST88_4 float v141; // ST8C_4 double v142; // st1 float v143; // ST90_4 float v144; // ST7C_4 double v145; // st2 float v146; // ST80_4 double v147; // st2 float v148; // ST84_4 double v149; // st5 double v150; // st7 float v151; // ST68_4 float v152; // ST6C_4 double v153; // st2 float v154; // ST70_4 double v155; // st6 double v156; // st3 double v157; // st5 double v158; // rt1 double v159; // st3 double v160; // st4 int v161; // esi int v162; // ecx int v163; // [esp-8h] [ebp-118h] int v164; // [esp-4h] [ebp-114h] int v165; // [esp+4h] [ebp-10Ch] float v166; // [esp+20h] [ebp-F0h] float v167; // [esp+24h] [ebp-ECh] float v168; // [esp+28h] [ebp-E8h] int v169; // [esp+2Ch] [ebp-E4h] int v170; // [esp+30h] [ebp-E0h] int v171; // [esp+30h] [ebp-E0h] int v172; // [esp+34h] [ebp-DCh] int v173; // [esp+34h] [ebp-DCh] float v174; // [esp+38h] [ebp-D8h] float v175; // [esp+3Ch] [ebp-D4h] float v176; // [esp+40h] [ebp-D0h] int v177; // [esp+54h] [ebp-BCh] int v178; // [esp+54h] [ebp-BCh] float v179; // [esp+70h] [ebp-A0h] float v180; // [esp+74h] [ebp-9Ch] float v181; // [esp+78h] [ebp-98h] int v182; // [esp+7Ch] [ebp-94h] int v183; // [esp+80h] [ebp-90h] int v184; // [esp+84h] [ebp-8Ch] int v185; // [esp+88h] [ebp-88h] float v186; // [esp+8Ch] [ebp-84h] float v187; // [esp+90h] [ebp-80h] float v188; // [esp+94h] [ebp-7Ch] float v189; // [esp+98h] [ebp-78h] float v190; // [esp+9Ch] [ebp-74h] float v191; // [esp+A0h] [ebp-70h] float v192; // [esp+A4h] [ebp-6Ch] float *v193; // [esp+A8h] [ebp-68h] int v194; // [esp+ACh] [ebp-64h] float v195; // [esp+B0h] [ebp-60h] float v196; // [esp+B4h] [ebp-5Ch] float v197; // [esp+B8h] [ebp-58h] int v198; // [esp+BCh] [ebp-54h] int v199; // [esp+C0h] [ebp-50h] float *v200; // [esp+C4h] [ebp-4Ch] int v201; // [esp+C8h] [ebp-48h] int v202; // [esp+CCh] [ebp-44h] int v203; // [esp+D0h] [ebp-40h] int v204; // [esp+D4h] [ebp-3Ch] float v205; // [esp+D8h] [ebp-38h] float v206; // [esp+DCh] [ebp-34h] float v207; // [esp+E0h] [ebp-30h] float v208; // [esp+E4h] [ebp-2Ch] float v209; // [esp+E8h] [ebp-28h] float v210; // [esp+ECh] [ebp-24h] float v211; // [esp+F0h] [ebp-20h] float v212; // [esp+F4h] [ebp-1Ch] float v213; // [esp+F8h] [ebp-18h] float v214; // [esp+FCh] [ebp-14h] float v215; // [esp+100h] [ebp-10h] float v216; // [esp+104h] [ebp-Ch] float v217; // [esp+108h] [ebp-8h] result = (int)a4; v5 = a1; if ( !*(_BYTE *)(a1 + 1272) ) { v6 = a4[46]; v164 = a3; v163 = a2; qmemcpy(&v205, a4 + 26, 0x34u); v182 = a4[9]; v183 = a4[10]; v7 = a4[12]; v184 = a4[11]; v185 = v7; v177 = v6; v8 = v6; v9 = (*(unsigned __int16 (__thiscall **)(int))(*(_DWORD *)v6 + 64))(v6); result = *(unsigned __int16 *)(v8 + 12); v199 = *(unsigned __int16 *)(v8 + 12); if ( (_WORD)v9 ) { v10 = *(_DWORD *)(v5 + 1704); sub_93C880(*(_DWORD *)(v5 + 1712), v177, 0, 0, 0, 0); v204 = v9; v170 = *(_DWORD *)(v8 + 60); v11 = v170; sub_936750((void **)v170, (void *)1); v12 = (unsigned __int16)v199; v13 = v204; *(_DWORD *)(v170 + 24) = 4 * (unsigned __int16)v199; v14 = v204; *(_DWORD *)(v170 + 68) = 1; *(_DWORD *)(v170 + 64) = 2 * v12; *(_DWORD *)(v170 + 60) = 2 * v14; *(_DWORD *)(v170 + 76) = 0; *(_DWORD *)(v170 + 72) = 0; v13 *= 4; *(_DWORD *)(v170 + 20) = v13; *(_DWORD *)(v5 + 1120) = v182; *(_DWORD *)(v5 + 1124) = v183; *(_DWORD *)(v5 + 1128) = v184; *(_DWORD *)(v5 + 1132) = v185; *(_DWORD *)v170 = 29360128; result = sub_93B420(*(_DWORD *)(v5 + 1724), v8, v13, 0, 0, 1); v165 = result; if ( result ) { v15 = *(_DWORD *)(v8 + 40); v16 = *(float **)(v8 + 68); v17 = *(float **)(v8 + 76); v199 = v15; v18 = *(_DWORD *)(v177 + 32); v19 = *(_DWORD *)(v177 + 84); v200 = v16; v20 = *(int **)(v5 + 1716); v198 = v18; v21 = *v20; v201 = v19; (*(void (__stdcall **)(_DWORD))(v21 + 48))(0); v22 = (float *)(v5 + 1872); v23 = v217; *v22 = v205 * v217; v22[1] = v208 * v23; v22[2] = v211 * v23; v22[4] = v206 * v23; v22[5] = v209 * v23; v22[6] = v212 * v23; v22[8] = v207 * v23; v22[9] = v210 * v23; v22[10] = v23 * v213; v22[12] = v214; v22[13] = v215; v22[14] = v216; (*(void (__stdcall **)(_DWORD, signed int, int))(**(_DWORD **)(v5 + 132) + 176))( *(_DWORD *)(v5 + 132), 256, v5 + 1872); (*(void (__stdcall **)(float *))(**(_DWORD **)(v5 + 1716) + 52))(&v205); v24 = sub_85DAF0(&v186, (float *)(v5 + 1072), &v205); *(float *)(v5 + 1096) = *v24; *(float *)(v5 + 1100) = v24[1]; *(float *)(v5 + 1104) = v24[2]; v25 = sub_85DAF0(&v186, (float *)(v5 + 1084), &v205); *(float *)(v5 + 1108) = *v25; *(float *)(v5 + 1112) = v25[1]; *(float *)(v5 + 1116) = v25[2]; v166 = *(float *)(v5 + 1100) * *(float *)(v5 + 1116) - *(float *)(v5 + 1112) * *(float *)(v5 + 1104); v167 = *(float *)(v5 + 1104) * *(float *)(v5 + 1108) - *(float *)(v5 + 1116) * *(float *)(v5 + 1096); v168 = *(float *)(v5 + 1112) * *(float *)(v5 + 1096) - *(float *)(v5 + 1100) * *(float *)(v5 + 1108); sub_936880((_DWORD *)v170, 338); if ( *(_DWORD *)(v170 + 28) ) **(_DWORD **)(v170 + 32) = 36; v26 = *(_DWORD *)(v5 + 1720); sub_938390((_DWORD *)v170, 0); if ( *(_DWORD *)(v170 + 28) ) { v27 = *(int **)(v170 + 36); result = *v27; v178 = *v27; } else { v178 = 0; result = 0; } v194 = *(int *)(result + 8); if ( *(float *)&v194 != 0.0 ) { result = sub_9383E0( *(char **)(v5 + 1720), v194, *(_DWORD *)(result + 12), 144 * v204, *(_DWORD *)(result + 16)); if ( result ) { if ( v201 ) { if ( *(float *)&v199 == 0.0 ) { if ( v204 ) { v69 = v200; v203 = (char *)v17 - (char *)v200; v70 = (float *)(v198 + 8); v173 = v201 - (_DWORD)v200; v169 = v204; do { v192 = *(float *)((char *)v69 + v203) * *v69; v202 = *(int *)((char *)v69 + v173); *(float *)&v194 = cos(*(float *)&v202); *(float *)&v199 = sin(*(float *)&v202); v71 = v192; v192 = (*(float *)&v199 + *(float *)&v194) * v192; *(float *)&v202 = (*(float *)&v194 - *(float *)&v199) * v71; v72 = *(float *)(v5 + 1108) * *(float *)&v202; v73 = *(float *)(v5 + 1112) * *(float *)&v202; v74 = *(float *)(v5 + 1116) * *(float *)&v202; v186 = v192 * *(float *)(v5 + 1096); v187 = *(float *)(v5 + 1100) * v192; v188 = *(float *)(v5 + 1104) * v192; v75 = v186 + v72; v76 = v187 + v73; v77 = v188 + v74; v78 = *(float *)(v5 + 1108) * v192; v79 = *(float *)(v5 + 1112) * v192; v80 = v192 * *(float *)(v5 + 1116); *(float *)&v202 = -*(float *)&v202; v81 = *(float *)&v202 * *(float *)(v5 + 1096); v82 = *(float *)(v5 + 1100) * *(float *)&v202; v83 = *(float *)&v202 * *(float *)(v5 + 1104); v195 = v81 + v78; v196 = v82 + v79; v197 = v83 + v80; v84 = *(v70 - 2) - v75; v85 = *(v70 - 1) - v76; v86 = *v70; *(_DWORD *)(result + 24) = -1; v87 = v86 - v77; *(float *)result = v84; *(float *)(result + 4) = v85; *(float *)(result + 8) = v87; *(float *)(result + 12) = v166; v88 = v167; *(float *)(result + 16) = v167; *(float *)(result + 20) = v168; *(float *)(result + 28) = 0.0; *(float *)(result + 32) = 1.0; v89 = *(v70 - 2) - v195; v90 = *(v70 - 1) - v196; v91 = *v70; *(_DWORD *)(result + 60) = -1; v92 = v91 - v197; *(float *)(result + 36) = v89; *(float *)(result + 40) = v90; *(float *)(result + 44) = v92; *(float *)(result + 48) = v166; *(float *)(result + 52) = v167; *(float *)(result + 56) = v168; *(float *)(result + 64) = 1.0; *(float *)(result + 68) = 1.0; v189 = v75 + *(v70 - 2); v190 = v76 + *(v70 - 1); v93 = v77 + *v70; *(_DWORD *)(result + 96) = -1; v191 = v93; *(float *)(result + 72) = v189; *(float *)(result + 76) = v190; *(float *)(result + 80) = v191; *(float *)(result + 84) = v166; *(float *)(result + 88) = v167; *(float *)(result + 92) = v168; *(float *)(result + 100) = 1.0; *(float *)(result + 104) = 0.0; result += 144; v94 = *(v70 - 2) + v195; v70 += 3; ++v69; v62 = v169-- == 1; v95 = v94; v96 = v196 + *(v70 - 4); v97 = v197 + *(v70 - 3); *(_DWORD *)(result - 12) = -1; v98 = v97; *(float *)(result - 36) = v95; *(float *)(result - 32) = v96; *(float *)(result - 28) = v98; v99 = v166; *(float *)(result - 24) = *(float *)&v99; *(float *)(result - 20) = *(float *)&v88; *(float *)(result - 16) = v168; *(float *)(result - 8) = 0.0; *(float *)(result - 4) = 0.0; } while ( !v62 ); } } else if ( v204 ) { v28 = v199 + 4; v172 = (char *)v200 - (char *)v17; v29 = (float *)(v198 + 8); v203 = v201 - (_DWORD)v17; v193 = (float *)(v199 + 4); v199 = v204; do { v30 = *(float *)(v28 + 8) * 255.0; v204 = (signed int)v30; v31 = (signed int)v30; v32 = *(float *)(v28 - 4) * 255.0; v200 = (float *)(signed int)v32; LODWORD(v192) = (signed int)v32; v33 = *v193 * 255.0; v201 = (signed int)v33; v202 = (signed int)v33; v34 = v193[1] * 255.0; v198 = (signed int)v34; v35 = (LODWORD(v192) | (v31 << 8)) << 8; v192 = *(float *)((char *)v17 + v172) * *v17; v36 = v202 | v35; v202 = *(int *)((char *)v17 + v203); v37 = v198 | (v36 << 8); *(float *)&v194 = cos(*(float *)&v202); v38 = sin(*(float *)&v202); v39 = v192; v192 = (v38 + *(float *)&v194) * v192; *(float *)&v202 = (*(float *)&v194 - v38) * v39; v40 = *(float *)(v5 + 1108) * *(float *)&v202; v41 = *(float *)(v5 + 1112) * *(float *)&v202; v42 = *(float *)(v5 + 1116) * *(float *)&v202; v189 = v192 * *(float *)(v5 + 1096); v190 = *(float *)(v5 + 1100) * v192; v191 = *(float *)(v5 + 1104) * v192; v43 = v189 + v40; v44 = v190 + v41; v45 = v191 + v42; v46 = *(float *)(v5 + 1108) * v192; v47 = *(float *)(v5 + 1112) * v192; v48 = v192 * *(float *)(v5 + 1116); *(float *)&v202 = -*(float *)&v202; v49 = *(float *)&v202 * *(float *)(v5 + 1096); v50 = *(float *)(v5 + 1100) * *(float *)&v202; v51 = *(float *)&v202 * *(float *)(v5 + 1104); v195 = v49 + v46; v196 = v50 + v47; v197 = v51 + v48; v52 = *(v29 - 2) - v43; v53 = *(v29 - 1) - v44; v54 = *v29; *(_DWORD *)(result + 24) = v37; v55 = v54 - v45; *(float *)result = v52; *(float *)(result + 4) = v53; *(float *)(result + 8) = v55; *(float *)(result + 12) = v166; v56 = v167; *(float *)(result + 16) = v167; *(float *)(result + 20) = v168; *(float *)(result + 28) = 0.0; *(float *)(result + 32) = 1.0; v57 = *(v29 - 2) - v195; v58 = *(v29 - 1) - v196; v59 = *v29; *(_DWORD *)(result + 60) = v37; v60 = v59 - v197; *(float *)(result + 36) = v57; *(float *)(result + 40) = v58; *(float *)(result + 44) = v60; *(float *)(result + 48) = v166; *(float *)(result + 52) = v167; *(float *)(result + 56) = v168; *(float *)(result + 64) = 1.0; *(float *)(result + 68) = 1.0; v61 = *(v29 - 2); v28 = (int)(v193 + 4); result += 144; v29 += 3; ++v17; v62 = v199-- == 1; v63 = v43 + v61; v193 += 4; v64 = v44 + *(v29 - 4); v65 = v45 + *(v29 - 3); *(_DWORD *)(result - 48) = v37; v66 = v65; *(float *)(result - 72) = v63; *(float *)(result - 68) = v64; *(float *)(result - 64) = v66; *(float *)(result - 60) = v166; *(float *)(result - 56) = v167; *(float *)(result - 52) = v168; *(float *)(result - 44) = 1.0; *(float *)(result - 40) = 0.0; v186 = v195 + *(v29 - 5); v187 = v196 + *(v29 - 4); v67 = v197 + *(v29 - 3); *(_DWORD *)(result - 12) = v37; v188 = v67; *(float *)(result - 36) = v186; *(float *)(result - 32) = v187; *(float *)(result - 28) = v188; v68 = v166; *(float *)(result - 24) = *(float *)&v68; *(float *)(result - 20) = *(float *)&v56; *(float *)(result - 16) = v168; *(float *)(result - 8) = 0.0; *(float *)(result - 4) = 0.0; } while ( !v62 ); v11 = v170; } } else { v179 = *(float *)(v5 + 1108) - *(float *)(v5 + 1096); v180 = *(float *)(v5 + 1112) - *(float *)(v5 + 1100); v181 = *(float *)(v5 + 1116) - *(float *)(v5 + 1104); v174 = *(float *)(v5 + 1108) + *(float *)(v5 + 1096); v175 = *(float *)(v5 + 1100) + *(float *)(v5 + 1112); v176 = *(float *)(v5 + 1116) + *(float *)(v5 + 1104); if ( *(float *)&v199 == 0.0 ) { if ( v204 ) { v122 = v168; v123 = v167; v124 = (float *)(v198 + 8); v125 = v166; v171 = v204; v126 = 0.0; v127 = 1.0; while ( 1 ) { v135 = v200; *(float *)&v203 = *v17 * *v200; v189 = v174 * *(float *)&v203; v190 = v175 * *(float *)&v203; v191 = v176 * *(float *)&v203; v195 = v179 * *(float *)&v203; v196 = v180 * *(float *)&v203; v197 = *(float *)&v203 * v181; v136 = v189; v186 = *(v124 - 2) - v189; v187 = *(v124 - 1) - v190; v137 = *v124; *(_DWORD *)(result + 24) = -1; v188 = v137 - v191; *(float *)result = v186; *(float *)(result + 4) = v187; *(float *)(result + 8) = v188; *(float *)(result + 12) = v125; v138 = v125; *(float *)(result + 16) = v123; v139 = v123; *(float *)(result + 20) = v122; *(float *)(result + 28) = v126; *(float *)(result + 32) = v127; v140 = *(v124 - 2) - v195; v141 = *(v124 - 1) - v196; v142 = *v124; *(_DWORD *)(result + 60) = -1; v143 = v142 - v197; *(float *)(result + 36) = v140; *(float *)(result + 40) = v141; *(float *)(result + 44) = v143; *(float *)(result + 48) = *(float *)&v138; *(float *)(result + 52) = v123; *(float *)(result + 56) = v122; *(float *)(result + 64) = v127; *(float *)(result + 68) = v127; v144 = v136 + *(v124 - 2); result += 144; v145 = v190 + *(v124 - 1); v124 += 3; ++v17; v62 = v171-- == 1; v146 = v145; v200 = v135 + 1; v147 = v191 + *(v124 - 3); *(_DWORD *)(result - 48) = -1; v148 = v147; *(float *)(result - 72) = v144; *(float *)(result - 68) = v146; *(float *)(result - 64) = v148; *(float *)(result - 60) = v125; *(float *)(result - 56) = v123; *(float *)(result - 52) = v122; v149 = v122; *(float *)(result - 44) = v127; v150 = v127; *(float *)(result - 40) = v126; v151 = v195 + *(v124 - 5); v152 = v196 + *(v124 - 4); v153 = v197 + *(v124 - 3); *(_DWORD *)(result - 12) = -1; v154 = v153; *(float *)(result - 36) = v151; *(float *)(result - 32) = v152; *(float *)(result - 28) = v154; *(float *)(result - 24) = v138; v155 = v138; *(float *)(result - 20) = v139; v156 = v149; v157 = v139; *(float *)(result - 16) = v156; v158 = v156; v159 = v126; v160 = v158; *(float *)(result - 8) = *(float *)&v159; *(float *)(result - 4) = *(float *)&v159; if ( v62 ) break; v128 = v159; v129 = v160; v126 = v128; v130 = v129; v131 = v150; v122 = v130; v132 = v131; v133 = v155; v123 = v157; v134 = v133; v127 = v132; v125 = v134; } } } else if ( v204 ) { v100 = v199 + 4; v101 = (float *)(v198 + 8); v198 = v199 + 4; v194 = v204; do { *(float *)&v203 = *(float *)(v100 + 8) * 255.0; v204 = (signed int)*(float *)&v203; v102 = (signed int)*(float *)&v203; *(float *)&v203 = *(float *)(v100 - 4) * 255.0; v201 = (signed int)*(float *)&v203; v103 = (signed int)*(float *)&v203; *(float *)&v203 = *(float *)v198 * 255.0; v193 = (float *)(signed int)*(float *)&v203; v202 = (signed int)*(float *)&v203; *(float *)&v203 = *(float *)(v198 + 4) * 255.0; v199 = (signed int)*(float *)&v203; *(float *)&v203 = *v17 * *v200; v104 = v199 | ((v202 | ((v103 | (v102 << 8)) << 8)) << 8); v189 = v174 * *(float *)&v203; v190 = v175 * *(float *)&v203; v191 = v176 * *(float *)&v203; v195 = v179 * *(float *)&v203; v196 = v180 * *(float *)&v203; v197 = *(float *)&v203 * v181; v105 = v189; v186 = *(v101 - 2) - v189; v187 = *(v101 - 1) - v190; v106 = *v101; *(_DWORD *)(result + 24) = v104; v188 = v106 - v191; *(float *)result = v186; *(float *)(result + 4) = v187; *(float *)(result + 8) = v188; *(float *)(result + 12) = v166; v107 = v167; *(float *)(result + 16) = v167; *(float *)(result + 20) = v168; *(float *)(result + 28) = 0.0; *(float *)(result + 32) = 1.0; result += 144; v108 = *(v101 - 2) - v195; v101 += 3; v100 = v198 + 16; v109 = v108; v110 = *(v101 - 4) - v196; v111 = *(v101 - 3); *(_DWORD *)(result - 84) = v104; v112 = v111 - v197; *(float *)(result - 108) = v109; *(float *)(result - 104) = v110; *(float *)(result - 100) = v112; *(float *)(result - 96) = v166; *(float *)(result - 92) = v167; *(float *)(result - 88) = v168; *(float *)(result - 80) = 1.0; *(float *)(result - 76) = 1.0; v113 = v105 + *(v101 - 5); v114 = v190 + *(v101 - 4); v115 = v191 + *(v101 - 3); *(_DWORD *)(result - 48) = v104; v116 = v115; *(float *)(result - 72) = v113; *(float *)(result - 68) = v114; *(float *)(result - 64) = v116; *(float *)(result - 60) = v166; *(float *)(result - 56) = v167; *(float *)(result - 52) = v168; *(float *)(result - 44) = 1.0; *(float *)(result - 40) = 0.0; v117 = v195 + *(v101 - 5); v118 = v196 + *(v101 - 4); v119 = v197 + *(v101 - 3); *(_DWORD *)(result - 12) = v104; v120 = v119; *(float *)(result - 36) = v117; *(float *)(result - 32) = v118; *(float *)(result - 28) = v120; v121 = v166; *(float *)(result - 24) = *(float *)&v121; *(float *)(result - 20) = *(float *)&v107; *(float *)(result - 16) = v168; *(float *)(result - 8) = 0.0; *(float *)(result - 4) = 0.0; ++v200; ++v17; v62 = v194-- == 1; v198 = v100; } while ( !v62 ); v11 = v170; } } sub_9384C0(*(_DWORD *)(v5 + 1720), *(_DWORD *)(v178 + 8)); result = (*(int (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, float *, int *))(**(_DWORD **)(v5 + 2208) + 20))( 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v205, &v182); if ( !result ) { (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, float *, int *, int, int))(**(_DWORD **)(v5 + 2208) + 24))( 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v205, &v182, v163, v164); v161 = (*(int (**)(void))(**(_DWORD **)(v5 + 2208) + 52))(); if ( *(_DWORD *)(v11 + 28) ) v162 = **(_DWORD **)(v11 + 32); else v162 = 0; (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, int))(**(_DWORD **)(v5 + 132) + 400))( *(_DWORD *)(v5 + 132), 0, *(_DWORD *)(v178 + 8), 0, v162); (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v5 + 132) + 416))(*(_DWORD *)(v5 + 132), v165); if ( v161 ) { do { (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, float *, int *))(**(_DWORD **)(v5 + 2208) + 28))( 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v205, &v182); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, int, _DWORD, _DWORD, float *, int *))(**(_DWORD **)(v5 + 2208) + 36))( 0, 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v205, &v182); (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)(v5 + 1716) + 8304) + 4))(); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(v5 + 132) + 328))( *(_DWORD *)(v5 + 132), *(_DWORD *)(v11 + 56), *(_DWORD *)(v11 + 52), 0, *(_DWORD *)(v11 + 20), 0, *(_DWORD *)(v11 + 60)); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, int, _DWORD, _DWORD, float *, int *))(**(_DWORD **)(v5 + 2208) + 44))( 0, 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v205, &v182); } while ( (*(int (**)(void))(**(_DWORD **)(v5 + 2208) + 56))() ); } result = (*(int (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 2208) + 48))( 0, 0, v11, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16)); } } } } } } return result; } // 9257E0: could not find valid save-restore pair for edi // 9257E0: could not find valid save-restore pair for esi //----- (009268C0) -------------------------------------------------------- int __userpurge sub_9268C0@(int a1@, int a2@, int a3@, _DWORD *a4) { int result; // eax int v5; // ebx int v6; // edx int v7; // ecx int v8; // eax int v9; // ST04_4 int v10; // ecx int v11; // eax int v12; // ecx int v13; // edx _DWORD *v14; // eax _BYTE *v15; // ecx float *v16; // esi float *v17; // edi _BYTE *v18; // ST0C_4 int v19; // ecx int v20; // eax int v21; // ST18_4 int v22; // ecx char *v23; // ecx float *v24; // edx float *v25; // ecx float *v26; // esi signed int v27; // eax signed int v28; // ST2C_4 signed int v29; // esi int v30; // eax double v31; // st7 bool v32; // zf unsigned int v33; // ecx unsigned int v34; // edx unsigned int v35; // ecx double v36; // st7 int v37; // eax int v38; // esi int v39; // ecx double v40; // st7 float *v41; // edx float *v42; // esi int v43; // ecx signed int v44; // eax double v45; // st7 signed int v46; // edi unsigned int v47; // edi unsigned int v48; // ecx double v49; // st7 int v50; // edx int v51; // esi int v52; // edi int v53; // ecx int v54; // edi int v55; // ecx int v56; // [esp-18h] [ebp-98h] int v57; // [esp-14h] [ebp-94h] rsize_t v58; // [esp-10h] [ebp-90h] int v59; // [esp-Ch] [ebp-8Ch] int v60; // [esp-8h] [ebp-88h] int v61; // [esp-4h] [ebp-84h] int v62; // [esp+4h] [ebp-7Ch] int v63; // [esp+8h] [ebp-78h] int v64; // [esp+Ch] [ebp-74h] float *v65; // [esp+10h] [ebp-70h] int v66; // [esp+10h] [ebp-70h] int v67; // [esp+14h] [ebp-6Ch] int v68; // [esp+18h] [ebp-68h] int v69; // [esp+1Ch] [ebp-64h] int v70; // [esp+20h] [ebp-60h] int v71; // [esp+24h] [ebp-5Ch] _DWORD *v72; // [esp+28h] [ebp-58h] signed int v73; // [esp+2Ch] [ebp-54h] float v74; // [esp+30h] [ebp-50h] int v75; // [esp+34h] [ebp-4Ch] unsigned int v76; // [esp+38h] [ebp-48h] int v77; // [esp+3Ch] [ebp-44h] unsigned int v78; // [esp+40h] [ebp-40h] int v79; // [esp+44h] [ebp-3Ch] char v80; // [esp+48h] [ebp-38h] result = (int)a4; v5 = a1; if ( !*(_BYTE *)(a1 + 1272) ) { v6 = a4[46]; v7 = *(unsigned __int16 *)(v6 + 12); v72 = (_DWORD *)a4[46]; v71 = v7; if ( (_WORD)v7 ) { v61 = a3; v60 = a2; qmemcpy(&v80, a4 + 26, 0x34u); v67 = a4[9]; v68 = a4[10]; v8 = a4[12]; v69 = a4[11]; v9 = *(_DWORD *)(v5 + 1712); v10 = *(_DWORD *)(v5 + 1704); v70 = v8; sub_93C880(v9, v6, 0, 0, 0, 0); v11 = v68; v12 = v69; *(_DWORD *)(v5 + 1120) = v67; v13 = v70; *(_DWORD *)(v5 + 1124) = v11; v14 = v72; *(_DWORD *)(v5 + 1128) = v12; *(_DWORD *)(v5 + 1132) = v13; v15 = (_BYTE *)v14[16]; v16 = (float *)v14[8]; v17 = (float *)v14[11]; v76 = v14[10]; v18 = v15; v19 = *(_DWORD *)(v5 + 1724); v78 = 0; v79 = (unsigned __int16)v71; result = sub_93B600(v19, (int)v16, (unsigned __int16)v71, v18, &v78, 0, 1); v62 = result; if ( result ) { if ( v78 ) { v77 = 2; v75 = 12; if ( v17 ) { v77 = 258; v75 = 20; } if ( v76 ) { v77 |= 0x40u; v75 += 4; } v64 = v72[15]; sub_936750((void **)v64, (void *)1); v20 = v79; v21 = v77; *(_DWORD *)(v64 + 20) = v79; *(_DWORD *)(v64 + 24) = v20; sub_936880((_DWORD *)v64, v21); if ( *(_DWORD *)(v64 + 28) ) **(_DWORD **)(v64 + 32) = v75; v22 = *(_DWORD *)(v5 + 1720); sub_938390((_DWORD *)v64, 0); if ( *(_DWORD *)(v64 + 28) ) { result = **(_DWORD **)(v64 + 36); v72 = **(_DWORD ***)(v64 + 36); } else { v72 = 0; result = 0; } if ( *(_DWORD *)(result + 8) ) { v59 = *(_DWORD *)(result + 16); v58 = *(_DWORD *)(result + 20); v57 = *(_DWORD *)(result + 12); v56 = *(_DWORD *)(result + 8); v23 = *(char **)(v5 + 1720); if ( v17 ) { result = sub_9383E0(v23, v56, v57, v58, v59); if ( v76 ) { if ( !result ) return result; if ( v79 ) { v24 = (float *)(v76 + 4); v25 = (float *)(result + 8); v26 = v16 + 2; v65 = v26; v71 = v79; do { *(v25 - 2) = *(v26 - 2); *(v25 - 1) = *(v26 - 1); *v25 = *v26; *(float *)&v73 = v24[2] * 255.0; v79 = (signed int)*(float *)&v73; v27 = (signed int)*(float *)&v73; *(float *)&v73 = *(v24 - 1) * 255.0; v77 = (signed int)*(float *)&v73; v28 = (signed int)*(float *)&v73; *(float *)&v73 = *v24 * 255.0; v75 = (signed int)*(float *)&v73; v29 = (signed int)*(float *)&v73; *(float *)&v73 = v24[1] * 255.0; v76 = (signed int)*(float *)&v73; v25 += 6; v30 = v76 | ((v29 | ((v28 | (v27 << 8)) << 8)) << 8); v26 = v65 + 3; *((_DWORD *)v25 - 5) = v30; *(v25 - 4) = *v17; v24 += 4; v31 = v17[1]; v17 += 2; v32 = v71-- == 1; *(v25 - 3) = v31; v65 += 3; } while ( !v32 ); } } else { if ( !result ) return result; v33 = v79; v34 = 0; if ( v79 >= 4 ) { v35 = ((unsigned int)(v79 - 4) >> 2) + 1; v34 = 4 * v35; do { v36 = *v16; v16 += 12; *(float *)result = v36; v17 += 8; result += 80; --v35; *(float *)(result - 76) = *(v16 - 11); *(float *)(result - 72) = *(v16 - 10); *(float *)(result - 68) = *(v17 - 8); *(float *)(result - 64) = *(v17 - 7); *(float *)(result - 60) = *(v16 - 9); *(float *)(result - 56) = *(v16 - 8); *(float *)(result - 52) = *(v16 - 7); *(float *)(result - 48) = *(v17 - 6); *(float *)(result - 44) = *(v17 - 5); *(float *)(result - 40) = *(v16 - 6); *(float *)(result - 36) = *(v16 - 5); *(float *)(result - 32) = *(v16 - 4); *(float *)(result - 28) = *(v17 - 4); *(float *)(result - 24) = *(v17 - 3); *(float *)(result - 20) = *(v16 - 3); *(float *)(result - 16) = *(v16 - 2); *(float *)(result - 12) = *(v16 - 1); *(float *)(result - 8) = *(v17 - 2); *(float *)(result - 4) = *(v17 - 1); } while ( v35 ); v33 = v79; } if ( v34 < v33 ) { v37 = result + 8; v38 = (int)(v16 + 2); v39 = v33 - v34; do { v40 = *(float *)(v38 - 8); v38 += 12; *(float *)(v37 - 8) = v40; v17 += 2; v37 += 20; --v39; *(float *)(v37 - 24) = *(float *)(v38 - 16); *(float *)(v37 - 20) = *(float *)(v38 - 12); *(float *)(v37 - 16) = *(v17 - 2); *(float *)(v37 - 12) = *(v17 - 1); } while ( v39 ); } } } else { result = sub_9383E0(v23, v56, v57, v58, v59); if ( v76 ) { if ( !result ) return result; if ( v79 ) { v41 = (float *)(v76 + 4); v42 = v16 + 2; v43 = result + 8; v63 = v76 - result - 8; v66 = v79; do { *(float *)(v43 - 8) = *(v42 - 2); *(float *)(v43 - 4) = *(v42 - 1); *(float *)v43 = *v42; v74 = v41[2] * 255.0; v79 = (signed int)v74; v44 = (signed int)v74; v74 = *(float *)(v43 + v63) * 255.0; v77 = (signed int)v74; v45 = *v41 * 255.0; v73 = (signed int)v74; v74 = v45; v76 = (signed int)v74; v46 = (signed int)v74; v74 = v41[1] * 255.0; v71 = (signed int)v74; v42 += 3; v41 += 4; *(_DWORD *)(v43 + 4) = v71 | ((v46 | ((v73 | (v44 << 8)) << 8)) << 8); v43 += 16; --v66; } while ( v66 ); } } else { if ( !result ) return result; v47 = v79; v76 = 0; if ( v79 >= 4 ) { v48 = ((unsigned int)(v79 - 4) >> 2) + 1; v76 = 4 * v48; do { v49 = *v16; v16 += 12; *(float *)result = v49; result += 48; --v48; *(float *)(result - 44) = *(v16 - 11); *(float *)(result - 40) = *(v16 - 10); *(float *)(result - 36) = *(v16 - 9); *(float *)(result - 32) = *(v16 - 8); *(float *)(result - 28) = *(v16 - 7); *(float *)(result - 24) = *(v16 - 6); *(float *)(result - 20) = *(v16 - 5); *(float *)(result - 16) = *(v16 - 4); *(float *)(result - 12) = *(v16 - 3); *(float *)(result - 8) = *(v16 - 2); *(float *)(result - 4) = *(v16 - 1); } while ( v48 ); } if ( v76 < v47 ) { v50 = (int)(v16 + 2); v51 = (int)v16 - result; v52 = v47 - v76; v53 = result + 8; do { v50 += 12; *(float *)(v53 - 8) = *(float *)(v51 + v53 - 8); v53 += 12; --v52; *(float *)(v53 - 16) = *(float *)(v50 - 16); *(float *)(v53 - 12) = *(float *)(v50 - 12); } while ( v52 ); } } } sub_9384C0(*(_DWORD *)(v5 + 1720), v72[2]); result = (*(int (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *))(**(_DWORD **)(v5 + 2208) + 20))( 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67); if ( !result ) { (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *, int, int))(**(_DWORD **)(v5 + 2208) + 24))( 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67, v60, v61); v54 = (*(int (**)(void))(**(_DWORD **)(v5 + 2208) + 52))(); if ( *(_DWORD *)(v64 + 28) ) v55 = **(_DWORD **)(v64 + 32); else v55 = 0; (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, int))(**(_DWORD **)(v5 + 132) + 400))( *(_DWORD *)(v5 + 132), 0, v72[2], 0, v55); (*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)(v5 + 132) + 416))(*(_DWORD *)(v5 + 132), v62); if ( v54 ) { do { (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *))(**(_DWORD **)(v5 + 2208) + 28))( 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *))(**(_DWORD **)(v5 + 2208) + 32))( 0, 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *))(**(_DWORD **)(v5 + 2208) + 36))( 0, 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67); (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)(v5 + 1716) + 8304) + 4))(); (*(void (__stdcall **)(_DWORD, signed int, _DWORD, _DWORD, _DWORD, _DWORD, unsigned int))(**(_DWORD **)(v5 + 132) + 328))( *(_DWORD *)(v5 + 132), 2, *(_DWORD *)(v64 + 52), 0, *(_DWORD *)(v64 + 20), 0, v78 >> 1); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, int, _DWORD, _DWORD, char *, int *))(**(_DWORD **)(v5 + 2208) + 44))( 0, 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16), &v80, &v67); } while ( (*(int (**)(void))(**(_DWORD **)(v5 + 2208) + 56))() ); } result = (*(int (__stdcall **)(_DWORD, _DWORD, int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 2208) + 48))( 0, 0, v64, *(_DWORD *)(v5 + 12), *(_DWORD *)(v5 + 16)); } } } } } } return result; } // 9268C0: could not find valid save-restore pair for edi // 9268C0: could not find valid save-restore pair for esi //----- (00926F80) -------------------------------------------------------- _DWORD *__thiscall sub_926F80(int this) { int v1; // esi _DWORD *v2; // eax int v3; // ebx _DWORD *v4; // edi int v5; // edi _DWORD *result; // eax _DWORD *v7; // ebx int v8; // edx void *v9; // ecx int v10; // eax int v11; // ecx _DWORD *j; // eax int v13; // edi _DWORD *v14; // eax _DWORD *v15; // ecx void *v16; // edx int v17; // edi _DWORD *v18; // ecx void *v19; // edx unsigned int i; // [esp+Ch] [ebp-18h] int v21; // [esp+10h] [ebp-14h] int v22; // [esp+14h] [ebp-10h] int v23; // [esp+18h] [ebp-Ch] _DWORD *v24; // [esp+1Ch] [ebp-8h] int v25; // [esp+20h] [ebp-4h] v1 = this; v2 = *(_DWORD **)(this + 1052); if ( !v2 || *(_BYTE *)(this + 1272) ) { v17 = *(_DWORD *)(this + 1068); if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); *(_DWORD *)(v1 + 1068) = 0; } result = *(_DWORD **)(v1 + 1052); *(_DWORD *)(v1 + 1060) = 0; *(_DWORD *)(v1 + 1064) = 0; if ( result ) { do { v18 = (_DWORD *)result[3]; v19 = dword_BA6E54; dword_BA6E54 = result; result[3] = v19; result = v18; } while ( v18 ); } *(_DWORD *)(v1 + 1052) = 0; *(_DWORD *)(v1 + 1056) = 0; } else { v3 = *v2; v4 = (_DWORD *)v2[2]; v25 = *(_DWORD *)(*v2 + 188); if ( (*(int (__stdcall **)(_DWORD, int, _DWORD *, _DWORD, _DWORD, int, int))(**(_DWORD **)(this + 1068) + 20))( *v2, v25, v4, *(_DWORD *)(this + 1060), *(_DWORD *)(this + 1064), *v2 + 104, *v2 + 36) ) { v5 = *(_DWORD *)(v1 + 1068); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } *(_DWORD *)(v1 + 1068) = 0; } *(_DWORD *)(v1 + 1060) = 0; *(_DWORD *)(v1 + 1064) = 0; result = sub_921440((_DWORD *)v1); } else { (*(void (__stdcall **)(int, int, _DWORD *, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 1068) + 24))( v3, v25, v4, *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), v3 + 104, v3 + 36); if ( (*(int (**)(void))(**(_DWORD **)(v1 + 1068) + 52))() ) { do { v7 = *(_DWORD **)(v1 + 1052); v24 = *(_DWORD **)(v1 + 1052); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 1068) + 28))( *v7, *(_DWORD *)(*v7 + 188), v7[2], *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), *v7 + 104, *v7 + 36); while ( 1 ) { v4 = (_DWORD *)v7[2]; v3 = *v7; v8 = v24[1]; v9 = *(void **)(v1 + 1068); v25 = *(_DWORD *)(v3 + 188); v23 = v24[1]; if ( v9 == *(void **)(v1 + 2208) && v8 && (unsigned int)*(unsigned __int16 *)(v8 + 32) > *(_DWORD *)(v1 + 1248) ) { nullsub_6(v9); } else { (*(void (__stdcall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v9 + 32))( v3, v25, v23, v4, *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), v3 + 104, v3 + 36); v4 = (_DWORD *)(*(int (__stdcall **)(int, int, _DWORD *, _DWORD))(**(_DWORD **)(v1 + 1068) + 40))( v3, v23, v4, *(_DWORD *)(v1 + 1060)); (*(void (__stdcall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 1068) + 36))( v3, v25, v23, v4, *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), v3 + 104, v3 + 36); (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)(v1 + 1716) + 8304) + 4))(); if ( v4[12] ) { v21 = 0; for ( i = 0; i < v4[17]; ++i ) { v10 = v4[18]; if ( v10 ) { v11 = *(unsigned __int16 *)(v10 + 2 * i) - 2; v22 = *(unsigned __int16 *)(v10 + 2 * i) - 2; } else { v22 = v4[15]; v11 = v4[15]; } (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 132) + 328))( *(_DWORD *)(v1 + 132), v4[14], v4[13], 0, v4[5], v21, v11); v21 += v22 + 2; } } else { (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(v1 + 132) + 324))( *(_DWORD *)(v1 + 132), v4[14], v4[13], v4[15]); } (*(void (__stdcall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 1068) + 44))( v3, v25, v23, v4, *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), v3 + 104, v3 + 36); v24 = (_DWORD *)v24[3]; } if ( !v24 ) break; v7 = v24; } } while ( (*(int (**)(void))(**(_DWORD **)(v1 + 1068) + 56))() ); } for ( j = *(_DWORD **)(v1 + 1052); j; j = (_DWORD *)j[3] ) *(_WORD *)(*(_DWORD *)(*j + 184) + 50) &= 0xF000u; (*(void (__stdcall **)(int, int, _DWORD *, _DWORD, _DWORD, int, int))(**(_DWORD **)(v1 + 1068) + 48))( v3, v25, v4, *(_DWORD *)(v1 + 1060), *(_DWORD *)(v1 + 1064), v3 + 104, v3 + 36); v13 = *(_DWORD *)(v1 + 1068); if ( v13 ) { if ( !InterlockedDecrement((volatile LONG *)(v13 + 4)) && v13 ) (**(void (__thiscall ***)(int, signed int))v13)(v13, 1); *(_DWORD *)(v1 + 1068) = 0; } v14 = *(_DWORD **)(v1 + 1052); *(_DWORD *)(v1 + 1060) = 0; *(_DWORD *)(v1 + 1064) = 0; if ( v14 ) { do { v15 = (_DWORD *)v14[3]; v16 = dword_BA6E54; dword_BA6E54 = v14; v14[3] = v16; v14 = v15; } while ( v15 ); } *(_DWORD *)(v1 + 1052) = 0; *(_DWORD *)(v1 + 1056) = 0; result = (_DWORD *)(*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(v1 + 1716) + 252))( *(_DWORD *)(v1 + 1716), 0); } } return result; } //----- (009273B0) -------------------------------------------------------- _DWORD *__thiscall sub_9273B0(_DWORD *this, _DWORD *a2) { int v2; // ebx int v3; // edi _DWORD *v4; // esi int v5; // eax int v6; // edi int v7; // ebx int v8; // ebx int v9; // edi _DWORD *result; // eax bool v11; // al int v12; // ecx int v13; // ebx int v14; // edi int v15; // ecx bool v16; // zf int v17; // ecx int v18; // [esp-18h] [ebp-2Ch] int v19; // [esp-14h] [ebp-28h] int v20; // [esp-10h] [ebp-24h] char v21; // [esp-Ch] [ebp-20h] int v22; // [esp+Ch] [ebp-8h] bool v23; // [esp+Ch] [ebp-8h] int v24; // [esp+Ch] [ebp-8h] int v25; // [esp+10h] [ebp-4h] v2 = a2[47]; v3 = a2[46]; v4 = this; v22 = a2[46]; v25 = a2[47]; if ( !this[267] ) { v5 = sub_402BA0((int)&unk_BA6D54, a2[48]); v6 = v4[267]; v7 = v5; if ( v6 != v5 ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v4[267] = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } if ( !v4[267] ) { v8 = v4[552]; v9 = v4[267]; if ( v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); v4[267] = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)(v8 + 4)); } } v2 = v25; v3 = v22; } result = (_DWORD *)(*(int (__thiscall **)(int))(*(_DWORD *)v3 + 64))(v3); if ( (_WORD)result ) { v11 = sub_9238A0(v4, a2, v4[267]); v23 = v11; if ( (*(_WORD *)(v3 + 50) & 0xF000) == -32768 || v2 && !v11 ) { v21 = v11; v20 = v2; v19 = v3; v18 = v4[428]; } else { v21 = v11; v20 = v2; v19 = v3; v18 = v4[427]; } v12 = v4[426]; sub_93C880(v18, v19, v20, v21, 0, 0); if ( v23 ) { v13 = *(_DWORD *)(v2 + 12); result = *(_DWORD **)(v13 + 8); v14 = *(_DWORD *)(v13 + 12); if ( result ) { v24 = *(_DWORD *)(v13 + 8); do { result = dword_BA6E54; if ( dword_BA6E54 ) { dword_BA6E54 = (void *)*((_DWORD *)dword_BA6E54 + 3); result[3] = 0; } else { result = operator new(0x10u); } *result = a2; result[1] = v14; result[2] = *(_DWORD *)(v14 + 40); result[3] = 0; v15 = v4[264]; if ( v15 ) *(_DWORD *)(v15 + 12) = result; else v4[263] = result; v14 += 44; v16 = v24-- == 1; v4[264] = result; } while ( !v16 ); } } else { result = dword_BA6E54; if ( dword_BA6E54 ) { dword_BA6E54 = (void *)*((_DWORD *)dword_BA6E54 + 3); result[3] = 0; } else { result = operator new(0x10u); } *result = a2; result[1] = 0; result[2] = *(_DWORD *)(v3 + 60); result[3] = 0; v17 = v4[264]; if ( v17 ) *(_DWORD *)(v17 + 12) = result; else v4[263] = result; v4[264] = result; } } return result; } //----- (009275E0) -------------------------------------------------------- int __thiscall sub_9275E0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, _DWORD *a7) { _DWORD *v7; // edi int v8; // ebx _DWORD *v9; // esi int result; // eax int v11; // eax int v12; // ecx unsigned int i; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] int v15; // [esp+30h] [ebp+1Ch] v7 = this; if ( !a2 || (v8 = sub_402BA0((int)&unk_BA6D54, *(_DWORD *)(a2 + 192))) == 0 ) v8 = v7[552]; v9 = a7; result = (*(int (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 20))( v8, a2, a4, a7, v7[3], v7[4], a5, a6); if ( !result ) { (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 24))( v8, a2, a4, a7, v7[3], v7[4], a5, a6); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 52))(v8) ) { do { (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 28))( v8, a2, a4, v9, v7[3], v7[4], a5, a6); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 32))( v8, a2, a4, 0, v9, v7[3], v7[4], a5, a6); v9 = (_DWORD *)(*(int (__thiscall **)(int, int, _DWORD, _DWORD *, _DWORD))(*(_DWORD *)v8 + 40))( v8, a2, 0, v9, v7[3]); (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 36))( v8, a2, a4, 0, v9, v7[3], v7[4], a5, a6); (*(void (**)(void))(**(_DWORD **)(v7[429] + 8304) + 4))(); if ( v9[12] ) { v14 = 0; for ( i = 0; i < v9[17]; ++i ) { v11 = v9[18]; if ( v11 ) { v12 = *(unsigned __int16 *)(v11 + 2 * i) - 2; v15 = *(unsigned __int16 *)(v11 + 2 * i) - 2; } else { v15 = v9[15]; v12 = v9[15]; } (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, int, int))(*(_DWORD *)v7[33] + 328))( v7[33], v9[14], v9[13], 0, v9[5], v14, v12); v14 += v15 + 2; } } else { (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7[33] + 324))( v7[33], v9[14], v9[13], v9[15]); } (*(void (__thiscall **)(int, int, int, _DWORD, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 44))( v8, a2, a4, 0, v9, v7[3], v7[4], a5, a6); } while ( (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 56))(v8) ); } (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, int))(*(_DWORD *)v8 + 48))( v8, a2, a4, v9, v7[3], v7[4], a5, a6); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v7[429] + 252))(0); } return result; } //----- (00927810) -------------------------------------------------------- int __userpurge sub_927810@(int a1@, int a2@, int a3@, int a4, int a5, int a6, int a7, _DWORD *a8) { int result; // eax int v9; // esi int v10; // edi int v11; // ebx _DWORD *v12; // edi void *v13; // ecx int v14; // eax int v15; // edi int v16; // eax int v17; // ecx int v18; // [esp-8h] [ebp-2Ch] int v19; // [esp-4h] [ebp-28h] void *v20; // [esp-4h] [ebp-28h] int v21; // [esp+4h] [ebp-20h] int v22; // [esp+8h] [ebp-1Ch] int v23; // [esp+Ch] [ebp-18h] unsigned int v24; // [esp+Ch] [ebp-18h] int v25; // [esp+10h] [ebp-14h] unsigned int v26; // [esp+14h] [ebp-10h] int v27; // [esp+18h] [ebp-Ch] int v28; // [esp+1Ch] [ebp-8h] int i; // [esp+20h] [ebp-4h] result = a6; v9 = a1; if ( a6 ) { v19 = a2; v23 = *(_DWORD *)(a6 + 12); v18 = a3; v10 = *(_DWORD *)(v23 + 12); v22 = *(_DWORD *)(v23 + 12); v21 = (*(_WORD *)(v10 + 34) != 0) + 4; if ( !a4 || (v11 = sub_402BA0((int)&unk_BA6D54, *(_DWORD *)(a4 + 192))) == 0 ) v11 = *(_DWORD *)(v9 + 2208); v12 = *(_DWORD **)(v10 + 40); result = (*(int (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, _DWORD *))(*(_DWORD *)v11 + 20))( v11, a4, a6, v12, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16), a7, a8); if ( !result ) { (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, _DWORD *, int, int))(*(_DWORD *)v11 + 24))( v11, a4, a6, v12, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16), a7, a8, v18, v19); v24 = *(_DWORD *)(v23 + 8); if ( (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 52))(v11) ) { do { (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD, int, _DWORD *))(*(_DWORD *)v11 + 28))( v11, a4, a6, v12, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16), a7, a8); v13 = a8; *(_DWORD *)(v9 + 1120) = *a8; *(_DWORD *)(v9 + 1124) = a8[1]; *(_DWORD *)(v9 + 1128) = a8[2]; *(_DWORD *)(v9 + 1132) = a8[3]; v25 = 0; if ( v24 ) { v14 = v22; for ( i = v22; ; v14 = i ) { if ( v11 != *(_DWORD *)(v9 + 2208) || (unsigned int)*(unsigned __int16 *)(v14 + 32) <= *(_DWORD *)(v9 + 1248) ) { v15 = *(_DWORD *)(v14 + 40); v20 = v13; (*(void (__thiscall **)(int, int, int, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v11 + 32))( v11, a4, a6, v14, *(_DWORD *)(v14 + 40), *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16)); result = (*(int (__thiscall **)(int, int, int, int, _DWORD))(*(_DWORD *)v11 + 40))( v11, a4, i, v15, *(_DWORD *)(v9 + 12)); v12 = (_DWORD *)result; if ( !result ) return result; (*(void (__thiscall **)(int, int, int, int, int, _DWORD, _DWORD, int, _DWORD *, int, void *))(*(_DWORD *)v11 + 36))( v11, a4, a6, i, result, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16), a7, a8, a7, v20); (*(void (**)(void))(**(_DWORD **)(*(_DWORD *)(v9 + 1716) + 8304) + 4))(); v27 = 0; v26 = 0; if ( v12[17] ) { do { v16 = v12[18]; if ( v16 ) { v17 = *(unsigned __int16 *)(v16 + 2 * v26) - 2; v28 = *(unsigned __int16 *)(v16 + 2 * v26) - 2; } else { v28 = v12[15]; v17 = v12[15]; } (*(void (__stdcall **)(_DWORD, int, _DWORD, _DWORD, _DWORD, int, int))(**(_DWORD **)(v9 + 132) + 328))( *(_DWORD *)(v9 + 132), v21, v12[13], 0, *(unsigned __int16 *)(i + 28), v27, v17); v27 += v28 + 2; ++v26; } while ( v26 < v12[17] ); } (*(void (__thiscall **)(int, int, int, int, _DWORD *, _DWORD, _DWORD, int, _DWORD *))(*(_DWORD *)v11 + 44))( v11, a4, a6, i, v12, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16), a7, a8); } else { nullsub_6(v13); } i += 44; if ( ++v25 >= v24 ) break; v13 = a8; } } *(_WORD *)(a5 + 50) &= 0xF000u; } while ( (*(int (__thiscall **)(int))(*(_DWORD *)v11 + 56))(v11) ); } (*(void (__thiscall **)(int, int, int, _DWORD *, _DWORD, _DWORD))(*(_DWORD *)v11 + 48))( v11, a4, a6, v12, *(_DWORD *)(v9 + 12), *(_DWORD *)(v9 + 16)); result = (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 1716) + 252))(0); } } return result; } // 927810: could not find valid save-restore pair for ebx // 927810: could not find valid save-restore pair for edi //----- (00927AE0) -------------------------------------------------------- int __thiscall sub_927AE0(_DWORD *this, int a2) { int result; // eax int v3; // ebx int v4; // esi unsigned int v5; // eax unsigned int v6; // edi int v7; // eax int *v8; // esi int *v9; // ebx int *v10; // edi bool v11; // zf int v12; // [esp+4h] [ebp-14h] int v13; // [esp+8h] [ebp-10h] int v14; // [esp+Ch] [ebp-Ch] void *v15; // [esp+10h] [ebp-8h] _DWORD *v16; // [esp+14h] [ebp-4h] result = a2; v3 = (int)this; v16 = this; if ( a2 ) { v4 = *(_DWORD *)(a2 + 60); v13 = v4; if ( v4 ) { if ( *(_DWORD *)(v4 + 28) && **(_DWORD **)(v4 + 36) ) { sub_923350((int)this); v5 = *(_DWORD *)(v4 + 28); v6 = 0; v12 = 0; if ( v5 ) { if ( v5 <= 0 ) { v7 = 0; goto LABEL_9; } do { v7 = *(_DWORD *)(*(_DWORD *)(v4 + 36) + 4 * v6); LABEL_9: v14 = *(_DWORD *)(v7 + 4); v15 = 0; if ( sub_8C4C90((_DWORD *)(v3 + 1036), v14, &v15) ) { v8 = (int *)v15; v9 = 0; if ( v15 ) { do { if ( *v8 == a2 ) { v10 = 0; if ( v9 ) { v9[8] = v8[8]; v10 = (int *)v8[8]; } else if ( v8[8] ) { sub_815C70(v16 + 259, v14, v8[8]); v10 = (int *)v8[8]; } else { sub_916F40(v16 + 259, v14); } v8[8] = 0; operator delete(v8); v8 = v10; v6 = v12; } else { v9 = v8; v8 = (int *)v8[8]; } } while ( v8 ); } v4 = v13; v3 = (int)v16; } v12 = ++v6; } while ( v6 < *(_DWORD *)(v4 + 28) ); } v11 = (*(_DWORD *)(v3 + 80))-- == 1; if ( v11 ) *(_DWORD *)(v3 + 76) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 52)); if ( *(_DWORD *)(v3 + 48) == 1 ) (*(void (__thiscall **)(int))(*(_DWORD *)v3 + 260))(v3); v11 = (*(_DWORD *)(v3 + 48))-- == 1; if ( v11 ) *(_DWORD *)(v3 + 44) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 20)); result = a2; } result = (*(int (__stdcall **)(int, _DWORD))(**(_DWORD **)(v3 + 1704) + 28))(result, 0); } } return result; } //----- (00927C50) -------------------------------------------------------- void __thiscall sub_927C50(char *this, int a2) { int v2; // edx char *v3; // ebx int v4; // eax int v5; // edi DWORD v6; // eax unsigned int v7; // eax unsigned int v8; // ecx _DWORD *v9; // ebx int v10; // eax int v11; // edi _DWORD *v12; // esi _DWORD *v13; // esi _DWORD *v14; // eax _DWORD *v15; // edi bool v16; // zf int v17; // ecx char *v18; // [esp+4h] [ebp-1Ch] int v19; // [esp+8h] [ebp-18h] int v20; // [esp+Ch] [ebp-14h] _DWORD *v21; // [esp+10h] [ebp-10h] int v22; // [esp+14h] [ebp-Ch] int v23; // [esp+18h] [ebp-8h] unsigned int v24; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = this; v18 = this; if ( a2 ) { v4 = *(_DWORD *)(a2 + 12); if ( v4 ) { if ( *(_DWORD *)(v4 + 40) ) { if ( *(_DWORD *)(a2 + 8) ) { v23 = *(_DWORD *)(a2 + 12); v19 = *(_DWORD *)(a2 + 8); do { v5 = *(_DWORD *)(v4 + 40); v20 = *(_DWORD *)(v4 + 40); if ( *(_DWORD *)(v5 + 28) && **(_DWORD **)(v5 + 36) ) { EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 20)); *((_DWORD *)v3 + 11) = GetCurrentThreadId(); if ( ++*((_DWORD *)v3 + 12) == 1 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 256))(v3); EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 52)); v6 = GetCurrentThreadId(); ++*((_DWORD *)v3 + 20); *((_DWORD *)v3 + 19) = v6; v7 = *(_DWORD *)(v5 + 28); v8 = 0; v24 = 0; if ( v7 ) { v9 = v3 + 1036; while ( 1 ) { if ( v8 >= v7 ) v10 = 0; else v10 = *(_DWORD *)(*(_DWORD *)(v5 + 36) + 4 * v8); v11 = *(_DWORD *)(v10 + 4); v22 = *(_DWORD *)(v10 + 4); v12 = *(_DWORD **)(v9[2] + 4 * (*(int (__thiscall **)(_DWORD *, int))(*v9 + 4))(v9, v11)); if ( v12 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v9 + 8))(v9, v11, v12[1]) ) { v12 = (_DWORD *)*v12; if ( !v12 ) goto LABEL_32; } v13 = (_DWORD *)v12[2]; v14 = 0; v21 = 0; if ( v13 ) { while ( 1 ) { if ( v13[2] == v23 ) { v15 = 0; if ( v14 ) { v14[8] = v13[8]; v15 = (_DWORD *)v13[8]; } else if ( v13[8] ) { sub_815C70(v9, v22, v13[8]); v15 = (_DWORD *)v13[8]; } else { sub_916F40(v9, v22); } v13[8] = 0; operator delete(v13); v13 = v15; } else { v21 = v13; v13 = (_DWORD *)v13[8]; } if ( !v13 ) break; v14 = v21; } } } LABEL_32: v7 = *(_DWORD *)(v20 + 28); if ( ++v24 >= v7 ) break; v5 = v20; v8 = v24; } v3 = v18; } v16 = (*((_DWORD *)v3 + 20))-- == 1; if ( v16 ) *((_DWORD *)v3 + 19) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 52)); if ( *((_DWORD *)v3 + 12) == 1 ) (*(void (__thiscall **)(char *))(*(_DWORD *)v3 + 260))(v3); v16 = (*((_DWORD *)v3 + 12))-- == 1; if ( v16 ) *((_DWORD *)v3 + 11) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 20)); v2 = a2; } v4 = v23 + 44; v16 = v19-- == 1; v23 += 44; } while ( !v16 ); } v17 = *((_DWORD *)v3 + 426); sub_93C750(v2); } } } } //----- (00927E40) -------------------------------------------------------- _DWORD *__thiscall sub_927E40(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax int v4; // ecx v2 = this + 451; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[451] + 4))(this + 451); result[2] = a2; result[1] = 0; *result = v2[1]; v4 = v2[1]; if ( v4 ) { *(_DWORD *)(v4 + 4) = result; ++v2[3]; } else { ++v2[3]; v2[2] = result; } v2[1] = result; return result; } //----- (00927E90) -------------------------------------------------------- unsigned int __thiscall sub_927E90(void *this, int a2, signed int a3) { void *v3; // esi unsigned __int16 v4; // cx int v5; // edi unsigned int v6; // ebx int v7; // eax char v8; // dl unsigned int result; // eax char v10; // dl char *v11; // eax int v12; // edx int v13; // ecx unsigned int v14; // ecx int v15; // edx int v16; // eax unsigned __int16 v17; // ax int v18; // ecx int v19; // ecx double v20; // st7 double v21; // st6 int v22; // ecx __int16 i; // dx __int16 j; // ax float v25; // ST48_4 int v26; // edi double v27; // st4 double v28; // st3 float v29; // ST50_4 double v30; // st2 int v31; // eax float v32; // ST48_4 float v33; // ST44_4 double v34; // st1 double v35; // rt0 double v36; // st1 double v37; // st4 double v38; // st1 double v39; // rt1 double v40; // st1 double v41; // st2 double v42; // st1 double v43; // rt2 double v44; // st1 double v45; // rtt double v46; // st1 double v47; // rt0 double v48; // rt1 double v49; // st1 double v50; // st3 double v51; // rt2 int v52; // edi double v53; // st0 float v54; // ST50_4 _DWORD *v55; // eax double v56; // rtt double v57; // st1 double v58; // st4 double v59; // rt0 double v60; // rt1 double v61; // st1 double v62; // st2 double v63; // rt2 unsigned int v64; // ecx int v65; // eax int v66; // eax int v67; // edi int *v68; // ebx void *v69; // ST1C_4 int v70; // ecx unsigned int v71; // esi signed int v72; // edx float v73; // [esp+Ch] [ebp-4Ch] float v74; // [esp+10h] [ebp-48h] float v75; // [esp+14h] [ebp-44h] int v76; // [esp+18h] [ebp-40h] unsigned __int16 v77; // [esp+20h] [ebp-38h] float v78; // [esp+24h] [ebp-34h] int v79; // [esp+24h] [ebp-34h] float v80; // [esp+28h] [ebp-30h] int v81; // [esp+28h] [ebp-30h] float v82; // [esp+2Ch] [ebp-2Ch] float v83; // [esp+30h] [ebp-28h] float v84; // [esp+30h] [ebp-28h] float v85; // [esp+30h] [ebp-28h] signed int v86; // [esp+34h] [ebp-24h] signed int v87; // [esp+38h] [ebp-20h] unsigned __int16 v88; // [esp+3Ch] [ebp-1Ch] int v89; // [esp+40h] [ebp-18h] int v90; // [esp+44h] [ebp-14h] unsigned __int16 v91; // [esp+48h] [ebp-10h] unsigned __int16 v92; // [esp+4Ch] [ebp-Ch] unsigned int v93; // [esp+50h] [ebp-8h] __int16 v94; // [esp+54h] [ebp-4h] char v95; // [esp+57h] [ebp-1h] unsigned int v96; // [esp+60h] [ebp+8h] v3 = this; v4 = *(_WORD *)(a2 + 16); v5 = *(_DWORD *)(a2 + 28); v6 = (unsigned __int16)(4 * v4); v88 = 4 * v4; v93 = (signed int)(3 * v6) / 2; v7 = 2 * v4; v8 = (unsigned __int8)a3 >> 3; *(_DWORD *)(v5 + 60) = v7; *(_DWORD *)(v5 + 64) = v7; result = 0; v10 = v8 & 1; v76 = v5; v77 = v4; v95 = v10; *(_DWORD *)(v5 + 20) = v6; *(_DWORD *)(v5 + 24) = v6; *(_DWORD *)(v5 + 76) = 0; *(_DWORD *)(v5 + 72) = 0; *(_DWORD *)(v5 + 68) = 1; if ( *(_DWORD *)(v5 + 28) ) result = **(_DWORD **)(v5 + 36); v89 = result; if ( v10 ) { if ( v88 > *((_WORD *)v3 + 1070) ) { operator delete(*((void **)v3 + 532)); operator delete(*((void **)v3 + 533)); operator delete(*((void **)v3 + 534)); *((_DWORD *)v3 + 532) = operator new(8 * v6); v11 = (char *)operator new(16 * v6); if ( v11 ) { v12 = v6 - 1; if ( (signed int)(v6 - 1) >= 0 ) { v13 = (int)(v11 + 8); do { *(float *)(v13 - 8) = 0.0; v13 += 16; --v12; *(float *)(v13 - 20) = 0.0; *(float *)(v13 - 16) = 0.0; *(float *)(v13 - 12) = 0.0; } while ( v12 >= 0 ); } } else { v11 = 0; } *((_DWORD *)v3 + 533) = v11; *((_DWORD *)v3 + 534) = operator new(8 * v6); *((_WORD *)v3 + 1070) = v88; } result = v89; if ( v89 ) { v14 = *(_DWORD *)(v5 + 28) ? **(_DWORD **)(v5 + 32) : 0; result = *(_DWORD *)(v89 + 20) / v14; if ( v6 > result ) a3 = 15; } } if ( !(a3 | 0xFFFFFFF7) ) goto LABEL_62; v87 = (*(int (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 417) + 60))(0); v86 = (*(int (__stdcall **)(_DWORD))(**((_DWORD **)v3 + 417) + 64))(0); v15 = *(_DWORD *)(*(_DWORD *)(a2 + 20) + 40); if ( *(_DWORD *)v15 ) v16 = *(_DWORD *)(*(_DWORD *)v15 + 4); else v16 = 0; v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v16 + 60))(v16); v18 = *(_DWORD *)(*(_DWORD *)(a2 + 20) + 40); if ( *(_DWORD *)v18 ) v19 = *(_DWORD *)(*(_DWORD *)v18 + 4); else v19 = 0; v80 = 1.0 / (double)v17; v91 = 0; v78 = 1.0 / (double)(*(unsigned __int16 (**)(void))(*(_DWORD *)v19 + 64))(); if ( v77 > 0u ) { v20 = v80; v90 = 0; v21 = v78; do { v22 = v90 + *(_DWORD *)(a2 + 8); for ( i = *(_WORD *)(v22 + 2); i < 0; i += v87 ) ; for ( ; i >= v87; i -= v87 ) ; for ( j = *(_WORD *)v22; j < 0; j += v86 ) ; for ( ; j >= v86; j -= v86 ) ; v25 = (double)i - 0.5; v26 = 0; v82 = (double)j - 0.5; v27 = (double)*(unsigned __int16 *)(v22 + 4); v28 = v25; v29 = v25 + v27; v30 = (double)*(unsigned __int16 *)(v22 + 6); v75 = v82 + v30; LOWORD(v31) = 0; v92 = 4 * v91; v32 = (double)*(unsigned __int16 *)(v22 + 10) * v20; v33 = (double)*(unsigned __int16 *)(v22 + 8) * v21; v34 = v32; v81 = 0; v35 = v34; v36 = v27 * v20 + v34; v37 = v35; v74 = v36; v38 = v33; v79 = 0; v39 = v38; v40 = v30 * v21 + v38; v41 = v39; v73 = v40; v42 = v29; while ( 1 ) { v94 = (unsigned __int16)v31 >> 1; if ( (unsigned __int16)v31 >> 1 ) { v83 = v42; v51 = v42; v49 = v28; v50 = v51; } else { v48 = v42; v49 = v28; v50 = v48; v83 = v49; } *(float *)(*((_DWORD *)v3 + 532) + 8 * v92) = v83; v52 = v26 % 2; v53 = v52 ? v75 : v82; v54 = v53; *(float *)(*((_DWORD *)v3 + 532) + 8 * v92 + 4) = v54; v55 = (_DWORD *)(*((_DWORD *)v3 + 533) + 16 * v92); *v55 = *(_DWORD *)(v22 + 12); v55[1] = *(_DWORD *)(v22 + 16); v55[2] = *(_DWORD *)(v22 + 20); v55[3] = *(_DWORD *)(v22 + 24); if ( v94 ) { v84 = v74; v59 = v49; v57 = v37; v58 = v59; } else { v56 = v49; v57 = v37; v58 = v56; v84 = v57; } *(float *)(*((_DWORD *)v3 + 534) + 8 * v92) = v84; if ( v52 ) { v85 = v73; v63 = v57; v61 = v41; v62 = v63; } else { v60 = v57; v61 = v41; v62 = v60; v85 = v61; } *(float *)(*((_DWORD *)v3 + 534) + 8 * v92++ + 4) = v85; v31 = v81 + 1; v26 = v79 + 1; v81 = v31; ++v79; if ( (unsigned __int16)v31 >= 4u ) break; v43 = v61; v44 = v62; v41 = v43; v45 = v44; v46 = v58; v37 = v45; v47 = v46; v42 = v50; v28 = v47; } v90 += 28; ++v91; } while ( v91 < v77 ); v5 = v76; } result = sub_938970( *((char **)v3 + 430), v5, v88, *((char **)v3 + 532), *((_DWORD *)v3 + 533), *((char **)v3 + 534), a3, v89, 0); if ( result ) { LABEL_62: if ( v95 ) { if ( v93 > *((_DWORD *)v3 + 537) ) { operator delete(*((void **)v3 + 536)); *((_DWORD *)v3 + 536) = operator new(2 * v93); *((_DWORD *)v3 + 537) = v93; LOWORD(v64) = 0; v65 = 0; v96 = 0; if ( v6 ) { do { *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * (unsigned __int16)v65) = v64; v66 = v65 + 1; *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * (unsigned __int16)v66++) = v64 + 1; *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * (unsigned __int16)v66++) = v64 + 2; *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * (unsigned __int16)v66++) = v64 + 2; v67 = (unsigned __int16)v66++; *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * v67) = v64 + 1; *(_WORD *)(*((_DWORD *)v3 + 536) + 2 * (unsigned __int16)v66) = v64 + 3; v64 = v96 + 4; v65 = v66 + 1; v96 = v64; } while ( v64 < v6 ); v5 = v76; } } v68 = *(int **)(v5 + 48); v69 = (void *)(*(_BYTE *)(v5 + 16) != 0 ? 0x10 : 0); v70 = *((_DWORD *)v3 + 431); a3 = *(_DWORD *)(v5 + 44); result = sub_93B2A0(v70, (int)v68, *((void **)v3 + 536), v93, v93, v68, (unsigned int *)&a3, 1, v69); v71 = result; if ( v68 != (int *)result ) { result = sub_936720((_DWORD *)v5); v72 = a3; *(_DWORD *)(v5 + 48) = v71; *(_DWORD *)(v5 + 40) = v93; *(_DWORD *)(v5 + 44) = v72; } } } return result; } //----- (009283F0) -------------------------------------------------------- char __thiscall sub_9283F0(_DWORD *this, int a2, int a3, unsigned __int16 a4, unsigned __int16 a5, int a6, unsigned int a7, int a8, int a9) { _DWORD *v9; // edi _DWORD *v10; // esi char result; // al unsigned __int16 v12; // ax int v13; // ecx int v14; // ST0C_4 int v15; // eax unsigned int v16; // ebx int v17; // eax int *v18; // eax int v19; // edx int v20; // esi _DWORD *v21; // ecx char v22; // al _DWORD *v23; // ecx char v24; // [esp+1Fh] [ebp+13h] int v25; // [esp+20h] [ebp+14h] v9 = *(_DWORD **)(a3 + 60); v10 = this; if ( sub_9366F0(*(_DWORD **)(a3 + 60)) ) return 1; v12 = (*(int (__thiscall **)(int))(*(_DWORD *)a3 + 64))(a3); v9[6] = *(unsigned __int16 *)(a3 + 12); v13 = a6; v9[5] = v12; v9[19] = v13; v14 = a9; v9[16] = a5; v15 = (unsigned __int16)a8; v9[15] = a4; v9[18] = a7; v9[17] = v15; result = sub_9233F0(v10, (int)v9, a3, 0, v14); v24 = result; if ( result ) { v16 = 0; a7 = v9[7]; if ( a7 ) { a8 = (int)(v10 + 259); do { if ( v16 >= v9[7] ) v17 = 0; else v17 = *(_DWORD *)(v9[9] + 4 * v16); v25 = *(_DWORD *)(v17 + 4); v18 = (int *)operator new(0x24u); v19 = a9; v20 = (int)v18; v18[1] = 0; v18[2] = 0; v18[4] = 0; v18[5] = 0; *v18 = a3; v21 = (_DWORD *)a8; v18[3] = v19; v18[6] = (int)v9; v18[7] = v16; v22 = sub_8C4C90(v21, v25, &a6); v23 = (_DWORD *)a8; *(_DWORD *)(v20 + 32) = v22 != 0 ? a6 : 0; sub_815C70(v23, v25, v20); ++v16; } while ( v16 < a7 ); result = v24; } } return result; } //----- (00928500) -------------------------------------------------------- char __thiscall sub_928500(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) { int v7; // eax int v8; // esi int v9; // eax unsigned __int16 *v10; // esi _DWORD *v11; // ebx int v12; // eax int v13; // edx int v14; // edi signed int v15; // ecx unsigned int v16; // eax _DWORD *v17; // edi signed int v18; // eax int *v19; // eax int v20; // esi _DWORD *v21; // eax bool v22; // zf unsigned int v24; // [esp+4h] [ebp-20h] int v25; // [esp+8h] [ebp-1Ch] _DWORD *v26; // [esp+Ch] [ebp-18h] unsigned __int16 *v27; // [esp+10h] [ebp-14h] int v28; // [esp+14h] [ebp-10h] int v29; // [esp+14h] [ebp-10h] int v30; // [esp+18h] [ebp-Ch] _DWORD *v31; // [esp+1Ch] [ebp-8h] char v32; // [esp+23h] [ebp-1h] v7 = *(_DWORD *)(a4 + 12); v8 = *(_DWORD *)(v7 + 12); v9 = *(_DWORD *)(v7 + 8); v26 = this; v32 = 1; if ( !v9 ) return 1; v10 = (unsigned __int16 *)(v8 + 28); v27 = v10; v25 = v9; do { v11 = (_DWORD *)*((_DWORD *)v10 + 3); if ( !sub_9366F0(*((_DWORD **)v10 + 3)) ) { v12 = *v10; v13 = v10[1]; v14 = *((_DWORD *)v10 - 2); v28 = *((_DWORD *)v10 - 1); v15 = v10[3]; v11[5] = v12; v11[6] = v12; if ( !(_WORD)v15 ) v15 = 1; v11[17] = v15; v11[15] = v13; v11[16] = v13; v11[18] = v28; v11[19] = v14; if ( sub_9233F0(v26, (int)v11, a3, (int)(v10 - 14), a5) ) { v16 = 0; v24 = v11[7]; v30 = 0; if ( v24 ) { v17 = v26 + 259; while ( 1 ) { v18 = v16 >= v11[7] ? 0 : *(_DWORD *)(v11[9] + 4 * v16); v29 = *(_DWORD *)(v18 + 4); v19 = (int *)operator new(0x24u); v20 = (int)v19; *v19 = a3; v19[1] = a4; v19[3] = a5; v19[2] = (int)(v27 - 14); v19[5] = a7; v19[7] = v30; v19[4] = a6; v19[8] = 0; v19[6] = (int)v11; v21 = *(_DWORD **)(v26[261] + 4 * (*(int (__thiscall **)(_DWORD *, int))(v26[259] + 4))(v26 + 259, v29)); v31 = v21; if ( v21 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v17 + 8))(v17, v29, v21[1]) ) { v31 = (_DWORD *)*v31; if ( !v31 ) goto LABEL_14; v21 = v31; } *(_DWORD *)(v20 + 32) = v31[2]; } else { LABEL_14: *(_DWORD *)(v20 + 32) = 0; } sub_815C70(v17, v29, v20); if ( ++v30 >= v24 ) break; v16 = v30; } v10 = v27; } } else { v32 = 0; } } v10 += 22; v22 = v25-- == 1; v27 = v10; } while ( !v22 ); return v32; } //----- (009286B0) -------------------------------------------------------- _DWORD *__thiscall sub_9286B0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST38_4 void *v4; // eax size_t v5; // ST28_4 void *v6; // eax size_t v7; // ST18_4 void *v8; // eax size_t v9; // ST08_4 void *v10; // eax size_t v11; // ST38_4 v1 = this; sub_85F4B0(this); *v1 = &NiDX9Renderer::`vftable'; v1[259] = &NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; v1[260] = 37; v1[262] = 0; v2 = operator new(0x94u); v3 = 4 * v1[260]; v1[261] = v2; memset(v2, 0, v3); v1[259] = &NiTPointerMap::`vftable'; v1[267] = 0; v1[411] = 0; v1[412] = 0; v1[413] = 0; v1[414] = 0; v1[419] = &NiTMapBase,HWND__ *,NiPointer>::`vftable'; v1[420] = 37; v1[422] = 0; v4 = operator new(0x94u); v5 = 4 * v1[420]; v1[421] = v4; memset(v4, 0, v5); v1[419] = &NiTPointerMap>::`vftable'; v1[425] = 0; v1[434] = &NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; v1[435] = 37; v1[437] = 0; v6 = operator new(0x94u); v7 = 4 * v1[435]; v1[436] = v6; memset(v6, 0, v7); v1[434] = &NiTPointerMap::`vftable'; v1[438] = &NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; v1[439] = 37; v1[441] = 0; v8 = operator new(0x94u); v9 = 4 * v1[439]; v1[440] = v8; memset(v8, 0, v9); v1[438] = &NiTPointerMap::`vftable'; v1[442] = &NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; v1[443] = 37; v1[445] = 0; v10 = operator new(0x94u); v11 = 4 * v1[443]; v1[444] = v10; memset(v10, 0, v11); v1[442] = &NiTPointerMap::`vftable'; v1[446] = 0; v1[450] = 0; v1[448] = 0; v1[449] = 0; v1[447] = &NiTPointerList>::`vftable'; v1[454] = 0; v1[452] = 0; v1[453] = 0; v1[451] = &NiTPointerList::`vftable'; v1[455] = 0; v1[456] = 0; v1[457] = 0; v1[458] = 0; v1[459] = 0; v1[460] = 0; v1[461] = 0; v1[462] = 0; v1[463] = 0; v1[464] = 0; v1[552] = 0; v1[553] = &NiTArray::`vftable'; v1[555] = 0; v1[556] = 0; v1[557] = 0; v1[554] = 0; v1[558] = 1; v1[561] = 0; v1[564] = 1; v1[562] = 0; v1[563] = 0; v1[560] = 0; v1[559] = &NiTArray::`vftable'; v1[565] = &NiTArray::`vftable'; v1[567] = 0; v1[570] = 1; v1[568] = 0; v1[569] = 0; v1[566] = 0; v1[571] = &NiTArray::`vftable'; v1[573] = 0; v1[576] = 1; v1[574] = 0; v1[575] = 0; v1[572] = 0; sub_922000(v1); return v1; } // A4484C: using guessed type void *NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; // A4486C: using guessed type void *NiTMapBase,HWND__ *,NiPointer>::`vftable'; // A4488C: using guessed type void *NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; // A448AC: using guessed type void *NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; // A448CC: using guessed type void *NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; // A4490C: using guessed type void *NiTArray::`vftable'; // A44914: using guessed type void *NiTArray::`vftable'; // A4491C: using guessed type void *NiTArray::`vftable'; // A44DA0: using guessed type void *NiTPointerMap::`vftable'; // A44DC0: using guessed type void *NiTPointerMap>::`vftable'; // A44DE0: using guessed type void *NiTPointerMap::`vftable'; // A44E00: using guessed type void *NiTPointerMap::`vftable'; // A44E20: using guessed type void *NiTPointerMap::`vftable'; // A44E40: using guessed type void *NiTPointerList>::`vftable'; // A44E50: using guessed type void *NiTPointerList::`vftable'; // A45104: using guessed type void *NiDX9Renderer::`vftable'; //----- (009289C0) -------------------------------------------------------- void *sub_9289C0() { return &unk_BA6E58; } //----- (009289D0) -------------------------------------------------------- int __thiscall sub_9289D0(_DWORD *this) { return this[250]; } //----- (009289E0) -------------------------------------------------------- int __thiscall sub_9289E0(_DWORD **this) { return (*(int (**)(void))(*this[429] + 72))(); } //----- (009289F0) -------------------------------------------------------- char __thiscall sub_9289F0(_DWORD **this, int a2) { (*(void (__stdcall **)(int))(*this[429] + 76))(a2); return 1; } //----- (00928A10) -------------------------------------------------------- int __thiscall sub_928A10(_DWORD *this) { return this[417]; } //----- (00928A20) -------------------------------------------------------- void __thiscall sub_928A20(float *this, float a2) { this[248] = a2; } //----- (00928A30) -------------------------------------------------------- double __thiscall sub_928A30(float *this) { return this[248]; } //----- (00928A40) -------------------------------------------------------- int __thiscall sub_928A40(_DWORD *this, float *a2) { int result; // eax result = (unsigned __int8)(signed int)(255.0 * a2[2]); this[247] = result | (((unsigned __int8)(signed int)(a2[1] * 255.0) | (((signed int)(*a2 * 255.0) | 0xFFFFFF00) << 8)) << 8); return result; } //----- (00928AD0) -------------------------------------------------------- int __thiscall sub_928AD0(_DWORD *this, float *a2) { int result; // eax result = (unsigned __int8)(signed int)(255.0 * a2[2]); this[247] = result | (((unsigned __int8)(signed int)(a2[1] * 255.0) | (((unsigned __int8)(signed int)(*a2 * 255.0) | ((unsigned __int8)(signed int)(a2[3] * 255.0) << 8)) << 8)) << 8); return result; } //----- (00928B80) -------------------------------------------------------- float *__thiscall sub_928B80(unsigned __int8 *this, float *a2) { float *result; // eax result = a2; a2[3] = (double)this[991] * 0.003921568859368563; *a2 = (double)this[990] * 0.003921568859368563; a2[1] = (double)this[989] * 0.003921568859368563; a2[2] = 0.003921568859368563 * (double)this[988]; return result; } //----- (00928BE0) -------------------------------------------------------- int __thiscall sub_928BE0(_DWORD *this, int a2) { int result; // eax result = a2; this[249] = a2; return result; } //----- (00928BF0) -------------------------------------------------------- int __thiscall sub_928BF0(_DWORD *this) { return this[249]; } //----- (00928C00) -------------------------------------------------------- int __thiscall sub_928C00(_DWORD **this) { return (*(int (**)(void))(*this[429] + 60))(); } //----- (00928C10) -------------------------------------------------------- int __thiscall sub_928C10(_DWORD **this, float a2) { return (*(int (__stdcall **)(_DWORD))(*this[429] + 64))(LODWORD(a2)); } //----- (00928C30) -------------------------------------------------------- char __thiscall sub_928C30(int this, int a2, 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 v15; // ebx int v16; // esi int v17; // ecx int v18; // edx int v19; // eax int v20; // ecx int v21; // edx int v22; // edi int v23; // eax int v24; // ecx int v25; // edx int v26; // ecx unsigned int *v27; // ebx _DWORD *v28; // edi void *v29; // ecx char result; // al unsigned int v31; // eax int v32; // eax void *v33; // ecx int v34; // ecx int v35; // eax void *v36; // ecx unsigned int v37; // eax signed int v38; // eax int v39; // eax void *v40; // ecx void *v41; // ecx int v42; // ecx void *v43; // ecx void *v44; // ecx unsigned int v45; // eax int v46; // ST24_4 int v47; // eax int v48; // ecx _DWORD *v49; // eax int v50; // ecx int v51; // edx char *v52; // ecx int v53; // eax int v54; // eax void *v55; // ecx _DWORD *v56; // eax _DWORD *v57; // eax _DWORD *v58; // eax _DWORD *v59; // eax _DWORD *v60; // eax _DWORD *v61; // eax _DWORD *v62; // eax _DWORD *v63; // eax int v64; // ecx _DWORD *v65; // eax int v66; // edx unsigned int v67; // eax int v68; // eax int v69; // ecx int v70; // eax _DWORD *v71; // eax int v72; // edx _DWORD *v73; // eax int v74; // edx void (__thiscall *v75)(int, int *, int *, int *, int *, float *, float *); // edx void *v76; // ecx char *v77; // [esp-4h] [ebp-74h] char Src; // [esp+Ch] [ebp-64h] int v79; // [esp+18h] [ebp-58h] float v80; // [esp+44h] [ebp-2Ch] float v81; // [esp+48h] [ebp-28h] float v82; // [esp+4Ch] [ebp-24h] float v83; // [esp+50h] [ebp-20h] float v84; // [esp+54h] [ebp-1Ch] float v85; // [esp+58h] [ebp-18h] float v86; // [esp+60h] [ebp-10h] float v87; // [esp+64h] [ebp-Ch] float v88; // [esp+68h] [ebp-8h] float v89; // [esp+6Ch] [ebp-4h] v15 = a7; v16 = this; *(_DWORD *)(this + 2152) = a2; *(_DWORD *)(this + 2156) = a3; v17 = a8; *(_DWORD *)(v16 + 2160) = a4; v18 = a9; *(_DWORD *)(v16 + 2164) = a5; v19 = a10; *(_DWORD *)(v16 + 2176) = v17; v20 = a11; *(_DWORD *)(v16 + 2180) = v18; v21 = a12; v22 = a6; *(_DWORD *)(v16 + 2184) = v19; v23 = a13; *(_DWORD *)(v16 + 2188) = v20; v24 = a14; *(_DWORD *)(v16 + 2192) = v21; v25 = a15; *(_DWORD *)(v16 + 2168) = v22; *(_DWORD *)(v16 + 2172) = v15; *(_DWORD *)(v16 + 2196) = v23; *(_DWORD *)(v16 + 2200) = v24; *(_DWORD *)(v16 + 2204) = v25; sub_921C10(); v26 = a8; *(_DWORD *)(v16 + 960) = v15; *(_DWORD *)(v16 + 444) = v22; v27 = (unsigned int *)(v16 + 968); v77 = (char *)(v16 + 968); v28 = (_DWORD *)(v16 + 964); *(_DWORD *)(v16 + 440) = a5; if ( !sub_9209B0(v26, (_DWORD *)(v16 + 964), v77) ) goto LABEL_62; if ( a4 & 0x40 ) *v27 |= 2u; if ( a4 & 0x20 ) *v27 |= 4u; v31 = *(_DWORD *)(v16 + 960); if ( v31 >= *((_DWORD *)dword_BA6E50 + 4) ) v32 = 0; else v32 = *(_DWORD *)(*((_DWORD *)dword_BA6E50 + 2) + 4 * v31); *(_DWORD *)(v16 + 980) = v32; if ( !v32 ) { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Invalid Adapter", 0xFFu); nullsub_6(v33); return 0; } v34 = *v28 == 1 ? *(_DWORD *)(v32 + 1128) : *(_DWORD *)(v32 + 1132); v35 = *(_DWORD *)(v34 + 4) != 0 ? v34 : 0; *(_DWORD *)(v16 + 984) = v35; if ( !v35 ) { LABEL_62: strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Invalid 3D device type", 0xFFu); nullsub_6(v29); return 0; } memset(&Src, 0, 0x38u); while ( 1 ) { v77 = "NiDX9Renderer::Initialize> Attempting to create rendering device\n"; nullsub_6(v36); v37 = *(_DWORD *)(v16 + 960); v38 = v37 >= *((_DWORD *)dword_BA6E50 + 4) ? 0 : *(_DWORD *)(*((_DWORD *)dword_BA6E50 + 2) + 4 * v37); v39 = *v28 == 1 ? *(_DWORD *)(v38 + 1128) : *(_DWORD *)(v38 + 1132); if ( *(_DWORD *)(v39 + 4) && v39 ) break; strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Requested device not valid", 0xFFu); nullsub_6(v40); LABEL_30: if ( a8 == 4 ) { sub_921520("Creation failed: Could not create reference device"); nullsub_6(v76); return 0; } if ( ++a8 == 4 ) { nullsub_6(v41); return 0; } v77 = "NiDX9Renderer::Initialize> Could not create device of desired type - trying next-lower device type\n"; nullsub_6(v41); v28 = (_DWORD *)(v16 + 964); if ( !sub_9209B0(a8, (_DWORD *)(v16 + 964), (_DWORD *)(v16 + 968)) ) { sub_921520("Creation failed: Invalid 3D device type"); nullsub_6(v43); return 0; } } if ( !sub_922440((_DWORD *)v16, *(_DWORD *)(v16 + 440), a2, a3, a4, a13, a9, a10, a14, a12, a15, a11, &Src) ) goto LABEL_30; v42 = *(_DWORD *)dword_BA6E44; a14 = v79; if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, unsigned int, char *, int))(v42 + 64))( dword_BA6E44, *(_DWORD *)(v16 + 960), *(_DWORD *)(v16 + 964), *(_DWORD *)(v16 + 444), *v27, &Src, v16 + 132) < 0 ) { v41 = (void *)a14; if ( a14 == v79 ) goto LABEL_30; v77 = "NiDX9Renderer::Initialize> Specified number of backbuffers was invalid - trying fewer backbuffers\n"; nullsub_6((void *)a14); if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, unsigned int, char *, int))(*(_DWORD *)dword_BA6E44 + 64))( dword_BA6E44, *(_DWORD *)(v16 + 960), *(_DWORD *)(v16 + 964), *(_DWORD *)(v16 + 444), *v27, &Src, v16 + 132) < 0 ) goto LABEL_30; } if ( !*(_DWORD *)(v16 + 132) ) { sub_921520("Creation failed: Could not create hardware device"); nullsub_6(v44); return 0; } if ( !sub_922780((_DWORD **)v16, (int)&Src) ) return 0; v45 = *v27; *(_BYTE *)(v16 + 977) = (*v27 >> 7) & 1; v77 = (char *)&a6; *(_BYTE *)(v16 + 976) = ~(unsigned __int8)(v45 >> 6) & 1; v46 = *(_DWORD *)(v16 + 132); a6 = 0; a7 = 0; v47 = sub_92BA60(v46, &Src, (int)v77); v48 = *(_DWORD *)(v16 + 132); a8 = v47; sub_92BBB0(v48, (_DWORD **)&a7); v49 = sub_8672C0(1u, v16); v50 = a6; *(_DWORD *)(v16 + 1664) = v49; (*(void (__thiscall **)(_DWORD *, int, _DWORD))(*v49 + 88))(v49, v50, 0); (*(void (__stdcall **)(int))(**(_DWORD **)(v16 + 1664) + 92))(a7); v51 = *(_DWORD *)(v16 + 1664); v77 = v52; sub_44EC60(&v77, v51); sub_923970((_DWORD *)(v16 + 1676), a5, (LONG)v77); v77 = *(char **)((*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v16 + 1664) + 76))(0) + 12); v53 = sub_8B0BA0((int)v77); *(_DWORD *)(v16 + 972) = sub_921DB0(v53); v54 = *(_DWORD *)(v16 + 1664); *(_DWORD *)(v16 + 1668) = v54; *(_DWORD *)(v16 + 1672) = v54; if ( sub_923DD0((char *)v16) ) { *(_DWORD *)(v16 + 1716) = sub_9360E0(v16, (void *)(v16 + 136), 1); sub_91F090(v16); v56 = operator new(0x114u); if ( v56 ) v57 = sub_918D50(v56); else v57 = 0; sub_56FF80((_DWORD *)(v16 + 2208), (int)v57); (*(void (__stdcall **)(int))(**(_DWORD **)(v16 + 2208) + 16))(v16); v58 = operator new(0x70u); if ( v58 ) { v77 = *(char **)(v16 + 132); v59 = sub_939650(v58, (int)v77); } else { v59 = 0; } v77 = (char *)76; *(_DWORD *)(v16 + 1720) = v59; v60 = operator new((size_t)v77); if ( v60 ) { v77 = *(char **)(v16 + 132); v61 = sub_93BBD0(v60, (int)v77); } else { v61 = 0; } v77 = (char *)16; *(_DWORD *)(v16 + 1724) = v61; v62 = operator new((size_t)v77); if ( v62 ) v63 = sub_93C990(v62, v16); else v63 = 0; v64 = *(_DWORD *)(v16 + 132); *(_DWORD *)(v16 + 1728) = v63; v77 = *(char **)(v16 + 1720); v65 = sub_93C600(v64, (int)v77); v66 = *(_DWORD *)v16; *(_DWORD *)(v16 + 1704) = v65; v67 = (*(int (__thiscall **)(int))(v66 + 64))(v16); sub_93C590(*(_BYTE **)(v16 + 1704), (v67 >> 1) & 1); v68 = (*(int (__stdcall **)(signed int))(**(_DWORD **)(v16 + 1704) + 4))(1); v69 = *(_DWORD *)(v16 + 1704); *(_DWORD *)(v16 + 1708) = v68; v70 = (*(int (__stdcall **)(signed int))(*(_DWORD *)v69 + 4))(2); v77 = (char *)576; *(_DWORD *)(v16 + 1712) = v70; v71 = operator new((size_t)v77); if ( v71 ) { v72 = *(_DWORD *)(v16 + 1716); v77 = *(char **)(v16 + 132); v73 = sub_937270(v71, v72, (int)v77); } else { v73 = 0; } *(_DWORD *)(v16 + 1732) = v73; if ( *(_DWORD *)(a8 + 36) ) (*(void (__stdcall **)(signed int))(**(_DWORD **)(v16 + 1716) + 56))(1); sub_86B1D0(&v80, 0); v74 = *(_DWORD *)v16; v83 = -1.0; v75 = *(void (__thiscall **)(int, int *, int *, int *, int *, float *, float *))(v74 + 280); v80 = -1.0; v82 = 1.0; v81 = 1.0; v84 = 0.1; v85 = 1.0; v86 = 0.0; v89 = 0.0; v87 = 1.0; v88 = 1.0; v75(v16, &dword_BA45C0, &dword_ABD48C, &dword_ABD498, &dword_ABD4A4, &v80, &v86); result = 1; } else { v77 = "NiDX9Renderer::Initialize> Could not initialize texture defaults - FAILING\n"; nullsub_6(v55); result = 0; } return result; } // ABD48C: using guessed type int dword_ABD48C; // ABD498: using guessed type int dword_ABD498; // ABD4A4: using guessed type int dword_ABD4A4; // BA45C0: using guessed type int dword_BA45C0; // BA6E44: using guessed type int dword_BA6E44; //----- (00929290) -------------------------------------------------------- char __thiscall sub_929290(_DWORD *this) { int v1; // ebx _DWORD *v2; // ecx unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx int v6; // eax volatile LONG *v7; // edi int v8; // esi int v9; // ecx int v10; // eax char v11; // al int v12; // eax int v13; // esi int v14; // eax char v15; // al unsigned int v16; // edx unsigned int v17; // eax _DWORD *v18; // ecx _DWORD *v19; // eax _DWORD *v20; // esi int v21; // edi int v22; // eax unsigned int v23; // edx unsigned int v24; // eax _DWORD *v25; // ecx unsigned int v26; // edx unsigned int v27; // eax _DWORD *v28; // ecx _DWORD *v29; // eax _DWORD *v30; // esi int v31; // edi int v32; // eax unsigned int v33; // edx unsigned int v34; // eax _DWORD *v35; // ecx unsigned int v36; // edx unsigned int v37; // eax _DWORD *v38; // ecx _DWORD *v39; // eax _DWORD *v40; // esi int v41; // edi void (__thiscall ***v42)(_DWORD, signed int); // ebx int v43; // esi int v44; // eax unsigned int v45; // edx unsigned int v46; // eax _DWORD *v47; // ecx char *v48; // ebx int **v49; // esi void (*v50)(void); // eax unsigned int v51; // edi int v52; // esi unsigned __int8 (__cdecl *v53)(signed int, _DWORD); // eax void *v54; // ecx int v55; // esi int v56; // eax char result; // al int v58; // eax char v59; // al unsigned int v60; // ecx unsigned int v61; // eax _DWORD *v62; // edx int v63; // eax volatile LONG *v64; // edi int v65; // esi int v66; // ecx int v67; // eax char v68; // al int v69; // esi int v70; // eax char v71; // al void *v72; // ecx unsigned int v73; // edx unsigned int v74; // eax _DWORD *v75; // ecx _DWORD *v76; // eax _DWORD *v77; // esi int v78; // edi int v79; // eax unsigned int v80; // edx unsigned int v81; // eax _DWORD *v82; // ecx unsigned int v83; // edx unsigned int v84; // eax _DWORD *v85; // ecx _DWORD *v86; // eax _DWORD *v87; // esi int v88; // edi int v89; // eax unsigned int v90; // edx unsigned int v91; // eax _DWORD *v92; // ecx unsigned int v93; // edx unsigned int v94; // eax _DWORD *v95; // ecx _DWORD *v96; // eax _DWORD *v97; // esi int v98; // edi int v99; // eax unsigned int v100; // edx unsigned int v101; // eax _DWORD *v102; // ecx int **v103; // esi void (*v104)(void); // eax unsigned int v105; // edi int v106; // esi unsigned __int8 (__cdecl *v107)(_DWORD, _DWORD); // eax void *v108; // ecx char v109; // [esp+Ch] [ebp-10h] volatile LONG *v110; // [esp+10h] [ebp-Ch] unsigned int v111; // [esp+14h] [ebp-8h] int v112; // [esp+18h] [ebp-4h] v1 = (int)this; v2 = (_DWORD *)this[433]; v111 = v1; sub_9375A0(v2); sub_93B7F0(*(_DWORD **)(v1 + 1724)); sub_9392D0(*(_DWORD **)(v1 + 1720)); sub_92AC40(*(_DWORD *)(v1 + 132), 1); sub_92AC40(*(_DWORD *)(v1 + 132), 2); sub_92AC40(*(_DWORD *)(v1 + 132), 3); v3 = *(_DWORD *)(v1 + 1680); v4 = 0; if ( v3 ) { v5 = *(_DWORD **)(v1 + 1684); while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_5; } v6 = *(_DWORD *)(*(_DWORD *)(v1 + 1684) + 4 * v4); } else { LABEL_5: v6 = 0; } v112 = v6; while ( v112 ) { v110 = 0; sub_931910((_DWORD *)(v1 + 1676), (unsigned int)&v112, &v109, (unsigned int *)&v110); v7 = v110; v8 = *(_DWORD *)((*(int (__thiscall **)(volatile LONG *, _DWORD))(*v110 + 96))(v110, 0) + 16); if ( v8 ) { v10 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 16))(v8); if ( v10 ) { while ( (_UNKNOWN *)v10 != &unk_BA6EC8 ) { v10 = *(_DWORD *)(v10 + 4); if ( !v10 ) goto LABEL_13; } v11 = 1; } else { LABEL_13: v11 = 0; } v9 = v11 != 0 ? v8 : 0; } else { v9 = 0; } (*(void (**)(void))(*(_DWORD *)v9 + 28))(); v12 = (*(int (__thiscall **)(volatile LONG *))(*v7 + 100))(v7); if ( v12 ) { v13 = *(_DWORD *)(v12 + 16); if ( v13 ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v13 + 16))(v13); if ( v14 ) { while ( (_UNKNOWN *)v14 != &unk_BA6E90 ) { v14 = *(_DWORD *)(v14 + 4); if ( !v14 ) goto LABEL_20; } v15 = 1; } else { LABEL_20: v15 = 0; } if ( v15 != 0 ? v13 : 0 ) (*(void (**)(void))(*(_DWORD *)(v15 != 0 ? v13 : 0) + 28))(); } } if ( !InterlockedDecrement(v7 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); } v16 = *(_DWORD *)(v1 + 1740); v17 = 0; if ( v16 ) { v18 = *(_DWORD **)(v1 + 1744); while ( !*v18 ) { ++v17; ++v18; if ( v17 >= v16 ) goto LABEL_30; } v19 = *(_DWORD **)(*(_DWORD *)(v1 + 1744) + 4 * v17); } else { LABEL_30: v19 = 0; } v20 = v19; while ( v20 ) { v21 = v20[1]; v20 = (_DWORD *)*v20; if ( !v20 ) { v22 = (*(int (__thiscall **)(int, int))(*(_DWORD *)(v1 + 1736) + 4))(v1 + 1736, v21); v23 = *(_DWORD *)(v1 + 1740); v24 = v22 + 1; if ( v24 >= v23 ) { LABEL_37: v20 = 0; } else { v25 = (_DWORD *)(*(_DWORD *)(v1 + 1744) + 4 * v24); while ( 1 ) { v20 = (_DWORD *)*v25; if ( *v25 ) break; ++v24; ++v25; if ( v24 >= v23 ) goto LABEL_37; } } } (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 180))(v1, v21); sub_815C70((_DWORD *)(v1 + 1736), v21, 0); } v26 = *(_DWORD *)(v1 + 1756); v27 = 0; if ( v26 ) { v28 = *(_DWORD **)(v1 + 1760); while ( !*v28 ) { ++v27; ++v28; if ( v27 >= v26 ) goto LABEL_43; } v29 = *(_DWORD **)(*(_DWORD *)(v1 + 1760) + 4 * v27); } else { LABEL_43: v29 = 0; } v30 = v29; while ( v30 ) { v31 = v30[1]; v30 = (_DWORD *)*v30; if ( !v30 ) { v32 = (*(int (__thiscall **)(int, int))(*(_DWORD *)(v1 + 1752) + 4))(v1 + 1752, v31); v33 = *(_DWORD *)(v1 + 1756); v34 = v32 + 1; if ( v34 >= v33 ) { LABEL_50: v30 = 0; } else { v35 = (_DWORD *)(*(_DWORD *)(v1 + 1760) + 4 * v34); while ( 1 ) { v30 = (_DWORD *)*v35; if ( *v35 ) break; ++v34; ++v35; if ( v34 >= v33 ) goto LABEL_50; } } } (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 180))(v1, v31); sub_815C70((_DWORD *)(v1 + 1752), v31, 0); } v36 = *(_DWORD *)(v1 + 1772); v37 = 0; if ( v36 ) { v38 = *(_DWORD **)(v1 + 1776); while ( !*v38 ) { ++v37; ++v38; if ( v37 >= v36 ) goto LABEL_56; } v39 = *(_DWORD **)(*(_DWORD *)(v1 + 1776) + 4 * v37); } else { LABEL_56: v39 = 0; } v40 = v39; while ( v40 ) { v41 = v40[1]; v42 = (void (__thiscall ***)(_DWORD, signed int))v40[2]; v40 = (_DWORD *)*v40; if ( !v40 ) { v43 = v111; v44 = (*(int (__thiscall **)(unsigned int, int))(*(_DWORD *)(v111 + 1768) + 4))(v111 + 1768, v41); v45 = *(_DWORD *)(v43 + 1772); v46 = v44 + 1; if ( v46 >= v45 ) { LABEL_63: v40 = 0; } else { v47 = (_DWORD *)(*(_DWORD *)(v43 + 1776) + 4 * v46); while ( 1 ) { v40 = (_DWORD *)*v47; if ( *v47 ) break; ++v46; ++v47; if ( v46 >= v45 ) goto LABEL_63; } } } *(_DWORD *)(v41 + 40) = 0; if ( v42 ) (**v42)(v42, 1); sub_815C70((_DWORD *)(v111 + 1768), v41, 0); } sub_92AF30(); v48 = (char *)v111; v49 = *(int ***)(v111 + 1808); while ( v49 ) { v50 = *(void (**)(void))(*v49[2] + 68); v49 = (int **)*v49; v50(); } (***((void (****)(void))v48 + 428))(); v51 = *((_DWORD *)v48 + 556); v52 = 0; v111 = v51; if ( v51 ) { while ( 1 ) { v53 = *(unsigned __int8 (__cdecl **)(signed int, _DWORD))(*((_DWORD *)v48 + 554) + 4 * v52); if ( v53 ) { if ( !v53(1, *(_DWORD *)(*((_DWORD *)v48 + 560) + 4 * v52)) ) break; } if ( ++v52 >= v51 ) goto LABEL_73; } nullsub_6(v54); return 0; } LABEL_73: v55 = *(_DWORD *)((*(int (__stdcall **)(_DWORD))(**((_DWORD **)v48 + 416) + 96))(0) + 16); if ( v55 ) { v58 = (*(int (__thiscall **)(int))(*(_DWORD *)v55 + 16))(v55); if ( v58 ) { while ( (_UNKNOWN *)v58 != &unk_BA6EC8 ) { v58 = *(_DWORD *)(v58 + 4); if ( !v58 ) goto LABEL_85; } v59 = 1; } else { LABEL_85: v59 = 0; } v56 = v59 != 0 ? v55 : 0; } else { v56 = 0; } if ( (*(int (__stdcall **)(_DWORD, int))(**((_DWORD **)v48 + 33) + 64))(*((_DWORD *)v48 + 33), v56 + 20) < 0 ) return 0; ++*((_DWORD *)v48 + 317); v60 = *((_DWORD *)v48 + 420); v61 = 0; if ( v60 ) { v62 = (_DWORD *)*((_DWORD *)v48 + 421); while ( !*v62 ) { ++v61; ++v62; if ( v61 >= v60 ) goto LABEL_92; } v63 = *(_DWORD *)(*((_DWORD *)v48 + 421) + 4 * v61); } else { LABEL_92: v63 = 0; } v112 = v63; while ( v112 ) { v110 = 0; sub_931910((_DWORD *)v48 + 419, (unsigned int)&v112, &v109, (unsigned int *)&v110); v64 = v110; v65 = *(_DWORD *)((*(int (__thiscall **)(volatile LONG *, _DWORD))(*v110 + 96))(v110, 0) + 16); if ( v65 ) { v67 = (*(int (__thiscall **)(int))(*(_DWORD *)v65 + 16))(v65); if ( v67 ) { while ( (_UNKNOWN *)v67 != &unk_BA6EC8 ) { v67 = *(_DWORD *)(v67 + 4); if ( !v67 ) goto LABEL_101; } v68 = 1; } else { LABEL_101: v68 = 0; } v66 = v68 != 0 ? v65 : 0; } else { v66 = 0; } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v66 + 32))(*((_DWORD *)v48 + 33)); v69 = (*(int (__thiscall **)(volatile LONG *))(*v64 + 116))(v64); if ( v69 ) { v70 = (*(int (__thiscall **)(int))(*(_DWORD *)v69 + 16))(v69); if ( v70 ) { while ( (_UNKNOWN *)v70 != &unk_BA6E90 ) { v70 = *(_DWORD *)(v70 + 4); if ( !v70 ) goto LABEL_107; } v71 = 1; } else { LABEL_107: v71 = 0; } if ( v71 != 0 ? v69 : 0 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)(v71 != 0 ? v69 : 0) + 32))(*((_DWORD *)v48 + 33)); } if ( !InterlockedDecrement(v64 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v64)(v64, 1); } *((_DWORD *)v48 + 417) = *((_DWORD *)v48 + 418); if ( sub_923DD0(v48) ) { v73 = *((_DWORD *)v48 + 435); v74 = 0; if ( v73 ) { v75 = (_DWORD *)*((_DWORD *)v48 + 436); while ( !*v75 ) { ++v74; ++v75; if ( v74 >= v73 ) goto LABEL_121; } v76 = *(_DWORD **)(*((_DWORD *)v48 + 436) + 4 * v74); } else { LABEL_121: v76 = 0; } v77 = v76; while ( v77 ) { v78 = v77[1]; v77 = (_DWORD *)*v77; if ( !v77 ) { v79 = (*(int (__thiscall **)(char *, int))(*((_DWORD *)v48 + 434) + 4))(v48 + 1736, v78); v80 = *((_DWORD *)v48 + 435); v81 = v79 + 1; if ( v81 >= v80 ) { LABEL_128: v77 = 0; } else { v82 = (_DWORD *)(*((_DWORD *)v48 + 436) + 4 * v81); while ( 1 ) { v77 = (_DWORD *)*v82; if ( *v82 ) break; ++v81; ++v82; if ( v81 >= v80 ) goto LABEL_128; } } } (*(void (__thiscall **)(char *, int))(*(_DWORD *)v48 + 224))(v48, v78); } v83 = *((_DWORD *)v48 + 439); v84 = 0; if ( v83 ) { v85 = (_DWORD *)*((_DWORD *)v48 + 440); while ( !*v85 ) { ++v84; ++v85; if ( v84 >= v83 ) goto LABEL_134; } v86 = *(_DWORD **)(*((_DWORD *)v48 + 440) + 4 * v84); } else { LABEL_134: v86 = 0; } v87 = v86; while ( v87 ) { v88 = v87[1]; v87 = (_DWORD *)*v87; if ( !v87 ) { v89 = (*(int (__thiscall **)(char *, int))(*((_DWORD *)v48 + 438) + 4))(v48 + 1752, v88); v90 = *((_DWORD *)v48 + 439); v91 = v89 + 1; if ( v91 >= v90 ) { LABEL_141: v87 = 0; } else { v92 = (_DWORD *)(*((_DWORD *)v48 + 440) + 4 * v91); while ( 1 ) { v87 = (_DWORD *)*v92; if ( *v92 ) break; ++v91; ++v92; if ( v91 >= v90 ) goto LABEL_141; } } } (*(void (__thiscall **)(char *, int))(*(_DWORD *)v48 + 232))(v48, v88); } v93 = *((_DWORD *)v48 + 443); v94 = 0; if ( v93 ) { v95 = (_DWORD *)*((_DWORD *)v48 + 444); while ( !*v95 ) { ++v94; ++v95; if ( v94 >= v93 ) goto LABEL_147; } v96 = *(_DWORD **)(*((_DWORD *)v48 + 444) + 4 * v94); } else { LABEL_147: v96 = 0; } v97 = v96; while ( v97 ) { v98 = v97[1]; v97 = (_DWORD *)*v97; if ( !v97 ) { v99 = (*(int (__thiscall **)(char *, int))(*((_DWORD *)v48 + 442) + 4))(v48 + 1768, v98); v100 = *((_DWORD *)v48 + 443); v101 = v99 + 1; if ( v101 >= v100 ) { LABEL_154: v97 = 0; } else { v102 = (_DWORD *)(*((_DWORD *)v48 + 444) + 4 * v101); while ( 1 ) { v97 = (_DWORD *)*v102; if ( *v102 ) break; ++v101; ++v102; if ( v101 >= v100 ) goto LABEL_154; } } } (*(void (__thiscall **)(char *, int))(*(_DWORD *)v48 + 236))(v48, v98); } sub_92AF90(*((_DWORD *)v48 + 33)); v103 = (int **)*((_DWORD *)v48 + 452); while ( v103 ) { v104 = *(void (**)(void))(*v103[2] + 72); v103 = (int **)*v103; v104(); } (*(void (**)(void))(**((_DWORD **)v48 + 429) + 260))(); sub_9369A0(*((_DWORD ***)v48 + 433)); v105 = v111; v106 = 0; if ( v111 ) { while ( 1 ) { v107 = *(unsigned __int8 (__cdecl **)(_DWORD, _DWORD))(*((_DWORD *)v48 + 554) + 4 * v106); if ( v107 ) { if ( !v107(0, *(_DWORD *)(*((_DWORD *)v48 + 560) + 4 * v106)) ) break; } if ( ++v106 >= v105 ) goto LABEL_162; } nullsub_6(v108); result = 0; } else { LABEL_162: result = 1; } } else { nullsub_6(v72); result = 0; } return result; } //----- (00929A60) -------------------------------------------------------- signed int __thiscall sub_929A60(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { _DWORD *v12; // ebx int v13; // esi int v14; // eax int v15; // eax char v16; // al _DWORD *v17; // esi signed int result; // eax void *v19; // ecx void *v20; // ecx char Dst; // [esp+Ch] [ebp-38h] v12 = this; v13 = *(_DWORD *)((*(int (__stdcall **)(_DWORD))(*this[416] + 96))(0) + 16); if ( v13 ) { v15 = (*(int (__thiscall **)(int))(*(_DWORD *)v13 + 16))(v13); if ( v15 ) { while ( (_UNKNOWN *)v15 != &unk_BA6EC8 ) { v15 = *(_DWORD *)(v15 + 4); if ( !v15 ) goto LABEL_6; } v16 = 1; } else { LABEL_6: v16 = 0; } v14 = v16 != 0 ? v13 : 0; } else { v14 = 0; } v17 = (_DWORD *)(v14 + 20); memcpy_s(&Dst, 0x38u, (const void *)(v14 + 20), 0x38u); if ( sub_922440(v12, a5, a2, a3, a4, a10, a6, a7, a11, a9, a12, a8, v17) ) { if ( a5 ) v17[7] = a5; if ( sub_929290(v12) ) { result = 2; } else { nullsub_6(v19); memcpy_s(v17, 0x38u, &Dst, 0x38u); if ( sub_929290(v12) ) { result = 1; } else { nullsub_6(v20); result = 0; } } } else { memcpy_s(v17, 0x38u, &Dst, 0x38u); result = 0; } return result; } //----- (00929B90) -------------------------------------------------------- char __thiscall sub_929B90(void *this, _DWORD *a2, int a3, int a4) { int v4; // edi int v5; // ebx int v6; // eax int v8; // esi bool v9; // al int v10; // eax int v11; // ecx unsigned __int16 v12; // ax char v13; // al unsigned __int16 v14; // ax char v15; // [esp+8h] [ebp-Ch] int v16; // [esp+Ch] [ebp-8h] int v17; // [esp+10h] [ebp-4h] char v18; // [esp+1Fh] [ebp+Bh] char v19; // [esp+1Fh] [ebp+Bh] v4 = (int)a2; v5 = (int)this; if ( !a2 ) return 0; v6 = (*(int (__thiscall **)(_DWORD *))(*a2 + 4))(a2); if ( !v6 ) return 0; while ( (char *)v6 != dword_BA4858 ) { v6 = *(_DWORD *)(v6 + 4); if ( !v6 ) return 0; } v8 = a2[46]; v16 = a2[47]; v9 = sub_9238A0((_BYTE *)v5, a2, 0); v15 = v9; if ( v16 && !v9 ) *(_WORD *)(v8 + 50) = *(_WORD *)(v8 + 50) & 0xFFF | 0x8000; if ( (*(_WORD *)(v8 + 50) & 0xF000) == -32768 ) return 1; sub_923350(v5); v17 = 0; v10 = sub_402BA0((int)&unk_BA6D54, a2[48]); if ( v10 ) v17 = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 60))(v10); v11 = *(_DWORD *)(v5 + 1704); sub_93C880(*(_DWORD *)(v5 + 1708), v8, v16, v15, a3, a4); v18 = 0; if ( v15 ) { v19 = sub_928500((_DWORD *)v5, v4, v8, v16, v17, a3, a4); sub_9233A0(v5); return v19; } if ( sub_402B70((int)dword_BA478C, v4) ) { v12 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 76))(v8); v13 = sub_9283F0((_DWORD *)v5, v4, v8, v12, *(_WORD *)(v8 + 64), *(_DWORD *)(v8 + 72), 0, 1, v17); LABEL_19: v18 = v13; goto LABEL_20; } if ( sub_402B70((int)dword_BA4A50, v4) ) { v14 = (*(int (__thiscall **)(int))(*(_DWORD *)v8 + 76))(v8); v13 = sub_9283F0( (_DWORD *)v5, v4, v8, v14, *(_WORD *)(v8 + 64), *(_DWORD *)(v8 + 76), *(_DWORD *)(v8 + 72), *(unsigned __int16 *)(v8 + 68), v17); goto LABEL_19; } LABEL_20: sub_9233A0(v5); return v18; } //----- (00929D40) -------------------------------------------------------- void __thiscall sub_929D40(_BYTE *this, int a2) { bool v2; // zf unsigned __int16 (*v3)(void); // edx int v4; // eax int v5; // edx _DWORD *v6; // esi int v7; // ecx int v8; // eax bool v9; // al __int16 v10; // dx int v11; // eax int v12; // ecx int v13; // [esp+4h] [ebp-54h] int v14; // [esp+8h] [ebp-50h] int v15; // [esp+Ch] [ebp-4Ch] int v16; // [esp+10h] [ebp-48h] int v17; // [esp+14h] [ebp-44h] int v18; // [esp+18h] [ebp-40h] _BYTE *v19; // [esp+1Ch] [ebp-3Ch] char v20; // [esp+20h] [ebp-38h] v2 = this[1272] == 0; v19 = this; if ( v2 ) { v3 = *(unsigned __int16 (**)(void))(**(_DWORD **)(a2 + 184) + 64); v17 = *(_DWORD *)(a2 + 184); if ( v3() ) { v4 = *(_DWORD *)(a2 + 188); v5 = *(_DWORD *)(a2 + 40); qmemcpy(&v20, (const void *)(a2 + 104), 0x34u); v6 = v19; v13 = *(_DWORD *)(a2 + 36); v7 = *(_DWORD *)(a2 + 48); v18 = v4; v8 = *(_DWORD *)(a2 + 44); v16 = v7; v14 = v5; v15 = v8; v9 = sub_9238A0(v19, (_DWORD *)a2, 0); v10 = *(_WORD *)(v17 + 50) & 0xF000; LOBYTE(v19) = v9; if ( v10 == -32768 || v18 && !v9 ) v11 = v6[428]; else v11 = v6[427]; v12 = v6[426]; sub_93C880(v11, v17, v18, (char)v19, 0, 0); if ( (_BYTE)v19 ) sub_927810((int)v6, a2, v17, a2, v17, v18, (int)&v20, &v13); else sub_9275E0(v6, a2, v17, v18, (int)&v20, (int)&v13, *(_DWORD **)(v17 + 60)); } } } //----- (00929E60) -------------------------------------------------------- _DWORD *__thiscall sub_929E60(_DWORD *this, _DWORD *a2) { return sub_9273B0(this, a2); } //----- (00929E70) -------------------------------------------------------- _DWORD *__thiscall sub_929E70(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // edi _DWORD *result; // eax _DWORD *v5; // ecx _DWORD *v6; // edx _DWORD *v7; // edi v2 = a2; v3 = this; sub_91F020(a2, 0); result = (_DWORD *)v3[452]; v5 = v3 + 451; if ( result ) { while ( 1 ) { v6 = result + 2; v7 = result; result = (_DWORD *)*result; if ( v2 == (_DWORD *)*v6 ) break; if ( !result ) goto LABEL_4; } } else { LABEL_4: v7 = 0; } a2 = v7; if ( v7 ) result = (_DWORD *)sub_403620(v5, &a2); return result; } //----- (00929EC0) -------------------------------------------------------- void __thiscall sub_929EC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // eax _DWORD *v4; // ecx int v5; // edx int v6; // [esp+4h] [ebp-4h] v1 = this; while ( v1[454] ) { v2 = *(_DWORD **)(v1[452] + 8); (*(void (__thiscall **)(_DWORD))(*v2 + 76))(*(_DWORD *)(v1[452] + 8)); sub_91F020(v2, 0); v3 = (_DWORD *)v1[452]; if ( v3 ) { while ( 1 ) { v4 = v3 + 2; v5 = (int)v3; v3 = (_DWORD *)*v3; if ( v2 == (_DWORD *)*v4 ) break; if ( !v3 ) goto LABEL_5; } } else { LABEL_5: v5 = 0; } v6 = v5; if ( v5 ) sub_403620(v1 + 451, (_DWORD **)&v6); } } //----- (00929F30) -------------------------------------------------------- char __thiscall sub_929F30(_DWORD **this) { _DWORD **v1; // esi int v2; // eax char result; // al _DWORD *v4; // ebx int v5; // edi unsigned __int8 (__cdecl *v6)(_DWORD); // eax void *v7; // ecx v1 = this; v2 = (*(int (__stdcall **)(_DWORD *))(*this[33] + 12))(this[33]); if ( v2 == -2005530519 ) { result = sub_929290(v1); *((_BYTE *)v1 + 1272) = result == 0; } else if ( v2 == -2005530520 ) { if ( !*((_BYTE *)v1 + 1272) ) { v4 = v1[568]; v5 = 0; *((_BYTE *)v1 + 1272) = 1; if ( v4 ) { while ( 1 ) { v6 = (unsigned __int8 (__cdecl *)(_DWORD))v1[566][v5]; if ( v6 ) { if ( !v6(v1[572][v5]) ) break; } if ( ++v5 >= (unsigned int)v4 ) return 0; } nullsub_6(v7); } } result = 0; } else { result = 1; } return result; } //----- (00929FD0) -------------------------------------------------------- void __thiscall sub_929FD0(void *this, int a2) { int v2; // ebx int v3; // esi signed int v4; // edi int v5; // eax void *v6; // [esp+4h] [ebp-4h] char v7; // [esp+13h] [ebp+Bh] v2 = a2; v6 = this; if ( a2 ) { v3 = *(_DWORD *)(a2 + 28); v7 = sub_9366F0(*(_DWORD **)(a2 + 28)); *(_DWORD *)v3 = 20971520; sub_936750((void **)v3, (void *)1); v4 = *(unsigned __int16 *)(v2 + 24); v5 = **(_DWORD **)(v3 + 4); if ( v7 ) { if ( !(*(unsigned __int8 (**)(void))(v5 + 32))() ) { if ( !(_WORD)v4 ) { LABEL_8: *(_WORD *)(v2 + 24) = 0; return; } LABEL_7: sub_927E90(v6, v2, v4); goto LABEL_8; } } else { (*(void (__stdcall **)(int, _DWORD))(v5 + 28))(v3, 0); *(_DWORD *)(v3 + 52) = 0; } v4 = 15; goto LABEL_7; } } //----- (0092A050) -------------------------------------------------------- LONG __thiscall sub_92A050(_DWORD *this) { _DWORD *v1; // esi bool v2; // zf unsigned int v3; // edi unsigned int v4; // edi void **v5; // edi signed int v6; // ebx int v7; // ebx _DWORD *v8; // eax _DWORD *v9; // ecx void *v10; // edx _DWORD *v11; // eax _DWORD *v12; // edi unsigned int v13; // edx unsigned int v14; // eax _DWORD *v15; // ecx _DWORD *v16; // eax _DWORD *v17; // ebx _DWORD *v18; // ecx _DWORD *v19; // eax int v20; // eax unsigned int v21; // edx unsigned int v22; // eax _DWORD **v23; // ecx _DWORD *v24; // edi unsigned int v25; // ecx unsigned int v26; // eax _DWORD *v27; // edx int v28; // eax volatile LONG *v29; // edi int (__thiscall *v30)(_DWORD *); // eax unsigned int v31; // ebx _DWORD *v32; // eax int v33; // ebx int (__thiscall *v34)(volatile LONG *); // eax _DWORD *v35; // eax int v36; // ebx int v37; // edi void (__stdcall ***v38)(signed int); // ecx void (__stdcall ***v39)(signed int); // ecx int v40; // ecx void (__stdcall ***v41)(signed int); // ecx void (__stdcall ***v42)(signed int); // ecx void (__stdcall ***v43)(signed int); // ecx _DWORD *v44; // edi int v45; // eax unsigned int i; // eax unsigned int j; // eax unsigned int k; // eax unsigned int l; // eax void *v50; // ST0C_4 void *v51; // ST08_4 void *v52; // ST04_4 void *v53; // ST00_4 int v54; // edi _DWORD *v55; // ebx _DWORD *v56; // ST0C_4 _DWORD *v57; // ebx _DWORD *v58; // ST0C_4 int v59; // edi int v60; // edi int v61; // ebx int v62; // edi int v63; // edi int v65; // [esp+8h] [ebp-Ch] _DWORD *v66; // [esp+Ch] [ebp-8h] int *v67; // [esp+10h] [ebp-4h] v1 = this; v2 = this[33] == 0; *this = &NiDX9Renderer::`vftable'; if ( !v2 ) { if ( this[429] ) { v3 = 0; if ( dword_AC4D34 ) { do (*(void (__stdcall **)(unsigned int, _DWORD))(*(_DWORD *)v1[429] + 224))(v3++, 0); while ( v3 < dword_AC4D34 ); } } v4 = 0; if ( v1[313] ) { do (*(void (__stdcall **)(_DWORD, unsigned int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v1[33] + 400))( v1[33], v4++, 0, 0, 0); while ( v4 < v1[313] ); } (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v1[33] + 416))(v1[33], 0); } v67 = v1 + 411; v5 = (void **)(v1 + 319); v66 = (_DWORD *)4; do { v6 = 22; do { operator delete(*v5); ++v5; --v6; } while ( v6 ); v7 = *v67; if ( *v67 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); *v67 = 0; } ++v67; v66 = (_DWORD *)((char *)v66 - 1); } while ( v66 ); v8 = (_DWORD *)v1[263]; if ( v8 ) { do { v9 = (_DWORD *)v8[3]; v10 = dword_BA6E54; dword_BA6E54 = v8; v8[3] = v10; v8 = v9; } while ( v9 ); } v1[263] = 0; v1[264] = 0; v11 = dword_BA6E54; if ( dword_BA6E54 ) { do { v12 = (_DWORD *)v11[3]; operator delete(v11); v11 = v12; } while ( v12 ); } dword_BA6E54 = 0; v13 = v1[260]; v14 = 0; if ( v13 ) { v15 = (_DWORD *)v1[261]; while ( !*v15 ) { ++v14; ++v15; if ( v14 >= v13 ) goto LABEL_25; } v16 = *(_DWORD **)(v1[261] + 4 * v14); } else { LABEL_25: v16 = 0; } v17 = v16; while ( v17 ) { v18 = (_DWORD *)*v17; v19 = (_DWORD *)v17[2]; v66 = (_DWORD *)v17[2]; if ( v18 ) { v17 = v18; } else { v20 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[259] + 4))(v1 + 259, v17[1]); v21 = v1[260]; v22 = v20 + 1; if ( v22 >= v21 ) { LABEL_34: v17 = 0; } else { v23 = (_DWORD **)(v1[261] + 4 * v22); while ( 1 ) { v17 = *v23; if ( *v23 ) break; ++v22; ++v23; if ( v22 >= v21 ) goto LABEL_34; } } v19 = v66; } if ( v19 ) { do { v24 = (_DWORD *)v19[8]; operator delete(v19); v19 = v24; } while ( v24 ); } } sub_929EC0(v1); sub_91F140(); sub_92AF30(); sub_940360(v1 + 434); sub_940360(v1 + 438); sub_940360(v1 + 442); sub_9382B0(); v25 = v1[420]; v26 = 0; if ( v25 ) { v27 = (_DWORD *)v1[421]; while ( !*v27 ) { ++v26; ++v27; if ( v26 >= v25 ) goto LABEL_43; } v28 = *(_DWORD *)(v1[421] + 4 * v26); } else { LABEL_43: v28 = 0; } v65 = v28; while ( v65 ) { v66 = 0; sub_931910(v1 + 419, (unsigned int)&v65, &v67, (unsigned int *)&v66); v29 = v66; if ( v66 ) { v30 = *(int (__thiscall **)(_DWORD *))(*v66 + 84); v31 = 0; v67 = 0; if ( v30(v66) ) { do { v32 = (_DWORD *)(*(int (__thiscall **)(volatile LONG *, unsigned int))(*v29 + 96))(v29, v31); v66 = v32; if ( v32 ) { v33 = v32[4]; if ( v33 ) { if ( !InterlockedDecrement((volatile LONG *)(v33 + 4)) && v33 ) (**(void (__thiscall ***)(int, signed int))v33)(v33, 1); v66[4] = 0; } } v34 = *(int (__thiscall **)(volatile LONG *))(*v29 + 84); v67 = (int *)((char *)v67 + 1); v31 = (unsigned int)v67; } while ( v31 < v34(v29) ); } v35 = (_DWORD *)(*(int (__thiscall **)(volatile LONG *))(*v29 + 100))(v29); v66 = v35; if ( v35 ) { v36 = v35[4]; if ( v36 ) { if ( !InterlockedDecrement((volatile LONG *)(v36 + 4)) && v36 ) (**(void (__thiscall ***)(int, signed int))v36)(v36, 1); v66[4] = 0; } } if ( !InterlockedDecrement(v29 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v29)(v29, 1); } } sub_940360(v1 + 419); v37 = v1[425]; if ( v37 ) { if ( !InterlockedDecrement((volatile LONG *)(v37 + 4)) && v37 ) (**(void (__thiscall ***)(int, signed int))v37)(v37, 1); v1[425] = 0; } v38 = (void (__stdcall ***)(signed int))v1[430]; if ( v38 ) (**v38)(1); v39 = (void (__stdcall ***)(signed int))v1[431]; v1[430] = 0; if ( v39 ) { (**v39)(1); v1[431] = 0; } v40 = v1[426]; if ( v40 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v40 + 8))(v1[427]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[426] + 8))(v1[428]); v41 = (void (__stdcall ***)(signed int))v1[426]; if ( v41 ) (**v41)(1); v1[426] = 0; } v42 = (void (__stdcall ***)(signed int))v1[429]; if ( v42 ) (**v42)(1); v43 = (void (__stdcall ***)(signed int))v1[432]; v1[429] = 0; if ( v43 ) (**v43)(1); v44 = (_DWORD *)v1[433]; v1[432] = 0; if ( v44 ) { sub_936E20(v44); operator delete(v44); } v45 = v1[33]; v1[433] = 0; if ( v45 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v45 + 8))(v45); v1[33] = 0; } operator delete((void *)v1[532]); operator delete((void *)v1[533]); operator delete((void *)v1[534]); operator delete((void *)v1[536]); for ( i = 0; i < v1[556]; ++i ) *(_DWORD *)(v1[554] + 4 * i) = 0; v1[556] = 0; v1[557] = 0; for ( j = 0; j < v1[562]; ++j ) *(_DWORD *)(v1[560] + 4 * j) = 0; v1[562] = 0; v1[563] = 0; for ( k = 0; k < v1[568]; ++k ) *(_DWORD *)(v1[566] + 4 * k) = 0; v1[568] = 0; v1[569] = 0; for ( l = 0; l < v1[574]; ++l ) *(_DWORD *)(v1[572] + 4 * l) = 0; v1[574] = 0; v1[575] = 0; v50 = (void *)v1[572]; v1[571] = &NiTArray::`vftable'; operator delete(v50); v51 = (void *)v1[566]; v1[565] = &NiTArray::`vftable'; operator delete(v51); v52 = (void *)v1[560]; v1[559] = &NiTArray::`vftable'; operator delete(v52); v53 = (void *)v1[554]; v1[553] = &NiTArray::`vftable'; operator delete(v53); v54 = v1[552]; if ( v54 && !InterlockedDecrement((volatile LONG *)(v54 + 4)) && v54 ) (**(void (__thiscall ***)(int, signed int))v54)(v54, 1); v55 = (_DWORD *)v1[452]; v1[451] = &NiTPointerListBase,NiD3DShaderInterface *>::`vftable'; while ( v55 ) { v56 = v55; v55 = (_DWORD *)*v55; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[451] + 8))(v1 + 451, v56); } v1[454] = 0; v1[452] = 0; v1[453] = 0; v1[451] = &NiTListBase,NiD3DShaderInterface *>::`vftable'; v57 = (_DWORD *)v1[448]; v1[447] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v57 ) { v58 = v57; v57 = (_DWORD *)*v57; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[447] + 8))(v1 + 447, v58); } v1[450] = 0; v1[448] = 0; v1[449] = 0; v1[447] = &NiTListBase,NiPointer>::`vftable'; v59 = v1[446]; if ( v59 && !InterlockedDecrement((volatile LONG *)(v59 + 4)) && v59 ) (**(void (__thiscall ***)(int, signed int))v59)(v59, 1); v1[442] = &NiTPointerMap::`vftable'; sub_940360(v1 + 442); v1[442] = &NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; sub_940360(v1 + 442); operator delete((void *)v1[444]); v1[438] = &NiTPointerMap::`vftable'; sub_940360(v1 + 438); v1[438] = &NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; sub_940360(v1 + 438); operator delete((void *)v1[440]); v1[434] = &NiTPointerMap::`vftable'; sub_940360(v1 + 434); v1[434] = &NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; sub_940360(v1 + 434); operator delete((void *)v1[436]); v60 = v1[425]; if ( v60 && !InterlockedDecrement((volatile LONG *)(v60 + 4)) && v60 ) (**(void (__thiscall ***)(int, signed int))v60)(v60, 1); v1[419] = &NiTPointerMap>::`vftable'; sub_940360(v1 + 419); v1[419] = &NiTMapBase,HWND__ *,NiPointer>::`vftable'; sub_940360(v1 + 419); operator delete((void *)v1[421]); v61 = (int)(v1 + 415); v65 = 3; do { v62 = *(_DWORD *)(v61 - 4); v61 -= 4; if ( v62 && !InterlockedDecrement((volatile LONG *)(v62 + 4)) && v62 ) (**(void (__thiscall ***)(int, signed int))v62)(v62, 1); --v65; } while ( v65 >= 0 ); v63 = v1[267]; if ( v63 && !InterlockedDecrement((volatile LONG *)(v63 + 4)) && v63 ) (**(void (__thiscall ***)(int, signed int))v63)(v63, 1); v1[259] = &NiTPointerMap::`vftable'; sub_940360(v1 + 259); v1[259] = &NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; sub_940360(v1 + 259); operator delete((void *)v1[261]); return sub_85F520((char *)v1); } // A4484C: using guessed type void *NiTMapBase,NiVBBlock *,NiDX9Renderer::PrePackObject *>::`vftable'; // A4486C: using guessed type void *NiTMapBase,HWND__ *,NiPointer>::`vftable'; // A4488C: using guessed type void *NiTMapBase,NiRenderedTexture *,NiDX9RenderedTextureData *>::`vftable'; // A448AC: using guessed type void *NiTMapBase,NiRenderedCubeMap *,NiDX9RenderedCubeMapData *>::`vftable'; // A448CC: using guessed type void *NiTMapBase,NiDynamicTexture *,NiDX9DynamicTextureData *>::`vftable'; // A448EC: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A448FC: using guessed type void *NiTListBase,NiD3DShaderInterface *>::`vftable'; // A4490C: using guessed type void *NiTArray::`vftable'; // A44914: using guessed type void *NiTArray::`vftable'; // A4491C: using guessed type void *NiTArray::`vftable'; // A44958: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A44968: using guessed type void *NiTPointerListBase,NiD3DShaderInterface *>::`vftable'; // A44DA0: using guessed type void *NiTPointerMap::`vftable'; // A44DC0: using guessed type void *NiTPointerMap>::`vftable'; // A44DE0: using guessed type void *NiTPointerMap::`vftable'; // A44E00: using guessed type void *NiTPointerMap::`vftable'; // A44E20: using guessed type void *NiTPointerMap::`vftable'; // A45104: using guessed type void *NiDX9Renderer::`vftable'; // AC4D34: using guessed type int dword_AC4D34; //----- (0092A8B0) -------------------------------------------------------- _DWORD *__cdecl sub_92A8B0(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14) { void *v14; // ecx _DWORD *result; // eax _DWORD *v16; // eax _DWORD *v17; // esi if ( sub_920940() == -1 ) { strncpy_s(&byte_BA45D0, 0x100u, "Creation failed: Could not initialize DirectX9", 0xFFu); nullsub_6(v14); result = 0; } else { v16 = operator new(0x910u); if ( v16 ) v17 = sub_9286B0(v16); else v17 = 0; if ( !sub_928C30((int)v17, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) ) { if ( v17 ) (*(void (__thiscall **)(_DWORD *, signed int))*v17)(v17, 1); v17 = 0; } result = v17; } return result; } //----- (0092A960) -------------------------------------------------------- char __thiscall sub_92A960(_DWORD **this) { int v1; // esi int *v3; // ebx int v4; // eax int v5; // edi v1 = (int)this; if ( sub_929F30(this) ) { sub_924DA0(v1); sub_918B20(*(_DWORD *)(v1 + 2208)); sub_936CC0(*(_DWORD **)(v1 + 1732)); if ( (*(int (__stdcall **)(_DWORD))(**(_DWORD **)(v1 + 132) + 164))(*(_DWORD *)(v1 + 132)) < 0 ) return 0; while ( *(_DWORD *)(v1 + 1800) ) { v3 = *(int **)(v1 + 1792); v4 = *v3; *(_DWORD *)(v1 + 1792) = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else *(_DWORD *)(v1 + 1796) = 0; v5 = v3[2]; if ( v5 ) InterlockedIncrement((volatile LONG *)(v5 + 4)); (*(void (__thiscall **)(int, int *))(*(_DWORD *)(v1 + 1788) + 8))(v1 + 1788, v3); --*(_DWORD *)(v1 + 1800); if ( v5 ) { if ( !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } } } return 1; } // 918B20: using guessed type int __thiscall sub_918B20(_DWORD); //----- (0092AA40) -------------------------------------------------------- void __thiscall sub_92AA40(int this, int a2) { _DWORD *v2; // ebx bool v3; // zf int v4; // eax int v5; // ecx _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax volatile LONG *v9; // eax _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // eax int v14; // eax int v15; // ecx _DWORD *v16; // ST14_4 int v17; // eax char v18; // [esp+8h] [ebp-54h] int v19; // [esp+18h] [ebp-44h] int v20; // [esp+1Ch] [ebp-40h] int v21; // [esp+20h] [ebp-3Ch] char v22; // [esp+24h] [ebp-38h] int v23; // [esp+48h] [ebp-14h] int v24; // [esp+4Ch] [ebp-10h] int v25; // [esp+50h] [ebp-Ch] float v26; // [esp+54h] [ebp-8h] v2 = (_DWORD *)this; v3 = *(_BYTE *)(this + 1272) == 0; v19 = a2; if ( v3 && a2 && *(_DWORD *)(a2 + 16) ) { v3 = *(_DWORD *)(this + 1700) == 0; v4 = *(_DWORD *)(this + 12); v5 = *(_DWORD *)(this + 16); v20 = v4; v21 = v5; if ( v3 ) { v6 = operator new(0x38u); if ( v6 ) v7 = sub_87DE20(v6); else v7 = 0; sub_56FF80(v2 + 425, (int)v7); v8 = operator new(0x28u); if ( v8 ) v9 = sub_40D9C0(v8); else v9 = 0; *((_DWORD *)v9 + 8) = 1; *((_DWORD *)v9 + 9) = 0; sub_85C290((char *)v2[425], v9); v10 = operator new(0x20u); if ( v10 ) v11 = sub_40DC70(v10); else v11 = 0; *((_WORD *)v11 + 14) = v11[7] & 0xFEED | 0xED; sub_85C290((char *)v2[425], v11); v12 = operator new(0x24u); if ( v12 ) v13 = sub_46EDA0(v12); else v13 = 0; *((_WORD *)v13 + 14) &= 0xFFFCu; sub_85C290((char *)v2[425], v13); } sub_85C290((char *)v2[425], *(volatile LONG **)(a2 + 20)); v14 = v2[427]; v2[3] = v2[425]; v15 = v2[426]; v2[4] = 0; (*(void (__stdcall **)(int, int))(*(_DWORD *)v15 + 16))(v14, a2); sub_929FD0(v2, a2); qmemcpy(&v22, &unk_ABD440, 0x24u); v26 = 1.0; v23 = dword_BA45C0; v24 = dword_BA45C4; v16 = *(_DWORD **)(v19 + 28); v25 = dword_BA45C8; sub_9275E0(v2, 0, 0, 0, (int)&v22, (int)&v18, v16); sub_85C290((char *)v2[425], (volatile LONG *)dword_BA4770); v17 = v21; v2[3] = v20; v2[4] = v17; } } // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; // BA4770: using guessed type int dword_BA4770; //----- (0092AC10) -------------------------------------------------------- void *__thiscall sub_92AC10(void *this, char a2) { void *v2; // esi v2 = this; sub_92A050(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092AC40) -------------------------------------------------------- int __cdecl sub_92AC40(int a1, int a2) { int result; // eax if ( a2 ) { if ( dword_BA6E64[a2] ) { result = (*(int (__stdcall **)(int, int, _DWORD))(*(_DWORD *)a1 + 148))(a1, a2, 0); dword_BA6E64[a2] = 0; } } return result; } //----- (0092AC80) -------------------------------------------------------- char __thiscall sub_92AC80(void *this) { (*(void (**)(void))(*(_DWORD *)this + 44))(); return 1; } //----- (0092AC90) -------------------------------------------------------- char __cdecl sub_92AC90(int a1) { if ( dword_BA6E74 ) { if ( (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)a1 + 156))(a1, 0) < 0 ) return 0; dword_BA6E74 = 0; } return 1; } // BA6E74: using guessed type int dword_BA6E74; //----- (0092ACD0) -------------------------------------------------------- bool __thiscall sub_92ACD0(_DWORD **this) { return (*(int (__stdcall **)(_DWORD *, _DWORD, _DWORD, _DWORD, _DWORD))(*this[19] + 68))(this[19], 0, 0, 0, 0) >= 0; } //----- (0092ACF0) -------------------------------------------------------- char __thiscall sub_92ACF0(char *this, int a2) { unsigned int v2; // eax _DWORD *v3; // edx v2 = 0; v3 = this + 20; while ( *v3 != a2 ) { ++v2; v3 += 3; if ( v2 >= 4 ) return 0; } return this[12 * v2 + 28]; } //----- (0092AD20) -------------------------------------------------------- void *__thiscall sub_92AD20(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A45910: using guessed type void *NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; //----- (0092AD50) -------------------------------------------------------- void *sub_92AD50() { return &unk_BA6E80; } //----- (0092AD60) -------------------------------------------------------- int __thiscall sub_92AD60(_DWORD *this) { return *(_DWORD *)(this[2] + 8); } //----- (0092AD70) -------------------------------------------------------- int __thiscall sub_92AD70(_DWORD *this) { return *(_DWORD *)(this[2] + 12); } //----- (0092AD80) -------------------------------------------------------- char __thiscall sub_92AD80(_DWORD *this, int a2, unsigned int a3) { _DWORD *v3; // edi int v4; // eax v3 = this; v4 = this[3]; if ( !v4 ) return 0; if ( a3 > dword_BA6E78 ) return 0; if ( v4 != dword_BA6E64[a3] ) { if ( (*(int (__stdcall **)(int, unsigned int, int))(*(_DWORD *)a2 + 148))(a2, a3, v4) < 0 ) return 0; dword_BA6E64[a3] = v3[3]; } return 1; } // BA6E78: using guessed type int dword_BA6E78; //----- (0092ADE0) -------------------------------------------------------- char __thiscall sub_92ADE0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = this[3]; if ( !v3 ) return 0; if ( v3 != dword_BA6E74 ) { if ( (*(int (__stdcall **)(int, int))(*(_DWORD *)a2 + 156))(a2, v3) < 0 ) return 0; dword_BA6E74 = v2[3]; } return 1; } // BA6E74: using guessed type int dword_BA6E74; //----- (0092AE20) -------------------------------------------------------- char __thiscall sub_92AE20(_DWORD *this) { int v1; // edx unsigned int v2; // eax _DWORD *v3; // ecx char result; // al v1 = this[4]; if ( !v1 || !this[3] ) goto LABEL_6; v2 = 0; v3 = (_DWORD *)(v1 + 20); while ( *v3 != 17 ) { ++v2; v3 += 3; if ( v2 >= 4 ) goto LABEL_6; } if ( *(_BYTE *)(v1 + 12 * v2 + 28) ) result = 1; else LABEL_6: result = 0; return result; } //----- (0092AE50) -------------------------------------------------------- char __thiscall sub_92AE50(_DWORD *this) { int v1; // edx unsigned int v2; // eax _DWORD *v3; // ecx char result; // al v1 = this[4]; if ( !v1 || !this[3] ) goto LABEL_6; v2 = 0; v3 = (_DWORD *)(v1 + 20); while ( *v3 != 18 ) { ++v2; v3 += 3; if ( v2 >= 4 ) goto LABEL_6; } if ( *(_BYTE *)(v1 + 12 * v2 + 28) ) result = 1; else LABEL_6: result = 0; return result; } //----- (0092AE80) -------------------------------------------------------- char __thiscall sub_92AE80(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi _DWORD *v5; // eax int v6; // ST04_4 _DWORD *v7; // ecx int v8; // ST00_4 int v9; // [esp+Ch] [ebp-24h] int v10; // [esp+24h] [ebp-Ch] int v11; // [esp+28h] [ebp-8h] v2 = this; v3 = this + 3; if ( this[3] ) (*(void (**)(void))(*this + 28))(); if ( (*(int (__stdcall **)(int, _DWORD *))(*(_DWORD *)a2 + 160))(a2, v3) < 0 ) return 0; if ( (*(int (__stdcall **)(_DWORD, int *))(*(_DWORD *)*v3 + 48))(*v3, &v9) < 0 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v3 + 8))(*v3); *v3 = 0; return 0; } v5 = sub_93B250(v9); v6 = v11; v7 = (_DWORD *)v2[2]; v8 = v10; v2[4] = v5; sub_87F500(v7, v8, v6); return 1; } //----- (0092AF30) -------------------------------------------------------- void sub_92AF30() { DWORD v0; // eax int v1; // esi void (*v2)(void); // edx EnterCriticalSection(&stru_BA6EA8); v0 = GetCurrentThreadId(); v1 = dword_AC5928; ++dword_BA6EC4; dword_BA6EC0 = v0; if ( dword_AC5928 ) { do { v2 = *(void (**)(void))(**(_DWORD **)(v1 + 8) + 28); v1 = *(_DWORD *)v1; v2(); } while ( v1 ); } if ( !--dword_BA6EC4 ) dword_BA6EC0 = 0; LeaveCriticalSection(&stru_BA6EA8); } // AC5928: using guessed type int dword_AC5928; // BA6EC0: using guessed type int dword_BA6EC0; // BA6EC4: using guessed type int dword_BA6EC4; //----- (0092AF90) -------------------------------------------------------- void __cdecl sub_92AF90(int a1) { DWORD v1; // eax int v2; // esi void (__stdcall *v3)(int); // edx EnterCriticalSection(&stru_BA6EA8); v1 = GetCurrentThreadId(); v2 = dword_AC5928; ++dword_BA6EC4; dword_BA6EC0 = v1; if ( dword_AC5928 ) { do { v3 = *(void (__stdcall **)(int))(**(_DWORD **)(v2 + 8) + 32); v2 = *(_DWORD *)v2; v3(a1); } while ( v2 ); } if ( !--dword_BA6EC4 ) dword_BA6EC0 = 0; LeaveCriticalSection(&stru_BA6EA8); } // AC5928: using guessed type int dword_AC5928; // BA6EC0: using guessed type int dword_BA6EC0; // BA6EC4: using guessed type int dword_BA6EC4; //----- (0092B000) -------------------------------------------------------- char __thiscall sub_92B000(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // ebx char result; // al _DWORD *v5; // esi signed int v6; // eax void *v7; // ecx int v8; // [esp+14h] [ebp-24h] v2 = this; v3 = this + 3; if ( this[3] ) (*(void (**)(void))(*this + 28))(); if ( !v2[5] ) return 0; v5 = (_DWORD *)dword_BA46D0; (*(void (__thiscall **)(int))(*(_DWORD *)dword_BA46D0 + 104))(dword_BA46D0); v6 = (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, signed int, signed int, _DWORD))(*(_DWORD *)dword_BA6E44 + 40))( dword_BA6E44, v5[240], v5[241], v5[243], 2, 1, v2[5]); if ( v6 >= 0 && (v6 = (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, signed int, _DWORD *, _DWORD))(*(_DWORD *)a2 + 116))( a2, *(_DWORD *)(v2[2] + 8), *(_DWORD *)(v2[2] + 12), v2[5], 0, 0, 1, v3, 0), v6 >= 0) ) { if ( (*(int (__stdcall **)(_DWORD, int *))(*(_DWORD *)*v3 + 48))(*v3, &v8) >= 0 ) { v2[4] = sub_93B250(v8); result = 1; } else { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v3 + 8))(*v3); *v3 = 0; result = 0; } } else { sub_93C3F0(v6); nullsub_6(v7); result = 0; } return result; } // BA46D0: using guessed type int dword_BA46D0; // BA6E44: using guessed type int dword_BA6E44; //----- (0092B140) -------------------------------------------------------- char __thiscall sub_92B140(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // edi int v4; // eax void *v6; // ecx int v7; // [esp+8h] [ebp-24h] int v8; // [esp+20h] [ebp-Ch] int v9; // [esp+24h] [ebp-8h] v2 = this; v3 = this + 3; if ( this[3] ) (*(void (**)(void))(*this + 28))(); dword_BA6E64[0] = 0; dword_BA6E74 = 0; v4 = v2[19]; if ( v4 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(v2[19]); v2[19] = 0; } v2[19] = a2; (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD *))(*(_DWORD *)v2[19] + 152))(v2[19], 0, v3) < 0 ) return 0; if ( (*(int (__stdcall **)(_DWORD, int *))(*(_DWORD *)*v3 + 48))(*v3, &v7) < 0 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v3 + 8))(*v3); *v3 = 0; return 0; } sub_87F500((_DWORD *)v2[2], v8, v9); v2[4] = sub_93B250(v7); sub_91F3D0(v7); nullsub_6(v6); return 1; } // BA6E74: using guessed type int dword_BA6E74; //----- (0092B230) -------------------------------------------------------- int __thiscall sub_92B230(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; return result; } // A45910: using guessed type void *NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; // A45954: using guessed type void *NiTPointerListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; //----- (0092B270) -------------------------------------------------------- void __thiscall sub_92B270(_DWORD *this) { _DWORD *v1; // esi int v2; // eax v1 = this; v2 = this[3]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[3] = 0; } operator delete((void *)v1[4]); v1[4] = 0; } //----- (0092B2A0) -------------------------------------------------------- LONG __thiscall sub_92B2A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax v1 = this; v2 = this[5]; *this = &NiDX9TextureBufferData::`vftable'; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[5] = 0; } v3 = v1[3]; *v1 = &NiDX92DBufferData::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v1[3] = 0; } operator delete((void *)v1[4]); v1[4] = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45920: using guessed type void *NiDX92DBufferData::`vftable'; // A459D8: using guessed type void *NiDX9TextureBufferData::`vftable'; //----- (0092B310) -------------------------------------------------------- void *sub_92B310() { return &unk_BA6E88; } //----- (0092B320) -------------------------------------------------------- void *__thiscall sub_92B320(void *this, char a2) { void *v2; // esi v2 = this; sub_92B2A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092B350) -------------------------------------------------------- int __cdecl sub_92B350(int a1, _DWORD **a2) { _DWORD *v2; // eax int v3; // esi signed int v4; // eax void *v5; // ecx int v7; // [esp+10h] [ebp-24h] int v8; // [esp+28h] [ebp-Ch] int v9; // [esp+2Ch] [ebp-8h] v2 = operator new(0x18u); v3 = (int)v2; if ( v2 ) { *v2 = &NiRefObject::`vftable'; v2[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)(v3 + 8) = 0; *(_DWORD *)(v3 + 12) = 0; *(_DWORD *)(v3 + 16) = 0; *(_DWORD *)v3 = &NiDX9TextureBufferData::`vftable'; *(_DWORD *)(v3 + 20) = 0; } else { v3 = 0; } *(_DWORD *)(v3 + 20) = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); v4 = (*(int (__stdcall **)(int, _DWORD, int))(*(_DWORD *)a1 + 72))(a1, 0, v3 + 12); if ( v4 < 0 ) { sub_93C3F0(v4); nullsub_6(v5); LABEL_6: (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return 0; } if ( (*(int (__stdcall **)(_DWORD, int *))(**(_DWORD **)(v3 + 12) + 48))(*(_DWORD *)(v3 + 12), &v7) < 0 ) goto LABEL_6; *(_DWORD *)(v3 + 16) = sub_93B250(v7); if ( *a2 ) sub_40DB00(*a2, v3); else *a2 = sub_87F6F0(v8, v9, (volatile LONG *)v3); *(_DWORD *)(v3 + 8) = *a2; return v3; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A459D8: using guessed type void *NiDX9TextureBufferData::`vftable'; //----- (0092B460) -------------------------------------------------------- int __cdecl sub_92B460(int a1, int a2, int a3, int a4, _DWORD **a5) { _DWORD *v5; // eax int v6; // esi _DWORD *v7; // edi signed int v8; // eax void *v9; // ecx int v11; // [esp+10h] [ebp-24h] int v12; // [esp+28h] [ebp-Ch] int v13; // [esp+2Ch] [ebp-8h] v5 = operator new(0x18u); v6 = (int)v5; if ( v5 ) { *v5 = &NiRefObject::`vftable'; v5[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)(v6 + 8) = 0; *(_DWORD *)(v6 + 12) = 0; *(_DWORD *)(v6 + 16) = 0; *(_DWORD *)v6 = &NiDX9TextureBufferData::`vftable'; *(_DWORD *)(v6 + 20) = 0; } else { v6 = 0; } *(_DWORD *)(v6 + 20) = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); v7 = (_DWORD *)(v6 + 12); v8 = (*(int (__stdcall **)(_DWORD, int, _DWORD, int))(**(_DWORD **)(v6 + 20) + 72))( *(_DWORD *)(v6 + 20), a2, 0, v6 + 12); if ( v8 < 0 ) { sub_93C3F0(v8); nullsub_6(v9); *v7 = 0; LABEL_6: (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); return 0; } if ( (*(int (__stdcall **)(_DWORD, int *))(*(_DWORD *)*v7 + 48))(*v7, &v11) < 0 ) goto LABEL_6; *(_DWORD *)(v6 + 16) = sub_93B250(v11); if ( *a5 ) sub_40DB00(*a5, v6); else *a5 = sub_87F6F0(v12, v13, (volatile LONG *)v6); *(_DWORD *)(v6 + 8) = *a5; return v6; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A459D8: using guessed type void *NiDX9TextureBufferData::`vftable'; //----- (0092B570) -------------------------------------------------------- int __thiscall sub_92B570(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int result; // eax v1 = this; v2 = this[3]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[3] = 0; } operator delete((void *)v1[4]); result = v1[5]; v1[4] = 0; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v1[5] = 0; } return result; } //----- (0092B5C0) -------------------------------------------------------- void *__thiscall sub_92B5C0(void *this, char a2) { void *v2; // esi v2 = this; sub_92B230(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092B5F0) -------------------------------------------------------- _DWORD *__thiscall sub_92B5F0(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax _DWORD *v3; // eax bool v4; // zf v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); v1[2] = 0; v1[3] = 0; v1[4] = 0; *v1 = &NiDX9AdditionalDepthStencilBufferData::`vftable'; v1[5] = 0; EnterCriticalSection(&stru_BA6EA8); v2 = GetCurrentThreadId(); ++dword_BA6EC4; dword_BA6EC0 = v2; v3 = (_DWORD *)((int (__thiscall *)(int (__thiscall ***)(void *, char)))off_AC5924[1])(&off_AC5924); v3[2] = v1; v3[1] = 0; *v3 = dword_AC5928; if ( dword_AC5928 ) *(_DWORD *)(dword_AC5928 + 4) = v3; else dword_AC592C = (int)v3; ++dword_AC5930; v4 = dword_BA6EC4-- == 1; dword_AC5928 = (int)v3; if ( v4 ) dword_BA6EC0 = 0; LeaveCriticalSection(&stru_BA6EA8); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45A5C: using guessed type void *NiDX9AdditionalDepthStencilBufferData::`vftable'; // AC5924: using guessed type int (__thiscall **off_AC5924)(void *, char); // AC5928: using guessed type int dword_AC5928; // AC592C: using guessed type int dword_AC592C; // AC5930: using guessed type int dword_AC5930; // BA6EC0: using guessed type int dword_BA6EC0; // BA6EC4: using guessed type int dword_BA6EC4; //----- (0092B6A0) -------------------------------------------------------- void *sub_92B6A0() { return &unk_BA6EA0; } //----- (0092B6B0) -------------------------------------------------------- signed int __usercall sub_92B6B0@(int a1@, int a2@, int a3, _DWORD **a4, int a5) { signed int result; // eax signed int v6; // edi int v7; // ST18_4 _DWORD *v8; // esi signed int v9; // eax void *v10; // ecx _DWORD *v11; // eax _DWORD *v12; // esi signed int v13; // eax void *v14; // ecx _DWORD *v15; // eax int v16; // [esp+8h] [ebp-24h] result = a5; if ( a5 ) { result = sub_93AA30(a5); v6 = result; if ( result ) { v7 = a2; v8 = (_DWORD *)dword_BA46D0; (*(void (__thiscall **)(int, int, int))(*(_DWORD *)dword_BA46D0 + 104))(dword_BA46D0, v7, a1); v9 = (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, signed int, signed int, signed int))(*(_DWORD *)dword_BA6E44 + 40))( dword_BA6E44, v8[240], v8[241], v8[243], 2, 1, v6); if ( v9 < 0 ) { sub_93C3F0(v9); nullsub_6(v10); return 0; } v11 = operator new(0x18u); if ( v11 ) v12 = sub_92B5F0(v11); else v12 = 0; v13 = (*(int (__stdcall **)(int, _DWORD, _DWORD, signed int, _DWORD, _DWORD, signed int, _DWORD *, _DWORD))(*(_DWORD *)a3 + 116))( a3, (*a4)[2], (*a4)[3], v6, 0, 0, 1, v12 + 3, 0); if ( v13 < 0 ) { sub_93C3F0(v13); nullsub_6(v14); if ( !v12 ) return 0; LABEL_10: (*(void (__thiscall **)(_DWORD *, signed int))*v12)(v12, 1); return 0; } if ( (*(int (__stdcall **)(_DWORD, int *))(*(_DWORD *)v12[3] + 48))(v12[3], &v16) < 0 ) goto LABEL_10; v15 = sub_93B250(v16); v12[5] = v6; v12[4] = v15; sub_40DB00(*a4, (int)v12); v12[2] = *a4; result = (signed int)v12; } } return result; } // 92B6B0: could not find valid save-restore pair for esi // BA46D0: using guessed type int dword_BA46D0; // BA6E44: using guessed type int dword_BA6E44; //----- (0092B830) -------------------------------------------------------- LONG __thiscall sub_92B830(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int v3; // eax v1 = this; v2 = this[19]; *this = &NiDX9ImplicitBufferData::`vftable'; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[19] = 0; } v3 = v1[3]; *v1 = &NiDX92DBufferData::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v1[3] = 0; } operator delete((void *)v1[4]); v1[4] = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45920: using guessed type void *NiDX92DBufferData::`vftable'; // A45ACC: using guessed type void *NiDX9ImplicitBufferData::`vftable'; //----- (0092B8A0) -------------------------------------------------------- void *sub_92B8A0() { return &unk_BA6ED0; } //----- (0092B8B0) -------------------------------------------------------- int __thiscall sub_92B8B0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax int result; // eax v1 = this; v2 = this[3]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); v1[3] = 0; } operator delete((void *)v1[4]); result = v1[19]; v1[4] = 0; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v1[19] = 0; } return result; } //----- (0092B900) -------------------------------------------------------- void *__thiscall sub_92B900(void *this, char a2) { void *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 3); *(_DWORD *)this = &NiDX92DBufferData::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); *((_DWORD *)v2 + 3) = 0; } operator delete(*((void **)v2 + 4)); *((_DWORD *)v2 + 4) = 0; *(_DWORD *)v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45920: using guessed type void *NiDX92DBufferData::`vftable'; //----- (0092B960) -------------------------------------------------------- void *sub_92B960() { return &unk_BA6E98; } //----- (0092B970) -------------------------------------------------------- LONG __thiscall sub_92B970(_DWORD *this) { _DWORD *v1; // esi DWORD v2; // eax _DWORD *v3; // eax _DWORD *v4; // ecx int v5; // edx int v6; // eax int v8; // [esp+4h] [ebp-4h] v1 = this; *this = &NiDX9AdditionalDepthStencilBufferData::`vftable'; EnterCriticalSection(&stru_BA6EA8); v2 = GetCurrentThreadId(); ++dword_BA6EC4; dword_BA6EC0 = v2; v3 = (_DWORD *)dword_AC5928; if ( dword_AC5928 ) { while ( 1 ) { v4 = v3 + 2; v5 = (int)v3; v3 = (_DWORD *)*v3; if ( v1 == (_DWORD *)*v4 ) break; if ( !v3 ) goto LABEL_4; } } else { LABEL_4: v5 = 0; } v8 = v5; if ( v5 ) sub_403620(&off_AC5924, (_DWORD **)&v8); if ( !--dword_BA6EC4 ) dword_BA6EC0 = 0; LeaveCriticalSection(&stru_BA6EA8); v6 = v1[3]; *v1 = &NiDX92DBufferData::`vftable'; if ( v6 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); v1[3] = 0; } operator delete((void *)v1[4]); v1[4] = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45920: using guessed type void *NiDX92DBufferData::`vftable'; // A45A5C: using guessed type void *NiDX9AdditionalDepthStencilBufferData::`vftable'; // AC5924: using guessed type int (__thiscall **off_AC5924)(void *, char); // AC5928: using guessed type int dword_AC5928; // BA6EC0: using guessed type int dword_BA6EC0; // BA6EC4: using guessed type int dword_BA6EC4; //----- (0092BA30) -------------------------------------------------------- void *__thiscall sub_92BA30(void *this, char a2) { void *v2; // esi v2 = this; sub_92B830(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092BA60) -------------------------------------------------------- int __cdecl sub_92BA60(int a1, void *Src, int a3) { _DWORD *v3; // eax int v4; // esi int result; // eax void *v6; // ecx int v7; // edi int v8; // [esp+10h] [ebp-24h] int v9; // [esp+28h] [ebp-Ch] int v10; // [esp+2Ch] [ebp-8h] v3 = operator new(0x50u); v4 = (int)v3; if ( v3 ) { *v3 = &NiRefObject::`vftable'; v3[1] = 0; InterlockedIncrement(&Addend); *(_DWORD *)(v4 + 8) = 0; *(_DWORD *)(v4 + 12) = 0; *(_DWORD *)(v4 + 16) = 0; *(_DWORD *)v4 = &NiDX9ImplicitBufferData::`vftable'; *(_DWORD *)(v4 + 76) = 0; } else { v4 = 0; } memcpy_s((void *)(v4 + 20), 0x38u, Src, 0x38u); *(_DWORD *)(v4 + 76) = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); if ( (*(int (__stdcall **)(int, _DWORD, int))(*(_DWORD *)a1 + 152))(a1, 0, v4 + 12) < 0 || (*(int (__stdcall **)(_DWORD, int *))(**(_DWORD **)(v4 + 12) + 48))(*(_DWORD *)(v4 + 12), &v8) < 0 ) { (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); result = 0; } else { *(_DWORD *)(v4 + 16) = sub_93B250(v8); sub_91F3D0(v8); nullsub_6(v6); if ( !dword_BA6E78 ) { v7 = dword_BA46D0; dword_BA6E78 = (*(int (__thiscall **)(int))(*(_DWORD *)dword_BA46D0 + 132))(dword_BA46D0); byte_BA6E7C = (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 136))(v7); } if ( *(_DWORD *)a3 ) sub_40DB00(*(_DWORD **)a3, v4); else *(_DWORD *)a3 = sub_87F6F0(v9, v10, (volatile LONG *)v4); *(_DWORD *)(v4 + 8) = *(_DWORD *)a3; result = v4; } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45ACC: using guessed type void *NiDX9ImplicitBufferData::`vftable'; // BA46D0: using guessed type int dword_BA46D0; // BA6E78: using guessed type int dword_BA6E78; // BA6E7C: using guessed type char byte_BA6E7C; //----- (0092BBB0) -------------------------------------------------------- _DWORD *__cdecl sub_92BBB0(int a1, _DWORD **a2) { _DWORD *v2; // eax _DWORD *v3; // esi int *v4; // ebx _DWORD *result; // eax int v6; // edx int v7; // [esp+10h] [ebp-24h] int v8; // [esp+28h] [ebp-Ch] int v9; // [esp+2Ch] [ebp-8h] v2 = operator new(0x14u); v3 = v2; if ( v2 ) { *v2 = &NiRefObject::`vftable'; v2[1] = 0; InterlockedIncrement(&Addend); v3[2] = 0; v3[3] = 0; v3[4] = 0; *v3 = &NiDX9ImplicitDepthStencilBufferData::`vftable'; } else { v3 = 0; } v4 = v3 + 3; if ( (*(int (__stdcall **)(int, _DWORD *))(*(_DWORD *)a1 + 160))(a1, v3 + 3) >= 0 ) { if ( (*(int (__stdcall **)(int, int *))(*(_DWORD *)*v4 + 48))(*v4, &v7) >= 0 ) { v3[4] = sub_93B250(v7); if ( *a2 ) sub_40DB00(*a2, (int)v3); else *a2 = sub_87F480(v8, v9, (int)v3); v6 = *v4; v3[2] = *a2; result = v3; dword_BA6E74 = v6; } else { (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } } else { if ( v3 ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45B34: using guessed type void *NiDX9ImplicitDepthStencilBufferData::`vftable'; // BA6E74: using guessed type int dword_BA6E74; //----- (0092BCC0) -------------------------------------------------------- void *__thiscall sub_92BCC0(void *this, char a2) { void *v2; // esi v2 = this; sub_92B970(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092BCF0) -------------------------------------------------------- int __thiscall sub_92BCF0(_DWORD *this, int a2) { int result; // eax result = a2; this[3] = a2; return result; } //----- (0092BD00) -------------------------------------------------------- void __cdecl sub_92BD00(char *Src) { unsigned int v1; // kr00_4 operator delete(dword_BA6EE8); if ( Src ) { if ( *Src ) { v1 = strlen(Src); dword_BA6EE8 = operator new(v1 + 1); strcpy_s((char *)dword_BA6EE8, v1 + 1, Src); } } } //----- (0092BD50) -------------------------------------------------------- void **__thiscall sub_92BD50(void **this, char *Src) { void **v2; // esi v2 = this; sub_87E900(this, Src); v2[3] = 0; v2[4] = 0; *v2 = &NiD3DShaderLibrary::`vftable'; v2[5] = 0; return v2; } // A45C70: using guessed type void *NiD3DShaderLibrary::`vftable'; //----- (0092BD80) -------------------------------------------------------- LONG __thiscall sub_92BD80(_DWORD *this) { void *v1; // ST08_4 _DWORD *v3; // esi int v4; // edi int v5; // edi v3 = this; *this = &NiD3DShaderLibrary::`vftable'; v4 = this[5]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v3[5] = 0; } v3[4] = 0; v5 = v3[5]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1 = (void *)v3[2]; *v3 = &NiShaderLibrary::`vftable'; operator delete(v1); v3[2] = 0; *v3 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A26738: using guessed type void *NiShaderLibrary::`vftable'; // A45C70: using guessed type void *NiD3DShaderLibrary::`vftable'; //----- (0092BDF0) -------------------------------------------------------- void __thiscall sub_92BDF0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[5]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[5] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (0092BE40) -------------------------------------------------------- void *__thiscall sub_92BE40(void *this, char a2) { void *v2; // esi v2 = this; sub_92BD80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0092BE70) -------------------------------------------------------- int sub_92BE70(char *Format, ...) { int result; // eax char DstBuf; // [esp+0h] [ebp-404h] va_list va; // [esp+410h] [ebp+Ch] va_start(va, Format); if ( byte_AC5934 ) result = vsprintf_s(&DstBuf, 0x400u, Format, va); return result; } // AC5934: using guessed type char byte_AC5934; //----- (0092BEC0) -------------------------------------------------------- char __cdecl sub_92BEC0(char *FullPath, char *Drive, char *Dir, char *Filename, char *Ext) { _splitpath_s(FullPath, Drive, 3u, Dir, 0x104u, Filename, 0x104u, Ext, 0x100u); return 1; } //----- (0092BF00) -------------------------------------------------------- char __cdecl sub_92BF00(char *FullPath, char *DstBuf, size_t SizeInBytes) { char Drive; // [esp+4h] [ebp-30Ch] char Filename; // [esp+8h] [ebp-308h] char Ext; // [esp+108h] [ebp-208h] char Dir; // [esp+208h] [ebp-108h] _splitpath_s(FullPath, &Drive, 3u, &Dir, 0x104u, &Filename, 0x100u, &Ext, 0x100u); if ( strlen(&Dir) + strlen(&Drive) + 1 > SizeInBytes ) return 0; sub_7FF6E0(DstBuf, SizeInBytes, "%s%s", &Drive, &Dir); return 1; } //----- (0092BFD0) -------------------------------------------------------- char __cdecl sub_92BFD0(char *FullPath, char *DstBuf, size_t SizeInBytes) { char Drive; // [esp+4h] [ebp-30Ch] char Dir; // [esp+8h] [ebp-308h] char Ext; // [esp+10Ch] [ebp-204h] char Filename; // [esp+20Ch] [ebp-104h] _splitpath_s(FullPath, &Drive, 3u, &Dir, 0x104u, &Filename, 0x100u, &Ext, 0x100u); if ( strlen(&Filename) + 1 > SizeInBytes ) return 0; sub_7FF6E0(DstBuf, SizeInBytes, "%s", &Filename); return 1; } //----- (0092C080) -------------------------------------------------------- char __cdecl sub_92C080(char *FullPath, char *Dst, rsize_t SizeInBytes) { char Drive; // [esp+4h] [ebp-30Ch] char Dir; // [esp+8h] [ebp-308h] char Filename; // [esp+10Ch] [ebp-204h] char Src; // [esp+20Ch] [ebp-104h] _splitpath_s(FullPath, &Drive, 3u, &Dir, 0x104u, &Filename, 0x100u, &Src, 0x100u); strncpy_s(Dst, SizeInBytes, &Src, SizeInBytes); return 1; } //----- (0092C100) -------------------------------------------------------- rsize_t __cdecl sub_92C100(int a1, rsize_t SizeInBytes, char *Src) { char *v3; // edx rsize_t v4; // edi rsize_t v5; // ebx void *v6; // eax v3 = Src; if ( Src && *Src ) { v4 = strlen(Src) + 1; if ( *(_DWORD *)a1 ) { v5 = SizeInBytes; if ( SizeInBytes > v4 ) { LABEL_7: strcpy_s(*(char **)a1, v5, v3); return v5; } operator delete(*(void **)a1); *(_DWORD *)a1 = 0; } v6 = operator new(v4); v3 = Src; *(_DWORD *)a1 = v6; v5 = v4; goto LABEL_7; } operator delete(*(void **)a1); *(_DWORD *)a1 = 0; return 0; } //----- (0092C180) -------------------------------------------------------- bool __cdecl sub_92C180(signed int a1, int a2, int a3) { signed int v3; // esi void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // edx int (__cdecl *v5)(signed int, int, int, signed int *, signed int); // eax int v6; // eax bool result; // al int v8; // [esp+4h] [ebp-4h] v3 = a1; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a1 + 8); v8 = 4; v4(a1, &a3, 4, &v8, 1); result = 1; if ( a3 ) { v5 = *(int (__cdecl **)(signed int, int, int, signed int *, signed int))(v3 + 8); a1 = 1; v6 = v5(v3, a2, a3, &a1, 1); if ( v6 != a3 ) result = 0; } return result; } //----- (0092C1E0) -------------------------------------------------------- char __cdecl sub_92C1E0(signed int a1, const char *a2) { const char *v2; // edi signed int v3; // esi void (__cdecl *v4)(signed int, const char **, signed int, int *, signed int); // edx void (__cdecl *v5)(signed int, const char *, const char *, signed int *, signed int); // edx int v7; // [esp+8h] [ebp-4h] v2 = a2; if ( a2 ) a2 = (const char *)strlen(a2); else a2 = 0; v3 = a1; v4 = *(void (__cdecl **)(signed int, const char **, signed int, int *, signed int))(a1 + 8); v7 = 4; v4(a1, &a2, 4, &v7, 1); if ( a2 ) { v5 = *(void (__cdecl **)(signed int, const char *, const char *, signed int *, signed int))(v3 + 8); a1 = 1; v5(v3, v2, a2, &a1, 1); } return 1; } //----- (0092C250) -------------------------------------------------------- char __cdecl sub_92C250(int a1, void **a2, _DWORD *a3) { int v3; // esi void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx void **v5; // edi size_t v6; // ST14_4 void *v7; // eax int v8; // ST08_4 void (__cdecl *v9)(int, void *, int, int *, signed int); // edx int v11; // [esp+4h] [ebp-4h] v3 = a1; v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a1 + 4); v11 = 4; v4(a1, &a1, 4, &v11, 1); if ( a1 ) { v5 = a2; operator delete(*a2); v6 = a1 + 1; *a3 = a1 + 1; v7 = operator new(v6); v8 = a1; *v5 = v7; v9 = *(void (__cdecl **)(int, void *, int, int *, signed int))(v3 + 4); v11 = 1; v9(v3, v7, v8, &v11, 1); *((_BYTE *)*v5 + a1) = 0; } else { *a2 = 0; } return 1; } //----- (0092C2E0) -------------------------------------------------------- char __cdecl sub_92C2E0(signed int a1, _DWORD *a2, size_t *a3) { signed int v3; // esi void (__cdecl *v4)(signed int, size_t *, signed int, int *, signed int); // ecx size_t *v5; // edi void *v6; // eax size_t v7; // ST08_4 void *v8; // ST04_4 int (__cdecl *v9)(signed int, void *, size_t, signed int *, signed int); // eax int v11; // [esp+8h] [ebp-4h] v3 = a1; v4 = *(void (__cdecl **)(signed int, size_t *, signed int, int *, signed int))(a1 + 4); v5 = a3; v11 = 4; v4(a1, a3, 4, &v11, 1); if ( *v5 ) { v6 = operator new(*v5); *a2 = v6; v7 = *v5; v8 = v6; v9 = *(int (__cdecl **)(signed int, void *, size_t, signed int *, signed int))(v3 + 4); a1 = 1; if ( v9(v3, v8, v7, &a1, 1) != *v5 ) return 0; } else { *a2 = 0; } return 1; } //----- (0092C350) -------------------------------------------------------- signed int sub_92C350() { signed int result; // eax result = 1; dword_BA6F44 = 0; dword_BA6F48 = 1; dword_BA6F4C = 2; dword_BA6F50 = 3; dword_BA6F54 = 4; dword_BA6F58 = 5; dword_BA6F5C = 6; dword_BA6F60 = 7; dword_BA6F64 = 8; dword_BA6F68 = 9; dword_BA6F6C = 10; dword_BA6F70 = 11; dword_BA6F74 = 12; dword_BA6F78 = 13; dword_BA6F34 = 50462976; unk_BA6F38 = 117835012; unk_BA6F3C = 185207048; word_BA6F40 = 3340; byte_BA6F80 = 1; return result; } // BA6F34: using guessed type int dword_BA6F34; // BA6F40: using guessed type __int16 word_BA6F40; // BA6F48: using guessed type int dword_BA6F48; // BA6F4C: using guessed type int dword_BA6F4C; // BA6F50: using guessed type int dword_BA6F50; // BA6F54: using guessed type int dword_BA6F54; // BA6F58: using guessed type int dword_BA6F58; // BA6F5C: using guessed type int dword_BA6F5C; // BA6F60: using guessed type int dword_BA6F60; // BA6F64: using guessed type int dword_BA6F64; // BA6F68: using guessed type int dword_BA6F68; // BA6F6C: using guessed type int dword_BA6F6C; // BA6F70: using guessed type int dword_BA6F70; // BA6F74: using guessed type int dword_BA6F74; // BA6F78: using guessed type int dword_BA6F78; // BA6F80: using guessed type char byte_BA6F80; //----- (0092C410) -------------------------------------------------------- signed int sub_92C410() { signed int result; // eax result = 1; dword_BA6F10[0] = 0; dword_BA6F14 = 1; dword_BA6F18 = 2; dword_BA6F1C = 3; dword_BA6F20 = 4; dword_BA6F24 = 5; dword_BA6F28 = 6; dword_BA6F2C = 7; dword_BA6F30 = 8; dword_BA6EFC = 0x1000000; dword_BA6F00 = 50332160; dword_BA6F04 = 83887104; dword_BA6F08 = 117442048; word_BA6F0C = 2048; byte_BA6F81 = 1; return result; } // BA6EFC: using guessed type int dword_BA6EFC; // BA6F00: using guessed type int dword_BA6F00; // BA6F04: using guessed type int dword_BA6F04; // BA6F08: using guessed type int dword_BA6F08; // BA6F0C: using guessed type __int16 word_BA6F0C; // BA6F10: using guessed type int dword_BA6F10[]; // BA6F14: using guessed type int dword_BA6F14; // BA6F18: using guessed type int dword_BA6F18; // BA6F1C: using guessed type int dword_BA6F1C; // BA6F20: using guessed type int dword_BA6F20; // BA6F24: using guessed type int dword_BA6F24; // BA6F28: using guessed type int dword_BA6F28; // BA6F2C: using guessed type int dword_BA6F2C; // BA6F30: using guessed type int dword_BA6F30; // BA6F81: using guessed type char byte_BA6F81; //----- (0092C4B0) -------------------------------------------------------- float *__usercall sub_92C4B0@(float *result@, float *a2@) { *a2 = *result; a2[1] = result[1]; a2[2] = result[2]; a2[3] = result[3]; a2[4] = result[4]; a2[5] = result[5]; a2[6] = result[6]; a2[7] = result[7]; a2[8] = result[8]; a2[9] = result[9]; a2[10] = result[10]; a2[11] = result[11]; a2[12] = result[12]; a2[13] = result[13]; a2[14] = result[14]; a2[15] = result[15]; return result; } //----- (0092C510) -------------------------------------------------------- signed int __stdcall sub_92C510(int a1, int a2, int a3) { int *v3; // eax signed int result; // eax v3 = sub_932FF0(a2); if ( v3 ) result = (*(unsigned __int8 (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 40))(a2, v3, 0) != 0 ? 0 : -2147483568; else result = 1; return result; } //----- (0092C550) -------------------------------------------------------- char __cdecl sub_92C550(char *a1, int a2) { unsigned int v2; // esi const char **v3; // edi v2 = 0; if ( !dword_AC593C ) return 0; v3 = (const char **)&unk_AC5CA0; while ( _stricmp(a1, v3[1]) ) { ++v2; v3 += 2; if ( v2 >= dword_AC593C ) return 0; } *(_DWORD *)a2 = *v3; return 1; } // AC593C: using guessed type int dword_AC593C; //----- (0092C5A0) -------------------------------------------------------- signed int __cdecl sub_92C5A0(int a1, _DWORD *a2, _DWORD *a3) { signed int result; // eax *a2 = 1; *a3 = 4; switch ( a1 ) { case 1: case 22: *a3 = 1; result = 4; break; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 14: case 15: case 18: case 19: case 20: case 21: result = 7; break; case 12: case 13: *a2 = 4; *a3 = 16; result = 9; break; case 16: case 17: *a2 = 3; *a3 = 12; result = 8; break; default: result = 0; break; } return result; } //----- (0092C640) -------------------------------------------------------- char __cdecl sub_92C640(int a1, signed int a2) { char result; // al bool v3; // zf bool v4; // sf unsigned __int8 v5; // of signed int v6; // ecx bool v7; // sf unsigned __int8 v8; // of result = 1; switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: case 14: case 15: if ( a2 < 1 ) goto LABEL_5; v5 = __OFSUB__(a2, 4); v3 = a2 == 4; v4 = a2 - 4 < 0; goto LABEL_4; case 8: case 9: case 12: case 13: v6 = a2; v8 = __OFSUB__(a2, 1); v7 = a2 - 1 < 0; goto LABEL_8; case 16: case 17: case 18: case 19: case 20: case 21: case 22: v6 = a2; v8 = __OFSUB__(a2, 5); v7 = a2 - 5 < 0; LABEL_8: if ( v7 ^ v8 ) goto LABEL_5; v5 = __OFSUB__(v6, 8); v3 = v6 == 8; v4 = v6 - 8 < 0; LABEL_4: if ( !((unsigned __int8)(v4 ^ v5) | v3) ) goto LABEL_5; break; default: LABEL_5: result = 0; break; } return result; } //----- (0092C6B0) -------------------------------------------------------- int __cdecl sub_92C6B0(unsigned __int16 a1) { if ( !byte_BA6F81 ) sub_92C410(); return dword_BA6F10[a1 >> 8]; } // BA6F10: using guessed type int dword_BA6F10[]; // BA6F81: using guessed type char byte_BA6F81; //----- (0092C6E0) -------------------------------------------------------- void *__thiscall sub_92C6E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiD3DSCM_Vertex::`vftable'; sub_933400(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A45C94: using guessed type void *NiD3DSCM_Vertex::`vftable'; //----- (0092C710) -------------------------------------------------------- char __cdecl sub_92C710(char *Src, char *a2, rsize_t SizeInBytes, int a4) { char *v5; // esi char *v6; // esi char *v7; // eax char *Context; // [esp+Ch] [ebp-10Ch] char Dst; // [esp+10h] [ebp-108h] if ( SizeInBytes + 1 < 0x104 ) return 0; strcpy_s(&Dst, 0x104u, Src); strcpy_s(a2, 0x104u, Src); v5 = strchr(&Dst, 95); if ( v5 && isdigit(v5[1]) && !v5[2] ) { v6 = strtok_s(&Dst, "_", &Context); v7 = strtok_s(0, "_", &Context); if ( v7 ) { *(_DWORD *)a4 = atoi(v7); strcpy_s(a2, SizeInBytes, v6); } } return 1; } //----- (0092C800) -------------------------------------------------------- char __cdecl sub_92C800(char *Src, int a2, int a3) { char result; // al unsigned int v4; // esi const char **v5; // edi char v6; // [esp+4h] [ebp-108h] result = sub_92C710(Src, &v6, 0x104u, a3); if ( result ) { v4 = 0; if ( dword_AC5938 ) { v5 = (const char **)&unk_AC5940; while ( _stricmp(&v6, v5[1]) ) { ++v4; v5 += 2; if ( v4 >= dword_AC5938 ) goto LABEL_6; } *(_DWORD *)a2 = *v5; result = 1; } else { LABEL_6: result = 0; } } return result; } // AC5938: using guessed type int dword_AC5938; //----- (0092C8B0) -------------------------------------------------------- int __cdecl sub_92C8B0(char *Src) { int result; // eax int v2; // [esp+0h] [ebp-8h] int v3; // [esp+4h] [ebp-4h] if ( !sub_92C800(Src, (int)&v2, (int)&v3) || !v2 ) return 0; switch ( v2 ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: result = (v3 != 3) + 8; break; case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 34: case 36: result = 9; break; case 33: case 35: result = 8; break; case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: result = 7; break; default: return 0; } return result; } //----- (0092C990) -------------------------------------------------------- signed int __stdcall sub_92C990(int a1) { int v1; // esi char *v2; // ST00_4 unsigned int v4; // ecx int v5; // edx int v6; // eax int v7; // ecx int v8; // [esp+4h] [ebp-4h] v1 = a1; v2 = *(char **)(a1 + 8); v8 = 4; if ( !sub_92C800(v2, (int)&a1, (int)&v8) ) return -2147483584; v4 = a1; v5 = v8; switch ( a1 ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: v6 = (v8 != 3) + 8; break; case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 34: case 36: v6 = 9; break; case 33: case 35: v6 = 8; break; case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: v6 = 7; break; default: v6 = 0; break; } *(_DWORD *)(v1 + 16) = *(_DWORD *)(v1 + 16) & 0xFFFFFF00 | *((unsigned __int8 *)&dword_BA6F34 + v6); if ( !v4 ) return -2147483584; if ( v4 < 0x45 ) { switch ( v4 ) { case 0x21u: case 0x23u: *(_DWORD *)(v1 + 28) = 3 * *(unsigned __int16 *)(v1 + 22); break; case 0x22u: case 0x24u: *(_DWORD *)(v1 + 28) = 4 * *(unsigned __int16 *)(v1 + 22); break; case 0x19u: case 0x1Au: case 0x1Bu: case 0x1Cu: case 0x1Du: case 0x1Eu: case 0x1Fu: case 0x20u: *(_DWORD *)(v1 + 28) = 4; break; default: *(_DWORD *)(v1 + 28) = v5; break; } } *(_DWORD *)(v1 + 12) = v4; v7 = v4 - 80; if ( !v7 ) { *(_DWORD *)(v1 + 44) = &unk_AC61F0; goto LABEL_31; } if ( v7 == 1 ) { *(_DWORD *)(v1 + 44) = &unk_AC6200; LABEL_31: *(_BYTE *)(v1 + 48) = 0; *(_DWORD *)(v1 + 40) = 16; *(_DWORD *)(v1 + 36) = 16; } return 0; } // BA6F34: using guessed type int dword_BA6F34; //----- (0092CB20) -------------------------------------------------------- signed int __stdcall sub_92CB20(int a1) { int v1; // ebx unsigned int v2; // kr00_4 char *v3; // esi char *v4; // eax int v5; // esi int v6; // eax int v8; // [esp+8h] [ebp-4h] v1 = a1; v2 = strlen(*(const char **)(a1 + 8)); v3 = (char *)operator new(v2 + 1); strcpy_s(v3, v2 + 1, *(const char **)(v1 + 8)); v4 = strstr(v3, "@@"); if ( !v4 ) return -2147483584; *v4 = 0; a1 = 0; if ( !sub_92C550(v3, (int)&v8) ) return -2147483584; operator delete(v3); v5 = v8; *(_DWORD *)(v1 + 16) = *(_DWORD *)(v1 + 16) & 0xFFFFFF00 | *((unsigned __int8 *)&dword_BA6F34 + sub_92C5A0(v8, &a1, &v8)); if ( !v5 ) return -2147483584; v6 = a1; *(_DWORD *)(v1 + 12) = v5; *(_DWORD *)(v1 + 28) = v6; return 0; } // BA6F34: using guessed type int dword_BA6F34; //----- (0092CBE0) -------------------------------------------------------- signed int __stdcall sub_92CBE0(int a1, int a2, int a3, int a4, char a5, char a6) { char v7; // al float v8; // [esp+0h] [ebp-40h] float v9; // [esp+4h] [ebp-3Ch] float v10; // [esp+8h] [ebp-38h] float v11; // [esp+Ch] [ebp-34h] float v12; // [esp+10h] [ebp-30h] float v13; // [esp+14h] [ebp-2Ch] float v14; // [esp+18h] [ebp-28h] float v15; // [esp+1Ch] [ebp-24h] float v16; // [esp+20h] [ebp-20h] float v17; // [esp+24h] [ebp-1Ch] float v18; // [esp+28h] [ebp-18h] float v19; // [esp+2Ch] [ebp-14h] float v20; // [esp+30h] [ebp-10h] float v21; // [esp+34h] [ebp-Ch] float v22; // [esp+38h] [ebp-8h] float v23; // [esp+3Ch] [ebp-4h] if ( a3 == 7 ) goto LABEL_18; if ( a3 != 9 ) { if ( a3 != 10 ) return 1; LABEL_18: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] * flt_BA70E0; flt_BA7134 = flt_BA70D4[0] * flt_BA70E0; flt_BA7138 = flt_BA70D8[0] * flt_BA70E0; flt_BA713C = flt_BA70E0 * flt_BA70DC[0]; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; case 7: case 10: flt_BA7130 = flt_BA70D0[0] * flt_BA70E0; flt_BA7134 = flt_BA70E4 * flt_BA70D4[0]; flt_BA7138 = flt_BA70E8 * flt_BA70D8[0]; flt_BA713C = flt_BA70EC * flt_BA70DC[0]; goto LABEL_20; case 9: D3DXVec4Transform(&flt_BA7130, flt_BA70D0, &unk_BA7090); LABEL_20: v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; default: return 1; } return 1; } switch ( a4 ) { case 3: case 4: v8 = flt_BA7050[0] * flt_BA70E0; v9 = flt_BA7054 * flt_BA70E0; v10 = flt_BA7058 * flt_BA70E0; v11 = flt_BA705C * flt_BA70E0; v12 = flt_BA7060 * flt_BA70E0; v13 = flt_BA7064 * flt_BA70E0; v14 = flt_BA7068 * flt_BA70E0; v15 = flt_BA706C * flt_BA70E0; v16 = flt_BA7070 * flt_BA70E0; v17 = flt_BA7074 * flt_BA70E0; v18 = flt_BA7078 * flt_BA70E0; v19 = flt_BA707C * flt_BA70E0; v20 = flt_BA7080 * flt_BA70E0; v21 = flt_BA7084 * flt_BA70E0; v22 = flt_BA7088 * flt_BA70E0; v23 = flt_BA70E0 * flt_BA708C; qmemcpy(&unk_BA70F0, &v8, 0x40u); if ( a5 ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &unk_BA70F0, 0); break; case 7: case 10: D3DXVec4Transform(&flt_BA7130, &flt_BA70E0, flt_BA7050); v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); break; case 9: D3DXMatrixMultiply(&unk_BA70F0, flt_BA7050, &unk_BA7090); if ( a5 ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &unk_BA70F0, 0); break; default: return 1; } return v7 != 0 ? 0 : -2147483568; } // 94480E: using guessed type int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // 94483E: using guessed type int __stdcall D3DXVec4Transform(_DWORD, _DWORD, _DWORD); // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0092CEE0) -------------------------------------------------------- int __stdcall sub_92CEE0(int a1, int a2, int a3, int a4, float a5, char a6) { char v7; // al float v8; // [esp+0h] [ebp-40h] float v9; // [esp+4h] [ebp-3Ch] float v10; // [esp+8h] [ebp-38h] float v11; // [esp+Ch] [ebp-34h] float v12; // [esp+10h] [ebp-30h] float v13; // [esp+14h] [ebp-2Ch] float v14; // [esp+18h] [ebp-28h] float v15; // [esp+1Ch] [ebp-24h] float v16; // [esp+20h] [ebp-20h] float v17; // [esp+24h] [ebp-1Ch] float v18; // [esp+28h] [ebp-18h] float v19; // [esp+2Ch] [ebp-14h] float v20; // [esp+30h] [ebp-10h] float v21; // [esp+34h] [ebp-Ch] float v22; // [esp+38h] [ebp-8h] float v23; // [esp+3Ch] [ebp-4h] float v24; // [esp+54h] [ebp+14h] float v25; // [esp+58h] [ebp+18h] if ( a3 == 7 ) goto LABEL_13; if ( a3 != 9 ) { if ( a3 != 10 ) return 1; LABEL_13: switch ( a4 ) { case 3: case 4: v25 = 1.0 / flt_BA70E0; flt_BA7130 = flt_BA70D0[0] * v25; flt_BA7134 = flt_BA70D4[0] * v25; flt_BA7138 = flt_BA70D8[0] * v25; flt_BA713C = v25 * flt_BA70DC[0]; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; case 7: case 10: flt_BA7130 = flt_BA70D0[0] / flt_BA70E0; flt_BA7134 = flt_BA70D4[0] / flt_BA70E4; flt_BA7138 = flt_BA70D8[0] / flt_BA70E8; flt_BA713C = flt_BA70DC[0] / flt_BA70EC; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; default: return 1; } return 1; } if ( a4 < 3 || a4 > 4 ) return 1; v24 = 1.0 / flt_BA70E0; v8 = flt_BA7050[0] * v24; v9 = flt_BA7054 * v24; v10 = flt_BA7058 * v24; v11 = flt_BA705C * v24; v12 = flt_BA7060 * v24; v13 = flt_BA7064 * v24; v14 = flt_BA7068 * v24; v15 = flt_BA706C * v24; v16 = flt_BA7070 * v24; v17 = flt_BA7074 * v24; v18 = flt_BA7078 * v24; v19 = flt_BA707C * v24; v20 = flt_BA7080 * v24; v21 = flt_BA7084 * v24; v22 = flt_BA7088 * v24; v23 = v24 * flt_BA708C; qmemcpy(&unk_BA70F0, &v8, 0x40u); if ( LOBYTE(a5) ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &unk_BA70F0, 0); return v7 != 0 ? 0 : -2147483568; } // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0092D130) -------------------------------------------------------- signed int __stdcall sub_92D130(int a1, int a2, int a3, int a4, int a5, int a6) { float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v9; // ST18_4 char v10; // al signed int result; // eax double v12; // st7 switch ( a3 ) { case 3: case 4: switch ( a4 ) { case 3: case 4: v6 = flt_BA70D0[0] + flt_BA70E0; flt_BA7130 = v6; v7 = flt_BA70D4[0] + flt_BA70E4; flt_BA7134 = v7; v8 = flt_BA70D8[0] + flt_BA70E8; flt_BA7138 = v8; v9 = flt_BA70DC[0] + flt_BA70EC; flt_BA713C = v9; goto LABEL_4; case 7: case 10: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70E4 + flt_BA70D0[0]; flt_BA7138 = flt_BA70E8 + flt_BA70D0[0]; v12 = flt_BA70D0[0] + flt_BA70EC; goto LABEL_7; default: goto LABEL_11; } goto LABEL_11; case 7: case 10: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70D4[0] + flt_BA70E0; flt_BA7138 = flt_BA70D8[0] + flt_BA70E0; v12 = flt_BA70E0 + flt_BA70DC[0]; LABEL_7: flt_BA713C = v12; v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); break; case 7: case 10: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70D4[0] + flt_BA70E4; flt_BA7138 = flt_BA70D8[0] + flt_BA70E8; flt_BA713C = flt_BA70DC[0] + flt_BA70EC; LABEL_4: v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); break; default: goto LABEL_11; } result = v10 != 0 ? 0 : -2147483568; break; default: LABEL_11: result = 1; break; } return result; } // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0092D340) -------------------------------------------------------- signed int __stdcall sub_92D340(int a1, int a2, int a3, int a4, int a5, int a6) { float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v9; // ST18_4 char v10; // al signed int result; // eax double v12; // st7 switch ( a3 ) { case 3: case 4: switch ( a4 ) { case 3: case 4: v6 = flt_BA70D0[0] - flt_BA70E0; flt_BA7130 = v6; v7 = flt_BA70D4[0] - flt_BA70E4; flt_BA7134 = v7; v8 = flt_BA70D8[0] - flt_BA70E8; flt_BA7138 = v8; v9 = flt_BA70DC[0] - flt_BA70EC; flt_BA713C = v9; goto LABEL_4; case 7: case 10: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D0[0] - flt_BA70E4; flt_BA7138 = flt_BA70D0[0] - flt_BA70E8; v12 = flt_BA70D0[0] - flt_BA70EC; goto LABEL_7; default: goto LABEL_11; } goto LABEL_11; case 7: case 10: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D4[0] - flt_BA70E0; flt_BA7138 = flt_BA70D8[0] - flt_BA70E0; v12 = flt_BA70DC[0] - flt_BA70E0; LABEL_7: flt_BA713C = v12; v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); break; case 7: case 10: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D4[0] - flt_BA70E4; flt_BA7138 = flt_BA70D8[0] - flt_BA70E8; flt_BA713C = flt_BA70DC[0] - flt_BA70EC; LABEL_4: v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7130, 0); break; default: goto LABEL_11; } result = v10 != 0 ? 0 : -2147483568; break; default: LABEL_11: result = 1; break; } return result; } // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0092D550) -------------------------------------------------------- int __cdecl sub_92D550(float *a1, float *a2, char a3, char a4) { int result; // eax result = (int)a2; if ( a2 ) { *a1 = *a2; a1[4] = a2[1]; a1[8] = 0.0; a1[12] = a2[2]; a1[1] = a2[3]; a1[5] = a2[4]; a1[9] = 0.0; a1[13] = a2[5]; a1[14] = 0.0; a1[10] = 0.0; a1[6] = 0.0; a1[2] = 0.0; a1[15] = 0.0; a1[11] = 0.0; a1[7] = 0.0; a1[3] = 0.0; if ( a3 ) result = D3DXMatrixInverse(a1, 0, a1); if ( a4 ) result = D3DXMatrixTranspose(a1, a1); } else { result = (int)a1; a1[14] = 0.0; a1[13] = 0.0; a1[12] = 0.0; a1[11] = 0.0; a1[9] = 0.0; a1[8] = 0.0; a1[7] = 0.0; a1[6] = 0.0; a1[4] = 0.0; a1[3] = 0.0; a1[2] = 0.0; a1[1] = 0.0; a1[15] = 1.0; a1[10] = 1.0; a1[5] = 1.0; *a1 = 1.0; } return result; } // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); //----- (0092D600) -------------------------------------------------------- BOOL __thiscall sub_92D600(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D630) -------------------------------------------------------- BOOL __thiscall sub_92D630(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 3; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D660) -------------------------------------------------------- BOOL __thiscall sub_92D660(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 4; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D690) -------------------------------------------------------- BOOL __thiscall sub_92D690(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 5; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D6C0) -------------------------------------------------------- BOOL __thiscall sub_92D6C0(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 6; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D6F0) -------------------------------------------------------- BOOL __thiscall sub_92D6F0(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 7; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D720) -------------------------------------------------------- BOOL __thiscall sub_92D720(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 8; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D750) -------------------------------------------------------- BOOL __thiscall sub_92D750(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 9; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D780) -------------------------------------------------------- BOOL __thiscall sub_92D780(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 10; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D7B0) -------------------------------------------------------- BOOL __thiscall sub_92D7B0(_DWORD *this) { int v1; // esi v1 = this[4]; if ( !byte_BA6F80 ) sub_92C350(); return *(&dword_BA6F44 + (unsigned __int8)v1) == 11; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092D7E0) -------------------------------------------------------- void __userpurge sub_92D7E0(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13) { int v13; // esi float *v14; // edx char v15; // al const void *v16; // esi char v17; // al int v18; // eax bool v19; // zf int v20; // eax int v21; // eax int *v22; // edx int v23; // eax int v24; // ecx int v25; // eax int v26; // edi bool v27; // zf int v28; // ecx int v29; // eax int v30; // edi int v31; // ecx int v32; // eax int v33; // edi int v34; // ecx int v35; // eax int v36; // edi int v37; // ecx int v38; // eax int v39; // edi int v40; // ecx int v41; // eax int v42; // edi int v43; // ecx int v44; // eax int v45; // edi _DWORD *v46; // ecx int v47; // eax int v48; // edi int *v49; // ecx int *v50; // ecx int *v51; // ecx int *v52; // ecx int v53; // ecx int v54; // eax double v55; // st7 _DWORD *i; // esi int v57; // eax char v58; // [esp+Ch] [ebp-1A4h] float v59; // [esp+14h] [ebp-19Ch] float v60; // [esp+18h] [ebp-198h] float v61; // [esp+1Ch] [ebp-194h] float v62; // [esp+20h] [ebp-190h] int v63; // [esp+24h] [ebp-18Ch] int v64; // [esp+28h] [ebp-188h] int v65; // [esp+2Ch] [ebp-184h] int v66; // [esp+30h] [ebp-180h] int v67; // [esp+34h] [ebp-17Ch] int v68; // [esp+38h] [ebp-178h] int v69; // [esp+3Ch] [ebp-174h] char v70; // [esp+42h] [ebp-16Eh] char v71; // [esp+43h] [ebp-16Dh] int v72; // [esp+44h] [ebp-16Ch] int v73; // [esp+84h] [ebp-12Ch] int v74; // [esp+C4h] [ebp-ECh] int v75; // [esp+104h] [ebp-ACh] int v76; // [esp+144h] [ebp-6Ch] int v77; // [esp+190h] [ebp-20h] int v78; // [esp+194h] [ebp-1Ch] int v79; // [esp+198h] [ebp-18h] float v80; // [esp+19Ch] [ebp-14h] unsigned int v81; // [esp+1A0h] [ebp-10h] int v82; // [esp+1A4h] [ebp-Ch] int v83; // [esp+1A8h] [ebp-8h] int retaddr; // [esp+1B0h] [ebp+0h] v82 = a2; v83 = retaddr; v81 = (unsigned int)&v82 ^ dword_ABA360; v68 = a7; v69 = a4; v13 = *(_DWORD *)(a4 + 12); v63 = a1; v14 = 0; v65 = a3; v64 = a5; v67 = 0; v66 = v13; switch ( v13 ) { case 1: case 2: case 13: case 14: v15 = 0; v71 = 0; if ( v13 == 2 || v13 == 14 ) v15 = 1; if ( v13 == 13 || v13 == 14 ) v71 = 1; v16 = (const void *)(*(_DWORD *)(v63 + 52) + 2000); goto LABEL_9; case 3: case 4: case 15: case 16: v15 = 0; v71 = 0; if ( v13 == 4 || v13 == 16 ) v15 = 1; if ( v13 == 15 || v13 == 16 ) v71 = 1; v16 = (const void *)(*(_DWORD *)(v63 + 52) + 1936); goto LABEL_9; case 5: case 6: case 17: case 18: v15 = 0; v71 = 0; if ( v13 == 6 || v13 == 18 ) v15 = 1; if ( v13 == 17 || v13 == 18 ) v71 = 1; v16 = (const void *)(*(_DWORD *)(v63 + 52) + 1872); LABEL_9: qmemcpy(&v76, v16, 0x40u); if ( v15 ) { D3DXMatrixInverse(&v76, 0, &v76); LOBYTE(v14) = 0; } if ( v71 != (_BYTE)v14 ) D3DXMatrixTranspose(&v76, &v76); v17 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v76, 0); goto LABEL_190; case 7: case 8: case 19: case 20: v71 = 0; v70 = 0; if ( v13 == 8 || v13 == 20 ) v71 = 1; if ( v13 == 19 || v13 == 20 ) v70 = 1; v18 = *(_DWORD *)(v63 + 52); qmemcpy(&v73, (const void *)(v18 + 1872), 0x40u); qmemcpy(&v74, (const void *)(v18 + 1936), 0x40u); D3DXMatrixMultiply(&v76, &v73, &v74); if ( v71 ) D3DXMatrixInverse(&v76, 0, &v76); v19 = v70 == 0; goto LABEL_37; case 9: case 10: case 21: case 22: v70 = 0; v71 = 0; if ( v13 == 10 || v13 == 22 ) v70 = 1; if ( v13 == 21 || v13 == 22 ) v71 = 1; v20 = *(_DWORD *)(v63 + 52); qmemcpy(&v74, (const void *)(v20 + 1936), 0x40u); qmemcpy(&v73, (const void *)(v20 + 2000), 0x40u); D3DXMatrixMultiply(&v76, &v74, &v73); if ( v70 ) D3DXMatrixInverse(&v76, 0, &v76); goto LABEL_48; case 11: case 12: case 23: case 24: v70 = 0; v71 = 0; if ( v13 == 12 || v13 == 24 ) v70 = 1; if ( v13 == 23 || v13 == 24 ) v71 = 1; v21 = *(_DWORD *)(v63 + 52); qmemcpy(&v74, (const void *)(v21 + 1872), 0x40u); qmemcpy(&v73, (const void *)(v21 + 1936), 0x40u); qmemcpy(&v72, (const void *)(v21 + 2000), 0x40u); D3DXMatrixMultiply(&v75, &v74, &v73); D3DXMatrixMultiply(&v76, &v75, &v72); if ( !v70 ) goto LABEL_48; D3DXMatrixInverse(&v76, 0, &v76); v19 = v71 == 0; goto LABEL_37; case 25: case 26: case 27: case 28: if ( !a6 ) break; qmemcpy(&v76, *(const void **)(a6 + 40), 0x40u); v70 = 0; v71 = 0; if ( v66 == 26 || v66 == 28 ) v70 = 1; if ( v66 == 27 || v66 == 28 ) v71 = 1; qmemcpy(&v75, (const void *)(*(_DWORD *)(v63 + 52) + 1936), 0x40u); v22 = &v75; goto LABEL_65; case 29: case 30: case 31: case 32: if ( !a6 ) break; qmemcpy(&v76, *(const void **)(a6 + 40), 0x40u); v70 = 0; v71 = 0; if ( v66 == 30 || v66 == 32 ) v70 = 1; if ( v66 == 31 || v66 == 32 ) v71 = 1; v23 = *(_DWORD *)(v63 + 52); qmemcpy(&v75, (const void *)(v23 + 1936), 0x40u); qmemcpy(&v72, (const void *)(v23 + 2000), 0x40u); D3DXMatrixMultiply(&v76, &v76, &v75); v22 = &v72; LABEL_65: D3DXMatrixMultiply(&v76, &v76, v22); if ( v70 ) { D3DXMatrixInverse(&v76, 0, &v76); v19 = v71 == 0; } else { LABEL_48: v19 = v71 == 0; } LABEL_37: if ( !v19 ) D3DXMatrixTranspose(&v76, &v76); v17 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v76, 0); goto LABEL_190; case 33: case 34: case 35: case 36: if ( !a6 ) break; v17 = (*(int (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v65 + 44))( v69, *(_DWORD *)(a6 + 32), *(unsigned __int16 *)(v68 + 32), *(_DWORD *)(a6 + 36), *(_DWORD *)(v68 + 4)); goto LABEL_190; case 37: case 38: case 39: case 40: v24 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v24 ) goto LABEL_89; v25 = **(_DWORD **)(v24 + 40); if ( !v25 ) goto LABEL_89; v26 = *(_DWORD *)(v25 + 20); if ( !v26 ) goto LABEL_89; if ( *(_BYTE *)(v26 + 28) ) sub_878E10(*(float **)(v25 + 20)); v14 = (float *)(v26 + 32); if ( v13 == 38 || v13 == 40 ) LOBYTE(v68) = 1; if ( v13 == 39 ) goto LABEL_88; v27 = v13 == 40; goto LABEL_87; case 41: case 42: case 43: case 44: v28 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v28 ) goto LABEL_89; v29 = *(_DWORD *)(*(_DWORD *)(v28 + 40) + 20); if ( !v29 ) goto LABEL_89; v30 = *(_DWORD *)(v29 + 20); if ( !v30 ) goto LABEL_89; if ( *(_BYTE *)(v30 + 28) ) sub_878E10(*(float **)(v29 + 20)); v14 = (float *)(v30 + 32); if ( v13 == 42 || v13 == 44 ) LOBYTE(v68) = 1; if ( v13 == 43 ) goto LABEL_88; v27 = v13 == 44; goto LABEL_87; case 45: case 46: case 47: case 48: v31 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v31 ) goto LABEL_89; v32 = *(_DWORD *)(*(_DWORD *)(v31 + 40) + 8); if ( !v32 ) goto LABEL_89; v33 = *(_DWORD *)(v32 + 20); if ( !v33 ) goto LABEL_89; if ( *(_BYTE *)(v33 + 28) ) sub_878E10(*(float **)(v32 + 20)); v14 = (float *)(v33 + 32); if ( v13 == 46 || v13 == 48 ) LOBYTE(v68) = 1; if ( v13 == 47 ) goto LABEL_88; v27 = v13 == 48; goto LABEL_87; case 49: case 50: case 51: case 52: v34 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v34 ) goto LABEL_89; v35 = *(_DWORD *)(*(_DWORD *)(v34 + 40) + 12); if ( !v35 ) goto LABEL_89; v36 = *(_DWORD *)(v35 + 20); if ( !v36 ) goto LABEL_89; if ( *(_BYTE *)(v36 + 28) ) sub_878E10(*(float **)(v35 + 20)); v14 = (float *)(v36 + 32); if ( v13 == 50 || v13 == 52 ) LOBYTE(v68) = 1; if ( v13 == 51 ) goto LABEL_88; v27 = v13 == 52; goto LABEL_87; case 53: case 54: case 55: case 56: v37 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v37 ) goto LABEL_89; v38 = *(_DWORD *)(*(_DWORD *)(v37 + 40) + 16); if ( !v38 ) goto LABEL_89; v39 = *(_DWORD *)(v38 + 20); if ( !v39 ) goto LABEL_89; if ( *(_BYTE *)(v39 + 28) ) sub_878E10(*(float **)(v38 + 20)); v14 = (float *)(v39 + 32); if ( v13 == 54 || v13 == 56 ) LOBYTE(v68) = 1; if ( v13 == 55 ) goto LABEL_88; v27 = v13 == 56; goto LABEL_87; case 57: case 58: case 59: case 60: v40 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( !v40 ) goto LABEL_89; v41 = *(_DWORD *)(*(_DWORD *)(v40 + 40) + 20); if ( !v41 ) goto LABEL_89; v42 = *(_DWORD *)(v41 + 20); if ( !v42 ) goto LABEL_89; if ( *(_BYTE *)(v42 + 28) ) sub_878E10(*(float **)(v41 + 20)); v14 = (float *)(v42 + 32); if ( v13 == 58 || v13 == 60 ) LOBYTE(v68) = 1; if ( v13 == 59 ) goto LABEL_88; v27 = v13 == 60; goto LABEL_87; case 61: case 62: case 63: case 64: v43 = *(_DWORD *)(a9 + 40); LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( v43 ) { v44 = *(_DWORD *)(*(_DWORD *)(v43 + 40) + 4 * *(_DWORD *)(v69 + 20) + 24); if ( v44 ) { v45 = *(_DWORD *)(v44 + 20); if ( v45 ) { if ( *(_BYTE *)(v45 + 28) ) sub_878E10(*(float **)(v44 + 20)); v14 = (float *)(v45 + 32); if ( v13 == 62 || v13 == 64 ) LOBYTE(v68) = 1; if ( v13 == 63 ) goto LABEL_88; v27 = v13 == 64; LABEL_87: if ( v27 ) LABEL_88: LOBYTE(v66) = 1; } } } LABEL_89: sub_92D550((float *)&v75, v14, v68, v66); v17 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v75, 0); goto LABEL_190; case 65: case 66: case 67: case 68: v46 = *(_DWORD **)(a9 + 40); *(float *)&v63 = 0.0; LOBYTE(v68) = 0; LOBYTE(v66) = 0; if ( v46 ) { v47 = sub_814DE0(v46, *(_DWORD *)(v69 + 20)); if ( v47 ) { v48 = *(_DWORD *)(v47 + 20); if ( v48 ) { if ( *(_BYTE *)(v48 + 28) ) sub_878E10(*(float **)(v47 + 20)); v63 = v48 + 32; if ( v13 == 66 || v13 == 68 ) LOBYTE(v68) = 1; if ( v13 == 67 || v13 == 68 ) LOBYTE(v66) = 1; } } } sub_92D550((float *)&v75, (float *)v63, v68, v66); v17 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v75, 0); goto LABEL_190; case 73: v49 = *(int **)(a9 + 20); if ( !v49 ) break; v59 = *((float *)v49 + 11); v60 = *((float *)v49 + 12); v61 = *((float *)v49 + 13); v62 = *((float *)v49 + 21); goto LABEL_189; case 74: v50 = *(int **)(a9 + 20); if ( !v50 ) break; v59 = *((float *)v50 + 8); v60 = *((float *)v50 + 9); v61 = *((float *)v50 + 10); v62 = *((float *)v50 + 21); goto LABEL_189; case 75: v51 = *(int **)(a9 + 20); if ( !v51 ) break; v59 = *((float *)v51 + 14); v60 = *((float *)v51 + 15); v61 = *((float *)v51 + 16); v62 = *((float *)v51 + 21); goto LABEL_189; case 76: v52 = *(int **)(a9 + 20); if ( !v52 ) break; v59 = *((float *)v52 + 17); v60 = *((float *)v52 + 18); v61 = *((float *)v52 + 19); v62 = *((float *)v52 + 21); goto LABEL_189; case 77: v53 = *(_DWORD *)(a9 + 20); if ( !v53 ) break; v59 = *(float *)(v53 + 80); v60 = *(float *)(v53 + 80); v61 = *(float *)(v53 + 80); v62 = *(float *)(v53 + 80); goto LABEL_189; case 80: case 81: v17 = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)v65 + 40))(v69, 0, 0); goto LABEL_190; case 82: case 83: case 84: case 85: case 86: v54 = sub_85AA60((_DWORD *)v64, off_AC6210); if ( !v54 ) v67 = -2147483632; v63 = *(int *)(v54 + 12); switch ( v13 ) { case 82: v55 = *(float *)&v63; v77 = v63; v78 = v63; v79 = v63; goto LABEL_181; case 83: *(float *)&v64 = sin(*(float *)&v63); v55 = *(float *)&v64; v77 = v64; v78 = v64; v79 = v64; goto LABEL_181; case 84: *(float *)&v64 = cos(*(float *)&v63); v55 = *(float *)&v64; v77 = v64; v78 = v64; v79 = v64; goto LABEL_181; case 85: *(float *)&v64 = tan(*(float *)&v63); v55 = *(float *)&v64; v77 = v64; v78 = v64; v79 = v64; goto LABEL_181; case 86: v77 = v63; *(float *)&v64 = sin(*(float *)&v63); v78 = v64; *(float *)&v64 = cos(*(float *)&v63); v79 = v64; *(float *)&v64 = tan(*(float *)&v63); v55 = *(float *)&v64; LABEL_181: v80 = v55; v17 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v77, 0); goto LABEL_190; default: goto LABEL_192; } case 87: v59 = 0.0; v60 = 0.0; v61 = 0.0; v62 = 1.0; if ( a10 ) { for ( i = *(_DWORD **)(a10 + 12); i; v14 = 0 ) { if ( i ) { v14 = (float *)i[1]; i = (_DWORD *)*i; } v57 = sub_402BA0((int)dword_BA474C, (int)v14); if ( v57 ) { sub_8C74F0((_DWORD *)(v57 + 228), (int)&v78, *(float *)(v57 + 224)); v59 = v59 + *(float *)&v78; v60 = v60 + *(float *)&v79; v61 = v61 + v80; } } } LABEL_189: v17 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)v65 + 40))(v69, &v59, 0); LABEL_190: if ( !v17 ) v67 = -2147483568; break; default: break; } LABEL_192: sub_7D50D1(v58); } // 92D7E0: could not find valid save-restore pair for ebp // 94480E: using guessed type int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; //----- (0092E450) -------------------------------------------------------- signed int __stdcall sub_92E450(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13) { int v14; // edi _DWORD *v15; // eax int v16; // eax int *v17; // edi int v18; // ebx int v19; // ebx if ( !a3 ) return 1; if ( a13 && (v14 = *(_DWORD *)(a13 + 20), v15 = (_DWORD *)(*(_DWORD *)(a13 + 28) + 8 * v14), *v15 == (*(_DWORD *)(a2 + 24) | (a11 << 16))) && (v16 = v15[1], *(_DWORD *)(a13 + 20) = v14 + 1, v16) || (v16 = sub_85AA60(a3, *(const char **)(a2 + 8))) != 0 ) { v17 = sub_932D50((_DWORD *)a2, v16); if ( !v17 ) return -2147483584; } else { v17 = sub_932FF0(a2); if ( !v17 ) return -2147483632; } v18 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v18) == 9 ) { if ( !(*(unsigned __int8 (__stdcall **)(int, int *, signed int))(*(_DWORD *)a1 + 40))(a2, v17, 4) ) return -2147483568; return 0; } v19 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v19) != 6 && !(unsigned __int8)sub_92D6F0((_DWORD *)a2) && !(unsigned __int8)sub_92D690((_DWORD *)a2) && !(unsigned __int8)sub_92D660((_DWORD *)a2) && !(unsigned __int8)sub_92D780((_DWORD *)a2) && !(unsigned __int8)sub_92D630((_DWORD *)a2) && !(unsigned __int8)sub_92D600((_DWORD *)a2) ) { if ( (unsigned __int8)sub_92D720((_DWORD *)a2) ) { if ( !(*(unsigned __int8 (__stdcall **)(int, int *, signed int))(*(_DWORD *)a1 + 40))(a2, v17, 3) ) return -2147483568; } else { sub_92D7B0((_DWORD *)a2); } return 0; } if ( (*(unsigned __int8 (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 40))(a2, v17, 0) ) return 0; return -2147483568; } // BA6F80: using guessed type char byte_BA6F80; //----- (0092E5F0) -------------------------------------------------------- signed int __stdcall sub_92E5F0(int a1, int a2, int a3) { signed int v3; // ebx int v4; // edi char v5; // al int v6; // edi int v7; // edi double v8; // st7 int v9; // edi float *v10; // eax float *v11; // eax float *v12; // eax float *v13; // eax v3 = 0; v4 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v4) == 1 ) { dword_BA6FE0 = **(unsigned __int8 **)(a2 + 44); v5 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &dword_BA6FE0, 0); goto LABEL_27; } v6 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) == 3 ) { dword_BA6FE4 = **(_DWORD **)(a2 + 44); dword_BA6FE8 = dword_BA6FE4; dword_BA6FEC = dword_BA6FE4; dword_BA6FF0 = dword_BA6FE4; v5 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &dword_BA6FE4, 0); goto LABEL_27; } v7 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) == 4 ) { flt_BA6FF4 = **(float **)(a2 + 44); v8 = flt_BA6FF4; flt_BA6FF8 = flt_BA6FF4; flt_BA6FFC = flt_BA6FF4; LABEL_26: flt_BA7000 = v8; v5 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA6FF4, 0); goto LABEL_27; } v9 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 5 ) { v10 = *(float **)(a2 + 44); flt_BA6FF4 = *v10; flt_BA6FF8 = v10[1]; flt_BA6FFC = flt_BA6FF4; v8 = flt_BA6FF8; goto LABEL_26; } if ( (unsigned __int8)sub_92D6C0((_DWORD *)a2) ) { v11 = *(float **)(a2 + 44); flt_BA6FF4 = *v11; flt_BA6FF8 = v11[1]; flt_BA6FFC = v11[2]; v8 = 1.0; goto LABEL_26; } if ( (unsigned __int8)sub_92D6F0((_DWORD *)a2) || (unsigned __int8)sub_92D780((_DWORD *)a2) ) { v13 = *(float **)(a2 + 44); flt_BA6FF4 = *v13; flt_BA6FF8 = v13[1]; flt_BA6FFC = v13[2]; v8 = v13[3]; goto LABEL_26; } if ( (unsigned __int8)sub_92D720((_DWORD *)a2) ) { v12 = *(float **)(a2 + 44); flt_BA7008 = *v12; flt_BA700C = v12[1]; flt_BA7010 = v12[2]; flt_BA7014 = 0.0; flt_BA7018 = v12[3]; flt_BA701C = v12[4]; flt_BA7020 = v12[5]; flt_BA7024 = 0.0; flt_BA7028 = v12[6]; flt_BA702C = v12[7]; flt_BA7030 = v12[8]; flt_BA7034 = 0.0; v5 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 40))(a2, &flt_BA7008, 0); } else { if ( !(unsigned __int8)sub_92D750((_DWORD *)a2) ) return v3; v5 = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a1 + 40))(a2, *(_DWORD *)(a2 + 44), 0); } LABEL_27: if ( !v5 ) v3 = -2147483568; return v3; } // BA6F80: using guessed type char byte_BA6F80; // BA6FE0: using guessed type int dword_BA6FE0; // BA6FE4: using guessed type int dword_BA6FE4; // BA6FE8: using guessed type int dword_BA6FE8; // BA6FEC: using guessed type int dword_BA6FEC; // BA6FF0: using guessed type int dword_BA6FF0; // BA6FF4: using guessed type float flt_BA6FF4; // BA6FF8: using guessed type float flt_BA6FF8; // BA6FFC: using guessed type float flt_BA6FFC; // BA7000: using guessed type float flt_BA7000; // BA7008: using guessed type float flt_BA7008; // BA700C: using guessed type float flt_BA700C; // BA7010: using guessed type float flt_BA7010; // BA7014: using guessed type float flt_BA7014; // BA7018: using guessed type float flt_BA7018; // BA701C: using guessed type float flt_BA701C; // BA7020: using guessed type float flt_BA7020; // BA7024: using guessed type float flt_BA7024; // BA7028: using guessed type float flt_BA7028; // BA702C: using guessed type float flt_BA702C; // BA7030: using guessed type float flt_BA7030; // BA7034: using guessed type float flt_BA7034; //----- (0092E830) -------------------------------------------------------- bool __cdecl sub_92E830(_BYTE *a1, int a2) { bool result; // al if ( !a1[176] ) return 0; switch ( a2 ) { case 1: result = (*(int (**)(void))(*(_DWORD *)a1 + 4))() != (_DWORD)dword_BA474C; break; case 2: result = (*(int (**)(void))(*(_DWORD *)a1 + 4))() == (_DWORD)dword_BA4B54; break; case 3: result = (*(int (**)(void))(*(_DWORD *)a1 + 4))() == (_DWORD)dword_BA473C; break; case 4: result = (*(int (**)(void))(*(_DWORD *)a1 + 4))() == (_DWORD)dword_BA4B2C; break; default: return 0; } return result; } //----- (0092E8B0) -------------------------------------------------------- char __cdecl sub_92E8B0(void *a1, size_t a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { int v12; // edx double v13; // st7 char result; // al float v15; // edx float v16; // eax float v17; // ecx float v18; // edx float v19; // eax float v20; // ecx float v21; // edx float v22; // eax float v23; // ecx int *v24; // eax int *v25; // eax float v26; // eax double v27; // st7 double v28; // st7 float v29; // ecx double v30; // st7 double v31; // st7 float v32; // ecx float v33; // edx float v34; // eax float *v35; // eax void *v36; // esi double v37; // st7 double v38; // st7 float *v39; // eax float *v40; // ST08_4 float v41; // ecx float v42; // edx float v43; // edx float v44; // eax float v45; // ecx double v46; // st7 double v47; // st6 double v48; // st5 int v49; // esi float *v50; // [esp+0h] [ebp-220h] char v51; // [esp+10h] [ebp-210h] char v52; // [esp+1Ch] [ebp-204h] char v53; // [esp+28h] [ebp-1F8h] char v54; // [esp+34h] [ebp-1ECh] int v55; // [esp+40h] [ebp-1E0h] float v56; // [esp+4Ch] [ebp-1D4h] float v57; // [esp+5Ch] [ebp-1C4h] float v58; // [esp+6Ch] [ebp-1B4h] float v59; // [esp+7Ch] [ebp-1A4h] float v60; // [esp+80h] [ebp-1A0h] float v61; // [esp+84h] [ebp-19Ch] float v62; // [esp+88h] [ebp-198h] float v63; // [esp+8Ch] [ebp-194h] float v64; // [esp+90h] [ebp-190h] float v65; // [esp+94h] [ebp-18Ch] float v66; // [esp+98h] [ebp-188h] int v67; // [esp+9Ch] [ebp-184h] float v68; // [esp+A0h] [ebp-180h] float v69; // [esp+A4h] [ebp-17Ch] float v70; // [esp+A8h] [ebp-178h] float v71; // [esp+ACh] [ebp-174h] float v72; // [esp+B0h] [ebp-170h] float v73; // [esp+B4h] [ebp-16Ch] float v74; // [esp+B8h] [ebp-168h] float v75; // [esp+BCh] [ebp-164h] float v76; // [esp+C0h] [ebp-160h] float v77; // [esp+C4h] [ebp-15Ch] char v78; // [esp+C8h] [ebp-158h] char v79; // [esp+FCh] [ebp-124h] char v80; // [esp+120h] [ebp-100h] char v81; // [esp+144h] [ebp-DCh] char v82; // [esp+168h] [ebp-B8h] float v83; // [esp+18Ch] [ebp-94h] float v84; // [esp+190h] [ebp-90h] float v85; // [esp+194h] [ebp-8Ch] float v86; // [esp+19Ch] [ebp-84h] char v87; // [esp+1A8h] [ebp-78h] float v88; // [esp+1B0h] [ebp-70h] float v89; // [esp+1C4h] [ebp-5Ch] float v90; // [esp+1D8h] [ebp-48h] int v91; // [esp+1DCh] [ebp-44h] float v92; // [esp+1E8h] [ebp-38h] float v93; // [esp+1F8h] [ebp-28h] float v94; // [esp+208h] [ebp-18h] float v95; // [esp+218h] [ebp-8h] v70 = *(float *)&a4; v74 = *(float *)&a11; memset(&v86, 0, 0x40u); v13 = 1.0; v90 = 1.0; v89 = 1.0; v88 = 1.0; v86 = 1.0; switch ( a3 ) { case 1: if ( *(float *)&a4 == 0.0 ) goto LABEL_90; *(float *)a1 = *(float *)(a4 + 224); result = 1; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 0.0; return result; case 2: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; *(float *)a1 = *(float *)(a4 + 228); result = 1; *((float *)a1 + 1) = *(float *)(a4 + 232); *((float *)a1 + 2) = *(float *)(a4 + 236); *((float *)a1 + 3) = 1.0; return result; case 3: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; *(float *)a1 = *(float *)(a4 + 240); result = 1; *((float *)a1 + 1) = *(float *)(a4 + 244); *((float *)a1 + 2) = *(float *)(a4 + 248); *((float *)a1 + 3) = 1.0; return result; case 4: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; *(float *)a1 = *(float *)(a4 + 252); result = 1; *((float *)a1 + 1) = *(float *)(a4 + 256); *((float *)a1 + 2) = *(float *)(a4 + 260); *((float *)a1 + 3) = 1.0; return result; case 5: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; v15 = *(float *)(a4 + 228); v16 = *(float *)(a4 + 232); v74 = *(float *)(a4 + 224); v17 = *(float *)(a4 + 236); v76 = v16; v75 = v74 * v15; result = 1; v76 = v74 * v76; v77 = v74 * v17; *(float *)a1 = v75; *((float *)a1 + 1) = v76; *((float *)a1 + 2) = v77; *((float *)a1 + 3) = 1.0; return result; case 6: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; v18 = *(float *)(a4 + 240); v19 = *(float *)(a4 + 244); v74 = *(float *)(a4 + 224); v20 = *(float *)(a4 + 248); v76 = v19; v75 = v74 * v18; result = 1; v76 = v74 * v76; v77 = v74 * v20; *(float *)a1 = v75; *((float *)a1 + 1) = v76; *((float *)a1 + 2) = v77; *((float *)a1 + 3) = 1.0; return result; case 7: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; v21 = *(float *)(a4 + 252); v22 = *(float *)(a4 + 256); v74 = *(float *)(a4 + 224); v23 = *(float *)(a4 + 260); v76 = v22; v75 = v74 * v21; result = 1; v76 = v74 * v76; v77 = v74 * v23; *(float *)a1 = v75; *((float *)a1 + 1) = v76; *((float *)a1 + 2) = v77; *((float *)a1 + 3) = 1.0; return result; case 8: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; if ( sub_6A8E80((int)dword_BA473C, a4) ) { result = 1; v75 = *(float *)(a4 + 268) * -1048576.0; v76 = *(float *)(a4 + 272) * -1048576.0; v77 = -1048576.0 * *(float *)(a4 + 276); *(float *)a1 = v75; *((float *)a1 + 1) = v76; *((float *)a1 + 2) = v77; } else { *(float *)a1 = *(float *)(a4 + 140); result = 1; *((float *)a1 + 1) = *(float *)(a4 + 144); *((float *)a1 + 2) = *(float *)(a4 + 148); } *((float *)a1 + 3) = 1.0; return result; case 9: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; sub_87C3F0((float *)LODWORD(v74), (int)&v82, (float *)&v82); if ( sub_6A8E80((int)dword_BA473C, a4) ) { *(float *)&v67 = *(float *)(a4 + 268) * -1048576.0; v68 = *(float *)(a4 + 272) * -1048576.0; v69 = -1048576.0 * *(float *)(a4 + 276); v24 = (int *)sub_896770((float *)&v82, (float *)&v51, (float *)&v67); goto LABEL_25; } v25 = (int *)sub_896770((float *)&v82, (float *)&v52, (float *)(a4 + 140)); goto LABEL_27; case 10: if ( *(float *)&a4 == 0.0 ) goto LABEL_38; if ( sub_6A8E80((int)dword_BA4B54, a4) ) { v71 = *(float *)a12 - *(float *)(a4 + 140); v27 = *(float *)(a12 + 4); v75 = v71; v72 = v27 - *(float *)(a4 + 144); v28 = *(float *)(a12 + 8); v76 = v72; v73 = v28 - *(float *)(a4 + 148); v77 = v73; sub_4430B0(&v75); goto LABEL_29; } if ( sub_6A8E80((int)dword_BA473C, a4) ) { v29 = *(float *)(a4 + 268); v26 = *(float *)(a4 + 276); v76 = *(float *)(a4 + 272); } else { v29 = *(float *)(a4 + 280); v26 = *(float *)(a4 + 288); v76 = *(float *)(a4 + 284); } v75 = v29; goto LABEL_28; case 11: if ( *(float *)&a4 == 0.0 ) { LABEL_38: *(float *)a1 = 1.0; *((float *)a1 + 1) = 0.0; result = 0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 1.0; return result; } if ( sub_6A8E80((int)dword_BA4B54, a4) ) { v71 = *(float *)a12 - *(float *)(a4 + 140); v30 = *(float *)(a12 + 4); v75 = v71; v72 = v30 - *(float *)(a4 + 144); v31 = *(float *)(a12 + 8); v76 = v72; v73 = v31 - *(float *)(a4 + 148); v77 = v73; sub_4430B0(&v75); } else { if ( sub_6A8E80((int)dword_BA473C, a4) ) { v32 = *(float *)(a4 + 268); v33 = *(float *)(a4 + 272); v34 = *(float *)(a4 + 276); } else { v32 = *(float *)(a4 + 280); v33 = *(float *)(a4 + 284); v34 = *(float *)(a4 + 288); } v77 = v34; v76 = v33; v75 = v32; } v35 = sub_85DCC0((float *)LODWORD(v74), (float *)&v81); v25 = (int *)sub_85DA90(v35, (float *)&v53, &v75); LABEL_27: v75 = *(float *)v25; v76 = *((float *)v25 + 1); v26 = *((float *)v25 + 2); LABEL_28: v77 = v26; goto LABEL_29; case 12: if ( *(float *)&a4 == 0.0 ) goto LABEL_52; v94 = 0.0; v93 = 0.0; v92 = 0.0; v95 = 1.0; if ( sub_6A8E80((int)dword_BA473C, a4) ) { *(float *)&v67 = *(float *)(a4 + 268) * -1048576.0; v68 = *(float *)(a4 + 272) * -1048576.0; v69 = -1048576.0 * *(float *)(a4 + 276); sub_921CB0((int)&v91, a4 + 104, (int)&v67, *(float *)(a4 + 152)); sub_92C4B0((float *)&v91, (float *)a1); } else { sub_923A50((int)&v91, a4 + 104); sub_92C4B0((float *)&v91, (float *)a1); } return 1; case 13: if ( *(float *)&a4 == 0.0 ) goto LABEL_52; sub_87C3F0((float *)LODWORD(v74), v12, &v92); v58 = 0.0; v57 = 0.0; v56 = 0.0; v59 = 1.0; v36 = (void *)(a4 + 104); if ( sub_6A8E80((int)dword_BA473C, a4) ) { v37 = *(float *)(LODWORD(v70) + 268) * -1048576.0; qmemcpy(&v82, v36, 0x34u); v71 = v37; v72 = *(float *)(LODWORD(v70) + 272) * -1048576.0; v38 = -1048576.0 * *(float *)(LODWORD(v70) + 276); v83 = v71; v73 = v38; v84 = v72; v85 = v73; v50 = sub_85BDC0(&v92, (float *)&v78, (float *)&v82); } else { v50 = sub_85BDC0(&v92, (float *)&v87, (float *)v36); } sub_923A50((int)&v55, (int)v50); sub_92C4B0((float *)&v55, (float *)a1); return 1; case 14: if ( *(float *)&a4 == 0.0 ) { *(float *)a1 = -1.0; *((float *)a1 + 1) = -1.0; result = 0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 0.0; return result; } if ( sub_6A8E80((int)dword_BA4B2C, a4) ) { *(float *)a1 = 1.0; v70 = *(float *)(a4 + 292) * flt_BA45B4 / 180.0; v70 = cos(v70); *((float *)a1 + 1) = v70; *((float *)a1 + 2) = *(float *)(a4 + 296); v13 = 0.0; } else { *(float *)a1 = -1.0; *((float *)a1 + 1) = -1.0; v13 = 0.0; *((float *)a1 + 2) = 0.0; } goto LABEL_30; case 15: if ( *(float *)&a4 == 0.0 ) goto LABEL_67; if ( sub_402B70((int)dword_BA4B54, a4) ) { *(float *)a1 = *(float *)(a4 + 268); *((float *)a1 + 1) = *(float *)(a4 + 272); *((float *)a1 + 2) = *(float *)(a4 + 276); v13 = 0.0; } else { *(float *)a1 = 1.0; v13 = 0.0; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; } goto LABEL_30; case 16: if ( *(float *)&a4 == 0.0 ) goto LABEL_52; v58 = 0.0; v57 = 0.0; v56 = 0.0; v59 = 1.0; sub_921CB0((int)&v55, a4 + 272, (int)&dword_BA45C0, 1.0); goto LABEL_70; case 17: if ( *(float *)&a4 == 0.0 ) { LABEL_52: sub_92C4B0(&v86, (float *)a1); result = 0; } else { v58 = 0.0; v57 = 0.0; v56 = 0.0; v59 = 1.0; v39 = sub_85DCC0((float *)LODWORD(v74), (float *)&v80); v40 = sub_85D940(v39, (float *)&v79, (float *)(a4 + 272)); sub_921CB0((int)&v55, (int)v40, (int)&dword_BA45C0, 1.0); LABEL_70: sub_92C4B0((float *)&v55, (float *)a1); result = 1; } return result; case 18: if ( *(float *)&a4 == 0.0 ) goto LABEL_6; *(float *)a1 = *(float *)(a4 + 308); *((float *)a1 + 1) = *(float *)(a4 + 312); *((float *)a1 + 2) = *(float *)(a4 + 316); goto LABEL_30; case 19: if ( *(float *)&a4 == 0.0 ) { LABEL_6: *(float *)a1 = 0.0; *((float *)a1 + 1) = 0.0; result = 0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 1.0; return result; } sub_87C3F0((float *)LODWORD(v74), (int)&v92, &v92); v41 = *(float *)(a4 + 312); v42 = *(float *)(a4 + 316); v75 = *(float *)(a4 + 308); v76 = v41; v77 = v42; v24 = (int *)sub_896770(&v92, (float *)&v54, &v75); LABEL_25: v75 = *(float *)v24; v76 = *((float *)v24 + 1); v77 = *((float *)v24 + 2); LABEL_29: *(float *)a1 = v75; *((float *)a1 + 1) = v76; *((float *)a1 + 2) = v77; v13 = 1.0; goto LABEL_30; case 20: if ( *(float *)&a4 == 0.0 ) goto LABEL_67; if ( !*(_BYTE *)(a4 + 340) ) goto LABEL_80; *(float *)a1 = *(float *)(a4 + 360); *((float *)a1 + 1) = *(float *)(a4 + 364); *((float *)a1 + 2) = *(float *)(a4 + 368); v13 = *(float *)(a4 + 372); goto LABEL_30; case 21: if ( *(float *)&a4 == 0.0 ) { LABEL_67: *(float *)a1 = 1.0; *((float *)a1 + 1) = 0.0; result = 0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 0.0; return result; } if ( *(_BYTE *)(a4 + 340) ) { sub_87C3F0((float *)LODWORD(v74), v12, &v92); v43 = *(float *)(a4 + 364); v44 = *(float *)(a4 + 368); v63 = *(float *)(a4 + 360); v45 = *(float *)(a4 + 372); v64 = v43; v65 = v44; v66 = v45; sub_85DA90(&v92, &v71, &v63); v60 = v66 * v63; v61 = v64 * v66; v62 = v66 * v65; sub_896770(&v92, &v75, &v60); v46 = v71; *(float *)a1 = v71; v47 = v72; *((float *)a1 + 1) = v72; v48 = v73; *((float *)a1 + 2) = v73; v13 = v46 * v75 + v47 * v76 + v48 * v77; } else { LABEL_80: v13 = 0.0; *(float *)a1 = 0.0; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; } goto LABEL_30; case 22: if ( *(float *)&a4 == 0.0 ) { LABEL_90: *(float *)a1 = 0.0; *((float *)a1 + 1) = 0.0; result = 0; *((float *)a1 + 2) = 0.0; *((float *)a1 + 3) = 0.0; } else { v49 = *(_DWORD *)(a4 + 336); v74 = 0.0; switch ( v49 ) { case 0: case 1: v13 = 0.0; v74 = 2.0; *(float *)a1 = 2.0; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; break; case 2: case 3: v13 = 0.0; v74 = 3.0; *(float *)a1 = 3.0; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; break; case 4: v13 = 0.0; v74 = 1.0; *(float *)a1 = 1.0; *((float *)a1 + 1) = *(float *)&v13; *((float *)a1 + 2) = *(float *)&v13; break; default: v13 = 0.0; *(float *)a1 = v74; *((float *)a1 + 1) = 0.0; *((float *)a1 + 2) = 0.0; break; } LABEL_30: *((float *)a1 + 3) = v13; result = 1; } return result; default: memset(a1, 0, a2); return 0; } } // BA45B4: using guessed type float flt_BA45B4; // BA45C0: using guessed type int dword_BA45C0; //----- (0092F5F0) -------------------------------------------------------- void __userpurge sub_92F5F0(float a1@, int a2@, float *a3, int a4, float a5, int a6, int a7, int a8, int a9, int a10) { int v10; // esi char v11; // dl const void *v12; // esi float *v13; // eax int *v14; // esi bool v15; // zf bool v16; // zf int v17; // eax int v18; // eax int v19; // eax float *v20; // eax float *v21; // eax int v22; // edx int v23; // eax float *v24; // ecx int v25; // eax int v26; // eax bool v27; // zf int v28; // eax int v29; // eax int v30; // eax int v31; // eax int v32; // eax int v33; // eax int v34; // eax int v35; // eax int v36; // eax int v37; // eax int v38; // eax int v39; // eax int v40; // eax int v41; // eax int v42; // eax int v43; // eax float *v44; // edx int v45; // eax int v46; // eax _DWORD *v47; // eax int v48; // eax int v49; // eax float *v50; // eax int v51; // edi float *v52; // eax int v53; // edi float *v54; // eax int v55; // edi float *v56; // eax int v57; // edi int v58; // eax int v59; // edi int v60; // eax double v61; // st7 int v62; // edi long double v63; // st7 int v64; // edi int v65; // eax int v66; // edi _DWORD *v67; // esi int v68; // eax int v69; // eax char v70; // [esp-4h] [ebp-214h] char v71; // [esp+0h] [ebp-210h] char v72; // [esp+Ch] [ebp-204h] float v73; // [esp+10h] [ebp-200h] float v74; // [esp+14h] [ebp-1FCh] float v75; // [esp+18h] [ebp-1F8h] int v76; // [esp+1Ch] [ebp-1F4h] float v77; // [esp+20h] [ebp-1F0h] int v78; // [esp+24h] [ebp-1ECh] float v79; // [esp+28h] [ebp-1E8h] float *v80; // [esp+2Ch] [ebp-1E4h] char v81; // [esp+32h] [ebp-1DEh] char v82; // [esp+33h] [ebp-1DDh] int v83; // [esp+34h] [ebp-1DCh] int v84; // [esp+74h] [ebp-19Ch] int v85; // [esp+B4h] [ebp-15Ch] int v86; // [esp+F4h] [ebp-11Ch] int v87; // [esp+134h] [ebp-DCh] int v88; // [esp+174h] [ebp-9Ch] int v89; // [esp+1B4h] [ebp-5Ch] unsigned int v90; // [esp+200h] [ebp-10h] int v91; // [esp+204h] [ebp-Ch] int v92; // [esp+208h] [ebp-8h] int retaddr; // [esp+210h] [ebp+0h] v91 = a2; v92 = retaddr; v90 = (unsigned int)&v91 ^ dword_ABA360; v79 = a1; v10 = *(_DWORD *)(a4 + 12); v76 = a8; v77 = a5; v80 = a3; v78 = v10; switch ( v10 ) { case 1: case 2: case 13: case 14: v11 = 0; v82 = 0; if ( v10 == 2 || v10 == 14 ) v11 = 1; if ( v10 == 13 || v10 == 14 ) v82 = 1; v12 = (const void *)(*(_DWORD *)(LODWORD(v79) + 52) + 2000); goto LABEL_9; case 3: case 4: case 15: case 16: v11 = 0; v82 = 0; if ( v10 == 4 || v10 == 16 ) v11 = 1; if ( v10 == 15 || v10 == 16 ) v82 = 1; v12 = (const void *)(*(_DWORD *)(LODWORD(v79) + 52) + 1936); LABEL_9: qmemcpy(&v89, v12, 0x40u); v13 = &flt_BA7050[16 * (_DWORD)v80]; v14 = &v89; goto LABEL_10; case 5: case 6: case 17: case 18: v11 = 0; v82 = 0; if ( v10 == 6 || v10 == 18 ) v11 = 1; if ( v10 == 17 || v10 == 18 ) v82 = 1; v13 = &flt_BA7050[16 * (_DWORD)a3]; v14 = (int *)(*(_DWORD *)(LODWORD(v79) + 52) + 1872); LABEL_10: v15 = v11 == 0; goto LABEL_11; case 7: case 8: case 19: case 20: v82 = 0; v81 = 0; if ( v10 == 8 || v10 == 20 ) v82 = 1; if ( v10 == 19 || v10 == 20 ) v81 = 1; v17 = *(_DWORD *)(LODWORD(v79) + 52); qmemcpy(&v88, (const void *)(v17 + 1872), 0x40u); qmemcpy(&v89, (const void *)(v17 + 1936), 0x40u); D3DXMatrixMultiply(&v83, &v88, &v89); v80 = &flt_BA7050[16 * (_DWORD)v80]; v13 = v80; qmemcpy(v80, &v83, 0x40u); if ( v82 ) { D3DXMatrixInverse(v80, 0, v80); v13 = v80; } v16 = v81 == 0; goto LABEL_14; case 9: case 10: case 21: case 22: v81 = 0; v82 = 0; if ( v10 == 10 || v10 == 22 ) v81 = 1; if ( v10 == 21 || v10 == 22 ) v82 = 1; v18 = *(_DWORD *)(LODWORD(v79) + 52); qmemcpy(&v89, (const void *)(v18 + 1936), 0x40u); qmemcpy(&v88, (const void *)(v18 + 2000), 0x40u); D3DXMatrixMultiply(&v84, &v89, &v88); v15 = v81 == 0; v13 = &flt_BA7050[16 * (_DWORD)v80]; v14 = &v84; goto LABEL_11; case 11: case 12: case 23: case 24: v81 = 0; v82 = 0; if ( v10 == 12 || v10 == 24 ) v81 = 1; if ( v10 == 23 || v10 == 24 ) v82 = 1; v19 = *(_DWORD *)(LODWORD(v79) + 52); qmemcpy(&v89, (const void *)(v19 + 1872), 0x40u); qmemcpy(&v88, (const void *)(v19 + 1936), 0x40u); qmemcpy(&v86, (const void *)(v19 + 2000), 0x40u); D3DXMatrixMultiply(&v87, &v89, &v88); D3DXMatrixMultiply(&v85, &v87, &v86); v15 = v81 == 0; v13 = &flt_BA7050[16 * (_DWORD)v80]; v14 = &v85; LABEL_11: v80 = v13; qmemcpy(v13, v14, 0x40u); if ( !v15 ) { D3DXMatrixInverse(v13, 0, v13); v13 = v80; } v16 = v82 == 0; LABEL_14: if ( !v16 ) D3DXMatrixTranspose(v13, v13); break; case 25: case 26: case 27: case 28: if ( a6 ) { qmemcpy(&v87, *(const void **)(a6 + 40), 0x40u); v20 = &flt_BA7050[16 * (_DWORD)v80]; qmemcpy(v20, &v87, 0x40u); v80 = &flt_BA7050[16 * (_DWORD)v80]; v81 = 0; v82 = 0; if ( v78 == 26 || v78 == 28 ) v81 = 1; if ( v78 == 27 || v78 == 28 ) v82 = 1; qmemcpy(&v86, (const void *)(*(_DWORD *)(LODWORD(v79) + 52) + 1936), 0x40u); D3DXMatrixMultiply(v20, v20, &v86); if ( v81 ) D3DXMatrixInverse(v80, 0, v80); if ( v82 ) D3DXMatrixTranspose(v80, v80); } break; case 29: case 30: case 31: case 32: if ( a6 ) { qmemcpy(&v87, *(const void **)(a6 + 40), 0x40u); v21 = &flt_BA7050[16 * (_DWORD)v80]; qmemcpy(v21, &v87, 0x40u); v80 = &flt_BA7050[16 * (_DWORD)v80]; v81 = 0; v82 = 0; if ( v78 == 30 || v78 == 32 ) v81 = 1; if ( v78 == 31 || v78 == 32 ) v82 = 1; v22 = *(_DWORD *)(LODWORD(v79) + 52); qmemcpy(&v86, (const void *)(v22 + 1936), 0x40u); qmemcpy(&v88, (const void *)(v22 + 2000), 0x40u); D3DXMatrixMultiply(v21, v21, &v86); D3DXMatrixMultiply(v80, v80, &v88); if ( v81 ) D3DXMatrixInverse(v80, 0, v80); if ( v82 ) D3DXMatrixTranspose(v80, v80); } break; case 37: case 38: case 39: case 40: v23 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( !v23 ) goto LABEL_88; v25 = **(_DWORD **)(v23 + 40); if ( !v25 ) goto LABEL_88; v26 = *(_DWORD *)(v25 + 20); v78 = v26; if ( !v26 ) goto LABEL_88; if ( *(_BYTE *)(v26 + 28) ) { sub_878E10((float *)v26); v26 = v78; } v24 = (float *)(v26 + 32); if ( v10 == 38 || v10 == 40 ) LOBYTE(v80) = 1; if ( v10 == 39 ) goto LABEL_87; v27 = v10 == 40; goto LABEL_86; case 41: case 42: case 43: case 44: v28 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v28 ) { v29 = *(_DWORD *)(*(_DWORD *)(v28 + 40) + 20); if ( v29 ) { v30 = *(_DWORD *)(v29 + 20); v78 = v30; if ( v30 ) { if ( *(_BYTE *)(v30 + 28) ) { sub_878E10((float *)v30); v30 = v78; } v24 = (float *)(v30 + 32); if ( v10 == 42 || v10 == 44 ) LOBYTE(v80) = 1; if ( v10 == 43 || v10 == 44 ) LOBYTE(v79) = 1; } } } v71 = LOBYTE(v79); v70 = (char)v80; goto LABEL_89; case 45: case 46: case 47: case 48: v31 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( !v31 ) goto LABEL_88; v32 = *(_DWORD *)(*(_DWORD *)(v31 + 40) + 8); if ( !v32 ) goto LABEL_88; v33 = *(_DWORD *)(v32 + 20); v78 = v33; if ( !v33 ) goto LABEL_88; if ( *(_BYTE *)(v33 + 28) ) { sub_878E10((float *)v33); v33 = v78; } v24 = (float *)(v33 + 32); if ( v10 == 46 || v10 == 48 ) LOBYTE(v80) = 1; if ( v10 == 47 ) goto LABEL_87; v27 = v10 == 48; goto LABEL_86; case 49: case 50: case 51: case 52: v34 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v34 ) { v35 = *(_DWORD *)(*(_DWORD *)(v34 + 40) + 12); if ( v35 ) { v36 = *(_DWORD *)(v35 + 20); v78 = v36; if ( v36 ) { if ( *(_BYTE *)(v36 + 28) ) { sub_878E10((float *)v36); v36 = v78; } v24 = (float *)(v36 + 32); if ( v10 == 50 || v10 == 52 ) LOBYTE(v80) = 1; if ( v10 == 51 || v10 == 52 ) LOBYTE(v79) = 1; } } } v71 = LOBYTE(v79); v70 = (char)v80; goto LABEL_89; case 53: case 54: case 55: case 56: v37 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v37 ) { v38 = *(_DWORD *)(*(_DWORD *)(v37 + 40) + 16); if ( v38 ) { v39 = *(_DWORD *)(v38 + 20); v78 = v39; if ( v39 ) { if ( *(_BYTE *)(v39 + 28) ) { sub_878E10((float *)v39); v39 = v78; } v24 = (float *)(v39 + 32); if ( v10 == 54 || v10 == 56 ) LOBYTE(v80) = 1; if ( v10 == 55 ) goto LABEL_87; v27 = v10 == 56; LABEL_86: if ( v27 ) LABEL_87: LOBYTE(v79) = 1; } } } goto LABEL_88; case 57: case 58: case 59: case 60: v40 = *(_DWORD *)(a7 + 40); v24 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v40 ) { v41 = *(_DWORD *)(*(_DWORD *)(v40 + 40) + 20); if ( v41 ) { v42 = *(_DWORD *)(v41 + 20); v78 = v42; if ( v42 ) { if ( *(_BYTE *)(v42 + 28) ) { sub_878E10((float *)v42); v42 = v78; } v24 = (float *)(v42 + 32); if ( v10 == 58 || v10 == 60 ) LOBYTE(v80) = 1; if ( v10 == 59 || v10 == 60 ) LOBYTE(v79) = 1; } } } v71 = LOBYTE(v79); v70 = (char)v80; goto LABEL_89; case 61: case 62: case 63: case 64: v43 = *(_DWORD *)(a7 + 40); v44 = 0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v43 ) { v45 = *(_DWORD *)(*(_DWORD *)(v43 + 40) + 4 * *(_DWORD *)(a4 + 20) + 24); if ( v45 ) { v46 = *(_DWORD *)(v45 + 20); v78 = v46; if ( v46 ) { if ( *(_BYTE *)(v46 + 28) ) { sub_878E10((float *)v46); v46 = v78; } v44 = (float *)(v46 + 32); if ( v10 == 62 || v10 == 64 ) LOBYTE(v80) = 1; if ( v10 == 63 || v10 == 64 ) LOBYTE(v79) = 1; } } } sub_92D550(&flt_BA7050[16 * (_DWORD)a3], v44, (char)v80, SLOBYTE(v79)); break; case 65: case 66: case 67: case 68: v47 = *(_DWORD **)(a7 + 40); v77 = 0.0; LOBYTE(v80) = 0; LOBYTE(v79) = 0; if ( v47 ) { v48 = sub_814DE0(v47, *(_DWORD *)(a4 + 20)); if ( v48 ) { v49 = *(_DWORD *)(v48 + 20); v78 = v49; if ( v49 ) { if ( *(_BYTE *)(v49 + 28) ) { sub_878E10((float *)v49); v49 = v78; } LODWORD(v77) = v49 + 32; if ( v10 == 66 || v10 == 68 ) LOBYTE(v80) = 1; if ( v10 == 67 || v10 == 68 ) LOBYTE(v79) = 1; } } } v24 = (float *)LODWORD(v77); LABEL_88: v71 = LOBYTE(v79); v70 = (char)v80; LABEL_89: sub_92D550(&flt_BA7050[16 * (_DWORD)a3], v24, v70, v71); break; case 73: v50 = *(float **)(a7 + 20); if ( v50 ) { v51 = 4 * (_DWORD)a3; flt_BA70D0[v51] = v50[11]; flt_BA70D4[v51] = v50[12]; flt_BA70D8[v51] = v50[13]; flt_BA70DC[v51] = v50[21]; } break; case 74: v52 = *(float **)(a7 + 20); if ( v52 ) { v53 = 4 * (_DWORD)a3; flt_BA70D0[v53] = v52[8]; flt_BA70D4[v53] = v52[9]; flt_BA70D8[v53] = v52[10]; flt_BA70DC[v53] = v52[21]; } break; case 75: v54 = *(float **)(a7 + 20); if ( v54 ) { v55 = 4 * (_DWORD)a3; flt_BA70D0[v55] = v54[14]; flt_BA70D4[v55] = v54[15]; flt_BA70D8[v55] = v54[16]; flt_BA70DC[v55] = v54[21]; } break; case 76: v56 = *(float **)(a7 + 20); if ( v56 ) { v57 = 4 * (_DWORD)a3; flt_BA70D0[v57] = v56[17]; flt_BA70D4[v57] = v56[18]; flt_BA70D8[v57] = v56[19]; flt_BA70DC[v57] = v56[21]; } break; case 77: v58 = *(_DWORD *)(a7 + 20); if ( v58 ) { v59 = 4 * (_DWORD)a3; flt_BA70D0[v59] = *(float *)(v58 + 80); flt_BA70D4[v59] = *(float *)(v58 + 80); flt_BA70D8[v59] = *(float *)(v58 + 80); flt_BA70DC[v59] = *(float *)(v58 + 80); } break; case 82: case 83: case 84: case 85: case 86: v60 = sub_85AA60((_DWORD *)LODWORD(v77), off_AC6210); if ( v60 ) { v79 = *(float *)(v60 + 12); switch ( v10 ) { case 82: v61 = v79; goto LABEL_184; case 83: v77 = sin(v79); v61 = v77; goto LABEL_184; case 84: v77 = cos(v79); v61 = v77; goto LABEL_184; case 85: v77 = tan(v79); v61 = v77; LABEL_184: v62 = 4 * (_DWORD)a3; flt_BA70D0[v62] = v61; flt_BA70D4[v62] = v61; flt_BA70D8[v62] = v61; flt_BA70DC[v62] = v61; break; case 86: v63 = v79; v64 = 4 * (_DWORD)a3; flt_BA70D0[v64] = v79; v77 = sin(v63); flt_BA70D4[v64] = v77; v77 = cos(v79); flt_BA70D8[v64] = v77; v77 = tan(v79); flt_BA70DC[v64] = v77; break; default: goto LABEL_194; } } break; case 87: v65 = v76; v66 = 4 * (_DWORD)a3; flt_BA70D0[v66] = 0.0; flt_BA70D4[v66] = 0.0; flt_BA70D8[v66] = 0.0; flt_BA70DC[v66] = 1.0; if ( v65 ) { v67 = *(_DWORD **)(v65 + 12); while ( v67 ) { v68 = v67[1]; v67 = (_DWORD *)*v67; v69 = sub_402BA0((int)dword_BA474C, v68); if ( v69 ) { sub_8C74F0((_DWORD *)(v69 + 228), (int)&v73, *(float *)(v69 + 224)); flt_BA70D0[v66] = v73 + flt_BA70D0[v66]; flt_BA70D4[v66] = v74 + flt_BA70D4[v66]; flt_BA70D8[v66] = flt_BA70D8[v66] + v75; } } } break; default: break; } LABEL_194: sub_7D50D1(v72); } // 92F5F0: could not find valid save-restore pair for ebp // 94480E: using guessed type int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA7050: using guessed type float flt_BA7050[]; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; //----- (00930310) -------------------------------------------------------- signed int __stdcall sub_930310(int a1, _DWORD *a2, int a3) { float *v3; // esi int v4; // ebx signed int result; // eax int v6; // ebx int v7; // ebx int v8; // eax int v9; // ebx int v10; // eax int v11; // eax int v12; // eax int v13; // eax int v14; // eax v3 = (float *)a2[11]; v4 = a2[4]; if ( !byte_BA6F80 ) sub_92C350(); result = 3; if ( *(&dword_BA6F44 + (unsigned __int8)v4) == 3 ) { flt_BA70D0[4 * a1] = *v3; } else { v6 = a2[4]; if ( !byte_BA6F80 ) sub_92C350(); result = 4; if ( *(&dword_BA6F44 + (unsigned __int8)v6) == 4 ) { flt_BA70D0[4 * a1] = *v3; } else { v7 = a2[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) == 5 ) { v8 = 4 * a1; flt_BA70D0[v8] = *v3; flt_BA70D4[v8] = v3[1]; result = 5; } else { v9 = a2[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 6 ) { v10 = 4 * a1; flt_BA70D0[v10] = *v3; flt_BA70D4[v10] = v3[1]; flt_BA70D8[v10] = v3[2]; result = 6; } else if ( (unsigned __int8)sub_92D6F0(a2) ) { v11 = 4 * a1; flt_BA70D0[v11] = *v3; flt_BA70D4[v11] = v3[1]; flt_BA70D8[v11] = v3[2]; flt_BA70DC[v11] = v3[3]; result = 7; } else if ( (unsigned __int8)sub_92D720(a2) ) { v12 = a1 << 6; *(float *)((char *)flt_BA7050 + v12) = *v3; *(float *)((char *)&flt_BA7054 + v12) = v3[1]; *(float *)((char *)&flt_BA7058 + v12) = v3[2]; *(float *)((char *)&flt_BA705C + v12) = 0.0; *(float *)((char *)&flt_BA7060 + v12) = v3[3]; *(float *)((char *)&flt_BA7064 + v12) = v3[4]; *(float *)((char *)&flt_BA7068 + v12) = v3[5]; *(float *)((char *)&flt_BA706C + v12) = 0.0; *(float *)((char *)&flt_BA7070 + v12) = v3[6]; *(float *)((char *)&flt_BA7074 + v12) = v3[7]; *(float *)((char *)&flt_BA7078 + v12) = v3[8]; *(float *)((char *)&flt_BA707C + v12) = 0.0; *(float *)((char *)&flt_BA7080 + v12) = 0.0; *(float *)((char *)&flt_BA7084 + v12) = 0.0; *(float *)((char *)&flt_BA7088 + v12) = 0.0; *(float *)((char *)&flt_BA708C + v12) = 1.0; result = 8; } else if ( (unsigned __int8)sub_92D750(a2) ) { v13 = a1 << 6; *(float *)((char *)flt_BA7050 + v13) = *v3; *(float *)((char *)&flt_BA7054 + v13) = v3[1]; *(float *)((char *)&flt_BA7058 + v13) = v3[2]; *(float *)((char *)&flt_BA705C + v13) = v3[3]; *(float *)((char *)&flt_BA7060 + v13) = v3[4]; *(float *)((char *)&flt_BA7064 + v13) = v3[5]; *(float *)((char *)&flt_BA7068 + v13) = v3[6]; *(float *)((char *)&flt_BA706C + v13) = v3[7]; *(float *)((char *)&flt_BA7070 + v13) = v3[8]; *(float *)((char *)&flt_BA7074 + v13) = v3[9]; *(float *)((char *)&flt_BA7078 + v13) = v3[10]; *(float *)((char *)&flt_BA707C + v13) = v3[11]; *(float *)((char *)&flt_BA7080 + v13) = v3[12]; *(float *)((char *)&flt_BA7084 + v13) = v3[13]; *(float *)((char *)&flt_BA7088 + v13) = v3[14]; *(float *)((char *)&flt_BA708C + v13) = v3[15]; result = 9; } else if ( (unsigned __int8)sub_92D780(a2) ) { v14 = 4 * a1; flt_BA70D0[v14] = *v3; flt_BA70D4[v14] = v3[1]; flt_BA70D8[v14] = v3[2]; flt_BA70DC[v14] = v3[3]; result = 10; } else { result = 0; } } } } return result; } // BA6F80: using guessed type char byte_BA6F80; // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; //----- (00930600) -------------------------------------------------------- void __thiscall sub_930600(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A45CFC: using guessed type void *NiTArray>::`vftable'; //----- (00930660) -------------------------------------------------------- void *__thiscall sub_930660(void *this, char a2) { void *v2; // esi v2 = this; sub_930600(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00930690) -------------------------------------------------------- int __thiscall sub_930690(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7, int a8, int a9, int a10) { float v10; // esi unsigned int v11; // edi int v12; // ebx int v13; // eax int v14; // edi int v15; // ecx int v16; // edi unsigned int v17; // eax unsigned int v18; // eax unsigned int v20; // [esp+Ch] [ebp-18h] int v21; // [esp+10h] [ebp-14h] int v22; // [esp+14h] [ebp-10h] int v23; // [esp+18h] [ebp-Ch] int v24; // [esp+1Ch] [ebp-8h] int v25; // [esp+20h] [ebp-4h] int savedregs; // [esp+24h] [ebp+0h] v10 = *(float *)&this; v11 = *(_DWORD *)(a3 + 20); LOBYTE(v25) = (*(_DWORD *)(a3 + 20) >> 25) & 1; v20 = v11 & 0xF0000000; LOBYTE(v24) = HIBYTE(v11) & 1; v12 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 40))(this, *(_DWORD *)(a3 + 20) & 0xFFF); v13 = (*(int (__thiscall **)(float, unsigned int))(*(_DWORD *)LODWORD(v10) + 40))( COERCE_FLOAT(LODWORD(v10)), (v11 >> 12) & 0xFFF); v23 = v13; if ( v12 && v13 ) { v14 = *(_DWORD *)(v12 + 16); if ( !byte_BA6F80 ) { sub_92C350(); v13 = v23; } v15 = *(&dword_BA6F44 + (unsigned __int8)v14); v16 = *(_DWORD *)(v13 + 16); v22 = v15; if ( !byte_BA6F80 ) sub_92C350(); v17 = *(_DWORD *)(v12 + 16) & 0xF0000000; v21 = *(&dword_BA6F44 + (unsigned __int8)v16); switch ( v17 ) { case 0x20000000u: v22 = sub_92C8B0(*(char **)(v12 + 8)); sub_92F5F0(v10, (int)&savedregs, 0, v12, *(float *)&a4, a5, a6, a7, a8, a9); break; case 0x40000000u: sub_930310(0, (_DWORD *)v12, a10); break; case 0x30000000u: sub_96E4D0(0, v12, a4, a5, a6, a8, a9, a10); break; case 0x10000000u: sub_96E4D0(0, v12, a4, a5, a6, a8, a9, a10); break; } v18 = *(_DWORD *)(v23 + 16) & 0xF0000000; switch ( v18 ) { case 0x20000000u: v21 = sub_92C8B0(*(char **)(v23 + 8)); sub_92F5F0(v10, (int)&savedregs, (float *)1, v23, *(float *)&a4, a5, a6, a7, a8, a9); break; case 0x30000000u: sub_96E4D0(1, v23, a4, a5, a6, a8, a9, a10); break; case 0x40000000u: sub_930310(1, (_DWORD *)v23, a10); break; case 0x10000000u: sub_930310(1, (_DWORD *)v23, a10); break; } if ( v22 && v21 ) { if ( v20 > 0x30000000 ) { if ( v20 == 0x40000000 ) return sub_92D340(a2, a3, v22, v21, v24, v25); } else { switch ( v20 ) { case 0x30000000u: return sub_92D130(a2, a3, v22, v21, v24, v25); case 0x10000000u: return sub_92CBE0(a2, a3, v22, v21, v24, v25); case 0x20000000u: return sub_92CEE0(a2, a3, v22, v21, *(float *)&v24, v25); } } } else { sub_863460(1, 0, "Invalid operands in OperatorConstant\n"); } } else { sub_863460(1, 0, "Invalid entries in OperatorConstant\n"); } return 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (00930960) -------------------------------------------------------- _BYTE *__cdecl sub_930960(_DWORD *a1, int a2, int a3) { int v3; // ebx _DWORD *v4; // esi _BYTE *v5; // edi int v6; // ecx _DWORD *v8; // eax int v9; // edx int v10; // ecx int v11; // edi _DWORD *v12; // eax int v13; // edx int v14; // edi int v15; // [esp+4h] [ebp-4h] v3 = 0; v15 = 0; if ( !a1 ) return (_BYTE *)v15; switch ( a2 ) { case 1: case 2: case 3: case 4: v4 = (_DWORD *)a1[3]; if ( !v4 ) return (_BYTE *)v15; if ( v4 ) goto LABEL_6; v5 = 0; while ( 2 ) { if ( sub_92E830(v5, a2) ) { v6 = v3++; if ( v6 == a3 ) return v5; } if ( v4 ) { LABEL_6: v5 = (_BYTE *)v4[1]; v4 = (_DWORD *)*v4; continue; } break; } return 0; case 5: return (_BYTE *)a1[6]; case 6: v8 = (_DWORD *)a1[5]; v9 = 0; if ( !v8 ) return (_BYTE *)v15; while ( 1 ) { v10 = v8[1]; v8 = (_DWORD *)*v8; v11 = v9++; if ( v11 == a3 ) break; if ( !v8 ) return 0; } return (_BYTE *)v10; case 7: v12 = (_DWORD *)a1[4]; v13 = 0; if ( !v12 ) return (_BYTE *)v15; break; case 8: return (_BYTE *)a1[7]; default: return (_BYTE *)v15; } while ( 1 ) { v10 = v12[1]; v12 = (_DWORD *)*v12; v14 = v13++; if ( v14 == a3 ) break; if ( !v12 ) return 0; } return (_BYTE *)v10; } //----- (00930A70) -------------------------------------------------------- signed int __stdcall sub_930A70(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { int v11; // esi int v12; // ebx int v13; // edi int v14; // eax int v15; // ebx _BYTE *v16; // eax int v17; // edi char v19; // [esp+Ch] [ebp-8h] int v20; // [esp+10h] [ebp-4h] int v21; // [esp+20h] [ebp+Ch] v11 = a2; v12 = *(unsigned __int8 *)(a2 + 17); v13 = *(_DWORD *)(a2 + 20); v20 = 0; if ( !byte_BA6F81 ) sub_92C410(); v14 = dword_BA6F10[v12]; v15 = a8; v16 = sub_930960((_DWORD *)a8, v14, v13); v17 = *(_DWORD *)(a2 + 12); v21 = (int)v16; if ( !sub_92C5A0(*(_DWORD *)(v11 + 12), &a8, &v19) ) return -2147483632; if ( !sub_92E8B0(&unk_BA6F88, 16 * a8, v17, v21, a3, a4, a5, a6, a7, v15, a9, a10) ) v20 = -2147483552; if ( !(*(unsigned __int8 (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 40))(v11, &unk_BA6F88, 0) ) v20 = -2147483568; return v20; } // BA6F10: using guessed type int dword_BA6F10[]; // BA6F81: using guessed type char byte_BA6F81; //----- (00930B50) -------------------------------------------------------- _DWORD *__thiscall sub_930B50(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiD3DShaderConstantMap::`vftable'; v2[2] = 2; v2[3] = &NiTArray>::`vftable'; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[4] = 0; v2[8] = 1; *((_BYTE *)v2 + 36) = 1; v2[10] = 0; v2[11] = 0; v2[12] = 0; v2[13] = 0; v2[14] = 0; sub_932310(v2, a2); sub_80C6B0(v2 + 3); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45CFC: using guessed type void *NiTArray>::`vftable'; // A45D54: using guessed type void *NiD3DShaderConstantMap::`vftable'; //----- (00930BD0) -------------------------------------------------------- void *__thiscall sub_930BD0(void *this, char a2) { void *v2; // esi v2 = this; sub_933400(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00930C00) -------------------------------------------------------- _DWORD *__thiscall sub_930C00(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_930B50(this, a2); *v2 = &NiD3DSCM_Vertex::`vftable'; return v2; } // A45C94: using guessed type void *NiD3DSCM_Vertex::`vftable'; //----- (00930C20) -------------------------------------------------------- int __cdecl sub_930C20(int a1) { int v1; // esi int result; // eax dword_BA6FD0 = a1; if ( a1 ) { v1 = *(_DWORD *)(a1 + 132); result = dword_BA6FCC; if ( dword_BA6FCC ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA6FCC + 8))(dword_BA6FCC); dword_BA6FCC = v1; if ( v1 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v1 + 4))(v1); } else { result = dword_BA6FCC; if ( dword_BA6FCC ) result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_BA6FCC + 8))(dword_BA6FCC); dword_BA6FCC = 0; } return result; } // BA6FCC: using guessed type int dword_BA6FCC; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00930C80) -------------------------------------------------------- void __thiscall sub_930C80(_DWORD *this, int a2) { _DWORD *v2; // esi int (*v3)(void); // edx int i; // eax v2 = this; if ( this[5] != a2 ) { v3 = *(int (**)(void))(*this + 52); this[5] = a2; for ( i = v3(); i; i = (*(int (__thiscall **)(_DWORD *))(*v2 + 56))(v2) ) (*(void (__thiscall **)(int, int))(*(_DWORD *)i + 16))(i, a2); } } //----- (00930CC0) -------------------------------------------------------- _DWORD *__thiscall sub_930CC0(int *this, _BYTE *ArgList, int a3, char a4) { int *v4; // esi _DWORD *result; // eax _DWORD *v6; // edi int v7; // eax int v8; // eax v4 = this; if ( this[5] ) { if ( ArgList && *ArgList ) { v6 = (_DWORD *)(*(int (__stdcall **)(_BYTE *, int))(*this + 8))(ArgList, a3); if ( !v6 ) { v7 = (*(int (__thiscall **)(int *))(*v4 + 52))(v4); if ( v7 ) { while ( 1 ) { v6 = (_DWORD *)(*(int (__thiscall **)(int, int, _BYTE *, int))(*(_DWORD *)v7 + 4))(v7, v4[5], ArgList, a3); v8 = *v4; if ( v6 ) break; v7 = (*(int (__thiscall **)(int *))(v8 + 56))(v4); if ( !v7 ) goto LABEL_11; } (*(void (__thiscall **)(int *, _DWORD *, int))(v8 + 24))(v4, v6, a3); sub_927E40((_DWORD *)v4[5], (int)v6); sub_91F020(v6, v4[5]); } } LABEL_11: if ( a4 ) { if ( !v6 ) sub_863460(1, 0, "Failed to find shader %s, Implementation %d\n", ArgList, a3); } result = v6; } else { sub_863460(1, 0, "Attempting to RetrieveShader w/out a valid name!\n"); result = 0; } } else { OutputDebugStringA("Attempting to RetrieveShader w/out a valid renderer!\n"); result = 0; } return result; } //----- (00930DA0) -------------------------------------------------------- void __thiscall sub_930DA0(_DWORD *this) { _DWORD *v1; // ecx v1 = (_DWORD *)this[5]; if ( v1 ) sub_929EC0(v1); } //----- (00930DB0) -------------------------------------------------------- unsigned int __stdcall sub_930DB0(unsigned __int8 a1, int a2) { return a2 | ((a1 | 0xFFFFFF00) << 8); } //----- (00930DD0) -------------------------------------------------------- int __stdcall sub_930DD0(unsigned __int8 a1) { return a1; } //----- (00930DE0) -------------------------------------------------------- int __stdcall sub_930DE0(unsigned __int16 a1) { return a1 >> 8; } //----- (00930E00) -------------------------------------------------------- unsigned int __stdcall sub_930E00(unsigned __int16 a1, int a2) { return a2 | ((a1 | 0xFFFFFE00) << 8); } //----- (00930E20) -------------------------------------------------------- int sub_930E20() { return dword_BA6FD8; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (00930E30) -------------------------------------------------------- _DWORD *__stdcall sub_930E30(_DWORD *a1) { _DWORD *result; // eax result = (_DWORD *)sub_916E70(); if ( result ) result = (_DWORD *)sub_917070(result, a1); return result; } //----- (00930E50) -------------------------------------------------------- int __stdcall sub_930E50(_DWORD **a1) { int result; // eax result = sub_916E70(); if ( result ) result = sub_917090(a1); return result; } //----- (00930E70) -------------------------------------------------------- void __stdcall sub_930E70(char *a1) { _DWORD *v1; // eax v1 = (_DWORD *)sub_916E70(); if ( v1 ) sub_917970(v1, a1); } //----- (00930E90) -------------------------------------------------------- void __stdcall sub_930E90(char *a1) { _DWORD *v1; // eax v1 = (_DWORD *)sub_916E70(); if ( v1 ) sub_917AD0(v1, a1); } //----- (00930EB0) -------------------------------------------------------- void sub_930EB0() { int v0; // eax v0 = sub_916E70(); if ( v0 ) sub_917C10(v0); } //----- (00930ED0) -------------------------------------------------------- const char *sub_930ED0() { return "DX9"; } //----- (00930EE0) -------------------------------------------------------- BOOL __stdcall sub_930EE0(int a1, int a2) { return a1 == a2; } //----- (00930F00) -------------------------------------------------------- int sub_930F00() { int result; // eax if ( dword_BA6FD8 ) { if ( dword_BA4764 == dword_BA6FD8 ) dword_BA4764 = 0; result = (**(int (__stdcall ***)(signed int))dword_BA6FD8)(1); dword_BA6FD8 = 0; } return result; } // BA4764: using guessed type int dword_BA4764; // BA6FD8: using guessed type int dword_BA6FD8; //----- (00930F30) -------------------------------------------------------- void __thiscall sub_930F30(_DWORD **this, _DWORD *a2, int a3) { _DWORD **v3; // edi int v4; // eax char DstBuf; // [esp+8h] [ebp-108h] v3 = this; if ( a2 ) { v4 = sub_879520(a2); sub_7FF6E0(&DstBuf, 0x104u, "%s%d", v4, a3); sub_815C70(v3[6], (int)&DstBuf, (int)a2); } } //----- (00930FA0) -------------------------------------------------------- int __thiscall sub_930FA0(_DWORD **this, int ArgList, int a3) { _DWORD **v3; // esi char v4; // al int v6; // [esp+4h] [ebp-10Ch] char DstBuf; // [esp+8h] [ebp-108h] v3 = this; v6 = 0; sub_7FF6E0(&DstBuf, 0x104u, "%s%d", ArgList, a3); v4 = sub_8C4C90(v3[6], (int)&DstBuf, &v6); return v4 != 0 ? v6 : 0; } //----- (00931020) -------------------------------------------------------- char __thiscall sub_931020(_DWORD **this, int ArgList, int a3) { _DWORD **v3; // esi char DstBuf; // [esp+4h] [ebp-108h] v3 = this; sub_7FF6E0(&DstBuf, 0x104u, "%s%d", ArgList, a3); return sub_916F40(v3[6], (int)&DstBuf); } //----- (00931080) -------------------------------------------------------- int __thiscall sub_931080(_DWORD **this) { return sub_940360(this[6]); } //----- (00931090) -------------------------------------------------------- void __thiscall sub_931090(_DWORD *this) { _DWORD *v1; // edi int v2; // edx unsigned int v3; // ecx unsigned int v4; // eax int v5; // esi _DWORD *v6; // edx _DWORD *v7; // eax _DWORD *v8; // esi _DWORD *v9; // edi _DWORD *v10; // ebx int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // [esp+4h] [ebp-4h] v1 = this; v15 = this; if ( this[5] ) { v2 = this[6]; if ( v2 ) { v3 = *(_DWORD *)(v2 + 4); v4 = 0; if ( v3 ) { v5 = *(_DWORD *)(v2 + 8); v6 = *(_DWORD **)(v2 + 8); while ( !*v6 ) { ++v4; ++v6; if ( v4 >= v3 ) goto LABEL_7; } v7 = *(_DWORD **)(v5 + 4 * v4); } else { LABEL_7: v7 = 0; } v8 = v7; if ( v7 ) { while ( 1 ) { v9 = (_DWORD *)v1[6]; v10 = (_DWORD *)v8[2]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v11 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v9 + 4))(v9, v8[1]); v12 = v9[1]; v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_18: v8 = 0; } else { v14 = (_DWORD *)(v9[2] + 4 * v13); while ( 1 ) { v8 = (_DWORD *)*v14; if ( *v14 ) break; ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_18; } } } if ( v10 ) { if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *))(*v10 + 12))(v10) ) { sub_91F020(v10, v15[5]); (*(void (__thiscall **)(_DWORD *))(*v10 + 80))(v10); sub_927E40((_DWORD *)v15[5], (int)v10); } } if ( !v8 ) break; v1 = v15; } } } } } //----- (00931160) -------------------------------------------------------- int __stdcall sub_931160(int a1) { char v1; // al v1 = sub_8C4C90((_DWORD *)(dword_BA6FD8 + 36), a1, &a1); return v1 != 0 ? a1 : 0; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (00931190) -------------------------------------------------------- void __thiscall sub_931190(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiShader *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiShader *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A46764: using guessed type void *NiTMapBase,char const *,NiShader *>::`vftable'; // A467AC: using guessed type void *NiTPointerMap::`vftable'; // A467CC: using guessed type void *NiTStringTemplateMap,NiShader *>::`vftable'; //----- (00931200) -------------------------------------------------------- void __thiscall sub_931200(_BYTE *this, int a2) { if ( this[16] ) operator delete(*(void **)(a2 + 4)); } //----- (00931220) -------------------------------------------------------- void __thiscall sub_931220(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap>,NiPointer>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap>::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A46784: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A467EC: using guessed type void *NiTPointerMap>::`vftable'; // A4680C: using guessed type void *NiTStringTemplateMap>,NiPointer>::`vftable'; //----- (00931290) -------------------------------------------------------- void **__thiscall sub_931290(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiShader *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46764: using guessed type void *NiTMapBase,char const *,NiShader *>::`vftable'; //----- (009312D0) -------------------------------------------------------- void **__thiscall sub_9312D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiShader *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46764: using guessed type void *NiTMapBase,char const *,NiShader *>::`vftable'; // A467AC: using guessed type void *NiTPointerMap::`vftable'; //----- (00931310) -------------------------------------------------------- void *__thiscall sub_931310(void *this, char a2) { void *v2; // esi v2 = this; sub_931190(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00931340) -------------------------------------------------------- void **__thiscall sub_931340(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46784: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; //----- (00931380) -------------------------------------------------------- void **__thiscall sub_931380(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap>::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiPointer>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46784: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A467EC: using guessed type void *NiTPointerMap>::`vftable'; //----- (009313C0) -------------------------------------------------------- void *__thiscall sub_9313C0(void *this, char a2) { void *v2; // esi v2 = this; sub_931220(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009313F0) -------------------------------------------------------- void __thiscall sub_9313F0(_DWORD *this, int a2) { _DWORD *v2; // ebx int v3; // esi v2 = this; v3 = this[48]; if ( v3 != a2 ) { if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[48] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); } } //----- (00931440) -------------------------------------------------------- _DWORD *__thiscall sub_931440(_DWORD *this, char *Src, int a3, rsize_t MaxCount, void *a5) { _DWORD *v5; // esi v5 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v5 = &NiD3DGlobalConstantEntry::`vftable'; v5[2] = 0; v5[3] = 0; v5[4] = 0; v5[5] = 0; v5[6] = 0; v5[3] = sub_92C100((int)(v5 + 2), 0, Src); v5[4] = a3; sub_93CFE0((int)v5, MaxCount, a5); return v5; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4682C: using guessed type void *NiD3DGlobalConstantEntry::`vftable'; //----- (009314B0) -------------------------------------------------------- void **__thiscall sub_9314B0(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiD3DGlobalConstantEntry::`vftable'; operator delete(v3); operator delete(v2[6]); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4682C: using guessed type void *NiD3DGlobalConstantEntry::`vftable'; //----- (00931500) -------------------------------------------------------- void __thiscall sub_931500(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NiD3DGlobalConstantEntry *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A46744: using guessed type void *NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; // A46834: using guessed type void *NiTMap::`vftable'; // A46854: using guessed type void *NiTStringTemplateMap,NiD3DGlobalConstantEntry *>::`vftable'; //----- (00931570) -------------------------------------------------------- void **__thiscall sub_931570(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46744: using guessed type void *NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; //----- (009315B0) -------------------------------------------------------- void **__thiscall sub_9315B0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46744: using guessed type void *NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; // A46834: using guessed type void *NiTMap::`vftable'; //----- (009315F0) -------------------------------------------------------- void *__thiscall sub_9315F0(void *this, char a2) { void *v2; // esi v2 = this; sub_931500(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00931620) -------------------------------------------------------- char __thiscall sub_931620(_DWORD *this, _DWORD *a2, int a3) { _DWORD *v3; // edi int v4; // eax char result; // al int v6; // eax v3 = this; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD))(*(_DWORD *)a3 + 16))(a3, v3[5]) ) { v4 = sub_879520((_DWORD *)a3); sub_863460(1, 0, "Initialize on %s failed\n", v4); if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**(void (__thiscall ***)(int, signed int))a3)(a3, 1); return 0; } if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *))(*(_DWORD *)a3 + 8))(a3, a2) ) { sub_9313F0(a2, a3); if ( !InterlockedDecrement((volatile LONG *)(a3 + 4)) ) (**(void (__thiscall ***)(int, signed int))a3)(a3, 1); result = 1; } else { v6 = sub_879520((_DWORD *)a3); sub_863460(1, 0, "SetupGeometry on %s failed\n", v6); if ( InterlockedDecrement((volatile LONG *)(a3 + 4)) ) return 0; (**(void (__thiscall ***)(int, signed int))a3)(a3, 1); result = 0; } return result; } //----- (00931700) -------------------------------------------------------- char __stdcall sub_931700(int a1) { _DWORD *v2; // ecx int v3; // esi if ( !a1 ) return 0; v2 = *(_DWORD **)(a1 + 192); if ( v2 ) { sub_879520(v2); v3 = *(_DWORD *)(a1 + 192); if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } *(_DWORD *)(a1 + 192) = 0; } } return 1; } //----- (00931760) -------------------------------------------------------- char __cdecl sub_931760(char *Src, int a2, rsize_t MaxCount, void *a4) { int v4; // ecx _DWORD *v6; // eax _DWORD *v7; // eax int v8; // esi int v9; // [esp+0h] [ebp-4h] v9 = v4; if ( !dword_BA6FD8 ) return 0; if ( sub_8C4C90((_DWORD *)(dword_BA6FD8 + 36), (int)Src, &v9) && v9 ) { if ( *(_DWORD *)(v9 + 16) == a2 ) { InterlockedIncrement((volatile LONG *)(v9 + 4)); return 1; } return 0; } v6 = operator new(0x1Cu); if ( !v6 ) return 0; v7 = sub_931440(v6, Src, a2, MaxCount, a4); v8 = (int)v7; if ( !v7 ) return 0; InterlockedIncrement(v7 + 1); sub_815C70((_DWORD *)(dword_BA6FD8 + 36), *(_DWORD *)(v8 + 8), v8); return 1; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (00931800) -------------------------------------------------------- char __cdecl sub_931800(int a1) { int v1; // ecx int v3; // esi int v4; // [esp+0h] [ebp-4h] v4 = v1; if ( !dword_BA6FD8 ) return 0; if ( !sub_8C4C90((_DWORD *)(dword_BA6FD8 + 36), a1, &v4) ) return 0; v3 = v4; if ( !v4 ) return 0; if ( *(_DWORD *)(v4 + 4) == 1 ) sub_916F40((_DWORD *)(dword_BA6FD8 + 36), a1); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return 1; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (00931870) -------------------------------------------------------- char __cdecl sub_931870(int a1, _DWORD *a2, _DWORD *a3) { int v3; // ecx int v5; // eax int v6; // [esp+0h] [ebp-4h] v6 = v3; if ( !dword_BA6FD8 ) return 0; if ( !sub_8C4C90((_DWORD *)(dword_BA6FD8 + 36), a1, &v6) ) return 0; v5 = v6; if ( !v6 ) return 0; *a2 = *(_DWORD *)(v6 + 20); *a3 = *(_DWORD *)(v5 + 24); return 1; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (009318C0) -------------------------------------------------------- char __cdecl sub_9318C0(int a1, rsize_t MaxCount, void *Src) { int v3; // ecx int v5; // [esp+0h] [ebp-4h] v5 = v3; if ( !dword_BA6FD8 || !sub_8C4C90((_DWORD *)(dword_BA6FD8 + 36), a1, &v5) || !v5 ) return 0; sub_93CFE0(v5, MaxCount, Src); return 1; } // BA6FD8: using guessed type int dword_BA6FD8; //----- (00931910) -------------------------------------------------------- unsigned int __thiscall sub_931910(_DWORD *this, unsigned int a2, _DWORD *a3, unsigned int *a4) { unsigned int *v4; // esi _DWORD *v5; // ebx int v6; // edi unsigned int v7; // eax unsigned int result; // eax int v9; // eax unsigned int v10; // edx _DWORD *v11; // ecx v4 = *(unsigned int **)a2; v5 = this; *a3 = *(_DWORD *)(*(_DWORD *)a2 + 4); v6 = *a4; if ( *a4 != v4[2] ) { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v4[2]; *a4 = v7; if ( v7 ) InterlockedIncrement((volatile LONG *)(v7 + 4)); } result = *v4; if ( *v4 ) { *(_DWORD *)a2 = result; } else { v9 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v5 + 4))(v5, v4[1]); v10 = v5[1]; result = v9 + 1; if ( result >= v10 ) { LABEL_14: result = a2; *(_DWORD *)a2 = 0; } else { v11 = (_DWORD *)(v5[2] + 4 * result); while ( !*v11 ) { ++result; ++v11; if ( result >= v10 ) goto LABEL_14; } *(_DWORD *)a2 = *v11; } } return result; } //----- (009319C0) -------------------------------------------------------- int __thiscall sub_9319C0(_BYTE *this, int a2, char *Src, int a4) { unsigned int v4; // kr00_4 char *v5; // eax int v6; // edi int v7; // esi int result; // eax int (__thiscall ***v9)(_DWORD, signed int); // esi if ( this[16] ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); v6 = a2; *(_DWORD *)(a2 + 4) = v5; strcpy_s(v5, v4 + 1, Src); } else { v6 = a2; *(_DWORD *)(a2 + 4) = Src; } v7 = *(_DWORD *)(v6 + 8); result = a4; if ( v7 == a4 ) { LABEL_12: if ( result ) { v9 = (int (__thiscall ***)(_DWORD, signed int))result; result = InterlockedDecrement((volatile LONG *)(result + 4)); if ( !result ) { if ( v9 ) result = (**v9)(v9, 1); } } return result; } if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); result = a4; } *(_DWORD *)(v6 + 8) = result; if ( result ) { InterlockedIncrement((volatile LONG *)(result + 4)); result = a4; goto LABEL_12; } return result; } //----- (00931A70) -------------------------------------------------------- char __thiscall sub_931A70(_DWORD *this, int a2, int ArgList, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // edi char result; // al v4 = this; v5 = (*(int (__thiscall **)(_DWORD *, int, int, signed int))(*this + 4))(this, ArgList, a4, 1); v6 = v5; if ( v5 ) { if ( a4 == -1 ) (*(void (__thiscall **)(int, signed int))(*(_DWORD *)v5 + 104))(v5, 1); result = sub_931620(v4, (_DWORD *)a2, v6); } else { sub_863460(256, 0, "Cannot find shader %s, Implementation %d\n", ArgList, a4); result = 0; } return result; } //----- (00931AE0) -------------------------------------------------------- char __thiscall sub_931AE0(_DWORD *this, _DWORD *a2, void **a3) { _DWORD *v3; // edi int v4; // ebx int v5; // ST0C_4 int v6; // eax int v7; // eax signed int v9; // eax int v10; // [esp+Ch] [ebp-2Ch] char DstBuf; // [esp+14h] [ebp-24h] v3 = this; v4 = sub_879520(a3); if ( !v4 ) { v5 = (*(_DWORD *)dword_BA6FD4)++; sub_7FF6E0(&DstBuf, 0x20u, "NiD3DShader%d", v5); sub_8693E0(a3, &DstBuf); v4 = sub_879520(a3); } v6 = sub_965070(a3); v10 = v6; v7 = (*(int (__thiscall **)(_DWORD *, int, int, _DWORD))(*v3 + 4))(v3, v4, v6, 0); if ( v7 ) { if ( (void **)v7 != a3 ) return 0; } else { sub_927E40((_DWORD *)v3[5], (int)a3); if ( (*((unsigned __int8 (__thiscall **)(void **))*a3 + 25))(a3) ) v9 = -1; else v9 = v10; (*(void (__thiscall **)(_DWORD *, void **, signed int))(*v3 + 24))(v3, a3, v9); } return sub_931620(v3, a2, (int)a3); } //----- (00931BC0) -------------------------------------------------------- void __thiscall sub_931BC0(_DWORD **this, LONG a2) { _DWORD **v2; // edi int v3; // eax v2 = this; if ( a2 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); v3 = sub_879520((_DWORD *)a2); sub_923970(v2[8], v3, a2); } } //----- (00931C00) -------------------------------------------------------- void (__thiscall ***__thiscall sub_931C00(_DWORD *this, int a2))(_DWORD, signed int) { _DWORD *v2; // ecx char v3; // al void (__thiscall ***v4)(_DWORD, signed int); // esi void (__thiscall ***result)(_DWORD, signed int); // eax int v6; // [esp+4h] [ebp-4h] v2 = (_DWORD *)this[8]; v6 = 0; v3 = sub_455570(v2, a2, &v6); v4 = (void (__thiscall ***)(_DWORD, signed int))v6; if ( v3 ) { if ( v6 ) { if ( !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**v4)(v4, 1); } result = v4; } else { if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) (**v4)(v4, 1); result = 0; } return result; } //----- (00931C70) -------------------------------------------------------- char __thiscall sub_931C70(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // ecx LONG v4; // eax int v5; // edi int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = (_DWORD *)this[8]; v7 = 0; LOBYTE(v4) = sub_455570(v3, a2, &v7); v5 = v7; if ( (_BYTE)v4 && *(_DWORD *)(v7 + 4) == 2 ) { sub_916F40((_DWORD *)v2[8], a2); v4 = InterlockedDecrement((volatile LONG *)(v5 + 4)); if ( !v4 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } else if ( v7 ) { v4 = InterlockedDecrement((volatile LONG *)(v7 + 4)); if ( !v4 ) LOBYTE(v4) = (**(int (__thiscall ***)(int, signed int))v5)(v5, 1); } return v4; } //----- (00931CF0) -------------------------------------------------------- unsigned int __thiscall sub_931CF0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // ecx unsigned int result; // eax unsigned int v4; // esi _DWORD *v5; // edx int v6; // eax void (__thiscall ***v7)(_DWORD, signed int); // esi char v8; // [esp+4h] [ebp-8h] int v9; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[8]; result = 0; if ( v2 ) { v4 = v2[1]; if ( v4 ) { v5 = (_DWORD *)v2[2]; while ( !*v5 ) { ++result; ++v5; if ( result >= v4 ) goto LABEL_6; } v6 = *(_DWORD *)(v2[2] + 4 * result); } else { LABEL_6: v6 = 0; } v1[7] = v6; if ( v6 ) { v9 = 0; sub_931910(v2, (unsigned int)(v1 + 7), &v8, (unsigned int *)&v9); v7 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( v9 ) { if ( !InterlockedDecrement((volatile LONG *)(v9 + 4)) ) (**v7)(v7, 1); } result = (unsigned int)v7; } else { result = 0; } } return result; } //----- (00931D80) -------------------------------------------------------- void (__thiscall ***__thiscall sub_931D80(_DWORD *this))(_DWORD, signed int) { _DWORD *v1; // eax _DWORD *v2; // ecx _DWORD *v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // esi char v6; // [esp+0h] [ebp-8h] int v7; // [esp+4h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[8]; if ( !v2 ) return 0; v3 = v1 + 7; if ( !*v3 ) return 0; v7 = 0; sub_931910(v2, (unsigned int)v3, &v6, (unsigned int *)&v7); v4 = (void (__thiscall ***)(_DWORD, signed int))v7; if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**v4)(v4, 1); } return v4; } //----- (00931DE0) -------------------------------------------------------- int __thiscall sub_931DE0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // eax int v3; // eax _DWORD *v4; // ecx _DWORD *v5; // esi char v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] v1 = this; v2 = (_DWORD *)sub_931CF0(this); if ( v2 ) { do { v3 = sub_879520(v2); sub_916F40((_DWORD *)v1[8], v3); v4 = (_DWORD *)v1[8]; if ( !v4 || !v1[7] ) break; v8 = 0; sub_931910(v4, (unsigned int)(v1 + 7), &v7, (unsigned int *)&v8); v5 = (_DWORD *)v8; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) ) (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); v2 = v5; } while ( v5 ); } return sub_940360((_DWORD *)v1[8]); } //----- (00931E60) -------------------------------------------------------- _DWORD *__thiscall sub_931E60(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST0C_4 _DWORD *v4; // eax _DWORD *v5; // edi void *v6; // eax size_t v7; // ST0C_4 _DWORD *v8; // eax _DWORD *v9; // edi void *v10; // eax size_t v11; // ST0C_4 v1 = this; sub_8634E0(this); *v1 = &NiD3DShaderFactory::`vftable'; v1[5] = 0; v1[10] = 37; v1[9] = &NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; v1[12] = 0; v2 = operator new(0x94u); v3 = 4 * v1[10]; v1[11] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 52) = 1; v1[9] = &NiTStringMap::`vftable'; v4 = operator new(0x14u); v5 = v4; if ( v4 ) { v4[1] = 59; *v4 = &NiTMapBase,char const *,NiShader *>::`vftable'; v4[3] = 0; v6 = operator new(0xECu); v7 = 4 * v5[1]; v5[2] = v6; memset(v6, 0, v7); *((_BYTE *)v5 + 16) = 1; *v5 = &NiTStringPointerMap::`vftable'; } else { v5 = 0; } v1[6] = v5; v8 = operator new(0x14u); v9 = v8; if ( v8 ) { v8[1] = 37; *v8 = &NiTMapBase,char const *,NiPointer>::`vftable'; v8[3] = 0; v10 = operator new(0x94u); v11 = 4 * v9[1]; v9[2] = v10; memset(v10, 0, v11); *((_BYTE *)v9 + 16) = 0; *v9 = &NiTStringPointerMap>::`vftable'; v1[8] = v9; } else { v1[8] = 0; } return v1; } // A46744: using guessed type void *NiTMapBase,char const *,NiD3DGlobalConstantEntry *>::`vftable'; // A46764: using guessed type void *NiTMapBase,char const *,NiShader *>::`vftable'; // A46784: using guessed type void *NiTMapBase,char const *,NiPointer>::`vftable'; // A468E8: using guessed type void *NiTStringPointerMap::`vftable'; // A46908: using guessed type void *NiTStringPointerMap>::`vftable'; // A46928: using guessed type void *NiTStringMap::`vftable'; // A4694C: using guessed type void *NiD3DShaderFactory::`vftable'; //----- (00931F80) -------------------------------------------------------- LONG __thiscall sub_931F80(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx void (__stdcall ***v3)(signed int); // ecx void (__stdcall ***v4)(signed int); // ecx unsigned int v5; // ecx unsigned int v6; // eax _DWORD *v7; // edx _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi int v11; // eax unsigned int v12; // edx unsigned int v13; // eax _DWORD *v14; // ecx _DWORD *v15; // esi _DWORD *v16; // edi int v17; // edi int v19; // [esp+Ch] [ebp-Ch] int v20; // [esp+10h] [ebp-8h] _DWORD *v21; // [esp+14h] [ebp-4h] v1 = this; v2 = (_DWORD *)this[6]; v21 = v1; *v1 = &NiD3DShaderFactory::`vftable'; sub_940360(v2); sub_931DE0(v1); v3 = (void (__stdcall ***)(signed int))v1[6]; if ( v3 ) (**v3)(1); v4 = (void (__stdcall ***)(signed int))v1[8]; if ( v4 ) (**v4)(1); v5 = v1[10]; v6 = 0; if ( v5 ) { v7 = (_DWORD *)v1[11]; while ( !*v7 ) { ++v6; ++v7; if ( v6 >= v5 ) goto LABEL_9; } v8 = *(_DWORD **)(v1[11] + 4 * v6); } else { LABEL_9: v8 = 0; } v9 = v8; while ( v9 ) { v10 = v9[1]; v19 = v9[2]; v20 = v9[1]; if ( *v9 ) { v9 = (_DWORD *)*v9; } else { v11 = (*(int (__thiscall **)(_DWORD *, int))(v1[9] + 4))(v1 + 9, v10); v12 = v1[10]; v13 = v11 + 1; if ( v13 >= v12 ) { LABEL_18: v9 = 0; } else { v14 = (_DWORD *)(v1[11] + 4 * v13); while ( !*v14 ) { ++v13; ++v14; if ( v13 >= v12 ) goto LABEL_18; } v9 = (_DWORD *)*v14; } v1 = v21; } if ( v19 && dword_BA6FD8 ) { v15 = (_DWORD *)(dword_BA6FD8 + 36); v16 = *(_DWORD **)(v15[2] + 4 * (*(int (__thiscall **)(int, int))(*(_DWORD *)(dword_BA6FD8 + 36) + 4))(dword_BA6FD8 + 36, v10)); if ( v16 ) { while ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int, _DWORD))(*v15 + 8))(v15, v20, v16[1]) ) { v16 = (_DWORD *)*v16; if ( !v16 ) goto LABEL_32; } v17 = v16[2]; if ( v17 ) { if ( *(_DWORD *)(v17 + 4) == 1 ) sub_916F40((_DWORD *)(dword_BA6FD8 + 36), v20); if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); } } LABEL_32: v1 = v21; } } v1[5] = 0; sub_931500((_BYTE *)v1 + 36); return sub_863510(v1); } // A4694C: using guessed type void *NiD3DShaderFactory::`vftable'; // BA6FD8: using guessed type int dword_BA6FD8; //----- (009320F0) -------------------------------------------------------- void *__thiscall sub_9320F0(void *this, char a2) { void *v2; // esi v2 = this; sub_931F80(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00932120) -------------------------------------------------------- void __thiscall sub_932120(void *this) { _DWORD *v1; // eax _DWORD *v2; // eax if ( !dword_BA6FD8 ) { v1 = operator new(0x38u); if ( v1 ) v2 = sub_931E60(v1); else v2 = 0; dword_BA6FD8 = (int)v2; dword_BA4764 = (int)v2; } if ( !dword_BA4764 ) nullsub_6(this); } // BA4764: using guessed type int dword_BA4764; // BA6FD8: using guessed type int dword_BA6FD8; //----- (00932170) -------------------------------------------------------- _DWORD *__thiscall sub_932170(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiD3DShaderConstantMapEntry::`vftable'; v1[2] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; *((_BYTE *)v1 + 48) = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A469FC: using guessed type void *NiD3DShaderConstantMapEntry::`vftable'; // BA6F80: using guessed type char byte_BA6F80; // BA6F81: using guessed type char byte_BA6F81; //----- (009321D0) -------------------------------------------------------- void __thiscall sub_9321D0(void **this, char *Src) { char *v2; // ebx void **v3; // esi unsigned int v4; // kr00_4 void *v5; // ecx size_t v6; // edi v2 = Src; v3 = this; if ( Src && *Src ) { v4 = strlen(Src); v5 = v3[2]; v6 = v4 + 1; if ( v5 ) { if ( strlen((const char *)v5) < v6 ) { operator delete(v5); v3[2] = 0; } v2 = Src; } if ( !v3[2] ) v3[2] = operator new(v6); strcpy_s((char *)v3[2], v6, v2); } else { operator delete(this[2]); v3[2] = 0; } } //----- (00932270) -------------------------------------------------------- void __thiscall sub_932270(void **this, char *Src) { char *v2; // ebx void **v3; // esi unsigned int v4; // kr00_4 void *v5; // ecx size_t v6; // edi v2 = Src; v3 = this; if ( Src && *Src ) { v4 = strlen(Src); v5 = v3[8]; v6 = v4 + 1; if ( v5 ) { if ( strlen((const char *)v5) < v6 ) { operator delete(v5); v3[8] = 0; } v2 = Src; } if ( !v3[8] ) v3[8] = operator new(v6); strcpy_s((char *)v3[8], v6, v2); } else { operator delete(this[8]); v3[8] = 0; } } //----- (00932310) -------------------------------------------------------- int __thiscall sub_932310(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax int result; // eax v2 = this; this[13] = a2; if ( a2 ) { v3 = *(_DWORD *)(a2 + 132); v4 = this[12]; if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(this[12]); v2[12] = v3; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); result = *(_DWORD *)(v2[13] + 1716); v2[14] = result; } else { result = this[12]; if ( result ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(this[12]); v2[12] = 0; v2[14] = 0; } return result; } //----- (00932380) -------------------------------------------------------- int __thiscall sub_932380(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { _DWORD *v11; // esi int (__stdcall *v12)(int); // edx int result; // eax unsigned int v14; // ecx int v15; // ebx int v16; // eax v11 = this; v12 = *(int (__stdcall **)(int))(*this + 36); this[11] = 0; if ( v12(a2) ) { result = -2147483616; v11[11] = -2147483616; } else { v14 = a3 & 0xF0000000; if ( (a3 & 0xF0000000) == 805306368 ) { result = (*(int (__thiscall **)(_DWORD *, int, int, int, int, int, int, int, int, int, int))(*v11 + 12))( v11, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); v11[11] = result; } else { switch ( v14 ) { case 0x10000000u: result = (*(int (__thiscall **)(_DWORD *, int, int, int, int, int, int, int, int, int, int))(*v11 + 16))( v11, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); v11[11] = result; break; case 0x20000000u: result = (*(int (__thiscall **)(_DWORD *, int, int, int, int))(*v11 + 8))(v11, a2, a4, a5, a7); v11[11] = result; break; case 0x40000000u: result = (*(int (__thiscall **)(_DWORD *, int, int, int, int, int, int, int, int, int, int))(*v11 + 20))( v11, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); v11[11] = result; break; case 0x50000000u: result = (*(int (__thiscall **)(_DWORD *, int, int, int, int, int, int))(*v11 + 24))( v11, a2, a3, a4, a5, a6, a7); v11[11] = result; break; case 0x60000000u: v15 = *v11; v16 = sub_92C6B0(a3); result = (*(int (__thiscall **)(_DWORD *, int, int, int, int, int))(v15 + 28))(v11, a2, a5, a7, a4, v16); v11[11] = result; break; default: v11[11] = -2147483584; result = v11[11]; break; } } } return result; } //----- (00932500) -------------------------------------------------------- int __thiscall sub_932500(_DWORD *this, char *Src, int a3, int a4, char *a5) { _DWORD *v5; // edi _DWORD *v6; // eax void **v7; // esi int v8; // eax int result; // eax v5 = this; v6 = operator new(0x34u); if ( v6 ) v7 = (void **)sub_932170(v6); else v7 = 0; sub_9321D0(v7, Src); v7[5] = (void *)a3; v7[6] = (void *)a4; sub_932270(v7, a5); v7[4] = (void *)0x20000000; v8 = (*(int (__thiscall **)(_DWORD *, void **))(*v5 + 56))(v5, v7); v5[11] = v8; if ( v8 ) { (*(void (__thiscall **)(void **, signed int))*v7)(v7, 1); result = v5[11]; } else { result = (*(int (__thiscall **)(_DWORD *, void **))(*v5 + 52))(v5, v7); v5[11] = result; } return result; } //----- (00932590) -------------------------------------------------------- int __thiscall sub_932590(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // edi _DWORD *v12; // eax void **v13; // esi void *v14; // ST14_4 void *v15; // eax int result; // eax _DWORD *v17; // [esp+8h] [ebp-4h] v11 = this; v17 = this; v12 = operator new(0x34u); if ( v12 ) v13 = (void **)sub_932170(v12); else v13 = 0; sub_9321D0(v13, a2); v13[4] = (void *)(a3 & 0xFFFFFFF | 0x30000000); v13[5] = (void *)a4; v13[7] = (void *)a6; v13[6] = (void *)a5; sub_932270(v13, a7); if ( Src ) { v13[9] = (void *)DstSize; v13[10] = (void *)a9; if ( a11 ) { v14 = v13[11]; *((_BYTE *)v13 + 48) = 1; operator delete(v14); v15 = operator new(DstSize); v13[11] = v15; memcpy_s(v15, DstSize, Src, DstSize); } else { *((_BYTE *)v13 + 48) = 0; v13[11] = Src; } v11 = v17; } result = (*(int (__thiscall **)(_DWORD *, void **))(*v11 + 52))(v11, v13); v11[11] = result; if ( result ) { (*(void (__thiscall **)(void **, signed int))*v13)(v13, 1); result = v11[11]; } return result; } //----- (00932660) -------------------------------------------------------- int __thiscall sub_932660(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // ebx _DWORD *v12; // eax void **v13; // esi int v14; // eax void *v15; // ST14_4 void *v16; // eax int result; // eax v11 = this; v12 = operator new(0x34u); if ( v12 ) v13 = (void **)sub_932170(v12); else v13 = 0; sub_9321D0(v13, a2); v14 = a3 & 0xFFFFFFF | 0x10000000; switch ( DstSize ) { case 8u: v14 = a3 & 0xFFFFFFF | 0x10000005; goto LABEL_16; case 0xCu: v14 = a3 & 0xFFFFFFF | 0x10000006; goto LABEL_16; case 0x10u: v14 = a3 & 0xFFFFFFF | 0x10000007; goto LABEL_16; } if ( DstSize != 32 ) { if ( DstSize == 36 ) { v14 = a3 & 0xFFFFFFF | 0x10000008; goto LABEL_16; } if ( DstSize != 48 && DstSize != 64 ) goto LABEL_16; } v14 = a3 & 0xFFFFFFF | 0x10000009; LABEL_16: v13[5] = (void *)a4; v13[4] = (void *)v14; v13[6] = (void *)a5; v13[7] = (void *)a6; sub_932270(v13, a7); v13[9] = (void *)DstSize; v13[10] = (void *)a9; if ( a11 ) { v15 = v13[11]; *((_BYTE *)v13 + 48) = 1; operator delete(v15); v16 = operator new(DstSize); v13[11] = v16; memcpy_s(v16, DstSize, Src, DstSize); } else { *((_BYTE *)v13 + 48) = 0; v13[11] = Src; } result = (*(int (__thiscall **)(_DWORD *, void **))(*v11 + 52))(v11, v13); v11[11] = result; if ( result ) { (*(void (__thiscall **)(void **, signed int))*v13)(v13, 1); result = v11[11]; } return result; } //----- (00932760) -------------------------------------------------------- int __thiscall sub_932760(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // eax void **v12; // esi int v13; // edi void *v14; // ST14_4 void *v15; // eax int v16; // eax int result; // eax _DWORD *v18; // [esp+Ch] [ebp-4h] v18 = this; v11 = operator new(0x34u); if ( v11 ) v12 = (void **)sub_932170(v11); else v12 = 0; sub_9321D0(v12, a2); v12[5] = (void *)a4; v13 = a3 & 0xFFFFFFF | 0x40000000; v12[4] = (void *)v13; v12[6] = (void *)a5; v12[7] = (void *)a6; sub_932270(v12, a7); v12[9] = (void *)DstSize; v12[10] = (void *)a9; if ( a11 ) { v14 = v12[11]; *((_BYTE *)v12 + 48) = 1; operator delete(v14); v15 = operator new(DstSize); v12[11] = v15; memcpy_s(v15, DstSize, Src, DstSize); } else { *((_BYTE *)v12 + 48) = 0; v12[11] = Src; } v16 = (*(int (__stdcall **)(void **))(*v18 + 52))(v12); v18[11] = v16; if ( v16 ) { (*(void (__thiscall **)(void **, signed int))*v12)(v12, 1); result = v18[11]; } else { if ( !byte_BA6F80 ) sub_92C350(); sub_931760(a2, *(&dword_BA6F44 + (unsigned __int8)a3), DstSize, Src); result = v18[11]; } return result; } // BA6F80: using guessed type char byte_BA6F80; //----- (00932870) -------------------------------------------------------- int __thiscall sub_932870(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, char *a7) { _DWORD *v7; // edi _DWORD *v8; // eax void **v9; // esi int result; // eax v7 = this; v8 = operator new(0x34u); if ( v8 ) v9 = (void **)sub_932170(v8); else v9 = 0; sub_9321D0(v9, Src); v9[4] = (void *)(a3 & 0xFFFFFFF | 0x50000000); v9[5] = (void *)a4; v9[7] = (void *)a6; v9[6] = (void *)a5; sub_932270(v9, a7); result = (*(int (__thiscall **)(_DWORD *, void **))(*v7 + 52))(v7, v9); v7[11] = result; if ( result ) { (*(void (__thiscall **)(void **, signed int))*v9)(v9, 1); result = v7[11]; } return result; } //----- (009328F0) -------------------------------------------------------- int __thiscall sub_9328F0(_DWORD *this, char *Src, int a3, char *a4, int a5, int a6) { _DWORD *v6; // edi _DWORD *v7; // eax void **v8; // esi int v9; // eax int result; // eax v6 = this; v7 = operator new(0x34u); if ( v7 ) v8 = (void **)sub_932170(v7); else v8 = 0; sub_9321D0(v8, Src); v8[6] = (void *)a3; sub_932270(v8, a4); v8[5] = (void *)a5; v8[4] = (void *)(*((unsigned __int16 *)&dword_BA6EFC + a6) | 0x60000000); v9 = (*(int (__thiscall **)(_DWORD *, void **))(*v6 + 80))(v6, v8); v6[11] = v9; if ( v9 ) { (*(void (__thiscall **)(void **, signed int))*v8)(v8, 1); result = v6[11]; } else { result = (*(int (__thiscall **)(_DWORD *, void **))(*v6 + 52))(v6, v8); v6[11] = result; } return result; } // BA6EFC: using guessed type int dword_BA6EFC; //----- (00932980) -------------------------------------------------------- int __thiscall sub_932980(_DWORD *this, char *a2) { _DWORD *v2; // ebx unsigned int v3; // eax int v4; // edi int v5; // esi unsigned int v7; // [esp+Ch] [ebp-4h] v2 = this; v3 = this[6]; v4 = 0; v7 = v3; if ( !v3 ) return 0; while ( 1 ) { v5 = *(_DWORD *)(v2[4] + 4 * v4); if ( v5 ) break; LABEL_5: if ( ++v4 >= v3 ) return 0; } if ( _stricmp(a2, *(const char **)(v5 + 8)) ) { v3 = v7; goto LABEL_5; } return v5; } //----- (009329E0) -------------------------------------------------------- int __thiscall sub_9329E0(_DWORD *this, int a2) { return *(_DWORD *)(this[4] + 4 * a2); } //----- (009329F0) -------------------------------------------------------- BOOL __thiscall sub_9329F0(_DWORD *this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12) { _DWORD *v12; // esi void *v13; // ecx unsigned int v14; // eax int v15; // edi unsigned int v16; // eax int v17; // eax int v18; // ST2C_4 int v19; // ST30_4 int v20; // ST2C_4 int v21; // ST30_4 int v23; // [esp+4h] [ebp-Ch] unsigned int v24; // [esp+8h] [ebp-8h] char v25; // [esp+Fh] [ebp-1h] v12 = this; this[10] = a2; v25 = 1; v23 = sub_85AA60(a3, off_AC4D98); v14 = 0; v24 = 0; if ( v12[6] ) { do { v15 = *(_DWORD *)(v12[4] + 4 * v14); if ( v15 && (*(_DWORD *)(v15 + 24) != -1 || *(_DWORD *)(v15 + 32)) ) { v16 = *(_DWORD *)(v15 + 16) & 0xF0000000; switch ( v16 ) { case 0x20000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, _DWORD *, int, int, int, int, int, int, int, int))(*v12 + 60))( v12, a2, v15, a3, a4, a5, a6, a7, a8, a9, a10, a11); break; case 0x10000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, int))(*v12 + 64))(v12, a2, v15, a11); break; case 0x30000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, _DWORD *, int, int, int, int, int, int, int, int, int, int))(*v12 + 68))( v12, a2, v15, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, v23); break; case 0x40000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, int))(*v12 + 72))(v12, a2, v15, a11); break; case 0x50000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, _DWORD *, int, int, int, int, int, int))(*v12 + 76))( v12, a2, v15, a3, a4, a7, a8, a9, a10, a11); break; case 0x60000000u: v17 = (*(int (__thiscall **)(_DWORD *, int, int, _DWORD *, int, int, int, int, int, int, int, int))(*v12 + 84))( v12, a2, v15, a3, a4, a5, a6, a7, a8, a9, a10, a11); break; default: v17 = -2147483584; LABEL_8: switch ( v17 ) { case -2147483632: v20 = *(_DWORD *)(v15 + 8); nullsub_6(*(void **)(v15 + 12)); break; case -2147483584: v18 = *(_DWORD *)(v15 + 8); nullsub_6((void *)(*(_DWORD *)(v15 + 16) & 0xF0000000)); break; case -2147483568: v19 = *(_DWORD *)(v15 + 8); goto LABEL_26; case -2147483552: if ( byte_BA7140 ) { v21 = *(_DWORD *)(v15 + 8); nullsub_6(v13); } break; default: v13 = *(void **)(v15 + 8); LABEL_26: nullsub_6(v13); break; } v25 = 0; goto LABEL_28; } if ( v17 ) goto LABEL_8; } LABEL_28: v14 = v24 + 1; v24 = v14; } while ( v14 < v12[6] ); } return v25 == 0; } // BA7140: using guessed type char byte_BA7140; //----- (00932C90) -------------------------------------------------------- int __thiscall sub_932C90(_DWORD *this, char *a2) { _DWORD *v2; // edi unsigned int v3; // ebx int v4; // esi int v5; // eax v2 = this; v3 = this[6]; v4 = 0; if ( !v3 ) return -1; while ( 1 ) { v5 = *(_DWORD *)(v2[4] + 4 * v4); if ( v5 ) { if ( !_stricmp(a2, *(const char **)(v5 + 8)) ) break; } if ( ++v4 >= v3 ) return -1; } return v4; } //----- (00932CE0) -------------------------------------------------------- int __thiscall sub_932CE0(_DWORD *this, int a2) { int v2; // ebx _DWORD *v3; // esi int v4; // eax unsigned int v5; // edi int v6; // eax int result; // eax v2 = a2; v3 = this; v4 = (*(int (__stdcall **)(int))(*this + 48))(a2); v5 = v4; if ( v4 == -1 ) { v3[11] = -2147483632; result = v3[11]; } else { v6 = *(_DWORD *)(v3[4] + 4 * v4); if ( v6 ) { if ( (*(_DWORD *)(v6 + 16) & 0xF0000000) == 0x40000000 ) sub_931800(v2); } a2 = 0; sub_7FFF10(v3 + 3, v5, &a2); result = v3[11]; } return result; } //----- (00932D50) -------------------------------------------------------- int *__stdcall sub_932D50(_DWORD *a1, int a2) { int v2; // edi int *result; // eax int v4; // edi int v5; // edi int v6; // eax int v7; // edi float *v8; // eax double v9; // st7 float *v10; // eax double v11; // st7 float *v12; // eax double v13; // st7 float *v14; // eax double v15; // st6 v2 = a1[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v2) == 1 ) { dword_BA6FE0 = *(unsigned __int8 *)(a2 + 12); return &dword_BA6FE0; } v4 = a1[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v4) != 2 ) { v5 = a1[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v5) == 3 ) { v6 = *(_DWORD *)(a2 + 12); dword_BA6FE4 = v6; dword_BA6FE8 = v6; dword_BA6FEC = v6; dword_BA6FF0 = v6; return &dword_BA6FE4; } v7 = a1[4]; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) == 4 ) { flt_BA6FF4 = *(float *)(a2 + 12); result = (int *)&flt_BA6FF4; flt_BA6FF8 = flt_BA6FF4; flt_BA6FFC = flt_BA6FF4; flt_BA7000 = flt_BA6FF4; return result; } if ( (unsigned __int8)sub_92D690(a1) ) { v8 = *(float **)(a2 + 16); flt_BA6FF4 = *v8; flt_BA6FF8 = v8[1]; flt_BA6FFC = *v8; v9 = v8[1]; result = (int *)&flt_BA6FF4; flt_BA7000 = v9; return result; } if ( (unsigned __int8)sub_92D6C0(a1) ) { v10 = *(float **)(a2 + 16); flt_BA6FF4 = *v10; flt_BA6FF8 = v10[1]; v11 = v10[2]; result = (int *)&flt_BA6FF4; flt_BA6FFC = v11; flt_BA7000 = 1.0; return result; } if ( (unsigned __int8)sub_92D6F0(a1) ) { v12 = *(float **)(a2 + 16); flt_BA6FF4 = *v12; flt_BA6FF8 = v12[1]; flt_BA6FFC = v12[2]; v13 = v12[3]; result = (int *)&flt_BA6FF4; flt_BA7000 = v13; return result; } if ( (unsigned __int8)sub_92D720(a1) ) { v14 = *(float **)(a2 + 16); flt_BA7008 = *v14; flt_BA700C = v14[1]; flt_BA7010 = v14[2]; flt_BA7014 = 0.0; flt_BA7018 = v14[3]; flt_BA701C = v14[4]; flt_BA7020 = v14[5]; flt_BA7024 = 0.0; flt_BA7028 = v14[6]; flt_BA702C = v14[7]; v15 = v14[8]; result = (int *)&flt_BA7008; flt_BA7030 = v15; flt_BA7034 = 0.0; return result; } if ( (unsigned __int8)sub_92D750(a1) ) return *(int **)(a2 + 16); if ( (unsigned __int8)sub_92D780(a1) ) { flt_BA6FF4 = *(float *)(a2 + 12); flt_BA6FF8 = *(float *)(a2 + 16); flt_BA6FFC = *(float *)(a2 + 20); result = (int *)&flt_BA6FF4; flt_BA7000 = *(float *)(a2 + 24); return result; } sub_92D7B0(a1); } return 0; } // BA6F80: using guessed type char byte_BA6F80; // BA6FE0: using guessed type int dword_BA6FE0; // BA6FE4: using guessed type int dword_BA6FE4; // BA6FE8: using guessed type int dword_BA6FE8; // BA6FEC: using guessed type int dword_BA6FEC; // BA6FF0: using guessed type int dword_BA6FF0; // BA6FF4: using guessed type float flt_BA6FF4; // BA6FF8: using guessed type float flt_BA6FF8; // BA6FFC: using guessed type float flt_BA6FFC; // BA7000: using guessed type float flt_BA7000; // BA7008: using guessed type float flt_BA7008; // BA700C: using guessed type float flt_BA700C; // BA7010: using guessed type float flt_BA7010; // BA7014: using guessed type float flt_BA7014; // BA7018: using guessed type float flt_BA7018; // BA701C: using guessed type float flt_BA701C; // BA7020: using guessed type float flt_BA7020; // BA7024: using guessed type float flt_BA7024; // BA7028: using guessed type float flt_BA7028; // BA702C: using guessed type float flt_BA702C; // BA7030: using guessed type float flt_BA7030; // BA7034: using guessed type float flt_BA7034; //----- (00932FF0) -------------------------------------------------------- int *__stdcall sub_932FF0(int a1) { int *result; // eax int v2; // eax bool v3; // al float *v4; // esi float v5; // eax bool v6; // al int *v7; // esi bool v8; // al int *v9; // esi float *v10; // esi double v11; // st7 float *v12; // esi float *v13; // esi float *v14; // esi switch ( *(_DWORD *)(a1 + 36) / *(_DWORD *)(a1 + 40) ) { case 1: if ( (unsigned __int8)sub_92D600((_DWORD *)a1) ) { dword_BA6FE0 = **(unsigned __int8 **)(a1 + 44); result = &dword_BA6FE0; } else if ( (unsigned __int8)sub_92D630((_DWORD *)a1) ) { v2 = **(_DWORD **)(a1 + 44); dword_BA6FE4 = v2; dword_BA6FE8 = v2; dword_BA6FEC = v2; dword_BA6FF0 = v2; result = &dword_BA6FE4; } else { result = (int *)&flt_BA6FF4; flt_BA6FF4 = **(float **)(a1 + 44); flt_BA6FF8 = flt_BA6FF4; flt_BA6FFC = flt_BA6FF4; flt_BA7000 = flt_BA6FF4; } return result; case 2: v3 = sub_92D630((_DWORD *)a1); v4 = *(float **)(a1 + 44); if ( v3 ) { v5 = *v4; dword_BA6FE4 = LODWORD(v5); dword_BA6FE8 = *((_DWORD *)v4 + 1); dword_BA6FEC = LODWORD(v5); dword_BA6FF0 = dword_BA6FE8; result = &dword_BA6FE4; } else { result = (int *)&flt_BA6FF4; flt_BA6FF4 = *v4; flt_BA6FF8 = v4[1]; flt_BA6FFC = flt_BA6FF4; flt_BA7000 = flt_BA6FF8; } return result; case 3: v6 = sub_92D630((_DWORD *)a1); v7 = *(int **)(a1 + 44); if ( v6 ) { dword_BA6FE4 = *v7; dword_BA6FE8 = v7[1]; dword_BA6FEC = v7[2]; dword_BA6FF0 = 1; result = &dword_BA6FE4; } else { result = (int *)&flt_BA6FF4; flt_BA6FF4 = *(float *)v7; flt_BA6FF8 = *((float *)v7 + 1); flt_BA6FFC = *((float *)v7 + 2); flt_BA7000 = 1.0; } return result; case 4: v8 = sub_92D630((_DWORD *)a1); v9 = *(int **)(a1 + 44); if ( v8 ) { dword_BA6FE4 = *v9; dword_BA6FE8 = v9[1]; dword_BA6FEC = v9[2]; dword_BA6FF0 = v9[3]; result = &dword_BA6FE4; } else { result = (int *)&flt_BA6FF4; flt_BA6FF4 = *(float *)v9; flt_BA6FF8 = *((float *)v9 + 1); flt_BA6FFC = *((float *)v9 + 2); flt_BA7000 = *((float *)v9 + 3); } return result; case 8: v10 = *(float **)(a1 + 44); flt_BA7008 = *v10; flt_BA700C = v10[1]; flt_BA7010 = v10[2]; flt_BA7014 = v10[3]; flt_BA7018 = v10[4]; flt_BA701C = v10[5]; flt_BA7020 = v10[6]; flt_BA7024 = v10[7]; v11 = 0.0; flt_BA7028 = 0.0; flt_BA702C = 0.0; flt_BA7030 = 0.0; goto LABEL_17; case 9: v12 = *(float **)(a1 + 44); flt_BA7008 = *v12; flt_BA700C = v12[1]; flt_BA7010 = v12[2]; v11 = 0.0; flt_BA7014 = 0.0; flt_BA7018 = v12[3]; flt_BA701C = v12[4]; flt_BA7020 = v12[5]; flt_BA7024 = 0.0; flt_BA7028 = v12[6]; flt_BA702C = v12[7]; flt_BA7030 = v12[8]; LABEL_17: flt_BA7034 = v11; goto LABEL_18; case 12: v13 = *(float **)(a1 + 44); flt_BA7008 = *v13; flt_BA700C = v13[1]; flt_BA7010 = v13[2]; flt_BA7014 = v13[3]; flt_BA7018 = v13[4]; flt_BA701C = v13[5]; flt_BA7020 = v13[6]; flt_BA7024 = v13[7]; flt_BA7028 = v13[8]; flt_BA702C = v13[9]; flt_BA7030 = v13[10]; flt_BA7034 = v13[11]; v11 = 0.0; LABEL_18: flt_BA7038 = v11; result = (int *)&flt_BA7008; flt_BA703C = v11; flt_BA7040 = v11; flt_BA7044 = v11; break; case 16: v14 = *(float **)(a1 + 44); result = (int *)&flt_BA7008; flt_BA7008 = *v14; flt_BA700C = v14[1]; flt_BA7010 = v14[2]; flt_BA7014 = v14[3]; flt_BA7018 = v14[4]; flt_BA701C = v14[5]; flt_BA7020 = v14[6]; flt_BA7024 = v14[7]; flt_BA7028 = v14[8]; flt_BA702C = v14[9]; flt_BA7030 = v14[10]; flt_BA7034 = v14[11]; flt_BA7038 = v14[12]; flt_BA703C = v14[13]; flt_BA7040 = v14[14]; flt_BA7044 = v14[15]; break; default: result = 0; break; } return result; } // BA6FE0: using guessed type int dword_BA6FE0; // BA6FE4: using guessed type int dword_BA6FE4; // BA6FE8: using guessed type int dword_BA6FE8; // BA6FEC: using guessed type int dword_BA6FEC; // BA6FF0: using guessed type int dword_BA6FF0; // BA6FF4: using guessed type float flt_BA6FF4; // BA6FF8: using guessed type float flt_BA6FF8; // BA6FFC: using guessed type float flt_BA6FFC; // BA7000: using guessed type float flt_BA7000; // BA7008: using guessed type float flt_BA7008; // BA700C: using guessed type float flt_BA700C; // BA7010: using guessed type float flt_BA7010; // BA7014: using guessed type float flt_BA7014; // BA7018: using guessed type float flt_BA7018; // BA701C: using guessed type float flt_BA701C; // BA7020: using guessed type float flt_BA7020; // BA7024: using guessed type float flt_BA7024; // BA7028: using guessed type float flt_BA7028; // BA702C: using guessed type float flt_BA702C; // BA7030: using guessed type float flt_BA7030; // BA7034: using guessed type float flt_BA7034; // BA7038: using guessed type float flt_BA7038; // BA703C: using guessed type float flt_BA703C; // BA7040: using guessed type float flt_BA7040; // BA7044: using guessed type float flt_BA7044; //----- (00933400) -------------------------------------------------------- LONG __thiscall sub_933400(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // eax int v3; // esi int v4; // eax unsigned int v6; // [esp+Ch] [ebp-4h] v1 = this; v2 = 0; *this = &NiD3DShaderConstantMap::`vftable'; v6 = 0; if ( this[5] ) { do { v3 = *(_DWORD *)(v1[4] + 4 * v2); if ( v3 ) { InterlockedIncrement((volatile LONG *)(v3 + 4)); if ( (*(_DWORD *)(v3 + 16) & 0xF0000000) == 0x40000000 ) sub_931800(*(_DWORD *)(v3 + 8)); if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } v2 = v6 + 1; v6 = v2; } while ( v2 < v1[5] ); } sub_80C6B0(v1 + 3); v4 = v1[12]; v1[13] = 0; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4); v1[12] = 0; v1[14] = 0; sub_930600(v1 + 3); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A45D54: using guessed type void *NiD3DShaderConstantMap::`vftable'; //----- (009334C0) -------------------------------------------------------- signed int __thiscall sub_9334C0(_DWORD *this, LONG *a2) { _DWORD *v2; // edi signed int result; // eax unsigned int v4; // ebx unsigned int v5; // esi int v6; // edx _DWORD *v7; // eax int v8; // ebx LONG v9; // eax int v10; // [esp+8h] [ebp-4h] v2 = this; if ( *a2 == 0 ) return -1; v4 = this[3]; v5 = 0; if ( v4 ) { v6 = this[1]; v10 = this[1]; v7 = (_DWORD *)this[1]; while ( *v7 ) { ++v5; ++v7; if ( v5 >= v4 ) goto LABEL_7; } v8 = *(_DWORD *)(v6 + 4 * v5); if ( v8 != *a2 ) { if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v6 = v10; } v9 = *a2; *(_DWORD *)(v6 + 4 * v5) = *a2; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } ++v2[4]; result = v5; } else { LABEL_7: if ( v4 >= this[2] ) sub_81A750(this, v4 + this[5]); sub_7FFF10(v2, v4, a2); result = v4; } return result; } //----- (00933590) -------------------------------------------------------- int __thiscall sub_933590(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi bool v4; // bl v2 = a2; v3 = this; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v4 = sub_9334C0(v3 + 3, &a2) == -1; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); if ( v4 ) v3[11] = -2147483600; return v3[11]; } //----- (009335F0) -------------------------------------------------------- _DWORD *__thiscall sub_9335F0(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = -1; this[3] = 17; this[4] = 0; this[5] = 0; this[6] = 0; return result; } //----- (00933620) -------------------------------------------------------- char __thiscall sub_933620(void *this, int a2, int a3, int a4, int a5, int a6) { signed int v6; // edx signed int v7; // eax char result; // al v6 = 0; switch ( a4 ) { case 0: v7 = 0; goto LABEL_17; case 1: v7 = 1; goto LABEL_17; case 2: v7 = 2; goto LABEL_17; case 3: v7 = 3; goto LABEL_17; case 4: v7 = 10; goto LABEL_17; case 5: v7 = 5; goto LABEL_17; case 6: v7 = 5; v6 = 1; goto LABEL_17; case 7: v7 = 5; v6 = 2; goto LABEL_17; case 8: v7 = 5; v6 = 3; goto LABEL_17; case 9: v7 = 5; v6 = 4; goto LABEL_17; case 10: v7 = 5; v6 = 5; goto LABEL_17; case 11: v7 = 5; v6 = 6; goto LABEL_17; case 12: v7 = 5; v6 = 7; goto LABEL_17; case 13: v7 = 6; goto LABEL_17; case 14: v7 = 7; LABEL_17: result = (*(int (__stdcall **)(int, int, int, int, int, signed int, signed int, _DWORD))(*(_DWORD *)this + 60))( a6, a2, a3, a4, a5, v7, v6, 0); break; default: result = 0; break; } return result; } //----- (00933720) -------------------------------------------------------- char __thiscall sub_933720(int this, unsigned int a2, unsigned int a3, int a4, int a5, int a6, int a7, int a8, int a9) { int v9; // esi _DWORD *v11; // eax int v12; // eax v9 = this; if ( a3 >= *(_DWORD *)(this + 28) || a2 >= *(_DWORD *)(this + 32) ) return 0; v11 = (_DWORD *)(*(_DWORD *)(*(_DWORD *)(this + 36) + 16 * a2 + 8) + 28 * a3); if ( v11[2] != a5 || v11[3] != a6 || v11[5] != a7 || v11[6] != a8 || v11[4] != a9 ) { v11[3] = a6; v11[2] = a5; v11[5] = a7; v11[6] = a8; v11[4] = a9; if ( a5 == 1 ) v11[3] = 2; v12 = *(_DWORD *)(this + 48); *(_BYTE *)(this + 40) = 1; if ( v12 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v12 + 8))(v12); *(_DWORD *)(v9 + 48) = 0; } } return 1; } //----- (009337C0) -------------------------------------------------------- char __thiscall sub_9337C0(int this, unsigned int a2, unsigned int a3) { int v3; // esi int v5; // eax int v6; // eax v3 = this; if ( a2 >= *(_DWORD *)(this + 28) || a3 >= *(_DWORD *)(this + 32) ) return 0; v5 = *(_DWORD *)(*(_DWORD *)(this + 36) + 16 * a3 + 8) + 28 * a2; *(_DWORD *)(v5 + 8) = -1; *(_DWORD *)(v5 + 12) = 17; v6 = *(_DWORD *)(this + 48); *(_BYTE *)(this + 40) = 1; if ( v6 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(v6); *(_DWORD *)(v3 + 48) = 0; } return 1; } //----- (00933830) -------------------------------------------------------- char __thiscall sub_933830(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi int v4; // eax unsigned int v5; // ecx int v6; // edi int v7; // edx int v8; // eax int v9; // eax v2 = this; if ( a2 >= this[8] ) return 0; v4 = this[9] + 16 * a2; v5 = 0; v6 = v4; if ( v2[7] ) { v7 = 0; do { v8 = *(_DWORD *)(v6 + 8); *(_DWORD *)(v8 + v7 + 8) = -1; *(_DWORD *)(v8 + v7 + 12) = 17; ++v5; v7 += 28; } while ( v5 < v2[7] ); } v9 = v2[12]; *((_BYTE *)v2 + 40) = 1; if ( v9 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 8))(v9); v2[12] = 0; } return 1; } //----- (009338A0) -------------------------------------------------------- int __thiscall sub_9338A0(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi v2 = this; if ( a2 >= this[8] ) return 0; (*(void (**)(void))(*this + 100))(); return *(_DWORD *)(v2[9] + 16 * a2 + 12); } //----- (009338D0) -------------------------------------------------------- char __thiscall sub_9338D0(_BYTE *this) { return this[52]; } //----- (009338E0) -------------------------------------------------------- BOOL __thiscall sub_9338E0(_DWORD *this, _DWORD *a2, _DWORD *a3) { _DWORD *v3; // esi v3 = this; *a2 = (*(int (**)(void))(*this + 100))(); *a3 = v3[8]; return *a2 != 0; } //----- (00933910) -------------------------------------------------------- char __cdecl sub_933910(int a1, unsigned int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6) { char result; // al switch ( a1 ) { case 0: *a3 = 0; *a4 = 2; *a5 = 0; *a6 = 0; result = 1; break; case 1: *a3 = 1; *a4 = 2; *a5 = 1; *a6 = 0; result = 1; break; case 2: *a3 = 2; *a4 = 4; *a5 = 2; *a6 = 0; result = 1; break; case 3: *a3 = 3; *a4 = 2; *a5 = 3; *a6 = 0; result = 1; break; case 5: if ( a2 > 7 ) goto LABEL_11; *a3 = a2 + 5; *a4 = 1; *a5 = 5; *a6 = 0; result = 1; break; case 6: *a3 = 13; *a4 = 2; *a5 = 6; *a6 = 0; result = 1; break; case 7: *a3 = 14; *a4 = 2; *a5 = 7; *a6 = 0; result = 1; break; case 10: *a3 = 4; *a4 = 4; *a5 = 10; *a6 = 0; result = 1; break; default: LABEL_11: result = 0; break; } return result; } //----- (00933AB0) -------------------------------------------------------- int __cdecl sub_933AB0(int a1) { int v1; // esi float *v2; // ebx _WORD *v3; // edi size_t v4; // eax unsigned int v6; // ecx _WORD *v7; // edi int i; // ecx unsigned __int16 v9; // [esp+Ch] [ebp-1Ch] int v10; // [esp+10h] [ebp-18h] float *v11; // [esp+14h] [ebp-14h] unsigned __int16 v12; // [esp+18h] [ebp-10h] int v13; // [esp+1Ch] [ebp-Ch] unsigned __int16 v14; // [esp+20h] [ebp-8h] int v15; // [esp+24h] [ebp-4h] _WORD *v16; // [esp+30h] [ebp+8h] v1 = a1; v2 = *(float **)(a1 + 16); v3 = *(_WORD **)(a1 + 36); v15 = 0; v11 = v2; v16 = *(_WORD **)(a1 + 36); if ( v2 ) { v9 = 2 * (*(_DWORD *)v1 != 6) + 2; if ( (signed __int16)(*(_WORD *)(v1 + 4) - v9) <= 0 ) v14 = *(_WORD *)(v1 + 4); else v14 = 2 * (*(_DWORD *)v1 != 6) + 2; v10 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v12 = 0; if ( v14 > 0u ) { v13 = v14; v12 = v14; do { *v3 = (signed int)*v2; ++v3; ++v2; --v13; } while ( v13 ); v2 = v11; } if ( v12 < v9 ) { v6 = (unsigned int)(unsigned __int16)(v9 - v12) >> 1; memset(v3, 0, 4 * v6); v7 = &v3[2 * v6]; for ( i = ((_BYTE)v9 - (_BYTE)v12) & 1; i; --i ) { *v7 = 0; ++v7; } } v16 = (_WORD *)((char *)v16 + *(_DWORD *)(v1 + 32)); v2 = (float *)((char *)v2 + *(_DWORD *)(v1 + 24)); v15 += *(_DWORD *)(v1 + 28); v11 = v2; if ( (unsigned __int16)++v10 >= *(_WORD *)(v1 + 8) ) break; v3 = v16; } } return v15; } if ( *(_WORD *)(v1 + 8) <= 0u ) return v15; v4 = *(_DWORD *)(v1 + 28); do { memset(v3, 0, v4); v4 = *(_DWORD *)(v1 + 28); v3 = (_WORD *)((char *)v3 + *(_DWORD *)(v1 + 32)); v15 += v4; v2 = (float *)((char *)v2 + 1); } while ( (unsigned __int16)v2 < *(_WORD *)(v1 + 8) ); return v15; } //----- (00933BE0) -------------------------------------------------------- int __cdecl sub_933BE0(int a1) { int v1; // esi _WORD *v2; // eax char *v3; // ebx int v4; // edi size_t v5; // eax int v7; // ecx _WORD *v8; // edi unsigned int v9; // ecx _WORD *v10; // edi int i; // ecx unsigned __int16 v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] _WORD *v14; // [esp+14h] [ebp-Ch] unsigned __int16 v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] int v17; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_WORD **)(a1 + 16); v3 = *(char **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v12 = 2 * (*(_DWORD *)a1 != 6) + 2; v7 = v12; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 4 - v7) <= 0 ) v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 4); v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v8 = v3; v15 = 0; if ( (unsigned __int16)v7 > 0u ) { v7 = (unsigned __int16)v7; v15 = v7; do { *v8 = *v2; ++v8; v2 += 2; --v7; } while ( v7 ); } if ( v15 < v12 ) { v9 = (unsigned int)(unsigned __int16)(v12 - v15) >> 1; memset(v8, 0, 4 * v9); v10 = &v8[2 * v9]; for ( i = ((_BYTE)v12 - (_BYTE)v15) & 1; i; --i ) { *v10 = 0; ++v10; } } v16 += *(_DWORD *)(v1 + 28); v2 = (_WORD *)((char *)v14 + *(_DWORD *)(v1 + 24)); v3 += *(_DWORD *)(v1 + 32); v14 = (_WORD *)((char *)v14 + *(_DWORD *)(v1 + 24)); if ( (unsigned __int16)++v13 >= *(_WORD *)(v1 + 8) ) break; LOWORD(v7) = v17; } } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (00933CF0) -------------------------------------------------------- int __cdecl sub_933CF0(int a1) { int v1; // esi _WORD *v2; // eax char *v3; // ebx int v4; // edi size_t v5; // eax int v7; // ecx _WORD *v8; // edi unsigned int v9; // ecx _WORD *v10; // edi int i; // ecx unsigned __int16 v12; // [esp+Ch] [ebp-14h] int v13; // [esp+10h] [ebp-10h] _WORD *v14; // [esp+14h] [ebp-Ch] unsigned __int16 v15; // [esp+18h] [ebp-8h] int v16; // [esp+1Ch] [ebp-4h] int v17; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_WORD **)(a1 + 16); v3 = *(char **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v12 = 2 * (*(_DWORD *)a1 != 6) + 2; v7 = v12; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 8 - v7) <= 0 ) v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 8); v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v8 = v3; v15 = 0; if ( (unsigned __int16)v7 > 0u ) { v7 = (unsigned __int16)v7; v15 = v7; do { *v8 = *v2; ++v8; v2 += 2; --v7; } while ( v7 ); } if ( v15 < v12 ) { v9 = (unsigned int)(unsigned __int16)(v12 - v15) >> 1; memset(v8, 0, 4 * v9); v10 = &v8[2 * v9]; for ( i = ((_BYTE)v12 - (_BYTE)v15) & 1; i; --i ) { *v10 = 0; ++v10; } } v16 += *(_DWORD *)(v1 + 28); v2 = (_WORD *)((char *)v14 + *(_DWORD *)(v1 + 24)); v3 += *(_DWORD *)(v1 + 32); v14 = (_WORD *)((char *)v14 + *(_DWORD *)(v1 + 24)); if ( (unsigned __int16)++v13 >= *(_WORD *)(v1 + 8) ) break; LOWORD(v7) = v17; } } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (00933E00) -------------------------------------------------------- int __cdecl sub_933E00(int a1) { int v1; // esi unsigned __int8 *v2; // eax char *v3; // ebx int v4; // edi size_t v5; // eax bool v7; // zf unsigned __int16 v8; // cx _WORD *v9; // edx int v10; // ecx unsigned int v11; // ecx _WORD *v12; // edi int i; // ecx unsigned __int16 v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] unsigned __int16 v16; // [esp+14h] [ebp-Ch] int v17; // [esp+18h] [ebp-8h] unsigned __int8 *v18; // [esp+1Ch] [ebp-4h] int v19; // [esp+28h] [ebp+8h] int v20; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(unsigned __int8 **)(a1 + 16); v3 = *(char **)(a1 + 36); v4 = 0; v17 = 0; v18 = v2; if ( v2 ) { v7 = *(_DWORD *)a1 == 6; v20 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 20); v8 = 2 * !v7 + 2; v14 = 2 * !v7 + 2; if ( (signed __int16)(v20 - v8) > 0 ) v20 = v8; v15 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v9 = v3; v16 = 0; if ( (unsigned __int16)v20 > 0u ) { v10 = (unsigned __int16)v20; v16 = v20; do { *v9 = *v2; ++v9; ++v2; --v10; } while ( v10 ); v2 = v18; } if ( v16 < v14 ) { v11 = (unsigned int)(unsigned __int16)(v14 - v16) >> 1; memset(v9, 0, 4 * v11); v12 = &v9[2 * v11]; for ( i = ((_BYTE)v14 - (_BYTE)v16) & 1; i; --i ) { *v12 = 0; ++v12; } v2 = v18; } v2 += *(_DWORD *)(v1 + 24); v4 = *(_DWORD *)(v1 + 28) + v17; v3 += *(_DWORD *)(v1 + 32); v18 = v2; v17 += *(_DWORD *)(v1 + 28); ++v15; } while ( (unsigned __int16)v15 < *(_WORD *)(v1 + 8) ); } return v4; } v19 = 0; if ( *(_WORD *)(v1 + 8) <= 0u ) return v4; v5 = *(_DWORD *)(v1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(v1 + 28); v3 += *(_DWORD *)(v1 + 32); v4 += v5; ++v19; } while ( (unsigned __int16)v19 < *(_WORD *)(v1 + 8) ); return v4; } //----- (00933F30) -------------------------------------------------------- int __cdecl sub_933F30(int a1) { int v1; // esi unsigned __int8 *v2; // eax char *v3; // ebx int v4; // edi size_t v5; // eax bool v7; // zf unsigned __int16 v8; // cx _WORD *v9; // edx int v10; // ecx unsigned int v11; // ecx _WORD *v12; // edi int i; // ecx unsigned __int16 v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] unsigned __int16 v16; // [esp+14h] [ebp-Ch] int v17; // [esp+18h] [ebp-8h] unsigned __int8 *v18; // [esp+1Ch] [ebp-4h] int v19; // [esp+28h] [ebp+8h] int v20; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(unsigned __int8 **)(a1 + 16); v3 = *(char **)(a1 + 36); v4 = 0; v17 = 0; v18 = v2; if ( v2 ) { v7 = *(_DWORD *)a1 == 6; v20 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 24); v8 = 2 * !v7 + 2; v14 = 2 * !v7 + 2; if ( (signed __int16)(v20 - v8) > 0 ) v20 = v8; v15 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v9 = v3; v16 = 0; if ( (unsigned __int16)v20 > 0u ) { v10 = (unsigned __int16)v20; v16 = v20; do { *v9 = *v2; ++v9; ++v2; --v10; } while ( v10 ); v2 = v18; } if ( v16 < v14 ) { v11 = (unsigned int)(unsigned __int16)(v14 - v16) >> 1; memset(v9, 0, 4 * v11); v12 = &v9[2 * v11]; for ( i = ((_BYTE)v14 - (_BYTE)v16) & 1; i; --i ) { *v12 = 0; ++v12; } v2 = v18; } v2 += *(_DWORD *)(v1 + 24); v4 = *(_DWORD *)(v1 + 28) + v17; v3 += *(_DWORD *)(v1 + 32); v18 = v2; v17 += *(_DWORD *)(v1 + 28); ++v15; } while ( (unsigned __int16)v15 < *(_WORD *)(v1 + 8) ); } return v4; } v19 = 0; if ( *(_WORD *)(v1 + 8) <= 0u ) return v4; v5 = *(_DWORD *)(v1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(v1 + 28); v3 += *(_DWORD *)(v1 + 32); v4 += v5; ++v19; } while ( (unsigned __int16)v19 < *(_WORD *)(v1 + 8) ); return v4; } //----- (00934060) -------------------------------------------------------- int __cdecl sub_934060(int a1) { float *v1; // ebx char *v2; // edi int v3; // ebx size_t v4; // eax float *v6; // edx char *v7; // ecx int v8; // ebx double v9; // st7 int v10; // [esp+10h] [ebp-14h] float *v11; // [esp+14h] [ebp-10h] unsigned __int16 v12; // [esp+18h] [ebp-Ch] unsigned __int16 v13; // [esp+1Ch] [ebp-8h] int v14; // [esp+20h] [ebp-4h] v1 = *(float **)(a1 + 16); v2 = *(char **)(a1 + 36); v14 = 0; v11 = v1; if ( v1 ) { v13 = 4; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 4) <= 0 ) v13 = *(_WORD *)(a1 + 4); v10 = 0; if ( *(_WORD *)(a1 + 8) > 0u ) { do { v6 = v1; v7 = v2; v12 = 0; if ( v13 <= 0u ) goto LABEL_18; v8 = v13; v12 = v13; do { v9 = *v6; ++v7; ++v6; --v8; *(v7 - 1) = (signed int)v9; } while ( v8 ); v1 = v11; if ( v13 < 4u ) LABEL_18: memset(v7, 0, (unsigned __int16)(4 - v12)); v1 = (float *)((char *)v1 + *(_DWORD *)(a1 + 24)); v2 += *(_DWORD *)(a1 + 32); v14 += *(_DWORD *)(a1 + 28); v11 = v1; ++v10; } while ( (unsigned __int16)v10 < *(_WORD *)(a1 + 8) ); } return v14; } v3 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v4 = *(_DWORD *)(a1 + 28); do { memset(v2, 0, v4); v4 = *(_DWORD *)(a1 + 28); v2 += *(_DWORD *)(a1 + 32); v14 += v4; ++v3; } while ( (unsigned __int16)v3 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934180) -------------------------------------------------------- int __cdecl sub_934180(int a1) { int v1; // esi _BYTE *v2; // ebx _BYTE *v3; // edi int v4; // ebx size_t v5; // eax signed int v7; // eax _BYTE *v8; // ecx _BYTE *v9; // eax int v10; // edx int v11; // [esp+Ch] [ebp-10h] _BYTE *v12; // [esp+10h] [ebp-Ch] __int16 v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_BYTE **)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v14 = 0; v12 = v2; if ( v2 ) { v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 4); v15 = 4; if ( (signed __int16)(v7 - 4) <= 0 ) v15 = v7; v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v13 = 0; if ( (unsigned __int16)v15 <= 0u ) goto LABEL_18; v10 = (unsigned __int16)v15; v13 = v15; do { *v9++ = *v8; v8 += 4; --v10; } while ( v10 ); v2 = v12; if ( (unsigned __int16)v15 < 4u ) LABEL_18: memset(v9, 0, (unsigned __int16)(4 - v13)); v14 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v12 = v2; ++v11; } while ( (unsigned __int16)v11 < *(_WORD *)(v1 + 8) ); } return v14; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934280) -------------------------------------------------------- int __cdecl sub_934280(int a1) { int v1; // esi _BYTE *v2; // ebx _BYTE *v3; // edi int v4; // ebx size_t v5; // eax signed int v7; // eax _BYTE *v8; // ecx _BYTE *v9; // eax int v10; // edx int v11; // [esp+Ch] [ebp-10h] _BYTE *v12; // [esp+10h] [ebp-Ch] __int16 v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_BYTE **)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v14 = 0; v12 = v2; if ( v2 ) { v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 8); v15 = 4; if ( (signed __int16)(v7 - 4) <= 0 ) v15 = v7; v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v13 = 0; if ( (unsigned __int16)v15 <= 0u ) goto LABEL_18; v10 = (unsigned __int16)v15; v13 = v15; do { *v9++ = *v8; v8 += 4; --v10; } while ( v10 ); v2 = v12; if ( (unsigned __int16)v15 < 4u ) LABEL_18: memset(v9, 0, (unsigned __int16)(4 - v13)); v14 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v12 = v2; ++v11; } while ( (unsigned __int16)v11 < *(_WORD *)(v1 + 8) ); } return v14; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934380) -------------------------------------------------------- int __cdecl sub_934380(int a1) { int v1; // esi _BYTE *v2; // ebx _BYTE *v3; // edi int v4; // ebx size_t v5; // eax signed int v7; // eax _BYTE *v8; // ecx _BYTE *v9; // eax int v10; // edx int v11; // [esp+Ch] [ebp-10h] _BYTE *v12; // [esp+10h] [ebp-Ch] __int16 v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_BYTE **)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v14 = 0; v12 = v2; if ( v2 ) { v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 12); v15 = 4; if ( (signed __int16)(v7 - 4) <= 0 ) v15 = v7; v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v13 = 0; if ( (unsigned __int16)v15 <= 0u ) goto LABEL_18; v10 = (unsigned __int16)v15; v13 = v15; do { *v9++ = *v8; v8 += 2; --v10; } while ( v10 ); v2 = v12; if ( (unsigned __int16)v15 < 4u ) LABEL_18: memset(v9, 0, (unsigned __int16)(4 - v13)); v14 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v12 = v2; ++v11; } while ( (unsigned __int16)v11 < *(_WORD *)(v1 + 8) ); } return v14; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934480) -------------------------------------------------------- int __cdecl sub_934480(int a1) { int v1; // esi _BYTE *v2; // ebx _BYTE *v3; // edi int v4; // ebx size_t v5; // eax signed int v7; // eax _BYTE *v8; // ecx _BYTE *v9; // eax int v10; // edx int v11; // [esp+Ch] [ebp-10h] _BYTE *v12; // [esp+10h] [ebp-Ch] __int16 v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_BYTE **)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v14 = 0; v12 = v2; if ( v2 ) { v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 16); v15 = 4; if ( (signed __int16)(v7 - 4) <= 0 ) v15 = v7; v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v13 = 0; if ( (unsigned __int16)v15 <= 0u ) goto LABEL_18; v10 = (unsigned __int16)v15; v13 = v15; do { *v9++ = *v8; v8 += 2; --v10; } while ( v10 ); v2 = v12; if ( (unsigned __int16)v15 < 4u ) LABEL_18: memset(v9, 0, (unsigned __int16)(4 - v13)); v14 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v12 = v2; ++v11; } while ( (unsigned __int16)v11 < *(_WORD *)(v1 + 8) ); } return v14; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934580) -------------------------------------------------------- int __cdecl sub_934580(int a1) { int v1; // esi char *v2; // ebx int v3; // edi int v4; // ebx size_t v5; // eax rsize_t v7; // eax int v8; // [esp+Ch] [ebp-Ch] signed __int16 v9; // [esp+10h] [ebp-8h] int v10; // [esp+14h] [ebp-4h] rsize_t v11; // [esp+20h] [ebp+8h] v1 = a1; v2 = *(char **)(a1 + 16); v3 = *(_DWORD *)(a1 + 36); v10 = 0; if ( v2 ) { if ( (signed __int16)(*(_WORD *)(a1 + 4) - 24) < 0 || *(_WORD *)(a1 + 4) == 24 ) { v9 = *(_WORD *)(a1 + 4) - 20; v11 = *(_DWORD *)(a1 + 20); v7 = v11; } else { v7 = *(_DWORD *)(a1 + 28); v9 = 4; v11 = *(_DWORD *)(a1 + 28); } v8 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { memcpy_s((void *)v3, v7, v2, v7); if ( (unsigned __int16)v9 < 4u ) memset((void *)(v3 + 1), 0, (unsigned __int16)(4 - v9)); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v10 += *(_DWORD *)(v1 + 28); if ( (unsigned __int16)++v8 >= *(_WORD *)(v1 + 8) ) break; v7 = v11; } } return v10; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v10; v5 = *(_DWORD *)(a1 + 28); do { memset((void *)v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v10 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v10; } //----- (00934670) -------------------------------------------------------- int __cdecl sub_934670(int a1) { int v1; // esi char *v2; // ebx char *v3; // edi int v4; // ebx size_t v5; // eax rsize_t v7; // eax int v8; // [esp+Ch] [ebp-Ch] signed __int16 v9; // [esp+10h] [ebp-8h] int v10; // [esp+14h] [ebp-4h] rsize_t v11; // [esp+20h] [ebp+8h] v1 = a1; v2 = *(char **)(a1 + 16); v3 = *(char **)(a1 + 36); v10 = 0; if ( v2 ) { if ( (signed __int16)(*(_WORD *)(a1 + 4) - 28) < 0 || *(_WORD *)(a1 + 4) == 28 ) { v9 = *(_WORD *)(a1 + 4) - 24; v11 = *(_DWORD *)(a1 + 20); v7 = v11; } else { v7 = *(_DWORD *)(a1 + 28); v9 = 4; v11 = *(_DWORD *)(a1 + 28); } v8 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { memcpy_s(v3, v7, v2, v7); if ( (unsigned __int16)v9 < 4u ) memset(&v3[v11], 0, (unsigned __int16)(4 - v9)); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v10 += *(_DWORD *)(v1 + 28); if ( (unsigned __int16)++v8 >= *(_WORD *)(v1 + 8) ) break; v7 = v11; } } return v10; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v10; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v10 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v10; } //----- (00934760) -------------------------------------------------------- _DWORD *__cdecl sub_934760(int a1, int a2, unsigned int a3) { _DWORD *v4; // eax _DWORD *v5; // esi if ( a3 > *(_DWORD *)(a1 + 1252) ) return 0; v4 = operator new(0x38u); v5 = v4; if ( !v4 ) goto LABEL_6; sub_93D040(v4); *v5 = &NiDX9ShaderDeclaration::`vftable'; v5[11] = 0; v5[12] = 0; *((_BYTE *)v5 + 52) = 0; if ( !sub_93DB90(v5, a1, a2, a3) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); LABEL_6: v5 = 0; } return v5; } // A46BE4: using guessed type void *NiDX9ShaderDeclaration::`vftable'; //----- (009347D0) -------------------------------------------------------- _DWORD *__thiscall sub_9347D0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 int v4; // eax v2 = this; v3 = (void *)*((_DWORD *)this + 11); *(_DWORD *)this = &NiDX9ShaderDeclaration::`vftable'; operator delete(v3); v4 = v2[12]; if ( v4 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(v2[12]); v2[12] = 0; } sub_93DB20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A46BE4: using guessed type void *NiDX9ShaderDeclaration::`vftable'; //----- (00934820) -------------------------------------------------------- int __thiscall sub_934820(_DWORD *this, int a2, _DWORD *a3, int a4, signed int a5, int a6, unsigned int a7, int a8) { _DWORD *v8; // ebx int v9; // ecx unsigned __int8 (__thiscall *v10)(_DWORD *, int *, int *); // edx int v12; // edi int v13; // eax int v14; // eax int v15; // edi int v16; // ecx int v17; // esi int v18; // edi int v19; // eax int v20; // edx int v21; // ecx int v22; // eax bool v23; // zf int v24; // [esp+Ch] [ebp-54h] char *v25; // [esp+10h] [ebp-50h] int v26; // [esp+14h] [ebp-4Ch] void *v27; // [esp+18h] [ebp-48h] void *v28; // [esp+1Ch] [ebp-44h] unsigned int v29; // [esp+20h] [ebp-40h] void *v30; // [esp+24h] [ebp-3Ch] int v31; // [esp+28h] [ebp-38h] int v32; // [esp+2Ch] [ebp-34h] _DWORD *v33; // [esp+30h] [ebp-30h] int v34; // [esp+34h] [ebp-2Ch] int v35; // [esp+38h] [ebp-28h] int v36; // [esp+3Ch] [ebp-24h] char v37; // [esp+42h] [ebp-1Eh] char v38; // [esp+43h] [ebp-1Dh] int v39; // [esp+44h] [ebp-1Ch] unsigned int v40; // [esp+54h] [ebp-Ch] v8 = this; v33 = a3; v34 = a2; v26 = a4; v36 = a6; v32 = a8; if ( a4 ) v9 = *(unsigned __int16 *)(a4 + 28); else v9 = (*(unsigned __int16 (**)(void))(*(_DWORD *)a2 + 64))(); v35 = v9; if ( (_WORD)v9 ) { v10 = *(unsigned __int8 (__thiscall **)(_DWORD *, int *, int *))(*v8 + 96); v31 = 0; v24 = 0; if ( !v10(v8, &v31, &v24) ) return 0; if ( a4 ) v12 = *(_DWORD *)(a4 + 40); else v12 = *(_DWORD *)(v34 + 60); sub_9368B0((_DWORD *)v12, v31); if ( a7 < *(_DWORD *)(v12 + 28) ) *(_DWORD *)(*(_DWORD *)(v12 + 32) + 4 * a7) = *(_DWORD *)(v8[9] + 16 * a7 + 12); if ( *(_BYTE *)(v8[2] + 976) ) *(_BYTE *)(v12 + 16) = (*(int (__thiscall **)(_DWORD *))(*v8 + 88))(v8); v37 = 1; if ( v32 ) { v37 = 0; } else { if ( v36 && (v13 = *(_DWORD *)(v36 + 8)) != 0 && (*(_WORD *)(v34 + 50) & 0xF000) != -32768 && ((*(void (__stdcall **)(int, int *))(*(_DWORD *)v13 + 52))(v13, &v39), v39 == 100) && (v14 = (*(int (__thiscall **)(_DWORD *, unsigned int))(*v8 + 80))(v8, a7), v40 >= (unsigned int)(unsigned __int16)v35 * v14) ) { v15 = v36; } else { v16 = v8[3]; if ( !sub_938390((_DWORD *)v12, a7) ) return 0; v36 = sub_91DB60((_DWORD *)v12, a7); a5 = 4095; v15 = v36; } v32 = sub_9383E0( (char *)v8[3], *(_DWORD *)(v15 + 8), *(_DWORD *)(v15 + 12), *(_DWORD *)(v15 + 20), *(_DWORD *)(v15 + 16)); } if ( !v33 || (v38 = 1, v26) ) v38 = 0; v23 = v8[9] + 16 * a7 == 0; v17 = v8[9] + 16 * a7; v28 = 0; v30 = 0; v27 = 0; v25 = 0; if ( !v23 ) { v29 = 0; if ( v8[7] > 0u ) { v18 = 0; do { v19 = *(_DWORD *)(v17 + 8); v20 = *(_DWORD *)(v19 + v18 + 8); v21 = v32 + *(_DWORD *)(v19 + v18 + 4); v22 = v18 + v19; switch ( v20 ) { case 0: if ( a5 & 1 ) { if ( !v38 ) goto LABEL_47; v28 = (void *)v21; } break; case 3: if ( a5 & 2 ) { if ( !v38 ) goto LABEL_47; v30 = (void *)v21; } break; case 4: v23 = (a5 & 4) == 0; goto LABEL_46; case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: v23 = (a5 & 8) == 0; LABEL_46: if ( !v23 ) goto LABEL_47; break; case 13: if ( !(a5 & 2) ) break; if ( !v38 ) goto LABEL_47; v25 = (char *)v21; break; case 14: if ( !(a5 & 2) ) break; if ( !v38 ) goto LABEL_47; v27 = (void *)v21; break; default: LABEL_47: sub_93E2F0(v35, v34, (int)v33, v26, v22, *(_DWORD *)(v17 + 12), v21); break; } v18 += 28; ++v29; } while ( v29 < v8[7] ); } } if ( v38 ) sub_871EB0( v33, *(_DWORD *)(v34 + 32), *(_DWORD *)(v34 + 36), *(unsigned __int16 *)(v34 + 12), v28, v30, v27, v25, *(_DWORD *)(v17 + 12)); if ( v37 && !sub_9384C0(v8[3], *(_DWORD *)(v36 + 8)) ) return 0; } return v36; } //----- (00934B20) -------------------------------------------------------- int __thiscall sub_934B20(int this) { int v1; // esi int result; // eax unsigned int v3; // ebx unsigned int v4; // edi int v5; // edx unsigned int v6; // ecx _DWORD *v7; // eax unsigned int v8; // edi int v9; // edx int v10; // ecx int v11; // eax signed int v12; // eax int v13; // eax int v14; // [esp+Ch] [ebp-14h] int v15; // [esp+10h] [ebp-10h] unsigned int v16; // [esp+14h] [ebp-Ch] int v17; // [esp+18h] [ebp-8h] int v18; // [esp+1Ch] [ebp-4h] int v19; // [esp+1Ch] [ebp-4h] v1 = this; result = *(_DWORD *)(this + 48); v3 = 0; v4 = 0; if ( *(_BYTE *)(this + 40) ) { if ( result ) { (*(void (__stdcall **)(int))(*(_DWORD *)result + 8))(result); *(_DWORD *)(v1 + 48) = 0; } if ( *(_DWORD *)(v1 + 32) > 0u ) { v18 = 0; do { v5 = v18 + *(_DWORD *)(v1 + 36); if ( v5 ) { v6 = 0; *(_BYTE *)v5 = 0; if ( *(_DWORD *)(v1 + 28) ) { v7 = (_DWORD *)(*(_DWORD *)(v5 + 8) + 12); do { if ( *(v7 - 1) != -1 && *v7 != 17 ) { ++v3; *(_BYTE *)v5 = 1; } ++v6; v7 += 7; } while ( v6 < *(_DWORD *)(v1 + 28) ); } } v18 += 16; ++v4; } while ( v4 < *(_DWORD *)(v1 + 32) ); if ( v3 ) ++v3; } if ( *(_DWORD *)(v1 + 20) < v3 ) { operator delete(*(void **)(v1 + 44)); *(_DWORD *)(v1 + 44) = 0; } if ( !v3 ) { *(_DWORD *)(v1 + 20) = 0; return 0; } if ( !*(_DWORD *)(v1 + 44) ) { *(_DWORD *)(v1 + 20) = v3; *(_DWORD *)(v1 + 44) = operator new(8 * v3); } v8 = 0; *(_DWORD *)(v1 + 24) = 0; v15 = 0; if ( *(_DWORD *)(v1 + 32) ) { v17 = 0; do { v9 = v17 + *(_DWORD *)(v1 + 36); v14 = v17 + *(_DWORD *)(v1 + 36); if ( *(_BYTE *)v9 ) { v10 = 0; v16 = 0; if ( *(_DWORD *)(v1 + 28) ) { v19 = 0; do { v11 = v19 + *(_DWORD *)(v9 + 8); if ( *(_DWORD *)(v11 + 8) != -1 && *(_DWORD *)(v11 + 12) != 17 ) { *(_DWORD *)(v11 + 4) = v10; *(_WORD *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24)) = v8; *(_WORD *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 2) = *(_WORD *)(v11 + 4); *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 4) = byte_AC6240[4 * *(_DWORD *)(v11 + 12)]; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 5) = byte_AC6288[4 * *(_DWORD *)(v11 + 16)]; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 6) = byte_AC62A4[4 * *(_DWORD *)(v11 + 20)]; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * (*(_DWORD *)(v1 + 24))++ + 7) = *(_BYTE *)(v11 + 24); v12 = *(_DWORD *)(v11 + 12); if ( v12 < 18 ) v13 = dword_BA7178[v12]; else v13 = 0; v9 = v14; v8 = v15; v10 += v13; } v19 += 28; ++v16; } while ( v16 < *(_DWORD *)(v1 + 28) ); } *(_DWORD *)(v9 + 12) = v10; } v17 += 16; v15 = ++v8; } while ( v8 < *(_DWORD *)(v1 + 32) ); } *(_WORD *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24)) = 255; *(_WORD *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 2) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 4) = 17; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 5) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 6) = 0; *(_BYTE *)(*(_DWORD *)(v1 + 44) + 8 * *(_DWORD *)(v1 + 24) + 7) = 0; if ( (*(int (__stdcall **)(_DWORD, _DWORD, int))(**(_DWORD **)(v1 + 16) + 344))( *(_DWORD *)(v1 + 16), *(_DWORD *)(v1 + 44), v1 + 48) < 0 ) return 0; result = *(_DWORD *)(v1 + 48); *(_BYTE *)(v1 + 40) = 0; } return result; } // BA7178: using guessed type int dword_BA7178[]; //----- (00934D60) -------------------------------------------------------- int __cdecl sub_934D60(int a1) { int v1; // esi int v2; // ebx char *v3; // edi size_t v4; // eax rsize_t v6; // eax unsigned int v7; // ecx _WORD *v8; // edi int i; // ecx unsigned __int16 v10; // [esp+Ch] [ebp-14h] int v11; // [esp+10h] [ebp-10h] char *v12; // [esp+14h] [ebp-Ch] unsigned __int16 v13; // [esp+18h] [ebp-8h] int v14; // [esp+1Ch] [ebp-4h] rsize_t v15; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 36); v3 = *(char **)(a1 + 16); v14 = 0; v12 = v3; if ( v3 ) { v10 = 2 * (*(_DWORD *)a1 != 6) + 2; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 12 - v10) <= 0 ) { v13 = *(_WORD *)(a1 + 4) - 12; v15 = *(_DWORD *)(a1 + 20); v6 = v15; } else { v13 = 2 * (*(_DWORD *)a1 != 6) + 2; v6 = *(_DWORD *)(a1 + 28); v15 = *(_DWORD *)(a1 + 28); } v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { memcpy_s((void *)v2, v6, v3, v6); if ( v13 < v10 ) { v7 = (unsigned int)(unsigned __int16)(v10 - v13) >> 1; memset((void *)(v2 + 2), 0, 4 * v7); v8 = (_WORD *)(v2 + 2 + 4 * v7); for ( i = ((_BYTE)v10 - (_BYTE)v13) & 1; i; --i ) { *v8 = 0; ++v8; } v3 = v12; } v14 += *(_DWORD *)(v1 + 28); v3 += *(_DWORD *)(v1 + 24); v2 += *(_DWORD *)(v1 + 32); v12 = v3; if ( (unsigned __int16)++v11 >= *(_WORD *)(v1 + 8) ) break; v6 = v15; } } return v14; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v4 = *(_DWORD *)(a1 + 28); do { memset((void *)v2, 0, v4); v4 = *(_DWORD *)(a1 + 28); v2 += *(_DWORD *)(a1 + 32); v14 += v4; ++v3; } while ( (unsigned __int16)v3 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934E70) -------------------------------------------------------- int __cdecl sub_934E70(int a1) { int v1; // esi int v2; // ebx char *v3; // edi size_t v4; // eax rsize_t v6; // eax unsigned int v7; // ecx _WORD *v8; // edi int i; // ecx unsigned __int16 v10; // [esp+Ch] [ebp-14h] int v11; // [esp+10h] [ebp-10h] char *v12; // [esp+14h] [ebp-Ch] unsigned __int16 v13; // [esp+18h] [ebp-8h] int v14; // [esp+1Ch] [ebp-4h] rsize_t v15; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 36); v3 = *(char **)(a1 + 16); v14 = 0; v12 = v3; if ( v3 ) { v10 = 2 * (*(_DWORD *)a1 != 6) + 2; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 16 - v10) <= 0 ) { v13 = *(_WORD *)(a1 + 4) - 16; v15 = *(_DWORD *)(a1 + 20); v6 = v15; } else { v13 = 2 * (*(_DWORD *)a1 != 6) + 2; v6 = *(_DWORD *)(a1 + 28); v15 = *(_DWORD *)(a1 + 28); } v11 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { memcpy_s((void *)v2, v6, v3, v6); if ( v13 < v10 ) { v7 = (unsigned int)(unsigned __int16)(v10 - v13) >> 1; memset((void *)(v2 + 2), 0, 4 * v7); v8 = (_WORD *)(v2 + 2 + 4 * v7); for ( i = ((_BYTE)v10 - (_BYTE)v13) & 1; i; --i ) { *v8 = 0; ++v8; } v3 = v12; } v14 += *(_DWORD *)(v1 + 28); v3 += *(_DWORD *)(v1 + 24); v2 += *(_DWORD *)(v1 + 32); v12 = v3; if ( (unsigned __int16)++v11 >= *(_WORD *)(v1 + 8) ) break; v6 = v15; } } return v14; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v4 = *(_DWORD *)(a1 + 28); do { memset((void *)v2, 0, v4); v4 = *(_DWORD *)(a1 + 28); v2 += *(_DWORD *)(a1 + 32); v14 += v4; ++v3; } while ( (unsigned __int16)v3 < *(_WORD *)(a1 + 8) ); return v14; } //----- (00934F80) -------------------------------------------------------- int (*__cdecl sub_934F80(int (*a1)(), unsigned int a2))() { int (*v2)(); // ecx int (*result)(); // eax int v4; // esi v2 = *(int (**)())(dword_BA71C0 + 4); result = a1; v4 = *((_DWORD *)v2 + (_DWORD)a1); if ( a2 ) { if ( (unsigned int)a1 > 3 ) { if ( a1 == (int (*)())4 ) { switch ( a2 ) { case 1u: case 2u: case 6u: case 7u: case 8u: case 0xAu: case 0xBu: case 0xCu: case 0xDu: case 0xEu: case 0xFu: case 0x11u: case 0x12u: case 0x13u: goto LABEL_44; case 3u: case 4u: case 0x1Du: case 0x1Eu: case 0x1Fu: case 0x20u: result = (int (*)())sub_93DF70; goto LABEL_45; case 5u: result = (int (*)())sub_93D6E0; goto LABEL_45; case 9u: result = (int (*)())sub_93D6E0; goto LABEL_45; case 0x10u: result = (int (*)())sub_93D730; goto LABEL_45; case 0x14u: result = (int (*)())sub_93D7E0; goto LABEL_45; case 0x15u: case 0x16u: case 0x17u: case 0x18u: result = (int (*)())sub_93D8C0; goto LABEL_45; case 0x19u: case 0x1Au: case 0x1Bu: case 0x1Cu: result = (int (*)())sub_93D9C0; goto LABEL_45; default: return result; } } else if ( a1 == (int (*)())6 || a1 == (int (*)())7 ) { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: result = (int (*)())sub_933AB0; goto LABEL_45; case 5u: case 6u: case 7u: case 8u: result = (int (*)())sub_933BE0; goto LABEL_45; case 9u: case 0xAu: case 0xBu: case 0xCu: result = (int (*)())sub_933CF0; goto LABEL_45; case 0xDu: case 0xEu: case 0xFu: case 0x10u: result = (int (*)())sub_934D60; goto LABEL_45; case 0x11u: case 0x12u: case 0x13u: case 0x14u: result = (int (*)())sub_934E70; goto LABEL_45; case 0x15u: case 0x16u: case 0x17u: case 0x18u: result = (int (*)())sub_933E00; goto LABEL_45; case 0x19u: case 0x1Au: case 0x1Bu: case 0x1Cu: result = (int (*)())sub_933F30; goto LABEL_45; case 0x1Du: case 0x1Eu: case 0x1Fu: case 0x20u: LABEL_44: result = sub_8B6190; LABEL_45: a1 = result; if ( result ) result = (int (*)())sub_823870((_DWORD *)(v4 + 4), a2, &a1); break; default: return result; } } else if ( a1 == (int (*)())5 ) { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: result = (int (*)())sub_934060; goto LABEL_45; case 5u: case 6u: case 7u: case 8u: result = (int (*)())sub_934180; goto LABEL_45; case 9u: case 0xAu: case 0xBu: case 0xCu: result = (int (*)())sub_934280; goto LABEL_45; case 0xDu: case 0xEu: case 0xFu: case 0x10u: result = (int (*)())sub_934380; goto LABEL_45; case 0x11u: case 0x12u: case 0x13u: case 0x14u: result = (int (*)())sub_934480; goto LABEL_45; case 0x15u: case 0x16u: case 0x17u: case 0x18u: result = (int (*)())sub_934580; goto LABEL_45; case 0x19u: case 0x1Au: case 0x1Bu: case 0x1Cu: result = (int (*)())sub_934670; goto LABEL_45; case 0x1Du: case 0x1Eu: case 0x1Fu: case 0x20u: goto LABEL_44; default: return result; } } } else { switch ( a2 ) { case 1u: case 2u: case 3u: case 4u: if ( v2 == a1 ) { result = (int (*)())sub_93DE60; } else if ( (unsigned int)v2 < (unsigned int)a1 ) { LABEL_15: result = (int (*)())sub_93DD10; } else { result = (int (*)())sub_93DC80; } goto LABEL_45; case 5u: case 6u: case 7u: case 8u: result = (int (*)())sub_93D080; goto LABEL_45; case 9u: case 0xAu: case 0xBu: case 0xCu: result = (int (*)())sub_93D190; goto LABEL_45; case 0xDu: case 0xEu: case 0xFu: case 0x10u: result = (int (*)())sub_93D2A0; goto LABEL_45; case 0x11u: case 0x12u: case 0x13u: case 0x14u: result = (int (*)())sub_93D3B0; goto LABEL_45; case 0x15u: case 0x16u: case 0x17u: case 0x18u: result = (int (*)())sub_93D4C0; goto LABEL_45; case 0x19u: case 0x1Au: case 0x1Bu: case 0x1Cu: result = (int (*)())sub_93D5D0; goto LABEL_45; case 0x1Du: case 0x1Eu: case 0x1Fu: case 0x20u: goto LABEL_15; default: return result; } } } else { a1 = sub_8B6190; result = (int (*)())sub_823870((_DWORD *)(v4 + 4), 0, &a1); } return result; } // BA71C0: using guessed type int dword_BA71C0; //----- (00935260) -------------------------------------------------------- float *__thiscall sub_935260(float *this) { float *v1; // esi float *result; // eax v1 = this; sub_86C310(this); *(_DWORD *)v1 = &NiD3DController::`vftable'; result = v1; v1[5] = -3.4028235e38; v1[6] = 3.4028235e38; return result; } // A46C54: using guessed type void *NiD3DController::`vftable'; //----- (009352A0) -------------------------------------------------------- void *sub_9352A0() { return &unk_BA714C; } //----- (009352B0) -------------------------------------------------------- void *__thiscall sub_9352B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiD3DController::`vftable'; sub_86C3C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A46C54: using guessed type void *NiD3DController::`vftable'; //----- (009352E0) -------------------------------------------------------- bool __thiscall sub_9352E0(float *this, int a2) { return sub_86BDE0(this, a2) != 0; } //----- (00935300) -------------------------------------------------------- LONG __thiscall sub_935300(_DWORD *this) { _DWORD *v2; // edi int v3; // esi int v4; // esi v2 = this; *this = &NiD3DTimeSyncController::`vftable'; v3 = this[15]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v2[15] = 0; } v4 = v2[15]; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); *v2 = &NiD3DController::`vftable'; return sub_86C3C0(v2); } // A40454: using guessed type void *NiD3DTimeSyncController::`vftable'; // A46C54: using guessed type void *NiD3DController::`vftable'; //----- (00935360) -------------------------------------------------------- char __thiscall sub_935360(_DWORD *this, int a2) { int v2; // ecx v2 = this[13]; if ( v2 ) (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 20))(a2); return 1; } //----- (00935380) -------------------------------------------------------- void __thiscall sub_935380(int this, float a2) { int v2; // esi v2 = this; if ( *(_DWORD *)(this + 48) && *(_DWORD *)(this + 60) && !sub_80FFE0((float *)this, a2) ) *(float *)(*(_DWORD *)(v2 + 60) + 12) = a2; } //----- (009353B0) -------------------------------------------------------- float *__thiscall sub_9353B0(void *this, _DWORD **a2) { void *v2; // edi float *v3; // eax float *v4; // esi float *result; // eax v2 = this; v3 = (float *)operator new(0x40u); if ( v3 ) { v4 = sub_8CDC40(v3); sub_86C130(v2, (int)v4, a2); result = v4; } else { sub_86C130(v2, 0, a2); result = 0; } return result; } //----- (00935400) -------------------------------------------------------- void __thiscall sub_935400(void *this, _DWORD *a2) { void *v2; // ebx int v3; // eax int v4; // esi int v5; // eax float *v6; // eax float *v7; // esi float *v8; // edi int v9; // esi v2 = this; sub_86C4F0((int)this, a2); if ( a2 ) { v3 = sub_85AA60(a2, off_AC6210); v4 = v3; if ( v3 && (v5 = (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3)) != 0 ) { while ( (char *)v5 != dword_BA4B84 ) { v5 = *(_DWORD *)(v5 + 4); if ( !v5 ) goto LABEL_6; } sub_56FF80((_DWORD *)v2 + 15, v4); } else { LABEL_6: v6 = (float *)operator new(0x10u); v7 = v6; if ( v6 ) { sub_868D00(v6); v7[3] = 0.0; *(_DWORD *)v7 = &NiFloatExtraData::`vftable'; v8 = v7; } else { v8 = 0; } v9 = *((_DWORD *)v2 + 15); if ( (float *)v9 != v8 ) { if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *((_DWORD *)v2 + 15) = v8; if ( v8 ) InterlockedIncrement((volatile LONG *)v8 + 1); } sub_868E90(*((void ***)v2 + 15), off_AC6210); sub_85AEA0(a2, *((void ***)v2 + 15)); } } } // A2757C: using guessed type void *NiFloatExtraData::`vftable'; //----- (009354E0) -------------------------------------------------------- char __thiscall sub_9354E0(_DWORD *this) { int v1; // ecx int v2; // eax v1 = this[12]; if ( !v1 ) return 0; v2 = (*(int (**)(void))(*(_DWORD *)v1 + 4))(); if ( !v2 ) return 0; while ( (char *)v2 != dword_BA4840 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) return 0; } return 1; } //----- (00935510) -------------------------------------------------------- unsigned int __stdcall sub_935510(_DWORD *a1) { char *v1; // eax unsigned int v2; // edi char *v4; // [esp+8h] [ebp-4h] v1 = sub_8784D0(*(int *)dword_BA7154); v2 = a1[3]; v4 = v1; if ( v2 >= a1[2] ) sub_8237A0(a1, v2 + a1[5]); return sub_823870(a1, v2, &v4); } //----- (00935560) -------------------------------------------------------- void __thiscall sub_935560(void **this, int a2) { sub_93F6A0(this + 62, a2); } //----- (00935570) -------------------------------------------------------- signed int __thiscall sub_935570(_DWORD *this) { *((_BYTE *)this + 8320) = 0; this[2081] = 0; this[2082] = 1; this[2083] = 0; this[2084] = 1; return sub_93E790(this); } //----- (009355A0) -------------------------------------------------------- int __thiscall sub_9355A0(_DWORD *this) { int result; // eax int v2; // edx result = this[2081]; v2 = this[2083]; this[2082] = result; this[2084] = v2; return result; } //----- (009355C0) -------------------------------------------------------- int __thiscall sub_9355C0(void *this) { void *v1; // esi v1 = this; (*(void (**)(void))(*(_DWORD *)this + 160))(); return (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 176))(v1); } //----- (009355E0) -------------------------------------------------------- char __thiscall sub_9355E0(_BYTE *this) { return this[8340]; } //----- (009355F0) -------------------------------------------------------- int __thiscall sub_9355F0(_DWORD *this, unsigned __int16 a2) { return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(*this + 100))(151, this[a2 + 3], 0); } //----- (00935610) -------------------------------------------------------- double __thiscall sub_935610(float *this) { return this[34]; } //----- (00935620) -------------------------------------------------------- void __thiscall sub_935620(float *this, float a2) { double v2; // st7 v2 = a2; if ( a2 <= 0.0 ) v2 = (float)0.0000099999997; this[34] = v2; this[33] = 1.0 / v2 - 1.0; } //----- (00935660) -------------------------------------------------------- void __thiscall sub_935660(float *this, float a2, float a3) { this[30] = a2; this[31] = a3; this[32] = a3 - a2; } //----- (00935680) -------------------------------------------------------- bool __thiscall sub_935680(_DWORD *this) { return this[61] != 0; } //----- (00935690) -------------------------------------------------------- BOOL __thiscall sub_935690(_DWORD *this, char a2) { BOOL result; // eax result = a2 != 0; this[61] = result; return result; } //----- (009356B0) -------------------------------------------------------- int __thiscall sub_9356B0(_DWORD **this, int a2, _DWORD *a3, char a4) { _DWORD **v4; // esi int result; // eax v4 = this; if ( this[2 * a2 + 72] != a3 ) result = (*(int (__stdcall **)(_DWORD *, int, _DWORD *))(*this[2078] + 228))(this[2078], a2, a3); if ( a4 ) { result = (int)v4[2 * a2 + 72]; v4[2 * a2 + 73] = (_DWORD *)result; } v4[2 * a2 + 72] = a3; return result; } //----- (00935700) -------------------------------------------------------- int __thiscall sub_935700(_DWORD *this, int a2) { return this[2 * a2 + 72]; } //----- (00935720) -------------------------------------------------------- int __thiscall sub_935720(_DWORD *this, int a2) { return (*(int (__stdcall **)(int, _DWORD, _DWORD))(*this + 100))(a2, this[2 * a2 + 73], 0); } //----- (00935740) -------------------------------------------------------- int __thiscall sub_935740(int this, int a2, char a3) { int result; // eax if ( a3 ) *(_DWORD *)(this + 8300) = *(_DWORD *)(this + 8296); result = a2; if ( *(_DWORD *)(this + 8296) != a2 ) { *(_DWORD *)(this + 8296) = a2; result = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(this + 8312) + 428))(*(_DWORD *)(this + 8312), a2); } return result; } //----- (00935780) -------------------------------------------------------- int __thiscall sub_935780(_DWORD *this) { return this[2074]; } //----- (00935790) -------------------------------------------------------- int __thiscall sub_935790(_DWORD *this) { return (*(int (__stdcall **)(_DWORD, _DWORD))(*this + 120))(this[2075], 0); } //----- (009357B0) -------------------------------------------------------- int __thiscall sub_9357B0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int result; // eax v2 = this; if ( this[2074] == a2 ) { v3 = this[2078]; this[2074] = 0; result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v3 + 428))(v3, 0); } if ( v2[2075] == a2 ) v2[2075] = 0; return result; } //----- (00935800) -------------------------------------------------------- int __thiscall sub_935800(_DWORD **this, int a2, int a3, int a4, char a5) { int result; // eax int *v6; // esi result = a2 + a3 + 32 * a2; v6 = (int *)&this[2 * result + 584]; if ( *v6 != a4 ) result = (*(int (__stdcall **)(_DWORD *, int, int, int))(*this[2078] + 268))(this[2078], a2, a3, a4); if ( a5 ) { result = *v6; v6[1] = *v6; } *v6 = a4; return result; } //----- (00935850) -------------------------------------------------------- int __thiscall sub_935850(_DWORD *this, int a2, int a3) { return this[2 * (a2 + a3 + 32 * a2) + 584]; } //----- (00935870) -------------------------------------------------------- int __thiscall sub_935870(_DWORD *this, int a2, int a3) { return (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*this + 200))(a2, a3, this[2 * (a2 + a3 + 32 * a2) + 585], 0); } //----- (009358A0) -------------------------------------------------------- int __thiscall sub_9358A0(_DWORD *this) { int result; // eax result = 0; this[2056] = 0; this[2057] = 0; this[2058] = 0; this[2059] = 0; this[2060] = 0; this[2061] = 0; this[2062] = 0; this[2063] = 0; this[2064] = 0; this[2065] = 0; this[2066] = 0; this[2067] = 0; this[2068] = 0; this[2069] = 0; this[2070] = 0; this[2071] = 0; return result; } //----- (00935910) -------------------------------------------------------- int __thiscall sub_935910(_DWORD **this, int a2, _DWORD *a3) { int result; // eax result = a2; if ( this[a2 + 2056] != a3 ) { this[a2 + 2056] = a3; result = (*(int (__stdcall **)(_DWORD *, int, _DWORD *))(*this[2078] + 260))(this[2078], a2, a3); } return result; } //----- (00935950) -------------------------------------------------------- int __thiscall sub_935950(_DWORD *this, int a2) { return this[a2 + 2056]; } //----- (00935970) -------------------------------------------------------- int __thiscall sub_935970(_DWORD *this, int a2) { _DWORD *v2; // ebx unsigned int v3; // esi _DWORD *v4; // edi int result; // eax v2 = this; if ( a2 ) { v3 = 0; v4 = this + 2056; do { result = a2; if ( *v4 == a2 ) { *v4 = 0; result = (*(int (__stdcall **)(_DWORD, unsigned int, _DWORD))(*(_DWORD *)v2[2078] + 260))(v2[2078], v3, 0); } ++v3; ++v4; } while ( v3 < 0x10 ); } return result; } //----- (009359C0) -------------------------------------------------------- char __thiscall sub_9359C0(_BYTE *this, char a2) { char result; // al result = a2; this[8308] = a2; return result; } //----- (009359D0) -------------------------------------------------------- char __thiscall sub_9359D0(_BYTE *this) { return this[8308]; } //----- (009359E0) -------------------------------------------------------- char __thiscall sub_9359E0(_BYTE *this, char a2) { char result; // al result = a2; this[8309] = a2; return result; } //----- (009359F0) -------------------------------------------------------- char __thiscall sub_9359F0(_BYTE *this) { return this[8309]; } //----- (00935A00) -------------------------------------------------------- int __thiscall sub_935A00(int this, int a2, char a3) { int result; // eax if ( a3 ) *(_DWORD *)(this + 8292) = *(_DWORD *)(this + 8288); result = a2; if ( *(_DWORD *)(this + 8288) != a2 ) { *(_DWORD *)(this + 8288) = a2; result = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(this + 8312) + 368))(*(_DWORD *)(this + 8312), a2); } return result; } //----- (00935A40) -------------------------------------------------------- int __thiscall sub_935A40(_DWORD *this) { return this[2072]; } //----- (00935A50) -------------------------------------------------------- int __thiscall sub_935A50(_DWORD *this) { return (*(int (__stdcall **)(_DWORD, _DWORD))(*this + 136))(this[2073], 0); } //----- (00935A70) -------------------------------------------------------- int __thiscall sub_935A70(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax int result; // eax v2 = this; if ( this[2072] == a2 ) { v3 = this[2078]; this[2072] = 0; result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v3 + 368))(v3, 0); } if ( v2[2073] == a2 ) v2[2073] = 0; return result; } //----- (00935AC0) -------------------------------------------------------- int __thiscall sub_935AC0(int this, int a2, char a3) { int result; // eax result = a2; if ( a2 && (*(_BYTE *)(this + 8320) || *(_DWORD *)(this + 8324) != a2) ) { *(_BYTE *)(this + 8320) = 0; if ( a3 ) *(_DWORD *)(this + 8328) = *(_DWORD *)(this + 8324); *(_DWORD *)(this + 8324) = a2; result = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(this + 8312) + 356))(*(_DWORD *)(this + 8312), a2); } return result; } //----- (00935B10) -------------------------------------------------------- int __thiscall sub_935B10(int this) { int result; // eax if ( *(_BYTE *)(this + 8320) ) result = 0; else result = *(_DWORD *)(this + 8324); return result; } //----- (00935B30) -------------------------------------------------------- int __thiscall sub_935B30(_DWORD *this) { return (*(int (__stdcall **)(_DWORD, _DWORD))(*this + 152))(this[2082], 0); } //----- (00935B50) -------------------------------------------------------- int __thiscall sub_935B50(int this, int a2) { int v2; // esi int v3; // eax int result; // eax v2 = this; if ( a2 && !*(_BYTE *)(this + 8320) ) { if ( *(_DWORD *)(this + 8324) == a2 ) { v3 = *(_DWORD *)(this + 8312); *(_DWORD *)(this + 8324) = 2; result = (*(int (__stdcall **)(int, signed int))(*(_DWORD *)v3 + 356))(v3, 2); } if ( *(_DWORD *)(v2 + 8328) == a2 ) *(_DWORD *)(v2 + 8328) = 2; } return result; } //----- (00935BB0) -------------------------------------------------------- int __thiscall sub_935BB0(int this, int a2, char a3) { int result; // eax result = a2; if ( a2 && (!*(_BYTE *)(this + 8320) || *(_DWORD *)(this + 8332) != a2) ) { *(_BYTE *)(this + 8320) = 1; if ( a3 ) *(_DWORD *)(this + 8336) = *(_DWORD *)(this + 8332); *(_DWORD *)(this + 8332) = a2; result = (*(int (__stdcall **)(_DWORD, int))(**(_DWORD **)(this + 8312) + 348))(*(_DWORD *)(this + 8312), a2); } return result; } //----- (00935C00) -------------------------------------------------------- int __thiscall sub_935C00(int this) { int result; // eax if ( *(_BYTE *)(this + 8320) ) result = *(_DWORD *)(this + 8332); else result = 0; return result; } //----- (00935C20) -------------------------------------------------------- int __thiscall sub_935C20(_DWORD *this) { return (*(int (__stdcall **)(_DWORD, _DWORD))(*this + 168))(this[2084], 0); } //----- (00935C40) -------------------------------------------------------- int __thiscall sub_935C40(int this, int a2) { int v2; // esi int v3; // eax int result; // eax v2 = this; if ( a2 && *(_BYTE *)(this + 8320) ) { if ( *(_DWORD *)(this + 8332) == a2 ) { v3 = *(_DWORD *)(this + 8312); *(_DWORD *)(this + 8332) = 0; result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v3 + 348))(v3, 0); } if ( *(_DWORD *)(v2 + 8336) == a2 ) *(_DWORD *)(v2 + 8336) = 0; } return result; } //----- (00935CA0) -------------------------------------------------------- _DWORD *__thiscall sub_935CA0(_DWORD **this, int a2, int a3, _DWORD *a4, char a5) { int v5; // eax bool v6; // zf _DWORD *result; // eax v5 = a3 + 13 * a2; v6 = this[2 * v5 + 1640] == a4; result = &this[2 * v5 + 1640]; if ( !v6 ) { if ( a5 ) result[1] = *result; *result = a4; result = (_DWORD *)(*(int (__stdcall **)(_DWORD *, int, int, _DWORD *))(*this[2078] + 276))( this[2078], a2, dword_AC6C48[a3], a4); } return result; } //----- (00935D00) -------------------------------------------------------- int __thiscall sub_935D00(_DWORD *this, int a2, int a3) { return this[2 * (a3 + 13 * a2) + 1640]; } //----- (00935D20) -------------------------------------------------------- int __thiscall sub_935D20(_DWORD *this, int a2, int a3) { return (*(int (__stdcall **)(int, int, _DWORD, _DWORD))(*this + 208))(a2, a3, this[2 * (a3 + 13 * a2) + 1641], 0); } //----- (00935D50) -------------------------------------------------------- void *__thiscall sub_935D50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiDX9RenderState::`vftable'; sub_93F460((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A46CE4: using guessed type void *NiDX9RenderState::`vftable'; //----- (00935D80) -------------------------------------------------------- int __thiscall sub_935D80(int this, unsigned __int8 a2) { _DWORD *v2; // esi int result; // eax int v4; // eax v2 = (_DWORD *)this; if ( a2 != *(_BYTE *)(this + 8340) ) { result = *(_DWORD *)(this + 8316); if ( *(_BYTE *)(result + 977) ) { v4 = *(_DWORD *)(this + 8312); *(_BYTE *)(this + 8340) = a2; (*(void (__stdcall **)(int, _DWORD))(*(_DWORD *)v4 + 308))(v4, a2); result = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 148))(v2, v2[2072]); } } return result; } //----- (00935DE0) -------------------------------------------------------- int __thiscall sub_935DE0(float *this) { float *v1; // esi int result; // eax unsigned __int16 v3; // [esp+Ah] [ebp-2h] v1 = this; (*(void (**)(void))(*(_DWORD *)this + 84))(); (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 108))(v1); (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 184))(v1); (*(void (__thiscall **)(float *))(*(_DWORD *)v1 + 220))(v1); sub_93F760((_DWORD *)v1 + 62); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 22, 2, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 8, 3, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 9, 2, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 27, 0, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 19, *((_DWORD *)v1 + 14), 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 20, *((_DWORD *)v1 + 15), 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 15, 0, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 25, 8, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 24, 0, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 23, 8, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 14, 0, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 26, 0, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 29, 0, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 28, 0, 0); (*(void (__thiscall **)(float *, signed int, int, _DWORD))(*(_DWORD *)v1 + 100))( v1, 35, ((_BYTE)v1[2] & 1) != 0 ? 3 : 0, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 140, 3, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 48, 0, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v1 + 100))(v1, 34, 0, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 143, 1, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 7, 1, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v1 + 100))(v1, 141, 1, 0); *((_DWORD *)v1 + 35) = dword_BA4724; *((_DWORD *)v1 + 36) = dword_BA4728; *((_DWORD *)v1 + 37) = dword_BA472C; result = v3 | 0xC00; *((_DWORD *)v1 + 38) = (unsigned __int8)(signed int)(255.0 * v1[37]) | (((unsigned __int8)(signed int)(v1[36] * 255.0) | (((signed int)(v1[35] * 255.0) | 0xFFFFFF00) << 8)) << 8); return result; } // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (00936030) -------------------------------------------------------- signed int __thiscall sub_936030(int this) { int v1; // eax int v2; // ebx signed int v3; // eax int v4; // edi _DWORD *v5; // edx signed int v6; // esi int v7; // eax signed int result; // eax v1 = *(_DWORD *)(this + 8380); if ( v1 & 0x100 && v1 & 0x100000 ) *(_DWORD *)(this + 8) |= 1u; else *(_DWORD *)(this + 8) &= 0xFFFFFFFE; v2 = *(_DWORD *)(this + 8392); *(_DWORD *)(this + 112) = 0; *(_DWORD *)(this + 108) = 0; v3 = 1; v4 = *(_DWORD *)(this + 8388); v5 = (_DWORD *)(this + 32); v6 = 11; do { if ( v4 & *v5 ) *(_DWORD *)(this + 108) |= v3; if ( v2 & *v5 ) *(_DWORD *)(this + 112) |= v3; ++v5; v3 = __ROL4__(v3, 1); --v6; } while ( v6 ); if ( *(_BYTE *)(this + 8420) & 0x10 ) *(_DWORD *)(this + 8) |= 4u; else *(_DWORD *)(this + 8) &= 0xFFFFFFFB; v7 = *(_DWORD *)(this + 8316); if ( !*(_BYTE *)(v7 + 976) || *(_BYTE *)(v7 + 977) ) { result = 0; *(_BYTE *)(this + 8340) = 0; } else { result = 1; *(_BYTE *)(this + 8340) = 1; } return result; } //----- (009360D0) -------------------------------------------------------- int __thiscall sub_9360D0(_DWORD *this) { return (*(int (__stdcall **)(_DWORD))(*this + 8))(this[29]); } //----- (009360E0) -------------------------------------------------------- _DWORD *__cdecl sub_9360E0(int a1, void *Src, char a3) { _DWORD *v3; // eax _DWORD *v4; // esi unsigned int v5; // eax int v6; // ecx int v7; // ecx int v8; // ecx int v9; // ecx _DWORD *v10; // eax int v11; // edi _DWORD *v12; // ebx v3 = operator new(0x21C8u); v4 = v3; if ( v3 ) { sub_93F0E0(v3, a1); *v4 = &NiDX9RenderState::`vftable'; *((_BYTE *)v4 + 8340) = 0; memcpy_s(v4 + 2086, 0x130u, Src, 0x130u); } else { v4 = 0; } (*(void (__thiscall **)(_DWORD *))(*v4 + 264))(v4); v5 = 0; do { v6 = dword_AC6330[v5]; if ( v6 == -1 ) break; if ( v6 == 7 ) dword_AC6334[v5] = a3 != 0; v7 = dword_AC6338[v5]; if ( v7 == -1 ) break; if ( v7 == 7 ) dword_AC633C[v5] = a3 != 0; v8 = dword_AC6340[v5]; if ( v8 == -1 ) break; if ( v8 == 7 ) dword_AC6344[v5] = a3 != 0; v9 = dword_AC6348[v5]; if ( v9 == -1 ) break; if ( v9 == 7 ) dword_AC634C[v5] = a3 != 0; v5 += 8; } while ( v5 < 512 ); if ( a3 ) v4[2] |= 2u; v10 = sub_93FB40(a1, (int)Src); v11 = v4[2076]; v12 = v10; if ( (_DWORD *)v11 != v10 ) { if ( v11 && !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v4[2076] = v12; if ( v12 ) InterlockedIncrement(v12 + 1); } return v4; } // A46CE4: using guessed type void *NiDX9RenderState::`vftable'; // AC6330: using guessed type int dword_AC6330[]; // AC6334: using guessed type int dword_AC6334[]; // AC6338: using guessed type int dword_AC6338[]; // AC633C: using guessed type int dword_AC633C[]; // AC6340: using guessed type int dword_AC6340[]; // AC6344: using guessed type int dword_AC6344[]; // AC6348: using guessed type int dword_AC6348[]; // AC634C: using guessed type int dword_AC634C[]; //----- (00936220) -------------------------------------------------------- _DWORD *__thiscall sub_936220(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiD3DShaderConstantManager::`vftable'; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[8] = 0; v2[9] = 0; v2[10] = 0; v2[11] = 0; v2[12] = 0; v2[13] = 0; v2[14] = 0; v2[15] = 0; v2[16] = 0; v2[17] = 0; v2[18] = 0; v2[19] = 0; v2[20] = 0; v2[21] = 0; v2[22] = 0; v2[23] = 0; v2[24] = 0; v2[25] = 0; v2[26] = 0; v2[27] = 0; v2[28] = 0; v2[29] = 0; v2[30] = 0; v2[31] = 0; v2[33] = a2; if ( a2 ) v2[32] = *(_DWORD *)(a2 + 132); v3 = v2[32]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 4))(v2[32]); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A46DF4: using guessed type void *NiD3DShaderConstantManager::`vftable'; //----- (009362D0) -------------------------------------------------------- LONG __thiscall sub_9362D0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST2C_4 int v3; // eax v1 = this; v2 = (void *)this[2]; *this = &NiD3DShaderConstantManager::`vftable'; operator delete(v2); operator delete((void *)v1[3]); operator delete((void *)v1[4]); operator delete((void *)v1[5]); operator delete((void *)v1[12]); operator delete((void *)v1[13]); operator delete((void *)v1[14]); operator delete((void *)v1[15]); operator delete((void *)v1[22]); operator delete((void *)v1[23]); operator delete((void *)v1[24]); operator delete((void *)v1[25]); v3 = v1[32]; if ( v3 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))(v1[32]); v1[32] = 0; } *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A46DF4: using guessed type void *NiD3DShaderConstantManager::`vftable'; //----- (00936380) -------------------------------------------------------- char __thiscall sub_936380(_DWORD *this, int a2, void *Src, int a4, char a5) { unsigned int v5; // ebx _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+10h] [ebp+8h] v5 = a2; v6 = this; v9 = a2 + a4; if ( v9 > this[30] ) return 0; v8 = 4 * a4; if ( a5 ) memcpy_s((void *)(4 * v5 + this[23]), v8, (const void *)(4 * v5 + this[22]), v8); memcpy_s((void *)(v6[22] + 4 * v5), v8, Src, v8); if ( v6[26] > v5 ) v6[26] = v5; if ( v6[27] < v9 ) v6[27] = v9; return 1; } //----- (00936400) -------------------------------------------------------- char __thiscall sub_936400(_DWORD *this, int a2, void *Src, int a4, char a5) { int v5; // edi _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+18h] [ebp+10h] v5 = a4; v6 = this; v9 = a2 + a4; if ( v9 > this[10] ) return 0; v8 = 16 * v5; if ( a5 ) memcpy_s((void *)(16 * a2 + this[3]), v8, (const void *)(16 * a2 + this[2]), v8); memcpy_s((void *)(v6[2] + 16 * a2), v8, Src, v8); if ( v6[6] > (unsigned int)a2 ) v6[6] = a2; if ( v6[7] < v9 ) v6[7] = v9; return 1; } //----- (00936490) -------------------------------------------------------- char __thiscall sub_936490(_DWORD *this, int a2, void *Src, int a4, char a5) { int v5; // edi _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+18h] [ebp+10h] v5 = a4; v6 = this; v9 = a2 + a4; if ( v9 > this[20] ) return 0; v8 = 16 * v5; if ( a5 ) memcpy_s((void *)(16 * a2 + this[13]), v8, (const void *)(16 * a2 + this[12]), v8); memcpy_s((void *)(v6[12] + 16 * a2), v8, Src, v8); if ( v6[16] > (unsigned int)a2 ) v6[16] = a2; if ( v6[17] < v9 ) v6[17] = v9; return 1; } //----- (00936520) -------------------------------------------------------- char __thiscall sub_936520(_DWORD *this, int a2, void *Src, int a4, char a5) { unsigned int v5; // ebx _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+10h] [ebp+8h] v5 = a2; v6 = this; v9 = a2 + a4; if ( v9 > this[31] ) return 0; v8 = 4 * a4; if ( a5 ) memcpy_s((void *)(4 * v5 + this[25]), v8, (const void *)(4 * v5 + this[24]), v8); memcpy_s((void *)(v6[24] + 4 * v5), v8, Src, v8); if ( v6[28] > v5 ) v6[28] = v5; if ( v6[29] < v9 ) v6[29] = v9; return 1; } //----- (009365A0) -------------------------------------------------------- char __thiscall sub_9365A0(_DWORD *this, int a2, void *Src, int a4, char a5) { int v5; // edi _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+18h] [ebp+10h] v5 = a4; v6 = this; v9 = a2 + a4; if ( v9 > this[11] ) return 0; v8 = 16 * v5; if ( a5 ) memcpy_s((void *)(16 * a2 + this[5]), v8, (const void *)(16 * a2 + this[4]), v8); memcpy_s((void *)(v6[4] + 16 * a2), v8, Src, v8); if ( v6[8] > (unsigned int)a2 ) v6[8] = a2; if ( v6[9] < v9 ) v6[9] = v9; return 1; } //----- (00936630) -------------------------------------------------------- char __thiscall sub_936630(_DWORD *this, int a2, void *Src, int a4, char a5) { int v5; // edi _DWORD *v6; // esi rsize_t v8; // edi unsigned int v9; // [esp+18h] [ebp+10h] v5 = a4; v6 = this; v9 = a2 + a4; if ( v9 > this[21] ) return 0; v8 = 16 * v5; if ( a5 ) memcpy_s((void *)(16 * a2 + this[15]), v8, (const void *)(16 * a2 + this[14]), v8); memcpy_s((void *)(v6[14] + 16 * a2), v8, Src, v8); if ( v6[18] > (unsigned int)a2 ) v6[18] = a2; if ( v6[19] < v9 ) v6[19] = v9; return 1; } //----- (009366C0) -------------------------------------------------------- void *__thiscall sub_9366C0(void *this, char a2) { void *v2; // esi v2 = this; sub_9362D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009366F0) -------------------------------------------------------- char __thiscall sub_9366F0(_DWORD *this) { unsigned int v1; // esi unsigned int v3; // edx int v4; // eax v1 = this[7]; if ( !v1 ) return 0; v3 = 0; if ( v1 ) { v4 = this[9]; while ( *(_DWORD *)v4 && *(_DWORD *)(*(_DWORD *)v4 + 8) ) { ++v3; v4 += 4; if ( v3 >= v1 ) return 1; } return 0; } return 1; } //----- (00936720) -------------------------------------------------------- int __thiscall sub_936720(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = this[12]; this[11] = 0; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v1[12] = 0; } return result; } //----- (00936750) -------------------------------------------------------- void __thiscall sub_936750(void **this, void *Dst) { unsigned int v2; // edi void **v3; // esi char *v4; // ebx char *v5; // eax const void *v6; // ecx unsigned int v7; // eax unsigned int i; // [esp+8h] [ebp-4h] char *Dsta; // [esp+14h] [ebp+8h] v2 = (unsigned int)Dst; v3 = this; if ( Dst != this[7] ) { v4 = (char *)operator new(4 * (_DWORD)Dst); v5 = (char *)operator new(4 * (_DWORD)Dst); v6 = v3[9]; Dsta = v5; v7 = (unsigned int)v3[7]; if ( v2 >= v7 ) { memcpy_s(v4, 4 * v7, v6, 4 * v7); memcpy_s(Dsta, 4 * (_DWORD)v3[7], v3[8], 4 * (_DWORD)v3[7]); memset(&v4[4 * (_DWORD)v3[7]], 0, 4 * (v2 - (_DWORD)v3[7])); memset(&Dsta[4 * (_DWORD)v3[7]], 0, 4 * (v2 - (_DWORD)v3[7])); } else { memcpy_s(v4, 4 * v2, v6, 4 * v2); memcpy_s(Dsta, 4 * v2, v3[8], 4 * v2); if ( v3[1] ) { for ( i = v2; i < (unsigned int)v3[7]; ++i ) (*(void (__stdcall **)(void **, unsigned int))(*(_DWORD *)v3[1] + 28))(v3, i); } } operator delete(v3[9]); operator delete(v3[8]); v3[9] = v4; v3[8] = Dsta; v3[7] = (void *)v2; } } //----- (00936880) -------------------------------------------------------- int __thiscall sub_936880(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; this[2] = a2; result = this[3]; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[3] = 0; } return result; } //----- (009368B0) -------------------------------------------------------- int __thiscall sub_9368B0(_DWORD *this, int a2) { _DWORD *v2; // esi int result; // eax v2 = this; result = this[3]; if ( a2 != result ) { if ( result ) result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[3] = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); } v2[2] = 0; return result; } //----- (009368F0) -------------------------------------------------------- void __thiscall sub_9368F0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v3; // eax int v4; // esi v1 = this; if ( this[1] ) { v2 = 0; if ( this[7] ) { do (*(void (__stdcall **)(_DWORD *, unsigned int))(*(_DWORD *)v1[1] + 28))(v1, v2++); while ( v2 < v1[7] ); } } v3 = v1[12]; v1[11] = 0; if ( v3 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v1[12] = 0; } operator delete((void *)v1[9]); operator delete((void *)v1[8]); v4 = v1[3]; if ( v4 ) (*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4); } //----- (00936960) -------------------------------------------------------- int __thiscall sub_936960(int this) { int v1; // eax int result; // eax v1 = *(_DWORD *)(this + 20); *(_BYTE *)(this + 260) = (*(_DWORD *)(v1 + 280) >> 12) & 1; result = *(_DWORD *)(v1 + 280); if ( result & 0x400000 ) { *(_DWORD *)(this + 264) = 23; } else if ( result & 0x200000 ) { *(_DWORD *)(this + 264) = 22; } return result; } //----- (009369A0) -------------------------------------------------------- _DWORD *__thiscall sub_9369A0(_DWORD **this) { _DWORD **v1; // esi _DWORD *v2; // ecx _DWORD *result; // eax v1 = this; (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*this[9] + 100))(139, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*v1[9] + 100))(137, 0, 0); v2 = v1[9]; v1[13] = 0; *((_BYTE *)v1 + 49) = 0; v1[14] = 0; (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*v2 + 100))(148, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*v1[9] + 100))(147, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(*v1[9] + 100))(145, 0, 0); result = v1[10]; *((_BYTE *)v1 + 48) = 0; v1[11] = result; return result; } //----- (00936A10) -------------------------------------------------------- int __thiscall sub_936A10(_DWORD *this) { _DWORD *v1; // edx char v2; // bl unsigned int v3; // ecx signed int v4; // edi unsigned int v5; // esi int v6; // ecx int v8; // [esp+Ch] [ebp-4h] v1 = this; v8 = this[15]; v2 = 0; do { v3 = v1[15]; v4 = 1 << (v3 & 0x1F); v5 = v3 >> 5; v6 = v1[(v3 >> 5) + 16]; if ( !(v6 & v4) ) { v1[v5 + 16] = v4 | v6; v2 = 1; } if ( ++v1[15] == 4096 ) v1[15] = 0; } while ( !v2 ); return v8; } //----- (00936A70) -------------------------------------------------------- void *__thiscall sub_936A70(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiLight *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A46E20: using guessed type void *NiTListBase,NiLight *>::`vftable'; //----- (00936AA0) -------------------------------------------------------- char __thiscall sub_936AA0(void *this, int a2) { float *v2; // edi int v3; // eax float *v4; // esi int v5; // eax int v6; // eax float v7; // ST2C_4 float v8; // ST30_4 float v9; // ST34_4 char result; // al float v11; // ST20_4 float v12; // ST24_4 float v13; // ST28_4 float v14; // ST14_4 float v15; // ST18_4 float v16; // ST1C_4 float v17; // [esp+34h] [ebp+8h] v2 = (float *)a2; v3 = *(_DWORD *)(a2 + 188); v4 = (float *)this; if ( *((_DWORD *)this + 26) != v3 ) { *((_DWORD *)this + 26) = v3; memset(this, 0, 0x68u); v5 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 116))(a2) - 1; if ( !v5 ) { *(_DWORD *)v4 = 3; v4[16] = *(float *)(a2 + 268); v4[17] = *(float *)(a2 + 272); v4[18] = *(float *)(a2 + 276); goto LABEL_7; } v6 = v5 - 1; if ( v6 ) { if ( v6 != 1 ) { LABEL_7: v17 = *(float *)(a2 + 224); v7 = v2[57] * v17; v8 = v2[58] * v17; v9 = v2[59] * v17; result = 1; v11 = v2[60] * v17; v12 = v2[61] * v17; v13 = v2[62] * v17; v14 = v2[63] * v17; v15 = v2[64] * v17; v16 = v17 * v2[65]; v4[9] = v7; v4[10] = v8; v4[11] = v9; v4[12] = 1.0; v4[1] = v11; v4[2] = v12; v4[3] = v13; v4[4] = 1.0; v4[5] = v14; v4[6] = v15; v4[7] = v16; v4[8] = 1.0; return result; } *(_DWORD *)v4 = 2; v4[13] = *(float *)(a2 + 140); v4[14] = *(float *)(a2 + 144); v4[15] = *(float *)(a2 + 148); v4[16] = *(float *)(a2 + 280); v4[17] = *(float *)(a2 + 284); v4[18] = *(float *)(a2 + 288); v4[24] = 0.0; v4[25] = *(float *)(a2 + 292) * flt_BA45B4 / 90.0; v4[20] = *(float *)(a2 + 296); } else { *(_DWORD *)v4 = 1; v4[13] = *(float *)(a2 + 140); v4[14] = *(float *)(a2 + 144); v4[15] = *(float *)(a2 + 148); } v4[21] = *(float *)(a2 + 268); v4[22] = *(float *)(a2 + 272); v4[23] = *(float *)(a2 + 276); v4[19] = flt_BA7160; goto LABEL_7; } return 0; } // BA45B4: using guessed type float flt_BA45B4; // BA7160: using guessed type float flt_BA7160; //----- (00936CC0) -------------------------------------------------------- void __thiscall sub_936CC0(_DWORD *this) { _DWORD *v1; // ebx int *v2; // eax int v3; // ecx int v4; // edi int v5; // edi v1 = this; if ( this[7] ) { do { v2 = (int *)v1[5]; v3 = *v2; v1[5] = *v2; if ( v3 ) *(_DWORD *)(v3 + 4) = 0; else v1[6] = 0; v4 = v2[2]; (*(void (__thiscall **)(_DWORD *, int *))(v1[4] + 8))(v1 + 4, v2); --v1[7]; v5 = *(_DWORD *)(v4 + 264); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v1[8] + 212))(v1[8], *(_DWORD *)(v5 + 108), 0); *(_BYTE *)(v5 + 113) = 0; } while ( v1[7] ); v1[11] = v1[10]; } else { this[11] = this[10]; } } //----- (00936D30) -------------------------------------------------------- int __thiscall sub_936D30(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiLight *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiLight *>::`vftable'; return result; } // A46E20: using guessed type void *NiTListBase,NiLight *>::`vftable'; // A46E30: using guessed type void *NiTPointerListBase,NiLight *>::`vftable'; //----- (00936D70) -------------------------------------------------------- void **__thiscall sub_936D70(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46E00: using guessed type void *NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; //----- (00936DB0) -------------------------------------------------------- void **__thiscall sub_936DB0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46E00: using guessed type void *NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; // A46E40: using guessed type void *NiTPointerMap::`vftable'; //----- (00936DF0) -------------------------------------------------------- void *__thiscall sub_936DF0(void *this, char a2) { void *v2; // esi v2 = this; sub_936D30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00936E20) -------------------------------------------------------- void __thiscall sub_936E20(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi _DWORD *v4; // ebx unsigned int v5; // eax _DWORD *v6; // ecx int *v7; // ecx int v8; // eax int v9; // eax v1 = this; while ( v1[3] ) { v2 = (_DWORD *)sub_8A5CB0(v1); v3 = v2[1]; v4 = (_DWORD *)v2[2]; if ( !*v2 ) { v5 = (*(int (__thiscall **)(_DWORD *, int))(*v1 + 4))(v1, v3) + 1; if ( v5 < v1[1] ) { v6 = (_DWORD *)(v1[2] + 4 * v5); do { if ( *v6 ) break; ++v5; ++v6; } while ( v5 < v1[1] ); } } sub_916F40(v1, v3); *(_DWORD *)(v3 + 264) = 0; v1[(v4[27] >> 5) + 16] &= ~(1 << (v4[27] & 0x1F)); operator delete(v4); } for ( ; v1[7]; --v1[7] ) { v7 = (int *)v1[5]; v8 = *v7; v1[5] = *v7; if ( v8 ) *(_DWORD *)(v8 + 4) = 0; else v1[6] = 0; (*(void (__thiscall **)(_DWORD *, int *))(v1[4] + 8))(v1 + 4, v7); } v9 = v1[8]; if ( v9 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 8))(v1[8]); v1[8] = 0; } sub_936D30(v1 + 4); *v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *v1 = &NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; sub_940360(v1); operator delete((void *)v1[2]); } // A46E00: using guessed type void *NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; // A46E40: using guessed type void *NiTPointerMap::`vftable'; //----- (00936F20) -------------------------------------------------------- int __thiscall sub_936F20(_DWORD *this, unsigned int a2) { _DWORD *v2; // esi _DWORD *v3; // eax int v4; // ecx _DWORD *v5; // edi int v6; // ebx float v7; // ST30_4 int v8; // edi _DWORD *v9; // eax int v10; // ecx _DWORD *v11; // eax _DWORD *v12; // edi int v13; // ebx bool v14; // zf unsigned int v15; // edx unsigned int v16; // ecx unsigned int v17; // eax float v19; // [esp+4h] [ebp-20h] float v20; // [esp+8h] [ebp-1Ch] float v21; // [esp+Ch] [ebp-18h] _DWORD *i; // [esp+18h] [ebp-Ch] int v23; // [esp+1Ch] [ebp-8h] _DWORD *v24; // [esp+20h] [ebp-4h] v2 = this; v19 = 0.0; v3 = (_DWORD *)this[5]; v20 = 0.0; v21 = 0.0; for ( i = this; v3; *(_BYTE *)(*(_DWORD *)(v4 + 264) + 112) = 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; } if ( *((_BYTE *)v2 + 49) ) { v5 = 0; v24 = 0; if ( a2 ) { v24 = *(_DWORD **)(a2 + 12); v5 = *(_DWORD **)(a2 + 12); } a2 = 0; while ( v5 ) { if ( a2 >= 8 ) break; if ( v5 ) { v6 = v5[1]; v24 = (_DWORD *)*v5; v5 = (_DWORD *)*v5; } else { v6 = 0; } if ( *(_BYTE *)(v6 + 176) && *(float *)(v6 + 224) >= 0.0099999998 ) { if ( (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 116))(v6) ) { v8 = *(_DWORD *)(v6 + 264); if ( v8 ) { if ( sub_936AA0((void *)v8, v6) ) goto LABEL_17; } else { v23 = sub_936A10(v2); v11 = operator new(0x74u); v8 = (int)v11; if ( v11 ) { v11[27] = v23; v11[26] = 0; *((_WORD *)v11 + 56) = 0; sub_936AA0(v11, v6); sub_815C70(v2, v6, v8); *(_DWORD *)(v6 + 264) = v8; } else { v8 = 0; sub_815C70(v2, v6, 0); *(_DWORD *)(v6 + 264) = 0; } LABEL_17: (*(void (__stdcall **)(_DWORD, _DWORD, int))(*(_DWORD *)v2[8] + 204))(v2[8], *(_DWORD *)(v8 + 108), v8); } if ( !*(_BYTE *)(v8 + 113) ) { (*(void (__stdcall **)(_DWORD, _DWORD, signed int))(*(_DWORD *)v2[8] + 212))( v2[8], *(_DWORD *)(v8 + 108), 1); *(_BYTE *)(v8 + 113) = 1; v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v2[4] + 4))(v2 + 4); v9[2] = v6; v9[1] = 0; *v9 = v2[5]; v10 = v2[5]; if ( v10 ) *(_DWORD *)(v10 + 4) = v9; else v2[6] = v9; ++v2[7]; v2[5] = v9; v2 = i; } ++a2; *(_BYTE *)(v8 + 112) = 0; v5 = v24; continue; } v7 = *(float *)(v6 + 224); v19 = *(float *)(v6 + 228) * v7 + v19; v20 = *(float *)(v6 + 232) * v7 + v20; v21 = v7 * *(float *)(v6 + 236) + v21; } } } v12 = (_DWORD *)v2[5]; while ( v12 ) { v13 = *(_DWORD *)(v12[2] + 264); v14 = *(_BYTE *)(v13 + 112) == 0; a2 = (unsigned int)v12; v12 = (_DWORD *)*v12; if ( !v14 ) { (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v2[8] + 212))(v2[8], *(_DWORD *)(v13 + 108), 0); *(_BYTE *)(v13 + 113) = 0; sub_403620(v2 + 4, (_DWORD **)&a2); } } v15 = (signed __int64)(v19 * 255.0); if ( v15 > 0xFF ) LOBYTE(v15) = -1; v16 = (signed __int64)(v20 * 255.0); if ( v16 > 0xFF ) LOBYTE(v16) = -1; v17 = (signed __int64)(255.0 * v21); if ( v17 > 0xFF ) LOBYTE(v17) = -1; return (*(int (__thiscall **)(_DWORD, signed int, unsigned int, _DWORD))(*(_DWORD *)v2[9] + 100))( v2[9], 139, (unsigned __int8)v17 | (((unsigned __int8)v16 | ((v15 | 0xFFFFFF00) << 8)) << 8), 0); } //----- (00937220) -------------------------------------------------------- int __thiscall sub_937220(_DWORD *this, int *a2) { int *v2; // eax int *v3; // ebx _DWORD *v4; // edx int *v5; // esi int result; // eax v2 = (int *)this[1]; v3 = a2; if ( v2 ) { while ( 1 ) { v4 = v2 + 2; v5 = v2; v2 = (int *)*v2; if ( *a2 == *v4 ) break; if ( !v2 ) goto LABEL_4; } } else { LABEL_4: v5 = 0; } a2 = v5; if ( v5 ) result = sub_403620(this, &a2); else result = *v3; return result; } //----- (00937270) -------------------------------------------------------- _DWORD *__thiscall sub_937270(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi void *v4; // eax size_t v5; // ST08_4 v3 = this; this[1] = 37; *this = &NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; this[3] = 0; v4 = operator new(0x94u); v5 = 4 * v3[1]; v3[2] = v4; memset(v4, 0, v5); *v3 = &NiTPointerMap::`vftable'; v3[7] = 0; v3[5] = 0; v3[6] = 0; v3[4] = &NiTPointerList::`vftable'; v3[9] = a2; v3[10] = -1; v3[8] = a3; (*(void (__stdcall **)(int))(*(_DWORD *)a3 + 4))(a3); v3[15] = 0; memset(v3 + 16, 0, 0x200u); sub_9369A0((_DWORD **)v3); return v3; } // A46E00: using guessed type void *NiTMapBase,NiLight *,NiDX9LightManager::LightEntry *>::`vftable'; // A46E40: using guessed type void *NiTPointerMap::`vftable'; // A46E60: using guessed type void *NiTPointerList::`vftable'; //----- (00937310) -------------------------------------------------------- int __userpurge sub_937310@(int a1@, int a2@, unsigned int a3, int a4, int a5) { int v5; // esi int v6; // ecx int v7; // eax int result; // eax int v9; // edi bool v10; // zf char v11; // dl int v12; // [esp-4h] [ebp-8h] int v13; // [esp+0h] [ebp-4h] int savedregs; // [esp+4h] [ebp+0h] v5 = a1; v6 = *(_DWORD *)(a4 + 28); *(_DWORD *)(v5 + 52) = v6; v7 = **(_DWORD **)(a4 + 40); if ( v7 && *(_DWORD *)(v7 + 4) && !v6 ) return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(137, 0, 0); v12 = a2; v9 = *(_DWORD *)(a5 + 32); if ( *(_DWORD *)(a5 + 36) ) { if ( v9 == *(_DWORD *)(v5 + 56) ) { LABEL_20: *(_BYTE *)(v5 + 49) = 1; goto LABEL_21; } if ( v9 ) { if ( v9 != 1 ) { if ( v9 == 2 ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD, int, int, int))(**(_DWORD **)(v5 + 36) + 100))( 148, 0, 0, v12, v13, savedregs); (*(void (__stdcall **)(signed int, signed int, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(147, 1, 0); savedregs = 0; (*(void (__cdecl **)(signed int, signed int, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(145, 1, 0); } goto LABEL_19; } (*(void (__stdcall **)(signed int, signed int, _DWORD, int, int, int))(**(_DWORD **)(v5 + 36) + 100))( 148, 1, 0, v12, v13, savedregs); } else { (*(void (__stdcall **)(signed int, _DWORD, _DWORD, int, int, int))(**(_DWORD **)(v5 + 36) + 100))( 148, 0, 0, v12, v13, savedregs); } (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(147, 0, 0); savedregs = 0; (*(void (__cdecl **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(145, 0, 0); LABEL_19: *(_DWORD *)(v5 + 56) = v9; goto LABEL_20; } if ( v9 && (v9 == 1 || v9 != 2) ) return (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(137, 0, 0); v10 = *(_DWORD *)(v5 + 56) == 1; *(_BYTE *)(v5 + 49) = 0; if ( v10 ) { (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(148, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(147, 0, 0); (*(void (__stdcall **)(signed int, _DWORD, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(145, 0, 0); *(_DWORD *)(v5 + 56) = 0; } LABEL_21: (*(void (__stdcall **)(signed int, signed int, _DWORD))(**(_DWORD **)(v5 + 36) + 100))(137, 1, 0); result = *(_DWORD *)(v5 + 44); if ( result == *(_DWORD *)(v5 + 40) || a3 != result || *(_BYTE *)(v5 + 49) != *(_BYTE *)(v5 + 48) ) { result = sub_936F20((_DWORD *)v5, a3); v11 = *(_BYTE *)(v5 + 49); *(_DWORD *)(v5 + 44) = a3; *(_BYTE *)(v5 + 48) = v11; } return result; } // 937310: could not find valid save-restore pair for edi //----- (009374A0) -------------------------------------------------------- void __thiscall sub_9374A0(_DWORD *this, int a2) { int v2; // edi int v3; // ebx _DWORD *v4; // esi _DWORD *v5; // eax _DWORD *v6; // edx _DWORD *v7; // ecx int v8; // eax int v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = *(_DWORD *)(a2 + 264); v4 = this; a2 = v3; if ( v3 ) { sub_8C4C90(this, v2, &a2); (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v4[8] + 212))(v4[8], *(_DWORD *)(v3 + 108), 0); *(_BYTE *)(v3 + 113) = 0; sub_916F40(v4, v2); v5 = (_DWORD *)v4[5]; if ( v5 ) { while ( 1 ) { v6 = v5 + 2; v7 = v5; v5 = (_DWORD *)*v5; if ( v2 == *v6 ) break; if ( !v5 ) goto LABEL_5; } } else { LABEL_5: v7 = 0; } a2 = (int)v7; if ( v7 ) sub_403620(v4 + 4, (_DWORD **)&a2); *(_DWORD *)(v2 + 264) = 0; v4[(*(_DWORD *)(v3 + 108) >> 5) + 16] &= ~(1 << (*(_DWORD *)(v3 + 108) & 0x1F)); operator delete((void *)v3); } else if ( sub_8C4C90(this, v2, &a2) ) { sub_916F40(v4, v2); v9 = v2; sub_937220(v4 + 4, &v9); v8 = a2; *(_DWORD *)(v2 + 264) = 0; v4[(*(_DWORD *)(v8 + 108) >> 5) + 16] &= ~(1 << (*(_DWORD *)(v8 + 108) & 0x1F)); } } //----- (009375A0) -------------------------------------------------------- void __thiscall sub_9375A0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx int **v5; // eax int **v6; // edi int v7; // ebx int v8; // eax unsigned int v9; // edx unsigned int v10; // eax int ***v11; // ecx _DWORD *v12; // eax _DWORD *v13; // edx int v14; // ecx void *v15; // ST08_4 int v16; // [esp+8h] [ebp-8h] void *v17; // [esp+Ch] [ebp-4h] v1 = this; v2 = this[1]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(int ***)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = (int)v6[1]; v17 = v6[2]; if ( *v6 ) { v6 = (int **)*v6; } else { v8 = (*(int (__thiscall **)(_DWORD *, int))(*v1 + 4))(v1, v7); v9 = v1[1]; v10 = v8 + 1; if ( v10 >= v9 ) { LABEL_14: v6 = 0; } else { v11 = (int ***)(v1[2] + 4 * v10); while ( 1 ) { v6 = *v11; if ( *v11 ) break; ++v10; ++v11; if ( v10 >= v9 ) goto LABEL_14; } } } if ( v17 ) { (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(*(_DWORD *)v1[8] + 212))(v1[8], *((_DWORD *)v17 + 27), 0); *((_BYTE *)v17 + 113) = 0; sub_916F40(v1, v7); v12 = (_DWORD *)v1[5]; if ( v12 ) { while ( 1 ) { v13 = v12 + 2; v14 = (int)v12; v12 = (_DWORD *)*v12; if ( v7 == *v13 ) break; if ( !v12 ) goto LABEL_19; } } else { LABEL_19: v14 = 0; } v16 = v14; if ( v14 ) sub_403620(v1 + 4, (_DWORD **)&v16); v15 = v17; *(_DWORD *)(v7 + 264) = 0; operator delete(v15); } } } //----- (00937690) -------------------------------------------------------- int __cdecl sub_937690(signed int *a1, int *a2) { signed int v2; // edx signed int v3; // esi int result; // eax v2 = *a1; v3 = a1[1]; if ( *a1 == 6 ) v2 = 2; if ( v3 == 3 ) v3 = 0; if ( v2 && v2 != 5 || v3 ) { if ( (!v2 || v2 == 5) && (v3 == 1 || v3 == 2) ) { result = a2[7]; if ( result ) return result; } } else { result = a2[6]; if ( result ) return result; } switch ( v2 ) { case 0: case 3: case 5: if ( v3 < 0 ) goto LABEL_22; if ( v3 <= 1 ) { result = a2[8]; if ( !result ) goto LABEL_22; } else { if ( v3 != 2 ) goto LABEL_22; result = a2[9]; if ( !result ) goto LABEL_22; } return result; case 1: LABEL_22: if ( !v3 ) goto LABEL_43; if ( v3 == 1 ) goto LABEL_52; if ( v3 != 2 ) return 0; goto LABEL_53; case 2: goto LABEL_33; case 4: result = a2[13]; if ( result ) return result; if ( v3 ) { result = a2[12]; if ( result ) return result; result = a2[11]; if ( result ) return result; } else { result = a2[11]; if ( result ) return result; result = a2[12]; if ( result ) return result; } LABEL_33: if ( v3 ) { if ( v3 == 1 ) goto LABEL_46; if ( v3 == 2 ) { result = a2[5]; goto LABEL_49; } return 0; } result = a2[2]; if ( !result ) { result = a2[5]; if ( !result ) { result = a2[1]; if ( !result ) { result = *a2; goto LABEL_47; } } } return result; case 7: if ( v3 ) { result = a2[15]; if ( result ) return result; LABEL_52: result = a2[3]; if ( !result ) { LABEL_53: result = a2[4]; if ( result ) return result; result = a2[5]; LABEL_55: if ( !result ) return 0; return result; } } else { result = a2[14]; if ( result ) return result; LABEL_43: result = a2[1]; if ( !result ) { result = *a2; if ( !*a2 ) { result = a2[2]; if ( !result ) { LABEL_46: result = a2[5]; LABEL_47: if ( result ) return result; result = a2[3]; LABEL_49: if ( result ) return result; result = a2[4]; goto LABEL_55; } } } } break; case 8: result = a2[16]; if ( !result ) { result = a2[19]; if ( !result ) goto LABEL_59; } return result; case 9: result = a2[19]; if ( result ) return result; result = a2[20]; if ( result ) return result; result = a2[21]; if ( result ) return result; result = a2[16]; goto LABEL_68; case 10: LABEL_59: result = a2[17]; if ( !result ) { result = a2[20]; if ( !result ) goto LABEL_61; } return result; case 11: result = a2[20]; if ( result ) return result; result = a2[21]; LABEL_68: if ( result ) return result; result = a2[17]; if ( result ) return result; result = a2[18]; if ( result ) return result; return 0; case 12: LABEL_61: result = a2[18]; if ( result ) return result; result = a2[21]; if ( result ) return result; return 0; case 13: result = a2[21]; if ( !result ) { result = a2[18]; if ( !result ) return 0; } return result; default: return 0; } return result; } //----- (009378E0) -------------------------------------------------------- char __thiscall sub_9378E0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // eax int v5; // edx int v6; // ecx signed int v7; // eax int v8; // edx int v9; // [esp+8h] [ebp-24h] int v10; // [esp+Ch] [ebp-20h] int v11; // [esp+1Ch] [ebp-10h] int v12; // [esp+20h] [ebp-Ch] int v13; // [esp+24h] [ebp-8h] v2 = this; this[23] = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 52))(a2); v3 = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 40))(a2); if ( v3 == 3 ) { if ( (*(int (__stdcall **)(int, _DWORD, int *))(*(_DWORD *)a2 + 68))(a2, 0, &v9) < 0 ) return 0; v5 = v13; v2[21] = v12; v2[22] = v5; goto LABEL_8; } if ( v3 == 5 ) { if ( (*(int (__stdcall **)(int, _DWORD, int *))(*(_DWORD *)a2 + 68))(a2, 0, &v9) < 0 ) return 0; v6 = v13; v2[21] = v12; v2[22] = v6; LABEL_8: v7 = v9; goto LABEL_9; } if ( v3 != 4 ) return 1; if ( (*(int (__stdcall **)(int, _DWORD, int *))(*(_DWORD *)a2 + 68))(a2, 0, &v10) < 0 ) return 0; v8 = v11; v2[22] = v12; v7 = v10; v2[21] = v8; LABEL_9: if ( v7 == 40 || v7 == 41 ) return 0; sub_93AF30(v7, v2 + 3); return 1; } //----- (009379C0) -------------------------------------------------------- unsigned int __thiscall sub_9379C0(_DWORD *this) { unsigned int result; // eax _DWORD *v2; // ecx result = 0; v2 = this + 5; while ( *v2 != 19 ) { ++result; v2 += 3; if ( result >= 4 ) return 4; } return result; } //----- (009379E0) -------------------------------------------------------- _DWORD *__thiscall sub_9379E0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; this[2] = a3; this[1] = a2; *this = &NiDX9TextureData::`vftable'; sub_86A420(this + 3); v3[20] = 0; v3[21] = 0; v3[22] = 0; v3[23] = 0; return v3; } // A46E84: using guessed type void *NiDX9TextureData::`vftable'; //----- (00937A20) -------------------------------------------------------- int __thiscall sub_937A20(_DWORD *this) { return this[22]; } //----- (00937A30) -------------------------------------------------------- int __thiscall sub_937A30(_DWORD *this) { return this[23]; } //----- (00937A40) -------------------------------------------------------- int __thiscall sub_937A40(_DWORD *this) { return this[20]; } //----- (00937A50) -------------------------------------------------------- int __thiscall sub_937A50(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = this[20]; *this = &NiDX9TextureData::`vftable'; if ( result ) { (*(void (__stdcall **)(int))(**(_DWORD **)(this[2] + 1716) + 232))(result); result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v1[20] + 8))(v1[20]); v1[20] = 0; } *v1 = &NiTexture::RendererData::`vftable'; return result; } // A46E70: using guessed type void *NiTexture::RendererData::`vftable'; // A46E84: using guessed type void *NiDX9TextureData::`vftable'; //----- (00937A90) -------------------------------------------------------- int __stdcall sub_937A90(_DWORD *a1, int *a2, int *a3) { _DWORD *v3; // edi int v4; // ebx int v5; // esi int v6; // eax int v7; // ebx char v8; // al int *v10; // ebx int v11; // eax int v12; // eax int v13; // ebx int v14; // eax int v15; // eax char v16; // al int v17; // ebx int v18; // eax unsigned int v19; // [esp+14h] [ebp+8h] int v20; // [esp+1Ch] [ebp+10h] int v21; // [esp+1Ch] [ebp+10h] int v22; // [esp+1Ch] [ebp+10h] int v23; // [esp+1Ch] [ebp+10h] int v24; // [esp+1Ch] [ebp+10h] int v25; // [esp+1Ch] [ebp+10h] int v26; // [esp+1Ch] [ebp+10h] int v27; // [esp+1Ch] [ebp+10h] v3 = a1; v4 = a1[1]; v5 = sub_8667C0(); if ( !a1[2] ) { v6 = *a2; if ( *a2 == 4 ) { if ( v4 == 9 || v4 == 1 ) { v7 = a3[13]; if ( !v7 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, a3[13]) ) { v7 = a3[12]; LABEL_17: if ( !v7 ) goto LABEL_157; if ( !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v7) ) { LABEL_157: v7 = a3[11]; goto LABEL_10; } } } else { v7 = a3[11]; if ( !v7 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, a3[11]) ) { v7 = a3[13]; if ( !v7 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, a3[13]) ) { LABEL_9: v7 = a3[12]; LABEL_10: if ( v7 ) { v8 = (*(int (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v7); LABEL_12: if ( v8 ) return v7; } return 0; } } } return v7; } v10 = a3; switch ( (unsigned int)a3 ) { case 0u: case 2u: if ( v6 == 3 ) { v11 = a3[8]; v20 = v11; if ( v11 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v11) ) return v20; } v20 = v10[9]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } v20 = v10[10]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } } if ( *a2 == 1 ) { v12 = v10[1]; v20 = v12; if ( v12 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v12) ) return v20; v20 = *v10; if ( *v10 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } v20 = v10[2]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } v20 = v10[5]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } } else { v20 = v10[2]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; v20 = v10[5]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } v20 = v10[1]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } v21 = *v10; if ( *v10 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v21) ) return v21; } v20 = v10[3]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; v7 = v10[4]; if ( !v7 ) return 0; v8 = (*(int (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v7); goto LABEL_12; case 1u: case 3u: case 0xCu: case 0xDu: case 0xEu: goto LABEL_79; case 4u: if ( v6 != 1 && v6 != 2 ) { v21 = a3[8]; if ( v21 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v21) ) return v21; } } goto LABEL_79; case 5u: if ( v6 == 1 ) goto LABEL_79; if ( v6 == 2 ) goto LABEL_79; v22 = a3[9]; if ( !v22 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v22) ) goto LABEL_79; return v22; case 6u: if ( v6 == 1 ) goto LABEL_79; if ( v6 == 2 ) goto LABEL_79; v23 = a3[10]; if ( !v23 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v23) ) goto LABEL_79; return v23; case 8u: v7 = a3[11]; if ( v7 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v7) ) return v7; v13 = a3[13]; if ( !v13 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, a3[13]) ) goto LABEL_9; return v13; case 9u: v7 = a3[12]; if ( v7 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v7) ) return v7; v7 = a3[13]; goto LABEL_17; case 0xBu: if ( a2[1] == 2 ) { v14 = a3[15]; v24 = v14; if ( v14 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v14) ) return v24; } else { v20 = a3[14]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, a1, v20) ) return v20; } LABEL_79: v15 = a1[6]; if ( a1[5] != 19 && (v15 == 2 || v15 == 1) ) { v19 = sub_9379C0(a1); v16 = *((_BYTE *)v3 + 28); if ( v16 == 16 ) { if ( v19 < 2 ) { v20 = v10[16]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } v20 = v10[19]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } if ( v19 < 3 ) { v20 = v10[17]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } v20 = v10[20]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } v20 = v10[18]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } v25 = v10[21]; if ( v25 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v25) ) return v25; } else if ( v16 == 32 ) { if ( v19 < 2 ) { v20 = v10[19]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } if ( v19 < 3 ) { v20 = v10[20]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } v20 = v10[21]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } if ( v19 < 2 ) { v20 = v10[16]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } if ( v19 < 3 ) { v20 = v10[17]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } v20 = v10[18]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } } if ( *a2 == 3 ) { if ( a2[1] == 1 ) { v20 = v10[8]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; v20 = v10[9]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } v26 = v10[10]; if ( v26 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v26) ) return v26; } else { v20 = v10[9]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; v20 = v10[10]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } v20 = v10[8]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } } if ( *a2 == 1 ) { if ( a2[1] == 1 ) { v20 = v10[3]; if ( !v20 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) { v20 = v10[4]; if ( !v20 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) { v17 = v10[5]; LABEL_137: if ( v17 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v17) ) return v17; return 0; } } return v20; } v20 = v10[4]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; v20 = v10[5]; if ( v20 ) { if ( (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; } } else { v20 = v10[5]; if ( v20 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v20) ) return v20; if ( a2[1] == 1 ) { v18 = v10[3]; v20 = v18; if ( !v18 || !(*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v18) ) { v17 = v10[4]; goto LABEL_137; } return v20; } v27 = v10[4]; if ( v27 && (*(unsigned __int8 (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)v5 + 12))(v5, v3, v27) ) return v27; } v17 = v10[3]; goto LABEL_137; default: return 0; } } return 0; } //----- (009382B0) -------------------------------------------------------- int sub_9382B0() { int i; // esi int (__stdcall ***v1)(signed int); // ecx int result; // eax for ( i = dword_BA4878; i; i = *(_DWORD *)(i + 48) ) { v1 = *(int (__stdcall ****)(signed int))(i + 40); if ( v1 ) { *(_DWORD *)(i + 40) = 0; result = (**v1)(1); } } return result; } // BA4878: using guessed type int dword_BA4878; //----- (009382E0) -------------------------------------------------------- void *__thiscall sub_9382E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTexture::RendererData::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A46E70: using guessed type void *NiTexture::RendererData::`vftable'; //----- (00938310) -------------------------------------------------------- _DWORD **__thiscall sub_938310(void *this, char a2) { _DWORD **v2; // esi int v3; // eax v2 = (_DWORD **)this; v3 = *((_DWORD *)this + 20); *(_DWORD *)this = &NiDX9TextureData::`vftable'; if ( v3 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(*((_DWORD *)this + 2) + 1716) + 232))(v3); (*(void (__stdcall **)(_DWORD *))(*v2[20] + 8))(v2[20]); v2[20] = 0; } *v2 = &NiTexture::RendererData::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // A46E70: using guessed type void *NiTexture::RendererData::`vftable'; // A46E84: using guessed type void *NiDX9TextureData::`vftable'; //----- (00938370) -------------------------------------------------------- void __thiscall sub_938370(_DWORD *this) { ++this[15]; } //----- (00938380) -------------------------------------------------------- int __thiscall sub_938380(_DWORD *this) { return this[15]; } //----- (00938390) -------------------------------------------------------- char __stdcall sub_938390(_DWORD *a1, unsigned int a2) { int v2; // esi int v3; // eax v2 = a1[1]; (*(void (__thiscall **)(_DWORD, _DWORD *, unsigned int))(*(_DWORD *)v2 + 28))(a1[1], a1, a2); v3 = (*(int (__thiscall **)(int, _DWORD *, unsigned int))(*(_DWORD *)v2 + 24))(v2, a1, a2); if ( !v3 ) return 0; if ( a2 < a1[7] ) *(_DWORD *)(a1[9] + 4 * a2) = v3; return 1; } //----- (009383E0) -------------------------------------------------------- int __thiscall sub_9383E0(char *this, int a2, int a3, rsize_t DstSize, int a5) { char *v5; // esi int (__stdcall *v6)(int, int, rsize_t, void **, int); // eax DWORD v8; // eax void *v9; // ecx void *Src; // [esp+8h] [ebp-4h] v5 = this; v6 = *(int (__stdcall **)(int, int, rsize_t, void **, int))(*(_DWORD *)a2 + 44); Src = 0; if ( v6(a2, a3, DstSize, &Src, a5) < 0 ) return 0; EnterCriticalSection((LPCRITICAL_SECTION)(v5 + 80)); v8 = GetCurrentThreadId(); ++*((_DWORD *)v5 + 27); v9 = Src; *((_DWORD *)v5 + 26) = v8; *((_DWORD *)v5 + 18) = v9; *((_DWORD *)v5 + 19) = DstSize; if ( *((_DWORD *)v5 + 17) < DstSize ) { operator delete(*((void **)v5 + 16)); *((_DWORD *)v5 + 16) = operator new(DstSize); *((_DWORD *)v5 + 17) = DstSize; } if ( !(a5 & 0x3000) ) memcpy_s(*((void **)v5 + 16), DstSize, Src, DstSize); return *((_DWORD *)v5 + 16); } //----- (00938480) -------------------------------------------------------- int __stdcall sub_938480(void *Dst, void *Src, int a3, rsize_t DstSize, int a5) { int result; // eax char *v6; // ebx char *v7; // edi result = a5; if ( a5 ) { v6 = (char *)Src; v7 = (char *)Dst; do { result = memcpy_s(v7, DstSize, v6, DstSize); v7 += a3; v6 += DstSize; --a5; } while ( a5 ); } return result; } //----- (009384C0) -------------------------------------------------------- bool __thiscall sub_9384C0(int this, int a2) { int v2; // esi bool v3; // zf v2 = this; memcpy_s(*(void **)(this + 72), *(_DWORD *)(this + 76), *(const void **)(this + 64), *(_DWORD *)(this + 76)); *(_DWORD *)(v2 + 72) = 0; *(_DWORD *)(v2 + 76) = 0; v3 = (*(_DWORD *)(v2 + 108))-- == 1; if ( v3 ) *(_DWORD *)(v2 + 104) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v2 + 80)); return (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 48))(a2) >= 0; } //----- (00938510) -------------------------------------------------------- _DWORD *__stdcall sub_938510(int a1, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, _DWORD *a7, _DWORD *a8, _DWORD *a9) { _DWORD *result; // eax __int16 v10; // cx unsigned int v11; // ecx result = a4; v10 = 0; *a3 = 0; *a4 = 0; if ( a2 ) v10 = *(_WORD *)(a2 + 32); *a5 = 0; *a4 += 12; *a6 = *a4; if ( v10 ) { *a3 = 10; *a4 += 12; } else { *a3 |= 2u; } if ( *(_DWORD *)(a1 + 36) ) { *a3 |= 0x10u; *a7 = *a4; *a4 += 12; } if ( *(_DWORD *)(a1 + 40) ) { *a3 |= 0x40u; *a8 = *a4; *a4 += 4; } v11 = *(_WORD *)(a1 + 48) & 0x3F; if ( !v11 ) { v11 = 1; LABEL_15: *a3 |= v11 << 8; *a9 = *a4; *a4 += 8 * v11; return result; } if ( v11 > dword_AC4D34 ) v11 = dword_AC4D34; if ( v11 ) goto LABEL_15; return result; } // AC4D34: using guessed type int dword_AC4D34; //----- (009385C0) -------------------------------------------------------- int __thiscall sub_9385C0(void *this, int a2, _DWORD *a3, signed int a4, int a5, int a6) { int v6; // ebx int v7; // edx int v8; // esi int (__thiscall *v9)(int); // eax unsigned __int16 v10; // ax void *v12; // edx unsigned int v13; // eax int v14; // edx int v15; // edi int v16; // eax int v17; // eax int v18; // eax void *v19; // edx void *v20; // eax int *v21; // edx float *v22; // ecx signed int v23; // eax signed int v24; // esi signed int v25; // edi char *v26; // esi char *v27; // edi float v28; // ebx int v29; // edi bool v30; // zf char v31; // [esp+Ch] [ebp-64h] _DWORD *v32; // [esp+10h] [ebp-60h] int v33; // [esp+14h] [ebp-5Ch] int v34; // [esp+18h] [ebp-58h] int v35; // [esp+1Ch] [ebp-54h] int v36; // [esp+20h] [ebp-50h] unsigned int v37; // [esp+24h] [ebp-4Ch] int v38; // [esp+28h] [ebp-48h] void *v39; // [esp+2Ch] [ebp-44h] int v40; // [esp+30h] [ebp-40h] int v41; // [esp+34h] [ebp-3Ch] int v42; // [esp+38h] [ebp-38h] void *Src; // [esp+3Ch] [ebp-34h] int v44; // [esp+40h] [ebp-30h] char v45; // [esp+47h] [ebp-29h] int v46; // [esp+48h] [ebp-28h] float v47; // [esp+4Ch] [ebp-24h] unsigned int v48; // [esp+50h] [ebp-20h] int v49; // [esp+54h] [ebp-1Ch] unsigned int v50; // [esp+64h] [ebp-Ch] int v51; // [esp+68h] [ebp-8h] v6 = a2; v7 = *(_DWORD *)a2; v8 = (int)this; v32 = a3; v9 = *(int (__thiscall **)(int))(v7 + 64); v40 = a6; v36 = (int)this; v34 = a2; v44 = a5; v10 = v9(a2); v38 = v10; if ( !v10 ) return a5; v12 = *(void **)(a2 + 32); v39 = *(void **)(a2 + 36); v13 = *(_WORD *)(a2 + 48) & 0x3F; Src = v12; v14 = *(_DWORD *)(a2 + 40); v37 = v13; v33 = v14; if ( v13 > 8 ) v37 = 8; v48 = 0; v41 = 0; sub_938510(a2, 0, &v48, &v41, &v46, &v31, &v42, &v47, &v35); v15 = *(_DWORD *)(a2 + 60); sub_936880(*(_DWORD **)(a2 + 60), v48); if ( *(_DWORD *)(v15 + 28) ) **(_DWORD **)(v15 + 32) = v41; v16 = v40; v45 = 1; if ( v40 ) { v45 = 0; } else { if ( v44 && (v17 = *(_DWORD *)(v44 + 8)) != 0 && (*(_WORD *)(a2 + 50) & 0xF000) != -32768 && ((*(void (__stdcall **)(int, int *))(*(_DWORD *)v17 + 52))(v17, &v49), v49 == 100) && v51 == v48 && v50 >= v41 * (unsigned int)(unsigned __int16)v38 ) { v18 = v44; } else { if ( !sub_938390((_DWORD *)v15, 0) ) return 0; if ( *(_DWORD *)(v15 + 28) ) v44 = **(_DWORD **)(v15 + 36); else v44 = 0; v18 = v44; a4 = 4095; } v16 = sub_9383E0( (char *)v8, *(_DWORD *)(v18 + 8), *(_DWORD *)(v18 + 12), *(_DWORD *)(v18 + 20), *(_DWORD *)(v18 + 16)); v40 = v16; } if ( v32 ) { if ( Src && a4 & 1 ) { v19 = (void *)(v16 + v46); if ( v39 ) v20 = (void *)(v42 + v16); else v20 = 0; sub_871EB0(v32, *(_DWORD *)(a2 + 32), *(_DWORD *)(a2 + 36), *(unsigned __int16 *)(a2 + 12), v19, v20, 0, 0, v41); goto LABEL_36; } } else { if ( Src && a4 & 1 ) { sub_938480((void *)(v46 + v16), Src, v41, 0xCu, (unsigned __int16)v38); v16 = v40; } if ( v39 && a4 & 2 ) { sub_938480((void *)(v42 + v16), v39, v41, 0xCu, (unsigned __int16)v38); LABEL_36: v16 = v40; goto LABEL_37; } } LABEL_37: if ( v33 ) { if ( a4 & 4 ) { v21 = (int *)(v16 + LODWORD(v47)); if ( (_WORD)v38 ) { v22 = (float *)(v33 + 4); v39 = (void *)(unsigned __int16)v38; do { v47 = v22[2] * 255.0; v46 = (signed int)v47; v23 = (signed int)v47; v47 = *(v22 - 1) * 255.0; Src = (void *)(signed int)v47; v24 = (signed int)v47; v47 = *v22 * 255.0; v48 = (signed int)v47; v25 = (signed int)v47; v47 = v22[1] * 255.0; v42 = (signed int)v47; v22 += 4; *v21 = v42 | ((v25 | ((v24 | (v23 << 8)) << 8)) << 8); v21 = (int *)((char *)v21 + v41); v39 = (char *)v39 - 1; } while ( v39 ); v8 = v36; v16 = v40; } } } if ( a4 & 8 ) { v48 = 0; if ( v37 ) { v26 = (char *)(v16 + v35); LODWORD(v47) = (unsigned __int16)v38; v42 = v16 + v35; do { v27 = (char *)sub_8795A0(v6, v48); if ( v47 != 0.0 ) { v28 = v47; do { memcpy_s(v26, 8u, v27, 8u); v26 += v41; v27 += 8; --LODWORD(v28); } while ( v28 != 0.0 ); v6 = v34; } v26 = (char *)(v42 + 8); ++v48; v42 += 8; } while ( v48 < v37 ); v8 = v36; } } if ( v45 ) { v29 = *(_DWORD *)(v44 + 8); memcpy_s(*(void **)(v8 + 72), *(_DWORD *)(v8 + 76), *(const void **)(v8 + 64), *(_DWORD *)(v8 + 76)); *(_DWORD *)(v8 + 72) = 0; *(_DWORD *)(v8 + 76) = 0; v30 = (*(_DWORD *)(v8 + 108))-- == 1; if ( v30 ) *(_DWORD *)(v8 + 104) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v8 + 80)); if ( (*(int (__stdcall **)(int))(*(_DWORD *)v29 + 48))(v29) < 0 ) return 0; } return v44; } //----- (00938970) -------------------------------------------------------- int __thiscall sub_938970(char *this, int a2, unsigned __int16 a3, char *a4, int a5, char *a6, char a7, int a8, int a9) { char *v9; // edi int v10; // esi signed int v11; // ebx _DWORD *v12; // ecx int v13; // eax int v14; // eax int *v16; // edx int v17; // edi float *v18; // esi int *v19; // edx float *v20; // ecx float v21; // ST34_4 signed int v22; // eax float v23; // ST34_4 signed int v24; // esi float v25; // ST34_4 signed int v26; // edi float v27; // ST34_4 char *v28; // esi int v29; // esi bool v30; // zf signed int v31; // [esp+Ch] [ebp-4Ch] int v32; // [esp+10h] [ebp-48h] signed int v33; // [esp+14h] [ebp-44h] char *v34; // [esp+18h] [ebp-40h] char *v35; // [esp+1Ch] [ebp-3Ch] int v36; // [esp+1Ch] [ebp-3Ch] int v37; // [esp+20h] [ebp-38h] int v38; // [esp+28h] [ebp-30h] char v39; // [esp+33h] [ebp-25h] char *Src; // [esp+38h] [ebp-20h] int v41; // [esp+3Ch] [ebp-1Ch] unsigned int v42; // [esp+4Ch] [ebp-Ch] int v43; // [esp+50h] [ebp-8h] v9 = this; v35 = this; Src = a4; v34 = a6; v37 = a9; if ( a3 && a4 ) { v10 = 4; v11 = 16; if ( a5 ) { v10 = 68; v33 = 16; v11 = 20; } if ( a6 ) { v10 |= 0x100u; v31 = v11; v11 += 8; } sub_936880((_DWORD *)a2, v10); v12 = (_DWORD *)a2; if ( *(_DWORD *)(a2 + 28) ) **(_DWORD **)(a2 + 32) = v11; v39 = 1; if ( a9 ) { v38 = a8; v39 = 0; LABEL_24: if ( a7 & 1 && a3 > 0u ) { v17 = a3; v18 = (float *)(v37 + 12); do { memcpy_s(v18 - 3, 8u, Src, 8u); Src += 8; *(v18 - 1) = 0.0; *v18 = 1.0; v18 = (float *)((char *)v18 + v11); --v17; } while ( v17 ); v9 = v35; } if ( a5 ) { if ( a7 & 4 ) { v19 = (int *)(v37 + v33); if ( a3 > 0u ) { v20 = (float *)(a5 + 4); v32 = a3; do { v21 = v20[2] * 255.0; v22 = (signed int)v21; v23 = *(v20 - 1) * 255.0; v24 = (signed int)v23; v25 = *v20 * 255.0; v26 = (signed int)v25; v27 = v20[1] * 255.0; v20 += 4; *v19 = (signed int)v27 | ((v26 | ((v24 | (v22 << 8)) << 8)) << 8); v19 = (int *)((char *)v19 + v11); --v32; } while ( v32 ); v9 = v35; } } } if ( a6 ) { if ( a7 & 2 ) { v28 = (char *)(v31 + v37); if ( a3 > 0u ) { v36 = a3; do { memcpy_s(v28, 8u, v34, 8u); v34 += 8; v28 += v11; --v36; } while ( v36 ); } } } if ( !v39 ) return v38; v29 = *(_DWORD *)(v38 + 8); memcpy_s(*((void **)v9 + 18), *((_DWORD *)v9 + 19), *((const void **)v9 + 16), *((_DWORD *)v9 + 19)); *((_DWORD *)v9 + 18) = 0; *((_DWORD *)v9 + 19) = 0; v30 = (*((_DWORD *)v9 + 27))-- == 1; if ( v30 ) *((_DWORD *)v9 + 26) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v9 + 80)); if ( (*(int (__stdcall **)(int))(*(_DWORD *)v29 + 48))(v29) >= 0 ) return v38; return 0; } if ( a8 ) { v13 = *(_DWORD *)(a8 + 8); if ( v13 ) { (*(void (__stdcall **)(int, int *))(*(_DWORD *)v13 + 52))(v13, &v41); if ( v41 == 100 && v43 == v10 && v42 >= v11 * (unsigned int)a3 ) { v14 = a8; v38 = a8; LABEL_23: v37 = sub_9383E0( v9, *(_DWORD *)(v14 + 8), *(_DWORD *)(v14 + 12), *(_DWORD *)(v14 + 20), *(_DWORD *)(v14 + 16)); goto LABEL_24; } v12 = (_DWORD *)a2; } } if ( !sub_938390(v12, 0) ) return 0; if ( *(_DWORD *)(a2 + 28) ) { v16 = *(int **)(a2 + 36); v14 = *v16; v38 = *v16; } else { v38 = 0; v14 = 0; } goto LABEL_23; } return a8; } //----- (00938C50) -------------------------------------------------------- int __thiscall sub_938C50(void *this, int a2, int a3, int a4, signed int a5, int a6, int a7) { __int16 v7; // ax int v8; // edx int v9; // edx int v10; // esi int v11; // eax int v12; // eax int v13; // edi int v14; // eax char *v16; // edi unsigned int v17; // esi int v18; // edi int v19; // esi signed int v20; // ebx unsigned int v21; // edx unsigned int v22; // ecx int v23; // eax unsigned __int16 v24; // cx int v25; // eax unsigned int v26; // ebx char *v27; // edi unsigned int v28; // esi int v29; // edi unsigned int *v30; // edx unsigned int v31; // ecx signed int v32; // eax signed int v33; // esi char *v34; // edi unsigned int v35; // esi int v36; // ebx int v37; // esi int v38; // edi bool v39; // zf int v40; // [esp+2Ch] [ebp-168h] int v41; // [esp+30h] [ebp-164h] int v42; // [esp+34h] [ebp-160h] int v43; // [esp+38h] [ebp-15Ch] int v44; // [esp+3Ch] [ebp-158h] unsigned int v45; // [esp+40h] [ebp-154h] int v46; // [esp+44h] [ebp-150h] int v47; // [esp+48h] [ebp-14Ch] int v48; // [esp+4Ch] [ebp-148h] int v49; // [esp+50h] [ebp-144h] unsigned int v50; // [esp+54h] [ebp-140h] int v51; // [esp+58h] [ebp-13Ch] float v52; // [esp+5Ch] [ebp-138h] float v53; // [esp+60h] [ebp-134h] int v54; // [esp+64h] [ebp-130h] char v55; // [esp+6Bh] [ebp-129h] int v56; // [esp+6Ch] [ebp-128h] char ArgList[4]; // [esp+70h] [ebp-124h] void *Dst; // [esp+74h] [ebp-120h] int v59; // [esp+78h] [ebp-11Ch] unsigned int v60; // [esp+88h] [ebp-10Ch] int v61; // [esp+8Ch] [ebp-108h] char DstBuf; // [esp+90h] [ebp-104h] v54 = a6; Dst = *(void **)(a2 + 32); v7 = *(_WORD *)(a2 + 48); v48 = a7; v50 = *(_DWORD *)(a2 + 36); v8 = *(_DWORD *)(a2 + 40); v44 = (int)this; v41 = a2; v45 = v7 & 0x3F; v46 = v8; if ( v45 > 8 ) v45 = 8; v9 = *(_DWORD *)(a4 + 12); v56 = *(unsigned __int16 *)(a4 + 32); v51 = *(unsigned __int16 *)(a4 + 28); v47 = v9; *(_DWORD *)ArgList = 0; v49 = 0; sub_938510(a2, a4, ArgList, &v49, &v42, &v52, &v40, &v53, &v43); v10 = *(_DWORD *)(a4 + 40); sub_936880(*(_DWORD **)(a4 + 40), *(int *)ArgList); if ( *(_DWORD *)(v10 + 28) ) **(_DWORD **)(v10 + 32) = v49; v55 = 1; if ( v48 ) { v55 = 0; } else { if ( v54 && (v11 = *(_DWORD *)(v54 + 8)) != 0 && (*(_WORD *)(a2 + 50) & 0xF000) != -32768 && ((*(void (__stdcall **)(int, int *))(*(_DWORD *)v11 + 52))(v11, &v59), v59 == 100) && v61 == *(_DWORD *)ArgList && v60 >= v49 * (unsigned int)(unsigned __int16)v51 ) { v12 = v54; } else { v13 = *(_DWORD *)(v10 + 4); (*(void (__thiscall **)(_DWORD, int, _DWORD))(*(_DWORD *)v13 + 28))(*(_DWORD *)(v10 + 4), v10, 0); v14 = (*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v13 + 24))(v13, v10, 0); if ( !v14 ) return 0; if ( *(_DWORD *)(v10 + 28) && (**(_DWORD **)(v10 + 36) = v14, *(_DWORD *)(v10 + 28)) ) v54 = **(_DWORD **)(v10 + 36); else v54 = 0; v12 = v54; a5 = 4095; } v48 = sub_9383E0( (char *)v44, *(_DWORD *)(v12 + 8), *(_DWORD *)(v12 + 12), *(_DWORD *)(v12 + 20), *(_DWORD *)(v12 + 16)); } v16 = (char *)(v42 + v48); if ( *(float *)&Dst != 0.0 && a5 & 1 ) { v17 = 0; if ( (_WORD)v51 ) { do { memcpy_s(v16, 0xCu, (char *)Dst + 12 * *(unsigned __int16 *)(v47 + 2 * v17), 0xCu); v16 += v49; ++v17; } while ( v17 < (unsigned __int16)v51 ); } v18 = LODWORD(v52) + v48; v19 = *(_DWORD *)(a4 + 8); *(_DWORD *)ArgList = 0; if ( (_WORD)v51 ) { v20 = (unsigned __int16)v56; do { v21 = 0; *(float *)&Dst = 1.0; if ( v20 >= 4 ) { v22 = ((unsigned int)(v20 - 4) >> 2) + 1; v23 = v19 + 8; v21 = 4 * v22; do { v23 += 16; --v22; v52 = *(float *)&Dst - *(float *)(v23 - 24); v52 = v52 - *(float *)(v23 - 20); v52 = v52 - *(float *)(v23 - 16); *(float *)&Dst = v52 - *(float *)(v23 - 12); } while ( v22 ); } for ( ; v21 < v20; *(float *)&Dst = *(float *)&Dst - *(float *)(v19 + 4 * v21 - 4) ) ++v21; v52 = fabs(*(float *)&Dst); if ( v52 > 0.0000099999997 ) sub_7FF6E0( &DstBuf, 0x100u, "ILLEGAL WEIGHTS! Vertex %4d - Weight Sum %8.5f (%8.5f)\n", *(_DWORD *)ArgList, 1.0 - *(float *)&Dst, *(float *)&Dst); v24 = 0; if ( v20 - 1 > 0 ) { v25 = 0; do { ++v24; *(float *)(v18 + 4 * v25) = *(float *)(v19 + 4 * v25); v25 = v24; } while ( v24 < v20 - 1 ); } if ( (_WORD)v56 == 3 || (_WORD)v56 == 1 ) *(float *)(4 * v24 + v18) = *(float *)(4 * v24 + v19); v18 += v49; v19 += 4 * v20; ++*(_DWORD *)ArgList; } while ( *(_DWORD *)ArgList < (unsigned int)(unsigned __int16)v51 ); } } if ( v50 ) { if ( a5 & 2 ) { v26 = (unsigned __int16)v51; v27 = (char *)(v40 + v48); v28 = 0; if ( (_WORD)v51 ) { do { memcpy_s(v27, 0xCu, (const void *)(v50 + 12 * *(unsigned __int16 *)(v47 + 2 * v28)), 0xCu); v27 += v49; ++v28; } while ( v28 < v26 ); } } } v29 = v46; if ( v46 ) { if ( a5 & 4 ) { v30 = (unsigned int *)(v48 + LODWORD(v53)); v31 = 0; if ( (_WORD)v51 ) { do { v53 = *(float *)(v29 + 16 * *(unsigned __int16 *)(v47 + 2 * v31) + 12) * 255.0; v56 = (signed int)v53; v32 = (signed int)v53; v53 = *(float *)(v29 + 16 * *(unsigned __int16 *)(v47 + 2 * v31)) * 255.0; Dst = (void *)(signed int)v53; v33 = (signed int)v53; v53 = *(float *)(v29 + 16 * *(unsigned __int16 *)(v47 + 2 * v31) + 4) * 255.0; *(_DWORD *)ArgList = (signed int)v53; v46 = (signed int)v53; v53 = *(float *)(v29 + 16 * *(unsigned __int16 *)(v47 + 2 * v31) + 8) * 255.0; v50 = (signed int)v53; ++v31; *v30 = v50 | ((v46 | ((v33 | (v32 << 8)) << 8)) << 8); v30 = (unsigned int *)((char *)v30 + v49); } while ( v31 < (unsigned __int16)v51 ); } } } if ( a5 & 8 ) { *(_DWORD *)ArgList = 0; if ( v45 ) { v50 = (unsigned __int16)v51; Dst = (void *)(v43 + v48); do { v34 = (char *)Dst; v35 = 0; v36 = sub_8795A0(v41, *(unsigned __int16 *)ArgList); if ( v50 ) { do { memcpy_s(v34, 8u, (const void *)(v36 + 8 * *(unsigned __int16 *)(v47 + 2 * v35)), 8u); v34 += v49; ++v35; } while ( v35 < v50 ); } Dst = (char *)Dst + 8; ++*(_DWORD *)ArgList; } while ( *(_DWORD *)ArgList < v45 ); } } if ( v55 ) { v37 = v44; v38 = *(_DWORD *)(v54 + 8); memcpy_s(*(void **)(v44 + 72), *(_DWORD *)(v44 + 76), *(const void **)(v44 + 64), *(_DWORD *)(v44 + 76)); *(_DWORD *)(v37 + 72) = 0; *(_DWORD *)(v37 + 76) = 0; v39 = (*(_DWORD *)(v37 + 108))-- == 1; if ( v39 ) *(_DWORD *)(v37 + 104) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v37 + 80)); if ( (*(int (__stdcall **)(int))(*(_DWORD *)v38 + 48))(v38) < 0 ) return 0; } return v54; } //----- (009392D0) -------------------------------------------------------- int __thiscall sub_9392D0(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // eax unsigned int v8; // edx unsigned int v9; // eax _DWORD *v10; // ecx int *v11; // edi int v12; // esi int *v14; // [esp+Ch] [ebp-Ch] signed int v15; // [esp+10h] [ebp-8h] _DWORD *v16; // [esp+14h] [ebp-4h] v1 = this + 3; v2 = this[4]; v3 = 0; v16 = v1; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v14 = (int *)v6[2]; if ( *v6 ) { v6 = (_DWORD *)*v6; } else { v7 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v1 + 4))(v1, v6[1]); v8 = v1[1]; v9 = v7 + 1; if ( v9 >= v8 ) { LABEL_15: v6 = 0; } else { v10 = (_DWORD *)(v1[2] + 4 * v9); while ( !*v10 ) { ++v9; ++v10; if ( v9 >= v8 ) { v1 = v16; goto LABEL_15; } } v6 = (_DWORD *)*v10; v1 = v16; } } if ( v14 ) { v11 = v14 + 2; v15 = 5; do { v12 = *v11; if ( *v11 ) { if ( *(_DWORD *)(v12 + 32) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v12 + 32) + 8))(*(_DWORD *)(v12 + 32)); sub_93FCD0((_DWORD *)v12); operator delete((void *)v12); } ++v11; --v15; } while ( v15 ); operator delete(v14); v1 = v16; } } return sub_940360(v1); } //----- (009393C0) -------------------------------------------------------- void **__thiscall sub_9393C0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46EB0: using guessed type void *NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; //----- (00939400) -------------------------------------------------------- void **__thiscall sub_939400(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A46EB0: using guessed type void *NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; // A46F0C: using guessed type void *NiTPointerMap::`vftable'; //----- (00939440) -------------------------------------------------------- LONG __fastcall sub_939440(_DWORD *a1) { _DWORD *v1; // edi unsigned int v2; // eax int v3; // eax _DWORD *v4; // esi unsigned int v5; // edx unsigned int v6; // eax _DWORD *v7; // eax _DWORD *v8; // ebx int v9; // eax unsigned int v10; // edx unsigned int v11; // eax int *v12; // edi int v13; // esi int v14; // esi int v15; // edi _DWORD *v16; // ebx unsigned int v18; // [esp+Ch] [ebp-14h] int *v19; // [esp+10h] [ebp-10h] signed int v20; // [esp+14h] [ebp-Ch] _DWORD *v21; // [esp+18h] [ebp-8h] int v22; // [esp+1Ch] [ebp-4h] v1 = a1; v2 = 0; v21 = a1; *a1 = &NiDX9VertexBufferManager::`vftable'; v18 = 0; do { if ( v2 ) { v3 = v2 - 1; if ( v3 ) { if ( v3 == 1 ) { v4 = v1 + 11; v22 = (int)(v1 + 11); goto LABEL_9; } } else { v22 = (int)(v1 + 7); } } else { a1 = v1 + 3; v22 = (int)(v1 + 3); } v4 = (_DWORD *)v22; LABEL_9: v5 = v4[1]; v6 = 0; if ( v5 ) { a1 = (_DWORD *)v4[2]; while ( !*a1 ) { ++v6; ++a1; if ( v6 >= v5 ) goto LABEL_13; } v7 = *(_DWORD **)(v4[2] + 4 * v6); } else { LABEL_13: v7 = 0; } v8 = v7; while ( v8 ) { v19 = (int *)v8[2]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 4))(v4, v8[1]); v10 = v4[1]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_23: v8 = 0; } else { a1 = (_DWORD *)(v4[2] + 4 * v11); while ( !*a1 ) { ++v11; ++a1; if ( v11 >= v10 ) { v4 = (_DWORD *)v22; goto LABEL_23; } } v8 = (_DWORD *)*a1; v4 = (_DWORD *)v22; } } if ( v19 ) { v12 = v19 + 2; v20 = 5; do { v13 = *v12; if ( *v12 ) { if ( *(_DWORD *)(v13 + 32) ) (*(void (__thiscall **)(_DWORD *, _DWORD))(**(_DWORD **)(v13 + 32) + 8))(a1, *(_DWORD *)(v13 + 32)); sub_93FCD0((_DWORD *)v13); operator delete((void *)v13); } ++v12; --v20; } while ( v20 ); operator delete(v19); v1 = v21; v4 = (_DWORD *)v22; } } v2 = v18 + 1; v18 = v2; } while ( v2 < 3 ); v14 = (int)(v1 + 3); sub_940360(v1 + 3); v15 = (int)(v1 + 7); sub_940360((_DWORD *)v15); v16 = v21 + 11; sub_940360(v21 + 11); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v21[2] + 8))(v21[2]); v21[2] = 0; operator delete((void *)v21[16]); DeleteCriticalSection((LPCRITICAL_SECTION)(v21 + 20)); *v16 = &NiTPointerMap::`vftable'; sub_940360(v21 + 11); *v16 = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; sub_940360(v21 + 11); operator delete((void *)v21[13]); *(_DWORD *)v15 = &NiTPointerMap::`vftable'; sub_940360((_DWORD *)v15); *(_DWORD *)v15 = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; sub_940360((_DWORD *)v15); operator delete(*(void **)(v15 + 8)); *(_DWORD *)v14 = &NiTPointerMap::`vftable'; sub_940360((_DWORD *)v14); *(_DWORD *)v14 = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; sub_940360((_DWORD *)v14); operator delete(*(void **)(v14 + 8)); *v21 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A46EB0: using guessed type void *NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; // A46F0C: using guessed type void *NiTPointerMap::`vftable'; // A46F2C: using guessed type void *NiDX9VertexBufferManager::`vftable'; //----- (00939650) -------------------------------------------------------- _DWORD *__thiscall sub_939650(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST28_4 void *v5; // eax size_t v6; // ST18_4 void *v7; // eax size_t v8; // ST08_4 int v9; // eax v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiDX9VertexBufferManager::`vftable'; v2[4] = 37; v2[3] = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; v2[6] = 0; v3 = operator new(0x94u); v4 = 4 * v2[4]; v2[5] = v3; memset(v3, 0, v4); v2[3] = &NiTPointerMap::`vftable'; v2[8] = 37; v2[7] = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; v2[10] = 0; v5 = operator new(0x94u); v6 = 4 * v2[8]; v2[9] = v5; memset(v5, 0, v6); v2[7] = &NiTPointerMap::`vftable'; v2[12] = 37; v2[11] = &NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; v2[14] = 0; v7 = operator new(0x94u); v8 = 4 * v2[12]; v2[13] = v7; memset(v7, 0, v8); v2[11] = &NiTPointerMap::`vftable'; v9 = (int)(v2 + 20); v2[16] = 0; v2[17] = 0; v2[18] = 0; v2[19] = 0; *(_DWORD *)(v9 + 24) = 0; *(_DWORD *)(v9 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(v2 + 20)); v2[2] = a2; (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); sub_940360(v2 + 3); sub_940360(v2 + 7); sub_940360(v2 + 11); v2[15] = 0; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A46EB0: using guessed type void *NiTMapBase,unsigned int,NiDX9VertexBufferManager::NiDX9VBInfo *>::`vftable'; // A46F0C: using guessed type void *NiTPointerMap::`vftable'; // A46F2C: using guessed type void *NiDX9VertexBufferManager::`vftable'; //----- (00939790) -------------------------------------------------------- void *__thiscall sub_939790(void *this, char a2) { void *v2; // esi v2 = this; sub_939440(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009397C0) -------------------------------------------------------- char __thiscall sub_9397C0(_DWORD *this, int a2) { _DWORD *v2; // esi signed int v3; // eax int v4; // edx int v5; // eax int v6; // edi int v7; // ecx unsigned int v8; // edx unsigned int v9; // eax int v10; // ebx int v11; // edx int v12; // eax int v13; // ST0C_4 int v14; // ST08_4 int v15; // ecx signed int v16; // eax char result; // al void *v18; // ecx signed int v19; // [esp+8h] [ebp-8h] int v20; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_93AA30((int)(this + 3)); v4 = **(_DWORD **)(a2 + 84); v19 = v3; v2[21] = v4; v5 = **(_DWORD **)(a2 + 88); v2[22] = v5; if ( v4 && ((v4 - 1) & v4) == 0 && v5 && ((v5 - 1) & v5) == 0 || (*(int (**)(void))(*(_DWORD *)v2[2] + 64))() & 8 ) v2[23] = *(_DWORD *)(a2 + 96); else v2[23] = 1; v6 = v2[23]; v7 = dword_BA7164; if ( dword_BA7164 > (unsigned int)(v6 - 1) ) v7 = v6 - 1; if ( v7 ) { v8 = v2[21]; v9 = v2[22]; v10 = v7; do { if ( v8 & 1 ) ++v8; v8 >>= 1; if ( v9 & 1 ) ++v9; v9 >>= 1; --v10; } while ( v10 ); v2[21] = v8; v2[22] = v9; } v11 = v2[2]; v2[27] = v7; v12 = *(_DWORD *)(v11 + 132); v13 = v6 - v7; v14 = v2[22]; v15 = v2[21]; v20 = 0; v16 = (*(int (__stdcall **)(int, int, int, int, _DWORD, signed int, signed int, int *, _DWORD))(*(_DWORD *)v12 + 92))( v12, v15, v14, v13, 0, v19, 1, &v20, 0); if ( v16 >= 0 && v20 ) { v2[20] = v20; result = 1; } else { sub_93C3F0(v16); nullsub_6(v18); v2[20] = 0; result = 0; } return result; } // BA7164: using guessed type int dword_BA7164; //----- (009398E0) -------------------------------------------------------- void __cdecl sub_9398E0(_DWORD *a1, int a2, int *a3, int a4) { int v4; // ecx signed int v5; // eax void *v6; // ecx signed int v7; // eax void *v8; // ecx int v9; // ecx unsigned int v10; // eax unsigned int v11; // ebx signed int v12; // edx rsize_t v13; // edx unsigned int v14; // ebx char *v15; // esi char *v16; // edi rsize_t v17; // [esp+14h] [ebp-34h] void *Dst; // [esp+18h] [ebp-30h] rsize_t DstSize; // [esp+1Ch] [ebp-2Ch] unsigned int v20; // [esp+20h] [ebp-28h] int v21; // [esp+24h] [ebp-24h] unsigned int v22; // [esp+40h] [ebp-8h] v4 = *a3; v20 = a4; v5 = (*(int (__stdcall **)(int *, int *))(v4 + 48))(a3, &v21); if ( v5 >= 0 ) { v7 = (*(int (__stdcall **)(int *, rsize_t *, _DWORD, _DWORD))(*a3 + 52))(a3, &v17, 0, 0); if ( v7 >= 0 ) { v9 = *(_DWORD *)(a1[21] + 4 * a2); v10 = *(_DWORD *)(a1[22] + 4 * a2); v11 = v9 * a1[25]; DstSize = v17; if ( v10 > v22 ) v10 = v22; v12 = a1[3]; if ( v12 < 4 || v12 > 6 ) { v13 = DstSize; } else { v13 = v17 >> 2; v14 = v9 + 3; if ( v21 == 827611204 ) v11 = (v14 >> 1) & 0x7FFFFFE; else v11 = v14 & 0xFFFFFFC; v10 = (v10 + 3) & 0xFFFFFFC; } if ( v11 == v13 ) { memcpy_s( Dst, v11 * v10, (const void *)(a1[20] + *(_DWORD *)(a1[23] + 4 * a2) + v20 * *(_DWORD *)(a1[23] + 4 * a1[24])), v11 * v10); } else { DstSize = v13; if ( v11 <= v13 ) DstSize = v11; v15 = (char *)(a1[20] + *(_DWORD *)(a1[23] + 4 * a2) + v20 * *(_DWORD *)(a1[23] + 4 * a1[24])); v16 = (char *)Dst; if ( v10 ) { v20 = v10; do { memcpy_s(v16, DstSize, v15, DstSize); v16 += v17; v15 += v11; --v20; } while ( v20 ); } } (*(void (__stdcall **)(int *))(*a3 + 56))(a3); } else { sub_93C3F0(v7); nullsub_6(v8); } } else { sub_93C3F0(v5); nullsub_6(v6); } } //----- (00939A70) -------------------------------------------------------- char __thiscall sub_939A70(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx int v4; // eax unsigned int v5; // edi int v6; // eax int v7; // edx int v8; // eax int v10; // ecx int v11; // eax _DWORD *v12; // eax signed int v13; // ST04_4 int v14; // edx int v15; // eax int v16; // [esp+10h] [ebp-6Ch] int v17; // [esp+10h] [ebp-6Ch] int v18; // [esp+10h] [ebp-6Ch] char v19; // [esp+14h] [ebp-68h] int v20; // [esp+58h] [ebp-24h] int v21; // [esp+5Ch] [ebp-20h] int v22; // [esp+6Ch] [ebp-10h] int v23; // [esp+70h] [ebp-Ch] int v24; // [esp+74h] [ebp-8h] v2 = a2; v3 = this; v4 = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 52))(a2); v5 = 0; v3[23] = v4; *((_BYTE *)v3 + 97) = v4 != 1; v3[25] = 0; v6 = (*(int (__stdcall **)(int))(*(_DWORD *)v2 + 40))(v2); switch ( v6 ) { case 3: v16 = 0; if ( v3[23] > 0u ) { while ( (*(int (__stdcall **)(int, unsigned int, int *))(*(_DWORD *)v2 + 68))(v2, v5, &v20) >= 0 ) { if ( !v5 ) { v7 = v23; v3[22] = v24; v8 = v20; v3[21] = v7; if ( v8 == 40 || v8 == 41 ) return 0; qmemcpy(v3 + 3, sub_86A420(&v19), 0x44u); sub_93AF30(v20, v3 + 3); v5 = v16; v2 = a2; } v3[25] += v23 * v24 * (unsigned int)*((unsigned __int8 *)v3 + 13) >> 3; v16 = ++v5; if ( v5 >= v3[23] ) goto LABEL_28; } return 0; } break; case 5: v17 = 0; if ( v3[23] > 0u ) { while ( (*(int (__stdcall **)(int, unsigned int, int *))(*(_DWORD *)v2 + 68))(v2, v5, &v20) >= 0 ) { if ( !v5 ) { v10 = v24; v3[21] = v23; v11 = v20; v3[22] = v10; if ( v11 == 40 || v11 == 41 ) return 0; v12 = sub_86A420(&v19); v13 = v20; qmemcpy(v3 + 3, v12, 0x44u); sub_93AF30(v13, v3 + 3); v5 = v17; v2 = a2; } v3[25] += v23 * v24 * (unsigned int)*((unsigned __int8 *)v3 + 13) >> 3; v17 = ++v5; if ( v5 >= v3[23] ) goto LABEL_19; } return 0; } LABEL_19: v3[25] *= 6; break; case 4: v18 = 0; if ( v3[23] > 0u ) { while ( (*(int (__stdcall **)(int, unsigned int, int *))(*(_DWORD *)v2 + 68))(v2, v5, &v21) >= 0 ) { if ( !v5 ) { v14 = v22; v3[22] = v23; v15 = v21; v3[21] = v14; if ( v15 == 40 || v15 == 41 ) return 0; qmemcpy(v3 + 3, sub_86A420(&v19), 0x44u); sub_93AF30(v21, v3 + 3); v5 = v18; v2 = a2; } v3[25] += v22 * v23 * v24 * (unsigned int)*((unsigned __int8 *)v3 + 13) >> 3; v18 = ++v5; if ( v5 >= v3[23] ) goto LABEL_28; } return 0; } break; } LABEL_28: v3[20] = v2; return 1; } //----- (00939CA0) -------------------------------------------------------- char __thiscall sub_939CA0(_DWORD *this, int a2) { char result; // al _DWORD *v3; // edi int v4; // ecx int v5; // esi result = 0; v3 = this; if ( a2 ) { v4 = *(_DWORD *)(a2 + 16); if ( v3[29] != v4 ) result = 1; v3[29] = v4; if ( v3[26] != a2 ) { v5 = v3[26]; if ( v5 != a2 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) ) { if ( v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); } v3[26] = a2; InterlockedIncrement((volatile LONG *)(a2 + 4)); } result = 1; } } return result; } //----- (00939D00) -------------------------------------------------------- _DWORD *__thiscall sub_939D00(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; sub_9379E0(this, a2, a3); *((_WORD *)v3 + 48) = 0; v3[25] = 0; *v3 = &NiDX9SourceTextureData::`vftable'; v3[26] = 0; v3[27] = 0; v3[28] = 0; v3[29] = 0; return v3; } // A47004: using guessed type void *NiDX9SourceTextureData::`vftable'; //----- (00939D40) -------------------------------------------------------- int __thiscall sub_939D40(_DWORD *this) { return this[26]; } //----- (00939D50) -------------------------------------------------------- int __thiscall sub_939D50(_DWORD *this) { _DWORD *v1; // edi int v2; // esi v1 = this; *this = &NiDX9SourceTextureData::`vftable'; v2 = this[26]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return sub_937A50(v1); } // A47004: using guessed type void *NiDX9SourceTextureData::`vftable'; //----- (00939D90) -------------------------------------------------------- void __thiscall sub_939D90(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi int v3; // eax int v4; // eax int v5; // ebx int v6; // edi signed int v7; // eax void *v8; // ecx int *v9; // [esp+4h] [ebp-4h] v2 = this; v3 = this[20]; if ( v3 ) { if ( (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 40))(v3) != 5 && (*(int (__stdcall **)(_DWORD))(*(_DWORD *)v2[20] + 40))(v2[20]) != 4 ) { v4 = a2[24]; v5 = v2[20]; v2[23] = v4; v6 = 0; if ( v4 != v2[27] ) { while ( 1 ) { v7 = (*(int (__stdcall **)(int, int, int **))(*(_DWORD *)v5 + 72))(v5, v6, &v9); if ( v7 < 0 ) break; sub_9398E0(a2, v6 + v2[27], v9, 0); (*(void (__stdcall **)(int *))(*v9 + 8))(v9); if ( ++v6 >= (unsigned int)(v2[23] - v2[27]) ) return; } sub_93C3F0(v7); nullsub_6(v8); } } } } //----- (00939E40) -------------------------------------------------------- void __thiscall sub_939E40(int this) { int v1; // esi int v2; // edi char v3; // al int v4; // eax _DWORD *v5; // eax bool v6; // zf _DWORD *v7; // ebx v1 = this; if ( !*(_BYTE *)(this + 96) ) { v2 = *(_DWORD *)(*(_DWORD *)(this + 4) + 60); if ( v2 ) { v3 = sub_939CA0((_DWORD *)this, *(_DWORD *)(v2 + 76)); if ( *(_DWORD *)(v2 + 104) != *(_DWORD *)(v1 + 112) || v3 ) { v4 = sub_8667C0(); v5 = (_DWORD *)(*(int (__thiscall **)(int, int, int, int, _DWORD))(*(_DWORD *)v4 + 16))( v4, v2, v1 + 12, v2, *(unsigned __int8 *)(v1 + 97)); v6 = *(_DWORD *)(v1 + 4) == 0; v7 = v5; *(_DWORD *)(v1 + 112) = *(_DWORD *)(v2 + 104); if ( !v6 ) sub_939D90((_DWORD *)v1, v5); if ( v7 ) { InterlockedIncrement(v7 + 1); if ( !InterlockedDecrement(v7 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); } } } } } //----- (00939EC0) -------------------------------------------------------- #error "939FCE: call analysis failed (funcsize=230)" //----- (0093A160) -------------------------------------------------------- _DWORD *__thiscall sub_93A160(void *this, char a2) { _DWORD *v2; // edi int v3; // esi v2 = this; *(_DWORD *)this = &NiDX9SourceTextureData::`vftable'; v3 = *((_DWORD *)this + 26); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); sub_937A50(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A47004: using guessed type void *NiDX9SourceTextureData::`vftable'; //----- (0093A1B0) -------------------------------------------------------- _DWORD *__cdecl sub_93A1B0(int a1, int *a2) { int v2; // eax _DWORD *v3; // eax _DWORD *v4; // ebx int v6; // edi char *v7; // edi int v8; // eax int *v9; // esi int v10; // ST04_4 int v11; // eax int v12; // eax int v13; // ecx int v14; // eax void *v15; // eax int v16; // eax const void *v17; // esi int v18; // edi char v19; // al int v20; // ecx bool v21; // cl int v22; // esi int v23; // eax void (__thiscall ***v24)(_DWORD, signed int); // esi int v25; // [esp+8h] [ebp-1Ch] int v26; // [esp+Ch] [ebp-18h] int v27; // [esp+10h] [ebp-14h] int v28; // [esp+14h] [ebp-10h] int *v29; // [esp+18h] [ebp-Ch] void *v30; // [esp+1Ch] [ebp-8h] int v31; // [esp+20h] [ebp-4h] if ( !a1 || (v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 4))(a1)) == 0 ) { LABEL_5: v3 = operator new(0x78u); v4 = v3; if ( v3 ) { sub_9379E0(v3, a1, (int)a2); *v4 = &NiDX9SourceTextureData::`vftable'; *((_WORD *)v4 + 48) = 0; v4[25] = 0; v4[26] = 0; v4[27] = 0; v4[28] = 0; v4[29] = 0; } else { v4 = 0; } v6 = *(_DWORD *)(a1 + 60); v31 = v6; v29 = (int *)(a1 + 28); if ( !v6 ) { v7 = *(char **)(a1 + 56); if ( *(_BYTE *)(a1 + 65) && (unsigned __int8)sub_939EC0(v7, (int)a2, a1 + 28) ) { *(_DWORD *)(v4[1] + 40) = v4; return v4; } v8 = sub_8667C0(); v31 = (*(int (__thiscall **)(int, char *, _DWORD))(*(_DWORD *)v8 + 8))(v8, v7, 0); v6 = v31; } v28 = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); v9 = a2 + 319; if ( !v6 ) { v31 = sub_873620(a1, -2147483643); v10 = *(_DWORD *)(a1 + 56); v30 = (void *)v9[a2[415]]; nullsub_6(v30); goto LABEL_33; } v11 = **(_DWORD **)(v6 + 84); if ( v11 && ((v11 - 1) & v11) == 0 && (v12 = **(_DWORD **)(v6 + 88)) != 0 && ((v12 - 1) & v12) == 0 || (*(int (**)(void))(*a2 + 64))() & 8 ) { v30 = (void *)sub_937A90((_DWORD *)(v6 + 8), v29, v9); if ( v30 ) goto LABEL_34; v16 = sub_873620(a1, -2147483644); } else { if ( (*(int (**)(void))(*a2 + 64))() & 4 ) { if ( *v29 == 3 ) { v13 = *v29; v14 = v29[2]; v26 = v29[1]; v27 = v14; v25 = 2; v15 = (void *)sub_937A90((_DWORD *)(v6 + 8), &v25, v9); } else { v15 = (void *)sub_937A90((_DWORD *)(v6 + 8), v29, v9); } v30 = v15; if ( v15 ) { LABEL_34: v17 = v30; v4[28] = *(_DWORD *)(v6 + 104); qmemcpy(v4 + 3, v17, 0x44u); v18 = v31; v4[21] = **(_DWORD **)(v31 + 84); v19 = *((_BYTE *)v4 + 96); v4[22] = **(_DWORD **)(v18 + 88); v21 = 0; if ( !v19 ) { v20 = v29[2]; if ( v20 == 1 || v20 == 2 && byte_BA4880 ) v21 = 1; } *((_BYTE *)v4 + 97) = v21; if ( v19 ) { v22 = v18; } else { v23 = sub_8667C0(); v22 = (*(int (__thiscall **)(int, int, void *, int, _DWORD))(*(_DWORD *)v23 + 16))( v23, v18, v30, v18, *((unsigned __int8 *)v4 + 97)); } if ( v4[20] || (sub_9397C0(v4, v22), v4[20]) ) sub_939D90(v4, (_DWORD *)v22); sub_939CA0(v4, *(_DWORD *)(v18 + 76)); v4[25] = *(_DWORD *)(v22 + 108) * *(_DWORD *)(*(_DWORD *)(v22 + 92) + 4 * *(_DWORD *)(v22 + 96)); InterlockedIncrement((volatile LONG *)(v22 + 4)); *(_DWORD *)(v4[1] + 40) = v4; if ( !InterlockedDecrement((volatile LONG *)(v22 + 4)) ) (**(void (__thiscall ***)(int, signed int))v22)(v22, 1); v24 = (void (__thiscall ***)(_DWORD, signed int))v28; if ( v28 ) { if ( !InterlockedDecrement((volatile LONG *)(v28 + 4)) ) (**v24)(v24, 1); } return v4; } v31 = sub_873620(a1, -2147483644); v30 = (void *)v9[a2[415]]; LABEL_33: v6 = v31; *((_BYTE *)v4 + 96) = 1; goto LABEL_34; } v16 = sub_873620(a1, -2147483642); } v31 = v16; v30 = (void *)v9[a2[415]]; goto LABEL_33; } while ( (char *)v2 != dword_BA4B34 ) { v2 = *(_DWORD *)(v2 + 4); if ( !v2 ) goto LABEL_5; } return sub_93A590(a1, (int)a2); } // A47004: using guessed type void *NiDX9SourceTextureData::`vftable'; // BA4880: using guessed type char byte_BA4880; //----- (0093A4C0) -------------------------------------------------------- void *__thiscall sub_93A4C0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiDX9SourceCubeMapData::`vftable'; sub_939D50(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A470BC: using guessed type void *NiDX9SourceCubeMapData::`vftable'; //----- (0093A4F0) -------------------------------------------------------- BOOL __thiscall sub_93A4F0(_DWORD *this) { int v1; // eax v1 = this[1]; return v1 == 2 || v1 == 3; } //----- (0093A510) -------------------------------------------------------- void __thiscall sub_93A510(_DWORD *this, _DWORD *a2, int *a3) { _DWORD *v3; // ebx int v4; // eax int v5; // esi int v6; // edi signed int v7; // eax void *v8; // ecx int v9; // [esp+8h] [ebp-4h] v3 = this; v4 = this[20]; v5 = 0; v9 = this[20]; if ( this[23] ) { v6 = (int)a3; while ( 1 ) { v7 = (*(int (__stdcall **)(int, int, int, int **))(*(_DWORD *)v4 + 72))(v4, v6, v5, &a3); if ( v7 < 0 ) break; sub_9398E0(a2, v5, a3, v6); (*(void (__stdcall **)(int *))(*a3 + 8))(a3); if ( (unsigned int)++v5 >= v3[23] ) return; v4 = v9; } sub_93C3F0(v7); nullsub_6(v8); } } //----- (0093A590) -------------------------------------------------------- _DWORD *__cdecl sub_93A590(int a1, int a2) { void *v2; // ecx int v3; // esi unsigned int v4; // eax _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // ST20_4 int v9; // esi int v10; // edi int v11; // eax int v12; // eax int v13; // eax int v14; // eax int v15; // esi int *v16; // esi const void *v17; // eax int v18; // ecx int v19; // esi int v20; // ecx int v21; // edx int *v22; // ecx int v23; // eax int v24; // esi int v25; // eax int v26; // eax int v27; // eax int v28; // eax signed int v29; // ecx int v30; // edx int v31; // eax int v32; // ST10_4 signed int v33; // ST08_4 int v34; // ecx signed int v35; // eax void *v36; // ecx int v37; // eax int *v38; // edi int v39; // [esp+4h] [ebp-14h] int *v40; // [esp+4h] [ebp-14h] _DWORD *v41; // [esp+8h] [ebp-10h] const void *v42; // [esp+Ch] [ebp-Ch] int v43; // [esp+10h] [ebp-8h] char v44; // [esp+17h] [ebp-1h] v3 = a2; v4 = 0; while ( !*(_DWORD *)(a2 + 4 * v4 + 1452) ) { if ( *(_DWORD *)(a2 + 4 * v4 + 1456) ) { ++v4; break; } v4 += 2; if ( v4 >= 0x16 ) break; } if ( v4 == 22 ) { nullsub_6(v2); return 0; } v6 = operator new(0x7Cu); v7 = v6; if ( v6 ) { v8 = v3; v9 = a1; sub_939D00(v6, a1, v8); *v7 = &NiDX9SourceCubeMapData::`vftable'; v7[30] = 0; } else { v9 = a1; v7 = 0; } v10 = *(_DWORD *)(v9 + 60); v43 = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); v41 = (_DWORD *)(v10 + 8); v44 = 0; if ( !v10 ) { v39 = *(_DWORD *)(v9 + 56); if ( v39 ) { v11 = sub_8667C0(); v12 = (*(int (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v11 + 8))(v11, v39, 0); if ( v12 ) { v43 = v12; InterlockedIncrement((volatile LONG *)(v12 + 4)); v10 = v43; } } else { v13 = sub_873620(v9, -2147483640); if ( v13 ) { v43 = v13; InterlockedIncrement((volatile LONG *)(v13 + 4)); v10 = v43; } v44 = 1; } } v14 = **(_DWORD **)(v10 + 84); if ( v14 != **(_DWORD **)(v10 + 88) || !v14 || ((v14 - 1) & v14) != 0 ) { if ( !v44 ) { v15 = sub_873620(v9, -2147483639); if ( v10 != v15 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v43 = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); v10 = v15; } v9 = a1; } v44 = 1; } v16 = (int *)(v9 + 28); v40 = v16; v17 = (const void *)sub_937A90(v41, v16, (int *)(a2 + 1452)); v42 = v17; if ( !v17 || (v18 = v41[1], v18 == 2) || v18 == 3 ) { v44 = 1; v19 = sub_873620(a1, -2147483641); if ( v10 != v19 ) { if ( v10 && !InterlockedDecrement((volatile LONG *)(v10 + 4)) ) (**(void (__thiscall ***)(int, signed int))v10)(v10, 1); v43 = v19; if ( v19 ) InterlockedIncrement((volatile LONG *)(v19 + 4)); } v16 = v40; goto LABEL_43; } if ( v44 ) { LABEL_43: v20 = a2; v21 = *(_DWORD *)(a2 + 1660); v17 = *(const void **)(a2 + 4 * v21 + 1276); v42 = *(const void **)(a2 + 4 * v21 + 1276); goto LABEL_47; } if ( v16[2] == 1 ) { LABEL_50: *((_BYTE *)v7 + 97) = 1; goto LABEL_52; } v20 = a2; LABEL_47: if ( v16[2] == 2 && byte_BA4880 && *(_BYTE *)(v20 + 1264) ) goto LABEL_50; *((_BYTE *)v7 + 97) = 0; LABEL_52: qmemcpy(v7 + 3, v17, 0x44u); v22 = *(int **)(v43 + 84); v23 = *v22; v24 = 0; v7[22] = *v22; v7[21] = v23; if ( v44 ) { v24 = v43; InterlockedIncrement((volatile LONG *)(v43 + 4)); } else { v25 = sub_8667C0(); v26 = (*(int (__thiscall **)(int, int, const void *, int, _DWORD))(*(_DWORD *)v25 + 16))( v25, v43, v42, v43, *((unsigned __int8 *)v7 + 97)); if ( v26 ) { v24 = v26; InterlockedIncrement((volatile LONG *)(v26 + 4)); } else { v27 = sub_873620(a1, -2147483641); if ( v27 ) { v24 = v27; InterlockedIncrement((volatile LONG *)(v27 + 4)); } v44 = 1; } v7[25] = *(_DWORD *)(v24 + 108) * *(_DWORD *)(*(_DWORD *)(v24 + 92) + 4 * *(_DWORD *)(v24 + 96)); } if ( v44 ) { v28 = **(_DWORD **)(v24 + 84); v7[22] = v28; v7[21] = v28; v7[25] = *(_DWORD *)(v24 + 108) * *(_DWORD *)(*(_DWORD *)(v24 + 92) + 4 * *(_DWORD *)(v24 + 96)); *((_BYTE *)v7 + 96) = 1; } if ( *(_BYTE *)(a2 + 1264) ) v29 = *(_DWORD *)(v24 + 96); else v29 = 1; v30 = v7[2]; v7[23] = v29; v7[30] = *(_DWORD *)(v24 + 104); v31 = *(_DWORD *)(v30 + 132); v32 = v7[6]; v33 = v29; v34 = v7[21]; a2 = 0; v35 = (*(int (__stdcall **)(int, int, signed int, _DWORD, int, signed int, int *, _DWORD))(*(_DWORD *)v31 + 100))( v31, v34, v33, 0, v32, 1, &a2, 0); if ( v35 < 0 ) { sub_93C3F0(v35); nullsub_6(v36); LABEL_67: (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); return 0; } v37 = a2; v7[20] = a2; if ( !v37 ) goto LABEL_67; v38 = 0; do { sub_93A510(v7, (_DWORD *)v24, v38); v38 = (int *)((char *)v38 + 1); } while ( (unsigned int)v38 < 6 ); sub_939CA0(v7, *(_DWORD *)(v24 + 76)); *(_DWORD *)(v7[1] + 40) = v7; if ( !InterlockedDecrement((volatile LONG *)(v24 + 4)) ) (**(void (__thiscall ***)(int, signed int))v24)(v24, 1); if ( !InterlockedDecrement((volatile LONG *)(v43 + 4)) ) (**(void (__thiscall ***)(int, signed int))v43)(v43, 1); return v7; } // A470BC: using guessed type void *NiDX9SourceCubeMapData::`vftable'; // BA4880: using guessed type char byte_BA4880; //----- (0093A980) -------------------------------------------------------- void __thiscall sub_93A980(int this) { int v1; // esi int v2; // ebx bool v3; // zf char v4; // al int v5; // eax int v6; // eax int v7; // edi int *v8; // ebx v1 = this; if ( !*(_BYTE *)(this + 96) ) { v2 = *(_DWORD *)(*(_DWORD *)(this + 4) + 60); if ( v2 ) { v3 = sub_939CA0((_DWORD *)this, *(_DWORD *)(v2 + 76)) == 0; v4 = 1; if ( v3 ) v4 = 0; if ( *(_DWORD *)(v2 + 104) != *(_DWORD *)(v1 + 120) || v4 ) { v5 = sub_8667C0(); v6 = (*(int (__thiscall **)(int, int, int, int, _DWORD))(*(_DWORD *)v5 + 16))( v5, v2, v1 + 12, v2, *(unsigned __int8 *)(v1 + 97)); v3 = *(_DWORD *)(v1 + 80) == 0; v7 = v6; *(_DWORD *)(v1 + 120) = *(_DWORD *)(v2 + 104); if ( !v3 ) { v8 = 0; if ( *(_DWORD *)(v6 + 108) ) { do { sub_93A510((_DWORD *)v1, (_DWORD *)v7, v8); v8 = (int *)((char *)v8 + 1); } while ( (unsigned int)v8 < *(_DWORD *)(v7 + 108) ); } } if ( v7 ) { InterlockedIncrement((volatile LONG *)(v7 + 4)); if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); } } } } } //----- (0093AA30) -------------------------------------------------------- signed int __cdecl sub_93AA30(int a1) { signed int result; // eax unsigned __int8 v2; // cl signed int v3; // edi char v4; // al result = *(_DWORD *)(a1 + 12); v2 = *(_BYTE *)(a1 + 1); if ( result == -1 ) { v3 = 0; switch ( *(_DWORD *)(a1 + 4) ) { case 0: switch ( v2 ) { case 8u: if ( sub_872D30((char *)a1, 0) == 224 ) { v3 = 27; goto LABEL_6; } if ( sub_872D30((char *)a1, 0) ) goto LABEL_6; return 50; case 0x10u: if ( sub_872D30((char *)a1, 0) == 63488 ) return 23; if ( sub_872D30((char *)a1, 0) == 31744 ) return 24; if ( sub_872D30((char *)a1, 0) == 3840 ) return 30; if ( sub_872D30((char *)a1, 0) ) goto LABEL_6; return 81; case 0x18u: return 20; case 0x20u: if ( sub_872D30((char *)a1, 0) == 16711680 ) return 22; if ( sub_872D30((char *)a1, 0) == 255 ) return 33; if ( sub_872D30((char *)a1, 0) != -65536 ) goto LABEL_6; result = 34; break; default: goto LABEL_25; } break; case 1: switch ( v2 ) { case 8u: if ( !sub_872D30((char *)a1, 9) ) return 28; if ( sub_872D30((char *)a1, 9) != 15 ) goto LABEL_6; return 52; case 0x10u: if ( sub_872D30((char *)a1, 0) == 31744 ) return 25; if ( sub_872D30((char *)a1, 0) == 3840 ) return 26; if ( sub_872D30((char *)a1, 0) == 224 ) return 29; if ( !sub_872D30((char *)a1, 0) ) goto LABEL_38; goto LABEL_6; case 0x20u: if ( sub_872D30((char *)a1, 0) == 16711680 ) goto LABEL_71; if ( sub_872D30((char *)a1, 0) == 1023 ) return 31; if ( sub_872D30((char *)a1, 0) == 255 ) return 32; if ( sub_872D30((char *)a1, 0) != 1072693248 ) goto LABEL_6; result = 35; break; case 0x40u: goto LABEL_46; case 0x80u: goto LABEL_70; default: goto LABEL_25; } break; case 2: result = 41; break; case 3: case 0xA: case 0xD: LABEL_25: result = 0; break; case 4: result = 827611204; break; case 5: result = 861165636; break; case 6: result = 894720068; break; case 8: result = 60; break; case 9: if ( v2 == 16 ) { result = 61; } else { if ( v2 != 32 ) goto LABEL_6; result = 62; } break; case 0xB: switch ( v2 ) { case 8u: result = sub_872D30((char *)a1, 3) != 0 ? 28 : 50; break; case 0x10u: result = 111; break; case 0x20u: result = 114; break; default: goto LABEL_6; } break; case 0xC: switch ( v2 ) { case 0x10u: LABEL_38: result = 51; break; case 0x20u: result = 112; break; case 0x40u: result = 115; break; default: goto LABEL_6; } break; case 0xE: switch ( v2 ) { case 0x20u: LABEL_71: result = 21; break; case 0x40u: LABEL_46: result = 113; break; case 0x80u: LABEL_70: result = 116; break; default: goto LABEL_6; } break; case 0xF: if ( v2 == 16 ) { result = (unsigned __int8)(sub_92ACF0((char *)a1, 18) - 1) != 0 ? 80 : 73; } else { if ( v2 != 32 ) goto LABEL_6; v4 = sub_92ACF0((char *)a1, 18); if ( v4 == 4 ) { result = 79; } else if ( v4 == 8 ) { result = 75; } else { result = (unsigned __int8)(sub_92ACF0((char *)a1, 17) - 24) != 0 ? 71 : 77; } } break; default: LABEL_6: result = v3; break; } } return result; } //----- (0093AF30) -------------------------------------------------------- _DWORD *__cdecl sub_93AF30(signed int a1, _DWORD *a2) { const void *v2; // esi _DWORD *result; // eax if ( a1 > 827611204 ) { if ( a1 == 861165636 ) { v2 = &unk_ABDCC8; } else if ( a1 == 894720068 ) { v2 = &unk_ABDD10; } else { LABEL_50: v2 = &unk_ABE778; } } else if ( a1 == 827611204 ) { v2 = &unk_ABDC80; } else { switch ( a1 ) { case 20: v2 = &unk_ABE268; break; case 21: v2 = &unk_ABE2B0; break; case 22: v2 = &unk_ABE2F8; break; case 23: v2 = &unk_ABE0B8; break; case 24: v2 = &unk_ABE190; break; case 25: v2 = &unk_ABE148; break; case 26: v2 = &unk_ABE1D8; break; case 27: v2 = &unk_ABDF98; break; case 28: v2 = &unk_ABDF50; break; case 29: v2 = &unk_ABDFE0; break; case 30: v2 = &unk_ABE220; break; case 31: v2 = &unk_ABE388; break; case 32: v2 = &unk_ABDAD0; break; case 33: v2 = &unk_ABE340; break; case 34: v2 = &unk_ABE418; break; case 35: v2 = &unk_ABE3D0; break; case 36: case 113: v2 = &unk_ABDDA0; break; case 40: v2 = &unk_ABE4A8; break; case 41: v2 = &unk_ABDA40; break; case 50: v2 = &unk_ABE4F0; break; case 51: v2 = &unk_ABE580; break; case 52: v2 = &unk_ABE5C8; break; case 60: v2 = &unk_ABDBF0; break; case 61: v2 = &unk_ABE460; break; case 62: v2 = &unk_ABE6E8; break; case 63: v2 = &unk_ABE610; break; case 64: v2 = &unk_ABE658; break; case 67: v2 = &unk_ABE6A0; break; case 70: case 80: v2 = &unk_ABE898; break; case 71: v2 = &unk_ABE8E0; break; case 73: v2 = &unk_ABE928; break; case 75: v2 = &unk_ABE970; break; case 77: v2 = &unk_ABE9B8; break; case 79: v2 = &unk_ABEA00; break; case 81: v2 = &unk_ABE538; break; case 82: case 83: v2 = &unk_ABE808; break; case 110: v2 = &unk_ABE850; break; case 111: v2 = &unk_ABDEC0; break; case 112: v2 = &unk_ABDE30; break; case 114: v2 = &unk_ABDDE8; break; case 115: v2 = &unk_ABDE78; break; case 116: v2 = &unk_ABDD58; break; case 117: v2 = &unk_ABE7C0; break; default: goto LABEL_50; } } result = a2; qmemcpy(a2, v2, 0x44u); a2[3] = a1; a2[4] = 0; return result; } //----- (0093B250) -------------------------------------------------------- _DWORD *__cdecl sub_93B250(signed int a1) { _DWORD *v1; // eax _DWORD *v2; // esi _DWORD *result; // eax v1 = operator new(0x44u); if ( v1 ) { v2 = sub_86A420(v1); sub_93AF30(a1, v2); result = v2; } else { sub_93AF30(a1, 0); result = 0; } return result; } //----- (0093B2A0) -------------------------------------------------------- int __userpurge sub_93B2A0@(int a1@, int a2@, void *a3, int a4, int a5, int *a6, unsigned int *a7, int a8, void *a9) { int v9; // esi int v10; // edi bool v11; // zf unsigned int v13; // ebx int v14; // ecx int v15; // eax void *v16; // ecx int (__stdcall *v17)(int, _DWORD, int, void **, _DWORD, int); // ecx void *v18; // ecx int v19; // [esp-4h] [ebp-3Ch] int DstSize; // [esp+8h] [ebp-30h] int v21; // [esp+18h] [ebp-20h] void *Dst; // [esp+1Ch] [ebp-1Ch] int v23; // [esp+20h] [ebp-18h] int v24; // [esp+24h] [ebp-14h] void *v25; // [esp+28h] [ebp-10h] int v26; // [esp+2Ch] [ebp-Ch] unsigned int v27; // [esp+30h] [ebp-8h] v9 = (int)a6; v10 = a1; v11 = *(_DWORD *)(a1 + 8) == 0; Dst = a9; if ( v11 || !a3 ) return 0; v19 = a2; v13 = 2 * a5; DstSize = 2 * a4; if ( !a6 || (v14 = *a6, v23 = 0, v24 = 0, v25 = 0, v26 = 0, v27 = 0, (*(int (__stdcall **)(int *, int *))(v14 + 52))(a6, &v23) < 0) || v23 != 101 || v24 != 7 || v25 != Dst || v26 != a8 || v27 < v13 ) { v15 = *(_DWORD *)(v10 + 8); v21 = 0; if ( (*(int (__stdcall **)(int, unsigned int, void *, signed int, int, int *, _DWORD))(*(_DWORD *)v15 + 108))( v15, v13, Dst, 101, a8, &v21, 0) >= 0 ) { v9 = v21; } else { nullsub_6(v16); v9 = 0; v21 = 0; } if ( !v9 ) { nullsub_6(v16); return 0; } *a7 = v13; } if ( DstSize ) { v17 = *(int (__stdcall **)(int, _DWORD, int, void **, _DWORD, int))(*(_DWORD *)v9 + 44); Dst = 0; if ( v17(v9, 0, DstSize, &Dst, 0, v19) < 0 ) { nullsub_6(v18); (*(void (__cdecl **)(int))(*(_DWORD *)v9 + 48))(v9); (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 8))(v9); } else { sub_8041B0(Dst, a3, DstSize); (*(void (__cdecl **)(int))(*(_DWORD *)v9 + 48))(v9); } } return v9; } // 93B2A0: could not find valid save-restore pair for ebx //----- (0093B420) -------------------------------------------------------- int __userpurge sub_93B420@(int a1@, int a2@, int a3, char a4, int a5, int a6) { int v6; // edi bool v7; // zf int v9; // esi unsigned int v10; // ebx int (__stdcall *v11)(int, int *); // ecx int v12; // edi int v13; // eax void *v14; // ecx int (__stdcall *v15)(int, _DWORD, unsigned int, _WORD **, _DWORD, int); // eax int v16; // esi void *v17; // ecx _WORD *v18; // eax int v19; // ebx int v20; // [esp-8h] [ebp-38h] int v21; // [esp+4h] [ebp-2Ch] int v22; // [esp+10h] [ebp-20h] _WORD *v23; // [esp+14h] [ebp-1Ch] int v24; // [esp+18h] [ebp-18h] int v25; // [esp+1Ch] [ebp-14h] _WORD *v26; // [esp+20h] [ebp-10h] int v27; // [esp+24h] [ebp-Ch] unsigned int v28; // [esp+28h] [ebp-8h] v6 = a1; v7 = *(_DWORD *)(a1 + 8) == 0; v21 = a1; v23 = (_WORD *)a5; if ( v7 ) return 0; if ( !a3 ) return 0; v20 = a2; v9 = *(_DWORD *)(a1 + 12); v10 = 12 * a3; if ( v9 ) { v11 = *(int (__stdcall **)(int, int *))(*(_DWORD *)v9 + 52); v24 = 0; v25 = 0; v26 = 0; v27 = 0; v28 = 0; if ( v11(v9, &v24) >= 0 ) { if ( v24 == 101 && v25 == 7 && v26 == v23 && v27 == a6 && v28 >= v10 ) { v12 = v9; if ( !a4 ) return v9; goto LABEL_20; } (*(void (__stdcall **)(int))(*(_DWORD *)v9 + 8))(v9); } } v13 = *(_DWORD *)(v6 + 8); v22 = 0; if ( (*(int (__stdcall **)(int, unsigned int, _WORD *, signed int, int, int *, _DWORD))(*(_DWORD *)v13 + 108))( v13, v10, v23, 101, a6, &v22, 0) >= 0 ) { v12 = v22; } else { nullsub_6(v14); v12 = 0; v22 = 0; } if ( !v12 ) { nullsub_6(v14); return 0; } LABEL_20: v15 = *(int (__stdcall **)(int, _DWORD, unsigned int, _WORD **, _DWORD, int))(*(_DWORD *)v12 + 44); v16 = 0; v23 = 0; if ( v15(v12, 0, v10, &v23, 0, v20) < 0 ) { nullsub_6(v17); (*(void (__cdecl **)(int))(*(_DWORD *)v12 + 48))(v12); (*(void (__stdcall **)(int))(*(_DWORD *)v12 + 8))(v12); v12 = 0; } else { v18 = v23; if ( a3 ) { v19 = a3; do { *v18 = v16; v18[1] = v16 + 1; v18[2] = v16 + 2; v18[3] = v16; v18[4] = v16 + 2; v18[5] = v16 + 3; v18 += 6; v16 += 4; --v19; } while ( v19 ); v10 = 12 * a3; } (*(void (__cdecl **)(int))(*(_DWORD *)v12 + 48))(v12); } *(_DWORD *)(v21 + 16) = v10; *(_DWORD *)(v21 + 12) = v12; return v12; } // 93B420: could not find valid save-restore pair for esi //----- (0093B600) -------------------------------------------------------- int __userpurge sub_93B600@(int a1@, int a2@, int a3, _BYTE *a4, _DWORD *a5, int a6, int a7) { int v7; // ebx bool v8; // zf int v10; // esi int v11; // ebx unsigned int v12; // ST10_4 int (__stdcall *v13)(int, _DWORD, unsigned int, _WORD **, _DWORD, int); // eax void *v14; // ecx _WORD *v15; // eax unsigned int v16; // edx unsigned int v17; // esi int v18; // eax void *v19; // ecx unsigned int v20; // edx int v21; // [esp-4h] [ebp-38h] int v22; // [esp+8h] [ebp-2Ch] int v23; // [esp+10h] [ebp-24h] unsigned int v24; // [esp+14h] [ebp-20h] _WORD *v25; // [esp+18h] [ebp-1Ch] int v26; // [esp+1Ch] [ebp-18h] int v27; // [esp+20h] [ebp-14h] _WORD *v28; // [esp+24h] [ebp-10h] int v29; // [esp+28h] [ebp-Ch] unsigned int v30; // [esp+2Ch] [ebp-8h] v7 = a1; v8 = *(_DWORD *)(a1 + 8) == 0; v22 = a1; v25 = (_WORD *)a6; if ( v8 || !a3 || !a4 ) return 0; v21 = a2; v10 = *(_DWORD *)(a1 + 20); v24 = 4 * a3 + 4; if ( v10 ) { v26 = 0; v27 = 0; v28 = 0; v29 = 0; v30 = 0; if ( (*(int (__stdcall **)(int, int *))(*(_DWORD *)v10 + 52))(v10, &v26) >= 0 ) { if ( v26 == 101 && v27 == 7 && v28 == v25 && v29 == a7 && v30 >= v24 ) { v11 = v10; goto LABEL_13; } (*(void (__stdcall **)(int))(*(_DWORD *)v10 + 8))(v10); } } v18 = *(_DWORD *)(v7 + 8); v23 = 0; if ( (*(int (__stdcall **)(int, unsigned int, _WORD *, signed int, int, int *, _DWORD))(*(_DWORD *)v18 + 108))( v18, v24, v25, 101, a7, &v23, 0) >= 0 ) { v11 = v23; } else { nullsub_6(v19); v11 = 0; v23 = 0; } if ( !v11 ) { nullsub_6(v19); return 0; } LABEL_13: v12 = v24; *a5 = 0; v13 = *(int (__stdcall **)(int, _DWORD, unsigned int, _WORD **, _DWORD, int))(*(_DWORD *)v11 + 44); v25 = 0; if ( v13(v11, 0, v12, &v25, 0, v21) < 0 ) { nullsub_6(v14); (*(void (__cdecl **)(int))(*(_DWORD *)v11 + 48))(v11); (*(void (__stdcall **)(int))(*(_DWORD *)v11 + 8))(v11); v11 = 0; } else { v15 = v25; v16 = 0; v17 = a3 - 1; if ( a3 != 1 ) { do { if ( *a4 ) { *v15 = v16; v15[1] = v16 + 1; v15 += 2; *a5 += 2; } ++a4; ++v16; } while ( v16 < v17 ); } if ( *a4 ) { *(_DWORD *)v15 = (unsigned __int16)v17; *a5 += 2; } (*(void (__cdecl **)(int))(*(_DWORD *)v11 + 48))(v11); } v20 = v24; *(_DWORD *)(v22 + 20) = v11; *(_DWORD *)(v22 + 24) = v20; return v11; } // 93B600: could not find valid save-restore pair for esi //----- (0093B7F0) -------------------------------------------------------- int __thiscall sub_93B7F0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // ebx int v7; // eax unsigned int v8; // edx unsigned int v9; // eax _DWORD *v10; // ecx int *v11; // edi int v12; // esi int v13; // eax int result; // eax int *v15; // [esp+Ch] [ebp-Ch] signed int v16; // [esp+10h] [ebp-8h] _DWORD *v17; // [esp+14h] [ebp-4h] v1 = this; v2 = this[8]; v3 = 0; v17 = v1; if ( v2 ) { v4 = (_DWORD *)v1[9]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[9] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v15 = (int *)v6[2]; if ( *v6 ) { v6 = (_DWORD *)*v6; } else { v7 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[7] + 4))(v1 + 7, v6[1]); v8 = v1[8]; v9 = v7 + 1; if ( v9 >= v8 ) { LABEL_15: v6 = 0; } else { v10 = (_DWORD *)(v1[9] + 4 * v9); while ( !*v10 ) { ++v9; ++v10; if ( v9 >= v8 ) { v1 = v17; goto LABEL_15; } } v1 = v17; v6 = (_DWORD *)*v10; } } if ( v15 ) { v11 = v15 + 2; v16 = 5; do { v12 = *v11; if ( *v11 ) { if ( *(_DWORD *)(v12 + 32) ) (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v12 + 32) + 8))(*(_DWORD *)(v12 + 32)); sub_93FCD0((_DWORD *)v12); operator delete((void *)v12); } ++v11; --v16; } while ( v16 ); operator delete(v15); v1 = v17; } } sub_940360(v1 + 7); v13 = v1[3]; if ( v13 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 8))(v1[3]); v1[3] = 0; } result = v1[5]; if ( result ) { result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(v1[5]); v1[5] = 0; } return result; } //----- (0093B920) -------------------------------------------------------- void **__thiscall sub_93B920(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47208: using guessed type void *NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; //----- (0093B960) -------------------------------------------------------- void **__thiscall sub_93B960(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47208: using guessed type void *NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; // A47368: using guessed type void *NiTPointerMap::`vftable'; //----- (0093B9A0) -------------------------------------------------------- LONG __fastcall sub_93B9A0(_DWORD *a1) { _DWORD *v1; // edi unsigned int v2; // eax int v3; // eax _DWORD *v4; // esi unsigned int v5; // edx unsigned int v6; // eax _DWORD *v7; // eax _DWORD *v8; // ebx int v9; // eax unsigned int v10; // edx unsigned int v11; // eax int *v12; // edi int v13; // esi int v14; // esi int v15; // edi _DWORD *v16; // ebx int v17; // eax int v18; // eax int v19; // eax unsigned int v21; // [esp+Ch] [ebp-14h] int *v22; // [esp+10h] [ebp-10h] signed int v23; // [esp+14h] [ebp-Ch] _DWORD *v24; // [esp+18h] [ebp-8h] int v25; // [esp+1Ch] [ebp-4h] v1 = a1; v2 = 0; v24 = a1; *a1 = &NiDX9IndexBufferManager::`vftable'; v21 = 0; do { if ( v2 ) { v3 = v2 - 1; if ( v3 ) { if ( v3 == 1 ) { v4 = v1 + 15; v25 = (int)(v1 + 15); goto LABEL_9; } } else { v25 = (int)(v1 + 11); } } else { a1 = v1 + 7; v25 = (int)(v1 + 7); } v4 = (_DWORD *)v25; LABEL_9: v5 = v4[1]; v6 = 0; if ( v5 ) { a1 = (_DWORD *)v4[2]; while ( !*a1 ) { ++v6; ++a1; if ( v6 >= v5 ) goto LABEL_13; } v7 = *(_DWORD **)(v4[2] + 4 * v6); } else { LABEL_13: v7 = 0; } v8 = v7; while ( v8 ) { v22 = (int *)v8[2]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v9 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 4))(v4, v8[1]); v10 = v4[1]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_23: v8 = 0; } else { a1 = (_DWORD *)(v4[2] + 4 * v11); while ( !*a1 ) { ++v11; ++a1; if ( v11 >= v10 ) { v4 = (_DWORD *)v25; goto LABEL_23; } } v8 = (_DWORD *)*a1; v4 = (_DWORD *)v25; } } if ( v22 ) { v12 = v22 + 2; v23 = 5; do { v13 = *v12; if ( *v12 ) { if ( *(_DWORD *)(v13 + 32) ) (*(void (__thiscall **)(_DWORD *, _DWORD))(**(_DWORD **)(v13 + 32) + 8))(a1, *(_DWORD *)(v13 + 32)); sub_93FCD0((_DWORD *)v13); operator delete((void *)v13); } ++v12; --v23; } while ( v23 ); operator delete(v22); v4 = (_DWORD *)v25; v1 = v24; } } v2 = v21 + 1; v21 = v2; } while ( v2 < 3 ); v14 = (int)(v1 + 7); sub_940360(v1 + 7); v15 = (int)(v1 + 11); sub_940360((_DWORD *)v15); v16 = v24 + 15; sub_940360(v24 + 15); (*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)v24[2] + 416))(v24[2], 0); v17 = v24[3]; if ( v17 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v17 + 8))(v24[3]); v18 = v24[5]; if ( v18 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v18 + 8))(v24[5]); v19 = v24[2]; if ( v19 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v19 + 8))(v24[2]); v24[2] = 0; } *v16 = &NiTPointerMap::`vftable'; sub_940360(v16); *v16 = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; sub_940360(v16); operator delete((void *)v24[17]); *(_DWORD *)v15 = &NiTPointerMap::`vftable'; sub_940360((_DWORD *)v15); *(_DWORD *)v15 = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; sub_940360((_DWORD *)v15); operator delete(*(void **)(v15 + 8)); *(_DWORD *)v14 = &NiTPointerMap::`vftable'; sub_940360((_DWORD *)v14); *(_DWORD *)v14 = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; sub_940360((_DWORD *)v14); operator delete(*(void **)(v14 + 8)); *v24 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A47208: using guessed type void *NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; // A47368: using guessed type void *NiTPointerMap::`vftable'; // A47388: using guessed type void *NiDX9IndexBufferManager::`vftable'; //----- (0093BBD0) -------------------------------------------------------- _DWORD *__thiscall sub_93BBD0(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // eax size_t v4; // ST28_4 void *v5; // eax size_t v6; // ST18_4 void *v7; // eax size_t v8; // ST08_4 v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiDX9IndexBufferManager::`vftable'; v2[8] = 37; v2[7] = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; v2[10] = 0; v3 = operator new(0x94u); v4 = 4 * v2[8]; v2[9] = v3; memset(v3, 0, v4); v2[7] = &NiTPointerMap::`vftable'; v2[12] = 37; v2[11] = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; v2[14] = 0; v5 = operator new(0x94u); v6 = 4 * v2[12]; v2[13] = v5; memset(v5, 0, v6); v2[11] = &NiTPointerMap::`vftable'; v2[16] = 37; v2[15] = &NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; v2[18] = 0; v7 = operator new(0x94u); v8 = 4 * v2[16]; v2[17] = v7; memset(v7, 0, v8); v2[15] = &NiTPointerMap::`vftable'; v2[2] = a2; (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; sub_940360(v2 + 7); sub_940360(v2 + 11); sub_940360(v2 + 15); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A47208: using guessed type void *NiTMapBase,unsigned int,NiDX9IndexBufferManager::NiDX9IBInfo *>::`vftable'; // A47368: using guessed type void *NiTPointerMap::`vftable'; // A47388: using guessed type void *NiDX9IndexBufferManager::`vftable'; //----- (0093BD00) -------------------------------------------------------- void *__thiscall sub_93BD00(void *this, char a2) { void *v2; // esi v2 = this; sub_93B9A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0093BD30) -------------------------------------------------------- _DWORD *__thiscall sub_93BD30(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi v3 = this; sub_9379E0(this, a2, a3); *v3 = &NiDX9RenderedTextureData::`vftable'; return v3; } // A47390: using guessed type void *NiDX9RenderedTextureData::`vftable'; //----- (0093BD60) -------------------------------------------------------- int __thiscall sub_93BD60(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // edx v1 = this; v2 = this[2]; v3 = v1[1]; *v1 = &NiDX9RenderedTextureData::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 336))(v3); return sub_937A50(v1); } // A47390: using guessed type void *NiDX9RenderedTextureData::`vftable'; //----- (0093BD90) -------------------------------------------------------- _DWORD *__thiscall sub_93BD90(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx v2 = this; v3 = *((_DWORD *)this + 2); v4 = v2[1]; *v2 = &NiDX9RenderedTextureData::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 336))(v4); sub_937A50(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A47390: using guessed type void *NiDX9RenderedTextureData::`vftable'; //----- (0093BDD0) -------------------------------------------------------- int __thiscall sub_93BDD0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // esi _DWORD *v3; // ebx int v4; // ecx int v5; // edx int *v6; // ST20_4 _DWORD *v7; // eax int v8; // ecx int v9; // ST14_4 int v10; // ST08_4 int v11; // eax signed int v12; // eax void *v13; // ecx int result; // eax int v15; // [esp+8h] [ebp-10h] int v16; // [esp+Ch] [ebp-Ch] int v17; // [esp+10h] [ebp-8h] _DWORD *v18; // [esp+14h] [ebp-4h] v2 = a2; v3 = this; if ( !a2 ) return 0; this[21] = (*(int (__thiscall **)(_DWORD *))(*a2 + 60))(a2); v3[22] = (*(int (__thiscall **)(_DWORD *))(*v2 + 64))(v2); v3[23] = 1; v4 = v2[8]; v5 = v2[9]; v15 = v2[7]; v6 = (int *)(v3[2] + 1364); v16 = v4; v17 = v5; v7 = (_DWORD *)sub_937690(&v15, v6); qmemcpy(v3 + 3, v7, 0x44u); v8 = *(_DWORD *)(v3[2] + 132); v18 = v7; v9 = v7[3]; v10 = v3[22]; v11 = v3[21]; a2 = 0; v12 = (*(int (__stdcall **)(int, int, int, signed int, signed int, int, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)v8 + 92))( v8, v11, v10, 1, 1, v9, 0, &a2, 0); if ( v12 < 0 ) { sub_93C3F0(v12); nullsub_6(v13); v3[20] = 0; return 0; } result = (int)v18; v3[20] = a2; return result; } //----- (0093BEA0) -------------------------------------------------------- _DWORD *__usercall sub_93BEA0@(int a1@, _DWORD *a2, int a3) { _DWORD *v3; // esi _DWORD *result; // eax int (__stdcall ***v5)(_DWORD, void *, int *); // edi signed int v6; // eax void *v7; // ecx int v8; // edi void *v9; // ecx int v10; // [esp+8h] [ebp-8h] int v11; // [esp+Ch] [ebp-4h] v3 = operator new(0x60u); if ( v3 ) { sub_9379E0(v3, (int)a2, a3); *v3 = &NiDX9RenderedTextureData::`vftable'; } else { v3 = 0; } if ( sub_93BDD0(v3, a2) ) { *(_DWORD *)(v3[1] + 40) = v3; v5 = (int (__stdcall ***)(_DWORD, void *, int *))(*(int (__thiscall **)(_DWORD *, int))(*v3 + 20))(v3, a1); v10 = (*(int (__thiscall **)(_DWORD *))(*a2 + 68))(a2); v11 = 0; v6 = (**v5)(v5, &unk_A48344, &v11); if ( v6 >= 0 ) { v8 = sub_92B350(v11, (_DWORD **)&v10); (*(void (__cdecl **)(int))(*(_DWORD *)v11 + 8))(v11); if ( v8 ) { result = v3; } else { nullsub_6(v9); (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } } else { sub_93C3F0(v6); nullsub_6(v7); (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } } else { if ( v3 ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } return result; } // A47390: using guessed type void *NiDX9RenderedTextureData::`vftable'; //----- (0093BFB0) -------------------------------------------------------- _DWORD *__thiscall sub_93BFB0(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx v2 = this; v3 = *((_DWORD *)this + 2); v4 = v2[1]; *v2 = &NiDX9RenderedCubeMapData::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 332))(v4); sub_93BD60(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A474A0: using guessed type void *NiDX9RenderedCubeMapData::`vftable'; //----- (0093BFF0) -------------------------------------------------------- int __thiscall sub_93BFF0(_DWORD *this, _DWORD *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // eax int v5; // ecx int v6; // edx int *v7; // ST1C_4 int v8; // eax int v9; // edi int v10; // ecx int v11; // eax int v12; // ST10_4 int v13; // ecx signed int v14; // eax void *v15; // ecx int v17; // [esp+8h] [ebp-Ch] int v18; // [esp+Ch] [ebp-8h] int v19; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; if ( !a2 ) return 0; v4 = (*(int (__thiscall **)(_DWORD *))(*a2 + 60))(a2); v3[22] = v4; v3[21] = v4; v3[23] = 1; v5 = v2[8]; v6 = v2[9]; v17 = v2[7]; v7 = (int *)(v3[2] + 1540); v18 = v5; v19 = v6; v8 = sub_937690(&v17, v7); v9 = v8; v10 = *(_DWORD *)(v8 + 12); v11 = *(_DWORD *)(v3[2] + 132); v12 = v10; v13 = v3[21]; a2 = 0; v14 = (*(int (__stdcall **)(int, int, signed int, signed int, int, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)v11 + 100))( v11, v13, 1, 1, v12, 0, &a2, 0); if ( v14 < 0 ) { sub_93C3F0(v14); nullsub_6(v15); v3[20] = 0; return 0; } v3[20] = a2; return v9; } //----- (0093C0B0) -------------------------------------------------------- _DWORD *__cdecl sub_93C0B0(_DWORD *a1, int a2) { _DWORD *v2; // esi unsigned int v3; // edi _DWORD *result; // eax int *v5; // ebx int v6; // eax int v7; // ST0C_4 int v8; // ST08_4 int v9; // eax int v10; // eax void *v11; // ecx int v12; // [esp+Ch] [ebp-8h] int v13; // [esp+10h] [ebp-4h] v2 = operator new(0x60u); v3 = 0; if ( v2 ) { sub_93BD30(v2, (int)a1, a2); *v2 = &NiDX9RenderedCubeMapData::`vftable'; } else { v2 = 0; } if ( sub_93BFF0(v2, a1) ) { *(_DWORD *)(v2[1] + 40) = v2; v13 = 0; v5 = a1 + 15; while ( 1 ) { (*(void (__thiscall **)(_DWORD *))(*v2 + 20))(v2); v6 = *(_DWORD *)(a2 + 132); v12 = *v5; v7 = v6; v8 = v13; v9 = (*(int (__thiscall **)(_DWORD *))(*v2 + 20))(v2); v10 = sub_92B460(v9, v3, v8, v7, (_DWORD **)&v12); if ( !v10 ) break; if ( !v13 ) v13 = v10; ++v3; ++v5; if ( v3 >= 6 ) return v2; } nullsub_6(v11); (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); result = 0; } else { if ( v2 ) (*(void (__thiscall **)(_DWORD *, signed int))*v2)(v2, 1); result = 0; } return result; } // A474A0: using guessed type void *NiDX9RenderedCubeMapData::`vftable'; //----- (0093C190) -------------------------------------------------------- int __thiscall sub_93C190(_DWORD *this) { return this[24]; } //----- (0093C1A0) -------------------------------------------------------- char __thiscall sub_93C1A0(_BYTE *this) { return this[100]; } //----- (0093C1B0) -------------------------------------------------------- char __thiscall sub_93C1B0(_BYTE *this, char a2) { char result; // al result = a2; this[100] = a2; return result; } //----- (0093C1C0) -------------------------------------------------------- _DWORD *__thiscall sub_93C1C0(void *this, char a2) { _DWORD *v2; // esi int v3; // ecx int v4; // edx v2 = this; v3 = *((_DWORD *)this + 2); v4 = v2[1]; *v2 = &NiDX9DynamicTextureData::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 340))(v4); sub_937A50(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A47564: using guessed type void *NiDX9DynamicTextureData::`vftable'; //----- (0093C200) -------------------------------------------------------- int __userpurge sub_93C200@(_DWORD *a1@, int a2@, _DWORD *a3, char a4) { _DWORD *v4; // esi _DWORD *v5; // ebx int result; // eax int v7; // ecx int v8; // edx int *v9; // ST28_4 _DWORD *v10; // eax int v11; // edi int v12; // esi signed int v13; // eax void *v14; // ecx int v15; // edx int v16; // ST08_4 signed int v17; // eax void *v18; // ecx int v19; // [esp+8h] [ebp-10h] int v20; // [esp+Ch] [ebp-Ch] int v21; // [esp+10h] [ebp-8h] _DWORD *v22; // [esp+14h] [ebp-4h] v4 = a3; v5 = a1; if ( !a3 ) return 0; a1[21] = (*(int (__thiscall **)(_DWORD *, int))(*a3 + 60))(a3, a2); v5[22] = (*(int (__thiscall **)(_DWORD *))(*v4 + 64))(v4); v5[23] = 1; v7 = v4[8]; v8 = v4[9]; v19 = v4[7]; v9 = (int *)(v5[2] + 1276); v20 = v7; v21 = v8; v10 = (_DWORD *)sub_937690(&v19, v9); qmemcpy(v5 + 3, v10, 0x44u); v11 = v10[3]; v12 = *(_DWORD *)(v5[2] + 132); v22 = v10; a3 = 0; if ( a4 ) { v13 = (*(int (__stdcall **)(int, _DWORD, _DWORD, signed int, signed int, int, _DWORD))(*(_DWORD *)v12 + 92))( v12, v5[21], v5[22], 1, 512, v11, 0); if ( v13 >= 0 ) { result = (int)v22; v5[20] = a3; return result; } goto LABEL_7; } v13 = (*(int (__stdcall **)(int, _DWORD, _DWORD, signed int, _DWORD, int, _DWORD))(*(_DWORD *)v12 + 92))( v12, v5[21], v5[22], 1, 0, v11, 0); if ( v13 < 0 ) { LABEL_7: sub_93C3F0(v13); nullsub_6(v14); v5[20] = 0; return 0; } v15 = v5[21]; v5[20] = a3; v16 = v5[22]; a3 = 0; v17 = (*(int (__stdcall **)(int, int, int, signed int, _DWORD, int, signed int, _DWORD **, _DWORD))(*(_DWORD *)v12 + 92))( v12, v15, v16, 1, 0, v11, 2, &a3, 0); if ( v17 >= 0 ) { result = (int)v22; v5[24] = a3; } else { sub_93C3F0(v17); nullsub_6(v18); v5[24] = 0; result = 0; } return result; } //----- (0093C370) -------------------------------------------------------- _DWORD *__cdecl sub_93C370(_DWORD *a1) { int v1; // edi _DWORD *v2; // eax _DWORD *v3; // esi _DWORD *result; // eax v1 = dword_BA46D0; v2 = operator new(0x68u); v3 = v2; if ( v2 ) { sub_9379E0(v2, (int)a1, v1); *v3 = &NiDX9DynamicTextureData::`vftable'; v3[24] = 0; *((_BYTE *)v3 + 100) = 0; } else { v3 = 0; } if ( sub_93C200(v3, v1, a1, *(_BYTE *)(v1 + 1265)) ) { *(_DWORD *)(v3[1] + 40) = v3; result = v3; } else { if ( v3 ) (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; } return result; } // A47564: using guessed type void *NiDX9DynamicTextureData::`vftable'; // BA46D0: using guessed type int dword_BA46D0; //----- (0093C3F0) -------------------------------------------------------- const char *__cdecl sub_93C3F0(unsigned int a1) { const char *result; // eax if ( a1 > 0x88760818 ) { switch ( a1 ) { case 0x88760819: result = "D3DERR_UNSUPPORTEDCOLOROPERATION"; break; case 0x8876081A: result = "D3DERR_UNSUPPORTEDCOLORARG"; break; case 0x8876081B: result = "D3DERR_UNSUPPORTEDALPHAOPERATION"; break; case 0x8876081C: result = "D3DERR_UNSUPPORTEDALPHAARG"; break; case 0x8876081D: result = "D3DERR_TOOMANYOPERATIONS"; break; case 0x8876081E: result = "D3DERR_CONFLICTINGTEXTUREFILTER"; break; case 0x8876081F: result = "D3DERR_UNSUPPORTEDFACTORVALUE"; break; case 0x88760821: result = "D3DERR_CONFLICTINGRENDERSTATE"; break; case 0x88760822: result = "D3DERR_UNSUPPORTEDTEXTUREFILTER"; break; case 0x88760826: result = "D3DERR_CONFLICTINGTEXTUREPALETTE"; break; case 0x88760827: result = "D3DERR_DRIVERINTERNALERROR"; break; case 0x88760866: result = "D3DERR_NOTFOUND"; break; case 0x88760867: result = "D3DERR_MOREDATA"; break; case 0x88760868: result = "D3DERR_DEVICELOST"; break; case 0x88760869: result = "D3DERR_DEVICENOTRESET"; break; case 0x8876086A: result = "D3DERR_NOTAVAILABLE"; break; case 0x8876086B: result = "D3DERR_INVALIDDEVICE"; break; case 0x8876086C: result = "D3DERR_INVALIDCALL"; break; default: goto LABEL_32; } } else if ( a1 == -2005530600 ) { result = "D3DERR_WRONGTEXTUREFORMAT"; } else { if ( a1 > 0x80070057 ) { if ( a1 == -2005532292 ) return "D3DERR_OUTOFVIDEOMEMORY"; } else { switch ( a1 ) { case 0x80070057: return "E_INVALIDARG"; case 0x80004005: return "E_FAIL"; case 0x8007000E: return "E_OUTOFMEMORY"; } } LABEL_32: result = "UNKNOWN!"; } return result; } //----- (0093C590) -------------------------------------------------------- char __thiscall sub_93C590(_BYTE *this, char a2) { char result; // al result = a2; this[24] = a2; return result; } //----- (0093C5A0) -------------------------------------------------------- void __thiscall sub_93C5A0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ebx unsigned int v3; // esi int v4; // ecx int v5; // eax v1 = this; v2 = this[3]; v3 = 0; *this = &NiD3DGeometryGroupManager::`vftable'; if ( v2 ) { do { v4 = *(_DWORD *)(v1[1] + 4 * v3); if ( v4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)v4 + 36))(1); ++v3; } while ( v3 < v2 ); } sub_93FED0(); v5 = v1[4]; if ( v5 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v5 + 8))(v1[4]); operator delete((void *)v1[1]); *v1 = &NiGeometryGroupManager::`vftable'; dword_BA4928 = 0; } // A25A44: using guessed type void *NiGeometryGroupManager::`vftable'; // A47848: using guessed type void *NiD3DGeometryGroupManager::`vftable'; // BA4928: using guessed type int dword_BA4928; //----- (0093C600) -------------------------------------------------------- _DWORD *__cdecl sub_93C600(int a1, int a2) { _DWORD *v2; // eax _DWORD *v3; // esi v2 = operator new(0x1Cu); v3 = v2; if ( v2 ) { sub_874740(v2); *v3 = &NiD3DGeometryGroupManager::`vftable'; v3[1] = 0; v3[2] = 0; v3[3] = 0; v3[4] = 0; v3[5] = 0; *((_BYTE *)v3 + 24) = 0; } else { v3 = 0; } v3[4] = a1; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a1); v3[5] = a2; return v3; } // A47848: using guessed type void *NiD3DGeometryGroupManager::`vftable'; //----- (0093C660) -------------------------------------------------------- char __thiscall sub_93C660(_DWORD *this, int a2) { _DWORD *v2; // esi unsigned int v3; // ecx unsigned int v4; // eax _DWORD *v5; // edx v2 = this; if ( !a2 || !(*(unsigned __int8 (__stdcall **)(int))(*this + 12))(a2) ) return 0; v3 = v2[3]; v4 = 0; if ( v3 ) { v5 = (_DWORD *)v2[1]; while ( *v5 != a2 ) { ++v4; ++v5; if ( v4 >= v3 ) goto LABEL_7; } } else { LABEL_7: v4 = -1; } *(_DWORD *)(v2[1] + 4 * v4) = *(_DWORD *)(v2[1] + 4 * --v2[3]); (*(void (__thiscall **)(int, signed int))(*(_DWORD *)a2 + 36))(a2, 1); return 1; } //----- (0093C6C0) -------------------------------------------------------- BOOL __stdcall sub_93C6C0(int a1) { return *(_DWORD *)(a1 + 4) == 0; } //----- (0093C6E0) -------------------------------------------------------- char __stdcall sub_93C6E0(int a1, int a2) { if ( *(_DWORD *)(a2 + 28) ) return 0; (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 4))(a2); return 1; } //----- (0093C710) -------------------------------------------------------- char __stdcall sub_93C710(int a1) { int v1; // eax _DWORD *v3; // esi v1 = *(_DWORD *)(a1 + 28); if ( !v1 ) return 0; v3 = *(_DWORD **)(v1 + 4); (*(void (__thiscall **)(_DWORD, int))(*v3 + 12))(*(_DWORD *)(v1 + 4), a1); if ( !v3[1] ) (*(void (__thiscall **)(_DWORD *))*v3)(v3); return 1; } //----- (0093C750) -------------------------------------------------------- char __stdcall sub_93C750(int a1) { int v1; // eax int v2; // esi int v3; // ecx char v4; // bl int v5; // edi int v6; // eax int v8; // [esp+10h] [ebp+8h] v1 = *(_DWORD *)(a1 + 8); v2 = *(_DWORD *)(a1 + 12); v3 = *(_DWORD *)(*(_DWORD *)(v2 + 40) + 4); v4 = 0; v8 = *(_DWORD *)(*(_DWORD *)(v2 + 40) + 4); if ( v1 ) { v5 = v1; do { v6 = *(_DWORD *)(v2 + 40); if ( v6 ) { (*(void (__stdcall **)(int))(**(_DWORD **)(v6 + 4) + 16))(v2); v3 = v8; v4 = 1; } v2 += 44; --v5; } while ( v5 ); if ( v4 && !*(_DWORD *)(v3 + 4) ) (**(void (***)(void))v3)(); } return v4; } //----- (0093C7B0) -------------------------------------------------------- void *__thiscall sub_93C7B0(void *this, char a2) { void *v2; // esi v2 = this; sub_93C5A0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0093C7E0) -------------------------------------------------------- volatile LONG *__thiscall sub_93C7E0(void *this, int a2) { void *v2; // ebx volatile LONG *result; // eax volatile LONG *v4; // eax volatile LONG *v5; // edi unsigned int v6; // ecx unsigned int v7; // eax volatile LONG **v8; // edx int v9; // eax void *v10; // eax int v11; // eax v2 = this; result = 0; if ( a2 ) { if ( a2 == 1 ) { v4 = (volatile LONG *)sub_9408D0(); } else { if ( a2 != 2 ) return result; v4 = sub_941870(); } } else { v4 = sub_940830(); } v5 = v4; if ( v4 ) { v6 = *((_DWORD *)v2 + 3); v7 = 0; if ( !v6 ) goto LABEL_14; v8 = (volatile LONG **)*((_DWORD *)v2 + 1); while ( *v8 != v5 ) { ++v7; ++v8; if ( v7 >= v6 ) goto LABEL_14; } if ( (v7 & 0x80000000) != 0 ) { LABEL_14: v9 = *((_DWORD *)v2 + 2); if ( v6 == v9 ) { if ( v9 ) v10 = (void *)(2 * v9); else v10 = (void *)1; sub_811D30((void **)v2 + 1, v10); } *(_DWORD *)(*((_DWORD *)v2 + 1) + 4 * (*((_DWORD *)v2 + 3))++) = v5; v11 = *((_DWORD *)v2 + 4); *((_DWORD *)v5 + 2) = v11; (*(void (__stdcall **)(int))(*(_DWORD *)v11 + 4))(v11); } } return v5; } //----- (0093C880) -------------------------------------------------------- char __stdcall sub_93C880(int a1, int a2, int a3, char a4, int a5, int a6) { int v6; // eax int v7; // esi int v9; // eax int v10; // ebx if ( !a3 || !a4 || (v6 = *(_DWORD *)(a3 + 12)) == 0 ) { if ( *(_DWORD *)(a2 + 60) ) return 0; (*(void (__stdcall **)(int, int, _DWORD))(*(_DWORD *)a1 + 8))(a2, a3, 0); return 1; } v7 = *(_DWORD *)(v6 + 12); if ( *(_DWORD *)(v7 + 40) ) return 0; v9 = *(_DWORD *)(v6 + 8); if ( !v9 ) return 1; v10 = v9; do { (*(void (__thiscall **)(int, int, int, int))(*(_DWORD *)a1 + 8))(a1, a2, a3, v7); v7 += 44; --v10; } while ( v10 ); return 1; } //----- (0093C900) -------------------------------------------------------- char __stdcall sub_93C900(int a1, int a2) { int v2; // eax int v3; // eax _DWORD *v5; // esi if ( a2 ) { v2 = *(_DWORD *)(a2 + 12); if ( v2 ) return sub_93C750(v2); } v3 = *(_DWORD *)(a1 + 60); if ( !v3 ) return 0; v5 = *(_DWORD **)(v3 + 4); (*(void (__thiscall **)(_DWORD, int))(*v5 + 20))(*(_DWORD *)(v3 + 4), a1); if ( !v5[1] ) (*(void (__thiscall **)(_DWORD *))*v5)(v5); return 1; } //----- (0093C950) -------------------------------------------------------- char __thiscall sub_93C950(char *this, int a2, int a3, int a4) { return sub_93C880(a2, a3, a4, this[24], 0, 0); } //----- (0093C980) -------------------------------------------------------- int __stdcall sub_93C980(int a1, int a2, int a3, int a4, int a5, int a6) { return 0; } //----- (0093C990) -------------------------------------------------------- _DWORD *__thiscall sub_93C990(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // eax v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiDX9TextureManager::`vftable'; v2[3] = a2; v3 = *(_DWORD *)(a2 + 132); v2[2] = v3; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4786C: using guessed type void *NiDX9TextureManager::`vftable'; //----- (0093C9E0) -------------------------------------------------------- _DWORD *__thiscall sub_93C9E0(void *this, char a2) { _DWORD *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 2); *(_DWORD *)this = &NiDX9TextureManager::`vftable'; (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v2[2] = 0; *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4786C: using guessed type void *NiDX9TextureManager::`vftable'; //----- (0093CA30) -------------------------------------------------------- int __thiscall sub_93CA30(int **this, int a2, _BYTE *a3, bool *a4, bool *a5) { int **v5; // ebx struct _RTL_CRITICAL_SECTION *v7; // edi DWORD v8; // eax _DWORD *v9; // esi int v10; // eax bool v11; // zf int v12; // eax int v13; // eax bool v14; // al int v15; // eax int v16; // edi v5 = this; *a3 = 0; *a4 = 0; *a5 = 0; if ( !a2 ) return 0; v7 = (struct _RTL_CRITICAL_SECTION *)(dword_BA46D0 + 84); EnterCriticalSection((LPCRITICAL_SECTION)(dword_BA46D0 + 84)); v8 = GetCurrentThreadId(); ++v7[1].LockCount; v7[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v8; v9 = *(_DWORD **)(a2 + 40); if ( v9 ) goto LABEL_6; v10 = sub_402BA0((int)dword_BA4778, a2); if ( v10 ) { v9 = sub_93A1B0(v10, v5[3]); *a3 = 1; LABEL_6: v11 = v7[1].LockCount-- == 1; if ( v11 ) v7[1].DebugInfo = 0; LeaveCriticalSection(v7); v12 = (*(int (__thiscall **)(_DWORD *))(*v9 + 4))(v9); v14 = 1; if ( v12 ) { if ( ((v12 - 1) & v12) == 0 ) { v13 = (*(int (__thiscall **)(_DWORD *))(*v9 + 8))(v9); if ( v13 ) { if ( ((v13 - 1) & v13) == 0 ) v14 = 0; } } } *a5 = v14; v15 = (*(int (__thiscall **)(_DWORD *))(*v9 + 24))(v9); if ( v15 ) return (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 20))(v15); v15 = (*(int (__thiscall **)(_DWORD *))(*v9 + 32))(v9); if ( v15 ) return (*(int (__thiscall **)(int))(*(_DWORD *)v15 + 20))(v15); v16 = (*(int (__thiscall **)(_DWORD *))(*v9 + 28))(v9); if ( v16 ) { if ( (*(int (__thiscall **)(_DWORD *))(*v9 + 20))(v9) ) { if ( !*(_BYTE *)(a2 + 64) ) (*(void (__thiscall **)(int))(*(_DWORD *)v16 + 40))(v16); } else { (*(void (__thiscall **)(int))(*(_DWORD *)v16 + 40))(v16); *a3 = 1; } } *a4 = (unsigned int)(*(int (__thiscall **)(_DWORD *))(*v9 + 16))(v9) > 1; return (*(int (__thiscall **)(_DWORD *))(*v9 + 20))(v9); } v11 = v7[1].LockCount-- == 1; if ( v11 ) v7[1].DebugInfo = 0; LeaveCriticalSection(v7); return 0; } // BA46D0: using guessed type int dword_BA46D0; //----- (0093CBA0) -------------------------------------------------------- bool __thiscall sub_93CBA0(int **this, int a2, int a3, int a4) { bool result; // al struct _RTL_CRITICAL_SECTION *v5; // esi DWORD v6; // eax _DWORD *v7; // edi int v8; // eax bool v9; // zf int v10; // eax int **v11; // [esp+4h] [ebp-4h] v11 = this; if ( !a2 ) return 0; v5 = (struct _RTL_CRITICAL_SECTION *)(dword_BA46D0 + 84); EnterCriticalSection((LPCRITICAL_SECTION)(dword_BA46D0 + 84)); v6 = GetCurrentThreadId(); ++v5[1].LockCount; v5[1].DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)v6; v7 = *(_DWORD **)(a2 + 40); if ( v7 ) goto LABEL_6; v8 = sub_402BA0((int)dword_BA4778, a2); if ( v8 ) { v7 = sub_93A1B0(v8, v11[3]); LABEL_6: v9 = v5[1].LockCount-- == 1; if ( v9 ) v5[1].DebugInfo = 0; LeaveCriticalSection(v5); v10 = (*(int (__thiscall **)(_DWORD *))(*v7 + 24))(v7); if ( v10 || (v10 = (*(int (__thiscall **)(_DWORD *))(*v7 + 32))(v7)) != 0 ) result = (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 20))(v10) != 0; else result = 1; return result; } v9 = v5[1].LockCount-- == 1; if ( v9 ) v5[1].DebugInfo = 0; LeaveCriticalSection(v5); return 0; } // BA46D0: using guessed type int dword_BA46D0; //----- (0093CC70) -------------------------------------------------------- signed int __thiscall sub_93CC70(_DWORD **this, int a2) { _DWORD **v2; // edi int v3; // ecx signed int result; // eax int v5; // eax int v6; // ecx v2 = this; v3 = *(_DWORD *)(a2 + 40); if ( v3 ) return *(_DWORD *)((*(int (**)(void))(*(_DWORD *)v3 + 12))() + 16); v5 = sub_402BA0((int)dword_BA4778, a2); if ( v5 && (*(unsigned __int8 (__stdcall **)(int))(*v2[3] + 220))(v5) && (v6 = *(_DWORD *)(a2 + 40)) != 0 ) result = *(_DWORD *)((*(int (**)(void))(*(_DWORD *)v6 + 12))() + 16); else result = 22; return result; } //----- (0093CCE0) -------------------------------------------------------- void *__thiscall sub_93CCE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiD3DShaderProgramCreator::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A47884: using guessed type void *NiD3DShaderProgramCreator::`vftable'; //----- (0093CD10) -------------------------------------------------------- _DWORD *__thiscall sub_93CD10(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiD3DShaderProgramCreatorAsm::`vftable'; operator delete(v3); *v2 = &NiD3DShaderProgramCreator::`vftable'; if ( a2 & 1 ) operator delete(v2); return v2; } // A47884: using guessed type void *NiD3DShaderProgramCreator::`vftable'; // A478DC: using guessed type void *NiD3DShaderProgramCreatorAsm::`vftable'; //----- (0093CD50) -------------------------------------------------------- HMODULE __usercall sub_93CD50@(int a1@, int a2@) { void *v2; // esi HMODULE result; // eax _DWORD *v4; // esi _DWORD *v5; // ST04_4 if ( byte_BA7170 ) { byte_BA7170 = 0; if ( dword_BA71D0 ) { sub_917340(dword_BA71D0); if ( dword_BA71D0 ) (**(void (__cdecl ***)(signed int))dword_BA71D0)(1); } dword_BA71D0 = 0; if ( dword_BA71D8 ) { sub_917340(dword_BA71D8); if ( dword_BA71D8 ) (**(void (__cdecl ***)(signed int))dword_BA71D8)(1); } dword_BA71D8 = 0; if ( dword_BA71D4 ) { sub_917340(dword_BA71D4); if ( dword_BA71D4 ) (**(void (__cdecl ***)(signed int))dword_BA71D4)(1); } dword_BA71D4 = 0; sub_930C20(0); sub_9174D0(); sub_930F00(); sub_93E650(); sub_91DB50(); sub_91C360(); sub_91AAC0(); if ( dword_BA6E44 ) { (*(void (__cdecl **)(int, int, int))(*(_DWORD *)dword_BA6E44 + 8))(dword_BA6E44, a1, a2); dword_BA6E44 = 0; } v2 = dword_BA6E50; if ( dword_BA6E50 ) { sub_9208F0(dword_BA6E50); operator delete(v2); } result = dword_BA6E40; dword_BA6E50 = 0; if ( dword_BA6E40 ) result = (HMODULE)FreeLibrary(dword_BA6E40); v4 = (_DWORD *)dword_AC506C; dword_BA6E48 = 0; if ( dword_AC506C ) { do { v5 = v4; v4 = (_DWORD *)*v4; result = (HMODULE)((int (__thiscall *)(void ***, _DWORD *))off_AC5068[2])(&off_AC5068, v5); } while ( v4 ); } dword_AC5074 = 0; dword_AC506C = 0; dword_AC5070 = 0; } return result; } // 93CD50: could not find valid save-restore pair for edi // 93CD50: could not find valid save-restore pair for esi // AC5068: using guessed type void **off_AC5068; // AC506C: using guessed type int dword_AC506C; // AC5070: using guessed type int dword_AC5070; // AC5074: using guessed type int dword_AC5074; // BA6E44: using guessed type int dword_BA6E44; // BA6E48: using guessed type int dword_BA6E48; // BA7170: using guessed type char byte_BA7170; // BA71D0: using guessed type int dword_BA71D0; //----- (0093CE20) -------------------------------------------------------- _DWORD *__cdecl sub_93CE20(int a1) { _DWORD *result; // eax _DWORD *v2; // ecx _DWORD *v3; // edx result = (_DWORD *)dword_AC506C; if ( !dword_AC506C ) goto LABEL_6; while ( 1 ) { v2 = result + 2; v3 = result; result = (_DWORD *)*result; if ( a1 == *v2 ) break; if ( !result ) goto LABEL_6; } if ( !v3 ) { LABEL_6: result = (_DWORD *)((int (__thiscall *)(void ***))off_AC5068[1])(&off_AC5068); result[2] = a1; *result = 0; result[1] = dword_AC5070; if ( dword_AC5070 ) { *(_DWORD *)dword_AC5070 = result; ++dword_AC5074; } else { ++dword_AC5074; dword_AC506C = (int)result; } dword_AC5070 = (int)result; } return result; } // AC5068: using guessed type void **off_AC5068; // AC506C: using guessed type int dword_AC506C; // AC5070: using guessed type int dword_AC5070; // AC5074: using guessed type int dword_AC5074; //----- (0093CEA0) -------------------------------------------------------- void sub_93CEA0() { void *v0; // ecx _DWORD *v1; // eax _DWORD *v2; // eax _DWORD *v3; // eax if ( !byte_BA7170 ) { byte_BA7170 = 1; sub_93CE20(25); sub_93CE20(21); sub_93CE20(23); sub_93CE20(24); sub_93CE20(22); sub_91C0B0(); sub_91A900(); sub_91DB40(); sub_93E610(); sub_932120(v0); sub_917EC0(); v1 = operator new(0x10u); if ( v1 ) { *v1 = &NiD3DShaderProgramCreatorAsm::`vftable'; v1[1] = 0; v1[2] = 0; v1[3] = 0; } else { v1 = 0; } dword_BA71D4 = (int)v1; sub_917F00("vsh", (int)v1); sub_917F00("psh", dword_BA71D4); v2 = operator new(0x10u); if ( v2 ) { v2[1] = 0; v2[2] = 0; v2[3] = 0; *v2 = &NiD3DShaderProgramCreatorObj::`vftable'; } else { v2 = 0; } dword_BA71D8 = (int)v2; sub_917F00("vso", (int)v2); sub_917F00("pso", dword_BA71D8); v3 = operator new(8u); if ( v3 ) { *v3 = &NiD3DShaderProgramCreatorHLSL::`vftable'; v3[1] = 0; } else { v3 = 0; } dword_BA71D0 = (int)v3; sub_917F00("hlsl", (int)v3); _cfltcvt_init_38(); } } // 91E580: using guessed type int _cfltcvt_init_38(void); // A478AC: using guessed type void *NiD3DShaderProgramCreatorHLSL::`vftable'; // A478DC: using guessed type void *NiD3DShaderProgramCreatorAsm::`vftable'; // A47914: using guessed type void *NiD3DShaderProgramCreatorObj::`vftable'; // BA7170: using guessed type char byte_BA7170; // BA71D0: using guessed type int dword_BA71D0; //----- (0093CFE0) -------------------------------------------------------- void *__thiscall sub_93CFE0(int this, rsize_t MaxCount, void *Src) { int v3; // esi void *result; // eax v3 = this; if ( *(_DWORD *)(this + 20) < MaxCount ) { operator delete(*(void **)(this + 24)); *(_DWORD *)(v3 + 24) = 0; *(_DWORD *)(v3 + 20) = MaxCount; } if ( !*(_DWORD *)(v3 + 24) ) *(_DWORD *)(v3 + 24) = operator new(*(_DWORD *)(v3 + 20)); result = Src; if ( Src ) result = (void *)memcpy_s(*(void **)(v3 + 24), *(_DWORD *)(v3 + 20), Src, MaxCount); return result; } //----- (0093D040) -------------------------------------------------------- _DWORD *__thiscall sub_93D040(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_85BA50(this); v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; *((_BYTE *)v1 + 40) = 0; *v1 = &NiD3DShaderDeclaration::`vftable'; return v1; } // A4794C: using guessed type void *NiD3DShaderDeclaration::`vftable'; //----- (0093D070) -------------------------------------------------------- char __stdcall sub_93D070(int a1, int a2, int a3) { return 1; } //----- (0093D080) -------------------------------------------------------- int __cdecl sub_93D080(int a1) { int v1; // esi int v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax int v7; // eax unsigned __int16 v8; // cx float *v9; // edi double v10; // st5 unsigned __int16 v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] unsigned __int16 v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] int v16; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v15 = 0; v13 = v2; if ( v2 ) { LOWORD(v7) = *(_WORD *)(a1 + 4) - 4; v8 = *(_WORD *)a1 + 1; v11 = *(_WORD *)a1 + 1; if ( (signed __int16)(v7 - v8) <= 0 ) { v16 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 4); } else { LOWORD(v7) = *(_WORD *)a1 + 1; v16 = v8; } v12 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v9 = v3; v14 = 0; if ( (unsigned __int16)v7 > 0u ) { v7 = (unsigned __int16)v7; v14 = v7; do { v10 = (double)*(signed int *)((char *)v9 + v2 - (_DWORD)v3); ++v9; --v7; *(v9 - 1) = v10 * 4.656612873077393e-10 - 1.0; } while ( v7 ); v2 = v13; } if ( v14 < v11 ) memset(v9, 0, 4 * (unsigned __int16)(v11 - v14)); v15 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v13 = v2; if ( (unsigned __int16)++v12 >= *(_WORD *)(v1 + 8) ) break; LOWORD(v7) = v16; } } return v15; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v15; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v15 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v15; } //----- (0093D190) -------------------------------------------------------- int __cdecl sub_93D190(int a1) { int v1; // esi int v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax int v7; // eax unsigned __int16 v8; // cx float *v9; // edi double v10; // st6 unsigned __int16 v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] unsigned __int16 v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] int v16; // [esp+28h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v15 = 0; v13 = v2; if ( v2 ) { LOWORD(v7) = *(_WORD *)(a1 + 4) - 8; v8 = *(_WORD *)a1 + 1; v11 = *(_WORD *)a1 + 1; if ( (signed __int16)(v7 - v8) <= 0 ) { v16 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 8); } else { LOWORD(v7) = *(_WORD *)a1 + 1; v16 = v8; } v12 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v9 = v3; v14 = 0; if ( (unsigned __int16)v7 > 0u ) { v7 = (unsigned __int16)v7; v14 = v7; do { v10 = (double)*(signed int *)((char *)v9 + v2 - (_DWORD)v3); ++v9; --v7; *(v9 - 1) = v10 * 2.328306436538696e-10; } while ( v7 ); v2 = v13; } if ( v14 < v11 ) memset(v9, 0, 4 * (unsigned __int16)(v11 - v14)); v15 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v13 = v2; if ( (unsigned __int16)++v12 >= *(_WORD *)(v1 + 8) ) break; LOWORD(v7) = v16; } } return v15; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v15; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v15 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v15; } //----- (0093D2A0) -------------------------------------------------------- int __cdecl sub_93D2A0(int a1) { int v1; // esi signed __int16 *v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax unsigned __int16 v7; // cx signed __int16 *v8; // eax float *v9; // edi int v10; // ecx signed int v11; // ST1C_4 unsigned __int16 v12; // [esp+Ch] [ebp-18h] int v13; // [esp+14h] [ebp-10h] signed __int16 *v14; // [esp+18h] [ebp-Ch] unsigned __int16 v15; // [esp+1Ch] [ebp-8h] int v16; // [esp+20h] [ebp-4h] int v17; // [esp+2Ch] [ebp+8h] v1 = a1; v2 = *(signed __int16 **)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v7 = *(_WORD *)a1 + 1; v12 = *(_WORD *)a1 + 1; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 12 - v7) <= 0 ) v17 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 12); else v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v15 = 0; if ( (unsigned __int16)v17 > 0u ) { v10 = (unsigned __int16)v17; v15 = v17; do { v11 = *v8; ++v9; ++v8; --v10; *(v9 - 1) = (double)v11 / 32767.0 - 1.0; } while ( v10 ); v2 = v14; } if ( v15 < v12 ) memset(v9, 0, 4 * (unsigned __int16)(v12 - v15)); v16 += *(_DWORD *)(v1 + 28); v2 = (signed __int16 *)((char *)v2 + *(_DWORD *)(v1 + 24)); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v14 = v2; ++v13; } while ( (unsigned __int16)v13 < *(_WORD *)(v1 + 8) ); } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (0093D3B0) -------------------------------------------------------- int __cdecl sub_93D3B0(int a1) { int v1; // esi signed __int16 *v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax unsigned __int16 v7; // cx signed __int16 *v8; // eax float *v9; // edi int v10; // ecx signed int v11; // ST1C_4 unsigned __int16 v12; // [esp+Ch] [ebp-18h] int v13; // [esp+14h] [ebp-10h] signed __int16 *v14; // [esp+18h] [ebp-Ch] unsigned __int16 v15; // [esp+1Ch] [ebp-8h] int v16; // [esp+20h] [ebp-4h] int v17; // [esp+2Ch] [ebp+8h] v1 = a1; v2 = *(signed __int16 **)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v7 = *(_WORD *)a1 + 1; v12 = *(_WORD *)a1 + 1; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 16 - v7) <= 0 ) v17 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 16); else v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v15 = 0; if ( (unsigned __int16)v17 > 0u ) { v10 = (unsigned __int16)v17; v15 = v17; do { v11 = *v8; ++v9; ++v8; --v10; *(v9 - 1) = (double)v11 / 65535.0; } while ( v10 ); v2 = v14; } if ( v15 < v12 ) memset(v9, 0, 4 * (unsigned __int16)(v12 - v15)); v16 += *(_DWORD *)(v1 + 28); v2 = (signed __int16 *)((char *)v2 + *(_DWORD *)(v1 + 24)); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v14 = v2; ++v13; } while ( (unsigned __int16)v13 < *(_WORD *)(v1 + 8) ); } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (0093D4C0) -------------------------------------------------------- int __cdecl sub_93D4C0(int a1) { int v1; // esi unsigned __int8 *v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax unsigned __int16 v7; // cx unsigned __int8 *v8; // eax float *v9; // edi int v10; // ecx signed int v11; // ST1C_4 unsigned __int16 v12; // [esp+Ch] [ebp-18h] int v13; // [esp+14h] [ebp-10h] unsigned __int8 *v14; // [esp+18h] [ebp-Ch] unsigned __int16 v15; // [esp+1Ch] [ebp-8h] int v16; // [esp+20h] [ebp-4h] int v17; // [esp+2Ch] [ebp+8h] v1 = a1; v2 = *(unsigned __int8 **)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v7 = *(_WORD *)a1 + 1; v12 = *(_WORD *)a1 + 1; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 20 - v7) <= 0 ) v17 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 20); else v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v15 = 0; if ( (unsigned __int16)v17 > 0u ) { v10 = (unsigned __int16)v17; v15 = v17; do { v11 = *v8; ++v9; ++v8; --v10; *(v9 - 1) = (double)v11 / 127.0 - 1.0; } while ( v10 ); v2 = v14; } if ( v15 < v12 ) memset(v9, 0, 4 * (unsigned __int16)(v12 - v15)); v16 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v14 = v2; ++v13; } while ( (unsigned __int16)v13 < *(_WORD *)(v1 + 8) ); } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (0093D5D0) -------------------------------------------------------- int __cdecl sub_93D5D0(int a1) { int v1; // esi unsigned __int8 *v2; // edx float *v3; // ebx int v4; // edi size_t v5; // eax unsigned __int16 v7; // cx unsigned __int8 *v8; // eax float *v9; // edi int v10; // ecx signed int v11; // ST1C_4 unsigned __int16 v12; // [esp+Ch] [ebp-18h] int v13; // [esp+14h] [ebp-10h] unsigned __int8 *v14; // [esp+18h] [ebp-Ch] unsigned __int16 v15; // [esp+1Ch] [ebp-8h] int v16; // [esp+20h] [ebp-4h] int v17; // [esp+2Ch] [ebp+8h] v1 = a1; v2 = *(unsigned __int8 **)(a1 + 16); v3 = *(float **)(a1 + 36); v4 = 0; v16 = 0; v14 = v2; if ( v2 ) { v7 = *(_WORD *)a1 + 1; v12 = *(_WORD *)a1 + 1; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 24 - v7) <= 0 ) v17 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 24); else v17 = v7; v13 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = v2; v9 = v3; v15 = 0; if ( (unsigned __int16)v17 > 0u ) { v10 = (unsigned __int16)v17; v15 = v17; do { v11 = *v8; ++v9; ++v8; --v10; *(v9 - 1) = (double)v11 / 255.0; } while ( v10 ); v2 = v14; } if ( v15 < v12 ) memset(v9, 0, 4 * (unsigned __int16)(v12 - v15)); v16 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 = (float *)((char *)v3 + *(_DWORD *)(v1 + 32)); v14 = v2; ++v13; } while ( (unsigned __int16)v13 < *(_WORD *)(v1 + 8) ); } return v16; } if ( *(_WORD *)(a1 + 8) <= 0u ) return v16; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 = (float *)((char *)v3 + *(_DWORD *)(a1 + 32)); v16 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v16; } //----- (0093D6E0) -------------------------------------------------------- int __cdecl sub_93D6E0(int a1) { _DWORD *v1; // edx int result; // eax int v3; // esi _DWORD *v4; // edi v1 = *(_DWORD **)(a1 + 36); result = 0; v3 = 0; v4 = *(_DWORD **)(a1 + 16); if ( *(_WORD *)(a1 + 8) > 0u ) { do { if ( v4 ) { *v1 = *v4; v4 = (_DWORD *)((char *)v4 + *(_DWORD *)(a1 + 24)); } else { *v1 = -1; } v1 = (_DWORD *)((char *)v1 + *(_DWORD *)(a1 + 32)); result += *(_DWORD *)(a1 + 28); ++v3; } while ( (unsigned __int16)v3 < *(_WORD *)(a1 + 8) ); } return result; } //----- (0093D730) -------------------------------------------------------- int __cdecl sub_93D730(int a1) { int v1; // esi _WORD *v2; // ecx unsigned int *v3; // edx int result; // eax unsigned int v5; // edi __int16 v6; // [esp+8h] [ebp-4h] int v7; // [esp+14h] [ebp+8h] v1 = a1; v2 = *(_WORD **)(a1 + 16); v3 = *(unsigned int **)(a1 + 36); v6 = *(_WORD *)(a1 + 4) - 12; result = 0; v7 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { if ( v6 == 3 ) { if ( v2 ) { v5 = *v2 & 0xFF00 | 0xFFFF0000; LABEL_8: *v3 = ((signed __int16)v2[2] >> 4) & 0xFF0 | 16 * (v2[1] & 0xFF00 | (v5 << 8)); v2 = (_WORD *)((char *)v2 + *(_DWORD *)(v1 + 24)); goto LABEL_9; } } else if ( v2 ) { v5 = (unsigned __int16)(*v2 & 0xFF00) | (((signed __int16)v2[3] & 0xFFFFFF00) << 8); goto LABEL_8; } *v3 = -16; LABEL_9: v3 = (unsigned int *)((char *)v3 + *(_DWORD *)(v1 + 32)); result += *(_DWORD *)(v1 + 28); ++v7; } while ( (unsigned __int16)v7 < *(_WORD *)(v1 + 8) ); } return result; } //----- (0093D7E0) -------------------------------------------------------- int __cdecl sub_93D7E0(int a1) { int v1; // edx size_t *v2; // ecx int v3; // esi int result; // eax int v5; // edi int v6; // [esp+14h] [ebp+8h] v1 = a1; v2 = *(size_t **)(a1 + 36); v3 = *(_DWORD *)(a1 + 16); v6 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 16); result = 0; v5 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { if ( (_WORD)v6 == 3 ) { if ( v3 ) goto LABEL_10; *v2 = ((signed __int16)MEMORY[4] >> 4) & 0xFF0 | 16 * (MEMORY[2] & 0xFF00 | ((MEMORY[0] & 0xFF00 | 0xFFFF0000) << 8)); } else { if ( v3 ) { LABEL_10: *v2 = -16; goto LABEL_6; } *v2 = ((signed __int16)MEMORY[4] >> 4) & 0xFF0 | 16 * (MEMORY[2] & 0xFF00 | ((MEMORY[0] & 0xFF00 | ((MEMORY[6] & 0xFFFFFF00) << 8)) << 8)); } v3 = *(_DWORD *)(v1 + 24); LABEL_6: v2 = (size_t *)((char *)v2 + *(_DWORD *)(v1 + 32)); result += *(_DWORD *)(v1 + 28); ++v5; } while ( (unsigned __int16)v5 < *(_WORD *)(v1 + 8) ); } return result; } //----- (0093D8C0) -------------------------------------------------------- int __cdecl sub_93D8C0(int a1) { int v1; // edi int v2; // ebx _BYTE *v3; // esi int v4; // ecx size_t v5; // eax int result; // eax signed int v7; // eax __int16 v8; // ax int v9; // eax int v10; // ecx size_t v11; // ebx int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v4 = 0; v14 = 0; v13 = v2; if ( v2 ) { v7 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 20); v15 = 4; if ( (signed __int16)(v7 - 4) <= 0 ) v15 = v7; v12 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { do { v8 = 0; if ( (unsigned __int16)v15 <= 0u ) goto LABEL_18; v9 = (unsigned __int16)v15; v10 = v2 - (_DWORD)v3; do { *v3 = v3[v10]; ++v3; --v9; } while ( v9 ); v8 = v15; if ( (unsigned __int16)v15 < 4u ) { LABEL_18: v11 = (unsigned __int16)(4 - v8); memset(v3, 0, v11); v3 += v11; v2 = v13; } v2 += *(_DWORD *)(v1 + 24); v4 = *(_DWORD *)(v1 + 28) + v14; v3 += *(_DWORD *)(v1 + 32); v13 = v2; v14 += *(_DWORD *)(v1 + 28); ++v12; } while ( (unsigned __int16)v12 < *(_WORD *)(v1 + 8) ); } result = v4; } else { if ( *(_WORD *)(a1 + 8) > 0u ) { v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 255, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v2; } while ( (unsigned __int16)v2 < *(_WORD *)(a1 + 8) ); } result = v14; } return result; } //----- (0093D9C0) -------------------------------------------------------- int __cdecl sub_93D9C0(int a1) { int v1; // edi int v2; // ebx _BYTE *v3; // esi int v4; // ebx size_t v5; // eax __int16 v7; // ax int v8; // ecx unsigned __int16 v9; // dx _BYTE *v10; // eax unsigned __int16 v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] signed int v15; // [esp+24h] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 16); v3 = *(_BYTE **)(a1 + 36); v14 = 0; v13 = v2; if ( v2 ) { v7 = *(_WORD *)(a1 + 4) - 24; if ( (signed __int16)(*(_WORD *)(a1 + 4) - 28) < 0 || v7 == 4 ) { v15 = (unsigned __int16)(*(_WORD *)(a1 + 4) - 24); LOWORD(v8) = v7; } else { LOWORD(v8) = 4; v15 = 4; } v12 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { while ( 1 ) { v9 = 0; if ( (unsigned __int16)v8 <= 0u ) goto LABEL_21; v8 = (unsigned __int16)v8; v10 = v3; v11 = v8; do { *v10 = v10[v2 - (_DWORD)v3]; ++v10; --v8; } while ( v8 ); v9 = v11; v2 = v13; if ( v11 < 4u ) LABEL_21: memset(&v3[v9], 0, (unsigned __int16)(4 - v9)); v14 += *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v13 = v2; if ( (unsigned __int16)++v12 >= *(_WORD *)(v1 + 8) ) break; LOWORD(v8) = v15; } } return v14; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v14; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 255, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v14 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v14; } //----- (0093DAC0) -------------------------------------------------------- void *__thiscall sub_93DAC0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A479D4: using guessed type void *NiTArray::`vftable'; //----- (0093DAF0) -------------------------------------------------------- void *__thiscall sub_93DAF0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A479DC: using guessed type void *NiTArray::`vftable'; //----- (0093DB20) -------------------------------------------------------- LONG __thiscall sub_93DB20(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v3; // ebx int v4; // eax int v5; // eax v1 = this; v2 = 0; *this = &NiD3DShaderDeclaration::`vftable'; if ( this[9] ) { if ( this[8] > 0u ) { v3 = 0; do { v4 = v3 + v1[9]; if ( v4 ) operator delete(*(void **)(v4 + 8)); ++v2; v3 += 16; } while ( v2 < v1[8] ); } operator delete((void *)v1[9]); } v5 = v1[4]; v1[9] = 0; v1[2] = 0; (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 8))(v5); v1[4] = 0; return sub_85BA80(v1); } // A4794C: using guessed type void *NiD3DShaderDeclaration::`vftable'; //----- (0093DB90) -------------------------------------------------------- char __thiscall sub_93DB90(_DWORD *this, int a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax char *v6; // eax int v7; // edi _DWORD *v8; // ecx int v9; // ebx _DWORD *v10; // eax int v11; // ebx _DWORD *v12; // edi unsigned int v14; // [esp+10h] [ebp+8h] int v15; // [esp+14h] [ebp+Ch] _DWORD *v16; // [esp+18h] [ebp+10h] v4 = this; this[2] = a2; this[3] = *(_DWORD *)(a2 + 1720); v5 = *(_DWORD *)(a2 + 132); this[4] = v5; (*(void (__stdcall **)(int))(*(_DWORD *)v5 + 4))(v5); v4[7] = a3; v4[8] = a4; v6 = (char *)operator new(16 * a4); if ( v6 ) { v7 = a4 - 1; if ( a4 - 1 >= 0 ) { v8 = v6 + 8; do { *((_BYTE *)v8 - 8) = 0; *(v8 - 1) = 0; *v8 = 0; v8[1] = 0; v8 += 4; --v7; } while ( v7 >= 0 ); } } else { v6 = 0; } v4[9] = v6; v14 = 0; if ( v4[8] > 0u ) { v15 = 0; do { v9 = v4[7]; v10 = operator new(28 * v4[7]); v16 = v10; if ( v10 ) { v11 = v9 - 1; v12 = v10; if ( v11 >= 0 ) { do { sub_9335F0(v12); v12 += 7; --v11; } while ( v11 >= 0 ); v10 = v16; } } else { v10 = 0; } *(_DWORD *)(v15 + v4[9] + 8) = v10; ++v14; v15 += 16; } while ( v14 < v4[8] ); } return 1; } //----- (0093DC80) -------------------------------------------------------- int __cdecl sub_93DC80(int a1) { int v1; // esi char *v2; // ebx char *v3; // edi int v4; // ebx size_t v5; // eax rsize_t v7; // eax int v8; // [esp+Ch] [ebp-4h] int v9; // [esp+18h] [ebp+8h] v1 = a1; v2 = *(char **)(a1 + 16); v3 = *(char **)(a1 + 36); v8 = 0; if ( v2 ) { v9 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { v7 = *(_DWORD *)(v1 + 28); do { memcpy_s(v3, v7, v2, v7); v7 = *(_DWORD *)(v1 + 28); v2 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v8 += v7; ++v9; } while ( (unsigned __int16)v9 < *(_WORD *)(v1 + 8) ); } return v8; } v4 = 0; if ( *(_WORD *)(a1 + 8) <= 0u ) return v8; v5 = *(_DWORD *)(a1 + 28); do { memset(v3, 0, v5); v5 = *(_DWORD *)(a1 + 28); v3 += *(_DWORD *)(a1 + 32); v8 += v5; ++v4; } while ( (unsigned __int16)v4 < *(_WORD *)(a1 + 8) ); return v8; } //----- (0093DD10) -------------------------------------------------------- int __cdecl sub_93DD10(int a1) { int v1; // esi int v2; // ecx char *v3; // ebx char *v4; // edi int v5; // eax int v6; // edi size_t v7; // eax int v9; // [esp+Ch] [ebp-18h] int v10; // [esp+10h] [ebp-14h] int v11; // [esp+14h] [ebp-10h] unsigned __int16 v12; // [esp+18h] [ebp-Ch] int v13; // [esp+1Ch] [ebp-8h] int v14; // [esp+20h] [ebp-4h] char *v15; // [esp+2Ch] [ebp+8h] v1 = a1; v2 = *(_DWORD *)(a1 + 12); v3 = *(char **)(a1 + 36); v4 = *(char **)(a1 + 16); v12 = *(_WORD *)a1 - *(_WORD *)(a1 + 4) + 1; v5 = 0; v14 = 0; v15 = v4; v11 = v2; if ( !v4 ) { v6 = 0; if ( *(_WORD *)(v1 + 8) > 0u ) { v7 = *(_DWORD *)(v1 + 28); do { memset(v3, 0, v7); v7 = *(_DWORD *)(v1 + 28); v3 += *(_DWORD *)(v1 + 32); v14 += v7; ++v6; } while ( (unsigned __int16)v6 < *(_WORD *)(v1 + 8) ); return v14; } return v14; } v13 = 0; if ( !v2 ) { if ( *(_WORD *)(v1 + 8) > 0u ) { do { memcpy_s(v3, *(_DWORD *)(v1 + 20), v4, *(_DWORD *)(v1 + 20)); if ( v12 > 0u ) { memset(&v3[*(_DWORD *)(v1 + 20)], 0, 4 * v12); v4 = v15; } v4 += *(_DWORD *)(v1 + 24); v3 += *(_DWORD *)(v1 + 32); v14 += *(_DWORD *)(v1 + 28); v15 = v4; ++v13; } while ( (unsigned __int16)v13 < *(_WORD *)(v1 + 8) ); } return v14; } if ( *(_WORD *)(v1 + 8) <= 0u ) return v14; v10 = *(unsigned __int16 *)(v1 + 4); while ( 1 ) { v9 = v5 + 1; memcpy_s( v3, *(_DWORD *)(v1 + 20), &v4[4 * v10 * *(unsigned __int16 *)(v2 + 2 * (unsigned __int16)v5)], *(_DWORD *)(v1 + 20)); v3 += 4 * *(_DWORD *)(v1 + 24); if ( v12 > 0u ) { memset(v3, 0, 4 * v12); v4 = v15; v3 += 4 * v12; } v14 += *(_DWORD *)(v1 + 28); if ( (unsigned __int16)++v13 >= *(_WORD *)(v1 + 8) ) break; v2 = v11; v5 = v9; } return v14; } //----- (0093DE60) -------------------------------------------------------- int __cdecl sub_93DE60(_DWORD *a1) { _DWORD *v1; // esi char *v2; // ecx int v3; // eax int v4; // ebx char *v5; // edi size_t v6; // eax int v8; // eax int v9; // [esp+Ch] [ebp-Ch] int v10; // [esp+10h] [ebp-8h] char *v11; // [esp+14h] [ebp-4h] int v12; // [esp+20h] [ebp+8h] v1 = a1; v2 = (char *)a1[4]; v3 = a1[3]; v4 = 0; v5 = (char *)a1[9]; v11 = v2; v10 = a1[3]; v12 = 0; if ( !v2 ) { if ( *((_WORD *)v1 + 4) > 0u ) { v6 = v1[7]; do { memset(v5, 0, v6); v6 = v1[7]; v5 += v1[8]; v4 += v6; ++v12; } while ( (unsigned __int16)v12 < *((_WORD *)v1 + 4) ); return v4; } return v4; } if ( !v3 ) { if ( *((_WORD *)v1 + 4) > 0u ) { while ( 1 ) { memcpy_s(v5, v1[5], v2, v1[5]); v11 += v1[6]; v5 += v1[8]; v4 += v1[7]; if ( (unsigned __int16)++v12 >= *((_WORD *)v1 + 4) ) break; v2 = v11; } } return v4; } if ( *((_WORD *)v1 + 4) <= 0u ) return v4; v9 = *((unsigned __int16 *)v1 + 2); while ( 1 ) { v8 = v9 * *(unsigned __int16 *)(v3 + 2 * (unsigned __int16)v12++); memcpy_s(v5, v1[5], &v2[4 * v8], v1[5]); v5 += v1[8]; v4 += v1[7]; if ( (unsigned __int16)v12 >= *((_WORD *)v1 + 4) ) break; v3 = v10; v2 = v11; } return v4; } //----- (0093DF70) -------------------------------------------------------- int __cdecl sub_93DF70(int a1) { float *v1; // edx int *v2; // esi int result; // eax signed int v4; // ecx float v5; // ST0C_4 signed int v6; // ebx float v7; // ST0C_4 signed int v8; // eax float v9; // ST0C_4 int v10; // ecx float v11; // ST0C_4 signed int v12; // ecx float v13; // ST0C_4 signed int v14; // ebx float v15; // ST0C_4 signed int v16; // eax float v17; // ST0C_4 float v18; // [esp+8h] [ebp-4Ch] __int16 v19; // [esp+Ch] [ebp-48h] int v20; // [esp+10h] [ebp-44h] int v21; // [esp+14h] [ebp-40h] v1 = *(float **)(a1 + 16); v2 = *(int **)(a1 + 36); result = 0; v19 = *(_WORD *)(a1 + 4); v21 = 0; v20 = 0; if ( *(_WORD *)(a1 + 8) > 0u ) { do { if ( v19 == 3 ) { v18 = 255.0; if ( !v1 ) { *v2 = (signed int)(float)255.0 | (((signed int)(float)255.0 | (((signed int)(float)255.0 | ((signed int)v18 << 8)) << 8)) << 8); goto LABEL_6; } v4 = (signed int)v18; v5 = *v1 * 255.0; v6 = (signed int)v5; v7 = v1[1] * 255.0; v8 = (signed int)v7; v9 = v1[2] * 255.0; v10 = (signed int)v9 | ((v8 | ((v6 | (v4 << 8)) << 8)) << 8); } else { if ( !v1 ) { *v2 = (signed int)(float)255.0 | (((signed int)(float)255.0 | (((signed int)(float)255.0 | ((signed int)(float)255.0 << 8)) << 8)) << 8); goto LABEL_6; } v11 = v1[3] * 255.0; v12 = (signed int)v11; v13 = *v1 * 255.0; v14 = (signed int)v13; v15 = v1[1] * 255.0; v16 = (signed int)v15; v17 = v1[2] * 255.0; v10 = (signed int)v17 | ((v16 | ((v14 | (v12 << 8)) << 8)) << 8); } *v2 = v10; v1 = (float *)((char *)v1 + *(_DWORD *)(a1 + 24)); LABEL_6: result = *(_DWORD *)(a1 + 28) + v21; v2 = (int *)((char *)v2 + *(_DWORD *)(a1 + 32)); v21 += *(_DWORD *)(a1 + 28); ++v20; } while ( (unsigned __int16)v20 < *(_WORD *)(a1 + 8) ); } return result; } //----- (0093E150) -------------------------------------------------------- void *__thiscall sub_93E150(void *this, char a2) { void *v2; // esi v2 = this; sub_93DB20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0093E180) -------------------------------------------------------- char sub_93E180() { unsigned int v0; // edi unsigned int *v1; // eax unsigned int i; // ecx unsigned int *v3; // ebx _DWORD *v4; // esi int (*v5)(); // edi unsigned int v6; // esi unsigned int *v8; // [esp+0h] [ebp-4h] if ( *(_DWORD *)(dword_BA71C0 + 12) == 18 ) return 1; dword_BA7178[0] = 4; dword_BA717C = 8; dword_BA7180 = 12; dword_BA7184 = 16; dword_BA7188 = 4; dword_BA718C = 4; dword_BA7190 = 4; dword_BA7194 = 8; dword_BA7198 = 4; dword_BA719C = 4; dword_BA71A0 = 8; dword_BA71A4 = 4; dword_BA71A8 = 8; dword_BA71AC = 4; dword_BA71B0 = 4; dword_BA71B4 = 4; dword_BA71B8 = 8; v0 = 0; do { v1 = (unsigned int *)operator new(0x1Cu); if ( v1 ) { v1[1] = (unsigned int)&NiTArray::`vftable'; v1[3] = 0; v1[6] = 1; v1[4] = 0; v1[5] = 0; v1[2] = 0; *v1 = 17; for ( i = 0; i < v1[4]; ++i ) *(_DWORD *)(v1[2] + 4 * i) = 0; v1[4] = 0; v1[5] = 0; v8 = v1; } else { v8 = 0; v1 = 0; } *v1 = v0; sub_8237A0(v1 + 1, 0x26u); v3 = (unsigned int *)(dword_BA71C0 + 8); v4 = (_DWORD *)dword_BA71C0; if ( v0 < *(_DWORD *)(dword_BA71C0 + 8) || (sub_8237A0((_DWORD *)dword_BA71C0, v0 + *(_DWORD *)(dword_BA71C0 + 20)), v0 < *v3) ) { if ( v0 < v4[3] ) { if ( *(_DWORD *)(v4[1] + 4 * v0) ) { LABEL_14: *(_DWORD *)(v4[1] + 4 * v0) = v8; goto LABEL_15; } } else { v4[3] = v0 + 1; } ++v4[4]; goto LABEL_14; } LABEL_15: ++v0; } while ( v0 < 0x12 ); v5 = 0; do { v6 = 0; do sub_934F80(v5, v6++); while ( v6 < 0x21 ); v5 = (int (*)())((char *)v5 + 1); } while ( (unsigned int)v5 < 0x12 ); return 1; } // A479DC: using guessed type void *NiTArray::`vftable'; // BA7178: using guessed type int dword_BA7178[]; // BA717C: using guessed type int dword_BA717C; // BA7180: using guessed type int dword_BA7180; // BA7184: using guessed type int dword_BA7184; // BA7188: using guessed type int dword_BA7188; // BA718C: using guessed type int dword_BA718C; // BA7190: using guessed type int dword_BA7190; // BA7194: using guessed type int dword_BA7194; // BA7198: using guessed type int dword_BA7198; // BA719C: using guessed type int dword_BA719C; // BA71A0: using guessed type int dword_BA71A0; // BA71A4: using guessed type int dword_BA71A4; // BA71A8: using guessed type int dword_BA71A8; // BA71AC: using guessed type int dword_BA71AC; // BA71B0: using guessed type int dword_BA71B0; // BA71B4: using guessed type int dword_BA71B4; // BA71B8: using guessed type int dword_BA71B8; // BA71C0: using guessed type int dword_BA71C0; //----- (0093E2F0) -------------------------------------------------------- int __stdcall sub_93E2F0(__int16 a1, int a2, int a3, int a4, int a5, signed int a6, int a7) { int v7; // ebx int v8; // eax int result; // eax int v10; // edx int v11; // edi signed int v12; // eax int v13; // ecx int v14; // ecx int v15; // ecx int v16; // ecx int (__cdecl *v17)(int *); // ecx int v18; // eax int v19; // eax int v20; // [esp+4h] [ebp-28h] int v21; // [esp+8h] [ebp-24h] __int16 v22; // [esp+Ch] [ebp-20h] int v23; // [esp+10h] [ebp-1Ch] int v24; // [esp+14h] [ebp-18h] int v25; // [esp+18h] [ebp-14h] int v26; // [esp+1Ch] [ebp-10h] int v27; // [esp+20h] [ebp-Ch] int v28; // [esp+24h] [ebp-8h] int v29; // [esp+28h] [ebp-4h] v7 = a5; v22 = a1; v8 = *(_DWORD *)(a5 + 12); v28 = a6; v29 = a7; if ( v8 == 17 ) return 0; v27 = dword_BA7178[v8]; a5 = *(_DWORD *)(*(_DWORD *)(dword_BA71C0 + 4) + 4 * v8); if ( !a5 ) return 0; v10 = *(_DWORD *)(v7 + 8); v11 = a4; switch ( v10 + 1 ) { case 0: goto LABEL_5; case 1: v24 = *(_DWORD *)(a2 + 32); v12 = 12; a6 = 3; goto LABEL_31; case 2: if ( !a4 ) goto LABEL_5; switch ( *(unsigned __int16 *)(a4 + 36) ) { case 1u: v13 = *(_DWORD *)(a4 + 8); a6 = 1; v25 = 4; v26 = 4; v24 = v13; break; case 2u: v14 = *(_DWORD *)(a4 + 8); a6 = 2; v25 = 8; v26 = 8; v24 = v14; break; case 3u: v15 = *(_DWORD *)(a4 + 8); v25 = 12; v26 = 12; a6 = 3; v24 = v15; break; case 4u: v25 = 12; v26 = 16; a6 = 3; goto LABEL_14; default: LABEL_14: v24 = *(_DWORD *)(a4 + 8); break; } goto LABEL_32; case 3: if ( !a4 ) goto LABEL_5; v16 = *(_DWORD *)(a4 + 16); if ( !v16 ) goto LABEL_5; switch ( *(unsigned __int16 *)(a4 + 36) ) { case 1u: a6 = 25; v25 = 1; v26 = 1; v24 = v16; break; case 2u: a6 = 26; v25 = 2; v26 = 2; v24 = v16; break; case 3u: a6 = 27; v25 = 3; v26 = 3; v24 = v16; break; case 4u: a6 = 28; v25 = 4; v26 = 4; goto LABEL_22; default: LABEL_22: v24 = v16; break; } goto LABEL_32; case 4: v24 = *(_DWORD *)(a2 + 36); v12 = 12; a6 = 3; goto LABEL_31; case 5: v24 = *(_DWORD *)(a2 + 40); v12 = 16; a6 = 4; goto LABEL_31; case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: v24 = sub_8795A0(a2, v10 - 5); v12 = 8; a6 = 2; goto LABEL_31; case 14: v24 = *(_DWORD *)(a2 + 36) + 24 * *(unsigned __int16 *)(a2 + 12); v12 = 12; a6 = 3; goto LABEL_31; case 15: v24 = *(_DWORD *)(a2 + 36) + 12 * *(unsigned __int16 *)(a2 + 12); v12 = 12; a6 = 3; goto LABEL_31; default: if ( v10 < 0 ) { if ( sub_88A9F0(*(_DWORD *)(a2 + 56), v10 & 0x7FFFFFFF, &a7, &a6, &a1, &a2, &v25, &v26) ) { v24 = a7; } else { v12 = 0; v24 = 0; a6 = 0; LABEL_31: v25 = v12; v26 = v12; } } LABEL_32: v17 = *(int (__cdecl **)(int *))(*(_DWORD *)(a5 + 8) + 4 * a6); if ( v17 ) { if ( v11 && (v18 = *(_DWORD *)(v7 + 8), v18 != 1) && v18 != 2 ) v23 = *(_DWORD *)(v11 + 12); else v23 = 0; v19 = *(_DWORD *)(v7 + 12); v21 = a6; v20 = v19; result = v17(&v20); } else { LABEL_5: result = 0; } break; } return result; } // BA7178: using guessed type int dword_BA7178[]; // BA71C0: using guessed type int dword_BA71C0; //----- (0093E610) -------------------------------------------------------- char sub_93E610() { _DWORD *v0; // eax v0 = operator new(0x18u); if ( v0 ) { *v0 = &NiTArray::`vftable'; v0[2] = 0; v0[5] = 1; v0[3] = 0; v0[4] = 0; v0[1] = 0; dword_BA71C0 = (int)v0; } else { dword_BA71C0 = 0; } return sub_93E180(); } // A479D4: using guessed type void *NiTArray::`vftable'; // BA71C0: using guessed type int dword_BA71C0; //----- (0093E650) -------------------------------------------------------- unsigned int sub_93E650() { _DWORD *v0; // ecx unsigned int v1; // edi _DWORD *v2; // esi unsigned int i; // eax void *v4; // ST04_4 unsigned int result; // eax v0 = (_DWORD *)dword_BA71C0; v1 = 0; if ( *(_DWORD *)(dword_BA71C0 + 12) ) { do { v2 = *(_DWORD **)(v0[1] + 4 * v1); if ( v2 ) { for ( i = 0; i < v2[4]; ++i ) *(_DWORD *)(v2[2] + 4 * i) = 0; v2[4] = 0; v2[5] = 0; v4 = (void *)v2[2]; v2[1] = &NiTArray::`vftable'; operator delete(v4); operator delete(v2); v0 = (_DWORD *)dword_BA71C0; } ++v1; } while ( v1 < v0[3] ); } for ( result = 0; result < v0[3]; ++result ) *(_DWORD *)(v0[1] + 4 * result) = 0; v0[4] = 0; v0[3] = 0; if ( dword_BA71C0 ) result = (**(int (__stdcall ***)(signed int))dword_BA71C0)(1); return result; } // A479DC: using guessed type void *NiTArray::`vftable'; // BA71C0: using guessed type int dword_BA71C0; //----- (0093E6E0) -------------------------------------------------------- int __thiscall sub_93E6E0(_BYTE *this, int a2) { _BYTE *v2; // esi v2 = this; sub_93F700(this + 248, a2); return sub_93F670(v2 + 248, *((_DWORD *)v2 + 2078)); } //----- (0093E710) -------------------------------------------------------- int __thiscall sub_93E710(_BYTE *this, int a2) { int result; // eax if ( *(float *)(a2 + 48) < 0.9900000095367432 || *(float *)(a2 + 48) > 1.01 || this[8309] || this[8308] ) result = (*(int (__stdcall **)(signed int, signed int, _DWORD))(*(_DWORD *)this + 100))(143, 1, 0); else result = (*(int (__stdcall **)(signed int, _DWORD, _DWORD))(*(_DWORD *)this + 100))(143, 0, 0); return result; } //----- (0093E770) -------------------------------------------------------- int __thiscall sub_93E770(void *this) { void *v1; // edi unsigned int v2; // esi int result; // eax v1 = this; v2 = 0; do result = (*(int (__thiscall **)(void *, unsigned int))(*(_DWORD *)v1 + 92))(v1, v2++); while ( v2 < 0x100 ); return result; } //----- (0093E790) -------------------------------------------------------- signed int __thiscall sub_93E790(_DWORD *this) { signed int result; // eax result = 1; this[2072] = 0; this[2073] = 1; this[2074] = 0; this[2075] = 1; return result; } //----- (0093E7B0) -------------------------------------------------------- int __thiscall sub_93E7B0(_DWORD *this) { int result; // eax int v2; // edx result = this[2072]; v2 = this[2074]; this[2073] = result; this[2075] = v2; return result; } //----- (0093E7D0) -------------------------------------------------------- int __thiscall sub_93E7D0(void *this) { void *v1; // esi v1 = this; (*(void (**)(void))(*(_DWORD *)this + 128))(); return (*(int (__thiscall **)(void *))(*(_DWORD *)v1 + 144))(v1); } //----- (0093E7F0) -------------------------------------------------------- int __thiscall sub_93E7F0(void *this) { unsigned int v1; // ebx void *v2; // esi unsigned int v3; // edi unsigned int v4; // edi int result; // eax v1 = 0; v2 = this; if ( dword_AC4D34 ) { do { v3 = 0; do (*(void (__thiscall **)(void *, unsigned int, unsigned int))(*(_DWORD *)v2 + 192))(v2, v1, v3++); while ( v3 < 0x21 ); v4 = 0; do result = (*(int (__thiscall **)(void *, unsigned int, unsigned int))(*(_DWORD *)v2 + 216))(v2, v1, v4++); while ( v4 < 0xD ); ++v1; } while ( v1 < dword_AC4D34 ); } return result; } // AC4D34: using guessed type int dword_AC4D34; //----- (0093E850) -------------------------------------------------------- int __thiscall sub_93E850(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int result; // eax v2 = this; this[2079] = a2; if ( a2 ) { v3 = *(_DWORD *)(a2 + 132); result = this[2078]; if ( result ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(this[2078]); v2[2078] = v3; if ( v3 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); } else { result = this[2078]; if ( result ) result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)result + 8))(this[2078]); v2[2078] = 0; } return result; } //----- (0093E8C0) -------------------------------------------------------- int __thiscall sub_93E8C0(_DWORD *this, int a2) { _DWORD *v2; // esi void (__stdcall *v3)(signed int, signed int, _DWORD); // edx v2 = this; v3 = *(void (__stdcall **)(signed int, signed int, _DWORD))(*this + 100); if ( *(_BYTE *)(a2 + 28) & 1 ) { v3(27, 1, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))( v2, 19, v2[(((unsigned int)*(unsigned __int16 *)(a2 + 28) >> 1) & 0xF) + 8], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))( v2, 20, v2[(((unsigned int)*(unsigned __int16 *)(a2 + 28) >> 5) & 0xF) + 8], 0); } else { ((void (__thiscall *)(_DWORD *, signed int, _DWORD, _DWORD))v3)(this, 27, 0, 0); } if ( !((*(_WORD *)(a2 + 28) >> 9) & 1) ) return (*(int (__thiscall **)(_DWORD *, signed int, _DWORD))(*v2 + 100))(v2, 15, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*v2 + 100))(v2, 15, 1); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))( v2, 25, v2[(((unsigned int)*(unsigned __int16 *)(a2 + 28) >> 10) & 7) + 19], 0); return (*(int (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))( v2, 24, *(unsigned __int8 *)(a2 + 30), 0); } //----- (0093E980) -------------------------------------------------------- int __thiscall sub_93E980(void *this, int a2) { return (*(int (__stdcall **)(signed int, int, _DWORD))(*(_DWORD *)this + 100))(26, *(_BYTE *)(a2 + 28) & 1, 0); } //----- (0093E9A0) -------------------------------------------------------- int __thiscall sub_93E9A0(float *this, int a2) { int v2; // edi float *v3; // esi int (__stdcall *v4)(signed int, signed int, _DWORD); // edx float v5; // ST18_4 float v6; // ST14_4 float v8; // [esp+18h] [ebp+8h] float v9; // [esp+18h] [ebp+8h] v2 = a2; v3 = this; v4 = *(int (__stdcall **)(signed int, signed int, _DWORD))(*(_DWORD *)this + 100); if ( !(*(_BYTE *)(a2 + 28) & 1) ) return v4(28, 0, 0); v4(28, 1, 0); v8 = v3[32] * *(float *)(a2 + 32); v5 = v3[31] - v8; v6 = v3[33] * v8 + v3[31]; v9 = 1.0 / v8; (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 38, LODWORD(v9), 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 36, LODWORD(v5), 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 37, LODWORD(v6), 0); if ( (*(_WORD *)(v2 + 28) >> 1) & 3 ) { if ( ((*(_WORD *)(v2 + 28) >> 1) & 3) == 1 ) { if ( (_BYTE)v3[2] & 1 ) { (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 35, 0, 0); (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v3 + 100))(v3, 140, 3, 0); } (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v3 + 100))(v3, 48, 1, 0); } else { (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 28, 0, 0); } } else { if ( (_BYTE)v3[2] & 1 ) { (*(void (__thiscall **)(float *, signed int, signed int, _DWORD))(*(_DWORD *)v3 + 100))(v3, 35, 3, 0); (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 140, 0, 0); } (*(void (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))(v3, 48, 0, 0); } if ( v3[35] != *(float *)(v2 + 36) || v3[36] != *(float *)(v2 + 40) || v3[37] != *(float *)(v2 + 44) ) { *((_DWORD *)v3 + 38) = (unsigned __int8)(signed int)(255.0 * *(float *)(v2 + 44)) | (((unsigned __int8)(signed int)(*(float *)(v2 + 40) * 255.0) | (((signed int)(*(float *)(v2 + 36) * 255.0) | 0xFFFFFF00) << 8)) << 8); v3[35] = *(float *)(v2 + 36); v3[36] = *(float *)(v2 + 40); v3[37] = *(float *)(v2 + 44); } return (*(int (__thiscall **)(float *, signed int, _DWORD, _DWORD))(*(_DWORD *)v3 + 100))( v3, 34, *((_DWORD *)v3 + 38), 0); } //----- (0093EBC0) -------------------------------------------------------- int __thiscall sub_93EBC0(void *this, int a2) { return (*(int (__stdcall **)(signed int, int, _DWORD))(*(_DWORD *)this + 100))( 9, ((*(_BYTE *)(a2 + 28) & 1) != 0) + 1, 0); } //----- (0093EBF0) -------------------------------------------------------- int __thiscall sub_93EBF0(void *this, int a2) { return (*(int (__stdcall **)(signed int, int, _DWORD))(*(_DWORD *)this + 100))(29, *(_BYTE *)(a2 + 28) & 1, 0); } //----- (0093EC10) -------------------------------------------------------- int __thiscall sub_93EC10(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; if ( *(_BYTE *)(a2 + 28) ) { (*(void (__stdcall **)(signed int, signed int, _DWORD))(*this + 100))(52, 1, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 56, v2[*(_DWORD *)(a2 + 32) + 39], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 57, *(_DWORD *)(a2 + 36), 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 58, *(_DWORD *)(a2 + 40), 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 53, v2[*(_DWORD *)(a2 + 44) + 47], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 54, v2[*(_DWORD *)(a2 + 48) + 47], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 55, v2[*(_DWORD *)(a2 + 52) + 47], 0); } else { (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*this + 100))(this, 52, 0, 0); } return (*(int (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))( v2, 22, v2[2 * *(_DWORD *)(a2 + 56) + 53 + v2[61]], 0); } //----- (0093ECF0) -------------------------------------------------------- int __thiscall sub_93ECF0(void *this, int a2) { return (*(int (__stdcall **)(signed int, int, _DWORD))(*(_DWORD *)this + 100))(8, ~*(_BYTE *)(a2 + 28) & 1 | 2, 0); } //----- (0093ED20) -------------------------------------------------------- int __thiscall sub_93ED20(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; if ( *(_BYTE *)(a2 + 28) & 1 ) { (*(void (__stdcall **)(signed int, signed int, _DWORD))(*this + 100))(7, 1, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v2 + 100))(v2, 23, v2[*(_DWORD *)(a2 + 32) + 64], 0); } else { (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*this + 100))(this, 7, 0, 0); } return (*(int (__thiscall **)(_DWORD *, signed int, int, _DWORD))(*v2 + 100))( v2, 14, (*(_WORD *)(a2 + 28) >> 1) & 1, 0); } //----- (0093ED80) -------------------------------------------------------- int __thiscall sub_93ED80(_DWORD *this) { int result; // eax _DWORD *v2; // edi int *v3; // ecx int *v4; // esi int v5; // edx result = dword_AC6330[0]; v2 = this; v3 = dword_AC6330; if ( dword_AC6330[0] != -1 ) { v4 = dword_AC6330; do { v5 = v3[1]; v2[2 * result + 72] = v5; v2[2 * result + 73] = v5; (*(void (__stdcall **)(_DWORD, int, int))(*(_DWORD *)v2[2078] + 228))(v2[2078], *v3, v3[1]); result = v4[2]; v4 += 2; v3 = v4; } while ( result != -1 ); } return result; } // AC6330: using guessed type int dword_AC6330[]; //----- (0093EDD0) -------------------------------------------------------- _DWORD *__thiscall sub_93EDD0(_DWORD *this) { _DWORD *result; // eax signed int v2; // ecx result = this + 72; v2 = 256; do { result[1] = *result; result += 2; --v2; } while ( v2 ); return result; } //----- (0093EDF0) -------------------------------------------------------- void __thiscall sub_93EDF0(_DWORD **this) { unsigned int v1; // edi _DWORD **v2; // esi int v3; // eax int *v4; // ecx int *v5; // ebx int v6; // edx int *v7; // edi int v8; // ecx int *v9; // edx int *v10; // edi int v11; // eax int *v12; // ebx signed int v13; // [esp+8h] [ebp-Ch] signed int v14; // [esp+Ch] [ebp-8h] unsigned int v15; // [esp+10h] [ebp-4h] v1 = 0; v2 = this; v15 = 0; if ( dword_AC4D34 ) { v13 = 820; v14 = 292; do { v3 = dword_AC6B38; v4 = &dword_AC6B38; if ( dword_AC6B38 != -1 ) { v5 = &dword_AC6B38; do { if ( v3 == 11 ) { v4[1] = v1; } else if ( (v3 == 1 || v3 == 4) && v1 ) { v4[1] = 1; } v6 = v4[1]; v7 = (int *)&v2[2 * (v3 + v14)]; *v7 = v6; v7[1] = v6; (*(void (__stdcall **)(_DWORD *, unsigned int, int, int))(*v2[2078] + 268))(v2[2078], v15, v3, v4[1]); v3 = v5[2]; v1 = v15; v5 += 2; v4 = v5; } while ( v3 != -1 ); } v8 = dword_AC6CB8; v9 = &dword_AC6CB8; if ( dword_AC6CB8 != -1 ) { v10 = &dword_AC6CB8; do { v11 = v9[1] + 1; v12 = (int *)&v2[2 * (v8 + v13)]; *v12 = v11; v12[1] = v11; ((void (__thiscall *)(_DWORD **, unsigned int, int, int, _DWORD))(*v2)[52])(v2, v15, v8, v9[1], 0); v8 = v10[2]; v10 += 2; v9 = v10; } while ( v8 != -1 ); v1 = v15; } v14 += 33; v13 += 13; v15 = ++v1; } while ( v1 < dword_AC4D34 ); } } // AC4D34: using guessed type int dword_AC4D34; // AC6B38: using guessed type int dword_AC6B38; // AC6CB8: using guessed type int dword_AC6CB8; //----- (0093EF00) -------------------------------------------------------- void __thiscall sub_93EF00(_DWORD *this) { unsigned int v1; // esi _DWORD *v2; // eax _DWORD *v3; // ecx signed int v4; // edx signed int v5; // edx v1 = 0; if ( dword_AC4D34 ) { v2 = this + 1640; v3 = this + 584; do { v4 = 33; do { v3[1] = *v3; v3 += 2; --v4; } while ( v4 ); v5 = 13; do { v2[1] = *v2; v2 += 2; --v5; } while ( v5 ); ++v1; } while ( v1 < dword_AC4D34 ); } } // AC4D34: using guessed type int dword_AC4D34; //----- (0093EF50) -------------------------------------------------------- int __thiscall sub_93EF50(_DWORD *this) { _DWORD *v1; // esi v1 = this; (*(void (**)(void))(*this + 84))(); (*(void (__thiscall **)(_DWORD *))(*v1 + 108))(v1); (*(void (__thiscall **)(_DWORD *))(*v1 + 184))(v1); (*(void (__thiscall **)(_DWORD *))(*v1 + 220))(v1); sub_93F760(v1 + 62); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 22, 2, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 161, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 8, 3, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 9, 2, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 27, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 19, v1[14], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 20, v1[15], 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 15, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 25, 8, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 24, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 23, 8, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 14, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 26, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 29, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 28, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, int, _DWORD))(*v1 + 100))(v1, 35, (v1[2] & 1) != 0 ? 3 : 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 48, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, _DWORD, _DWORD))(*v1 + 100))(v1, 34, 0, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 143, 1, 0); (*(void (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 7, 1, 0); return (*(int (__thiscall **)(_DWORD *, signed int, signed int, _DWORD))(*v1 + 100))(v1, 141, 1, 0); } //----- (0093F0E0) -------------------------------------------------------- _DWORD *__thiscall sub_93F0E0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *v3; // eax signed int v4; // ecx _DWORD *v5; // eax signed int v6; // ecx _DWORD *v7; // eax signed int v8; // ecx _DWORD *v9; // eax _DWORD *v10; // eax int v11; // ecx unsigned int v12; // edx double v13; // st6 double v14; // st7 void (__stdcall ***v16)(signed int); // [esp+Ch] [ebp-4h] _DWORD *v17; // [esp+18h] [ebp+8h] v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiD3DRenderState::`vftable'; v2[29] = 0; *((float *)v2 + 35) = 0.0; *((float *)v2 + 36) = 0.0; *((float *)v2 + 37) = 0.0; sub_8E5020(); v3 = v2 + 72; v4 = 255; do { *v3 = 0x7FFFFFFF; v3[1] = 0x7FFFFFFF; v3 += 2; --v4; } while ( v4 >= 0 ); v5 = v2 + 584; v6 = 527; do { *v5 = 0x7FFFFFFF; v5[1] = 0x7FFFFFFF; v5 += 2; --v6; } while ( v6 >= 0 ); v7 = v2 + 1640; v8 = 207; do { *v7 = 0x7FFFFFFF; v7[1] = 0x7FFFFFFF; v7 += 2; --v8; } while ( v8 >= 0 ); v2[2076] = 0; v2[2078] = 0; v2[2079] = 0; sub_93E850(v2, a2); v2[3] = 0; v2[4] = 1; v2[5] = 1; v2[6] = 2; v2[7] = 3; v2[27] = 0; v2[28] = 0; v9 = operator new(0x20u); v17 = v9; if ( v9 ) { sub_85B2B0(v9); v10 = v17; *v17 = &NiAlphaProperty::`vftable'; *((_WORD *)v17 + 14) = 236; *((_BYTE *)v17 + 30) = 0; } else { v17 = 0; v10 = 0; } v11 = v2[29]; v16 = (void (__stdcall ***)(signed int))v11; if ( (_DWORD *)v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v16 ) (**v16)(1); v10 = v17; } v2[29] = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } *((float *)v2 + 30) = 0.0; *((float *)v2 + 31) = 0.0; v2[11] = 4; *((float *)v2 + 32) = 0.0; *((float *)v2 + 33) = 0.0; v2[22] = 4; v2[42] = 4; *((float *)v2 + 34) = 1.0; v2[50] = 4; v2[14] = 5; v2[23] = 5; v2[43] = 5; v2[51] = 5; v2[8] = 2; v2[9] = 1; v2[10] = 3; v2[12] = 9; v2[13] = 10; v2[15] = 6; v2[16] = 7; v2[17] = 8; v2[18] = 11; v2[19] = 8; v2[20] = 2; v2[21] = 3; v2[24] = 6; v2[25] = 7; v2[26] = 1; v2[46] = 8; v2[40] = 2; v2[41] = 3; v2[44] = 6; v2[45] = 7; v2[39] = 1; v2[47] = 1; v2[48] = 2; v2[49] = 3; v2[52] = 6; v2[53] = 2; v2[55] = 2; v2[57] = 3; v2[59] = 1; v2[54] = 3; v2[56] = 3; v2[58] = 2; v2[60] = 1; v2[61] = 0; v2[35] = dword_BA4724; v2[36] = dword_BA4728; v2[37] = dword_BA472C; v12 = ((signed int)(*((float *)v2 + 35) * 255.0) | 0xFFFFFF00) << 8; v13 = *((float *)v2 + 36) * 255.0; v14 = 255.0 * *((float *)v2 + 37); v2[66] = 3; v2[65] = 2; v2[2] = 0; v2[64] = 8; v2[67] = 4; v2[68] = 5; v2[38] = (unsigned __int8)(signed int)v14 | (((unsigned __int8)(signed int)v13 | v12) << 8); v2[69] = 6; v2[70] = 7; v2[71] = 1; *((_WORD *)v2 + 4154) = 0; return v2; } // 9A8C34: using guessed type void *NiAlphaProperty::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A479E4: using guessed type void *NiD3DRenderState::`vftable'; // BA4724: using guessed type int dword_BA4724; // BA4728: using guessed type int dword_BA4728; // BA472C: using guessed type int dword_BA472C; //----- (0093F460) -------------------------------------------------------- LONG __thiscall sub_93F460(void **this) { void **v1; // esi volatile LONG *v2; // edi void *v3; // eax volatile LONG *v4; // edi volatile LONG *v5; // edi v1 = this; *this = &NiD3DRenderState::`vftable'; v2 = (volatile LONG *)this[29]; if ( v2 ) { if ( !InterlockedDecrement(v2 + 1) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)((int)v2, 1); v1[29] = 0; } v3 = v1[2078]; v1[2079] = 0; if ( v3 ) (*(void (__stdcall **)(void *))(*(_DWORD *)v3 + 8))(v3); v1[2078] = 0; v4 = (volatile LONG *)v1[2076]; if ( v4 && !InterlockedDecrement(v4 + 1) && v4 ) (**(void (__thiscall ***)(void *, signed int))v4)((void *)v4, 1); sub_93F6D0(v1 + 62); v5 = (volatile LONG *)v1[29]; if ( v5 && !InterlockedDecrement(v5 + 1) && v5 ) (**(void (__thiscall ***)(void *, signed int))v5)((void *)v5, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A479E4: using guessed type void *NiD3DRenderState::`vftable'; //----- (0093F530) -------------------------------------------------------- int __thiscall sub_93F530(void *this, _DWORD *a2) { void *v2; // esi v2 = this; (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)this + 36))(this, a2[12]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 24))(v2, a2[7]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 8))(v2, a2[2]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 40))(v2, a2[13]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 12))(v2, a2[3]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 28))(v2, a2[8]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 32))(v2, a2[9]); (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 20))(v2, a2[5]); return (*(int (__thiscall **)(void *, _DWORD))(*(_DWORD *)v2 + 16))(v2, a2[4]); } //----- (0093F5C0) -------------------------------------------------------- void *__thiscall sub_93F5C0(void *this, char a2) { void *v2; // esi v2 = this; sub_93F460((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0093F5F0) -------------------------------------------------------- char __thiscall sub_93F5F0(float *this, int a2) { float *v2; // eax int v3; // edx double v4; // st7 char result; // al float v6; // [esp+8h] [ebp+8h] v2 = (float *)a2; v3 = *(_DWORD *)(a2 + 88); if ( *((_DWORD *)this + 17) == v3 ) return 0; *((_DWORD *)this + 17) = v3; v6 = *(float *)(a2 + 84); this[12] = v2[17]; this[13] = v2[18]; this[14] = v2[19]; this[15] = v6; this[4] = v2[8]; this[5] = v2[9]; this[6] = v2[10]; this[7] = v6; *this = v2[11]; this[1] = v2[12]; this[2] = v2[13]; this[3] = v6; this[8] = v2[14]; this[9] = v2[15]; this[10] = v2[16]; this[11] = v6; v4 = v2[20]; result = 1; this[16] = v4; return result; } //----- (0093F670) -------------------------------------------------------- int __thiscall sub_93F670(_BYTE *this, int a2) { int result; // eax if ( this[4] ) { this[4] = 0; result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)a2 + 196))(a2, *(_DWORD *)this); } return result; } //----- (0093F6A0) -------------------------------------------------------- void __thiscall sub_93F6A0(void **this, int a2) { void *v2; // eax if ( a2 ) { v2 = *(void **)(a2 + 92); if ( v2 ) { *(_DWORD *)(a2 + 92) = 0; if ( v2 == *this ) *this = 0; operator delete(v2); } } } //----- (0093F6D0) -------------------------------------------------------- void __thiscall sub_93F6D0(void **this) { void *v1; // eax if ( dword_BA45B0 ) { v1 = *(void **)(dword_BA45B0 + 92); if ( v1 ) { *(_DWORD *)(dword_BA45B0 + 92) = 0; if ( v1 == *this ) *this = 0; operator delete(v1); } } } // BA45B0: using guessed type int dword_BA45B0; //----- (0093F700) -------------------------------------------------------- char __thiscall sub_93F700(_BYTE *this, int a2) { _BYTE *v2; // esi float *v3; // ecx float *v4; // eax char result; // al int v6; // ecx v2 = this; v3 = *(float **)(a2 + 92); if ( !v3 ) { v4 = (float *)operator new(0x48u); if ( v4 ) { v4[17] = 0.0; sub_93F5F0(v4, a2); } else { v3 = 0; } *(_DWORD *)(a2 + 92) = v3; v2[4] = 1; } result = sub_93F5F0(v3, a2); if ( result ) v2[4] = 1; if ( v6 != *(_DWORD *)v2 ) { v2[4] = 1; *(_DWORD *)v2 = v6; } return result; } //----- (0093F760) -------------------------------------------------------- char __thiscall sub_93F760(_DWORD *this) { _DWORD *v1; // esi float *v2; // ecx float **v3; // edi int v4; // ebx float *v5; // eax char result; // al int v7; // ecx v1 = this; *this = 0; v2 = *(float **)(dword_BA45B0 + 92); v3 = (float **)(dword_BA45B0 + 92); v4 = dword_BA45B0; if ( !v2 ) { v5 = (float *)operator new(0x48u); if ( v5 ) { v5[17] = 0.0; sub_93F5F0(v5, v4); } else { v2 = 0; } *v3 = v2; *((_BYTE *)v1 + 4) = 1; } result = sub_93F5F0(v2, v4); if ( result ) *((_BYTE *)v1 + 4) = 1; *((_BYTE *)v1 + 4) = 1; if ( v7 != *v1 ) { *v1 = v7; *((_BYTE *)v1 + 4) = 1; } return result; } // BA45B0: using guessed type int dword_BA45B0; //----- (0093F7D0) -------------------------------------------------------- _DWORD *__thiscall sub_93F7D0(_DWORD *this, int a2, int a3) { _DWORD *v3; // esi int v4; // eax int v5; // eax int v6; // ecx unsigned int v7; // eax int v8; // edx int v9; // ecx int v10; // edx int v11; // edi void *v12; // eax void *v13; // eax int v14; // eax int v15; // edi void *v16; // eax void *v17; // eax int v18; // eax void *v19; // eax size_t v20; // ST18_4 void *v21; // eax size_t v22; // ST08_4 int v23; // eax void *v24; // eax size_t v25; // ST18_4 void *v26; // eax size_t v27; // ST08_4 int v28; // eax int v29; // edi void *v30; // eax void *v31; // eax int v32; // eax int v33; // edi void *v34; // eax void *v35; // eax v3 = this; sub_936220(this, a2); *v3 = &NiDX9ShaderConstantManager::`vftable'; v3[10] = *(_DWORD *)(a3 + 200); v4 = *(unsigned __int8 *)(a3 + 197); if ( v4 != 1 ) { if ( v4 == 2 ) { v3[31] = *(_DWORD *)(a3 + 252) != 0 ? 0x10 : 0; } else { if ( v4 != 3 ) goto LABEL_8; v3[30] = 16; } v3[20] = 16; goto LABEL_8; } v3[30] = 0; v3[20] = 0; LABEL_8: if ( v3[10] || !*(_BYTE *)(a2 + 976) ) { *((_BYTE *)v3 + 136) = 0; } else { *((_BYTE *)v3 + 136) = 1; v3[10] = 0x2000; } v5 = *(unsigned __int8 *)(a3 + 205); switch ( v5 ) { case 1: v3[11] = 8; v3[31] = 0; v3[21] = 0; goto LABEL_19; case 2: v3[11] = 32; v3[31] = *(_DWORD *)(a3 + 268) != 0 ? 0x10 : 0; break; case 3: v3[11] = 224; v3[31] = 16; break; default: goto LABEL_19; } v3[21] = 16; LABEL_19: v6 = v3[20]; v7 = v3[10]; v3[8] = v3[11]; v8 = v3[21]; v3[16] = v6; v9 = v3[30]; v3[18] = v8; v10 = v3[31]; v3[6] = v7; v3[26] = v9; v3[28] = v10; if ( v7 > 0 ) { v11 = 4 * v7; v12 = operator new(16 * v7); v3[2] = v12; memset(v12, 0, 4 * v11); v13 = operator new(4 * v11); v3[3] = v13; memset(v13, 0, 4 * v11); } v14 = v3[11]; if ( v14 ) { v15 = 4 * v14; v16 = operator new(16 * v14); v3[4] = v16; memset(v16, 0, 4 * v15); v17 = operator new(4 * v15); v3[5] = v17; memset(v17, 0, 4 * v15); } v18 = v3[30]; if ( v18 ) { v19 = operator new(4 * v18); v20 = 4 * v3[30]; v3[22] = v19; memset(v19, 0, v20); v21 = operator new(4 * v3[30]); v22 = 4 * v3[30]; v3[23] = v21; memset(v21, 0, v22); } v23 = v3[31]; if ( v23 ) { v24 = operator new(4 * v23); v25 = 4 * v3[31]; v3[24] = v24; memset(v24, 0, v25); v26 = operator new(4 * v3[31]); v27 = 4 * v3[31]; v3[25] = v26; memset(v26, 0, v27); } v28 = v3[20]; if ( v28 ) { v29 = 4 * v28; v30 = operator new(16 * v28); v3[12] = v30; memset(v30, 0, 4 * v29); v31 = operator new(4 * v29); v3[13] = v31; memset(v31, 0, 4 * v29); } v32 = v3[21]; if ( v32 ) { v33 = 4 * v32; v34 = operator new(16 * v32); v3[14] = v34; memset(v34, 0, 4 * v33); v35 = operator new(4 * v33); v3[15] = v35; memset(v35, 0, 4 * v33); } return v3; } // A47AF4: using guessed type void *NiDX9ShaderConstantManager::`vftable'; //----- (0093FB10) -------------------------------------------------------- void *__thiscall sub_93FB10(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiDX9ShaderConstantManager::`vftable'; sub_9362D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A47AF4: using guessed type void *NiDX9ShaderConstantManager::`vftable'; //----- (0093FB40) -------------------------------------------------------- _DWORD *__cdecl sub_93FB40(int a1, int a2) { _DWORD *v2; // eax _DWORD *result; // eax v2 = operator new(0x8Cu); if ( v2 ) result = sub_93F7D0(v2, a1, a2); else result = 0; return result; } //----- (0093FB70) -------------------------------------------------------- int __thiscall sub_93FB70(int this) { int v1; // esi unsigned int v2; // eax unsigned int v3; // ecx unsigned int v4; // eax unsigned int v5; // ecx unsigned int v6; // eax unsigned int v7; // ecx unsigned int v8; // eax unsigned int v9; // ecx unsigned int v10; // eax unsigned int v11; // ecx unsigned int v12; // eax unsigned int v13; // ecx int v14; // ecx int v15; // edx int result; // eax int v17; // ecx int v18; // edx v1 = this; if ( *(_BYTE *)(this + 136) && !(*(unsigned __int8 (**)(void))(**(_DWORD **)(*(_DWORD *)(this + 132) + 1716) + 240))() ) { *(_DWORD *)(v1 + 24) = *(_DWORD *)(v1 + 40); *(_DWORD *)(v1 + 28) = 0; } v2 = *(_DWORD *)(v1 + 24); v3 = *(_DWORD *)(v1 + 28); if ( v2 < v3 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 376))( *(_DWORD *)(v1 + 128), v2, *(_DWORD *)(v1 + 8) + 16 * v2, v3 - v2); v4 = *(_DWORD *)(v1 + 32); v5 = *(_DWORD *)(v1 + 36); if ( v4 < v5 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 436))( *(_DWORD *)(v1 + 128), v4, *(_DWORD *)(v1 + 16) + 16 * v4, v5 - v4); v6 = *(_DWORD *)(v1 + 104); v7 = *(_DWORD *)(v1 + 108); if ( v6 < v7 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 392))( *(_DWORD *)(v1 + 128), v6, *(_DWORD *)(v1 + 88) + 4 * v6, v7 - v6); v8 = *(_DWORD *)(v1 + 112); v9 = *(_DWORD *)(v1 + 116); if ( v8 < v9 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 452))( *(_DWORD *)(v1 + 128), v8, *(_DWORD *)(v1 + 96) + 4 * v8, v9 - v8); v10 = *(_DWORD *)(v1 + 64); v11 = *(_DWORD *)(v1 + 68); if ( v10 < v11 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 384))( *(_DWORD *)(v1 + 128), v10, *(_DWORD *)(v1 + 48) + 16 * v10, v11 - v10); v12 = *(_DWORD *)(v1 + 72); v13 = *(_DWORD *)(v1 + 76); if ( v12 < v13 ) (*(void (__stdcall **)(_DWORD, unsigned int, unsigned int, unsigned int))(**(_DWORD **)(v1 + 128) + 444))( *(_DWORD *)(v1 + 128), v12, *(_DWORD *)(v1 + 56) + 16 * v12, v13 - v12); v14 = *(_DWORD *)(v1 + 44); v15 = *(_DWORD *)(v1 + 80); *(_DWORD *)(v1 + 24) = *(_DWORD *)(v1 + 40); result = *(_DWORD *)(v1 + 84); *(_DWORD *)(v1 + 32) = v14; v17 = *(_DWORD *)(v1 + 120); *(_DWORD *)(v1 + 64) = v15; v18 = *(_DWORD *)(v1 + 124); *(_DWORD *)(v1 + 28) = 0; *(_DWORD *)(v1 + 36) = 0; *(_DWORD *)(v1 + 68) = 0; *(_DWORD *)(v1 + 76) = 0; *(_DWORD *)(v1 + 108) = 0; *(_DWORD *)(v1 + 116) = 0; *(_DWORD *)(v1 + 72) = result; *(_DWORD *)(v1 + 104) = v17; *(_DWORD *)(v1 + 112) = v18; return result; } //----- (0093FCD0) -------------------------------------------------------- int __thiscall sub_93FCD0(_DWORD *this) { _DWORD *v1; // esi int result; // eax v1 = this; result = this[4]; if ( result ) { result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v1[4] = 0; } return result; } //----- (0093FCF0) -------------------------------------------------------- _DWORD *__cdecl sub_93FCF0(_DWORD *a1) { _DWORD *result; // eax bool v2; // zf result = a1; v2 = a1[2] >= 0; a1[5] = 8; a1[6] = 1; if ( !v2 ) a1[5] = 24; return result; } //----- (0093FD20) -------------------------------------------------------- int __thiscall sub_93FD20(_DWORD *this, int a2) { int result; // eax int v3; // edx int v4; // edx result = this[13]; if ( result ) { while ( result != a2 ) { result = *(_DWORD *)(result + 68); if ( !result ) return result; } v3 = *(_DWORD *)(result + 68); if ( v3 ) *(_DWORD *)(v3 + 72) = *(_DWORD *)(result + 72); v4 = *(_DWORD *)(result + 72); if ( v4 ) *(_DWORD *)(v4 + 68) = *(_DWORD *)(result + 68); if ( result == this[13] ) { result = *(_DWORD *)(result + 68); this[13] = result; } } return result; } //----- (0093FD70) -------------------------------------------------------- int __thiscall sub_93FD70(_DWORD *this, unsigned int a2) { int result; // eax int *v3; // edx int v4; // edx if ( a2 >= this[3] ) return 0; v3 = (int *)(this[1] + 4 * a2); result = *v3; *v3 = 0; if ( result ) --this[4]; v4 = this[3] - 1; if ( a2 == v4 ) this[3] = v4; return result; } //----- (0093FDB0) -------------------------------------------------------- void *__thiscall sub_93FDB0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B00: using guessed type void *NiTArray::`vftable'; //----- (0093FDE0) -------------------------------------------------------- void *__thiscall sub_93FDE0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B08: using guessed type void *NiTArray::`vftable'; //----- (0093FE10) -------------------------------------------------------- _DWORD *__thiscall sub_93FE10(_DWORD *this, unsigned int a2) { _DWORD *result; // eax int v3; // edx int v4; // edx result = (_DWORD *)this[13]; if ( !result ) return 0; while ( result[9] < a2 ) { result = (_DWORD *)result[17]; if ( !result ) return 0; } v3 = result[17]; if ( v3 ) *(_DWORD *)(v3 + 72) = result[18]; v4 = result[18]; if ( v4 ) *(_DWORD *)(v4 + 68) = result[17]; if ( result == (_DWORD *)this[13] ) this[13] = result[17]; return result; } //----- (0093FE60) -------------------------------------------------------- _DWORD *__thiscall sub_93FE60(_DWORD *this, _DWORD *a2) { _DWORD *result; // eax _DWORD *v3; // esi result = (_DWORD *)this[13]; if ( result ) { v3 = 0; while ( result[9] <= a2[9] ) { v3 = result; result = (_DWORD *)result[17]; if ( !result ) { v3[17] = a2; a2[18] = v3; a2[17] = 0; return result; } } if ( v3 ) v3[17] = a2; result[18] = a2; a2[17] = result; a2[18] = v3; if ( result == (_DWORD *)this[13] ) this[13] = a2; } else { this[13] = a2; a2[17] = 0; result = (_DWORD *)this[13]; result[18] = 0; } return result; } //----- (0093FED0) -------------------------------------------------------- void sub_93FED0() { _DWORD *v0; // esi _DWORD *v1; // edi sub_943410(); v0 = dword_BA71C4; if ( dword_BA71C4 ) { do { v1 = (_DWORD *)v0[17]; sub_9432C0(v0); operator delete(v0); v0 = v1; } while ( v1 ); } dword_BA71C4 = 0; } //----- (0093FF10) -------------------------------------------------------- unsigned int __thiscall sub_93FF10(_DWORD *this) { unsigned int result; // eax *this = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[1] = 0; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; result = 0; if ( this[14] ) { do *(_DWORD *)(this[12] + 4 * result++) = 0; while ( result < this[14] ); } this[14] = 0; this[15] = 0; this[17] = 0; this[18] = 0; return result; } //----- (0093FF60) -------------------------------------------------------- void __stdcall sub_93FF60(_DWORD *a1) { int v1; // eax int v2; // eax int v3; // ecx void *v4; // eax if ( a1 ) { v1 = a1[2]; if ( v1 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1 + 8))(a1[2]); a1[2] = 0; } sub_93FF10(a1); v2 = a1[17]; v3 = a1[18]; if ( v2 ) *(_DWORD *)(v2 + 72) = v3; if ( v3 ) *(_DWORD *)(v3 + 68) = v2; v4 = dword_BA71C4; if ( dword_BA71C4 ) { *((_DWORD *)dword_BA71C4 + 18) = a1; v4 = dword_BA71C4; } a1[17] = v4; a1[18] = 0; dword_BA71C4 = a1; } } //----- (0093FFD0) -------------------------------------------------------- void __thiscall sub_93FFD0(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx int v3; // eax _DWORD *v4; // esi int v5; // eax int v6; // eax unsigned int i; // eax void *v8; // eax int v9; // eax void *v10; // ST04_4 int v11; // [esp+8h] [ebp-4h] v1 = this; v2 = 0; v11 = 0; if ( v1[10] ) { if ( v1[10] <= 0u ) goto LABEL_15; do { v3 = v1[8]; v4 = *(_DWORD **)(v3 + 4 * v2); *(_DWORD *)(v3 + 4 * v2) = 0; if ( v4 ) --v1[11]; v5 = v1[10] - 1; if ( v2 == v5 ) v1[10] = v5; if ( v4 ) { v6 = v4[2]; if ( v6 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 8))(v4[2]); v2 = v11; v4[2] = 0; } *v4 = 0; v4[2] = 0; v4[3] = 0; v4[4] = 0; v4[5] = 0; v4[1] = 0; v4[6] = 0; v4[7] = 0; v4[8] = 0; v4[9] = 0; v4[10] = 0; for ( i = 0; i < v4[14]; ++i ) *(_DWORD *)(v4[12] + 4 * i) = 0; v4[14] = 0; v4[15] = 0; v4[17] = 0; v4[18] = 0; v8 = dword_BA71C4; if ( dword_BA71C4 ) { *((_DWORD *)dword_BA71C4 + 18) = v4; v8 = dword_BA71C4; } v4[17] = v8; v4[18] = 0; dword_BA71C4 = v4; } LABEL_15: v11 = ++v2; } while ( v2 < v1[10] ); } v9 = v1[4]; if ( v9 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v9 + 8))(v1[4]); v1[4] = 0; v10 = (void *)v1[8]; v1[7] = &NiTArray::`vftable'; operator delete(v10); } // A47B08: using guessed type void *NiTArray::`vftable'; //----- (009400C0) -------------------------------------------------------- void __thiscall sub_9400C0(_DWORD *this, unsigned int a2, unsigned int a3) { _DWORD *v3; // edi _DWORD *v4; // esi int v5; // ebx _DWORD *v6; // ecx v3 = this; v4 = *(_DWORD **)(this[8] + 4 * a2); if ( v4 ) { v5 = v4[9]; sub_9432E0(v4, a3); if ( v5 != v4[9] ) { sub_93FD20(v3, (int)v4); if ( v4[10] == v4[3] ) { sub_93FD70(v3 + 7, a2); sub_93FF60(v4); } else { sub_93FE60(v6, v4); } } } } //----- (00940120) -------------------------------------------------------- void sub_940120() { unsigned int v0; // edi _DWORD *v1; // eax unsigned int i; // ecx int v3; // ecx int v4; // edx void *v5; // ecx v0 = 0; if ( dword_AC7384 ) { do { v1 = operator new(0x4Cu); if ( v1 ) { v1[11] = &NiTArray::`vftable'; v1[13] = 0; v1[16] = 1; v1[14] = 0; v1[15] = 0; v1[12] = 0; *v1 = 0; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[1] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; for ( i = 0; i < v1[14]; ++i ) *(_DWORD *)(v1[12] + 4 * i) = 0; v1[14] = 0; v1[15] = 0; v1[17] = 0; v1[18] = 0; } else { v1 = 0; } v3 = v1[17]; v4 = v1[18]; if ( v3 ) *(_DWORD *)(v3 + 72) = v4; if ( v4 ) *(_DWORD *)(v4 + 68) = v3; v5 = dword_BA71C4; if ( dword_BA71C4 ) { *((_DWORD *)dword_BA71C4 + 18) = v1; v5 = dword_BA71C4; } v1[17] = v5; v1[18] = 0; ++v0; dword_BA71C4 = v1; } while ( v0 < dword_AC7384 ); } } // A47B00: using guessed type void *NiTArray::`vftable'; // AC7384: using guessed type int dword_AC7384; //----- (009401E0) -------------------------------------------------------- _DWORD *__thiscall sub_9401E0(_DWORD *this, unsigned int a2) { unsigned int v2; // ebx _DWORD *v3; // edi int v4; // eax int v5; // ST10_4 int v6; // ST0C_4 int v7; // ST08_4 _DWORD *v9; // esi _DWORD *v10; // ecx int v11; // edx _DWORD *v12; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( !(this[2] & 0x10000000) && a2 <= this[3] ) v2 = this[3]; v4 = this[4]; v5 = this[6]; v6 = this[1]; v7 = this[5]; a2 = 0; if ( (*(int (__stdcall **)(int, unsigned int, int, int, int, unsigned int *, _DWORD))(*(_DWORD *)v4 + 104))( v4, v2, v7, v6, v5, &a2, 0) < 0 ) return 0; v9 = dword_BA71C4; if ( !dword_BA71C4 ) { sub_940120(); v9 = dword_BA71C4; } v10 = (_DWORD *)v9[17]; dword_BA71C4 = v10; if ( v10 ) v10[18] = 0; v9[17] = 0; v9[18] = 0; *v9 = v3; v9[2] = a2; v9[3] = v2; v9[9] = v2; v9[10] = v2; v9[4] = v3[1]; v9[5] = v3[2]; v9[7] = v3[6]; v11 = v3[5]; v12 = v9; v9[6] = v11; v9[1] = sub_8D51C0(v3 + 7, &v12); return v9; } //----- (009402B0) -------------------------------------------------------- unsigned int *__thiscall sub_9402B0(_DWORD *this, unsigned int *a2, char a3) { _DWORD *v3; // edi _DWORD *v4; // esi unsigned int *v5; // ebx v3 = this; if ( a3 || (v4 = sub_93FE10(this, (unsigned int)a2)) == 0 ) { v4 = sub_9401E0(v3, (unsigned int)a2); if ( !v4 ) return 0; } v5 = sub_943440(v4, a2); if ( v4[9] > v3[14] ) sub_93FE60(v3, v4); return v5; } //----- (00940310) -------------------------------------------------------- _DWORD *__thiscall sub_940310(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = 0; this[3] = 0; *((_BYTE *)this + 16) = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 4; this[15] = 0; this[16] = 0; this[17] = 0; this[18] = 0; this[19] = 0; return result; } //----- (00940360) -------------------------------------------------------- int __thiscall sub_940360(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // ebx int result; // eax int v4; // ecx _DWORD *v5; // edi v1 = this; v2 = 0; if ( this[1] ) { do { for ( result = v1[2]; *(_DWORD *)(result + 4 * v2); result = v1[2] ) { v4 = v1[2]; v5 = *(_DWORD **)(v4 + 4 * v2); *(_DWORD *)(v4 + 4 * v2) = *v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 16))(v1, v5); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 24))(v1, v5); } ++v2; } while ( v2 < v1[1] ); v1[3] = 0; } else { this[3] = 0; } return result; } //----- (009403D0) -------------------------------------------------------- void __thiscall sub_9403D0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax int v8; // ebx int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx _DWORD *v13; // [esp+8h] [ebp-4h] v1 = this + 3; v2 = this[4]; v3 = 0; if ( v2 ) { v4 = (_DWORD *)v1[2]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[2] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = (_DWORD *)v6[2]; v8 = v6[1]; v6 = (_DWORD *)*v6; v13 = v7; if ( !v6 ) { v9 = (*(int (__thiscall **)(_DWORD *, int))(*v1 + 4))(v1, v8); v10 = v1[1]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_12: v6 = 0; } else { v12 = (_DWORD *)(v1[2] + 4 * v11); while ( 1 ) { v6 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_12; } } } sub_916F40(v1, v8); if ( v13 ) { sub_93FFD0(v13); operator delete(v13); } } } //----- (00940470) -------------------------------------------------------- LONG __thiscall sub_940470(volatile LONG *this, LONG a2) { LONG result; // eax volatile LONG *v3; // esi _DWORD *v4; // eax result = a2; v3 = this; if ( !*(_DWORD *)(a2 + 28) ) { v4 = operator new(0x50u); if ( v4 ) { *v4 = 0; v4[1] = 0; v4[2] = 0; v4[3] = 0; *((_BYTE *)v4 + 16) = 0; v4[5] = 0; v4[6] = 0; v4[7] = 0; v4[8] = 0; v4[9] = 0; v4[10] = 0; v4[11] = 0; v4[12] = 0; v4[13] = 0; v4[14] = 4; v4[15] = 0; v4[16] = 0; v4[17] = 0; v4[18] = 0; v4[19] = 0; } else { v4 = 0; } v4[14] = 4; *v4 = 20971520; result = sub_943500(v3, (int)v4); } return result; } //----- (009404F0) -------------------------------------------------------- void __stdcall sub_9404F0(int a1, unsigned int a2) { int v2; // eax if ( a2 < *(_DWORD *)(a1 + 28) ) { v2 = *(_DWORD *)(*(_DWORD *)(a1 + 36) + 4 * a2); if ( v2 ) { if ( *(_DWORD *)(v2 + 8) ) sub_9400C0(**(_DWORD ***)(v2 + 4), *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4), *(_DWORD *)v2); if ( a2 < *(_DWORD *)(a1 + 28) ) *(_DWORD *)(*(_DWORD *)(a1 + 36) + 4 * a2) = 0; } } } //----- (00940540) -------------------------------------------------------- _DWORD *__thiscall sub_940540(_DWORD *this) { _DWORD *result; // eax unsigned int v2; // ecx result = this; this[7] = &NiTArray::`vftable'; this[9] = 0; this[12] = 1; this[10] = 0; this[11] = 0; this[8] = 0; this[3] = dword_AC7388; this[1] = 0; this[2] = 0; *this = 0; this[4] = 0; this[5] = 0; this[6] = 0; v2 = 0; if ( result[10] ) { do *(_DWORD *)(result[8] + 4 * v2++) = 0; while ( v2 < result[10] ); } result[10] = 0; result[11] = 0; result[13] = 0; result[14] = dword_AC738C; return result; } // A47B08: using guessed type void *NiTArray::`vftable'; // AC7388: using guessed type int dword_AC7388; // AC738C: using guessed type int dword_AC738C; //----- (009405A0) -------------------------------------------------------- _DWORD *__cdecl sub_9405A0(int a1, int a2, int a3, int a4, int a5) { _DWORD *v5; // eax _DWORD *result; // eax _DWORD *v7; // esi int v8; // eax v5 = operator new(0x3Cu); if ( !v5 ) return 0; result = sub_940540(v5); v7 = result; if ( result ) { result[3] = a1; if ( a2 ) { result[4] = a2; (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); } else { v8 = result[4]; if ( v8 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v8 + 8))(v7[4]); v7[4] = 0; } v7[1] = a3; v7[2] = a4; *v7 = a5; sub_93FCF0(v7); result = v7; } return result; } //----- (00940620) -------------------------------------------------------- void **__thiscall sub_940620(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiVBSet *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B10: using guessed type void *NiTMapBase,unsigned int,NiVBSet *>::`vftable'; //----- (00940660) -------------------------------------------------------- void **__thiscall sub_940660(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,NiVBSet *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B10: using guessed type void *NiTMapBase,unsigned int,NiVBSet *>::`vftable'; // A47B30: using guessed type void *NiTPointerMap::`vftable'; //----- (009406A0) -------------------------------------------------------- _DWORD *__thiscall sub_9406A0(void *this, char a2) { _DWORD *v2; // esi v2 = this; *(_DWORD *)this = &NiStaticGeometryGroup::`vftable'; sub_9403D0(this); v2[3] = &NiTPointerMap::`vftable'; sub_940360(v2 + 3); v2[3] = &NiTMapBase,unsigned int,NiVBSet *>::`vftable'; sub_940360(v2 + 3); operator delete((void *)v2[5]); sub_9434E0(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B10: using guessed type void *NiTMapBase,unsigned int,NiVBSet *>::`vftable'; // A47B30: using guessed type void *NiTPointerMap::`vftable'; // A47B50: using guessed type void *NiStaticGeometryGroup::`vftable'; //----- (00940700) -------------------------------------------------------- unsigned int *__thiscall sub_940700(_DWORD *this, _DWORD *a2, unsigned int a3) { _DWORD *v3; // edi int v4; // esi _DWORD *v5; // ebx _DWORD *v6; // ebx unsigned int *result; // eax _DWORD *v8; // [esp+Ch] [ebp-Ch] _DWORD *v9; // [esp+10h] [ebp-8h] _DWORD *v10; // [esp+14h] [ebp-4h] unsigned int v11; // [esp+20h] [ebp+8h] int v12; // [esp+24h] [ebp+Ch] v3 = a2; v4 = a2[2]; v5 = this; v9 = this; v10 = 0; if ( a3 >= a2[7] ) v11 = 0; else v11 = *(_DWORD *)(a2[8] + 4 * a3); if ( !v4 ) v4 = v11 | 0x80000000; v12 = 0; if ( *((_BYTE *)v3 + 16) ) { v4 |= 0x40000000u; v12 = 2147483648; } v8 = this + 3; if ( !sub_8C4C90(this + 3, v4, &v10) ) goto LABEL_11; v6 = v10; if ( !v10 ) { v5 = v9; LABEL_11: v6 = sub_9405A0(0x10000, v5[2], v4, v12, 0); sub_815C70(v8, v4, (int)v6); } result = sub_9402B0(v6, (unsigned int *)(v11 * v3[6]), v3[7] > 1u); v3[13] = result[3] / v11; return result; } //----- (00940830) -------------------------------------------------------- volatile LONG *sub_940830() { volatile LONG *v0; // esi void *v1; // eax size_t v2; // ST08_4 volatile LONG *v4; // eax v4 = (volatile LONG *)operator new(0x1Cu); if ( !v4 ) return 0; v0 = v4; sub_9434C0(v4); *v0 = (volatile LONG)&NiStaticGeometryGroup::`vftable'; *((_DWORD *)v0 + 4) = 37; *((_DWORD *)v0 + 3) = &NiTMapBase,unsigned int,NiVBSet *>::`vftable'; *((_DWORD *)v0 + 6) = 0; v1 = operator new(0x94u); v2 = 4 * *((_DWORD *)v0 + 4); *((_DWORD *)v0 + 5) = v1; memset(v1, 0, v2); *((_DWORD *)v0 + 3) = &NiTPointerMap::`vftable'; return v0; } // A47B10: using guessed type void *NiTMapBase,unsigned int,NiVBSet *>::`vftable'; // A47B30: using guessed type void *NiTPointerMap::`vftable'; // A47B50: using guessed type void *NiStaticGeometryGroup::`vftable'; //----- (00940850) -------------------------------------------------------- void __thiscall sub_940850(volatile LONG *this, int a2) { _DWORD *v2; // esi v2 = *(_DWORD **)(a2 + 40); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 40)); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 40) = 0; } } //----- (00940890) -------------------------------------------------------- void *__thiscall sub_940890(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiUnsharedGeometryGroup::`vftable'; if ( this == (void *)dword_BA71C8 ) dword_BA71C8 = 0; sub_9434E0(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A47B7C: using guessed type void *NiUnsharedGeometryGroup::`vftable'; // BA71C8: using guessed type int dword_BA71C8; //----- (009408D0) -------------------------------------------------------- int sub_9408D0() { int result; // eax volatile LONG *v1; // eax volatile LONG *v2; // esi result = dword_BA71C8; if ( !dword_BA71C8 ) { v1 = (volatile LONG *)operator new(0xCu); v2 = v1; if ( v1 ) { sub_9434C0(v1); result = (int)v2; *v2 = (volatile LONG)&NiUnsharedGeometryGroup::`vftable'; dword_BA71C8 = (int)v2; } else { result = 0; dword_BA71C8 = 0; } } return result; } // A47B7C: using guessed type void *NiUnsharedGeometryGroup::`vftable'; // BA71C8: using guessed type int dword_BA71C8; //----- (00940910) -------------------------------------------------------- void __thiscall sub_940910(volatile LONG *this, int a2) { _DWORD *v2; // esi v2 = *(_DWORD **)(a2 + 60); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 60)); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 60) = 0; } } //----- (00940950) -------------------------------------------------------- void __thiscall sub_940950(volatile LONG *this, int a2) { volatile LONG *v2; // esi _DWORD *v3; // eax v2 = this; if ( !*(_DWORD *)(a2 + 28) ) { v3 = operator new(0x50u); if ( v3 ) { *v3 = 0; v3[1] = 0; v3[2] = 0; v3[3] = 0; *((_BYTE *)v3 + 16) = 0; v3[5] = 0; v3[6] = 0; v3[7] = 0; v3[8] = 0; v3[9] = 0; v3[10] = 0; v3[11] = 0; v3[12] = 0; v3[13] = 0; v3[14] = 4; v3[15] = 0; v3[16] = 0; v3[17] = 0; v3[18] = 0; v3[19] = 0; } else { v3 = 0; } v3[14] = 4; *(_DWORD *)(a2 + 28) = v3; *v3 = 20971520; sub_943500(v2, (int)v3); } } //----- (009409D0) -------------------------------------------------------- void __thiscall sub_9409D0(volatile LONG *this, int a2) { _DWORD *v2; // esi v2 = *(_DWORD **)(a2 + 28); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 28)); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 28) = 0; } } //----- (00940A10) -------------------------------------------------------- _DWORD *__cdecl sub_940A10(int a1, int a2, int a3, int a4, int a5) { _DWORD *result; // eax result = operator new(0x20u); if ( !result ) return 0; *result = 0; result[1] = 0; result[2] = 0; result[3] = 0; result[5] = 0; result[4] = 0; result[6] = 0; result[7] = 0; *result = a5; result[1] = a1; result[2] = a2; result[3] = a3; result[5] = a4; result[4] = 0; return result; } //----- (00940A60) -------------------------------------------------------- void __thiscall sub_940A60(volatile LONG *this, int a2, int a3, int a4) { _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // eax int v7; // eax signed int v8; // ecx volatile LONG *v9; // [esp+Ch] [ebp-4h] v9 = this; if ( a4 ) { if ( *(_DWORD *)(a4 + 40) ) return; v4 = operator new(0x50u); if ( v4 ) v5 = sub_940310(v4); else v5 = 0; v5[14] = (*(_WORD *)(a4 + 34) != 0) + 4; *(_DWORD *)(a4 + 40) = v5; } else { if ( *(_DWORD *)(a2 + 60) ) return; v6 = operator new(0x50u); if ( v6 ) v5 = sub_940310(v6); else v5 = 0; v7 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v7 ) { while ( (char *)v7 != dword_BA4A70 ) { v7 = *(_DWORD *)(v7 + 4); if ( !v7 ) goto LABEL_14; } v5[14] = 4; } else { LABEL_14: if ( sub_402B70((int)dword_BA4AA4, a2) ) v5[14] = 5; } *(_DWORD *)(a2 + 60) = v5; } v8 = 0; if ( *(_DWORD *)(a2 + 40) ) v8 = 0x400000; if ( *(_DWORD *)(a2 + 36) != 0 ) v8 |= (unsigned int)sub_800000; *v5 = v8 | ((*(_WORD *)(a2 + 48) & 0x3F) << 24); sub_943500(v9, (int)v5); } //----- (00940B50) -------------------------------------------------------- _DWORD *__thiscall sub_940B50(_DWORD **this, int a2, unsigned int a3) { int v3; // edx int v4; // esi signed int v5; // edx int v6; // edi _DWORD *result; // eax if ( a3 >= *(_DWORD *)(a2 + 28) ) v3 = 0; else v3 = *(_DWORD *)(*(_DWORD *)(a2 + 32) + 4 * a3); v4 = v3 * *(_DWORD *)(a2 + 24); v5 = 8; if ( *(_BYTE *)(a2 + 16) ) v5 = 24; (*(void (__stdcall **)(_DWORD *, int, signed int, _DWORD, signed int, int *, _DWORD))(*this[2] + 104))( this[2], v4, v5, *(_DWORD *)(a2 + 8), 1, &a2, 0); v6 = a2; result = operator new(0x20u); if ( !result ) return 0; *result = 0; result[1] = 0; result[2] = 0; result[3] = 0; result[5] = 0; result[4] = 0; result[6] = 0; result[7] = 0; result[2] = v6; result[5] = v4; *result = 0; result[1] = 0; result[3] = 0; result[4] = 0; return result; } //----- (00940BF0) -------------------------------------------------------- void __stdcall sub_940BF0(int a1, unsigned int a2) { _DWORD *v2; // esi int v3; // eax if ( a2 < *(_DWORD *)(a1 + 28) ) { v2 = *(_DWORD **)(*(_DWORD *)(a1 + 36) + 4 * a2); if ( v2 ) { v3 = v2[2]; if ( v3 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))(v2[2]); if ( a2 < *(_DWORD *)(a1 + 28) ) *(_DWORD *)(*(_DWORD *)(a1 + 36) + 4 * a2) = 0; v2[2] = 0; operator delete(v2); } } } //----- (00940C40) -------------------------------------------------------- void *__thiscall sub_940C40(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A47BE8: using guessed type void *NiTArray::`vftable'; //----- (00940C70) -------------------------------------------------------- _DWORD *__thiscall sub_940C70(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx _DWORD *v3; // edi unsigned int v4; // eax _DWORD *v5; // edx _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *v8; // eax int v9; // ebx int v10; // eax unsigned int v11; // edx unsigned int v12; // eax _DWORD *v13; // ecx int v14; // eax int v15; // eax unsigned int v16; // edx unsigned int v17; // eax _DWORD *v18; // ecx _DWORD *result; // eax int v20; // eax unsigned int v21; // edx unsigned int v22; // eax _DWORD *v23; // ecx unsigned int v24; // esi int v25; // eax _DWORD *v26; // edi int v27; // eax int v28; // eax int v29; // eax int v30; // ecx _DWORD *v31; // [esp+Ch] [ebp-8h] int v32; // [esp+Ch] [ebp-8h] _DWORD *v33; // [esp+10h] [ebp-4h] v1 = this; v2 = this[4]; v3 = v1 + 3; v4 = 0; v31 = v1; if ( v2 ) { v5 = (_DWORD *)v1[5]; while ( !*v5 ) { ++v4; ++v5; if ( v4 >= v2 ) goto LABEL_5; } v6 = *(_DWORD **)(v1[5] + 4 * v4); } else { LABEL_5: v6 = 0; } v7 = v6; if ( v6 ) { do { v8 = (_DWORD *)v7[2]; v9 = v7[1]; v7 = (_DWORD *)*v7; v33 = v8; if ( !v7 ) { v10 = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 4))(v3, v9); v11 = v3[1]; v12 = v10 + 1; if ( v12 >= v11 ) { LABEL_12: v7 = 0; } else { v13 = (_DWORD *)(v3[2] + 4 * v12); while ( 1 ) { v7 = (_DWORD *)*v13; if ( *v13 ) break; ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_12; } } } sub_916F40(v3, v9); if ( v33 ) { v14 = v33[4]; if ( v14 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v14 + 8))(v33[4]); v15 = v33[3]; if ( v15 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v15 + 8))(v33[3]); operator delete(v33); } } while ( v7 ); v1 = v31; } v16 = v1[8]; v17 = 0; if ( v16 ) { v18 = (_DWORD *)v1[9]; while ( !*v18 ) { ++v17; ++v18; if ( v17 >= v16 ) goto LABEL_25; } result = *(_DWORD **)(v1[9] + 4 * v17); } else { LABEL_25: result = 0; } for ( ; result; *(_DWORD *)(v32 + 8) = 0 ) { v32 = result[2]; if ( *result ) { result = (_DWORD *)*result; } else { v20 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[7] + 4))(v1 + 7, result[1]); v21 = v1[8]; v22 = v20 + 1; if ( v22 >= v21 ) { LABEL_35: result = 0; } else { v23 = (_DWORD *)(v1[9] + 4 * v22); while ( !*v23 ) { ++v22; ++v23; if ( v22 >= v21 ) goto LABEL_35; } result = (_DWORD *)*v23; } } } v24 = 0; if ( v1[13] ) { do { if ( v24 < v1[14] ) { v25 = v1[12]; v26 = *(_DWORD **)(v25 + 4 * v24); *(_DWORD *)(v25 + 4 * v24) = 0; if ( v26 ) --v1[15]; v27 = v1[14] - 1; if ( v24 == v27 ) v1[14] = v27; if ( v26 ) { v28 = v26[4]; if ( v28 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v28 + 8))(v26[4]); v29 = v26[3]; if ( v29 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v29 + 8))(v26[3]); operator delete(v26); } } result = (_DWORD *)v1[18]; v30 = result[v24++]; *(_DWORD *)(v30 + 8) = 0; } while ( v24 < v1[13] ); } return result; } //----- (00940E30) -------------------------------------------------------- void __thiscall sub_940E30(volatile LONG *this, int a2) { _DWORD *v2; // esi void *v3; // eax v2 = *(_DWORD **)(a2 + 60); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 60)); v3 = (void *)v2[9]; if ( v3 ) memset(v3, 0, 4 * v2[7]); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 60) = 0; } } //----- (00940E80) -------------------------------------------------------- void __thiscall sub_940E80(volatile LONG *this, int a2) { _DWORD *v2; // esi void *v3; // eax v2 = *(_DWORD **)(a2 + 40); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 40)); v3 = (void *)v2[9]; if ( v3 ) memset(v3, 0, 4 * v2[7]); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 40) = 0; } } //----- (00940ED0) -------------------------------------------------------- void __thiscall sub_940ED0(volatile LONG *this, int a2) { volatile LONG *v2; // edi _DWORD *v3; // eax v2 = this; if ( !*(_DWORD *)(a2 + 28) ) { v3 = operator new(0x50u); if ( v3 ) { *v3 = 0; v3[1] = 0; v3[2] = 0; v3[3] = 0; *((_BYTE *)v3 + 16) = 0; v3[5] = 0; v3[6] = 0; v3[7] = 0; v3[8] = 0; v3[9] = 0; v3[10] = 0; v3[11] = 0; v3[12] = 0; v3[13] = 0; v3[14] = 4; v3[15] = 0; v3[16] = 0; v3[17] = 0; v3[18] = 0; v3[19] = 0; } else { v3 = 0; } v3[14] = 4; *(_DWORD *)(a2 + 28) = v3; *v3 = 20971520; sub_943500(v2, (int)v3); *(_WORD *)(a2 + 24) = -1; } } //----- (00940F60) -------------------------------------------------------- void __thiscall sub_940F60(volatile LONG *this, int a2) { _DWORD *v2; // esi void *v3; // eax v2 = *(_DWORD **)(a2 + 28); if ( v2 ) { sub_943520(this, *(_DWORD **)(a2 + 28)); v3 = (void *)v2[9]; if ( v3 ) memset(v3, 0, 4 * v2[7]); sub_9368F0(v2); operator delete(v2); *(_DWORD *)(a2 + 28) = 0; } } //----- (00940FB0) -------------------------------------------------------- int __stdcall sub_940FB0(int a1, unsigned int a2) { int result; // eax int v3; // esi int v4; // ecx if ( a2 < *(_DWORD *)(a1 + 28) ) { result = *(_DWORD *)(a1 + 36); v3 = *(_DWORD *)(result + 4 * a2); if ( v3 ) { result = *(_DWORD *)(v3 + 8); if ( result ) { v4 = *(_DWORD *)(v3 + 4); result = nullsub_32(*(_DWORD *)(v3 + 8)); *(_DWORD *)(v3 + 8) = 0; } if ( a2 < *(_DWORD *)(a1 + 28) ) *(_DWORD *)(*(_DWORD *)(a1 + 36) + 4 * a2) = 0; } } return result; } // 6D1A20: using guessed type _DWORD __stdcall nullsub_32(_DWORD); //----- (00941000) -------------------------------------------------------- _DWORD *__cdecl sub_941000(unsigned int a1, int a2, int a3, int a4) { _DWORD *v4; // esi unsigned int v5; // eax int v6; // eax v4 = operator new(0x18u); if ( !v4 ) return 0; v5 = a1; *v4 = 0; v4[1] = 0; v4[2] = 0; v4[3] = 0; v4[4] = 0; if ( a1 & 0xF ) v5 = (a1 & 0xFFFFFFF0) + 32; v4[2] = v5; v6 = v4[3]; if ( v6 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v6 + 8))(v4[3]); if ( a2 ) { v4[3] = a2; (*(void (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); } else { v4[3] = 0; } v4[1] = a3; *v4 = a4; return v4; } //----- (00941090) -------------------------------------------------------- void **__thiscall sub_941090(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47BA8: using guessed type void *NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; //----- (009410D0) -------------------------------------------------------- void **__thiscall sub_9410D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47BA8: using guessed type void *NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; // A47BF0: using guessed type void *NiTPointerMap::`vftable'; //----- (00941110) -------------------------------------------------------- void **__thiscall sub_941110(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,unsigned int,NiVBChip *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47BC8: using guessed type void *NiTMapBase,unsigned int,NiVBChip *>::`vftable'; //----- (00941150) -------------------------------------------------------- void **__thiscall sub_941150(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,unsigned int,NiVBChip *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A47BC8: using guessed type void *NiTMapBase,unsigned int,NiVBChip *>::`vftable'; // A47C10: using guessed type void *NiTPointerMap::`vftable'; //----- (00941190) -------------------------------------------------------- int __thiscall sub_941190(_DWORD *this) { _DWORD *v1; // ebx unsigned int v2; // ecx unsigned int v3; // eax _DWORD *v4; // edx _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax int v8; // edi int v9; // eax unsigned int v10; // edx unsigned int v11; // eax _DWORD *v12; // ecx int v13; // eax int v14; // eax unsigned int v15; // edx unsigned int v16; // eax _DWORD *v17; // ecx _DWORD *v18; // eax _DWORD *v19; // esi int v20; // ebx _DWORD *v21; // edi int v22; // eax unsigned int v23; // edx unsigned int v24; // eax _DWORD *v25; // ecx unsigned int v26; // esi int v27; // edx _DWORD *v28; // edi int v29; // eax int v30; // eax int v31; // eax _DWORD *v32; // eax _DWORD **v33; // ecx int v34; // ecx void *v35; // ST04_4 void *v36; // ST00_4 _DWORD *v38; // [esp+8h] [ebp-8h] _DWORD *v39; // [esp+Ch] [ebp-4h] v1 = this; *this = &NiDynamicGeometryGroup::`vftable'; v2 = this[4]; v3 = 0; v39 = v1; if ( v2 ) { v4 = (_DWORD *)v1[5]; while ( !*v4 ) { ++v3; ++v4; if ( v3 >= v2 ) goto LABEL_5; } v5 = *(_DWORD **)(v1[5] + 4 * v3); } else { LABEL_5: v5 = 0; } v6 = v5; while ( v6 ) { v7 = (_DWORD *)v6[2]; v8 = v6[1]; v6 = (_DWORD *)*v6; v38 = v7; if ( !v6 ) { v9 = (*(int (__thiscall **)(_DWORD *, int))(v1[3] + 4))(v1 + 3, v8); v10 = v1[4]; v11 = v9 + 1; if ( v11 >= v10 ) { LABEL_12: v6 = 0; } else { v12 = (_DWORD *)(v1[5] + 4 * v11); while ( 1 ) { v6 = (_DWORD *)*v12; if ( *v12 ) break; ++v11; ++v12; if ( v11 >= v10 ) goto LABEL_12; } } } sub_916F40(v1 + 3, v8); if ( v38 ) { v13 = v38[4]; if ( v13 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v13 + 8))(v38[4]); v14 = v38[3]; if ( v14 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v14 + 8))(v38[3]); operator delete(v38); } } v15 = v1[8]; v16 = 0; if ( v15 ) { v17 = (_DWORD *)v1[9]; while ( !*v17 ) { ++v16; ++v17; if ( v16 >= v15 ) goto LABEL_24; } v18 = *(_DWORD **)(v1[9] + 4 * v16); } else { LABEL_24: v18 = 0; } v19 = v18; if ( v18 ) { do { v20 = v19[1]; v21 = (_DWORD *)v19[2]; v19 = (_DWORD *)*v19; if ( !v19 ) { v22 = (*(int (__thiscall **)(_DWORD *, int))(v39[7] + 4))(v39 + 7, v20); v23 = v39[8]; v24 = v22 + 1; if ( v24 >= v23 ) { LABEL_31: v19 = 0; } else { v25 = (_DWORD *)(v39[9] + 4 * v24); while ( 1 ) { v19 = (_DWORD *)*v25; if ( *v25 ) break; ++v24; ++v25; if ( v24 >= v23 ) goto LABEL_31; } } } sub_916F40(v39 + 7, v20); v21[2] = 0; operator delete(v21); } while ( v19 ); v1 = v39; } v26 = 0; if ( v1[13] ) { do { if ( v26 < v1[14] ) { v27 = v1[12]; v28 = *(_DWORD **)(v27 + 4 * v26); *(_DWORD *)(v27 + 4 * v26) = 0; if ( v28 ) --v1[15]; v29 = v1[14] - 1; if ( v26 == v29 ) v1[14] = v29; if ( v28 ) { v30 = v28[4]; if ( v30 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v30 + 8))(v28[4]); v31 = v28[3]; if ( v31 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v31 + 8))(v28[3]); operator delete(v28); } } if ( v26 < v1[20] ) { v33 = (_DWORD **)(v1[18] + 4 * v26); v32 = *v33; *v33 = 0; if ( v32 ) --v1[21]; v34 = v1[20] - 1; if ( v26 == v34 ) v1[20] = v34; } else { v32 = 0; } v32[2] = 0; v32[2] = 0; operator delete(v32); ++v26; } while ( v26 < v1[13] ); } if ( v1 == (_DWORD *)dword_BA71CC ) dword_BA71CC = 0; v35 = (void *)v1[18]; v1[17] = &NiTArray::`vftable'; operator delete(v35); v36 = (void *)v1[12]; v1[11] = &NiTArray::`vftable'; operator delete(v36); v1[7] = &NiTPointerMap::`vftable'; sub_940360(v1 + 7); v1[7] = &NiTMapBase,unsigned int,NiVBChip *>::`vftable'; sub_940360(v1 + 7); operator delete((void *)v1[9]); v1[3] = &NiTPointerMap::`vftable'; sub_940360(v1 + 3); v1[3] = &NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; sub_940360(v1 + 3); operator delete((void *)v1[5]); return sub_9434E0(v1); } // A47B00: using guessed type void *NiTArray::`vftable'; // A47BA8: using guessed type void *NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; // A47BC8: using guessed type void *NiTMapBase,unsigned int,NiVBChip *>::`vftable'; // A47BE8: using guessed type void *NiTArray::`vftable'; // A47BF0: using guessed type void *NiTPointerMap::`vftable'; // A47C10: using guessed type void *NiTPointerMap::`vftable'; // A47C30: using guessed type void *NiDynamicGeometryGroup::`vftable'; // BA71CC: using guessed type int dword_BA71CC; //----- (00941440) -------------------------------------------------------- __int16 __thiscall sub_941440(volatile LONG *this, int a2, int a3, int a4) { __int16 result; // ax _DWORD *v5; // eax _DWORD *v6; // edi _DWORD *v7; // eax int v8; // eax signed int v9; // ecx volatile LONG *v10; // [esp+Ch] [ebp-4h] v10 = this; result = *(_WORD *)(a2 + 50) & 0xFFF | 0x8000; *(_WORD *)(a2 + 50) = result; if ( a4 ) { if ( *(_DWORD *)(a4 + 40) ) return result; v5 = operator new(0x50u); if ( v5 ) v6 = sub_940310(v5); else v6 = 0; v6[14] = (*(_WORD *)(a4 + 34) != 0) + 4; *(_DWORD *)(a4 + 40) = v6; } else { if ( *(_DWORD *)(a2 + 60) ) return result; v7 = operator new(0x50u); if ( v7 ) v6 = sub_940310(v7); else v6 = 0; v8 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); if ( v8 ) { while ( (char *)v8 != dword_BA4A70 ) { v8 = *(_DWORD *)(v8 + 4); if ( !v8 ) goto LABEL_14; } v6[14] = 4; } else { LABEL_14: if ( sub_402B70((int)dword_BA4AA4, a2) ) v6[14] = 5; } *(_DWORD *)(a2 + 60) = v6; } v9 = 0; if ( *(_DWORD *)(a2 + 40) ) v9 = 0x400000; if ( *(_DWORD *)(a2 + 36) != 0 ) v9 |= (unsigned int)sub_800000; *v6 = v9 | ((*(_WORD *)(a2 + 48) & 0x3F) << 24); result = sub_943500(v10, (int)v6); *(_WORD *)(a2 + 50) |= 0xFFFu; return result; } //----- (00941550) -------------------------------------------------------- _DWORD *__thiscall sub_941550(int *this, int a2, unsigned int a3) { int v3; // eax int *v4; // esi unsigned int v5; // edi int v6; // ecx int v7; // ebx _DWORD *v8; // ecx _DWORD *v9; // eax unsigned int v10; // ecx int v11; // eax _DWORD *v12; // edi unsigned int v13; // ST0C_4 _DWORD *result; // eax int v15; // edi _DWORD *v16; // esi _DWORD *v17; // [esp+Ch] [ebp-18h] int v18; // [esp+10h] [ebp-14h] int v19; // [esp+10h] [ebp-14h] unsigned int v20; // [esp+14h] [ebp-10h] int v21; // [esp+18h] [ebp-Ch] _DWORD *v22; // [esp+1Ch] [ebp-8h] _DWORD *v23; // [esp+20h] [ebp-4h] v3 = a2; v4 = this; v5 = *(_DWORD *)(a2 + 28); v18 = *(_DWORD *)(a2 + 8); v22 = 0; if ( a3 >= v5 ) { v20 = 0; v6 = 0; } else { v6 = *(_DWORD *)(*(_DWORD *)(a2 + 32) + 4 * a3); v20 = *(_DWORD *)(*(_DWORD *)(a2 + 32) + 4 * a3); } v7 = v6 * *(_DWORD *)(a2 + 24); a3 = 0; v21 = 0; if ( v5 <= 1 ) { v15 = v18; v23 = 0; if ( !v18 ) v15 = v6 | 0x80000000; if ( !sub_8C4C90(v4 + 3, v15, &v23) || !v23 ) { v23 = sub_941000(0x800u, v4[2], v18, 0); sub_815C70(v4 + 3, v15, (int)v23); } v19 = sub_9435B0(v23, v7, &a3, &v21, 0, *(_BYTE *)(a2 + 16)); v17 = v4 + 7; sub_8C4C90(v4 + 7, v15, &v22); v16 = v22; if ( v22 ) { v22[2] = v19; v16[3] = a3; v16[5] = v7; } else { v16 = sub_940A10((int)v22, v19, a3, v7, (int)v22); sub_815C70(v17, v15, (int)v16); } v16[1] = v23; v16[4] = v21; *(_DWORD *)(a2 + 52) = a3 / v20; result = v16; } else { if ( v4[13] < v5 ) { sub_8237A0(v4 + 11, v5); sub_8237A0(v4 + 17, v5); v3 = a2; } if ( v4[23] >= (unsigned int)v4[13] ) v4[23] = 0; v8 = *(_DWORD **)(v4[12] + 4 * v4[23]); v23 = v8; if ( !v8 ) { v9 = sub_941000(0x800u, v4[2], 0, 0); v10 = v4[23]; v23 = v9; sub_823870(v4 + 11, v10, &v23); v8 = v23; v3 = a2; } v11 = sub_9435B0(v8, v7, &a3, &v21, 1, *(_BYTE *)(v3 + 16)); v12 = *(_DWORD **)(v4[18] + 4 * v4[23]); if ( v12 ) { v12[2] = v11; v12[3] = a3; v12[5] = v7; } else { v12 = sub_940A10(0, v11, a3, v7, 0); v13 = v4[23]; v22 = v12; sub_823870(v4 + 17, v13, &v22); } v12[1] = v23; v12[4] = v21; result = v12; *(_DWORD *)(a2 + 52) = 0; ++v4[23]; } return result; } //----- (00941760) -------------------------------------------------------- volatile LONG *__thiscall sub_941760(volatile LONG *this) { volatile LONG *v1; // esi void *v2; // eax size_t v3; // ST18_4 void *v4; // eax size_t v5; // ST08_4 v1 = this; sub_9434C0(this); *v1 = (volatile LONG)&NiDynamicGeometryGroup::`vftable'; *((_DWORD *)v1 + 3) = &NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; *((_DWORD *)v1 + 4) = 37; *((_DWORD *)v1 + 6) = 0; v2 = operator new(0x94u); v3 = 4 * *((_DWORD *)v1 + 4); *((_DWORD *)v1 + 5) = v2; memset(v2, 0, v3); *((_DWORD *)v1 + 3) = &NiTPointerMap::`vftable'; *((_DWORD *)v1 + 7) = &NiTMapBase,unsigned int,NiVBChip *>::`vftable'; *((_DWORD *)v1 + 8) = 37; *((_DWORD *)v1 + 10) = 0; v4 = operator new(0x94u); v5 = 4 * *((_DWORD *)v1 + 8); *((_DWORD *)v1 + 9) = v4; memset(v4, 0, v5); *((_DWORD *)v1 + 7) = &NiTPointerMap::`vftable'; *((_DWORD *)v1 + 13) = 0; *((_DWORD *)v1 + 14) = 0; *((_DWORD *)v1 + 15) = 0; *((_DWORD *)v1 + 12) = 0; *((_DWORD *)v1 + 11) = &NiTArray::`vftable'; *((_DWORD *)v1 + 16) = 1; *((_DWORD *)v1 + 19) = 0; *((_DWORD *)v1 + 22) = 1; *((_DWORD *)v1 + 20) = 0; *((_DWORD *)v1 + 21) = 0; *((_DWORD *)v1 + 18) = 0; *((_DWORD *)v1 + 17) = &NiTArray::`vftable'; *((_DWORD *)v1 + 23) = 0; return v1; } // A47B00: using guessed type void *NiTArray::`vftable'; // A47BA8: using guessed type void *NiTMapBase,unsigned int,NiVBDynamicSet *>::`vftable'; // A47BC8: using guessed type void *NiTMapBase,unsigned int,NiVBChip *>::`vftable'; // A47BE8: using guessed type void *NiTArray::`vftable'; // A47BF0: using guessed type void *NiTPointerMap::`vftable'; // A47C10: using guessed type void *NiTPointerMap::`vftable'; // A47C30: using guessed type void *NiDynamicGeometryGroup::`vftable'; //----- (00941840) -------------------------------------------------------- void *__thiscall sub_941840(void *this, char a2) { void *v2; // esi v2 = this; sub_941190(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00941870) -------------------------------------------------------- volatile LONG *sub_941870() { volatile LONG *result; // eax volatile LONG *v1; // eax result = (volatile LONG *)dword_BA71CC; if ( !dword_BA71CC ) { v1 = (volatile LONG *)operator new(0x60u); if ( v1 ) { result = sub_941760(v1); dword_BA71CC = (int)result; } else { result = 0; dword_BA71CC = 0; } } return result; } // BA71CC: using guessed type int dword_BA71CC; //----- (009418A0) -------------------------------------------------------- char __stdcall sub_9418A0(int a1) { int v1; // esi int v2; // edi int v4; // eax int v5; // eax int v6; // [esp+Ch] [ebp-4h] v1 = a1; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 24))(a1); if ( !v2 ) return 0; v6 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 72))(v1); v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 56))(v1); v5 = sub_943680(v2, (int)&v6, v4, 0, 0, 0); if ( !v5 ) return 0; (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 68))(v1, v5); if ( D3DXGetShaderConstantTable(v2, &a1) >= 0 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 116))(v1, a1); if ( a1 ) (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 8))(a1); return 1; } // 94485C: using guessed type int __stdcall D3DXGetShaderConstantTable(_DWORD, _DWORD); //----- (00941940) -------------------------------------------------------- char __stdcall sub_941940(int a1) { int v1; // edi int v2; // eax int v3; // esi int v5; // eax v1 = a1; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 24))(a1); v3 = v2; if ( !v2 ) return 0; v5 = sub_9436C0(v2); if ( !v5 ) return 0; (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 60))(v1, v5); if ( D3DXGetShaderConstantTable(v3, &a1) >= 0 ) (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 92))(v1, a1); if ( a1 ) (*(void (__stdcall **)(int))(*(_DWORD *)a1 + 8))(a1); return 1; } // 94485C: using guessed type int __stdcall D3DXGetShaderConstantTable(_DWORD, _DWORD); //----- (009419B0) -------------------------------------------------------- void __thiscall sub_9419B0(void **this, char *Src) { char *v2; // edi void **v3; // ebx unsigned int v4; // kr00_4 void *v5; // ecx size_t v6; // esi v2 = Src; v3 = this; if ( !Src || !strcmp(Src, &byte_9A8050) ) { operator delete(v3[2]); v3[2] = 0; } else { v4 = strlen(Src); v5 = v3[2]; v6 = v4 + 1; if ( v5 ) { if ( strlen((const char *)v5) < v6 ) { operator delete(v5); v3[2] = 0; } v2 = Src; } if ( !v3[2] ) v3[2] = operator new(v6); strcpy_s((char *)v3[2], v6, v2); } } //----- (00941A80) -------------------------------------------------------- void __thiscall sub_941A80(void **this, char *Src) { char *v2; // edi void **v3; // ebx unsigned int v4; // kr00_4 void *v5; // ecx size_t v6; // esi v2 = Src; v3 = this; if ( !Src || !strcmp(Src, &byte_9A8050) ) { operator delete(v3[3]); v3[3] = 0; } else { v4 = strlen(Src); v5 = v3[3]; v6 = v4 + 1; if ( v5 ) { if ( strlen((const char *)v5) < v6 ) { operator delete(v5); v3[3] = 0; } v2 = Src; } if ( !v3[3] ) v3[3] = operator new(v6); strcpy_s((char *)v3[3], v6, v2); } } //----- (00941B50) -------------------------------------------------------- int __thiscall sub_941B50(_DWORD *this, int a2, int a3) { int result; // eax result = a2; this[4] = a2; this[5] = a3; return result; } //----- (00941B70) -------------------------------------------------------- void *__thiscall sub_941B70(void *this, char a2) { void *v2; // esi v2 = this; sub_943880(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00941BA0) -------------------------------------------------------- int __thiscall sub_941BA0(_DWORD *this) { return this[10]; } //----- (00941BB0) -------------------------------------------------------- int __thiscall sub_941BB0(_DWORD *this, int a2) { int result; // eax result = a2; this[10] = a2; return result; } //----- (00941BC0) -------------------------------------------------------- void *__thiscall sub_941BC0(void *this, char a2) { void *v2; // esi v2 = this; sub_943B70(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00941BF0) -------------------------------------------------------- int __thiscall sub_941BF0(_DWORD *this) { return this[11]; } //----- (00941C00) -------------------------------------------------------- int __thiscall sub_941C00(_DWORD *this, int a2) { int result; // eax result = a2; this[11] = a2; return result; } //----- (00941C10) -------------------------------------------------------- int __thiscall sub_941C10(_DWORD *this, int a2) { int result; // eax result = a2; this[12] = a2; return result; } //----- (00941C30) -------------------------------------------------------- char __thiscall sub_941C30(_BYTE *this, char a2) { char result; // al result = a2; this[40] = a2; return result; } //----- (00941C40) -------------------------------------------------------- void *__thiscall sub_941C40(void *this, char a2) { void *v2; // esi v2 = this; sub_943E40(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00941C70) -------------------------------------------------------- void __thiscall sub_941C70(_DWORD *this, char *Src) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // kr00_4 char *v5; // edi _DWORD *v6; // [esp+8h] [ebp-4h] v2 = this; v3 = (char *)this[11]; v6 = this; if ( v3 != Src ) { operator delete(v3); if ( Src && *Src ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); strcpy_s(v5, v4 + 1, Src); v6[11] = v5; } else { v2[11] = 0; } } } //----- (00941CE0) -------------------------------------------------------- void __thiscall sub_941CE0(_DWORD *this, char *Src) { char *v2; // eax unsigned int v3; // kr00_4 char *v4; // edi _DWORD *v5; // [esp+4h] [ebp-4h] v2 = (char *)this[12]; v5 = this; if ( v2 != Src ) { operator delete(v2); if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); strcpy_s(v4, v3 + 1, Src); v5[12] = v4; } } } } //----- (00941D40) -------------------------------------------------------- int __thiscall sub_941D40(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; result = this[13]; if ( result != a2 ) { if ( result ) result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[13] = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); } return result; } //----- (00941D80) -------------------------------------------------------- void *__thiscall sub_941D80(void *this, char a2) { void *v2; // esi v2 = this; sub_9442C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00941DB0) -------------------------------------------------------- int __thiscall sub_941DB0(_DWORD *this) { return this[14]; } //----- (00941DC0) -------------------------------------------------------- void __thiscall sub_941DC0(_DWORD *this, char *Src) { _DWORD *v2; // esi char *v3; // eax unsigned int v4; // kr00_4 char *v5; // edi _DWORD *v6; // [esp+8h] [ebp-4h] v2 = this; v3 = (char *)this[14]; v6 = this; if ( v3 != Src ) { operator delete(v3); if ( Src && *Src ) { v4 = strlen(Src); v5 = (char *)operator new(v4 + 1); strcpy_s(v5, v4 + 1, Src); v6[14] = v5; } else { v2[14] = 0; } } } //----- (00941E30) -------------------------------------------------------- void __thiscall sub_941E30(_DWORD *this, char *Src) { char *v2; // eax unsigned int v3; // kr00_4 char *v4; // edi _DWORD *v5; // [esp+4h] [ebp-4h] v2 = (char *)this[15]; v5 = this; if ( v2 != Src ) { operator delete(v2); if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); strcpy_s(v4, v3 + 1, Src); v5[15] = v4; } } } } //----- (00941E90) -------------------------------------------------------- int __thiscall sub_941E90(_DWORD *this, int a2) { _DWORD *v2; // edi int result; // eax v2 = this; result = this[16]; if ( result != a2 ) { if ( result ) result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[16] = a2; if ( a2 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)a2 + 4))(a2); } return result; } //----- (00941ED0) -------------------------------------------------------- char __thiscall sub_941ED0(_DWORD *this, char *ArgList, int a3, int a4, void **a5, rsize_t *a6, int a7) { char *v7; // esi size_t v8; // edi size_t v9; // eax rsize_t v10; // edi const void *v11; // eax _DWORD *v13; // [esp+Ch] [ebp-120h] char *Src; // [esp+14h] [ebp-118h] int v15; // [esp+1Ch] [ebp-110h] int v16; // [esp+20h] [ebp-10Ch] char v17; // [esp+24h] [ebp-108h] v13 = this; *a5 = 0; *a6 = 0; if ( !ArgList || !*ArgList ) { sub_863460(1, 0, "Invalid shader file name\n"); return 0; } if ( !sub_917190(ArgList, &v17, 0x104u) ) { sub_863460(1, 0, "Failed to find shader program file %s\n", ArgList); return 0; } if ( D3DXCompileShaderFromFileA(&v17, 0, 0, a3, a4, dword_BA6FC8 | v13[1], &v15, &v16, a7) < 0 ) { v7 = 0; if ( v16 ) { Src = (char *)(*(int (__stdcall **)(int))(*(_DWORD *)v16 + 12))(v16); if ( Src ) { v8 = (*(int (__stdcall **)(int))(*(_DWORD *)v16 + 16))(v16); v7 = (char *)operator new(v8); strcpy_s(v7, v8, Src); sub_863460(1, 0, "Failed to compile shader %s in file %s\nError: %s\n", a3, ArgList, v7); } (*(void (__stdcall **)(int))(*(_DWORD *)v16 + 8))(v16); } else { sub_863460(1, 0, "Failed to compile shader %s in file %s\nError: NONE REPORTED\n", a3, ArgList); } operator delete(v7); if ( v15 ) (*(void (__stdcall **)(int))(*(_DWORD *)v15 + 8))(v15); return 0; } v9 = (*(int (__stdcall **)(int))(*(_DWORD *)v15 + 16))(v15); *a6 = v9; *a5 = operator new(v9); v10 = *a6; v11 = (const void *)(*(int (__stdcall **)(int))(*(_DWORD *)v15 + 12))(v15); memcpy_s(*a5, v10, v11, v10); (*(void (__stdcall **)(int))(*(_DWORD *)v15 + 8))(v15); if ( v16 ) (*(void (__stdcall **)(int))(*(_DWORD *)v16 + 8))(v16); return 1; } // 944862: using guessed type int __stdcall D3DXCompileShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA6FC8: using guessed type int dword_BA6FC8; //----- (009420F0) -------------------------------------------------------- char __userpurge sub_9420F0@(int a1@, int a2@, int a3, int a4, int ArgList, int a6, void **a7, rsize_t *a8, int a9) { rsize_t *v9; // esi void **v10; // edi char *v11; // esi const char *v12; // ebx size_t v13; // edi char result; // al size_t v15; // eax rsize_t v16; // esi const void *v17; // eax v9 = a8; v10 = a7; *a7 = 0; *v9 = 0; if ( a3 && a4 ) { if ( D3DXCompileShader(a3, a4, 0, 0, ArgList, a6, dword_BA6FC8 | *(_DWORD *)(a1 + 4), &a7, &a8, a9) >= 0 ) { v15 = (*((int (__stdcall **)(void **))*a7 + 4))(a7); *v9 = v15; *v10 = operator new(v15); v16 = *v9; v17 = (const void *)(*((int (__stdcall **)(void **))*a7 + 3))(a7); memcpy_s(*v10, v16, v17, v16); (*((void (__stdcall **)(void **))*a7 + 2))(a7); if ( a8 ) (*(void (__stdcall **)(rsize_t *))(*a8 + 8))(a8); result = 1; } else { v11 = 0; if ( a8 ) { v12 = (const char *)(*(int (__stdcall **)(rsize_t *, int))(*a8 + 12))(a8, a2); if ( v12 ) { v13 = (*(int (__stdcall **)(rsize_t *))(*a8 + 16))(a8); v11 = (char *)operator new(v13); strcpy_s(v11, v13, v12); sub_863460(1, 0, "Failed to assemble shader %s from memory\nError: %s\n", ArgList, v11); } (*(void (__cdecl **)(rsize_t *))(*a8 + 8))(a8); } else { sub_863460(1, 0, "Failed to assemble shader %s from memory\nError: NONE REPORTED\n", ArgList); } operator delete(v11); if ( a7 ) (*((void (__stdcall **)(void **))*a7 + 2))(a7); result = 0; } } else { sub_863460(1, 0, "Invalid shader buffer\n"); result = 0; } return result; } // 9420F0: could not find valid save-restore pair for ebx // 944868: using guessed type int __stdcall D3DXCompileShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA6FC8: using guessed type int dword_BA6FC8; //----- (00942250) -------------------------------------------------------- _BYTE *__thiscall sub_942250(_DWORD *this, int a2, int ArgList, int a4, int a5, char a6, int a7, int a8) { _DWORD *v8; // ebx _BYTE *v9; // esi _BYTE *result; // eax int v11; // edi int v12; // [esp+Ch] [ebp-Ch] int v13; // [esp+10h] [ebp-8h] int v14; // [esp+14h] [ebp-4h] v8 = this; v9 = operator new(0x44u); if ( !v9 ) return 0; sub_943780(v9, dword_BA6FD0); v9[40] = 0; *((_DWORD *)v9 + 11) = 0; *((_DWORD *)v9 + 12) = 0; *((_DWORD *)v9 + 13) = 0; *(_DWORD *)v9 = &NiD3DHLSLVertexShader::`vftable'; *((_DWORD *)v9 + 14) = 0; *((_DWORD *)v9 + 15) = 0; *((_DWORD *)v9 + 16) = 0; v12 = 0; v14 = 0; v13 = 0; if ( !a4 ) a4 = (int)"main"; if ( !a5 ) a5 = D3DXGetVertexShaderProfile(dword_BA6FCC); if ( !sub_941ED0(v8, (char *)a2, a4, a5, (void **)&v14, (rsize_t *)&v12, (int)&v13) ) { (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1); return 0; } v11 = sub_943680(v14, (int)&a6, a7, 0, 0, a8); if ( v11 ) { (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 8))(v9, ArgList); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 16))(v9, a2); (*(void (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v9 + 28))(v9, v12, v14); (*(void (__thiscall **)(_BYTE *, _DWORD *))(*(_DWORD *)v9 + 36))(v9, v8); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 68))(v9, v11); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 60))(v9, a7); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 84))(v9, a8); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 100))(v9, a4); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 108))(v9, a5); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 116))(v9, v13); if ( v13 ) (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 8))(v13); result = v9; } else { sub_863460(1, 0, "Failed CreateVertexShader call on %s\n", ArgList); (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1); result = 0; } return result; } // 94486E: using guessed type int __stdcall D3DXGetVertexShaderProfile(_DWORD); // A47D7C: using guessed type void *NiD3DHLSLVertexShader::`vftable'; // BA6FCC: using guessed type int dword_BA6FCC; // BA6FD0: using guessed type int dword_BA6FD0; //----- (009423E0) -------------------------------------------------------- _BYTE *__thiscall sub_9423E0(void *this, int a2, int a3, int ArgList, int a5, int a6, char a7, int a8, int a9) { int v9; // ebx _BYTE *v10; // esi _BYTE *result; // eax int v12; // edi int v13; // [esp+Ch] [ebp-Ch] int v14; // [esp+10h] [ebp-8h] int v15; // [esp+14h] [ebp-4h] v9 = (int)this; v10 = operator new(0x44u); if ( !v10 ) return 0; sub_943780(v10, dword_BA6FD0); v10[40] = 0; *((_DWORD *)v10 + 11) = 0; *((_DWORD *)v10 + 12) = 0; *((_DWORD *)v10 + 13) = 0; *(_DWORD *)v10 = &NiD3DHLSLVertexShader::`vftable'; *((_DWORD *)v10 + 14) = 0; *((_DWORD *)v10 + 15) = 0; *((_DWORD *)v10 + 16) = 0; v13 = 0; v15 = 0; v14 = 0; if ( !a5 ) a5 = (int)"main"; if ( !a6 ) a6 = D3DXGetVertexShaderProfile(dword_BA6FCC); if ( !sub_9420F0(v9, v9, a2, a3, a5, a6, (void **)&v15, (rsize_t *)&v13, (int)&v14) ) { (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1); return 0; } v12 = sub_943680(v15, (int)&a7, a8, 0, 0, a9); if ( v12 ) { (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 8))(v10, ArgList); (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v10 + 16))(v10, 0); (*(void (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v10 + 28))(v10, v13, v15); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 36))(v10, v9); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 68))(v10, v12); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 60))(v10, a8); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 84))(v10, a9); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 100))(v10, a5); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 108))(v10, a6); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 116))(v10, v14); if ( v14 ) (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 8))(v14); result = v10; } else { sub_863460(1, 0, "Failed CreateVertexShader call on %s\n", ArgList); (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1); result = 0; } return result; } // 94486E: using guessed type int __stdcall D3DXGetVertexShaderProfile(_DWORD); // A47D7C: using guessed type void *NiD3DHLSLVertexShader::`vftable'; // BA6FCC: using guessed type int dword_BA6FCC; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942570) -------------------------------------------------------- _DWORD *__thiscall sub_942570(_DWORD *this, int a2, int ArgList, int a4, int a5) { _DWORD *v5; // ebx _DWORD *v6; // esi _DWORD *result; // eax int v8; // edi int v9; // [esp+Ch] [ebp-Ch] int v10; // [esp+10h] [ebp-8h] int v11; // [esp+14h] [ebp-4h] v5 = this; v6 = operator new(0x38u); if ( !v6 ) return 0; sub_943780(v6, dword_BA6FD0); v6[10] = 0; *v6 = &NiD3DHLSLPixelShader::`vftable'; v6[11] = 0; v6[12] = 0; v6[13] = 0; v9 = 0; v11 = 0; v10 = 0; if ( !a4 ) a4 = (int)"main"; if ( !a5 ) a5 = D3DXGetPixelShaderProfile(dword_BA6FCC); if ( !sub_941ED0(v5, (char *)a2, a4, a5, (void **)&v11, (rsize_t *)&v9, (int)&v10) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return 0; } v8 = sub_9436C0(v11); if ( v8 ) { (*(void (__thiscall **)(_DWORD *, int))(*v6 + 8))(v6, ArgList); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 16))(v6, a2); (*(void (__thiscall **)(_DWORD *, int, int))(*v6 + 28))(v6, v9, v11); (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v6 + 36))(v6, v5); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 60))(v6, v8); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 76))(v6, a4); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 84))(v6, a5); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 92))(v6, v10); if ( v10 ) (*(void (__stdcall **)(int))(*(_DWORD *)v10 + 8))(v10); result = v6; } else { sub_863460(1, 0, "Failed CreatePixelShader call on %s\n", ArgList); (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); result = 0; } return result; } // 944874: using guessed type int __stdcall D3DXGetPixelShaderProfile(_DWORD); // A47D14: using guessed type void *NiD3DHLSLPixelShader::`vftable'; // BA6FCC: using guessed type int dword_BA6FCC; // BA6FD0: using guessed type int dword_BA6FD0; //----- (009426D0) -------------------------------------------------------- _DWORD *__thiscall sub_9426D0(void *this, int a2, int a3, int ArgList, int a5, int a6) { int v6; // ebx _DWORD *v7; // esi _DWORD *result; // eax int v9; // edi int v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] int v12; // [esp+14h] [ebp-4h] v6 = (int)this; v7 = operator new(0x38u); if ( !v7 ) return 0; sub_943780(v7, dword_BA6FD0); v7[10] = 0; *v7 = &NiD3DHLSLPixelShader::`vftable'; v7[11] = 0; v7[12] = 0; v7[13] = 0; v10 = 0; v12 = 0; v11 = 0; if ( !a5 ) a5 = (int)"main"; if ( !a6 ) a6 = D3DXGetPixelShaderProfile(dword_BA6FCC); if ( !sub_9420F0(v6, v6, a2, a3, a5, a6, (void **)&v12, (rsize_t *)&v10, (int)&v11) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); return 0; } v9 = sub_9436C0(v12); if ( v9 ) { (*(void (__thiscall **)(_DWORD *, int))(*v7 + 8))(v7, ArgList); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v7 + 16))(v7, 0); (*(void (__thiscall **)(_DWORD *, int, int))(*v7 + 28))(v7, v10, v12); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 36))(v7, v6); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 60))(v7, v9); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 76))(v7, a5); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 84))(v7, a6); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 92))(v7, v11); if ( v11 ) (*(void (__stdcall **)(int))(*(_DWORD *)v11 + 8))(v11); result = v7; } else { sub_863460(1, 0, "Failed CreatePixelShader call on %s\n", ArgList); (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); result = 0; } return result; } // 944874: using guessed type int __stdcall D3DXGetPixelShaderProfile(_DWORD); // A47D14: using guessed type void *NiD3DHLSLPixelShader::`vftable'; // BA6FCC: using guessed type int dword_BA6FCC; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942830) -------------------------------------------------------- char __stdcall sub_942830(int a1) { int v1; // esi int v2; // edi int v4; // eax int v5; // eax v1 = a1; v2 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 24))(a1); if ( !v2 ) return 0; a1 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 72))(v1); v4 = (*(int (__thiscall **)(int))(*(_DWORD *)v1 + 56))(v1); v5 = sub_943680(v2, (int)&a1, v4, 0, 0, 0); if ( !v5 ) return 0; (*(void (__thiscall **)(int, int))(*(_DWORD *)v1 + 68))(v1, v5); return 1; } //----- (009428A0) -------------------------------------------------------- char __stdcall sub_9428A0(int a1) { int v1; // eax int v3; // eax v1 = (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 24))(a1); if ( !v1 ) return 0; v3 = sub_9436C0(v1); if ( !v3 ) return 0; (*(void (__thiscall **)(int, int))(*(_DWORD *)a1 + 60))(a1, v3); return 1; } //----- (009428E0) -------------------------------------------------------- _BYTE *__thiscall sub_9428E0(void *this, int a2, int ArgList, int a4, int a5, int a6, int a7, int a8) { void *v8; // edi _BYTE *v9; // esi unsigned __int8 (__thiscall *v10)(void *, int, int *, int *, int *, int *); // edx _BYTE *result; // eax int v12; // ebx int v13; // [esp+Ch] [ebp-10h] int v14; // [esp+10h] [ebp-Ch] int v15; // [esp+14h] [ebp-8h] int v16; // [esp+18h] [ebp-4h] v8 = this; v9 = operator new(0x38u); if ( !v9 ) return 0; sub_943780(v9, dword_BA6FD0); *(_DWORD *)v9 = &NiD3DVertexShader::`vftable'; v9[40] = 0; *((_DWORD *)v9 + 11) = 0; *((_DWORD *)v9 + 12) = 0; *((_DWORD *)v9 + 13) = 0; v10 = *(unsigned __int8 (__thiscall **)(void *, int, int *, int *, int *, int *))(*(_DWORD *)v8 + 36); v13 = 0; v16 = 0; v15 = 0; v14 = 0; if ( !v10(v8, a2, &v16, &v13, &v14, &v15) ) { (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1); return 0; } v12 = sub_943680(v16, (int)&a6, a7, v14, v15, a8); if ( v12 ) { (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 8))(v9, ArgList); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 16))(v9, a2); (*(void (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v9 + 28))(v9, v13, v16); (*(void (__thiscall **)(_BYTE *, void *))(*(_DWORD *)v9 + 36))(v9, v8); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 68))(v9, v12); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 60))(v9, a7); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 76))(v9, a6); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v9 + 84))(v9, a8); result = v9; } else { sub_863460(1, 0, "Failed CreateVertexShader call on %s\n", ArgList); (**(void (__thiscall ***)(void *, signed int))v9)(v9, 1); result = 0; } return result; } // A47CAC: using guessed type void *NiD3DVertexShader::`vftable'; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942A20) -------------------------------------------------------- _BYTE *__thiscall sub_942A20(void *this, int a2, int a3, int ArgList, int a5, int a6, int a7, int a8, int a9) { void *v9; // edi _BYTE *v10; // esi unsigned __int8 (__thiscall *v11)(void *, int, int, int *, int *, int *, int *); // edx _BYTE *result; // eax int v13; // ebx int v14; // [esp+Ch] [ebp-10h] int v15; // [esp+10h] [ebp-Ch] int v16; // [esp+14h] [ebp-8h] int v17; // [esp+18h] [ebp-4h] v9 = this; v10 = operator new(0x38u); if ( !v10 ) return 0; sub_943780(v10, dword_BA6FD0); *(_DWORD *)v10 = &NiD3DVertexShader::`vftable'; v10[40] = 0; *((_DWORD *)v10 + 11) = 0; *((_DWORD *)v10 + 12) = 0; *((_DWORD *)v10 + 13) = 0; v11 = *(unsigned __int8 (__thiscall **)(void *, int, int, int *, int *, int *, int *))(*(_DWORD *)v9 + 40); v14 = 0; v17 = 0; v16 = 0; v15 = 0; if ( !v11(v9, a2, a3, &v17, &v14, &v15, &v16) ) { (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1); return 0; } v13 = sub_943680(v17, (int)&a7, a8, v15, v16, a9); if ( v13 ) { (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 8))(v10, ArgList); (*(void (__thiscall **)(_BYTE *, _DWORD))(*(_DWORD *)v10 + 16))(v10, 0); (*(void (__thiscall **)(_BYTE *, int, int))(*(_DWORD *)v10 + 28))(v10, v14, v17); (*(void (__thiscall **)(_BYTE *, void *))(*(_DWORD *)v10 + 36))(v10, v9); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 68))(v10, v13); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 60))(v10, a8); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 76))(v10, a7); (*(void (__thiscall **)(_BYTE *, int))(*(_DWORD *)v10 + 84))(v10, a9); result = v10; } else { sub_863460(1, 0, "Failed CreateVertexShader call on %s\n", ArgList); (**(void (__thiscall ***)(void *, signed int))v10)(v10, 1); result = 0; } return result; } // A47CAC: using guessed type void *NiD3DVertexShader::`vftable'; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942B60) -------------------------------------------------------- _DWORD *__thiscall sub_942B60(void *this, int a2, int ArgList, int a4, int a5) { void *v5; // edi _DWORD *v6; // esi unsigned __int8 (__thiscall *v7)(void *, int, int *, int *, int *, int *); // edx _DWORD *result; // eax int v9; // ebx int v10; // [esp+Ch] [ebp-10h] int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] int v13; // [esp+18h] [ebp-4h] v5 = this; v6 = operator new(0x2Cu); if ( !v6 ) return 0; sub_943780(v6, dword_BA6FD0); *v6 = &NiD3DPixelShader::`vftable'; v6[10] = 0; v7 = *(unsigned __int8 (__thiscall **)(void *, int, int *, int *, int *, int *))(*(_DWORD *)v5 + 36); v12 = 0; v13 = 0; v11 = 0; v10 = 0; if ( !v7(v5, a2, &v13, &v12, &v10, &v11) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); return 0; } v9 = sub_9436C0(v13); if ( v9 ) { (*(void (__thiscall **)(_DWORD *, int))(*v6 + 8))(v6, ArgList); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 16))(v6, a2); (*(void (__thiscall **)(_DWORD *, int, int))(*v6 + 28))(v6, v12, v13); (*(void (__thiscall **)(_DWORD *, void *))(*v6 + 36))(v6, v5); (*(void (__thiscall **)(_DWORD *, int))(*v6 + 60))(v6, v9); result = v6; } else { sub_863460(1, 0, "Failed CreatePixelShader call on %s\n", ArgList); (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); result = 0; } return result; } // A47C5C: using guessed type void *NiD3DPixelShader::`vftable'; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942C60) -------------------------------------------------------- _DWORD *__thiscall sub_942C60(void *this, int a2, int a3, int ArgList, int a5, int a6) { void *v6; // edi _DWORD *v7; // esi unsigned __int8 (__thiscall *v8)(void *, int, int, int *, int *, int *, int *); // edx _DWORD *result; // eax int v10; // ebx int v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] v6 = this; v7 = operator new(0x2Cu); if ( !v7 ) return 0; sub_943780(v7, dword_BA6FD0); *v7 = &NiD3DPixelShader::`vftable'; v7[10] = 0; v8 = *(unsigned __int8 (__thiscall **)(void *, int, int, int *, int *, int *, int *))(*(_DWORD *)v6 + 40); v13 = 0; v14 = 0; v12 = 0; v11 = 0; if ( !v8(v6, a2, a3, &v14, &v13, &v11, &v12) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); return 0; } v10 = sub_9436C0(v14); if ( v10 ) { (*(void (__thiscall **)(_DWORD *, int))(*v7 + 8))(v7, ArgList); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v7 + 16))(v7, 0); (*(void (__thiscall **)(_DWORD *, int, int))(*v7 + 28))(v7, v13, v14); (*(void (__thiscall **)(_DWORD *, void *))(*v7 + 36))(v7, v6); (*(void (__thiscall **)(_DWORD *, int))(*v7 + 60))(v7, v10); result = v7; } else { sub_863460(1, 0, "Failed CreatePixelShader call on %s\n", ArgList); (*(void (__thiscall **)(_DWORD *, signed int))*v7)(v7, 1); result = 0; } return result; } // A47C5C: using guessed type void *NiD3DPixelShader::`vftable'; // BA6FD0: using guessed type int dword_BA6FD0; //----- (00942D60) -------------------------------------------------------- char __thiscall sub_942D60(char *this, char *ArgList, void **a3, rsize_t *a4, _DWORD *a5, _DWORD *a6) { char *v6; // esi size_t v7; // edi size_t v8; // eax rsize_t v9; // edi const void *v10; // eax char *Src; // [esp+Ch] [ebp-114h] char *Srca; // [esp+Ch] [ebp-114h] int v14; // [esp+10h] [ebp-110h] int v15; // [esp+14h] [ebp-10Ch] char v16; // [esp+18h] [ebp-108h] *a3 = 0; Src = this; *a4 = 0; *a5 = 0; *a6 = 0; if ( !ArgList || !*ArgList ) { sub_863460(1, 0, "Invalid shader file name\n"); return 0; } if ( !sub_917190(ArgList, &v16, 0x104u) ) { sub_863460(1, 0, "Failed to find shader program file %s\n", ArgList); return 0; } if ( D3DXAssembleShaderFromFileA( &v16, 0, 0, ((unsigned __int8)dword_BA6FC8 | (unsigned __int8)*((_DWORD *)Src + 1)) & 3, &v14, &v15) < 0 ) { v6 = 0; if ( v15 ) { Srca = (char *)(*(int (__stdcall **)(int))(*(_DWORD *)v15 + 12))(v15); if ( Srca ) { v7 = (*(int (__stdcall **)(int))(*(_DWORD *)v15 + 16))(v15); v6 = (char *)operator new(v7); strcpy_s(v6, v7, Srca); sub_863460(1, 0, "Failed to assemble shader %s\nError: %s\n", ArgList, v6); } (*(void (__stdcall **)(int))(*(_DWORD *)v15 + 8))(v15); } else { sub_863460(1, 0, "Failed to assemble shader %s\nError: NONE REPORTED\n", ArgList); } operator delete(v6); if ( v14 ) (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 8))(v14); return 0; } v8 = (*(int (__stdcall **)(int))(*(_DWORD *)v14 + 16))(v14); *a4 = v8; *a3 = operator new(v8); v9 = *a4; v10 = (const void *)(*(int (__stdcall **)(int))(*(_DWORD *)v14 + 12))(v14); memcpy_s(*a3, v9, v10, v9); (*(void (__stdcall **)(int))(*(_DWORD *)v14 + 8))(v14); if ( v15 ) (*(void (__stdcall **)(int))(*(_DWORD *)v15 + 8))(v15); return 1; } // 94487A: using guessed type int __stdcall D3DXAssembleShaderFromFileA(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA6FC8: using guessed type int dword_BA6FC8; //----- (00942F50) -------------------------------------------------------- char __thiscall sub_942F50(_DWORD *this, int a2, int a3, void **a4, rsize_t *a5, _DWORD *a6, _DWORD *a7) { _DWORD *v7; // eax _DWORD *v8; // edx rsize_t *v9; // esi void **v10; // edi char *v11; // esi const char *v12; // ebx size_t v13; // edi size_t v15; // eax rsize_t v16; // esi const void *v17; // eax v7 = a6; v8 = a7; v9 = a5; v10 = a4; *a4 = 0; *v9 = 0; *v7 = 0; *v8 = 0; if ( !a2 || !a3 ) { sub_863460(1, 0, "Invalid shader buffer\n"); return 0; } if ( D3DXAssembleShader(a2, a3, 0, 0, ((unsigned __int8)dword_BA6FC8 | (unsigned __int8)this[1]) & 3, &a4, &a5) < 0 ) { v11 = 0; if ( a5 ) { v12 = (const char *)(*(int (__stdcall **)(rsize_t *))(*a5 + 12))(a5); if ( v12 ) { v13 = (*(int (__stdcall **)(rsize_t *))(*a5 + 16))(a5); v11 = (char *)operator new(v13); strcpy_s(v11, v13, v12); sub_863460(1, 0, "Failed to assemble shader from memory\nError: %s\n", v11); } (*(void (__stdcall **)(rsize_t *))(*a5 + 8))(a5); } else { sub_863460(1, 0, "Failed to assemble shader from memory\nError: NONE REPORTED\n"); } operator delete(v11); if ( a4 ) { (*((void (__stdcall **)(void **))*a4 + 2))(a4); return 0; } return 0; } v15 = (*((int (__stdcall **)(void **))*a4 + 4))(a4); *v9 = v15; *v10 = operator new(v15); v16 = *v9; v17 = (const void *)(*((int (__stdcall **)(void **))*a4 + 3))(a4); memcpy_s(*v10, v16, v17, v16); (*((void (__stdcall **)(void **))*a4 + 2))(a4); if ( a5 ) (*(void (__stdcall **)(rsize_t *))(*a5 + 8))(a5); return 1; } // 944880: using guessed type int __stdcall D3DXAssembleShader(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // BA6FC8: using guessed type int dword_BA6FC8; //----- (009430B0) -------------------------------------------------------- char __stdcall sub_9430B0(char *ArgList, _DWORD *a2, DWORD *a3, _DWORD *a4, _DWORD *a5) { char result; // al HANDLE v6; // eax void *v7; // ebx DWORD v8; // edi void *v9; // esi _DWORD *v10; // edx DWORD NumberOfBytesRead; // [esp+8h] [ebp-114h] _DWORD *v12; // [esp+Ch] [ebp-110h] DWORD *v13; // [esp+10h] [ebp-10Ch] CHAR FileName; // [esp+14h] [ebp-108h] *a2 = 0; *a3 = 0; *a4 = 0; v12 = a2; v13 = a3; *a5 = 0; if ( ArgList && *ArgList ) { if ( !sub_917190(ArgList, &FileName, 0x104u) ) { sub_863460(1, 0, "Failed to find shader program file %s\n", ArgList); return 0; } v6 = CreateFileA(&FileName, 0x80000000, 1u, 0, 3u, 0, 0); v7 = v6; if ( v6 == (HANDLE)-1 ) { sub_863460(1, 0, "Invalid shader file %s\n", &FileName); return 0; } v8 = GetFileSize(v6, 0); v9 = operator new(v8 + 4); if ( !v9 ) return 0; memset(v9, 0, v8 + 4); ReadFile(v7, v9, v8, &NumberOfBytesRead, 0); CloseHandle(v7); if ( NumberOfBytesRead != v8 ) { operator delete(v9); return 0; } v10 = v12; *v13 = v8; *v10 = v9; result = 1; } else { sub_863460(1, 0, "Invalid shader file name\n"); result = 0; } return result; } //----- (00943240) -------------------------------------------------------- char __stdcall sub_943240(void *Src, rsize_t DstSize, _DWORD *a3, rsize_t *a4, _DWORD *a5, _DWORD *a6) { void *v6; // eax char result; // al *a3 = 0; *a4 = 0; *a5 = 0; *a6 = 0; if ( Src && DstSize ) { v6 = operator new(DstSize); *a3 = v6; memcpy_s(v6, DstSize, Src, DstSize); *a4 = DstSize; result = 1; } else { sub_863460(1, 0, "Invalid shader buffer\n"); result = 0; } return result; } //----- (009432C0) -------------------------------------------------------- void __thiscall sub_9432C0(_DWORD *this) { void *v1; // ST00_4 v1 = (void *)this[12]; this[11] = &NiTArray::`vftable'; operator delete(v1); } // A47B00: using guessed type void *NiTArray::`vftable'; //----- (009432E0) -------------------------------------------------------- int __thiscall sub_9432E0(_DWORD *this, unsigned int a2) { int v2; // edx unsigned int v3; // ebx _DWORD *v4; // eax int v5; // esi int v6; // edi unsigned int v7; // edx int v8; // edx int v10; // [esp+8h] [ebp-4h] v2 = this[12]; v3 = a2; v4 = *(_DWORD **)(v2 + 4 * a2); v5 = 0; if ( v4 ) { v5 = v4[5]; v10 = v4[5]; if ( this[8] - v5 == v4[3] ) { this[8] = 0; if ( a2 ) { v6 = v2; do { if ( *(_DWORD *)v6 ) { v7 = *(_DWORD *)(*(_DWORD *)v6 + 12) + *(_DWORD *)(*(_DWORD *)v6 + 20); if ( v7 > this[8] ) this[8] = v7; } v6 += 4; --a2; } while ( a2 ); v5 = v10; } } v8 = this[3] - this[8]; this[10] += v5; this[9] = v8; if ( v3 < this[13] ) { if ( v3 < this[14] ) { if ( *(_DWORD *)(this[12] + 4 * v3) ) --this[15]; } else { this[14] = v3 + 1; } *(_DWORD *)(this[12] + 4 * v3) = 0; } v4[7] = 0; v4[6] = dword_BA71DC; if ( dword_BA71DC ) *((_DWORD *)dword_BA71DC + 7) = v4; dword_BA71DC = v4; } return v5; } //----- (009433A0) -------------------------------------------------------- void sub_9433A0() { unsigned int v0; // edi _DWORD *v1; // eax void *v2; // ecx v0 = 0; if ( dword_AC76BC ) { do { v1 = operator new(0x20u); if ( v1 ) { *v1 = 0; v1[1] = 0; v1[2] = 0; v1[3] = 0; v1[5] = 0; v1[4] = 0; v1[6] = 0; v1[7] = 0; } else { v1 = 0; } v2 = dword_BA71DC; if ( dword_BA71DC ) { *((_DWORD *)dword_BA71DC + 7) = v1; v2 = dword_BA71DC; } v1[6] = v2; v1[7] = 0; ++v0; dword_BA71DC = v1; } while ( v0 < dword_AC76BC ); } } // AC76BC: using guessed type int dword_AC76BC; //----- (00943410) -------------------------------------------------------- _DWORD *sub_943410() { _DWORD *result; // eax _DWORD *v1; // esi result = dword_BA71DC; if ( dword_BA71DC ) { do { v1 = (_DWORD *)result[6]; result[2] = 0; operator delete(result); result = v1; } while ( v1 ); } dword_BA71DC = 0; return result; } //----- (00943440) -------------------------------------------------------- unsigned int *__thiscall sub_943440(_DWORD *this, unsigned int *a2) { unsigned int *v2; // ebx _DWORD *v3; // esi unsigned int *v5; // edi _DWORD *v6; // ecx v2 = a2; v3 = this; if ( this[9] < (unsigned int)a2 ) return 0; v5 = (unsigned int *)dword_BA71DC; if ( !dword_BA71DC ) { sub_9433A0(); v5 = (unsigned int *)dword_BA71DC; } v6 = (_DWORD *)v5[6]; dword_BA71DC = v6; if ( v6 ) v6[7] = 0; v5[6] = 0; v5[7] = 0; v5[1] = (unsigned int)v3; v5[2] = v3[2]; v5[3] = v3[8]; v5[5] = (unsigned int)v2; v3[8] += v2; v3[9] -= v2; v3[10] -= v2; a2 = v5; *v5 = sub_8D51C0(v3 + 11, &a2); return v5; } //----- (009434C0) -------------------------------------------------------- volatile LONG *__thiscall sub_9434C0(volatile LONG *this) { volatile LONG *v1; // esi v1 = this; *this = (volatile LONG)&NiGeometryGroup::`vftable'; InterlockedExchange(this + 1, 0); *((_DWORD *)v1 + 2) = 0; return v1; } // A48070: using guessed type void *NiGeometryGroup::`vftable'; //----- (009434E0) -------------------------------------------------------- int __thiscall sub_9434E0(_DWORD *this) { int v1; // ecx int result; // eax *this = &NiGeometryGroup::`vftable'; v1 = this[2]; if ( v1 ) result = (*(int (__stdcall **)(int))(*(_DWORD *)v1 + 8))(v1); return result; } // A48070: using guessed type void *NiGeometryGroup::`vftable'; //----- (00943500) -------------------------------------------------------- LONG __thiscall sub_943500(volatile LONG *this, int a2) { volatile LONG *v2; // esi LONG result; // eax v2 = this; result = InterlockedIncrement(this + 1); *(_DWORD *)(a2 + 4) = v2; return result; } //----- (00943520) -------------------------------------------------------- int __thiscall sub_943520(volatile LONG *this, _DWORD *a2) { volatile LONG *v2; // edi _DWORD *v3; // ebx unsigned int v4; // eax unsigned int v5; // esi unsigned int v7; // [esp+14h] [ebp+8h] v2 = this; InterlockedDecrement(this + 1); v3 = a2; v4 = a2[7]; v5 = 0; a2[1] = 0; v7 = v4; if ( v4 ) { do (*(void (__thiscall **)(volatile LONG *, _DWORD *, unsigned int))(*v2 + 28))(v2, v3, v5++); while ( v5 < v7 ); } return sub_936720(v3); } //----- (00943570) -------------------------------------------------------- void *__thiscall sub_943570(void *this, char a2) { void *v2; // esi int v3; // eax v2 = this; v3 = *((_DWORD *)this + 2); *(_DWORD *)this = &NiGeometryGroup::`vftable'; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A48070: using guessed type void *NiGeometryGroup::`vftable'; //----- (009435B0) -------------------------------------------------------- int __thiscall sub_9435B0(_DWORD *this, unsigned int a2, _DWORD *a3, _DWORD *a4, char a5, char a6) { _DWORD *v6; // esi int v7; // eax unsigned int v8; // eax int v9; // edx signed int v10; // ecx int v11; // eax int v12; // ecx _DWORD *v13; // eax _DWORD *v14; // ecx v6 = this; if ( this[2] < a2 ) { v7 = this[4]; if ( v7 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v7 + 8))(this[4]); v6[4] = 0; v8 = a2; if ( a2 & 0xF ) v8 = (a2 & 0xFFFFFFF0) + 32; v6[2] = v8; } v9 = (int)(v6 + 4); if ( !v6[4] ) { v10 = 520; if ( a6 ) v10 = 536; v11 = (*(int (__stdcall **)(_DWORD, _DWORD, signed int, _DWORD, _DWORD, _DWORD *, _DWORD))(*(_DWORD *)v6[3] + 104))( v6[3], v6[2], v10, v6[1], 0, v6 + 4, 0); v9 = (int)(v6 + 4); if ( v11 >= 0 ) v6[5] = 0; } if ( a5 || (v12 = v6[5], v6[2] - v12 < a2) ) { v13 = a3; v14 = a4; *a3 = 0; v6[5] = a2; *a4 = 0x2000; } else { v13 = a3; *a3 = v12; v14 = a4; v6[5] += a2; *a4 = 4096; } if ( !*v13 ) *v14 = 0x2000; return *(_DWORD *)v9; } //----- (00943680) -------------------------------------------------------- int __stdcall sub_943680(int a1, int a2, int a3, int a4, int a5, int a6) { int v6; // eax v6 = (*(int (__stdcall **)(int, int, int *))(*(_DWORD *)dword_BA6FCC + 364))(dword_BA6FCC, a1, &a1); if ( v6 >= 0 ) return a1; sub_863460(1, 0, "Failed to create vertex shader\nError 0x%08x\n", v6); return 0; } // BA6FCC: using guessed type int dword_BA6FCC; //----- (009436C0) -------------------------------------------------------- int __stdcall sub_9436C0(int a1) { int v1; // eax v1 = (*(int (__stdcall **)(int, int, int *))(*(_DWORD *)dword_BA6FCC + 424))(dword_BA6FCC, a1, &a1); if ( v1 >= 0 ) return a1; sub_863460(1, 0, "Failed to create pixel shader\nError 0x%08x\n", v1); return 0; } // BA6FCC: using guessed type int dword_BA6FCC; //----- (00943700) -------------------------------------------------------- char __stdcall sub_943700(int a1, int a2, int a3, int a4, int a5) { return 0; } //----- (00943710) -------------------------------------------------------- int __thiscall sub_943710(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi int v4; // eax int result; // eax v2 = this; this[8] = a2; if ( a2 ) { v3 = *(_DWORD *)(a2 + 132); v4 = this[7]; if ( v4 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v4 + 8))(this[7]); v2[7] = v3; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 4))(v3); result = *(_DWORD *)(v2[8] + 1716); v2[9] = result; } else { result = this[7]; this[9] = 0; if ( result ) result = (*(int (__stdcall **)(int))(*(_DWORD *)result + 8))(result); v2[7] = 0; } return result; } //----- (00943780) -------------------------------------------------------- _DWORD *__thiscall sub_943780(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiD3DShaderProgram::`vftable'; v2[2] = 0; v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[6] = 0; v2[7] = 0; v2[8] = 0; v2[9] = 0; sub_943710(v2, a2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A480F8: using guessed type void *NiD3DShaderProgram::`vftable'; //----- (009437D0) -------------------------------------------------------- LONG __thiscall sub_9437D0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST08_4 int v3; // eax v1 = this; v2 = (void *)this[2]; *this = &NiD3DShaderProgram::`vftable'; operator delete(v2); operator delete((void *)v1[3]); operator delete((void *)v1[5]); v3 = v1[7]; v1[8] = 0; v1[9] = 0; if ( v3 ) (*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); v1[7] = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A480F8: using guessed type void *NiD3DShaderProgram::`vftable'; //----- (00943830) -------------------------------------------------------- void *__thiscall sub_943830(void *this, char a2) { void *v2; // esi v2 = this; sub_9437D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00943860) -------------------------------------------------------- int __thiscall sub_943860(int this) { int result; // eax if ( *(_DWORD *)(this + 40) ) result = sub_9214E0(*(_DWORD ***)(this + 32), this); return result; } //----- (00943870) -------------------------------------------------------- char __thiscall sub_943870(void *this) { return sub_916EF0((int)this); } //----- (00943880) -------------------------------------------------------- LONG __thiscall sub_943880(_DWORD *this) { int v1; // esi v1 = (int)this; *this = &NiD3DPixelShader::`vftable'; sub_917930((int)this); if ( *(_DWORD *)(v1 + 40) ) sub_9214E0(*(_DWORD ***)(v1 + 32), v1); *(_DWORD *)(v1 + 40) = 0; return sub_9437D0((_DWORD *)v1); } // A47C5C: using guessed type void *NiD3DPixelShader::`vftable'; //----- (009438B0) -------------------------------------------------------- char __thiscall sub_9438B0(_DWORD *this, int a2, void *Src, int a4) { int v4; // ebx int v5; // edi int v6; // esi int v7; // esi int v8; // esi int v9; // esi char result; // al int v11; // esi _DWORD *v12; // ecx unsigned int v13; // edi int v14; // ebx char v15; // al int v16; // ebx int v17; // [esp-10h] [ebp-20h] _DWORD *v18; // [esp+Ch] [ebp-4h] v4 = a2; v18 = this; if ( !Src ) Src = *(void **)(a2 + 44); v5 = a4; if ( !a4 ) { a4 = *(_DWORD *)(a2 + 28); if ( !a4 ) a4 = 1; v5 = a4; } v6 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) == 8 ) { v7 = 3; } else { v8 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v7 = *(&dword_BA6F44 + (unsigned __int8)v8) != 9 ? 1 : 4; } if ( v5 == v7 ) { v9 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 1 ) { result = sub_936520(*(_DWORD **)(v18[9] + 8304), *(_DWORD *)(a2 + 24), Src, v5, 0); } else { v11 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v12 = *(_DWORD **)(v18[9] + 8304); v17 = *(_DWORD *)(a2 + 24); if ( *(&dword_BA6F44 + (unsigned __int8)v11) == 3 ) result = sub_936630(v12, v17, Src, v5, 0); else result = sub_9365A0(v12, v17, Src, v5, 0); } } else { v13 = *(_DWORD *)(a2 + 24); if ( v13 < a4 ) { while ( 1 ) { v14 = *(_DWORD *)(v4 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v14) == 1 ) { v15 = sub_936520(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0); } else { v16 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v15 = *(&dword_BA6F44 + (unsigned __int8)v16) == 3 ? sub_936630(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0) : sub_9365A0(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0); } if ( !v15 ) break; v13 += v7; if ( v13 >= a4 ) return 1; v4 = a2; } result = 0; } else { result = 1; } } return result; } // BA6F80: using guessed type char byte_BA6F80; //----- (00943AB0) -------------------------------------------------------- char __thiscall sub_943AB0(_DWORD *this, int a2, int a3, unsigned int a4, int a5, int a6) { int v6; // edi int v7; // edi int v9; // ebx unsigned int v10; // esi _DWORD *v11; // [esp+8h] [ebp-4h] v6 = *(_DWORD *)(a2 + 16); v11 = this; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) != 8 ) { v7 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) != 9 ) return 0; } v9 = *(_DWORD *)(a2 + 24); v10 = 0; if ( a4 ) { do { sub_9365A0(*(_DWORD **)(v11[9] + 8304), v9, (void *)(a3 + 16 * a5 * *(unsigned __int16 *)(a6 + 2 * v10++)), a5, 0); v9 += a5; } while ( v10 < a4 ); } return 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (00943B50) -------------------------------------------------------- int __thiscall sub_943B50(int this) { int result; // eax if ( *(_DWORD *)(this + 48) ) result = sub_9214A0(*(_DWORD ***)(this + 32), this); return result; } //----- (00943B60) -------------------------------------------------------- char __thiscall sub_943B60(void *this) { return sub_916EA0((int)this); } //----- (00943B70) -------------------------------------------------------- LONG __thiscall sub_943B70(_DWORD *this) { int v1; // esi v1 = (int)this; *this = &NiD3DVertexShader::`vftable'; sub_9178F0((int)this); if ( *(_DWORD *)(v1 + 48) ) sub_9214A0(*(_DWORD ***)(v1 + 32), v1); return sub_9437D0((_DWORD *)v1); } // A47CAC: using guessed type void *NiD3DVertexShader::`vftable'; //----- (00943BA0) -------------------------------------------------------- char __thiscall sub_943BA0(_DWORD *this, int a2, void *Src, int a4) { int v4; // ebx int v5; // edi int v6; // esi int v7; // esi int v8; // esi int v9; // esi char result; // al int v11; // esi _DWORD *v12; // ecx unsigned int v13; // edi int v14; // ebx char v15; // al int v16; // ebx int v17; // [esp-10h] [ebp-20h] _DWORD *v18; // [esp+Ch] [ebp-4h] v4 = a2; v18 = this; if ( !Src ) Src = *(void **)(a2 + 44); v5 = a4; if ( !a4 ) { a4 = *(_DWORD *)(a2 + 28); if ( !a4 ) a4 = 1; v5 = a4; } v6 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) == 8 ) { v7 = 3; } else { v8 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v7 = *(&dword_BA6F44 + (unsigned __int8)v8) != 9 ? 1 : 4; } if ( v5 == v7 ) { v9 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 1 ) { result = sub_936380(*(_DWORD **)(v18[9] + 8304), *(_DWORD *)(a2 + 24), Src, v5, 0); } else { v11 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v12 = *(_DWORD **)(v18[9] + 8304); v17 = *(_DWORD *)(a2 + 24); if ( *(&dword_BA6F44 + (unsigned __int8)v11) == 3 ) result = sub_936490(v12, v17, Src, v5, 0); else result = sub_936400(v12, v17, Src, v5, 0); } } else { v13 = *(_DWORD *)(a2 + 24); if ( v13 < a4 ) { while ( 1 ) { v14 = *(_DWORD *)(v4 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v14) == 1 ) { v15 = sub_936380(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0); } else { v16 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); v15 = *(&dword_BA6F44 + (unsigned __int8)v16) == 3 ? sub_936490(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0) : sub_936400(*(_DWORD **)(v18[9] + 8304), v13, Src, v7, 0); } if ( !v15 ) break; v13 += v7; if ( v13 >= a4 ) return 1; v4 = a2; } result = 0; } else { result = 1; } } return result; } // BA6F80: using guessed type char byte_BA6F80; //----- (00943DA0) -------------------------------------------------------- char __thiscall sub_943DA0(_DWORD *this, int a2, int a3, unsigned int a4, int a5, int a6) { int v6; // edi int v7; // edi int v9; // ebx unsigned int v10; // esi _DWORD *v11; // [esp+8h] [ebp-4h] v6 = *(_DWORD *)(a2 + 16); v11 = this; if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) != 8 ) { v7 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) != 9 ) return 0; } v9 = *(_DWORD *)(a2 + 24); v10 = 0; if ( a4 ) { do { sub_936400(*(_DWORD **)(v11[9] + 8304), v9, (void *)(a3 + 16 * a5 * *(unsigned __int16 *)(a6 + 2 * v10++)), a5, 0); v9 += a5; } while ( v10 < a4 ); } return 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (00943E40) -------------------------------------------------------- LONG __thiscall sub_943E40(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 int v3; // eax v1 = this; v2 = (void *)this[11]; *this = &NiD3DHLSLPixelShader::`vftable'; operator delete(v2); operator delete((void *)v1[12]); v3 = v1[13]; if ( v3 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))(v1[13]); v1[13] = 0; } return sub_943880(v1); } // A47D14: using guessed type void *NiD3DHLSLPixelShader::`vftable'; //----- (00943E80) -------------------------------------------------------- int __thiscall sub_943E80(_DWORD *this) { int v1; // esi int v2; // eax v1 = (int)this; v2 = this[13]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); *(_DWORD *)(v1 + 52) = 0; } return sub_943860(v1); } //----- (00943EC0) -------------------------------------------------------- void __userpurge sub_943EC0(int a1@, int a2@, _DWORD *a3, void *a4, int a5) { int v5; // esi bool v6; // zf void *v7; // ecx int v8; // ecx int v9; // eax _DWORD *v10; // ecx int *v11; // edx char v12; // al int v13; // ST08_4 char v14; // [esp-98h] [ebp-A4h] int v15; // [esp-90h] [ebp-9Ch] int v16; // [esp-88h] [ebp-94h] int v17; // [esp-84h] [ebp-90h] signed int v18; // [esp-60h] [ebp-6Ch] int v19; // [esp-5Ch] [ebp-68h] void *v20; // [esp-58h] [ebp-64h] void *v21; // [esp-54h] [ebp-60h] int v22; // [esp-50h] [ebp-5Ch] unsigned int v23; // [esp-4h] [ebp-10h] int v24; // [esp+0h] [ebp-Ch] int v25; // [esp+4h] [ebp-8h] int retaddr; // [esp+Ch] [ebp+0h] v24 = a2; v25 = retaddr; v23 = (unsigned int)&v24 ^ dword_ABA360; v5 = a1; v6 = *(_DWORD *)(a1 + 52) == 0; v20 = a4; if ( v6 || !*(_DWORD *)(a1 + 28) ) goto LABEL_29; if ( !a4 ) v20 = (void *)a3[11]; v7 = (void *)a3[8]; v21 = v7; if ( !v7 ) { v7 = (void *)a3[2]; v21 = (void *)a3[2]; } v19 = (*(int (__stdcall **)(_DWORD, _DWORD, void *))(**(_DWORD **)(v5 + 52) + 36))(*(_DWORD *)(v5 + 52), 0, v7); if ( !v19 ) { v13 = *(_DWORD *)(v5 + 8); nullsub_6(v21); goto LABEL_29; } v8 = *(_DWORD *)(v5 + 52); v18 = 1; v21 = (void *)(*(int (__stdcall **)(int, int, int *, signed int *))(*(_DWORD *)v8 + 24))(v8, v19, &v15, &v18); v9 = a3[4]; v19 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v9) = v19; } if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 8 || (unsigned __int8)sub_92D750(a3) ) { D3DXMatrixTranspose(&v22, v20); v10 = *(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304); v11 = &v22; } else { if ( (unsigned __int8)sub_92D690(a3) || (unsigned __int8)sub_92D6C0(a3) || (unsigned __int8)sub_92D6F0(a3) || (unsigned __int8)sub_92D780(a3) ) { v12 = sub_9365A0(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); goto LABEL_25; } if ( !(unsigned __int8)sub_92D660(a3) ) { if ( (unsigned __int8)sub_92D630(a3) ) { v12 = sub_936630(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); } else { if ( !(unsigned __int8)sub_92D600(a3) ) goto LABEL_29; v12 = sub_936520(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); } goto LABEL_25; } v10 = *(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304); v11 = (int *)v20; } v12 = sub_9365A0(v10, v16, v11, v17, 0); LABEL_25: if ( v12 ) v21 = 0; LABEL_29: sub_7D50D1(v14); } // 943EC0: could not find valid save-restore pair for ebp // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA6F80: using guessed type char byte_BA6F80; //----- (009440F0) -------------------------------------------------------- void __userpurge sub_9440F0(int a1@, int a2@, _DWORD *a3, int a4, unsigned int a5, int a6, int a7) { int v7; // esi bool v8; // zf int v9; // eax int v10; // eax int v11; // ecx void *v12; // ecx int v13; // edi int v14; // eax unsigned int v15; // edi int *v16; // eax int v17; // ecx int v18; // ST0C_4 char v19; // [esp-A8h] [ebp-B4h] int v20; // [esp-9Ch] [ebp-A8h] int v21; // [esp-94h] [ebp-A0h] int v22; // [esp-90h] [ebp-9Ch] int v23; // [esp-6Ch] [ebp-78h] signed int v24; // [esp-68h] [ebp-74h] int v25; // [esp-64h] [ebp-70h] int v26; // [esp-60h] [ebp-6Ch] int v27; // [esp-5Ch] [ebp-68h] int v28; // [esp-58h] [ebp-64h] int v29; // [esp-54h] [ebp-60h] int v30; // [esp-50h] [ebp-5Ch] unsigned int v31; // [esp-4h] [ebp-10h] int v32; // [esp+0h] [ebp-Ch] int v33; // [esp+4h] [ebp-8h] int retaddr; // [esp+Ch] [ebp+0h] v32 = a2; v33 = retaddr; v31 = (unsigned int)&v32 ^ dword_ABA360; v7 = a1; v8 = *(_DWORD *)(a1 + 52) == 0; v28 = a4; v25 = a6; v27 = a7; if ( !v8 && *(_DWORD *)(a1 + 28) ) { v9 = a3[4]; v29 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v9) = v29; } if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 8 ) goto LABEL_26; v10 = a3[4]; v29 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v10) = v29; } if ( *(&dword_BA6F44 + (unsigned __int8)v10) == 9 ) { LABEL_26: if ( !v28 ) v28 = a3[11]; v11 = a3[8]; v29 = v11; if ( !v11 ) { v11 = a3[2]; v29 = a3[2]; } v13 = (*(int (__stdcall **)(_DWORD, _DWORD, int))(**(_DWORD **)(v7 + 52) + 36))(*(_DWORD *)(v7 + 52), 0, v11); v26 = v13; if ( v13 ) { v14 = *(_DWORD *)(v7 + 52); v24 = 1; v29 = (*(int (__stdcall **)(int, int, int *, signed int *))(*(_DWORD *)v14 + 24))(v14, v13, &v20, &v24); if ( v27 ) { v15 = 0; if ( a5 ) { do { v16 = *(int **)(v7 + 52); v17 = *v16; v23 = *(unsigned __int16 *)(v27 + 2 * v15); (*(void (__stdcall **)(int *, int, unsigned int))(v17 + 40))(v16, v26, v15); D3DXMatrixTranspose(&v30, v28 + 16 * v25 * (unsigned __int16)v23); if ( sub_9365A0(*(_DWORD **)(*(_DWORD *)(v7 + 36) + 8304), v21, &v30, v22, 0) ) { v29 = 0; } else if ( v29 < 0 ) { break; } ++v15; } while ( v15 < a5 ); } } else { (*(void (__stdcall **)(_DWORD, _DWORD, int, int, unsigned int))(**(_DWORD **)(v7 + 52) + 88))( *(_DWORD *)(v7 + 52), *(_DWORD *)(v7 + 28), v13, v28, a5); } } else { v18 = *(_DWORD *)(v7 + 8); nullsub_6(v12); } } } sub_7D50D1(v19); } // 9440F0: could not find valid save-restore pair for ebp // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA6F80: using guessed type char byte_BA6F80; //----- (009442C0) -------------------------------------------------------- LONG __thiscall sub_9442C0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 int v3; // eax v1 = this; v2 = (void *)this[14]; *this = &NiD3DHLSLVertexShader::`vftable'; operator delete(v2); operator delete((void *)v1[15]); v3 = v1[16]; if ( v3 ) { (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v3 + 8))(v1[16]); v1[16] = 0; } return sub_943B70(v1); } // A47D7C: using guessed type void *NiD3DHLSLVertexShader::`vftable'; //----- (00944300) -------------------------------------------------------- int __thiscall sub_944300(_DWORD *this) { int v1; // esi int v2; // eax v1 = (int)this; v2 = this[16]; if ( v2 ) { (*(void (__stdcall **)(int))(*(_DWORD *)v2 + 8))(v2); *(_DWORD *)(v1 + 64) = 0; } return sub_943B50(v1); } //----- (00944340) -------------------------------------------------------- void __userpurge sub_944340(int a1@, int a2@, _DWORD *a3, void *a4, int a5) { int v5; // esi bool v6; // zf void *v7; // ecx int v8; // ecx int v9; // eax _DWORD *v10; // ecx int *v11; // edx char v12; // al int v13; // ST08_4 char v14; // [esp-98h] [ebp-A4h] int v15; // [esp-90h] [ebp-9Ch] int v16; // [esp-88h] [ebp-94h] int v17; // [esp-84h] [ebp-90h] signed int v18; // [esp-60h] [ebp-6Ch] int v19; // [esp-5Ch] [ebp-68h] void *v20; // [esp-58h] [ebp-64h] void *v21; // [esp-54h] [ebp-60h] int v22; // [esp-50h] [ebp-5Ch] unsigned int v23; // [esp-4h] [ebp-10h] int v24; // [esp+0h] [ebp-Ch] int v25; // [esp+4h] [ebp-8h] int retaddr; // [esp+Ch] [ebp+0h] v24 = a2; v25 = retaddr; v23 = (unsigned int)&v24 ^ dword_ABA360; v5 = a1; v6 = *(_DWORD *)(a1 + 64) == 0; v20 = a4; if ( v6 || !*(_DWORD *)(a1 + 28) ) goto LABEL_29; if ( !a4 ) v20 = (void *)a3[11]; v7 = (void *)a3[8]; v21 = v7; if ( !v7 ) { v7 = (void *)a3[2]; v21 = (void *)a3[2]; } v19 = (*(int (__stdcall **)(_DWORD, _DWORD, void *))(**(_DWORD **)(v5 + 64) + 36))(*(_DWORD *)(v5 + 64), 0, v7); if ( !v19 ) { v13 = *(_DWORD *)(v5 + 8); nullsub_6(v21); goto LABEL_29; } v8 = *(_DWORD *)(v5 + 64); v18 = 1; v21 = (void *)(*(int (__stdcall **)(int, int, int *, signed int *))(*(_DWORD *)v8 + 24))(v8, v19, &v15, &v18); v9 = a3[4]; v19 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v9) = v19; } if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 8 || (unsigned __int8)sub_92D750(a3) ) { D3DXMatrixTranspose(&v22, v20); v10 = *(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304); v11 = &v22; } else { if ( (unsigned __int8)sub_92D690(a3) || (unsigned __int8)sub_92D6C0(a3) || (unsigned __int8)sub_92D6F0(a3) || (unsigned __int8)sub_92D780(a3) ) { v12 = sub_936400(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); goto LABEL_25; } if ( !(unsigned __int8)sub_92D660(a3) ) { if ( (unsigned __int8)sub_92D630(a3) ) { v12 = sub_936490(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); } else { if ( !(unsigned __int8)sub_92D600(a3) ) goto LABEL_29; v12 = sub_936380(*(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304), v16, v20, v17, 0); } goto LABEL_25; } v10 = *(_DWORD **)(*(_DWORD *)(v5 + 36) + 8304); v11 = (int *)v20; } v12 = sub_936400(v10, v16, v11, v17, 0); LABEL_25: if ( v12 ) v21 = 0; LABEL_29: sub_7D50D1(v14); } // 944340: could not find valid save-restore pair for ebp // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA6F80: using guessed type char byte_BA6F80; //----- (00944570) -------------------------------------------------------- void __userpurge sub_944570(int a1@, int a2@, _DWORD *a3, char *a4, unsigned int a5, int a6, int a7) { int v7; // esi bool v8; // zf int v9; // eax int v10; // eax int v11; // ecx int v12; // edi int v13; // edi int v14; // eax unsigned int v15; // edi int *v16; // eax int v17; // ecx int v18; // eax int v19; // ecx char v20; // al int v21; // ST0C_4 char v22; // [esp-A8h] [ebp-B4h] int v23; // [esp-A0h] [ebp-ACh] int v24; // [esp-98h] [ebp-A4h] int v25; // [esp-94h] [ebp-A0h] int v26; // [esp-70h] [ebp-7Ch] int v27; // [esp-6Ch] [ebp-78h] int v28; // [esp-68h] [ebp-74h] int v29; // [esp-64h] [ebp-70h] signed int v30; // [esp-60h] [ebp-6Ch] char *v31; // [esp-5Ch] [ebp-68h] int v32; // [esp-58h] [ebp-64h] char v33; // [esp-51h] [ebp-5Dh] int v34; // [esp-50h] [ebp-5Ch] unsigned int v35; // [esp-4h] [ebp-10h] int v36; // [esp+0h] [ebp-Ch] int v37; // [esp+4h] [ebp-8h] int retaddr; // [esp+Ch] [ebp+0h] v36 = a2; v37 = retaddr; v35 = (unsigned int)&v36 ^ dword_ABA360; v7 = a1; v8 = *(_DWORD *)(a1 + 64) == 0; v31 = a4; v28 = a6; v29 = a7; if ( !v8 && *(_DWORD *)(a1 + 28) ) { v9 = a3[4]; v32 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v9) = v32; } if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 8 ) goto LABEL_36; v10 = a3[4]; v32 = a3[4]; if ( !byte_BA6F80 ) { sub_92C350(); LOBYTE(v10) = v32; } if ( *(&dword_BA6F44 + (unsigned __int8)v10) == 9 ) { LABEL_36: if ( !v31 ) v31 = (char *)a3[11]; v11 = a3[8]; v32 = v11; if ( !v11 ) { v11 = a3[2]; v32 = a3[2]; } v12 = a3[3]; v33 = 0; if ( v12 == 33 || v12 == 35 || v12 == 34 || v12 == 36 ) v33 = 1; v13 = (*(int (__stdcall **)(_DWORD, _DWORD, int))(**(_DWORD **)(v7 + 64) + 36))(*(_DWORD *)(v7 + 64), 0, v11); v26 = v13; if ( v13 ) { v14 = *(_DWORD *)(v7 + 64); v30 = 1; (*(void (__stdcall **)(int, int, int *, signed int *))(*(_DWORD *)v14 + 24))(v14, v13, &v23, &v30); if ( v29 ) { v15 = 0; if ( a5 ) { do { v16 = *(int **)(v7 + 64); v17 = *v16; v32 = *(unsigned __int16 *)(v29 + 2 * v15); v18 = (*(int (__stdcall **)(int *, int, unsigned int))(v17 + 40))(v16, v26, v15); v19 = *(_DWORD *)(v7 + 64); v27 = v18; v30 = 1; (*(void (__stdcall **)(int, int, int *, signed int *))(*(_DWORD *)v19 + 24))(v19, v18, &v23, &v30); if ( v33 ) { v20 = sub_936400( *(_DWORD **)(*(_DWORD *)(v7 + 36) + 8304), v24, &v31[16 * v28 * (unsigned __int16)v32], v25, 0); } else { D3DXMatrixTranspose(&v34, &v31[16 * v28 * (unsigned __int16)v32]); v20 = sub_936400(*(_DWORD **)(*(_DWORD *)(v7 + 36) + 8304), v24, &v34, v25, 0); } if ( !v20 ) break; ++v15; } while ( v15 < a5 ); } } else { v32 = -2147467259; if ( v33 ) { if ( sub_936400(*(_DWORD **)(*(_DWORD *)(v7 + 36) + 8304), v24, v31, v25, 0) ) v32 = 0; } else { v32 = (*(int (__stdcall **)(_DWORD, _DWORD, int, char *, unsigned int))(**(_DWORD **)(v7 + 64) + 88))( *(_DWORD *)(v7 + 64), *(_DWORD *)(v7 + 28), v13, v31, a5); } } } else { v21 = *(_DWORD *)(v7 + 8); nullsub_6((void *)v32); } } } sub_7D50D1(v22); } // 944570: could not find valid save-restore pair for ebp // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // ABA360: using guessed type int dword_ABA360; // BA6F80: using guessed type char byte_BA6F80; //----- (009448E0) -------------------------------------------------------- int __thiscall sub_9448E0(_WORD *this, int a2, int a3) { unsigned int v3; // esi int i; // eax char v6[500]; // [esp+8h] [ebp-1F8h] v3 = 0; do { v6[v3] = 11 * byte_AC8778[v3]; ++v3; } while ( v3 < 0x1F3 ); for ( i = 0; i < a3; ++i ) { *(_BYTE *)(a2 + i) ^= v6[(unsigned __int16)(*this)++]; if ( *this >= 0x1F3u ) *this = 0; } return a2; } // 9448E0: using guessed type char var_1F8[500]; //----- (00944980) -------------------------------------------------------- char __cdecl sub_944980(int a1, signed int a2) { char result; // al if ( a2 > 8 ) sub_9464B0((int *)a1, "Too many bytes for PNG signature."); result = a2 < 0 ? 0 : a2; *(_BYTE *)(a1 + 300) = result; return result; } //----- (009449C0) -------------------------------------------------------- int __cdecl sub_9449C0(int a1, unsigned int a2, unsigned int a3) { unsigned int v3; // eax unsigned __int8 *v4; // ecx unsigned __int8 *v5; // edx unsigned int v6; // esi int v7; // eax int v9; // [esp+0h] [ebp-Ch] int v10; // [esp+4h] [ebp-8h] v3 = a3; v9 = 1196314761; v10 = 169478669; if ( a3 <= 8 ) { if ( a3 < 1 ) return 0; } else { v3 = 8; } if ( a2 > 7 ) return 0; if ( a2 + v3 > 8 ) v3 = 8 - a2; v4 = (unsigned __int8 *)&v9 + a2; v5 = (unsigned __int8 *)(a1 + a2); v6 = v3; if ( v3 < 4 ) { LABEL_9: if ( !v6 ) return 0; } else { while ( *(_DWORD *)v5 == *(_DWORD *)v4 ) { v6 -= 4; v4 += 4; v5 += 4; if ( v6 < 4 ) goto LABEL_9; } } v7 = *v5 - *v4; if ( *v5 != *v4 ) return (v7 >> 31) | 1; if ( v6 > 1 ) { v7 = v5[1] - v4[1]; if ( v5[1] != v4[1] ) return (v7 >> 31) | 1; if ( v6 > 2 ) { v7 = v5[2] - v4[2]; if ( v5[2] == v4[2] ) { if ( v6 > 3 ) { v7 = v5[3] - v4[3]; return (v7 >> 31) | 1; } return 0; } return (v7 >> 31) | 1; } } return 0; } //----- (00944AC0) -------------------------------------------------------- void *__cdecl sub_944AC0(int a1, unsigned int a2, unsigned int a3) { int v3; // edi void *result; // eax v3 = *(_DWORD *)(a1 + 108); if ( a2 <= 0xFFFFFFFF / a3 ) { *(_DWORD *)(a1 + 108) = v3 | 0x100000; result = sub_946890(a1, a3 * a2); *(_DWORD *)(a1 + 108) = v3; } else { sub_946550(a1, "Potential overflow in png_zalloc()"); result = 0; } return result; } //----- (00944B20) -------------------------------------------------------- void __cdecl sub_944B20(int a1, void *a2) { sub_9468F0(a1, a2); } //----- (00944B30) -------------------------------------------------------- int __cdecl sub_944B30(int a1) { int result; // eax result = sub_759C50(0, 0, 0); *(_DWORD *)(a1 + 272) = result; return result; } //----- (00944B50) -------------------------------------------------------- void __cdecl sub_944B50(int a1, _DWORD *a2, unsigned int a3) { if ( !(*(_BYTE *)(a1 + 284) & 0x20) ) { if ( *(_DWORD *)(a1 + 108) & 0x800 ) return; goto LABEL_5; } if ( (*(_DWORD *)(a1 + 108) & 0x300) != 768 ) LABEL_5: *(_DWORD *)(a1 + 272) = sub_759C50(*(_DWORD *)(a1 + 272), a2, a3); } //----- (00944BA0) -------------------------------------------------------- void __cdecl sub_944BA0(int a1, int a2, int a3, int a4) { int v4; // eax int v5; // ecx void *v6; // ecx int i; // ebx int v8; // ecx signed int v9; // ebx int v10; // ecx int v11; // ebx int v12; // ecx int v13; // ebx int v14; // ecx int v15; // ecx int v16; // ebx int j; // ebx if ( !a1 || !a2 ) return; v4 = a3; if ( a3 & *(_DWORD *)(a2 + 184) & 0x4000 ) { if ( a4 == -1 ) { for ( i = 0; i < *(_DWORD *)(a2 + 48); ++i ) sub_944BA0(a1, a2, 0x4000, i); sub_9468F0(a1, *(void **)(a2 + 56)); *(_DWORD *)(a2 + 56) = 0; *(_DWORD *)(a2 + 48) = 0; goto LABEL_11; } v5 = *(_DWORD *)(a2 + 56); if ( v5 ) { v6 = *(void **)(v5 + 16 * a4 + 4); if ( v6 ) { sub_9468F0(a1, v6); *(_DWORD *)(*(_DWORD *)(a2 + 56) + 16 * a4 + 4) = 0; LABEL_11: v4 = a3; goto LABEL_12; } } } LABEL_12: if ( v4 & *(_DWORD *)(a2 + 184) & 0x2000 ) { sub_9468F0(a1, *(void **)(a2 + 76)); v4 = a3; *(_DWORD *)(a2 + 8) &= 0xFFFFFFEF; *(_DWORD *)(a2 + 76) = 0; } v8 = v4 & *(_DWORD *)(a2 + 184); if ( v8 & 0x100 ) *(_DWORD *)(a2 + 8) &= 0xFFFFBFFF; if ( (v8 & 0x80u) != 0 ) { sub_9468F0(a1, *(void **)(a2 + 160)); sub_9468F0(a1, *(void **)(a2 + 172)); v9 = 0; *(_DWORD *)(a2 + 160) = 0; *(_DWORD *)(a2 + 172) = 0; if ( *(_DWORD *)(a2 + 176) ) { if ( *(_BYTE *)(a2 + 181) > 0u ) { do { sub_9468F0(a1, *(void **)(*(_DWORD *)(a2 + 176) + 4 * v9)); *(_DWORD *)(*(_DWORD *)(a2 + 176) + 4 * v9++) = 0; } while ( v9 < *(unsigned __int8 *)(a2 + 181) ); } sub_9468F0(a1, *(void **)(a2 + 176)); *(_DWORD *)(a2 + 176) = 0; } *(_DWORD *)(a2 + 8) &= 0xFFFFFBFF; v4 = a3; } if ( (unsigned __int8)v4 & *(_BYTE *)(a2 + 184) & 0x10 ) { sub_9468F0(a1, *(void **)(a2 + 196)); sub_9468F0(a1, *(void **)(a2 + 200)); *(_DWORD *)(a2 + 8) &= 0xFFFFEFFF; *(_DWORD *)(a2 + 196) = 0; *(_DWORD *)(a2 + 200) = 0; v4 = a3; } if ( (unsigned __int8)v4 & *(_BYTE *)(a2 + 184) & 0x20 ) { if ( a4 == -1 ) { v12 = *(_DWORD *)(a2 + 216); if ( v12 ) { v13 = 0; if ( v12 > 0 ) { do sub_944BA0(a1, a2, 32, v13++); while ( v13 < *(_DWORD *)(a2 + 216) ); } sub_9468F0(a1, *(void **)(a2 + 212)); *(_DWORD *)(a2 + 212) = 0; *(_DWORD *)(a2 + 216) = 0; v4 = a3; } *(_DWORD *)(a2 + 8) &= 0xFFFFDFFF; } else { v10 = *(_DWORD *)(a2 + 212); if ( v10 ) { v11 = 2 * a4; sub_9468F0(a1, *(void **)(v10 + 16 * a4)); sub_9468F0(a1, *(void **)(*(_DWORD *)(a2 + 212) + 16 * a4 + 8)); *(_DWORD *)(*(_DWORD *)(a2 + 212) + 8 * v11) = 0; *(_DWORD *)(*(_DWORD *)(a2 + 212) + 8 * v11 + 8) = 0; v4 = a3; } } } if ( !(v4 & *(_DWORD *)(a2 + 184) & 0x200) ) goto LABEL_42; if ( a4 == -1 ) { v15 = *(_DWORD *)(a2 + 192); if ( v15 ) { v16 = 0; if ( v15 > 0 ) { do sub_944BA0(a1, a2, 512, v16++); while ( v16 < *(_DWORD *)(a2 + 192) ); } sub_9468F0(a1, *(void **)(a2 + 188)); *(_DWORD *)(a2 + 188) = 0; *(_DWORD *)(a2 + 192) = 0; goto LABEL_41; } } else { v14 = *(_DWORD *)(a2 + 188); if ( v14 ) { sub_9468F0(a1, *(void **)(20 * a4 + v14 + 8)); *(_DWORD *)(*(_DWORD *)(a2 + 188) + 20 * a4 + 8) = 0; LABEL_41: v4 = a3; goto LABEL_42; } } LABEL_42: if ( (unsigned __int8)v4 & *(_BYTE *)(a2 + 184) & 8 ) { sub_9468F0(a1, *(void **)(a2 + 124)); v4 = a3; *(_DWORD *)(a2 + 8) &= 0xFFFFFFBF; *(_DWORD *)(a2 + 124) = 0; } if ( v4 & *(_DWORD *)(a2 + 184) & 0x1000 ) { sub_9468F0(a1, *(void **)(a2 + 16)); *(_DWORD *)(a2 + 8) &= 0xFFFFFFF7; *(_WORD *)(a2 + 20) = 0; v4 = a3; *(_DWORD *)(a2 + 16) = 0; } if ( (unsigned __int8)v4 & *(_BYTE *)(a2 + 184) & 0x40 ) { if ( *(_DWORD *)(a2 + 248) ) { for ( j = 0; j < *(_DWORD *)(a2 + 4); ++j ) { sub_9468F0(a1, *(void **)(*(_DWORD *)(a2 + 248) + 4 * j)); *(_DWORD *)(*(_DWORD *)(a2 + 248) + 4 * j) = 0; } sub_9468F0(a1, *(void **)(a2 + 248)); v4 = a3; *(_DWORD *)(a2 + 248) = 0; } *(_DWORD *)(a2 + 8) &= 0xFFFF7FFF; } if ( a4 != -1 ) v4 &= 0xFFFFBDDF; *(_DWORD *)(a2 + 184) &= ~v4; } //----- (00944F90) -------------------------------------------------------- void *__cdecl sub_944F90(int a1, void *a2) { sub_944BA0(a1, (int)a2, 0x7FFF, -1); if ( *(_DWORD *)(a1 + 544) ) { sub_9468F0(a1, *(void **)(a1 + 548)); *(_DWORD *)(a1 + 548) = 0; *(_DWORD *)(a1 + 544) = 0; } return memset(a2, 0, 0x120u); } //----- (00944FF0) -------------------------------------------------------- int __cdecl sub_944FF0(int a1) { return *(_DWORD *)(a1 + 84); } //----- (00945000) -------------------------------------------------------- int __cdecl sub_945000(int a1, _DWORD *a2) { int v2; // eax int v3; // ecx if ( !a1 && !a2 ) return 0; if ( *(_DWORD *)(a1 + 544) <= 0 ) return 0; v2 = *(_DWORD *)(a1 + 544); v3 = 5 * v2 + *(_DWORD *)(a1 + 548) - 5; if ( !v2 ) return 0; while ( *a2 != *(_DWORD *)v3 ) { v3 -= 5; if ( !--v2 ) return 0; } return *(unsigned __int8 *)(v3 + 4); } //----- (00945050) -------------------------------------------------------- int __cdecl sub_945050(int a1) { int result; // eax result = a1; *(_DWORD *)(a1 + 572) = 0; *(_BYTE *)(a1 + 569) = 0; *(_BYTE *)(a1 + 576) = 0; return result; } //----- (00945070) -------------------------------------------------------- void *__cdecl sub_945070(int a1) { void *result; // eax void *v2; // eax void *v3; // esi result = (void *)a1; if ( a1 ) { v2 = sub_946730(2, *(int (__cdecl **)(char *, size_t))(a1 + 584), *(_DWORD *)(a1 + 580)); v3 = v2; if ( v2 ) memset(v2, 0, 0x120u); result = v3; } return result; } //----- (009450B0) -------------------------------------------------------- void **__cdecl sub_9450B0(char *a1, int a2, int a3, int a4, int a5, int (__cdecl *a6)(char *, size_t), int a7) { _DWORD *v7; // eax _DWORD *v8; // esi void **result; // eax const char *v10; // eax char v11; // bl char v12; // al void **v13; // [esp+28h] [ebp-58h] char v14; // [esp+2Ch] [ebp-54h] v7 = sub_946730(1, a6, a5); v8 = v7; v13 = (void **)v7; if ( !v7 ) return 0; sub_945050((int)v7); v8[153] = 1000000; v8[154] = 1000000; if ( _setjmp3(v8, 0) ) { sub_9468F0((int)v13, v13[43]); v13[43] = 0; sub_9467C0(v13, a7, a5); return 0; } sub_946860(v13, a5, (int)a6, a7); sub_946490(v13, a2, a3, a4); v10 = "1.2.8"; do { if ( v10[a1 - "1.2.8"] != *v10 ) v13[27] = (void *)((unsigned int)v13[27] | 0x20000); v11 = *v10++; } while ( v11 ); if ( (unsigned int)v13[27] & 0x20000 ) { if ( !a1 ) goto LABEL_18; v12 = *a1; if ( *a1 != a128_0[0] || v12 == 49 && a1[2] != a128_0[2] || v12 == 48 && a1[2] < 57 ) { if ( a1 ) { sprintf(&v14, "Application was compiled with png.h from libpng-%.20s", a1); sub_946550((int)v13, &v14); } LABEL_18: sprintf(&v14, "Application is running with png.c from libpng-%.20s", "1.2.8"); sub_946550((int)v13, &v14); v13[27] = 0; sub_9464B0((int *)v13, "Incompatible libpng version in application and library"); } } v13[44] = (void *)0x2000; v13[43] = sub_946890((int)v13, 0x2000u); v13[37] = sub_944AC0; v13[38] = sub_944B20; v13[39] = v13; switch ( sub_756880(v13 + 29, "1.2.2", 56) + 6 ) { case 0: sub_9464B0((int *)v13, "zlib version error"); return result; case 2: case 4: sub_9464B0((int *)v13, "zlib memory error"); return result; case 6: v13[32] = v13[43]; v13[33] = v13[44]; sub_946280(v13, 0, 0); if ( _setjmp3(v13, 0) ) abort(); result = v13; break; default: sub_9464B0((int *)v13, "Unknown zlib error"); return result; } return result; } //----- (00945310) -------------------------------------------------------- int __cdecl sub_945310(char *a1, int a2) { _DWORD *v2; // ebx char *v3; // esi unsigned __int8 v4; // al unsigned int v5; // edi char *v6; // ST10_4 int v7; // edi int v8; // ecx int v9; // eax int result; // eax int v11; // eax v2 = (_DWORD *)a2; v3 = a1; v4 = a1[300]; if ( v4 < 8u ) { v5 = 8 - v4; a1 = (char *)v4; sub_946210((int *)v3, v4 + a2 + 32, 8 - v4); v6 = a1; v3[300] = 8; if ( sub_9449C0((int)(v2 + 8), (unsigned int)v6, v5) ) { if ( (unsigned int)a1 < 4 ) { if ( sub_9449C0((int)(v2 + 8), (unsigned int)a1, v5 - 4) ) sub_9464B0((int *)v3, "Not a PNG file"); } sub_9464B0((int *)v3, "PNG file corrupted by ASCII conversion"); } if ( (unsigned int)a1 < 3 ) *((_DWORD *)v3 + 26) |= 0x1000u; } while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { sub_946210((int *)v3, (int)&a1, 4); v7 = sub_947940((int *)v3, (unsigned __int8 *)&a1); sub_944B30((int)v3); sub_9469C0((int *)v3, (_DWORD *)v3 + 71, 4u); v8 = *((_DWORD *)v3 + 71); if ( v8 != 1380206665 ) break; sub_947AD0((int)v3, (int)v2, v7); } if ( v8 != 1145980233 ) break; sub_947E80((int *)v3, (int)v2, v7); } if ( !sub_945000((int)v3, (_DWORD *)v3 + 71) ) break; if ( *((_DWORD *)v3 + 71) == 1413563465 ) *((_DWORD *)v3 + 26) |= 4u; sub_949E00((int)v3, (int)v2, v7); v9 = *((_DWORD *)v3 + 71); if ( v9 == 1163152464 ) { *((_DWORD *)v3 + 26) |= 2u; } else if ( v9 == 1413563465 ) { result = *((_DWORD *)v3 + 26); if ( !(result & 1) ) sub_9464B0((int *)v3, "Missing IHDR before IDAT"); if ( v3[294] == 3 && !(result & 2) ) sub_9464B0((int *)v3, "Missing PLTE before IDAT"); return result; } } v11 = *((_DWORD *)v3 + 71); if ( v11 != 1163152464 ) break; sub_947CA0((int)v3, (int)v2, v7); } if ( v11 == 1413563465 ) break; switch ( v11 ) { case 1145523042: sub_948F60((int)v3, (int)v2, v7); break; case 1297238115: sub_9481D0((int *)v3, (int)v2, v7); break; case 1095582055: sub_947ED0((int *)v3, (int)v2, v7); break; case 1414744424: sub_9491B0((int)v3, (int)v2, v7); break; case 1933985391: sub_9494A0((int *)v3, (int)v2, v7); break; case 1279345520: sub_9495F0((int *)v3, (int)v2, v7); break; case 1279345523: sub_949880(v3, (int)v2, v7); break; case 1935231088: sub_949350((int *)v3, (int)v2, v7); break; case 1414087283: sub_948060((int)v3, (int)v2, v7); break; case 1111970419: sub_9486F0((int *)v3, (int)v2, v7); break; case 1346585449: sub_9488F0((int *)v3, (int)v2, v7); break; case 1414287475: sub_948AB0((int *)v3, (int)v2, v7); break; case 1951942004: sub_949B50((int)v3, v2, v7); break; case 1162692980: sub_949A30((int)v3, v2, v7); break; case 1397641844: sub_948D00((int)v3, (int)v2, v7); break; case 1951945850: sub_949C80((int)v3, v2, v7); break; default: sub_949E00((int)v3, (int)v2, v7); break; } } result = *((_DWORD *)v3 + 26); if ( !(result & 1) ) sub_9464B0((int *)v3, "Missing IHDR before IDAT"); if ( v3[294] == 3 && !(result & 2) ) sub_9464B0((int *)v3, "Missing PLTE before IDAT"); *((_DWORD *)v3 + 26) |= 4u; *((_DWORD *)v3 + 67) = v7; return result; } //----- (00945660) -------------------------------------------------------- char *__cdecl sub_945660(int a1, void **a2) { unsigned int v2; // esi char *result; // eax int v4; // ecx bool v5; // zf int v6; // eax unsigned int v7; // eax unsigned int v8; // ecx _DWORD *v9; // edx signed int v10; // eax char *v11; // eax int v12; // ecx char v13; // dl unsigned __int8 v14; // al unsigned int v15; // eax unsigned __int8 *v16; // eax int v17; // [esp+4h] [ebp-14h] char v18; // [esp+8h] [ebp-10h] char *v19; // [esp+Ch] [ebp-Ch] int v20; // [esp+10h] [ebp-8h] void *v21; // [esp+14h] [ebp-4h] void **v22; // [esp+20h] [ebp+8h] v2 = a1; result = (char *)sub_94E690(a1); v4 = *(_DWORD *)(a1 + 204); v17 = v4; *(_DWORD *)(a1 + 208) = v4; if ( (signed int)result > 0 ) { v19 = result; do { result = (char *)a2; v22 = a2; if ( v4 ) { v20 = v4; do { v5 = (*(_BYTE *)(v2 + 108) & 0x40) == 0; v21 = *v22; if ( v5 ) sub_947680(v2); if ( *(_BYTE *)(v2 + 291) && *(_BYTE *)(v2 + 112) & 2 ) { switch ( *(unsigned __int8 *)(v2 + 292) ) { case 0u: if ( !(*(_BYTE *)(v2 + 228) & 7) ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 1u: if ( !(*(_BYTE *)(v2 + 228) & 7) && *(_DWORD *)(v2 + 200) >= 5u ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 2u: if ( (*(_DWORD *)(v2 + 228) & 7) == 4 ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 3u: if ( !(*(_BYTE *)(v2 + 228) & 3) && *(_DWORD *)(v2 + 200) >= 3u ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 4u: if ( (*(_DWORD *)(v2 + 228) & 3) == 2 ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 5u: if ( !(*(_BYTE *)(v2 + 228) & 1) && *(_DWORD *)(v2 + 200) >= 2u ) goto LABEL_27; result = (char *)sub_949F50(v2); break; case 6u: if ( *(_BYTE *)(v2 + 228) & 1 ) goto LABEL_27; result = (char *)sub_949F50(v2); break; default: goto LABEL_27; } } else { LABEL_27: if ( !(*(_BYTE *)(v2 + 104) & 4) ) sub_9464B0((int *)v2, "Invalid attempt to read row data"); v6 = *(_DWORD *)(v2 + 220); *(_DWORD *)(v2 + 128) = *(_DWORD *)(v2 + 236); *(_DWORD *)(v2 + 132) = v6; while ( 1 ) { if ( !*(_DWORD *)(v2 + 120) ) { while ( !*(_DWORD *)(v2 + 268) ) { sub_947990((_DWORD *)v2, 0); sub_946210((int *)v2, (int)&v18, 4); *(_DWORD *)(v2 + 268) = sub_947940((int *)v2, (unsigned __int8 *)&v18); sub_944B30(v2); sub_9469C0((int *)v2, (_DWORD *)(v2 + 284), 4u); if ( *(_DWORD *)(v2 + 284) != 1413563465 ) sub_9464B0((int *)v2, "Not enough image data"); } v7 = *(_DWORD *)(v2 + 176); v8 = *(_DWORD *)(v2 + 268); v9 = *(_DWORD **)(v2 + 172); *(_DWORD *)(v2 + 120) = v7; *(_DWORD *)(v2 + 116) = v9; if ( v7 > v8 ) *(_DWORD *)(v2 + 120) = v8; sub_9469C0((int *)v2, v9, *(_DWORD *)(v2 + 120)); *(_DWORD *)(v2 + 268) -= *(_DWORD *)(v2 + 120); } v10 = sub_7569A0(v2 + 116, 1); if ( v10 == 1 ) break; if ( v10 ) { v11 = *(char **)(v2 + 140); if ( !v11 ) v11 = "Decompression error"; sub_9464B0((int *)v2, v11); } if ( !*(_DWORD *)(v2 + 132) ) goto LABEL_50; } if ( *(_DWORD *)(v2 + 132) || *(_DWORD *)(v2 + 120) || *(_DWORD *)(v2 + 268) ) sub_9464B0((int *)v2, "Extra compressed data"); *(_DWORD *)(v2 + 104) |= 8u; *(_DWORD *)(v2 + 108) |= 0x20u; LABEL_50: v12 = *(_DWORD *)(v2 + 224); v13 = *(_BYTE *)(v2 + 298); *(_BYTE *)(v2 + 264) = *(_BYTE *)(v2 + 294); *(_BYTE *)(v2 + 265) = *(_BYTE *)(v2 + 295); v14 = *(_BYTE *)(v2 + 297); *(_BYTE *)(v2 + 267) = v14; *(_DWORD *)(v2 + 256) = v12; *(_BYTE *)(v2 + 266) = v13; if ( v14 < 8u ) v15 = (v12 * (unsigned int)v14 + 7) >> 3; else v15 = v12 * ((unsigned int)v14 >> 3); *(_DWORD *)(v2 + 260) = v15; v16 = *(unsigned __int8 **)(v2 + 236); if ( *v16 ) sub_9474C0(v2, v2 + 256, v16 + 1, *(_DWORD *)(v2 + 232) + 1, *v16); sub_946820(v2, *(void **)(v2 + 232), *(void **)(v2 + 236), *(_DWORD *)(v2 + 216) + 1); if ( *(_BYTE *)(v2 + 560) & 4 && *(_BYTE *)(v2 + 568) == 64 ) sub_94D5B0((int *)(v2 + 256), *(_DWORD *)(v2 + 236) + 1); if ( *(_DWORD *)(v2 + 112) || *(_DWORD *)(v2 + 108) & 0x400000 ) sub_94E1B0(v2); if ( *(_BYTE *)(v2 + 291) && *(_BYTE *)(v2 + 112) & 2 ) { if ( *(_BYTE *)(v2 + 292) < 6u ) sub_9470B0(v2); if ( v21 ) sub_946DE0(v2, v21, dword_A488BC[*(unsigned __int8 *)(v2 + 292)]); } else if ( v21 ) { sub_946DE0(v2, v21, 255); } sub_949F50(v2); result = *(char **)(v2 + 408); if ( result ) result = (char *)((int (__cdecl *)(unsigned int, _DWORD, _DWORD))result)( v2, *(_DWORD *)(v2 + 228), *(unsigned __int8 *)(v2 + 292)); } ++v22; --v20; } while ( v20 ); v4 = v17; } --v19; } while ( v19 ); } return result; } //----- (00945A90) -------------------------------------------------------- void __cdecl sub_945A90(char *a1, int a2) { char *v2; // esi _DWORD *v3; // ebx int v4; // edi int v5; // ecx int v6; // eax v2 = a1; sub_947990(a1, 0); v3 = (_DWORD *)a2; do { sub_946210((int *)v2, (int)&a1, 4); v4 = sub_947940((int *)v2, (unsigned __int8 *)&a1); sub_944B30((int)v2); sub_9469C0((int *)v2, (_DWORD *)v2 + 71, 4u); v5 = *((_DWORD *)v2 + 71); if ( v5 == 1380206665 ) { sub_947AD0((int)v2, (int)v3, v4); } else if ( v5 == 1145980233 ) { sub_947E80((int *)v2, (int)v3, v4); } else if ( sub_945000((int)v2, (_DWORD *)v2 + 71) ) { if ( *((_DWORD *)v2 + 71) == 1413563465 ) { if ( v4 || v2[104] & 8 ) sub_9464B0((int *)v2, "Too many IDAT's found"); } else { *((_DWORD *)v2 + 26) |= 8u; } sub_949E00((int)v2, (int)v3, v4); if ( *((_DWORD *)v2 + 71) == 1163152464 ) *((_DWORD *)v2 + 26) |= 2u; } else { v6 = *((_DWORD *)v2 + 71); switch ( v6 ) { case 1413563465: if ( v4 || v2[104] & 8 ) sub_9464B0((int *)v2, "Too many IDAT's found"); sub_947990(v2, 0); break; case 1163152464: sub_947CA0((int)v2, (int)v3, v4); break; case 1145523042: sub_948F60((int)v2, (int)v3, v4); break; case 1297238115: sub_9481D0((int *)v2, (int)v3, v4); break; case 1095582055: sub_947ED0((int *)v2, (int)v3, v4); break; case 1414744424: sub_9491B0((int)v2, (int)v3, v4); break; case 1933985391: sub_9494A0((int *)v2, (int)v3, v4); break; case 1279345520: sub_9495F0((int *)v2, (int)v3, v4); break; case 1279345523: sub_949880(v2, (int)v3, v4); break; case 1935231088: sub_949350((int *)v2, (int)v3, v4); break; case 1414087283: sub_948060((int)v2, (int)v3, v4); break; case 1111970419: sub_9486F0((int *)v2, (int)v3, v4); break; case 1346585449: sub_9488F0((int *)v2, (int)v3, v4); break; case 1414287475: sub_948AB0((int *)v2, (int)v3, v4); break; case 1951942004: sub_949B50((int)v2, v3, v4); break; case 1162692980: sub_949A30((int)v2, v3, v4); break; case 1397641844: sub_948D00((int)v2, (int)v3, v4); break; case 1951945850: sub_949C80((int)v2, v3, v4); break; default: sub_949E00((int)v2, (int)v3, v4); break; } } } while ( !(v2[104] & 0x10) ); } //----- (00945CE0) -------------------------------------------------------- unsigned __int64 __cdecl sub_945CE0(void *a1, void *a2, void *a3) { _DWORD *v3; // ebx signed int v4; // esi signed int i; // edi signed int v6; // esi signed int j; // edi signed int v8; // esi signed int k; // edi void *v10; // eax int v11; // esi int v12; // edi unsigned __int64 result; // rax char v14; // [esp+Ch] [ebp-40h] void *v15; // [esp+54h] [ebp+8h] void *v16; // [esp+58h] [ebp+Ch] v3 = a1; if ( a2 ) sub_944F90((int)a1, a2); if ( a3 ) sub_944F90((int)a1, a3); sub_9468F0((int)a1, *((void **)a1 + 43)); sub_9468F0((int)a1, *((void **)a1 + 148)); sub_9468F0((int)a1, *((void **)a1 + 58)); sub_9468F0((int)a1, *((void **)a1 + 123)); sub_9468F0((int)a1, *((void **)a1 + 124)); sub_9468F0((int)a1, *((void **)a1 + 89)); sub_9468F0((int)a1, *((void **)a1 + 90)); sub_9468F0((int)a1, *((void **)a1 + 91)); if ( *((_DWORD *)a1 + 133) & 0x1000 ) sub_944B20((int)a1, *((void **)a1 + 69)); *((_DWORD *)a1 + 133) &= 0xFFFFEFFF; if ( *((_DWORD *)a1 + 133) & 0x2000 ) sub_9468F0((int)a1, *((void **)a1 + 98)); *((_DWORD *)a1 + 133) &= 0xFFFFDFFF; if ( *((_DWORD *)a1 + 133) & 8 ) sub_9468F0((int)a1, *((void **)a1 + 125)); *((_DWORD *)a1 + 133) &= 0xFFFFFFF7; if ( *((_DWORD *)a1 + 92) ) { v4 = 1 << (8 - *((_BYTE *)a1 + 344)); for ( i = 0; i < v4; ++i ) sub_9468F0((int)a1, *(void **)(*((_DWORD *)a1 + 92) + 4 * i)); sub_9468F0((int)a1, *((void **)a1 + 92)); } if ( *((_DWORD *)a1 + 93) ) { v6 = 1 << (8 - *((_BYTE *)a1 + 344)); for ( j = 0; j < v6; ++j ) sub_9468F0((int)a1, *(void **)(*((_DWORD *)a1 + 93) + 4 * j)); sub_9468F0((int)a1, *((void **)a1 + 93)); } if ( *((_DWORD *)a1 + 94) ) { v8 = 1 << (8 - *((_BYTE *)a1 + 344)); for ( k = 0; k < v8; ++k ) sub_9468F0((int)a1, *(void **)(*((_DWORD *)a1 + 94) + 4 * k)); sub_9468F0((int)a1, *((void **)a1 + 94)); } sub_9468F0((int)a1, *((void **)a1 + 132)); sub_757CF0((_DWORD *)a1 + 29); sub_9468F0((int)a1, *((void **)a1 + 108)); sub_9468F0((int)a1, *((void **)a1 + 121)); v10 = (void *)*((_DWORD *)a1 + 18); qmemcpy(&v14, a1, 0x40u); v11 = *((_DWORD *)a1 + 16); v12 = *((_DWORD *)a1 + 17); v16 = v10; v15 = (void *)*((_DWORD *)a1 + 147); memset(v3, 0, 0x26Cu); result = __PAIR__((unsigned int)v16, (unsigned int)v15); v3[16] = v11; v3[17] = v12; qmemcpy(v3, &v14, 0x40u); v3[18] = v16; v3[147] = v15; return result; } //----- (00945F70) -------------------------------------------------------- void __cdecl sub_945F70(char *a1, int a2, int a3) { __int16 v3; // bx void *v4; // eax int v5; // ebx int v6; // eax v3 = a3; if ( a3 & 0x400 ) sub_94E6D0((int)a1); sub_945310(a1, a2); if ( *(_DWORD *)(a2 + 4) > 0x3FFFFFFFu ) sub_9464B0((int *)a1, "Image is too high to process with png_read_png()"); if ( v3 & 1 ) sub_94A220((int)a1); if ( v3 & 2 ) sub_94A230((int)a1); if ( v3 & 8 ) sub_94E650((int)a1); if ( v3 & 0x10 && ((unsigned __int8)a1[295] < 8u || a1[294] == 3 || sub_94EB40((int)a1, a2, 16)) ) sub_94A240((int)a1); if ( v3 & 0x20 ) sub_94E6E0((int)a1); if ( v3 & 0x40 && sub_94EB40((int)a1, a2, 2) ) { sub_94EB80((int)a1, a2, &a3); sub_94E670((int)a1, a3); } if ( (v3 & 0x80u) != 0 ) sub_94E620((int)a1); if ( v3 & 0x100 ) sub_94E6C0((int)a1); if ( v3 & 0x200 ) sub_94E630((int)a1); if ( a1[108] & 0x40 ) sub_946550((int)a1, "Ignoring extra png_read_update_info() call; row buffer not reallocated"); else sub_947680((int)a1); sub_94A250((int)a1, a2); sub_944BA0((int)a1, a2, 64, 0); if ( !*(_DWORD *)(a2 + 248) ) { v4 = sub_946890((int)a1, 4 * *(_DWORD *)(a2 + 4)); *(_DWORD *)(a2 + 184) |= 0x40u; v5 = 0; for ( *(_DWORD *)(a2 + 248) = v4; v5 < *(_DWORD *)(a2 + 4); ++v5 ) { v6 = sub_94EB60((int)a1, a2); *(_DWORD *)(*(_DWORD *)(a2 + 248) + 4 * v5) = sub_946890((int)a1, v6); } } sub_945660((int)a1, *(void ***)(a2 + 248)); *(_DWORD *)(a2 + 8) |= 0x8000u; sub_945A90(a1, a2); } //----- (00946120) -------------------------------------------------------- void **__cdecl sub_946120(char *a1, int a2, int a3, int a4) { return sub_9450B0(a1, a2, a3, a4, 0, 0, 0); } //----- (00946150) -------------------------------------------------------- int __cdecl sub_946150(_DWORD **a1, void **a2, void **a3) { _DWORD *v3; // esi void *v4; // edi int v5; // ebx int result; // eax int v7; // [esp+Ch] [ebp-8h] void *v8; // [esp+10h] [ebp-4h] v3 = 0; v4 = 0; v8 = 0; if ( a1 ) v3 = *a1; if ( a2 ) v4 = *a2; if ( a3 ) v8 = *a3; v5 = v3[147]; v7 = v3[145]; sub_945CE0(v3, v4, v8); if ( v4 ) { sub_944BA0((int)v3, (int)v4, 0x4000, -1); sub_9467C0(v4, v5, v7); *a2 = 0; } if ( v8 ) { sub_944BA0((int)v3, (int)v8, 0x4000, -1); sub_9467C0(v8, v5, v7); *a3 = 0; } sub_9467C0(v3, v5, v7); *a1 = 0; return result; } //----- (00946210) -------------------------------------------------------- int __cdecl sub_946210(int *a1, int a2, int a3) { int (__cdecl *v3)(int *, int, int); // eax v3 = (int (__cdecl *)(int *, int, int))a1[20]; if ( !v3 ) sub_9464B0(a1, "Call to NULL read function"); return v3(a1, a2, a3); } //----- (00946240) -------------------------------------------------------- size_t __cdecl sub_946240(int a1, void *a2, size_t a3) { size_t result; // eax result = fread(a2, 1u, a3, *(FILE **)(a1 + 84)); if ( result != a3 ) sub_9464B0((int *)a1, "Read Error"); return result; } //----- (00946280) -------------------------------------------------------- int __cdecl sub_946280(_DWORD *a1, int a2, int a3) { int result; // eax a1[21] = a2; result = a3; if ( a3 ) a1[20] = a3; else a1[20] = sub_946240; if ( a1[19] ) { a1[19] = 0; sub_946550((int)a1, "It's an error to set both read_data_fn and write_data_fn in the "); result = sub_946550((int)a1, "same structure. Resetting write_data_fn to NULL."); } a1[83] = 0; return result; } //----- (009462E0) -------------------------------------------------------- char *__usercall sub_9462E0@(int a1@, int a2@, char *a3) { int v3; // esi char *result; // eax signed int v5; // edi signed int v6; // ecx char *v7; // esi v3 = a1; result = 0; v5 = 0; do { v6 = *(unsigned __int8 *)(a2 + v5++ + 284); if ( (unsigned int)(v6 - 65) > 0x39 || v6 > 90 && v6 < 97 ) { result[v3] = 91; result[v3 + 1] = byte_A48C5C[(v6 >> 4) & 0xF]; result[v3 + 2] = byte_A48C5C[v6 & 0xF]; result[v3 + 3] = 93; result += 4; } else { (result++)[v3] = v6; } } while ( v5 < 4 ); if ( a3 ) { *(_WORD *)&result[v3] = 8250; v7 = &result[v3 + 2]; result = strncpy(v7, a3, 0x3Fu); v7[63] = 0; } else { result[v3] = 0; } return result; } //----- (00946370) -------------------------------------------------------- void __cdecl __noreturn sub_946370(int *a1, char *a2) { char *v2; // ebx char *v3; // edi signed int v4; // esi bool v5; // zf char v6; // dl int v7; // ecx char v8; // bl char v9; // dl char v10; // bl FILE *v11; // eax FILE *v12; // eax const char *v13; // [esp-Ch] [ebp-44h] char *v14; // [esp-8h] [ebp-40h] int v15; // [esp-4h] [ebp-3Ch] char *v16; // [esp+20h] [ebp-18h] char v17; // [esp+24h] [ebp-14h] char v18; // [esp+25h] [ebp-13h] char v19; // [esp+26h] [ebp-12h] char v20; // [esp+27h] [ebp-11h] char v21[12]; // [esp+28h] [ebp-10h] if ( *a2 == 35 ) { v16 = (char *)(&v20 - a2); v2 = (char *)(&v17 - a2); v3 = (char *)(&v18 - a2); v4 = 0; while ( 1 ) { v5 = a2[v4] == 32; v6 = a2[v4 + 1]; v7 = (int)&a2[v4]; a2[v4 + (_DWORD)v2] = v6; if ( v5 ) goto LABEL_15; v8 = a2[v4 + 2]; v3[v7] = v8; if ( v6 == 32 ) { ++v4; goto LABEL_15; } v9 = a2[v4 + 3]; *(&v19 + v4) = v9; if ( v8 == 32 ) { v4 += 2; goto LABEL_15; } v10 = a2[v4 + 4]; v16[v7] = v10; if ( v9 == 32 ) { v4 += 3; goto LABEL_15; } v21[v4] = a2[v4 + 5]; if ( v10 == 32 ) break; v4 += 5; if ( v4 >= 15 ) goto LABEL_15; v2 = (char *)(&v17 - a2); v3 = (char *)(&v18 - a2); } v4 += 4; LABEL_15: if ( (unsigned int)(v4 - 2) > 0xC ) { v15 = v4; v14 = a2; v13 = "libpng error: %s, offset=%d\n"; } else { v15 = (int)&a2[v4]; v14 = &v17; *((_BYTE *)&v16 + v4 + 3) = 0; v13 = "libpng error no. %s: %s\n"; } v11 = (FILE *)sub_7D6CEE(); fprintf(v11 + 2, v13, v14, v15); } else { v12 = (FILE *)sub_7D6CEE(); fprintf(v12 + 2, "libpng error: %s\n", a2); } longjmp(a1, 1); } // 946370: using guessed type char var_10[12]; //----- (00946490) -------------------------------------------------------- _DWORD *__cdecl sub_946490(_DWORD *a1, int a2, int a3, int a4) { _DWORD *result; // eax result = a1; a1[18] = a2; a1[16] = a3; a1[17] = a4; return result; } //----- (009464B0) -------------------------------------------------------- void __cdecl __noreturn sub_9464B0(int *a1, char *a2) { int v2; // edx char *v3; // esi signed int v4; // eax int v5; // edi int v6; // ecx void (__cdecl *v7)(int *, char *); // eax __int16 v8; // [esp+Ch] [ebp-14h] v2 = a1[27]; v3 = a2; if ( !(v2 & 0xC0000) ) goto LABEL_17; if ( *a2 == 35 ) { v4 = 1; while ( 1 ) { if ( a2[v4] == 32 ) goto LABEL_9; if ( a2[v4 + 1] == 32 ) break; v4 += 2; if ( v4 >= 15 ) goto LABEL_9; } ++v4; LABEL_9: if ( !(v2 & 0x80000) ) { v3 = &a2[v4]; goto LABEL_17; } v5 = v4 - 1; v6 = 0; if ( v4 - 1 > 0 ) { memcpy(&v8, a2 + 1, v4 - 1); v6 = v5; } *((_BYTE *)&v8 + v6) = 0; } else { if ( !(v2 & 0x80000) ) goto LABEL_17; v8 = 48; } v3 = (char *)&v8; LABEL_17: v7 = (void (__cdecl *)(int *, char *))a1[16]; if ( v7 ) v7(a1, v3); sub_946370(a1, v3); } //----- (00946550) -------------------------------------------------------- int __cdecl sub_946550(int a1, _BYTE *a2) { signed int v2; // eax int (__cdecl *v3)(int, _BYTE *); // esi _BYTE *v4; // eax int result; // eax char *v6; // ebx char *v7; // edi signed int v8; // esi bool v9; // zf char v10; // dl int v11; // ecx char v12; // bl char v13; // dl char v14; // bl int v15; // ST0C_4 FILE *v16; // eax _BYTE *v17; // ST0C_4 FILE *v18; // eax char *v19; // [esp+10h] [ebp-18h] char v20; // [esp+14h] [ebp-14h] char v21; // [esp+15h] [ebp-13h] char v22; // [esp+16h] [ebp-12h] char v23; // [esp+17h] [ebp-11h] char v24[12]; // [esp+18h] [ebp-10h] v2 = 0; if ( *(_DWORD *)(a1 + 108) & 0xC0000 && *a2 == 35 ) { v2 = 1; while ( a2[v2] != 32 ) { if ( a2[v2 + 1] == 32 ) { ++v2; break; } v2 += 2; if ( v2 >= 15 ) break; } } v3 = *(int (__cdecl **)(int, _BYTE *))(a1 + 68); v4 = &a2[v2]; if ( v3 ) return v3(a1, v4); if ( *v4 != 35 ) goto LABEL_30; v19 = (char *)(&v22 - v4); v6 = (char *)(&v20 - v4); v7 = (char *)(&v21 - v4); v8 = 0; while ( 1 ) { v9 = v4[v8] == 32; v10 = v4[v8 + 1]; v11 = (int)&v4[v8]; v4[v8 + (_DWORD)v6] = v10; if ( v9 ) break; v12 = v4[v8 + 2]; v7[v11] = v12; if ( v10 == 32 ) { ++v8; break; } v13 = v4[v8 + 3]; v19[v11] = v13; if ( v12 == 32 ) { v8 += 2; break; } v14 = v4[v8 + 4]; *(&v23 + v8) = v14; if ( v13 == 32 ) { v8 += 3; break; } v24[v8] = v4[v8 + 5]; if ( v14 == 32 ) { v8 += 4; break; } v8 += 5; if ( v8 >= 15 ) break; v6 = (char *)(&v20 - v4); v7 = (char *)(&v21 - v4); } if ( (unsigned int)(v8 - 2) > 0xC ) { LABEL_30: v17 = v4; v18 = (FILE *)sub_7D6CEE(); result = fprintf(v18 + 2, "libpng warning: %s\n", v17); } else { v15 = (int)&v4[v8]; *((_BYTE *)&v19 + v8 + 3) = 0; v16 = (FILE *)sub_7D6CEE(); result = fprintf(v16 + 2, "libpng warning no. %s: %s\n", &v20, v15); } return result; } // 946550: using guessed type char var_10[12]; //----- (009466C0) -------------------------------------------------------- void __cdecl __noreturn sub_9466C0(int a1, char *a2) { char v2; // [esp+4h] [ebp-58h] sub_9462E0((int)&v2, a1, a2); sub_9464B0((int *)a1, &v2); } //----- (009466F0) -------------------------------------------------------- int __cdecl sub_9466F0(int a1, char *a2) { char v3; // [esp+4h] [ebp-58h] sub_9462E0((int)&v3, a1, a2); return sub_946550(a1, &v3); } //----- (00946730) -------------------------------------------------------- void *__cdecl sub_946730(int a1, int (__cdecl *a2)(char *, size_t), int a3) { size_t v3; // esi void *v4; // eax void *v5; // edi char v7; // [esp+4h] [ebp-270h] int v8; // [esp+248h] [ebp-2Ch] if ( a1 == 2 ) { v3 = 288; } else { if ( a1 != 1 ) return 0; v3 = 620; } if ( a2 ) { v8 = a3; v4 = (void *)a2(&v7, v3); } else { v4 = malloc(v3); } v5 = v4; if ( v4 ) memset(v4, 0, v3); return v5; } //----- (009467C0) -------------------------------------------------------- void __cdecl sub_9467C0(void *a1, int a2, int a3) { char v3; // [esp+0h] [ebp-270h] int v4; // [esp+244h] [ebp-2Ch] if ( a1 ) { if ( a2 ) { v4 = a3; ((void (__cdecl *)(char *, void *))a2)(&v3, a1); } else { free(a1); } } } //----- (00946820) -------------------------------------------------------- void *__cdecl sub_946820(int a1, void *a2, void *a3, size_t a4) { return memcpy(a2, a3, a4); } //----- (00946840) -------------------------------------------------------- void *__cdecl sub_946840(int a1, void *a2, int a3, size_t a4) { return memset(a2, a3, a4); } //----- (00946860) -------------------------------------------------------- _DWORD *__cdecl sub_946860(_DWORD *a1, int a2, int a3, int a4) { _DWORD *result; // eax result = a1; a1[145] = a2; a1[146] = a3; a1[147] = a4; return result; } //----- (00946890) -------------------------------------------------------- void *__cdecl sub_946890(int a1, size_t a2) { int (__cdecl *v2)(int, size_t); // eax void *result; // eax if ( !a1 || !a2 ) return 0; v2 = *(int (__cdecl **)(int, size_t))(a1 + 584); if ( v2 ) result = (void *)v2(a1, a2); else result = malloc(a2); if ( !result && !(*(_DWORD *)(a1 + 108) & 0x100000) ) sub_9464B0((int *)a1, "Out of Memory!"); return result; } //----- (009468F0) -------------------------------------------------------- void __cdecl sub_9468F0(int a1, void *a2) { void (__cdecl *v2)(int, void *); // eax if ( a1 && a2 ) { v2 = *(void (__cdecl **)(int, void *))(a1 + 588); if ( v2 ) v2(a1, a2); else free(a2); } } //----- (00946920) -------------------------------------------------------- void *__cdecl sub_946920(int a1, size_t a2) { int v2; // edi int (__cdecl *v3)(int, size_t); // eax void *result; // eax v2 = *(_DWORD *)(a1 + 108); *(_DWORD *)(a1 + 108) |= 0x100000u; if ( a2 ) { v3 = *(int (__cdecl **)(int, size_t))(a1 + 584); if ( v3 ) result = (void *)v3(a1, a2); else result = malloc(a2); if ( !result && !(*(_DWORD *)(a1 + 108) & 0x100000) ) sub_9464B0((int *)a1, "Out of Memory!"); *(_DWORD *)(a1 + 108) = v2; } else { *(_DWORD *)(a1 + 108) = v2; result = 0; } return result; } //----- (00946990) -------------------------------------------------------- int __cdecl sub_946990(unsigned __int8 *a1) { return a1[3] + ((a1[2] + ((a1[1] + (*a1 << 8)) << 8)) << 8); } //----- (009469C0) -------------------------------------------------------- void __cdecl sub_9469C0(int *a1, _DWORD *a2, unsigned int a3) { sub_946210(a1, (int)a2, a3); sub_944B50((int)a1, a2, a3); } //----- (009469F0) -------------------------------------------------------- char *__cdecl sub_9469F0(int a1, int a2, char *a3, int a4, size_t a5, size_t *a6) { int v6; // edx int v7; // ecx size_t v8; // ebx char *v9; // edi signed int v10; // eax int v11; // ecx char *v12; // eax int v13; // edx char *v14; // eax size_t v15; // eax char *result; // eax signed int v17; // [esp+8h] [ebp-48h] void *v18; // [esp+Ch] [ebp-44h] char v19; // [esp+18h] [ebp-38h] if ( !a2 ) { v6 = *(_DWORD *)(a1 + 176); *(_DWORD *)(a1 + 116) = &a3[a5]; v7 = *(_DWORD *)(a1 + 172); v8 = 0; *(_DWORD *)(a1 + 120) = a4 - a5; *(_DWORD *)(a1 + 128) = v7; *(_DWORD *)(a1 + 132) = v6; v9 = 0; if ( a4 != a5 ) { while ( 1 ) { v10 = sub_7569A0(a1 + 116, 1); v17 = v10; if ( v10 ) { if ( v10 != 1 ) break; } v11 = *(_DWORD *)(a1 + 132); if ( !v11 || v10 == 1 ) { if ( v9 ) { v18 = v9; v12 = (char *)sub_946920(a1, v8 - v11 + *(_DWORD *)(a1 + 176) + 1); v9 = v12; if ( !v12 ) { sub_9468F0(a1, v18); sub_9468F0(a1, a3); sub_9464B0((int *)a1, "Not enough memory to decompress chunk.."); } memcpy(v12, v18, v8); sub_9468F0(a1, v18); memcpy(&v9[v8], *(const void **)(a1 + 172), *(_DWORD *)(a1 + 176) - *(_DWORD *)(a1 + 132)); v8 += *(_DWORD *)(a1 + 176) - *(_DWORD *)(a1 + 132); } else { v8 = *(_DWORD *)(a1 + 176) + a5 - v11; v9 = (char *)sub_946920(a1, v8 + 1); if ( !v9 ) { sub_9468F0(a1, a3); sub_9464B0((int *)a1, "Not enough memory to decompress chunk."); } memcpy(&v9[a5], *(const void **)(a1 + 172), v8 - a5); memcpy(v9, a3, a5); } v9[v8] = 0; if ( v17 == 1 ) goto LABEL_43; v13 = *(_DWORD *)(a1 + 176); v10 = v17; *(_DWORD *)(a1 + 128) = *(_DWORD *)(a1 + 172); *(_DWORD *)(a1 + 132) = v13; } if ( !*(_DWORD *)(a1 + 120) ) goto LABEL_31; } if ( *(_DWORD *)(a1 + 140) ) sub_946550(a1, *(_BYTE **)(a1 + 140)); else sub_946550(a1, aErrorDecodingC); sub_756750((_DWORD *)(a1 + 116)); *(_DWORD *)(a1 + 120) = 0; if ( !v9 ) { v8 = a5 + 32; v14 = (char *)sub_946920(a1, a5 + 32); v9 = v14; if ( !v14 ) { sub_9468F0(a1, a3); sub_9464B0((int *)a1, "Not enough memory to decompress chunk"); } memcpy(v14, a3, a5); } v9[v8 - 1] = 0; v8 = a3 - v9 + a4 - 1; if ( v8 >= 0x1F ) v8 = 31; memcpy(&v9[a5], aErrorDecodingC, v8 + 1); v10 = v17; LABEL_31: switch ( v10 ) { case 1: goto LABEL_43; case -5: sprintf(&v19, "Buffer error in compressed datastream in %s chunk", a1 + 284); LABEL_37: sub_946550(a1, &v19); v15 = a5; v8 = a5; if ( !v9 ) { v9 = (char *)sub_946920(a1, a5 + 1); if ( !v9 ) { sub_9468F0(a1, a3); sub_9464B0((int *)a1, "Not enough memory for text."); } memcpy(v9, a3, a5); v15 = a5; } v9[v15] = 0; LABEL_43: sub_756750((_DWORD *)(a1 + 116)); *(_DWORD *)(a1 + 120) = 0; sub_9468F0(a1, a3); *a6 = v8; return v9; case -3: sprintf(&v19, "Data error in compressed datastream in %s chunk", a1 + 284); goto LABEL_37; } } sprintf(&v19, "Incomplete compressed datastream in %s chunk", a1 + 284); goto LABEL_37; } sprintf(&v19, "Unknown zTXt compression type %d", a2); sub_946550(a1, &v19); result = a3; a3[a5] = 0; *a6 = a5; return result; } //----- (00946D70) -------------------------------------------------------- unsigned __int8 __cdecl sub_946D70(int a1, unsigned __int8 *a2) { unsigned __int8 v2; // al unsigned __int8 v3; // al unsigned __int8 v4; // al unsigned __int8 result; // al v2 = *a2; if ( *a2 < 0x41u || v2 > 0x7Au || v2 > 0x5Au && v2 < 0x61u || (v3 = a2[1], v3 < 0x41u) || v3 > 0x7Au || v3 > 0x5Au && v3 < 0x61u || (v4 = a2[2], v4 < 0x41u) || v4 > 0x7Au || v4 > 0x5Au && v4 < 0x61u || (result = a2[3], result < 0x41u) || result > 0x7Au || result > 0x5Au && result < 0x61u ) { sub_9466C0(a1, "invalid chunk type"); } return result; } //----- (00946DE0) -------------------------------------------------------- void *__cdecl sub_946DE0(int a1, void *a2, int a3) { unsigned __int8 v3; // al unsigned int v4; // eax void *result; // eax unsigned int v6; // ecx unsigned __int8 *v7; // esi size_t v8; // edi unsigned __int8 v9; // bl _BYTE *v10; // edi signed int v11; // edx _BYTE *v12; // edi signed int v13; // edx _BYTE *v14; // edi signed int v15; // edx int v16; // [esp+0h] [ebp-14h] signed int v17; // [esp+0h] [ebp-14h] signed int v18; // [esp+0h] [ebp-14h] signed int v19; // [esp+4h] [ebp-10h] signed int v20; // [esp+4h] [ebp-10h] signed int v21; // [esp+4h] [ebp-10h] signed int v22; // [esp+8h] [ebp-Ch] int v23; // [esp+8h] [ebp-Ch] int v24; // [esp+8h] [ebp-Ch] int v25; // [esp+Ch] [ebp-8h] signed int v26; // [esp+Ch] [ebp-8h] signed int v27; // [esp+Ch] [ebp-8h] signed int v28; // [esp+Ch] [ebp-8h] char *v29; // [esp+10h] [ebp-4h] signed int v30; // [esp+10h] [ebp-4h] signed int v31; // [esp+10h] [ebp-4h] signed int v32; // [esp+10h] [ebp-4h] if ( a3 == 255 ) { v3 = *(_BYTE *)(a1 + 267); if ( v3 < 8u ) v4 = (*(_DWORD *)(a1 + 200) * (unsigned int)v3 + 7) >> 3; else v4 = *(_DWORD *)(a1 + 200) * ((unsigned int)v3 >> 3); result = memcpy(a2, (const void *)(*(_DWORD *)(a1 + 236) + 1), v4); } else { result = (void *)a1; v6 = *(unsigned __int8 *)(a1 + 267); v7 = (unsigned __int8 *)(*(_DWORD *)(a1 + 236) + 1); switch ( v6 ) { case 1u: v14 = a2; v32 = 128; if ( *(_DWORD *)(a1 + 112) & 0x10000 ) { v28 = 0; v18 = 7; v21 = 1; } else { v28 = 7; v18 = 0; v21 = -1; } v15 = v28; if ( *(_DWORD *)(a1 + 200) ) { v24 = *(_DWORD *)(a1 + 200); do { if ( a3 & v32 ) *v14 = ((((unsigned int)*v7 >> v15) & 1) << v15) | *v14 & (32639 >> (7 - v15)); if ( v15 == v18 ) { v15 = v28; ++v7; ++v14; } else { v15 += v21; } result = (void *)1; if ( v32 == 1 ) v32 = 128; else v32 >>= 1; --v24; } while ( v24 ); } break; case 2u: v12 = a2; v31 = 128; if ( *(_DWORD *)(a1 + 112) & 0x10000 ) { v27 = 0; v17 = 6; v20 = 2; } else { v27 = 6; v17 = 0; v20 = -2; } v13 = v27; if ( *(_DWORD *)(a1 + 200) ) { v23 = *(_DWORD *)(a1 + 200); do { if ( a3 & v31 ) *v12 = ((((unsigned int)*v7 >> v13) & 3) << v13) | *v12 & (16191 >> (6 - v13)); if ( v13 == v17 ) { v13 = v27; ++v7; ++v12; } else { v13 += v20; } result = (void *)1; if ( v31 == 1 ) v31 = 128; else v31 >>= 1; --v23; } while ( v23 ); } break; case 4u: v10 = a2; v30 = 128; if ( *(_DWORD *)(a1 + 112) & 0x10000 ) { result = (void *)4; v26 = 0; v22 = 4; v19 = 4; } else { v26 = 4; v22 = 0; v19 = -4; } v11 = v26; if ( *(_DWORD *)(a1 + 200) ) { v16 = *(_DWORD *)(a1 + 200); do { if ( a3 & v30 ) *v10 = ((((unsigned int)*v7 >> v11) & 0xF) << v11) | *v10 & (3855 >> (4 - v11)); if ( v11 == v22 ) { v11 = v26; ++v7; ++v10; } else { v11 += v19; } result = (void *)1; if ( v30 == 1 ) v30 = 128; else v30 >>= 1; --v16; } while ( v16 ); } break; default: result = *(void **)(a1 + 200); v29 = (char *)a2; v8 = v6 >> 3; v9 = -128; if ( result ) { v25 = *(_DWORD *)(a1 + 200); do { if ( v9 & (unsigned __int8)a3 ) result = memcpy(v29, v7, v8); v29 += v8; v7 += v8; if ( v9 == 1 ) v9 = -128; else v9 >>= 1; --v25; } while ( v25 ); } break; } } return result; } //----- (009470B0) -------------------------------------------------------- unsigned int __cdecl sub_9470B0(unsigned int a1) { unsigned int result; // eax int v2; // ecx int v3; // edx int v4; // edi int v5; // eax unsigned int v6; // esi int v7; // ebx size_t v8; // esi char *v9; // ebx char *v10; // edi unsigned __int8 v11; // al _BYTE *v12; // edi int v13; // edx int v14; // esi char v15; // al _BYTE *v16; // edi int v17; // edx int v18; // esi char v19; // al _BYTE *v20; // edi int v21; // edx int v22; // esi char v23; // al int v24; // [esp+8h] [ebp-34h] int *v25; // [esp+Ch] [ebp-30h] int v26; // [esp+10h] [ebp-2Ch] unsigned int v27; // [esp+14h] [ebp-28h] int v28; // [esp+14h] [ebp-28h] int v29; // [esp+14h] [ebp-28h] _BYTE *v30; // [esp+18h] [ebp-24h] signed int v31; // [esp+18h] [ebp-24h] signed int v32; // [esp+18h] [ebp-24h] signed int v33; // [esp+1Ch] [ebp-20h] _BYTE *v34; // [esp+1Ch] [ebp-20h] _BYTE *v35; // [esp+1Ch] [ebp-20h] int v36; // [esp+20h] [ebp-1Ch] int v37; // [esp+20h] [ebp-1Ch] unsigned int v38; // [esp+20h] [ebp-1Ch] signed int v39; // [esp+20h] [ebp-1Ch] signed int v40; // [esp+24h] [ebp-18h] signed int v41; // [esp+24h] [ebp-18h] int v42; // [esp+24h] [ebp-18h] unsigned int v43; // [esp+28h] [ebp-14h] signed int v44; // [esp+28h] [ebp-14h] signed int v45; // [esp+28h] [ebp-14h] signed int v46; // [esp+28h] [ebp-14h] char v47; // [esp+2Fh] [ebp-Dh] char v48; // [esp+2Fh] [ebp-Dh] char v49; // [esp+30h] [ebp-Ch] unsigned int v50; // [esp+34h] [ebp-8h] result = a1; v2 = *(_DWORD *)(a1 + 236) + 1; v3 = *(_DWORD *)(a1 + 112); v25 = (int *)(a1 + 256); if ( *(_DWORD *)(a1 + 236) != -1 && a1 != -256 ) { v4 = dword_A48868[*(unsigned __int8 *)(a1 + 292)]; v5 = *(_DWORD *)(a1 + 256); v6 = *(unsigned __int8 *)(a1 + 267); v7 = v4 * v5; v24 = dword_A48868[*(unsigned __int8 *)(a1 + 292)]; v26 = v4 * v5; switch ( v6 ) { case 1u: v20 = (_BYTE *)(v2 + ((unsigned int)(v7 - 1) >> 3)); v35 = (_BYTE *)(v2 + ((unsigned int)(v5 - 1) >> 3)); if ( v3 & 0x10000 ) { v21 = ((_BYTE)v5 - 1) & 7; v22 = ((_BYTE)v7 - 1) & 7; v32 = 7; v46 = 0; v39 = -1; } else { v21 = 7 - (((_BYTE)v5 - 1) & 7); v22 = 7 - (((_BYTE)v7 - 1) & 7); v32 = 0; v46 = 7; v39 = 1; } v42 = v21; v50 = 0; if ( v5 ) { do { v23 = (*v35 >> v21) & 1; if ( v24 > 0 ) { v29 = v24; do { *v20 = (v23 << v22) | *v20 & (32639 >> (7 - v22)); if ( v22 == v46 ) { v22 = v32; --v20; } else { v22 += v39; } --v29; } while ( v29 ); v21 = v42; v7 = v26; } if ( v21 == v46 ) { v21 = v32; --v35; } else { v21 += v39; } v42 = v21; ++v50; } while ( v50 < *v25 ); } break; case 2u: v16 = (_BYTE *)(v2 + ((unsigned int)(v7 - 1) >> 2)); v34 = (_BYTE *)(v2 + ((unsigned int)(v5 - 1) >> 2)); if ( v3 & 0x10000 ) { v17 = (2 * v5 - 1) & 6; v18 = (2 * v7 - 1) & 6; v31 = 6; v45 = 0; v41 = -2; } else { v17 = 2 * (3 - (((_BYTE)v5 - 1) & 3)); v18 = 2 * (3 - (((_BYTE)v7 - 1) & 3)); v31 = 0; v45 = 6; v41 = 2; } v38 = 0; if ( v5 ) { do { v19 = (*v34 >> v17) & 3; v48 = (*v34 >> v17) & 3; if ( v24 > 0 ) { v28 = v24; while ( 1 ) { *v16 = (v19 << v18) | *v16 & (16191 >> (6 - v18)); if ( v18 == v45 ) { v18 = v31; --v16; } else { v18 += v41; } if ( !--v28 ) break; v19 = v48; } v7 = v26; } if ( v17 == v45 ) { v17 = v31; --v34; } else { v17 += v41; } ++v38; } while ( v38 < *v25 ); } break; case 4u: v12 = (_BYTE *)(v2 + ((unsigned int)(v7 - 1) >> 1)); v30 = (_BYTE *)(v2 + ((unsigned int)(v5 - 1) >> 1)); if ( v3 & 0x10000 ) { v13 = (-1 - 4 * (_BYTE)v5) & 4; v14 = (-1 - 4 * (_BYTE)v7) & 4; v33 = 4; v40 = 0; v44 = -4; } else { v13 = 4 - 4 * (((_BYTE)v5 - 1) & 1); v14 = 4 - 4 * (((_BYTE)v7 - 1) & 1); v33 = 0; v40 = 4; v44 = 4; } v27 = 0; if ( v5 ) { do { v15 = (*v30 >> v13) & 0xF; v47 = (*v30 >> v13) & 0xF; if ( v24 > 0 ) { v37 = v24; while ( 1 ) { *v12 = (v15 << v14) | *v12 & (3855 >> (4 - v14)); if ( v14 == v40 ) { v14 = v33; --v12; } else { v14 += v44; } if ( !--v37 ) break; v15 = v47; } v7 = v26; } if ( v13 == v40 ) { v13 = v33; --v30; } else { v13 += v44; } ++v27; } while ( v27 < *v25 ); } break; default: v8 = v6 >> 3; v9 = (char *)(v2 + v8 * (v5 - 1)); v10 = (char *)(v2 + v8 * (v26 - 1)); v43 = 0; if ( v5 ) { do { memcpy(&v49, v9, v8); if ( v24 > 0 ) { v36 = v24; do { memcpy(v10, &v49, v8); v10 -= v8; --v36; } while ( v36 ); } v9 -= v8; ++v43; } while ( v43 < *v25 ); } v7 = v26; break; } v11 = *(_BYTE *)(a1 + 267); *v25 = v7; if ( v11 < 8u ) result = (v7 * (unsigned int)v11 + 7) >> 3; else result = v7 * ((unsigned int)v11 >> 3); *(_DWORD *)(a1 + 260) = result; } return result; } //----- (009474C0) -------------------------------------------------------- char __cdecl sub_9474C0(int a1, int a2, _BYTE *a3, unsigned int a4, int a5) { unsigned int v5; // eax unsigned int v6; // esi _BYTE *v7; // ecx _BYTE *v8; // edx int v9; // esi unsigned int v10; // esi unsigned int v11; // ecx _BYTE *v12; // ecx _BYTE *v13; // edx unsigned int v14; // edi int v15; // esi unsigned int v16; // esi int v17; // ebx _BYTE *v18; // edi int v19; // ecx int v20; // esi _BYTE *v21; // edx int v22; // ecx int v23; // edx int v24; // ebx int v25; // ecx int v26; // edi int v27; // ebx int v28; // ecx int v29; // esi int v30; // eax char v31; // cl bool v32; // zf char v34; // [esp+Ch] [ebp-1Ch] char v35; // [esp+10h] [ebp-18h] char v36; // [esp+14h] [ebp-14h] int v37; // [esp+18h] [ebp-10h] int v38; // [esp+1Ch] [ebp-Ch] int v39; // [esp+24h] [ebp-4h] _BYTE *v40; // [esp+40h] [ebp+18h] int v41; // [esp+40h] [ebp+18h] LOBYTE(v5) = a5; switch ( a5 ) { case 0: return v5; case 1: v6 = *(_DWORD *)(a2 + 4); v5 = (*(unsigned __int8 *)(a2 + 11) + 7) >> 3; v7 = &a3[v5]; if ( v5 < v6 ) { v8 = a3; v9 = v6 - v5; do { LOBYTE(v5) = *v8; *v7++ += *v8++; --v9; } while ( v9 ); } break; case 2: v10 = *(_DWORD *)(a2 + 4); v5 = (unsigned int)a3; v11 = 0; if ( v10 ) { do *(_BYTE *)v5++ += *(_BYTE *)(v11++ + a4); while ( v11 < v10 ); } break; case 3: v12 = a3; v13 = (_BYTE *)a4; v5 = (*(unsigned __int8 *)(a2 + 11) + 7) >> 3; v14 = *(_DWORD *)(a2 + 4) - v5; if ( v5 ) { v15 = (*(unsigned __int8 *)(a2 + 11) + 7) >> 3; do { LOBYTE(v5) = *v13 >> 1; *v12 += v5; ++v13; ++v12; --v15; } while ( v15 ); } v16 = 0; if ( v14 ) { v17 = v13 - v12; do { v5 = ((unsigned __int8)a3[v16] + (unsigned __int8)v12[v17]) / 2; *v12 += v5; ++v16; ++v12; } while ( v16 < v14 ); } break; case 4: v18 = a3; v5 = a4; v19 = (*(unsigned __int8 *)(a2 + 11) + 7) >> 3; v20 = *(_DWORD *)(a2 + 4) - v19; v40 = a3; v21 = (_BYTE *)a4; if ( v19 ) { v41 = (*(unsigned __int8 *)(a2 + 11) + 7) >> 3; do { *v18++ += *v21++; --v41; } while ( v41 ); v40 = v18; } if ( v20 ) { v22 = (int)&a3[-a4]; v23 = (int)&v21[-a4]; v38 = v23; v39 = v20; while ( 1 ) { v24 = *(unsigned __int8 *)(v22 + v5); v25 = *(unsigned __int8 *)v5; v37 = v5 + 1; v35 = *(_BYTE *)(v23 + v5); v26 = *(unsigned __int8 *)(v23 + v5) - v25; v34 = *(_BYTE *)v5; v36 = v24; v27 = v24 - v25; v28 = abs(v26); v29 = abs(v27); v30 = abs(v27 + v26); if ( v28 > v29 || v28 > v30 ) { v31 = v35; if ( v29 > v30 ) v31 = v34; } else { v31 = v36; } *v40 += v31; LOBYTE(v5) = (_BYTE)v40 + 1; v32 = v39-- == 1; ++v40; if ( v32 ) break; v5 = v37; v22 = (int)&a3[-a4]; v23 = v38; } } break; default: sub_946550(a1, "Ignoring bad adaptive filter type"); LOBYTE(v5) = (_BYTE)a3; *a3 = 0; break; } return v5; } //----- (00947680) -------------------------------------------------------- void *__cdecl sub_947680(int a1) { unsigned int v1; // ecx unsigned int v2; // eax unsigned __int8 v3; // cl unsigned int v4; // ecx int v5; // ecx int v6; // eax int v7; // ebx char v8; // cl char v9; // cl signed int v10; // ecx char v11; // cl int v12; // edx unsigned int v13; // edx unsigned int v14; // ecx char *v15; // eax bool v16; // cf bool v17; // zf void *v18; // eax size_t v19; // ST0C_4 void *result; // eax *(_DWORD *)(a1 + 120) = 0; sub_94D690(a1); if ( *(_BYTE *)(a1 + 291) ) { if ( *(_BYTE *)(a1 + 112) & 2 ) *(_DWORD *)(a1 + 208) = *(_DWORD *)(a1 + 204); else *(_DWORD *)(a1 + 208) = (*(_DWORD *)(a1 + 204) + 7) / 8u; v1 = dword_A48868[*(unsigned __int8 *)(a1 + 292)]; v2 = (*(_DWORD *)(a1 + 200) - dword_A4884C[*(unsigned __int8 *)(a1 + 292)] + v1 - 1) / v1; v3 = *(_BYTE *)(a1 + 297); *(_DWORD *)(a1 + 224) = v2; if ( v3 < 8u ) v4 = (v2 * v3 + 7) >> 3; else v4 = v2 * ((unsigned int)v3 >> 3); *(_DWORD *)(a1 + 220) = v4 + 1; } else { v5 = *(_DWORD *)(a1 + 216); *(_DWORD *)(a1 + 208) = *(_DWORD *)(a1 + 204); *(_DWORD *)(a1 + 224) = *(_DWORD *)(a1 + 200); *(_DWORD *)(a1 + 220) = v5 + 1; } v6 = *(unsigned __int8 *)(a1 + 297); v7 = *(_DWORD *)(a1 + 112); if ( v7 & 4 && *(_BYTE *)(a1 + 295) < 8u ) v6 = 8; if ( v7 & 0x1000 ) { v8 = *(_BYTE *)(a1 + 294); if ( v8 == 3 ) { v6 = 8 * (*(_WORD *)(a1 + 282) != 0) + 24; } else if ( v8 ) { if ( v8 == 2 && *(_WORD *)(a1 + 282) ) v6 = 4 * v6 / 3; } else { if ( v6 < 8 ) v6 = 8; if ( *(_WORD *)(a1 + 282) ) v6 *= 2; } } if ( v7 & 0x8000 ) { v9 = *(_BYTE *)(a1 + 294); if ( v9 == 3 ) { v6 = 32; goto LABEL_32; } if ( v9 ) { if ( v9 != 2 ) goto LABEL_32; v10 = v6 > 32 ? 64 : 32; } else { v10 = v6 > 8 ? 32 : 16; } v6 = v10; } LABEL_32: if ( v7 & 0x4000 ) { if ( *(_WORD *)(a1 + 282) && v7 & 0x1000 || v7 & 0x8000 || (v11 = *(_BYTE *)(a1 + 294), v11 == 4) ) { v6 = v6 > 16 ? 64 : 32; } else if ( v6 > 8 ) { v6 = v11 != 6 ? 48 : 64; } else { v6 = 8 * (v11 == 6) + 24; } } if ( v7 & 0x100000 ) { v12 = *(unsigned __int8 *)(a1 + 100); if ( v12 * *(unsigned __int8 *)(a1 + 101) > v6 ) v6 = v12 * *(unsigned __int8 *)(a1 + 101); } v13 = (*(_DWORD *)(a1 + 200) + 7) & 0xFFFFFFF8; if ( v6 < 8 ) v14 = (v13 * v6 + 7) >> 3; else v14 = v13 * ((unsigned int)v6 >> 3); v15 = (char *)sub_946890(a1, ((v6 + 7) >> 3) + v14 + 65); *(_DWORD *)(a1 + 592) = v15; v16 = *(_DWORD *)(a1 + 216) < 0xFFFFFFFE; v17 = *(_DWORD *)(a1 + 216) == -2; *(_DWORD *)(a1 + 236) = v15 + 32; if ( !v16 && !v17 ) sub_9464B0((int *)a1, "Row has too many bytes to allocate in memory."); v18 = sub_946890(a1, *(_DWORD *)(a1 + 216) + 1); v19 = *(_DWORD *)(a1 + 216) + 1; *(_DWORD *)(a1 + 232) = v18; result = sub_946840(a1, v18, 0, v19); *(_DWORD *)(a1 + 108) |= 0x40u; return result; } //----- (00947940) -------------------------------------------------------- int __cdecl sub_947940(int *a1, unsigned __int8 *a2) { int v2; // edx int v3; // eax v2 = a2[2]; v3 = a2[3]; if ( v3 + ((v2 + ((a2[1] + ((unsigned int)*a2 << 8)) << 8)) << 8) > 0x7FFFFFFF ) sub_9464B0(a1, "PNG unsigned integer out of range.\n"); return v3 + ((v2 + ((a2[1] + (*a2 << 8)) << 8)) << 8); } //----- (00947990) -------------------------------------------------------- signed int __cdecl sub_947990(_DWORD *a1, unsigned int a2) { int v2; // esi unsigned int v3; // edi unsigned int v4; // ebx int v5; // ST14_4 _DWORD *v6; // ebx signed int v7; // edi unsigned int v9; // [esp+Ch] [ebp-4h] v2 = (int)a1; v3 = a2; v9 = a1[44]; if ( a2 > v9 ) { do { v4 = *(_DWORD *)(v2 + 176); v5 = *(_DWORD *)(v2 + 176); a1 = *(_DWORD **)(v2 + 172); sub_946210((int *)v2, (int)a1, v5); sub_944B50(v2, a1, v4); v3 -= v9; } while ( v3 > v9 ); } if ( v3 ) { v6 = *(_DWORD **)(v2 + 172); sub_946210((int *)v2, *(_DWORD *)(v2 + 172), v3); sub_944B50(v2, v6, v3); } v7 = 1; if ( *(_BYTE *)(v2 + 284) & 0x20 ) { if ( (*(_DWORD *)(v2 + 108) & 0x300) == 768 ) goto LABEL_9; } else if ( *(_DWORD *)(v2 + 108) & 0x800 ) { LABEL_9: v7 = 0; goto LABEL_10; } LABEL_10: sub_946210((int *)v2, (int)&a1, 4); if ( !v7 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8) == *(_DWORD *)(v2 + 272) ) return 0; if ( (!(*(_BYTE *)(v2 + 284) & 0x20) || *(_DWORD *)(v2 + 108) & 0x200) && (*(_BYTE *)(v2 + 284) & 0x20 || !(*(_DWORD *)(v2 + 108) & 0x400)) ) { sub_9466C0(v2, "CRC error"); } sub_9466F0(v2, "CRC error"); return 1; } //----- (00947AD0) -------------------------------------------------------- void __cdecl sub_947AD0(int a1, int a2, int a3) { unsigned int v3; // edi unsigned int v4; // ebx signed int v5; // ecx signed int v6; // edx unsigned __int8 v7; // ST38_1 unsigned __int8 v8; // ST30_1 unsigned __int8 v9; // al unsigned int v10; // eax unsigned __int8 v11; // [esp+18h] [ebp-14h] unsigned __int8 v12; // [esp+19h] [ebp-13h] unsigned __int8 v13; // [esp+1Ah] [ebp-12h] unsigned __int8 v14; // [esp+1Bh] [ebp-11h] unsigned __int8 v15; // [esp+1Ch] [ebp-10h] unsigned __int8 v16; // [esp+1Dh] [ebp-Fh] unsigned __int8 v17; // [esp+1Eh] [ebp-Eh] unsigned __int8 v18; // [esp+1Fh] [ebp-Dh] unsigned __int8 v19; // [esp+20h] [ebp-Ch] unsigned __int8 v20; // [esp+21h] [ebp-Bh] unsigned __int8 v21; // [esp+22h] [ebp-Ah] unsigned __int8 v22; // [esp+23h] [ebp-9h] unsigned __int8 v23; // [esp+24h] [ebp-8h] if ( *(_BYTE *)(a1 + 104) & 1 ) sub_9464B0((int *)a1, "Out of place IHDR"); if ( a3 != 13 ) sub_9464B0((int *)a1, "Invalid IHDR chunk"); *(_DWORD *)(a1 + 104) |= 1u; sub_946210((int *)a1, (int)&v11, 13); sub_944B50(a1, &v11, 0xDu); sub_947990((_DWORD *)a1, 0); v3 = v14 + ((v13 + ((v12 + (v11 << 8)) << 8)) << 8); if ( v3 > 0x7FFFFFFF ) sub_9464B0((int *)a1, "PNG unsigned integer out of range.\n"); v4 = v18 + ((v17 + ((v16 + (v15 << 8)) << 8)) << 8); if ( v4 > 0x7FFFFFFF ) sub_9464B0((int *)a1, "PNG unsigned integer out of range.\n"); v5 = v20; v6 = v19; v7 = v21; v8 = v22; *(_BYTE *)(a1 + 291) = v23; *(_BYTE *)(a1 + 568) = v8; *(_BYTE *)(a1 + 608) = v7; *(_DWORD *)(a1 + 200) = v3; *(_DWORD *)(a1 + 204) = v4; *(_BYTE *)(a1 + 295) = v6; *(_BYTE *)(a1 + 294) = v5; switch ( v5 ) { case 0: case 3: *(_BYTE *)(a1 + 298) = 1; break; case 2: *(_BYTE *)(a1 + 298) = 3; break; case 4: *(_BYTE *)(a1 + 298) = 2; break; case 6: *(_BYTE *)(a1 + 298) = 4; break; default: break; } v9 = v6 * *(_BYTE *)(a1 + 298); *(_BYTE *)(a1 + 297) = v9; if ( v9 < 8u ) v10 = (v3 * v9 + 7) >> 3; else v10 = v3 * ((unsigned int)v9 >> 3); *(_DWORD *)(a1 + 216) = v10; sub_94F2A0((int *)a1, a2, v3, v4, v6, v5, v23, v21, v22); } //----- (00947CA0) -------------------------------------------------------- void __cdecl sub_947CA0(int a1, int a2, signed int a3) { int v3; // eax int v4; // edi char v5; // cl int v6; // ebx char *v7; // edi char v8; // cl char v9; // dl int v10; // [esp+Ch] [ebp-30Ch] char v11; // [esp+10h] [ebp-308h] char v12; // [esp+11h] [ebp-307h] char v13; // [esp+12h] [ebp-306h] char v14; // [esp+14h] [ebp-304h] char v15; // [esp+16h] [ebp-302h] v3 = *(_DWORD *)(a1 + 104); v4 = a2; if ( !(v3 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before PLTE"); if ( v3 & 4 ) { sub_946550(a1, "Invalid PLTE after IDAT"); sub_947990((_DWORD *)a1, a3); } else { if ( v3 & 2 ) sub_9464B0((int *)a1, "Duplicate PLTE chunk"); v5 = *(_BYTE *)(a1 + 294); *(_DWORD *)(a1 + 104) |= 2u; if ( v5 & 2 ) { if ( (unsigned int)a3 > 0x300 || a3 % 3u ) { if ( v5 == 3 ) sub_9464B0((int *)a1, "Invalid palette chunk"); sub_946550(a1, "Invalid palette chunk"); sub_947990((_DWORD *)a1, a3); } else { v6 = a3 / 3; if ( a3 / 3 > 0 ) { v7 = &v15; v10 = a3 / 3; do { sub_946210((int *)a1, (int)&v11, 3); sub_944B50(a1, &v11, 3u); v8 = v12; v9 = v13; *(v7 - 2) = v11; *(v7 - 1) = v8; *v7 = v9; v7 += 3; --v10; } while ( v10 ); v4 = a2; } sub_947990((_DWORD *)a1, 0); sub_94F710(a1, v4, &v14, v6); if ( *(_BYTE *)(a1 + 294) == 3 && v4 && *(_BYTE *)(v4 + 8) & 0x10 ) { if ( *(_WORD *)(a1 + 282) > (unsigned __int16)v6 ) { sub_946550(a1, "Truncating incorrect tRNS chunk length"); *(_WORD *)(a1 + 282) = v6; } if ( *(_WORD *)(v4 + 22) > (unsigned __int16)v6 ) { sub_946550(a1, "Truncating incorrect info tRNS chunk length"); *(_WORD *)(v4 + 22) = v6; } } } } else { sub_946550(a1, "Ignoring PLTE chunk in grayscale PNG"); sub_947990((_DWORD *)a1, a3); } } } //----- (00947E80) -------------------------------------------------------- signed int __cdecl sub_947E80(int *a1, int a2, unsigned int a3) { int v3; // eax v3 = a1[26]; if ( !(v3 & 1) || !(v3 & 4) ) sub_9464B0(a1, "No image in file"); a1[26] |= 0x18u; if ( a3 ) sub_946550((int)a1, "Incorrect IEND chunk length"); return sub_947990(a1, a3); } //----- (00947ED0) -------------------------------------------------------- void __cdecl sub_947ED0(int *a1, int a2, unsigned int a3) { int v3; // esi int v4; // eax int v5; // ebx int v6; // eax unsigned int v7; // edi signed int v8; // edi FILE *v9; // eax float v10; // ST2C_4 v3 = (int)a1; v4 = a1[26]; if ( !(v4 & 1) ) sub_9464B0(a1, "Missing IHDR before gAMA"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid gAMA after IDAT"); sub_947990((_DWORD *)v3, a3); } else { if ( v4 & 2 ) sub_946550((int)a1, "Out of place gAMA chunk"); v5 = a2; if ( a2 && (v6 = *(_DWORD *)(a2 + 8), v6 & 1) && !(v6 & 0x800) ) { sub_946550(v3, "Duplicate gAMA chunk"); sub_947990((_DWORD *)v3, a3); } else { v7 = a3; if ( a3 == 4 ) { sub_946210((int *)v3, (int)&a1, 4); sub_944B50(v3, &a1, 4u); if ( !sub_947990((_DWORD *)v3, 0) ) { v8 = HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8); if ( v8 ) { if ( *(_DWORD *)(v5 + 8) & 0x800 && (HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8) < 45000 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8) > 46000) ) { sub_946550(v3, "Ignoring incorrect gAMA value when sRGB is also present"); v9 = (FILE *)sub_7D6CEE(); fprintf(v9 + 2, "gamma = (%d/100000)\n", v8); } else { v10 = (double)(HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8)) / 100000.0; *(float *)(v3 + 348) = v10; sub_94F0F0(v3, v5, v10); sub_94F170(v3, v5, v8); } } else { sub_946550(v3, "Ignoring gAMA chunk with gamma=0"); } } } else { sub_946550(v3, "Incorrect gAMA chunk length"); sub_947990((_DWORD *)v3, v7); } } } } //----- (00948060) -------------------------------------------------------- void __cdecl sub_948060(int a1, int a2, unsigned int a3) { int v3; // eax signed int v4; // edi _BYTE *v5; // eax char v6; // cl char v7; // cl int v8; // [esp+4h] [ebp-4h] v3 = *(_DWORD *)(a1 + 104); v8 = 0; if ( !(v3 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before sBIT"); if ( v3 & 4 ) { sub_946550(a1, "Invalid sBIT after IDAT"); sub_947990((_DWORD *)a1, a3); } else { if ( v3 & 2 ) sub_946550(a1, "Out of place sBIT chunk"); if ( a2 && *(_BYTE *)(a2 + 8) & 2 ) { sub_946550(a1, "Duplicate sBIT chunk"); sub_947990((_DWORD *)a1, a3); } else { v4 = 3; if ( *(_BYTE *)(a1 + 294) != 3 ) v4 = *(unsigned __int8 *)(a1 + 298); if ( a3 != v4 || a3 > 4 ) { sub_946550(a1, "Incorrect sBIT chunk length"); sub_947990((_DWORD *)a1, a3); } else { sub_946210((int *)a1, (int)&v8, v4); sub_944B50(a1, &v8, v4); if ( !sub_947990((_DWORD *)a1, 0) ) { v5 = (_BYTE *)(a1 + 380); if ( *(_BYTE *)(a1 + 294) & 2 ) { v6 = v8; *(_BYTE *)(a1 + 381) = BYTE1(v8); *(_BYTE *)(a1 + 384) = HIBYTE(v8); *v5 = v6; *(_BYTE *)(a1 + 382) = BYTE2(v8); } else { v7 = v8; *(_BYTE *)(a1 + 383) = v8; *v5 = v7; *(_BYTE *)(a1 + 381) = v7; *(_BYTE *)(a1 + 382) = v7; *(_BYTE *)(a1 + 384) = BYTE1(v8); } sub_94F7A0(a1, a2, a1 + 380); } } } } } //----- (009481D0) -------------------------------------------------------- signed int __cdecl sub_9481D0(int *a1, int a2, unsigned int a3) { int *v3; // esi int v4; // eax signed int result; // eax int v6; // eax unsigned int v7; // edi unsigned int v8; // edi unsigned int v9; // edi unsigned int v10; // edi unsigned int v11; // eax int v12; // eax signed int v13; // edi int v14; // eax signed int v15; // ebx FILE *v16; // eax FILE *v17; // eax float v18; // [esp+4Ch] [ebp-38h] float v19; // [esp+50h] [ebp-34h] float v20; // [esp+54h] [ebp-30h] float v21; // [esp+58h] [ebp-2Ch] float v22; // [esp+5Ch] [ebp-28h] float v23; // [esp+60h] [ebp-24h] signed int v24; // [esp+64h] [ebp-20h] float v25; // [esp+64h] [ebp-20h] float v26; // [esp+68h] [ebp-1Ch] signed int v27; // [esp+6Ch] [ebp-18h] signed int v28; // [esp+70h] [ebp-14h] signed int v29; // [esp+74h] [ebp-10h] signed int v30; // [esp+78h] [ebp-Ch] signed int v31; // [esp+7Ch] [ebp-8h] signed int v32; // [esp+80h] [ebp-4h] v3 = a1; v4 = a1[26]; if ( !(v4 & 1) ) sub_9464B0(a1, "Missing IHDR before cHRM"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid cHRM after IDAT"); result = sub_947990(v3, a3); } else { if ( v4 & 2 ) sub_946550((int)a1, "Missing PLTE before cHRM"); if ( a2 && (v6 = *(_DWORD *)(a2 + 8), v6 & 4) && !(v6 & 0x800) ) { sub_946550((int)v3, "Duplicate cHRM chunk"); result = sub_947990(v3, a3); } else { v7 = a3; if ( a3 == 32 ) { sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v8 = HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8); sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); if ( v8 > 0x13880 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned int)(unsigned __int8)a1 << 8)) << 8)) << 8) > 0x13880 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8) + v8 > 0x186A0 ) { sub_946550((int)v3, "Invalid cHRM white point"); result = sub_947990(v3, 0x18u); } else { v28 = HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8); v27 = v8; sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v9 = HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8); sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); if ( v9 > 0x13880 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned int)(unsigned __int8)a1 << 8)) << 8)) << 8) > 0x13880 || HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8) + v9 > 0x186A0 ) { sub_946550((int)v3, "Invalid cHRM red point"); result = sub_947990(v3, 0x10u); } else { v30 = HIBYTE(a1) + ((BYTE2(a1) + ((BYTE1(a1) + ((unsigned __int8)a1 << 8)) << 8)) << 8); v29 = v9; sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v10 = sub_946990((unsigned __int8 *)&a1); sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v11 = sub_946990((unsigned __int8 *)&a1); if ( v10 > 0x13880 || v11 > 0x13880 || v11 + v10 > 0x186A0 ) { sub_946550((int)v3, "Invalid cHRM green point"); result = sub_947990(v3, 8u); } else { v31 = v10; v32 = v11; sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v12 = sub_946990((unsigned __int8 *)&a1); v13 = v12; v24 = v12; sub_946210(v3, (int)&a1, 4); sub_944B50((int)v3, &a1, 4u); v14 = sub_946990((unsigned __int8 *)&a1); v15 = v14; if ( (unsigned int)v13 > 0x13880 || (unsigned int)v14 > 0x13880 || (unsigned int)(v14 + v13) > 0x186A0 ) { sub_946550((int)v3, "Invalid cHRM blue point"); result = sub_947990(v3, 0); } else { v18 = (double)v27 / 100000.0; v19 = (double)v28 / 100000.0; v20 = (double)v29 / 100000.0; v21 = (double)v30 / 100000.0; v22 = (double)v31 / 100000.0; v23 = (double)v32 / 100000.0; v25 = (double)v24 / 100000.0; v26 = (double)v14 / 100000.0; if ( *(_DWORD *)(a2 + 8) & 0x800 ) { if ( (unsigned int)(v27 - 30270) > 0x7D0 || (unsigned int)(v28 - 31900) > 0x7D0 || (unsigned int)(v29 - 63000) > 0x7D0 || (unsigned int)(v30 - 32000) > 0x7D0 || (unsigned int)(v31 - 29000) > 0x7D0 || (unsigned int)(v32 - 59000) > 0x7D0 || v13 < 14000 || v13 > 16000 || v14 < 5000 || v14 > 7000 ) { sub_946550((int)v3, "Ignoring incorrect cHRM value when sRGB is also present"); v16 = (FILE *)sub_7D6CEE(); fprintf(v16 + 2, "wx=%f, wy=%f, rx=%f, ry=%f\n", v18, v19, v20, v21); v17 = (FILE *)sub_7D6CEE(); fprintf(v17 + 2, "gx=%f, gy=%f, bx=%f, by=%f\n", v22, v23, v25, v26); } result = sub_947990(v3, 0); } else { sub_94EBE0((int)v3, a2, v18, v19, v20, v21, v22, v23, v25, v26); sub_94EF10((int)v3, a2, v27, v28, v29, v30, v31, v32, v13, v15); result = sub_947990(v3, 0); } } } } } } else { sub_946550((int)v3, "Incorrect cHRM chunk length"); result = sub_947990(v3, v7); } } } return result; } //----- (009486F0) -------------------------------------------------------- void __cdecl sub_9486F0(int *a1, int a2, unsigned int a3) { int *v3; // edi int v4; // eax int v5; // esi unsigned int v6; // ebx char v7; // bl signed int v8; // eax int v9; // ST1C_4 FILE *v10; // eax signed int v11; // eax signed int v12; // eax signed int v13; // eax signed int v14; // eax signed int v15; // eax signed int v16; // eax signed int v17; // eax signed int v18; // eax v3 = a1; v4 = a1[26]; if ( !(v4 & 1) ) sub_9464B0(a1, "Missing IHDR before sRGB"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid sRGB after IDAT"); sub_947990(v3, a3); } else { if ( v4 & 2 ) sub_946550((int)a1, "Out of place sRGB chunk"); v5 = a2; if ( a2 && *(_DWORD *)(a2 + 8) & 0x800 ) { sub_946550((int)v3, "Duplicate sRGB chunk"); sub_947990(v3, a3); } else { v6 = a3; if ( a3 == 1 ) { sub_946210(v3, (int)&a1 + 3, 1); sub_944B50((int)v3, (int **)((char *)&a1 + 3), 1u); if ( !sub_947990(v3, 0) ) { v7 = HIBYTE(a1); if ( (signed int)HIBYTE(a1) < 4 ) { if ( *(_BYTE *)(v5 + 8) & 1 ) { v8 = *(_DWORD *)(v5 + 252); if ( v8 < 45000 || v8 > 46000 ) { sub_946550((int)v3, "Ignoring incorrect gAMA value when sRGB is also present"); v9 = v3[141]; v10 = (FILE *)sub_7D6CEE(); fprintf(v10 + 2, "incorrect gamma=(%d/100000)\n", v9); } } if ( *(_BYTE *)(v5 + 8) & 4 ) { v11 = *(_DWORD *)(v5 + 256); if ( v11 < 30270 || v11 > 32270 || (v12 = *(_DWORD *)(v5 + 260), v12 < 31900) || v12 > 33900 || (v13 = *(_DWORD *)(v5 + 264), v13 < 63000) || v13 > 65000 || (v14 = *(_DWORD *)(v5 + 268), v14 < 32000) || v14 > 34000 || (v15 = *(_DWORD *)(v5 + 272), v15 < 29000) || v15 > 31000 || (v16 = *(_DWORD *)(v5 + 276), v16 < 59000) || v16 > 61000 || (v17 = *(_DWORD *)(v5 + 280), v17 < 14000) || v17 > 16000 || (v18 = *(_DWORD *)(v5 + 284), v18 < 5000) || v18 > 7000 ) { sub_946550((int)v3, "Ignoring incorrect cHRM value when sRGB is also present"); } } sub_94F7D0((int)v3, v5, v7); } else { sub_946550((int)v3, "Unknown sRGB intent"); } } } else { sub_946550((int)v3, "Incorrect sRGB chunk length"); sub_947990(v3, v6); } } } } //----- (009488F0) -------------------------------------------------------- void __cdecl sub_9488F0(int *a1, int a2, unsigned int a3) { int *v3; // edi int v4; // eax unsigned int v5; // esi _DWORD *v6; // ebx unsigned int v7; // eax _BYTE *i; // esi unsigned __int8 *v9; // esi unsigned __int8 v10; // al int v11; // esi size_t v12; // esi char *v13; // ebx unsigned int v14; // ecx unsigned int v15; // eax char v16; // [esp+4h] [ebp-4h] v3 = a1; v4 = a1[26]; if ( !(v4 & 1) ) sub_9464B0(a1, "Missing IHDR before iCCP"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid iCCP after IDAT"); sub_947990(v3, a3); return; } if ( v4 & 2 ) sub_946550((int)a1, "Out of place iCCP chunk"); if ( a2 && *(_DWORD *)(a2 + 8) & 0x1000 ) { sub_946550((int)v3, "Duplicate iCCP chunk"); sub_947990(v3, a3); return; } v5 = a3; v6 = sub_946890((int)v3, a3 + 1); sub_946210(v3, (int)v6, v5); sub_944B50((int)v3, v6, v5); if ( sub_947990(v3, 0) ) { sub_9468F0((int)v3, v6); return; } v7 = (unsigned int)v6 + v5; *((_BYTE *)v6 + v5) = 0; for ( i = v6; *i; ++i ) ; v9 = i + 1; if ( (unsigned int)v9 >= v7 ) { sub_9468F0((int)v3, v6); sub_946550((int)v3, "Malformed iCCP chunk"); return; } v10 = *v9; v11 = (int)(v9 + 1); if ( v10 ) { sub_946550((int)v3, "Ignoring nonzero compression type in iCCP chunk"); v10 = 0; } v12 = v11 - (_DWORD)v6; v16 = v10; v13 = sub_9469F0((int)v3, v10, (char *)v6, a3, v12, (size_t *)&a1); v14 = (unsigned int)a1 - v12; if ( v12 > (unsigned int)a1 || v14 < 4 ) { sub_9468F0((int)v3, v13); sub_946550((int)v3, "Profile size field missing from iCCP chunk"); } else { v15 = (unsigned __int8)v13[v12 + 3] | (((unsigned __int8)v13[v12 + 2] | (((unsigned __int8)v13[v12 + 1] | ((unsigned __int8)v13[v12] << 8)) << 8)) << 8); if ( v15 < v14 ) { v14 = (unsigned __int8)v13[v12 + 3] | (((unsigned __int8)v13[v12 + 2] | (((unsigned __int8)v13[v12 + 1] | ((unsigned __int8)v13[v12] << 8)) << 8)) << 8); LABEL_22: sub_94F8B0((int)v3, a2, (int)v13, v16, &v13[v12], v14); sub_9468F0((int)v3, v13); return; } if ( v15 <= v14 ) goto LABEL_22; sub_9468F0((int)v3, v13); sub_946550((int)v3, "Ignoring truncated iCCP profile.\n"); } } //----- (00948AB0) -------------------------------------------------------- void __cdecl sub_948AB0(int *a1, int a2, unsigned int a3) { int v3; // eax _DWORD *v4; // ebx _BYTE *i; // esi _BYTE *v6; // esi char v7; // al unsigned __int8 *v8; // esi int v9; // ecx unsigned int v10; // eax int v11; // edi char *v12; // edx int v13; // ecx int v14; // eax char *v15; // eax __int16 v16; // dx __int16 v17; // dx unsigned __int8 *v18; // esi _DWORD *v19; // [esp+4h] [ebp-14h] char v20; // [esp+8h] [ebp-10h] void *v21; // [esp+Ch] [ebp-Ch] int v22; // [esp+10h] [ebp-8h] int v23; // [esp+14h] [ebp-4h] v3 = a1[26]; if ( !(v3 & 1) ) sub_9464B0(a1, "Missing IHDR before sPLT"); if ( v3 & 4 ) { sub_946550((int)a1, "Invalid sPLT after IDAT"); sub_947990(a1, a3); } else { v4 = sub_946890((int)a1, a3 + 1); sub_946210(a1, (int)v4, a3); sub_944B50((int)a1, v4, a3); if ( sub_947990(a1, 0) ) { sub_9468F0((int)a1, v4); } else { *((_BYTE *)v4 + a3) = 0; for ( i = v4; *i; ++i ) ; v6 = i + 1; if ( v6 <= (_BYTE *)v4 + a3 ) { v7 = *v6; v8 = v6 + 1; v20 = v7; v9 = 4 * (v7 != 8) + 6; v10 = (signed int)(a3 + (char *)v4 - (char *)v8) / v9; if ( (signed int)(a3 + (char *)v4 - (char *)v8) % v9 ) { sub_9468F0((int)a1, v4); sub_946550((int)a1, "sPLT chunk has bad length"); } else { v22 = (signed int)(a3 + (char *)v4 - (char *)v8) / v9; if ( v10 <= 0x19999999 ) { v11 = (int)a1; v12 = (char *)sub_946920((int)a1, 10 * v10); v21 = v12; if ( v12 ) { v13 = 0; if ( v22 > 0 ) { v14 = 0; v23 = 0; while ( 1 ) { v15 = &v12[v14]; v16 = *v8; if ( v20 == 8 ) { *(_WORD *)v15 = v16; *((_WORD *)v15 + 1) = v8[1]; *((_WORD *)v15 + 2) = v8[2]; v17 = v8[3]; v18 = v8 + 4; } else { *(_WORD *)v15 = v8[1] + (v16 << 8); *((_WORD *)v15 + 1) = v8[3] + (v8[2] << 8); *((_WORD *)v15 + 2) = v8[5] + (v8[4] << 8); v17 = v8[7] + (v8[6] << 8); v18 = v8 + 8; } *((_WORD *)v15 + 3) = v17; *((_WORD *)v15 + 4) = v18[1] + (*v18 << 8); ++v13; v14 = v23 + 10; v8 = v18 + 2; v23 += 10; if ( v13 >= v22 ) break; v12 = (char *)v21; } v11 = (int)a1; } v19 = v4; sub_94FC70(v11, a2, (int)&v19, 1); sub_9468F0(v11, v4); sub_9468F0(v11, v21); } else { sub_946550((int)a1, "sPLT chunk requires too much memory"); } } else { sub_946550((int)a1, "sPLT chunk too long"); } } } else { sub_9468F0((int)a1, v4); sub_946550((int)a1, "malformed sPLT chunk"); } } } } //----- (00948D00) -------------------------------------------------------- void __cdecl sub_948D00(int a1, int a2, unsigned int a3) { int v3; // eax char v4; // al unsigned int v5; // edi unsigned __int8 v6; // ah __int16 v7; // dx __int16 v8; // cx __int16 v9; // ax __int16 v10; // cx __int16 v11; // ax __int16 v12; // [esp+8h] [ebp-110h] char v13; // [esp+Ch] [ebp-10Ch] unsigned __int8 v14; // [esp+10Ch] [ebp-Ch] unsigned __int8 v15; // [esp+10Dh] [ebp-Bh] unsigned __int8 v16; // [esp+10Eh] [ebp-Ah] unsigned __int8 v17; // [esp+10Fh] [ebp-9h] unsigned __int8 v18; // [esp+110h] [ebp-8h] unsigned __int8 v19; // [esp+111h] [ebp-7h] v3 = *(_DWORD *)(a1 + 104); if ( !(v3 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before tRNS"); if ( v3 & 4 ) { sub_946550(a1, "Invalid tRNS after IDAT"); sub_947990((_DWORD *)a1, a3); return; } if ( a2 && *(_BYTE *)(a2 + 8) & 0x10 ) { sub_946550(a1, "Duplicate tRNS chunk"); sub_947990((_DWORD *)a1, a3); return; } v4 = *(_BYTE *)(a1 + 294); if ( v4 ) { if ( v4 == 2 ) { v5 = a3; if ( a3 != 6 ) goto LABEL_5; sub_946210((int *)a1, (int)&v14, a3); sub_944B50(a1, &v14, a3); v8 = v14 << 8; *(_WORD *)(a1 + 282) = 1; v9 = v17; *(_WORD *)(a1 + 398) = v15 + v8; v10 = v9 + (v16 << 8); v11 = v19; *(_WORD *)(a1 + 400) = v10; *(_WORD *)(a1 + 402) = v11 + (v18 << 8); } else { if ( v4 != 3 ) { sub_946550(a1, "tRNS chunk not allowed with alpha channel"); sub_947990((_DWORD *)a1, a3); return; } if ( !(*(_BYTE *)(a1 + 104) & 2) ) sub_946550(a1, "Missing PLTE before tRNS"); v5 = a3; if ( a3 > *(unsigned __int16 *)(a1 + 280) || a3 > 0x100 ) goto LABEL_5; if ( !a3 ) { sub_946550(a1, "Zero length tRNS chunk"); sub_947990((_DWORD *)a1, 0); return; } sub_9469C0((int *)a1, &v13, a3); *(_WORD *)(a1 + 282) = a3; } } else { v5 = a3; if ( a3 != 2 ) { LABEL_5: sub_946550(a1, "Incorrect tRNS chunk length"); sub_947990((_DWORD *)a1, v5); return; } sub_946210((int *)a1, (int)&v12, 2); sub_944B50(a1, &v12, 2u); v6 = HIBYTE(v12); v7 = (unsigned __int8)v12; *(_WORD *)(a1 + 282) = 1; *(_WORD *)(a1 + 404) = v6 + (v7 << 8); } if ( !sub_947990((_DWORD *)a1, 0) ) sub_94FBE0(a1, a2, &v13, *(unsigned __int16 *)(a1 + 282), a1 + 396); } //----- (00948F60) -------------------------------------------------------- void __cdecl sub_948F60(int a1, int a2, unsigned int a3) { int v3; // eax char v4; // al int v5; // edi char v6; // al unsigned __int8 v7; // cl unsigned __int16 v8; // ax unsigned __int8 *v9; // eax __int16 v10; // ax __int16 v11; // dx __int16 v12; // ax __int16 v13; // dx unsigned __int8 v14; // [esp+8h] [ebp-Ch] unsigned __int8 v15; // [esp+9h] [ebp-Bh] unsigned __int8 v16; // [esp+Ah] [ebp-Ah] unsigned __int8 v17; // [esp+Bh] [ebp-9h] unsigned __int8 v18; // [esp+Ch] [ebp-8h] unsigned __int8 v19; // [esp+Dh] [ebp-7h] v3 = *(_DWORD *)(a1 + 104); if ( !(v3 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before bKGD"); if ( v3 & 4 ) { sub_946550(a1, "Invalid bKGD after IDAT"); sub_947990((_DWORD *)a1, a3); return; } if ( *(_BYTE *)(a1 + 294) == 3 && !(v3 & 2) ) { sub_946550(a1, "Missing PLTE before bKGD"); sub_947990((_DWORD *)a1, a3); return; } if ( a2 && *(_BYTE *)(a2 + 8) & 0x20 ) { sub_946550(a1, "Duplicate bKGD chunk"); sub_947990((_DWORD *)a1, a3); return; } v4 = *(_BYTE *)(a1 + 294); if ( v4 == 3 ) v5 = 1; else v5 = 2 * (v4 & 2 | 1); if ( a3 != v5 ) { sub_946550(a1, "Incorrect bKGD chunk length"); sub_947990((_DWORD *)a1, a3); return; } sub_946210((int *)a1, (int)&v14, v5); sub_944B50(a1, &v14, v5); if ( !sub_947990((_DWORD *)a1, 0) ) { v6 = *(_BYTE *)(a1 + 294); if ( v6 == 3 ) { v7 = v14; *(_BYTE *)(a1 + 312) = v14; v8 = *(_WORD *)(a2 + 20); if ( v8 ) { if ( v7 > v8 ) { sub_946550(a1, "Incorrect bKGD chunk index value"); return; } v9 = (unsigned __int8 *)(*(_DWORD *)(a1 + 276) + 3 * v7); *(_WORD *)(a1 + 314) = *v9; *(_WORD *)(a1 + 316) = v9[1]; *(_WORD *)(a1 + 318) = v9[2]; } } else { if ( v6 & 2 ) { v11 = v17; *(_WORD *)(a1 + 314) = v15 + (v14 << 8); v12 = v11 + (v16 << 8); v13 = v19; *(_WORD *)(a1 + 316) = v12; v10 = v13 + (v18 << 8); } else { v10 = v15 + (v14 << 8); *(_WORD *)(a1 + 320) = v10; *(_WORD *)(a1 + 316) = v10; *(_WORD *)(a1 + 314) = v10; } *(_WORD *)(a1 + 318) = v10; } sub_94EBB0(a1, a2, a1 + 312); } } //----- (009491B0) -------------------------------------------------------- void __cdecl sub_9491B0(int a1, int a2, unsigned int a3) { int v3; // eax unsigned int v4; // ebx unsigned int v5; // edi __int16 v6; // [esp+8h] [ebp-208h] __int16 v7[256]; // [esp+Ch] [ebp-204h] v3 = *(_DWORD *)(a1 + 104); if ( !(v3 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before hIST"); if ( v3 & 4 ) { sub_946550(a1, "Invalid hIST after IDAT"); sub_947990((_DWORD *)a1, a3); } else if ( v3 & 2 ) { if ( a2 && *(_BYTE *)(a2 + 8) & 0x40 ) { sub_946550(a1, "Duplicate hIST chunk"); sub_947990((_DWORD *)a1, a3); } else { v4 = a3 >> 1; if ( a3 >> 1 != *(unsigned __int16 *)(a1 + 280) || v4 > 0x100 ) { sub_946550(a1, "Incorrect hIST chunk length"); sub_947990((_DWORD *)a1, a3); } else { v5 = 0; if ( v4 ) { do { sub_946210((int *)a1, (int)&v6, 2); sub_944B50(a1, &v6, 2u); v7[v5++] = HIBYTE(v6) + ((unsigned __int8)v6 << 8); } while ( v5 < v4 ); } if ( !sub_947990((_DWORD *)a1, 0) ) sub_94F1F0(a1, a2, (int)v7); } } } else { sub_946550(a1, "Missing PLTE before hIST"); sub_947990((_DWORD *)a1, a3); } } // 9491B0: using guessed type __int16 var_204[256]; //----- (00949350) -------------------------------------------------------- void __cdecl sub_949350(int *a1, int a2, unsigned int a3) { int v3; // eax unsigned __int8 v4; // [esp+8h] [ebp-10h] unsigned __int8 v5; // [esp+9h] [ebp-Fh] unsigned __int8 v6; // [esp+Ah] [ebp-Eh] unsigned __int8 v7; // [esp+Bh] [ebp-Dh] unsigned __int8 v8; // [esp+Ch] [ebp-Ch] unsigned __int8 v9; // [esp+Dh] [ebp-Bh] unsigned __int8 v10; // [esp+Eh] [ebp-Ah] unsigned __int8 v11; // [esp+Fh] [ebp-9h] char v12; // [esp+10h] [ebp-8h] v3 = a1[26]; if ( !(v3 & 1) ) sub_9464B0(a1, "Missing IHDR before pHYs"); if ( v3 & 4 ) { sub_946550((int)a1, "Invalid pHYs after IDAT"); sub_947990(a1, a3); } else if ( a2 && *(_BYTE *)(a2 + 8) < 0 ) { sub_946550((int)a1, "Duplicate pHYs chunk"); sub_947990(a1, a3); } else if ( a3 == 9 ) { sub_946210(a1, (int)&v4, 9); sub_944B50((int)a1, &v4, 9u); if ( !sub_947990(a1, 0) ) sub_94F6E0( (int)a1, a2, v7 + ((v6 + ((v5 + (v4 << 8)) << 8)) << 8), v11 + ((v10 + ((v9 + (v8 << 8)) << 8)) << 8), v12); } else { sub_946550((int)a1, "Incorrect pHYs chunk length"); sub_947990(a1, a3); } } //----- (009494A0) -------------------------------------------------------- void __cdecl sub_9494A0(int *a1, int a2, unsigned int a3) { int v3; // eax unsigned __int8 v4; // [esp+8h] [ebp-10h] unsigned __int8 v5; // [esp+9h] [ebp-Fh] unsigned __int8 v6; // [esp+Ah] [ebp-Eh] unsigned __int8 v7; // [esp+Bh] [ebp-Dh] unsigned __int8 v8; // [esp+Ch] [ebp-Ch] unsigned __int8 v9; // [esp+Dh] [ebp-Bh] unsigned __int8 v10; // [esp+Eh] [ebp-Ah] unsigned __int8 v11; // [esp+Fh] [ebp-9h] char v12; // [esp+10h] [ebp-8h] v3 = a1[26]; if ( !(v3 & 1) ) sub_9464B0(a1, "Missing IHDR before oFFs"); if ( v3 & 4 ) { sub_946550((int)a1, "Invalid oFFs after IDAT"); sub_947990(a1, a3); } else if ( a2 && *(_DWORD *)(a2 + 8) & 0x100 ) { sub_946550((int)a1, "Duplicate oFFs chunk"); sub_947990(a1, a3); } else if ( a3 == 9 ) { sub_946210(a1, (int)&v4, 9); sub_944B50((int)a1, &v4, 9u); if ( !sub_947990(a1, 0) ) sub_94F4D0( (int)a1, a2, v7 + ((v6 + ((v5 + (v4 << 8)) << 8)) << 8), v11 + ((v10 + ((v9 + (v8 << 8)) << 8)) << 8), v12); } else { sub_946550((int)a1, "Incorrect oFFs chunk length"); sub_947990(a1, a3); } } //----- (009495F0) -------------------------------------------------------- void __cdecl sub_9495F0(int *a1, int a2, unsigned int a3) { int v3; // edi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // esi _BYTE *i; // eax unsigned __int8 v8; // dl int v9; // ebx char v10; // cl int v11; // eax _BYTE *j; // esi void *v13; // eax int v14; // edx int v15; // ecx int v16; // [esp+4h] [ebp-18h] void *v17; // [esp+8h] [ebp-14h] void *v18; // [esp+Ch] [ebp-10h] unsigned int v19; // [esp+10h] [ebp-Ch] void *v20; // [esp+14h] [ebp-8h] char v21; // [esp+1Bh] [ebp-1h] int v22; // [esp+24h] [ebp+8h] unsigned __int8 v23; // [esp+27h] [ebp+Bh] v3 = (int)a1; v4 = a1[26]; if ( !(v4 & 1) ) sub_9464B0(a1, "Missing IHDR before pCAL"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid pCAL after IDAT"); sub_947990(a1, a3); return; } if ( a2 && *(_DWORD *)(a2 + 8) & 0x400 ) { sub_946550((int)a1, "Duplicate pCAL chunk"); sub_947990(a1, a3); return; } v5 = sub_946920((int)a1, a3 + 1); v6 = v5; v20 = v5; if ( !v5 ) { sub_946550((int)a1, "No memory for pCAL purpose."); return; } sub_946210(a1, (int)v5, a3); sub_944B50((int)a1, v6, a3); if ( sub_947990(a1, 0) ) { sub_9468F0((int)a1, v6); return; } *((_BYTE *)v6 + a3) = 0; v19 = (unsigned int)v6 + a3; for ( i = v6; *i; ++i ) ; if ( (_DWORD *)((char *)v6 + a3) <= (_DWORD *)i + 3 ) { sub_946550((int)a1, "Invalid pCAL data"); LABEL_28: sub_9468F0(v3, v6); return; } v16 = (unsigned __int8)i[4] + (((unsigned __int8)i[3] + ((((unsigned __int8)i[1] << 8) + (unsigned __int8)i[2]) << 8)) << 8); v8 = i[10]; v9 = (unsigned __int8)i[8] + (((unsigned __int8)i[7] + (((unsigned __int8)i[6] + ((unsigned __int8)i[5] << 8)) << 8)) << 8); v10 = i[9]; v11 = (int)(i + 11); v21 = v10; v23 = v8; v18 = (void *)v11; switch ( v10 ) { case 0: if ( v8 == 2 ) break; LABEL_27: sub_946550(v3, "Invalid pCAL parameters for equation type"); goto LABEL_28; case 1: if ( v8 != 3 ) goto LABEL_27; break; case 2: if ( v8 != 3 ) goto LABEL_27; break; case 3: if ( v8 == 4 ) break; goto LABEL_27; default: if ( (unsigned __int8)v10 >= 4u ) { sub_946550(v3, "Unrecognized equation type for pCAL chunk"); v8 = v23; v11 = (int)v18; } break; } for ( j = (_BYTE *)v11; *j; ++j ) ; v22 = v8; v13 = sub_946920(v3, 4 * v8); v17 = v13; if ( v13 ) { v14 = v22; v15 = 0; if ( v22 <= 0 ) { LABEL_41: sub_94F500(v3, a2, v20, v16, v9, v21, v14, v18, (int)v13); sub_9468F0(v3, v20); sub_9468F0(v3, v17); } else { while ( 1 ) { *((_DWORD *)v13 + v15) = ++j; if ( *j ) break; LABEL_39: if ( (unsigned int)j > v19 ) goto LABEL_42; v14 = v22; if ( ++v15 >= v22 ) goto LABEL_41; } while ( (unsigned int)j <= v19 ) { if ( !*++j ) goto LABEL_39; } LABEL_42: sub_946550(v3, "Invalid pCAL data"); sub_9468F0(v3, v20); sub_9468F0(v3, v17); } } else { sub_9468F0(v3, v20); sub_946550(v3, "No memory for pCAL params."); } } //----- (00949880) -------------------------------------------------------- void __cdecl sub_949880(char *a1, int a2, int a3) { char *v3; // edi int v4; // eax int v5; // ebx char *v6; // eax char *v7; // esi char *i; // ebx const char *v9; // ebx double v10; // st7 double v11; // [esp+24h] [ebp-Ch] unsigned int v12; // [esp+2Ch] [ebp-4h] v3 = a1; v4 = *((_DWORD *)a1 + 26); if ( !(v4 & 1) ) sub_9464B0((int *)a1, "Missing IHDR before sCAL"); if ( v4 & 4 ) { sub_946550((int)a1, "Invalid sCAL after IDAT"); sub_947990(v3, a3); } else if ( a2 && *(_DWORD *)(a2 + 8) & 0x4000 ) { sub_946550((int)a1, "Duplicate sCAL chunk"); sub_947990(v3, a3); } else { v5 = a3; v6 = (char *)sub_946920((int)a1, a3 + 1); v7 = v6; if ( v6 ) { sub_946210((int *)v3, (int)v6, v5); sub_944B50((int)v3, v7, v5); if ( sub_947990(v3, 0) ) { sub_9468F0((int)v3, v7); } else { v12 = (unsigned int)&v7[v5]; v7[v5] = 0; v11 = strtod(v7 + 1, &a1); if ( *a1 ) { sub_946550((int)v3, "malformed width string in sCAL chunk"); } else { for ( i = v7; *i; ++i ) ; v9 = i + 1; v10 = strtod(v9, &a1); if ( *a1 ) { sub_946550((int)v3, "malformed height string in sCAL chunk"); } else if ( v12 < (unsigned int)v9 || v11 <= 0.0 || v10 <= 0.0 ) { sub_946550((int)v3, "Invalid sCAL data"); sub_9468F0((int)v3, v7); } else { sub_94F6A0((int)v3, a2, *v7, v11, v10); sub_9468F0((int)v3, v7); } } } } else { sub_946550((int)v3, "Out of memory while processing sCAL chunk"); } } } //----- (00949A30) -------------------------------------------------------- void __cdecl sub_949A30(int a1, _DWORD *a2, unsigned int a3) { int v3; // eax __int16 v4; // [esp+8h] [ebp-14h] char v5; // [esp+Ah] [ebp-12h] char v6; // [esp+Bh] [ebp-11h] char v7; // [esp+Ch] [ebp-10h] char v8; // [esp+Dh] [ebp-Fh] char v9; // [esp+Eh] [ebp-Eh] unsigned __int8 v10; // [esp+10h] [ebp-Ch] unsigned __int8 v11; // [esp+11h] [ebp-Bh] char v12; // [esp+12h] [ebp-Ah] char v13; // [esp+13h] [ebp-9h] char v14; // [esp+14h] [ebp-8h] char v15; // [esp+15h] [ebp-7h] char v16; // [esp+16h] [ebp-6h] if ( !(*(_BYTE *)(a1 + 104) & 1) ) sub_9464B0((int *)a1, "Out of place tIME chunk"); if ( a2 && a2[2] & 0x200 ) { sub_946550(a1, "Duplicate tIME chunk"); sub_947990((_DWORD *)a1, a3); } else { v3 = *(_DWORD *)(a1 + 104); if ( v3 & 4 ) *(_DWORD *)(a1 + 104) = v3 | 8; if ( a3 == 7 ) { sub_946210((int *)a1, (int)&v10, 7); sub_944B50(a1, &v10, 7u); if ( !sub_947990((_DWORD *)a1, 0) ) { v9 = v16; v7 = v14; v6 = v13; v8 = v15; v5 = v12; v4 = v11 + (v10 << 8); sub_94FBB0(a1, a2, &v4); } } else { sub_946550(a1, "Incorrect tIME chunk length"); sub_947990((_DWORD *)a1, a3); } } } //----- (00949B50) -------------------------------------------------------- void __cdecl sub_949B50(int a1, _DWORD *a2, unsigned int a3) { int v3; // esi int v4; // eax _DWORD *v5; // eax _DWORD *v6; // ebx const char *v7; // eax _DWORD *v8; // edi const char *v9; // [esp+14h] [ebp+8h] int v10; // [esp+14h] [ebp+8h] v3 = a1; if ( !(*(_BYTE *)(a1 + 104) & 1) ) sub_9464B0((int *)a1, "Missing IHDR before tEXt"); v4 = *(_DWORD *)(a1 + 104); if ( v4 & 4 ) *(_DWORD *)(a1 + 104) = v4 | 8; v5 = sub_946920(a1, a3 + 1); v6 = v5; if ( v5 ) { sub_946210((int *)a1, (int)v5, a3); sub_944B50(a1, v6, a3); if ( sub_947990((_DWORD *)a1, 0) ) { sub_9468F0(a1, v6); } else { *((_BYTE *)v6 + a3) = 0; v7 = (const char *)v6; v9 = (const char *)v6; if ( *(_BYTE *)v6 ) { do ++v7; while ( *v7 ); v9 = v7; } if ( v7 != (char *)v6 + a3 ) v9 = v7 + 1; v8 = sub_946920(v3, 0x10u); if ( v8 ) { *v8 = -1; v8[1] = v6; v8[2] = v9; v8[3] = strlen(v9); v10 = sub_94F9B0(v3, a2, (int)v8, 1); sub_9468F0(v3, v6); sub_9468F0(v3, v8); if ( v10 ) sub_946550(v3, "Insufficient memory to process text chunk."); } else { sub_946550(v3, "Not enough memory to process text chunk."); sub_9468F0(v3, v6); } } } else { sub_946550(a1, "No memory to process text chunk."); } } //----- (00949C80) -------------------------------------------------------- void __cdecl sub_949C80(int a1, _DWORD *a2, int a3) { int *v3; // esi int v4; // eax unsigned int v5; // edi _DWORD *v6; // eax _DWORD *v7; // ebx int v8; // eax _BYTE *i; // edi char *v10; // ebx _DWORD *v11; // edi int v12; // eax int v13; // [esp+Ch] [ebp-4h] signed int v14; // [esp+18h] [ebp+8h] v3 = (int *)a1; if ( !(*(_BYTE *)(a1 + 104) & 1) ) sub_9464B0((int *)a1, "Missing IHDR before zTXt"); v4 = *(_DWORD *)(a1 + 104); if ( v4 & 4 ) *(_DWORD *)(a1 + 104) = v4 | 8; v5 = a3; v6 = sub_946920(a1, a3 + 1); v7 = v6; if ( v6 ) { sub_946210((int *)a1, (int)v6, v5); sub_944B50(a1, v7, v5); if ( sub_947990((_DWORD *)a1, 0) ) { sub_9468F0(a1, v7); } else { v8 = (int)v7 + v5; *((_BYTE *)v7 + v5) = 0; for ( i = v7; *i; ++i ) ; if ( i == (_BYTE *)v8 ) { v14 = -1; sub_946550((int)v3, "Zero length zTXt chunk"); } else { v14 = (char)i[1]; if ( i[1] ) { sub_946550((int)v3, "Unknown compression type in zTXt chunk"); v14 = 0; } i += 2; } v13 = i - (_BYTE *)v7; v10 = sub_9469F0((int)v3, v14, (char *)v7, a3, i - (_BYTE *)v7, (size_t *)&a3); v11 = sub_946920((int)v3, 0x10u); if ( v11 ) { v12 = a3; *v11 = v14; v11[1] = v10; v11[2] = &v10[v13]; v11[3] = v12; a3 = sub_94F9B0((int)v3, a2, (int)v11, 1); sub_9468F0((int)v3, v11); sub_9468F0((int)v3, v10); if ( a3 ) sub_9464B0(v3, "Insufficient memory to store zTXt chunk."); } else { sub_946550((int)v3, "Not enough memory to process zTXt chunk."); sub_9468F0((int)v3, v10); } } } else { sub_946550(a1, "Out of memory processing zTXt chunk."); } } //----- (00949E00) -------------------------------------------------------- int __cdecl sub_949E00(int a1, int a2, size_t a3) { unsigned int v3; // ebx int v4; // eax _BYTE *v5; // edi char *v6; // eax char v7; // cl void *v8; // eax _DWORD *v9; // ST30_4 int (__cdecl *v10)(int, char *); // eax char v12[8]; // [esp+18h] [ebp-18h] void *v13; // [esp+20h] [ebp-10h] size_t v14; // [esp+24h] [ebp-Ch] v3 = a3; v4 = *(_DWORD *)(a1 + 104); if ( v4 & 4 && *(_DWORD *)(a1 + 284) != 1413563465 ) *(_DWORD *)(a1 + 104) = v4 | 8; v5 = (_BYTE *)(a1 + 284); sub_946D70(a1, (unsigned __int8 *)(a1 + 284)); if ( !(*(_BYTE *)(a1 + 284) & 0x20) && sub_945000(a1, (_DWORD *)(a1 + 284)) != 3 && !*(_DWORD *)(a1 + 540) ) sub_9466C0(a1, "unknown critical chunk"); if ( *(_DWORD *)(a1 + 108) & 0x8000 ) { v6 = (char *)(a1 + 284); do { v7 = *v6; v6[v12 - v5] = *v6; ++v6; } while ( v7 ); v8 = sub_946890(a1, a3); v13 = v8; v14 = a3; v9 = v8; sub_946210((int *)a1, (int)v8, a3); sub_944B50(a1, v9, a3); v10 = *(int (__cdecl **)(int, char *))(a1 + 540); if ( v10 ) { if ( v10(a1, v12) <= 0 ) { if ( !(*v5 & 0x20) && sub_945000(a1, (_DWORD *)(a1 + 284)) != 3 ) { sub_9468F0(a1, v13); sub_9466C0(a1, "unknown critical chunk"); } sub_94FDB0(a1, a2, (int)v12, 1); } } else { sub_94FDB0(a1, a2, (int)v12, 1); } sub_9468F0(a1, v13); v3 = 0; } return sub_947990((_DWORD *)a1, v3); } // 949E00: using guessed type char var_18[8]; //----- (00949F50) -------------------------------------------------------- unsigned int __cdecl sub_949F50(int a1) { int v1; // esi unsigned int result; // eax size_t v3; // ST18_4 void *v4; // ST10_4 unsigned __int8 v5; // bl unsigned __int8 v6; // cl unsigned int v7; // ecx bool v8; // zf unsigned int v9; // edi unsigned int v10; // eax unsigned int v11; // ecx _DWORD *v12; // edi unsigned int v13; // ebx signed int v14; // eax char *v15; // eax int v16; // [esp+4h] [ebp-4h] v1 = a1; result = ++*(_DWORD *)(v1 + 228); if ( result >= *(_DWORD *)(v1 + 208) ) { if ( *(_BYTE *)(v1 + 291) ) { v3 = *(_DWORD *)(v1 + 216) + 1; v4 = *(void **)(v1 + 232); *(_DWORD *)(v1 + 228) = 0; sub_946840(v1, v4, 0, v3); while ( 1 ) { v5 = ++*(_BYTE *)(v1 + 292); if ( v5 >= 7u ) break; result = (*(_DWORD *)(v1 + 200) - dword_A4884C[v5] + dword_A48868[v5] - 1) / (unsigned int)dword_A48868[v5]; v6 = *(_BYTE *)(v1 + 297); *(_DWORD *)(v1 + 224) = result; if ( v6 < 8u ) v7 = (result * v6 + 7) >> 3; else v7 = result * ((unsigned int)v6 >> 3); v8 = (*(_BYTE *)(v1 + 112) & 2) == 0; *(_DWORD *)(v1 + 220) = v7 + 1; if ( v8 ) { result = (*(_DWORD *)(v1 + 204) - dword_A48884[v5] + dword_A488A0[v5] - 1) / (unsigned int)dword_A488A0[v5]; v8 = *(_DWORD *)(v1 + 224) == 0; *(_DWORD *)(v1 + 208) = result; if ( v8 ) continue; } if ( v5 < 7u ) return result; break; } } if ( !(*(_BYTE *)(v1 + 108) & 0x20) ) { *(_DWORD *)(v1 + 128) = (char *)&a1 + 3; *(_DWORD *)(v1 + 132) = 1; while ( 1 ) { if ( !*(_DWORD *)(v1 + 120) ) { while ( !*(_DWORD *)(v1 + 268) ) { sub_947990((_DWORD *)v1, 0); sub_946210((int *)v1, (int)&v16, 4); v9 = HIBYTE(v16) + ((BYTE2(v16) + ((BYTE1(v16) + ((unsigned __int8)v16 << 8)) << 8)) << 8); if ( v9 > 0x7FFFFFFF ) sub_9464B0((int *)v1, "PNG unsigned integer out of range.\n"); *(_DWORD *)(v1 + 268) = v9; sub_944B30(v1); sub_946210((int *)v1, v1 + 284, 4); sub_944B50(v1, (_DWORD *)(v1 + 284), 4u); if ( *(_DWORD *)(v1 + 284) != 1413563465 ) sub_9464B0((int *)v1, "Not enough image data"); } v10 = *(_DWORD *)(v1 + 176); v11 = *(_DWORD *)(v1 + 268); v12 = *(_DWORD **)(v1 + 172); *(_DWORD *)(v1 + 120) = v10; *(_DWORD *)(v1 + 116) = v12; if ( v10 > v11 ) *(_DWORD *)(v1 + 120) = v11; v13 = *(_DWORD *)(v1 + 120); sub_946210((int *)v1, (int)v12, *(_DWORD *)(v1 + 120)); sub_944B50(v1, v12, v13); *(_DWORD *)(v1 + 268) -= *(_DWORD *)(v1 + 120); } v14 = sub_7569A0(v1 + 116, 1); if ( v14 == 1 ) break; if ( v14 ) { v15 = *(char **)(v1 + 140); if ( !v15 ) v15 = "Decompression Error"; sub_9464B0((int *)v1, v15); } if ( !*(_DWORD *)(v1 + 132) ) { sub_946550(v1, "Extra compressed data."); goto LABEL_30; } } if ( !*(_DWORD *)(v1 + 132) || *(_DWORD *)(v1 + 120) || *(_DWORD *)(v1 + 268) ) sub_946550(v1, "Extra compressed data"); LABEL_30: *(_DWORD *)(v1 + 104) |= 8u; *(_DWORD *)(v1 + 108) |= 0x20u; *(_DWORD *)(v1 + 132) = 0; } if ( *(_DWORD *)(v1 + 268) || *(_DWORD *)(v1 + 120) ) sub_946550(v1, "Extra compression data"); result = sub_756750((_DWORD *)(v1 + 116)); *(_DWORD *)(v1 + 104) |= 8u; } return result; } //----- (0094A220) -------------------------------------------------------- int __cdecl sub_94A220(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 0x400u; return result; } //----- (0094A230) -------------------------------------------------------- int __cdecl sub_94A230(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 108) |= 0x400000u; return result; } //----- (0094A240) -------------------------------------------------------- int __cdecl sub_94A240(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 0x1000u; return result; } //----- (0094A250) -------------------------------------------------------- unsigned int __cdecl sub_94A250(int a1, int a2) { char v2; // al char v3; // al char v4; // al char v5; // al unsigned __int8 v6; // al unsigned __int8 v7; // dl unsigned __int8 v8; // al unsigned int result; // eax if ( *(_DWORD *)(a1 + 112) & 0x1000 ) { v2 = *(_BYTE *)(a2 + 25); if ( v2 == 3 ) { *(_BYTE *)(a2 + 25) = 4 * (*(_WORD *)(a1 + 282) != 0) + 2; } else { if ( *(_WORD *)(a1 + 282) ) *(_BYTE *)(a2 + 25) = v2 | 4; if ( *(_BYTE *)(a2 + 24) >= 8u ) goto LABEL_8; } *(_BYTE *)(a2 + 24) = 8; LABEL_8: *(_WORD *)(a2 + 22) = 0; } if ( *(_BYTE *)(a1 + 112) < 0 ) { *(_BYTE *)(a2 + 25) &= 0xFBu; *(_WORD *)(a2 + 22) = 0; *(_DWORD *)(a2 + 90) = *(_DWORD *)(a1 + 312); *(_DWORD *)(a2 + 94) = *(_DWORD *)(a1 + 316); *(_WORD *)(a2 + 98) = *(_WORD *)(a1 + 320); } if ( *(_DWORD *)(a1 + 112) & 0x2000 ) { *(float *)(a2 + 40) = *(float *)(a1 + 348); *(_DWORD *)(a2 + 252) = *(_DWORD *)(a1 + 564); } if ( *(_DWORD *)(a1 + 112) & 0x400 && *(_BYTE *)(a2 + 24) == 16 ) *(_BYTE *)(a2 + 24) = 8; if ( *(_BYTE *)(a1 + 112) & 0x40 ) { v3 = *(_BYTE *)(a2 + 25); if ( (v3 == 2 || v3 == 6) && *(_DWORD *)(a1 + 492) && *(_BYTE *)(a2 + 24) == 8 ) *(_BYTE *)(a2 + 25) = 3; } if ( *(_BYTE *)(a1 + 112) & 4 && *(_BYTE *)(a2 + 24) < 8u ) *(_BYTE *)(a2 + 24) = 8; if ( *(_DWORD *)(a1 + 112) & 0x4000 ) *(_BYTE *)(a2 + 25) |= 2u; if ( (unsigned int)&loc_600000 & *(_DWORD *)(a1 + 112) ) *(_BYTE *)(a2 + 25) &= 0xFDu; v4 = *(_BYTE *)(a2 + 25); if ( v4 != 3 && v4 & 2 ) *(_BYTE *)(a2 + 29) = 3; else *(_BYTE *)(a2 + 29) = 1; if ( *(_DWORD *)(a1 + 108) & 0x400000 ) *(_BYTE *)(a2 + 25) = v4 & 0xFB; v5 = *(_BYTE *)(a2 + 25); if ( v5 & 4 ) ++*(_BYTE *)(a2 + 29); if ( *(_DWORD *)(a1 + 112) & 0x8000 && (v5 == 2 || !v5) ) { ++*(_BYTE *)(a2 + 29); if ( *(_DWORD *)(a1 + 112) & 0x1000000 ) *(_BYTE *)(a2 + 25) = v5 | 4; } if ( *(_DWORD *)(a1 + 112) & 0x100000 ) { v6 = *(_BYTE *)(a1 + 100); if ( *(_BYTE *)(a2 + 24) < v6 ) *(_BYTE *)(a2 + 24) = v6; v7 = *(_BYTE *)(a1 + 101); if ( *(_BYTE *)(a2 + 29) < v7 ) *(_BYTE *)(a2 + 29) = v7; } v8 = *(_BYTE *)(a2 + 29) * *(_BYTE *)(a2 + 24); *(_BYTE *)(a2 + 30) = v8; if ( v8 < 8u ) result = (*(_DWORD *)a2 * (unsigned int)v8 + 7) >> 3; else result = *(_DWORD *)a2 * ((unsigned int)v8 >> 3); *(_DWORD *)(a2 + 12) = result; return result; } //----- (0094A3F0) -------------------------------------------------------- unsigned __int8 __cdecl sub_94A3F0(int *a1, int a2) { int *v2; // ebx unsigned __int8 result; // al int v4; // eax int v5; // edi int v6; // eax _BYTE *v7; // esi _BYTE *v8; // edx int v9; // eax _BYTE *v10; // esi _BYTE *v11; // edx int v12; // eax _BYTE *v13; // esi _BYTE *v14; // edx int v15; // eax char v16; // cl int v17; // [esp+4h] [ebp-4h] int v18; // [esp+4h] [ebp-4h] int v19; // [esp+4h] [ebp-4h] v2 = a1; result = *((_BYTE *)a1 + 9); if ( result < 8u ) { v4 = result - 1; v5 = *a1; if ( v4 ) { v6 = v4 - 1; if ( v6 ) { if ( v6 != 2 ) goto LABEL_26; v7 = (_BYTE *)(a2 + ((unsigned int)(v5 - 1) >> 1)); v8 = (_BYTE *)(v5 + a2 - 1); v9 = 4 * (1 - ((v5 - 1) & 1)); if ( !v5 ) goto LABEL_26; v17 = *a1; do { *v8 = (*v7 >> v9) & 0xF; if ( v9 == 4 ) { v9 = 0; --v7; } else { v9 = 4; } --v8; --v17; } while ( v17 ); goto LABEL_25; } v10 = (_BYTE *)(a2 + ((unsigned int)(v5 - 1) >> 2)); v11 = (_BYTE *)(v5 + a2 - 1); v12 = 2 * (3 - ((v5 - 1) & 3)); if ( v5 ) { v18 = *a1; do { *v11 = (*v10 >> v12) & 3; if ( v12 == 6 ) { v12 = 0; --v10; } else { v12 += 2; } --v11; --v18; } while ( v18 ); LABEL_25: v2 = a1; goto LABEL_26; } } else { v13 = (_BYTE *)(a2 + ((unsigned int)(v5 - 1) >> 3)); v14 = (_BYTE *)(v5 + a2 - 1); v15 = 7 - ((v5 - 1) & 7); if ( v5 ) { v19 = *a1; do { *v14 = (*v13 >> v15) & 1; if ( v15 == 7 ) { v15 = 0; --v13; } else { ++v15; } --v14; --v19; } while ( v19 ); goto LABEL_25; } } LABEL_26: result = *((_BYTE *)v2 + 10); v16 = 8 * *((_BYTE *)v2 + 10); *((_BYTE *)v2 + 9) = 8; *((_BYTE *)v2 + 11) = v16; v2[1] = v5 * result; } return result; } //----- (0094A520) -------------------------------------------------------- int __cdecl sub_94A520(int *a1, int a2, unsigned __int8 *a3) { int result; // eax char v4; // bl int v5; // ecx int v6; // eax int v7; // edi int v8; // ebx unsigned int v9; // edi signed int v10; // esi int i; // edx int v12; // edi _BYTE *v13; // esi char j; // dl char v15; // bl unsigned int v16; // ebx int v17; // esi int v18; // edx unsigned int v19; // ebx unsigned __int8 *v20; // esi int v21; // edx unsigned __int16 v22; // ax signed __int16 v23; // [esp+8h] [ebp-1Ch] int v24; // [esp+10h] [ebp-14h] int v25; // [esp+14h] [ebp-10h] int v26; // [esp+18h] [ebp-Ch] result = a2; v4 = *((_BYTE *)a1 + 8); if ( v4 != 3 ) { v5 = *a1; v23 = 0; if ( v4 & 2 ) { v6 = *((unsigned __int8 *)a1 + 9); v7 = a3[1]; v24 = v6 - *a3; v8 = v6 - v7; v26 = v6 - a3[2]; result = a2; v25 = v8; v9 = 3; } else { v24 = *((unsigned __int8 *)a1 + 9) - a3[3]; v9 = 1; } if ( a1[2] & 4 ) *(&v24 + v9++) = *((unsigned __int8 *)a1 + 9) - a3[4]; v10 = 0; if ( (signed int)v9 > 0 ) { do { if ( *(&v24 + v10) > 0 ) v23 = 1; else *(&v24 + v10) = 0; ++v10; } while ( v10 < (signed int)v9 ); if ( v23 ) { switch ( *((unsigned __int8 *)a1 + 9) ) { case 2u: for ( i = a1[1]; i; --i ) { *(_BYTE *)result = (*(_BYTE *)result >> 1) & 0x55; ++result; } break; case 4u: v12 = a1[1]; v13 = (_BYTE *)result; result = v24; for ( j = (15 >> v24) | (240 >> v24) & 0xF0; v12; *(v13 - 1) = j & v15 ) { v15 = *v13++ >> result; --v12; } break; case 8u: v16 = 0; v17 = result; if ( v9 * v5 ) { do { result = v16 / v9; v18 = v16++ % v9; *(_BYTE *)(++v17 - 1) >>= *((_BYTE *)&v24 + 4 * v18); } while ( v16 < v9 * v5 ); } break; case 0x10u: v19 = 0; v20 = (unsigned __int8 *)result; if ( v9 * v5 ) { do { v21 = v19 % v9; v22 = v20[1] + (*v20 << 8); ++v19; v20 += 2; result = (unsigned __int16)(v22 >> *((_WORD *)&v24 + 2 * v21)); *(v20 - 2) = BYTE1(result); *(v20 - 1) = result; } while ( v19 < v9 * v5 ); } break; default: return result; } } } } return result; } //----- (0094A720) -------------------------------------------------------- void __cdecl sub_94A720(int a1, _BYTE *a2) { _BYTE *v2; // eax _BYTE *v3; // ecx int v4; // edi char v5; // cl int v6; // edx if ( *(_BYTE *)(a1 + 9) == 16 ) { v2 = a2; v3 = a2; if ( *(_DWORD *)a1 * *(unsigned __int8 *)(a1 + 10) ) { v4 = *(_DWORD *)a1 * *(unsigned __int8 *)(a1 + 10); do { *v3 = *v2; v2 += 2; ++v3; --v4; } while ( v4 ); } v5 = 8 * *(_BYTE *)(a1 + 10); v6 = *(_DWORD *)a1 * *(unsigned __int8 *)(a1 + 10); *(_BYTE *)(a1 + 9) = 8; *(_BYTE *)(a1 + 11) = v5; *(_DWORD *)(a1 + 4) = v6; } } //----- (0094A770) -------------------------------------------------------- int __cdecl sub_94A770(int a1, int a2) { int result; // eax char v3; // cl int v4; // edx int v5; // eax _BYTE *v6; // ecx int v7; // esi char v8; // dl char v9; // bl _BYTE *v10; // ecx int v11; // esi char v12; // dl char v13; // bl int v14; // eax _BYTE *v15; // ecx int v16; // esi char v17; // dl char v18; // bl _BYTE *v19; // ecx int v20; // esi char v21; // dl char v22; // bl char v23; // [esp+11h] [ebp+9h] char v24; // [esp+11h] [ebp+9h] result = a1; v3 = *(_BYTE *)(a1 + 8); v4 = *(_DWORD *)a1; if ( v3 == 6 ) { v5 = *(_DWORD *)(a1 + 4); if ( *(_BYTE *)(a1 + 9) == 8 ) { result = a2 + v5; v6 = (_BYTE *)result; if ( v4 ) { v7 = *(_DWORD *)a1; do { v8 = *(_BYTE *)(result - 1); *(v6 - 1) = *(_BYTE *)(result - 2); *(v6 - 2) = *(_BYTE *)(result - 3); v9 = *(_BYTE *)(result - 4); result -= 4; *(v6 - 3) = v9; v6 -= 4; --v7; *v6 = v8; } while ( v7 ); } } else { result = a2 + v5; v10 = (_BYTE *)result; if ( v4 ) { v11 = *(_DWORD *)a1; do { v12 = *(_BYTE *)(result - 1); v23 = *(_BYTE *)(result - 2); *(v10 - 1) = *(_BYTE *)(result - 3); *(v10 - 2) = *(_BYTE *)(result - 4); *(v10 - 3) = *(_BYTE *)(result - 5); *(v10 - 4) = *(_BYTE *)(result - 6); *(v10 - 5) = *(_BYTE *)(result - 7); v13 = *(_BYTE *)(result - 8); result -= 8; *(v10 - 6) = v13; *(v10 - 7) = v12; v10 -= 8; --v11; *v10 = v23; } while ( v11 ); } } } else if ( v3 == 4 ) { v14 = *(_DWORD *)(a1 + 4); if ( *(_BYTE *)(a1 + 9) == 8 ) { result = a2 + v14; v15 = (_BYTE *)result; if ( v4 ) { v16 = *(_DWORD *)a1; do { v17 = *(_BYTE *)(result - 1); v18 = *(_BYTE *)(result - 2); result -= 2; *(v15 - 1) = v18; v15 -= 2; --v16; *v15 = v17; } while ( v16 ); } } else { result = a2 + v14; v19 = (_BYTE *)result; if ( v4 ) { v20 = *(_DWORD *)a1; do { v21 = *(_BYTE *)(result - 1); v24 = *(_BYTE *)(result - 2); *(v19 - 1) = *(_BYTE *)(result - 3); v22 = *(_BYTE *)(result - 4); result -= 4; *(v19 - 2) = v22; *(v19 - 3) = v21; v19 -= 4; --v20; *v19 = v24; } while ( v20 ); } } } return result; } //----- (0094A8A0) -------------------------------------------------------- _BYTE *__cdecl sub_94A8A0(int *a1, int a2) { _BYTE *result; // eax char v3; // cl int v4; // edx int v5; // eax char v6; // cl int v7; // esi char v8; // dl int v9; // eax _BYTE *v10; // ecx int v11; // esi char v12; // dl int v13; // esi char v14; // dl result = a1; v3 = *((_BYTE *)a1 + 8); v4 = *a1; if ( v3 == 6 ) { v5 = a1[1]; if ( *((_BYTE *)a1 + 9) == 8 ) { for ( result = (_BYTE *)(a2 + v5); v4; result[3] = v6 ) { v6 = -1 - *(result - 1); result -= 4; --v4; } } else { result = (_BYTE *)(a2 + v5); if ( v4 ) { v7 = *a1; do { v8 = -1 - *(result - 1); result -= 8; result[7] = v8; --v7; result[6] = -1 - result[6]; } while ( v7 ); } } } else if ( v3 == 4 ) { v9 = a1[1]; if ( *((_BYTE *)a1 + 9) == 8 ) { result = (_BYTE *)(a2 + v9); v10 = result; if ( v4 ) { v11 = *a1; do { v12 = -1 - *(result - 1); result -= 2; *(v10 - 1) = v12; v10 -= 2; --v11; *v10 = *result; } while ( v11 ); } } else { result = (_BYTE *)(a2 + v9); if ( v4 ) { v13 = *a1; do { v14 = -1 - *(result - 1); result -= 4; result[3] = v14; --v13; result[2] = -1 - result[2]; } while ( v13 ); } } } return result; } //----- (0094A960) -------------------------------------------------------- char __cdecl sub_94A960(int a1, int a2, __int16 a3, char a4) { int v4; // ebx _BYTE *v5; // eax unsigned int v6; // esi int v7; // edi char v8; // cl bool v9; // zf _BYTE *v10; // edi char v11; // cl int v12; // edi char v13; // cl char v14; // cl int v15; // edi char v16; // cl char v17; // cl int v18; // ecx int v19; // edi char v20; // bl unsigned int v21; // edi char v22; // bl int v24; // [esp+14h] [ebp+8h] unsigned int v25; // [esp+14h] [ebp+8h] int v26; // [esp+14h] [ebp+8h] unsigned int v27; // [esp+14h] [ebp+8h] int v28; // [esp+14h] [ebp+8h] unsigned int v29; // [esp+14h] [ebp+8h] v4 = a1; LOBYTE(v5) = *(_BYTE *)(a1 + 8); v6 = *(_DWORD *)a1; if ( (_BYTE)v5 ) { if ( (_BYTE)v5 == 2 ) { LOBYTE(v5) = *(_BYTE *)(a1 + 9); if ( (_BYTE)v5 == 8 ) { v15 = v6 + a2 + 2 * v6; v5 = (_BYTE *)(v15 + v6); if ( a4 >= 0 ) { if ( v6 ) { v29 = *(_DWORD *)a1; do { *(v5 - 1) = *(_BYTE *)(v15 - 1); *(v5 - 2) = *(_BYTE *)(v15 - 2); v17 = *(_BYTE *)(v15 - 3); v15 -= 3; *(v5 - 3) = v17; v5 -= 4; v9 = v29-- == 1; *v5 = a3; } while ( !v9 ); } *(_WORD *)(v4 + 10) = 8196; *(_DWORD *)(v4 + 4) = 4 * v6; } else { if ( v6 > 1 ) { v28 = v6 - 1; do { *(v5 - 1) = a3; *(v5 - 2) = *(_BYTE *)(v15 - 1); *(v5 - 3) = *(_BYTE *)(v15 - 2); v16 = *(_BYTE *)(v15 - 3); v15 -= 3; v5 -= 4; v9 = v28-- == 1; *v5 = v16; } while ( !v9 ); } *(v5 - 1) = a3; *(_WORD *)(v4 + 10) = 8196; *(_DWORD *)(v4 + 4) = 4 * v6; } } else if ( (_BYTE)v5 == 16 ) { v18 = a2 + 6 * v6; v5 = (_BYTE *)(v18 + 2 * v6); if ( a4 >= 0 ) { if ( v6 ) { v21 = *(_DWORD *)a1; do { *(v5 - 1) = *(_BYTE *)(v18 - 1); *(v5 - 2) = *(_BYTE *)(v18 - 2); *(v5 - 3) = *(_BYTE *)(v18 - 3); *(v5 - 4) = *(_BYTE *)(v18 - 4); *(v5 - 5) = *(_BYTE *)(v18 - 5); v22 = *(_BYTE *)(v18 - 6); v18 -= 6; *(v5 - 6) = v22; *(v5 - 7) = HIBYTE(a3); v5 -= 8; --v21; *v5 = a3; } while ( v21 ); v4 = a1; } } else { if ( v6 > 1 ) { v19 = v6 - 1; do { *((_WORD *)v5 - 1) = a3; *(v5 - 3) = *(_BYTE *)(v18 - 1); *(v5 - 4) = *(_BYTE *)(v18 - 2); *(v5 - 5) = *(_BYTE *)(v18 - 3); *(v5 - 6) = *(_BYTE *)(v18 - 4); *(v5 - 7) = *(_BYTE *)(v18 - 5); v20 = *(_BYTE *)(v18 - 6); v18 -= 6; v5 -= 8; --v19; *v5 = v20; } while ( v19 ); v4 = a1; } *((_WORD *)v5 - 1) = a3; } *(_WORD *)(v4 + 10) = 16388; *(_DWORD *)(v4 + 4) = 8 * v6; } } } else { LOBYTE(v5) = *(_BYTE *)(a1 + 9); if ( (_BYTE)v5 == 8 ) { if ( a4 >= 0 ) { v5 = (_BYTE *)(v6 + a2); v10 = (_BYTE *)(v6 + a2 + v6); if ( v6 ) { v25 = *(_DWORD *)a1; do { v11 = *(v5-- - 1); *(v10 - 1) = v11; v10 -= 2; v9 = v25-- == 1; *v10 = a3; } while ( !v9 ); } *(_WORD *)(v4 + 10) = 4098; *(_DWORD *)(v4 + 4) = 2 * v6; } else { v7 = v6 + a2; v5 = (_BYTE *)(v6 + a2 + v6); if ( v6 > 1 ) { v24 = v6 - 1; do { *(v5 - 1) = a3; v8 = *(_BYTE *)(v7-- - 1); v5 -= 2; v9 = v24-- == 1; *v5 = v8; } while ( !v9 ); } *(v5 - 1) = a3; *(_WORD *)(v4 + 10) = 4098; *(_DWORD *)(v4 + 4) = 2 * v6; } } else if ( (_BYTE)v5 == 16 ) { v12 = a2 + 2 * v6; v5 = (_BYTE *)(v12 + 2 * v6); if ( a4 >= 0 ) { if ( v6 ) { v27 = *(_DWORD *)a1; do { *(v5 - 1) = *(_BYTE *)(v12 - 1); v14 = *(_BYTE *)(v12 - 2); v12 -= 2; *(v5 - 2) = v14; *(v5 - 3) = HIBYTE(a3); v5 -= 4; v9 = v27-- == 1; *v5 = a3; } while ( !v9 ); } *(_WORD *)(v4 + 10) = 8194; *(_DWORD *)(v4 + 4) = 4 * v6; } else { if ( v6 > 1 ) { v26 = v6 - 1; do { *((_WORD *)v5 - 1) = a3; *(v5 - 3) = *(_BYTE *)(v12 - 1); v13 = *(_BYTE *)(v12 - 2); v12 -= 2; v5 -= 4; v9 = v26-- == 1; *v5 = v13; } while ( !v9 ); } *((_WORD *)v5 - 1) = a3; *(_WORD *)(v4 + 10) = 8194; *(_DWORD *)(v4 + 4) = 4 * v6; } } } return (char)v5; } //----- (0094AC30) -------------------------------------------------------- void __cdecl sub_94AC30(int *a1, int a2) { unsigned __int8 v2; // cl int v3; // esi char v4; // al _BYTE *v5; // ecx _BYTE *v6; // eax int v7; // edi _BYTE *v8; // ecx _BYTE *v9; // eax int v10; // edi _BYTE *v11; // ecx _BYTE *v12; // eax int v13; // edi _BYTE *v14; // ecx _BYTE *v15; // eax int v16; // edi unsigned __int8 v17; // al v2 = *((_BYTE *)a1 + 9); v3 = *a1; if ( v2 >= 8u ) { v4 = *((_BYTE *)a1 + 8); if ( !(v4 & 2) ) { if ( v4 ) { if ( v4 == 4 ) { if ( v2 == 8 ) { v11 = (_BYTE *)(a2 + 2 * v3 - 1); v12 = &v11[2 * v3]; if ( v3 ) { v13 = *a1; do { *v12 = *v11; *(v12 - 1) = *(v11 - 1); *(v12 - 2) = *(v11 - 1); *(v12 - 3) = *(v11 - 1); v12 -= 4; v11 -= 2; --v13; } while ( v13 ); } } else { v14 = (_BYTE *)(a2 + 4 * v3 - 1); v15 = &v14[4 * v3]; if ( v3 ) { v16 = *a1; do { *v15 = *v14; *(v15 - 1) = *(v14 - 1); *(v15 - 2) = *(v14 - 2); *(v15 - 3) = *(v14 - 3); *(v15 - 4) = *(v14 - 2); *(v15 - 5) = *(v14 - 3); *(v15 - 6) = *(v14 - 2); *(v15 - 7) = *(v14 - 3); v15 -= 8; v14 -= 4; --v16; } while ( v16 ); } } } } else if ( v2 == 8 ) { v5 = (_BYTE *)(v3 + a2 - 1); v6 = &v5[2 * v3]; if ( v3 ) { v7 = *a1; do { *v6 = *v5; *(v6 - 1) = *v5; *(v6 - 2) = *v5; v6 -= 3; --v5; --v7; } while ( v7 ); } } else { v8 = (_BYTE *)(a2 + 2 * v3 - 1); v9 = &v8[4 * v3]; if ( v3 ) { v10 = *a1; do { *v9 = *v8; *(v9 - 1) = *(v8 - 1); *(v9 - 2) = *v8; *(v9 - 3) = *(v8 - 1); *(v9 - 4) = *v8; *(v9 - 5) = *(v8 - 1); v9 -= 6; v8 -= 2; --v10; } while ( v10 ); } } *((_BYTE *)a1 + 10) += 2; *((_BYTE *)a1 + 8) |= 2u; v17 = *((_BYTE *)a1 + 10) * *((_BYTE *)a1 + 9); *((_BYTE *)a1 + 11) = v17; if ( v17 < 8u ) a1[1] = (v3 * (unsigned int)v17 + 7) >> 3; else a1[1] = v3 * ((unsigned int)v17 >> 3); } } } //----- (0094ADA0) -------------------------------------------------------- int __cdecl sub_94ADA0(int a1, int *a2, unsigned __int16 *a3) { int v3; // ecx char v4; // dl int result; // eax int v6; // ebx unsigned __int16 *v7; // esi int v8; // edi unsigned __int8 v9; // cl unsigned __int16 *v10; // edi bool v11; // zf unsigned __int16 *v12; // esi unsigned __int16 *v13; // edi unsigned __int8 v14; // cl unsigned __int16 *v15; // edx unsigned int v16; // edi unsigned __int16 v17; // cx unsigned int v18; // esi __int16 v19; // si __int16 v20; // cx unsigned int v21; // edi unsigned __int16 *v22; // edx unsigned __int16 *v23; // esi __int16 v24; // cx unsigned __int16 *v25; // edi int v26; // ecx unsigned __int16 *v27; // eax unsigned __int16 *v28; // ecx unsigned int v29; // edi unsigned __int16 v30; // dx _BYTE *v31; // ecx __int16 v32; // dx __int16 v33; // cx unsigned int v34; // edi unsigned __int16 *v35; // eax unsigned __int16 *v36; // ecx unsigned __int16 v37; // dx unsigned __int16 v38; // si __int16 v39; // si int *v40; // esi char v41; // al unsigned __int8 v42; // al int v43; // [esp+4h] [ebp-28h] int v44; // [esp+4h] [ebp-28h] int v45; // [esp+4h] [ebp-28h] unsigned __int16 v46; // [esp+4h] [ebp-28h] unsigned __int16 v47; // [esp+4h] [ebp-28h] int v48; // [esp+8h] [ebp-24h] unsigned __int16 v49; // [esp+8h] [ebp-24h] unsigned __int16 *v50; // [esp+8h] [ebp-24h] int v51; // [esp+8h] [ebp-24h] int v52; // [esp+Ch] [ebp-20h] int v53; // [esp+Ch] [ebp-20h] unsigned __int16 v54; // [esp+Ch] [ebp-20h] unsigned __int16 v55; // [esp+Ch] [ebp-20h] int v56; // [esp+Ch] [ebp-20h] int v57; // [esp+10h] [ebp-1Ch] unsigned __int16 *v58; // [esp+14h] [ebp-18h] unsigned __int16 *v59; // [esp+14h] [ebp-18h] unsigned __int16 v60; // [esp+14h] [ebp-18h] _BYTE *v61; // [esp+14h] [ebp-18h] int v62; // [esp+18h] [ebp-14h] int v63; // [esp+1Ch] [ebp-10h] int v64; // [esp+20h] [ebp-Ch] int v65; // [esp+24h] [ebp-8h] unsigned __int8 v66; // [esp+29h] [ebp-3h] unsigned __int8 v67; // [esp+2Ah] [ebp-2h] unsigned __int8 v68; // [esp+2Ah] [ebp-2h] unsigned __int8 v69; // [esp+2Ah] [ebp-2h] unsigned __int8 v70; // [esp+2Ah] [ebp-2h] unsigned __int8 v71; // [esp+2Bh] [ebp-1h] unsigned __int8 v72; // [esp+2Bh] [ebp-1h] unsigned __int8 v73; // [esp+2Bh] [ebp-1h] v3 = *a2; v4 = *((_BYTE *)a2 + 8); result = 0; v64 = *a2; v65 = 0; if ( !(v4 & 2) ) return result; v6 = *(unsigned __int16 *)(a1 + 558); v62 = *(unsigned __int16 *)(a1 + 554); v63 = *(unsigned __int16 *)(a1 + 556); v57 = *(unsigned __int16 *)(a1 + 558); if ( v4 != 2 ) goto LABEL_39; if ( *((_BYTE *)a2 + 9) == 8 ) { if ( *(_DWORD *)(a1 + 360) && *(_DWORD *)(a1 + 364) ) { v7 = a3; v58 = a3; if ( !v3 ) goto LABEL_40; v52 = *a2; do { v8 = *(_DWORD *)(a1 + 364); v9 = *(_BYTE *)(*((unsigned __int8 *)v7 + 1) + v8); v67 = *(_BYTE *)(*(unsigned __int8 *)v7 + v8); v71 = *(_BYTE *)(*((unsigned __int8 *)v7 + 2) + v8); v7 = (unsigned __int16 *)((char *)v7 + 3); if ( v67 != v9 || v67 != v71 ) { v65 |= 1u; v10 = v58; *(_BYTE *)v58 = *(_BYTE *)(((v62 * v67 + v63 * v9 + v6 * (unsigned int)v71) >> 15) + *(_DWORD *)(a1 + 360)); } else { v10 = v58; *(_BYTE *)v58 = *((_BYTE *)v7 - 1); } v11 = v52-- == 1; v58 = (unsigned __int16 *)((char *)v10 + 1); } while ( !v11 ); goto LABEL_38; } v12 = a3; v13 = a3; if ( v3 ) { v53 = *a2; do { v72 = *(_BYTE *)v12; v14 = *((_BYTE *)v12 + 1); v68 = *((_BYTE *)v12 + 2); v12 = (unsigned __int16 *)((char *)v12 + 3); if ( v72 != v14 || v72 != v68 ) { v65 |= 1u; *(_BYTE *)v13 = (v62 * v72 + v63 * v14 + v6 * (unsigned int)v68) >> 15; } else { *(_BYTE *)v13 = *((_BYTE *)v12 - 1); } v13 = (unsigned __int16 *)((char *)v13 + 1); --v53; } while ( v53 ); LABEL_38: v3 = v64; goto LABEL_39; } } else if ( *(_DWORD *)(a1 + 376) && *(_DWORD *)(a1 + 372) ) { v15 = a3; v59 = a3; if ( v3 ) { v48 = *a2; do { v16 = _byteswap_ushort(*v15); v54 = _byteswap_ushort(v15[1]); v17 = _byteswap_ushort(v15[2]); v15 += 3; v18 = v17; if ( (_WORD)v16 != v54 || (_WORD)v16 != v17 ) { v20 = *(_WORD *)(a1 + 344); v6 = v57; v21 = (v57 * *(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v18 >> v20)) + 2 * (v18 >> 8)) + v63 * *(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v54 >> v20)) + 2 * ((unsigned int)v54 >> 8)) + v62 * (unsigned int)*(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v16 >> v20)) + 2 * (v16 >> 8))) >> 15; v65 |= 1u; v19 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 372) + 4 * ((unsigned int)(unsigned __int8)v21 >> v20)) + 2 * ((unsigned int)(unsigned __int16)v21 >> 8)); } else { v19 = v16; } *(_BYTE *)v59 = HIBYTE(v19); *((_BYTE *)v59 + 1) = v19; ++v59; --v48; } while ( v48 ); goto LABEL_38; } } else { v22 = a3; v23 = a3; if ( v3 ) { v43 = *a2; do { v60 = _byteswap_ushort(*v22); v55 = _byteswap_ushort(v22[1]); v49 = _byteswap_ushort(v22[2]); v22 += 3; if ( v60 != v55 || v60 != v49 ) v65 |= 1u; v24 = (v62 * v60 + v63 * v55 + v6 * (unsigned int)v49) >> 15; *(_BYTE *)v23 = HIBYTE(v24); v6 = v57; *((_BYTE *)v23 + 1) = v24; ++v23; --v43; } while ( v43 ); goto LABEL_38; } } LABEL_39: v7 = a3; LABEL_40: if ( *((_BYTE *)a2 + 8) == 6 ) { if ( *((_BYTE *)a2 + 9) != 8 ) { if ( *(_DWORD *)(a1 + 376) && *(_DWORD *)(a1 + 372) ) { v28 = v7; v50 = v7; if ( v64 ) { v56 = v64; do { v29 = _byteswap_ushort(*v28); v46 = _byteswap_ushort(v28[1]); v30 = _byteswap_ushort(v28[2]); v31 = v28 + 3; v61 = v31; if ( (_WORD)v29 != v46 || (_WORD)v29 != v30 ) { v33 = *(_WORD *)(a1 + 344); v34 = (v57 * *(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v30 >> v33)) + 2 * ((unsigned int)v30 >> 8)) + v63 * *(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v46 >> v33)) + 2 * ((unsigned int)v46 >> 8)) + v62 * (unsigned int)*(unsigned __int16 *)(*(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * ((unsigned int)(unsigned __int8)v29 >> v33)) + 2 * (v29 >> 8))) >> 15; v65 |= 1u; v32 = *(_WORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 372) + 4 * ((unsigned int)(unsigned __int8)v34 >> v33)) + 2 * ((unsigned int)(unsigned __int16)v34 >> 8)); v31 = v61; v7 = v50; } else { v32 = v29; } *(_BYTE *)v7 = HIBYTE(v32); *((_BYTE *)v7 + 1) = v32; *((_BYTE *)v7 + 2) = *v31; *((_BYTE *)v7 + 3) = v31[1]; v7 += 2; v28 = (unsigned __int16 *)(v31 + 2); v11 = v56-- == 1; v50 = v7; } while ( !v11 ); } } else { v35 = v7; v36 = v7; if ( v64 ) { v51 = v64; do { v47 = _byteswap_ushort(*v35); v37 = _byteswap_ushort(v35[1]); v38 = _byteswap_ushort(v35[2]); if ( v47 != v37 || v47 != v38 ) v65 |= 1u; v39 = (v62 * v47 + v63 * v37 + v6 * (unsigned int)v38) >> 15; *(_BYTE *)v36 = HIBYTE(v39); *((_BYTE *)v36 + 1) = v39; *((_BYTE *)v36 + 2) = *((_BYTE *)v35 + 6); *((_BYTE *)v36 + 3) = *((_BYTE *)v35 + 7); v36 += 2; v35 += 4; --v51; } while ( v51 ); } } goto LABEL_75; } if ( *(_DWORD *)(a1 + 360) && *(_DWORD *)(a1 + 364) ) { v25 = v7; if ( v64 ) { v44 = v64; while ( 1 ) { v26 = *(_DWORD *)(a1 + 364); v66 = *(_BYTE *)(*(unsigned __int8 *)v7 + v26); v73 = *(_BYTE *)(*((unsigned __int8 *)v7 + 1) + v26); v69 = *(_BYTE *)(*((unsigned __int8 *)v7 + 2) + v26); if ( v66 != v73 || v66 != v69 ) v65 |= 1u; *(_BYTE *)v25 = *(_BYTE *)(((v62 * v66 + v63 * v73 + v6 * (unsigned int)v69) >> 15) + *(_DWORD *)(a1 + 360)); *((_BYTE *)v25 + 1) = *((_BYTE *)v7 + 3); ++v25; v7 += 2; if ( !--v44 ) break; v6 = v57; } } LABEL_75: v3 = v64; goto LABEL_76; } v27 = v7; if ( v3 ) { v45 = v3; do { v70 = *((_BYTE *)v27 + 1); if ( *(_BYTE *)v27 != v70 || *(_BYTE *)v27 != *((_BYTE *)v27 + 2) ) v65 |= 1u; *(_BYTE *)v7 = (v62 * *(unsigned __int8 *)v27 + v63 * v70 + v6 * (unsigned int)*((unsigned __int8 *)v27 + 2)) >> 15; *((_BYTE *)v7 + 1) = *((_BYTE *)v27 + 3); ++v7; v27 += 2; --v45; } while ( v45 ); goto LABEL_75; } } LABEL_76: v40 = a2; v41 = *((_BYTE *)a2 + 9); *((_BYTE *)v40 + 10) -= 2; v42 = *((_BYTE *)a2 + 10) * v41; *((_BYTE *)v40 + 8) &= 0xFDu; *((_BYTE *)a2 + 11) = v42; if ( v42 < 8u ) a2[1] = (v3 * (unsigned int)v42 + 7) >> 3; else a2[1] = v3 * ((unsigned int)v42 >> 3); return v65; } //----- (0094B450) -------------------------------------------------------- char __cdecl sub_94B450(int *a1, unsigned __int8 *a2, _WORD *a3, _BYTE *a4, _WORD *a5, int a6, int a7, int a8, int a9, int a10, int a11, __int16 a12) { unsigned int v12; // eax int v13; // ecx _BYTE *v14; // esi signed int v15; // edx char v16; // al _BYTE *v17; // esi signed int v18; // edx unsigned __int8 v19; // al char v20; // al char v21; // bl char v22; // al _BYTE *v23; // esi signed int v24; // edx unsigned __int8 v25; // al char v26; // al char v27; // bl char v28; // al _BYTE *v29; // eax int v30; // edx char v31; // cl unsigned __int8 *v32; // eax unsigned __int8 v33; // cl __int16 v34; // cx int v35; // esi _BYTE *v36; // eax unsigned __int8 v37; // cl char v38; // cl int v39; // esi _BYTE *v40; // eax unsigned __int8 *v41; // eax unsigned __int8 v42; // bl unsigned __int8 v43; // cl __int16 v44; // cx __int16 v45; // cx unsigned int v46; // edi unsigned __int8 v47; // bh int v48; // ecx unsigned int v49; // edi int v50; // edx int v51; // esi unsigned __int8 *v52; // eax unsigned __int8 *v53; // ecx _BYTE *v54; // esi __int16 v55; // ax int v56; // eax int v57; // edx char v58; // al unsigned int v59; // eax unsigned __int8 *v60; // ecx _BYTE *v61; // esi unsigned __int8 v62; // al unsigned int v63; // eax _BYTE *v64; // esi char v65; // bl unsigned __int8 *v66; // edx int v67; // eax __int16 v68; // ax int v69; // ecx unsigned int v70; // ecx unsigned __int8 *v71; // esi _BYTE *v72; // edx unsigned __int8 *v73; // ecx int v74; // eax unsigned int v75; // eax int v76; // edi int v77; // edx int v78; // ecx _BYTE *v79; // ebx _BYTE *v80; // esi unsigned __int8 *v81; // edi unsigned __int8 v82; // al char v83; // al __int16 v84; // cx unsigned int v85; // edx unsigned int v86; // eax _BYTE *v87; // edx _BYTE *v88; // esi unsigned __int8 *v89; // edi unsigned __int8 v90; // al int v91; // ecx __int16 v92; // cx unsigned int v93; // edx int v94; // ebx unsigned int v95; // edx int v96; // ebx unsigned int v97; // eax int v98; // edi char v99; // bl _BYTE *v100; // eax unsigned __int8 *v101; // edx int v102; // esi __int16 v103; // si __int16 v104; // si __int16 v105; // ST18_2 __int16 v106; // cx char v107; // ST14_1 unsigned int v108; // ebx __int16 v109; // cx unsigned int v110; // ecx unsigned int v111; // ecx unsigned int v112; // ebx unsigned int v113; // esi _BYTE *v114; // esi int v115; // eax unsigned __int8 *v116; // ecx int v117; // edx unsigned int v118; // edx unsigned __int16 v119; // ST10_2 unsigned __int16 v120; // ST14_2 int v121; // esi unsigned int v122; // edx unsigned int v123; // edx unsigned int v124; // esi unsigned int v125; // edx unsigned __int8 v126; // al int v128; // [esp+0h] [ebp-14h] int v129; // [esp+0h] [ebp-14h] int v130; // [esp+8h] [ebp-Ch] int v131; // [esp+8h] [ebp-Ch] int v132; // [esp+8h] [ebp-Ch] int v133; // [esp+8h] [ebp-Ch] int v134; // [esp+8h] [ebp-Ch] int v135; // [esp+8h] [ebp-Ch] int v136; // [esp+8h] [ebp-Ch] int v137; // [esp+8h] [ebp-Ch] int v138; // [esp+8h] [ebp-Ch] int v139; // [esp+8h] [ebp-Ch] int v140; // [esp+8h] [ebp-Ch] int v141; // [esp+8h] [ebp-Ch] int v142; // [esp+8h] [ebp-Ch] int v143; // [esp+8h] [ebp-Ch] int v144; // [esp+10h] [ebp-4h] LOBYTE(v12) = (_BYTE)a1; v13 = *a1; v144 = *a1; if ( !a4 ) return v12; LOBYTE(v12) = *((_BYTE *)a1 + 8); if ( v12 & 4 ) { if ( (_BYTE)v12 == 3 || !a3 ) return v12; } switch ( (unsigned __int8)v12 ) { case 0u: switch ( *((unsigned __int8 *)a1 + 9) ) { case 1u: v14 = a2; v15 = 7; if ( v13 ) { v130 = *a1; do { if ( ((*v14 >> v15) & 1) == a3[4] ) { v16 = *v14 & (32639 >> (7 - v15)); *v14 = v16; *v14 = v16 | (a4[8] << v15); } if ( v15 ) { --v15; } else { v15 = 7; ++v14; } --v130; } while ( v130 ); } break; case 2u: v17 = a2; v18 = 6; if ( a6 ) { if ( v13 ) { v131 = *a1; do { v19 = (*v17 >> v18) & 3; if ( v19 == a3[4] ) { v20 = *v17 & (16191 >> (6 - v18)); *v17 = v20; v21 = a4[8] << v18; } else { v21 = *v17 & (16191 >> (6 - v18)); v20 = *(_BYTE *)((v19 | 4 * (v19 | 4 * (v19 | 4 * v19))) + a6) >> 6 << v18; } *v17 = v20 | v21; if ( v18 ) { v18 -= 2; } else { v18 = 6; ++v17; } --v131; } while ( v131 ); } } else if ( v13 ) { v132 = *a1; do { if ( ((*v17 >> v18) & 3) == a3[4] ) { v22 = *v17 & (16191 >> (6 - v18)); *v17 = v22; *v17 = v22 | (a4[8] << v18); } if ( v18 ) { v18 -= 2; } else { v18 = 6; ++v17; } --v132; } while ( v132 ); } break; case 4u: v23 = a2; v24 = 4; if ( a6 ) { if ( v13 ) { v133 = *a1; do { v25 = (*v23 >> v24) & 0xF; if ( v25 == a3[4] ) { v26 = *v23 & (3855 >> (4 - v24)); *v23 = v26; v27 = a4[8] << v24; } else { v27 = *v23 & (3855 >> (4 - v24)); v26 = *(_BYTE *)((v25 | 16 * v25) + a6) >> 4 << v24; } *v23 = v26 | v27; if ( v24 ) { v24 -= 4; } else { v24 = 4; ++v23; } --v133; } while ( v133 ); } } else if ( v13 ) { v134 = *a1; do { if ( ((*v23 >> v24) & 0xF) == a3[4] ) { v28 = *v23 & (3855 >> (4 - v24)); *v23 = v28; *v23 = v28 | (a4[8] << v24); } if ( v24 ) { v24 -= 4; } else { v24 = 4; ++v23; } --v134; } while ( v134 ); } break; case 8u: v29 = a2; if ( a6 ) { if ( v13 ) { v30 = *a1; do { if ( (unsigned __int8)*v29 == a3[4] ) v31 = a4[8]; else v31 = *(_BYTE *)((unsigned __int8)*v29 + a6); *v29++ = v31; --v30; } while ( v30 ); } } else { for ( ; v13; --v13 ) { if ( (unsigned __int8)*v29 == a3[4] ) *v29 = a4[8]; ++v29; } } break; case 0x10u: v32 = a2; if ( a9 ) { if ( v13 ) { v135 = *a1; do { v33 = v32[1]; if ( v33 + (*v32 << 8) == a3[4] ) { *v32 = a4[9]; LOBYTE(v34) = a4[8]; } else { v34 = *(_WORD *)(*(_DWORD *)(a9 + 4 * ((unsigned int)v33 >> a12)) + 2 * *v32); *v32 = HIBYTE(v34); } v32[1] = v34; v32 += 2; --v135; } while ( v135 ); } } else if ( v13 ) { v35 = *a1; do { if ( v32[1] + (*v32 << 8) == a3[4] ) { *v32 = a4[9]; v32[1] = a4[8]; } v32 += 2; --v35; } while ( v35 ); } break; default: goto LABEL_210; } goto LABEL_210; case 2u: if ( *((_BYTE *)a1 + 9) == 8 ) { if ( a6 ) { if ( v13 ) { v36 = a2 + 2; v136 = *a1; do { v37 = *(v36 - 2); if ( v37 != a3[1] || (unsigned __int8)*(v36 - 1) != a3[2] || (unsigned __int8)*v36 != a3[3] ) { *(v36 - 2) = *(_BYTE *)(v37 + a6); *(v36 - 1) = *(_BYTE *)((unsigned __int8)*(v36 - 1) + a6); v38 = *(_BYTE *)((unsigned __int8)*v36 + a6); } else { *(v36 - 2) = a4[2]; *(v36 - 1) = a4[4]; v38 = a4[6]; } *v36 = v38; v36 += 3; --v136; } while ( v136 ); } } else if ( v13 ) { v39 = *a1; v40 = a2 + 2; do { if ( (unsigned __int8)*(v40 - 2) == a3[1] && (unsigned __int8)*(v40 - 1) == a3[2] && (unsigned __int8)*v40 == a3[3] ) { *(v40 - 2) = a4[2]; *(v40 - 1) = a4[4]; *v40 = a4[6]; } v40 += 3; --v39; } while ( v39 ); } } else if ( a9 ) { if ( v13 ) { v41 = a2 + 2; v137 = *a1; do { v42 = *(v41 - 2); v43 = *(v41 - 1); if ( v43 + (v42 << 8) != a3[1] || v41[1] + (*v41 << 8) != a3[2] || v41[3] + (v41[2] << 8) != a3[3] ) { v45 = *(_WORD *)(*(_DWORD *)(a9 + 4 * ((unsigned int)v43 >> a12)) + 2 * v42); v46 = v41[1]; v47 = HIBYTE(v45); *(v41 - 1) = v45; v48 = *v41; *(v41 - 2) = v47; LOWORD(v48) = *(_WORD *)(*(_DWORD *)(a9 + 4 * (v46 >> a12)) + 2 * v48); v49 = v41[3]; v41[1] = v48; v50 = v41[2]; *v41 = BYTE1(v48); v44 = *(_WORD *)(*(_DWORD *)(a9 + 4 * (v49 >> a12)) + 2 * v50); v41[2] = HIBYTE(v44); } else { *(v41 - 2) = a4[3]; *(v41 - 1) = a4[2]; *v41 = a4[5]; v41[1] = a4[4]; v41[2] = a4[7]; LOBYTE(v44) = a4[6]; } v41[3] = v44; v41 += 6; --v137; } while ( v137 ); } } else if ( v13 ) { v51 = *a1; v52 = a2 + 2; do { if ( *(v52 - 1) + (*(v52 - 2) << 8) == a3[1] && v52[1] + (*v52 << 8) == a3[2] && v52[3] + (v52[2] << 8) == a3[3] ) { *(v52 - 2) = a4[3]; *(v52 - 1) = a4[2]; *v52 = a4[5]; v52[1] = a4[4]; v52[2] = a4[7]; v52[3] = a4[6]; } v52 += 6; --v51; } while ( v51 ); } goto LABEL_210; case 4u: if ( *((_BYTE *)a1 + 9) == 8 ) { if ( a8 && a7 && a6 ) { v53 = a2; v54 = a2; if ( v144 ) { v138 = *a1; while ( 1 ) { v55 = v53[1]; if ( v55 == 255 ) break; if ( v53[1] ) { v59 = (unsigned __int16)(v55 * *(unsigned __int8 *)(*v53 + a8) + a5[4] * (255 - v55) + 128); v56 = (unsigned __int8)((unsigned __int16)(v59 + (v59 >> 8)) >> 8); v57 = a7; goto LABEL_131; } v58 = a4[8]; LABEL_132: *v54 = v58; v53 += 2; ++v54; if ( !--v138 ) goto LABEL_210; } v56 = *v53; v57 = a6; LABEL_131: v58 = *(_BYTE *)(v56 + v57); goto LABEL_132; } } else { v60 = a2; v61 = a2; if ( v144 ) { v139 = *a1; do { v62 = v60[1]; if ( v62 == -1 ) { *v61 = *v60; } else if ( v62 ) { v63 = (unsigned __int16)(v62 * *v60 + a5[4] * (255 - v62) + 128); *v61 = (unsigned __int16)(v63 + (v63 >> 8)) >> 8; } else { *v61 = a4[8]; } v60 += 2; ++v61; --v139; } while ( v139 ); } } goto LABEL_210; } if ( a9 && a10 && a11 ) { v64 = a2; if ( v13 ) { v65 = a12; v66 = a2 + 1; v140 = *a1; while ( 1 ) { v67 = (unsigned __int16)(v66[2] + (v66[1] << 8)); if ( (_WORD)v67 == -1 ) break; if ( (_WORD)v67 ) { v69 = v67 * *(unsigned __int16 *)(*(_DWORD *)(a11 + 4 * ((unsigned int)*v66 >> v65)) + 2 * *(v66 - 1)); v65 = a12; v70 = v69 + (0xFFFF - v67) * (unsigned __int16)a5[4] + 0x8000; v68 = *(_WORD *)(*(_DWORD *)(a10 + 4 * ((unsigned int)(unsigned __int8)((v70 + (v70 >> 16)) >> 16) >> a12)) + 2 * ((v70 + (v70 >> 16)) >> 24)); goto LABEL_153; } *v64 = a4[9]; v64[1] = a4[8]; LABEL_154: v66 += 4; v64 += 2; if ( !--v140 ) goto LABEL_210; } v68 = *(_WORD *)(*(_DWORD *)(a9 + 4 * ((unsigned int)*v66 >> v65)) + 2 * *(v66 - 1)); LABEL_153: v64[1] = v68; *v64 = HIBYTE(v68); goto LABEL_154; } } else { v71 = a2; if ( v144 ) { v141 = *a1; v72 = a4; v73 = a2 + 3; do { v74 = (unsigned __int16)(*v73 + (*(v73 - 1) << 8)); if ( (_WORD)v74 == -1 ) { *(_WORD *)v71 = *(_WORD *)(v73 - 3); } else { if ( (_WORD)v74 ) { v76 = (0xFFFF - v74) * (unsigned __int16)a5[4]; v75 = (v74 * (unsigned __int16)(*(v73 - 2) + (*(v73 - 3) << 8)) + v76 + 0x8000 + ((v74 * (unsigned int)(unsigned __int16)(*(v73 - 2) + (*(v73 - 3) << 8)) + v76 + 0x8000) >> 16)) >> 16; *v71 = BYTE1(v75); v72 = a4; } else { *v71 = v72[9]; LOBYTE(v75) = v72[8]; } v71[1] = v75; } v73 += 4; v71 += 2; --v141; } while ( v141 ); } } LABEL_210: LOBYTE(v12) = *((_BYTE *)a1 + 8); if ( v12 & 4 ) { --*((_BYTE *)a1 + 10); *((_BYTE *)a1 + 8) = v12 & 0xFB; v126 = *((_BYTE *)a1 + 10) * *((_BYTE *)a1 + 9); *((_BYTE *)a1 + 11) = v126; if ( v126 < 8u ) v12 = (v144 * (unsigned int)v126 + 7) >> 3; else v12 = v144 * ((unsigned int)v126 >> 3); a1[1] = v12; } return v12; case 6u: if ( *((_BYTE *)a1 + 9) == 8 ) { v77 = a8; if ( a8 && a7 && (v78 = a6) != 0 ) { if ( v144 ) { v79 = a4; v80 = a2 + 2; v81 = a2 + 1; v142 = *a1; do { v82 = v81[2]; if ( v82 == -1 ) { *(v80 - 2) = *(_BYTE *)(*(v81 - 1) + v78); *(v80 - 1) = *(_BYTE *)(*v81 + v78); v83 = *(_BYTE *)(v81[1] + v78); } else if ( v82 ) { v84 = 255 - v82; v85 = (unsigned __int16)(v84 * a5[1] + v82 * *(unsigned __int8 *)(*(v81 - 1) + v77) + 128); *(v80 - 2) = *(_BYTE *)(((unsigned __int16)(v85 + (v85 >> 8)) >> 8) + a7); *(v80 - 1) = *(_BYTE *)(((unsigned __int16)(v84 * a5[2] + v82 * *(unsigned __int8 *)(*v81 + a8) + 128 + ((unsigned __int16)(v84 * a5[2] + v82 * *(unsigned __int8 *)(*v81 + a8) + 128) >> 8)) >> 8) + a7); v77 = a8; v86 = (unsigned __int16)(v84 * a5[3] + v82 * *(unsigned __int8 *)(v81[1] + a8) + 128); v79 = a4; v83 = *(_BYTE *)(((unsigned __int16)(v86 + (v86 >> 8)) >> 8) + a7); v78 = a6; } else { *(v80 - 2) = v79[2]; *(v80 - 1) = v79[4]; v83 = v79[6]; } *v80 = v83; v81 += 4; v80 += 3; --v142; } while ( v142 ); } } else if ( v144 ) { v87 = a4; v88 = a2 + 2; v89 = a2 + 1; v143 = *a1; do { v90 = v89[2]; if ( v90 == -1 ) { *(v88 - 2) = *(v89 - 1); *(v88 - 1) = *v89; *v88 = v89[1]; } else { if ( v90 ) { v92 = 255 - v90; v93 = (unsigned __int16)(v92 * *((_WORD *)v87 + 1) + v90 * *(v89 - 1) + 128); v94 = v93 + (v93 >> 8); *(v88 - 2) = BYTE1(v94); v95 = (unsigned __int16)(v90 * *v89 + v92 * *((_WORD *)a4 + 2) + 128); v96 = v95 + (v95 >> 8); v87 = a4; *(v88 - 1) = BYTE1(v96); v97 = (unsigned __int16)(v92 * *((_WORD *)a4 + 3) + v90 * v89[1] + 128); v91 = (signed int)(v97 + (v97 >> 8)) >> 8; } else { *(v88 - 2) = v87[2]; *(v88 - 1) = v87[4]; LOBYTE(v91) = v87[6]; } *v88 = v91; } v89 += 4; v88 += 3; --v143; } while ( v143 ); } } else { v98 = a9; if ( a9 && a10 && a11 ) { if ( v13 ) { v99 = a12; v100 = a2 + 2; v101 = a2 + 1; v128 = *a1; do { v102 = (unsigned __int16)(v101[6] + (v101[5] << 8)); if ( (_WORD)v102 == -1 ) { v103 = *(_WORD *)(*(_DWORD *)(v98 + 4 * ((unsigned int)*v101 >> v99)) + 2 * *(v101 - 1)); *(v100 - 2) = HIBYTE(v103); *(v100 - 1) = v103; v104 = *(_WORD *)(*(_DWORD *)(v98 + 4 * ((unsigned int)v101[2] >> v99)) + 2 * v101[1]); *v100 = *(_WORD *)(*(_DWORD *)(v98 + 4 * ((unsigned int)v101[2] >> v99)) + 2 * v101[1]) >> 8; v100[1] = v104; v105 = *(_WORD *)(*(_DWORD *)(v98 + 4 * ((unsigned int)v101[4] >> v99)) + 2 * v101[3]); v100[2] = *(_WORD *)(*(_DWORD *)(v98 + 4 * ((unsigned int)v101[4] >> v99)) + 2 * v101[3]) >> 8; LOBYTE(v106) = v105; } else if ( (_WORD)v102 ) { v107 = v99; v108 = (v102 * *(unsigned __int16 *)(*(_DWORD *)(a11 + 4 * ((unsigned int)*v101 >> v99)) + 2 * *(v101 - 1)) + (0xFFFF - v102) * (unsigned __int16)a5[1] + 0x8000 + ((v102 * *(unsigned __int16 *)(*(_DWORD *)(a11 + 4 * ((unsigned int)*v101 >> v99)) + 2 * *(v101 - 1)) + (0xFFFF - v102) * (unsigned int)(unsigned __int16)a5[1] + 0x8000) >> 16)) >> 16; v109 = *(_WORD *)(*(_DWORD *)(a10 + 4 * ((unsigned int)(unsigned __int8)v108 >> a12)) + 2 * (v108 >> 8)); *(v100 - 1) = v109; *(v100 - 2) = HIBYTE(v109); v110 = v102 * *(unsigned __int16 *)(*(_DWORD *)(a11 + 4 * ((unsigned int)v101[2] >> v107)) + 2 * v101[1]) + (0xFFFF - v102) * (unsigned __int16)a5[2] + 0x8000; LOWORD(v110) = *(_WORD *)(*(_DWORD *)(a10 + 4 * ((unsigned int)(unsigned __int8)((v110 + (v110 >> 16)) >> 16) >> a12)) + 2 * ((v110 + (v110 >> 16)) >> 24)); v100[1] = v110; *v100 = BYTE1(v110); v111 = v102 * *(unsigned __int16 *)(*(_DWORD *)(a11 + 4 * ((unsigned int)v101[4] >> v107)) + 2 * v101[3]) + (0xFFFF - v102) * (unsigned __int16)a5[3] + 0x8000; v112 = (v111 + (v111 >> 16)) >> 16; v113 = (unsigned int)(unsigned __int8)v112 >> a12; v106 = *(_WORD *)(*(_DWORD *)(a10 + 4 * v113) + 2 * ((v111 + (v111 >> 16)) >> 24)); v98 = a9; v100[2] = *(_WORD *)(*(_DWORD *)(a10 + 4 * v113) + 2 * (v112 >> 8)) >> 8; v99 = a12; } else { *(v100 - 2) = a4[3]; *(v100 - 1) = a4[2]; *v100 = a4[5]; v100[1] = a4[4]; v100[2] = a4[7]; LOBYTE(v106) = a4[6]; } v100[3] = v106; v101 += 8; v100 += 6; --v128; } while ( v128 ); } } else if ( v13 ) { v114 = a4; v115 = (int)(a2 + 2); v116 = a2 + 7; v129 = *a1; do { v117 = (unsigned __int16)(*v116 + (*(v116 - 1) << 8)); if ( (_WORD)v117 == -1 ) { *(_DWORD *)(v115 - 2) = *(_DWORD *)(v116 - 7); *(_WORD *)(v115 + 2) = *(_WORD *)(v116 - 3); } else { if ( (_WORD)v117 ) { v119 = *(v116 - 4) + (*(v116 - 5) << 8); v120 = *(v116 - 2) + (*(v116 - 3) << 8); v121 = (unsigned __int16)(*v116 + (*(v116 - 1) << 8)); v122 = (v117 * (unsigned __int16)(*(v116 - 6) + (*(v116 - 7) << 8)) + (0xFFFF - v117) * *((unsigned __int16 *)a4 + 1) + 0x8000 + ((v117 * (unsigned __int16)(*(v116 - 6) + (*(v116 - 7) << 8)) + (0xFFFF - v117) * (unsigned int)*((unsigned __int16 *)a4 + 1) + 0x8000) >> 16)) >> 16; *(_BYTE *)(v115 - 1) = v122; *(_BYTE *)(v115 - 2) = BYTE1(v122); v123 = ((0xFFFF - v121) * *((unsigned __int16 *)a4 + 2) + v121 * v119 + 0x8000 + (((0xFFFF - v121) * *((unsigned __int16 *)a4 + 2) + v121 * (unsigned int)v119 + 0x8000) >> 16)) >> 16; *(_BYTE *)(v115 + 1) = v123; *(_BYTE *)v115 = BYTE1(v123); v124 = (0xFFFF - v121) * *((unsigned __int16 *)a4 + 3) + v121 * v120 + 0x8000; v125 = v124 + (v124 >> 16); v114 = a4; v118 = v125 >> 16; *(_BYTE *)(v115 + 2) = BYTE1(v118); } else { *(_BYTE *)(v115 - 2) = v114[3]; *(_BYTE *)(v115 - 1) = v114[2]; *(_BYTE *)v115 = v114[5]; *(_BYTE *)(v115 + 1) = v114[4]; *(_BYTE *)(v115 + 2) = v114[7]; LOBYTE(v118) = v114[6]; } *(_BYTE *)(v115 + 3) = v118; } v116 += 8; v115 += 6; --v129; } while ( v129 ); } } goto LABEL_210; default: goto LABEL_210; } } //----- (0094C3F0) -------------------------------------------------------- char __cdecl sub_94C3F0(int *a1, _BYTE *a2, int a3, int a4, char a5) { int *v5; // ecx int v6; // eax int v7; // edx int v8; // esi bool v9; // zf __int16 v10; // di __int16 v11; // di __int16 v12; // di __int16 v13; // di __int16 v14; // cx char v15; // al int v16; // edx int v17; // esi int v18; // ecx char v19; // cl _BYTE *v20; // edx unsigned int v21; // esi __int16 v22; // cx int v24; // [esp+Ch] [ebp-10h] unsigned int v25; // [esp+14h] [ebp-8h] _BYTE *v26; // [esp+18h] [ebp-4h] int v27; // [esp+24h] [ebp+8h] int v28; // [esp+24h] [ebp+8h] v5 = a1; LOBYTE(v6) = *((_BYTE *)a1 + 9); v7 = a4; v8 = *a1; v24 = *a1; if ( (unsigned __int8)v6 <= 8u && a3 || (_BYTE)v6 == 16 && a4 ) { switch ( *((unsigned __int8 *)a1 + 8) ) { case 0u: v9 = (_BYTE)v6 == 2; v6 = (int)a2; if ( v9 ) { v26 = a2; if ( v8 ) { v25 = ((unsigned int)(v8 - 1) >> 2) + 1; do { v15 = *(_BYTE *)v6; v16 = v15 & 0xC; v17 = v15 & 0x30; v18 = v15 & 0xC0; *v26 = *(_BYTE *)((v18 | ((v18 | ((v18 | (v18 >> 2)) >> 2)) >> 2)) + a3) & 0xC0 | ((unsigned __int8)(*(_BYTE *)((v17 | 4 * v17 | ((v17 | (v17 >> 2)) >> 2)) + a3) & 0xC3 | ((unsigned __int8)((*(_BYTE *)((v15 & 3 | 4 * (v15 & 3 | 4 * (v15 & 3 | 4 * (v15 & 3)))) + a3) >> 2) | *(_BYTE *)((v16 | (v16 >> 2) | 4 * (v16 | 4 * v16)) + a3) & 0xCF) >> 2)) >> 2); v6 = (int)(v26 + 1); v9 = v25-- == 1; ++v26; } while ( !v9 ); v7 = a4; v6 = (int)a2; v5 = a1; v8 = v24; } } v19 = *((_BYTE *)v5 + 9); if ( v19 == 4 ) { v20 = (_BYTE *)v6; if ( v8 ) { v21 = ((unsigned int)(v8 - 1) >> 1) + 1; do { LOBYTE(v6) = *(_BYTE *)((*v20 & 0xF | 16 * (*v20 & 0xF)) + a3) >> 4; *v20 = v6 | *(_BYTE *)((*v20 & 0xF0 | ((*v20 & 0xF0) >> 4)) + a3) & 0xF0; ++v20; --v21; } while ( v21 ); } } else if ( v19 == 8 ) { for ( ; v8; --v8 ) { *(_BYTE *)v6 = *(_BYTE *)(*(unsigned __int8 *)v6 + a3); ++v6; } } else if ( v19 == 16 && v8 ) { do { v22 = *(_WORD *)(*(_DWORD *)(v7 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6); *(_BYTE *)v6 = HIBYTE(v22); *(_BYTE *)(v6 + 1) = v22; v6 += 2; --v8; } while ( v8 ); } break; case 2u: v9 = (_BYTE)v6 == 8; v6 = (int)a2; if ( v9 ) { for ( ; v8; --v8 ) { *(_BYTE *)v6 = *(_BYTE *)(*(unsigned __int8 *)v6 + a3); *(_BYTE *)(v6 + 1) = *(_BYTE *)(*(unsigned __int8 *)(v6 + 1) + a3); *(_BYTE *)(v6 + 2) = *(_BYTE *)(*(unsigned __int8 *)(v6 + 2) + a3); v6 += 3; } } else { for ( ; v8; --v8 ) { v10 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6); *(_BYTE *)v6 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6) >> 8; *(_BYTE *)(v6 + 1) = v10; v11 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 3) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 2)); *(_BYTE *)(v6 + 2) = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 3) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 2)) >> 8; *(_BYTE *)(v6 + 3) = v11; v27 = *(unsigned __int16 *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 5) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 4)); *(_BYTE *)(v6 + 4) = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 5) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 4)) >> 8; *(_BYTE *)(v6 + 5) = v27; v6 += 6; } } break; case 4u: v9 = (_BYTE)v6 == 8; v6 = (int)a2; if ( v9 ) { for ( ; v8; --v8 ) { *(_BYTE *)v6 = *(_BYTE *)(*(unsigned __int8 *)v6 + a3); v6 += 2; } } else { for ( ; v8; --v8 ) { v14 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6); *(_BYTE *)v6 = HIBYTE(v14); *(_BYTE *)(v6 + 1) = v14; v6 += 4; } } break; case 6u: v9 = (_BYTE)v6 == 8; v6 = (int)a2; if ( v9 ) { for ( ; v8; --v8 ) { *(_BYTE *)v6 = *(_BYTE *)(*(unsigned __int8 *)v6 + a3); *(_BYTE *)(v6 + 1) = *(_BYTE *)(*(unsigned __int8 *)(v6 + 1) + a3); *(_BYTE *)(v6 + 2) = *(_BYTE *)(*(unsigned __int8 *)(v6 + 2) + a3); v6 += 4; } } else { for ( ; v8; --v8 ) { v12 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6); *(_BYTE *)v6 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 1) >> a5)) + 2 * *(unsigned __int8 *)v6) >> 8; *(_BYTE *)(v6 + 1) = v12; v13 = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 3) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 2)); *(_BYTE *)(v6 + 2) = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 3) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 2)) >> 8; *(_BYTE *)(v6 + 3) = v13; v28 = *(unsigned __int16 *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 5) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 4)); *(_BYTE *)(v6 + 4) = *(_WORD *)(*(_DWORD *)(a4 + 4 * ((unsigned int)*(unsigned __int8 *)(v6 + 5) >> a5)) + 2 * *(unsigned __int8 *)(v6 + 4)) >> 8; *(_BYTE *)(v6 + 5) = v28; v6 += 8; } } break; default: return v6; } } return v6; } //----- (0094C7C0) -------------------------------------------------------- void __cdecl sub_94C7C0(int *a1, int a2, int a3, int a4, int a5) { int *v5; // ebx int v6; // edx unsigned __int8 v7; // al int v8; // eax int v9; // eax int v10; // edi _BYTE *v11; // esi int v12; // eax _BYTE *v13; // esi _BYTE *v14; // edi int v15; // eax _BYTE *v16; // esi _BYTE *v17; // edi int v18; // eax unsigned __int8 *v19; // ecx int v20; // esi _BYTE *v21; // eax int v22; // esi int v23; // eax int v24; // esi _BYTE *v25; // eax int v26; // [esp+4h] [ebp-8h] int v27; // [esp+4h] [ebp-8h] int v28; // [esp+4h] [ebp-8h] int v29; // [esp+4h] [ebp-8h] int v30; // [esp+4h] [ebp-8h] _BYTE *v31; // [esp+8h] [ebp-4h] v5 = a1; v6 = *a1; if ( *((_BYTE *)a1 + 8) != 3 ) return; v7 = *((_BYTE *)a1 + 9); if ( v7 >= 8u ) { v10 = a2; goto LABEL_30; } v8 = v7 - 1; if ( !v8 ) { v16 = (_BYTE *)(a2 + ((unsigned int)(v6 - 1) >> 3)); v17 = (_BYTE *)(v6 + a2 - 1); v18 = 7 - (((_BYTE)v6 - 1) & 7); if ( !v6 ) goto LABEL_27; v28 = *a1; do { *v17 = (*v16 >> v18) & 1; if ( v18 == 7 ) { v18 = 0; --v16; } else { ++v18; } --v17; --v28; } while ( v28 ); goto LABEL_26; } v9 = v8 - 1; if ( !v9 ) { v13 = (_BYTE *)(a2 + ((unsigned int)(v6 - 1) >> 2)); v14 = (_BYTE *)(v6 + a2 - 1); v15 = 2 * (3 - (((_BYTE)v6 - 1) & 3)); if ( !v6 ) goto LABEL_27; v27 = *a1; do { *v14 = (*v13 >> v15) & 3; if ( v15 == 6 ) { v15 = 0; --v13; } else { v15 += 2; } --v14; --v27; } while ( v27 ); LABEL_26: v5 = a1; goto LABEL_27; } if ( v9 != 2 ) { LABEL_27: v10 = a2; goto LABEL_28; } v10 = a2; v31 = (_BYTE *)(v6 + a2 - 1); v11 = (_BYTE *)(a2 + ((unsigned int)(v6 - 1) >> 1)); v12 = 4 * (*a1 & 1); if ( !v6 ) { LABEL_28: *((_BYTE *)v5 + 9) = 8; *((_BYTE *)v5 + 11) = 8; v5[1] = v6; goto LABEL_30; } v26 = *a1; do { *v31 = (*v11 >> v12) & 0xF; if ( v12 == 4 ) { v12 = 0; --v11; } else { v12 += 4; } --v31; --v26; } while ( v26 ); v5 = a1; *((_BYTE *)a1 + 9) = 8; *((_BYTE *)a1 + 11) = 8; a1[1] = v6; LABEL_30: if ( *((_BYTE *)v5 + 9) == 8 ) { v19 = (unsigned __int8 *)(v6 + v10 - 1); if ( a4 ) { v20 = 4 * v6; v29 = 4 * v6; v21 = (_BYTE *)(4 * v6 + v10 - 1); if ( v6 ) { do { v22 = *v19; if ( v22 < a5 ) *v21 = *(_BYTE *)(v22 + a4); else *v21 = -1; *(v21 - 1) = *(_BYTE *)(*v19 + a3 + 2 * *v19 + 2); v23 = (int)(v21 - 1); *(_BYTE *)(v23 - 1) = *(_BYTE *)(*v19 + a3 + 2 * *v19 + 1); *(_BYTE *)(v23 - 2) = *(_BYTE *)(*v19 + a3 + 2 * *v19); v21 = (_BYTE *)(v23 - 3); --v19; --v6; } while ( v6 ); v5 = a1; v20 = v29; } v5[1] = v20; v5[2] = 537135110; } else { v24 = 3 * v6; v30 = 3 * v6; v25 = (_BYTE *)(3 * v6 + v10 - 1); if ( v6 ) { do { *v25 = *(_BYTE *)(*v19 + a3 + 2 * *v19 + 2); *(v25 - 1) = *(_BYTE *)(*v19 + a3 + 2 * *v19 + 1); *(v25 - 2) = *(_BYTE *)(*v19 + a3 + 2 * *v19); v25 -= 3; --v19; --v6; } while ( v6 ); v24 = v30; v5 = a1; } v5[2] = 402851842; v5[1] = v24; } } } //----- (0094C9E0) -------------------------------------------------------- char __cdecl sub_94C9E0(int *a1, int a2, _WORD *a3) { int *v3; // ebx int v4; // eax int v5; // esi _WORD *v6; // ecx unsigned __int16 v7; // di int v8; // eax int v9; // eax unsigned __int16 v10; // cx unsigned __int8 *v11; // edi _BYTE *v12; // ebx int v13; // edx unsigned __int16 v14; // dx unsigned __int8 *v15; // edi _BYTE *v16; // ebx int v17; // edx unsigned __int16 v18; // dx _BYTE *v19; // edi _BYTE *v20; // edx char v21; // al _BYTE *v22; // ecx _BYTE *v23; // eax int v24; // edx _BYTE *v25; // eax char v26; // al int v27; // eax _BYTE *v28; // ecx int v29; // eax int v30; // edi _BYTE *v31; // eax char v32; // al _BYTE *v33; // ecx _BYTE *v34; // eax _BYTE *v35; // eax _BYTE *v36; // ecx int v37; // eax int v38; // eax char v39; // al unsigned __int8 v40; // al int v42; // [esp+Ch] [ebp-8h] int v43; // [esp+Ch] [ebp-8h] int v44; // [esp+Ch] [ebp-8h] int v45; // [esp+Ch] [ebp-8h] unsigned __int16 v46; // [esp+10h] [ebp-4h] int v47; // [esp+1Ch] [ebp+8h] int v48; // [esp+1Ch] [ebp+8h] v3 = a1; LOBYTE(v4) = *((_BYTE *)a1 + 8); v5 = *a1; if ( (_BYTE)v4 ) { if ( (_BYTE)v4 != 2 || !a3 ) return v4; v32 = *((_BYTE *)a1 + 9); if ( v32 == 8 ) { v33 = (_BYTE *)(a1[1] + a2 - 1); v34 = (_BYTE *)(a2 + 4 * v5 - 1); if ( v5 ) { v47 = *a1; do { if ( (unsigned __int8)*(v33 - 2) != a3[1] || (unsigned __int8)*(v33 - 1) != a3[2] || (unsigned __int8)*v33 != a3[3] ) { *v34 = -1; } else { *v34 = 0; } v35 = v34 - 1; *v35 = *v33; *(v35 - 1) = *(v33 - 1); *(v35 - 2) = *(v33 - 2); v34 = v35 - 3; v33 -= 3; --v47; } while ( v47 ); } } else if ( v32 == 16 ) { v36 = (_BYTE *)(a1[1] + a2 - 1); v37 = a2 + 8 * v5 - 1; if ( v5 ) { v48 = *a1; do { if ( ((unsigned __int8)*(v36 - 4) | ((unsigned __int8)*(v36 - 5) << 8)) != (unsigned __int16)a3[1] || ((unsigned __int8)*(v36 - 2) | ((unsigned __int8)*(v36 - 3) << 8)) != (unsigned __int16)a3[2] || ((unsigned __int8)*v36 | ((unsigned __int8)*(v36 - 1) << 8)) != (unsigned __int16)a3[3] ) { *(_WORD *)(v37 - 1) = -1; } else { *(_WORD *)(v37 - 1) = 0; } *(_BYTE *)(v37 - 2) = *v36; v38 = v37 - 2; *(_BYTE *)(v38 - 1) = *(v36 - 1); *(_BYTE *)(v38 - 2) = *(v36 - 2); *(_BYTE *)(v38 - 3) = *(v36 - 3); *(_BYTE *)(v38 - 4) = *(v36 - 4); *(_BYTE *)(v38 - 5) = *(v36 - 5); v37 = v38 - 6; v36 -= 6; --v48; } while ( v48 ); } } v39 = *((_BYTE *)v3 + 9); *((_BYTE *)v3 + 8) = 6; *((_BYTE *)v3 + 10) = 4; v26 = 2 * v39; goto LABEL_72; } v6 = a3; if ( a3 ) v7 = a3[4]; else v7 = 0; LOBYTE(v4) = *((_BYTE *)a1 + 9); if ( (unsigned __int8)v4 < 8u ) { v8 = (unsigned __int8)v4 - 1; if ( v8 ) { v9 = v8 - 1; if ( v9 ) { v4 = v9 - 2; if ( v4 ) { LABEL_31: v6 = a3; *((_BYTE *)v3 + 9) = 8; *((_BYTE *)v3 + 11) = 8; v3[1] = v5; goto LABEL_32; } v10 = 17 * v7; v11 = (unsigned __int8 *)(a2 + ((unsigned int)(v5 - 1) >> 1)); v12 = (_BYTE *)(v5 + a2 - 1); v4 = 4 * (((_BYTE)v5 - 1) & 1); v13 = 4 - v4; v46 = v10; if ( v5 ) { v42 = *a1; do { v4 = ((unsigned int)*v11 >> v13) & 0xF; *v12 = v4 | 16 * (((unsigned int)*v11 >> v13) & 0xF); if ( v13 == 4 ) { v13 = 0; --v11; } else { v13 = 4; } --v12; --v42; } while ( v42 ); } } else { v14 = 85 * v7; v15 = (unsigned __int8 *)(a2 + ((unsigned int)(v5 - 1) >> 2)); v16 = (_BYTE *)(v5 + a2 - 1); v46 = v14; v4 = ((_BYTE)v5 - 1) & 3; v17 = 2 * (3 - v4); if ( v5 ) { v43 = *a1; do { v4 = ((unsigned int)*v15 >> v17) & 3; *v16 = v4 | 4 * (v4 | 4 * (v4 | 4 * (((unsigned int)*v15 >> v17) & 3))); if ( v17 == 6 ) { v17 = 0; --v15; } else { v17 += 2; } --v16; --v43; } while ( v43 ); } } } else { v18 = 255 * v7; v19 = (_BYTE *)(a2 + ((unsigned int)(v5 - 1) >> 3)); v46 = v18; v20 = (_BYTE *)(v5 + a2 - 1); v4 = 7 - (((_BYTE)v5 - 1) & 7); if ( !v5 ) { LABEL_30: v7 = v46; goto LABEL_31; } v44 = *a1; do { *v20 = -(((*v19 >> v4) & 1) != 0); if ( v4 == 7 ) { v4 = 0; --v19; } else { ++v4; } --v20; --v44; } while ( v44 ); } v3 = a1; goto LABEL_30; } LABEL_32: if ( !v6 ) return v4; v21 = *((_BYTE *)v3 + 9); if ( v21 == 8 ) { v22 = (_BYTE *)(v5 + a2 - 1); v23 = (_BYTE *)(a2 + 2 * v5 - 1); if ( v5 ) { v24 = v5; do { if ( (unsigned __int8)*v22 == v7 ) *v23 = 0; else *v23 = -1; v25 = v23 - 1; *v25 = *v22; v23 = v25 - 1; --v22; --v24; } while ( v24 ); v3 = a1; v26 = *((_BYTE *)a1 + 9); *((_BYTE *)a1 + 8) = 4; *((_BYTE *)a1 + 10) = 2; goto LABEL_72; } } else if ( v21 == 16 ) { v27 = v3[1]; v28 = (_BYTE *)(v27 + a2 - 1); v29 = a2 + 2 * v27 - 1; if ( v5 ) { v45 = v7; v30 = v5; do { if ( ((unsigned __int8)*v28 | ((unsigned __int8)*(v28 - 1) << 8)) == v45 ) *(_WORD *)(v29 - 1) = 0; else *(_WORD *)(v29 - 1) = -1; v31 = (_BYTE *)(v29 - 2); *v31 = *v28; *(v31 - 1) = *(v28 - 1); v29 = (int)(v31 - 2); v28 -= 2; --v30; } while ( v30 ); v3 = a1; } } v26 = *((_BYTE *)v3 + 9); *((_BYTE *)v3 + 8) = 4; *((_BYTE *)v3 + 10) = 2; LABEL_72: v40 = 2 * v26; *((_BYTE *)v3 + 11) = v40; if ( v40 < 8u ) v4 = (v5 * (unsigned int)v40 + 7) >> 3; else v4 = v5 * ((unsigned int)v40 >> 3); v3[1] = v4; return v4; } //----- (0094CDA0) -------------------------------------------------------- char __cdecl sub_94CDA0(int *a1, _BYTE *a2, int a3, int a4) { int *v4; // esi unsigned int i; // eax int v6; // edx _BYTE *v7; // ecx _BYTE *v8; // edi int v9; // eax _BYTE *v10; // ecx _BYTE *v11; // edi int v13; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] int v15; // [esp+10h] [ebp-4h] v4 = a1; LOBYTE(i) = *((_BYTE *)a1 + 8); v6 = *a1; v13 = *a1; if ( (_BYTE)i == 2 && a3 && *((_BYTE *)a1 + 9) == 8 ) { v7 = a2; v8 = a2; if ( v6 ) { v14 = *a1; do { *v8 = *(_BYTE *)((((signed int)(unsigned __int8)v7[2] >> 3) & 0x1F | 4 * (v7[1] & 0xF8 | 32 * (*v7 & 0xF8))) + a3); v7 += 3; ++v8; --v14; } while ( v14 ); v6 = v13; v4 = a1; } LOBYTE(v9) = *((_BYTE *)v4 + 9); *((_BYTE *)v4 + 11) = v9; *((_BYTE *)v4 + 8) = 3; *((_BYTE *)v4 + 10) = 1; v9 = (unsigned __int8)v9; if ( (unsigned __int8)v9 >= 8u ) { i = v6 * ((unsigned int)(unsigned __int8)v9 >> 3); v4[1] = i; return i; } LABEL_19: i = (unsigned int)(v6 * v9 + 7) >> 3; v4[1] = i; return i; } if ( (_BYTE)i == 6 && a3 && *((_BYTE *)a1 + 9) == 8 ) { v10 = a2; v11 = a2; if ( v6 ) { v15 = *a1; do { *v11 = *(_BYTE *)((((signed int)(unsigned __int8)v10[2] >> 3) & 0x1F | 4 * (v10[1] & 0xF8 | 32 * (*v10 & 0xF8))) + a3); v10 += 4; ++v11; --v15; } while ( v15 ); v6 = v13; v4 = a1; } LOBYTE(v9) = *((_BYTE *)v4 + 9); *((_BYTE *)v4 + 11) = v9; *((_BYTE *)v4 + 8) = 3; *((_BYTE *)v4 + 10) = 1; v9 = (unsigned __int8)v9; if ( (unsigned __int8)v9 >= 8u ) { i = v6 * ((unsigned int)(unsigned __int8)v9 >> 3); v4[1] = i; return i; } goto LABEL_19; } if ( (_BYTE)i == 3 ) { if ( a4 ) { if ( *((_BYTE *)a1 + 9) == 8 ) { for ( i = (unsigned int)a2; v6; --v6 ) { *(_BYTE *)i = *(_BYTE *)(*(unsigned __int8 *)i + a4); ++i; } } } } return i; } //----- (0094CF20) -------------------------------------------------------- void __cdecl sub_94CF20(int a1) { int v1; // esi double v2; // st7 double v3; // st7 signed int v4; // edi long double v5; // st6 double v6; // st7 signed int v7; // edi long double v8; // st6 void *v9; // eax double v10; // st7 double v11; // st7 signed int v12; // edi double v13; // st7 long double v14; // st6 signed int v15; // ecx int v16; // edi int v17; // eax double v18; // st7 signed int v19; // ebx double v20; // st7 void *v21; // eax bool v22; // zf unsigned int v23; // edi signed int i; // eax unsigned int v25; // ebx int v26; // eax signed int j; // eax unsigned int v28; // ebx int v29; // eax double v30; // st7 unsigned int v31; // ebx signed int v32; // edi int v33; // ecx long double v34; // st6 void *v35; // eax signed int v36; // ebx double v37; // st7 signed int v38; // edi long double v39; // st7 long double v40; // st6 double v41; // st7 signed int v42; // ebx double v43; // st7 signed int v44; // edi long double v45; // st7 long double v46; // st6 double v47; // [esp+4h] [ebp-30h] double v48; // [esp+Ch] [ebp-28h] double v49; // [esp+Ch] [ebp-28h] double v50; // [esp+Ch] [ebp-28h] double v51; // [esp+Ch] [ebp-28h] double v52; // [esp+Ch] [ebp-28h] double v53; // [esp+Ch] [ebp-28h] unsigned int v54; // [esp+18h] [ebp-1Ch] int v55; // [esp+1Ch] [ebp-18h] unsigned int v56; // [esp+20h] [ebp-14h] char v57; // [esp+24h] [ebp-10h] signed int v58; // [esp+28h] [ebp-Ch] signed int v59; // [esp+2Ch] [ebp-8h] int v60; // [esp+2Ch] [ebp-8h] unsigned int v61; // [esp+2Ch] [ebp-8h] unsigned int v62; // [esp+2Ch] [ebp-8h] int v63; // [esp+30h] [ebp-4h] int v64; // [esp+3Ch] [ebp+8h] int v65; // [esp+3Ch] [ebp+8h] int v66; // [esp+3Ch] [ebp+8h] v1 = a1; if ( 0.0 == *(float *)(a1 + 348) ) return; if ( *(_BYTE *)(a1 + 295) <= 8u ) { if ( *(float *)(a1 + 352) <= 0.000001 ) v2 = 1.0; else v2 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 348)); v48 = v2; v3 = 255.0; v4 = 0; *(_DWORD *)(a1 + 356) = sub_946890(a1, 0x100u); v64 = 0; do { v5 = pow((double)v64 / v3, v48) * 255.0; v3 = 255.0; *(_BYTE *)(++v4 + *(_DWORD *)(v1 + 356) - 1) = (signed int)(v5 + 0.5); v64 = v4; } while ( v4 < 256 ); if ( *(_DWORD *)(v1 + 112) & 0x600080 ) { v49 = 1.0 / *(float *)(v1 + 348); v6 = 255.0; v7 = 0; *(_DWORD *)(v1 + 364) = sub_946890(v1, 0x100u); v65 = 0; do { ++v7; v8 = pow((double)v65 / v6, v49) * 255.0; v6 = 255.0; *(_BYTE *)(v7 + *(_DWORD *)(v1 + 364) - 1) = (signed int)(v8 + 0.5); v65 = v7; } while ( v7 < 256 ); v9 = sub_946890(v1, 0x100u); v10 = *(float *)(v1 + 352); *(_DWORD *)(v1 + 360) = v9; if ( v10 <= 0.000001 ) v11 = *(float *)(v1 + 348); else v11 = 1.0 / *(float *)(v1 + 352); v12 = 0; v50 = v11; v13 = 255.0; v66 = 0; do { v14 = pow((double)v66 / v13, v50) * 255.0; v13 = 255.0; *(_BYTE *)(++v12 + *(_DWORD *)(v1 + 360) - 1) = (signed int)(v14 + 0.5); v66 = v12; } while ( v12 < 256 ); } return; } if ( *(_BYTE *)(a1 + 294) & 2 ) { v15 = *(unsigned __int8 *)(a1 + 380); if ( *(unsigned __int8 *)(a1 + 381) > v15 ) v15 = *(unsigned __int8 *)(a1 + 381); if ( *(unsigned __int8 *)(a1 + 382) > v15 ) v15 = *(unsigned __int8 *)(a1 + 382); } else { v15 = *(unsigned __int8 *)(a1 + 383); } v16 = 0; if ( v15 <= 0 ) { v63 = 0; v17 = 0; } else { v17 = 16 - v15; v63 = 16 - v15; } if ( *(_DWORD *)(a1 + 112) & 0x400 && v17 < 5 ) { v63 = 5; } else if ( v17 <= 8 ) { if ( v17 >= 0 ) goto LABEL_34; v63 = 0; } else { v63 = 8; } LOBYTE(v17) = v63; LABEL_34: v18 = *(float *)(a1 + 352); *(_DWORD *)(a1 + 344) = (unsigned __int8)v17; v19 = 1 << (8 - v17); v57 = 8 - v17; v58 = 1 << (8 - v17); if ( v18 <= 0.000001 ) v20 = 1.0; else v20 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 348)); v51 = v20; v21 = sub_946890(a1, 4 * v19); v22 = (*(_DWORD *)(a1 + 112) & 0x480) == 0; *(_DWORD *)(a1 + 368) = v21; if ( v22 ) { v60 = 0; if ( v19 <= 0 ) goto LABEL_59; while ( 1 ) { v30 = 65535.0; *(_DWORD *)(*(_DWORD *)(a1 + 368) + 4 * v16) = sub_946890(a1, 0x200u); v31 = (unsigned int)(v16 * dword_AC898C[v63]) >> 4; v32 = 0; do { v33 = v60; v34 = pow((double)v31 / v30, v51) * 65535.0; v30 = 65535.0; v32 += 2; v31 += 256; *(_WORD *)(v32 + *(_DWORD *)(*(_DWORD *)(a1 + 368) + 4 * v60) - 2) = (signed int)(v34 + 0.5); } while ( v32 < 512 ); ++v60; if ( v33 + 1 >= v58 ) break; v16 = v33 + 1; } } else { if ( v19 > 0 ) { do *(_DWORD *)(*(_DWORD *)(a1 + 368) + 4 * v16++) = sub_946890(a1, 0x200u); while ( v16 < v19 ); } v23 = 0; v59 = 0; v56 = v19 << 8; v47 = (double)(unsigned int)(v19 << 8); do { v54 = (signed __int64)(pow(((double)v59 + 0.5) * 0.00390625, 1.0 / v20) * v47); if ( v23 <= v54 ) { v55 = (unsigned __int16)v59 | ((unsigned __int16)v59 << 8); for ( i = 255 >> v63; ; i = 255 >> v63 ) { v25 = v23 >> v57; v26 = *(_DWORD *)(*(_DWORD *)(a1 + 368) + 4 * (v23++ & i)); *(_WORD *)(v26 + 2 * v25) = v55; if ( v23 > v54 ) break; } v19 = v58; } ++v59; } while ( v59 < 256 ); if ( v23 >= v56 ) goto LABEL_59; for ( j = 255 >> v63; ; j = 255 >> v63 ) { v28 = v23 >> v57; v29 = *(_DWORD *)(*(_DWORD *)(a1 + 368) + 4 * (v23++ & j)); *(_WORD *)(v29 + 2 * v28) = -1; if ( v23 >= v56 ) break; } } v19 = v58; LABEL_59: if ( *(_DWORD *)(a1 + 112) & 0x600080 ) { v52 = 1.0 / *(float *)(a1 + 348); v35 = sub_946890(a1, 4 * v19); v36 = 0; for ( *(_DWORD *)(a1 + 376) = v35; v36 < v58; ++v36 ) { v37 = 65535.0; *(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * v36) = sub_946890(a1, 0x200u); v38 = 0; v61 = (unsigned int)(v36 * dword_AC898C[v63]) >> 4; do { v39 = pow((double)v61 / v37, v52); v61 += 256; v40 = v39 * 65535.0; v37 = 65535.0; v38 += 2; *(_WORD *)(v38 + *(_DWORD *)(*(_DWORD *)(a1 + 376) + 4 * v36) - 2) = (signed int)(v40 + 0.5); } while ( v38 < 512 ); } if ( *(float *)(a1 + 352) <= 0.000001 ) v41 = *(float *)(a1 + 348); else v41 = 1.0 / *(float *)(a1 + 352); v53 = v41; v42 = 0; for ( *(_DWORD *)(a1 + 372) = sub_946890(a1, 4 * v58); v42 < v58; ++v42 ) { v43 = 65535.0; *(_DWORD *)(*(_DWORD *)(a1 + 372) + 4 * v42) = sub_946890(a1, 0x200u); v44 = 0; v62 = (unsigned int)(v42 * dword_AC898C[v63]) >> 4; do { v45 = pow((double)v62 / v43, v53); v62 += 256; v46 = v45 * 65535.0; v43 = 65535.0; v44 += 2; *(_WORD *)(v44 + *(_DWORD *)(*(_DWORD *)(a1 + 372) + 4 * v42) - 2) = (signed int)(v46 + 0.5); } while ( v44 < 512 ); } } } //----- (0094D5B0) -------------------------------------------------------- char __cdecl sub_94D5B0(int *a1, int a2) { unsigned __int8 *v2; // eax char v3; // cl int v4; // edx signed int v5; // esi char v6; // cl int v7; // edi int v8; // esi __int16 v9; // cx __int16 v10; // dx signed int v12; // [esp+8h] [ebp+8h] LOBYTE(v2) = (_BYTE)a1; v3 = *((_BYTE *)a1 + 8); if ( v3 & 2 ) { v4 = *a1; LOBYTE(v2) = *((_BYTE *)a1 + 9); if ( (_BYTE)v2 == 8 ) { if ( v3 == 2 ) { v5 = 3; } else { if ( v3 != 6 ) return (char)v2; v5 = 4; } if ( v4 ) { v2 = (unsigned __int8 *)(a2 + 2); do { v6 = *(v2 - 1); *(v2 - 2) += v6; *v2 += v6; v2 += v5; --v4; } while ( v4 ); } } else if ( (_BYTE)v2 == 16 ) { if ( v3 == 2 ) { v12 = 6; } else { if ( v3 != 6 ) return (char)v2; v12 = 8; } if ( v4 ) { v2 = (unsigned __int8 *)(a2 + 1); v7 = v4; do { v8 = v2[2] | (v2[1] << 8); v9 = _byteswap_ushort(*(_WORD *)(v2 + 1)) + (*v2 | (unsigned __int16)(*(v2 - 1) << 8)); v10 = _byteswap_ushort(*(_WORD *)(v2 + 1)) + _byteswap_ushort(*(_WORD *)(v2 + 3)); *v2 = v9; *(v2 - 1) = HIBYTE(v9); v2[3] = HIBYTE(v10); v2[4] = v10; v2 += v12; --v7; } while ( v7 ); } } } return (char)v2; } //----- (0094D690) -------------------------------------------------------- void __cdecl sub_94D690(int a1) { int v1; // esi int v2; // ebx int v3; // edi __int16 v4; // ax int v5; // edx int v6; // eax __int16 v7; // cx int v8; // eax int v9; // edx __int16 v10; // ax unsigned __int16 v11; // dx signed int v12; // ebx signed int v13; // ecx char v14; // al int v15; // eax unsigned __int8 v16; // al int v17; // ecx int v18; // eax int v19; // edi int v20; // edx int v21; // eax char v22; // dl int v23; // eax int v24; // eax double v25; // st7 double v26; // st6 long double v27; // rt2 long double v28; // st6 long double v29; // st7 double v30; // st7 char v31; // dl signed int v32; // edi _BYTE *v33; // eax int v34; // edx unsigned __int8 *v35; // ecx char v36; // dl char v37; // dl unsigned int v38; // ecx unsigned int v39; // ecx unsigned int v40; // ecx int v41; // ecx int v42; // edx double v43; // st7 long double v44; // st6 long double v45; // ST20_8 __int16 v46; // ax signed int v47; // edi signed int v48; // ecx __int16 v49; // cx long double v50; // ST20_8 long double v51; // ST18_8 signed int v52; // ecx long double v53; // ST10_8 int v54; // ecx _BYTE *v55; // eax int v56; // ebx int v57; // edi _BYTE *v58; // eax int v59; // edx unsigned __int8 *v60; // ecx char v61; // dl signed int v62; // edx unsigned int v63; // ecx __int16 v64; // dx __int16 v65; // dx int v66; // edi int v67; // ebx int v68; // ecx int v69; // edx int v70; // eax double v71; // [esp+24h] [ebp-28h] double v72; // [esp+24h] [ebp-28h] double v73; // [esp+2Ch] [ebp-20h] int v74; // [esp+30h] [ebp-1Ch] signed int v75; // [esp+38h] [ebp-14h] char v76; // [esp+38h] [ebp-14h] int v77; // [esp+3Ch] [ebp-10h] double v78; // [esp+40h] [ebp-Ch] signed int v79; // [esp+44h] [ebp-8h] __int16 v80; // [esp+48h] [ebp-4h] char v81; // [esp+4Ah] [ebp-2h] __int16 v82; // [esp+54h] [ebp+8h] int v83; // [esp+54h] [ebp+8h] unsigned __int8 v84; // [esp+56h] [ebp+Ah] v1 = a1; v2 = *(unsigned __int8 *)(a1 + 294); v3 = *(_DWORD *)(a1 + 112); v77 = *(unsigned __int8 *)(a1 + 294); if ( v3 & 0x100 && v3 & 0x1000 ) { if ( v2 & 2 ) { if ( v2 == 3 ) { v5 = 3 * *(unsigned __int8 *)(a1 + 312); v6 = *(_DWORD *)(a1 + 276); v7 = *(unsigned __int8 *)(v6 + v5); v8 = v5 + v6; *(_WORD *)(a1 + 314) = v7; *(_WORD *)(a1 + 316) = *(unsigned __int8 *)(v8 + 1); v4 = *(unsigned __int8 *)(v8 + 2); LABEL_12: *(_WORD *)(a1 + 318) = v4; } } else { switch ( *(unsigned __int8 *)(a1 + 295) ) { case 1u: v4 = 255 * *(_WORD *)(a1 + 320); goto LABEL_6; case 2u: v4 = 85 * *(_WORD *)(a1 + 320); goto LABEL_6; case 4u: v4 = 17 * *(_WORD *)(a1 + 320); LABEL_6: *(_WORD *)(a1 + 320) = v4; *(_WORD *)(a1 + 316) = v4; *(_WORD *)(a1 + 314) = v4; goto LABEL_12; case 8u: case 0x10u: v4 = *(_WORD *)(a1 + 320); *(_WORD *)(a1 + 316) = v4; *(_WORD *)(a1 + 314) = v4; goto LABEL_12; default: break; } } } v9 = *(_DWORD *)(a1 + 316); v10 = *(_WORD *)(a1 + 320); *(_DWORD *)(a1 + 322) = *(_DWORD *)(a1 + 312); *(_DWORD *)(a1 + 326) = v9; *(_WORD *)(a1 + 330) = v10; if ( v2 == 3 ) { v11 = *(_WORD *)(a1 + 282); if ( v11 ) { if ( fabs(*(float *)(a1 + 352) * *(float *)(a1 + 348) - 1.0) < 0.05 ) { v12 = 0; v13 = 0; if ( v11 <= 0u ) goto LABEL_93; do { v14 = *(_BYTE *)(*(_DWORD *)(a1 + 392) + v13); if ( v14 && v14 != -1 ) v12 = 1; ++v13; } while ( v13 < *(unsigned __int16 *)(a1 + 282) ); if ( !v12 ) LABEL_93: *(_DWORD *)(a1 + 112) = v3 & 0xFFFFDFFF; v2 = v77; } } } v15 = *(_DWORD *)(a1 + 112); if ( !(v15 & 0x602000) ) { if ( (v15 & 0x80u) == 0 ) goto LABEL_78; if ( v77 != 3 ) goto LABEL_78; v56 = *(unsigned __int16 *)(a1 + 282); LOBYTE(v82) = *(_BYTE *)(a1 + 314); v57 = 0; v74 = v56; HIBYTE(v82) = *(_BYTE *)(v1 + 316); v84 = *(_BYTE *)(v1 + 318); if ( v56 <= 0 ) goto LABEL_78; v58 = (_BYTE *)(*(_DWORD *)(v1 + 276) + 2); while ( 1 ) { v59 = *(_DWORD *)(v1 + 392); v60 = (unsigned __int8 *)(v59 + v57); v61 = *(_BYTE *)(v59 + v57); if ( !v61 ) break; if ( v61 != -1 ) { v63 = (unsigned __int16)(*v60 * (unsigned __int8)*(v58 - 2) + (unsigned __int8)v82 * (255 - *v60) + 128); *(v58 - 2) = (unsigned __int16)(v63 + (v63 >> 8)) >> 8; LOWORD(v63) = *(unsigned __int8 *)(*(_DWORD *)(v1 + 392) + v57); v64 = v63 * (unsigned __int8)*(v58 - 1) + HIBYTE(v82) * (255 - v63); *(v58 - 1) = (unsigned __int16)(v64 + 128 + ((unsigned __int16)(v64 + 128) >> 8)) >> 8; LOWORD(v63) = *(unsigned __int8 *)(*(_DWORD *)(v1 + 392) + v57); v65 = v63 * (unsigned __int8)*v58 + v84 * (255 - v63); v56 = v74; v62 = (signed int)((unsigned __int16)(v65 + 128) + ((unsigned int)(unsigned __int16)(v65 + 128) >> 8)) >> 8; goto LABEL_76; } LABEL_77: ++v57; v58 += 3; if ( v57 >= v56 ) goto LABEL_78; } LOBYTE(v62) = v84; *((_WORD *)v58 - 1) = v82; LABEL_76: *v58 = v62; goto LABEL_77; } sub_94CF20(a1); if ( *(_BYTE *)(a1 + 112) >= 0 ) { if ( v2 == 3 ) { v54 = *(unsigned __int16 *)(a1 + 280); if ( v54 > 0 ) { v55 = (_BYTE *)(*(_DWORD *)(a1 + 276) + 2); do { *(v55 - 2) = *(_BYTE *)((unsigned __int8)*(v55 - 2) + *(_DWORD *)(a1 + 356)); *(v55 - 1) = *(_BYTE *)((unsigned __int8)*(v55 - 1) + *(_DWORD *)(a1 + 356)); *v55 = *(_BYTE *)((unsigned __int8)*v55 + *(_DWORD *)(a1 + 356)); v55 += 3; --v54; } while ( v54 ); } } goto LABEL_78; } if ( v2 != 3 ) { v43 = (double)(unsigned int)((1 << *(_BYTE *)(a1 + 295)) - 1); v72 = 1.0; v44 = 1.0; v78 = 1.0; switch ( *(_BYTE *)(a1 + 304) ) { case 1: v72 = *(float *)(a1 + 352); v44 = *(float *)(a1 + 352); v78 = 1.0; break; case 2: v72 = 1.0 / *(float *)(a1 + 348); v44 = v72; v78 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 348)); break; case 3: v72 = 1.0 / *(float *)(a1 + 308); v44 = v72; v78 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 308)); break; } v45 = (double)*(unsigned __int16 *)(a1 + 320) / v43; *(_WORD *)(a1 + 330) = (signed int)(pow(v45, v44) * v43 + 0.5); v46 = (signed int)(pow(v45, v78) * v43 + 0.5); v47 = *(unsigned __int16 *)(a1 + 316); v48 = *(unsigned __int16 *)(a1 + 314); *(_WORD *)(a1 + 320) = v46; if ( (_WORD)v48 != (_WORD)v47 || (_WORD)v48 != *(_WORD *)(a1 + 318) || (_WORD)v48 != v46 ) { v50 = (double)v48 / v43; *(_WORD *)(a1 + 324) = (signed int)(pow(v50, v72) * v43 + 0.5); v51 = (double)v47 / v43; v52 = *(unsigned __int16 *)(a1 + 318); *(_WORD *)(a1 + 326) = (signed int)(pow(v51, v72) * v43 + 0.5); v53 = (double)v52 / v43; *(_WORD *)(a1 + 328) = (signed int)(pow(v53, v72) * v43 + 0.5); *(_WORD *)(a1 + 314) = (signed int)(pow(v50, v78) * v43 + 0.5); *(_WORD *)(a1 + 316) = (signed int)(pow(v51, v78) * v43 + 0.5); *(_WORD *)(a1 + 318) = (signed int)(pow(v53, v78) * v43 + 0.5); } else { v49 = *(_WORD *)(a1 + 330); *(_WORD *)(a1 + 328) = v49; *(_WORD *)(a1 + 326) = v49; *(_WORD *)(a1 + 324) = v49; *(_WORD *)(a1 + 318) = v46; *(_WORD *)(a1 + 316) = v46; *(_WORD *)(a1 + 314) = v46; } goto LABEL_78; } v16 = *(_BYTE *)(a1 + 304); v75 = *(unsigned __int16 *)(a1 + 280); if ( v16 == 2 ) { v17 = *(unsigned __int16 *)(a1 + 314); v18 = *(_DWORD *)(a1 + 356); v19 = *(unsigned __int16 *)(a1 + 316); LOBYTE(v80) = *(_BYTE *)(v18 + v17); HIBYTE(v80) = *(_BYTE *)(v19 + v18); v20 = *(unsigned __int16 *)(a1 + 318); v81 = *(_BYTE *)(v20 + v18); v21 = *(_DWORD *)(a1 + 364); v22 = *(_BYTE *)(v21 + v20); LOBYTE(v79) = *(_BYTE *)(v21 + v17); BYTE1(v79) = *(_BYTE *)(v21 + v19); goto LABEL_41; } v23 = v16 - 1; if ( !v23 ) { v71 = *(float *)(a1 + 352); v25 = 1.0; goto LABEL_36; } v24 = v23 - 1; if ( v24 ) { if ( v24 != 1 ) { v25 = 1.0; v71 = 1.0; LABEL_36: v26 = v25; goto LABEL_37; } v25 = 1.0; v71 = 1.0 / *(float *)(a1 + 308); v26 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 308)); } else { v25 = 1.0; v71 = 1.0 / *(float *)(a1 + 348); v26 = 1.0 / (*(float *)(a1 + 352) * *(float *)(a1 + 348)); } LABEL_37: v73 = v26; v27 = v26; v28 = v26 - v25; v29 = v27; if ( fabs(v28) >= 0.05 ) { LOBYTE(v80) = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 314) / 255.0, v29) * 255.0 + 0.5); HIBYTE(v80) = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 316) / 255.0, v73) * 255.0 + 0.5); v30 = 255.0; v31 = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 318) / 255.0, v73) * 255.0 + 0.5); } else { v30 = 255.0; v31 = *(_BYTE *)(a1 + 318); LOBYTE(v80) = *(_BYTE *)(a1 + 314); HIBYTE(v80) = *(_BYTE *)(a1 + 316); } v81 = v31; v79 = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 314) / v30, v71) * 255.0 + 0.5); BYTE1(v79) = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 316) / 255.0, v71) * 255.0 + 0.5); v22 = (signed int)(pow((double)*(unsigned __int16 *)(a1 + 318) / 255.0, v71) * 255.0 + 0.5); LABEL_41: v32 = 0; BYTE2(v79) = v22; if ( v75 > 0 ) { v33 = (_BYTE *)(*(_DWORD *)(a1 + 276) + 2); while ( v32 < *(unsigned __int16 *)(a1 + 282) ) { v34 = *(_DWORD *)(a1 + 392); v35 = (unsigned __int8 *)(v34 + v32); v36 = *(_BYTE *)(v34 + v32); if ( v36 == -1 ) break; if ( !v36 ) { v37 = v81; *((_WORD *)v33 - 1) = v80; LABEL_49: *v33 = v37; goto LABEL_50; } v38 = (unsigned __int16)((unsigned __int8)v79 * (255 - *v35) + *v35 * *(unsigned __int8 *)((unsigned __int8)*(v33 - 2) + *(_DWORD *)(a1 + 364)) + 128); *(v33 - 2) = *(_BYTE *)(((unsigned __int16)(v38 + (v38 >> 8)) >> 8) + *(_DWORD *)(a1 + 360)); LOWORD(v38) = *(unsigned __int8 *)(*(_DWORD *)(a1 + 392) + v32); v39 = (unsigned __int16)(BYTE1(v79) * (255 - v38) + v38 * *(unsigned __int8 *)((unsigned __int8)*(v33 - 1) + *(_DWORD *)(a1 + 364)) + 128); *(v33 - 1) = *(_BYTE *)(((unsigned __int16)(v39 + (v39 >> 8)) >> 8) + *(_DWORD *)(a1 + 360)); LOWORD(v39) = *(unsigned __int8 *)(*(_DWORD *)(a1 + 392) + v32); v40 = (unsigned __int16)(BYTE2(v79) * (255 - v39) + v39 * *(unsigned __int8 *)((unsigned __int8)*v33 + *(_DWORD *)(a1 + 364)) + 128); *v33 = *(_BYTE *)(((unsigned __int16)(v40 + (v40 >> 8)) >> 8) + *(_DWORD *)(a1 + 360)); LABEL_50: ++v32; v33 += 3; if ( v32 >= v75 ) goto LABEL_78; } v41 = (unsigned __int8)*(v33 - 1); *(v33 - 2) = *(_BYTE *)((unsigned __int8)*(v33 - 2) + *(_DWORD *)(a1 + 356)); v42 = (unsigned __int8)*v33; *(v33 - 1) = *(_BYTE *)(v41 + *(_DWORD *)(a1 + 356)); v37 = *(_BYTE *)(v42 + *(_DWORD *)(a1 + 356)); goto LABEL_49; } LABEL_78: if ( *(_BYTE *)(v1 + 112) & 8 && v77 == 3 ) { v66 = *(unsigned __int16 *)(v1 + 280); v67 = 8 - *(unsigned __int8 *)(v1 + 380); v68 = 8 - *(unsigned __int8 *)(v1 + 381); v69 = 8 - *(unsigned __int8 *)(v1 + 382); v70 = 0; v83 = 8 - *(unsigned __int8 *)(v1 + 381); v76 = 8 - *(_BYTE *)(v1 + 382); if ( v67 < 0 || v67 > 8 ) LOBYTE(v67) = 0; if ( v68 < 0 || v68 > 8 ) v83 = 0; if ( v69 < 0 || v69 > 8 ) v76 = 0; if ( (unsigned __int16)v66 > 0u ) { do { *(_BYTE *)(*(_DWORD *)(v1 + 276) + v70) >>= v67; *(_BYTE *)(*(_DWORD *)(v1 + 276) + v70 + 1) >>= v83; *(_BYTE *)(*(_DWORD *)(v1 + 276) + v70 + 2) >>= v76; v70 += 3; --v66; } while ( v66 ); } } } //----- (0094E1B0) -------------------------------------------------------- void __cdecl sub_94E1B0(int a1) { bool v1; // zf int v2; // eax void (__cdecl *v3)(int, int, int); // eax char v4; // al char v5; // al unsigned __int8 v6; // al unsigned int v7; // eax char v8; // [esp+4h] [ebp-38h] if ( !*(_DWORD *)(a1 + 236) ) { sprintf(&v8, "NULL row buffer for row %ld, pass %d", *(_DWORD *)(a1 + 228), *(unsigned __int8 *)(a1 + 292)); sub_9464B0((int *)a1, &v8); } if ( *(_DWORD *)(a1 + 112) & 0x1000 ) { if ( *(_BYTE *)(a1 + 264) == 3 ) { sub_94C7C0( (int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1, *(_DWORD *)(a1 + 276), *(_DWORD *)(a1 + 392), *(unsigned __int16 *)(a1 + 282)); } else if ( *(_WORD *)(a1 + 282) ) { sub_94C9E0((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1, (_WORD *)(a1 + 396)); } else { sub_94C9E0((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1, 0); } } if ( *(_DWORD *)(a1 + 108) & 0x400000 ) sub_94E810(a1 + 256, (_BYTE *)(*(_DWORD *)(a1 + 236) + 1), *(_DWORD *)(a1 + 108) & 0x400000 | 0x80); if ( (unsigned int)&loc_600000 & *(_DWORD *)(a1 + 112) && sub_94ADA0(a1, (int *)(a1 + 256), (unsigned __int16 *)(*(_DWORD *)(a1 + 236) + 1)) ) { v1 = *(_DWORD *)(a1 + 112) == 0x400000; *(_BYTE *)(a1 + 552) = 1; if ( v1 ) sub_946550(a1, "png_do_rgb_to_gray found nongray pixel"); if ( *(_DWORD *)(a1 + 112) == 0x200000 ) sub_9464B0((int *)a1, "png_do_rgb_to_gray found nongray pixel"); } if ( *(_DWORD *)(a1 + 112) & 0x4000 && !(*(_DWORD *)(a1 + 104) & 0x800) ) sub_94AC30((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1); if ( *(_BYTE *)(a1 + 112) < 0 && (*(_WORD *)(a1 + 282) || *(_BYTE *)(a1 + 294) & 4) ) sub_94B450( (int *)(a1 + 256), (unsigned __int8 *)(*(_DWORD *)(a1 + 236) + 1), (_WORD *)(a1 + 396), (_BYTE *)(a1 + 312), (_WORD *)(a1 + 322), *(_DWORD *)(a1 + 356), *(_DWORD *)(a1 + 360), *(_DWORD *)(a1 + 364), *(_DWORD *)(a1 + 368), *(_DWORD *)(a1 + 372), *(_DWORD *)(a1 + 376), *(_DWORD *)(a1 + 344)); v2 = *(_DWORD *)(a1 + 112); if ( v2 & 0x2000 && ((v2 & 0x80u) == 0 || !*(_WORD *)(a1 + 282) && !(*(_BYTE *)(a1 + 294) & 4)) && *(_BYTE *)(a1 + 294) != 3 ) { sub_94C3F0( (int *)(a1 + 256), (_BYTE *)(*(_DWORD *)(a1 + 236) + 1), *(_DWORD *)(a1 + 356), *(_DWORD *)(a1 + 368), *(_DWORD *)(a1 + 344)); } if ( *(_DWORD *)(a1 + 112) & 0x400 ) sub_94A720(a1 + 256, (_BYTE *)(*(_DWORD *)(a1 + 236) + 1)); if ( *(_BYTE *)(a1 + 112) & 0x40 ) { sub_94CDA0((int *)(a1 + 256), (_BYTE *)(*(_DWORD *)(a1 + 236) + 1), *(_DWORD *)(a1 + 492), *(_DWORD *)(a1 + 496)); if ( !*(_DWORD *)(a1 + 260) ) sub_9464B0((int *)a1, "png_do_dither returned rowbytes=0"); } if ( *(_BYTE *)(a1 + 112) & 0x20 ) sub_94E6F0(a1 + 256, (_BYTE *)(*(_DWORD *)(a1 + 236) + 1)); if ( *(_BYTE *)(a1 + 112) & 8 ) sub_94A520((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1, (unsigned __int8 *)(a1 + 385)); if ( *(_BYTE *)(a1 + 112) & 4 ) sub_94A3F0((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1); if ( *(_BYTE *)(a1 + 112) & 1 ) sub_94EA60((int *)(a1 + 256), (char *)(*(_DWORD *)(a1 + 236) + 1)); if ( *(_DWORD *)(a1 + 112) & 0x10000 ) sub_94E7C0(a1 + 256, (_BYTE *)(*(_DWORD *)(a1 + 236) + 1)); if ( *(_DWORD *)(a1 + 112) & 0x4000 && *(_DWORD *)(a1 + 104) & 0x800 ) sub_94AC30((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1); if ( *(_DWORD *)(a1 + 112) & 0x8000 ) sub_94A960(a1 + 256, *(_DWORD *)(a1 + 236) + 1, *(_WORD *)(a1 + 302), *(_DWORD *)(a1 + 108)); if ( *(_DWORD *)(a1 + 112) & 0x80000 ) sub_94A8A0((int *)(a1 + 256), *(_DWORD *)(a1 + 236) + 1); if ( *(_DWORD *)(a1 + 112) & 0x20000 ) sub_94A770(a1 + 256, *(_DWORD *)(a1 + 236) + 1); if ( *(_BYTE *)(a1 + 112) & 0x10 ) sub_94E780(a1 + 256, (char *)(*(_DWORD *)(a1 + 236) + 1)); if ( *(_DWORD *)(a1 + 112) & 0x100000 ) { v3 = *(void (__cdecl **)(int, int, int))(a1 + 88); if ( v3 ) v3(a1, a1 + 256, *(_DWORD *)(a1 + 236) + 1); v4 = *(_BYTE *)(a1 + 100); if ( v4 ) *(_BYTE *)(a1 + 265) = v4; v5 = *(_BYTE *)(a1 + 101); if ( v5 ) *(_BYTE *)(a1 + 266) = v5; v6 = *(_BYTE *)(a1 + 265) * *(_BYTE *)(a1 + 266); *(_BYTE *)(a1 + 267) = v6; if ( v6 < 8u ) v7 = (*(_DWORD *)(a1 + 256) * (unsigned int)v6 + 7) >> 3; else v7 = *(_DWORD *)(a1 + 256) * ((unsigned int)v6 >> 3); *(_DWORD *)(a1 + 260) = v7; } } //----- (0094E620) -------------------------------------------------------- int __cdecl sub_94E620(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 1u; return result; } //----- (0094E630) -------------------------------------------------------- int __cdecl sub_94E630(int a1) { int result; // eax result = a1; if ( *(_BYTE *)(a1 + 295) == 16 ) *(_DWORD *)(a1 + 112) |= 0x10u; return result; } //----- (0094E650) -------------------------------------------------------- int __cdecl sub_94E650(int a1) { int result; // eax result = a1; if ( *(_BYTE *)(a1 + 295) < 8u ) *(_DWORD *)(a1 + 112) |= 0x10000u; return result; } //----- (0094E670) -------------------------------------------------------- int __cdecl sub_94E670(int a1, int a2) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 8u; *(_DWORD *)(a1 + 385) = *(_DWORD *)a2; *(_BYTE *)(a1 + 389) = *(_BYTE *)(a2 + 4); return result; } //----- (0094E690) -------------------------------------------------------- signed int __cdecl sub_94E690(int a1) { if ( !*(_BYTE *)(a1 + 291) ) return 1; *(_DWORD *)(a1 + 112) |= 2u; return 7; } //----- (0094E6C0) -------------------------------------------------------- int __cdecl sub_94E6C0(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 0x20000u; return result; } //----- (0094E6D0) -------------------------------------------------------- int __cdecl sub_94E6D0(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 0x80000u; return result; } //----- (0094E6E0) -------------------------------------------------------- int __cdecl sub_94E6E0(int a1) { int result; // eax result = a1; *(_DWORD *)(result + 112) |= 0x20u; return result; } //----- (0094E6F0) -------------------------------------------------------- char __cdecl sub_94E6F0(int a1, _BYTE *a2) { _BYTE *i; // eax int v3; // ecx int v4; // ecx unsigned int v5; // ecx int v6; // ecx unsigned int v7; // ecx LOBYTE(i) = *(_BYTE *)(a1 + 8); if ( (_BYTE)i ) { if ( (_BYTE)i == 4 ) { if ( *(_BYTE *)(a1 + 9) == 8 ) { v4 = *(_DWORD *)(a1 + 4); i = a2; if ( v4 ) { v5 = ((unsigned int)(v4 - 1) >> 1) + 1; do { *i = ~*i; i += 2; --v5; } while ( v5 ); } } else if ( *(_BYTE *)(a1 + 9) == 16 ) { v6 = *(_DWORD *)(a1 + 4); if ( v6 ) { i = a2 + 1; v7 = ((unsigned int)(v6 - 1) >> 2) + 1; do { *(i - 1) = ~*(i - 1); *i = ~*i; i += 4; --v7; } while ( v7 ); } } } } else { v3 = *(_DWORD *)(a1 + 4); for ( i = a2; v3; --v3 ) { *i = ~*i; ++i; } } return (char)i; } //----- (0094E780) -------------------------------------------------------- void __cdecl sub_94E780(int a1, char *a2) { char *v2; // eax int v3; // esi char v4; // cl if ( *(_BYTE *)(a1 + 9) == 16 ) { v2 = a2; if ( *(_DWORD *)a1 * *(unsigned __int8 *)(a1 + 10) ) { v3 = *(_DWORD *)a1 * *(unsigned __int8 *)(a1 + 10); do { v4 = *v2; *v2 = v2[1]; v2[1] = v4; v2 += 2; --v3; } while ( v3 ); } } } //----- (0094E7C0) -------------------------------------------------------- _BYTE *__cdecl sub_94E7C0(int a1, _BYTE *a2) { _BYTE *result; // eax unsigned __int8 v3; // dl unsigned int v4; // ecx _BYTE *v5; // esi result = (_BYTE *)a1; v3 = *(_BYTE *)(a1 + 9); if ( v3 < 8u ) { result = a2; v4 = (unsigned int)&a2[*(_DWORD *)(a1 + 4)]; switch ( v3 ) { case 1u: v5 = &unk_AC89B0; break; case 2u: v5 = &unk_AC8AB0; break; case 4u: v5 = &unk_AC8BB0; break; default: return result; } if ( (unsigned int)a2 < v4 ) { do { *result = v5[(unsigned __int8)*result]; ++result; } while ( (unsigned int)result < v4 ); } } return result; } //----- (0094E810) -------------------------------------------------------- int __cdecl sub_94E810(int a1, _BYTE *a2, int a3) { int v3; // ebx char v4; // dl unsigned int v5; // edi int result; // eax _BYTE *v7; // ecx _BYTE *v8; // edx _BYTE *v9; // eax int v10; // esi unsigned int v11; // esi _BYTE *v12; // edx _BYTE *v13; // eax int v14; // esi unsigned int v15; // esi unsigned int v16; // esi unsigned int v17; // esi _BYTE *v18; // edx _BYTE *v19; // eax int v20; // esi unsigned int v21; // esi v3 = a1; v4 = *(_BYTE *)(a1 + 8); v5 = *(_DWORD *)a1; result = (int)a2; v7 = a2; if ( (v4 == 2 || v4 == 6 && a3 & 0x400000) && *(_BYTE *)(a1 + 10) == 4 ) { if ( *(_BYTE *)(a1 + 9) != 8 ) { if ( (a3 & 0x80u) == 0 ) { if ( v5 ) { v15 = *(_DWORD *)a1; do { *v7 = *(_BYTE *)(result + 2); v7[1] = *(_BYTE *)(result + 3); v7[2] = *(_BYTE *)(result + 4); v7[3] = *(_BYTE *)(result + 5); v7[4] = *(_BYTE *)(result + 6); v7[5] = *(_BYTE *)(result + 7); v7 += 6; result += 8; --v15; } while ( v15 ); } } else { v12 = a2 + 8; v13 = a2 + 6; if ( v5 > 1 ) { v14 = v5 - 1; do { *v13 = *v12; v13[1] = v12[1]; v13[2] = v12[2]; v13[3] = v12[3]; v13[4] = v12[4]; v13[5] = v12[5]; v13 += 6; v12 += 8; --v14; } while ( v14 ); } } result = 6 * v5; *(_BYTE *)(a1 + 11) = 48; *(_DWORD *)(a1 + 4) = 6 * v5; *(_BYTE *)(a1 + 10) = 3; goto LABEL_48; } if ( (a3 & 0x80u) == 0 ) { if ( v5 ) { v11 = *(_DWORD *)a1; do { *v7 = *(_BYTE *)(result + 1); v7[1] = *(_BYTE *)(result + 2); v7[2] = *(_BYTE *)(result + 3); v7 += 3; result += 4; --v11; } while ( v11 ); } } else { v8 = a2 + 3; v9 = a2 + 4; if ( v5 > 1 ) { v10 = v5 - 1; do { *v8 = *v9; v8[1] = v9[1]; v8[2] = v9[2]; v8 += 3; v9 += 4; --v10; } while ( v10 ); result = 3 * v5; *(_BYTE *)(a1 + 11) = 24; *(_DWORD *)(a1 + 4) = 3 * v5; *(_BYTE *)(a1 + 10) = 3; goto LABEL_48; } } result = 3 * v5; *(_BYTE *)(a1 + 11) = 24; *(_DWORD *)(a1 + 4) = 3 * v5; *(_BYTE *)(a1 + 10) = 3; goto LABEL_48; } if ( v4 ) { if ( v4 != 4 ) goto LABEL_48; if ( !(a3 & 0x400000) ) return result; } if ( *(_BYTE *)(a1 + 10) == 2 ) { if ( *(_BYTE *)(a1 + 9) != 8 ) { if ( (a3 & 0x80u) == 0 ) { if ( v5 ) { v21 = *(_DWORD *)a1; do { *v7 = *(_BYTE *)(result + 2); v7[1] = *(_BYTE *)(result + 3); v7 += 2; result += 4; --v21; } while ( v21 ); } } else { v18 = a2 + 4; v19 = a2 + 2; if ( v5 > 1 ) { v20 = v5 - 1; do { *v19 = *v18; v19[1] = v18[1]; v19 += 2; v18 += 4; --v20; } while ( v20 ); } } result = 2 * v5; *(_BYTE *)(a1 + 11) = 16; *(_DWORD *)(a1 + 4) = 2 * v5; goto LABEL_47; } if ( (a3 & 0x80u) == 0 ) { if ( v5 ) { v17 = *(_DWORD *)a1; do { *v7++ = *(_BYTE *)(result + 1); result += 2; --v17; } while ( v17 ); } } else if ( v5 ) { v16 = *(_DWORD *)a1; do { *v7++ = *(_BYTE *)result; result += 2; --v16; } while ( v16 ); v3 = a1; *(_BYTE *)(a1 + 11) = 8; *(_DWORD *)(a1 + 4) = v5; goto LABEL_47; } v3 = a1; *(_BYTE *)(a1 + 11) = 8; *(_DWORD *)(a1 + 4) = v5; LABEL_47: *(_BYTE *)(v3 + 10) = 1; } LABEL_48: if ( a3 & 0x400000 ) *(_BYTE *)(v3 + 8) &= 0xFBu; return result; } //----- (0094EA60) -------------------------------------------------------- char __cdecl sub_94EA60(int *a1, char *a2) { char *v2; // eax char v3; // dl int v4; // ecx int v5; // esi char v6; // cl int v7; // esi char v8; // cl int v9; // esi char v10; // cl char v11; // dl char v12; // cl int v13; // esi char v14; // cl char v15; // dl char v16; // cl LOBYTE(v2) = (_BYTE)a1; v3 = *((_BYTE *)a1 + 8); if ( v3 & 2 ) { v4 = *a1; LOBYTE(v2) = *((_BYTE *)a1 + 9); if ( (_BYTE)v2 == 8 ) { if ( v3 == 2 ) { v2 = a2; if ( v4 ) { v5 = *a1; do { v6 = *v2; *v2 = v2[2]; v2[2] = v6; v2 += 3; --v5; } while ( v5 ); } } else if ( v3 == 6 ) { v2 = a2; if ( v4 ) { v7 = *a1; do { v8 = *v2; *v2 = v2[2]; v2[2] = v8; v2 += 4; --v7; } while ( v7 ); } } } else if ( (_BYTE)v2 == 16 ) { if ( v3 == 2 ) { if ( v4 ) { v2 = a2 + 1; v9 = *a1; do { v10 = *(v2 - 1); *(v2 - 1) = v2[3]; v11 = v2[4]; v2[3] = v10; v12 = *v2; *v2 = v11; v2[4] = v12; v2 += 6; --v9; } while ( v9 ); } } else if ( v3 == 6 && v4 ) { v2 = a2 + 1; v13 = *a1; do { v14 = *(v2 - 1); *(v2 - 1) = v2[3]; v15 = v2[4]; v2[3] = v14; v16 = *v2; *v2 = v15; v2[4] = v16; v2 += 8; --v13; } while ( v13 ); } } } return (char)v2; } //----- (0094EB40) -------------------------------------------------------- int __cdecl sub_94EB40(int a1, int a2, int a3) { int result; // eax if ( a1 && a2 ) result = a3 & *(_DWORD *)(a2 + 8); else result = 0; return result; } //----- (0094EB60) -------------------------------------------------------- int __cdecl sub_94EB60(int a1, int a2) { int result; // eax if ( a1 && a2 ) result = *(_DWORD *)(a2 + 12); else result = 0; return result; } //----- (0094EB80) -------------------------------------------------------- signed int __cdecl sub_94EB80(int a1, int a2, _DWORD *a3) { if ( !a1 || !a2 || !(*(_BYTE *)(a2 + 8) & 2) || !a3 ) return 0; *a3 = a2 + 68; return 2; } //----- (0094EBB0) -------------------------------------------------------- void __cdecl sub_94EBB0(int a1, int a2, int a3) { __int16 v3; // cx if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 90) = *(_DWORD *)a3; *(_DWORD *)(a2 + 94) = *(_DWORD *)(a3 + 4); v3 = *(_WORD *)(a3 + 8); *(_DWORD *)(a2 + 8) |= 0x20u; *(_WORD *)(a2 + 98) = v3; } } } //----- (0094EBE0) -------------------------------------------------------- void __cdecl sub_94EBE0(int a1, int a2, double a3, double a4, double a5, double a6, double a7, double a8, double a9, double a10) { if ( !a1 || !a2 ) return; if ( a3 < 0.0 ) goto LABEL_30; if ( a4 < 0.0 ) { sub_946550(a1, "Ignoring attempt to set negative chromaticity value"); return; } if ( a5 < 0.0 || a6 < 0.0 ) goto LABEL_33; if ( a7 < 0.0 || a8 < 0.0 ) goto LABEL_30; if ( a9 < 0.0 ) { LABEL_33: sub_946550(a1, "Ignoring attempt to set negative chromaticity value"); return; } if ( a10 < 0.0 ) { LABEL_30: sub_946550(a1, "Ignoring attempt to set negative chromaticity value"); return; } if ( a3 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a4 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a5 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a6 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a7 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a8 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else if ( a9 > 21474.83 || a10 > 21474.83 ) { sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else { *(float *)(a2 + 128) = a3; *(float *)(a2 + 132) = a4; *(float *)(a2 + 136) = a5; *(float *)(a2 + 140) = a6; *(float *)(a2 + 144) = a7; *(float *)(a2 + 148) = a8; *(float *)(a2 + 152) = a9; *(float *)(a2 + 156) = a10; *(_DWORD *)(a2 + 256) = (signed int)(a3 * 100000.0 + 0.5); *(_DWORD *)(a2 + 260) = (signed int)(a4 * 100000.0 + 0.5); *(_DWORD *)(a2 + 264) = (signed int)(a5 * 100000.0 + 0.5); *(_DWORD *)(a2 + 268) = (signed int)(a6 * 100000.0 + 0.5); *(_DWORD *)(a2 + 272) = (signed int)(a7 * 100000.0 + 0.5); *(_DWORD *)(a2 + 276) = (signed int)(a8 * 100000.0 + 0.5); *(_DWORD *)(a2 + 280) = (signed int)(a9 * 100000.0 + 0.5); *(_DWORD *)(a2 + 8) |= 4u; *(_DWORD *)(a2 + 284) = (signed int)(100000.0 * a10 + 0.5); } } //----- (0094EF10) -------------------------------------------------------- int __cdecl sub_94EF10(int a1, int a2, signed int a3, signed int a4, signed int a5, signed int a6, signed int a7, signed int a8, signed int a9, signed int a10) { double v10; // st7 double v11; // st5 double v12; // st4 double v13; // st3 double v14; // st2 double v15; // st1 double v16; // st6 int result; // eax double v18; // [esp+0h] [ebp-8h] if ( a1 && a2 ) { if ( a3 < 0 || a4 < 0 || a5 < 0 || a6 < 0 || a7 < 0 || a8 < 0 || a9 < 0 || a10 < 0 ) { result = sub_946550(a1, "Ignoring attempt to set negative chromaticity value"); } else { v10 = (double)a3; if ( v10 > 2147483647.0 || (v18 = (double)a4, v18 > 2147483647.0) || (v11 = (double)a5, v11 > 2147483647.0) || (v12 = (double)a6, v12 > 2147483647.0) || (v13 = (double)a7, v13 > 2147483647.0) || (v14 = (double)a8, v14 > 2147483647.0) || (v15 = (double)a9, v15 > 2147483647.0) || (v16 = (double)a10, v16 > 2147483647.0) ) { result = sub_946550(a1, "Ignoring attempt to set chromaticity value exceeding 21474.83"); } else { *(_DWORD *)(a2 + 8) |= 4u; *(_DWORD *)(a2 + 256) = a3; *(_DWORD *)(a2 + 260) = a4; *(_DWORD *)(a2 + 276) = a8; *(_DWORD *)(a2 + 264) = a5; result = a6; *(_DWORD *)(a2 + 280) = a9; *(_DWORD *)(a2 + 272) = a7; *(_DWORD *)(a2 + 268) = a6; *(_DWORD *)(a2 + 284) = a10; *(float *)(a2 + 128) = v10 / 100000.0; *(float *)(a2 + 132) = v18 / 100000.0; *(float *)(a2 + 136) = v11 / 100000.0; *(float *)(a2 + 140) = v12 / 100000.0; *(float *)(a2 + 144) = v13 / 100000.0; *(float *)(a2 + 148) = v14 / 100000.0; *(float *)(a2 + 152) = v15 / 100000.0; *(float *)(a2 + 156) = v16 / 100000.0; } } } return result; } //----- (0094F0F0) -------------------------------------------------------- void __cdecl sub_94F0F0(int a1, int a2, double a3) { double v3; // st7 if ( a1 && a2 ) { v3 = a3; if ( a3 > 21474.83 ) { sub_946550(a1, "Limiting gamma to 21474.83"); v3 = 21474.83; } *(float *)(a2 + 40) = v3; *(_DWORD *)(a2 + 8) |= 1u; *(_DWORD *)(a2 + 252) = (signed int)(100000.0 * v3 + 0.5); if ( 0.0 == v3 ) sub_946550(a1, "Setting gamma=0"); } } //----- (0094F170) -------------------------------------------------------- void __cdecl sub_94F170(int a1, int a2, signed int a3) { signed int v3; // eax if ( a1 && a2 ) { v3 = a3; if ( a3 <= 0x7FFFFFFF ) { if ( a3 < 0 ) { sub_946550(a1, "Setting negative gamma to zero"); v3 = 0; } } else { sub_946550(a1, "Limiting gamma to 21474.83"); v3 = 0x7FFFFFFF; } *(_DWORD *)(a2 + 8) |= 1u; *(_DWORD *)(a2 + 252) = v3; *(float *)(a2 + 40) = (double)v3 / 100000.0; if ( !v3 ) sub_946550(a1, "Setting gamma=0"); } } //----- (0094F1F0) -------------------------------------------------------- void __cdecl sub_94F1F0(int a1, int a2, int a3) { void *v3; // eax signed int v4; // eax int v5; // eax if ( a1 && a2 ) { if ( *(_WORD *)(a2 + 20) ) { sub_944BA0(a1, a2, 8, 0); v3 = sub_946920(a1, 0x200u); *(_DWORD *)(a1 + 500) = v3; if ( v3 ) { v4 = 0; if ( *(_WORD *)(a2 + 20) > 0u ) { do { *(_WORD *)(*(_DWORD *)(a1 + 500) + 2 * v4) = *(_WORD *)(a3 + 2 * v4); ++v4; } while ( v4 < *(unsigned __int16 *)(a2 + 20) ); } v5 = *(_DWORD *)(a1 + 500); *(_DWORD *)(a2 + 8) |= 0x40u; *(_DWORD *)(a2 + 184) |= 8u; *(_DWORD *)(a2 + 124) = v5; } else { sub_946550(a1, "Insufficient memory for hIST chunk data."); } } else { sub_946550(a1, "Palette size 0, hIST allocation skipped."); } } } //----- (0094F2A0) -------------------------------------------------------- void __cdecl sub_94F2A0(int *a1, int a2, unsigned int a3, unsigned int a4, signed int a5, signed int a6, signed int a7, int a8, int a9) { unsigned int v9; // eax if ( !a1 || !a2 ) return; if ( !a3 || !a4 ) sub_9464B0(a1, "Image width or height is zero in IHDR"); if ( a3 > a1[153] || a4 > a1[154] ) sub_9464B0(a1, "image size exceeds user limits in IHDR"); if ( a3 > 0x7FFFFFFF || a4 > 0x7FFFFFFF ) sub_9464B0(a1, "Invalid image size in IHDR"); if ( a3 > 0x1FFFFF7E ) sub_946550((int)a1, "Width is too large for libpng to process pixels"); if ( a5 != 1 && a5 != 2 && a5 != 4 && a5 != 8 && a5 != 16 ) sub_9464B0(a1, "Invalid bit depth in IHDR"); if ( a6 < 0 || a6 == 1 || a6 == 5 || a6 > 6 ) sub_9464B0(a1, "Invalid color type in IHDR"); if ( a6 != 3 ) { if ( a6 != 2 && a6 != 4 && a6 != 6 || a5 >= 8 ) goto LABEL_33; LABEL_32: sub_9464B0(a1, "Invalid color type/bit depth combination in IHDR"); } if ( a5 > 8 ) goto LABEL_32; LABEL_33: if ( a7 >= 2 ) sub_9464B0(a1, "Unknown interlace method in IHDR"); if ( a8 ) sub_9464B0(a1, "Unknown compression method in IHDR"); if ( a1[26] & 0x1000 && a1[140] ) sub_946550((int)a1, "MNG features are not allowed in a PNG datastream\n"); if ( a9 ) { if ( !(a1[140] & 4) || a9 != 64 || a1[26] & 0x1000 || a6 != 2 && a6 != 6 ) sub_9464B0(a1, "Unknown filter method in IHDR"); if ( a1[26] & 0x1000 ) sub_946550((int)a1, "Invalid filter method in IHDR"); } *(_BYTE *)(a2 + 26) = 0; *(_DWORD *)(a2 + 4) = a4; *(_BYTE *)(a2 + 27) = a9; *(_DWORD *)a2 = a3; *(_BYTE *)(a2 + 24) = a5; *(_BYTE *)(a2 + 25) = a6; *(_BYTE *)(a2 + 28) = a7; if ( (_BYTE)a6 != 3 && a6 & 2 ) *(_BYTE *)(a2 + 29) = 3; else *(_BYTE *)(a2 + 29) = 1; if ( a6 & 4 ) ++*(_BYTE *)(a2 + 29); LOBYTE(v9) = a5 * *(_BYTE *)(a2 + 29); *(_BYTE *)(a2 + 30) = v9; if ( a3 <= 0x1FFFFF7E ) { v9 = (unsigned __int8)v9; if ( (unsigned __int8)v9 < 8u ) *(_DWORD *)(a2 + 12) = (a3 * v9 + 7) >> 3; else *(_DWORD *)(a2 + 12) = a3 * (v9 >> 3); } else { *(_DWORD *)(a2 + 12) = 0; } } //----- (0094F4D0) -------------------------------------------------------- void __cdecl sub_94F4D0(int a1, int a2, int a3, int a4, char a5) { if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 8) |= 0x100u; *(_DWORD *)(a2 + 100) = a3; *(_DWORD *)(a2 + 104) = a4; *(_BYTE *)(a2 + 108) = a5; } } } //----- (0094F500) -------------------------------------------------------- void __cdecl sub_94F500(int a1, int a2, void *a3, int a4, int a5, char a6, int a7, void *a8, int a9) { unsigned int v9; // kr00_4 void *v10; // eax unsigned int v11; // kr04_4 void *v12; // eax _DWORD *v13; // eax int v14; // esi unsigned int v15; // kr08_4 void **v16; // eax if ( a1 && a2 ) { v9 = strlen((const char *)a3); v10 = sub_946920(a1, v9 + 1); *(_DWORD *)(a2 + 160) = v10; if ( v10 ) { memcpy(v10, a3, v9 + 1); *(_DWORD *)(a2 + 164) = a4; *(_DWORD *)(a2 + 168) = a5; *(_BYTE *)(a2 + 180) = a6; *(_BYTE *)(a2 + 181) = a7; v11 = strlen((const char *)a8); v12 = sub_946920(a1, v11 + 1); *(_DWORD *)(a2 + 172) = v12; if ( v12 ) { memcpy(v12, a8, v11 + 1); v13 = sub_946920(a1, 4 * a7 + 4); *(_DWORD *)(a2 + 176) = v13; if ( v13 ) { v14 = 0; v13[a7] = 0; if ( a7 <= 0 ) { LABEL_12: *(_DWORD *)(a2 + 8) |= 0x400u; *(_DWORD *)(a2 + 184) |= 0x80u; } else { while ( 1 ) { v15 = strlen(*(const char **)(a9 + 4 * v14)); *(_DWORD *)(*(_DWORD *)(a2 + 176) + 4 * v14) = sub_946920(a1, v15 + 1); v16 = (void **)(*(_DWORD *)(a2 + 176) + 4 * v14); if ( !*v16 ) break; memcpy(*v16, *(const void **)(a9 + 4 * v14++), v15 + 1); if ( v14 >= a7 ) goto LABEL_12; } sub_946550(a1, "Insufficient memory for pCAL parameter."); } } else { sub_946550(a1, "Insufficient memory for pCAL params."); } } else { sub_946550(a1, "Insufficient memory for pCAL units."); } } else { sub_946550(a1, "Insufficient memory for pCAL purpose."); } } } //----- (0094F6A0) -------------------------------------------------------- void __cdecl sub_94F6A0(int a1, int a2, char a3, double a4, double a5) { if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 8) |= 0x4000u; *(double *)(a2 + 224) = a4; *(_BYTE *)(a2 + 220) = a3; *(double *)(a2 + 232) = a5; } } } //----- (0094F6E0) -------------------------------------------------------- void __cdecl sub_94F6E0(int a1, int a2, int a3, int a4, char a5) { if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 8) |= 0x80u; *(_DWORD *)(a2 + 112) = a3; *(_DWORD *)(a2 + 116) = a4; *(_BYTE *)(a2 + 120) = a5; } } } //----- (0094F710) -------------------------------------------------------- void __cdecl sub_94F710(int a1, int a2, void *a3, int a4) { void *v4; // eax if ( a1 ) { if ( a2 ) { sub_944BA0(a1, a2, 4096, 0); v4 = sub_946890(a1, 0x300u); *(_DWORD *)(a1 + 276) = v4; memset(v4, 0, 0x300u); memcpy(*(void **)(a1 + 276), a3, 3 * a4); *(_DWORD *)(a2 + 16) = *(_DWORD *)(a1 + 276); *(_WORD *)(a1 + 280) = a4; *(_DWORD *)(a2 + 184) |= 0x1000u; *(_DWORD *)(a2 + 8) |= 8u; *(_WORD *)(a2 + 20) = a4; } } } //----- (0094F7A0) -------------------------------------------------------- void __cdecl sub_94F7A0(int a1, int a2, int a3) { char v3; // cl if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 68) = *(_DWORD *)a3; v3 = *(_BYTE *)(a3 + 4); *(_DWORD *)(a2 + 8) |= 2u; *(_BYTE *)(a2 + 72) = v3; } } } //----- (0094F7D0) -------------------------------------------------------- void __cdecl sub_94F7D0(int a1, int a2, char a3) { if ( a1 ) { if ( a2 ) { *(_DWORD *)(a2 + 8) |= 0x800u; *(_BYTE *)(a2 + 44) = a3; sub_94F0F0(a1, a2, 0.4545499980449677); sub_94F170(a1, a2, 45455); sub_94EF10(a1, a2, 31270, 32900, 64000, 33000, 30000, 60000, 15000, 6000); sub_94EBE0( a1, a2, 0.3127000033855438, 0.3289999961853027, 0.6399999856948853, 0.3300000131130219, 0.300000011920929, 0.6000000238418579, 0.1500000059604645, 0.05999999865889549); } } } //----- (0094F8B0) -------------------------------------------------------- void __cdecl sub_94F8B0(int a1, int a2, int a3, char a4, void *a5, size_t a6) { char *v6; // edx char *v7; // eax int v8; // edx char v9; // cl void *v10; // eax void *v11; // edi void *v12; // [esp+4h] [ebp-4h] if ( a1 && a2 && a3 && a5 ) { v6 = (char *)sub_946920(a1, strlen((const char *)a3) + 1); v12 = v6; if ( v6 ) { v7 = (char *)a3; v8 = (int)&v6[-a3]; do { v9 = *v7; v7[v8] = *v7; ++v7; } while ( v9 ); v10 = sub_946920(a1, a6); v11 = v10; if ( v10 ) { memcpy(v10, a5, a6); sub_944BA0(a1, a2, 16, 0); *(_DWORD *)(a2 + 184) |= 0x10u; *(_DWORD *)(a2 + 8) |= 0x1000u; *(_DWORD *)(a2 + 204) = a6; *(_DWORD *)(a2 + 196) = v12; *(_DWORD *)(a2 + 200) = v11; *(_BYTE *)(a2 + 208) = a4; } else { sub_9468F0(a1, v12); sub_946550(a1, "Insufficient memory to process iCCP profile."); } } else { sub_946550(a1, "Insufficient memory to process iCCP chunk."); } } } //----- (0094F9B0) -------------------------------------------------------- signed int __cdecl sub_94F9B0(int a1, _DWORD *a2, int a3, int a4) { int v4; // ecx int v5; // esi int v6; // eax int v7; // eax void *v8; // eax void *v10; // eax const char **v11; // edi const char *v12; // eax _DWORD *v13; // esi unsigned int v14; // eax int v15; // edx const char *v16; // edi size_t v17; // edi void *v18; // eax void *v19; // eax _DWORD *v20; // eax int v21; // [esp+8h] [ebp-Ch] void *v22; // [esp+Ch] [ebp-8h] size_t v23; // [esp+Ch] [ebp-8h] const void **v24; // [esp+10h] [ebp-4h] if ( !a1 ) return 0; if ( !a2 ) return 0; v4 = a4; if ( !a4 ) return 0; v5 = a2[13]; v6 = a4 + a2[12]; if ( v6 > v5 ) { v22 = (void *)a2[14]; if ( v22 ) { v7 = v6 + 8; a2[13] = v7; v8 = sub_946920(a1, 16 * v7); a2[14] = v8; if ( !v8 ) { sub_9468F0(a1, v22); return 1; } memcpy(v8, v22, 16 * v5); sub_9468F0(a1, v22); } else { a2[13] = a4 + 8; a2[12] = 0; v10 = sub_946920(a1, 16 * (a4 + 8)); a2[14] = v10; if ( !v10 ) return 1; a2[46] |= 0x4000u; } v4 = a4; } v21 = 0; if ( v4 > 0 ) { v11 = (const char **)(a3 + 8); v24 = (const void **)(a3 + 8); do { v12 = *(v11 - 1); v13 = (_DWORD *)(a2[14] + 16 * a2[12]); if ( v12 ) { v14 = strlen(v12); v15 = (int)*(v11 - 2); v23 = v14; if ( v15 > 0 ) { sub_946550(a1, "iTXt chunk not supported."); } else { v16 = *v11; if ( v16 && *v16 ) { v17 = strlen(v16); *v13 = v15; } else { v17 = 0; *v13 = -1; } v18 = sub_946920(a1, v17 + v23 + 4); v13[1] = v18; if ( !v18 ) return 1; memcpy(v18, *(v24 - 1), v23); *(_BYTE *)(v23 + v13[1]) = 0; v19 = (void *)(v23 + v13[1] + 1); v13[2] = v19; if ( v17 ) memcpy(v19, *v24, v17); *(_BYTE *)(v17 + v13[2]) = 0; v13[3] = v17; v11 = (const char **)v24; v20 = (_DWORD *)(a2[14] + 16 * a2[12]); *v20 = *v13; v20[1] = v13[1]; v20[2] = v13[2]; v20[3] = v13[3]; ++a2[12]; } } v11 += 4; ++v21; v24 = (const void **)v11; } while ( v21 < a4 ); } return 0; } //----- (0094FBB0) -------------------------------------------------------- void __cdecl sub_94FBB0(int a1, _DWORD *a2, _DWORD *a3) { int v3; // ecx if ( a1 && a2 && !(*(_DWORD *)(a1 + 104) & 0x200) ) { a2[15] = *a3; v3 = a3[1]; a2[2] |= 0x200u; a2[16] = v3; } } //----- (0094FBE0) -------------------------------------------------------- void __cdecl sub_94FBE0(int a1, int a2, void *a3, size_t a4, int a5) { signed __int16 v5; // bx void *v6; // eax if ( a1 && a2 ) { v5 = a4; if ( a3 ) { sub_944BA0(a1, a2, 0x2000, 0); v6 = sub_946890(a1, 0x100u); *(_DWORD *)(a2 + 76) = v6; *(_DWORD *)(a1 + 392) = v6; memcpy(*(void **)(a2 + 76), a3, a4); *(_DWORD *)(a2 + 184) |= 0x2000u; } if ( a5 ) { *(_DWORD *)(a2 + 80) = *(_DWORD *)a5; *(_DWORD *)(a2 + 84) = *(_DWORD *)(a5 + 4); *(_WORD *)(a2 + 88) = *(_WORD *)(a5 + 8); if ( !a4 ) v5 = 1; } *(_DWORD *)(a2 + 8) |= 0x10u; *(_WORD *)(a2 + 22) = v5; } } //----- (0094FC70) -------------------------------------------------------- int __cdecl sub_94FC70(int a1, int a2, int a3, int a4) { _DWORD *v4; // ebx int v5; // edi char *v6; // esi int result; // eax int v8; // edi int v9; // esi _BYTE *v10; // eax const char *v11; // ecx _BYTE *v12; // edx char v13; // al void *v14; // eax char v15; // cl char *v16; // [esp+Ch] [ebp-4h] int v17; // [esp+1Ch] [ebp+Ch] v4 = (_DWORD *)a2; v5 = a4; v6 = (char *)sub_946920(a1, 16 * (a4 + *(_DWORD *)(a2 + 216))); v16 = v6; if ( !v6 ) return sub_946550(a1, "No memory for sPLT palettes."); memcpy(v6, *(const void **)(a2 + 212), 16 * *(_DWORD *)(a2 + 216)); sub_9468F0(a1, *(void **)(a2 + 212)); result = 0; *(_DWORD *)(a2 + 212) = 0; v17 = 0; if ( a4 > 0 ) { v8 = a3; do { v9 = (int)&v16[16 * (v17 + v4[54])]; *(_DWORD *)v8; v10 = sub_946890(a1, strlen(*(const char **)v8) + 1); *(_DWORD *)v9 = v10; v11 = *(const char **)v8; v12 = v10; do { v13 = *v11; *v12++ = *v11++; } while ( v13 ); v14 = sub_946890(a1, 16 * *(_DWORD *)(v8 + 12)); *(_DWORD *)(v9 + 8) = v14; memcpy(v14, *(const void **)(v8 + 8), 16 * *(_DWORD *)(v8 + 12)); *(_DWORD *)(v9 + 12) = *(_DWORD *)(v8 + 12); v15 = *(_BYTE *)(v8 + 4); result = v17 + 1; v8 += 16; *(_BYTE *)(v9 + 4) = v15; v17 = result; } while ( result < a4 ); v6 = v16; v5 = a4; } v4[54] += v5; v4[2] |= 0x2000u; v4[46] |= 0x20u; v4[53] = v6; return result; } //----- (0094FDB0) -------------------------------------------------------- void __cdecl sub_94FDB0(int a1, int a2, int a3, int a4) { int v4; // edi char *v5; // esi size_t *v6; // edi int v7; // esi void *v8; // eax char *v9; // [esp+0h] [ebp-8h] int v10; // [esp+4h] [ebp-4h] if ( a1 ) { if ( a2 ) { v4 = a4; if ( a4 ) { v5 = (char *)sub_946920(a1, 20 * (a4 + *(_DWORD *)(a2 + 192))); v9 = v5; if ( v5 ) { memcpy(v5, *(const void **)(a2 + 188), 20 * *(_DWORD *)(a2 + 192)); sub_9468F0(a1, *(void **)(a2 + 188)); *(_DWORD *)(a2 + 188) = 0; v10 = 0; if ( a4 > 0 ) { v6 = (size_t *)(a3 + 12); do { v7 = (int)&v5[20 * (v10 + *(_DWORD *)(a2 + 192))]; strncpy((char *)v7, (const char *)v6 - 12, 5u); v8 = sub_946920(a1, *v6); *(_DWORD *)(v7 + 8) = v8; if ( v8 ) { memcpy(v8, (const void *)*(v6 - 1), *v6); *(_DWORD *)(v7 + 12) = *v6; *(_BYTE *)(v7 + 16) = *(_BYTE *)(a1 + 104); } else { sub_946550(a1, "Out of memory processing unknown chunk."); } v5 = v9; v6 += 5; ++v10; } while ( v10 < a4 ); v4 = a4; } *(_DWORD *)(a2 + 192) += v4; *(_DWORD *)(a2 + 184) |= 0x200u; *(_DWORD *)(a2 + 188) = v5; } else { sub_946550(a1, "Out of memory while processing unknown chunk."); } } } } } //----- (00950440) -------------------------------------------------------- _DWORD *__cdecl sub_950440(int a1, float a2, int a3) { double v3; // st6 bool v4; // c0 bool v5; // c3 double v6; // st6 double v7; // st7 double v8; // st5 double v9; // st6 float v10; // ST80_4 float v11; // ST84_4 float v12; // ST88_4 float v13; // ST80_4 float v14; // ST84_4 float v15; // ST88_4 double v16; // st4 float v17; // ST68_4 float v18; // ST6C_4 float v19; // ST70_4 float v20; // ST2C_4 float v21; // ST30_4 float v22; // ST34_4 float v23; // ST50_4 float v24; // ST54_4 float v25; // ST58_4 float v26; // ST5C_4 float v27; // ST60_4 float v28; // ST64_4 float v29; // ST38_4 float v30; // ST3C_4 float v31; // ST40_4 float *v32; // eax int v33; // esi double v34; // st7 float v35; // ST44_4 double v36; // st6 float v37; // ST48_4 double v38; // st5 float v39; // ST4C_4 double v40; // st4 float v41; // ST50_4 double v42; // st3 float v43; // ST54_4 double v44; // st2 float v45; // ST58_4 float v46; // ST44_4 float v47; // ST48_4 float v48; // ST4C_4 float v49; // ST38_4 float v50; // ST3C_4 float v51; // ST40_4 float v52; // ST44_4 float v53; // ST48_4 float v54; // ST4C_4 float v55; // ST38_4 float v56; // ST3C_4 float v57; // ST40_4 double v58; // rt1 float v59; // ST44_4 double v60; // rt2 float v61; // ST48_4 double v62; // rtt float v63; // ST4C_4 float v64; // ST38_4 float v65; // ST3C_4 float v66; // ST40_4 double v67; // st4 float v68; // ST44_4 double v69; // st3 float v70; // ST48_4 double v71; // st2 float v72; // ST4C_4 float v73; // ST2C_4 float v74; // ST30_4 float v75; // ST34_4 float v76; // ST38_4 float v77; // ST3C_4 float v78; // ST40_4 float v79; // ST2C_4 float v80; // ST30_4 float v81; // ST34_4 float v82; // ST38_4 float v83; // ST3C_4 float v84; // ST40_4 float v85; // ST2C_4 float v86; // ST30_4 float v87; // ST34_4 double v88; // st1 float v89; // ST2C_4 float v90; // ST38_4 float v91; // ST3C_4 float v92; // ST40_4 float v93; // ST2C_4 float v94; // ST30_4 float v95; // ST34_4 float v96; // ST38_4 float v97; // ST3C_4 float v98; // ST40_4 float v99; // ST2C_4 float v100; // ST30_4 float v101; // ST34_4 float v102; // ST38_4 float v103; // ST3C_4 float v104; // ST40_4 float v105; // ST2C_4 float v106; // ST30_4 float v107; // ST34_4 float v108; // ST2C_4 double v109; // st1 float v110; // ST30_4 float v111; // ST38_4 float v112; // ST3C_4 float v113; // ST40_4 float v114; // ST2C_4 float v115; // ST30_4 float v116; // ST34_4 double v117; // st1 float v118; // ST2C_4 float v119; // ST38_4 float v120; // ST3C_4 float v121; // ST40_4 float v122; // ST2C_4 float v123; // ST30_4 float v124; // ST34_4 _DWORD *v125; // eax int v126; // edi _DWORD *v127; // eax _DWORD *result; // eax float v129; // [esp+3Ch] [ebp-3Ch] float v130; // [esp+40h] [ebp-38h] float v131; // [esp+44h] [ebp-34h] float v132; // [esp+48h] [ebp-30h] float v133; // [esp+4Ch] [ebp-2Ch] float v134; // [esp+50h] [ebp-28h] float v135; // [esp+60h] [ebp-18h] float v136; // [esp+64h] [ebp-14h] float v137; // [esp+68h] [ebp-10h] float v138; // [esp+6Ch] [ebp-Ch] float v139; // [esp+70h] [ebp-8h] float v140; // [esp+74h] [ebp-4h] float v141; // [esp+80h] [ebp+8h] float v142; // [esp+80h] [ebp+8h] float v143; // [esp+80h] [ebp+8h] float v144; // [esp+80h] [ebp+8h] float v145; // [esp+80h] [ebp+8h] float v146; // [esp+80h] [ebp+8h] float v147; // [esp+80h] [ebp+8h] float v148; // [esp+84h] [ebp+Ch] float v149; // [esp+84h] [ebp+Ch] float v150; // [esp+84h] [ebp+Ch] int v151; // [esp+88h] [ebp+10h] float v152; // [esp+88h] [ebp+10h] float v153; // [esp+88h] [ebp+10h] float v154; // [esp+88h] [ebp+10h] v129 = *(float *)(a1 + 4); v130 = *(float *)(a1 + 8); v131 = *(float *)(a1 + 12); v132 = *(float *)(a1 + 20); v133 = *(float *)(a1 + 24); v151 = *(int *)(a3 + 48); v134 = *(float *)(a1 + 28); v141 = fabs(v129); v3 = v141; v142 = fabs(v130); if ( v142 > v3 ) { v6 = v131; } else { v143 = fabs(v131); v4 = v143 < v3; v5 = v143 == v3; v6 = v131; if ( v4 || v5 ) { v135 = -v130; v7 = v131; v136 = v129; goto LABEL_6; } } v135 = v129; v136 = v6; v7 = -v130; LABEL_6: v137 = v7; sub_4430B0(&v135); v8 = v131; v9 = v130; v10 = v136 * v131 - v137 * v130; v11 = v137 * v129 - v135 * v131; v12 = v135 * v130 - v136 * v129; v13 = v10 * *(float *)&v151; v14 = v11 * *(float *)&v151; v15 = v12 * *(float *)&v151; v135 = v135 * *(float *)&v151; v136 = v136 * *(float *)&v151; v16 = v129; v137 = v137 * *(float *)&v151; v17 = v13 * 0.05000000074505806; v18 = v14 * 0.05000000074505806; v19 = v15 * 0.05000000074505806; v20 = v135 * 0.05000000074505806; v21 = v136 * 0.05000000074505806; v22 = 0.05000000074505806 * v137; v23 = v16 * *(float *)&v151; v24 = v9 * *(float *)&v151; v25 = *(float *)&v151 * v8; v26 = v23 * 0.5; v27 = v24 * 0.5; v28 = 0.5 * v25; v144 = 1.0 - a2; v29 = v26 * v144; v30 = v27 * v144; v31 = v144 * v28; v32 = (float *)operator new(0x90u); v33 = (int)v32; v145 = v132 + v13; v152 = v133 + v14; v148 = v134 + v15; v34 = v135; v35 = v145 + v135; v36 = v136; v37 = v152 + v136; v38 = v137; v39 = v148 + v137; v40 = v29; v41 = v35 + v29; v42 = v30; v43 = v37 + v30; v44 = v31; v45 = v39 + v31; *v32 = v41; v32[1] = v43; v32[2] = v45; v46 = v145 - v34; v47 = v152 - v36; v48 = v148 - v38; v49 = v46 + v29; v32[3] = v49; v50 = v47 + v30; v32[4] = v50; v51 = v48 + v31; v32[5] = v51; v146 = v132 - v13; v153 = v133 - v14; v149 = v134 - v15; v52 = v146 - v34; v53 = v153 - v36; v54 = v149 - v38; v55 = v52 + v40; v32[6] = v55; v56 = v53 + v42; v32[7] = v56; v57 = v54 + v44; v32[8] = v57; v58 = v44; v59 = v34 + v146; v60 = v42; v61 = v36 + v153; v62 = v40; v63 = v38 + v149; v64 = v59 + v40; v32[9] = v64; v65 = v61 + v42; v32[10] = v65; v66 = v63 + v44; v32[11] = v66; v147 = v132 + v17; v154 = v133 + v18; v150 = v134 + v19; v67 = v20; v68 = v147 + v20; v69 = v21; v70 = v154 + v21; v71 = v22; v72 = v150 + v22; v73 = v68 + v62; v32[12] = v73; v74 = v70 + v60; v32[13] = v74; v75 = v72 + v58; v32[14] = v75; v76 = v147 - v67; v77 = v154 - v69; v78 = v150 - v71; v79 = v76 + v62; v32[15] = v79; v80 = v77 + v60; v32[16] = v80; v81 = v78 + v58; v32[17] = v81; v140 = v132 - v17; v139 = v133 - v18; v138 = v134 - v19; v82 = v140 - v67; v83 = v139 - v69; v84 = v138 - v71; v85 = v82 + v62; v32[18] = v85; v86 = v83 + v60; v32[19] = v86; v87 = v84 + v58; v88 = v140; v32[20] = v87; v89 = v88; v90 = v89 + v67; v91 = v139 + v69; v92 = v138 + v71; v93 = v62 + v90; v32[21] = v93; v94 = v60 + v91; v32[22] = v94; v95 = v58 + v92; v32[23] = v95; v96 = v147 + v67; v97 = v154 + v69; v98 = v150 + v71; v99 = v96 + v26; v32[24] = v99; v100 = v97 + v27; v32[25] = v100; v101 = v98 + v28; v32[26] = v101; v102 = v147 - v67; v103 = v154 - v69; v104 = v150 - v71; v105 = v102 + v26; v32[27] = v105; v106 = v103 + v27; v107 = v104 + v28; v108 = v140; v109 = v139; v32[28] = v106; v110 = v109; v32[29] = v107; v111 = v108 - v67; v112 = v110 - v69; v113 = v138 - v71; v114 = v111 + v26; v32[30] = v114; v115 = v112 + v27; v32[31] = v115; v116 = v113 + v28; v117 = v140; v32[32] = v116; v118 = v117; v119 = v67 + v118; v120 = v69 + v139; v121 = v71 + v138; v122 = v26 + v119; v32[33] = v122; v123 = v27 + v120; v32[34] = v123; v124 = v28 + v121; v32[35] = v124; v125 = operator new(0x24u); v126 = (int)v125; *v125 = 196608; v125[1] = 196609; v125[2] = 65538; v125[3] = 655368; v125[4] = 655364; v125[5] = 262150; v125[6] = 720905; v125[7] = 720901; v125[8] = 327687; v127 = operator new(0xC4u); if ( v127 ) result = sub_866D90(v127, 12, v33, 0, 0, 0, 0, 0, 6, v126); else result = 0; return result; } //----- (00950B40) -------------------------------------------------------- _DWORD *__cdecl sub_950B40(int a1, float a2) { float v2; // ST50_4 float v3; // ST54_4 float v4; // ST58_4 float *v5; // eax int v6; // edi double v7; // st7 float v8; // ST2C_4 float v9; // ST30_4 float v10; // ST34_4 double v11; // st6 float v12; // ST38_4 float v13; // ST3C_4 float v14; // ST40_4 double v15; // st5 float v16; // ST50_4 float v17; // ST54_4 float v18; // ST58_4 float v19; // ST44_4 float v20; // ST48_4 float v21; // ST4C_4 float v22; // ST50_4 float v23; // ST54_4 float v24; // ST58_4 float v25; // ST38_4 float v26; // ST3C_4 float v27; // ST40_4 float v28; // ST50_4 float v29; // ST54_4 float v30; // ST58_4 float v31; // ST44_4 float v32; // ST48_4 float v33; // ST4C_4 float v34; // ST2C_4 float v35; // ST30_4 float v36; // ST34_4 float v37; // ST38_4 float v38; // ST3C_4 float v39; // ST40_4 float v40; // ST2C_4 float v41; // ST30_4 float v42; // ST34_4 float v43; // ST38_4 float v44; // ST3C_4 float v45; // ST40_4 float v46; // ST50_4 float v47; // ST54_4 float v48; // ST58_4 float v49; // ST44_4 float v50; // ST48_4 float v51; // ST4C_4 float v52; // ST2C_4 float v53; // ST30_4 float v54; // ST34_4 float v55; // ST38_4 float v56; // ST3C_4 float v57; // ST40_4 float v58; // ST2C_4 float v59; // ST30_4 float v60; // ST34_4 float v61; // ST38_4 float v62; // ST3C_4 float v63; // ST40_4 float v64; // ST50_4 float v65; // ST54_4 float v66; // ST58_4 float v67; // ST44_4 float v68; // ST48_4 float v69; // ST4C_4 float v70; // ST2C_4 float v71; // ST30_4 float v72; // ST34_4 float v73; // ST38_4 float v74; // ST3C_4 float v75; // ST40_4 float v76; // ST2C_4 float v77; // ST30_4 float v78; // ST34_4 float v79; // ST38_4 float v80; // ST3C_4 float v81; // ST40_4 float v82; // ST50_4 float v83; // ST54_4 float v84; // ST58_4 float v85; // ST44_4 float v86; // ST48_4 float v87; // ST4C_4 float v88; // ST2C_4 float v89; // ST30_4 float v90; // ST34_4 float v91; // ST38_4 float v92; // ST3C_4 float v93; // ST40_4 float v94; // ST2C_4 float v95; // ST30_4 float v96; // ST34_4 float v97; // ST38_4 float v98; // ST3C_4 float v99; // ST40_4 float v100; // ST50_4 float v101; // ST54_4 float v102; // ST58_4 float v103; // ST44_4 float v104; // ST48_4 float v105; // ST4C_4 float v106; // ST2C_4 float v107; // ST30_4 float v108; // ST34_4 float v109; // ST38_4 float v110; // ST3C_4 float v111; // ST40_4 float v112; // ST2C_4 float v113; // ST30_4 float v114; // ST34_4 float v115; // ST38_4 float v116; // ST3C_4 float v117; // ST40_4 float v118; // ST50_4 float v119; // ST54_4 float v120; // ST58_4 float v121; // ST44_4 float v122; // ST48_4 float v123; // ST4C_4 float v124; // ST2C_4 float v125; // ST30_4 float v126; // ST34_4 float v127; // ST38_4 float v128; // ST3C_4 float v129; // ST40_4 float v130; // ST2C_4 float v131; // ST30_4 float v132; // ST34_4 float v133; // ST38_4 float v134; // ST3C_4 float v135; // ST40_4 float v136; // ST50_4 float v137; // ST54_4 float v138; // ST58_4 float v139; // ST44_4 float v140; // ST48_4 float v141; // ST4C_4 float v142; // ST2C_4 float v143; // ST30_4 float v144; // ST34_4 float v145; // ST38_4 float v146; // ST3C_4 float v147; // ST40_4 float v148; // ST2C_4 float v149; // ST30_4 float v150; // ST34_4 float v151; // ST38_4 float v152; // ST3C_4 float v153; // ST40_4 _DWORD *v154; // eax int v155; // esi _DWORD *v156; // eax _DWORD *result; // eax v2 = *(float *)(a1 + 48) * a2; v3 = *(float *)(a1 + 52) * a2; v4 = a2 * *(float *)(a1 + 56); v5 = (float *)operator new(0x60u); v6 = (int)v5; v7 = v4; v8 = *(float *)(a1 + 36) * v4; v9 = *(float *)(a1 + 40) * v4; v10 = *(float *)(a1 + 44) * v4; v11 = v3; v12 = *(float *)(a1 + 24) * v3; v13 = *(float *)(a1 + 28) * v3; v14 = *(float *)(a1 + 32) * v3; v15 = v2; v16 = *(float *)(a1 + 12) * v2; v17 = *(float *)(a1 + 16) * v15; v18 = *(float *)(a1 + 20) * v15; v19 = *(float *)a1 + v16; v20 = v17 + *(float *)(a1 + 4); v21 = v18 + *(float *)(a1 + 8); v22 = v19 - v12; v23 = v20 - v13; v24 = v21 - v14; v25 = v22 - v8; v26 = v23 - v9; v27 = v24 - v10; *v5 = v25; v5[1] = v26; v5[2] = v27; v28 = *(float *)(a1 + 36) * v7; v29 = *(float *)(a1 + 40) * v7; v30 = *(float *)(a1 + 44) * v7; v31 = *(float *)(a1 + 24) * v11; v32 = *(float *)(a1 + 28) * v11; v33 = *(float *)(a1 + 32) * v11; v34 = *(float *)(a1 + 12) * v15; v35 = *(float *)(a1 + 16) * v15; v36 = *(float *)(a1 + 20) * v15; v37 = *(float *)a1 + v34; v38 = v35 + *(float *)(a1 + 4); v39 = v36 + *(float *)(a1 + 8); v40 = v37 + v31; v41 = v38 + v32; v42 = v39 + v33; v43 = v40 - v28; v5[3] = v43; v44 = v41 - v29; v5[4] = v44; v45 = v42 - v30; v5[5] = v45; v46 = *(float *)(a1 + 36) * v7; v47 = *(float *)(a1 + 40) * v7; v48 = *(float *)(a1 + 44) * v7; v49 = *(float *)(a1 + 24) * v11; v50 = *(float *)(a1 + 28) * v11; v51 = *(float *)(a1 + 32) * v11; v52 = *(float *)(a1 + 12) * v15; v53 = *(float *)(a1 + 16) * v15; v54 = *(float *)(a1 + 20) * v15; v55 = *(float *)a1 - v52; v56 = *(float *)(a1 + 4) - v53; v57 = *(float *)(a1 + 8) - v54; v58 = v55 + v49; v59 = v56 + v50; v60 = v57 + v51; v61 = v58 - v46; v5[6] = v61; v62 = v59 - v47; v5[7] = v62; v63 = v60 - v48; v5[8] = v63; v64 = *(float *)(a1 + 36) * v7; v65 = *(float *)(a1 + 40) * v7; v66 = *(float *)(a1 + 44) * v7; v67 = *(float *)(a1 + 24) * v11; v68 = *(float *)(a1 + 28) * v11; v69 = *(float *)(a1 + 32) * v11; v70 = *(float *)(a1 + 12) * v15; v71 = *(float *)(a1 + 16) * v15; v72 = *(float *)(a1 + 20) * v15; v73 = *(float *)a1 - v70; v74 = *(float *)(a1 + 4) - v71; v75 = *(float *)(a1 + 8) - v72; v76 = v73 - v67; v77 = v74 - v68; v78 = v75 - v69; v79 = v76 - v64; v5[9] = v79; v80 = v77 - v65; v5[10] = v80; v81 = v78 - v66; v5[11] = v81; v82 = *(float *)(a1 + 36) * v7; v83 = *(float *)(a1 + 40) * v7; v84 = *(float *)(a1 + 44) * v7; v85 = *(float *)(a1 + 24) * v11; v86 = *(float *)(a1 + 28) * v11; v87 = *(float *)(a1 + 32) * v11; v88 = *(float *)(a1 + 12) * v15; v89 = *(float *)(a1 + 16) * v15; v90 = *(float *)(a1 + 20) * v15; v91 = v88 + *(float *)a1; v92 = v89 + *(float *)(a1 + 4); v93 = v90 + *(float *)(a1 + 8); v94 = v91 - v85; v95 = v92 - v86; v96 = v93 - v87; v97 = v94 + v82; v5[12] = v97; v98 = v95 + v83; v5[13] = v98; v99 = v96 + v84; v5[14] = v99; v100 = *(float *)(a1 + 36) * v7; v101 = *(float *)(a1 + 40) * v7; v102 = *(float *)(a1 + 44) * v7; v103 = *(float *)(a1 + 24) * v11; v104 = *(float *)(a1 + 28) * v11; v105 = *(float *)(a1 + 32) * v11; v106 = *(float *)(a1 + 12) * v15; v107 = *(float *)(a1 + 16) * v15; v108 = *(float *)(a1 + 20) * v15; v109 = v106 + *(float *)a1; v110 = v107 + *(float *)(a1 + 4); v111 = v108 + *(float *)(a1 + 8); v112 = v109 + v103; v113 = v110 + v104; v114 = v111 + v105; v115 = v112 + v100; v5[15] = v115; v116 = v113 + v101; v5[16] = v116; v117 = v114 + v102; v5[17] = v117; v118 = *(float *)(a1 + 36) * v7; v119 = *(float *)(a1 + 40) * v7; v120 = *(float *)(a1 + 44) * v7; v121 = *(float *)(a1 + 24) * v11; v122 = *(float *)(a1 + 28) * v11; v123 = *(float *)(a1 + 32) * v11; v124 = *(float *)(a1 + 12) * v15; v125 = *(float *)(a1 + 16) * v15; v126 = *(float *)(a1 + 20) * v15; v127 = *(float *)a1 - v124; v128 = *(float *)(a1 + 4) - v125; v129 = *(float *)(a1 + 8) - v126; v130 = v127 + v121; v131 = v128 + v122; v132 = v129 + v123; v133 = v130 + v118; v5[18] = v133; v134 = v131 + v119; v5[19] = v134; v135 = v132 + v120; v5[20] = v135; v136 = *(float *)(a1 + 36) * v7; v137 = *(float *)(a1 + 40) * v7; v138 = v7 * *(float *)(a1 + 44); v139 = *(float *)(a1 + 24) * v11; v140 = *(float *)(a1 + 28) * v11; v141 = v11 * *(float *)(a1 + 32); v142 = *(float *)(a1 + 12) * v15; v143 = *(float *)(a1 + 16) * v15; v144 = v15 * *(float *)(a1 + 20); v145 = *(float *)a1 - v142; v146 = *(float *)(a1 + 4) - v143; v147 = *(float *)(a1 + 8) - v144; v148 = v145 - v139; v149 = v146 - v140; v150 = v147 - v141; v151 = v148 + v136; v5[21] = v151; v152 = v149 + v137; v5[22] = v152; v153 = v150 + v138; v5[23] = v153; v154 = operator new(0x48u); v155 = (int)v154; *v154 = 131075; v154[1] = 196609; v154[2] = 1; v154[3] = 0x10000; v154[4] = 5; v154[5] = 262149; v154[6] = 327684; v154[7] = 262150; v154[8] = 458758; v154[9] = 393223; v154[10] = 458754; v154[11] = 196610; v154[12] = 131073; v154[13] = 65542; v154[14] = 327686; v154[15] = 0x40000; v154[16] = 7; v154[17] = 196615; v156 = operator new(0xC4u); if ( v156 ) result = sub_866D90(v156, 8, v6, 0, 0, 0, 0, 0, 12, v155); else result = 0; return result; } //----- (00951190) -------------------------------------------------------- _DWORD *__cdecl sub_951190(int a1, float a2) { float v2; // ST4C_4 float v3; // ST6C_4 float v4; // ST6C_4 double v5; // st7 float v6; // ST6C_4 char *v7; // ebx float *v8; // edi int v9; // esi int v10; // edx int v11; // eax unsigned __int16 *v12; // eax _WORD *v13; // esi float *v14; // edi unsigned __int16 v15; // ST30_2 unsigned __int16 v16; // ST8C_2 float *v17; // ebx __int16 v18; // ST38_2 float *v19; // ST34_4 float *v20; // ecx float v21; // ST7C_4 float v22; // ST80_4 double v23; // st7 float v24; // ST84_4 float *v25; // ST5C_4 float *v26; // ecx float v27; // ST70_4 float v28; // ST74_4 double v29; // st7 float v30; // ST78_4 float v31; // ST50_4 float v32; // ST54_4 double v33; // st7 float v34; // ST58_4 __int16 v35; // ax unsigned int v36; // esi double v37; // st7 double v38; // st6 float *v39; // eax double v40; // st5 unsigned int v41; // edi double v42; // st4 unsigned int v43; // edx float v44; // ST90_4 float v45; // ST70_4 float v46; // ST74_4 float v47; // ST78_4 float v48; // ST90_4 float v49; // ST8C_4 float v50; // ST88_4 float v51; // ST7C_4 float v52; // ST80_4 float v53; // ST84_4 float v54; // ST90_4 float v55; // ST70_4 float v56; // ST74_4 float v57; // ST78_4 float v58; // ST90_4 float v59; // ST8C_4 float v60; // ST88_4 float v61; // ST7C_4 float v62; // ST80_4 float v63; // ST84_4 float v64; // ST90_4 double v65; // st2 float v66; // ST70_4 float v67; // ST74_4 float v68; // ST78_4 float v69; // ST90_4 float v70; // ST8C_4 float v71; // ST88_4 float v72; // ST7C_4 float v73; // ST80_4 float v74; // ST84_4 float v75; // ST90_4 float v76; // ST70_4 float v77; // ST74_4 float v78; // ST78_4 float v79; // ST90_4 float v80; // ST8C_4 float v81; // ST88_4 float v82; // ST7C_4 float v83; // ST80_4 float v84; // ST84_4 int v85; // ecx float v86; // ST90_4 float v87; // ST70_4 float v88; // ST74_4 float v89; // ST78_4 float v90; // ST90_4 float v91; // ST8C_4 float v92; // ST88_4 float v93; // ST7C_4 float v94; // ST80_4 float v95; // ST84_4 _DWORD *v96; // eax _DWORD *result; // eax int v98; // [esp+Ch] [ebp-164h] float v99; // [esp+10h] [ebp-160h] float v100; // [esp+14h] [ebp-15Ch] float v101; // [esp+18h] [ebp-158h] unsigned __int16 *Dst; // [esp+34h] [ebp-13Ch] int v103; // [esp+38h] [ebp-138h] _WORD *v104; // [esp+3Ch] [ebp-134h] signed int v105; // [esp+58h] [ebp-118h] signed int v106; // [esp+5Ch] [ebp-114h] signed int v107; // [esp+60h] [ebp-110h] float v108; // [esp+64h] [ebp-10Ch] float v109; // [esp+68h] [ebp-108h] float v110; // [esp+6Ch] [ebp-104h] float v111; // [esp+70h] [ebp-100h] float v112; // [esp+74h] [ebp-FCh] float v113; // [esp+78h] [ebp-F8h] float v114; // [esp+7Ch] [ebp-F4h] float v115; // [esp+80h] [ebp-F0h] float v116; // [esp+84h] [ebp-ECh] float v117; // [esp+88h] [ebp-E8h] float v118; // [esp+8Ch] [ebp-E4h] float v119; // [esp+90h] [ebp-E0h] float v120; // [esp+94h] [ebp-DCh] float v121; // [esp+98h] [ebp-D8h] float v122; // [esp+9Ch] [ebp-D4h] float v123; // [esp+A0h] [ebp-D0h] float v124; // [esp+A4h] [ebp-CCh] float v125; // [esp+A8h] [ebp-C8h] float v126; // [esp+ACh] [ebp-C4h] float v127; // [esp+B0h] [ebp-C0h] float v128; // [esp+B4h] [ebp-BCh] float v129; // [esp+B8h] [ebp-B8h] float v130; // [esp+BCh] [ebp-B4h] float v131; // [esp+C0h] [ebp-B0h] float v132; // [esp+C4h] [ebp-ACh] float v133; // [esp+C8h] [ebp-A8h] float v134; // [esp+CCh] [ebp-A4h] float v135; // [esp+D0h] [ebp-A0h] float v136; // [esp+D4h] [ebp-9Ch] float v137; // [esp+D8h] [ebp-98h] float v138; // [esp+DCh] [ebp-94h] float v139; // [esp+E0h] [ebp-90h] float v140; // [esp+E4h] [ebp-8Ch] float v141; // [esp+E8h] [ebp-88h] float v142; // [esp+ECh] [ebp-84h] float v143; // [esp+F0h] [ebp-80h] int Src; // [esp+F4h] [ebp-7Ch] int v145; // [esp+F8h] [ebp-78h] int v146; // [esp+FCh] [ebp-74h] int v147; // [esp+100h] [ebp-70h] int v148; // [esp+104h] [ebp-6Ch] int v149; // [esp+108h] [ebp-68h] int v150; // [esp+10Ch] [ebp-64h] int v151; // [esp+110h] [ebp-60h] int v152; // [esp+114h] [ebp-5Ch] int v153; // [esp+118h] [ebp-58h] int v154; // [esp+11Ch] [ebp-54h] int v155; // [esp+120h] [ebp-50h] int v156; // [esp+124h] [ebp-4Ch] int v157; // [esp+128h] [ebp-48h] int v158; // [esp+12Ch] [ebp-44h] int v159; // [esp+130h] [ebp-40h] int v160; // [esp+134h] [ebp-3Ch] int v161; // [esp+138h] [ebp-38h] int v162; // [esp+13Ch] [ebp-34h] int v163; // [esp+140h] [ebp-30h] int v164; // [esp+144h] [ebp-2Ch] int v165; // [esp+148h] [ebp-28h] int v166; // [esp+14Ch] [ebp-24h] int v167; // [esp+150h] [ebp-20h] int v168; // [esp+154h] [ebp-1Ch] int v169; // [esp+158h] [ebp-18h] int v170; // [esp+15Ch] [ebp-14h] int v171; // [esp+160h] [ebp-10h] int v172; // [esp+164h] [ebp-Ch] int v173; // [esp+168h] [ebp-8h] v3 = sqrt(5.0); v99 = *(float *)a1; v100 = *(float *)(a1 + 4); v101 = *(float *)(a1 + 8); Src = 0x80000; v4 = (v3 + 1.0) * 0.5; v145 = 4; v5 = v4; v146 = 655365; v108 = v4; v147 = 262146; v148 = 131081; v109 = 1.0; v149 = 327691; v150 = 393217; v110 = 0.0; v151 = 65544; v152 = 458762; v153 = 589827; v6 = -v4; v154 = 196614; v111 = v6; v112 = 1.0; v113 = 0.0; v114 = v5; v115 = -1.0; v118 = -1.0; v126 = -1.0; v129 = -1.0; v140 = -1.0; v143 = -1.0; v116 = 0.0; v119 = 0.0; v121 = 0.0; v124 = 0.0; v127 = 0.0; v130 = 0.0; v132 = 0.0; v135 = 0.0; v138 = 0.0; v141 = 0.0; v117 = v6; v125 = v6; v131 = v6; v136 = v6; v142 = v6; v120 = 1.0; v123 = 1.0; v134 = 1.0; v137 = 1.0; v122 = v5; v128 = v5; v133 = v5; v139 = v5; v155 = 720903; v156 = 655360; v157 = 65544; v158 = 655368; v159 = 589826; v160 = 196619; v161 = 589835; v162 = 131076; v163 = 327680; v164 = 0x20000; v165 = 65542; v166 = 458755; v167 = 65539; v168 = 393224; v169 = 589828; v170 = 393220; v171 = 327690; v172 = 720903; v173 = 327687; v105 = 12; v7 = (char *)operator new(0x360u); v103 = (int)v7; Dst = (unsigned __int16 *)operator new(0x1E0u); v8 = &v108; v104 = operator new(0x1E0u); v9 = v7 - (char *)&v108; v106 = 12; do { sub_4430B0(v8); v10 = *((_DWORD *)v8 + 1); v11 = *((_DWORD *)v8 + 2); *(float *)((char *)v8 + v9) = *v8; *(_DWORD *)((char *)v8 + v9 + 4) = v10; *(_DWORD *)((char *)v8 + v9 + 8) = v11; v8 += 3; --v106; } while ( v106 ); memcpy_s(Dst, 0x1E0u, &Src, 0x1E0u); v12 = Dst; v13 = v104; v14 = (float *)(v7 + 168); v107 = 20; while ( 1 ) { v98 = (int)(v12 + 3); v15 = v12[1]; v16 = v12[2]; v17 = (float *)(v103 + 12 * v15); v18 = *v12; v19 = (float *)(v103 + 12 * *v12); v20 = v14 - 6; v21 = *v17 + *v19; v22 = v17[1] + v19[1]; v23 = v19[2] + v17[2]; *v20 = v21; v20[1] = v22; v24 = v23; v20[2] = v24; sub_4430B0(v14 - 6); v25 = (float *)(v103 + 12 * v16); v26 = v14 - 3; v27 = *v17 + *v25; v28 = v25[1] + v17[1]; v29 = v25[2] + v17[2]; *v26 = v27; v26[1] = v28; v30 = v29; v26[2] = v30; sub_4430B0(v14 - 3); v31 = *v19 + *v25; v32 = v25[1] + v19[1]; v33 = v19[2] + v25[2]; *v14 = v31; v14[1] = v32; v34 = v33; v14[2] = v34; sub_4430B0(v14); v35 = v105; *v13 = v18; v105 += 3; v13[1] = v35; v13[2] = v35 + 2; v13[3] = v15; v13[4] = v35 + 1; v13[5] = v35; v13[6] = v16; v13[7] = v35 + 2; v13[8] = v35 + 1; v13[9] = v35; v13[10] = v35 + 1; v13[11] = v35 + 2; v13 += 12; v14 += 9; if ( !--v107 ) break; v12 = (unsigned __int16 *)v98; } v36 = v105; v2 = a2 * 1.049999952316284; v37 = v2; v38 = v101; v39 = (float *)v103; v40 = v100; v41 = 0; v42 = v99; if ( v105 >= 4 ) { v43 = ((unsigned int)(v105 - 4) >> 2) + 1; v41 = 4 * v43; do { v44 = *(float *)(a1 + 12); v45 = *v39 * v44; v46 = v39[1] * v44; v47 = v44 * v39[2]; v48 = v45 * v37; v49 = v46 * v37; v50 = v47 * v37; v51 = v48 + v42; *v39 = v51; v52 = v40 + v49; v39[1] = v52; v53 = v38 + v50; v39[2] = v53; v54 = *(float *)(a1 + 12); v55 = v39[3] * v54; v56 = v39[4] * v54; v57 = v54 * v39[5]; v58 = v55 * v37; v59 = v56 * v37; v60 = v57 * v37; v61 = v58 + v42; v39[3] = v61; v62 = v40 + v59; v39[4] = v62; v63 = v38 + v60; v39[5] = v63; v64 = *(float *)(a1 + 12); v65 = v39[6] * v64; v39 += 12; --v43; v66 = v65; v67 = *(v39 - 5) * v64; v68 = v64 * *(v39 - 4); v69 = v66 * v37; v70 = v67 * v37; v71 = v68 * v37; v72 = v69 + v42; *(v39 - 6) = v72; v73 = v40 + v70; *(v39 - 5) = v73; v74 = v38 + v71; *(v39 - 4) = v74; v75 = *(float *)(a1 + 12); v76 = v75 * *(v39 - 3); v77 = *(v39 - 2) * v75; v78 = v75 * *(v39 - 1); v79 = v76 * v37; v80 = v77 * v37; v81 = v78 * v37; v82 = v79 + v42; *(v39 - 3) = v82; v83 = v40 + v80; *(v39 - 2) = v83; v84 = v38 + v81; *(v39 - 1) = v84; } while ( v43 ); } if ( v41 < v36 ) { v85 = v36 - v41; do { v39 += 3; --v85; v86 = *(float *)(a1 + 12); v87 = *(v39 - 3) * v86; v88 = *(v39 - 2) * v86; v89 = v86 * *(v39 - 1); v90 = v87 * v37; v91 = v88 * v37; v92 = v89 * v37; v93 = v90 + v42; *(v39 - 3) = v93; v94 = v40 + v91; *(v39 - 2) = v94; v95 = v38 + v92; *(v39 - 1) = v95; } while ( v85 ); } operator delete(Dst); v96 = operator new(0xC4u); if ( v96 ) result = sub_866D90(v96, v36, v103, 0, 0, 0, 0, 0, 80, (int)v104); else result = 0; return result; } //----- (00951A70) -------------------------------------------------------- _DWORD *__cdecl sub_951A70(int a1, float a2) { double v2; // st7 float *v3; // esi float v4; // eax float v5; // ecx float v6; // edx double v7; // st6 int v8; // eax float v9; // ecx float v10; // edx float v11; // ST28_4 _DWORD *result; // eax float v13; // edx float v14; // eax double v15; // st4 double v16; // st4 double v17; // st7 float *v18; // ebx double v19; // st6 double v20; // st5 double v21; // st4 double v22; // st4 double v23; // st7 double v24; // st7 double v25; // st7 double v26; // st6 double v27; // st5 double v28; // st7 float *v29; // esi unsigned int v30; // edi double v31; // st7 double v32; // st5 double v33; // st6 float v34; // ST34_4 double v35; // st4 float v36; // ST44_4 double v37; // st3 float v38; // ST48_4 float v39; // ST4C_4 float v40; // ST5C_4 float v41; // ST60_4 float v42; // ST64_4 double v43; // st2 float v44; // ST50_4 double v45; // st2 double v46; // rt1 float v47; // ST54_4 double v48; // st3 float v49; // ST58_4 float v50; // eax unsigned int v51; // edx int v52; // ecx unsigned int v53; // edx int v54; // esi int v55; // edi _DWORD *v56; // eax float v57; // [esp+8h] [ebp-B4h] float v58; // [esp+10h] [ebp-ACh] float v59; // [esp+14h] [ebp-A8h] float v60; // [esp+18h] [ebp-A4h] float v61; // [esp+40h] [ebp-7Ch] float v62; // [esp+44h] [ebp-78h] float v63; // [esp+48h] [ebp-74h] int v64; // [esp+4Ch] [ebp-70h] float v65; // [esp+50h] [ebp-6Ch] float v66; // [esp+54h] [ebp-68h] float v67; // [esp+58h] [ebp-64h] float v68; // [esp+5Ch] [ebp-60h] float v69; // [esp+60h] [ebp-5Ch] float v70; // [esp+64h] [ebp-58h] float v71; // [esp+68h] [ebp-54h] float v72; // [esp+6Ch] [ebp-50h] float v73; // [esp+70h] [ebp-4Ch] float v74; // [esp+74h] [ebp-48h] float v75; // [esp+78h] [ebp-44h] float v76; // [esp+7Ch] [ebp-40h] float v77; // [esp+80h] [ebp-3Ch] float v78; // [esp+84h] [ebp-38h] float v79; // [esp+88h] [ebp-34h] float v80; // [esp+8Ch] [ebp-30h] float v81; // [esp+90h] [ebp-2Ch] float v82; // [esp+94h] [ebp-28h] float v83; // [esp+98h] [ebp-24h] float v84; // [esp+9Ch] [ebp-20h] float v85; // [esp+A0h] [ebp-1Ch] float v86; // [esp+A4h] [ebp-18h] float v87; // [esp+A8h] [ebp-14h] float v88; // [esp+ACh] [ebp-10h] float v89; // [esp+B0h] [ebp-Ch] float v90; // [esp+B4h] [ebp-8h] int v91; // [esp+B8h] [ebp-4h] float v92; // [esp+C4h] [ebp+8h] int v93; // [esp+C4h] [ebp+8h] float v94; // [esp+C8h] [ebp+Ch] float v95; // [esp+C8h] [ebp+Ch] float v96; // [esp+C8h] [ebp+Ch] float v97; // [esp+C8h] [ebp+Ch] float v98; // [esp+C8h] [ebp+Ch] float v99; // [esp+C8h] [ebp+Ch] v2 = a2; v3 = (float *)a1; v4 = *(float *)(a1 + 12); v5 = *(float *)(a1 + 16); v6 = *(float *)(a1 + 20); *(float *)&v91 = 1.049999952316284 * a2; v84 = v4; v7 = *(float *)(a1 + 24); v85 = v5; v86 = v6; v94 = v7 * *(float *)&v91; if ( *(float *)&dword_BA45C0 != v4 || *(float *)&dword_BA45C4 != v85 || *(float *)&dword_BA45C8 != v86 ) { v13 = *(float *)(a1 + 16); v14 = *(float *)(a1 + 20); v78 = *(float *)(a1 + 12); v79 = v13; v80 = v14; sub_4430B0(&v78); v92 = v78 * v94; v75 = v92; v68 = v79 * v94; v76 = v68; v90 = v94 * v80; v77 = v90; v81 = v92 + v84; v82 = v85 + v68; v83 = v90 + v86; v15 = *(float *)&v91; *(float *)&v91 = *(float *)&v91 - 1.0; v84 = v81 * *(float *)&v91; v85 = v82 * *(float *)&v91; v86 = *(float *)&v91 * v83; v75 = *v3 - v84; v76 = v3[1] - v85; v77 = v3[2] - v86; v81 = v3[3] * v15; v82 = v3[4] * v15; v83 = v15 * v3[5]; v84 = *v3 + v81; v85 = v82 + v3[1]; v86 = v83 + v3[2]; *(float *)&v91 = fabs(v78); v16 = *(float *)&v91; *(float *)&v91 = fabs(v79); if ( *(float *)&v91 > v16 || (*(float *)&v91 = fabs(v80), *(float *)&v91 > v16) ) { v69 = v78; v70 = v80; v17 = -v79; } else { v69 = -v79; v17 = v80; v70 = v78; } v71 = v17; sub_4430B0(&v69); v81 = v70 * v80 - v71 * v79; v82 = v71 * v78 - v80 * v69; v83 = v79 * v69 - v78 * v70; v81 = v81 * v94; v82 = v82 * v94; v83 = v83 * v94; v69 = v69 * v94; v70 = v70 * v94; v71 = v71 * v94; v18 = (float *)operator new(0x318u); *(float *)&v91 = COERCE_FLOAT(operator new(0x300u)); v19 = v68; v73 = v68; v20 = v90; v74 = v90; v87 = v75 - v92; v21 = v76; v18[192] = v87; v88 = v21 - v73; v22 = v77; v18[193] = v88; v89 = v22 - v74; v18[194] = v89; v88 = v19; v89 = v20; v72 = v92 + v84; v23 = v88; v18[195] = v72; v73 = v23 + v85; v24 = v89; v18[196] = v73; v74 = v24 + v86; v18[197] = v74; *(float *)&v93 = sqrt(0.5); v95 = *(float *)&v93 * v94; v25 = v95; v96 = v95 * v78; v26 = v96; v87 = v96; v97 = v25 * v79; v88 = v97; v27 = v25 * v80; v28 = v97; v98 = v27; v61 = v75 - v87; v62 = v76 - v88; v63 = v77 - v98; v87 = v26; v88 = v28; v89 = v98; v58 = v87 + v84; v29 = v18 + 96; v30 = 16; v59 = v88 + v85; v60 = v98 + v86; v57 = (flt_BA45B4 + flt_BA45B4) * 0.0625; v99 = 0.0; do { v90 = sin(v99); v72 = v90 * v69; v73 = v90 * v70; v74 = v90 * v71; v90 = cos(v99); v87 = v81 * v90; v88 = v82 * v90; v89 = v90 * v83; v78 = v87 + v72; v79 = v88 + v73; v80 = v89 + v74; v31 = v78; v90 = v78 * *(float *)&v93; v32 = v79; v68 = v79 * *(float *)&v93; v33 = v80; v34 = *(float *)&v93 * v80; v35 = v90; v36 = v90 + v61; v37 = v68; *(v29 - 96) = v36; v38 = v37 + v62; *(v29 - 95) = v38; v39 = v34 + v63; *(v29 - 94) = v39; v40 = v31 + v75; v41 = v32 + v76; v42 = v33 + v77; v43 = v31 + v84; *(v29 - 48) = v40; *(v29 - 47) = v41; v44 = v43; v45 = v85; *(v29 - 46) = v42; *v29 = v44; v46 = v37; v29 += 3; --v30; v47 = v32 + v45; v48 = v86; *(v29 - 2) = v47; v49 = v33 + v48; *(v29 - 1) = v49; v65 = v35 + v58; v29[45] = v65; v66 = v46 + v59; v29[46] = v66; v67 = v34 + v60; v29[47] = v67; v99 = v99 + v57; } while ( v30 ); v50 = *(float *)&v91; do { v51 = 0; do { v52 = v30 + 16 * v51; *(_WORD *)LODWORD(v50) = v52; *(_WORD *)(LODWORD(v50) + 2) = v52 + 1; *(_WORD *)(LODWORD(v50) + 4) = v52 + 17; *(_WORD *)(LODWORD(v50) + 6) = v52; *(_WORD *)(LODWORD(v50) + 8) = v52 + 17; *(_WORD *)(LODWORD(v50) + 10) = v52 + 16; ++v51; LODWORD(v50) += 12; } while ( v51 < 3 ); *(_WORD *)LODWORD(v50) = v30 + 1; *(_WORD *)(LODWORD(v50) + 2) = v30; *(_WORD *)(LODWORD(v50) + 4) = 64; *(_WORD *)(LODWORD(v50) + 6) = v30 + 48; *(_WORD *)(LODWORD(v50) + 8) = v30 + 49; *(_WORD *)(LODWORD(v50) + 10) = 65; ++v30; LODWORD(v50) += 12; } while ( v30 < 0xF ); v53 = 0; do { v54 = 16 * v53 + 15; *(_WORD *)LODWORD(v50) = v54; *(_WORD *)(LODWORD(v50) + 2) = 16 * v53; v55 = 16 * v53 + 16; *(_WORD *)(LODWORD(v50) + 4) = v55; *(_WORD *)(LODWORD(v50) + 6) = v54; *(_WORD *)(LODWORD(v50) + 8) = v55; *(_WORD *)(LODWORD(v50) + 10) = 16 * v53++ + 31; LODWORD(v50) += 12; } while ( v53 < 3 ); *(_DWORD *)LODWORD(v50) = 983040; *(_DWORD *)(LODWORD(v50) + 4) = 4128832; *(_DWORD *)(LODWORD(v50) + 8) = &loc_410030; v56 = operator new(0xC4u); if ( v56 ) result = sub_866D90(v56, 66, (int)v18, 0, 0, 0, 0, 0, 128, v91); else result = 0; } else { v8 = *(_DWORD *)a1; v9 = *(float *)(a1 + 4); v67 = v7 * *(float *)&v91; v10 = *(float *)(a1 + 8); v64 = v8; v11 = v2; v65 = v9; v66 = v10; result = sub_951190((int)&v64, v11); } return result; } // BA45B4: using guessed type float flt_BA45B4; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (00952100) -------------------------------------------------------- unsigned int __cdecl sub_952100(int a1, int a2, float a3) { unsigned int result; // eax unsigned int v4; // ebx int v5; // esi _DWORD *v6; // eax _DWORD *v7; // eax _DWORD *v8; // eax _DWORD *v9; // eax _DWORD *v10; // ebx unsigned int v11; // [esp+10h] [ebp-4h] result = *(_DWORD *)(a1 + 16); v4 = 0; v11 = 0; if ( result ) { if ( result <= 0 ) { v5 = 0; goto LABEL_5; } do { v5 = *(_DWORD *)(*(_DWORD *)(a1 + 8) + 4 * v4); LABEL_5: switch ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 12))(v5) ) { case 0: v8 = sub_951190(v5 + 4, a3); (*(void (__thiscall **)(int, _DWORD *, _DWORD))(*(_DWORD *)a2 + 116))(a2, v8, 0); break; case 1: v6 = sub_950B40(v5 + 4, a3); (*(void (__thiscall **)(int, _DWORD *, _DWORD))(*(_DWORD *)a2 + 116))(a2, v6, 0); break; case 2: v7 = sub_951A70(v5 + 32, a3); (*(void (__thiscall **)(int, _DWORD *, _DWORD))(*(_DWORD *)a2 + 116))(a2, v7, 0); break; case 4: v9 = operator new(0xE8u); if ( v9 ) v10 = sub_85A1C0(v9, 0); else v10 = 0; sub_952100(v5, (int)v10, a3); (*(void (__thiscall **)(int, _DWORD *, _DWORD))(*(_DWORD *)a2 + 116))(a2, v10, 0); v4 = v11; break; default: break; } result = *(_DWORD *)(a1 + 16); v11 = ++v4; } while ( v4 < result ); } return result; } //----- (00952220) -------------------------------------------------------- _DWORD *__cdecl sub_952220(int a1, int a2, float a3, int a4) { _DWORD *result; // eax _DWORD *v5; // eax _DWORD *v6; // esi _DWORD *v7; // eax _DWORD *v8; // ebx _DWORD *v9; // ST04_4 _DWORD *v10; // eax _DWORD *v11; // eax _DWORD *v12; // edi int v13; // eax _DWORD *v14; // eax int v15; // edi float *v16; // eax float *v17; // eax int v18; // ecx if ( !a1 ) return 0; v5 = operator new(0xE8u); if ( v5 ) v6 = sub_85A1C0(v5, 0); else v6 = 0; v7 = operator new(0x50u); if ( v7 ) v8 = sub_8339F0(v7, v6); else v8 = 0; v9 = (_DWORD *)v8[2]; v8[10] = 3; sub_834490(v9, 3); v8[9] = 3; switch ( (*(int (__thiscall **)(int))(*(_DWORD *)a1 + 12))(a1) ) { case 0: v10 = sub_951190(a1 + 4, a3); goto LABEL_15; case 1: v10 = sub_950B40(a1 + 4, a3); goto LABEL_15; case 2: v10 = sub_951A70(a1 + 32, a3); goto LABEL_15; case 4: sub_952100(a1, (int)v6, a3); goto LABEL_16; case 5: v10 = sub_950440(a1, a3, a4); LABEL_15: (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD))(*v6 + 116))(v6, v10, 0); LABEL_16: v11 = operator new(0x20u); v12 = v11; if ( v11 ) { sub_85B2B0(v11); *v12 = &NiWireframeProperty::`vftable'; *((_WORD *)v12 + 14) = 0; v13 = (int)v12; } else { v13 = 0; } *(_WORD *)(v13 + 28) |= 1u; sub_403700(v6, v13); v14 = operator new(0x28u); v15 = (int)v14; if ( v14 ) { sub_85B2B0(v14); *(_DWORD *)v15 = &NiVertexColorProperty::`vftable'; *(_WORD *)(v15 + 28) = 0; *(_DWORD *)(v15 + 32) = 0; *(_DWORD *)(v15 + 36) = 1; } else { v15 = 0; } *(_DWORD *)(v15 + 32) = 0; *(_DWORD *)(v15 + 36) = 0; sub_403700(v6, v15); v16 = (float *)operator new(0x60u); if ( v16 ) v17 = sub_85EBC0(v16); else v17 = 0; v17[17] = *(float *)a2; v17[18] = *(float *)(a2 + 4); v18 = *(_DWORD *)(a2 + 8); ++*((_DWORD *)v17 + 22); *((_DWORD *)v17 + 19) = v18; sub_403700(v6, (int)v17); result = v6; break; default: if ( v6 ) (*(void (__thiscall **)(_DWORD *, signed int))*v6)(v6, 1); result = 0; break; } return result; } // 9A8BBC: using guessed type void *NiVertexColorProperty::`vftable'; // A26B54: using guessed type void *NiWireframeProperty::`vftable'; //----- (00952400) -------------------------------------------------------- char __thiscall sub_952400(void *this, int a2) { void *v2; // esi char result; // al v2 = this; if ( (*(unsigned __int8 (__stdcall **)(int))(*(_DWORD *)this + 28))(a2) || (result = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v2 + 32))(v2, a2)) != 0 ) { result = 1; } return result; } //----- (00952440) -------------------------------------------------------- int __cdecl sub_952440(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8) { int result; // eax int v9; // ecx unsigned int v10; // edi int v11; // [esp+0h] [ebp-4h] int v12; // [esp+10h] [ebp+Ch] result = a2; if ( a2 ) { v9 = a1; v11 = a2; result = a8; do { if ( v9 ) { v12 = v9; do { v10 = *a7; ++a7; a4 += 2; *(_WORD *)(a4 - 2) = *(_WORD *)(a6 + 4) & ((unsigned __int8)((unsigned __int8)((unsigned __int8)((v10 & *(_DWORD *)(a8 + 4)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21)) >> *(_BYTE *)(a6 + 21)) << *(_BYTE *)(a6 + 17)) | *(_WORD *)a6 & ((unsigned __int8)((unsigned __int8)((unsigned __int8)((*(_DWORD *)a8 & v10) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20)) >> *(_BYTE *)(a6 + 20)) << *(_BYTE *)(a6 + 16)) | *(_WORD *)(a6 + 8) & ((unsigned __int8)((unsigned __int8)((unsigned __int8)((*(_DWORD *)(a8 + 8) & v10) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22)) >> *(_BYTE *)(a6 + 22)) << *(_BYTE *)(a6 + 18)) | *(_WORD *)(a6 + 12) & ((unsigned __int8)((unsigned __int8)((unsigned __int8)((v10 & *(_DWORD *)(a8 + 12)) >> *(_BYTE *)(a8 + 19)) << *(_BYTE *)(a8 + 23)) >> *(_BYTE *)(a6 + 23)) << *(_BYTE *)(a6 + 19)); --v12; } while ( v12 ); v9 = a1; } --v11; } while ( v11 ); } return result; } //----- (00952560) -------------------------------------------------------- int __cdecl sub_952560(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8) { return sub_952440(a1, a2, a3, a4, a5, a6, a7, a8); } //----- (00952570) -------------------------------------------------------- int __cdecl sub_952570(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // ecx unsigned __int8 *v9; // esi unsigned __int8 v10; // dl unsigned __int8 v11; // bl int v12; // esi int v13; // [esp+0h] [ebp-8h] int v14; // [esp+4h] [ebp-4h] int v15; // [esp+14h] [ebp+Ch] unsigned __int8 v16; // [esp+1Fh] [ebp+17h] v14 = a4; result = a2; if ( a2 ) { v8 = a1; v9 = a7; v13 = a2; result = a6; do { if ( v8 ) { v15 = v8; do { v10 = *v9; v11 = v9[1]; v12 = (int)(v9 + 1); v16 = *(_BYTE *)(v12 + 1); v9 = (unsigned __int8 *)(v12 + 2); v14 += 2; *(_WORD *)(v14 - 2) = *(_WORD *)(a6 + 4) & ((unsigned __int8)(v11 >> *(_BYTE *)(a6 + 21)) << *(_BYTE *)(a6 + 17)) | *(_WORD *)(a6 + 8) & ((unsigned __int8)(v16 >> *(_BYTE *)(a6 + 22)) << *(_BYTE *)(a6 + 18)) | *(_WORD *)a6 & ((unsigned __int8)(v10 >> *(_BYTE *)(a6 + 20)) << *(_BYTE *)(a6 + 16)) | *(_WORD *)(a6 + 12) & ((unsigned __int16)(0xFFu >> *(_BYTE *)(a6 + 23)) << *(_BYTE *)(a6 + 19)); --v15; } while ( v15 ); v8 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952650) -------------------------------------------------------- _BYTE *__cdecl sub_952650(int a1, int a2, rsize_t DstSize, void *Dst, int a5, int a6, void *Src) { _BYTE *result; // eax _BYTE *v8; // ecx int v9; // edx int v10; // esi result = (_BYTE *)a6; if ( *(_DWORD *)(a6 + 4) == 65280 ) { result = *(_BYTE **)a6; if ( *(_DWORD *)a6 == 16711680 ) { result = (_BYTE *)a2; if ( a2 ) { v8 = Src; v9 = a2; result = Dst; do { if ( a1 ) { v10 = a1; do { *result = v8[2]; result[1] = v8[1]; result[2] = *v8; result += 3; v8 += 3; --v10; } while ( v10 ); } --v9; } while ( v9 ); } } else if ( result == (_BYTE *)255 ) { result = (_BYTE *)memcpy_s(Dst, DstSize, Src, 3 * a2 * a1); } } return result; } //----- (009526E0) -------------------------------------------------------- int __cdecl sub_9526E0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // ecx unsigned __int8 *v9; // edx unsigned __int8 v10; // cl unsigned __int8 v11; // bl unsigned __int8 *v12; // edx unsigned __int8 v13; // bl int v14; // [esp+0h] [ebp-8h] int v15; // [esp+4h] [ebp-4h] int v16; // [esp+14h] [ebp+Ch] unsigned __int8 v17; // [esp+1Fh] [ebp+17h] v15 = a4; result = a2; if ( a2 ) { v8 = a1; v9 = a7; v14 = a2; result = a6; do { if ( v8 ) { v16 = v8; do { v10 = *v9; v11 = v9[1]; v12 = v9 + 2; v17 = v11; v13 = *v12; v9 = v12 + 1; v15 += 4; *(_DWORD *)(v15 - 4) = *(_DWORD *)(a6 + 12) & (0xFFu >> *(_BYTE *)(a6 + 23) << *(_BYTE *)(a6 + 19)) | *(_DWORD *)(a6 + 8) & ((unsigned int)v13 >> *(_BYTE *)(a6 + 22) << *(_BYTE *)(a6 + 18)) | *(_DWORD *)(a6 + 4) & ((unsigned int)v17 >> *(_BYTE *)(a6 + 21) << *(_BYTE *)(a6 + 17)) | *(_DWORD *)a6 & ((unsigned int)v10 >> *(_BYTE *)(a6 + 20) << *(_BYTE *)(a6 + 16)); --v16; } while ( v16 ); v8 = a1; } --v14; } while ( v14 ); } return result; } //----- (009527B0) -------------------------------------------------------- int __cdecl sub_9527B0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // edi unsigned __int8 *v9; // esi unsigned __int8 v10; // dl __int16 v11; // bx bool v12; // zf int v13; // [esp+4h] [ebp-8h] int v14; // [esp+8h] [ebp-4h] unsigned __int8 v15; // [esp+1Bh] [ebp+Fh] unsigned __int8 v16; // [esp+23h] [ebp+17h] result = a2; v8 = a4; if ( a2 ) { v9 = a7; v13 = a2; result = a6; do { if ( a1 ) { v14 = a1; do { v10 = *v9; v15 = v9[2]; v16 = v9[3]; v11 = (unsigned __int8)(v9[1] >> *(_BYTE *)(a6 + 21)); v9 += 4; v8 += 2; v12 = v14-- == 1; *(_WORD *)(v8 - 2) = *(_WORD *)(a6 + 8) & ((unsigned __int8)(v15 >> *(_BYTE *)(a6 + 22)) << *(_BYTE *)(a6 + 18)) | *(_WORD *)(a6 + 12) & ((unsigned __int8)(v16 >> *(_BYTE *)(a6 + 23)) << *(_BYTE *)(a6 + 19)) | *(_WORD *)a6 & ((unsigned __int8)(v10 >> *(_BYTE *)(a6 + 20)) << *(_BYTE *)(a6 + 16)) | *(_WORD *)(a6 + 4) & (v11 << *(_BYTE *)(a6 + 17)); } while ( !v12 ); } --v13; } while ( v13 ); } return result; } //----- (00952870) -------------------------------------------------------- _BYTE *__cdecl sub_952870(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, _BYTE *a7) { _BYTE *result; // eax _BYTE *v8; // ecx _BYTE *v9; // edx int v10; // esi _BYTE *v11; // ecx _BYTE *v12; // edx int v13; // esi result = (_BYTE *)a6; if ( *(_DWORD *)(a6 + 4) == 65280 ) { result = *(_BYTE **)a6; if ( *(_DWORD *)a6 == 16711680 ) { result = a2; if ( a2 ) { v8 = a7; v9 = a2; result = a4; do { if ( a1 ) { v10 = a1; do { *result = v8[2]; result[1] = v8[1]; result[2] = *v8; result += 3; v8 += 4; --v10; } while ( v10 ); } --v9; } while ( v9 ); } } else if ( result == (_BYTE *)255 ) { result = a2; if ( a2 ) { v11 = a7; v12 = a2; result = a4; do { if ( a1 ) { v13 = a1; do { *result = *v11; result[1] = v11[1]; result[2] = v11[2]; result += 3; v11 += 4; --v13; } while ( v13 ); } --v12; } while ( v12 ); } } } return result; } //----- (00952920) -------------------------------------------------------- int __cdecl sub_952920(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // ecx unsigned __int8 *v9; // edx unsigned __int8 v10; // cl unsigned __int8 v11; // bl unsigned __int8 *v12; // edx unsigned __int8 v13; // bl unsigned __int8 v14; // bl int v15; // [esp+0h] [ebp-Ch] int v16; // [esp+4h] [ebp-8h] int v17; // [esp+8h] [ebp-4h] unsigned __int8 v18; // [esp+1Bh] [ebp+Fh] unsigned __int8 v19; // [esp+23h] [ebp+17h] v17 = a4; result = a2; if ( a2 ) { v8 = a1; v9 = a7; v15 = a2; result = a6; do { if ( v8 ) { v16 = v8; do { v10 = *v9; v11 = v9[1]; v12 = v9 + 2; v18 = v11; v13 = *v12++; v19 = v13; v14 = *v12; v9 = v12 + 1; v17 += 4; *(_DWORD *)(v17 - 4) = *(_DWORD *)(a6 + 12) & ((unsigned int)v14 >> *(_BYTE *)(a6 + 23) << *(_BYTE *)(a6 + 19)) | *(_DWORD *)(a6 + 4) & ((unsigned int)v18 >> *(_BYTE *)(a6 + 21) << *(_BYTE *)(a6 + 17)) | *(_DWORD *)(a6 + 8) & ((unsigned int)v19 >> *(_BYTE *)(a6 + 22) << *(_BYTE *)(a6 + 18)) | *(_DWORD *)a6 & ((unsigned int)v10 >> *(_BYTE *)(a6 + 20) << *(_BYTE *)(a6 + 16)); --v16; } while ( v16 ); v8 = a1; } --v15; } while ( v15 ); } return result; } //----- (00952A00) -------------------------------------------------------- int __cdecl sub_952A00(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8) { int result; // eax unsigned __int16 *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((*(_DWORD *)a8 & (unsigned int)*v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 3; ++v9; *(_BYTE *)(v11 - 3) = v12; *(_BYTE *)(v11 - 2) = (unsigned __int8)((*(_DWORD *)(a8 + 4) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); --v10; *(_BYTE *)(v11 - 1) = (unsigned __int8)((*(_DWORD *)(a8 + 8) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952A80) -------------------------------------------------------- int __cdecl sub_952A80(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8) { int result; // eax unsigned __int16 *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((*(_DWORD *)a8 & (unsigned int)*v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 4; ++v9; *(_BYTE *)(v11 - 4) = v12; *(_BYTE *)(v11 - 3) = (unsigned __int8)((*(_DWORD *)(a8 + 4) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); *(_BYTE *)(v11 - 2) = (unsigned __int8)((*(_DWORD *)(a8 + 8) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); --v10; *(_BYTE *)(v11 - 1) = (unsigned __int8)((*(_DWORD *)(a8 + 12) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 19)) << *(_BYTE *)(a8 + 23); } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952B10) -------------------------------------------------------- int __cdecl sub_952B10(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int16 *a7, int a8) { int result; // eax unsigned __int16 *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((*(_DWORD *)a8 & (unsigned int)*v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 4; ++v9; *(_BYTE *)(v11 - 4) = v12; *(_BYTE *)(v11 - 3) = (unsigned __int8)((*(_DWORD *)(a8 + 4) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); --v10; *(_BYTE *)(v11 - 2) = (unsigned __int8)((*(_DWORD *)(a8 + 8) & (unsigned int)*(v9 - 1)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); *(_BYTE *)(v11 - 1) = -1; } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952B90) -------------------------------------------------------- _BYTE *__cdecl sub_952B90(int a1, int a2, rsize_t DstSize, void *Dst, int a5, int a6, void *Src, int a8) { _BYTE *result; // eax _BYTE *v9; // ecx int v10; // edx int v11; // esi result = (_BYTE *)a8; if ( *(_DWORD *)(a8 + 4) == 65280 ) { result = *(_BYTE **)a8; if ( *(_DWORD *)a8 == 16711680 ) { result = (_BYTE *)a2; if ( a2 ) { v9 = Src; v10 = a2; result = Dst; do { if ( a1 ) { v11 = a1; do { *result = v9[2]; result[1] = v9[1]; result[2] = *v9; result += 3; v9 += 3; --v11; } while ( v11 ); } --v10; } while ( v10 ); } } else if ( result == (_BYTE *)255 ) { result = (_BYTE *)memcpy_s(Dst, DstSize, Src, 3 * a2 * a1); } } return result; } //----- (00952C20) -------------------------------------------------------- _BYTE *__cdecl sub_952C20(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, _BYTE *a7, _DWORD *a8) { _BYTE *result; // eax _BYTE *v9; // ecx _BYTE *v10; // edx int v11; // esi _BYTE *v12; // ecx _BYTE *v13; // edx int v14; // esi result = a8; if ( a8[1] == 65280 ) { result = a2; if ( *a8 == 16711680 ) { if ( a2 ) { v9 = a7; v10 = a2; result = a4; do { if ( a1 ) { v11 = a1; do { *result = v9[2]; result[1] = v9[1]; result[2] = *v9; result[3] = -1; result += 4; v9 += 3; --v11; } while ( v11 ); } --v10; } while ( v10 ); } } else if ( a2 ) { v12 = a7; v13 = a2; result = a4; do { if ( a1 ) { v14 = a1; do { *result = *v12; result[1] = v12[1]; result[2] = v12[2]; result[3] = -1; v12 += 3; result += 4; --v14; } while ( v14 ); } --v13; } while ( v13 ); } } return result; } //----- (00952CC0) -------------------------------------------------------- int __cdecl sub_952CC0(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8) { int result; // eax _DWORD *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((unsigned int)(*(_DWORD *)a8 & *v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 3; ++v9; *(_BYTE *)(v11 - 3) = v12; *(_BYTE *)(v11 - 2) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 4)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); --v10; *(_BYTE *)(v11 - 1) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 8)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952D40) -------------------------------------------------------- int __cdecl sub_952D40(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8) { int result; // eax _DWORD *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((unsigned int)(*(_DWORD *)a8 & *v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 4; ++v9; *(_BYTE *)(v11 - 4) = v12; *(_BYTE *)(v11 - 3) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 4)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); *(_BYTE *)(v11 - 2) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 8)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); --v10; *(_BYTE *)(v11 - 1) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 12)) >> *(_BYTE *)(a8 + 19)) << *(_BYTE *)(a8 + 23); } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952DD0) -------------------------------------------------------- int __cdecl sub_952DD0(int a1, int a2, int a3, int a4, int a5, int a6, _DWORD *a7, int a8) { int result; // eax _DWORD *v9; // edi int v10; // edx int v11; // esi char v12; // bl int v13; // [esp+24h] [ebp+20h] result = a2; v9 = a7; if ( a2 ) { v10 = a1; v11 = a4; v13 = a2; result = a8; do { if ( v10 ) { do { v12 = (unsigned __int8)((unsigned int)(*(_DWORD *)a8 & *v9) >> *(_BYTE *)(a8 + 16)) << *(_BYTE *)(a8 + 20); v11 += 4; ++v9; *(_BYTE *)(v11 - 4) = v12; *(_BYTE *)(v11 - 3) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 4)) >> *(_BYTE *)(a8 + 17)) << *(_BYTE *)(a8 + 21); --v10; *(_BYTE *)(v11 - 2) = (unsigned __int8)((unsigned int)(*(v9 - 1) & *(_DWORD *)(a8 + 8)) >> *(_BYTE *)(a8 + 18)) << *(_BYTE *)(a8 + 22); *(_BYTE *)(v11 - 1) = -1; } while ( v10 ); v10 = a1; } --v13; } while ( v13 ); } return result; } //----- (00952E50) -------------------------------------------------------- int __cdecl sub_952E50(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // esi int v9; // ecx unsigned __int8 *v10; // edx unsigned __int8 v11; // cl unsigned __int8 v12; // bl unsigned __int8 *v13; // edx unsigned int v14; // ebx int v15; // [esp+4h] [ebp-4h] int v16; // [esp+14h] [ebp+Ch] unsigned __int8 v17; // [esp+1Fh] [ebp+17h] result = a2; v8 = a4; if ( a2 ) { v9 = a1; v10 = a7; v15 = a2; result = a6; do { if ( v9 ) { v16 = v9; do { v11 = *v10; v12 = v10[1]; v13 = v10 + 2; v17 = v12; v14 = *(_DWORD *)(a6 + 12) & ((unsigned int)*v13 >> *(_BYTE *)(a6 + 23) << *(_BYTE *)(a6 + 19)); v10 = v13 + 2; v8 += 4; *(_DWORD *)(v8 - 4) = *(_DWORD *)(a6 + 4) & ((unsigned int)v17 >> *(_BYTE *)(a6 + 21) << *(_BYTE *)(a6 + 17)) | v14 | *(_DWORD *)a6 & ((unsigned int)v11 >> *(_BYTE *)(a6 + 20) << *(_BYTE *)(a6 + 16)); --v16; } while ( v16 ); v9 = a1; } --v15; } while ( v15 ); } return result; } //----- (00952EF0) -------------------------------------------------------- int __cdecl sub_952EF0(int a1, int a2, int a3, _WORD *a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // ecx unsigned __int8 *v9; // esi unsigned __int8 v10; // dl unsigned __int8 v11; // cl int v12; // esi __int16 v13; // di bool v14; // zf int v15; // [esp+0h] [ebp-8h] _WORD *v16; // [esp+4h] [ebp-4h] int v17; // [esp+14h] [ebp+Ch] v16 = a4; result = a2; if ( a2 ) { v8 = a1; v9 = a7; v15 = a2; result = a6; do { if ( v8 ) { v17 = v8; do { v10 = *v9; v11 = v9[1]; v12 = (int)(v9 + 1); v13 = (unsigned __int8)(*(_BYTE *)(v12 + 1) >> *(_BYTE *)(a6 + 23)); v9 = (unsigned __int8 *)(v12 + 3); *v16 = *(_WORD *)a6 & ((unsigned __int8)(v10 >> *(_BYTE *)(a6 + 20)) << *(_BYTE *)(a6 + 16)) | *(_WORD *)(a6 + 4) & ((unsigned __int8)(v11 >> *(_BYTE *)(a6 + 21)) << *(_BYTE *)(a6 + 17)) | *(_WORD *)(a6 + 12) & (v13 << *(_BYTE *)(a6 + 19)); v14 = v17-- == 1; ++v16; } while ( !v14 ); v8 = a1; } --v15; } while ( v15 ); } return result; } //----- (00952FB0) -------------------------------------------------------- int __cdecl sub_952FB0(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 *a7) { int result; // eax int v8; // esi int v9; // ecx unsigned __int8 *v10; // edx unsigned __int8 v11; // cl unsigned __int8 v12; // bl int v13; // [esp+18h] [ebp+14h] result = a2; v8 = a4; if ( a2 ) { v9 = a1; v10 = a7; result = a6; do { if ( v9 ) { v13 = v9; do { v11 = *v10; v12 = v10[1]; v10 += 2; v8 += 4; *(_DWORD *)(v8 - 4) = *(_DWORD *)(a6 + 12) & (0xFFFFFFFF >> *(_BYTE *)(a6 + 23) << *(_BYTE *)(a6 + 19)) | *(_DWORD *)(a6 + 4) & ((unsigned int)v12 >> *(_BYTE *)(a6 + 21) << *(_BYTE *)(a6 + 17)) | *(_DWORD *)a6 & ((unsigned int)v11 >> *(_BYTE *)(a6 + 20) << *(_BYTE *)(a6 + 16)); --v13; } while ( v13 ); v9 = a1; } --a2; } while ( a2 ); } return result; } //----- (00953040) -------------------------------------------------------- int __cdecl sub_953040(int a1, int a2, int a3, int a4, int a5, int a6, _BYTE *a7) { int result; // eax int v8; // edi _BYTE *v9; // esi __int16 v10; // dx __int16 v11; // bx bool v12; // zf int v13; // [esp+18h] [ebp+14h] result = a2; v8 = a4; if ( a2 ) { v9 = a7; result = a6; do { if ( a1 ) { v13 = a1; do { v10 = (unsigned __int8)(*v9 >> *(_BYTE *)(a6 + 20)); v11 = *(_WORD *)(a6 + 4) & ((unsigned __int8)(v9[1] >> *(_BYTE *)(a6 + 21)) << *(_BYTE *)(a6 + 17)); v9 += 2; v8 += 2; v12 = v13-- == 1; *(_WORD *)(v8 - 2) = *(_WORD *)(a6 + 12) & ((unsigned __int16)(0xFFFFFFFF >> *(_BYTE *)(a6 + 23)) << *(_BYTE *)(a6 + 19)) | v11 | *(_WORD *)a6 & (v10 << *(_BYTE *)(a6 + 16)); } while ( !v12 ); } --a2; } while ( a2 ); } return result; } //----- (009530D0) -------------------------------------------------------- int *__thiscall sub_9530D0(int *this, char *a2) { int *v2; // edi char v3; // dl unsigned int v4; // eax _BYTE *v5; // ecx char v6; // al unsigned int v7; // eax _DWORD *v8; // ecx char v9; // al char v10; // dl unsigned int v11; // eax _BYTE *v12; // ecx char v13; // al unsigned int v14; // eax _DWORD *v15; // ecx char v16; // al char v17; // dl unsigned int v18; // eax _BYTE *v19; // ecx char v20; // al unsigned int v21; // eax _DWORD *v22; // ecx char v23; // al char v24; // dl unsigned int v25; // eax _BYTE *v26; // ecx char v27; // al unsigned int v28; // eax _DWORD *v29; // ecx v2 = this; *this = sub_872D30(a2, 0); v3 = 0; v4 = 0; v5 = a2 + 28; while ( *((_DWORD *)v5 - 2) ) { v3 += *v5; ++v4; v5 += 12; if ( v4 >= 4 ) { v6 = 0; goto LABEL_5; } } if ( *a2 & 1 ) v6 = v3; else v6 = a2[1] - a2[12 * v4 + 28] - v3; LABEL_5: *((_BYTE *)v2 + 16) = v6; v7 = 0; v8 = a2 + 20; while ( *v8 ) { ++v7; v8 += 3; if ( v7 >= 4 ) { v9 = 0; goto LABEL_9; } } v9 = a2[12 * v7 + 28]; LABEL_9: *((_BYTE *)v2 + 20) = 8 - v9; v2[1] = sub_872D30(a2, 1); v10 = 0; v11 = 0; v12 = a2 + 28; while ( *((_DWORD *)v12 - 2) != 1 ) { v10 += *v12; ++v11; v12 += 12; if ( v11 >= 4 ) { v13 = 0; goto LABEL_13; } } if ( *a2 & 1 ) v13 = v10; else v13 = a2[1] - a2[12 * v11 + 28] - v10; LABEL_13: *((_BYTE *)v2 + 17) = v13; v14 = 0; v15 = a2 + 20; while ( *v15 != 1 ) { ++v14; v15 += 3; if ( v14 >= 4 ) { v16 = 0; goto LABEL_17; } } v16 = a2[12 * v14 + 28]; LABEL_17: *((_BYTE *)v2 + 21) = 8 - v16; v2[2] = sub_872D30(a2, 2); v17 = 0; v18 = 0; v19 = a2 + 28; while ( *((_DWORD *)v19 - 2) != 2 ) { v17 += *v19; ++v18; v19 += 12; if ( v18 >= 4 ) { v20 = 0; goto LABEL_21; } } if ( *a2 & 1 ) v20 = v17; else v20 = a2[1] - a2[12 * v18 + 28] - v17; LABEL_21: *((_BYTE *)v2 + 18) = v20; v21 = 0; v22 = a2 + 20; while ( *v22 != 2 ) { ++v21; v22 += 3; if ( v21 >= 4 ) { v23 = 0; goto LABEL_25; } } v23 = a2[12 * v21 + 28]; LABEL_25: *((_BYTE *)v2 + 22) = 8 - v23; v2[3] = sub_872D30(a2, 3); v24 = 0; v25 = 0; v26 = a2 + 28; while ( *((_DWORD *)v26 - 2) != 3 ) { v24 += *v26; ++v25; v26 += 12; if ( v25 >= 4 ) { v27 = 0; goto LABEL_29; } } if ( *a2 & 1 ) v27 = v24; else v27 = a2[1] - a2[12 * v25 + 28] - v24; LABEL_29: *((_BYTE *)v2 + 19) = v27; v28 = 0; v29 = a2 + 20; while ( *v29 != 3 ) { ++v28; v29 += 3; if ( v28 >= 4 ) { *((_BYTE *)v2 + 23) = 8; return v2; } } *((_BYTE *)v2 + 23) = 8 - a2[12 * v28 + 28]; return v2; } //----- (009532E0) -------------------------------------------------------- void *__thiscall sub_9532E0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiImageReader *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A13C: using guessed type void *NiTListBase,NiImageReader *>::`vftable'; //----- (00953310) -------------------------------------------------------- char __thiscall sub_953310(_DWORD *this, char *Src) { int **v2; // esi int (__stdcall *v3)(char *); // eax char result; // al int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi bool v7; // zf void (__thiscall *v8)(_DWORD, signed int); // eax char Dir; // [esp+4h] [ebp-50Ch] char v10; // [esp+107h] [ebp-409h] char Dst; // [esp+408h] [ebp-108h] v2 = (int **)this[390]; strcpy_s(&Dst, 0x104u, Src); nullsub_6(&Dst); sub_8A9F60(&Dir, &Dst); if ( v2 ) { while ( 1 ) { v3 = *(int (__stdcall **)(char *))(*v2[2] + 4); v2 = (int **)*v2; result = v3(&v10); if ( result ) break; if ( !v2 ) return result; } v5 = sub_8AA270(); v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( v5 ) { v7 = (*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) == 0; v8 = **v6; if ( !v7 ) { v8(v6, 1); return 1; } v8(v6, 1); } } return 0; } //----- (009533F0) -------------------------------------------------------- char __thiscall sub_9533F0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { _DWORD *v7; // ebx int v8; // edi int v9; // eax void (__thiscall ***v10)(_DWORD, signed int); // esi bool v11; // zf void (__thiscall *v12)(_DWORD); // edx signed int v14; // [esp+0h] [ebp-52Ch] char Dir; // [esp+20h] [ebp-50Ch] char v16; // [esp+123h] [ebp-409h] char Dst; // [esp+424h] [ebp-108h] v7 = (_DWORD *)this[390]; strcpy_s(&Dst, 0x104u, Src); nullsub_6(&Dst); sub_8A9F60(&Dir, &Dst); if ( !v7 ) return 0; while ( 1 ) { v8 = v7[2]; v7 = (_DWORD *)*v7; if ( !(*(unsigned __int8 (__thiscall **)(int, char *))(*(_DWORD *)v8 + 4))(v8, &v16) ) goto LABEL_7; v9 = sub_8AA270(); v10 = (void (__thiscall ***)(_DWORD, signed int))v9; if ( !v9 ) return 0; if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v9 + 4))(v9) ) break; v11 = (*(unsigned __int8 (__thiscall **)(int, void (__thiscall ***)(_DWORD, signed int), int, int, int, int, int, signed int))(*(_DWORD *)v8 + 12))( v8, v10, a5, a6, a3, a4, a7, v14) == 0; v12 = (void (__thiscall *)(_DWORD))**v10; v14 = 1; if ( !v11 ) { ((void (__thiscall *)(_DWORD, signed int))v12)(v10, 1); return 1; } v12(v10); LABEL_7: if ( !v7 ) return 0; } if ( v10 ) (**v10)(v10, 1); return 0; } //----- (00953540) -------------------------------------------------------- int __thiscall sub_953540(_DWORD *this, char *Src, int a3) { _DWORD *v3; // ebx int v4; // edi int v5; // eax void (__thiscall ***v6)(_DWORD, signed int); // esi int v7; // edi char Dir; // [esp+10h] [ebp-50Ch] char v10; // [esp+113h] [ebp-409h] char Dst; // [esp+414h] [ebp-108h] v3 = (_DWORD *)this[390]; strcpy_s(&Dst, 0x104u, Src); nullsub_6(&Dst); sub_8A9F60(&Dir, &Dst); if ( !v3 ) return 0; while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( !(*(unsigned __int8 (__thiscall **)(int, char *))(*(_DWORD *)v4 + 4))(v4, &v10) ) goto LABEL_6; v5 = sub_8AA270(); v6 = (void (__thiscall ***)(_DWORD, signed int))v5; if ( !v5 ) return 0; if ( !(*(unsigned __int8 (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5) ) break; v7 = (*(int (__thiscall **)(int, void (__thiscall ***)(_DWORD, signed int), int))(*(_DWORD *)v4 + 8))(v4, v6, a3); (**v6)(v6, 1); if ( v7 ) return v7; LABEL_6: if ( !v3 ) return 0; } if ( v6 ) (**v6)(v6, 1); return 0; } //----- (00953650) -------------------------------------------------------- char __stdcall sub_953650(_DWORD *a1, int a2) { _DWORD *v2; // edi int v3; // ebx char *v4; // ST00_4 signed int v5; // eax bool v6; // zf int v7; // eax char v8; // al int v10; // [esp+Ch] [ebp-18h] int v11; // [esp+10h] [ebp-14h] int v12; // [esp+14h] [ebp-10h] int v13; // [esp+18h] [ebp-Ch] int v14; // [esp+30h] [ebp+Ch] v2 = (_DWORD *)a2; v3 = *(unsigned __int8 *)(a2 + 1); v4 = (char *)a2; v14 = *(_DWORD *)(a2 + 4); sub_9530D0(&v10, v4); if ( sub_75A550(a1, (int)v2) ) return 1; if ( !(*(_BYTE *)a1 & 1) ) return 0; if ( !(*(_BYTE *)v2 & 1) ) return 0; v5 = v2[1]; if ( v5 >= 4 && v5 <= 6 ) return 0; if ( v3 == 24 && (v11 != 65280 || v10 != 255 && v10 != 16711680) ) return 0; if ( sub_75A550(a1, (int)&unk_ABD9B0) || sub_75A550(a1, (int)&unk_ABD9F8) ) { if ( !v14 || v14 == 1 ) { if ( v3 != 24 && v3 != 32 ) return 0; return 1; } if ( !sub_866730(v2, (int)&unk_ABD9B0) ) return 1; v8 = sub_866730(v2, (int)&unk_ABD9F8); } else { if ( !sub_75A550(a1, (int)&unk_ABDA40) && !sub_75A550(a1, (int)&unk_ABDA88) ) { if ( !sub_75A550(a1, (int)&unk_ABDB18) && !sub_75A550(a1, (int)&unk_ABDAD0) && !(unsigned __int8)sub_869520(a1) ) { if ( !sub_75A550(a1, (int)&unk_ABDBF0) && !sub_75A550(a1, (int)&unk_ABDC38) ) { if ( !sub_75A550(a1, (int)&unk_ABDB60) && !sub_75A550(a1, (int)&unk_ABDBA8) || v3 != 16 || v13 != 0x8000 || v11 != 992 ) { return 0; } if ( v10 == 31 ) { v6 = v12 == 31744; } else { if ( v10 != 31744 ) return 0; v6 = v12 == 31; } goto LABEL_42; } v7 = v14; goto LABEL_29; } v7 = v14; if ( v14 && v14 != 1 ) { LABEL_29: if ( v7 != 8 && v7 != 9 ) return 0; } LABEL_31: if ( v3 == 16 || v3 == 24 ) return 1; v6 = v3 == 32; goto LABEL_42; } if ( !v14 || v14 == 1 ) goto LABEL_31; if ( !sub_866730(v2, (int)&unk_ABDA40) ) return 1; v8 = sub_866730(v2, (int)&unk_ABDA88); } v6 = v8 == 0; LABEL_42: if ( !v6 ) return 0; return 1; } //----- (00953870) -------------------------------------------------------- char __stdcall sub_953870(_DWORD *a1) { char result; // al if ( sub_75A550(a1, (int)&unk_ABD9F8) || sub_75A550(a1, (int)&unk_ABDA88) || (result = sub_75A550(a1, (int)&unk_ABDAD0)) != 0 ) { result = 1; } return result; } //----- (009538C0) -------------------------------------------------------- char __stdcall sub_9538C0(_DWORD *a1) { char result; // al if ( sub_75A550(a1, (int)&unk_ABD9B0) || sub_75A550(a1, (int)&unk_ABDA40) || (result = sub_75A550(a1, (int)&unk_ABDB18)) != 0 ) { result = 1; } return result; } //----- (00953910) -------------------------------------------------------- _DWORD *__thiscall sub_953910(void *this, int a2, _DWORD *a3) { int v3; // ebx void *v4; // esi const void *v5; // esi _DWORD *v6; // edi _DWORD *v7; // eax unsigned int v8; // esi unsigned int v9; // ebx int v10; // edx int v11; // eax int v12; // ecx int v13; // esi _BYTE *v14; // ecx unsigned __int8 *v15; // esi int *v16; // eax int v17; // edx int v18; // eax _DWORD *v19; // edx int v20; // edx unsigned __int8 *v21; // eax unsigned int v22; // ebx int v23; // edx int v24; // eax int v25; // ecx int v26; // esi _BYTE *v27; // ecx unsigned __int8 *v28; // esi int *v29; // eax int v30; // edx int v31; // eax _DWORD *v32; // edx int v33; // edx unsigned __int8 *v34; // eax int v36; // [esp+Ch] [ebp-70h] unsigned int v37; // [esp+10h] [ebp-6Ch] int v38; // [esp+14h] [ebp-68h] _DWORD *v39; // [esp+14h] [ebp-68h] _DWORD *v40; // [esp+18h] [ebp-64h] int v41; // [esp+1Ch] [ebp-60h] int v42; // [esp+24h] [ebp-58h] int v43; // [esp+24h] [ebp-58h] signed int v44; // [esp+24h] [ebp-58h] void *v45; // [esp+28h] [ebp-54h] _DWORD *v46; // [esp+28h] [ebp-54h] int v47; // [esp+28h] [ebp-54h] int v48; // [esp+28h] [ebp-54h] int v49; // [esp+2Ch] [ebp-50h] int v50; // [esp+2Ch] [ebp-50h] int v51; // [esp+2Ch] [ebp-50h] signed int v52; // [esp+30h] [ebp-4Ch] int v53; // [esp+30h] [ebp-4Ch] int v54; // [esp+30h] [ebp-4Ch] int v55; // [esp+30h] [ebp-4Ch] char v56; // [esp+34h] [ebp-48h] v3 = a2; v4 = this; v45 = this; sub_86A420(&v56); if ( (*(unsigned __int8 (__thiscall **)(void *, int))(*(_DWORD *)v4 + 32))(v4, a2 + 8) ) { v5 = &unk_ABDB18; } else { if ( !(*(unsigned __int8 (__thiscall **)(void *, int))(*(_DWORD *)v4 + 28))(v4, a2 + 8) ) return 0; v5 = &unk_ABDAD0; } qmemcpy(&v56, v5, 0x44u); v6 = a3; if ( a3 && sub_75A550(a3 + 2, (int)&v56) && a3[24] > 1u && a3[27] == *(_DWORD *)(a2 + 108) ) goto LABEL_12; v7 = operator new(0x70u); if ( !v7 ) { v6 = 0; LABEL_12: v40 = v6; goto LABEL_13; } v6 = sub_8698C0(v7, **(_DWORD **)(a2 + 84), **(_DWORD **)(a2 + 88), &v56, 0, *(_DWORD *)(a2 + 108)); v40 = v6; LABEL_13: v8 = v6[24]; v37 = v6[24]; if ( (_DWORD *)a2 != v6 && !(*(unsigned __int8 (__stdcall **)(_DWORD *, int, _DWORD))(*(_DWORD *)v45 + 44))(v6, a2, 0) ) return 0; v41 = 0; if ( *(_DWORD *)(a2 + 108) ) { while ( 1 ) { if ( sub_75A550(&v56, (int)&unk_ABDB18) ) { v9 = 1; v52 = 1; if ( v8 > 1 ) { do { v10 = v6[23]; v11 = v41 * *(_DWORD *)(v10 + 4 * v6[24]); v12 = v6[20]; v13 = v12 + *(_DWORD *)(v10 + 4 * v9 - 4); v14 = (_BYTE *)(*(_DWORD *)(v10 + 4 * v9) + v11 + v12); v15 = (unsigned __int8 *)(v11 + v13); v16 = (int *)(v6[21] + 4 * v9); v17 = *v16; v18 = *(v16 - 1); v49 = v17; v19 = (_DWORD *)(v6[22] + 4 * v9); v46 = v19; v42 = *v19; v20 = 3 * v18; v38 = 3 * v18; if ( v18 == 1 ) { if ( v42 ) { v50 = v42; do { *v14 = (*v15 + (unsigned int)v15[3]) >> 1; v14[1] = (v15[1] + (unsigned int)v15[4]) >> 1; v14[2] = (v15[2] + (unsigned int)v15[5]) >> 1; v14 += 3; v15 += 6; --v50; } while ( v50 ); } } else if ( *(v46 - 1) == 1 ) { for ( ; v49; --v49 ) { *v14 = (*v15 + (unsigned int)v15[3]) >> 1; v14[1] = (v15[1] + (unsigned int)v15[4]) >> 1; v14[2] = (v15[2] + (unsigned int)v15[5]) >> 1; v14 += 3; v15 += 6; } } else if ( v42 ) { v47 = v42; do { if ( v49 ) { v21 = &v15[v20]; v43 = v49; do { *v14 = (*v21 + *v15 + v21[3] + (unsigned int)v21[-v20 + 3]) >> 2; v14[1] = (v21[1] + v21[4] + v21[-v20 + 4] + (unsigned int)v21[-v20 + 1]) >> 2; v14[2] = (v21[2] + v21[5] + v21[-v20 + 5] + (unsigned int)v21[-v20 + 2]) >> 2; v14 += 3; v15 += 6; v21 += 6; --v43; } while ( v43 ); v6 = v40; v20 = v38; v9 = v52; } v15 += v20; --v47; } while ( v47 ); } v52 = ++v9; } while ( v9 < v37 ); } } else { if ( !sub_75A550(&v56, (int)&unk_ABDAD0) ) goto LABEL_58; v22 = 1; v44 = 1; if ( v8 > 1 ) { do { v23 = v6[23]; v24 = v41 * *(_DWORD *)(v23 + 4 * v6[24]); v25 = v6[20]; v26 = v25 + *(_DWORD *)(v23 + 4 * v22 - 4); v27 = (_BYTE *)(*(_DWORD *)(v23 + 4 * v22) + v24 + v25); v28 = (unsigned __int8 *)(v24 + v26); v29 = (int *)(v6[21] + 4 * v22); v30 = *v29; v31 = *(v29 - 1); v51 = v30; v32 = (_DWORD *)(v6[22] + 4 * v22); v39 = v32; v53 = *v32; v33 = 4 * v31; v36 = 4 * v31; if ( v31 == 1 ) { for ( ; v53; --v53 ) { *v27 = (*v28 + (unsigned int)v28[4]) >> 1; v27[1] = (v28[1] + (unsigned int)v28[5]) >> 1; v27[2] = (v28[2] + (unsigned int)v28[6]) >> 1; v27[3] = (v28[3] + (unsigned int)v28[7]) >> 1; v27 += 4; v28 += 8; } } else if ( *(v39 - 1) == 1 ) { if ( v51 ) { v54 = v51; do { *v27 = (*v28 + (unsigned int)v28[4]) >> 1; v27[1] = (v28[1] + (unsigned int)v28[5]) >> 1; v27[2] = (v28[2] + (unsigned int)v28[6]) >> 1; v27[3] = (v28[3] + (unsigned int)v28[7]) >> 1; v27 += 4; v28 += 8; --v54; } while ( v54 ); } } else if ( v53 ) { v48 = v53; do { if ( v51 ) { v34 = &v28[v33]; v55 = v51; do { *v27 = (*v34 + *v28 + v34[4] + (unsigned int)v34[-v33 + 4]) >> 2; v27[1] = (v34[1] + v34[5] + v34[-v33 + 5] + (unsigned int)v34[-v33 + 1]) >> 2; v27[2] = (v34[2] + v34[6] + v34[-v33 + 6] + (unsigned int)v34[-v33 + 2]) >> 2; v27[3] = (v34[3] + v34[7] + v34[-v33 + 7] + (unsigned int)v34[-v33 + 3]) >> 2; v27 += 4; v28 += 8; v34 += 8; --v55; } while ( v55 ); v33 = v36; v22 = v44; v6 = v40; } v28 += v33; --v48; } while ( v48 ); } v44 = ++v22; } while ( v22 < v37 ); } } v3 = a2; LABEL_58: if ( (unsigned int)++v41 >= *(_DWORD *)(v3 + 108) ) return v6; v8 = v37; } } return v6; } //----- (00953E10) -------------------------------------------------------- unsigned int __thiscall sub_953E10(void *this, int a2, int a3, int a4, int a5) { int v5; // esi void *v6; // ebx _DWORD *v7; // edi _DWORD *v9; // edi void *v10; // [esp+Ch] [ebp-4h] _DWORD *v11; // [esp+20h] [ebp+10h] v5 = a4; v6 = this; v10 = this; v7 = (_DWORD *)(*(int (__thiscall **)(void *, int, int, int, int))(*(_DWORD *)this + 56))(this, a2, a3, a4 + 8, a5); if ( v7 == (_DWORD *)(a4 + 8) ) return a4; if ( !v7 ) return 0; if ( sub_75A550(v7, a4 + 8) ) return a4; if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD *))(*(_DWORD *)v6 + 12))(v6, a4 + 8, v7) ) return 0; v11 = operator new(0x70u); if ( v11 ) { v6 = v10; v9 = sub_8698C0( v11, **(_DWORD **)(v5 + 84), **(_DWORD **)(v5 + 88), v7, *(_DWORD *)(v5 + 96), *(_DWORD *)(v5 + 108)); } else { v9 = 0; } return (*(unsigned __int8 (__thiscall **)(void *, _DWORD *, int, signed int))(*(_DWORD *)v6 + 44))(v6, v9, v5, -1) != 0 ? (unsigned int)v9 : 0; } //----- (00953ED0) -------------------------------------------------------- void *__thiscall sub_953ED0(void *this, int a2, _DWORD *a3, int a4, int a5) { void *result; // eax int v6; // ecx if ( a2 ) { if ( a2 == 4 ) result = (void *)(*(int (__stdcall **)(_DWORD *, int, int))(*(_DWORD *)this + 68))(a3, a4, a5); else result = (void *)a5; } else { result = (void *)a5; v6 = *(_DWORD *)(a5 + 4); if ( (v6 == 2 || v6 == 3 || *(_BYTE *)(a5 + 1) == 16) && *a3 == 4 ) result = &unk_ABDAD0; } return result; } //----- (00953F30) -------------------------------------------------------- void *__stdcall sub_953F30(int *a1, int a2, int a3) { signed int v3; // edx bool v4; // bl unsigned int v5; // eax _DWORD *v6; // ecx char v7; // al int v8; // eax void *result; // eax int v10; // eax bool v11; // zf char v12; // al v3 = *(_DWORD *)(a2 + 4); if ( v3 != 2 && v3 != 3 ) { v5 = 0; v6 = (_DWORD *)(a2 + 20); while ( *v6 != 3 ) { ++v5; v6 += 3; if ( v5 >= 4 ) { v7 = 0; goto LABEL_8; } } v7 = *(_BYTE *)(a2 + 12 * v5 + 28); LABEL_8: v4 = v7 != 0; } else { v4 = v3 == 3; } if ( v3 >= 4 && v3 <= 6 ) v4 = 1; v8 = *a1; if ( *a1 == 13 ) return &unk_ABDD58; switch ( v8 ) { case 12: return &unk_ABDDA0; case 2: return &unk_ABE2B0; case 1: goto LABEL_19; case 0: case 5: result = &unk_ABDD10; goto LABEL_41; case 3: v10 = *(_DWORD *)(a3 + 4); goto LABEL_25; case 4: return &unk_ABDC38; } if ( v8 != 6 ) return &unk_ABE2B0; if ( !(unsigned __int8)sub_93A4F0((_DWORD *)a3) && !(unsigned __int8)sub_869520((_DWORD *)a3) ) { v12 = *(_BYTE *)(a3 + 1); switch ( v12 ) { case 16: LABEL_19: result = &unk_ABE1D8; if ( !v4 ) result = &unk_ABE0B8; return result; case 64: return &unk_ABDDA0; case -128: return &unk_ABDD58; } return &unk_ABE2B0; } v10 = *(_DWORD *)(a3 + 4); LABEL_25: if ( v10 == 4 ) return &unk_ABDC80; if ( v10 == 5 ) return &unk_ABDCC8; v11 = v10 == 6; result = &unk_ABDD10; if ( !v11 ) { LABEL_41: if ( v4 ) return result; return &unk_ABDC80; } return result; } //----- (00954080) -------------------------------------------------------- _DWORD *__stdcall sub_954080(int a1, _DWORD *a2) { _DWORD *v2; // ebx unsigned int v3; // esi unsigned int v4; // edi _DWORD *v5; // eax _DWORD *v6; // esi unsigned int v7; // eax int v8; // edx _BYTE *v9; // ecx int v10; // edi signed int v11; // edi _DWORD *v12; // eax unsigned int v13; // eax int v14; // ecx _BYTE *v15; // edx int v16; // edi _DWORD *v17; // eax int v18; // edx _BYTE *v19; // ecx char *v20; // esi int v21; // eax char *v22; // edx int v23; // eax char v24; // bl char v25; // al int v26; // ebx char *v27; // edx char v28; // al char v29; // bl bool v30; // zf int v32; // [esp+Ch] [ebp-24h] int v33; // [esp+10h] [ebp-20h] int v34; // [esp+10h] [ebp-20h] int v35; // [esp+14h] [ebp-1Ch] int v36; // [esp+14h] [ebp-1Ch] int v37; // [esp+18h] [ebp-18h] int v38; // [esp+18h] [ebp-18h] int v39; // [esp+18h] [ebp-18h] unsigned int v40; // [esp+1Ch] [ebp-14h] unsigned int v41; // [esp+20h] [ebp-10h] int v42; // [esp+20h] [ebp-10h] int v43; // [esp+20h] [ebp-10h] int v44; // [esp+20h] [ebp-10h] signed int v45; // [esp+24h] [ebp-Ch] char *v46; // [esp+28h] [ebp-8h] _DWORD *v47; // [esp+2Ch] [ebp-4h] int v48; // [esp+3Ch] [ebp+Ch] int v49; // [esp+3Ch] [ebp+Ch] int v50; // [esp+3Ch] [ebp+Ch] v2 = (_DWORD *)a1; v3 = **(_DWORD **)(a1 + 84); v4 = *(_DWORD *)(a1 + 96); v41 = **(_DWORD **)(a1 + 88); v40 = *(_DWORD *)(a1 + 96); if ( sub_75A550((_DWORD *)(a1 + 8), (int)&unk_ABDAD0) ) { v5 = operator new(0x70u); if ( v5 ) { v6 = sub_8698C0(v5, v3, v41, &unk_ABDC38, v4, 1); v47 = v6; } else { v6 = 0; v47 = 0; } v7 = 0; v42 = 0; if ( v4 ) { do { v8 = v6[20] + *(_DWORD *)(v6[23] + 4 * v7); v48 = *(_DWORD *)(*(_DWORD *)(a1 + 84) + 4 * v7); v9 = (_BYTE *)(*(_DWORD *)(a1 + 80) + *(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * v7)); if ( *(_DWORD *)(*(_DWORD *)(a1 + 88) + 4 * v7) ) { v37 = *(_DWORD *)(*(_DWORD *)(a1 + 88) + 4 * v7); do { v10 = v48; if ( v48 ) { do { *(_BYTE *)(v8 + 2) = v9[3]; *(_BYTE *)(v8 + 3) = *v9; v9 += 4; v8 += 4; --v10; } while ( v10 ); v7 = v42; } --v37; } while ( v37 ); } v42 = ++v7; } while ( v7 < v40 ); } v11 = 4; v45 = 4; } else { if ( sub_75A550((_DWORD *)(a1 + 8), (int)&unk_ABDB18) && sub_75A550(a2, (int)&unk_ABDC38) ) { v12 = operator new(0x70u); if ( v12 ) { v6 = sub_8698C0(v12, v3, v41, &unk_ABDC38, v4, 1); v47 = v6; } else { v6 = 0; v47 = 0; } v13 = 0; v43 = 0; if ( v4 ) { do { v14 = v6[20] + *(_DWORD *)(v6[23] + 4 * v13); v49 = *(_DWORD *)(*(_DWORD *)(a1 + 84) + 4 * v13); v15 = (_BYTE *)(*(_DWORD *)(a1 + 80) + *(_DWORD *)(*(_DWORD *)(a1 + 92) + 4 * v13)); if ( *(_DWORD *)(*(_DWORD *)(a1 + 88) + 4 * v13) ) { v38 = *(_DWORD *)(*(_DWORD *)(a1 + 88) + 4 * v13); do { v16 = v49; if ( v49 ) { do { *(_BYTE *)(v14 + 2) = -1; *(_BYTE *)(v14 + 3) = *v15; v15 += 3; v14 += 4; --v16; } while ( v16 ); v13 = v43; } --v38; } while ( v38 ); } v43 = ++v13; } while ( v13 < v40 ); } v45 = 4; } else { if ( !sub_75A550((_DWORD *)(a1 + 8), (int)&unk_ABDB18) ) return 0; v17 = operator new(0x70u); if ( v17 ) { v6 = sub_8698C0(v17, v3, v41, &unk_ABDBF0, v4, 1); v47 = v6; } else { v6 = 0; v47 = 0; } v45 = 2; } v11 = 3; } v18 = 0; v44 = 0; if ( v40 ) { while ( 1 ) { v19 = (_BYTE *)(v6[20] + *(_DWORD *)(v6[23] + 4 * v18)); v20 = (char *)(v2[20] + *(_DWORD *)(v2[23] + 4 * v18)); v21 = *(_DWORD *)(v2[21] + 4 * v18); v46 = &v20[v11]; v50 = v21 - 1; v22 = &v20[v21 * v11]; v39 = 0; if ( *(_DWORD *)(v2[22] + 4 * v44) == 1 ) { v23 = v21 - 1; } else { v33 = *(_DWORD *)(v2[22] + 4 * v44) - 1; v39 = *(_DWORD *)(v2[22] + 4 * v44) - 1; v23 = v21 - 1; do { if ( !v23 ) goto LABEL_62; v35 = v23; do { v24 = *v46; v46 += v11; v25 = *v22 - *v20; *v19 = v24 - *v20; v19[1] = v25; v19 += v45; v20 += v11; v22 += v11; --v35; } while ( v35 ); v23 = v50; if ( v50 ) { v23 = v50; *v19 = *v20 - v20[-v11]; } else { LABEL_62: *v19 = 0; } v46 += v11; v19[1] = *v22 - *v20; v19 += v45; v20 += v11; v22 += v11; --v33; } while ( v33 ); } v26 = v11 * (v23 + 1); v27 = &v20[-v26]; v34 = (int)&v20[-v26]; if ( !v23 ) goto LABEL_63; v32 = v46 - v20; v36 = v23; do { v28 = *v20; v29 = v20[v32]; v19[1] = *v20 - *v27; *v19 = v29 - v28; v19 += v45; v27 = (char *)(v11 + v34); v20 += v11; v30 = v36-- == 1; v34 += v11; } while ( !v30 ); if ( v50 ) *v19 = *v20 - v20[-v11]; else LABEL_63: *v19 = 0; v19[1] = v39 ? *v20 - *v27 : 0; v6 = v47; if ( ++v44 >= v40 ) break; v2 = (_DWORD *)a1; v18 = v44; } } return v6; } //----- (009543D0) -------------------------------------------------------- void __cdecl sub_9543D0(unsigned int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, int a7) { int v7; // esi unsigned __int8 *v8; // eax unsigned int v9; // ecx unsigned int v10; // edi char v11; // bl unsigned int v12; // edx unsigned __int8 *v13; // eax unsigned int v14; // edi unsigned int v15; // esi unsigned int v16; // edi unsigned int v17; // esi unsigned int v18; // edi _DWORD *v19; // eax int v20; // edi unsigned __int8 *v21; // ecx unsigned int v22; // edx char *v23; // [esp+Ch] [ebp-88h] char *v24; // [esp+18h] [ebp-7Ch] char *v25; // [esp+20h] [ebp-74h] unsigned __int8 *v26; // [esp+24h] [ebp-70h] unsigned int v27; // [esp+2Ch] [ebp-68h] char v28; // [esp+30h] [ebp-64h] char v29; // [esp+34h] [ebp-60h] int v30; // [esp+38h] [ebp-5Ch] char v31; // [esp+3Ch] [ebp-58h] char v32; // [esp+40h] [ebp-54h] int v33; // [esp+44h] [ebp-50h] int v34; // [esp+48h] [ebp-4Ch] char v35; // [esp+4Ch] [ebp-48h] int v36; // [esp+50h] [ebp-44h] char v37[4]; // [esp+53h] [ebp-41h] char v38[4]; // [esp+57h] [ebp-3Dh] char v39[53]; // [esp+5Bh] [ebp-39h] v7 = *(_DWORD *)(a5 + 20); v8 = (unsigned __int8 *)operator new(a1 * a2); v9 = a2 * (a1 >> 1); v10 = 0; v26 = v8; if ( v9 ) { do { *v8 = *(_BYTE *)(v10 + a7) >> 4; v8[1] = *(_BYTE *)(v10++ + a7) & 0xF; v8 += 2; } while ( v10 < v9 ); } v32 = *((_BYTE *)a6 + 18); v30 = a6[2]; v29 = *((_BYTE *)a6 + 21); v34 = a6[1]; v35 = *((_BYTE *)a6 + 17); v11 = *((_BYTE *)a6 + 22); v31 = *((_BYTE *)a6 + 16); v28 = *((_BYTE *)a6 + 20); v33 = *a6; v24 = &v37[-v7]; v12 = a6[3] & (0xFFu >> *((_BYTE *)a6 + 23) << *((_BYTE *)a6 + 19)); v23 = &v38[-v7]; v27 = 0; v13 = (unsigned __int8 *)(v7 + 1); v25 = &v39[-v7]; do { *(&v36 + v27) = v12 | v34 & ((unsigned int)*v13 >> v29 << v35) | v30 & ((unsigned int)v13[1] >> v11 << v32) | v33 & ((unsigned int)*(v13 - 1) >> v28 << v31); v14 = v13[8]; *(_DWORD *)&v13[(_DWORD)v24] = v12 | v30 & ((unsigned int)v13[5] >> v11 << v32) | v34 & ((unsigned int)v13[4] >> v29 << v35) | v33 & ((unsigned int)v13[3] >> v28 << v31); v15 = v30 & ((unsigned int)v13[9] >> v11 << v32) | v34 & (v14 >> v29 << v35) | v33 & ((unsigned int)v13[7] >> v28 << v31); v16 = v13[12]; *(_DWORD *)&v13[(_DWORD)v23] = v12 | v15; v17 = v34 & (v16 >> v29 << v35) | v33 & ((unsigned int)v13[11] >> v28 << v31); v18 = (unsigned int)v13[13] >> v11; v13 += 16; *(_DWORD *)&v13[(_DWORD)v25 - 16] = v12 | v30 & (v18 << v32) | v17; v27 += 4; } while ( v27 < 0x10 ); v19 = a4; if ( a2 ) { v20 = a2; v21 = v26; do { if ( a1 ) { v22 = a1; do { *v19 = *(&v36 + *v21); ++v19; ++v21; --v22; } while ( v22 ); } --v20; } while ( v20 ); } operator delete(v26); } // 9543D0: using guessed type char var_41[4]; // 9543D0: using guessed type char var_3D[4]; // 9543D0: using guessed type char var_39[53]; //----- (00954620) -------------------------------------------------------- void __cdecl sub_954620(int a1, int a2, int a3, int a4, void *a5, int a6, int a7) { int v7; // esi int v8; // ebx unsigned __int8 *v9; // eax unsigned int v10; // edi unsigned int v11; // ecx unsigned __int8 *v12; // eax _BYTE *v13; // ecx int j; // edi _BYTE *v15; // ecx int i; // edi unsigned __int8 *v17; // [esp+1Ch] [ebp+18h] v7 = *((_DWORD *)a5 + 5); if ( *(_DWORD *)(a6 + 4) != 65280 ) return; v8 = a2; v9 = (unsigned __int8 *)operator new(a2 * a1); v10 = a2 * ((unsigned int)a1 >> 1); v11 = 0; v17 = v9; if ( v10 ) { do { *v9 = *(_BYTE *)(v11 + a7) >> 4; v9[1] = *(_BYTE *)(v11++ + a7) & 0xF; v9 += 2; } while ( v11 < v10 ); v8 = a2; } v12 = v17; if ( *(_DWORD *)a6 != 255 ) { if ( *(_DWORD *)a6 == 16711680 && v8 ) { v15 = (_BYTE *)a4; do { for ( i = a1; i; --i ) { *v15 = *(_BYTE *)(v7 + 4 * *v12 + 2); v15[1] = *(_BYTE *)(v7 + 4 * *v12 + 1); v15[2] = *(_BYTE *)(v7 + 4 * *v12); v15 += 3; ++v12; } --v8; } while ( v8 ); } goto LABEL_18; } if ( !v8 ) { LABEL_18: operator delete(v17); return; } v13 = (_BYTE *)a4; do { for ( j = a1; j; --j ) { *v13 = *(_BYTE *)(v7 + 4 * *v12); v13[1] = *(_BYTE *)(v7 + 4 * *v12 + 1); v13[2] = *(_BYTE *)(v7 + 4 * *v12 + 2); v13 += 3; ++v12; } --v8; } while ( v8 ); operator delete(v17); } //----- (00954740) -------------------------------------------------------- void __cdecl sub_954740(unsigned int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, int a7) { int v7; // edi unsigned __int8 *v8; // eax unsigned int v9; // ecx unsigned int v10; // esi char v11; // dl char v12; // si unsigned __int8 *v13; // eax unsigned int v14; // ebx unsigned int v15; // edi unsigned int v16; // ebx int v17; // edi unsigned int v18; // ebx _DWORD *v19; // eax int v20; // edi unsigned __int8 *v21; // ecx unsigned int v22; // edx char *v23; // [esp+Ch] [ebp-90h] char *v24; // [esp+18h] [ebp-84h] char *v25; // [esp+20h] [ebp-7Ch] unsigned __int8 *v26; // [esp+24h] [ebp-78h] unsigned int v27; // [esp+2Ch] [ebp-70h] int v28; // [esp+30h] [ebp-6Ch] int v29; // [esp+34h] [ebp-68h] char v30; // [esp+38h] [ebp-64h] char v31; // [esp+3Ch] [ebp-60h] int v32; // [esp+40h] [ebp-5Ch] char v33; // [esp+44h] [ebp-58h] char v34; // [esp+48h] [ebp-54h] char v35; // [esp+4Ch] [ebp-50h] char v36; // [esp+50h] [ebp-4Ch] int v37; // [esp+54h] [ebp-48h] int v38; // [esp+58h] [ebp-44h] char v39[4]; // [esp+5Ah] [ebp-42h] char v40[4]; // [esp+5Eh] [ebp-3Eh] char v41[54]; // [esp+62h] [ebp-3Ah] v7 = *(_DWORD *)(a5 + 20); v8 = (unsigned __int8 *)operator new(a1 * a2); v9 = a2 * (a1 >> 1); v10 = 0; v26 = v8; if ( v9 ) { do { *v8 = *(_BYTE *)(v10 + a7) >> 4; v8[1] = *(_BYTE *)(v10++ + a7) & 0xF; v8 += 2; } while ( v10 < v9 ); } v37 = a6[3]; v36 = *((_BYTE *)a6 + 22); v34 = *((_BYTE *)a6 + 18); v32 = a6[2]; v31 = *((_BYTE *)a6 + 21); v11 = *((_BYTE *)a6 + 23); v12 = *((_BYTE *)a6 + 19); v33 = *((_BYTE *)a6 + 17); v29 = a6[1]; v30 = *((_BYTE *)a6 + 20); v35 = *((_BYTE *)a6 + 16); v24 = &v39[-v7]; v23 = &v40[-v7]; v28 = *a6; v27 = 0; v13 = (unsigned __int8 *)(v7 + 2); v25 = &v41[-v7]; do { *(&v38 + v27) = v32 & ((unsigned int)*v13 >> v36 << v34) | v37 & ((unsigned int)v13[1] >> v11 << v12) | v29 & ((unsigned int)*(v13 - 1) >> v31 << v33) | v28 & ((unsigned int)*(v13 - 2) >> v30 << v35); v14 = v13[7]; *(_DWORD *)&v13[(_DWORD)v24] = v37 & ((unsigned int)v13[5] >> v11 << v12) | v32 & ((unsigned int)v13[4] >> v36 << v34) | v29 & ((unsigned int)v13[3] >> v31 << v33) | v28 & ((unsigned int)v13[2] >> v30 << v35); v15 = v32 & ((unsigned int)v13[8] >> v36 << v34) | v29 & (v14 >> v31 << v33) | v28 & ((unsigned int)v13[6] >> v30 << v35); v16 = (unsigned int)v13[9] >> v11 << v12; v13 += 16; v17 = v37 & v16 | v15; v18 = *(v13 - 5); *(_DWORD *)&v13[(_DWORD)v23 - 16] = v17; *(_DWORD *)&v13[(_DWORD)v25 - 16] = v37 & ((unsigned int)*(v13 - 3) >> v11 << v12) | v32 & ((unsigned int)*(v13 - 4) >> v36 << v34) | v29 & (v18 >> v31 << v33) | v28 & ((unsigned int)*(v13 - 6) >> v30 << v35); v27 += 4; } while ( v27 < 0x10 ); v19 = a4; if ( a2 ) { v20 = a2; v21 = v26; do { if ( a1 ) { v22 = a1; do { *v19 = *(&v38 + *v21); ++v19; ++v21; --v22; } while ( v22 ); } --v20; } while ( v20 ); } operator delete(v26); } // 954740: using guessed type char var_42[4]; // 954740: using guessed type char var_3E[4]; // 954740: using guessed type char var_3A[54]; //----- (009549F0) -------------------------------------------------------- _WORD *__cdecl sub_9549F0(int a1, int a2, int a3, _WORD *a4, int a5, __int16 *a6, unsigned __int8 *a7) { int v7; // eax unsigned int v8; // esi unsigned int v9; // edi _BYTE *v10; // eax __int16 v11; // si char v12; // cl unsigned __int8 v13; // dl char v14; // cl unsigned __int8 v15; // bl unsigned __int8 v16; // dl _WORD *result; // eax int v18; // edi unsigned __int8 *v19; // ecx int v20; // edx char v21; // [esp+Ch] [ebp-234h] __int16 v22; // [esp+10h] [ebp-230h] unsigned int v23; // [esp+18h] [ebp-228h] __int16 v24; // [esp+1Ch] [ebp-224h] char v25; // [esp+20h] [ebp-220h] __int16 v26; // [esp+24h] [ebp-21Ch] char v27; // [esp+28h] [ebp-218h] __int16 v28; // [esp+2Ch] [ebp-214h] char v29; // [esp+30h] [ebp-210h] char v30; // [esp+39h] [ebp-207h] __int16 v31; // [esp+3Ah] [ebp-206h] __int16 v32; // [esp+3Ch] [ebp-204h] __int16 v33; // [esp+3Eh] [ebp-202h] __int16 v34[254]; // [esp+40h] [ebp-200h] v7 = *(_DWORD *)(a5 + 20); v30 = *((_BYTE *)a6 + 22); v27 = *((_BYTE *)a6 + 18); v26 = a6[4]; LOBYTE(v31) = *((_BYTE *)a6 + 21); v25 = *((_BYTE *)a6 + 17); v24 = a6[2]; HIBYTE(v31) = *((_BYTE *)a6 + 20); v29 = *((_BYTE *)a6 + 16); v28 = *a6; v8 = 0xFFu >> *((_BYTE *)a6 + 23); v9 = 0; v23 = 0xFFu >> *((_BYTE *)a6 + 23); v21 = *((_BYTE *)a6 + 19); v22 = a6[6]; v10 = (_BYTE *)(v7 + 1); while ( 1 ) { v11 = v22 & ((_WORD)v8 << v21); v12 = v31; *(&v32 + v9) = v11 | v24 & ((unsigned __int8)(*v10 >> v31) << v25) | v28 & ((unsigned __int8)(*(v10 - 1) >> SHIBYTE(v31)) << v29) | v26 & ((unsigned __int8)(v10[1] >> v30) << v27); v13 = v10[8] >> v31; *(&v33 + v9) = v11 | v28 & ((unsigned __int8)(v10[3] >> SHIBYTE(v31)) << v29) | v26 & ((unsigned __int8)(v10[5] >> v30) << v27) | v24 & ((unsigned __int8)(v10[4] >> v12) << v25); v14 = v31; v15 = v10[13]; v34[v9] = v11 | v28 & ((unsigned __int8)(v10[7] >> SHIBYTE(v31)) << v29) | v26 & ((unsigned __int8)(v10[9] >> v30) << v27) | v24 & (v13 << v25); v16 = v10[12] >> v14; v9 += 4; v10 += 16; *(&v31 + v9) = v11 | v28 & ((unsigned __int8)(*(v10 - 5) >> SHIBYTE(v31)) << v29) | v26 & ((unsigned __int8)(v15 >> v30) << v27) | v24 & (v16 << v25); if ( v9 >= 0x100 ) break; LOWORD(v8) = v23; } result = a4; if ( a2 ) { v18 = a2; v19 = a7; do { if ( a1 ) { v20 = a1; do { *result = *(&v32 + *v19); ++result; ++v19; --v20; } while ( v20 ); } --v18; } while ( v18 ); } return result; } // 9549F0: using guessed type __int16 var_200[254]; //----- (00954CE0) -------------------------------------------------------- _BYTE *__cdecl sub_954CE0(int a1, _BYTE *a2, int a3, _BYTE *a4, int a5, int a6, unsigned __int8 *a7) { int v7; // ecx _BYTE *result; // eax unsigned __int8 *v9; // esi int v10; // edi unsigned __int8 *v11; // esi int v12; // edi _BYTE *v13; // [esp+18h] [ebp+18h] _BYTE *v14; // [esp+18h] [ebp+18h] v7 = *(_DWORD *)(a5 + 20); result = (_BYTE *)a6; if ( *(_DWORD *)(a6 + 4) == 65280 ) { result = *(_BYTE **)a6; if ( *(_DWORD *)a6 == 255 ) { result = a2; if ( a2 ) { v9 = a7; v13 = a2; result = a4; do { if ( a1 ) { v10 = a1; do { *result = *(_BYTE *)(v7 + 4 * *v9); result[1] = *(_BYTE *)(v7 + 4 * *v9 + 1); result[2] = *(_BYTE *)(v7 + 4 * *v9 + 2); result += 3; ++v9; --v10; } while ( v10 ); } --v13; } while ( v13 ); } } else if ( result == (_BYTE *)16711680 ) { result = a2; if ( a2 ) { v11 = a7; v14 = a2; result = a4; do { if ( a1 ) { v12 = a1; do { *result = *(_BYTE *)(v7 + 4 * *v11 + 2); result[1] = *(_BYTE *)(v7 + 4 * *v11 + 1); result[2] = *(_BYTE *)(v7 + 4 * *v11); result += 3; ++v11; --v12; } while ( v12 ); } --v14; } while ( v14 ); } } } return result; } //----- (00954DB0) -------------------------------------------------------- _DWORD *__cdecl sub_954DB0(int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, unsigned __int8 *a7) { int v7; // esi char v8; // bl unsigned int v9; // edx unsigned __int8 *v10; // eax unsigned int v11; // edi unsigned int v12; // esi unsigned int v13; // edi unsigned int v14; // esi unsigned int v15; // edi _DWORD *result; // eax int v17; // edi unsigned __int8 *v18; // ecx int v19; // edx char *v20; // [esp+Ch] [ebp-438h] char *v21; // [esp+10h] [ebp-434h] char *v22; // [esp+18h] [ebp-42Ch] unsigned int v23; // [esp+1Ch] [ebp-428h] char v24; // [esp+20h] [ebp-424h] char v25; // [esp+24h] [ebp-420h] int v26; // [esp+28h] [ebp-41Ch] char v27; // [esp+2Ch] [ebp-418h] char v28; // [esp+30h] [ebp-414h] int v29; // [esp+34h] [ebp-410h] int v30; // [esp+38h] [ebp-40Ch] char v31; // [esp+3Ch] [ebp-408h] int v32; // [esp+40h] [ebp-404h] char v33[4]; // [esp+43h] [ebp-401h] char v34[4]; // [esp+47h] [ebp-3FDh] char v35[1013]; // [esp+4Bh] [ebp-3F9h] v7 = *(_DWORD *)(a5 + 20); v30 = a6[2]; v31 = *((_BYTE *)a6 + 18); v27 = *((_BYTE *)a6 + 17); v24 = *((_BYTE *)a6 + 21); v28 = *((_BYTE *)a6 + 20); v8 = *((_BYTE *)a6 + 22); v29 = a6[1]; v26 = *a6; v25 = *((_BYTE *)a6 + 16); v20 = &v33[-v7]; v9 = a6[3] & (0xFFu >> *((_BYTE *)a6 + 23) << *((_BYTE *)a6 + 19)); v21 = &v34[-v7]; v23 = 0; v10 = (unsigned __int8 *)(v7 + 1); v22 = &v35[-v7]; do { *(&v32 + v23) = v9 | v29 & ((unsigned int)*v10 >> v24 << v27) | v30 & ((unsigned int)v10[1] >> v8 << v31) | v26 & ((unsigned int)*(v10 - 1) >> v28 << v25); v11 = v10[8]; *(_DWORD *)&v10[(_DWORD)v20] = v9 | v30 & ((unsigned int)v10[5] >> v8 << v31) | v29 & ((unsigned int)v10[4] >> v24 << v27) | v26 & ((unsigned int)v10[3] >> v28 << v25); v12 = v30 & ((unsigned int)v10[9] >> v8 << v31) | v29 & (v11 >> v24 << v27) | v26 & ((unsigned int)v10[7] >> v28 << v25); v13 = v10[12]; *(_DWORD *)&v10[(_DWORD)v21] = v9 | v12; v14 = v29 & (v13 >> v24 << v27) | v26 & ((unsigned int)v10[11] >> v28 << v25); v15 = (unsigned int)v10[13] >> v8; v10 += 16; *(_DWORD *)&v10[(_DWORD)v22 - 16] = v9 | v30 & (v15 << v31) | v14; v23 += 4; } while ( v23 < 0x100 ); result = a4; if ( a2 ) { v17 = a2; v18 = a7; do { if ( a1 ) { v19 = a1; do { *result = *(&v32 + *v18); ++result; ++v18; --v19; } while ( v19 ); } --v17; } while ( v17 ); } return result; } // 954DB0: using guessed type char var_401[4]; // 954DB0: using guessed type char var_3FD[4]; // 954DB0: using guessed type char var_3F9[1013]; //----- (00955050) -------------------------------------------------------- _WORD *__cdecl sub_955050(int a1, int a2, int a3, _WORD *a4, int a5, __int16 *a6, unsigned __int8 *a7) { int v7; // edi char v8; // dl unsigned int v9; // esi _BYTE *v10; // eax unsigned __int8 v11; // bl __int16 v12; // di unsigned __int8 v13; // bl __int16 v14; // di unsigned __int8 v15; // bl __int16 v16; // di unsigned __int8 v17; // bl _WORD *result; // eax int v19; // edi unsigned __int8 *v20; // ecx int v21; // edx char v22; // [esp+10h] [ebp-228h] __int16 v23; // [esp+14h] [ebp-224h] char v24; // [esp+18h] [ebp-220h] __int16 v25; // [esp+1Ch] [ebp-21Ch] char v26; // [esp+20h] [ebp-218h] char v27; // [esp+24h] [ebp-214h] __int16 v28; // [esp+28h] [ebp-210h] __int16 v29; // [esp+2Ch] [ebp-20Ch] int v30; // [esp+30h] [ebp-208h] char v31; // [esp+31h] [ebp-207h] __int16 v32; // [esp+32h] [ebp-206h] __int16 v33; // [esp+34h] [ebp-204h] __int16 v34[255]; // [esp+36h] [ebp-202h] v7 = *(_DWORD *)(a5 + 20); v27 = *((_BYTE *)a6 + 19); v25 = a6[6]; LOBYTE(v32) = *((_BYTE *)a6 + 22); v8 = *((_BYTE *)a6 + 23); v22 = *((_BYTE *)a6 + 18); v28 = a6[4]; HIBYTE(v32) = *((_BYTE *)a6 + 21); v24 = *((_BYTE *)a6 + 17); v29 = a6[2]; v31 = *((_BYTE *)a6 + 20); v23 = *a6; v9 = 0; v26 = *((_BYTE *)a6 + 16); v10 = (_BYTE *)(v7 + 2); do { v11 = v10[2] >> v31; *(&v33 + v9) = v28 & ((unsigned __int8)(*v10 >> v32) << v22) | v25 & ((unsigned __int8)(v10[1] >> v8) << v27) | v29 & ((unsigned __int8)(*(v10 - 1) >> SHIBYTE(v32)) << v24) | v23 & ((unsigned __int8)(*(v10 - 2) >> v31) << v26); v12 = v11 << v26; v13 = v10[6] >> v31; v34[v9] = v25 & ((unsigned __int8)(v10[5] >> v8) << v27) | v28 & ((unsigned __int8)(v10[4] >> v32) << v22) | v29 & ((unsigned __int8)(v10[3] >> SHIBYTE(v32)) << v24) | v23 & v12; v14 = v29 & ((unsigned __int8)(v10[7] >> SHIBYTE(v32)) << v24) | v23 & (v13 << v26); v15 = v10[8] >> v32; v9 += 4; v10 += 16; v16 = v25 & ((unsigned __int8)(*(v10 - 7) >> v8) << v27) | v28 & (v15 << v22) | v14; v17 = *(v10 - 6) >> v31; *((_WORD *)&v30 + v9) = v16; *(&v32 + v9) = v25 & ((unsigned __int8)(*(v10 - 3) >> v8) << v27) | v28 & ((unsigned __int8)(*(v10 - 4) >> v32) << v22) | v29 & ((unsigned __int8)(*(v10 - 5) >> SHIBYTE(v32)) << v24) | v23 & (v17 << v26); } while ( v9 < 0x100 ); result = a4; if ( a2 ) { v19 = a2; v20 = a7; do { if ( a1 ) { v21 = a1; do { *result = *(&v33 + *v20); ++result; ++v20; --v21; } while ( v21 ); } --v19; } while ( v19 ); } return result; } // 955050: using guessed type __int16 var_202[255]; //----- (00955380) -------------------------------------------------------- _DWORD *__cdecl sub_955380(int a1, int a2, int a3, _DWORD *a4, int a5, int *a6, unsigned __int8 *a7) { int v7; // edi char v8; // dl char v9; // si unsigned __int8 *v10; // eax unsigned int v11; // ebx unsigned int v12; // edi unsigned int v13; // ebx int v14; // edi unsigned int v15; // ebx _DWORD *result; // eax int v17; // edi unsigned __int8 *v18; // ecx int v19; // edx char *v20; // [esp+Ch] [ebp-440h] char *v21; // [esp+10h] [ebp-43Ch] char *v22; // [esp+18h] [ebp-434h] unsigned int v23; // [esp+1Ch] [ebp-430h] char v24; // [esp+20h] [ebp-42Ch] char v25; // [esp+24h] [ebp-428h] char v26; // [esp+28h] [ebp-424h] int v27; // [esp+2Ch] [ebp-420h] char v28; // [esp+30h] [ebp-41Ch] int v29; // [esp+34h] [ebp-418h] int v30; // [esp+38h] [ebp-414h] int v31; // [esp+3Ch] [ebp-410h] char v32; // [esp+40h] [ebp-40Ch] char v33; // [esp+44h] [ebp-408h] int v34; // [esp+48h] [ebp-404h] char v35[4]; // [esp+4Ah] [ebp-402h] char v36[4]; // [esp+4Eh] [ebp-3FEh] char v37[1014]; // [esp+52h] [ebp-3FAh] v7 = *(_DWORD *)(a5 + 20); v29 = a6[3]; v33 = *((_BYTE *)a6 + 22); v32 = *((_BYTE *)a6 + 18); v31 = a6[2]; v26 = *((_BYTE *)a6 + 21); v8 = *((_BYTE *)a6 + 23); v9 = *((_BYTE *)a6 + 19); v24 = *((_BYTE *)a6 + 17); v27 = a6[1]; v25 = *((_BYTE *)a6 + 20); v28 = *((_BYTE *)a6 + 16); v20 = &v35[-v7]; v21 = &v36[-v7]; v30 = *a6; v23 = 0; v10 = (unsigned __int8 *)(v7 + 2); v22 = &v37[-v7]; do { *(&v34 + v23) = v31 & ((unsigned int)*v10 >> v33 << v32) | v27 & ((unsigned int)*(v10 - 1) >> v26 << v24) | v30 & ((unsigned int)*(v10 - 2) >> v25 << v28) | v29 & ((unsigned int)v10[1] >> v8 << v9); v11 = v10[6]; *(_DWORD *)&v10[(_DWORD)v20] = v31 & ((unsigned int)v10[4] >> v33 << v32) | v27 & ((unsigned int)v10[3] >> v26 << v24) | v30 & ((unsigned int)v10[2] >> v25 << v28) | v29 & ((unsigned int)v10[5] >> v8 << v9); v12 = v27 & ((unsigned int)v10[7] >> v26 << v24) | v30 & (v11 >> v25 << v28) | v29 & ((unsigned int)v10[9] >> v8 << v9); v13 = (unsigned int)v10[8] >> v33 << v32; v10 += 16; v14 = v31 & v13 | v12; v15 = *(v10 - 6); *(_DWORD *)&v10[(_DWORD)v21 - 16] = v14; *(_DWORD *)&v10[(_DWORD)v22 - 16] = v31 & ((unsigned int)*(v10 - 4) >> v33 << v32) | v27 & ((unsigned int)*(v10 - 5) >> v26 << v24) | v30 & (v15 >> v25 << v28) | v29 & ((unsigned int)*(v10 - 3) >> v8 << v9); v23 += 4; } while ( v23 < 0x100 ); result = a4; if ( a2 ) { v17 = a2; v18 = a7; do { if ( a1 ) { v19 = a1; do { *result = *(&v34 + *v18); ++result; ++v18; --v19; } while ( v19 ); } --v17; } while ( v17 ); } return result; } // 955380: using guessed type char var_402[4]; // 955380: using guessed type char var_3FE[4]; // 955380: using guessed type char var_3FA[1014]; //----- (00955680) -------------------------------------------------------- int __thiscall sub_955680(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiImageReader *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiImageReader *>::`vftable'; return result; } // A4A13C: using guessed type void *NiTListBase,NiImageReader *>::`vftable'; // A4A14C: using guessed type void *NiTPointerListBase,NiImageReader *>::`vftable'; //----- (009556C0) -------------------------------------------------------- void *__thiscall sub_9556C0(void *this, char a2) { void *v2; // esi v2 = this; sub_955680(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009556F0) -------------------------------------------------------- LONG __thiscall sub_9556F0(_DWORD *this) { _DWORD *v2; // ebx int *v3; // eax int v4; // ecx void (__thiscall ***v5)(_DWORD, signed int); // edi v2 = this; *this = &NiDevImageConverter::`vftable'; while ( v2[392] ) { v3 = (int *)v2[390]; v4 = *v3; v2[390] = *v3; if ( v4 ) *(_DWORD *)(v4 + 4) = 0; else v2[391] = 0; v5 = (void (__thiscall ***)(_DWORD, signed int))v3[2]; (*(void (__thiscall **)(_DWORD *, int *))(v2[389] + 8))(v2 + 389, v3); --v2[392]; if ( v5 ) (**v5)(v5, 1); } sub_955680(v2 + 389); nullsub_6(v2 + 257); *v2 = &NiImageConverter::`vftable'; if ( dword_BA4780 ) operator delete(dword_BA4780); dword_BA4780 = 0; sub_87E9B0(v2 + 2); *v2 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A24D18: using guessed type void *NiImageConverter::`vftable'; // A4A16C: using guessed type void *NiDevImageConverter::`vftable'; //----- (00955790) -------------------------------------------------------- int __thiscall sub_955790(char *this) { return (int)(this + 1556); } //----- (009557A0) -------------------------------------------------------- _DWORD *__thiscall sub_9557A0(_DWORD *this, int a2) { _DWORD *v2; // esi _DWORD *result; // eax int v4; // ecx v2 = this + 389; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(this[389] + 4))(this + 389); result[2] = a2; result[1] = 0; *result = v2[1]; v4 = v2[1]; if ( v4 ) { *(_DWORD *)(v4 + 4) = result; ++v2[3]; } else { ++v2[3]; v2[2] = result; } v2[1] = result; return result; } //----- (009557F0) -------------------------------------------------------- _DWORD *__thiscall sub_9557F0(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { bool v5; // zf _DWORD *v6; // ebx int v7; // esi signed int v8; // ecx _DWORD *v9; // eax _DWORD *v10; // edi int v11; // eax int v12; // eax _DWORD *v13; // eax _DWORD *result; // eax int v15; // eax _DWORD *v16; // edi int v17; // eax void (__thiscall ***v18)(_DWORD, signed int); // esi void (__thiscall ***v19)(_DWORD, signed int); // esi void (__thiscall ***v20)(_DWORD, signed int); // esi void (__thiscall ***v21)(_DWORD, signed int); // esi _DWORD *v22; // [esp+8h] [ebp-8h] int v23; // [esp+Ch] [ebp-4h] v5 = (*(_BYTE *)(a2 + 8) & 1) == 0; v6 = this; v22 = this; v23 = 0; v7 = a2; if ( v5 || !(*(_BYTE *)a3 & 1) ) return 0; v8 = *(_DWORD *)(a2 + 12); if ( v8 >= 4 && v8 <= 6 && a3[1] != *(_DWORD *)(a2 + 12) ) { v9 = sub_958870(v6 + 257, a2); sub_56FF80(&v23, (int)v9); v7 = v23; } v10 = a4; a2 = 0; if ( (_BYTE)a5 ) { if ( *(_DWORD *)(v7 + 96) <= 1u ) { v11 = **(_DWORD **)(v7 + 84); if ( v11 ) { if ( ((v11 - 1) & v11) == 0 && sub_867460(**(_DWORD **)(v7 + 88)) ) { v12 = a3[1]; if ( !v12 || v12 == 1 || v12 == 8 || v12 == 9 ) { v13 = sub_953910(v6, v7, v10); sub_56FF80(&a2, (int)v13); if ( a2 ) v7 = a2; } } } } } if ( v10 && sub_75A550(v10 + 2, (int)a3) && (!(_BYTE)a5 || v10[24] > 1u) && (v10 == (_DWORD *)v7 || (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, int, signed int))(*v6 + 44))(v6, v10, v7, -1)) ) { sub_410C00(&a2); sub_410C00(&v23); result = v10; } else { v15 = a3[1]; v16 = 0; a5 = 0; if ( v15 == 8 || v15 == 9 ) { v17 = (*(int (__thiscall **)(_DWORD *, int, _DWORD *))(*v6 + 48))(v6, v7, a3); sub_56FF80(&a5, v17); v16 = a5; if ( a5 ) v7 = (int)a5; } a5 = operator new(0x70u); if ( a5 ) { v6 = v22; a5 = sub_8698C0( a5, **(_DWORD **)(v7 + 84), **(_DWORD **)(v7 + 88), a3, *(_DWORD *)(v7 + 96), *(_DWORD *)(v7 + 108)); } else { a5 = 0; } if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD *, int, signed int))(*v6 + 44))(v6, a5, v7, -1) ) { if ( v16 && !InterlockedDecrement(v16 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v16)(v16, 1); v18 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v18)(v18, 1); v19 = (void (__thiscall ***)(_DWORD, signed int))v23; if ( v23 ) { if ( !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) (**v19)(v19, 1); } result = a5; } else { if ( v16 && !InterlockedDecrement(v16 + 1) ) (*(void (__thiscall **)(_DWORD *, signed int))*v16)(v16, 1); v20 = (void (__thiscall ***)(_DWORD, signed int))a2; if ( a2 && !InterlockedDecrement((volatile LONG *)(a2 + 4)) ) (**v20)(v20, 1); v21 = (void (__thiscall ***)(_DWORD, signed int))v23; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) (**v21)(v21, 1); result = 0; } } return result; } //----- (00955A60) -------------------------------------------------------- char __stdcall sub_955A60(int a1, int a2, unsigned int a3) { int v3; // esi int v4; // edi unsigned int v5; // ebx int v6; // eax unsigned int v7; // eax int v8; // ST1C_4 unsigned int i; // ebx int v10; // eax int v11; // ecx _DWORD *v12; // ecx _DWORD *v13; // eax _BYTE *v14; // eax int v16; // edx int v17; // ebx unsigned int j; // ebx int v19; // eax int v20; // ecx _DWORD *v21; // ecx _DWORD *v22; // eax _BYTE *v23; // eax int v24; // edi unsigned int k; // ebx int v26; // eax int v27; // ecx _DWORD *v28; // eax _BYTE *v29; // eax unsigned int m; // ebx int v31; // eax int v32; // ecx unsigned int l; // ebx int v34; // eax int v35; // ecx _DWORD *v36; // eax _BYTE *v37; // eax unsigned int n; // ebx int v39; // eax int v40; // [esp+Ch] [ebp-3Ch] int v41; // [esp+10h] [ebp-38h] char v42; // [esp+24h] [ebp-24h] int v43; // [esp+30h] [ebp-18h] int v44; // [esp+3Ch] [ebp-Ch] unsigned int v45; // [esp+40h] [ebp-8h] unsigned int v46; // [esp+44h] [ebp-4h] unsigned int v47; // [esp+50h] [ebp+8h] unsigned int v48; // [esp+54h] [ebp+Ch] int v49; // [esp+54h] [ebp+Ch] unsigned int v50; // [esp+54h] [ebp+Ch] void *v51; // [esp+54h] [ebp+Ch] unsigned int v52; // [esp+54h] [ebp+Ch] unsigned int v53; // [esp+54h] [ebp+Ch] unsigned int v54; // [esp+54h] [ebp+Ch] v3 = a2; v4 = a1; if ( **(_DWORD **)(a2 + 84) != **(_DWORD **)(a1 + 84) ) return 0; if ( **(_DWORD **)(a2 + 88) != **(_DWORD **)(a1 + 88) ) return 0; v5 = *(_DWORD *)(a2 + 108); v46 = v5; if ( v5 != *(_DWORD *)(a1 + 108) ) return 0; v6 = a3; if ( a3 == -1 ) { v7 = *(_DWORD *)(a1 + 96); if ( *(_DWORD *)(a2 + 96) < v7 ) return 0; a3 = 0; v6 = v7 - 1; } else if ( a3 >= *(_DWORD *)(a2 + 96) || a3 >= *(_DWORD *)(a1 + 96) ) { return 0; } v8 = a1 + 8; v47 = v6; if ( sub_75A550((_DWORD *)(a2 + 8), v8) ) { v48 = 0; if ( v5 ) { do { for ( i = a3; i <= v47; ++i ) { v10 = *(_DWORD *)(v3 + 92); v11 = *(_DWORD *)(v4 + 92); memcpy_s( (void *)(*(_DWORD *)(v4 + 80) + *(_DWORD *)(v11 + 4 * i) + v48 * *(_DWORD *)(v11 + 4 * *(_DWORD *)(v4 + 96))), *(_DWORD *)(v11 + 4 * i + 4) - *(_DWORD *)(v11 + 4 * i), (const void *)(*(_DWORD *)(v3 + 80) + *(_DWORD *)(v10 + 4 * i) + v48 * *(_DWORD *)(v10 + 4 * *(_DWORD *)(v3 + 96))), *(_DWORD *)(v10 + 4 * i + 4) - *(_DWORD *)(v10 + 4 * i)); } ++v48; } while ( v48 < v46 ); } if ( *(_DWORD *)(v3 + 76) ) { v12 = *(_DWORD **)(v4 + 76); if ( !v12 ) { v13 = operator new(0x24u); if ( v13 ) { v14 = sub_875690(v13, *(_DWORD *)(v3 + 76)); sub_75A740((_DWORD *)v4, (int)v14); } else { sub_75A740((_DWORD *)v4, 0); } return 1; } sub_875560(v12, *(_DWORD *)(v3 + 76)); } return 1; } v16 = *(unsigned __int8 *)(v4 + 9); v17 = *(_DWORD *)(v4 + 12); v44 = *(_DWORD *)(a2 + 12); v45 = *(unsigned __int8 *)(a2 + 9); v49 = v16; sub_9530D0(&v40, (char *)(v4 + 8)); sub_9530D0((int *)&v42, (char *)(v3 + 8)); if ( v17 == 4 || v17 == 5 || v17 == 6 || v49 == 24 && (v41 != 65280 || v40 != 255 && v40 != 16711680) ) return 0; if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABD9B0) ) { if ( !*(_DWORD *)(v3 + 76) ) return 0; if ( v17 && v17 != 1 ) { if ( !sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABD9F8) ) return 0; v50 = 0; if ( v46 ) { do { for ( j = a3; j <= v47; ++j ) { v19 = *(_DWORD *)(v3 + 92); v20 = *(_DWORD *)(v4 + 92); memcpy_s( (void *)(*(_DWORD *)(v4 + 80) + *(_DWORD *)(v20 + 4 * j) + v50 * *(_DWORD *)(v20 + 4 * *(_DWORD *)(v4 + 96))), *(_DWORD *)(v20 + 4 * j + 4) - *(_DWORD *)(v20 + 4 * j), (const void *)(*(_DWORD *)(v3 + 80) + *(_DWORD *)(v19 + 4 * j) + v50 * *(_DWORD *)(v19 + 4 * *(_DWORD *)(v3 + 96))), *(_DWORD *)(v19 + 4 * j + 4) - *(_DWORD *)(v19 + 4 * j)); } ++v50; } while ( v50 < v46 ); } goto LABEL_38; } if ( v49 == 24 ) { v51 = sub_954620; } else { if ( v49 != 32 ) return 0; v51 = sub_9543D0; } goto LABEL_160; } if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABD9F8) ) { if ( !*(_DWORD *)(v3 + 76) ) return 0; if ( !v17 || v17 == 1 ) { if ( v49 == 24 ) { v51 = sub_954620; } else { if ( v49 != 32 ) return 0; v51 = sub_954740; } goto LABEL_160; } if ( !sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABD9B0) ) return 0; v52 = 0; if ( v46 ) { do { for ( k = a3; k <= v47; ++k ) { v26 = *(_DWORD *)(v3 + 92); v27 = *(_DWORD *)(v4 + 92); memcpy_s( (void *)(*(_DWORD *)(v27 + 4 * k) + *(_DWORD *)(v4 + 80) + v52 * *(_DWORD *)(v27 + 4 * *(_DWORD *)(v4 + 96))), *(_DWORD *)(v27 + 4 * k + 4) - *(_DWORD *)(v27 + 4 * k), (const void *)(*(_DWORD *)(v3 + 80) + *(_DWORD *)(v26 + 4 * k) + v52 * *(_DWORD *)(v26 + 4 * *(_DWORD *)(v3 + 96))), *(_DWORD *)(v26 + 4 * k + 4) - *(_DWORD *)(v26 + 4 * k)); } ++v52; } while ( v52 < v46 ); } if ( !*(_DWORD *)(v3 + 76) ) return 0; v28 = operator new(0x24u); if ( v28 ) { v29 = sub_875720(v28, 0, 16, *(void **)(*(_DWORD *)(v3 + 76) + 20)); sub_75A740((_DWORD *)v4, (int)v29); return 1; } LABEL_63: sub_75A740((_DWORD *)v4, 0); return 1; } if ( !sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDA40) ) { if ( !sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDA88) ) { if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDB18) ) { if ( v17 && v17 != 1 ) return 0; switch ( v49 ) { case 16: v51 = sub_952570; break; case 24: v51 = sub_952650; break; case 32: v51 = sub_9526E0; break; default: return 0; } } else if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDAD0) ) { if ( v17 && v17 != 1 ) return 0; switch ( v49 ) { case 16: v51 = sub_9527B0; break; case 24: v51 = sub_952870; break; case 32: v51 = sub_952920; break; default: return 0; } } else if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDBF0) ) { if ( v17 != 8 && v17 != 9 ) return 0; if ( v49 == 16 ) { v51 = sub_953040; } else { if ( v49 != 32 ) return 0; v51 = sub_952FB0; } } else if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDC38) ) { if ( v17 != 8 && v17 != 9 ) return 0; if ( v49 == 16 ) { v51 = sub_952EF0; } else { if ( v49 != 32 ) return 0; v51 = sub_952E50; } } else if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDB60) && sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDBA8) ) { v51 = sub_952440; } else if ( sub_75A550((_DWORD *)(v3 + 8), (int)&unk_ABDBA8) && sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDB60) ) { v51 = sub_952560; } else { if ( v44 && v44 != 1 ) return 0; if ( sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDAD0) ) { switch ( v45 ) { case 0x10u: if ( v43 ) v51 = sub_952A80; else v51 = sub_952B10; break; case 0x18u: v51 = sub_952C20; break; case 0x20u: if ( v43 ) v51 = sub_952D40; else v51 = sub_952DD0; break; default: return 0; } } else { if ( !sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDB18) ) return 0; switch ( v45 ) { case 0x10u: v51 = sub_952A00; break; case 0x18u: v51 = sub_952B90; break; case 0x20u: v51 = sub_952CC0; break; default: return 0; } } } goto LABEL_160; } if ( !*(_DWORD *)(v3 + 76) ) return 0; if ( !v17 || v17 == 1 ) { switch ( v49 ) { case 16: v51 = sub_955050; break; case 24: v51 = sub_954CE0; break; case 32: v51 = sub_955380; break; default: return 0; } goto LABEL_160; } if ( !sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDA40) ) return 0; v54 = 0; if ( v46 ) { do { for ( l = a3; l <= v47; ++l ) { v34 = *(_DWORD *)(v3 + 92); v35 = *(_DWORD *)(v4 + 92); memcpy_s( (void *)(*(_DWORD *)(v4 + 80) + *(_DWORD *)(v35 + 4 * l) + v54 * *(_DWORD *)(v35 + 4 * *(_DWORD *)(v4 + 96))), *(_DWORD *)(v35 + 4 * l + 4) - *(_DWORD *)(v35 + 4 * l), (const void *)(*(_DWORD *)(v3 + 80) + *(_DWORD *)(v34 + 4 * l) + v54 * *(_DWORD *)(v34 + 4 * *(_DWORD *)(v3 + 96))), *(_DWORD *)(v34 + 4 * l + 4) - *(_DWORD *)(v34 + 4 * l)); } ++v54; } while ( v54 < v46 ); } if ( !*(_DWORD *)(v3 + 76) ) return 0; v36 = operator new(0x24u); if ( v36 ) { v37 = sub_875720(v36, 0, 256, *(void **)(*(_DWORD *)(v3 + 76) + 20)); sub_75A740((_DWORD *)v4, (int)v37); return 1; } goto LABEL_63; } if ( !*(_DWORD *)(v3 + 76) ) return 0; if ( v17 && v17 != 1 ) { if ( !sub_75A550((_DWORD *)(v4 + 8), (int)&unk_ABDA88) ) return 0; v53 = 0; if ( v46 ) { do { for ( m = a3; m <= v47; ++m ) { v31 = *(_DWORD *)(v3 + 92); v32 = *(_DWORD *)(v4 + 92); memcpy_s( (void *)(*(_DWORD *)(v32 + 4 * m) + *(_DWORD *)(v4 + 80) + v53 * *(_DWORD *)(v32 + 4 * *(_DWORD *)(v4 + 96))), *(_DWORD *)(v32 + 4 * m + 4) - *(_DWORD *)(v32 + 4 * m), (const void *)(*(_DWORD *)(v3 + 80) + *(_DWORD *)(v31 + 4 * m) + v53 * *(_DWORD *)(v31 + 4 * *(_DWORD *)(v3 + 96))), *(_DWORD *)(v31 + 4 * m + 4) - *(_DWORD *)(v31 + 4 * m)); } ++v53; } while ( v53 < v46 ); } LABEL_38: if ( *(_DWORD *)(v3 + 76) ) { v21 = *(_DWORD **)(v4 + 76); if ( v21 ) { sub_875560(v21, *(_DWORD *)(v3 + 76)); } else { v22 = operator new(0x24u); if ( v22 ) { v23 = sub_875690(v22, *(_DWORD *)(v3 + 76)); sub_75A740((_DWORD *)v4, (int)v23); } else { sub_75A740((_DWORD *)v4, 0); } } v24 = *(_DWORD *)(v4 + 76); if ( *(_DWORD *)(v24 + 12) ) *(_BYTE *)(*(_DWORD *)(v24 + 20) + 3) = -1; return 1; } return 0; } switch ( v49 ) { case 16: v51 = sub_9549F0; break; case 24: v51 = sub_954CE0; break; case 32: v51 = sub_954DB0; break; default: return 0; } LABEL_160: v45 = 0; if ( v46 ) { do { for ( n = a3; n <= v47; ++n ) { v39 = *(_DWORD *)(v4 + 92); ((void (__cdecl *)(_DWORD, _DWORD, int, unsigned int, _DWORD, int *, unsigned int, char *))v51)( *(_DWORD *)(*(_DWORD *)(v4 + 84) + 4 * n), *(_DWORD *)(*(_DWORD *)(v4 + 88) + 4 * n), *(_DWORD *)(v39 + 4 * n + 4) - *(_DWORD *)(v39 + 4 * n), *(_DWORD *)(v39 + 4 * n) + *(_DWORD *)(v4 + 80) + v45 * *(_DWORD *)(v39 + 4 * *(_DWORD *)(v4 + 96)), *(_DWORD *)(v3 + 76), &v40, *(_DWORD *)(v3 + 80) + *(_DWORD *)(*(_DWORD *)(v3 + 92) + 4 * n) + v45 * *(_DWORD *)(*(_DWORD *)(v3 + 92) + 4 * *(_DWORD *)(v3 + 96)), &v42); } ++v45; } while ( v45 < v46 ); } return 1; } //----- (009563A0) -------------------------------------------------------- _DWORD *__thiscall sub_9563A0(void *this, _DWORD *a2, unsigned int a3, int a4) { int v4; // ebx bool v5; // zf void *v6; // esi _DWORD *v7; // eax _DWORD *v8; // edi int v9; // esi int v11; // eax int v12; // ST14_4 int v13; // ebx rsize_t v14; // eax _DWORD *v15; // ecx int v16; // [esp+Ch] [ebp-6Ch] _DWORD *v17; // [esp+10h] [ebp-68h] void *v18; // [esp+14h] [ebp-64h] unsigned int v19; // [esp+18h] [ebp-60h] int v20; // [esp+1Ch] [ebp-5Ch] unsigned int v21; // [esp+20h] [ebp-58h] unsigned int v22; // [esp+24h] [ebp-54h] char v23; // [esp+2Bh] [ebp-4Dh] int v24; // [esp+2Ch] [ebp-4Ch] char v25; // [esp+30h] [ebp-48h] v4 = (int)a2; v5 = *a2 == 0; v6 = this; v18 = this; v17 = a2; v22 = a3; v20 = a4; if ( !v5 ) { sub_86A420(&v25); if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, char *, char *, unsigned int *, unsigned int *, int *))(*(_DWORD *)v6 + 4))( v6, *a2, &v25, &v23, &v19, &v21, &v16) ) { if ( v16 == 1 ) { v7 = operator new(0x70u); if ( v7 ) { v8 = sub_8698C0(v7, v19, v21, &v25, a3, 1); if ( v8 ) { v9 = 0; if ( !v22 ) return v8; while ( 1 ) { v11 = *(_DWORD *)(v4 + 4 * v9); if ( !v11 || ((v24 = 0, v9) || !v20 ? (v12 = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)v18 + 8))(v11, 0), sub_56FF80(&v24, v12)) : sub_56FF80(&v24, v20), (v13 = v24) == 0) ) { (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); return 0; } v14 = *(_DWORD *)(v8[23] + 4 * v9 + 4) - *(_DWORD *)(v8[23] + 4 * v9); v15 = *(_DWORD **)(v24 + 92); if ( v14 != v15[1] - *v15 ) break; memcpy_s( (void *)(v8[20] + *(_DWORD *)(v8[23] + 4 * v9)), v14, (const void *)(*v15 + *(_DWORD *)(v24 + 80)), *(_DWORD *)(v8[23] + 4 * v9 + 4) - *(_DWORD *)(v8[23] + 4 * v9)); if ( !v9 ) { if ( (unsigned __int8)sub_93A4F0(&v25) ) sub_75A740(v8, *(_DWORD *)(v13 + 76)); } sub_410C00(&v24); if ( ++v9 >= v22 ) return v8; v4 = (int)v17; } (*(void (__thiscall **)(_DWORD *, signed int))*v8)(v8, 1); sub_410C00(&v24); } } } } } return 0; } //----- (00956540) -------------------------------------------------------- char *__thiscall sub_956540(char *this) { char *v1; // esi _DWORD *v2; // esi char *v3; // eax char *v4; // edi _DWORD *v5; // eax int v6; // ecx char *v7; // eax _DWORD *v8; // edi _DWORD *v9; // eax int v10; // ecx char *v11; // eax _DWORD *v12; // edi _DWORD *v13; // eax int v14; // ecx char *v15; // eax char *v16; // edi _DWORD *v17; // eax int v18; // ecx char *v19; // eax _DWORD *v20; // edi _DWORD *v21; // eax int v22; // ecx char *v24; // [esp+Ch] [ebp-4h] v1 = this; v24 = this; sub_8667D0(this); *(_DWORD *)v1 = &NiDevImageConverter::`vftable'; sub_9587C0((_DWORD *)v1 + 257); v2 = v1 + 1556; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerList::`vftable'; v3 = (char *)operator new(0x80u); if ( v3 ) v4 = sub_95B620(v3); else v4 = 0; v5 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v5[2] = v4; v5[1] = 0; *v5 = v2[1]; v6 = v2[1]; if ( v6 ) *(_DWORD *)(v6 + 4) = v5; else v2[2] = v5; ++v2[3]; v2[1] = v5; v7 = (char *)operator new(0x74u); if ( v7 ) v8 = sub_95A2C0(v7); else v8 = 0; v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v9[2] = v8; v9[1] = 0; *v9 = v2[1]; v10 = v2[1]; if ( v10 ) *(_DWORD *)(v10 + 4) = v9; else v2[2] = v9; ++v2[3]; v2[1] = v9; v11 = (char *)operator new(0x70u); if ( v11 ) v12 = sub_959B10(v11); else v12 = 0; v13 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v13[2] = v12; v13[1] = 0; *v13 = v2[1]; v14 = v2[1]; if ( v14 ) *(_DWORD *)(v14 + 4) = v13; else v2[2] = v13; ++v2[3]; v2[1] = v13; v15 = (char *)operator new(0xA4u); if ( v15 ) v16 = sub_958E50(v15); else v16 = 0; v17 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v17[2] = v16; v17[1] = 0; *v17 = v2[1]; v18 = v2[1]; if ( v18 ) *(_DWORD *)(v18 + 4) = v17; else v2[2] = v17; ++v2[3]; v2[1] = v17; v19 = (char *)operator new(0x3FCu); if ( v19 ) v20 = sub_87EA60(v19); else v20 = 0; v21 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(*v2 + 4))(v2); v21[2] = v20; v21[1] = 0; *v21 = v2[1]; v22 = v2[1]; if ( v22 ) { *(_DWORD *)(v22 + 4) = v21; ++v2[3]; } else { ++v2[3]; v2[2] = v21; } v2[1] = v21; return v24; } // A4A15C: using guessed type void *NiTPointerList::`vftable'; // A4A16C: using guessed type void *NiDevImageConverter::`vftable'; //----- (009566F0) -------------------------------------------------------- void *__thiscall sub_9566F0(void *this, char a2) { void *v2; // esi v2 = this; sub_9556F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00956720) -------------------------------------------------------- void __thiscall sub_956720(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A4A1B8: using guessed type void *NiTArray>::`vftable'; //----- (00956780) -------------------------------------------------------- void *__thiscall sub_956780(void *this, char a2) { void *v2; // esi v2 = this; sub_956720(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009567B0) -------------------------------------------------------- _DWORD *__thiscall sub_9567B0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx v1 = this; sub_956C70(this); v2 = v1 + 14; *v1 = &NiShaderLibraryDesc::`vftable'; *v2 = &NiTArray>::`vftable'; v2[2] = 0; v2[5] = 1; v2[3] = 0; v2[4] = 0; v2[1] = 0; sub_80C6B0(v1 + 14); return v1; } // A4A1B8: using guessed type void *NiTArray>::`vftable'; // A4A1C4: using guessed type void *NiShaderLibraryDesc::`vftable'; //----- (009567F0) -------------------------------------------------------- LONG __thiscall sub_9567F0(_DWORD *this) { _DWORD *v1; // edi unsigned int v2; // esi int v4; // [esp+8h] [ebp-4h] v1 = this; v2 = 0; *this = &NiShaderLibraryDesc::`vftable'; if ( this[17] ) { v4 = 0; do sub_7FFF10(v1 + 14, v2++, &v4); while ( v2 < v1[17] ); } sub_80C6B0(v1 + 14); sub_956720(v1 + 14); return sub_956CB0(v1); } // A4A1C4: using guessed type void *NiShaderLibraryDesc::`vftable'; //----- (00956850) -------------------------------------------------------- void *__thiscall sub_956850(void *this, char a2) { void *v2; // esi v2 = this; sub_9567F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00956880) -------------------------------------------------------- char __thiscall sub_956880(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx v2 = a2; v3 = this; if ( !a2 ) return 0; InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_9334C0(v3 + 14, &a2); if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); return 1; } //----- (009568D0) -------------------------------------------------------- int __thiscall sub_9568D0(_DWORD *this, int a2) { int result; // eax result = a2; this[14] = a2; return result; } //----- (009568E0) -------------------------------------------------------- void *__thiscall sub_9568E0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A22C: using guessed type void *NiTArray::`vftable'; //----- (00956910) -------------------------------------------------------- void *__thiscall sub_956910(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NiPointer>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A234: using guessed type void *NiTListBase,NiPointer>::`vftable'; //----- (00956940) -------------------------------------------------------- int __thiscall sub_956940(_DWORD *this, const char *a2) { _DWORD *v2; // ebx _DWORD *v4; // eax int v5; // edi _DWORD *v6; // eax v2 = this; if ( !a2 ) return 0; v4 = (_DWORD *)this[23]; this[21] = v4; if ( !v4 ) return 0; this[21] = *v4; v5 = v4[2]; if ( !v5 ) return 0; while ( strcmp((const char *)(*(int (__thiscall **)(int))(*(_DWORD *)v5 + 4))(v5), a2) ) { if ( v2[21] ) { v6 = (_DWORD *)v2[21]; v2[21] = *v6; v5 = v6[2]; if ( v5 ) continue; } return 0; } return v5; } //----- (009569D0) -------------------------------------------------------- int __thiscall sub_9569D0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NiPointer>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NiPointer>::`vftable'; return result; } // A4A234: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A4A244: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; //----- (00956A10) -------------------------------------------------------- void *__thiscall sub_956A10(void *this, char a2) { void *v2; // esi v2 = this; sub_9569D0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00956A40) -------------------------------------------------------- LONG __thiscall sub_956A40(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi void (__stdcall ***v3)(signed int); // ecx unsigned int i; // eax _DWORD *v5; // ebx _DWORD *v6; // ST00_4 _DWORD *v7; // ebx _DWORD *v8; // ST00_4 void *v9; // ST00_4 v1 = this; v2 = 0; *this = &NiShaderDesc::`vftable'; if ( this[18] ) { do { v3 = *(void (__stdcall ****)(signed int))(v1[16] + 4 * v2); if ( v3 ) { if ( v2 < v1[17] ) { if ( v2 < v1[18] ) { if ( v3 ) --v1[19]; } else { v1[18] = v2 + 1; } *(_DWORD *)(v1[16] + 4 * v2) = 0; } (**v3)(1); } ++v2; } while ( v2 < v1[18] ); } for ( i = 0; i < v1[18]; ++i ) *(_DWORD *)(v1[16] + 4 * i) = 0; v1[18] = 0; v1[19] = 0; v5 = (_DWORD *)v1[23]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[22] + 8))(v1 + 22, v6); } v1[25] = 0; v1[23] = 0; v1[24] = 0; v7 = (_DWORD *)v1[23]; v1[22] = &NiTPointerListBase,NiPointer>::`vftable'; while ( v7 ) { v8 = v7; v7 = (_DWORD *)*v7; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[22] + 8))(v1 + 22, v8); } v1[25] = 0; v1[23] = 0; v1[24] = 0; v1[22] = &NiTListBase,NiPointer>::`vftable'; v9 = (void *)v1[16]; v1[15] = &NiTArray::`vftable'; operator delete(v9); return sub_956CB0(v1); } // A4A22C: using guessed type void *NiTArray::`vftable'; // A4A234: using guessed type void *NiTListBase,NiPointer>::`vftable'; // A4A244: using guessed type void *NiTPointerListBase,NiPointer>::`vftable'; // A4A264: using guessed type void *NiShaderDesc::`vftable'; //----- (00956B30) -------------------------------------------------------- unsigned int __thiscall sub_956B30(_DWORD *this, unsigned int a2, char a3) { _DWORD *v3; // esi v3 = this + 15; if ( a2 >= this[17] ) sub_8237A0(this + 15, a2 + this[20]); return sub_823870(v3, a2, &a3); } //----- (00956B60) -------------------------------------------------------- _DWORD *__thiscall sub_956B60(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // eax _DWORD *v3; // ebx _DWORD *v4; // ST00_4 v1 = this; sub_956C70(this); *v1 = &NiShaderDesc::`vftable'; v1[14] = 0; v1[15] = &NiTArray::`vftable'; v1[17] = 0; v1[20] = 1; v1[18] = 0; v1[19] = 0; v1[16] = 0; v1[25] = 0; v1[23] = 0; v1[24] = 0; v1[22] = &NiTPointerList>::`vftable'; v2 = 0; if ( v1[18] ) { do *(_DWORD *)(v1[16] + 4 * v2++) = 0; while ( v2 < v1[18] ); } v1[18] = 0; v1[19] = 0; v3 = (_DWORD *)v1[23]; while ( v3 ) { v4 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[22] + 8))(v1 + 22, v4); } v1[25] = 0; v1[23] = 0; v1[24] = 0; return v1; } // A4A22C: using guessed type void *NiTArray::`vftable'; // A4A254: using guessed type void *NiTPointerList>::`vftable'; // A4A264: using guessed type void *NiShaderDesc::`vftable'; //----- (00956BF0) -------------------------------------------------------- void *__thiscall sub_956BF0(void *this, char a2) { void *v2; // esi v2 = this; sub_956A40(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00956C20) -------------------------------------------------------- void __thiscall sub_956C20(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // ebx v2 = a2; v3 = this; if ( a2 ) { InterlockedIncrement((volatile LONG *)(a2 + 4)); sub_8B8EC0(v3 + 22, &a2); if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } } //----- (00956C70) -------------------------------------------------------- _DWORD *__thiscall sub_956C70(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_95BF40(this); v1[5] = 0; v1[7] = 0; v1[9] = 0; v1[10] = 0; v1[11] = 0; v1[12] = 0; *v1 = &NiShaderRequirementDesc::`vftable'; v1[4] = -1; v1[6] = -1; v1[8] = -1; return v1; } // A4A2CC: using guessed type void *NiShaderRequirementDesc::`vftable'; //----- (00956CB0) -------------------------------------------------------- LONG __thiscall sub_956CB0(_DWORD *this) { *this = &NiShaderRequirementDesc::`vftable'; return sub_95BF80(this); } // A4A2CC: using guessed type void *NiShaderRequirementDesc::`vftable'; //----- (00956CC0) -------------------------------------------------------- int __thiscall sub_956CC0(_DWORD *this) { return this[5]; } //----- (00956CD0) -------------------------------------------------------- int __thiscall sub_956CD0(_DWORD *this) { return this[6]; } //----- (00956CE0) -------------------------------------------------------- char __thiscall sub_956CE0(_BYTE *this) { return (this[40] >> 1) & 1; } //----- (00956CF0) -------------------------------------------------------- char __thiscall sub_956CF0(_BYTE *this) { return (this[40] >> 3) & 1; } //----- (00956D00) -------------------------------------------------------- int __thiscall sub_956D00(_DWORD *this) { return this[12]; } //----- (00956D10) -------------------------------------------------------- char __thiscall sub_956D10(_BYTE *this) { return this[53]; } //----- (00956D20) -------------------------------------------------------- unsigned int __thiscall sub_956D20(_DWORD *this, unsigned int a2) { unsigned int result; // eax result = a2; if ( this[4] > a2 ) this[4] = a2; if ( this[5] < a2 ) this[5] = a2; return result; } //----- (00956D40) -------------------------------------------------------- unsigned int __thiscall sub_956D40(_DWORD *this, unsigned int a2) { unsigned int result; // eax result = a2; if ( this[6] > a2 ) this[6] = a2; if ( this[7] < a2 ) this[7] = a2; return result; } //----- (00956D60) -------------------------------------------------------- unsigned int __thiscall sub_956D60(_DWORD *this, unsigned int a2) { unsigned int result; // eax result = a2; if ( this[8] > a2 ) this[8] = a2; if ( this[9] < a2 ) this[9] = a2; return result; } //----- (00956D80) -------------------------------------------------------- int __thiscall sub_956D80(_DWORD *this, int a2) { int result; // eax result = a2; this[10] |= a2; return result; } //----- (00956D90) -------------------------------------------------------- int __thiscall sub_956D90(_DWORD *this, int a2) { int result; // eax result = ~a2; this[10] &= ~a2; return result; } //----- (00956DA0) -------------------------------------------------------- void __thiscall sub_956DA0(_DWORD *this, char a2) { if ( a2 ) this[10] |= 2u; else this[10] &= 0xFFFFFFFD; } //----- (00956DC0) -------------------------------------------------------- void __thiscall sub_956DC0(_DWORD *this, char a2) { if ( a2 ) this[10] |= 8u; else this[10] &= 0xFFFFFFF7; } //----- (00956DE0) -------------------------------------------------------- char __thiscall sub_956DE0(_BYTE *this, char a2) { char result; // al result = a2; this[52] = a2; return result; } //----- (00956DF0) -------------------------------------------------------- char __thiscall sub_956DF0(_BYTE *this, char a2) { char result; // al result = a2; this[53] = a2; return result; } //----- (00956E00) -------------------------------------------------------- void *__thiscall sub_956E00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiShaderRequirementDesc::`vftable'; sub_95BF80(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A2CC: using guessed type void *NiShaderRequirementDesc::`vftable'; //----- (00956E30) -------------------------------------------------------- _DWORD *__thiscall sub_956E30(_DWORD *this) { _DWORD *v1; // esi v1 = this; sub_95BF40(this); v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[22] = 0; v1[23] = 0; v1[39] = 0; v1[55] = 0; v1[56] = 0; *v1 = &NiShaderAttributeDesc::`vftable'; return v1; } // A4A334: using guessed type void *NiShaderAttributeDesc::`vftable'; //----- (00956E70) -------------------------------------------------------- LONG __thiscall sub_956E70(void **this) { void **v1; // esi void *v2; // eax v1 = this; v2 = this[4]; *this = &NiShaderAttributeDesc::`vftable'; if ( v2 == (void *)2 ) { operator delete(this[6]); } else if ( v2 == (void *)14 ) { operator delete(this[6]); operator delete(v1[39]); operator delete(v1[23]); } operator delete(v1[55]); return sub_95BF80(v1); } // A4A334: using guessed type void *NiShaderAttributeDesc::`vftable'; //----- (00956ED0) -------------------------------------------------------- char __thiscall sub_956ED0(int this, _BYTE *a2) { char result; // al result = 1; if ( *(_DWORD *)(this + 16) != 1 ) return 0; *a2 = *(_BYTE *)(this + 24); return result; } //----- (00956EF0) -------------------------------------------------------- char __thiscall sub_956EF0(_DWORD *this, _DWORD *a2) { if ( this[4] != 2 ) return 0; *a2 = this[6]; return 1; } //----- (00956F10) -------------------------------------------------------- char __thiscall sub_956F10(_DWORD *this, _DWORD *a2) { if ( this[4] != 3 ) return 0; *a2 = this[6]; return 1; } //----- (00956F30) -------------------------------------------------------- char __thiscall sub_956F30(int this, float *a2) { if ( *(_DWORD *)(this + 16) != 4 ) return 0; *a2 = *(float *)(this + 24); return 1; } //----- (00956F50) -------------------------------------------------------- char __thiscall sub_956F50(int this, float *a2) { if ( *(_DWORD *)(this + 16) != 5 ) return 0; *a2 = *(float *)(this + 24); a2[1] = *(float *)(this + 28); return 1; } //----- (00956F80) -------------------------------------------------------- char __thiscall sub_956F80(int this, float *a2) { if ( *(_DWORD *)(this + 16) != 6 ) return 0; *a2 = *(float *)(this + 24); a2[1] = *(float *)(this + 28); a2[2] = *(float *)(this + 32); return 1; } //----- (00956FB0) -------------------------------------------------------- char __thiscall sub_956FB0(int this, float **a2) { float *v3; // eax if ( *(_DWORD *)(this + 16) != 7 ) return 0; v3 = *a2; *v3 = *(float *)(this + 24); v3[1] = *(float *)(this + 28); v3[2] = *(float *)(this + 32); v3[3] = *(float *)(this + 36); return 1; } //----- (00956FF0) -------------------------------------------------------- char __thiscall sub_956FF0(int this, float *a2) { if ( *(_DWORD *)(this + 16) != 10 ) return 0; *a2 = *(float *)(this + 24); a2[1] = *(float *)(this + 28); a2[2] = *(float *)(this + 32); a2[3] = *(float *)(this + 36); return 1; } //----- (00957020) -------------------------------------------------------- void __thiscall sub_957020(int this, int a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 == a2 ) return; if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); LABEL_6: *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } if ( v3 == 14 ) { operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); goto LABEL_6; } LABEL_7: *(_DWORD *)(v2 + 16) = a2; if ( a2 != 2 ) { if ( a2 != 14 ) return; *(_DWORD *)(v2 + 156) = 0; *(_DWORD *)(v2 + 92) = 0; } *(_DWORD *)(v2 + 88) = 0; *(_DWORD *)(v2 + 24) = 0; } //----- (009570A0) -------------------------------------------------------- void __thiscall sub_9570A0(int this, char a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 1 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 1; *(_BYTE *)(v2 + 24) = a2; return; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } *(_BYTE *)(this + 24) = a2; } //----- (00957110) -------------------------------------------------------- void __thiscall sub_957110(int this, int a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 3 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 3; *(_DWORD *)(v2 + 24) = a2; return; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } *(_DWORD *)(this + 24) = a2; } //----- (00957180) -------------------------------------------------------- void __thiscall sub_957180(int this, float a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 4 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 4; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: *(float *)(v2 + 24) = a2; } //----- (009571E0) -------------------------------------------------------- float *__thiscall sub_9571E0(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 5 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 5; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 24) = *a2; *(float *)(v2 + 28) = a2[1]; return result; } //----- (00957250) -------------------------------------------------------- float *__thiscall sub_957250(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 6 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 6; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 24) = *a2; *(float *)(v2 + 28) = a2[1]; *(float *)(v2 + 32) = a2[2]; return result; } //----- (009572C0) -------------------------------------------------------- float *__thiscall sub_9572C0(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 10 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 10; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 24) = *a2; *(float *)(v2 + 28) = a2[1]; *(float *)(v2 + 32) = a2[2]; *(float *)(v2 + 36) = 1.0; return result; } //----- (00957340) -------------------------------------------------------- float *__thiscall sub_957340(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 10 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 10; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 24) = *a2; *(float *)(v2 + 28) = a2[1]; *(float *)(v2 + 32) = a2[2]; *(float *)(v2 + 36) = a2[3]; return result; } //----- (009573C0) -------------------------------------------------------- void __thiscall sub_9573C0(_DWORD *this, char a2) { if ( a2 ) this[5] |= 2u; else this[5] &= 0xFFFFFFFD; } //----- (009573E0) -------------------------------------------------------- void __thiscall sub_9573E0(_DWORD *this, char a2) { if ( a2 ) this[5] |= 1u; else this[5] &= 0xFFFFFFFE; } //----- (00957400) -------------------------------------------------------- char __thiscall sub_957400(_DWORD *this, int a2, int a3) { int v3; // eax v3 = this[4]; if ( v3 != 3 && v3 != 2 ) return 0; this[23] = a2; this[39] = a3; return 1; } //----- (00957430) -------------------------------------------------------- char __thiscall sub_957430(int this, float a2, float a3) { char result; // al if ( *(_DWORD *)(this + 16) != 4 ) return 0; result = 1; *(float *)(this + 92) = a2; *(float *)(this + 156) = a3; return result; } //----- (00957460) -------------------------------------------------------- char __thiscall sub_957460(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 16) != 5 ) return 0; *(float *)(this + 92) = *a2; *(float *)(this + 96) = a2[1]; *(float *)(this + 156) = *a3; result = 1; *(float *)(this + 160) = a3[1]; return result; } //----- (009574A0) -------------------------------------------------------- char __thiscall sub_9574A0(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 16) != 6 ) return 0; *(float *)(this + 92) = *a2; *(float *)(this + 96) = a2[1]; *(float *)(this + 100) = a2[2]; *(float *)(this + 156) = *a3; *(float *)(this + 160) = a3[1]; result = 1; *(float *)(this + 164) = a3[2]; return result; } //----- (009574F0) -------------------------------------------------------- char __thiscall sub_9574F0(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 16) != 7 ) return 0; *(float *)(this + 92) = *a2; *(float *)(this + 96) = a2[1]; *(float *)(this + 100) = a2[2]; *(float *)(this + 104) = a2[3]; *(float *)(this + 156) = *a3; *(float *)(this + 160) = a3[1]; *(float *)(this + 164) = a3[2]; result = 1; *(float *)(this + 168) = a3[3]; return result; } //----- (00957550) -------------------------------------------------------- char __thiscall sub_957550(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 16) != 10 ) return 0; *(float *)(this + 92) = *a2; *(float *)(this + 96) = a2[1]; *(float *)(this + 100) = a2[2]; *(float *)(this + 104) = 1.0; *(float *)(this + 156) = *a3; *(float *)(this + 160) = a3[1]; *(float *)(this + 164) = a3[2]; result = 1; *(float *)(this + 168) = 1.0; return result; } //----- (009575B0) -------------------------------------------------------- char __thiscall sub_9575B0(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 16) != 10 ) return 0; *(float *)(this + 92) = *a2; *(float *)(this + 96) = a2[1]; *(float *)(this + 100) = a2[2]; *(float *)(this + 104) = a2[3]; *(float *)(this + 156) = *a3; *(float *)(this + 160) = a3[1]; *(float *)(this + 164) = a3[2]; result = 1; *(float *)(this + 168) = a3[3]; return result; } //----- (00957610) -------------------------------------------------------- void *__thiscall sub_957610(void *this, char a2) { void *v2; // esi v2 = this; sub_956E70((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00957640) -------------------------------------------------------- char __thiscall sub_957640(int this, float *a2) { if ( *(_DWORD *)(this + 16) != 8 ) return 0; *a2 = *(float *)(this + 24); a2[1] = *(float *)(this + 28); a2[2] = *(float *)(this + 32); a2[3] = *(float *)(this + 40); a2[4] = *(float *)(this + 44); a2[5] = *(float *)(this + 48); a2[6] = *(float *)(this + 56); a2[7] = *(float *)(this + 60); a2[8] = *(float *)(this + 64); return 1; } //----- (00957690) -------------------------------------------------------- char __thiscall sub_957690(_DWORD *this, int a2, rsize_t DstSize) { if ( this[4] != 9 ) return 0; memcpy_s(*(void **)a2, DstSize, this + 6, 0x40u); return 1; } //----- (009576C0) -------------------------------------------------------- void __thiscall sub_9576C0(int this, char *Src) { int v2; // esi int v3; // eax char *v4; // eax unsigned int v5; // kr00_4 v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 2 ) { if ( v3 == 14 ) { operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); *(_DWORD *)(v2 + 88) = 0; } *(_DWORD *)(v2 + 16) = 2; *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 88) = 0; } v4 = Src; if ( Src && *Src ) { if ( *(_DWORD *)(v2 + 24) ) { if ( *(_DWORD *)(v2 + 88) <= strlen(Src) ) { operator delete(*(void **)(v2 + 24)); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 88) = 0; } v4 = Src; } if ( !*(_DWORD *)(v2 + 24) ) { v5 = strlen(v4); *(_DWORD *)(v2 + 88) = v5 + 1; *(_DWORD *)(v2 + 24) = operator new(v5 + 1); v4 = Src; } strcpy_s(*(char **)(v2 + 24), *(_DWORD *)(v2 + 88), v4); } else { operator delete(*(void **)(v2 + 24)); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 88) = 0; } } //----- (009577A0) -------------------------------------------------------- errno_t __thiscall sub_9577A0(int this, void *Src) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 7 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 7; return memcpy_s((void *)(v2 + 24), 0x40u, Src, 0x10u); } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } return memcpy_s((void *)(v2 + 24), 0x40u, Src, 0x10u); } //----- (00957810) -------------------------------------------------------- float *__thiscall sub_957810(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 8 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 8; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 24) = *a2; *(float *)(v2 + 28) = a2[1]; *(float *)(v2 + 32) = a2[2]; *(float *)(v2 + 40) = a2[3]; *(float *)(v2 + 44) = a2[4]; *(float *)(v2 + 48) = a2[5]; *(float *)(v2 + 56) = a2[6]; *(float *)(v2 + 60) = a2[7]; *(float *)(v2 + 64) = a2[8]; return result; } //----- (009578B0) -------------------------------------------------------- errno_t __thiscall sub_9578B0(int this, void *Src) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 16); if ( v3 != 9 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 16) = 9; return memcpy_s((void *)(v2 + 24), 0x40u, Src, 0x40u); } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v2 + 156)); operator delete(*(void **)(v2 + 92)); } *(_DWORD *)(v2 + 88) = 0; goto LABEL_7; } return memcpy_s((void *)(v2 + 24), 0x40u, Src, 0x40u); } //----- (00957920) -------------------------------------------------------- void __thiscall sub_957920(int this, int a2, char *Src) { int v3; // esi int v4; // eax char *v5; // eax unsigned int v6; // kr00_4 v3 = this; v4 = *(_DWORD *)(this + 16); if ( v4 != 11 ) { if ( v4 == 2 ) { operator delete(*(void **)(this + 24)); } else { if ( v4 != 14 ) { LABEL_7: *(_DWORD *)(v3 + 16) = 11; goto LABEL_8; } operator delete(*(void **)(this + 24)); operator delete(*(void **)(v3 + 156)); operator delete(*(void **)(v3 + 92)); } *(_DWORD *)(v3 + 88) = 0; goto LABEL_7; } LABEL_8: v5 = Src; if ( Src && *Src ) { if ( *(_DWORD *)(v3 + 220) ) { if ( *(_DWORD *)(v3 + 224) <= strlen(Src) ) { operator delete(*(void **)(v3 + 220)); *(_DWORD *)(v3 + 220) = 0; *(_DWORD *)(v3 + 224) = 0; } v5 = Src; } if ( !*(_DWORD *)(v3 + 220) ) { v6 = strlen(v5); *(_DWORD *)(v3 + 224) = v6 + 1; *(_DWORD *)(v3 + 220) = operator new(v6 + 1); v5 = Src; } strcpy_s(*(char **)(v3 + 220), *(_DWORD *)(v3 + 224), v5); *(_DWORD *)(v3 + 24) = a2; } else { operator delete(*(void **)(v3 + 220)); *(_DWORD *)(v3 + 220) = 0; *(_DWORD *)(v3 + 224) = 0; *(_DWORD *)(v3 + 24) = a2; } } //----- (00957A40) -------------------------------------------------------- int __thiscall sub_957A40(int this, void *Src, int a3, int a4, int a5) { int v5; // esi int v6; // eax size_t v7; // edi void *v8; // eax int result; // eax v5 = this; v6 = *(_DWORD *)(this + 16); if ( v6 != 14 ) { if ( v6 == 2 ) { operator delete(*(void **)(this + 24)); *(_DWORD *)(v5 + 88) = 0; } *(_DWORD *)(v5 + 16) = 14; *(_DWORD *)(v5 + 24) = 0; *(_DWORD *)(v5 + 156) = 0; *(_DWORD *)(v5 + 92) = 0; *(_DWORD *)(v5 + 88) = 0; } v7 = a5 * a4; if ( *(_DWORD *)(v5 + 24) && v7 > *(_DWORD *)(v5 + 88) * *(_DWORD *)(v5 + 32) ) { operator delete(*(void **)(v5 + 24)); *(_DWORD *)(v5 + 88) = 0; } v8 = operator new(v7); *(_DWORD *)(v5 + 24) = v8; memcpy_s(v8, v7, Src, v7); result = a3; *(_DWORD *)(v5 + 32) = a4; *(_DWORD *)(v5 + 28) = a3; *(_DWORD *)(v5 + 88) = a5; return result; } //----- (00957AE0) -------------------------------------------------------- char __thiscall sub_957AE0(_DWORD *this, int a2, int a3, void *Src, void *a5) { _DWORD *v5; // esi char result; // al int v7; // edx int v8; // ecx unsigned int v9; // edi void *v10; // eax void *v11; // eax void *v12; // ecx rsize_t v13; // edi v5 = this; if ( this[4] != 14 ) return 0; v7 = this[8]; if ( a2 != v7 ) return 0; v8 = this[22]; if ( a3 != v8 ) return 0; v9 = a3 * a2; v10 = (void *)v5[23]; if ( (v10 || v5[39]) && v9 > v7 * v8 ) { operator delete(v10); operator delete((void *)v5[39]); v5[23] = 0; v5[39] = 0; } if ( Src && a5 ) { v5[23] = operator new(4 * v9); v11 = operator new(4 * v9); v12 = (void *)v5[23]; v13 = 4 * v9; v5[39] = v11; memcpy_s(v12, v13, Src, v13); memcpy_s((void *)v5[39], v13, a5, v13); result = 1; } else { v5[23] = 0; v5[39] = 0; result = 1; } return result; } //----- (00957BE0) -------------------------------------------------------- int *__thiscall sub_957BE0(int *this, int a2) { int *v2; // edi int v3; // ebx int v4; // eax int v5; // ebx int v6; // eax void *v7; // edx float v9; // [esp+1Ch] [ebp-58h] float v10; // [esp+20h] [ebp-54h] float v11; // [esp+24h] [ebp-50h] float v12; // [esp+28h] [ebp-4Ch] float v13; // [esp+2Ch] [ebp-48h] float v14; // [esp+30h] [ebp-44h] float v15; // [esp+34h] [ebp-40h] float v16; // [esp+38h] [ebp-3Ch] float v17; // [esp+3Ch] [ebp-38h] float v18; // [esp+40h] [ebp-34h] float v19; // [esp+44h] [ebp-30h] float v20; // [esp+48h] [ebp-2Ch] float v21; // [esp+4Ch] [ebp-28h] float v22; // [esp+50h] [ebp-24h] float v23; // [esp+54h] [ebp-20h] float v24; // [esp+58h] [ebp-1Ch] float v25; // [esp+5Ch] [ebp-18h] float v26; // [esp+60h] [ebp-14h] float v27; // [esp+64h] [ebp-10h] float v28; // [esp+68h] [ebp-Ch] float v29; // [esp+6Ch] [ebp-8h] v2 = this; v3 = *this; v4 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 4))(a2); (*(void (__thiscall **)(int *, int))(v3 + 12))(v2, v4); v5 = *v2; v6 = (*(int (__thiscall **)(int))(*(_DWORD *)a2 + 8))(a2); (*(void (__thiscall **)(int *, int))(v5 + 16))(v2, v6); v7 = (void *)v2[55]; v2[4] = *(_DWORD *)(a2 + 16); v2[5] = *(_DWORD *)(a2 + 20); operator delete(v7); v2[55] = 0; v2[56] = 0; switch ( v2[4] ) { case 1: sub_9570A0((int)v2, *(_BYTE *)(a2 + 24)); break; case 2: sub_9576C0((int)v2, *(char **)(a2 + 24)); goto LABEL_4; case 3: sub_957110((int)v2, *(_DWORD *)(a2 + 24)); LABEL_4: sub_957400(v2, *(_DWORD *)(a2 + 92), *(_DWORD *)(a2 + 156)); break; case 4: sub_957180((int)v2, *(float *)(a2 + 24)); sub_957430((int)v2, *(float *)(a2 + 92), *(float *)(a2 + 156)); break; case 5: v15 = *(float *)(a2 + 24); v16 = *(float *)(a2 + 28); sub_9571E0((int)v2, &v15); v19 = *(float *)(a2 + 92); v20 = *(float *)(a2 + 96); v15 = *(float *)(a2 + 156); v16 = *(float *)(a2 + 160); sub_957460((int)v2, &v19, &v15); break; case 6: v18 = *(float *)(a2 + 24); v19 = *(float *)(a2 + 28); v20 = *(float *)(a2 + 32); sub_957250((int)v2, &v18); v14 = *(float *)(a2 + 92); v15 = *(float *)(a2 + 96); v16 = *(float *)(a2 + 100); v18 = *(float *)(a2 + 156); v19 = *(float *)(a2 + 160); v20 = *(float *)(a2 + 164); sub_9574A0((int)v2, &v14, &v18); break; case 7: sub_9577A0((int)v2, (void *)(a2 + 24)); sub_9574F0((int)v2, (float *)(a2 + 92), (float *)(a2 + 156)); break; case 8: v21 = *(float *)(a2 + 24); v22 = *(float *)(a2 + 28); v23 = *(float *)(a2 + 32); v24 = *(float *)(a2 + 40); v25 = *(float *)(a2 + 44); v26 = *(float *)(a2 + 48); v27 = *(float *)(a2 + 56); v28 = *(float *)(a2 + 60); v29 = *(float *)(a2 + 64); sub_957810((int)v2, &v21); break; case 9: sub_9578B0((int)v2, (void *)(a2 + 24)); break; case 10: v17 = *(float *)(a2 + 24); v18 = *(float *)(a2 + 28); v19 = *(float *)(a2 + 32); v20 = *(float *)(a2 + 36); v9 = *(float *)(a2 + 92); v10 = *(float *)(a2 + 96); v11 = *(float *)(a2 + 100); v12 = *(float *)(a2 + 104); v13 = *(float *)(a2 + 156); v14 = *(float *)(a2 + 160); v15 = *(float *)(a2 + 164); v16 = *(float *)(a2 + 168); sub_957340((int)v2, &v17); sub_9575B0((int)v2, &v9, &v13); break; case 11: sub_957920((int)v2, *(_DWORD *)(a2 + 24), *(char **)(a2 + 220)); break; case 14: sub_957A40((int)v2, *(void **)(a2 + 24), *(_DWORD *)(a2 + 28), *(_DWORD *)(a2 + 32), *(_DWORD *)(a2 + 88)); sub_957AE0(v2, *(_DWORD *)(a2 + 32), *(_DWORD *)(a2 + 88), *(void **)(a2 + 92), *(void **)(a2 + 156)); break; default: return v2; } return v2; } //----- (00957EF0) -------------------------------------------------------- void **__thiscall sub_957EF0(void **this, char *Src, int a3, int a4) { void **v4; // esi v4 = this; sub_868D00(this); *v4 = &NiSCMExtraData::`vftable'; sub_868E90(v4, Src); v4[3] = (void *)a3; v4[5] = 0; if ( a3 ) v4[7] = operator new(8 * a3); else v4[7] = 0; v4[4] = (void *)a4; v4[6] = 0; if ( a4 ) v4[8] = operator new(8 * a4); else v4[8] = 0; return v4; } // A4A354: using guessed type void *NiSCMExtraData::`vftable'; //----- (00957F80) -------------------------------------------------------- void *sub_957F80() { return &unk_BA71E4; } //----- (00957F90) -------------------------------------------------------- void **__thiscall sub_957F90(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 7); *(_DWORD *)this = &NiSCMExtraData::`vftable'; operator delete(v3); operator delete(v2[8]); sub_868D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A354: using guessed type void *NiSCMExtraData::`vftable'; //----- (00957FD0) -------------------------------------------------------- _BYTE *__thiscall sub_957FD0(unsigned __int8 **this, _BYTE *a2) { _BYTE *result; // eax result = a2; *a2 = *((_BYTE *)this + 2 * *this[2] + 16); a2[4] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[8] = *((_BYTE *)this + 2 * *this[2] + 16); a2[12] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[16] = *((_BYTE *)this + 2 * *this[2] + 16); a2[20] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[24] = *((_BYTE *)this + 2 * *this[2] + 16); a2[28] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[32] = *((_BYTE *)this + 2 * *this[2] + 16); a2[36] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[40] = *((_BYTE *)this + 2 * *this[2] + 16); a2[44] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[48] = *((_BYTE *)this + 2 * *this[2] + 16); a2[52] = *((_BYTE *)this + 2 * *this[2]++ + 17); a2[56] = *((_BYTE *)this + 2 * *this[2] + 16); a2[60] = *((_BYTE *)this + 2 * *this[2]++ + 17); return result; } //----- (009580E0) -------------------------------------------------------- int __thiscall sub_9580E0(_DWORD *this, _BYTE *a2) { char *v2; // eax unsigned __int8 v3; // dl unsigned int v4; // ebx int result; // eax unsigned __int8 v6; // [esp+10h] [ebp-Ch] unsigned __int8 v7; // [esp+11h] [ebp-Bh] char v8; // [esp+12h] [ebp-Ah] char v9; // [esp+13h] [ebp-9h] char v10; // [esp+14h] [ebp-8h] char v11; // [esp+15h] [ebp-7h] __int16 v12; // [esp+16h] [ebp-6h] v2 = (char *)this[2]; v3 = *v2++; this[2] = v2; v6 = v3; v7 = *v2; v4 = v7; this[2] = v2 + 1; if ( v3 <= v4 ) { v8 = (v4 + 4 * v3) / 5; v9 = (3 * v3 + 2 * v4) / 5; v10 = (3 * v4 + 2 * v3) / 5; v11 = (v3 + 4 * v4) / 5; v12 = -256; } else { v8 = (v4 + 6 * v3) / 7; v9 = (5 * v3 + 2 * v4) / 7; v10 = (3 * v4 + 4 * v3) / 7; v11 = (3 * v3 + 4 * v4) / 7; LOBYTE(v12) = (5 * v4 + 2 * v3) / 7; HIBYTE(v12) = (v3 + 6 * v4) / 7; } *a2 = *(&v6 + (*(_BYTE *)this[2] & 7)); a2[4] = *(&v6 + (((unsigned int)*(unsigned __int8 *)this[2] >> 3) & 7)); a2[8] = *(&v6 + 4 * (*(_BYTE *)(this[2] + 1) & 1) + ((unsigned int)*(unsigned __int8 *)this[2] >> 6)); a2[12] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 1) & 7)); a2[16] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 4) & 7)); a2[20] = *(&v6 + 2 * (*(_BYTE *)(this[2] + 2) & 3) + ((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 7)); a2[24] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 2) >> 2) & 7)); a2[28] = *(&v6 + ((unsigned int)*(unsigned __int8 *)(this[2] + 2) >> 5)); this[2] += 3; a2[32] = *(&v6 + (*(_BYTE *)this[2] & 7)); a2[36] = *(&v6 + (((unsigned int)*(unsigned __int8 *)this[2] >> 3) & 7)); a2[40] = *(&v6 + 4 * (*(_BYTE *)(this[2] + 1) & 1) + ((unsigned int)*(unsigned __int8 *)this[2] >> 6)); a2[44] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 1) & 7)); a2[48] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 4) & 7)); a2[52] = *(&v6 + 2 * (*(_BYTE *)(this[2] + 2) & 3) + ((unsigned int)*(unsigned __int8 *)(this[2] + 1) >> 7)); a2[56] = *(&v6 + (((unsigned int)*(unsigned __int8 *)(this[2] + 2) >> 2) & 7)); result = *(&v6 + ((unsigned int)*(unsigned __int8 *)(this[2] + 2) >> 5)); a2[60] = result; this[2] += 3; return result; } //----- (009583A0) -------------------------------------------------------- char *__thiscall sub_9583A0(_DWORD *this, int a2) { unsigned __int8 *v2; // edx int v3; // esi unsigned int v4; // eax __int16 v5; // bx unsigned int v6; // edx int v7; // edi char *result; // eax unsigned __int8 v9; // dl int v10; // esi char v11; // bl char *v12; // esi char v13; // bl int v14; // esi char v15; // bl char *v16; // esi char v17; // bl unsigned int v18; // esi char *v19; // edi char v20; // dl int v21; // esi char v22; // bl char *v23; // esi signed int v24; // [esp+18h] [ebp-14h] unsigned __int8 v25; // [esp+1Ch] [ebp-10h] char v26; // [esp+1Dh] [ebp-Fh] unsigned __int8 v27; // [esp+1Eh] [ebp-Eh] char v28; // [esp+1Fh] [ebp-Dh] unsigned __int8 v29; // [esp+20h] [ebp-Ch] unsigned __int8 v30; // [esp+21h] [ebp-Bh] char v31; // [esp+22h] [ebp-Ah] char v32; // [esp+23h] [ebp-9h] char v33; // [esp+24h] [ebp-8h] char v34; // [esp+25h] [ebp-7h] char v35; // [esp+26h] [ebp-6h] char v36; // [esp+27h] [ebp-5h] v2 = (unsigned __int8 *)this[2]; v3 = (int)(v2 + 2); v4 = (unsigned __int16)(*v2 + (v2[1] << 8)); v5 = *v2 + (v2[1] << 8); this[2] = v2 + 2; v6 = (unsigned __int16)(v2[2] + (v2[3] << 8)); v25 = HIBYTE(v5) & 0xF8; v27 = 8 * v4; v28 = BYTE1(v6) & 0xF8; v7 = BYTE1(v6) & 0xF8; v30 = 8 * v6; v29 = (v6 >> 3) & 0xFE; this[2] = v3 + 2; v31 = (v7 + 2 * (unsigned int)v25) / 3; v26 = (v4 >> 3) & 0xFE; v32 = (v29 + 2 * ((v4 >> 3) & 0xFE)) / 3; v33 = (v30 + 2 * (unsigned int)v27) / 3; v34 = ((unsigned int)v25 + 2 * v7) / 3; v35 = (((v4 >> 3) & 0xFE) + 2 * v29) / 3; v36 = (v27 + 2 * (unsigned int)v30) / 3; result = (char *)(a2 + 2); v24 = 4; do { v9 = *(_BYTE *)this[2]; v10 = *(_BYTE *)this[2] & 3; v11 = *(&v25 + 2 * v10 + v10); v12 = (char *)(&v25 + 2 * v10 + v10); *(result - 2) = v11; *(result - 1) = v12[1]; v13 = v12[2]; v9 >>= 2; v14 = v9 & 3; *result = v13; v15 = *(&v25 + 2 * v14 + v14); v16 = (char *)(&v25 + 2 * v14 + v14); result[2] = v15; result[3] = v16[1]; v17 = v16[2]; v18 = v9 >> 2; v19 = (char *)(&v25 + 2 * ((v9 >> 2) & 3) + ((v9 >> 2) & 3)); v20 = *v19; result[4] = v17; result[6] = v20; result[7] = v19[1]; v21 = (v18 >> 2) & 3; result[8] = v19[2]; v22 = *(&v25 + 2 * v21 + v21); v23 = (char *)(&v25 + 2 * v21 + v21); result[10] = v22; result[11] = v23[1]; result[12] = v23[2]; ++this[2]; result += 16; --v24; } while ( v24 ); return result; } //----- (00958580) -------------------------------------------------------- char *__thiscall sub_958580(_DWORD *this, int a2) { _DWORD *v2; // edi unsigned __int8 *v3; // ecx __int16 v4; // dx __int16 v5; // ax unsigned int v6; // eax __int16 v7; // dx __int16 v8; // si unsigned int v9; // edx bool v10; // cf bool v11; // zf int v12; // eax int v13; // ebx char *result; // eax unsigned __int8 v15; // dl int v16; // ecx char v17; // bl char *v18; // ecx char v19; // bl char *v20; // ecx char v21; // bl unsigned int v22; // esi char *v23; // ecx char v24; // dl char v25; // bl char v26; // bl int v27; // esi signed int v28; // [esp+Ch] [ebp-18h] unsigned __int8 v29; // [esp+10h] [ebp-14h] unsigned __int8 v30; // [esp+11h] [ebp-13h] unsigned __int8 v31; // [esp+12h] [ebp-12h] char v32; // [esp+13h] [ebp-11h] unsigned __int8 v33; // [esp+14h] [ebp-10h] unsigned __int8 v34; // [esp+15h] [ebp-Fh] char v35; // [esp+16h] [ebp-Eh] char v36; // [esp+17h] [ebp-Dh] char v37; // [esp+18h] [ebp-Ch] char v38; // [esp+19h] [ebp-Bh] char v39; // [esp+1Ah] [ebp-Ah] char v40; // [esp+1Bh] [ebp-9h] char v41; // [esp+1Ch] [ebp-8h] char v42; // [esp+1Dh] [ebp-7h] char v43; // [esp+1Eh] [ebp-6h] char v44; // [esp+1Fh] [ebp-5h] v2 = this; v3 = (unsigned __int8 *)this[2]; v4 = v3[1]; v3 += 2; v5 = *(v3 - 2); v2[2] = v3; v6 = (unsigned __int16)(v5 + (v4 << 8)); v7 = v3[1] << 8; v8 = *v3; v2[2] = v3 + 2; v9 = (unsigned __int16)(v8 + v7); v29 = BYTE1(v6) & 0xF8; v33 = BYTE1(v9) & 0xF8; v30 = (v6 >> 3) & 0xFE; v34 = (v9 >> 3) & 0xFE; v31 = 8 * v6; v35 = 8 * v9; v10 = (unsigned __int16)v6 < (unsigned __int16)v9; v11 = (_WORD)v6 == (_WORD)v9; v12 = BYTE1(v9) & 0xF8; v32 = -1; v36 = -1; v13 = (unsigned __int8)(8 * v9); v40 = -1; if ( v10 || v11 ) { v37 = ((unsigned int)v29 + v12) >> 1; v38 = (v30 + (unsigned int)v34) >> 1; v39 = (v13 + (unsigned int)v31) >> 1; v41 = ((unsigned int)v29 + v12) >> 1; v42 = (v30 + (unsigned int)v34) >> 1; v43 = (v13 + (unsigned int)v31) >> 1; v44 = 0; } else { v37 = (v12 + 2 * (unsigned int)v29) / 3; v38 = (v34 + 2 * (unsigned int)v30) / 3; v39 = (v13 + 2 * (unsigned int)v31) / 3; v41 = (v29 + 2 * (unsigned int)v33) / 3; v42 = (v30 + 2 * (unsigned int)v34) / 3; v43 = ((unsigned int)v31 + 2 * v13) / 3; v44 = -1; } result = (char *)(a2 + 2); v28 = 4; do { v15 = *(_BYTE *)v2[2]; v16 = *(_BYTE *)v2[2] & 3; v17 = *(&v29 + 4 * v16); v18 = (char *)(&v29 + 4 * v16); *(result - 2) = v17; *(result - 1) = v18[1]; v19 = v18[2]; result[1] = v18[3]; v15 >>= 2; v20 = (char *)(&v29 + 4 * (v15 & 3)); *result = v19; result[2] = *v20; result[3] = v20[1]; v21 = v20[2]; v22 = v15 >> 2; result[5] = v20[3]; v23 = (char *)(&v29 + 4 * ((v15 >> 2) & 3)); v24 = *v23; result[4] = v21; result[6] = v24; v25 = (v23++)[1]; result[7] = v25; v26 = v23[1]; result[9] = v23[2]; result[8] = v26; v27 = (v22 >> 2) & 3; result[10] = *(&v29 + 4 * v27); result[11] = *(&v29 + 4 * v27 + 1); LOBYTE(v23) = *(&v29 + 4 * v27 + 3); result[12] = *(&v29 + 4 * v27 + 2); result[13] = (char)v23; ++v2[2]; result += 16; --v28; } while ( v28 ); return result; } //----- (009587C0) -------------------------------------------------------- _DWORD *__thiscall sub_9587C0(_DWORD *this) { unsigned int v1; // edx int v2; // esi int v3; // ST04_4 v1 = 0; *this = 0; this[1] = sub_9583A0; this[2] = 0; this[3] = 0; v2 = (int)this + 17; do { *(_BYTE *)(v2 - 1) = (signed int)((double)(v1 & 0xF) / 15.0 * 255.0); v3 = (unsigned __int8)v1++ >> 4; v2 += 2; *(_BYTE *)(v2 - 2) = (signed int)((double)(unsigned int)v3 / 15.0 * 255.0); } while ( v1 < 0x100 ); return this; } //----- (00958870) -------------------------------------------------------- _DWORD *__thiscall sub_958870(_DWORD *this, int a2) { _DWORD *v2; // edi _DWORD *v3; // esi unsigned int v5; // eax unsigned int v6; // ecx unsigned int v7; // edx char *v8; // ebx int v9; // ecx unsigned int v10; // eax char *v11; // edi char *v12; // edi char *v13; // edi int v14; // [esp+8h] [ebp-7Ch] unsigned int v15; // [esp+Ch] [ebp-78h] unsigned int v16; // [esp+10h] [ebp-74h] signed int v17; // [esp+14h] [ebp-70h] _DWORD *v18; // [esp+1Ch] [ebp-68h] int v19; // [esp+20h] [ebp-64h] unsigned int v20; // [esp+24h] [ebp-60h] _DWORD *v21; // [esp+28h] [ebp-5Ch] unsigned int v22; // [esp+28h] [ebp-5Ch] int v23; // [esp+2Ch] [ebp-58h] signed int v24; // [esp+2Ch] [ebp-58h] int v25; // [esp+30h] [ebp-54h] unsigned int v26; // [esp+34h] [ebp-50h] int v27; // [esp+34h] [ebp-50h] int v28; // [esp+38h] [ebp-4Ch] int v29; // [esp+38h] [ebp-4Ch] int v30; // [esp+38h] [ebp-4Ch] char *Src; // [esp+3Ch] [ebp-48h] char *Srca; // [esp+3Ch] [ebp-48h] char *Srcb; // [esp+3Ch] [ebp-48h] char *Srcc; // [esp+3Ch] [ebp-48h] char v35; // [esp+40h] [ebp-44h] char v36; // [esp+43h] [ebp-41h] v2 = (_DWORD *)a2; v3 = this; switch ( *(_DWORD *)(a2 + 12) ) { case 4: *this = 0; this[1] = sub_958580; break; case 5: *this = sub_957FD0; this[1] = sub_9583A0; break; case 6: *this = sub_9580E0; this[1] = sub_9583A0; break; default: return 0; } v21 = operator new(0x70u); if ( v21 ) v18 = sub_8698C0( v21, **(_DWORD **)(a2 + 84), **(_DWORD **)(a2 + 88), &unk_ABDAD0, *(_DWORD *)(a2 + 96), *(_DWORD *)(a2 + 108)); else v18 = 0; v5 = *(_DWORD *)(a2 + 108); v6 = *(_DWORD *)(a2 + 96); v16 = *(_DWORD *)(a2 + 96); v15 = v5; v20 = 0; if ( v5 ) { do { v7 = 0; v22 = 0; if ( v6 ) { do { v3[2] = v2[20] + *(_DWORD *)(v2[23] + 4 * v7) + v20 * *(_DWORD *)(v2[23] + 4 * v2[24]); v8 = (char *)(v18[20] + *(_DWORD *)(v18[23] + 4 * v7) + v20 * *(_DWORD *)(v18[23] + 4 * v18[24])); v9 = *(_DWORD *)(v2[21] + 4 * v7); v10 = *(_DWORD *)(v2[22] + 4 * v7); v28 = *(_DWORD *)(v2[21] + 4 * v7) >> 2; v19 = *(_DWORD *)(v2[22] + 4 * v7) & 3; v25 = *(_DWORD *)(v2[21] + 4 * v7) & 3; v3[3] = 4 * v9; if ( v10 >> 2 ) { v14 = 12 * v9; v26 = v10 >> 2; do { if ( v28 ) { v23 = v28; do { v11 = v8; Src = &v35; if ( *v3 ) ((void (__thiscall *)(_DWORD *, char *))*v3)(v3, &v36); ((void (__thiscall *)(_DWORD *, char *))v3[1])(v3, &v35); v17 = 4; do { memcpy_s(v11, 0x10u, Src, 0x10u); v11 += v3[3]; Src += 16; --v17; } while ( v17 ); v8 += 16; --v23; } while ( v23 ); } if ( v25 ) { v12 = v8; Srca = &v35; if ( *v3 ) ((void (__thiscall *)(_DWORD *, char *))*v3)(v3, &v36); ((void (__thiscall *)(_DWORD *, char *))v3[1])(v3, &v35); v24 = 4; do { memcpy_s(v12, 4 * v25, Srca, 4 * v25); v12 += v3[3]; Srca += 16; --v24; } while ( v24 ); v8 += 4 * v25; } v8 += v14; --v26; } while ( v26 ); } if ( v19 ) { if ( v28 ) { v27 = v28; do { v13 = v8; Srcb = &v35; if ( *v3 ) ((void (__thiscall *)(_DWORD *, char *))*v3)(v3, &v36); ((void (__thiscall *)(_DWORD *, char *))v3[1])(v3, &v35); if ( v19 ) { v29 = v19; do { memcpy_s(v13, 0x10u, Srcb, 0x10u); v13 += v3[3]; Srcb += 16; --v29; } while ( v29 ); } v8 += 16; --v27; } while ( v27 ); } if ( v25 ) { Srcc = &v35; if ( *v3 ) ((void (__thiscall *)(_DWORD *, char *))*v3)(v3, &v36); ((void (__thiscall *)(_DWORD *, char *))v3[1])(v3, &v35); if ( v19 ) { v30 = v19; do { memcpy_s(v8, 4 * v25, Srcc, 4 * v25); v8 += v3[3]; Srcc += 16; --v30; } while ( v30 ); } } } v6 = v16; v2 = (_DWORD *)a2; v7 = v22 + 1; v22 = v7; } while ( v7 < v16 ); v5 = v15; } ++v20; } while ( v20 < v5 ); } return v18; } //----- (00958B80) -------------------------------------------------------- unsigned int __thiscall sub_958B80(int this, int a2, _BYTE *a3) { unsigned int result; // eax unsigned int v4; // esi result = *(unsigned __int16 *)(this + 50); v4 = 0; if ( result & 0xFFFFFFFE ) { result = (unsigned int)a3; do { ++v4; *(_BYTE *)result = *(_BYTE *)(a2 - (_DWORD)a3 + result) - *(_BYTE *)(this + 40); ++result; } while ( v4 < (unsigned int)*(unsigned __int16 *)(this + 50) >> 1 ); } return result; } //----- (00958BC0) -------------------------------------------------------- _BYTE *__thiscall sub_958BC0(int this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi result = 0; v4 = 0; if ( *(_WORD *)(this + 50) > 0u ) { result = a3; do { ++v4; *result = result[a2 - (_DWORD)a3] - *(_BYTE *)(this + 40); ++result; } while ( v4 < *(unsigned __int16 *)(this + 50) ); } return result; } //----- (00958BF0) -------------------------------------------------------- _BYTE *__thiscall sub_958BF0(unsigned __int16 *this, char *a2, int a3) { _BYTE *result; // eax unsigned int v4; // edi char *v5; // esi char v6; // dl result = 0; v4 = 0; if ( this[25] > 0u ) { v5 = a2; result = (_BYTE *)(a3 + 1); do { v6 = *v5; result[1] = *v5; *result = v6; *(result - 1) = v6; ++v4; result += 3; ++v5; } while ( v4 < this[25] ); } return result; } //----- (00958C30) -------------------------------------------------------- _BYTE *__thiscall sub_958C30(unsigned __int16 *this, _BYTE *a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // edi _BYTE *v5; // esi result = 0; v4 = 0; if ( this[25] > 0u ) { result = a3; v5 = a2; do { *result = 2 * (v5[1] & 0xFC); result[1] = (v5[1] << 6) + ((*v5 >> 2) & 0x38); result[2] = 8 * *v5; ++v4; result += 3; v5 += 2; } while ( v4 < this[25] ); } return result; } //----- (00958C90) -------------------------------------------------------- _BYTE *__thiscall sub_958C90(_DWORD *this, unsigned __int8 *a2, _BYTE *a3) { _DWORD *v3; // esi _BYTE *result; // eax unsigned int v5; // ecx unsigned __int8 *v6; // edi _BYTE *v7; // edx v3 = this; result = 0; v5 = 0; if ( *((_WORD *)v3 + 25) > 0u ) { result = a3; v6 = a2; do { v7 = (_BYTE *)(v3[36] + 4 * (*v6 + (v6[1] << 8) - *((unsigned __int16 *)v3 + 20))); *result = *v7; result[1] = v7[1]; result[2] = v7[2]; ++v5; result += 3; v6 += 2; } while ( v5 < *((unsigned __int16 *)v3 + 25) ); } return result; } //----- (00958D00) -------------------------------------------------------- _BYTE *__thiscall sub_958D00(_DWORD *this, unsigned __int8 *a2, _BYTE *a3) { _DWORD *v3; // esi _BYTE *result; // eax unsigned int v5; // ecx unsigned __int8 *v6; // edi _BYTE *v7; // edx v3 = this; result = 0; v5 = 0; if ( *((_WORD *)v3 + 25) > 0u ) { result = a3; v6 = a2; do { v7 = (_BYTE *)(v3[36] + 4 * (*v6 + (v6[1] << 8) - *((unsigned __int16 *)v3 + 20))); *result = *v7; result[1] = v7[1]; result[2] = v7[2]; result[3] = v7[3]; ++v5; result += 4; v6 += 2; } while ( v5 < *((unsigned __int16 *)v3 + 25) ); } return result; } //----- (00958D70) -------------------------------------------------------- _BYTE *__thiscall sub_958D70(unsigned __int16 *this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi _BYTE *v5; // edx result = 0; v4 = 0; if ( this[25] > 0u ) { result = a3; v5 = (_BYTE *)(a2 + 1); do { *result = v5[1]; result[1] = *v5; result[2] = *(v5 - 1); ++v4; result += 3; v5 += 3; } while ( v4 < this[25] ); } return result; } //----- (00958DC0) -------------------------------------------------------- _BYTE *__thiscall sub_958DC0(unsigned __int16 *this, int a2, _BYTE *a3) { _BYTE *result; // eax unsigned int v4; // esi _BYTE *v5; // edx result = 0; v4 = 0; if ( this[25] > 0u ) { result = a3; v5 = (_BYTE *)(a2 + 1); do { *result = v5[1]; result[1] = *v5; result[2] = *(v5 - 1); result[3] = v5[2]; ++v4; result += 4; v5 += 4; } while ( v4 < this[25] ); } return result; } //----- (00958E10) -------------------------------------------------------- bool __stdcall sub_958E10(const char *a1) { return !sub_96C4B0(a1, ".tga") || !sub_96C4B0(a1, ".targa"); } //----- (00958E50) -------------------------------------------------------- char *__thiscall sub_958E50(char *this) { char *v1; // ebx int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *(_DWORD *)v1 = &NiTGAReader::`vftable'; sub_86A420((_DWORD *)v1 + 16); *(_DWORD *)(v1 + 50) = 0; *((_DWORD *)v1 + 10) = 0; v1[44] = 0; *(_DWORD *)(v1 + 54) = 0; *((_WORD *)v1 + 29) = 0; v1[60] = 0; *((_WORD *)v1 + 18) = 0; v1[38] = 0; *(_DWORD *)(v1 + 46) = 0; qmemcpy(v1 + 64, &unk_ABDB18, 0x44u); *((_DWORD *)v1 + 33) = 0; *((_DWORD *)v1 + 34) = 0; *((_DWORD *)v1 + 35) = 0; *((_DWORD *)v1 + 36) = 0; *((_DWORD *)v1 + 37) = 0; *((_DWORD *)v1 + 38) = 0; *((_DWORD *)v1 + 39) = 0; v1[160] = 0; return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A4A3C8: using guessed type void *NiTGAReader::`vftable'; //----- (00958EF0) -------------------------------------------------------- char *__thiscall sub_958EF0(void *this, char a2) { char *v2; // esi void *v3; // ST04_4 v2 = (char *)this; v3 = (void *)*((_DWORD *)this + 34); *(_DWORD *)this = &NiTGAReader::`vftable'; operator delete(v3); operator delete(*((void **)v2 + 36)); *(_DWORD *)v2 = &NiImageReader::`vftable'; DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 4)); if ( a2 & 1 ) operator delete(v2); return v2; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A4A3C8: using guessed type void *NiTGAReader::`vftable'; //----- (00958F40) -------------------------------------------------------- unsigned int __thiscall sub_958F40(_WORD *this, int a2, void *Dst, rsize_t DstSize) { _WORD *v4; // esi unsigned int result; // eax char *v6; // ebx void (__cdecl *v7)(int, char *, signed int, int *, signed int); // eax unsigned __int8 v8; // al int v9; // ecx void (__cdecl *v10)(int, char *, int, int *, signed int); // eax unsigned int v11; // edi rsize_t v12; // eax void (__cdecl *v13)(int, char *, int, void **, signed int); // edx int v14; // ST08_4 unsigned int v15; // ecx int v16; // [esp+4h] [ebp-8h] unsigned int v17; // [esp+8h] [ebp-4h] v4 = this; result = 0; v17 = 0; if ( this[25] > 0u ) { v6 = (char *)Dst; do { if ( !*((_DWORD *)v4 + 38) ) { v7 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(a2 + 4); HIBYTE(Dst) = 0; v16 = 1; v7(a2, (char *)&Dst + 3, 1, &v16, 1); v8 = HIBYTE(Dst); *((_BYTE *)v4 + 156) = HIBYTE(Dst) >> 7; if ( (v8 & 0x80u) == 0 ) { *((_BYTE *)v4 + 156) = 0; *((_DWORD *)v4 + 38) = v8 + 1; } else { v9 = *((unsigned __int8 *)v4 + 56); *((_DWORD *)v4 + 38) = v8 - 127; *((_BYTE *)v4 + 156) = 1; v10 = *(void (__cdecl **)(int, char *, int, int *, signed int))(a2 + 4); v16 = 1; v10(a2, (char *)v4 + 157, v9, &v16, 1); } } v11 = (unsigned __int16)v4[25] - v17; if ( *((_DWORD *)v4 + 38) < v11 ) v11 = *((_DWORD *)v4 + 38); if ( *((_BYTE *)v4 + 156) ) { if ( v11 ) { v12 = *((unsigned __int8 *)v4 + 56); Dst = (void *)v11; do { memcpy_s(v6, DstSize, (char *)v4 + 157, v12); v12 = *((unsigned __int8 *)v4 + 56); v6 += v12; Dst = (char *)Dst - 1; } while ( Dst ); } } else { v13 = *(void (__cdecl **)(int, char *, int, void **, signed int))(a2 + 4); v14 = v11 * *((unsigned __int8 *)v4 + 56); Dst = (void *)1; v13(a2, v6, v14, &Dst, 1); v6 += v11 * *((unsigned __int8 *)v4 + 56); } *((_DWORD *)v4 + 38) -= v11; v15 = (unsigned __int16)v4[25]; result = v11 + v17; v17 = result; } while ( result < v15 ); } return result; } //----- (00959090) -------------------------------------------------------- int __thiscall sub_959090(int this, int a2) { int v2; // esi unsigned int v3; // eax unsigned int v4; // eax int result; // eax int v6; // ebx char *v7; // edi void (__cdecl *v8)(int, int, int, int *, signed int); // edx int v9; // ST08_4 int v10; // ST04_4 unsigned int v11; // edx char v12; // cl _BYTE *v13; // edi int v14; // ST08_4 int (__cdecl *v15)(int, int, int, int *, signed int); // ecx int v16; // ST04_4 unsigned int v17; // ecx _BYTE *v18; // edi void (__cdecl *v19)(int, int, int, int *, signed int); // edx int v20; // ST08_4 int v21; // ST04_4 unsigned int v22; // ecx _BYTE *v23; // edi int v24; // ST08_4 int v25; // ST04_4 int (__cdecl *v26)(int, int, int, int *, signed int); // eax unsigned int v27; // ecx int v28; // [esp+8h] [ebp-4h] v2 = this; v3 = *(unsigned __int16 *)(this + 42); if ( *(_DWORD *)(this + 140) < v3 ) { *(_DWORD *)(this + 140) = v3; operator delete(*(void **)(this + 144)); *(_DWORD *)(v2 + 144) = operator new(4 * *(_DWORD *)(v2 + 140)); } v4 = 4 * *(unsigned __int16 *)(v2 + 42); if ( *(_DWORD *)(v2 + 132) < v4 ) { *(_DWORD *)(v2 + 132) = v4; operator delete(*(void **)(v2 + 136)); *(_DWORD *)(v2 + 136) = operator new(*(_DWORD *)(v2 + 132)); } result = *(unsigned __int8 *)(v2 + 44); v6 = *(_DWORD *)(v2 + 144); switch ( result ) { case 8: v7 = *(char **)(v2 + 136); v8 = *(void (__cdecl **)(int, int, int, int *, signed int))(a2 + 4); v9 = *(unsigned __int16 *)(v2 + 42); v10 = *(_DWORD *)(v2 + 136); v28 = 1; v8(a2, v10, v9, &v28, 1); result = 0; v11 = 0; if ( *(_WORD *)(v2 + 42) > 0u ) { result = v6 + 1; do { v12 = *v7; *(_BYTE *)(result + 1) = *v7; *(_BYTE *)result = v12; *(_BYTE *)(result - 1) = v12; *(_BYTE *)(result + 2) = -1; ++v11; result += 4; ++v7; } while ( v11 < *(unsigned __int16 *)(v2 + 42) ); } break; case 15: case 16: v13 = *(_BYTE **)(v2 + 136); v14 = 2 * *(unsigned __int16 *)(v2 + 42); v15 = *(int (__cdecl **)(int, int, int, int *, signed int))(a2 + 4); v16 = *(_DWORD *)(v2 + 136); v28 = 1; result = v15(a2, v16, v14, &v28, 1); v17 = 0; if ( *(_WORD *)(v2 + 42) > 0u ) { result = v6 + 2; do { *(_BYTE *)(result - 2) = 2 * (v13[1] & 0xFC); *(_BYTE *)(result - 1) = (v13[1] << 6) + ((*v13 >> 2) & 0x38); *(_BYTE *)result = 8 * *v13; *(_BYTE *)(result + 1) = -1; ++v17; result += 4; v13 += 2; } while ( v17 < *(unsigned __int16 *)(v2 + 42) ); } break; case 24: v18 = *(_BYTE **)(v2 + 136); v19 = *(void (__cdecl **)(int, int, int, int *, signed int))(a2 + 4); v20 = 3 * *(unsigned __int16 *)(v2 + 42); v21 = *(_DWORD *)(v2 + 136); v28 = 1; v19(a2, v21, v20, &v28, 1); result = 0; v22 = 0; if ( *(_WORD *)(v2 + 42) > 0u ) { result = v6 + 1; do { *(_BYTE *)(result + 1) = *v18; *(_BYTE *)result = v18[1]; *(_BYTE *)(result - 1) = v18[2]; *(_BYTE *)(result + 2) = -1; ++v22; v18 += 3; result += 4; } while ( v22 < *(unsigned __int16 *)(v2 + 42) ); } break; case 32: v23 = *(_BYTE **)(v2 + 136); v24 = 4 * *(unsigned __int16 *)(v2 + 42); v25 = *(_DWORD *)(v2 + 136); v26 = *(int (__cdecl **)(int, int, int, int *, signed int))(a2 + 4); v28 = 1; result = v26(a2, v25, v24, &v28, 1); v27 = 0; if ( *(_WORD *)(v2 + 42) > 0u ) { result = v6 + 1; do { *(_BYTE *)(result + 1) = *v23; *(_BYTE *)result = v23[1]; *(_BYTE *)(result - 1) = v23[2]; *(_BYTE *)(result + 2) = v23[3]; ++v27; v23 += 4; result += 4; } while ( v27 < *(unsigned __int16 *)(v2 + 42) ); } break; default: return result; } return result; } //----- (00959320) -------------------------------------------------------- char __thiscall sub_959320(char *this, signed int a2, _DWORD *a3, _DWORD *a4, char *a5, _BYTE *a6, _DWORD *a7) { _DWORD *v7; // esi char *v8; // ebx DWORD v9; // eax void (__cdecl *v10)(_DWORD *, char *, signed int, signed int *, signed int); // eax void (__cdecl *v11)(_DWORD *, char *, signed int, signed int *, signed int); // eax void (__cdecl *v12)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v13)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v14)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v15)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v16)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v17)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v18)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v19)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v20)(_DWORD *, char *, signed int, signed int *, signed int); // edx void (__cdecl *v21)(_DWORD *, char *, signed int, signed int *, signed int); // edx unsigned __int8 v22; // al char v23; // dl char v24; // al bool v25; // al const void *v26; // esi char result; // al int v28; // ecx _DWORD *v29; // esi char *v30; // edi _BYTE *v31; // eax bool v32; // zf struct _RTL_CRITICAL_SECTION *lpCriticalSection; // [esp+10h] [ebp-4h] v7 = (_DWORD *)a2; v8 = this; (*(void (__thiscall **)(signed int, _DWORD))(*(_DWORD *)a2 + 8))(a2, 0); lpCriticalSection = (struct _RTL_CRITICAL_SECTION *)(v8 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v8 + 4)); v9 = GetCurrentThreadId(); ++*((_DWORD *)v8 + 8); *((_DWORD *)v8 + 7) = v9; *a7 = 1; v10 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v10(v7, v8 + 36, 1, &a2, 1); v11 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v11(v7, v8 + 37, 1, &a2, 1); v12 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v12(v7, v8 + 38, 1, &a2, 1); v13 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; v13(v7, v8 + 40, 2, &a2, 1); v14 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; v14(v7, v8 + 42, 2, &a2, 1); v15 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v15(v7, v8 + 44, 1, &a2, 1); v16 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; v16(v7, v8 + 46, 2, &a2, 1); v17 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; v17(v7, v8 + 48, 2, &a2, 1); v18 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; a7 = v8 + 50; v18(v7, v8 + 50, 2, &a2, 1); v19 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 2; v19(v7, v8 + 52, 2, &a2, 1); v20 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v20(v7, v8 + 54, 1, &a2, 1); v21 = (void (__cdecl *)(_DWORD *, char *, signed int, signed int *, signed int))v7[1]; a2 = 1; v21(v7, v8 + 55, 1, &a2, 1); v22 = v8[36]; if ( v22 ) (*(void (__thiscall **)(_DWORD *, _DWORD, signed int))(*v7 + 12))(v7, v22, 1); v8[59] = ~((unsigned __int8)v8[55] >> 5) & 1; switch ( v8[38] ) { case 1: v8[58] = 1; v8[60] = 0; goto LABEL_9; case 2: case 3: v8[60] = 0; goto LABEL_8; case 9: v8[58] = 1; v8[60] = 1; goto LABEL_9; case 0xA: case 0xB: v8[60] = 1; LABEL_8: v8[58] = 0; LABEL_9: v23 = v8[58]; if ( v23 ) v24 = v8[44]; else v24 = v8[54]; v25 = v24 == 32; HIBYTE(a2) = v25; v8[57] = v25; if ( v23 ) { if ( *((_WORD *)v8 + 21) == 16 ) { v26 = &unk_ABD9F8; if ( !v25 ) v26 = &unk_ABD9B0; } else { v26 = &unk_ABDA88; if ( !v25 ) v26 = &unk_ABDA40; } } else { v26 = &unk_ABDAD0; if ( !v25 ) v26 = &unk_ABDB18; } qmemcpy(v8 + 64, v26, 0x44u); switch ( v8[54] ) { case 4: v8[56] = 0; if ( v23 ) { *((_DWORD *)v8 + 37) = sub_958B80; break; } sub_40DB50(lpCriticalSection); return 0; case 8: v8[56] = 1; if ( v23 ) *((_DWORD *)v8 + 37) = sub_958BC0; else *((_DWORD *)v8 + 37) = sub_958BF0; break; case 0xF: case 0x10: v8[56] = 2; if ( v23 ) { if ( HIBYTE(a2) ) *((_DWORD *)v8 + 37) = sub_958D00; else *((_DWORD *)v8 + 37) = sub_958C90; } else { *((_DWORD *)v8 + 37) = sub_958C30; } break; case 0x18: v8[56] = 3; *((_DWORD *)v8 + 37) = sub_958D70; break; case 0x20: v8[56] = 4; *((_DWORD *)v8 + 37) = sub_958DC0; break; default: break; } v28 = *(unsigned __int16 *)a7; v29 = a3; v30 = a5; v8[156] = 0; *((_DWORD *)v8 + 38) = 0; *v29 = v28; *a4 = *((unsigned __int16 *)v8 + 26); v31 = a6; qmemcpy(v30, v8 + 64, 0x44u); *v31 = 0; v32 = (*((_DWORD *)v8 + 8))-- == 1; if ( v32 ) *((_DWORD *)v8 + 7) = 0; LeaveCriticalSection(lpCriticalSection); result = 1; break; default: v32 = (*((_DWORD *)v8 + 8))-- == 1; if ( v32 ) *((_DWORD *)v8 + 7) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v8 + 4)); result = 0; break; } return result; } //----- (009596E0) -------------------------------------------------------- _DWORD *__thiscall sub_9596E0(void *this, int a2, unsigned int a3) { int v3; // esi DWORD v4; // eax bool v5; // zf unsigned __int8 v7; // cl unsigned int v8; // eax int v9; // ebx _DWORD *v10; // eax _DWORD *v11; // eax _BYTE *v12; // eax void *v13; // ST14_4 _DWORD *v14; // edx int v15; // edi int v16; // ebx unsigned int v17; // ecx int v18; // ST08_4 void (__cdecl *v19)(int, int, unsigned int, int *, signed int); // eax unsigned int v20; // ecx LPCRITICAL_SECTION v21; // eax char v22; // [esp+Ch] [ebp-70h] char v23; // [esp+10h] [ebp-6Ch] char v24; // [esp+14h] [ebp-68h] LPCRITICAL_SECTION lpCriticalSection; // [esp+18h] [ebp-64h] int v26; // [esp+1Ch] [ebp-60h] int v27; // [esp+20h] [ebp-5Ch] char v28; // [esp+27h] [ebp-55h] unsigned int v29; // [esp+28h] [ebp-54h] _DWORD *v30; // [esp+2Ch] [ebp-50h] unsigned int v31; // [esp+30h] [ebp-4Ch] char v32; // [esp+34h] [ebp-48h] v3 = (int)this; v27 = a2; v29 = a3; sub_86A420(&v32); lpCriticalSection = (LPCRITICAL_SECTION)(v3 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); v4 = GetCurrentThreadId(); ++*(_DWORD *)(v3 + 32); *(_DWORD *)(v3 + 28) = v4; if ( !(*(unsigned __int8 (__thiscall **)(int, int, char *, char *, char *, char *, char *))(*(_DWORD *)v3 + 12))( v3, a2, &v23, &v24, &v32, &v28, &v22) ) { LABEL_2: v5 = (*(_DWORD *)(v3 + 32))-- == 1; if ( v5 ) *(_DWORD *)(v3 + 28) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); return 0; } v7 = *(_BYTE *)(v3 + 56); v8 = *(unsigned __int16 *)(v3 + 50); v31 = v8 * v7; if ( !v7 ) { if ( *(_BYTE *)(v3 + 54) != 4 ) goto LABEL_2; v31 = v8 >> 1; } if ( *(_BYTE *)(v3 + 37) ) { if ( *(unsigned __int16 *)(v3 + 42) + (unsigned int)*(unsigned __int16 *)(v3 + 40) + 1 >= 0x4000 ) goto LABEL_2; sub_959090(v3, a2); } else if ( *(_BYTE *)(v3 + 58) ) { goto LABEL_2; } v9 = v29; if ( v29 && **(_DWORD **)(v29 + 84) == *(unsigned __int16 *)(v3 + 50) && **(_DWORD **)(v29 + 88) == *(unsigned __int16 *)(v3 + 52) && sub_75A550((_DWORD *)(v29 + 8), v3 + 64) ) { v30 = (_DWORD *)v9; } else { v10 = operator new(0x70u); if ( v10 ) v30 = sub_8698C0(v10, *(unsigned __int16 *)(v3 + 50), *(unsigned __int16 *)(v3 + 52), (_DWORD *)(v3 + 64), 1u, 1); else v30 = 0; v9 = (int)v30; } if ( *(_BYTE *)(v3 + 58) ) { v11 = operator new(0x24u); if ( v11 ) v12 = sub_875720(v11, *(_BYTE *)(v3 + 57), *(unsigned __int16 *)(v3 + 42), *(void **)(v3 + 144)); else v12 = 0; sub_75A740((_DWORD *)v9, (int)v12); } if ( *(_DWORD *)(v3 + 132) < v31 ) { v13 = *(void **)(v3 + 136); *(_DWORD *)(v3 + 132) = v31; operator delete(v13); *(_DWORD *)(v3 + 136) = operator new(*(_DWORD *)(v3 + 132)); } v14 = *(_DWORD **)(v9 + 84); v15 = *(_DWORD *)(v9 + 80) + **(_DWORD **)(v9 + 92); v16 = *v14 * *(_DWORD *)(v9 + 100); if ( !v16 ) v16 = *v14 >> 1; if ( *(_BYTE *)(v3 + 59) ) { v15 += v16 * (*(unsigned __int16 *)(v3 + 52) - 1); v16 = -v16; } if ( *(_BYTE *)(v3 + 60) ) { v31 = 0; if ( *(_WORD *)(v3 + 52) > 0u ) { do { sub_958F40((_WORD *)v3, v27, *(void **)(v3 + 136), *(_DWORD *)(v3 + 132)); (*(void (__thiscall **)(int, _DWORD, int))(v3 + 148))(v3, *(_DWORD *)(v3 + 136), v15); v17 = *(unsigned __int16 *)(v3 + 52); v15 += v16; ++v31; } while ( v31 < v17 ); } } else { v29 = 0; if ( *(_WORD *)(v3 + 52) > 0u ) { do { v18 = *(_DWORD *)(v3 + 136); v19 = *(void (__cdecl **)(int, int, unsigned int, int *, signed int))(v27 + 4); v26 = 1; v19(v27, v18, v31, &v26, 1); (*(void (__thiscall **)(int, _DWORD, int))(v3 + 148))(v3, *(_DWORD *)(v3 + 136), v15); v20 = *(unsigned __int16 *)(v3 + 52); v15 += v16; ++v29; } while ( v29 < v20 ); } } v21 = lpCriticalSection; v5 = lpCriticalSection[1].LockCount == 1; --v21[1].LockCount; if ( v5 ) v21[1].DebugInfo = 0; LeaveCriticalSection(v21); return v30; } //----- (009599A0) -------------------------------------------------------- void __thiscall sub_9599A0(_WORD *this, _BYTE *a2, char *a3, int a4) { char *v4; // esi char v5; // bl _BYTE *v6; // edx __int16 v7; // cx char v8; // al char i; // bl _WORD *v10; // [esp+8h] [ebp-8h] v4 = a3; v5 = *a3; v10 = this; if ( *a3 ) { v6 = a2; v7 = 0; do { if ( v7 == v10[18] ) break; ++v4; v8 = v5 & 0x7F; if ( v5 >= 0 ) { for ( i = *v4++; v8; --v8 ) { *v6 = i; v6 += a4; } } else { for ( ; v8; --v8 ) { *v6 = *v4++; v6 += a4; } } v5 = *v4; v7 += (unsigned __int8)(v8 - 1); } while ( *v4 ); } } //----- (00959A20) -------------------------------------------------------- void __thiscall sub_959A20(_WORD *this, char *a2, char *a3, int a4) { char *v4; // esi char v5; // bl char *v6; // edx __int16 v7; // cx char v8; // al char v9; // bl _WORD *v10; // [esp+8h] [ebp-8h] v4 = a3; v5 = *a3; v10 = this; if ( *a3 ) { v6 = a2; v7 = 0; do { if ( v7 == v10[18] ) break; ++v4; v8 = v5 & 0x7F; if ( v5 >= 0 ) { v9 = *v4; for ( v4 += 2; v8; --v8 ) { *v6 = v9; v6 += a4; } } else { for ( ; v8; --v8 ) { *v6 = *v4; v4 += 2; v6 += a4; } } v5 = *v4; v7 += (unsigned __int8)(v8 - 1); } while ( *v4 ); } } //----- (00959AA0) -------------------------------------------------------- bool __stdcall sub_959AA0(const char *a1) { return !sub_96C4B0(a1, ".sgi") || !sub_96C4B0(a1, ".rgb") || !sub_96C4B0(a1, ".rgba") || !sub_96C4B0(a1, ".int") || !sub_96C4B0(a1, ".inta"); } //----- (00959B10) -------------------------------------------------------- _DWORD *__thiscall sub_959B10(char *this) { _DWORD *v1; // ebx int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *v1 = &NiSGIReader::`vftable'; sub_86A420(v1 + 11); v1[9] = 0; v1[10] = 0; qmemcpy(v1 + 11, &unk_ABDB18, 0x44u); return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A4A404: using guessed type void *NiSGIReader::`vftable'; //----- (00959B60) -------------------------------------------------------- char __thiscall sub_959B60(char *this, _DWORD *a2, _DWORD *a3, _DWORD *a4, void *a5, _BYTE *a6, _DWORD *a7) { _DWORD *v7; // esi char *v8; // edi void (__cdecl *v9)(_DWORD *, __int16 *, signed int, _DWORD **, signed int); // eax void (__cdecl *v11)(_DWORD *, char *, signed int, _DWORD **, signed int); // ecx struct _RTL_CRITICAL_SECTION *v12; // ebx DWORD v13; // eax void (__cdecl *v14)(_DWORD *, char *, signed int, _DWORD **, signed int); // eax void (__cdecl *v15)(_DWORD *, __int16 *, signed int, _DWORD **, signed int); // eax void (__cdecl *v16)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx void (__cdecl *v17)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx void (__cdecl *v18)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx void (__cdecl *v19)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx void (__cdecl *v20)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx void (__cdecl *v21)(_DWORD *, char *, signed int, _DWORD **, signed int); // edx unsigned int v22; // ecx unsigned __int8 v23; // al const void *v24; // esi int v25; // eax void *v26; // edi const void *v27; // esi _BYTE *v28; // eax bool v29; // zf unsigned __int16 *v30; // [esp+8h] [ebp-10h] unsigned __int16 *v31; // [esp+Ch] [ebp-Ch] char v32; // [esp+10h] [ebp-8h] __int16 v33; // [esp+14h] [ebp-4h] v7 = a2; v8 = this; (*(void (__thiscall **)(_DWORD *, signed int))(*a2 + 8))(a2, 1); *a7 = 1; v9 = (void (__cdecl *)(_DWORD *, __int16 *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)2; v9(v7, &v33, 2, &a7, 1); if ( v33 != 474 ) return 0; v11 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)1; v11(v7, (char *)&a2 + 3, 1, &a7, 1); v12 = (struct _RTL_CRITICAL_SECTION *)(v8 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v8 + 4)); v13 = GetCurrentThreadId(); ++*((_DWORD *)v8 + 8); *((_DWORD *)v8 + 7) = v13; v14 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)1; v14(v7, v8 + 42, 1, &a7, 1); v15 = (void (__cdecl *)(_DWORD *, __int16 *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)2; v15(v7, &v33, 2, &a7, 1); v16 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)2; v31 = (unsigned __int16 *)(v8 + 36); v16(v7, v8 + 36, 2, &a7, 1); v17 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)2; v30 = (unsigned __int16 *)(v8 + 38); v17(v7, v8 + 38, 2, &a7, 1); v18 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)2; v18(v7, v8 + 40, 2, &a7, 1); v19 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)4; v19(v7, &v32, 4, &a7, 1); v20 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)4; v20(v7, &v32, 4, &a7, 1); (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*v7 + 12))(v7, 84, 1); v21 = (void (__cdecl *)(_DWORD *, char *, signed int, _DWORD **, signed int))v7[1]; a7 = (_DWORD *)4; v21(v7, &v32, 4, &a7, 1); (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*v7 + 12))(v7, 404, 1); if ( HIBYTE(a2) == 1 ) { v8[43] = HIBYTE(a2); } else { if ( HIBYTE(a2) ) goto LABEL_16; v8[43] = 0; } v22 = *((unsigned __int16 *)v8 + 20); if ( v22 <= 4 ) { v23 = v8[42]; if ( v23 <= 2u ) { if ( v23 ) { if ( v22 == 4 || (v24 = &unk_ABDB18, v22 == 2) ) v24 = &unk_ABDAD0; v25 = (int)(v8 + 44); qmemcpy(v8 + 44, v24, 0x44u); v26 = a5; *a3 = *v31; *a4 = *v30; v27 = (const void *)v25; v28 = a6; qmemcpy(v26, v27, 0x44u); *v28 = 0; v29 = v12[1].LockCount-- == 1; if ( v29 ) v12[1].DebugInfo = 0; LeaveCriticalSection(v12); return 1; } } } LABEL_16: v29 = (*((_DWORD *)v8 + 8))-- == 1; if ( v29 ) *((_DWORD *)v8 + 7) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v8 + 4)); return 0; } //----- (00959D90) -------------------------------------------------------- _DWORD *__thiscall sub_959D90(_WORD *this, int a2, unsigned int a3) { _WORD *v3; // esi DWORD v4; // eax bool v5; // zf _DWORD *v7; // ebx _DWORD *v8; // eax int v9; // eax int v10; // ebx size_t v11; // eax void *v12; // eax LPCRITICAL_SECTION v13; // eax void *v14; // ST08_4 void (__cdecl *v15)(int, void *, int, unsigned int *, signed int); // eax size_t v16; // ebx void (__cdecl *v17)(int, void **, signed int, unsigned int *, signed int); // eax void *v18; // eax void (__cdecl *v19)(int, void *, size_t, unsigned int *, signed int); // edx _DWORD *v20; // edi int v21; // edx int v22; // ebx int v23; // edi unsigned int v24; // eax unsigned int v25; // ecx _BYTE *v26; // edi unsigned int v27; // ebx unsigned int v28; // edi char *v29; // edi unsigned int v30; // ebx unsigned int v31; // edi _BYTE *v32; // ecx int v33; // edi _BYTE *v34; // eax unsigned __int16 v35; // bx int v36; // edi int v37; // edx unsigned int v38; // edi int v39; // edi _BYTE *v40; // eax unsigned __int16 v41; // bx int v42; // edi int v43; // edx unsigned int v44; // edi int v45; // eax int v46; // edx char *v47; // eax int v48; // edx char v49; // cl int v50; // edx char *v51; // eax int v52; // edx char v53; // cl LPCRITICAL_SECTION v54; // eax char v55; // [esp+Ch] [ebp-7Ch] char v56; // [esp+10h] [ebp-78h] char v57; // [esp+14h] [ebp-74h] char v58; // [esp+1Bh] [ebp-6Dh] LPCRITICAL_SECTION lpCriticalSection; // [esp+1Ch] [ebp-6Ch] int v60; // [esp+20h] [ebp-68h] int v61; // [esp+24h] [ebp-64h] void *v62; // [esp+28h] [ebp-60h] void *v63; // [esp+2Ch] [ebp-5Ch] int v64; // [esp+30h] [ebp-58h] _DWORD *v65; // [esp+34h] [ebp-54h] unsigned int v66; // [esp+38h] [ebp-50h] unsigned int v67; // [esp+3Ch] [ebp-4Ch] char v68; // [esp+40h] [ebp-48h] v3 = this; v67 = a3; sub_86A420(&v68); lpCriticalSection = (LPCRITICAL_SECTION)(v3 + 2); EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 2)); v4 = GetCurrentThreadId(); ++*((_DWORD *)v3 + 8); *((_DWORD *)v3 + 7) = v4; if ( !(*(unsigned __int8 (__thiscall **)(_WORD *, int, char *, char *, char *, char *, char *))(*(_DWORD *)v3 + 12))( v3, a2, &v56, &v55, &v68, &v58, &v57) ) { v5 = (*((_DWORD *)v3 + 8))-- == 1; if ( v5 ) *((_DWORD *)v3 + 7) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 2)); return 0; } v7 = (_DWORD *)v67; if ( v67 && **(_DWORD **)(v67 + 84) == (unsigned __int16)v3[18] && **(_DWORD **)(v67 + 88) == (unsigned __int16)v3[19] && sub_75A550((_DWORD *)(v67 + 8), (int)(v3 + 22)) ) { v65 = v7; } else { v8 = operator new(0x70u); if ( v8 ) v65 = sub_8698C0(v8, (unsigned __int16)v3[18], (unsigned __int16)v3[19], (_DWORD *)v3 + 11, 1u, 1); else v65 = 0; } v5 = *((_BYTE *)v3 + 43) == 0; v9 = (unsigned __int16)v3[19]; v62 = 0; if ( v5 ) { v16 = v9 * (unsigned __int16)v3[20] * (unsigned __int16)v3[18] * *((unsigned __int8 *)v3 + 42); } else { v10 = v9 * (unsigned __int16)v3[20]; v11 = 4 * v9 * (unsigned __int16)v3[20]; v66 = v10; v12 = operator new(v11); v62 = v12; if ( !v12 ) { LABEL_15: v13 = lpCriticalSection; v5 = lpCriticalSection[1].LockCount == 1; --v13[1].LockCount; if ( v5 ) v13[1].DebugInfo = 0; LeaveCriticalSection(v13); return 0; } v14 = v12; v15 = *(void (__cdecl **)(int, void *, int, unsigned int *, signed int))(a2 + 4); v67 = 4; v15(a2, v14, 4 * v10, &v67, 1); v16 = 0; if ( v66 ) { v67 = v66; do { v17 = *(void (__cdecl **)(int, void **, signed int, unsigned int *, signed int))(a2 + 4); v66 = 4; v17(a2, &v63, 4, &v66, 1); v16 += (size_t)v63; --v67; } while ( v67 ); } } v18 = operator new(v16); v63 = v18; if ( !v18 ) goto LABEL_15; v19 = *(void (__cdecl **)(int, void *, size_t, unsigned int *, signed int))(a2 + 4); v67 = 1; v19(a2, v18, v16, &v67, 1); v20 = v65; v21 = v65[25] * *(_DWORD *)v65[21]; v61 = v65[25]; v22 = v65[20] + *(_DWORD *)v65[23]; v5 = *((_BYTE *)v3 + 43) == 0; v64 = v21; v60 = v22; if ( !v5 ) { v23 = (unsigned __int16)v3[20]; v24 = (unsigned __int16)v3[19]; v67 = 8 * v24 * v23 + 512; v25 = 0; v5 = *((_BYTE *)v3 + 42) == 1; v66 = 0; if ( v5 ) { if ( v23 ) { while ( 1 ) { v26 = (_BYTE *)(v22 + v25 + v21 * (v24 - 1)); v27 = 0; if ( v24 ) { do { sub_9599A0(v3, v26, (char *)v63 + *((_DWORD *)v62 + v27 + v25 * v24) - v67, v61); v24 = (unsigned __int16)v3[19]; v26 -= v64; v25 = v66; ++v27; } while ( v27 < v24 ); v21 = v64; } v28 = (unsigned __int16)v3[20]; v66 = ++v25; if ( v25 >= v28 ) break; v22 = v60; } } } else if ( v23 ) { while ( 1 ) { v29 = (char *)(v22 + v25 + v21 * (v24 - 1)); v30 = 0; if ( v24 ) { do { sub_959A20(v3, v29, (char *)v63 + *((_DWORD *)v62 + v30 + v25 * v24) - v67, v61); v24 = (unsigned __int16)v3[19]; v29 -= v64; v25 = v66; ++v30; } while ( v30 < v24 ); v21 = v64; } v31 = (unsigned __int16)v3[20]; v66 = ++v25; if ( v25 >= v31 ) break; v22 = v60; } } LABEL_62: v20 = v65; goto LABEL_63; } v32 = v63; if ( *((_BYTE *)v3 + 42) == 1 ) { v67 = 0; if ( v3[20] > 0u ) { do { v33 = (unsigned __int16)v3[19]; v66 = 0; v34 = (_BYTE *)(v22 + v67 + v21 * (v33 - 1)); if ( v33 ) { v35 = v3[18]; do { v36 = 0; if ( v35 > 0u ) { v37 = v61; do { *v34 = *v32; v35 = v3[18]; ++v36; ++v32; v34 += v37; } while ( (unsigned __int16)v36 < v35 ); } v21 = v64; ++v66; v34 -= 2 * v64; } while ( v66 < (unsigned __int16)v3[19] ); v22 = v60; } v38 = (unsigned __int16)v3[20]; ++v67; } while ( v67 < v38 ); goto LABEL_62; } } else { v66 = 0; if ( v3[20] > 0u ) { do { v39 = (unsigned __int16)v3[19]; v67 = 0; v40 = (_BYTE *)(v22 + v66 + v21 * (v39 - 1)); if ( v39 ) { v41 = v3[18]; do { v42 = 0; if ( v41 > 0u ) { v43 = v61; do { *v40 = *v32; v41 = v3[18]; ++v42; v32 += 2; v40 += v43; } while ( (unsigned __int16)v42 < v41 ); } v21 = v64; ++v67; v40 -= 2 * v64; } while ( v67 < (unsigned __int16)v3[19] ); v22 = v60; } v44 = (unsigned __int16)v3[20]; ++v66; } while ( v66 < v44 ); goto LABEL_62; } } LABEL_63: operator delete(v63); operator delete(v62); v45 = (unsigned __int16)v3[20]; if ( v45 == 1 ) { v46 = (unsigned __int16)v3[19]; v47 = (char *)(v20[20] + *(_DWORD *)v20[23]); if ( v46 * (unsigned __int16)v3[18] ) { v48 = v46 * (unsigned __int16)v3[18]; do { v49 = *v47; v47[2] = *v47; v47[1] = v49; v47 += 3; --v48; } while ( v48 ); } } else if ( v45 == 2 ) { v50 = (unsigned __int16)v3[19]; v51 = (char *)(v20[20] + *(_DWORD *)v20[23]); if ( v50 * (unsigned __int16)v3[18] ) { v52 = v50 * (unsigned __int16)v3[18]; do { v51[3] = v51[1]; v53 = *v51; v51[2] = *v51; v51[1] = v53; v51 += 4; --v52; } while ( v52 ); } } v54 = lpCriticalSection; v5 = lpCriticalSection[1].LockCount == 1; --v54[1].LockCount; if ( v5 ) v54[1].DebugInfo = 0; LeaveCriticalSection(v54); return v20; } //----- (0095A230) -------------------------------------------------------- bool __stdcall sub_95A230(const char *a1) { return sub_96C4B0(a1, ".dds") == 0; } //----- (0095A250) -------------------------------------------------------- void *__stdcall sub_95A250(void *a1, __int16 a2, 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) { switch ( HIBYTE(a2) ) { case 0x10: if ( sub_872D30((char *)&a2, 3) ) { sub_86A140(a1, &unk_ABDAD0); return a1; } goto LABEL_9; case 0x18: LABEL_9: sub_86A140(a1, &unk_ABDB18); return a1; case 0x20: sub_86A140(a1, &unk_ABDAD0); break; default: sub_86A140(a1, &a2); break; } return a1; } //----- (0095A2C0) -------------------------------------------------------- _DWORD *__thiscall sub_95A2C0(char *this) { _DWORD *v1; // ebx int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *v1 = &NiDDSReader::`vftable'; sub_86A420(v1 + 12); v1[9] = 0; v1[10] = 0; qmemcpy(v1 + 12, &unk_ABDC80, 0x44u); return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A4A418: using guessed type void *NiDDSReader::`vftable'; //----- (0095A310) -------------------------------------------------------- void *__thiscall sub_95A310(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiImageReader::`vftable'; DeleteCriticalSection((LPCRITICAL_SECTION)((char *)this + 4)); if ( a2 & 1 ) operator delete(v2); return v2; } // A0C924: using guessed type void *NiImageReader::`vftable'; //----- (0095A340) -------------------------------------------------------- char __thiscall sub_95A340(int this, _DWORD *a2, _DWORD *a3, _DWORD *a4, void *a5, _BYTE *a6, _DWORD *a7) { int v7; // edi DWORD v8; // eax void (__cdecl *v9)(_DWORD *, int *, signed int, int *, int); // ecx char v10; // al void (__cdecl *v11)(_DWORD *, int *, signed int, int *, signed int); // eax void (__cdecl *v12)(_DWORD *, int *, signed int, int *, signed int); // eax void (__cdecl *v13)(_DWORD *, int, signed int, int *, signed int); // eax void (__cdecl *v14)(_DWORD *, int, signed int, int *, signed int); // edx void (__cdecl *v15)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v16)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v17)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v18)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v19)(_DWORD *, char *, signed int, int *, signed int); // edx void (__cdecl *v20)(_DWORD *, unsigned int *, signed int, int *, signed int); // edx const void *v21; // esi _DWORD *v22; // eax void *v23; // edi void (__cdecl *v24)(_DWORD *, int *, signed int, int *, signed int); // eax void (__cdecl *v25)(_DWORD *, int *, signed int, int *, signed int); // eax int v26; // eax int v27; // eax int v28; // ecx char result; // al int v30; // eax struct _RTL_CRITICAL_SECTION *v31; // ecx bool v32; // zf __int16 v33; // [esp-44h] [ebp-ECh] int v34; // [esp-40h] [ebp-E8h] int v35; // [esp-3Ch] [ebp-E4h] int v36; // [esp-38h] [ebp-E0h] int v37; // [esp-34h] [ebp-DCh] int v38; // [esp-30h] [ebp-D8h] int v39; // [esp-2Ch] [ebp-D4h] int v40; // [esp-28h] [ebp-D0h] int v41; // [esp-24h] [ebp-CCh] int v42; // [esp-20h] [ebp-C8h] int v43; // [esp-1Ch] [ebp-C4h] int v44; // [esp-18h] [ebp-C0h] int v45; // [esp-14h] [ebp-BCh] int v46; // [esp-10h] [ebp-B8h] int v47; // [esp-Ch] [ebp-B4h] int *v48; // [esp-8h] [ebp-B0h] int v49; // [esp-4h] [ebp-ACh] int v50; // [esp+Ch] [ebp-9Ch] int v51; // [esp+10h] [ebp-98h] int v52; // [esp+14h] [ebp-94h] int v53; // [esp+18h] [ebp-90h] _DWORD *v54; // [esp+1Ch] [ebp-8Ch] unsigned int v55; // [esp+20h] [ebp-88h] _DWORD *v56; // [esp+24h] [ebp-84h] int v57; // [esp+28h] [ebp-80h] _DWORD *v58; // [esp+2Ch] [ebp-7Ch] int v59; // [esp+30h] [ebp-78h] char v60; // [esp+34h] [ebp-74h] int v61; // [esp+38h] [ebp-70h] int v62; // [esp+3Ch] [ebp-6Ch] _BYTE *v63; // [esp+40h] [ebp-68h] int v64; // [esp+44h] [ebp-64h] void *v65; // [esp+48h] [ebp-60h] int v66; // [esp+4Ch] [ebp-5Ch] LPCRITICAL_SECTION lpCriticalSection; // [esp+50h] [ebp-58h] int v68; // [esp+54h] [ebp-54h] int v69; // [esp+58h] [ebp-50h] int v70; // [esp+5Ch] [ebp-4Ch] char v71; // [esp+60h] [ebp-48h] v7 = this; v56 = a3; v54 = a4; v69 = this; v65 = a5; v63 = a6; v58 = a7; lpCriticalSection = (LPCRITICAL_SECTION)(this + 4); EnterCriticalSection((LPCRITICAL_SECTION)(this + 4)); v8 = GetCurrentThreadId(); ++*(_DWORD *)(v7 + 32); v49 = 1; v48 = &v70; *(_DWORD *)(v7 + 28) = v8; v9 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, int))a2[1]; v70 = 4; v9(a2, &v64, 4, v48, v49); if ( v64 != 542327876 ) { v70 = v64; HIBYTE(v70) = v64; v10 = BYTE1(v70); LOBYTE(v70) = HIBYTE(v64); BYTE1(v70) = BYTE2(v64); BYTE2(v70) = v10; if ( v70 != 542327876 ) goto LABEL_48; (*(void (__thiscall **)(_DWORD *, signed int))(*a2 + 8))(a2, 1); } v11 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v11(a2, &v59, 4, &v70, 1); if ( v59 != 124 ) goto LABEL_48; v12 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v12(a2, &v62, 4, &v70, 1); if ( (v62 & 0x1007) != 4103 ) goto LABEL_48; v49 = 1; v48 = &v70; v47 = 4; v46 = v7 + 36; v13 = (void (__cdecl *)(_DWORD *, int, signed int, int *, signed int))a2[1]; v70 = 4; v13(a2, v7 + 36, 4, &v70, 1); v14 = (void (__cdecl *)(_DWORD *, int, signed int, int *, signed int))a2[1]; v70 = 4; v14(a2, v7 + 40, 4, &v70, 1); v15 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v15(a2, &v66, 4, &v70, 1); v16 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v16(a2, &v66, 4, &v70, 1); if ( (unsigned int)sub_800000 & v62 ) { if ( v66 ) goto LABEL_48; } v17 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v17(a2, &v52, 4, &v70, 1); (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*a2 + 12))(a2, 44, 1); v18 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v70 = 4; v18(a2, &v66, 4, &v70, 1); v19 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))a2[1]; v70 = 4; v19(a2, &v60, 4, &v70, 1); v20 = (void (__cdecl *)(_DWORD *, unsigned int *, signed int, int *, signed int))a2[1]; v70 = 4; v20(a2, &v55, 4, &v70, 1); if ( !(v60 & 4) ) { if ( v60 & 0x40 ) { sub_75ABD0((int)a2, (int)&v50); sub_75ABD0((int)a2, (int)&v68); sub_75ABD0((int)a2, (int)&v53); sub_75ABD0((int)a2, (int)&v57); sub_75ABD0((int)a2, (int)&v70); if ( !(v60 & 1) ) v70 = 0; if ( v50 != 16 && v50 != 24 && v50 != 32 ) goto LABEL_21; v22 = sub_86A490(&v71, v50, v68, v53, v57, v70); qmemcpy(v65, v22, 0x44u); qmemcpy((void *)(v69 + 48), v22, 0x44u); v23 = v65; sub_86A140(&v33, v65); qmemcpy( v23, sub_95A250(&v71, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, (int)v48, v49), 0x44u); goto LABEL_32; } LABEL_48: v32 = (*(_DWORD *)(v7 + 32))-- == 1; if ( v32 ) *(_DWORD *)(v7 + 28) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v7 + 4)); return 0; } if ( v55 > 0x31545844 ) { if ( v55 == 861165636 ) { v21 = &unk_ABDCC8; } else { if ( v55 != 894720068 ) { LABEL_21: sub_40DB50((LPCRITICAL_SECTION)(v7 + 4)); return 0; } v21 = &unk_ABDD10; } } else { if ( v55 != 827611204 ) { switch ( v55 ) { case 0x6Fu: v21 = &unk_ABDEC0; goto LABEL_24; case 0x70u: v21 = &unk_ABDE30; goto LABEL_24; case 0x71u: v21 = &unk_ABDDA0; goto LABEL_24; case 0x72u: v21 = &unk_ABDDE8; goto LABEL_24; case 0x73u: v21 = &unk_ABDE78; goto LABEL_24; case 0x74u: v21 = &unk_ABDD58; goto LABEL_24; default: goto LABEL_21; } goto LABEL_21; } v21 = &unk_ABDC80; } LABEL_24: qmemcpy((void *)(v7 + 48), v21, 0x44u); qmemcpy(v65, (const void *)(v7 + 48), 0x44u); (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*a2 + 12))(a2, 20, 1); LABEL_32: v24 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1]; v68 = 4; v24(a2, &v61, 4, &v68, 1); if ( !(v61 & 8) && !((unsigned int)sub_401000 & v61) || (v25 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))a2[1], v68 = 4, v25(a2, &v51, 4, &v68, 1), v51 & 0x200000) || v51 & 0x200 && (!(v51 & 0x400) || !(v51 & 0x800) || !(v51 & 0x1000) || !(v51 & 0x2000) || !(v51 & 0x4000) || !(v51 & 0x8000)) ) { sub_40DB50(lpCriticalSection); return 0; } *v58 = (v51 & 0x200) != 0 ? 6 : 1; (*(void (__thiscall **)(_DWORD *, signed int, signed int))(*a2 + 12))(a2, 12, 1); v26 = v69; *v56 = *(_DWORD *)(v69 + 40); *v54 = *(_DWORD *)(v26 + 36); if ( v61 & 8 && v61 & 0x400000 && (v27 = v52, v52 != 1) ) { v28 = v69; *v63 = 1; *(_DWORD *)(v28 + 44) = v27; sub_40DB50(lpCriticalSection); result = 1; } else { v30 = v69; v31 = lpCriticalSection; *v63 = 0; *(_DWORD *)(v30 + 44) = 1; sub_40DB50(v31); result = 1; } return result; } //----- (0095A840) -------------------------------------------------------- char __cdecl sub_95A840(int a1, _DWORD *a2, char 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, char 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 v38; // eax int v39; // edi char *v40; // esi int v41; // edx void (__cdecl *v42)(int, char *, int, int *, signed int); // eax int v43; // eax int v44; // edi char *v45; // eax int i; // edi char v47; // cl char v48; // dl int v50; // [esp+Ch] [ebp-20h] int v51; // [esp+24h] [ebp-8h] int v52; // [esp+28h] [ebp-4h] v38 = a2[23]; v39 = a37; v40 = (char *)(*(_DWORD *)(v38 + 4 * a37) + a2[20] + a38 * *(_DWORD *)(v38 + 4 * a2[24])); v41 = *(_DWORD *)(v38 + 4 * a37 + 4) - *(_DWORD *)(v38 + 4 * a37); v42 = *(void (__cdecl **)(int, char *, int, int *, signed int))(a1 + 4); v52 = 1; v42(a1, v40, v41, &v52, 1); sub_9530D0(&v50, &a3); v43 = *(_DWORD *)(a2[21] + 4 * v39); v44 = *(_DWORD *)(a2[22] + 4 * v39); v51 = v43; LOBYTE(v45) = sub_866730(&a3, (int)&a20); if ( (_BYTE)v45 ) { if ( v50 == 16711680 ) { v45 = v40; if ( v44 ) { v52 = v44; do { for ( i = v51; i; --i ) { v47 = v45[1]; v48 = *v45; *v40 = v45[2]; v40[1] = v47; v40[2] = v48; v40 += 3; v45 += 3; } --v52; } while ( v52 ); } } } return (char)v45; } //----- (0095A900) -------------------------------------------------------- char __cdecl sub_95A900(int a1, _DWORD *a2, char a3, int a4, int a5, int a6, int a7, char a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, char 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 v38; // eax int v39; // edi unsigned __int8 *v40; // esi int v41; // edx void (__cdecl *v42)(int, unsigned __int8 *, int, int *, signed int); // eax int v43; // edi int v44; // ebx unsigned int v45; // eax char *v46; // ecx unsigned __int8 v47; // bl unsigned __int8 v48; // dl unsigned __int8 v49; // bl unsigned __int8 v50; // dl int v51; // edi unsigned int v52; // eax unsigned int v53; // eax int v54; // ecx unsigned int v55; // eax unsigned int v56; // edx unsigned __int8 v57; // bl unsigned int v58; // eax unsigned __int8 v59; // cl int v60; // ebx unsigned __int8 v61; // dl unsigned __int8 v62; // bl unsigned int v63; // edi unsigned __int8 j; // bl unsigned int v65; // ebx bool v66; // zf int v67; // edi unsigned int v68; // eax unsigned int v69; // eax int v70; // ecx unsigned int v71; // eax unsigned __int8 v72; // cl int v73; // ebx unsigned __int8 v74; // dl unsigned __int8 v75; // bl unsigned int i; // edi unsigned int v77; // ebx char v79; // [esp+Ch] [ebp-58h] char v80; // [esp+10h] [ebp-54h] char v81; // [esp+10h] [ebp-54h] unsigned __int8 v82; // [esp+14h] [ebp-50h] unsigned __int8 v83; // [esp+14h] [ebp-50h] char v84; // [esp+18h] [ebp-4Ch] char v85; // [esp+18h] [ebp-4Ch] char v86; // [esp+1Ch] [ebp-48h] char v87; // [esp+1Ch] [ebp-48h] unsigned __int8 v88; // [esp+20h] [ebp-44h] unsigned __int8 v89; // [esp+20h] [ebp-44h] unsigned __int8 v90; // [esp+24h] [ebp-40h] unsigned __int8 v91; // [esp+24h] [ebp-40h] int v92; // [esp+28h] [ebp-3Ch] int v93; // [esp+2Ch] [ebp-38h] unsigned int v94; // [esp+30h] [ebp-34h] unsigned int v95; // [esp+34h] [ebp-30h] unsigned int v96; // [esp+38h] [ebp-2Ch] char v97; // [esp+3Ch] [ebp-28h] char v98; // [esp+3Dh] [ebp-27h] char v99; // [esp+3Eh] [ebp-26h] char v100; // [esp+3Fh] [ebp-25h] unsigned __int8 v101; // [esp+40h] [ebp-24h] unsigned __int8 v102; // [esp+41h] [ebp-23h] unsigned __int8 v103; // [esp+42h] [ebp-22h] unsigned __int8 v104; // [esp+43h] [ebp-21h] int v105; // [esp+44h] [ebp-20h] unsigned __int8 *v106; // [esp+48h] [ebp-1Ch] unsigned int v107; // [esp+4Ch] [ebp-18h] int v108; // [esp+50h] [ebp-14h] unsigned __int8 v109; // [esp+56h] [ebp-Eh] unsigned __int8 v110; // [esp+57h] [ebp-Dh] unsigned __int8 v111; // [esp+58h] [ebp-Ch] unsigned __int8 v112; // [esp+59h] [ebp-Bh] unsigned __int8 v113; // [esp+5Ah] [ebp-Ah] unsigned __int8 v114; // [esp+5Bh] [ebp-9h] unsigned int v115; // [esp+5Ch] [ebp-8h] unsigned __int8 v116; // [esp+63h] [ebp-1h] v38 = a2[23]; v39 = a37; v40 = (unsigned __int8 *)(*(_DWORD *)(v38 + 4 * a37) + a2[20] + a38 * *(_DWORD *)(v38 + 4 * a2[24])); v41 = *(_DWORD *)(v38 + 4 * a37 + 4) - *(_DWORD *)(v38 + 4 * a37); v42 = *(void (__cdecl **)(int, unsigned __int8 *, int, int *, signed int))(a1 + 4); v108 = a37; v92 = 1; v42(a1, v40, v41, &v92, 1); sub_9530D0(&v93, &a3); v43 = *(_DWORD *)(a2[21] + 4 * v39); v44 = *(_DWORD *)(a2[22] + 4 * v108); v92 = v43; LOBYTE(v45) = sub_866730(&a3, (int)&a20); if ( (_BYTE)v45 ) { v106 = v40; v45 = 0; v46 = &a8; while ( *(_DWORD *)v46 != 3 ) { ++v45; v46 += 12; if ( v45 >= 4 ) goto LABEL_5; } v45 *= 3; if ( !*(&a10 + 4 * v45) ) { LABEL_5: if ( v44 ) { v105 = v44; v47 = v101; do { if ( v43 ) { v90 = v47; v86 = 8 - v47; v110 = 8 - v102; v88 = v102; v84 = 8 - v102; v109 = 8 - v103; v48 = 8 - v47; v113 = 8 - v47; v82 = v103; v80 = 8 - v103; v108 = v43; while ( 1 ) { v67 = *(_DWORD *)v106; v68 = v93 & *(_DWORD *)v106; v115 = 0; v69 = v68 >> v97; v116 = v47; if ( v48 <= v47 ) { v70 = v115; do { v70 = (v69 | v70) << v48; v47 = v116 - v48; v116 = v47; } while ( v47 >= v48 ); v115 = v70; } v111 = ((_BYTE)v69 << v90) | (v115 >> v48) | (v69 >> (v86 - v47)); v71 = (v94 & v67) >> v98; v72 = v102; v115 = 0; v116 = v102; if ( v110 <= v102 ) { v73 = v115; do { v73 = (v71 | v73) << v110; v72 = v116 - v110; v116 = v72; } while ( v72 >= v110 ); v115 = v73; } v74 = v109; v112 = ((_BYTE)v71 << v88) | (v115 >> v110) | (v71 >> (v84 - v72)); v75 = v103; v45 = (v95 & v67) >> v99; for ( i = 0; v75 >= v109; i = (v45 | i) << v109 ) v75 -= v109; *v40 = v111; v106 += 4; v40[1] = v112; v77 = v45 >> (v80 - v75); LOBYTE(v45) = (_BYTE)v45 << v82; v40 += 4; v107 = i; v66 = v108-- == 1; *(v40 - 2) = v45 | (i >> v74) | v77; v47 = v101; *(v40 - 1) = -1; if ( v66 ) break; v48 = v113; } v43 = v92; } --v105; } while ( v105 ); } return v45; } if ( v44 ) { v108 = v44; v49 = v101; do { if ( v43 ) { v91 = v49; v87 = 8 - v49; v114 = 8 - v102; v89 = v102; v85 = 8 - v102; v111 = 8 - v103; v83 = v103; v81 = 8 - v103; v109 = 8 - v104; v50 = 8 - v49; v112 = 8 - v49; v107 = v104; v79 = 8 - v104; v105 = v43; while ( 1 ) { v51 = *(_DWORD *)v106; v52 = v93 & *(_DWORD *)v106; v115 = 0; v53 = v52 >> v97; v116 = v49; if ( v50 <= v49 ) { v54 = v115; do { v54 = (v53 | v54) << v50; v49 = v116 - v50; v116 = v49; } while ( v49 >= v50 ); v115 = v54; } v110 = ((_BYTE)v53 << v91) | (v115 >> v50) | (v53 >> (v87 - v49)); v55 = (v94 & v51) >> v98; v56 = 0; v116 = v102; if ( v114 > v102 ) { v57 = v102; } else { v57 = v116; v115 = v114; do { v57 -= v114; v56 = (v55 | v56) << v115; } while ( v57 >= v114 ); } v113 = ((_BYTE)v55 << v89) | (v56 >> v114) | (v55 >> (v85 - v57)); v58 = (v95 & v51) >> v99; v59 = v103; v115 = 0; v116 = v103; if ( v111 <= v103 ) { v60 = v115; do { v60 = (v58 | v60) << v111; v59 = v116 - v111; v116 = v59; } while ( v59 >= v111 ); v115 = v60; } v61 = v109; v62 = ((_BYTE)v58 << v83) | (v115 >> v111) | (v58 >> (v81 - v59)); v45 = (v96 & v51) >> v100; v63 = 0; v116 = v62; for ( j = v104; j >= v109; v63 = (v45 | v63) << v109 ) j -= v109; *v40 = v110; v40[1] = v113; v106 += 4; v40[2] = v116; v65 = v45 >> (v79 - j); LOBYTE(v45) = (_BYTE)v45 << v107; v40 += 4; v115 = v63; v66 = v105-- == 1; *(v40 - 1) = v45 | (v63 >> v61) | v65; v49 = v101; if ( v66 ) break; v50 = v112; } v43 = v92; } --v108; } while ( v108 ); } } return v45; } //----- (0095AD70) -------------------------------------------------------- char __cdecl sub_95AD70(int a1, _DWORD *a2, char 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, char 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) { _BYTE *v38; // esi unsigned int v39; // edi unsigned int v40; // eax unsigned __int8 v41; // bl void (__cdecl *v42)(int, char *, unsigned int, unsigned int *, signed int); // edx unsigned __int8 v43; // dl unsigned int v44; // eax unsigned int i; // edi char v46; // cl char v47; // bl char *v48; // edx unsigned int v49; // eax unsigned int v50; // edi unsigned __int8 j; // bl char v52; // cl unsigned __int8 v53; // dl char v54; // bl char *v55; // eax unsigned int v56; // eax unsigned __int8 v57; // bl unsigned int v58; // eax unsigned int k; // edi char *v60; // ecx char v61; // bl unsigned __int8 v62; // dl int v63; // eax unsigned int v64; // eax unsigned int v65; // edi unsigned __int8 l; // bl bool v67; // zf unsigned __int8 v68; // dl unsigned int v69; // eax unsigned int m; // edi char v71; // cl char v72; // bl char *v73; // edx unsigned int v74; // eax unsigned int v75; // edi unsigned __int8 n; // bl char v77; // cl unsigned __int8 v78; // dl char v79; // bl char *v80; // eax unsigned int v81; // eax unsigned __int8 v82; // bl unsigned int v83; // eax unsigned int ii; // edi char v86; // [esp+Ch] [ebp-25Ch] char v87; // [esp+10h] [ebp-258h] char v88; // [esp+10h] [ebp-258h] unsigned int v89; // [esp+14h] [ebp-254h] char v90; // [esp+18h] [ebp-250h] char v91; // [esp+18h] [ebp-250h] char v92; // [esp+1Ch] [ebp-24Ch] char v93; // [esp+1Ch] [ebp-24Ch] unsigned __int8 v94; // [esp+20h] [ebp-248h] unsigned __int8 v95; // [esp+20h] [ebp-248h] int v96; // [esp+24h] [ebp-244h] char v97; // [esp+28h] [ebp-240h] char v98; // [esp+28h] [ebp-240h] char v99; // [esp+2Ch] [ebp-23Ch] char v100; // [esp+2Ch] [ebp-23Ch] int v101; // [esp+30h] [ebp-238h] int v102; // [esp+34h] [ebp-234h] int v103; // [esp+38h] [ebp-230h] unsigned int v104; // [esp+3Ch] [ebp-22Ch] char v105; // [esp+40h] [ebp-228h] char v106; // [esp+41h] [ebp-227h] char v107; // [esp+42h] [ebp-226h] char v108; // [esp+43h] [ebp-225h] unsigned __int8 v109; // [esp+44h] [ebp-224h] char v110; // [esp+45h] [ebp-223h] char v111; // [esp+46h] [ebp-222h] unsigned __int8 v112; // [esp+47h] [ebp-221h] unsigned int v113; // [esp+48h] [ebp-220h] unsigned int v114; // [esp+4Ch] [ebp-21Ch] unsigned int v115; // [esp+50h] [ebp-218h] unsigned __int8 v116; // [esp+57h] [ebp-211h] unsigned int v117; // [esp+58h] [ebp-210h] char *v118; // [esp+5Ch] [ebp-20Ch] unsigned __int8 v119; // [esp+61h] [ebp-207h] unsigned __int8 v120; // [esp+62h] [ebp-206h] unsigned __int8 v121; // [esp+63h] [ebp-205h] char v122; // [esp+64h] [ebp-204h] v38 = (_BYTE *)(a2[20] + *(_DWORD *)(a2[23] + 4 * a37) + a38 * *(_DWORD *)(a2[23] + 4 * a2[24])); v39 = 2 * *(_DWORD *)(a2[21] + 4 * a37) * *(_DWORD *)(a2[22] + 4 * a37); v96 = 2 * *(_DWORD *)(a2[21] + 4 * a37) * *(_DWORD *)(a2[22] + 4 * a37); LOBYTE(v40) = (unsigned int)sub_9530D0(&v101, &a3); v89 = 0; if ( v39 ) { v41 = v109; do { v113 = 512; if ( v39 - v89 < 0x200 ) v113 = v39 - v89; v42 = *(void (__cdecl **)(int, char *, unsigned int, unsigned int *, signed int))(a1 + 4); v115 = 1; v42(a1, &v122, v113, &v115, 1); if ( sub_75A550(&a20, (int)&unk_ABDAD0) ) { v118 = &v122; if ( v113 >> 1 ) { v94 = v41; v87 = 8 - v41; v121 = 8 - v110; v90 = v110; v97 = 8 - v110; v120 = 8 - v111; v92 = v111; v99 = 8 - v111; v119 = 8 - v112; v43 = 8 - v41; v116 = 8 - v41; v117 = v112; v86 = 8 - v112; v115 = v113 >> 1; while ( 1 ) { v44 = (unsigned int)(unsigned __int16)(v101 & *(_WORD *)v118) >> v105; for ( i = 0; v41 >= v43; i = (v44 | i) << v43 ) v41 -= v43; v46 = v106; v47 = (i >> v43) | (v44 >> (v87 - v41)); v48 = v118; *v38 = ((_BYTE)v44 << v94) | v47; v49 = (unsigned int)(unsigned __int16)(v102 & *(_WORD *)v48) >> v46; v114 = i; v50 = 0; for ( j = v110; j >= v121; v50 = (v49 | v50) << v121 ) j -= v121; v52 = v107; v53 = v120; v54 = ((_BYTE)v49 << v90) | (v50 >> v121) | (v49 >> (v97 - j)); v55 = v118; v38[1] = v54; v56 = (unsigned __int16)(v103 & *(_WORD *)v55); v57 = v111; v114 = v50; v58 = v56 >> v52; for ( k = 0; v57 >= v53; k = (v58 | k) << v53 ) v57 -= v53; v60 = v118; v61 = (k >> v53) | (v58 >> (v99 - v57)); v62 = v119; v38[2] = ((_BYTE)v58 << v92) | v61; v63 = *(unsigned __int16 *)v60; v114 = k; v64 = (v104 & v63) >> v108; v65 = 0; for ( l = v112; l >= v62; v65 = (v64 | v65) << v62 ) l -= v62; v118 += 2; v38 += 4; v114 = v65; v67 = v115-- == 1; *(v38 - 1) = ((_BYTE)v64 << v117) | (v65 >> v62) | (v64 >> (v86 - l)); v41 = v109; if ( v67 ) break; v43 = v116; } } } else { LOBYTE(v40) = sub_75A550(&a20, (int)&unk_ABDB18); if ( !(_BYTE)v40 ) return v40; v118 = &v122; v117 = v113 >> 1; if ( !(v113 >> 1) ) goto LABEL_31; v95 = v41; v88 = 8 - v41; v120 = 8 - v110; v91 = v110; v98 = 8 - v110; v121 = 8 - v111; v68 = 8 - v41; v93 = v111; v119 = 8 - v41; v100 = 8 - v111; v115 = v117; while ( 1 ) { v69 = (unsigned int)(unsigned __int16)(v101 & *(_WORD *)v118) >> v105; for ( m = 0; v41 >= v68; m = (v69 | m) << v68 ) v41 -= v68; v71 = v106; v72 = (m >> v68) | (v69 >> (v88 - v41)); v73 = v118; *v38 = ((_BYTE)v69 << v95) | v72; v74 = (unsigned int)(unsigned __int16)(v102 & *(_WORD *)v73) >> v71; v117 = m; v75 = 0; for ( n = v110; n >= v120; v75 = (v74 | v75) << v120 ) n -= v120; v77 = v107; v78 = v121; v79 = ((_BYTE)v74 << v91) | (v75 >> v120) | (v74 >> (v98 - n)); v80 = v118; v38[1] = v79; v81 = (unsigned __int16)(v103 & *(_WORD *)v80); v82 = v111; v117 = v75; v83 = v81 >> v77; for ( ii = 0; v82 >= v78; ii = (v83 | ii) << v78 ) v82 -= v78; v118 += 2; v38 += 3; v117 = ii; v67 = v115-- == 1; *(v38 - 1) = ((_BYTE)v83 << v93) | (ii >> v78) | (v83 >> (v100 - v82)); v41 = v109; if ( v67 ) break; v68 = v119; } } v39 = v96; LABEL_31: v40 = v113 + v89; v89 = v40; } while ( v40 < v39 ); } return v40; } //----- (0095B2E0) -------------------------------------------------------- _DWORD *__thiscall sub_95B2E0(char *this, int a2, int a3) { char *v3; // esi _DWORD *v4; // edi struct _RTL_CRITICAL_SECTION *v5; // ebx DWORD v6; // eax bool v7; // zf _DWORD *v9; // eax signed int v10; // eax signed int v11; // ebx unsigned int v12; // esi int v13; // eax int v14; // edx int v15; // ecx int v16; // edx signed int v17; // eax signed int v18; // ebx unsigned int v19; // esi char v20; // al char v21; // [esp-90h] [ebp-108h] int v22; // [esp-8Ch] [ebp-104h] int v23; // [esp-88h] [ebp-100h] int v24; // [esp-84h] [ebp-FCh] int v25; // [esp-80h] [ebp-F8h] char v26; // [esp-7Ch] [ebp-F4h] int v27; // [esp-78h] [ebp-F0h] char v28; // [esp-74h] [ebp-ECh] int v29; // [esp-70h] [ebp-E8h] int v30; // [esp-6Ch] [ebp-E4h] int v31; // [esp-68h] [ebp-E0h] int v32; // [esp-64h] [ebp-DCh] int v33; // [esp-60h] [ebp-D8h] int v34; // [esp-5Ch] [ebp-D4h] int v35; // [esp-58h] [ebp-D0h] int v36; // [esp-54h] [ebp-CCh] int v37; // [esp-50h] [ebp-C8h] char v38; // [esp-4Ch] [ebp-C4h] int v39; // [esp-48h] [ebp-C0h] int v40; // [esp-44h] [ebp-BCh] int v41; // [esp-40h] [ebp-B8h] int v42; // [esp-3Ch] [ebp-B4h] int v43; // [esp-38h] [ebp-B0h] int v44; // [esp-34h] [ebp-ACh] int v45; // [esp-30h] [ebp-A8h] int v46; // [esp-2Ch] [ebp-A4h] int v47; // [esp-28h] [ebp-A0h] int v48; // [esp-24h] [ebp-9Ch] int v49; // [esp-20h] [ebp-98h] int v50; // [esp-1Ch] [ebp-94h] int v51; // [esp-18h] [ebp-90h] int v52; // [esp-14h] [ebp-8Ch] int v53; // [esp-10h] [ebp-88h] int v54; // [esp-Ch] [ebp-84h] int *v55; // [esp-8h] [ebp-80h] int v56; // [esp-4h] [ebp-7Ch] char v57; // [esp+Ch] [ebp-6Ch] char v58; // [esp+10h] [ebp-68h] struct _RTL_CRITICAL_SECTION *v59; // [esp+14h] [ebp-64h] char v60; // [esp+1Bh] [ebp-5Dh] int v61; // [esp+1Ch] [ebp-5Ch] unsigned int v62; // [esp+20h] [ebp-58h] int v63; // [esp+24h] [ebp-54h] unsigned int v64; // [esp+28h] [ebp-50h] char *v65; // [esp+2Ch] [ebp-4Ch] char v66; // [esp+30h] [ebp-48h] v3 = this; v4 = (_DWORD *)a3; v65 = this; v63 = a2; sub_86A420(&v66); v5 = (struct _RTL_CRITICAL_SECTION *)(v3 + 4); v59 = (struct _RTL_CRITICAL_SECTION *)(v3 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); v6 = GetCurrentThreadId(); ++*((_DWORD *)v3 + 8); *((_DWORD *)v3 + 7) = v6; if ( !(*(unsigned __int8 (__thiscall **)(char *, int, char *, char *, char *, char *, unsigned int *))(*(_DWORD *)v3 + 12))( v3, v63, &v57, &v58, &v66, &v60, &v64) ) { v7 = (*((_DWORD *)v3 + 8))-- == 1; if ( v7 ) *((_DWORD *)v3 + 7) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); return 0; } if ( !a3 || **(_DWORD **)(a3 + 84) != *((_DWORD *)v3 + 10) || **(_DWORD **)(a3 + 88) != *((_DWORD *)v3 + 9) || !sub_75A550((_DWORD *)(a3 + 8), (int)&v66) || *(_DWORD *)(a3 + 96) != *((_DWORD *)v3 + 11) || *(_DWORD *)(a3 + 108) != v64 ) { v9 = operator new(0x70u); if ( v9 ) v4 = sub_8698C0(v9, *((_DWORD *)v3 + 10), *((_DWORD *)v3 + 9), &v66, *((_DWORD *)v3 + 11), v64); else v4 = 0; } v62 = v4[24]; if ( sub_75A550(&v66, (int)(v3 + 48)) ) { if ( v64 ) { v10 = -1; v65 = (char *)-1; do { switch ( v10 ) { case 0: v11 = 1; break; case 1: v11 = 2; break; case 2: v11 = 3; break; case 3: v11 = 4; break; case 4: v11 = 5; break; default: v11 = 0; break; } v12 = 0; if ( v62 ) { do { v13 = v4[23]; v14 = *(_DWORD *)(v13 + 4 * v12 + 4) - *(_DWORD *)(v13 + 4 * v12); v56 = 1; v55 = &v61; v15 = v4[24]; v54 = v14; v16 = v4[20] + *(_DWORD *)(v13 + 4 * v12) + v11 * *(_DWORD *)(v13 + 4 * v15); v61 = 1; (*(void (__cdecl **)(int, int, int, int *, signed int))(v63 + 4))(v63, v16, v54, &v61, 1); ++v12; } while ( v12 < v62 ); v10 = (signed int)v65; } v65 = (char *)++v10; } while ( v10 + 1 < v64 ); LABEL_48: v5 = v59; goto LABEL_49; } } else if ( v64 ) { v17 = -1; v61 = -1; do { switch ( v17 ) { case 0: v18 = 1; break; case 1: v18 = 2; break; case 2: v18 = 3; break; case 3: v18 = 4; break; case 4: v18 = 5; break; default: v18 = 0; break; } v19 = 0; if ( v62 ) { do { v20 = v65[49]; switch ( v20 ) { case 16: v56 = v18; v55 = (int *)v19; sub_86A140(&v38, &v66); sub_86A140(&v21, v65 + 48); sub_95AD70( v63, v4, v21, v22, v23, v24, v25, *(int *)&v26, v27, *(int *)&v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, (int)v55, v56); break; case 24: v56 = v18; v55 = (int *)v19; sub_86A140(&v38, &v66); sub_86A140(&v21, v65 + 48); sub_95A840( v63, v4, v21, v22, v23, v24, v25, *(int *)&v26, v27, *(int *)&v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, (int)v55, v56); break; case 32: v56 = v18; v55 = (int *)v19; sub_86A140(&v38, &v66); sub_86A140(&v21, v65 + 48); sub_95A900( v63, v4, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, (int)v55, v56); break; } ++v19; } while ( v19 < v62 ); v17 = v61; } v61 = ++v17; } while ( v17 + 1 < v64 ); goto LABEL_48; } LABEL_49: v7 = v5[1].LockCount-- == 1; if ( v7 ) v5[1].DebugInfo = 0; LeaveCriticalSection(v5); return v4; } //----- (0095B600) -------------------------------------------------------- bool __stdcall sub_95B600(const char *a1) { return sub_96C4B0(a1, ".bmp") == 0; } //----- (0095B620) -------------------------------------------------------- char *__thiscall sub_95B620(char *this) { char *v1; // ebx int v2; // ST00_4 v1 = this; *(_DWORD *)this = &NiImageReader::`vftable'; v2 = (int)(this + 4); *(_DWORD *)(v2 + 24) = 0; *(_DWORD *)(v2 + 28) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(this + 4)); *(_DWORD *)v1 = &NiBMPReader::`vftable'; sub_86A420((_DWORD *)v1 + 11); *((_DWORD *)v1 + 9) = 0; *((_DWORD *)v1 + 10) = 0; qmemcpy(v1 + 44, &unk_ABDB18, 0x44u); *((_WORD *)v1 + 56) = 0; *((_DWORD *)v1 + 29) = 0; *((_DWORD *)v1 + 30) = 0; *((_WORD *)v1 + 62) = 0; return v1; } // A0C924: using guessed type void *NiImageReader::`vftable'; // A4A42C: using guessed type void *NiBMPReader::`vftable'; //----- (0095B680) -------------------------------------------------------- char __thiscall sub_95B680(char *this, int a2, int a3, int a4, int a5, int a6, LPCRITICAL_SECTION lpCriticalSection) { int v7; // esi char *v8; // ebx void (__cdecl *v9)(int, int *, signed int, LPCRITICAL_SECTION *, signed int); // eax char result; // al DWORD v11; // eax void (__cdecl *v12)(int, char *, signed int, const void **, signed int); // ecx void (__cdecl *v13)(int, int *, signed int, const void **, signed int); // ecx void (__cdecl *v14)(int, int *, signed int, const void **, signed int); // ecx void (__cdecl *v15)(int, char *, signed int, const void **, signed int); // ecx void (__cdecl *v16)(int, int *, signed int, const void **, signed int); // ecx void (__cdecl *v17)(int, int *, signed int, const void **, signed int); // ecx void (__cdecl *v18)(int, int *, signed int, const void **, signed int); // ecx void (__cdecl *v19)(int, char *, signed int, const void **, signed int); // eax void (__cdecl *v20)(int, int *, signed int, const void **, signed int); // eax void (__cdecl *v21)(int, char *, signed int, const void **, signed int); // eax void (__cdecl *v22)(int, char *, signed int, const void **, signed int); // eax void (__cdecl *v23)(int, char *, signed int, const void **, signed int); // eax void (__cdecl *v24)(int, char *, signed int, const void **, signed int); // edx void (__cdecl *v25)(int, char *, signed int, const void **, signed int); // edx const void *v26; // esi int v27; // eax int v28; // esi bool v29; // cl int v30; // eax bool v31; // zf _DWORD *v32; // edx void *v33; // edi const void *v34; // esi _BYTE *v35; // eax struct _RTL_CRITICAL_SECTION *v36; // ecx LPCRITICAL_SECTION v37; // eax char v38; // [esp+8h] [ebp-24h] __int16 v39; // [esp+Ch] [ebp-20h] int v40; // [esp+10h] [ebp-1Ch] int v41; // [esp+14h] [ebp-18h] int v42; // [esp+18h] [ebp-14h] int v43; // [esp+1Ch] [ebp-10h] char v44; // [esp+20h] [ebp-Ch] char v45; // [esp+24h] [ebp-8h] const void *v46; // [esp+28h] [ebp-4h] v7 = a2; v8 = this; (*(void (__thiscall **)(int, _DWORD))(*(_DWORD *)a2 + 8))(a2, 0); lpCriticalSection->DebugInfo = (PRTL_CRITICAL_SECTION_DEBUG)1; v9 = *(void (__cdecl **)(int, int *, signed int, LPCRITICAL_SECTION *, signed int))(v7 + 4); lpCriticalSection = (LPCRITICAL_SECTION)2; v9(v7, &a2, 2, &lpCriticalSection, 1); if ( (_WORD)a2 != 19778 ) return 0; lpCriticalSection = (LPCRITICAL_SECTION)(v8 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v8 + 4)); v11 = GetCurrentThreadId(); ++*((_DWORD *)v8 + 8); *((_DWORD *)v8 + 7) = v11; v12 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v12(v7, &v45, 4, &v46, 1); v13 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)2; v13(v7, &a2, 2, &v46, 1); v14 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)2; v14(v7, &a2, 2, &v46, 1); v15 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v15(v7, v8 + 120, 4, &v46, 1); v16 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v16(v7, &v43, 4, &v46, 1); v17 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v17(v7, &v41, 4, &v46, 1); v18 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v18(v7, &v40, 4, &v46, 1); v46 = (const void *)2; (*(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4))(v7, &a2, 2, &v46, 1); v19 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)2; v19(v7, v8 + 112, 2, &v46, 1); v20 = *(void (__cdecl **)(int, int *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v20(v7, &v42, 4, &v46, 1); v21 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v21(v7, &v45, 4, &v46, 1); v22 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v22(v7, &v44, 4, &v46, 1); v23 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v23(v7, &v44, 4, &v46, 1); v24 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v24(v7, v8 + 116, 4, &v46, 1); v25 = *(void (__cdecl **)(int, char *, signed int, const void **, signed int))(v7 + 4); v46 = (const void *)4; v25(v7, &v45, 4, &v46, 1); if ( v43 == 4 ) goto LABEL_15; v39 = *((_WORD *)v8 + 56); v38 = *((_WORD *)v8 + 56); switch ( v39 ) { case 4: case 8: v26 = &unk_ABDA40; break; case 0x18: v26 = &unk_ABDB18; break; case 0x20: v26 = &unk_ABDAD0; break; default: goto LABEL_15; } v27 = v42; v46 = v8 + 44; qmemcpy(v8 + 44, v26, 0x44u); if ( v27 == 2 || v27 == 1 ) { LABEL_15: v37 = lpCriticalSection; v31 = lpCriticalSection[1].LockCount == 1; --v37[1].LockCount; if ( v31 ) v37[1].DebugInfo = 0; LeaveCriticalSection(v37); result = 0; } else { v28 = v41; v29 = v40 >= 0; v30 = abs(v40); v31 = *((_DWORD *)v8 + 29) == 0; *((_DWORD *)v8 + 9) = v41; v8[124] = v29; *((_DWORD *)v8 + 10) = v30; if ( v31 && v39 != 24 && v39 != 32 ) *((_DWORD *)v8 + 29) = 1 << v38; v32 = (_DWORD *)a4; v33 = (void *)a5; *(_DWORD *)a3 = v28; v34 = v46; v35 = (_BYTE *)a6; *v32 = *((_DWORD *)v8 + 10); qmemcpy(v33, v34, 0x44u); v36 = lpCriticalSection; *v35 = 1; sub_40DB50(v36); result = 1; } return result; } //----- (0095B960) -------------------------------------------------------- _DWORD *__thiscall sub_95B960(char *this, _DWORD *a2, int a3) { char *v3; // ebx DWORD v4; // eax bool v5; // zf _DWORD *result; // eax _DWORD *v7; // edi _DWORD *v8; // eax char v9; // al int v10; // ecx void (__cdecl *v11)(_DWORD *, char *, int, int *, signed int); // eax int v12; // edi char *v13; // eax char v14; // cl _DWORD *v15; // eax volatile LONG *v16; // eax volatile LONG *v17; // edi int v18; // eax int v19; // edi int v20; // eax int v21; // ecx int v22; // edx int v23; // eax void *v24; // eax int v25; // eax void (__cdecl *v26)(_DWORD *, void *, int, int *, signed int); // ecx int v27; // ecx volatile LONG *v28; // eax _BYTE *i; // edi int v30; // eax void *v31; // eax void (__cdecl *v32)(_DWORD *, void *, int, int *, signed int); // edx void (__cdecl *v33)(_DWORD *, int *, int, int *, signed int); // eax void (__cdecl *v34)(_DWORD *, void *, int, int *, signed int); // edx int v35; // eax void (__cdecl *v36)(_DWORD *, int, int, int *, signed int); // edx void (__cdecl *v37)(_DWORD *, int *, int, int *, signed int); // eax unsigned int v38; // ST1C_4 void (__cdecl *v39)(_DWORD *, int, unsigned int, int *, signed int); // eax int v40; // ST18_4 int v41; // ecx _DWORD *v42; // edi char *v43; // eax int j; // esi char v45; // dl LPCRITICAL_SECTION v46; // eax char v47; // [esp+Ch] [ebp-47Ch] char v48; // [esp+10h] [ebp-478h] char v49; // [esp+14h] [ebp-474h] LPCRITICAL_SECTION lpCriticalSection; // [esp+18h] [ebp-470h] unsigned int v51; // [esp+1Ch] [ebp-46Ch] int v52; // [esp+20h] [ebp-468h] char v53; // [esp+27h] [ebp-461h] int v54; // [esp+28h] [ebp-460h] int v55; // [esp+2Ch] [ebp-45Ch] void *v56; // [esp+30h] [ebp-458h] _DWORD *v57; // [esp+34h] [ebp-454h] int v58; // [esp+38h] [ebp-450h] volatile LONG *v59; // [esp+3Ch] [ebp-44Ch] char v60; // [esp+40h] [ebp-448h] char Src; // [esp+84h] [ebp-404h] char v62; // [esp+86h] [ebp-402h] v3 = this; v55 = a3; sub_86A420(&v60); lpCriticalSection = (LPCRITICAL_SECTION)(v3 + 4); EnterCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); v4 = GetCurrentThreadId(); ++*((_DWORD *)v3 + 8); *((_DWORD *)v3 + 7) = v4; if ( (*(unsigned __int8 (__thiscall **)(char *, _DWORD *, char *, char *, char *, char *, char *))(*(_DWORD *)v3 + 12))( v3, a2, &v47, &v49, &v60, &v53, &v48) ) { v7 = (_DWORD *)v55; if ( v55 && **(_DWORD **)(v55 + 84) == *((_DWORD *)v3 + 9) && **(_DWORD **)(v55 + 88) == *((_DWORD *)v3 + 10) && sub_75A550((_DWORD *)(v55 + 8), (int)(v3 + 44)) ) { v57 = v7; } else { v8 = operator new(0x70u); if ( v8 ) v57 = sub_8698C0(v8, *((_DWORD *)v3 + 9), *((_DWORD *)v3 + 10), (_DWORD *)v3 + 11, 1u, 1); else v57 = 0; } v9 = sub_75A550((_DWORD *)v3 + 11, (int)&unk_ABDA40); v10 = 4 * *((_DWORD *)v3 + 29); if ( v9 ) { v11 = (void (__cdecl *)(_DWORD *, char *, int, int *, signed int))a2[1]; v55 = 1; v11(a2, &Src, v10, &v55, 1); v12 = *((_DWORD *)v3 + 29); if ( v12 ) { v13 = &v62; do { v14 = *(v13 - 2); *(v13 - 2) = *v13; *v13 = v14; v13[1] = -1; v13 += 4; --v12; } while ( v12 ); } v15 = operator new(0x24u); if ( v15 ) { v16 = (volatile LONG *)sub_875720(v15, 0, 256, &Src); v59 = v16; } else { v59 = 0; v16 = 0; } v17 = (volatile LONG *)v57[19]; if ( v17 != v16 ) { if ( v17 ) { if ( !InterlockedDecrement(v17 + 1) && v17 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v17)(v17, 1); v16 = v59; } v57[19] = v16; if ( v16 ) InterlockedIncrement(v16 + 1); } } else { (*(void (__thiscall **)(_DWORD *, int, signed int))(*a2 + 12))(a2, v10, 1); } v18 = *((_DWORD *)v3 + 30) - 4 * *((_DWORD *)v3 + 29) - 54; if ( v18 > 0 ) (*(void (__thiscall **)(_DWORD *, int, signed int))(*a2 + 12))(a2, v18, 1); v19 = v57[25] * *(_DWORD *)v57[21]; if ( *((_WORD *)v3 + 56) == 4 ) { v20 = *((_DWORD *)v3 + 9) & 1; v21 = v20 + (*((_DWORD *)v3 + 9) >> 1); v22 = ((_BYTE)v20 + (unsigned __int8)(*((_DWORD *)v3 + 9) >> 1)) & 3; v58 = v20 + (*((_DWORD *)v3 + 9) >> 1); if ( v58 & 3 ) v23 = 4 - v22; else v23 = 0; v54 = v21 + v23; v24 = operator new(v21 + v23); v5 = v3[124] == 0; v56 = v24; if ( v5 ) { v25 = v57[20] + *(_DWORD *)v57[23]; } else { v25 = v57[20] + *(_DWORD *)v57[23] + v19 * (*(_DWORD *)v57[22] - 1); v19 = -v19; } v5 = *((_DWORD *)v3 + 10) == 0; v55 = v19; v59 = (volatile LONG *)v25; v51 = 0; if ( !v5 ) { do { v26 = (void (__cdecl *)(_DWORD *, void *, int, int *, signed int))a2[1]; v52 = 1; v26(a2, v56, v54, &v52, 1); v27 = v58; v28 = v59; for ( i = v56; v27; --v27 ) { *(_BYTE *)v28 = *i >> 4; *((_BYTE *)v28 + 1) = *i & 0xF; v28 = (volatile LONG *)((char *)v28 + 2); ++i; } v59 = (volatile LONG *)((char *)v59 + v55); ++v51; } while ( v51 < *((_DWORD *)v3 + 10) ); } operator delete(v56); } else if ( v3[124] ) { v30 = *(_DWORD *)v57[23] + v19 * (*((_DWORD *)v3 + 10) - 1); v59 = 0; v31 = (void *)(v57[20] + v30); v56 = v31; if ( v19 & 3 ) { v5 = *((_DWORD *)v3 + 10) == 0; v54 = 4 - (v19 & 3); if ( !v5 ) { while ( 1 ) { v32 = (void (__cdecl *)(_DWORD *, void *, int, int *, signed int))a2[1]; v58 = 1; v32(a2, v31, v19, &v58, 1); v33 = (void (__cdecl *)(_DWORD *, int *, int, int *, signed int))a2[1]; v58 = 1; v33(a2, &v52, v54, &v58, 1); v56 = (char *)v56 - v19; v59 = (volatile LONG *)((char *)v59 + 1); if ( (unsigned int)v59 >= *((_DWORD *)v3 + 10) ) break; v31 = v56; } } } else if ( *((_DWORD *)v3 + 10) ) { while ( 1 ) { v34 = (void (__cdecl *)(_DWORD *, void *, int, int *, signed int))a2[1]; v58 = 1; v34(a2, v31, v19, &v58, 1); v56 = (char *)v56 - v19; v59 = (volatile LONG *)((char *)v59 + 1); if ( (unsigned int)v59 >= *((_DWORD *)v3 + 10) ) break; v31 = v56; } } } else if ( v19 & 3 ) { v54 = 4 - (v19 & 3); v35 = v57[20] + *(_DWORD *)v57[23]; v5 = *((_DWORD *)v3 + 10) == 0; v59 = (volatile LONG *)(v57[20] + *(_DWORD *)v57[23]); v55 = 0; if ( !v5 ) { while ( 1 ) { v36 = (void (__cdecl *)(_DWORD *, int, int, int *, signed int))a2[1]; v58 = 1; v36(a2, v35, v19, &v58, 1); v37 = (void (__cdecl *)(_DWORD *, int *, int, int *, signed int))a2[1]; v58 = 1; v37(a2, &v52, v54, &v58, 1); v59 = (volatile LONG *)((char *)v59 + v19); if ( (unsigned int)++v55 >= *((_DWORD *)v3 + 10) ) break; v35 = (int)v59; } } } else { v38 = *((_DWORD *)v3 + 10) * (((*((_DWORD *)v3 + 9) * (unsigned int)*((unsigned __int16 *)v3 + 56) + 31) >> 3) & 0x1FFFFFFC); v39 = (void (__cdecl *)(_DWORD *, int, unsigned int, int *, signed int))a2[1]; v40 = v57[20] + *(_DWORD *)v57[23]; v58 = 1; v39(a2, v40, v38, &v58, 1); } if ( sub_75A550((_DWORD *)v3 + 11, (int)&unk_ABDB18) || sub_75A550((_DWORD *)v3 + 11, (int)&unk_ABDAD0) ) { v41 = *((_DWORD *)v3 + 9) * *((_DWORD *)v3 + 10); v42 = v57; v43 = (char *)(v57[20] + *(_DWORD *)v57[23]); for ( j = v57[25]; v41; --v41 ) { v45 = *v43; *v43 = v43[2]; v43[2] = v45; v43 += j; } } else { v42 = v57; } v46 = lpCriticalSection; v5 = lpCriticalSection[1].LockCount == 1; --v46[1].LockCount; if ( v5 ) v46[1].DebugInfo = 0; LeaveCriticalSection(v46); result = v42; } else { v5 = (*((_DWORD *)v3 + 8))-- == 1; if ( v5 ) *((_DWORD *)v3 + 7) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(v3 + 4)); result = 0; } return result; } //----- (0095BF40) -------------------------------------------------------- _DWORD *__thiscall sub_95BF40(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NiShaderDescBase::`vftable'; v1[2] = 0; v1[3] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A440: using guessed type void *NiShaderDescBase::`vftable'; //----- (0095BF80) -------------------------------------------------------- LONG __thiscall sub_95BF80(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST04_4 v1 = this; v2 = (void *)this[2]; *this = &NiShaderDescBase::`vftable'; operator delete(v2); operator delete((void *)v1[3]); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A440: using guessed type void *NiShaderDescBase::`vftable'; //----- (0095BFC0) -------------------------------------------------------- void __thiscall sub_95BFC0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[2]); v2[2] = 0; if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[2] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0095C020) -------------------------------------------------------- void __thiscall sub_95C020(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[3]); v2[3] = 0; if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[3] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0095C080) -------------------------------------------------------- void **__thiscall sub_95C080(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiShaderDescBase::`vftable'; operator delete(v3); operator delete(v2[3]); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A440: using guessed type void *NiShaderDescBase::`vftable'; //----- (0095C0D0) -------------------------------------------------------- int sub_95C0D0() { atexit(loc_95C0E0); return 0; } //----- (0095C100) -------------------------------------------------------- int __thiscall sub_95C100(_DWORD *this, char a2) { if ( a2 ) ++this[15]; else --this[15]; return this[15]; } //----- (0095C120) -------------------------------------------------------- char __thiscall sub_95C120(_DWORD *this, int a2, int a3, int a4) { char v4; // bl char result; // al v4 = 0; if ( this[13] != a3 ) { this[13] = a3; v4 = 1; } if ( this[14] == a4 ) { if ( v4 ) (*(void (**)(void))(*this + 36))(); result = v4; } else { this[14] = a4; (*(void (**)(void))(*this + 36))(); result = 1; } return result; } //----- (0095C160) -------------------------------------------------------- char __thiscall sub_95C160(_DWORD *this, int a2, int a3, int a4) { char v4; // bl int v5; // eax int v6; // eax v4 = 0; if ( a3 < 0 ) { v5 = this[13] + a3; if ( v5 < this[17] ) goto LABEL_7; goto LABEL_6; } if ( a3 > 0 ) { v5 = this[13] + a3; if ( v5 < this[18] ) { LABEL_6: v4 = 1; this[13] = v5; goto LABEL_7; } } LABEL_7: if ( a4 >= 0 ) { if ( a4 > 0 ) { v6 = this[14] + a4; if ( v6 < this[20] ) goto LABEL_9; } } else { v6 = this[14] + a4; if ( v6 >= this[19] ) { LABEL_9: this[14] = v6; (*(void (**)(void))(*this + 36))(); return 1; } } if ( v4 ) (*(void (**)(void))(*this + 36))(); return v4; } //----- (0095C1D0) -------------------------------------------------------- char __usercall sub_95C1D0@(int a1@, int a2@) { _DWORD *v2; // esi int v4; // edi float v5; // ST28_4 double v6; // st7 float *v7; // eax float v8; // ST24_4 float v9; // ST18_4 double v10; // st7 float v11; // ST1C_4 v2 = (_DWORD *)a1; if ( !*(_DWORD *)(a1 + 44) ) return 0; v4 = (*(int (__stdcall **)(int))(**(_DWORD **)(a1 + 8) + 108))(a2); v5 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 60))(v4, 0); v6 = (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v4 + 64))(v4, 0); v7 = (float *)v2[11]; v8 = 1.0 / v6; v9 = (double)(signed int)v2[13] * v5; v10 = (double)(signed int)v2[14]; v7[22] = v9; v11 = v10 * v8; v7[23] = v11; v7[24] = 0.5; sub_85BED0((_DWORD **)v2[11], 0.0, 1); return 1; } //----- (0095C280) -------------------------------------------------------- _DWORD *__thiscall sub_95C280(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v2 = &NiCursor::`vftable'; v2[2] = a2; if ( a2 ) InterlockedIncrement((volatile LONG *)(a2 + 4)); v2[3] = 0; v2[4] = 0; v2[5] = 0; v2[8] = 0; v2[9] = 0; v2[10] = 0; v2[11] = 0; v2[13] = 0; v2[14] = 0; v2[15] = 0; *((_BYTE *)v2 + 64) = 0; v2[17] = 0; v2[19] = 0; v2[18] = 0; v2[20] = 0; return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A458: using guessed type void *NiCursor::`vftable'; //----- (0095C2F0) -------------------------------------------------------- char *sub_95C2F0() { return dword_BA71F4; } //----- (0095C300) -------------------------------------------------------- LONG __thiscall sub_95C300(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // edi int v7; // edi int v8; // edi int v9; // edi v1 = this; *this = &NiCursor::`vftable'; v2 = this[9]; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[9] = 0; } v3 = v1[11]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[11] = 0; } v4 = v1[2]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[2] = 0; } v5 = v1[11]; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = v1[10]; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) && v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); v7 = v1[9]; if ( v7 && !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(int, signed int))v7)(v7, 1); v8 = v1[8]; if ( v8 && !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(int, signed int))v8)(v8, 1); v9 = v1[2]; if ( v9 && !InterlockedDecrement((volatile LONG *)(v9 + 4)) && v9 ) (**(void (__thiscall ***)(int, signed int))v9)(v9, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A458: using guessed type void *NiCursor::`vftable'; //----- (0095C430) -------------------------------------------------------- int __thiscall sub_95C430(_DWORD *this) { _DWORD *v1; // esi int v2; // ecx int v3; // ST00_4 int result; // eax v1 = this; if ( this[15] > 0 ) { v2 = this[2]; if ( (*(_DWORD *)(v2 + 116) == 1 || *(_DWORD *)(v2 + 120) == 1) && *(_BYTE *)(v2 + 128) == 1 ) (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v2 + 284))(0); v3 = v1[2]; result = sub_868B60((void *)v1[11]); } return result; } //----- (0095C470) -------------------------------------------------------- void *__thiscall sub_95C470(void *this, char a2) { void *v2; // esi v2 = this; sub_95C300(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0095C4A0) -------------------------------------------------------- char __userpurge sub_95C4A0@(int a1@, int a2@, char *Src) { int v3; // edi volatile LONG *v4; // eax volatile LONG *v5; // ebx volatile LONG *v7; // esi _DWORD *v8; // ecx _DWORD *v9; // eax _DWORD *v10; // eax int v11; // esi _DWORD *v12; // eax _DWORD *v13; // eax _DWORD *v14; // ebx _DWORD *v15; // eax _DWORD *v16; // eax _DWORD *v17; // eax int v18; // ebx float v19; // ST20_4 float v20; // ST1C_4 float v21; // ST18_4 int v22; // ecx float *v23; // eax double v24; // st7 int v25; // eax _DWORD **v26; // ecx int v27; // [esp+1Ch] [ebp-30h] int v28; // [esp+28h] [ebp-24h] int v29; // [esp+2Ch] [ebp-20h] int v30; // [esp+30h] [ebp-1Ch] float v31; // [esp+34h] [ebp-18h] float v32; // [esp+38h] [ebp-14h] float v33; // [esp+3Ch] [ebp-10h] volatile LONG *v34; // [esp+40h] [ebp-Ch] float v35; // [esp+44h] [ebp-8h] float v36; // [esp+48h] [ebp-4h] char *Srca; // [esp+54h] [ebp+8h] float Srcb; // [esp+54h] [ebp+8h] v3 = a1; v28 = 2; v30 = 0; v29 = 1; v4 = sub_865EB0(Src, (int)&v28, 0); v5 = v4; v34 = v4; if ( !v4 ) return 0; v27 = a2; v7 = *(volatile LONG **)(v3 + 36); if ( v7 != v4 ) { if ( v7 && !InterlockedDecrement(v7 + 1) && v7 ) (**(void (__thiscall ***)(volatile LONG *, signed int))v7)(v7, 1); *(_DWORD *)(v3 + 36) = v5; InterlockedIncrement(v5 + 1); } v8 = *(_DWORD **)(v3 + 40); if ( !v8 ) { v9 = operator new(0x44u); if ( v9 ) { v10 = sub_863BB0(v9); Srca = (char *)v10; } else { Srca = 0; v10 = 0; } v11 = *(_DWORD *)(v3 + 40); if ( (_DWORD *)v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v10 = Srca; } *(_DWORD *)(v3 + 40) = v10; if ( v10 ) InterlockedIncrement(v10 + 1); } v8 = *(_DWORD **)(v3 + 40); if ( !v8 ) return 0; } sub_42AB40(v8, (int)v5); sub_45C760(*(_DWORD ***)(v3 + 40), 0); *(_DWORD *)(*(_DWORD *)(v3 + 40) + 28) = 0; if ( !*(_DWORD *)(v3 + 44) ) { if ( !*(_DWORD *)(v3 + 32) ) { v12 = operator new(0x20u); if ( v12 ) v13 = sub_40DC70(v12); else v13 = 0; sub_56FF80((_DWORD *)(v3 + 32), (int)v13); *(_WORD *)(*(_DWORD *)(v3 + 32) + 28) |= 1u; } v14 = operator new(0xC4u); if ( v14 ) { v15 = operator new(0x70u); if ( v15 ) { v16 = sub_868440(v15, 0, 0, 1u, 1, 1, 4, 1, 2, 1); v17 = sub_868C00(v14, (int)v16); } else { v17 = sub_868C00(v14, 0); } } else { v17 = 0; } sub_56FF80((_DWORD *)(v3 + 44), (int)v17); sub_867880(*(_WORD **)(*(_DWORD *)(v3 + 44) + 184), 4, 0, 0); v18 = (*(int (__stdcall **)(int))(**(_DWORD **)(v3 + 8) + 108))(v27); Srcb = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v18 + 60))(v18, 0); v36 = 1.0 / (double)(unsigned int)(*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v18 + 64))(v18, 0); v35 = v36 * 32.0; v19 = v35; v35 = 32.0 * Srcb; v20 = v35; v35 = (double)*(unsigned int *)(v3 + 20) * -v36; v21 = v35; v22 = *(_DWORD *)(*(_DWORD *)(v3 + 44) + 184); v35 = (double)*(unsigned int *)(v3 + 16) * -Srcb; sub_867E60(v22, 0, v35, v21, v20, v19); sub_867680(*(_DWORD *)(*(_DWORD *)(v3 + 44) + 184)); sub_8681A0(*(_DWORD *)(*(_DWORD *)(v3 + 44) + 184), 0, 0, 0.0, 0.0, 1.0, 1.0); sub_403700(*(_DWORD **)(v3 + 44), *(_DWORD *)(v3 + 40)); sub_403700(*(_DWORD **)(v3 + 44), *(_DWORD *)(v3 + 32)); v23 = *(float **)(v3 + 44); v5 = v34; v35 = (double)*(signed int *)(v3 + 52); v24 = v35; v31 = v35 * Srcb; v23[22] = v31; v32 = v24 * v36; v23[23] = v32; v33 = 0.5; v23[24] = 0.5; } *(_DWORD *)(v3 + 24) = (*(int (__thiscall **)(volatile LONG *))(*v5 + 60))(v5); v25 = (*(int (__thiscall **)(volatile LONG *))(*v5 + 64))(v5); v26 = *(_DWORD ***)(v3 + 44); *(_DWORD *)(v3 + 28) = v25; sub_85BED0(v26, 0.0, 1); sub_85C4D0(*(_DWORD **)(v3 + 44)); return 1; } // 95C4A0: could not find valid save-restore pair for esi //----- (0095C7F0) -------------------------------------------------------- int __thiscall sub_95C7F0(_DWORD *this, char *a2) { _DWORD *v2; // edi char *v3; // eax char *v4; // esi unsigned int v5; // ebx char *v6; // eax unsigned int v7; // ebx char *v8; // eax unsigned int v9; // ebx char *v10; // eax unsigned int v11; // ebx char *v13; // [esp+Ch] [ebp-4h] v2 = this; v3 = sub_8784D0(*(int *)dword_BA71F4); v4 = a2; v5 = *((_DWORD *)a2 + 3); v13 = v3; if ( v5 >= *((_DWORD *)a2 + 2) ) sub_8237A0(a2, v5 + *((_DWORD *)a2 + 5)); sub_823870(v4, v5, &v13); v6 = sub_878670((int)"m_uiFlags", v2[3]); v7 = *((_DWORD *)v4 + 3); a2 = v6; if ( v7 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v7 + *((_DWORD *)v4 + 5)); sub_823870(v4, v7, &a2); v8 = sub_878670((int)"m_uiHotSpotX", v2[4]); v9 = *((_DWORD *)v4 + 3); a2 = v8; if ( v9 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v9 + *((_DWORD *)v4 + 5)); sub_823870(v4, v9, &a2); v10 = sub_878670((int)"m_uiHotSpotY", v2[5]); v11 = *((_DWORD *)v4 + 3); a2 = v10; if ( v11 >= *((_DWORD *)v4 + 2) ) sub_8237A0(v4, v11 + *((_DWORD *)v4 + 5)); sub_823870(v4, v11, &a2); (*(void (__stdcall **)(char *))(*(_DWORD *)v2[9] + 32))(v4); return (*(int (__stdcall **)(char *))(*(_DWORD *)v2[11] + 32))(v4); } //----- (0095C8F0) -------------------------------------------------------- int __cdecl sub_95C8F0(int a1) { int result; // eax result = a1; dword_BA71FC = a1; return result; } // BA71FC: using guessed type int dword_BA71FC; //----- (0095C900) -------------------------------------------------------- bool __cdecl sub_95C900(signed int a1, signed int a2) { _DWORD *v2; // edi void (__cdecl *v3)(signed int, signed int *, signed int, int *, signed int); // edx bool result; // al void (__cdecl *v5)(signed int, signed int *, signed int, int *, signed int); // edx int v6; // [esp+4h] [ebp-4h] v2 = (_DWORD *)a2; v6 = 4; if ( !a2 ) { v5 = *(void (__cdecl **)(signed int, signed int *, signed int, int *, signed int))(a1 + 8); a2 = 0; v5(a1, &a2, 4, &v6, 1); return 1; } v3 = *(void (__cdecl **)(signed int, signed int *, signed int, int *, signed int))(a1 + 8); a2 = 1; v3(a1, &a2, 4, &v6, 1); result = sub_967FF0(v2, a1); if ( result ) return 1; return result; } //----- (0095C970) -------------------------------------------------------- char __cdecl sub_95C970(int a1, signed int a2) { signed int v2; // edi void (__cdecl *v3)(int, signed int *, signed int, int *, signed int); // edx char result; // al void (__cdecl *v5)(int, signed int *, signed int, int *, signed int); // edx int v6; // [esp+4h] [ebp-4h] v2 = a2; v6 = 4; if ( !a2 ) { v5 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(a1 + 8); a2 = 0; v5(a1, &a2, 4, &v6, 1); return 1; } v3 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(a1 + 8); a2 = 1; v3(a1, &a2, 4, &v6, 1); result = (*(int (__thiscall **)(signed int, int))(*(_DWORD *)v2 + 20))(v2, a1); if ( result ) return 1; return result; } //----- (0095C9E0) -------------------------------------------------------- char __cdecl sub_95C9E0(int a1, _DWORD *a2) { int v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx _DWORD *v5; // eax _DWORD *v6; // eax _DWORD **v7; // edi _DWORD *v8; // esi int v9; // [esp+4h] [ebp-4h] v2 = a1; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a1 + 4); v9 = 4; v3(a1, &a1, 4, &v9, 1); if ( !a1 ) return 1; v5 = operator new(0x14u); if ( v5 ) v6 = sub_9680D0(v5); else v6 = 0; v7 = (_DWORD **)a2; *a2 = v6; if ( sub_968120(v6, v2) ) return 1; v8 = *v7; if ( *v7 ) { sub_967E60(*v7); operator delete(v8); } *v7 = 0; return 0; } //----- (0095CA70) -------------------------------------------------------- char __cdecl sub_95CA70(int a1, void (__stdcall ****a2)(signed int)) { int v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx char result; // al _DWORD *v5; // eax void (__stdcall ***v6)(signed int); // eax void (__stdcall ****v7)(signed int); // edi int v8; // [esp+4h] [ebp-4h] v2 = a1; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a1 + 4); v8 = 4; v3(a1, &a1, 4, &v8, 1); if ( a1 ) { v5 = operator new(0x48u); if ( v5 ) v6 = (void (__stdcall ***)(signed int))sub_962A00(v5); else v6 = 0; v7 = a2; *a2 = v6; if ( ((unsigned __int8 (__thiscall *)(void (__stdcall ***)(signed int), int))(*v6)[6])(v6, v2) ) { result = 1; } else { if ( *v7 ) (***v7)(1); *v7 = 0; result = 0; } } else { *a2 = 0; result = 1; } return result; } //----- (0095CB00) -------------------------------------------------------- int __cdecl sub_95CB00(_BYTE *a1) { CHAR *v1; // ecx _BYTE *v2; // eax bool v3; // cf unsigned __int8 v4; // dl int v5; // eax if ( a1 ) { v1 = (CHAR *)&byte_9A8050; v2 = a1; while ( 1 ) { v3 = *v2 < (unsigned __int8)*v1; if ( *v2 != *v1 ) break; if ( !*v2 ) goto LABEL_7; v4 = v2[1]; v3 = v4 < (unsigned __int8)v1[1]; if ( v4 != v1[1] ) break; v2 += 2; v1 += 2; if ( !v4 ) { LABEL_7: v5 = 0; goto LABEL_9; } } v5 = -v3 - (v3 - 1); LABEL_9: if ( v5 ) nullsub_6(v1); } return 0; } //----- (0095CB50) -------------------------------------------------------- rsize_t __thiscall sub_95CB50(void *this, char *Src) { return sub_92C100((int)this + 8, 0, Src); } //----- (0095CB70) -------------------------------------------------------- rsize_t __thiscall sub_95CB70(void *this, char *Src) { return sub_92C100((int)this + 12, 0, Src); } //----- (0095CB90) -------------------------------------------------------- int __thiscall sub_95CB90(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBImplementation *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBImplementation *>::`vftable'; return result; } // A4A54C: using guessed type void *NiTListBase,NSBImplementation *>::`vftable'; // A4A55C: using guessed type void *NiTPointerListBase,NSBImplementation *>::`vftable'; //----- (0095CBD0) -------------------------------------------------------- void *__thiscall sub_95CBD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBImplementation *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A54C: using guessed type void *NiTListBase,NSBImplementation *>::`vftable'; //----- (0095CC00) -------------------------------------------------------- void *__thiscall sub_95CC00(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBObjectTable::ObjectDesc *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A534: using guessed type void *NiTListBase,NSBObjectTable::ObjectDesc *>::`vftable'; //----- (0095CC30) -------------------------------------------------------- void *__thiscall sub_95CC30(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A544: using guessed type void *NiTArray::`vftable'; //----- (0095CC60) -------------------------------------------------------- _DWORD *__thiscall sub_95CC60(_DWORD *this, char *Src, char a3) { _DWORD *v3; // edi _DWORD *v4; // esi _DWORD *v5; // eax int v7; // [esp+Ch] [ebp-4h] v3 = this + 34; v4 = 0; v7 = 0; if ( sub_8C4C90(this + 34, (int)Src, &v7) || !a3 ) return (_DWORD *)v7; v5 = operator new(0x1Cu); if ( v5 ) v4 = sub_968A20(v5); sub_968250((int)v4, Src); sub_815C70(v3, (int)Src, (int)v4); return v4; } //----- (0095CCD0) -------------------------------------------------------- const char **__thiscall sub_95CCD0(_DWORD *this, const char *a2) { unsigned int v2; // edx unsigned int v3; // esi const char ***v4; // edi const char **result; // eax unsigned int v6; // [esp+Ch] [ebp-4h] v2 = this[42]; v3 = 0; v6 = v2; if ( v2 ) { v4 = (const char ***)this[40]; do { result = *v4; if ( *v4 ) { if ( !strcmp(*result, a2) ) return result; v2 = v6; } ++v3; ++v4; } while ( v3 < v2 ); } return 0; } //----- (0095CD40) -------------------------------------------------------- char __thiscall sub_95CD40(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // edi unsigned int v4; // esi _DWORD *v6; // eax _DWORD *v7; // ebx unsigned int v8; // edi float *v9; // eax _DWORD *v10; // esi int v11; // ST04_4 char *v12; // eax int v13; // [esp+10h] [ebp-5Ch] unsigned int v14; // [esp+14h] [ebp-58h] unsigned int v15; // [esp+18h] [ebp-54h] _DWORD *v16; // [esp+1Ch] [ebp-50h] unsigned int v17; // [esp+20h] [ebp-4Ch] char v18; // [esp+27h] [ebp-45h] char v19; // [esp+28h] [ebp-44h] v3 = a3; v16 = this; v18 = 1; v4 = 0; v14 = sub_941DB0(a3); v17 = 0; if ( !v14 ) return 1; while ( 1 ) { v6 = sub_963310(v3, v4, 0); v7 = v6; if ( v6 ) { v8 = 0; v15 = sub_9646B0(v6); if ( v15 ) { do { v9 = sub_9646C0(v7, v8, 0); if ( v9 && ((_DWORD)v9[22] & 0xF0000000) == 0x10000000 ) { v10 = sub_9603D0(v16 + 19, *((char **)v9 + 23)); if ( v10 ) { v13 = (int)&v19; sub_95F460(v10, (int)&v13, 0x40u); v11 = sub_965070(v10); v12 = (char *)sub_965050(v10); sub_931760(v12, v11, 0x40u, &v19); } else { v18 = 0; } } ++v8; } while ( v8 < v15 ); v4 = v17; } } v17 = ++v4; if ( v4 >= v14 ) break; v3 = a3; } return v18; } //----- (0095CE50) -------------------------------------------------------- char __thiscall sub_95CE50(_DWORD *this, int a2, _DWORD *a3) { int v3; // eax unsigned int v4; // ecx _DWORD *v5; // eax _DWORD *v6; // edi unsigned int v7; // ebx unsigned int v8; // esi float *v9; // eax _DWORD *v10; // eax int v11; // eax unsigned int v13; // [esp+4h] [ebp-10h] _DWORD *v14; // [esp+8h] [ebp-Ch] unsigned int v15; // [esp+Ch] [ebp-8h] char v16; // [esp+13h] [ebp-1h] v14 = this; v16 = 1; v3 = sub_941DB0(a3); v4 = 0; v13 = v3; v15 = 0; if ( !v3 ) return 1; do { v5 = sub_963310(a3, v4, 0); v6 = v5; if ( v5 ) { v7 = sub_9646B0(v5); v8 = 0; if ( v7 ) { do { v9 = sub_9646C0(v6, v8, 0); if ( v9 && ((_DWORD)v9[22] & 0xF0000000) == 0x10000000 ) { v10 = sub_9603D0(v14 + 19, *((char **)v9 + 23)); if ( v10 ) { v11 = sub_965050(v10); sub_931800(v11); } else { v16 = 0; } } ++v8; } while ( v8 < v7 ); } } v4 = v15 + 1; v15 = v4; } while ( v4 < v13 ); return v16; } //----- (0095CF10) -------------------------------------------------------- _DWORD *__stdcall sub_95CF10(int a1, int a2) { _DWORD *result; // eax unsigned int v3; // ecx unsigned int v4; // ecx result = (_DWORD *)a2; *(_DWORD *)a2 = *(_DWORD *)(a1 + 1820); *(_DWORD *)(a2 + 12) = *(_DWORD *)(a1 + 1832); *(_DWORD *)(a2 + 24) = *(_DWORD *)(a1 + 1844); *(_DWORD *)(a2 + 4) = *(_DWORD *)(a1 + 1824); *(_DWORD *)(a2 + 16) = *(_DWORD *)(a1 + 1836); *(_DWORD *)(a2 + 28) = *(_DWORD *)(a1 + 1848); *(_DWORD *)(a2 + 8) = *(_DWORD *)(a1 + 1828); *(_DWORD *)(a2 + 20) = *(_DWORD *)(a1 + 1840); *(_DWORD *)(a2 + 32) = *(_DWORD *)(a1 + 1852); *(_DWORD *)(a2 + 36) = *(_DWORD *)(a1 + 1856); *(_BYTE *)(a2 + 40) = *(_BYTE *)(a1 + 976); if ( *result < result[2] ) *(_DWORD *)(a2 + 8) = *(_DWORD *)a2; v3 = *(_DWORD *)(a2 + 12); if ( v3 < *(_DWORD *)(a2 + 20) ) *(_DWORD *)(a2 + 20) = v3; v4 = *(_DWORD *)(a2 + 24); if ( v4 < *(_DWORD *)(a2 + 32) ) *(_DWORD *)(a2 + 32) = v4; return result; } //----- (0095CFA0) -------------------------------------------------------- signed int __stdcall sub_95CFA0(int a1, int a2) { signed int result; // eax _DWORD *v3; // edi unsigned int v4; // ebx unsigned int v5; // [esp+0h] [ebp-8h] unsigned int v6; // [esp+4h] [ebp-4h] if ( !a1 ) return 0; v3 = sub_963060((_DWORD *)a1); v6 = sub_968240(v3); if ( !v6 ) v6 = -65536; v4 = sub_965050(v3); if ( !v4 ) v4 = -131072; v5 = sub_879520(v3); if ( !v5 ) v5 = -131072; if ( sub_965070(v3) && !(sub_965070(v3) & *(_DWORD *)(a2 + 36)) || v6 > *(_DWORD *)a2 ) return 0; if ( sub_965100(v3) ) { if ( !*(_BYTE *)(a2 + 40) ) return 0; *(_BYTE *)(a1 + 64) = 1; } else if ( v4 > *(_DWORD *)(a2 + 12) ) { if ( !sub_8AA2F0(v3) || !*(_BYTE *)(a2 + 40) ) return 0; *(_BYTE *)(a1 + 64) = 1; } if ( v6 < *(_DWORD *)(a2 + 4) || v4 < *(_DWORD *)(a2 + 16) || v5 > *(_DWORD *)(a2 + 24) || v5 < *(_DWORD *)(a2 + 28) ) return 0; if ( v6 != *(_DWORD *)(a2 + 8) || v4 != *(_DWORD *)(a2 + 20) || v5 != *(_DWORD *)(a2 + 32) ) result = 1; else result = 2; return result; } //----- (0095D0B0) -------------------------------------------------------- int __thiscall sub_95D0B0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBObjectTable::ObjectDesc *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBObjectTable::ObjectDesc *>::`vftable'; return result; } // A4A534: using guessed type void *NiTListBase,NSBObjectTable::ObjectDesc *>::`vftable'; // A4A58C: using guessed type void *NiTPointerListBase,NSBObjectTable::ObjectDesc *>::`vftable'; //----- (0095D0F0) -------------------------------------------------------- void __thiscall sub_95D0F0(_BYTE *this) { _BYTE *v1; // edi bool v2; // zf unsigned int v3; // ebx _DWORD *v4; // esi void *v5; // ecx v1 = this; v2 = this[16] == 0; *(_DWORD *)this = &NiTStringTemplateMap,NSBPackingDef *>::`vftable'; if ( !v2 ) { v3 = 0; if ( *((_DWORD *)this + 1) ) { do { v4 = *(_DWORD **)(*((_DWORD *)v1 + 2) + 4 * v3); while ( v4 ) { v5 = (void *)v4[1]; v4 = (_DWORD *)*v4; operator delete(v5); } ++v3; } while ( v3 < *((_DWORD *)v1 + 1) ); } } *(_DWORD *)v1 = &NiTPointerMap::`vftable'; sub_940360(v1); *(_DWORD *)v1 = &NiTMapBase,char const *,NSBPackingDef *>::`vftable'; sub_940360(v1); operator delete(*((void **)v1 + 2)); } // A4A56C: using guessed type void *NiTMapBase,char const *,NSBPackingDef *>::`vftable'; // A4A59C: using guessed type void *NiTPointerMap::`vftable'; // A4A5BC: using guessed type void *NiTStringTemplateMap,NSBPackingDef *>::`vftable'; //----- (0095D160) -------------------------------------------------------- void *__thiscall sub_95D160(void *this, char a2) { void *v2; // esi v2 = this; sub_95D0B0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0095D190) -------------------------------------------------------- void **__thiscall sub_95D190(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTMapBase,char const *,NSBPackingDef *>::`vftable'; sub_940360(this); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A56C: using guessed type void *NiTMapBase,char const *,NSBPackingDef *>::`vftable'; //----- (0095D1D0) -------------------------------------------------------- void **__thiscall sub_95D1D0(void *this, char a2) { void **v2; // esi v2 = (void **)this; *(_DWORD *)this = &NiTPointerMap::`vftable'; sub_940360(this); *v2 = &NiTMapBase,char const *,NSBPackingDef *>::`vftable'; sub_940360(v2); operator delete(v2[2]); if ( a2 & 1 ) operator delete(v2); return v2; } // A4A56C: using guessed type void *NiTMapBase,char const *,NSBPackingDef *>::`vftable'; // A4A59C: using guessed type void *NiTPointerMap::`vftable'; //----- (0095D210) -------------------------------------------------------- LONG __thiscall sub_95D210(_DWORD *this) { _DWORD *v1; // esi int v2; // ST04_4 int v3; // edi unsigned int v4; // ecx unsigned int v5; // eax _DWORD *v6; // edx _DWORD *v7; // eax _DWORD *v8; // edi void **v9; // ebx int v10; // eax unsigned int v11; // edx unsigned int v12; // eax _DWORD *v13; // ecx unsigned int v14; // edi int v15; // edx void *v16; // ebx unsigned int v17; // eax int v18; // edi void *v19; // ST04_4 int v20; // edi void **v22; // [esp+Ch] [ebp-4h] v1 = this; v2 = this[2]; *this = &NSBShader::`vftable'; sub_92BE70("Killing NSBShader %s\n", v2); v3 = v1[45]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[45] = 0; } operator delete((void *)v1[2]); operator delete((void *)v1[3]); v4 = v1[35]; v5 = 0; if ( v4 ) { v6 = (_DWORD *)v1[36]; while ( !*v6 ) { ++v5; ++v6; if ( v5 >= v4 ) goto LABEL_10; } v7 = *(_DWORD **)(v1[36] + 4 * v5); } else { LABEL_10: v7 = 0; } v8 = v7; while ( v8 ) { v9 = (void **)v8[2]; v22 = (void **)v8[2]; if ( *v8 ) { v8 = (_DWORD *)*v8; } else { v10 = (*(int (__thiscall **)(_DWORD *, _DWORD))(v1[34] + 4))(v1 + 34, v8[1]); v11 = v1[35]; v12 = v10 + 1; if ( v12 >= v11 ) { LABEL_19: v8 = 0; } else { v13 = (_DWORD *)(v1[36] + 4 * v12); while ( 1 ) { v8 = (_DWORD *)*v13; if ( *v13 ) break; ++v12; ++v13; if ( v12 >= v11 ) goto LABEL_19; } } v9 = v22; } if ( v9 ) { sub_9686F0(v9); operator delete(v9); } } sub_940360(v1 + 34); v14 = 0; if ( v1[42] ) { do { v15 = v1[40]; v16 = *(void **)(v15 + 4 * v14); if ( v16 ) { sub_963160(*(void ***)(v15 + 4 * v14)); operator delete(v16); if ( v14 < v1[41] ) { if ( v14 < v1[42] ) { if ( *(_DWORD *)(v1[40] + 4 * v14) ) --v1[43]; } else { v1[42] = v14 + 1; } *(_DWORD *)(v1[40] + 4 * v14) = 0; } } ++v14; } while ( v14 < v1[42] ); } v17 = 0; if ( v1[42] ) { do *(_DWORD *)(v1[40] + 4 * v17++) = 0; while ( v17 < v1[42] ); } v1[42] = 0; v1[43] = 0; v18 = v1[45]; if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) && v18 ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v19 = (void *)v1[40]; v1[39] = &NiTArray::`vftable'; operator delete(v19); sub_95D0F0((_BYTE *)v1 + 136); sub_95E600(v1 + 29); sub_9604A0(v1 + 24); sub_9604A0(v1 + 19); v20 = v1[18]; if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A544: using guessed type void *NiTArray::`vftable'; // A4A5EC: using guessed type void *NSBShader::`vftable'; //----- (0095D450) -------------------------------------------------------- const char **__thiscall sub_95D450(_DWORD *this, char *Src, int a3, int a4) { _DWORD *v4; // esi const char **result; // eax _DWORD *v6; // eax const char **v7; // edi unsigned int v8; // ebx v4 = this; result = sub_95CCD0(this, Src); if ( !result && (_BYTE)a3 ) { v6 = operator new(0x44u); if ( v6 ) v7 = (const char **)sub_9630F0(v6); else v7 = 0; a3 = (int)v7; sub_968250((int)v7, Src); v8 = a4; v7[3] = (const char *)a4; if ( v8 >= v4[41] ) sub_8237A0(v4 + 39, v8 + v4[44]); sub_823870(v4 + 39, v8, &a3); result = v7; } return result; } //----- (0095D4D0) -------------------------------------------------------- int __thiscall sub_95D4D0(_DWORD *this) { _DWORD *v1; // ebx int result; // eax _DWORD *v3; // eax _DWORD *v4; // edi int v5; // esi char *i; // eax _DWORD *v7; // eax unsigned int v8; // esi _DWORD *v9; // ecx _DWORD *v10; // edi int v11; // esi int v12; // ST1C_4 int v13; // eax int v14; // esi int v15; // ST1C_4 int v16; // eax _DWORD *v17; // eax _DWORD *v18; // esi void (__thiscall **v19)(_DWORD *, int); // ST14_4 int v20; // eax void (__thiscall **v21)(_DWORD *, int); // ST14_4 int v22; // eax void (__thiscall **v23)(_DWORD *, int); // ST14_4 int v24; // eax void (__thiscall **v25)(_DWORD *, int); // ST14_4 int v26; // eax void (__thiscall **v27)(_DWORD *, int); // ST14_4 int v28; // eax void (__thiscall **v29)(_DWORD *, int); // ST14_4 int v30; // eax void (__thiscall **v31)(_DWORD *, _DWORD); // ST14_4 unsigned __int8 v32; // al void (__thiscall **v33)(_DWORD *, _DWORD); // ST14_4 unsigned __int8 v34; // al _DWORD *v35; // [esp+4h] [ebp-Ch] unsigned int v36; // [esp+8h] [ebp-8h] v1 = this; result = this[45]; if ( !result ) { v3 = operator new(0x68u); if ( v3 ) v4 = sub_956B60(v3); else v4 = 0; v5 = v1[45]; if ( (_DWORD *)v5 != v4 ) { if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v1[45] = v4; if ( v4 ) InterlockedIncrement(v4 + 1); } (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 12))(v1[2]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 16))(v1[3]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 56))(v1[11]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 56))(v1[12]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 60))(v1[13]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 60))(v1[14]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 64))(v1[15]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 64))(v1[16]); (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v1[45] + 68))(v1[17]); for ( i = (char *)sub_8CC330(v1 + 24); i; i = (char *)sub_8CC350(v1 + 24) ) { v7 = sub_95EF70(i); sub_956C20((_DWORD *)v1[45], (int)v7); } sub_9568D0((_DWORD *)v1[45], v1[43]); v8 = 0; v36 = 0; if ( v1[42] ) { do { v9 = *(_DWORD **)(v1[40] + 4 * v8); v35 = v9; if ( v9 ) { v10 = sub_963060(v9); if ( !v8 ) { v11 = *(_DWORD *)v1[45]; v12 = v1[45]; v13 = sub_956CC0(v10); (*(void (__thiscall **)(int, int))(v11 + 84))(v12, v13); v14 = *(_DWORD *)v1[45]; v15 = v1[45]; v16 = sub_866FD0(v10); (*(void (__thiscall **)(int, int))(v14 + 88))(v15, v16); } v17 = operator new(0x38u); if ( v17 ) v18 = sub_956C70(v17); else v18 = 0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v18 + 12))(v18, *v35); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v18 + 16))(v18, v35[1]); v19 = (void (__thiscall **)(_DWORD *, int))(*v18 + 56); v20 = sub_968240(v10); (*v19)(v18, v20); v21 = (void (__thiscall **)(_DWORD *, int))(*v18 + 60); v22 = sub_965050(v10); (*v21)(v18, v22); v23 = (void (__thiscall **)(_DWORD *, int))(*v18 + 64); v24 = sub_879520(v10); (*v23)(v18, v24); v25 = (void (__thiscall **)(_DWORD *, int))(*v18 + 68); v26 = sub_965070(v10); (*v25)(v18, v26); v27 = (void (__thiscall **)(_DWORD *, int))(*v18 + 84); v28 = sub_956CC0(v10); (*v27)(v18, v28); v29 = (void (__thiscall **)(_DWORD *, int))(*v18 + 88); v30 = sub_866FD0(v10); (*v29)(v18, v30); v31 = (void (__thiscall **)(_DWORD *, _DWORD))(*v18 + 92); v32 = sub_8AA2F0(v10); (*v31)(v18, v32); v33 = (void (__thiscall **)(_DWORD *, _DWORD))(*v18 + 96); v34 = sub_965100(v10); (*v33)(v18, v34); sub_956B30((_DWORD *)v1[45], v36, (char)v18); v8 = v36; } v36 = ++v8; } while ( v8 < v1[42] ); } result = v1[45]; } return result; } //----- (0095D7C0) -------------------------------------------------------- void *__thiscall sub_95D7C0(void *this, char a2) { void *v2; // esi v2 = this; sub_95CB90(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0095D7F0) -------------------------------------------------------- bool __thiscall sub_95D7F0(_DWORD *this, signed int a2) { _DWORD *v2; // esi void (__cdecl *v3)(signed int, int *, signed int, int *, signed int); // eax unsigned int v4; // ecx _DWORD *v5; // edi unsigned int v6; // eax _DWORD *v7; // edx _DWORD *v8; // eax _DWORD *v9; // esi const char **v10; // ecx int v11; // ebx int v12; // eax unsigned int v13; // edx unsigned int v14; // eax _DWORD *v15; // ecx const char **v17; // [esp+Ch] [ebp-Ch] int v18; // [esp+10h] [ebp-8h] int v19; // [esp+14h] [ebp-4h] v2 = this; v18 = this[37]; v3 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v19 = 4; v3(a2, &v18, 4, &v19, 1); v4 = v2[35]; v5 = v2 + 34; v6 = 0; v19 = 0; if ( v4 ) { v7 = (_DWORD *)v2[36]; while ( !*v7 ) { ++v6; ++v7; if ( v6 >= v4 ) goto LABEL_5; } v8 = *(_DWORD **)(v2[36] + 4 * v6); } else { LABEL_5: v8 = 0; } v9 = v8; if ( !v8 ) return v19 == v18; while ( 1 ) { v10 = (const char **)v9[2]; v11 = v9[1]; v9 = (_DWORD *)*v9; v17 = v10; if ( !v9 ) { v12 = (*(int (__thiscall **)(_DWORD *, int))(*v5 + 4))(v5, v11); v13 = v5[1]; v14 = v12 + 1; if ( v14 >= v13 ) { LABEL_12: v9 = 0; } else { v15 = (_DWORD *)(v5[2] + 4 * v14); while ( 1 ) { v9 = (_DWORD *)*v15; if ( *v15 ) break; ++v14; ++v15; if ( v14 >= v13 ) goto LABEL_12; } } } if ( !v11 || !v17 ) goto LABEL_17; if ( !sub_9688A0(v17, a2) ) return 0; ++v19; LABEL_17: if ( !v9 ) return v19 == v18; } } //----- (0095D8E0) -------------------------------------------------------- char __thiscall sub_95D8E0(_DWORD *this, int a2) { void (__cdecl *v2)(int, unsigned int *, signed int, int *, signed int); // edx _DWORD *v3; // ebx int v4; // edi _DWORD *v5; // eax void **v6; // esi int v7; // eax int v9; // [esp+Ch] [ebp-8h] unsigned int v10; // [esp+10h] [ebp-4h] v2 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v3 = this; v9 = 4; v2(a2, &v10, 4, &v9, 1); v4 = 0; if ( !v10 ) return 1; while ( 1 ) { v5 = operator new(0x1Cu); v6 = (void **)(v5 ? sub_968A20(v5) : 0); if ( !sub_968A70(v6, a2) ) break; v7 = sub_968240(v6); sub_815C70(v3 + 34, v7, (int)v6); if ( ++v4 >= v10 ) return 1; } return 0; } //----- (0095D970) -------------------------------------------------------- bool __thiscall sub_95D970(_DWORD *this, signed int a2) { _DWORD *v2; // esi unsigned int v3; // ebx void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // eax int v5; // edi const char **v6; // ecx int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v2 = this; v3 = this[42]; v8 = this[43]; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v9 = 4; v4(a2, &v8, 4, &v9, 1); v5 = 0; v9 = 0; if ( !v3 ) return v9 == v8; while ( 1 ) { v6 = *(const char ***)(v2[40] + 4 * v5); if ( v6 ) break; LABEL_5: if ( ++v5 >= v3 ) return v9 == v8; } if ( sub_963630(v6, a2) ) { ++v9; goto LABEL_5; } return 0; } //----- (0095DA00) -------------------------------------------------------- char __thiscall sub_95DA00(_DWORD *this, void *a2) { void (__cdecl *v2)(void *, unsigned int *, signed int, void ***, signed int); // edx _DWORD *v3; // edi unsigned int v4; // ebx _DWORD *v5; // eax void **v6; // esi _DWORD *v7; // eax _DWORD *v8; // esi unsigned int v9; // eax unsigned int v10; // eax unsigned int v11; // eax bool v12; // zf unsigned int v14; // [esp+Ch] [ebp-8h] void **v15; // [esp+10h] [ebp-4h] v2 = (void (__cdecl *)(void *, unsigned int *, signed int, void ***, signed int))*((_DWORD *)a2 + 1); v3 = this; v15 = (void **)4; v2(a2, &v14, 4, &v15, 1); v4 = 0; if ( !v14 ) return 1; while ( 1 ) { v5 = operator new(0x44u); if ( v5 ) { v6 = (void **)sub_9630F0(v5); v15 = v6; } else { v15 = 0; v6 = 0; } if ( !sub_963750(v6, a2) ) break; v7 = sub_963060(v6); v8 = v7; if ( v7 ) { v9 = sub_968240(v7); if ( v3[11] > v9 ) v3[11] = v9; if ( v3[12] < v9 ) v3[12] = v9; v10 = sub_965050(v8); if ( v3[13] > v10 ) v3[13] = v10; if ( v3[14] < v10 ) v3[14] = v10; v11 = sub_879520(v8); if ( v3[15] > v11 ) v3[15] = v11; if ( v3[16] < v11 ) v3[16] = v11; v3[17] |= sub_965070(v8); } if ( v4 < v3[41] || (sub_8237A0(v3 + 39, v4 + v3[44]), v4 < v3[41]) ) { if ( v4 < v3[42] ) { if ( v15 ) { if ( !*(_DWORD *)(v3[40] + 4 * v4) ) ++v3[43]; } else if ( *(_DWORD *)(v3[40] + 4 * v4) ) { --v3[43]; } } else { v12 = v15 == 0; v3[42] = v4 + 1; if ( !v12 ) ++v3[43]; } *(_DWORD *)(v3[40] + 4 * v4) = v15; } if ( ++v4 >= v14 ) return 1; } return 0; } //----- (0095DB70) -------------------------------------------------------- void *__thiscall sub_95DB70(void *this, char a2) { void *v2; // esi v2 = this; sub_95D210(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0095DBA0) -------------------------------------------------------- bool __thiscall sub_95DBA0(const char **this, _DWORD *a2, signed int a3) { _DWORD *v3; // esi const char **v4; // edi void (__cdecl *v5)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v6)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v7)(_DWORD *, char *, signed int, int *, signed int); // eax bool v8; // zf void (__cdecl *v9)(_DWORD *, int *, signed int, signed int *, signed int); // ecx int v11; // [esp+Ch] [ebp-10h] int v12; // [esp+10h] [ebp-Ch] int v13; // [esp+14h] [ebp-8h] int v14; // [esp+18h] [ebp-4h] v3 = a2; v4 = this; (*(void (__thiscall **)(_DWORD *, _DWORD))(*a2 + 8))(a2, 0); v5 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v3[2]; v14 = 6452078; v11 = 1; v5(v3, &v14, 4, &v11, 1); v6 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v3[2]; v13 = 65552; v11 = 1; v6(v3, &v13, 4, &v11, 1); HIBYTE(a2) = (_BYTE)a3 != 1; v7 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v3[2]; v11 = 1; v7(v3, (char *)&a2 + 3, 1, &v11, 1); (*(void (__thiscall **)(_DWORD *, signed int))(*v3 + 8))(v3, a3); if ( !sub_92C1E0((signed int)v3, v4[2]) || !sub_92C1E0((signed int)v3, v4[3]) ) return 0; v8 = v4[18] == 0; v12 = 0; a3 = 4; if ( v8 ) { ((void (__cdecl *)(_DWORD *, int *, signed int, signed int *, signed int))v3[2])(v3, &v12, 4, &a3, 1); } else { v9 = (void (__cdecl *)(_DWORD *, int *, signed int, signed int *, signed int))v3[2]; v12 = 1; v9(v3, &v12, 4, &a3, 1); if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)v4[18] + 4))(v3) ) return 0; } if ( !sub_960F40(v4 + 19, (signed int)v3) || !sub_960F40(v4 + 24, (signed int)v3) || !sub_95D7F0(v4, (signed int)v3) ) return 0; return sub_95D970(v4, (signed int)v3) != 0; } //----- (0095DCE0) -------------------------------------------------------- bool __thiscall sub_95DCE0(void **this, void *a2) { _DWORD *v2; // esi void **v3; // edi void (__cdecl *v4)(_DWORD *, int *, signed int, int *, signed int); // edx void (__cdecl *v5)(_DWORD *, int *, signed int, int *, signed int); // eax unsigned int v6; // eax void (__cdecl *v7)(_DWORD *, char *, signed int, int *, signed int); // ecx _DWORD *v8; // eax _DWORD *v9; // eax volatile LONG *v11; // ebx int v12; // [esp+Ch] [ebp-10h] int v13; // [esp+10h] [ebp-Ch] int v14; // [esp+14h] [ebp-8h] int v15; // [esp+18h] [ebp-4h] v2 = a2; v3 = this; (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)a2 + 8))(a2, 0); v4 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v2[1]; v12 = 1; v4(v2, &v15, 4, &v12, 1); if ( ((char)v15 | ((SBYTE1(v15) | ((SBYTE2(v15) | (SHIBYTE(v15) << 8)) << 8)) << 8)) != 6452078 ) return 0; v5 = (void (__cdecl *)(_DWORD *, int *, signed int, int *, signed int))v2[1]; v12 = 1; v5(v2, &v14, 4, &v12, 1); v6 = (char)v14 | ((SBYTE1(v14) | ((SBYTE2(v14) | (SHIBYTE(v14) << 8)) << 8)) << 8); dword_AC9068 = v6; if ( v6 > 0x10010 ) return 0; HIBYTE(a2) = 1; if ( v6 >= 0x10010 ) { v7 = (void (__cdecl *)(_DWORD *, char *, signed int, int *, signed int))v2[1]; v12 = 1; v7(v2, (char *)&a2 + 3, 1, &v12, 1); } (*(void (__thiscall **)(_DWORD *, bool))(*v2 + 8))(v2, HIBYTE(a2) != 1); v13 = 0; if ( !sub_92C250((int)v2, v3 + 2, &v13) || !sub_92C250((int)v2, v3 + 3, &v13) ) return 0; if ( (unsigned int)dword_AC9068 >= 0x10006 ) { sub_75ABD0((int)v2, (int)&v12); if ( v12 ) { v8 = operator new(0x1Cu); if ( v8 ) v9 = sub_962EB0(v8); else v9 = 0; sub_56FF80(v3 + 18, (int)v9); if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)v3[18] + 8))(v2) ) return 0; } else { v11 = (volatile LONG *)v3[18]; if ( v11 ) { if ( !InterlockedDecrement(v11 + 1) && v11 ) (**(void (__thiscall ***)(void *, signed int))v11)((void *)v11, 1); v3[18] = 0; } } } if ( !sub_961000(v3 + 19, (int)v2) || !sub_961000(v3 + 24, (int)v2) || !sub_95D8E0(v3, (int)v2) ) return 0; return sub_95DA00(v3, v2) != 0; } // AC9068: using guessed type int dword_AC9068; //----- (0095DEB0) -------------------------------------------------------- int __thiscall sub_95DEB0(_DWORD *this, int a2) { _DWORD *v2; // edi int v3; // ebx unsigned int v4; // esi unsigned int v5; // edi int *v6; // ecx _DWORD *v7; // eax _DWORD *v8; // ecx _DWORD *v9; // eax _DWORD *v10; // esi unsigned int v11; // edi unsigned int v12; // eax _DWORD *v13; // esi _DWORD *v14; // ST0C_4 _DWORD *v15; // esi _DWORD *v16; // ST0C_4 char v18; // [esp+Ch] [ebp-48h] unsigned int v19; // [esp+10h] [ebp-44h] unsigned int v20; // [esp+14h] [ebp-40h] unsigned int v21; // [esp+1Ch] [ebp-38h] unsigned int v22; // [esp+20h] [ebp-34h] unsigned int v23; // [esp+28h] [ebp-2Ch] unsigned int v24; // [esp+2Ch] [ebp-28h] char v25; // [esp+34h] [ebp-20h] void **v26; // [esp+38h] [ebp-1Ch] _DWORD *v27; // [esp+3Ch] [ebp-18h] _DWORD *v28; // [esp+40h] [ebp-14h] int v29; // [esp+44h] [ebp-10h] _DWORD *v30; // [esp+48h] [ebp-Ch] int *v31; // [esp+4Ch] [ebp-8h] char v32; // [esp+53h] [ebp-1h] unsigned int v33; // [esp+5Ch] [ebp+8h] v2 = this; v3 = 0; v30 = this; v4 = 0; v32 = 0; sub_95CF10(a2, (int)&v18); v5 = v2[42]; v6 = 0; v26 = &NiTPointerList::`vftable'; v29 = 0; v27 = 0; v28 = 0; if ( v5 ) { do { v3 = *(_DWORD *)(v30[40] + 4 * v4); if ( v3 && sub_95CFA0(v3, (int)&v18) ) { v7 = v27; if ( v27 ) { while ( 1 ) { v8 = v7 + 2; v7 = (_DWORD *)*v7; if ( *v8 == v3 ) break; if ( !v7 ) goto LABEL_7; } } else { LABEL_7: v9 = (_DWORD *)((int (__thiscall *)(void ***))v26[1])(&v26); v9[2] = v3; *v9 = 0; v9[1] = v28; if ( v28 ) *v28 = v9; else v27 = v9; ++v29; v28 = v9; } } ++v4; } while ( v4 < v5 ); v6 = v27; } if ( v6 ) { while ( 1 ) { v3 = v6[2]; v31 = (int *)*v6; if ( v3 ) { v10 = sub_963060((_DWORD *)v3); v11 = sub_968240(v10); if ( !v11 ) v11 = -65536; v33 = sub_965050(v10); if ( !v33 ) v33 = -131072; v12 = sub_879520(v10); if ( !v12 ) v12 = -131072; if ( v11 <= v20 && v11 >= v19 && v33 >= v21 && v12 <= v24 && v12 >= v23 && (v33 <= v22 || v25 && *(_BYTE *)(v3 + 64)) ) { break; } } if ( !v31 ) goto LABEL_34; v6 = v31; } v32 = 1; } LABEL_34: v13 = v27; while ( v13 ) { v14 = v13; v13 = (_DWORD *)*v13; ((void (__thiscall *)(void ***, _DWORD *))v26[2])(&v26, v14); } v29 = 0; v27 = 0; v28 = 0; if ( v32 ) return v3; sub_863460(1, 0, "* ERROR: Unable to find usable implementation for %s\n", v30[2]); v15 = v27; v26 = &NiTPointerListBase,NSBImplementation *>::`vftable'; while ( v15 ) { v16 = v15; v15 = (_DWORD *)*v15; ((void (__thiscall *)(void ***, _DWORD *))v26[2])(&v26, v16); } return 0; } // A4A55C: using guessed type void *NiTPointerListBase,NSBImplementation *>::`vftable'; // A4A60C: using guessed type void *NiTPointerList::`vftable'; //----- (0095E070) -------------------------------------------------------- void **__thiscall sub_95E070(_DWORD *this, int a2, void *a3) { _DWORD *v3; // edi void *v4; // ebx _DWORD *v5; // esi void *v6; // ecx int v7; // ST08_4 void **v9; // esi _DWORD *v10; // eax volatile LONG *v11; // ebx volatile LONG *v12; // edi _DWORD *v13; // ebx int v14; // eax volatile LONG *v15; // edi unsigned int v16; // edi _DWORD *v17; // eax int v18; // ebx _DWORD *v19; // edi void *v20; // ecx int v21; // ST08_4 void *v22; // ecx int v23; // ST08_4 int v24; // eax int v25; // ST08_4 _DWORD *v26; // eax void *v27; // ecx int v28; // ST08_4 char v29; // [esp+Ch] [ebp-34h] _DWORD *v30; // [esp+38h] [ebp-8h] int v31; // [esp+3Ch] [ebp-4h] v3 = this; v30 = this; sub_95CF10(a2, (int)&v29); v4 = a3; if ( a3 != (void *)-1 && (unsigned int)a3 < v3[42] ) { a3 = *(void **)(v3[40] + 4 * (_DWORD)a3); v5 = a3; if ( sub_95CFA0((int)a3, (int)&v29) ) { if ( v5 ) goto LABEL_9; } else { nullsub_6((void *)v3[2]); } } a3 = (void *)sub_95DEB0(v3, a2); if ( !a3 ) { v7 = v3[2]; nullsub_6(v6); return 0; } v5 = a3; LABEL_9: v9 = (void **)off_AC906C(v5[2]); if ( !v9 ) { v10 = operator new(0x88u); if ( v10 ) v9 = (void **)sub_969D60(v10); else v9 = 0; } sub_91F020(v9, a2); sub_8693E0(v9, (char *)v3[2]); sub_92BCF0(v9, (int)v4); v11 = (volatile LONG *)v3[18]; v12 = (volatile LONG *)v9[26]; if ( v12 != v11 ) { if ( v12 && !InterlockedDecrement(v12 + 1) && v12 ) (**(void (__thiscall ***)(void *, signed int))v12)((void *)v12, 1); v9[26] = (void *)v11; if ( v11 ) InterlockedIncrement(v11 + 1); } v13 = a3; v14 = *((_DWORD *)a3 + 5); v15 = (volatile LONG *)v9[27]; v31 = v14; if ( v15 != (volatile LONG *)v14 ) { if ( v15 ) { if ( !InterlockedDecrement(v15 + 1) && v15 ) (**(void (__thiscall ***)(void *, signed int))v15)((void *)v15, 1); v14 = v31; } v9[27] = (void *)v14; if ( v14 ) InterlockedIncrement((volatile LONG *)(v14 + 4)); } v16 = 0; if ( sub_941DB0(v13) ) { do { v17 = sub_963310(v13, v16, 0); if ( v17 ) { v18 = v17[1]; v31 = v18; if ( v18 ) InterlockedIncrement((volatile LONG *)(v18 + 4)); if ( v16 >= (unsigned int)v9[30] ) sub_81A750(v9 + 28, (unsigned int)v9[33] + v16); sub_7FFF10(v9 + 28, v16, &v31); if ( v18 && !InterlockedDecrement((volatile LONG *)(v18 + 4)) ) (**(void (__thiscall ***)(int, signed int))v18)(v18, 1); v13 = a3; } ++v16; } while ( v16 < sub_941DB0(v13) ); } v19 = v30; if ( !sub_95CD40(v30, a2, v13) ) { v21 = v19[2]; nullsub_6(v20); } if ( !sub_963960(v13, (int)v9, v19[45]) ) { v23 = v19[2]; nullsub_6(v22); if ( v9 ) (*(void (__thiscall **)(void **, signed int))*v9)(v9, 1); return 0; } v24 = v13[6]; if ( !v24 ) { (*((void (__thiscall **)(void **, _DWORD))*v9 + 16))(v9, 0); goto LABEL_55; } a3 = 0; sub_8C4C90(v19 + 34, v24, &a3); if ( !a3 ) { v25 = v19[2]; nullsub_6(0); if ( v9 ) (*(void (__thiscall **)(void **, signed int))*v9)(v9, 1); return 0; } v26 = sub_968450(a3, 10, a2); if ( v26 ) { (*((void (__thiscall **)(void **, _DWORD *))*v9 + 16))(v9, v26); LABEL_55: if ( !sub_95CE50(v19, a2, v13) ) { v28 = v19[2]; nullsub_6(v27); } return v9; } nullsub_6((void *)v19[2]); if ( !v9 ) return 0; (*(void (__thiscall **)(void **, signed int))*v9)(v9, 1); return 0; } // AC906C: using guessed type int (__cdecl *off_AC906C)(_DWORD); //----- (0095E380) -------------------------------------------------------- bool __thiscall sub_95E380(const char **this, char *Filename, int a3) { const char **v3; // edi _DWORD *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi bool v7; // bl v3 = this; v4 = (_DWORD *)sub_8AA270(); v5 = (void (__thiscall ***)(_DWORD, signed int))v4; if ( !v4 ) return 0; v7 = sub_95DBA0(v3, v4, a3); (**v5)(v5, 1); return v7; } //----- (0095E3D0) -------------------------------------------------------- bool __thiscall sub_95E3D0(void **this, char *Filename) { void **v2; // edi void (__thiscall ***v3)(_DWORD, signed int); // eax void (__thiscall ***v4)(_DWORD, signed int); // esi bool v6; // bl v2 = this; v3 = (void (__thiscall ***)(_DWORD, signed int))sub_8AA270(); v4 = v3; if ( !v3 ) return 0; v6 = sub_95DCE0(v2, v3); (**v4)(v4, 1); return v6; } //----- (0095E420) -------------------------------------------------------- void *__thiscall sub_95E420(void *this, char a2) { void *v2; // esi v2 = this; sub_95D0F0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0095E450) -------------------------------------------------------- _DWORD *__thiscall sub_95E450(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax size_t v3; // ST08_4 unsigned int i; // eax v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NSBShader::`vftable'; v1[2] = 0; v1[3] = 0; v1[4] = 0; v1[5] = 0; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; v1[10] = 0; v1[11] = -1; v1[12] = 0; v1[13] = -1; v1[14] = 0; v1[15] = -1; v1[16] = 0; v1[17] = 0; v1[18] = 0; sub_960FB0(v1 + 19); sub_960FB0(v1 + 24); v1[33] = 0; v1[31] = 0; v1[32] = 0; v1[30] = &NiTPointerList::`vftable'; v1[35] = 37; v1[34] = &NiTMapBase,char const *,NSBPackingDef *>::`vftable'; v1[37] = 0; v2 = operator new(0x94u); v3 = 4 * v1[35]; v1[36] = v2; memset(v2, 0, v3); *((_BYTE *)v1 + 152) = 1; v1[34] = &NiTStringPointerMap::`vftable'; v1[39] = &NiTArray::`vftable'; v1[41] = 0; v1[44] = 1; v1[42] = 0; v1[43] = 0; v1[40] = 0; v1[45] = 0; sub_940360(v1 + 34); for ( i = 0; i < v1[42]; ++i ) *(_DWORD *)(v1[40] + 4 * i) = 0; v1[42] = 0; v1[43] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A544: using guessed type void *NiTArray::`vftable'; // A4A56C: using guessed type void *NiTMapBase,char const *,NSBPackingDef *>::`vftable'; // A4A5DC: using guessed type void *NiTPointerList::`vftable'; // A4A5EC: using guessed type void *NSBShader::`vftable'; // A4A8BC: using guessed type void *NiTStringPointerMap::`vftable'; //----- (0095E5A0) -------------------------------------------------------- char **__thiscall sub_95E5A0(char **this, char *Src, int a3, int a4) { char **v4; // esi unsigned int v5; // kr00_4 char *v6; // eax v4 = this; *this = 0; this[1] = (char *)a3; this[2] = (char *)a4; operator delete(0); *v4 = 0; if ( Src ) { v5 = strlen(Src); v6 = (char *)operator new(v5 + 1); *v4 = v6; strcpy_s(v6, v5 + 1, Src); } return v4; } //----- (0095E600) -------------------------------------------------------- int __thiscall sub_95E600(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void **v4; // edi _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST04_4 v1 = this; v2 = this[2]; *this = v2; if ( v2 ) { do { v3 = (_DWORD *)*v1; *v1 = *(_DWORD *)*v1; v4 = (void **)v3[2]; if ( v4 ) { operator delete(*v4); operator delete(v4); } } while ( *v1 ); } v5 = v1 + 1; v6 = (_DWORD *)v1[2]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; return sub_95D0B0(v5); } //----- (0095E670) -------------------------------------------------------- const char **__thiscall sub_95E670(_DWORD *this, char *a2) { _DWORD **v2; // edi _DWORD *v3; // eax const char **v4; // eax const char **v5; // esi _DWORD *v6; // eax v2 = (_DWORD **)this; v3 = (_DWORD *)this[2]; *this = v3; if ( v3 ) { *this = *v3; v4 = (const char **)v3[2]; } else { v4 = 0; } v5 = v4; if ( !v4 ) return 0; while ( _stricmp(*v5, a2) ) { v6 = *v2; if ( *v2 ) { *v2 = (_DWORD *)*v6; v5 = (const char **)v6[2]; if ( v5 ) continue; } return 0; } return v5; } //----- (0095E6D0) -------------------------------------------------------- char __thiscall sub_95E6D0(_DWORD *this, char *Src, int a3, int a4) { _DWORD *v4; // esi char result; // al char **v6; // eax char **v7; // edi _DWORD *v8; // eax _DWORD *v9; // ecx v4 = this; if ( sub_95E670(this, Src) ) return 0; v6 = (char **)operator new(0xCu); if ( v6 ) v7 = sub_95E5A0(v6, Src, a3, a4); else v7 = 0; v8 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v4[1] + 4))(v4 + 1); v8[2] = v7; *v8 = 0; v8[1] = v4[3]; v9 = (_DWORD *)v4[3]; if ( v9 ) *v9 = v8; else v4[2] = v8; v4[3] = v8; result = 1; ++v4[4]; return result; } //----- (0095E760) -------------------------------------------------------- _DWORD *__thiscall sub_95E760(_DWORD *this) { _DWORD *result; // eax result = this; *this = &NSBAttributeDesc::`vftable'; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[21] = 0; this[22] = 0; this[38] = 0; this[54] = 0; this[55] = 0; return result; } // A4A8DC: using guessed type void *NSBAttributeDesc::`vftable'; //----- (0095E7A0) -------------------------------------------------------- void __thiscall sub_95E7A0(_DWORD *this) { _DWORD *v1; // esi void *v2; // ST08_4 int v3; // eax v1 = this; v2 = (void *)this[1]; *this = &NSBAttributeDesc::`vftable'; operator delete(v2); operator delete((void *)v1[2]); v3 = v1[3]; if ( v3 == 2 ) { operator delete((void *)v1[5]); operator delete((void *)v1[54]); } else { if ( v3 == 14 ) { operator delete((void *)v1[5]); operator delete((void *)v1[38]); operator delete((void *)v1[22]); } operator delete((void *)v1[54]); } } // A4A8DC: using guessed type void *NSBAttributeDesc::`vftable'; //----- (0095E820) -------------------------------------------------------- char __thiscall sub_95E820(int this, _BYTE *a2) { char result; // al result = 1; if ( *(_DWORD *)(this + 12) != 1 ) return 0; *a2 = *(_BYTE *)(this + 20); return result; } //----- (0095E840) -------------------------------------------------------- char __thiscall sub_95E840(_DWORD *this, _DWORD *a2, _DWORD *a3) { if ( this[3] != 11 ) return 0; *a3 = this[54]; *a2 = this[5]; return 1; } //----- (0095E870) -------------------------------------------------------- char __thiscall sub_95E870(_DWORD *this, _DWORD *a2) { if ( this[3] != 3 ) return 0; *a2 = this[5]; return 1; } //----- (0095E890) -------------------------------------------------------- char __thiscall sub_95E890(int this, float *a2) { if ( *(_DWORD *)(this + 12) != 4 ) return 0; *a2 = *(float *)(this + 20); return 1; } //----- (0095E8B0) -------------------------------------------------------- char __thiscall sub_95E8B0(int this, float *a2) { if ( *(_DWORD *)(this + 12) != 5 ) return 0; *a2 = *(float *)(this + 20); a2[1] = *(float *)(this + 24); return 1; } //----- (0095E8E0) -------------------------------------------------------- char __thiscall sub_95E8E0(int this, float *a2) { if ( *(_DWORD *)(this + 12) != 6 ) return 0; *a2 = *(float *)(this + 20); a2[1] = *(float *)(this + 24); a2[2] = *(float *)(this + 28); return 1; } //----- (0095E910) -------------------------------------------------------- char __thiscall sub_95E910(int this, float **a2) { float *v3; // eax if ( *(_DWORD *)(this + 12) != 7 ) return 0; v3 = *a2; *v3 = *(float *)(this + 20); v3[1] = *(float *)(this + 24); v3[2] = *(float *)(this + 28); v3[3] = *(float *)(this + 32); return 1; } //----- (0095E950) -------------------------------------------------------- char __thiscall sub_95E950(int this, float *a2) { if ( *(_DWORD *)(this + 12) != 10 ) return 0; *a2 = *(float *)(this + 20); a2[1] = *(float *)(this + 24); a2[2] = *(float *)(this + 28); a2[3] = *(float *)(this + 32); return 1; } //----- (0095E980) -------------------------------------------------------- void __thiscall sub_95E980(int this, int a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 == a2 ) return; if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); LABEL_6: *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } if ( v3 == 14 ) { operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); goto LABEL_6; } LABEL_7: *(_DWORD *)(v2 + 12) = a2; if ( a2 != 2 ) { if ( a2 != 14 ) return; *(_DWORD *)(v2 + 152) = 0; *(_DWORD *)(v2 + 88) = 0; } *(_DWORD *)(v2 + 84) = 0; *(_DWORD *)(v2 + 20) = 0; } //----- (0095EA00) -------------------------------------------------------- void __thiscall sub_95EA00(int this, char a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 1 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 1; *(_BYTE *)(v2 + 20) = a2; return; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } *(_BYTE *)(this + 20) = a2; } //----- (0095EA70) -------------------------------------------------------- void __thiscall sub_95EA70(int this, int a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 3 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 3; *(_DWORD *)(v2 + 20) = a2; return; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } *(_DWORD *)(this + 20) = a2; } //----- (0095EAE0) -------------------------------------------------------- void __thiscall sub_95EAE0(int this, float a2) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 4 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 4; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: *(float *)(v2 + 20) = a2; } //----- (0095EB40) -------------------------------------------------------- float *__thiscall sub_95EB40(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 5 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 5; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 20) = *a2; *(float *)(v2 + 24) = a2[1]; return result; } //----- (0095EBB0) -------------------------------------------------------- float *__thiscall sub_95EBB0(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 6 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 6; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 20) = *a2; *(float *)(v2 + 24) = a2[1]; *(float *)(v2 + 28) = a2[2]; return result; } //----- (0095EC20) -------------------------------------------------------- float *__thiscall sub_95EC20(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 10 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 10; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 20) = *a2; *(float *)(v2 + 24) = a2[1]; *(float *)(v2 + 28) = a2[2]; *(float *)(v2 + 32) = 1.0; return result; } //----- (0095ECA0) -------------------------------------------------------- float *__thiscall sub_95ECA0(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 10 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 10; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 20) = *a2; *(float *)(v2 + 24) = a2[1]; *(float *)(v2 + 28) = a2[2]; *(float *)(v2 + 32) = a2[3]; return result; } //----- (0095ED20) -------------------------------------------------------- void __thiscall sub_95ED20(_DWORD *this, char a2) { if ( a2 ) this[4] |= 2u; else this[4] &= 0xFFFFFFFD; } //----- (0095ED40) -------------------------------------------------------- void __thiscall sub_95ED40(_DWORD *this, char a2) { if ( a2 ) this[4] |= 1u; else this[4] &= 0xFFFFFFFE; } //----- (0095ED60) -------------------------------------------------------- char __thiscall sub_95ED60(_DWORD *this, int a2, int a3) { int v3; // eax v3 = this[3]; if ( v3 != 3 && v3 != 2 ) return 0; this[22] = a2; this[38] = a3; return 1; } //----- (0095ED90) -------------------------------------------------------- char __thiscall sub_95ED90(int this, float a2, float a3) { char result; // al if ( *(_DWORD *)(this + 12) != 4 ) return 0; result = 1; *(float *)(this + 88) = a2; *(float *)(this + 152) = a3; return result; } //----- (0095EDC0) -------------------------------------------------------- char __thiscall sub_95EDC0(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 12) != 5 ) return 0; *(float *)(this + 88) = *a2; *(float *)(this + 92) = a2[1]; *(float *)(this + 152) = *a3; result = 1; *(float *)(this + 156) = a3[1]; return result; } //----- (0095EE00) -------------------------------------------------------- char __thiscall sub_95EE00(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 12) != 6 ) return 0; *(float *)(this + 88) = *a2; *(float *)(this + 92) = a2[1]; *(float *)(this + 96) = a2[2]; *(float *)(this + 152) = *a3; *(float *)(this + 156) = a3[1]; result = 1; *(float *)(this + 160) = a3[2]; return result; } //----- (0095EE50) -------------------------------------------------------- char __thiscall sub_95EE50(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 12) != 7 ) return 0; *(float *)(this + 88) = *a2; *(float *)(this + 92) = a2[1]; *(float *)(this + 96) = a2[2]; *(float *)(this + 100) = a2[3]; *(float *)(this + 152) = *a3; *(float *)(this + 156) = a3[1]; *(float *)(this + 160) = a3[2]; result = 1; *(float *)(this + 164) = a3[3]; return result; } //----- (0095EEB0) -------------------------------------------------------- char __thiscall sub_95EEB0(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 12) != 10 ) return 0; *(float *)(this + 88) = *a2; *(float *)(this + 92) = a2[1]; *(float *)(this + 96) = a2[2]; *(float *)(this + 100) = 1.0; *(float *)(this + 152) = *a3; *(float *)(this + 156) = a3[1]; *(float *)(this + 160) = a3[2]; result = 1; *(float *)(this + 164) = 1.0; return result; } //----- (0095EF10) -------------------------------------------------------- char __thiscall sub_95EF10(int this, float *a2, float *a3) { char result; // al if ( *(_DWORD *)(this + 12) != 10 ) return 0; *(float *)(this + 88) = *a2; *(float *)(this + 92) = a2[1]; *(float *)(this + 96) = a2[2]; *(float *)(this + 100) = a2[3]; *(float *)(this + 152) = *a3; *(float *)(this + 156) = a3[1]; *(float *)(this + 160) = a3[2]; result = 1; *(float *)(this + 164) = a3[3]; return result; } //----- (0095EF70) -------------------------------------------------------- _DWORD *__thiscall sub_95EF70(char *this) { char *v1; // esi _DWORD *v2; // eax _DWORD *v3; // edi _DWORD *result; // eax float v5; // [esp+18h] [ebp-74h] float v6; // [esp+1Ch] [ebp-70h] float v7; // [esp+20h] [ebp-6Ch] float v8; // [esp+24h] [ebp-68h] float v9; // [esp+28h] [ebp-64h] float v10; // [esp+2Ch] [ebp-60h] float v11; // [esp+30h] [ebp-5Ch] float v12; // [esp+34h] [ebp-58h] float v13; // [esp+38h] [ebp-54h] float v14; // [esp+3Ch] [ebp-50h] float v15; // [esp+40h] [ebp-4Ch] float v16; // [esp+44h] [ebp-48h] char Src; // [esp+48h] [ebp-44h] float v18; // [esp+64h] [ebp-28h] float v19; // [esp+68h] [ebp-24h] float v20; // [esp+6Ch] [ebp-20h] float v21; // [esp+70h] [ebp-1Ch] float v22; // [esp+74h] [ebp-18h] float v23; // [esp+78h] [ebp-14h] float v24; // [esp+7Ch] [ebp-10h] float v25; // [esp+80h] [ebp-Ch] float v26; // [esp+84h] [ebp-8h] v1 = this; v2 = operator new(0xE4u); if ( v2 ) v3 = sub_956E30(v2); else v3 = 0; (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 12))(v3, *((_DWORD *)v1 + 1)); (*(void (__thiscall **)(_DWORD *, _DWORD))(*v3 + 16))(v3, *((_DWORD *)v1 + 2)); sub_6A25D0(v3, *((_DWORD *)v1 + 4)); sub_957020((int)v3, *((_DWORD *)v1 + 3)); switch ( *((_DWORD *)v1 + 3) ) { case 1: sub_9570A0((int)v3, v1[20]); result = v3; break; case 2: sub_9576C0((int)v3, *((char **)v1 + 5)); if ( !(v1[16] & 1) ) goto LABEL_25; sub_957400(v3, *((_DWORD *)v1 + 22), *((_DWORD *)v1 + 38)); result = v3; break; case 3: sub_957110((int)v3, *((_DWORD *)v1 + 5)); if ( !(v1[16] & 1) ) goto LABEL_25; sub_957400(v3, *((_DWORD *)v1 + 22), *((_DWORD *)v1 + 38)); result = v3; break; case 4: sub_957180((int)v3, *((float *)v1 + 5)); if ( !(v1[16] & 1) ) goto LABEL_25; sub_957430((int)v3, *((float *)v1 + 22), *((float *)v1 + 38)); result = v3; break; case 5: v7 = *((float *)v1 + 5); v8 = *((float *)v1 + 6); sub_9571E0((int)v3, &v7); if ( !(v1[16] & 1) ) goto LABEL_25; v11 = *((float *)v1 + 22); v12 = *((float *)v1 + 23); v15 = *((float *)v1 + 38); v16 = *((float *)v1 + 39); sub_957460((int)v3, &v11, &v15); result = v3; break; case 6: v10 = *((float *)v1 + 5); v11 = *((float *)v1 + 6); v12 = *((float *)v1 + 7); sub_957250((int)v3, &v10); if ( !(v1[16] & 1) ) goto LABEL_25; v6 = *((float *)v1 + 22); v7 = *((float *)v1 + 23); v8 = *((float *)v1 + 24); v14 = *((float *)v1 + 38); v15 = *((float *)v1 + 39); v16 = *((float *)v1 + 40); sub_9574A0((int)v3, &v6, &v14); result = v3; break; case 7: sub_9577A0((int)v3, v1 + 20); if ( !(v1[16] & 1) ) goto LABEL_25; sub_9574F0((int)v3, (float *)v1 + 22, (float *)v1 + 38); result = v3; break; case 8: v18 = *((float *)v1 + 5); v19 = *((float *)v1 + 6); v20 = *((float *)v1 + 7); v21 = *((float *)v1 + 9); v22 = *((float *)v1 + 10); v23 = *((float *)v1 + 11); v24 = *((float *)v1 + 13); v25 = *((float *)v1 + 14); v26 = *((float *)v1 + 15); sub_957810((int)v3, &v18); result = v3; break; case 9: memcpy_s(v1 + 20, 0x40u, &Src, 0x40u); sub_9578B0((int)v3, &Src); result = v3; break; case 0xA: v9 = *((float *)v1 + 5); v10 = *((float *)v1 + 6); v11 = *((float *)v1 + 7); v12 = *((float *)v1 + 8); sub_957340((int)v3, &v9); if ( !(v1[16] & 1) ) goto LABEL_25; sub_9573E0(v3, 1); v5 = *((float *)v1 + 22); v6 = *((float *)v1 + 23); v7 = *((float *)v1 + 24); v8 = *((float *)v1 + 25); v13 = *((float *)v1 + 38); v14 = *((float *)v1 + 39); v15 = *((float *)v1 + 40); v16 = *((float *)v1 + 41); sub_9575B0((int)v3, &v5, &v13); result = v3; break; case 0xB: sub_957920((int)v3, *((_DWORD *)v1 + 5), *((char **)v1 + 54)); result = v3; break; case 0xE: sub_957A40((int)v3, *((void **)v1 + 5), *((_DWORD *)v1 + 6), *((_DWORD *)v1 + 7), *((_DWORD *)v1 + 21)); if ( v1[16] & 1 ) { sub_9573E0(v3, 1); sub_957AE0(v3, *((_DWORD *)v1 + 7), *((_DWORD *)v1 + 21), *((void **)v1 + 22), *((void **)v1 + 38)); } LABEL_25: result = v3; break; default: (*(void (__thiscall **)(_DWORD *, signed int))*v3)(v3, 1); result = 0; break; } return result; } //----- (0095F3B0) -------------------------------------------------------- void __thiscall sub_95F3B0(void **this, char *Src) { void **v2; // ebx unsigned int v3; // kr00_4 char *v4; // eax v2 = this; operator delete(this[1]); v2[1] = 0; if ( Src ) { if ( *Src ) { v3 = strlen(Src); v4 = (char *)operator new(v3 + 1); v2[1] = v4; strcpy_s(v4, v3 + 1, Src); } } } //----- (0095F410) -------------------------------------------------------- char __thiscall sub_95F410(int this, float *a2) { if ( *(_DWORD *)(this + 12) != 8 ) return 0; *a2 = *(float *)(this + 20); a2[1] = *(float *)(this + 24); a2[2] = *(float *)(this + 28); a2[3] = *(float *)(this + 36); a2[4] = *(float *)(this + 40); a2[5] = *(float *)(this + 44); a2[6] = *(float *)(this + 52); a2[7] = *(float *)(this + 56); a2[8] = *(float *)(this + 60); return 1; } //----- (0095F460) -------------------------------------------------------- char __thiscall sub_95F460(_DWORD *this, int a2, rsize_t DstSize) { if ( this[3] != 9 ) return 0; memcpy_s(*(void **)a2, DstSize, this + 5, 0x40u); return 1; } //----- (0095F490) -------------------------------------------------------- errno_t __thiscall sub_95F490(int this, void *Src) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 7 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 7; return memcpy_s((void *)(v2 + 20), 0x40u, Src, 0x10u); } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } return memcpy_s((void *)(v2 + 20), 0x40u, Src, 0x10u); } //----- (0095F500) -------------------------------------------------------- float *__thiscall sub_95F500(int this, float *a2) { int v2; // esi int v3; // eax float *result; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 8 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 8; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } LABEL_8: result = a2; *(float *)(v2 + 20) = *a2; *(float *)(v2 + 24) = a2[1]; *(float *)(v2 + 28) = a2[2]; *(float *)(v2 + 36) = a2[3]; *(float *)(v2 + 40) = a2[4]; *(float *)(v2 + 44) = a2[5]; *(float *)(v2 + 52) = a2[6]; *(float *)(v2 + 56) = a2[7]; *(float *)(v2 + 60) = a2[8]; return result; } //----- (0095F5A0) -------------------------------------------------------- errno_t __thiscall sub_95F5A0(int this, void *Src) { int v2; // esi int v3; // eax v2 = this; v3 = *(_DWORD *)(this + 12); if ( v3 != 9 ) { if ( v3 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v3 != 14 ) { LABEL_7: *(_DWORD *)(v2 + 12) = 9; return memcpy_s((void *)(v2 + 20), 0x40u, Src, 0x40u); } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v2 + 152)); operator delete(*(void **)(v2 + 88)); } *(_DWORD *)(v2 + 84) = 0; goto LABEL_7; } return memcpy_s((void *)(v2 + 20), 0x40u, Src, 0x40u); } //----- (0095F610) -------------------------------------------------------- void __thiscall sub_95F610(int this, int a2, char *Src) { int v3; // esi int v4; // eax char *v5; // eax unsigned int v6; // kr00_4 v3 = this; v4 = *(_DWORD *)(this + 12); if ( v4 != 11 ) { if ( v4 == 2 ) { operator delete(*(void **)(this + 20)); } else { if ( v4 != 14 ) { LABEL_7: *(_DWORD *)(v3 + 12) = 11; goto LABEL_8; } operator delete(*(void **)(this + 20)); operator delete(*(void **)(v3 + 152)); operator delete(*(void **)(v3 + 88)); } *(_DWORD *)(v3 + 84) = 0; goto LABEL_7; } LABEL_8: v5 = Src; if ( Src && *Src ) { if ( *(_DWORD *)(v3 + 216) ) { if ( *(_DWORD *)(v3 + 220) <= strlen(Src) ) { operator delete(*(void **)(v3 + 216)); *(_DWORD *)(v3 + 216) = 0; *(_DWORD *)(v3 + 220) = 0; } v5 = Src; } if ( !*(_DWORD *)(v3 + 216) ) { v6 = strlen(v5); *(_DWORD *)(v3 + 220) = v6 + 1; *(_DWORD *)(v3 + 216) = operator new(v6 + 1); v5 = Src; } strcpy_s(*(char **)(v3 + 216), *(_DWORD *)(v3 + 220), v5); *(_DWORD *)(v3 + 20) = a2; } else { operator delete(*(void **)(v3 + 216)); *(_DWORD *)(v3 + 216) = 0; *(_DWORD *)(v3 + 220) = 0; *(_DWORD *)(v3 + 20) = a2; } } //----- (0095F730) -------------------------------------------------------- char __thiscall sub_95F730(const char **this, signed int a2) { const char **v2; // esi signed int v3; // edi void (__cdecl *v4)(signed int, const char **, signed int, signed int *, signed int); // ecx void (__cdecl *v5)(signed int, const char **, signed int, signed int *, signed int); // edx char result; // al const char *v7; // [esp+8h] [ebp-4h] v2 = this; v3 = a2; if ( !sub_92C1E0(a2, this[1]) || !sub_92C1E0(v3, v2[2]) ) return 0; v4 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v3 + 8); a2 = 4; v4(v3, v2 + 4, 4, &a2, 1); v7 = v2[3]; v5 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v3 + 8); a2 = 4; v5(v3, &v7, 4, &a2, 1); switch ( (unsigned int)v2[3] ) { case 1u: if ( !(*(unsigned __int8 (__thiscall **)(const char **, signed int))*v2)(v2, v3) ) return 0; goto LABEL_27; case 2u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 1))(v2, v3); if ( !result ) return result; goto LABEL_27; case 3u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 2))(v2, v3); if ( !result ) return result; goto LABEL_27; case 4u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 3))(v2, v3); if ( !result ) return result; goto LABEL_27; case 5u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 4))(v2, v3); if ( !result ) return result; goto LABEL_27; case 6u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 5))(v2, v3); if ( !result ) return result; goto LABEL_27; case 7u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 6))(v2, v3); if ( !result ) return result; goto LABEL_27; case 8u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 7))(v2, v3); if ( !result ) return result; goto LABEL_27; case 9u: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 8))(v2, v3); if ( !result ) return result; goto LABEL_27; case 0xAu: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 9))(v2, v3); if ( !result ) return result; goto LABEL_27; case 0xBu: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 10))(v2, v3); if ( !result ) return result; goto LABEL_27; case 0xEu: result = (*((int (__thiscall **)(const char **, signed int))*v2 + 11))(v2, v3); if ( result ) goto LABEL_27; break; default: LABEL_27: result = 1; break; } return result; } //----- (0095F910) -------------------------------------------------------- char __thiscall sub_95F910(void **this, int a2) { int v2; // edi void **v3; // esi void (__cdecl *v4)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v5)(int, void **, signed int, int *, signed int); // eax int v6; // eax char result; // al void *v8; // [esp+8h] [ebp-8h] int v9; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v9 = 0; if ( !sub_92C250(a2, this + 1, &v9) || !sub_92C250(v2, v3 + 2, &v9) ) return 0; v4 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v4(v2, v3 + 4, 4, &a2, 1); v5 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v5(v2, &v8, 4, &a2, 1); v6 = (int)v8; v3[3] = v8; switch ( v6 ) { case 1: if ( !(*((unsigned __int8 (__thiscall **)(void **, int))*v3 + 12))(v3, v2) ) return 0; goto LABEL_27; case 2: result = (*((int (__thiscall **)(void **, int))*v3 + 13))(v3, v2); if ( !result ) return result; goto LABEL_27; case 3: result = (*((int (__thiscall **)(void **, int))*v3 + 14))(v3, v2); if ( !result ) return result; goto LABEL_27; case 4: result = (*((int (__thiscall **)(void **, int))*v3 + 15))(v3, v2); if ( !result ) return result; goto LABEL_27; case 5: result = (*((int (__thiscall **)(void **, int))*v3 + 16))(v3, v2); if ( !result ) return result; goto LABEL_27; case 6: result = (*((int (__thiscall **)(void **, int))*v3 + 17))(v3, v2); if ( !result ) return result; goto LABEL_27; case 7: result = (*((int (__thiscall **)(void **, int))*v3 + 18))(v3, v2); if ( !result ) return result; goto LABEL_27; case 8: result = (*((int (__thiscall **)(void **, int))*v3 + 19))(v3, v2); if ( !result ) return result; goto LABEL_27; case 9: result = (*((int (__thiscall **)(void **, int))*v3 + 20))(v3, v2); if ( !result ) return result; goto LABEL_27; case 10: result = (*((int (__thiscall **)(void **, int))*v3 + 21))(v3, v2); if ( !result ) return result; goto LABEL_27; case 11: result = (*((int (__thiscall **)(void **, int))*v3 + 22))(v3, v2); if ( !result ) return result; goto LABEL_27; case 14: result = (*((int (__thiscall **)(void **, int))*v3 + 23))(v3, v2); if ( result ) goto LABEL_27; break; default: LABEL_27: result = 1; break; } return result; } //----- (0095FB00) -------------------------------------------------------- char __thiscall sub_95FB00(unsigned __int8 *this, int a2) { void (__cdecl *v2)(int, int *, signed int, int *, signed int); // eax int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] v4 = this[20]; v2 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 8); v5 = 4; v2(a2, &v4, 4, &v5, 1); return 1; } //----- (0095FB40) -------------------------------------------------------- char __thiscall sub_95FB40(const char **this, signed int a2) { const char **v2; // esi signed int v3; // edi char result; // al void (__cdecl *v5)(signed int, const char **, signed int, signed int *, signed int); // edx v2 = this; v3 = a2; result = sub_92C1E0(a2, this[5]); if ( result ) { if ( (_BYTE)v2[4] & 1 ) { v5 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v3 + 8); a2 = 4; v5(v3, v2 + 38, 4, &a2, 1); } result = 1; } return result; } //----- (0095FB90) -------------------------------------------------------- char __thiscall sub_95FB90(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v8 = 4; v3(a2, this + 20, 4, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v4 + 88, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 152, 4, &a2, 1); } return 1; } //----- (0095FC00) -------------------------------------------------------- char __thiscall sub_95FC00(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v8 = 4; v3(a2, this + 20, 8, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v4 + 88, 8, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 152, 8, &a2, 1); } return 1; } //----- (0095FC70) -------------------------------------------------------- char __thiscall sub_95FC70(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v8 = 4; v3(a2, this + 20, 12, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v4 + 88, 12, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 152, 12, &a2, 1); } return 1; } //----- (0095FCE0) -------------------------------------------------------- char __thiscall sub_95FCE0(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v8 = 4; v3(a2, this + 20, 12, &v8, 1); v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v4 + 36, 12, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 52, 12, &a2, 1); return 1; } //----- (0095FD50) -------------------------------------------------------- char __thiscall sub_95FD50(char *this, int a2) { int v2; // ST04_4 void (__cdecl *v3)(int, int, signed int, char **, signed int); // ecx char *v5; // [esp+0h] [ebp-4h] v5 = this; v2 = (int)(this + 20); v3 = *(void (__cdecl **)(int, int, signed int, char **, signed int))(a2 + 8); v5 = (char *)4; v3(a2, v2, 64, &v5, 1); return 1; } //----- (0095FD80) -------------------------------------------------------- char __thiscall sub_95FD80(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v8 = 4; v3(a2, this + 20, 16, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v4 + 88, 16, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 152, 16, &a2, 1); } return 1; } //----- (0095FDF0) -------------------------------------------------------- bool __thiscall sub_95FDF0(const char **this, signed int a2) { void (__cdecl *v2)(signed int, const char **, signed int, int *, signed int); // edx const char **v3; // esi int v5; // [esp+8h] [ebp-4h] v2 = *(void (__cdecl **)(signed int, const char **, signed int, int *, signed int))(a2 + 8); v3 = this; v5 = 4; v2(a2, this + 5, 4, &v5, 1); return sub_92C1E0(a2, v3[54]) != 0; } //----- (0095FE40) -------------------------------------------------------- char __thiscall sub_95FE40(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, int *, signed int, signed int *, signed int); // eax void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // edx int v7; // ebx void (__cdecl *v8)(signed int, int, int, signed int *, signed int); // eax int v9; // ST30_4 int v10; // ST2C_4 void (__cdecl *v11)(signed int, int, int, signed int *, signed int); // ecx int v12; // ST30_4 int v13; // ST2C_4 void (__cdecl *v14)(signed int, int, int, signed int *, signed int); // edx int v15; // ST1C_4 int v16; // ST18_4 int v18; // [esp+Ch] [ebp-8h] int v19; // [esp+10h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 8); v4 = this; v19 = 4; v3(a2, this + 84, 4, &v19, 1); v18 = *((_DWORD *)v4 + 6); v5 = *(void (__cdecl **)(signed int, int *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, &v18, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v4 + 28, 4, &a2, 1); if ( (unsigned int)(*((_DWORD *)v4 + 6) - 4) > 3 ) return 0; v7 = *((_DWORD *)v4 + 7) >> 2; v8 = *(void (__cdecl **)(signed int, int, int, signed int *, signed int))(v2 + 8); v9 = 4 * v7 * *((_DWORD *)v4 + 21); v10 = *((_DWORD *)v4 + 5); a2 = 4; v8(v2, v10, v9, &a2, 1); if ( v4[16] & 1 ) { v11 = *(void (__cdecl **)(signed int, int, int, signed int *, signed int))(v2 + 8); v12 = 4 * v7 * *((_DWORD *)v4 + 21); v13 = *((_DWORD *)v4 + 38); a2 = 4; v11(v2, v13, v12, &a2, 1); v14 = *(void (__cdecl **)(signed int, int, int, signed int *, signed int))(v2 + 8); v15 = 4 * v7 * *((_DWORD *)v4 + 21); v16 = *((_DWORD *)v4 + 22); a2 = 4; v14(v2, v16, v15, &a2, 1); } return 1; } //----- (0095FF40) -------------------------------------------------------- char __thiscall sub_95FF40(_BYTE *this, int a2) { void (__cdecl *v2)(int, int *, signed int, int *, signed int); // edx _BYTE *v3; // esi int v5; // [esp+4h] [ebp-4h] v2 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v3 = this; v5 = 4; v2(a2, &a2, 4, &v5, 1); v3[20] = a2 != 0; return 1; } //----- (0095FF80) -------------------------------------------------------- char __thiscall sub_95FF80(int this, int a2) { int v2; // esi int v3; // edi char result; // al void (__cdecl *v5)(int, int, signed int, int *, signed int); // eax v2 = this; v3 = a2; result = sub_92C250(a2, (void **)(this + 20), (_DWORD *)(this + 84)); if ( result ) { if ( *(_BYTE *)(v2 + 16) & 1 ) { v5 = *(void (__cdecl **)(int, int, signed int, int *, signed int))(v3 + 4); a2 = 4; v5(v3, v2 + 152, 4, &a2, 1); } result = 1; } return result; } //----- (0095FFE0) -------------------------------------------------------- char __thiscall sub_95FFE0(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, this + 20, 4, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v5(v2, v4 + 88, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v6(v2, v4 + 152, 4, &a2, 1); } return 1; } //----- (00960050) -------------------------------------------------------- char __thiscall sub_960050(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, this + 20, 8, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v5(v2, v4 + 88, 8, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v6(v2, v4 + 152, 8, &a2, 1); } return 1; } //----- (009600C0) -------------------------------------------------------- char __thiscall sub_9600C0(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, this + 20, 12, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v5(v2, v4 + 88, 12, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v6(v2, v4 + 152, 12, &a2, 1); } return 1; } //----- (00960130) -------------------------------------------------------- char __thiscall sub_960130(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, this + 20, 16, &v8, 1); if ( v4[16] & 1 ) { v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v5(v2, v4 + 88, 16, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v6(v2, v4 + 152, 16, &a2, 1); } return 1; } //----- (009601A0) -------------------------------------------------------- char __thiscall sub_9601A0(char *this, signed int a2) { signed int v2; // esi void (__cdecl *v3)(signed int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(signed int, char *, signed int, signed int *, signed int); // edx void (__cdecl *v6)(signed int, char *, signed int, signed int *, signed int); // ecx int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(signed int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, this + 20, 12, &v8, 1); v5 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v5(v2, v4 + 36, 12, &a2, 1); v6 = *(void (__cdecl **)(signed int, char *, signed int, signed int *, signed int))(v2 + 4); a2 = 4; v6(v2, v4 + 52, 12, &a2, 1); return 1; } //----- (00960210) -------------------------------------------------------- char __thiscall sub_960210(char *this, int a2) { int v2; // ST04_4 void (__cdecl *v3)(int, int, signed int, char **, signed int); // ecx char *v5; // [esp+0h] [ebp-4h] v5 = this; v2 = (int)(this + 20); v3 = *(void (__cdecl **)(int, int, signed int, char **, signed int))(a2 + 4); v5 = (char *)4; v3(a2, v2, 64, &v5, 1); return 1; } //----- (00960240) -------------------------------------------------------- bool __thiscall sub_960240(void **this, int a2) { void (__cdecl *v2)(int, void **, signed int, int *, signed int); // edx void **v3; // esi int v5; // [esp+8h] [ebp-4h] v2 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(a2 + 4); v3 = this; v5 = 4; v2(a2, this + 5, 4, &v5, 1); return sub_92C250(a2, v3 + 54, v3 + 55) != 0; } //----- (00960290) -------------------------------------------------------- char __thiscall sub_960290(char *this, int a2) { int v2; // esi void (__cdecl *v3)(int, char *, signed int, int *, signed int); // edx char *v4; // edi void (__cdecl *v5)(int, int *, signed int, int *, signed int); // edx void *v6; // eax unsigned int v7; // ecx int v8; // ebx int v9; // ST34_4 void *v10; // ST30_4 void (__cdecl *v11)(int, void *, int, int *, signed int); // eax void (__cdecl *v12)(int, int, int, int *, signed int); // ecx int v13; // ST34_4 int v14; // ST30_4 void (__cdecl *v15)(int, int, int, int *, signed int); // edx int v16; // ST20_4 int v17; // ST1C_4 int v19; // [esp+Ch] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(a2 + 4); v4 = this; v19 = 4; v3(a2, this + 84, 4, &v19, 1); v5 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); a2 = 0; v19 = 4; v5(v2, &a2, 4, &v19, 1); v19 = 4; *((_DWORD *)v4 + 6) = a2; (*(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2 + 4))(v2, v4 + 28, 4, &v19, 1); v6 = operator new(*((_DWORD *)v4 + 21) * *((_DWORD *)v4 + 7)); v7 = *((_DWORD *)v4 + 6) - 4; *((_DWORD *)v4 + 5) = v6; if ( v7 > 3 ) return 0; v8 = *((_DWORD *)v4 + 7) >> 2; v9 = 4 * v8 * *((_DWORD *)v4 + 21); v10 = v6; v11 = *(void (__cdecl **)(int, void *, int, int *, signed int))(v2 + 4); v19 = 4; v11(v2, v10, v9, &v19, 1); if ( v4[16] & 1 ) { v12 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2 + 4); v13 = 4 * v8 * *((_DWORD *)v4 + 21); v14 = *((_DWORD *)v4 + 38); v19 = 4; v12(v2, v14, v13, &v19, 1); v15 = *(void (__cdecl **)(int, int, int, int *, signed int))(v2 + 4); v16 = 4 * v8 * *((_DWORD *)v4 + 21); v17 = *((_DWORD *)v4 + 22); v19 = 4; v15(v2, v17, v16, &v19, 1); } return 1; } //----- (009603A0) -------------------------------------------------------- void *__thiscall sub_9603A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBAttributeDesc *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A940: using guessed type void *NiTListBase,NSBAttributeDesc *>::`vftable'; //----- (009603D0) -------------------------------------------------------- _DWORD *__thiscall sub_9603D0(_DWORD *this, char *a2) { _DWORD **v2; // edi _DWORD *v3; // eax _DWORD *v4; // esi const char *v5; // eax _DWORD *v6; // eax v2 = (_DWORD **)this; v3 = (_DWORD *)this[2]; *this = v3; if ( !v3 ) return 0; *this = *v3; v4 = (_DWORD *)v3[2]; if ( !v4 ) return 0; while ( 1 ) { v5 = (const char *)sub_965050(v4); if ( !_stricmp(v5, a2) ) break; v6 = *v2; if ( *v2 ) { *v2 = (_DWORD *)*v6; v4 = (_DWORD *)v6[2]; if ( v4 ) continue; } return 0; } return v4; } //----- (00960430) -------------------------------------------------------- int __thiscall sub_960430(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBAttributeDesc *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBAttributeDesc *>::`vftable'; return result; } // A4A940: using guessed type void *NiTListBase,NSBAttributeDesc *>::`vftable'; // A4A950: using guessed type void *NiTPointerListBase,NSBAttributeDesc *>::`vftable'; //----- (00960470) -------------------------------------------------------- void *__thiscall sub_960470(void *this, char a2) { void *v2; // esi v2 = this; sub_960430(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009604A0) -------------------------------------------------------- int __thiscall sub_9604A0(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void *v4; // edi _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST00_4 v1 = this; v2 = this[2]; *this = v2; if ( v2 ) { do { v3 = (_DWORD *)*v1; *v1 = *(_DWORD *)*v1; v4 = (void *)v3[2]; if ( v4 ) { sub_95E7A0((_DWORD *)v3[2]); operator delete(v4); } } while ( *v1 ); } v5 = v1 + 1; v6 = (_DWORD *)v1[2]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; return sub_960430(v5); } //----- (00960510) -------------------------------------------------------- char __userpurge sub_960510@(int a1@, int a2@, int a3) { char result; // al int v4; // ST00_4 _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // ecx if ( !a3 ) return 0; v4 = a2; v5 = (_DWORD *)(a1 + 4); v6 = (_DWORD *)(*(int (__thiscall **)(int, int))(*(_DWORD *)(a1 + 4) + 4))(a1 + 4, v4); v6[2] = a3; *v6 = 0; v6[1] = v5[2]; v7 = (_DWORD *)v5[2]; if ( v7 ) *v7 = v6; else v5[1] = v6; v5[2] = v6; result = 1; ++v5[3]; return result; } // 960510: could not find valid save-restore pair for esi //----- (00960570) -------------------------------------------------------- char __thiscall sub_960570(_DWORD *this, char *Src, int a3, int a4, int a5) { int v5; // ebx _DWORD *v7; // eax void **v8; // eax void **v9; // esi v5 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v7 = operator new(0xE0u); if ( v7 && (v8 = (void **)sub_95E760(v7), (v9 = v8) != 0) ) { sub_95F3B0(v8, Src); sub_95E980((int)v9, 1); sub_95ED20(v9, a4); } else { v9 = 0; } sub_95EA00((int)v9, a5); if ( sub_960510(v5, (int)v9, (int)v9) ) return 1; if ( v9 ) { sub_95E7A0(v9); operator delete(v9); } return 0; } //----- (00960610) -------------------------------------------------------- char __thiscall sub_960610(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 3); sub_95ED20(v11, a4); } else { v11 = 0; } sub_95EA70((int)v11, a5); if ( a7 ) { sub_95ED60(v11, a6, a7); sub_95ED40(v11, 1); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (009606D0) -------------------------------------------------------- char __thiscall sub_9606D0(_DWORD *this, char *Src, int a3, int a4, float a5, float a6, float a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 4); sub_95ED20(v11, a4); } else { v11 = 0; } sub_95EAE0((int)v11, a5); if ( 0.0 != a7 ) { sub_95ED90((int)v11, a6, a7); sub_95ED40(v11, 1); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (009607A0) -------------------------------------------------------- char __thiscall sub_9607A0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi float v12; // [esp+8h] [ebp-18h] float v13; // [esp+Ch] [ebp-14h] float v14; // [esp+10h] [ebp-10h] float v15; // [esp+14h] [ebp-Ch] float v16; // [esp+18h] [ebp-8h] float v17; // [esp+1Ch] [ebp-4h] v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 5); sub_95ED20(v11, a4); } else { v11 = 0; } v16 = *(float *)a5; v17 = *(float *)(a5 + 4); sub_95EB40((int)v11, &v16); if ( 0.0 != *(float *)a7 || *(float *)(a7 + 4) != 0.0 ) { v12 = *(float *)a6; v13 = *(float *)(a6 + 4); v14 = *(float *)a7; v15 = *(float *)(a7 + 4); sub_95EDC0((int)v11, &v12, &v14); sub_95ED40(v11, 1); } else { sub_95ED40(v11, 0); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (009608B0) -------------------------------------------------------- char __thiscall sub_9608B0(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi float v12; // [esp+8h] [ebp-24h] float v13; // [esp+Ch] [ebp-20h] float v14; // [esp+10h] [ebp-1Ch] float v15; // [esp+14h] [ebp-18h] float v16; // [esp+18h] [ebp-14h] float v17; // [esp+1Ch] [ebp-10h] float v18; // [esp+20h] [ebp-Ch] float v19; // [esp+24h] [ebp-8h] float v20; // [esp+28h] [ebp-4h] v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 6); sub_95ED20(v11, a4); } else { v11 = 0; } v18 = *(float *)a5; v19 = *(float *)(a5 + 4); v20 = *(float *)(a5 + 8); sub_95EBB0((int)v11, &v18); if ( 0.0 != *(float *)a7 || 0.0 != *(float *)(a7 + 4) || *(float *)(a7 + 8) != 0.0 ) { v12 = *(float *)a6; v13 = *(float *)(a6 + 4); v14 = *(float *)(a6 + 8); v15 = *(float *)a7; v16 = *(float *)(a7 + 4); v17 = *(float *)(a7 + 8); sub_95EE00((int)v11, &v12, &v15); sub_95ED40(v11, 1); } else { sub_95ED40(v11, 0); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (009609E0) -------------------------------------------------------- char __thiscall sub_9609E0(_DWORD *this, char *a2, int a3, int a4, void *Src, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi v7 = (int)this; if ( sub_9603D0(this, a2) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, a2); sub_95E980((int)v11, 7); sub_95ED20(v11, a4); } else { v11 = 0; } sub_95F490((int)v11, Src); if ( 0.0 != *(float *)a7 || 0.0 != *(float *)(a7 + 4) || 0.0 != *(float *)(a7 + 8) || *(float *)(a7 + 12) != 0.0 ) { sub_95EE50((int)v11, (float *)a6, (float *)a7); sub_95ED40(v11, 1); } else { sub_95ED40(v11, 0); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (00960AD0) -------------------------------------------------------- char __thiscall sub_960AD0(_DWORD *this, char *Src, int a3, char a4, int a5) { int v5; // ebx _DWORD *v7; // eax void **v8; // eax void **v9; // esi float v10; // [esp+Ch] [ebp-28h] float v11; // [esp+10h] [ebp-24h] float v12; // [esp+14h] [ebp-20h] float v13; // [esp+18h] [ebp-1Ch] float v14; // [esp+1Ch] [ebp-18h] float v15; // [esp+20h] [ebp-14h] float v16; // [esp+24h] [ebp-10h] float v17; // [esp+28h] [ebp-Ch] float v18; // [esp+2Ch] [ebp-8h] v5 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v7 = operator new(0xE0u); if ( v7 && (v8 = (void **)sub_95E760(v7), (v9 = v8) != 0) ) { sub_95F3B0(v8, Src); sub_95E980((int)v9, 8); sub_95ED20(v9, a4); } else { v9 = 0; } v10 = *(float *)a5; v11 = *(float *)(a5 + 4); v12 = *(float *)(a5 + 8); v13 = *(float *)(a5 + 12); v14 = *(float *)(a5 + 16); v15 = *(float *)(a5 + 20); v16 = *(float *)(a5 + 24); v17 = *(float *)(a5 + 28); v18 = *(float *)(a5 + 32); sub_95F500((int)v9, &v10); sub_95ED40(v9, 0); if ( sub_960510(v5, (int)v9, (int)v9) ) return 1; if ( v9 ) { sub_95E7A0(v9); operator delete(v9); } return 0; } //----- (00960BE0) -------------------------------------------------------- char __thiscall sub_960BE0(_DWORD *this, char *a2, int a3, int a4, void *Src) { int v5; // ebx _DWORD *v7; // eax void **v8; // eax void **v9; // esi v5 = (int)this; if ( sub_9603D0(this, a2) ) return 0; v7 = operator new(0xE0u); if ( v7 && (v8 = (void **)sub_95E760(v7), (v9 = v8) != 0) ) { sub_95F3B0(v8, a2); sub_95E980((int)v9, 9); sub_95ED20(v9, a4); } else { v9 = 0; } sub_95F5A0((int)v9, Src); sub_95ED40(v9, 0); if ( sub_960510(v5, (int)v9, (int)v9) ) return 1; if ( v9 ) { sub_95E7A0(v9); operator delete(v9); } return 0; } //----- (00960C90) -------------------------------------------------------- char __thiscall sub_960C90(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi float v12; // [esp+8h] [ebp-24h] float v13; // [esp+Ch] [ebp-20h] float v14; // [esp+10h] [ebp-1Ch] float v15; // [esp+14h] [ebp-18h] float v16; // [esp+18h] [ebp-14h] float v17; // [esp+1Ch] [ebp-10h] float v18; // [esp+20h] [ebp-Ch] float v19; // [esp+24h] [ebp-8h] float v20; // [esp+28h] [ebp-4h] v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 10); sub_95ED20(v11, a4); } else { v11 = 0; } v18 = *(float *)a5; v19 = *(float *)(a5 + 4); v20 = *(float *)(a5 + 8); sub_95EC20((int)v11, &v18); if ( a7 ) { v12 = *(float *)a6; v13 = *(float *)(a6 + 4); v14 = *(float *)(a6 + 8); v15 = *(float *)a7; v16 = *(float *)(a7 + 4); v17 = *(float *)(a7 + 8); sub_95EEB0((int)v11, &v12, &v15); sub_95ED40(v11, 1); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (00960D90) -------------------------------------------------------- char __thiscall sub_960D90(_DWORD *this, char *Src, int a3, int a4, int a5, int a6, int a7) { int v7; // ebx _DWORD *v9; // eax void **v10; // eax void **v11; // esi float v12; // [esp+8h] [ebp-30h] float v13; // [esp+Ch] [ebp-2Ch] float v14; // [esp+10h] [ebp-28h] float v15; // [esp+14h] [ebp-24h] float v16; // [esp+18h] [ebp-20h] float v17; // [esp+1Ch] [ebp-1Ch] float v18; // [esp+20h] [ebp-18h] float v19; // [esp+24h] [ebp-14h] float v20; // [esp+28h] [ebp-10h] float v21; // [esp+2Ch] [ebp-Ch] float v22; // [esp+30h] [ebp-8h] float v23; // [esp+34h] [ebp-4h] v7 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v9 = operator new(0xE0u); if ( v9 && (v10 = (void **)sub_95E760(v9), (v11 = v10) != 0) ) { sub_95F3B0(v10, Src); sub_95E980((int)v11, 10); sub_95ED20(v11, a4); } else { v11 = 0; } v20 = *(float *)a5; v21 = *(float *)(a5 + 4); v22 = *(float *)(a5 + 8); v23 = *(float *)(a5 + 12); sub_95ECA0((int)v11, &v20); if ( a7 ) { v12 = *(float *)a6; v13 = *(float *)(a6 + 4); v14 = *(float *)(a6 + 8); v15 = *(float *)(a6 + 12); v16 = *(float *)a7; v17 = *(float *)(a7 + 4); v18 = *(float *)(a7 + 8); v19 = *(float *)(a7 + 12); sub_95EF10((int)v11, &v12, &v16); sub_95ED40(v11, 1); } if ( sub_960510(v7, (int)v11, (int)v11) ) return 1; if ( v11 ) { sub_95E7A0(v11); operator delete(v11); } return 0; } //----- (00960EA0) -------------------------------------------------------- char __thiscall sub_960EA0(_DWORD *this, char *Src, int a3, int a4, int a5, char *a6) { int v6; // ebx _DWORD *v8; // eax void **v9; // eax void **v10; // esi v6 = (int)this; if ( sub_9603D0(this, Src) ) return 0; v8 = operator new(0xE0u); if ( v8 && (v9 = (void **)sub_95E760(v8), (v10 = v9) != 0) ) { sub_95F3B0(v9, Src); sub_95E980((int)v10, 11); sub_95ED20(v10, a4); } else { v10 = 0; } sub_95F610((int)v10, a5, a6); if ( sub_960510(v6, (int)v10, (int)v10) ) return 1; if ( v10 ) { sub_95E7A0(v10); operator delete(v10); } return 0; } //----- (00960F40) -------------------------------------------------------- bool __thiscall sub_960F40(_DWORD *this, signed int a2) { _DWORD *v2; // esi void (__cdecl *v3)(signed int, int *, signed int, int *, signed int); // eax int v4; // eax int v5; // ebx _DWORD *v6; // eax const char **v7; // eax int v9; // [esp+Ch] [ebp-8h] int v10; // [esp+10h] [ebp-4h] v2 = this; v10 = this[4]; v3 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v9 = 4; v3(a2, &v10, 4, &v9, 1); v4 = v2[2]; v5 = 0; *v2 = v4; while ( *v2 ) { v6 = (_DWORD *)*v2; *v2 = *(_DWORD *)*v2; v7 = (const char **)v6[2]; if ( v7 && sub_95F730(v7, a2) ) ++v5; } return v5 == v10; } //----- (00960FB0) -------------------------------------------------------- _DWORD *__thiscall sub_960FB0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // esi result = this; v2 = this + 1; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerList::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; return result; } // A4A960: using guessed type void *NiTPointerList::`vftable'; //----- (00961000) -------------------------------------------------------- bool __thiscall sub_961000(_DWORD *this, int a2) { void (__cdecl *v2)(int, unsigned int *, signed int, int *, signed int); // edx _DWORD *v3; // esi unsigned int v4; // eax unsigned int v5; // ebx _DWORD *v6; // eax void **v7; // edi _DWORD *v8; // eax _DWORD *v9; // ecx unsigned int v11; // [esp+8h] [ebp-8h] int v12; // [esp+Ch] [ebp-4h] v2 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v3 = this; v12 = 4; v2(a2, &v11, 4, &v12, 1); v4 = v11; v5 = 0; v12 = 0; if ( v11 ) { do { v6 = operator new(0xE0u); if ( v6 ) v7 = (void **)sub_95E760(v6); else v7 = 0; if ( sub_95F910(v7, a2) ) ++v12; v8 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v3[1] + 4))(v3 + 1); v8[2] = v7; *v8 = 0; v8[1] = v3[3]; v9 = (_DWORD *)v3[3]; if ( v9 ) *v9 = v8; else v3[2] = v8; ++v3[4]; v3[3] = v8; v4 = v11; ++v5; } while ( v5 < v11 ); } return v12 == v4; } //----- (009610B0) -------------------------------------------------------- void *__thiscall sub_9610B0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4A970: using guessed type void *NiTListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; //----- (009610E0) -------------------------------------------------------- int __thiscall sub_9610E0(_DWORD *this, const char *a2) { int v2; // eax _DWORD *v3; // eax int result; // eax v2 = this[5]; this[3] = v2; if ( !v2 ) return 0; while ( 1 ) { v3 = (_DWORD *)this[3]; this[3] = *v3; result = v3[2]; if ( result ) { if ( !strcmp(*(const char **)(result + 8), a2) ) break; } if ( !this[3] ) return 0; } return result; } //----- (00961140) -------------------------------------------------------- _DWORD *__thiscall sub_961140(_DWORD **this, int a2, const char *a3) { _DWORD **v3; // esi int v4; // eax _DWORD *result; // eax _DWORD *v6; // eax _DWORD **v7; // eax if ( a2 == 2 ) { v3 = this + 8; v4 = (int)(this + 9); } else { if ( a2 != 8 ) return 0; v3 = this + 13; v4 = (int)(this + 14); } if ( !v3 || !v4 ) return 0; v6 = *(_DWORD **)(v4 + 4); *v3 = v6; if ( !v6 ) return 0; while ( 1 ) { v7 = (_DWORD **)*v3; *v3 = (_DWORD *)**v3; result = v7[2]; if ( result ) { if ( !strcmp((const char *)result[2], a3) ) break; } if ( !*v3 ) return 0; } return result; } //----- (009611D0) -------------------------------------------------------- signed int __thiscall sub_9611D0(_DWORD *this, const char *a2) { int v2; // edx signed int result; // eax _DWORD *v4; // edx int v5; // edx v2 = this[5]; result = 0; this[3] = v2; if ( !v2 ) return -1; while ( 1 ) { v4 = (_DWORD *)this[3]; this[3] = *v4; v5 = v4[2]; if ( v5 ) { if ( !strcmp(*(const char **)(v5 + 8), a2) ) break; } ++result; if ( !this[3] ) return -1; } return result; } //----- (00961240) -------------------------------------------------------- void **__stdcall sub_961240(char *a1, int a2, int a3, int a4, int a5, char *a6, rsize_t DstSize, int a8, void *Src, char a10) { void **v10; // eax void **v11; // esi void *v12; // ST14_4 void *v13; // eax v10 = (void **)operator new(0x34u); v11 = v10; if ( !v10 ) return 0; sub_932170(v10); *v11 = &NSBConstantMap::NSBCM_Entry::`vftable'; sub_9321D0(v11, a1); v11[4] = (void *)a2; v11[5] = (void *)a3; v11[7] = (void *)a5; v11[6] = (void *)a4; sub_932270(v11, a6); v11[9] = (void *)DstSize; v11[10] = (void *)a8; if ( a10 ) { v12 = v11[11]; *((_BYTE *)v11 + 48) = 1; operator delete(v12); v13 = operator new(DstSize); v11[11] = v13; memcpy_s(v13, DstSize, Src, DstSize); } else { v11[11] = Src; *((_BYTE *)v11 + 48) = 0; } return v11; } // A4A980: using guessed type void *NSBConstantMap::NSBCM_Entry::`vftable'; //----- (009612F0) -------------------------------------------------------- bool __stdcall sub_9612F0(int a1, _DWORD *a2, int a3, int a4) { int v4; // eax unsigned int v5; // edx int v6; // eax int v7; // eax int v8; // edi bool result; // al _DWORD *v10; // ebx unsigned int v11; // eax int v12; // ecx const char *v13; // edx int v14; // edx int v15; // [esp-2Ch] [ebp-C8h] int v16; // [esp-28h] [ebp-C4h] int v17; // [esp-24h] [ebp-C0h] int v18; // [esp-20h] [ebp-BCh] const char *v19; // [esp-1Ch] [ebp-B8h] int v20; // [esp-18h] [ebp-B4h] float v21; // [esp-14h] [ebp-B0h] int v22; // [esp-10h] [ebp-ACh] int v23; // [esp-Ch] [ebp-A8h] signed int v24; // [esp-8h] [ebp-A4h] const char *v25; // [esp+8h] [ebp-94h] int v26; // [esp+Ch] [ebp-90h] int v27; // [esp+10h] [ebp-8Ch] float v28; // [esp+14h] [ebp-88h] float v29; // [esp+18h] [ebp-84h] float v30; // [esp+1Ch] [ebp-80h] float v31; // [esp+20h] [ebp-7Ch] int v32; // [esp+24h] [ebp-78h] char *v33; // [esp+28h] [ebp-74h] int v34; // [esp+2Ch] [ebp-70h] char v35; // [esp+33h] [ebp-69h] float v36; // [esp+34h] [ebp-68h] float v37; // [esp+38h] [ebp-64h] float v38; // [esp+3Ch] [ebp-60h] float v39; // [esp+40h] [ebp-5Ch] float v40; // [esp+44h] [ebp-58h] float v41; // [esp+48h] [ebp-54h] float v42; // [esp+4Ch] [ebp-50h] float v43; // [esp+50h] [ebp-4Ch] float v44; // [esp+54h] [ebp-48h] float v45; // [esp+58h] [ebp-44h] float v46; // [esp+5Ch] [ebp-40h] float v47; // [esp+60h] [ebp-3Ch] float v48; // [esp+64h] [ebp-38h] float v49; // [esp+68h] [ebp-34h] float v50; // [esp+6Ch] [ebp-30h] float v51; // [esp+70h] [ebp-2Ch] float v52; // [esp+74h] [ebp-28h] float v53; // [esp+78h] [ebp-24h] if ( !a1 || !a3 || !a4 ) return 0; v4 = *(_DWORD *)(a3 + 16); v5 = *(_DWORD *)(a3 + 16) & 0xF0000000; if ( v5 == 0x40000000 ) { v6 = sub_8B9D50(v4); sub_931760(*(char **)(a3 + 8), v6, *(_DWORD *)(a3 + 36), *(void **)(a3 + 44)); sub_863360(); v7 = sub_931160(*(_DWORD *)(a3 + 8)); v8 = (*(int (__thiscall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)a4 + 4))( a4, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 16), 0, *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 36), *(_DWORD *)(v7 + 24), 0); sub_931800(*(_DWORD *)(a3 + 8)); result = v8 == 0; } else { if ( v5 == 805306368 ) { v10 = (_DWORD *)sub_956940(a2, *(const char **)(a3 + 8)); v32 = (int)&v45; v33 = (char *)&v45; v34 = 4; switch ( sub_6A25F0(v10) ) { case 1: sub_956ED0((int)v10, &v35); v33 = &v35; v11 = 1; goto LABEL_22; case 2: case 11: sub_956EF0(v10, &v25); v33 = (char *)v25; if ( v25 && *v25 ) { v11 = strlen(v25); v34 = 1; } else { v11 = 0; v34 = 1; } break; case 3: sub_956F10(v10, &v27); v33 = (char *)&v27; v11 = 4; goto LABEL_22; case 4: sub_956F30((int)v10, &v45); v11 = 4; break; case 5: sub_956F50((int)v10, &v30); v45 = v30; v11 = 8; v46 = v31; break; case 6: sub_956F80((int)v10, &v29); v45 = v29; v11 = 12; v46 = v30; v47 = v31; break; case 7: sub_956FB0((int)v10, (float **)&v32); v11 = 16; break; case 8: sub_957640((int)v10, &v36); v45 = v36; v11 = 36; v46 = v37; v47 = v38; v48 = v39; v49 = v40; v50 = v41; v51 = v42; v52 = v43; v53 = v44; break; case 9: sub_957690(v10, (int)&v32, 0x40u); v11 = 64; break; case 10: v28 = 0.0; v29 = 0.0; v30 = 0.0; v31 = 0.0; sub_956FF0((int)v10, &v28); v45 = v28; v11 = 16; v46 = v29; v47 = v30; v48 = v31; break; default: v11 = 0; v33 = 0; LABEL_22: v34 = v11; break; } v12 = *(_DWORD *)(a3 + 32); v13 = *(const char **)(a3 + 28); v24 = 1; v23 = (int)v33; v26 = *(_DWORD *)(a3 + 24); v22 = v34; v21 = *(float *)&v11; v20 = v12; v19 = v13; v18 = v26; v17 = 0; v16 = *(_DWORD *)(a3 + 16); v31 = *(float *)(a3 + 8); v15 = LODWORD(v31); } else { v14 = *(_DWORD *)(a3 + 40); v24 = 0; v23 = *(_DWORD *)(a3 + 44); v31 = *(float *)(a3 + 36); v22 = v14; v26 = *(_DWORD *)(a3 + 32); v21 = v31; v20 = v26; v25 = *(const char **)(a3 + 28); v19 = v25; v27 = *(_DWORD *)(a3 + 24); v18 = v27; v17 = *(_DWORD *)(a3 + 20); v16 = v4; v32 = *(_DWORD *)(a3 + 8); v15 = v32; } result = (*(int (__thiscall **)(int, int, int, int, int, const char *, int, float, int, int, signed int))(*(_DWORD *)a4 + 4))( a4, v15, v16, v17, v18, v19, v20, COERCE_FLOAT(LODWORD(v21)), v22, v23, v24) == 0; } return result; } //----- (00961690) -------------------------------------------------------- bool __stdcall sub_961690(int a1, _DWORD *a2, int a3, int a4) { int v4; // eax unsigned int v5; // edx int v6; // eax int v7; // eax int v8; // edi bool result; // al _DWORD *v10; // ebx unsigned int v11; // eax int v12; // [esp+8h] [ebp-98h] int v13; // [esp+14h] [ebp-8Ch] const char *v14; // [esp+18h] [ebp-88h] float v15; // [esp+1Ch] [ebp-84h] float v16; // [esp+20h] [ebp-80h] float v17; // [esp+24h] [ebp-7Ch] float v18; // [esp+28h] [ebp-78h] char *v19; // [esp+2Ch] [ebp-74h] unsigned int v20; // [esp+30h] [ebp-70h] char v21; // [esp+37h] [ebp-69h] float v22; // [esp+38h] [ebp-68h] float v23; // [esp+3Ch] [ebp-64h] float v24; // [esp+40h] [ebp-60h] float v25; // [esp+44h] [ebp-5Ch] float v26; // [esp+48h] [ebp-58h] float v27; // [esp+4Ch] [ebp-54h] float v28; // [esp+50h] [ebp-50h] float v29; // [esp+54h] [ebp-4Ch] float v30; // [esp+58h] [ebp-48h] float v31; // [esp+5Ch] [ebp-44h] float v32; // [esp+60h] [ebp-40h] float v33; // [esp+64h] [ebp-3Ch] float v34; // [esp+68h] [ebp-38h] float v35; // [esp+6Ch] [ebp-34h] float v36; // [esp+70h] [ebp-30h] float v37; // [esp+74h] [ebp-2Ch] float v38; // [esp+78h] [ebp-28h] float v39; // [esp+7Ch] [ebp-24h] if ( !a1 || !a3 || !a4 ) return 0; v4 = *(_DWORD *)(a3 + 16); v5 = *(_DWORD *)(a3 + 16) & 0xF0000000; if ( v5 == 0x40000000 ) { v6 = sub_8B9D50(v4); sub_931760(*(char **)(a3 + 8), v6, *(_DWORD *)(a3 + 36), *(void **)(a3 + 44)); sub_863360(); v7 = sub_931160(*(_DWORD *)(a3 + 8)); v8 = (*(int (__thiscall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)a4 + 4))( a4, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 16), 0, *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 36), *(_DWORD *)(v7 + 24), 0); sub_931800(*(_DWORD *)(a3 + 8)); result = v8 == 0; } else if ( v5 == 805306368 ) { v10 = (_DWORD *)sub_956940(a2, *(const char **)(a3 + 8)); v12 = (int)&v31; v19 = (char *)&v31; v20 = 4; switch ( sub_6A25F0(v10) ) { case 1: sub_956ED0((int)v10, &v21); v19 = &v21; v11 = 1; goto LABEL_22; case 2: case 11: sub_956EF0(v10, &v14); v19 = (char *)v14; if ( v14 && *v14 ) { v11 = strlen(v14); v20 = 1; } else { v11 = 0; v20 = 1; } break; case 3: sub_956F10(v10, &v13); v19 = (char *)&v13; v11 = 4; goto LABEL_22; case 4: sub_956F30((int)v10, &v31); v11 = 4; break; case 5: sub_956F50((int)v10, &v17); v31 = v17; v11 = 8; v32 = v18; break; case 6: sub_956F80((int)v10, &v16); v31 = v16; v11 = 12; v32 = v17; v33 = v18; break; case 7: sub_956FB0((int)v10, (float **)&v12); v11 = 16; break; case 8: sub_957640((int)v10, &v22); v31 = v22; v11 = 36; v32 = v23; v33 = v24; v34 = v25; v35 = v26; v36 = v27; v37 = v28; v38 = v29; v39 = v30; break; case 9: sub_957690(v10, (int)&v12, 0x40u); v11 = 64; break; case 10: v15 = 0.0; v16 = 0.0; v17 = 0.0; v18 = 0.0; sub_956FF0((int)v10, &v15); v31 = v15; v11 = 16; v32 = v16; v33 = v17; v34 = v18; break; default: v11 = 0; v19 = 0; LABEL_22: v20 = v11; break; } result = (*(int (__thiscall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, unsigned int, unsigned int, char *, signed int))(*(_DWORD *)a4 + 4))( a4, *(_DWORD *)(a3 + 8), *(_DWORD *)(a3 + 16), *(_DWORD *)(a3 + 20), *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), v11, v20, v19, 1) == 0; } else { result = (*(int (__thiscall **)(int, _DWORD, int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)a4 + 4))( a4, *(_DWORD *)(a3 + 8), v4, *(_DWORD *)(a3 + 20), *(_DWORD *)(a3 + 24), *(_DWORD *)(a3 + 28), *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40), *(_DWORD *)(a3 + 44), 0) == 0; } return result; } //----- (00961A60) -------------------------------------------------------- void **__thiscall sub_961A60(void *this, char a2) { void **v2; // esi void *v3; // ST04_4 v2 = (void **)this; v3 = (void *)*((_DWORD *)this + 2); *(_DWORD *)this = &NiD3DShaderConstantMapEntry::`vftable'; operator delete(v3); operator delete(v2[8]); if ( *((_BYTE *)v2 + 48) ) operator delete(v2[11]); *v2 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); if ( a2 & 1 ) operator delete(v2); return v2; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A469FC: using guessed type void *NiD3DShaderConstantMapEntry::`vftable'; //----- (00961AC0) -------------------------------------------------------- int __thiscall sub_961AC0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; return result; } // A4A970: using guessed type void *NiTListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; // A4A988: using guessed type void *NiTPointerListBase,NSBConstantMap::NSBCM_Entry *>::`vftable'; //----- (00961B00) -------------------------------------------------------- void *__thiscall sub_961B00(void *this, char a2) { void *v2; // esi v2 = this; sub_961AC0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00961B30) -------------------------------------------------------- char __thiscall sub_961B30(const char **this, signed int a2) { signed int v2; // esi const char **v3; // edi char result; // al void (__cdecl *v5)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v6)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v7)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v8)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v9)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v10)(signed int, const char **, signed int, signed int *, signed int); // eax v2 = a2; v3 = this; result = sub_92C1E0(a2, this[2]); if ( result ) { v5 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v3 + 4, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v3 + 5, 4, &a2, 1); v7 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v7(v2, v3 + 6, 4, &a2, 1); v8 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v8(v2, v3 + 7, 4, &a2, 1); result = sub_92C1E0(v2, v3[8]); if ( result ) { v9 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v9(v2, v3 + 9, 4, &a2, 1); v10 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v10(v2, v3 + 10, 4, &a2, 1); result = sub_92C180(v2, (int)v3[11], (int)v3[9]) != 0; } } return result; } //----- (00961C10) -------------------------------------------------------- char __thiscall sub_961C10(void **this, int a2) { int v2; // esi void **v3; // edi char result; // al void (__cdecl *v5)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v8)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v9)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v10)(int, void **, signed int, int *, signed int); // eax int v11; // [esp+8h] [ebp-8h] int v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v12 = 0; result = sub_92C250(a2, this + 2, &v12); if ( result ) { v5 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v5(v2, v3 + 4, 4, &a2, 1); v6 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v6(v2, v3 + 5, 4, &a2, 1); v7 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v7(v2, v3 + 6, 4, &a2, 1); v8 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v8(v2, v3 + 7, 4, &a2, 1); if ( (dword_AC9068 == 65537 || sub_92C250(v2, v3 + 8, &v12)) && (v9 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4), a2 = 4, v9(v2, v3 + 9, 4, &a2, 1), v10 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4), a2 = 4, v10(v2, v3 + 10, 4, &a2, 1), v11 = 0, sub_92C2E0(v2, v3 + 11, (size_t *)&v11)) ) { *((_BYTE *)v3 + 48) = 1; result = 1; } else { result = 0; } } return result; } // AC9068: using guessed type int dword_AC9068; //----- (00961D20) -------------------------------------------------------- LONG __thiscall sub_961D20(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void (__thiscall ***v4)(_DWORD, signed int); // eax _DWORD *v5; // edi _DWORD *v6; // ST00_4 int v7; // eax _DWORD *v8; // eax void (__thiscall ***v9)(_DWORD, signed int); // eax _DWORD *v10; // edi _DWORD *v11; // ST00_4 int v12; // eax _DWORD *v13; // eax void (__thiscall ***v14)(_DWORD, signed int); // eax _DWORD *v15; // ebx _DWORD *v16; // ST00_4 v1 = this; v2 = this[5]; *this = &NSBConstantMap::`vftable'; this[3] = v2; if ( v2 ) { do { v3 = (_DWORD *)v1[3]; v1[3] = *v3; v4 = (void (__thiscall ***)(_DWORD, signed int))v3[2]; if ( v4 ) (**v4)(v4, 1); } while ( v1[3] ); } v5 = (_DWORD *)v1[5]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[4] + 8))(v1 + 4, v6); } v1[7] = 0; v1[5] = 0; v1[6] = 0; v7 = v1[10]; v1[8] = v7; while ( v1[8] ) { v8 = (_DWORD *)v1[8]; v1[8] = *v8; v9 = (void (__thiscall ***)(_DWORD, signed int))v8[2]; if ( v9 ) (**v9)(v9, 1); } v10 = (_DWORD *)v1[10]; while ( v10 ) { v11 = v10; v10 = (_DWORD *)*v10; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[9] + 8))(v1 + 9, v11); } v1[12] = 0; v1[10] = 0; v1[11] = 0; v12 = v1[15]; v1[13] = v12; while ( v1[13] ) { v13 = (_DWORD *)v1[13]; v1[13] = *v13; v14 = (void (__thiscall ***)(_DWORD, signed int))v13[2]; if ( v14 ) (**v14)(v14, 1); } v15 = (_DWORD *)v1[15]; while ( v15 ) { v16 = v15; v15 = (_DWORD *)*v15; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[14] + 8))(v1 + 14, v16); } v1[17] = 0; v1[15] = 0; v1[16] = 0; sub_961AC0(v1 + 14); sub_961AC0(v1 + 9); sub_961AC0(v1 + 4); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A9A8: using guessed type void *NSBConstantMap::`vftable'; //----- (00961E60) -------------------------------------------------------- char __thiscall sub_961E60(_DWORD *this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // esi int v12; // eax void **v14; // edi _DWORD *v15; // eax _DWORD *v16; // ecx v11 = this; v12 = sub_9610E0(this, a2); if ( v12 ) { sub_863460( 1, 1, "* ERROR: NSBConstantMap::AddEntry\n Failed to add entry %s\n It already exists!\n", *(_DWORD *)(v12 + 8)); return 0; } v14 = sub_961240(a2, a3, a4, a5, a6, a7, DstSize, a9, Src, a11); if ( !v14 ) return 0; v15 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v11[4] + 4))(v11 + 4); v15[2] = v14; *v15 = 0; v15[1] = v11[6]; v16 = (_DWORD *)v11[6]; if ( v16 ) { *v16 = v15; ++v11[7]; } else { ++v11[7]; v11[5] = v15; } v11[6] = v15; return 1; } //----- (00961F10) -------------------------------------------------------- _DWORD *__thiscall sub_961F10(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v5; // eax _DWORD *v6; // eax int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // [esp+8h] [ebp-4h] v3 = this; if ( !a2 ) return 0; if ( this[2] != 1 ) return 0; if ( !(this[7] + this[12] + this[17]) ) return 0; v5 = operator new(0x3Cu); if ( !v5 ) return 0; v13 = sub_96EAA0(v5, a2); if ( !v13 ) return 0; v6 = (_DWORD *)v3[5]; v7 = 0; v3[3] = v6; if ( v6 ) { v3[3] = *v6; v7 = v6[2]; } while ( v7 ) { if ( !sub_9612F0(a2, a3, v7, (int)v13) ) sub_863460( 1, 1, "* ERROR: NSBConstantMap::GetD3DSCM_Pixel\n Failed processing of entry %s\n", *(_DWORD *)(v7 + 8)); v7 = 0; if ( v3[3] ) { v8 = (_DWORD *)v3[3]; v3[3] = *v8; v7 = v8[2]; } } v9 = v3 + 8; v10 = 0; if ( v3 != (_DWORD *)-32 && v3 != (_DWORD *)-36 ) { v11 = (_DWORD *)v3[10]; *v9 = v11; if ( v11 ) { *v9 = *v11; v10 = v11[2]; } while ( v10 ) { if ( !sub_9612F0(a2, a3, v10, (int)v13) ) sub_863460( 1, 1, "* ERROR: NSBConstantMap::GetD3DSCM_Pixel\n Failed processing of entry %s\n", *(_DWORD *)(v10 + 8)); v10 = 0; if ( v3 == (_DWORD *)-32 || v3 == (_DWORD *)-36 ) break; v12 = (_DWORD *)*v9; if ( *v9 ) { *v9 = *v12; v10 = v12[2]; } } } return v13; } //----- (00962030) -------------------------------------------------------- _DWORD *__thiscall sub_962030(_DWORD *this, int a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *v5; // eax _DWORD *v6; // eax int v7; // edi _DWORD *v8; // eax _DWORD *v9; // ebx int v10; // edi _DWORD *v11; // eax _DWORD *v12; // eax _DWORD *v13; // [esp+8h] [ebp-4h] v3 = this; if ( !a2 ) return 0; if ( this[2] != 2 ) return 0; if ( !(this[7] + this[12] + this[17]) ) return 0; v5 = operator new(0x3Cu); if ( !v5 ) return 0; v13 = sub_930C00(v5, a2); if ( !v13 ) return 0; v6 = (_DWORD *)v3[5]; v7 = 0; v3[3] = v6; if ( v6 ) { v3[3] = *v6; v7 = v6[2]; } while ( v7 ) { if ( !sub_961690(a2, a3, v7, (int)v13) ) sub_863460( 1, 1, "* ERROR: NSBConstantMap::GetD3DSCM_Vertex\n Failed processing of entry %s\n", *(_DWORD *)(v7 + 8)); v7 = 0; if ( v3[3] ) { v8 = (_DWORD *)v3[3]; v3[3] = *v8; v7 = v8[2]; } } v9 = v3 + 8; v10 = 0; if ( v3 != (_DWORD *)-32 && v3 != (_DWORD *)-36 ) { v11 = (_DWORD *)v3[10]; *v9 = v11; if ( v11 ) { *v9 = *v11; v10 = v11[2]; } while ( v10 ) { if ( !sub_961690(a2, a3, v10, (int)v13) ) sub_863460( 1, 1, "* ERROR: NSBConstantMap::GetD3DSCM_Vertex\n Failed processing of entry %s\n", *(_DWORD *)(v10 + 8)); v10 = 0; if ( v3 == (_DWORD *)-32 || v3 == (_DWORD *)-36 ) break; v12 = (_DWORD *)*v9; if ( *v9 ) { *v9 = *v12; v10 = v12[2]; } } } return v13; } //----- (00962150) -------------------------------------------------------- bool __thiscall sub_962150(char *this, int a2) { void (__cdecl *v2)(int, char *, signed int, int *, signed int); // edx char *v3; // esi int v5; // [esp+8h] [ebp-4h] v2 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(a2 + 8); v3 = this; v5 = 4; v2(a2, this + 8, 4, &v5, 1); return (*(unsigned __int8 (__thiscall **)(char *, int))(*(_DWORD *)v3 + 28))(v3, a2) != 0; } //----- (00962190) -------------------------------------------------------- bool __thiscall sub_962190(char *this, int a2) { void (__cdecl *v2)(int, char *, signed int, int *, signed int); // edx char *v3; // esi int v5; // [esp+8h] [ebp-4h] v2 = *(void (__cdecl **)(int, char *, signed int, int *, signed int))(a2 + 4); v3 = this; v5 = 4; v2(a2, this + 8, 4, &v5, 1); return (*(unsigned __int8 (__thiscall **)(char *, int))(*(_DWORD *)v3 + 32))(v3, a2) != 0; } //----- (009621D0) -------------------------------------------------------- char __thiscall sub_9621D0(_DWORD **this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // esi char result; // al void **v13; // edi _DWORD *v14; // eax _DWORD *v15; // ecx v11 = this; if ( sub_961140(this, 2, a2) ) return 0; v13 = sub_961240(a2, a3, a4, a5, a6, a7, DstSize, a9, Src, a11); if ( !v13 ) return 0; v14 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v11[9] + 4))(v11 + 9); v14[2] = v13; *v14 = 0; v14[1] = v11[11]; v15 = (_DWORD *)v11[11]; if ( v15 ) *v15 = v14; else v11[10] = v14; v11[11] = v14; result = 1; ++v11[12]; return result; } //----- (00962270) -------------------------------------------------------- char __thiscall sub_962270(_DWORD **this, char *a2, int a3, int a4, int a5, int a6, char *a7, rsize_t DstSize, int a9, void *Src, char a11) { _DWORD *v11; // esi char result; // al void **v13; // edi _DWORD *v14; // eax _DWORD *v15; // ecx v11 = this; if ( sub_961140(this, 8, a2) ) return 0; v13 = sub_961240(a2, a3, a4, a5, a6, a7, DstSize, a9, Src, a11); if ( !v13 ) return 0; v14 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v11[14] + 4))(v11 + 14); v14[2] = v13; *v14 = 0; v14[1] = v11[16]; v15 = (_DWORD *)v11[16]; if ( v15 ) *v15 = v14; else v11[15] = v14; v11[16] = v14; result = 1; ++v11[17]; return result; } //----- (00962310) -------------------------------------------------------- bool __thiscall sub_962310(_DWORD *this, signed int a2) { signed int v2; // ebx _DWORD *v3; // esi void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // eax _DWORD *v5; // eax int v6; // edi const char **v7; // ecx const char **v8; // eax _DWORD *v9; // eax void (__cdecl *v10)(signed int, int *, signed int, signed int *, signed int); // eax _DWORD *v11; // edi const char **v12; // ecx _DWORD *v13; // eax _DWORD *v14; // eax void (__cdecl *v15)(signed int, int *, signed int, signed int *, signed int); // ecx _DWORD *v16; // edi const char **v17; // ecx int v18; // esi _DWORD *v19; // eax _DWORD *v20; // eax int v22; // [esp+Ch] [ebp-8h] int v23; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v23 = this[7]; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v22 = 4; v4(a2, &v23, 4, &v22, 1); v5 = (_DWORD *)v3[5]; v6 = 0; v7 = 0; v3[3] = v5; if ( v5 ) { v3[3] = *v5; v7 = (const char **)v5[2]; } if ( v7 ) { while ( sub_961B30(v7, v2) ) { v8 = 0; ++v6; if ( v3[3] ) { v9 = (_DWORD *)v3[3]; v3[3] = *v9; v8 = (const char **)v9[2]; } v7 = v8; if ( !v8 ) goto LABEL_8; } } else { LABEL_8: if ( v6 == v23 ) { v23 = v3[12]; v10 = *(void (__cdecl **)(signed int, int *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v10(v2, &v23, 4, &a2, 1); v11 = v3 + 8; v12 = 0; a2 = 0; if ( v3 == (_DWORD *)-32 || v3 == (_DWORD *)-36 ) goto LABEL_20; v13 = (_DWORD *)v3[10]; *v11 = v13; if ( v13 ) { *v11 = *v13; v12 = (const char **)v13[2]; } if ( v12 ) { while ( sub_961B30(v12, v2) ) { ++a2; v12 = 0; if ( v3 != (_DWORD *)-32 && v3 != (_DWORD *)-36 ) { v14 = (_DWORD *)*v11; if ( *v11 ) { *v11 = *v14; v12 = (const char **)v14[2]; } if ( v12 ) continue; } goto LABEL_20; } } else { LABEL_20: if ( a2 == v23 ) { v23 = v3[17]; v15 = *(void (__cdecl **)(signed int, int *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v15(v2, &v23, 4, &a2, 1); v16 = v3 + 13; v17 = 0; v18 = (int)(v3 + 14); a2 = 0; if ( !v16 || !v18 ) return a2 == v23; v19 = *(_DWORD **)(v18 + 4); *v16 = v19; if ( v19 ) { *v16 = *v19; v17 = (const char **)v19[2]; } if ( !v17 ) return a2 == v23; while ( sub_961B30(v17, v2) ) { ++a2; v17 = 0; if ( v16 && v18 ) { v20 = (_DWORD *)*v16; if ( *v16 ) { *v16 = *v20; v17 = (const char **)v20[2]; } if ( v17 ) continue; } return a2 == v23; } } } } } return 0; } //----- (009624B0) -------------------------------------------------------- char __thiscall sub_9624B0(_DWORD *this, int a2) { int v2; // edi void (__cdecl *v3)(int, unsigned int *, signed int, void ***, signed int); // edx void **v4; // eax void **v5; // esi _DWORD *v6; // esi _DWORD *v7; // eax _DWORD *v8; // ecx void (__cdecl *v9)(int, unsigned int *, signed int, void ***, signed int); // edx int v10; // esi void (__cdecl *v11)(int, unsigned int *, signed int, void ***, signed int); // edx _DWORD *v12; // eax _DWORD *v13; // esi void **v14; // edi char result; // al _DWORD *v16; // esi _DWORD *v17; // eax _DWORD *v18; // ecx void (__cdecl *v19)(int, unsigned int *, signed int, void ***, signed int); // ecx int v20; // esi _DWORD *v21; // eax _DWORD *v22; // esi void **v23; // edi _DWORD *v24; // esi _DWORD *v25; // eax _DWORD *v26; // ecx void **v27; // [esp+Ch] [ebp-44h] int v28; // [esp+10h] [ebp-40h] void *v29; // [esp+14h] [ebp-3Ch] int v30; // [esp+1Ch] [ebp-34h] int v31; // [esp+20h] [ebp-30h] int v32; // [esp+24h] [ebp-2Ch] int v33; // [esp+28h] [ebp-28h] void *v34; // [esp+2Ch] [ebp-24h] int v35; // [esp+30h] [ebp-20h] int v36; // [esp+34h] [ebp-1Ch] void *v37; // [esp+38h] [ebp-18h] char v38; // [esp+3Ch] [ebp-14h] _DWORD *v39; // [esp+40h] [ebp-10h] void **v40; // [esp+44h] [ebp-Ch] int v41; // [esp+48h] [ebp-8h] unsigned int v42; // [esp+4Ch] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(int, unsigned int *, signed int, void ***, signed int))(a2 + 4); v39 = this; v40 = (void **)4; v3(a2, &v42, 4, &v40, 1); v41 = 0; if ( v42 ) { do { v4 = (void **)operator new(0x34u); v5 = v4; if ( v4 ) { *v4 = &NiRefObject::`vftable'; v4[1] = 0; InterlockedIncrement(&Addend); *v5 = &NiD3DShaderConstantMapEntry::`vftable'; v5[2] = 0; v5[4] = 0; v5[5] = 0; v5[6] = 0; v5[7] = 0; v5[8] = 0; v5[9] = 0; v5[10] = 0; v5[11] = 0; *((_BYTE *)v5 + 48) = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); *v5 = &NSBConstantMap::NSBCM_Entry::`vftable'; v40 = v5; } else { v40 = 0; } if ( !sub_961C10(v40, v2) ) return 0; v6 = v39; v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v39[4] + 4))(v39 + 4); v7[2] = v40; *v7 = 0; v7[1] = v6[6]; v8 = (_DWORD *)v6[6]; if ( v8 ) *v8 = v7; else v6[5] = v7; ++v6[7]; v6[6] = v7; } while ( ++v41 < v42 ); } if ( (unsigned int)dword_AC9068 < 0x10004 ) return 1; if ( (unsigned int)dword_AC9068 < 0x10008 ) { v9 = *(void (__cdecl **)(int, unsigned int *, signed int, void ***, signed int))(v2 + 4); v40 = (void **)4; v9(v2, &v42, 4, &v40, 1); v28 = 0; InterlockedIncrement(&Addend); v27 = &NiD3DShaderConstantMapEntry::`vftable'; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); v10 = 0; v27 = &NSBConstantMap::NSBCM_Entry::`vftable'; if ( v42 > 0 ) { while ( sub_961C10((void **)&v27, v2) ) { if ( ++v10 >= v42 ) goto LABEL_23; } v27 = &NiD3DShaderConstantMapEntry::`vftable'; operator delete(v29); operator delete(v34); if ( v38 ) operator delete(v37); v27 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); return 0; } LABEL_23: v27 = &NiD3DShaderConstantMapEntry::`vftable'; operator delete(v29); operator delete(v34); if ( v38 ) operator delete(v37); v27 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); } v11 = *(void (__cdecl **)(int, unsigned int *, signed int, void ***, signed int))(v2 + 4); v40 = (void **)4; v11(v2, &v42, 4, &v40, 1); v41 = 0; if ( v42 > 0 ) { while ( 1 ) { v12 = operator new(0x34u); v13 = v12; if ( v12 ) { *v12 = &NiRefObject::`vftable'; v12[1] = 0; InterlockedIncrement(&Addend); *v13 = &NiD3DShaderConstantMapEntry::`vftable'; v13[2] = 0; v13[4] = 0; v13[5] = 0; v13[6] = 0; v13[7] = 0; v13[8] = 0; v13[9] = 0; v13[10] = 0; v13[11] = 0; *((_BYTE *)v13 + 48) = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); *v13 = &NSBConstantMap::NSBCM_Entry::`vftable'; v14 = (void **)v13; } else { v14 = 0; } if ( !sub_961C10(v14, a2) ) return 0; v16 = v39; v17 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v39[9] + 4))(v39 + 9); v17[2] = v14; *v17 = 0; v17[1] = v16[11]; v18 = (_DWORD *)v16[11]; if ( v18 ) *v18 = v17; else v16[10] = v17; ++v16[12]; v16[11] = v17; if ( ++v41 >= v42 ) { v2 = a2; break; } } } v19 = *(void (__cdecl **)(int, unsigned int *, signed int, void ***, signed int))(v2 + 4); if ( (unsigned int)dword_AC9068 >= 0x10008 ) { v40 = (void **)4; v19(v2, &v42, 4, &v40, 1); v41 = 0; if ( v42 > 0 ) { while ( 1 ) { v21 = operator new(0x34u); v22 = v21; if ( v21 ) { *v21 = &NiRefObject::`vftable'; v21[1] = 0; InterlockedIncrement(&Addend); *v22 = &NiD3DShaderConstantMapEntry::`vftable'; v22[2] = 0; v22[4] = 0; v22[5] = 0; v22[6] = 0; v22[7] = 0; v22[8] = 0; v22[9] = 0; v22[10] = 0; v22[11] = 0; *((_BYTE *)v22 + 48) = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); *v22 = &NSBConstantMap::NSBCM_Entry::`vftable'; v23 = (void **)v22; } else { v23 = 0; } if ( !sub_961C10(v23, a2) ) break; v24 = v39; v25 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v39[14] + 4))(v39 + 14); v25[2] = v23; *v25 = 0; v25[1] = v24[16]; v26 = (_DWORD *)v24[16]; if ( v26 ) *v26 = v25; else v24[15] = v25; ++v24[17]; v24[16] = v25; if ( ++v41 >= v42 ) return 1; } return 0; } return 1; } a2 = 4; v19(v2, &v42, 4, (void ***)&a2, 1); v27 = &NiRefObject::`vftable'; v28 = 0; InterlockedIncrement(&Addend); v27 = &NiD3DShaderConstantMapEntry::`vftable'; v29 = 0; v30 = 0; v31 = 0; v32 = 0; v33 = 0; v34 = 0; v35 = 0; v36 = 0; v37 = 0; v38 = 0; if ( !byte_BA6F80 ) sub_92C350(); if ( !byte_BA6F81 ) sub_92C410(); v20 = 0; v27 = &NSBConstantMap::NSBCM_Entry::`vftable'; if ( v42 <= 0 ) { LABEL_52: v27 = &NiD3DShaderConstantMapEntry::`vftable'; operator delete(v29); operator delete(v34); if ( v38 ) operator delete(v37); v27 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); result = 1; } else { while ( sub_961C10((void **)&v27, v2) ) { if ( ++v20 >= v42 ) goto LABEL_52; } v27 = &NiD3DShaderConstantMapEntry::`vftable'; operator delete(v29); operator delete(v34); if ( v38 ) operator delete(v37); v27 = &NiRefObject::`vftable'; InterlockedDecrement(&Addend); result = 0; } return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A469FC: using guessed type void *NiD3DShaderConstantMapEntry::`vftable'; // A4A980: using guessed type void *NSBConstantMap::NSBCM_Entry::`vftable'; // AC9068: using guessed type int dword_AC9068; // BA6F80: using guessed type char byte_BA6F80; // BA6F81: using guessed type char byte_BA6F81; //----- (00962A00) -------------------------------------------------------- _DWORD *__thiscall sub_962A00(_DWORD *this) { _DWORD *v1; // edi _DWORD *result; // eax _DWORD *v3; // ecx _DWORD *v4; // esi _DWORD *v5; // ST00_4 _DWORD *i; // esi _DWORD *v7; // ST00_4 _DWORD *v8; // [esp+Ch] [ebp-8h] v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NSBConstantMap::`vftable'; v1[2] = 0; v1[7] = 0; v1[5] = 0; v1[6] = 0; v1[4] = &NiTPointerList::`vftable'; v1[12] = 0; v1[10] = 0; v1[11] = 0; v1[9] = &NiTPointerList::`vftable'; result = v1; v1[17] = 0; v1[15] = 0; v1[16] = 0; v1[14] = &NiTPointerList::`vftable'; v3 = (_DWORD *)v1[5]; if ( v3 ) { while ( 1 ) { v8 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[4] + 8))(v1 + 4, v3); if ( !v8 ) break; v3 = v8; } result = v1; } v1[7] = 0; v1[5] = 0; v1[6] = 0; result[8] = 0; v4 = (_DWORD *)v1[10]; if ( v4 ) { do { v5 = v4; v4 = (_DWORD *)*v4; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[9] + 8))(v1 + 9, v5); } while ( v4 ); result = v1; } v1[12] = 0; v1[10] = 0; v1[11] = 0; result[13] = 0; for ( i = (_DWORD *)result[15]; i; result = v1 ) { v7 = i; i = (_DWORD *)*i; (*(void (__stdcall **)(_DWORD *))(result[14] + 8))(v7); } result[17] = 0; result[15] = 0; result[16] = 0; return result; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4A998: using guessed type void *NiTPointerList::`vftable'; // A4A9A8: using guessed type void *NSBConstantMap::`vftable'; //----- (00962AF0) -------------------------------------------------------- void *__thiscall sub_962AF0(void *this, char a2) { void *v2; // esi v2 = this; sub_961D20(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00962B20) -------------------------------------------------------- char __thiscall sub_962B20(_DWORD **this, char a2, char *a3, int a4, int a5, int a6, int a7, char *a8, rsize_t DstSize, int a10, void *Src, char a12) { _DWORD **v12; // esi char result; // al char v14; // [esp+Fh] [ebp-1h] v12 = this; v14 = 1; if ( a2 & 2 && !sub_9621D0(this, a3, a4, a5, a6, a7, a8, DstSize, a10, Src, a12) ) v14 = 0; if ( !(a2 & 8) || (result = sub_962270(v12, a3, a4, a5, a6, a7, a8, DstSize, a10, Src, a12)) != 0 ) result = v14; return result; } //----- (00962BC0) -------------------------------------------------------- void *__thiscall sub_962BC0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBUserDefinedDataBlock *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4AACC: using guessed type void *NiTListBase,NSBUserDefinedDataBlock *>::`vftable'; //----- (00962BF0) -------------------------------------------------------- _DWORD *__thiscall sub_962BF0(void *this, char a2) { _DWORD *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 18); *(_DWORD *)this = &NSBUserDefinedDataBlock::`vftable'; operator delete(v3); sub_961D20(v2); if ( a2 & 1 ) operator delete(v2); return v2; } // A4AAEC: using guessed type void *NSBUserDefinedDataBlock::`vftable'; //----- (00962C30) -------------------------------------------------------- int __thiscall sub_962C30(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBUserDefinedDataBlock *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBUserDefinedDataBlock *>::`vftable'; return result; } // A4AACC: using guessed type void *NiTListBase,NSBUserDefinedDataBlock *>::`vftable'; // A4AADC: using guessed type void *NiTPointerListBase,NSBUserDefinedDataBlock *>::`vftable'; //----- (00962C70) -------------------------------------------------------- void *__thiscall sub_962C70(void *this, char a2) { void *v2; // esi v2 = this; sub_962C30(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00962CA0) -------------------------------------------------------- LONG __thiscall sub_962CA0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void (__stdcall ***i)(signed int); // ecx _DWORD *v4; // eax _DWORD *v5; // edi _DWORD *v6; // ST00_4 v1 = this; v2 = (_DWORD *)this[4]; *this = &NSBUserDefinedDataSet::`vftable'; this[2] = v2; if ( v2 ) { this[2] = *v2; for ( i = (void (__stdcall ***)(signed int))v2[2]; i; i = (void (__stdcall ***)(signed int))v4[2] ) { (**i)(1); if ( !v1[2] ) break; v4 = (_DWORD *)v1[2]; v1[2] = *v4; } } v5 = (_DWORD *)v1[4]; while ( v5 ) { v6 = v5; v5 = (_DWORD *)*v5; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[3] + 8))(v1 + 3, v6); } v1[6] = 0; v1[4] = 0; v1[5] = 0; sub_962C30(v1 + 3); *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4AB28: using guessed type void *NSBUserDefinedDataSet::`vftable'; //----- (00962D20) -------------------------------------------------------- int __thiscall sub_962D20(_DWORD *this, char *Src, char a3) { _DWORD *v3; // esi int v4; // edi _DWORD *v5; // eax _DWORD *v6; // esi int v7; // edi int result; // eax _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v11; // [esp+Ch] [ebp-4h] v3 = (_DWORD *)this[4]; v11 = this; if ( v3 ) { while ( 1 ) { v4 = v3[2]; v3 = (_DWORD *)*v3; if ( v4 ) { if ( !_stricmp(*(const char **)(v4 + 72), Src) ) break; } if ( !v3 ) goto LABEL_5; } if ( a3 ) sub_863460( 1, 1, "* WARNING: NSBUserDefinedDataSet::GetBlock\n" " Block %s already in set\n" " Create was true - POTENTIAL OVERWRITE ISSUE!\n", Src); result = v4; } else { LABEL_5: if ( a3 ) { v5 = operator new(0x4Cu); v6 = v5; if ( v5 ) { sub_962A00(v5); *v6 = &NSBUserDefinedDataBlock::`vftable'; v6[18] = 0; sub_92C100((int)(v6 + 18), 0, Src); v7 = (int)v6; } else { v7 = 0; } v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v11[3] + 4))(v11 + 3); v9[2] = v7; *v9 = 0; v9[1] = v11[5]; v10 = (_DWORD *)v11[5]; if ( v10 ) { *v10 = v9; ++v11[6]; } else { ++v11[6]; v11[4] = v9; } v11[5] = v9; result = v7; } else { result = 0; } } return result; } // A4AAEC: using guessed type void *NSBUserDefinedDataBlock::`vftable'; //----- (00962E10) -------------------------------------------------------- char __thiscall sub_962E10(_DWORD *this, int a2) { _DWORD *v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // eax _DWORD *v4; // eax _DWORD *v5; // edi _DWORD *v6; // eax int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] v2 = this; v8 = this[6]; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 8); v9 = 4; v3(a2, &v8, 4, &v9, 1); v4 = (_DWORD *)v2[4]; v2[2] = v4; if ( !v4 ) return 1; v2[2] = *v4; v5 = (_DWORD *)v4[2]; if ( !v5 ) return 1; while ( (*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v5 + 20))(v5, a2) ) { if ( v2[2] ) { v6 = (_DWORD *)v2[2]; v2[2] = *v6; v5 = (_DWORD *)v6[2]; if ( v5 ) continue; } return 1; } sub_863460(1, 1, "* ERROR: NSBUserDefinedDataSet::SaveBinary\n Failed to write block %s!\n", v5[18]); return 0; } //----- (00962EB0) -------------------------------------------------------- _DWORD *__thiscall sub_962EB0(_DWORD *this) { _DWORD *v1; // ebx _DWORD *v2; // edi _DWORD *v3; // ST00_4 v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &NSBUserDefinedDataSet::`vftable'; v1[6] = 0; v1[4] = 0; v1[5] = 0; v1[3] = &NiTPointerList::`vftable'; v1[2] = 0; v2 = (_DWORD *)v1[4]; while ( v2 ) { v3 = v2; v2 = (_DWORD *)*v2; (*(void (__thiscall **)(_DWORD *, _DWORD *))(v1[3] + 8))(v1 + 3, v3); } v1[6] = 0; v1[4] = 0; v1[5] = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4AB18: using guessed type void *NiTPointerList::`vftable'; // A4AB28: using guessed type void *NSBUserDefinedDataSet::`vftable'; //----- (00962F20) -------------------------------------------------------- void *__thiscall sub_962F20(void *this, char a2) { void *v2; // esi v2 = this; sub_962CA0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00962F50) -------------------------------------------------------- char __thiscall sub_962F50(_DWORD *this, int a2) { void (__cdecl *v2)(int, unsigned int *, signed int, int *, signed int); // edx unsigned int v3; // ebx _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // edi _DWORD *v7; // eax _DWORD *v8; // ecx _DWORD *v10; // [esp+Ch] [ebp-Ch] int v11; // [esp+10h] [ebp-8h] unsigned int v12; // [esp+14h] [ebp-4h] v2 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v10 = this; v11 = 4; v2(a2, &v12, 4, &v11, 1); v3 = 0; if ( !v12 ) return 1; while ( 1 ) { v4 = operator new(0x4Cu); v5 = v4; if ( v4 ) { sub_962A00(v4); *v5 = &NSBUserDefinedDataBlock::`vftable'; v5[18] = 0; sub_92C100((int)(v5 + 18), 0, 0); v6 = v5; } else { v6 = 0; } if ( !(*(unsigned __int8 (__thiscall **)(_DWORD *, int))(*v6 + 24))(v6, a2) ) break; v7 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v10[3] + 4))(v10 + 3); v7[2] = v6; *v7 = 0; v7[1] = v10[5]; v8 = (_DWORD *)v10[5]; if ( v8 ) *v8 = v7; else v10[4] = v7; ++v10[6]; ++v3; v10[5] = v7; if ( v3 >= v12 ) return 1; } sub_863460(1, 0, "* ERROR: NSBUserDefinedDataSet::LoadBinary\n Failed to read block %2d of %2d\n", v3, v12); return 0; } // A4AAEC: using guessed type void *NSBUserDefinedDataBlock::`vftable'; //----- (00963040) -------------------------------------------------------- rsize_t __thiscall sub_963040(void *this, char *Src) { return sub_92C100((int)this + 4, 0, Src); } //----- (00963060) -------------------------------------------------------- _DWORD *__thiscall sub_963060(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = this; if ( !this[4] ) { v2 = operator new(0x28u); if ( v2 ) { result = sub_965010(v2); v1[4] = result; return result; } v1[4] = 0; } return (_DWORD *)v1[4]; } //----- (00963090) -------------------------------------------------------- _DWORD *__thiscall sub_963090(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = this; if ( !this[7] ) { v2 = operator new(0x14u); if ( v2 ) { result = sub_9680D0(v2); v1[7] = result; return result; } v1[7] = 0; } return (_DWORD *)v1[7]; } //----- (009630C0) -------------------------------------------------------- void *__thiscall sub_9630C0(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4AC5C: using guessed type void *NiTArray::`vftable'; //----- (009630F0) -------------------------------------------------------- _DWORD *__thiscall sub_9630F0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // ecx unsigned int v3; // edx v1 = this; *this = 0; this[1] = 0; this[2] = 0; this[3] = -1; this[4] = 0; this[5] = 0; v2 = this + 10; v1[6] = 0; v1[7] = 0; v1[8] = 0; v1[9] = 0; *v2 = &NiTArray::`vftable'; v2[2] = 0; v2[5] = 1; v2[3] = 0; v2[4] = 0; v2[1] = 0; *((_BYTE *)v1 + 64) = 0; v3 = 0; if ( v2[3] ) { do *(_DWORD *)(v2[1] + 4 * v3++) = 0; while ( v3 < v2[3] ); } v2[3] = 0; v2[4] = 0; sub_8237A0(v2, 4u); return v1; } // A4AC5C: using guessed type void *NiTArray::`vftable'; //----- (00963160) -------------------------------------------------------- void __thiscall sub_963160(void **this) { void **v1; // esi void (__stdcall ***v2)(signed int); // ecx void (__stdcall ***v3)(signed int); // ecx void *v4; // edi void *v5; // edi unsigned int v6; // edi _DWORD *v7; // ecx void *v8; // ebx unsigned int v9; // eax void *v10; // ST0C_4 volatile LONG *v11; // esi void *v12; // [esp+8h] [ebp-4h] v1 = this; v2 = (void (__stdcall ***)(signed int))this[9]; if ( v2 ) (**v2)(1); v3 = (void (__stdcall ***)(signed int))v1[8]; if ( v3 ) (**v3)(1); v4 = v1[7]; if ( v4 ) { sub_967E60(v1[7]); operator delete(v4); } v5 = v1[4]; if ( v5 ) { nullsub_6(v1[4]); operator delete(v5); } operator delete(v1[6]); operator delete(v1[2]); operator delete(v1[1]); operator delete(*v1); v6 = 0; v12 = v1[13]; if ( v12 ) { do { v7 = v1[11]; v8 = (void *)v7[v6]; if ( v8 ) { sub_9644F0((void **)v7[v6]); operator delete(v8); if ( v6 < (unsigned int)v1[12] ) { if ( v6 < (unsigned int)v1[13] ) { if ( *((_DWORD *)v1[11] + v6) ) v1[14] = (char *)v1[14] - 1; } else { v1[13] = (void *)(v6 + 1); } *((_DWORD *)v1[11] + v6) = 0; } } ++v6; } while ( v6 < (unsigned int)v12 ); } v9 = 0; if ( v1[13] ) { do *((_DWORD *)v1[11] + v9++) = 0; while ( v9 < (unsigned int)v1[13] ); } v1[13] = 0; v1[14] = 0; v10 = v1[11]; v1[10] = &NiTArray::`vftable'; operator delete(v10); v11 = (volatile LONG *)v1[5]; if ( v11 && !InterlockedDecrement(v11 + 1) ) { if ( v11 ) (**(void (__thiscall ***)(void *, signed int))v11)((void *)v11, 1); } } // A4AC5C: using guessed type void *NiTArray::`vftable'; //----- (00963290) -------------------------------------------------------- int __thiscall sub_963290(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; if ( !this[8] ) { v2 = operator new(0x48u); if ( v2 ) { v3 = sub_962A00(v2); v1[8] = v3; v3[2] = 1; return v1[8]; } v1[8] = 0; MEMORY[8] = 1; } return v1[8]; } //----- (009632D0) -------------------------------------------------------- int __thiscall sub_9632D0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; if ( !this[9] ) { v2 = operator new(0x48u); if ( v2 ) { v3 = sub_962A00(v2); v1[9] = v3; v3[2] = 2; return v1[9]; } v1[9] = 0; MEMORY[8] = 2; } return v1[9]; } //----- (00963310) -------------------------------------------------------- _DWORD *__thiscall sub_963310(_DWORD *this, unsigned int a2, _DWORD *a3) { _DWORD *v3; // esi _DWORD *result; // eax _DWORD *v5; // eax _DWORD *v6; // ebx v3 = this; result = 0; if ( this[13] <= a2 || (result = *(_DWORD **)(this[11] + 4 * a2)) == 0 ) { if ( (_BYTE)a3 ) { v5 = operator new(0x50u); if ( v5 ) v6 = sub_964480(v5); else v6 = 0; a3 = v6; if ( a2 >= v3[12] ) sub_8237A0(v3 + 10, a2 + v3[15]); sub_823870(v3 + 10, a2, &a3); result = v6; } } return result; } //----- (00963380) -------------------------------------------------------- bool __thiscall sub_963380(_DWORD *this, signed int a2) { signed int v2; // ebx _DWORD *v3; // esi void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // eax int v5; // edi const char **v6; // ecx int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] int v10; // [esp+1Ch] [ebp+8h] v2 = a2; v3 = this; v9 = this[14]; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v8 = 4; v4(a2, &v9, 4, &v8, 1); v5 = 0; v10 = 0; if ( !v3[13] ) return v10 == v9; while ( 1 ) { v6 = *(const char ***)(v3[11] + 4 * v5); if ( v6 ) break; LABEL_5: if ( (unsigned int)++v5 >= v3[13] ) return v10 == v9; } if ( sub_964CB0(v6, v2) ) { ++v10; goto LABEL_5; } return 0; } //----- (00963400) -------------------------------------------------------- char __thiscall sub_963400(_DWORD *this, int a2) { _DWORD *v2; // edi bool v3; // zf void (__cdecl *v4)(int, int *, signed int, int *, signed int); // edx char result; // al void (__cdecl *v6)(int, int *, signed int, int *, signed int); // edx int v7; // [esp+4h] [ebp-8h] int v8; // [esp+8h] [ebp-4h] v2 = this; v3 = this[4] == 0; v7 = 4; if ( v3 ) { v6 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v8 = 0; v6(a2, &v8, 4, &v7, 1); return 1; } v4 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 8); v8 = 1; v4(a2, &v8, 4, &v7, 1); result = sub_965120((_BYTE *)v2[4], a2); if ( result ) return 1; return result; } //----- (00963470) -------------------------------------------------------- char __thiscall sub_963470(_DWORD *this, int a2) { int v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx _DWORD *v4; // edi _DWORD *v5; // eax _BYTE *v6; // eax char result; // al int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v4 = this; v8 = 4; v3(a2, &a2, 4, &v8, 1); if ( a2 != 1 || ((v5 = operator new(0x28u)) == 0 ? (v6 = 0) : (v6 = sub_965010(v5)), v4[4] = v6, (result = sub_965270(v6, v2)) != 0) ) { result = 1; } return result; } //----- (009634E0) -------------------------------------------------------- char __thiscall sub_9634E0(_DWORD *this, void *a2) { void (__cdecl *v2)(void *, unsigned int *, signed int, int *, signed int); // edx _DWORD *v3; // esi unsigned int v4; // edi _DWORD *v5; // eax void **v6; // ebx int v8; // [esp+10h] [ebp-8h] unsigned int v9; // [esp+14h] [ebp-4h] v2 = (void (__cdecl *)(void *, unsigned int *, signed int, int *, signed int))*((_DWORD *)a2 + 1); v3 = this; v8 = 4; v2(a2, &v9, 4, &v8, 1); sub_8237A0(v3 + 10, v9); v4 = 0; if ( !v9 ) return 1; while ( 1 ) { v5 = operator new(0x50u); v6 = (void **)(v5 ? sub_964480(v5) : 0); if ( !sub_964E70(v6, a2) ) break; if ( v4 < v3[12] ) { if ( v4 < v3[13] ) { if ( v6 ) { if ( !*(_DWORD *)(v3[11] + 4 * v4) ) ++v3[14]; } else if ( *(_DWORD *)(v3[11] + 4 * v4) ) { --v3[14]; } } else { v3[13] = v4 + 1; if ( v6 ) ++v3[14]; } *(_DWORD *)(v3[11] + 4 * v4) = v6; } if ( *((_BYTE *)v6 + 52) ) sub_965110((_BYTE *)v3[4], 1); if ( ++v4 >= v9 ) return 1; } return 0; } //----- (009635C0) -------------------------------------------------------- char __thiscall sub_9635C0(unsigned int *this, unsigned int a2, unsigned int a3) { unsigned int v3; // ebx unsigned int *v4; // esi _BYTE *v5; // ecx bool v6; // zf v3 = a2; v4 = this; if ( this[18] <= a2 || !*(_DWORD *)(this[17] + 4 * a2) ) ++this[14]; a2 = a3; if ( a3 ) ++*(_DWORD *)(a3 + 104); if ( v3 >= this[18] ) sub_461380((int)(this + 16), (void *)(v3 + this[21])); sub_461550(v4 + 16, v3, (int *)&a2); v5 = (_BYTE *)a3; if ( a3 ) { v6 = (*(_DWORD *)(a3 + 104))-- == 1; if ( v6 ) sub_91D6F0(v5); } sub_81A750(v4 + 28, v4[14]); return 1; } //----- (00963630) -------------------------------------------------------- char __thiscall sub_963630(const char **this, signed int a2) { signed int v2; // esi const char **v3; // edi void (__cdecl *v4)(signed int, const char **, signed int, int *, signed int); // edx bool v5; // zf BOOL v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; if ( !sub_92C1E0(a2, *this) ) return 0; if ( !sub_92C1E0(v2, v3[1]) ) return 0; if ( !sub_92C1E0(v2, v3[2]) ) return 0; v4 = *(void (__cdecl **)(signed int, const char **, signed int, int *, signed int))(v2 + 8); v8 = 4; v4(v2, v3 + 3, 4, &v8, 1); if ( !sub_963400(v3, v2) ) return 0; v5 = v3[5] == 0; a2 = 0; if ( v5 ) { sub_8120A0(v2, (int)&a2); } else { a2 = 1; sub_8120A0(v2, (int)&a2); if ( !(*(unsigned __int8 (__stdcall **)(signed int))(*(_DWORD *)v3[5] + 4))(v2) ) return 0; } if ( !sub_92C1E0(v2, v3[6]) || !sub_95C900(v2, (signed int)v3[7]) || !sub_95C970(v2, (signed int)v3[8]) || !sub_95C970(v2, (signed int)v3[9]) || !sub_963380(v3, v2) ) { return 0; } v7 = *((_BYTE *)v3 + 64) != 0; sub_8120A0(v2, (int)&v7); return 1; } //----- (00963750) -------------------------------------------------------- char __thiscall sub_963750(void **this, void *a2) { _DWORD *v2; // edi void **v3; // esi void (__cdecl *v5)(_DWORD *, void **, signed int, void **, signed int); // ecx _DWORD *v6; // eax _DWORD *v7; // eax volatile LONG *v8; // ebx _DWORD *v9; // ecx void (__stdcall ***v10)(signed int); // ecx void (__stdcall ***v11)(signed int); // ecx int v12; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; v12 = 0; if ( !sub_92C250((int)a2, this, &v12) || !sub_92C250((int)v2, v3 + 1, &v12) || (unsigned int)dword_AC9068 >= 0x10005 && !sub_92C250((int)v2, v3 + 2, &v12) ) { return 0; } v5 = (void (__cdecl *)(_DWORD *, void **, signed int, void **, signed int))v2[1]; a2 = (void *)4; v5(v2, v3 + 3, 4, &a2, 1); if ( !sub_963470(v3, (int)v2) ) return 0; if ( (unsigned int)dword_AC9068 >= 0x10006 ) { sub_75ABD0((int)v2, (int)&a2); if ( a2 ) { v6 = operator new(0x1Cu); if ( v6 ) v7 = sub_962EB0(v6); else v7 = 0; sub_56FF80(v3 + 5, (int)v7); if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)v3[5] + 8))(v2) ) return 0; } else { v8 = (volatile LONG *)v3[5]; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(void *, signed int))v8)((void *)v8, 1); v3[5] = 0; } } } a2 = 0; if ( !sub_92C250((int)v2, v3 + 6, &a2) ) return 0; v9 = v3[7]; a2 = v9; if ( v9 ) { sub_967E60(v9); operator delete(a2); } v3[7] = 0; if ( !sub_95C9E0((int)v2, v3 + 7) ) return 0; v10 = (void (__stdcall ***)(signed int))v3[8]; if ( v10 ) (**v10)(1); v3[8] = 0; if ( !sub_95CA70((int)v2, (void (__stdcall ****)(signed int))v3 + 8) ) return 0; v11 = (void (__stdcall ***)(signed int))v3[9]; if ( v11 ) (**v11)(1); v3[9] = 0; if ( !sub_95CA70((int)v2, (void (__stdcall ****)(signed int))v3 + 9) || !sub_9634E0(v3, v2) ) return 0; if ( (unsigned int)dword_AC9068 < 0x10007 ) { *((_BYTE *)v3 + 64) = 0; } else { a2 = 0; sub_75ABD0((int)v2, (int)&a2); *((_BYTE *)v3 + 64) = a2 != 0; } return 1; } // AC9068: using guessed type int dword_AC9068; //----- (00963960) -------------------------------------------------------- char __thiscall sub_963960(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _BYTE *v4; // ecx unsigned int *v5; // edi int v6; // eax unsigned int v7; // esi unsigned int v8; // esi int v9; // eax unsigned int v10; // esi unsigned int v11; // esi _DWORD *v12; // ecx _DWORD *v13; // esi _DWORD *v14; // eax unsigned int v16; // edx unsigned int v17; // eax unsigned int v18; // esi int v19; // ecx _DWORD *v20; // eax _DWORD *v21; // ebx bool v22; // zf int v23; // ST10_4 int v24; // eax _DWORD *v25; // [esp+Ch] [ebp-10h] unsigned int v26; // [esp+10h] [ebp-Ch] _DWORD *v27; // [esp+14h] [ebp-8h] int v28; // [esp+18h] [ebp-4h] int v29; // [esp+24h] [ebp+8h] int v30; // [esp+24h] [ebp+8h] unsigned int v31; // [esp+24h] [ebp+8h] v3 = this; v4 = (_BYTE *)this[4]; v25 = v3; if ( v4 ) { v5 = (unsigned int *)a2; *(_BYTE *)(a2 + 32) = sub_965080(v4); *(_BYTE *)(a2 + 33) = sub_9650A0((_BYTE *)v3[4]); *(_DWORD *)(a2 + 88) = sub_956CC0((_DWORD *)v3[4]); *(_DWORD *)(a2 + 100) = sub_866FD0((_DWORD *)v3[4]); *(_DWORD *)(a2 + 92) = sub_956CD0((_DWORD *)v3[4]); *(_DWORD *)(a2 + 96) = sub_9650C0((_DWORD *)v3[4]); } else { v5 = (unsigned int *)a2; *(_WORD *)(a2 + 32) = 0; *(_DWORD *)(a2 + 88) = 0; *(_DWORD *)(a2 + 100) = 0; *(_DWORD *)(a2 + 92) = 0; *(_DWORD *)(a2 + 96) = 0; } if ( v3[8] ) { v6 = (*(int (__stdcall **)(unsigned int, int))(*(_DWORD *)v3[8] + 12))(v5[5], a3); v7 = v5[11]; v29 = v6; if ( v7 != v6 ) { if ( v7 ) { if ( !InterlockedDecrement((volatile LONG *)(v7 + 4)) && v7 ) (**(void (__thiscall ***)(unsigned int, signed int))v7)(v7, 1); v6 = v29; } v5[11] = v6; if ( v6 ) InterlockedIncrement((volatile LONG *)(v6 + 4)); } } else { v8 = v5[11]; if ( v8 ) { if ( !InterlockedDecrement((volatile LONG *)(v8 + 4)) && v8 ) (**(void (__thiscall ***)(unsigned int, signed int))v8)(v8, 1); v5[11] = 0; } } if ( v3[9] ) { v9 = (*(int (__stdcall **)(unsigned int, int))(*(_DWORD *)v3[9] + 16))(v5[5], a3); v10 = v5[12]; v30 = v9; if ( v10 != v9 ) { if ( v10 ) { if ( !InterlockedDecrement((volatile LONG *)(v10 + 4)) && v10 ) (**(void (__thiscall ***)(unsigned int, signed int))v10)(v10, 1); v9 = v30; } v5[12] = v9; if ( v9 ) InterlockedIncrement((volatile LONG *)(v9 + 4)); } } else { v11 = v5[12]; if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(unsigned int, signed int))v11)(v11, 1); v5[12] = 0; } } v12 = (_DWORD *)v3[7]; v13 = 0; if ( v12 && sub_6A25F0(v12) ) { v14 = operator new(0x14u); if ( v14 ) { v14[1] = 0; v14[2] = 0; v14[3] = 0; v14[4] = 0; *(_BYTE *)v14 = 0; v13 = v14; } if ( !sub_967D60((_DWORD *)v3[7], (int)v13) ) { if ( v13 ) { sub_91C3F0(v13); operator delete(v13); } return 0; } } v5[10] = (unsigned int)v13; v16 = v3[13]; v17 = 0; v18 = 0; v31 = 0; v26 = v16; v28 = 0; if ( !v16 ) return 1; while ( 1 ) { v19 = *(_DWORD *)(v3[11] + 4 * v17); v27 = (_DWORD *)v19; if ( !v19 ) goto LABEL_58; if ( (*(_DWORD *)(v19 + 36) || *(_DWORD *)(v19 + 40)) && !v3[6] ) break; if ( *((_BYTE *)v3 + 64) ) *(_BYTE *)(v19 + 52) = 1; v20 = operator new(0x6Cu); if ( v20 ) v21 = sub_91D370(v20); else v21 = 0; if ( (_DWORD *)v18 != v21 ) { if ( v18 ) { v22 = (*(_DWORD *)(v18 + 104))-- == 1; if ( v22 ) sub_91D6F0((_BYTE *)v18); } v18 = (unsigned int)v21; if ( v21 ) ++v21[26]; } if ( !sub_9649B0(v27, v18, a3) ) goto LABEL_64; sub_9635C0(v5, v31, v18); v17 = v28; v16 = v26; ++v31; v3 = v25; LABEL_58: v28 = ++v17; if ( v17 >= v16 ) { if ( v18 ) { v22 = (*(_DWORD *)(v18 + 104))-- == 1; if ( v22 ) sub_91D6F0((_BYTE *)v18); } return 1; } } v23 = *v3; v24 = sub_879520(v5); sub_863460( 1, 0, "* ERROR: NSBImplementation::SetupNiBinaryShader\n" " Failed to find packing definition for implementation that uses vertex shaders.\n" " Shader %s, implementation %s\n", v24, v23); LABEL_64: if ( v18 ) { v22 = (*(_DWORD *)(v18 + 104))-- == 1; if ( v22 ) sub_91D6F0((_BYTE *)v18); } return 0; } //----- (00963C50) -------------------------------------------------------- float *__thiscall sub_963C50(float *this) { float *result; // eax result = this; this[6] = 1.0; this[7] = 0.0; *this = 0.0; this[8] = 0.0; this[1] = 0.0; this[9] = 0.0; this[2] = 0.0; this[10] = 0.0; this[3] = 0.0; this[12] = 0.0; this[4] = 0.0; this[13] = 0.0; *((_WORD *)this + 10) = 0; this[14] = 0.0; *((_BYTE *)this + 22) = 0; this[15] = 0.0; this[22] = 0.0; this[17] = 0.0; this[23] = 0.0; this[18] = 0.0; this[19] = 0.0; this[20] = 0.0; this[11] = 1.0; this[16] = 1.0; this[21] = 1.0; return result; } //----- (00963CB0) -------------------------------------------------------- _DWORD *__thiscall sub_963CB0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = this; if ( !this[3] ) { v2 = operator new(0x14u); if ( v2 ) { result = sub_9680D0(v2); v1[3] = result; return result; } v1[3] = 0; } return (_DWORD *)v1[3]; } //----- (00963CE0) -------------------------------------------------------- _DWORD *__thiscall sub_963CE0(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = this; if ( !this[4] ) { v2 = operator new(0x14u); if ( v2 ) { result = sub_9680D0(v2); v1[4] = result; return result; } v1[4] = 0; } return (_DWORD *)v1[4]; } //----- (00963D10) -------------------------------------------------------- char __thiscall sub_963D10(_DWORD *this, int a2) { return sub_969F50(this, a2); } //----- (00963D20) -------------------------------------------------------- void __thiscall sub_963D20(void **this) { void **v1; // esi void *v2; // edi _DWORD *v3; // esi v1 = this; operator delete(this[23]); operator delete(*v1); v2 = v1[3]; if ( v2 ) { sub_967E60(v1[3]); operator delete(v2); } v3 = v1[4]; if ( v3 ) { sub_967E60(v3); operator delete(v3); } } //----- (00963D70) -------------------------------------------------------- bool __thiscall sub_963D70(const char **this, signed int a2) { signed int v2; // esi const char **v3; // edi void (__cdecl *v4)(signed int, BOOL *, signed int, int *, signed int); // eax void (__cdecl *v5)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v6)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v7)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v8)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v9)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v10)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v11)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v12)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v13)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v14)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v15)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v16)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v17)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v18)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v19)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v20)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v21)(signed int, const char **, signed int, signed int *, signed int); // eax BOOL v23; // [esp+Ch] [ebp-8h] int v24; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v23 = *((_BYTE *)this + 22) != 0; v4 = *(void (__cdecl **)(signed int, BOOL *, signed int, int *, signed int))(a2 + 8); v24 = 4; v4(a2, &v23, 4, &v24, 1); v5 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v3 + 6, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v3 + 7, 4, &a2, 1); v7 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v7(v2, v3 + 8, 4, &a2, 1); v8 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v8(v2, v3 + 9, 4, &a2, 1); v9 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v9(v2, v3 + 10, 4, &a2, 1); v10 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v10(v2, v3 + 11, 4, &a2, 1); v11 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v11(v2, v3 + 12, 4, &a2, 1); v12 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v12(v2, v3 + 13, 4, &a2, 1); v13 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v13(v2, v3 + 14, 4, &a2, 1); v14 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v14(v2, v3 + 15, 4, &a2, 1); v15 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v15(v2, v3 + 16, 4, &a2, 1); v16 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v16(v2, v3 + 17, 4, &a2, 1); v17 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v17(v2, v3 + 18, 4, &a2, 1); v18 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v18(v2, v3 + 19, 4, &a2, 1); v19 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v19(v2, v3 + 20, 4, &a2, 1); v20 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v20(v2, v3 + 21, 4, &a2, 1); v21 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v21(v2, v3 + 22, 4, &a2, 1); return sub_92C1E0(v2, v3[23]) != 0; } //----- (00963F20) -------------------------------------------------------- char __thiscall sub_963F20(const char **this, signed int a2) { signed int v2; // esi const char **v3; // edi void (__cdecl *v5)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v6)(signed int, const char **, signed int, signed int *, signed int); // eax void (__cdecl *v7)(signed int, int *, signed int, signed int *, signed int); // eax int v8; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; if ( !sub_92C1E0(a2, *this) ) return 0; v5 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v5(v2, v3 + 1, 4, &a2, 1); v6 = *(void (__cdecl **)(signed int, const char **, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v6(v2, v3 + 2, 4, &a2, 1); if ( !sub_95C900(v2, (signed int)v3[3]) || !sub_95C900(v2, (signed int)v3[4]) || !sub_963D70(v3, v2) ) return 0; v8 = *((unsigned __int16 *)v3 + 10); v7 = *(void (__cdecl **)(signed int, int *, signed int, signed int *, signed int))(v2 + 8); a2 = 4; v7(v2, &v8, 4, &a2, 1); return 1; } //----- (00963FE0) -------------------------------------------------------- bool __thiscall sub_963FE0(void **this, int a2) { int v2; // esi void (__cdecl *v3)(int, int *, signed int, int *, signed int); // edx void **v4; // edi void (__cdecl *v5)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v6)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v7)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v8)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v9)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v10)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v11)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v12)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v13)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v14)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v15)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v16)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v17)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v18)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v19)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v20)(int, void **, signed int, int *, signed int); // eax int v22; // [esp+Ch] [ebp-8h] int v23; // [esp+10h] [ebp-4h] v2 = a2; v3 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v4 = this; v23 = 4; v3(a2, &a2, 4, &v23, 1); *((_BYTE *)v4 + 22) = a2 != 0; v5 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v5(v2, v4 + 6, 4, &v23, 1); v6 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v6(v2, v4 + 7, 4, &v23, 1); v7 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v7(v2, v4 + 8, 4, &v23, 1); v8 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v8(v2, v4 + 9, 4, &v23, 1); v9 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v9(v2, v4 + 10, 4, &v23, 1); v10 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v10(v2, v4 + 11, 4, &v23, 1); v23 = 4; (*(void (__cdecl **)(int, char *, signed int, int *, signed int))(v2 + 4))(v2, (char *)v4 + 48, 4, &v23, 1); v11 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v11(v2, v4 + 13, 4, &v23, 1); v12 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v12(v2, v4 + 14, 4, &v23, 1); v13 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v13(v2, v4 + 15, 4, &v23, 1); v14 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v14(v2, v4 + 16, 4, &v23, 1); v15 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v15(v2, v4 + 17, 4, &v23, 1); v16 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v16(v2, v4 + 18, 4, &v23, 1); v17 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v17(v2, v4 + 19, 4, &v23, 1); v18 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v18(v2, v4 + 20, 4, &v23, 1); v19 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v19(v2, v4 + 21, 4, &v23, 1); v20 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v23 = 4; v20(v2, v4 + 22, 4, &v23, 1); v22 = 0; return sub_92C250(v2, v4 + 23, &v22) != 0; } //----- (009641A0) -------------------------------------------------------- char __thiscall sub_9641A0(void **this, int a2) { int v2; // esi void **v3; // edi void (__cdecl *v5)(int, void **, signed int, int *, signed int); // eax void (__cdecl *v6)(int, void **, signed int, int *, signed int); // eax int v7; // [esp+8h] [ebp-4h] v2 = a2; v3 = this; v7 = 0; if ( !sub_92C250(a2, this, &v7) ) return 0; v5 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v5(v2, v3 + 1, 4, &a2, 1); v6 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); a2 = 4; v6(v2, v3 + 2, 4, &a2, 1); if ( !sub_95C9E0(v2, v3 + 3) || !sub_95C9E0(v2, v3 + 4) || !sub_963FE0(v3, v2) ) return 0; if ( (unsigned int)dword_AC9068 >= 0x10009 ) { sub_75ABD0(v2, (int)&a2); *((_WORD *)v3 + 10) = a2; } return 1; } // AC9068: using guessed type int dword_AC9068; //----- (00964260) -------------------------------------------------------- _DWORD *__thiscall sub_964260(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *result; // eax v1 = this; if ( !this[2] ) { v2 = operator new(0x14u); if ( v2 ) { result = sub_9680D0(v2); v1[2] = result; return result; } v1[2] = 0; } return (_DWORD *)v1[2]; } //----- (00964290) -------------------------------------------------------- rsize_t __thiscall sub_964290(void *this, char *Src) { return sub_92C100((int)this + 20, 0, Src); } //----- (009642B0) -------------------------------------------------------- rsize_t __thiscall sub_9642B0(void *this, char *Src) { return sub_92C100((int)this + 24, 0, Src); } //----- (009642D0) -------------------------------------------------------- rsize_t __thiscall sub_9642D0(void *this, char *Src) { return sub_92C100((int)this + 28, 0, Src); } //----- (009642F0) -------------------------------------------------------- rsize_t __thiscall sub_9642F0(void *this, char *Src) { return sub_92C100((int)this + 32, 0, Src); } //----- (00964310) -------------------------------------------------------- rsize_t __thiscall sub_964310(void *this, char *Src) { return sub_92C100((int)this + 36, 0, Src); } //----- (00964330) -------------------------------------------------------- rsize_t __thiscall sub_964330(void *this, char *Src) { return sub_92C100((int)this + 40, 0, Src); } //----- (00964350) -------------------------------------------------------- rsize_t __thiscall sub_964350(void *this, char *Src) { return sub_92C100((int)this + 44, 0, Src); } //----- (00964370) -------------------------------------------------------- rsize_t __thiscall sub_964370(void *this, char *Src) { return sub_92C100((int)this + 48, 0, Src); } //----- (00964390) -------------------------------------------------------- bool __thiscall sub_964390(const char **this, signed int a2) { const char **v2; // esi bool result; // al v2 = this; if ( sub_92C1E0(a2, this[6]) && sub_92C1E0(a2, v2[5]) && sub_92C1E0(a2, v2[7]) ) result = sub_92C1E0(a2, v2[8]) != 0; else result = 0; return result; } //----- (009643F0) -------------------------------------------------------- bool __thiscall sub_9643F0(const char **this, signed int a2) { const char **v2; // esi bool result; // al v2 = this; if ( sub_92C1E0(a2, this[10]) && sub_92C1E0(a2, v2[9]) && sub_92C1E0(a2, v2[11]) ) result = sub_92C1E0(a2, v2[12]) != 0; else result = 0; return result; } //----- (00964450) -------------------------------------------------------- void *__thiscall sub_964450(void *this, char a2) { void *v2; // esi void *v3; // ST00_4 v2 = this; v3 = (void *)*((_DWORD *)this + 1); *(_DWORD *)this = &NiTArray::`vftable'; operator delete(v3); if ( a2 & 1 ) operator delete(v2); return v2; } // A4AD0C: using guessed type void *NiTArray::`vftable'; //----- (00964480) -------------------------------------------------------- _DWORD *__thiscall sub_964480(_DWORD *this) { _DWORD *result; // eax *this = 0; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 0; *((_BYTE *)this + 52) = 0; result = this; this[14] = &NiTArray::`vftable'; this[16] = 0; this[19] = 1; this[17] = 0; this[18] = 0; this[15] = 0; this[17] = 0; this[18] = 0; return result; } // 964480: could not find valid save-restore pair for esi // A4AD0C: using guessed type void *NiTArray::`vftable'; //----- (009644F0) -------------------------------------------------------- void __thiscall sub_9644F0(void **this) { void **v1; // esi void *v2; // edi void (__stdcall ***v3)(signed int); // ecx void (__stdcall ***v4)(signed int); // ecx unsigned int v5; // edi _DWORD *v6; // eax void *v7; // ebx unsigned int v8; // eax void *v9; // ST1C_4 volatile LONG *v10; // esi void *v11; // [esp+8h] [ebp-4h] v1 = this; operator delete(*this); v2 = v1[2]; if ( v2 ) { sub_967E60(v1[2]); operator delete(v2); } v3 = (void (__stdcall ***)(signed int))v1[3]; if ( v3 ) (**v3)(1); v4 = (void (__stdcall ***)(signed int))v1[4]; if ( v4 ) (**v4)(1); operator delete(v1[5]); operator delete(v1[6]); operator delete(v1[7]); operator delete(v1[8]); operator delete(v1[9]); operator delete(v1[10]); operator delete(v1[11]); operator delete(v1[12]); v5 = 0; v11 = v1[17]; if ( v11 ) { do { v6 = v1[15]; v7 = (void *)v6[v5]; if ( v7 ) { sub_963D20((void **)v6[v5]); operator delete(v7); if ( v5 < (unsigned int)v1[16] ) { if ( v5 < (unsigned int)v1[17] ) { if ( *((_DWORD *)v1[15] + v5) ) v1[18] = (char *)v1[18] - 1; } else { v1[17] = (void *)(v5 + 1); } *((_DWORD *)v1[15] + v5) = 0; } } ++v5; } while ( v5 < (unsigned int)v11 ); } v8 = 0; if ( v1[17] ) { do *((_DWORD *)v1[15] + v8++) = 0; while ( v8 < (unsigned int)v1[17] ); } v1[17] = 0; v1[18] = 0; v9 = v1[15]; v1[14] = &NiTArray::`vftable'; operator delete(v9); v10 = (volatile LONG *)v1[1]; if ( v10 && !InterlockedDecrement(v10 + 1) ) { if ( v10 ) (**(void (__thiscall ***)(void *, signed int))v10)((void *)v10, 1); } } // A4AD0C: using guessed type void *NiTArray::`vftable'; //----- (00964630) -------------------------------------------------------- int __thiscall sub_964630(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; if ( !this[3] ) { v2 = operator new(0x48u); if ( v2 ) { v3 = sub_962A00(v2); v1[3] = v3; v3[2] = 1; return v1[3]; } v1[3] = 0; MEMORY[8] = 1; } return v1[3]; } //----- (00964670) -------------------------------------------------------- int __thiscall sub_964670(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax _DWORD *v3; // eax v1 = this; if ( !this[4] ) { v2 = operator new(0x48u); if ( v2 ) { v3 = sub_962A00(v2); v1[4] = v3; v3[2] = 2; return v1[4]; } v1[4] = 0; MEMORY[8] = 2; } return v1[4]; } //----- (009646B0) -------------------------------------------------------- int __thiscall sub_9646B0(_DWORD *this) { return this[17]; } //----- (009646C0) -------------------------------------------------------- float *__thiscall sub_9646C0(_DWORD *this, unsigned int a2, char a3) { _DWORD *v3; // edi int v4; // ebx _DWORD *v5; // esi unsigned int v6; // edi float *v7; // eax float *result; // eax v3 = this; v4 = 0; if ( this[17] > a2 ) { v4 = *(_DWORD *)(this[15] + 4 * a2); if ( v4 ) return (float *)v4; } if ( !a3 ) return (float *)v4; v5 = this + 14; sub_8237A0(this + 14, a2 + 1); v6 = v3[17]; if ( v6 <= a2 ) { while ( 1 ) { v7 = (float *)operator new(0x60u); if ( v7 ) result = sub_963C50(v7); else result = 0; *((_DWORD *)result + 1) = v6; if ( v6 >= v5[2] ) goto LABEL_14; if ( v6 >= v5[3] ) break; if ( !*(_DWORD *)(v5[1] + 4 * v6) ) goto LABEL_12; LABEL_13: *(_DWORD *)(v5[1] + 4 * v6) = result; LABEL_14: if ( ++v6 > a2 ) return result; } v5[3] = v6 + 1; LABEL_12: ++v5[4]; goto LABEL_13; } return (float *)v4; } //----- (00964760) -------------------------------------------------------- char __thiscall sub_964760(void **this, void *a2) { void *v2; // edi void **v3; // esi char **v4; // ebx int v6; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v6 = 0; if ( dword_AC9068 == 65537 ) { v4 = (char **)(this + 5); if ( !sub_92C250((int)a2, this + 5, &v6) ) return 0; sub_92C100((int)(v3 + 6), 0, *v4); } else { if ( (unsigned int)dword_AC9068 < 0x10008 ) { a2 = 0; if ( !sub_92C250((int)v2, &a2, &v6) ) return 0; operator delete(a2); a2 = 0; if ( !sub_92C250((int)v2, &a2, &v6) ) return 0; operator delete(a2); } if ( !sub_92C250((int)v2, v3 + 6, &v6) || (unsigned int)dword_AC9068 >= 0x10008 && !sub_92C250((int)v2, v3 + 5, &v6) ) return 0; } if ( dword_AC9068 != 65537 && (!sub_92C250((int)v2, v3 + 7, &v6) || !sub_92C250((int)v2, v3 + 8, &v6)) ) return 0; return 1; } // AC9068: using guessed type int dword_AC9068; //----- (00964890) -------------------------------------------------------- bool __thiscall sub_964890(void **this, void *a2) { void *v2; // esi void **v3; // edi char **v4; // ebx void *v6; // ST04_4 int v7; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v7 = 0; if ( dword_AC9068 == 65537 ) { v4 = (char **)(this + 9); if ( !sub_92C250((int)a2, this + 9, &v7) ) return 0; sub_92C100((int)(v3 + 10), 0, *v4); } else { if ( (unsigned int)dword_AC9068 < 0x10008 ) { v6 = a2; a2 = 0; if ( !sub_92C250((int)v6, &a2, &v7) ) return 0; operator delete(a2); a2 = 0; if ( !sub_92C250((int)v2, &a2, &v7) ) return 0; operator delete(a2); } if ( !sub_92C250((int)v2, v3 + 10, &v7) || (unsigned int)dword_AC9068 >= 0x10008 && !sub_92C250((int)v2, v3 + 9, &v7) ) { return 0; } } if ( !sub_92C250((int)v2, v3 + 11, &v7) ) return 0; return sub_92C250((int)v2, v3 + 12, &v7) != 0; } // AC9068: using guessed type int dword_AC9068; //----- (009649B0) -------------------------------------------------------- char __thiscall sub_9649B0(_DWORD *this, int a2, int a3) { _DWORD *v3; // ebx _DWORD *v4; // ecx _BYTE *v5; // esi char result; // al int v7; // edi int v8; // esi int v9; // eax int v10; // eax int v11; // esi int v12; // esi int v13; // esi int v14; // eax int v15; // eax int v16; // esi int v17; // esi unsigned int v18; // eax unsigned int v19; // ebx _DWORD *v20; // eax _DWORD *v21; // esi _DWORD *v22; // eax _DWORD *v23; // eax bool v24; // zf _DWORD *v25; // [esp+8h] [ebp-4h] int v26; // [esp+14h] [ebp+8h] unsigned int v27; // [esp+14h] [ebp+8h] int v28; // [esp+18h] [ebp+Ch] _DWORD *v29; // [esp+18h] [ebp+Ch] v3 = this; v4 = (_DWORD *)this[2]; v5 = 0; v25 = v3; if ( v4 && sub_6A25F0(v4) && (v5 = sub_91C760(), !sub_967D60((_DWORD *)v3[2], (int)v5)) ) { if ( v5 ) { sub_91C3F0(v5); operator delete(v5); } result = 0; } else { v7 = a2; if ( *(_BYTE **)(a2 + 56) != v5 ) sub_91C7A0(*(void **)(a2 + 56)); *(_DWORD *)(a2 + 56) = v5; if ( v3[3] ) { v8 = *(_DWORD *)v3[3]; v9 = sub_91C950(); v10 = (*(int (__thiscall **)(_DWORD, int, int))(v8 + 12))(v3[3], v9, a3); v11 = *(_DWORD *)(a2 + 60); v26 = v10; if ( v11 != v10 ) { if ( v11 ) { if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) && v11 ) (**(void (__thiscall ***)(int, signed int))v11)(v11, 1); v10 = v26; } *(_DWORD *)(v7 + 60) = v10; if ( v10 ) InterlockedIncrement((volatile LONG *)(v10 + 4)); } } else { v12 = *(_DWORD *)(a2 + 60); if ( v12 ) { if ( !InterlockedDecrement((volatile LONG *)(v12 + 4)) && v12 ) (**(void (__thiscall ***)(int, signed int))v12)(v12, 1); *(_DWORD *)(a2 + 60) = 0; } } if ( v3[4] ) { v13 = *(_DWORD *)v3[4]; v14 = sub_91C950(); v15 = (*(int (__thiscall **)(_DWORD, int, int))(v13 + 16))(v3[4], v14, a3); v16 = *(_DWORD *)(v7 + 80); v28 = v15; if ( v16 != v15 ) { if ( v16 ) { if ( !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v15 = v28; } *(_DWORD *)(v7 + 80) = v15; if ( v15 ) InterlockedIncrement((volatile LONG *)(v15 + 4)); } } else { v17 = *(_DWORD *)(v7 + 80); if ( v17 ) { if ( !InterlockedDecrement((volatile LONG *)(v17 + 4)) && v17 ) (**(void (__thiscall ***)(int, signed int))v17)(v17, 1); *(_DWORD *)(v7 + 80) = 0; } } sub_91CB70((void **)v7, (char *)v3[10]); sub_91C9F0((void **)v7, (char *)v3[6]); sub_91CBF0((void **)v7, (char *)v3[11]); sub_91CC70((void **)v7, (char *)v3[12]); sub_91CA70((void **)v7, (char *)v3[7]); sub_91CAF0((void **)v7, (char *)v3[8]); *(_BYTE *)(v7 + 100) = *((_BYTE *)v3 + 52); v18 = v3[17]; v27 = v18; if ( v18 > dword_AC4D3C ) { LABEL_54: result = 0; } else { v19 = 0; if ( v18 ) { do { v29 = *(_DWORD **)(v25[15] + 4 * v19); if ( v29 ) { v20 = sub_4615D0((_DWORD *)v7, v19); v21 = v20; if ( v20 ) { ++v20[23]; } else { v22 = operator new(0x60u); if ( v22 ) { v23 = sub_91AE30(v22); if ( v23 ) { ++v23[23]; v21 = v23; } } } if ( !sub_963D10(v29, (int)v21) ) { if ( v21 ) { v24 = v21[23]-- == 1; if ( v24 ) sub_91BD60(v21); } goto LABEL_54; } sub_91D830((_DWORD *)v7, v19, v21); if ( v21 ) { v24 = v21[23]-- == 1; if ( v24 ) sub_91BD60(v21); } } ++v19; } while ( v19 < v27 ); } result = 1; } } return result; } // AC4D3C: using guessed type int dword_AC4D3C; //----- (00964C30) -------------------------------------------------------- bool __thiscall sub_964C30(_DWORD *this, signed int a2) { signed int v2; // ebx _DWORD *v3; // esi void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // eax int v5; // edi const char **v6; // ecx int v8; // [esp+Ch] [ebp-8h] int v9; // [esp+10h] [ebp-4h] int v10; // [esp+1Ch] [ebp+8h] v2 = a2; v3 = this; v9 = this[18]; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v8 = 4; v4(a2, &v9, 4, &v8, 1); v5 = 0; v10 = 0; if ( !v3[17] ) return v10 == v9; while ( 1 ) { v6 = *(const char ***)(v3[15] + 4 * v5); if ( v6 ) break; LABEL_5: if ( (unsigned int)++v5 >= v3[17] ) return v10 == v9; } if ( sub_963F20(v6, v2) ) { ++v10; goto LABEL_5; } return 0; } //----- (00964CB0) -------------------------------------------------------- bool __thiscall sub_964CB0(const char **this, signed int a2) { signed int v2; // esi const char **v3; // edi bool v4; // zf void (__cdecl *v5)(signed int, signed int *, signed int, int *, signed int); // eax BOOL v7; // [esp+8h] [ebp-8h] int v8; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; if ( !sub_92C1E0(a2, *this) ) return 0; v4 = v3[1] == 0; v5 = *(void (__cdecl **)(signed int, signed int *, signed int, int *, signed int))(v2 + 8); a2 = 0; v8 = 4; if ( v4 ) { v5(v2, &a2, 4, &v8, 1); } else { a2 = 1; v5(v2, &a2, 4, &v8, 1); if ( !(*(unsigned __int8 (__stdcall **)(signed int))(*(_DWORD *)v3[1] + 4))(v2) ) return 0; } if ( !sub_95C900(v2, (signed int)v3[2]) || !sub_964390(v3, v2) || !sub_95C970(v2, (signed int)v3[3]) || !sub_9643F0(v3, v2) || !sub_95C970(v2, (signed int)v3[4]) ) { return 0; } v7 = *((_BYTE *)v3 + 52) != 0; sub_8120A0(v2, (int)&v7); return sub_964C30(v3, v2) != 0; } //----- (00964DA0) -------------------------------------------------------- char __thiscall sub_964DA0(_DWORD *this, int a2) { void (__cdecl *v2)(int, unsigned int *, signed int, int *, signed int); // edx _DWORD *v3; // esi unsigned int v4; // edi float *v5; // eax void **v6; // ebx int v8; // [esp+Ch] [ebp-8h] unsigned int v9; // [esp+10h] [ebp-4h] v2 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v3 = this; v8 = 4; v2(a2, &v9, 4, &v8, 1); sub_8237A0(v3 + 14, v9); v4 = 0; if ( !v9 ) return 1; while ( 1 ) { v5 = (float *)operator new(0x60u); v6 = (void **)(v5 ? sub_963C50(v5) : 0); if ( !sub_9641A0(v6, a2) ) break; if ( v4 < v3[16] ) { if ( v4 < v3[17] ) { if ( v6 ) { if ( !*(_DWORD *)(v3[15] + 4 * v4) ) ++v3[18]; } else if ( *(_DWORD *)(v3[15] + 4 * v4) ) { --v3[18]; } } else { v3[17] = v4 + 1; if ( v6 ) ++v3[18]; } *(_DWORD *)(v3[15] + 4 * v4) = v6; } if ( ++v4 >= v9 ) return 1; } return 0; } //----- (00964E70) -------------------------------------------------------- char __thiscall sub_964E70(void **this, void *a2) { _DWORD *v2; // edi void **v3; // esi char result; // al void (__cdecl *v5)(_DWORD *, void **, signed int, int *, signed int); // eax _DWORD *v6; // eax _DWORD *v7; // eax volatile LONG *v8; // ebx _DWORD *v9; // ecx void (__stdcall ***v10)(signed int); // ecx void (__stdcall ***v11)(signed int); // ecx void *v12; // [esp+8h] [ebp-Ch] int v13; // [esp+Ch] [ebp-8h] int v14; // [esp+10h] [ebp-4h] v2 = a2; v3 = this; v14 = 0; result = sub_92C250((int)a2, this, &v14); if ( result ) { if ( (unsigned int)dword_AC9068 >= 0x10006 ) { v5 = (void (__cdecl *)(_DWORD *, void **, signed int, int *, signed int))v2[1]; v13 = 4; v5(v2, &v12, 4, &v13, 1); if ( v12 ) { v6 = operator new(0x1Cu); if ( v6 ) v7 = sub_962EB0(v6); else v7 = 0; sub_56FF80(v3 + 1, (int)v7); if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *))(*(_DWORD *)v3[1] + 8))(v2) ) return 0; } else { v8 = (volatile LONG *)v3[1]; if ( v8 ) { if ( !InterlockedDecrement(v8 + 1) && v8 ) (**(void (__thiscall ***)(void *, signed int))v8)((void *)v8, 1); v3[1] = 0; } } } v9 = v3[2]; v12 = v9; if ( v9 ) { sub_967E60(v9); operator delete(v12); } v3[2] = 0; if ( !sub_95C9E0((int)v2, v3 + 2) || !sub_964760(v3, v2) ) return 0; v10 = (void (__stdcall ***)(signed int))v3[3]; if ( v10 ) (**v10)(1); v3[3] = 0; if ( !sub_95CA70((int)v2, (void (__stdcall ****)(signed int))v3 + 3) || !sub_964890(v3, v2) ) return 0; v11 = (void (__stdcall ***)(signed int))v3[4]; if ( v11 ) (**v11)(1); v3[4] = 0; if ( !sub_95CA70((int)v2, (void (__stdcall ****)(signed int))v3 + 4) ) return 0; a2 = 0; sub_75ABD0((int)v2, (int)&a2); *((_BYTE *)v3 + 52) = a2 != 0; result = sub_964DA0(v3, (int)v2) != 0; } return result; } // AC9068: using guessed type int dword_AC9068; //----- (00965010) -------------------------------------------------------- _DWORD *__thiscall sub_965010(_DWORD *this) { _DWORD *result; // eax result = this; *this = 0; this[1] = 0; this[2] = 0; this[3] = 0; *((_WORD *)this + 8) = 0; this[5] = 0; this[6] = 0; this[7] = 0; this[8] = 0; *((_WORD *)this + 18) = 0; return result; } //----- (00965050) -------------------------------------------------------- int __thiscall sub_965050(_DWORD *this) { return this[1]; } //----- (00965060) -------------------------------------------------------- int __thiscall sub_965060(_DWORD *this, int a2) { int result; // eax result = a2; this[2] = a2; return result; } //----- (00965070) -------------------------------------------------------- int __thiscall sub_965070(_DWORD *this) { return this[3]; } //----- (00965080) -------------------------------------------------------- char __thiscall sub_965080(_BYTE *this) { return this[16]; } //----- (009650A0) -------------------------------------------------------- char __thiscall sub_9650A0(_BYTE *this) { return this[17]; } //----- (009650C0) -------------------------------------------------------- int __thiscall sub_9650C0(_DWORD *this) { return this[7]; } //----- (009650E0) -------------------------------------------------------- int __thiscall sub_9650E0(_DWORD *this, int a2) { int result; // eax result = a2; this[8] = a2; return result; } //----- (009650F0) -------------------------------------------------------- char __thiscall sub_9650F0(_BYTE *this, char a2) { char result; // al result = a2; this[36] = a2; return result; } //----- (00965100) -------------------------------------------------------- char __thiscall sub_965100(_BYTE *this) { return this[37]; } //----- (00965110) -------------------------------------------------------- char __thiscall sub_965110(_BYTE *this, char a2) { char result; // al result = a2; this[37] = a2; return result; } //----- (00965120) -------------------------------------------------------- char __thiscall sub_965120(_BYTE *this, int a2) { int v2; // esi _BYTE *v3; // edi void (__cdecl *v4)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v5)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v8)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v10)(int, _BYTE *, signed int, int *, signed int); // eax void (__cdecl *v11)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v12)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v13)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v14)(int, int *, signed int, int *, signed int); // ecx int v16; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(a2 + 8); v16 = 4; v4(a2, v3, 4, &v16, 1); v5 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 8); v16 = 4; v5(v2, v3 + 4, 4, &v16, 1); v6 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 8); v16 = 4; v6(v2, v3 + 8, 4, &v16, 1); v7 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 8); v16 = 4; v7(v2, v3 + 12, 4, &v16, 1); a2 = v3[16] != 0; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v8(v2, &a2, 4, &v16, 1); a2 = v3[17] != 0; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v9(v2, &a2, 4, &v16, 1); v16 = 4; (*(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 8))(v2, v3 + 20, 4, &v16, 1); v10 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 8); v16 = 4; v10(v2, v3 + 24, 4, &v16, 1); a2 = *((_DWORD *)v3 + 7); v11 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v11(v2, &a2, 4, &v16, 1); a2 = *((_DWORD *)v3 + 8); v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v12(v2, &a2, 4, &v16, 1); a2 = v3[36] != 0; v13 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v13(v2, &a2, 4, &v16, 1); a2 = v3[37] != 0; v14 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v16 = 4; v14(v2, &a2, 4, &v16, 1); return 1; } //----- (00965270) -------------------------------------------------------- char __thiscall sub_965270(_BYTE *this, int a2) { int v2; // esi _BYTE *v3; // edi void (__cdecl *v4)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v5)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, _BYTE *, signed int, int *, signed int); // ecx void (__cdecl *v8)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v9)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v10)(int, _BYTE *, signed int, int *, signed int); // eax void (__cdecl *v11)(int, _BYTE *, signed int, int *, signed int); // eax void (__cdecl *v12)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v13)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v14)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v15)(int, int *, signed int, int *, signed int); // eax int v17; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(a2 + 4); v17 = 4; v4(a2, v3, 4, &v17, 1); v5 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 4); v17 = 4; v5(v2, v3 + 4, 4, &v17, 1); v6 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 4); v17 = 4; v6(v2, v3 + 8, 4, &v17, 1); v7 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 4); v17 = 4; v7(v2, v3 + 12, 4, &v17, 1); v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v8(v2, &a2, 4, &v17, 1); v3[16] = a2 != 0; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v9(v2, &a2, 4, &v17, 1); v3[17] = a2 != 0; v10 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 4); v17 = 4; v10(v2, v3 + 20, 4, &v17, 1); v11 = *(void (__cdecl **)(int, _BYTE *, signed int, int *, signed int))(v2 + 4); v17 = 4; v11(v2, v3 + 24, 4, &v17, 1); v12 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v12(v2, &a2, 4, &v17, 1); *((_DWORD *)v3 + 7) = a2; v13 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v13(v2, &a2, 4, &v17, 1); *((_DWORD *)v3 + 8) = a2; if ( (unsigned int)dword_AC9068 >= 0x10007 ) { v14 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v14(v2, &a2, 4, &v17, 1); v3[36] = a2 != 0; v15 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v17 = 4; v15(v2, &a2, 4, &v17, 1); v3[37] = a2 != 0; } return 1; } // AC9068: using guessed type int dword_AC9068; //----- (009653D0) -------------------------------------------------------- int __cdecl sub_9653D0(char *a1) { int result; // eax if ( a1 && *a1 ) { result = _stricmp(a1, "ZENABLE"); if ( !result ) return result; if ( !_stricmp(a1, "FILLMODE") ) return 1; if ( !_stricmp(a1, "SHADEMODE") ) return 2; if ( !_stricmp(a1, "ZWRITEENABLE") ) return 3; if ( !_stricmp(a1, "ALPHATESTENABLE") ) return 4; if ( !_stricmp(a1, "LASTPIXEL") ) return 5; if ( !_stricmp(a1, "SRCBLEND") ) return 6; if ( !_stricmp(a1, "DESTBLEND") ) return 7; if ( !_stricmp(a1, "CULLMODE") ) return 8; if ( !_stricmp(a1, "ZFUNC") ) return 9; if ( !_stricmp(a1, "ALPHAREF") ) return 10; if ( !_stricmp(a1, "ALPHAFUNC") ) return 11; if ( !_stricmp(a1, "DITHERENABLE") ) return 12; if ( !_stricmp(a1, "ALPHABLENDENABLE") ) return 13; if ( !_stricmp(a1, "FOGENABLE") ) return 14; if ( !_stricmp(a1, "SPECULARENABLE") ) return 15; if ( !_stricmp(a1, "FOGCOLOR") ) return 16; if ( !_stricmp(a1, "FOGTABLEMODE") ) return 17; if ( !_stricmp(a1, "FOGSTART") ) return 18; if ( !_stricmp(a1, "FOGEND") ) return 19; if ( !_stricmp(a1, "FOGDENSITY") ) return 20; if ( !_stricmp(a1, "RANGEFOGENABLE") ) return 21; if ( !_stricmp(a1, "STENCILENABLE") ) return 22; if ( !_stricmp(a1, "STENCILFAIL") ) return 23; if ( !_stricmp(a1, "STENCILZFAIL") ) return 24; if ( !_stricmp(a1, "STENCILPASS") ) return 25; if ( !_stricmp(a1, "STENCILFUNC") ) return 26; if ( !_stricmp(a1, "STENCILREF") ) return 27; if ( !_stricmp(a1, "STENCILMASK") ) return 28; if ( !_stricmp(a1, "STENCILWRITEMASK") ) return 29; if ( !_stricmp(a1, "TEXTUREFACTOR") ) return 30; if ( !_stricmp(a1, "WRAP0") ) return 31; if ( !_stricmp(a1, "WRAP1") ) return 32; if ( !_stricmp(a1, "WRAP2") ) return 33; if ( !_stricmp(a1, "WRAP3") ) return 34; if ( !_stricmp(a1, "WRAP4") ) return 35; if ( !_stricmp(a1, "WRAP5") ) return 36; if ( !_stricmp(a1, "WRAP6") ) return 37; if ( !_stricmp(a1, "WRAP7") ) return 38; if ( !_stricmp(a1, "CLIPPING") ) return 39; if ( !_stricmp(a1, "LIGHTING") ) return 40; if ( !_stricmp(a1, "AMBIENT") ) return 41; if ( !_stricmp(a1, "FOGVERTEXMODE") ) return 42; if ( !_stricmp(a1, "COLORVERTEX") ) return 43; if ( !_stricmp(a1, "LOCALVIEWER") ) return 44; if ( !_stricmp(a1, "NORMALIZENORMALS") ) return 45; if ( !_stricmp(a1, "DIFFUSEMATERIALSOURCE ") ) return 46; if ( !_stricmp(a1, "SPECULARMATERIALSOURCE") ) return 47; if ( !_stricmp(a1, "AMBIENTMATERIALSOURCE") ) return 48; if ( !_stricmp(a1, "EMISSIVEMATERIALSOURCE") ) return 49; if ( !_stricmp(a1, "VERTEXBLEND") ) return 50; if ( !_stricmp(a1, "CLIPPLANEENABLE") ) return 51; if ( !_stricmp(a1, "POINTSIZE") ) return 52; if ( !_stricmp(a1, "POINTSIZE_MIN") ) return 53; if ( !_stricmp(a1, "POINTSPRITEENABLE") ) return 54; if ( !_stricmp(a1, "POINTSCALEENABLE") ) return 55; if ( !_stricmp(a1, "POINTSCALE_A") ) return 56; if ( !_stricmp(a1, "POINTSCALE_B") ) return 57; if ( !_stricmp(a1, "POINTSCALE_C") ) return 58; if ( !_stricmp(a1, "MULTISAMPLEANTIALIAS") ) return 59; if ( !_stricmp(a1, "MULTISAMPLEMASK") ) return 60; if ( !_stricmp(a1, "PATCHEDGESTYLE") ) return 61; if ( !_stricmp(a1, "DEBUGMONITORTOKEN") ) return 62; if ( !_stricmp(a1, "POINTSIZE_MAX") ) return 63; if ( !_stricmp(a1, "INDEXEDVERTEXBLENDENABLE") ) return 64; if ( !_stricmp(a1, "COLORWRITEENABLE") ) return 65; if ( !_stricmp(a1, "TWEENFACTOR") ) return 66; if ( !_stricmp(a1, "BLENDOP") ) return 67; if ( !_stricmp(a1, "POSITIONDEGREE") ) return 68; if ( !_stricmp(a1, "NORMALDEGREE") ) return 69; if ( !_stricmp(a1, "SCISSORTESTENABLE") ) return 70; if ( !_stricmp(a1, "SLOPESCALEDEPTHBIAS") ) return 71; if ( !_stricmp(a1, "ANTIALIASEDLINEENABLE") ) return 72; if ( !_stricmp(a1, "MINTESSELLATIONLEVEL") ) return 73; if ( !_stricmp(a1, "MAXTESSELLATIONLEVEL") ) return 74; if ( !_stricmp(a1, "ADAPTIVETESS_X") ) return 75; if ( !_stricmp(a1, "ADAPTIVETESS_Y") ) return 76; if ( !_stricmp(a1, "ADAPTIVETESS_Z") ) return 77; if ( !_stricmp(a1, "ADAPTIVETESS_W") ) return 78; if ( !_stricmp(a1, "ENABLEADAPTIVETESSELATION") || !_stricmp(a1, "ENABLEADAPTIVETESSELLATION") ) return 79; if ( !_stricmp(a1, "TWOSIDEDSTENCILMODE") ) return 80; if ( !_stricmp(a1, "CCW_STENCILFAIL") ) return 81; if ( !_stricmp(a1, "CCW_STENCILZFAIL") ) return 82; if ( !_stricmp(a1, "CCW_STENCILPASS") ) return 83; if ( !_stricmp(a1, "CCW_STENCILFUNC") ) return 84; if ( !_stricmp(a1, "COLORWRITEENABLE1") ) return 85; if ( !_stricmp(a1, "COLORWRITEENABLE2") ) return 86; if ( !_stricmp(a1, "COLORWRITEENABLE3") ) return 87; if ( !_stricmp(a1, "BLENDFACTOR") ) return 88; if ( !_stricmp(a1, "SRGBWRITEENABLE") ) return 89; if ( !_stricmp(a1, "DEPTHBIAS") ) return 90; if ( !_stricmp(a1, "WRAP8") ) return 91; if ( !_stricmp(a1, "WRAP9") ) return 92; if ( !_stricmp(a1, "WRAP10") ) return 93; if ( !_stricmp(a1, "WRAP11") ) return 94; if ( !_stricmp(a1, "WRAP12") ) return 95; if ( !_stricmp(a1, "WRAP13") ) return 96; if ( !_stricmp(a1, "WRAP14") ) return 97; if ( !_stricmp(a1, "WRAP15") ) return 98; if ( !_stricmp(a1, "SEPARATEALPHABLENDENABLE") ) return 99; if ( !_stricmp(a1, "SRCBLENDALPHA") ) return 100; if ( !_stricmp(a1, "DESTBLENDALPHA") ) return 101; if ( !_stricmp(a1, "BLENDOPALPHA") ) return 102; if ( !_stricmp(a1, "VIEWPORTENABLE") ) return 103; if ( !_stricmp(a1, "HIGHPRECISIONBLENDENABLE") ) return 104; if ( !_stricmp(a1, "HIGHPRECISIONBLENDENABLE1") ) return 105; if ( !_stricmp(a1, "HIGHPRECISIONBLENDENABLE2") ) return 106; if ( !_stricmp(a1, "HIGHPRECISIONBLENDENABLE3") ) return 107; if ( !_stricmp(a1, "TESSELLATIONMODE") ) return 108; if ( !_stricmp(a1, "LINEPATTERN") || !_stricmp(a1, "EDGEANTIALIAS") || !_stricmp(a1, "ZBIAS") || !_stricmp(a1, "SOFTWAREVERTEXPROCESSING") || !_stricmp(a1, "PATCHSEGMENTS") || !_stricmp(a1, "POSITIONORDER") || !_stricmp(a1, "NORMALORDER") || !_stricmp(a1, "BLENDCOLOR") || !_stricmp(a1, "SWATHWIDTH") || !_stricmp(a1, "POLYGONOFFSETZSLOPESCALE") || !_stricmp(a1, "POLYGONOFFSETZOFFSET") || !_stricmp(a1, "POINTOFFSETENABLE") || !_stricmp(a1, "WIREFRAMEOFFSETENABLE") || !_stricmp(a1, "SOLIDOFFSETENABLE") || !_stricmp(a1, "DEPTHCLIPCONTROL") || !_stricmp(a1, "STIPPLEENABLE") || !_stricmp(a1, "BACKSPECULARMATERIALSOURCE") || !_stricmp(a1, "BACKDIFFUSEMATERIALSOURCE") || !_stricmp(a1, "BACKAMBIENTMATERIALSOURCE") || !_stricmp(a1, "BACKEMISSIVEMATERIALSOURCE") || !_stricmp(a1, "BACKAMBIENT") || !_stricmp(a1, "SWAPFILTER") || !_stricmp(a1, "PRESENTATIONINTERVAL") || !_stricmp(a1, "BACKFILLMODE") || !_stricmp(a1, "TWOSIDEDLIGHTING") || !_stricmp(a1, "FRONTFACE") || !_stricmp(a1, "LOGICOP") || !_stricmp(a1, "MULTISAMPLEMODE") || !_stricmp(a1, "MULTISAMPLERENDERTARGETMODE") || !_stricmp(a1, "SHADOWFUNC") || !_stricmp(a1, "LINEWIDTH") || !_stricmp(a1, "SAMPLEALPHA") || !_stricmp(a1, "DXT1NOISEENABLE") || !_stricmp(a1, "YUVENABLE") || !_stricmp(a1, "OCCLUSIONCULLENABLE") || !_stricmp(a1, "STENCILCULLENABLE") || !_stricmp(a1, "ROPZCMPALWAYSREAD") || !_stricmp(a1, "ROPZREAD") || !_stricmp(a1, "DONOTCULLUNCOMPRESSED") || !_stricmp(a1, "PSTEXTUREMODES") || !_stricmp(a1, "PSALPHAINPUTS0") || !_stricmp(a1, "PSALPHAINPUTS1") || !_stricmp(a1, "PSALPHAINPUTS2") || !_stricmp(a1, "PSALPHAINPUTS3") || !_stricmp(a1, "PSALPHAINPUTS4") || !_stricmp(a1, "PSALPHAINPUTS5") || !_stricmp(a1, "PSALPHAINPUTS6") || !_stricmp(a1, "PSALPHAINPUTS7") || !_stricmp(a1, "PSFINALCOMBINERINPUTSABCD") || !_stricmp(a1, "PSFINALCOMBINERINPUTSEFG") || !_stricmp(a1, "PSCONSTANT0_0") || !_stricmp(a1, "PSCONSTANT0_1") || !_stricmp(a1, "PSCONSTANT0_2") || !_stricmp(a1, "PSCONSTANT0_3") || !_stricmp(a1, "PSCONSTANT0_4") || !_stricmp(a1, "PSCONSTANT0_5") || !_stricmp(a1, "PSCONSTANT0_6") || !_stricmp(a1, "PSCONSTANT0_7") || !_stricmp(a1, "PSCONSTANT1_0") || !_stricmp(a1, "PSCONSTANT1_1") || !_stricmp(a1, "PSCONSTANT1_2") || !_stricmp(a1, "PSCONSTANT1_3") || !_stricmp(a1, "PSCONSTANT1_4") || !_stricmp(a1, "PSCONSTANT1_5") || !_stricmp(a1, "PSCONSTANT1_6") || !_stricmp(a1, "PSCONSTANT1_7") || !_stricmp(a1, "PSALPHAOUTPUTS0") || !_stricmp(a1, "PSALPHAOUTPUTS1") || !_stricmp(a1, "PSALPHAOUTPUTS2") || !_stricmp(a1, "PSALPHAOUTPUTS3") || !_stricmp(a1, "PSALPHAOUTPUTS4") || !_stricmp(a1, "PSALPHAOUTPUTS5") || !_stricmp(a1, "PSALPHAOUTPUTS6") || !_stricmp(a1, "PSALPHAOUTPUTS7") || !_stricmp(a1, "PSRGBINPUTS0") || !_stricmp(a1, "PSRGBINPUTS1") || !_stricmp(a1, "PSRGBINPUTS2") || !_stricmp(a1, "PSRGBINPUTS3") || !_stricmp(a1, "PSRGBINPUTS4") || !_stricmp(a1, "PSRGBINPUTS5") || !_stricmp(a1, "PSRGBINPUTS6") || !_stricmp(a1, "PSRGBINPUTS7") || !_stricmp(a1, "PSCOMPAREMODE") || !_stricmp(a1, "PSFINALCOMBINERCONSTANT0") || !_stricmp(a1, "PSFINALCOMBINERCONSTANT1") || !_stricmp(a1, "PSRGBOUTPUTS0") || !_stricmp(a1, "PSRGBOUTPUTS1") || !_stricmp(a1, "PSRGBOUTPUTS2") || !_stricmp(a1, "PSRGBOUTPUTS3") || !_stricmp(a1, "PSRGBOUTPUTS4") || !_stricmp(a1, "PSRGBOUTPUTS5") || !_stricmp(a1, "PSRGBOUTPUTS6") || !_stricmp(a1, "PSRGBOUTPUTS7") || !_stricmp(a1, "PSCOMBINERCOUNT") || !_stricmp(a1, "PSDOTMAPPING") || !_stricmp(a1, "PSINPUTTEXTURE") ) { return 2147483646; } } return 0x7FFFFFFF; } //----- (00966740) -------------------------------------------------------- char __cdecl sub_966740(int a1, char *a2, int a3) { int v3; // eax char result; // al int v5; // eax int v6; // eax bool v7; // zf int v8; // eax *(_DWORD *)a3 = 0; if ( !a2 || !*a2 ) return 0; switch ( a1 ) { case 0: if ( !_stricmp(a2, "ZB_FALSE") ) goto LABEL_102; if ( !_stricmp(a2, "ZB_TRUE") ) goto LABEL_81; v5 = _stricmp(a2, "ZB_USEW"); goto LABEL_118; case 1: if ( !_stricmp(a2, "POINT") ) goto LABEL_102; if ( !_stricmp(a2, "WIREFRAME") ) goto LABEL_81; v5 = _stricmp(a2, "SOLID"); goto LABEL_118; case 2: if ( !_stricmp(a2, "FLAT") ) goto LABEL_102; if ( !_stricmp(a2, "GOURAUD") ) goto LABEL_81; v5 = _stricmp(a2, "PHONG"); goto LABEL_118; case 6: case 7: case 100: case 101: if ( !_stricmp(a2, "ZERO") ) goto LABEL_102; if ( !_stricmp(a2, "ONE") ) goto LABEL_81; if ( !_stricmp(a2, "SRCCOLOR") ) goto LABEL_119; if ( !_stricmp(a2, "INVSRCCOLOR") ) goto LABEL_63; if ( !_stricmp(a2, "SRCALPHA") ) goto LABEL_87; if ( !_stricmp(a2, "INVSRCALPHA") ) goto LABEL_89; if ( !_stricmp(a2, "DESTALPHA") ) goto LABEL_71; if ( !_stricmp(a2, "INVDESTALPHA") ) goto LABEL_74; if ( !_stricmp(a2, "DESTCOLOR") ) { *(_DWORD *)a3 = 8; return 1; } if ( !_stricmp(a2, "INVDESTCOLOR") ) { *(_DWORD *)a3 = 9; return 1; } if ( !_stricmp(a2, "SRCALPHASAT") ) { *(_DWORD *)a3 = 10; return 1; } if ( !_stricmp(a2, "BOTHSRCALPHA") ) { *(_DWORD *)a3 = 11; return 1; } if ( !_stricmp(a2, "BOTHINVSRCALPHA") ) { *(_DWORD *)a3 = 12; return 1; } if ( !_stricmp(a2, "CONSTANTCOLOR") || !_stricmp(a2, "BLENDFACTOR") ) { *(_DWORD *)a3 = 13; return 1; } if ( !_stricmp(a2, "INVCONSTANTCOLOR") || !_stricmp(a2, "INVBLENDFACTOR") ) { *(_DWORD *)a3 = 14; return 1; } if ( !_stricmp(a2, "CONSTANTALPHA") ) { *(_DWORD *)a3 = 15; return 1; } if ( !_stricmp(a2, "INVCONSTANTALPHA") ) { *(_DWORD *)a3 = 16; return 1; } goto LABEL_114; case 8: if ( !_stricmp(a2, "NONE") ) goto LABEL_102; if ( !_stricmp(a2, "CW") ) goto LABEL_81; v5 = _stricmp(a2, "CCW"); goto LABEL_118; case 9: case 11: case 26: case 84: if ( !_stricmp(a2, "NEVER") ) goto LABEL_102; if ( !_stricmp(a2, "LESS") ) goto LABEL_81; if ( !_stricmp(a2, "EQUAL") ) goto LABEL_119; if ( !_stricmp(a2, "LESSEQUAL") ) goto LABEL_63; if ( !_stricmp(a2, "GREATER") ) goto LABEL_87; if ( !_stricmp(a2, "NOTEQUAL") ) goto LABEL_89; if ( !_stricmp(a2, "GREATEREQUAL") ) goto LABEL_71; v3 = _stricmp(a2, "ALWAYS"); goto LABEL_73; case 17: case 42: if ( !_stricmp(a2, "NONE") ) goto LABEL_102; if ( !_stricmp(a2, "EXP") ) goto LABEL_81; if ( !_stricmp(a2, "EXP2") ) goto LABEL_119; v7 = _stricmp(a2, "LINEAR") == 0; goto LABEL_62; case 23: case 24: case 25: case 81: case 82: case 83: if ( !_stricmp(a2, "KEEP") ) goto LABEL_102; if ( !_stricmp(a2, "ZERO") ) goto LABEL_81; if ( !_stricmp(a2, "REPLACE") ) goto LABEL_119; if ( !_stricmp(a2, "INCRSAT") ) goto LABEL_63; if ( !_stricmp(a2, "DECRSAT") ) goto LABEL_87; if ( !_stricmp(a2, "INVERT") ) goto LABEL_89; if ( !_stricmp(a2, "INCR") ) goto LABEL_71; v3 = _stricmp(a2, "DECR"); goto LABEL_73; case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: if ( !_stricmp(a2, "DISABLED") ) goto LABEL_102; if ( !_stricmp(a2, "U") ) goto LABEL_81; if ( !_stricmp(a2, "V") ) goto LABEL_119; if ( !_stricmp(a2, "W") ) goto LABEL_63; if ( !_stricmp(a2, "UV") ) goto LABEL_87; if ( !_stricmp(a2, "UW") ) goto LABEL_89; if ( !_stricmp(a2, "VW") ) { LABEL_71: *(_DWORD *)a3 = 6; return 1; } v3 = _stricmp(a2, "UVW"); LABEL_73: if ( v3 ) goto LABEL_114; LABEL_74: *(_DWORD *)a3 = 7; return 1; case 46: case 47: case 48: case 49: if ( !_stricmp(a2, "MATERIAL") ) goto LABEL_102; if ( !_stricmp(a2, "COLOR1") ) goto LABEL_81; v5 = _stricmp(a2, "COLOR2"); goto LABEL_118; case 50: if ( !_stricmp(a2, "DISABLE") ) goto LABEL_102; if ( !_stricmp(a2, "1WEIGHTS") ) goto LABEL_81; if ( !_stricmp(a2, "2WEIGHTS") ) goto LABEL_119; if ( !_stricmp(a2, "3WEIGHTS") ) goto LABEL_63; if ( !_stricmp(a2, "TWEENING") ) goto LABEL_87; if ( !_stricmp(a2, "0WEIGHTS") ) { LABEL_89: *(_DWORD *)a3 = 5; return 1; } if ( !_stricmp(a2, "2WEIGHTS2MATRICES") || !_stricmp(a2, "3WEIGHTS3MATRICES") ) goto LABEL_94; v6 = _stricmp(a2, "4WEIGHTS4MATRICES"); goto LABEL_93; case 61: if ( !_stricmp(a2, "DISCRETE") ) goto LABEL_102; v8 = _stricmp(a2, "CONTINUOUS"); goto LABEL_80; case 62: if ( !_stricmp(a2, "ENABLE") ) goto LABEL_102; v8 = _stricmp(a2, "DISABLE"); LABEL_80: if ( !v8 ) goto LABEL_81; goto LABEL_114; case 67: case 102: if ( !_stricmp(a2, "ADD") ) goto LABEL_102; if ( !_stricmp(a2, "SUBTRACT") ) goto LABEL_81; if ( !_stricmp(a2, "REVSUBTRACT") ) goto LABEL_119; if ( !_stricmp(a2, "MIN") ) goto LABEL_63; if ( !_stricmp(a2, "MAX") ) { LABEL_87: *(_DWORD *)a3 = 4; return 1; } if ( _stricmp(a2, "ADDSIGNED") ) { v6 = _stricmp(a2, "REVSUBTRACTSIGNED"); LABEL_93: if ( v6 ) goto LABEL_114; } LABEL_94: *(_DWORD *)a3 = 2147483646; return 1; case 68: case 69: if ( !_stricmp(a2, "LINEAR") ) goto LABEL_81; if ( _stricmp(a2, "QUADRATIC") ) { if ( !_stricmp(a2, "CUBIC") ) { v7 = a1 == 68; LABEL_62: if ( v7 ) { LABEL_63: *(_DWORD *)a3 = 3; return 1; } } else { _stricmp(a2, "QUINTIC"); } goto LABEL_114; } if ( a1 != 69 ) goto LABEL_114; *(_DWORD *)a3 = 2; result = 1; break; case 108: if ( !_stricmp(a2, "DISCRETE") ) { LABEL_102: *(_DWORD *)a3 = 0; result = 1; } else if ( !_stricmp(a2, "CONTINUOUS") ) { LABEL_81: *(_DWORD *)a3 = 1; result = 1; } else { v5 = _stricmp(a2, "PEREDGE"); LABEL_118: if ( v5 ) { LABEL_114: result = 0; } else { LABEL_119: *(_DWORD *)a3 = 2; result = 1; } } break; default: goto LABEL_114; } return result; } //----- (00967020) -------------------------------------------------------- char __cdecl sub_967020(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 7; result = 1; break; case 1: *a2 = 8; result = 1; break; case 2: *a2 = 9; result = 1; break; case 3: *a2 = 14; result = 1; break; case 4: *a2 = 15; result = 1; break; case 5: *a2 = 16; result = 1; break; case 6: *a2 = 19; result = 1; break; case 7: *a2 = 20; result = 1; break; case 8: *a2 = 22; result = 1; break; case 9: *a2 = 23; result = 1; break; case 10: *a2 = 24; result = 1; break; case 11: *a2 = 25; result = 1; break; case 12: *a2 = 26; result = 1; break; case 13: *a2 = 27; result = 1; break; case 14: *a2 = 28; result = 1; break; case 15: *a2 = 29; result = 1; break; case 16: *a2 = 34; result = 1; break; case 17: *a2 = 35; result = 1; break; case 18: *a2 = 36; result = 1; break; case 19: *a2 = 37; result = 1; break; case 20: *a2 = 38; result = 1; break; case 21: *a2 = 48; result = 1; break; case 22: *a2 = 52; result = 1; break; case 23: *a2 = 53; result = 1; break; case 24: *a2 = 54; result = 1; break; case 25: *a2 = 55; result = 1; break; case 26: *a2 = 56; result = 1; break; case 27: *a2 = 57; result = 1; break; case 28: *a2 = 58; result = 1; break; case 29: *a2 = 59; result = 1; break; case 30: *a2 = 60; result = 1; break; case 31: *a2 = 128; result = 1; break; case 32: *a2 = 129; result = 1; break; case 33: *a2 = 130; result = 1; break; case 34: *a2 = 131; result = 1; break; case 35: *a2 = 132; result = 1; break; case 36: *a2 = 133; result = 1; break; case 37: *a2 = 134; result = 1; break; case 38: *a2 = 135; result = 1; break; case 39: *a2 = 136; result = 1; break; case 40: *a2 = 137; result = 1; break; case 41: *a2 = 139; result = 1; break; case 42: *a2 = 140; result = 1; break; case 43: *a2 = 141; result = 1; break; case 44: *a2 = 142; result = 1; break; case 45: *a2 = 143; result = 1; break; case 46: *a2 = 145; result = 1; break; case 47: *a2 = 146; result = 1; break; case 48: *a2 = 147; result = 1; break; case 49: *a2 = 148; result = 1; break; case 50: *a2 = 151; result = 1; break; case 51: *a2 = 152; result = 1; break; case 52: *a2 = 154; result = 1; break; case 53: *a2 = 155; result = 1; break; case 54: *a2 = 156; result = 1; break; case 55: *a2 = 157; result = 1; break; case 56: *a2 = 158; result = 1; break; case 57: *a2 = 159; result = 1; break; case 58: *a2 = 160; result = 1; break; case 59: *a2 = 161; result = 1; break; case 60: *a2 = 162; result = 1; break; case 61: *a2 = 163; result = 1; break; case 62: *a2 = 165; result = 1; break; case 63: *a2 = 166; result = 1; break; case 64: *a2 = 167; result = 1; break; case 65: *a2 = 168; result = 1; break; case 66: *a2 = 170; result = 1; break; case 67: *a2 = 171; result = 1; break; case 68: *a2 = 172; result = 1; break; case 69: *a2 = 173; result = 1; break; case 70: *a2 = 174; result = 1; break; case 71: *a2 = 175; result = 1; break; case 72: *a2 = 176; result = 1; break; case 73: *a2 = 178; result = 1; break; case 74: *a2 = 179; result = 1; break; case 75: *a2 = 180; result = 1; break; case 76: *a2 = 181; result = 1; break; case 77: *a2 = 182; result = 1; break; case 78: *a2 = 183; result = 1; break; case 79: *a2 = 184; result = 1; break; case 80: *a2 = 185; result = 1; break; case 81: *a2 = 186; result = 1; break; case 82: *a2 = 187; result = 1; break; case 83: *a2 = 188; result = 1; break; case 84: *a2 = 189; result = 1; break; case 85: *a2 = 190; result = 1; break; case 86: *a2 = 191; result = 1; break; case 87: *a2 = 192; result = 1; break; case 88: *a2 = 193; result = 1; break; case 89: *a2 = 194; result = 1; break; case 90: *a2 = 195; result = 1; break; case 91: *a2 = 198; result = 1; break; case 92: *a2 = 199; result = 1; break; case 93: *a2 = 200; result = 1; break; case 94: *a2 = 201; result = 1; break; case 95: *a2 = 202; result = 1; break; case 96: *a2 = 203; result = 1; break; case 97: *a2 = 204; result = 1; break; case 98: *a2 = 205; result = 1; break; case 99: *a2 = 206; result = 1; break; case 100: *a2 = 207; result = 1; break; case 101: *a2 = 208; result = 1; break; case 102: *a2 = 209; result = 1; break; default: result = 0; break; } return result; } //----- (00967720) -------------------------------------------------------- char __cdecl sub_967720(int a1, _DWORD *a2) { char result; // al if ( a1 ) { if ( a1 == 1 ) { *a2 = 2; result = 1; } else if ( a1 == 2 ) { *a2 = 3; result = 1; } else { result = 0; } } else { *a2 = 1; result = 1; } return result; } //----- (00967760) -------------------------------------------------------- char __cdecl sub_967760(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 1; result = 1; break; case 1: *a2 = 2; result = 1; break; case 2: *a2 = 3; result = 1; break; case 3: *a2 = 4; result = 1; break; case 4: *a2 = 5; result = 1; break; case 5: *a2 = 6; result = 1; break; case 6: *a2 = 7; result = 1; break; case 7: *a2 = 8; result = 1; break; case 8: *a2 = 9; result = 1; break; case 9: *a2 = 10; result = 1; break; case 10: *a2 = 11; result = 1; break; case 11: *a2 = 12; result = 1; break; case 12: *a2 = 13; result = 1; break; case 13: *a2 = 14; result = 1; break; case 14: *a2 = 15; result = 1; break; default: result = 0; break; } return result; } //----- (00967880) -------------------------------------------------------- char __cdecl sub_967880(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 0; result = 1; break; case 1: *a2 = 1; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 3; result = 1; break; default: result = 0; break; } return result; } //----- (009678E0) -------------------------------------------------------- char __cdecl sub_9678E0(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 1; result = 1; break; case 1: *a2 = 2; result = 1; break; case 2: *a2 = 3; result = 1; break; case 3: *a2 = 4; result = 1; break; case 4: *a2 = 5; result = 1; break; case 5: *a2 = 6; result = 1; break; case 6: *a2 = 7; result = 1; break; case 7: *a2 = 8; result = 1; break; default: result = 0; break; } return result; } //----- (00967980) -------------------------------------------------------- char __cdecl sub_967980(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 0; result = 1; break; case 1: *a2 = 1; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 4; result = 1; break; case 4: *a2 = 3; result = 1; break; case 5: *a2 = 5; result = 1; break; case 6: *a2 = 6; result = 1; break; case 7: *a2 = 7; result = 1; break; default: result = 0; break; } return result; } //----- (00967A20) -------------------------------------------------------- char __cdecl sub_967A20(int a1, _DWORD *a2) { char result; // al if ( a1 ) { if ( a1 == 1 ) { *a2 = 1; result = 1; } else if ( a1 == 2 ) { *a2 = 2; result = 1; } else { result = 0; } } else { *a2 = 0; result = 1; } return result; } //----- (00967A60) -------------------------------------------------------- char __cdecl sub_967A60(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 0; result = 1; break; case 1: *a2 = 1; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 3; result = 1; break; case 4: *a2 = 255; result = 1; break; case 5: *a2 = 256; result = 1; break; default: result = 0; break; } return result; } //----- (00967AE0) -------------------------------------------------------- char __cdecl sub_967AE0(int a1, _DWORD *a2) { char result; // al if ( a1 ) { if ( a1 == 1 ) { *a2 = 1; result = 1; } else { result = 0; } } else { *a2 = 0; result = 1; } return result; } //----- (00967B10) -------------------------------------------------------- char __cdecl sub_967B10(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 1: *a2 = 1; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 3; result = 1; break; case 5: *a2 = 5; result = 1; break; default: result = 0; break; } return result; } //----- (00967B70) -------------------------------------------------------- char __cdecl sub_967B70(int a1, int a2, int *a3) { char result; // al switch ( a1 ) { case 0: result = sub_967A20(a2, a3); break; case 1: result = sub_967720(a2, a3); break; case 2: result = sub_967720(a2, a3); break; case 6: case 7: result = sub_967760(a2, a3); break; case 8: result = sub_967720(a2, a3); break; case 9: case 11: case 26: result = sub_9678E0(a2, a3); break; case 17: case 42: result = sub_967880(a2, a3); break; case 23: case 24: case 25: result = sub_9678E0(a2, a3); break; case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: result = sub_967980(a2, a3); break; case 46: case 47: case 48: case 49: result = sub_967A20(a2, a3); break; case 50: result = sub_967A60(a2, a3); break; case 61: result = sub_967AE0(a2, a3); break; case 62: result = sub_967AE0(a2, a3); break; case 67: result = sub_96A870(a2, a3); break; case 68: case 69: result = sub_967B10(a2, a3); break; case 108: result = 0; break; default: *a3 = a2; result = 1; break; } return result; } //----- (00967D60) -------------------------------------------------------- char __thiscall sub_967D60(_DWORD *this, int a2) { return sub_969FF0(this, a2); } //----- (00967D70) -------------------------------------------------------- char __thiscall sub_967D70(_DWORD *this, unsigned int a2) { return sub_96A090(this, a2); } //----- (00967D80) -------------------------------------------------------- char __thiscall sub_967D80(_DWORD *this, int a2) { return sub_96A130(this, a2); } //----- (00967D90) -------------------------------------------------------- void *__thiscall sub_967D90(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4BD68: using guessed type void *NiTListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; //----- (00967DC0) -------------------------------------------------------- int __thiscall sub_967DC0(_DWORD *this) { _DWORD *v1; // edx int result; // eax v1 = (_DWORD *)this[2]; result = 0; *this = v1; if ( v1 ) { *this = *v1; result = v1[2]; } return result; } //----- (00967DE0) -------------------------------------------------------- int __thiscall sub_967DE0(_DWORD *this) { _DWORD *v1; // edx int result; // eax v1 = (_DWORD *)*this; result = 0; if ( *this ) { *this = *v1; result = v1[2]; } return result; } //----- (00967DF0) -------------------------------------------------------- int __thiscall sub_967DF0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; return result; } // A4BD68: using guessed type void *NiTListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; // A4BD78: using guessed type void *NiTPointerListBase,NSBStateGroup::NSBSGEntry *>::`vftable'; //----- (00967E30) -------------------------------------------------------- void *__thiscall sub_967E30(void *this, char a2) { void *v2; // esi v2 = this; sub_967DF0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00967E60) -------------------------------------------------------- int __thiscall sub_967E60(_DWORD *this) { _DWORD *v1; // esi int v2; // eax _DWORD *v3; // eax void **v4; // edi _DWORD *v5; // edi _DWORD *v6; // esi _DWORD *v7; // ST04_4 v1 = this; v2 = this[2]; *this = v2; if ( v2 ) { do { v3 = (_DWORD *)*v1; *v1 = *(_DWORD *)*v1; v4 = (void **)v3[2]; if ( v4 ) { operator delete(v4[3]); operator delete(v4); } } while ( *v1 ); } v5 = v1 + 1; v6 = (_DWORD *)v1[2]; while ( v6 ) { v7 = v6; v6 = (_DWORD *)*v6; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v5 + 8))(v5, v7); } v5[3] = 0; v5[1] = 0; v5[2] = 0; return sub_967DF0(v5); } //----- (00967ED0) -------------------------------------------------------- _DWORD *__thiscall sub_967ED0(_DWORD *this, int ArgList, int a3, char a4, char a5) { _DWORD *v5; // ebx _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *v8; // eax unsigned int *v9; // eax unsigned int *v10; // edi _DWORD *result; // eax unsigned int v12; // eax unsigned int v13; // eax _DWORD *v14; // ecx v5 = this; v6 = (_DWORD *)this[2]; v7 = 0; *this = v6; if ( v6 ) { *this = *v6; v7 = (_DWORD *)v6[2]; } if ( !v7 ) goto LABEL_8; while ( v7[1] != ArgList ) { v8 = (_DWORD *)*this; v7 = 0; if ( *this ) { *this = *v8; v7 = (_DWORD *)v8[2]; } if ( !v7 ) goto LABEL_8; } if ( v7 ) { sub_92BE70( "Warning: NSBStateGroup::SetState> Overwriting State 0x%08x - original value 0x%08x - new value 0x%08x\n", ArgList, v7[2], a3); result = (_DWORD *)sub_863460( 1, 1, "* WARNING: NSBStateGroup::SetState\n" " Overwriting State 0x%08x\n" " Original Value = 0x%08x\n" " New Value = 0x%08x\n", ArgList, v7[2], a3); v7[2] = a3; if ( a4 ) *v7 |= 1u; else *v7 &= 0xFFFFFFFE; *v7 &= 0xFFFFFFFD; } else { LABEL_8: v9 = (unsigned int *)operator new(0x10u); v10 = 0; if ( v9 ) { *v9 = 0; v9[3] = 0; v9[1] = -1; v9[2] = -1; v10 = v9; } v10[1] = ArgList; v10[2] = a3; if ( a4 ) *v10 |= 1u; else *v10 &= 0xFFFFFFFE; *v10 &= 0xFFFFFFFD; v12 = *v10; if ( a5 ) v13 = v12 | 4; else v13 = v12 & 0xFFFFFFFB; *v10 = v13; result = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v5[1] + 4))(v5 + 1); result[2] = v10; *result = 0; result[1] = v5[3]; v14 = (_DWORD *)v5[3]; if ( v14 ) { *v14 = result; ++v5[4]; } else { ++v5[4]; v5[2] = result; } v5[3] = result; } return result; } //----- (00967FF0) -------------------------------------------------------- bool __thiscall sub_967FF0(_DWORD *this, signed int a2) { signed int v2; // esi _DWORD *v3; // edi void (__cdecl *v4)(signed int, int *, signed int, int *, signed int); // eax _DWORD *v5; // eax int v6; // ebx void (__cdecl *v7)(signed int, int, signed int, int *, signed int); // eax void (__cdecl *v8)(signed int, int, signed int, int *, signed int); // eax void (__cdecl *v9)(signed int, int, signed int, int *, signed int); // eax _DWORD *v10; // eax int v12; // [esp+Ch] [ebp-10h] int v13; // [esp+10h] [ebp-Ch] int v14; // [esp+14h] [ebp-8h] int v15; // [esp+18h] [ebp-4h] int v16; // [esp+24h] [ebp+8h] v2 = a2; v3 = this; v15 = this[4]; v4 = *(void (__cdecl **)(signed int, int *, signed int, int *, signed int))(a2 + 8); v14 = 4; v4(a2, &v15, 4, &v14, 1); v5 = (_DWORD *)v3[2]; v6 = 0; v16 = 0; *v3 = v5; if ( v5 ) { *v3 = *v5; v6 = v5[2]; } if ( !v6 ) return v16 == v15; while ( 1 ) { v7 = *(void (__cdecl **)(signed int, int, signed int, int *, signed int))(v2 + 8); v14 = 4; v7(v2, v6, 4, &v14, 1); v8 = *(void (__cdecl **)(signed int, int, signed int, int *, signed int))(v2 + 8); v13 = 4; v8(v2, v6 + 4, 4, &v13, 1); v9 = *(void (__cdecl **)(signed int, int, signed int, int *, signed int))(v2 + 8); v12 = 4; v9(v2, v6 + 8, 4, &v12, 1); if ( !sub_92C1E0(v2, *(const char **)(v6 + 12)) ) break; v10 = (_DWORD *)*v3; ++v16; v6 = 0; if ( *v3 ) { *v3 = *v10; v6 = v10[2]; } if ( !v6 ) return v16 == v15; } return 0; } // 6: found interdependent unknown calls //----- (009680D0) -------------------------------------------------------- _DWORD *__thiscall sub_9680D0(_DWORD *this) { _DWORD *result; // eax _DWORD *v2; // esi result = this; v2 = this + 1; v2[3] = 0; v2[1] = 0; v2[2] = 0; *v2 = &NiTPointerList::`vftable'; v2[3] = 0; v2[1] = 0; v2[2] = 0; return result; } // A4BD88: using guessed type void *NiTPointerList::`vftable'; //----- (00968120) -------------------------------------------------------- char __thiscall sub_968120(_DWORD *this, int a2) { int v2; // ebx void (__cdecl *v3)(int, unsigned int *, signed int, int *, signed int); // edx void **v4; // eax void **v5; // edi void (__cdecl *v6)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, void **, signed int, int *, signed int); // ecx void (__cdecl *v8)(int, void **, signed int, int *, signed int); // ecx _DWORD *v9; // eax _DWORD *v10; // ecx _DWORD *v12; // [esp+Ch] [ebp-18h] int v13; // [esp+10h] [ebp-14h] int v14; // [esp+14h] [ebp-10h] int v15; // [esp+18h] [ebp-Ch] int v16; // [esp+1Ch] [ebp-8h] unsigned int v17; // [esp+20h] [ebp-4h] int v18; // [esp+2Ch] [ebp+8h] v2 = a2; v3 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v12 = this; v16 = 4; v3(a2, &v17, 4, &v16, 1); v18 = 0; if ( !v17 ) return 1; while ( 1 ) { v4 = (void **)operator new(0x10u); if ( v4 ) { *v4 = 0; v4[1] = (void *)-1; v4[2] = (void *)-1; v4[3] = 0; v5 = v4; } else { v5 = 0; } v6 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v16 = 4; v6(v2, v5, 4, &v16, 1); v7 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v15 = 4; v7(v2, v5 + 1, 4, &v15, 1); v8 = *(void (__cdecl **)(int, void **, signed int, int *, signed int))(v2 + 4); v14 = 4; v8(v2, v5 + 2, 4, &v14, 1); v13 = 0; if ( !sub_92C250(v2, v5 + 3, &v13) ) break; v9 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v12[1] + 4))(v12 + 1); v9[2] = v5; *v9 = 0; v9[1] = v12[3]; v10 = (_DWORD *)v12[3]; if ( v10 ) *v10 = v9; else v12[2] = v9; ++v12[4]; v12[3] = v9; if ( ++v18 >= v17 ) return 1; } return 0; } //----- (00968240) -------------------------------------------------------- int __thiscall sub_968240(void *this) { return *(_DWORD *)this; } //----- (00968250) -------------------------------------------------------- rsize_t __thiscall sub_968250(int this, char *Src) { return sub_92C100(this, 0, Src); } //----- (00968270) -------------------------------------------------------- char __thiscall sub_968270(_BYTE *this, char a2) { char result; // al result = a2; this[4] = a2; return result; } //----- (00968280) -------------------------------------------------------- const char *__cdecl sub_968280(int a1) { const char *result; // eax switch ( a1 ) { case 0: result = "Float1"; break; case 1: result = "Float2"; break; case 2: result = "Float3"; break; case 3: result = "Float4"; break; case 4: result = "UByteColor"; break; case 5: result = "UByte4"; break; case 6: result = "Short1"; break; case 7: result = "Short2"; break; case 8: result = "Short3"; break; case 9: result = "Short4"; break; case 10: result = "NormShort1"; break; case 11: result = "NormShort2"; break; case 12: result = "NormShort3"; break; case 13: result = "NormShort4"; break; case 14: result = "NormPacked3"; break; case 15: result = "PByte1"; break; case 16: result = "PByte2"; break; case 17: result = "PByte3"; break; case 18: result = "PByte4"; break; case 19: result = "Float2H"; break; default: result = "UNKNOWN"; break; } return result; } //----- (00968380) -------------------------------------------------------- const char *__cdecl sub_968380(int a1) { const char *result; // eax if ( a1 < 0 ) return "ExtraData"; switch ( a1 ) { case 0: result = "NiPosition"; break; case 1: result = "NiBlendWeight"; break; case 2: result = "NiBlendIndices"; break; case 3: result = "NiNormal"; break; case 4: result = "NiColor"; break; case 5: result = "NiTexCoord0"; break; case 6: result = "NiTexCoord1"; break; case 7: result = "NiTexCoord2"; break; case 8: result = "NiTexCoord3"; break; case 9: result = "NiTexCoord4"; break; case 10: result = "NiTexCoord5"; break; case 11: result = "NiTexCoord6"; break; case 12: result = "NiTexCoord7"; break; case 13: result = "NiTangent"; break; case 14: result = "NiBinormal"; break; default: result = "UNKNOWN"; break; } return result; } //----- (00968450) -------------------------------------------------------- _DWORD *__thiscall sub_968450(_DWORD *this, int a2, int a3) { return sub_96A2F0(this, a3); } //----- (00968460) -------------------------------------------------------- signed int __stdcall sub_968460(int a1) { return sub_96A1D0(a1); } //----- (00968470) -------------------------------------------------------- void *__thiscall sub_968470(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiTListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; if ( a2 & 1 ) operator delete(this); return v2; } // A4BFF4: using guessed type void *NiTListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; //----- (009684A0) -------------------------------------------------------- int __thiscall sub_9684A0(_DWORD *this) { _DWORD *v1; // edx int result; // eax v1 = (_DWORD *)this[4]; result = 0; this[2] = v1; if ( v1 ) { this[2] = *v1; result = v1[2]; } return result; } //----- (009684C0) -------------------------------------------------------- int __thiscall sub_9684C0(_DWORD *this) { int result; // eax _DWORD *v2; // eax result = 0; if ( this[2] ) { v2 = (_DWORD *)this[2]; this[2] = *v2; result = v2[2]; } return result; } //----- (009684E0) -------------------------------------------------------- unsigned int __thiscall sub_9684E0(_DWORD *this, _DWORD *a2, unsigned int *a3) { _DWORD *v3; // edx _DWORD *v4; // eax int *v5; // ecx int *v6; // eax int v7; // eax int v8; // ecx int *v9; // eax _DWORD *v10; // eax unsigned int result; // eax unsigned int v12; // ecx unsigned int v13; // ecx unsigned int v14; // ecx unsigned int v15; // ecx int v16; // [esp+Ch] [ebp-104h] int v17; // [esp+10h] [ebp-100h] int v18; // [esp+14h] [ebp-FCh] int v19[61]; // [esp+18h] [ebp-F8h] v3 = this; *a2 = 0; *a3 = 0; memset(&v16, 0, 0x100u); v4 = (_DWORD *)this[4]; v5 = 0; v3[2] = v4; if ( v4 ) { v3[2] = *v4; v5 = (int *)v4[2]; } v6 = v5; while ( v6 ) { v7 = *v6; v8 = *(&v16 + v7); v9 = &v16 + v7; if ( !v8 ) ++*a2; *v9 = v8 + 1; v6 = 0; if ( v3[2] ) { v10 = (_DWORD *)v3[2]; v3[2] = *v10; v6 = (int *)v10[2]; } } result = 0; do { v12 = *(&v16 + result); if ( v12 > *a3 ) *a3 = v12; v13 = *(&v17 + result); if ( v13 > *a3 ) *a3 = v13; v14 = *(&v18 + result); if ( v14 > *a3 ) *a3 = v14; v15 = v19[result]; if ( v15 > *a3 ) *a3 = v15; result += 4; } while ( result < 0x40 ); return result; } // 9684E0: using guessed type int var_F8[61]; //----- (009685C0) -------------------------------------------------------- int __thiscall sub_9685C0(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ST00_4 int result; // eax v1 = this; v2 = (_DWORD *)this[1]; for ( *this = &NiTPointerListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; v2; result = (*(int (__thiscall **)(_DWORD *, _DWORD *))(*v1 + 8))(v1, v3) ) { v3 = v2; v2 = (_DWORD *)*v2; } v1[3] = 0; v1[1] = 0; v1[2] = 0; *v1 = &NiTListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; return result; } // A4BFF4: using guessed type void *NiTListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; // A4C004: using guessed type void *NiTPointerListBase,NSBPackingDef::NSBPDEntry *>::`vftable'; //----- (00968600) -------------------------------------------------------- char __thiscall sub_968600(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi void (__cdecl *v4)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v5)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v8)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v9)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v10)(int, _DWORD *, signed int, int *, signed int); // eax int v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(a2 + 8); v12 = 4; v4(a2, v3, 4, &v12, 1); v5 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 8); v12 = 4; v5(v2, v3 + 1, 4, &v12, 1); v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 8); v12 = 4; v6(v2, v3 + 2, 4, &v12, 1); a2 = v3[3]; v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v12 = 4; v7(v2, &a2, 4, &v12, 1); a2 = v3[4]; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v12 = 4; v8(v2, &a2, 4, &v12, 1); a2 = v3[5]; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 8); v12 = 4; v9(v2, &a2, 4, &v12, 1); v10 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 8); v12 = 4; v10(v2, v3 + 6, 4, &v12, 1); return 1; } //----- (009686C0) -------------------------------------------------------- void *__thiscall sub_9686C0(void *this, char a2) { void *v2; // esi v2 = this; sub_9685C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (009686F0) -------------------------------------------------------- int __fastcall sub_9686F0(void **a1) { _DWORD *v1; // esi void *v2; // eax _DWORD *v3; // esi _DWORD *v4; // edi _DWORD *v5; // ST00_4 void **v7; // [esp+8h] [ebp-4h] v1 = a1[4]; v7 = a1; if ( v1 ) { do { v2 = (void *)v1[2]; v1 = (_DWORD *)*v1; if ( v2 ) operator delete(v2); } while ( v1 ); a1 = v7; } v3 = a1[4]; v4 = a1 + 3; while ( v3 ) { v5 = v3; v3 = (_DWORD *)*v3; (*(void (__thiscall **)(_DWORD *, _DWORD *))(*v4 + 8))(v4, v5); } v4[3] = 0; v4[1] = 0; v4[2] = 0; operator delete(*v7); return sub_9685C0(v4); } //----- (00968770) -------------------------------------------------------- char __thiscall sub_968770(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { _DWORD *v8; // edi _DWORD *v9; // eax int *v10; // esi _DWORD *v11; // eax int *v12; // eax char v13; // al _DWORD *v14; // eax _DWORD *v15; // ecx v8 = this; v9 = (_DWORD *)this[4]; v10 = 0; this[2] = v9; if ( v9 ) { this[2] = *v9; v10 = (int *)v9[2]; } if ( v10 ) { while ( *v10 != a2 || v10[1] != a3 ) { v10 = 0; if ( this[2] ) { v11 = (_DWORD *)this[2]; this[2] = *v11; v10 = (int *)v11[2]; } if ( !v10 ) goto LABEL_9; } sub_92BE70("WARNING> PackingDef %s - Entry stream %d register %d being written over!\n", *this, a2, a3); sub_863460( 1, 1, "* WARNING: NSBPackingDef::AddPackingEntry\n %s - overwriting stream %d, register %d\n", *v8, a2, a3); v13 = 0; } else { LABEL_9: v12 = (int *)operator new(0x1Cu); if ( !v12 ) return 0; *v12 = 0; v12[1] = 0; v12[2] = -1; v12[3] = 0x7FFFFFFF; v12[4] = 0; v12[5] = 0; v12[6] = 0; v10 = v12; v13 = 1; } *v10 = a2; v10[2] = a4; v10[3] = a5; v10[4] = a6; v10[1] = a3; v10[5] = a7; v10[6] = a8; if ( v13 ) { v14 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v8[3] + 4))(v8 + 3); v14[2] = v10; *v14 = 0; v14[1] = v8[5]; v15 = (_DWORD *)v8[5]; if ( v15 ) { *v15 = v14; ++v8[6]; v8[5] = v14; return 1; } ++v8[6]; v8[4] = v14; v8[5] = v14; } return 1; } //----- (009688A0) -------------------------------------------------------- char __thiscall sub_9688A0(const char **this, signed int a2) { const char **v2; // esi int v3; // edi char result; // al void (__cdecl *v5)(int, BOOL *, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, signed int *, signed int, int *, signed int); // edx const char *v7; // eax int v8; // ebx char *v9; // ecx const char *v10; // eax const char **v11; // eax BOOL v12; // [esp+8h] [ebp-8h] int v13; // [esp+Ch] [ebp-4h] v2 = this; v3 = a2; result = sub_92C1E0(a2, *this); if ( result ) { v12 = *((_BYTE *)v2 + 4) != 0; v5 = *(void (__cdecl **)(int, BOOL *, signed int, int *, signed int))(v3 + 8); v13 = 4; v5(v3, &v12, 4, &v13, 1); a2 = (signed int)v2[6]; v6 = *(void (__cdecl **)(int, signed int *, signed int, int *, signed int))(v3 + 8); v13 = 4; v6(v3, &a2, 4, &v13, 1); v7 = v2[4]; v8 = 0; v9 = 0; v2[2] = v7; if ( v7 ) { v2[2] = *(const char **)v7; v9 = (char *)*((_DWORD *)v7 + 2); } if ( v9 ) { do { if ( sub_968600(v9, v3) ) ++v8; v10 = 0; if ( v2[2] ) { v11 = (const char **)v2[2]; v2[2] = *v11; v10 = v11[2]; } v9 = (char *)v10; } while ( v10 ); } result = v8 == a2; } return result; } //----- (00968960) -------------------------------------------------------- char __thiscall sub_968960(_DWORD *this, int a2) { int v2; // esi _DWORD *v3; // edi void (__cdecl *v4)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v5)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v6)(int, _DWORD *, signed int, int *, signed int); // ecx void (__cdecl *v7)(int, int *, signed int, int *, signed int); // ecx void (__cdecl *v8)(int, int *, signed int, int *, signed int); // edx void (__cdecl *v9)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v10)(int, _DWORD *, signed int, int *, signed int); // eax int v12; // [esp+Ch] [ebp-4h] v2 = a2; v3 = this; v4 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(a2 + 4); v12 = 4; v4(a2, v3, 4, &v12, 1); v5 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 4); v12 = 4; v5(v2, v3 + 1, 4, &v12, 1); v6 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 4); v12 = 4; v6(v2, v3 + 2, 4, &v12, 1); v7 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v12 = 4; v7(v2, &a2, 4, &v12, 1); v3[3] = a2; v8 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v12 = 4; v8(v2, &a2, 4, &v12, 1); v3[4] = a2; v9 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(v2 + 4); v12 = 4; v9(v2, &a2, 4, &v12, 1); v3[5] = a2; v10 = *(void (__cdecl **)(int, _DWORD *, signed int, int *, signed int))(v2 + 4); v12 = 4; v10(v2, v3 + 6, 4, &v12, 1); return 1; } //----- (00968A20) -------------------------------------------------------- _DWORD *__thiscall sub_968A20(_DWORD *this) { _DWORD *v1; // ebx v1 = this; *this = 0; *((_BYTE *)this + 4) = 0; this[6] = 0; this[4] = 0; this[5] = 0; this[3] = &NiTPointerList::`vftable'; v1[6] = 0; v1[4] = 0; v1[5] = 0; return v1; } // A4C014: using guessed type void *NiTPointerList::`vftable'; //----- (00968A70) -------------------------------------------------------- char __thiscall sub_968A70(void **this, int a2) { int v2; // esi void **v3; // edi void (__cdecl *v5)(int, int *, signed int, int *, signed int); // eax void (__cdecl *v6)(int, unsigned int *, signed int, int *, signed int); // ecx _DWORD *v7; // eax _DWORD *v8; // edi _DWORD *v9; // eax _DWORD *v10; // ecx void **v11; // [esp+Ch] [ebp-14h] int v12; // [esp+10h] [ebp-10h] int v13; // [esp+14h] [ebp-Ch] unsigned int v14; // [esp+18h] [ebp-8h] int v15; // [esp+1Ch] [ebp-4h] v2 = a2; v3 = this; v11 = this; v13 = 0; if ( !sub_92C250(a2, this, &v13) ) return 0; v5 = *(void (__cdecl **)(int, int *, signed int, int *, signed int))(a2 + 4); v15 = 4; v5(a2, &v12, 4, &v15, 1); *((_BYTE *)v3 + 4) = v12 != 0; v6 = *(void (__cdecl **)(int, unsigned int *, signed int, int *, signed int))(a2 + 4); v15 = 4; v6(a2, &v14, 4, &v15, 1); v15 = 0; if ( v14 > 0 ) { while ( 1 ) { v7 = operator new(0x1Cu); if ( v7 ) { *v7 = 0; v7[1] = 0; v7[2] = -1; v7[3] = 0x7FFFFFFF; v7[4] = 0; v7[5] = 0; v7[6] = 0; v8 = v7; } else { v8 = 0; } if ( !sub_968960(v8, v2) ) break; v9 = (_DWORD *)(*((int (__thiscall **)(void **))v11[3] + 1))(v11 + 3); v9[2] = v8; *v9 = 0; v9[1] = v11[5]; v10 = v11[5]; if ( v10 ) *v10 = v9; else v11[4] = v9; v11[6] = (char *)v11[6] + 1; v11[5] = v9; if ( ++v15 >= v14 ) return 1; v2 = a2; } return 0; } return 1; } //----- (00968B80) -------------------------------------------------------- signed int __thiscall sub_968B80(int this, int a2, int a3, int a4, int a5, unsigned int a6, int a7, int a8) { return sub_91E5C0(this, a2, a3, a4, a5, a6, a7, a8); } //----- (00968B90) -------------------------------------------------------- int __thiscall sub_968B90(_DWORD **this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return sub_91DC20(this, a2, a3, a4, a5, a6, a7, a8); } //----- (00968BA0) -------------------------------------------------------- int __thiscall sub_968BA0(_DWORD **this, _DWORD *a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) { return sub_91E630(this, a2, a3, a4, a5, a6, a7, a8, a9); } //----- (00968BB0) -------------------------------------------------------- _DWORD *__thiscall sub_968BB0(int this, int a2, int a3, _DWORD *a4, int a5) { return sub_91E740(this, a2, a3, a4, a5); } //----- (00968BC0) -------------------------------------------------------- int __thiscall sub_968BC0(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return sub_91DB20(this, a2, a3, a4, a5, a6, a7, a8); } //----- (00968BE0) -------------------------------------------------------- char __thiscall sub_968BE0(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { char result; // al if ( this[110] >= 0xEu ) return 0; result = 1; while ( 1 ) { *a2 = this[110]++; if ( *((_BYTE *)this + *a2 + 500) ) break; if ( this[110] >= 0xEu ) return 0; } *a3 = this[*a2 + 111]; *a4 = *((_BYTE *)this + *a2 + 520); return result; } //----- (00968C50) -------------------------------------------------------- char __thiscall sub_968C50(_DWORD *this, _DWORD *a2, _DWORD *a3, _BYTE *a4) { char result; // al if ( this[90] >= 0xEu ) return 0; result = 1; while ( 1 ) { *a2 = this[90]++; if ( *((_BYTE *)this + *a2 + 420) ) break; if ( this[90] >= 0xEu ) return 0; } *a3 = this[*a2 + 91]; *a4 = *((_BYTE *)this + *a2 + 520); return result; } //----- (00968CC0) -------------------------------------------------------- char __thiscall sub_968CC0(_DWORD *this) { _DWORD *v1; // ecx char v2; // al int v4; // [esp+0h] [ebp-8h] char v5; // [esp+7h] [ebp-1h] v1 = (_DWORD *)this[3]; v4 = 0; v5 = 0; v2 = sub_91A530(v1, 0xBu, &v4, &v5); return v2 != 0 ? v5 : 0; } //----- (00968CF0) -------------------------------------------------------- int __usercall sub_968CF0@(int a1@, int a2@, int a3@, int a4) { int result; // eax int v5; // ST08_4 int v6; // edx int *v7; // ecx int v8; // ST00_4 int v9; // ST08_4 int v10; // ecx int v11; // edx int v12; // ST08_4 int v13; // eax int v14; // edx int v15; // ecx switch ( a2 ) { case 0: result = dword_BA6E20[2 * a3]; v5 = dword_BA6E24[2 * a3]; break; case 1: v6 = dword_BA6E20[2 * a3]; result = dword_BA6E24[2 * a3]; break; case 4: v7 = &dword_BA6DD8[3 * a1]; v8 = dword_BA6DD8[3 * a1]; result = v7[1]; v9 = v7[2]; break; case 5: v10 = 3 * a1; v11 = dword_BA6DDC[3 * a1]; result = dword_BA6DD8[3 * a1]; v12 = dword_BA6DD8[v10 + 2]; break; case 6: v13 = 3 * a1; v14 = dword_BA6DD8[v13]; v15 = dword_BA6DDC[v13]; result = dword_BA6DD8[v13 + 2]; break; default: result = a4; break; } return result; } // BA6DD8: using guessed type int dword_BA6DD8[]; // BA6DDC: using guessed type int dword_BA6DDC[]; // BA6E20: using guessed type int dword_BA6E20[]; // BA6E24: using guessed type int dword_BA6E24[]; //----- (00968DC0) -------------------------------------------------------- char __stdcall sub_968DC0(char *FullPath, char *DstBuf, size_t SizeInBytes) { char Drive; // [esp+4h] [ebp-310h] char Dir; // [esp+8h] [ebp-30Ch] char ArgList; // [esp+10Ch] [ebp-208h] char Ext; // [esp+210h] [ebp-104h] sub_92BEC0(FullPath, &Drive, &Dir, &ArgList, &Ext); if ( Ext ) sub_7FF6E0(DstBuf, SizeInBytes, "%s%s", &ArgList, &Ext); else sub_7FF6E0(DstBuf, SizeInBytes, "%s.vsh", &ArgList); return 1; } //----- (00968E60) -------------------------------------------------------- char __stdcall sub_968E60(char *FullPath, char *DstBuf, size_t SizeInBytes) { char Drive; // [esp+4h] [ebp-310h] char Dir; // [esp+8h] [ebp-30Ch] char ArgList; // [esp+10Ch] [ebp-208h] char Ext; // [esp+210h] [ebp-104h] sub_92BEC0(FullPath, &Drive, &Dir, &ArgList, &Ext); if ( Ext ) sub_7FF6E0(DstBuf, SizeInBytes, "%s%s", &ArgList, &Ext); else sub_7FF6E0(DstBuf, SizeInBytes, "%s.psh", &ArgList); return 1; } //----- (00968F00) -------------------------------------------------------- int __thiscall sub_968F00(int this, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, float *a8, int a9) { int v9; // esi int v11; // eax int v12; // ecx v9 = this; if ( *(_DWORD *)(this + 88) <= 4u || !a4 ) { v11 = *(_DWORD *)(this + 52); v12 = *(_DWORD *)(*(_DWORD *)(this + 68) + 4 * v11); if ( !v12 || !*(_DWORD *)(v12 + 96) ) return sub_91DC50(v9, a2, a3, a4, a5, a6, a7, a8, a9); if ( !v11 ) { if ( !a4 ) { LABEL_13: (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(0); sub_9251F0(*(char **)(v9 + 20), a8, 0); return 0; } sub_925370(*(_DWORD **)(v9 + 20), a3, *(float *)&a8, 1, *(_DWORD *)(v9 + 92), *(_DWORD *)(v9 + 96) == 1); } if ( a4 ) { (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(*(unsigned __int16 *)(a4 + 36)); sub_9251F0(*(char **)(v9 + 20), a8, 0); return 0; } goto LABEL_13; } if ( !*(_DWORD *)(this + 52) ) sub_925370(*(_DWORD **)(this + 20), a3, *(float *)&a8, 1, *(_DWORD *)(this + 92), *(_DWORD *)(this + 96) == 1); (*(void (__stdcall **)(_DWORD))(**(_DWORD **)(v9 + 24) + 48))(*(unsigned __int16 *)(a4 + 36)); sub_9251F0(*(char **)(v9 + 20), a8, 0); return 0; } //----- (00969010) -------------------------------------------------------- char __thiscall sub_969010(void *this, int a2) { char *v2; // edi _BYTE *v4; // esi int v5; // ecx int v6; // edi int v7; // eax int v8; // eax int v9; // [esp+Ch] [ebp-210h] char DstBuf; // [esp+10h] [ebp-20Ch] char Dst; // [esp+114h] [ebp-108h] v2 = *(char **)(a2 + 84); v9 = (int)this; if ( v2 && strcmp(*(const char **)(a2 + 84), &byte_9A8050) ) { if ( !sub_968DC0(v2, &DstBuf, 0x104u) ) return 0; v4 = *(_BYTE **)(a2 + 88); if ( v4 && *v4 ) sub_7FF6E0(&Dst, 0x104u, "%s##%s", v2, *(_DWORD *)(a2 + 88)); else strcpy_s(&Dst, 0x104u, v2); v5 = *(_DWORD *)(v9 + 36); v6 = *(_DWORD *)(a2 + 92); LOBYTE(v9) = *(_BYTE *)(a2 + 100); v7 = (*(int (**)(void))(*(_DWORD *)v5 + 100))(); v8 = sub_917800((int)&DstBuf, &DstBuf, (int)&Dst, (int)v4, v6, v7, 0, v9); if ( !v8 ) return 0; sub_8D2C40((_DWORD *)a2, v8); } return 1; } //----- (00969140) -------------------------------------------------------- char __stdcall sub_969140(int a1) { char *v1; // edi _BYTE *v3; // esi int v4; // edx int v5; // eax char DstBuf; // [esp+Ch] [ebp-20Ch] char Dst; // [esp+110h] [ebp-108h] v1 = *(char **)(a1 + 64); if ( v1 && strcmp(*(const char **)(a1 + 64), &byte_9A8050) ) { if ( !sub_968E60(v1, &DstBuf, 0x104u) ) return 0; v3 = *(_BYTE **)(a1 + 68); if ( v3 && *v3 ) sub_7FF6E0(&Dst, 0x104u, "%s##%s", v1, v3); else strcpy_s(&Dst, 0x104u, v1); v5 = sub_917880(v4, &DstBuf, (int)&Dst, (int)v3, *(_DWORD *)(a1 + 72)); if ( !v5 ) return 0; sub_75A740((_DWORD *)a1, v5); } return 1; } //----- (00969250) -------------------------------------------------------- char __thiscall sub_969250(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4) { int v4; // ebx unsigned int v5; // eax int v6; // edi int v7; // ebx unsigned int *v8; // esi _DWORD *v9; // ecx unsigned int v10; // esi __int16 v11; // si _DWORD *v12; // esi int v13; // edx _DWORD *v14; // ecx __int16 v15; // di int v16; // edx __int16 v17; // di _DWORD *v18; // ecx char v19; // al int v20; // esi _DWORD *v21; // esi unsigned int v22; // edi int v23; // eax unsigned int v24; // edi char v25; // ST10_1 int v26; // eax unsigned int v27; // edi char v28; // ST10_1 int v29; // eax unsigned int v30; // edi char v31; // ST10_1 int v32; // eax _DWORD *v34; // [esp+10h] [ebp-Ch] int v35; // [esp+14h] [ebp-8h] int v36; // [esp+18h] [ebp-4h] v4 = *(_DWORD *)(a2 + 8); v5 = *(unsigned __int16 *)(a2 + 88); v34 = this; v35 = 0; v36 = 0; if ( !(_WORD)v5 ) { if ( !v4 ) goto LABEL_58; v5 = v4 & 0xF000000; if ( v4 & 0xF000000 ) { if ( v5 == 0x1000000 ) { LOBYTE(v5) = v4; if ( (unsigned __int16)v4 >= (unsigned int)(a3[12] - 6) ) goto LABEL_58; v5 = *(_DWORD *)(a3[10] + 4 * (unsigned __int16)v4 + 24); } else { if ( v5 != 0x2000000 ) goto LABEL_58; v5 = a3[16]; if ( !v5 || (unsigned int)(unsigned __int16)v4 >= *(_DWORD *)(v5 + 12) ) goto LABEL_58; v5 = sub_814DE0(a3, (unsigned __int16)v4); } } else { v5 = v4 & 0xF00000; if ( (v4 & 0xF00000u) > (unsigned int)&loc_500000 ) { if ( (_UNKNOWN *)v5 == &loc_600000 ) { v5 = *(_DWORD *)(a3[10] + 16); } else { if ( v5 != 7340032 ) goto LABEL_58; v5 = *(_DWORD *)(a3[10] + 20); } } else if ( (_UNKNOWN *)(v4 & 0xF00000) == &loc_500000 ) { v5 = *(_DWORD *)(a3[10] + 12); } else { switch ( v5 ) { case 0x200000u: v5 = *(_DWORD *)a3[10]; break; case 0x300000u: v5 = *(_DWORD *)(a3[10] + 4); break; case 0x400000u: v5 = *(_DWORD *)(a3[10] + 8); break; default: goto LABEL_58; } } } if ( !v5 ) goto LABEL_58; v6 = *(_DWORD *)(v5 + 4); v35 = *(_DWORD *)(v5 + 8); v36 = *(_DWORD *)(v5 + 12); if ( (v4 & 0xF0000000) == 0x10000000 ) { v7 = *(_DWORD *)(v5 + 16); v8 = (unsigned int *)a2; v9 = *(_DWORD **)(a2 + 12); a4 = 0; HIBYTE(a3) = 0; if ( sub_91A530(v9, 0xBu, &a4, (_BYTE *)&a3 + 3) ) v10 = (unsigned int)a4; else v10 = *v8; LOBYTE(a3) = sub_968CC0((_DWORD *)a2); LOBYTE(v5) = sub_91A460(*(_DWORD **)(a2 + 12), 0xBu, v7 | v10 & 0xFFFF0000, (char)a3); } goto LABEL_51; } v11 = (unsigned __int8)v5; v5 >>= 8; switch ( v5 ) { case 5u: LOBYTE(v5) = (_BYTE)a4; v12 = (_DWORD *)a4[6]; goto LABEL_48; case 6u: v5 = a4[5]; v13 = 0; if ( !v5 ) goto LABEL_58; if ( v5 ) goto LABEL_35; v14 = 0; while ( 2 ) { v15 = v13++; if ( v15 == v11 ) goto LABEL_39; if ( v5 ) { LABEL_35: v14 = *(_DWORD **)(v5 + 4); v5 = *(_DWORD *)v5; continue; } goto LABEL_58; } case 7u: v5 = a4[4]; v16 = 0; if ( !v5 ) goto LABEL_58; if ( v5 ) goto LABEL_43; v14 = 0; break; case 8u: v12 = (_DWORD *)a4[7]; goto LABEL_48; default: goto LABEL_58; } while ( 1 ) { v17 = v16++; if ( v17 == v11 ) break; if ( !v5 ) goto LABEL_58; LABEL_43: v14 = *(_DWORD **)(v5 + 4); v5 = *(_DWORD *)v5; } LABEL_39: v12 = v14; LABEL_48: if ( v12 ) { v5 = v12[81]; v6 = v12[80]; v35 = v12[82]; v36 = v12[81]; if ( (v4 & 0xF0000000) == 0x10000000 ) { v18 = *(_DWORD **)(a2 + 12); a4 = 0; HIBYTE(a3) = 0; v19 = sub_91A530(v18, 0xBu, &a4, (_BYTE *)&a3 + 3); LOBYTE(v5) = ((int (__cdecl *)(_DWORD *, _DWORD *, int, _BYTE, _DWORD))dword_BA6D38[v12[84]])( v12 + 68, v12 + 77, a2, v19 != 0 ? HIBYTE(a3) : 0, v34[5]); } LABEL_51: if ( v6 ) { v20 = *(_DWORD *)(a2 + 4); if ( v20 != v6 ) { if ( v20 && !InterlockedDecrement((volatile LONG *)(v20 + 4)) && v20 ) (**(void (__thiscall ***)(int, signed int))v20)(v20, 1); *(_DWORD *)(a2 + 4) = v6; LOBYTE(v5) = InterlockedIncrement((volatile LONG *)(v6 + 4)); } } } LABEL_58: v21 = *(_DWORD **)(a2 + 12); if ( v21 && v21[129] ) { if ( v21[89] ) { v21[90] = 0; sub_968C50(v21, &a4, &a3, &a2); if ( (_BYTE)a2 ) { v22 = (unsigned int)a4; v23 = sub_968CF0(v36, (int)a4, v35, (int)a3); sub_91A590(v21, v22, v23, 1, 0); } for ( LOBYTE(v5) = sub_968C50(v21, &a4, &a3, &a2); (_BYTE)v5; LOBYTE(v5) = sub_968C50(v21, &a4, &a3, &a2) ) { if ( (_BYTE)a2 ) { v24 = (unsigned int)a4; v25 = a2; v26 = sub_968CF0(v36, (int)a4, v35, (int)a3); sub_91A590(v21, v24, v26, 1, v25); } } } if ( v21[109] ) { v21[110] = 0; sub_968BE0(v21, &a4, &a3, &a2); if ( (_BYTE)a2 ) { v27 = (unsigned int)a4; v28 = a2; v29 = sub_968CF0(v36, (int)a4, v35, (int)a3); sub_91A590(v21, v27, v29, 0, v28); } for ( LOBYTE(v5) = sub_968BE0(v21, &a4, &a3, &a2); (_BYTE)v5; LOBYTE(v5) = sub_968BE0(v21, &a4, &a3, &a2) ) { if ( (_BYTE)a2 ) { v30 = (unsigned int)a4; v31 = a2; v32 = sub_968CF0(v36, (int)a4, v35, (int)a3); sub_91A590(v21, v30, v32, 0, v31); } } } } return v5; } // BA6D38: using guessed type int dword_BA6D38[]; //----- (009696C0) -------------------------------------------------------- void __thiscall sub_9696C0(_DWORD *this) { int v1; // eax int v2; // ebx void *v3; // ecx int v4; // edi int v5; // ebx int v6; // esi int v7; // [esp+0h] [ebp-4h] v1 = this[1]; *this = &NiTArray>::`vftable'; if ( v1 ) { v2 = *(_DWORD *)(v1 - 4); v3 = (void *)(v1 - 4); v4 = v1 + 4 * v2; v5 = v2 - 1; v7 = v1 - 4; if ( v5 >= 0 ) { do { v6 = *(_DWORD *)(v4 - 4); v4 -= 4; if ( v6 && !InterlockedDecrement((volatile LONG *)(v6 + 4)) ) { if ( v6 ) (**(void (__thiscall ***)(int, signed int))v6)(v6, 1); } --v5; } while ( v5 >= 0 ); v3 = (void *)v7; } operator delete(v3); } } // A4C0D8: using guessed type void *NiTArray>::`vftable'; //----- (00969720) -------------------------------------------------------- void *__thiscall sub_969720(void *this, char a2) { void *v2; // esi v2 = this; sub_9696C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00969750) -------------------------------------------------------- LONG __thiscall sub_969750(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi v1 = this; *this = &NiBinaryShader::`vftable'; sub_9696C0(this + 28); v2 = v1[27]; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v3 = v1[26]; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return sub_91EDA0(v1); } // A4C0EC: using guessed type void *NiBinaryShader::`vftable'; //----- (009697C0) -------------------------------------------------------- void *sub_9697C0() { return &unk_BA7204; } //----- (009697D0) -------------------------------------------------------- char __thiscall sub_9697D0(int this, int a2) { int v2; // esi char result; // al unsigned int v4; // eax unsigned int v5; // ebx int v6; // ecx int v7; // edi unsigned int v8; // [esp+Ch] [ebp+8h] v2 = this; if ( !*(_BYTE *)(this + 28) ) { result = sub_91DAF0((_DWORD *)this, a2); if ( !result ) return result; v4 = *(_DWORD *)(v2 + 76); v5 = 0; v8 = v4; if ( v4 ) { do { v6 = *(_DWORD *)(v2 + 68); v7 = *(_DWORD *)(v6 + 4 * v5); if ( v7 ) { sub_969010((void *)v2, *(_DWORD *)(v6 + 4 * v5)); sub_969140(v7); v4 = v8; } ++v5; } while ( v5 < v4 ); } *(_BYTE *)(v2 + 28) = 1; } return *(_BYTE *)(v2 + 28); } //----- (00969830) -------------------------------------------------------- int __thiscall sub_969830(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6, int a7, int a8) { int v8; // ebx unsigned int v9; // edi _DWORD *v10; // esi _DWORD *v11; // edx unsigned int v12; // eax _DWORD *v13; // ecx int *v14; // eax int v15; // edi bool v16; // zf int v18; // [esp+8h] [ebp-18h] _DWORD *v19; // [esp+Ch] [ebp-14h] _DWORD *v20; // [esp+10h] [ebp-10h] _DWORD *v21; // [esp+14h] [ebp-Ch] unsigned int v22; // [esp+18h] [ebp-8h] _DWORD *v23; // [esp+1Ch] [ebp-4h] v8 = 0; v9 = 0; v19 = this; v18 = 0; if ( this[19] ) { v10 = v21; do { v11 = *(_DWORD **)(this[17] + 4 * v9); v23 = v11; if ( v11 ) { v12 = 0; v22 = 0; if ( v11[6] ) { while ( 1 ) { if ( v12 >= v11[11] ) { v8 |= 2u; v13 = 0; v20 = 0; v14 = (int *)&v20; } else { v10 = *(_DWORD **)(v11[9] + 4 * v12); v8 |= 1u; v21 = v10; if ( v10 ) ++v10[23]; v13 = v20; v14 = (int *)&v21; } v15 = *v14; if ( v8 & 2 ) { v8 &= 0xFFFFFFFD; if ( v13 ) { v16 = v13[23]-- == 1; if ( v16 ) { sub_91BD60(v13); v11 = v23; } } } if ( v8 & 1 ) { v8 &= 0xFFFFFFFE; if ( v10 ) { v16 = v10[23]-- == 1; if ( v16 ) { sub_91BD60(v10); v11 = v23; } } } if ( v15 ) { sub_969250(v19, v15, *(_DWORD **)(a5 + 40), a6); v11 = v23; } if ( ++v22 >= v11[6] ) break; v12 = v22; } this = v19; v9 = v18; } } v18 = ++v9; } while ( v9 < this[19] ); } return sub_91EFF0(a2, a3, a4, a5, (int)a6, a7, a8); } //----- (00969940) -------------------------------------------------------- char __thiscall sub_969940(_DWORD *this, _DWORD *a2) { int v2; // ebx _DWORD *v4; // ecx _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // eax int v8; // edi _DWORD *v9; // ecx _DWORD *v10; // eax _DWORD *v11; // ecx _DWORD *v12; // eax _DWORD *v13; // edi int v14; // eax int v15; // ecx int v16; // ecx int v17; // ebx int v18; // eax int v19; // esi int v20; // edi unsigned int v21; // esi unsigned int v22; // eax int v23; // edx float *v24; // eax float *v25; // eax _DWORD *v26; // eax int v27; // ecx char v28; // [esp+4h] [ebp-10h] _DWORD *v29; // [esp+8h] [ebp-Ch] int v30; // [esp+Ch] [ebp-8h] char v31; // [esp+12h] [ebp-2h] char v32; // [esp+13h] [ebp-1h] v2 = (int)this; v29 = this; if ( !a2 ) return 0; v4 = (_DWORD *)this[10]; v5 = 0; if ( v4 ) { if ( sub_91C120(v4, 27, &v30, &v31) && v30 == 1 ) { v6 = operator new(0x20u); if ( v6 ) v5 = sub_40DC70(v6); else v5 = 0; *((_WORD *)v5 + 14) |= 1u; } if ( sub_91C120(*(_DWORD **)(v2 + 40), 15, &v30, &v31) && v30 == 1 ) { if ( !v5 ) { v7 = operator new(0x20u); if ( v7 ) v5 = sub_40DC70(v7); else v5 = 0; } *((_WORD *)v5 + 14) |= 0x200u; } } v8 = **(_DWORD **)(v2 + 68); if ( v8 ) { v9 = *(_DWORD **)(v8 + 56); if ( v9 ) { sub_91C120(v9, 27, &v30, &v31); if ( v30 == 1 ) { if ( !v5 ) { v10 = operator new(0x20u); if ( v10 ) v5 = sub_40DC70(v10); else v5 = 0; } *((_WORD *)v5 + 14) |= 1u; } } v11 = *(_DWORD **)(v8 + 56); if ( v11 ) { sub_91C120(v11, 15, &v30, &v31); if ( v30 == 1 ) { if ( !v5 ) { v12 = operator new(0x20u); if ( v12 ) v5 = sub_40DC70(v12); else v5 = 0; } *((_WORD *)v5 + 14) |= 0x200u; } } } v13 = a2; if ( v5 ) { v14 = sub_85C050(a2, 0); if ( !v14 ) { LABEL_37: sub_403700(a2, (int)v5); goto LABEL_38; } if ( !(*(_BYTE *)(v14 + 28) & 1) && !((*(_WORD *)(v14 + 28) >> 9) & 1) ) { sub_85CA90(a2, (volatile LONG **)&v28, 0); sub_410C00(&v28); goto LABEL_37; } (*(void (__thiscall **)(_DWORD *, signed int))*v5)(v5, 1); } LABEL_38: v15 = *(_DWORD *)(v2 + 44); v32 = 0; if ( v15 ) { if ( (*(int (__stdcall **)(const char *))(*(_DWORD *)v15 + 36))("time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 44) + 36))("sin_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 44) + 36))("cos_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 44) + 36))("tan_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 44) + 36))("time_sin_cos_tan") ) { v32 = 1; } } else if ( !*(_DWORD *)(v2 + 48) ) { goto LABEL_54; } v16 = *(_DWORD *)(v2 + 48); if ( v16 && ((*(int (__stdcall **)(const char *))(*(_DWORD *)v16 + 36))("time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 48) + 36))("sin_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 48) + 36))("cos_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 48) + 36))("tan_time") || (*(int (__stdcall **)(const char *))(**(_DWORD **)(v2 + 48) + 36))("time_sin_cos_tan")) || v32 ) { LABEL_80: v24 = (float *)operator new(0x40u); if ( v24 ) v25 = sub_8CDC40(v24); else v25 = 0; (*(void (__thiscall **)(float *, _DWORD *))(*(_DWORD *)v25 + 72))(v25, v13); v26 = v13; do { *((_WORD *)v26 + 14) |= 2u; v26 = (_DWORD *)v26[8]; } while ( v26 ); goto LABEL_72; } LABEL_54: v17 = 0; if ( v29[19] ) { while ( 1 ) { v18 = *(_DWORD *)(v29[17] + 4 * v17); if ( v18 ) { v19 = *(_DWORD *)(v18 + 60); v20 = *(_DWORD *)(v18 + 80); if ( v19 && ((*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 36))(v19, "time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 36))(v19, "sin_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 36))(v19, "cos_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 36))(v19, "tan_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v19 + 36))(v19, "time_sin_cos_tan")) ) { v32 = 1; } if ( v20 && ((*(int (__thiscall **)(int, const char *))(*(_DWORD *)v20 + 36))(v20, "time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v20 + 36))(v20, "sin_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v20 + 36))(v20, "cos_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v20 + 36))(v20, "tan_time") || (*(int (__thiscall **)(int, const char *))(*(_DWORD *)v20 + 36))(v20, "time_sin_cos_tan")) ) { break; } } if ( v32 ) break; if ( (unsigned int)++v17 >= v29[19] ) goto LABEL_71; } v2 = (int)v29; v13 = a2; goto LABEL_80; } LABEL_71: v2 = (int)v29; v13 = a2; LABEL_72: v21 = *(_DWORD *)(v2 + 76); v22 = 0; LOBYTE(a2) = 0; if ( v21 ) { v23 = *(_DWORD *)(v2 + 68); while ( !*(_DWORD *)v23 || !*(_BYTE *)(*(_DWORD *)v23 + 100) ) { ++v22; v23 += 4; if ( v22 >= v21 ) goto LABEL_87; } LOBYTE(a2) = 1; } LABEL_87: v27 = *(_DWORD *)(v2 + 36); if ( v27 ) (*(void (__stdcall **)(_DWORD *))(*(_DWORD *)v27 + 84))(a2); return sub_91EF90((_DWORD *)v2, v13); } //----- (00969D60) -------------------------------------------------------- _DWORD *__thiscall sub_969D60(_DWORD *this) { _DWORD *v1; // esi unsigned int v2; // edi int v4; // [esp+8h] [ebp-4h] v1 = this; sub_8CE010(this); v2 = 0; *v1 = &NiBinaryShader::`vftable'; v1[22] = 0; v1[23] = 0; v1[24] = 0; v1[25] = 0; v1[26] = 0; v1[27] = 0; v1[28] = &NiTArray>::`vftable'; v1[30] = 0; v1[33] = 1; v1[31] = 0; v1[32] = 0; v1[29] = 0; if ( v1[18] ) { v4 = 0; do sub_461550(v1 + 16, v2++, &v4); while ( v2 < v1[18] ); } return v1; } // A4C0D8: using guessed type void *NiTArray>::`vftable'; // A4C0EC: using guessed type void *NiBinaryShader::`vftable'; //----- (00969DD0) -------------------------------------------------------- void *__thiscall sub_969DD0(void *this, char a2) { void *v2; // esi v2 = this; sub_969750(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (00969E00) -------------------------------------------------------- char __thiscall sub_969E00(const char **this, signed int a2) { char *v2; // esi char result; // al v2 = (char *)this; result = sub_92C1E0(a2, this[18]); if ( result ) result = sub_962150(v2, a2); return result; } //----- (00969E30) -------------------------------------------------------- char __thiscall sub_969E30(void **this, int a2) { char *v2; // esi char result; // al int v4; // [esp+8h] [ebp-4h] v2 = (char *)this; v4 = 0; result = sub_92C250(a2, this + 18, &v4); if ( result ) result = sub_962190(v2, a2); return result; } //----- (00969E70) -------------------------------------------------------- bool __thiscall sub_969E70(_DWORD *this, signed int a2) { return sub_962310(this, a2); } //----- (00969E80) -------------------------------------------------------- char __thiscall sub_969E80(_DWORD *this, int a2) { return sub_9624B0(this, a2); } //----- (00969E90) -------------------------------------------------------- char __thiscall sub_969E90(_DWORD *this, char *a2, int a3, rsize_t DstSize, int a5, void *Src, char a7) { _DWORD *v7; // esi int v8; // eax char result; // al void **v10; // edi _DWORD *v11; // eax _DWORD *v12; // ecx v7 = this; v8 = sub_9610E0(this, a2); if ( v8 ) { sub_863460( 1, 1, "* ERROR: NSBUserDefinedDataBlock::AddEntry\n Failed to add entry %s\n It already exists!\n", *(_DWORD *)(v8 + 8)); result = 0; } else { v10 = sub_961240(a2, a3, 0, -1, 1, 0, DstSize, a5, Src, a7); if ( v10 ) { v11 = (_DWORD *)(*(int (__thiscall **)(_DWORD *))(v7[4] + 4))(v7 + 4); v11[2] = v10; *v11 = 0; v11[1] = v7[6]; v12 = (_DWORD *)v7[6]; if ( v12 ) { *v12 = v11; ++v7[7]; } else { ++v7[7]; v7[5] = v11; } v7[6] = v11; result = 1; } else { sub_863460(1, 1, "* ERROR: NSBUserDefinedDataBlock::AddEntry\n Failed to create entry %s\n", a2); result = 0; } } return result; } //----- (00969F50) -------------------------------------------------------- char __thiscall sub_969F50(_DWORD *this, int a2) { _DWORD *v2; // esi void *v3; // ebx _DWORD *v4; // ecx char result; // al _DWORD *v6; // ecx v2 = this; *(_DWORD *)a2 = this[1]; *(_DWORD *)(a2 + 8) = this[2]; sub_91AE60(a2, this[22], this[23]); v3 = *(void **)(a2 + 12); *(_WORD *)(a2 + 88) = *((_WORD *)v2 + 10); v4 = (_DWORD *)v2[3]; if ( v4 && sub_6A25F0(v4) && !sub_967D70((_DWORD *)v2[3], (unsigned int)v3) || (v6 = (_DWORD *)v2[4]) != 0 && sub_6A25F0(v6) && !sub_967D80((_DWORD *)v2[4], (int)v3) ) { if ( v3 ) { nullsub_6(v3); operator delete(v3); } result = 0; } else { qmemcpy((void *)(a2 + 24), v2 + 6, 0x40u); result = 1; } return result; } //----- (00969FF0) -------------------------------------------------------- char __thiscall sub_969FF0(_DWORD *this, int a2) { _DWORD *v2; // edi int v4; // esi _DWORD *v5; // ebx int v6; // [esp+4h] [ebp-4h] v2 = this; if ( !this[4] ) return 0; v4 = sub_967DC0(this); if ( v4 ) { v5 = (_DWORD *)a2; do { if ( !((*(_DWORD *)v4 >> 1) & 1) && sub_967020(*(_DWORD *)(v4 + 4), &a2) && sub_967B70(*(_DWORD *)(v4 + 4), *(_DWORD *)(v4 + 8), &v6) && a2 != 0x7FFFFFFF ) { sub_91C5E0(v5, a2, v6, *(_BYTE *)v4 & 1); } v4 = sub_967DE0(v2); } while ( v4 ); } return 1; } //----- (0096A090) -------------------------------------------------------- char __thiscall sub_96A090(_DWORD *this, unsigned int a2) { _DWORD *v2; // edi int v4; // esi _DWORD *v5; // ebx int v6; // [esp+4h] [ebp-4h] v2 = this; if ( !this[4] ) return 0; v4 = sub_967DC0(this); if ( v4 ) { v5 = (_DWORD *)a2; do { if ( !((*(_DWORD *)v4 >> 1) & 1) && sub_96A3C0(*(_DWORD *)(v4 + 4), &a2) && sub_96A960(*(_DWORD *)(v4 + 4), *(_DWORD *)(v4 + 8), &v6) && a2 != 0x7FFFFFFF ) { sub_91A460(v5, a2, v6, *(_BYTE *)v4 & 1); } v4 = sub_967DE0(v2); } while ( v4 ); } return 1; } //----- (0096A130) -------------------------------------------------------- char __thiscall sub_96A130(_DWORD *this, int a2) { _DWORD *v2; // edi unsigned int *v4; // esi _DWORD *v5; // ebx unsigned int v6; // eax unsigned int v7; // eax v2 = this; if ( !this[4] ) return 0; v4 = (unsigned int *)sub_967DC0(this); if ( v4 ) { v5 = (_DWORD *)a2; do { v6 = *v4; if ( !((*v4 >> 1) & 1) ) { a2 = 0x7FFFFFFF; if ( (v6 >> 2) & 1 || sub_96AA60(v4[1], v4[2], &a2) ) { v7 = v4[1]; if ( v7 != 0x7FFFFFFF ) sub_91A590(v5, v7, a2, *(_BYTE *)v4 & 1, (*v4 >> 2) & 1); } } v4 = (unsigned int *)sub_967DE0(v2); } while ( v4 ); } return 1; } //----- (0096A1D0) -------------------------------------------------------- signed int __stdcall sub_96A1D0(int a1) { signed int result; // eax switch ( a1 ) { case 0: result = 0; break; case 1: result = 1; break; case 2: result = 2; break; case 3: result = 3; break; case 4: result = 4; break; case 5: result = 5; break; case 7: result = 6; break; case 9: result = 7; break; case 11: result = 9; break; case 13: result = 10; break; case 20: result = 8; break; case 21: result = 11; break; case 22: result = 12; break; case 23: result = 13; break; case 24: result = 14; break; case 25: result = 15; break; case 26: result = 16; break; default: result = -1; break; } return result; } //----- (0096A2F0) -------------------------------------------------------- _DWORD *__thiscall sub_96A2F0(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // edi _DWORD *result; // eax _DWORD *v5; // ebx signed int *i; // esi signed int v7; // eax signed int v8; // ecx int v9; // edx _DWORD *v10; // [esp+10h] [ebp-Ch] int v11; // [esp+14h] [ebp-8h] unsigned int v12; // [esp+18h] [ebp-4h] signed int v13; // [esp+24h] [ebp+8h] v2 = this; v3 = 0; v10 = this; v12 = 0; v11 = 0; sub_9684E0(this, &v12, (unsigned int *)&v11); result = sub_934760(a2, v11, v12); v5 = result; if ( result ) { v13 = -1; for ( i = (signed int *)sub_9684A0(v2); i; i = (signed int *)sub_9684C0(v10) ) { v7 = sub_968460(i[3]); v8 = *i; if ( v13 != *i ) { v13 = *i; v3 = 0; } v9 = *v5; if ( i[5] == 14 ) (*(void (__thiscall **)(_DWORD *, int, signed int, signed int, signed int, signed int))(v9 + 64))( v5, v3, i[1], i[2], v7, v8); else (*(void (__thiscall **)(_DWORD *, signed int, int, signed int, signed int, signed int, signed int, signed int, signed int))(v9 + 60))( v5, v8, v3, i[1], i[2], v7, i[5], i[6], i[4]); ++v3; } result = v5; } return result; } //----- (0096A3C0) -------------------------------------------------------- char __cdecl sub_96A3C0(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 1; result = 1; break; case 1: *a2 = 26; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 3; result = 1; break; case 4: *a2 = 4; result = 1; break; case 5: *a2 = 27; result = 1; break; case 6: *a2 = 5; result = 1; break; case 7: *a2 = 6; result = 1; break; case 8: *a2 = 28; result = 1; break; case 9: *a2 = 7; result = 1; break; case 10: *a2 = 8; result = 1; break; case 11: *a2 = 9; result = 1; break; case 12: *a2 = 10; result = 1; break; case 13: *a2 = 22; result = 1; break; case 14: *a2 = 23; result = 1; break; case 15: *a2 = 11; result = 1; break; case 16: *a2 = 24; result = 1; break; default: result = 0; break; } return result; } //----- (0096A500) -------------------------------------------------------- char __cdecl sub_96A500(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 1; result = 1; break; case 1: *a2 = 2; result = 1; break; case 2: *a2 = 3; result = 1; break; case 3: *a2 = 4; result = 1; break; case 4: *a2 = 5; result = 1; break; case 5: *a2 = 6; result = 1; break; case 6: *a2 = 7; result = 1; break; case 7: *a2 = 8; result = 1; break; case 8: *a2 = 9; result = 1; break; case 9: *a2 = 10; result = 1; break; case 10: *a2 = 11; result = 1; break; case 11: *a2 = 12; result = 1; break; case 12: *a2 = 13; result = 1; break; case 13: *a2 = 14; result = 1; break; case 14: *a2 = 15; result = 1; break; case 15: *a2 = 16; result = 1; break; case 16: *a2 = 17; result = 1; break; case 17: *a2 = 18; result = 1; break; case 18: *a2 = 19; result = 1; break; case 19: *a2 = 20; result = 1; break; case 20: *a2 = 21; result = 1; break; case 21: *a2 = 22; result = 1; break; case 22: *a2 = 23; result = 1; break; case 23: *a2 = 24; result = 1; break; case 24: *a2 = 25; result = 1; break; case 25: *a2 = 26; result = 1; break; default: result = 0; break; } return result; } //----- (0096A6E0) -------------------------------------------------------- char __cdecl sub_96A6E0(int a1, _DWORD *a2) { if ( a1 == 0x7FFFFFFF ) return 0; switch ( a1 & 0xFFFFFFF ) { case 0: *a2 = 1; break; case 1: *a2 = 0; break; case 2: *a2 = 15; break; case 3: *a2 = 4; break; case 4: *a2 = 5; break; case 5: *a2 = 2; break; case 6: *a2 = 3; break; default: break; } if ( a1 & 0x40000000 ) *a2 |= 0x20u; if ( a1 < 0 ) *a2 |= 0x10u; return 1; } //----- (0096A770) -------------------------------------------------------- char __cdecl sub_96A770(int a1, _DWORD *a2) { char result; // al *a2 = 0; switch ( a1 & 0xFFFFFEFF ) { case 0u: *a2 = 0; goto LABEL_7; case 1u: *a2 = 1; goto LABEL_7; case 2u: *a2 = 2; goto LABEL_7; case 3u: *a2 = 3; goto LABEL_7; case 4u: *a2 = 4; LABEL_7: if ( a1 & 0x100 ) *a2 |= 0x100u; result = 1; break; default: result = 0; break; } return result; } //----- (0096A7F0) -------------------------------------------------------- char __cdecl sub_96A7F0(int a1, _DWORD *a2) { unsigned int v2; // eax int v3; // ecx char result; // al v2 = a1 & 0xF0000000; v3 = a1 & 0xFFFFFFF; if ( (a1 & 0xF0000000) > 0x20000000 ) { if ( v2 == 805306368 ) { *a2 = 196608; *a2 |= v3; result = 1; } else { if ( v2 != 0x40000000 ) { LABEL_6: *a2 = 0; *a2 |= v3; return 1; } *a2 = 0x40000; *a2 |= v3; result = 1; } } else { if ( (a1 & 0xF0000000) != 0x20000000 ) { if ( v2 && v2 == 0x10000000 ) { *a2 = 0x10000; *a2 |= v3; return 1; } goto LABEL_6; } *a2 = 0x20000; *a2 |= v3; result = 1; } return result; } //----- (0096A870) -------------------------------------------------------- char __cdecl sub_96A870(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 1; result = 1; break; case 1: *a2 = 2; result = 1; break; case 2: *a2 = 3; result = 1; break; case 3: *a2 = 4; result = 1; break; case 4: *a2 = 5; result = 1; break; default: result = 0; break; } return result; } //----- (0096A8E0) -------------------------------------------------------- char __cdecl sub_96A8E0(int a1, _DWORD *a2) { char result; // al switch ( a1 ) { case 0: *a2 = 0; result = 1; break; case 1: *a2 = 1; result = 1; break; case 2: *a2 = 2; result = 1; break; case 3: *a2 = 3; result = 1; break; case 4: *a2 = 6; result = 1; break; case 5: *a2 = 7; result = 1; break; default: result = 0; break; } return result; } //----- (0096A960) -------------------------------------------------------- char __cdecl sub_96A960(int a1, int a2, int *a3) { char result; // al switch ( a1 ) { case 0: result = sub_96A500(a2, a3); break; case 1: case 7: result = sub_96A6E0(a2, a3); break; case 2: case 5: case 8: result = sub_96A6E0(a2, a3); break; case 3: case 6: result = sub_96A6E0(a2, a3); break; case 4: result = sub_96A500(a2, a3); break; case 9: case 12: *a3 = a2; result = 1; break; case 10: case 13: *a3 = a2; result = 1; break; case 11: case 14: *a3 = a2; result = 1; break; case 15: result = sub_96A7F0(a2, a3); break; case 16: result = sub_96A770(a2, a3); break; default: result = 0; break; } return result; } //----- (0096AA60) -------------------------------------------------------- char __cdecl sub_96AA60(int a1, int a2, int *a3) { char result; // al switch ( a1 ) { case 0: case 1: case 2: result = sub_96A870(a2, a3); break; case 3: case 10: case 11: case 12: *a3 = a2; result = 1; break; case 4: case 5: case 6: result = sub_96A8E0(a2, a3); break; case 7: case 8: case 9: *a3 = a2; result = 1; break; default: result = 0; break; } return result; } //----- (0096AAE0) -------------------------------------------------------- int **__thiscall sub_96AAE0(_DWORD *this, int **a2, int a3) { int v3; // edi _DWORD *v4; // esi int *v5; // eax unsigned int v6; // ecx int v7; // eax int **result; // eax int *v9; // [esp+18h] [ebp+Ch] v3 = a3; v4 = this; v5 = sub_4F1D20(this, a3); v9 = v5; if ( v5 == (int *)v4[1] ) goto LABEL_9; v6 = v5[7]; v7 = (int)(v5 + 3); if ( *(_DWORD *)(v7 + 20) >= 0x10u ) v7 = *(_DWORD *)v7; if ( sub_40C2F0((unsigned __int8 *)v3, 0, *(_DWORD *)(v3 + 16), (unsigned __int8 *)v7, v6) < 0 ) { LABEL_9: result = a2; *a2 = (int *)v4[1]; } else { result = a2; *a2 = v9; } return result; } //----- (0096AB50) -------------------------------------------------------- void *__thiscall sub_96AB50(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsFNC_35::`vftable'; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C224: using guessed type void *NsFNC_35::`vftable'; //----- (0096AB80) -------------------------------------------------------- void __cdecl sub_96AB80(int a1, int *a2, int *a3) { int v3; // eax if ( a2 ) { v3 = *a3; *a2 = *a3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } } //----- (0096ABB0) -------------------------------------------------------- char **__thiscall sub_96ABB0(void *this, char *a2, int a3, int a4) { int v4; // edi char **v5; // eax char **v6; // esi int *v7; // edx int v8; // ecx void **v10; // [esp+8h] [ebp-Ch] v4 = (int)this; v5 = (char **)operator new(0xCu); v6 = v5; if ( !v5 ) { a2 = 0; std::exception::exception((std::exception *)&v10, (const char *const *)&a2); v10 = &std::bad_alloc::`vftable'; _CxxThrowException(&v10, &_TI2_AVbad_alloc_std__); } v7 = (int *)a4; v8 = a3; *v5 = a2; v5[1] = (char *)v8; sub_96AB80(v4 + 9, (int *)v5 + 2, v7); return v6; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0096AC20) -------------------------------------------------------- char __thiscall sub_96AC20(_DWORD *this, int a2) { _DWORD *v2; // esi int v3; // ebx int v4; // edi char **v5; // eax int v6; // ecx v2 = this; v3 = a2; this[2] = a2; a2 = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); v4 = v2[17]; v5 = sub_96ABB0(v2 + 17, (char *)v2[17], *(_DWORD *)(v4 + 4), (int)&a2); v6 = v2[18]; if ( (unsigned int)(1073741822 - v6) < 1 ) std::_Xlength_error("list too long"); v2[18] = v6 + 1; *(_DWORD *)(v4 + 4) = v5; *(_DWORD *)v5[1] = v5; if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); return 1; } //----- (0096ACE0) -------------------------------------------------------- char __thiscall sub_96ACE0(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax volatile LONG *v6; // ebx bool v7; // cf void *v8; // edx int *v9; // esi int v10; // ecx _DWORD *v11; // esi int *v12; // esi char v14; // [esp+10h] [ebp-13Ch] _DWORD *v15; // [esp+14h] [ebp-138h] void *v16; // [esp+18h] [ebp-134h] _DWORD *v17; // [esp+1Ch] [ebp-130h] void *v18; // [esp+20h] [ebp-12Ch] int v19; // [esp+30h] [ebp-11Ch] unsigned int v20; // [esp+34h] [ebp-118h] char v21[256]; // [esp+3Ch] [ebp-110h] char v22[256]; // [esp+3Dh] [ebp-10Fh] int v23; // [esp+148h] [ebp-4h] v4 = this; v15 = a2; v17 = a3; if ( !sub_96C690(a3, v21) ) return 1; v5 = operator new(0x50u); v16 = v5; v6 = 0; v23 = 0; if ( v5 ) v6 = sub_96C970(v5); v16 = (void *)v6; if ( v6 ) InterlockedIncrement(v6 + 1); v7 = v4[7] < 0x10u; v23 = 1; if ( v7 ) v8 = v4 + 2; else v8 = (void *)v4[2]; sub_4018E0((_DWORD *)v6 + 3, v8, strlen((const char *)v8)); if ( sub_96C4B0(v21, (const char *)&unk_A4C230) ) { sub_4018E0((_DWORD *)v6 + 10, v21, &v21[strlen(v21) + 1] - v22); LABEL_15: v11 = v17; goto LABEL_16; } v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v21, &v21[strlen(v21) + 1] - v22); LOBYTE(v23) = 2; v9 = *sub_96AAE0(a4, (int **)&v14, (int)&v18); LOBYTE(v23) = 1; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v9 == (int *)a4[1] ) goto LABEL_15; v10 = v9[10]; v11 = v17; (*(void (__stdcall **)(volatile LONG *, _DWORD *, _DWORD *))(*(_DWORD *)v10 + 4))(v6, v17, a4); LABEL_16: sub_96AC20(v15, (int)v6); if ( (!sub_96C740(v11, (const char *)&unk_A4C22C) || !sub_96C740(v11, ":")) && sub_96C690(v11, v21) ) { v20 = 15; v19 = 0; LOBYTE(v18) = 0; sub_4018E0(&v18, v21, strlen(v21)); LOBYTE(v23) = 3; v12 = *sub_96AAE0(a4, (int **)&v14, (int)&v18); LOBYTE(v23) = 1; if ( v20 >= 0x10 ) operator delete(v18); v20 = 15; v19 = 0; LOBYTE(v18) = 0; if ( v12 != (int *)a4[1] ) (*(void (__stdcall **)(volatile LONG *, _DWORD *, _DWORD *))(*(_DWORD *)v12[10] + 4))(v6, v17, a4); } v23 = -1; if ( v6 && !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); return 1; } // 96ACE0: using guessed type char var_110[256]; //----- (0096AFD0) -------------------------------------------------------- void *__thiscall sub_96AFD0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsFNC_123::`vftable'; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C238: using guessed type void *NsFNC_123::`vftable'; //----- (0096B000) -------------------------------------------------------- char __thiscall sub_96B000(_DWORD *this, int *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // edi _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // ebx bool v8; // cf _DWORD *v9; // edx int *v10; // eax int *v11; // ebx unsigned int v12; // esi int v13; // eax unsigned int v14; // edi unsigned int v15; // edx unsigned __int8 *v16; // ecx int v17; // eax bool v18; // sf signed int v19; // eax void **v20; // eax _DWORD *v21; // esi int v22; // ecx int v23; // esi void (__thiscall **v24)(_DWORD *, signed int); // edx _DWORD *v25; // ecx void *v27; // [esp+18h] [ebp-13Ch] _DWORD *v28; // [esp+1Ch] [ebp-138h] int *v29; // [esp+20h] [ebp-134h] _DWORD *v30; // [esp+24h] [ebp-130h] void *v31; // [esp+28h] [ebp-12Ch] unsigned int v32; // [esp+38h] [ebp-11Ch] unsigned int v33; // [esp+3Ch] [ebp-118h] char v34; // [esp+44h] [ebp-110h] int v35; // [esp+150h] [ebp-4h] v4 = a4; v5 = this; v29 = a2; v28 = a3; v6 = operator new(0x50u); v27 = v6; v35 = 0; if ( v6 ) { v7 = sub_96C970(v6); v30 = v7; } else { v30 = 0; v7 = 0; } if ( v7 ) InterlockedIncrement(v7 + 1); v8 = v5[7] < 0x10u; v9 = v5 + 2; v35 = 1; if ( !v8 ) v9 = (_DWORD *)*v9; sub_4018E0(v7 + 3, v9, strlen((const char *)v9)); sub_96AC20(v29, (int)v7); if ( sub_96C690(v28, &v34) ) { while ( 1 ) { v33 = 15; v32 = 0; LOBYTE(v31) = 0; sub_4018E0(&v31, &v34, strlen(&v34)); LOBYTE(v35) = 2; v10 = sub_4F1D20(v4, (int)&v31); v11 = (int *)v4[1]; v29 = v10; if ( v10 == v11 ) goto LABEL_40; v12 = v10[7]; v13 = (int)(v10 + 3); if ( *(_DWORD *)(v13 + 20) >= 0x10u ) v13 = *(_DWORD *)v13; v14 = v32; v15 = v32; if ( v32 >= v12 ) v15 = v12; v16 = (unsigned __int8 *)v31; if ( v33 < 0x10 ) v16 = (unsigned __int8 *)&v31; v17 = sub_40C0B0(v16, (unsigned __int8 *)v13, v15); v18 = v17 < 0; if ( !v17 ) { if ( v14 >= v12 ) v19 = v14 != v12; else v19 = -1; v18 = v19 < 0; } v4 = a4; if ( v18 ) { LABEL_40: v27 = v11; v20 = &v27; } else { v20 = (void **)&v29; } v21 = *v20; LOBYTE(v35) = 1; if ( v33 >= 0x10 ) operator delete(v31); v33 = 15; v32 = 0; LOBYTE(v31) = 0; if ( v21 != (_DWORD *)v4[1] ) { v22 = v21[10]; v23 = (int)v30; if ( !(*(unsigned __int8 (__stdcall **)(_DWORD *, _DWORD *, _DWORD *))(*(_DWORD *)v22 + 4))(v30, v28, v4) ) break; } if ( !sub_96C690(v28, &v34) ) { v7 = v30; goto LABEL_30; } } sub_4018E0((_DWORD *)(v23 + 40), &unk_A4C240, 1u); v35 = -1; if ( v23 && !InterlockedDecrement((volatile LONG *)(v23 + 4)) ) { v24 = *(void (__thiscall ***)(_DWORD *, signed int))v23; v25 = (_DWORD *)v23; goto LABEL_33; } } else { LABEL_30: v35 = -1; if ( v7 && !InterlockedDecrement(v7 + 1) ) { v24 = (void (__thiscall **)(_DWORD *, signed int))*v7; v25 = v7; LABEL_33: (*v24)(v25, 1); return 1; } } return 1; } //----- (0096B2A0) -------------------------------------------------------- void *__thiscall sub_96B2A0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsFNC_125::`vftable'; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C248: using guessed type void *NsFNC_125::`vftable'; //----- (0096B2D0) -------------------------------------------------------- void *__thiscall sub_96B2D0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsFNC_58::`vftable'; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C254: using guessed type void *NsFNC_58::`vftable'; //----- (0096B300) -------------------------------------------------------- char __thiscall sub_96B300(_DWORD *this, _DWORD *a2, _DWORD *a3, _DWORD *a4) { _DWORD *v4; // esi _DWORD *v5; // eax volatile LONG *v6; // edi bool v7; // cf void *v8; // edx int *v9; // esi char v11; // [esp+10h] [ebp-13Ch] _DWORD *v12; // [esp+14h] [ebp-138h] _DWORD *v13; // [esp+18h] [ebp-134h] void *v14; // [esp+1Ch] [ebp-130h] void *v15; // [esp+20h] [ebp-12Ch] int v16; // [esp+30h] [ebp-11Ch] unsigned int v17; // [esp+34h] [ebp-118h] char v18[256]; // [esp+3Ch] [ebp-110h] char v19[256]; // [esp+3Dh] [ebp-10Fh] int v20; // [esp+148h] [ebp-4h] v4 = this; v13 = a2; v12 = a3; if ( sub_96C690(a3, v18) ) { v5 = operator new(0x50u); v14 = v5; v6 = 0; v20 = 0; if ( v5 ) v6 = sub_96C970(v5); v14 = (void *)v6; if ( v6 ) InterlockedIncrement(v6 + 1); v7 = v4[7] < 0x10u; v20 = 1; if ( v7 ) v8 = v4 + 2; else v8 = (void *)v4[2]; sub_4018E0((_DWORD *)v6 + 3, v8, strlen((const char *)v8)); if ( sub_96C4B0(v18, (const char *)&unk_A4C230) ) { sub_4018E0((_DWORD *)v6 + 10, v18, &v18[strlen(v18) + 1] - v19); } else { v17 = 15; v16 = 0; LOBYTE(v15) = 0; sub_4018E0(&v15, v18, &v18[strlen(v18) + 1] - v19); LOBYTE(v20) = 2; v9 = *sub_96AAE0(a4, (int **)&v11, (int)&v15); LOBYTE(v20) = 1; if ( v17 >= 0x10 ) operator delete(v15); v17 = 15; v16 = 0; LOBYTE(v15) = 0; if ( v9 != (int *)a4[1] ) (*(void (__stdcall **)(volatile LONG *, _DWORD *, _DWORD *))(*(_DWORD *)v9[10] + 4))(v6, v12, a4); } sub_96AC20(v13, (int)v6); v20 = -1; if ( v6 && !InterlockedDecrement(v6 + 1) ) (**(void (__thiscall ***)(volatile LONG *, signed int))v6)(v6, 1); } return 1; } // 96B300: using guessed type char var_110[256]; //----- (0096B500) -------------------------------------------------------- void *__thiscall sub_96B500(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NsFNC_34::`vftable'; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C260: using guessed type void *NsFNC_34::`vftable'; //----- (0096B530) -------------------------------------------------------- char __stdcall sub_96B530(int a1, int a2, int a3) { size_t v3; // ecx unsigned int v4; // edx int v5; // eax char v6; // bl int v7; // esi _BYTE *v8; // eax _BYTE *v9; // eax int v10; // eax bool v11; // cf void *v12; // edx _BYTE *v14; // eax void *v15; // [esp+14h] [ebp-2Ch] int v16; // [esp+24h] [ebp-1Ch] unsigned int v17; // [esp+28h] [ebp-18h] int v18; // [esp+3Ch] [ebp-4h] v3 = 0; v4 = 15; v17 = 15; v16 = 0; LOBYTE(v15) = 0; v5 = *(_DWORD *)(a2 + 8); v6 = *(_BYTE *)(v5 + *(_DWORD *)(a2 + 268)); v18 = 0; *(_DWORD *)(a2 + 8) = v5 + 1; if ( !v6 ) { LABEL_13: v12 = &v15; goto LABEL_14; } while ( v6 != 34 ) { JUMPOUT(-1 - v3, 1, std::vector>::_Xlen); v7 = v3 + 1; JUMPOUT(v3 + 1, -2, std::vector>::_Xlen); if ( v4 >= v3 + 1 ) { if ( v3 == -1 ) { v14 = v15; v16 = 0; if ( v4 < 0x10 ) v14 = &v15; *v14 = 0; } else { LABEL_5: v8 = v15; if ( v4 < 0x10 ) v8 = &v15; v8[v3] = v6; v9 = v15; v16 = v7; if ( v17 < 0x10 ) v9 = &v15; v9[v7] = 0; } v3 = v16; v4 = v17; goto LABEL_11; } sub_4015D0((const void **)&v15, (void *)(v3 + 1), v3); v4 = v17; v3 = v16; if ( v7 ) goto LABEL_5; LABEL_11: v10 = *(_DWORD *)(a2 + 8); v6 = *(_BYTE *)(v10 + *(_DWORD *)(a2 + 268)); *(_DWORD *)(a2 + 8) = v10 + 1; if ( !v6 ) break; } v11 = v4 < 0x10; v12 = v15; if ( v11 ) goto LABEL_13; LABEL_14: sub_4018E0((_DWORD *)(a1 + 40), v12, strlen((const char *)v12)); if ( v17 >= 0x10 ) operator delete(v15); return 1; } // 96B677: using guessed type void __noreturn std::vector>::_Xlen(); //----- (0096B690) -------------------------------------------------------- void __cdecl sub_96B690(int a1, int a2, int a3) { int v3; // eax if ( a2 ) { *(_DWORD *)(a2 + 20) = 15; *(_DWORD *)(a2 + 16) = 0; *(_BYTE *)a2 = 0; sub_4017F0((const void **)a2, (const void **)a3, 0, (void *)0xFFFFFFFF); v3 = *(_DWORD *)(a3 + 28); *(_DWORD *)(a2 + 28) = v3; if ( v3 ) InterlockedIncrement((volatile LONG *)(v3 + 4)); } } //----- (0096B710) -------------------------------------------------------- _DWORD *__thiscall sub_96B710(_DWORD *this, char *a2) { _DWORD *v2; // edi _DWORD *v3; // esi int v4; // ecx char *v5; // edx int v7; // [esp+0h] [ebp-30h] void **v8; // [esp+10h] [ebp-20h] void *v9; // [esp+1Ch] [ebp-14h] int *v10; // [esp+20h] [ebp-10h] int v11; // [esp+2Ch] [ebp-4h] v10 = &v7; v2 = this; v3 = operator new(0x30u); v9 = v3; if ( !v3 ) { a2 = 0; std::exception::exception((std::exception *)&v8, (const char *const *)&a2); v8 = &std::bad_alloc::`vftable'; _CxxThrowException(&v8, &_TI2_AVbad_alloc_std__); } *v3 = v2[1]; v3[1] = v2[1]; v4 = v2[1]; v5 = a2; *((_WORD *)v3 + 22) = 0; v11 = 0; v3[2] = v4; sub_96B690((int)v2 + 13, (int)(v3 + 3), (int)v5); return v3; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0096B7D0) -------------------------------------------------------- int *__thiscall sub_96B7D0(_DWORD *this, int *a2, int a3) { int *v3; // ebx int v4; // edi int v5; // eax int v6; // esi _DWORD *v7; // ecx int v8; // eax _DWORD *v9; // eax int v10; // ecx int v11; // ecx int *v12; // ecx char v13; // cl _DWORD *v14; // ecx _BYTE *v15; // eax int v16; // eax int *result; // eax _BYTE *v18; // [esp+10h] [ebp-8h] _DWORD *v19; // [esp+14h] [ebp-4h] v3 = (int *)a3; v19 = this; if ( *(_BYTE *)(a3 + 45) ) std::_Xout_of_range("invalid map/set iterator"); v18 = (_BYTE *)a3; sub_66FB80(&a3); if ( *(_BYTE *)(*v3 + 45) ) { v4 = v3[2]; LABEL_8: v6 = v3[1]; if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; v7 = v19; v8 = v19[1]; if ( *(int **)(v8 + 4) == v3 ) { *(_DWORD *)(v8 + 4) = v4; } else if ( *(int **)v6 == v3 ) { *(_DWORD *)v6 = v4; } else { *(_DWORD *)(v6 + 8) = v4; } if ( *(int **)v19[1] == v3 ) { if ( *(_BYTE *)(v4 + 45) ) { v9 = (_DWORD *)v6; } else { v9 = sub_5AB880((_DWORD *)v4); v7 = v19; } *(_DWORD *)v7[1] = v9; } v10 = v7[1]; if ( *(int **)(v10 + 8) == v3 ) { if ( *(_BYTE *)(v4 + 45) ) *(_DWORD *)(v10 + 8) = v6; else *(_DWORD *)(v10 + 8) = sub_6689E0(v4); } goto LABEL_35; } if ( *(_BYTE *)(v3[2] + 45) ) { v4 = *v3; goto LABEL_8; } v5 = a3; v4 = *(_DWORD *)(a3 + 8); if ( (int *)a3 == v3 ) goto LABEL_8; *(_DWORD *)(*v3 + 4) = a3; *(_DWORD *)v5 = *v3; if ( v5 == v3[2] ) { v6 = v5; } else { v6 = *(_DWORD *)(v5 + 4); if ( !*(_BYTE *)(v4 + 45) ) *(_DWORD *)(v4 + 4) = v6; *(_DWORD *)v6 = v4; *(_DWORD *)(v5 + 8) = v3[2]; *(_DWORD *)(v3[2] + 4) = v5; } v11 = v19[1]; if ( *(int **)(v11 + 4) == v3 ) { *(_DWORD *)(v11 + 4) = v5; } else { v12 = (int *)v3[1]; if ( (int *)*v12 == v3 ) *v12 = v5; else v12[2] = v5; } *(_DWORD *)(v5 + 4) = v3[1]; v13 = *(_BYTE *)(v5 + 44); *(_BYTE *)(v5 + 44) = *((_BYTE *)v3 + 44); *((_BYTE *)v3 + 44) = v13; LABEL_35: v14 = v19; if ( v18[44] == 1 ) { if ( v4 != *(_DWORD *)(v19[1] + 4) ) { do { if ( *(_BYTE *)(v4 + 44) != 1 ) break; v15 = *(_BYTE **)v6; if ( v4 == *(_DWORD *)v6 ) { v15 = *(_BYTE **)(v6 + 8); if ( !v15[44] ) { v15[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_467110(v14, v6); v15 = *(_BYTE **)(v6 + 8); v14 = v19; } if ( v15[45] ) goto LABEL_53; if ( *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 || *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) != 1 ) { if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) == 1 ) { *(_BYTE *)(*(_DWORD *)v15 + 44) = 1; v15[44] = 0; sub_747860(v14, v15); v15 = *(_BYTE **)(v6 + 8); v14 = v19; } v15[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) = 1; sub_467110(v14, v6); LABEL_58: v14 = v19; break; } } else { if ( !v15[44] ) { v15[44] = 1; *(_BYTE *)(v6 + 44) = 0; sub_747860(v14, (_DWORD *)v6); v15 = *(_BYTE **)v6; v14 = v19; } if ( v15[45] ) goto LABEL_53; if ( *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) != 1 || *(_BYTE *)(*(_DWORD *)v15 + 44) != 1 ) { if ( *(_BYTE *)(*(_DWORD *)v15 + 44) == 1 ) { *(_BYTE *)(*((_DWORD *)v15 + 2) + 44) = 1; v15[44] = 0; sub_467110(v14, (int)v15); v15 = *(_BYTE **)v6; v14 = v19; } v15[44] = *(_BYTE *)(v6 + 44); *(_BYTE *)(v6 + 44) = 1; *(_BYTE *)(*(_DWORD *)v15 + 44) = 1; sub_747860(v14, (_DWORD *)v6); goto LABEL_58; } } v15[44] = 0; LABEL_53: v4 = v6; v6 = *(_DWORD *)(v6 + 4); } while ( v4 != *(_DWORD *)(v14[1] + 4) ); } *(_BYTE *)(v4 + 44) = 1; } sub_671200((int)v14 + 13, (int)(v18 + 12)); operator delete(v18); v16 = v19[2]; if ( v16 ) v19[2] = v16 - 1; result = a2; *a2 = a3; return result; } //----- (0096BA30) -------------------------------------------------------- void __thiscall sub_96BA30(void *this, void *a2) { void *v2; // edi int v3; // ebx void **v4; // esi v2 = a2; v3 = (int)this; v4 = (void **)a2; if ( !*((_BYTE *)a2 + 45) ) { do { sub_96BA30(v4[2]); v4 = (void **)*v4; sub_671200(v3 + 13, (int)v2 + 12); operator delete(v2); v2 = v4; } while ( !*((_BYTE *)v4 + 45) ); } } //----- (0096BA80) -------------------------------------------------------- int __thiscall sub_96BA80(_DWORD *this, int a2, void *a3, int a4) { unsigned __int8 *v4; // edx int v5; // ebx int v6; // edi bool v7; // al unsigned int v8; // ecx unsigned __int8 *v9; // eax unsigned __int8 *v10; // edx unsigned int v11; // esi unsigned int v12; // ecx int v13; // eax bool v14; // sf unsigned int v15; // edi unsigned int v16; // esi unsigned int v17; // edx unsigned __int8 *v18; // ecx int v19; // eax bool v20; // sf signed int v21; // eax int v22; // esi int *v23; // eax int v24; // ecx int result; // eax bool v26; // cf unsigned __int8 *v27; // ebx unsigned int v28; // edx unsigned __int8 *v29; // eax int v30; // [esp+Ch] [ebp-14h] unsigned int v31; // [esp+10h] [ebp-10h] unsigned int v32; // [esp+14h] [ebp-Ch] _DWORD *v33; // [esp+18h] [ebp-8h] char v34; // [esp+1Ch] [ebp-4h] v4 = (unsigned __int8 *)a3; v5 = *(_DWORD *)(this[1] + 4); v6 = this[1]; v7 = 1; v33 = this; v34 = 1; if ( !*(_BYTE *)(v5 + 45) ) { v8 = *((_DWORD *)a3 + 7); v32 = *((_DWORD *)a3 + 7); v31 = *((_DWORD *)a3 + 8); while ( 1 ) { v30 = v5; v9 = (unsigned __int8 *)(v5 + 12); if ( (_BYTE)a4 ) { if ( v31 < 0x10 ) v10 = v4 + 12; else v10 = (unsigned __int8 *)*((_DWORD *)v4 + 3); v11 = *(_DWORD *)(v5 + 28); v12 = *(_DWORD *)(v5 + 28); if ( v11 >= v32 ) v12 = v32; if ( *(_DWORD *)(v5 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; v13 = sub_40C0B0(v9, v10, v12); v14 = v13 < 0; if ( !v13 ) { if ( v11 < v32 ) { v7 = 0; goto LABEL_32; } v14 = (v11 != v32) < 0; } v7 = !v14; } else { v15 = *(_DWORD *)(v5 + 28); if ( *(_DWORD *)(v5 + 32) >= 0x10u ) v9 = *(unsigned __int8 **)v9; v16 = *((_DWORD *)a3 + 7); if ( v8 < v16 ) v16 = v8; v17 = v16; if ( v16 >= v15 ) v17 = *(_DWORD *)(v5 + 28); if ( v31 < 0x10 ) v18 = (unsigned __int8 *)a3 + 12; else v18 = (unsigned __int8 *)*((_DWORD *)a3 + 3); v19 = sub_40C0B0(v18, v9, v17); v20 = v19 < 0; if ( !v19 ) { if ( v16 >= v15 ) v21 = v16 != v15; else v21 = -1; v20 = v21 < 0; } v7 = v20; } LABEL_32: v34 = v7; if ( v7 ) v5 = *(_DWORD *)v5; else v5 = *(_DWORD *)(v5 + 8); v4 = (unsigned __int8 *)a3; if ( *(_BYTE *)(v5 + 45) ) { v6 = v30; this = v33; break; } v8 = v32; } } v22 = v6; a4 = v6; if ( v7 ) { if ( v6 == *(_DWORD *)this[1] ) { v23 = (int *)sub_6E0E00(this, (int)&a4, 1, v6, v4); LABEL_40: v24 = *v23; result = a2; *(_DWORD *)a2 = v24; *(_BYTE *)(a2 + 4) = 1; return result; } sub_49F3C0(&a4); v22 = a4; v4 = (unsigned __int8 *)a3; } v26 = *((_DWORD *)v4 + 8) < 0x10u; v27 = v4 + 12; v28 = *((_DWORD *)v4 + 7); if ( v26 ) v29 = v27; else v29 = *(unsigned __int8 **)v27; if ( sub_40C2F0((unsigned __int8 *)(v22 + 12), 0, *(_DWORD *)(v22 + 28), v29, v28) < 0 ) { v23 = (int *)sub_6E0E00(v33, (int)&a4, v34, v6, a3); goto LABEL_40; } sub_671200((int)v33 + 13, (int)v27); operator delete(a3); result = a2; *(_DWORD *)a2 = v22; *(_BYTE *)(a2 + 4) = 0; return result; } //----- (0096BC30) -------------------------------------------------------- char __thiscall sub_96BC30(_DWORD *this, void *a2, int a3) { _DWORD *v3; // edi _DWORD *v4; // eax void (__thiscall ***v5)(_DWORD, signed int); // esi int v7; // [esp+Ch] [ebp-38h] void *v8; // [esp+14h] [ebp-30h] int v9; // [esp+24h] [ebp-20h] unsigned int v10; // [esp+28h] [ebp-1Ch] int v11; // [esp+30h] [ebp-14h] int v12; // [esp+40h] [ebp-4h] v3 = this; v10 = 15; v9 = 0; LOBYTE(v8) = 0; sub_4018E0(&v8, a2, strlen((const char *)a2)); v11 = a3; if ( a3 ) InterlockedIncrement((volatile LONG *)(a3 + 4)); v12 = 0; v4 = sub_96B710(v3 + 1, (char *)&v8); sub_96BA80(v3 + 1, (int)&v7, v4, 0); v12 = 1; if ( v11 ) { v5 = (void (__thiscall ***)(_DWORD, signed int))v11; if ( !InterlockedDecrement((volatile LONG *)(v11 + 4)) ) { if ( v5 ) (**v5)(v5, 1); } } if ( v10 >= 0x10 ) operator delete(v8); return 0; } //----- (0096BD20) -------------------------------------------------------- int __thiscall sub_96BD20(_DWORD *this, const CHAR *a2) { _DWORD *v2; // ebx _DWORD *v3; // edi _DWORD *v4; // eax _DWORD *v5; // esi _DWORD *v6; // eax _DWORD *v7; // esi _DWORD *v8; // eax _DWORD *v9; // esi _DWORD *v10; // eax _DWORD *v11; // esi _DWORD *v12; // eax _DWORD *v13; // esi unsigned int v14; // esi _DWORD *v15; // eax int v16; // esi int *v17; // eax int *v18; // ebx unsigned int v19; // esi int v20; // eax unsigned int v21; // edi unsigned int v22; // edx unsigned __int8 *v23; // ecx int v24; // eax bool v25; // sf signed int v26; // eax void **v27; // eax _DWORD **v28; // esi bool v29; // al int v30; // esi int v32; // [esp+10h] [ebp-264h] const CHAR *v33; // [esp+18h] [ebp-25Ch] _DWORD *v34; // [esp+1Ch] [ebp-258h] void *v35[68]; // [esp+20h] [ebp-254h] char v36; // [esp+130h] [ebp-144h] void *v37; // [esp+140h] [ebp-134h] unsigned int v38; // [esp+150h] [ebp-124h] unsigned int v39; // [esp+154h] [ebp-120h] char v40; // [esp+15Ch] [ebp-118h] void *v41; // [esp+25Ch] [ebp-18h] __int16 v42; // [esp+260h] [ebp-14h] int v43; // [esp+270h] [ebp-4h] v2 = this; v34 = this; v33 = a2; sub_96C790(v35); v3 = 0; v43 = 0; v4 = operator new(0x24u); v5 = v4; v41 = v4; LOBYTE(v43) = 1; if ( v4 ) { sub_96C850(v4); LOBYTE(v43) = 2; *v5 = &NsFNC_35::`vftable'; sub_4018E0(v5 + 2, "#", 1u); } else { v5 = 0; } LOBYTE(v43) = 0; sub_96BC30(v2, "#", (int)v5); v6 = operator new(0x24u); v7 = v6; v41 = v6; LOBYTE(v43) = 3; if ( v6 ) { sub_96C850(v6); LOBYTE(v43) = 4; *v7 = &NsFNC_123::`vftable'; sub_4018E0(v7 + 2, &unk_A4C22C, 1u); } else { v7 = 0; } LOBYTE(v43) = 0; sub_96BC30(v2, &unk_A4C22C, (int)v7); v8 = operator new(0x24u); v9 = v8; v41 = v8; LOBYTE(v43) = 5; if ( v8 ) { sub_96C850(v8); LOBYTE(v43) = 6; *v9 = &NsFNC_125::`vftable'; sub_4018E0(v9 + 2, &unk_A4C240, 1u); } else { v9 = 0; } LOBYTE(v43) = 0; sub_96BC30(v2, &unk_A4C240, (int)v9); v10 = operator new(0x24u); v11 = v10; v41 = v10; LOBYTE(v43) = 7; if ( v10 ) { sub_96C850(v10); LOBYTE(v43) = 8; *v11 = &NsFNC_58::`vftable'; sub_4018E0(v11 + 2, ":", 1u); } else { v11 = 0; } LOBYTE(v43) = 0; sub_96BC30(v2, ":", (int)v11); v12 = operator new(0x24u); v13 = v12; v41 = v12; LOBYTE(v43) = 9; if ( v12 ) { sub_96C850(v12); LOBYTE(v43) = 10; *v13 = &NsFNC_34::`vftable'; sub_4018E0(v13 + 2, &unk_A4C230, 1u); } else { v13 = 0; } LOBYTE(v43) = 0; sub_96BC30(v2, &unk_A4C230, (int)v13); v41 = (void *)981302051; v42 = 34; sub_697870(&v36); v14 = 0; do sub_697C20(&v36, (int)&v32, (char *)&v41 + v14++, 0); while ( v14 < 5 ); if ( sub_8CE8C0(v35, v33) ) { v15 = operator new(0x50u); v41 = v15; LOBYTE(v43) = 11; if ( v15 ) v3 = sub_96C970(v15); v16 = v2[5]; LOBYTE(v43) = 0; if ( (_DWORD *)v16 != v3 ) { if ( v16 && !InterlockedDecrement((volatile LONG *)(v16 + 4)) && v16 ) (**(void (__thiscall ***)(int, signed int))v16)(v16, 1); v2[5] = v3; if ( v3 ) InterlockedIncrement(v3 + 1); } if ( sub_96C690(v35, &v40) ) { do { v39 = 15; v38 = 0; LOBYTE(v37) = 0; sub_4018E0(&v37, &v40, strlen(&v40)); LOBYTE(v43) = 12; v17 = sub_4F1D20(v2 + 1, (int)&v37); v18 = (int *)v2[2]; v33 = (const CHAR *)v17; if ( v17 == v18 ) goto LABEL_52; v19 = v17[7]; v20 = (int)(v17 + 3); if ( *(_DWORD *)(v20 + 20) >= 0x10u ) v20 = *(_DWORD *)v20; v21 = v38; v22 = v38; if ( v38 >= v19 ) v22 = v19; v23 = (unsigned __int8 *)v37; if ( v39 < 0x10 ) v23 = (unsigned __int8 *)&v37; v24 = sub_40C0B0(v23, (unsigned __int8 *)v20, v22); v25 = v24 < 0; if ( !v24 ) { if ( v21 >= v19 ) v26 = v21 != v19; else v26 = -1; v25 = v26 < 0; } if ( v25 ) { LABEL_52: v41 = v18; v27 = &v41; } else { v27 = (void **)&v33; } v28 = (_DWORD **)*v27; LOBYTE(v43) = 0; if ( v39 >= 0x10 ) operator delete(v37); v39 = 15; v38 = 0; LOBYTE(v37) = 0; if ( v28 != (_DWORD **)v34[2] ) (*(void (__stdcall **)(_DWORD, void **, _DWORD *))(*v28[10] + 4))(v34[5], v35, v34 + 1); v29 = sub_96C690(v35, &v40); v2 = v34; } while ( v29 ); } } v30 = v2[5]; v43 = -1; sub_96C6C0(v35); return v30; } // A4C224: using guessed type void *NsFNC_35::`vftable'; // A4C238: using guessed type void *NsFNC_123::`vftable'; // A4C248: using guessed type void *NsFNC_125::`vftable'; // A4C254: using guessed type void *NsFNC_58::`vftable'; // A4C260: using guessed type void *NsFNC_34::`vftable'; //----- (0096C140) -------------------------------------------------------- int *__thiscall sub_96C140(_DWORD *this, int *a2, int a3, int a4) { _DWORD *v4; // esi int v5; // eax int v6; // ecx int *v7; // ecx int *result; // eax int v9; // edx int **v10; // eax int v11; // ecx int *j; // eax int i; // eax char v14; // [esp+4h] [ebp-4h] v4 = this; v5 = this[1]; v6 = a3; if ( a3 != *(_DWORD *)v5 || a4 != v5 ) { for ( ; a3 != a4; v6 = a3 ) { v9 = v6; if ( !*(_BYTE *)(v6 + 45) ) { v10 = *(int ***)(v6 + 8); if ( *((_BYTE *)v10 + 45) ) { for ( i = *(_DWORD *)(v6 + 4); !*(_BYTE *)(i + 45); i = *(_DWORD *)(i + 4) ) { if ( v6 != *(_DWORD *)(i + 8) ) break; v6 = i; } a3 = i; } else { v11 = *(_DWORD *)(v6 + 8); for ( j = *v10; !*((_BYTE *)j + 45); j = (int *)*j ) v11 = (int)j; a3 = v11; } } sub_96B7D0(v4, (int *)&v14, v9); } result = a2; *a2 = v6; } else { sub_96BA30(v4, *(void **)(v5 + 4)); *(_DWORD *)(v4[1] + 4) = v4[1]; *(_DWORD *)v4[1] = v4[1]; *(_DWORD *)(v4[1] + 8) = v4[1]; v7 = (int *)v4[1]; result = a2; v4[2] = 0; *a2 = *v7; } return result; } //----- (0096C200) -------------------------------------------------------- void __thiscall sub_96C200(_DWORD *this) { _DWORD *v1; // esi int *v2; // eax int v3; // ST04_4 char v4; // [esp+8h] [ebp-14h] _DWORD *v5; // [esp+Ch] [ebp-10h] int v6; // [esp+18h] [ebp-4h] v1 = this; v5 = this; v2 = (int *)this[1]; v3 = *v2; v6 = 0; sub_96C140(this, (int *)&v4, v3, (int)v2); operator delete((void *)v1[1]); } //----- (0096C260) -------------------------------------------------------- void __thiscall sub_96C260(_DWORD *this) { _DWORD *v1; // esi int v2; // edi int v3; // edi int v4; // edi int v5; // edi int v6; // esi int v7; // ST08_4 int v8; // ST04_4 char v9; // [esp+Ch] [ebp-14h] _DWORD *v10; // [esp+10h] [ebp-10h] int v11; // [esp+1Ch] [ebp-4h] v1 = this; v10 = this; *this = &NsFileReader::`vftable'; v2 = this[6]; v11 = 2; if ( v2 ) { if ( !InterlockedDecrement((volatile LONG *)(v2 + 4)) && v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); v1[6] = 0; } v3 = v1[5]; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[5] = 0; } v4 = v1[6]; LOBYTE(v11) = 1; if ( v4 && !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v5 = v1[5]; LOBYTE(v11) = 0; if ( v5 && !InterlockedDecrement((volatile LONG *)(v5 + 4)) && v5 ) (**(void (__thiscall ***)(int, signed int))v5)(v5, 1); v6 = (int)(v1 + 1); v10 = (_DWORD *)v6; v7 = *(_DWORD *)(v6 + 4); v8 = **(_DWORD **)(v6 + 4); v11 = 3; sub_96C140((_DWORD *)v6, (int *)&v9, v8, v7); operator delete(*(void **)(v6 + 4)); } // A4C274: using guessed type void *NsFileReader::`vftable'; //----- (0096C380) -------------------------------------------------------- _DWORD *__thiscall sub_96C380(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax int v3; // edi int v4; // edi void **v6; // [esp+10h] [ebp-20h] _DWORD *v7; // [esp+1Ch] [ebp-14h] char *v8; // [esp+20h] [ebp-10h] int v9; // [esp+2Ch] [ebp-4h] v1 = this; v7 = this; *this = &NsFileReader::`vftable'; this[3] = 0; v2 = operator new(0x30u); if ( !v2 ) { v8 = 0; std::exception::exception((std::exception *)&v6, (const char *const *)&v8); v6 = &std::bad_alloc::`vftable'; _CxxThrowException(&v6, &_TI2_AVbad_alloc_std__); } v1[2] = v2; *v2 = v2; *(_DWORD *)(v1[2] + 4) = v1[2]; *(_DWORD *)(v1[2] + 8) = v1[2]; *(_BYTE *)(v1[2] + 44) = 1; *(_BYTE *)(v1[2] + 45) = 1; v9 = 0; v1[5] = 0; v1[6] = 0; v3 = v1[5]; LOBYTE(v9) = 2; if ( v3 ) { if ( !InterlockedDecrement((volatile LONG *)(v3 + 4)) && v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); v1[5] = 0; } v4 = v1[6]; if ( v4 ) { if ( !InterlockedDecrement((volatile LONG *)(v4 + 4)) && v4 ) (**(void (__thiscall ***)(int, signed int))v4)(v4, 1); v1[6] = 0; } v1[7] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A4C274: using guessed type void *NsFileReader::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0096C480) -------------------------------------------------------- void *__thiscall sub_96C480(void *this, char a2) { void *v2; // esi v2 = this; sub_96C260(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0096C4B0) -------------------------------------------------------- int __cdecl sub_96C4B0(const char *a1, const char *a2) { return _stricmp(a1, a2); } //----- (0096C4C0) -------------------------------------------------------- BOOL __stdcall sub_96C4C0(char *a1) { char v1; // al v1 = *a1; return *a1 >= 97 && v1 <= 122 || v1 >= 65 && v1 <= 90 || v1 >= 48 && v1 <= 57 || v1 == 95 || v1 == 46 || v1 == 45 || v1 == 92; } //----- (0096C500) -------------------------------------------------------- signed int __thiscall sub_96C500(_DWORD *this, int a2, int *a3, int a4, _BYTE *a5) { _BYTE *v5; // ebx int v6; // esi _DWORD *v7; // edi signed int result; // eax char v9; // al int v10; // esi char v11; // al char v12; // al char v13; // al v5 = a5; v6 = a2; v7 = this; sub_8CEB20(this + 68, (int **)&a2, a5); if ( v7[69] != a2 ) { *a3 = v6; return 1; } if ( *v5 != 47 ) goto LABEL_15; v9 = *(_BYTE *)(v6 + a4); v10 = v6 + 1; if ( v9 == 47 ) { do v11 = *(_BYTE *)(v10++ + a4); while ( v11 != 10 ); *a3 = v10; return 0; } if ( v9 != 42 ) { v6 = v10 - 1; LABEL_15: *a3 = v6; return 0; } v12 = *(_BYTE *)(v10 + a4); if ( v12 ) { while ( 1 ) { ++v10; if ( v12 == 42 ) { v13 = *(_BYTE *)(v10++ + a4); if ( v13 == 47 ) break; } v12 = *(_BYTE *)(v10 + a4); if ( !v12 ) goto LABEL_12; } *a3 = v10; result = 0; } else { LABEL_12: *a3 = v10 + 1; result = 0; } return result; } //----- (0096C5C0) -------------------------------------------------------- signed int __thiscall sub_96C5C0(_DWORD *this, int a2, _DWORD *a3, int a4, _BYTE *a5) { int v5; // edi char v6; // bl int v7; // esi int v8; // edx int v9; // edx signed int result; // eax _DWORD *v11; // ecx _BYTE *v12; // eax int *v13; // edx _DWORD *v14; // [esp+Ch] [ebp-8h] signed int v15; // [esp+10h] [ebp-4h] v5 = a4; v6 = *(_BYTE *)(a2 + a4); v7 = 0; v8 = a2 + 1; v14 = this; v15 = 0; HIBYTE(a2) = v6; a4 = v8; if ( !v6 ) { LABEL_8: v11 = a3; a5[v7] = 0; *v11 = v8 - 1; return 0; } while ( sub_96C4C0((char *)&a2 + 3) ) { a5[v7] = v6; v15 = 1; ++v7; LABEL_7: v6 = *(_BYTE *)(v9 + v5); v8 = v9 + 1; HIBYTE(a2) = v6; a4 = v8; if ( !v6 ) goto LABEL_8; } result = 1; if ( v15 == 1 ) { a5[v7] = 0; *a3 = v9 - 1; return result; } if ( !sub_96C500(v14, v9, &a4, v5, (_BYTE *)&a2 + 3) ) { v9 = a4; goto LABEL_7; } v12 = a5; v13 = a3; *a5 = v6; v12[1] = 0; *v13 = a4; return 1; } //----- (0096C690) -------------------------------------------------------- bool __thiscall sub_96C690(_DWORD *this, _BYTE *a2) { return sub_96C5C0(this, this[2], this + 2, this[67], a2) != 0; } //----- (0096C6C0) -------------------------------------------------------- void __thiscall sub_96C6C0(_DWORD *this) { _DWORD *v1; // esi void *v2; // eax int v3; // esi _DWORD *v4; // ST08_4 _DWORD *v5; // ST04_4 char v6; // [esp+8h] [ebp-14h] int v7; // [esp+Ch] [ebp-10h] int v8; // [esp+18h] [ebp-4h] v1 = this; v2 = (void *)this[67]; *this = &NsTextCodeV0_2::`vftable'; if ( v2 ) operator delete[](v2); v3 = (int)(v1 + 68); v7 = v3; v4 = *(_DWORD **)(v3 + 4); v5 = **(_DWORD ***)(v3 + 4); v8 = 0; sub_8CEB90((_DWORD *)v3, (int *)&v6, v5, v4); operator delete(*(void **)(v3 + 4)); } // A4C280: using guessed type void *NsTextCodeV0_2::`vftable'; //----- (0096C740) -------------------------------------------------------- int __thiscall sub_96C740(_DWORD *this, const char *a2) { _DWORD *v2; // esi int v3; // ebx char v5; // [esp+Ch] [ebp-104h] v2 = this; v3 = this[2]; sub_96C690(this, &v5); v2[2] = v3; return sub_96C4B0(a2, &v5); } //----- (0096C790) -------------------------------------------------------- _DWORD *__thiscall sub_96C790(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+4h] [ebp-10h] char *v5; // [esp+10h] [ebp-4h] v1 = this; *this = &NsTextCodeV0_2::`vftable'; this[70] = 0; v2 = operator new(0x10u); if ( !v2 ) { v5 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v5); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[69] = v2; *v2 = v2; *(_DWORD *)(v1[69] + 4) = v1[69]; *(_DWORD *)(v1[69] + 8) = v1[69]; *(_BYTE *)(v1[69] + 13) = 1; *(_BYTE *)(v1[69] + 14) = 1; v1[67] = 0; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A4C280: using guessed type void *NsTextCodeV0_2::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0096C820) -------------------------------------------------------- void *__thiscall sub_96C820(void *this, char a2) { void *v2; // esi v2 = this; sub_96C6C0(this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0096C850) -------------------------------------------------------- _DWORD *__thiscall sub_96C850(_DWORD *this) { _DWORD *v1; // esi v1 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &INsFile_NodeCreater::`vftable'; v1[7] = 15; v1[6] = 0; *((_BYTE *)v1 + 8) = 0; return v1; } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4C288: using guessed type void *INsFile_NodeCreater::`vftable'; //----- (0096C890) -------------------------------------------------------- LONG __thiscall sub_96C890(void **this) { void **v1; // esi v1 = this; *this = &INsFile_NodeCreater::`vftable'; if ( (unsigned int)this[7] >= 0x10 ) operator delete(this[2]); v1[7] = (void *)15; v1[6] = 0; *((_BYTE *)v1 + 8) = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4C288: using guessed type void *INsFile_NodeCreater::`vftable'; //----- (0096C8D0) -------------------------------------------------------- void *__thiscall sub_96C8D0(void *this, char a2) { void *v2; // esi v2 = this; sub_96C890((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0096C900) -------------------------------------------------------- LONG __cdecl sub_96C900(int a1, LONG a2) { LONG result; // eax int v3; // esi result = a2; v3 = *(_DWORD *)(a2 + 8); if ( v3 ) { result = InterlockedDecrement((volatile LONG *)(v3 + 4)); if ( !result ) { if ( v3 ) result = (**(int (__thiscall ***)(int, signed int))v3)(v3, 1); } } return result; } //----- (0096C930) -------------------------------------------------------- void __thiscall sub_96C930(_DWORD *this) { _DWORD *v1; // edi _DWORD *v2; // esi _DWORD *v3; // ebx v1 = this; v2 = *(_DWORD **)*this; *(_DWORD *)*this = *this; *(_DWORD *)(*this + 4) = *this; this[1] = 0; if ( v2 != (_DWORD *)*this ) { do { v3 = (_DWORD *)*v2; sub_96C900((int)(v1 + 2), (LONG)v2); operator delete(v2); v2 = v3; } while ( v3 != (_DWORD *)*v1 ); } } //----- (0096C970) -------------------------------------------------------- _DWORD *__thiscall sub_96C970(_DWORD *this) { _DWORD *v1; // esi _DWORD *v2; // eax void **v4; // [esp+Ch] [ebp-20h] _DWORD *v5; // [esp+18h] [ebp-14h] char *v6; // [esp+1Ch] [ebp-10h] int v7; // [esp+28h] [ebp-4h] v1 = this; v5 = this; *this = &NiRefObject::`vftable'; this[1] = 0; InterlockedIncrement(&Addend); *v1 = &INsFile::`vftable'; v1[8] = 15; v1[7] = 0; v7 = 0; *((_BYTE *)v1 + 12) = 0; v1[15] = 15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; LOBYTE(v7) = 2; v1[18] = 0; v2 = operator new(0xCu); if ( !v2 ) { v6 = 0; std::exception::exception((std::exception *)&v4, (const char *const *)&v6); v4 = &std::bad_alloc::`vftable'; _CxxThrowException(&v4, &_TI2_AVbad_alloc_std__); } v1[17] = v2; *v2 = v2; *(_DWORD *)(v1[17] + 4) = v1[17]; return v1; } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4C294: using guessed type void *INsFile::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0096CA30) -------------------------------------------------------- LONG __thiscall sub_96CA30(void **this) { void **v1; // esi void **v2; // edi v1 = this; *this = &INsFile::`vftable'; v2 = this + 17; sub_96C930(this + 17); operator delete(*v2); if ( (unsigned int)v1[15] >= 0x10 ) operator delete(v1[10]); v1[15] = (void *)15; v1[14] = 0; *((_BYTE *)v1 + 40) = 0; if ( (unsigned int)v1[8] >= 0x10 ) operator delete(v1[3]); v1[8] = (void *)15; v1[7] = 0; *((_BYTE *)v1 + 12) = 0; *v1 = &NiRefObject::`vftable'; return InterlockedDecrement(&Addend); } // 9AD0C4: using guessed type void *NiRefObject::`vftable'; // A4C294: using guessed type void *INsFile::`vftable'; //----- (0096CAF0) -------------------------------------------------------- void *__thiscall sub_96CAF0(void *this, char a2) { void *v2; // esi v2 = this; sub_96CA30((void **)this); if ( a2 & 1 ) operator delete(v2); return v2; } //----- (0096CB20) -------------------------------------------------------- void __thiscall sub_96CB20(void **this) { void **v1; // esi v1 = this; if ( this[2] ) operator delete[](this[2]); *v1 = 0; v1[1] = 0; v1[2] = 0; } //----- (0096CB50) -------------------------------------------------------- int __thiscall sub_96CB50(_DWORD *this, float a2, float a3) { signed int v3; // esi int v4; // edi int v5; // edx int v7; // [esp+Ch] [ebp+8h] v3 = (signed int)a2; v4 = (signed int)a3; v7 = v3 % 50; v5 = v4 % 50; if ( v3 ) v3 /= 50; if ( v4 ) v4 = (signed int)a3 / 50; if ( v7 > 25 ) ++v3; if ( v5 > 25 ) ++v4; return v3 + v4 * *this; } // 96CB50: could not find valid save-restore pair for ebx // 96CB50: could not find valid save-restore pair for edi // 96CB50: could not find valid save-restore pair for esi //----- (0096CBE0) -------------------------------------------------------- int __thiscall sub_96CBE0(int this) { int v1; // esi v1 = this; *(_DWORD *)this = 0; *(_DWORD *)(this + 4) = 0; *(_DWORD *)(this + 8) = 0; sub_96CB20((void **)this); return v1; } //----- (0096CC10) -------------------------------------------------------- char __thiscall sub_96CC10(_DWORD *this, float a2) { _DWORD *v2; // esi unsigned int v3; // edi char v4; // bl int v5; // eax void *v6; // eax long double v7; // st7 int v8; // eax int v10; // [esp+1Ch] [ebp-240h] float v11; // [esp+20h] [ebp-23Ch] char v12[4]; // [esp+24h] [ebp-238h] float v13; // [esp+28h] [ebp-234h] void *v14[68]; // [esp+2Ch] [ebp-230h] char v15; // [esp+13Ch] [ebp-120h] char v16; // [esp+14Ch] [ebp-110h] int v17; // [esp+258h] [ebp-4h] v2 = this; v13 = a2; sub_96C790(v14); v17 = 0; *(float *)v12 = COERCE_FLOAT(sub_7D7B2A); sub_697870(&v15); v3 = 0; do sub_697C20(&v15, (int)&v10, &v12[v3++], 0); while ( v3 < 4 ); v4 = 0; sub_8CE8C0(v14, (LPCSTR)LODWORD(v13)); while ( sub_96C690(v14, &v16) ) { if ( v4 ) { if ( !sub_96C4B0("MESH_VERTEX", &v16) ) { sub_96C690(v14, &v16); sub_96C690(v14, &v16); *(float *)v12 = atof(&v16); sub_96C690(v14, &v16); v13 = atof(&v16); sub_96C690(v14, &v16); v11 = atof(&v16); v8 = sub_96CB50(v2, *(float *)v12, v13); *(float *)(v2[2] + 4 * v8) = v11; } } else if ( !sub_96C4B0("MESH_NUMVERTEX", &v16) ) { sub_96C690(v14, &v16); v2[1] = 0; v5 = atoi(&v16); v2[1] = v5; v6 = operator new[](4 * v5); v7 = (double)(signed int)v2[1]; v2[2] = v6; v4 = 1; *v2 = (signed int)sqrt(v7); } } v17 = -1; sub_96C6C0(v14); return 1; } // 7D7B2A: using guessed type int sub_7D7B2A(); //----- (0096CE50) -------------------------------------------------------- const char *__cdecl sub_96CE50(char *a1) { unsigned int v1; // esi const char **v2; // edi v1 = 0; if ( !dword_AC9AD0 ) return 0; v2 = (const char **)&unk_AC9AD8; while ( _stricmp(a1, v2[1]) ) { ++v1; v2 += 2; if ( v1 >= dword_AC9AD0 ) return 0; } return *v2; } // AC9AD0: using guessed type int dword_AC9AD0; //----- (0096CEA0) -------------------------------------------------------- signed int __stdcall sub_96CEA0(int a1, int a2, int a3) { int *v3; // eax signed int result; // eax v3 = sub_932FF0(a2); if ( v3 ) result = (*(unsigned __int8 (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 48))(a2, v3, 0) != 0 ? 0 : -2147483568; else result = 1; return result; } //----- (0096CEE0) -------------------------------------------------------- void *__thiscall sub_96CEE0(void *this, char a2) { void *v2; // esi v2 = this; *(_DWORD *)this = &NiD3DSCM_Pixel::`vftable'; sub_933400(this); if ( a2 & 1 ) operator delete(v2); return v2; } // A4C2BC: using guessed type void *NiD3DSCM_Pixel::`vftable'; //----- (0096CF10) -------------------------------------------------------- char __cdecl sub_96CF10(char *Src, int a2, int a3) { char result; // al unsigned int v4; // esi const char **v5; // edi char v6; // [esp+4h] [ebp-108h] result = sub_92C710(Src, &v6, 0x104u, a3); if ( result ) { v4 = 0; if ( dword_AC9AD0 ) { v5 = (const char **)&unk_AC9AD8; while ( _stricmp(&v6, v5[1]) ) { ++v4; v5 += 2; if ( v4 >= dword_AC9AD0 ) goto LABEL_6; } *(_DWORD *)a2 = *v5; result = 1; } else { LABEL_6: result = 0; } } return result; } // AC9AD0: using guessed type int dword_AC9AD0; //----- (0096CFC0) -------------------------------------------------------- int __cdecl sub_96CFC0(char *Src) { int result; // eax int v2; // [esp+0h] [ebp-8h] int v3; // [esp+4h] [ebp-4h] if ( sub_96CF10(Src, (int)&v3, (int)&v2) && v3 && !byte_96D00C[v3 - 1] ) result = 7; else result = 0; return result; } //----- (0096D020) -------------------------------------------------------- signed int __stdcall sub_96D020(int a1) { const char *v1; // eax signed int v2; // ecx int v3; // eax signed int result; // eax v1 = sub_96CE50(*(char **)(a1 + 8)); if ( !v1 ) return -2147483584; *(_DWORD *)(a1 + 12) = v1; if ( byte_96D0C0[(_DWORD)(v1 - 1)] ) v2 = 0; else v2 = 7; v3 = (int)(v1 - 1); *(_DWORD *)(a1 + 16) = *(_DWORD *)(a1 + 16) & 0xFFFFFF00 | *((unsigned __int8 *)&dword_BA6F34 + v2); if ( v3 ) { if ( v3 == 1 ) { *(_DWORD *)(a1 + 36) = 16; *(_DWORD *)(a1 + 40) = 16; *(_BYTE *)(a1 + 48) = 0; *(_DWORD *)(a1 + 44) = &unk_AC6200; } result = 0; } else { *(_DWORD *)(a1 + 36) = 16; *(_DWORD *)(a1 + 40) = 16; *(_BYTE *)(a1 + 48) = 0; *(_DWORD *)(a1 + 44) = &unk_AC61F0; result = 0; } return result; } // BA6F34: using guessed type int dword_BA6F34; //----- (0096D0D0) -------------------------------------------------------- signed int __stdcall sub_96D0D0(int a1) { int v1; // ebx unsigned int v2; // kr00_4 char *v3; // esi char *v4; // eax unsigned int v5; // edx int v6; // eax int v7; // ecx char v9; // [esp+8h] [ebp-8h] int v10; // [esp+Ch] [ebp-4h] v1 = a1; v2 = strlen(*(const char **)(a1 + 8)); v3 = (char *)operator new(v2 + 1); strcpy_s(v3, v2 + 1, *(const char **)(v1 + 8)); v4 = strstr(v3, "@@"); if ( !v4 ) return -2147483584; *v4 = 0; v10 = 0; if ( !sub_92C550(v3, (int)&a1) ) return -2147483584; operator delete(v3); v5 = *(_DWORD *)(v1 + 16) & 0xFFFFFF00 | *((unsigned __int8 *)&dword_BA6F34 + sub_92C5A0(a1, &v10, &v9)); v6 = a1; *(_DWORD *)(v1 + 16) = v5; if ( !v6 ) return -2147483584; v7 = v10; *(_DWORD *)(v1 + 12) = v6; *(_DWORD *)(v1 + 28) = v7; return 0; } // BA6F34: using guessed type int dword_BA6F34; //----- (0096D190) -------------------------------------------------------- signed int __stdcall sub_96D190(int a1, int a2, int a3, int a4, char a5, char a6) { char v7; // al float v8; // [esp+0h] [ebp-40h] float v9; // [esp+4h] [ebp-3Ch] float v10; // [esp+8h] [ebp-38h] float v11; // [esp+Ch] [ebp-34h] float v12; // [esp+10h] [ebp-30h] float v13; // [esp+14h] [ebp-2Ch] float v14; // [esp+18h] [ebp-28h] float v15; // [esp+1Ch] [ebp-24h] float v16; // [esp+20h] [ebp-20h] float v17; // [esp+24h] [ebp-1Ch] float v18; // [esp+28h] [ebp-18h] float v19; // [esp+2Ch] [ebp-14h] float v20; // [esp+30h] [ebp-10h] float v21; // [esp+34h] [ebp-Ch] float v22; // [esp+38h] [ebp-8h] float v23; // [esp+3Ch] [ebp-4h] if ( a3 == 7 ) goto LABEL_18; if ( a3 != 9 ) { if ( a3 != 10 ) return 1; LABEL_18: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] * flt_BA70E0; flt_BA7134 = flt_BA70D4[0] * flt_BA70E0; flt_BA7138 = flt_BA70D8[0] * flt_BA70E0; flt_BA713C = flt_BA70E0 * flt_BA70DC[0]; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; case 7: case 10: flt_BA7130 = flt_BA70D0[0] * flt_BA70E0; flt_BA7134 = flt_BA70E4 * flt_BA70D4[0]; flt_BA7138 = flt_BA70E8 * flt_BA70D8[0]; flt_BA713C = flt_BA70EC * flt_BA70DC[0]; goto LABEL_20; case 9: D3DXVec4Transform(&flt_BA7130, flt_BA70D0, &unk_BA7090); LABEL_20: v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; default: return 1; } return 1; } switch ( a4 ) { case 3: case 4: v8 = flt_BA7050[0] * flt_BA70E0; v9 = flt_BA7054 * flt_BA70E0; v10 = flt_BA7058 * flt_BA70E0; v11 = flt_BA705C * flt_BA70E0; v12 = flt_BA7060 * flt_BA70E0; v13 = flt_BA7064 * flt_BA70E0; v14 = flt_BA7068 * flt_BA70E0; v15 = flt_BA706C * flt_BA70E0; v16 = flt_BA7070 * flt_BA70E0; v17 = flt_BA7074 * flt_BA70E0; v18 = flt_BA7078 * flt_BA70E0; v19 = flt_BA707C * flt_BA70E0; v20 = flt_BA7080 * flt_BA70E0; v21 = flt_BA7084 * flt_BA70E0; v22 = flt_BA7088 * flt_BA70E0; v23 = flt_BA70E0 * flt_BA708C; qmemcpy(&unk_BA70F0, &v8, 0x40u); if ( a5 ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &unk_BA70F0, 0); break; case 7: case 10: D3DXVec4Transform(&flt_BA7130, &flt_BA70E0, flt_BA7050); v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); break; case 9: D3DXMatrixMultiply(&unk_BA70F0, flt_BA7050, &unk_BA7090); if ( a5 ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &unk_BA70F0, 0); break; default: return 1; } return v7 != 0 ? 0 : -2147483568; } // 94480E: using guessed type int __stdcall D3DXMatrixMultiply(_DWORD, _DWORD, _DWORD); // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // 94483E: using guessed type int __stdcall D3DXVec4Transform(_DWORD, _DWORD, _DWORD); // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0096D490) -------------------------------------------------------- int __stdcall sub_96D490(int a1, int a2, int a3, int a4, float a5, char a6) { char v7; // al float v8; // [esp+0h] [ebp-40h] float v9; // [esp+4h] [ebp-3Ch] float v10; // [esp+8h] [ebp-38h] float v11; // [esp+Ch] [ebp-34h] float v12; // [esp+10h] [ebp-30h] float v13; // [esp+14h] [ebp-2Ch] float v14; // [esp+18h] [ebp-28h] float v15; // [esp+1Ch] [ebp-24h] float v16; // [esp+20h] [ebp-20h] float v17; // [esp+24h] [ebp-1Ch] float v18; // [esp+28h] [ebp-18h] float v19; // [esp+2Ch] [ebp-14h] float v20; // [esp+30h] [ebp-10h] float v21; // [esp+34h] [ebp-Ch] float v22; // [esp+38h] [ebp-8h] float v23; // [esp+3Ch] [ebp-4h] float v24; // [esp+54h] [ebp+14h] float v25; // [esp+58h] [ebp+18h] if ( a3 == 7 ) goto LABEL_13; if ( a3 != 9 ) { if ( a3 != 10 ) return 1; LABEL_13: switch ( a4 ) { case 3: case 4: v25 = 1.0 / flt_BA70E0; flt_BA7130 = flt_BA70D0[0] * v25; flt_BA7134 = flt_BA70D4[0] * v25; flt_BA7138 = flt_BA70D8[0] * v25; flt_BA713C = v25 * flt_BA70DC[0]; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; case 7: case 10: flt_BA7130 = flt_BA70D0[0] / flt_BA70E0; flt_BA7134 = flt_BA70D4[0] / flt_BA70E4; flt_BA7138 = flt_BA70D8[0] / flt_BA70E8; flt_BA713C = flt_BA70DC[0] / flt_BA70EC; v7 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); return v7 != 0 ? 0 : -2147483568; default: return 1; } return 1; } if ( a4 < 3 || a4 > 4 ) return 1; v24 = 1.0 / flt_BA70E0; v8 = flt_BA7050[0] * v24; v9 = flt_BA7054 * v24; v10 = flt_BA7058 * v24; v11 = flt_BA705C * v24; v12 = flt_BA7060 * v24; v13 = flt_BA7064 * v24; v14 = flt_BA7068 * v24; v15 = flt_BA706C * v24; v16 = flt_BA7070 * v24; v17 = flt_BA7074 * v24; v18 = flt_BA7078 * v24; v19 = flt_BA707C * v24; v20 = flt_BA7080 * v24; v21 = flt_BA7084 * v24; v22 = flt_BA7088 * v24; v23 = v24 * flt_BA708C; qmemcpy(&unk_BA70F0, &v8, 0x40u); if ( LOBYTE(a5) ) D3DXMatrixInverse(&unk_BA70F0, 0, &unk_BA70F0); if ( a6 ) D3DXMatrixTranspose(&unk_BA70F0, &unk_BA70F0); v7 = (*(int (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &unk_BA70F0, 0); return v7 != 0 ? 0 : -2147483568; } // 944826: using guessed type int __stdcall D3DXMatrixInverse(_DWORD, _DWORD, _DWORD); // 944838: using guessed type int __stdcall D3DXMatrixTranspose(_DWORD, _DWORD); // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0096D6E0) -------------------------------------------------------- signed int __stdcall sub_96D6E0(int a1, int a2, int a3, int a4, int a5, int a6) { float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v9; // ST18_4 char v10; // al signed int result; // eax double v12; // st7 switch ( a3 ) { case 3: case 4: switch ( a4 ) { case 3: case 4: v6 = flt_BA70D0[0] + flt_BA70E0; flt_BA7130 = v6; v7 = flt_BA70D4[0] + flt_BA70E4; flt_BA7134 = v7; v8 = flt_BA70D8[0] + flt_BA70E8; flt_BA7138 = v8; v9 = flt_BA70DC[0] + flt_BA70EC; flt_BA713C = v9; goto LABEL_4; case 7: case 10: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70E4 + flt_BA70D0[0]; flt_BA7138 = flt_BA70E8 + flt_BA70D0[0]; v12 = flt_BA70D0[0] + flt_BA70EC; goto LABEL_7; default: goto LABEL_11; } goto LABEL_11; case 7: case 10: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70D4[0] + flt_BA70E0; flt_BA7138 = flt_BA70D8[0] + flt_BA70E0; v12 = flt_BA70E0 + flt_BA70DC[0]; LABEL_7: flt_BA713C = v12; v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); break; case 7: case 10: flt_BA7130 = flt_BA70D0[0] + flt_BA70E0; flt_BA7134 = flt_BA70D4[0] + flt_BA70E4; flt_BA7138 = flt_BA70D8[0] + flt_BA70E8; flt_BA713C = flt_BA70DC[0] + flt_BA70EC; LABEL_4: v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); break; default: goto LABEL_11; } result = v10 != 0 ? 0 : -2147483568; break; default: LABEL_11: result = 1; break; } return result; } // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0096D8F0) -------------------------------------------------------- signed int __stdcall sub_96D8F0(int a1, int a2, int a3, int a4, int a5, int a6) { float v6; // ST0C_4 float v7; // ST10_4 float v8; // ST14_4 float v9; // ST18_4 char v10; // al signed int result; // eax double v12; // st7 switch ( a3 ) { case 3: case 4: switch ( a4 ) { case 3: case 4: v6 = flt_BA70D0[0] - flt_BA70E0; flt_BA7130 = v6; v7 = flt_BA70D4[0] - flt_BA70E4; flt_BA7134 = v7; v8 = flt_BA70D8[0] - flt_BA70E8; flt_BA7138 = v8; v9 = flt_BA70DC[0] - flt_BA70EC; flt_BA713C = v9; goto LABEL_4; case 7: case 10: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D0[0] - flt_BA70E4; flt_BA7138 = flt_BA70D0[0] - flt_BA70E8; v12 = flt_BA70D0[0] - flt_BA70EC; goto LABEL_7; default: goto LABEL_11; } goto LABEL_11; case 7: case 10: switch ( a4 ) { case 3: case 4: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D4[0] - flt_BA70E0; flt_BA7138 = flt_BA70D8[0] - flt_BA70E0; v12 = flt_BA70DC[0] - flt_BA70E0; LABEL_7: flt_BA713C = v12; v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); break; case 7: case 10: flt_BA7130 = flt_BA70D0[0] - flt_BA70E0; flt_BA7134 = flt_BA70D4[0] - flt_BA70E4; flt_BA7138 = flt_BA70D8[0] - flt_BA70E8; flt_BA713C = flt_BA70DC[0] - flt_BA70EC; LABEL_4: v10 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7130, 0); break; default: goto LABEL_11; } result = v10 != 0 ? 0 : -2147483568; break; default: LABEL_11: result = 1; break; } return result; } // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; // BA70E0: using guessed type float flt_BA70E0; // BA70E4: using guessed type float flt_BA70E4; // BA70E8: using guessed type float flt_BA70E8; // BA70EC: using guessed type float flt_BA70EC; // BA7130: using guessed type float flt_BA7130; // BA7134: using guessed type float flt_BA7134; // BA7138: using guessed type float flt_BA7138; // BA713C: using guessed type float flt_BA713C; //----- (0096DB00) -------------------------------------------------------- signed int __stdcall sub_96DB00(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11) { int v11; // ebx int v12; // eax int (__thiscall *v14)(int, int, float *, _DWORD); // edx char v15; // al float v16; // ST20_4 double v17; // st7 float v18; // ST20_4 int (__thiscall *v19)(int, int, float *, _DWORD); // edx float v20; // ST20_4 float v21; // ST20_4 float v22; // ST18_4 float v23; // ST18_4 float v24; // ST18_4 int (__thiscall *v25)(int, int, float *, _DWORD); // edx float *v26; // eax double v27; // st7 float *v28; // eax float *v29; // eax float *v30; // eax int v31; // eax float *v32; // [esp-8h] [ebp-34h] signed int v33; // [esp+10h] [ebp-1Ch] float v34; // [esp+14h] [ebp-18h] float v35; // [esp+18h] [ebp-14h] float v36; // [esp+1Ch] [ebp-10h] float v37; // [esp+20h] [ebp-Ch] float v38; // [esp+24h] [ebp-8h] v11 = *(_DWORD *)(a2 + 12); v33 = 0; switch ( v11 ) { case 1: case 2: v32 = 0; goto LABEL_24; case 3: case 4: case 5: case 6: case 7: v12 = sub_85AA60(a3, off_AC6210); if ( !v12 ) return -2147483632; v34 = *(float *)(v12 + 12); switch ( v11 ) { case 3: v14 = *(int (__thiscall **)(int, int, float *, _DWORD))(*(_DWORD *)a1 + 48); v35 = v34; v36 = v34; v37 = v34; v38 = v34; v15 = v14(a1, a2, &v35, 0); break; case 4: v16 = sin(v34); v17 = v16; goto LABEL_8; case 5: v20 = cos(v34); v17 = v20; goto LABEL_8; case 6: v21 = tan(v34); v17 = v21; LABEL_8: v18 = v17; v19 = *(int (__thiscall **)(int, int, float *, _DWORD))(*(_DWORD *)a1 + 48); v35 = v18; v36 = v18; v37 = v18; v38 = v18; v15 = v19(a1, a2, &v35, 0); break; case 7: v35 = v34; v22 = sin(v34); v36 = v22; v23 = cos(v34); v37 = v23; v24 = tan(v34); v25 = *(int (__thiscall **)(int, int, float *, _DWORD))(*(_DWORD *)a1 + 48); v38 = v24; v15 = v25(a1, a2, &v35, 0); break; default: v33 = -2147483632; v15 = (*(int (__thiscall **)(int, int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a1, a2, &v35, 0); break; } LABEL_25: if ( !v15 ) v33 = -2147483568; return v33; case 8: v26 = *(float **)(a7 + 20); if ( !v26 ) return v33; v35 = v26[11]; v36 = v26[12]; v37 = v26[13]; v27 = v26[21]; goto LABEL_23; case 9: v28 = *(float **)(a7 + 20); if ( !v28 ) return v33; v35 = v28[8]; v36 = v28[9]; v37 = v28[10]; v27 = v28[21]; goto LABEL_23; case 10: v29 = *(float **)(a7 + 20); if ( !v29 ) return v33; v35 = v29[14]; v36 = v29[15]; v37 = v29[16]; v27 = v29[21]; goto LABEL_23; case 11: v30 = *(float **)(a7 + 20); if ( !v30 ) return v33; v35 = v30[17]; v36 = v30[18]; v37 = v30[19]; v27 = v30[21]; goto LABEL_23; case 12: v31 = *(_DWORD *)(a7 + 20); if ( !v31 ) return v33; v35 = *(float *)(v31 + 80); v36 = v35; v37 = *(float *)(v31 + 80); v27 = v37; LABEL_23: v38 = v27; v32 = &v35; LABEL_24: v15 = (*(int (__thiscall **)(int, int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a1, a2, v32, 0); goto LABEL_25; default: return v33; } } //----- (0096DD70) -------------------------------------------------------- signed int __stdcall sub_96DD70(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13) { int v14; // edi _DWORD *v15; // eax int v16; // eax int *v17; // edi int v18; // ebx int v19; // ebx if ( !a3 ) return 1; if ( a13 && (v14 = *(_DWORD *)(a13 + 24), v15 = (_DWORD *)(*(_DWORD *)(a13 + 32) + 8 * v14), *v15 == (*(_DWORD *)(a2 + 24) | (a11 << 16))) && (v16 = v15[1], *(_DWORD *)(a13 + 24) = v14 + 1, v16) || (v16 = sub_85AA60(a3, *(const char **)(a2 + 8))) != 0 ) { v17 = sub_932D50((_DWORD *)a2, v16); if ( !v17 ) return -2147483584; } else { v17 = sub_932FF0(a2); if ( !v17 ) return -2147483632; } v18 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v18) == 9 ) { if ( !(*(unsigned __int8 (__stdcall **)(int, int *, signed int))(*(_DWORD *)a1 + 48))(a2, v17, 4) ) return -2147483568; return 0; } v19 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v19) != 6 && !(unsigned __int8)sub_92D6F0((_DWORD *)a2) && !(unsigned __int8)sub_92D690((_DWORD *)a2) && !(unsigned __int8)sub_92D660((_DWORD *)a2) && !(unsigned __int8)sub_92D780((_DWORD *)a2) && !(unsigned __int8)sub_92D630((_DWORD *)a2) && !(unsigned __int8)sub_92D600((_DWORD *)a2) ) { if ( (unsigned __int8)sub_92D720((_DWORD *)a2) ) { if ( !(*(unsigned __int8 (__stdcall **)(int, int *, signed int))(*(_DWORD *)a1 + 48))(a2, v17, 3) ) return -2147483568; } else { sub_92D7B0((_DWORD *)a2); } return 0; } if ( (*(unsigned __int8 (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 48))(a2, v17, 0) ) return 0; return -2147483568; } // BA6F80: using guessed type char byte_BA6F80; //----- (0096DF10) -------------------------------------------------------- signed int __stdcall sub_96DF10(int a1, int a2, int a3) { signed int v3; // ebx int v4; // edi char v5; // al int v6; // edi int v7; // edi double v8; // st7 int v9; // edi float *v10; // eax float *v11; // eax float *v12; // eax float *v13; // eax v3 = 0; v4 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v4) == 1 ) { dword_BA6FE0 = **(unsigned __int8 **)(a2 + 44); v5 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &dword_BA6FE0, 0); goto LABEL_27; } v6 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v6) == 3 ) { dword_BA6FE4 = **(_DWORD **)(a2 + 44); dword_BA6FE8 = dword_BA6FE4; dword_BA6FEC = dword_BA6FE4; dword_BA6FF0 = dword_BA6FE4; v5 = (*(int (__stdcall **)(int, int *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &dword_BA6FE4, 0); goto LABEL_27; } v7 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v7) == 4 ) { flt_BA6FF4 = **(float **)(a2 + 44); v8 = flt_BA6FF4; flt_BA6FF8 = flt_BA6FF4; flt_BA6FFC = flt_BA6FF4; LABEL_26: flt_BA7000 = v8; v5 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA6FF4, 0); goto LABEL_27; } v9 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); if ( *(&dword_BA6F44 + (unsigned __int8)v9) == 5 ) { v10 = *(float **)(a2 + 44); flt_BA6FF4 = *v10; flt_BA6FF8 = v10[1]; flt_BA6FFC = flt_BA6FF4; v8 = flt_BA6FF8; goto LABEL_26; } if ( (unsigned __int8)sub_92D6C0((_DWORD *)a2) ) { v11 = *(float **)(a2 + 44); flt_BA6FF4 = *v11; flt_BA6FF8 = v11[1]; flt_BA6FFC = v11[2]; v8 = 1.0; goto LABEL_26; } if ( (unsigned __int8)sub_92D6F0((_DWORD *)a2) || (unsigned __int8)sub_92D780((_DWORD *)a2) ) { v13 = *(float **)(a2 + 44); flt_BA6FF4 = *v13; flt_BA6FF8 = v13[1]; flt_BA6FFC = v13[2]; v8 = v13[3]; goto LABEL_26; } if ( (unsigned __int8)sub_92D720((_DWORD *)a2) ) { v12 = *(float **)(a2 + 44); flt_BA7008 = *v12; flt_BA700C = v12[1]; flt_BA7010 = v12[2]; flt_BA7014 = 0.0; flt_BA7018 = v12[3]; flt_BA701C = v12[4]; flt_BA7020 = v12[5]; flt_BA7024 = 0.0; flt_BA7028 = v12[6]; flt_BA702C = v12[7]; flt_BA7030 = v12[8]; flt_BA7034 = 0.0; v5 = (*(int (__stdcall **)(int, float *, _DWORD))(*(_DWORD *)a1 + 48))(a2, &flt_BA7008, 0); } else { if ( !(unsigned __int8)sub_92D750((_DWORD *)a2) ) return v3; v5 = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)a1 + 48))(a2, *(_DWORD *)(a2 + 44), 0); } LABEL_27: if ( !v5 ) v3 = -2147483568; return v3; } // BA6F80: using guessed type char byte_BA6F80; // BA6FE0: using guessed type int dword_BA6FE0; // BA6FE4: using guessed type int dword_BA6FE4; // BA6FE8: using guessed type int dword_BA6FE8; // BA6FEC: using guessed type int dword_BA6FEC; // BA6FF0: using guessed type int dword_BA6FF0; // BA6FF4: using guessed type float flt_BA6FF4; // BA6FF8: using guessed type float flt_BA6FF8; // BA6FFC: using guessed type float flt_BA6FFC; // BA7000: using guessed type float flt_BA7000; // BA7008: using guessed type float flt_BA7008; // BA700C: using guessed type float flt_BA700C; // BA7010: using guessed type float flt_BA7010; // BA7014: using guessed type float flt_BA7014; // BA7018: using guessed type float flt_BA7018; // BA701C: using guessed type float flt_BA701C; // BA7020: using guessed type float flt_BA7020; // BA7024: using guessed type float flt_BA7024; // BA7028: using guessed type float flt_BA7028; // BA702C: using guessed type float flt_BA702C; // BA7030: using guessed type float flt_BA7030; // BA7034: using guessed type float flt_BA7034; //----- (0096E150) -------------------------------------------------------- signed int __stdcall sub_96E150(int a1, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8, int a9, int a10, int a11) { int v11; // edi int v12; // esi int v13; // ebx int v14; // eax int v15; // ebx _BYTE *v16; // eax int v17; // esi char v19; // [esp+Ch] [ebp-8h] int v20; // [esp+10h] [ebp-4h] v11 = a2; v12 = *(_DWORD *)(a2 + 20); v13 = *(unsigned __int8 *)(a2 + 17); v20 = 0; if ( !byte_BA6F81 ) sub_92C410(); v14 = dword_BA6F10[v13]; v15 = (int)a8; v16 = sub_930960(a8, v14, v12); v17 = *(_DWORD *)(v11 + 12); a8 = v16; if ( !sub_92C5A0(v17, &a2, &v19) ) return -2147483632; if ( !sub_92E8B0(&unk_BA7210, 16 * a2, v17, (int)a8, a3, a4, a5, a6, a7, v15, a9, a10) ) v20 = -2147483552; if ( !(*(unsigned __int8 (__stdcall **)(int, void *, _DWORD))(*(_DWORD *)a1 + 48))(v11, &unk_BA7210, 0) ) v20 = -2147483568; return v20; } // BA6F10: using guessed type int dword_BA6F10[]; // BA6F81: using guessed type char byte_BA6F81; //----- (0096E230) -------------------------------------------------------- signed int __stdcall sub_96E230(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8) { int v8; // esi float *v9; // ecx int v10; // eax signed int result; // eax float *v12; // ecx int v13; // eax float *v14; // ecx int v15; // eax float *v16; // ecx int v17; // eax int v18; // ecx int v19; // eax int v20; // eax int v21; // eax int v22; // esi float v23; // [esp+Ch] [ebp+8h] float v24; // [esp+Ch] [ebp+8h] float v25; // [esp+Ch] [ebp+8h] float v26; // [esp+1Ch] [ebp+18h] v8 = *(_DWORD *)(a2 + 12); switch ( v8 ) { case 3: case 4: case 5: case 6: case 7: v20 = sub_85AA60(a3, off_AC6210); if ( v20 ) { v26 = *(float *)(v20 + 12); switch ( v8 ) { case 3: goto LABEL_15; case 4: v26 = sin(v26); goto LABEL_15; case 5: v26 = cos(v26); goto LABEL_15; case 6: v26 = tan(v26); LABEL_15: v21 = 4 * a1; flt_BA70D0[v21] = v26; flt_BA70D4[v21] = v26; flt_BA70D8[v21] = v26; flt_BA70DC[v21] = v26; result = 7; break; case 7: v22 = 4 * a1; flt_BA70D0[4 * a1] = v26; v23 = sin(v26); flt_BA70D4[v22] = v23; v24 = cos(v26); flt_BA70D8[v22] = v24; v25 = tan(v26); result = 7; flt_BA70DC[v22] = v25; break; default: goto LABEL_20; } } else { result = -2147483632; } break; case 8: v9 = *(float **)(a5 + 20); if ( !v9 ) goto LABEL_20; v10 = 4 * a1; flt_BA70D0[v10] = v9[11]; flt_BA70D4[v10] = v9[12]; flt_BA70D8[v10] = v9[13]; flt_BA70DC[v10] = v9[21]; result = 10; break; case 9: v12 = *(float **)(a5 + 20); if ( !v12 ) goto LABEL_20; v13 = 4 * a1; flt_BA70D0[v13] = v12[8]; flt_BA70D4[v13] = v12[9]; flt_BA70D8[v13] = v12[10]; flt_BA70DC[v13] = v12[21]; result = 10; break; case 10: v14 = *(float **)(a5 + 20); if ( !v14 ) goto LABEL_20; v15 = 4 * a1; flt_BA70D0[v15] = v14[14]; flt_BA70D4[v15] = v14[15]; flt_BA70D8[v15] = v14[16]; flt_BA70DC[v15] = v14[21]; result = 10; break; case 11: v16 = *(float **)(a5 + 20); if ( !v16 ) goto LABEL_20; v17 = 4 * a1; flt_BA70D0[v17] = v16[17]; flt_BA70D4[v17] = v16[18]; flt_BA70D8[v17] = v16[19]; flt_BA70DC[v17] = v16[21]; result = 10; break; case 12: v18 = *(_DWORD *)(a5 + 20); if ( !v18 ) goto LABEL_20; v19 = 4 * a1; flt_BA70D0[v19] = *(float *)(v18 + 80); flt_BA70D4[v19] = *(float *)(v18 + 80); flt_BA70D8[v19] = *(float *)(v18 + 80); flt_BA70DC[v19] = *(float *)(v18 + 80); result = 10; break; default: LABEL_20: result = 0; break; } return result; } // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; //----- (0096E4D0) -------------------------------------------------------- signed int __stdcall sub_96E4D0(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, int a7, int a8) { signed int result; // eax int v9; // eax int *v10; // eax int v11; // ebx int *v12; // esi int v13; // ebx int v14; // eax int v15; // eax int v16; // eax int v17; // eax int v18; // eax int v19; // eax if ( !a3 ) return 1; v9 = sub_85AA60(a3, *(const char **)(a2 + 8)); if ( !v9 ) return -2147483632; v10 = sub_932D50((_DWORD *)a2, v9); v11 = *(_DWORD *)(a2 + 16); v12 = v10; if ( !byte_BA6F80 ) sub_92C350(); result = 3; if ( *(&dword_BA6F44 + (unsigned __int8)v11) == 3 ) { flt_BA70D0[4 * a1] = (double)(unsigned int)*v12; } else { v13 = *(_DWORD *)(a2 + 16); if ( !byte_BA6F80 ) sub_92C350(); result = 4; if ( *(&dword_BA6F44 + (unsigned __int8)v13) == 4 ) { flt_BA70D0[4 * a1] = *(float *)v12; } else if ( (unsigned __int8)sub_92D690((_DWORD *)a2) ) { v14 = 4 * a1; flt_BA70D0[v14] = *(float *)v12; flt_BA70D4[v14] = *((float *)v12 + 1); result = 5; } else if ( (unsigned __int8)sub_92D6C0((_DWORD *)a2) ) { v15 = 4 * a1; flt_BA70D0[v15] = *(float *)v12; flt_BA70D4[v15] = *((float *)v12 + 1); flt_BA70D8[v15] = *((float *)v12 + 2); result = 6; } else if ( (unsigned __int8)sub_92D6F0((_DWORD *)a2) ) { v16 = 4 * a1; flt_BA70D0[v16] = *(float *)v12; flt_BA70D4[v16] = *((float *)v12 + 1); flt_BA70D8[v16] = *((float *)v12 + 2); flt_BA70DC[v16] = *((float *)v12 + 3); result = 7; } else if ( (unsigned __int8)sub_92D720((_DWORD *)a2) ) { v17 = a1 << 6; *(float *)((char *)flt_BA7050 + v17) = *(float *)v12; *(float *)((char *)&flt_BA7054 + v17) = *((float *)v12 + 1); *(float *)((char *)&flt_BA7058 + v17) = *((float *)v12 + 2); *(float *)((char *)&flt_BA705C + v17) = 0.0; *(float *)((char *)&flt_BA7060 + v17) = *((float *)v12 + 3); *(float *)((char *)&flt_BA7064 + v17) = *((float *)v12 + 4); *(float *)((char *)&flt_BA7068 + v17) = *((float *)v12 + 5); *(float *)((char *)&flt_BA706C + v17) = 0.0; *(float *)((char *)&flt_BA7070 + v17) = *((float *)v12 + 6); *(float *)((char *)&flt_BA7074 + v17) = *((float *)v12 + 7); *(float *)((char *)&flt_BA7078 + v17) = *((float *)v12 + 8); *(float *)((char *)&flt_BA707C + v17) = 0.0; *(float *)((char *)&flt_BA7080 + v17) = 0.0; *(float *)((char *)&flt_BA7084 + v17) = 0.0; *(float *)((char *)&flt_BA7088 + v17) = 0.0; *(float *)((char *)&flt_BA708C + v17) = 1.0; result = 8; } else if ( (unsigned __int8)sub_92D750((_DWORD *)a2) ) { v18 = a1 << 6; *(float *)((char *)flt_BA7050 + v18) = *(float *)v12; *(float *)((char *)&flt_BA7054 + v18) = *((float *)v12 + 1); *(float *)((char *)&flt_BA7058 + v18) = *((float *)v12 + 2); *(float *)((char *)&flt_BA705C + v18) = *((float *)v12 + 3); *(float *)((char *)&flt_BA7060 + v18) = *((float *)v12 + 4); *(float *)((char *)&flt_BA7064 + v18) = *((float *)v12 + 5); *(float *)((char *)&flt_BA7068 + v18) = *((float *)v12 + 6); *(float *)((char *)&flt_BA706C + v18) = *((float *)v12 + 7); *(float *)((char *)&flt_BA7070 + v18) = *((float *)v12 + 8); *(float *)((char *)&flt_BA7074 + v18) = *((float *)v12 + 9); *(float *)((char *)&flt_BA7078 + v18) = *((float *)v12 + 10); *(float *)((char *)&flt_BA707C + v18) = *((float *)v12 + 11); *(float *)((char *)&flt_BA7080 + v18) = *((float *)v12 + 12); *(float *)((char *)&flt_BA7084 + v18) = *((float *)v12 + 13); *(float *)((char *)&flt_BA7088 + v18) = *((float *)v12 + 14); *(float *)((char *)&flt_BA708C + v18) = *((float *)v12 + 15); result = 9; } else if ( (unsigned __int8)sub_92D780((_DWORD *)a2) ) { v19 = 4 * a1; flt_BA70D0[v19] = *(float *)v12; flt_BA70D4[v19] = *((float *)v12 + 1); flt_BA70D8[v19] = *((float *)v12 + 2); flt_BA70DC[v19] = *((float *)v12 + 3); result = 10; } else { result = 0; } } return result; } // BA6F80: using guessed type char byte_BA6F80; // BA7050: using guessed type float flt_BA7050[]; // BA7054: using guessed type float flt_BA7054; // BA7058: using guessed type float flt_BA7058; // BA705C: using guessed type float flt_BA705C; // BA7060: using guessed type float flt_BA7060; // BA7064: using guessed type float flt_BA7064; // BA7068: using guessed type float flt_BA7068; // BA706C: using guessed type float flt_BA706C; // BA7070: using guessed type float flt_BA7070; // BA7074: using guessed type float flt_BA7074; // BA7078: using guessed type float flt_BA7078; // BA707C: using guessed type float flt_BA707C; // BA7080: using guessed type float flt_BA7080; // BA7084: using guessed type float flt_BA7084; // BA7088: using guessed type float flt_BA7088; // BA708C: using guessed type float flt_BA708C; // BA70D0: using guessed type float flt_BA70D0[]; // BA70D4: using guessed type float flt_BA70D4[]; // BA70D8: using guessed type float flt_BA70D8[]; // BA70DC: using guessed type float flt_BA70DC[]; //----- (0096E7D0) -------------------------------------------------------- int __thiscall sub_96E7D0(void *this, int a2, int a3, _DWORD *a4, int a5, int a6, int a7, int a8, int a9, int a10) { void *v10; // esi unsigned int v11; // edi int v12; // ebx int v13; // eax int v14; // edi int v15; // ecx int v16; // edi unsigned int v17; // eax unsigned int v18; // eax unsigned int v20; // [esp+Ch] [ebp-18h] int v21; // [esp+10h] [ebp-14h] int v22; // [esp+14h] [ebp-10h] int v23; // [esp+18h] [ebp-Ch] int v24; // [esp+1Ch] [ebp-8h] int v25; // [esp+20h] [ebp-4h] v10 = this; v11 = *(_DWORD *)(a3 + 20); LOBYTE(v25) = (*(_DWORD *)(a3 + 20) >> 25) & 1; v20 = v11 & 0xF0000000; LOBYTE(v24) = HIBYTE(v11) & 1; v12 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 40))(this, *(_DWORD *)(a3 + 20) & 0xFFF); v13 = (*(int (__thiscall **)(void *, unsigned int))(*(_DWORD *)v10 + 40))(v10, (v11 >> 12) & 0xFFF); v23 = v13; if ( v12 && v13 ) { v14 = *(_DWORD *)(v12 + 16); if ( !byte_BA6F80 ) { sub_92C350(); v13 = v23; } v15 = *(&dword_BA6F44 + (unsigned __int8)v14); v16 = *(_DWORD *)(v13 + 16); v22 = v15; if ( !byte_BA6F80 ) sub_92C350(); v17 = *(_DWORD *)(v12 + 16) & 0xF0000000; v21 = *(&dword_BA6F44 + (unsigned __int8)v16); switch ( v17 ) { case 0x20000000u: v22 = sub_96CFC0(*(char **)(v12 + 8)); sub_96E230(0, v12, a4, a5, a6, a7, a8, a9); break; case 0x40000000u: sub_930310(0, (_DWORD *)v12, a10); break; case 0x30000000u: sub_96E4D0(0, v12, a4, a5, a6, a8, a9, a10); break; case 0x10000000u: sub_96E4D0(0, v12, a4, a5, a6, a8, a9, a10); break; } v18 = *(_DWORD *)(v23 + 16) & 0xF0000000; switch ( v18 ) { case 0x20000000u: v21 = sub_96CFC0(*(char **)(v23 + 8)); sub_96E230(1, v23, a4, a5, a6, a7, a8, a9); break; case 0x30000000u: sub_96E4D0(1, v23, a4, a5, a6, a8, a9, a10); break; case 0x40000000u: sub_930310(1, (_DWORD *)v23, a10); break; case 0x10000000u: sub_930310(1, (_DWORD *)v23, a10); break; } if ( v22 && v21 ) { if ( v20 > 0x30000000 ) { if ( v20 == 0x40000000 ) return sub_96D8F0(a2, a3, v22, v21, v24, v25); } else { switch ( v20 ) { case 0x30000000u: return sub_96D6E0(a2, a3, v22, v21, v24, v25); case 0x10000000u: return sub_96D190(a2, a3, v22, v21, v24, v25); case 0x20000000u: return sub_96D490(a2, a3, v22, v21, *(float *)&v24, v25); } } } else { sub_863460(1, 0, "Invalid operands in OperatorConstant\n"); } } else { sub_863460(1, 0, "Invalid entries in OperatorConstant\n"); } return 1; } // BA6F80: using guessed type char byte_BA6F80; //----- (0096EAA0) -------------------------------------------------------- _DWORD *__thiscall sub_96EAA0(_DWORD *this, int a2) { _DWORD *v2; // esi v2 = this; sub_930B50(this, a2); *v2 = &NiD3DSCM_Pixel::`vftable'; return v2; } // A4C2BC: using guessed type void *NiD3DSCM_Pixel::`vftable'; //----- (0096EAEB) -------------------------------------------------------- int __cdecl SEH_401060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EB2B) -------------------------------------------------------- int __cdecl SEH_401A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EB68) -------------------------------------------------------- int __cdecl SEH_670510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EB9B) -------------------------------------------------------- int __cdecl SEH_403830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EBE1) -------------------------------------------------------- int __cdecl SEH_403A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EC13) -------------------------------------------------------- int __cdecl SEH_402110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EC3B) -------------------------------------------------------- int __cdecl SEH_404660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EC6B) -------------------------------------------------------- int __cdecl SEH_404790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096EC9B) -------------------------------------------------------- int __cdecl SEH_4048D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096ECD3) -------------------------------------------------------- int __cdecl SEH_4049C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F130) -------------------------------------------------------- int __usercall sub_96F130@(int a1@) { return sub_407820((int *)(a1 + 12)); } //----- (0096F153) -------------------------------------------------------- int __usercall sub_96F153@(int a1@) { return sub_407820((int *)(a1 + 8)); } //----- (0096F180) -------------------------------------------------------- int __cdecl SEH_4060C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F1A8) -------------------------------------------------------- int __cdecl SEH_406120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F1E8) -------------------------------------------------------- int __cdecl SEH_406190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F220) -------------------------------------------------------- int __cdecl SEH_404E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F256) -------------------------------------------------------- int __cdecl SEH_4050A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F27C) -------------------------------------------------------- int __cdecl SEH_405250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F2A2) -------------------------------------------------------- int __cdecl SEH_405430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F2D8) -------------------------------------------------------- int __cdecl SEH_4054A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F336) -------------------------------------------------------- int __cdecl SEH_405780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F368) -------------------------------------------------------- int __cdecl SEH_4078E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F3A0) -------------------------------------------------------- int __cdecl SEH_4076E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F3C8) -------------------------------------------------------- int __cdecl SEH_407840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F410) -------------------------------------------------------- int __cdecl SEH_4067B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F45E) -------------------------------------------------------- int __cdecl SEH_406900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F491) -------------------------------------------------------- int __cdecl SEH_406980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F4C4) -------------------------------------------------------- int __cdecl SEH_406A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F4E7) -------------------------------------------------------- int __cdecl SEH_406B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F50A) -------------------------------------------------------- int __cdecl SEH_406BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F52D) -------------------------------------------------------- int __cdecl SEH_406C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F568) -------------------------------------------------------- int __cdecl SEH_406D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F5AD) -------------------------------------------------------- int __cdecl SEH_406EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F5D3) -------------------------------------------------------- int __cdecl SEH_407100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F698) -------------------------------------------------------- int __cdecl SEH_407D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F6F1) -------------------------------------------------------- int __cdecl SEH_407E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F728) -------------------------------------------------------- int __cdecl SEH_4079E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F789) -------------------------------------------------------- int __cdecl SEH_407F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F7E8) -------------------------------------------------------- int __cdecl SEH_4081A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F888) -------------------------------------------------------- int __cdecl SEH_4084F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F8AB) -------------------------------------------------------- int __cdecl SEH_408640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F8F8) -------------------------------------------------------- int __cdecl SEH_408780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F951) -------------------------------------------------------- int __cdecl SEH_408E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096F978) -------------------------------------------------------- int __cdecl SEH_409040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FA14) -------------------------------------------------------- int __cdecl SEH_409420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FA9B) -------------------------------------------------------- int __cdecl SEH_409560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FABE) -------------------------------------------------------- int __cdecl SEH_409680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FAEC) -------------------------------------------------------- int __cdecl SEH_409860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FB07) -------------------------------------------------------- int __cdecl SEH_409990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FB98) -------------------------------------------------------- int __cdecl SEH_40AA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FBD1) -------------------------------------------------------- int __cdecl SEH_40AD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FC8B) -------------------------------------------------------- int __cdecl SEH_40BE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FCD0) -------------------------------------------------------- int __cdecl SEH_40CA20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FD36) -------------------------------------------------------- int __cdecl SEH_40CF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FD64) -------------------------------------------------------- int __cdecl SEH_40D0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FD87) -------------------------------------------------------- int __cdecl SEH_40D210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FDAA) -------------------------------------------------------- int __cdecl SEH_40D2F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FDCD) -------------------------------------------------------- int __cdecl SEH_40D3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FDF0) -------------------------------------------------------- int __cdecl SEH_40D4C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FE13) -------------------------------------------------------- int __cdecl SEH_40D5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FE36) -------------------------------------------------------- int __cdecl SEH_40D690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FE68) -------------------------------------------------------- int __cdecl SEH_40DE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FEA0) -------------------------------------------------------- int __cdecl SEH_40F670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FEDE) -------------------------------------------------------- int __cdecl SEH_40E260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FF59) -------------------------------------------------------- int __cdecl SEH_40E5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0096FFFC) -------------------------------------------------------- int __cdecl SEH_40E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097001F) -------------------------------------------------------- int __cdecl SEH_40F420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097007E) -------------------------------------------------------- int __cdecl SEH_40FD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009700DE) -------------------------------------------------------- int __cdecl SEH_410550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097013E) -------------------------------------------------------- int __cdecl SEH_410A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097016B) -------------------------------------------------------- int __cdecl SEH_410F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009701A4) -------------------------------------------------------- int __cdecl SEH_4111D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009702B9) -------------------------------------------------------- int __cdecl SEH_411430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009703DE) -------------------------------------------------------- int __cdecl SEH_411640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970484) -------------------------------------------------------- int __cdecl SEH_4118E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009704B0) -------------------------------------------------------- LONG __usercall sub_9704B0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (009704DB) -------------------------------------------------------- int __cdecl SEH_414EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970534) -------------------------------------------------------- LONG __usercall sub_970534@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00970572) -------------------------------------------------------- int __cdecl SEH_416420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009705F4) -------------------------------------------------------- int __cdecl SEH_416EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970646) -------------------------------------------------------- int __cdecl SEH_416FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970674) -------------------------------------------------------- int __cdecl SEH_417320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970706) -------------------------------------------------------- int __cdecl SEH_417E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970737) -------------------------------------------------------- int __cdecl SEH_417F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009707A3) -------------------------------------------------------- int __cdecl SEH_419460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009707D1) -------------------------------------------------------- int __cdecl SEH_4196A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009707F8) -------------------------------------------------------- int __cdecl SEH_419A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097083C) -------------------------------------------------------- int __cdecl SEH_41A4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970878) -------------------------------------------------------- int __cdecl SEH_41DCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009708BB) -------------------------------------------------------- int __cdecl SEH_41DFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009708F6) -------------------------------------------------------- int __cdecl SEH_41E0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970919) -------------------------------------------------------- int __cdecl SEH_41E140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970951) -------------------------------------------------------- int __cdecl SEH_41E230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970981) -------------------------------------------------------- int __cdecl SEH_41E850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009709D6) -------------------------------------------------------- int __cdecl SEH_41EC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970A10) -------------------------------------------------------- int __cdecl SEH_41EF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970A56) -------------------------------------------------------- int __cdecl SEH_41F410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970A84) -------------------------------------------------------- int __cdecl SEH_41F5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970B00) -------------------------------------------------------- LONG __usercall sub_970B00@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00970B2B) -------------------------------------------------------- int __cdecl SEH_41FF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970B61) -------------------------------------------------------- int __cdecl SEH_420270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970B8B) -------------------------------------------------------- int __cdecl SEH_420410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970BD3) -------------------------------------------------------- int __cdecl SEH_420B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970BF9) -------------------------------------------------------- int __cdecl SEH_420D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970C2D) -------------------------------------------------------- int __cdecl SEH_4214D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970C68) -------------------------------------------------------- int __cdecl SEH_421C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970C98) -------------------------------------------------------- int __cdecl SEH_421CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970CC0) -------------------------------------------------------- int __cdecl SEH_422E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970CE0) -------------------------------------------------------- void __usercall sub_970CE0(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (00970CE8) -------------------------------------------------------- void __usercall sub_970CE8(int a1@) { sub_410C00((void *)(a1 - 32)); } //----- (00970CF0) -------------------------------------------------------- void __usercall sub_970CF0(int a1@) { sub_4562E0((_DWORD *)(a1 - 64)); } //----- (00970D26) -------------------------------------------------------- int __cdecl SEH_4224E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970DBB) -------------------------------------------------------- int __cdecl SEH_423F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970E14) -------------------------------------------------------- int __cdecl SEH_4245D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970E64) -------------------------------------------------------- int __cdecl SEH_424680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970E8B) -------------------------------------------------------- int __cdecl SEH_424730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970EBB) -------------------------------------------------------- int __cdecl SEH_424A00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970EE8) -------------------------------------------------------- int __cdecl SEH_427FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970F18) -------------------------------------------------------- int __cdecl SEH_425280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970F48) -------------------------------------------------------- int __cdecl SEH_487000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970F88) -------------------------------------------------------- int __cdecl SEH_425EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970FC0) -------------------------------------------------------- int __cdecl SEH_4262C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00970FF0) -------------------------------------------------------- int __cdecl SEH_426E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971010) -------------------------------------------------------- int __cdecl SEH_427040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971048) -------------------------------------------------------- int __cdecl SEH_427200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971078) -------------------------------------------------------- int __cdecl SEH_427340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009710A0) -------------------------------------------------------- int __cdecl SEH_427470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009710E4) -------------------------------------------------------- int __cdecl SEH_427640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971110) -------------------------------------------------------- int __cdecl SEH_4277E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971162) -------------------------------------------------------- int __cdecl SEH_427850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971193) -------------------------------------------------------- int __cdecl SEH_4279D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009711C9) -------------------------------------------------------- int __cdecl SEH_6D0C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009711F0) -------------------------------------------------------- int __cdecl SEH_427E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971239) -------------------------------------------------------- int __cdecl SEH_4282B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971270) -------------------------------------------------------- int __cdecl SEH_4283B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009712C0) -------------------------------------------------------- int __cdecl SEH_428630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009712FB) -------------------------------------------------------- int __cdecl SEH_429CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971330) -------------------------------------------------------- int __cdecl SEH_42A300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097135B) -------------------------------------------------------- int __cdecl SEH_42A440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097138B) -------------------------------------------------------- int __cdecl SEH_8DBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009713BB) -------------------------------------------------------- int __cdecl SEH_42A720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009713E1) -------------------------------------------------------- int __cdecl SEH_42A820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097140F) -------------------------------------------------------- int __cdecl SEH_42A8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097147B) -------------------------------------------------------- int __cdecl SEH_42BD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009714A8) -------------------------------------------------------- int __cdecl SEH_42C4F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009714D8) -------------------------------------------------------- int __cdecl SEH_42C5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971508) -------------------------------------------------------- int __cdecl SEH_408F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971538) -------------------------------------------------------- int __cdecl SEH_42C7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971568) -------------------------------------------------------- int __cdecl SEH_42C890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097159B) -------------------------------------------------------- int __cdecl SEH_42BF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009715CE) -------------------------------------------------------- int __cdecl SEH_42C0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971639) -------------------------------------------------------- int __cdecl SEH_42C210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971720) -------------------------------------------------------- int __cdecl SEH_42CB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009717EB) -------------------------------------------------------- int __cdecl SEH_42CC70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971806) -------------------------------------------------------- void __usercall sub_971806(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (00971831) -------------------------------------------------------- int __cdecl SEH_42E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097186D) -------------------------------------------------------- int __cdecl SEH_42E250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097189D) -------------------------------------------------------- int __cdecl SEH_42EB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009718F9) -------------------------------------------------------- int __cdecl SEH_42ECC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097192C) -------------------------------------------------------- int __cdecl SEH_42F110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971A52) -------------------------------------------------------- int __cdecl SEH_42F290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971A8D) -------------------------------------------------------- int __cdecl SEH_430F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971AB0) -------------------------------------------------------- int __cdecl SEH_431900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971AF1) -------------------------------------------------------- int __cdecl SEH_4319D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971B31) -------------------------------------------------------- int __cdecl SEH_431A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971B5B) -------------------------------------------------------- int __cdecl SEH_431AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971B88) -------------------------------------------------------- int __cdecl SEH_431C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971BF6) -------------------------------------------------------- int __cdecl SEH_432510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971C24) -------------------------------------------------------- int __cdecl SEH_432640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971C7F) -------------------------------------------------------- int __cdecl SEH_432780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971CAD) -------------------------------------------------------- int __cdecl SEH_4328D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971D18) -------------------------------------------------------- int __cdecl SEH_438F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971D76) -------------------------------------------------------- int __cdecl SEH_434000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971E0C) -------------------------------------------------------- int __cdecl SEH_434350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971EAB) -------------------------------------------------------- int __cdecl SEH_434520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971ECE) -------------------------------------------------------- int __cdecl SEH_4347E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971EFC) -------------------------------------------------------- int __cdecl SEH_434FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971F28) -------------------------------------------------------- int __cdecl SEH_4359B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971F60) -------------------------------------------------------- int __cdecl SEH_435A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971FA3) -------------------------------------------------------- int __cdecl SEH_435490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00971FC8) -------------------------------------------------------- int __cdecl SEH_438AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972000) -------------------------------------------------------- int __cdecl SEH_438C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972020) -------------------------------------------------------- int __cdecl SEH_438E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972048) -------------------------------------------------------- int __cdecl SEH_437460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972075) -------------------------------------------------------- int __cdecl SEH_437530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009720A2) -------------------------------------------------------- int __cdecl SEH_437600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009720DF) -------------------------------------------------------- int __cdecl SEH_4377C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097210C) -------------------------------------------------------- int __cdecl SEH_437A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972149) -------------------------------------------------------- int __cdecl SEH_437B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972176) -------------------------------------------------------- int __cdecl SEH_437D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009721A3) -------------------------------------------------------- int __cdecl SEH_437E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009721D0) -------------------------------------------------------- int __cdecl SEH_437F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009721FD) -------------------------------------------------------- int __cdecl SEH_4380D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097222A) -------------------------------------------------------- int __cdecl SEH_4382B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097225A) -------------------------------------------------------- int __cdecl SEH_438410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972288) -------------------------------------------------------- int __cdecl SEH_438FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009722C0) -------------------------------------------------------- int __cdecl SEH_439380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009722E3) -------------------------------------------------------- int __cdecl SEH_439430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972306) -------------------------------------------------------- int __cdecl SEH_4394D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972329) -------------------------------------------------------- int __cdecl SEH_439550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972372) -------------------------------------------------------- int __cdecl SEH_439620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972398) -------------------------------------------------------- int __cdecl SEH_439850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009723C0) -------------------------------------------------------- void __usercall sub_9723C0(int a1@) { sub_436260(*(_DWORD **)(a1 - 16)); } //----- (00972401) -------------------------------------------------------- int __cdecl SEH_439B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097246B) -------------------------------------------------------- int __cdecl SEH_439F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972491) -------------------------------------------------------- int __cdecl SEH_439FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009724B7) -------------------------------------------------------- int __cdecl SEH_43A090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009724DD) -------------------------------------------------------- int __cdecl SEH_43A140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972503) -------------------------------------------------------- int __cdecl SEH_43A1F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972529) -------------------------------------------------------- int __cdecl SEH_43A280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097254F) -------------------------------------------------------- int __cdecl SEH_43A310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972580) -------------------------------------------------------- int __cdecl SEH_43A3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009725A6) -------------------------------------------------------- int __cdecl SEH_43A460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009725D7) -------------------------------------------------------- int __cdecl SEH_43A560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009725FD) -------------------------------------------------------- int __cdecl SEH_43A650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972623) -------------------------------------------------------- int __cdecl SEH_43A6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972649) -------------------------------------------------------- int __cdecl SEH_43A760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097266F) -------------------------------------------------------- int __cdecl SEH_43A7F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972695) -------------------------------------------------------- int __cdecl SEH_43A870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009726BB) -------------------------------------------------------- int __cdecl SEH_43A900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009726E1) -------------------------------------------------------- int __cdecl SEH_43A980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972707) -------------------------------------------------------- int __cdecl SEH_43AA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097272D) -------------------------------------------------------- int __cdecl SEH_43AA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972753) -------------------------------------------------------- int __cdecl SEH_43AB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972779) -------------------------------------------------------- int __cdecl SEH_43ABA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097279F) -------------------------------------------------------- int __cdecl SEH_43AC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009727C5) -------------------------------------------------------- int __cdecl SEH_43ACA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009727EB) -------------------------------------------------------- int __cdecl SEH_43AD30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972811) -------------------------------------------------------- int __cdecl SEH_43ADC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972837) -------------------------------------------------------- int __cdecl SEH_43AE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097285D) -------------------------------------------------------- int __cdecl SEH_43AEF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972883) -------------------------------------------------------- int __cdecl SEH_43AF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009728A9) -------------------------------------------------------- int __cdecl SEH_43B030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009728CF) -------------------------------------------------------- int __cdecl SEH_43B0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009728F5) -------------------------------------------------------- int __cdecl SEH_43B170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097291B) -------------------------------------------------------- int __cdecl SEH_43B210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972941) -------------------------------------------------------- int __cdecl SEH_43B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972967) -------------------------------------------------------- int __cdecl SEH_43B330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097298D) -------------------------------------------------------- int __cdecl SEH_43B3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009729B3) -------------------------------------------------------- int __cdecl SEH_43B430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009729D9) -------------------------------------------------------- int __cdecl SEH_43B4B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009729FF) -------------------------------------------------------- int __cdecl SEH_43B530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972A25) -------------------------------------------------------- int __cdecl SEH_43B5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972A4B) -------------------------------------------------------- int __cdecl SEH_43B630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972A71) -------------------------------------------------------- int __cdecl SEH_43B6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972A97) -------------------------------------------------------- int __cdecl SEH_43B740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972AB2) -------------------------------------------------------- void __usercall sub_972AB2(int a1@) { sub_436260(*(_DWORD **)(a1 - 16)); } //----- (00972AD5) -------------------------------------------------------- void __usercall sub_972AD5(int a1@) { sub_436260(*(_DWORD **)(a1 - 16)); } //----- (00972B3D) -------------------------------------------------------- int __cdecl SEH_43BA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972B75) -------------------------------------------------------- int __cdecl SEH_43BB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972BB8) -------------------------------------------------------- int __cdecl SEH_43BC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972BF0) -------------------------------------------------------- int __cdecl SEH_43BDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972C28) -------------------------------------------------------- int __cdecl SEH_43BEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972C60) -------------------------------------------------------- int __cdecl SEH_43BFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972CA4) -------------------------------------------------------- int __cdecl SEH_43C0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972CE7) -------------------------------------------------------- int __cdecl SEH_43C230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972D14) -------------------------------------------------------- int __cdecl SEH_43C370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972D4C) -------------------------------------------------------- int __cdecl SEH_43C450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972D84) -------------------------------------------------------- int __cdecl SEH_43C540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972DBC) -------------------------------------------------------- int __cdecl SEH_43C630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972DF4) -------------------------------------------------------- int __cdecl SEH_43C720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972E2C) -------------------------------------------------------- int __cdecl SEH_43C810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972E64) -------------------------------------------------------- int __cdecl SEH_43C920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972E98) -------------------------------------------------------- int __cdecl SEH_43D150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972EC6) -------------------------------------------------------- int __cdecl SEH_43DDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972EF4) -------------------------------------------------------- int __cdecl SEH_43DEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972F53) -------------------------------------------------------- int __cdecl SEH_43EB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972F78) -------------------------------------------------------- int __cdecl SEH_43ECB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00972FE6) -------------------------------------------------------- int __cdecl SEH_43F6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973014) -------------------------------------------------------- int __cdecl SEH_43F870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973042) -------------------------------------------------------- int __cdecl SEH_43F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009730B0) -------------------------------------------------------- void __userpurge sub_9730B0(int a1@, int a2) { int v2; // esi v2 = *(_DWORD *)(a1 - 16); *(_DWORD *)v2 = &NiTMapBase,void *,CMsgEater *>::`vftable'; sub_940360((_DWORD *)v2); operator delete[](*(void **)(v2 + 8)); } // 9AEDB0: using guessed type void *NiTMapBase,void *,CMsgEater *>::`vftable'; //----- (009730D3) -------------------------------------------------------- void __usercall sub_9730D3(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009730F6) -------------------------------------------------------- void __usercall sub_9730F6(int a1@) { sub_440CA0((_DWORD *)(*(_DWORD *)(a1 - 16) + 4)); } //----- (00973128) -------------------------------------------------------- int __cdecl SEH_440DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973158) -------------------------------------------------------- int __cdecl SEH_440E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009731A0) -------------------------------------------------------- int __cdecl SEH_441A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009731BB) -------------------------------------------------------- LONG __usercall sub_9731BB@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (009731F9) -------------------------------------------------------- int __cdecl SEH_441EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097321C) -------------------------------------------------------- int __cdecl SEH_442000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009732A0) -------------------------------------------------------- int __cdecl SEH_442B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009732E2) -------------------------------------------------------- int __cdecl SEH_8E0130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973308) -------------------------------------------------------- int __cdecl SEH_442EC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973338) -------------------------------------------------------- int __cdecl SEH_443EC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973366) -------------------------------------------------------- int __cdecl SEH_4442E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973390) -------------------------------------------------------- LONG __usercall sub_973390@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00973398) -------------------------------------------------------- void __usercall sub_973398(int a1@) { sub_636A10((void *)(*(_DWORD *)(a1 - 16) + 480)); } //----- (009733EA) -------------------------------------------------------- int __cdecl SEH_444B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973448) -------------------------------------------------------- int __cdecl SEH_4453C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973496) -------------------------------------------------------- int __cdecl SEH_445D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009734C4) -------------------------------------------------------- int __cdecl SEH_445E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009734E0) -------------------------------------------------------- LONG __usercall sub_9734E0@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00973556) -------------------------------------------------------- int __cdecl SEH_4468C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097358C) -------------------------------------------------------- int __cdecl SEH_447800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973630) -------------------------------------------------------- int __cdecl SEH_4484A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097365E) -------------------------------------------------------- int __cdecl SEH_4485D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973688) -------------------------------------------------------- int __cdecl SEH_449300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009736B6) -------------------------------------------------------- int __cdecl SEH_44A410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973711) -------------------------------------------------------- int __cdecl SEH_44A550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097373F) -------------------------------------------------------- int __cdecl SEH_44A8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973821) -------------------------------------------------------- int __cdecl SEH_44DB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973844) -------------------------------------------------------- int __cdecl SEH_44DC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973871) -------------------------------------------------------- int __cdecl SEH_44DD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009738CF) -------------------------------------------------------- int __cdecl SEH_44E2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973955) -------------------------------------------------------- int __cdecl SEH_44E570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009739BA) -------------------------------------------------------- int __cdecl SEH_44E770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009739DD) -------------------------------------------------------- int __cdecl SEH_44E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973A03) -------------------------------------------------------- int __cdecl SEH_44EAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973A28) -------------------------------------------------------- int __cdecl SEH_44EEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973A96) -------------------------------------------------------- int __cdecl SEH_44F480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973AC4) -------------------------------------------------------- int __cdecl SEH_44FD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973AF2) -------------------------------------------------------- int __cdecl SEH_44FE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973B68) -------------------------------------------------------- int __cdecl SEH_4511D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973B93) -------------------------------------------------------- int __cdecl SEH_451370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973BB8) -------------------------------------------------------- int __cdecl SEH_4514B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973BE8) -------------------------------------------------------- int __cdecl SEH_451530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973C31) -------------------------------------------------------- int __cdecl SEH_451700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973C6F) -------------------------------------------------------- int __cdecl SEH_4518A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973C92) -------------------------------------------------------- int __cdecl SEH_451B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973CB7) -------------------------------------------------------- void __usercall sub_973CB7(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00973CE4) -------------------------------------------------------- void __usercall sub_973CE4(int a1@) { sub_636A10((void *)(a1 - 76)); } //----- (00973D11) -------------------------------------------------------- void __usercall sub_973D11(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00973D3E) -------------------------------------------------------- void __usercall sub_973D3E(int a1@) { sub_636A10((void *)(a1 - 76)); } //----- (00973D81) -------------------------------------------------------- int __cdecl SEH_4529C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973DA8) -------------------------------------------------------- int __cdecl SEH_4537D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973DE0) -------------------------------------------------------- int __cdecl SEH_4538E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973E00) -------------------------------------------------------- LONG __usercall sub_973E00@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (00973E51) -------------------------------------------------------- int __cdecl SEH_452DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973E82) -------------------------------------------------------- int __cdecl SEH_452FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973ED6) -------------------------------------------------------- int __cdecl SEH_453230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973F04) -------------------------------------------------------- int __cdecl SEH_453510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973F28) -------------------------------------------------------- int __cdecl SEH_455600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973F71) -------------------------------------------------------- int __cdecl SEH_455710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973FCC) -------------------------------------------------------- int __cdecl SEH_454070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00973FEF) -------------------------------------------------------- int __cdecl SEH_454580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974036) -------------------------------------------------------- int __cdecl SEH_4546A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097406C) -------------------------------------------------------- int __cdecl SEH_4547E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974097) -------------------------------------------------------- int __cdecl SEH_454A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009740BA) -------------------------------------------------------- int __cdecl SEH_454B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009740E8) -------------------------------------------------------- int __cdecl SEH_455870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974123) -------------------------------------------------------- int __cdecl SEH_455D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097413E) -------------------------------------------------------- void __usercall sub_97413E(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00974149) -------------------------------------------------------- void __usercall sub_974149(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097417B) -------------------------------------------------------- int __cdecl SEH_4560E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009741A1) -------------------------------------------------------- int __cdecl SEH_456260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009741C7) -------------------------------------------------------- int __cdecl SEH_4562E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974223) -------------------------------------------------------- int __cdecl SEH_456B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097428C) -------------------------------------------------------- int __cdecl SEH_456E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009742D9) -------------------------------------------------------- int __cdecl SEH_4571E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974300) -------------------------------------------------------- void __usercall sub_974300(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (00974308) -------------------------------------------------------- void __usercall sub_974308(int a1@) { sub_410C00((void *)(a1 - 40)); } //----- (0097433E) -------------------------------------------------------- int __cdecl SEH_457890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974373) -------------------------------------------------------- int __cdecl SEH_459270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009743A3) -------------------------------------------------------- int __cdecl SEH_459770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974400) -------------------------------------------------------- int __cdecl SEH_459D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974477) -------------------------------------------------------- int __cdecl SEH_45A780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009744A5) -------------------------------------------------------- int __cdecl SEH_45A900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009744D3) -------------------------------------------------------- int __cdecl SEH_45AA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974531) -------------------------------------------------------- int __cdecl SEH_45B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097457C) -------------------------------------------------------- int __cdecl SEH_45C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009745AA) -------------------------------------------------------- int __cdecl SEH_45C5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009745E3) -------------------------------------------------------- int __cdecl SEH_45CE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974616) -------------------------------------------------------- int __cdecl SEH_45D160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974647) -------------------------------------------------------- int __cdecl SEH_45D560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009746EE) -------------------------------------------------------- void __usercall sub_9746EE(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009746F9) -------------------------------------------------------- void __usercall sub_9746F9(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097472F) -------------------------------------------------------- int __cdecl SEH_45E350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097478E) -------------------------------------------------------- int __cdecl SEH_45EB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009747B8) -------------------------------------------------------- int __cdecl SEH_45F9D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009747F0) -------------------------------------------------------- int __cdecl SEH_45FAE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974818) -------------------------------------------------------- int __cdecl SEH_45FBA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974848) -------------------------------------------------------- int __cdecl SEH_45FCB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974880) -------------------------------------------------------- int __cdecl SEH_45FE50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009748EC) -------------------------------------------------------- int __cdecl SEH_45EFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097490F) -------------------------------------------------------- int __cdecl SEH_45F0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974932) -------------------------------------------------------- int __cdecl SEH_45F2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097497F) -------------------------------------------------------- int __cdecl SEH_45F5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097499A) -------------------------------------------------------- void __usercall sub_97499A(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009749A5) -------------------------------------------------------- void __usercall sub_9749A5(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009749E6) -------------------------------------------------------- int __cdecl SEH_45FFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974A0C) -------------------------------------------------------- int __cdecl SEH_460440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974A32) -------------------------------------------------------- int __cdecl SEH_460590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974A60) -------------------------------------------------------- int __cdecl SEH_460640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974A8E) -------------------------------------------------------- int __cdecl SEH_4607A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974ACB) -------------------------------------------------------- int __cdecl SEH_461380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974B09) -------------------------------------------------------- int __cdecl SEH_4615D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974B30) -------------------------------------------------------- LONG __usercall sub_974B30@(int a1@) { return sub_918270(*(_DWORD **)(a1 - 16)); } //----- (00974B38) -------------------------------------------------------- void __usercall sub_974B38(int a1@) { sub_461360((void *)(*(_DWORD *)(a1 - 16) + 276)); } //----- (00974B79) -------------------------------------------------------- int __cdecl SEH_460A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974B94) -------------------------------------------------------- LONG __usercall sub_974B94@(int a1@) { return sub_918270(*(_DWORD **)(a1 - 16)); } //----- (00974B9C) -------------------------------------------------------- void __usercall sub_974B9C(int a1@) { sub_461360((void *)(*(_DWORD *)(a1 - 16) + 276)); } //----- (00974C11) -------------------------------------------------------- int __cdecl SEH_461120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974C4D) -------------------------------------------------------- int __cdecl SEH_461230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974C86) -------------------------------------------------------- int __cdecl SEH_4616B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974CD0) -------------------------------------------------------- int __cdecl SEH_461D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974CF3) -------------------------------------------------------- int __cdecl SEH_462A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974D21) -------------------------------------------------------- int __cdecl SEH_462B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974D44) -------------------------------------------------------- int __cdecl SEH_463020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974D73) -------------------------------------------------------- int __cdecl SEH_463490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974DA1) -------------------------------------------------------- int __cdecl SEH_4635E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974DC8) -------------------------------------------------------- int __cdecl SEH_463910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974DE3) -------------------------------------------------------- void __usercall sub_974DE3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00974DEE) -------------------------------------------------------- void __usercall sub_974DEE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00974E59) -------------------------------------------------------- int __cdecl SEH_463EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974E94) -------------------------------------------------------- int __cdecl SEH_464310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974EE2) -------------------------------------------------------- int __cdecl SEH_465800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974F10) -------------------------------------------------------- int __cdecl SEH_465940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974F33) -------------------------------------------------------- int __cdecl SEH_465B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974F64) -------------------------------------------------------- int __cdecl SEH_466260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974F92) -------------------------------------------------------- int __cdecl SEH_466330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974FC0) -------------------------------------------------------- int __cdecl SEH_466480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00974FF3) -------------------------------------------------------- int __cdecl SEH_466680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097500E) -------------------------------------------------------- void __usercall sub_97500E(int a1@) { sub_468E80((int *)(*(_DWORD *)(a1 - 16) + 8)); } //----- (00975034) -------------------------------------------------------- void __usercall sub_975034(int a1@) { sub_636A10((void *)(a1 - 64)); } //----- (0097503C) -------------------------------------------------------- void __usercall sub_97503C(int a1@) { sub_636A10((void *)(a1 - 64)); } //----- (00975069) -------------------------------------------------------- void __usercall sub_975069(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00975074) -------------------------------------------------------- void __usercall sub_975074(int a1@) { sub_468E80((int *)(*(_DWORD *)(a1 - 16) + 8)); } //----- (009750A2) -------------------------------------------------------- void __usercall sub_9750A2(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009750AD) -------------------------------------------------------- void __usercall sub_9750AD(int a1@) { sub_468E80((int *)(*(_DWORD *)(a1 - 16) + 8)); } //----- (009750DB) -------------------------------------------------------- void __usercall sub_9750DB(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00975189) -------------------------------------------------------- int __cdecl SEH_4686B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009751C1) -------------------------------------------------------- int __cdecl SEH_468820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975210) -------------------------------------------------------- int __cdecl SEH_468ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975230) -------------------------------------------------------- int __cdecl SEH_4690B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975250) -------------------------------------------------------- int __cdecl SEH_469890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975296) -------------------------------------------------------- int __cdecl SEH_469930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009752D6) -------------------------------------------------------- int __cdecl SEH_469A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975300) -------------------------------------------------------- int __cdecl SEH_469B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975328) -------------------------------------------------------- int __cdecl SEH_46A6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975356) -------------------------------------------------------- int __cdecl SEH_46AFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975388) -------------------------------------------------------- int __cdecl SEH_46B2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009753B6) -------------------------------------------------------- int __cdecl SEH_46B640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009753EB) -------------------------------------------------------- int __cdecl SEH_46CB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097541B) -------------------------------------------------------- int __cdecl SEH_46DF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097546A) -------------------------------------------------------- int __cdecl SEH_46E530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975518) -------------------------------------------------------- int __cdecl SEH_46F620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975541) -------------------------------------------------------- int __cdecl SEH_46FF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009755DE) -------------------------------------------------------- int __cdecl SEH_470A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975641) -------------------------------------------------------- int __cdecl SEH_470B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975674) -------------------------------------------------------- int __cdecl SEH_470DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009756A8) -------------------------------------------------------- int __cdecl SEH_4717F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009756DB) -------------------------------------------------------- int __cdecl SEH_471BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975728) -------------------------------------------------------- int __cdecl SEH_4732E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097575B) -------------------------------------------------------- int __cdecl SEH_421980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975780) -------------------------------------------------------- int __cdecl SEH_47A3E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009757AE) -------------------------------------------------------- int __cdecl SEH_6C0F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009757E8) -------------------------------------------------------- int __cdecl SEH_4820D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975818) -------------------------------------------------------- int __cdecl SEH_483A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975850) -------------------------------------------------------- int __cdecl SEH_483AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975881) -------------------------------------------------------- int __cdecl SEH_483E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009758C3) -------------------------------------------------------- int __cdecl SEH_483F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009759FB) -------------------------------------------------------- int __cdecl SEH_484A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975A2C) -------------------------------------------------------- int __cdecl SEH_484BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975A72) -------------------------------------------------------- int __cdecl SEH_485280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975AEC) -------------------------------------------------------- int __cdecl SEH_485640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975B15) -------------------------------------------------------- int __cdecl SEH_485E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975B50) -------------------------------------------------------- int __cdecl SEH_486EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975B97) -------------------------------------------------------- int __cdecl SEH_4870E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975BED) -------------------------------------------------------- int __cdecl SEH_487210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975C69) -------------------------------------------------------- int __cdecl SEH_4880D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975D17) -------------------------------------------------------- int __cdecl SEH_488F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975D48) -------------------------------------------------------- int __cdecl SEH_4891F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975D80) -------------------------------------------------------- int __cdecl SEH_489320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975DB3) -------------------------------------------------------- int __cdecl SEH_489660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975DDE) -------------------------------------------------------- int __cdecl SEH_489C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975E14) -------------------------------------------------------- int __cdecl SEH_489DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975E44) -------------------------------------------------------- int __cdecl SEH_489ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975E67) -------------------------------------------------------- int __cdecl SEH_48A090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975E95) -------------------------------------------------------- int __cdecl SEH_48A340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975EC3) -------------------------------------------------------- int __cdecl SEH_48A4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975F04) -------------------------------------------------------- int __cdecl SEH_48AB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975F27) -------------------------------------------------------- int __cdecl SEH_48ACF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975F55) -------------------------------------------------------- int __cdecl SEH_48B450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975F70) -------------------------------------------------------- LONG __usercall sub_975F70@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00975FC9) -------------------------------------------------------- int __cdecl SEH_48BD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00975FF9) -------------------------------------------------------- int __cdecl SEH_48CA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976052) -------------------------------------------------------- int __cdecl SEH_48D270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976080) -------------------------------------------------------- int __cdecl SEH_48D3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009760B6) -------------------------------------------------------- int __cdecl SEH_48D4F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009760E7) -------------------------------------------------------- int __cdecl SEH_48D650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976115) -------------------------------------------------------- int __cdecl SEH_48D750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976138) -------------------------------------------------------- int __cdecl SEH_48E460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976169) -------------------------------------------------------- int __cdecl SEH_48E9D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009761A3) -------------------------------------------------------- int __cdecl SEH_48F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009761C9) -------------------------------------------------------- int __cdecl SEH_48FCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976208) -------------------------------------------------------- int __cdecl SEH_490410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976223) -------------------------------------------------------- void __usercall sub_976223(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097622E) -------------------------------------------------------- void __usercall sub_97622E(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00976268) -------------------------------------------------------- int __cdecl SEH_490E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976296) -------------------------------------------------------- int __cdecl SEH_491800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009762CB) -------------------------------------------------------- int __cdecl SEH_491A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009762F3) -------------------------------------------------------- void __usercall sub_9762F3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009762FE) -------------------------------------------------------- void __usercall sub_9762FE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097633E) -------------------------------------------------------- int __cdecl SEH_4967C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976371) -------------------------------------------------------- int __cdecl SEH_496930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976398) -------------------------------------------------------- int __cdecl SEH_4948F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009763CD) -------------------------------------------------------- int __cdecl SEH_4949F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009763FD) -------------------------------------------------------- int __cdecl SEH_494C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097643B) -------------------------------------------------------- int __cdecl SEH_4975A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976461) -------------------------------------------------------- int __cdecl SEH_497E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976487) -------------------------------------------------------- int __cdecl SEH_499C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009764AD) -------------------------------------------------------- int __cdecl SEH_499DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976596) -------------------------------------------------------- int __cdecl SEH_49EEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009765C8) -------------------------------------------------------- int __cdecl SEH_49F980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976613) -------------------------------------------------------- int __cdecl SEH_49FA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976641) -------------------------------------------------------- int __cdecl SEH_4A00B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097666B) -------------------------------------------------------- int __cdecl SEH_8D2660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976698) -------------------------------------------------------- int __cdecl SEH_4A0580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009766BB) -------------------------------------------------------- int __cdecl SEH_4A0640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009766DE) -------------------------------------------------------- int __cdecl SEH_4A0700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976701) -------------------------------------------------------- int __cdecl SEH_4A07D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976724) -------------------------------------------------------- int __cdecl SEH_4A08A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976751) -------------------------------------------------------- int __cdecl SEH_4A09B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976774) -------------------------------------------------------- int __cdecl SEH_4A0AF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976797) -------------------------------------------------------- int __cdecl SEH_4A0D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009767BD) -------------------------------------------------------- int __cdecl SEH_4A10E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009767F1) -------------------------------------------------------- int __cdecl SEH_4A33D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097682B) -------------------------------------------------------- int __cdecl SEH_4A6290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097684E) -------------------------------------------------------- int __cdecl SEH_4A65F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976871) -------------------------------------------------------- int __cdecl SEH_4A66E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976897) -------------------------------------------------------- int __cdecl SEH_4A6BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009768BD) -------------------------------------------------------- int __cdecl SEH_4A7080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009768E3) -------------------------------------------------------- int __cdecl SEH_4A7240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097690E) -------------------------------------------------------- int __cdecl SEH_4A78C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976931) -------------------------------------------------------- int __cdecl SEH_4A8D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976954) -------------------------------------------------------- int __cdecl SEH_4A8F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976977) -------------------------------------------------------- int __cdecl SEH_4A9150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097699A) -------------------------------------------------------- int __cdecl SEH_4AAC10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009769D5) -------------------------------------------------------- int __cdecl SEH_4AB890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976A08) -------------------------------------------------------- int __cdecl SEH_4AC050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976A2B) -------------------------------------------------------- int __cdecl SEH_4AC130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976A90) -------------------------------------------------------- int __cdecl SEH_4AC870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976AC5) -------------------------------------------------------- int __cdecl SEH_4ACB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976B0B) -------------------------------------------------------- int __cdecl SEH_4AD610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976B80) -------------------------------------------------------- int __cdecl SEH_4B1450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976BA8) -------------------------------------------------------- int __cdecl SEH_4B1860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976BD8) -------------------------------------------------------- int __cdecl SEH_4B1970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976C08) -------------------------------------------------------- int __cdecl SEH_4B0FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976C38) -------------------------------------------------------- int __cdecl SEH_747F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976C60) -------------------------------------------------------- int __cdecl SEH_4B2690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976C8B) -------------------------------------------------------- int __cdecl SEH_4B2D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976CB1) -------------------------------------------------------- int __cdecl SEH_4B3380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976CD7) -------------------------------------------------------- int __cdecl SEH_4B7AD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976D02) -------------------------------------------------------- int __cdecl SEH_4B9250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976D28) -------------------------------------------------------- int __cdecl SEH_4BBAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976D4B) -------------------------------------------------------- int __cdecl SEH_4BC350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976D71) -------------------------------------------------------- int __cdecl SEH_4BC9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976D9C) -------------------------------------------------------- int __cdecl SEH_4BD2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976DBF) -------------------------------------------------------- int __cdecl SEH_4BF890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976DE2) -------------------------------------------------------- int __cdecl SEH_4BF9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976E0D) -------------------------------------------------------- int __cdecl SEH_4BFF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976E49) -------------------------------------------------------- int __cdecl SEH_4C02A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976E6F) -------------------------------------------------------- int __cdecl SEH_4C3F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976E9D) -------------------------------------------------------- int __cdecl SEH_4C6C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976ECD) -------------------------------------------------------- int __cdecl SEH_4C7240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976EF0) -------------------------------------------------------- int __cdecl SEH_4C99A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976F1D) -------------------------------------------------------- int __cdecl SEH_4CDAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976F40) -------------------------------------------------------- int __cdecl SEH_4CDC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976F6B) -------------------------------------------------------- int __cdecl SEH_4CDFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976F96) -------------------------------------------------------- int __cdecl SEH_4CEC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976FB9) -------------------------------------------------------- int __cdecl SEH_4D0020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00976FE6) -------------------------------------------------------- int __cdecl SEH_4D1220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977026) -------------------------------------------------------- int __cdecl SEH_4D1640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977049) -------------------------------------------------------- int __cdecl SEH_4D31D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977071) -------------------------------------------------------- void __usercall sub_977071(int a1@) { operator delete(*(void **)(a1 - 20)); } //----- (009770A2) -------------------------------------------------------- int __cdecl SEH_4D39A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009770C8) -------------------------------------------------------- int __cdecl SEH_4D3FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009770F8) -------------------------------------------------------- int __cdecl SEH_4D4230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977125) -------------------------------------------------------- int __cdecl SEH_4D4620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977155) -------------------------------------------------------- int __cdecl SEH_4D4730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977178) -------------------------------------------------------- int __cdecl SEH_4D4860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009771A5) -------------------------------------------------------- int __cdecl SEH_4D4990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009771D2) -------------------------------------------------------- int __cdecl SEH_4D4B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009771FF) -------------------------------------------------------- int __cdecl SEH_4D4C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097723A) -------------------------------------------------------- int __cdecl SEH_4D4E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977283) -------------------------------------------------------- int __cdecl SEH_4D5230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009772DD) -------------------------------------------------------- int __cdecl SEH_4D5530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097730A) -------------------------------------------------------- int __cdecl SEH_4D5670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977366) -------------------------------------------------------- int __cdecl SEH_4D59B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009773C5) -------------------------------------------------------- int __cdecl SEH_4D5C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977403) -------------------------------------------------------- int __cdecl SEH_4D6090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977441) -------------------------------------------------------- int __cdecl SEH_4D63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097747F) -------------------------------------------------------- int __cdecl SEH_4D66A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009774BD) -------------------------------------------------------- int __cdecl SEH_4D69B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009774FB) -------------------------------------------------------- int __cdecl SEH_4D6C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977539) -------------------------------------------------------- int __cdecl SEH_4D6F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977569) -------------------------------------------------------- int __cdecl SEH_4D7250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097758C) -------------------------------------------------------- int __cdecl SEH_4D75B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009775B9) -------------------------------------------------------- int __cdecl SEH_4D7790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009775F4) -------------------------------------------------------- int __cdecl SEH_4D7A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977632) -------------------------------------------------------- int __cdecl SEH_4D7D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977660) -------------------------------------------------------- int __cdecl SEH_4DD8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977688) -------------------------------------------------------- int __cdecl SEH_4DDC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009776B0) -------------------------------------------------------- int __cdecl SEH_4DDD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009776D8) -------------------------------------------------------- int __cdecl SEH_4DE110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977708) -------------------------------------------------------- int __cdecl SEH_8D02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097773E) -------------------------------------------------------- int __cdecl SEH_4DE270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097776E) -------------------------------------------------------- int __cdecl SEH_4DE3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977798) -------------------------------------------------------- int __cdecl SEH_9A1910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009777C8) -------------------------------------------------------- int __cdecl SEH_4E0BC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009777F8) -------------------------------------------------------- int __cdecl SEH_4E6890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977879) -------------------------------------------------------- int __cdecl SEH_4E3B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097790F) -------------------------------------------------------- int __cdecl SEH_4E3D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977947) -------------------------------------------------------- int __cdecl SEH_4E4710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977AD2) -------------------------------------------------------- int __cdecl SEH_4E4980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977B05) -------------------------------------------------------- int __cdecl SEH_4E4D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977C74) -------------------------------------------------------- int __cdecl SEH_4E51E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977D00) -------------------------------------------------------- int __cdecl SEH_4E6ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977D20) -------------------------------------------------------- int __cdecl SEH_4E70C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977D48) -------------------------------------------------------- int __cdecl SEH_9A1A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977D86) -------------------------------------------------------- int __cdecl SEH_4E7500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977E0C) -------------------------------------------------------- int __cdecl SEH_4E8300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977E3A) -------------------------------------------------------- int __cdecl SEH_4E87D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977E68) -------------------------------------------------------- int __cdecl SEH_4E8910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977E96) -------------------------------------------------------- int __cdecl SEH_4E8A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977EC4) -------------------------------------------------------- int __cdecl SEH_4E8B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977EE7) -------------------------------------------------------- int __cdecl SEH_4E8D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977F0C) -------------------------------------------------------- void __usercall sub_977F0C(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00977F17) -------------------------------------------------------- void __usercall sub_977F17(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00977F45) -------------------------------------------------------- int __cdecl SEH_4E9590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977F78) -------------------------------------------------------- int __cdecl SEH_4EA450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977FA8) -------------------------------------------------------- int __cdecl SEH_8D0AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00977FE6) -------------------------------------------------------- int __cdecl SEH_4EAD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978001) -------------------------------------------------------- LONG __usercall sub_978001@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097802C) -------------------------------------------------------- int __cdecl SEH_4EAE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978052) -------------------------------------------------------- int __cdecl SEH_4EAED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097808A) -------------------------------------------------------- int __cdecl SEH_4EB370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009780B8) -------------------------------------------------------- int __cdecl SEH_4EB5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009780EB) -------------------------------------------------------- int __cdecl SEH_4EB850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097810E) -------------------------------------------------------- int __cdecl SEH_4EBB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009781B3) -------------------------------------------------------- int __cdecl SEH_4ED330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009781FC) -------------------------------------------------------- int __cdecl SEH_4ED3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978270) -------------------------------------------------------- int __cdecl SEH_4ED4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097829E) -------------------------------------------------------- int __cdecl SEH_4ED680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978311) -------------------------------------------------------- int __cdecl SEH_4EDDB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097833F) -------------------------------------------------------- int __cdecl SEH_4EDE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009783A6) -------------------------------------------------------- int __cdecl SEH_4EE7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009783DB) -------------------------------------------------------- int __cdecl SEH_4EEAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978408) -------------------------------------------------------- int __cdecl SEH_4EEFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978436) -------------------------------------------------------- int __cdecl SEH_4EF0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009784D0) -------------------------------------------------------- int __cdecl SEH_4F07B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978500) -------------------------------------------------------- int __cdecl SEH_4F0A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097853D) -------------------------------------------------------- int __cdecl SEH_4F0BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097856A) -------------------------------------------------------- int __cdecl SEH_4F0D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978631) -------------------------------------------------------- int __cdecl SEH_4F1020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009786E6) -------------------------------------------------------- int __cdecl SEH_4F1860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978714) -------------------------------------------------------- int __cdecl SEH_4F1AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978741) -------------------------------------------------------- int __cdecl SEH_4F2000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978776) -------------------------------------------------------- int __cdecl SEH_4F2600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978799) -------------------------------------------------------- int __cdecl SEH_4F26C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009787D1) -------------------------------------------------------- int __cdecl SEH_4F2FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009787F8) -------------------------------------------------------- int __cdecl SEH_4F3220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978826) -------------------------------------------------------- int __cdecl SEH_4F3800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097888E) -------------------------------------------------------- int __cdecl SEH_4F4380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009788DB) -------------------------------------------------------- void __usercall sub_9788DB(int a1@) { sub_636A10((void *)(a1 - 144)); } //----- (0097891E) -------------------------------------------------------- int __cdecl SEH_4F82F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009789C1) -------------------------------------------------------- int __cdecl SEH_4F9350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978A0E) -------------------------------------------------------- int __cdecl SEH_4F9630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978A3C) -------------------------------------------------------- int __cdecl SEH_4F97F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978A60) -------------------------------------------------------- int __cdecl SEH_4F9D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978A80) -------------------------------------------------------- LONG __usercall sub_978A80@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00978AA3) -------------------------------------------------------- LONG __usercall sub_978AA3@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00978AE1) -------------------------------------------------------- int __cdecl SEH_4FA4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978B04) -------------------------------------------------------- int __cdecl SEH_4FA600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978B27) -------------------------------------------------------- int __cdecl SEH_4FA790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978BA8) -------------------------------------------------------- int __cdecl SEH_416AD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978BE9) -------------------------------------------------------- int __cdecl SEH_4FB570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978C10) -------------------------------------------------------- LONG __usercall sub_978C10@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00978C33) -------------------------------------------------------- LONG __usercall sub_978C33@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00978C71) -------------------------------------------------------- int __cdecl SEH_4FB840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978C94) -------------------------------------------------------- int __cdecl SEH_4FB9A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978CD1) -------------------------------------------------------- int __cdecl SEH_4FBB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978D76) -------------------------------------------------------- int __cdecl SEH_4FC690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978D99) -------------------------------------------------------- int __cdecl SEH_4FC750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978DB4) -------------------------------------------------------- void __usercall sub_978DB4(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00978DBF) -------------------------------------------------------- void __usercall sub_978DBF(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00978E06) -------------------------------------------------------- int __cdecl SEH_4FCB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978E65) -------------------------------------------------------- int __cdecl SEH_4FD260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978E93) -------------------------------------------------------- int __cdecl SEH_4FD5C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978EF0) -------------------------------------------------------- int __cdecl SEH_4FDEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00978F1E) -------------------------------------------------------- int __cdecl SEH_4FE330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009790E3) -------------------------------------------------------- int __cdecl SEH_4FF330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979113) -------------------------------------------------------- int __cdecl SEH_4FF570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979148) -------------------------------------------------------- int __cdecl SEH_4FFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097916B) -------------------------------------------------------- int __cdecl SEH_5007F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979199) -------------------------------------------------------- int __cdecl SEH_500BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009791C7) -------------------------------------------------------- int __cdecl SEH_500DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009791EA) -------------------------------------------------------- int __cdecl SEH_500F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979218) -------------------------------------------------------- int __cdecl SEH_5013D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979249) -------------------------------------------------------- int __cdecl SEH_501540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979277) -------------------------------------------------------- int __cdecl SEH_501610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097931B) -------------------------------------------------------- int __cdecl SEH_501B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979375) -------------------------------------------------------- int __cdecl SEH_501F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009793A3) -------------------------------------------------------- int __cdecl SEH_502160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979432) -------------------------------------------------------- int __cdecl SEH_5026E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979460) -------------------------------------------------------- int __cdecl SEH_5027B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009794FD) -------------------------------------------------------- int __cdecl SEH_5033A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097952B) -------------------------------------------------------- int __cdecl SEH_5034E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979558) -------------------------------------------------------- int __cdecl SEH_5042A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009795B3) -------------------------------------------------------- int __cdecl SEH_505230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009795E1) -------------------------------------------------------- int __cdecl SEH_5055C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979762) -------------------------------------------------------- int __cdecl SEH_506820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009797B9) -------------------------------------------------------- int __cdecl SEH_506A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009797E7) -------------------------------------------------------- int __cdecl SEH_506CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097980A) -------------------------------------------------------- int __cdecl SEH_506ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979837) -------------------------------------------------------- int __cdecl SEH_507180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097985A) -------------------------------------------------------- int __cdecl SEH_5072B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979887) -------------------------------------------------------- int __cdecl SEH_507570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009798B5) -------------------------------------------------------- int __cdecl SEH_507750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009798D8) -------------------------------------------------------- int __cdecl SEH_507B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979905) -------------------------------------------------------- int __cdecl SEH_507FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979A10) -------------------------------------------------------- int __cdecl SEH_5093E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979A30) -------------------------------------------------------- int __cdecl SEH_5094B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979A50) -------------------------------------------------------- int __cdecl SEH_5095B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979A91) -------------------------------------------------------- int __cdecl SEH_5098F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979ACB) -------------------------------------------------------- int __cdecl SEH_509FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979AF9) -------------------------------------------------------- int __cdecl SEH_50A1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979B20) -------------------------------------------------------- LONG __usercall sub_979B20@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00979B4B) -------------------------------------------------------- int __cdecl SEH_50A650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979B6E) -------------------------------------------------------- int __cdecl SEH_50AC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979B9C) -------------------------------------------------------- int __cdecl SEH_50AD30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979C54) -------------------------------------------------------- int __cdecl SEH_50D130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979C82) -------------------------------------------------------- int __cdecl SEH_50D280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979CB0) -------------------------------------------------------- int __cdecl SEH_50D3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979CD8) -------------------------------------------------------- int __cdecl SEH_50D6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979CF3) -------------------------------------------------------- void __usercall sub_979CF3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00979CFE) -------------------------------------------------------- void __usercall sub_979CFE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00979D30) -------------------------------------------------------- LONG __usercall sub_979D30@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00979D38) -------------------------------------------------------- void __usercall sub_979D38(int a1@) { nullsub_6((void *)(*(_DWORD *)(a1 - 16) + 344)); } //----- (00979D69) -------------------------------------------------------- int __cdecl SEH_50DE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979D9A) -------------------------------------------------------- int __cdecl SEH_50DFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979DBD) -------------------------------------------------------- int __cdecl SEH_50E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979DEB) -------------------------------------------------------- int __cdecl SEH_50E8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979E31) -------------------------------------------------------- int __cdecl SEH_50EB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979E76) -------------------------------------------------------- int __cdecl SEH_50EF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979EA8) -------------------------------------------------------- int __cdecl SEH_50F3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979ED6) -------------------------------------------------------- int __cdecl SEH_50FBD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00979F00) -------------------------------------------------------- LONG __usercall sub_979F00@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00979F23) -------------------------------------------------------- LONG __usercall sub_979F23@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00979F61) -------------------------------------------------------- int __cdecl SEH_510290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A013) -------------------------------------------------------- int __cdecl SEH_512290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A041) -------------------------------------------------------- int __cdecl SEH_5136F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A098) -------------------------------------------------------- int __cdecl SEH_513830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A0C6) -------------------------------------------------------- int __cdecl SEH_513CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A135) -------------------------------------------------------- int __cdecl SEH_513DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A163) -------------------------------------------------------- int __cdecl SEH_514010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A2A8) -------------------------------------------------------- int __cdecl SEH_522240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A2EE) -------------------------------------------------------- int __cdecl SEH_521F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A318) -------------------------------------------------------- int __cdecl SEH_522020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A348) -------------------------------------------------------- int __cdecl SEH_522130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A380) -------------------------------------------------------- int __cdecl SEH_522310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A3A8) -------------------------------------------------------- int __cdecl SEH_5223B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A3D8) -------------------------------------------------------- int __cdecl SEH_522440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A410) -------------------------------------------------------- int __cdecl SEH_5224B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A438) -------------------------------------------------------- int __cdecl SEH_522630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A468) -------------------------------------------------------- int __cdecl SEH_522740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A498) -------------------------------------------------------- int __cdecl SEH_522840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A4C8) -------------------------------------------------------- int __cdecl SEH_5228C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A4F8) -------------------------------------------------------- int __cdecl SEH_5227C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A528) -------------------------------------------------------- int __cdecl SEH_522940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A560) -------------------------------------------------------- int __cdecl SEH_522530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A58B) -------------------------------------------------------- int __cdecl SEH_51A4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A5BE) -------------------------------------------------------- int __cdecl SEH_51B5A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097A8C3) -------------------------------------------------------- int __cdecl SEH_51BB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AC3A) -------------------------------------------------------- int __cdecl SEH_51BF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AC68) -------------------------------------------------------- int __cdecl SEH_51C7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AC96) -------------------------------------------------------- int __cdecl SEH_51CAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097ACD1) -------------------------------------------------------- int __cdecl SEH_51CC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AD01) -------------------------------------------------------- int __cdecl SEH_51D2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AD49) -------------------------------------------------------- int __cdecl SEH_51DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AE60) -------------------------------------------------------- int __cdecl SEH_522F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AE90) -------------------------------------------------------- int __cdecl SEH_522FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AEC0) -------------------------------------------------------- int __cdecl SEH_5230C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AEF0) -------------------------------------------------------- int __cdecl SEH_5231C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AF20) -------------------------------------------------------- int __cdecl SEH_523140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AF50) -------------------------------------------------------- int __cdecl SEH_523040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AF70) -------------------------------------------------------- LONG __usercall sub_97AF70@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097AF93) -------------------------------------------------------- LONG __usercall sub_97AF93@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097AFBE) -------------------------------------------------------- int __cdecl SEH_523850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097AFF4) -------------------------------------------------------- int __cdecl SEH_524040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B064) -------------------------------------------------------- int __cdecl SEH_524960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B092) -------------------------------------------------------- int __cdecl SEH_524E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B0DB) -------------------------------------------------------- int __cdecl SEH_529030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B12C) -------------------------------------------------------- int __cdecl SEH_5290F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B15B) -------------------------------------------------------- int __cdecl SEH_5291C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B188) -------------------------------------------------------- int __cdecl SEH_5293C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B1D0) -------------------------------------------------------- int __cdecl SEH_529500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B20C) -------------------------------------------------------- int __cdecl SEH_5296F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B240) -------------------------------------------------------- int __cdecl SEH_5297C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B288) -------------------------------------------------------- int __cdecl SEH_529AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B2DF) -------------------------------------------------------- int __cdecl SEH_529D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B318) -------------------------------------------------------- int __cdecl SEH_52A0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B3A8) -------------------------------------------------------- int __cdecl SEH_52AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B3E9) -------------------------------------------------------- int __cdecl SEH_52AF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B428) -------------------------------------------------------- int __cdecl SEH_52B320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B460) -------------------------------------------------------- int __cdecl SEH_52B550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B52E) -------------------------------------------------------- int __cdecl SEH_5252D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B577) -------------------------------------------------------- int __cdecl SEH_526660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B5B9) -------------------------------------------------------- int __cdecl SEH_526A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B5E7) -------------------------------------------------------- int __cdecl SEH_526B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B60A) -------------------------------------------------------- int __cdecl SEH_526D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B6D8) -------------------------------------------------------- int __cdecl SEH_52BCE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B706) -------------------------------------------------------- int __cdecl SEH_52C200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B73E) -------------------------------------------------------- int __cdecl SEH_52C4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B76E) -------------------------------------------------------- int __cdecl SEH_52C660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B79C) -------------------------------------------------------- int __cdecl SEH_52C9C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B7FE) -------------------------------------------------------- int __cdecl SEH_52E410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B837) -------------------------------------------------------- int __cdecl SEH_52E8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B868) -------------------------------------------------------- int __cdecl SEH_52E940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B896) -------------------------------------------------------- int __cdecl SEH_52EB30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B970) -------------------------------------------------------- LONG __usercall sub_97B970@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097B99B) -------------------------------------------------------- int __cdecl SEH_5312D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097B9D1) -------------------------------------------------------- int __cdecl SEH_5315C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BA59) -------------------------------------------------------- int __cdecl SEH_5322A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BA87) -------------------------------------------------------- int __cdecl SEH_5323D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BAC5) -------------------------------------------------------- int __cdecl SEH_532530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BAF2) -------------------------------------------------------- int __cdecl SEH_532750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BB20) -------------------------------------------------------- LONG __usercall sub_97BB20@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097BB4B) -------------------------------------------------------- int __cdecl SEH_532B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BB66) -------------------------------------------------------- LONG __usercall sub_97BB66@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097BBA4) -------------------------------------------------------- int __cdecl SEH_5330D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BBE4) -------------------------------------------------------- int __cdecl SEH_533B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BC15) -------------------------------------------------------- int __cdecl SEH_533C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BCA8) -------------------------------------------------------- int __cdecl SEH_533E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BD3B) -------------------------------------------------------- int __cdecl SEH_534220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BD6C) -------------------------------------------------------- int __cdecl SEH_536E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BDAD) -------------------------------------------------------- int __cdecl SEH_537470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BDEE) -------------------------------------------------------- int __cdecl SEH_537640(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BE2F) -------------------------------------------------------- int __cdecl SEH_537800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BE70) -------------------------------------------------------- int __cdecl SEH_5379D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BE9E) -------------------------------------------------------- int __cdecl SEH_537C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BECC) -------------------------------------------------------- int __cdecl SEH_537DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BEFA) -------------------------------------------------------- int __cdecl SEH_537F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BF28) -------------------------------------------------------- int __cdecl SEH_538050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BF4B) -------------------------------------------------------- int __cdecl SEH_538180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BF83) -------------------------------------------------------- int __cdecl SEH_538510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BFB1) -------------------------------------------------------- int __cdecl SEH_538650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097BFD4) -------------------------------------------------------- int __cdecl SEH_538780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C00C) -------------------------------------------------------- int __cdecl SEH_538B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C0A9) -------------------------------------------------------- int __cdecl SEH_53B490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C0CC) -------------------------------------------------------- int __cdecl SEH_53C350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C0F2) -------------------------------------------------------- int __cdecl SEH_53C480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C118) -------------------------------------------------------- int __cdecl SEH_53F440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C13B) -------------------------------------------------------- int __cdecl SEH_53F8D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C15E) -------------------------------------------------------- int __cdecl SEH_541690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C18C) -------------------------------------------------------- int __cdecl SEH_541780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C1B2) -------------------------------------------------------- int __cdecl SEH_5418C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C227) -------------------------------------------------------- int __cdecl SEH_541FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C26F) -------------------------------------------------------- int __cdecl SEH_545900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C2A4) -------------------------------------------------------- int __cdecl SEH_545D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C2D8) -------------------------------------------------------- int __cdecl SEH_549220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C308) -------------------------------------------------------- int __cdecl SEH_745C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C338) -------------------------------------------------------- int __cdecl SEH_549720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C366) -------------------------------------------------------- int __cdecl SEH_549D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C3BC) -------------------------------------------------------- int __cdecl SEH_54A1A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C3ED) -------------------------------------------------------- int __cdecl SEH_54A380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C410) -------------------------------------------------------- int __cdecl SEH_54A740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C44F) -------------------------------------------------------- int __cdecl SEH_54A8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C475) -------------------------------------------------------- int __cdecl SEH_54AA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C49B) -------------------------------------------------------- int __cdecl SEH_54AAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C4C1) -------------------------------------------------------- int __cdecl SEH_54AB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C4E7) -------------------------------------------------------- int __cdecl SEH_54ABF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C50D) -------------------------------------------------------- int __cdecl SEH_54AC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C53B) -------------------------------------------------------- int __cdecl SEH_54AD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C569) -------------------------------------------------------- int __cdecl SEH_54AEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C58C) -------------------------------------------------------- int __cdecl SEH_54AFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C5CC) -------------------------------------------------------- int __cdecl SEH_54B890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C5F8) -------------------------------------------------------- int __cdecl SEH_54C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C613) -------------------------------------------------------- void __usercall sub_97C613(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097C61E) -------------------------------------------------------- void __usercall sub_97C61E(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097C658) -------------------------------------------------------- int __cdecl SEH_54CC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C6F9) -------------------------------------------------------- int __cdecl SEH_54D100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C752) -------------------------------------------------------- int __cdecl SEH_54FA00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C780) -------------------------------------------------------- int __cdecl SEH_54FB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C821) -------------------------------------------------------- int __cdecl SEH_54FCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C84F) -------------------------------------------------------- int __cdecl SEH_54FFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C8B3) -------------------------------------------------------- int __cdecl SEH_5570C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C8E1) -------------------------------------------------------- int __cdecl SEH_557300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C939) -------------------------------------------------------- int __cdecl SEH_558160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C960) -------------------------------------------------------- LONG __usercall sub_97C960@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097C9B6) -------------------------------------------------------- int __cdecl SEH_5589D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097C9D1) -------------------------------------------------------- LONG __usercall sub_97C9D1@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097C9D9) -------------------------------------------------------- void __usercall sub_97C9D9(int a1@) { `eh vector destructor iterator'((void *)(*(_DWORD *)(a1 - 16) + 344), 4u, 2, sub_410C00); } //----- (0097CA3F) -------------------------------------------------------- int __cdecl SEH_558B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CA68) -------------------------------------------------------- int __cdecl SEH_558DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CA96) -------------------------------------------------------- int __cdecl SEH_559730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CAE1) -------------------------------------------------------- int __cdecl SEH_55BD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CB20) -------------------------------------------------------- int __cdecl SEH_559AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CBB9) -------------------------------------------------------- int __cdecl SEH_55BA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CBE7) -------------------------------------------------------- int __cdecl SEH_55BC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CC1B) -------------------------------------------------------- int __cdecl SEH_55BE70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CC48) -------------------------------------------------------- int __cdecl SEH_55BEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CCB1) -------------------------------------------------------- int __cdecl SEH_55C180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CD1A) -------------------------------------------------------- int __cdecl SEH_55C290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CD48) -------------------------------------------------------- int __cdecl SEH_55CD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CD76) -------------------------------------------------------- int __cdecl SEH_55CEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CD99) -------------------------------------------------------- int __cdecl SEH_55CFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CDC0) -------------------------------------------------------- LONG __usercall sub_97CDC0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097CDF9) -------------------------------------------------------- int __cdecl SEH_55DD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CE6F) -------------------------------------------------------- int __cdecl SEH_55EC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CE98) -------------------------------------------------------- int __cdecl SEH_560E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CEBB) -------------------------------------------------------- int __cdecl SEH_560FD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CEE9) -------------------------------------------------------- int __cdecl SEH_561160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CFB1) -------------------------------------------------------- int __cdecl SEH_565D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097CFF0) -------------------------------------------------------- int __cdecl SEH_565E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D036) -------------------------------------------------------- int __cdecl SEH_5662E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D075) -------------------------------------------------------- int __cdecl SEH_566670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D090) -------------------------------------------------------- void __usercall sub_97D090(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097D09B) -------------------------------------------------------- void __usercall sub_97D09B(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097D0C1) -------------------------------------------------------- void __usercall sub_97D0C1(int a1@) { operator delete(*(void **)(a1 - 24)); } //----- (0097D0CC) -------------------------------------------------------- void __usercall sub_97D0CC(int a1@) { sub_410C00((void *)(a1 - 24)); } //----- (0097D0D4) -------------------------------------------------------- void __usercall sub_97D0D4(int a1@) { operator delete(*(void **)(a1 - 24)); } //----- (0097D0DF) -------------------------------------------------------- void __usercall sub_97D0DF(int a1@) { sub_410C00((void *)(a1 - 24)); } //----- (0097D102) -------------------------------------------------------- void __usercall sub_97D102(int a1@) { operator delete(*(void **)(a1 - 24)); } //----- (0097D10D) -------------------------------------------------------- void __usercall sub_97D10D(int a1@) { sub_410C00((void *)(a1 - 24)); } //----- (0097D115) -------------------------------------------------------- void __usercall sub_97D115(int a1@) { operator delete(*(void **)(a1 - 24)); } //----- (0097D120) -------------------------------------------------------- void __usercall sub_97D120(int a1@) { sub_410C00((void *)(a1 - 24)); } //----- (0097D156) -------------------------------------------------------- int __cdecl SEH_5671B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D184) -------------------------------------------------------- int __cdecl SEH_5672F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D1B2) -------------------------------------------------------- int __cdecl SEH_567450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D1D8) -------------------------------------------------------- int __cdecl SEH_567580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D208) -------------------------------------------------------- int __cdecl SEH_5681E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D236) -------------------------------------------------------- int __cdecl SEH_568DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D268) -------------------------------------------------------- int __cdecl SEH_569A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D283) -------------------------------------------------------- LONG __usercall sub_97D283@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D2F4) -------------------------------------------------------- int __cdecl SEH_569C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D357) -------------------------------------------------------- int __cdecl SEH_569DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D372) -------------------------------------------------------- LONG __usercall sub_97D372@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D395) -------------------------------------------------------- LONG __usercall sub_97D395@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D3B8) -------------------------------------------------------- LONG __usercall sub_97D3B8@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D3DB) -------------------------------------------------------- LONG __usercall sub_97D3DB@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D3FE) -------------------------------------------------------- LONG __usercall sub_97D3FE@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D421) -------------------------------------------------------- LONG __usercall sub_97D421@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (0097D457) -------------------------------------------------------- int __cdecl SEH_56C730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D482) -------------------------------------------------------- int __cdecl SEH_56C940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D648) -------------------------------------------------------- int __cdecl SEH_56C9F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D79B) -------------------------------------------------------- int __cdecl SEH_56D180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D7C9) -------------------------------------------------------- int __cdecl SEH_56D490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D7F7) -------------------------------------------------------- int __cdecl SEH_56D5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D825) -------------------------------------------------------- int __cdecl SEH_56D720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D853) -------------------------------------------------------- int __cdecl SEH_56D880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D881) -------------------------------------------------------- int __cdecl SEH_56D9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D8AF) -------------------------------------------------------- int __cdecl SEH_56DB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D8DD) -------------------------------------------------------- int __cdecl SEH_56DCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D90B) -------------------------------------------------------- int __cdecl SEH_56DDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D939) -------------------------------------------------------- int __cdecl SEH_56DF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D967) -------------------------------------------------------- int __cdecl SEH_56E090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D9B8) -------------------------------------------------------- int __cdecl SEH_56E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097D9DB) -------------------------------------------------------- int __cdecl SEH_56F9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DA08) -------------------------------------------------------- int __cdecl SEH_570010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DA38) -------------------------------------------------------- int __cdecl SEH_4539F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DA70) -------------------------------------------------------- int __cdecl SEH_570120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DB22) -------------------------------------------------------- int __cdecl SEH_570DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DB58) -------------------------------------------------------- int __cdecl SEH_570F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DC12) -------------------------------------------------------- int __cdecl SEH_571D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DC40) -------------------------------------------------------- int __cdecl SEH_572560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DCA1) -------------------------------------------------------- int __cdecl SEH_573450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DCBC) -------------------------------------------------------- LONG __usercall sub_97DCBC@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097DD1D) -------------------------------------------------------- int __cdecl SEH_573FD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DD4B) -------------------------------------------------------- int __cdecl SEH_574120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DD78) -------------------------------------------------------- int __cdecl SEH_5743A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DDA6) -------------------------------------------------------- int __cdecl SEH_5745A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DE21) -------------------------------------------------------- int __cdecl SEH_574CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DE4F) -------------------------------------------------------- int __cdecl SEH_574F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DE78) -------------------------------------------------------- int __cdecl SEH_575210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DE9B) -------------------------------------------------------- int __cdecl SEH_5757D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DED1) -------------------------------------------------------- int __cdecl SEH_575B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DEF4) -------------------------------------------------------- int __cdecl SEH_575D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DF1F) -------------------------------------------------------- int __cdecl SEH_575E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DF4D) -------------------------------------------------------- int __cdecl SEH_575F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DF78) -------------------------------------------------------- int __cdecl SEH_576070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097DFE6) -------------------------------------------------------- int __cdecl SEH_577460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E025) -------------------------------------------------------- int __cdecl SEH_5775E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E048) -------------------------------------------------------- int __cdecl SEH_5786F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E06E) -------------------------------------------------------- int __cdecl SEH_5787C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E094) -------------------------------------------------------- int __cdecl SEH_578860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E0BA) -------------------------------------------------------- int __cdecl SEH_578900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E0E0) -------------------------------------------------------- int __cdecl SEH_5789E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E106) -------------------------------------------------------- int __cdecl SEH_578A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E12C) -------------------------------------------------------- int __cdecl SEH_578B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E15A) -------------------------------------------------------- int __cdecl SEH_578D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E188) -------------------------------------------------------- int __cdecl SEH_578E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E1AB) -------------------------------------------------------- int __cdecl SEH_578FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E1E3) -------------------------------------------------------- int __cdecl SEH_57A250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E211) -------------------------------------------------------- int __cdecl SEH_57A3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E286) -------------------------------------------------------- int __cdecl SEH_57AFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E2AC) -------------------------------------------------------- int __cdecl SEH_57B050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E2EA) -------------------------------------------------------- int __cdecl SEH_57B590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E318) -------------------------------------------------------- int __cdecl SEH_57B620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E3BE) -------------------------------------------------------- int __cdecl SEH_57BAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E48A) -------------------------------------------------------- int __cdecl SEH_57CED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E4B8) -------------------------------------------------------- int __cdecl SEH_57D040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E4D3) -------------------------------------------------------- void __usercall sub_97E4D3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097E4DE) -------------------------------------------------------- void __usercall sub_97E4DE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097E509) -------------------------------------------------------- int __cdecl SEH_57D2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E5C4) -------------------------------------------------------- int __cdecl SEH_57E070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E603) -------------------------------------------------------- int __cdecl SEH_57E140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E631) -------------------------------------------------------- int __cdecl SEH_57EAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E772) -------------------------------------------------------- int __cdecl SEH_5808C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E7A8) -------------------------------------------------------- int __cdecl SEH_580A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E862) -------------------------------------------------------- int __cdecl SEH_581CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E890) -------------------------------------------------------- int __cdecl SEH_582560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E913) -------------------------------------------------------- int __cdecl SEH_582FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E94E) -------------------------------------------------------- int __cdecl SEH_5839B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E978) -------------------------------------------------------- int __cdecl SEH_585580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E9B1) -------------------------------------------------------- int __cdecl SEH_585880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097E9D8) -------------------------------------------------------- int __cdecl SEH_5F6530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EA08) -------------------------------------------------------- int __cdecl SEH_586040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EA40) -------------------------------------------------------- int __cdecl SEH_5863A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EA80) -------------------------------------------------------- int __cdecl SEH_586500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EAB8) -------------------------------------------------------- int __cdecl SEH_5866D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EAF0) -------------------------------------------------------- int __cdecl SEH_5867D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EBBE) -------------------------------------------------------- int __cdecl SEH_583CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EBEE) -------------------------------------------------------- int __cdecl SEH_5841D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EC45) -------------------------------------------------------- int __cdecl SEH_584450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EC84) -------------------------------------------------------- int __cdecl SEH_584530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097ECB2) -------------------------------------------------------- int __cdecl SEH_584630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097ECDD) -------------------------------------------------------- int __cdecl SEH_584800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097ED78) -------------------------------------------------------- int __cdecl SEH_5EF350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EDA0) -------------------------------------------------------- int __cdecl SEH_586EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EDD0) -------------------------------------------------------- int __cdecl SEH_587060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EE12) -------------------------------------------------------- int __cdecl SEH_5872E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EE38) -------------------------------------------------------- int __cdecl SEH_5F76C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EE68) -------------------------------------------------------- int __cdecl SEH_587C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EE83) -------------------------------------------------------- void __usercall sub_97EE83(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097EE8E) -------------------------------------------------------- void __usercall sub_97EE8E(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097EEC4) -------------------------------------------------------- int __cdecl SEH_588E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EEF2) -------------------------------------------------------- int __cdecl SEH_5890D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EF0D) -------------------------------------------------------- void __usercall sub_97EF0D(int a1@) { sub_410C00((void *)(a1 - 48)); } //----- (0097EF15) -------------------------------------------------------- void __usercall sub_97EF15(int a1@) { sub_410C00((void *)(a1 - 80)); } //----- (0097EF1D) -------------------------------------------------------- void __usercall sub_97EF1D(int a1@) { sub_4562E0((_DWORD *)(a1 - 116)); } //----- (0097EF25) -------------------------------------------------------- void __usercall sub_97EF25(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0097EF60) -------------------------------------------------------- int __cdecl SEH_589E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097EF90) -------------------------------------------------------- void __usercall sub_97EF90(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0097EFC8) -------------------------------------------------------- int __cdecl SEH_58DB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F003) -------------------------------------------------------- int __cdecl SEH_58DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F03E) -------------------------------------------------------- int __cdecl SEH_58E160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F06C) -------------------------------------------------------- int __cdecl SEH_58E290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F09A) -------------------------------------------------------- int __cdecl SEH_58E450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F0C8) -------------------------------------------------------- int __cdecl SEH_58E5D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F0F6) -------------------------------------------------------- int __cdecl SEH_58E710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F128) -------------------------------------------------------- int __cdecl SEH_58E940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F150) -------------------------------------------------------- LONG __usercall sub_97F150@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097F17B) -------------------------------------------------------- int __cdecl SEH_58EC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F1B1) -------------------------------------------------------- int __cdecl SEH_58EFA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F1D8) -------------------------------------------------------- int __cdecl SEH_58F130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F1FB) -------------------------------------------------------- int __cdecl SEH_58F440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F21E) -------------------------------------------------------- int __cdecl SEH_58F590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F239) -------------------------------------------------------- LONG __usercall sub_97F239@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097F26F) -------------------------------------------------------- int __cdecl SEH_591490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F29D) -------------------------------------------------------- int __cdecl SEH_5915D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F303) -------------------------------------------------------- int __cdecl SEH_592990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F331) -------------------------------------------------------- int __cdecl SEH_592AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F35C) -------------------------------------------------------- int __cdecl SEH_592F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F41E) -------------------------------------------------------- int __cdecl SEH_5957E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F456) -------------------------------------------------------- int __cdecl SEH_595A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F479) -------------------------------------------------------- int __cdecl SEH_595B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F4AA) -------------------------------------------------------- int __cdecl SEH_596190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F4D8) -------------------------------------------------------- int __cdecl SEH_596220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F53E) -------------------------------------------------------- int __cdecl SEH_5972E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F568) -------------------------------------------------------- int __cdecl SEH_5976C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F596) -------------------------------------------------------- int __cdecl SEH_5982C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F5D3) -------------------------------------------------------- int __cdecl SEH_598B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F601) -------------------------------------------------------- int __cdecl SEH_598BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F632) -------------------------------------------------------- int __cdecl SEH_598C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F6A5) -------------------------------------------------------- int __cdecl SEH_599090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F6D6) -------------------------------------------------------- int __cdecl SEH_599440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F704) -------------------------------------------------------- int __cdecl SEH_599510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F732) -------------------------------------------------------- int __cdecl SEH_599650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F755) -------------------------------------------------------- int __cdecl SEH_599780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F7C0) -------------------------------------------------------- int __cdecl SEH_599D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F80D) -------------------------------------------------------- int __cdecl SEH_599E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F830) -------------------------------------------------------- int __cdecl SEH_59A180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F85E) -------------------------------------------------------- int __cdecl SEH_59ABE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F896) -------------------------------------------------------- int __cdecl SEH_59B3D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F8C7) -------------------------------------------------------- int __cdecl SEH_59B470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F8EA) -------------------------------------------------------- int __cdecl SEH_59B550(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F928) -------------------------------------------------------- int __cdecl SEH_59BDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F956) -------------------------------------------------------- int __cdecl SEH_59BEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F988) -------------------------------------------------------- int __cdecl SEH_59C8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F9AB) -------------------------------------------------------- int __cdecl SEH_59CF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097F9D9) -------------------------------------------------------- int __cdecl SEH_59D6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FA07) -------------------------------------------------------- int __cdecl SEH_59D7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FA30) -------------------------------------------------------- void __usercall sub_97FA30(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0097FA3B) -------------------------------------------------------- void __usercall sub_97FA3B(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0097FA60) -------------------------------------------------------- LONG __usercall sub_97FA60@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097FA8B) -------------------------------------------------------- int __cdecl SEH_59DF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FAA6) -------------------------------------------------------- LONG __usercall sub_97FAA6@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0097FAE4) -------------------------------------------------------- int __cdecl SEH_59EB50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FB08) -------------------------------------------------------- int __cdecl SEH_59EDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FB36) -------------------------------------------------------- int __cdecl SEH_59F260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FB6E) -------------------------------------------------------- int __cdecl SEH_59F7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FB96) -------------------------------------------------------- void __usercall sub_97FB96(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (0097FB9E) -------------------------------------------------------- void __usercall sub_97FB9E(int a1@) { sub_410C00((void *)(a1 - 32)); } //----- (0097FBA6) -------------------------------------------------------- void __usercall sub_97FBA6(int a1@) { sub_4562E0((_DWORD *)(a1 - 64)); } //----- (0097FBDC) -------------------------------------------------------- int __cdecl SEH_59FF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FC08) -------------------------------------------------------- int __cdecl SEH_5A1160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FC2B) -------------------------------------------------------- int __cdecl SEH_5A12E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FC51) -------------------------------------------------------- int __cdecl SEH_5A1430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FC95) -------------------------------------------------------- int __cdecl SEH_5A15F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FCC3) -------------------------------------------------------- int __cdecl SEH_5A1710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FCF1) -------------------------------------------------------- int __cdecl SEH_5A1BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FD5A) -------------------------------------------------------- int __cdecl SEH_5A1CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FDD6) -------------------------------------------------------- int __cdecl SEH_5A1E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FE04) -------------------------------------------------------- int __cdecl SEH_5A2040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FE32) -------------------------------------------------------- int __cdecl SEH_5A2180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FE55) -------------------------------------------------------- int __cdecl SEH_5A22C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FE78) -------------------------------------------------------- int __cdecl SEH_5A28B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FF29) -------------------------------------------------------- int __cdecl SEH_5A2DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FF5C) -------------------------------------------------------- int __cdecl SEH_5A4360(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FF8C) -------------------------------------------------------- int __cdecl SEH_5A4DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FFB9) -------------------------------------------------------- int __cdecl SEH_5A5D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0097FFE8) -------------------------------------------------------- int __cdecl SEH_5A6770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980003) -------------------------------------------------------- void __usercall sub_980003(int a1@) { sub_636A10((void *)(a1 - 300)); } //----- (00980041) -------------------------------------------------------- int __cdecl SEH_5A7C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980071) -------------------------------------------------------- int __cdecl SEH_5A83C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009800B4) -------------------------------------------------------- int __cdecl SEH_5A8800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009800E5) -------------------------------------------------------- int __cdecl SEH_5A88C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980113) -------------------------------------------------------- int __cdecl SEH_5A89A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009801A3) -------------------------------------------------------- int __cdecl SEH_5A8AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009801D3) -------------------------------------------------------- int __cdecl SEH_5A9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980208) -------------------------------------------------------- int __cdecl SEH_5ABCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980241) -------------------------------------------------------- int __cdecl SEH_5ACB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098029E) -------------------------------------------------------- int __cdecl SEH_5AD3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009802C8) -------------------------------------------------------- int __cdecl SEH_5ADF40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009802F6) -------------------------------------------------------- int __cdecl SEH_5AE500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980324) -------------------------------------------------------- int __cdecl SEH_5AE650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980352) -------------------------------------------------------- int __cdecl SEH_5AE7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009803B8) -------------------------------------------------------- int __cdecl SEH_5AFB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098041D) -------------------------------------------------------- int __cdecl SEH_5AFDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098044B) -------------------------------------------------------- int __cdecl SEH_5B0020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980479) -------------------------------------------------------- int __cdecl SEH_5B0180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009804A7) -------------------------------------------------------- int __cdecl SEH_5B02F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009804D5) -------------------------------------------------------- int __cdecl SEH_5B0430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980543) -------------------------------------------------------- int __cdecl SEH_5B14D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980598) -------------------------------------------------------- int __cdecl SEH_5B1750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009805C5) -------------------------------------------------------- int __cdecl SEH_5B1F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009805F2) -------------------------------------------------------- int __cdecl SEH_5B2070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980688) -------------------------------------------------------- int __cdecl SEH_5B21E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009806B8) -------------------------------------------------------- int __cdecl SEH_5B3AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009806F0) -------------------------------------------------------- int __cdecl SEH_5B3BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980718) -------------------------------------------------------- int __cdecl SEH_5B4450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980746) -------------------------------------------------------- int __cdecl SEH_5B4B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980778) -------------------------------------------------------- int __cdecl SEH_5B4E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980793) -------------------------------------------------------- void __usercall sub_980793(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0098079E) -------------------------------------------------------- void __usercall sub_98079E(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009807D8) -------------------------------------------------------- int __cdecl SEH_5B58F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980806) -------------------------------------------------------- int __cdecl SEH_5B5B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980834) -------------------------------------------------------- int __cdecl SEH_5B5C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980888) -------------------------------------------------------- int __cdecl SEH_5B62E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009808BB) -------------------------------------------------------- int __cdecl SEH_5B6710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009808F3) -------------------------------------------------------- int __cdecl SEH_5B8850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980910) -------------------------------------------------------- LONG __usercall sub_980910@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00980933) -------------------------------------------------------- LONG __usercall sub_980933@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00980956) -------------------------------------------------------- LONG __usercall sub_980956@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0098095E) -------------------------------------------------------- void __usercall sub_98095E(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 572) = &PgWinDrop::`vftable'; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; //----- (0098096C) -------------------------------------------------------- void __usercall sub_98096C(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 584) = &DropContents::`vftable'; } // 9ACB60: using guessed type void *DropContents::`vftable'; //----- (009809A8) -------------------------------------------------------- int __cdecl SEH_5B9F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009809DE) -------------------------------------------------------- int __cdecl SEH_5BA0C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980A0C) -------------------------------------------------------- int __cdecl SEH_5BA220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980A2F) -------------------------------------------------------- int __cdecl SEH_5BA350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980A68) -------------------------------------------------------- int __cdecl SEH_5BB340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980AB4) -------------------------------------------------------- int __cdecl SEH_5BB3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980B1C) -------------------------------------------------------- int __cdecl SEH_5BBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980B48) -------------------------------------------------------- int __cdecl SEH_5BC210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980B76) -------------------------------------------------------- int __cdecl SEH_5BCD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980BA0) -------------------------------------------------------- LONG __usercall sub_980BA0@(int a1@) { return sub_5D3FC0(*(_DWORD **)(a1 - 16)); } //----- (00980BC3) -------------------------------------------------------- LONG __usercall sub_980BC3@(int a1@) { return sub_5D3FC0(*(_DWORD **)(a1 - 16)); } //----- (00980C87) -------------------------------------------------------- int __cdecl SEH_5BE180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980D33) -------------------------------------------------------- int __cdecl SEH_5BE3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980D69) -------------------------------------------------------- int __cdecl SEH_5BEF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980D84) -------------------------------------------------------- void __usercall sub_980D84(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00980D8F) -------------------------------------------------------- LONG __usercall sub_980D8F@(int a1@) { return sub_5D3FC0(*(_DWORD **)(a1 - 16)); } //----- (00980D97) -------------------------------------------------------- void __usercall sub_980D97(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00980DCD) -------------------------------------------------------- int __cdecl SEH_5BF1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980E22) -------------------------------------------------------- int __cdecl SEH_5BF300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980E5D) -------------------------------------------------------- int __cdecl SEH_5C15D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980E88) -------------------------------------------------------- int __cdecl SEH_5C18C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980EC3) -------------------------------------------------------- int __cdecl SEH_5C1E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980EE0) -------------------------------------------------------- LONG __usercall sub_980EE0@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00980F1E) -------------------------------------------------------- int __cdecl SEH_5C2D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980F4C) -------------------------------------------------------- int __cdecl SEH_5C2E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00980FA0) -------------------------------------------------------- LONG __usercall sub_980FA0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00980FC3) -------------------------------------------------------- LONG __usercall sub_980FC3@(int a1@) { return sub_8F3CC0(*(void **)(a1 - 16)); } //----- (00980FE6) -------------------------------------------------------- LONG __usercall sub_980FE6@(int a1@) { return sub_8F3CC0(*(void **)(a1 - 16)); } //----- (0098101C) -------------------------------------------------------- int __cdecl SEH_5C4770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098105A) -------------------------------------------------------- int __cdecl SEH_5C48A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009810A8) -------------------------------------------------------- int __cdecl SEH_5C51C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009810F8) -------------------------------------------------------- int __cdecl SEH_5C56E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981120) -------------------------------------------------------- LONG __usercall sub_981120@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0098114B) -------------------------------------------------------- int __cdecl SEH_5C5B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981179) -------------------------------------------------------- int __cdecl SEH_5C5F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009811A7) -------------------------------------------------------- int __cdecl SEH_5C6080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981289) -------------------------------------------------------- int __cdecl SEH_5C7980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009812B7) -------------------------------------------------------- int __cdecl SEH_5C7AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981320) -------------------------------------------------------- int __cdecl SEH_5C8100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098137B) -------------------------------------------------------- int __cdecl SEH_5C81D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009813E2) -------------------------------------------------------- int __cdecl SEH_5C8B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981408) -------------------------------------------------------- int __cdecl SEH_5C8DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098142B) -------------------------------------------------------- int __cdecl SEH_5C93F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981459) -------------------------------------------------------- int __cdecl SEH_5C94C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098147C) -------------------------------------------------------- int __cdecl SEH_5C95F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098152F) -------------------------------------------------------- int __cdecl SEH_5CAB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098156A) -------------------------------------------------------- int __cdecl SEH_5CAD60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981598) -------------------------------------------------------- int __cdecl SEH_5CAF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009815C0) -------------------------------------------------------- LONG __usercall sub_9815C0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00981629) -------------------------------------------------------- int __cdecl SEH_5CC020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981650) -------------------------------------------------------- LONG __usercall sub_981650@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (009816B9) -------------------------------------------------------- int __cdecl SEH_5CDD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009816E8) -------------------------------------------------------- int __cdecl SEH_5CE590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981716) -------------------------------------------------------- int __cdecl SEH_5CEB20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981740) -------------------------------------------------------- LONG __usercall sub_981740@(int a1@) { return sub_8F29C0(*(void ***)(a1 - 16)); } //----- (009817A9) -------------------------------------------------------- int __cdecl SEH_5D0D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981810) -------------------------------------------------------- int __cdecl SEH_5D10B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098185D) -------------------------------------------------------- int __cdecl SEH_5D1180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981878) -------------------------------------------------------- void __usercall sub_981878(int a1@) { operator delete(*(void **)(a1 + 12)); } //----- (00981883) -------------------------------------------------------- void __usercall sub_981883(int a1@) { operator delete(*(void **)(a1 + 12)); } //----- (0098188E) -------------------------------------------------------- void __usercall sub_98188E(int a1@) { operator delete(*(void **)(a1 + 12)); } //----- (00981899) -------------------------------------------------------- void __usercall sub_981899(int a1@) { sub_410C00((void *)(a1 + 12)); } //----- (009818A1) -------------------------------------------------------- void __usercall sub_9818A1(int a1@) { operator delete(*(void **)(a1 + 12)); } //----- (009818AC) -------------------------------------------------------- void __usercall sub_9818AC(int a1@) { sub_410C00((void *)(a1 + 12)); } //----- (009818E2) -------------------------------------------------------- int __cdecl SEH_5D1B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981900) -------------------------------------------------------- LONG __usercall sub_981900@(int a1@) { return sub_5D3FC0(*(_DWORD **)(a1 - 16)); } //----- (0098193E) -------------------------------------------------------- int __cdecl SEH_5D1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981968) -------------------------------------------------------- int __cdecl SEH_5D2130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981983) -------------------------------------------------------- void __usercall sub_981983(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0098198E) -------------------------------------------------------- void __usercall sub_98198E(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009819C4) -------------------------------------------------------- int __cdecl SEH_5D2380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009819DF) -------------------------------------------------------- void __usercall sub_9819DF(int a1@) { operator delete(*(void **)(a1 - 20)); } //----- (009819EA) -------------------------------------------------------- void __usercall sub_9819EA(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009819F2) -------------------------------------------------------- void __usercall sub_9819F2(int a1@) { if ( *(_DWORD *)(a1 - 16) & 1 ) { *(_DWORD *)(a1 - 16) &= 0xFFFFFFFE; sub_410C00(*(void **)(a1 + 8)); } } //----- (00981A46) -------------------------------------------------------- int __cdecl SEH_5D26A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981A77) -------------------------------------------------------- int __cdecl SEH_5D2750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981AA5) -------------------------------------------------------- int __cdecl SEH_5D2DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981ACB) -------------------------------------------------------- int __cdecl SEH_5D31A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981B50) -------------------------------------------------------- int __cdecl SEH_5D35C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981BA7) -------------------------------------------------------- int __cdecl SEH_5D3980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981C14) -------------------------------------------------------- int __cdecl SEH_5D3C10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981CAC) -------------------------------------------------------- int __cdecl SEH_5D3FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981D0B) -------------------------------------------------------- int __cdecl SEH_5D4380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981D78) -------------------------------------------------------- int __cdecl SEH_5D4A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981DA9) -------------------------------------------------------- int __cdecl SEH_5D4B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981E58) -------------------------------------------------------- int __cdecl SEH_5D5260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981EFA) -------------------------------------------------------- int __cdecl SEH_5D5650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981F51) -------------------------------------------------------- int __cdecl SEH_5D64C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00981FE4) -------------------------------------------------------- int __cdecl SEH_5D6780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982069) -------------------------------------------------------- int __cdecl SEH_5D6D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982097) -------------------------------------------------------- int __cdecl SEH_5D6E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009820C8) -------------------------------------------------------- int __cdecl SEH_5D8630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009820F0) -------------------------------------------------------- void sub_9820F0() { JUMPOUT(&loc_461340); } //----- (009820F8) -------------------------------------------------------- void sub_9820F8() { JUMPOUT(&loc_461340); } //----- (00982100) -------------------------------------------------------- void __usercall sub_982100(int a1@) { sub_410C00((void *)(a1 - 24)); } //----- (00982147) -------------------------------------------------------- int __cdecl SEH_5D74F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982209) -------------------------------------------------------- int __cdecl SEH_5D7A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098223F) -------------------------------------------------------- int __cdecl SEH_5D80B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098226D) -------------------------------------------------------- int __cdecl SEH_5D8230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098229B) -------------------------------------------------------- int __cdecl SEH_5D84B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009822CA) -------------------------------------------------------- int __cdecl SEH_9A28C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098235B) -------------------------------------------------------- int __cdecl SEH_5D8C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098237E) -------------------------------------------------------- int __cdecl SEH_5D8E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009823AC) -------------------------------------------------------- int __cdecl SEH_5D8F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009823E6) -------------------------------------------------------- int __cdecl SEH_5D92A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982409) -------------------------------------------------------- int __cdecl SEH_5D9350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982437) -------------------------------------------------------- int __cdecl SEH_5DA070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982468) -------------------------------------------------------- int __cdecl SEH_5DA350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982496) -------------------------------------------------------- int __cdecl SEH_5DAC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009824E4) -------------------------------------------------------- int __cdecl SEH_5DADF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982515) -------------------------------------------------------- int __cdecl SEH_5DAE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982538) -------------------------------------------------------- int __cdecl SEH_5DB0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982566) -------------------------------------------------------- int __cdecl SEH_5DB6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009825FB) -------------------------------------------------------- int __cdecl SEH_5DC2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098261E) -------------------------------------------------------- int __cdecl SEH_5DC430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098264C) -------------------------------------------------------- int __cdecl SEH_5DC530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982678) -------------------------------------------------------- int __cdecl SEH_5DC8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009826A6) -------------------------------------------------------- int __cdecl SEH_5DCE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009826DB) -------------------------------------------------------- int __cdecl SEH_8D1600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982716) -------------------------------------------------------- int __cdecl SEH_5DD750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982731) -------------------------------------------------------- LONG __usercall sub_982731@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0098275C) -------------------------------------------------------- int __cdecl SEH_5DD880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098278A) -------------------------------------------------------- int __cdecl SEH_5DE080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009827B0) -------------------------------------------------------- LONG __usercall sub_9827B0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (009827DE) -------------------------------------------------------- int __cdecl SEH_5DE530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982816) -------------------------------------------------------- int __cdecl SEH_5DE760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982840) -------------------------------------------------------- LONG __usercall sub_982840@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00982863) -------------------------------------------------------- LONG __usercall sub_982863@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00982891) -------------------------------------------------------- int __cdecl SEH_5DEAE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009828D1) -------------------------------------------------------- int __cdecl SEH_5DED60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009828F8) -------------------------------------------------------- int __cdecl SEH_5E02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982926) -------------------------------------------------------- int __cdecl SEH_5E0370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982A0B) -------------------------------------------------------- int __cdecl SEH_712F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982A38) -------------------------------------------------------- int __cdecl SEH_5E8B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982A76) -------------------------------------------------------- int __cdecl SEH_5E3E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982B2C) -------------------------------------------------------- int __cdecl SEH_5E4850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982B4F) -------------------------------------------------------- int __cdecl SEH_5E50A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982B7D) -------------------------------------------------------- int __cdecl SEH_5E5250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982B98) -------------------------------------------------------- void __usercall sub_982B98(int a1@) { sub_410C00((void *)(a1 - 52)); } //----- (00982BA0) -------------------------------------------------------- void __usercall sub_982BA0(int a1@) { sub_40AE10((void **)(a1 - 132)); } //----- (00982BAB) -------------------------------------------------------- void __usercall sub_982BAB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BB3) -------------------------------------------------------- void __usercall sub_982BB3(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BBB) -------------------------------------------------------- void __usercall sub_982BBB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BC3) -------------------------------------------------------- void __usercall sub_982BC3(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BCB) -------------------------------------------------------- void __usercall sub_982BCB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BD3) -------------------------------------------------------- void __usercall sub_982BD3(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BDB) -------------------------------------------------------- void __usercall sub_982BDB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BE3) -------------------------------------------------------- void __usercall sub_982BE3(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BEB) -------------------------------------------------------- void __usercall sub_982BEB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BF3) -------------------------------------------------------- void __usercall sub_982BF3(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982BFB) -------------------------------------------------------- void __usercall sub_982BFB(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C03) -------------------------------------------------------- void __usercall sub_982C03(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C0B) -------------------------------------------------------- void __usercall sub_982C0B(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C13) -------------------------------------------------------- void __usercall sub_982C13(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C1B) -------------------------------------------------------- void __usercall sub_982C1B(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C23) -------------------------------------------------------- void __usercall sub_982C23(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00982C68) -------------------------------------------------------- int __cdecl SEH_5E8CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982C96) -------------------------------------------------------- int __cdecl SEH_5E8EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982CC0) -------------------------------------------------------- LONG __usercall sub_982CC0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00982CE3) -------------------------------------------------------- LONG __usercall sub_982CE3@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00982D11) -------------------------------------------------------- int __cdecl SEH_5E92C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982D51) -------------------------------------------------------- int __cdecl SEH_5E9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982D88) -------------------------------------------------------- int __cdecl SEH_5EA090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982DB6) -------------------------------------------------------- int __cdecl SEH_5EAA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982E85) -------------------------------------------------------- int __cdecl SEH_5EABC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982EB5) -------------------------------------------------------- int __cdecl SEH_5EB220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982F0C) -------------------------------------------------------- int __cdecl SEH_5EB530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982F4B) -------------------------------------------------------- int __cdecl SEH_5EB610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982F79) -------------------------------------------------------- int __cdecl SEH_5EB710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00982FF1) -------------------------------------------------------- int __cdecl SEH_5ECDA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983031) -------------------------------------------------------- int __cdecl SEH_5ED2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983058) -------------------------------------------------------- int __cdecl SEH_5ED350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983088) -------------------------------------------------------- int __cdecl SEH_5ED970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009830C1) -------------------------------------------------------- int __cdecl SEH_5ED7B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009830E8) -------------------------------------------------------- int __cdecl SEH_5EDC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983120) -------------------------------------------------------- int __cdecl SEH_5EDF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983160) -------------------------------------------------------- int __cdecl SEH_5EE0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983198) -------------------------------------------------------- int __cdecl SEH_5EE630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009831D0) -------------------------------------------------------- int __cdecl SEH_5EE810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983208) -------------------------------------------------------- int __cdecl SEH_5EE930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983260) -------------------------------------------------------- int __cdecl SEH_5EF130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983288) -------------------------------------------------------- int __cdecl SEH_5EF920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009832AB) -------------------------------------------------------- int __cdecl SEH_5F0170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009832D9) -------------------------------------------------------- int __cdecl SEH_5F06D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983308) -------------------------------------------------------- int __cdecl SEH_5F0E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098332B) -------------------------------------------------------- int __cdecl SEH_5F1050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983359) -------------------------------------------------------- int __cdecl SEH_5F1B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983387) -------------------------------------------------------- int __cdecl SEH_5F1C70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009833C3) -------------------------------------------------------- int __cdecl SEH_5F2720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098347C) -------------------------------------------------------- int __cdecl SEH_5F2860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009834C5) -------------------------------------------------------- int __cdecl SEH_5F3BF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983507) -------------------------------------------------------- int __cdecl SEH_5F3FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983535) -------------------------------------------------------- int __cdecl SEH_5F4190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983558) -------------------------------------------------------- int __cdecl SEH_5F42C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098357B) -------------------------------------------------------- int __cdecl SEH_5F4B60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983628) -------------------------------------------------------- int __cdecl SEH_5F6710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983668) -------------------------------------------------------- int __cdecl SEH_5F68E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009836A0) -------------------------------------------------------- int __cdecl SEH_5F6C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009836D8) -------------------------------------------------------- int __cdecl SEH_5F6FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983708) -------------------------------------------------------- int __cdecl SEH_5F7A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983738) -------------------------------------------------------- int __cdecl SEH_5F7CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983766) -------------------------------------------------------- int __cdecl SEH_5F96A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983790) -------------------------------------------------------- LONG __usercall sub_983790@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (009837B3) -------------------------------------------------------- LONG __usercall sub_9837B3@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (009837BB) -------------------------------------------------------- void __usercall sub_9837BB(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 384) = &PgWinDrop::`vftable'; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; //----- (009837C9) -------------------------------------------------------- void __usercall sub_9837C9(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 400) = &DropContents::`vftable'; } // 9ACB60: using guessed type void *DropContents::`vftable'; //----- (0098380D) -------------------------------------------------------- int __cdecl SEH_5FA430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098383B) -------------------------------------------------------- int __cdecl SEH_5FA590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098385E) -------------------------------------------------------- int __cdecl SEH_5FA6C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009838B4) -------------------------------------------------------- int __cdecl SEH_5FB260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009838D8) -------------------------------------------------------- int __cdecl SEH_5FB5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009838FE) -------------------------------------------------------- int __cdecl SEH_5FB6D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983921) -------------------------------------------------------- int __cdecl SEH_5FB840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098393C) -------------------------------------------------------- void __usercall sub_98393C(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00983947) -------------------------------------------------------- void __usercall sub_983947(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00983986) -------------------------------------------------------- int __cdecl SEH_5FC630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009839B3) -------------------------------------------------------- int __cdecl SEH_5FE890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009839E8) -------------------------------------------------------- int __cdecl SEH_5FF620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983A47) -------------------------------------------------------- int __cdecl SEH_5FF740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983AAC) -------------------------------------------------------- int __cdecl SEH_5FF870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983ADA) -------------------------------------------------------- int __cdecl SEH_5FFAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983B00) -------------------------------------------------------- int __cdecl SEH_5FFDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983B20) -------------------------------------------------------- int __cdecl SEH_5FFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983B51) -------------------------------------------------------- int __cdecl SEH_6006C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983BCC) -------------------------------------------------------- int __cdecl SEH_601670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983C43) -------------------------------------------------------- int __cdecl SEH_6017C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983CAF) -------------------------------------------------------- void __usercall sub_983CAF(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00983CBA) -------------------------------------------------------- void __usercall sub_983CBA(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00983E2B) -------------------------------------------------------- int __cdecl SEH_60A7B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983EEE) -------------------------------------------------------- int __cdecl SEH_60AA20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983F1C) -------------------------------------------------------- int __cdecl SEH_60AD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983F72) -------------------------------------------------------- int __cdecl SEH_60D3B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983FCD) -------------------------------------------------------- int __cdecl SEH_60D8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00983FFB) -------------------------------------------------------- int __cdecl SEH_60EDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984031) -------------------------------------------------------- int __cdecl SEH_60EF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984067) -------------------------------------------------------- int __cdecl SEH_60F0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984098) -------------------------------------------------------- int __cdecl SEH_60F4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009840D6) -------------------------------------------------------- int __cdecl SEH_60FCF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009840FE) -------------------------------------------------------- void __usercall sub_9840FE(int a1@) { sub_410C00((void *)(a1 - 52)); } //----- (00984106) -------------------------------------------------------- void __usercall sub_984106(int a1@) { sub_410C00((void *)(a1 - 76)); } //----- (0098410E) -------------------------------------------------------- void __usercall sub_98410E(int a1@) { sub_40AE10((void **)(a1 - 112)); } //----- (00984116) -------------------------------------------------------- void __usercall sub_984116(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098411E) -------------------------------------------------------- void __usercall sub_98411E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00984126) -------------------------------------------------------- void __usercall sub_984126(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098412E) -------------------------------------------------------- void __usercall sub_98412E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00984136) -------------------------------------------------------- void __usercall sub_984136(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098413E) -------------------------------------------------------- void __usercall sub_98413E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00984146) -------------------------------------------------------- void __usercall sub_984146(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098414E) -------------------------------------------------------- void __usercall sub_98414E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00984156) -------------------------------------------------------- void __usercall sub_984156(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098415E) -------------------------------------------------------- void __usercall sub_98415E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00984310) -------------------------------------------------------- LONG __usercall sub_984310@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0098433B) -------------------------------------------------------- int __cdecl SEH_614020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984371) -------------------------------------------------------- int __cdecl SEH_614700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009843A6) -------------------------------------------------------- int __cdecl SEH_6155D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009843C1) -------------------------------------------------------- LONG __usercall sub_9843C1@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (009843FA) -------------------------------------------------------- int __cdecl SEH_616370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098442F) -------------------------------------------------------- int __cdecl SEH_616A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009844BA) -------------------------------------------------------- int __cdecl SEH_616C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009844F8) -------------------------------------------------------- int __cdecl SEH_617390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984526) -------------------------------------------------------- int __cdecl SEH_617C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984554) -------------------------------------------------------- int __cdecl SEH_617D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984582) -------------------------------------------------------- int __cdecl SEH_617ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009845DE) -------------------------------------------------------- int __cdecl SEH_618380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098460C) -------------------------------------------------------- int __cdecl SEH_6184E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984665) -------------------------------------------------------- int __cdecl SEH_618890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984688) -------------------------------------------------------- int __cdecl SEH_6189E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009846AB) -------------------------------------------------------- int __cdecl SEH_618CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009846EC) -------------------------------------------------------- int __cdecl SEH_619090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984724) -------------------------------------------------------- int __cdecl SEH_619540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098476B) -------------------------------------------------------- int __cdecl SEH_6196F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984786) -------------------------------------------------------- void __usercall sub_984786(int a1@) { sub_410C00((void *)(a1 - 48)); } //----- (0098478E) -------------------------------------------------------- void __usercall sub_98478E(int a1@) { sub_410C00((void *)(a1 - 72)); } //----- (00984796) -------------------------------------------------------- void __usercall sub_984796(int a1@) { sub_40AE10((void **)(a1 - 116)); } //----- (0098479E) -------------------------------------------------------- void __usercall sub_98479E(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (009847A6) -------------------------------------------------------- void __usercall sub_9847A6(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (009847AE) -------------------------------------------------------- void __usercall sub_9847AE(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (009847B6) -------------------------------------------------------- void __usercall sub_9847B6(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (009847FB) -------------------------------------------------------- int __cdecl SEH_61AA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984828) -------------------------------------------------------- int __cdecl SEH_61B5F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984861) -------------------------------------------------------- int __cdecl SEH_61B9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009848A1) -------------------------------------------------------- int __cdecl SEH_61BB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009848D8) -------------------------------------------------------- int __cdecl SEH_61BEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009848F3) -------------------------------------------------------- void __usercall sub_9848F3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009848FE) -------------------------------------------------------- void __usercall sub_9848FE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009849B3) -------------------------------------------------------- int __cdecl SEH_61CF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009849E1) -------------------------------------------------------- int __cdecl SEH_61D070(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984A0F) -------------------------------------------------------- int __cdecl SEH_61D280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984A7F) -------------------------------------------------------- int __cdecl SEH_61DD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984AF4) -------------------------------------------------------- int __cdecl SEH_61E110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984B22) -------------------------------------------------------- int __cdecl SEH_61E250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984B64) -------------------------------------------------------- int __cdecl SEH_61ED50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984BA3) -------------------------------------------------------- int __cdecl SEH_61EEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984BCB) -------------------------------------------------------- int __cdecl SEH_6201E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984C06) -------------------------------------------------------- int __cdecl SEH_6204A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984C42) -------------------------------------------------------- int __cdecl SEH_6205F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984CB0) -------------------------------------------------------- LONG __usercall sub_984CB0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00984CDE) -------------------------------------------------------- int __cdecl SEH_622D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984D11) -------------------------------------------------------- int __cdecl SEH_623790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984D4C) -------------------------------------------------------- int __cdecl SEH_624080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984D7A) -------------------------------------------------------- int __cdecl SEH_6241B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984E03) -------------------------------------------------------- int __cdecl SEH_624310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984E84) -------------------------------------------------------- int __cdecl SEH_624480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984EB2) -------------------------------------------------------- int __cdecl SEH_624770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984EF9) -------------------------------------------------------- int __cdecl SEH_6248A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984F4D) -------------------------------------------------------- int __cdecl SEH_6261C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00984FB4) -------------------------------------------------------- int __cdecl SEH_626B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985025) -------------------------------------------------------- int __cdecl SEH_6276A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098504D) -------------------------------------------------------- void __usercall sub_98504D(int a1@) { sub_410C00((void *)(a1 - 52)); } //----- (00985055) -------------------------------------------------------- void __usercall sub_985055(int a1@) { sub_410C00((void *)(a1 - 92)); } //----- (0098505D) -------------------------------------------------------- void __usercall sub_98505D(int a1@) { sub_40AE10((void **)(a1 - 128)); } //----- (00985065) -------------------------------------------------------- void __usercall sub_985065(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098506D) -------------------------------------------------------- void __usercall sub_98506D(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00985075) -------------------------------------------------------- void __usercall sub_985075(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098507D) -------------------------------------------------------- void __usercall sub_98507D(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00985085) -------------------------------------------------------- void __usercall sub_985085(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098508D) -------------------------------------------------------- void __usercall sub_98508D(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (00985095) -------------------------------------------------------- void __usercall sub_985095(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098509D) -------------------------------------------------------- void __usercall sub_98509D(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (009850A5) -------------------------------------------------------- void __usercall sub_9850A5(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098516B) -------------------------------------------------------- int __cdecl SEH_62B380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009851A6) -------------------------------------------------------- int __cdecl SEH_62B410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009851DB) -------------------------------------------------------- int __cdecl SEH_62B4E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985211) -------------------------------------------------------- int __cdecl SEH_62C140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985241) -------------------------------------------------------- int __cdecl SEH_62C210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098526B) -------------------------------------------------------- int __cdecl SEH_62DD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009852B0) -------------------------------------------------------- int __cdecl SEH_62DF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009852FC) -------------------------------------------------------- int __cdecl SEH_62C8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098531F) -------------------------------------------------------- int __cdecl SEH_62CA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098533A) -------------------------------------------------------- void __usercall sub_98533A(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00985345) -------------------------------------------------------- void __usercall sub_985345(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009853D4) -------------------------------------------------------- int __cdecl SEH_62CC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985449) -------------------------------------------------------- int __cdecl SEH_62D050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009854E3) -------------------------------------------------------- int __cdecl SEH_62E5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098550A) -------------------------------------------------------- int __cdecl SEH_9A2960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985538) -------------------------------------------------------- int __cdecl SEH_62F310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098556A) -------------------------------------------------------- int __cdecl SEH_9A29C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985598) -------------------------------------------------------- int __cdecl SEH_62F590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009855C8) -------------------------------------------------------- int __cdecl SEH_62FCC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009855F8) -------------------------------------------------------- int __cdecl SEH_62FC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098562A) -------------------------------------------------------- int __cdecl SEH_9A2A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985658) -------------------------------------------------------- int __cdecl SEH_62FD90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985673) -------------------------------------------------------- LONG __usercall sub_985673@(int a1@) { return sub_85BA80(*(_DWORD **)(a1 - 16)); } //----- (009856A1) -------------------------------------------------------- int __cdecl SEH_62FE80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009856C8) -------------------------------------------------------- int __cdecl SEH_631CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009856FA) -------------------------------------------------------- int __cdecl SEH_9A2B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985733) -------------------------------------------------------- int __cdecl SEH_6323E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985761) -------------------------------------------------------- int __cdecl SEH_632480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009857B7) -------------------------------------------------------- int __cdecl SEH_6327B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009857D2) -------------------------------------------------------- void __usercall sub_9857D2(int a1@) { `eh vector destructor iterator'((void *)(*(_DWORD *)(a1 - 16) + 4), 4u, 100, sub_410C00); } //----- (00985871) -------------------------------------------------------- int __cdecl SEH_633240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009858A4) -------------------------------------------------------- int __cdecl SEH_9A2B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009858CB) -------------------------------------------------------- int __cdecl SEH_634660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098590B) -------------------------------------------------------- int __cdecl SEH_635470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985965) -------------------------------------------------------- int __cdecl SEH_635520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985993) -------------------------------------------------------- int __cdecl SEH_6356F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009859AE) -------------------------------------------------------- void __usercall sub_9859AE(int a1@) { sub_635470(*(_DWORD **)(a1 - 16)); } //----- (00985A6B) -------------------------------------------------------- int __cdecl SEH_636200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985B68) -------------------------------------------------------- int __cdecl SEH_636A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985BA6) -------------------------------------------------------- int __cdecl SEH_637100(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985BFD) -------------------------------------------------------- int __cdecl SEH_6375D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985C2E) -------------------------------------------------------- int __cdecl SEH_6378A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985C5B) -------------------------------------------------------- int __cdecl SEH_6379C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985C81) -------------------------------------------------------- int __cdecl SEH_637A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985CB6) -------------------------------------------------------- int __cdecl SEH_638280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985D02) -------------------------------------------------------- int __cdecl SEH_6388A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985D1D) -------------------------------------------------------- void __usercall sub_985D1D(int a1@) { sub_410C00((void *)(*(_DWORD *)(a1 - 16) + 32)); } //----- (00985D28) -------------------------------------------------------- void __usercall sub_985D28(int a1@) { sub_637A70((_DWORD *)(*(_DWORD *)(a1 - 16) + 108)); } //----- (00985D5B) -------------------------------------------------------- int __cdecl SEH_63A2A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985DA7) -------------------------------------------------------- int __cdecl SEH_63A710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985DCD) -------------------------------------------------------- int __cdecl SEH_63A950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985DF8) -------------------------------------------------------- int __cdecl SEH_63BF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985E28) -------------------------------------------------------- int __cdecl SEH_63C020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985E58) -------------------------------------------------------- int __cdecl SEH_63C0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985E88) -------------------------------------------------------- int __cdecl SEH_63C140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985EB8) -------------------------------------------------------- int __cdecl SEH_63C1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985F14) -------------------------------------------------------- int __cdecl SEH_63C260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985F40) -------------------------------------------------------- int __cdecl SEH_63C620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985F70) -------------------------------------------------------- int __cdecl SEH_63C740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985FA0) -------------------------------------------------------- int __cdecl SEH_63C590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00985FD0) -------------------------------------------------------- int __cdecl SEH_63C6B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986000) -------------------------------------------------------- int __cdecl SEH_63C7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986041) -------------------------------------------------------- int __cdecl SEH_63AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009860CF) -------------------------------------------------------- int __cdecl SEH_63B020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098626B) -------------------------------------------------------- int __cdecl SEH_63C8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009862C4) -------------------------------------------------------- int __cdecl SEH_63CB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986313) -------------------------------------------------------- int __cdecl SEH_63CCA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986357) -------------------------------------------------------- int __cdecl SEH_63CD50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986380) -------------------------------------------------------- void __usercall sub_986380(int a1@) { operator delete(*(void **)(a1 - 84)); } //----- (0098638B) -------------------------------------------------------- void __usercall sub_98638B(int a1@) { operator delete(*(void **)(a1 - 84)); } //----- (009863C6) -------------------------------------------------------- int __cdecl SEH_63D580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098640E) -------------------------------------------------------- int __cdecl SEH_63DA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986441) -------------------------------------------------------- int __cdecl SEH_63DDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098648E) -------------------------------------------------------- int __cdecl SEH_63E340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009864BE) -------------------------------------------------------- int __cdecl SEH_63E690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009864E4) -------------------------------------------------------- int __cdecl SEH_63E8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986508) -------------------------------------------------------- int __cdecl SEH_63F500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986549) -------------------------------------------------------- int __cdecl SEH_63F5A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098658D) -------------------------------------------------------- int __cdecl SEH_63F690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009865EE) -------------------------------------------------------- int __cdecl SEH_63FA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098662B) -------------------------------------------------------- int __cdecl SEH_640A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986677) -------------------------------------------------------- int __cdecl SEH_6411A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098669D) -------------------------------------------------------- int __cdecl SEH_6413E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009866C8) -------------------------------------------------------- int __cdecl SEH_6417D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009866E3) -------------------------------------------------------- void __usercall sub_9866E3(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (009866EE) -------------------------------------------------------- void __usercall sub_9866EE(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0098675E) -------------------------------------------------------- int __cdecl SEH_642800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098678B) -------------------------------------------------------- int __cdecl SEH_642980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009867B3) -------------------------------------------------------- int __cdecl SEH_642F00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009867D9) -------------------------------------------------------- int __cdecl SEH_6430C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009867F4) -------------------------------------------------------- int __cdecl SEH_6431B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986849) -------------------------------------------------------- int __cdecl SEH_643B20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098688D) -------------------------------------------------------- int __cdecl SEH_644450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009868B3) -------------------------------------------------------- int __cdecl SEH_644650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009868EB) -------------------------------------------------------- int __cdecl SEH_644BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098691E) -------------------------------------------------------- int __cdecl SEH_644F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986953) -------------------------------------------------------- int __cdecl SEH_645200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986978) -------------------------------------------------------- int __cdecl SEH_645680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009869A8) -------------------------------------------------------- int __cdecl SEH_645590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009869DA) -------------------------------------------------------- int __cdecl SEH_9A2D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986A7B) -------------------------------------------------------- int __cdecl SEH_646150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986AA8) -------------------------------------------------------- int __cdecl SEH_6463B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986AEE) -------------------------------------------------------- int __cdecl SEH_646B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986B79) -------------------------------------------------------- int __cdecl SEH_646E80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986C1C) -------------------------------------------------------- int __cdecl SEH_647090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986C48) -------------------------------------------------------- int __cdecl SEH_647FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986C76) -------------------------------------------------------- int __cdecl SEH_6485D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986CA8) -------------------------------------------------------- int __cdecl SEH_648860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986CD6) -------------------------------------------------------- int __cdecl SEH_648A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986D00) -------------------------------------------------------- LONG __usercall sub_986D00@(int a1@) { return sub_5D3FC0(*(_DWORD **)(a1 - 16)); } //----- (00986D23) -------------------------------------------------------- LONG __usercall sub_986D23@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00986D61) -------------------------------------------------------- int __cdecl SEH_649060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986D8F) -------------------------------------------------------- int __cdecl SEH_6491C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986DB2) -------------------------------------------------------- int __cdecl SEH_6492F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986DD5) -------------------------------------------------------- int __cdecl SEH_649400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986DF8) -------------------------------------------------------- int __cdecl SEH_649610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986E1B) -------------------------------------------------------- int __cdecl SEH_6497B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986EAE) -------------------------------------------------------- int __cdecl SEH_64C520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986EE8) -------------------------------------------------------- int __cdecl SEH_64CA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986F1A) -------------------------------------------------------- int __cdecl SEH_9A2E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986F4A) -------------------------------------------------------- int __cdecl SEH_9A2E90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986F7A) -------------------------------------------------------- int __cdecl SEH_9A2F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986FAA) -------------------------------------------------------- int __cdecl SEH_9A2F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00986FDA) -------------------------------------------------------- int __cdecl SEH_9A3010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987000) -------------------------------------------------------- void __usercall sub_987000(int a1@) { operator delete[](*(void **)(a1 + 8)); } //----- (00987038) -------------------------------------------------------- int __cdecl SEH_64ECF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987068) -------------------------------------------------------- int __cdecl SEH_64ED70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987098) -------------------------------------------------------- int __cdecl SEH_64D8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009870C3) -------------------------------------------------------- int __cdecl SEH_64DE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009870EE) -------------------------------------------------------- int __cdecl SEH_64DF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987119) -------------------------------------------------------- int __cdecl SEH_64E0C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098717A) -------------------------------------------------------- int __cdecl SEH_64E910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009871A8) -------------------------------------------------------- int __cdecl SEH_64F0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009871CB) -------------------------------------------------------- int __cdecl SEH_64F130(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009871EE) -------------------------------------------------------- int __cdecl SEH_64F210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987211) -------------------------------------------------------- int __cdecl SEH_64F3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987238) -------------------------------------------------------- int __cdecl SEH_650460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987273) -------------------------------------------------------- int __cdecl SEH_64FA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098729B) -------------------------------------------------------- int __cdecl SEH_65ADA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009872CB) -------------------------------------------------------- int __cdecl SEH_65AEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987303) -------------------------------------------------------- int __cdecl SEH_65AF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987328) -------------------------------------------------------- int __cdecl SEH_6549B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098734B) -------------------------------------------------------- int __cdecl SEH_656C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987378) -------------------------------------------------------- int __cdecl SEH_656CE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009873A5) -------------------------------------------------------- int __cdecl SEH_656DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009873C8) -------------------------------------------------------- int __cdecl SEH_657030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009873FB) -------------------------------------------------------- int __cdecl SEH_657190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987696) -------------------------------------------------------- int __cdecl SEH_657580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009876B9) -------------------------------------------------------- int __cdecl SEH_657DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098771B) -------------------------------------------------------- int __cdecl SEH_6586F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009879B6) -------------------------------------------------------- int __cdecl SEH_658E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009879E0) -------------------------------------------------------- int __cdecl SEH_65B8B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987A13) -------------------------------------------------------- int __cdecl SEH_65DD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987A4E) -------------------------------------------------------- int __cdecl SEH_6602A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987A71) -------------------------------------------------------- int __cdecl SEH_660700(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987AA3) -------------------------------------------------------- int __cdecl SEH_661220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987AC6) -------------------------------------------------------- int __cdecl SEH_6612F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987AF1) -------------------------------------------------------- int __cdecl SEH_6613F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987B3C) -------------------------------------------------------- int __cdecl SEH_6615F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987B5F) -------------------------------------------------------- int __cdecl SEH_661790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987B8C) -------------------------------------------------------- int __cdecl SEH_661A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987BC7) -------------------------------------------------------- int __cdecl SEH_661BF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987BF0) -------------------------------------------------------- int __cdecl SEH_661CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987C19) -------------------------------------------------------- int __cdecl SEH_661DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987C44) -------------------------------------------------------- int __cdecl SEH_661F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987C76) -------------------------------------------------------- int __cdecl SEH_663020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987CD2) -------------------------------------------------------- int __cdecl SEH_663D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987D16) -------------------------------------------------------- int __cdecl SEH_663F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987D48) -------------------------------------------------------- int __cdecl SEH_667D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987D80) -------------------------------------------------------- int __cdecl SEH_667F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987DAB) -------------------------------------------------------- int __cdecl SEH_664B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987DD4) -------------------------------------------------------- int __cdecl SEH_664C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987E07) -------------------------------------------------------- int __cdecl SEH_665040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987E2D) -------------------------------------------------------- int __cdecl SEH_665400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987E53) -------------------------------------------------------- int __cdecl SEH_665580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987F91) -------------------------------------------------------- int __cdecl SEH_6664B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987FB7) -------------------------------------------------------- int __cdecl SEH_666D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00987FE7) -------------------------------------------------------- int __cdecl SEH_6674B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988018) -------------------------------------------------------- int __cdecl SEH_6688B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988040) -------------------------------------------------------- int __cdecl SEH_668B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098807B) -------------------------------------------------------- int __cdecl SEH_668C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988096) -------------------------------------------------------- void __usercall sub_988096(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (009880CF) -------------------------------------------------------- int __cdecl SEH_669170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098810D) -------------------------------------------------------- int __cdecl SEH_669410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988143) -------------------------------------------------------- int __cdecl SEH_669780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988176) -------------------------------------------------------- int __cdecl SEH_669A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098819E) -------------------------------------------------------- void __usercall sub_98819E(int a1@) { sub_410C00((void *)(a1 - 280)); } //----- (009881DC) -------------------------------------------------------- int __cdecl SEH_66A310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098829A) -------------------------------------------------------- int __cdecl SEH_66A740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009882D8) -------------------------------------------------------- int __cdecl SEH_66B6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988300) -------------------------------------------------------- void __usercall sub_988300(int a1@) { sub_410C00((void *)(a1 - 280)); } //----- (00988349) -------------------------------------------------------- int __cdecl SEH_66BEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988387) -------------------------------------------------------- int __cdecl SEH_66C120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009883D0) -------------------------------------------------------- int __cdecl SEH_66C5D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988424) -------------------------------------------------------- int __cdecl SEH_66C880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098846D) -------------------------------------------------------- int __cdecl SEH_66CCE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009884C1) -------------------------------------------------------- int __cdecl SEH_66CFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009884FF) -------------------------------------------------------- int __cdecl SEH_66D370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098879B) -------------------------------------------------------- int __cdecl SEH_66E1C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988923) -------------------------------------------------------- int __cdecl SEH_66F050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988948) -------------------------------------------------------- int __cdecl SEH_66F800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988978) -------------------------------------------------------- int __cdecl SEH_66F8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009889A8) -------------------------------------------------------- int __cdecl SEH_66F980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009889D8) -------------------------------------------------------- int __cdecl SEH_66FA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988A08) -------------------------------------------------------- int __cdecl SEH_66FB00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988A38) -------------------------------------------------------- int __cdecl SEH_670230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988A68) -------------------------------------------------------- int __cdecl SEH_670460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988A98) -------------------------------------------------------- int __cdecl SEH_670780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988AC8) -------------------------------------------------------- int __cdecl SEH_8E61B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988AF8) -------------------------------------------------------- int __cdecl SEH_671200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988B28) -------------------------------------------------------- int __cdecl SEH_6713F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988B60) -------------------------------------------------------- int __cdecl SEH_6E4690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988B91) -------------------------------------------------------- int __cdecl SEH_671760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988BC8) -------------------------------------------------------- int __cdecl SEH_671910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988BF8) -------------------------------------------------------- int __cdecl SEH_6FEC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988C28) -------------------------------------------------------- int __cdecl SEH_671EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988C61) -------------------------------------------------------- int __cdecl SEH_672170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988C88) -------------------------------------------------------- int __cdecl SEH_672240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988CB8) -------------------------------------------------------- int __cdecl SEH_6722E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988CE8) -------------------------------------------------------- int __cdecl SEH_672590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988D30) -------------------------------------------------------- int __cdecl SEH_6728D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988D50) -------------------------------------------------------- LONG __usercall sub_988D50@(int a1@) { return sub_85BA80(*(_DWORD **)(a1 - 16)); } //----- (00988D88) -------------------------------------------------------- int __cdecl SEH_673280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988DB9) -------------------------------------------------------- int __cdecl SEH_673EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988DDC) -------------------------------------------------------- int __cdecl SEH_674470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988DF7) -------------------------------------------------------- void __usercall sub_988DF7(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (00988E28) -------------------------------------------------------- int __cdecl SEH_674910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988E58) -------------------------------------------------------- int __cdecl SEH_675370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988E96) -------------------------------------------------------- int __cdecl SEH_6756D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988EB9) -------------------------------------------------------- int __cdecl SEH_675C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988EE4) -------------------------------------------------------- int __cdecl SEH_675E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988F0F) -------------------------------------------------------- int __cdecl SEH_6763D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988F50) -------------------------------------------------------- int __cdecl SEH_6765B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00988F7B) -------------------------------------------------------- int __cdecl SEH_676A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989005) -------------------------------------------------------- int __cdecl SEH_676CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989033) -------------------------------------------------------- int __cdecl SEH_6771F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009890C2) -------------------------------------------------------- int __cdecl SEH_677490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009890ED) -------------------------------------------------------- int __cdecl SEH_677D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098911B) -------------------------------------------------------- int __cdecl SEH_677E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989159) -------------------------------------------------------- int __cdecl SEH_6780D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098917C) -------------------------------------------------------- int __cdecl SEH_678370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098919F) -------------------------------------------------------- int __cdecl SEH_6784E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009891C2) -------------------------------------------------------- int __cdecl SEH_678650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009891E8) -------------------------------------------------------- int __cdecl SEH_67AA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989220) -------------------------------------------------------- int __cdecl SEH_67AC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989250) -------------------------------------------------------- int __cdecl SEH_67B300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989283) -------------------------------------------------------- int __cdecl SEH_67B380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009892A8) -------------------------------------------------------- int __cdecl SEH_67B7A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009892D9) -------------------------------------------------------- int __cdecl SEH_67B910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009892F4) -------------------------------------------------------- void __usercall sub_9892F4(int a1@) { sub_67E1D0((_DWORD *)(a1 - 120)); } //----- (0098931F) -------------------------------------------------------- int __cdecl SEH_67BD40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989348) -------------------------------------------------------- int __cdecl SEH_67F520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989389) -------------------------------------------------------- int __cdecl SEH_67F5B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009893C8) -------------------------------------------------------- int __cdecl SEH_67EEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009893EB) -------------------------------------------------------- int __cdecl SEH_67F010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098940E) -------------------------------------------------------- int __cdecl SEH_67F160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098943A) -------------------------------------------------------- int __cdecl SEH_9A3190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098946A) -------------------------------------------------------- int __cdecl SEH_9A3210(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098949A) -------------------------------------------------------- int __cdecl SEH_9A3290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009894CA) -------------------------------------------------------- int __cdecl SEH_9A3310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009894FA) -------------------------------------------------------- int __cdecl SEH_9A3370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098952A) -------------------------------------------------------- int __cdecl SEH_9A33D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098955A) -------------------------------------------------------- int __cdecl SEH_9A3430(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989588) -------------------------------------------------------- int __cdecl SEH_680110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009895B8) -------------------------------------------------------- int __cdecl SEH_682620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989628) -------------------------------------------------------- int __cdecl SEH_6839A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989658) -------------------------------------------------------- int __cdecl SEH_683A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989688) -------------------------------------------------------- int __cdecl SEH_683B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009896B8) -------------------------------------------------------- int __cdecl SEH_683C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009896E8) -------------------------------------------------------- int __cdecl SEH_683D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098971B) -------------------------------------------------------- int __cdecl SEH_682B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098973E) -------------------------------------------------------- int __cdecl SEH_682CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989761) -------------------------------------------------------- int __cdecl SEH_682DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009897E6) -------------------------------------------------------- int __cdecl SEH_6831E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989819) -------------------------------------------------------- int __cdecl SEH_6833A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009898A9) -------------------------------------------------------- int __cdecl SEH_683600(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009898E0) -------------------------------------------------------- int __cdecl SEH_683EF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989916) -------------------------------------------------------- int __cdecl SEH_684050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989931) -------------------------------------------------------- LONG __usercall sub_989931@(int a1@) { return sub_918270(*(_DWORD **)(a1 - 16)); } //----- (00989939) -------------------------------------------------------- void __usercall sub_989939(int a1@) { sub_461360((void *)(*(_DWORD *)(a1 - 16) + 276)); } //----- (00989972) -------------------------------------------------------- int __cdecl SEH_684160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989BC4) -------------------------------------------------------- int __cdecl SEH_686650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989BF8) -------------------------------------------------------- int __cdecl SEH_686A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989DC0) -------------------------------------------------------- int __cdecl SEH_686B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00989F95) -------------------------------------------------------- int __cdecl SEH_6876E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A15D) -------------------------------------------------------- int __cdecl SEH_688200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A332) -------------------------------------------------------- int __cdecl SEH_688E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A370) -------------------------------------------------------- int __cdecl SEH_68AED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A3A8) -------------------------------------------------------- int __cdecl SEH_68B6C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A3D6) -------------------------------------------------------- int __cdecl SEH_68C380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A40B) -------------------------------------------------------- int __cdecl SEH_68CCB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A438) -------------------------------------------------------- int __cdecl SEH_68CEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A45B) -------------------------------------------------------- int __cdecl SEH_68CF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A476) -------------------------------------------------------- void __usercall sub_98A476(int a1@) { sub_410C00(*(void **)(a1 - 16)); } //----- (0098A4B7) -------------------------------------------------------- int __cdecl SEH_68D190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A4E5) -------------------------------------------------------- int __cdecl SEH_68D370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A510) -------------------------------------------------------- int __cdecl SEH_68D4C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A538) -------------------------------------------------------- int __cdecl SEH_65AE20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A568) -------------------------------------------------------- int __cdecl SEH_68DD00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A5A0) -------------------------------------------------------- int __cdecl SEH_68DD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A5F1) -------------------------------------------------------- int __cdecl SEH_68DAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A62E) -------------------------------------------------------- int __cdecl SEH_68DF10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A667) -------------------------------------------------------- int __cdecl SEH_68DF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A69D) -------------------------------------------------------- int __cdecl SEH_68E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A6C8) -------------------------------------------------------- int __cdecl SEH_68E340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A6E3) -------------------------------------------------------- void __usercall sub_98A6E3(int a1@) { sub_410C00((void *)(a1 + 8)); } //----- (0098A744) -------------------------------------------------------- int __cdecl SEH_68E530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A7A9) -------------------------------------------------------- int __cdecl SEH_68E760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A7D8) -------------------------------------------------------- int __cdecl SEH_68EC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A81B) -------------------------------------------------------- int __cdecl SEH_691330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A84B) -------------------------------------------------------- int __cdecl SEH_691450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A878) -------------------------------------------------------- int __cdecl SEH_68F200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A89B) -------------------------------------------------------- int __cdecl SEH_68F420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A8CC) -------------------------------------------------------- int __cdecl SEH_68F530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A8FF) -------------------------------------------------------- int __cdecl SEH_68F6A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098A91A) -------------------------------------------------------- void __usercall sub_98A91A(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0098A940) -------------------------------------------------------- LONG __usercall sub_98A940@(int a1@) { _DWORD *v2; // ecx v2 = *(_DWORD **)(a1 - 16); *v2 = &NiAccumulator::`vftable'; return sub_85BA80(v2); } // 9F62D4: using guessed type void *NiAccumulator::`vftable'; //----- (0098A948) -------------------------------------------------------- void __usercall sub_98A948(int a1@) { sub_467570((void *)(*(_DWORD *)(a1 - 16) + 12)); } //----- (0098A9E9) -------------------------------------------------------- int __cdecl SEH_68F9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B143) -------------------------------------------------------- int __cdecl SEH_6926F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B168) -------------------------------------------------------- int __cdecl SEH_692A60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B234) -------------------------------------------------------- int __cdecl SEH_692BC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B266) -------------------------------------------------------- int __cdecl SEH_6934F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B290) -------------------------------------------------------- int __cdecl SEH_6944D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B2D9) -------------------------------------------------------- int __cdecl SEH_694A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B30B) -------------------------------------------------------- int __cdecl SEH_695260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B34B) -------------------------------------------------------- int __cdecl SEH_695330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B37E) -------------------------------------------------------- int __cdecl SEH_695560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B431) -------------------------------------------------------- int __cdecl SEH_695790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B460) -------------------------------------------------------- int __cdecl SEH_697DE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B488) -------------------------------------------------------- int __cdecl SEH_698D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B4B8) -------------------------------------------------------- int __cdecl SEH_698E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B4F6) -------------------------------------------------------- int __cdecl SEH_698560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B542) -------------------------------------------------------- int __cdecl SEH_698960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B568) -------------------------------------------------------- int __cdecl SEH_698CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B598) -------------------------------------------------------- int __cdecl SEH_698F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B5C8) -------------------------------------------------------- int __cdecl SEH_8DBD60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B5FB) -------------------------------------------------------- int __cdecl SEH_699650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B62B) -------------------------------------------------------- int __cdecl SEH_699D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B651) -------------------------------------------------------- int __cdecl SEH_699DC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B674) -------------------------------------------------------- int __cdecl SEH_69B200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B697) -------------------------------------------------------- int __cdecl SEH_69B8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B6C2) -------------------------------------------------------- int __cdecl SEH_69BE40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B6EF) -------------------------------------------------------- int __cdecl SEH_69C170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B8AA) -------------------------------------------------------- int __cdecl SEH_69CDC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B8D0) -------------------------------------------------------- int __cdecl SEH_69E520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B8F3) -------------------------------------------------------- int __cdecl SEH_69E770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B916) -------------------------------------------------------- int __cdecl SEH_69EA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B95B) -------------------------------------------------------- int __cdecl SEH_69EB40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B9A3) -------------------------------------------------------- int __cdecl SEH_6A0880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B9CE) -------------------------------------------------------- int __cdecl SEH_6A09D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098B9FB) -------------------------------------------------------- int __cdecl SEH_6A1C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BA20) -------------------------------------------------------- void __usercall sub_98BA20(int a1@) { sub_4E6E90(*(void **)(a1 - 24)); } //----- (0098BA66) -------------------------------------------------------- int __cdecl SEH_6A2750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BA97) -------------------------------------------------------- int __cdecl SEH_6A2830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BAEA) -------------------------------------------------------- int __cdecl SEH_6A3000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BB4A) -------------------------------------------------------- int __cdecl SEH_6A31F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BBAB) -------------------------------------------------------- int __cdecl SEH_6A33E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BBD4) -------------------------------------------------------- int __cdecl SEH_6A37A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BC0A) -------------------------------------------------------- int __cdecl SEH_6A3A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BC4A) -------------------------------------------------------- int __cdecl SEH_9A3630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BC7A) -------------------------------------------------------- int __cdecl SEH_9A3690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BCCC) -------------------------------------------------------- int __cdecl SEH_6A43F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BD13) -------------------------------------------------------- int __cdecl SEH_6A4570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BE42) -------------------------------------------------------- int __cdecl SEH_6A6830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BE8F) -------------------------------------------------------- int __cdecl SEH_6A6930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BEB5) -------------------------------------------------------- int __cdecl SEH_6A6A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BEE6) -------------------------------------------------------- int __cdecl SEH_6A6BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BF17) -------------------------------------------------------- int __cdecl SEH_6A71F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BF45) -------------------------------------------------------- int __cdecl SEH_6A7330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BF68) -------------------------------------------------------- int __cdecl SEH_6A74C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BFB4) -------------------------------------------------------- int __cdecl SEH_6A8F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098BFF4) -------------------------------------------------------- int __cdecl SEH_6A9020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C018) -------------------------------------------------------- int __cdecl SEH_6A91A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C050) -------------------------------------------------------- int __cdecl SEH_6A9220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C078) -------------------------------------------------------- int __cdecl SEH_6A7910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C09D) -------------------------------------------------------- int __cdecl SEH_6A7C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C1DE) -------------------------------------------------------- int __cdecl SEH_6A7FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C2F8) -------------------------------------------------------- int __cdecl SEH_6A83F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C358) -------------------------------------------------------- int __cdecl SEH_6AA5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C388) -------------------------------------------------------- int __cdecl SEH_6AA7C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C3B8) -------------------------------------------------------- int __cdecl SEH_6A9790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C3EE) -------------------------------------------------------- int __cdecl SEH_6A9AC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C419) -------------------------------------------------------- int __cdecl SEH_6A9C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C43C) -------------------------------------------------------- int __cdecl SEH_6A9D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C46A) -------------------------------------------------------- int __cdecl SEH_6A9ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C485) -------------------------------------------------------- void __usercall sub_98C485(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C490) -------------------------------------------------------- void __usercall sub_98C490(int a1@) { sub_410C00((void *)(a1 + 16)); } //----- (0098C4B3) -------------------------------------------------------- void __usercall sub_98C4B3(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C4BE) -------------------------------------------------------- void __usercall sub_98C4BE(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (0098C4C6) -------------------------------------------------------- void __usercall sub_98C4C6(int a1@) { sub_410C00((void *)(a1 + 8)); } //----- (0098C4F8) -------------------------------------------------------- int __cdecl SEH_96AC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C530) -------------------------------------------------------- int __cdecl SEH_6AA920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C558) -------------------------------------------------------- int __cdecl SEH_6AD450(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C588) -------------------------------------------------------- int __cdecl SEH_6AD560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C5BB) -------------------------------------------------------- int __cdecl SEH_6AAFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C5EE) -------------------------------------------------------- int __cdecl SEH_6AB660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C61F) -------------------------------------------------------- int __cdecl SEH_6AB760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C653) -------------------------------------------------------- int __cdecl SEH_6ABF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C671) -------------------------------------------------------- void __usercall sub_98C671(int a1@) { operator delete(*(void **)(a1 + 12)); } //----- (0098C6BA) -------------------------------------------------------- int __cdecl SEH_6ACAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C7C0) -------------------------------------------------------- int __cdecl SEH_6AD8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C7E8) -------------------------------------------------------- int __cdecl SEH_96C200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C810) -------------------------------------------------------- int __cdecl SEH_6ADA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C830) -------------------------------------------------------- void __usercall sub_98C830(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C861) -------------------------------------------------------- int __cdecl SEH_6ADD80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C87C) -------------------------------------------------------- void __usercall sub_98C87C(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C8A2) -------------------------------------------------------- void __usercall sub_98C8A2(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C8C8) -------------------------------------------------------- void __usercall sub_98C8C8(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098C8F9) -------------------------------------------------------- int __cdecl SEH_6AE000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C927) -------------------------------------------------------- int __cdecl SEH_6AE0A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C955) -------------------------------------------------------- int __cdecl SEH_6AE1D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C97B) -------------------------------------------------------- int __cdecl SEH_6AE300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C9A3) -------------------------------------------------------- void __usercall sub_98C9A3(int a1@) { operator delete(*(void **)(a1 + 20)); } //----- (0098C9D4) -------------------------------------------------------- int __cdecl SEH_6AE840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098C9FC) -------------------------------------------------------- void __usercall sub_98C9FC(int a1@) { sub_410C00((void *)(a1 + 8)); } //----- (0098CA04) -------------------------------------------------------- void __usercall sub_98CA04(int a1@) { operator delete(*(void **)(a1 - 20)); } //----- (0098CA35) -------------------------------------------------------- int __cdecl SEH_6AED40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CA68) -------------------------------------------------------- int __cdecl SEH_6AF040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CA83) -------------------------------------------------------- void __usercall sub_98CA83(int a1@) { operator delete(*(void **)(a1 + 8)); } //----- (0098CAA9) -------------------------------------------------------- void __usercall sub_98CAA9(int a1@) { sub_410C00((void *)(a1 + 8)); } //----- (0098CAB1) -------------------------------------------------------- void __usercall sub_98CAB1(int a1@) { operator delete(*(void **)(a1 - 20)); } //----- (0098CAE2) -------------------------------------------------------- int __cdecl SEH_6AF370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CB08) -------------------------------------------------------- int __cdecl SEH_6AF460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CB2E) -------------------------------------------------------- int __cdecl SEH_6AF580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CB5C) -------------------------------------------------------- int __cdecl SEH_6AF730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CB82) -------------------------------------------------------- int __cdecl SEH_6AF8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CBA8) -------------------------------------------------------- int __cdecl SEH_6AFA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CBC3) -------------------------------------------------------- void __usercall sub_98CBC3(int a1@) { operator delete(*(void **)(a1 - 204)); } //----- (0098CC08) -------------------------------------------------------- int __cdecl SEH_6AFEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CC4C) -------------------------------------------------------- int __cdecl SEH_6AFFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CC7A) -------------------------------------------------------- int __cdecl SEH_6B00A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CDEC) -------------------------------------------------------- int __cdecl SEH_6B0110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CE20) -------------------------------------------------------- LONG __usercall sub_98CE20@(int a1@) { return sub_6A7FF0(*(_DWORD **)(a1 - 16)); } //----- (0098CE43) -------------------------------------------------------- LONG __usercall sub_98CE43@(int a1@) { return sub_6A7FF0(*(_DWORD **)(a1 - 16)); } //----- (0098CE8E) -------------------------------------------------------- int __cdecl SEH_6B0A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CEB0) -------------------------------------------------------- LONG __usercall sub_98CEB0@(int a1@) { return sub_6A7FF0(*(_DWORD **)(a1 - 16)); } //----- (0098CEDE) -------------------------------------------------------- int __cdecl SEH_6B0E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CF38) -------------------------------------------------------- int __cdecl SEH_6B1020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CF53) -------------------------------------------------------- LONG __usercall sub_98CF53@(int a1@) { return sub_6A7FF0(*(_DWORD **)(a1 - 16)); } //----- (0098CF96) -------------------------------------------------------- int __cdecl SEH_6B1330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CFBC) -------------------------------------------------------- int __cdecl SEH_6B1400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098CFF6) -------------------------------------------------------- int __cdecl SEH_6B1950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D03F) -------------------------------------------------------- int __cdecl SEH_6B1A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D062) -------------------------------------------------------- int __cdecl SEH_6B1D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D18C) -------------------------------------------------------- int __cdecl SEH_6B2470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D1BC) -------------------------------------------------------- int __cdecl SEH_6B26A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D1E2) -------------------------------------------------------- int __cdecl SEH_6B2790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D208) -------------------------------------------------------- int __cdecl SEH_6B2880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D22E) -------------------------------------------------------- int __cdecl SEH_6B2970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D288) -------------------------------------------------------- int __cdecl SEH_6B2E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D3D5) -------------------------------------------------------- int __cdecl SEH_6B37C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D3F8) -------------------------------------------------------- int __cdecl SEH_6B3B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D430) -------------------------------------------------------- int __cdecl SEH_6B3CA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D46E) -------------------------------------------------------- int __cdecl SEH_6B40A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D4E0) -------------------------------------------------------- int __cdecl SEH_6B4180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D53E) -------------------------------------------------------- int __cdecl SEH_6B4AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D585) -------------------------------------------------------- int __cdecl SEH_6B4D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D5A8) -------------------------------------------------------- int __cdecl SEH_6B5140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D5D0) -------------------------------------------------------- int __cdecl SEH_6B57D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D5EB) -------------------------------------------------------- int __cdecl SEH_6B5870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D606) -------------------------------------------------------- int __cdecl SEH_6B58F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D621) -------------------------------------------------------- int __cdecl SEH_6B59E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D63C) -------------------------------------------------------- int __cdecl sub_98D63C(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D657) -------------------------------------------------------- int __cdecl sub_98D657(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D6AA) -------------------------------------------------------- int __cdecl SEH_6B63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D70A) -------------------------------------------------------- int __cdecl SEH_6B65C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D73D) -------------------------------------------------------- int __cdecl SEH_6B6790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D760) -------------------------------------------------------- int __cdecl SEH_6B6870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D783) -------------------------------------------------------- int __cdecl SEH_6B6930(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D7A9) -------------------------------------------------------- int __cdecl SEH_6B6DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D7D7) -------------------------------------------------------- int __cdecl SEH_6B6E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D7FA) -------------------------------------------------------- int __cdecl SEH_6B6F50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D81D) -------------------------------------------------------- int __cdecl SEH_6B6FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D840) -------------------------------------------------------- int __cdecl SEH_6B70F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D863) -------------------------------------------------------- int __cdecl SEH_6B7260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D88E) -------------------------------------------------------- int __cdecl SEH_6B73C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D8B9) -------------------------------------------------------- int __cdecl SEH_6B7500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D8DC) -------------------------------------------------------- int __cdecl SEH_6B7720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D908) -------------------------------------------------------- int __cdecl SEH_6B7990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D938) -------------------------------------------------------- int __cdecl SEH_6B7A20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D979) -------------------------------------------------------- int __cdecl SEH_6B7B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D9AA) -------------------------------------------------------- int __cdecl SEH_9A37B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098D9D8) -------------------------------------------------------- int __cdecl SEH_6B99E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DA08) -------------------------------------------------------- int __cdecl SEH_6B9C00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DA38) -------------------------------------------------------- int __cdecl SEH_6B9B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DAA9) -------------------------------------------------------- int __cdecl SEH_6B9D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DAD8) -------------------------------------------------------- int __cdecl SEH_6B8BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DB2F) -------------------------------------------------------- int __cdecl SEH_6B8E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DB52) -------------------------------------------------------- int __cdecl SEH_6B8FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DB7F) -------------------------------------------------------- int __cdecl SEH_6B9200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DBB8) -------------------------------------------------------- int __cdecl SEH_6BB620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DBE8) -------------------------------------------------------- int __cdecl SEH_6B9C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DC31) -------------------------------------------------------- int __cdecl SEH_6BB7C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DC60) -------------------------------------------------------- int __cdecl SEH_6BB960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DCC1) -------------------------------------------------------- void __usercall sub_98DCC1(int a1@) { sub_410C00((void *)(*(_DWORD *)(a1 - 16) + 40)); } //----- (0098DCCC) -------------------------------------------------------- void __usercall sub_98DCCC(int a1@) { sub_410C00((void *)(*(_DWORD *)(a1 - 16) + 44)); } //----- (0098DCD7) -------------------------------------------------------- int __usercall sub_98DCD7@(int a1@) { return sub_6BB8E0((_DWORD *)(*(_DWORD *)(a1 - 16) + 72)); } //----- (0098DD05) -------------------------------------------------------- int __cdecl SEH_6BACD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DD6D) -------------------------------------------------------- int __cdecl SEH_6BB140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DD9E) -------------------------------------------------------- int __cdecl SEH_6BB380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DE02) -------------------------------------------------------- int __cdecl SEH_6BB9F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DE28) -------------------------------------------------------- int __cdecl SEH_6BBB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DE58) -------------------------------------------------------- int __cdecl SEH_6BBBE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DE93) -------------------------------------------------------- int __cdecl SEH_6BBD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DEF8) -------------------------------------------------------- int __cdecl SEH_6BDF00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DF2B) -------------------------------------------------------- int __cdecl SEH_6BD4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DF46) -------------------------------------------------------- void __usercall sub_98DF46(int a1@) { sub_4E6E90((void *)(a1 - 32)); } //----- (0098DF80) -------------------------------------------------------- int __cdecl SEH_6BE010(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098DFD8) -------------------------------------------------------- int __cdecl SEH_6C05E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E008) -------------------------------------------------------- int __cdecl SEH_6C0820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E040) -------------------------------------------------------- int __cdecl SEH_6C08B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E070) -------------------------------------------------------- int __cdecl SEH_6BF170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E093) -------------------------------------------------------- int __cdecl SEH_6BF570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E0B6) -------------------------------------------------------- int __cdecl SEH_6BF780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E0E1) -------------------------------------------------------- int __cdecl SEH_6BFD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E13A) -------------------------------------------------------- int __cdecl SEH_9A3A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E176) -------------------------------------------------------- int __cdecl SEH_6C2770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E201) -------------------------------------------------------- int __cdecl SEH_6C2BA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E224) -------------------------------------------------------- int __cdecl SEH_6C2D50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E25D) -------------------------------------------------------- int __cdecl SEH_6C2E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E318) -------------------------------------------------------- int __cdecl SEH_6C7F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E34B) -------------------------------------------------------- int __cdecl SEH_6C81E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E37B) -------------------------------------------------------- int __cdecl SEH_6C8790(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E3E6) -------------------------------------------------------- int __cdecl SEH_6C9050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E416) -------------------------------------------------------- int __cdecl SEH_6C9780(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E4A1) -------------------------------------------------------- int __cdecl SEH_6C9900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E520) -------------------------------------------------------- int __cdecl SEH_6C9A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E546) -------------------------------------------------------- int __cdecl SEH_6C9C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E570) -------------------------------------------------------- int __cdecl SEH_6CB400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E590) -------------------------------------------------------- void __usercall sub_98E590(int a1@) { sub_636A10((void *)(a1 - 840)); } //----- (0098E5D8) -------------------------------------------------------- int __cdecl SEH_6CCA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E60E) -------------------------------------------------------- int __cdecl SEH_6CCAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E651) -------------------------------------------------------- int __cdecl SEH_6CCF70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E67B) -------------------------------------------------------- int __cdecl SEH_6CD340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E6CD) -------------------------------------------------------- int __cdecl SEH_6CD770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E6F8) -------------------------------------------------------- int __cdecl SEH_6CDF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E732) -------------------------------------------------------- int __cdecl SEH_9A3C20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E758) -------------------------------------------------------- int __cdecl SEH_6D0440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E788) -------------------------------------------------------- int __cdecl SEH_6D04D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E7B8) -------------------------------------------------------- int __cdecl SEH_6D05E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E7F0) -------------------------------------------------------- int __cdecl SEH_6D0760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E820) -------------------------------------------------------- int __cdecl SEH_6D0840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E850) -------------------------------------------------------- int __cdecl SEH_6D08C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E878) -------------------------------------------------------- int __cdecl SEH_6D09E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E8B0) -------------------------------------------------------- int __cdecl SEH_6D0B80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E903) -------------------------------------------------------- int __cdecl SEH_6CEEC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E936) -------------------------------------------------------- int __cdecl SEH_6CF060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E959) -------------------------------------------------------- int __cdecl SEH_6CF4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E996) -------------------------------------------------------- int __cdecl SEH_6CF860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E9C3) -------------------------------------------------------- int __cdecl SEH_6CFC80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098E9F0) -------------------------------------------------------- int __cdecl SEH_6CFDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EA1D) -------------------------------------------------------- int __cdecl SEH_6CFEB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EA4A) -------------------------------------------------------- int __cdecl SEH_6D0060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EA77) -------------------------------------------------------- int __cdecl SEH_6D0140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EAE3) -------------------------------------------------------- int __cdecl SEH_6D1280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EB08) -------------------------------------------------------- int __cdecl SEH_6D1370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EB3B) -------------------------------------------------------- int __cdecl SEH_6D0F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EB68) -------------------------------------------------------- int __cdecl SEH_6D1440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EB9B) -------------------------------------------------------- int __cdecl SEH_6D14F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EBC6) -------------------------------------------------------- int __cdecl SEH_6D1570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EBF0) -------------------------------------------------------- LONG __usercall sub_98EBF0@(int a1@) { return sub_49FA00(*(_DWORD **)(a1 - 16)); } //----- (0098EC13) -------------------------------------------------------- LONG __usercall sub_98EC13@(int a1@) { return sub_49FA00(*(_DWORD **)(a1 - 16)); } //----- (0098EC49) -------------------------------------------------------- int __cdecl SEH_6D18B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EC78) -------------------------------------------------------- int __cdecl SEH_6D1E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098ECA5) -------------------------------------------------------- int __cdecl SEH_6D2630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098ECE0) -------------------------------------------------------- int __cdecl SEH_6D2E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098ED08) -------------------------------------------------------- int __cdecl SEH_6D19A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098ED38) -------------------------------------------------------- int __cdecl SEH_6D9E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098ED6B) -------------------------------------------------------- int __cdecl SEH_6D3940(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EDDF) -------------------------------------------------------- int __cdecl SEH_6D6D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EE15) -------------------------------------------------------- int __cdecl SEH_6D8040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EEAA) -------------------------------------------------------- int __cdecl SEH_6D8590(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EED0) -------------------------------------------------------- int __cdecl SEH_6D8870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EF00) -------------------------------------------------------- int __cdecl SEH_6DA150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EF62) -------------------------------------------------------- int __cdecl SEH_6DA230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EF88) -------------------------------------------------------- int __cdecl SEH_6DA390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098EFB8) -------------------------------------------------------- int __cdecl SEH_6DA480(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F04F) -------------------------------------------------------- int __cdecl SEH_6DA5E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F113) -------------------------------------------------------- int __cdecl SEH_6DA9A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F143) -------------------------------------------------------- int __cdecl SEH_6DACE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F170) -------------------------------------------------------- int __cdecl SEH_6DAED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F19D) -------------------------------------------------------- int __cdecl SEH_6DB040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F1D0) -------------------------------------------------------- int __cdecl SEH_6DB6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F1F3) -------------------------------------------------------- int __cdecl SEH_6DBAD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F219) -------------------------------------------------------- int __cdecl SEH_6DBBC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F249) -------------------------------------------------------- int __cdecl SEH_6DC170(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F277) -------------------------------------------------------- int __cdecl SEH_6DC610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F29D) -------------------------------------------------------- int __cdecl SEH_6DC870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F2C3) -------------------------------------------------------- int __cdecl SEH_6DC9E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F2DE) -------------------------------------------------------- void __usercall sub_98F2DE(int a1@) { operator delete(*(void **)(a1 - 48)); } //----- (0098F2E9) -------------------------------------------------------- void __usercall sub_98F2E9(int a1@) { sub_410C00((void *)(a1 - 88)); } //----- (0098F2F1) -------------------------------------------------------- void __usercall sub_98F2F1(int a1@) { operator delete(*(void **)(a1 - 48)); } //----- (0098F2FC) -------------------------------------------------------- void __usercall sub_98F2FC(int a1@) { sub_410C00((void *)(a1 - 92)); } //----- (0098F304) -------------------------------------------------------- void __usercall sub_98F304(int a1@) { operator delete(*(void **)(a1 - 56)); } //----- (0098F30F) -------------------------------------------------------- void __usercall sub_98F30F(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098F344) -------------------------------------------------------- int __cdecl SEH_6DCFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F37C) -------------------------------------------------------- int __cdecl SEH_6DD410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F3AC) -------------------------------------------------------- int __cdecl SEH_6DDAA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F3EC) -------------------------------------------------------- int __cdecl SEH_6DDC70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F429) -------------------------------------------------------- int __cdecl SEH_6DDE10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F456) -------------------------------------------------------- int __cdecl SEH_6DE060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F481) -------------------------------------------------------- int __cdecl SEH_6DE2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F4A4) -------------------------------------------------------- int __cdecl SEH_6DE850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F4EC) -------------------------------------------------------- int __cdecl SEH_6DEC00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F519) -------------------------------------------------------- int __cdecl SEH_6DF1B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F54C) -------------------------------------------------------- int __cdecl SEH_6DF2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F61D) -------------------------------------------------------- int __cdecl SEH_6DF580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F656) -------------------------------------------------------- int __cdecl SEH_6DF830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F68F) -------------------------------------------------------- int __cdecl SEH_6DFF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F6D1) -------------------------------------------------------- int __cdecl SEH_6E08E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F6F0) -------------------------------------------------------- void __usercall sub_98F6F0(int a1@) { sub_4E6690(*(void ***)(a1 - 16)); } //----- (0098F72A) -------------------------------------------------------- int __cdecl SEH_9A4050(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F758) -------------------------------------------------------- int __cdecl SEH_6E25A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F78D) -------------------------------------------------------- int __cdecl SEH_6E2D40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F7D3) -------------------------------------------------------- int __cdecl SEH_6E2DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F821) -------------------------------------------------------- int __cdecl SEH_6E33B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F87C) -------------------------------------------------------- int __cdecl SEH_6E3500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F8B8) -------------------------------------------------------- int __cdecl SEH_6E39F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F8DD) -------------------------------------------------------- void __usercall sub_98F8DD(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098F8E5) -------------------------------------------------------- void __usercall sub_98F8E5(int a1@) { sub_410C00((void *)(a1 - 56)); } //----- (0098F8ED) -------------------------------------------------------- void __userpurge sub_98F8ED(int a1@, int a2, int a3) { int v3; // esi v3 = *(_DWORD *)(a1 - 64 + 4); if ( v3 && !InterlockedDecrement((volatile LONG *)(v3 + 4)) ) { if ( v3 ) (**(void (__thiscall ***)(int, signed int))v3)(v3, 1); } } //----- (0098F93D) -------------------------------------------------------- int __cdecl SEH_6E4030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098F978) -------------------------------------------------------- int __cdecl SEH_6E4830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FA2A) -------------------------------------------------------- int __cdecl SEH_6E4970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FA68) -------------------------------------------------------- int __cdecl SEH_6E5370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FA9D) -------------------------------------------------------- int __cdecl SEH_6E5460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FAD0) -------------------------------------------------------- LONG __usercall sub_98FAD0@(int a1@) { return sub_533C20(*(_DWORD **)(a1 - 16)); } //----- (0098FB09) -------------------------------------------------------- int __cdecl SEH_6E6840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FB3F) -------------------------------------------------------- int __cdecl SEH_6E6B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FB9A) -------------------------------------------------------- int __cdecl SEH_6E6CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FBC8) -------------------------------------------------------- int __cdecl SEH_6E6E30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FBEB) -------------------------------------------------------- int __cdecl SEH_6E6F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FCA8) -------------------------------------------------------- int __cdecl SEH_6E8110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FCE0) -------------------------------------------------------- int __cdecl SEH_6E8FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FD13) -------------------------------------------------------- int __cdecl SEH_6E9520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FD36) -------------------------------------------------------- int __cdecl SEH_6E9650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FD90) -------------------------------------------------------- void __usercall sub_98FD90(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (0098FD98) -------------------------------------------------------- void __usercall sub_98FD98(int a1@) { sub_410C00((void *)(a1 - 32)); } //----- (0098FDBB) -------------------------------------------------------- void __usercall sub_98FDBB(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (0098FDC6) -------------------------------------------------------- void __usercall sub_98FDC6(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0098FDE9) -------------------------------------------------------- void __usercall sub_98FDE9(int a1@) { sub_636A10((void *)(a1 - 44)); } //----- (0098FE33) -------------------------------------------------------- int __cdecl SEH_6EABC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FE6E) -------------------------------------------------------- int __cdecl SEH_6EACF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FF60) -------------------------------------------------------- LONG __usercall sub_98FF60@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0098FF8B) -------------------------------------------------------- int __cdecl SEH_6EC2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FFB9) -------------------------------------------------------- int __cdecl SEH_6EC6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0098FFE0) -------------------------------------------------------- LONG __usercall sub_98FFE0@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0099000B) -------------------------------------------------------- int __cdecl SEH_6EC9B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990026) -------------------------------------------------------- LONG __usercall sub_990026@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00990064) -------------------------------------------------------- int __cdecl SEH_6ED7F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990088) -------------------------------------------------------- int __cdecl SEH_6EDA60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009900B6) -------------------------------------------------------- int __cdecl SEH_6EDC20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009900E8) -------------------------------------------------------- int __cdecl SEH_6EE150(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990116) -------------------------------------------------------- int __cdecl SEH_6EE3A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990148) -------------------------------------------------------- int __cdecl SEH_6EE830(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990175) -------------------------------------------------------- int __cdecl SEH_6EEA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009901A2) -------------------------------------------------------- int __cdecl SEH_6EEBD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009901D7) -------------------------------------------------------- int __cdecl SEH_6EEF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009901FA) -------------------------------------------------------- int __cdecl SEH_6EF040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990228) -------------------------------------------------------- int __cdecl SEH_6EF120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990308) -------------------------------------------------------- int __cdecl SEH_6F01B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990336) -------------------------------------------------------- int __cdecl SEH_6F0F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099038E) -------------------------------------------------------- int __cdecl SEH_6F15A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009903B1) -------------------------------------------------------- int __cdecl SEH_6F1680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009903DF) -------------------------------------------------------- int __cdecl SEH_6F1720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990488) -------------------------------------------------------- int __cdecl SEH_6F3350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009904BA) -------------------------------------------------------- int __cdecl SEH_9A4260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990501) -------------------------------------------------------- int __cdecl SEH_6F3770(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099053D) -------------------------------------------------------- int __cdecl SEH_6F3820(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009905B0) -------------------------------------------------------- int __usercall sub_9905B0@(int a1@) { return nullsub_42(a1 - 4148); } // 6F7FA0: using guessed type int __thiscall nullsub_42(_DWORD); //----- (0099060A) -------------------------------------------------------- int __cdecl SEH_6F45C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990625) -------------------------------------------------------- int __usercall sub_990625@(int a1@) { return sub_6F49D0(*(char **)(a1 - 16)); } //----- (0099062D) -------------------------------------------------------- void __usercall sub_99062D(int a1@) { void *v1; // ecx _DWORD *v2; // ecx v2 = (_DWORD *)(*(_DWORD *)(a1 - 16) + 156); *v2 = &List::`vftable'; v1 = (void *)v2[2]; if ( v1 ) operator delete[](v1); } // 9FC90C: using guessed type void *List::`vftable'; //----- (0099063B) -------------------------------------------------------- int __usercall sub_99063B@(int a1@) { return nullsub_41(*(_DWORD *)(a1 - 16)); } // 6F7EF0: using guessed type int __thiscall nullsub_41(_DWORD); //----- (00990643) -------------------------------------------------------- int __usercall sub_990643@(int a1@) { return nullsub_36(*(_DWORD *)(a1 - 16) + 12); } // 6F7D80: using guessed type int __thiscall nullsub_36(_DWORD); //----- (0099064E) -------------------------------------------------------- int __usercall sub_99064E@(int a1@) { return nullsub_38(*(_DWORD *)(a1 - 16) + 48); } // 6F7E30: using guessed type int __thiscall nullsub_38(_DWORD); //----- (00990659) -------------------------------------------------------- int __usercall sub_990659@(int a1@) { return nullsub_39(*(_DWORD *)(a1 - 16) + 116); } // 6F7E80: using guessed type int __thiscall nullsub_39(_DWORD); //----- (00990664) -------------------------------------------------------- int __usercall sub_990664@(int a1@) { return nullsub_40(*(_DWORD *)(a1 - 16) + 117); } // 6F7EB0: using guessed type int __thiscall nullsub_40(_DWORD); //----- (009906AE) -------------------------------------------------------- int __cdecl SEH_6F4750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009906C9) -------------------------------------------------------- int __usercall sub_9906C9@(int a1@) { return nullsub_41(*(_DWORD *)(a1 - 20)); } // 6F7EF0: using guessed type int __thiscall nullsub_41(_DWORD); //----- (009906D1) -------------------------------------------------------- int __usercall sub_9906D1@(int a1@) { return nullsub_36(*(_DWORD *)(a1 - 20) + 12); } // 6F7D80: using guessed type int __thiscall nullsub_36(_DWORD); //----- (009906DC) -------------------------------------------------------- int __usercall sub_9906DC@(int a1@) { return nullsub_38(*(_DWORD *)(a1 - 20) + 48); } // 6F7E30: using guessed type int __thiscall nullsub_38(_DWORD); //----- (009906E7) -------------------------------------------------------- int __usercall sub_9906E7@(int a1@) { return nullsub_39(*(_DWORD *)(a1 - 20) + 116); } // 6F7E80: using guessed type int __thiscall nullsub_39(_DWORD); //----- (009906F2) -------------------------------------------------------- int __usercall sub_9906F2@(int a1@) { return nullsub_40(*(_DWORD *)(a1 - 20) + 117); } // 6F7EB0: using guessed type int __thiscall nullsub_40(_DWORD); //----- (009906FD) -------------------------------------------------------- int __usercall sub_9906FD@(int a1@) { return sub_6F49D0(*(char **)(a1 - 20)); } //----- (00990705) -------------------------------------------------------- void __usercall sub_990705(int a1@) { void *v1; // ecx _DWORD *v2; // ecx v2 = (_DWORD *)(*(_DWORD *)(a1 - 20) + 156); *v2 = &List::`vftable'; v1 = (void *)v2[2]; if ( v1 ) operator delete[](v1); } // 9FC90C: using guessed type void *List::`vftable'; //----- (00990738) -------------------------------------------------------- int __cdecl SEH_6F4EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990768) -------------------------------------------------------- int __cdecl SEH_6F5030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990798) -------------------------------------------------------- int __cdecl SEH_6F5620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009907C5) -------------------------------------------------------- int __cdecl SEH_6F59A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009907FD) -------------------------------------------------------- int __cdecl SEH_6F5E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099082A) -------------------------------------------------------- int __cdecl SEH_6F5F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099084D) -------------------------------------------------------- int __cdecl SEH_6F5FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990882) -------------------------------------------------------- int __cdecl SEH_6F60D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009908A7) -------------------------------------------------------- void __usercall sub_9908A7(int a1@) { *(_DWORD *)(a1 - 24) = &ListIteratorDefault::`vftable'; } // 9FC91C: using guessed type void *ListIteratorDefault::`vftable'; //----- (009908D2) -------------------------------------------------------- int __cdecl SEH_6F6240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009908FF) -------------------------------------------------------- int __cdecl SEH_6F62F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990924) -------------------------------------------------------- void __userpurge sub_990924(int a1@, int a2, int a3, int a4, int a5, int a6, int a7) { *(_DWORD *)(a1 - 44) = &ListIteratorDefault::`vftable'; } // 9FC924: using guessed type void *ListIteratorDefault::`vftable'; //----- (0099092C) -------------------------------------------------------- void __usercall sub_99092C(int a1@) { *(_DWORD *)(a1 - 56) = &ListIteratorDefault::`vftable'; } // 9FC91C: using guessed type void *ListIteratorDefault::`vftable'; //----- (00990961) -------------------------------------------------------- int __cdecl SEH_6F6470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990986) -------------------------------------------------------- void __userpurge sub_990986(int a1@, int a2, int a3, int a4, int a5, int a6, int a7) { *(_DWORD *)(a1 - 44) = &ListIteratorDefault::`vftable'; } // 9FC924: using guessed type void *ListIteratorDefault::`vftable'; //----- (009909BB) -------------------------------------------------------- int __cdecl SEH_6F65F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009909E0) -------------------------------------------------------- void __userpurge sub_9909E0(int a1@, int a2, int a3, int a4, int a5, int a6, int a7) { *(_DWORD *)(a1 - 44) = &ListIteratorDefault::`vftable'; } // 9FC924: using guessed type void *ListIteratorDefault::`vftable'; //----- (00990A15) -------------------------------------------------------- int __cdecl SEH_6F67B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990A3A) -------------------------------------------------------- void __usercall sub_990A3A(int a1@) { *(_DWORD *)(a1 - 48) = &ListIteratorDefault::`vftable'; } // 9FC91C: using guessed type void *ListIteratorDefault::`vftable'; //----- (00990A6F) -------------------------------------------------------- int __cdecl SEH_6F6990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990A92) -------------------------------------------------------- int __cdecl SEH_6F6AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990AB7) -------------------------------------------------------- void __userpurge sub_990AB7(int a1@, int a2, int a3, int a4, int a5, int a6, int a7) { *(_DWORD *)(a1 - 60) = &ListIteratorDefault::`vftable'; } // 9FC924: using guessed type void *ListIteratorDefault::`vftable'; //----- (00990AE4) -------------------------------------------------------- void __userpurge sub_990AE4(int a1@, int a2, int a3, int a4, int a5, int a6, int a7) { *(_DWORD *)(a1 - 44) = &ListIteratorDefault::`vftable'; } // 9FC924: using guessed type void *ListIteratorDefault::`vftable'; //----- (00990B21) -------------------------------------------------------- int __cdecl SEH_6F6EE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990B5B) -------------------------------------------------------- int __cdecl SEH_6F7040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990B88) -------------------------------------------------------- int __cdecl SEH_6F8900(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990BB6) -------------------------------------------------------- int __cdecl SEH_6F9580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990BE8) -------------------------------------------------------- int __cdecl SEH_6F9720(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990C41) -------------------------------------------------------- int __cdecl SEH_6FB090(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990C60) -------------------------------------------------------- LONG __usercall sub_990C60@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00990C8B) -------------------------------------------------------- int __cdecl SEH_6FB310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990CB9) -------------------------------------------------------- int __cdecl SEH_6FBA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990CF6) -------------------------------------------------------- int __cdecl SEH_6FBDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990D19) -------------------------------------------------------- int __cdecl SEH_6FBE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990D47) -------------------------------------------------------- int __cdecl SEH_6FC6D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990D86) -------------------------------------------------------- int __cdecl SEH_6FC8E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990DA1) -------------------------------------------------------- LONG __usercall sub_990DA1@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (00990DCC) -------------------------------------------------------- int __cdecl SEH_6FCA10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990DFA) -------------------------------------------------------- int __cdecl SEH_6FD140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990E28) -------------------------------------------------------- int __cdecl SEH_55EDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990E5B) -------------------------------------------------------- int __cdecl SEH_6FDBE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990E88) -------------------------------------------------------- int __cdecl SEH_6FE8A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990EB8) -------------------------------------------------------- int __cdecl SEH_6FEB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990EE8) -------------------------------------------------------- int __cdecl SEH_6FED10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00990F10) -------------------------------------------------------- void __usercall sub_990F10(int a1@) { sub_410C00((void *)(a1 + 8)); } //----- (00990F43) -------------------------------------------------------- int __cdecl SEH_6FDEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991018) -------------------------------------------------------- int __cdecl SEH_6FE020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991051) -------------------------------------------------------- int __cdecl SEH_6FEE70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991078) -------------------------------------------------------- int __cdecl SEH_6FEF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009910BB) -------------------------------------------------------- int __cdecl SEH_6FF020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009910E0) -------------------------------------------------------- int __cdecl SEH_6FF260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991103) -------------------------------------------------------- int __cdecl SEH_6FF390(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991126) -------------------------------------------------------- int __cdecl SEH_6FF470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991158) -------------------------------------------------------- int __cdecl SEH_672D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991193) -------------------------------------------------------- int __cdecl SEH_6FFC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991230) -------------------------------------------------------- LONG __usercall sub_991230@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00991269) -------------------------------------------------------- int __cdecl SEH_701800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099129F) -------------------------------------------------------- int __cdecl SEH_701C40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009912CD) -------------------------------------------------------- int __cdecl SEH_701DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099131B) -------------------------------------------------------- int __cdecl SEH_702D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991348) -------------------------------------------------------- int __cdecl SEH_7033F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991376) -------------------------------------------------------- int __cdecl SEH_703E20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099139C) -------------------------------------------------------- int __cdecl SEH_703F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009913FE) -------------------------------------------------------- int __cdecl SEH_705980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991428) -------------------------------------------------------- int __cdecl SEH_705B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991456) -------------------------------------------------------- int __cdecl SEH_7060A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991493) -------------------------------------------------------- int __cdecl SEH_706A90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991538) -------------------------------------------------------- int __cdecl SEH_70B400(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991570) -------------------------------------------------------- int __cdecl SEH_70B060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991636) -------------------------------------------------------- int __cdecl SEH_7084A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991666) -------------------------------------------------------- int __cdecl SEH_7089F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991694) -------------------------------------------------------- int __cdecl SEH_708B00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009916B7) -------------------------------------------------------- int __cdecl SEH_708E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009917BD) -------------------------------------------------------- int __cdecl SEH_70A160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009917F0) -------------------------------------------------------- LONG __usercall sub_9917F0@(int a1@) { return sub_5D5650(*(_DWORD **)(a1 - 16)); } //----- (00991813) -------------------------------------------------------- LONG __usercall sub_991813@(int a1@) { return sub_8F10F0(*(_DWORD **)(a1 - 16)); } //----- (0099181B) -------------------------------------------------------- void __usercall sub_99181B(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 524) = &PgWinDrop::`vftable'; } // 9ACB58: using guessed type void *PgWinDrop::`vftable'; //----- (00991829) -------------------------------------------------------- void __usercall sub_991829(int a1@) { *(_DWORD *)(*(_DWORD *)(a1 - 16) + 536) = &DropContents::`vftable'; } // 9ACB60: using guessed type void *DropContents::`vftable'; //----- (00991865) -------------------------------------------------------- int __cdecl SEH_70CF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099189B) -------------------------------------------------------- int __cdecl SEH_70D080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009918C9) -------------------------------------------------------- int __cdecl SEH_70D1E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009918EC) -------------------------------------------------------- int __cdecl SEH_70D310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991944) -------------------------------------------------------- int __cdecl SEH_70E0E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099196B) -------------------------------------------------------- int __cdecl SEH_70F470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009919E9) -------------------------------------------------------- int __cdecl SEH_7100B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991A0C) -------------------------------------------------------- int __cdecl SEH_7103B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991A3A) -------------------------------------------------------- int __cdecl SEH_710510(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991B23) -------------------------------------------------------- int __cdecl SEH_714A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991B40) -------------------------------------------------------- LONG __usercall sub_991B40@(int a1@) { return sub_49FA00(*(_DWORD **)(a1 - 16)); } //----- (00991B63) -------------------------------------------------------- LONG __usercall sub_991B63@(int a1@) { return sub_49FA00(*(_DWORD **)(a1 - 16)); } //----- (00991B99) -------------------------------------------------------- int __cdecl SEH_714FB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991BCB) -------------------------------------------------------- int __cdecl SEH_715140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991C07) -------------------------------------------------------- int __cdecl SEH_717630(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991C43) -------------------------------------------------------- int __cdecl SEH_717710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991C69) -------------------------------------------------------- int __cdecl SEH_7177E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991CBE) -------------------------------------------------------- int __cdecl SEH_717FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991CE8) -------------------------------------------------------- int __cdecl SEH_718060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991D18) -------------------------------------------------------- int __cdecl SEH_7188D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991D40) -------------------------------------------------------- int __cdecl SEH_71A6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991D60) -------------------------------------------------------- int __cdecl SEH_71A800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991D8B) -------------------------------------------------------- int __cdecl SEH_71AA40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991DBB) -------------------------------------------------------- int __cdecl SEH_71A060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991DEA) -------------------------------------------------------- int __cdecl SEH_9A44F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00991ED8) -------------------------------------------------------- int __cdecl SEH_71ADB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992007) -------------------------------------------------------- int __cdecl SEH_71B350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009920FC) -------------------------------------------------------- int __cdecl SEH_71B980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992179) -------------------------------------------------------- int __cdecl SEH_71C1A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009921F6) -------------------------------------------------------- int __cdecl SEH_71C2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009922BD) -------------------------------------------------------- int __cdecl SEH_71C560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009922D8) -------------------------------------------------------- void __usercall sub_9922D8(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (009922E0) -------------------------------------------------------- void __usercall sub_9922E0(int a1@) { sub_410C00((void *)(a1 - 28)); } //----- (009922E8) -------------------------------------------------------- void __usercall sub_9922E8(int a1@) { sub_4562E0((_DWORD *)(a1 - 48)); } //----- (0099241F) -------------------------------------------------------- int __cdecl SEH_71CDE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009924FC) -------------------------------------------------------- int __cdecl SEH_71DA70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099266F) -------------------------------------------------------- int __cdecl SEH_720D10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099269D) -------------------------------------------------------- int __cdecl SEH_720E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009926CB) -------------------------------------------------------- int __cdecl SEH_720F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099272C) -------------------------------------------------------- int __cdecl SEH_722180(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992747) -------------------------------------------------------- void __usercall sub_992747(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00992752) -------------------------------------------------------- void __usercall sub_992752(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00992775) -------------------------------------------------------- void __usercall sub_992775(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00992780) -------------------------------------------------------- void __usercall sub_992780(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (009927AB) -------------------------------------------------------- int __cdecl SEH_722520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009927D8) -------------------------------------------------------- int __cdecl SEH_722670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992805) -------------------------------------------------------- int __cdecl SEH_722B30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992903) -------------------------------------------------------- int __cdecl SEH_725350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009929A2) -------------------------------------------------------- int __cdecl SEH_725F90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009929D0) -------------------------------------------------------- int __cdecl SEH_726110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992A29) -------------------------------------------------------- int __cdecl SEH_726B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992A57) -------------------------------------------------------- int __cdecl SEH_726C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992A85) -------------------------------------------------------- int __cdecl SEH_726DD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992AA8) -------------------------------------------------------- int __cdecl SEH_727CF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992AEE) -------------------------------------------------------- int __cdecl SEH_73B740(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992B20) -------------------------------------------------------- int __cdecl SEH_729E50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992B43) -------------------------------------------------------- int __cdecl SEH_72A0D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992B5E) -------------------------------------------------------- void __usercall sub_992B5E(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (00992B89) -------------------------------------------------------- int __cdecl SEH_72A530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992BAC) -------------------------------------------------------- int __cdecl SEH_72A620(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992C31) -------------------------------------------------------- int __cdecl SEH_72A6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992CA8) -------------------------------------------------------- int __cdecl SEH_72A810(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992CCB) -------------------------------------------------------- int __cdecl SEH_72A980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992CFE) -------------------------------------------------------- int __cdecl SEH_72AA50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992D29) -------------------------------------------------------- int __cdecl SEH_72AC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992D4C) -------------------------------------------------------- int __cdecl SEH_72AEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992D67) -------------------------------------------------------- void __usercall sub_992D67(int a1@) { sub_410C00((void *)(a1 - 16)); } //----- (00992D92) -------------------------------------------------------- int __cdecl SEH_72AFE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992DE8) -------------------------------------------------------- int __cdecl SEH_72BFD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992E0B) -------------------------------------------------------- int __cdecl SEH_72C680(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992E2E) -------------------------------------------------------- int __cdecl SEH_72C840(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992E51) -------------------------------------------------------- int __cdecl SEH_72C920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00992EDA) -------------------------------------------------------- int __cdecl SEH_72EC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993217) -------------------------------------------------------- int __cdecl SEH_730E40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993549) -------------------------------------------------------- int __cdecl SEH_731240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993814) -------------------------------------------------------- int __cdecl SEH_731960(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993B46) -------------------------------------------------------- int __cdecl SEH_731D60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993B61) -------------------------------------------------------- void __usercall sub_993B61(int a1@) { operator delete(*(void **)(a1 - 16)); } //----- (00993B6C) -------------------------------------------------------- void __usercall sub_993B6C(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (00993BA2) -------------------------------------------------------- int __cdecl SEH_7325F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993BD0) -------------------------------------------------------- int __cdecl SEH_732750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993C0F) -------------------------------------------------------- int __cdecl SEH_732880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993C4A) -------------------------------------------------------- int __cdecl SEH_732AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993C78) -------------------------------------------------------- int __cdecl SEH_732C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993CA6) -------------------------------------------------------- int __cdecl SEH_732D70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993CD4) -------------------------------------------------------- int __cdecl SEH_732EA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993D02) -------------------------------------------------------- int __cdecl SEH_732FE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00993D41) -------------------------------------------------------- int __cdecl SEH_733110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994077) -------------------------------------------------------- int __cdecl SEH_739AF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009940A5) -------------------------------------------------------- int __cdecl SEH_739C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009940D5) -------------------------------------------------------- int __cdecl SEH_739F30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009941EB) -------------------------------------------------------- int __cdecl SEH_743D00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099423E) -------------------------------------------------------- int __cdecl SEH_73D270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994261) -------------------------------------------------------- int __cdecl SEH_73D7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994284) -------------------------------------------------------- int __cdecl SEH_73D8C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009942A7) -------------------------------------------------------- int __cdecl SEH_73DAB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099430E) -------------------------------------------------------- int __cdecl SEH_73DF80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009944B8) -------------------------------------------------------- int __cdecl SEH_740F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009944E6) -------------------------------------------------------- int __cdecl SEH_741CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994514) -------------------------------------------------------- int __cdecl SEH_741DF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994542) -------------------------------------------------------- int __cdecl SEH_741F40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994570) -------------------------------------------------------- int __cdecl SEH_742140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099459E) -------------------------------------------------------- int __cdecl SEH_7422A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009945CE) -------------------------------------------------------- int __cdecl SEH_742520(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009946E0) -------------------------------------------------------- int __cdecl SEH_743E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994700) -------------------------------------------------------- void __usercall sub_994700(int a1@) { sub_410C00((void *)(a1 - 20)); } //----- (0099472B) -------------------------------------------------------- int __cdecl SEH_744110(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099474E) -------------------------------------------------------- int __cdecl SEH_744250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994771) -------------------------------------------------------- int __cdecl SEH_7443B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994794) -------------------------------------------------------- int __cdecl SEH_7444F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009947B7) -------------------------------------------------------- int __cdecl SEH_7445B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009947F0) -------------------------------------------------------- int __cdecl SEH_744800(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994821) -------------------------------------------------------- int __cdecl SEH_744DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099483C) -------------------------------------------------------- void __usercall sub_99483C(int a1@) { sub_657580(*(_DWORD **)(a1 - 20)); } //----- (00994844) -------------------------------------------------------- void __usercall sub_994844(int a1@) { sub_467570((void *)(*(_DWORD *)(a1 - 20) + 2956)); } //----- (009948AB) -------------------------------------------------------- int __cdecl SEH_744F60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994918) -------------------------------------------------------- int __cdecl SEH_7458E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994959) -------------------------------------------------------- int __cdecl SEH_745990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994996) -------------------------------------------------------- int __cdecl SEH_745DB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009949C0) -------------------------------------------------------- int __cdecl SEH_746350(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009949E0) -------------------------------------------------------- void __usercall sub_9949E0(int a1@) { int v1; // esi v1 = a1 - 44; if ( *(_DWORD *)(a1 - 44 + 20) >= 8u ) operator delete(*(void **)(a1 - 44)); *(_DWORD *)(v1 + 20) = 7; *(_DWORD *)(v1 + 16) = 0; *(_WORD *)v1 = 0; } //----- (00994A0D) -------------------------------------------------------- void __usercall sub_994A0D(int a1@) { int v1; // esi v1 = a1 - 44; if ( *(_DWORD *)(a1 - 44 + 20) >= 8u ) operator delete(*(void **)(a1 - 44)); *(_DWORD *)(v1 + 20) = 7; *(_DWORD *)(v1 + 16) = 0; *(_WORD *)v1 = 0; } //----- (00994A61) -------------------------------------------------------- int __cdecl SEH_7471C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994A98) -------------------------------------------------------- int __cdecl SEH_747370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994AC8) -------------------------------------------------------- int __cdecl SEH_7475B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994B01) -------------------------------------------------------- int __cdecl SEH_747A80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994B28) -------------------------------------------------------- int __cdecl SEH_747D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994B60) -------------------------------------------------------- int __cdecl SEH_747E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994BBC) -------------------------------------------------------- int __cdecl SEH_7484A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994C01) -------------------------------------------------------- int __cdecl SEH_748A10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994C41) -------------------------------------------------------- int __cdecl SEH_748AA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994C71) -------------------------------------------------------- int __cdecl SEH_748B40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994CBB) -------------------------------------------------------- int __cdecl SEH_748ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994D21) -------------------------------------------------------- int __cdecl SEH_748F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994D6E) -------------------------------------------------------- int __cdecl SEH_9A4570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994DAB) -------------------------------------------------------- int __cdecl SEH_749F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994DE9) -------------------------------------------------------- int __cdecl SEH_74A020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994E29) -------------------------------------------------------- int __cdecl SEH_74A120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994E58) -------------------------------------------------------- int __cdecl SEH_74A220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994E98) -------------------------------------------------------- int __cdecl SEH_74A2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994ED8) -------------------------------------------------------- int __cdecl SEH_74A560(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994F08) -------------------------------------------------------- int __cdecl SEH_74C6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994F46) -------------------------------------------------------- int __cdecl SEH_74EAC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994F7B) -------------------------------------------------------- int __cdecl SEH_74EF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994FB6) -------------------------------------------------------- int __cdecl SEH_74F020(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00994FE8) -------------------------------------------------------- int __cdecl SEH_754D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995018) -------------------------------------------------------- int __cdecl SEH_754F10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009950EE) -------------------------------------------------------- int __cdecl SEH_8CEED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099511E) -------------------------------------------------------- int __cdecl SEH_8CEF90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099515B) -------------------------------------------------------- int __cdecl SEH_8CFEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009951A4) -------------------------------------------------------- int __cdecl SEH_8D03E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009951E3) -------------------------------------------------------- int __cdecl SEH_8D0910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995208) -------------------------------------------------------- int __cdecl SEH_8D0BD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995238) -------------------------------------------------------- int __cdecl SEH_8D0C60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995270) -------------------------------------------------------- int __cdecl SEH_8D0CD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995298) -------------------------------------------------------- int __cdecl SEH_8D0EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009952C8) -------------------------------------------------------- int __cdecl SEH_8D0FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995300) -------------------------------------------------------- int __cdecl SEH_8D10F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995328) -------------------------------------------------------- int __cdecl SEH_8D1080(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995358) -------------------------------------------------------- int __cdecl SEH_8D13B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995388) -------------------------------------------------------- int __cdecl SEH_8D14A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995424) -------------------------------------------------------- int __cdecl SEH_8D1AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995469) -------------------------------------------------------- int __cdecl SEH_8D1C30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009954CF) -------------------------------------------------------- int __cdecl SEH_8D1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009954FB) -------------------------------------------------------- int __cdecl SEH_8D21E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995528) -------------------------------------------------------- int __cdecl SEH_8D2C90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995558) -------------------------------------------------------- int __cdecl SEH_8D3160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009955C0) -------------------------------------------------------- int __cdecl SEH_8D3750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099564A) -------------------------------------------------------- int __cdecl SEH_8D3890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009956DA) -------------------------------------------------------- int __cdecl SEH_8D3B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995773) -------------------------------------------------------- int __cdecl SEH_8D4EB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009957A6) -------------------------------------------------------- int __cdecl SEH_8D4FF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009957D8) -------------------------------------------------------- int __cdecl SEH_8D5280(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099580B) -------------------------------------------------------- int __cdecl SEH_8D5370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995865) -------------------------------------------------------- int __cdecl SEH_8D54D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009958A6) -------------------------------------------------------- int __cdecl SEH_8D5A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009958E6) -------------------------------------------------------- int __cdecl SEH_8D6220(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995941) -------------------------------------------------------- int __cdecl SEH_8D6580(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009959B7) -------------------------------------------------------- int __cdecl SEH_8D6E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995A6C) -------------------------------------------------------- int __cdecl SEH_8D7F20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995A98) -------------------------------------------------------- int __cdecl SEH_8D8240(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995B38) -------------------------------------------------------- int __cdecl SEH_8D83D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995BD8) -------------------------------------------------------- int __cdecl SEH_8D84B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995C08) -------------------------------------------------------- int __cdecl SEH_8D86F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995C68) -------------------------------------------------------- int __cdecl SEH_8D8990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995C98) -------------------------------------------------------- int __cdecl SEH_8D8E60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995D38) -------------------------------------------------------- int __cdecl SEH_8D90F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995DD8) -------------------------------------------------------- int __cdecl SEH_8D9420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995E29) -------------------------------------------------------- int __cdecl SEH_8D98D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995EF5) -------------------------------------------------------- int __cdecl SEH_8DA040(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995F23) -------------------------------------------------------- int __cdecl SEH_8DA500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00995F61) -------------------------------------------------------- int __cdecl SEH_8DAAF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996111) -------------------------------------------------------- int __cdecl SEH_8DAF20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996146) -------------------------------------------------------- int __cdecl SEH_8DB8D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996178) -------------------------------------------------------- int __cdecl SEH_8DBF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009961BE) -------------------------------------------------------- int __cdecl SEH_8DBFB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996203) -------------------------------------------------------- int __cdecl SEH_8DC0B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996249) -------------------------------------------------------- int __cdecl SEH_8DC160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099629B) -------------------------------------------------------- int __cdecl SEH_8DCB60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009962DB) -------------------------------------------------------- int __cdecl SEH_8DCD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996313) -------------------------------------------------------- int __cdecl SEH_8DD530(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996340) -------------------------------------------------------- int __cdecl SEH_8DDF30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099637E) -------------------------------------------------------- int __cdecl SEH_8DE320(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009963A8) -------------------------------------------------------- int __cdecl SEH_8DE410(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009963E1) -------------------------------------------------------- int __cdecl SEH_8DE670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099641F) -------------------------------------------------------- int __cdecl SEH_8DE710(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996450) -------------------------------------------------------- int __cdecl SEH_8DFDD0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996478) -------------------------------------------------------- int __cdecl SEH_8E02C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009964A8) -------------------------------------------------------- int __cdecl SEH_8E0340(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009964D8) -------------------------------------------------------- int __cdecl SEH_8E0860(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099650B) -------------------------------------------------------- int __cdecl SEH_8E08E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099654B) -------------------------------------------------------- int __cdecl SEH_8E09A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996606) -------------------------------------------------------- int __cdecl SEH_8E0A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099665C) -------------------------------------------------------- int __cdecl SEH_8E0C80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996700) -------------------------------------------------------- int __cdecl SEH_8E1370(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099673B) -------------------------------------------------------- int __cdecl SEH_8E1ED0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009967FE) -------------------------------------------------------- int __cdecl SEH_8E2200(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996830) -------------------------------------------------------- int __cdecl SEH_8E2540(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099686E) -------------------------------------------------------- int __cdecl SEH_8E28E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996898) -------------------------------------------------------- int __cdecl SEH_8E4980(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009968EE) -------------------------------------------------------- int __cdecl SEH_8E4AB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996963) -------------------------------------------------------- int __cdecl SEH_8E4F70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009969AC) -------------------------------------------------------- int __cdecl SEH_8E5310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009969EE) -------------------------------------------------------- int __cdecl SEH_8E59E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996A23) -------------------------------------------------------- int __cdecl SEH_8E5B10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996A8C) -------------------------------------------------------- int __cdecl SEH_8E5BB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996ADE) -------------------------------------------------------- int __cdecl SEH_8E5FC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996BC1) -------------------------------------------------------- int __cdecl SEH_8E6310(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996BF0) -------------------------------------------------------- int __cdecl SEH_8E63F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996C90) -------------------------------------------------------- int __cdecl SEH_8EB290(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996CCE) -------------------------------------------------------- int __cdecl SEH_8E6B70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996CFB) -------------------------------------------------------- int __cdecl SEH_8E8190(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996D30) -------------------------------------------------------- int __cdecl SEH_8E8300(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996D68) -------------------------------------------------------- int __cdecl SEH_8E84F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996DB1) -------------------------------------------------------- int __cdecl SEH_8E8660(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996E02) -------------------------------------------------------- int __cdecl SEH_8E8A40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996E33) -------------------------------------------------------- int __cdecl SEH_8E8B90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996E66) -------------------------------------------------------- int __cdecl SEH_8E8CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996E9B) -------------------------------------------------------- int __cdecl SEH_8E92D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996EE6) -------------------------------------------------------- int __cdecl SEH_8E9570(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00996FD9) -------------------------------------------------------- int __cdecl SEH_8EB440(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997039) -------------------------------------------------------- int __cdecl SEH_8EB500(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997094) -------------------------------------------------------- int __cdecl SEH_8EB670(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009970EF) -------------------------------------------------------- int __cdecl SEH_8EB7D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997183) -------------------------------------------------------- int __cdecl SEH_8ECD10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009971FB) -------------------------------------------------------- int __cdecl SEH_8ED230(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997233) -------------------------------------------------------- int __cdecl SEH_8ED4D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997263) -------------------------------------------------------- int __cdecl SEH_8ED610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009972BF) -------------------------------------------------------- int __cdecl SEH_8EDB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099734E) -------------------------------------------------------- int __cdecl SEH_8EE030(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009973A4) -------------------------------------------------------- int __cdecl SEH_8EE120(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099742E) -------------------------------------------------------- int __cdecl SEH_8EEC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997484) -------------------------------------------------------- int __cdecl SEH_8EED60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009974C1) -------------------------------------------------------- int __cdecl SEH_8EF2C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997516) -------------------------------------------------------- int __cdecl SEH_8EF420(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997548) -------------------------------------------------------- int __cdecl SEH_8F0D20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997580) -------------------------------------------------------- int __cdecl SEH_8F0E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009975A8) -------------------------------------------------------- int __cdecl SEH_8F0FA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009975D8) -------------------------------------------------------- int __cdecl SEH_8F29C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099760B) -------------------------------------------------------- int __cdecl SEH_8F3870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997638) -------------------------------------------------------- int __cdecl SEH_8F3CC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099766B) -------------------------------------------------------- int __cdecl SEH_8F43D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997698) -------------------------------------------------------- int __cdecl SEH_8F42E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009976D6) -------------------------------------------------------- int __cdecl SEH_8F4870(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997708) -------------------------------------------------------- int __cdecl SEH_8F4990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009977F8) -------------------------------------------------------- int __cdecl SEH_8F5B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099782E) -------------------------------------------------------- int __cdecl SEH_8F5E10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099786B) -------------------------------------------------------- int __cdecl SEH_8F61B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099789B) -------------------------------------------------------- int __cdecl SEH_8F62B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009978D9) -------------------------------------------------------- int __cdecl SEH_8F63D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099791B) -------------------------------------------------------- int __cdecl SEH_8F66B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099795E) -------------------------------------------------------- int __cdecl SEH_8F6A70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997A17) -------------------------------------------------------- int __cdecl SEH_8F7760(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997A48) -------------------------------------------------------- int __cdecl SEH_8FA9C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997B17) -------------------------------------------------------- int __cdecl SEH_8F7B50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997B61) -------------------------------------------------------- int __cdecl SEH_8F7DA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997B93) -------------------------------------------------------- int __cdecl SEH_8F82A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997BD0) -------------------------------------------------------- int __cdecl SEH_8F8AE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997C21) -------------------------------------------------------- int __cdecl SEH_8F9950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997C58) -------------------------------------------------------- int __cdecl SEH_8F9E00(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997C88) -------------------------------------------------------- int __cdecl SEH_8F9F80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997CB8) -------------------------------------------------------- int __cdecl SEH_8FA270(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997D00) -------------------------------------------------------- int __cdecl SEH_8FA4A0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997D30) -------------------------------------------------------- int __cdecl SEH_8FAA90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997D6B) -------------------------------------------------------- int __cdecl SEH_8FAC60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997DAB) -------------------------------------------------------- int __cdecl SEH_8FAEE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997DEE) -------------------------------------------------------- int __cdecl SEH_8FB140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997E2B) -------------------------------------------------------- int __cdecl SEH_8FB460(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997E6B) -------------------------------------------------------- int __cdecl SEH_8FB650(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997EB9) -------------------------------------------------------- int __cdecl SEH_8FB880(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997F09) -------------------------------------------------------- int __cdecl SEH_8FB990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997F3B) -------------------------------------------------------- int __cdecl SEH_8FC470(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00997FDE) -------------------------------------------------------- int __cdecl SEH_8FC6F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998013) -------------------------------------------------------- int __cdecl SEH_8FCB80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099803B) -------------------------------------------------------- int __cdecl SEH_8FCFA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099807B) -------------------------------------------------------- int __cdecl SEH_8FD2D0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009980A8) -------------------------------------------------------- int __cdecl SEH_8FD6E0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009980EB) -------------------------------------------------------- int __cdecl SEH_8FDBB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998118) -------------------------------------------------------- int __cdecl SEH_8F14B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998148) -------------------------------------------------------- int __cdecl SEH_8FEC40(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998183) -------------------------------------------------------- int __cdecl SEH_8FEB10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009981AB) -------------------------------------------------------- int __cdecl SEH_8FECA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009981DB) -------------------------------------------------------- int __cdecl SEH_8FEDF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099822F) -------------------------------------------------------- int __cdecl SEH_8FF140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998274) -------------------------------------------------------- int __cdecl SEH_8FF2B0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099829B) -------------------------------------------------------- int __cdecl SEH_8FF3C0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009982D0) -------------------------------------------------------- int __cdecl SEH_8FF610(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998310) -------------------------------------------------------- int __cdecl SEH_8FF950(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099834B) -------------------------------------------------------- int __cdecl SEH_8FFDB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998378) -------------------------------------------------------- int __cdecl SEH_8FFFC0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009983C9) -------------------------------------------------------- int __cdecl SEH_900160(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009983F8) -------------------------------------------------------- int __cdecl SEH_900330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009984C1) -------------------------------------------------------- int __cdecl SEH_900990(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998589) -------------------------------------------------------- int __cdecl SEH_903330(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998608) -------------------------------------------------------- int __cdecl SEH_904750(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998638) -------------------------------------------------------- int __cdecl SEH_905850(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998673) -------------------------------------------------------- int __cdecl SEH_905BE0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998698) -------------------------------------------------------- int __cdecl SEH_905D30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009986C8) -------------------------------------------------------- int __cdecl SEH_906890(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998714) -------------------------------------------------------- int __cdecl SEH_906A30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998754) -------------------------------------------------------- int __cdecl SEH_906C50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099877B) -------------------------------------------------------- int __cdecl SEH_907360(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009987A8) -------------------------------------------------------- int __cdecl SEH_907730(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009987D8) -------------------------------------------------------- int __cdecl SEH_9077F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998813) -------------------------------------------------------- int __cdecl SEH_908140(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099888B) -------------------------------------------------------- int __cdecl SEH_908E70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009988BB) -------------------------------------------------------- int __cdecl SEH_909060(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009988EB) -------------------------------------------------------- int __cdecl SEH_909920(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998934) -------------------------------------------------------- int __cdecl SEH_909D90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998963) -------------------------------------------------------- int __cdecl SEH_910CB0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998990) -------------------------------------------------------- int __cdecl SEH_90AD70(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009989C0) -------------------------------------------------------- int __cdecl SEH_90AE60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998A20) -------------------------------------------------------- int __cdecl SEH_90B490(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998A68) -------------------------------------------------------- int __cdecl SEH_90BC50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998AA3) -------------------------------------------------------- int __cdecl SEH_90CE90(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998AD3) -------------------------------------------------------- int __cdecl SEH_90DF60(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998AF8) -------------------------------------------------------- int __cdecl SEH_90EA80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998B36) -------------------------------------------------------- int __cdecl SEH_90EEA0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998B68) -------------------------------------------------------- int __cdecl SEH_90F000(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998B98) -------------------------------------------------------- int __cdecl SEH_90F1F0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998BCB) -------------------------------------------------------- int __cdecl SEH_90F250(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998BFB) -------------------------------------------------------- int __cdecl SEH_90CFF0(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998C7E) -------------------------------------------------------- int __cdecl SEH_911260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998CC4) -------------------------------------------------------- int __cdecl SEH_911910(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998D14) -------------------------------------------------------- int __cdecl SEH_911A50(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998D38) -------------------------------------------------------- int __cdecl SEH_911D80(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998E81) -------------------------------------------------------- int __cdecl SEH_96B690(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998ED0) -------------------------------------------------------- int __cdecl SEH_96BC30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998F80) -------------------------------------------------------- int __cdecl SEH_96BD20(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00998FD9) -------------------------------------------------------- int __cdecl SEH_96C260(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00999021) -------------------------------------------------------- int __cdecl SEH_96C380(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (0099905E) -------------------------------------------------------- int __cdecl SEH_96C970(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009990A6) -------------------------------------------------------- int __cdecl SEH_96CA30(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (009990DB) -------------------------------------------------------- int __cdecl SEH_96CC10(struct EHExceptionRecord *a1, struct EHRegistrationNode *a2, struct _CONTEXT *a3, void *a4) { return __CxxFrameHandler3(a1, a2, a3, a4); } // 7D4D7A: using guessed type _DWORD __cdecl __CxxFrameHandler3(struct EHExceptionRecord *, struct EHRegistrationNode *, struct _CONTEXT *, void *); //----- (00999130) -------------------------------------------------------- int sub_999130() { sub_4018E0(&unk_AA7578, &unk_9A76FC, 0x20u); dword_AA75A8 = 15; dword_AA75A4 = 0; byte_AA7594 = 0; sub_4018E0(&byte_AA7594, &unk_9A76D8, 0x20u); dword_AA75C4 = 15; dword_AA75C0 = 0; byte_AA75B0 = 0; sub_4018E0(&byte_AA75B0, &unk_9A76B4, 0x20u); dword_AA75E0 = 15; dword_AA75DC = 0; byte_AA75CC = 0; sub_4018E0(&byte_AA75CC, &unk_9A7690, 0x20u); dword_AA75FC = 15; dword_AA75F8 = 0; byte_AA75E8 = 0; sub_4018E0(&byte_AA75E8, &unk_9A766C, 0x20u); dword_AA7618 = 15; dword_AA7614 = 0; byte_AA7604 = 0; sub_4018E0(&byte_AA7604, &unk_9A7648, 0x20u); dword_AA7634 = 15; dword_AA7630 = 0; byte_AA7620 = 0; sub_4018E0(&byte_AA7620, &unk_9A7624, 0x20u); dword_AA7650 = 15; dword_AA764C = 0; byte_AA763C = 0; sub_4018E0(&byte_AA763C, &unk_9A7600, 0x20u); dword_AA766C = 15; dword_AA7668 = 0; byte_AA7658 = 0; sub_4018E0(&byte_AA7658, &unk_9A75DC, 0x20u); dword_AA7688 = 15; dword_AA7684 = 0; byte_AA7674 = 0; sub_4018E0(&byte_AA7674, &unk_9A75B8, 0x20u); dword_AA76A4 = 15; dword_AA76A0 = 0; byte_AA7690 = 0; sub_4018E0(&byte_AA7690, &unk_9A7594, 0x20u); dword_AA76C0 = 15; dword_AA76BC = 0; byte_AA76AC = 0; sub_4018E0(&byte_AA76AC, &unk_9A7570, 0x20u); dword_AA76DC = 15; dword_AA76D8 = 0; byte_AA76C8 = 0; sub_4018E0(&byte_AA76C8, &unk_9A754C, 0x20u); dword_AA76F8 = 15; dword_AA76F4 = 0; byte_AA76E4 = 0; sub_4018E0(&byte_AA76E4, &unk_9A7528, 0x20u); dword_AA7714 = 15; dword_AA7710 = 0; byte_AA7700 = 0; sub_4018E0(&byte_AA7700, &unk_9A7504, 0x20u); dword_AA7730 = 15; dword_AA772C = 0; byte_AA771C = 0; sub_4018E0(&byte_AA771C, &unk_9A74E0, 0x20u); dword_AA774C = 15; dword_AA7748 = 0; byte_AA7738 = 0; sub_4018E0(&byte_AA7738, &unk_9A74BC, 0x20u); dword_AA7768 = 15; dword_AA7764 = 0; byte_AA7754 = 0; sub_4018E0(&byte_AA7754, &unk_9A7498, 0x20u); dword_AA7784 = 15; dword_AA7780 = 0; byte_AA7770 = 0; sub_4018E0(&byte_AA7770, &unk_9A7474, 0x20u); dword_AA77A0 = 15; dword_AA779C = 0; byte_AA778C = 0; sub_4018E0(&byte_AA778C, &unk_9A7450, 0x20u); dword_AA77BC = 15; dword_AA77B8 = 0; byte_AA77A8 = 0; sub_4018E0(&byte_AA77A8, &unk_9A742C, 0x20u); dword_AA77D8 = 15; dword_AA77D4 = 0; byte_AA77C4 = 0; sub_4018E0(&byte_AA77C4, &unk_9A7408, 0x20u); dword_AA77F4 = 15; dword_AA77F0 = 0; byte_AA77E0 = 0; sub_4018E0(&byte_AA77E0, &unk_9A73E4, 0x20u); dword_AA7810 = 15; dword_AA780C = 0; byte_AA77FC = 0; sub_4018E0(&byte_AA77FC, &unk_9A73C0, 0x20u); dword_AA782C = 15; dword_AA7828 = 0; byte_AA7818 = 0; sub_4018E0(&byte_AA7818, &unk_9A739C, 0x20u); dword_AA7848 = 15; dword_AA7844 = 0; byte_AA7834 = 0; sub_4018E0(&byte_AA7834, &unk_9A7378, 0x20u); dword_AA7864 = 15; dword_AA7860 = 0; byte_AA7850 = 0; sub_4018E0(&byte_AA7850, &unk_9A7354, 0x20u); dword_AA7880 = 15; dword_AA787C = 0; byte_AA786C = 0; sub_4018E0(&byte_AA786C, &unk_9A7330, 0x20u); dword_AA789C = 15; dword_AA7898 = 0; byte_AA7888 = 0; sub_4018E0(&byte_AA7888, &unk_9A730C, 0x20u); dword_AA78B8 = 15; dword_AA78B4 = 0; byte_AA78A4 = 0; sub_4018E0(&byte_AA78A4, &unk_9A72E8, 0x20u); dword_AA78D4 = 15; dword_AA78D0 = 0; byte_AA78C0 = 0; sub_4018E0(&byte_AA78C0, &unk_9A72C4, 0x20u); dword_AA78F0 = 15; dword_AA78EC = 0; byte_AA78DC = 0; sub_4018E0(&byte_AA78DC, &unk_9A72A0, 0x20u); dword_AA790C = 15; dword_AA7908 = 0; byte_AA78F8 = 0; sub_4018E0(&byte_AA78F8, &unk_9A727C, 0x20u); dword_AA7928 = 15; dword_AA7924 = 0; byte_AA7914 = 0; sub_4018E0(&byte_AA7914, &unk_9A7258, 0x20u); dword_AA7944 = 15; dword_AA7940 = 0; byte_AA7930 = 0; sub_4018E0(&byte_AA7930, &unk_9A7234, 0x20u); dword_AA7960 = 15; dword_AA795C = 0; byte_AA794C = 0; sub_4018E0(&byte_AA794C, &unk_9A7210, 0x20u); dword_AA797C = 15; dword_AA7978 = 0; byte_AA7968 = 0; sub_4018E0(&byte_AA7968, &unk_9A71EC, 0x20u); dword_AA7998 = 15; dword_AA7994 = 0; byte_AA7984 = 0; sub_4018E0(&byte_AA7984, &unk_9A71C8, 0x20u); dword_AA79B4 = 15; dword_AA79B0 = 0; byte_AA79A0 = 0; sub_4018E0(&byte_AA79A0, &unk_9A71A4, 0x20u); dword_AA79D0 = 15; dword_AA79CC = 0; byte_AA79BC = 0; sub_4018E0(&byte_AA79BC, &unk_9A7180, 0x20u); dword_AA79EC = 15; dword_AA79E8 = 0; byte_AA79D8 = 0; sub_4018E0(&byte_AA79D8, &unk_9A715C, 0x20u); dword_AA7A08 = 15; dword_AA7A04 = 0; byte_AA79F4 = 0; sub_4018E0(&byte_AA79F4, &unk_9A7138, 0x20u); dword_AA7A24 = 15; dword_AA7A20 = 0; byte_AA7A10 = 0; sub_4018E0(&byte_AA7A10, &unk_9A7114, 0x20u); dword_AA7A40 = 15; dword_AA7A3C = 0; byte_AA7A2C = 0; sub_4018E0(&byte_AA7A2C, &unk_9A70F0, 0x20u); dword_AA7A5C = 15; dword_AA7A58 = 0; byte_AA7A48 = 0; sub_4018E0(&byte_AA7A48, &unk_9A70CC, 0x20u); dword_AA7A78 = 15; dword_AA7A74 = 0; byte_AA7A64 = 0; sub_4018E0(&byte_AA7A64, &unk_9A70A8, 0x20u); dword_AA7A94 = 15; dword_AA7A90 = 0; byte_AA7A80 = 0; sub_4018E0(&byte_AA7A80, &unk_9A7084, 0x20u); dword_AA7AB0 = 15; dword_AA7AAC = 0; byte_AA7A9C = 0; sub_4018E0(&byte_AA7A9C, &unk_9A7060, 0x20u); dword_AA7ACC = 15; dword_AA7AC8 = 0; byte_AA7AB8 = 0; sub_4018E0(&byte_AA7AB8, &unk_9A703C, 0x20u); dword_AA7AE8 = 15; dword_AA7AE4 = 0; byte_AA7AD4 = 0; sub_4018E0(&byte_AA7AD4, &unk_9A7018, 0x20u); dword_AA7B04 = 15; dword_AA7B00 = 0; byte_AA7AF0 = 0; sub_4018E0(&byte_AA7AF0, &unk_9A6FF4, 0x20u); dword_AA7B20 = 15; dword_AA7B1C = 0; byte_AA7B0C = 0; sub_4018E0(&byte_AA7B0C, &unk_9A6FD0, 0x20u); dword_AA7B3C = 15; dword_AA7B38 = 0; byte_AA7B28 = 0; sub_4018E0(&byte_AA7B28, &unk_9A6FAC, 0x20u); dword_AA7B58 = 15; dword_AA7B54 = 0; byte_AA7B44 = 0; sub_4018E0(&byte_AA7B44, &unk_9A6F88, 0x20u); dword_AA7B74 = 15; dword_AA7B70 = 0; byte_AA7B60 = 0; sub_4018E0(&byte_AA7B60, &unk_9A6F64, 0x20u); dword_AA7B90 = 15; dword_AA7B8C = 0; byte_AA7B7C = 0; sub_4018E0(&byte_AA7B7C, &unk_9A6F40, 0x20u); dword_AA7BAC = 15; dword_AA7BA8 = 0; byte_AA7B98 = 0; sub_4018E0(&byte_AA7B98, &unk_9A6F1C, 0x20u); dword_AA7BC8 = 15; dword_AA7BC4 = 0; byte_AA7BB4 = 0; sub_4018E0(&byte_AA7BB4, &unk_9A6EF8, 0x20u); dword_AA7BE4 = 15; dword_AA7BE0 = 0; byte_AA7BD0 = 0; sub_4018E0(&byte_AA7BD0, &unk_9A6ED4, 0x20u); dword_AA7C00 = 15; dword_AA7BFC = 0; byte_AA7BEC = 0; sub_4018E0(&byte_AA7BEC, &unk_9A6EB0, 0x20u); dword_AA7C1C = 15; dword_AA7C18 = 0; byte_AA7C08 = 0; sub_4018E0(&byte_AA7C08, &unk_9A6E8C, 0x20u); dword_AA7C38 = 15; dword_AA7C34 = 0; byte_AA7C24 = 0; sub_4018E0(&byte_AA7C24, &unk_9A6E68, 0x20u); dword_AA7C54 = 15; dword_AA7C50 = 0; byte_AA7C40 = 0; sub_4018E0(&byte_AA7C40, &unk_9A6E44, 0x20u); dword_AA7C70 = 15; dword_AA7C6C = 0; byte_AA7C5C = 0; sub_4018E0(&byte_AA7C5C, &unk_9A6E20, 0x20u); dword_AA7C8C = 15; dword_AA7C88 = 0; byte_AA7C78 = 0; sub_4018E0(&byte_AA7C78, &unk_9A6DFC, 0x20u); dword_AA7CA8 = 15; dword_AA7CA4 = 0; byte_AA7C94 = 0; sub_4018E0(&byte_AA7C94, &unk_9A6DD8, 0x20u); dword_AA7CC4 = 15; dword_AA7CC0 = 0; byte_AA7CB0 = 0; sub_4018E0(&byte_AA7CB0, &unk_9A6DB4, 0x20u); dword_AA7CE0 = 15; dword_AA7CDC = 0; byte_AA7CCC = 0; sub_4018E0(&byte_AA7CCC, &unk_9A6D90, 0x20u); dword_AA7CFC = 15; dword_AA7CF8 = 0; byte_AA7CE8 = 0; sub_4018E0(&byte_AA7CE8, &unk_9A6D6C, 0x20u); dword_AA7D18 = 15; dword_AA7D14 = 0; byte_AA7D04 = 0; sub_4018E0(&byte_AA7D04, &unk_9A6D48, 0x20u); dword_AA7D34 = 15; dword_AA7D30 = 0; byte_AA7D20 = 0; sub_4018E0(&byte_AA7D20, &unk_9A6D24, 0x20u); dword_AA7D50 = 15; dword_AA7D4C = 0; byte_AA7D3C = 0; sub_4018E0(&byte_AA7D3C, &unk_9A6D00, 0x20u); dword_AA7D6C = 15; dword_AA7D68 = 0; byte_AA7D58 = 0; sub_4018E0(&byte_AA7D58, &unk_9A6CDC, 0x20u); dword_AA7D88 = 15; dword_AA7D84 = 0; byte_AA7D74 = 0; sub_4018E0(&byte_AA7D74, &unk_9A6CB8, 0x20u); dword_AA7DA4 = 15; dword_AA7DA0 = 0; byte_AA7D90 = 0; sub_4018E0(&byte_AA7D90, &unk_9A6C94, 0x20u); dword_AA7DC0 = 15; dword_AA7DBC = 0; byte_AA7DAC = 0; sub_4018E0(&byte_AA7DAC, &unk_9A6C70, 0x20u); dword_AA7DDC = 15; dword_AA7DD8 = 0; byte_AA7DC8 = 0; sub_4018E0(&byte_AA7DC8, &unk_9A6C4C, 0x20u); dword_AA7DF8 = 15; dword_AA7DF4 = 0; byte_AA7DE4 = 0; sub_4018E0(&byte_AA7DE4, &unk_9A6C28, 0x20u); dword_AA7E14 = 15; dword_AA7E10 = 0; byte_AA7E00 = 0; sub_4018E0(&byte_AA7E00, &unk_9A6C04, 0x20u); dword_AA7E30 = 15; dword_AA7E2C = 0; byte_AA7E1C = 0; sub_4018E0(&byte_AA7E1C, &unk_9A6BE0, 0x20u); dword_AA7E4C = 15; dword_AA7E48 = 0; byte_AA7E38 = 0; sub_4018E0(&byte_AA7E38, &unk_9A6BBC, 0x20u); dword_AA7E68 = 15; dword_AA7E64 = 0; byte_AA7E54 = 0; sub_4018E0(&byte_AA7E54, &unk_9A6B98, 0x20u); dword_AA7E84 = 15; dword_AA7E80 = 0; byte_AA7E70 = 0; sub_4018E0(&byte_AA7E70, &unk_9A6B74, 0x20u); dword_AA7EA0 = 15; dword_AA7E9C = 0; byte_AA7E8C = 0; sub_4018E0(&byte_AA7E8C, &unk_9A6B50, 0x20u); dword_AA7EBC = 15; dword_AA7EB8 = 0; byte_AA7EA8 = 0; sub_4018E0(&byte_AA7EA8, &unk_9A6B2C, 0x20u); dword_AA7ED8 = 15; dword_AA7ED4 = 0; byte_AA7EC4 = 0; sub_4018E0(&byte_AA7EC4, &unk_9A6B08, 0x20u); dword_AA7EF4 = 15; dword_AA7EF0 = 0; byte_AA7EE0 = 0; sub_4018E0(&byte_AA7EE0, &unk_9A6AE4, 0x20u); dword_AA7F10 = 15; dword_AA7F0C = 0; byte_AA7EFC = 0; sub_4018E0(&byte_AA7EFC, &unk_9A6AC0, 0x20u); dword_AA7F2C = 15; dword_AA7F28 = 0; byte_AA7F18 = 0; sub_4018E0(&byte_AA7F18, &unk_9A6A9C, 0x20u); dword_AA7F48 = 15; dword_AA7F44 = 0; byte_AA7F34 = 0; sub_4018E0(&byte_AA7F34, &unk_9A6A78, 0x20u); dword_AA7F64 = 15; dword_AA7F60 = 0; byte_AA7F50 = 0; sub_4018E0(&byte_AA7F50, &unk_9A6A54, 0x20u); dword_AA7F80 = 15; dword_AA7F7C = 0; byte_AA7F6C = 0; sub_4018E0(&byte_AA7F6C, &unk_9A6A30, 0x20u); dword_AA7F9C = 15; dword_AA7F98 = 0; byte_AA7F88 = 0; sub_4018E0(&byte_AA7F88, &unk_9A6A0C, 0x20u); dword_AA7FB8 = 15; dword_AA7FB4 = 0; byte_AA7FA4 = 0; sub_4018E0(&byte_AA7FA4, &unk_9A69E8, 0x20u); dword_AA7FD4 = 15; dword_AA7FD0 = 0; byte_AA7FC0 = 0; sub_4018E0(&byte_AA7FC0, &unk_9A69C4, 0x20u); dword_AA7FF0 = 15; dword_AA7FEC = 0; byte_AA7FDC = 0; sub_4018E0(&byte_AA7FDC, &unk_9A69A0, 0x20u); dword_AA800C = 15; dword_AA8008 = 0; byte_AA7FF8 = 0; sub_4018E0(&byte_AA7FF8, &unk_9A697C, 0x20u); dword_AA8028 = 15; dword_AA8024 = 0; byte_AA8014 = 0; sub_4018E0(&byte_AA8014, &unk_9A6958, 0x20u); dword_AA8044 = 15; dword_AA8040 = 0; byte_AA8030 = 0; sub_4018E0(&byte_AA8030, &unk_9A6934, 0x20u); dword_AA8060 = 15; dword_AA805C = 0; byte_AA804C = 0; sub_4018E0(&byte_AA804C, &unk_9A6910, 0x20u); dword_AA807C = 15; dword_AA8078 = 0; byte_AA8068 = 0; sub_4018E0(&byte_AA8068, &unk_9A68EC, 0x20u); dword_AA8098 = 15; dword_AA8094 = 0; byte_AA8084 = 0; sub_4018E0(&byte_AA8084, &unk_9A68C8, 0x20u); dword_AA80B4 = 15; dword_AA80B0 = 0; byte_AA80A0 = 0; sub_4018E0(&byte_AA80A0, &unk_9A68A4, 0x20u); dword_AA80D0 = 15; dword_AA80CC = 0; byte_AA80BC = 0; sub_4018E0(&byte_AA80BC, &unk_9A6880, 0x20u); return atexit(sub_99F930); } // AA7594: using guessed type char byte_AA7594; // AA75A4: using guessed type int dword_AA75A4; // AA75A8: using guessed type int dword_AA75A8; // AA75B0: using guessed type char byte_AA75B0; // AA75C0: using guessed type int dword_AA75C0; // AA75C4: using guessed type int dword_AA75C4; // AA75CC: using guessed type char byte_AA75CC; // AA75DC: using guessed type int dword_AA75DC; // AA75E0: using guessed type int dword_AA75E0; // AA75E8: using guessed type char byte_AA75E8; // AA75F8: using guessed type int dword_AA75F8; // AA75FC: using guessed type int dword_AA75FC; // AA7604: using guessed type char byte_AA7604; // AA7614: using guessed type int dword_AA7614; // AA7618: using guessed type int dword_AA7618; // AA7620: using guessed type char byte_AA7620; // AA7630: using guessed type int dword_AA7630; // AA7634: using guessed type int dword_AA7634; // AA763C: using guessed type char byte_AA763C; // AA764C: using guessed type int dword_AA764C; // AA7650: using guessed type int dword_AA7650; // AA7658: using guessed type char byte_AA7658; // AA7668: using guessed type int dword_AA7668; // AA766C: using guessed type int dword_AA766C; // AA7674: using guessed type char byte_AA7674; // AA7684: using guessed type int dword_AA7684; // AA7688: using guessed type int dword_AA7688; // AA7690: using guessed type char byte_AA7690; // AA76A0: using guessed type int dword_AA76A0; // AA76A4: using guessed type int dword_AA76A4; // AA76AC: using guessed type char byte_AA76AC; // AA76BC: using guessed type int dword_AA76BC; // AA76C0: using guessed type int dword_AA76C0; // AA76C8: using guessed type char byte_AA76C8; // AA76D8: using guessed type int dword_AA76D8; // AA76DC: using guessed type int dword_AA76DC; // AA76E4: using guessed type char byte_AA76E4; // AA76F4: using guessed type int dword_AA76F4; // AA76F8: using guessed type int dword_AA76F8; // AA7700: using guessed type char byte_AA7700; // AA7710: using guessed type int dword_AA7710; // AA7714: using guessed type int dword_AA7714; // AA771C: using guessed type char byte_AA771C; // AA772C: using guessed type int dword_AA772C; // AA7730: using guessed type int dword_AA7730; // AA7738: using guessed type char byte_AA7738; // AA7748: using guessed type int dword_AA7748; // AA774C: using guessed type int dword_AA774C; // AA7754: using guessed type char byte_AA7754; // AA7764: using guessed type int dword_AA7764; // AA7768: using guessed type int dword_AA7768; // AA7770: using guessed type char byte_AA7770; // AA7780: using guessed type int dword_AA7780; // AA7784: using guessed type int dword_AA7784; // AA778C: using guessed type char byte_AA778C; // AA779C: using guessed type int dword_AA779C; // AA77A0: using guessed type int dword_AA77A0; // AA77A8: using guessed type char byte_AA77A8; // AA77B8: using guessed type int dword_AA77B8; // AA77BC: using guessed type int dword_AA77BC; // AA77C4: using guessed type char byte_AA77C4; // AA77D4: using guessed type int dword_AA77D4; // AA77D8: using guessed type int dword_AA77D8; // AA77E0: using guessed type char byte_AA77E0; // AA77F0: using guessed type int dword_AA77F0; // AA77F4: using guessed type int dword_AA77F4; // AA77FC: using guessed type char byte_AA77FC; // AA780C: using guessed type int dword_AA780C; // AA7810: using guessed type int dword_AA7810; // AA7818: using guessed type char byte_AA7818; // AA7828: using guessed type int dword_AA7828; // AA782C: using guessed type int dword_AA782C; // AA7834: using guessed type char byte_AA7834; // AA7844: using guessed type int dword_AA7844; // AA7848: using guessed type int dword_AA7848; // AA7850: using guessed type char byte_AA7850; // AA7860: using guessed type int dword_AA7860; // AA7864: using guessed type int dword_AA7864; // AA786C: using guessed type char byte_AA786C; // AA787C: using guessed type int dword_AA787C; // AA7880: using guessed type int dword_AA7880; // AA7888: using guessed type char byte_AA7888; // AA7898: using guessed type int dword_AA7898; // AA789C: using guessed type int dword_AA789C; // AA78A4: using guessed type char byte_AA78A4; // AA78B4: using guessed type int dword_AA78B4; // AA78B8: using guessed type int dword_AA78B8; // AA78C0: using guessed type char byte_AA78C0; // AA78D0: using guessed type int dword_AA78D0; // AA78D4: using guessed type int dword_AA78D4; // AA78DC: using guessed type char byte_AA78DC; // AA78EC: using guessed type int dword_AA78EC; // AA78F0: using guessed type int dword_AA78F0; // AA78F8: using guessed type char byte_AA78F8; // AA7908: using guessed type int dword_AA7908; // AA790C: using guessed type int dword_AA790C; // AA7914: using guessed type char byte_AA7914; // AA7924: using guessed type int dword_AA7924; // AA7928: using guessed type int dword_AA7928; // AA7930: using guessed type char byte_AA7930; // AA7940: using guessed type int dword_AA7940; // AA7944: using guessed type int dword_AA7944; // AA794C: using guessed type char byte_AA794C; // AA795C: using guessed type int dword_AA795C; // AA7960: using guessed type int dword_AA7960; // AA7968: using guessed type char byte_AA7968; // AA7978: using guessed type int dword_AA7978; // AA797C: using guessed type int dword_AA797C; // AA7984: using guessed type char byte_AA7984; // AA7994: using guessed type int dword_AA7994; // AA7998: using guessed type int dword_AA7998; // AA79A0: using guessed type char byte_AA79A0; // AA79B0: using guessed type int dword_AA79B0; // AA79B4: using guessed type int dword_AA79B4; // AA79BC: using guessed type char byte_AA79BC; // AA79CC: using guessed type int dword_AA79CC; // AA79D0: using guessed type int dword_AA79D0; // AA79D8: using guessed type char byte_AA79D8; // AA79E8: using guessed type int dword_AA79E8; // AA79EC: using guessed type int dword_AA79EC; // AA79F4: using guessed type char byte_AA79F4; // AA7A04: using guessed type int dword_AA7A04; // AA7A08: using guessed type int dword_AA7A08; // AA7A10: using guessed type char byte_AA7A10; // AA7A20: using guessed type int dword_AA7A20; // AA7A24: using guessed type int dword_AA7A24; // AA7A2C: using guessed type char byte_AA7A2C; // AA7A3C: using guessed type int dword_AA7A3C; // AA7A40: using guessed type int dword_AA7A40; // AA7A48: using guessed type char byte_AA7A48; // AA7A58: using guessed type int dword_AA7A58; // AA7A5C: using guessed type int dword_AA7A5C; // AA7A64: using guessed type char byte_AA7A64; // AA7A74: using guessed type int dword_AA7A74; // AA7A78: using guessed type int dword_AA7A78; // AA7A80: using guessed type char byte_AA7A80; // AA7A90: using guessed type int dword_AA7A90; // AA7A94: using guessed type int dword_AA7A94; // AA7A9C: using guessed type char byte_AA7A9C; // AA7AAC: using guessed type int dword_AA7AAC; // AA7AB0: using guessed type int dword_AA7AB0; // AA7AB8: using guessed type char byte_AA7AB8; // AA7AC8: using guessed type int dword_AA7AC8; // AA7ACC: using guessed type int dword_AA7ACC; // AA7AD4: using guessed type char byte_AA7AD4; // AA7AE4: using guessed type int dword_AA7AE4; // AA7AE8: using guessed type int dword_AA7AE8; // AA7AF0: using guessed type char byte_AA7AF0; // AA7B00: using guessed type int dword_AA7B00; // AA7B04: using guessed type int dword_AA7B04; // AA7B0C: using guessed type char byte_AA7B0C; // AA7B1C: using guessed type int dword_AA7B1C; // AA7B20: using guessed type int dword_AA7B20; // AA7B28: using guessed type char byte_AA7B28; // AA7B38: using guessed type int dword_AA7B38; // AA7B3C: using guessed type int dword_AA7B3C; // AA7B44: using guessed type char byte_AA7B44; // AA7B54: using guessed type int dword_AA7B54; // AA7B58: using guessed type int dword_AA7B58; // AA7B60: using guessed type char byte_AA7B60; // AA7B70: using guessed type int dword_AA7B70; // AA7B74: using guessed type int dword_AA7B74; // AA7B7C: using guessed type char byte_AA7B7C; // AA7B8C: using guessed type int dword_AA7B8C; // AA7B90: using guessed type int dword_AA7B90; // AA7B98: using guessed type char byte_AA7B98; // AA7BA8: using guessed type int dword_AA7BA8; // AA7BAC: using guessed type int dword_AA7BAC; // AA7BB4: using guessed type char byte_AA7BB4; // AA7BC4: using guessed type int dword_AA7BC4; // AA7BC8: using guessed type int dword_AA7BC8; // AA7BD0: using guessed type char byte_AA7BD0; // AA7BE0: using guessed type int dword_AA7BE0; // AA7BE4: using guessed type int dword_AA7BE4; // AA7BEC: using guessed type char byte_AA7BEC; // AA7BFC: using guessed type int dword_AA7BFC; // AA7C00: using guessed type int dword_AA7C00; // AA7C08: using guessed type char byte_AA7C08; // AA7C18: using guessed type int dword_AA7C18; // AA7C1C: using guessed type int dword_AA7C1C; // AA7C24: using guessed type char byte_AA7C24; // AA7C34: using guessed type int dword_AA7C34; // AA7C38: using guessed type int dword_AA7C38; // AA7C40: using guessed type char byte_AA7C40; // AA7C50: using guessed type int dword_AA7C50; // AA7C54: using guessed type int dword_AA7C54; // AA7C5C: using guessed type char byte_AA7C5C; // AA7C6C: using guessed type int dword_AA7C6C; // AA7C70: using guessed type int dword_AA7C70; // AA7C78: using guessed type char byte_AA7C78; // AA7C88: using guessed type int dword_AA7C88; // AA7C8C: using guessed type int dword_AA7C8C; // AA7C94: using guessed type char byte_AA7C94; // AA7CA4: using guessed type int dword_AA7CA4; // AA7CA8: using guessed type int dword_AA7CA8; // AA7CB0: using guessed type char byte_AA7CB0; // AA7CC0: using guessed type int dword_AA7CC0; // AA7CC4: using guessed type int dword_AA7CC4; // AA7CCC: using guessed type char byte_AA7CCC; // AA7CDC: using guessed type int dword_AA7CDC; // AA7CE0: using guessed type int dword_AA7CE0; // AA7CE8: using guessed type char byte_AA7CE8; // AA7CF8: using guessed type int dword_AA7CF8; // AA7CFC: using guessed type int dword_AA7CFC; // AA7D04: using guessed type char byte_AA7D04; // AA7D14: using guessed type int dword_AA7D14; // AA7D18: using guessed type int dword_AA7D18; // AA7D20: using guessed type char byte_AA7D20; // AA7D30: using guessed type int dword_AA7D30; // AA7D34: using guessed type int dword_AA7D34; // AA7D3C: using guessed type char byte_AA7D3C; // AA7D4C: using guessed type int dword_AA7D4C; // AA7D50: using guessed type int dword_AA7D50; // AA7D58: using guessed type char byte_AA7D58; // AA7D68: using guessed type int dword_AA7D68; // AA7D6C: using guessed type int dword_AA7D6C; // AA7D74: using guessed type char byte_AA7D74; // AA7D84: using guessed type int dword_AA7D84; // AA7D88: using guessed type int dword_AA7D88; // AA7D90: using guessed type char byte_AA7D90; // AA7DA0: using guessed type int dword_AA7DA0; // AA7DA4: using guessed type int dword_AA7DA4; // AA7DAC: using guessed type char byte_AA7DAC; // AA7DBC: using guessed type int dword_AA7DBC; // AA7DC0: using guessed type int dword_AA7DC0; // AA7DC8: using guessed type char byte_AA7DC8; // AA7DD8: using guessed type int dword_AA7DD8; // AA7DDC: using guessed type int dword_AA7DDC; // AA7DE4: using guessed type char byte_AA7DE4; // AA7DF4: using guessed type int dword_AA7DF4; // AA7DF8: using guessed type int dword_AA7DF8; // AA7E00: using guessed type char byte_AA7E00; // AA7E10: using guessed type int dword_AA7E10; // AA7E14: using guessed type int dword_AA7E14; // AA7E1C: using guessed type char byte_AA7E1C; // AA7E2C: using guessed type int dword_AA7E2C; // AA7E30: using guessed type int dword_AA7E30; // AA7E38: using guessed type char byte_AA7E38; // AA7E48: using guessed type int dword_AA7E48; // AA7E4C: using guessed type int dword_AA7E4C; // AA7E54: using guessed type char byte_AA7E54; // AA7E64: using guessed type int dword_AA7E64; // AA7E68: using guessed type int dword_AA7E68; // AA7E70: using guessed type char byte_AA7E70; // AA7E80: using guessed type int dword_AA7E80; // AA7E84: using guessed type int dword_AA7E84; // AA7E8C: using guessed type char byte_AA7E8C; // AA7E9C: using guessed type int dword_AA7E9C; // AA7EA0: using guessed type int dword_AA7EA0; // AA7EA8: using guessed type char byte_AA7EA8; // AA7EB8: using guessed type int dword_AA7EB8; // AA7EBC: using guessed type int dword_AA7EBC; // AA7EC4: using guessed type char byte_AA7EC4; // AA7ED4: using guessed type int dword_AA7ED4; // AA7ED8: using guessed type int dword_AA7ED8; // AA7EE0: using guessed type char byte_AA7EE0; // AA7EF0: using guessed type int dword_AA7EF0; // AA7EF4: using guessed type int dword_AA7EF4; // AA7EFC: using guessed type char byte_AA7EFC; // AA7F0C: using guessed type int dword_AA7F0C; // AA7F10: using guessed type int dword_AA7F10; // AA7F18: using guessed type char byte_AA7F18; // AA7F28: using guessed type int dword_AA7F28; // AA7F2C: using guessed type int dword_AA7F2C; // AA7F34: using guessed type char byte_AA7F34; // AA7F44: using guessed type int dword_AA7F44; // AA7F48: using guessed type int dword_AA7F48; // AA7F50: using guessed type char byte_AA7F50; // AA7F60: using guessed type int dword_AA7F60; // AA7F64: using guessed type int dword_AA7F64; // AA7F6C: using guessed type char byte_AA7F6C; // AA7F7C: using guessed type int dword_AA7F7C; // AA7F80: using guessed type int dword_AA7F80; // AA7F88: using guessed type char byte_AA7F88; // AA7F98: using guessed type int dword_AA7F98; // AA7F9C: using guessed type int dword_AA7F9C; // AA7FA4: using guessed type char byte_AA7FA4; // AA7FB4: using guessed type int dword_AA7FB4; // AA7FB8: using guessed type int dword_AA7FB8; // AA7FC0: using guessed type char byte_AA7FC0; // AA7FD0: using guessed type int dword_AA7FD0; // AA7FD4: using guessed type int dword_AA7FD4; // AA7FDC: using guessed type char byte_AA7FDC; // AA7FEC: using guessed type int dword_AA7FEC; // AA7FF0: using guessed type int dword_AA7FF0; // AA7FF8: using guessed type char byte_AA7FF8; // AA8008: using guessed type int dword_AA8008; // AA800C: using guessed type int dword_AA800C; // AA8014: using guessed type char byte_AA8014; // AA8024: using guessed type int dword_AA8024; // AA8028: using guessed type int dword_AA8028; // AA8030: using guessed type char byte_AA8030; // AA8040: using guessed type int dword_AA8040; // AA8044: using guessed type int dword_AA8044; // AA804C: using guessed type char byte_AA804C; // AA805C: using guessed type int dword_AA805C; // AA8060: using guessed type int dword_AA8060; // AA8068: using guessed type char byte_AA8068; // AA8078: using guessed type int dword_AA8078; // AA807C: using guessed type int dword_AA807C; // AA8084: using guessed type char byte_AA8084; // AA8094: using guessed type int dword_AA8094; // AA8098: using guessed type int dword_AA8098; // AA80A0: using guessed type char byte_AA80A0; // AA80B0: using guessed type int dword_AA80B0; // AA80B4: using guessed type int dword_AA80B4; // AA80BC: using guessed type char byte_AA80BC; // AA80CC: using guessed type int dword_AA80CC; // AA80D0: using guessed type int dword_AA80D0; //----- (0099A140) -------------------------------------------------------- _DWORD *sub_99A140() { return sub_861B10(&dword_AC9CAC, (int)"CharCreateFrameWork", (int)&dword_BA6A10); } // AC9CAC: using guessed type int dword_AC9CAC; // BA6A10: using guessed type int dword_BA6A10; //----- (0099A160) -------------------------------------------------------- _DWORD *sub_99A160() { return sub_861B10(&dword_AC9CB4, (int)"CharSelectFrameWork", (int)&dword_BA6A10); } // AC9CB4: using guessed type int dword_AC9CB4; // BA6A10: using guessed type int dword_BA6A10; //----- (0099A180) -------------------------------------------------------- void sub_99A180() { float v0; // ST00_4 v0 = 0.0 / 255.0; flt_AA8C78 = v0; flt_AA8C7C = v0; flt_AA8C80 = v0; } // AA8C78: using guessed type float flt_AA8C78; // AA8C7C: using guessed type float flt_AA8C7C; // AA8C80: using guessed type float flt_AA8C80; //----- (0099A1B0) -------------------------------------------------------- void sub_99A1B0() { int v0; // ST00_4 *(float *)&v0 = 0.0 / 255.0; dword_AA8C8C = v0; dword_AA8C90 = v0; } // AA8C8C: using guessed type int dword_AA8C8C; // AA8C90: using guessed type int dword_AA8C90; //----- (0099A1E0) -------------------------------------------------------- void sub_99A1E0() { *(float *)&dword_AA8CC0 = 0.0 / 255.0; } // AA8CC0: using guessed type int dword_AA8CC0; //----- (0099A1F0) -------------------------------------------------------- void sub_99A1F0() { flt_AA8CD0 = 0.0 / 255.0; } // AA8CD0: using guessed type float flt_AA8CD0; //----- (0099A200) -------------------------------------------------------- void sub_99A200() { flt_AA8D0C = 0.0 / 255.0; } // AA8D0C: using guessed type float flt_AA8D0C; //----- (0099A210) -------------------------------------------------------- void sub_99A210() { flt_AA8D20 = 0.0 / 255.0; } // AA8D20: using guessed type float flt_AA8D20; //----- (0099A220) -------------------------------------------------------- void sub_99A220() { flt_AA8D2C = 0.0 / 255.0; } // AA8D2C: using guessed type float flt_AA8D2C; //----- (0099A230) -------------------------------------------------------- void sub_99A230() { float v0; // ST00_4 v0 = 0.0 / 255.0; flt_AA8D7C = v0; flt_AA8D80 = v0; } // AA8D7C: using guessed type float flt_AA8D7C; // AA8D80: using guessed type float flt_AA8D80; //----- (0099A260) -------------------------------------------------------- void sub_99A260() { float v0; // ST00_4 v0 = 0.0 / 255.0; flt_AA8D88 = v0; flt_AA8D90 = v0; } // AA8D88: using guessed type float flt_AA8D88; // AA8D90: using guessed type float flt_AA8D90; //----- (0099A290) -------------------------------------------------------- void sub_99A290() { *(float *)&dword_AA8DA0 = 0.0 / 255.0; } // AA8DA0: using guessed type int dword_AA8DA0; //----- (0099A2A0) -------------------------------------------------------- int sub_99A2A0() { return atexit(sub_99F950); } //----- (0099A2B0) -------------------------------------------------------- int sub_99A2B0() { return atexit(sub_99F980); } //----- (0099A2C0) -------------------------------------------------------- _DWORD *sub_99A2C0() { signed int v0; // edx _DWORD *result; // eax v0 = 11; result = &unk_ACAF70; do { *(result - 2) = 12; *(result - 1) = 0; *result = 400; result[1] = 0; result[2] = 1; result[3] = 0; result[4] = 0; result[5] = 0; result[6] = &unk_9AAFCB; result[7] = 0; result += 13; --v0; } while ( v0 >= 0 ); return result; } //----- (0099A310) -------------------------------------------------------- int sub_99A310() { `eh vector constructor iterator'( dword_ACB1D8, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_99F9B0); } //----- (0099A340) -------------------------------------------------------- int sub_99A340() { dword_AA96B4 = (int)operator new[](0x94u); memset((void *)dword_AA96B4, 0, 4 * dword_AA96B0); byte_AA96BC = 1; off_AA96AC = &NiTStringMap>::`vftable'; return atexit(sub_99FA00); } // 9AC010: using guessed type void *NiTStringMap>::`vftable'; // AA96AC: using guessed type void **off_AA96AC; // AA96B0: using guessed type int dword_AA96B0; // AA96B4: using guessed type int dword_AA96B4; // AA96BC: using guessed type char byte_AA96BC; //----- (0099A3A0) -------------------------------------------------------- int sub_99A3A0() { dword_AA96C8 = (int)operator new[](0x94u); memset((void *)dword_AA96C8, 0, 4 * dword_AA96C4); byte_AA96D0 = 1; off_AA96C0 = &NiTStringMap>::`vftable'; return atexit(sub_99FA10); } // 9AC030: using guessed type void *NiTStringMap>::`vftable'; // AA96C0: using guessed type void **off_AA96C0; // AA96C4: using guessed type int dword_AA96C4; // AA96C8: using guessed type int dword_AA96C8; // AA96D0: using guessed type char byte_AA96D0; //----- (0099A400) -------------------------------------------------------- int sub_99A400() { sub_74A220(&unk_ACB24C); dword_ACB248 = (int)&ItemMixDataTab::`vftable'; return atexit(sub_99FA20); } // 9AC8BC: using guessed type void *ItemMixDataTab::`vftable'; // ACB248: using guessed type int dword_ACB248; //----- (0099A420) -------------------------------------------------------- int __thiscall sub_99A420(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; sub_434000(&unk_ACB29C, (char *)&v2 + 3, (int)&v2 + 3); return atexit(sub_99FA40); } //----- (0099A450) -------------------------------------------------------- int sub_99A450() { return atexit(sub_99FA90); } //----- (0099A460) -------------------------------------------------------- int sub_99A460() { `eh vector constructor iterator'( dword_ACB2F0, 4u, 32, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_99FAC0); } //----- (0099A490) -------------------------------------------------------- int sub_99A490() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x24u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_ACCF8C = v0; *v0 = v0; *((_DWORD *)dword_ACCF8C + 1) = dword_ACCF8C; return atexit(sub_99FB90); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099A4F0) -------------------------------------------------------- _DWORD *sub_99A4F0() { return sub_861B10(&unk_ACD0B4, (int)"MaskShader", (int)&unk_BA6CB4); } //----- (0099A510) -------------------------------------------------------- int sub_99A510() { return atexit(sub_99FBB0); } //----- (0099A520) -------------------------------------------------------- int sub_99A520() { return atexit(sub_99FBE0); } //----- (0099A530) -------------------------------------------------------- _DWORD *sub_99A530() { return sub_861B10(&unk_ACD0C4, (int)"MaskShader_NoAlphaBlend", (int)&unk_ACD0B4); } //----- (0099A550) -------------------------------------------------------- int sub_99A550() { return atexit(sub_99FC10); } //----- (0099A560) -------------------------------------------------------- int sub_99A560() { return atexit(sub_99FC40); } //----- (0099A570) -------------------------------------------------------- int sub_99A570() { return atexit(sub_99FC70); } //----- (0099A580) -------------------------------------------------------- int sub_99A580() { sub_4A01F0(&unk_ACDC6C); return atexit(sub_99FD60); } //----- (0099A5A0) -------------------------------------------------------- signed int sub_99A5A0() { signed int result; // eax result = sub_804020(); dword_ACDDC0 = result; return result; } // ACDDC0: using guessed type int dword_ACDDC0; //----- (0099A5B0) -------------------------------------------------------- signed int sub_99A5B0() { signed int result; // eax result = sub_804510(); dword_ACDDBC = result; return result; } // ACDDBC: using guessed type int dword_ACDDBC; //----- (0099A5C0) -------------------------------------------------------- signed int sub_99A5C0() { signed int result; // eax result = sub_804BB0(); dword_ACDDC8 = result; return result; } // ACDDC8: using guessed type int dword_ACDDC8; //----- (0099A5D0) -------------------------------------------------------- signed int sub_99A5D0() { signed int result; // eax result = sub_805670(); dword_ACDDB4 = result; return result; } // ACDDB4: using guessed type int dword_ACDDB4; //----- (0099A5E0) -------------------------------------------------------- signed int sub_99A5E0() { signed int result; // eax result = sub_805CF0(); dword_ACDDA8 = result; return result; } // ACDDA8: using guessed type int dword_ACDDA8; //----- (0099A5F0) -------------------------------------------------------- signed int sub_99A5F0() { signed int result; // eax result = sub_806200(); dword_ACDD90 = result; return result; } // ACDD90: using guessed type int dword_ACDD90; //----- (0099A600) -------------------------------------------------------- signed int sub_99A600() { signed int result; // eax result = sub_806520(); dword_ACDD78 = result; return result; } // ACDD78: using guessed type int dword_ACDD78; //----- (0099A610) -------------------------------------------------------- signed int sub_99A610() { signed int result; // eax result = sub_806A70(); dword_ACDDA4 = result; return result; } // ACDDA4: using guessed type int dword_ACDDA4; //----- (0099A620) -------------------------------------------------------- signed int sub_99A620() { signed int result; // eax result = sub_8071E0(); dword_ACDD94 = result; return result; } // ACDD94: using guessed type int dword_ACDD94; //----- (0099A630) -------------------------------------------------------- signed int sub_99A630() { signed int result; // eax result = sub_807610(); dword_ACDDCC = result; return result; } // ACDDCC: using guessed type int dword_ACDDCC; //----- (0099A640) -------------------------------------------------------- signed int sub_99A640() { signed int result; // eax result = sub_8078B0(); dword_ACDDAC = result; return result; } // ACDDAC: using guessed type int dword_ACDDAC; //----- (0099A650) -------------------------------------------------------- signed int sub_99A650() { signed int result; // eax result = sub_807B60(); dword_ACDD8C = result; return result; } // ACDD8C: using guessed type int dword_ACDD8C; //----- (0099A660) -------------------------------------------------------- signed int sub_99A660() { signed int result; // eax result = sub_807E20(); dword_ACDDC4 = result; return result; } // ACDDC4: using guessed type int dword_ACDDC4; //----- (0099A670) -------------------------------------------------------- signed int sub_99A670() { signed int result; // eax result = sub_808AA0(); dword_ACDD80 = result; return result; } // ACDD80: using guessed type int dword_ACDD80; //----- (0099A680) -------------------------------------------------------- signed int sub_99A680() { signed int result; // eax result = sub_8094D0(); dword_ACDDA0 = result; return result; } // ACDDA0: using guessed type int dword_ACDDA0; //----- (0099A690) -------------------------------------------------------- signed int sub_99A690() { signed int result; // eax result = sub_809B20(); dword_ACDD88 = result; return result; } // ACDD88: using guessed type int dword_ACDD88; //----- (0099A6A0) -------------------------------------------------------- signed int sub_99A6A0() { signed int result; // eax result = sub_809DE0(); dword_ACDD9C = result; return result; } // ACDD9C: using guessed type int dword_ACDD9C; //----- (0099A6B0) -------------------------------------------------------- signed int sub_99A6B0() { signed int result; // eax result = sub_80A030(); dword_ACDD7C = result; return result; } // ACDD7C: using guessed type int dword_ACDD7C; //----- (0099A6C0) -------------------------------------------------------- signed int sub_99A6C0() { signed int result; // eax result = sub_80A1F0(); dword_ACDD74 = result; return result; } // ACDD74: using guessed type int dword_ACDD74; //----- (0099A6D0) -------------------------------------------------------- signed int sub_99A6D0() { signed int result; // eax result = sub_80A4E0(); dword_ACDD84 = result; return result; } // ACDD84: using guessed type int dword_ACDD84; //----- (0099A6E0) -------------------------------------------------------- signed int sub_99A6E0() { signed int result; // eax result = sub_80A7C0(); dword_ACDDB0 = result; return result; } // ACDDB0: using guessed type int dword_ACDDB0; //----- (0099A6F0) -------------------------------------------------------- void *sub_99A6F0() { int v0; // ecx v0 = dword_BA3BA4++; if ( !v0 ) sub_8AA170((int)sub_80A850, (int)sub_80AD00); return &unk_ACDDB8; } // BA3BA4: using guessed type int dword_BA3BA4; //----- (0099A700) -------------------------------------------------------- void *sub_99A700() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_ACDD9B; } // BA4504: using guessed type int dword_BA4504; //----- (0099A710) -------------------------------------------------------- void *sub_99A710() { return sub_88C510(&unk_ACDD99); } //----- (0099A720) -------------------------------------------------------- void *sub_99A720() { int v0; // ecx v0 = dword_BA4BF4++; if ( !v0 ) sub_8AA170((int)sub_893060, (int)sub_893390); return &unk_ACDD98; } // 893060: using guessed type int sub_893060(); // BA4BF4: using guessed type int dword_BA4BF4; //----- (0099A730) -------------------------------------------------------- void *sub_99A730() { int v0; // ecx v0 = dword_BA5374++; if ( !v0 ) sub_8AA170((int)sub_8AB600, (int)sub_8AB650); return &unk_ACDD9A; } // 8AB600: using guessed type int sub_8AB600(); // BA5374: using guessed type int dword_BA5374; //----- (0099A740) -------------------------------------------------------- int sub_99A740() { sub_4018E0(&dword_AAE1D0, "ResEleRoot", 0xAu); return atexit(sub_9A12A0); } //----- (0099A760) -------------------------------------------------------- int sub_99A760() { sub_4018E0(&dword_AAE1EC, "Rooot", 5u); return atexit(sub_9A12D0); } //----- (0099A780) -------------------------------------------------------- int sub_99A780() { sub_4018E0(&dword_AAE208, "Root", 4u); return atexit(sub_9A1300); } //----- (0099A7A0) -------------------------------------------------------- int sub_99A7A0() { sub_4018E0(&dword_AAE224, "Wall", 4u); return atexit(sub_9A1330); } //----- (0099A7C0) -------------------------------------------------------- int sub_99A7C0() { sub_4018E0(&dword_AAE240, "Floor", 5u); return atexit(sub_9A1360); } //----- (0099A7E0) -------------------------------------------------------- int sub_99A7E0() { sub_4018E0(&dword_AAE25C, "Roof", 4u); return atexit(sub_9A1390); } //----- (0099A800) -------------------------------------------------------- int sub_99A800() { sub_4018E0(&dword_AAE278, "RootBlock", 9u); return atexit(sub_9A13C0); } //----- (0099A820) -------------------------------------------------------- int sub_99A820() { sub_4018E0(&dword_AAE294, "T", 1u); return atexit(sub_9A13F0); } //----- (0099A840) -------------------------------------------------------- int sub_99A840() { sub_4018E0(&dword_AAE2B0, "R", 1u); return atexit(sub_9A1420); } //----- (0099A860) -------------------------------------------------------- int sub_99A860() { sub_4018E0(&dword_AAE2CC, "MHBasic", 7u); return atexit(sub_9A1450); } //----- (0099A880) -------------------------------------------------------- int sub_99A880() { sub_4018E0(&dword_AAE2E8, "CollNode", 8u); return atexit(sub_9A1480); } //----- (0099A8A0) -------------------------------------------------------- int sub_99A8A0() { sub_4018E0(&dword_AAE304, "GeomNode", 8u); return atexit(sub_9A14B0); } //----- (0099A8C0) -------------------------------------------------------- int sub_99A8C0() { sub_4018E0(&dword_AAE320, "Pick", 4u); return atexit(sub_9A14E0); } //----- (0099A8E0) -------------------------------------------------------- int sub_99A8E0() { sub_4018E0(&dword_AAE33C, "None", 4u); return atexit(sub_9A1510); } //----- (0099A900) -------------------------------------------------------- int sub_99A900() { sub_4018E0(&dword_AAE358, "LightAmbNormal", 0xEu); return atexit(sub_9A1540); } //----- (0099A920) -------------------------------------------------------- int sub_99A920() { sub_4018E0(&dword_AAE374, "LightAmbMoveOK", 0xEu); return atexit(sub_9A1570); } //----- (0099A940) -------------------------------------------------------- int sub_99A940() { sub_4018E0(&dword_AAE390, "LightAmbMoveNO", 0xEu); return atexit(sub_9A15A0); } //----- (0099A960) -------------------------------------------------------- int sub_99A960() { sub_4018E0(&dword_AAE3AC, "LightAmbMoveRepair", 0x12u); return atexit(sub_9A15D0); } //----- (0099A980) -------------------------------------------------------- int sub_99A980() { sub_4018E0(&dword_AAE3C8, "CharColiNode", 0xCu); return atexit(sub_9A1600); } //----- (0099A9A0) -------------------------------------------------------- int sub_99A9A0() { sub_4018E0(&dword_AAE3E4, "_CharShine_", 0xBu); return atexit(sub_9A1630); } //----- (0099A9C0) -------------------------------------------------------- int sub_99A9C0() { sub_4018E0(&dword_AAE400, "_CharShine_Other_", 0x11u); return atexit(sub_9A1660); } //----- (0099A9E0) -------------------------------------------------------- int sub_99A9E0() { char *v0; // eax v0 = (char *)type_info::name((type_info *)&CBaseObject `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_ACDE00, 0, v0, 0, (int)nullsub_6); return atexit(sub_9A1730); } //----- (0099AA10) -------------------------------------------------------- int sub_99AA10() { char *v0; // eax v0 = (char *)type_info::name( (type_info *)&CWorldConfig `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_ACDDD0, 0, v0, (int)&dword_ACDE00, (int)sub_8E6AE0); return atexit(sub_9A1690); } //----- (0099AA50) -------------------------------------------------------- _DWORD *sub_99AA50() { return sub_861B10(&dword_ACE084, (int)"AccountFrameWork", (int)&dword_BA6A10); } // ACE084: using guessed type int dword_ACE084; // BA6A10: using guessed type int dword_BA6A10; //----- (0099AA70) -------------------------------------------------------- _DWORD *sub_99AA70() { return sub_861B10(&dword_ACE160, (int)"LoginWorldNetFrameWork", (int)&dword_BA6A10); } // ACE160: using guessed type int dword_ACE160; // BA6A10: using guessed type int dword_BA6A10; //----- (0099AA90) -------------------------------------------------------- _DWORD *sub_99AA90() { return sub_861B10(&dword_ACE3B8, (int)"ZoneLoginNetFrameWork", (int)&dword_BA6A10); } // ACE3B8: using guessed type int dword_ACE3B8; // BA6A10: using guessed type int dword_BA6A10; //----- (0099AAB0) -------------------------------------------------------- int sub_99AAB0() { sub_4018E0(&dword_AAE834, "Wall", 4u); return atexit(sub_9A1830); } //----- (0099AAD0) -------------------------------------------------------- int sub_99AAD0() { sub_4018E0(&dword_AAE850, "Floor", 5u); return atexit(sub_9A1860); } //----- (0099AAF0) -------------------------------------------------------- int sub_99AAF0() { sub_4018E0(&dword_AAE86C, "Roof", 4u); return atexit(sub_9A1890); } //----- (0099AB10) -------------------------------------------------------- int sub_99AB10() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x10u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_ACEA90 = v0; *v0 = v0; *((_DWORD *)dword_ACEA90 + 1) = dword_ACEA90; return atexit(sub_9A18C0); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099AB70) -------------------------------------------------------- _DWORD *sub_99AB70() { return sub_861B10(&dword_ACEB04, (int)"GameFrameWork", (int)&dword_BA6A10); } // ACEB04: using guessed type int dword_ACEB04; // BA6A10: using guessed type int dword_BA6A10; //----- (0099AB90) -------------------------------------------------------- int sub_99AB90() { sub_4018E0(&lpOutputString, &unk_9BC53A, 0); return atexit(sub_9A1A00); } //----- (0099ABB0) -------------------------------------------------------- int sub_99ABB0() { return atexit(sub_9A1A30); } //----- (0099ABC0) -------------------------------------------------------- int sub_99ABC0() { strncpy(dword_ACEB0C, &byte_9BC53B, 0x14u); return atexit(nullsub_50); } //----- (0099ABE0) -------------------------------------------------------- _DWORD *sub_99ABE0() { return sub_861B10(&unk_ACEC28, (int)"InvWin", (int)&unk_BA6A8C); } //----- (0099AC00) -------------------------------------------------------- int sub_99AC00() { return atexit(sub_9A1AC0); } //----- (0099AC10) -------------------------------------------------------- int sub_99AC10() { return atexit(sub_9A1AF0); } //----- (0099AC20) -------------------------------------------------------- int sub_99AC20() { return atexit(sub_9A1B20); } //----- (0099AC30) -------------------------------------------------------- int sub_99AC30() { return atexit(sub_9A1B50); } //----- (0099AC40) -------------------------------------------------------- int sub_99AC40() { return atexit(sub_9A1B80); } //----- (0099AC50) -------------------------------------------------------- int sub_99AC50() { return atexit(sub_9A1BB0); } //----- (0099AC60) -------------------------------------------------------- int sub_99AC60() { return atexit(sub_9A1BE0); } //----- (0099AC70) -------------------------------------------------------- int sub_99AC70() { return atexit(sub_9A1C10); } //----- (0099AC80) -------------------------------------------------------- int sub_99AC80() { return atexit(sub_9A1C40); } //----- (0099AC90) -------------------------------------------------------- int sub_99AC90() { return atexit(sub_9A1C70); } //----- (0099ACA0) -------------------------------------------------------- int sub_99ACA0() { return atexit(sub_9A1CA0); } //----- (0099ACB0) -------------------------------------------------------- int sub_99ACB0() { return atexit(sub_9A1CD0); } //----- (0099ACC0) -------------------------------------------------------- int sub_99ACC0() { return atexit(sub_9A1D00); } //----- (0099ACD0) -------------------------------------------------------- int sub_99ACD0() { return atexit(sub_9A1D30); } //----- (0099ACE0) -------------------------------------------------------- int sub_99ACE0() { return atexit(sub_9A1D60); } //----- (0099ACF0) -------------------------------------------------------- int sub_99ACF0() { return atexit(sub_9A1D90); } //----- (0099AD00) -------------------------------------------------------- int sub_99AD00() { return atexit(sub_9A1DC0); } //----- (0099AD10) -------------------------------------------------------- int sub_99AD10() { return atexit(sub_9A1DF0); } //----- (0099AD20) -------------------------------------------------------- int sub_99AD20() { return atexit(sub_9A1E20); } //----- (0099AD30) -------------------------------------------------------- int sub_99AD30() { return atexit(sub_9A1E50); } //----- (0099AD40) -------------------------------------------------------- int sub_99AD40() { return atexit(sub_9A1E80); } //----- (0099AD50) -------------------------------------------------------- int sub_99AD50() { return atexit(sub_9A1EB0); } //----- (0099AD60) -------------------------------------------------------- int sub_99AD60() { return atexit(sub_9A1EE0); } //----- (0099AD70) -------------------------------------------------------- int sub_99AD70() { return atexit(sub_9A1F10); } //----- (0099AD80) -------------------------------------------------------- int sub_99AD80() { return atexit(sub_9A1F40); } //----- (0099AD90) -------------------------------------------------------- int sub_99AD90() { return atexit(sub_9A1F70); } //----- (0099ADA0) -------------------------------------------------------- int sub_99ADA0() { return atexit(sub_9A1FA0); } //----- (0099ADB0) -------------------------------------------------------- int sub_99ADB0() { return atexit(sub_9A1FD0); } //----- (0099ADC0) -------------------------------------------------------- int sub_99ADC0() { return atexit(sub_9A2000); } //----- (0099ADD0) -------------------------------------------------------- int sub_99ADD0() { return atexit(sub_9A2030); } //----- (0099ADE0) -------------------------------------------------------- int sub_99ADE0() { return atexit(sub_9A2060); } //----- (0099ADF0) -------------------------------------------------------- int sub_99ADF0() { return atexit(sub_9A2090); } //----- (0099AE00) -------------------------------------------------------- int sub_99AE00() { return atexit(sub_9A20C0); } //----- (0099AE10) -------------------------------------------------------- int sub_99AE10() { return atexit(sub_9A20F0); } //----- (0099AE20) -------------------------------------------------------- int sub_99AE20() { return atexit(sub_9A2120); } //----- (0099AE30) -------------------------------------------------------- int sub_99AE30() { return atexit(sub_9A2150); } //----- (0099AE40) -------------------------------------------------------- int sub_99AE40() { return atexit(sub_9A2180); } //----- (0099AE50) -------------------------------------------------------- int sub_99AE50() { return atexit(sub_9A21B0); } //----- (0099AE60) -------------------------------------------------------- int sub_99AE60() { return atexit(sub_9A21E0); } //----- (0099AE70) -------------------------------------------------------- int sub_99AE70() { return atexit(sub_9A2210); } //----- (0099AE80) -------------------------------------------------------- int sub_99AE80() { return atexit(sub_9A2240); } //----- (0099AE90) -------------------------------------------------------- int sub_99AE90() { return atexit(sub_9A2270); } //----- (0099AEA0) -------------------------------------------------------- int sub_99AEA0() { return atexit(sub_9A22A0); } //----- (0099AEB0) -------------------------------------------------------- int sub_99AEB0() { return atexit(sub_9A22D0); } //----- (0099AEC0) -------------------------------------------------------- int sub_99AEC0() { return atexit(sub_9A2300); } //----- (0099AED0) -------------------------------------------------------- int sub_99AED0() { return atexit(sub_9A2330); } //----- (0099AEE0) -------------------------------------------------------- int sub_99AEE0() { return atexit(sub_9A2360); } //----- (0099AEF0) -------------------------------------------------------- int sub_99AEF0() { return atexit(sub_9A2390); } //----- (0099AF00) -------------------------------------------------------- int sub_99AF00() { return atexit(sub_9A23C0); } //----- (0099AF10) -------------------------------------------------------- int sub_99AF10() { return atexit(sub_9A23F0); } //----- (0099AF20) -------------------------------------------------------- int sub_99AF20() { return atexit(sub_9A2420); } //----- (0099AF30) -------------------------------------------------------- int sub_99AF30() { return atexit(sub_9A2450); } //----- (0099AF40) -------------------------------------------------------- int sub_99AF40() { return atexit(sub_9A2480); } //----- (0099AF50) -------------------------------------------------------- int sub_99AF50() { return atexit(sub_9A24B0); } //----- (0099AF60) -------------------------------------------------------- int sub_99AF60() { return atexit(sub_9A24E0); } //----- (0099AF70) -------------------------------------------------------- int sub_99AF70() { return atexit(sub_9A2510); } //----- (0099AF80) -------------------------------------------------------- int sub_99AF80() { return atexit(sub_9A2540); } //----- (0099AF90) -------------------------------------------------------- int sub_99AF90() { return atexit(sub_9A2570); } //----- (0099AFA0) -------------------------------------------------------- int sub_99AFA0() { return atexit(sub_9A25A0); } //----- (0099AFB0) -------------------------------------------------------- int sub_99AFB0() { return atexit(sub_9A25D0); } //----- (0099AFC0) -------------------------------------------------------- int sub_99AFC0() { return atexit(sub_9A2600); } //----- (0099AFD0) -------------------------------------------------------- int sub_99AFD0() { return atexit(sub_9A2630); } //----- (0099AFE0) -------------------------------------------------------- int sub_99AFE0() { return atexit(sub_9A2660); } //----- (0099AFF0) -------------------------------------------------------- int sub_99AFF0() { return atexit(sub_9A2690); } //----- (0099B000) -------------------------------------------------------- int sub_99B000() { return atexit(sub_9A26C0); } //----- (0099B010) -------------------------------------------------------- int sub_99B010() { return atexit(sub_9A26F0); } //----- (0099B020) -------------------------------------------------------- int sub_99B020() { return atexit(sub_9A2720); } //----- (0099B030) -------------------------------------------------------- int sub_99B030() { return atexit(sub_9A2750); } //----- (0099B040) -------------------------------------------------------- int sub_99B040() { return atexit(sub_9A2780); } //----- (0099B050) -------------------------------------------------------- int sub_99B050() { return atexit(sub_9A27B0); } //----- (0099B060) -------------------------------------------------------- int sub_99B060() { return atexit(sub_9A27E0); } //----- (0099B070) -------------------------------------------------------- int sub_99B070() { return atexit(sub_9A2820); } //----- (0099B080) -------------------------------------------------------- int sub_99B080() { return atexit(sub_9A2850); } //----- (0099B090) -------------------------------------------------------- int sub_99B090() { return atexit(sub_9A2880); } //----- (0099B0A0) -------------------------------------------------------- int sub_99B0A0() { return atexit(sub_9A28C0); } //----- (0099B0B0) -------------------------------------------------------- _DWORD *sub_99B0B0() { return sub_861B10(&unk_AD0C3C, (int)"QuestPigeonEffect", (int)&unk_B91244); } //----- (0099B0D0) -------------------------------------------------------- int sub_99B0D0() { `eh vector constructor iterator'( dword_AD0C58, 4u, 576, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_9A2940); } //----- (0099B100) -------------------------------------------------------- int sub_99B100() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_AD155C = v0; *v0 = v0; *((_DWORD *)dword_AD155C + 1) = dword_AD155C; *((_DWORD *)dword_AD155C + 2) = dword_AD155C; *((_BYTE *)dword_AD155C + 20) = 1; *((_BYTE *)dword_AD155C + 21) = 1; return atexit(sub_9A2960); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099B180) -------------------------------------------------------- int sub_99B180() { return atexit(sub_9A29C0); } //----- (0099B190) -------------------------------------------------------- int sub_99B190() { `eh vector constructor iterator'( dword_AD1578, 4u, 36, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_9A2A40); } //----- (0099B1C0) -------------------------------------------------------- int sub_99B1C0() { return atexit(sub_9A2A60); } //----- (0099B1D0) -------------------------------------------------------- int sub_99B1D0() { return atexit(sub_9A2AE0); } //----- (0099B1E0) -------------------------------------------------------- int sub_99B1E0() { return atexit(sub_9A2B10); } //----- (0099B1F0) -------------------------------------------------------- int sub_99B1F0() { sub_632BA0(&dword_AD46F0); return atexit(sub_9A2B90); } // AD46F0: using guessed type int dword_AD46F0; //----- (0099B210) -------------------------------------------------------- int sub_99B210() { `eh vector constructor iterator'( dword_AD8974, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_9A2C20); } //----- (0099B240) -------------------------------------------------------- int sub_99B240() { `eh vector constructor iterator'( dword_AD89A4, 4u, 12, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_9A2C40); } //----- (0099B270) -------------------------------------------------------- int sub_99B270() { return atexit(sub_9A2C60); } //----- (0099B280) -------------------------------------------------------- int sub_99B280() { return atexit(sub_9A2C90); } //----- (0099B290) -------------------------------------------------------- int sub_99B290() { return atexit(sub_9A2CC0); } //----- (0099B2A0) -------------------------------------------------------- int sub_99B2A0() { sub_63BAB0(byte_AD8A08); return atexit(sub_9A2CF0); } //----- (0099B2C0) -------------------------------------------------------- int sub_99B2C0() { return atexit(sub_9A2D00); } //----- (0099B2D0) -------------------------------------------------------- int sub_99B2D0() { return atexit(sub_9A2D30); } //----- (0099B2E0) -------------------------------------------------------- int sub_99B2E0() { return atexit(sub_9A2D60); } //----- (0099B2F0) -------------------------------------------------------- _DWORD *sub_99B2F0() { return sub_861B10(&dword_AD8BCC, (int)"LinkFrameWork", (int)&dword_BA6A10); } // AD8BCC: using guessed type int dword_AD8BCC; // BA6A10: using guessed type int dword_BA6A10; //----- (0099B310) -------------------------------------------------------- _DWORD *sub_99B310() { return sub_861B10(&dword_AD8BD8, (int)"LoadingFrameWork", (int)&dword_BA6A10); } // AD8BD8: using guessed type int dword_AD8BD8; // BA6A10: using guessed type int dword_BA6A10; //----- (0099B330) -------------------------------------------------------- int sub_99B330() { return atexit(sub_9A2D90); } //----- (0099B340) -------------------------------------------------------- _DWORD *sub_99B340() { return sub_861B10(&dword_AD8BEC, (int)"CHairShopFrameWork", (int)&dword_BA6A10); } // AD8BEC: using guessed type int dword_AD8BEC; // BA6A10: using guessed type int dword_BA6A10; //----- (0099B360) -------------------------------------------------------- int sub_99B360() { dword_AB35F8 = operator new[](0x94u); memset(dword_AB35F8, 0, 4 * dword_AB35F4); off_AB35F0 = &NiTMap::`vftable'; return atexit(sub_9A2E10); } // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB35F0: using guessed type void **off_AB35F0; // AB35F4: using guessed type int dword_AB35F4; //----- (0099B3B0) -------------------------------------------------------- int sub_99B3B0() { dword_AB3608 = operator new[](0x94u); memset(dword_AB3608, 0, 4 * dword_AB3604); off_AB3600 = &NiTMap::`vftable'; return atexit(sub_9A2E90); } // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3600: using guessed type void **off_AB3600; // AB3604: using guessed type int dword_AB3604; //----- (0099B400) -------------------------------------------------------- int sub_99B400() { dword_AB3618 = operator new[](0x94u); memset(dword_AB3618, 0, 4 * dword_AB3614); off_AB3610 = &NiTMap::`vftable'; return atexit(sub_9A2F10); } // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3610: using guessed type void **off_AB3610; // AB3614: using guessed type int dword_AB3614; //----- (0099B450) -------------------------------------------------------- int sub_99B450() { dword_AB3628 = operator new[](0x94u); memset(dword_AB3628, 0, 4 * dword_AB3624); off_AB3620 = &NiTMap::`vftable'; return atexit(sub_9A2F90); } // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3620: using guessed type void **off_AB3620; // AB3624: using guessed type int dword_AB3624; //----- (0099B4A0) -------------------------------------------------------- int sub_99B4A0() { dword_AB3638 = operator new[](0x94u); memset(dword_AB3638, 0, 4 * dword_AB3634); off_AB3630 = &NiTMap::`vftable'; return atexit(sub_9A3010); } // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3630: using guessed type void **off_AB3630; // AB3634: using guessed type int dword_AB3634; //----- (0099B4F0) -------------------------------------------------------- int sub_99B4F0() { sub_747420(&unk_AD8C08); return atexit(sub_9A3090); } //----- (0099B510) -------------------------------------------------------- int sub_99B510() { sub_665CB0(dword_AD8C90); return atexit(sub_9A3110); } //----- (0099B530) -------------------------------------------------------- int sub_99B530() { sub_66E7F0(&unk_AD8D28); return atexit(sub_9A3120); } //----- (0099B550) -------------------------------------------------------- int sub_99B550() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_AD91F4 = v0; *v0 = v0; *((_DWORD *)dword_AD91F4 + 1) = dword_AD91F4; *((_DWORD *)dword_AD91F4 + 2) = dword_AD91F4; *((_BYTE *)dword_AD91F4 + 20) = 1; *((_BYTE *)dword_AD91F4 + 21) = 1; return atexit(sub_9A3430); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099B5D0) -------------------------------------------------------- int sub_99B5D0() { return atexit(sub_9A3130); } //----- (0099B5E0) -------------------------------------------------------- int sub_99B5E0() { return atexit(sub_9A3160); } //----- (0099B5F0) -------------------------------------------------------- int sub_99B5F0() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_AD920C = v0; *v0 = v0; *((_DWORD *)dword_AD920C + 1) = dword_AD920C; *((_DWORD *)dword_AD920C + 2) = dword_AD920C; *((_BYTE *)dword_AD920C + 20) = 1; *((_BYTE *)dword_AD920C + 21) = 1; return atexit(sub_9A3370); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099B670) -------------------------------------------------------- int sub_99B670() { return atexit(sub_9A3290); } //----- (0099B680) -------------------------------------------------------- int sub_99B680() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_AD921C = v0; *v0 = v0; *((_DWORD *)dword_AD921C + 1) = dword_AD921C; *((_DWORD *)dword_AD921C + 2) = dword_AD921C; *((_BYTE *)dword_AD921C + 20) = 1; *((_BYTE *)dword_AD921C + 21) = 1; return atexit(sub_9A33D0); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099B700) -------------------------------------------------------- int sub_99B700() { return atexit(sub_9A3190); } //----- (0099B710) -------------------------------------------------------- int sub_99B710() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_AD922C = v0; *v0 = v0; *((_DWORD *)dword_AD922C + 1) = dword_AD922C; *((_DWORD *)dword_AD922C + 2) = dword_AD922C; *((_BYTE *)dword_AD922C + 20) = 1; *((_BYTE *)dword_AD922C + 21) = 1; return atexit(sub_9A3310); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099B790) -------------------------------------------------------- int sub_99B790() { return atexit(sub_9A3210); } //----- (0099B7A0) -------------------------------------------------------- int sub_99B7A0() { sub_682310((int)byte_AD9238); return atexit(sub_9A3490); } //----- (0099B7C0) -------------------------------------------------------- int sub_99B7C0() { sub_74DC10(&dword_AD9E70); dword_AD9E70 = (int)&ItemAuthority::`vftable'; return atexit(sub_9A34A0); } // 9F4D20: using guessed type void *ItemAuthority::`vftable'; // AD9E70: using guessed type int dword_AD9E70; //----- (0099B7E0) -------------------------------------------------------- int sub_99B7E0() { sub_6834E0(&unk_ADA1E0); return atexit(sub_9A34C0); } //----- (0099B800) -------------------------------------------------------- _DWORD *sub_99B800() { return sub_861B10(&unk_ADA224, (int)"DynaminUV", (int)&unk_BA6CB4); } //----- (0099B820) -------------------------------------------------------- int sub_99B820() { sub_686470((int)&byte_ADA230); return atexit(sub_9A34E0); } // ADA230: using guessed type char byte_ADA230; //----- (0099B840) -------------------------------------------------------- int sub_99B840() { sub_74E150(&unk_ADB2A8); return atexit(sub_9A34D0); } //----- (0099B860) -------------------------------------------------------- int __thiscall sub_99B860(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; sub_6C2770(&unk_ADB430, (char *)&v2 + 3, (int)&v2 + 3); return atexit(sub_9A34F0); } //----- (0099B890) -------------------------------------------------------- int sub_99B890() { return atexit(sub_9A3540); } //----- (0099B8A0) -------------------------------------------------------- int sub_99B8A0() { dword_AB4EE8 = (int)operator new[](0x94u); memset((void *)dword_AB4EE8, 0, 4 * dword_AB4EE4); byte_AB4EF0 = 1; off_AB4EE0 = &NiTStringPointerMap>::`vftable'; return atexit(sub_9A3570); } // 9F4EBC: using guessed type void *NiTStringPointerMap>::`vftable'; // AB4EE0: using guessed type void **off_AB4EE0; // AB4EE4: using guessed type int dword_AB4EE4; // AB4EE8: using guessed type int dword_AB4EE8; // AB4EF0: using guessed type char byte_AB4EF0; //----- (0099B900) -------------------------------------------------------- int sub_99B900() { sub_6909B0(byte_ADB468); return atexit(sub_9A3580); } //----- (0099B920) -------------------------------------------------------- _DWORD *sub_99B920() { return sub_861B10(&unk_B68404, (int)"NiTextureAccumulator", (int)&unk_BA4868); } //----- (0099B940) -------------------------------------------------------- int sub_99B940() { sub_4018E0(&dword_AB5244, "Wall", 4u); return atexit(sub_9A35C0); } //----- (0099B960) -------------------------------------------------------- int sub_99B960() { sub_4018E0(&dword_AB5260, "Floor", 5u); return atexit(sub_9A35F0); } //----- (0099B980) -------------------------------------------------------- int sub_99B980() { return atexit(sub_9A3590); } //----- (0099B990) -------------------------------------------------------- int sub_99B990() { sub_6A1A20((int)&byte_B68508); return atexit(sub_9A3620); } // B68508: using guessed type char byte_B68508; //----- (0099B9B0) -------------------------------------------------------- _DWORD *sub_99B9B0() { return sub_861B10(&byte_B871D0[40960], (int)"AfterImgEff", (int)&unk_B91244); } //----- (0099B9D0) -------------------------------------------------------- int sub_99B9D0() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_B911DC = v0; *v0 = v0; *((_DWORD *)dword_B911DC + 1) = dword_B911DC; *((_DWORD *)dword_B911DC + 2) = dword_B911DC; *((_BYTE *)dword_B911DC + 20) = 1; *((_BYTE *)dword_B911DC + 21) = 1; return atexit(sub_9A3630); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099BA50) -------------------------------------------------------- int sub_99BA50() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_B911EC = v0; *v0 = v0; *((_DWORD *)dword_B911EC + 1) = dword_B911EC; *((_DWORD *)dword_B911EC + 2) = dword_B911EC; *((_BYTE *)dword_B911EC + 20) = 1; *((_BYTE *)dword_B911EC + 21) = 1; return atexit(sub_9A3690); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; //----- (0099BAD0) -------------------------------------------------------- _DWORD *sub_99BAD0() { return sub_861B10(&unk_B911F8, (int)"ArrowEff", (int)&unk_B91244); } //----- (0099BAF0) -------------------------------------------------------- _DWORD *sub_99BAF0() { return sub_861B10(&unk_B91200, (int)"AttachEff", (int)&unk_B91244); } //----- (0099BB10) -------------------------------------------------------- _DWORD *sub_99BB10() { return sub_861B10(&unk_B91244, (int)"Effect", 0); } //----- (0099BB30) -------------------------------------------------------- int sub_99BB30() { char *v0; // eax v0 = (char *)type_info::name( (type_info *)&CHazeScreenEffect `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_B91208, 0, v0, (int)&dword_ACDE00, (int)nullsub_6); return atexit(sub_9A36F0); } //----- (0099BB70) -------------------------------------------------------- int sub_99BB70() { sub_6ACE20(&unk_B91250); return atexit(sub_9A3790); } //----- (0099BB90) -------------------------------------------------------- _DWORD *sub_99BB90() { return sub_861B10(&unk_B912AC, (int)"ExpEffect", (int)&unk_B91244); } //----- (0099BBB0) -------------------------------------------------------- _DWORD *sub_99BBB0() { return sub_861B10(&unk_B912B4, (int)"StretchEffect", (int)&unk_B91244); } //----- (0099BBD0) -------------------------------------------------------- _DWORD *sub_99BBD0() { return sub_861B10(&unk_B912BC, (int)"WeddingEffect", (int)&unk_B91244); } //----- (0099BBF0) -------------------------------------------------------- int sub_99BBF0() { sub_6B36E0((float *)&unk_B912C8); return atexit(sub_9A37A0); } //----- (0099BC10) -------------------------------------------------------- int sub_99BC10() { return atexit(sub_9A37B0); } //----- (0099BC20) -------------------------------------------------------- int sub_99BC20() { const CHAR *v0; // eax if ( !byte_ACAD5C ) sub_420410(); v0 = sub_401410(byte_ACA940, "resvoice"); byte_AB6578 = GetFileAttributesA(v0) == 16; return atexit(sub_9A3860); } // AB6578: using guessed type char byte_AB6578; // ACAD5C: using guessed type char byte_ACAD5C; //----- (0099BCA0) -------------------------------------------------------- int sub_99BCA0() { return atexit(sub_9A3880); } //----- (0099BCB0) -------------------------------------------------------- __int64 sub_99BCB0() { __int64 result; // rax __int16 v1; // [esp+6h] [ebp-2h] LOBYTE(v1) = 0; WORD2(result) = v1; dword_AB66B8 = 151453714; word_AB66BC = v1; return result; } // AB66B8: using guessed type int dword_AB66B8; // AB66BC: using guessed type __int16 word_AB66BC; //----- (0099BCE0) -------------------------------------------------------- signed int sub_99BCE0() { return sub_6BCA50((char *)&word_B91FF8); } // B91FF8: using guessed type __int16 word_B91FF8; //----- (0099BCF0) -------------------------------------------------------- int sub_99BCF0() { int result; // eax result = dword_AB66A0; dword_AB66F8 = dword_AB66A0; word_AB66FC = word_AB66A4; return result; } // AB66A0: using guessed type int dword_AB66A0; // AB66A4: using guessed type __int16 word_AB66A4; // AB66F8: using guessed type int dword_AB66F8; // AB66FC: using guessed type __int16 word_AB66FC; //----- (0099BD10) -------------------------------------------------------- __int64 sub_99BD10() { __int64 result; // rax __int16 v1; // [esp+6h] [ebp-2h] LOBYTE(v1) = 0; WORD2(result) = v1; dword_B92030 = 402849797; LOWORD(dword_B92034) = v1; return result; } // B92030: using guessed type int dword_B92030; // B92034: using guessed type int dword_B92034; //----- (0099BD40) -------------------------------------------------------- int sub_99BD40() { return atexit(nullsub_51); } //----- (0099BD50) -------------------------------------------------------- __int64 sub_99BD50() { __int64 result; // rax __int16 v1; // [esp+6h] [ebp-2h] LOBYTE(v1) = 0; WORD2(result) = v1; dword_AB6718 = 402720727; word_AB671C = v1; return result; } // AB6718: using guessed type int dword_AB6718; // AB671C: using guessed type __int16 word_AB671C; //----- (0099BD80) -------------------------------------------------------- int sub_99BD80() { unsigned int v0; // eax __int16 v2; // [esp+6h] [ebp-2h] LOBYTE(v2) = 0; word_AB681C = v2; dword_AB6818 = 336005085; v0 = 0; do { byte_AB6822[2 * v0] = 0; byte_AB6823[2 * v0++] = 0; } while ( v0 < dword_AB681E ); return sub_6BC4D0(); } // AB6818: using guessed type int dword_AB6818; // AB681C: using guessed type __int16 word_AB681C; // AB681E: using guessed type int dword_AB681E; //----- (0099BDD0) -------------------------------------------------------- int sub_99BDD0() { return atexit(sub_9A39C0); } //----- (0099BDE0) -------------------------------------------------------- int sub_99BDE0() { return atexit(sub_9A3A40); } //----- (0099BDF0) -------------------------------------------------------- int sub_99BDF0() { sub_6C1760(&dword_B9DC70); return atexit(sub_9A3AC0); } // B9DC70: using guessed type int dword_B9DC70; //----- (0099BE10) -------------------------------------------------------- int __thiscall sub_99BE10(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; sub_6C2770(&unk_B9DE28, (char *)&v2 + 3, (int)&v2 + 3); return atexit(sub_9A3AE0); } //----- (0099BE40) -------------------------------------------------------- int sub_99BE40() { InterlockedIncrement(&Addend); dword_AB6F04 = 0; dword_AB6F08 = 0; off_AB6EF8 = &ITask::`vftable'; dword_AB6F00 = (int)&ITask::`vftable'; dword_AB6F24 = 0; dword_AB6F1C = 0; dword_AB6F20 = 0; dword_AB6F18 = (int)&NiTList>::`vftable'; dword_AB6F34 = 0; dword_AB6F2C = 0; dword_AB6F30 = 0; dword_AB6F28 = (int)&NiTList>::`vftable'; dword_AB6F14 = 0; dword_AB6F0C = 0; dword_AB6F10 = 0; return atexit(sub_9A3B30); } // 9F88DC: using guessed type void *NiTList>::`vftable'; // 9F88EC: using guessed type void *ITask::`vftable'; // 9F8908: using guessed type void *ITask::`vftable'; // AB6EF8: using guessed type void **off_AB6EF8; // AB6F00: using guessed type int dword_AB6F00; // AB6F04: using guessed type int dword_AB6F04; // AB6F08: using guessed type int dword_AB6F08; // AB6F0C: using guessed type int dword_AB6F0C; // AB6F10: using guessed type int dword_AB6F10; // AB6F14: using guessed type int dword_AB6F14; // AB6F18: using guessed type int dword_AB6F18; // AB6F1C: using guessed type int dword_AB6F1C; // AB6F20: using guessed type int dword_AB6F20; // AB6F24: using guessed type int dword_AB6F24; // AB6F28: using guessed type int dword_AB6F28; // AB6F2C: using guessed type int dword_AB6F2C; // AB6F30: using guessed type int dword_AB6F30; // AB6F34: using guessed type int dword_AB6F34; //----- (0099BEF0) -------------------------------------------------------- int sub_99BEF0() { return atexit(sub_9A3B40); } //----- (0099BF00) -------------------------------------------------------- int sub_99BF00() { return atexit(sub_9A3B70); } //----- (0099BF10) -------------------------------------------------------- int sub_99BF10() { sub_74CA60(dword_B9DE68); return atexit(sub_9A3BA0); } //----- (0099BF30) -------------------------------------------------------- int __thiscall sub_99BF30(void *this) { void *v2; // [esp-2h] [ebp-4h] v2 = this; sub_6C2770(&unk_B9DEB0, (char *)&v2 + 3, (int)&v2 + 3); return atexit(sub_9A3BB0); } //----- (0099BF60) -------------------------------------------------------- int sub_99BF60() { return atexit(sub_9A3CA0); } //----- (0099BF70) -------------------------------------------------------- int sub_99BF70() { return atexit(sub_9A3D20); } //----- (0099BF80) -------------------------------------------------------- int sub_99BF80() { return atexit(sub_9A3D50); } //----- (0099BF90) -------------------------------------------------------- int sub_99BF90() { return atexit(sub_9A3D80); } //----- (0099BFA0) -------------------------------------------------------- int sub_99BFA0() { sub_4018E0(&dword_AB791C, "CollNode", 8u); return atexit(sub_9A3DB0); } //----- (0099BFC0) -------------------------------------------------------- int sub_99BFC0() { sub_4018E0(&dword_AB7938, "Pick", 4u); return atexit(sub_9A3DE0); } //----- (0099BFE0) -------------------------------------------------------- int sub_99BFE0() { sub_4018E0(&dword_AB7954, "_CharShine_", 0xBu); return atexit(sub_9A3E10); } //----- (0099C000) -------------------------------------------------------- int sub_99C000() { sub_4018E0(&dword_AB7970, "_CharShine_Other_", 0x11u); return atexit(sub_9A3E40); } //----- (0099C020) -------------------------------------------------------- int sub_99C020() { sub_4018E0(&dword_AB79F8, "ResEleRoot", 0xAu); return atexit(sub_9A3E70); } //----- (0099C040) -------------------------------------------------------- int sub_99C040() { sub_4018E0(&dword_AB7A14, "Rooot", 5u); return atexit(sub_9A3EA0); } //----- (0099C060) -------------------------------------------------------- int sub_99C060() { sub_4018E0(&dword_AB7A30, "CollNode", 8u); return atexit(sub_9A3ED0); } //----- (0099C080) -------------------------------------------------------- int sub_99C080() { sub_4018E0(&dword_AB7A4C, "Pick", 4u); return atexit(sub_9A3F00); } //----- (0099C0A0) -------------------------------------------------------- int sub_99C0A0() { sub_4018E0(&dword_AB7A68, "LightAmbNormal", 0xEu); return atexit(sub_9A3F30); } //----- (0099C0C0) -------------------------------------------------------- int sub_99C0C0() { sub_4018E0(&dword_AB7A84, "LightAmbMoveOK", 0xEu); return atexit(sub_9A3F60); } //----- (0099C0E0) -------------------------------------------------------- int sub_99C0E0() { sub_4018E0(&dword_AB7AA0, "LightAmbMoveNO", 0xEu); return atexit(sub_9A3F90); } //----- (0099C100) -------------------------------------------------------- int sub_99C100() { sub_4018E0(&dword_AB7ABC, "LightAmbMoveRepair", 0x12u); return atexit(sub_9A3FC0); } //----- (0099C120) -------------------------------------------------------- int sub_99C120() { sub_4018E0(&dword_AB7AD8, "CharColiNode", 0xCu); return atexit(sub_9A3FF0); } //----- (0099C140) -------------------------------------------------------- int sub_99C140() { sub_4018E0(&dword_AB7AF4, "_CharShine_Other_", 0x11u); return atexit(sub_9A4020); } //----- (0099C160) -------------------------------------------------------- int sub_99C160() { _DWORD *v0; // eax void **v2; // [esp+0h] [ebp-10h] char *v3; // [esp+Ch] [ebp-4h] v0 = operator new(0x18u); if ( !v0 ) { v3 = 0; std::exception::exception((std::exception *)&v2, (const char *const *)&v3); v2 = &std::bad_alloc::`vftable'; _CxxThrowException(&v2, &_TI2_AVbad_alloc_std__); } dword_B9E1D0 = v0; *v0 = v0; *((_DWORD *)dword_B9E1D0 + 1) = dword_B9E1D0; *((_DWORD *)dword_B9E1D0 + 2) = dword_B9E1D0; *((_BYTE *)dword_B9E1D0 + 20) = 1; *((_BYTE *)dword_B9E1D0 + 21) = 1; dword_B9E1DC = (int)"_MiniHouse_Node_"; return atexit(sub_9A4050); } // 7D4CA1: using guessed type void __stdcall __noreturn _CxxThrowException(_DWORD, _DWORD); // 9A655C: using guessed type void *std::bad_alloc::`vftable'; // A7A6A8: using guessed type int _TI2_AVbad_alloc_std__; // B9E1DC: using guessed type int dword_B9E1DC; //----- (0099C1F0) -------------------------------------------------------- int sub_99C1F0() { sub_4018E0(&dword_AB7B60, "Rooot", 5u); return atexit(sub_9A40B0); } //----- (0099C210) -------------------------------------------------------- int sub_99C210() { sub_4018E0(&dword_AB7B7C, "Root", 4u); return atexit(sub_9A40E0); } //----- (0099C230) -------------------------------------------------------- int sub_99C230() { sub_4018E0(&dword_AB7B98, "Wall", 4u); return atexit(sub_9A4110); } //----- (0099C250) -------------------------------------------------------- int sub_99C250() { sub_4018E0(&dword_AB7BB4, "Floor", 5u); return atexit(sub_9A4140); } //----- (0099C270) -------------------------------------------------------- int sub_99C270() { sub_4018E0(&dword_AB7BD0, "Roof", 4u); return atexit(sub_9A4170); } //----- (0099C290) -------------------------------------------------------- int sub_99C290() { sub_4018E0(&dword_AB7BEC, "RootBlock", 9u); return atexit(sub_9A41A0); } //----- (0099C2B0) -------------------------------------------------------- int sub_99C2B0() { sub_4018E0(&dword_AB7C08, "T", 1u); return atexit(sub_9A41D0); } //----- (0099C2D0) -------------------------------------------------------- int sub_99C2D0() { sub_4018E0(&dword_AB7C24, "R", 1u); return atexit(sub_9A4200); } //----- (0099C2F0) -------------------------------------------------------- int sub_99C2F0() { sub_4018E0(&dword_AB7C40, "CollNode", 8u); return atexit(sub_9A4230); } //----- (0099C310) -------------------------------------------------------- int sub_99C310() { return atexit(sub_9A4260); } //----- (0099C320) -------------------------------------------------------- int sub_99C320() { return atexit(sub_9A42E0); } //----- (0099C330) -------------------------------------------------------- int sub_99C330() { `eh vector constructor iterator'( dword_AB7F34, 4u, 5, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); dword_AB7F48 = 0; dword_AB7F4C = 0; dword_AB7F30 = 0; return atexit(sub_9A42F0); } // AB7F30: using guessed type int dword_AB7F30; // AB7F48: using guessed type int dword_AB7F48; // AB7F4C: using guessed type int dword_AB7F4C; //----- (0099C370) -------------------------------------------------------- int sub_99C370() { strncpy(dword_B9E2B4, "index", 0x14u); return atexit(nullsub_52); } //----- (0099C390) -------------------------------------------------------- int sub_99C390() { strncpy(dword_B9E2C8, "string", 0x14u); return atexit(nullsub_53); } //----- (0099C3B0) -------------------------------------------------------- int sub_99C3B0() { strncpy(dword_B9E2DC, "byte", 0x14u); return atexit(nullsub_54); } //----- (0099C3D0) -------------------------------------------------------- int sub_99C3D0() { strncpy(dword_B9E2F0, "word", 0x14u); return atexit(nullsub_55); } //----- (0099C3F0) -------------------------------------------------------- int sub_99C3F0() { strncpy(dword_B9E304, "dwrd", 0x14u); return atexit(nullsub_56); } //----- (0099C410) -------------------------------------------------------- int sub_99C410() { strncpy(dword_B9E318, "dword", 0x14u); return atexit(nullsub_57); } //----- (0099C430) -------------------------------------------------------- int sub_99C430() { strncpy(dword_B9E32C, "comment", 0x14u); return atexit(nullsub_58); } //----- (0099C450) -------------------------------------------------------- int sub_99C450() { strncpy(dword_B9E340, "brace", 0x14u); return atexit(nullsub_59); } //----- (0099C470) -------------------------------------------------------- int sub_99C470() { strncpy(dword_B9E354, "ignore", 0x14u); return atexit(nullsub_60); } //----- (0099C490) -------------------------------------------------------- int sub_99C490() { strncpy(dword_B9E368, "delimiter", 0x14u); return atexit(nullsub_61); } //----- (0099C4B0) -------------------------------------------------------- int sub_99C4B0() { strncpy(dword_B9E37C, "exchange", 0x14u); return atexit(nullsub_62); } //----- (0099C4D0) -------------------------------------------------------- int sub_99C4D0() { strncpy(dword_B9E390, "table", 0x14u); return atexit(nullsub_63); } //----- (0099C4F0) -------------------------------------------------------- int sub_99C4F0() { strncpy(byte_B9E3A4, "columntype", 0x14u); return atexit(nullsub_64); } //----- (0099C510) -------------------------------------------------------- int sub_99C510() { strncpy(byte_B9E3B8, "columnname", 0x14u); return atexit(nullsub_65); } //----- (0099C530) -------------------------------------------------------- int sub_99C530() { strncpy(byte_B9E3CC, "record", 0x14u); return atexit(nullsub_66); } //----- (0099C550) -------------------------------------------------------- int sub_99C550() { strncpy(byte_B9E3E0, "recordin", 0x14u); return atexit(nullsub_67); } //----- (0099C570) -------------------------------------------------------- int sub_99C570() { strncpy(dword_B9E3F4, "end", 0x14u); return atexit(nullsub_68); } //----- (0099C590) -------------------------------------------------------- int sub_99C590() { return atexit(sub_9A4410); } //----- (0099C5A0) -------------------------------------------------------- int sub_99C5A0() { return atexit(sub_9A4440); } //----- (0099C5B0) -------------------------------------------------------- int sub_99C5B0() { return atexit(sub_9A4470); } //----- (0099C5C0) -------------------------------------------------------- int sub_99C5C0() { return atexit(sub_9A44A0); } //----- (0099C5D0) -------------------------------------------------------- int sub_99C5D0() { `eh vector constructor iterator'( dword_B9E440, 4u, 72, (void (__thiscall *)(void *))Concurrency::details::_NonReentrantLock::_Release, sub_410C00); return atexit(sub_9A44D0); } //----- (0099C600) -------------------------------------------------------- int sub_99C600() { sub_71A060((char *)&dword_B9E560); return atexit(sub_9A44F0); } // B9E560: using guessed type int dword_B9E560; //----- (0099C620) -------------------------------------------------------- int sub_99C620() { sub_74CF80((int)&unk_BA0610); return atexit(sub_9A4610); } //----- (0099C636) -------------------------------------------------------- int sub_99C636() { return atexit(sub_9A4624); } //----- (0099C642) -------------------------------------------------------- int sub_99C642() { return atexit(sub_9A462F); } //----- (0099C64E) -------------------------------------------------------- int sub_99C64E() { return atexit(sub_9A463A); } //----- (0099C65A) -------------------------------------------------------- int sub_99C65A() { std::_Init_locks::_Init_locks((std::_Init_locks *)&unk_BA2A20); return atexit(sub_9A4645); } //----- (0099C670) -------------------------------------------------------- int sub_99C670() { return atexit(sub_9A4659); } //----- (0099C67C) -------------------------------------------------------- int sub_99C67C() { return atexit(sub_9A464F); } //----- (0099C688) -------------------------------------------------------- int sub_99C688() { std::_Init_locks::_Init_locks((std::_Init_locks *)&unk_BA2A89); return atexit(sub_9A4663); } //----- (0099C6D8) -------------------------------------------------------- int sub_99C6D8() { sub_5296F0(dword_BA2AE8, (int)&dword_BA2A90, 0, 1); return atexit(sub_9A466D); } // BA2A90: using guessed type int dword_BA2A90; //----- (0099C6F7) -------------------------------------------------------- void *sub_99C6F7() { void *result; // eax result = &unk_BA2A88; dword_BA2B40 = (int)dword_BA2AE8; if ( dword_BA2B3C ) *(_DWORD *)(*(_DWORD *)(*(_DWORD *)dword_BA2B3C + 4) + dword_BA2B3C + 60) = dword_BA2AE8; if ( dword_BA2B44 ) *(_DWORD *)(*(_DWORD *)(*(_DWORD *)dword_BA2B44 + 4) + dword_BA2B44 + 60) = dword_BA2B40; if ( dword_BA2B48 ) *(_DWORD *)(*(_DWORD *)(*(_DWORD *)dword_BA2B48 + 4) + dword_BA2B48 + 60) = dword_BA2B40; return result; } // BA2B3C: using guessed type int dword_BA2B3C; // BA2B40: using guessed type int dword_BA2B40; // BA2B44: using guessed type int dword_BA2B44; // BA2B48: using guessed type int dword_BA2B48; //----- (0099C701) -------------------------------------------------------- int sub_99C701() { std::_Init_locks::_Init_locks((std::_Init_locks *)&unk_BA2B84); return atexit(sub_9A4681); } //----- (0099C717) -------------------------------------------------------- int sub_99C717() { return atexit(sub_9A468B); } //----- (0099C730) -------------------------------------------------------- int sub_99C730() { InitializeCriticalSection(&stru_BA3B34); return atexit(sub_9A46B0); } //----- (0099C750) -------------------------------------------------------- void sub_99C750() { flt_BA3B5C = 1.0 / (double)dword_ABBE7C; } // ABBE7C: using guessed type int dword_ABBE7C; // BA3B5C: using guessed type float flt_BA3B5C; //----- (0099C770) -------------------------------------------------------- int sub_99C770() { int result; // eax result = dword_BA45C0; dword_BA3B60 = dword_BA45C0; dword_BA3B64 = dword_BA45C4; dword_BA3B68 = dword_BA45C8; return result; } // BA3B60: using guessed type int dword_BA3B60; // BA3B64: using guessed type int dword_BA3B64; // BA3B68: using guessed type int dword_BA3B68; // BA45C0: using guessed type int dword_BA45C0; // BA45C4: using guessed type int dword_BA45C4; // BA45C8: using guessed type int dword_BA45C8; //----- (0099C7A0) -------------------------------------------------------- int sub_99C7A0() { int result; // eax dword_BA3B70 = dword_ABEC34; result = dword_ABEC40; dword_BA3B74 = dword_ABEC38; dword_BA3B78 = dword_ABEC3C; dword_BA3B7C = dword_ABEC40; return result; } // ABEC34: using guessed type int dword_ABEC34; // ABEC38: using guessed type int dword_ABEC38; // ABEC3C: using guessed type int dword_ABEC3C; // ABEC40: using guessed type int dword_ABEC40; // BA3B70: using guessed type int dword_BA3B70; // BA3B74: using guessed type int dword_BA3B74; // BA3B78: using guessed type int dword_BA3B78; // BA3B7C: using guessed type int dword_BA3B7C; //----- (0099C7D0) -------------------------------------------------------- int sub_99C7D0() { int result; // eax dword_BA3B84 = dword_ABD508; result = dword_ABD514; dword_BA3B88 = dword_ABD50C; dword_BA3B8C = dword_ABD510; dword_BA3B90 = dword_ABD514; return result; } // ABD508: using guessed type int dword_ABD508; // ABD50C: using guessed type int dword_ABD50C; // ABD510: using guessed type int dword_ABD510; // ABD514: using guessed type int dword_ABD514; // BA3B84: using guessed type int dword_BA3B84; // BA3B88: using guessed type int dword_BA3B88; // BA3B8C: using guessed type int dword_BA3B8C; // BA3B90: using guessed type int dword_BA3B90; //----- (0099C800) -------------------------------------------------------- _DWORD *sub_99C800() { return sub_861B10(dword_BA3BA8, (int)"NiTextKeyExtraData", (int)dword_BA47B4); } //----- (0099C820) -------------------------------------------------------- _DWORD *sub_99C820() { return sub_861B10(&unk_BA3BB0, (int)"NiControllerSequence", (int)dword_BA4574); } //----- (0099C840) -------------------------------------------------------- _DWORD *sub_99C840() { return sub_861B10(dword_BA3BB8, (int)"NiTransformController", (int)dword_BA4498); } //----- (0099C860) -------------------------------------------------------- _DWORD *sub_99C860() { return sub_861B10(dword_BA3BC0, (int)"NiBoneLODController", (int)dword_BA4808); } //----- (0099C880) -------------------------------------------------------- _DWORD *sub_99C880() { return sub_861B10(dword_BA3BC8, (int)"NiTextureTransformController", (int)dword_BA44C8); } //----- (0099C8A0) -------------------------------------------------------- _DWORD *sub_99C8A0() { return sub_861B10(dword_BA3BD0, (int)"NiMaterialColorController", (int)dword_BA44D0); } //----- (0099C8C0) -------------------------------------------------------- _DWORD *sub_99C8C0() { return sub_861B10(dword_BA3BD8, (int)"NiAlphaController", (int)dword_BA44C8); } //----- (0099C8E0) -------------------------------------------------------- _DWORD *sub_99C8E0() { return sub_861B10(&unk_BA3BE0, (int)"NiControllerManager", (int)dword_BA4808); } //----- (0099C900) -------------------------------------------------------- _DWORD *sub_99C900() { return sub_861B10(dword_BA42D0, (int)"NiVisController", (int)dword_BA44D8); } //----- (0099C920) -------------------------------------------------------- _DWORD *sub_99C920() { return sub_861B10(dword_BA42D8, (int)"NiUVData", (int)dword_BA4574); } //----- (0099C940) -------------------------------------------------------- _DWORD *sub_99C940() { return sub_861B10(dword_BA42E0, (int)"NiUVController", (int)dword_BA4808); } //----- (0099C960) -------------------------------------------------------- _DWORD *sub_99C960() { return sub_861B10(dword_BA42E8, (int)"NiTransformInterpolator", (int)dword_BA44E0); } //----- (0099C980) -------------------------------------------------------- _DWORD *sub_99C980() { return sub_861B10(&unk_BA42F0, (int)"NiStringPalette", (int)dword_BA4574); } //----- (0099C9A0) -------------------------------------------------------- _DWORD *sub_99C9A0() { return sub_861B10(&unk_BA42F8, (int)"NiSequenceStreamHelper", (int)dword_BA4568); } //----- (0099C9C0) -------------------------------------------------------- _DWORD *sub_99C9C0() { return sub_861B10(&unk_BA4300, (int)"NiSequence", (int)dword_BA4574); } //----- (0099C9E0) -------------------------------------------------------- _DWORD *sub_99C9E0() { return sub_861B10(dword_BA4308, (int)"NiRotData", (int)dword_BA4574); } //----- (0099CA00) -------------------------------------------------------- _DWORD *sub_99CA00() { return sub_861B10(dword_BA4310, (int)"NiRollController", (int)dword_BA44E8); } //----- (0099CA20) -------------------------------------------------------- _DWORD *sub_99CA20() { return sub_861B10(dword_BA4318, (int)"NiQuaternionInterpolator", (int)dword_BA44E0); } //----- (0099CA40) -------------------------------------------------------- _DWORD *sub_99CA40() { return sub_861B10(dword_BA4320, (int)"NiPosData", (int)dword_BA4574); } //----- (0099CA60) -------------------------------------------------------- _DWORD *sub_99CA60() { return sub_861B10(dword_BA4328, (int)"NiPoint3Interpolator", (int)dword_BA44E0); } //----- (0099CA80) -------------------------------------------------------- _DWORD *sub_99CA80() { return sub_861B10(dword_BA4338, (int)"NiPathInterpolator", (int)dword_BA44E0); } //----- (0099CAA0) -------------------------------------------------------- _DWORD *sub_99CAA0() { return sub_861B10(dword_BA4348, (int)"NiPathController", (int)dword_BA4808); } //----- (0099CAC0) -------------------------------------------------------- _DWORD *sub_99CAC0() { return sub_861B10(dword_BA4350, (int)"NiMultiTargetTransformController", (int)dword_BA4488); } //----- (0099CAE0) -------------------------------------------------------- _DWORD *sub_99CAE0() { return sub_861B10(dword_BA4358, (int)"NiMorphData", (int)dword_BA4574); } //----- (0099CB00) -------------------------------------------------------- _DWORD *sub_99CB00() { return sub_861B10(dword_BA4360, (int)"NiLookAtInterpolator", (int)dword_BA44B0); } //----- (0099CB20) -------------------------------------------------------- _DWORD *sub_99CB20() { return sub_861B10(dword_BA4368, (int)"NiLookAtController", (int)dword_BA4808); } //----- (0099CB40) -------------------------------------------------------- _DWORD *sub_99CB40() { return sub_861B10(dword_BA4370, (int)"NiLightDimmerController", (int)dword_BA44C8); } //----- (0099CB60) -------------------------------------------------------- _DWORD *sub_99CB60() { return sub_861B10(dword_BA4378, (int)"NiLightColorController", (int)dword_BA44D0); } //----- (0099CB80) -------------------------------------------------------- _DWORD *sub_99CB80() { return sub_861B10(&unk_BA4384, (int)"NiKeyframeManager", (int)dword_BA4808); } //----- (0099CBA0) -------------------------------------------------------- _DWORD *sub_99CBA0() { return sub_861B10(dword_BA438C, (int)"NiTransformData", (int)dword_BA4574); } //----- (0099CBC0) -------------------------------------------------------- _DWORD *sub_99CBC0() { return sub_861B10(&unk_BA4398, (int)"NiGeomMorpherController", (int)dword_BA4488); } //----- (0099CBE0) -------------------------------------------------------- _DWORD *sub_99CBE0() { return sub_861B10(dword_BA43A0, (int)"NiFloatsExtraDataPoint3Controller", (int)dword_BA44F0); } //----- (0099CC00) -------------------------------------------------------- _DWORD *sub_99CC00() { return sub_861B10(dword_BA43A8, (int)"NiFloatsExtraDataController", (int)dword_BA44F0); } //----- (0099CC20) -------------------------------------------------------- _DWORD *sub_99CC20() { return sub_861B10(dword_BA43B0, (int)"NiFloatInterpolator", (int)dword_BA44E0); } //----- (0099CC40) -------------------------------------------------------- _DWORD *sub_99CC40() { return sub_861B10(dword_BA43B8, (int)"NiFloatExtraDataController", (int)dword_BA44F0); } //----- (0099CC60) -------------------------------------------------------- _DWORD *sub_99CC60() { return sub_861B10(dword_BA43C0, (int)"NiFloatData", (int)dword_BA4574); } //----- (0099CC80) -------------------------------------------------------- _DWORD *sub_99CC80() { return sub_861B10(&unk_BA43C8, (int)"NiFlipController", (int)dword_BA44C8); } //----- (0099CCA0) -------------------------------------------------------- _DWORD *sub_99CCA0() { return sub_861B10(dword_BA43D0, (int)"NiColorInterpolator", (int)dword_BA44E0); } //----- (0099CCC0) -------------------------------------------------------- _DWORD *sub_99CCC0() { return sub_861B10(dword_BA43D8, (int)"NiColorExtraDataController", (int)dword_BA44F0); } //----- (0099CCE0) -------------------------------------------------------- _DWORD *sub_99CCE0() { return sub_861B10(dword_BA43E0, (int)"NiColorData", (int)dword_BA4574); } //----- (0099CD00) -------------------------------------------------------- _DWORD *sub_99CD00() { return sub_861B10(dword_BA43E8, (int)"NiBSplineTransformInterpolator", (int)dword_BA44F8); } //----- (0099CD20) -------------------------------------------------------- _DWORD *sub_99CD20() { return sub_861B10(dword_BA43F0, (int)"NiBSplinePoint3Interpolator", (int)dword_BA44F8); } //----- (0099CD40) -------------------------------------------------------- _DWORD *sub_99CD40() { return sub_861B10(dword_BA43F8, (int)"NiBSplineFloatInterpolator", (int)dword_BA44F8); } //----- (0099CD60) -------------------------------------------------------- _DWORD *sub_99CD60() { return sub_861B10(dword_BA4400, (int)"NiBSplineCompTransformInterpolator", (int)dword_BA43E8); } //----- (0099CD80) -------------------------------------------------------- _DWORD *sub_99CD80() { return sub_861B10(dword_BA4408, (int)"NiBSplineCompPoint3Interpolator", (int)dword_BA43F0); } //----- (0099CDA0) -------------------------------------------------------- _DWORD *sub_99CDA0() { return sub_861B10(dword_BA4410, (int)"NiBSplineCompFloatInterpolator", (int)dword_BA43F8); } //----- (0099CDC0) -------------------------------------------------------- _DWORD *sub_99CDC0() { return sub_861B10(dword_BA4418, (int)"NiBSplineCompColorInterpolator", (int)dword_BA4420); } //----- (0099CDE0) -------------------------------------------------------- _DWORD *sub_99CDE0() { return sub_861B10(dword_BA4420, (int)"NiBSplineColorInterpolator", (int)dword_BA44F8); } //----- (0099CE00) -------------------------------------------------------- _DWORD *sub_99CE00() { return sub_861B10(dword_BA4428, (int)"NiBSplineData", (int)dword_BA4574); } //----- (0099CE20) -------------------------------------------------------- _DWORD *sub_99CE20() { return sub_861B10(dword_BA4430, (int)"NiBSplineBasisData", (int)dword_BA4574); } //----- (0099CE40) -------------------------------------------------------- _DWORD *sub_99CE40() { return sub_861B10(dword_BA4438, (int)"NiBoolTimelineInterpolator", (int)dword_BA4440); } //----- (0099CE60) -------------------------------------------------------- _DWORD *sub_99CE60() { return sub_861B10(dword_BA4440, (int)"NiBoolInterpolator", (int)dword_BA44E0); } //----- (0099CE80) -------------------------------------------------------- _DWORD *sub_99CE80() { return sub_861B10(dword_BA4448, (int)"NiBoolData", (int)dword_BA4574); } //----- (0099CEA0) -------------------------------------------------------- _DWORD *sub_99CEA0() { return sub_861B10(dword_BA4450, (int)"NiBlendTransformInterpolator", (int)dword_BA4490); } //----- (0099CEC0) -------------------------------------------------------- _DWORD *sub_99CEC0() { return sub_861B10(dword_BA4458, (int)"NiBlendQuaternionInterpolator", (int)dword_BA4490); } //----- (0099CEE0) -------------------------------------------------------- _DWORD *sub_99CEE0() { return sub_861B10(dword_BA4460, (int)"NiBlendPoint3Interpolator", (int)dword_BA4490); } //----- (0099CF00) -------------------------------------------------------- _DWORD *sub_99CF00() { return sub_861B10(dword_BA4468, (int)"NiBlendFloatInterpolator", (int)dword_BA4490); } //----- (0099CF20) -------------------------------------------------------- _DWORD *sub_99CF20() { return sub_861B10(dword_BA4470, (int)"NiBlendColorInterpolator", (int)dword_BA4490); } //----- (0099CF40) -------------------------------------------------------- _DWORD *sub_99CF40() { return sub_861B10(dword_BA4478, (int)"NiBlendBoolInterpolator", (int)dword_BA4490); } //----- (0099CF60) -------------------------------------------------------- _DWORD *sub_99CF60() { return sub_861B10(dword_BA4480, (int)"NiBlendAccumTransformInterpolator", (int)dword_BA4490); } //----- (0099CF80) -------------------------------------------------------- _DWORD *sub_99CF80() { return sub_861B10(dword_BA4488, (int)"NiInterpController", (int)dword_BA4808); } //----- (0099CFA0) -------------------------------------------------------- _DWORD *sub_99CFA0() { return sub_861B10(dword_BA4490, (int)"NiBlendInterpolator", (int)dword_BA44B0); } //----- (0099CFC0) -------------------------------------------------------- _DWORD *sub_99CFC0() { return sub_861B10(dword_BA4498, (int)"NiSingleInterpController", (int)dword_BA4488); } //----- (0099CFE0) -------------------------------------------------------- float *sub_99CFE0() { return sub_874B00((float *)&dword_BA44A0, -3.4028235e38, -3.4028235e38, -3.4028235e38, -3.4028235e38); } // BA44A0: using guessed type int dword_BA44A0; //----- (0099D010) -------------------------------------------------------- _DWORD *sub_99D010() { return sub_861B10(dword_BA44B0, (int)"NiInterpolator", (int)dword_BA4574); } //----- (0099D030) -------------------------------------------------------- float *sub_99D030() { return sub_874B00((float *)&dword_BA44B8, -3.4028235e38, -3.4028235e38, -3.4028235e38, -3.4028235e38); } // BA44B8: using guessed type int dword_BA44B8; //----- (0099D060) -------------------------------------------------------- _DWORD *sub_99D060() { return sub_861B10(dword_BA44C8, (int)"NiFloatInterpController", (int)dword_BA4498); } //----- (0099D080) -------------------------------------------------------- _DWORD *sub_99D080() { return sub_861B10(dword_BA44D0, (int)"NiPoint3InterpController", (int)dword_BA4498); } //----- (0099D0A0) -------------------------------------------------------- _DWORD *sub_99D0A0() { return sub_861B10(dword_BA44D8, (int)"NiBoolInterpController", (int)dword_BA4498); } //----- (0099D0C0) -------------------------------------------------------- _DWORD *sub_99D0C0() { return sub_861B10(dword_BA44E0, (int)"NiKeyBasedInterpolator", (int)dword_BA44B0); } //----- (0099D0E0) -------------------------------------------------------- _DWORD *sub_99D0E0() { return sub_861B10(dword_BA44E8, (int)"NiFloatController", (int)dword_BA4808); } //----- (0099D100) -------------------------------------------------------- _DWORD *sub_99D100() { return sub_861B10(dword_BA44F0, (int)"NiExtraDataController", (int)dword_BA4498); } //----- (0099D120) -------------------------------------------------------- _DWORD *sub_99D120() { return sub_861B10(dword_BA44F8, (int)"NiBSplineInterpolator", (int)dword_BA44B0); } //----- (0099D140) -------------------------------------------------------- _DWORD *sub_99D140() { return sub_861B10(dword_BA450C, (int)"NiCollisionData", (int)dword_BA4870); } //----- (0099D160) -------------------------------------------------------- int sub_99D160() { sub_834CA0((float *)&dword_BA4514, 1.0, (int)&dword_BA45C0); return atexit(sub_9A46C0); } // BA4514: using guessed type int dword_BA4514; // BA45C0: using guessed type int dword_BA45C0; //----- (0099D190) -------------------------------------------------------- _DWORD *sub_99D190() { return sub_861B10(dword_BA455C, (int)"NiNode", (int)dword_BA457C); } //----- (0099D1B0) -------------------------------------------------------- _DWORD *sub_99D1B0() { return sub_861B10(dword_BA4568, (int)"NiObjectNET", (int)dword_BA4574); } //----- (0099D1D0) -------------------------------------------------------- void *sub_99D1D0() { int v0; // ecx v0 = dword_BA4A6C++; if ( !v0 ) sub_8AA150((int)sub_87E030, (int (*)(void))sub_87E510); return &unk_BA4570; } // BA4A6C: using guessed type int dword_BA4A6C; //----- (0099D1E0) -------------------------------------------------------- _DWORD *sub_99D1E0() { return sub_861B10(dword_BA4574, (int)"NiObject", 0); } //----- (0099D200) -------------------------------------------------------- _DWORD *sub_99D200() { return sub_861B10(dword_BA457C, (int)"NiAVObject", (int)dword_BA4568); } //----- (0099D220) -------------------------------------------------------- _DWORD *sub_99D220() { return sub_861B10(dword_BA45A8, (int)"NiMaterialProperty", (int)dword_BA46DC); } //----- (0099D240) -------------------------------------------------------- int sub_99D240() { return atexit(sub_9A46D0); } //----- (0099D250) -------------------------------------------------------- void sub_99D250() { float v0; // ST00_4 v0 = atan(1.0); flt_BA45B4 = v0 * 4.0; } // BA45B4: using guessed type float flt_BA45B4; //----- (0099D280) -------------------------------------------------------- void sub_99D280() { flt_BA45B8 = flt_BA45B4 * 0.5; } // BA45B4: using guessed type float flt_BA45B4; // BA45B8: using guessed type float flt_BA45B8; //----- (0099D2A0) -------------------------------------------------------- void sub_99D2A0() { flt_BA45BC = flt_BA45B4 + flt_BA45B4; } // BA45B4: using guessed type float flt_BA45B4; // BA45BC: using guessed type float flt_BA45BC; //----- (0099D2B0) -------------------------------------------------------- _DWORD *sub_99D2B0() { return sub_861B10(dword_BA46D4, (int)"NiRenderer", (int)dword_BA4574); } //----- (0099D2D0) -------------------------------------------------------- _DWORD *sub_99D2D0() { return sub_861B10(dword_BA46DC, (int)"NiProperty", (int)dword_BA4568); } //----- (0099D2F0) -------------------------------------------------------- _DWORD *sub_99D2F0() { return sub_861B10(dword_BA46E4, (int)"NiVertexColorProperty", (int)dword_BA46DC); } //----- (0099D310) -------------------------------------------------------- int sub_99D310() { return atexit(sub_9A4700); } //----- (0099D320) -------------------------------------------------------- int sub_99D320() { InitializeCriticalSection(&CriticalSection); return atexit(sub_9A4730); } //----- (0099D340) -------------------------------------------------------- _DWORD *sub_99D340() { return sub_861B10(dword_BA4718, (int)"NiAlphaProperty", (int)dword_BA46DC); } //----- (0099D360) -------------------------------------------------------- int sub_99D360() { return atexit(sub_9A4740); } //----- (0099D370) -------------------------------------------------------- _DWORD *sub_99D370() { return sub_861B10(dword_BA4730, (int)"NiFogProperty", (int)dword_BA46DC); } //----- (0099D390) -------------------------------------------------------- int sub_99D390() { return atexit(sub_9A4770); } //----- (0099D3A0) -------------------------------------------------------- _DWORD *sub_99D3A0() { return sub_861B10(dword_BA473C, (int)"NiDirectionalLight", (int)dword_BA4A28); } //----- (0099D3C0) -------------------------------------------------------- _DWORD *sub_99D3C0() { return sub_861B10(dword_BA4744, (int)"NiDynamicEffect", (int)dword_BA457C); } //----- (0099D3E0) -------------------------------------------------------- _DWORD *sub_99D3E0() { return sub_861B10(dword_BA474C, (int)"NiAmbientLight", (int)dword_BA4A28); } //----- (0099D400) -------------------------------------------------------- _DWORD *sub_99D400() { return sub_861B10(&unk_BA4754, (int)"NiSortAdjustNode", (int)dword_BA455C); } //----- (0099D420) -------------------------------------------------------- _DWORD *sub_99D420() { return sub_861B10(dword_BA475C, (int)"NiCamera", (int)dword_BA457C); } //----- (0099D440) -------------------------------------------------------- _DWORD *sub_99D440() { return sub_861B10(dword_BA4768, (int)"NiTexturingProperty", (int)dword_BA46DC); } //----- (0099D460) -------------------------------------------------------- int sub_99D460() { return atexit(sub_9A47A0); } //----- (0099D470) -------------------------------------------------------- _DWORD *sub_99D470() { return sub_861B10(dword_BA4778, (int)"NiSourceTexture", (int)dword_BA4884); } //----- (0099D490) -------------------------------------------------------- int sub_99D490() { return atexit(sub_9A47D0); } //----- (0099D4A0) -------------------------------------------------------- _DWORD *sub_99D4A0() { return sub_861B10(dword_BA478C, (int)"NiTriShape", (int)dword_BA4858); } //----- (0099D4C0) -------------------------------------------------------- _DWORD *sub_99D4C0() { return sub_861B10(dword_BA4794, (int)"NiRenderTargetGroup", (int)dword_BA4574); } //----- (0099D4E0) -------------------------------------------------------- _DWORD *sub_99D4E0() { return sub_861B10(&unk_BA479C, (int)"NiRenderedTexture", (int)dword_BA4884); } //----- (0099D500) -------------------------------------------------------- _DWORD *sub_99D500() { return sub_861B10(dword_BA47A4, (int)"NiScreenElementsData", (int)dword_BA4A70); } //----- (0099D520) -------------------------------------------------------- _DWORD *sub_99D520() { return sub_861B10(dword_BA47AC, (int)"NiScreenElements", (int)dword_BA478C); } //----- (0099D540) -------------------------------------------------------- _DWORD *sub_99D540() { return sub_861B10(dword_BA47B4, (int)"NiExtraData", (int)dword_BA4574); } //----- (0099D560) -------------------------------------------------------- _DWORD *sub_99D560() { return sub_861B10(dword_BA47BC, (int)"NiBinaryExtraData", (int)dword_BA47B4); } //----- (0099D580) -------------------------------------------------------- _DWORD *sub_99D580() { return sub_861B10(&unk_BA47C4, (int)"NiShader", 0); } //----- (0099D5A0) -------------------------------------------------------- _DWORD *sub_99D5A0() { return sub_861B10(dword_BA47CC, (int)"NiPixelData", (int)dword_BA4574); } //----- (0099D5C0) -------------------------------------------------------- _DWORD *sub_99D5C0() { return sub_861B10(dword_BA47D4, (int)"NiZBufferProperty", (int)dword_BA46DC); } //----- (0099D5E0) -------------------------------------------------------- int sub_99D5E0() { return atexit(sub_9A4800); } //----- (0099D5F0) -------------------------------------------------------- _DWORD *sub_99D5F0() { return sub_861B10(&unk_BA47E0, (int)"NiAlphaAccumulator", (int)&unk_BA4A88); } //----- (0099D610) -------------------------------------------------------- _DWORD *sub_99D610() { return sub_861B10(dword_BA47E8, (int)"NiIntegerExtraData", (int)dword_BA47B4); } //----- (0099D630) -------------------------------------------------------- _DWORD *sub_99D630() { return sub_861B10(dword_BA47F0, (int)"NiStringExtraData", (int)dword_BA47B4); } //----- (0099D650) -------------------------------------------------------- _DWORD *sub_99D650() { return sub_861B10(dword_BA4808, (int)"NiTimeController", (int)dword_BA4574); } //----- (0099D670) -------------------------------------------------------- int sub_99D670() { InitializeCriticalSection(&stru_BA4810); return atexit(sub_9A4830); } //----- (0099D690) -------------------------------------------------------- _DWORD *sub_99D690() { return sub_861B10(dword_BA4830, (int)"NiRangeLODData", (int)&unk_BA4A90); } //----- (0099D6B0) -------------------------------------------------------- _DWORD *sub_99D6B0() { return sub_861B10(dword_BA4838, (int)"NiLODNode", (int)dword_BA4A58); } //----- (0099D6D0) -------------------------------------------------------- _DWORD *sub_99D6D0() { return sub_861B10(dword_BA4840, (int)"NiGeometry", (int)dword_BA457C); } //----- (0099D6F0) -------------------------------------------------------- _DWORD *sub_99D6F0() { return sub_861B10(&unk_BA4848, (int)"NiSkinPartition", (int)dword_BA4574); } //----- (0099D710) -------------------------------------------------------- _DWORD *sub_99D710() { return sub_861B10(dword_BA4850, (int)"NiTriBasedGeomData", (int)dword_BA4A00); } //----- (0099D730) -------------------------------------------------------- _DWORD *sub_99D730() { return sub_861B10(dword_BA4858, (int)"NiTriBasedGeom", (int)dword_BA4840); } //----- (0099D750) -------------------------------------------------------- _DWORD *sub_99D750() { return sub_861B10(dword_BA4860, (int)"NiSkinInstance", (int)dword_BA4574); } //----- (0099D770) -------------------------------------------------------- _DWORD *sub_99D770() { return sub_861B10(&unk_BA4868, (int)"NiAccumulator", (int)dword_BA4574); } //----- (0099D790) -------------------------------------------------------- _DWORD *sub_99D790() { return sub_861B10(dword_BA4870, (int)"NiCollisionObject", (int)dword_BA4574); } //----- (0099D7B0) -------------------------------------------------------- _DWORD *sub_99D7B0() { return sub_861B10(dword_BA4884, (int)"NiTexture", (int)dword_BA4568); } //----- (0099D7D0) -------------------------------------------------------- int sub_99D7D0() { InitializeCriticalSection(&stru_BA488C); return atexit(sub_9A4840); } //----- (0099D7F0) -------------------------------------------------------- int sub_99D7F0() { dword_BA48AC[0] = 0; dword_BA48B0 = 0; dword_BA48B4 = 0; dword_BA48B8 = 0; dword_BA48BC = 0; dword_BA48C0 = 0; dword_BA48C4 = 0; dword_BA48C8 = 0; dword_BA48CC = 0; dword_BA48D0 = 0; return atexit(sub_9A4850); } // BA48AC: using guessed type int dword_BA48AC[]; // BA48B0: using guessed type int dword_BA48B0; // BA48B4: using guessed type int dword_BA48B4; // BA48B8: using guessed type int dword_BA48B8; // BA48BC: using guessed type int dword_BA48BC; // BA48C0: using guessed type int dword_BA48C0; // BA48C4: using guessed type int dword_BA48C4; // BA48C8: using guessed type int dword_BA48C8; // BA48CC: using guessed type int dword_BA48CC; // BA48D0: using guessed type int dword_BA48D0; //----- (0099D830) -------------------------------------------------------- _DWORD *sub_99D830() { return sub_86A420(&unk_BA48D8); } //----- (0099D840) -------------------------------------------------------- _DWORD *sub_99D840() { return sub_861B10(dword_BA491C, (int)"NiStencilProperty", (int)dword_BA46DC); } //----- (0099D860) -------------------------------------------------------- int sub_99D860() { return atexit(sub_9A4890); } //----- (0099D870) -------------------------------------------------------- _DWORD *sub_99D870() { return sub_861B10(dword_BA492C, (int)"NiTriShapeDynamicData", (int)dword_BA4A70); } //----- (0099D890) -------------------------------------------------------- _DWORD *sub_99D890() { return sub_861B10(dword_BA493C, (int)"NiPalette", (int)dword_BA4574); } //----- (0099D8B0) -------------------------------------------------------- int sub_99D8B0() { InitializeCriticalSection(&stru_BA4944); return atexit(sub_9A48C0); } //----- (0099D8D0) -------------------------------------------------------- int sub_99D8D0() { InitializeCriticalSection(&stru_BA4974); return atexit(sub_9A48D0); } //----- (0099D8F0) -------------------------------------------------------- void sub_99D8F0() { float v0; // ST00_4 v0 = sqrt(0.9590659737586975); flt_BA4994 = 1.000311017036438 / v0; } // BA4994: using guessed type float flt_BA4994; //----- (0099D920) -------------------------------------------------------- void sub_99D920() { float v0; // ST00_4 v0 = sqrt(0.9590659737586975); flt_BA4998 = -0.5 / (v0 * 0.9590659737586975) * 1.000311017036438; } // BA4998: using guessed type float flt_BA4998; //----- (0099D960) -------------------------------------------------------- _DWORD *sub_99D960() { return sub_861B10(&unk_BA499C, (int)"NiSkinData", (int)dword_BA4574); } //----- (0099D980) -------------------------------------------------------- int sub_99D980() { *(float *)&dword_BA49B4 = 1.0; *(float *)&dword_BA49C0 = 0.5; *(float *)&dword_BA49AC = 0.0; *(float *)&dword_BA49A8 = 0.0; *(float *)&dword_BA49BC = 0.5; *(float *)&dword_BA49B8 = 1.0; return sub_878E10((float *)&dword_BA49A8); } // BA49A8: using guessed type int dword_BA49A8; // BA49AC: using guessed type int dword_BA49AC; // BA49B4: using guessed type int dword_BA49B4; // BA49B8: using guessed type int dword_BA49B8; // BA49BC: using guessed type int dword_BA49BC; // BA49C0: using guessed type int dword_BA49C0; //----- (0099D9F0) -------------------------------------------------------- _DWORD *sub_99D9F0() { return sub_861B10(dword_BA49F0, (int)"NiAVObjectPalette", (int)dword_BA4574); } //----- (0099DA10) -------------------------------------------------------- _DWORD *sub_99DA10() { return sub_861B10(dword_BA49F8, (int)"NiDefaultAVObjectPalette", (int)dword_BA49F0); } //----- (0099DA30) -------------------------------------------------------- _DWORD *sub_99DA30() { return sub_861B10(dword_BA4A00, (int)"NiGeometryData", (int)dword_BA4574); } //----- (0099DA50) -------------------------------------------------------- int sub_99DA50() { InitializeCriticalSection(&stru_BA4A08); return atexit(sub_9A48E0); } //----- (0099DA70) -------------------------------------------------------- _DWORD *sub_99DA70() { return sub_861B10(dword_BA4A28, (int)"NiLight", (int)dword_BA4744); } //----- (0099DA90) -------------------------------------------------------- _DWORD *sub_99DA90() { return sub_861B10(dword_BA4A34, (int)"NiFloatsExtraData", (int)dword_BA47B4); } //----- (0099DAB0) -------------------------------------------------------- _DWORD *sub_99DAB0() { return sub_861B10(dword_BA4A3C, (int)"NiColorExtraData", (int)dword_BA47B4); } //----- (0099DAD0) -------------------------------------------------------- _DWORD *sub_99DAD0() { return sub_861B10(dword_BA4A50, (int)"NiTriStrips", (int)dword_BA4858); } //----- (0099DAF0) -------------------------------------------------------- _DWORD *sub_99DAF0() { return sub_861B10(dword_BA4A58, (int)"NiSwitchNode", (int)dword_BA455C); } //----- (0099DB10) -------------------------------------------------------- _DWORD *sub_99DB10() { return sub_861B10(dword_BA4A60, (int)"NiVertWeightsExtraData", (int)dword_BA47B4); } //----- (0099DB30) -------------------------------------------------------- _DWORD *sub_99DB30() { return sub_861B10(dword_BA4A70, (int)"NiTriShapeData", (int)dword_BA4850); } //----- (0099DB50) -------------------------------------------------------- _DWORD *sub_99DB50() { return sub_861B10(&unk_BA4A78, (int)"NiDepthStencilBuffer", (int)dword_BA4A80); } //----- (0099DB70) -------------------------------------------------------- _DWORD *sub_99DB70() { return sub_861B10(dword_BA4A80, (int)"Ni2DBuffer", (int)dword_BA4574); } //----- (0099DB90) -------------------------------------------------------- _DWORD *sub_99DB90() { return sub_861B10(&unk_BA4A88, (int)"NiBackToFrontAccumulator", (int)&unk_BA4868); } //----- (0099DBB0) -------------------------------------------------------- _DWORD *sub_99DBB0() { return sub_861B10(&unk_BA4A90, (int)"NiLODData", (int)dword_BA4574); } //----- (0099DBD0) -------------------------------------------------------- _DWORD *sub_99DBD0() { return sub_861B10(dword_BA4AA4, (int)"NiTriStripsData", (int)dword_BA4850); } //----- (0099DBF0) -------------------------------------------------------- _DWORD *sub_99DBF0() { return sub_861B10(dword_BA4AAC, (int)"NiDitherProperty", (int)dword_BA46DC); } //----- (0099DC10) -------------------------------------------------------- int sub_99DC10() { return atexit(sub_9A48F0); } //----- (0099DC20) -------------------------------------------------------- _DWORD *sub_99DC20() { return sub_861B10(dword_BA4AB8, (int)"NiRendererSpecificProperty", (int)dword_BA46DC); } //----- (0099DC40) -------------------------------------------------------- int sub_99DC40() { return atexit(sub_9A4920); } //----- (0099DC50) -------------------------------------------------------- _DWORD *sub_99DC50() { return sub_861B10(dword_BA4AC4, (int)"NiShadeProperty", (int)dword_BA46DC); } //----- (0099DC70) -------------------------------------------------------- int sub_99DC70() { return atexit(sub_9A4950); } //----- (0099DC80) -------------------------------------------------------- _DWORD *sub_99DC80() { return sub_861B10(dword_BA4AD0, (int)"NiSpecularProperty", (int)dword_BA46DC); } //----- (0099DCA0) -------------------------------------------------------- int sub_99DCA0() { return atexit(sub_9A4980); } //----- (0099DCB0) -------------------------------------------------------- _DWORD *sub_99DCB0() { return sub_861B10(dword_BA4ADC, (int)"NiWireframeProperty", (int)dword_BA46DC); } //----- (0099DCD0) -------------------------------------------------------- int sub_99DCD0() { return atexit(sub_9A49B0); } //----- (0099DCE0) -------------------------------------------------------- _DWORD *sub_99DCE0() { return sub_861B10(dword_BA4AEC, (int)"NiScreenGeometryData", (int)dword_BA4A70); } //----- (0099DD00) -------------------------------------------------------- _DWORD *sub_99DD00() { return sub_861B10(dword_BA4AF4, (int)"NiScreenGeometry", (int)dword_BA478C); } //----- (0099DD20) -------------------------------------------------------- _DWORD *sub_99DD20() { return sub_861B10(dword_BA4AFC, (int)"NiScreenPolygon", (int)dword_BA4574); } //----- (0099DD40) -------------------------------------------------------- _DWORD *sub_99DD40() { return sub_861B10(dword_BA4B04, (int)"NiScreenSpaceCamera", (int)dword_BA475C); } //----- (0099DD60) -------------------------------------------------------- _DWORD *sub_99DD60() { return sub_861B10(dword_BA4B0C, (int)"NiVectorExtraData", (int)dword_BA47B4); } //----- (0099DD80) -------------------------------------------------------- _DWORD *sub_99DD80() { return sub_861B10(dword_BA4B14, (int)"NiTextureEffect", (int)dword_BA4744); } //----- (0099DDA0) -------------------------------------------------------- _DWORD *sub_99DDA0() { return sub_861B10(dword_BA4B1C, (int)"NiSwitchStringExtraData", (int)dword_BA47B4); } //----- (0099DDC0) -------------------------------------------------------- _DWORD *sub_99DDC0() { return sub_861B10(dword_BA4B24, (int)"NiStringsExtraData", (int)dword_BA47B4); } //----- (0099DDE0) -------------------------------------------------------- _DWORD *sub_99DDE0() { return sub_861B10(dword_BA4B2C, (int)"NiSpotLight", (int)dword_BA4B54); } //----- (0099DE00) -------------------------------------------------------- _DWORD *sub_99DE00() { return sub_861B10(dword_BA4B34, (int)"NiSourceCubeMap", (int)dword_BA4778); } //----- (0099DE20) -------------------------------------------------------- _DWORD *sub_99DE20() { return sub_861B10(&unk_BA4B3C, (int)"NiScreenTexture", (int)dword_BA4574); } //----- (0099DE40) -------------------------------------------------------- _DWORD *sub_99DE40() { return sub_861B10(dword_BA4B44, (int)"NiScreenLODData", (int)&unk_BA4A90); } //----- (0099DE60) -------------------------------------------------------- _DWORD *sub_99DE60() { return sub_861B10(dword_BA4B4C, (int)"NiParticlesData", (int)dword_BA4A00); } //----- (0099DE80) -------------------------------------------------------- _DWORD *sub_99DE80() { return sub_861B10(dword_BA4B54, (int)"NiPointLight", (int)dword_BA4A28); } //----- (0099DEA0) -------------------------------------------------------- _DWORD *sub_99DEA0() { return sub_861B10(dword_BA4B5C, (int)"NiParticleMeshesData", (int)dword_BA4B4C); } //----- (0099DEC0) -------------------------------------------------------- _DWORD *sub_99DEC0() { return sub_861B10(&unk_BA4B64, (int)"NiParticleMeshes", (int)dword_BA4BA4); } //----- (0099DEE0) -------------------------------------------------------- _DWORD *sub_99DEE0() { return sub_861B10(dword_BA4B6C, (int)"NiLinesData", (int)dword_BA4A00); } //----- (0099DF00) -------------------------------------------------------- _DWORD *sub_99DF00() { return sub_861B10(dword_BA4B74, (int)"NiLines", (int)dword_BA4840); } //----- (0099DF20) -------------------------------------------------------- _DWORD *sub_99DF20() { return sub_861B10(dword_BA4B7C, (int)"NiIntegersExtraData", (int)dword_BA47B4); } //----- (0099DF40) -------------------------------------------------------- _DWORD *sub_99DF40() { return sub_861B10(dword_BA4B84, (int)"NiFloatExtraData", (int)dword_BA47B4); } //----- (0099DF60) -------------------------------------------------------- _DWORD *sub_99DF60() { return sub_861B10(dword_BA4B8C, (int)"NiBSPNode", (int)dword_BA455C); } //----- (0099DF80) -------------------------------------------------------- _DWORD *sub_99DF80() { return sub_861B10(dword_BA4B94, (int)"NiBooleanExtraData", (int)dword_BA47B4); } //----- (0099DFA0) -------------------------------------------------------- _DWORD *sub_99DFA0() { return sub_861B10(dword_BA4B9C, (int)"NiBillboardNode", (int)dword_BA455C); } //----- (0099DFC0) -------------------------------------------------------- _DWORD *sub_99DFC0() { return sub_861B10(dword_BA4BA4, (int)"NiParticles", (int)dword_BA4840); } //----- (0099DFE0) -------------------------------------------------------- _DWORD *sub_99DFE0() { return sub_861B10(dword_BA4BAC, (int)"NiAdditionalGeometryData", (int)dword_BA4574); } //----- (0099E000) -------------------------------------------------------- _DWORD *sub_99E000() { return sub_861B10(&unk_BA4BC0, (int)"NiAudioSystem", (int)dword_BA4574); } //----- (0099E020) -------------------------------------------------------- _DWORD *sub_99E020() { return sub_861B10(&unk_BA4BC8, (int)"NiMilesAudioSystem", (int)&unk_BA4BC0); } //----- (0099E040) -------------------------------------------------------- _DWORD *sub_99E040() { return sub_861B10(&unk_BA4BD0, (int)"NiMilesSource", (int)&unk_BA4BE0); } //----- (0099E060) -------------------------------------------------------- _DWORD *sub_99E060() { return sub_861B10(&unk_BA4BD8, (int)"NiMilesListener", (int)&unk_BA4BE8); } //----- (0099E080) -------------------------------------------------------- _DWORD *sub_99E080() { return sub_861B10(&unk_BA4BE0, (int)"NiAudioSource", (int)dword_BA457C); } //----- (0099E0A0) -------------------------------------------------------- _DWORD *sub_99E0A0() { return sub_861B10(&unk_BA4BE8, (int)"NiAudioListener", (int)dword_BA457C); } //----- (0099E0C0) -------------------------------------------------------- _DWORD *sub_99E0C0() { return sub_861B10(dword_BA4BF8, (int)"NiPSysEmitterCtlr", (int)dword_BA4DA0); } //----- (0099E0E0) -------------------------------------------------------- _DWORD *sub_99E0E0() { return sub_861B10(dword_BA4C00, (int)"NiPSysVortexFieldModifier", (int)dword_BA4DB8); } //----- (0099E100) -------------------------------------------------------- _DWORD *sub_99E100() { return sub_861B10(dword_BA4C08, (int)"NiPSysUpdateCtlr", (int)dword_BA4808); } //----- (0099E120) -------------------------------------------------------- _DWORD *sub_99E120() { return sub_861B10(dword_BA4C10, (int)"NiPSysTurbulenceFieldModifier", (int)dword_BA4DB8); } //----- (0099E140) -------------------------------------------------------- _DWORD *sub_99E140() { return sub_861B10(dword_BA4C18, (int)"NiPSysSphericalCollider", (int)dword_BA4DC0); } //----- (0099E160) -------------------------------------------------------- _DWORD *sub_99E160() { return sub_861B10(dword_BA4C20, (int)"NiPSysSphereEmitter", (int)dword_BA4DC8); } //----- (0099E180) -------------------------------------------------------- _DWORD *sub_99E180() { return sub_861B10(dword_BA4C28, (int)"NiPSysSpawnModifier", (int)dword_BA4DB0); } //----- (0099E1A0) -------------------------------------------------------- _DWORD *sub_99E1A0() { return sub_861B10(dword_BA4C38, (int)"NiPSysRotationModifier", (int)dword_BA4DB0); } //----- (0099E1C0) -------------------------------------------------------- _DWORD *sub_99E1C0() { return sub_861B10(dword_BA4C40, (int)"NiPSysResetOnLoopCtlr", (int)dword_BA4808); } //----- (0099E1E0) -------------------------------------------------------- _DWORD *sub_99E1E0() { return sub_861B10(dword_BA4C48, (int)"NiPSysRadialFieldModifier", (int)dword_BA4DB8); } //----- (0099E200) -------------------------------------------------------- _DWORD *sub_99E200() { return sub_861B10(dword_BA4C50, (int)"NiPSysPositionModifier", (int)dword_BA4DB0); } //----- (0099E220) -------------------------------------------------------- _DWORD *sub_99E220() { return sub_861B10(dword_BA4C60, (int)"NiPSysPlanarCollider", (int)dword_BA4DC0); } //----- (0099E240) -------------------------------------------------------- _DWORD *sub_99E240() { return sub_861B10(dword_BA4C68, (int)"NiPSysModifierActiveCtlr", (int)dword_BA4DD0); } //----- (0099E260) -------------------------------------------------------- _DWORD *sub_99E260() { return sub_861B10(dword_BA4C70, (int)"NiPSysMeshUpdateModifier", (int)dword_BA4DB0); } //----- (0099E280) -------------------------------------------------------- _DWORD *sub_99E280() { return sub_861B10(dword_BA4C78, (int)"NiPSysMeshEmitter", (int)dword_BA4DA8); } //----- (0099E2A0) -------------------------------------------------------- _DWORD *sub_99E2A0() { return sub_861B10(dword_BA4C80, (int)"NiPSysInitialRotSpeedVarCtlr", (int)dword_BA4DD8); } //----- (0099E2C0) -------------------------------------------------------- _DWORD *sub_99E2C0() { return sub_861B10(dword_BA4C88, (int)"NiPSysInitialRotSpeedCtlr", (int)dword_BA4DD8); } //----- (0099E2E0) -------------------------------------------------------- _DWORD *sub_99E2E0() { return sub_861B10(dword_BA4C90, (int)"NiPSysInitialRotAngleVarCtlr", (int)dword_BA4DD8); } //----- (0099E300) -------------------------------------------------------- _DWORD *sub_99E300() { return sub_861B10(dword_BA4C98, (int)"NiPSysInitialRotAngleCtlr", (int)dword_BA4DD8); } //----- (0099E320) -------------------------------------------------------- _DWORD *sub_99E320() { return sub_861B10(dword_BA4CA0, (int)"NiPSysGrowFadeModifier", (int)dword_BA4DB0); } //----- (0099E340) -------------------------------------------------------- _DWORD *sub_99E340() { return sub_861B10(dword_BA4CA8, (int)"NiPSysGravityStrengthCtlr", (int)dword_BA4DD8); } //----- (0099E360) -------------------------------------------------------- _DWORD *sub_99E360() { return sub_861B10(dword_BA4CB0, (int)"NiPSysGravityFieldModifier", (int)dword_BA4DB8); } //----- (0099E380) -------------------------------------------------------- _DWORD *sub_99E380() { return sub_861B10(dword_BA4CB8, (int)"NiPSysGravityModifier", (int)dword_BA4DB0); } //----- (0099E3A0) -------------------------------------------------------- _DWORD *sub_99E3A0() { return sub_861B10(dword_BA4CC0, (int)"NiPSysFieldMaxDistanceCtlr", (int)dword_BA4DD8); } //----- (0099E3C0) -------------------------------------------------------- _DWORD *sub_99E3C0() { return sub_861B10(dword_BA4CC8, (int)"NiPSysFieldMagnitudeCtlr", (int)dword_BA4DD8); } //----- (0099E3E0) -------------------------------------------------------- _DWORD *sub_99E3E0() { return sub_861B10(dword_BA4CD0, (int)"NiPSysFieldAttenuationCtlr", (int)dword_BA4DD8); } //----- (0099E400) -------------------------------------------------------- _DWORD *sub_99E400() { return sub_861B10(dword_BA4CD8, (int)"NiPSysEmitterSpeedCtlr", (int)dword_BA4DD8); } //----- (0099E420) -------------------------------------------------------- _DWORD *sub_99E420() { return sub_861B10(dword_BA4CE0, (int)"NiPSysEmitterPlanarAngleVarCtlr", (int)dword_BA4DD8); } //----- (0099E440) -------------------------------------------------------- _DWORD *sub_99E440() { return sub_861B10(dword_BA4CE8, (int)"NiPSysEmitterPlanarAngleCtlr", (int)dword_BA4DD8); } //----- (0099E460) -------------------------------------------------------- _DWORD *sub_99E460() { return sub_861B10(dword_BA4CF0, (int)"NiPSysEmitterLifeSpanCtlr", (int)dword_BA4DD8); } //----- (0099E480) -------------------------------------------------------- _DWORD *sub_99E480() { return sub_861B10(dword_BA4CF8, (int)"NiPSysEmitterInitialRadiusCtlr", (int)dword_BA4DD8); } //----- (0099E4A0) -------------------------------------------------------- _DWORD *sub_99E4A0() { return sub_861B10(dword_BA4D00, (int)"NiPSysEmitterDeclinationVarCtlr", (int)dword_BA4DD8); } //----- (0099E4C0) -------------------------------------------------------- _DWORD *sub_99E4C0() { return sub_861B10(dword_BA4D08, (int)"NiPSysEmitterDeclinationCtlr", (int)dword_BA4DD8); } //----- (0099E4E0) -------------------------------------------------------- _DWORD *sub_99E4E0() { return sub_861B10(dword_BA4D10, (int)"NiPSysEmitterCtlrData", (int)dword_BA4574); } //----- (0099E500) -------------------------------------------------------- _DWORD *sub_99E500() { return sub_861B10(dword_BA4D18, (int)"NiPSysDragModifier", (int)dword_BA4DB0); } //----- (0099E520) -------------------------------------------------------- _DWORD *sub_99E520() { return sub_861B10(dword_BA4D20, (int)"NiPSysDragFieldModifier", (int)dword_BA4DB8); } //----- (0099E540) -------------------------------------------------------- _DWORD *sub_99E540() { return sub_861B10(dword_BA4D28, (int)"NiPSysData", (int)dword_BA4B4C); } //----- (0099E560) -------------------------------------------------------- _DWORD *sub_99E560() { return sub_861B10(dword_BA4D30, (int)"NiPSysCylinderEmitter", (int)dword_BA4DC8); } //----- (0099E580) -------------------------------------------------------- _DWORD *sub_99E580() { return sub_861B10(dword_BA4D38, (int)"NiPSysColorModifier", (int)dword_BA4DB0); } //----- (0099E5A0) -------------------------------------------------------- _DWORD *sub_99E5A0() { return sub_861B10(dword_BA4D40, (int)"NiPSysColliderManager", (int)dword_BA4DB0); } //----- (0099E5C0) -------------------------------------------------------- _DWORD *sub_99E5C0() { return sub_861B10(dword_BA4D48, (int)"NiPSysBoxEmitter", (int)dword_BA4DC8); } //----- (0099E5E0) -------------------------------------------------------- _DWORD *sub_99E5E0() { return sub_861B10(dword_BA4D50, (int)"NiPSysBoundUpdateModifier", (int)dword_BA4DB0); } //----- (0099E600) -------------------------------------------------------- _DWORD *sub_99E600() { return sub_861B10(dword_BA4D58, (int)"NiPSysBombModifier", (int)dword_BA4DB0); } //----- (0099E620) -------------------------------------------------------- _DWORD *sub_99E620() { return sub_861B10(dword_BA4D60, (int)"NiPSysAgeDeathModifier", (int)dword_BA4DB0); } //----- (0099E640) -------------------------------------------------------- _DWORD *sub_99E640() { return sub_861B10(dword_BA4D68, (int)"NiPSysAirFieldSpreadCtlr", (int)dword_BA4DD8); } //----- (0099E660) -------------------------------------------------------- _DWORD *sub_99E660() { return sub_861B10(dword_BA4D70, (int)"NiPSysAirFieldModifier", (int)dword_BA4DB8); } //----- (0099E680) -------------------------------------------------------- _DWORD *sub_99E680() { return sub_861B10(dword_BA4D78, (int)"NiPSysAirFieldInheritVelocityCtlr", (int)dword_BA4DD8); } //----- (0099E6A0) -------------------------------------------------------- _DWORD *sub_99E6A0() { return sub_861B10(dword_BA4D80, (int)"NiPSysAirFieldAirFrictionCtlr", (int)dword_BA4DD8); } //----- (0099E6C0) -------------------------------------------------------- _DWORD *sub_99E6C0() { return sub_861B10(dword_BA4D88, (int)"NiParticleSystem", (int)dword_BA4BA4); } //----- (0099E6E0) -------------------------------------------------------- _DWORD *sub_99E6E0() { return sub_861B10(dword_BA4D90, (int)"NiMeshPSysData", (int)dword_BA4D28); } //----- (0099E700) -------------------------------------------------------- _DWORD *sub_99E700() { return sub_861B10(dword_BA4D98, (int)"NiMeshParticleSystem", (int)dword_BA4D88); } //----- (0099E720) -------------------------------------------------------- _DWORD *sub_99E720() { return sub_861B10(dword_BA4DA0, (int)"NiPSysModifierCtlr", (int)dword_BA4498); } //----- (0099E740) -------------------------------------------------------- _DWORD *sub_99E740() { return sub_861B10(dword_BA4DA8, (int)"NiPSysEmitter", (int)dword_BA4DB0); } //----- (0099E760) -------------------------------------------------------- _DWORD *sub_99E760() { return sub_861B10(dword_BA4DB0, (int)"NiPSysModifier", (int)dword_BA4574); } //----- (0099E780) -------------------------------------------------------- _DWORD *sub_99E780() { return sub_861B10(dword_BA4DB8, (int)"NiPSysFieldModifier", (int)dword_BA4DB0); } //----- (0099E7A0) -------------------------------------------------------- _DWORD *sub_99E7A0() { return sub_861B10(dword_BA4DC0, (int)"NiPSysCollider", (int)dword_BA4574); } //----- (0099E7C0) -------------------------------------------------------- _DWORD *sub_99E7C0() { return sub_861B10(dword_BA4DC8, (int)"NiPSysVolumeEmitter", (int)dword_BA4DA8); } //----- (0099E7E0) -------------------------------------------------------- _DWORD *sub_99E7E0() { return sub_861B10(dword_BA4DD0, (int)"NiPSysModifierBoolCtlr", (int)dword_BA4DA0); } //----- (0099E800) -------------------------------------------------------- _DWORD *sub_99E800() { return sub_861B10(dword_BA4DD8, (int)"NiPSysModifierFloatCtlr", (int)dword_BA4DA0); } //----- (0099E820) -------------------------------------------------------- _BYTE *sub_99E820() { signed int v0; // ecx _BYTE *result; // eax v0 = 31; result = &unk_BA51E0; do { *(result - 8) = 0; *((_DWORD *)result - 1) = -1; *result = 0; result += 12; --v0; } while ( v0 >= 0 ); return result; } //----- (0099E850) -------------------------------------------------------- int sub_99E850() { InitializeCriticalSection(&stru_BA5358); return atexit(sub_9A49E0); } //----- (0099E870) -------------------------------------------------------- _DWORD *sub_99E870() { return sub_861B10(&unk_BA537C, (int)"NiRoom", (int)dword_BA455C); } //----- (0099E890) -------------------------------------------------------- _DWORD *sub_99E890() { return sub_861B10(&unk_BA5384, (int)"NiOldWall", (int)dword_BA455C); } //----- (0099E8B0) -------------------------------------------------------- _DWORD *sub_99E8B0() { return sub_861B10(&unk_BA5390, (int)"NiRoomGroup", (int)dword_BA455C); } //----- (0099E8D0) -------------------------------------------------------- _DWORD *sub_99E8D0() { return sub_861B10(&unk_BA5398, (int)"NiPortal", (int)dword_BA457C); } //----- (0099E8F0) -------------------------------------------------------- _DWORD *sub_99E8F0() { return sub_861B10(&unk_BA54CC, (int)"NiInputSystem", 0); } //----- (0099E910) -------------------------------------------------------- _DWORD *sub_99E910() { return sub_861B10(&unk_BA54D4, (int)"NiInputSystem::CreateParams", 0); } //----- (0099E930) -------------------------------------------------------- _DWORD *sub_99E930() { return sub_861B10(&unk_BA54EC, (int)"NiDI8InputSystem", (int)&unk_BA54CC); } //----- (0099E950) -------------------------------------------------------- _DWORD *sub_99E950() { return sub_861B10(&unk_BA54F4, (int)"NiDI8InputSystem::DI8CreateParams", (int)&unk_BA54D4); } //----- (0099E970) -------------------------------------------------------- _DWORD *sub_99E970() { return sub_861B10(&unk_BA54FC, (int)"NiInputGamePad", (int)&unk_BA550C); } //----- (0099E990) -------------------------------------------------------- _DWORD *sub_99E990() { return sub_861B10(&unk_BA550C, (int)"NiInputDevice", 0); } //----- (0099E9B0) -------------------------------------------------------- _DWORD *sub_99E9B0() { return sub_861B10(&unk_BA5514, (int)"NiInputDI8Mouse", (int)&unk_BA552C); } //----- (0099E9D0) -------------------------------------------------------- _DWORD *sub_99E9D0() { return sub_861B10(&unk_BA551C, (int)"NiInputDI8Keyboard", (int)&unk_BA5534); } //----- (0099E9F0) -------------------------------------------------------- _DWORD *sub_99E9F0() { return sub_861B10(&unk_BA5524, (int)"NiInputDI8GamePad", (int)&unk_BA54FC); } //----- (0099EA10) -------------------------------------------------------- _DWORD *sub_99EA10() { return sub_861B10(&unk_BA552C, (int)"NiInputMouse", (int)&unk_BA550C); } //----- (0099EA30) -------------------------------------------------------- _DWORD *sub_99EA30() { return sub_861B10(&unk_BA5534, (int)"NiInputKeyboard", (int)&unk_BA550C); } //----- (0099EA50) -------------------------------------------------------- void *sub_99EA50() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA553C; } // BA4504: using guessed type int dword_BA4504; //----- (0099EA60) -------------------------------------------------------- void *sub_99EA60() { int v0; // ecx v0 = dword_BA5540++; if ( !v0 ) sub_8AA170((int)sub_8B91F0, (int)sub_8B9210); return &unk_BA553D; } // BA5540: using guessed type int dword_BA5540; //----- (0099EA70) -------------------------------------------------------- int sub_99EA70() { return atexit(sub_9A49F0); } //----- (0099EA80) -------------------------------------------------------- void *sub_99EA80() { int v0; // ecx v0 = dword_BA65B0++; if ( !v0 ) sub_8AA170((int)sub_8CE6E0, (int)sub_8CE700); return &unk_BA6574; } // BA65B0: using guessed type int dword_BA65B0; //----- (0099EA90) -------------------------------------------------------- _DWORD *sub_99EA90() { return sub_861B10(&unk_BA6578, (int)"NiD3DXEffectShader", (int)&unk_BA6D4C); } //----- (0099EAB0) -------------------------------------------------------- void *sub_99EAB0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65B8; } // BA4504: using guessed type int dword_BA4504; //----- (0099EAC0) -------------------------------------------------------- void *sub_99EAC0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65B9; } // BA4504: using guessed type int dword_BA4504; //----- (0099EAD0) -------------------------------------------------------- int sub_99EAD0() { dword_AC20EC = (int)operator new(0x94u); memset((void *)dword_AC20EC, 0, 4 * dword_AC20E8); byte_AC20F4 = 1; off_AC20E4 = &NiTStringPointerMap>::`vftable'; return atexit(sub_9A4A50); } // A4075C: using guessed type void *NiTStringPointerMap>::`vftable'; // AC20E4: using guessed type void **off_AC20E4; // AC20E8: using guessed type int dword_AC20E8; // AC20EC: using guessed type int dword_AC20EC; // AC20F4: using guessed type char byte_AC20F4; //----- (0099EB30) -------------------------------------------------------- void *sub_99EB30() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65BA; } // BA4504: using guessed type int dword_BA4504; //----- (0099EB40) -------------------------------------------------------- int sub_99EB40() { dword_AC2254 = (int)operator new[](0x94u); memset((void *)dword_AC2254, 0, 4 * dword_AC2250); byte_AC225C = 1; off_AC224C = &NiTStringPointerMap>::`vftable'; return atexit(sub_9A4A60); } // A407DC: using guessed type void *NiTStringPointerMap>::`vftable'; // AC224C: using guessed type void **off_AC224C; // AC2250: using guessed type int dword_AC2250; // AC2254: using guessed type int dword_AC2254; // AC225C: using guessed type char byte_AC225C; //----- (0099EBA0) -------------------------------------------------------- int sub_99EBA0() { dword_AC23B8 = (int)operator new(0x94u); memset((void *)dword_AC23B8, 0, 4 * dword_AC23B4); byte_AC23C0 = 1; off_AC23B0 = &NiTStringPointerMap>::`vftable'; return atexit(sub_9A4A70); } // A4085C: using guessed type void *NiTStringPointerMap>::`vftable'; // AC23B0: using guessed type void **off_AC23B0; // AC23B4: using guessed type int dword_AC23B4; // AC23B8: using guessed type int dword_AC23B8; // AC23C0: using guessed type char byte_AC23C0; //----- (0099EC00) -------------------------------------------------------- int sub_99EC00() { dword_AC2540 = (int)operator new[](0x94u); memset((void *)dword_AC2540, 0, 4 * dword_AC253C); byte_AC2548 = 1; off_AC2538 = &NiTStringPointerMap>::`vftable'; return atexit(sub_9A4A80); } // A408DC: using guessed type void *NiTStringPointerMap>::`vftable'; // AC2538: using guessed type void **off_AC2538; // AC253C: using guessed type int dword_AC253C; // AC2540: using guessed type int dword_AC2540; // AC2548: using guessed type char byte_AC2548; //----- (0099EC60) -------------------------------------------------------- void *sub_99EC60() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65BB; } // BA4504: using guessed type int dword_BA4504; //----- (0099EC70) -------------------------------------------------------- void *sub_99EC70() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65BC; } // BA4504: using guessed type int dword_BA4504; //----- (0099EC80) -------------------------------------------------------- void *sub_99EC80() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65BD; } // BA4504: using guessed type int dword_BA4504; //----- (0099EC90) -------------------------------------------------------- void *sub_99EC90() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65D0; } // BA4504: using guessed type int dword_BA4504; //----- (0099ECA0) -------------------------------------------------------- _DWORD *sub_99ECA0() { return sub_861B10(&unk_BA65C0, (int)"NsPgToonRegister_v2", (int)&unk_BA65D4); } //----- (0099ECC0) -------------------------------------------------------- _DWORD *sub_99ECC0() { return sub_861B10(dword_BA65C8, (int)"NPTR_ISShader_v2", (int)dword_BA47B4); } //----- (0099ECE0) -------------------------------------------------------- _DWORD *sub_99ECE0() { return sub_861B10(&unk_BA65D4, (int)"INpShader", 0); } //----- (0099ED00) -------------------------------------------------------- _DWORD *sub_99ED00() { return sub_861B10(dword_BA65DC, (int)"NsPgToonExtraData", (int)dword_BA47B4); } //----- (0099ED20) -------------------------------------------------------- void *sub_99ED20() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA65E4; } // BA4504: using guessed type int dword_BA4504; //----- (0099ED30) -------------------------------------------------------- _DWORD *sub_99ED30() { return sub_861B10(&unk_BA65E8, (int)"NsPgCatoonShader", (int)&unk_BA6CB4); } //----- (0099ED50) -------------------------------------------------------- signed int sub_99ED50() { signed int result; // eax result = sub_806A70(); dword_BA65F8 = result; return result; } // BA65F8: using guessed type int dword_BA65F8; //----- (0099ED60) -------------------------------------------------------- signed int sub_99ED60() { signed int result; // eax result = sub_804020(); dword_BA65FC = result; return result; } // BA65FC: using guessed type int dword_BA65FC; //----- (0099ED70) -------------------------------------------------------- signed int sub_99ED70() { signed int result; // eax result = sub_806520(); dword_BA65F0 = result; return result; } // BA65F0: using guessed type int dword_BA65F0; //----- (0099ED80) -------------------------------------------------------- void *sub_99ED80() { int v0; // ecx v0 = dword_BA4BF4++; if ( !v0 ) sub_8AA170((int)sub_893060, (int)sub_893390); return &unk_BA65F4; } // 893060: using guessed type int sub_893060(); // BA4BF4: using guessed type int dword_BA4BF4; //----- (0099ED90) -------------------------------------------------------- void *sub_99ED90() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA6600; } // BA4504: using guessed type int dword_BA4504; //----- (0099EDA0) -------------------------------------------------------- void *sub_99EDA0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA6654; } // BA4504: using guessed type int dword_BA4504; //----- (0099EDC0) -------------------------------------------------------- signed int sub_99EDC0() { signed int result; // eax result = sub_804020(); dword_BA66B0 = result; return result; } // BA66B0: using guessed type int dword_BA66B0; //----- (0099EDD0) -------------------------------------------------------- signed int sub_99EDD0() { signed int result; // eax result = sub_804510(); dword_BA66AC = result; return result; } // BA66AC: using guessed type int dword_BA66AC; //----- (0099EDE0) -------------------------------------------------------- signed int sub_99EDE0() { signed int result; // eax result = sub_804BB0(); dword_BA66B8 = result; return result; } // BA66B8: using guessed type int dword_BA66B8; //----- (0099EDF0) -------------------------------------------------------- signed int sub_99EDF0() { signed int result; // eax result = sub_805670(); dword_BA66A4 = result; return result; } // BA66A4: using guessed type int dword_BA66A4; //----- (0099EE00) -------------------------------------------------------- signed int sub_99EE00() { signed int result; // eax result = sub_805CF0(); dword_BA6698 = result; return result; } // BA6698: using guessed type int dword_BA6698; //----- (0099EE10) -------------------------------------------------------- signed int sub_99EE10() { signed int result; // eax result = sub_806200(); dword_BA6684 = result; return result; } // BA6684: using guessed type int dword_BA6684; //----- (0099EE20) -------------------------------------------------------- signed int sub_99EE20() { signed int result; // eax result = sub_806520(); dword_BA666C = result; return result; } // BA666C: using guessed type int dword_BA666C; //----- (0099EE30) -------------------------------------------------------- signed int sub_99EE30() { signed int result; // eax result = sub_806A70(); dword_BA6694 = result; return result; } // BA6694: using guessed type int dword_BA6694; //----- (0099EE40) -------------------------------------------------------- signed int sub_99EE40() { signed int result; // eax result = sub_8071E0(); dword_BA6688 = result; return result; } // BA6688: using guessed type int dword_BA6688; //----- (0099EE50) -------------------------------------------------------- signed int sub_99EE50() { signed int result; // eax result = sub_807610(); dword_BA66BC = result; return result; } // BA66BC: using guessed type int dword_BA66BC; //----- (0099EE60) -------------------------------------------------------- signed int sub_99EE60() { signed int result; // eax result = sub_8078B0(); dword_BA669C = result; return result; } // BA669C: using guessed type int dword_BA669C; //----- (0099EE70) -------------------------------------------------------- signed int sub_99EE70() { signed int result; // eax result = sub_807B60(); dword_BA6680 = result; return result; } // BA6680: using guessed type int dword_BA6680; //----- (0099EE80) -------------------------------------------------------- signed int sub_99EE80() { signed int result; // eax result = sub_807E20(); dword_BA66B4 = result; return result; } // BA66B4: using guessed type int dword_BA66B4; //----- (0099EE90) -------------------------------------------------------- signed int sub_99EE90() { signed int result; // eax result = sub_808AA0(); dword_BA6674 = result; return result; } // BA6674: using guessed type int dword_BA6674; //----- (0099EEA0) -------------------------------------------------------- signed int sub_99EEA0() { signed int result; // eax result = sub_8094D0(); dword_BA6690 = result; return result; } // BA6690: using guessed type int dword_BA6690; //----- (0099EEB0) -------------------------------------------------------- signed int sub_99EEB0() { signed int result; // eax result = sub_809B20(); dword_BA667C = result; return result; } // BA667C: using guessed type int dword_BA667C; //----- (0099EEC0) -------------------------------------------------------- signed int sub_99EEC0() { signed int result; // eax result = sub_809DE0(); dword_BA668C = result; return result; } // BA668C: using guessed type int dword_BA668C; //----- (0099EED0) -------------------------------------------------------- signed int sub_99EED0() { signed int result; // eax result = sub_80A030(); dword_BA6670 = result; return result; } // BA6670: using guessed type int dword_BA6670; //----- (0099EEE0) -------------------------------------------------------- signed int sub_99EEE0() { signed int result; // eax result = sub_80A1F0(); dword_BA6668 = result; return result; } // BA6668: using guessed type int dword_BA6668; //----- (0099EEF0) -------------------------------------------------------- signed int sub_99EEF0() { signed int result; // eax result = sub_80A4E0(); dword_BA6678 = result; return result; } // BA6678: using guessed type int dword_BA6678; //----- (0099EF00) -------------------------------------------------------- signed int sub_99EF00() { signed int result; // eax result = sub_80A7C0(); dword_BA66A0 = result; return result; } // BA66A0: using guessed type int dword_BA66A0; //----- (0099EF10) -------------------------------------------------------- void *sub_99EF10() { int v0; // ecx v0 = dword_BA3BA4++; if ( !v0 ) sub_8AA170((int)sub_80A850, (int)sub_80AD00); return &unk_BA66A9; } // BA3BA4: using guessed type int dword_BA3BA4; //----- (0099EF20) -------------------------------------------------------- void *sub_99EF20() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA66A8; } // BA4504: using guessed type int dword_BA4504; //----- (0099EF30) -------------------------------------------------------- _DWORD *sub_99EF30() { return sub_861B10(dword_BA6660, (int)"NsFadeNode", (int)dword_BA455C); } //----- (0099EF50) -------------------------------------------------------- _DWORD *sub_99EF50() { return sub_861B10(dword_BA6658, (int)"NiAlphaRefController", (int)dword_BA44E8); } //----- (0099EF70) -------------------------------------------------------- void *sub_99EF70() { int v0; // ecx v0 = dword_BA5374++; if ( !v0 ) sub_8AA170((int)sub_8AB600, (int)sub_8AB650); return &unk_BA66C0; } // 8AB600: using guessed type int sub_8AB600(); // BA5374: using guessed type int dword_BA5374; //----- (0099EF80) -------------------------------------------------------- void *sub_99EF80() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA66C1; } // BA4504: using guessed type int dword_BA4504; //----- (0099EF90) -------------------------------------------------------- void *sub_99EF90() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA66F4; } // BA4504: using guessed type int dword_BA4504; //----- (0099EFB0) -------------------------------------------------------- void *sub_99EFB0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA68F8; } // BA4504: using guessed type int dword_BA4504; //----- (0099EFC0) -------------------------------------------------------- void *sub_99EFC0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA68F9; } // BA4504: using guessed type int dword_BA4504; //----- (0099EFD0) -------------------------------------------------------- _DWORD *sub_99EFD0() { return sub_861B10(&unk_BA68FC, (int)"MasterPropertyAccumulator", (int)&unk_BA4868); } //----- (0099EFF0) -------------------------------------------------------- void *sub_99EFF0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA6904; } // BA4504: using guessed type int dword_BA4504; //----- (0099F000) -------------------------------------------------------- int sub_99F000() { char *v0; // eax v0 = (char *)type_info::name( (type_info *)&CGlowScreenEffect `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_BA6934, 0, v0, (int)&dword_ACDE00, (int)sub_8ECB30); return atexit(sub_9A4CB0); } //----- (0099F040) -------------------------------------------------------- int sub_99F040() { char *v0; // eax v0 = (char *)type_info::name( (type_info *)&CDepthOfFieldEffect `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_BA6964, 0, v0, (int)&dword_ACDE00, (int)sub_8ED8E0); return atexit(sub_9A4C10); } //----- (0099F080) -------------------------------------------------------- int sub_99F080() { char *v0; // eax v0 = (char *)type_info::name( (type_info *)&CAfterImageEffect `RTTI Type Descriptor', (struct __type_info_node *)&unk_BA2CCC); sub_8E6500(&dword_BA6994, 0, v0, (int)&dword_ACDE00, (int)sub_8ED420); return atexit(sub_9A4B70); } //----- (0099F0C0) -------------------------------------------------------- void *sub_99F0C0() { int v0; // ecx v0 = dword_BA4504++; if ( !v0 ) sub_8AA170((int)sub_833640, (int)sub_833900); return &unk_BA69C4; } // BA4504: using guessed type int dword_BA4504; //----- (0099F0D0) -------------------------------------------------------- _DWORD *sub_99F0D0() { return sub_861B10(&unk_BA69C8, (int)"CPostProcessEffect", 0); } //----- (0099F0F0) -------------------------------------------------------- _DWORD *sub_99F0F0() { return sub_861B10(&unk_BA69D0, (int)"HazeAccumulator", (int)&unk_BA4868); } //----- (0099F110) -------------------------------------------------------- _DWORD *sub_99F110() { return sub_861B10(&unk_BA69D8, (int)"CHazeScreenEffect", (int)&unk_BA6A08); } //----- (0099F130) -------------------------------------------------------- _DWORD *sub_99F130() { return sub_861B10(&unk_BA69E4, (int)"CGlowScreenEffect", (int)&unk_BA6A08); } //----- (0099F150) -------------------------------------------------------- _DWORD *sub_99F150() { return sub_861B10(&unk_BA69F0, (int)"CAfterImageEffect", (int)&unk_BA6A08); } //----- (0099F170) -------------------------------------------------------- _DWORD *sub_99F170() { return sub_861B10(&unk_BA69F8, (int)"CDepthOfFieldEffect", (int)&unk_BA6A08); } //----- (0099F190) -------------------------------------------------------- _DWORD *sub_99F190() { return sub_861B10(&unk_BA6A08, (int)"CScreenEffect", (int)&unk_BA69C8); } //----- (0099F1B0) -------------------------------------------------------- _DWORD *sub_99F1B0() { return sub_861B10(&dword_BA6A10, (int)"PgFrameWork", 0); } // BA6A10: using guessed type int dword_BA6A10; //----- (0099F1D0) -------------------------------------------------------- int sub_99F1D0() { sub_8EF2C0(&unk_BA6A18); return atexit(sub_9A4D50); } //----- (0099F1F0) -------------------------------------------------------- _DWORD *sub_99F1F0() { return sub_861B10(&unk_BA6A8C, (int)"PgWin", (int)dword_BA455C); } //----- (0099F210) -------------------------------------------------------- int sub_99F210() { dword_BA6A94 = (int)&PgWin::Bool::`vftable'; dword_BA6A9C = 0; byte_BA6A98 = 0; return atexit(sub_9A4D60); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6A94: using guessed type int dword_BA6A94; // BA6A98: using guessed type char byte_BA6A98; // BA6A9C: using guessed type int dword_BA6A9C; //----- (0099F240) -------------------------------------------------------- int sub_99F240() { dword_BA6AA0 = (int)&PgWin::Bool::`vftable'; dword_BA6AA8 = 0; byte_BA6AA4 = 0; return atexit(sub_9A4D70); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AA0: using guessed type int dword_BA6AA0; // BA6AA4: using guessed type char byte_BA6AA4; // BA6AA8: using guessed type int dword_BA6AA8; //----- (0099F270) -------------------------------------------------------- int sub_99F270() { dword_BA6AAC = (int)&PgWin::Bool::`vftable'; dword_BA6AB4 = 0; byte_BA6AB0 = 0; return atexit(sub_9A4D80); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AAC: using guessed type int dword_BA6AAC; // BA6AB0: using guessed type char byte_BA6AB0; // BA6AB4: using guessed type int dword_BA6AB4; //----- (0099F2A0) -------------------------------------------------------- int sub_99F2A0() { dword_BA6AB8 = (int)&PgWin::Bool::`vftable'; dword_BA6AC0 = 0; byte_BA6ABC = 0; return atexit(sub_9A4D90); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AB8: using guessed type int dword_BA6AB8; // BA6ABC: using guessed type char byte_BA6ABC; // BA6AC0: using guessed type int dword_BA6AC0; //----- (0099F2D0) -------------------------------------------------------- int sub_99F2D0() { dword_BA6AC4 = (int)&PgWin::Bool::`vftable'; dword_BA6ACC = 0; byte_BA6AC8 = 0; return atexit(sub_9A4DA0); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AC4: using guessed type int dword_BA6AC4; // BA6AC8: using guessed type char byte_BA6AC8; // BA6ACC: using guessed type int dword_BA6ACC; //----- (0099F300) -------------------------------------------------------- int sub_99F300() { dword_BA6AD0 = (int)&PgWin::Bool::`vftable'; dword_BA6AD8 = 0; byte_BA6AD4 = 0; return atexit(sub_9A4DB0); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AD0: using guessed type int dword_BA6AD0; // BA6AD4: using guessed type char byte_BA6AD4; // BA6AD8: using guessed type int dword_BA6AD8; //----- (0099F330) -------------------------------------------------------- int sub_99F330() { dword_BA6ADC = (int)&PgWin::Bool::`vftable'; dword_BA6AE4 = 0; byte_BA6AE0 = 0; return atexit(sub_9A4DC0); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6ADC: using guessed type int dword_BA6ADC; // BA6AE0: using guessed type char byte_BA6AE0; // BA6AE4: using guessed type int dword_BA6AE4; //----- (0099F360) -------------------------------------------------------- int sub_99F360() { dword_BA6AE8 = (int)&PgWin::Bool::`vftable'; dword_BA6AF0 = 0; byte_BA6AEC = 0; return atexit(sub_9A4DD0); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AE8: using guessed type int dword_BA6AE8; // BA6AEC: using guessed type char byte_BA6AEC; // BA6AF0: using guessed type int dword_BA6AF0; //----- (0099F390) -------------------------------------------------------- int sub_99F390() { dword_BA6AF4 = (int)&PgWin::Bool::`vftable'; dword_BA6AFC = 0; byte_BA6AF8 = 0; return atexit(sub_9A4DE0); } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AF4: using guessed type int dword_BA6AF4; // BA6AF8: using guessed type char byte_BA6AF8; // BA6AFC: using guessed type int dword_BA6AFC; //----- (0099F3C0) -------------------------------------------------------- _DWORD *sub_99F3C0() { return sub_861B10(&unk_BA6B00, (int)"PgWinText", (int)&unk_BA6A8C); } //----- (0099F3E0) -------------------------------------------------------- int sub_99F3E0() { sub_8F7760((float *)&unk_BA6B10); return atexit(sub_9A4DF0); } //----- (0099F400) -------------------------------------------------------- _DWORD *sub_99F400() { return sub_861B10(&unk_BA6BA8, (int)"PgWinBut", (int)&unk_BA6A8C); } //----- (0099F420) -------------------------------------------------------- int sub_99F420() { dword_BA6BB8 = 0; return atexit(sub_9A4E00); } // BA6BB8: using guessed type int dword_BA6BB8; //----- (0099F460) -------------------------------------------------------- int sub_99F460() { dword_BA6BBC = 0; return atexit(sub_9A4E20); } // BA6BBC: using guessed type int dword_BA6BBC; //----- (0099F4A0) -------------------------------------------------------- _DWORD *sub_99F4A0() { return sub_861B10(&unk_BA6BD4, (int)"PgCursor", (int)dword_BA71F4); } //----- (0099F4C0) -------------------------------------------------------- int sub_99F4C0() { dword_BA6BDC = 0; return atexit(sub_9A4E40); } // BA6BDC: using guessed type int dword_BA6BDC; //----- (0099F500) -------------------------------------------------------- int sub_99F500() { dword_BA6BE0 = 0; return atexit(sub_9A4E60); } // BA6BE0: using guessed type int dword_BA6BE0; //----- (0099F540) -------------------------------------------------------- int sub_99F540() { sub_909480(&unk_BA6BF8, (int)"Root", 0); return atexit(sub_9A4E80); } //----- (0099F570) -------------------------------------------------------- int sub_99F570() { sub_9098C0(&dword_BA6C20, 1); return atexit(sub_9A4E90); } // BA6C20: using guessed type int dword_BA6C20; //----- (0099F5A0) -------------------------------------------------------- int sub_99F5A0() { sub_90E950(&dword_BA6C34, 37); dword_BA6C34 = (int)&NiTMap::`vftable'; return atexit(sub_9A4EB0); } // A43304: using guessed type void *NiTMap::`vftable'; // BA6C34: using guessed type int dword_BA6C34; //----- (0099F5D0) -------------------------------------------------------- _DWORD *sub_99F5D0() { return sub_861B10(&unk_BA6C44, (int)"PgWinScaleCtrl", (int)dword_BA44E8); } //----- (0099F5FF) -------------------------------------------------------- int sub_99F5FF() { HANDLE v0; // eax v0 = GetProcessHeap(); dword_BA6C94 = (int)&off_A44008; dword_BA6C98 = (int)v0; byte_BA6C9C = 0; return atexit(sub_9A4EF6); } // A44008: using guessed type int (__stdcall *off_A44008)(SIZE_T dwBytes); // BA6C94: using guessed type int dword_BA6C94; // BA6C98: using guessed type int dword_BA6C98; // BA6C9C: using guessed type char byte_BA6C9C; //----- (0099F627) -------------------------------------------------------- int sub_99F627() { return atexit(sub_9A4F00); } //----- (0099F640) -------------------------------------------------------- _DWORD *sub_99F640() { return sub_861B10(&unk_BA6CB4, (int)"NiD3DDefaultShader", (int)&unk_BA6D4C); } //----- (0099F660) -------------------------------------------------------- _DWORD *sub_99F660() { return sub_861B10(&unk_BA6D4C, (int)"NiD3DShader", (int)&unk_BA6D54); } //----- (0099F680) -------------------------------------------------------- _DWORD *sub_99F680() { return sub_861B10(&unk_BA6D54, (int)"NiD3DShaderInterface", (int)&unk_BA47C4); } //----- (0099F6A0) -------------------------------------------------------- _DWORD *sub_99F6A0() { return sub_861B10(&unk_BA6E58, (int)"NiDX9Renderer", (int)dword_BA46D4); } //----- (0099F6C0) -------------------------------------------------------- int sub_99F6C0() { return atexit(sub_9A4F10); } //----- (0099F6D0) -------------------------------------------------------- void *sub_99F6D0() { int v0; // ecx v0 = dword_BA7174++; if ( !v0 ) sub_8AA170((int)sub_93CEA0, (int)sub_93CD50); return &unk_BA6E60; } // BA7174: using guessed type int dword_BA7174; //----- (0099F6E0) -------------------------------------------------------- _DWORD *sub_99F6E0() { return sub_861B10(&unk_BA6E80, (int)"NiDX92DBufferData", 0); } //----- (0099F700) -------------------------------------------------------- _DWORD *sub_99F700() { return sub_861B10(&unk_BA6E88, (int)"NiDX9TextureBufferData", (int)&unk_BA6E80); } //----- (0099F720) -------------------------------------------------------- _DWORD *sub_99F720() { return sub_861B10(&unk_BA6E90, (int)"NiDX9DepthStencilBufferData", (int)&unk_BA6E80); } //----- (0099F740) -------------------------------------------------------- _DWORD *sub_99F740() { return sub_861B10(&unk_BA6E98, (int)"NiDX9ImplicitDepthStencilBufferData", (int)&unk_BA6E90); } //----- (0099F760) -------------------------------------------------------- _DWORD *sub_99F760() { return sub_861B10(&unk_BA6EA0, (int)"NiDX9AdditionalDepthStencilBufferData", (int)&unk_BA6E90); } //----- (0099F780) -------------------------------------------------------- int sub_99F780() { InitializeCriticalSection(&stru_BA6EA8); return atexit(sub_9A4F70); } //----- (0099F7A0) -------------------------------------------------------- int sub_99F7A0() { return atexit(sub_9A4F80); } //----- (0099F7B0) -------------------------------------------------------- _DWORD *sub_99F7B0() { return sub_861B10(&unk_BA6EC8, (int)"NiDX9OnscreenBufferData", (int)&unk_BA6E80); } //----- (0099F7D0) -------------------------------------------------------- _DWORD *sub_99F7D0() { return sub_861B10(&unk_BA6ED0, (int)"NiDX9ImplicitBufferData", (int)&unk_BA6EC8); } //----- (0099F7F0) -------------------------------------------------------- _DWORD *sub_99F7F0() { return sub_861B10(&unk_BA6ED8, (int)"NiDX9SwapChainBufferData", (int)&unk_BA6EC8); } //----- (0099F810) -------------------------------------------------------- _DWORD *sub_99F810() { return sub_861B10(&unk_BA6EE0, (int)"NiDX9SwapChainDepthStencilBufferData", (int)&unk_BA6E90); } //----- (0099F830) -------------------------------------------------------- _DWORD *sub_99F830() { return sub_861B10(&unk_BA714C, (int)"NiD3DController", (int)dword_BA4808); } //----- (0099F850) -------------------------------------------------------- _DWORD *sub_99F850() { return sub_861B10(dword_BA7154, (int)"NiD3DTimeSyncController", (int)&unk_BA714C); } //----- (0099F870) -------------------------------------------------------- void sub_99F870() { float v0; // ST00_4 v0 = sqrt(3.402823466385289e38); flt_BA7160 = v0; } // BA7160: using guessed type float flt_BA7160; //----- (0099F890) -------------------------------------------------------- _DWORD *sub_99F890() { return sub_861B10(&unk_BA7168, (int)"NiDX9Direct3DTexture", (int)dword_BA4884); } //----- (0099F8B0) -------------------------------------------------------- _DWORD *sub_99F8B0() { return sub_861B10(&unk_BA71E4, (int)"NiSCMExtraData", (int)dword_BA47B4); } //----- (0099F8D0) -------------------------------------------------------- _DWORD *sub_99F8D0() { return sub_861B10(&unk_BA71EC, (int)"NiRenderedCubeMap", (int)&unk_BA479C); } //----- (0099F8F0) -------------------------------------------------------- _DWORD *sub_99F8F0() { return sub_861B10(dword_BA71F4, (int)"NiCursor", 0); } //----- (0099F910) -------------------------------------------------------- _DWORD *sub_99F910() { return sub_861B10(&unk_BA7204, (int)"NiBinaryShader", (int)&unk_BA6D4C); } //----- (0099F930) -------------------------------------------------------- void __cdecl sub_99F930() { `eh vector destructor iterator'(&unk_AA7578, 0x1Cu, 104, sub_636A10); } //----- (0099F950) -------------------------------------------------------- void __cdecl sub_99F950() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE4; if ( dword_AC9CE4 && !InterlockedDecrement((volatile LONG *)(dword_AC9CE4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AC9CE4: using guessed type int dword_AC9CE4; //----- (0099F980) -------------------------------------------------------- void __cdecl sub_99F980() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AC9CE8; if ( dword_AC9CE8 && !InterlockedDecrement((volatile LONG *)(dword_AC9CE8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AC9CE8: using guessed type int dword_AC9CE8; //----- (0099F9B0) -------------------------------------------------------- void __cdecl sub_99F9B0() { `eh vector destructor iterator'(dword_ACB1D8, 4u, 12, sub_410C00); } //----- (0099F9D0) -------------------------------------------------------- void __cdecl sub_99F9D0() { if ( dword_ACB208 ) { (**(void (***)(void))dword_ACB208)(); if ( dword_ACB208 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB208 + 8))(1); dword_ACB208 = 0; } } // ACB208: using guessed type int dword_ACB208; //----- (0099FA00) -------------------------------------------------------- void __cdecl sub_99FA00() { sub_42C4F0(&off_AA96AC); } // AA96AC: using guessed type void **off_AA96AC; //----- (0099FA10) -------------------------------------------------------- void __cdecl sub_99FA10() { sub_42C5C0(&off_AA96C0); } // AA96C0: using guessed type void **off_AA96C0; //----- (0099FA20) -------------------------------------------------------- void __cdecl sub_99FA20() { dword_ACB248 = (int)&ItemMixDataTab::`vftable'; sub_749F80((void **)&unk_ACB24C); } // 9AC8BC: using guessed type void *ItemMixDataTab::`vftable'; // ACB248: using guessed type int dword_ACB248; //----- (0099FA40) -------------------------------------------------------- void __cdecl sub_99FA40() { if ( dword_ACB2AC ) operator delete(dword_ACB2AC); dword_ACB2AC = 0; dword_ACB2B0 = 0; dword_ACB2B4 = 0; sub_433FA0((void ***)&dword_ACB2A0); operator delete(dword_ACB2A0); } // ACB2B0: using guessed type int dword_ACB2B0; // ACB2B4: using guessed type int dword_ACB2B4; //----- (0099FA90) -------------------------------------------------------- void __cdecl sub_99FA90() { if ( (unsigned int)dword_AA9908 >= 0x10 ) operator delete(dword_AA98F4); dword_AA9908 = 15; dword_AA9904 = 0; LOBYTE(dword_AA98F4) = 0; } // AA9904: using guessed type int dword_AA9904; // AA9908: using guessed type int dword_AA9908; //----- (0099FAC0) -------------------------------------------------------- void __cdecl sub_99FAC0() { `eh vector destructor iterator'(dword_ACB2F0, 4u, 32, sub_410C00); } //----- (0099FAE0) -------------------------------------------------------- void __cdecl sub_99FAE0() { sub_451370(&dword_ACB6D8); } // ACB6D8: using guessed type int dword_ACB6D8; //----- (0099FAF0) -------------------------------------------------------- void __cdecl sub_99FAF0() { sub_451370(&dword_ACC2F0); } // ACC2F0: using guessed type int dword_ACC2F0; //----- (0099FB00) -------------------------------------------------------- void __cdecl sub_99FB00() { if ( dword_ACB6BC ) { (**(void (***)(void))dword_ACB6BC)(); if ( dword_ACB6BC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6BC + 8))(1); dword_ACB6BC = 0; } } // ACB6BC: using guessed type int dword_ACB6BC; //----- (0099FB30) -------------------------------------------------------- void __cdecl sub_99FB30() { if ( dword_ACB6B8 ) { (**(void (***)(void))dword_ACB6B8)(); if ( dword_ACB6B8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6B8 + 8))(1); dword_ACB6B8 = 0; } } // ACB6B8: using guessed type int dword_ACB6B8; //----- (0099FB60) -------------------------------------------------------- void __cdecl sub_99FB60() { if ( dword_ACB6C0 ) { (**(void (***)(void))dword_ACB6C0)(); if ( dword_ACB6C0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6C0 + 8))(1); dword_ACB6C0 = 0; } } // ACB6C0: using guessed type int dword_ACB6C0; //----- (0099FB90) -------------------------------------------------------- void __cdecl sub_99FB90() { sub_6CCEF0((void ***)&dword_ACCF8C); operator delete(dword_ACCF8C); } //----- (0099FBB0) -------------------------------------------------------- void __cdecl sub_99FBB0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD0BC; if ( dword_ACD0BC && !InterlockedDecrement((volatile LONG *)(dword_ACD0BC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACD0BC: using guessed type int dword_ACD0BC; //----- (0099FBE0) -------------------------------------------------------- void __cdecl sub_99FBE0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD0C0; if ( dword_ACD0C0 && !InterlockedDecrement((volatile LONG *)(dword_ACD0C0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACD0C0: using guessed type int dword_ACD0C0; //----- (0099FC10) -------------------------------------------------------- void __cdecl sub_99FC10() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD1EC; if ( dword_ACD1EC && !InterlockedDecrement((volatile LONG *)(dword_ACD1EC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACD1EC: using guessed type int dword_ACD1EC; //----- (0099FC40) -------------------------------------------------------- void __cdecl sub_99FC40() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD1F0; if ( dword_ACD1F0 && !InterlockedDecrement((volatile LONG *)(dword_ACD1F0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACD1F0: using guessed type int dword_ACD1F0; //----- (0099FC70) -------------------------------------------------------- void __cdecl sub_99FC70() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACD1F4; if ( dword_ACD1F4 && !InterlockedDecrement((volatile LONG *)(dword_ACD1F4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACD1F4: using guessed type int dword_ACD1F4; //----- (0099FCA0) -------------------------------------------------------- void __cdecl sub_99FCA0() { if ( dword_ACD900 ) { (**(void (***)(void))dword_ACD900)(); if ( dword_ACD900 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD900 + 8))(1); dword_ACD900 = 0; } } // ACD900: using guessed type int dword_ACD900; //----- (0099FCD0) -------------------------------------------------------- void __cdecl sub_99FCD0() { if ( dword_AC9C7C ) { (**(void (***)(void))dword_AC9C7C)(); if ( dword_AC9C7C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C7C + 8))(1); dword_AC9C7C = 0; } } // AC9C7C: using guessed type int dword_AC9C7C; //----- (0099FD00) -------------------------------------------------------- void __cdecl sub_99FD00() { if ( dword_AC9C80 ) { (**(void (***)(void))dword_AC9C80)(); if ( dword_AC9C80 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C80 + 8))(1); dword_AC9C80 = 0; } } // AC9C80: using guessed type int dword_AC9C80; //----- (0099FD30) -------------------------------------------------------- void __cdecl sub_99FD30() { if ( dword_AC9C90 ) { (**(void (***)(void))dword_AC9C90)(); if ( dword_AC9C90 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C90 + 8))(1); dword_AC9C90 = 0; } } // AC9C90: using guessed type int dword_AC9C90; //----- (0099FD60) -------------------------------------------------------- void __cdecl sub_99FD60() { sub_4A0190(&unk_ACDC6C); } //----- (0099FD70) -------------------------------------------------------- void __cdecl sub_99FD70() { if ( dword_ACDA44 ) { (**(void (***)(void))dword_ACDA44)(); if ( dword_ACDA44 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA44 + 8))(1); dword_ACDA44 = 0; } } // ACDA44: using guessed type int dword_ACDA44; //----- (0099FDA0) -------------------------------------------------------- void __cdecl sub_99FDA0() { if ( dword_ACDA40 ) { (**(void (***)(void))dword_ACDA40)(); if ( dword_ACDA40 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA40 + 8))(1); dword_ACDA40 = 0; } } // ACDA40: using guessed type int dword_ACDA40; //----- (0099FDD0) -------------------------------------------------------- void __cdecl sub_99FDD0() { if ( dword_ACDA3C ) { (**(void (***)(void))dword_ACDA3C)(); if ( dword_ACDA3C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA3C + 8))(1); dword_ACDA3C = 0; } } // ACDA3C: using guessed type int dword_ACDA3C; //----- (0099FE00) -------------------------------------------------------- void __cdecl sub_99FE00() { if ( dword_ACB370 ) { (**(void (***)(void))dword_ACB370)(); if ( dword_ACB370 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB370 + 8))(1); dword_ACB370 = 0; } } // ACB370: using guessed type int dword_ACB370; //----- (0099FE30) -------------------------------------------------------- void __cdecl sub_99FE30() { if ( dword_ACDA38 ) { (**(void (***)(void))dword_ACDA38)(); if ( dword_ACDA38 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA38 + 8))(1); dword_ACDA38 = 0; } } // ACDA38: using guessed type int dword_ACDA38; //----- (0099FE60) -------------------------------------------------------- void __cdecl sub_99FE60() { if ( dword_ACDA34 ) { (**(void (***)(void))dword_ACDA34)(); if ( dword_ACDA34 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA34 + 8))(1); dword_ACDA34 = 0; } } // ACDA34: using guessed type int dword_ACDA34; //----- (0099FE90) -------------------------------------------------------- void __cdecl sub_99FE90() { if ( dword_ACB39C ) { (**(void (***)(void))dword_ACB39C)(); if ( dword_ACB39C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB39C + 8))(1); dword_ACB39C = 0; } } // ACB39C: using guessed type int dword_ACB39C; //----- (0099FEC0) -------------------------------------------------------- void __cdecl sub_99FEC0() { if ( dword_ACB398 ) { (**(void (***)(void))dword_ACB398)(); if ( dword_ACB398 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB398 + 8))(1); dword_ACB398 = 0; } } // ACB398: using guessed type int dword_ACB398; //----- (0099FEF0) -------------------------------------------------------- void __cdecl sub_99FEF0() { if ( dword_AC9CDC ) { (**(void (***)(void))dword_AC9CDC)(); if ( dword_AC9CDC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9CDC + 8))(1); dword_AC9CDC = 0; } } // AC9CDC: using guessed type int dword_AC9CDC; //----- (0099FF20) -------------------------------------------------------- void __cdecl sub_99FF20() { if ( dword_ACDA30 ) { (**(void (***)(void))dword_ACDA30)(); if ( dword_ACDA30 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA30 + 8))(1); dword_ACDA30 = 0; } } // ACDA30: using guessed type int dword_ACDA30; //----- (0099FF50) -------------------------------------------------------- void __cdecl sub_99FF50() { if ( dword_AC9C98 ) { (**(void (***)(void))dword_AC9C98)(); if ( dword_AC9C98 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C98 + 8))(1); dword_AC9C98 = 0; } } // AC9C98: using guessed type int dword_AC9C98; //----- (0099FF80) -------------------------------------------------------- void __cdecl sub_99FF80() { if ( dword_ACDA2C ) { (**(void (***)(void))dword_ACDA2C)(); if ( dword_ACDA2C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA2C + 8))(1); dword_ACDA2C = 0; } } // ACDA2C: using guessed type int dword_ACDA2C; //----- (0099FFB0) -------------------------------------------------------- void __cdecl sub_99FFB0() { if ( dword_ACDA28 ) { (**(void (***)(void))dword_ACDA28)(); if ( dword_ACDA28 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA28 + 8))(1); dword_ACDA28 = 0; } } // ACDA28: using guessed type int dword_ACDA28; //----- (0099FFE0) -------------------------------------------------------- void __cdecl sub_99FFE0() { if ( dword_ACDA24 ) { (**(void (***)(void))dword_ACDA24)(); if ( dword_ACDA24 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA24 + 8))(1); dword_ACDA24 = 0; } } // ACDA24: using guessed type int dword_ACDA24; //----- (009A0010) -------------------------------------------------------- void __cdecl sub_9A0010() { if ( dword_ACDA20 ) { (**(void (***)(void))dword_ACDA20)(); if ( dword_ACDA20 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA20 + 8))(1); dword_ACDA20 = 0; } } // ACDA20: using guessed type int dword_ACDA20; //----- (009A0040) -------------------------------------------------------- void __cdecl sub_9A0040() { if ( dword_ACDA1C ) { (**(void (***)(void))dword_ACDA1C)(); if ( dword_ACDA1C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA1C + 8))(1); dword_ACDA1C = 0; } } // ACDA1C: using guessed type int dword_ACDA1C; //----- (009A0070) -------------------------------------------------------- void __cdecl sub_9A0070() { if ( dword_ACDA18 ) { (**(void (***)(void))dword_ACDA18)(); if ( dword_ACDA18 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA18 + 8))(1); dword_ACDA18 = 0; } } // ACDA18: using guessed type int dword_ACDA18; //----- (009A00A0) -------------------------------------------------------- void __cdecl sub_9A00A0() { if ( dword_ACDA14 ) { (**(void (***)(void))dword_ACDA14)(); if ( dword_ACDA14 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA14 + 8))(1); dword_ACDA14 = 0; } } // ACDA14: using guessed type int dword_ACDA14; //----- (009A00D0) -------------------------------------------------------- void __cdecl sub_9A00D0() { if ( dword_ACB384 ) { (**(void (***)(void))dword_ACB384)(); if ( dword_ACB384 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB384 + 8))(1); dword_ACB384 = 0; } } // ACB384: using guessed type int dword_ACB384; //----- (009A0100) -------------------------------------------------------- void __cdecl sub_9A0100() { if ( dword_ACB380 ) { (**(void (***)(void))dword_ACB380)(); if ( dword_ACB380 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB380 + 8))(1); dword_ACB380 = 0; } } // ACB380: using guessed type int dword_ACB380; //----- (009A0130) -------------------------------------------------------- void __cdecl sub_9A0130() { if ( dword_ACDA10 ) { (**(void (***)(void))dword_ACDA10)(); if ( dword_ACDA10 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA10 + 8))(1); dword_ACDA10 = 0; } } // ACDA10: using guessed type int dword_ACDA10; //----- (009A0160) -------------------------------------------------------- void __cdecl sub_9A0160() { if ( dword_ACDA0C ) { (**(void (***)(void))dword_ACDA0C)(); if ( dword_ACDA0C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA0C + 8))(1); dword_ACDA0C = 0; } } // ACDA0C: using guessed type int dword_ACDA0C; //----- (009A0190) -------------------------------------------------------- void __cdecl sub_9A0190() { if ( dword_ACDA08 ) { (**(void (***)(void))dword_ACDA08)(); if ( dword_ACDA08 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA08 + 8))(1); dword_ACDA08 = 0; } } // ACDA08: using guessed type int dword_ACDA08; //----- (009A01C0) -------------------------------------------------------- void __cdecl sub_9A01C0() { if ( dword_ACDA04 ) { (**(void (***)(void))dword_ACDA04)(); if ( dword_ACDA04 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA04 + 8))(1); dword_ACDA04 = 0; } } // ACDA04: using guessed type int dword_ACDA04; //----- (009A01F0) -------------------------------------------------------- void __cdecl sub_9A01F0() { if ( dword_ACDA00 ) { (**(void (***)(void))dword_ACDA00)(); if ( dword_ACDA00 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA00 + 8))(1); dword_ACDA00 = 0; } } // ACDA00: using guessed type int dword_ACDA00; //----- (009A0220) -------------------------------------------------------- void __cdecl sub_9A0220() { if ( dword_ACB378 ) { (**(void (***)(void))dword_ACB378)(); if ( dword_ACB378 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB378 + 8))(1); dword_ACB378 = 0; } } // ACB378: using guessed type int dword_ACB378; //----- (009A0250) -------------------------------------------------------- void __cdecl sub_9A0250() { if ( dword_ACD9FC ) { (**(void (***)(void))dword_ACD9FC)(); if ( dword_ACD9FC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9FC + 8))(1); dword_ACD9FC = 0; } } // ACD9FC: using guessed type int dword_ACD9FC; //----- (009A0280) -------------------------------------------------------- void __cdecl sub_9A0280() { if ( dword_ACB374 ) { (**(void (***)(void))dword_ACB374)(); if ( dword_ACB374 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB374 + 8))(1); dword_ACB374 = 0; } } // ACB374: using guessed type int dword_ACB374; //----- (009A02B0) -------------------------------------------------------- void __cdecl sub_9A02B0() { if ( dword_ACD9F8 ) { (**(void (***)(void))dword_ACD9F8)(); if ( dword_ACD9F8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9F8 + 8))(1); dword_ACD9F8 = 0; } } // ACD9F8: using guessed type int dword_ACD9F8; //----- (009A02E0) -------------------------------------------------------- void __cdecl sub_9A02E0() { if ( dword_ACD9F4 ) { (**(void (***)(void))dword_ACD9F4)(); if ( dword_ACD9F4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9F4 + 8))(1); dword_ACD9F4 = 0; } } // ACD9F4: using guessed type int dword_ACD9F4; //----- (009A0310) -------------------------------------------------------- void __cdecl sub_9A0310() { if ( dword_ACD9F0 ) { (**(void (***)(void))dword_ACD9F0)(); if ( dword_ACD9F0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9F0 + 8))(1); dword_ACD9F0 = 0; } } // ACD9F0: using guessed type int dword_ACD9F0; //----- (009A0340) -------------------------------------------------------- void __cdecl sub_9A0340() { if ( dword_ACD9EC ) { (**(void (***)(void))dword_ACD9EC)(); if ( dword_ACD9EC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9EC + 8))(1); dword_ACD9EC = 0; } } // ACD9EC: using guessed type int dword_ACD9EC; //----- (009A0370) -------------------------------------------------------- void __cdecl sub_9A0370() { if ( dword_ACD9E8 ) { (**(void (***)(void))dword_ACD9E8)(); if ( dword_ACD9E8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9E8 + 8))(1); dword_ACD9E8 = 0; } } // ACD9E8: using guessed type int dword_ACD9E8; //----- (009A03A0) -------------------------------------------------------- void __cdecl sub_9A03A0() { if ( dword_ACD9E4 ) { (**(void (***)(void))dword_ACD9E4)(); if ( dword_ACD9E4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9E4 + 8))(1); dword_ACD9E4 = 0; } } // ACD9E4: using guessed type int dword_ACD9E4; //----- (009A03D0) -------------------------------------------------------- void __cdecl sub_9A03D0() { if ( dword_ACD9E0 ) { (**(void (***)(void))dword_ACD9E0)(); if ( dword_ACD9E0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9E0 + 8))(1); dword_ACD9E0 = 0; } } // ACD9E0: using guessed type int dword_ACD9E0; //----- (009A0400) -------------------------------------------------------- void __cdecl sub_9A0400() { if ( dword_ACD9DC ) { (**(void (***)(void))dword_ACD9DC)(); if ( dword_ACD9DC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9DC + 8))(1); dword_ACD9DC = 0; } } // ACD9DC: using guessed type int dword_ACD9DC; //----- (009A0430) -------------------------------------------------------- void __cdecl sub_9A0430() { if ( dword_ACD9D8 ) { (**(void (***)(void))dword_ACD9D8)(); if ( dword_ACD9D8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9D8 + 8))(1); dword_ACD9D8 = 0; } } // ACD9D8: using guessed type int dword_ACD9D8; //----- (009A0460) -------------------------------------------------------- void __cdecl sub_9A0460() { if ( dword_ACD9D4 ) { (**(void (***)(void))dword_ACD9D4)(); if ( dword_ACD9D4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9D4 + 8))(1); dword_ACD9D4 = 0; } } // ACD9D4: using guessed type int dword_ACD9D4; //----- (009A0490) -------------------------------------------------------- void __cdecl sub_9A0490() { if ( dword_ACD9D0 ) { (**(void (***)(void))dword_ACD9D0)(); if ( dword_ACD9D0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9D0 + 8))(1); dword_ACD9D0 = 0; } } // ACD9D0: using guessed type int dword_ACD9D0; //----- (009A04C0) -------------------------------------------------------- void __cdecl sub_9A04C0() { if ( dword_ACD9CC ) { (**(void (***)(void))dword_ACD9CC)(); if ( dword_ACD9CC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9CC + 8))(1); dword_ACD9CC = 0; } } // ACD9CC: using guessed type int dword_ACD9CC; //----- (009A04F0) -------------------------------------------------------- void __cdecl sub_9A04F0() { if ( dword_ACD9C8 ) { (**(void (***)(void))dword_ACD9C8)(); if ( dword_ACD9C8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9C8 + 8))(1); dword_ACD9C8 = 0; } } // ACD9C8: using guessed type int dword_ACD9C8; //----- (009A0520) -------------------------------------------------------- void __cdecl sub_9A0520() { if ( dword_ACD9C4 ) { (**(void (***)(void))dword_ACD9C4)(); if ( dword_ACD9C4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9C4 + 8))(1); dword_ACD9C4 = 0; } } // ACD9C4: using guessed type int dword_ACD9C4; //----- (009A0550) -------------------------------------------------------- void __cdecl sub_9A0550() { if ( dword_ACD9C0 ) { (**(void (***)(void))dword_ACD9C0)(); if ( dword_ACD9C0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9C0 + 8))(1); dword_ACD9C0 = 0; } } // ACD9C0: using guessed type int dword_ACD9C0; //----- (009A0580) -------------------------------------------------------- void __cdecl sub_9A0580() { if ( dword_ACD9BC ) { (**(void (***)(void))dword_ACD9BC)(); if ( dword_ACD9BC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9BC + 8))(1); dword_ACD9BC = 0; } } // ACD9BC: using guessed type int dword_ACD9BC; //----- (009A05B0) -------------------------------------------------------- void __cdecl sub_9A05B0() { if ( dword_ACD9B8 ) { (**(void (***)(void))dword_ACD9B8)(); if ( dword_ACD9B8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9B8 + 8))(1); dword_ACD9B8 = 0; } } // ACD9B8: using guessed type int dword_ACD9B8; //----- (009A05E0) -------------------------------------------------------- void __cdecl sub_9A05E0() { if ( dword_ACD9B4 ) { (**(void (***)(void))dword_ACD9B4)(); if ( dword_ACD9B4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9B4 + 8))(1); dword_ACD9B4 = 0; } } // ACD9B4: using guessed type int dword_ACD9B4; //----- (009A0610) -------------------------------------------------------- void __cdecl sub_9A0610() { if ( dword_ACD9B0 ) { (**(void (***)(void))dword_ACD9B0)(); if ( dword_ACD9B0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9B0 + 8))(1); dword_ACD9B0 = 0; } } // ACD9B0: using guessed type int dword_ACD9B0; //----- (009A0640) -------------------------------------------------------- void __cdecl sub_9A0640() { if ( dword_ACD9AC ) { (**(void (***)(void))dword_ACD9AC)(); if ( dword_ACD9AC ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9AC + 8))(1); dword_ACD9AC = 0; } } // ACD9AC: using guessed type int dword_ACD9AC; //----- (009A0670) -------------------------------------------------------- void __cdecl sub_9A0670() { if ( dword_ACD9A8 ) { (**(void (***)(void))dword_ACD9A8)(); if ( dword_ACD9A8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9A8 + 8))(1); dword_ACD9A8 = 0; } } // ACD9A8: using guessed type int dword_ACD9A8; //----- (009A06A0) -------------------------------------------------------- void __cdecl sub_9A06A0() { if ( dword_ACD9A4 ) { (**(void (***)(void))dword_ACD9A4)(); if ( dword_ACD9A4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9A4 + 8))(1); dword_ACD9A4 = 0; } } // ACD9A4: using guessed type int dword_ACD9A4; //----- (009A06D0) -------------------------------------------------------- void __cdecl sub_9A06D0() { if ( dword_ACD9A0 ) { (**(void (***)(void))dword_ACD9A0)(); if ( dword_ACD9A0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD9A0 + 8))(1); dword_ACD9A0 = 0; } } // ACD9A0: using guessed type int dword_ACD9A0; //----- (009A0700) -------------------------------------------------------- void __cdecl sub_9A0700() { if ( dword_ACD99C ) { (**(void (***)(void))dword_ACD99C)(); if ( dword_ACD99C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD99C + 8))(1); dword_ACD99C = 0; } } // ACD99C: using guessed type int dword_ACD99C; //----- (009A0730) -------------------------------------------------------- void __cdecl sub_9A0730() { if ( dword_ACD998 ) { (**(void (***)(void))dword_ACD998)(); if ( dword_ACD998 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD998 + 8))(1); dword_ACD998 = 0; } } // ACD998: using guessed type int dword_ACD998; //----- (009A0760) -------------------------------------------------------- void __cdecl sub_9A0760() { if ( dword_ACD994 ) { (**(void (***)(void))dword_ACD994)(); if ( dword_ACD994 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD994 + 8))(1); dword_ACD994 = 0; } } // ACD994: using guessed type int dword_ACD994; //----- (009A0790) -------------------------------------------------------- void __cdecl sub_9A0790() { if ( dword_ACD990 ) { (**(void (***)(void))dword_ACD990)(); if ( dword_ACD990 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD990 + 8))(1); dword_ACD990 = 0; } } // ACD990: using guessed type int dword_ACD990; //----- (009A07C0) -------------------------------------------------------- void __cdecl sub_9A07C0() { if ( dword_ACD98C ) { (**(void (***)(void))dword_ACD98C)(); if ( dword_ACD98C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD98C + 8))(1); dword_ACD98C = 0; } } // ACD98C: using guessed type int dword_ACD98C; //----- (009A07F0) -------------------------------------------------------- void __cdecl sub_9A07F0() { if ( dword_ACD988 ) { (**(void (***)(void))dword_ACD988)(); if ( dword_ACD988 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD988 + 8))(1); dword_ACD988 = 0; } } // ACD988: using guessed type int dword_ACD988; //----- (009A0820) -------------------------------------------------------- void __cdecl sub_9A0820() { if ( dword_ACD984 ) { (**(void (***)(void))dword_ACD984)(); if ( dword_ACD984 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD984 + 8))(1); dword_ACD984 = 0; } } // ACD984: using guessed type int dword_ACD984; //----- (009A0850) -------------------------------------------------------- void __cdecl sub_9A0850() { if ( dword_ACD980 ) { (**(void (***)(void))dword_ACD980)(); if ( dword_ACD980 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD980 + 8))(1); dword_ACD980 = 0; } } // ACD980: using guessed type int dword_ACD980; //----- (009A0880) -------------------------------------------------------- void __cdecl sub_9A0880() { if ( dword_ACD97C ) { (**(void (***)(void))dword_ACD97C)(); if ( dword_ACD97C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD97C + 8))(1); dword_ACD97C = 0; } } // ACD97C: using guessed type int dword_ACD97C; //----- (009A08B0) -------------------------------------------------------- void __cdecl sub_9A08B0() { if ( dword_ACD978 ) { (**(void (***)(void))dword_ACD978)(); if ( dword_ACD978 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD978 + 8))(1); dword_ACD978 = 0; } } // ACD978: using guessed type int dword_ACD978; //----- (009A08E0) -------------------------------------------------------- void __cdecl sub_9A08E0() { if ( dword_ACD974 ) { (**(void (***)(void))dword_ACD974)(); if ( dword_ACD974 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD974 + 8))(1); dword_ACD974 = 0; } } // ACD974: using guessed type int dword_ACD974; //----- (009A0910) -------------------------------------------------------- void __cdecl sub_9A0910() { if ( dword_ACD970 ) { (**(void (***)(void))dword_ACD970)(); if ( dword_ACD970 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD970 + 8))(1); dword_ACD970 = 0; } } // ACD970: using guessed type int dword_ACD970; //----- (009A0940) -------------------------------------------------------- void __cdecl sub_9A0940() { if ( dword_ACD96C ) { (**(void (***)(void))dword_ACD96C)(); if ( dword_ACD96C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD96C + 8))(1); dword_ACD96C = 0; } } // ACD96C: using guessed type int dword_ACD96C; //----- (009A0970) -------------------------------------------------------- void __cdecl sub_9A0970() { if ( dword_ACD968 ) { (**(void (***)(void))dword_ACD968)(); if ( dword_ACD968 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD968 + 8))(1); dword_ACD968 = 0; } } // ACD968: using guessed type int dword_ACD968; //----- (009A09A0) -------------------------------------------------------- void __cdecl sub_9A09A0() { if ( dword_ACD964 ) { (**(void (***)(void))dword_ACD964)(); if ( dword_ACD964 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD964 + 8))(1); dword_ACD964 = 0; } } // ACD964: using guessed type int dword_ACD964; //----- (009A09D0) -------------------------------------------------------- void __cdecl sub_9A09D0() { if ( dword_ACD960 ) { (**(void (***)(void))dword_ACD960)(); if ( dword_ACD960 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD960 + 8))(1); dword_ACD960 = 0; } } // ACD960: using guessed type int dword_ACD960; //----- (009A0A00) -------------------------------------------------------- void __cdecl sub_9A0A00() { if ( dword_ACD95C ) { (**(void (***)(void))dword_ACD95C)(); if ( dword_ACD95C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD95C + 8))(1); dword_ACD95C = 0; } } // ACD95C: using guessed type int dword_ACD95C; //----- (009A0A30) -------------------------------------------------------- void __cdecl sub_9A0A30() { if ( dword_ACD958 ) { (**(void (***)(void))dword_ACD958)(); if ( dword_ACD958 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD958 + 8))(1); dword_ACD958 = 0; } } // ACD958: using guessed type int dword_ACD958; //----- (009A0A60) -------------------------------------------------------- void __cdecl sub_9A0A60() { if ( dword_ACD954 ) { (**(void (***)(void))dword_ACD954)(); if ( dword_ACD954 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD954 + 8))(1); dword_ACD954 = 0; } } // ACD954: using guessed type int dword_ACD954; //----- (009A0A90) -------------------------------------------------------- void __cdecl sub_9A0A90() { if ( dword_ACD950 ) { (**(void (***)(void))dword_ACD950)(); if ( dword_ACD950 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD950 + 8))(1); dword_ACD950 = 0; } } // ACD950: using guessed type int dword_ACD950; //----- (009A0AC0) -------------------------------------------------------- void __cdecl sub_9A0AC0() { if ( dword_ACD94C ) { (**(void (***)(void))dword_ACD94C)(); if ( dword_ACD94C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD94C + 8))(1); dword_ACD94C = 0; } } // ACD94C: using guessed type int dword_ACD94C; //----- (009A0AF0) -------------------------------------------------------- void __cdecl sub_9A0AF0() { if ( dword_ACD948 ) { (**(void (***)(void))dword_ACD948)(); if ( dword_ACD948 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD948 + 8))(1); dword_ACD948 = 0; } } // ACD948: using guessed type int dword_ACD948; //----- (009A0B20) -------------------------------------------------------- void __cdecl sub_9A0B20() { if ( dword_ACD944 ) { (**(void (***)(void))dword_ACD944)(); if ( dword_ACD944 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD944 + 8))(1); dword_ACD944 = 0; } } // ACD944: using guessed type int dword_ACD944; //----- (009A0B50) -------------------------------------------------------- void __cdecl sub_9A0B50() { if ( dword_ACD940 ) { (**(void (***)(void))dword_ACD940)(); if ( dword_ACD940 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD940 + 8))(1); dword_ACD940 = 0; } } // ACD940: using guessed type int dword_ACD940; //----- (009A0B80) -------------------------------------------------------- void __cdecl sub_9A0B80() { if ( dword_AC9C9C ) { (**(void (***)(void))dword_AC9C9C)(); if ( dword_AC9C9C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C9C + 8))(1); dword_AC9C9C = 0; } } // AC9C9C: using guessed type int dword_AC9C9C; //----- (009A0BB0) -------------------------------------------------------- void __cdecl sub_9A0BB0() { if ( dword_ACD93C ) { (**(void (***)(void))dword_ACD93C)(); if ( dword_ACD93C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD93C + 8))(1); dword_ACD93C = 0; } } // ACD93C: using guessed type int dword_ACD93C; //----- (009A0BE0) -------------------------------------------------------- void __cdecl sub_9A0BE0() { if ( dword_AC9CE0 ) { (**(void (***)(void))dword_AC9CE0)(); if ( dword_AC9CE0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9CE0 + 8))(1); dword_AC9CE0 = 0; } } // AC9CE0: using guessed type int dword_AC9CE0; //----- (009A0C10) -------------------------------------------------------- void __cdecl sub_9A0C10() { if ( dword_ACB2E0 ) { (**(void (***)(void))dword_ACB2E0)(); if ( dword_ACB2E0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB2E0 + 8))(1); dword_ACB2E0 = 0; } } // ACB2E0: using guessed type int dword_ACB2E0; //----- (009A0C40) -------------------------------------------------------- void __cdecl sub_9A0C40() { if ( dword_ACD938 ) { (**(void (***)(void))dword_ACD938)(); if ( dword_ACD938 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD938 + 8))(1); dword_ACD938 = 0; } } // ACD938: using guessed type int dword_ACD938; //----- (009A0C70) -------------------------------------------------------- void __cdecl sub_9A0C70() { if ( dword_ACD934 ) { (**(void (***)(void))dword_ACD934)(); if ( dword_ACD934 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD934 + 8))(1); dword_ACD934 = 0; } } // ACD934: using guessed type int dword_ACD934; //----- (009A0CA0) -------------------------------------------------------- void __cdecl sub_9A0CA0() { if ( dword_ACD930 ) { (**(void (***)(void))dword_ACD930)(); if ( dword_ACD930 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD930 + 8))(1); dword_ACD930 = 0; } } // ACD930: using guessed type int dword_ACD930; //----- (009A0CD0) -------------------------------------------------------- void __cdecl sub_9A0CD0() { if ( dword_ACD92C ) { (**(void (***)(void))dword_ACD92C)(); if ( dword_ACD92C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD92C + 8))(1); dword_ACD92C = 0; } } // ACD92C: using guessed type int dword_ACD92C; //----- (009A0D00) -------------------------------------------------------- void __cdecl sub_9A0D00() { if ( dword_ACD928 ) { (**(void (***)(void))dword_ACD928)(); if ( dword_ACD928 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD928 + 8))(1); dword_ACD928 = 0; } } // ACD928: using guessed type int dword_ACD928; //----- (009A0D30) -------------------------------------------------------- void __cdecl sub_9A0D30() { if ( dword_ACD924 ) { (**(void (***)(void))dword_ACD924)(); if ( dword_ACD924 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD924 + 8))(1); dword_ACD924 = 0; } } // ACD924: using guessed type int dword_ACD924; //----- (009A0D60) -------------------------------------------------------- void __cdecl sub_9A0D60() { if ( dword_ACB37C ) { (**(void (***)(void))dword_ACB37C)(); if ( dword_ACB37C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB37C + 8))(1); dword_ACB37C = 0; } } // ACB37C: using guessed type int dword_ACB37C; //----- (009A0D90) -------------------------------------------------------- void __cdecl sub_9A0D90() { if ( dword_AC9CA0 ) { (**(void (***)(void))dword_AC9CA0)(); if ( dword_AC9CA0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9CA0 + 8))(1); dword_AC9CA0 = 0; } } // AC9CA0: using guessed type int dword_AC9CA0; //----- (009A0DC0) -------------------------------------------------------- void __cdecl sub_9A0DC0() { if ( dword_AC9C94 ) { (**(void (***)(void))dword_AC9C94)(); if ( dword_AC9C94 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C94 + 8))(1); dword_AC9C94 = 0; } } // AC9C94: using guessed type int dword_AC9C94; //----- (009A0DF0) -------------------------------------------------------- void __cdecl sub_9A0DF0() { if ( dword_ACD920 ) { (**(void (***)(void))dword_ACD920)(); if ( dword_ACD920 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD920 + 8))(1); dword_ACD920 = 0; } } // ACD920: using guessed type int dword_ACD920; //----- (009A0E20) -------------------------------------------------------- void __cdecl sub_9A0E20() { if ( dword_AC9C84 ) { (**(void (***)(void))dword_AC9C84)(); if ( dword_AC9C84 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_AC9C84 + 8))(1); dword_AC9C84 = 0; } } // AC9C84: using guessed type int dword_AC9C84; //----- (009A0E50) -------------------------------------------------------- void __cdecl sub_9A0E50() { if ( dword_ACD91C ) { (**(void (***)(void))dword_ACD91C)(); if ( dword_ACD91C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD91C + 8))(1); dword_ACD91C = 0; } } // ACD91C: using guessed type int dword_ACD91C; //----- (009A0E80) -------------------------------------------------------- void __cdecl sub_9A0E80() { if ( dword_ACD918 ) { (**(void (***)(void))dword_ACD918)(); if ( dword_ACD918 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD918 + 8))(1); dword_ACD918 = 0; } } // ACD918: using guessed type int dword_ACD918; //----- (009A0EB0) -------------------------------------------------------- void __cdecl sub_9A0EB0() { if ( dword_ACD914 ) { (**(void (***)(void))dword_ACD914)(); if ( dword_ACD914 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACD914 + 8))(1); dword_ACD914 = 0; } } // ACD914: using guessed type int dword_ACD914; //----- (009A0EE0) -------------------------------------------------------- void __cdecl sub_9A0EE0() { if ( dword_ACDA84 ) { (**(void (***)(void))dword_ACDA84)(); if ( dword_ACDA84 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA84 + 8))(1); dword_ACDA84 = 0; } } // ACDA84: using guessed type int dword_ACDA84; //----- (009A0F10) -------------------------------------------------------- void __cdecl sub_9A0F10() { if ( dword_ACDA80 ) { (**(void (***)(void))dword_ACDA80)(); if ( dword_ACDA80 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA80 + 8))(1); dword_ACDA80 = 0; } } // ACDA80: using guessed type int dword_ACDA80; //----- (009A0F40) -------------------------------------------------------- void __cdecl sub_9A0F40() { if ( dword_ACDA7C ) { (**(void (***)(void))dword_ACDA7C)(); if ( dword_ACDA7C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA7C + 8))(1); dword_ACDA7C = 0; } } // ACDA7C: using guessed type int dword_ACDA7C; //----- (009A0F70) -------------------------------------------------------- void __cdecl sub_9A0F70() { if ( dword_ACDA78 ) { (**(void (***)(void))dword_ACDA78)(); if ( dword_ACDA78 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA78 + 8))(1); dword_ACDA78 = 0; } } // ACDA78: using guessed type int dword_ACDA78; //----- (009A0FA0) -------------------------------------------------------- void __cdecl sub_9A0FA0() { if ( dword_ACDA74 ) { (**(void (***)(void))dword_ACDA74)(); if ( dword_ACDA74 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA74 + 8))(1); dword_ACDA74 = 0; } } // ACDA74: using guessed type int dword_ACDA74; //----- (009A0FD0) -------------------------------------------------------- void __cdecl sub_9A0FD0() { if ( dword_ACDA70 ) { (**(void (***)(void))dword_ACDA70)(); if ( dword_ACDA70 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA70 + 8))(1); dword_ACDA70 = 0; } } // ACDA70: using guessed type int dword_ACDA70; //----- (009A1000) -------------------------------------------------------- void __cdecl sub_9A1000() { if ( dword_ACB230 ) { (**(void (***)(void))dword_ACB230)(); if ( dword_ACB230 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB230 + 8))(1); dword_ACB230 = 0; } } // ACB230: using guessed type int dword_ACB230; //----- (009A1030) -------------------------------------------------------- void __cdecl sub_9A1030() { if ( dword_ACDA6C ) { (**(void (***)(void))dword_ACDA6C)(); if ( dword_ACDA6C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA6C + 8))(1); dword_ACDA6C = 0; } } // ACDA6C: using guessed type int dword_ACDA6C; //----- (009A1060) -------------------------------------------------------- void __cdecl sub_9A1060() { if ( dword_ACDA68 ) { (**(void (***)(void))dword_ACDA68)(); if ( dword_ACDA68 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA68 + 8))(1); dword_ACDA68 = 0; } } // ACDA68: using guessed type int dword_ACDA68; //----- (009A1090) -------------------------------------------------------- void __cdecl sub_9A1090() { if ( dword_ACDA64 ) { (**(void (***)(void))dword_ACDA64)(); if ( dword_ACDA64 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA64 + 8))(1); dword_ACDA64 = 0; } } // ACDA64: using guessed type int dword_ACDA64; //----- (009A10C0) -------------------------------------------------------- void __cdecl sub_9A10C0() { if ( dword_ACDA60 ) { (**(void (***)(void))dword_ACDA60)(); if ( dword_ACDA60 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA60 + 8))(1); dword_ACDA60 = 0; } } // ACDA60: using guessed type int dword_ACDA60; //----- (009A10F0) -------------------------------------------------------- void __cdecl sub_9A10F0() { if ( dword_ACDA5C ) { (**(void (***)(void))dword_ACDA5C)(); if ( dword_ACDA5C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA5C + 8))(1); dword_ACDA5C = 0; } } // ACDA5C: using guessed type int dword_ACDA5C; //----- (009A1120) -------------------------------------------------------- void __cdecl sub_9A1120() { if ( dword_ACDA58 ) { (**(void (***)(void))dword_ACDA58)(); if ( dword_ACDA58 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA58 + 8))(1); dword_ACDA58 = 0; } } // ACDA58: using guessed type int dword_ACDA58; //----- (009A1150) -------------------------------------------------------- void __cdecl sub_9A1150() { if ( dword_ACDA54 ) { (**(void (***)(void))dword_ACDA54)(); if ( dword_ACDA54 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA54 + 8))(1); dword_ACDA54 = 0; } } // ACDA54: using guessed type int dword_ACDA54; //----- (009A1180) -------------------------------------------------------- void __cdecl sub_9A1180() { if ( dword_ACB6C4 ) { (**(void (***)(void))dword_ACB6C4)(); if ( dword_ACB6C4 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB6C4 + 8))(1); dword_ACB6C4 = 0; } } // ACB6C4: using guessed type int dword_ACB6C4; //----- (009A11B0) -------------------------------------------------------- void __cdecl sub_9A11B0() { if ( dword_ACDA50 ) { (**(void (***)(void))dword_ACDA50)(); if ( dword_ACDA50 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA50 + 8))(1); dword_ACDA50 = 0; } } // ACDA50: using guessed type int dword_ACDA50; //----- (009A11E0) -------------------------------------------------------- void __cdecl sub_9A11E0() { if ( dword_ACDA4C ) { (**(void (***)(void))dword_ACDA4C)(); if ( dword_ACDA4C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA4C + 8))(1); dword_ACDA4C = 0; } } // ACDA4C: using guessed type int dword_ACDA4C; //----- (009A1210) -------------------------------------------------------- void __cdecl sub_9A1210() { if ( dword_ACB234 ) { (**(void (***)(void))dword_ACB234)(); if ( dword_ACB234 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB234 + 8))(1); dword_ACB234 = 0; } } // ACB234: using guessed type int dword_ACB234; //----- (009A1240) -------------------------------------------------------- void __cdecl sub_9A1240() { if ( dword_ACDA48 ) { (**(void (***)(void))dword_ACDA48)(); if ( dword_ACDA48 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACDA48 + 8))(1); dword_ACDA48 = 0; } } // ACDA48: using guessed type int dword_ACDA48; //----- (009A1270) -------------------------------------------------------- void __cdecl sub_9A1270() { if ( dword_ACB38C ) { (**(void (***)(void))dword_ACB38C)(); if ( dword_ACB38C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACB38C + 8))(1); dword_ACB38C = 0; } } // ACB38C: using guessed type int dword_ACB38C; //----- (009A12A0) -------------------------------------------------------- void __cdecl sub_9A12A0() { if ( (unsigned int)dword_AAE1E4 >= 0x10 ) operator delete(dword_AAE1D0); dword_AAE1E4 = 15; dword_AAE1E0 = 0; LOBYTE(dword_AAE1D0) = 0; } // AAE1E0: using guessed type int dword_AAE1E0; // AAE1E4: using guessed type int dword_AAE1E4; //----- (009A12D0) -------------------------------------------------------- void __cdecl sub_9A12D0() { if ( (unsigned int)dword_AAE200 >= 0x10 ) operator delete(dword_AAE1EC); dword_AAE200 = 15; dword_AAE1FC = 0; LOBYTE(dword_AAE1EC) = 0; } // AAE1FC: using guessed type int dword_AAE1FC; // AAE200: using guessed type int dword_AAE200; //----- (009A1300) -------------------------------------------------------- void __cdecl sub_9A1300() { if ( (unsigned int)dword_AAE21C >= 0x10 ) operator delete(dword_AAE208); dword_AAE21C = 15; dword_AAE218 = 0; LOBYTE(dword_AAE208) = 0; } // AAE218: using guessed type int dword_AAE218; // AAE21C: using guessed type int dword_AAE21C; //----- (009A1330) -------------------------------------------------------- void __cdecl sub_9A1330() { if ( (unsigned int)dword_AAE238 >= 0x10 ) operator delete(dword_AAE224); dword_AAE238 = 15; dword_AAE234 = 0; LOBYTE(dword_AAE224) = 0; } // AAE234: using guessed type int dword_AAE234; // AAE238: using guessed type int dword_AAE238; //----- (009A1360) -------------------------------------------------------- void __cdecl sub_9A1360() { if ( (unsigned int)dword_AAE254 >= 0x10 ) operator delete(dword_AAE240); dword_AAE254 = 15; dword_AAE250 = 0; LOBYTE(dword_AAE240) = 0; } // AAE250: using guessed type int dword_AAE250; // AAE254: using guessed type int dword_AAE254; //----- (009A1390) -------------------------------------------------------- void __cdecl sub_9A1390() { if ( (unsigned int)dword_AAE270 >= 0x10 ) operator delete(dword_AAE25C); dword_AAE270 = 15; dword_AAE26C = 0; LOBYTE(dword_AAE25C) = 0; } // AAE26C: using guessed type int dword_AAE26C; // AAE270: using guessed type int dword_AAE270; //----- (009A13C0) -------------------------------------------------------- void __cdecl sub_9A13C0() { if ( (unsigned int)dword_AAE28C >= 0x10 ) operator delete(dword_AAE278); dword_AAE28C = 15; dword_AAE288 = 0; LOBYTE(dword_AAE278) = 0; } // AAE288: using guessed type int dword_AAE288; // AAE28C: using guessed type int dword_AAE28C; //----- (009A13F0) -------------------------------------------------------- void __cdecl sub_9A13F0() { if ( (unsigned int)dword_AAE2A8 >= 0x10 ) operator delete(dword_AAE294); dword_AAE2A8 = 15; dword_AAE2A4 = 0; LOBYTE(dword_AAE294) = 0; } // AAE2A4: using guessed type int dword_AAE2A4; // AAE2A8: using guessed type int dword_AAE2A8; //----- (009A1420) -------------------------------------------------------- void __cdecl sub_9A1420() { if ( (unsigned int)dword_AAE2C4 >= 0x10 ) operator delete(dword_AAE2B0); dword_AAE2C4 = 15; dword_AAE2C0 = 0; LOBYTE(dword_AAE2B0) = 0; } // AAE2C0: using guessed type int dword_AAE2C0; // AAE2C4: using guessed type int dword_AAE2C4; //----- (009A1450) -------------------------------------------------------- void __cdecl sub_9A1450() { if ( (unsigned int)dword_AAE2E0 >= 0x10 ) operator delete(dword_AAE2CC); dword_AAE2E0 = 15; dword_AAE2DC = 0; LOBYTE(dword_AAE2CC) = 0; } // AAE2DC: using guessed type int dword_AAE2DC; // AAE2E0: using guessed type int dword_AAE2E0; //----- (009A1480) -------------------------------------------------------- void __cdecl sub_9A1480() { if ( (unsigned int)dword_AAE2FC >= 0x10 ) operator delete(dword_AAE2E8); dword_AAE2FC = 15; dword_AAE2F8 = 0; LOBYTE(dword_AAE2E8) = 0; } // AAE2F8: using guessed type int dword_AAE2F8; // AAE2FC: using guessed type int dword_AAE2FC; //----- (009A14B0) -------------------------------------------------------- void __cdecl sub_9A14B0() { if ( (unsigned int)dword_AAE318 >= 0x10 ) operator delete(dword_AAE304); dword_AAE318 = 15; dword_AAE314 = 0; LOBYTE(dword_AAE304) = 0; } // AAE314: using guessed type int dword_AAE314; // AAE318: using guessed type int dword_AAE318; //----- (009A14E0) -------------------------------------------------------- void __cdecl sub_9A14E0() { if ( (unsigned int)dword_AAE334 >= 0x10 ) operator delete(dword_AAE320); dword_AAE334 = 15; dword_AAE330 = 0; LOBYTE(dword_AAE320) = 0; } // AAE330: using guessed type int dword_AAE330; // AAE334: using guessed type int dword_AAE334; //----- (009A1510) -------------------------------------------------------- void __cdecl sub_9A1510() { if ( (unsigned int)dword_AAE350 >= 0x10 ) operator delete(dword_AAE33C); dword_AAE350 = 15; dword_AAE34C = 0; LOBYTE(dword_AAE33C) = 0; } // AAE34C: using guessed type int dword_AAE34C; // AAE350: using guessed type int dword_AAE350; //----- (009A1540) -------------------------------------------------------- void __cdecl sub_9A1540() { if ( (unsigned int)dword_AAE36C >= 0x10 ) operator delete(dword_AAE358); dword_AAE36C = 15; dword_AAE368 = 0; LOBYTE(dword_AAE358) = 0; } // AAE368: using guessed type int dword_AAE368; // AAE36C: using guessed type int dword_AAE36C; //----- (009A1570) -------------------------------------------------------- void __cdecl sub_9A1570() { if ( (unsigned int)dword_AAE388 >= 0x10 ) operator delete(dword_AAE374); dword_AAE388 = 15; dword_AAE384 = 0; LOBYTE(dword_AAE374) = 0; } // AAE384: using guessed type int dword_AAE384; // AAE388: using guessed type int dword_AAE388; //----- (009A15A0) -------------------------------------------------------- void __cdecl sub_9A15A0() { if ( (unsigned int)dword_AAE3A4 >= 0x10 ) operator delete(dword_AAE390); dword_AAE3A4 = 15; dword_AAE3A0 = 0; LOBYTE(dword_AAE390) = 0; } // AAE3A0: using guessed type int dword_AAE3A0; // AAE3A4: using guessed type int dword_AAE3A4; //----- (009A15D0) -------------------------------------------------------- void __cdecl sub_9A15D0() { if ( (unsigned int)dword_AAE3C0 >= 0x10 ) operator delete(dword_AAE3AC); dword_AAE3C0 = 15; dword_AAE3BC = 0; LOBYTE(dword_AAE3AC) = 0; } // AAE3BC: using guessed type int dword_AAE3BC; // AAE3C0: using guessed type int dword_AAE3C0; //----- (009A1600) -------------------------------------------------------- void __cdecl sub_9A1600() { if ( (unsigned int)dword_AAE3DC >= 0x10 ) operator delete(dword_AAE3C8); dword_AAE3DC = 15; dword_AAE3D8 = 0; LOBYTE(dword_AAE3C8) = 0; } // AAE3D8: using guessed type int dword_AAE3D8; // AAE3DC: using guessed type int dword_AAE3DC; //----- (009A1630) -------------------------------------------------------- void __cdecl sub_9A1630() { if ( (unsigned int)dword_AAE3F8 >= 0x10 ) operator delete(dword_AAE3E4); dword_AAE3F8 = 15; dword_AAE3F4 = 0; LOBYTE(dword_AAE3E4) = 0; } // AAE3F4: using guessed type int dword_AAE3F4; // AAE3F8: using guessed type int dword_AAE3F8; //----- (009A1660) -------------------------------------------------------- void __cdecl sub_9A1660() { if ( (unsigned int)dword_AAE414 >= 0x10 ) operator delete(dword_AAE400); dword_AAE414 = 15; dword_AAE410 = 0; LOBYTE(dword_AAE400) = 0; } // AAE410: using guessed type int dword_AAE410; // AAE414: using guessed type int dword_AAE414; //----- (009A1690) -------------------------------------------------------- void __cdecl sub_9A1690() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_ACDDF0; v0 = *(_DWORD *)dword_ACDDF4; LOBYTE(v3) = 1; sub_4847E0(&unk_ACDDF0, (int *)&v1, v0, (int)dword_ACDDF4); operator delete(dword_ACDDF4); if ( (unsigned int)dword_ACDDE4 >= 0x10 ) operator delete(dword_ACDDD0); dword_ACDDE4 = 15; dword_ACDDE0 = 0; LOBYTE(dword_ACDDD0) = 0; } // ACDDE0: using guessed type int dword_ACDDE0; // ACDDE4: using guessed type int dword_ACDDE4; //----- (009A1730) -------------------------------------------------------- void __cdecl sub_9A1730() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_ACDE20; v0 = *(_DWORD *)dword_ACDE24; LOBYTE(v3) = 1; sub_4847E0(&unk_ACDE20, (int *)&v1, v0, (int)dword_ACDE24); operator delete(dword_ACDE24); if ( (unsigned int)dword_ACDE14 >= 0x10 ) operator delete(dword_ACDE00); dword_ACDE14 = 15; dword_ACDE10 = 0; LOBYTE(dword_ACDE00) = 0; } // ACDE10: using guessed type int dword_ACDE10; // ACDE14: using guessed type int dword_ACDE14; //----- (009A17E0) -------------------------------------------------------- void __cdecl sub_9A17E0() { void **v0; // eax void *v1; // ecx void **v2; // esi v0 = *(void ***)dword_ACE4B4; *(_DWORD *)dword_ACE4B4 = dword_ACE4B4; *((_DWORD *)dword_ACE4B4 + 1) = dword_ACE4B4; v1 = dword_ACE4B4; dword_ACE4B8 = 0; if ( v0 != dword_ACE4B4 ) { do { v2 = (void **)*v0; operator delete(v0); v1 = dword_ACE4B4; v0 = v2; } while ( v2 != dword_ACE4B4 ); } operator delete(v1); } // ACE4B8: using guessed type int dword_ACE4B8; //----- (009A1830) -------------------------------------------------------- void __cdecl sub_9A1830() { if ( (unsigned int)dword_AAE848 >= 0x10 ) operator delete(dword_AAE834); dword_AAE848 = 15; dword_AAE844 = 0; LOBYTE(dword_AAE834) = 0; } // AAE848: using guessed type int dword_AAE848; //----- (009A1860) -------------------------------------------------------- void __cdecl sub_9A1860() { if ( (unsigned int)dword_AAE864 >= 0x10 ) operator delete(dword_AAE850); dword_AAE864 = 15; dword_AAE860 = 0; LOBYTE(dword_AAE850) = 0; } // AAE864: using guessed type int dword_AAE864; //----- (009A1890) -------------------------------------------------------- void __cdecl sub_9A1890() { if ( (unsigned int)dword_AAE880 >= 0x10 ) operator delete(dword_AAE86C); dword_AAE880 = 15; dword_AAE87C = 0; LOBYTE(dword_AAE86C) = 0; } // AAE880: using guessed type int dword_AAE880; //----- (009A18C0) -------------------------------------------------------- void __cdecl sub_9A18C0() { void **v0; // eax void *v1; // ecx void **v2; // esi v0 = *(void ***)dword_ACEA90; *(_DWORD *)dword_ACEA90 = dword_ACEA90; *((_DWORD *)dword_ACEA90 + 1) = dword_ACEA90; v1 = dword_ACEA90; dword_ACEA94 = 0; if ( v0 != dword_ACEA90 ) { do { v2 = (void **)*v0; operator delete(v0); v1 = dword_ACEA90; v0 = v2; } while ( v2 != dword_ACEA90 ); } operator delete(v1); } // ACEA94: using guessed type int dword_ACEA94; //----- (009A1910) -------------------------------------------------------- void __cdecl sub_9A1910() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] dword_ACEAC0 = (int)&EffectObjectMgr::`vftable'; v2 = &unk_ACEAC4; v0 = *(_DWORD **)dword_ACEAC8; v3 = 0; sub_6CDE90(&unk_ACEAC4, (int *)&v1, v0, dword_ACEAC8); operator delete(dword_ACEAC8); } // 9BC508: using guessed type void *EffectObjectMgr::`vftable'; // ACEAC0: using guessed type int dword_ACEAC0; //----- (009A1990) -------------------------------------------------------- void __cdecl sub_9A1990() { void **v0; // eax void *v1; // ecx void **v2; // esi dword_ACEAD8 = (int)&AreaInfoMgr::`vftable'; v0 = *(void ***)dword_ACEAE0; *(_DWORD *)dword_ACEAE0 = dword_ACEAE0; *((_DWORD *)dword_ACEAE0 + 1) = dword_ACEAE0; v1 = dword_ACEAE0; dword_ACEAE4 = 0; if ( v0 != dword_ACEAE0 ) { do { v2 = (void **)*v0; operator delete(v0); v1 = dword_ACEAE0; v0 = v2; } while ( v2 != dword_ACEAE0 ); } operator delete(v1); } // 9BC510: using guessed type void *AreaInfoMgr::`vftable'; // ACEAD8: using guessed type int dword_ACEAD8; // ACEAE4: using guessed type int dword_ACEAE4; //----- (009A1A00) -------------------------------------------------------- void __cdecl sub_9A1A00() { if ( (unsigned int)dword_AAEBC4 >= 0x10 ) operator delete((void *)lpOutputString); dword_AAEBC4 = 15; dword_AAEBC0 = 0; LOBYTE(lpOutputString) = 0; } // AAEBC0: using guessed type int dword_AAEBC0; // AAEBC4: using guessed type int dword_AAEBC4; //----- (009A1A30) -------------------------------------------------------- void __cdecl sub_9A1A30() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 off_AAEBD0 = (int (__thiscall **)(void *, char))&NiTPointerListBase,IOptionBase *>::`vftable'; v0 = (_DWORD *)dword_AAEBD4; if ( dword_AAEBD4 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AAEBD0[2](&off_AAEBD0, (char)v1); } while ( v0 ); } dword_AAEBDC = 0; dword_AAEBD4 = 0; dword_AAEBD8 = 0; off_AAEBD0 = (int (__thiscall **)(void *, char))&NiTListBase,IOptionBase *>::`vftable'; } // 9BC608: using guessed type void *NiTListBase,IOptionBase *>::`vftable'; // 9BC618: using guessed type void *NiTPointerListBase,IOptionBase *>::`vftable'; // AAEBD0: using guessed type int (__thiscall **off_AAEBD0)(void *, char); // AAEBD4: using guessed type int dword_AAEBD4; // AAEBD8: using guessed type int dword_AAEBD8; // AAEBDC: using guessed type int dword_AAEBDC; //----- (009A1AC0) -------------------------------------------------------- void __cdecl sub_9A1AC0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF454; if ( dword_ACF454 && !InterlockedDecrement((volatile LONG *)(dword_ACF454 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1AF0) -------------------------------------------------------- void __cdecl sub_9A1AF0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF458; if ( dword_ACF458 && !InterlockedDecrement((volatile LONG *)(dword_ACF458 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1B20) -------------------------------------------------------- void __cdecl sub_9A1B20() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF45C; if ( dword_ACF45C && !InterlockedDecrement((volatile LONG *)(dword_ACF45C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1B50) -------------------------------------------------------- void __cdecl sub_9A1B50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF460; if ( dword_ACF460 && !InterlockedDecrement((volatile LONG *)(dword_ACF460 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1B80) -------------------------------------------------------- void __cdecl sub_9A1B80() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF464; if ( dword_ACF464 && !InterlockedDecrement((volatile LONG *)(dword_ACF464 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1BB0) -------------------------------------------------------- void __cdecl sub_9A1BB0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF468; if ( dword_ACF468 && !InterlockedDecrement((volatile LONG *)(dword_ACF468 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1BE0) -------------------------------------------------------- void __cdecl sub_9A1BE0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF46C; if ( dword_ACF46C && !InterlockedDecrement((volatile LONG *)(dword_ACF46C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1C10) -------------------------------------------------------- void __cdecl sub_9A1C10() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF470; if ( dword_ACF470 && !InterlockedDecrement((volatile LONG *)(dword_ACF470 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF470: using guessed type int dword_ACF470; //----- (009A1C40) -------------------------------------------------------- void __cdecl sub_9A1C40() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF474; if ( dword_ACF474 && !InterlockedDecrement((volatile LONG *)(dword_ACF474 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF474: using guessed type int dword_ACF474; //----- (009A1C70) -------------------------------------------------------- void __cdecl sub_9A1C70() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF478; if ( dword_ACF478 && !InterlockedDecrement((volatile LONG *)(dword_ACF478 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF478: using guessed type int dword_ACF478; //----- (009A1CA0) -------------------------------------------------------- void __cdecl sub_9A1CA0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF47C; if ( dword_ACF47C && !InterlockedDecrement((volatile LONG *)(dword_ACF47C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF47C: using guessed type int dword_ACF47C; //----- (009A1CD0) -------------------------------------------------------- void __cdecl sub_9A1CD0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF480; if ( dword_ACF480 && !InterlockedDecrement((volatile LONG *)(dword_ACF480 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1D00) -------------------------------------------------------- void __cdecl sub_9A1D00() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF484; if ( dword_ACF484 && !InterlockedDecrement((volatile LONG *)(dword_ACF484 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF484: using guessed type int dword_ACF484; //----- (009A1D30) -------------------------------------------------------- void __cdecl sub_9A1D30() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF488; if ( dword_ACF488 && !InterlockedDecrement((volatile LONG *)(dword_ACF488 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF488: using guessed type int dword_ACF488; //----- (009A1D60) -------------------------------------------------------- void __cdecl sub_9A1D60() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF48C; if ( dword_ACF48C && !InterlockedDecrement((volatile LONG *)(dword_ACF48C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A1D90) -------------------------------------------------------- void __cdecl sub_9A1D90() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF490; if ( dword_ACF490 && !InterlockedDecrement((volatile LONG *)(dword_ACF490 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF490: using guessed type int dword_ACF490; //----- (009A1DC0) -------------------------------------------------------- void __cdecl sub_9A1DC0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF494; if ( dword_ACF494 && !InterlockedDecrement((volatile LONG *)(dword_ACF494 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF494: using guessed type int dword_ACF494; //----- (009A1DF0) -------------------------------------------------------- void __cdecl sub_9A1DF0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF498; if ( dword_ACF498 && !InterlockedDecrement((volatile LONG *)(dword_ACF498 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF498: using guessed type int dword_ACF498; //----- (009A1E20) -------------------------------------------------------- void __cdecl sub_9A1E20() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF49C; if ( dword_ACF49C && !InterlockedDecrement((volatile LONG *)(dword_ACF49C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF49C: using guessed type int dword_ACF49C; //----- (009A1E50) -------------------------------------------------------- void __cdecl sub_9A1E50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4A0; if ( dword_ACF4A0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4A0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4A0: using guessed type int dword_ACF4A0; //----- (009A1E80) -------------------------------------------------------- void __cdecl sub_9A1E80() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4A4; if ( dword_ACF4A4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4A4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4A4: using guessed type int dword_ACF4A4; //----- (009A1EB0) -------------------------------------------------------- void __cdecl sub_9A1EB0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4A8; if ( dword_ACF4A8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4A8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4A8: using guessed type int dword_ACF4A8; //----- (009A1EE0) -------------------------------------------------------- void __cdecl sub_9A1EE0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4AC; if ( dword_ACF4AC && !InterlockedDecrement((volatile LONG *)(dword_ACF4AC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4AC: using guessed type int dword_ACF4AC; //----- (009A1F10) -------------------------------------------------------- void __cdecl sub_9A1F10() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4B0; if ( dword_ACF4B0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4B0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4B0: using guessed type int dword_ACF4B0; //----- (009A1F40) -------------------------------------------------------- void __cdecl sub_9A1F40() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4B4; if ( dword_ACF4B4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4B4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4B4: using guessed type int dword_ACF4B4; //----- (009A1F70) -------------------------------------------------------- void __cdecl sub_9A1F70() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4B8; if ( dword_ACF4B8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4B8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4B8: using guessed type int dword_ACF4B8; //----- (009A1FA0) -------------------------------------------------------- void __cdecl sub_9A1FA0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4BC; if ( dword_ACF4BC && !InterlockedDecrement((volatile LONG *)(dword_ACF4BC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4BC: using guessed type int dword_ACF4BC; //----- (009A1FD0) -------------------------------------------------------- void __cdecl sub_9A1FD0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4C0; if ( dword_ACF4C0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4C0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4C0: using guessed type int dword_ACF4C0; //----- (009A2000) -------------------------------------------------------- void __cdecl sub_9A2000() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4C4; if ( dword_ACF4C4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4C4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4C4: using guessed type int dword_ACF4C4; //----- (009A2030) -------------------------------------------------------- void __cdecl sub_9A2030() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4C8; if ( dword_ACF4C8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4C8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4C8: using guessed type int dword_ACF4C8; //----- (009A2060) -------------------------------------------------------- void __cdecl sub_9A2060() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4CC; if ( dword_ACF4CC && !InterlockedDecrement((volatile LONG *)(dword_ACF4CC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4CC: using guessed type int dword_ACF4CC; //----- (009A2090) -------------------------------------------------------- void __cdecl sub_9A2090() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4D0; if ( dword_ACF4D0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4D0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4D0: using guessed type int dword_ACF4D0; //----- (009A20C0) -------------------------------------------------------- void __cdecl sub_9A20C0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4D4; if ( dword_ACF4D4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4D4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4D4: using guessed type int dword_ACF4D4; //----- (009A20F0) -------------------------------------------------------- void __cdecl sub_9A20F0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4D8; if ( dword_ACF4D8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4D8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4D8: using guessed type int dword_ACF4D8; //----- (009A2120) -------------------------------------------------------- void __cdecl sub_9A2120() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4DC; if ( dword_ACF4DC && !InterlockedDecrement((volatile LONG *)(dword_ACF4DC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4DC: using guessed type int dword_ACF4DC; //----- (009A2150) -------------------------------------------------------- void __cdecl sub_9A2150() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E0; if ( dword_ACF4E0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4E0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2180) -------------------------------------------------------- void __cdecl sub_9A2180() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E4; if ( dword_ACF4E4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4E4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4E4: using guessed type int dword_ACF4E4; //----- (009A21B0) -------------------------------------------------------- void __cdecl sub_9A21B0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4E8; if ( dword_ACF4E8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4E8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A21E0) -------------------------------------------------------- void __cdecl sub_9A21E0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4EC; if ( dword_ACF4EC && !InterlockedDecrement((volatile LONG *)(dword_ACF4EC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4EC: using guessed type int dword_ACF4EC; //----- (009A2210) -------------------------------------------------------- void __cdecl sub_9A2210() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4F0; if ( dword_ACF4F0 && !InterlockedDecrement((volatile LONG *)(dword_ACF4F0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4F0: using guessed type int dword_ACF4F0; //----- (009A2240) -------------------------------------------------------- void __cdecl sub_9A2240() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4F4; if ( dword_ACF4F4 && !InterlockedDecrement((volatile LONG *)(dword_ACF4F4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4F4: using guessed type int dword_ACF4F4; //----- (009A2270) -------------------------------------------------------- void __cdecl sub_9A2270() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4F8; if ( dword_ACF4F8 && !InterlockedDecrement((volatile LONG *)(dword_ACF4F8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4F8: using guessed type int dword_ACF4F8; //----- (009A22A0) -------------------------------------------------------- void __cdecl sub_9A22A0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF4FC; if ( dword_ACF4FC && !InterlockedDecrement((volatile LONG *)(dword_ACF4FC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF4FC: using guessed type int dword_ACF4FC; //----- (009A22D0) -------------------------------------------------------- void __cdecl sub_9A22D0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF500; if ( dword_ACF500 && !InterlockedDecrement((volatile LONG *)(dword_ACF500 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF500: using guessed type int dword_ACF500; //----- (009A2300) -------------------------------------------------------- void __cdecl sub_9A2300() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF504; if ( dword_ACF504 && !InterlockedDecrement((volatile LONG *)(dword_ACF504 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF504: using guessed type int dword_ACF504; //----- (009A2330) -------------------------------------------------------- void __cdecl sub_9A2330() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF508; if ( dword_ACF508 && !InterlockedDecrement((volatile LONG *)(dword_ACF508 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF508: using guessed type int dword_ACF508; //----- (009A2360) -------------------------------------------------------- void __cdecl sub_9A2360() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF50C; if ( dword_ACF50C && !InterlockedDecrement((volatile LONG *)(dword_ACF50C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF50C: using guessed type int dword_ACF50C; //----- (009A2390) -------------------------------------------------------- void __cdecl sub_9A2390() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF510; if ( dword_ACF510 && !InterlockedDecrement((volatile LONG *)(dword_ACF510 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF510: using guessed type int dword_ACF510; //----- (009A23C0) -------------------------------------------------------- void __cdecl sub_9A23C0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF514; if ( dword_ACF514 && !InterlockedDecrement((volatile LONG *)(dword_ACF514 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF514: using guessed type int dword_ACF514; //----- (009A23F0) -------------------------------------------------------- void __cdecl sub_9A23F0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF518; if ( dword_ACF518 && !InterlockedDecrement((volatile LONG *)(dword_ACF518 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF518: using guessed type int dword_ACF518; //----- (009A2420) -------------------------------------------------------- void __cdecl sub_9A2420() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF51C; if ( dword_ACF51C && !InterlockedDecrement((volatile LONG *)(dword_ACF51C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF51C: using guessed type int dword_ACF51C; //----- (009A2450) -------------------------------------------------------- void __cdecl sub_9A2450() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF520; if ( dword_ACF520 && !InterlockedDecrement((volatile LONG *)(dword_ACF520 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF520: using guessed type int dword_ACF520; //----- (009A2480) -------------------------------------------------------- void __cdecl sub_9A2480() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF524; if ( dword_ACF524 && !InterlockedDecrement((volatile LONG *)(dword_ACF524 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF524: using guessed type int dword_ACF524; //----- (009A24B0) -------------------------------------------------------- void __cdecl sub_9A24B0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF528; if ( dword_ACF528 && !InterlockedDecrement((volatile LONG *)(dword_ACF528 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF528: using guessed type int dword_ACF528; //----- (009A24E0) -------------------------------------------------------- void __cdecl sub_9A24E0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF52C; if ( dword_ACF52C && !InterlockedDecrement((volatile LONG *)(dword_ACF52C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF52C: using guessed type int dword_ACF52C; //----- (009A2510) -------------------------------------------------------- void __cdecl sub_9A2510() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF530; if ( dword_ACF530 && !InterlockedDecrement((volatile LONG *)(dword_ACF530 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF530: using guessed type int dword_ACF530; //----- (009A2540) -------------------------------------------------------- void __cdecl sub_9A2540() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF534; if ( dword_ACF534 && !InterlockedDecrement((volatile LONG *)(dword_ACF534 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF534: using guessed type int dword_ACF534; //----- (009A2570) -------------------------------------------------------- void __cdecl sub_9A2570() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF538; if ( dword_ACF538 && !InterlockedDecrement((volatile LONG *)(dword_ACF538 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ACF538: using guessed type int dword_ACF538; //----- (009A25A0) -------------------------------------------------------- void __cdecl sub_9A25A0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF53C; if ( dword_ACF53C && !InterlockedDecrement((volatile LONG *)(dword_ACF53C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A25D0) -------------------------------------------------------- void __cdecl sub_9A25D0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF540; if ( dword_ACF540 && !InterlockedDecrement((volatile LONG *)(dword_ACF540 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2600) -------------------------------------------------------- void __cdecl sub_9A2600() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF544; if ( dword_ACF544 && !InterlockedDecrement((volatile LONG *)(dword_ACF544 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2630) -------------------------------------------------------- void __cdecl sub_9A2630() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF548; if ( dword_ACF548 && !InterlockedDecrement((volatile LONG *)(dword_ACF548 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2660) -------------------------------------------------------- void __cdecl sub_9A2660() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF54C; if ( dword_ACF54C && !InterlockedDecrement((volatile LONG *)(dword_ACF54C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2690) -------------------------------------------------------- void __cdecl sub_9A2690() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF550; if ( dword_ACF550 && !InterlockedDecrement((volatile LONG *)(dword_ACF550 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A26C0) -------------------------------------------------------- void __cdecl sub_9A26C0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF554; if ( dword_ACF554 && !InterlockedDecrement((volatile LONG *)(dword_ACF554 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A26F0) -------------------------------------------------------- void __cdecl sub_9A26F0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF558; if ( dword_ACF558 && !InterlockedDecrement((volatile LONG *)(dword_ACF558 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2720) -------------------------------------------------------- void __cdecl sub_9A2720() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF55C; if ( dword_ACF55C && !InterlockedDecrement((volatile LONG *)(dword_ACF55C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2750) -------------------------------------------------------- void __cdecl sub_9A2750() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF560; if ( dword_ACF560 && !InterlockedDecrement((volatile LONG *)(dword_ACF560 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2780) -------------------------------------------------------- void __cdecl sub_9A2780() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF564; if ( dword_ACF564 && !InterlockedDecrement((volatile LONG *)(dword_ACF564 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A27B0) -------------------------------------------------------- void __cdecl sub_9A27B0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF568; if ( dword_ACF568 && !InterlockedDecrement((volatile LONG *)(dword_ACF568 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A27E0) -------------------------------------------------------- void __cdecl sub_9A27E0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ACF56C; if ( dword_ACF56C && !InterlockedDecrement((volatile LONG *)(dword_ACF56C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } //----- (009A2810) -------------------------------------------------------- void __cdecl sub_9A2810() { sub_451370(&dword_ACF580); } // ACF580: using guessed type int dword_ACF580; //----- (009A2820) -------------------------------------------------------- void __cdecl sub_9A2820() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD02BC; if ( dword_AD02BC && !InterlockedDecrement((volatile LONG *)(dword_AD02BC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD02BC: using guessed type int dword_AD02BC; //----- (009A2850) -------------------------------------------------------- void __cdecl sub_9A2850() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD02C0; if ( dword_AD02C0 && !InterlockedDecrement((volatile LONG *)(dword_AD02C0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD02C0: using guessed type int dword_AD02C0; //----- (009A2880) -------------------------------------------------------- void __cdecl sub_9A2880() { if ( dword_AD02C4 ) operator delete(dword_AD02C4); dword_AD02C4 = 0; dword_AD02C8 = 0; dword_AD02CC = 0; } // AD02CC: using guessed type int dword_AD02CC; //----- (009A28C0) -------------------------------------------------------- void __cdecl sub_9A28C0() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB173C = (int (__thiscall **)(void *, char))&NiTPointerListBase,SkillIcon *>::`vftable'; v0 = (_DWORD *)dword_AB1740; if ( dword_AB1740 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB173C[2](&off_AB173C, (char)v1); } while ( v0 ); } dword_AB1748 = 0; dword_AB1740 = 0; dword_AB1744 = 0; off_AB173C = (int (__thiscall **)(void *, char))&NiTListBase,SkillIcon *>::`vftable'; } // 9E4ECC: using guessed type void *NiTListBase,SkillIcon *>::`vftable'; // 9E4EDC: using guessed type void *NiTPointerListBase,SkillIcon *>::`vftable'; // AB173C: using guessed type int (__thiscall **off_AB173C)(void *, char); // AB1740: using guessed type int dword_AB1740; // AB1744: using guessed type int dword_AB1744; // AB1748: using guessed type int dword_AB1748; //----- (009A2940) -------------------------------------------------------- void __cdecl sub_9A2940() { `eh vector destructor iterator'(dword_AD0C58, 4u, 576, sub_410C00); } //----- (009A2960) -------------------------------------------------------- void __cdecl sub_9A2960() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_AD155C; v2 = 0; sub_6CDE90(&unk_AD1558, (int *)&v1, v0, dword_AD155C); operator delete(dword_AD155C); } //----- (009A29C0) -------------------------------------------------------- void __cdecl sub_9A29C0() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB25B4 = (int (__thiscall **)(void *, char))&NiTPointerListBase,ICharDeadEvent *>::`vftable'; v0 = (_DWORD *)dword_AB25B8; if ( dword_AB25B8 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB25B4[2](&off_AB25B4, (char)v1); } while ( v0 ); } dword_AB25C0 = 0; dword_AB25B8 = 0; dword_AB25BC = 0; off_AB25B4 = (int (__thiscall **)(void *, char))&NiTListBase,ICharDeadEvent *>::`vftable'; } // 9F0B88: using guessed type void *NiTListBase,ICharDeadEvent *>::`vftable'; // 9F0B98: using guessed type void *NiTPointerListBase,ICharDeadEvent *>::`vftable'; // AB25B4: using guessed type int (__thiscall **off_AB25B4)(void *, char); // AB25B8: using guessed type int dword_AB25B8; // AB25BC: using guessed type int dword_AB25BC; // AB25C0: using guessed type int dword_AB25C0; //----- (009A2A40) -------------------------------------------------------- void __cdecl sub_9A2A40() { `eh vector destructor iterator'(dword_AD1578, 4u, 36, sub_410C00); } //----- (009A2A60) -------------------------------------------------------- void __cdecl sub_9A2A60() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB27A4 = (int (__thiscall **)(void *, char))&NiTPointerListBase,MagicField *>::`vftable'; v0 = (_DWORD *)dword_AB27A8; if ( dword_AB27A8 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB27A4[2](&off_AB27A4, (char)v1); } while ( v0 ); } dword_AB27B0 = 0; dword_AB27A8 = 0; dword_AB27AC = 0; off_AB27A4 = (int (__thiscall **)(void *, char))&NiTListBase,MagicField *>::`vftable'; } // 9F0C08: using guessed type void *NiTListBase,MagicField *>::`vftable'; // 9F0C38: using guessed type void *NiTPointerListBase,MagicField *>::`vftable'; // AB27A4: using guessed type int (__thiscall **off_AB27A4)(void *, char); // AB27A8: using guessed type int dword_AB27A8; // AB27AC: using guessed type int dword_AB27AC; // AB27B0: using guessed type int dword_AB27B0; //----- (009A2AE0) -------------------------------------------------------- void __cdecl sub_9A2AE0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD1608; if ( dword_AD1608 && !InterlockedDecrement((volatile LONG *)(dword_AD1608 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD1608: using guessed type int dword_AD1608; //----- (009A2B10) -------------------------------------------------------- void __cdecl sub_9A2B10() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB2930 = (int (__thiscall **)(void *, char))&NiTPointerListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; v0 = (_DWORD *)dword_AB2934; if ( dword_AB2934 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB2930[2](&off_AB2930, (char)v1); } while ( v0 ); } dword_AB293C = 0; dword_AB2934 = 0; dword_AB2938 = 0; off_AB2930 = (int (__thiscall **)(void *, char))&NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; } // 9F0CF4: using guessed type void *NiTListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; // 9F0D04: using guessed type void *NiTPointerListBase,PROTO_NC_MENU_SHOPOPENTABLE_CMD::MENUITEM *>::`vftable'; // AB2930: using guessed type int (__thiscall **off_AB2930)(void *, char); // AB2934: using guessed type int dword_AB2934; // AB2938: using guessed type int dword_AB2938; // AB293C: using guessed type int dword_AB293C; //----- (009A2B90) -------------------------------------------------------- void __cdecl sub_9A2B90() { dword_AD46F0 = (int)&ShortCutMgr::`vftable'; if ( dword_AD892C ) operator delete(dword_AD892C); dword_AD892C = 0; dword_AD8930 = 0; dword_AD8934 = 0; sub_4586C0(&unk_AD78DC); `eh vector destructor iterator'(dword_AD46F4, 4u, 100, sub_410C00); } // 9F0DB0: using guessed type void *ShortCutMgr::`vftable'; // AD46F0: using guessed type int dword_AD46F0; // AD8930: using guessed type int dword_AD8930; // AD8934: using guessed type int dword_AD8934; //----- (009A2C20) -------------------------------------------------------- void __cdecl sub_9A2C20() { `eh vector destructor iterator'(dword_AD8974, 4u, 12, sub_410C00); } //----- (009A2C40) -------------------------------------------------------- void __cdecl sub_9A2C40() { `eh vector destructor iterator'(dword_AD89A4, 4u, 12, sub_410C00); } //----- (009A2C60) -------------------------------------------------------- void __cdecl sub_9A2C60() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD89DC; if ( dword_AD89DC && !InterlockedDecrement((volatile LONG *)(dword_AD89DC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD89DC: using guessed type int dword_AD89DC; //----- (009A2C90) -------------------------------------------------------- void __cdecl sub_9A2C90() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD89F0; if ( dword_AD89F0 && !InterlockedDecrement((volatile LONG *)(dword_AD89F0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD89F0: using guessed type int dword_AD89F0; //----- (009A2CC0) -------------------------------------------------------- void __cdecl sub_9A2CC0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8A00; if ( dword_AD8A00 && !InterlockedDecrement((volatile LONG *)(dword_AD8A00 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD8A00: using guessed type int dword_AD8A00; //----- (009A2CF0) -------------------------------------------------------- void __cdecl sub_9A2CF0() { sub_63B810(byte_AD8A08); } //----- (009A2D00) -------------------------------------------------------- void __cdecl sub_9A2D00() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BB8; if ( dword_AD8BB8 && !InterlockedDecrement((volatile LONG *)(dword_AD8BB8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD8BB8: using guessed type int dword_AD8BB8; //----- (009A2D30) -------------------------------------------------------- void __cdecl sub_9A2D30() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BBC; if ( dword_AD8BBC && !InterlockedDecrement((volatile LONG *)(dword_AD8BBC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD8BBC: using guessed type int dword_AD8BBC; //----- (009A2D60) -------------------------------------------------------- void __cdecl sub_9A2D60() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD8BC8; if ( dword_AD8BC8 && !InterlockedDecrement((volatile LONG *)(dword_AD8BC8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD8BC8: using guessed type int dword_AD8BC8; //----- (009A2D90) -------------------------------------------------------- void __cdecl sub_9A2D90() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB3304 = (int (__thiscall **)(void *, char))&NiTPointerListBase,ITimer *>::`vftable'; v0 = (_DWORD *)dword_AB3308; if ( dword_AB3308 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB3304[2](&off_AB3304, (char)v1); } while ( v0 ); } dword_AB3310 = 0; dword_AB3308 = 0; dword_AB330C = 0; off_AB3304 = (int (__thiscall **)(void *, char))&NiTListBase,ITimer *>::`vftable'; } // 9F191C: using guessed type void *NiTListBase,ITimer *>::`vftable'; // 9F192C: using guessed type void *NiTPointerListBase,ITimer *>::`vftable'; // AB3304: using guessed type int (__thiscall **off_AB3304)(void *, char); // AB3308: using guessed type int dword_AB3308; // AB330C: using guessed type int dword_AB330C; // AB3310: using guessed type int dword_AB3310; //----- (009A2E10) -------------------------------------------------------- void __cdecl sub_9A2E10() { off_AB35F0 = &NiTMap::`vftable'; sub_940360(&off_AB35F0); off_AB35F0 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(&off_AB35F0); operator delete[](dword_AB35F8); } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB35F0: using guessed type void **off_AB35F0; //----- (009A2E90) -------------------------------------------------------- void __cdecl sub_9A2E90() { off_AB3600 = &NiTMap::`vftable'; sub_940360(&off_AB3600); off_AB3600 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(&off_AB3600); operator delete[](dword_AB3608); } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3600: using guessed type void **off_AB3600; //----- (009A2F10) -------------------------------------------------------- void __cdecl sub_9A2F10() { off_AB3610 = &NiTMap::`vftable'; sub_940360(&off_AB3610); off_AB3610 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(&off_AB3610); operator delete[](dword_AB3618); } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3610: using guessed type void **off_AB3610; //----- (009A2F90) -------------------------------------------------------- void __cdecl sub_9A2F90() { off_AB3620 = &NiTMap::`vftable'; sub_940360(&off_AB3620); off_AB3620 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(&off_AB3620); operator delete[](dword_AB3628); } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3620: using guessed type void **off_AB3620; //----- (009A3010) -------------------------------------------------------- void __cdecl sub_9A3010() { off_AB3630 = &NiTMap::`vftable'; sub_940360(&off_AB3630); off_AB3630 = &NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; sub_940360(&off_AB3630); operator delete[](dword_AB3638); } // 9F2990: using guessed type void *NiTMapBase,unsigned long,ActionInfoSet *>::`vftable'; // 9F29B0: using guessed type void *NiTMap::`vftable'; // AB3630: using guessed type void **off_AB3630; //----- (009A3090) -------------------------------------------------------- void __cdecl sub_9A3090() { sub_747510((void **)&unk_AD8C08); } //----- (009A30A0) -------------------------------------------------------- void __cdecl sub_9A30A0() { dword_AD8C48 = (int)&CarToonShader::`vftable'; if ( (unsigned int)dword_AD8C7C >= 0x10 ) operator delete(dword_AD8C68); dword_AD8C7C = 15; dword_AD8C78 = 0; LOBYTE(dword_AD8C68) = 0; if ( (unsigned int)dword_AD8C60 >= 0x10 ) operator delete(dword_AD8C4C); dword_AD8C5C = 0; LOBYTE(dword_AD8C4C) = 0; dword_AD8C60 = 15; } // 9F3774: using guessed type void *CarToonShader::`vftable'; // AD8C48: using guessed type int dword_AD8C48; // AD8C5C: using guessed type int dword_AD8C5C; // AD8C60: using guessed type int dword_AD8C60; // AD8C78: using guessed type int dword_AD8C78; // AD8C7C: using guessed type int dword_AD8C7C; //----- (009A3110) -------------------------------------------------------- void __cdecl sub_9A3110() { sub_6656D0(dword_AD8C90); } //----- (009A3120) -------------------------------------------------------- void __cdecl sub_9A3120() { sub_66DBD0(&unk_AD8D28); } //----- (009A3130) -------------------------------------------------------- void __cdecl sub_9A3130() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9200; if ( dword_AD9200 && !InterlockedDecrement((volatile LONG *)(dword_AD9200 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD9200: using guessed type int dword_AD9200; //----- (009A3160) -------------------------------------------------------- void __cdecl sub_9A3160() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_AD9204; if ( dword_AD9204 && !InterlockedDecrement((volatile LONG *)(dword_AD9204 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // AD9204: using guessed type int dword_AD9204; //----- (009A3190) -------------------------------------------------------- void __cdecl sub_9A3190() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB419C = (int (__thiscall **)(void *, char))&NiTPointerListBase>,NiPointer>::`vftable'; v0 = (_DWORD *)dword_AB41A0; if ( dword_AB41A0 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB419C[2](&off_AB419C, (char)v1); } while ( v0 ); } dword_AB41A8 = 0; dword_AB41A0 = 0; dword_AB41A4 = 0; off_AB419C = (int (__thiscall **)(void *, char))&NiTListBase>,NiPointer>::`vftable'; } // 9F4C28: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F4C38: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; // AB419C: using guessed type int (__thiscall **off_AB419C)(void *, char); // AB41A0: using guessed type int dword_AB41A0; // AB41A4: using guessed type int dword_AB41A4; // AB41A8: using guessed type int dword_AB41A8; //----- (009A3210) -------------------------------------------------------- void __cdecl sub_9A3210() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB41AC = (int (__thiscall **)(void *, char))&NiTPointerListBase>,NiPointer>::`vftable'; v0 = (_DWORD *)dword_AB41B0; if ( dword_AB41B0 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB41AC[2](&off_AB41AC, (char)v1); } while ( v0 ); } dword_AB41B8 = 0; dword_AB41B0 = 0; dword_AB41B4 = 0; off_AB41AC = (int (__thiscall **)(void *, char))&NiTListBase>,NiPointer>::`vftable'; } // 9F4C28: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F4C38: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; // AB41AC: using guessed type int (__thiscall **off_AB41AC)(void *, char); // AB41B0: using guessed type int dword_AB41B0; // AB41B4: using guessed type int dword_AB41B4; // AB41B8: using guessed type int dword_AB41B8; //----- (009A3290) -------------------------------------------------------- void __cdecl sub_9A3290() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB418C = (int (__thiscall **)(void *, char))&NiTPointerListBase>,NiPointer>::`vftable'; v0 = (_DWORD *)dword_AB4190; if ( dword_AB4190 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB418C[2](&off_AB418C, (char)v1); } while ( v0 ); } dword_AB4198 = 0; dword_AB4190 = 0; dword_AB4194 = 0; off_AB418C = (int (__thiscall **)(void *, char))&NiTListBase>,NiPointer>::`vftable'; } // 9F4C28: using guessed type void *NiTListBase>,NiPointer>::`vftable'; // 9F4C38: using guessed type void *NiTPointerListBase>,NiPointer>::`vftable'; // AB418C: using guessed type int (__thiscall **off_AB418C)(void *, char); // AB4190: using guessed type int dword_AB4190; // AB4194: using guessed type int dword_AB4194; // AB4198: using guessed type int dword_AB4198; //----- (009A3310) -------------------------------------------------------- void __cdecl sub_9A3310() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_AD922C; v2 = 0; sub_6CDE90(&unk_AD9228, (int *)&v1, v0, dword_AD922C); operator delete(dword_AD922C); } //----- (009A3370) -------------------------------------------------------- void __cdecl sub_9A3370() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_AD920C; v2 = 0; sub_6CDE90(&unk_AD9208, (int *)&v1, v0, dword_AD920C); operator delete(dword_AD920C); } //----- (009A33D0) -------------------------------------------------------- void __cdecl sub_9A33D0() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_AD921C; v2 = 0; sub_6CDE90(&unk_AD9218, (int *)&v1, v0, dword_AD921C); operator delete(dword_AD921C); } //----- (009A3430) -------------------------------------------------------- void __cdecl sub_9A3430() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_AD91F4; v2 = 0; sub_6CDE90(&unk_AD91F0, (int *)&v1, v0, dword_AD91F4); operator delete(dword_AD91F4); } //----- (009A3490) -------------------------------------------------------- void __cdecl sub_9A3490() { sub_681D90(byte_AD9238); } //----- (009A34A0) -------------------------------------------------------- void __cdecl sub_9A34A0() { dword_AD9E70 = (int)&ItemAuthority::`vftable'; sub_74DDC0(&dword_AD9E70); } // 9F4D20: using guessed type void *ItemAuthority::`vftable'; // AD9E70: using guessed type int dword_AD9E70; //----- (009A34C0) -------------------------------------------------------- void __cdecl sub_9A34C0() { sub_682EA0(&unk_ADA1E0); } //----- (009A34D0) -------------------------------------------------------- void __cdecl sub_9A34D0() { sub_74E270(&unk_ADB2A8); } //----- (009A34E0) -------------------------------------------------------- void __cdecl sub_9A34E0() { sub_685CC0((int)&byte_ADA230); } // ADA230: using guessed type char byte_ADA230; //----- (009A34F0) -------------------------------------------------------- void __cdecl sub_9A34F0() { if ( dword_ADB440 ) operator delete(dword_ADB440); dword_ADB440 = 0; dword_ADB444 = 0; dword_ADB448 = 0; sub_6CCEF0((void ***)&dword_ADB434); operator delete(dword_ADB434); } // ADB444: using guessed type int dword_ADB444; // ADB448: using guessed type int dword_ADB448; //----- (009A3540) -------------------------------------------------------- void __cdecl sub_9A3540() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_ADB45C; if ( dword_ADB45C && !InterlockedDecrement((volatile LONG *)(dword_ADB45C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // ADB45C: using guessed type int dword_ADB45C; //----- (009A3570) -------------------------------------------------------- void __cdecl sub_9A3570() { sub_6839A0(&off_AB4EE0); } // AB4EE0: using guessed type void **off_AB4EE0; //----- (009A3580) -------------------------------------------------------- void __cdecl sub_9A3580() { sub_690130((void **)byte_ADB468); } //----- (009A3590) -------------------------------------------------------- void __cdecl sub_9A3590() { operator delete[](dword_B68418); dword_B68418 = 0; operator delete[](dword_B6842C); dword_B6842C = 0; } //----- (009A35C0) -------------------------------------------------------- void __cdecl sub_9A35C0() { if ( (unsigned int)dword_AB5258 >= 0x10 ) operator delete(dword_AB5244); dword_AB5258 = 15; dword_AB5254 = 0; LOBYTE(dword_AB5244) = 0; } // AB5254: using guessed type int dword_AB5254; // AB5258: using guessed type int dword_AB5258; //----- (009A35F0) -------------------------------------------------------- void __cdecl sub_9A35F0() { if ( (unsigned int)dword_AB5274 >= 0x10 ) operator delete(dword_AB5260); dword_AB5274 = 15; dword_AB5270 = 0; LOBYTE(dword_AB5260) = 0; } // AB5270: using guessed type int dword_AB5270; // AB5274: using guessed type int dword_AB5274; //----- (009A3620) -------------------------------------------------------- void __cdecl sub_9A3620() { char *v0; // eax char *v1; // edi char *v2; // esi operator delete[](*((void **)&byte_B68508 + 21283)); operator delete[](*((void **)&byte_B68508 + 21284)); v0 = (char *)*((_DWORD *)&byte_B68508 + 21282); if ( v0 ) { v1 = v0 - 4; `eh vector destructor iterator'(v0, 0x10u, *((_DWORD *)v0 - 1), nullsub_6); operator delete[](v1); } v2 = (char *)*((_DWORD *)&byte_B68508 + 21294); if ( v2 ) { `eh vector destructor iterator'(v2, 0x12u, *((_DWORD *)v2 - 1), nullsub_6); operator delete[](v2 - 4); } } // B68508: using guessed type char byte_B68508; //----- (009A3630) -------------------------------------------------------- void __cdecl sub_9A3630() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD *)dword_B911DC; v2 = 0; sub_6A4190(&unk_B911D8, (int *)&v1, v0, (int)dword_B911DC); operator delete(dword_B911DC); } //----- (009A3690) -------------------------------------------------------- void __cdecl sub_9A3690() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD *)dword_B911EC; v2 = 0; sub_6A4190(&unk_B911E8, (int *)&v1, v0, (int)dword_B911EC); operator delete(dword_B911EC); } //----- (009A36F0) -------------------------------------------------------- void __cdecl sub_9A36F0() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_B91228; v0 = *(_DWORD *)dword_B9122C; LOBYTE(v3) = 1; sub_4847E0(&unk_B91228, (int *)&v1, v0, (int)dword_B9122C); operator delete(dword_B9122C); if ( (unsigned int)dword_B9121C >= 0x10 ) operator delete(dword_B91208); dword_B9121C = 15; dword_B91218 = 0; LOBYTE(dword_B91208) = 0; } // B91218: using guessed type int dword_B91218; // B9121C: using guessed type int dword_B9121C; //----- (009A3790) -------------------------------------------------------- void __cdecl sub_9A3790() { sub_6ACFB0((char *)&unk_B91250); } //----- (009A37A0) -------------------------------------------------------- void __cdecl sub_9A37A0() { sub_6B21C0(&unk_B912C8); } //----- (009A37B0) -------------------------------------------------------- void __cdecl sub_9A37B0() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB5C24 = (int (__thiscall **)(void *, char))&NiTPointerListBase,SoundGroup *>::`vftable'; v0 = (_DWORD *)dword_AB5C28; if ( dword_AB5C28 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB5C24[2](&off_AB5C24, (char)v1); } while ( v0 ); } dword_AB5C30 = 0; dword_AB5C28 = 0; dword_AB5C2C = 0; off_AB5C24 = (int (__thiscall **)(void *, char))&NiTListBase,SoundGroup *>::`vftable'; } // 9F779C: using guessed type void *NiTListBase,SoundGroup *>::`vftable'; // 9F77BC: using guessed type void *NiTPointerListBase,SoundGroup *>::`vftable'; // AB5C24: using guessed type int (__thiscall **off_AB5C24)(void *, char); // AB5C28: using guessed type int dword_AB5C28; // AB5C2C: using guessed type int dword_AB5C2C; // AB5C30: using guessed type int dword_AB5C30; //----- (009A3830) -------------------------------------------------------- void __cdecl sub_9A3830() { if ( dword_B91648 ) { (**(void (***)(void))dword_B91648)(); if ( dword_B91648 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_B91648 + 8))(1); dword_B91648 = 0; } } // B91648: using guessed type int dword_B91648; //----- (009A3860) -------------------------------------------------------- void __cdecl sub_9A3860() { sub_6BAA70(&dword_AB6520); } //----- (009A3880) -------------------------------------------------------- void __cdecl sub_9A3880() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB66A8 = &PgTList::`vftable'; v0 = (_DWORD *)dword_AB66AC; if ( dword_AB66AC ) { do { v1 = v0; v0 = (_DWORD *)*v0; ((void (__thiscall *)(void ***, _DWORD *))off_AB66A8[2])(&off_AB66A8, v1); } while ( v0 ); } dword_AB66B4 = 0; dword_AB66AC = 0; dword_AB66B0 = 0; off_AB66A8 = &NiTListBase,MachineOpt::WinPos *>::`vftable'; } // 9F863C: using guessed type void *NiTListBase,MachineOpt::WinPos *>::`vftable'; // 9F866C: using guessed type void *PgTList::`vftable'; // AB66A8: using guessed type void **off_AB66A8; // AB66AC: using guessed type int dword_AB66AC; // AB66B0: using guessed type int dword_AB66B0; // AB66B4: using guessed type int dword_AB66B4; //----- (009A3900) -------------------------------------------------------- void __cdecl sub_9A3900() { if ( dword_ACEA9C ) { (**(void (***)(void))dword_ACEA9C)(); if ( dword_ACEA9C ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACEA9C + 8))(1); dword_ACEA9C = 0; } } // ACEA9C: using guessed type int dword_ACEA9C; //----- (009A3930) -------------------------------------------------------- void __cdecl sub_9A3930() { if ( dword_ACEAA8 ) { (**(void (***)(void))dword_ACEAA8)(); if ( dword_ACEAA8 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACEAA8 + 8))(1); dword_ACEAA8 = 0; } } // ACEAA8: using guessed type int dword_ACEAA8; //----- (009A3960) -------------------------------------------------------- void __cdecl sub_9A3960() { if ( dword_ACE8D0 ) { (**(void (***)(void))dword_ACE8D0)(); if ( dword_ACE8D0 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACE8D0 + 8))(1); dword_ACE8D0 = 0; } } // ACE8D0: using guessed type int dword_ACE8D0; //----- (009A3990) -------------------------------------------------------- void __cdecl sub_9A3990() { if ( dword_ACED88 ) { (**(void (***)(void))dword_ACED88)(); if ( dword_ACED88 ) (*(void (__stdcall **)(signed int))(*(_DWORD *)dword_ACED88 + 8))(1); dword_ACED88 = 0; } } // ACED88: using guessed type int dword_ACED88; //----- (009A39C0) -------------------------------------------------------- void __cdecl sub_9A39C0() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB6E90 = &PgTList>::`vftable'; v0 = (_DWORD *)dword_AB6E94; if ( dword_AB6E94 ) { do { v1 = v0; v0 = (_DWORD *)*v0; ((void (__thiscall *)(void ***, _DWORD *))off_AB6E90[2])(&off_AB6E90, v1); } while ( v0 ); } dword_AB6E9C = 0; dword_AB6E94 = 0; dword_AB6E98 = 0; off_AB6E90 = &NiTListBase,NiPointer>::`vftable'; } // 9F875C: using guessed type void *NiTListBase,NiPointer>::`vftable'; // 9F885C: using guessed type void *PgTList>::`vftable'; // AB6E90: using guessed type void **off_AB6E90; // AB6E94: using guessed type int dword_AB6E94; // AB6E98: using guessed type int dword_AB6E98; // AB6E9C: using guessed type int dword_AB6E9C; //----- (009A3A40) -------------------------------------------------------- void __cdecl sub_9A3A40() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB6EA0 = (int (__thiscall **)(void *, char))&NiTPointerListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; v0 = (_DWORD *)dword_AB6EA4; if ( dword_AB6EA4 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB6EA0[2](&off_AB6EA0, (char)v1); } while ( v0 ); } dword_AB6EAC = 0; dword_AB6EA4 = 0; dword_AB6EA8 = 0; off_AB6EA0 = (int (__thiscall **)(void *, char))&NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; } // 9F876C: using guessed type void *NiTListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; // 9F879C: using guessed type void *NiTPointerListBase,SkillEmpowerRequest::EmpowerReq *>::`vftable'; // AB6EA0: using guessed type int (__thiscall **off_AB6EA0)(void *, char); // AB6EA4: using guessed type int dword_AB6EA4; // AB6EA8: using guessed type int dword_AB6EA8; // AB6EAC: using guessed type int dword_AB6EAC; //----- (009A3AC0) -------------------------------------------------------- void __cdecl sub_9A3AC0() { dword_B9DC70 = (int)&Party::`vftable'; `eh vector destructor iterator'(&unk_B9DCC8, 0x44u, 5, nullsub_6); } // 9F88D4: using guessed type void *Party::`vftable'; // B9DC70: using guessed type int dword_B9DC70; //----- (009A3AE0) -------------------------------------------------------- void __cdecl sub_9A3AE0() { if ( dword_B9DE38 ) operator delete(dword_B9DE38); dword_B9DE38 = 0; dword_B9DE3C = 0; dword_B9DE40 = 0; sub_6CCEF0((void ***)&dword_B9DE2C); operator delete(dword_B9DE2C); } // B9DE3C: using guessed type int dword_B9DE3C; // B9DE40: using guessed type int dword_B9DE40; //----- (009A3B30) -------------------------------------------------------- void __cdecl sub_9A3B30() { sub_49FA00(&off_AB6EF8); } // AB6EF8: using guessed type void **off_AB6EF8; //----- (009A3B40) -------------------------------------------------------- void __cdecl sub_9A3B40() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9DE5C; if ( dword_B9DE5C && !InterlockedDecrement((volatile LONG *)(dword_B9DE5C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9DE5C: using guessed type int dword_B9DE5C; //----- (009A3B70) -------------------------------------------------------- void __cdecl sub_9A3B70() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9DE64; if ( dword_B9DE64 && !InterlockedDecrement((volatile LONG *)(dword_B9DE64 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9DE64: using guessed type int dword_B9DE64; //----- (009A3BA0) -------------------------------------------------------- void __cdecl sub_9A3BA0() { if ( dword_B9DE68[16] ) { operator delete[](dword_B9DE68[16]); dword_B9DE68[16] = 0; } dword_B9DE68[17] = 0; sub_747510(dword_B9DE68); } //----- (009A3BB0) -------------------------------------------------------- void __cdecl sub_9A3BB0() { if ( dword_B9DEC0 ) operator delete(dword_B9DEC0); dword_B9DEC0 = 0; dword_B9DEC4 = 0; dword_B9DEC8 = 0; sub_6CCEF0((void ***)&dword_B9DEB4); operator delete(dword_B9DEB4); } // B9DEC4: using guessed type int dword_B9DEC4; // B9DEC8: using guessed type int dword_B9DEC8; //----- (009A3C00) -------------------------------------------------------- void __cdecl sub_9A3C00() { sub_74F020((void **)byte_B9DFA8); } //----- (009A3C10) -------------------------------------------------------- void __cdecl sub_9A3C10() { sub_747510((void **)&unk_B9E020); } //----- (009A3C20) -------------------------------------------------------- void __cdecl sub_9A3C20() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_B9DF94; v0 = *(_DWORD **)dword_B9DF98; LOBYTE(v3) = 1; sub_6CDE90(&unk_B9DF94, (int *)&v1, v0, dword_B9DF98); operator delete(dword_B9DF98); v3 = -1; sub_74A720(&unk_B9DEE0); } //----- (009A3CA0) -------------------------------------------------------- void __cdecl sub_9A3CA0() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB76B4 = &PgTList::`vftable'; v0 = (_DWORD *)dword_AB76B8; if ( dword_AB76B8 ) { do { v1 = v0; v0 = (_DWORD *)*v0; ((void (__thiscall *)(void ***, _DWORD *))off_AB76B4[2])(&off_AB76B4, v1); } while ( v0 ); } dword_AB76C0 = 0; dword_AB76B8 = 0; dword_AB76BC = 0; off_AB76B4 = &NiTListBase,QuestMC *>::`vftable'; } // 9F8EB8: using guessed type void *NiTListBase,QuestMC *>::`vftable'; // 9F8F38: using guessed type void *PgTList::`vftable'; // AB76B4: using guessed type void **off_AB76B4; // AB76B8: using guessed type int dword_AB76B8; // AB76BC: using guessed type int dword_AB76BC; // AB76C0: using guessed type int dword_AB76C0; //----- (009A3D20) -------------------------------------------------------- void __cdecl sub_9A3D20() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E15C; if ( dword_B9E15C && !InterlockedDecrement((volatile LONG *)(dword_B9E15C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E15C: using guessed type int dword_B9E15C; //----- (009A3D50) -------------------------------------------------------- void __cdecl sub_9A3D50() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E160; if ( dword_B9E160 && !InterlockedDecrement((volatile LONG *)(dword_B9E160 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E160: using guessed type int dword_B9E160; //----- (009A3D80) -------------------------------------------------------- void __cdecl sub_9A3D80() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E164; if ( dword_B9E164 && !InterlockedDecrement((volatile LONG *)(dword_B9E164 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E164: using guessed type int dword_B9E164; //----- (009A3DB0) -------------------------------------------------------- void __cdecl sub_9A3DB0() { if ( (unsigned int)dword_AB7930 >= 0x10 ) operator delete(dword_AB791C); dword_AB7930 = 15; dword_AB792C = 0; LOBYTE(dword_AB791C) = 0; } // AB792C: using guessed type int dword_AB792C; // AB7930: using guessed type int dword_AB7930; //----- (009A3DE0) -------------------------------------------------------- void __cdecl sub_9A3DE0() { if ( (unsigned int)dword_AB794C >= 0x10 ) operator delete(dword_AB7938); dword_AB794C = 15; dword_AB7948 = 0; LOBYTE(dword_AB7938) = 0; } // AB794C: using guessed type int dword_AB794C; //----- (009A3E10) -------------------------------------------------------- void __cdecl sub_9A3E10() { if ( (unsigned int)dword_AB7968 >= 0x10 ) operator delete(dword_AB7954); dword_AB7968 = 15; dword_AB7964 = 0; LOBYTE(dword_AB7954) = 0; } // AB7964: using guessed type int dword_AB7964; // AB7968: using guessed type int dword_AB7968; //----- (009A3E40) -------------------------------------------------------- void __cdecl sub_9A3E40() { if ( (unsigned int)dword_AB7984 >= 0x10 ) operator delete(dword_AB7970); dword_AB7984 = 15; dword_AB7980 = 0; LOBYTE(dword_AB7970) = 0; } // AB7980: using guessed type int dword_AB7980; // AB7984: using guessed type int dword_AB7984; //----- (009A3E70) -------------------------------------------------------- void __cdecl sub_9A3E70() { if ( (unsigned int)dword_AB7A0C >= 0x10 ) operator delete(dword_AB79F8); dword_AB7A0C = 15; dword_AB7A08 = 0; LOBYTE(dword_AB79F8) = 0; } // AB7A08: using guessed type int dword_AB7A08; // AB7A0C: using guessed type int dword_AB7A0C; //----- (009A3EA0) -------------------------------------------------------- void __cdecl sub_9A3EA0() { if ( (unsigned int)dword_AB7A28 >= 0x10 ) operator delete(dword_AB7A14); dword_AB7A28 = 15; dword_AB7A24 = 0; LOBYTE(dword_AB7A14) = 0; } // AB7A24: using guessed type int dword_AB7A24; // AB7A28: using guessed type int dword_AB7A28; //----- (009A3ED0) -------------------------------------------------------- void __cdecl sub_9A3ED0() { if ( (unsigned int)dword_AB7A44 >= 0x10 ) operator delete(dword_AB7A30); dword_AB7A44 = 15; dword_AB7A40 = 0; LOBYTE(dword_AB7A30) = 0; } // AB7A40: using guessed type int dword_AB7A40; // AB7A44: using guessed type int dword_AB7A44; //----- (009A3F00) -------------------------------------------------------- void __cdecl sub_9A3F00() { if ( (unsigned int)dword_AB7A60 >= 0x10 ) operator delete(dword_AB7A4C); dword_AB7A60 = 15; dword_AB7A5C = 0; LOBYTE(dword_AB7A4C) = 0; } // AB7A60: using guessed type int dword_AB7A60; //----- (009A3F30) -------------------------------------------------------- void __cdecl sub_9A3F30() { if ( (unsigned int)dword_AB7A7C >= 0x10 ) operator delete(dword_AB7A68); dword_AB7A7C = 15; dword_AB7A78 = 0; LOBYTE(dword_AB7A68) = 0; } // AB7A78: using guessed type int dword_AB7A78; // AB7A7C: using guessed type int dword_AB7A7C; //----- (009A3F60) -------------------------------------------------------- void __cdecl sub_9A3F60() { if ( (unsigned int)dword_AB7A98 >= 0x10 ) operator delete(dword_AB7A84); dword_AB7A98 = 15; dword_AB7A94 = 0; LOBYTE(dword_AB7A84) = 0; } // AB7A94: using guessed type int dword_AB7A94; // AB7A98: using guessed type int dword_AB7A98; //----- (009A3F90) -------------------------------------------------------- void __cdecl sub_9A3F90() { if ( (unsigned int)dword_AB7AB4 >= 0x10 ) operator delete(dword_AB7AA0); dword_AB7AB4 = 15; dword_AB7AB0 = 0; LOBYTE(dword_AB7AA0) = 0; } // AB7AB0: using guessed type int dword_AB7AB0; // AB7AB4: using guessed type int dword_AB7AB4; //----- (009A3FC0) -------------------------------------------------------- void __cdecl sub_9A3FC0() { if ( (unsigned int)dword_AB7AD0 >= 0x10 ) operator delete(dword_AB7ABC); dword_AB7AD0 = 15; dword_AB7ACC = 0; LOBYTE(dword_AB7ABC) = 0; } // AB7ACC: using guessed type int dword_AB7ACC; // AB7AD0: using guessed type int dword_AB7AD0; //----- (009A3FF0) -------------------------------------------------------- void __cdecl sub_9A3FF0() { if ( (unsigned int)dword_AB7AEC >= 0x10 ) operator delete(dword_AB7AD8); dword_AB7AEC = 15; dword_AB7AE8 = 0; LOBYTE(dword_AB7AD8) = 0; } // AB7AE8: using guessed type int dword_AB7AE8; // AB7AEC: using guessed type int dword_AB7AEC; //----- (009A4020) -------------------------------------------------------- void __cdecl sub_9A4020() { if ( (unsigned int)dword_AB7B08 >= 0x10 ) operator delete(dword_AB7AF4); dword_AB7B08 = 15; dword_AB7B04 = 0; LOBYTE(dword_AB7AF4) = 0; } // AB7B04: using guessed type int dword_AB7B04; // AB7B08: using guessed type int dword_AB7B08; //----- (009A4050) -------------------------------------------------------- void __cdecl sub_9A4050() { _DWORD *v0; // ST04_4 char v1; // [esp+4h] [ebp-10h] int v2; // [esp+10h] [ebp-4h] v0 = *(_DWORD **)dword_B9E1D0; v2 = 0; sub_6CDE90(&unk_B9E1CC, (int *)&v1, v0, dword_B9E1D0); operator delete(dword_B9E1D0); } //----- (009A40B0) -------------------------------------------------------- void __cdecl sub_9A40B0() { if ( (unsigned int)dword_AB7B74 >= 0x10 ) operator delete(dword_AB7B60); dword_AB7B74 = 15; dword_AB7B70 = 0; LOBYTE(dword_AB7B60) = 0; } // AB7B70: using guessed type int dword_AB7B70; // AB7B74: using guessed type int dword_AB7B74; //----- (009A40E0) -------------------------------------------------------- void __cdecl sub_9A40E0() { if ( (unsigned int)dword_AB7B90 >= 0x10 ) operator delete(dword_AB7B7C); dword_AB7B90 = 15; dword_AB7B8C = 0; LOBYTE(dword_AB7B7C) = 0; } // AB7B8C: using guessed type int dword_AB7B8C; // AB7B90: using guessed type int dword_AB7B90; //----- (009A4110) -------------------------------------------------------- void __cdecl sub_9A4110() { if ( (unsigned int)dword_AB7BAC >= 0x10 ) operator delete(dword_AB7B98); dword_AB7BAC = 15; dword_AB7BA8 = 0; LOBYTE(dword_AB7B98) = 0; } // AB7BA8: using guessed type int dword_AB7BA8; // AB7BAC: using guessed type int dword_AB7BAC; //----- (009A4140) -------------------------------------------------------- void __cdecl sub_9A4140() { if ( (unsigned int)dword_AB7BC8 >= 0x10 ) operator delete(dword_AB7BB4); dword_AB7BC8 = 15; dword_AB7BC4 = 0; LOBYTE(dword_AB7BB4) = 0; } // AB7BC4: using guessed type int dword_AB7BC4; // AB7BC8: using guessed type int dword_AB7BC8; //----- (009A4170) -------------------------------------------------------- void __cdecl sub_9A4170() { if ( (unsigned int)dword_AB7BE4 >= 0x10 ) operator delete(dword_AB7BD0); dword_AB7BE4 = 15; dword_AB7BE0 = 0; LOBYTE(dword_AB7BD0) = 0; } // AB7BE0: using guessed type int dword_AB7BE0; // AB7BE4: using guessed type int dword_AB7BE4; //----- (009A41A0) -------------------------------------------------------- void __cdecl sub_9A41A0() { if ( (unsigned int)dword_AB7C00 >= 0x10 ) operator delete(dword_AB7BEC); dword_AB7C00 = 15; dword_AB7BFC = 0; LOBYTE(dword_AB7BEC) = 0; } // AB7BFC: using guessed type int dword_AB7BFC; // AB7C00: using guessed type int dword_AB7C00; //----- (009A41D0) -------------------------------------------------------- void __cdecl sub_9A41D0() { if ( (unsigned int)dword_AB7C1C >= 0x10 ) operator delete(dword_AB7C08); dword_AB7C1C = 15; dword_AB7C18 = 0; LOBYTE(dword_AB7C08) = 0; } // AB7C18: using guessed type int dword_AB7C18; // AB7C1C: using guessed type int dword_AB7C1C; //----- (009A4200) -------------------------------------------------------- void __cdecl sub_9A4200() { if ( (unsigned int)dword_AB7C38 >= 0x10 ) operator delete(dword_AB7C24); dword_AB7C38 = 15; dword_AB7C34 = 0; LOBYTE(dword_AB7C24) = 0; } // AB7C34: using guessed type int dword_AB7C34; // AB7C38: using guessed type int dword_AB7C38; //----- (009A4230) -------------------------------------------------------- void __cdecl sub_9A4230() { if ( (unsigned int)dword_AB7C54 >= 0x10 ) operator delete(dword_AB7C40); dword_AB7C54 = 15; dword_AB7C50 = 0; LOBYTE(dword_AB7C40) = 0; } // AB7C50: using guessed type int dword_AB7C50; // AB7C54: using guessed type int dword_AB7C54; //----- (009A4260) -------------------------------------------------------- void __cdecl sub_9A4260() { _DWORD *v0; // esi _DWORD *v1; // ST04_4 off_AB7EDC = (int (__thiscall **)(void *, char))&NiTPointerListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; v0 = (_DWORD *)dword_AB7EE0; if ( dword_AB7EE0 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AB7EDC[2](&off_AB7EDC, (char)v1); } while ( v0 ); } dword_AB7EE8 = 0; dword_AB7EE0 = 0; dword_AB7EE4 = 0; off_AB7EDC = (int (__thiscall **)(void *, char))&NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; } // 9FC708: using guessed type void *NiTListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; // 9FC718: using guessed type void *NiTPointerListBase,PROTO_CHARGEDBUFF_INFO *>::`vftable'; // AB7EDC: using guessed type int (__thiscall **off_AB7EDC)(void *, char); // AB7EE0: using guessed type int dword_AB7EE0; // AB7EE4: using guessed type int dword_AB7EE4; // AB7EE8: using guessed type int dword_AB7EE8; //----- (009A42F0) -------------------------------------------------------- void __cdecl sub_9A42F0() { sub_6F3770(&off_AB7F2C); } // AB7F2C: using guessed type void **off_AB7F2C; //----- (009A4410) -------------------------------------------------------- void __cdecl sub_9A4410() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E408; if ( dword_B9E408 && !InterlockedDecrement((volatile LONG *)(dword_B9E408 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E408: using guessed type int dword_B9E408; //----- (009A4440) -------------------------------------------------------- void __cdecl sub_9A4440() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E424; if ( dword_B9E424 && !InterlockedDecrement((volatile LONG *)(dword_B9E424 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E424: using guessed type int dword_B9E424; //----- (009A4470) -------------------------------------------------------- void __cdecl sub_9A4470() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E42C; if ( dword_B9E42C && !InterlockedDecrement((volatile LONG *)(dword_B9E42C + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E42C: using guessed type int dword_B9E42C; //----- (009A44A0) -------------------------------------------------------- void __cdecl sub_9A44A0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_B9E430; if ( dword_B9E430 && !InterlockedDecrement((volatile LONG *)(dword_B9E430 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // B9E430: using guessed type int dword_B9E430; //----- (009A44D0) -------------------------------------------------------- void __cdecl sub_9A44D0() { `eh vector destructor iterator'(dword_B9E440, 4u, 72, sub_410C00); } //----- (009A44F0) -------------------------------------------------------- void __cdecl sub_9A44F0() { dword_B9E560 = (int)&RaidInfo::`vftable'; `eh vector destructor iterator'(dword_B9E5E4, 0x10u, 4, sub_467570); if ( dword_B9E580 ) operator delete(dword_B9E580); dword_B9E580 = 0; dword_B9E584 = 0; dword_B9E588 = 0; } // A01870: using guessed type void *RaidInfo::`vftable'; // B9E560: using guessed type int dword_B9E560; // B9E584: using guessed type int dword_B9E584; // B9E588: using guessed type int dword_B9E588; // B9E5E4: using guessed type int dword_B9E5E4[]; //----- (009A4570) -------------------------------------------------------- void __cdecl sub_9A4570() { nullsub_6(&unk_BA05CC); nullsub_6(&unk_BA05B8); if ( dword_BA05A8 ) operator delete(dword_BA05A8); dword_BA05A8 = 0; dword_BA05AC = 0; dword_BA05B0 = 0; nullsub_6(&unk_BA0594); } // BA05AC: using guessed type int dword_BA05AC; // BA05B0: using guessed type int dword_BA05B0; //----- (009A4610) -------------------------------------------------------- void __cdecl sub_9A4610() { `eh vector destructor iterator'(&unk_BA0614, 0x41u, 51, nullsub_6); } //----- (009A4624) -------------------------------------------------------- void __cdecl sub_9A4624() { off_ABA238 = (int (__thiscall *)(void *, char))&std::error_category::`vftable'; } // A1077C: using guessed type void *std::error_category::`vftable'; // ABA238: using guessed type int (__thiscall *off_ABA238)(void *, char); //----- (009A462F) -------------------------------------------------------- void __cdecl sub_9A462F() { off_ABA240 = (int (__thiscall *)(void *, char))&std::error_category::`vftable'; } // A1077C: using guessed type void *std::error_category::`vftable'; // ABA240: using guessed type int (__thiscall *off_ABA240)(void *, char); //----- (009A463A) -------------------------------------------------------- void __cdecl sub_9A463A() { off_ABA248 = (int (__thiscall *)(void *, char))&std::error_category::`vftable'; } // A1077C: using guessed type void *std::error_category::`vftable'; // ABA248: using guessed type int (__thiscall *off_ABA248)(void *, char); //----- (009A4645) -------------------------------------------------------- void __cdecl sub_9A4645() { struct _RTL_CRITICAL_SECTION *v0; // esi if ( InterlockedDecrement(&dword_ABA278) < 0 ) { v0 = &stru_BA29C0; do { _Mtxdst(v0); ++v0; } while ( (signed int)v0 < (signed int)&unk_BA2A20 ); } } //----- (009A464F) -------------------------------------------------------- void __cdecl sub_9A464F() { sub_422F90(&dword_BA2A44); } // BA2A44: using guessed type int dword_BA2A44; //----- (009A4659) -------------------------------------------------------- void __cdecl sub_9A4659() { unknown_libname_22(&unk_BA2A4C); } // 7D3A9B: using guessed type int __thiscall unknown_libname_22(_DWORD); //----- (009A4663) -------------------------------------------------------- void __cdecl sub_9A4663() { struct _RTL_CRITICAL_SECTION *v0; // esi if ( InterlockedDecrement(&dword_ABA278) < 0 ) { v0 = &stru_BA29C0; do { _Mtxdst(v0); ++v0; } while ( (signed int)v0 < (signed int)&unk_BA2A20 ); } } //----- (009A466D) -------------------------------------------------------- void __cdecl sub_9A466D() { _DWORD *v0; // eax v0 = &dword_BA2AE8[2]; *(_DWORD *)((char *)v0 + *(_DWORD *)(dword_BA2AE8[0] + 4) - 8) = &std::basic_ostream>::`vftable'; *v0 = &std::ios_base::`vftable'; std::ios_base::_Ios_base_dtor((struct std::ios_base *)&dword_BA2AE8[2]); } // 9AB468: using guessed type void *std::ios_base::`vftable'; // 9C6CE0: using guessed type void *std::basic_ostream>::`vftable'; //----- (009A4677) -------------------------------------------------------- void __cdecl sub_9A4677() { sub_427340(&dword_BA2A90); } // BA2A90: using guessed type int dword_BA2A90; //----- (009A4681) -------------------------------------------------------- void __cdecl sub_9A4681() { struct _RTL_CRITICAL_SECTION *v0; // esi if ( InterlockedDecrement(&dword_ABA278) < 0 ) { v0 = &stru_BA29C0; do { _Mtxdst(v0); ++v0; } while ( (signed int)v0 < (signed int)&unk_BA2A20 ); } } //----- (009A468B) -------------------------------------------------------- void __cdecl sub_9A468B() { _Init_atexit::~_Init_atexit((_Init_atexit *)&unk_BA2B85); } //----- (009A4695) -------------------------------------------------------- void __cdecl sub_9A4695() { dword_BA2C80 = &std::bad_alloc::`vftable'; sub_7D43CE((std::exception *)&dword_BA2C80); } // 9A655C: using guessed type void *std::bad_alloc::`vftable'; //----- (009A46B0) -------------------------------------------------------- void __cdecl sub_9A46B0() { DeleteCriticalSection(&stru_BA3B34); } //----- (009A46C0) -------------------------------------------------------- void __cdecl sub_9A46C0() { dword_BA4514 = (int)&NiBoundingVolume::`vftable'; } // A2395C: using guessed type void *NiBoundingVolume::`vftable'; // BA4514: using guessed type int dword_BA4514; //----- (009A46D0) -------------------------------------------------------- void __cdecl sub_9A46D0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA45B0; if ( dword_BA45B0 && !InterlockedDecrement((volatile LONG *)(dword_BA45B0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA45B0: using guessed type int dword_BA45B0; //----- (009A4700) -------------------------------------------------------- void __cdecl sub_9A4700() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA46EC; if ( dword_BA46EC && !InterlockedDecrement((volatile LONG *)(dword_BA46EC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA46EC: using guessed type int dword_BA46EC; //----- (009A4730) -------------------------------------------------------- void __cdecl sub_9A4730() { DeleteCriticalSection(&CriticalSection); } //----- (009A4740) -------------------------------------------------------- void __cdecl sub_9A4740() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4720; if ( dword_BA4720 && !InterlockedDecrement((volatile LONG *)(dword_BA4720 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4720: using guessed type int dword_BA4720; //----- (009A4770) -------------------------------------------------------- void __cdecl sub_9A4770() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4738; if ( dword_BA4738 && !InterlockedDecrement((volatile LONG *)(dword_BA4738 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4738: using guessed type int dword_BA4738; //----- (009A47A0) -------------------------------------------------------- void __cdecl sub_9A47A0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4770; if ( dword_BA4770 && !InterlockedDecrement((volatile LONG *)(dword_BA4770 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4770: using guessed type int dword_BA4770; //----- (009A47D0) -------------------------------------------------------- void __cdecl sub_9A47D0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4784; if ( dword_BA4784 && !InterlockedDecrement((volatile LONG *)(dword_BA4784 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4784: using guessed type int dword_BA4784; //----- (009A4800) -------------------------------------------------------- void __cdecl sub_9A4800() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA47DC; if ( dword_BA47DC && !InterlockedDecrement((volatile LONG *)(dword_BA47DC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA47DC: using guessed type int dword_BA47DC; //----- (009A4830) -------------------------------------------------------- void __cdecl sub_9A4830() { DeleteCriticalSection(&stru_BA4810); } //----- (009A4840) -------------------------------------------------------- void __cdecl sub_9A4840() { DeleteCriticalSection(&stru_BA488C); } //----- (009A4850) -------------------------------------------------------- void __cdecl sub_9A4850() { char *v0; // edi signed int v1; // ebx int v2; // esi v0 = (char *)&unk_BA48D4; v1 = 9; do { v2 = *((_DWORD *)v0 - 1); v0 -= 4; if ( v2 && !InterlockedDecrement((volatile LONG *)(v2 + 4)) ) { if ( v2 ) (**(void (__thiscall ***)(int, signed int))v2)(v2, 1); } --v1; } while ( v1 >= 0 ); } //----- (009A4890) -------------------------------------------------------- void __cdecl sub_9A4890() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4924; if ( dword_BA4924 && !InterlockedDecrement((volatile LONG *)(dword_BA4924 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4924: using guessed type int dword_BA4924; //----- (009A48C0) -------------------------------------------------------- void __cdecl sub_9A48C0() { DeleteCriticalSection(&stru_BA4944); } //----- (009A48D0) -------------------------------------------------------- void __cdecl sub_9A48D0() { DeleteCriticalSection(&stru_BA4974); } //----- (009A48E0) -------------------------------------------------------- void __cdecl sub_9A48E0() { DeleteCriticalSection(&stru_BA4A08); } //----- (009A48F0) -------------------------------------------------------- void __cdecl sub_9A48F0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AB4; if ( dword_BA4AB4 && !InterlockedDecrement((volatile LONG *)(dword_BA4AB4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4AB4: using guessed type int dword_BA4AB4; //----- (009A4920) -------------------------------------------------------- void __cdecl sub_9A4920() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AC0; if ( dword_BA4AC0 && !InterlockedDecrement((volatile LONG *)(dword_BA4AC0 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4AC0: using guessed type int dword_BA4AC0; //----- (009A4950) -------------------------------------------------------- void __cdecl sub_9A4950() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4ACC; if ( dword_BA4ACC && !InterlockedDecrement((volatile LONG *)(dword_BA4ACC + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4ACC: using guessed type int dword_BA4ACC; //----- (009A4980) -------------------------------------------------------- void __cdecl sub_9A4980() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AD8; if ( dword_BA4AD8 && !InterlockedDecrement((volatile LONG *)(dword_BA4AD8 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4AD8: using guessed type int dword_BA4AD8; //----- (009A49B0) -------------------------------------------------------- void __cdecl sub_9A49B0() { void (__thiscall ***v0)(_DWORD, signed int); // esi v0 = (void (__thiscall ***)(_DWORD, signed int))dword_BA4AE4; if ( dword_BA4AE4 && !InterlockedDecrement((volatile LONG *)(dword_BA4AE4 + 4)) ) { if ( v0 ) (**v0)(v0, 1); } } // BA4AE4: using guessed type int dword_BA4AE4; //----- (009A49E0) -------------------------------------------------------- void __cdecl sub_9A49E0() { DeleteCriticalSection(&stru_BA5358); } //----- (009A49F0) -------------------------------------------------------- void __cdecl sub_9A49F0() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 v0 = (_DWORD *)dword_AC1558; off_AC1554 = (int (__thiscall **)(void *, char))&NiTPointerListBase,NSFParsedShader *>::`vftable'; if ( dword_AC1558 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AC1554[2](&off_AC1554, (char)v1); } while ( v0 ); } dword_AC1560 = 0; dword_AC1558 = 0; dword_AC155C = 0; off_AC1554 = (int (__thiscall **)(void *, char))&NiTListBase,NSFParsedShader *>::`vftable'; } // A33874: using guessed type void *NiTListBase,NSFParsedShader *>::`vftable'; // A33884: using guessed type void *NiTPointerListBase,NSFParsedShader *>::`vftable'; // AC1554: using guessed type int (__thiscall **off_AC1554)(void *, char); // AC1558: using guessed type int dword_AC1558; // AC155C: using guessed type int dword_AC155C; // AC1560: using guessed type int dword_AC1560; //----- (009A4A50) -------------------------------------------------------- void __cdecl sub_9A4A50() { sub_8D0CD0(&off_AC20E4); } // AC20E4: using guessed type void **off_AC20E4; //----- (009A4A60) -------------------------------------------------------- void __cdecl sub_9A4A60() { sub_8D0EB0(&off_AC224C); } // AC224C: using guessed type void **off_AC224C; //----- (009A4A70) -------------------------------------------------------- void __cdecl sub_9A4A70() { sub_8D10F0(&off_AC23B0); } // AC23B0: using guessed type void **off_AC23B0; //----- (009A4A80) -------------------------------------------------------- void __cdecl sub_9A4A80() { sub_8D13B0(&off_AC2538); } // AC2538: using guessed type void **off_AC2538; //----- (009A4A90) -------------------------------------------------------- void __cdecl sub_9A4A90() { char *v0; // eax int v1; // ecx char *v2; // esi int v3; // edi v0 = (char *)dword_BA6620; v1 = dword_BA6624; if ( dword_BA6620 ) { do { v2 = *(char **)&v0[v1 - 8]; v3 = *(_DWORD *)&v0[v1 - 4]; operator delete[](v0); v0 = v2; v1 = v3; } while ( v2 ); dword_BA6620 = 0; dword_BA661C = 0; } DeleteCriticalSection(&stru_BA6604); } // BA661C: using guessed type int dword_BA661C; // BA6624: using guessed type int dword_BA6624; //----- (009A4AE0) -------------------------------------------------------- void __cdecl sub_9A4AE0() { char *v0; // eax int v1; // ecx char *v2; // esi int v3; // edi v0 = (char *)dword_BA66E0; v1 = dword_BA66E4; if ( dword_BA66E0 ) { do { v2 = *(char **)&v0[v1 - 8]; v3 = *(_DWORD *)&v0[v1 - 4]; operator delete[](v0); v0 = v2; v1 = v3; } while ( v2 ); dword_BA66E0 = 0; dword_BA66DC = 0; } DeleteCriticalSection(&stru_BA66C4); } // BA66DC: using guessed type int dword_BA66DC; // BA66E4: using guessed type int dword_BA66E4; //----- (009A4B30) -------------------------------------------------------- void __cdecl sub_9A4B30() { if ( dword_BA6908 ) operator delete(dword_BA6908); dword_BA6908 = 0; dword_BA690C = 0; dword_BA6910 = 0; } // BA690C: using guessed type int dword_BA690C; // BA6910: using guessed type int dword_BA6910; //----- (009A4B70) -------------------------------------------------------- void __cdecl sub_9A4B70() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_BA69B4; v0 = *(_DWORD *)dword_BA69B8; LOBYTE(v3) = 1; sub_4847E0(&unk_BA69B4, (int *)&v1, v0, (int)dword_BA69B8); operator delete(dword_BA69B8); if ( (unsigned int)dword_BA69A8 >= 0x10 ) operator delete(dword_BA6994); dword_BA69A8 = 15; dword_BA69A4 = 0; LOBYTE(dword_BA6994) = 0; } // BA69A4: using guessed type int dword_BA69A4; // BA69A8: using guessed type int dword_BA69A8; //----- (009A4C10) -------------------------------------------------------- void __cdecl sub_9A4C10() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_BA6984; v0 = *(_DWORD *)dword_BA6988; LOBYTE(v3) = 1; sub_4847E0(&unk_BA6984, (int *)&v1, v0, (int)dword_BA6988); operator delete(dword_BA6988); if ( (unsigned int)dword_BA6978 >= 0x10 ) operator delete(dword_BA6964); dword_BA6978 = 15; dword_BA6974 = 0; LOBYTE(dword_BA6964) = 0; } // BA6974: using guessed type int dword_BA6974; // BA6978: using guessed type int dword_BA6978; //----- (009A4CB0) -------------------------------------------------------- void __cdecl sub_9A4CB0() { int v0; // ST04_4 char v1; // [esp+4h] [ebp-14h] void *v2; // [esp+8h] [ebp-10h] int v3; // [esp+14h] [ebp-4h] v3 = 0; v2 = &unk_BA6954; v0 = *(_DWORD *)dword_BA6958; LOBYTE(v3) = 1; sub_4847E0(&unk_BA6954, (int *)&v1, v0, (int)dword_BA6958); operator delete(dword_BA6958); if ( (unsigned int)dword_BA6948 >= 0x10 ) operator delete(dword_BA6934); dword_BA6948 = 15; dword_BA6944 = 0; LOBYTE(dword_BA6934) = 0; } // BA6944: using guessed type int dword_BA6944; // BA6948: using guessed type int dword_BA6948; //----- (009A4D50) -------------------------------------------------------- void __cdecl sub_9A4D50() { sub_8EF420(&unk_BA6A18); } //----- (009A4D60) -------------------------------------------------------- void __cdecl sub_9A4D60() { dword_BA6A94 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6A94: using guessed type int dword_BA6A94; //----- (009A4D70) -------------------------------------------------------- void __cdecl sub_9A4D70() { dword_BA6AA0 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AA0: using guessed type int dword_BA6AA0; //----- (009A4D80) -------------------------------------------------------- void __cdecl sub_9A4D80() { dword_BA6AAC = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AAC: using guessed type int dword_BA6AAC; //----- (009A4D90) -------------------------------------------------------- void __cdecl sub_9A4D90() { dword_BA6AB8 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AB8: using guessed type int dword_BA6AB8; //----- (009A4DA0) -------------------------------------------------------- void __cdecl sub_9A4DA0() { dword_BA6AC4 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AC4: using guessed type int dword_BA6AC4; //----- (009A4DB0) -------------------------------------------------------- void __cdecl sub_9A4DB0() { dword_BA6AD0 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AD0: using guessed type int dword_BA6AD0; //----- (009A4DC0) -------------------------------------------------------- void __cdecl sub_9A4DC0() { dword_BA6ADC = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6ADC: using guessed type int dword_BA6ADC; //----- (009A4DD0) -------------------------------------------------------- void __cdecl sub_9A4DD0() { dword_BA6AE8 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AE8: using guessed type int dword_BA6AE8; //----- (009A4DE0) -------------------------------------------------------- void __cdecl sub_9A4DE0() { dword_BA6AF4 = (int)&PgWin::Bool::`vftable'; } // A41B84: using guessed type void *PgWin::Bool::`vftable'; // BA6AF4: using guessed type int dword_BA6AF4; //----- (009A4DF0) -------------------------------------------------------- void __cdecl sub_9A4DF0() { sub_8F7B50(&unk_BA6B10); } //----- (009A4E00) -------------------------------------------------------- void __cdecl sub_9A4E00() { if ( dword_BA6BB8 ) sub_402270((volatile LONG *)dword_BA6BB8); } // BA6BB8: using guessed type int dword_BA6BB8; //----- (009A4E20) -------------------------------------------------------- void __cdecl sub_9A4E20() { if ( dword_BA6BBC ) sub_402270((volatile LONG *)dword_BA6BBC); } // BA6BBC: using guessed type int dword_BA6BBC; //----- (009A4E40) -------------------------------------------------------- void __cdecl sub_9A4E40() { if ( dword_BA6BDC ) sub_402270((volatile LONG *)dword_BA6BDC); } // BA6BDC: using guessed type int dword_BA6BDC; //----- (009A4E60) -------------------------------------------------------- void __cdecl sub_9A4E60() { if ( dword_BA6BE0 ) sub_402270((volatile LONG *)dword_BA6BE0); } // BA6BE0: using guessed type int dword_BA6BE0; //----- (009A4E80) -------------------------------------------------------- void __cdecl sub_9A4E80() { sub_9094F0(&unk_BA6BF8); } //----- (009A4E90) -------------------------------------------------------- void __cdecl sub_9A4E90() { operator delete[]((void *)dword_BA6C20); } // BA6C20: using guessed type int dword_BA6C20; //----- (009A4EB0) -------------------------------------------------------- void __cdecl sub_9A4EB0() { sub_90EA80(&dword_BA6C34); } // BA6C34: using guessed type int dword_BA6C34; //----- (009A4ED0) -------------------------------------------------------- void __cdecl sub_9A4ED0() { operator delete[]((void *)dword_BA6C4C); } // BA6C4C: using guessed type int dword_BA6C4C; //----- (009A4EF6) -------------------------------------------------------- void __cdecl sub_9A4EF6() { sub_916C5A(&dword_BA6C94); } // BA6C94: using guessed type int dword_BA6C94; //----- (009A4F00) -------------------------------------------------------- void __cdecl sub_9A4F00() { off_AC4910 = &off_A4401C; } // A4401C: using guessed type int (__stdcall *off_A4401C)(int, int); // AC4910: using guessed type int (__stdcall **off_AC4910)(int, int); //----- (009A4F10) -------------------------------------------------------- void __cdecl sub_9A4F10() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 v0 = (_DWORD *)dword_AC506C; off_AC5068 = &NiTPointerListBase,unsigned int>::`vftable'; if ( dword_AC506C ) { do { v1 = v0; v0 = (_DWORD *)*v0; ((void (__thiscall *)(void ***, _DWORD *))off_AC5068[2])(&off_AC5068, v1); } while ( v0 ); } dword_AC5074 = 0; dword_AC506C = 0; dword_AC5070 = 0; off_AC5068 = &NiTListBase,unsigned int>::`vftable'; } // 9BBB6C: using guessed type void *NiTListBase,unsigned int>::`vftable'; // 9BBB9C: using guessed type void *NiTPointerListBase,unsigned int>::`vftable'; // AC5068: using guessed type void **off_AC5068; // AC506C: using guessed type int dword_AC506C; // AC5070: using guessed type int dword_AC5070; // AC5074: using guessed type int dword_AC5074; //----- (009A4F70) -------------------------------------------------------- void __cdecl sub_9A4F70() { DeleteCriticalSection(&stru_BA6EA8); } //----- (009A4F80) -------------------------------------------------------- void __cdecl sub_9A4F80() { _DWORD *v0; // esi _DWORD *v1; // ST00_4 v0 = (_DWORD *)dword_AC5928; off_AC5924 = (int (__thiscall **)(void *, char))&NiTPointerListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; if ( dword_AC5928 ) { do { v1 = v0; v0 = (_DWORD *)*v0; off_AC5924[2](&off_AC5924, (char)v1); } while ( v0 ); } dword_AC5930 = 0; dword_AC5928 = 0; dword_AC592C = 0; off_AC5924 = (int (__thiscall **)(void *, char))&NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; } // A45910: using guessed type void *NiTListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; // A45954: using guessed type void *NiTPointerListBase,NiDX9AdditionalDepthStencilBufferData *>::`vftable'; // AC5924: using guessed type int (__thiscall **off_AC5924)(void *, char); // AC5928: using guessed type int dword_AC5928; // AC592C: using guessed type int dword_AC592C; // AC5930: using guessed type int dword_AC5930; #error "There were 18 decompilation failure(s) on 25500 function(s)"